ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDQ5Mjk5ZWUuLjU5ZDM4MzIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTUsMTEgKzE1LDEzIEBACiBEb2MvdG9vbHMvcHlnbWVudHMvCiBEb2MvdG9vbHMvc3BoaW54LwogTGliL2xpYjJ0bzMvKi5waWNrbGUKK0xpYi90ZXN0L2RhdGEvKgogTGliL19zeXNjb25maWdkYXRhLnB5CiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwogTWFrZWZpbGUKIE1ha2VmaWxlLnByZQogTWlzYy9weXRob24ucGMKK01pc2MvcHl0aG9uLWNvbmZpZy5zaAogTW9kdWxlcy9TZXR1cAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKQEAgLTU3LDYgKzU5LDggQEAKIHB5YnVpbGRkaXIudHh0CiBweWNvbmZpZy5oCiBweXRob24KK3B5dGhvbi1jb25maWcKK3B5dGhvbi1jb25maWcucHkKIHB5dGhvbi5leGUKIHB5dGhvbi1nZGIucHkKIHB5dGhvbi5leGUtZ2RiLnB5CmRpZmYgLS1naXQgYS8uaGdlb2wgYi8uaGdlb2wKaW5kZXggNzNhNDc3MC4uMjkxOWY3NiAxMDA2NDQKLS0tIGEvLmhnZW9sCisrKyBiLy5oZ2VvbApAQCAtMjYsNiArMjYsNyBAQAogKioucHNkICA9IEJJTgogKioudGFyICA9IEJJTgogKioud2F2ICA9IEJJTgorKioud2hsICA9IEJJTgogKioueGFyICA9IEJJTgogKiouemlwICA9IEJJTgogCmRpZmYgLS1naXQgYS8uaGdpZ25vcmUgYi8uaGdpZ25vcmUKaW5kZXggYzQyZGQwMy4uYzY3ZmZiOCAxMDA2NDQKLS0tIGEvLmhnaWdub3JlCisrKyBiLy5oZ2lnbm9yZQpAQCAtMTksMjEgKzE5LDIwIEBACiBweWNvbmZpZy5oJAogcHl0aG9uJAogcHl0aG9uLmV4ZSQKK3B5dGhvbi1jb25maWckCitweXRob24tY29uZmlnLnB5JAogcmVmbG9nLnR4dCQKIHRhZ3MkCiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwotRG9jL3Rvb2xzL3NwaGlueC8KLURvYy90b29scy9kb2N1dGlscy8KLURvYy90b29scy9qaW5qYS8KLURvYy90b29scy9qaW5qYTIvCi1Eb2MvdG9vbHMvcHlnbWVudHMvCiBNaXNjL3B5dGhvbi5wYworTWlzYy9weXRob24tY29uZmlnLnNoJAogTW9kdWxlcy9TZXR1cCQKIE1vZHVsZXMvU2V0dXAuY29uZmlnCiBNb2R1bGVzL1NldHVwLmxvY2FsCiBNb2R1bGVzL2NvbmZpZy5jCiBNb2R1bGVzL2xkX3NvX2FpeCQKIFBhcnNlci9wZ2VuJAorXmxjb3YtcmVwb3J0LwogXmNvcmUKIF5weXRob24tZ2RiLnB5CiBecHl0aG9uLmV4ZS1nZGIucHkKQEAgLTgxLDcgKzgwLDEyIEBACiBQQ2J1aWxkLyouKnNkZgogUENidWlsZC9XaW4zMi10ZW1wLSoKIFBDYnVpbGQveDY0LXRlbXAtKgorUENidWlsZC8qLXBnaQorUENidWlsZC8qLXBnbwogUENidWlsZC9hbWQ2NAorUENidWlsZC9pcGNoCitUb29scy91bmljb2RlL2J1aWxkLworVG9vbHMvdW5pY29kZS9NQVBQSU5HUy8KIEJ1aWxkTG9nLmh0bQogX19weWNhY2hlX18KIE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIKQEAgLTg5LDMgKzkzLDcgQEAKIC5jb3ZlcmFnZQogY292ZXJhZ2UvCiBodG1sY292LworKi5nY2RhCisqLmdjbm8KKyouZ2NvdgorY292ZXJhZ2UuaW5mbwpkaWZmIC0tZ2l0IGEvLmhndGFncyBiLy5oZ3RhZ3MKaW5kZXggMzg4NWQyYy4uM2M0MmFkOCAxMDA2NDQKLS0tIGEvLmhndGFncworKysgYi8uaGd0YWdzCkBAIC0xMjMsMyArMTIzLDE2IEBACiA5ZWM4MTFkZjU0OGVkMTU0YTliZjk4MTUzODNhOTE2ZDZkZjMxYjk4IHYzLjMuNXJjMQogY2E1NjM1ZWZlMDkwZjc4ODA2MTg4YWMyNzU4Zjk5NDg1OTZhYThiMiB2My4zLjVyYzIKIDYyY2Y0ZTc3Zjc4NTY0NzE0ZTdlYTNkNGJmMTQ3OWNhMWZiZDA3NTggdjMuMy41Cis0NjUzNWY2NWU3ZjNiY2RjZjE3NmYzNmQzNGJjMWZlZDcxOWZmZDJiIHYzLjQuMGExCis5MjY1YTIxNjhlMmNiMmE4NDc4NWQ4NzE3NzkyYWNjNjYxZTZiNjkyIHYzLjQuMGEyCitkZDljZGY5MGE1MDczNTEwODc3ZTlkZDUxMTJmOGU2Y2YyMGQ1ZTg5IHYzLjQuMGEzCitlMjQ1YjBkNzIwOWJiNmQwZTE5MzE2ZTFlMmFmMWFhOWMyMTM5MTA0IHYzLjQuMGE0CiszNDA1ZGM5YTZhZmFhMGEwNmRkMWY2ZjE4MmVjNWM5OThkY2U2ZjVmIHYzLjQuMGIxCitiYTMyOTEzZWIxM2VjNTQ1YTQ2ZGQwY2UxODAzNWI2YzQxNmYwZDc4IHYzLjQuMGIyCithOTdjZTNlY2M5NmFmNzliZDJlMWFjNjZjZTQ4ZDkxMzhlMGNhNzQ5IHYzLjQuMGIzCis1ZTA4OGNlYTg2NjA2Nzc5NjkxMTM3NDFjMTMxM2Q1NzBkOTc3ZTAyIHYzLjQuMHJjMQorYTMwMDcxMmVkMzhjOWEyNDJiNzM2YzQ0ZTgwNmNhZWEyNWE2ZGMwNSB2My40LjByYzIKKzhhODFjZGFiM2U5ZDUyMWRhYWVmOTg5ZmFkZTk0YjE2NDU1ZmMzYjggdjMuNC4wcmMzCiswNGY3MTQ3NjVjMTM4MjRjM2JjMjgzNWQ3YjAwODkwODg2MmUwODNhIHYzLjQuMAorYzY3YTE5ZTExYTcxOTFiYWYzMGYzMTNiZjU1ZTJlMGI2YzZmNTc0ZSB2My40LjFyYzEKK2MwZTMxMWUwMTBmY2I1YmFlOGQ4N2NhMjIwNTFjZDA4NDVlYTBjYTAgdjMuNC4xCmRpZmYgLS1naXQgYS8uaGd0b3VjaCBiLy5oZ3RvdWNoCmluZGV4IGE2MjlkZTkuLjdlM2E1ZTcgMTAwNjQ0Ci0tLSBhLy5oZ3RvdWNoCisrKyBiLy5oZ3RvdWNoCkBAIC00LDggKzQsNyBAQAogCiBQeXRob24vaW1wb3J0bGliLmg6IExpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weSBNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKIAotSW5jbHVkZS9hc3QuaDogUGFyc2VyL1B5dGhvbi5hc2RsIFBhcnNlci9hc2RsLnB5IFBhcnNlci9hc2RsX2MucHkKLUluY2x1ZGUvUHl0aG9uLWFzdC5oOiBJbmNsdWRlL2FzdC5oCitJbmNsdWRlL1B5dGhvbi1hc3QuaDogUGFyc2VyL1B5dGhvbi5hc2RsIFBhcnNlci9hc2RsLnB5IFBhcnNlci9hc2RsX2MucHkKIFB5dGhvbi9QeXRob24tYXN0LmM6IEluY2x1ZGUvUHl0aG9uLWFzdC5oCiAKIFB5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oOiBQeXRob24vbWFrZW9wY29kZXRhcmdldHMucHkgTGliL29wY29kZS5weQpkaWZmIC0tZ2l0IGEvRG9jL01ha2VmaWxlIGIvRG9jL01ha2VmaWxlCmluZGV4IDgyZjViZWYuLjQzZGQ4MDQgMTAwNjQ0Ci0tLSBhL0RvYy9NYWtlZmlsZQorKysgYi9Eb2MvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAKICMgWW91IGNhbiBzZXQgdGhlc2UgdmFyaWFibGVzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KIFBZVEhPTiAgICAgICA9IHB5dGhvbgotU1ZOUk9PVCAgICAgID0gaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzCitTUEhJTlhCVUlMRCAgPSBzcGhpbngtYnVpbGQKIFNQSElOWE9QVFMgICA9CiBQQVBFUiAgICAgICAgPQogU09VUkNFUyAgICAgID0KQEAgLTE0LDE1ICsxNCwxNSBAQAogQUxMU1BISU5YT1BUUyA9IC1iICQoQlVJTERFUikgLWQgYnVpbGQvZG9jdHJlZXMgLUQgbGF0ZXhfcGFwZXJfc2l6ZT0kKFBBUEVSKSBcCiAgICAgICAgICAgICAgICAgJChTUEhJTlhPUFRTKSAuIGJ1aWxkLyQoQlVJTERFUikgJChTT1VSQ0VTKQogCi0uUEhPTlk6IGhlbHAgY2hlY2tvdXQgdXBkYXRlIGJ1aWxkIGh0bWwgaHRtbGhlbHAgbGF0ZXggdGV4dCBjaGFuZ2VzIGxpbmtjaGVjayBcCisuUEhPTlk6IGhlbHAgYnVpbGQgaHRtbCBodG1saGVscCBsYXRleCB0ZXh0IGNoYW5nZXMgbGlua2NoZWNrIFwKIAlzdXNwaWNpb3VzIGNvdmVyYWdlIGRvY3Rlc3QgcHlkb2MtdG9waWNzIGh0bWx2aWV3IGNsZWFuIGRpc3QgY2hlY2sgc2VydmUgXAogCWF1dG9idWlsZC1kZXYgYXV0b2J1aWxkLXN0YWJsZQogCiBoZWxwOgogCUBlY2hvICJQbGVhc2UgdXNlIFxgbWFrZSA8dGFyZ2V0Picgd2hlcmUgPHRhcmdldD4gaXMgb25lIG9mIgogCUBlY2hvICIgIGNsZWFuICAgICAgdG8gcmVtb3ZlIGJ1aWxkIGZpbGVzIgotCUBlY2hvICIgIHVwZGF0ZSAgICAgdG8gdXBkYXRlIGJ1aWxkIHRvb2xzIgogCUBlY2hvICIgIGh0bWwgICAgICAgdG8gbWFrZSBzdGFuZGFsb25lIEhUTUwgZmlsZXMiCisJQGVjaG8gIiAgaHRtbHZpZXcgICB0byBvcGVuIHRoZSBpbmRleCBwYWdlIGJ1aWx0IGJ5IHRoZSBodG1sIHRhcmdldCBpbiB5b3VyIGJyb3dzZXIiCiAJQGVjaG8gIiAgaHRtbGhlbHAgICB0byBtYWtlIEhUTUwgZmlsZXMgYW5kIGEgSFRNTCBoZWxwIHByb2plY3QiCiAJQGVjaG8gIiAgbGF0ZXggICAgICB0byBtYWtlIExhVGVYIGZpbGVzLCB5b3UgY2FuIHNldCBQQVBFUj1hNCBvciBQQVBFUj1sZXR0ZXIiCiAJQGVjaG8gIiAgdGV4dCAgICAgICB0byBtYWtlIHBsYWluIHRleHQgZmlsZXMiCkBAIC0zNywzMCArMzcsOCBAQAogCUBlY2hvICIgIGNoZWNrICAgICAgdG8gcnVuIGEgY2hlY2sgZm9yIGZyZXF1ZW50IG1hcmt1cCBlcnJvcnMiCiAJQGVjaG8gIiAgc2VydmUgICAgICB0byBzZXJ2ZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbG9jYWxob3N0ICg4MDAwKSIKIAotIyBOb3RlOiBpZiB5b3UgdXBkYXRlIHZlcnNpb25zIGhlcmUsIGRvIHRoZSBzYW1lIGluIG1ha2UuYmF0IGFuZCBSRUFETUUudHh0Ci1jaGVja291dDoKLQlAaWYgWyAhIC1kIHRvb2xzL3NwaGlueCBdOyB0aGVuIFwKLQkgIGVjaG8gIkNoZWNraW5nIG91dCBTcGhpbnguLi4iOyBcCi0JICBzdm4gY2hlY2tvdXQgJChTVk5ST09UKS9leHRlcm5hbC9TcGhpbngtMS4yL3NwaGlueCB0b29scy9zcGhpbng7IFwKLQlmaQotCUBpZiBbICEgLWQgdG9vbHMvZG9jdXRpbHMgXTsgdGhlbiBcCi0JICBlY2hvICJDaGVja2luZyBvdXQgRG9jdXRpbHMuLi4iOyBcCi0JICBzdm4gY2hlY2tvdXQgJChTVk5ST09UKS9leHRlcm5hbC9kb2N1dGlscy0wLjExL2RvY3V0aWxzIHRvb2xzL2RvY3V0aWxzOyBcCi0JZmkKLQlAaWYgWyAhIC1kIHRvb2xzL2ppbmphMiBdOyB0aGVuIFwKLQkgIGVjaG8gIkNoZWNraW5nIG91dCBKaW5qYS4uLiI7IFwKLQkgIHN2biBjaGVja291dCAkKFNWTlJPT1QpL2V4dGVybmFsL0ppbmphLTIuMy4xL2ppbmphMiB0b29scy9qaW5qYTI7IFwKLQlmaQotCUBpZiBbICEgLWQgdG9vbHMvcHlnbWVudHMgXTsgdGhlbiBcCi0JICBlY2hvICJDaGVja2luZyBvdXQgUHlnbWVudHMuLi4iOyBcCi0JICBzdm4gY2hlY2tvdXQgJChTVk5ST09UKS9leHRlcm5hbC9QeWdtZW50cy0xLjYvcHlnbWVudHMgdG9vbHMvcHlnbWVudHM7IFwKLQlmaQotCi11cGRhdGU6IGNsZWFuIGNoZWNrb3V0Ci0KLWJ1aWxkOiBjaGVja291dAotCW1rZGlyIC1wIGJ1aWxkLyQoQlVJTERFUikgYnVpbGQvZG9jdHJlZXMKLQkkKFBZVEhPTikgdG9vbHMvc3BoaW54LWJ1aWxkLnB5ICQoQUxMU1BISU5YT1BUUykKK2J1aWxkOgorCSQoU1BISU5YQlVJTEQpICQoQUxMU1BISU5YT1BUUykKIAlAZWNobwogCiBodG1sOiBCVUlMREVSID0gaHRtbApAQCAtOTEsMjQgKzY5LDMwIEBACiAJQGVjaG8gIlRoZSBvdmVydmlldyBmaWxlIGlzIGluIGJ1aWxkL2NoYW5nZXMuIgogCiBsaW5rY2hlY2s6IEJVSUxERVIgPSBsaW5rY2hlY2sKLWxpbmtjaGVjazogYnVpbGQKLQlAZWNobyAiTGluayBjaGVjayBjb21wbGV0ZTsgbG9vayBmb3IgYW55IGVycm9ycyBpbiB0aGUgYWJvdmUgb3V0cHV0IiBcCi0JICAgICAgIm9yIGluIGJ1aWxkLyQoQlVJTERFUikvb3V0cHV0LnR4dCIKK2xpbmtjaGVjazoKKwlAJChNQUtFKSBidWlsZCBCVUlMREVSPSQoQlVJTERFUikgfHwgeyBcCisJZWNobyAiTGluayBjaGVjayBjb21wbGV0ZTsgbG9vayBmb3IgYW55IGVycm9ycyBpbiB0aGUgYWJvdmUgb3V0cHV0IiBcCisJICAgICAib3IgaW4gYnVpbGQvJChCVUlMREVSKS9vdXRwdXQudHh0IjsgXAorCWZhbHNlOyB9CiAKIHN1c3BpY2lvdXM6IEJVSUxERVIgPSBzdXNwaWNpb3VzCi1zdXNwaWNpb3VzOiBidWlsZAotCUBlY2hvICJTdXNwaWNpb3VzIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQiIFwKLQkgICAgICAib3IgaW4gYnVpbGQvJChCVUlMREVSKS9zdXNwaWNpb3VzLmNzdi4gIElmIGFsbCBpc3N1ZXMgYXJlIGZhbHNlIiBcCi0JICAgICAgInBvc2l0aXZlcywgYXBwZW5kIHRoYXQgZmlsZSB0byB0b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdi4iCitzdXNwaWNpb3VzOgorCUAkKE1BS0UpIGJ1aWxkIEJVSUxERVI9JChCVUlMREVSKSB8fCB7IFwKKwllY2hvICJTdXNwaWNpb3VzIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQiIFwKKwkgICAgICJvciBpbiBidWlsZC8kKEJVSUxERVIpL3N1c3BpY2lvdXMuY3N2LiAgSWYgYWxsIGlzc3VlcyBhcmUgZmFsc2UiIFwKKwkgICAgICJwb3NpdGl2ZXMsIGFwcGVuZCB0aGF0IGZpbGUgdG8gdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YuIjsgXAorCWZhbHNlOyB9CiAKIGNvdmVyYWdlOiBCVUlMREVSID0gY292ZXJhZ2UKIGNvdmVyYWdlOiBidWlsZAogCUBlY2hvICJDb3ZlcmFnZSBmaW5pc2hlZDsgc2VlIGMudHh0IGFuZCBweXRob24udHh0IGluIGJ1aWxkL2NvdmVyYWdlIgogCiBkb2N0ZXN0OiBCVUlMREVSID0gZG9jdGVzdAotZG9jdGVzdDogYnVpbGQKLQlAZWNobyAiVGVzdGluZyBvZiBkb2N0ZXN0cyBpbiB0aGUgc291cmNlcyBmaW5pc2hlZCwgbG9vayBhdCB0aGUiIFwKLQkgICAgICAicmVzdWx0cyBpbiBidWlsZC9kb2N0ZXN0L291dHB1dC50eHQiCitkb2N0ZXN0OgorCUAkKE1BS0UpIGJ1aWxkIEJVSUxERVI9JChCVUlMREVSKSB8fCB7IFwKKwllY2hvICJUZXN0aW5nIG9mIGRvY3Rlc3RzIGluIHRoZSBzb3VyY2VzIGZpbmlzaGVkLCBsb29rIGF0IHRoZSIgXAorCSAgICAgInJlc3VsdHMgaW4gYnVpbGQvZG9jdGVzdC9vdXRwdXQudHh0IjsgXAorCWZhbHNlOyB9CiAKIHB5ZG9jLXRvcGljczogQlVJTERFUiA9IHB5ZG9jLXRvcGljcwogcHlkb2MtdG9waWNzOiBidWlsZApAQCAtMTIwLDEwICsxMDQsNiBAQAogCiBjbGVhbjoKIAktcm0gLXJmIGJ1aWxkLyoKLQktcm0gLXJmIHRvb2xzL3NwaGlueAotCS1ybSAtcmYgdG9vbHMvcHlnbWVudHMKLQktcm0gLXJmIHRvb2xzL2ppbmphMgotCS1ybSAtcmYgdG9vbHMvZG9jdXRpbHMKIAogZGlzdDoKIAlybSAtcmYgZGlzdApAQCAtMTYzLDE2ICsxNDMsMTAgQEAKIAljcCBidWlsZC9sYXRleC9kb2NzLXBkZi56aXAgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1wZGYtbGV0dGVyLnppcAogCWNwIGJ1aWxkL2xhdGV4L2RvY3MtcGRmLnRhci5iejIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1wZGYtbGV0dGVyLnRhci5iejIKIAotCSMgYXJjaGl2ZSB0aGUgZXB1YiBidWlsZAorCSMgY29weSB0aGUgZXB1YiBidWlsZAogCXJtIC1yZiBidWlsZC9lcHViCiAJbWFrZSBlcHViCi0JbWtkaXIgLXAgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViCi0JY3AgLXBQUiBidWlsZC9lcHViLyouZXB1YiBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIvCi0JdGFyIC1DIGRpc3QgLWNmIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1Yi50YXIgcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1YgotCWJ6aXAyIC05IC1rIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1Yi50YXIKLQkoY2QgZGlzdDsgemlwIC1xIC1yIC05IHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIuemlwIHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIpCi0Jcm0gLXIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViCi0Jcm0gZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViLnRhcgorCWNwIC1wUFIgYnVpbGQvZXB1Yi9QeXRob24uZXB1YiBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLmVwdWIKIAogY2hlY2s6CiAJJChQWVRIT04pIHRvb2xzL3JzdGxpbnQucHkgLWkgdG9vbHMKQEAgLTE4NCw3ICsxNTgsNiBAQAogCiAjIGZvciBkZXZlbG9wbWVudCByZWxlYXNlczogYWx3YXlzIGJ1aWxkCiBhdXRvYnVpbGQtZGV2OgotCW1ha2UgdXBkYXRlCiAJbWFrZSBkaXN0IFNQSElOWE9QVFM9Jy1BIGRhaWx5PTEgLUEgdmVyc2lvbnN3aXRjaGVyPTEnCiAJLW1ha2Ugc3VzcGljaW91cwogCmRpZmYgLS1naXQgYS9Eb2MvUkVBRE1FLnR4dCBiL0RvYy9SRUFETUUudHh0CmluZGV4IGE0OTRjODkuLjZkZjEyYWIgMTAwNjQ0Ci0tLSBhL0RvYy9SRUFETUUudHh0CisrKyBiL0RvYy9SRUFETUUudHh0CkBAIC0zLDM0ICszLDMwIEBACiAKIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSByZVN0cnVjdHVyZWRUZXh0IChyZVNUKSBzb3VyY2VzIHRvIHRoZSBQeXRob24KIGRvY3VtZW50YXRpb24uICBZb3UgZG9uJ3QgbmVlZCB0byBidWlsZCB0aGVtIHlvdXJzZWxmLCBwcmVidWlsdCB2ZXJzaW9ucyBhcmUKLWF2YWlsYWJsZSBhdCBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rvd25sb2FkLy4KK2F2YWlsYWJsZSBhdCA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L2Rvd25sb2FkLmh0bWw+LgogCi1Eb2N1bWVudGF0aW9uIG9uIHRoZSBhdXRob3JpbmcgUHl0aG9uIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhYm91dAorRG9jdW1lbnRhdGlvbiBvbiBhdXRob3JpbmcgUHl0aG9uIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhYm91dAogYm90aCBzdHlsZSBhbmQgbWFya3VwLCBpcyBhdmFpbGFibGUgaW4gdGhlICJEb2N1bWVudGluZyBQeXRob24iIGNoYXB0ZXIgb2YgdGhlCi1kb2N1bWVudGF0aW9uLgorZGV2ZWxvcGVycyBndWlkZSA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9kb2N1bWVudGluZy5odG1sPi4KIAogCiBCdWlsZGluZyB0aGUgZG9jcwogPT09PT09PT09PT09PT09PT0KIAotWW91IG5lZWQgdG8gaGF2ZSBQeXRob24gMiBpbnN0YWxsZWQ7IHRoZSB0b29sc2V0IHVzZWQgdG8gYnVpbGQgdGhlCi1kb2NzIGlzIHdyaXR0ZW4gaW4gUHl0aG9uLiAgSXQgaXMgY2FsbGVkICpTcGhpbngqLCBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcwotdHJlZSwgYnV0IG1haW50YWluZWQgc2VwYXJhdGVseS4gIEFsc28gbmVlZGVkIGFyZSB0aGUgZG9jdXRpbHMsIHN1cHBseWluZyB0aGUKLWJhc2UgbWFya3VwIHRoYXQgU3BoaW54IHVzZXMsIEppbmphLCBhIHRlbXBsYXRpbmcgZW5naW5lLCBhbmQgb3B0aW9uYWxseQotUHlnbWVudHMsIGEgY29kZSBoaWdobGlnaHRlci4KK1lvdSBuZWVkIHRvIGhhdmUgU3BoaW54IDxodHRwOi8vc3BoaW54LWRvYy5vcmcvPiBpbnN0YWxsZWQ7IGl0IGlzIHRoZSB0b29sc2V0Cit1c2VkIHRvIGJ1aWxkIHRoZSBkb2NzLiAgSXQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgdHJlZSwgYnV0IG1haW50YWluZWQKK3NlcGFyYXRlbHkgYW5kIGF2YWlsYWJsZSBmcm9tIFB5UEkgPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9TcGhpbng+LgogCiAKIFVzaW5nIG1ha2UKIC0tLS0tLS0tLS0KIAotTHVja2lseSwgYSBNYWtlZmlsZSBoYXMgYmVlbiBwcmVwYXJlZCBzbyB0aGF0IG9uIFVuaXgsIHByb3ZpZGVkIHlvdSBoYXZlCi1pbnN0YWxsZWQgUHl0aG9uIGFuZCBTdWJ2ZXJzaW9uLCB5b3UgY2FuIGp1c3QgcnVuIDo6CitBIE1ha2VmaWxlIGhhcyBiZWVuIHByZXBhcmVkIHNvIHRoYXQgb24gVW5peCwgcHJvdmlkZWQgeW91IGhhdmUgaW5zdGFsbGVkCitTcGhpbngsIHlvdSBjYW4ganVzdCBydW4gOjoKIAogICAgbWFrZSBodG1sCiAKLXRvIGNoZWNrIG91dCB0aGUgbmVjZXNzYXJ5IHRvb2xzZXQgaW4gdGhlIGB0b29scy9gIHN1YmRpcmVjdG9yeSBhbmQgYnVpbGQgdGhlCi1IVE1MIG91dHB1dCBmaWxlcy4gIFRvIHZpZXcgdGhlIGdlbmVyYXRlZCBIVE1MLCBwb2ludCB5b3VyIGZhdm9yaXRlIGJyb3dzZXIgYXQKLXRoZSB0b3AtbGV2ZWwgaW5kZXggYGJ1aWxkL2h0bWwvaW5kZXguaHRtbGAgYWZ0ZXIgcnVubmluZyAibWFrZSIuCit0byBidWlsZCB0aGUgSFRNTCBvdXRwdXQgZmlsZXMuCiAKIE9uIFdpbmRvd3MsIHdlIHRyeSB0byBlbXVsYXRlIHRoZSBNYWtlZmlsZSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlIHdpdGggYQogYGBtYWtlLmJhdGBgIGZpbGUuCkBAIC0zOCwxOCArMzQsMjkgQEAKIFRvIHVzZSBhIFB5dGhvbiBpbnRlcnByZXRlciB0aGF0J3Mgbm90IGNhbGxlZCBgYHB5dGhvbmBgLCB1c2UgdGhlIHN0YW5kYXJkCiB3YXkgdG8gc2V0IE1ha2VmaWxlIHZhcmlhYmxlcywgdXNpbmcgZS5nLiA6OgogCi0gICBtYWtlIGh0bWwgUFlUSE9OPS91c3IvYmluL3B5dGhvbjIuNQorICAgbWFrZSBodG1sIFBZVEhPTj1weXRob24zCisKK09uIFdpbmRvd3MsIHNldCB0aGUgUFlUSE9OIGVudmlyb25tZW50IHZhcmlhYmxlIGluc3RlYWQuCisKK1RvIHVzZSBhIHNwZWNpZmljIHNwaGlueC1idWlsZCAoc29tZXRoaW5nIG90aGVyIHRoYW4gYGBzcGhpbngtYnVpbGRgYCksIHNldAordGhlIFNQSElOWEJVSUxEIHZhcmlhYmxlLgogCiBBdmFpbGFibGUgbWFrZSB0YXJnZXRzIGFyZToKIAorICogImNsZWFuIiwgd2hpY2ggcmVtb3ZlcyBhbGwgYnVpbGQgZmlsZXMuCisKICAqICJodG1sIiwgd2hpY2ggYnVpbGRzIHN0YW5kYWxvbmUgSFRNTCBmaWxlcyBmb3Igb2ZmbGluZSB2aWV3aW5nLgogCisgKiAiaHRtbHZpZXciLCB3aGljaCByZS11c2VzIHRoZSAiaHRtbCIgYnVpbGRlciwgYnV0IHRoZW4gb3BlbnMgdGhlIG1haW4gcGFnZQorICAgaW4geW91ciBkZWZhdWx0IHdlYiBicm93c2VyLgorCiAgKiAiaHRtbGhlbHAiLCB3aGljaCBidWlsZHMgSFRNTCBmaWxlcyBhbmQgYSBIVE1MIEhlbHAgcHJvamVjdCBmaWxlIHVzYWJsZSB0bwogICAgY29udmVydCB0aGVtIGludG8gYSBzaW5nbGUgQ29tcGlsZWQgSFRNTCAoLmNobSkgZmlsZSAtLSB0aGVzZSBhcmUgcG9wdWxhcgogICAgdW5kZXIgTWljcm9zb2Z0IFdpbmRvd3MsIGJ1dCB2ZXJ5IGhhbmR5IG9uIGV2ZXJ5IHBsYXRmb3JtLgogCi0gICBUbyBjcmVhdGUgdGhlIENITSBmaWxlLCB5b3UgbmVlZCB0byBydW4gdGhlIE1pY3Jvc29mdCBIVE1MIEhlbHAgV29ya3Nob3Agb3ZlcgotICAgdGhlIGdlbmVyYXRlZCBwcm9qZWN0ICguaGhwKSBmaWxlLgorICAgVG8gY3JlYXRlIHRoZSBDSE0gZmlsZSwgeW91IG5lZWQgdG8gcnVuIHRoZSBNaWNyb3NvZnQgSFRNTCBIZWxwIFdvcmtzaG9wCisgICBvdmVyIHRoZSBnZW5lcmF0ZWQgcHJvamVjdCAoLmhocCkgZmlsZS4gIFRoZSBtYWtlLmJhdCBzY3JpcHQgZG9lcyB0aGlzIGZvcgorICAgeW91IG9uIFdpbmRvd3MuCiAKICAqICJsYXRleCIsIHdoaWNoIGJ1aWxkcyBMYVRlWCBzb3VyY2UgZmlsZXMgYXMgaW5wdXQgdG8gInBkZmxhdGV4IiB0byBwcm9kdWNlCiAgICBQREYgZG9jdW1lbnRzLgpAQCAtNzgsNyArODUsMTIgQEAKICAqICJzdXNwaWNpb3VzIiwgd2hpY2ggY2hlY2tzIHRoZSBwYXJzZWQgbWFya3VwIGZvciB0ZXh0IHRoYXQgbG9va3MgbGlrZQogICAgbWFsZm9ybWVkIGFuZCB0aHVzIHVuY29udmVydGVkIHJlU1QuCiAKLUEgIm1ha2UgdXBkYXRlIiB1cGRhdGVzIHRoZSBTdWJ2ZXJzaW9uIGNoZWNrb3V0cyBpbiBgdG9vbHMvYC4KKyAqICJjaGVjayIsIHdoaWNoIGNoZWNrcyBmb3IgZnJlcXVlbnQgbWFya3VwIGVycm9ycy4KKworICogInNlcnZlIiwgd2hpY2ggc2VydmVzIHRoZSBidWlsZC9odG1sIGRpcmVjdG9yeSBvbiBwb3J0IDgwMDAuCisKKyAqICJkaXN0IiwgKFVuaXggb25seSkgd2hpY2ggY3JlYXRlcyBkaXN0cmlidXRhYmxlIGFyY2hpdmVzIG9mIEhUTUwsIHRleHQsCisgICBQREYsIGFuZCBFUFVCIGJ1aWxkcy4KIAogCiBXaXRob3V0IG1ha2UKQEAgLTg2LDcgKzk4LDcgQEAKIAogSW5zdGFsbCB0aGUgU3BoaW54IHBhY2thZ2UgYW5kIGl0cyBkZXBlbmRlbmNpZXMgZnJvbSBQeVBJLgogCi1UaGVuLCBmcm9tIHRoZSBgYERvY3NgYCBkaXJlY3RvcnksIHJ1biA6OgorVGhlbiwgZnJvbSB0aGUgYGBEb2NgYCBkaXJlY3RvcnksIHJ1biA6OgogCiAgICBzcGhpbngtYnVpbGQgLWI8YnVpbGRlcj4gLiBidWlsZC88YnVpbGRlcj4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2FyZy5yc3QgYi9Eb2MvYy1hcGkvYXJnLnJzdAppbmRleCAyOGE0MzRlLi4yZjAyMjQxIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvYXJnLnJzdAorKysgYi9Eb2MvYy1hcGkvYXJnLnJzdApAQCAtMjk1LDYgKzI5NSw4IEBACiAgICB0aGUgb2JqZWN0IHBvaW50ZXIgaXMgc3RvcmVkLiAgSWYgdGhlIFB5dGhvbiBvYmplY3QgZG9lcyBub3QgaGF2ZSB0aGUgcmVxdWlyZWQKICAgIHR5cGUsIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkLgogCisuLiBfb19hbXBlcnNhbmQ6CisKIGBgTyZgYCAob2JqZWN0KSBbKmNvbnZlcnRlciosICphbnl0aGluZypdCiAgICBDb252ZXJ0IGEgUHl0aG9uIG9iamVjdCB0byBhIEMgdmFyaWFibGUgdGhyb3VnaCBhICpjb252ZXJ0ZXIqIGZ1bmN0aW9uLiAgVGhpcwogICAgdGFrZXMgdHdvIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzIGEgZnVuY3Rpb24sIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3Mgb2YgYSBDCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYnVmZmVyLnJzdCBiL0RvYy9jLWFwaS9idWZmZXIucnN0CmluZGV4IGE3ZGUzN2UuLjIzMGM2YTkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9idWZmZXIucnN0CisrKyBiL0RvYy9jLWFwaS9idWZmZXIucnN0CkBAIC00ODksOCArNDg5LDggQEAKICAgIDpjOm1lbWJlcjpgdmlldy0+b2JqYCB0byAqTlVMTCogYW5kIHJldHVybiAtMTsKIAogICAgSWYgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIHBhcnQgb2YgYSA6cmVmOmBnZXRidWZmZXJwcm9jIDxidWZmZXItc3RydWN0cz5gLAotICAgKmV4cG9ydGVyKiBNVVNUIGJlIHNldCB0byB0aGUgZXhwb3J0aW5nIG9iamVjdC4gT3RoZXJ3aXNlLCAqZXhwb3J0ZXIqIE1VU1QKLSAgIGJlIE5VTEwuCisgICAqZXhwb3J0ZXIqIE1VU1QgYmUgc2V0IHRvIHRoZSBleHBvcnRpbmcgb2JqZWN0IGFuZCAqZmxhZ3MqIG11c3QgYmUgcGFzc2VkCisgICB1bm1vZGlmaWVkLiBPdGhlcndpc2UsICpleHBvcnRlciogTVVTVCBiZSBOVUxMLgogCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdCBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKaW5kZXggNjU5MDRlZS4uMmQ1NjM4NiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAorKysgYi9Eb2MvYy1hcGkvY29uY3JldGUucnN0CkBAIC03NCwyNiArNzQsMzUgQEAKIAogLi4gX21hcG9iamVjdHM6CiAKLU1hcHBpbmcgT2JqZWN0cwotPT09PT09PT09PT09PT09CitDb250YWluZXIgT2JqZWN0cworPT09PT09PT09PT09PT09PT0KIAogLi4gaW5kZXg6OiBvYmplY3Q6IG1hcHBpbmcKIAogLi4gdG9jdHJlZTo6CiAKICAgIGRpY3QucnN0CisgICBzZXQucnN0CiAKIAogLi4gX290aGVyb2JqZWN0czoKIAorRnVuY3Rpb24gT2JqZWN0cworPT09PT09PT09PT09PT09PQorCisuLiB0b2N0cmVlOjoKKworICAgZnVuY3Rpb24ucnN0CisgICBtZXRob2QucnN0CisgICBjZWxsLnJzdAorICAgY29kZS5yc3QKKworCiBPdGhlciBPYmplY3RzCiA9PT09PT09PT09PT09CiAKIC4uIHRvY3RyZWU6OgogCi0gICBzZXQucnN0Ci0gICBmdW5jdGlvbi5yc3QKLSAgIG1ldGhvZC5yc3QKICAgIGZpbGUucnN0CiAgICBtb2R1bGUucnN0CiAgICBpdGVyYXRvci5yc3QKQEAgLTEwMiw3ICsxMTEsNiBAQAogICAgbWVtb3J5dmlldy5yc3QKICAgIHdlYWtyZWYucnN0CiAgICBjYXBzdWxlLnJzdAotICAgY2VsbC5yc3QKICAgIGdlbi5yc3QKICAgIGRhdGV0aW1lLnJzdAotICAgY29kZS5yc3QKKwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2RpY3QucnN0IGIvRG9jL2MtYXBpL2RpY3QucnN0CmluZGV4IDZiYWNjMzIuLmFlZmY2NDAgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9kaWN0LnJzdAorKysgYi9Eb2MvYy1hcGkvZGljdC5yc3QKQEAgLTg0LDcgKzg0LDcgQEAKICAgIG9uIGZhaWx1cmUuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqcCwgY2hhciAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqcCwgY29uc3QgY2hhciAqa2V5KQogCiAgICBSZW1vdmUgdGhlIGVudHJ5IGluIGRpY3Rpb25hcnkgKnAqIHdoaWNoIGhhcyBhIGtleSBzcGVjaWZpZWQgYnkgdGhlIHN0cmluZwogICAgKmtleSouICBSZXR1cm4gYGAwYGAgb24gc3VjY2VzcyBvciBgYC0xYGAgb24gZmFpbHVyZS4KQEAgLTExMCw2ICsxMTAsMTUgQEAKICAgIDpjOnR5cGU6YGNoYXJcKmAsIHJhdGhlciB0aGFuIGEgOmM6dHlwZTpgUHlPYmplY3RcKmAuCiAKIAorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfU2V0RGVmYXVsdChQeU9iamVjdCAqcCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKmRlZmF1bHQpCisKKyAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIFB5dGhvbi1sZXZlbCA6bWV0aDpgZGljdC5zZXRkZWZhdWx0YC4gIElmIHByZXNlbnQsIGl0CisgICByZXR1cm5zIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvICprZXkqIGZyb20gdGhlIGRpY3Rpb25hcnkgKnAqLiAgSWYgdGhlIGtleQorICAgaXMgbm90IGluIHRoZSBkaWN0LCBpdCBpcyBpbnNlcnRlZCB3aXRoIHZhbHVlICpkZWZhdWx0b2JqKiBhbmQgKmRlZmF1bHRvYmoqCisgICBpcyByZXR1cm5lZC4gIFRoaXMgZnVuY3Rpb24gZXZhbHVhdGVzIHRoZSBoYXNoIGZ1bmN0aW9uIG9mICprZXkqIG9ubHkgb25jZSwKKyAgIGluc3RlYWQgb2YgZXZhbHVhdGluZyBpdCBpbmRlcGVuZGVudGx5IGZvciB0aGUgbG9va3VwIGFuZCB0aGUgaW5zZXJ0aW9uLgorCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X0l0ZW1zKFB5T2JqZWN0ICpwKQogCiAgICBSZXR1cm4gYSA6Yzp0eXBlOmBQeUxpc3RPYmplY3RgIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LgpAQCAtMTkyLDggKzIwMSwxMSBAQAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9VcGRhdGUoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiKQogCi0gICBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgUHlEaWN0X01lcmdlKGEsIGIsIDEpYGAgaW4gQywgb3IgYGBhLnVwZGF0ZShiKWBgIGluCi0gICBQeXRob24uICBSZXR1cm4gYGAwYGAgb24gc3VjY2VzcyBvciBgYC0xYGAgaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQuCisgICBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgUHlEaWN0X01lcmdlKGEsIGIsIDEpYGAgaW4gQywgYW5kIGlzIHNpbWlsYXIgdG8KKyAgIGBgYS51cGRhdGUoYilgYCBpbiBQeXRob24gZXhjZXB0IHRoYXQgOmM6ZnVuYzpgUHlEaWN0X1VwZGF0ZWAgZG9lc24ndCBmYWxsCisgICBiYWNrIHRvIHRoZSBpdGVyYXRpbmcgb3ZlciBhIHNlcXVlbmNlIG9mIGtleSB2YWx1ZSBwYWlycyBpZiB0aGUgc2Vjb25kCisgICBhcmd1bWVudCBoYXMgbm8gImtleXMiIGF0dHJpYnV0ZS4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYCBpZiBhbgorICAgZXhjZXB0aW9uIHdhcyByYWlzZWQuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfTWVyZ2VGcm9tU2VxMihQeU9iamVjdCAqYSwgUHlPYmplY3QgKnNlcTIsIGludCBvdmVycmlkZSkKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdCBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdAppbmRleCAwYWE4OTJkLi4zM2I0NDM5IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKKysrIGIvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CkBAIC05MCw2ICs5MCwxNiBAQAogICAgdGhlIGNsYXNzIGluIHRoYXQgY2FzZS4gIElmIHRoZSB2YWx1ZXMgYXJlIGFscmVhZHkgbm9ybWFsaXplZCwgbm90aGluZyBoYXBwZW5zLgogICAgVGhlIGRlbGF5ZWQgbm9ybWFsaXphdGlvbiBpcyBpbXBsZW1lbnRlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgogCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBmdW5jdGlvbiAqZG9lcyBub3QqIGltcGxpY2l0bHkgc2V0IHRoZSBgYF9fdHJhY2ViYWNrX19gYAorICAgICAgYXR0cmlidXRlIG9uIHRoZSBleGNlcHRpb24gdmFsdWUuIElmIHNldHRpbmcgdGhlIHRyYWNlYmFjaworICAgICAgYXBwcm9wcmlhdGVseSBpcyBkZXNpcmVkLCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgc25pcHBldCBpcyBuZWVkZWQ6OgorCisgICAgICAgICBpZiAodGIgIT0gTlVMTCkgeworICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgICB9CisKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfQ2xlYXIoKQogCkBAIC0yMjYsMTYgKzIzNiwyNSBAQAogCiAgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21FcnJub2AsIHdpdGggdGhlIGFkZGl0aW9uYWwgYmVoYXZpb3IgdGhhdCBpZgogICAgKmZpbGVuYW1lT2JqZWN0KiBpcyBub3QgKk5VTEwqLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mICp0eXBlKiBhcwotICAgYSB0aGlyZCBwYXJhbWV0ZXIuICBJbiB0aGUgY2FzZSBvZiBleGNlcHRpb25zIHN1Y2ggYXMgOmV4YzpgSU9FcnJvcmAgYW5kCi0gICA6ZXhjOmBPU0Vycm9yYCwgdGhpcyBpcyB1c2VkIHRvIGRlZmluZSB0aGUgOmF0dHI6YGZpbGVuYW1lYCBhdHRyaWJ1dGUgb2YgdGhlCisgICBhIHRoaXJkIHBhcmFtZXRlci4gIEluIHRoZSBjYXNlIG9mIDpleGM6YE9TRXJyb3JgIGV4Y2VwdGlvbiwKKyAgIHRoaXMgaXMgdXNlZCB0byBkZWZpbmUgdGhlIDphdHRyOmBmaWxlbmFtZWAgYXR0cmlidXRlIG9mIHRoZQogICAgZXhjZXB0aW9uIGluc3RhbmNlLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cyhQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0LCBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QyKQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdGAsIGJ1dCB0YWtlcyBhIHNlY29uZAorICAgZmlsZW5hbWUgb2JqZWN0LCBmb3IgcmFpc2luZyBlcnJvcnMgd2hlbiBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdHdvIGZpbGVuYW1lcworICAgZmFpbHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICp0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIAogICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RgLCBidXQgdGhlIGZpbGVuYW1lCiAgICBpcyBnaXZlbiBhcyBhIEMgc3RyaW5nLiAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcKLSAgICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLgorICAgKDpmdW5jOmBvcy5mc2RlY29kZWApLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoaW50IGllcnIpCkBAIC0yNTYsMTggKzI3NSwxMSBAQAogICAgc3BlY2lmeWluZyB0aGUgZXhjZXB0aW9uIHR5cGUgdG8gYmUgcmFpc2VkLiBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChpbnQgaWVyciwgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0KQotCi0gICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21XaW5kb3dzRXJyYCwgd2l0aCB0aGUgYWRkaXRpb25hbCBiZWhhdmlvcgotICAgdGhhdCBpZiAqZmlsZW5hbWVPYmplY3QqIGlzIG5vdCAqTlVMTCosIGl0IGlzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Igb2YKLSAgIDpleGM6YFdpbmRvd3NFcnJvcmAgYXMgYSB0aGlyZCBwYXJhbWV0ZXIuICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCi0KLQogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShpbnQgaWVyciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RgLCBidXQgdGhlCiAgICBmaWxlbmFtZSBpcyBnaXZlbiBhcyBhIEMgc3RyaW5nLiAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorICAgZW5jb2RpbmcgKDpmdW5jOmBvcy5mc2RlY29kZWApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBQeU9iamVjdCAqZmlsZW5hbWUpCkBAIC0yNzcsNiArMjg5LDE1IEBACiAgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCiAKIAorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5T2JqZWN0ICpmaWxlbmFtZTIpCisKKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RgLAorICAgYnV0IGFjY2VwdHMgYSBzZWNvbmQgZmlsZW5hbWUgb2JqZWN0LgorICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICp0eXBlLCBpbnQgaWVyciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVgLCB3aXRoIGFuIGFkZGl0aW9uYWwKQEAgLTI5MywxMyArMzE0LDIwIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKICAgIFNldCBmaWxlLCBsaW5lLCBhbmQgb2Zmc2V0IGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBleGNlcHRpb24uICBJZiB0aGUKICAgIGN1cnJlbnQgZXhjZXB0aW9uIGlzIG5vdCBhIDpleGM6YFN5bnRheEVycm9yYCwgdGhlbiBpdCBzZXRzIGFkZGl0aW9uYWwKICAgIGF0dHJpYnV0ZXMsIHdoaWNoIG1ha2UgdGhlIGV4Y2VwdGlvbiBwcmludGluZyBzdWJzeXN0ZW0gdGhpbmsgdGhlIGV4Y2VwdGlvbgotICAgaXMgYSA6ZXhjOmBTeW50YXhFcnJvcmAuICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCi0gICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgIGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKKworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdGAsIGJ1dCAqZmlsZW5hbWUqIGlzIGEgYnl0ZSBzdHJpbmcKKyAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCkBAIC0zNTUsMTUgKzM4MywyMiBAQAogICAgZG9jdW1lbnRhdGlvbi4gIFRoZXJlIGlzIG5vIEMgQVBJIGZvciB3YXJuaW5nIGNvbnRyb2wuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCBleHBsaWNpdCBjb250cm9sIG92ZXIgYWxsIHdhcm5pbmcgYXR0cmlidXRlcy4gIFRoaXMKICAgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgYXJvdW5kIHRoZSBQeXRob24gZnVuY3Rpb24KICAgIDpmdW5jOmB3YXJuaW5ncy53YXJuX2V4cGxpY2l0YCwgc2VlIHRoZXJlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlICptb2R1bGUqCiAgICBhbmQgKnJlZ2lzdHJ5KiBhcmd1bWVudHMgbWF5IGJlIHNldCB0byAqTlVMTCogdG8gZ2V0IHRoZSBkZWZhdWx0IGVmZmVjdAotICAgZGVzY3JpYmVkIHRoZXJlLiAqbWVzc2FnZSogYW5kICptb2R1bGUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsCi0gICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBkZXNjcmliZWQgdGhlcmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdGAgZXhjZXB0IHRoYXQgKm1lc3NhZ2UqIGFuZAorICAgKm1vZHVsZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncywgYW5kICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZQorICAgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlfc3NpemVfdCBzdGFja19sZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmlsZS5yc3QgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKaW5kZXggY2MxOTBjOS4uNmYyZWNlZSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ZpbGUucnN0CisrKyBiL0RvYy9jLWFwaS9maWxlLnJzdApAQCAtMTcsNyArMTcsNyBAQAogdGhlIDptb2Q6YGlvYCBBUElzIGluc3RlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5RmlsZV9Gcm9tRmQoaW50IGZkLCBjaGFyICpuYW1lLCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjaGFyICplbmNvZGluZywgY2hhciAqZXJyb3JzLCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKKy4uIGM6ZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiAKICAgIENyZWF0ZSBhIFB5dGhvbiBmaWxlIG9iamVjdCBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYWxyZWFkeQogICAgb3BlbmVkIGZpbGUgKmZkKi4gIFRoZSBhcmd1bWVudHMgKm5hbWUqLCAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdCBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CmluZGV4IDI3MDE1MmUuLjM2NDFmYzYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbXBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgIGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGNvbXBpbGUKIApAQCAtMTMyLDggKzEzMiwxNCBAQAogICAgc3VjaCBtb2R1bGVzIGhhdmUgbm8gd2F5IHRvIGtub3cgdGhhdCB0aGUgbW9kdWxlIG9iamVjdCBpcyBhbiB1bmtub3duIChhbmQKICAgIHByb2JhYmx5IGRhbWFnZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2R1bGUgYXV0aG9yJ3MgaW50ZW50cykgc3RhdGUuCiAKKyAgIFRoZSBtb2R1bGUncyA6YXR0cjpgX19zcGVjX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2Agd2lsbCBiZSBzZXQsIGlmCisgICBub3Qgc2V0IGFscmVhZHksIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlcy4gIFRoZSBzcGVjJ3MgbG9hZGVyIHdpbGwKKyAgIGJlIHNldCB0byB0aGUgbW9kdWxlJ3MgYGBfX2xvYWRlcl9fYGAgKGlmIHNldCkgYW5kIHRvIGFuIGluc3RhbmNlIG9mCisgICA6Y2xhc3M6YFNvdXJjZUZpbGVMb2FkZXJgIG90aGVyd2lzZS4KKwogICAgVGhlIG1vZHVsZSdzIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIHdpbGwgYmUgc2V0IHRvIHRoZSBjb2RlIG9iamVjdCdzCi0gICA6YzptZW1iZXI6YGNvX2ZpbGVuYW1lYC4KKyAgIDpjOm1lbWJlcjpgY29fZmlsZW5hbWVgLiAgSWYgYXBwbGljYWJsZSwgOmF0dHI6YF9fY2FjaGVkX19gIHdpbGwgYWxzbworICAgYmUgc2V0LgogCiAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVsb2FkIHRoZSBtb2R1bGUgaWYgaXQgd2FzIGFscmVhZHkgaW1wb3J0ZWQuICBTZWUKICAgIDpjOmZ1bmM6YFB5SW1wb3J0X1JlbG9hZE1vZHVsZWAgZm9yIHRoZSBpbnRlbmRlZCB3YXkgdG8gcmVsb2FkIGEgbW9kdWxlLgpAQCAtMTQ1LDcgKzE1MSw3IEBACiAgICA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXNgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiAKICAgIExpa2UgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVgLCBidXQgdGhlIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mCiAgICB0aGUgbW9kdWxlIG9iamVjdCBpcyBzZXQgdG8gKnBhdGhuYW1lKiBpZiBpdCBpcyBub24tYGBOVUxMYGAuCkBAIC0xNjIsNyArMTY4LDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsIGNoYXIgKmNwYXRobmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIAogICAgTGlrZSA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdGAsIGJ1dCAqbmFtZSosICpwYXRobmFtZSogYW5kCiAgICAqY3BhdGhuYW1lKiBhcmUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLiBBdHRlbXB0cyBhcmUgYWxzbyBtYWRlIHRvIGZpZ3VyZSBvdXQKQEAgLTI0NSw4ICsyNTEsMTEgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBpcyBubyBsb25nZXIgc2V0IG9uIHRoZSBtb2R1bGUuCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNoYXIgKm5hbWUpCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0YCwgYnV0IHRoZSBuYW1lIGlzIGEKICAgIFVURi04IGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbml0LnJzdCBiL0RvYy9jLWFwaS9pbml0LnJzdAppbmRleCA0ZGFkMmM4Li4wNTg3ZTE1IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW5pdC5yc3QKKysrIGIvRG9jL2MtYXBpL2luaXQucnN0CkBAIC04Niw2ICs4NiwzNiBAQAogPT09PT09PT09PT09PT09PT09PT09PT0KIAogCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoY2hhciAqZW5jb2RpbmcsIGNoYXIgKmVycm9ycykKKworICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBQeV9Jbml0aWFsaXplKCkKKyAgICAgIHNpbmdsZTogbWFpbigpCisgICAgICB0cmlwbGU6IHN0ZGluOyBzdGRvdXQ7IHNkdGVycgorCisgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLCBpZiBpdCBpcworICAgY2FsbGVkIGF0IGFsbC4gSXQgc3BlY2lmaWVzIHdoaWNoIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGluZyB0byB1c2UKKyAgIHdpdGggc3RhbmRhcmQgSU8sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgorCisgICBJdCBvdmVycmlkZXMgOmVudnZhcjpgUFlUSE9OSU9FTkNPRElOR2AgdmFsdWVzLCBhbmQgYWxsb3dzIGVtYmVkZGluZyBjb2RlCisgICB0byBjb250cm9sIElPIGVuY29kaW5nIHdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGRvZXMgbm90IHdvcmsuCisKKyAgIGBgZW5jb2RpbmdgYCBhbmQvb3IgYGBlcnJvcnNgYCBtYXkgYmUgTlVMTCB0byB1c2UKKyAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGFuZC9vciBkZWZhdWx0IHZhbHVlcyAoZGVwZW5kaW5nIG9uIG90aGVyCisgICBzZXR0aW5ncykuCisKKyAgIE5vdGUgdGhhdCA6ZGF0YTpgc3lzLnN0ZGVycmAgYWx3YXlzIHVzZXMgdGhlICJiYWNrc2xhc2hyZXBsYWNlIiBlcnJvcgorICAgaGFuZGxlciwgcmVnYXJkbGVzcyBvZiB0aGlzIChvciBhbnkgb3RoZXIpIHNldHRpbmcuCisKKyAgIElmIDpjOmZ1bmM6YFB5X0ZpbmFsaXplYCBpcyBjYWxsZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGNhbGxlZAorICAgYWdhaW4gaW4gb3JkZXIgdG8gYWZmZWN0IHN1YnNlcXVlbnQgY2FsbHMgdG8gOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCisKKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhIG5vbnplcm8gdmFsdWUgb24gZXJyb3IgKGUuZy4gY2FsbGluZyBhZnRlciB0aGUKKyAgIGludGVycHJldGVyIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9TZXRQcm9ncmFtTmFtZSh3Y2hhcl90ICpuYW1lKQogCiAgICAuLiBpbmRleDo6CkBAIC0zMjksNyArMzU5LDExIEBACiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogCi0gICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gMS4KKyAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHdpdGggKnVwZGF0ZXBhdGgqIHNldAorICAgdG8gMSB1bmxlc3MgdGhlIDpwcm9ncmFtOmBweXRob25gIGludGVycHJldGVyIHdhcyBzdGFydGVkIHdpdGggdGhlCisgICA6b3B0aW9uOmAtSWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IFRoZSAqdXBkYXRlcGF0aCogdmFsdWUgZGVwZW5kcyBvbiA6b3B0aW9uOmAtSWAuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtNjU4LDYgKzY5MiwyMCBAQAogICAgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIG1haW5seSBhIGhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHSUxTdGF0ZV9DaGVjaygpCisKKyAgIFJldHVybiAxIGlmIHRoZSBjdXJyZW50IHRocmVhZCBpcyBob2xkaW5nIHRoZSBHSUwgYW5kIDAgb3RoZXJ3aXNlLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCBhdCBhbnkgdGltZS4KKyAgIE9ubHkgaWYgaXQgaGFzIGhhZCBpdHMgUHl0aG9uIHRocmVhZCBzdGF0ZSBpbml0aWFsaXplZCBhbmQgY3VycmVudGx5IGlzCisgICBob2xkaW5nIHRoZSBHSUwgd2lsbCBpdCByZXR1cm4gMS4KKyAgIFRoaXMgaXMgbWFpbmx5IGEgaGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24uICBJdCBjYW4gYmUgdXNlZnVsCisgICBmb3IgZXhhbXBsZSBpbiBjYWxsYmFjayBjb250ZXh0cyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd2hlbgorICAga25vd2luZyB0aGF0IHRoZSBHSUwgaXMgbG9ja2VkIGNhbiBhbGxvdyB0aGUgY2FsbGVyIHRvIHBlcmZvcm0gc2Vuc2l0aXZlCisgICBhY3Rpb25zIG9yIG90aGVyd2lzZSBiZWhhdmUgZGlmZmVyZW50bHkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3JtYWxseSB1c2VkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb247IGxvb2sgZm9yCiBleGFtcGxlIHVzYWdlIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2xvbmcucnN0IGIvRG9jL2MtYXBpL2xvbmcucnN0CmluZGV4IGQ1NDMwZmQuLmIzNDgwMTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9sb25nLnJzdAorKysgYi9Eb2MvYy1hcGkvbG9uZy5yc3QKQEAgLTgwLDcgKzgwLDcgQEAKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogCiAgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBiYXNlZCBvbiB0aGUgc3RyaW5nIHZhbHVlIGluICpzdHIqLCB3aGljaAogICAgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSByYWRpeCBpbiAqYmFzZSouICBJZiAqcGVuZCogaXMgbm9uLSpOVUxMKiwKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tYXBwaW5nLnJzdCBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdAppbmRleCAwZWYyOTYxLi4yODAzZmQwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKKysrIGIvRG9jL2MtYXBpL21hcHBpbmcucnN0CkBAIC0yMiw3ICsyMiw3IEBACiAgICBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogCiAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCAqa2V5KiBmcm9tIHRoZSBvYmplY3QgKm8qLiBSZXR1cm4gYGAtMWBgIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9ba2V5XWBgLgpAQCAtNjcsMTMgKzY3LDEzIEBACiAgICB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8uaXRlbXMoKSlgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9ba2V5XWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2KQogCiAgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqIGluIG9iamVjdCAqbyouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21lbW9yeS5yc3QgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdAppbmRleCA4YWZhNTZhLi5hODJlMWMyIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWVtb3J5LnJzdAorKysgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdApAQCAtODQsNiArODQsNDggQEAKIGZvciB0aGUgSS9PIGJ1ZmZlciBlc2NhcGVzIGNvbXBsZXRlbHkgdGhlIFB5dGhvbiBtZW1vcnkgbWFuYWdlci4KIAogCitSYXcgTWVtb3J5IEludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzZXRzIGFyZSB3cmFwcGVycyB0byB0aGUgc3lzdGVtIGFsbG9jYXRvci4gVGhlc2UKK2Z1bmN0aW9ucyBhcmUgdGhyZWFkLXNhZmUsIHRoZSA6dGVybTpgR0lMIDxnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaz5gIGRvZXMgbm90CituZWVkIHRvIGJlIGhlbGQuCisKK1RoZSBkZWZhdWx0IHJhdyBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBuKQorCisgICBBbGxvY2F0ZXMgKm4qIGJ5dGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvZiB0eXBlIDpjOnR5cGU6YHZvaWRcKmAgdG8gdGhlCisgICBhbGxvY2F0ZWQgbWVtb3J5LCBvciAqTlVMTCogaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFJlcXVlc3RpbmcgemVybyBieXRlcworICAgcmV0dXJucyBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMgaWYKKyAgIGBgUHlNZW1fUmF3TWFsbG9jKDEpYGAgaGFkIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQorICAgYmVlbiBpbml0aWFsaXplZCBpbiBhbnkgd2F5LgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SYXdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuKQorCisgICBSZXNpemVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCogdG8gKm4qIGJ5dGVzLiBUaGUgY29udGVudHMgd2lsbAorICAgYmUgdW5jaGFuZ2VkIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBvbGQgYW5kIHRoZSBuZXcgc2l6ZXMuIElmICpwKiBpcyAqTlVMTCosCisgICB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBgUHlNZW1fUmF3TWFsbG9jKG4pYGA7IGVsc2UgaWYgKm4qIGlzIGVxdWFsIHRvCisgICB6ZXJvLCB0aGUgbWVtb3J5IGJsb2NrIGlzIHJlc2l6ZWQgYnV0IGlzIG5vdCBmcmVlZCwgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyCisgICBpcyBub24tKk5VTEwqLiBVbmxlc3MgKnAqIGlzICpOVUxMKiwgaXQgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLiBJZgorICAgdGhlIHJlcXVlc3QgZmFpbHMsIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIHJldHVybnMgKk5VTEwqIGFuZCAqcCogcmVtYWlucworICAgYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBtZW1vcnkgYXJlYS4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnApCisKKyAgIEZyZWVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCosIHdoaWNoIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEKKyAgIHByZXZpb3VzIGNhbGwgdG8gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYC4KKyAgIE90aGVyd2lzZSwgb3IgaWYgYGBQeU1lbV9GcmVlKHApYGAgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdW5kZWZpbmVkCisgICBiZWhhdmlvciBvY2N1cnMuIElmICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCisKKwogLi4gX21lbW9yeWludGVyZmFjZToKIAogTWVtb3J5IEludGVyZmFjZQpAQCAtOTEsOCArMTMzLDE2IEBACiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2V0cywgbW9kZWxlZCBhZnRlciB0aGUgQU5TSSBDIHN0YW5kYXJkLCBidXQgc3BlY2lmeWluZwogYmVoYXZpb3Igd2hlbiByZXF1ZXN0aW5nIHplcm8gYnl0ZXMsIGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpbmcgYW5kIHJlbGVhc2luZwotbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwOgorbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwLgogCitUaGUgZGVmYXVsdCBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHdhcm5pbmc6OgorCisgICBUaGUgOnRlcm06YEdJTCA8Z2xvYmFsIGludGVycHJldGVyIGxvY2s+YCBtdXN0IGJlIGhlbGQgd2hlbiB1c2luZyB0aGVzZQorICAgZnVuY3Rpb25zLgogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fTWFsbG9jKHNpemVfdCBuKQogCkBAIC0xNTUsNiArMjA1LDEyNSBAQAogOmM6ZnVuYzpgUHlNZW1fTkVXYCwgOmM6ZnVuYzpgUHlNZW1fUkVTSVpFYCwgOmM6ZnVuYzpgUHlNZW1fREVMYC4KIAogCitDdXN0b21pemUgTWVtb3J5IEFsbG9jYXRvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3IKKworICAgU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yLiBUaGUgc3RydWN0dXJlIGhhcworICAgZm91ciBmaWVsZHM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgYGB2b2lkICpjdHhgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiBtYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICAgICAgICAgfCBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiByZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpYGAgfCBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpYGAgICAgICAgICAgICAgICAgICAgICAgfCBmcmVlIGEgbWVtb3J5IGJsb2NrICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3JEb21haW4KKworICAgRW51bSB1c2VkIHRvIGlkZW50aWZ5IGFuIGFsbG9jYXRvciBkb21haW4uIERvbWFpbnM6CisKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX1JBV2A6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX01FTWA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX09CSmA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLgorCisgICBUaGUgbmV3IGFsbG9jYXRvciBtdXN0IHJldHVybiBhIGRpc3RpbmN0IG5vbi1OVUxMIHBvaW50ZXIgd2hlbiByZXF1ZXN0aW5nCisgICB6ZXJvIGJ5dGVzLgorCisgICBGb3IgdGhlIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9SQVdgIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlCisgICB0aHJlYWQtc2FmZTogdGhlIDp0ZXJtOmBHSUwgPGdsb2JhbCBpbnRlcnByZXRlciBsb2NrPmAgaXMgbm90IGhlbGQgd2hlbiB0aGUKKyAgIGFsbG9jYXRvciBpcyBjYWxsZWQuCisKKyAgIElmIHRoZSBuZXcgYWxsb2NhdG9yIGlzIG5vdCBhIGhvb2sgKGRvZXMgbm90IGNhbGwgdGhlIHByZXZpb3VzIGFsbG9jYXRvciksCisgICB0aGUgOmM6ZnVuYzpgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzYCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlCisgICBkZWJ1ZyBob29rcyBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCisKKyAgIFNldHVwIGhvb2tzIHRvIGRldGVjdCBidWdzIGluIHRoZSBmb2xsb3dpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3IKKyAgIGZ1bmN0aW9uczoKKworICAgLSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgIC0gOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgCisgICAtIDpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AsIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9GcmVlYAorCisgICBOZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhDQmBgLCBmcmVlZCBtZW1vcnkgaXMKKyAgIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhEQmBgLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAgY2FsbGVkIG9uIGEgYnVmZmVyCisgICAgIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgCisgICAtIGRldGVjdCB3cml0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGJ1ZmZlciB1bmRlcmZsb3cpCisgICAtIGRldGVjdCB3cml0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGJ1ZmZlciBvdmVyZmxvdykKKworICAgVGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBQeXRob24gaXMgbm90IGNvbXBpbGVkIGlzIGRlYnVnIG1vZGUuCisKKworQ3VzdG9taXplIFB5T2JqZWN0IEFyZW5hIEFsbG9jYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gaGFzIGEgKnB5bWFsbG9jKiBhbGxvY2F0b3IgZm9yIGFsbG9jYXRpb25zIHNtYWxsZXIgdGhhbiA1MTIgYnl0ZXMuIFRoaXMKK2FsbG9jYXRvciBpcyBvcHRpbWl6ZWQgZm9yIHNtYWxsIG9iamVjdHMgd2l0aCBhIHNob3J0IGxpZmV0aW1lLiBJdCB1c2VzIG1lbW9yeQorbWFwcGluZ3MgY2FsbGVkICJhcmVuYXMiIHdpdGggYSBmaXhlZCBzaXplIG9mIDI1NiBLQi4gSXQgZmFsbHMgYmFjayB0bworOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgZm9yIGFsbG9jYXRpb25zIGxhcmdlcgordGhhbiA1MTIgYnl0ZXMuICAqcHltYWxsb2MqIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB1c2VkIGJ5Cis6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLgorCitUaGUgZGVmYXVsdCBhcmVuYSBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworKiA6YzpmdW5jOmBWaXJ0dWFsQWxsb2NgIGFuZCA6YzpmdW5jOmBWaXJ0dWFsRnJlZWAgb24gV2luZG93cywKKyogOmM6ZnVuYzpgbW1hcGAgYW5kIDpjOmZ1bmM6YG11bm1hcGAgaWYgYXZhaWxhYmxlLAorKiA6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOnR5cGU6OiBQeU9iamVjdEFyZW5hQWxsb2NhdG9yCisKKyAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGFuIGFyZW5hIGFsbG9jYXRvci4gVGhlIHN0cnVjdHVyZSBoYXMKKyAgIHRocmVlIGZpZWxkczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYHZvaWQgKmN0eGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICB8IGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSwgdm9pZCAqcHRyKWBgIHwgZnJlZSBhbiBhcmVuYSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4KKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuCisKKwogLi4gX21lbW9yeWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCBiZDQ2MTcwLi45ODVhMzQ3IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtMzUsMTMgKzM1LDIwIEBACiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2RvY19fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2ZpbGVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKKyAgICAgIHNpbmdsZTogX19wYWNrYWdlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCisgICAgICBzaW5nbGU6IF9fbG9hZGVyX18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKICAgIFJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqbmFtZSouCi0gICBPbmx5IHRoZSBtb2R1bGUncyA6YXR0cjpgX19kb2NfX2AgYW5kIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcyBhcmUgZmlsbGVkIGluOwotICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGEgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUuCisgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19wYWNrYWdlX19gLCBhbmQKKyAgIDphdHRyOmBfX2xvYWRlcl9fYCBhdHRyaWJ1dGVzIGFyZSBmaWxsZWQgaW4gKGFsbCBidXQgOmF0dHI6YF9fbmFtZV9fYCBhcmUgc2V0CisgICB0byBgYE5vbmVgYCk7IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhIDphdHRyOmBfX2ZpbGVfX2AKKyAgIGF0dHJpYnV0ZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6YXR0cjpgX19wYWNrYWdlX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2AgYXJlIHNldCB0byBgYE5vbmVgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX05ldyhjb25zdCBjaGFyICpuYW1lKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdCBiL0RvYy9jLWFwaS9vYmplY3QucnN0CmluZGV4IDBhYmEzNjAuLjNlN2MzYjYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9vYmplY3QucnN0CisrKyBiL0RvYy9jLWFwaS9vYmplY3QucnN0CkBAIC0xNDksNiArMTQ5LDkgQEAKICAgIHJlcHJlc2VudGF0aW9uIG9uIHN1Y2Nlc3MsICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUKICAgIFB5dGhvbiBleHByZXNzaW9uIGBgcmVwcihvKWBgLiAgQ2FsbGVkIGJ5IHRoZSA6ZnVuYzpgcmVwcmAgYnVpbHQtaW4gZnVuY3Rpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGRlYnVnIGFzc2VydGlvbiB0byBoZWxwIGVuc3VyZSB0aGF0IGl0CisgICAgICBkb2VzIG5vdCBzaWxlbnRseSBkaXNjYXJkIGFuIGFjdGl2ZSBleGNlcHRpb24uCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQVNDSUkoUHlPYmplY3QgKm8pCiAKQEAgLTE3MCw2ICsxNzMsMTAgQEAKICAgIFB5dGhvbiBleHByZXNzaW9uIGBgc3RyKG8pYGAuICBDYWxsZWQgYnkgdGhlIDpmdW5jOmBzdHJgIGJ1aWx0LWluIGZ1bmN0aW9uCiAgICBhbmQsIHRoZXJlZm9yZSwgYnkgdGhlIDpmdW5jOmBwcmludGAgZnVuY3Rpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGRlYnVnIGFzc2VydGlvbiB0byBoZWxwIGVuc3VyZSB0aGF0IGl0CisgICAgICBkb2VzIG5vdCBzaWxlbnRseSBkaXNjYXJkIGFuIGFjdGl2ZSBleGNlcHRpb24uCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQnl0ZXMoUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogYnl0ZXMKQEAgLTI0MCw3ICsyNDcsNyBAQAogICAgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgY2FsbGFibGVfb2JqZWN0KCphcmdzKWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZSwgY2hhciAqZm9ybWF0LCAuLi4pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBDYWxsIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCAqY2FsbGFibGUqLCB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIEMgYXJndW1lbnRzLgogICAgVGhlIEMgYXJndW1lbnRzIGFyZSBkZXNjcmliZWQgdXNpbmcgYSA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCBzdHlsZSBmb3JtYXQKQEAgLTI1MCw4ICsyNTcsMTEgQEAKICAgIHBhc3MgOmM6dHlwZTpgUHlPYmplY3QgXCpgIGFyZ3MsIDpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3NgIGlzIGEKICAgIGZhc3RlciBhbHRlcm5hdGl2ZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSB0eXBlIG9mICpmb3JtYXQqIHdhcyBjaGFuZ2VkIGZyb20gYGBjaGFyICpgYC4KIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjaGFyICptZXRob2QsIGNoYXIgKmZvcm1hdCwgLi4uKQorCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm1ldGhvZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAKICAgIENhbGwgdGhlIG1ldGhvZCBuYW1lZCAqbWV0aG9kKiBvZiBvYmplY3QgKm8qIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgQwogICAgYXJndW1lbnRzLiAgVGhlIEMgYXJndW1lbnRzIGFyZSBkZXNjcmliZWQgYnkgYSA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCBmb3JtYXQKQEAgLTI2MSw2ICsyNzEsOSBAQAogICAgTm90ZSB0aGF0IGlmIHlvdSBvbmx5IHBhc3MgOmM6dHlwZTpgUHlPYmplY3QgXCpgIGFyZ3MsCiAgICA6YzpmdW5jOmBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJnc2AgaXMgYSBmYXN0ZXIgYWx0ZXJuYXRpdmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgdHlwZXMgb2YgKm1ldGhvZCogYW5kICpmb3JtYXQqIHdlcmUgY2hhbmdlZCBmcm9tIGBgY2hhciAqYGAuCisKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwgLi4uLCBOVUxMKQogCkBAIC0zNDIsNiArMzU1LDE2IEBACiAgICByZXR1cm5lZC4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0KQorCisgICBSZXR1cm4gYW4gZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAqbyouIEZpcnN0IHRyeSB0byByZXR1cm4gaXRzCisgICBhY3R1YWwgbGVuZ3RoLCB0aGVuIGFuIGVzdGltYXRlIHVzaW5nIDptZXRoOmB+b2JqZWN0Ll9fbGVuZ3RoX2hpbnRfX2AsIGFuZAorICAgZmluYWxseSByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuIE9uIGVycm9yIHJldHVybiBgYC0xYGAuIFRoaXMgaXMgdGhlCisgICBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KG8sIGRlZmF1bHQpYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfR2V0SXRlbShQeU9iamVjdCAqbywgUHlPYmplY3QgKmtleSkKIAogICAgUmV0dXJuIGVsZW1lbnQgb2YgKm8qIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCAqa2V5KiBvciAqTlVMTCogb24gZmFpbHVyZS4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zZXF1ZW5jZS5yc3QgYi9Eb2MvYy1hcGkvc2VxdWVuY2UucnN0CmluZGV4IDAyOTdiYTMuLmNmMWUxNDIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9zZXF1ZW5jZS5yc3QKKysrIGIvRG9jL2MtYXBpL3NlcXVlbmNlLnJzdApAQCAtMTIzLDEwICsxMjMsMTAgQEAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0Zhc3QoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm0pCiAKLSAgIFJldHVybnMgdGhlIHNlcXVlbmNlICpvKiBhcyBhIHR1cGxlLCB1bmxlc3MgaXQgaXMgYWxyZWFkeSBhIHR1cGxlIG9yIGxpc3QsIGluCi0gICB3aGljaCBjYXNlICpvKiBpcyByZXR1cm5lZC4gIFVzZSA6YzpmdW5jOmBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU1gIHRvIGFjY2VzcyB0aGUKLSAgIG1lbWJlcnMgb2YgdGhlIHJlc3VsdC4gIFJldHVybnMgKk5VTEwqIG9uIGZhaWx1cmUuICBJZiB0aGUgb2JqZWN0IGlzIG5vdCBhCi0gICBzZXF1ZW5jZSwgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAgd2l0aCAqbSogYXMgdGhlIG1lc3NhZ2UgdGV4dC4KKyAgIFJldHVybiB0aGUgc2VxdWVuY2UgKm8qIGFzIGEgbGlzdCwgdW5sZXNzIGl0IGlzIGFscmVhZHkgYSB0dXBsZSBvciBsaXN0LCBpbgorICAgd2hpY2ggY2FzZSAqbyogaXMgcmV0dXJuZWQuICBVc2UgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNYCB0byBhY2Nlc3MKKyAgIHRoZSBtZW1iZXJzIG9mIHRoZSByZXN1bHQuICBSZXR1cm5zICpOVUxMKiBvbiBmYWlsdXJlLiAgSWYgdGhlIG9iamVjdCBpcyBub3QKKyAgIGEgc2VxdWVuY2UsIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgIHdpdGggKm0qIGFzIHRoZSBtZXNzYWdlIHRleHQuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSkKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS90dXBsZS5yc3QgYi9Eb2MvYy1hcGkvdHVwbGUucnN0CmluZGV4IDE4NGFmZmIuLjM5MjJkNTAgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS90dXBsZS5yc3QKKysrIGIvRG9jL2MtYXBpL3R1cGxlLnJzdApAQCAtMTI5LDYgKzEyOSwxNCBAQAogICAgSW5pdGlhbGl6ZXMgYSBzdHJ1Y3Qgc2VxdWVuY2UgdHlwZSAqdHlwZSogZnJvbSAqZGVzYyogaW4gcGxhY2UuCiAKIAorLi4gYzpmdW5jdGlvbjo6IGludCBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKKworICAgVGhlIHNhbWUgYXMgYGBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlYGAsIGJ1dCByZXR1cm5zIGBgMGBgIG9uIHN1Y2Nlc3MgYW5kIGBgLTFgYCBvbgorICAgZmFpbHVyZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzp0eXBlOjogUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjCiAKICAgIENvbnRhaW5zIHRoZSBtZXRhIGluZm9ybWF0aW9uIG9mIGEgc3RydWN0IHNlcXVlbmNlIHR5cGUgdG8gY3JlYXRlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3R5cGUucnN0IGIvRG9jL2MtYXBpL3R5cGUucnN0CmluZGV4IDVkODMyNTQuLjhkYzA0MGIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS90eXBlLnJzdAorKysgYi9Eb2MvYy1hcGkvdHlwZS5yc3QKQEAgLTk3LDMgKzk3LDEzIEBACiAgICB0eXBlcy4gVGhpcyBhbGxvd3MgdGhlIGNhbGxlciB0byByZWZlcmVuY2Ugb3RoZXIgaGVhcCB0eXBlcyBhcyBiYXNlIHR5cGVzLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5VHlwZV9HZXRTbG90KFB5VHlwZU9iamVjdCAqdHlwZSwgaW50IHNsb3QpCisKKyAgIFJldHVybiB0aGUgZnVuY3Rpb24gcG9pbnRlciBzdG9yZWQgaW4gdGhlIGdpdmVuIHNsb3QuIElmIHRoZQorICAgcmVzdWx0IGlzICpOVUxMKiwgdGhpcyBpbmRpY2F0ZXMgdGhhdCBlaXRoZXIgdGhlIHNsb3QgaXMgKk5VTEwqLAorICAgb3IgdGhhdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGludmFsaWQgcGFyYW1ldGVycy4KKyAgIENhbGxlcnMgd2lsbCB0eXBpY2FsbHkgY2FzdCB0aGUgcmVzdWx0IHBvaW50ZXIgaW50byB0aGUgYXBwcm9wcmlhdGUKKyAgIGZ1bmN0aW9uIHR5cGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0IGIvRG9jL2MtYXBpL3R5cGVvYmoucnN0CmluZGV4IGYzMDg5ZDAuLjQ5N2FmMjMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS90eXBlb2JqLnJzdAorKysgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKQEAgLTQ2NCw2ICs0NjQsMzIgQEAKICAgICAgIDpjb25zdDpgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHYC4KIAogCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUworICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfQllURVNfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTCisKKyAgICAgIFRoZXNlIGZsYWdzIGFyZSB1c2VkIGJ5IGZ1bmN0aW9ucyBzdWNoIGFzCisgICAgICA6YzpmdW5jOmBQeUxvbmdfQ2hlY2tgIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGEgdHlwZSBpcyBhIHN1YmNsYXNzCisgICAgICBvZiBhIGJ1aWx0LWluIHR5cGU7IHN1Y2ggc3BlY2lmaWMgY2hlY2tzIGFyZSBmYXN0ZXIgdGhhbiBhIGdlbmVyaWMKKyAgICAgIGNoZWNrLCBsaWtlIDpjOmZ1bmM6YFB5T2JqZWN0X0lzSW5zdGFuY2VgLiBDdXN0b20gdHlwZXMgdGhhdCBpbmhlcml0CisgICAgICBmcm9tIGJ1aWx0LWlucyBzaG91bGQgaGF2ZSB0aGVpciA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZmxhZ3NgCisgICAgICBzZXQgYXBwcm9wcmlhdGVseSwgb3IgdGhlIGNvZGUgdGhhdCBpbnRlcmFjdHMgd2l0aCBzdWNoIHR5cGVzCisgICAgICB3aWxsIGJlaGF2ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hhdCBraW5kIG9mIGNoZWNrIGlzIHVzZWQuCisKKworICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRQorCisgICAgICBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBzbG90IGlzIHByZXNlbnQgaW4gdGhlCisgICAgICB0eXBlIHN0cnVjdHVyZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzptZW1iZXI6OiBjaGFyKiBQeVR5cGVPYmplY3QudHBfZG9jCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBOVUwtdGVybWluYXRlZCBDIHN0cmluZyBnaXZpbmcgdGhlIGRvY3N0cmluZyBmb3IgdGhpcwpAQCAtNTcxLDcgKzU5Nyw5IEBACiAuLiBjOm1lbWJlcjo6IHJpY2hjbXBmdW5jIFB5VHlwZU9iamVjdC50cF9yaWNoY29tcGFyZQogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIHRoZSByaWNoIGNvbXBhcmlzb24gZnVuY3Rpb24sIHdob3NlIHNpZ25hdHVyZSBpcwotICAgYGBQeU9iamVjdCAqdHBfcmljaGNvbXBhcmUoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ApYGAuCisgICBgYFB5T2JqZWN0ICp0cF9yaWNoY29tcGFyZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIsIGludCBvcClgYC4gVGhlIGZpcnN0CisgICBwYXJhbWV0ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhbiBpbnN0YW5jZSBvZiB0aGUgdHlwZSB0aGF0IGlzIGRlZmluZWQKKyAgIGJ5IDpjOnR5cGU6YFB5VHlwZU9iamVjdGAuCiAKICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gKHVzdWFsbHkgYGBQeV9UcnVlYGAKICAgIG9yIGBgUHlfRmFsc2VgYCkuICBJZiB0aGUgY29tcGFyaXNvbiBpcyB1bmRlZmluZWQsIGl0IG11c3QgcmV0dXJuCkBAIC05NjcsNiArOTk1LDQ3IEBACiAgICBUaGlzIGZpZWxkIGlzIG5vdCBpbmhlcml0ZWQ7IGl0IGlzIGNhbGN1bGF0ZWQgZnJlc2ggYnkgOmM6ZnVuYzpgUHlUeXBlX1JlYWR5YC4KIAogCisuLiBjOm1lbWJlcjo6IGRlc3RydWN0b3IgUHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplCisKKyAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gaW5zdGFuY2UgZmluYWxpemF0aW9uIGZ1bmN0aW9uLiAgSXRzIHNpZ25hdHVyZSBpcworICAgOmM6dHlwZTpgZGVzdHJ1Y3RvcmA6OgorCisgICAgICB2b2lkIHRwX2ZpbmFsaXplKFB5T2JqZWN0ICopCisKKyAgIElmIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgaXMgc2V0LCB0aGUgaW50ZXJwcmV0ZXIgY2FsbHMgaXQgb25jZSB3aGVuCisgICBmaW5hbGl6aW5nIGFuIGluc3RhbmNlLiAgSXQgaXMgY2FsbGVkIGVpdGhlciBmcm9tIHRoZSBnYXJiYWdlCisgICBjb2xsZWN0b3IgKGlmIHRoZSBpbnN0YW5jZSBpcyBwYXJ0IG9mIGFuIGlzb2xhdGVkIHJlZmVyZW5jZSBjeWNsZSkgb3IKKyAgIGp1c3QgYmVmb3JlIHRoZSBvYmplY3QgaXMgZGVhbGxvY2F0ZWQuICBFaXRoZXIgd2F5LCBpdCBpcyBndWFyYW50ZWVkCisgICB0byBiZSBjYWxsZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcywgZW5zdXJpbmcKKyAgIHRoYXQgaXQgZmluZHMgdGhlIG9iamVjdCBpbiBhIHNhbmUgc3RhdGUuCisKKyAgIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgc2hvdWxkIG5vdCBtdXRhdGUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHN0YXR1czsKKyAgIHRoZXJlZm9yZSwgYSByZWNvbW1lbmRlZCB3YXkgdG8gd3JpdGUgYSBub24tdHJpdmlhbCBmaW5hbGl6ZXIgaXM6OgorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgbG9jYWxfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCisgICAgICB7CisgICAgICAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKworICAgICAgICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCisgICAgICAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisKKyAgICAgICAgICAvKiAuLi4gKi8KKworICAgICAgICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICAgICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworICAgICAgfQorCisgICBGb3IgdGhpcyBmaWVsZCB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgKGV2ZW4gdGhyb3VnaCBpbmhlcml0YW5jZSksCisgICB5b3UgbXVzdCBhbHNvIHNldCB0aGUgOmNvbnN0OmBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkVgIGZsYWdzIGJpdC4KKworICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBzZWVhbHNvOjogIlNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbiIgKDpwZXA6YDQ0MmApCisKKwogLi4gYzptZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2NhY2hlCiAKICAgIFVudXNlZC4gIE5vdCBpbmhlcml0ZWQuICBJbnRlcm5hbCB1c2Ugb25seS4KQEAgLTExNTAsNyArMTIxOSw4IEBACiAKICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6YzpmdW5jOmBQeVNlcXVlbmNlX1JlcGVhdGAgYW5kIGhhcyB0aGUgc2FtZQogICAgc2lnbmF0dXJlLiAgSXQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBgYCpgYCBvcGVyYXRvciwgYWZ0ZXIgdHJ5aW5nIG51bWVyaWMKLSAgIG11bHRpcGxpY2F0aW9uIHZpYSB0aGUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2FzX251bWJlci5uYl9tdWxgIHNsb3QuCisgICBtdWx0aXBsaWNhdGlvbiB2aWEgdGhlIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9hc19udW1iZXIubmJfbXVsdGlwbHlgCisgICBzbG90LgogCiAuLiBjOm1lbWJlcjo6IHNzaXplYXJnZnVuYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9pdGVtCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS91bmljb2RlLnJzdCBiL0RvYy9jLWFwaS91bmljb2RlLnJzdAppbmRleCAzNjQ5Y2ZiLi40MzUyMzUxIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKKysrIGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CkBAIC01MjYsMTIgKzUyNiwyMyBAQAogICAgICAgVGhlIGAiJWxsZCJgIGFuZCBgIiVsbHUiYCBmb3JtYXQgc3BlY2lmaWVycyBhcmUgb25seSBhdmFpbGFibGUKICAgICAgIHdoZW4gOmNvbnN0OmBIQVZFX0xPTkdfTE9OR2AgaXMgZGVmaW5lZC4KIAorICAgLi4gbm90ZTo6CisgICAgICBUaGUgd2lkdGggZm9ybWF0dGVyIHVuaXQgaXMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gYnl0ZXMuCisgICAgICBUaGUgcHJlY2lzaW9uIGZvcm1hdHRlciB1bml0IGlzIG51bWJlciBvZiBieXRlcyBmb3IgYGAiJXMiYGAgYW5kCisgICAgICBgYCIlViJgYCAoaWYgdGhlIGBgUHlPYmplY3QqYGAgYXJndW1lbnQgaXMgTlVMTCksIGFuZCBhIG51bWJlciBvZgorICAgICAgY2hhcmFjdGVycyBmb3IgYGAiJUEiYGAsIGBgIiVVImBgLCBgYCIlUyJgYCwgYGAiJVIiYGAgYW5kIGBgIiVWImBgCisgICAgICAoaWYgdGhlIGBgUHlPYmplY3QqYGAgYXJndW1lbnQgaXMgbm90IE5VTEwpLgorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgU3VwcG9ydCBmb3IgYGAiJWxsZCJgYCBhbmQgYGAiJWxsdSJgYCBhZGRlZC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFN1cHBvcnQgZm9yIGBgIiVsaSJgYCwgYGAiJWxsaSJgYCBhbmQgYGAiJXppImBgIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU3VwcG9ydCB3aWR0aCBhbmQgcHJlY2lzaW9uIGZvcm1hdHRlciBmb3IgYGAiJXMiYGAsIGBgIiVBImBgLCBgYCIlVSJgYCwKKyAgICAgIGBgIiVWImBgLCBgYCIlUyJgYCwgYGAiJVIiYGAgYWRkZWQuCisKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQogCkBAIC0xNjEzLDcgKzE2MjQsNyBAQAogICAgQ29tcGFyZSBhIHVuaWNvZGUgb2JqZWN0LCAqdW5pKiwgd2l0aCAqc3RyaW5nKiBhbmQgcmV0dXJuIC0xLCAwLCAxIGZvciBsZXNzCiAgICB0aGFuLCBlcXVhbCwgYW5kIGdyZWF0ZXIgdGhhbiwgcmVzcGVjdGl2ZWx5LiBJdCBpcyBiZXN0IHRvIHBhc3Mgb25seQogICAgQVNDSUktZW5jb2RlZCBzdHJpbmdzLCBidXQgdGhlIGZ1bmN0aW9uIGludGVycHJldHMgdGhlIGlucHV0IHN0cmluZyBhcwotICAgSVNPLTg4NTktMSBpZiBpdCBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycyIuCisgICBJU08tODg1OS0xIGlmIGl0IGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX1JpY2hDb21wYXJlKFB5T2JqZWN0ICpsZWZ0LCAgUHlPYmplY3QgKnJpZ2h0LCAgaW50IG9wKQpAQCAtMTYzNSw3ICsxNjQ2LDcgQEAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zvcm1hdChQeU9iamVjdCAqZm9ybWF0LCBQeU9iamVjdCAqYXJncykKIAogICAgUmV0dXJuIGEgbmV3IHN0cmluZyBvYmplY3QgZnJvbSAqZm9ybWF0KiBhbmQgKmFyZ3MqOyB0aGlzIGlzIGFuYWxvZ291cyB0bwotICAgYGBmb3JtYXQgJSBhcmdzYGAuICBUaGUgKmFyZ3MqIGFyZ3VtZW50IG11c3QgYmUgYSB0dXBsZS4KKyAgIGBgZm9ybWF0ICUgYXJnc2BgLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlX0NvbnRhaW5zKFB5T2JqZWN0ICpjb250YWluZXIsIFB5T2JqZWN0ICplbGVtZW50KQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdCBiL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKaW5kZXggMTRlZjhkZi4uZjdlZDRjNyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdAorKysgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CkBAIC0xNDQsNiArMTQ0LDM3IEBACiAgICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4gIFJldHVybnMgYGAwYGAgYXQgRU9GLgogCiAKKy4uIGM6dmFyOjogaW50ICgqUHlPU19JbnB1dEhvb2spKHZvaWQpCisKKyAgIENhbiBiZSBzZXQgdG8gcG9pbnQgdG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBwcm90b3R5cGUKKyAgIGBgaW50IGZ1bmModm9pZClgYC4gIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIFB5dGhvbidzCisgICBpbnRlcnByZXRlciBwcm9tcHQgaXMgYWJvdXQgdG8gYmVjb21lIGlkbGUgYW5kIHdhaXQgZm9yIHVzZXIgaW5wdXQKKyAgIGZyb20gdGhlIHRlcm1pbmFsLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLiAgT3ZlcnJpZGluZyB0aGlzCisgICBob29rIGNhbiBiZSB1c2VkIHRvIGludGVncmF0ZSB0aGUgaW50ZXJwcmV0ZXIncyBwcm9tcHQgd2l0aCBvdGhlcgorICAgZXZlbnQgbG9vcHMsIGFzIGRvbmUgaW4gdGhlIDpmaWxlOmBNb2R1bGVzL190a2ludGVyLmNgIGluIHRoZQorICAgUHl0aG9uIHNvdXJjZSBjb2RlLgorCisKKy4uIGM6dmFyOjogY2hhciogKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKQorCisgICBDYW4gYmUgc2V0IHRvIHBvaW50IHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdG90eXBlCisgICBgYGNoYXIgKmZ1bmMoRklMRSAqc3RkaW4sIEZJTEUgKnN0ZG91dCwgY2hhciAqcHJvbXB0KWBgLAorICAgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBmdW5jdGlvbiB1c2VkIHRvIHJlYWQgYSBzaW5nbGUgbGluZSBvZiBpbnB1dAorICAgYXQgdGhlIGludGVycHJldGVyJ3MgcHJvbXB0LiAgVGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIG91dHB1dAorICAgdGhlIHN0cmluZyAqcHJvbXB0KiBpZiBpdCdzIG5vdCAqTlVMTCosIGFuZCB0aGVuIHJlYWQgYSBsaW5lIG9mCisgICBpbnB1dCBmcm9tIHRoZSBwcm92aWRlZCBzdGFuZGFyZCBpbnB1dCBmaWxlLCByZXR1cm5pbmcgdGhlCisgICByZXN1bHRpbmcgc3RyaW5nLiAgRm9yIGV4YW1wbGUsIFRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIHNldHMKKyAgIHRoaXMgaG9vayB0byBwcm92aWRlIGxpbmUtZWRpdGluZyBhbmQgdGFiLWNvbXBsZXRpb24gZmVhdHVyZXMuCisKKyAgIFRoZSByZXN1bHQgbXVzdCBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvcgorICAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIG9yICpOVUxMKiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXN1bHQgbXVzdCBiZSBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvcgorICAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIGluc3RlYWQgb2YgYmVpbmcgYWxsb2NhdGVkIGJ5CisgICAgICA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLgorCisKIC4uIGM6ZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0KQogCiAgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8KQEAgLTIzNSwxNiArMjY2LDE1IEBACiAgICAqb3B0aW1pemUqIHNldCB0byBgYC0xYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzdHIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCiAKICAgIFBhcnNlIGFuZCBjb21waWxlIHRoZSBQeXRob24gc291cmNlIGNvZGUgaW4gKnN0ciosIHJldHVybmluZyB0aGUgcmVzdWx0aW5nIGNvZGUKICAgIG9iamVjdC4gIFRoZSBzdGFydCB0b2tlbiBpcyBnaXZlbiBieSAqc3RhcnQqOyB0aGlzIGNhbiBiZSB1c2VkIHRvIGNvbnN0cmFpbiB0aGUKICAgIGNvZGUgd2hpY2ggY2FuIGJlIGNvbXBpbGVkIGFuZCBzaG91bGQgYmUgOmNvbnN0OmBQeV9ldmFsX2lucHV0YCwKICAgIDpjb25zdDpgUHlfZmlsZV9pbnB1dGAsIG9yIDpjb25zdDpgUHlfc2luZ2xlX2lucHV0YC4gIFRoZSBmaWxlbmFtZSBzcGVjaWZpZWQgYnkKICAgICpmaWxlbmFtZSogaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGNvZGUgb2JqZWN0IGFuZCBtYXkgYXBwZWFyIGluIHRyYWNlYmFja3Mgb3IKLSAgIDpleGM6YFN5bnRheEVycm9yYCBleGNlcHRpb24gbWVzc2FnZXMsIGl0IGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbQotICAgZW5jb2RpbmcgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuICBUaGlzIHJldHVybnMgKk5VTEwqIGlmIHRoZQotICAgY29kZSBjYW5ub3QgYmUgcGFyc2VkIG9yIGNvbXBpbGVkLgorICAgOmV4YzpgU3ludGF4RXJyb3JgIGV4Y2VwdGlvbiBtZXNzYWdlcy4gIFRoaXMgcmV0dXJucyAqTlVMTCogaWYgdGhlIGNvZGUKKyAgIGNhbm5vdCBiZSBwYXJzZWQgb3IgY29tcGlsZWQuCiAKICAgIFRoZSBpbnRlZ2VyICpvcHRpbWl6ZSogc3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgb2YgdGhlIGNvbXBpbGVyOyBhCiAgICB2YWx1ZSBvZiBgYC0xYGAgc2VsZWN0cyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIG9mIHRoZSBpbnRlcnByZXRlciBhcyBnaXZlbiBieQpAQCAtMjUyLDkgKzI4MiwxNiBAQAogICAgYGBfX2RlYnVnX19gYCBpcyB0cnVlKSwgYGAxYGAgKGFzc2VydHMgYXJlIHJlbW92ZWQsIGBgX19kZWJ1Z19fYGAgaXMgZmFsc2UpCiAgICBvciBgYDJgYCAoZG9jc3RyaW5ncyBhcmUgcmVtb3ZlZCB0b28pLgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCisKKyAgIExpa2UgOmM6ZnVuYzpgUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3NgLCBidXQgKmZpbGVuYW1lKiBpcyBhIGJ5dGUgc3RyaW5nCisgICBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKDpmdW5jOmBvcy5mc2RlY29kZWApLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfRXZhbENvZGUoUHlPYmplY3QgKmNvLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscykKIAogICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5RXZhbF9FdmFsQ29kZUV4YCwgd2l0aCBqdXN0CkBAIC0yODUsNiArMzIyLDEwIEBACiAgICBpdCBjYXVzZXMgYW4gZXhjZXB0aW9uIHRvIGltbWVkaWF0ZWx5IGJlIHRocm93bjsgdGhpcyBpcyB1c2VkIGZvciB0aGUKICAgIDptZXRoOmB+Z2VuZXJhdG9yLnRocm93YCBtZXRob2RzIG9mIGdlbmVyYXRvciBvYmplY3RzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhpcyBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBkZWJ1ZyBhc3NlcnRpb24gdG8gaGVscCBlbnN1cmUgdGhhdCBpdAorICAgICAgZG9lcyBub3Qgc2lsZW50bHkgZGlzY2FyZCBhbiBhY3RpdmUgZXhjZXB0aW9uLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFncyhQeUNvbXBpbGVyRmxhZ3MgKmNmKQogCkBAIC0zMzgsNCArMzc5LDMgQEAKIAogICAgVGhpcyBiaXQgY2FuIGJlIHNldCBpbiAqZmxhZ3MqIHRvIGNhdXNlIGRpdmlzaW9uIG9wZXJhdG9yIGBgL2BgIHRvIGJlCiAgICBpbnRlcnByZXRlZCBhcyAidHJ1ZSBkaXZpc2lvbiIgYWNjb3JkaW5nIHRvIDpwZXA6YDIzOGAuCi0KZGlmZiAtLWdpdCBhL0RvYy9jb25mLnB5IGIvRG9jL2NvbmYucHkKaW5kZXggNWI2M2NhZC4uYzBlZDhjNiAxMDA2NDQKLS0tIGEvRG9jL2NvbmYucHkKKysrIGIvRG9jL2NvbmYucHkKQEAgLTYxLDYgKzYxLDggQEAKICMgQnkgZGVmYXVsdCwgaGlnaGxpZ2h0IGFzIFB5dGhvbiAzLgogaGlnaGxpZ2h0X2xhbmd1YWdlID0gJ3B5dGhvbjMnCiAKK25lZWRzX3NwaGlueCA9ICcxLjEnCisKIAogIyBPcHRpb25zIGZvciBIVE1MIG91dHB1dAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE4LDExICsxMjAsMTEgQEAKIGxhdGV4X2RvY3VtZW50cyA9IFsKICAgICAoJ2MtYXBpL2luZGV4JywgJ2MtYXBpLnRleCcsCiAgICAgICdUaGUgUHl0aG9uL0MgQVBJJywgX3N0ZGF1dGhvciwgJ21hbnVhbCcpLAotICAgICgnZGlzdHV0aWxzL2luZGV4JywgJ2Rpc3R1dGlscy50ZXgnLAorICAgICgnZGlzdHJpYnV0aW5nL2luZGV4JywgJ2Rpc3RyaWJ1dGluZy50ZXgnLAogICAgICAnRGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzJywgX3N0ZGF1dGhvciwgJ21hbnVhbCcpLAogICAgICgnZXh0ZW5kaW5nL2luZGV4JywgJ2V4dGVuZGluZy50ZXgnLAogICAgICAnRXh0ZW5kaW5nIGFuZCBFbWJlZGRpbmcgUHl0aG9uJywgX3N0ZGF1dGhvciwgJ21hbnVhbCcpLAotICAgICgnaW5zdGFsbC9pbmRleCcsICdpbnN0YWxsLnRleCcsCisgICAgKCdpbnN0YWxsaW5nL2luZGV4JywgJ2luc3RhbGxpbmcudGV4JywKICAgICAgJ0luc3RhbGxpbmcgUHl0aG9uIE1vZHVsZXMnLCBfc3RkYXV0aG9yLCAnbWFudWFsJyksCiAgICAgKCdsaWJyYXJ5L2luZGV4JywgJ2xpYnJhcnkudGV4JywKICAgICAgJ1RoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UnLCBfc3RkYXV0aG9yLCAnbWFudWFsJyksCmRpZmYgLS1naXQgYS9Eb2MvY29udGVudHMucnN0IGIvRG9jL2NvbnRlbnRzLnJzdAppbmRleCBjMGM2YWYzLi4yOWIwN2RiIDEwMDY0NAotLS0gYS9Eb2MvY29udGVudHMucnN0CisrKyBiL0RvYy9jb250ZW50cy5yc3QKQEAgLTExLDggKzExLDggQEAKICAgIGxpYnJhcnkvaW5kZXgucnN0CiAgICBleHRlbmRpbmcvaW5kZXgucnN0CiAgICBjLWFwaS9pbmRleC5yc3QKLSAgIGRpc3R1dGlscy9pbmRleC5yc3QKLSAgIGluc3RhbGwvaW5kZXgucnN0CisgICBkaXN0cmlidXRpbmcvaW5kZXgucnN0CisgICBpbnN0YWxsaW5nL2luZGV4LnJzdAogICAgaG93dG8vaW5kZXgucnN0CiAgICBmYXEvaW5kZXgucnN0CiAgICBnbG9zc2FyeS5yc3QKQEAgLTIxLDMgKzIxLDExIEBACiAgICBidWdzLnJzdAogICAgY29weXJpZ2h0LnJzdAogICAgbGljZW5zZS5yc3QKKworLi4gaW5jbHVkZSBsZWdhY3kgcGFja2FnaW5nIGRvY3MgaW4gYnVpbGQKKworLi4gdG9jdHJlZTo6CisgICA6aGlkZGVuOgorCisgICBkaXN0dXRpbHMvaW5kZXgucnN0CisgICBpbnN0YWxsL2luZGV4LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2RhdGEvcmVmY291bnRzLmRhdCBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKaW5kZXggYTQyNTg0Yy4uNjAyNTYxNyAxMDA2NDQKLS0tIGEvRG9jL2RhdGEvcmVmY291bnRzLmRhdAorKysgYi9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CkBAIC0yOSw3ICsyOSw3IEBACiAjIHJlZmVyZW5jZSB0byB0aGUgaXRlbSBhcmd1bWVudCEKIAogIyBUaGUgcGFyYW1ldGVyIG5hbWVzIGFyZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQVBJIG1hbnVhbCwgbm90IHRoZSBzb3VyY2UKLSMgY29kZS4gCisjIGNvZGUuCiAKIFB5Qm9vbF9Gcm9tTG9uZzpQeU9iamVjdCo6OisxOgogUHlCb29sX0Zyb21Mb25nOmxvbmc6djowOgpAQCAtMjIwLDYgKzIyMCwxMSBAQAogUHlEaWN0X0dldEl0ZW1TdHJpbmc6UHlPYmplY3QqOnA6MDoKIFB5RGljdF9HZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKK1B5RGljdF9TZXREZWZhdWx0OlB5T2JqZWN0Kjo6MDoKK1B5RGljdF9TZXREZWZhdWx0OlB5T2JqZWN0KjpwOjA6CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6a2V5OjA6Y29uZGl0aW9uYWxseSArMSBpZiBpbnNlcnRlZCBpbnRvIHRoZSBkaWN0CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6ZGVmYXVsdDowOmNvbmRpdGlvbmFsbHkgKzEgaWYgaW5zZXJ0ZWQgaW50byB0aGUgZGljdAorCiBQeURpY3RfSXRlbXM6UHlPYmplY3QqOjorMToKIFB5RGljdF9JdGVtczpQeU9iamVjdCo6cDowOgogCkBAIC01MDMsMTMgKzUwOCwxMyBAQAogUHlJbXBvcnRfQ2xlYW51cDp2b2lkOjo6CiAKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOlB5T2JqZWN0Kjo6KzE6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpjaGFyKjpuYW1lOjoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOmNvbnN0IGNoYXIqOm5hbWU6OgogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6UHlPYmplY3QqOmNvOjA6CiAKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6UHlPYmplY3QqOjorMToKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y2hhcio6bmFtZTo6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNvbnN0IGNoYXIqOm5hbWU6OgogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpQeU9iamVjdCo6Y286MDoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y2hhcio6cGF0aG5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjb25zdCBjaGFyKjpwYXRobmFtZTo6CiAKIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyOmxvbmc6OjoKIApAQCAtNTE5LDcgKzUyNCw3IEBACiBQeUltcG9ydF9JbXBvcnQ6UHlPYmplY3QqOm5hbWU6MDoKIAogUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmludDo6OgotUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmNoYXIqOjo6CitQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGU6Y29uc3QgY2hhcio6OjoKIAogUHlJbXBvcnRfSW1wb3J0TW9kdWxlOlB5T2JqZWN0Kjo6KzE6CiBQeUltcG9ydF9JbXBvcnRNb2R1bGU6Y29uc3QgY2hhcio6bmFtZTo6CkBAIC02NjgsNyArNjczLDcgQEAKIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZzp1bnNpZ25lZCBsb25nIGxvbmc6djo6CiAKIFB5TG9uZ19Gcm9tU3RyaW5nOlB5T2JqZWN0Kjo6KzE6Ci1QeUxvbmdfRnJvbVN0cmluZzpjaGFyKjpzdHI6OgorUHlMb25nX0Zyb21TdHJpbmc6Y29uc3QgY2hhcio6c3RyOjoKIFB5TG9uZ19Gcm9tU3RyaW5nOmNoYXIqKjpwZW5kOjoKIFB5TG9uZ19Gcm9tU3RyaW5nOmludDpiYXNlOjoKIApAQCAtNjk2LDcgKzcwMSw3IEBACiAKIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nOlB5T2JqZWN0Kjo6KzE6CiBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpQeU9iamVjdCo6bzowOgotUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19HZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKIFB5TWFwcGluZ19IYXNLZXk6aW50Ojo6CiBQeU1hcHBpbmdfSGFzS2V5OlB5T2JqZWN0KjpvOjA6CkBAIC03MDQsNyArNzA5LDcgQEAKIAogUHlNYXBwaW5nX0hhc0tleVN0cmluZzppbnQ6OjoKIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc6UHlPYmplY3QqOm86MDoKLVB5TWFwcGluZ19IYXNLZXlTdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19IYXNLZXlTdHJpbmc6Y29uc3QgY2hhcio6a2V5OjoKIAogUHlNYXBwaW5nX0l0ZW1zOlB5T2JqZWN0Kjo6KzE6CiBQeU1hcHBpbmdfSXRlbXM6UHlPYmplY3QqOm86MDoKQEAgLTcxNyw3ICs3MjIsNyBAQAogCiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzppbnQ6OjoKIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nOlB5T2JqZWN0KjpvOjA6Ci1QeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpjaGFyKjprZXk6OgorUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6Y29uc3QgY2hhcio6a2V5OjoKIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nOlB5T2JqZWN0Kjp2OisxOgogCiBQeU1hcHBpbmdfVmFsdWVzOlB5T2JqZWN0Kjo6KzE6CkBAIC03MzAsNyArNzM1LDcgQEAKIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGU6RklMRSo6ZmlsZTo6CiAKIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgotUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOmNoYXIqOnN0cmluZzo6CitQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6Y29uc3QgY2hhcio6c3RyaW5nOjoKIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzppbnQ6bGVuOjoKIAogUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmc6UHlPYmplY3QqOjorMToKQEAgLTkwMiw3ICs5MDcsNyBAQAogUHlOdW1iZXJfWG9yOlB5T2JqZWN0KjpvMTowOgogUHlOdW1iZXJfWG9yOlB5T2JqZWN0KjpvMjowOgogCi1QeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yOmludDo6OiAKK1B5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I6aW50Ojo6CiBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yOlB5T2JqZWN0KjpvOjA6CiAKIFB5T2JqZWN0X0NhbGw6UHlPYmplY3QqOjorMToKQEAgLTkxMiw3ICs5MTcsNyBAQAogCiBQeU9iamVjdF9DYWxsRnVuY3Rpb246UHlPYmplY3QqOjorMToKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbjpQeU9iamVjdCo6Y2FsbGFibGVfb2JqZWN0OjA6Ci1QeU9iamVjdF9DYWxsRnVuY3Rpb246Y2hhcio6Zm9ybWF0OjoKK1B5T2JqZWN0X0NhbGxGdW5jdGlvbjpjb25zdCBjaGFyKjpmb3JtYXQ6OgogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOjouLi46OgogCiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzOlB5T2JqZWN0Kjo6KzE6CkBAIC05MjEsOCArOTI2LDggQEAKIAogUHlPYmplY3RfQ2FsbE1ldGhvZDpQeU9iamVjdCo6OisxOgogUHlPYmplY3RfQ2FsbE1ldGhvZDpQeU9iamVjdCo6bzowOgotUHlPYmplY3RfQ2FsbE1ldGhvZDpjaGFyKjptOjoKLVB5T2JqZWN0X0NhbGxNZXRob2Q6Y2hhcio6Zm9ybWF0OjoKK1B5T2JqZWN0X0NhbGxNZXRob2Q6Y29uc3QgY2hhcio6bTo6CitQeU9iamVjdF9DYWxsTWV0aG9kOmNvbnN0IGNoYXIqOmZvcm1hdDo6CiBQeU9iamVjdF9DYWxsTWV0aG9kOjouLi46OgogCiBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJnczpQeU9iamVjdCo6OisxOgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3RyaWJ1dGluZy9pbmRleC5yc3QgYi9Eb2MvZGlzdHJpYnV0aW5nL2luZGV4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ5NTUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2Rpc3RyaWJ1dGluZy9pbmRleC5yc3QKQEAgLTAsMCArMSwxNjggQEAKKy4uIF9kaXN0cmlidXRpbmctaW5kZXg6CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgRGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKzpFbWFpbDogZGlzdHV0aWxzLXNpZ0BweXRob24ub3JnCisKKworQXMgYSBwb3B1bGFyIG9wZW4gc291cmNlIGRldmVsb3BtZW50IHByb2plY3QsIFB5dGhvbiBoYXMgYW4gYWN0aXZlCitzdXBwb3J0aW5nIGNvbW11bml0eSBvZiBjb250cmlidXRvcnMgYW5kIHVzZXJzIHRoYXQgYWxzbyBtYWtlIHRoZWlyIHNvZnR3YXJlCithdmFpbGFibGUgZm9yIG90aGVyIFB5dGhvbiBkZXZlbG9wZXJzIHRvIHVzZSB1bmRlciBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zLgorCitUaGlzIGFsbG93cyBQeXRob24gdXNlcnMgdG8gc2hhcmUgYW5kIGNvbGxhYm9yYXRlIGVmZmVjdGl2ZWx5LCBiZW5lZml0aW5nCitmcm9tIHRoZSBzb2x1dGlvbnMgb3RoZXJzIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRvIGNvbW1vbiAoYW5kIHNvbWV0aW1lcworZXZlbiByYXJlISkgcHJvYmxlbXMsIGFzIHdlbGwgYXMgcG90ZW50aWFsbHkgY29udHJpYnV0aW5nIHRoZWlyIG93bgorc29sdXRpb25zIHRvIHRoZSBjb21tb24gcG9vbC4KKworVGhpcyBndWlkZSBjb3ZlcnMgdGhlIGRpc3RyaWJ1dGlvbiBwYXJ0IG9mIHRoZSBwcm9jZXNzLiBGb3IgYSBndWlkZSB0bworaW5zdGFsbGluZyBvdGhlciBQeXRob24gcHJvamVjdHMsIHJlZmVyIHRvIHRoZQorOnJlZjpgaW5zdGFsbGF0aW9uIGd1aWRlIDxpbnN0YWxsaW5nLWluZGV4PmAuCisKKy4uIG5vdGU6OgorCisgICBGb3IgY29ycG9yYXRlIGFuZCBvdGhlciBpbnN0aXR1dGlvbmFsIHVzZXJzLCBiZSBhd2FyZSB0aGF0IG1hbnkKKyAgIG9yZ2FuaXNhdGlvbnMgaGF2ZSB0aGVpciBvd24gcG9saWNpZXMgYXJvdW5kIHVzaW5nIGFuZCBjb250cmlidXRpbmcgdG8KKyAgIG9wZW4gc291cmNlIHNvZnR3YXJlLiBQbGVhc2UgdGFrZSBzdWNoIHBvbGljaWVzIGludG8gYWNjb3VudCB3aGVuIG1ha2luZworICAgdXNlIG9mIHRoZSBkaXN0cmlidXRpb24gYW5kIGluc3RhbGxhdGlvbiB0b29scyBwcm92aWRlZCB3aXRoIFB5dGhvbi4KKworCitLZXkgdGVybXMKKz09PT09PT09PQorCisqIHRoZSBgUHl0aG9uIFBhY2thZ2UgSW5kZXggPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF9fIGlzIGEgcHVibGljCisgIHJlcG9zaXRvcnkgb2Ygb3BlbiBzb3VyY2UgbGljZW5zZWQgcGFja2FnZXMgbWFkZSBhdmFpbGFibGUgZm9yIHVzZSBieQorICBvdGhlciBQeXRob24gdXNlcnMKKyogdGhlIGBQeXRob24gUGFja2FnaW5nIEF1dGhvcml0eQorICA8aHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9mdXR1cmUuaHRtbD5gX18gYXJlIHRoZSBncm91cCBvZgorICBkZXZlbG9wZXJzIGFuZCBkb2N1bWVudGF0aW9uIGF1dGhvcnMgcmVzcG9uc2libGUgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQKKyAgZXZvbHV0aW9uIG9mIHRoZSBzdGFuZGFyZCBwYWNrYWdpbmcgdG9vbHMgYW5kIHRoZSBhc3NvY2lhdGVkIG1ldGFkYXRhIGFuZAorICBmaWxlIGZvcm1hdCBzdGFuZGFyZHMuIFRoZXkgbWFpbnRhaW4gYSB2YXJpZXR5IG9mIHRvb2xzLCBkb2N1bWVudGF0aW9uCisgIGFuZCBpc3N1ZSB0cmFja2VycyBvbiBib3RoIGBHaXRIdWIgPGh0dHBzOi8vZ2l0aHViLmNvbS9weXBhPmBfXyBhbmQKKyAgYEJpdEJ1Y2tldCA8aHR0cHM6Ly9iaXRidWNrZXQub3JnL3B5cGEvPmBfXy4KKyogYGBkaXN0dXRpbHNgYCBpcyB0aGUgb3JpZ2luYWwgYnVpbGQgYW5kIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gZmlyc3QgYWRkZWQgdG8KKyAgdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IGluIDE5OTguIFdoaWxlIGRpcmVjdCB1c2Ugb2YgYGBkaXN0dXRpbHNgYCBpcworICBiZWluZyBwaGFzZWQgb3V0LCBpdCBzdGlsbCBsYWlkIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgY3VycmVudCBwYWNrYWdpbmcKKyAgYW5kIGRpc3RyaWJ1dGlvbiBpbmZyYXN0cnVjdHVyZSwgYW5kIGl0IG5vdCBvbmx5IHJlbWFpbnMgcGFydCBvZiB0aGUKKyAgc3RhbmRhcmQgbGlicmFyeSwgYnV0IGl0cyBuYW1lIGxpdmVzIG9uIGluIG90aGVyIHdheXMgKHN1Y2ggYXMgdGhlIG5hbWUKKyAgb2YgdGhlIG1haWxpbmcgbGlzdCB1c2VkIHRvIGNvb3JkaW5hdGUgUHl0aG9uIHBhY2thZ2luZyBzdGFuZGFyZHMKKyAgZGV2ZWxvcG1lbnQpLgorKiBgYHNldHVwdG9vbHNgYCBpcyBhIChsYXJnZWx5KSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBgYGRpc3R1dGlsc2BgIGZpcnN0CisgIHB1Ymxpc2hlZCBpbiAyMDA0LiBJdHMgbW9zdCBub3RhYmxlIGFkZGl0aW9uIG92ZXIgdGhlIHVubW9kaWZpZWQKKyAgYGBkaXN0dXRpbHNgYCB0b29scyB3YXMgdGhlIGFiaWxpdHkgdG8gZGVjbGFyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIKKyAgcGFja2FnZXMuIEl0IGlzIGN1cnJlbnRseSByZWNvbW1lbmRlZCBhcyBhIG1vcmUgcmVndWxhcmx5IHVwZGF0ZWQKKyAgYWx0ZXJuYXRpdmUgdG8gYGBkaXN0dXRpbHNgYCB0aGF0IG9mZmVycyBjb25zaXN0ZW50IHN1cHBvcnQgZm9yIG1vcmUKKyAgcmVjZW50IHBhY2thZ2luZyBzdGFuZGFyZHMgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBQeXRob24gdmVyc2lvbnMuCisqIGBgd2hlZWxgYCAoaW4gdGhpcyBjb250ZXh0KSBpcyBhIHByb2plY3QgdGhhdCBhZGRzIHRoZSBgYGJkaXN0X3doZWVsYGAKKyAgY29tbWFuZCB0byBgYGRpc3R1dGlsc2BgL2Bgc2V0dXB0b29sc2BgLiBUaGlzIHByb2R1Y2VzIGEgY3Jvc3MgcGxhdGZvcm0KKyAgYmluYXJ5IHBhY2thZ2luZyBmb3JtYXQgKGNhbGxlZCAid2hlZWxzIiBvciAid2hlZWwgZmlsZXMiIGFuZCBkZWZpbmVkIGluCisgIDpwZXA6YDQyN2ApIHRoYXQgYWxsb3dzIFB5dGhvbiBsaWJyYXJpZXMsIGV2ZW4gdGhvc2UgaW5jbHVkaW5nIGJpbmFyeQorICBleHRlbnNpb25zLCB0byBiZSBpbnN0YWxsZWQgb24gYSBzeXN0ZW0gd2l0aG91dCBuZWVkaW5nIHRvIGJlIGJ1aWx0CisgIGxvY2FsbHkuCisKKworT3BlbiBzb3VyY2UgbGljZW5zaW5nIGFuZCBjb2xsYWJvcmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW4gbW9zdCBwYXJ0cyBvZiB0aGUgd29ybGQsIHNvZnR3YXJlIGlzIGF1dG9tYXRpY2FsbHkgY292ZXJlZCBieSBjb3B5cmlnaHQuCitUaGlzIG1lYW5zIHRoYXQgb3RoZXIgZGV2ZWxvcGVycyByZXF1aXJlIGV4cGxpY2l0IHBlcm1pc3Npb24gdG8gY29weSwgdXNlLAorbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlLgorCitPcGVuIHNvdXJjZSBsaWNlbnNpbmcgaXMgYSB3YXkgb2YgZXhwbGljaXRseSBncmFudGluZyBzdWNoIHBlcm1pc3Npb24gaW4gYQorcmVsYXRpdmVseSBjb25zaXN0ZW50IHdheSwgYWxsb3dpbmcgZGV2ZWxvcGVycyB0byBzaGFyZSBhbmQgY29sbGFib3JhdGUKK2VmZmljaWVudGx5IGJ5IG1ha2luZyBjb21tb24gc29sdXRpb25zIHRvIHZhcmlvdXMgcHJvYmxlbXMgZnJlZWx5IGF2YWlsYWJsZS4KK1RoaXMgbGVhdmVzIG1hbnkgZGV2ZWxvcGVycyBmcmVlIHRvIHNwZW5kIG1vcmUgdGltZSBmb2N1c2luZyBvbiB0aGUgcHJvYmxlbXMKK3RoYXQgYXJlIHJlbGF0aXZlbHkgdW5pcXVlIHRvIHRoZWlyIHNwZWNpZmljIHNpdHVhdGlvbi4KKworVGhlIGRpc3RyaWJ1dGlvbiB0b29scyBwcm92aWRlZCB3aXRoIFB5dGhvbiBhcmUgZGVzaWduZWQgdG8gbWFrZSBpdAorcmVhc29uYWJseSBzdHJhaWdodGZvcndhcmQgZm9yIGRldmVsb3BlcnMgdG8gbWFrZSB0aGVpciBvd24gY29udHJpYnV0aW9ucworYmFjayB0byB0aGF0IGNvbW1vbiBwb29sIG9mIHNvZnR3YXJlIGlmIHRoZXkgY2hvb3NlIHRvIGRvIHNvLgorCitUaGUgc2FtZSBkaXN0cmlidXRpb24gdG9vbHMgY2FuIGFsc28gYmUgdXNlZCB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHdpdGhpbgorYW4gb3JnYW5pc2F0aW9uLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhhdCBzb2Z0d2FyZSBpcyBwdWJsaXNoZWQgYXMgb3Blbgorc291cmNlIHNvZnR3YXJlIG9yIG5vdC4KKworCitJbnN0YWxsaW5nIHRoZSB0b29scworPT09PT09PT09PT09PT09PT09PT0KKworVGhlIHN0YW5kYXJkIGxpYnJhcnkgZG9lcyBub3QgaW5jbHVkZSBidWlsZCB0b29scyB0aGF0IHN1cHBvcnQgbW9kZXJuCitQeXRob24gcGFja2FnaW5nIHN0YW5kYXJkcywgYXMgdGhlIGNvcmUgZGV2ZWxvcG1lbnQgdGVhbSBoYXMgZm91bmQgdGhhdCBpdAoraXMgaW1wb3J0YW50IHRvIGhhdmUgc3RhbmRhcmQgdG9vbHMgdGhhdCB3b3JrIGNvbnNpc3RlbnRseSwgZXZlbiBvbiBvbGRlcgordmVyc2lvbnMgb2YgUHl0aG9uLgorCitUaGUgY3VycmVudGx5IHJlY29tbWVuZGVkIGJ1aWxkIGFuZCBkaXN0cmlidXRpb24gdG9vbHMgY2FuIGJlIGluc3RhbGxlZAorYnkgaW52b2tpbmcgdGhlIGBgcGlwYGAgbW9kdWxlIGF0IHRoZSBjb21tYW5kIGxpbmU6OgorCisgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsIHNldHVwdG9vbHMgd2hlZWwgdHdpbmUKKworLi4gbm90ZTo6CisKKyAgIEZvciBQT1NJWCB1c2VycyAoaW5jbHVkaW5nIE1hYyBPUyBYIGFuZCBMaW51eCB1c2VycyksIHRoZXNlIGluc3RydWN0aW9ucworICAgYXNzdW1lIHRoZSB1c2Ugb2YgYSA6dGVybTpgdmlydHVhbCBlbnZpcm9ubWVudGAuCisKKyAgIEZvciBXaW5kb3dzIHVzZXJzLCB0aGVzZSBpbnN0cnVjdGlvbnMgYXNzdW1lIHRoYXQgdGhlIG9wdGlvbiB0bworICAgYWRqdXN0IHRoZSBzeXN0ZW0gUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3YXMgc2VsZWN0ZWQgd2hlbiBpbnN0YWxsaW5nCisgICBQeXRob24uCisKK1RoZSBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgaW5jbHVkZXMgbW9yZSBkZXRhaWxzIG9uIHRoZSBgY3VycmVudGx5CityZWNvbW1lbmRlZCB0b29sc2BfLgorCisuLiBfY3VycmVudGx5IHJlY29tbWVuZGVkIHRvb2xzOiBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9jdXJyZW50Lmh0bWwjcGFja2FnaW5nLXRvb2wtcmVjb21tZW5kYXRpb25zCisKK1JlYWRpbmcgdGhlIGd1aWRlCis9PT09PT09PT09PT09PT09PQorCitUaGUgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlIGNvdmVycyB0aGUgdmFyaW91cyBrZXkgc3RlcHMgYW5kIGVsZW1lbnRzCitpbnZvbHZlZCBpbiBjcmVhdGluZyBhIHByb2plY3Q6CisKKyogYFByb2plY3Qgc3RydWN0dXJlYF8KKyogYEJ1aWxkaW5nIGFuZCBwYWNrYWdpbmcgdGhlIHByb2plY3RgXworKiBgVXBsb2FkaW5nIHRoZSBwcm9qZWN0IHRvIHRoZSBQeXRob24gUGFja2FnZSBJbmRleGBfCisKKy4uIF9Qcm9qZWN0IHN0cnVjdHVyZTogXAorICAgaHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC90dXRvcmlhbC5odG1sI2NyZWF0aW5nLXlvdXItb3duLXByb2plY3QKKy4uIF9CdWlsZGluZyBhbmQgcGFja2FnaW5nIHRoZSBwcm9qZWN0OiBcCisgICBodHRwOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3R1dG9yaWFsLmh0bWwjYnVpbGRpbmctcGFja2FnaW5nLXlvdXItcHJvamVjdAorLi4gX1VwbG9hZGluZyB0aGUgcHJvamVjdCB0byB0aGUgUHl0aG9uIFBhY2thZ2UgSW5kZXg6IFwKKyAgIGh0dHA6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvdHV0b3JpYWwuaHRtbCN1cGxvYWRpbmcteW91ci1wcm9qZWN0LXRvLXB5cGkKKworCitIb3cgZG8gSS4uLj8KKz09PT09PT09PT09PQorCitUaGVzZSBhcmUgcXVpY2sgYW5zd2VycyBvciBsaW5rcyBmb3Igc29tZSBjb21tb24gdGFza3MuCisKKy4uLiBjaG9vc2UgYSBuYW1lIGZvciBteSBwcm9qZWN0PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXNuJ3QgYW4gZWFzeSB0b3BpYywgYnV0IGhlcmUgYXJlIGEgZmV3IHRpcHM6CisKKyogY2hlY2sgdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4IHRvIHNlZSBpZiB0aGUgbmFtZSBpcyBhbHJlYWR5IGluIHVzZQorKiBjaGVjayBwb3B1bGFyIGhvc3Rpbmcgc2l0ZXMgbGlrZSBHaXRIdWIsIEJpdEJ1Y2tldCwgZXRjIHRvIHNlZSBpZiB0aGVyZQorICBpcyBhbHJlYWR5IGEgcHJvamVjdCB3aXRoIHRoYXQgbmFtZQorKiBjaGVjayB3aGF0IGNvbWVzIHVwIGluIGEgd2ViIHNlYXJjaCBmb3IgdGhlIG5hbWUgeW91J3JlIGNvbnNpZGVyaW5nCisqIGF2b2lkIHBhcnRpY3VsYXJseSBjb21tb24gd29yZHMsIGVzcGVjaWFsbHkgb25lcyB3aXRoIG11bHRpcGxlIG1lYW5pbmdzLAorICBhcyB0aGV5IGNhbiBtYWtlIGl0IGRpZmZpY3VsdCBmb3IgdXNlcnMgdG8gZmluZCB5b3VyIHNvZnR3YXJlIHdoZW4KKyAgc2VhcmNoaW5nIGZvciBpdAorCisKKy4uLiBjcmVhdGUgYW5kIGRpc3RyaWJ1dGUgYmluYXJ5IGV4dGVuc2lvbnM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGFjdHVhbGx5IHF1aXRlIGEgY29tcGxleCB0b3BpYywgd2l0aCBhIHZhcmlldHkgb2YgYWx0ZXJuYXRpdmVzCithdmFpbGFibGUgZGVwZW5kaW5nIG9uIGV4YWN0bHkgd2hhdCB5b3UncmUgYWltaW5nIHRvIGFjaGlldmUuIFNlZSB0aGUKK1B5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgcmVjb21tZW5kYXRpb25zLgorCisuLiBzZWVhbHNvOjoKKworICAgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZTogQmluYXJ5IEV4dGVuc2lvbnMKKyAgIDxodHRwOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2V4dGVuc2lvbnMuaHRtbD5gX18KKworLi4gb3RoZXIgdG9waWNzOgorCisgICBPbmNlIHRoZSBEZXZlbG9wbWVudCAmIERlcGxveW1lbnQgcGFydCBvZiBQUFVHIGlzIGZsZXNoZWQgb3V0LCBzb21lIG9mCisgICB0aG9zZSBzZWN0aW9ucyBzaG91bGQgYmUgbGlua2VkIGZyb20gbmV3IHF1ZXN0aW9ucyBoZXJlIChtb3N0IG5vdGFibHksCisgICB3ZSBzaG91bGQgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IGF2b2lkaW5nIGRlcGVuZGluZyBvbiBQeVBJIHRoYXQgbGlua3MgdG8KKyAgIGh0dHA6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZGVwbG95bWVudC5odG1sI3B5cGktbWlycm9ycy1hbmQtY2FjaGVzKQpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0IGIvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0CmluZGV4IDk4NTNmMDIuLmUxMzU3ZmEgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2FwaXJlZi5yc3QKQEAgLTg1MywxNyArODUzLDYgQEAKIHBvcnQgb2YgR0NDIChzYW1lIGFzIGN5Z3dpbiBpbiBuby1jeWd3aW4gbW9kZSkuCiAKIAotOm1vZDpgZGlzdHV0aWxzLmVteGNjb21waWxlcmAgLS0tIE9TLzIgRU1YIENvbXBpbGVyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLi4gbW9kdWxlOjogZGlzdHV0aWxzLmVteGNjb21waWxlcgotICAgOnN5bm9wc2lzOiBPUy8yIEVNWCBDb21waWxlciBzdXBwb3J0Ci0KLQotVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIEVNWENDb21waWxlciBjbGFzcywgYSBzdWJjbGFzcyBvZgotOmNsYXNzOmBVbml4Q0NvbXBpbGVyYCB0aGF0IGhhbmRsZXMgdGhlIEVNWCBwb3J0IG9mIHRoZSBHTlUgQyBjb21waWxlciB0byBPUy8yLgotCi0KIDptb2Q6YGRpc3R1dGlscy5hcmNoaXZlX3V0aWxgIC0tLSAgQXJjaGl2aW5nIHV0aWxpdGllcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTEwMDQsNyArOTkzLDcgQEAKIAogICAgRmlsZXMgaW4gKnNyYyogdGhhdCBiZWdpbiB3aXRoIDpmaWxlOmAubmZzYCBhcmUgc2tpcHBlZCAobW9yZSBpbmZvcm1hdGlvbiBvbgogICAgdGhlc2UgZmlsZXMgaXMgYXZhaWxhYmxlIGluIGFuc3dlciBEMiBvZiB0aGUgYE5GUyBGQVEgcGFnZQotICAgPGh0dHA6Ly9uZnMuc291cmNlZm9yZ2UubmV0LyNzZWN0aW9uX2Q+YF8uCisgICA8aHR0cDovL25mcy5zb3VyY2Vmb3JnZS5uZXQvI3NlY3Rpb25fZD5gXykuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjEKICAgICAgIE5GUyBmaWxlcyBhcmUgaWdub3JlZC4KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAppbmRleCBkMWFiN2RiLi44M2M2OGFlIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CkBAIC0yMzksNyArMjM5LDggQEAKIGNvbmZpZ3VyYXRpb24gZmlsZSwgOmZpbGU6YHNldHVwLmNmZ2BcIC0tLXNlZSBzZWN0aW9uIDpyZWY6YHNldHVwLWNvbmZpZ2AuICBJZgogeW91IGRpc3RyaWJ1dGUgb3IgcGFja2FnZSBtYW55IFB5dGhvbiBtb2R1bGUgZGlzdHJpYnV0aW9ucywgeW91IG1pZ2h0IHdhbnQgdG8KIHB1dCBvcHRpb25zIHRoYXQgYXBwbHkgdG8gYWxsIG9mIHRoZW0gaW4geW91ciBwZXJzb25hbCBEaXN0dXRpbHMgY29uZmlndXJhdGlvbgotZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLgorZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLiAgSWYgeW91IHdhbnQgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZQordGhpcyBmaWxlLCB5b3UgY2FuIHBhc3MgdGhlIDpvcHRpb246YC0tbm8tdXNlci1jZmdgIG9wdGlvbiB0byA6ZmlsZTpgc2V0dXAucHlgLgogCiBUaGVyZSBhcmUgdGhyZWUgc3RlcHMgdG8gYnVpbGRpbmcgYSBiaW5hcnkgUlBNIHBhY2thZ2UsIGFsbCBvZiB3aGljaCBhcmUKIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgRGlzdHV0aWxzOgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9leGFtcGxlcy5yc3QgYi9Eb2MvZGlzdHV0aWxzL2V4YW1wbGVzLnJzdAppbmRleCA1ZWI2NTRhLi44NzJlY2Q5IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2V4YW1wbGVzLnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2V4YW1wbGVzLnJzdApAQCAtMTkzLDkgKzE5Myw2IEBACiAgICAgICAgICBwYWNrYWdlcz1bJ2Zvb2JhcicsICdmb29iYXIuc3ViZm9vJ10sCiAgICAgICAgICApCiAKLShBZ2FpbiwgdGhlIGVtcHR5IHN0cmluZyBpbiA6b3B0aW9uOmBwYWNrYWdlX2RpcmAgc3RhbmRzIGZvciB0aGUgY3VycmVudAotZGlyZWN0b3J5LikKLQogCiAuLiBfc2luZ2xlLWV4dDoKIApkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9pbmRleC5yc3QgYi9Eb2MvZGlzdHV0aWxzL2luZGV4LnJzdAppbmRleCAxYTZmMDRjLi45MGQxYzFhIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2luZGV4LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2luZGV4LnJzdApAQCAtMSw4ICsxLDggQEAKIC4uIF9kaXN0dXRpbHMtaW5kZXg6CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgRGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIERpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24pCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIDpBdXRob3JzOiBHcmVnIFdhcmQsIEFudGhvbnkgQmF4dGVyCiA6RW1haWw6IGRpc3R1dGlscy1zaWdAcHl0aG9uLm9yZwpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKaW5kZXggMTY2NjQzNi4uNDI3YjdiMSAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CkBAIC0yNiwxNiArMjYsMTYgQEAKICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PSsKIHwgYGB6aXBgYCAgIHwgemlwIGZpbGUgKDpmaWxlOmAuemlwYCkgfCAoMSksKDMpIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCAoMiksKDQpIHwKK3wgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCBcKDIpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmd6YCkgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCBcKDQpICAgIHwKK3wgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCAgICAgICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmJ6MmApICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIHwgYGB6dGFyYGAgIHwgY29tcHJlc3NlZCB0YXIgZmlsZSAgICAgfCBcKDQpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLlpgKSAgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCBcKDQpICAgIHwKK3wgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIAogTm90ZXM6CkBAIC01MSw4ICs1MSwxNiBAQAogICAgb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJ5IHNpbmNlIFB5dGhvbiAxLjYpCiAKICg0KQotICAgcmVxdWlyZXMgZXh0ZXJuYWwgdXRpbGl0aWVzOiA6cHJvZ3JhbTpgdGFyYCBhbmQgcG9zc2libHkgb25lIG9mIDpwcm9ncmFtOmBnemlwYCwKLSAgIDpwcm9ncmFtOmBiemlwMmAsIG9yIDpwcm9ncmFtOmBjb21wcmVzc2AKKyAgIHJlcXVpcmVzIHRoZSA6cHJvZ3JhbTpgY29tcHJlc3NgIHByb2dyYW0uIE5vdGljZSB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdworICAgcGVuZGluZyBmb3IgZGVwcmVjYXRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvbi4KKworV2hlbiB1c2luZyBhbnkgYGB0YXJgYCBmb3JtYXQgKGBgZ3p0YXJgYCwgYGBienRhcmBgLCBgYHp0YXJgYCBvcgorYGB0YXJgYCksIHVuZGVyIFVuaXggeW91IGNhbiBzcGVjaWZ5IHRoZSBgYG93bmVyYGAgYW5kIGBgZ3JvdXBgYCBuYW1lcwordGhhdCB3aWxsIGJlIHNldCBmb3IgZWFjaCBtZW1iZXIgb2YgdGhlIGFyY2hpdmUuCisKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCBhbGwgZmlsZXMgb2YgdGhlIGFyY2hpdmUgdG8gYmUgb3duZWQgYnkgcm9vdDo6CisKKyAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgLS1vd25lcj1yb290IC0tZ3JvdXA9cm9vdAogCiAKIC4uIF9tYW5pZmVzdDoKQEAgLTY4LDcgKzc2LDcgQEAKICAgOm9wdGlvbjpgcGFja2FnZXNgIG9wdGlvbnMKIAogKiBhbGwgQyBzb3VyY2UgZmlsZXMgbWVudGlvbmVkIGluIHRoZSA6b3B0aW9uOmBleHRfbW9kdWxlc2Agb3IKLSAgOm9wdGlvbjpgbGlicmFyaWVzYCBvcHRpb25zICgKKyAgOm9wdGlvbjpgbGlicmFyaWVzYCBvcHRpb25zCiAKICAgLi4gWFhYIGdldHRpbmcgQyBsaWJyYXJ5IHNvdXJjZXMgY3VycmVudGx5IGJyb2tlbi0tLW5vCiAgICAgICAgICA6bWV0aDpgZ2V0X3NvdXJjZV9maWxlc2AgbWV0aG9kIGluIDpmaWxlOmBidWlsZF9jbGliLnB5YCEKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdAppbmRleCBiZDY2MDg2Li42Y2I2ODZhIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CkBAIC0yODUsMTQgKzI4NSwxNCBAQAogKiBgYHB5dGhvblguWS1jb25maWcgLS1jZmxhZ3NgYCB3aWxsIGdpdmUgeW91IHRoZSByZWNvbW1lbmRlZCBmbGFncyB3aGVuCiAgIGNvbXBpbGluZzo6CiAKLSAgICQgL29wdC9iaW4vcHl0aG9uMy4zLWNvbmZpZyAtLWNmbGFncwotICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy4zbSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjNtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKKyAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWNmbGFncworICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjRtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKIAogKiBgYHB5dGhvblguWS1jb25maWcgLS1sZGZsYWdzYGAgd2lsbCBnaXZlIHlvdSB0aGUgcmVjb21tZW5kZWQgZmxhZ3Mgd2hlbgogICBsaW5raW5nOjoKIAotICAgJCAvb3B0L2Jpbi9weXRob24zLjMtY29uZmlnIC0tbGRmbGFncwotICAgLUwvb3B0L2xpYi9weXRob24zLjMvY29uZmlnLTMuM20gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbjMuM20gLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCisgICAkIC9vcHQvYmluL3B5dGhvbjMuNC1jb25maWcgLS1sZGZsYWdzCisgICAtTC9vcHQvbGliL3B5dGhvbjMuNC9jb25maWctMy40bSAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uMy40bSAtWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMKIAogLi4gbm90ZTo6CiAgICBUbyBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBzZXZlcmFsIFB5dGhvbiBpbnN0YWxsYXRpb25zIChhbmQgZXNwZWNpYWxseQpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9pbmRleC5yc3QgYi9Eb2MvZXh0ZW5kaW5nL2luZGV4LnJzdAppbmRleCA0NGE3ZjkyLi5kZDQzOTI2IDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2luZGV4LnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL2luZGV4LnJzdApAQCAtMjEsMTQgKzIxLDMxIEBACiBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgd2hvbGUgUHl0aG9uL0MgQVBJLCBzZWUgdGhlIHNlcGFyYXRlCiA6cmVmOmBjLWFwaS1pbmRleGAuCiAKLS4uIG5vdGU6OgogCi0gICBUaGlzIGd1aWRlIG9ubHkgY292ZXJzIHRoZSBiYXNpYyB0b29scyBmb3IgY3JlYXRpbmcgZXh0ZW5zaW9ucyBwcm92aWRlZAotICAgYXMgcGFydCBvZiB0aGlzIHZlcnNpb24gb2YgQ1B5dGhvbi4gVGhpcmQgcGFydHkgdG9vbHMgbWF5IG9mZmVyIHNpbXBsZXIKLSAgIGFsdGVybmF0aXZlcy4gUmVmZXIgdG8gdGhlIGBiaW5hcnkgZXh0ZW5zaW9ucyBzZWN0aW9uCi0gICA8aHR0cHM6Ly9weXRob24tcGFja2FnaW5nLXVzZXItZ3VpZGUucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC9leHRlbnNpb25zLmh0bWw+YF9fCi0gICBpbiB0aGUgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorUmVjb21tZW5kZWQgdGhpcmQgcGFydHkgdG9vbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKK1RoaXMgZ3VpZGUgb25seSBjb3ZlcnMgdGhlIGJhc2ljIHRvb2xzIGZvciBjcmVhdGluZyBleHRlbnNpb25zIHByb3ZpZGVkCithcyBwYXJ0IG9mIHRoaXMgdmVyc2lvbiBvZiBDUHl0aG9uLiBUaGlyZCBwYXJ0eSB0b29scyBsaWtlIEN5dGhvbiwKK2BgY2ZmaWBgLCBTV0lHIGFuZCBOdW1iYSBvZmZlciBib3RoIHNpbXBsZXIgYW5kIG1vcmUgc29waGlzdGljYXRlZAorYXBwcm9hY2hlcyB0byBjcmVhdGluZyBDIGFuZCBDKysgZXh0ZW5zaW9ucyBmb3IgUHl0aG9uLgorCisuLiBzZWVhbHNvOjoKKworICAgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZTogQmluYXJ5IEV4dGVuc2lvbnMgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2V4dGVuc2lvbnMuaHRtbD5gXworICAgICAgVGhlIFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSBub3Qgb25seSBjb3ZlcnMgc2V2ZXJhbCBhdmFpbGFibGUKKyAgICAgIHRvb2xzIHRoYXQgc2ltcGxpZnkgdGhlIGNyZWF0aW9uIG9mIGJpbmFyeSBleHRlbnNpb25zLCBidXQgYWxzbworICAgICAgZGlzY3Vzc2VzIHRoZSB2YXJpb3VzIHJlYXNvbnMgd2h5IGNyZWF0aW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgbWF5IGJlCisgICAgICBkZXNpcmFibGUgaW4gdGhlIGZpcnN0IHBsYWNlLgorCisKK0NyZWF0aW5nIGV4dGVuc2lvbnMgd2l0aG91dCB0aGlyZCBwYXJ0eSB0b29scworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBvZiB0aGUgZ3VpZGUgY292ZXJzIGNyZWF0aW5nIEMgYW5kIEMrKyBleHRlbnNpb25zIHdpdGhvdXQKK2Fzc2lzdGFuY2UgZnJvbSB0aGlyZCBwYXJ0eSB0b29scy4gSXQgaXMgaW50ZW5kZWQgcHJpbWFyaWx5IGZvciBjcmVhdG9ycworb2YgdGhvc2UgdG9vbHMsIHJhdGhlciB0aGFuIGJlaW5nIGEgcmVjb21tZW5kZWQgd2F5IHRvIGNyZWF0ZSB5b3VyIG93bgorQyBleHRlbnNpb25zLgogCiAuLiB0b2N0cmVlOjoKICAgIDptYXhkZXB0aDogMgpAQCAtMzgsNCArNTUsMTcgQEAKICAgIG5ld3R5cGVzLnJzdAogICAgYnVpbGRpbmcucnN0CiAgICB3aW5kb3dzLnJzdAorCitFbWJlZGRpbmcgdGhlIENQeXRob24gcnVudGltZSBpbiBhIGxhcmdlciBhcHBsaWNhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU29tZXRpbWVzLCByYXRoZXIgdGhhbiBjcmVhdGluZyBhbiBleHRlbnNpb24gdGhhdCBydW5zIGluc2lkZSB0aGUgUHl0aG9uCitpbnRlcnByZXRlciBhcyB0aGUgbWFpbiBhcHBsaWNhdGlvbiwgaXQgaXMgZGVzaXJhYmxlIHRvIGluc3RlYWQgZW1iZWQKK3RoZSBDUHl0aG9uIHJ1bnRpbWUgaW5zaWRlIGEgbGFyZ2VyIGFwcGxpY2F0aW9uLiBUaGlzIHNlY3Rpb24gY292ZXJzCitzb21lIG9mIHRoZSBkZXRhaWxzIGludm9sdmVkIGluIGRvaW5nIHRoYXQgc3VjY2Vzc2Z1bGx5LgorCisuLiB0b2N0cmVlOjoKKyAgIDptYXhkZXB0aDogMgorICAgOm51bWJlcmVkOgorCiAgICBlbWJlZGRpbmcucnN0CmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdCBiL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CmluZGV4IGY0ODRiYTQuLjQ1YjU3MjEgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CkBAIC0xNTcsNyArMTU3LDggQEAKICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgIC8qIHRwX2ZsYWdzICovCiAKIEFsbCB0eXBlcyBzaG91bGQgaW5jbHVkZSB0aGlzIGNvbnN0YW50IGluIHRoZWlyIGZsYWdzLiAgSXQgZW5hYmxlcyBhbGwgb2YgdGhlCi1tZW1iZXJzIGRlZmluZWQgYnkgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBQeXRob24uCittZW1iZXJzIGRlZmluZWQgdW50aWwgYXQgbGVhc3QgUHl0aG9uIDMuMy4gIElmIHlvdSBuZWVkIGZ1cnRoZXIgbWVtYmVycywKK3lvdSB3aWxsIG5lZWQgdG8gT1IgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3MuCiAKIFdlIHByb3ZpZGUgYSBkb2Mgc3RyaW5nIGZvciB0aGUgdHlwZSBpbiA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZG9jYC4gOjoKIApAQCAtOTI4LDggKzkyOSw5IEBACiAKIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgaW5zdGFuY2Ugb2YgeW91ciB0eXBlIGlzCiByZWR1Y2VkIHRvIHplcm8gYW5kIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FudHMgdG8gcmVjbGFpbSBpdC4gIElmIHlvdXIgdHlwZQotaGFzIG1lbW9yeSB0byBmcmVlIG9yIG90aGVyIGNsZWFuLXVwIHRvIHBlcmZvcm0sIHB1dCBpdCBoZXJlLiAgVGhlIG9iamVjdCBpdHNlbGYKLW5lZWRzIHRvIGJlIGZyZWVkIGhlcmUgYXMgd2VsbC4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGlzIGZ1bmN0aW9uOjoKK2hhcyBtZW1vcnkgdG8gZnJlZSBvciBvdGhlciBjbGVhbi11cCB0byBwZXJmb3JtLCB5b3UgY2FuIHB1dCBpdCBoZXJlLiAgVGhlCitvYmplY3QgaXRzZWxmIG5lZWRzIHRvIGJlIGZyZWVkIGhlcmUgYXMgd2VsbC4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGlzCitmdW5jdGlvbjo6CiAKICAgIHN0YXRpYyB2b2lkCiAgICBuZXdkYXRhdHlwZV9kZWFsbG9jKG5ld2RhdGF0eXBlb2JqZWN0ICogb2JqKQpAQCAtOTgwLDYgKzk4MiwyMiBAQAogICAgICAgIFB5X1RZUEUob2JqKS0+dHBfZnJlZSgoUHlPYmplY3QqKXNlbGYpOwogICAgfQogCisuLiBub3RlOjoKKyAgIFRoZXJlIGFyZSBsaW1pdGF0aW9ucyB0byB3aGF0IHlvdSBjYW4gc2FmZWx5IGRvIGluIGEgZGVhbGxvY2F0b3IgZnVuY3Rpb24uCisgICBGaXJzdCwgaWYgeW91ciB0eXBlIHN1cHBvcnRzIGdhcmJhZ2UgY29sbGVjdGlvbiAodXNpbmcgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3RyYXZlcnNlYAorICAgYW5kL29yIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9jbGVhcmApLCBzb21lIG9mIHRoZSBvYmplY3QncyBtZW1iZXJzIGNhbiBoYXZlIGJlZW4KKyAgIGNsZWFyZWQgb3IgZmluYWxpemVkIGJ5IHRoZSB0aW1lIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9kZWFsbG9jYCBpcyBjYWxsZWQuICBTZWNvbmQsIGluCisgICA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AsIHlvdXIgb2JqZWN0IGlzIGluIGFuIHVuc3RhYmxlIHN0YXRlOiBpdHMgcmVmZXJlbmNlCisgICBjb3VudCBpcyBlcXVhbCB0byB6ZXJvLiAgQW55IGNhbGwgdG8gYSBub24tdHJpdmlhbCBvYmplY3Qgb3IgQVBJIChhcyBpbiB0aGUKKyAgIGV4YW1wbGUgYWJvdmUpIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9kZWFsbG9jYCBhZ2FpbiwgY2F1c2luZyBhCisgICBkb3VibGUgZnJlZSBhbmQgYSBjcmFzaC4KKworICAgU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCBpdCBpcyByZWNvbW1lbmRlZCBub3QgdG8gcHV0IGFueSBjb21wbGV4CisgICBmaW5hbGl6YXRpb24gY29kZSBpbiA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AsIGFuZCBpbnN0ZWFkIHVzZSB0aGUgbmV3CisgICA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZmluYWxpemVgIHR5cGUgbWV0aG9kLgorCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpwZXA6YDQ0MmAgZXhwbGFpbnMgdGhlIG5ldyBmaW5hbGl6YXRpb24gc2NoZW1lLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IHN0cmluZzsgb2JqZWN0IHJlcHJlc2VudGF0aW9uCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2Rlc2lnbi5yc3QgYi9Eb2MvZmFxL2Rlc2lnbi5yc3QKaW5kZXggNDllMGM2ZC4uZDdiZTI5OSAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9kZXNpZ24ucnN0CisrKyBiL0RvYy9mYXEvZGVzaWduLnJzdApAQCAtNjY0LDYyICs2NjQsNiBAQAogc2xvcHB5IGFuZCBub3Qgd3JpdGUgdGVzdCBjYXNlcyBhdCBhbGwuCiAKIAotV2h5IGFyZSBkZWZhdWx0IHZhbHVlcyBzaGFyZWQgYmV0d2VlbiBvYmplY3RzPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHR5cGUgb2YgYnVnIGNvbW1vbmx5IGJpdGVzIG5lb3BoeXRlIHByb2dyYW1tZXJzLiAgQ29uc2lkZXIgdGhpcyBmdW5jdGlvbjo6Ci0KLSAgIGRlZiBmb28obXlkaWN0PXt9KTogICMgRGFuZ2VyOiBzaGFyZWQgcmVmZXJlbmNlIHRvIG9uZSBkaWN0IGZvciBhbGwgY2FsbHMKLSAgICAgICAuLi4gY29tcHV0ZSBzb21ldGhpbmcgLi4uCi0gICAgICAgbXlkaWN0W2tleV0gPSB2YWx1ZQotICAgICAgIHJldHVybiBteWRpY3QKLQotVGhlIGZpcnN0IHRpbWUgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiwgYGBteWRpY3RgYCBjb250YWlucyBhIHNpbmdsZSBpdGVtLiAgVGhlCi1zZWNvbmQgdGltZSwgYGBteWRpY3RgYCBjb250YWlucyB0d28gaXRlbXMgYmVjYXVzZSB3aGVuIGBgZm9vKClgYCBiZWdpbnMKLWV4ZWN1dGluZywgYGBteWRpY3RgYCBzdGFydHMgb3V0IHdpdGggYW4gaXRlbSBhbHJlYWR5IGluIGl0LgotCi1JdCBpcyBvZnRlbiBleHBlY3RlZCB0aGF0IGEgZnVuY3Rpb24gY2FsbCBjcmVhdGVzIG5ldyBvYmplY3RzIGZvciBkZWZhdWx0Ci12YWx1ZXMuIFRoaXMgaXMgbm90IHdoYXQgaGFwcGVucy4gRGVmYXVsdCB2YWx1ZXMgYXJlIGNyZWF0ZWQgZXhhY3RseSBvbmNlLCB3aGVuCi10aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC4gIElmIHRoYXQgb2JqZWN0IGlzIGNoYW5nZWQsIGxpa2UgdGhlIGRpY3Rpb25hcnkgaW4gdGhpcwotZXhhbXBsZSwgc3Vic2VxdWVudCBjYWxscyB0byB0aGUgZnVuY3Rpb24gd2lsbCByZWZlciB0byB0aGlzIGNoYW5nZWQgb2JqZWN0LgotCi1CeSBkZWZpbml0aW9uLCBpbW11dGFibGUgb2JqZWN0cyBzdWNoIGFzIG51bWJlcnMsIHN0cmluZ3MsIHR1cGxlcywgYW5kIGBgTm9uZWBgLAotYXJlIHNhZmUgZnJvbSBjaGFuZ2UuIENoYW5nZXMgdG8gbXV0YWJsZSBvYmplY3RzIHN1Y2ggYXMgZGljdGlvbmFyaWVzLCBsaXN0cywKLWFuZCBjbGFzcyBpbnN0YW5jZXMgY2FuIGxlYWQgdG8gY29uZnVzaW9uLgotCi1CZWNhdXNlIG9mIHRoaXMgZmVhdHVyZSwgaXQgaXMgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byBub3QgdXNlIG11dGFibGUKLW9iamVjdHMgYXMgZGVmYXVsdCB2YWx1ZXMuICBJbnN0ZWFkLCB1c2UgYGBOb25lYGAgYXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kCi1pbnNpZGUgdGhlIGZ1bmN0aW9uLCBjaGVjayBpZiB0aGUgcGFyYW1ldGVyIGlzIGBgTm9uZWBgIGFuZCBjcmVhdGUgYSBuZXcKLWxpc3QvZGljdGlvbmFyeS93aGF0ZXZlciBpZiBpdCBpcy4gIEZvciBleGFtcGxlLCBkb24ndCB3cml0ZTo6Ci0KLSAgIGRlZiBmb28obXlkaWN0PXt9KToKLSAgICAgICAuLi4KLQotYnV0OjoKLQotICAgZGVmIGZvbyhteWRpY3Q9Tm9uZSk6Ci0gICAgICAgaWYgbXlkaWN0IGlzIE5vbmU6Ci0gICAgICAgICAgIG15ZGljdCA9IHt9ICAjIGNyZWF0ZSBhIG5ldyBkaWN0IGZvciBsb2NhbCBuYW1lc3BhY2UKLQotVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VmdWwuICBXaGVuIHlvdSBoYXZlIGEgZnVuY3Rpb24gdGhhdCdzIHRpbWUtY29uc3VtaW5nIHRvCi1jb21wdXRlLCBhIGNvbW1vbiB0ZWNobmlxdWUgaXMgdG8gY2FjaGUgdGhlIHBhcmFtZXRlcnMgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUKLW9mIGVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24sIGFuZCByZXR1cm4gdGhlIGNhY2hlZCB2YWx1ZSBpZiB0aGUgc2FtZSB2YWx1ZSBpcwotcmVxdWVzdGVkIGFnYWluLiAgVGhpcyBpcyBjYWxsZWQgIm1lbW9pemluZyIsIGFuZCBjYW4gYmUgaW1wbGVtZW50ZWQgbGlrZSB0aGlzOjoKLQotICAgIyBDYWxsZXJzIHdpbGwgbmV2ZXIgcHJvdmlkZSBhIHRoaXJkIHBhcmFtZXRlciBmb3IgdGhpcyBmdW5jdGlvbi4KLSAgIGRlZiBleHBlbnNpdmUoYXJnMSwgYXJnMiwgX2NhY2hlPXt9KToKLSAgICAgICBpZiAoYXJnMSwgYXJnMikgaW4gX2NhY2hlOgotICAgICAgICAgICByZXR1cm4gX2NhY2hlWyhhcmcxLCBhcmcyKV0KLQotICAgICAgICMgQ2FsY3VsYXRlIHRoZSB2YWx1ZQotICAgICAgIHJlc3VsdCA9IC4uLiBleHBlbnNpdmUgY29tcHV0YXRpb24gLi4uCi0gICAgICAgX2NhY2hlWyhhcmcxLCBhcmcyKV0gPSByZXN1bHQgICAgICAgICAgICMgU3RvcmUgcmVzdWx0IGluIHRoZSBjYWNoZQotICAgICAgIHJldHVybiByZXN1bHQKLQotWW91IGNvdWxkIHVzZSBhIGdsb2JhbCB2YXJpYWJsZSBjb250YWluaW5nIGEgZGljdGlvbmFyeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0Ci12YWx1ZTsgaXQncyBhIG1hdHRlciBvZiB0YXN0ZS4KLQotCiBXaHkgaXMgdGhlcmUgbm8gZ290bz8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2V4dGVuZGluZy5yc3QgYi9Eb2MvZmFxL2V4dGVuZGluZy5yc3QKaW5kZXggYTlhMjM0Yi4uZDE5NmU4NiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9leHRlbmRpbmcucnN0CisrKyBiL0RvYy9mYXEvZXh0ZW5kaW5nLnJzdApAQCAtOTUsOCArOTUsOCBAQAogVGhlcmUgaXMgYWxzbyBhIGhpZ2gtbGV2ZWwgQVBJIHRvIFB5dGhvbiBvYmplY3RzIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IHRoZQogc28tY2FsbGVkICdhYnN0cmFjdCcgaW50ZXJmYWNlIC0tIHJlYWQgYGBJbmNsdWRlL2Fic3RyYWN0LmhgYCBmb3IgZnVydGhlcgogZGV0YWlscy4gIEl0IGFsbG93cyBpbnRlcmZhY2luZyB3aXRoIGFueSBraW5kIG9mIFB5dGhvbiBzZXF1ZW5jZSB1c2luZyBjYWxscwotbGlrZSA6YzpmdW5jOmBQeVNlcXVlbmNlX0xlbmd0aGAsIDpjOmZ1bmM6YFB5U2VxdWVuY2VfR2V0SXRlbWAsIGV0Yy4pIGFzIHdlbGwKLWFzIG1hbnkgb3RoZXIgdXNlZnVsIHByb3RvY29scyBzdWNoIGFzIG51bWJlcnMgKDpjOmZ1bmM6YFB5TnVtYmVyX0luZGV4YCBldC4KK2xpa2UgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9MZW5ndGhgLCA6YzpmdW5jOmBQeVNlcXVlbmNlX0dldEl0ZW1gLCBldGMuIGFzIHdlbGwKK2FzIG1hbnkgb3RoZXIgdXNlZnVsIHByb3RvY29scyBzdWNoIGFzIG51bWJlcnMgKDpjOmZ1bmM6YFB5TnVtYmVyX0luZGV4YCBldAogYWwuKSBhbmQgbWFwcGluZ3MgaW4gdGhlIFB5TWFwcGluZyBBUElzLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9mYXEvZ2VuZXJhbC5yc3QgYi9Eb2MvZmFxL2dlbmVyYWwucnN0CmluZGV4IDZmNDczM2YuLjdhZDk0OWMgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvZ2VuZXJhbC5yc3QKKysrIGIvRG9jL2ZhcS9nZW5lcmFsLnJzdApAQCAtMTY3LDcgKzE2Nyw4IEBACiBzZXZlcmFsIHVzZWZ1bCBwaWVjZXMgb2YgZnJlZWx5IGRpc3RyaWJ1dGFibGUgc29mdHdhcmUuICBUaGUgc291cmNlIHdpbGwgY29tcGlsZQogYW5kIHJ1biBvdXQgb2YgdGhlIGJveCBvbiBtb3N0IFVOSVggcGxhdGZvcm1zLgogCi1Db25zdWx0IHRoZSBgRGV2ZWxvcGVyIEZBUSA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9mYXE+YF9fIGZvciBtb3JlCitDb25zdWx0IHRoZSBgR2V0dGluZyBTdGFydGVkIHNlY3Rpb24gb2YgdGhlIFB5dGhvbiBEZXZlbG9wZXIncyBHdWlkZQorPGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL3NldHVwLmh0bWw+YF9fIGZvciBtb3JlCiBpbmZvcm1hdGlvbiBvbiBnZXR0aW5nIHRoZSBzb3VyY2UgY29kZSBhbmQgY29tcGlsaW5nIGl0LgogCiAKQEAgLTM3Niw0MyArMzc3LDYgQEAKIGNoYW5nZXMgd2hpbGUgbWluaW1pemluZyBkaXNydXB0aW9uIGZvciB1c2Vycy4KIAogCi1JcyBQeXRob24gWTJLIChZZWFyIDIwMDApIENvbXBsaWFudD8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0uLiByZW1vdmUgdGhpcyBxdWVzdGlvbj8KLQotQXMgb2YgQXVndXN0LCAyMDAzIG5vIG1ham9yIHByb2JsZW1zIGhhdmUgYmVlbiByZXBvcnRlZCBhbmQgWTJLIGNvbXBsaWFuY2Ugc2VlbXMKLXRvIGJlIGEgbm9uLWlzc3VlLgotCi1QeXRob24gZG9lcyB2ZXJ5IGZldyBkYXRlIGNhbGN1bGF0aW9ucyBhbmQgZm9yIHRob3NlIGl0IGRvZXMgcGVyZm9ybSByZWxpZXMgb24KLXRoZSBDIGxpYnJhcnkgZnVuY3Rpb25zLiAgUHl0aG9uIGdlbmVyYWxseSByZXByZXNlbnRzIHRpbWVzIGVpdGhlciBhcyBzZWNvbmRzCi1zaW5jZSAxOTcwIG9yIGFzIGEgYGAoeWVhciwgbW9udGgsIGRheSwgLi4uKWBgIHR1cGxlIHdoZXJlIHRoZSB5ZWFyIGlzIGV4cHJlc3NlZAotd2l0aCBmb3VyIGRpZ2l0cywgd2hpY2ggbWFrZXMgWTJLIGJ1Z3MgdW5saWtlbHkuICBTbyBhcyBsb25nIGFzIHlvdXIgQyBsaWJyYXJ5Ci1pcyBva2F5LCBQeXRob24gc2hvdWxkIGJlIG9rYXkuICBPZiBjb3Vyc2UsIGl0J3MgcG9zc2libGUgdGhhdCBhIHBhcnRpY3VsYXIKLWFwcGxpY2F0aW9uIHdyaXR0ZW4gaW4gUHl0aG9uIG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IDItZGlnaXQgeWVhcnMuCi0KLUJlY2F1c2UgUHl0aG9uIGlzIGF2YWlsYWJsZSBmcmVlIG9mIGNoYXJnZSwgdGhlcmUgYXJlIG5vIGFic29sdXRlIGd1YXJhbnRlZXMuCi1JZiB0aGVyZSAqYXJlKiB1bmZvcmVzZWVuIHByb2JsZW1zLCBsaWFiaWxpdHkgaXMgdGhlIHVzZXIncyBwcm9ibGVtIHJhdGhlciB0aGFuCi10aGUgZGV2ZWxvcGVycycsIGFuZCB0aGVyZSBpcyBub2JvZHkgeW91IGNhbiBzdWUgZm9yIGRhbWFnZXMuICBUaGUgUHl0aG9uCi1jb3B5cmlnaHQgbm90aWNlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcjoKLQotICAgIDQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIDIuMyBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgotICAgIGJhc2lzLiAgUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuICBCWQotICAgIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWQotICAgIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUgotICAgIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhPTiAyLjMgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZCi0gICAgUklHSFRTLgotCi0gICAgNS4gUFNGIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgotICAgIDIuMyBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTCi0gICAgQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMi4zLAotICAgIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KLQotVGhlIGdvb2QgbmV3cyBpcyB0aGF0ICppZiogeW91IGVuY291bnRlciBhIHByb2JsZW0sIHlvdSBoYXZlIGZ1bGwgc291cmNlCi1hdmFpbGFibGUgdG8gdHJhY2sgaXQgZG93biBhbmQgZml4IGl0LiAgVGhpcyBpcyBvbmUgYWR2YW50YWdlIG9mIGFuIG9wZW4gc291cmNlCi1wcm9ncmFtbWluZyBlbnZpcm9ubWVudC4KLQotCiBJcyBQeXRob24gYSBnb29kIGxhbmd1YWdlIGZvciBiZWdpbm5pbmcgcHJvZ3JhbW1lcnM/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9mYXEvZ3VpLnJzdCBiL0RvYy9mYXEvZ3VpLnJzdAppbmRleCA1ODI3ZjI4Li4zMTkyMTYzIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2d1aS5yc3QKKysrIGIvRG9jL2ZhcS9ndWkucnN0CkBAIC0zMiwxNCArMzIsMTQgQEAKIGBiaW5hcnkgZGlzdHJpYnV0aW9ucyA8aHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLz5gXyBvZiBQeXRob24pIGFuZCB1c2UuCiBGb3IgbW9yZSBpbmZvIGFib3V0IFRrLCBpbmNsdWRpbmcgcG9pbnRlcnMgdG8gdGhlIHNvdXJjZSwgc2VlIHRoZQogYFRjbC9UayBob21lIHBhZ2UgPGh0dHA6Ly93d3cudGNsLnRrPmBfLiAgVGNsL1RrIGlzIGZ1bGx5IHBvcnRhYmxlIHRvIHRoZQotTWFjT1MsIFdpbmRvd3MsIGFuZCBVbml4IHBsYXRmb3Jtcy4KK01hYyBPUyBYLCBXaW5kb3dzLCBhbmQgVW5peCBwbGF0Zm9ybXMuCiAKIHd4V2lkZ2V0cwogLS0tLS0tLS0tCiAKIHd4V2lkZ2V0cyAoaHR0cDovL3d3dy53eHdpZGdldHMub3JnKSBpcyBhIGZyZWUsIHBvcnRhYmxlIEdVSSBjbGFzcwogbGlicmFyeSB3cml0dGVuIGluIEMrKyB0aGF0IHByb3ZpZGVzIGEgbmF0aXZlIGxvb2sgYW5kIGZlZWwgb24gYQotbnVtYmVyIG9mIHBsYXRmb3Jtcywgd2l0aCBXaW5kb3dzLCBNYWNPUyBYLCBHVEssIFgxMSwgYWxsIGxpc3RlZCBhcworbnVtYmVyIG9mIHBsYXRmb3Jtcywgd2l0aCBXaW5kb3dzLCBNYWMgT1MgWCwgR1RLLCBYMTEsIGFsbCBsaXN0ZWQgYXMKIGN1cnJlbnQgc3RhYmxlIHRhcmdldHMuICBMYW5ndWFnZSBiaW5kaW5ncyBhcmUgYXZhaWxhYmxlIGZvciBhIG51bWJlcgogb2YgbGFuZ3VhZ2VzIGluY2x1ZGluZyBQeXRob24sIFBlcmwsIFJ1YnksIGV0Yy4KIApAQCAtMTAyLDEzICsxMDIsOSBAQAogV2hhdCBwbGF0Zm9ybS1zcGVjaWZpYyBHVUkgdG9vbGtpdHMgZXhpc3QgZm9yIFB5dGhvbj8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLWBUaGUgTWFjIHBvcnQgPGh0dHA6Ly9weXRob24ub3JnL2Rvd25sb2FkL21hYz5gXyBieSBKYWNrIEphbnNlbiBoYXMgYSByaWNoIGFuZAotZXZlci1ncm93aW5nIHNldCBvZiBtb2R1bGVzIHRoYXQgc3VwcG9ydCB0aGUgbmF0aXZlIE1hYyB0b29sYm94IGNhbGxzLiAgVGhlIHBvcnQKLXN1cHBvcnRzIE1hY09TIFgncyBDYXJib24gbGlicmFyaWVzLgotCiBCeSBpbnN0YWxsaW5nIHRoZSBgUHlPYmpjIE9iamVjdGl2ZS1DIGJyaWRnZQotPGh0dHA6Ly9weW9iamMuc291cmNlZm9yZ2UubmV0PmBfLCBQeXRob24gcHJvZ3JhbXMgY2FuIHVzZSBNYWNPUyBYJ3MKLUNvY29hIGxpYnJhcmllcy4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIHRoYXQgY29tZXMgd2l0aCB0aGUgTWFjIHBvcnQuCis8aHR0cDovL3B5b2JqYy5zb3VyY2Vmb3JnZS5uZXQ+YF8sIFB5dGhvbiBwcm9ncmFtcyBjYW4gdXNlIE1hYyBPUyBYJ3MKK0NvY29hIGxpYnJhcmllcy4KIAogOnJlZjpgUHl0aG9ud2luIDx3aW5kb3dzLWZhcT5gIGJ5IE1hcmsgSGFtbW9uZCBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlCiBNaWNyb3NvZnQgRm91bmRhdGlvbiBDbGFzc2VzIGFuZCBhIFB5dGhvbiBwcm9ncmFtbWluZyBlbnZpcm9ubWVudApkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9saWJyYXJ5LnJzdCBiL0RvYy9mYXEvbGlicmFyeS5yc3QKaW5kZXggMjU2NjkzMi4uNWY0ZmYxNyAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9saWJyYXJ5LnJzdAorKysgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgYyA9IHN5cy5zdGRpbi5yZWFkKDEpCiAgICAgICAgICAgICAgICBwcmludCgiR290IGNoYXJhY3RlciIsIHJlcHIoYykpCi0gICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgIHBhc3MKICAgIGZpbmFsbHk6CiAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQUZMVVNILCBvbGR0ZXJtKQpAQCAtMjI0LDcgKzIyNCwxMSBAQAogICAgOmZ1bmM6YHRlcm1pb3MudGNzZXRhdHRyYCB0dXJucyBvZmYgc3RkaW4ncyBlY2hvaW5nIGFuZCBkaXNhYmxlcyBjYW5vbmljYWwKICAgIG1vZGUuICA6ZnVuYzpgZmNudGwuZm5jdGxgIGlzIHVzZWQgdG8gb2J0YWluIHN0ZGluJ3MgZmlsZSBkZXNjcmlwdG9yIGZsYWdzCiAgICBhbmQgbW9kaWZ5IHRoZW0gZm9yIG5vbi1ibG9ja2luZyBtb2RlLiAgU2luY2UgcmVhZGluZyBzdGRpbiB3aGVuIGl0IGlzIGVtcHR5Ci0gICByZXN1bHRzIGluIGFuIDpleGM6YElPRXJyb3JgLCB0aGlzIGVycm9yIGlzIGNhdWdodCBhbmQgaWdub3JlZC4KKyAgIHJlc3VsdHMgaW4gYW4gOmV4YzpgT1NFcnJvcmAsIHRoaXMgZXJyb3IgaXMgY2F1Z2h0IGFuZCBpZ25vcmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgKnN5cy5zdGRpbi5yZWFkKiB1c2VkIHRvIHJhaXNlIDpleGM6YElPRXJyb3JgLiBTdGFydGluZyBmcm9tIFB5dGhvbiAzLjMKKyAgICAgIDpleGM6YElPRXJyb3JgIGlzIGFsaWFzIGZvciA6ZXhjOmBPU0Vycm9yYC4KIAogCiBUaHJlYWRzCmRpZmYgLS1naXQgYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdCBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CmluZGV4IDI4MGQ1ZTEuLmQ4NTU2M2YgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CisrKyBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CkBAIC0zNTIsNiArMzUyLDYyIEBACiBvY2N1ciB3aGVuIHRoZSBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQuCiAKIAorV2h5IGFyZSBkZWZhdWx0IHZhbHVlcyBzaGFyZWQgYmV0d2VlbiBvYmplY3RzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHR5cGUgb2YgYnVnIGNvbW1vbmx5IGJpdGVzIG5lb3BoeXRlIHByb2dyYW1tZXJzLiAgQ29uc2lkZXIgdGhpcyBmdW5jdGlvbjo6CisKKyAgIGRlZiBmb28obXlkaWN0PXt9KTogICMgRGFuZ2VyOiBzaGFyZWQgcmVmZXJlbmNlIHRvIG9uZSBkaWN0IGZvciBhbGwgY2FsbHMKKyAgICAgICAuLi4gY29tcHV0ZSBzb21ldGhpbmcgLi4uCisgICAgICAgbXlkaWN0W2tleV0gPSB2YWx1ZQorICAgICAgIHJldHVybiBteWRpY3QKKworVGhlIGZpcnN0IHRpbWUgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiwgYGBteWRpY3RgYCBjb250YWlucyBhIHNpbmdsZSBpdGVtLiAgVGhlCitzZWNvbmQgdGltZSwgYGBteWRpY3RgYCBjb250YWlucyB0d28gaXRlbXMgYmVjYXVzZSB3aGVuIGBgZm9vKClgYCBiZWdpbnMKK2V4ZWN1dGluZywgYGBteWRpY3RgYCBzdGFydHMgb3V0IHdpdGggYW4gaXRlbSBhbHJlYWR5IGluIGl0LgorCitJdCBpcyBvZnRlbiBleHBlY3RlZCB0aGF0IGEgZnVuY3Rpb24gY2FsbCBjcmVhdGVzIG5ldyBvYmplY3RzIGZvciBkZWZhdWx0Cit2YWx1ZXMuIFRoaXMgaXMgbm90IHdoYXQgaGFwcGVucy4gRGVmYXVsdCB2YWx1ZXMgYXJlIGNyZWF0ZWQgZXhhY3RseSBvbmNlLCB3aGVuCit0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC4gIElmIHRoYXQgb2JqZWN0IGlzIGNoYW5nZWQsIGxpa2UgdGhlIGRpY3Rpb25hcnkgaW4gdGhpcworZXhhbXBsZSwgc3Vic2VxdWVudCBjYWxscyB0byB0aGUgZnVuY3Rpb24gd2lsbCByZWZlciB0byB0aGlzIGNoYW5nZWQgb2JqZWN0LgorCitCeSBkZWZpbml0aW9uLCBpbW11dGFibGUgb2JqZWN0cyBzdWNoIGFzIG51bWJlcnMsIHN0cmluZ3MsIHR1cGxlcywgYW5kIGBgTm9uZWBgLAorYXJlIHNhZmUgZnJvbSBjaGFuZ2UuIENoYW5nZXMgdG8gbXV0YWJsZSBvYmplY3RzIHN1Y2ggYXMgZGljdGlvbmFyaWVzLCBsaXN0cywKK2FuZCBjbGFzcyBpbnN0YW5jZXMgY2FuIGxlYWQgdG8gY29uZnVzaW9uLgorCitCZWNhdXNlIG9mIHRoaXMgZmVhdHVyZSwgaXQgaXMgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byBub3QgdXNlIG11dGFibGUKK29iamVjdHMgYXMgZGVmYXVsdCB2YWx1ZXMuICBJbnN0ZWFkLCB1c2UgYGBOb25lYGAgYXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kCitpbnNpZGUgdGhlIGZ1bmN0aW9uLCBjaGVjayBpZiB0aGUgcGFyYW1ldGVyIGlzIGBgTm9uZWBgIGFuZCBjcmVhdGUgYSBuZXcKK2xpc3QvZGljdGlvbmFyeS93aGF0ZXZlciBpZiBpdCBpcy4gIEZvciBleGFtcGxlLCBkb24ndCB3cml0ZTo6CisKKyAgIGRlZiBmb28obXlkaWN0PXt9KToKKyAgICAgICAuLi4KKworYnV0OjoKKworICAgZGVmIGZvbyhteWRpY3Q9Tm9uZSk6CisgICAgICAgaWYgbXlkaWN0IGlzIE5vbmU6CisgICAgICAgICAgIG15ZGljdCA9IHt9ICAjIGNyZWF0ZSBhIG5ldyBkaWN0IGZvciBsb2NhbCBuYW1lc3BhY2UKKworVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VmdWwuICBXaGVuIHlvdSBoYXZlIGEgZnVuY3Rpb24gdGhhdCdzIHRpbWUtY29uc3VtaW5nIHRvCitjb21wdXRlLCBhIGNvbW1vbiB0ZWNobmlxdWUgaXMgdG8gY2FjaGUgdGhlIHBhcmFtZXRlcnMgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUKK29mIGVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24sIGFuZCByZXR1cm4gdGhlIGNhY2hlZCB2YWx1ZSBpZiB0aGUgc2FtZSB2YWx1ZSBpcworcmVxdWVzdGVkIGFnYWluLiAgVGhpcyBpcyBjYWxsZWQgIm1lbW9pemluZyIsIGFuZCBjYW4gYmUgaW1wbGVtZW50ZWQgbGlrZSB0aGlzOjoKKworICAgIyBDYWxsZXJzIHdpbGwgbmV2ZXIgcHJvdmlkZSBhIHRoaXJkIHBhcmFtZXRlciBmb3IgdGhpcyBmdW5jdGlvbi4KKyAgIGRlZiBleHBlbnNpdmUoYXJnMSwgYXJnMiwgX2NhY2hlPXt9KToKKyAgICAgICBpZiAoYXJnMSwgYXJnMikgaW4gX2NhY2hlOgorICAgICAgICAgICByZXR1cm4gX2NhY2hlWyhhcmcxLCBhcmcyKV0KKworICAgICAgICMgQ2FsY3VsYXRlIHRoZSB2YWx1ZQorICAgICAgIHJlc3VsdCA9IC4uLiBleHBlbnNpdmUgY29tcHV0YXRpb24gLi4uCisgICAgICAgX2NhY2hlWyhhcmcxLCBhcmcyKV0gPSByZXN1bHQgICMgU3RvcmUgcmVzdWx0IGluIHRoZSBjYWNoZQorICAgICAgIHJldHVybiByZXN1bHQKKworWW91IGNvdWxkIHVzZSBhIGdsb2JhbCB2YXJpYWJsZSBjb250YWluaW5nIGEgZGljdGlvbmFyeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0Cit2YWx1ZTsgaXQncyBhIG1hdHRlciBvZiB0YXN0ZS4KKworCiBIb3cgY2FuIEkgcGFzcyBvcHRpb25hbCBvciBrZXl3b3JkIHBhcmFtZXRlcnMgZnJvbSBvbmUgZnVuY3Rpb24gdG8gYW5vdGhlcj8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC03MTEsNyArNzY3LDcgQEAKIDE0NGBgIGFuZCBgYGludCgnMHgxNDQnKWBgIHJhaXNlcyA6ZXhjOmBWYWx1ZUVycm9yYC4gYGBpbnQoc3RyaW5nLCBiYXNlKWBgIHRha2VzCiB0aGUgYmFzZSB0byBjb252ZXJ0IGZyb20gYXMgYSBzZWNvbmQgb3B0aW9uYWwgYXJndW1lbnQsIHNvIGBgaW50KCcweDE0NCcsIDE2KSA9PQogMzI0YGAuICBJZiB0aGUgYmFzZSBpcyBzcGVjaWZpZWQgYXMgMCwgdGhlIG51bWJlciBpcyBpbnRlcnByZXRlZCB1c2luZyBQeXRob24ncwotcnVsZXM6IGEgbGVhZGluZyAnMCcgaW5kaWNhdGVzIG9jdGFsLCBhbmQgJzB4JyBpbmRpY2F0ZXMgYSBoZXggbnVtYmVyLgorcnVsZXM6IGEgbGVhZGluZyAnMG8nIGluZGljYXRlcyBvY3RhbCwgYW5kICcweCcgaW5kaWNhdGVzIGEgaGV4IG51bWJlci4KIAogRG8gbm90IHVzZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YGV2YWxgIGlmIGFsbCB5b3UgbmVlZCBpcyB0byBjb252ZXJ0CiBzdHJpbmdzIHRvIG51bWJlcnMuICA6ZnVuYzpgZXZhbGAgd2lsbCBiZSBzaWduaWZpY2FudGx5IHNsb3dlciBhbmQgaXQgcHJlc2VudHMgYQpAQCAtNzMyLDcgKzc4OCw3IEBACiBjb25zdHJ1Y3RvciA6ZnVuYzpgc3RyYC4gIElmIHlvdSB3YW50IGEgaGV4YWRlY2ltYWwgb3Igb2N0YWwgcmVwcmVzZW50YXRpb24sIHVzZQogdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyA6ZnVuYzpgaGV4YCBvciA6ZnVuYzpgb2N0YC4gIEZvciBmYW5jeSBmb3JtYXR0aW5nLCBzZWUKIHRoZSA6cmVmOmBzdHJpbmctZm9ybWF0dGluZ2Agc2VjdGlvbiwgZS5nLiBgYCJ7OjA0ZH0iLmZvcm1hdCgxNDQpYGAgeWllbGRzCi1gYCcwMTQ0J2BgIGFuZCBgYCJ7Oi4zZn0iLmZvcm1hdCgxLzMpYGAgeWllbGRzIGBgJzAuMzMzJ2BgLgorYGAnMDE0NCdgYCBhbmQgYGAiezouM2Z9Ii5mb3JtYXQoMS4wLzMuMClgYCB5aWVsZHMgYGAnMC4zMzMnYGAuCiAKIAogSG93IGRvIEkgbW9kaWZ5IGEgc3RyaW5nIGluIHBsYWNlPwpAQCAtMTczMCwxOSArMTc4NiwxMCBAQAogX19pbXBvcnRfXygneC55LnonKSByZXR1cm5zIDxtb2R1bGUgJ3gnPjsgaG93IGRvIEkgZ2V0IHo/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVHJ5OjoKK0NvbnNpZGVyIHVzaW5nIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbiA6ZnVuYzpgfmltcG9ydGxpYi5pbXBvcnRfbW9kdWxlYCBmcm9tCis6bW9kOmBpbXBvcnRsaWJgIGluc3RlYWQ6OgogCi0gICBfX2ltcG9ydF9fKCd4LnkueicpLnkuegotCi1Gb3IgbW9yZSByZWFsaXN0aWMgc2l0dWF0aW9ucywgeW91IG1heSBoYXZlIHRvIGRvIHNvbWV0aGluZyBsaWtlIDo6Ci0KLSAgIG0gPSBfX2ltcG9ydF9fKHMpCi0gICBmb3IgaSBpbiBzLnNwbGl0KCIuIilbMTpdOgotICAgICAgIG0gPSBnZXRhdHRyKG0sIGkpCi0KLVNlZSA6bW9kOmBpbXBvcnRsaWJgIGZvciBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGNhbGxlZAotOmZ1bmM6YH5pbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAuCi0KKyAgIHogPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgneC55LnonKQogCiAKIFdoZW4gSSBlZGl0IGFuIGltcG9ydGVkIG1vZHVsZSBhbmQgcmVpbXBvcnQgaXQsIHRoZSBjaGFuZ2VzIGRvbid0IHNob3cgdXAuICBXaHkgZG9lcyB0aGlzIGhhcHBlbj8KQEAgLTE3NTEsMTIgKzE3OTgsMTIgQEAKIEZvciByZWFzb25zIG9mIGVmZmljaWVuY3kgYXMgd2VsbCBhcyBjb25zaXN0ZW5jeSwgUHl0aG9uIG9ubHkgcmVhZHMgdGhlIG1vZHVsZQogZmlsZSBvbiB0aGUgZmlyc3QgdGltZSBhIG1vZHVsZSBpcyBpbXBvcnRlZC4gIElmIGl0IGRpZG4ndCwgaW4gYSBwcm9ncmFtCiBjb25zaXN0aW5nIG9mIG1hbnkgbW9kdWxlcyB3aGVyZSBlYWNoIG9uZSBpbXBvcnRzIHRoZSBzYW1lIGJhc2ljIG1vZHVsZSwgdGhlCi1iYXNpYyBtb2R1bGUgd291bGQgYmUgcGFyc2VkIGFuZCByZS1wYXJzZWQgbWFueSB0aW1lcy4gIFRvIGZvcmNlIHJlcmVhZGluZyBvZiBhCitiYXNpYyBtb2R1bGUgd291bGQgYmUgcGFyc2VkIGFuZCByZS1wYXJzZWQgbWFueSB0aW1lcy4gIFRvIGZvcmNlIHJlLXJlYWRpbmcgb2YgYQogY2hhbmdlZCBtb2R1bGUsIGRvIHRoaXM6OgogCi0gICBpbXBvcnQgaW1wCisgICBpbXBvcnQgaW1wb3J0bGliCiAgICBpbXBvcnQgbW9kbmFtZQotICAgaW1wLnJlbG9hZChtb2RuYW1lKQorICAgaW1wb3J0bGliLnJlbG9hZChtb2RuYW1lKQogCiBXYXJuaW5nOiB0aGlzIHRlY2huaXF1ZSBpcyBub3QgMTAwJSBmb29sLXByb29mLiAgSW4gcGFydGljdWxhciwgbW9kdWxlcwogY29udGFpbmluZyBzdGF0ZW1lbnRzIGxpa2UgOjoKQEAgLTE3NjgsMTAgKzE4MTUsMTAgQEAKIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgY2xhc3MgZGVmaW5pdGlvbi4gIFRoaXMgY2FuIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nCiBwYXJhZG94aWNhbCBiZWhhdmlvdXI6CiAKLSAgID4+PiBpbXBvcnQgaW1wCisgICA+Pj4gaW1wb3J0IGltcG9ydGxpYgogICAgPj4+IGltcG9ydCBjbHMKICAgID4+PiBjID0gY2xzLkMoKSAgICAgICAgICAgICAgICAjIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBDCi0gICA+Pj4gaW1wLnJlbG9hZChjbHMpCisgICA+Pj4gaW1wb3J0bGliLnJlbG9hZChjbHMpCiAgICA8bW9kdWxlICdjbHMnIGZyb20gJ2Nscy5weSc+CiAgICA+Pj4gaXNpbnN0YW5jZShjLCBjbHMuQykgICAgICAgIyBpc2luc3RhbmNlIGlzIGZhbHNlPyE/CiAgICBGYWxzZQpkaWZmIC0tZ2l0IGEvRG9jL2dsb3NzYXJ5LnJzdCBiL0RvYy9nbG9zc2FyeS5yc3QKaW5kZXggYjQ4ZWIxZS4uNWZiOTEyNiAxMDA2NDQKLS0tIGEvRG9jL2dsb3NzYXJ5LnJzdAorKysgYi9Eb2MvZ2xvc3NhcnkucnN0CkBAIC0zMTAsNiArMzEwLDE1IEBACiAgICAgICAgICA+Pj4gc3VtKGkqaSBmb3IgaSBpbiByYW5nZSgxMCkpICAgICAgICAgIyBzdW0gb2Ygc3F1YXJlcyAwLCAxLCA0LCAuLi4gODEKICAgICAgICAgIDI4NQogCisgICBnZW5lcmljIGZ1bmN0aW9uCisgICAgICBBIGZ1bmN0aW9uIGNvbXBvc2VkIG9mIG11bHRpcGxlIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgb3BlcmF0aW9uCisgICAgICBmb3IgZGlmZmVyZW50IHR5cGVzLiBXaGljaCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgdXNlZCBkdXJpbmcgYSBjYWxsIGlzCisgICAgICBkZXRlcm1pbmVkIGJ5IHRoZSBkaXNwYXRjaCBhbGdvcml0aG0uCisKKyAgICAgIFNlZSBhbHNvIHRoZSA6dGVybTpgc2luZ2xlIGRpc3BhdGNoYCBnbG9zc2FyeSBlbnRyeSwgdGhlCisgICAgICA6ZnVuYzpgZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoYCBkZWNvcmF0b3IsIGFuZCA6cGVwOmA0NDNgLgorCisKICAgIEdJTAogICAgICAgU2VlIDp0ZXJtOmBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9ja2AuCiAKQEAgLTUzMCw2ICs1MzksMTAgQEAKIAogICAgICAgU2VlIGFsc28gOnRlcm06YHBhY2thZ2VgLgogCisgICBtb2R1bGUgc3BlYworICAgICAgQSBuYW1lc3BhY2UgY29udGFpbmluZyB0aGUgaW1wb3J0LXJlbGF0ZWQgaW5mb3JtYXRpb24gdXNlZCB0byBsb2FkIGEKKyAgICAgIG1vZHVsZS4KKwogICAgTVJPCiAgICAgICBTZWUgOnRlcm06YG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyYC4KIApAQCAtNjcxLDIwICs2ODQsMjcgQEAKICAgIHBvc2l0aW9uYWwgYXJndW1lbnQKICAgICAgIFNlZSA6dGVybTpgYXJndW1lbnRgLgogCi0gICBwcm92aXNpb25hbCBwYWNrYWdlCi0gICAgICBBIHByb3Zpc2lvbmFsIHBhY2thZ2UgaXMgb25lIHdoaWNoIGhhcyBiZWVuIGRlbGliZXJhdGVseSBleGNsdWRlZCBmcm9tCisgICBwcm92aXNpb25hbCBBUEkKKyAgICAgIEEgcHJvdmlzaW9uYWwgQVBJIGlzIG9uZSB3aGljaCBoYXMgYmVlbiBkZWxpYmVyYXRlbHkgZXhjbHVkZWQgZnJvbQogICAgICAgdGhlIHN0YW5kYXJkIGxpYnJhcnkncyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiAgV2hpbGUgbWFqb3IKLSAgICAgIGNoYW5nZXMgdG8gc3VjaCBwYWNrYWdlcyBhcmUgbm90IGV4cGVjdGVkLCBhcyBsb25nIGFzIHRoZXkgYXJlIG1hcmtlZAorICAgICAgY2hhbmdlcyB0byBzdWNoIGludGVyZmFjZXMgYXJlIG5vdCBleHBlY3RlZCwgYXMgbG9uZyBhcyB0aGV5IGFyZSBtYXJrZWQKICAgICAgIHByb3Zpc2lvbmFsLCBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZXMgKHVwIHRvIGFuZCBpbmNsdWRpbmcgcmVtb3ZhbAotICAgICAgb2YgdGhlIHBhY2thZ2UpIG1heSBvY2N1ciBpZiBkZWVtZWQgbmVjZXNzYXJ5IGJ5IGNvcmUgZGV2ZWxvcGVycy4gIFN1Y2gKKyAgICAgIG9mIHRoZSBpbnRlcmZhY2UpIG1heSBvY2N1ciBpZiBkZWVtZWQgbmVjZXNzYXJ5IGJ5IGNvcmUgZGV2ZWxvcGVycy4gIFN1Y2gKICAgICAgIGNoYW5nZXMgd2lsbCBub3QgYmUgbWFkZSBncmF0dWl0b3VzbHkgLS0gdGhleSB3aWxsIG9jY3VyIG9ubHkgaWYgc2VyaW91cwotICAgICAgZmxhd3MgYXJlIHVuY292ZXJlZCB0aGF0IHdlcmUgbWlzc2VkIHByaW9yIHRvIHRoZSBpbmNsdXNpb24gb2YgdGhlCi0gICAgICBwYWNrYWdlLgorICAgICAgZnVuZGFtZW50YWwgZmxhd3MgYXJlIHVuY292ZXJlZCB0aGF0IHdlcmUgbWlzc2VkIHByaW9yIHRvIHRoZSBpbmNsdXNpb24KKyAgICAgIG9mIHRoZSBBUEkuCisKKyAgICAgIEV2ZW4gZm9yIHByb3Zpc2lvbmFsIEFQSXMsIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyBhcmUgc2VlbiBhcworICAgICAgYSAic29sdXRpb24gb2YgbGFzdCByZXNvcnQiIC0gZXZlcnkgYXR0ZW1wdCB3aWxsIHN0aWxsIGJlIG1hZGUgdG8gZmluZAorICAgICAgYSBiYWNrd2FyZHMgY29tcGF0aWJsZSByZXNvbHV0aW9uIHRvIGFueSBpZGVudGlmaWVkIHByb2JsZW1zLgogCiAgICAgICBUaGlzIHByb2Nlc3MgYWxsb3dzIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHRvIGNvbnRpbnVlIHRvIGV2b2x2ZSBvdmVyCiAgICAgICB0aW1lLCB3aXRob3V0IGxvY2tpbmcgaW4gcHJvYmxlbWF0aWMgZGVzaWduIGVycm9ycyBmb3IgZXh0ZW5kZWQgcGVyaW9kcwogICAgICAgb2YgdGltZS4gIFNlZSA6cGVwOmA0MTFgIGZvciBtb3JlIGRldGFpbHMuCiAKKyAgIHByb3Zpc2lvbmFsIHBhY2thZ2UKKyAgICAgIFNlZSA6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4KKwogICAgUHl0aG9uIDMwMDAKICAgICAgIE5pY2tuYW1lIGZvciB0aGUgUHl0aG9uIDMueCByZWxlYXNlIGxpbmUgKGNvaW5lZCBsb25nIGFnbyB3aGVuIHRoZQogICAgICAgcmVsZWFzZSBvZiB2ZXJzaW9uIDMgd2FzIHNvbWV0aGluZyBpbiB0aGUgZGlzdGFudCBmdXR1cmUuKSAgVGhpcyBpcyBhbHNvCkBAIC03NzEsNiArNzkxLDEwIEBACiAgICAgICBpbnRlcmZhY2UgY2FuIGJlIHJlZ2lzdGVyZWQgZXhwbGljaXRseSB1c2luZwogICAgICAgOmZ1bmM6YH5hYmMucmVnaXN0ZXJgLgogCisgICBzaW5nbGUgZGlzcGF0Y2gKKyAgICAgIEEgZm9ybSBvZiA6dGVybTpgZ2VuZXJpYyBmdW5jdGlvbmAgZGlzcGF0Y2ggd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGlzCisgICAgICBjaG9zZW4gYmFzZWQgb24gdGhlIHR5cGUgb2YgYSBzaW5nbGUgYXJndW1lbnQuCisKICAgIHNsaWNlCiAgICAgICBBbiBvYmplY3QgdXN1YWxseSBjb250YWluaW5nIGEgcG9ydGlvbiBvZiBhIDp0ZXJtOmBzZXF1ZW5jZWAuICBBIHNsaWNlIGlzCiAgICAgICBjcmVhdGVkIHVzaW5nIHRoZSBzdWJzY3JpcHQgbm90YXRpb24sIGBgW11gYCB3aXRoIGNvbG9ucyBiZXR3ZWVuIG51bWJlcnMKQEAgLTgyNCw3ICs4NDgsNyBAQAogICAgICAgcmVjb2duaXplZCBhcyBlbmRpbmcgYSBsaW5lOiB0aGUgVW5peCBlbmQtb2YtbGluZSBjb252ZW50aW9uIGBgJ1xuJ2BgLAogICAgICAgdGhlIFdpbmRvd3MgY29udmVudGlvbiBgYCdcclxuJ2BgLCBhbmQgdGhlIG9sZCBNYWNpbnRvc2ggY29udmVudGlvbgogICAgICAgYGAnXHInYGAuICBTZWUgOnBlcDpgMjc4YCBhbmQgOnBlcDpgMzExNmAsIGFzIHdlbGwgYXMKLSAgICAgIDpmdW5jOmBzdHIuc3BsaXRsaW5lc2AgZm9yIGFuIGFkZGl0aW9uYWwgdXNlLgorICAgICAgOmZ1bmM6YGJ5dGVzLnNwbGl0bGluZXNgIGZvciBhbiBhZGRpdGlvbmFsIHVzZS4KIAogICAgdmlldwogICAgICAgVGhlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSA6bWV0aDpgZGljdC5rZXlzYCwgOm1ldGg6YGRpY3QudmFsdWVzYCwgYW5kCkBAIC04MzMsNiArODU3LDE0IEBACiAgICAgICBkaWN0aW9uYXJ5IHZpZXcgdG8gYmVjb21lIGEgZnVsbCBsaXN0IHVzZSBgYGxpc3QoZGljdHZpZXcpYGAuICBTZWUKICAgICAgIDpyZWY6YGRpY3Qtdmlld3NgLgogCisgICB2aXJ0dWFsIGVudmlyb25tZW50CisgICAgICBBIGNvb3BlcmF0aXZlbHkgaXNvbGF0ZWQgcnVudGltZSBlbnZpcm9ubWVudCB0aGF0IGFsbG93cyBQeXRob24gdXNlcnMKKyAgICAgIGFuZCBhcHBsaWNhdGlvbnMgdG8gaW5zdGFsbCBhbmQgdXBncmFkZSBQeXRob24gZGlzdHJpYnV0aW9uIHBhY2thZ2VzCisgICAgICB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIGJlaGF2aW91ciBvZiBvdGhlciBQeXRob24gYXBwbGljYXRpb25zCisgICAgICBydW5uaW5nIG9uIHRoZSBzYW1lIHN5c3RlbS4KKworICAgICAgU2VlIGFsc28gOnJlZjpgc2NyaXB0cy1weXZlbnZgCisKICAgIHZpcnR1YWwgbWFjaGluZQogICAgICAgQSBjb21wdXRlciBkZWZpbmVkIGVudGlyZWx5IGluIHNvZnR3YXJlLiAgUHl0aG9uJ3MgdmlydHVhbCBtYWNoaW5lCiAgICAgICBleGVjdXRlcyB0aGUgOnRlcm06YGJ5dGVjb2RlYCBlbWl0dGVkIGJ5IHRoZSBieXRlY29kZSBjb21waWxlci4KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9jbGluaWMucnN0IGIvRG9jL2hvd3RvL2NsaW5pYy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwZGRiZQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9ob3d0by9jbGluaWMucnN0CkBAIC0wLDAgKzEsMTY4NiBAQAorKioqKioqKioqKioqKioqKioqKioqKgorQXJndW1lbnQgQ2xpbmljIEhvdy1UbworKioqKioqKioqKioqKioqKioqKioqKgorCis6YXV0aG9yOiBMYXJyeSBIYXN0aW5ncworCisKKy4uIHRvcGljOjogQWJzdHJhY3QKKworICBBcmd1bWVudCBDbGluaWMgaXMgYSBwcmVwcm9jZXNzb3IgZm9yIENQeXRob24gQyBmaWxlcy4KKyAgSXRzIHB1cnBvc2UgaXMgdG8gYXV0b21hdGUgYWxsIHRoZSBib2lsZXJwbGF0ZSBpbnZvbHZlZAorICB3aXRoIHdyaXRpbmcgYXJndW1lbnQgcGFyc2luZyBjb2RlIGZvciAiYnVpbHRpbnMiLgorICBUaGlzIGRvY3VtZW50IHNob3dzIHlvdSBob3cgdG8gY29udmVydCB5b3VyIGZpcnN0IEMKKyAgZnVuY3Rpb24gdG8gd29yayB3aXRoIEFyZ3VtZW50IENsaW5pYywgYW5kIHRoZW4gaW50cm9kdWNlcworICBzb21lIGFkdmFuY2VkIHRvcGljcyBvbiBBcmd1bWVudCBDbGluaWMgdXNhZ2UuCisKKyAgQ3VycmVudGx5IEFyZ3VtZW50IENsaW5pYyBpcyBjb25zaWRlcmVkIGludGVybmFsLW9ubHkKKyAgZm9yIENQeXRob24uICBJdHMgdXNlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzIG91dHNpZGUKKyAgQ1B5dGhvbiwgYW5kIG5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgcmVnYXJkaW5nIGJhY2t3YXJkcworICBjb21wYXRpYmlsaXR5IGZvciBmdXR1cmUgdmVyc2lvbnMuICBJbiBvdGhlciB3b3JkczogaWYgeW91CisgIG1haW50YWluIGFuIGV4dGVybmFsIEMgZXh0ZW5zaW9uIGZvciBDUHl0aG9uLCB5b3UncmUgd2VsY29tZQorICB0byBleHBlcmltZW50IHdpdGggQXJndW1lbnQgQ2xpbmljIGluIHlvdXIgb3duIGNvZGUuICBCdXQgdGhlCisgIHZlcnNpb24gb2YgQXJndW1lbnQgQ2xpbmljIHRoYXQgc2hpcHMgd2l0aCBDUHl0aG9uIDMuNSAqY291bGQqCisgIGJlIHRvdGFsbHkgaW5jb21wYXRpYmxlIGFuZCBicmVhayBhbGwgeW91ciBjb2RlLgorCitUaGUgR29hbHMgT2YgQXJndW1lbnQgQ2xpbmljCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FyZ3VtZW50IENsaW5pYydzIHByaW1hcnkgZ29hbAoraXMgdG8gdGFrZSBvdmVyIHJlc3BvbnNpYmlsaXR5IGZvciBhbGwgYXJndW1lbnQgcGFyc2luZyBjb2RlCitpbnNpZGUgQ1B5dGhvbi4gIFRoaXMgbWVhbnMgdGhhdCwgd2hlbiB5b3UgY29udmVydCBhIGZ1bmN0aW9uCit0byB3b3JrIHdpdGggQXJndW1lbnQgQ2xpbmljLCB0aGF0IGZ1bmN0aW9uIHNob3VsZCBubyBsb25nZXIKK2RvIGFueSBvZiBpdHMgb3duIGFyZ3VtZW50IHBhcnNpbmctLXRoZSBjb2RlIGdlbmVyYXRlZCBieQorQXJndW1lbnQgQ2xpbmljIHNob3VsZCBiZSBhICJibGFjayBib3giIHRvIHlvdSwgd2hlcmUgQ1B5dGhvbgorY2FsbHMgaW4gYXQgdGhlIHRvcCwgYW5kIHlvdXIgY29kZSBnZXRzIGNhbGxlZCBhdCB0aGUgYm90dG9tLAord2l0aCBgYFB5T2JqZWN0ICphcmdzYGAgKGFuZCBtYXliZSBgYFB5T2JqZWN0ICprd2FyZ3NgYCkKK21hZ2ljYWxseSBjb252ZXJ0ZWQgaW50byB0aGUgQyB2YXJpYWJsZXMgYW5kIHR5cGVzIHlvdSBuZWVkLgorCitJbiBvcmRlciBmb3IgQXJndW1lbnQgQ2xpbmljIHRvIGFjY29tcGxpc2ggaXRzIHByaW1hcnkgZ29hbCwKK2l0IG11c3QgYmUgZWFzeSB0byB1c2UuICBDdXJyZW50bHksIHdvcmtpbmcgd2l0aCBDUHl0aG9uJ3MKK2FyZ3VtZW50IHBhcnNpbmcgbGlicmFyeSBpcyBhIGNob3JlLCByZXF1aXJpbmcgbWFpbnRhaW5pbmcKK3JlZHVuZGFudCBpbmZvcm1hdGlvbiBpbiBhIHN1cnByaXNpbmcgbnVtYmVyIG9mIHBsYWNlcy4KK1doZW4geW91IHVzZSBBcmd1bWVudCBDbGluaWMsIHlvdSBkb24ndCBoYXZlIHRvIHJlcGVhdCB5b3Vyc2VsZi4KKworT2J2aW91c2x5LCBubyBvbmUgd291bGQgd2FudCB0byB1c2UgQXJndW1lbnQgQ2xpbmljIHVubGVzcworaXQncyBzb2x2aW5nIHRoZWlyIHByb2JsZW0tLWFuZCB3aXRob3V0IGNyZWF0aW5nIG5ldyBwcm9ibGVtcyBvZgoraXRzIG93bi4KK1NvIGl0J3MgcGFyYW1vdW50IHRoYXQgQXJndW1lbnQgQ2xpbmljIGdlbmVyYXRlIGNvcnJlY3QgY29kZS4KK0l0J2QgYmUgbmljZSBpZiB0aGUgY29kZSB3YXMgZmFzdGVyLCB0b28sIGJ1dCBhdCB0aGUgdmVyeSBsZWFzdAoraXQgc2hvdWxkIG5vdCBpbnRyb2R1Y2UgYSBtYWpvciBzcGVlZCByZWdyZXNzaW9uLiAgKEV2ZW50dWFsbHkgQXJndW1lbnQKK0NsaW5pYyAqc2hvdWxkKiBtYWtlIGEgbWFqb3Igc3BlZWR1cCBwb3NzaWJsZS0td2UgY291bGQKK3Jld3JpdGUgaXRzIGNvZGUgZ2VuZXJhdG9yIHRvIHByb2R1Y2UgdGFpbG9yLW1hZGUgYXJndW1lbnQKK3BhcnNpbmcgY29kZSwgcmF0aGVyIHRoYW4gY2FsbGluZyB0aGUgZ2VuZXJhbC1wdXJwb3NlIENQeXRob24KK2FyZ3VtZW50IHBhcnNpbmcgbGlicmFyeS4gIFRoYXQgd291bGQgbWFrZSBmb3IgdGhlIGZhc3Rlc3QKK2FyZ3VtZW50IHBhcnNpbmcgcG9zc2libGUhKQorCitBZGRpdGlvbmFsbHksIEFyZ3VtZW50IENsaW5pYyBtdXN0IGJlIGZsZXhpYmxlIGVub3VnaCB0bword29yayB3aXRoIGFueSBhcHByb2FjaCB0byBhcmd1bWVudCBwYXJzaW5nLiAgUHl0aG9uIGhhcworc29tZSBmdW5jdGlvbnMgd2l0aCBzb21lIHZlcnkgc3RyYW5nZSBwYXJzaW5nIGJlaGF2aW9yczsKK0FyZ3VtZW50IENsaW5pYydzIGdvYWwgaXMgdG8gc3VwcG9ydCBhbGwgb2YgdGhlbS4KKworRmluYWxseSwgdGhlIG9yaWdpbmFsIG1vdGl2YXRpb24gZm9yIEFyZ3VtZW50IENsaW5pYyB3YXMKK3RvIHByb3ZpZGUgaW50cm9zcGVjdGlvbiAic2lnbmF0dXJlcyIgZm9yIENQeXRob24gYnVpbHRpbnMuCitJdCB1c2VkIHRvIGJlLCB0aGUgaW50cm9zcGVjdGlvbiBxdWVyeSBmdW5jdGlvbnMgd291bGQgdGhyb3cKK2FuIGV4Y2VwdGlvbiBpZiB5b3UgcGFzc2VkIGluIGEgYnVpbHRpbi4gIFdpdGggQXJndW1lbnQKK0NsaW5pYywgdGhhdCdzIGEgdGhpbmcgb2YgdGhlIHBhc3QhCisKK09uZSBpZGVhIHlvdSBzaG91bGQga2VlcCBpbiBtaW5kLCBhcyB5b3Ugd29yayB3aXRoCitBcmd1bWVudCBDbGluaWM6IHRoZSBtb3JlIGluZm9ybWF0aW9uIHlvdSBnaXZlIGl0LCB0aGUKK2JldHRlciBqb2IgaXQnbGwgYmUgYWJsZSB0byBkby4KK0FyZ3VtZW50IENsaW5pYyBpcyBhZG1pdHRlZGx5IHJlbGF0aXZlbHkgc2ltcGxlIHJpZ2h0Citub3cuICBCdXQgYXMgaXQgZXZvbHZlcyBpdCB3aWxsIGdldCBtb3JlIHNvcGhpc3RpY2F0ZWQsCithbmQgaXQgc2hvdWxkIGJlIGFibGUgdG8gZG8gbWFueSBpbnRlcmVzdGluZyBhbmQgc21hcnQKK3RoaW5ncyB3aXRoIGFsbCB0aGUgaW5mb3JtYXRpb24geW91IGdpdmUgaXQuCisKKworQmFzaWMgQ29uY2VwdHMgQW5kIFVzYWdlCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQXJndW1lbnQgQ2xpbmljIHNoaXBzIHdpdGggQ1B5dGhvbjsgeW91J2xsIGZpbmQgaXQgaW4gYGBUb29scy9jbGluaWMvY2xpbmljLnB5YGAuCitJZiB5b3UgcnVuIHRoYXQgc2NyaXB0LCBzcGVjaWZ5aW5nIGEgQyBmaWxlIGFzIGFuIGFyZ3VtZW50OjoKKworICAgICUgcHl0aG9uMyBUb29scy9jbGluaWMvY2xpbmljLnB5IGZvby5jCisKK0FyZ3VtZW50IENsaW5pYyB3aWxsIHNjYW4gb3ZlciB0aGUgZmlsZSBsb29raW5nIGZvciBsaW5lcyB0aGF0Citsb29rIGV4YWN0bHkgbGlrZSB0aGlzOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKworV2hlbiBpdCBmaW5kcyBvbmUsIGl0IHJlYWRzIGV2ZXJ5dGhpbmcgdXAgdG8gYSBsaW5lIHRoYXQgbG9va3MKK2V4YWN0bHkgbGlrZSB0aGlzOjoKKworICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworRXZlcnl0aGluZyBpbiBiZXR3ZWVuIHRoZXNlIHR3byBsaW5lcyBpcyBpbnB1dCBmb3IgQXJndW1lbnQgQ2xpbmljLgorQWxsIG9mIHRoZXNlIGxpbmVzLCBpbmNsdWRpbmcgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGNvbW1lbnQKK2xpbmVzLCBhcmUgY29sbGVjdGl2ZWx5IGNhbGxlZCBhbiBBcmd1bWVudCBDbGluaWMgImJsb2NrIi4KKworV2hlbiBBcmd1bWVudCBDbGluaWMgcGFyc2VzIG9uZSBvZiB0aGVzZSBibG9ja3MsIGl0CitnZW5lcmF0ZXMgb3V0cHV0LiAgVGhpcyBvdXRwdXQgaXMgcmV3cml0dGVuIGludG8gdGhlIEMgZmlsZQoraW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGJsb2NrLCBmb2xsb3dlZCBieSBhIGNvbW1lbnQgY29udGFpbmluZyBhIGNoZWNrc3VtLgorVGhlIEFyZ3VtZW50IENsaW5pYyBibG9jayBub3cgbG9va3MgbGlrZSB0aGlzOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAuLi4gY2xpbmljIGlucHV0IGdvZXMgaGVyZSAuLi4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgLi4uIGNsaW5pYyBvdXRwdXQgZ29lcyBoZXJlIC4uLgorICAgIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPS4uLl0qLworCitJZiB5b3UgcnVuIEFyZ3VtZW50IENsaW5pYyBvbiB0aGUgc2FtZSBmaWxlIGEgc2Vjb25kIHRpbWUsIEFyZ3VtZW50IENsaW5pYword2lsbCBkaXNjYXJkIHRoZSBvbGQgb3V0cHV0IGFuZCB3cml0ZSBvdXQgdGhlIG5ldyBvdXRwdXQgd2l0aCBhIGZyZXNoIGNoZWNrc3VtCitsaW5lLiAgSG93ZXZlciwgaWYgdGhlIGlucHV0IGhhc24ndCBjaGFuZ2VkLCB0aGUgb3V0cHV0IHdvbid0IGNoYW5nZSBlaXRoZXIuCisKK1lvdSBzaG91bGQgbmV2ZXIgbW9kaWZ5IHRoZSBvdXRwdXQgcG9ydGlvbiBvZiBhbiBBcmd1bWVudCBDbGluaWMgYmxvY2suICBJbnN0ZWFkLAorY2hhbmdlIHRoZSBpbnB1dCB1bnRpbCBpdCBwcm9kdWNlcyB0aGUgb3V0cHV0IHlvdSB3YW50LiAgKFRoYXQncyB0aGUgcHVycG9zZSBvZiB0aGUKK2NoZWNrc3VtLS10byBkZXRlY3QgaWYgc29tZW9uZSBjaGFuZ2VkIHRoZSBvdXRwdXQsIGFzIHRoZXNlIGVkaXRzIHdvdWxkIGJlIGxvc3QKK3RoZSBuZXh0IHRpbWUgQXJndW1lbnQgQ2xpbmljIHdyaXRlcyBvdXQgZnJlc2ggb3V0cHV0LikKKworRm9yIHRoZSBzYWtlIG9mIGNsYXJpdHksIGhlcmUncyB0aGUgdGVybWlub2xvZ3kgd2UnbGwgdXNlIHdpdGggQXJndW1lbnQgQ2xpbmljOgorCisqIFRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb21tZW50IChgYC8qW2NsaW5pYyBpbnB1dF1gYCkgaXMgdGhlICpzdGFydCBsaW5lKi4KKyogVGhlIGxhc3QgbGluZSBvZiB0aGUgaW5pdGlhbCBjb21tZW50IChgYFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi9gYCkgaXMgdGhlICplbmQgbGluZSouCisqIFRoZSBsYXN0IGxpbmUgKGBgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09Li4uXSovYGApIGlzIHRoZSAqY2hlY2tzdW0gbGluZSouCisqIEluIGJldHdlZW4gdGhlIHN0YXJ0IGxpbmUgYW5kIHRoZSBlbmQgbGluZSBpcyB0aGUgKmlucHV0Ki4KKyogSW4gYmV0d2VlbiB0aGUgZW5kIGxpbmUgYW5kIHRoZSBjaGVja3N1bSBsaW5lIGlzIHRoZSAqb3V0cHV0Ki4KKyogQWxsIHRoZSB0ZXh0IGNvbGxlY3RpdmVseSwgZnJvbSB0aGUgc3RhcnQgbGluZSB0byB0aGUgY2hlY2tzdW0gbGluZSBpbmNsdXNpdmVseSwKKyAgaXMgdGhlICpibG9jayouICAoQSBibG9jayB0aGF0IGhhc24ndCBiZWVuIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYnkgQXJndW1lbnQKKyAgQ2xpbmljIHlldCBkb2Vzbid0IGhhdmUgb3V0cHV0IG9yIGEgY2hlY2tzdW0gbGluZSwgYnV0IGl0J3Mgc3RpbGwgY29uc2lkZXJlZAorICBhIGJsb2NrLikKKworCitDb252ZXJ0aW5nIFlvdXIgRmlyc3QgRnVuY3Rpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYmVzdCB3YXkgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IEFyZ3VtZW50IENsaW5pYyB3b3JrcyBpcyB0bworY29udmVydCBhIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBpdC4gIEhlcmUsIHRoZW4sIGFyZSB0aGUgYmFyZQorbWluaW11bSBzdGVwcyB5b3UnZCBuZWVkIHRvIGZvbGxvdyB0byBjb252ZXJ0IGEgZnVuY3Rpb24gdG8KK3dvcmsgd2l0aCBBcmd1bWVudCBDbGluaWMuICBOb3RlIHRoYXQgZm9yIGNvZGUgeW91IHBsYW4gdG8KK2NoZWNrIGluIHRvIENQeXRob24sIHlvdSByZWFsbHkgc2hvdWxkIHRha2UgdGhlIGNvbnZlcnNpb24gZmFydGhlciwKK3VzaW5nIHNvbWUgb2YgdGhlIGFkdmFuY2VkIGNvbmNlcHRzIHlvdSdsbCBzZWUgbGF0ZXIgb24gaW4KK3RoZSBkb2N1bWVudCAobGlrZSAicmV0dXJuIGNvbnZlcnRlcnMiIGFuZCAic2VsZiBjb252ZXJ0ZXJzIikuCitCdXQgd2UnbGwga2VlcCBpdCBzaW1wbGUgZm9yIHRoaXMgd2Fsa3Rocm91Z2ggc28geW91IGNhbiBsZWFybi4KKworTGV0J3MgZGl2ZSBpbiEKKworMC4gTWFrZSBzdXJlIHlvdSdyZSB3b3JraW5nIHdpdGggYSBmcmVzaGx5IHVwZGF0ZWQgY2hlY2tvdXQKKyAgIG9mIHRoZSBDUHl0aG9uIHRydW5rLgorCisxLiBGaW5kIGEgUHl0aG9uIGJ1aWx0aW4gdGhhdCBjYWxscyBlaXRoZXIgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAKKyAgIG9yIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AsIGFuZCBoYXNuJ3QgYmVlbiBjb252ZXJ0ZWQKKyAgIHRvIHdvcmsgd2l0aCBBcmd1bWVudCBDbGluaWMgeWV0LgorICAgRm9yIG15IGV4YW1wbGUgSSdtIHVzaW5nIGBgX3BpY2tsZS5QaWNrbGVyLmR1bXAoKWBgLgorCisyLiBJZiB0aGUgY2FsbCB0byB0aGUgYGBQeUFyZ19QYXJzZWBgIGZ1bmN0aW9uIHVzZXMgYW55IG9mIHRoZQorICAgZm9sbG93aW5nIGZvcm1hdCB1bml0czo6CisKKyAgICAgICBPJgorICAgICAgIE8hCisgICAgICAgZXMKKyAgICAgICBlcyMKKyAgICAgICBldAorICAgICAgIGV0IworCisgICBvciBpZiBpdCBoYXMgbXVsdGlwbGUgY2FsbHMgdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAsCisgICB5b3Ugc2hvdWxkIGNob29zZSBhIGRpZmZlcmVudCBmdW5jdGlvbi4gIEFyZ3VtZW50IENsaW5pYyAqZG9lcyoKKyAgIHN1cHBvcnQgYWxsIG9mIHRoZXNlIHNjZW5hcmlvcy4gIEJ1dCB0aGVzZSBhcmUgYWR2YW5jZWQKKyAgIHRvcGljcy0tbGV0J3MgZG8gc29tZXRoaW5nIHNpbXBsZXIgZm9yIHlvdXIgZmlyc3QgZnVuY3Rpb24uCisKKyAgIEFsc28sIGlmIHRoZSBmdW5jdGlvbiBoYXMgbXVsdGlwbGUgY2FsbHMgdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAKKyAgIG9yIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2Agd2hlcmUgaXQgc3VwcG9ydHMgZGlmZmVyZW50CisgICB0eXBlcyBmb3IgdGhlIHNhbWUgYXJndW1lbnQsIG9yIGlmIHRoZSBmdW5jdGlvbiB1c2VzIHNvbWV0aGluZyBiZXNpZGVzCisgICBQeUFyZ19QYXJzZSBmdW5jdGlvbnMgdG8gcGFyc2UgaXRzIGFyZ3VtZW50cywgaXQgcHJvYmFibHkKKyAgIGlzbid0IHN1aXRhYmxlIGZvciBjb252ZXJzaW9uIHRvIEFyZ3VtZW50IENsaW5pYy4gIEFyZ3VtZW50IENsaW5pYworICAgZG9lc24ndCBzdXBwb3J0IGdlbmVyaWMgZnVuY3Rpb25zIG9yIHBvbHltb3JwaGljIHBhcmFtZXRlcnMuCisKKzMuIEFkZCB0aGUgZm9sbG93aW5nIGJvaWxlcnBsYXRlIGFib3ZlIHRoZSBmdW5jdGlvbiwgY3JlYXRpbmcgb3VyIGJsb2NrOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzQuIEN1dCB0aGUgZG9jc3RyaW5nIGFuZCBwYXN0ZSBpdCBpbiBiZXR3ZWVuIHRoZSBgYFtjbGluaWNdYGAgbGluZXMsCisgICByZW1vdmluZyBhbGwgdGhlIGp1bmsgdGhhdCBtYWtlcyBpdCBhIHByb3Blcmx5IHF1b3RlZCBDIHN0cmluZy4KKyAgIFdoZW4geW91J3JlIGRvbmUgeW91IHNob3VsZCBoYXZlIGp1c3QgdGhlIHRleHQsIGJhc2VkIGF0IHRoZSBsZWZ0CisgICBtYXJnaW4sIHdpdGggbm8gbGluZSB3aWRlciB0aGFuIDgwIGNoYXJhY3RlcnMuCisgICAoQXJndW1lbnQgQ2xpbmljIHdpbGwgcHJlc2VydmUgaW5kZW50cyBpbnNpZGUgdGhlIGRvY3N0cmluZy4pCisKKyAgIElmIHRoZSBvbGQgZG9jc3RyaW5nIGhhZCBhIGZpcnN0IGxpbmUgdGhhdCBsb29rZWQgbGlrZSBhIGZ1bmN0aW9uCisgICBzaWduYXR1cmUsIHRocm93IHRoYXQgbGluZSBhd2F5LiAgKFRoZSBkb2NzdHJpbmcgZG9lc24ndCBuZWVkIGl0CisgICBhbnltb3JlLS13aGVuIHlvdSB1c2UgYGBoZWxwKClgYCBvbiB5b3VyIGJ1aWx0aW4gaW4gdGhlIGZ1dHVyZSwKKyAgIHRoZSBmaXJzdCBsaW5lIHdpbGwgYmUgYnVpbHQgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgZnVuY3Rpb24ncworICAgc2lnbmF0dXJlLikKKworICAgU2FtcGxlOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCis1LiBJZiB5b3VyIGRvY3N0cmluZyBkb2Vzbid0IGhhdmUgYSAic3VtbWFyeSIgbGluZSwgQXJndW1lbnQgQ2xpbmljIHdpbGwKKyAgIGNvbXBsYWluLiAgU28gbGV0J3MgbWFrZSBzdXJlIGl0IGhhcyBvbmUuICBUaGUgInN1bW1hcnkiIGxpbmUgc2hvdWxkCisgICBiZSBhIHBhcmFncmFwaCBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIDgwLWNvbHVtbiBsaW5lCisgICBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2NzdHJpbmcuCisKKyAgIChPdXIgZXhhbXBsZSBkb2NzdHJpbmcgY29uc2lzdHMgc29sZWx5IG9mIGEgc3VtbWFyeSBsaW5lLCBzbyB0aGUgc2FtcGxlCisgICBjb2RlIGRvZXNuJ3QgaGF2ZSB0byBjaGFuZ2UgZm9yIHRoaXMgc3RlcC4pCisKKzYuIEFib3ZlIHRoZSBkb2NzdHJpbmcsIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiwgZm9sbG93ZWQKKyAgIGJ5IGEgYmxhbmsgbGluZS4gIFRoaXMgc2hvdWxkIGJlIHRoZSBQeXRob24gbmFtZSBvZiB0aGUgZnVuY3Rpb24sCisgICBhbmQgc2hvdWxkIGJlIHRoZSBmdWxsIGRvdHRlZCBwYXRoCisgICB0byB0aGUgZnVuY3Rpb24tLWl0IHNob3VsZCBzdGFydCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUsCisgICBpbmNsdWRlIGFueSBzdWItbW9kdWxlcywgYW5kIGlmIHRoZSBmdW5jdGlvbiBpcyBhIG1ldGhvZCBvbgorICAgYSBjbGFzcyBpdCBzaG91bGQgaW5jbHVkZSB0aGUgY2xhc3MgbmFtZSB0b28uCisKKyAgIFNhbXBsZTo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzcuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCBtb2R1bGUgb3IgY2xhc3MgaGFzIGJlZW4gdXNlZCB3aXRoIEFyZ3VtZW50CisgICBDbGluaWMgaW4gdGhpcyBDIGZpbGUsCisgICB5b3UgbXVzdCBkZWNsYXJlIHRoZSBtb2R1bGUgYW5kL29yIGNsYXNzLiAgUHJvcGVyIEFyZ3VtZW50IENsaW5pYyBoeWdpZW5lCisgICBwcmVmZXJzIGRlY2xhcmluZyB0aGVzZSBpbiBhIHNlcGFyYXRlIGJsb2NrIHNvbWV3aGVyZSBuZWFyIHRoZQorICAgdG9wIG9mIHRoZSBDIGZpbGUsIGluIHRoZSBzYW1lIHdheSB0aGF0IGluY2x1ZGUgZmlsZXMgYW5kIHN0YXRpY3MgZ28gYXQKKyAgIHRoZSB0b3AuICAoSW4gb3VyIHNhbXBsZSBjb2RlIHdlJ2xsIGp1c3Qgc2hvdyB0aGUgdHdvIGJsb2NrcyBuZXh0IHRvCisgICBlYWNoIG90aGVyLikKKworICAgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFuZCBtb2R1bGUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKKyAgIHNlZW4gYnkgUHl0aG9uLiAgQ2hlY2sgdGhlIG5hbWUgZGVmaW5lZCBpbiB0aGUgOmM6dHlwZTpgUHlNb2R1bGVEZWZgCisgICBvciA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgIGFzIGFwcHJvcHJpYXRlLgorCisgICBXaGVuIHlvdSBkZWNsYXJlIGEgY2xhc3MsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0d28gYXNwZWN0cyBvZiBpdHMgdHlwZQorICAgaW4gQzogdGhlIHR5cGUgZGVjbGFyYXRpb24geW91J2QgdXNlIGZvciBhIHBvaW50ZXIgdG8gYW4gaW5zdGFuY2Ugb2YKKyAgIHRoaXMgY2xhc3MsIGFuZCBhIHBvaW50ZXIgdG8gdGhlIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgZm9yIHRoaXMgY2xhc3MuCisKKyAgIFNhbXBsZTo6CisKKyAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgbW9kdWxlIF9waWNrbGUKKyAgICAgICBjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCisgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisKKworCis4LiBEZWNsYXJlIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIGZ1bmN0aW9uLiAgRWFjaCBwYXJhbWV0ZXIKKyAgIHNob3VsZCBnZXQgaXRzIG93biBsaW5lLiAgQWxsIHRoZSBwYXJhbWV0ZXIgbGluZXMgc2hvdWxkIGJlCisgICBpbmRlbnRlZCBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgZG9jc3RyaW5nLgorCisgICBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoZXNlIHBhcmFtZXRlciBsaW5lcyBpcyBhcyBmb2xsb3dzOjoKKworICAgICAgIG5hbWVfb2ZfcGFyYW1ldGVyOiBjb252ZXJ0ZXIKKworICAgSWYgdGhlIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhZGQgdGhhdCBhZnRlciB0aGUKKyAgIGNvbnZlcnRlcjo6CisKKyAgICAgICBuYW1lX29mX3BhcmFtZXRlcjogY29udmVydGVyID0gZGVmYXVsdF92YWx1ZQorCisgICBBcmd1bWVudCBDbGluaWMncyBzdXBwb3J0IGZvciAiZGVmYXVsdCB2YWx1ZXMiIGlzIHF1aXRlIHNvcGhpc3RpY2F0ZWQ7CisgICBwbGVhc2Ugc2VlIDpyZWY6YHRoZSBzZWN0aW9uIGJlbG93IG9uIGRlZmF1bHQgdmFsdWVzIDxkZWZhdWx0X3ZhbHVlcz5gCisgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgQWRkIGEgYmxhbmsgbGluZSBiZWxvdyB0aGUgcGFyYW1ldGVycy4KKworICAgV2hhdCdzIGEgImNvbnZlcnRlciI/ICBJdCBlc3RhYmxpc2hlcyBib3RoIHRoZSB0eXBlCisgICBvZiB0aGUgdmFyaWFibGUgdXNlZCBpbiBDLCBhbmQgdGhlIG1ldGhvZCB0byBjb252ZXJ0IHRoZSBQeXRob24KKyAgIHZhbHVlIGludG8gYSBDIHZhbHVlIGF0IHJ1bnRpbWUuCisgICBGb3Igbm93IHlvdSdyZSBnb2luZyB0byB1c2Ugd2hhdCdzIGNhbGxlZCBhICJsZWdhY3kgY29udmVydGVyIi0tYQorICAgY29udmVuaWVuY2Ugc3ludGF4IGludGVuZGVkIHRvIG1ha2UgcG9ydGluZyBvbGQgY29kZSBpbnRvIEFyZ3VtZW50CisgICBDbGluaWMgZWFzaWVyLgorCisgICBGb3IgZWFjaCBwYXJhbWV0ZXIsIGNvcHkgdGhlICJmb3JtYXQgdW5pdCIgZm9yIHRoYXQKKyAgIHBhcmFtZXRlciBmcm9tIHRoZSBgYFB5QXJnX1BhcnNlKClgYCBmb3JtYXQgYXJndW1lbnQgYW5kCisgICBzcGVjaWZ5ICp0aGF0KiBhcyBpdHMgY29udmVydGVyLCBhcyBhIHF1b3RlZAorICAgc3RyaW5nLiAgKCJmb3JtYXQgdW5pdCIgaXMgdGhlIGZvcm1hbCBuYW1lIGZvciB0aGUgb25lLXRvLXRocmVlCisgICBjaGFyYWN0ZXIgc3Vic3RyaW5nIG9mIHRoZSBgYGZvcm1hdGBgIHBhcmFtZXRlciB0aGF0IHRlbGxzCisgICB0aGUgYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbiB3aGF0IHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZQorICAgaXMgYW5kIGhvdyB0byBjb252ZXJ0IGl0LiAgRm9yIG1vcmUgb24gZm9ybWF0IHVuaXRzIHBsZWFzZQorICAgc2VlIDpyZWY6YGFyZy1wYXJzaW5nYC4pCisKKyAgIEZvciBtdWx0aWNoYXJhY3RlciBmb3JtYXQgdW5pdHMgbGlrZSBgYHojYGAsIHVzZSB0aGUKKyAgIGVudGlyZSB0d28tb3ItdGhyZWUgY2hhcmFjdGVyIHN0cmluZy4KKworICAgU2FtcGxlOjoKKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgIGNsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICBvYmo6ICdPJworCisgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworOS4gSWYgeW91ciBmdW5jdGlvbiBoYXMgYGB8YGAgaW4gdGhlIGZvcm1hdCBzdHJpbmcsIG1lYW5pbmcgc29tZQorICAgcGFyYW1ldGVycyBoYXZlIGRlZmF1bHQgdmFsdWVzLCB5b3UgY2FuIGlnbm9yZSBpdC4gIEFyZ3VtZW50CisgICBDbGluaWMgaW5mZXJzIHdoaWNoIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGJhc2VkIG9uIHdoZXRoZXIKKyAgIG9yIG5vdCB0aGV5IGhhdmUgZGVmYXVsdCB2YWx1ZXMuCisKKyAgIElmIHlvdXIgZnVuY3Rpb24gaGFzIGBgJGBgIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBtZWFuaW5nIGl0CisgICB0YWtlcyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLCBzcGVjaWZ5IGBgKmBgIG9uIGEgbGluZSBieQorICAgaXRzZWxmIGJlZm9yZSB0aGUgZmlyc3Qga2V5d29yZC1vbmx5IGFyZ3VtZW50LCBpbmRlbnRlZCB0aGUKKyAgIHNhbWUgYXMgdGhlIHBhcmFtZXRlciBsaW5lcy4KKworICAgKGBgX3BpY2tsZS5QaWNrbGVyLmR1bXBgYCBoYXMgbmVpdGhlciwgc28gb3VyIHNhbXBsZSBpcyB1bmNoYW5nZWQuKQorCisKKzEwLiBJZiB0aGUgZXhpc3RpbmcgQyBmdW5jdGlvbiBjYWxscyA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYAorICAgIChhcyBvcHBvc2VkIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2ApLCB0aGVuIGFsbCBpdHMKKyAgICBhcmd1bWVudHMgYXJlIHBvc2l0aW9uYWwtb25seS4KKworICAgIFRvIG1hcmsgYWxsIHBhcmFtZXRlcnMgYXMgcG9zaXRpb25hbC1vbmx5IGluIEFyZ3VtZW50IENsaW5pYywKKyAgICBhZGQgYSBgYC9gYCBvbiBhIGxpbmUgYnkgaXRzZWxmIGFmdGVyIHRoZSBsYXN0IHBhcmFtZXRlciwKKyAgICBpbmRlbnRlZCB0aGUgc2FtZSBhcyB0aGUgcGFyYW1ldGVyIGxpbmVzLgorCisgICAgQ3VycmVudGx5IHRoaXMgaXMgYWxsLW9yLW5vdGhpbmc7IGVpdGhlciBhbGwgcGFyYW1ldGVycyBhcmUKKyAgICBwb3NpdGlvbmFsLW9ubHksIG9yIG5vbmUgb2YgdGhlbSBhcmUuICAoSW4gdGhlIGZ1dHVyZSBBcmd1bWVudAorICAgIENsaW5pYyBtYXkgcmVsYXggdGhpcyByZXN0cmljdGlvbi4pCisKKyAgICBTYW1wbGU6OgorCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgbW9kdWxlIF9waWNrbGUKKyAgICAgICAgY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgICAgICBvYmo6ICdPJworICAgICAgICAgICAgLworCisgICAgICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisxMS4gSXQncyBoZWxwZnVsIHRvIHdyaXRlIGEgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcgZm9yIGVhY2ggcGFyYW1ldGVyLgorICAgIEJ1dCBwZXItcGFyYW1ldGVyIGRvY3N0cmluZ3MgYXJlIG9wdGlvbmFsOyB5b3UgY2FuIHNraXAgdGhpcyBzdGVwCisgICAgaWYgeW91IHByZWZlci4KKworICAgIEhlcmUncyBob3cgdG8gYWRkIGEgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcuICBUaGUgZmlyc3QgbGluZQorICAgIG9mIHRoZSBwZXItcGFyYW1ldGVyIGRvY3N0cmluZyBtdXN0IGJlIGluZGVudGVkIGZ1cnRoZXIgdGhhbiB0aGUKKyAgICBwYXJhbWV0ZXIgZGVmaW5pdGlvbi4gIFRoZSBsZWZ0IG1hcmdpbiBvZiB0aGlzIGZpcnN0IGxpbmUgZXN0YWJsaXNoZXMKKyAgICB0aGUgbGVmdCBtYXJnaW4gZm9yIHRoZSB3aG9sZSBwZXItcGFyYW1ldGVyIGRvY3N0cmluZzsgYWxsIHRoZSB0ZXh0CisgICAgeW91IHdyaXRlIHdpbGwgYmUgb3V0ZGVudGVkIGJ5IHRoaXMgYW1vdW50LiAgWW91IGNhbiB3cml0ZSBhcyBtdWNoCisgICAgdGV4dCBhcyB5b3UgbGlrZSwgYWNyb3NzIG11bHRpcGxlIGxpbmVzIGlmIHlvdSB3aXNoLgorCisgICAgU2FtcGxlOjoKKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgIGNsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICAgb2JqOiAnTycKKyAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGJlIHBpY2tsZWQuCisgICAgICAgICAgICAvCisKKyAgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzEyLiBTYXZlIGFuZCBjbG9zZSB0aGUgZmlsZSwgdGhlbiBydW4gYGBUb29scy9jbGluaWMvY2xpbmljLnB5YGAgb24gaXQuCisgICAgV2l0aCBsdWNrIGV2ZXJ5dGhpbmcgd29ya2VkIGFuZCB5b3VyIGJsb2NrIG5vdyBoYXMgb3V0cHV0ISAgUmVvcGVuCisgICAgdGhlIGZpbGUgaW4geW91ciB0ZXh0IGVkaXRvciB0byBzZWU6OgorCisgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgorICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICAgICAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT1kYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKKyAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICBvYmo6ICdPJworICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0byBiZSBwaWNrbGVkLgorICAgICAgICAgICAvCisKKyAgICAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfXywKKyAgICAgICAiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLlxuIgorICAgICAgICJcbiIKKyAgICAgICAuLi4KKyAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgIF9waWNrbGVfUGlja2xlcl9kdW1wX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKKyAgICAgICAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT0zYmQzMDc0NWJmMjA2YTQ4ZjhiNTc2YTFkYTNkOTBmNTVhMGE0MTg3XSovCisKKyAgICBPYnZpb3VzbHksIGlmIEFyZ3VtZW50IENsaW5pYyBkaWRuJ3QgcHJvZHVjZSBhbnkgb3V0cHV0LCBpdCdzIGJlY2F1c2UKKyAgICBpdCBmb3VuZCBhbiBlcnJvciBpbiB5b3VyIGlucHV0LiAgS2VlcCBmaXhpbmcgeW91ciBlcnJvcnMgYW5kIHJldHJ5aW5nCisgICAgdW50aWwgQXJndW1lbnQgQ2xpbmljIHByb2Nlc3NlcyB5b3VyIGZpbGUgd2l0aG91dCBjb21wbGFpbnQuCisKKzEzLiBEb3VibGUtY2hlY2sgdGhhdCB0aGUgYXJndW1lbnQtcGFyc2luZyBjb2RlIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZWQKKyAgICBsb29rcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIGV4aXN0aW5nIGNvZGUuCisKKyAgICBGaXJzdCwgZW5zdXJlIGJvdGggcGxhY2VzIHVzZSB0aGUgc2FtZSBhcmd1bWVudC1wYXJzaW5nIGZ1bmN0aW9uLgorICAgIFRoZSBleGlzdGluZyBjb2RlIG11c3QgY2FsbCBlaXRoZXIKKyAgICA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBvciA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgOworICAgIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGdlbmVyYXRlZCBieSBBcmd1bWVudCBDbGluaWMgY2FsbHMgdGhlCisgICAgKmV4YWN0KiBzYW1lIGZ1bmN0aW9uLgorCisgICAgU2Vjb25kLCB0aGUgZm9ybWF0IHN0cmluZyBwYXNzZWQgaW4gdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgb3IKKyAgICA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIHNob3VsZCBiZSAqZXhhY3RseSogdGhlIHNhbWUKKyAgICBhcyB0aGUgaGFuZC13cml0dGVuIG9uZSBpbiB0aGUgZXhpc3RpbmcgZnVuY3Rpb24sIHVwIHRvIHRoZSBjb2xvbgorICAgIG9yIHNlbWktY29sb24uCisKKyAgICAoQXJndW1lbnQgQ2xpbmljIGFsd2F5cyBnZW5lcmF0ZXMgaXRzIGZvcm1hdCBzdHJpbmdzCisgICAgd2l0aCBhIGBgOmBgIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gIElmIHRoZQorICAgIGV4aXN0aW5nIGNvZGUncyBmb3JtYXQgc3RyaW5nIGVuZHMgd2l0aCBgYDtgYCwgdG8gcHJvdmlkZQorICAgIHVzYWdlIGhlbHAsIHRoaXMgY2hhbmdlIGlzIGhhcm1sZXNzLS1kb24ndCB3b3JyeSBhYm91dCBpdC4pCisKKyAgICBUaGlyZCwgZm9yIHBhcmFtZXRlcnMgd2hvc2UgZm9ybWF0IHVuaXRzIHJlcXVpcmUgdHdvIGFyZ3VtZW50cworICAgIChsaWtlIGEgbGVuZ3RoIHZhcmlhYmxlLCBvciBhbiBlbmNvZGluZyBzdHJpbmcsIG9yIGEgcG9pbnRlcgorICAgIHRvIGEgY29udmVyc2lvbiBmdW5jdGlvbiksIGVuc3VyZSB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKKyAgICAqZXhhY3RseSogdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGludm9jYXRpb25zLgorCisgICAgRm91cnRoLCBpbnNpZGUgdGhlIG91dHB1dCBwb3J0aW9uIG9mIHRoZSBibG9jayB5b3UnbGwgZmluZCBhIHByZXByb2Nlc3NvcgorICAgIG1hY3JvIGRlZmluaW5nIHRoZSBhcHByb3ByaWF0ZSBzdGF0aWMgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSBmb3IKKyAgICB0aGlzIGJ1aWx0aW46OgorCisgICAgICAgICNkZWZpbmUgX19QSUNLTEVfUElDS0xFUl9EVU1QX01FVEhPRERFRiAgICBcCisgICAgICAgIHsiZHVtcCIsIChQeUNGdW5jdGlvbilfX3BpY2tsZV9QaWNrbGVyX2R1bXAsIE1FVEhfTywgX19waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfX30sCisKKyAgICBUaGlzIHN0YXRpYyBzdHJ1Y3R1cmUgc2hvdWxkIGJlICpleGFjdGx5KiB0aGUgc2FtZSBhcyB0aGUgZXhpc3Rpbmcgc3RhdGljCisgICAgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSBmb3IgdGhpcyBidWlsdGluLgorCisgICAgSWYgYW55IG9mIHRoZXNlIGl0ZW1zIGRpZmZlciBpbiAqYW55IHdheSosCisgICAgYWRqdXN0IHlvdXIgQXJndW1lbnQgQ2xpbmljIGZ1bmN0aW9uIHNwZWNpZmljYXRpb24gYW5kIHJlcnVuCisgICAgYGBUb29scy9jbGluaWMvY2xpbmljLnB5YGAgdW50aWwgdGhleSAqYXJlKiB0aGUgc2FtZS4KKworCisxNC4gTm90aWNlIHRoYXQgdGhlIGxhc3QgbGluZSBvZiBpdHMgb3V0cHV0IGlzIHRoZSBkZWNsYXJhdGlvbgorICAgIG9mIHlvdXIgImltcGwiIGZ1bmN0aW9uLiAgVGhpcyBpcyB3aGVyZSB0aGUgYnVpbHRpbidzIGltcGxlbWVudGF0aW9uIGdvZXMuCisgICAgRGVsZXRlIHRoZSBleGlzdGluZyBwcm90b3R5cGUgb2YgdGhlIGZ1bmN0aW9uIHlvdSdyZSBtb2RpZnlpbmcsIGJ1dCBsZWF2ZQorICAgIHRoZSBvcGVuaW5nIGN1cmx5IGJyYWNlLiAgTm93IGRlbGV0ZSBpdHMgYXJndW1lbnQgcGFyc2luZyBjb2RlIGFuZCB0aGUKKyAgICBkZWNsYXJhdGlvbnMgb2YgYWxsIHRoZSB2YXJpYWJsZXMgaXQgZHVtcHMgdGhlIGFyZ3VtZW50cyBpbnRvLgorICAgIE5vdGljZSBob3cgdGhlIFB5dGhvbiBhcmd1bWVudHMgYXJlIG5vdyBhcmd1bWVudHMgdG8gdGhpcyBpbXBsIGZ1bmN0aW9uOworICAgIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIGRpZmZlcmVudCBuYW1lcyBmb3IgdGhlc2UgdmFyaWFibGVzLCBmaXggaXQuCisKKyAgICBMZXQncyByZWl0ZXJhdGUsIGp1c3QgYmVjYXVzZSBpdCdzIGtpbmQgb2Ygd2VpcmQuICBZb3VyIGNvZGUgc2hvdWxkIG5vdworICAgIGxvb2sgbGlrZSB0aGlzOjoKKworICAgICAgICBzdGF0aWMgcmV0dXJuX3R5cGUKKyAgICAgICAgeW91cl9mdW5jdGlvbl9pbXBsKC4uLikKKyAgICAgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09Li4uXSovCisgICAgICAgIHsKKyAgICAgICAgLi4uCisKKyAgICBBcmd1bWVudCBDbGluaWMgZ2VuZXJhdGVkIHRoZSBjaGVja3N1bSBsaW5lIGFuZCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIGp1c3QKKyAgICBhYm92ZSBpdC4gIFlvdSBzaG91bGQgd3JpdGUgdGhlIG9wZW5pbmcgKGFuZCBjbG9zaW5nKSBjdXJseSBicmFjZXMgZm9yIHRoZQorICAgIGZ1bmN0aW9uLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGluc2lkZS4KKworICAgIFNhbXBsZTo6CisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBtb2R1bGUgX3BpY2tsZQorICAgICAgICBjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCisgICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICAgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09ZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICAgb2JqOiAnTycKKyAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGJlIHBpY2tsZWQuCisgICAgICAgICAgICAvCisKKyAgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAgICAgUHlEb2NfU1RSVkFSKF9fcGlja2xlX1BpY2tsZXJfZHVtcF9fZG9jX18sCisgICAgICAgICJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgLi4uCisgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgIF9waWNrbGVfUGlja2xlcl9kdW1wX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKKyAgICAgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09M2JkMzA3NDViZjIwNmE0OGY4YjU3NmExZGEzZDkwZjU1YTBhNDE4N10qLworICAgICAgICB7CisgICAgICAgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBQaWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgKGlzc3VlMzY2NCkuCisgICAgICAgICAgICAgICBEZXZlbG9wZXJzIG9mdGVuIGZvcmdldCB0byBjYWxsIF9faW5pdF9fKCkgaW4gdGhlaXIgc3ViY2xhc3Nlcywgd2hpY2gKKyAgICAgICAgICAgICAgIHdvdWxkIHRyaWdnZXIgYSBzZWdmYXVsdCB3aXRob3V0IHRoaXMgY2hlY2suICovCisgICAgICAgICAgICBpZiAoc2VsZi0+d3JpdGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX0NsZWFyQnVmZmVyKHNlbGYpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgLi4uCisKKzE1LiBSZW1lbWJlciB0aGUgbWFjcm8gd2l0aCB0aGUgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSBmb3IgdGhpcworICAgIGZ1bmN0aW9uPyAgRmluZCB0aGUgZXhpc3RpbmcgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSBmb3IgdGhpcworICAgIGZ1bmN0aW9uIGFuZCByZXBsYWNlIGl0IHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIG1hY3JvLiAgKElmIHRoZSBidWlsdGluCisgICAgaXMgYXQgbW9kdWxlIHNjb3BlLCB0aGlzIHdpbGwgcHJvYmFibHkgYmUgdmVyeSBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGU7CisgICAgaWYgdGhlIGJ1aWx0aW4gaXMgYSBjbGFzcyBtZXRob2QsIHRoaXMgd2lsbCBwcm9iYWJseSBiZSBiZWxvdyBidXQgcmVsYXRpdmVseQorICAgIG5lYXIgdG8gdGhlIGltcGxlbWVudGF0aW9uLikKKworICAgIE5vdGUgdGhhdCB0aGUgYm9keSBvZiB0aGUgbWFjcm8gY29udGFpbnMgYSB0cmFpbGluZyBjb21tYS4gIFNvIHdoZW4geW91CisgICAgcmVwbGFjZSB0aGUgZXhpc3Rpbmcgc3RhdGljIDpjOnR5cGU6YFB5TWV0aG9kRGVmYCBzdHJ1Y3R1cmUgd2l0aCB0aGUgbWFjcm8sCisgICAgKmRvbid0KiBhZGQgYSBjb21tYSB0byB0aGUgZW5kLgorCisgICAgU2FtcGxlOjoKKworICAgICAgICBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIFBpY2tsZXJfbWV0aG9kc1tdID0geworICAgICAgICAgICAgX19QSUNLTEVfUElDS0xFUl9EVU1QX01FVEhPRERFRgorICAgICAgICAgICAgX19QSUNLTEVfUElDS0xFUl9DTEVBUl9NRU1PX01FVEhPRERFRgorICAgICAgICAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCisgICAgICAgIH07CisKKworMTYuIENvbXBpbGUsIHRoZW4gcnVuIHRoZSByZWxldmFudCBwb3J0aW9ucyBvZiB0aGUgcmVncmVzc2lvbi10ZXN0IHN1aXRlLgorICAgIFRoaXMgY2hhbmdlIHNob3VsZCBub3QgaW50cm9kdWNlIGFueSBuZXcgY29tcGlsZS10aW1lIHdhcm5pbmdzIG9yIGVycm9ycywKKyAgICBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vIGV4dGVybmFsbHktdmlzaWJsZSBjaGFuZ2UgdG8gUHl0aG9uJ3MgYmVoYXZpb3IuCisKKyAgICBXZWxsLCBleGNlcHQgZm9yIG9uZSBkaWZmZXJlbmNlOiBgYGluc3BlY3Quc2lnbmF0dXJlKClgYCBydW4gb24geW91ciBmdW5jdGlvbgorICAgIHNob3VsZCBub3cgcHJvdmlkZSBhIHZhbGlkIHNpZ25hdHVyZSEKKworICAgIENvbmdyYXR1bGF0aW9ucywgeW91J3ZlIHBvcnRlZCB5b3VyIGZpcnN0IGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBBcmd1bWVudCBDbGluaWMhCisKK0FkdmFuY2VkIFRvcGljcworPT09PT09PT09PT09PT09CisKK05vdyB0aGF0IHlvdSd2ZSBoYWQgc29tZSBleHBlcmllbmNlIHdvcmtpbmcgd2l0aCBBcmd1bWVudCBDbGluaWMsIGl0J3MgdGltZQorZm9yIHNvbWUgYWR2YW5jZWQgdG9waWNzLgorCisKK1N5bWJvbGljIGRlZmF1bHQgdmFsdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCB2YWx1ZSB5b3UgcHJvdmlkZSBmb3IgYSBwYXJhbWV0ZXIgY2FuJ3QgYmUgYW55IGFyYml0cmFyeQorZXhwcmVzc2lvbi4gIEN1cnJlbnRseSB0aGUgZm9sbG93aW5nIGFyZSBleHBsaWNpdGx5IHN1cHBvcnRlZDoKKworKiBOdW1lcmljIGNvbnN0YW50cyAoaW50ZWdlciBhbmQgZmxvYXQpCisqIFN0cmluZyBjb25zdGFudHMKKyogYGBUcnVlYGAsIGBgRmFsc2VgYCwgYW5kIGBgTm9uZWBgCisqIFNpbXBsZSBzeW1ib2xpYyBjb25zdGFudHMgbGlrZSBgYHN5cy5tYXhzaXplYGAsIHdoaWNoIG11c3QKKyAgc3RhcnQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlCisKK0luIGNhc2UgeW91J3JlIGN1cmlvdXMsIHRoaXMgaXMgaW1wbGVtZW50ZWQgaW4gIGBgZnJvbV9idWlsdGluKClgYAoraW4gYGBMaWIvaW5zcGVjdC5weWBgLgorCisoSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYXkgbmVlZCB0byBnZXQgZXZlbiBtb3JlIGVsYWJvcmF0ZSwKK3RvIGFsbG93IGZ1bGwgZXhwcmVzc2lvbnMgbGlrZSBgYENPTlNUQU5UIC0gMWBgLikKKworCitSZW5hbWluZyB0aGUgQyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBnZW5lcmF0ZWQgYnkgQXJndW1lbnQgQ2xpbmljCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FyZ3VtZW50IENsaW5pYyBhdXRvbWF0aWNhbGx5IG5hbWVzIHRoZSBmdW5jdGlvbnMgaXQgZ2VuZXJhdGVzIGZvciB5b3UuCitPY2Nhc2lvbmFsbHkgdGhpcyBtYXkgY2F1c2UgYSBwcm9ibGVtLCBpZiB0aGUgZ2VuZXJhdGVkIG5hbWUgY29sbGlkZXMgd2l0aAordGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgQyBmdW5jdGlvbi4gIFRoZXJlJ3MgYW4gZWFzeSBzb2x1dGlvbjogb3ZlcnJpZGUgdGhlIG5hbWVzCit1c2VkIGZvciB0aGUgQyBmdW5jdGlvbnMuICBKdXN0IGFkZCB0aGUga2V5d29yZCBgYCJhcyJgYAordG8geW91ciBmdW5jdGlvbiBkZWNsYXJhdGlvbiBsaW5lLCBmb2xsb3dlZCBieSB0aGUgZnVuY3Rpb24gbmFtZSB5b3Ugd2lzaCB0byB1c2UuCitBcmd1bWVudCBDbGluaWMgd2lsbCB1c2UgdGhhdCBmdW5jdGlvbiBuYW1lIGZvciB0aGUgYmFzZSAoZ2VuZXJhdGVkKSBmdW5jdGlvbiwKK3RoZW4gYWRkIGBgIl9pbXBsImBgIHRvIHRoZSBlbmQgYW5kIHVzZSB0aGF0IGZvciB0aGUgbmFtZSBvZiB0aGUgaW1wbCBmdW5jdGlvbi4KKworRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0byByZW5hbWUgdGhlIEMgZnVuY3Rpb24gbmFtZXMgZ2VuZXJhdGVkIGZvcgorYGBwaWNrbGUuUGlja2xlci5kdW1wYGAsIGl0J2QgbG9vayBsaWtlIHRoaXM6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIHBpY2tsZS5QaWNrbGVyLmR1bXAgYXMgcGlja2xlcl9kdW1wZXIKKworICAgIC4uLgorCitUaGUgYmFzZSBmdW5jdGlvbiB3b3VsZCBub3cgYmUgbmFtZWQgYGBwaWNrbGVyX2R1bXBlcigpYGAsCithbmQgdGhlIGltcGwgZnVuY3Rpb24gd291bGQgbm93IGJlIG5hbWVkIGBgcGlja2xlcl9kdW1wZXJfaW1wbCgpYGAuCisKKworU2ltaWxhcmx5LCB5b3UgbWF5IGhhdmUgYSBwcm9ibGVtIHdoZXJlIHlvdSB3YW50IHRvIGdpdmUgYSBwYXJhbWV0ZXIKK2Egc3BlY2lmaWMgUHl0aG9uIG5hbWUsIGJ1dCB0aGF0IG5hbWUgbWF5IGJlIGluY29udmVuaWVudCBpbiBDLiAgQXJndW1lbnQKK0NsaW5pYyBhbGxvd3MgeW91IHRvIGdpdmUgYSBwYXJhbWV0ZXIgZGlmZmVyZW50IG5hbWVzIGluIFB5dGhvbiBhbmQgaW4gQywKK3VzaW5nIHRoZSBzYW1lIGBgImFzImBgIHN5bnRheDo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgIG9iajogb2JqZWN0CisgICAgICAgIGZpbGUgYXMgZmlsZV9vYmo6IG9iamVjdAorICAgICAgICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICAgICAgICAqCisgICAgICAgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorCitIZXJlLCB0aGUgbmFtZSB1c2VkIGluIFB5dGhvbiAoaW4gdGhlIHNpZ25hdHVyZSBhbmQgdGhlIGBga2V5d29yZHNgYAorYXJyYXkpIHdvdWxkIGJlIGBgZmlsZWBgLCBidXQgdGhlIEMgdmFyaWFibGUgd291bGQgYmUgbmFtZWQgYGBmaWxlX29iamBgLgorCitZb3UgY2FuIHVzZSB0aGlzIHRvIHJlbmFtZSB0aGUgYGBzZWxmYGAgcGFyYW1ldGVyIHRvbyEKKworCitDb252ZXJ0aW5nIGZ1bmN0aW9ucyB1c2luZyBQeUFyZ19VbnBhY2tUdXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gY29udmVydCBhIGZ1bmN0aW9uIHBhcnNpbmcgaXRzIGFyZ3VtZW50cyB3aXRoIDpjOmZ1bmM6YFB5QXJnX1VucGFja1R1cGxlYCwKK3NpbXBseSB3cml0ZSBvdXQgYWxsIHRoZSBhcmd1bWVudHMsIHNwZWNpZnlpbmcgZWFjaCBhcyBhbiBgYG9iamVjdGBgLiAgWW91CittYXkgc3BlY2lmeSB0aGUgYGB0eXBlYGAgYXJndW1lbnQgdG8gY2FzdCB0aGUgdHlwZSBhcyBhcHByb3ByaWF0ZS4gIEFsbAorYXJndW1lbnRzIHNob3VsZCBiZSBtYXJrZWQgcG9zaXRpb25hbC1vbmx5IChhZGQgYSBgYC9gYCBvbiBhIGxpbmUgYnkgaXRzZWxmCithZnRlciB0aGUgbGFzdCBhcmd1bWVudCkuCisKK0N1cnJlbnRseSB0aGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCB1c2UgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAsIGJ1dCB0aGlzCit3aWxsIGNoYW5nZSBzb29uLgorCitPcHRpb25hbCBHcm91cHMKKy0tLS0tLS0tLS0tLS0tLQorCitTb21lIGxlZ2FjeSBmdW5jdGlvbnMgaGF2ZSBhIHRyaWNreSBhcHByb2FjaCB0byBwYXJzaW5nIHRoZWlyIGFyZ3VtZW50czoKK3RoZXkgY291bnQgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cywgdGhlbiB1c2UgYSBgYHN3aXRjaGBgIHN0YXRlbWVudAordG8gY2FsbCBvbmUgb2Ygc2V2ZXJhbCBkaWZmZXJlbnQgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgY2FsbHMgZGVwZW5kaW5nIG9uCitob3cgbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGVyZSBhcmUuICAoVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBhY2NlcHQKK2tleXdvcmQtb25seSBhcmd1bWVudHMuKSAgVGhpcyBhcHByb2FjaCB3YXMgdXNlZCB0byBzaW11bGF0ZSBvcHRpb25hbAorYXJndW1lbnRzIGJhY2sgYmVmb3JlIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2Agd2FzIGNyZWF0ZWQuCisKK1doaWxlIGZ1bmN0aW9ucyB1c2luZyB0aGlzIGFwcHJvYWNoIGNhbiBvZnRlbiBiZSBjb252ZXJ0ZWQgdG8KK3VzZSA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgLCBvcHRpb25hbCBhcmd1bWVudHMsIGFuZCBkZWZhdWx0IHZhbHVlcywKK2l0J3Mgbm90IGFsd2F5cyBwb3NzaWJsZS4gIFNvbWUgb2YgdGhlc2UgbGVnYWN5IGZ1bmN0aW9ucyBoYXZlCitiZWhhdmlvcnMgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCBkb2Vzbid0IGRpcmVjdGx5IHN1cHBvcnQuCitUaGUgbW9zdCBvYnZpb3VzIGV4YW1wbGUgaXMgdGhlIGJ1aWx0aW4gZnVuY3Rpb24gYGByYW5nZSgpYGAsIHdoaWNoIGhhcworYW4gb3B0aW9uYWwgYXJndW1lbnQgb24gdGhlICpsZWZ0KiBzaWRlIG9mIGl0cyByZXF1aXJlZCBhcmd1bWVudCEKK0Fub3RoZXIgZXhhbXBsZSBpcyBgYGN1cnNlcy53aW5kb3cuYWRkY2goKWBgLCB3aGljaCBoYXMgYSBncm91cCBvZiB0d28KK2FyZ3VtZW50cyB0aGF0IG11c3QgYWx3YXlzIGJlIHNwZWNpZmllZCB0b2dldGhlci4gIChUaGUgYXJndW1lbnRzIGFyZQorY2FsbGVkIGBgeGBgIGFuZCBgYHlgYDsgaWYgeW91IGNhbGwgdGhlIGZ1bmN0aW9uIHBhc3NpbmcgaW4gYGB4YGAsCit5b3UgbXVzdCBhbHNvIHBhc3MgaW4gYGB5YGAtLWFuZCBpZiB5b3UgZG9uJ3QgcGFzcyBpbiBgYHhgYCB5b3UgbWF5IG5vdAorcGFzcyBpbiBgYHlgYCBlaXRoZXIuKQorCitJbiBhbnkgY2FzZSwgdGhlIGdvYWwgb2YgQXJndW1lbnQgQ2xpbmljIGlzIHRvIHN1cHBvcnQgYXJndW1lbnQgcGFyc2luZworZm9yIGFsbCBleGlzdGluZyBDUHl0aG9uIGJ1aWx0aW5zIHdpdGhvdXQgY2hhbmdpbmcgdGhlaXIgc2VtYW50aWNzLgorVGhlcmVmb3JlIEFyZ3VtZW50IENsaW5pYyBzdXBwb3J0cwordGhpcyBhbHRlcm5hdGUgYXBwcm9hY2ggdG8gcGFyc2luZywgdXNpbmcgd2hhdCBhcmUgY2FsbGVkICpvcHRpb25hbCBncm91cHMqLgorT3B0aW9uYWwgZ3JvdXBzIGFyZSBncm91cHMgb2YgYXJndW1lbnRzIHRoYXQgbXVzdCBhbGwgYmUgcGFzc2VkIGluIHRvZ2V0aGVyLgorVGhleSBjYW4gYmUgdG8gdGhlIGxlZnQgb3IgdGhlIHJpZ2h0IG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHMuICBUaGV5CitjYW4gKm9ubHkqIGJlIHVzZWQgd2l0aCBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycy4KKworLi4gbm90ZTo6IE9wdGlvbmFsIGdyb3VwcyBhcmUgKm9ubHkqIGludGVuZGVkIGZvciB1c2Ugd2hlbiBjb252ZXJ0aW5nCisgICAgICAgICAgZnVuY3Rpb25zIHRoYXQgbWFrZSBtdWx0aXBsZSBjYWxscyB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCEKKyAgICAgICAgICBGdW5jdGlvbnMgdGhhdCB1c2UgKmFueSogb3RoZXIgYXBwcm9hY2ggZm9yIHBhcnNpbmcgYXJndW1lbnRzCisgICAgICAgICAgc2hvdWxkICphbG1vc3QgbmV2ZXIqIGJlIGNvbnZlcnRlZCB0byBBcmd1bWVudCBDbGluaWMgdXNpbmcKKyAgICAgICAgICBvcHRpb25hbCBncm91cHMuICBGdW5jdGlvbnMgdXNpbmcgb3B0aW9uYWwgZ3JvdXBzIGN1cnJlbnRseQorICAgICAgICAgIGNhbm5vdCBoYXZlIGFjY3VyYXRlIHNpZ2FudHVyZXMgaW4gUHl0aG9uLCBiZWNhdXNlIFB5dGhvbiBqdXN0CisgICAgICAgICAgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSBjb25jZXB0LiAgUGxlYXNlIGF2b2lkIHVzaW5nIG9wdGlvbmFsCisgICAgICAgICAgZ3JvdXBzIHdoZXJldmVyIHBvc3NpYmxlLgorCitUbyBzcGVjaWZ5IGFuIG9wdGlvbmFsIGdyb3VwLCBhZGQgYSBgYFtgYCBvbiBhIGxpbmUgYnkgaXRzZWxmIGJlZm9yZQordGhlIHBhcmFtZXRlcnMgeW91IHdpc2ggdG8gZ3JvdXAgdG9nZXRoZXIsIGFuZCBhIGBgXWBgIG9uIGEgbGluZSBieSBpdHNlbGYKK2FmdGVyIHRoZXNlIHBhcmFtZXRlcnMuICBBcyBhbiBleGFtcGxlLCBoZXJlJ3MgaG93IGBgY3Vyc2VzLndpbmRvdy5hZGRjaGBgCit1c2VzIG9wdGlvbmFsIGdyb3VwcyB0byBtYWtlIHRoZSBmaXJzdCB0d28gcGFyYW1ldGVycyBhbmQgdGhlIGxhc3QKK3BhcmFtZXRlciBvcHRpb25hbDo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisKKyAgICBjdXJzZXMud2luZG93LmFkZGNoCisKKyAgICAgICAgWworICAgICAgICB4OiBpbnQKKyAgICAgICAgICBYLWNvb3JkaW5hdGUuCisgICAgICAgIHk6IGludAorICAgICAgICAgIFktY29vcmRpbmF0ZS4KKyAgICAgICAgXQorCisgICAgICAgIGNoOiBvYmplY3QKKyAgICAgICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorCisgICAgICAgIFsKKyAgICAgICAgYXR0cjogbG9uZworICAgICAgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgIF0KKyAgICAgICAgLworCisgICAgLi4uCisKKworTm90ZXM6CisKKyogRm9yIGV2ZXJ5IG9wdGlvbmFsIGdyb3VwLCBvbmUgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSBwYXNzZWQgaW50byB0aGUKKyAgaW1wbCBmdW5jdGlvbiByZXByZXNlbnRpbmcgdGhlIGdyb3VwLiAgVGhlIHBhcmFtZXRlciB3aWxsIGJlIGFuIGludCBuYW1lZAorICBgYGdyb3VwX3tkaXJlY3Rpb259X3tudW1iZXJ9YGAsCisgIHdoZXJlIGBge2RpcmVjdGlvbn1gYCBpcyBlaXRoZXIgYGByaWdodGBgIG9yIGBgbGVmdGBgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBncm91cAorICBpcyBiZWZvcmUgb3IgYWZ0ZXIgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMsIGFuZCBgYHtudW1iZXJ9YGAgaXMgYSBtb25vdG9uaWNhbGx5CisgIGluY3JlYXNpbmcgbnVtYmVyIChzdGFydGluZyBhdCAxKSBpbmRpY2F0aW5nIGhvdyBmYXIgYXdheSB0aGUgZ3JvdXAgaXMgZnJvbQorICB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4gIFdoZW4gdGhlIGltcGwgaXMgY2FsbGVkLCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldAorICB0byB6ZXJvIGlmIHRoaXMgZ3JvdXAgd2FzIHVudXNlZCwgYW5kIHNldCB0byBub24temVybyBpZiB0aGlzIGdyb3VwIHdhcyB1c2VkLgorICAoQnkgdXNlZCBvciB1bnVzZWQsIEkgbWVhbiB3aGV0aGVyIG9yIG5vdCB0aGUgcGFyYW1ldGVycyByZWNlaXZlZCBhcmd1bWVudHMKKyAgaW4gdGhpcyBpbnZvY2F0aW9uLikKKworKiBJZiB0aGVyZSBhcmUgbm8gcmVxdWlyZWQgYXJndW1lbnRzLCB0aGUgb3B0aW9uYWwgZ3JvdXBzIHdpbGwgYmVoYXZlCisgIGFzIGlmIHRoZXkncmUgdG8gdGhlIHJpZ2h0IG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHMuCisKKyogSW4gdGhlIGNhc2Ugb2YgYW1iaWd1aXR5LCB0aGUgYXJndW1lbnQgcGFyc2luZyBjb2RlCisgIGZhdm9ycyBwYXJhbWV0ZXJzIG9uIHRoZSBsZWZ0IChiZWZvcmUgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMpLgorCisqIE9wdGlvbmFsIGdyb3VwcyBjYW4gb25seSBjb250YWluIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLgorCisqIE9wdGlvbmFsIGdyb3VwcyBhcmUgKm9ubHkqIGludGVuZGVkIGZvciBsZWdhY3kgY29kZS4gIFBsZWFzZSBkbyBub3QKKyAgdXNlIG9wdGlvbmFsIGdyb3VwcyBmb3IgbmV3IGNvZGUuCisKKworVXNpbmcgcmVhbCBBcmd1bWVudCBDbGluaWMgY29udmVydGVycywgaW5zdGVhZCBvZiAibGVnYWN5IGNvbnZlcnRlcnMiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gc2F2ZSB0aW1lLCBhbmQgdG8gbWluaW1pemUgaG93IG11Y2ggeW91IG5lZWQgdG8gbGVhcm4KK3RvIGFjaGlldmUgeW91ciBmaXJzdCBwb3J0IHRvIEFyZ3VtZW50IENsaW5pYywgdGhlIHdhbGt0aHJvdWdoIGFib3ZlIHRlbGxzCit5b3UgdG8gdXNlICJsZWdhY3kgY29udmVydGVycyIuICAiTGVnYWN5IGNvbnZlcnRlcnMiIGFyZSBhIGNvbnZlbmllbmNlLAorZGVzaWduZWQgZXhwbGljaXRseSB0byBtYWtlIHBvcnRpbmcgZXhpc3RpbmcgY29kZSB0byBBcmd1bWVudCBDbGluaWMKK2Vhc2llci4gIEFuZCB0byBiZSBjbGVhciwgdGhlaXIgdXNlIGlzIGFjY2VwdGFibGUgd2hlbiBwb3J0aW5nIGNvZGUgZm9yCitQeXRob24gMy40LgorCitIb3dldmVyLCBpbiB0aGUgbG9uZyB0ZXJtIHdlIHByb2JhYmx5IHdhbnQgYWxsIG91ciBibG9ja3MgdG8KK3VzZSBBcmd1bWVudCBDbGluaWMncyByZWFsIHN5bnRheCBmb3IgY29udmVydGVycy4gIFdoeT8gIEEgY291cGxlCityZWFzb25zOgorCisqIFRoZSBwcm9wZXIgY29udmVydGVycyBhcmUgZmFyIGVhc2llciB0byByZWFkIGFuZCBjbGVhcmVyIGluIHRoZWlyIGludGVudC4KKyogVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHVuaXRzIHRoYXQgYXJlIHVuc3VwcG9ydGVkIGFzICJsZWdhY3kgY29udmVydGVycyIsCisgIGJlY2F1c2UgdGhleSByZXF1aXJlIGFyZ3VtZW50cywgYW5kIHRoZSBsZWdhY3kgY29udmVydGVyIHN5bnRheCBkb2Vzbid0CisgIHN1cHBvcnQgc3BlY2lmeWluZyBhcmd1bWVudHMuCisqIEluIHRoZSBmdXR1cmUgd2UgbWF5IGhhdmUgYSBuZXcgYXJndW1lbnQgcGFyc2luZyBsaWJyYXJ5IHRoYXQgaXNuJ3QKKyAgcmVzdHJpY3RlZCB0byB3aGF0IDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIHN1cHBvcnRzOyB0aGlzIGZsZXhpYmlsaXR5CisgIHdvbid0IGJlIGF2YWlsYWJsZSB0byBwYXJhbWV0ZXJzIHVzaW5nIGxlZ2FjeSBjb252ZXJ0ZXJzLgorCitUaGVyZWZvcmUsIGlmIHlvdSBkb24ndCBtaW5kIGEgbGl0dGxlIGV4dHJhIGVmZm9ydCwgcGxlYXNlIHVzZSB0aGUgbm9ybWFsCitjb252ZXJ0ZXJzIGluc3RlYWQgb2YgbGVnYWN5IGNvbnZlcnRlcnMuCisKK0luIGEgbnV0c2hlbGwsIHRoZSBzeW50YXggZm9yIEFyZ3VtZW50IENsaW5pYyAobm9uLWxlZ2FjeSkgY29udmVydGVycworbG9va3MgbGlrZSBhIFB5dGhvbiBmdW5jdGlvbiBjYWxsLiAgSG93ZXZlciwgaWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0Cithcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uIChhbGwgZnVuY3Rpb25zIHRha2UgdGhlaXIgZGVmYXVsdCB2YWx1ZXMpLAoreW91IG1heSBvbWl0IHRoZSBwYXJlbnRoZXNlcy4gIFRodXMgYGBib29sYGAgYW5kIGBgYm9vbCgpYGAgYXJlIGV4YWN0bHkKK3RoZSBzYW1lIGNvbnZlcnRlcnMuCisKK0FsbCBhcmd1bWVudHMgdG8gQXJndW1lbnQgQ2xpbmljIGNvbnZlcnRlcnMgYXJlIGtleXdvcmQtb25seS4KK0FsbCBBcmd1bWVudCBDbGluaWMgY29udmVydGVycyBhY2NlcHQgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisKKyAgYGBjX2RlZmF1bHRgYAorICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciB3aGVuIGRlZmluZWQgaW4gQy4KKyAgICBTcGVjaWZpY2FsbHksIHRoaXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6ZXIgZm9yIHRoZSB2YXJpYWJsZSBkZWNsYXJlZAorICAgIGluIHRoZSAicGFyc2UgZnVuY3Rpb24iLiAgU2VlIDpyZWY6YHRoZSBzZWN0aW9uIG9uIGRlZmF1bHQgdmFsdWVzIDxkZWZhdWx0X3ZhbHVlcz5gCisgICAgZm9yIGhvdyB0byB1c2UgdGhpcy4KKyAgICBTcGVjaWZpZWQgYXMgYSBzdHJpbmcuCisKKyAgYGBhbm5vdGF0aW9uYGAKKyAgICBUaGUgYW5ub3RhdGlvbiB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIuICBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCwKKyAgICBiZWNhdXNlIFBFUCA4IG1hbmRhdGVzIHRoYXQgdGhlIFB5dGhvbiBsaWJyYXJ5IG1heSBub3QgdXNlCisgICAgYW5ub3RhdGlvbnMuCisKK0luIGFkZGl0aW9uLCBzb21lIGNvbnZlcnRlcnMgYWNjZXB0IGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSGVyZSBpcyBhIGxpc3QKK29mIHRoZXNlIGFyZ3VtZW50cywgYWxvbmcgd2l0aCB0aGVpciBtZWFuaW5nczoKKworICBgYGJpdHdpc2VgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciB1bnNpZ25lZCBpbnRlZ2Vycy4gIFRoZSBuYXRpdmUgaW50ZWdlciB2YWx1ZSBvZiB0aGlzCisgICAgUHl0aG9uIGFyZ3VtZW50IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgcGFyYW1ldGVyIHdpdGhvdXQgYW55IHJhbmdlIGNoZWNraW5nLAorICAgIGV2ZW4gZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKworICBgYGNvbnZlcnRlcmBgCisgICAgT25seSBzdXBwb3J0ZWQgYnkgdGhlIGBgb2JqZWN0YGAgY29udmVydGVyLiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEKKyAgICA6cmVmOmBDICJjb252ZXJ0ZXIgZnVuY3Rpb24iIDxvX2FtcGVyc2FuZD5gCisgICAgdG8gdXNlIHRvIGNvbnZlcnQgdGhpcyBvYmplY3QgdG8gYSBuYXRpdmUgdHlwZS4KKworICBgYGVuY29kaW5nYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIFNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdG8gdXNlIHdoZW4gY29udmVydGluZworICAgIHRoaXMgc3RyaW5nIGZyb20gYSBQeXRob24gc3RyIChVbmljb2RlKSB2YWx1ZSBpbnRvIGEgQyBgYGNoYXIgKmBgIHZhbHVlLgorCisgIGBgbGVuZ3RoYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIElmIHRydWUsIHJlcXVlc3RzIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUKKyAgICBzdHJpbmcgYmUgcGFzc2VkIGluIHRvIHRoZSBpbXBsIGZ1bmN0aW9uLCBqdXN0IGFmdGVyIHRoZSBzdHJpbmcgcGFyYW1ldGVyLAorICAgIGluIGEgcGFyYW1ldGVyIG5hbWVkIGBgPHBhcmFtZXRlcl9uYW1lPl9sZW5ndGhgYC4KKworICBgYG51bGxhYmxlYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIElmIHRydWUsIHRoaXMgcGFyYW1ldGVyIG1heSBhbHNvIGJlIHNldCB0bworICAgIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlIHRoZSBDIHBhcmFtZXRlciB3aWxsIGJlIHNldCB0byBgYE5VTExgYC4KKworICBgYHN1YmNsYXNzX29mYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgb2JqZWN0YGAgY29udmVydGVyLiAgUmVxdWlyZXMgdGhhdCB0aGUgUHl0aG9uCisgICAgdmFsdWUgYmUgYSBzdWJjbGFzcyBvZiBhIFB5dGhvbiB0eXBlLCBhcyBleHByZXNzZWQgaW4gQy4KKworICBgYHR5cGVzYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgb2JqZWN0YGAgKGFuZCBgYHNlbGZgYCkgY29udmVydGVyLiAgU3BlY2lmaWVzCisgICAgdGhlIEMgdHlwZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZWNsYXJlIHRoZSB2YXJpYWJsZS4gIERlZmF1bHQgdmFsdWUgaXMKKyAgICBgYCJQeU9iamVjdCAqImBgLgorCisgIGBgdHlwZXNgYAorICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBsaXN0IG9mIFB5dGhvbiB0eXBlcyAoYW5kIHBvc3NpYmx5IHBzZXVkby10eXBlcyk7CisgICAgdGhpcyByZXN0cmljdHMgdGhlIGFsbG93YWJsZSBQeXRob24gYXJndW1lbnQgdG8gdmFsdWVzIG9mIHRoZXNlIHR5cGVzLgorICAgIChUaGlzIGlzIG5vdCBhIGdlbmVyYWwtcHVycG9zZSBmYWNpbGl0eTsgYXMgYSBydWxlIGl0IG9ubHkgc3VwcG9ydHMKKyAgICBzcGVjaWZpYyBsaXN0cyBvZiB0eXBlcyBhcyBzaG93biBpbiB0aGUgbGVnYWN5IGNvbnZlcnRlciB0YWJsZS4pCisKKyAgYGB6ZXJvZXNgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciBzdHJpbmdzLiAgSWYgdHJ1ZSwgZW1iZWRkZWQgTlVMIGJ5dGVzIChgYCdcXDAnYGApIGFyZQorICAgIHBlcm1pdHRlZCBpbnNpZGUgdGhlIHZhbHVlLgorCitQbGVhc2Ugbm90ZSwgbm90IGV2ZXJ5IHBvc3NpYmxlIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB3aWxsIHdvcmsuCitPZnRlbiB0aGVzZSBhcmd1bWVudHMgYXJlIGltcGxlbWVudGVkIGludGVybmFsbHkgYnkgc3BlY2lmaWMgYGBQeUFyZ19QYXJzZVR1cGxlYGAKKypmb3JtYXQgdW5pdHMqLCB3aXRoIHNwZWNpZmljIGJlaGF2aW9yLiAgRm9yIGV4YW1wbGUsIGN1cnJlbnRseSB5b3UgY2Fubm90CitjYWxsIGBgc3RyYGAgYW5kIHBhc3MgaW4gYGB6ZXJvZXM9VHJ1ZWBgIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIGFuIGBgZW5jb2RpbmdgYDsKK2FsdGhvdWdoIGl0J3MgcGVyZmVjdGx5IHJlYXNvbmFibGUgdG8gdGhpbmsgdGhpcyB3b3VsZCB3b3JrLCB0aGVzZSBzZW1hbnRpY3MgZG9uJ3QKK21hcCB0byBhbnkgZXhpc3RpbmcgZm9ybWF0IHVuaXQuICBTbyBBcmd1bWVudCBDbGluaWMgZG9lc24ndCBzdXBwb3J0IGl0LiAgKE9yLCBhdAorbGVhc3QsIG5vdCB5ZXQuKQorCitCZWxvdyBpcyBhIHRhYmxlIHNob3dpbmcgdGhlIG1hcHBpbmcgb2YgbGVnYWN5IGNvbnZlcnRlcnMgaW50byByZWFsCitBcmd1bWVudCBDbGluaWMgY29udmVydGVycy4gIE9uIHRoZSBsZWZ0IGlzIHRoZSBsZWdhY3kgY29udmVydGVyLAorb24gdGhlIHJpZ2h0IGlzIHRoZSB0ZXh0IHlvdSdkIHJlcGxhY2UgaXQgd2l0aC4KKworPT09PT09PT09ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgYCdCJ2BgICAgICBgYHVuc2lnbmVkX2NoYXIoYml0d2lzZT1UcnVlKWBgCitgYCdiJ2BgICAgICBgYHVuc2lnbmVkX2NoYXJgYAorYGAnYydgYCAgICAgYGBjaGFyYGAKK2BgJ0MnYGAgICAgIGBgaW50KHR5cGVzPSdzdHInKWBgCitgYCdkJ2BgICAgICBgYGRvdWJsZWBgCitgYCdEJ2BgICAgICBgYFB5X2NvbXBsZXhgYAorYGAnZXMjJ2BgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCBsZW5ndGg9VHJ1ZSwgemVyb2VzPVRydWUpYGAKK2BgJ2VzJ2BgICAgIGBgc3RyKGVuY29kaW5nPSduYW1lX29mX2VuY29kaW5nJylgYAorYGAnZXQjJ2BgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCB0eXBlcz0nYnl0ZXMgYnl0ZWFycmF5IHN0cicsIGxlbmd0aD1UcnVlKWBgCitgYCdldCdgYCAgICBgYHN0cihlbmNvZGluZz0nbmFtZV9vZl9lbmNvZGluZycsIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgc3RyJylgYAorYGAnZidgYCAgICAgYGBmbG9hdGBgCitgYCdoJ2BgICAgICBgYHNob3J0YGAKK2BgJ0gnYGAgICAgIGBgdW5zaWduZWRfc2hvcnQoYml0d2lzZT1UcnVlKWBgCitgYCdpJ2BgICAgICBgYGludGBgCitgYCdJJ2BgICAgICBgYHVuc2lnbmVkX2ludChiaXR3aXNlPVRydWUpYGAKK2BgJ2snYGAgICAgIGBgdW5zaWduZWRfbG9uZyhiaXR3aXNlPVRydWUpYGAKK2BgJ0snYGAgICAgIGBgdW5zaWduZWRfUFlfTE9OR19MT05HKGJpdHdpc2U9VHJ1ZSlgYAorYGAnTCdgYCAgICAgYGBQWV9MT05HX0xPTkdgYAorYGAnbidgYCAgICAgYGBQeV9zc2l6ZV90YGAKK2BgJ08hJ2BgICAgIGBgb2JqZWN0KHN1YmNsYXNzX29mPScmUHlTb21ldGhpbmdfVHlwZScpYGAKK2BgJ08mJ2BgICAgIGBgb2JqZWN0KGNvbnZlcnRlcj0nbmFtZV9vZl9jX2Z1bmN0aW9uJylgYAorYGAnTydgYCAgICAgYGBvYmplY3RgYAorYGAncCdgYCAgICAgYGBib29sYGAKK2BgJ3MjJ2BgICAgIGBgc3RyKGxlbmd0aD1UcnVlKWBgCitgYCdTJ2BgICAgICBgYFB5Qnl0ZXNPYmplY3RgYAorYGAncydgYCAgICAgYGBzdHJgYAorYGAncyonYGAgICAgYGBQeV9idWZmZXIodHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJylgYAorYGAndSMnYGAgICAgYGBQeV9VTklDT0RFKGxlbmd0aD1UcnVlKWBgCitgYCd1J2BgICAgICBgYFB5X1VOSUNPREVgYAorYGAnVSdgYCAgICAgYGB1bmljb2RlYGAKK2BgJ3cqJ2BgICAgIGBgUHlfYnVmZmVyKHR5cGVzPSdieXRlYXJyYXkgcndidWZmZXInKWBgCitgYCd5IydgYCAgICBgYHN0cih0eXBlcz0nYnl0ZXMnLCBsZW5ndGg9VHJ1ZSlgYAorYGAnWSdgYCAgICAgYGBQeUJ5dGVBcnJheU9iamVjdGBgCitgYCd5J2BgICAgICBgYHN0cih0eXBlcz0nYnl0ZXMnKWBgCitgYCd5KidgYCAgICBgYFB5X2J1ZmZlcmBgCitgYCdaIydgYCAgICBgYFB5X1VOSUNPREUobnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpYGAKK2BgJ3ojJ2BgICAgIGBgc3RyKG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKWBgCitgYCdaJ2BgICAgICBgYFB5X1VOSUNPREUobnVsbGFibGU9VHJ1ZSlgYAorYGAneidgYCAgICAgYGBzdHIobnVsbGFibGU9VHJ1ZSlgYAorYGAneionYGAgICAgYGBQeV9idWZmZXIodHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9VHJ1ZSlgYAorPT09PT09PT09ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FzIGFuIGV4YW1wbGUsIGhlcmUncyBvdXIgc2FtcGxlIGBgcGlja2xlLlBpY2tsZXIuZHVtcGBgIHVzaW5nIHRoZSBwcm9wZXIKK2NvbnZlcnRlcjo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgIG9iajogb2JqZWN0CisgICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGJlIHBpY2tsZWQuCisgICAgICAgIC8KKworICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK0FyZ3VtZW50IENsaW5pYyB3aWxsIHNob3cgeW91IGFsbCB0aGUgY29udmVydGVycyBpdCBoYXMKK2F2YWlsYWJsZS4gIEZvciBlYWNoIGNvbnZlcnRlciBpdCdsbCBzaG93IHlvdSBhbGwgdGhlIHBhcmFtZXRlcnMKK2l0IGFjY2VwdHMsIGFsb25nIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyLgorSnVzdCBydW4gYGBUb29scy9jbGluaWMvY2xpbmljLnB5IC0tY29udmVydGVyc2BgIHRvIHNlZSB0aGUgZnVsbCBsaXN0LgorCitQeV9idWZmZXIKKy0tLS0tLS0tLQorCitXaGVuIHVzaW5nIHRoZSBgYFB5X2J1ZmZlcmBgIGNvbnZlcnRlcgorKG9yIHRoZSBgYCdzKidgYCwgYGAndyonYGAsIGBgJyp5J2BgLCBvciBgYCd6KidgYCBsZWdhY3kgY29udmVydGVycyksCit5b3UgKm11c3QqIG5vdCBjYWxsIDpjOmZ1bmM6YFB5QnVmZmVyX1JlbGVhc2VgIG9uIHRoZSBwcm92aWRlZCBidWZmZXIuCitBcmd1bWVudCBDbGluaWMgZ2VuZXJhdGVzIGNvZGUgdGhhdCBkb2VzIGl0IGZvciB5b3UgKGluIHRoZSBwYXJzaW5nIGZ1bmN0aW9uKS4KKworCisKK0FkdmFuY2VkIGNvbnZlcnRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVtZWJlciB0aG9zZSBmb3JtYXQgdW5pdHMgeW91IHNraXBwZWQgZm9yIHlvdXIgZmlyc3QKK3RpbWUgYmVjYXVzZSB0aGV5IHdlcmUgYWR2YW5jZWQ/ICBIZXJlJ3MgaG93IHRvIGhhbmRsZSB0aG9zZSB0b28uCisKK1RoZSB0cmljayBpcywgYWxsIHRob3NlIGZvcm1hdCB1bml0cyB0YWtlIGFyZ3VtZW50cy0tZWl0aGVyCitjb252ZXJzaW9uIGZ1bmN0aW9ucywgb3IgdHlwZXMsIG9yIHN0cmluZ3Mgc3BlY2lmeWluZyBhbiBlbmNvZGluZy4KKyhCdXQgImxlZ2FjeSBjb252ZXJ0ZXJzIiBkb24ndCBzdXBwb3J0IGFyZ3VtZW50cy4gIFRoYXQncyB3aHkgd2UKK3NraXBwZWQgdGhlbSBmb3IgeW91ciBmaXJzdCBmdW5jdGlvbi4pICBUaGUgYXJndW1lbnQgeW91IHNwZWNpZmllZAordG8gdGhlIGZvcm1hdCB1bml0IGlzIG5vdyBhbiBhcmd1bWVudCB0byB0aGUgY29udmVydGVyOyB0aGlzCithcmd1bWVudCBpcyBlaXRoZXIgYGBjb252ZXJ0ZXJgYCAoZm9yIGBgTyZgYCksIGBgc3ViY2xhc3Nfb2ZgYCAoZm9yIGBgTyFgYCksCitvciBgYGVuY29kaW5nYGAgKGZvciBhbGwgdGhlIGZvcm1hdCB1bml0cyB0aGF0IHN0YXJ0IHdpdGggYGBlYGApLgorCitXaGVuIHVzaW5nIGBgc3ViY2xhc3Nfb2ZgYCwgeW91IG1heSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBvdGhlcgorY3VzdG9tIGFyZ3VtZW50IGZvciBgYG9iamVjdCgpYGA6IGBgdHlwZWBgLCB3aGljaCBsZXRzIHlvdSBzZXQgdGhlIHR5cGUKK2FjdHVhbGx5IHVzZWQgZm9yIHRoZSBwYXJhbWV0ZXIuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZW5zdXJlCit0aGF0IHRoZSBvYmplY3QgaXMgYSBzdWJjbGFzcyBvZiBgYFB5VW5pY29kZV9UeXBlYGAsIHlvdSBwcm9iYWJseSB3YW50Cit0byB1c2UgdGhlIGNvbnZlcnRlciBgYG9iamVjdCh0eXBlPSdQeVVuaWNvZGVPYmplY3QgKicsIHN1YmNsYXNzX29mPScmUHlVbmljb2RlX1R5cGUnKWBgLgorCitPbmUgcG9zc2libGUgcHJvYmxlbSB3aXRoIHVzaW5nIEFyZ3VtZW50IENsaW5pYzogaXQgdGFrZXMgYXdheSBzb21lIHBvc3NpYmxlCitmbGV4aWJpbGl0eSBmb3IgdGhlIGZvcm1hdCB1bml0cyBzdGFydGluZyB3aXRoIGBgZWBgLiAgV2hlbiB3cml0aW5nIGEKK2BgUHlBcmdfUGFyc2VgYCBjYWxsIGJ5IGhhbmQsIHlvdSBjb3VsZCB0aGVvcmV0aWNhbGx5IGRlY2lkZSBhdCBydW50aW1lIHdoYXQKK2VuY29kaW5nIHN0cmluZyB0byBwYXNzIGluIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLiAgIEJ1dCBub3cgdGhpcyBzdHJpbmcgbXVzdAorYmUgaGFyZC1jb2RlZCBhdCBBcmd1bWVudC1DbGluaWMtcHJlcHJvY2Vzc2luZy10aW1lLiAgVGhpcyBsaW1pdGF0aW9uIGlzIGRlbGliZXJhdGU7CitpdCBtYWRlIHN1cHBvcnRpbmcgdGhpcyBmb3JtYXQgdW5pdCBtdWNoIGVhc2llciwgYW5kIG1heSBhbGxvdyBmb3IgZnV0dXJlIG9wdGltaXphdGlvbnMuCitUaGlzIHJlc3RyaWN0aW9uIGRvZXNuJ3Qgc2VlbSB1bnJlYXNvbmFibGU7IENQeXRob24gaXRzZWxmIGFsd2F5cyBwYXNzZXMgaW4gc3RhdGljCitoYXJkLWNvZGVkIGVuY29kaW5nIHN0cmluZ3MgZm9yIHBhcmFtZXRlcnMgd2hvc2UgZm9ybWF0IHVuaXRzIHN0YXJ0IHdpdGggYGBlYGAuCisKKworLi4gX2RlZmF1bHRfdmFsdWVzOgorCitQYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycyBjYW4gYmUgYW55IG9mIGEgbnVtYmVyIG9mIHZhbHVlcy4KK0F0IHRoZWlyIHNpbXBsZXN0LCB0aGV5IGNhbiBiZSBzdHJpbmcsIGludCwgb3IgZmxvYXQgbGl0ZXJhbHM6OgorCisgICAgZm9vOiBzdHIgPSAiYWJjIgorICAgIGJhcjogaW50ID0gMTIzCisgICAgYmF0OiBmbG9hdCA9IDQ1LjYKKworVGhleSBjYW4gYWxzbyB1c2UgYW55IG9mIFB5dGhvbidzIGJ1aWx0LWluIGNvbnN0YW50czo6CisKKyAgICB5ZXA6ICBib29sID0gVHJ1ZQorICAgIG5vcGU6IGJvb2wgPSBGYWxzZQorICAgIG5hZGE6IG9iamVjdCA9IE5vbmUKKworVGhlcmUncyBhbHNvIHNwZWNpYWwgc3VwcG9ydCBmb3IgYSBkZWZhdWx0IHZhbHVlIG9mIGBgTlVMTGBgLCBhbmQKK2ZvciBzaW1wbGUgZXhwcmVzc2lvbnMsIGRvY3VtZW50ZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworCitUaGUgYGBOVUxMYGAgZGVmYXVsdCB2YWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIHN0cmluZyBhbmQgb2JqZWN0IHBhcmFtZXRlcnMsIHlvdSBjYW4gc2V0IHRoZW0gdG8gYGBOb25lYGAgdG8gaW5kaWNhdGUKK3RoYXQgdGhlcmUncyBubyBkZWZhdWx0LiAgSG93ZXZlciwgdGhhdCBtZWFucyB0aGUgQyB2YXJpYWJsZSB3aWxsIGJlCitpbml0aWFsaXplZCB0byBgYFB5X05vbmVgYC4gIEZvciBjb252ZW5pZW5jZSdzIHNha2VzLCB0aGVyZSdzIGEgc3BlY2lhbAordmFsdWUgY2FsbGVkIGBgTlVMTGBgIGZvciBqdXN0IHRoaXMgcmVhc29uOiBmcm9tIFB5dGhvbidzIHBlcnNwZWN0aXZlIGl0CitiZWhhdmVzIGxpa2UgYSBkZWZhdWx0IHZhbHVlIG9mIGBgTm9uZWBgLCBidXQgdGhlIEMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQKK3dpdGggYGBOVUxMYGAuCisKK0V4cHJlc3Npb25zIHNwZWNpZmllZCBhcyBkZWZhdWx0IHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHBhcmFtZXRlciBjYW4gYmUgbW9yZSB0aGFuIGp1c3QgYSBsaXRlcmFsIHZhbHVlLgorSXQgY2FuIGJlIGFuIGVudGlyZSBleHByZXNzaW9uLCB1c2luZyBtYXRoIG9wZXJhdG9ycyBhbmQgbG9va2luZyB1cCBhdHRyaWJ1dGVzCitvbiBvYmplY3RzLiAgSG93ZXZlciwgdGhpcyBzdXBwb3J0IGlzbid0IGV4YWN0bHkgc2ltcGxlLCBiZWNhdXNlIG9mIHNvbWUKK25vbi1vYnZpb3VzIHNlbWFudGljcy4KKworQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICAgIGZvbzogUHlfc3NpemVfdCA9IHN5cy5tYXhzaXplIC0gMQorCitgYHN5cy5tYXhzaXplYGAgY2FuIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiAgVGhlcmVmb3JlCitBcmd1bWVudCBDbGluaWMgY2FuJ3Qgc2ltcGx5IGV2YWx1YXRlIHRoYXQgZXhwcmVzc2lvbiBsb2NhbGx5IGFuZCBoYXJkLWNvZGUgaXQKK2luIEMuICBTbyBpdCBzdG9yZXMgdGhlIGRlZmF1bHQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IHdpbGwgZ2V0IGV2YWx1YXRlZCBhdAorcnVudGltZSwgd2hlbiB0aGUgdXNlciBhc2tzIGZvciB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUuCisKK1doYXQgbmFtZXNwYWNlIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZD8gIEl0J3MgZXZhbHVhdGVkCitpbiB0aGUgY29udGV4dCBvZiB0aGUgbW9kdWxlIHRoZSBidWlsdGluIGNhbWUgZnJvbS4gIFNvLCBpZiB5b3VyIG1vZHVsZSBoYXMgYW4KK2F0dHJpYnV0ZSBjYWxsZWQgImBgbWF4X3dpZGdldHNgYCIsIHlvdSBtYXkgc2ltcGx5IHVzZSBpdDo6CisKKyAgICBmb286IFB5X3NzaXplX3QgPSBtYXhfd2lkZ2V0cworCitJZiB0aGUgc3ltYm9sIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IG1vZHVsZSwgaXQgZmFpbHMgb3ZlciB0byBsb29raW5nIGluCitgYHN5cy5tb2R1bGVzYGAuICBUaGF0J3MgaG93IGl0IGNhbiBmaW5kIGBgc3lzLm1heHNpemVgYCBmb3IgZXhhbXBsZS4gIChTaW5jZSB5b3UKK2Rvbid0IGtub3cgaW4gYWR2YW5jZSB3aGF0IG1vZHVsZXMgdGhlIHVzZXIgd2lsbCBsb2FkIGludG8gdGhlaXIgaW50ZXJwcmV0ZXIsCitpdCdzIGJlc3QgdG8gcmVzdHJpY3QgeW91cnNlbGYgdG8gbW9kdWxlcyB0aGF0IGFyZSBwcmVsb2FkZWQgYnkgUHl0aG9uIGl0c2VsZi4pCisKK0V2YWx1YXRpbmcgZGVmYXVsdCB2YWx1ZXMgb25seSBhdCBydW50aW1lIG1lYW5zIEFyZ3VtZW50IENsaW5pYyBjYW4ndCBjb21wdXRlCit0aGUgY29ycmVjdCBlcXVpdmFsZW50IEMgZGVmYXVsdCB2YWx1ZS4gIFNvIHlvdSBuZWVkIHRvIHRlbGwgaXQgZXhwbGljaXRseS4KK1doZW4geW91IHVzZSBhbiBleHByZXNzaW9uLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIGVxdWl2YWxlbnQgZXhwcmVzc2lvbgoraW4gQywgdXNpbmcgdGhlIGBgY19kZWZhdWx0YGAgcGFyYW1ldGVyIHRvIHRoZSBjb252ZXJ0ZXI6OgorCisgICAgZm9vOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iUFlfU1NJWkVfVF9NQVggLSAxIikgPSBzeXMubWF4c2l6ZSAtIDEKKworQW5vdGhlciBjb21wbGljYXRpb246IEFyZ3VtZW50IENsaW5pYyBjYW4ndCBrbm93IGluIGFkdmFuY2Ugd2hldGhlciBvciBub3QgdGhlCitleHByZXNzaW9uIHlvdSBzdXBwbHkgaXMgdmFsaWQuICBJdCBwYXJzZXMgaXQgdG8gbWFrZSBzdXJlIGl0IGxvb2tzIGxlZ2FsLCBidXQKK2l0IGNhbid0ICphY3R1YWxseSoga25vdy4gIFlvdSBtdXN0IGJlIHZlcnkgY2FyZWZ1bCB3aGVuIHVzaW5nIGV4cHJlc3Npb25zIHRvCitzcGVjaWZ5IHZhbHVlcyB0aGF0IGFyZSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIGF0IHJ1bnRpbWUhCisKK0ZpbmFsbHksIGJlY2F1c2UgZXhwcmVzc2lvbnMgbXVzdCBiZSByZXByZXNlbnRhYmxlIGFzIHN0YXRpYyBDIHZhbHVlcywgdGhlcmUKK2FyZSBtYW55IHJlc3RyaWN0aW9ucyBvbiBsZWdhbCBleHByZXNzaW9ucy4gIEhlcmUncyBhIGxpc3Qgb2YgUHl0aG9uIGZlYXR1cmVzCit5b3UncmUgbm90IHBlcm1pdHRlZCB0byB1c2U6CisKKyogRnVuY3Rpb24gY2FsbHMuCisqIElubGluZSBpZiBzdGF0ZW1lbnRzIChgYDMgaWYgZm9vIGVsc2UgNWBgKS4KKyogQXV0b21hdGljIHNlcXVlbmNlIHVucGFja2luZyAoYGAqWzEsIDIsIDNdYGApLgorKiBMaXN0L3NldC9kaWN0IGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMuCisqIFR1cGxlL2xpc3Qvc2V0L2RpY3QgbGl0ZXJhbHMuCisKKworCitVc2luZyBhIHJldHVybiBjb252ZXJ0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0IHRoZSBpbXBsIGZ1bmN0aW9uIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZXMgZm9yIHlvdSByZXR1cm5zIGBgUHlPYmplY3QgKmBgLgorQnV0IHlvdXIgQyBmdW5jdGlvbiBvZnRlbiBjb21wdXRlcyBzb21lIEMgdHlwZSwgdGhlbiBjb252ZXJ0cyBpdCBpbnRvIHRoZSBgYFB5T2JqZWN0ICpgYAorYXQgdGhlIGxhc3QgbW9tZW50LiAgQXJndW1lbnQgQ2xpbmljIGhhbmRsZXMgY29udmVydGluZyB5b3VyIGlucHV0cyBmcm9tIFB5dGhvbiB0eXBlcworaW50byBuYXRpdmUgQyB0eXBlcy0td2h5IG5vdCBoYXZlIGl0IGNvbnZlcnQgeW91ciByZXR1cm4gdmFsdWUgZnJvbSBhIG5hdGl2ZSBDIHR5cGUKK2ludG8gYSBQeXRob24gdHlwZSB0b28/CisKK1RoYXQncyB3aGF0IGEgInJldHVybiBjb252ZXJ0ZXIiIGRvZXMuICBJdCBjaGFuZ2VzIHlvdXIgaW1wbCBmdW5jdGlvbiB0byByZXR1cm4KK3NvbWUgQyB0eXBlLCB0aGVuIGFkZHMgY29kZSB0byB0aGUgZ2VuZXJhdGVkIChub24taW1wbCkgZnVuY3Rpb24gdG8gaGFuZGxlIGNvbnZlcnRpbmcKK3RoYXQgdmFsdWUgaW50byB0aGUgYXBwcm9wcmlhdGUgYGBQeU9iamVjdCAqYGAuCisKK1RoZSBzeW50YXggZm9yIHJldHVybiBjb252ZXJ0ZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiBwYXJhbWV0ZXIgY29udmVydGVycy4KK1lvdSBzcGVjaWZ5IHRoZSByZXR1cm4gY29udmVydGVyIGxpa2UgaXQgd2FzIGEgcmV0dXJuIGFubm90YXRpb24gb24gdGhlCitmdW5jdGlvbiBpdHNlbGYuICBSZXR1cm4gY29udmVydGVycyBiZWhhdmUgbXVjaCB0aGUgc2FtZSBhcyBwYXJhbWV0ZXIgY29udmVydGVyczsKK3RoZXkgdGFrZSBhcmd1bWVudHMsIHRoZSBhcmd1bWVudHMgYXJlIGFsbCBrZXl3b3JkLW9ubHksIGFuZCBpZiB5b3UncmUgbm90IGNoYW5naW5nCithbnkgb2YgdGhlIGRlZmF1bHQgYXJndW1lbnRzIHlvdSBjYW4gb21pdCB0aGUgcGFyZW50aGVzZXMuCisKKyhJZiB5b3UgdXNlIGJvdGggYGAiYXMiYGAgKmFuZCogYSByZXR1cm4gY29udmVydGVyIGZvciB5b3VyIGZ1bmN0aW9uLAordGhlIGBgImFzImBgIHNob3VsZCBjb21lIGJlZm9yZSB0aGUgcmV0dXJuIGNvbnZlcnRlci4pCisKK1RoZXJlJ3Mgb25lIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uIHdoZW4gdXNpbmcgcmV0dXJuIGNvbnZlcnRlcnM6IGhvdyBkbyB5b3UKK2luZGljYXRlIGFuIGVycm9yIGhhcyBvY2N1cmVkPyAgTm9ybWFsbHksIGEgZnVuY3Rpb24gcmV0dXJucyBhIHZhbGlkIChub24tYGBOVUxMYGApCitwb2ludGVyIGZvciBzdWNjZXNzLCBhbmQgYGBOVUxMYGAgZm9yIGZhaWx1cmUuICBCdXQgaWYgeW91IHVzZSBhbiBpbnRlZ2VyIHJldHVybiBjb252ZXJ0ZXIsCithbGwgaW50ZWdlcnMgYXJlIHZhbGlkLiAgSG93IGNhbiBBcmd1bWVudCBDbGluaWMgZGV0ZWN0IGFuIGVycm9yPyAgSXRzIHNvbHV0aW9uOiBlYWNoIHJldHVybgorY29udmVydGVyIGltcGxpY2l0bHkgbG9va3MgZm9yIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IGluZGljYXRlcyBhbiBlcnJvci4gIElmIHlvdSByZXR1cm4KK3RoYXQgdmFsdWUsIGFuZCBhbiBlcnJvciBoYXMgYmVlbiBzZXQgKGBgUHlFcnJfT2NjdXJyZWQoKWBgIHJldHVybnMgYSB0cnVlCit2YWx1ZSksIHRoZW4gdGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgcHJvcG9nYXRlIHRoZSBlcnJvci4gIE90aGVyd2lzZSBpdCB3aWxsCitlbmNvZGUgdGhlIHZhbHVlIHlvdSByZXR1cm4gbGlrZSBub3JtYWwuCisKK0N1cnJlbnRseSBBcmd1bWVudCBDbGluaWMgc3VwcG9ydHMgb25seSBhIGZldyByZXR1cm4gY29udmVydGVyczo6CisKKyAgICBib29sCisgICAgaW50CisgICAgdW5zaWduZWQgaW50CisgICAgbG9uZworICAgIHVuc2lnbmVkIGludAorICAgIHNpemVfdAorICAgIFB5X3NzaXplX3QKKyAgICBmbG9hdAorICAgIGRvdWJsZQorICAgIERlY29kZUZTRGVmYXVsdAorCitOb25lIG9mIHRoZXNlIHRha2UgcGFyYW1ldGVycy4gIEZvciB0aGUgZmlyc3QgdGhyZWUsIHJldHVybiAtMSB0byBpbmRpY2F0ZQorZXJyb3IuICBGb3IgYGBEZWNvZGVGU0RlZmF1bHRgYCwgdGhlIHJldHVybiB0eXBlIGlzIGBgY2hhciAqYGA7IHJldHVybiBhIE5VTEwKK3BvaW50ZXIgdG8gaW5kaWNhdGUgYW4gZXJyb3IuCisKKyhUaGVyZSdzIGFsc28gYW4gZXhwZXJpbWVudGFsIGBgTm9uZVR5cGVgYCBjb252ZXJ0ZXIsIHdoaWNoIGxldHMgeW91CityZXR1cm4gYGBQeV9Ob25lYGAgb24gc3VjY2VzcyBvciBgYE5VTExgYCBvbiBmYWlsdXJlLCB3aXRob3V0IGhhdmluZwordG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24gYGBQeV9Ob25lYGAuICBJJ20gbm90IHN1cmUgaXQgYWRkcworZW5vdWdoIGNsYXJpdHkgdG8gYmUgd29ydGggdXNpbmcuKQorCitUbyBzZWUgYWxsIHRoZSByZXR1cm4gY29udmVydGVycyBBcmd1bWVudCBDbGluaWMgc3VwcG9ydHMsIGFsb25nIHdpdGgKK3RoZWlyIHBhcmFtZXRlcnMgKGlmIGFueSksCitqdXN0IHJ1biBgYFRvb2xzL2NsaW5pYy9jbGluaWMucHkgLS1jb252ZXJ0ZXJzYGAgZm9yIHRoZSBmdWxsIGxpc3QuCisKKworQ2xvbmluZyBleGlzdGluZyBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IGxvb2sgc2ltaWxhciwgeW91IG1heSBiZSBhYmxlIHRvCit1c2UgQ2xpbmljJ3MgImNsb25lIiBmZWF0dXJlLiAgV2hlbiB5b3UgY2xvbmUgYW4gZXhpc3RpbmcgZnVuY3Rpb24sCit5b3UgcmV1c2U6CisKKyogaXRzIHBhcmFtZXRlcnMsIGluY2x1ZGluZworCisgICogdGhlaXIgbmFtZXMsCisKKyAgKiB0aGVpciBjb252ZXJ0ZXJzLCB3aXRoIGFsbCBwYXJhbWV0ZXJzLAorCisgICogdGhlaXIgZGVmYXVsdCB2YWx1ZXMsCisKKyAgKiB0aGVpciBwZXItcGFyYW1ldGVyIGRvY3N0cmluZ3MsCisKKyAgKiB0aGVpciAqa2luZCogKHdoZXRoZXIgdGhleSdyZSBwb3NpdGlvbmFsIG9ubHksCisgICAgcG9zaXRpb25hbCBvciBrZXl3b3JkLCBvciBrZXl3b3JkIG9ubHkpLCBhbmQKKworKiBpdHMgcmV0dXJuIGNvbnZlcnRlci4KKworVGhlIG9ubHkgdGhpbmcgbm90IGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpcyBpdHMgZG9jc3RyaW5nOwordGhlIHN5bnRheCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBuZXcgZG9jc3RyaW5nLgorCitIZXJlJ3MgdGhlIHN5bnRheCBmb3IgY2xvbmluZyBhIGZ1bmN0aW9uOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBtb2R1bGUuY2xhc3MubmV3X2Z1bmN0aW9uIFthcyBjX2Jhc2VuYW1lXSA9IG1vZHVsZS5jbGFzcy5leGlzdGluZ19mdW5jdGlvbgorCisgICAgRG9jc3RyaW5nIGZvciBuZXdfZnVuY3Rpb24gZ29lcyBoZXJlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworKFRoZSBmdW5jdGlvbnMgY2FuIGJlIGluIGRpZmZlcmVudCBtb2R1bGVzIG9yIGNsYXNzZXMuICBJIHdyb3RlCitgYG1vZHVsZS5jbGFzc2BgIGluIHRoZSBzYW1wbGUganVzdCB0byBpbGx1c3RyYXRlIHRoYXQgeW91IG11c3QKK3VzZSB0aGUgZnVsbCBwYXRoIHRvICpib3RoKiBmdW5jdGlvbnMuKQorCitTb3JyeSwgdGhlcmUncyBubyBzeW50YXggZm9yIHBhcnRpYWxseS1jbG9uaW5nIGEgZnVuY3Rpb24sIG9yIGNsb25pbmcgYSBmdW5jdGlvbgordGhlbiBtb2RpZnlpbmcgaXQuICBDbG9uaW5nIGlzIGFuIGFsbC1vciBub3RoaW5nIHByb3Bvc2l0aW9uLgorCitBbHNvLCB0aGUgZnVuY3Rpb24geW91IGFyZSBjbG9uaW5nIGZyb20gbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseSBkZWZpbmVkCitpbiB0aGUgY3VycmVudCBmaWxlLgorCitDYWxsaW5nIFB5dGhvbiBjb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZXN0IG9mIHRoZSBhZHZhbmNlZCB0b3BpY3MgcmVxdWlyZSB5b3UgdG8gd3JpdGUgUHl0aG9uIGNvZGUKK3doaWNoIGxpdmVzIGluc2lkZSB5b3VyIEMgZmlsZSBhbmQgbW9kaWZpZXMgQXJndW1lbnQgQ2xpbmljJ3MKK3J1bnRpbWUgc3RhdGUuICBUaGlzIGlzIHNpbXBsZTogeW91IHNpbXBseSBkZWZpbmUgYSBQeXRob24gYmxvY2suCisKK0EgUHl0aG9uIGJsb2NrIHVzZXMgZGlmZmVyZW50IGRlbGltaXRlciBsaW5lcyB0aGFuIGFuIEFyZ3VtZW50CitDbGluaWMgZnVuY3Rpb24gYmxvY2suICBJdCBsb29rcyBsaWtlIHRoaXM6OgorCisgICAgLypbcHl0aG9uIGlucHV0XQorICAgICMgcHl0aG9uIGNvZGUgZ29lcyBoZXJlCisgICAgW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitBbGwgdGhlIGNvZGUgaW5zaWRlIHRoZSBQeXRob24gYmxvY2sgaXMgZXhlY3V0ZWQgYXQgdGhlCit0aW1lIGl0J3MgcGFyc2VkLiAgQWxsIHRleHQgd3JpdHRlbiB0byBzdGRvdXQgaW5zaWRlIHRoZSBibG9jaworaXMgcmVkaXJlY3RlZCBpbnRvIHRoZSAib3V0cHV0IiBhZnRlciB0aGUgYmxvY2suCisKK0FzIGFuIGV4YW1wbGUsIGhlcmUncyBhIFB5dGhvbiBibG9jayB0aGF0IGFkZHMgYSBzdGF0aWMgaW50ZWdlcgordmFyaWFibGUgdG8gdGhlIEMgY29kZTo6CisKKyAgICAvKltweXRob24gaW5wdXRdCisgICAgcHJpbnQoJ3N0YXRpYyBpbnQgX19pZ25vcmVkX3VudXNlZF92YXJpYWJsZV9fID0gMDsnKQorICAgIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICBzdGF0aWMgaW50IF9faWdub3JlZF91bnVzZWRfdmFyaWFibGVfXyA9IDA7CisgICAgLypbcHl0aG9uIGNoZWNrc3VtOi4uLl0qLworCisKK1VzaW5nIGEgInNlbGYgY29udmVydGVyIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FyZ3VtZW50IENsaW5pYyBhdXRvbWF0aWNhbGx5IGFkZHMgYSAic2VsZiIgcGFyYW1ldGVyIGZvciB5b3UKK3VzaW5nIGEgZGVmYXVsdCBjb252ZXJ0ZXIuICBJdCBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIGBgdHlwZWBgCitvZiB0aGlzIHBhcmFtZXRlciB0byB0aGUgInBvaW50ZXIgdG8gYW4gaW5zdGFuY2UiIHlvdSBzcGVjaWZpZWQKK3doZW4geW91IGRlY2xhcmVkIHRoZSB0eXBlLiAgSG93ZXZlciwgeW91IGNhbiBvdmVycmlkZQorQXJndW1lbnQgQ2xpbmljJ3MgY29udmVydGVyIGFuZCBzcGVjaWZ5IG9uZSB5b3Vyc2VsZi4KK0p1c3QgYWRkIHlvdXIgb3duIGBgc2VsZmBgIHBhcmFtZXRlciBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIGluIGEKK2Jsb2NrLCBhbmQgZW5zdXJlIHRoYXQgaXRzIGNvbnZlcnRlciBpcyBhbiBpbnN0YW5jZSBvZgorYGBzZWxmX2NvbnZlcnRlcmBgIG9yIGEgc3ViY2xhc3MgdGhlcmVvZi4KKworV2hhdCdzIHRoZSBwb2ludD8gIFRoaXMgbGV0cyB5b3Ugb3ZlcnJpZGUgdGhlIHR5cGUgb2YgYGBzZWxmYGAsCitvciBnaXZlIGl0IGEgZGlmZmVyZW50IGRlZmF1bHQgbmFtZS4KKworSG93IGRvIHlvdSBzcGVjaWZ5IHRoZSBjdXN0b20gdHlwZSB5b3Ugd2FudCB0byBjYXN0IGBgc2VsZmBgIHRvPworSWYgeW91IG9ubHkgaGF2ZSBvbmUgb3IgdHdvIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIHR5cGUgZm9yIGBgc2VsZmBgLAoreW91IGNhbiBkaXJlY3RseSB1c2UgQXJndW1lbnQgQ2xpbmljJ3MgZXhpc3RpbmcgYGBzZWxmYGAgY29udmVydGVyLAorcGFzc2luZyBpbiB0aGUgdHlwZSB5b3Ugd2FudCB0byB1c2UgYXMgdGhlIGBgdHlwZWBgIHBhcmFtZXRlcjo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisKKyAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICBzZWxmOiBzZWxmKHR5cGU9IlBpY2tsZXJPYmplY3QgKiIpCisgICAgICBvYmo6IG9iamVjdAorICAgICAgLworCisgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK09uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UgaGF2ZSBhIGxvdCBvZiBmdW5jdGlvbnMgdGhhdCB3aWxsIHVzZSB0aGUgc2FtZQordHlwZSBmb3IgYGBzZWxmYGAsIGl0J3MgYmVzdCB0byBjcmVhdGUgeW91ciBvd24gY29udmVydGVyLCBzdWJjbGFzc2luZworYGBzZWxmX2NvbnZlcnRlcmBgIGJ1dCBvdmVyd3JpdGluZyB0aGUgYGB0eXBlYGAgbWVtYmVyOjoKKworICAgIC8qW3B5dGhvbiBpbnB1dF0KKyAgICBjbGFzcyBQaWNrbGVyT2JqZWN0X2NvbnZlcnRlcihzZWxmX2NvbnZlcnRlcik6CisgICAgICAgIHR5cGUgPSAiUGlja2xlck9iamVjdCAqIgorICAgIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKworICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgIHNlbGY6IFBpY2tsZXJPYmplY3QKKyAgICAgIG9iajogb2JqZWN0CisgICAgICAvCisKKyAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgb3BlbiBmaWxlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworCisKK1dyaXRpbmcgYSBjdXN0b20gY29udmVydGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB3ZSBoaW50ZWQgYXQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uLi4geW91IGNhbiB3cml0ZSB5b3VyIG93biBjb252ZXJ0ZXJzIQorQSBjb252ZXJ0ZXIgaXMgc2ltcGx5IGEgUHl0aG9uIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBgYENDb252ZXJ0ZXJgYC4KK1RoZSBtYWluIHB1cnBvc2Ugb2YgYSBjdXN0b20gY29udmVydGVyIGlzIGlmIHlvdSBoYXZlIGEgcGFyYW1ldGVyIHVzaW5nCit0aGUgYGBPJmBgIGZvcm1hdCB1bml0LS1wYXJzaW5nIHRoaXMgcGFyYW1ldGVyIG1lYW5zIGNhbGxpbmcKK2EgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgImNvbnZlcnRlciBmdW5jdGlvbiIuCisKK1lvdXIgY29udmVydGVyIGNsYXNzIHNob3VsZCBiZSBuYW1lZCBgYCpzb21ldGhpbmcqX2NvbnZlcnRlcmBgLgorSWYgdGhlIG5hbWUgZm9sbG93cyB0aGlzIGNvbnZlbnRpb24sIHRoZW4geW91ciBjb252ZXJ0ZXIgY2xhc3MKK3dpbGwgYmUgYXV0b21hdGljYWxseSByZWdpc3RlcmVkIHdpdGggQXJndW1lbnQgQ2xpbmljOyBpdHMgbmFtZQord2lsbCBiZSB0aGUgbmFtZSBvZiB5b3VyIGNsYXNzIHdpdGggdGhlIGBgX2NvbnZlcnRlcmBgIHN1ZmZpeAorc3RyaXBwZWQgb2ZmLiAgKFRoaXMgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBtZXRhY2xhc3MuKQorCitZb3Ugc2hvdWxkbid0IHN1YmNsYXNzIGBgQ0NvbnZlcnRlci5fX2luaXRfX2BgLiAgSW5zdGVhZCwgeW91IHNob3VsZAord3JpdGUgYSBgYGNvbnZlcnRlcl9pbml0KClgYCBmdW5jdGlvbi4gIGBgY29udmVydGVyX2luaXQoKWBgCithbHdheXMgYWNjZXB0cyBhIGBgc2VsZmBgIHBhcmFtZXRlcjsgYWZ0ZXIgdGhhdCwgYWxsIGFkZGl0aW9uYWwKK3BhcmFtZXRlcnMgKm11c3QqIGJlIGtleXdvcmQtb25seS4gIEFueSBhcmd1bWVudHMgcGFzc2VkIGluIHRvCit0aGUgY29udmVydGVyIGluIEFyZ3VtZW50IENsaW5pYyB3aWxsIGJlIHBhc3NlZCBhbG9uZyB0byB5b3VyCitgYGNvbnZlcnRlcl9pbml0KClgYC4KKworVGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBtZW1iZXJzIG9mIGBgQ0NvbnZlcnRlcmBgIHlvdSBtYXkgd2lzaAordG8gc3BlY2lmeSBpbiB5b3VyIHN1YmNsYXNzLiAgSGVyZSdzIHRoZSBjdXJyZW50IGxpc3Q6CisKK2BgdHlwZWBgCisgICAgVGhlIEMgdHlwZSB0byB1c2UgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgYGB0eXBlYGAgc2hvdWxkIGJlIGEgUHl0aG9uIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSB0eXBlLCBlLmcuIGBgaW50YGAuCisgICAgSWYgdGhpcyBpcyBhIHBvaW50ZXIgdHlwZSwgdGhlIHR5cGUgc3RyaW5nIHNob3VsZCBlbmQgd2l0aCBgYCcgKidgYC4KKworYGBkZWZhdWx0YGAKKyAgICBUaGUgUHl0aG9uIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLCBhcyBhIFB5dGhvbiB2YWx1ZS4KKyAgICBPciB0aGUgbWFnaWMgdmFsdWUgYGB1bnNwZWNpZmllZGBgIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisKK2BgcHlfZGVmYXVsdGBgCisgICAgYGBkZWZhdWx0YGAgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBQeXRob24gY29kZSwKKyAgICBhcyBhIHN0cmluZy4KKyAgICBPciBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorCitgYGNfZGVmYXVsdGBgCisgICAgYGBkZWZhdWx0YGAgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBDIGNvZGUsCisgICAgYXMgYSBzdHJpbmcuCisgICAgT3IgYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKworYGBjX2lnbm9yZWRfZGVmYXVsdGBgCisgICAgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBDIHZhcmlhYmxlIHdoZW4KKyAgICB0aGVyZSBpcyBubyBkZWZhdWx0LCBidXQgbm90IHNwZWNpZnlpbmcgYSBkZWZhdWx0IG1heQorICAgIHJlc3VsdCBpbiBhbiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSIgd2FybmluZy4gIFRoaXMgY2FuCisgICAgZWFzaWx5IGhhcHBlbiB3aGVuIHVzaW5nIG9wdGlvbiBncm91cHMtLWFsdGhvdWdoCisgICAgcHJvcGVybHktd3JpdHRlbiBjb2RlIHdpbGwgbmV2ZXIgYWN0dWFsbHkgdXNlIHRoaXMgdmFsdWUsCisgICAgdGhlIHZhcmlhYmxlIGRvZXMgZ2V0IHBhc3NlZCBpbiB0byB0aGUgaW1wbCwgYW5kIHRoZQorICAgIEMgY29tcGlsZXIgd2lsbCBjb21wbGFpbiBhYm91dCB0aGUgInVzZSIgb2YgdGhlCisgICAgdW5pbml0aWFsaXplZCB2YWx1ZS4gIFRoaXMgdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBhCisgICAgbm9uLWVtcHR5IHN0cmluZy4KKworYGBjb252ZXJ0ZXJgYAorICAgIFRoZSBuYW1lIG9mIHRoZSBDIGNvbnZlcnRlciBmdW5jdGlvbiwgYXMgYSBzdHJpbmcuCisKK2BgaW1wbF9ieV9yZWZlcmVuY2VgYAorICAgIEEgYm9vbGVhbiB2YWx1ZS4gIElmIHRydWUsCisgICAgQXJndW1lbnQgQ2xpbmljIHdpbGwgYWRkIGEgYGAmYGAgaW4gZnJvbnQgb2YgdGhlIG5hbWUgb2YKKyAgICB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gdGhlIGltcGwgZnVuY3Rpb24uCisKK2BgcGFyc2VfYnlfcmVmZXJlbmNlYGAKKyAgICBBIGJvb2xlYW4gdmFsdWUuICBJZiB0cnVlLAorICAgIEFyZ3VtZW50IENsaW5pYyB3aWxsIGFkZCBhIGBgJmBgIGluIGZyb250IG9mIHRoZSBuYW1lIG9mCisgICAgdGhlIHZhcmlhYmxlIHdoZW4gcGFzc2luZyBpdCBpbnRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLgorCisKK0hlcmUncyB0aGUgc2ltcGxlc3QgZXhhbXBsZSBvZiBhIGN1c3RvbSBjb252ZXJ0ZXIsIGZyb20gYGBNb2R1bGVzL3psaWJtb2R1bGUuY2BgOjoKKworICAgIC8qW3B5dGhvbiBpbnB1dF0KKworICAgIGNsYXNzIHVpbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgICAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKKyAgICAgICAgY29udmVydGVyID0gJ3VpbnRfY29udmVydGVyJworCisgICAgW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgIC8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPWRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworVGhpcyBibG9jayBhZGRzIGEgY29udmVydGVyIHRvIEFyZ3VtZW50IENsaW5pYyBuYW1lZCBgYHVpbnRgYC4gIFBhcmFtZXRlcnMKK2RlY2xhcmVkIGFzIGBgdWludGBgIHdpbGwgYmUgZGVjbGFyZWQgYXMgdHlwZSBgYHVuc2lnbmVkIGludGBgLCBhbmQgd2lsbAorYmUgcGFyc2VkIGJ5IHRoZSBgYCdPJidgYCBmb3JtYXQgdW5pdCwgd2hpY2ggd2lsbCBjYWxsIHRoZSBgYHVpbnRfY29udmVydGVyYGAKK2NvbnZlcnRlciBmdW5jdGlvbi4KK2BgdWludGBgIHZhcmlhYmxlcyBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMuCisKK01vcmUgc29waGlzdGljYXRlZCBjdXN0b20gY29udmVydGVycyBjYW4gaW5zZXJ0IGN1c3RvbSBDIGNvZGUgdG8KK2hhbmRsZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cC4KK1lvdSBjYW4gc2VlIG1vcmUgZXhhbXBsZXMgb2YgY3VzdG9tIGNvbnZlcnRlcnMgaW4gdGhlIENQeXRob24KK3NvdXJjZSB0cmVlOyBncmVwIHRoZSBDIGZpbGVzIGZvciB0aGUgc3RyaW5nIGBgQ0NvbnZlcnRlcmBgLgorCitXcml0aW5nIGEgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXcml0aW5nIGEgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXIgaXMgbXVjaCBsaWtlIHdyaXRpbmcKK2EgY3VzdG9tIGNvbnZlcnRlci4gIEV4Y2VwdCBpdCdzIHNvbWV3aGF0IHNpbXBsZXIsIGJlY2F1c2UgcmV0dXJuCitjb252ZXJ0ZXJzIGFyZSB0aGVtc2VsdmVzIG11Y2ggc2ltcGxlci4KKworUmV0dXJuIGNvbnZlcnRlcnMgbXVzdCBzdWJjbGFzcyBgYENSZXR1cm5Db252ZXJ0ZXJgYC4KK1RoZXJlIGFyZSBubyBleGFtcGxlcyB5ZXQgb2YgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXJzLAorYmVjYXVzZSB0aGV5IGFyZSBub3Qgd2lkZWx5IHVzZWQgeWV0LiAgSWYgeW91IHdpc2ggdG8KK3dyaXRlIHlvdXIgb3duIHJldHVybiBjb252ZXJ0ZXIsIHBsZWFzZSByZWFkIGBgVG9vbHMvY2xpbmljL2NsaW5pYy5weWBgLAorc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYENSZXR1cm5Db252ZXJ0ZXJgYCBhbmQKK2FsbCBpdHMgc3ViY2xhc3Nlcy4KKworTUVUSF9PIGFuZCBNRVRIX05PQVJHUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBjb252ZXJ0IGEgZnVuY3Rpb24gdXNpbmcgYGBNRVRIX09gYCwgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbidzCitzaW5nbGUgYXJndW1lbnQgaXMgdXNpbmcgdGhlIGBgb2JqZWN0YGAgY29udmVydGVyLCBhbmQgbWFyayB0aGUKK2FyZ3VtZW50cyBhcyBwb3NpdGlvbmFsLW9ubHk6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIG1ldGhfb19zYW1wbGUKKworICAgICAgICAgYXJndW1lbnQ6IG9iamVjdAorICAgICAgICAgLworICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworCitUbyBjb252ZXJ0IGEgZnVuY3Rpb24gdXNpbmcgYGBNRVRIX05PQVJHU2BgLCBqdXN0IGRvbid0IHNwZWNpZnkKK2FueSBhcmd1bWVudHMuCisKK1lvdSBjYW4gc3RpbGwgdXNlIGEgc2VsZiBjb252ZXJ0ZXIsIGEgcmV0dXJuIGNvbnZlcnRlciwgYW5kIHNwZWNpZnkKK2EgYGB0eXBlYGAgYXJndW1lbnQgdG8gdGhlIG9iamVjdCBjb252ZXJ0ZXIgZm9yIGBgTUVUSF9PYGAuCisKK3RwX25ldyBhbmQgdHBfaW5pdCBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBjb252ZXJ0IGBgdHBfbmV3YGAgYW5kIGBgdHBfaW5pdGBgIGZ1bmN0aW9ucy4gIEp1c3QgbmFtZQordGhlbSBgYF9fbmV3X19gYCBvciBgYF9faW5pdF9fYGAgYXMgYXBwcm9wcmlhdGUuICBOb3RlczoKKworKiBUaGUgZnVuY3Rpb24gbmFtZSBnZW5lcmF0ZWQgZm9yIGBgX19uZXdfX2BgIGRvZXNuJ3QgZW5kIGluIGBgX19uZXdfX2BgCisgIGxpa2UgaXQgd291bGQgYnkgZGVmYXVsdC4gIEl0J3MganVzdCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MsIGNvbnZlcnRlZAorICBpbnRvIGEgdmFsaWQgQyBpZGVudGlmaWVyLgorCisqIE5vIGBgUHlNZXRob2REZWZgYCBgYCNkZWZpbmVgYCBpcyBnZW5lcmF0ZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKworKiBgYF9faW5pdF9fYGAgZnVuY3Rpb25zIHJldHVybiBgYGludGBgLCBub3QgYGBQeU9iamVjdCAqYGAuCisKKyogVXNlIHRoZSBkb2NzdHJpbmcgYXMgdGhlIGNsYXNzIGRvY3N0cmluZy4KKworKiBBbHRob3VnaCBgYF9fbmV3X19gYCBhbmQgYGBfX2luaXRfX2BgIGZ1bmN0aW9ucyBtdXN0IGFsd2F5cworICBhY2NlcHQgYm90aCB0aGUgYGBhcmdzYGAgYW5kIGBga3dhcmdzYGAgb2JqZWN0cywgd2hlbiBjb252ZXJ0aW5nCisgIHlvdSBtYXkgc3BlY2lmeSBhbnkgc2lnbmF0dXJlIGZvciB0aGVzZSBmdW5jdGlvbnMgdGhhdCB5b3UgbGlrZS4KKyAgKElmIHlvdXIgZnVuY3Rpb24gZG9lc24ndCBzdXBwb3J0IGtleXdvcmRzLCB0aGUgcGFyc2luZyBmdW5jdGlvbgorICBnZW5lcmF0ZWQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXQgcmVjZWl2ZXMgYW55LikKKworQ2hhbmdpbmcgYW5kIHJlZGlyZWN0aW5nIENsaW5pYydzIG91dHB1dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBjYW4gYmUgaW5jb252ZW5pZW50IHRvIGhhdmUgQ2xpbmljJ3Mgb3V0cHV0IGludGVyc3BlcnNlZCB3aXRoCit5b3VyIGNvbnZlbnRpb25hbCBoYW5kLWVkaXRlZCBDIGNvZGUuICBMdWNraWx5LCBDbGluaWMgaXMgY29uZmlndXJhYmxlOgoreW91IGNhbiBidWZmZXIgdXAgaXRzIG91dHB1dCBmb3IgcHJpbnRpbmcgbGF0ZXIgKG9yIGVhcmxpZXIhKSwgb3Igd3JpdGUKK2l0cyBvdXRwdXQgdG8gYSBzZXBhcmF0ZSBmaWxlLiAgWW91IGNhbiBhbHNvIGFkZCBhIHByZWZpeCBvciBzdWZmaXggdG8KK2V2ZXJ5IGxpbmUgb2YgQ2xpbmljJ3MgZ2VuZXJhdGVkIG91dHB1dC4KKworV2hpbGUgY2hhbmdpbmcgQ2xpbmljJ3Mgb3V0cHV0IGluIHRoaXMgbWFubmVyIGNhbiBiZSBhIGJvb24gdG8gcmVhZGFiaWxpdHksCitpdCBtYXkgcmVzdWx0IGluIENsaW5pYyBjb2RlIHVzaW5nIHR5cGVzIGJlZm9yZSB0aGV5IGFyZSBkZWZpbmVkLCBvcgoreW91ciBjb2RlIGF0dGVtcHRpbmcgdG8gdXNlIENsaW5pYy1nZW5lcmF0ZWQgY29kZSBiZWZpcmUgaXQgaXMgZGVmaW5lZC4KK1RoZXNlIHByb2JsZW1zIGNhbiBiZSBlYXNpbHkgc29sdmVkIGJ5IHJlYXJyYW5naW5nIHRoZSBkZWNsYXJhdGlvbnMgaW4geW91ciBmaWxlLAorb3IgbW92aW5nIHdoZXJlIENsaW5pYydzIGdlbmVyYXRlZCBjb2RlIGdvZXMuICAoVGhpcyBpcyB3aHkgdGhlIGRlZmF1bHQgYmVoYXZpb3IKK29mIENsaW5pYyBpcyB0byBvdXRwdXQgZXZlcnl0aGluZyBpbnRvIHRoZSBjdXJyZW50IGJsb2NrOyB3aGlsZSBtYW55IHBlb3BsZQorY29uc2lkZXIgdGhpcyBoYW1wZXJzIHJlYWRhYmlsaXR5LCBpdCB3aWxsIG5ldmVyIHJlcXVpcmUgcmVhcnJhbmdpbmcgeW91cgorY29kZSB0byBmaXggZGVmaW5pdGlvbi1iZWZvcmUtdXNlIHByb2JsZW1zLikKKworTGV0J3Mgc3RhcnQgd2l0aCBkZWZpbmluZyBzb21lIHRlcm1pbm9sb2d5OgorCisqZmllbGQqCisgIEEgZmllbGQsIGluIHRoaXMgY29udGV4dCwgaXMgYSBzdWJzZWN0aW9uIG9mIENsaW5pYydzIG91dHB1dC4KKyAgRm9yIGV4YW1wbGUsIHRoZSBgYCNkZWZpbmVgYCBmb3IgdGhlIGBgUHlNZXRob2REZWZgYCBzdHJ1Y3R1cmUKKyAgaXMgYSBmaWVsZCwgY2FsbGVkIGBgbWV0aG9kZGVmX2RlZmluZWBgLiAgQ2xpbmljIGhhcyBzZXZlbgorICBkaWZmZXJlbnQgZmllbGRzIGl0IGNhbiBvdXRwdXQgcGVyIGZ1bmN0aW9uIGRlZmluaXRpb246OgorCisgICAgICBkb2NzdHJpbmdfcHJvdG90eXBlCisgICAgICBkb2NzdHJpbmdfZGVmaW5pdGlvbgorICAgICAgbWV0aG9kZGVmX2RlZmluZQorICAgICAgaW1wbF9wcm90b3R5cGUKKyAgICAgIHBhcnNlcl9wcm90b3R5cGUKKyAgICAgIHBhcnNlcl9kZWZpbml0aW9uCisgICAgICBpbXBsX2RlZmluaXRpb24KKworICBBbGwgdGhlIG5hbWVzIGFyZSBvZiB0aGUgZm9ybSBgYCI8YT5fPGI+ImBgLAorICB3aGVyZSBgYCI8YT4iYGAgaXMgdGhlIHNlbWFudGljIG9iamVjdCByZXByZXNlbnRlZCAodGhlIHBhcnNpbmcgZnVuY3Rpb24sCisgIHRoZSBpbXBsIGZ1bmN0aW9uLCB0aGUgZG9jc3RyaW5nLCBvciB0aGUgbWV0aG9kZGVmIHN0cnVjdHVyZSkgYW5kIGBgIjxiPiJgYAorICByZXByZXNlbnRzIHdoYXQga2luZCBvZiBzdGF0ZW1lbnQgdGhlIGZpZWxkIGlzLiAgRmllbGQgbmFtZXMgdGhhdCBlbmQgaW4KKyAgYGAiX3Byb3RvdHlwZSJgYAorICByZXByZXNlbnQgZm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgdGhhdCB0aGluZywgd2l0aG91dCB0aGUgYWN0dWFsIGJvZHkvZGF0YQorICBvZiB0aGUgdGhpbmc7IGZpZWxkIG5hbWVzIHRoYXQgZW5kIGluIGBgIl9kZWZpbml0aW9uImBgIHJlcHJlc2VudCB0aGUgYWN0dWFsCisgIGRlZmluaXRpb24gb2YgdGhlIHRoaW5nLCB3aXRoIHRoZSBib2R5L2RhdGEgb2YgdGhlIHRoaW5nLiAgKGBgIm1ldGhvZGRlZiJgYAorICBpcyBzcGVjaWFsLCBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0IGVuZHMgd2l0aCBgYCJfZGVmaW5lImBgLCByZXByZXNlbnRpbmcgdGhhdAorICBpdCdzIGEgcHJlcHJvY2Vzc29yICNkZWZpbmUuKQorCisqZGVzdGluYXRpb24qCisgIEEgZGVzdGluYXRpb24gaXMgYSBwbGFjZSBDbGluaWMgY2FuIHdyaXRlIG91dHB1dCB0by4gIFRoZXJlIGFyZQorICBmaXZlIGJ1aWx0LWluIGRlc3RpbmF0aW9uczoKKworICBgYGJsb2NrYGAKKyAgICBUaGUgZGVmYXVsdCBkZXN0aW5hdGlvbjogcHJpbnRlZCBpbiB0aGUgb3V0cHV0IHNlY3Rpb24gb2YKKyAgICB0aGUgY3VycmVudCBDbGluaWMgYmxvY2suCisKKyAgYGBidWZmZXJgYAorICAgIEEgdGV4dCBidWZmZXIgd2hlcmUgeW91IGNhbiBzYXZlIHRleHQgZm9yIGxhdGVyLiAgVGV4dCBzZW50CisgICAgaGVyZSBpcyBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIGFueSBleHNpdGluZyB0ZXh0LiAgSXQncyBhbgorICAgIGVycm9yIHRvIGhhdmUgYW55IHRleHQgbGVmdCBpbiB0aGUgYnVmZmVyIHdoZW4gQ2xpbmljIGZpbmlzaGVzCisgICAgcHJvY2Vzc2luZyBhIGZpbGUuCisKKyAgYGBmaWxlYGAKKyAgICBBIHNlcGFyYXRlICJjbGluaWMgZmlsZSIgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBDbGluaWMuCisgICAgVGhlIGZpbGVuYW1lIGNob3NlbiBmb3IgdGhlIGZpbGUgaXMgYGB7YmFzZW5hbWV9LmNsaW5pY3tleHRlbnNpb259YGAsCisgICAgd2hlcmUgYGBiYXNlbmFtZWBgIGFuZCBgYGV4dGVuc2lvbmBgIHdlcmUgYXNzaWduZWQgdGhlIG91dHB1dAorICAgIGZyb20gYGBvcy5wYXRoLnNwbGl0ZXh0KClgYCBydW4gb24gdGhlIGN1cnJlbnQgZmlsZS4gIChFeGFtcGxlOgorICAgIHRoZSBgYGZpbGVgYCBkZXN0aW5hdGlvbiBmb3IgYGBfcGlja2xlLmNgYCB3b3VsZCBiZSB3cml0dGVuIHRvCisgICAgYGBfcGlja2xlLmNsaW5pYy5jYGAuKQorCisgICAgKipJbXBvcnRhbnQ6IFdoZW4gdXNpbmcgYSoqIGBgZmlsZWBgICoqZGVzdGluYXRpb24sIHlvdSoqCisgICAgKm11c3QgY2hlY2sgaW4qICoqdGhlIGdlbmVyYXRlZCBmaWxlISoqCisKKyAgYGB0d28tcGFzc2BgCisgICAgQSBidWZmZXIgbGlrZSBgYGJ1ZmZlcmBgLiAgSG93ZXZlciwgYSB0d28tcGFzcyBidWZmZXIgY2FuIG9ubHkKKyAgICBiZSB3cml0dGVuIG9uY2UsIGFuZCBpdCBwcmludHMgb3V0IGFsbCB0ZXh0IHNlbnQgdG8gaXQgZHVyaW5nCisgICAgYWxsIG9mIHByb2Nlc3NpbmcsIGV2ZW4gZnJvbSBDbGluaWMgYmxvY2tzICphZnRlciogdGhlCisKKyAgYGBzdXBwcmVzc2BgCisgICAgVGhlIHRleHQgaXMgc3VwcHJlc3NlZC0tdGhyb3duIGF3YXkuCisKKworQ2xpbmljIGRlZmluZXMgZml2ZSBuZXcgZGlyZWN0aXZlcyB0aGF0IGxldCB5b3UgcmVjb25maWd1cmUgaXRzIG91dHB1dC4KKworVGhlIGZpcnN0IG5ldyBkaXJlY3RpdmUgaXMgYGBkdW1wYGA6OgorCisgICBkdW1wIDxkZXN0aW5hdGlvbj4KKworVGhpcyBkdW1wcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgbmFtZWQgZGVzdGluYXRpb24gaW50byB0aGUgb3V0cHV0IG9mCit0aGUgY3VycmVudCBibG9jaywgYW5kIGVtcHRpZXMgaXQuICBUaGlzIG9ubHkgd29ya3Mgd2l0aCBgYGJ1ZmZlcmBgIGFuZAorYGB0d28tcGFzc2BgIGRlc3RpbmF0aW9ucy4KKworVGhlIHNlY29uZCBuZXcgZGlyZWN0aXZlIGlzIGBgb3V0cHV0YGAuICBUaGUgbW9zdCBiYXNpYyBmb3JtIG9mIGBgb3V0cHV0YGAKK2lzIGxpa2UgdGhpczo6CisKKyAgICBvdXRwdXQgPGZpZWxkPiA8ZGVzdGluYXRpb24+CisKK1RoaXMgdGVsbHMgQ2xpbmljIHRvIG91dHB1dCAqZmllbGQqIHRvICpkZXN0aW5hdGlvbiouICBgYG91dHB1dGBgIGFsc28KK3N1cHBvcnRzIGEgc3BlY2lhbCBtZXRhLWRlc3RpbmF0aW9uLCBjYWxsZWQgYGBldmVyeXRoaW5nYGAsIHdoaWNoIHRlbGxzCitDbGluaWMgdG8gb3V0cHV0ICphbGwqIGZpZWxkcyB0byB0aGF0ICpkZXN0aW5hdGlvbiouCisKK2Bgb3V0cHV0YGAgaGFzIGEgbnVtYmVyIG9mIG90aGVyIGZ1bmN0aW9uczo6CisKKyAgICBvdXRwdXQgcHVzaAorICAgIG91dHB1dCBwb3AKKyAgICBvdXRwdXQgcHJlc2V0IDxwcmVzZXQ+CisKKworYGBvdXRwdXQgcHVzaGBgIGFuZCBgYG91dHB1dCBwb3BgYCBhbGxvdyB5b3UgdG8gcHVzaCBhbmQgcG9wCitjb25maWd1cmF0aW9ucyBvbiBhbiBpbnRlcm5hbCBjb25maWd1cmF0aW9uIHN0YWNrLCBzbyB0aGF0IHlvdQorY2FuIHRlbXBvcmFyaWx5IG1vZGlmeSB0aGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24sIHRoZW4gZWFzaWx5IHJlc3RvcmUKK3RoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uLiAgU2ltcGx5IHB1c2ggYmVmb3JlIHlvdXIgY2hhbmdlIHRvIHNhdmUKK3RoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHRoZW4gcG9wIHdoZW4geW91IHdpc2ggdG8gcmVzdG9yZSB0aGUKK3ByZXZpb3VzIGNvbmZpZ3VyYXRpb24uCisKK2Bgb3V0cHV0IHByZXNldGBgIHNldHMgQ2xpbmljJ3Mgb3V0cHV0IHRvIG9uZSBvZiBzZXZlcmFsIGJ1aWx0LWluCitwcmVzZXQgY29uZmlndXJhdGlvbnMsIGFzIGZvbGxvd3M6CisKKyAgYGBibG9ja2BgCisgICAgQ2xpbmljJ3Mgb3JpZ2luYWwgc3RhcnRpbmcgY29uZmlndXJhdGlvbi4gIFdyaXRlcyBldmVyeXRoaW5nCisgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGlucHV0IGJsb2NrLgorCisgICAgU3VwcHJlc3MgdGhlIGBgcGFyc2VyX3Byb3RvdHlwZWBgCisgICAgYW5kIGBgZG9jc3RyaW5nX3Byb3RvdHlwZWBgLCB3cml0ZSBldmVyeXRoaW5nIGVsc2UgdG8gYGBibG9ja2BgLgorCisgIGBgZmlsZWBgCisgICAgRGVzaWduZWQgdG8gd3JpdGUgZXZlcnl0aGluZyB0byB0aGUgImNsaW5pYyBmaWxlIiB0aGF0IGl0IGNhbi4KKyAgICBZb3UgdGhlbiBgYCNpbmNsdWRlYGAgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3VyIGZpbGUuCisgICAgWW91IG1heSBuZWVkIHRvIHJlYXJyYW5nZSB5b3VyIGZpbGUgdG8gbWFrZSB0aGlzIHdvcmssIHRob3VnaAorICAgIHVzdWFsbHkgdGhpcyBqdXN0IG1lYW5zIGNyZWF0aW5nIGZvcndhcmQgZGVjbGFyYXRpb25zIGZvciB2YXJpb3VzCisgICAgYGB0eXBlZGVmYGAgYW5kIGBgUHlUeXBlT2JqZWN0YGAgZGVmaW5pdGlvbnMuCisKKyAgICBTdXBwcmVzcyB0aGUgYGBwYXJzZXJfcHJvdG90eXBlYGAKKyAgICBhbmQgYGBkb2NzdHJpbmdfcHJvdG90eXBlYGAsIHdyaXRlIHRoZSBgYGltcGxfZGVmaW5pdGlvbmBgIHRvCisgICAgYGBibG9ja2BgLCBhbmQgd3JpdGUgZXZlcnl0aGluZyBlbHNlIHRvIGBgZmlsZWBgLgorCisgICAgVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMgYGAie2Rpcm5hbWV9L2NsaW5pYy97YmFzZW5hbWV9LmgiYGAuCisKKyAgYGBidWZmZXJgYAorICAgIFNhdmUgdXAgYWxsIG1vc3Qgb2YgdGhlIG91dHB1dCBmcm9tIENsaW5pYywgdG8gYmUgd3JpdHRlbiBpbnRvCisgICAgeW91ciBmaWxlIG5lYXIgdGhlIGVuZC4gIEZvciBQeXRob24gZmlsZXMgaW1wbGVtZW50aW5nIG1vZHVsZXMKKyAgICBvciBidWlsdGluIHR5cGVzLCBpdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGR1bXAgdGhlIGJ1ZmZlcgorICAgIGp1c3QgYWJvdmUgdGhlIHN0YXRpYyBzdHJ1Y3R1cmVzIGZvciB5b3VyIG1vZHVsZSBvcgorICAgIGJ1aWx0aW4gdHlwZTsgdGhlc2UgYXJlIG5vcm1hbGx5IHZlcnkgbmVhciB0aGUgZW5kLiAgVXNpbmcKKyAgICBgYGJ1ZmZlcmBgIG1heSByZXF1aXJlIGV2ZW4gbW9yZSBlZGl0aW5nIHRoYW4gYGBmaWxlYGAsIGlmCisgICAgeW91ciBmaWxlIGhhcyBzdGF0aWMgYGBQeU1ldGhvZERlZmBgIGFycmF5cyBkZWZpbmVkIGluIHRoZQorICAgIG1pZGRsZSBvZiB0aGUgZmlsZS4KKworICAgIFN1cHByZXNzIHRoZSBgYHBhcnNlcl9wcm90b3R5cGVgYCwgYGBpbXBsX3Byb3RvdHlwZWBgLAorICAgIGFuZCBgYGRvY3N0cmluZ19wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgaW1wbF9kZWZpbml0aW9uYGAgdG8KKyAgICBgYGJsb2NrYGAsIGFuZCB3cml0ZSBldmVyeXRoaW5nIGVsc2UgdG8gYGBmaWxlYGAuCisKKyAgYGB0d28tcGFzc2BgCisgICAgU2ltaWxhciB0byB0aGUgYGBidWZmZXJgYCBwcmVzZXQsIGJ1dCB3cml0ZXMgZm9yd2FyZCBkZWNsYXJhdGlvbnMgdG8KKyAgICB0aGUgYGB0d28tcGFzc2BgIGJ1ZmZlciwgYW5kIGRlZmluaXRpb25zIHRvIHRoZSBgYGJ1ZmZlcmBgLgorICAgIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgYGBidWZmZXJgYCBwcmVzZXQsIGJ1dCBtYXkgcmVxdWlyZQorICAgIGxlc3MgZWRpdGluZyB0aGFuIGBgYnVmZmVyYGAuICBEdW1wIHRoZSBgYHR3by1wYXNzYGAgYnVmZmVyCisgICAgbmVhciB0aGUgdG9wIG9mIHlvdXIgZmlsZSwgYW5kIGR1bXAgdGhlIGBgYnVmZmVyYGAgbmVhcgorICAgIHRoZSBlbmQganVzdCBsaWtlIHlvdSB3b3VsZCB3aGVuIHVzaW5nIHRoZSBgYGJ1ZmZlcmBgIHByZXNldC4KKworICAgIFN1cHByZXNzZXMgdGhlIGBgaW1wbF9wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgaW1wbF9kZWZpbml0aW9uYGAKKyAgICB0byBgYGJsb2NrYGAsIHdyaXRlIGBgZG9jc3RyaW5nX3Byb3RvdHlwZWBgLCBgYG1ldGhvZGRlZl9kZWZpbmVgYCwKKyAgICBhbmQgYGBwYXJzZXJfcHJvdG90eXBlYGAgdG8gYGB0d28tcGFzc2BgLCB3cml0ZSBldmVyeXRoaW5nIGVsc2UKKyAgICB0byBgYGJ1ZmZlcmBgLgorCisgIGBgcGFydGlhbC1idWZmZXJgYAorICAgIFNpbWlsYXIgdG8gdGhlIGBgYnVmZmVyYGAgcHJlc2V0LCBidXQgd3JpdGVzIG1vcmUgdGhpbmdzIHRvIGBgYmxvY2tgYCwKKyAgICBvbmx5IHdyaXRpbmcgdGhlIHJlYWxseSBiaWcgY2h1bmtzIG9mIGdlbmVyYXRlZCBjb2RlIHRvIGBgYnVmZmVyYGAuCisgICAgVGhpcyBhdm9pZHMgdGhlIGRlZmluaXRpb24tYmVmb3JlLXVzZSBwcm9ibGVtIG9mIGBgYnVmZmVyYGAgY29tcGxldGVseSwKKyAgICBhdCB0aGUgc21hbGwgY29zdCBvZiBoYXZpbmcgc2xpZ2h0bHkgbW9yZSBzdHVmZiBpbiB0aGUgYmxvY2sncyBvdXRwdXQuCisgICAgRHVtcCB0aGUgYGBidWZmZXJgYCBuZWFyIHRoZSBlbmQsIGp1c3QgbGlrZSB5b3Ugd291bGQgd2hlbiB1c2luZworICAgIHRoZSBgYGJ1ZmZlcmBgIHByZXNldC4KKworICAgIFN1cHByZXNzZXMgdGhlIGBgaW1wbF9wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgZG9jc3RyaW5nX2RlZmluaXRpb25gYAorICAgIGFuZCBgYHBhcnNlcl9kZWZpbnRpb25gYCB0byBgYGJ1ZmZlcmBgLCB3cml0ZSBldmVyeXRoaW5nIGVsc2UgdG8gYGBibG9ja2BgLgorCitUaGUgdGhpcmQgbmV3IGRpcmVjdGl2ZSBpcyBgYGRlc3RpbmF0aW9uYGA6OgorCisgICAgZGVzdGluYXRpb24gPG5hbWU+IDxjb21tYW5kPiBbLi4uXQorCitUaGlzIHBlcmZvcm1zIGFuIG9wZXJhdGlvbiBvbiB0aGUgZGVzdGluYXRpb24gbmFtZWQgYGBuYW1lYGAuCisKK1RoZXJlIGFyZSB0d28gZGVmaW5lZCBzdWJjb21tYW5kczogYGBuZXdgYCBhbmQgYGBjbGVhcmBgLgorCitUaGUgYGBuZXdgYCBzdWJjb21tYW5kIHdvcmtzIGxpa2UgdGhpczo6CisKKyAgICBkZXN0aW5hdGlvbiA8bmFtZT4gbmV3IDx0eXBlPgorCitUaGlzIGNyZWF0ZXMgYSBuZXcgZGVzdGluYXRpb24gd2l0aCBuYW1lIGBgPG5hbWU+YGAgYW5kIHR5cGUgYGA8dHlwZT5gYC4KKworVGhlcmUgYXJlIGZpdmUgZGVzdGluYXRpb24gdHlwZXM6CisKKyAgICBgYHN1cHByZXNzYGAKKyAgICAgICAgVGhyb3dzIHRoZSB0ZXh0IGF3YXkuCisKKyAgICBgYGJsb2NrYGAKKyAgICAgICAgV3JpdGVzIHRoZSB0ZXh0IHRvIHRoZSBjdXJyZW50IGJsb2NrLiAgVGhpcyBpcyB3aGF0IENsaW5pYworICAgICAgICBvcmlnaW5hbGx5IGRpZC4KKworICAgIGBgYnVmZmVyYGAKKyAgICAgICAgQSBzaW1wbGUgdGV4dCBidWZmZXIsIGxpa2UgdGhlICJidWZmZXIiIGJ1aWx0aW4gZGVzdGluYXRpb24gYWJvdmUuCisKKyAgICBgYGZpbGVgYAorICAgICAgICBBIHRleHQgZmlsZS4gIFRoZSBmaWxlIGRlc3RpbmF0aW9uIHRha2VzIGFuIGV4dHJhIGFyZ3VtZW50LAorICAgICAgICBhIHRlbXBsYXRlIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIGZpbGVuYW1lLCBsaWtlIHNvOgorCisgICAgICAgICAgICBkZXN0aW5hdGlvbiA8bmFtZT4gbmV3IDx0eXBlPiA8ZmlsZV90ZW1wbGF0ZT4KKworICAgICAgICBUaGUgdGVtcGxhdGUgY2FuIHVzZSB0aHJlZSBzdHJpbmdzIGludGVybmFsbHkgdGhhdCB3aWxsIGJlIHJlcGxhY2VkCisgICAgICAgIGJ5IGJpdHMgb2YgdGhlIGZpbGVuYW1lOgorCisgICAgICAgICAgICB7cGF0aH0KKyAgICAgICAgICAgICAgICBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlLCBpbmNsdWRpbmcgZGlyZWN0b3J5IGFuZCBmdWxsIGZpbGVuYW1lLgorICAgICAgICAgICAge2Rpcm5hbWV9CisgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGUgZmlsZSBpcyBpbi4KKyAgICAgICAgICAgIHtiYXNlbmFtZX0KKyAgICAgICAgICAgICAgICBKdXN0IHRoZSBuYW1lIG9mIHRoZSBmaWxlLCBub3QgaW5jbHVkaW5nIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICB7YmFzZW5hbWVfcm9vdH0KKyAgICAgICAgICAgICAgICBCYXNlbmFtZSB3aXRoIHRoZSBleHRlbnNpb24gY2xpcHBlZCBvZmYKKyAgICAgICAgICAgICAgICAoZXZlcnl0aGluZyB1cCB0byBidXQgbm90IGluY2x1ZGluZyB0aGUgbGFzdCAnLicpLgorICAgICAgICAgICAge2Jhc2VuYW1lX2V4dGVuc2lvbn0KKyAgICAgICAgICAgICAgICBUaGUgbGFzdCAnLicgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQuICBJZiB0aGUgYmFzZW5hbWUKKyAgICAgICAgICAgICAgICBkb2VzIG5vdCBjb250YWluIGEgcGVyaW9kLCB0aGlzIHdpbGwgYmUgdGhlIGVtcHR5IHN0cmluZy4KKworICAgICAgICBJZiB0aGVyZSBhcmUgbm8gcGVyaW9kcyBpbiB0aGUgZmlsZW5hbWUsIHtiYXNlbmFtZX0gYW5kIHtmaWxlbmFtZX0KKyAgICAgICAgYXJlIHRoZSBzYW1lLCBhbmQge2V4dGVuc2lvbn0gaXMgZW1wdHkuICAie2Jhc2VuYW1lfXtleHRlbnNpb259IgorICAgICAgICBpcyBhbHdheXMgZXhhY3RseSB0aGUgc2FtZSBhcyAie2ZpbGVuYW1lfSIuIgorCisgICAgYGB0d28tcGFzc2BgCisgICAgICAgIEEgdHdvLXBhc3MgYnVmZmVyLCBsaWtlIHRoZSAidHdvLXBhc3MiIGJ1aWx0aW4gZGVzdGluYXRpb24gYWJvdmUuCisKKworVGhlIGBgY2xlYXJgYCBzdWJjb21tYW5kIHdvcmtzIGxpa2UgdGhpczo6CisKKyAgICBkZXN0aW5hdGlvbiA8bmFtZT4gY2xlYXIKKworSXQgcmVtb3ZlcyBhbGwgdGhlIGFjY3VtdWxhdGVkIHRleHQgdXAgdG8gdGhpcyBwb2ludCBpbiB0aGUgZGVzdGluYXRpb24uCisoSSBkb24ndCBrbm93IHdoYXQgeW91J2QgbmVlZCB0aGlzIGZvciwgYnV0IEkgdGhvdWdodCBtYXliZSBpdCdkIGJlCit1c2VmdWwgd2hpbGUgc29tZW9uZSdzIGV4cGVyaW1lbnRpbmcuKQorCitUaGUgZm91cnRoIG5ldyBkaXJlY3RpdmUgaXMgYGBzZXRgYDo6CisKKyAgICBzZXQgbGluZV9wcmVmaXggInN0cmluZyIKKyAgICBzZXQgbGluZV9zdWZmaXggInN0cmluZyIKKworYGBzZXRgYCBsZXRzIHlvdSBzZXQgdHdvIGludGVybmFsIHZhcmlhYmxlcyBpbiBDbGluaWMuCitgYGxpbmVfcHJlZml4YGAgaXMgYSBzdHJpbmcgdGhhdCB3aWxsIGJlIHByZXBlbmRlZCB0byBldmVyeSBsaW5lIG9mIENsaW5pYydzIG91dHB1dDsKK2BgbGluZV9zdWZmaXhgYCBpcyBhIHN0cmluZyB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gZXZlcnkgbGluZSBvZiBDbGluaWMncyBvdXRwdXQuCisKK0JvdGggb2YgdGhlc2Ugc3Vwb3J0IHR3byBmb3JtYXQgc3RyaW5nczoKKworICBgYHtibG9jayBjb21tZW50IHN0YXJ0fWBgCisgICAgVHVybnMgaW50byB0aGUgc3RyaW5nIGBgLypgYCwgdGhlIHN0YXJ0LWNvbW1lbnQgdGV4dCBzZXF1ZW5jZSBmb3IgQyBmaWxlcy4KKworICBgYHtibG9jayBjb21tZW50IGVuZH1gYAorICAgIFR1cm5zIGludG8gdGhlIHN0cmluZyBgYCovYGAsIHRoZSBlbmQtY29tbWVudCB0ZXh0IHNlcXVlbmNlIGZvciBDIGZpbGVzLgorCitUaGUgZmluYWwgbmV3IGRpcmVjdGl2ZSBpcyBvbmUgeW91IHNob3VsZG4ndCBuZWVkIHRvIHVzZSBkaXJlY3RseSwKK2NhbGxlZCBgYHByZXNlcnZlYGA6OgorCisgICAgcHJlc2VydmUKKworVGhpcyB0ZWxscyBDbGluaWMgdGhhdCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBrZXB0LCB1bm1vZGlmZWQuCitUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBDbGluaWMgd2hlbiBkdW1waW5nIG91dHB1dCBpbnRvIGBgZmlsZWBgIGZpbGVzOyB3cmFwcGluZworaXQgaW4gYSBDbGluaWMgYmxvY2sgbGV0cyBDbGluaWMgdXNlIGl0cyBleGlzdGluZyBjaGVja3N1bSBmdW5jdGlvbmFsaXR5IHRvIGVuc3VyZQordGhlIGZpbGUgd2FzIG5vdCBtb2RpZmllZCBieSBoYW5kIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuLgorCisKK1RoZSAjaWZkZWYgdHJpY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91J3JlIGNvbnZlcnRpbmcgYSBmdW5jdGlvbiB0aGF0IGlzbid0IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLAordGhlcmUncyBhIHRyaWNrIHlvdSBjYW4gdXNlIHRvIG1ha2UgbGlmZSBhIGxpdHRsZSBlYXNpZXIuICBUaGUgZXhpc3RpbmcKK2NvZGUgcHJvYmFibHkgbG9va3MgbGlrZSB0aGlzOjoKKworICAgICNpZmRlZiBIQVZFX0ZVTkNUSU9OTkFNRQorICAgIHN0YXRpYyBtb2R1bGVfZnVuY3Rpb25uYW1lKC4uLikKKyAgICB7CisgICAgLi4uCisgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX0ZVTkNUSU9OTkFNRSAqLworCitBbmQgdGhlbiBpbiB0aGUgYGBQeU1ldGhvZERlZmBgIHN0cnVjdHVyZSBhdCB0aGUgYm90dG9tIHRoZSBleGlzdGluZyBjb2RlCit3aWxsIGhhdmU6OgorCisgICAgI2lmZGVmIEhBVkVfRlVOQ1RJT05OQU1FCisgICAgeydmdW5jdGlvbm5hbWUnLCAuLi4gfSwKKyAgICAjZW5kaWYgLyogSEFWRV9GVU5DVElPTk5BTUUgKi8KKworSW4gdGhpcyBzY2VuYXJpbywgeW91IHNob3VsZCBlbmNsb3NlIHRoZSBib2R5IG9mIHlvdXIgaW1wbCBmdW5jdGlvbiBpbnNpZGUgdGhlIGBgI2lmZGVmYGAsCitsaWtlIHNvOjoKKworICAgICNpZmRlZiBIQVZFX0ZVTkNUSU9OTkFNRQorICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBtb2R1bGUuZnVuY3Rpb25uYW1lCisgICAgLi4uCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgIHN0YXRpYyBtb2R1bGVfZnVuY3Rpb25uYW1lKC4uLikKKyAgICB7CisgICAgLi4uCisgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX0ZVTkNUSU9OTkFNRSAqLworCitUaGVuLCByZW1vdmUgdGhvc2UgdGhyZWUgbGluZXMgZnJvbSB0aGUgYGBQeU1ldGhvZERlZmBgIHN0cnVjdHVyZSwKK3JlcGxhY2luZyB0aGVtIHdpdGggdGhlIG1hY3JvIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZWQ6OgorCisgICAgTU9EVUxFX0ZVTkNUSU9OTkFNRV9NRVRIT0RERUYKKworKFlvdSBjYW4gZmluZCB0aGUgcmVhbCBuYW1lIGZvciB0aGlzIG1hY3JvIGluc2lkZSB0aGUgZ2VuZXJhdGVkIGNvZGUuCitPciB5b3UgY2FuIGNhbGN1bGF0ZSBpdCB5b3Vyc2VsZjogaXQncyB0aGUgbmFtZSBvZiB5b3VyIGZ1bmN0aW9uIGFzIGRlZmluZWQKK29uIHRoZSBmaXJzdCBsaW5lIG9mIHlvdXIgYmxvY2ssIGJ1dCB3aXRoIHBlcmlvZHMgY2hhbmdlZCB0byB1bmRlcnNjb3JlcywKK3VwcGVyY2FzZWQsIGFuZCBgYCJfTUVUSE9EREVGImBgIGFkZGVkIHRvIHRoZSBlbmQuKQorCitQZXJoYXBzIHlvdSdyZSB3b25kZXJpbmc6IHdoYXQgaWYgYGBIQVZFX0ZVTkNUSU9OTkFNRWBgIGlzbid0IGRlZmluZWQ/CitUaGUgYGBNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRmBgIG1hY3JvIHdvbid0IGJlIGRlZmluZWQgZWl0aGVyIQorCitIZXJlJ3Mgd2hlcmUgQXJndW1lbnQgQ2xpbmljIGdldHMgdmVyeSBjbGV2ZXIuICBJdCBhY3R1YWxseSBkZXRlY3RzIHRoYXQgdGhlCitBcmd1bWVudCBDbGluaWMgYmxvY2sgbWlnaHQgYmUgZGVhY3RpdmF0ZWQgYnkgdGhlIGBgI2lmZGVmYGAuICBXaGVuIHRoYXQKK2hhcHBlbnMsIGl0IGdlbmVyYXRlcyBhIGxpdHRsZSBleHRyYSBjb2RlIHRoYXQgbG9va3MgbGlrZSB0aGlzOjoKKworICAgICNpZm5kZWYgTU9EVUxFX0ZVTkNUSU9OTkFNRV9NRVRIT0RERUYKKyAgICAgICAgI2RlZmluZSBNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRgorICAgICNlbmRpZiAvKiAhZGVmaW5lZChNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRikgKi8KKworVGhhdCBtZWFucyB0aGUgbWFjcm8gYWx3YXlzIHdvcmtzLiAgSWYgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIHRoaXMgdHVybnMKK2ludG8gdGhlIGNvcnJlY3Qgc3RydWN0dXJlLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIGNvbW1hLiAgSWYgdGhlIGZ1bmN0aW9uIGlzCit1bmRlZmluZWQsIHRoaXMgdHVybnMgaW50byBub3RoaW5nLgorCitIb3dldmVyLCB0aGlzIGNhdXNlcyBvbmUgdGlja2xpc2ggcHJvYmxlbTogd2hlcmUgc2hvdWxkIEFyZ3VtZW50IENsaW5pYyBwdXQgdGhpcworZXh0cmEgY29kZSB3aGVuIHVzaW5nIHRoZSAiYmxvY2siIG91dHB1dCBwcmVzZXQ/ICBJdCBjYW4ndCBnbyBpbiB0aGUgb3V0cHV0IGJsb2NrLAorYmVjYXVzZSB0aGF0IGNvdWxkIGJlIGRlY2F0aXZhdGVkIGJ5IHRoZSBgYCNpZmRlZmBgLiAgKFRoYXQncyB0aGUgd2hvbGUgcG9pbnQhKQorCitJbiB0aGlzIHNpdHVhdGlvbiwgQXJndW1lbnQgQ2xpbmljIHdyaXRlcyB0aGUgZXh0cmEgY29kZSB0byB0aGUgImJ1ZmZlciIgZGVzdGluYXRpb24uCitUaGlzIG1heSBtZWFuIHRoYXQgeW91IGdldCBhIGNvbXBsYWludCBmcm9tIEFyZ3VtZW50IENsaW5pYzo6CisKKyAgICBXYXJuaW5nIGluIGZpbGUgIk1vZHVsZXMvcG9zaXhtb2R1bGUuYyIgb24gbGluZSAxMjM1NzoKKyAgICBEZXN0aW5hdGlvbiBidWZmZXIgJ2J1ZmZlcicgbm90IGVtcHR5IGF0IGVuZCBvZiBmaWxlLCBlbXB0eWluZy4KKworV2hlbiB0aGlzIGhhcHBlbnMsIGp1c3Qgb3BlbiB5b3VyIGZpbGUsIGZpbmQgdGhlIGBgZHVtcCBidWZmZXJgYCBibG9jayB0aGF0CitBcmd1bWVudCBDbGluaWMgYWRkZWQgdG8geW91ciBmaWxlIChpdCdsbCBiZSBhdCB0aGUgdmVyeSBib3R0b20pLCB0aGVuCittb3ZlIGl0IGFib3ZlIHRoZSBgYFB5TWV0aG9kRGVmYGAgc3RydWN0dXJlIHdoZXJlIHRoYXQgbWFjcm8gaXMgdXNlZC4KKworCisKK1VzaW5nIEFyZ3VtZW50IENsaW5pYyBpbiBQeXRob24gZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQncyBhY3R1YWxseSBwb3NzaWJsZSB0byB1c2UgQXJndW1lbnQgQ2xpbmljIHRvIHByZXByb2Nlc3MgUHl0aG9uIGZpbGVzLgorVGhlcmUncyBubyBwb2ludCB0byB1c2luZyBBcmd1bWVudCBDbGluaWMgYmxvY2tzLCBvZiBjb3Vyc2UsIGFzIHRoZSBvdXRwdXQKK3dvdWxkbid0IG1ha2UgYW55IHNlbnNlIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBCdXQgdXNpbmcgQXJndW1lbnQgQ2xpbmljCit0byBydW4gUHl0aG9uIGJsb2NrcyBsZXRzIHlvdSB1c2UgUHl0aG9uIGFzIGEgUHl0aG9uIHByZXByb2Nlc3NvciEKKworU2luY2UgUHl0aG9uIGNvbW1lbnRzIGFyZSBkaWZmZXJlbnQgZnJvbSBDIGNvbW1lbnRzLCBBcmd1bWVudCBDbGluaWMKK2Jsb2NrcyBlbWJlZGRlZCBpbiBQeXRob24gZmlsZXMgbG9vayBzbGlnaHRseSBkaWZmZXJlbnQuICBUaGV5IGxvb2sgbGlrZSB0aGlzOjoKKworICAgICMvKltweXRob24gaW5wdXRdCisgICAgI3ByaW50KCJkZWYgZm9vKCk6IHBhc3MiKQorICAgICNbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgZGVmIGZvbygpOiBwYXNzCisgICAgIy8qW3B5dGhvbiBjaGVja3N1bTouLi5dKi8KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdCBiL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAppbmRleCA3MTg5YzY1Li4xOTY5YjMyIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKKysrIGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CkBAIC0zLDcgKzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogOkF1dGhvcjogQS4gTS4gS3VjaGxpbmcKLTpSZWxlYXNlOiAwLjMxCis6UmVsZWFzZTogMC4zMgogCiBJbiB0aGlzIGRvY3VtZW50LCB3ZSdsbCB0YWtlIGEgdG91ciBvZiBQeXRob24ncyBmZWF0dXJlcyBzdWl0YWJsZSBmb3IKIGltcGxlbWVudGluZyBwcm9ncmFtcyBpbiBhIGZ1bmN0aW9uYWwgc3R5bGUuICBBZnRlciBhbiBpbnRyb2R1Y3Rpb24gdG8gdGhlCkBAIC0xNSw5ICsxNSw5IEBACiBJbnRyb2R1Y3Rpb24KID09PT09PT09PT09PQogCi1UaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYgeW91J3JlCi1qdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLCBza2lwIHRvIHRoZSBuZXh0Ci1zZWN0aW9uLgorVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSBiYXNpYyBjb25jZXB0IG9mIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmc7IGlmCit5b3UncmUganVzdCBpbnRlcmVzdGVkIGluIGxlYXJuaW5nIGFib3V0IFB5dGhvbiBsYW5ndWFnZSBmZWF0dXJlcywKK3NraXAgdG8gdGhlIG5leHQgc2VjdGlvbiBvbiA6cmVmOmBmdW5jdGlvbmFsLWhvd3RvLWl0ZXJhdG9yc2AuCiAKIFByb2dyYW1taW5nIGxhbmd1YWdlcyBzdXBwb3J0IGRlY29tcG9zaW5nIHByb2JsZW1zIGluIHNldmVyYWwgZGlmZmVyZW50IHdheXM6CiAKQEAgLTE3Myw2ICsxNzMsOCBAQAogYSBmZXcgZnVuY3Rpb25zIHNwZWNpYWxpemVkIGZvciB0aGUgY3VycmVudCB0YXNrLgogCiAKKy4uIF9mdW5jdGlvbmFsLWhvd3RvLWl0ZXJhdG9yczoKKwogSXRlcmF0b3JzCiA9PT09PT09PT0KIApAQCAtNTgxLDcgKzU4Myw3IEBACiAKIEJlY2F1c2UgYGB5aWVsZGBgIHdpbGwgb2Z0ZW4gYmUgcmV0dXJuaW5nIGBgTm9uZWBgLCB5b3Ugc2hvdWxkIGFsd2F5cyBjaGVjayBmb3IKIHRoaXMgY2FzZS4gIERvbid0IGp1c3QgdXNlIGl0cyB2YWx1ZSBpbiBleHByZXNzaW9ucyB1bmxlc3MgeW91J3JlIHN1cmUgdGhhdCB0aGUKLTptZXRoOmB+Z2VuZXJhdG9yLnNlbmRgIG1ldGhvZCB3aWxsIGJlIHRoZSBvbmx5IG1ldGhvZCB1c2VkIHJlc3VtZSB5b3VyCis6bWV0aDpgfmdlbmVyYXRvci5zZW5kYCBtZXRob2Qgd2lsbCBiZSB0aGUgb25seSBtZXRob2QgdXNlZCB0byByZXN1bWUgeW91cgogZ2VuZXJhdG9yIGZ1bmN0aW9uLgogCiBJbiBhZGRpdGlvbiB0byA6bWV0aDpgfmdlbmVyYXRvci5zZW5kYCwgdGhlcmUgYXJlIHR3byBvdGhlciBtZXRob2RzIG9uCkBAIC02NzAsNyArNjcyLDcgQEAKIAogOmZ1bmM6YHNvcnRlZChpdGVyYWJsZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpIDxzb3J0ZWQ+YCBjb2xsZWN0cyBhbGwgdGhlCiBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUgaW50byBhIGxpc3QsIHNvcnRzIHRoZSBsaXN0LCBhbmQgcmV0dXJucyB0aGUgc29ydGVkCi1yZXN1bHQuICBUaGUgKmtleSosIGFuZCAqcmV2ZXJzZSogYXJndW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK3Jlc3VsdC4gIFRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlCiBjb25zdHJ1Y3RlZCBsaXN0J3MgOm1ldGg6YH5saXN0LnNvcnRgIG1ldGhvZC4gOjoKIAogICAgID4+PiBpbXBvcnQgcmFuZG9tCkBAIC04MzYsNyArODM4LDggQEAKIHByZWRpY2F0ZS4KIAogOmZ1bmM6YGl0ZXJ0b29scy5maWx0ZXJmYWxzZShwcmVkaWNhdGUsIGl0ZXIpIDxpdGVydG9vbHMuZmlsdGVyZmFsc2U+YCBpcyB0aGUKLW9wcG9zaXRlLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgZmFsc2U6Ogorb3Bwb3NpdGUgb2YgOmZ1bmM6YGZpbHRlcmAsIHJldHVybmluZyBhbGwgZWxlbWVudHMgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUKK3JldHVybnMgZmFsc2U6OgogCiAgICAgaXRlcnRvb2xzLmZpbHRlcmZhbHNlKGlzX2V2ZW4sIGl0ZXJ0b29scy5jb3VudCgpKSA9PgogICAgICAgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgLi4uCkBAIC04NjQsNiArODY3LDc3IEBACiAgICAgaXRlcnRvb2xzLmRyb3B3aGlsZShpc19ldmVuLCBpdGVydG9vbHMuY291bnQoKSkgPT4KICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAuLi4KIAorOmZ1bmM6YGl0ZXJ0b29scy5jb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIDxpdGVydG9vbHMuY29tcHJlc3M+YCB0YWtlcyB0d28KK2l0ZXJhdG9ycyBhbmQgcmV0dXJucyBvbmx5IHRob3NlIGVsZW1lbnRzIG9mICpkYXRhKiBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcKK2VsZW1lbnQgb2YgKnNlbGVjdG9ycyogaXMgdHJ1ZSwgc3RvcHBpbmcgd2hlbmV2ZXIgZWl0aGVyIG9uZSBpcyBleGhhdXN0ZWQ6OgorCisgICAgaXRlcnRvb2xzLmNvbXByZXNzKFsxLDIsMyw0LDVdLCBbVHJ1ZSwgVHJ1ZSwgRmFsc2UsIEZhbHNlLCBUcnVlXSkgPT4KKyAgICAgICAxLCAyLCA1CisKKworQ29tYmluYXRvcmljIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoaXRlcmFibGUsIHIpIDxpdGVydG9vbHMuY29tYmluYXRpb25zPmAKK3JldHVybnMgYW4gaXRlcmF0b3IgZ2l2aW5nIGFsbCBwb3NzaWJsZSAqciotdHVwbGUgY29tYmluYXRpb25zIG9mIHRoZQorZWxlbWVudHMgY29udGFpbmVkIGluICppdGVyYWJsZSouICA6OgorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhbMSwgMiwgMywgNCwgNV0sIDIpID0+CisgICAgICAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDQpLCAoMywgNSksCisgICAgICAoNCwgNSkKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAzKSA9PgorICAgICAgKDEsIDIsIDMpLCAoMSwgMiwgNCksICgxLCAyLCA1KSwgKDEsIDMsIDQpLCAoMSwgMywgNSksICgxLCA0LCA1KSwKKyAgICAgICgyLCAzLCA0KSwgKDIsIDMsIDUpLCAoMiwgNCwgNSksCisgICAgICAoMywgNCwgNSkKKworVGhlIGVsZW1lbnRzIHdpdGhpbiBlYWNoIHR1cGxlIHJlbWFpbiBpbiB0aGUgc2FtZSBvcmRlciBhcworKml0ZXJhYmxlKiByZXR1cm5lZCB0aGVtLiAgRm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgMSBpcyBhbHdheXMgYmVmb3JlCisyLCAzLCA0LCBvciA1IGluIHRoZSBleGFtcGxlcyBhYm92ZS4gIEEgc2ltaWxhciBmdW5jdGlvbiwKKzpmdW5jOmBpdGVydG9vbHMucGVybXV0YXRpb25zKGl0ZXJhYmxlLCByPU5vbmUpIDxpdGVydG9vbHMucGVybXV0YXRpb25zPmAsCityZW1vdmVzIHRoaXMgY29uc3RyYWludCBvbiB0aGUgb3JkZXIsIHJldHVybmluZyBhbGwgcG9zc2libGUKK2FycmFuZ2VtZW50cyBvZiBsZW5ndGggKnIqOjoKKworICAgIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDIpLCAoMSwgMyksICgxLCA0KSwgKDEsIDUpLAorICAgICAgKDIsIDEpLCAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDEpLCAoMywgMiksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDEpLCAoNCwgMiksICg0LCAzKSwgKDQsIDUpLAorICAgICAgKDUsIDEpLCAoNSwgMiksICg1LCAzKSwgKDUsIDQpCisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKFsxLCAyLCAzLCA0LCA1XSkgPT4KKyAgICAgICgxLCAyLCAzLCA0LCA1KSwgKDEsIDIsIDMsIDUsIDQpLCAoMSwgMiwgNCwgMywgNSksCisgICAgICAuLi4KKyAgICAgICg1LCA0LCAzLCAyLCAxKQorCitJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgdmFsdWUgZm9yICpyKiB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVyYWJsZSBpcyB1c2VkLAorbWVhbmluZyB0aGF0IGFsbCB0aGUgZWxlbWVudHMgYXJlIHBlcm11dGVkLgorCitOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHByb2R1Y2UgYWxsIG9mIHRoZSBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkKK3Bvc2l0aW9uIGFuZCBkb24ndCByZXF1aXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mICppdGVyYWJsZSogYXJlIHVuaXF1ZTo6CisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKCdhYmEnLCAzKSA9PgorICAgICAgKCdhJywgJ2InLCAnYScpLCAoJ2EnLCAnYScsICdiJyksICgnYicsICdhJywgJ2EnKSwKKyAgICAgICgnYicsICdhJywgJ2EnKSwgKCdhJywgJ2EnLCAnYicpLCAoJ2EnLCAnYicsICdhJykKKworVGhlIGlkZW50aWNhbCB0dXBsZSBgYCgnYScsICdhJywgJ2InKWBgIG9jY3VycyB0d2ljZSwgYnV0IHRoZSB0d28gJ2EnCitzdHJpbmdzIGNhbWUgZnJvbSBkaWZmZXJlbnQgcG9zaXRpb25zLgorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcikgPGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudD5gCitmdW5jdGlvbiByZWxheGVzIGEgZGlmZmVyZW50IGNvbnN0cmFpbnQ6IGVsZW1lbnRzIGNhbiBiZSByZXBlYXRlZAord2l0aGluIGEgc2luZ2xlIHR1cGxlLiAgQ29uY2VwdHVhbGx5IGFuIGVsZW1lbnQgaXMgc2VsZWN0ZWQgZm9yIHRoZQorZmlyc3QgcG9zaXRpb24gb2YgZWFjaCB0dXBsZSBhbmQgdGhlbiBpcyByZXBsYWNlZCBiZWZvcmUgdGhlIHNlY29uZAorZWxlbWVudCBpcyBzZWxlY3RlZC4gIDo6CisKKyAgICBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDEpLCAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMiksICgyLCAzKSwgKDIsIDQpLCAoMiwgNSksCisgICAgICAoMywgMyksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDQpLCAoNCwgNSksCisgICAgICAoNSwgNSkKKwogCiBHcm91cGluZyBlbGVtZW50cwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk4Niw2ICsxMDYwLDE3IEBACiAgICBmb3IgaSBpbiBbMSwyLDNdOgogICAgICAgIHByb2R1Y3QgKj0gaQogCitBIHJlbGF0ZWQgZnVuY3Rpb24gaXMgYGl0ZXJ0b29scy5hY2N1bXVsYXRlKGl0ZXJhYmxlLCBmdW5jPW9wZXJhdG9yLmFkZCkgPGl0ZXJ0b29scy5hY2N1bXVsYXRlYC4KK0l0IHBlcmZvcm1zIHRoZSBzYW1lIGNhbGN1bGF0aW9uLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgb25seSB0aGUKK2ZpbmFsIHJlc3VsdCwgOmZ1bmM6YGFjY3VtdWxhdGVgIHJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBhbHNvIHlpZWxkcworZWFjaCBwYXJ0aWFsIHJlc3VsdDo6CisKKyAgICBpdGVydG9vbHMuYWNjdW11bGF0ZShbMSwyLDMsNCw1XSkgPT4KKyAgICAgIDEsIDMsIDYsIDEwLCAxNQorCisgICAgaXRlcnRvb2xzLmFjY3VtdWxhdGUoWzEsMiwzLDQsNV0sIG9wZXJhdG9yLm11bCkgPT4KKyAgICAgIDEsIDIsIDYsIDI0LCAxMjAKKwogCiBUaGUgb3BlcmF0b3IgbW9kdWxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTU5LDUxICsxMjQ0LDYgQEAKIAogLi4gY29tbWVudAogCi0gICAgVG9waWNzIHRvIHBsYWNlCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIFhYWCBvcy53YWxrKCkKLQotICAgIFhYWCBOZWVkIGEgbGFyZ2UgZXhhbXBsZS4KLQotICAgIEJ1dCB3aWxsIGFuIGV4YW1wbGUgYWRkIG11Y2g/ICBJJ2xsIHBvc3QgYSBmaXJzdCBkcmFmdCBhbmQgc2VlCi0gICAgd2hhdCB0aGUgY29tbWVudHMgc2F5LgotCi0uLiBjb21tZW50Ci0KLSAgICBPcmlnaW5hbCBvdXRsaW5lOgotICAgIEludHJvZHVjdGlvbgotICAgICAgICAgICAgSWRlYSBvZiBGUAotICAgICAgICAgICAgICAgICAgICBQcm9ncmFtcyBidWlsdCBvdXQgb2YgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBhcmUgc3RyaWN0bHkgaW5wdXQtb3V0cHV0LCBubyBpbnRlcm5hbCBzdGF0ZQotICAgICAgICAgICAgT3Bwb3NlZCB0byBPTyBwcm9ncmFtbWluZywgd2hlcmUgb2JqZWN0cyBoYXZlIHN0YXRlCi0KLSAgICAgICAgICAgIFdoeSBGUD8KLSAgICAgICAgICAgICAgICAgICAgRm9ybWFsIHByb3ZhYmlsaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudCBpcyBkaWZmaWN1bHQgdG8gcmVhc29uIGFib3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHZlcnkgcmVsZXZhbnQgdG8gUHl0aG9uCi0gICAgICAgICAgICAgICAgICAgIE1vZHVsYXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbWFsbCBmdW5jdGlvbnMgdGhhdCBkbyBvbmUgdGhpbmcKLSAgICAgICAgICAgICAgICAgICAgRGVidWdnYWJpbGl0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHRlc3QgZHVlIHRvIGxhY2sgb2Ygc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHZlcmlmeSBvdXRwdXQgZnJvbSBpbnRlcm1lZGlhdGUgc3RlcHMKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zYWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhc3NlbWJsZSBhIHRvb2xib3ggb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIG1peGVkCi0KLSAgICBUYWNrbGluZyBhIHByb2JsZW0KLSAgICAgICAgICAgIE5lZWQgYSBzaWduaWZpY2FudCBleGFtcGxlCi0KLSAgICBJdGVyYXRvcnMKLSAgICBHZW5lcmF0b3JzCi0gICAgVGhlIGl0ZXJ0b29scyBtb2R1bGUKLSAgICBMaXN0IGNvbXByZWhlbnNpb25zCi0gICAgU21hbGwgZnVuY3Rpb25zIGFuZCB0aGUgbGFtYmRhIHN0YXRlbWVudAotICAgIEJ1aWx0LWluIGZ1bmN0aW9ucwotICAgICAgICAgICAgbWFwCi0gICAgICAgICAgICBmaWx0ZXIKLQotLi4gY29tbWVudAotCiAgICAgSGFuZHkgbGl0dGxlIGZ1bmN0aW9uIGZvciBwcmludGluZyBwYXJ0IG9mIGFuIGl0ZXJhdG9yIC0tIHVzZWQKICAgICB3aGlsZSB3cml0aW5nIHRoaXMgZG9jdW1lbnQuCiAKQEAgLTEyMTQsNSArMTI1NCwzIEBACiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIoZWxlbSkpCiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLCAnKQogICAgICAgICBwcmludChlbGVtWy0xXSkKLQotCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vaW5kZXgucnN0IGIvRG9jL2hvd3RvL2luZGV4LnJzdAppbmRleCA4MWE0ZjhiLi4yYzlkNjk5IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vaW5kZXgucnN0CisrKyBiL0RvYy9ob3d0by9pbmRleC5yc3QKQEAgLTI4LDQgKzI4LDUgQEAKICAgIHdlYnNlcnZlcnMucnN0CiAgICBhcmdwYXJzZS5yc3QKICAgIGlwYWRkcmVzcy5yc3QKKyAgIGNsaW5pYy5yc3QKIApkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0IGIvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CmluZGV4IDU2M2RhOWQuLjgyYzhmNTEgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdAorKysgYi9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKQEAgLTQxNiw3ICs0MTYsNyBAQAogICAgICAgIFNpbXBsZSBUQ1Agc29ja2V0LWJhc2VkIGxvZ2dpbmcgcmVjZWl2ZXIgc3VpdGFibGUgZm9yIHRlc3RpbmcuCiAgICAgICAgIiIiCiAKLSAgICAgICBhbGxvd19yZXVzZV9hZGRyZXNzID0gMQorICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSBUcnVlCiAKICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD0nbG9jYWxob3N0JywKICAgICAgICAgICAgICAgICAgICAgcG9ydD1sb2dnaW5nLmhhbmRsZXJzLkRFRkFVTFRfVENQX0xPR0dJTkdfUE9SVCwKQEAgLTcwNCw5ICs3MDQsNyBAQAogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKHJlY29yZC5uYW1lKQogICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUocmVjb3JkKSAjIE5vIGxldmVsIG9yIGZpbHRlciBsb2dpYyBhcHBsaWVkIC0ganVzdCBkbyBpdCEKLSAgICAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIGltcG9ydCBzeXMsIHRyYWNlYmFjawogICAgICAgICAgICAgICAgIHByaW50KCdXaG9vcHMhIFByb2JsZW06JywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3RkZXJyKQpAQCAtMTMxMCw3ICsxMzA4LDcgQEAKICAgICB9CiAKIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY29uZmlndXJhdGlvbiwgeW91IGNhbiBzZWUgdGhlIGByZWxldmFudAotc2VjdGlvbiA8aHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuMy90b3BpY3MvbG9nZ2luZy8jY29uZmlndXJpbmctbG9nZ2luZz5gXworc2VjdGlvbiA8aHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNi90b3BpY3MvbG9nZ2luZy8jY29uZmlndXJpbmctbG9nZ2luZz5gXwogb2YgdGhlIERqYW5nbyBkb2N1bWVudGF0aW9uLgogCiAuLiBfY29va2Jvb2stcm90YXRvci1uYW1lcjoKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9sb2dnaW5nLnJzdCBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdAppbmRleCA1NWIxYzg2Li40Y2UxNGY5IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKKysrIGIvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CkBAIC05MDEsMTAgKzkwMSwxMCBAQAogICAgZGlzayBmaWxlcywgcm90YXRpbmcgdGhlIGxvZyBmaWxlIGF0IGNlcnRhaW4gdGltZWQgaW50ZXJ2YWxzLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBUQ1AvSVAKLSAgIHNvY2tldHMuCisgICBzb2NrZXRzLiBTaW5jZSAzLjQsIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGFsc28gc3VwcG9ydGVkLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXJgIGluc3RhbmNlcyBzZW5kIG1lc3NhZ2VzIHRvIFVEUAotICAgc29ja2V0cy4KKyAgIHNvY2tldHMuIFNpbmNlIDMuNCwgVW5peCBkb21haW4gc29ja2V0cyBhcmUgYWxzbyBzdXBwb3J0ZWQuCiAKICMuIDpjbGFzczpgfmhhbmRsZXJzLlNNVFBIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBhIGRlc2lnbmF0ZWQKICAgIGVtYWlsIGFkZHJlc3MuCkBAIC0xMDI3LDYgKzEwMjcsMTUgQEAKIHNvIHRoYXQgaWYgdGhlIGxvZ2dlcidzIHRocmVzaG9sZCBpcyBzZXQgYWJvdmUgYGBERUJVR2BgLCB0aGUgY2FsbHMgdG8KIDpmdW5jOmBleHBlbnNpdmVfZnVuYzFgIGFuZCA6ZnVuYzpgZXhwZW5zaXZlX2Z1bmMyYCBhcmUgbmV2ZXIgbWFkZS4KIAorLi4gbm90ZTo6IEluIHNvbWUgY2FzZXMsIDptZXRoOmB+TG9nZ2VyLmlzRW5hYmxlZEZvcmAgY2FuIGl0c2VsZiBiZSBtb3JlCisgICBleHBlbnNpdmUgdGhhbiB5b3UnZCBsaWtlIChlLmcuIGZvciBkZWVwbHkgbmVzdGVkIGxvZ2dlcnMgd2hlcmUgYW4gZXhwbGljaXQKKyAgIGxldmVsIGlzIG9ubHkgc2V0IGhpZ2ggdXAgaW4gdGhlIGxvZ2dlciBoaWVyYXJjaHkpLiBJbiBzdWNoIGNhc2VzIChvciBpZiB5b3UKKyAgIHdhbnQgdG8gYXZvaWQgY2FsbGluZyBhIG1ldGhvZCBpbiB0aWdodCBsb29wcyksIHlvdSBjYW4gY2FjaGUgdGhlIHJlc3VsdCBvZiBhCisgICBjYWxsIHRvIDptZXRoOmB+TG9nZ2VyLmlzRW5hYmxlZEZvcmAgaW4gYSBsb2NhbCBvciBpbnN0YW5jZSB2YXJpYWJsZSwgYW5kIHVzZQorICAgdGhhdCBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIG1ldGhvZCBlYWNoIHRpbWUuIFN1Y2ggYSBjYWNoZWQgdmFsdWUgd291bGQgb25seQorICAgbmVlZCB0byBiZSByZWNvbXB1dGVkIHdoZW4gdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGR5bmFtaWNhbGx5CisgICB3aGlsZSB0aGUgYXBwbGljYXRpb24gaXMgcnVubmluZyAod2hpY2ggaXMgbm90IGFsbCB0aGF0IGNvbW1vbikuCisKIFRoZXJlIGFyZSBvdGhlciBvcHRpbWl6YXRpb25zIHdoaWNoIGNhbiBiZSBtYWRlIGZvciBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgd2hpY2gKIG5lZWQgbW9yZSBwcmVjaXNlIGNvbnRyb2wgb3ZlciB3aGF0IGxvZ2dpbmcgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkLiBIZXJlJ3MgYQogbGlzdCBvZiB0aGluZ3MgeW91IGNhbiBkbyB0byBhdm9pZCBwcm9jZXNzaW5nIGR1cmluZyBsb2dnaW5nIHdoaWNoIHlvdSBkb24ndApAQCAtMTAzNiw2ICsxMDQ1LDEyIEBACiB8IFdoYXQgeW91IGRvbid0IHdhbnQgdG8gY29sbGVjdCAgICAgICAgICAgICAgICB8IEhvdyB0byBhdm9pZCBjb2xsZWN0aW5nIGl0ICAgICAgICAgICAgIHwKICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwogfCBJbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBjYWxscyB3ZXJlIG1hZGUgZnJvbS4gfCBTZXQgYGBsb2dnaW5nLl9zcmNmaWxlYGAgdG8gYGBOb25lYGAuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgYXZvaWRzIGNhbGxpbmcgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmZ1bmM6YHN5cy5fZ2V0ZnJhbWVgLCB3aGljaCBtYXkgaGVscCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0byBzcGVlZCB1cCB5b3VyIGNvZGUgaW4gZW52aXJvbm1lbnRzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxpa2UgUHlQeSAod2hpY2ggY2FuJ3Qgc3BlZWQgdXAgY29kZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCB1c2VzIDpmdW5jOmBzeXMuX2dldGZyYW1lYCksIGlmICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgd2hlbiBQeVB5IHN1cHBvcnRzIFB5dGhvbiAzLnguICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgVGhyZWFkaW5nIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgIHwgU2V0IGBgbG9nZ2luZy5sb2dUaHJlYWRzYGAgdG8gYGAwYGAuICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vcmVnZXgucnN0IGIvRG9jL2hvd3RvL3JlZ2V4LnJzdAppbmRleCA1MjAzZTUzLi5mYmU3NjNiIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vcmVnZXgucnN0CisrKyBiL0RvYy9ob3d0by9yZWdleC5yc3QKQEAgLTI3MSw4ICsyNzEsOCBAQAogCiAgICA+Pj4gaW1wb3J0IHJlCiAgICA+Pj4gcCA9IHJlLmNvbXBpbGUoJ2FiKicpCi0gICA+Pj4gcCAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgPF9zcmUuU1JFX1BhdHRlcm4gb2JqZWN0IGF0IDB4Li4uPgorICAgPj4+IHAKKyAgIHJlLmNvbXBpbGUoJ2FiKicpCiAKIDpmdW5jOmByZS5jb21waWxlYCBhbHNvIGFjY2VwdHMgYW4gb3B0aW9uYWwgKmZsYWdzKiBhcmd1bWVudCwgdXNlZCB0byBlbmFibGUKIHZhcmlvdXMgc3BlY2lhbCBmZWF0dXJlcyBhbmQgc3ludGF4IHZhcmlhdGlvbnMuICBXZSdsbCBnbyBvdmVyIHRoZSBhdmFpbGFibGUKQEAgLTM4Myw4ICszODMsOCBAQAogCiAgICA+Pj4gaW1wb3J0IHJlCiAgICA+Pj4gcCA9IHJlLmNvbXBpbGUoJ1thLXpdKycpCi0gICA+Pj4gcCAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgPF9zcmUuU1JFX1BhdHRlcm4gb2JqZWN0IGF0IDB4Li4uPgorICAgPj4+IHAKKyAgIHJlLmNvbXBpbGUoJ1thLXpdKycpCiAKIE5vdywgeW91IGNhbiB0cnkgbWF0Y2hpbmcgdmFyaW91cyBzdHJpbmdzIGFnYWluc3QgdGhlIFJFIGBgW2Etel0rYGAuICBBbiBlbXB0eQogc3RyaW5nIHNob3VsZG4ndCBtYXRjaCBhdCBhbGwsIHNpbmNlIGBgK2BgIG1lYW5zICdvbmUgb3IgbW9yZSByZXBldGl0aW9ucycuCkBAIC00MDIsNyArNDAyLDcgQEAKIAogICAgPj4+IG0gPSBwLm1hdGNoKCd0ZW1wbycpCiAgICA+Pj4gbSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDUpLCBtYXRjaD0ndGVtcG8nPgogCiBOb3cgeW91IGNhbiBxdWVyeSB0aGUgOnJlZjpgbWF0Y2ggb2JqZWN0IDxtYXRjaC1vYmplY3RzPmAgZm9yIGluZm9ybWF0aW9uCiBhYm91dCB0aGUgbWF0Y2hpbmcgc3RyaW5nLiAgOnJlZjpgbWF0Y2ggb2JqZWN0IDxtYXRjaC1vYmplY3RzPmAgaW5zdGFuY2VzCkBAIC00NDEsNyArNDQxLDcgQEAKICAgID4+PiBwcmludChwLm1hdGNoKCc6OjogbWVzc2FnZScpKQogICAgTm9uZQogICAgPj4+IG0gPSBwLnNlYXJjaCgnOjo6IG1lc3NhZ2UnKTsgcHJpbnQobSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg0LCAxMSksIG1hdGNoPSdtZXNzYWdlJz4KICAgID4+PiBtLmdyb3VwKCkKICAgICdtZXNzYWdlJwogICAgPj4+IG0uc3BhbigpCkBAIC00OTMsNyArNDkzLDcgQEAKICAgID4+PiBwcmludChyZS5tYXRjaChyJ0Zyb21ccysnLCAnRnJvbWFnZSBhbWsnKSkKICAgIE5vbmUKICAgID4+PiByZS5tYXRjaChyJ0Zyb21ccysnLCAnRnJvbSBhbWsgVGh1IE1heSAxNCAxOToxMjoxMCAxOTk4JykgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA1KSwgbWF0Y2g9J0Zyb20gJz4KIAogVW5kZXIgdGhlIGhvb2QsIHRoZXNlIGZ1bmN0aW9ucyBzaW1wbHkgY3JlYXRlIGEgcGF0dGVybiBvYmplY3QgZm9yIHlvdQogYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBvbiBpdC4gIFRoZXkgYWxzbyBzdG9yZSB0aGUgY29tcGlsZWQKQEAgLTY4NSw3ICs2ODUsNyBAQAogICAgbGluZSwgdGhlIFJFIHRvIHVzZSBpcyBgYF5Gcm9tYGAuIDo6CiAKICAgICAgID4+PiBwcmludChyZS5zZWFyY2goJ15Gcm9tJywgJ0Zyb20gSGVyZSB0byBFdGVybml0eScpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDQpLCBtYXRjaD0nRnJvbSc+CiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCdeRnJvbScsICdSZWNpdGluZyBGcm9tIE1lbW9yeScpKQogICAgICAgTm9uZQogCkBAIC02OTcsMTEgKzY5NywxMSBAQAogICAgb3IgYW55IGxvY2F0aW9uIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBjaGFyYWN0ZXIuICAgICA6OgogCiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCd9JCcsICd7YmxvY2t9JykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oNiwgNyksIG1hdGNoPSd9Jz4KICAgICAgID4+PiBwcmludChyZS5zZWFyY2goJ30kJywgJ3tibG9ja30gJykpCiAgICAgICBOb25lCiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCd9JCcsICd7YmxvY2t9XG4nKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg2LCA3KSwgbWF0Y2g9J30nPgogCiAgICBUbyBtYXRjaCBhIGxpdGVyYWwgYGAnJCdgYCwgdXNlIGBgXCRgYCBvciBlbmNsb3NlIGl0IGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcywKICAgIGFzIGluICBgYFskXWBgLgpAQCAtNzI2LDcgKzcyNiw3IEBACiAKICAgICAgID4+PiBwID0gcmUuY29tcGlsZShyJ1xiY2xhc3NcYicpCiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ25vIGNsYXNzIGF0IGFsbCcpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDMsIDgpLCBtYXRjaD0nY2xhc3MnPgogICAgICAgPj4+IHByaW50KHAuc2VhcmNoKCd0aGUgZGVjbGFzc2lmaWVkIGFsZ29yaXRobScpKQogICAgICAgTm9uZQogICAgICAgPj4+IHByaW50KHAuc2VhcmNoKCdvbmUgc3ViY2xhc3MgaXMnKSkKQEAgLTc0NCw3ICs3NDQsNyBAQAogICAgICAgPj4+IHByaW50KHAuc2VhcmNoKCdubyBjbGFzcyBhdCBhbGwnKSkKICAgICAgIE5vbmUKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnXGInICsgJ2NsYXNzJyArICdcYicpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDcpLCBtYXRjaD0nXHgwOGNsYXNzXHgwOCc+CiAKICAgIFNlY29uZCwgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCB3aGVyZSB0aGVyZSdzIG5vIHVzZSBmb3IgdGhpcyBhc3NlcnRpb24sCiAgICBgYFxiYGAgcmVwcmVzZW50cyB0aGUgYmFja3NwYWNlIGNoYXJhY3RlciwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24ncwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3NvY2tldHMucnN0IGIvRG9jL2hvd3RvL3NvY2tldHMucnN0CmluZGV4IDdhOWIwZWQuLmQ1YWZmOTAgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9zb2NrZXRzLnJzdAorKysgYi9Eb2MvaG93dG8vc29ja2V0cy5yc3QKQEAgLTE4MCw3ICsxODAsNyBAQAogQXNzdW1pbmcgeW91IGRvbid0IHdhbnQgdG8gZW5kIHRoZSBjb25uZWN0aW9uLCB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgYSBmaXhlZAogbGVuZ3RoIG1lc3NhZ2U6OgogCi0gICBjbGFzcyBteXNvY2tldDoKKyAgIGNsYXNzIE15U29ja2V0OgogICAgICAgICIiImRlbW9uc3RyYXRpb24gY2xhc3Mgb25seQogICAgICAgICAgLSBjb2RlZCBmb3IgY2xhcml0eSwgbm90IGVmZmljaWVuY3kKICAgICAgICAiIiIKQEAgLTE4OSw4ICsxODksOCBAQAogICAgICAgICAgICBpZiBzb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKKyAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKIAogICAgICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3QsIHBvcnQpOgogICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdCgoaG9zdCwgcG9ydCkpCkBAIC0yMDQsMTMgKzIwNCwxNSBAQAogICAgICAgICAgICAgICAgdG90YWxzZW50ID0gdG90YWxzZW50ICsgc2VudAogCiAgICAgICAgZGVmIG15cmVjZWl2ZShzZWxmKToKLSAgICAgICAgICAgbXNnID0gYicnCi0gICAgICAgICAgIHdoaWxlIGxlbihtc2cpIDwgTVNHTEVOOgotICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnNvY2sucmVjdihNU0dMRU4tbGVuKG1zZykpCisgICAgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgICAgIGJ5dGVzX3JlY2QgPSAwCisgICAgICAgICAgIHdoaWxlIGJ5dGVzX3JlY2QgPCBNU0dMRU46CisgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuc29jay5yZWN2KG1pbihNU0dMRU4gLSBieXRlc19yZWNkLCAyMDQ4KSkKICAgICAgICAgICAgICAgIGlmIGNodW5rID09IGInJzoKICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInNvY2tldCBjb25uZWN0aW9uIGJyb2tlbiIpCi0gICAgICAgICAgICAgICBtc2cgPSBtc2cgKyBjaHVuawotICAgICAgICAgICByZXR1cm4gbXNnCisgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGNodW5rKQorICAgICAgICAgICAgICAgYnl0ZXNfcmVjZCA9IGJ5dGVzX3JlY2QgKyBsZW4oY2h1bmspCisgICAgICAgICAgIHJldHVybiBiJycuam9pbihjaHVua3MpCiAKIFRoZSBzZW5kaW5nIGNvZGUgaGVyZSBpcyB1c2FibGUgZm9yIGFsbW9zdCBhbnkgbWVzc2FnaW5nIHNjaGVtZSAtIGluIFB5dGhvbiB5b3UKIHNlbmQgc3RyaW5ncywgYW5kIHlvdSBjYW4gdXNlIGBgbGVuKClgYCB0byBkZXRlcm1pbmUgaXRzIGxlbmd0aCAoZXZlbiBpZiBpdCBoYXMKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91bmljb2RlLnJzdCBiL0RvYy9ob3d0by91bmljb2RlLnJzdAppbmRleCA5ZDQ4YTc4Li42MzJlNTI1IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdW5pY29kZS5yc3QKKysrIGIvRG9jL2hvd3RvL3VuaWNvZGUucnN0CkBAIC00OSw3ICs0OSw3IEBACiAKIDI1NSBjaGFyYWN0ZXJzIGFyZW4ndCB2ZXJ5IG1hbnkuICBGb3IgZXhhbXBsZSwgeW91IGNhbid0IGZpdCBib3RoIHRoZSBhY2NlbnRlZAogY2hhcmFjdGVycyB1c2VkIGluIFdlc3Rlcm4gRXVyb3BlIGFuZCB0aGUgQ3lyaWxsaWMgYWxwaGFiZXQgdXNlZCBmb3IgUnVzc2lhbgotaW50byB0aGUgMTI4LS0yNTUgcmFuZ2UgYmVjYXVzZSB0aGVyZSBhcmUgbW9yZSB0aGFuIDEyNyBzdWNoIGNoYXJhY3RlcnMuCitpbnRvIHRoZSAxMjgtLTI1NSByYW5nZSBiZWNhdXNlIHRoZXJlIGFyZSBtb3JlIHRoYW4gMTI4IHN1Y2ggY2hhcmFjdGVycy4KIAogWW91IGNvdWxkIHdyaXRlIGZpbGVzIHVzaW5nIGRpZmZlcmVudCBjb2RlcyAoYWxsIHlvdXIgUnVzc2lhbiBmaWxlcyBpbiBhIGNvZGluZwogc3lzdGVtIGNhbGxlZCBLT0k4LCBhbGwgeW91ciBGcmVuY2ggZmlsZXMgaW4gYSBkaWZmZXJlbnQgY29kaW5nIHN5c3RlbSBjYWxsZWQKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgdHJ5OgogICAgICAgIHdpdGggb3BlbignL3RtcC9pbnB1dC50eHQnLCAncicpIGFzIGY6CiAgICAgICAgICAgIC4uLgotICAgZXhjZXB0IElPRXJyb3I6CisgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAjICdGaWxlIG5vdCBmb3VuZCcgZXJyb3IgbWVzc2FnZS4KICAgICAgICBwcmludCgiRmljaGllciBub24gdHJvdXbDqSIpCiAKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91cmxsaWIyLnJzdCBiL0RvYy9ob3d0by91cmxsaWIyLnJzdAppbmRleCA1YTIyNjYwLi41ODRlOGE2IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QKKysrIGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CkBAIC05Nyw3ICs5Nyw3IEBACiAtLS0tCiAKIFNvbWV0aW1lcyB5b3Ugd2FudCB0byBzZW5kIGRhdGEgdG8gYSBVUkwgKG9mdGVuIHRoZSBVUkwgd2lsbCByZWZlciB0byBhIENHSQotKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2NyaXB0IFsjXV8gb3Igb3RoZXIgd2ViIGFwcGxpY2F0aW9uKS4gV2l0aCBIVFRQLAorKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2NyaXB0IG9yIG90aGVyIHdlYiBhcHBsaWNhdGlvbikuIFdpdGggSFRUUCwKIHRoaXMgaXMgb2Z0ZW4gZG9uZSB1c2luZyB3aGF0J3Mga25vd24gYXMgYSAqKlBPU1QqKiByZXF1ZXN0LiBUaGlzIGlzIG9mdGVuIHdoYXQKIHlvdXIgYnJvd3NlciBkb2VzIHdoZW4geW91IHN1Ym1pdCBhIEhUTUwgZm9ybSB0aGF0IHlvdSBmaWxsZWQgaW4gb24gdGhlIHdlYi4gTm90CiBhbGwgUE9TVHMgaGF2ZSB0byBjb21lIGZyb20gZm9ybXM6IHlvdSBjYW4gdXNlIGEgUE9TVCB0byB0cmFuc21pdCBhcmJpdHJhcnkgZGF0YQpAQCAtNTA3LDcgKzUwNyw3IEBACiAgICAgLS0gYGBQcm94eUhhbmRsZXJgYCAoaWYgYSBwcm94eSBzZXR0aW5nIHN1Y2ggYXMgYW4gOmVudnZhcjpgaHR0cF9wcm94eWAKICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQpLCBgYFVua25vd25IYW5kbGVyYGAsIGBgSFRUUEhhbmRsZXJgYCwKICAgICBgYEhUVFBEZWZhdWx0RXJyb3JIYW5kbGVyYGAsIGBgSFRUUFJlZGlyZWN0SGFuZGxlcmBgLCBgYEZUUEhhbmRsZXJgYCwKLSAgICBgYEZpbGVIYW5kbGVyYGAsIGBgSFRUUEVycm9yUHJvY2Vzc29yYGAuCisgICAgYGBGaWxlSGFuZGxlcmBgLCBgYERhdGFIYW5kbGVyYGAsIGBgSFRUUEVycm9yUHJvY2Vzc29yYGAuCiAKIGBgdG9wX2xldmVsX3VybGBgIGlzIGluIGZhY3QgKmVpdGhlciogYSBmdWxsIFVSTCAoaW5jbHVkaW5nIHRoZSAnaHR0cDonIHNjaGVtZQogY29tcG9uZW50IGFuZCB0aGUgaG9zdG5hbWUgYW5kIG9wdGlvbmFsbHkgdGhlIHBvcnQgbnVtYmVyKQpAQCAtNTcyLDggKzU3Miw2IEBACiAKIFRoaXMgZG9jdW1lbnQgd2FzIHJldmlld2VkIGFuZCByZXZpc2VkIGJ5IEpvaG4gTGVlLgogCi0uLiBbI10gRm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUgQ0dJIHByb3RvY29sIHNlZQotICAgICAgIGBXcml0aW5nIFdlYiBBcHBsaWNhdGlvbnMgaW4gUHl0aG9uIDxodHRwOi8vd3d3LnB5emluZS5jb20vSXNzdWUwMDgvU2VjdGlvbl9BcnRpY2xlcy9hcnRpY2xlX0NHSU9uZS5odG1sPmBfLgogLi4gWyNdIExpa2UgR29vZ2xlIGZvciBleGFtcGxlLiBUaGUgKnByb3Blciogd2F5IHRvIHVzZSBnb29nbGUgZnJvbSBhIHByb2dyYW0KICAgICAgICBpcyB0byB1c2UgYFB5R29vZ2xlIDxodHRwOi8vcHlnb29nbGUuc291cmNlZm9yZ2UubmV0PmBfIG9mIGNvdXJzZS4gU2VlCiAgICAgICAgYFZvaWRzcGFjZSBHb29nbGUgPGh0dHA6Ly93d3cudm9pZHNwYWNlLm9yZy51ay9weXRob24vcmVjaXBlYm9vay5zaHRtbCNnb29nbGU+YF8KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdCBiL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdAppbmRleCA3MmNjZDFmLi42ZmE1MWRhIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vd2Vic2VydmVycy5yc3QKKysrIGIvRG9jL2hvd3RvL3dlYnNlcnZlcnMucnN0CkBAIC02ODcsNyArNjg3LDcgQEAKIFRoZSBuZXdlc3QgdmVyc2lvbiBvZiBUdXJib0dlYXJzLCB2ZXJzaW9uIDIuMCwgbW92ZXMgZXZlbiBmdXJ0aGVyIGluIGRpcmVjdGlvbgogb2YgV1NHSSBzdXBwb3J0IGFuZCBhIGNvbXBvbmVudC1iYXNlZCBhcmNoaXRlY3R1cmUuICBUdXJib0dlYXJzIDIgaXMgYmFzZWQgb24KIHRoZSBXU0dJIHN0YWNrIG9mIGFub3RoZXIgcG9wdWxhciBjb21wb25lbnQtYmFzZWQgd2ViIGZyYW1ld29yaywgYFB5bG9ucwotPGh0dHA6Ly9weWxvbnNocS5jb20vPmBfLgorPGh0dHA6Ly93d3cucHlsb25zcHJvamVjdC5vcmcvPmBfLgogCiAKIFpvcGUKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyNTVhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5CkBAIC0wLDAgKzEsNTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworaW1wb3J0IHNtdHBsaWIKKworZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBFbWFpbE1lc3NhZ2UKK2Zyb20gZW1haWwuaGVhZGVycmVnaXN0cnkgaW1wb3J0IEFkZHJlc3MKK2Zyb20gZW1haWwudXRpbHMgaW1wb3J0IG1ha2VfbXNnaWQKKworIyBDcmVhdGUgdGhlIGJhc2UgdGV4dCBtZXNzYWdlLgorbXNnID0gRW1haWxNZXNzYWdlKCkKK21zZ1snU3ViamVjdCddID0gIkF5b25zIGFzcGVyZ2VzIHBvdXIgbGUgZMOpamV1bmVyIgorbXNnWydGcm9tJ10gPSBBZGRyZXNzKCJQZXDDqSBMZSBQZXciLCAicGVwZUBleGFtcGxlLmNvbSIpCittc2dbJ1RvJ10gPSAoQWRkcmVzcygiUGVuZWxvcGUgUHVzc3ljYXQiLCAicGVuZWxvcGVAZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgICBBZGRyZXNzKCJGYWJyZXR0ZSBQdXNzeWNhdCIsICJmYWJyZXR0ZUBleGFtcGxlLmNvbSIpKQorbXNnLnNldF9jb250ZW50KCIiIlwKK1NhbHV0IQorCitDZWxhIHJlc3NlbWJsZSDDoCB1biBleGNlbGxlbnQgcmVjaXBpZVsxXSBkw6lqZXVuZXIuCisKK1sxXSBodHRwOi8vd3d3Lnl1bW1seS5jb20vcmVjaXBlL1JvYXN0ZWQtQXNwYXJhZ3VzLUVwaWN1cmlvdXMtMjAzNzE4CisKKy0tUGVww6kKKyIiIikKKworIyBBZGQgdGhlIGh0bWwgdmVyc2lvbi4gIFRoaXMgY29udmVydHMgdGhlIG1lc3NhZ2UgaW50byBhIG11bHRpcGFydC9hbHRlcm5hdGl2ZQorIyBjb250YWluZXIsIHdpdGggdGhlIG9yaWdpbmFsIHRleHQgbWVzc2FnZSBhcyB0aGUgZmlyc3QgcGFydCBhbmQgdGhlIG5ldyBodG1sCisjIG1lc3NhZ2UgYXMgdGhlIHNlY29uZCBwYXJ0LgorYXNwYXJhZ3VzX2NpZCA9IG1ha2VfbXNnaWQoKQorbXNnLmFkZF9hbHRlcm5hdGl2ZSgiIiJcCis8aHRtbD4KKyAgPGhlYWQ+PC9oZWFkPgorICA8Ym9keT4KKyAgICA8cD5TYWx1dCE8XHA+CisgICAgPHA+Q2VsYSByZXNzZW1ibGUgw6AgdW4gZXhjZWxsZW50CisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cueXVtbWx5LmNvbS9yZWNpcGUvUm9hc3RlZC1Bc3BhcmFndXMtRXBpY3VyaW91cy0yMDM3MTg+CisgICAgICAgICAgICByZWNpcGllCisgICAgICAgIDwvYT4gZMOpamV1bmVyLgorICAgIDwvcD4KKyAgICA8aW1nIHNyYz0iY2lkOnthc3BhcmFndXNfY2lkfSIgXD4KKyAgPC9ib2R5PgorPC9odG1sPgorIiIiLmZvcm1hdChhc3BhcmFndXNfY2lkPWFzcGFyYWd1c19jaWRbMTotMV0pLCBzdWJ0eXBlPSdodG1sJykKKyMgbm90ZSB0aGF0IHdlIG5lZWRlZCB0byBwZWVsIHRoZSA8PiBvZmYgdGhlIG1zZ2lkIGZvciB1c2UgaW4gdGhlIGh0bWwuCisKKyMgTm93IGFkZCB0aGUgcmVsYXRlZCBpbWFnZSB0byB0aGUgaHRtbCBwYXJ0Lgord2l0aCBvcGVuKCJyb2FzdGVkLWFzcGFyYWd1cy5qcGciLCAncmInKSBhcyBpbWc6CisgICAgbXNnLmdldF9wYXlsb2FkKClbMV0uYWRkX3JlbGF0ZWQoaW1nLnJlYWQoKSwgJ2ltYWdlJywgJ2pwZWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZD1hc3BhcmFndXNfY2lkKQorCisjIE1ha2UgYSBsb2NhbCBjb3B5IG9mIHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQuCit3aXRoIG9wZW4oJ291dGdvaW5nLm1zZycsICd3YicpIGFzIGY6CisgICAgZi53cml0ZShieXRlcyhtc2cpKQorCisjIFNlbmQgdGhlIG1lc3NhZ2UgdmlhIGxvY2FsIFNNVFAgc2VydmVyLgord2l0aCBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpIGFzIHM6CisgICAgcy5zZW5kX21lc3NhZ2UobXNnKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKaW5kZXggY2M1NTI5ZS4uM2M3Yzc3MCAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CkBAIC04LDcgKzgsNyBAQAogIyBGb3IgZ3Vlc3NpbmcgTUlNRSB0eXBlIGJhc2VkIG9uIGZpbGUgbmFtZSBleHRlbnNpb24KIGltcG9ydCBtaW1ldHlwZXMKIAotZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCitmcm9tIGFyZ3BhcnNlIGltcG9ydCBBcmd1bWVudFBhcnNlcgogCiBmcm9tIGVtYWlsIGltcG9ydCBlbmNvZGVycwogZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCkBAIC0yMiw0NCArMjIsMzYgQEAKIAogCiBkZWYgbWFpbigpOgotICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT0iIiJcCisgICAgcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IiIiXAogU2VuZCB0aGUgY29udGVudHMgb2YgYSBkaXJlY3RvcnkgYXMgYSBNSU1FIG1lc3NhZ2UuCi0KLVVzYWdlOiAlcHJvZyBbb3B0aW9uc10KLQogVW5sZXNzIHRoZSAtbyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBlbWFpbCBpcyBzZW50IGJ5IGZvcndhcmRpbmcgdG8geW91ciBsb2NhbAogU01UUCBzZXJ2ZXIsIHdoaWNoIHRoZW4gZG9lcyB0aGUgbm9ybWFsIGRlbGl2ZXJ5IHByb2Nlc3MuICBZb3VyIGxvY2FsIG1hY2hpbmUKIG11c3QgYmUgcnVubmluZyBhbiBTTVRQIHNlcnZlci4KICIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kaXJlY3RvcnknLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiTWFpbCB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBPbmx5IHRoZSByZWd1bGFyCi0gICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgc2VudCwgYW5kIHdlIGRvbid0IHJlY3Vyc2UgdG8KLSAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcmllcy4iIiIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3V0cHV0JywKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J3N0b3JlJywgbWV0YXZhcj0nRklMRScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJQcmludCB0aGUgY29tcG9zZWQgbWVzc2FnZSB0byBGSUxFIGluc3RlYWQgb2YKLSAgICAgICAgICAgICAgICAgICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc2VuZGVyJywKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J3N0b3JlJywgbWV0YXZhcj0nU0VOREVSJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUaGUgdmFsdWUgb2YgdGhlIEZyb206IGhlYWRlciAocmVxdWlyZWQpJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXInLCAnLS1yZWNpcGllbnQnLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nYXBwZW5kJywgbWV0YXZhcj0nUkVDSVBJRU5UJywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBkZXN0PSdyZWNpcGllbnRzJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBIFRvOiBoZWFkZXIgdmFsdWUgKGF0IGxlYXN0IG9uZSByZXF1aXJlZCknKQotICAgIG9wdHMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgbm90IG9wdHMuc2VuZGVyIG9yIG5vdCBvcHRzLnJlY2lwaWVudHM6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBkaXJlY3RvcnkgPSBvcHRzLmRpcmVjdG9yeQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGlyZWN0b3J5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiTWFpbCB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9ubHkgdGhlIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXJlIHNlbnQsIGFuZCB3ZSBkb24ndCByZWN1cnNlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcmllcy4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRwdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nRklMRScsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlByaW50IHRoZSBjb21wb3NlZCBtZXNzYWdlIHRvIEZJTEUgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGluZyB0aGUgbWVzc2FnZSB0byB0aGUgU01UUCBzZXJ2ZXIuIiIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2VuZGVyJywgcmVxdWlyZWQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2YWx1ZSBvZiB0aGUgRnJvbTogaGVhZGVyIChyZXF1aXJlZCknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmVjaXBpZW50JywgcmVxdWlyZWQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nYXBwZW5kJywgbWV0YXZhcj0nUkVDSVBJRU5UJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGRlc3Q9J3JlY2lwaWVudHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQSBUbzogaGVhZGVyIHZhbHVlIChhdCBsZWFzdCBvbmUgcmVxdWlyZWQpJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGRpcmVjdG9yeSA9IGFyZ3MuZGlyZWN0b3J5CiAgICAgaWYgbm90IGRpcmVjdG9yeToKICAgICAgICAgZGlyZWN0b3J5ID0gJy4nCiAgICAgIyBDcmVhdGUgdGhlIGVuY2xvc2luZyAob3V0ZXIpIG1lc3NhZ2UKICAgICBvdXRlciA9IE1JTUVNdWx0aXBhcnQoKQogICAgIG91dGVyWydTdWJqZWN0J10gPSAnQ29udGVudHMgb2YgZGlyZWN0b3J5ICVzJyAlIG9zLnBhdGguYWJzcGF0aChkaXJlY3RvcnkpCi0gICAgb3V0ZXJbJ1RvJ10gPSBDT01NQVNQQUNFLmpvaW4ob3B0cy5yZWNpcGllbnRzKQotICAgIG91dGVyWydGcm9tJ10gPSBvcHRzLnNlbmRlcgorICAgIG91dGVyWydUbyddID0gQ09NTUFTUEFDRS5qb2luKGFyZ3MucmVjaXBpZW50cykKKyAgICBvdXRlclsnRnJvbSddID0gYXJncy5zZW5kZXIKICAgICBvdXRlci5wcmVhbWJsZSA9ICdZb3Ugd2lsbCBub3Qgc2VlIHRoaXMgaW4gYSBNSU1FLWF3YXJlIG1haWwgcmVhZGVyLlxuJwogCiAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoZGlyZWN0b3J5KToKQEAgLTc2LDIzICs2OCwxOSBAQAogICAgICAgICAgICAgY3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJwogICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IGN0eXBlLnNwbGl0KCcvJywgMSkKICAgICAgICAgaWYgbWFpbnR5cGUgPT0gJ3RleHQnOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgpCi0gICAgICAgICAgICAjIE5vdGU6IHdlIHNob3VsZCBoYW5kbGUgY2FsY3VsYXRpbmcgdGhlIGNoYXJzZXQKLSAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAjIE5vdGU6IHdlIHNob3VsZCBoYW5kbGUgY2FsY3VsYXRpbmcgdGhlIGNoYXJzZXQKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FVGV4dChmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCiAgICAgICAgIGVsaWYgbWFpbnR5cGUgPT0gJ2ltYWdlJzoKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUltYWdlKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FSW1hZ2UoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQogICAgICAgICBlbGlmIG1haW50eXBlID09ICdhdWRpbyc6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCwgJ3JiJykKLSAgICAgICAgICAgIG1zZyA9IE1JTUVBdWRpbyhmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRUF1ZGlvKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCi0gICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoZnAucmVhZCgpKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVCYXNlKG1haW50eXBlLCBzdWJ0eXBlKQorICAgICAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChmcC5yZWFkKCkpCiAgICAgICAgICAgICAjIEVuY29kZSB0aGUgcGF5bG9hZCB1c2luZyBCYXNlNjQKICAgICAgICAgICAgIGVuY29kZXJzLmVuY29kZV9iYXNlNjQobXNnKQogICAgICAgICAjIFNldCB0aGUgZmlsZW5hbWUgcGFyYW1ldGVyCkBAIC0xMDAsMTQgKzg4LDEyIEBACiAgICAgICAgIG91dGVyLmF0dGFjaChtc2cpCiAgICAgIyBOb3cgc2VuZCBvciBzdG9yZSB0aGUgbWVzc2FnZQogICAgIGNvbXBvc2VkID0gb3V0ZXIuYXNfc3RyaW5nKCkKLSAgICBpZiBvcHRzLm91dHB1dDoKLSAgICAgICAgZnAgPSBvcGVuKG9wdHMub3V0cHV0LCAndycpCi0gICAgICAgIGZwLndyaXRlKGNvbXBvc2VkKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgaWYgYXJncy5vdXRwdXQ6CisgICAgICAgIHdpdGggb3BlbihhcmdzLm91dHB1dCwgJ3cnKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGNvbXBvc2VkKQogICAgIGVsc2U6Ci0gICAgICAgIHMgPSBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpCi0gICAgICAgIHMuc2VuZG1haWwob3B0cy5zZW5kZXIsIG9wdHMucmVjaXBpZW50cywgY29tcG9zZWQpCi0gICAgICAgIHMucXVpdCgpCisgICAgICAgIHdpdGggc210cGxpYi5TTVRQKCdsb2NhbGhvc3QnKSBhcyBzOgorICAgICAgICAgICAgcy5zZW5kbWFpbChhcmdzLnNlbmRlciwgYXJncy5yZWNpcGllbnRzLCBjb21wb3NlZCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLXJlYWQtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1yZWFkLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiNGU5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1yZWFkLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKQEAgLTAsMCArMSw3NCBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBtaW1ldHlwZXMKK2ltcG9ydCB3ZWJicm93c2VyCisKKyMgSW1wb3J0IHRoZSBlbWFpbCBtb2R1bGVzIHdlJ2xsIG5lZWQKK2Zyb20gZW1haWwgaW1wb3J0IHBvbGljeQorZnJvbSBlbWFpbC5wYXJzZXIgaW1wb3J0IEJ5dGVzUGFyc2VyCisKKyMgQW4gaW1hZ2luYXJ5IG1vZHVsZSB0aGF0IHdvdWxkIG1ha2UgdGhpcyB3b3JrIGFuZCBiZSBzYWZlLgorZnJvbSBpbWFnaW5hcnkgaW1wb3J0IG1hZ2ljX2h0bWxfcGFyc2VyCisKKyMgSW4gYSByZWFsIHByb2dyYW0geW91J2QgZ2V0IHRoZSBmaWxlbmFtZSBmcm9tIHRoZSBhcmd1bWVudHMuCittc2cgPSBCeXRlc1BhcnNlcihwb2xpY3k9cG9saWN5LmRlZmF1bHQpLnBhcnNlKG9wZW4oJ291dGdvaW5nLm1zZycsICdyYicpKQorCisjIE5vdyB0aGUgaGVhZGVyIGl0ZW1zIGNhbiBiZSBhY2Nlc3NlZCBhcyBhIGRpY3Rpb25hcnksIGFuZCBhbnkgbm9uLUFTQ0lJIHdpbGwKKyMgYmUgY29udmVydGVkIHRvIHVuaWNvZGU6CitwcmludCgnVG86JywgbXNnWyd0byddKQorcHJpbnQoJ0Zyb206JywgbXNnWydmcm9tJ10pCitwcmludCgnU3ViamVjdDonLCBtc2dbJ3N1YmplY3QnXSkKKworIyBJZiB3ZSB3YW50IHRvIHByaW50IGEgcHJpdmlldyBvZiB0aGUgbWVzc2FnZSBjb250ZW50LCB3ZSBjYW4gZXh0cmFjdCB3aGF0ZXZlcgorIyB0aGUgbGVhc3QgZm9ybWF0dGVkIHBheWxvYWQgaXMgYW5kIHByaW50IHRoZSBmaXJzdCB0aHJlZSBsaW5lcy4gIE9mIGNvdXJzZSwKKyMgaWYgdGhlIG1lc3NhZ2UgaGFzIG5vIHBsYWluIHRleHQgcGFydCBwcmludGluZyB0aGUgZmlyc3QgdGhyZWUgbGluZXMgb2YgaHRtbAorIyBpcyBwcm9iYWJseSB1c2VsZXNzLCBidXQgdGhpcyBpcyBqdXN0IGEgY29uY2VwdHVhbCBleGFtcGxlLgorc2ltcGxlc3QgPSBtc2cuZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdwbGFpbicsICdodG1sJykpCitwcmludCgpCitwcmludCgnJy5qb2luKHNpbXBsZXN0LmdldF9jb250ZW50KCkuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKVs6M10pKQorCithbnMgPSBpbnB1dCgiVmlldyBmdWxsIG1lc3NhZ2U/IikKK2lmIGFucy5sb3dlcigpWzBdID09ICduJzoKKyAgICBzeXMuZXhpdCgpCisKKyMgV2UgY2FuIGV4dHJhY3QgdGhlIHJpY2hlc3QgYWx0ZXJuYXRpdmUgaW4gb3JkZXIgdG8gZGlzcGxheSBpdDoKK3JpY2hlc3QgPSBtc2cuZ2V0X2JvZHkoKQorcGFydGZpbGVzID0ge30KK2lmIHJpY2hlc3RbJ2NvbnRlbnQtdHlwZSddLm1haW50eXBlID09ICd0ZXh0JzoKKyAgICBpZiByaWNoZXN0Wydjb250ZW50LXR5cGUnXS5zdWJ0eXBlID09ICdwbGFpbic6CisgICAgICAgIGZvciBsaW5lIGluIHJpY2hlc3QuZ2V0X2NvbnRlbnQoKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBwcmludChsaW5lKQorICAgICAgICBzeXMuZXhpdCgpCisgICAgZWxpZiByaWNoZXN0Wydjb250ZW50LXR5cGUnXS5zdWJ0eXBlID09ICdodG1sJzoKKyAgICAgICAgYm9keSA9IHJpY2hlc3QKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiRG9uJ3Qga25vdyBob3cgdG8gZGlzcGxheSB7fSIuZm9ybWF0KHJpY2hlc3QuZ2V0X2NvbnRlbnRfdHlwZSgpKSkKKyAgICAgICAgc3lzLmV4aXQoKQorZWxpZiByaWNoZXN0Wydjb250ZW50LXR5cGUnXS5jb250ZW50X3R5cGUgPT0gJ211bHRpcGFydC9yZWxhdGVkJzoKKyAgICBib2R5ID0gcmljaGVzdC5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ2h0bWwnKSkKKyAgICBmb3IgcGFydCBpbiByaWNoZXN0Lml0ZXJfYXR0YWNobWVudHMoKToKKyAgICAgICAgZm4gPSBwYXJ0LmdldF9maWxlbmFtZSgpCisgICAgICAgIGlmIGZuOgorICAgICAgICAgICAgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChwYXJ0LmdldF9maWxlbmFtZSgpKVsxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0ZW5zaW9uID0gbWltZXR5cGVzLmd1ZXNzX2V4dGVuc2lvbihwYXJ0LmdldF9jb250ZW50X3R5cGUoKSkKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoc3VmZml4PWV4dGVuc2lvbiwgZGVsZXRlPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShwYXJ0LmdldF9jb250ZW50KCkpCisgICAgICAgICAgICAjIGFnYWluIHN0cmlwIHRoZSA8PiB0byBnbyBmcm9tIGVtYWlsIGZvcm0gb2YgY2lkIHRvIGh0bWwgZm9ybS4KKyAgICAgICAgICAgIHBhcnRmaWxlc1twYXJ0Wydjb250ZW50LWlkJ11bMTotMV1dID0gZi5uYW1lCitlbHNlOgorICAgIHByaW50KCJEb24ndCBrbm93IGhvdyB0byBkaXNwbGF5IHt9Ii5mb3JtYXQocmljaGVzdC5nZXRfY29udGVudF90eXBlKCkpKQorICAgIHN5cy5leGl0KCkKK3dpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3cnLCBkZWxldGU9RmFsc2UpIGFzIGY6CisgICAgIyBUaGUgbWFnaWNfaHRtbF9wYXJzZXIgaGFzIHRvIHJld3JpdGUgdGhlIGhyZWY9ImNpZDouLi4uIiBhdHRyaWJ1dGVzIHRvCisgICAgIyBwb2ludCB0byB0aGUgZmlsZW5hbWVzIGluIHBhcnRmaWxlcy4gIEl0IGFsc28gaGFzIHRvIGRvIGEgc2FmZXR5LXNhbml0aXplCisgICAgIyBvZiB0aGUgaHRtbC4gIEl0IGNvdWxkIGJlIHdyaXR0ZW4gdXNpbmcgaHRtbC5wYXJzZXIuCisgICAgZi53cml0ZShtYWdpY19odG1sX3BhcnNlcihib2R5LmdldF9jb250ZW50KCksIHBhcnRmaWxlcykpCit3ZWJicm93c2VyLm9wZW4oZi5uYW1lKQorb3MucmVtb3ZlKGYubmFtZSkKK2ZvciBmbiBpbiBwYXJ0ZmlsZXMudmFsdWVzKCk6CisgICAgb3MucmVtb3ZlKGZuKQorCisjIE9mIGNvdXJzZSwgdGhlcmUgYXJlIGxvdHMgb2YgZW1haWwgbWVzc2FnZXMgdGhhdCBjb3VsZCBicmVhayB0aGlzIHNpbXBsZQorIyBtaW5kZWQgcHJvZ3JhbSwgYnV0IGl0IHdpbGwgaGFuZGxlIHRoZSBtb3N0IGNvbW1vbiBvbmVzLgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKaW5kZXggMzY1MzU0My4uNTc0YTBiNiAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CkBAIC04LDQxICs4LDI3IEBACiBpbXBvcnQgZXJybm8KIGltcG9ydCBtaW1ldHlwZXMKIAotZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCitmcm9tIGFyZ3BhcnNlIGltcG9ydCBBcmd1bWVudFBhcnNlcgogCiAKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIiIlwKKyAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iIiJcCiBVbnBhY2sgYSBNSU1FIG1lc3NhZ2UgaW50byBhIGRpcmVjdG9yeSBvZiBmaWxlcy4KLQotVXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBtc2dmaWxlCiAiIiIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1kJywgJy0tZGlyZWN0b3J5JywKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J3N0b3JlJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlVucGFjayB0aGUgTUlNRSBtZXNzYWdlIGludG8gdGhlIG5hbWVkCi0gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgICAgICAgZXhpc3QuIiIiKQotICAgIG9wdHMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgbm90IG9wdHMuZGlyZWN0b3J5OgotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kaXJlY3RvcnknLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJVbnBhY2sgdGhlIE1JTUUgbWVzc2FnZSBpbnRvIHRoZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICBleGlzdC4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnbXNnZmlsZScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHdpdGggb3BlbihhcmdzLm1zZ2ZpbGUpIGFzIGZwOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCkKIAogICAgIHRyeToKLSAgICAgICAgbXNnZmlsZSA9IGFyZ3NbMF0KLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgdHJ5OgotICAgICAgICBvcy5ta2RpcihvcHRzLmRpcmVjdG9yeSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAjIElnbm9yZSBkaXJlY3RvcnkgZXhpc3RzIGVycm9yCi0gICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgcmFpc2UKLQotICAgIGZwID0gb3Blbihtc2dmaWxlKQotICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQotICAgIGZwLmNsb3NlKCkKKyAgICAgICAgb3MubWtkaXIoYXJncy5kaXJlY3RvcnkpCisgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgcGFzcwogCiAgICAgY291bnRlciA9IDEKICAgICBmb3IgcGFydCBpbiBtc2cud2FsaygpOgpAQCAtNTksOSArNDUsOCBAQAogICAgICAgICAgICAgICAgIGV4dCA9ICcuYmluJwogICAgICAgICAgICAgZmlsZW5hbWUgPSAncGFydC0lMDNkJXMnICUgKGNvdW50ZXIsIGV4dCkKICAgICAgICAgY291bnRlciArPSAxCi0gICAgICAgIGZwID0gb3Blbihvcy5wYXRoLmpvaW4ob3B0cy5kaXJlY3RvcnksIGZpbGVuYW1lKSwgJ3diJykKLSAgICAgICAgZnAud3JpdGUocGFydC5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihhcmdzLmRpcmVjdG9yeSwgZmlsZW5hbWUpLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHBhcnQuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weSBiL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzYzZWE5Li4wMDAwMDAwCi0tLSBhL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjM5ICswLDAgQEAKLSMKLSMgU2ltcGxlIGJlbmNobWFya3MgZm9yIHRoZSBtdWx0aXByb2Nlc3NpbmcgcGFja2FnZQotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KLWltcG9ydCB0aW1lCi1pbXBvcnQgbXVsdGlwcm9jZXNzaW5nCi1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgcXVldWUKLWltcG9ydCBnYwotCi1fdGltZXIgPSB0aW1lLnBlcmZfY291bnRlcgotCi1kZWx0YSA9IDEKLQotCi0jIyMjIFRFU1RfUVVFVUVTUEVFRAotCi1kZWYgcXVldWVzcGVlZF9mdW5jKHEsIGMsIGl0ZXJhdGlvbnMpOgotICAgIGEgPSAnMCcgKiAyNTYKLSAgICBjLmFjcXVpcmUoKQotICAgIGMubm90aWZ5KCkKLSAgICBjLnJlbGVhc2UoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgIHEucHV0KGEpCi0KLSAgICBxLnB1dCgnU1RPUCcpCi0KLWRlZiB0ZXN0X3F1ZXVlc3BlZWQoUHJvY2VzcywgcSwgYyk6Ci0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9cXVldWVzcGVlZF9mdW5jLCBhcmdzPShxLCBjLCBpdGVyYXRpb25zKSkKLSAgICAgICAgYy5hY3F1aXJlKCkKLSAgICAgICAgcC5zdGFydCgpCi0gICAgICAgIGMud2FpdCgpCi0gICAgICAgIGMucmVsZWFzZSgpCi0KLSAgICAgICAgcmVzdWx0ID0gTm9uZQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICB3aGlsZSByZXN1bHQgIT0gJ1NUT1AnOgotICAgICAgICAgICAgcmVzdWx0ID0gcS5nZXQoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLQotICAgICAgICBwLmpvaW4oKQotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ29iamVjdHMgcGFzc2VkIHRocm91Z2ggdGhlIHF1ZXVlIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9QSVBFU1BFRUQKLQotZGVmIHBpcGVfZnVuYyhjLCBjb25kLCBpdGVyYXRpb25zKToKLSAgICBhID0gJzAnICogMjU2Ci0gICAgY29uZC5hY3F1aXJlKCkKLSAgICBjb25kLm5vdGlmeSgpCi0gICAgY29uZC5yZWxlYXNlKCkKLQotICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICBjLnNlbmQoYSkKLQotICAgIGMuc2VuZCgnU1RPUCcpCi0KLWRlZiB0ZXN0X3BpcGVzcGVlZCgpOgotICAgIGMsIGQgPSBtdWx0aXByb2Nlc3NpbmcuUGlwZSgpCi0gICAgY29uZCA9IG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKQotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1waXBlX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShkLCBjb25kLCBpdGVyYXRpb25zKSkKLSAgICAgICAgY29uZC5hY3F1aXJlKCkKLSAgICAgICAgcC5zdGFydCgpCi0gICAgICAgIGNvbmQud2FpdCgpCi0gICAgICAgIGNvbmQucmVsZWFzZSgpCi0KLSAgICAgICAgcmVzdWx0ID0gTm9uZQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICB3aGlsZSByZXN1bHQgIT0gJ1NUT1AnOgotICAgICAgICAgICAgcmVzdWx0ID0gYy5yZWN2KCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0gICAgICAgIHAuam9pbigpCi0KLSAgICBwcmludChpdGVyYXRpb25zLCAnb2JqZWN0cyBwYXNzZWQgdGhyb3VnaCBjb25uZWN0aW9uIGluJyxlbGFwc2VkLCdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfU0VRU1BFRUQKLQotZGVmIHRlc3Rfc2Vxc3BlZWQoc2VxKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICAgICAgYSA9IHNlcVs1XQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdpdGVyYXRpb25zIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9MT0NLCi0KLWRlZiB0ZXN0X2xvY2tzcGVlZChsKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICAgICAgbC5hY3F1aXJlKCkKLSAgICAgICAgICAgIGwucmVsZWFzZSgpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ2l0ZXJhdGlvbnMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX0NPTkRJVElPTgotCi1kZWYgY29uZGl0aW9uc3BlZWRfZnVuYyhjLCBOKToKLSAgICBjLmFjcXVpcmUoKQotICAgIGMubm90aWZ5KCkKLQotICAgIGZvciBpIGluIHJhbmdlKE4pOgotICAgICAgICBjLndhaXQoKQotICAgICAgICBjLm5vdGlmeSgpCi0KLSAgICBjLnJlbGVhc2UoKQotCi1kZWYgdGVzdF9jb25kaXRpb25zcGVlZChQcm9jZXNzLCBjKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIGMuYWNxdWlyZSgpCi0gICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1jb25kaXRpb25zcGVlZF9mdW5jLCBhcmdzPShjLCBpdGVyYXRpb25zKSkKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICAgICAgYy53YWl0KCkKLQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgICAgIGMubm90aWZ5KCkKLSAgICAgICAgICAgIGMud2FpdCgpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgICAgIGMucmVsZWFzZSgpCi0gICAgICAgIHAuam9pbigpCi0KLSAgICBwcmludChpdGVyYXRpb25zICogMiwgJ3dhaXRzIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucyAqIDIgLyBlbGFwc2VkKQotCi0jIyMjCi0KLWRlZiB0ZXN0KCk6Ci0gICAgbWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLQotICAgIGdjLmRpc2FibGUoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIFF1ZXVlLlF1ZXVlXG4nKQotICAgIHRlc3RfcXVldWVzcGVlZCh0aHJlYWRpbmcuVGhyZWFkLCBxdWV1ZS5RdWV1ZSgpLAotICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5RdWV1ZVxuJykKLSAgICB0ZXN0X3F1ZXVlc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpLAotICAgICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIFF1ZXVlIG1hbmFnZWQgYnkgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9xdWV1ZXNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtYW5hZ2VyLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIG1hbmFnZXIuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5QaXBlXG4nKQotICAgIHRlc3RfcGlwZXNwZWVkKCkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBsaXN0XG4nKQotICAgIHRlc3Rfc2Vxc3BlZWQobGlzdChyYW5nZSgxMCkpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBsaXN0IG1hbmFnZWQgYnkgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9zZXFzcGVlZChtYW5hZ2VyLmxpc3QobGlzdChyYW5nZSgxMCkpKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgQXJyYXkoImkiLCAuLi4sIGxvY2s9RmFsc2UpXG4nKQotICAgIHRlc3Rfc2Vxc3BlZWQobXVsdGlwcm9jZXNzaW5nLkFycmF5KCdpJywgbGlzdChyYW5nZSgxMCkpLCBsb2NrPUZhbHNlKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgQXJyYXkoImkiLCAuLi4sIGxvY2s9VHJ1ZSlcbicpCi0gICAgdGVzdF9zZXFzcGVlZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkoJ2knLCBsaXN0KHJhbmdlKDEwKSksIGxvY2s9VHJ1ZSkpCi0KLSAgICBwcmludCgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgdGhyZWFkaW5nLkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQodGhyZWFkaW5nLkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgdGhyZWFkaW5nLlJMb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKHRocmVhZGluZy5STG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuTG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtdWx0aXByb2Nlc3NpbmcuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuUkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQobXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxvY2sgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtYW5hZ2VyLkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgcmxvY2sgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtYW5hZ2VyLlJMb2NrKCkpCi0KLSAgICBwcmludCgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgdGhyZWFkaW5nLkNvbmRpdGlvblxuJykKLSAgICB0ZXN0X2NvbmRpdGlvbnNwZWVkKHRocmVhZGluZy5UaHJlYWQsIHRocmVhZGluZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvblxuJykKLSAgICB0ZXN0X2NvbmRpdGlvbnNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGNvbmRpdGlvbiBtYW5hZ2VkIGJ5IGEgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9jb25kaXRpb25zcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbWFuYWdlci5Db25kaXRpb24oKSkKLQotICAgIGdjLmVuYWJsZSgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0KCkKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9uZXd0eXBlLnB5IGIvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkKaW5kZXggNzI5MTc0My4uMWM3OTZhNSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkKQEAgLTEsMTEgKzEsMyBAQAotIwotIyBUaGlzIG1vZHVsZSBzaG93cyBob3cgdG8gdXNlIGFyYml0cmFyeSBjYWxsYWJsZXMgd2l0aCBhIHN1YmNsYXNzIG9mCi0jIGBCYXNlTWFuYWdlcmAuCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQogZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGZyZWV6ZV9zdXBwb3J0CiBmcm9tIG11bHRpcHJvY2Vzc2luZy5tYW5hZ2VycyBpbXBvcnQgQmFzZU1hbmFnZXIsIEJhc2VQcm94eQogaW1wb3J0IG9wZXJhdG9yCkBAIC0yNywxMiArMTksMTAgQEAKIAogIyBQcm94eSB0eXBlIGZvciBnZW5lcmF0b3Igb2JqZWN0cwogY2xhc3MgR2VuZXJhdG9yUHJveHkoQmFzZVByb3h5KToKLSAgICBfZXhwb3NlZF8gPSAoJ25leHQnLCAnX19uZXh0X18nKQorICAgIF9leHBvc2VkXyA9IFsnX19uZXh0X18nXQogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKICAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9jYWxsbWV0aG9kKCduZXh0JykKLSAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9jYWxsbWV0aG9kKCdfX25leHRfXycpCiAKICMgRnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBvcGVyYXRvciBtb2R1bGUKQEAgLTkwLDggKzgwLDYgQEAKICAgICBvcCA9IG1hbmFnZXIub3BlcmF0b3IoKQogICAgIHByaW50KCdvcC5hZGQoMjMsIDQ1KSA9Jywgb3AuYWRkKDIzLCA0NSkpCiAgICAgcHJpbnQoJ29wLnBvdygyLCA5NCkgPScsIG9wLnBvdygyLCA5NCkpCi0gICAgcHJpbnQoJ29wLmdldHNsaWNlKHJhbmdlKDEwKSwgMiwgNikgPScsIG9wLmdldHNsaWNlKGxpc3QocmFuZ2UoMTApKSwgMiwgNikpCi0gICAgcHJpbnQoJ29wLnJlcGVhdChyYW5nZSg1KSwgMykgPScsIG9wLnJlcGVhdChsaXN0KHJhbmdlKDUpKSwgMykpCiAgICAgcHJpbnQoJ29wLl9leHBvc2VkXyA9Jywgb3AuX2V4cG9zZWRfKQogCiAjIwpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkgYi9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weQppbmRleCAxNTc4NDk4Li4xMTEwMWUxIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weQpAQCAtMSwxMCArMSwzIEBACi0jCi0jIEEgdGVzdCBvZiBgbXVsdGlwcm9jZXNzaW5nLlBvb2xgIGNsYXNzCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IHRpbWUKIGltcG9ydCByYW5kb20KQEAgLTQ2LDI2OSArMzksMTE1IEBACiAjCiAKIGRlZiB0ZXN0KCk6Ci0gICAgcHJpbnQoJ2NwdV9jb3VudCgpID0gJWRcbicgJSBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkpCi0KLSAgICAjCi0gICAgIyBDcmVhdGUgcG9vbAotICAgICMKLQogICAgIFBST0NFU1NFUyA9IDQKICAgICBwcmludCgnQ3JlYXRpbmcgcG9vbCB3aXRoICVkIHByb2Nlc3Nlc1xuJyAlIFBST0NFU1NFUykKLSAgICBwb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woUFJPQ0VTU0VTKQotICAgIHByaW50KCdwb29sID0gJXMnICUgcG9vbCkKLSAgICBwcmludCgpCiAKLSAgICAjCi0gICAgIyBUZXN0cwotICAgICMKKyAgICB3aXRoIG11bHRpcHJvY2Vzc2luZy5Qb29sKFBST0NFU1NFUykgYXMgcG9vbDoKKyAgICAgICAgIworICAgICAgICAjIFRlc3RzCisgICAgICAgICMKIAotICAgIFRBU0tTID0gWyhtdWwsIChpLCA3KSkgZm9yIGkgaW4gcmFuZ2UoMTApXSArIFwKLSAgICAgICAgICAgIFsocGx1cywgKGksIDgpKSBmb3IgaSBpbiByYW5nZSgxMCldCisgICAgICAgIFRBU0tTID0gWyhtdWwsIChpLCA3KSkgZm9yIGkgaW4gcmFuZ2UoMTApXSArIFwKKyAgICAgICAgICAgICAgICBbKHBsdXMsIChpLCA4KSkgZm9yIGkgaW4gcmFuZ2UoMTApXQogCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgdCkgZm9yIHQgaW4gVEFTS1NdCi0gICAgaW1hcF9pdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKLSAgICBpbWFwX3Vub3JkZXJlZF9pdCA9IHBvb2wuaW1hcF91bm9yZGVyZWQoY2FsY3VsYXRlc3RhciwgVEFTS1MpCisgICAgICAgIHJlc3VsdHMgPSBbcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIHQpIGZvciB0IGluIFRBU0tTXQorICAgICAgICBpbWFwX2l0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQorICAgICAgICBpbWFwX3Vub3JkZXJlZF9pdCA9IHBvb2wuaW1hcF91bm9yZGVyZWQoY2FsY3VsYXRlc3RhciwgVEFTS1MpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuYXBwbHlfYXN5bmMoKTonKQotICAgIGZvciByIGluIHJlc3VsdHM6Ci0gICAgICAgIHByaW50KCdcdCcsIHIuZ2V0KCkpCi0gICAgcHJpbnQoKQorICAgICAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuYXBwbHlfYXN5bmMoKTonKQorICAgICAgICBmb3IgciBpbiByZXN1bHRzOgorICAgICAgICAgICAgcHJpbnQoJ1x0Jywgci5nZXQoKSkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXAoKTonKQotICAgIGZvciB4IGluIGltYXBfaXQ6Ci0gICAgICAgIHByaW50KCdcdCcsIHgpCi0gICAgcHJpbnQoKQorICAgICAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcCgpOicpCisgICAgICAgIGZvciB4IGluIGltYXBfaXQ6CisgICAgICAgICAgICBwcmludCgnXHQnLCB4KQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnVW5vcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwX3Vub3JkZXJlZCgpOicpCi0gICAgZm9yIHggaW4gaW1hcF91bm9yZGVyZWRfaXQ6Ci0gICAgICAgIHByaW50KCdcdCcsIHgpCi0gICAgcHJpbnQoKQorICAgICAgICBwcmludCgnVW5vcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwX3Vub3JkZXJlZCgpOicpCisgICAgICAgIGZvciB4IGluIGltYXBfdW5vcmRlcmVkX2l0OgorICAgICAgICAgICAgcHJpbnQoJ1x0JywgeCkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLm1hcCgpIC0tLSB3aWxsIGJsb2NrIHRpbGwgY29tcGxldGU6JykKLSAgICBmb3IgeCBpbiBwb29sLm1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUyk6Ci0gICAgICAgIHByaW50KCdcdCcsIHgpCi0gICAgcHJpbnQoKQorICAgICAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wubWFwKCkgLS0tIHdpbGwgYmxvY2sgdGlsbCBjb21wbGV0ZTonKQorICAgICAgICBmb3IgeCBpbiBwb29sLm1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUyk6CisgICAgICAgICAgICBwcmludCgnXHQnLCB4KQorICAgICAgICBwcmludCgpCiAKLSAgICAjCi0gICAgIyBTaW1wbGUgYmVuY2htYXJrcwotICAgICMKKyAgICAgICAgIworICAgICAgICAjIFRlc3QgZXJyb3IgaGFuZGxpbmcKKyAgICAgICAgIwogCi0gICAgTiA9IDEwMDAwMAotICAgIHByaW50KCdkZWYgcG93Myh4KTogcmV0dXJuIHgqKjMnKQorICAgICAgICBwcmludCgnVGVzdGluZyBlcnJvciBoYW5kbGluZzonKQogCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQSA9IGxpc3QobWFwKHBvdzMsIHJhbmdlKE4pKSkKLSAgICBwcmludCgnXHRtYXAocG93MywgcmFuZ2UoJWQpKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAoTiwgdGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEIgPSBwb29sLm1hcChwb3czLCByYW5nZShOKSkKLSAgICBwcmludCgnXHRwb29sLm1hcChwb3czLCByYW5nZSglZCkpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgIChOLCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQyA9IGxpc3QocG9vbC5pbWFwKHBvdzMsIHJhbmdlKE4pLCBjaHVua3NpemU9Ti8vOCkpCi0gICAgcHJpbnQoJ1x0bGlzdChwb29sLmltYXAocG93MywgcmFuZ2UoJWQpLCBjaHVua3NpemU9JWQpKTpcblx0XHQlcycgXAotICAgICAgICAgICcgc2Vjb25kcycgJSAoTiwgTi8vOCwgdGltZS50aW1lKCkgLSB0KSkKLQotICAgIGFzc2VydCBBID09IEIgPT0gQywgKGxlbihBKSwgbGVuKEIpLCBsZW4oQykpCi0gICAgcHJpbnQoKQotCi0gICAgTCA9IFtOb25lXSAqIDEwMDAwMDAKLSAgICBwcmludCgnZGVmIG5vb3AoeCk6IHBhc3MnKQotICAgIHByaW50KCdMID0gW05vbmVdICogMTAwMDAwMCcpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBBID0gbGlzdChtYXAobm9vcCwgTCkpCi0gICAgcHJpbnQoJ1x0bWFwKG5vb3AsIEwpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgICh0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQiA9IHBvb2wubWFwKG5vb3AsIEwpCi0gICAgcHJpbnQoJ1x0cG9vbC5tYXAobm9vcCwgTCk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBDID0gbGlzdChwb29sLmltYXAobm9vcCwgTCwgY2h1bmtzaXplPWxlbihMKS8vOCkpCi0gICAgcHJpbnQoJ1x0bGlzdChwb29sLmltYXAobm9vcCwgTCwgY2h1bmtzaXplPSVkKSk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKGxlbihMKS8vOCwgdGltZS50aW1lKCkgLSB0KSkKLQotICAgIGFzc2VydCBBID09IEIgPT0gQywgKGxlbihBKSwgbGVuKEIpLCBsZW4oQykpCi0gICAgcHJpbnQoKQotCi0gICAgZGVsIEEsIEIsIEMsIEwKLQotICAgICMKLSAgICAjIFRlc3QgZXJyb3IgaGFuZGxpbmcKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBlcnJvciBoYW5kbGluZzonKQotCi0gICAgdHJ5OgotICAgICAgICBwcmludChwb29sLmFwcGx5KGYsICg1LCkpKQotICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5hcHBseSgpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgdHJ5OgotICAgICAgICBwcmludChwb29sLm1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKQotICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5tYXAoKScpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKLQotICAgIHRyeToKLSAgICAgICAgcHJpbnQobGlzdChwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBsaXN0KHBvb2wuaW1hcCgpKScpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKLQotICAgIGl0ID0gcG9vbC5pbWFwKGYsIGxpc3QocmFuZ2UoMTApKSkKLSAgICBmb3IgaSBpbiByYW5nZSgxMCk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHggPSBuZXh0KGl0KQorICAgICAgICAgICAgcHJpbnQocG9vbC5hcHBseShmLCAoNSwpKSkKICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgaWYgaSA9PSA1OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5hcHBseSgpJykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGkgPT0gNToKLSAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgIGFzc2VydCBpID09IDkKLSAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBJTWFwSXRlcmF0b3IubmV4dCgpJykKLSAgICBwcmludCgpCi0KLSAgICAjCi0gICAgIyBUZXN0aW5nIHRpbWVvdXRzCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgQXBwbHlSZXN1bHQuZ2V0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCi0gICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIFRBU0tTWzBdKQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcblx0JXMnICUgcmVzLmdldCgwLjAyKSkKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCi0gICAgcHJpbnQoKQotICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIHBvb2wubWFwKCknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgIHByaW50KCdUZXN0aW5nIElNYXBJdGVyYXRvci5uZXh0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCi0gICAgaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCi0gICAgd2hpbGUgMToKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSBpdC5uZXh0KDAuMDIpKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCi0gICAgcHJpbnQoKQotICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KGxpc3QocG9vbC5pbWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBsaXN0KHBvb2wuaW1hcCgpKScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgIwotICAgICMgVGVzdGluZyBjYWxsYmFjawotICAgICMKKyAgICAgICAgaXQgPSBwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeCA9IG5leHQoaXQpCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgaSA9PSA1OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICBwcmludCgnVGVzdGluZyBjYWxsYmFjazonKQorICAgICAgICBhc3NlcnQgaSA9PSA5CisgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIElNYXBJdGVyYXRvci5uZXh0KCknKQorICAgICAgICBwcmludCgpCiAKLSAgICBBID0gW10KLSAgICBCID0gWzU2LCAwLCAxLCA4LCAyNywgNjQsIDEyNSwgMjE2LCAzNDMsIDUxMiwgNzI5XQorICAgICAgICAjCisgICAgICAgICMgVGVzdGluZyB0aW1lb3V0cworICAgICAgICAjCiAKLSAgICByID0gcG9vbC5hcHBseV9hc3luYyhtdWwsICg3LCA4KSwgY2FsbGJhY2s9QS5hcHBlbmQpCi0gICAgci53YWl0KCkKKyAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgQXBwbHlSZXN1bHQuZ2V0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCisgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCBUQVNLU1swXSkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSByZXMuZ2V0KDAuMDIpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBwcmludCgpCiAKLSAgICByID0gcG9vbC5tYXBfYXN5bmMocG93MywgbGlzdChyYW5nZSgxMCkpLCBjYWxsYmFjaz1BLmV4dGVuZCkKLSAgICByLndhaXQoKQotCi0gICAgaWYgQSA9PSBCOgotICAgICAgICBwcmludCgnXHRjYWxsYmFja3Mgc3VjY2VlZGVkXG4nKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdcdCoqKiBjYWxsYmFja3MgZmFpbGVkXG5cdFx0JXMgIT0gJXNcbicgJSAoQSwgQikpCi0KLSAgICAjCi0gICAgIyBDaGVjayB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgdGFza3MKLSAgICAjCi0KLSAgICBhc3NlcnQgbm90IHBvb2wuX2NhY2hlLCAnY2FjaGUgPSAlcicgJSBwb29sLl9jYWNoZQotCi0gICAgIwotICAgICMgQ2hlY2sgY2xvc2UoKSBtZXRob2RzCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgY2xvc2UoKTonKQotCi0gICAgZm9yIHdvcmtlciBpbiBwb29sLl9wb29sOgotICAgICAgICBhc3NlcnQgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHJlc3VsdCA9IHBvb2wuYXBwbHlfYXN5bmModGltZS5zbGVlcCwgWzAuNV0pCi0gICAgcG9vbC5jbG9zZSgpCi0gICAgcG9vbC5qb2luKCkKLQotICAgIGFzc2VydCByZXN1bHQuZ2V0KCkgaXMgTm9uZQotCi0gICAgZm9yIHdvcmtlciBpbiBwb29sLl9wb29sOgotICAgICAgICBhc3NlcnQgbm90IHdvcmtlci5pc19hbGl2ZSgpCi0KLSAgICBwcmludCgnXHRjbG9zZSgpIHN1Y2NlZWRlZFxuJykKLQotICAgICMKLSAgICAjIENoZWNrIHRlcm1pbmF0ZSgpIG1ldGhvZAotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIHRlcm1pbmF0ZSgpOicpCi0KLSAgICBwb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMikKLSAgICBERUxUQSA9IDAuMQotICAgIGlnbm9yZSA9IHBvb2wuYXBwbHkocG93MywgWzJdKQotICAgIHJlc3VsdHMgPSBbcG9vbC5hcHBseV9hc3luYyh0aW1lLnNsZWVwLCBbREVMVEFdKSBmb3IgaSBpbiByYW5nZSgxMDApXQotICAgIHBvb2wudGVybWluYXRlKCkKLSAgICBwb29sLmpvaW4oKQotCi0gICAgZm9yIHdvcmtlciBpbiBwb29sLl9wb29sOgotICAgICAgICBhc3NlcnQgbm90IHdvcmtlci5pc19hbGl2ZSgpCi0KLSAgICBwcmludCgnXHR0ZXJtaW5hdGUoKSBzdWNjZWVkZWRcbicpCi0KLSAgICAjCi0gICAgIyBDaGVjayBnYXJiYWdlIGNvbGxlY3Rpb24KLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBnYXJiYWdlIGNvbGxlY3Rpb246JykKLQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgyKQotICAgIERFTFRBID0gMC4xCi0gICAgcHJvY2Vzc2VzID0gcG9vbC5fcG9vbAotICAgIGlnbm9yZSA9IHBvb2wuYXBwbHkocG93MywgWzJdKQotICAgIHJlc3VsdHMgPSBbcG9vbC5hcHBseV9hc3luYyh0aW1lLnNsZWVwLCBbREVMVEFdKSBmb3IgaSBpbiByYW5nZSgxMDApXQotCi0gICAgcmVzdWx0cyA9IHBvb2wgPSBOb25lCi0KLSAgICB0aW1lLnNsZWVwKERFTFRBICogMikKLQotICAgIGZvciB3b3JrZXIgaW4gcHJvY2Vzc2VzOgotICAgICAgICBhc3NlcnQgbm90IHdvcmtlci5pc19hbGl2ZSgpCi0KLSAgICBwcmludCgnXHRnYXJiYWdlIGNvbGxlY3Rpb24gc3VjY2VlZGVkXG4nKQorICAgICAgICBwcmludCgnVGVzdGluZyBJTWFwSXRlcmF0b3IubmV4dCgpIHdpdGggdGltZW91dDonLCBlbmQ9JyAnKQorICAgICAgICBpdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSBpdC5uZXh0KDAuMDIpKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQorICAgICAgICBwcmludCgpCisgICAgICAgIHByaW50KCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG11bHRpcHJvY2Vzc2luZy5mcmVlemVfc3VwcG9ydCgpCi0KLSAgICBhc3NlcnQgbGVuKHN5cy5hcmd2KSBpbiAoMSwgMikKLQotICAgIGlmIGxlbihzeXMuYXJndikgPT0gMSBvciBzeXMuYXJndlsxXSA9PSAncHJvY2Vzc2VzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyBwcm9jZXNzZXMgJy5jZW50ZXIoNzksICctJykpCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAndGhyZWFkcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgdGhyZWFkcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5kdW1teSBhcyBtdWx0aXByb2Nlc3NpbmcKLSAgICBlbHNlOgotICAgICAgICBwcmludCgnVXNhZ2U6XG5cdCVzIFtwcm9jZXNzZXMgfCB0aHJlYWRzXScgJSBzeXMuYXJndlswXSkKLSAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgyKQotCiAgICAgdGVzdCgpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkgYi9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZGJjMzguLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLSMKLSMgQSB0ZXN0IGZpbGUgZm9yIHRoZSBgbXVsdGlwcm9jZXNzaW5nYCBwYWNrYWdlCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQotaW1wb3J0IHRpbWUKLWltcG9ydCBzeXMKLWltcG9ydCByYW5kb20KLWZyb20gcXVldWUgaW1wb3J0IEVtcHR5Ci0KLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcgICAgICAgICAgICAgICAjIG1heSBnZXQgb3ZlcndyaXR0ZW4KLQotCi0jIyMjIFRFU1RfVkFMVUUKLQotZGVmIHZhbHVlX2Z1bmMocnVubmluZywgbXV0ZXgpOgotICAgIHJhbmRvbS5zZWVkKCkKLSAgICB0aW1lLnNsZWVwKHJhbmRvbS5yYW5kb20oKSo0KQotCi0gICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgcHJpbnQoJ1xuXHRcdFx0JyArIHN0cihtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkpICsgJyBoYXMgZmluaXNoZWQnKQotICAgIHJ1bm5pbmcudmFsdWUgLT0gMQotICAgIG11dGV4LnJlbGVhc2UoKQotCi1kZWYgdGVzdF92YWx1ZSgpOgotICAgIFRBU0tTID0gMTAKLSAgICBydW5uaW5nID0gbXVsdGlwcm9jZXNzaW5nLlZhbHVlKCdpJywgVEFTS1MpCi0gICAgbXV0ZXggPSBtdWx0aXByb2Nlc3NpbmcuTG9jaygpCi0KLSAgICBmb3IgaSBpbiByYW5nZShUQVNLUyk6Ci0gICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9dmFsdWVfZnVuYywgYXJncz0ocnVubmluZywgbXV0ZXgpKQotICAgICAgICBwLnN0YXJ0KCkKLQotICAgIHdoaWxlIHJ1bm5pbmcudmFsdWUgPiAwOgotICAgICAgICB0aW1lLnNsZWVwKDAuMDgpCi0gICAgICAgIG11dGV4LmFjcXVpcmUoKQotICAgICAgICBwcmludChydW5uaW5nLnZhbHVlLCBlbmQ9JyAnKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgbXV0ZXgucmVsZWFzZSgpCi0KLSAgICBwcmludCgpCi0gICAgcHJpbnQoJ05vIG1vcmUgcnVubmluZyBwcm9jZXNzZXMnKQotCi0KLSMjIyMgVEVTVF9RVUVVRQotCi1kZWYgcXVldWVfZnVuYyhxdWV1ZSk6Ci0gICAgZm9yIGkgaW4gcmFuZ2UoMzApOgotICAgICAgICB0aW1lLnNsZWVwKDAuNSAqIHJhbmRvbS5yYW5kb20oKSkKLSAgICAgICAgcXVldWUucHV0KGkqaSkKLSAgICBxdWV1ZS5wdXQoJ1NUT1AnKQotCi1kZWYgdGVzdF9xdWV1ZSgpOgotICAgIHEgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQotCi0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1xdWV1ZV9mdW5jLCBhcmdzPShxLCkpCi0gICAgcC5zdGFydCgpCi0KLSAgICBvID0gTm9uZQotICAgIHdoaWxlIG8gIT0gJ1NUT1AnOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvID0gcS5nZXQodGltZW91dD0wLjMpCi0gICAgICAgICAgICBwcmludChvLCBlbmQ9JyAnKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCBFbXB0eToKLSAgICAgICAgICAgIHByaW50KCdUSU1FT1VUJykKLQotICAgIHByaW50KCkKLQotCi0jIyMjIFRFU1RfQ09ORElUSU9OCi0KLWRlZiBjb25kaXRpb25fZnVuYyhjb25kKToKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIHByaW50KCdcdCcgKyBzdHIoY29uZCkpCi0gICAgdGltZS5zbGVlcCgyKQotICAgIHByaW50KCdcdGNoaWxkIGlzIG5vdGlmeWluZycpCi0gICAgcHJpbnQoJ1x0JyArIHN0cihjb25kKSkKLSAgICBjb25kLm5vdGlmeSgpCi0gICAgY29uZC5yZWxlYXNlKCkKLQotZGVmIHRlc3RfY29uZGl0aW9uKCk6Ci0gICAgY29uZCA9IG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKQotCi0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1jb25kaXRpb25fZnVuYywgYXJncz0oY29uZCwpKQotICAgIHByaW50KGNvbmQpCi0KLSAgICBjb25kLmFjcXVpcmUoKQotICAgIHByaW50KGNvbmQpCi0gICAgY29uZC5hY3F1aXJlKCkKLSAgICBwcmludChjb25kKQotCi0gICAgcC5zdGFydCgpCi0KLSAgICBwcmludCgnbWFpbiBpcyB3YWl0aW5nJykKLSAgICBjb25kLndhaXQoKQotICAgIHByaW50KCdtYWluIGhhcyB3b2tlbiB1cCcpCi0KLSAgICBwcmludChjb25kKQotICAgIGNvbmQucmVsZWFzZSgpCi0gICAgcHJpbnQoY29uZCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi0gICAgcC5qb2luKCkKLSAgICBwcmludChjb25kKQotCi0KLSMjIyMgVEVTVF9TRU1BUEhPUkUKLQotZGVmIHNlbWFwaG9yZV9mdW5jKHNlbWEsIG11dGV4LCBydW5uaW5nKToKLSAgICBzZW1hLmFjcXVpcmUoKQotCi0gICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgcnVubmluZy52YWx1ZSArPSAxCi0gICAgcHJpbnQocnVubmluZy52YWx1ZSwgJ3Rhc2tzIGFyZSBydW5uaW5nJykKLSAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHJhbmRvbS5zZWVkKCkKLSAgICB0aW1lLnNsZWVwKHJhbmRvbS5yYW5kb20oKSoyKQotCi0gICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgcnVubmluZy52YWx1ZSAtPSAxCi0gICAgcHJpbnQoJyVzIGhhcyBmaW5pc2hlZCcgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkpCi0gICAgbXV0ZXgucmVsZWFzZSgpCi0KLSAgICBzZW1hLnJlbGVhc2UoKQotCi1kZWYgdGVzdF9zZW1hcGhvcmUoKToKLSAgICBzZW1hID0gbXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZSgzKQotICAgIG11dGV4ID0gbXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkKLSAgICBydW5uaW5nID0gbXVsdGlwcm9jZXNzaW5nLlZhbHVlKCdpJywgMCkKLQotICAgIHByb2Nlc3NlcyA9IFsKLSAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbWFwaG9yZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShzZW1hLCBtdXRleCwgcnVubmluZykpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDEwKQotICAgICAgICBdCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgotICAgICAgICBwLmpvaW4oKQotCi0KLSMjIyMgVEVTVF9KT0lOX1RJTUVPVVQKLQotZGVmIGpvaW5fdGltZW91dF9mdW5jKCk6Ci0gICAgcHJpbnQoJ1x0Y2hpbGQgc2xlZXBpbmcnKQotICAgIHRpbWUuc2xlZXAoNS41KQotICAgIHByaW50KCdcblx0Y2hpbGQgdGVybWluYXRpbmcnKQotCi1kZWYgdGVzdF9qb2luX3RpbWVvdXQoKToKLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWpvaW5fdGltZW91dF9mdW5jKQotICAgIHAuc3RhcnQoKQotCi0gICAgcHJpbnQoJ3dhaXRpbmcgZm9yIHByb2Nlc3MgdG8gZmluaXNoJykKLQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHAuam9pbih0aW1lb3V0PTEpCi0gICAgICAgIGlmIG5vdCBwLmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBwcmludCgnLicsIGVuZD0nICcpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0KLSMjIyMgVEVTVF9FVkVOVAotCi1kZWYgZXZlbnRfZnVuYyhldmVudCk6Ci0gICAgcHJpbnQoJ1x0JXIgaXMgd2FpdGluZycgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkpCi0gICAgZXZlbnQud2FpdCgpCi0gICAgcHJpbnQoJ1x0JXIgaGFzIHdva2VuIHVwJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLQotZGVmIHRlc3RfZXZlbnQoKToKLSAgICBldmVudCA9IG11bHRpcHJvY2Vzc2luZy5FdmVudCgpCi0KLSAgICBwcm9jZXNzZXMgPSBbbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWV2ZW50X2Z1bmMsIGFyZ3M9KGV2ZW50LCkpCi0gICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpXQotCi0gICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgotICAgICAgICBwLnN0YXJ0KCkKLQotICAgIHByaW50KCdtYWluIGlzIHNsZWVwaW5nJykKLSAgICB0aW1lLnNsZWVwKDIpCi0KLSAgICBwcmludCgnbWFpbiBpcyBzZXR0aW5nIGV2ZW50JykKLSAgICBldmVudC5zZXQoKQotCi0gICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgotICAgICAgICBwLmpvaW4oKQotCi0KLSMjIyMgVEVTVF9TSEFSRURWQUxVRVMKLQotZGVmIHNoYXJlZHZhbHVlc19mdW5jKHZhbHVlcywgYXJyYXlzLCBzaGFyZWRfdmFsdWVzLCBzaGFyZWRfYXJyYXlzKToKLSAgICBmb3IgaSBpbiByYW5nZShsZW4odmFsdWVzKSk6Ci0gICAgICAgIHYgPSB2YWx1ZXNbaV1bMV0KLSAgICAgICAgc3YgPSBzaGFyZWRfdmFsdWVzW2ldLnZhbHVlCi0gICAgICAgIGFzc2VydCB2ID09IHN2Ci0KLSAgICBmb3IgaSBpbiByYW5nZShsZW4odmFsdWVzKSk6Ci0gICAgICAgIGEgPSBhcnJheXNbaV1bMV0KLSAgICAgICAgc2EgPSBsaXN0KHNoYXJlZF9hcnJheXNbaV1bOl0pCi0gICAgICAgIGFzc2VydCBhID09IHNhCi0KLSAgICBwcmludCgnVGVzdHMgcGFzc2VkJykKLQotZGVmIHRlc3Rfc2hhcmVkdmFsdWVzKCk6Ci0gICAgdmFsdWVzID0gWwotICAgICAgICAoJ2knLCAxMCksCi0gICAgICAgICgnaCcsIC0yKSwKLSAgICAgICAgKCdkJywgMS4yNSkKLSAgICAgICAgXQotICAgIGFycmF5cyA9IFsKLSAgICAgICAgKCdpJywgbGlzdChyYW5nZSgxMDApKSksCi0gICAgICAgICgnZCcsIFswLjI1ICogaSBmb3IgaSBpbiByYW5nZSgxMDApXSksCi0gICAgICAgICgnSCcsIGxpc3QocmFuZ2UoMTAwMCkpKQotICAgICAgICBdCi0KLSAgICBzaGFyZWRfdmFsdWVzID0gW211bHRpcHJvY2Vzc2luZy5WYWx1ZShpZCwgdikgZm9yIGlkLCB2IGluIHZhbHVlc10KLSAgICBzaGFyZWRfYXJyYXlzID0gW211bHRpcHJvY2Vzc2luZy5BcnJheShpZCwgYSkgZm9yIGlkLCBhIGluIGFycmF5c10KLQotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcygKLSAgICAgICAgdGFyZ2V0PXNoYXJlZHZhbHVlc19mdW5jLAotICAgICAgICBhcmdzPSh2YWx1ZXMsIGFycmF5cywgc2hhcmVkX3ZhbHVlcywgc2hhcmVkX2FycmF5cykKLSAgICAgICAgKQotICAgIHAuc3RhcnQoKQotICAgIHAuam9pbigpCi0KLSAgICBhc3NlcnQgcC5leGl0Y29kZSA9PSAwCi0KLQotIyMjIwotCi1kZWYgdGVzdChuYW1lc3BhY2U9bXVsdGlwcm9jZXNzaW5nKToKLSAgICBnbG9iYWwgbXVsdGlwcm9jZXNzaW5nCi0KLSAgICBtdWx0aXByb2Nlc3NpbmcgPSBuYW1lc3BhY2UKLQotICAgIGZvciBmdW5jIGluIFt0ZXN0X3ZhbHVlLCB0ZXN0X3F1ZXVlLCB0ZXN0X2NvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgdGVzdF9zZW1hcGhvcmUsIHRlc3Rfam9pbl90aW1lb3V0LCB0ZXN0X2V2ZW50LAotICAgICAgICAgICAgICAgICB0ZXN0X3NoYXJlZHZhbHVlc106Ci0KLSAgICAgICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyAlc1xuJyAlIGZ1bmMuX19uYW1lX18pCi0gICAgICAgIGZ1bmMoKQotCi0gICAgaWdub3JlID0gbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigpICAgICAgIyBjbGVhbnVwIGFueSBvbGQgcHJvY2Vzc2VzCi0gICAgaWYgaGFzYXR0cihtdWx0aXByb2Nlc3NpbmcsICdfZGVidWdfaW5mbycpOgotICAgICAgICBpbmZvID0gbXVsdGlwcm9jZXNzaW5nLl9kZWJ1Z19pbmZvKCkKLSAgICAgICAgaWYgaW5mbzoKLSAgICAgICAgICAgIHByaW50KGluZm8pCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0aGVyZSBzaG91bGQgYmUgbm8gcG9zaXRpdmUgcmVmY291bnRzIGxlZnQnKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0KCkKLQotICAgIGFzc2VydCBsZW4oc3lzLmFyZ3YpIGluICgxLCAyKQotCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxIG9yIHN5cy5hcmd2WzFdID09ICdwcm9jZXNzZXMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHByb2Nlc3NlcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgbmFtZXNwYWNlID0gbXVsdGlwcm9jZXNzaW5nCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAnbWFuYWdlcic6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgcHJvY2Vzc2VzIGFuZCBhIG1hbmFnZXIgJy5jZW50ZXIoNzksICctJykpCi0gICAgICAgIG5hbWVzcGFjZSA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLSAgICAgICAgbmFtZXNwYWNlLlByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgICAgICBuYW1lc3BhY2UuY3VycmVudF9wcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcwotICAgICAgICBuYW1lc3BhY2UuYWN0aXZlX2NoaWxkcmVuID0gbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbgotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gJ3RocmVhZHMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHRocmVhZHMgJy5jZW50ZXIoNzksICctJykpCi0gICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcuZHVtbXkgYXMgbmFtZXNwYWNlCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1VzYWdlOlxuXHQlcyBbcHJvY2Vzc2VzIHwgbWFuYWdlciB8IHRocmVhZHNdJyAlIHN5cy5hcmd2WzBdKQotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDIpCi0KLSAgICB0ZXN0KG5hbWVzcGFjZSkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkgYi9Eb2MvaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTEwMjRkLi4wMDAwMDAwCi0tLSBhL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0jCi0jIEV4YW1wbGUgd2hlcmUgYSBwb29sIG9mIGh0dHAgc2VydmVycyBzaGFyZSBhIHNpbmdsZSBsaXN0ZW5pbmcgc29ja2V0Ci0jCi0jIE9uIFdpbmRvd3MgdGhpcyBtb2R1bGUgZGVwZW5kcyBvbiB0aGUgYWJpbGl0eSB0byBwaWNrbGUgYSBzb2NrZXQKLSMgb2JqZWN0IHNvIHRoYXQgdGhlIHdvcmtlciBwcm9jZXNzZXMgY2FuIGluaGVyaXQgYSBjb3B5IG9mIHRoZSBzZXJ2ZXIKLSMgb2JqZWN0LiAgKFdlIGltcG9ydCBgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbmAgdG8gZW5hYmxlIHRoaXMgcGlja2xpbmcuKQotIwotIyBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgc3luY2hyb25pemUgYWNjZXNzIHRvIGBzb2NrZXQuYWNjZXB0KClgIG1ldGhvZCBieQotIyB1c2luZyBhIHByb2Nlc3Mtc2hhcmVkIGxvY2sgLS0gZG9lcyBub3Qgc2VlbSB0byBiZSBuZWNlc3NhcnkuCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIGZyZWV6ZV9zdXBwb3J0Ci1mcm9tIGh0dHAuc2VydmVyIGltcG9ydCBIVFRQU2VydmVyCi1mcm9tIGh0dHAuc2VydmVyIGltcG9ydCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIKLQotaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24gICAgIyBtYWtlIHNvY2tldHMgcGlja2FibGUvaW5oZXJpdGFibGUKLQotCi1kZWYgbm90ZShmb3JtYXQsICphcmdzKToKLSAgICBzeXMuc3RkZXJyLndyaXRlKCdbJXNdXHQlc1xuJyAlIChjdXJyZW50X3Byb2Nlc3MoKS5uYW1lLCBmb3JtYXQgJSBhcmdzKSkKLQotCi1jbGFzcyBSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgotICAgICMgd2Ugb3ZlcnJpZGUgbG9nX21lc3NhZ2UoKSB0byBzaG93IHdoaWNoIHByb2Nlc3MgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QKLSAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6Ci0gICAgICAgIG5vdGUoZm9ybWF0LCAqYXJncykKLQotZGVmIHNlcnZlX2ZvcmV2ZXIoc2VydmVyKToKLSAgICBub3RlKCdzdGFydGluZyBzZXJ2ZXInKQotICAgIHRyeToKLSAgICAgICAgc2VydmVyLnNlcnZlX2ZvcmV2ZXIoKQotICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgcGFzcwotCi0KLWRlZiBydW5wb29sKGFkZHJlc3MsIG51bWJlcl9vZl9wcm9jZXNzZXMpOgotICAgICMgY3JlYXRlIGEgc2luZ2xlIHNlcnZlciBvYmplY3QgLS0gY2hpbGRyZW4gd2lsbCBlYWNoIGluaGVyaXQgYSBjb3B5Ci0gICAgc2VydmVyID0gSFRUUFNlcnZlcihhZGRyZXNzLCBSZXF1ZXN0SGFuZGxlcikKLQotICAgICMgY3JlYXRlIGNoaWxkIHByb2Nlc3NlcyB0byBhY3QgYXMgd29ya2VycwotICAgIGZvciBpIGluIHJhbmdlKG51bWJlcl9vZl9wcm9jZXNzZXMgLSAxKToKLSAgICAgICAgUHJvY2Vzcyh0YXJnZXQ9c2VydmVfZm9yZXZlciwgYXJncz0oc2VydmVyLCkpLnN0YXJ0KCkKLQotICAgICMgbWFpbiBwcm9jZXNzIGFsc28gYWN0cyBhcyBhIHdvcmtlcgotICAgIHNlcnZlX2ZvcmV2ZXIoc2VydmVyKQotCi0KLWRlZiB0ZXN0KCk6Ci0gICAgRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicpCi0gICAgQUREUkVTUyA9ICgnbG9jYWxob3N0JywgODAwMCkKLSAgICBOVU1CRVJfT0ZfUFJPQ0VTU0VTID0gNAotCi0gICAgcHJpbnQoJ1NlcnZpbmcgYXQgaHR0cDovLyVzOiVkIHVzaW5nICVkIHdvcmtlciBwcm9jZXNzZXMnICUgXAotICAgICAgICAgIChBRERSRVNTWzBdLCBBRERSRVNTWzFdLCBOVU1CRVJfT0ZfUFJPQ0VTU0VTKSkKLSAgICBwcmludCgnVG8gZXhpdCBwcmVzcyBDdHJsLScgKyBbJ0MnLCAnQnJlYWsnXVtzeXMucGxhdGZvcm09PSd3aW4zMiddKQotCi0gICAgb3MuY2hkaXIoRElSKQotICAgIHJ1bnBvb2woQUREUkVTUywgTlVNQkVSX09GX1BST0NFU1NFUykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGZyZWV6ZV9zdXBwb3J0KCkKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF93b3JrZXJzLnB5IGIvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkKaW5kZXggZTY2ZDk3Yi4uM2I5MjI2OSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkKQEAgLTEsMTYgKzEsMyBAQAotIwotIyBTaW1wbGUgZXhhbXBsZSB3aGljaCB1c2VzIGEgcG9vbCBvZiB3b3JrZXJzIHRvIGNhcnJ5IG91dCBzb21lIHRhc2tzLgotIwotIyBOb3RpY2UgdGhhdCB0aGUgcmVzdWx0cyB3aWxsIHByb2JhYmx5IG5vdCBjb21lIG91dCBvZiB0aGUgb3V0cHV0Ci0jIHF1ZXVlIGluIHRoZSBzYW1lIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBjb3JyZXNwb25kaW5nIHRhc2tzIHdlcmUKLSMgcHV0IG9uIHRoZSBpbnB1dCBxdWV1ZS4gIElmIGl0IGlzIGltcG9ydGFudCB0byBnZXQgdGhlIHJlc3VsdHMgYmFjawotIyBpbiB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlbiBjb25zaWRlciB1c2luZyBgUG9vbC5tYXAoKWAgb3IKLSMgYFBvb2wuaW1hcCgpYCAod2hpY2ggd2lsbCBzYXZlIG9uIHRoZSBhbW91bnQgb2YgY29kZSBuZWVkZWQgYW55d2F5KS4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBpbXBvcnQgdGltZQogaW1wb3J0IHJhbmRvbQogCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oIGIvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaAppbmRleCAzMjY0N2MwLi5mY2I4NDZhIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCisrKyBiL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKQEAgLTcwLDQgKzcwLDExIEBACiAgICAgUHlPYmplY3QgKnRwX3N1YmNsYXNzZXM7CiAgICAgUHlPYmplY3QgKnRwX3dlYWtsaXN0OwogCisgICAgZGVzdHJ1Y3RvciB0cF9kZWw7CisKKyAgICAvKiBUeXBlIGF0dHJpYnV0ZSBjYWNoZSB2ZXJzaW9uIHRhZy4gQWRkZWQgaW4gdmVyc2lvbiAyLjYgKi8KKyAgICB1bnNpZ25lZCBpbnQgdHBfdmVyc2lvbl90YWc7CisKKyAgICBkZXN0cnVjdG9yIHRwX2ZpbmFsaXplOworCiB9IFB5VHlwZU9iamVjdDsKZGlmZiAtLWdpdCBhL0RvYy9pbnN0YWxsL2luZGV4LnJzdCBiL0RvYy9pbnN0YWxsL2luZGV4LnJzdAppbmRleCAwYzlhOWYyLi5kMGZlYTNkIDEwMDY0NAotLS0gYS9Eb2MvaW5zdGFsbC9pbmRleC5yc3QKKysrIGIvRG9jL2luc3RhbGwvaW5kZXgucnN0CkBAIC0yLDkgKzIsOSBAQAogCiAuLiBfaW5zdGFsbC1pbmRleDoKIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgSW5zdGFsbGluZyBQeXRob24gTW9kdWxlcwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIEluc3RhbGxpbmcgUHl0aG9uIE1vZHVsZXMgKExlZ2FjeSB2ZXJzaW9uKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogOkF1dGhvcjogR3JlZyBXYXJkCiAKZGlmZiAtLWdpdCBhL0RvYy9pbnN0YWxsaW5nL2luZGV4LnJzdCBiL0RvYy9pbnN0YWxsaW5nL2luZGV4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmYxODJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2luc3RhbGxpbmcvaW5kZXgucnN0CkBAIC0wLDAgKzEsMjIwIEBACisuLiBoaWdobGlnaHRsYW5nOjogbm9uZQorCisuLiBfaW5zdGFsbGluZy1pbmRleDoKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgSW5zdGFsbGluZyBQeXRob24gTW9kdWxlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworOkVtYWlsOiBkaXN0dXRpbHMtc2lnQHB5dGhvbi5vcmcKKworQXMgYSBwb3B1bGFyIG9wZW4gc291cmNlIGRldmVsb3BtZW50IHByb2plY3QsIFB5dGhvbiBoYXMgYW4gYWN0aXZlCitzdXBwb3J0aW5nIGNvbW11bml0eSBvZiBjb250cmlidXRvcnMgYW5kIHVzZXJzIHRoYXQgYWxzbyBtYWtlIHRoZWlyIHNvZnR3YXJlCithdmFpbGFibGUgZm9yIG90aGVyIFB5dGhvbiBkZXZlbG9wZXJzIHRvIHVzZSB1bmRlciBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zLgorCitUaGlzIGFsbG93cyBQeXRob24gdXNlcnMgdG8gc2hhcmUgYW5kIGNvbGxhYm9yYXRlIGVmZmVjdGl2ZWx5LCBiZW5lZml0aW5nCitmcm9tIHRoZSBzb2x1dGlvbnMgb3RoZXJzIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRvIGNvbW1vbiAoYW5kIHNvbWV0aW1lcworZXZlbiByYXJlISkgcHJvYmxlbXMsIGFzIHdlbGwgYXMgcG90ZW50aWFsbHkgY29udHJpYnV0aW5nIHRoZWlyIG93bgorc29sdXRpb25zIHRvIHRoZSBjb21tb24gcG9vbC4KKworVGhpcyBndWlkZSBjb3ZlcnMgdGhlIGluc3RhbGxhdGlvbiBwYXJ0IG9mIHRoZSBwcm9jZXNzLiBGb3IgYSBndWlkZSB0bworY3JlYXRpbmcgYW5kIHNoYXJpbmcgeW91ciBvd24gUHl0aG9uIHByb2plY3RzLCByZWZlciB0byB0aGUKKzpyZWY6YGRpc3RyaWJ1dGlvbiBndWlkZSA8ZGlzdHJpYnV0aW5nLWluZGV4PmAuCisKKy4uIG5vdGU6OgorCisgICBGb3IgY29ycG9yYXRlIGFuZCBvdGhlciBpbnN0aXR1dGlvbmFsIHVzZXJzLCBiZSBhd2FyZSB0aGF0IG1hbnkKKyAgIG9yZ2FuaXNhdGlvbnMgaGF2ZSB0aGVpciBvd24gcG9saWNpZXMgYXJvdW5kIHVzaW5nIGFuZCBjb250cmlidXRpbmcgdG8KKyAgIG9wZW4gc291cmNlIHNvZnR3YXJlLiBQbGVhc2UgdGFrZSBzdWNoIHBvbGljaWVzIGludG8gYWNjb3VudCB3aGVuIG1ha2luZworICAgdXNlIG9mIHRoZSBkaXN0cmlidXRpb24gYW5kIGluc3RhbGxhdGlvbiB0b29scyBwcm92aWRlZCB3aXRoIFB5dGhvbi4KKworCitLZXkgdGVybXMKKz09PT09PT09PQorCisqIGBgcGlwYGAgaXMgdGhlIHByZWZlcnJlZCBpbnN0YWxsZXIgcHJvZ3JhbS4gU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCBpdAorICBpcyBpbmNsdWRlZCBieSBkZWZhdWx0IHdpdGggdGhlIFB5dGhvbiBiaW5hcnkgaW5zdGFsbGVycy4KKyogYSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGEgc2VtaS1pc29sYXRlZCBQeXRob24gZW52aXJvbm1lbnQgdGhhdCBhbGxvd3MKKyAgcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkIGZvciB1c2UgYnkgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLCByYXRoZXIgdGhhbgorICBiZWluZyBpbnN0YWxsZWQgc3lzdGVtIHdpZGUKKyogYGBweXZlbnZgYCBpcyB0aGUgc3RhbmRhcmQgdG9vbCBmb3IgY3JlYXRpbmcgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCBoYXMKKyAgYmVlbiBwYXJ0IG9mIFB5dGhvbiBzaW5jZSBQeXRob24gMy4zLiBTdGFydGluZyB3aXRoIFB5dGhvbiAzLjQsIGl0CisgIGRlZmF1bHRzIHRvIGluc3RhbGxpbmcgYGBwaXBgYCBpbnRvIGFsbCBjcmVhdGVkIHZpcnR1YWwgZW52aXJvbm1lbnRzCisqIGBgdmlydHVhbGVudmBgIGlzIGEgdGhpcmQgcGFydHkgYWx0ZXJuYXRpdmUgKGFuZCBwcmVkZWNlc3NvcikgdG8KKyAgYGBweXZlbnZgYC4gSXQgYWxsb3dzIHZpcnR1YWwgZW52aXJvbm1lbnRzIHRvIGJlIHVzZWQgb24gdmVyc2lvbnMgb2YKKyAgUHl0aG9uIHByaW9yIHRvIDMuNCwgd2hpY2ggZWl0aGVyIGRvbid0IHByb3ZpZGUgYGBweXZlbnZgYCBhdCBhbGwsIG9yCisgIGFyZW4ndCBhYmxlIHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBgYHBpcGBgIGludG8gY3JlYXRlZCBlbnZpcm9ubWVudHMuCisqIHRoZSBgUHl0aG9uIFBhY2thZ2UgSW5kZXggPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF9fIGlzIGEgcHVibGljCisgIHJlcG9zaXRvcnkgb2Ygb3BlbiBzb3VyY2UgbGljZW5zZWQgcGFja2FnZXMgbWFkZSBhdmFpbGFibGUgZm9yIHVzZSBieQorICBvdGhlciBQeXRob24gdXNlcnMKKyogdGhlIGBQeXRob24gUGFja2FnaW5nIEF1dGhvcml0eQorICA8aHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9mdXR1cmUuaHRtbD5gX18gYXJlIHRoZSBncm91cCBvZgorICBkZXZlbG9wZXJzIGFuZCBkb2N1bWVudGF0aW9uIGF1dGhvcnMgcmVzcG9uc2libGUgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQKKyAgZXZvbHV0aW9uIG9mIHRoZSBzdGFuZGFyZCBwYWNrYWdpbmcgdG9vbHMgYW5kIHRoZSBhc3NvY2lhdGVkIG1ldGFkYXRhIGFuZAorICBmaWxlIGZvcm1hdCBzdGFuZGFyZHMuIFRoZXkgbWFpbnRhaW4gYSB2YXJpZXR5IG9mIHRvb2xzLCBkb2N1bWVudGF0aW9uCisgIGFuZCBpc3N1ZSB0cmFja2VycyBvbiBib3RoIGBHaXRIdWIgPGh0dHBzOi8vZ2l0aHViLmNvbS9weXBhPmBfXyBhbmQKKyAgYEJpdEJ1Y2tldCA8aHR0cHM6Ly9iaXRidWNrZXQub3JnL3B5cGEvPmBfXy4KKyogYGBkaXN0dXRpbHNgYCBpcyB0aGUgb3JpZ2luYWwgYnVpbGQgYW5kIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gZmlyc3QgYWRkZWQgdG8KKyAgdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IGluIDE5OTguIFdoaWxlIGRpcmVjdCB1c2Ugb2YgYGBkaXN0dXRpbHNgYCBpcworICBiZWluZyBwaGFzZWQgb3V0LCBpdCBzdGlsbCBsYWlkIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgY3VycmVudCBwYWNrYWdpbmcKKyAgYW5kIGRpc3RyaWJ1dGlvbiBpbmZyYXN0cnVjdHVyZSwgYW5kIGl0IG5vdCBvbmx5IHJlbWFpbnMgcGFydCBvZiB0aGUKKyAgc3RhbmRhcmQgbGlicmFyeSwgYnV0IGl0cyBuYW1lIGxpdmVzIG9uIGluIG90aGVyIHdheXMgKHN1Y2ggYXMgdGhlIG5hbWUKKyAgb2YgdGhlIG1haWxpbmcgbGlzdCB1c2VkIHRvIGNvb3JkaW5hdGUgUHl0aG9uIHBhY2thZ2luZyBzdGFuZGFyZHMKKyAgZGV2ZWxvcG1lbnQpLgorCisKK0Jhc2ljIHVzYWdlCis9PT09PT09PT09PQorCitUaGUgc3RhbmRhcmQgcGFja2FnaW5nIHRvb2xzIGFyZSBhbGwgZGVzaWduZWQgdG8gYmUgdXNlZCBmcm9tIHRoZSBjb21tYW5kCitsaW5lLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBhIG1vZHVsZSBhbmQgaXRzCitkZXBlbmRlbmNpZXMgZnJvbSB0aGUgUHl0aG9uIFBhY2thZ2UgSW5kZXg6OgorCisgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsIFNvbWVQYWNrYWdlCisKKy4uIG5vdGU6OgorCisgICBGb3IgUE9TSVggdXNlcnMgKGluY2x1ZGluZyBNYWMgT1MgWCBhbmQgTGludXggdXNlcnMpLCB0aGUgZXhhbXBsZXMgaW4KKyAgIHRoaXMgZ3VpZGUgYXNzdW1lIHRoZSB1c2Ugb2YgYSA6dGVybTpgdmlydHVhbCBlbnZpcm9ubWVudGAuCisKKyAgIEZvciBXaW5kb3dzIHVzZXJzLCB0aGUgZXhhbXBsZXMgaW4gdGhpcyBndWlkZSBhc3N1bWUgdGhhdCB0aGUgb3B0aW9uIHRvCisgICBhZGp1c3QgdGhlIHN5c3RlbSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBzZWxlY3RlZCB3aGVuIGluc3RhbGxpbmcKKyAgIFB5dGhvbi4KKworSXQncyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYW4gZXhhY3Qgb3IgbWluaW11bSB2ZXJzaW9uIGRpcmVjdGx5IG9uIHRoZQorY29tbWFuZCBsaW5lOjoKKworICAgIHB5dGhvbiAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZT09MS4wLjQgICAgIyBzcGVjaWZpYyB2ZXJzaW9uCisgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsICdTb21lUGFja2FnZT49MS4wLjQnICAjIG1pbmltdW0gdmVyc2lvbgorCitOb3JtYWxseSwgaWYgYSBzdWl0YWJsZSBtb2R1bGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQsIGF0dGVtcHRpbmcgdG8gaW5zdGFsbAoraXQgYWdhaW4gd2lsbCBoYXZlIG5vIGVmZmVjdC4gVXBncmFkaW5nIGV4aXN0aW5nIG1vZHVsZXMgbXVzdCBiZSByZXF1ZXN0ZWQKK2V4cGxpY2l0bHk6OgorCisgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsIC0tdXBncmFkZSBTb21lUGFja2FnZQorCitNb3JlIGluZm9ybWF0aW9uIGFuZCByZXNvdXJjZXMgcmVnYXJkaW5nIGBgcGlwYGAgYW5kIGl0cyBjYXBhYmlsaXRpZXMgY2FuIGJlCitmb3VuZCBpbiB0aGUgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSA8aHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnPmBfXy4KKworYGBweXZlbnZgYCBoYXMgaXRzIG93biBkb2N1bWVudGF0aW9uIGF0IDpyZWY6YHNjcmlwdHMtcHl2ZW52YC4gSW5zdGFsbGluZworaW50byBhbiBhY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCB1c2VzIHRoZSBjb21tYW5kcyBzaG93biBhYm92ZS4KKworLi4gc2VlYWxzbzo6CisKKyAgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBJbnN0YWxsaW5nIFB5dGhvbiBwYWNrYWdlcworICAgIDxodHRwOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3R1dG9yaWFsLmh0bWwjaW5zdGFsbGluZy1weXRob24tcGFja2FnZXM+YF9fCisKKworSG93IGRvIEkgLi4uPworPT09PT09PT09PT09PQorCitUaGVzZSBhcmUgcXVpY2sgYW5zd2VycyBvciBsaW5rcyBmb3Igc29tZSBjb21tb24gdGFza3MuCisKKy4uLiBpbnN0YWxsIGBgcGlwYGAgaW4gdmVyc2lvbnMgb2YgUHl0aG9uIHByaW9yIHRvIFB5dGhvbiAzLjQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gb25seSBzdGFydGVkIGJ1bmRsaW5nIGBgcGlwYGAgd2l0aCBQeXRob24gMy40LiBGb3IgZWFybGllciB2ZXJzaW9ucywKK2BgcGlwYGAgbmVlZHMgdG8gYmUgImJvb3RzdHJhcHBlZCIgYXMgZGVzY3JpYmVkIGluIHRoZSBQeXRob24gUGFja2FnaW5nCitVc2VyIEd1aWRlLgorCisuLiBzZWVhbHNvOjoKKworICAgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZTogSW5zdGFsbGluZyB0aGUgVG9vbHMKKyAgIDxodHRwOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3R1dG9yaWFsLmh0bWwjaW5zdGFsbGluZy10aGUtdG9vbHM+YF9fCisKKworLi4gaW5zdGFsbGluZy1wZXItdXNlci1pbnN0YWxsYXRpb246CisKKy4uLiBpbnN0YWxsIHBhY2thZ2VzIGp1c3QgZm9yIHRoZSBjdXJyZW50IHVzZXI/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzaW5nIHRoZSBgYC0tdXNlcmBgIG9wdGlvbiB0byBgYHB5dGhvbiAtbSBwaXAgaW5zdGFsbGBgIHdpbGwgaW5zdGFsbCBhCitwYWNrYWdlIGp1c3QgZm9yIHRoZSBjdXJyZW50IHVzZXIsIHJhdGhlciB0aGFuIGZvciBhbGwgdXNlcnMgb2YgdGhlIHN5c3RlbS4KKworCisuLi4gaW5zdGFsbCBzY2llbnRpZmljIFB5dGhvbiBwYWNrYWdlcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIG51bWJlciBvZiBzY2llbnRpZmljIFB5dGhvbiBwYWNrYWdlcyBoYXZlIGNvbXBsZXggYmluYXJ5IGRlcGVuZGVuY2llcywgYW5kCithcmVuJ3QgY3VycmVudGx5IGVhc3kgdG8gaW5zdGFsbCB1c2luZyBgYHBpcGBgIGRpcmVjdGx5LiBBdCB0aGlzIHBvaW50IGluCit0aW1lLCBpdCB3aWxsIG9mdGVuIGJlIGVhc2llciBmb3IgdXNlcnMgdG8gaW5zdGFsbCB0aGVzZSBwYWNrYWdlcyBieQorYG90aGVyIG1lYW5zCis8aHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9wbGF0Zm9ybXMuaHRtbCNpbnN0YWxsaW5nLXNjaWVudGlmaWMtcGFja2FnZXM+YF9fCityYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGluc3RhbGwgdGhlbSB3aXRoIGBgcGlwYGAuCisKKy4uIHNlZWFsc286OgorCisgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBJbnN0YWxsaW5nIFNjaWVudGlmaWMgUGFja2FnZXMKKyAgIDxodHRwOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3BsYXRmb3Jtcy5odG1sI2luc3RhbGxpbmctc2NpZW50aWZpYy1wYWNrYWdlcz5gX18KKworCisuLi4gd29yayB3aXRoIG11bHRpcGxlIHZlcnNpb25zIG9mIFB5dGhvbiBpbnN0YWxsZWQgaW4gcGFyYWxsZWw/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIExpbnV4LCBNYWMgT1MgWCBhbmQgb3RoZXIgUE9TSVggc3lzdGVtcywgdXNlIHRoZSB2ZXJzaW9uZWQgUHl0aG9uIGNvbW1hbmRzCitpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBgYC1tYGAgc3dpdGNoIHRvIHJ1biB0aGUgYXBwcm9wcmlhdGUgY29weSBvZgorYGBwaXBgYDo6CisKKyAgIHB5dGhvbjIgICAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBkZWZhdWx0IFB5dGhvbiAyCisgICBweXRob24yLjcgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgc3BlY2lmaWNhbGx5IFB5dGhvbiAyLjcKKyAgIHB5dGhvbjMgICAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBkZWZhdWx0IFB5dGhvbiAzCisgICBweXRob24zLjQgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgc3BlY2lmaWNhbGx5IFB5dGhvbiAzLjQKKworKGFwcHJvcHJpYXRlbHkgdmVyc2lvbmVkIGBgcGlwYGAgY29tbWFuZHMgbWF5IGFsc28gYmUgYXZhaWxhYmxlKQorCitPbiBXaW5kb3dzLCB1c2UgdGhlIGBgcHlgYCBQeXRob24gbGF1bmNoZXIgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYGAtbWBgCitzd2l0Y2g6OgorCisgICBweSAtMiAgIC1tIHBpcCBpbnN0YWxsIFNvbWVQYWNrYWdlICAjIGRlZmF1bHQgUHl0aG9uIDIKKyAgIHB5IC0yLjcgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgc3BlY2lmaWNhbGx5IFB5dGhvbiAyLjcKKyAgIHB5IC0zICAgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgZGVmYXVsdCBQeXRob24gMworICAgcHkgLTMuNCAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBzcGVjaWZpY2FsbHkgUHl0aG9uIDMuNAorCisuLiBvdGhlciBxdWVzdGlvbnM6CisKKyAgIE9uY2UgdGhlIERldmVsb3BtZW50ICYgRGVwbG95bWVudCBwYXJ0IG9mIFBQVUcgaXMgZmxlc2hlZCBvdXQsIHNvbWUgb2YKKyAgIHRob3NlIHNlY3Rpb25zIHNob3VsZCBiZSBsaW5rZWQgZnJvbSBuZXcgcXVlc3Rpb25zIGhlcmUgKG1vc3Qgbm90YWJseSwKKyAgIHdlIHNob3VsZCBoYXZlIGEgcXVlc3Rpb24gYWJvdXQgYXZvaWRpbmcgZGVwZW5kaW5nIG9uIFB5UEkgdGhhdCBsaW5rcyB0bworICAgaHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9kZXBsb3ltZW50Lmh0bWwjcHlwaS1taXJyb3JzLWFuZC1jYWNoZXMpCisKKworQ29tbW9uIGluc3RhbGxhdGlvbiBpc3N1ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luc3RhbGxpbmcgaW50byB0aGUgc3lzdGVtIFB5dGhvbiBvbiBMaW51eAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIExpbnV4IHN5c3RlbXMsIGEgUHl0aG9uIGluc3RhbGxhdGlvbiB3aWxsIHR5cGljYWxseSBiZSBpbmNsdWRlZCBhcyBwYXJ0CitvZiB0aGUgZGlzdHJpYnV0aW9uLiBJbnN0YWxsaW5nIGludG8gdGhpcyBQeXRob24gaW5zdGFsbGF0aW9uIHJlcXVpcmVzCityb290IGFjY2VzcyB0byB0aGUgc3lzdGVtLCBhbmQgbWF5IGludGVyZmVyZSB3aXRoIHRoZSBvcGVyYXRpb24gb2YgdGhlCitzeXN0ZW0gcGFja2FnZSBtYW5hZ2VyIGFuZCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBzeXN0ZW0gaWYgYSBjb21wb25lbnQKK2lzIHVuZXhwZWN0ZWRseSB1cGdyYWRlZCB1c2luZyBgYHBpcGBgLgorCitPbiBzdWNoIHN5c3RlbXMsIGl0IGlzIG9mdGVuIGJldHRlciB0byB1c2UgYSB2aXJ0dWFsIGVudmlyb25tZW50IG9yIGEKK3Blci11c2VyIGluc3RhbGxhdGlvbiB3aGVuIGluc3RhbGxpbmcgcGFja2FnZXMgd2l0aCBgYHBpcGBgLgorCisKK0luc3RhbGxpbmcgYmluYXJ5IGV4dGVuc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIGhhcyB0eXBpY2FsbHkgcmVsaWVkIGhlYXZpbHkgb24gc291cmNlIGJhc2VkIGRpc3RyaWJ1dGlvbiwgd2l0aCBlbmQKK3VzZXJzIGJlaW5nIGV4cGVjdGVkIHRvIGNvbXBpbGUgZXh0ZW5zaW9uIG1vZHVsZXMgZnJvbSBzb3VyY2UgYXMgcGFydCBvZgordGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLgorCitXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygc3VwcG9ydCBmb3IgdGhlIGJpbmFyeSBgYHdoZWVsYGAgZm9ybWF0LCBhbmQgdGhlCithYmlsaXR5IHRvIHB1Ymxpc2ggd2hlZWxzIGZvciBhdCBsZWFzdCBXaW5kb3dzIGFuZCBNYWMgT1MgWCB0aHJvdWdoIHRoZQorUHl0aG9uIFBhY2thZ2UgSW5kZXgsIHRoaXMgcHJvYmxlbSBpcyBleHBlY3RlZCB0byBkaW1pbmlzaCBvdmVyIHRpbWUsCithcyB1c2VycyBhcmUgbW9yZSByZWd1bGFybHkgYWJsZSB0byBpbnN0YWxsIHByZS1idWlsdCBleHRlbnNpb25zIHJhdGhlcgordGhhbiBuZWVkaW5nIHRvIGJ1aWxkIHRoZW0gdGhlbXNlbHZlcy4KKworU29tZSBvZiB0aGUgc29sdXRpb25zIGZvciBpbnN0YWxsaW5nIGBzY2llbnRpZmljIHNvZnR3YXJlCis8aHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9wbGF0Zm9ybXMuaHRtbCNpbnN0YWxsaW5nLXNjaWVudGlmaWMtcGFja2FnZXM+YF9fCit0aGF0IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGFzIHByZS1idWlsdCBgYHdoZWVsYGAgZmlsZXMgbWF5IGFsc28gaGVscCB3aXRoCitvYnRhaW5pbmcgb3RoZXIgYmluYXJ5IGV4dGVuc2lvbnMgd2l0aG91dCBuZWVkaW5nIHRvIGJ1aWxkIHRoZW0gbG9jYWxseS4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEJpbmFyeSBFeHRlbnNpb25zCisgICA8aHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9leHRlbnNpb25zLmh0bWw+YF9fCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS8ydG8zLnJzdCBiL0RvYy9saWJyYXJ5LzJ0bzMucnN0CmluZGV4IDFlNWY0MmQuLjY0NzM4NjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5LzJ0bzMucnN0CisrKyBiL0RvYy9saWJyYXJ5LzJ0bzMucnN0CkBAIC0xNDIsNiArMTQyLDM5IEBACiAgICBSZW1vdmVzIHVzYWdlIG9mIDpmdW5jOmBhcHBseWAuICBGb3IgZXhhbXBsZSBgYGFwcGx5KGZ1bmN0aW9uLCAqYXJncywKICAgICoqa3dhcmdzKWBgIGlzIGNvbnZlcnRlZCB0byBgYGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncylgYC4KIAorLi4gMnRvM2ZpeGVyOjogYXNzZXJ0cworCisgICBSZXBsYWNlcyBkZXByZWNhdGVkIDptb2Q6YHVuaXR0ZXN0YCBtZXRob2QgbmFtZXMgd2l0aCB0aGUgY29ycmVjdCBvbmVzLgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8KKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIGBgZmFpbFVubGVzc0VxdWFsKGEsIGIpYGAgICAgICAgICA6bWV0aDpgYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWw+YAorICAgYGBhc3NlcnRFcXVhbHMoYSwgYilgYCAgICAgICAgICAgIDptZXRoOmBhc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbD5gCisgICBgYGZhaWxJZkVxdWFsKGEsIGIpYGAgICAgICAgICAgICAgOm1ldGg6YGFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFsPmAKKyAgIGBgYXNzZXJ0Tm90RXF1YWxzKGEsIGIpYGAgICAgICAgICA6bWV0aDpgYXNzZXJ0Tm90RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90RXF1YWw+YAorICAgYGBmYWlsVW5sZXNzKGEpYGAgICAgICAgICAgICAgICAgIDptZXRoOmBhc3NlcnRUcnVlKGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFRydWU+YAorICAgYGBhc3NlcnRfKGEpYGAgICAgICAgICAgICAgICAgICAgIDptZXRoOmBhc3NlcnRUcnVlKGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFRydWU+YAorICAgYGBmYWlsSWYoYSlgYCAgICAgICAgICAgICAgICAgICAgIDptZXRoOmBhc3NlcnRGYWxzZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRGYWxzZT5gCisgICBgYGZhaWxVbmxlc3NSYWlzZXMoZXhjLCBjYWwpYGAgICAgOm1ldGg6YGFzc2VydFJhaXNlcyhleGMsIGNhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzPmAKKyAgIGBgZmFpbFVubGVzc0FsbW9zdEVxdWFsKGEsIGIpYGAgICA6bWV0aDpgYXNzZXJ0QWxtb3N0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWw+YAorICAgYGBhc3NlcnRBbG1vc3RFcXVhbHMoYSwgYilgYCAgICAgIDptZXRoOmBhc3NlcnRBbG1vc3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbD5gCisgICBgYGZhaWxJZkFsbW9zdEVxdWFsKGEsIGIpYGAgICAgICAgOm1ldGg6YGFzc2VydE5vdEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsPmAKKyAgIGBgYXNzZXJ0Tm90QWxtb3N0RXF1YWxzKGEsIGIpYGAgICA6bWV0aDpgYXNzZXJ0Tm90QWxtb3N0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90QWxtb3N0RXF1YWw+YAorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAuLiAydG8zZml4ZXI6OiBiYXNlc3RyaW5nCiAKICAgIENvbnZlcnRzIDpjbGFzczpgYmFzZXN0cmluZ2AgdG8gOmNsYXNzOmBzdHJgLgpAQCAtMzQyLDYgKzM3NSwxMCBAQAogCiAgICBIYW5kbGVzIHRoZSBtb3ZlIG9mIDpmdW5jOmByZWR1Y2VgIHRvIDpmdW5jOmBmdW5jdG9vbHMucmVkdWNlYC4KIAorLi4gMnRvM2ZpeGVyOjogcmVsb2FkCisKKyAgIENvbnZlcnRzIDpmdW5jOmByZWxvYWRgIHRvIDpmdW5jOmBpbXAucmVsb2FkYC4KKwogLi4gMnRvM2ZpeGVyOjogcmVuYW1lcwogCiAgICBDaGFuZ2VzIDpkYXRhOmBzeXMubWF4aW50YCB0byA6ZGF0YTpgc3lzLm1heHNpemVgLgpAQCAtMzU1LDcgKzM5Miw3IEBACiAgICBSZXBsYWNlcyB1c2Ugb2YgdGhlIDpjbGFzczpgc2V0YCBjb25zdHJ1Y3RvciB3aXRoIHNldCBsaXRlcmFscy4gIFRoaXMgZml4ZXIKICAgIGlzIG9wdGlvbmFsLgogCi0uLiAydG8zZml4ZXI6OiBzdGFuZGFyZF9lcnJvcgorLi4gMnRvM2ZpeGVyOjogc3RhbmRhcmRlcnJvcgogCiAgICBSZW5hbWVzIDpleGM6YFN0YW5kYXJkRXJyb3JgIHRvIDpleGM6YEV4Y2VwdGlvbmAuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L19fbWFpbl9fLnJzdCBiL0RvYy9saWJyYXJ5L19fbWFpbl9fLnJzdAppbmRleCBhMWQzYzI0Li5hNDY5OTNkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9fX21haW5fXy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvX19tYWluX18ucnN0CkBAIC01LDEzICs1LDE5IEBACiAuLiBtb2R1bGU6OiBfX21haW5fXwogICAgOnN5bm9wc2lzOiBUaGUgZW52aXJvbm1lbnQgd2hlcmUgdGhlIHRvcC1sZXZlbCBzY3JpcHQgaXMgcnVuLgogCitgYCdfX21haW5fXydgYCBpcyB0aGUgbmFtZSBvZiB0aGUgc2NvcGUgaW4gd2hpY2ggdG9wLWxldmVsIGNvZGUgZXhlY3V0ZXMuCitBIG1vZHVsZSdzIF9fbmFtZV9fIGlzIHNldCBlcXVhbCB0byBgYCdfX21haW5fXydgYCB3aGVuIHJlYWQgZnJvbQorc3RhbmRhcmQgaW5wdXQsIGEgc2NyaXB0LCBvciBmcm9tIGFuIGludGVyYWN0aXZlIHByb21wdC4KIAotVGhpcyBtb2R1bGUgcmVwcmVzZW50cyB0aGUgKG90aGVyd2lzZSBhbm9ueW1vdXMpIHNjb3BlIGluIHdoaWNoIHRoZQotaW50ZXJwcmV0ZXIncyBtYWluIHByb2dyYW0gZXhlY3V0ZXMgLS0tIGNvbW1hbmRzIHJlYWQgZWl0aGVyIGZyb20gc3RhbmRhcmQKLWlucHV0LCBmcm9tIGEgc2NyaXB0IGZpbGUsIG9yIGZyb20gYW4gaW50ZXJhY3RpdmUgcHJvbXB0LiAgSXQgaXMgdGhpcwotZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGlkaW9tYXRpYyAiY29uZGl0aW9uYWwgc2NyaXB0IiBzdGFuemEgY2F1c2VzIGEgc2NyaXB0Ci10byBydW46OgorQSBtb2R1bGUgY2FuIGRpc2NvdmVyIHdoZXRoZXIgb3Igbm90IGl0IGlzIHJ1bm5pbmcgaW4gdGhlIG1haW4gc2NvcGUgYnkKK2NoZWNraW5nIGl0cyBvd24gYGBfX25hbWVfX2BgLCB3aGljaCBhbGxvd3MgYSBjb21tb24gaWRpb20gZm9yIGNvbmRpdGlvbmFsbHkKK2V4ZWN1dGluZyBjb2RlIGluIGEgbW9kdWxlIHdoZW4gaXQgaXMgcnVuIGFzIGEgc2NyaXB0IG9yIHdpdGggYGBweXRob24KKy1tYGAgYnV0IG5vdCB3aGVuIGl0IGlzIGltcG9ydGVkOjoKIAogICAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAgICAjIGV4ZWN1dGUgb25seSBpZiBydW4gYXMgYSBzY3JpcHQKICAgICAgICBtYWluKCkKIAorRm9yIGEgcGFja2FnZSwgdGhlIHNhbWUgZWZmZWN0IGNhbiBiZSBhY2hpZXZlZCBieSBpbmNsdWRpbmcgYQorYGBfX21haW5fXy5weWBgIG1vZHVsZSwgdGhlIGNvbnRlbnRzIG9mIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUKK21vZHVsZSBpcyBydW4gd2l0aCBgYC1tYGAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9fdGhyZWFkLnJzdCBiL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CmluZGV4IDJlMTMwYzEuLmE3ODdlMmYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CkBAIC0xNzYsMTAgKzE3Niw2IEBACiAqIENhbGxpbmcgOmZ1bmM6YHN5cy5leGl0YCBvciByYWlzaW5nIHRoZSA6ZXhjOmBTeXN0ZW1FeGl0YCBleGNlcHRpb24gaXMKICAgZXF1aXZhbGVudCB0byBjYWxsaW5nIDpmdW5jOmBfdGhyZWFkLmV4aXRgLgogCi0qIE5vdCBhbGwgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgbWF5IGJsb2NrIHdhaXRpbmcgZm9yIEkvTyBhbGxvdyBvdGhlciB0aHJlYWRzCi0gIHRvIHJ1bi4gIChUaGUgbW9zdCBwb3B1bGFyIG9uZXMgKDpmdW5jOmB0aW1lLnNsZWVwYCwgOm1ldGg6YGlvLkZpbGVJTy5yZWFkYCwKLSAgOmZ1bmM6YHNlbGVjdC5zZWxlY3RgKSB3b3JrIGFzIGV4cGVjdGVkLikKLQogKiBJdCBpcyBub3QgcG9zc2libGUgdG8gaW50ZXJydXB0IHRoZSA6bWV0aDpgYWNxdWlyZWAgbWV0aG9kIG9uIGEgbG9jayAtLS0gdGhlCiAgIDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgdGhlIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FiYy5yc3QgYi9Eb2MvbGlicmFyeS9hYmMucnN0CmluZGV4IDkyOTkxMjQuLjdhNzM3MDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWJjLnJzdApAQCAtMTIsOSArMTIsOSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyA6dGVybTpgYWJzdHJhY3QgYmFzZQotY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOyBzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMKLXdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlIDptb2Q6YG51bWJlcnNgIG1vZHVsZQotcmVnYXJkaW5nIGEgdHlwZSBoaWVyYXJjaHkgZm9yIG51bWJlcnMgYmFzZWQgb24gQUJDcy4pCitjbGFzc2VzIDxhYnN0cmFjdCBiYXNlIGNsYXNzPmAgKEFCQ3MpIGluIFB5dGhvbiwgYXMgb3V0bGluZWQgaW4gOnBlcDpgMzExOWA7CitzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMgd2FzIGFkZGVkIHRvIFB5dGhvbi4gKFNlZSBhbHNvIDpwZXA6YDMxNDFgIGFuZCB0aGUKKzptb2Q6YG51bWJlcnNgIG1vZHVsZSByZWdhcmRpbmcgYSB0eXBlIGhpZXJhcmNoeSBmb3IgbnVtYmVycyBiYXNlZCBvbiBBQkNzLikKIAogVGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUgaGFzIHNvbWUgY29uY3JldGUgY2xhc3NlcyB0aGF0IGRlcml2ZSBmcm9tCiBBQkNzOyB0aGVzZSBjYW4sIG9mIGNvdXJzZSwgYmUgZnVydGhlciBkZXJpdmVkLiBJbiBhZGRpdGlvbiB0aGUKQEAgLTIzLDcgKzIzLDcgQEAKIGhhc2hhYmxlIG9yIGEgbWFwcGluZy4KIAogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzOgorVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IEFCQ01ldGEKIApAQCAtNTgsNiArNTgsMTAgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN1YmNsYXNzLCB0byBhbGxvdyB1c2FnZSBhcyBhIGNsYXNzIGRlY29yYXRvci4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFRvIGRldGVjdCBjYWxscyB0byA6bWV0aDpgcmVnaXN0ZXJgLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgIDpmdW5jOmBnZXRfY2FjaGVfdG9rZW5gIGZ1bmN0aW9uLgorCiAgICBZb3UgY2FuIGFsc28gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gYW4gYWJzdHJhY3QgYmFzZSBjbGFzczoKIAogICAgLi4gbWV0aG9kOjogX19zdWJjbGFzc2hvb2tfXyhzdWJjbGFzcykKQEAgLTEyNyw2ICsxMzEsMTkgQEAKICAgIGF2YWlsYWJsZSBhcyBhIG1ldGhvZCBvZiBgYEZvb2BgLCBzbyBpdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5LgogCiAKKy4uIGNsYXNzOjogQUJDCisKKyAgIEEgaGVscGVyIGNsYXNzIHRoYXQgaGFzIDpjbGFzczpgQUJDTWV0YWAgYXMgaXRzIG1ldGFjbGFzcy4gIFdpdGggdGhpcyBjbGFzcywKKyAgIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgYnkgc2ltcGx5IGRlcml2aW5nIGZyb20gOmNsYXNzOmBBQkNgLAorICAgYXZvaWRpbmcgc29tZXRpbWVzIGNvbmZ1c2luZyBtZXRhY2xhc3MgdXNhZ2UuCisKKyAgIE5vdGUgdGhhdCB0aGUgdHlwZSBvZiA6Y2xhc3M6YEFCQ2AgaXMgc3RpbGwgOmNsYXNzOmBBQkNNZXRhYCwgdGhlcmVmb3JlCisgICBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBBQkNgIHJlcXVpcmVzIHRoZSB1c3VhbCBwcmVjYXV0aW9ucyByZWdhcmRpbmcgbWV0YWNsYXNzCisgICB1c2FnZSwgYXMgbXVsdGlwbGUgaW5oZXJpdGFuY2UgbWF5IGxlYWQgdG8gbWV0YWNsYXNzIGNvbmZsaWN0cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzOgogCiAuLiBkZWNvcmF0b3I6OiBhYnN0cmFjdG1ldGhvZApAQCAtMjk1LDYgKzMxMiwxOSBAQAogICAgICAgIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAsIG1ha2luZyB0aGlzIGRlY29yYXRvciByZWR1bmRhbnQuCiAKIAorVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NhY2hlX3Rva2VuKCkKKworICAgUmV0dXJucyB0aGUgY3VycmVudCBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhY2hlIHRva2VuLgorCisgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIG9iamVjdCAodGhhdCBzdXBwb3J0cyBlcXVhbGl0eSB0ZXN0aW5nKSBpZGVudGlmeWluZworICAgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBjYWNoZSBmb3IgdmlydHVhbCBzdWJjbGFzc2VzLgorICAgVGhlIHRva2VuIGNoYW5nZXMgd2l0aCBldmVyeSBjYWxsIHRvIDptZXRoOmBBQkNNZXRhLnJlZ2lzdGVyYCBvbiBhbnkgQUJDLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIEMrKyBwcm9ncmFtbWVycyBzaG91bGQgbm90ZSB0aGF0IFB5dGhvbidzIHZpcnR1YWwgYmFzZSBjbGFzcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QgYi9Eb2MvbGlicmFyeS9haWZjLnJzdAppbmRleCA4YTM1NDFiLi42ZmJjZjI4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9haWZjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9haWZjLnJzdApAQCAtMzAsOCArMzAsOCBAQAogc2FtcGxlZC4gIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW5kaWNhdGUgaWYgdGhlIGF1ZGlvIGlzIG1vbm8sIHN0ZXJlbywgb3IKIHF1YWRyby4gIEVhY2ggZnJhbWUgY29uc2lzdHMgb2Ygb25lIHNhbXBsZSBwZXIgY2hhbm5lbC4gIFRoZSBzYW1wbGUgc2l6ZSBpcyB0aGUKIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBzYW1wbGUuICBUaHVzIGEgZnJhbWUgY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKiBieXRlcywgYW5kIGEgc2Vjb25kJ3Mgd29ydGggb2YgYXVkaW8gY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKlwqXCAqZnJhbWVyYXRlKiBieXRlcy4KK2BgbmNoYW5uZWxzICogc2FtcGxlc2l6ZWBgIGJ5dGVzLCBhbmQgYSBzZWNvbmQncyB3b3J0aCBvZiBhdWRpbyBjb25zaXN0cyBvZgorYGBuY2hhbm5lbHMgKiBzYW1wbGVzaXplICogZnJhbWVyYXRlYGAgYnl0ZXMuCiAKIEZvciBleGFtcGxlLCBDRCBxdWFsaXR5IGF1ZGlvIGhhcyBhIHNhbXBsZSBzaXplIG9mIHR3byBieXRlcyAoMTYgYml0cyksIHVzZXMgdHdvCiBjaGFubmVscyAoc3RlcmVvKSBhbmQgaGFzIGEgZnJhbWUgcmF0ZSBvZiA0NCwxMDAgZnJhbWVzL3NlY29uZC4gIFRoaXMgZ2l2ZXMgYQpAQCAtNTEsNiArNTEsMTEgQEAKICAgIHVzZWQgZm9yIHdyaXRpbmcsIHRoZSBmaWxlIG9iamVjdCBzaG91bGQgYmUgc2Vla2FibGUsIHVubGVzcyB5b3Uga25vdyBhaGVhZCBvZgogICAgdGltZSBob3cgbWFueSBzYW1wbGVzIHlvdSBhcmUgZ29pbmcgdG8gd3JpdGUgaW4gdG90YWwgYW5kIHVzZQogICAgOm1ldGg6YHdyaXRlZnJhbWVzcmF3YCBhbmQgOm1ldGg6YHNldG5mcmFtZXNgLgorICAgVGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gbWF5IGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgV2hlbgorICAgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBjb21wbGV0ZXMsIHRoZSA6bWV0aDpgfmFpZmMuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCiAKIE9iamVjdHMgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYCB3aGVuIGEgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcgaGF2ZSB0aGUKIGZvbGxvd2luZyBtZXRob2RzOgpAQCAtOTIsNyArOTcsOSBAQAogCiAuLiBtZXRob2Q6OiBhaWZjLmdldHBhcmFtcygpCiAKLSAgIFJldHVybiBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZSBhYm92ZSB2YWx1ZXMgaW4gdGhlIGFib3ZlIG9yZGVyLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogYWlmYy5nZXRtYXJrZXJzKCkKQEAgLTIxOCwxMiArMjI1LDE4IEBACiAgICBXcml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgYXVkaW8KICAgIGZpbGUgcGFyYW1ldGVycyBoYXZlIGJlZW4gc2V0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaXMgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IGFpZmMud3JpdGVmcmFtZXNyYXcoZGF0YSkKIAogICAgTGlrZSA6bWV0aDpgd3JpdGVmcmFtZXNgLCBleGNlcHQgdGhhdCB0aGUgaGVhZGVyIG9mIHRoZSBhdWRpbyBmaWxlIGlzIG5vdAogICAgdXBkYXRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBhaWZjLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0IGIvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CmluZGV4IGRjOWMyN2YuLmM3OWQ5M2UgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKQEAgLTk2OCw5ICs5NjgsOSBAQAogYGB0eXBlYGAgYXJndW1lbnQgaXMgYXBwbGllZCB0byBkZWZhdWx0IGFyZ3VtZW50cy4KIAogVG8gZWFzZSB0aGUgdXNlIG9mIHZhcmlvdXMgdHlwZXMgb2YgZmlsZXMsIHRoZSBhcmdwYXJzZSBtb2R1bGUgcHJvdmlkZXMgdGhlCi1mYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAgYW5kIGBgYnVmc2l6ZT1gYCBhcmd1bWVudHMgb2YgdGhlCi06ZnVuYzpgb3BlbmAgZnVuY3Rpb24uICBGb3IgZXhhbXBsZSwgYGBGaWxlVHlwZSgndycpYGAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEKLXdyaXRhYmxlIGZpbGU6OgorZmFjdG9yeSBGaWxlVHlwZSB3aGljaCB0YWtlcyB0aGUgYGBtb2RlPWBgLCBgYGJ1ZnNpemU9YGAsIGBgZW5jb2Rpbmc9YGAgYW5kCitgYGVycm9ycz1gYCBhcmd1bWVudHMgb2YgdGhlIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLAorYGBGaWxlVHlwZSgndycpYGAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgd3JpdGFibGUgZmlsZTo6CiAKICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKQpAQCAtMTIzNSwxNiArMTIzNSwxNiBAQAogQWN0aW9uIGNsYXNzZXMgaW1wbGVtZW50IHRoZSBBY3Rpb24gQVBJLCBhIGNhbGxhYmxlIHdoaWNoIHJldHVybnMgYSBjYWxsYWJsZQogd2hpY2ggcHJvY2Vzc2VzIGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kLWxpbmUuIEFueSBvYmplY3Qgd2hpY2ggZm9sbG93cwogdGhpcyBBUEkgbWF5IGJlIHBhc3NlZCBhcyB0aGUgYGBhY3Rpb25gYCBwYXJhbWV0ZXIgdG8KLTptZXRob2Q6YGFkZF9hcmd1bWVudGAuCis6bWV0aDpgYWRkX2FyZ3VtZW50YC4KIAotLi4gY2xhc3M6OiBBY3Rpb24ob3B0aW9uX3N0cmluZ3MsIGRlc3QsIG5hcmdzPU5vbmUsIGNvbnN0PU5vbmUsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgIHR5cGU9Tm9uZSwgY2hvaWNlcz1Ob25lLCByZXF1aXJlZD1GYWxzZSwgaGVscD1Ob25lLAorLi4gY2xhc3M6OiBBY3Rpb24ob3B0aW9uX3N0cmluZ3MsIGRlc3QsIG5hcmdzPU5vbmUsIGNvbnN0PU5vbmUsIGRlZmF1bHQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgdHlwZT1Ob25lLCBjaG9pY2VzPU5vbmUsIHJlcXVpcmVkPUZhbHNlLCBoZWxwPU5vbmUsIFwKICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9Tm9uZSkKIAogQWN0aW9uIG9iamVjdHMgYXJlIHVzZWQgYnkgYW4gQXJndW1lbnRQYXJzZXIgdG8gcmVwcmVzZW50IHRoZSBpbmZvcm1hdGlvbgogbmVlZGVkIHRvIHBhcnNlIGEgc2luZ2xlIGFyZ3VtZW50IGZyb20gb25lIG9yIG1vcmUgc3RyaW5ncyBmcm9tIHRoZQogY29tbWFuZCBsaW5lLiBUaGUgQWN0aW9uIGNsYXNzIG11c3QgYWNjZXB0IHRoZSB0d28gcG9zaXRpb25hbCBhcmd1bWVudHMKLXBsdXMgYW55IGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byA6bWV0aG9kOmBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgCitwbHVzIGFueSBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gOm1ldGg6YEFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAKIGV4Y2VwdCBmb3IgdGhlIGBgYWN0aW9uYGAgaXRzZWxmLgogCiBJbnN0YW5jZXMgb2YgQWN0aW9uIChvciByZXR1cm4gdmFsdWUgb2YgYW55IGNhbGxhYmxlIHRvIHRoZSBgYGFjdGlvbmBgCkBAIC0xNjgyLDE3ICsxNjgyLDE5IEBACiBGaWxlVHlwZSBvYmplY3RzCiBeXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9Tm9uZSkKKy4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCiAgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCiAgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKLSAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyBmaWxlcwotICAgd2l0aCB0aGUgcmVxdWVzdGVkIG1vZGVzIGFuZCBidWZmZXIgc2l6ZXM6OgorICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzCisgICBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgbW9kZXMsIGJ1ZmZlciBzaXplcywgZW5jb2RpbmdzIGFuZCBlcnJvciBoYW5kbGluZworICAgKHNlZSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMpOjoKIAogICAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCi0gICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLW91dHB1dCcsICdvdXQnXSkKLSAgICAgIE5hbWVzcGFjZShvdXRwdXQ9PF9pby5CdWZmZXJlZFdyaXRlciBuYW1lPSdvdXQnPikKKyAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJhdycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCisgICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnb3V0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdVVEYtOCcpKQorICAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1yYXcnLCAncmF3LmRhdCcsICdmaWxlLnR4dCddKQorICAgICAgTmFtZXNwYWNlKG91dD08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nZmlsZS50eHQnIG1vZGU9J3cnIGVuY29kaW5nPSdVVEYtOCc+LCByYXc9PF9pby5GaWxlSU8gbmFtZT0ncmF3LmRhdCcgbW9kZT0nd2InPikKIAogICAgRmlsZVR5cGUgb2JqZWN0cyB1bmRlcnN0YW5kIHRoZSBwc2V1ZG8tYXJndW1lbnQgYGAnLSdgYCBhbmQgYXV0b21hdGljYWxseQogICAgY29udmVydCB0aGlzIGludG8gYGBzeXMuc3RkaW5gYCBmb3IgcmVhZGFibGUgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhbmQKQEAgLTE3MDMsNiArMTcwNSw5IEBACiAgICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctJ10pCiAgICAgICBOYW1lc3BhY2UoaW5maWxlPTxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSc8c3RkaW4+JyBlbmNvZGluZz0nVVRGLTgnPikKIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKmVuY29kaW5ncyogYW5kICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnRzLgorCiAKIEFyZ3VtZW50IGdyb3VwcwogXl5eXl5eXl5eXl5eXl5eCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKaW5kZXggYWRiZDNiZS4uYzZmYTA2MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdApAQCAtMTAsNiArMTAsMTEgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAorLi4gbm90ZTo6CisKKyAgIFRoaXMgbW9kdWxlIGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4gIEZvciBuZXcgY29kZSB3ZQorICAgcmVjb21tZW5kIHVzaW5nIDptb2Q6YGFzeW5jaW9gLgorCiBUaGlzIG1vZHVsZSBidWlsZHMgb24gdGhlIDptb2Q6YGFzeW5jb3JlYCBpbmZyYXN0cnVjdHVyZSwgc2ltcGxpZnlpbmcKIGFzeW5jaHJvbm91cyBjbGllbnRzIGFuZCBzZXJ2ZXJzIGFuZCBtYWtpbmcgaXQgZWFzaWVyIHRvIGhhbmRsZSBwcm90b2NvbHMKIHdob3NlIGVsZW1lbnRzIGFyZSB0ZXJtaW5hdGVkIGJ5IGFyYml0cmFyeSBzdHJpbmdzLCBvciBhcmUgb2YgdmFyaWFibGUgbGVuZ3RoLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1kZXYucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1kZXYucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OTdkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWRldi5yc3QKQEAgLTAsMCArMSwzMTkgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKKy4uIF9hc3luY2lvLWRldjoKKworRGV2ZWxvcCB3aXRoIGFzeW5jaW8KKz09PT09PT09PT09PT09PT09PT09CisKK0FzeW5jaHJvbm91cyBwcm9ncmFtbWluZyBpcyBkaWZmZXJlbnQgdGhhbiBjbGFzc2ljYWwgInNlcXVlbnRpYWwiIHByb2dyYW1taW5nLgorVGhpcyBwYWdlIGxpc3RzIGNvbW1vbiB0cmFwcyBhbmQgZXhwbGFpbnMgaG93IHRvIGF2b2lkIHRoZW0uCisKKworLi4gX2FzeW5jaW8tZGVidWctbW9kZToKKworRGVidWcgbW9kZSBvZiBhc3luY2lvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gZW5hYmxlIHRoZSBkZWJ1ZyBtb2RlIGdsb2JhbGx5LCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCis6ZW52dmFyOmBQWVRIT05BU1lOQ0lPREVCVUdgIHRvIGBgMWBgLiBUbyBzZWUgZGVidWcgdHJhY2VzLCBzZXQgdGhlIGxvZyBsZXZlbAorb2YgdGhlIDpyZWY6YGFzeW5jaW8gbG9nZ2VyIDxhc3luY2lvLWxvZ2dlcj5gIHRvIDpweTpkYXRhOmBsb2dnaW5nLkRFQlVHYC4gIFRoZQorc2ltcGxlc3QgY29uZmlndXJhdGlvbiBpczo6CisKKyAgIGltcG9ydCBsb2dnaW5nCisgICAjIC4uLgorICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkRFQlVHKQorCitFeGFtcGxlcyBvZiBlZmZlY3RzIG9mIHRoZSBkZWJ1ZyBtb2RlOgorCisqIExvZyA6cmVmOmBjb3JvdXRpbmVzIGRlZmluZWQgYnV0IG5ldmVyICJ5aWVsZGVkIGZyb20iCisgIDxhc3luY2lvLWNvcm91dGluZS1ub3Qtc2NoZWR1bGVkPmAKKyogOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNhbGxfc29vbmAgYW5kIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jYWxsX2F0YCBtZXRob2RzCisgIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBjYWxsZWQgZnJvbSB0aGUgd3JvbmcgdGhyZWFkLgorKiBMb2cgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIHRoZSBzZWxlY3RvcgorKiBMb2cgY2FsbGJhY2tzIHRha2luZyBtb3JlIHRoYW4gMTAwIG1zIHRvIGJlIGV4ZWN1dGVkLiBUaGUKKyAgOmF0dHI6YEJhc2VFdmVudExvb3Auc2xvd19jYWxsYmFja19kdXJhdGlvbmAgYXR0cmlidXRlIGlzIHRoZSBtaW5pbXVtCisgIGR1cmF0aW9uIGluIHNlY29uZHMgb2YgInNsb3ciIGNhbGxiYWNrcy4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5zZXRfZGVidWdgIG1ldGhvZCBhbmQgdGhlIDpyZWY6YGFzeW5jaW8gbG9nZ2VyCisgICA8YXN5bmNpby1sb2dnZXI+YC4KKworCisuLiBfYXN5bmNpby1tdWx0aXRocmVhZGluZzoKKworQ29uY3VycmVuY3kgYW5kIG11bHRpdGhyZWFkaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gZXZlbnQgbG9vcCBydW5zIGluIGEgdGhyZWFkIGFuZCBleGVjdXRlcyBhbGwgY2FsbGJhY2tzIGFuZCB0YXNrcyBpbiB0aGUgc2FtZQordGhyZWFkLiBXaGlsZSBhIHRhc2sgaXMgcnVubmluZyBpbiB0aGUgZXZlbnQgbG9vcCwgbm8gb3RoZXIgdGFzayBpcyBydW5uaW5nIGluCit0aGUgc2FtZSB0aHJlYWQuIEJ1dCB3aGVuIHRoZSB0YXNrIHVzZXMgYGB5aWVsZCBmcm9tYGAsIHRoZSB0YXNrIGlzIHN1c3BlbmRlZAorYW5kIHRoZSBldmVudCBsb29wIGV4ZWN1dGVzIHRoZSBuZXh0IHRhc2suCisKK1RvIHNjaGVkdWxlIGEgY2FsbGJhY2sgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQsIHRoZQorOm1ldGg6YEJhc2VFdmVudExvb3AuY2FsbF9zb29uX3RocmVhZHNhZmVgIG1ldGhvZCBzaG91bGQgYmUgdXNlZC4gRXhhbXBsZSB0bworc2NoZWR1bGUgYSBjb3JvdXRpbmUgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQ6OgorCisgICAgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShhc3luY2lvLmFzeW5jLCBjb3JvX2Z1bmMoKSkKKworTW9zdCBhc3luY2lvIG9iamVjdHMgYXJlIG5vdCB0aHJlYWQgc2FmZS4gWW91IHNob3VsZCBvbmx5IHdvcnJ5IGlmIHlvdSBhY2Nlc3MKK29iamVjdHMgb3V0c2lkZSB0aGUgZXZlbnQgbG9vcC4gRm9yIGV4YW1wbGUsIHRvIGNhbmNlbCBhIGZ1dHVyZSwgZG9uJ3QgY2FsbAorZGlyZWN0bHkgaXRzIDptZXRoOmBGdXR1cmUuY2FuY2VsYCBtZXRob2QsIGJ1dDo6CisKKyAgICBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGZ1dC5jYW5jZWwpCisKK1RvIGhhbmRsZSBzaWduYWxzIGFuZCB0byBleGVjdXRlIHN1YnByb2Nlc3NlcywgdGhlIGV2ZW50IGxvb3AgbXVzdCBiZSBydW4gaW4KK3RoZSBtYWluIHRocmVhZC4KKworVGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLnJ1bl9pbl9leGVjdXRvcmAgbWV0aG9kIGNhbiBiZSB1c2VkIHdpdGggYSB0aHJlYWQgcG9vbAorZXhlY3V0b3IgdG8gZXhlY3V0ZSBhIGNhbGxiYWNrIGluIGRpZmZlcmVudCB0aHJlYWQgdG8gbm90IGJsb2NrIHRoZSB0aHJlYWQgb2YKK3RoZSBldmVudCBsb29wLgorCisuLiBzZWVhbHNvOjoKKworICAgU2VlIHRoZSA6cmVmOmBTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyA8YXN5bmNpby1zeW5jPmAgc2VjdGlvbiB0bworICAgc3luY2hyb25pemUgdGFza3MuCisKKworLi4gX2FzeW5jaW8taGFuZGxlLWJsb2NraW5nOgorCitIYW5kbGUgYmxvY2tpbmcgZnVuY3Rpb25zIGNvcnJlY3RseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmxvY2tpbmcgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBGb3IgZXhhbXBsZSwgaWYgYSBmdW5jdGlvbgorYmxvY2tzIGZvciAxIHNlY29uZCwgb3RoZXIgdGFza3MgYXJlIGRlbGF5ZWQgYnkgMSBzZWNvbmQgd2hpY2ggY2FuIGhhdmUgYW4KK2ltcG9ydGFudCBpbXBhY3Qgb24gcmVhY3Rpdml0eS4KKworRm9yIG5ldHdvcmtpbmcgYW5kIHN1YnByb2Nlc3NlcywgdGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBwcm92aWRlcyBoaWdoLWxldmVsCitBUElzIGxpa2UgOnJlZjpgcHJvdG9jb2xzIDxhc3luY2lvLXByb3RvY29sPmAuCisKK0FuIGV4ZWN1dG9yIGNhbiBiZSB1c2VkIHRvIHJ1biBhIHRhc2sgaW4gYSBkaWZmZXJlbnQgdGhyZWFkIG9yIGV2ZW4gaW4gYQorZGlmZmVyZW50IHByb2Nlc3MsIHRvIG5vdCBibG9jayB0aGUgdGhyZWFkIG9mIHRoZSBldmVudCBsb29wLiBTZWUgdGhlCis6bWV0aDpgQmFzZUV2ZW50TG9vcC5ydW5faW5fZXhlY3V0b3JgIG1ldGhvZC4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBEZWxheWVkIGNhbGxzIDxhc3luY2lvLWRlbGF5ZWQtY2FsbHM+YCBzZWN0aW9uIGRldGFpbHMgaG93IHRoZQorICAgZXZlbnQgbG9vcCBoYW5kbGVzIHRpbWUuCisKKworLi4gX2FzeW5jaW8tbG9nZ2VyOgorCitMb2dnaW5nCistLS0tLS0tCisKK1RoZSA6bW9kOmBhc3luY2lvYCBtb2R1bGUgbG9ncyBpbmZvcm1hdGlvbiB3aXRoIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUgaW4KK3RoZSBsb2dnZXIgYGAnYXN5bmNpbydgYC4KKworCisuLiBfYXN5bmNpby1jb3JvdXRpbmUtbm90LXNjaGVkdWxlZDoKKworRGV0ZWN0IGNvcm91dGluZSBvYmplY3RzIG5ldmVyIHNjaGVkdWxlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgY29yb3V0aW5lIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgaXRzIHJlc3VsdCBpcyBub3QgcGFzc2VkIHRvCis6ZnVuYzpgYXN5bmNgIG9yIHRvIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AgbWV0aG9kOiB0aGUgZXhlY3V0aW9uCitvZiB0aGUgY29yb3V0aW5lIG9iamV0IHdpbGwgbmV2ZXIgYmUgc2NoZWR1bGVkIGFuZCBpdCBpcyBwcm9iYWJseSBhIGJ1Zy4KKzpyZWY6YEVuYWJsZSB0aGUgZGVidWcgbW9kZSBvZiBhc3luY2lvIDxhc3luY2lvLWRlYnVnLW1vZGU+YCB0byA6cmVmOmBsb2cgYQord2FybmluZyA8YXN5bmNpby1sb2dnZXI+YCB0byBkZXRlY3QgaXQuCisKK0V4YW1wbGUgd2l0aCB0aGUgYnVnOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgdGVzdCgpOgorICAgICAgICBwcmludCgibmV2ZXIgc2NoZWR1bGVkIikKKworICAgIHRlc3QoKQorCitPdXRwdXQgaW4gZGVidWcgbW9kZTo6CisKKyAgICBDb3JvdXRpbmUgdGVzdCgpIGF0IHRlc3QucHk6MyB3YXMgbmV2ZXIgeWllbGRlZCBmcm9tCisgICAgQ29yb3V0aW5lIG9iamVjdCBjcmVhdGVkIGF0IChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAidGVzdC5weSIsIGxpbmUgNywgaW4gPG1vZHVsZT4KKyAgICAgICAgdGVzdCgpCisKK1RoZSBmaXggaXMgdG8gY2FsbCB0aGUgOmZ1bmM6YGFzeW5jYCBmdW5jdGlvbiBvciB0aGUKKzptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYCBtZXRob2Qgd2l0aCB0aGUgY29yb3V0aW5lIG9iamVjdC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YFBlbmRpbmcgdGFzayBkZXN0cm95ZWQgPGFzeW5jaW8tcGVuZGluZy10YXNrLWRlc3Ryb3llZD5gLgorCisKK0RldGVjdCBleGNlcHRpb25zIG5ldmVyIGNvbnN1bWVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gdXN1YWxseSBjYWxscyA6ZnVuYzpgc3lzLmRpc3BsYXlob29rYCBvbiB1bmhhbmRsZWQgZXhjZXB0aW9ucy4gSWYKKzptZXRoOmBGdXR1cmUuc2V0X2V4Y2VwdGlvbmAgaXMgY2FsbGVkLCBidXQgdGhlIGV4Y2VwdGlvbiBpcyBuZXZlciBjb25zdW1lZCwKKzpmdW5jOmBzeXMuZGlzcGxheWhvb2tgIGlzIG5vdCBjYWxsZWQuIEluc3RlYWQsIGEgOnJlZjpgYSBsb2cgaXMgZW1pdHRlZAorPGFzeW5jaW8tbG9nZ2VyPmAgd2hlbiB0aGUgZnV0dXJlIGlzIGRlbGV0ZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLCB3aXRoIHRoZQordHJhY2ViYWNrIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzIHJhaXNlZC4KKworRXhhbXBsZSBvZiB1bmhhbmRsZWQgZXhjZXB0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgYnVnKCk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigibm90IGNvbnN1bWVkIikKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBhc3luY2lvLmFzeW5jKGJ1ZygpKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCitPdXRwdXQ6OgorCisgICAgVGFzayBleGNlcHRpb24gd2FzIG5ldmVyIHJldHJpZXZlZAorICAgIGZ1dHVyZTogPFRhc2sgZmluaXNoZWQgYnVnKCkgZG9uZSBhdCBhc3luY2lvL2Nvcm91dGluZXMucHk6MTM5IGV4Y2VwdGlvbj1FeGNlcHRpb24oJ25vdCBjb25zdW1lZCcsKT4KKyAgICBzb3VyY2VfdHJhY2ViYWNrOiBPYmplY3QgY3JlYXRlZCBhdCAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDEwLCBpbiA8bW9kdWxlPgorICAgICAgICBhc3luY2lvLmFzeW5jKGJ1ZygpKQorICAgICAgRmlsZSAiYXN5bmNpby90YXNrcy5weSIsIGxpbmUgNTEwLCBpbiBhc3luYworICAgICAgICB0YXNrID0gbG9vcC5jcmVhdGVfdGFzayhjb3JvX29yX2Z1dHVyZSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICJhc3luY2lvL3Rhc2tzLnB5IiwgbGluZSAyNDQsIGluIF9zdGVwCisgICAgICAgIHJlc3VsdCA9IG5leHQoY29ybykKKyAgICAgIEZpbGUgImNvcm91dGluZXMucHkiLCBsaW5lIDc4LCBpbiBfX25leHRfXworICAgICAgICByZXR1cm4gbmV4dChzZWxmLmdlbikKKyAgICAgIEZpbGUgImFzeW5jaW8vY29yb3V0aW5lcy5weSIsIGxpbmUgMTQxLCBpbiBjb3JvCisgICAgICAgIHJlcyA9IGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICBGaWxlICJ0ZXN0LnB5IiwgbGluZSA3LCBpbiBidWcKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJub3QgY29uc3VtZWQiKQorICAgIEV4Y2VwdGlvbjogbm90IGNvbnN1bWVkCisKKzpyZWY6YEVuYWJsZSB0aGUgZGVidWcgbW9kZSBvZiBhc3luY2lvIDxhc3luY2lvLWRlYnVnLW1vZGU+YCB0byBnZXQgdGhlCit0cmFjZWJhY2sgd2hlcmUgdGhlIHRhc2sgd2FzIGNyZWF0ZWQuCisKK1RoZXJlIGFyZSBkaWZmZXJlbnQgb3B0aW9ucyB0byBmaXggdGhpcyBpc3N1ZS4gVGhlIGZpcnN0IG9wdGlvbiBpcyB0byBjaGFpbiB0bworY29yb3V0aW5lIGluIGFub3RoZXIgY29yb3V0aW5lIGFuZCB1c2UgY2xhc3NpYyB0cnkvZXhjZXB0OjoKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYnVnKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHByaW50KCJleGNlcHRpb24gY29uc3VtZWQiKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGFzeW5jaW8uYXN5bmMoaGFuZGxlX2V4Y2VwdGlvbigpKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCitBbm90aGVyIG9wdGlvbiBpcyB0byB1c2UgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAKK2Z1bmN0aW9uOjoKKworICAgIHRhc2sgPSBhc3luY2lvLmFzeW5jKGJ1ZygpKQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBwcmludCgiZXhjZXB0aW9uIGNvbnN1bWVkIikKKworU2VlIGFsc28gdGhlIDptZXRoOmBGdXR1cmUuZXhjZXB0aW9uYCBtZXRob2QuCisKKworQ2hhaW4gY29ycmVjdGx5IGNvcm91dGluZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYSBjb3JvdXRpbmUgZnVuY3Rpb24gY2FsbHMgb3RoZXIgY29yb3V0aW5lIGZ1bmN0aW9ucyBhbmQgdGFza3MsIHRoZXkKK3Nob3VsZCBiZSBjaGFpbmVkIGV4cGxpY2l0bHkgd2l0aCBgYHlpZWxkIGZyb21gYC4gT3RoZXJ3aXNlLCB0aGUgZXhlY3V0aW9uIGlzCitub3QgZ3VhcmFudGVlZCB0byBiZSBzZXF1ZW50aWFsLgorCitFeGFtcGxlIHdpdGggZGlmZmVyZW50IGJ1Z3MgdXNpbmcgOmZ1bmM6YGFzeW5jaW8uc2xlZXBgIHRvIHNpbXVsYXRlIHNsb3cKK29wZXJhdGlvbnM6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGUoKToKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDMuMCkKKyAgICAgICAgcHJpbnQoIigxKSBjcmVhdGUgZmlsZSIpCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgd3JpdGUoKToKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEuMCkKKyAgICAgICAgcHJpbnQoIigyKSB3cml0ZSBpbnRvIGZpbGUiKQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGNsb3NlKCk6CisgICAgICAgIHByaW50KCIoMykgY2xvc2UgZmlsZSIpCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgdGVzdCgpOgorICAgICAgICBhc3luY2lvLmFzeW5jKGNyZWF0ZSgpKQorICAgICAgICBhc3luY2lvLmFzeW5jKHdyaXRlKCkpCisgICAgICAgIGFzeW5jaW8uYXN5bmMoY2xvc2UoKSkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDIuMCkKKyAgICAgICAgbG9vcC5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBhc3luY2lvLmFzeW5jKHRlc3QoKSkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBwcmludCgiUGVuZGluZyB0YXNrcyBhdCBleGl0OiAlcyIgJSBhc3luY2lvLlRhc2suYWxsX3Rhc2tzKGxvb3ApKQorICAgIGxvb3AuY2xvc2UoKQorCitFeHBlY3RlZCBvdXRwdXQ6OgorCisgICAgKDEpIGNyZWF0ZSBmaWxlCisgICAgKDIpIHdyaXRlIGludG8gZmlsZQorICAgICgzKSBjbG9zZSBmaWxlCisgICAgUGVuZGluZyB0YXNrcyBhdCBleGl0OiBzZXQoKQorCitBY3R1YWwgb3V0cHV0OjoKKworICAgICgzKSBjbG9zZSBmaWxlCisgICAgKDIpIHdyaXRlIGludG8gZmlsZQorICAgIFBlbmRpbmcgdGFza3MgYXQgZXhpdDogezxUYXNrIHBlbmRpbmcgY3JlYXRlKCkgYXQgdGVzdC5weTo3IHdhaXRfZm9yPTxGdXR1cmUgcGVuZGluZyBjYj1bVGFzay5fd2FrZXVwKCldPj59CisgICAgVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIQorICAgIHRhc2s6IDxUYXNrIHBlbmRpbmcgY3JlYXRlKCkgZG9uZSBhdCB0ZXN0LnB5OjUgd2FpdF9mb3I9PEZ1dHVyZSBwZW5kaW5nIGNiPVtUYXNrLl93YWtldXAoKV0+PgorCitUaGUgbG9vcCBzdG9wcGVkIGJlZm9yZSB0aGUgYGBjcmVhdGUoKWBgIGZpbmlzaGVkLCBgYGNsb3NlKClgYCBoYXMgYmVlbiBjYWxsZWQKK2JlZm9yZSBgYHdyaXRlKClgYCwgd2hlcmVhcyBjb3JvdXRpbmUgZnVuY3Rpb25zIHdlcmUgY2FsbGVkIGluIHRoaXMgb3JkZXI6CitgYGNyZWF0ZSgpYGAsIGBgd3JpdGUoKWBgLCBgYGNsb3NlKClgYC4KKworVG8gZml4IHRoZSBleGFtcGxlLCB0YXNrcyBtdXN0IGJlIG1hcmtlZCB3aXRoIGBgeWllbGQgZnJvbWBgOjoKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiB0ZXN0KCk6CisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5hc3luYyhjcmVhdGUoKSkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLmFzeW5jKHdyaXRlKCkpCisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5hc3luYyhjbG9zZSgpKQorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMi4wKQorICAgICAgICBsb29wLnN0b3AoKQorCitPciB3aXRob3V0IGBgYXN5bmNpby5hc3luYygpYGA6OgorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHRlc3QoKToKKyAgICAgICAgeWllbGQgZnJvbSBjcmVhdGUoKQorICAgICAgICB5aWVsZCBmcm9tIHdyaXRlKCkKKyAgICAgICAgeWllbGQgZnJvbSBjbG9zZSgpCisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgyLjApCisgICAgICAgIGxvb3Auc3RvcCgpCisKKworLi4gX2FzeW5jaW8tcGVuZGluZy10YXNrLWRlc3Ryb3llZDoKKworUGVuZGluZyB0YXNrIGRlc3Ryb3llZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBhIHBlbmRpbmcgdGFzayBpcyBkZXN0cm95ZWQsIHRoZSBleGVjdXRpb24gb2YgaXRzIHdyYXBwZWQgOnJlZjpgY29yb3V0aW5lCis8Y29yb3V0aW5lPmAgZGlkIG5vdCBjb21wbGV0ZS4gSXQgaXMgcHJvYmFibHkgYSBidWcgYW5kIHNvIGEgd2FybmluZyBpcyBsb2dnZWQuCisKK0V4YW1wbGUgb2YgbG9nOjoKKworICAgIFRhc2sgd2FzIGRlc3Ryb3llZCBidXQgaXQgaXMgcGVuZGluZyEKKyAgICBzb3VyY2VfdHJhY2ViYWNrOiBPYmplY3QgY3JlYXRlZCBhdCAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDE3LCBpbiA8bW9kdWxlPgorICAgICAgICB0YXNrID0gYXN5bmNpby5hc3luYyhjb3JvLCBsb29wPWxvb3ApCisgICAgICBGaWxlICJhc3luY2lvL3Rhc2tzLnB5IiwgbGluZSA1MTAsIGluIGFzeW5jCisgICAgICAgIHRhc2sgPSBsb29wLmNyZWF0ZV90YXNrKGNvcm9fb3JfZnV0dXJlKQorICAgIHRhc2s6IDxUYXNrIHBlbmRpbmcga2lsbF9tZSgpIGRvbmUgYXQgdGVzdC5weTo1IHdhaXRfZm9yPTxGdXR1cmUgcGVuZGluZyBjYj1bVGFzay5fd2FrZXVwKCldPj4KKworOnJlZjpgRW5hYmxlIHRoZSBkZWJ1ZyBtb2RlIG9mIGFzeW5jaW8gPGFzeW5jaW8tZGVidWctbW9kZT5gIHRvIGdldCB0aGUKK3RyYWNlYmFjayB3aGVyZSB0aGUgdGFzayB3YXMgY3JlYXRlZC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YERldGVjdCBjb3JvdXRpbmUgb2JqZWN0cyBuZXZlciBzY2hlZHVsZWQgPGFzeW5jaW8tY29yb3V0aW5lLW5vdC1zY2hlZHVsZWQ+YC4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MDZiNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5yc3QKQEAgLTAsMCArMSw2ODcgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKKy4uIF9hc3luY2lvLWV2ZW50LWxvb3A6CisKK0Jhc2UgRXZlbnQgTG9vcAorPT09PT09PT09PT09PT09CisKK1RoZSBldmVudCBsb29wIGlzIHRoZSBjZW50cmFsIGV4ZWN1dGlvbiBkZXZpY2UgcHJvdmlkZWQgYnkgOm1vZDpgYXN5bmNpb2AuCitJdCBwcm92aWRlcyBtdWx0aXBsZSBmYWNpbGl0aWVzLCBhbW9uZ3N0IHdoaWNoOgorCisqIFJlZ2lzdGVyaW5nLCBleGVjdXRpbmcgYW5kIGNhbmNlbGxpbmcgZGVsYXllZCBjYWxscyAodGltZW91dHMpLgorCisqIENyZWF0aW5nIGNsaWVudCBhbmQgc2VydmVyIDpyZWY6YHRyYW5zcG9ydHMgPGFzeW5jaW8tdHJhbnNwb3J0PmAgZm9yIHZhcmlvdXMKKyAga2luZHMgb2YgY29tbXVuaWNhdGlvbi4KKworKiBMYXVuY2hpbmcgc3VicHJvY2Vzc2VzIGFuZCB0aGUgYXNzb2NpYXRlZCA6cmVmOmB0cmFuc3BvcnRzCisgIDxhc3luY2lvLXRyYW5zcG9ydD5gIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYW4gZXh0ZXJuYWwgcHJvZ3JhbS4KKworKiBEZWxlZ2F0aW5nIGNvc3RseSBmdW5jdGlvbiBjYWxscyB0byBhIHBvb2wgb2YgdGhyZWFkcy4KKworLi4gY2xhc3M6OiBCYXNlRXZlbnRMb29wCisKKyAgIEJhc2UgY2xhc3Mgb2YgZXZlbnQgbG9vcHMuCisKK1J1biBhbiBldmVudCBsb29wCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnJ1bl9mb3JldmVyKCkKKworICAgUnVuIHVudGlsIDptZXRoOmBzdG9wYCBpcyBjYWxsZWQuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHVyZSkKKworICAgUnVuIHVudGlsIHRoZSA6Y2xhc3M6YEZ1dHVyZWAgaXMgZG9uZS4KKworICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAsIGl0IGlzIHdyYXBwZWQgYnkKKyAgIDpmdW5jOmBhc3luY2AuCisKKyAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmlzX3J1bm5pbmcoKQorCisgICBSZXR1cm5zIHJ1bm5pbmcgc3RhdHVzIG9mIGV2ZW50IGxvb3AuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc3RvcCgpCisKKyAgIFN0b3AgcnVubmluZyB0aGUgZXZlbnQgbG9vcC4KKworICAgRXZlcnkgY2FsbGJhY2sgc2NoZWR1bGVkIGJlZm9yZSA6bWV0aDpgc3RvcGAgaXMgY2FsbGVkIHdpbGwgcnVuLgorICAgQ2FsbGJhY2tzIHNjaGVkdWxlZCBhZnRlciA6bWV0aDpgc3RvcGAgaXMgY2FsbGVkIHdpbGwgbm90IHJ1bi4KKyAgIEhvd2V2ZXIsIHRob3NlIGNhbGxiYWNrcyB3aWxsIHJ1biBpZiA6bWV0aDpgcnVuX2ZvcmV2ZXJgIGlzIGNhbGxlZAorICAgYWdhaW4gbGF0ZXIuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuaXNfY2xvc2VkKCkKKworICAgUmV0dXJucyBgYFRydWVgYCBpZiB0aGUgZXZlbnQgbG9vcCB3YXMgY2xvc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuMgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNsb3NlKCkKKworICAgQ2xvc2UgdGhlIGV2ZW50IGxvb3AuIFRoZSBsb29wIG11c3Qgbm90IGJlIHJ1bm5pbmcuCisKKyAgIFRoaXMgY2xlYXJzIHRoZSBxdWV1ZXMgYW5kIHNodXRzIGRvd24gdGhlIGV4ZWN1dG9yLCBidXQgZG9lcyBub3Qgd2FpdCBmb3IKKyAgIHRoZSBleGVjdXRvciB0byBmaW5pc2guCisKKyAgIFRoaXMgaXMgaWRlbXBvdGVudCBhbmQgaXJyZXZlcnNpYmxlLiBObyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIKKyAgIHRoaXMgb25lLgorCisKK0NhbGxzCistLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNhbGxfc29vbihjYWxsYmFjaywgXCphcmdzKQorCisgICBBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorCisgICBUaGlzIG9wZXJhdGVzIGFzIGEgRklGTyBxdWV1ZSwgY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlIG9yZGVyIGluCisgICB3aGljaCB0aGV5IGFyZSByZWdpc3RlcmVkLiAgRWFjaCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuCisKKyAgIEFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCisgICBjYWxsYmFjayB3aGVuIGl0IGlzIGNhbGxlZC4KKworICAgQW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBhc3luY2lvLkhhbmRsZWAgaXMgcmV0dXJuZWQuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssIFwqYXJncykKKworICAgTGlrZSA6bWV0aDpgY2FsbF9zb29uYCwgYnV0IHRocmVhZCBzYWZlLgorCisKKy4uIF9hc3luY2lvLWRlbGF5ZWQtY2FsbHM6CisKK0RlbGF5ZWQgY2FsbHMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGV2ZW50IGxvb3AgaGFzIGl0cyBvd24gaW50ZXJuYWwgY2xvY2sgZm9yIGNvbXB1dGluZyB0aW1lb3V0cy4KK1doaWNoIGNsb2NrIGlzIHVzZWQgZGVwZW5kcyBvbiB0aGUgKHBsYXRmb3JtLXNwZWNpZmljKSBldmVudCBsb29wCitpbXBsZW1lbnRhdGlvbjsgaWRlYWxseSBpdCBpcyBhIG1vbm90b25pYyBjbG9jay4gIFRoaXMgd2lsbCBnZW5lcmFsbHkgYmUKK2EgZGlmZmVyZW50IGNsb2NrIHRoYW4gOmZ1bmM6YHRpbWUudGltZWAuCisKKy4uIG5vdGU6OgorCisgICBUaW1lb3V0cyAocmVsYXRpdmUgKmRlbGF5KiBvciBhYnNvbHV0ZSAqd2hlbiopIHNob3VsZCBub3QgZXhjZWVkIG9uZSBkYXkuCisKKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX2xhdGVyKGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgIEFycmFuZ2UgZm9yIHRoZSAqY2FsbGJhY2sqIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgZ2l2ZW4gKmRlbGF5KgorICAgc2Vjb25kcyAoZWl0aGVyIGFuIGludCBvciBmbG9hdCkuCisKKyAgIEFuIGluc3RhbmNlIG9mIDpjbGFzczpgYXN5bmNpby5IYW5kbGVgIGlzIHJldHVybmVkLgorCisgICAqY2FsbGJhY2sqIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBwZXIgY2FsbCB0byA6bWV0aDpgY2FsbF9sYXRlcmAuCisgICBJZiB0d28gY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgZm9yIGV4YWN0bHkgdGhlIHNhbWUgdGltZSwgaXQgaXMKKyAgIHVuZGVmaW5lZCB3aGljaCB3aWxsIGJlIGNhbGxlZCBmaXJzdC4KKworICAgVGhlIG9wdGlvbmFsIHBvc2l0aW9uYWwgKmFyZ3MqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayB3aGVuIGl0CisgICBpcyBjYWxsZWQuIElmIHlvdSB3YW50IHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2l0aCBzb21lIG5hbWVkCisgICBhcmd1bWVudHMsIHVzZSBhIGNsb3N1cmUgb3IgOmZ1bmM6YGZ1bmN0b29scy5wYXJ0aWFsYC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX2F0KHdoZW4sIGNhbGxiYWNrLCAqYXJncykKKworICAgQXJyYW5nZSBmb3IgdGhlICpjYWxsYmFjayogdG8gYmUgY2FsbGVkIGF0IHRoZSBnaXZlbiBhYnNvbHV0ZSB0aW1lc3RhbXAKKyAgICp3aGVuKiAoYW4gaW50IG9yIGZsb2F0KSwgdXNpbmcgdGhlIHNhbWUgdGltZSByZWZlcmVuY2UgYXMgOm1ldGg6YHRpbWVgLgorCisgICBUaGlzIG1ldGhvZCdzIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIDptZXRoOmBjYWxsX2xhdGVyYC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC50aW1lKCkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUsIGFzIGEgOmNsYXNzOmBmbG9hdGAgdmFsdWUsIGFjY29yZGluZyB0byB0aGUKKyAgIGV2ZW50IGxvb3AncyBpbnRlcm5hbCBjbG9jay4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6ZnVuYzpgYXN5bmNpby5zbGVlcGAgZnVuY3Rpb24uCisKKworQ29yb3V0aW5lcworLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrKGNvcm8pCisKKyAgIFNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YDogd3JhcCBpdCBpbgorICAgYSBmdXR1cmUuIFJldHVybiBhIDpjbGFzczpgVGFza2Agb2JqZWN0LgorCisgICBUaGlyZC1wYXJ0eSBldmVudCBsb29wcyBjYW4gdXNlIHRoZWlyIG93biBzdWJjbGFzcyBvZiA6Y2xhc3M6YFRhc2tgIGZvcgorICAgaW50ZXJvcGVyYWJpbGl0eS4gSW4gdGhpcyBjYXNlLCB0aGUgcmVzdWx0IHR5cGUgaXMgYSBzdWJjbGFzcyBvZgorICAgOmNsYXNzOmBUYXNrYC4KKworICAgVGhpcyBtZXRob2Qgd2FzIGFkZGVkIGluIFB5dGhvbiAzLjQuMi4gVXNlIHRoZSA6ZnVuYzpgYXN5bmNgIGZ1bmN0aW9uIHRvCisgICBzdXBwb3J0IGFsc28gb2xkZXIgUHl0aG9uIHZlcnNpb25zLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuMgorCisKK0NyZWF0aW5nIGNvbm5lY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCBcKiwgc3NsPU5vbmUsIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wLCBzb2NrPU5vbmUsIGxvY2FsX2FkZHI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpCisKKyAgIENyZWF0ZSBhIHN0cmVhbWluZyB0cmFuc3BvcnQgY29ubmVjdGlvbiB0byBhIGdpdmVuIEludGVybmV0ICpob3N0KiBhbmQKKyAgICpwb3J0Kjogc29ja2V0IGZhbWlseSA6cHk6ZGF0YTpgfnNvY2tldC5BRl9JTkVUYCBvcgorICAgOnB5OmRhdGE6YH5zb2NrZXQuQUZfSU5FVDZgIGRlcGVuZGluZyBvbiAqaG9zdCogKG9yICpmYW1pbHkqIGlmIHNwZWNpZmllZCksCisgICBzb2NrZXQgdHlwZSA6cHk6ZGF0YTpgfnNvY2tldC5TT0NLX1NUUkVBTWAuICAqcHJvdG9jb2xfZmFjdG9yeSogbXVzdCBiZSBhCisgICBjYWxsYWJsZSByZXR1cm5pbmcgYSA6cmVmOmBwcm90b2NvbCA8YXN5bmNpby1wcm90b2NvbD5gIGluc3RhbmNlLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAgd2hpY2ggd2lsbCB0cnkgdG8KKyAgIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiBpbiB0aGUgYmFja2dyb3VuZC4gIFdoZW4gc3VjY2Vzc2Z1bCwgdGhlCisgICBjb3JvdXRpbmUgcmV0dXJucyBhIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAgcGFpci4KKworICAgVGhlIGNocm9ub2xvZ2ljYWwgc3lub3BzaXMgb2YgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uIGlzIGFzIGZvbGxvd3M6CisKKyAgICMuIFRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgYSA6cmVmOmB0cmFuc3BvcnQgPGFzeW5jaW8tdHJhbnNwb3J0PmAKKyAgICAgIGlzIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGl0LgorCisgICAjLiAqcHJvdG9jb2xfZmFjdG9yeSogaXMgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzIGFuZCBtdXN0IHJldHVybiBhCisgICAgICA6cmVmOmBwcm90b2NvbCA8YXN5bmNpby1wcm90b2NvbD5gIGluc3RhbmNlLgorCisgICAjLiBUaGUgcHJvdG9jb2wgaW5zdGFuY2UgaXMgdGllZCB0byB0aGUgdHJhbnNwb3J0LCBhbmQgaXRzCisgICAgICA6bWV0aDpgY29ubmVjdGlvbl9tYWRlYCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAjLiBUaGUgY29yb3V0aW5lIHJldHVybnMgc3VjY2Vzc2Z1bGx5IHdpdGggdGhlIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAKKyAgICAgIHBhaXIuCisKKyAgIFRoZSBjcmVhdGVkIHRyYW5zcG9ydCBpcyBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgYmlkaXJlY3Rpb25hbCBzdHJlYW0uCisKKyAgIC4uIG5vdGU6OgorICAgICAgKnByb3RvY29sX2ZhY3RvcnkqIGNhbiBiZSBhbnkga2luZCBvZiBjYWxsYWJsZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgICBhIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHVzZSBhIHByZS1jcmVhdGVkCisgICAgICBwcm90b2NvbCBpbnN0YW5jZSwgeW91IGNhbiBwYXNzIGBgbGFtYmRhOiBteV9wcm90b2NvbGBgLgorCisgICBPcHRpb25zIGFsbG93aW5nIHRvIGNoYW5nZSBob3cgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZDoKKworICAgKiAqc3NsKjogaWYgZ2l2ZW4gYW5kIG5vdCBmYWxzZSwgYSBTU0wvVExTIHRyYW5zcG9ydCBpcyBjcmVhdGVkCisgICAgIChieSBkZWZhdWx0IGEgcGxhaW4gVENQIHRyYW5zcG9ydCBpcyBjcmVhdGVkKS4gIElmICpzc2wqIGlzCisgICAgIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0LCB0aGlzIGNvbnRleHQgaXMgdXNlZCB0byBjcmVhdGUKKyAgICAgdGhlIHRyYW5zcG9ydDsgaWYgKnNzbCogaXMgOmNvbnN0OmBUcnVlYCwgYSBjb250ZXh0IHdpdGggc29tZQorICAgICB1bnNwZWNpZmllZCBkZWZhdWx0IHNldHRpbmdzIGlzIHVzZWQuCisKKyAgICAgLi4gc2VlYWxzbzo6IDpyZWY6YFNTTC9UTFMgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgPHNzbC1zZWN1cml0eT5gCisKKyAgICogKnNlcnZlcl9ob3N0bmFtZSosIGlzIG9ubHkgZm9yIHVzZSB0b2dldGhlciB3aXRoICpzc2wqLAorICAgICBhbmQgc2V0cyBvciBvdmVycmlkZXMgdGhlIGhvc3RuYW1lIHRoYXQgdGhlIHRhcmdldCBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZQorICAgICB3aWxsIGJlIG1hdGNoZWQgYWdhaW5zdC4gIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIG9mIHRoZSAqaG9zdCogYXJndW1lbnQKKyAgICAgaXMgdXNlZC4gIElmICpob3N0KiBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gZGVmYXVsdCBhbmQgeW91IG11c3QgcGFzcyBhCisgICAgIHZhbHVlIGZvciAqc2VydmVyX2hvc3RuYW1lKi4gIElmICpzZXJ2ZXJfaG9zdG5hbWUqIGlzIGFuIGVtcHR5CisgICAgIHN0cmluZywgaG9zdG5hbWUgbWF0Y2hpbmcgaXMgZGlzYWJsZWQgKHdoaWNoIGlzIGEgc2VyaW91cyBzZWN1cml0eQorICAgICByaXNrLCBhbGxvd2luZyBmb3IgbWFuLWluLXRoZS1taWRkbGUtYXR0YWNrcykuCisKKyAgICogKmZhbWlseSosICpwcm90byosICpmbGFncyogYXJlIHRoZSBvcHRpb25hbCBhZGRyZXNzIGZhbWlseSwgcHJvdG9jb2wKKyAgICAgYW5kIGZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGdldGFkZHJpbmZvKCkgZm9yICpob3N0KiByZXNvbHV0aW9uLgorICAgICBJZiBnaXZlbiwgdGhlc2Ugc2hvdWxkIGFsbCBiZSBpbnRlZ2VycyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCisgICAgIDptb2Q6YHNvY2tldGAgbW9kdWxlIGNvbnN0YW50cy4KKworICAgKiAqc29jayosIGlmIGdpdmVuLCBzaG91bGQgYmUgYW4gZXhpc3RpbmcsIGFscmVhZHkgY29ubmVjdGVkCisgICAgIDpjbGFzczpgc29ja2V0LnNvY2tldGAgb2JqZWN0IHRvIGJlIHVzZWQgYnkgdGhlIHRyYW5zcG9ydC4KKyAgICAgSWYgKnNvY2sqIGlzIGdpdmVuLCBub25lIG9mICpob3N0KiwgKnBvcnQqLCAqZmFtaWx5KiwgKnByb3RvKiwgKmZsYWdzKgorICAgICBhbmQgKmxvY2FsX2FkZHIqIHNob3VsZCBiZSBzcGVjaWZpZWQuCisKKyAgICogKmxvY2FsX2FkZHIqLCBpZiBnaXZlbiwgaXMgYSBgYChsb2NhbF9ob3N0LCBsb2NhbF9wb3J0KWBgIHR1cGxlIHVzZWQKKyAgICAgdG8gYmluZCB0aGUgc29ja2V0IHRvIGxvY2FsbHkuICBUaGUgKmxvY2FsX2hvc3QqIGFuZCAqbG9jYWxfcG9ydCoKKyAgICAgYXJlIGxvb2tlZCB1cCB1c2luZyBnZXRhZGRyaW5mbygpLCBzaW1pbGFybHkgdG8gKmhvc3QqIGFuZCAqcG9ydCouCisKKyAgIE9uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCwgU1NML1RMUyBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIDpmdW5jOmBvcGVuX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGdldCBhIHBhaXIgb2YKKyAgICAgICg6Y2xhc3M6YFN0cmVhbVJlYWRlcmAsIDpjbGFzczpgU3RyZWFtV3JpdGVyYCkgaW5zdGVhZCBvZiBhIHByb3RvY29sLgorCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHByb3RvY29sX2ZhY3RvcnksIGxvY2FsX2FkZHI9Tm9uZSwgcmVtb3RlX2FkZHI9Tm9uZSwgXCosIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wKQorCisgICBDcmVhdGUgZGF0YWdyYW0gY29ubmVjdGlvbjogc29ja2V0IGZhbWlseSA6cHk6ZGF0YTpgfnNvY2tldC5BRl9JTkVUYCBvcgorICAgOnB5OmRhdGE6YH5zb2NrZXQuQUZfSU5FVDZgIGRlcGVuZGluZyBvbiAqaG9zdCogKG9yICpmYW1pbHkqIGlmIHNwZWNpZmllZCksCisgICBzb2NrZXQgdHlwZSA6cHk6ZGF0YTpgfnNvY2tldC5TT0NLX0RHUkFNYC4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gIHdoaWNoIHdpbGwgdHJ5IHRvCisgICBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gaW4gdGhlIGJhY2tncm91bmQuICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQorICAgY29yb3V0aW5lIHJldHVybnMgYSBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgIHBhaXIuCisKKyAgIFNlZSB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIG1ldGhvZCBmb3IgcGFyYW1ldGVycy4KKworICAgT24gV2luZG93cyB3aXRoIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgLCB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkLgorCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbihwcm90b2NvbF9mYWN0b3J5LCBwYXRoLCBcKiwgc3NsPU5vbmUsIHNvY2s9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpCisKKyAgIENyZWF0ZSBVTklYIGNvbm5lY3Rpb246IHNvY2tldCBmYW1pbHkgOnB5OmRhdGE6YH5zb2NrZXQuQUZfVU5JWGAsIHNvY2tldAorICAgdHlwZSA6cHk6ZGF0YTpgfnNvY2tldC5TT0NLX1NUUkVBTWAuIFRoZSA6cHk6ZGF0YTpgfnNvY2tldC5BRl9VTklYYCBzb2NrZXQKKyAgIGZhbWlseSBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gcHJvY2Vzc2VzIG9uIHRoZSBzYW1lIG1hY2hpbmUKKyAgIGVmZmljaWVudGx5LgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAgd2hpY2ggd2lsbCB0cnkgdG8KKyAgIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiBpbiB0aGUgYmFja2dyb3VuZC4gIFdoZW4gc3VjY2Vzc2Z1bCwgdGhlCisgICBjb3JvdXRpbmUgcmV0dXJucyBhIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAgcGFpci4KKworICAgT24gV2luZG93cyB3aXRoIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgLCBTU0wvVExTIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgIFNlZSB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIG1ldGhvZCBmb3IgcGFyYW1ldGVycy4KKworICAgQXZhaWxhYmlsaXR5OiBVTklYLgorCisKK0NyZWF0aW5nIGxpc3RlbmluZyBjb25uZWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcihwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgXCosIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLCBmbGFncz1zb2NrZXQuQUlfUEFTU0lWRSwgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUsIHJldXNlX2FkZHJlc3M9Tm9uZSkKKworICAgQ3JlYXRlIGEgVENQIHNlcnZlciBib3VuZCB0byAqaG9zdCogYW5kICpwb3J0Ki4gUmV0dXJuIGEgOmNsYXNzOmBTZXJ2ZXJgIG9iamVjdCwKKyAgIGl0cyA6YXR0cjpgflNlcnZlci5zb2NrZXRzYCBhdHRyaWJ1dGUgY29udGFpbnMgY3JlYXRlZCBzb2NrZXRzLiBVc2UgdGhlCisgICA6bWV0aDpgU2VydmVyLmNsb3NlYCBtZXRob2QgdG8gc3RvcCB0aGUgc2VydmVyOiBjbG9zZSBsaXN0ZW5pbmcgc29ja2V0cy4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICBJZiAqaG9zdCogaXMgYW4gZW1wdHkgc3RyaW5nIG9yIGBgTm9uZWBgLCBhbGwgaW50ZXJmYWNlcyBhcmUgYXNzdW1lZAorICAgYW5kIGEgbGlzdCBvZiBtdWx0aXBsZSBzb2NrZXRzIHdpbGwgYmUgcmV0dXJuZWQgKG1vc3QgbGlrZWx5CisgICBvbmUgZm9yIElQdjQgYW5kIGFub3RoZXIgb25lIGZvciBJUHY2KS4KKworICAgKmZhbWlseSogY2FuIGJlIHNldCB0byBlaXRoZXIgOmRhdGE6YHNvY2tldC5BRl9JTkVUYCBvcgorICAgOmRhdGE6YH5zb2NrZXQuQUZfSU5FVDZgIHRvIGZvcmNlIHRoZSBzb2NrZXQgdG8gdXNlIElQdjQgb3IgSVB2Ni4gSWYgbm90IHNldAorICAgaXQgd2lsbCBiZSBkZXRlcm1pbmVkIGZyb20gaG9zdCAoZGVmYXVsdHMgdG8gOmRhdGE6YHNvY2tldC5BRl9VTlNQRUNgKS4KKworICAgKmZsYWdzKiBpcyBhIGJpdG1hc2sgZm9yIDptZXRoOmBnZXRhZGRyaW5mb2AuCisKKyAgICpzb2NrKiBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8gdXNlIGEgcHJlZXhpc3RpbmcKKyAgIHNvY2tldCBvYmplY3QuCisKKyAgICpiYWNrbG9nKiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbm5lY3Rpb25zIHBhc3NlZCB0bworICAgOm1ldGg6YH5zb2NrZXQuc29ja2V0Lmxpc3RlbmAgKGRlZmF1bHRzIHRvIDEwMCkuCisKKyAgICpzc2wqIGNhbiBiZSBzZXQgdG8gYW4gOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIHRvIGVuYWJsZSBTU0wgb3ZlciB0aGUKKyAgIGFjY2VwdGVkIGNvbm5lY3Rpb25zLgorCisgICAqcmV1c2VfYWRkcmVzcyogdGVsbHMgdGhlIGtlcm5lbCB0byByZXVzZSBhIGxvY2FsIHNvY2tldCBpbgorICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgIGV4cGlyZS4gSWYgbm90IHNwZWNpZmllZCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIFRydWUgb24KKyAgIFVOSVguCisKKyAgIE9uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCwgU1NML1RMUyBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIGZ1bmN0aW9uIDpmdW5jOmBzdGFydF9zZXJ2ZXJgIGNyZWF0ZXMgYSAoOmNsYXNzOmBTdHJlYW1SZWFkZXJgLAorICAgICAgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgKSBwYWlyIGFuZCBjYWxscyBiYWNrIGEgZnVuY3Rpb24gd2l0aCB0aGlzIHBhaXIuCisKKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIocHJvdG9jb2xfZmFjdG9yeSwgcGF0aD1Ob25lLCBcKiwgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUpCisKKyAgIFNpbWlsYXIgdG8gOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAsIGJ1dCBzcGVjaWZpYyB0byB0aGUKKyAgIHNvY2tldCBmYW1pbHkgOnB5OmRhdGE6YH5zb2NrZXQuQUZfVU5JWGAuCisKKyAgIEF2YWlsYWJpbGl0eTogVU5JWC4KKworCitXYXRjaCBmaWxlIGRlc2NyaXB0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCwgb25seSBzb2NrZXQgaGFuZGxlcyBhcmUgc3VwcG9ydGVkCisoZXg6IHBpcGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbm90IHN1cHBvcnRlZCkuCisKK09uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCwgdGhlc2UgbWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5hZGRfcmVhZGVyKGZkLCBjYWxsYmFjaywgXCphcmdzKQorCisgICBTdGFydCB3YXRjaGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkIGF2YWlsYWJpbGl0eSBhbmQgdGhlbiBjYWxsIHRoZQorICAgKmNhbGxiYWNrKiB3aXRoIHNwZWNpZmllZCBhcmd1bWVudHMuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucmVtb3ZlX3JlYWRlcihmZCkKKworICAgU3RvcCB3YXRjaGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkIGF2YWlsYWJpbGl0eS4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5hZGRfd3JpdGVyKGZkLCBjYWxsYmFjaywgXCphcmdzKQorCisgICBTdGFydCB3YXRjaGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciB3cml0ZSBhdmFpbGFiaWxpdHkgYW5kIHRoZW4gY2FsbCB0aGUKKyAgICpjYWxsYmFjayogd2l0aCBzcGVjaWZpZWQgYXJndW1lbnRzLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnJlbW92ZV93cml0ZXIoZmQpCisKKyAgIFN0b3Agd2F0Y2hpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGUgYXZhaWxhYmlsaXR5LgorCisKK0xvdy1sZXZlbCBzb2NrZXQgb3BlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc29ja19yZWN2KHNvY2ssIG5ieXRlcykKKworICAgUmVjZWl2ZSBkYXRhIGZyb20gdGhlIHNvY2tldC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBieXRlcyBvYmplY3QKKyAgIHJlcHJlc2VudGluZyB0aGUgZGF0YSByZWNlaXZlZC4gIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkCisgICBhdCBvbmNlIGlzIHNwZWNpZmllZCBieSAqbmJ5dGVzKi4KKworICAgV2l0aCA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCBldmVudCBsb29wLCB0aGUgc29ja2V0ICpzb2NrKiBtdXN0IGJlCisgICBub24tYmxvY2tpbmcuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6bWV0aDpgc29ja2V0LnNvY2tldC5yZWN2YCBtZXRob2QuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc29ja19zZW5kYWxsKHNvY2ssIGRhdGEpCisKKyAgIFNlbmQgZGF0YSB0byB0aGUgc29ja2V0LiAgVGhlIHNvY2tldCBtdXN0IGJlIGNvbm5lY3RlZCB0byBhIHJlbW90ZSBzb2NrZXQuCisgICBUaGlzIG1ldGhvZCBjb250aW51ZXMgdG8gc2VuZCBkYXRhIGZyb20gKmRhdGEqIHVudGlsIGVpdGhlciBhbGwgZGF0YSBoYXMKKyAgIGJlZW4gc2VudCBvciBhbiBlcnJvciBvY2N1cnMuICBgYE5vbmVgYCBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLiAgT24gZXJyb3IsCisgICBhbiBleGNlcHRpb24gaXMgcmFpc2VkLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGRldGVybWluZSBob3cgbXVjaCBkYXRhLCBpZgorICAgYW55LCB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBieSB0aGUgcmVjZWl2aW5nIGVuZCBvZiB0aGUgY29ubmVjdGlvbi4KKworICAgV2l0aCA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCBldmVudCBsb29wLCB0aGUgc29ja2V0ICpzb2NrKiBtdXN0IGJlCisgICBub24tYmxvY2tpbmcuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6bWV0aDpgc29ja2V0LnNvY2tldC5zZW5kYWxsYCBtZXRob2QuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpCisKKyAgIENvbm5lY3QgdG8gYSByZW1vdGUgc29ja2V0IGF0ICphZGRyZXNzKi4KKworICAgVGhlICphZGRyZXNzKiBtdXN0IGJlIGFscmVhZHkgcmVzb2x2ZWQgdG8gYXZvaWQgdGhlIHRyYXAgb2YgaGFuZ2luZyB0aGUKKyAgIGVudGlyZSBldmVudCBsb29wIHdoZW4gdGhlIGFkZHJlc3MgcmVxdWlyZXMgZG9pbmcgYSBETlMgbG9va3VwLiAgRm9yCisgICBleGFtcGxlLCBpdCBtdXN0IGJlIGFuIElQIGFkZHJlc3MsIG5vdCBhbiBob3N0bmFtZSwgZm9yCisgICA6cHk6ZGF0YTpgfnNvY2tldC5BRl9JTkVUYCBhbmQgOnB5OmRhdGE6YH5zb2NrZXQuQUZfSU5FVDZgIGFkZHJlc3MgZmFtaWxpZXMuCisgICBVc2UgOm1ldGg6YGdldGFkZHJpbmZvYCB0byByZXNvbHZlIHRoZSBob3N0bmFtZSBhc3luY2hyb25vdXNseS4KKworICAgV2l0aCA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCBldmVudCBsb29wLCB0aGUgc29ja2V0ICpzb2NrKiBtdXN0IGJlCisgICBub24tYmxvY2tpbmcuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kLCB0aGUKKyAgICAgIDpmdW5jOmBvcGVuX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5zb2NrZXQuY29ubmVjdGAKKyAgICAgIG1ldGhvZC4KKworCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNvY2tfYWNjZXB0KHNvY2spCisKKyAgIEFjY2VwdCBhIGNvbm5lY3Rpb24uIFRoZSBzb2NrZXQgbXVzdCBiZSBib3VuZCB0byBhbiBhZGRyZXNzIGFuZCBsaXN0ZW5pbmcKKyAgIGZvciBjb25uZWN0aW9ucy4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBhaXIgYGAoY29ubiwgYWRkcmVzcylgYCB3aGVyZSAqY29ubioKKyAgIGlzIGEgKm5ldyogc29ja2V0IG9iamVjdCB1c2FibGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLAorICAgYW5kICphZGRyZXNzKiBpcyB0aGUgYWRkcmVzcyBib3VuZCB0byB0aGUgc29ja2V0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlCisgICBjb25uZWN0aW9uLgorCisgICBUaGUgc29ja2V0ICpzb2NrKiBtdXN0IGJlIG5vbi1ibG9ja2luZy4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgIG1ldGhvZCwgdGhlIDpmdW5jOmBzdGFydF9zZXJ2ZXJgCisgICAgICBmdW5jdGlvbiBhbmQgdGhlIDptZXRoOmBzb2NrZXQuc29ja2V0LmFjY2VwdGAgbWV0aG9kLgorCisKK1Jlc29sdmUgaG9zdCBuYW1lCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIFwqLCBmYW1pbHk9MCwgdHlwZT0wLCBwcm90bz0wLCBmbGFncz0wKQorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAsIHNpbWlsYXIgdG8KKyAgIDptZXRoOmBzb2NrZXQuZ2V0YWRkcmluZm9gIGZ1bmN0aW9uIGJ1dCBub24tYmxvY2tpbmcuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuZ2V0bmFtZWluZm8oc29ja2FkZHIsIGZsYWdzPTApCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YCwgc2ltaWxhciB0bworICAgOm1ldGg6YHNvY2tldC5nZXRuYW1laW5mb2AgZnVuY3Rpb24gYnV0IG5vbi1ibG9ja2luZy4KKworCitDb25uZWN0IHBpcGVzCistLS0tLS0tLS0tLS0tCisKK09uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCwgdGhlc2UgbWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZC4KK1VzZSA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCB0byBzdXBwb3J0IHBpcGVzIG9uIFdpbmRvd3MuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY29ubmVjdF9yZWFkX3BpcGUocHJvdG9jb2xfZmFjdG9yeSwgcGlwZSkKKworICAgUmVnaXN0ZXIgcmVhZCBwaXBlIGluIGV2ZW50bG9vcC4KKworICAgKnByb3RvY29sX2ZhY3RvcnkqIHNob3VsZCBpbnN0YW50aWF0ZSBvYmplY3Qgd2l0aCA6Y2xhc3M6YFByb3RvY29sYAorICAgaW50ZXJmYWNlLiAgKnBpcGUqIGlzIGEgOnRlcm06YGZpbGUtbGlrZSBvYmplY3QgPGZpbGUgb2JqZWN0PmAuCisgICBSZXR1cm4gcGFpciBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgLCB3aGVyZSAqdHJhbnNwb3J0KiBzdXBwb3J0cyB0aGUKKyAgIDpjbGFzczpgUmVhZFRyYW5zcG9ydGAgaW50ZXJmYWNlLgorCisgICBXaXRoIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIGV2ZW50IGxvb3AsIHRoZSAqcGlwZSogaXMgc2V0IHRvCisgICBub24tYmxvY2tpbmcgbW9kZS4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNvbm5lY3Rfd3JpdGVfcGlwZShwcm90b2NvbF9mYWN0b3J5LCBwaXBlKQorCisgICBSZWdpc3RlciB3cml0ZSBwaXBlIGluIGV2ZW50bG9vcC4KKworICAgKnByb3RvY29sX2ZhY3RvcnkqIHNob3VsZCBpbnN0YW50aWF0ZSBvYmplY3Qgd2l0aCA6Y2xhc3M6YEJhc2VQcm90b2NvbGAKKyAgIGludGVyZmFjZS4gKnBpcGUqIGlzIGZpbGUtbGlrZSBvYmplY3QuCisgICBSZXR1cm4gcGFpciAodHJhbnNwb3J0LCBwcm90b2NvbCksIHdoZXJlIHRyYW5zcG9ydCBzdXBwb3J0CisgICA6Y2xhc3M6YFdyaXRlVHJhbnNwb3J0YCBpbnRlcmZhY2UuCisKKyAgIFdpdGggOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgZXZlbnQgbG9vcCwgdGhlICpwaXBlKiBpcyBzZXQgdG8KKyAgIG5vbi1ibG9ja2luZyBtb2RlLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLnN1YnByb2Nlc3Nfc2hlbGxgIG1ldGhvZHMuCisKKworVU5JWCBzaWduYWxzCistLS0tLS0tLS0tLS0KKworQXZhaWxhYmlsaXR5OiBVTklYIG9ubHkuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ251bSwgY2FsbGJhY2ssIFwqYXJncykKKworICAgQWRkIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuCisKKyAgIFJhaXNlIDpleGM6YFZhbHVlRXJyb3JgIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICBSYWlzZSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXR0aW5nIHVwIHRoZSBoYW5kbGVyLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWcpCisKKyAgIFJlbW92ZSBhIGhhbmRsZXIgZm9yIGEgc2lnbmFsLgorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgYSBzaWduYWwgaGFuZGxlciB3YXMgcmVtb3ZlZCwgYGBGYWxzZWBgIGlmIG5vdC4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6bW9kOmBzaWduYWxgIG1vZHVsZS4KKworCitFeGVjdXRvcgorLS0tLS0tLS0KKworQ2FsbCBhIGZ1bmN0aW9uIGluIGFuIDpjbGFzczpgfmNvbmN1cnJlbnQuZnV0dXJlcy5FeGVjdXRvcmAgKHBvb2wgb2YgdGhyZWFkcyBvcgorcG9vbCBvZiBwcm9jZXNzZXMpLiBCeSBkZWZhdWx0LCBhbiBldmVudCBsb29wIHVzZXMgYSB0aHJlYWQgcG9vbCBleGVjdXRvcgorKDpjbGFzczpgfmNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3JgKS4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5ydW5faW5fZXhlY3V0b3IoZXhlY3V0b3IsIGNhbGxiYWNrLCBcKmFyZ3MpCisKKyAgIEFycmFuZ2UgZm9yIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGluIHRoZSBzcGVjaWZpZWQgZXhlY3V0b3IuCisKKyAgIFRoZSAqZXhlY3V0b3IqIGFyZ3VtZW50IHNob3VsZCBiZSBhbiA6Y2xhc3M6YH5jb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3JgCisgICBpbnN0YW5jZS4gVGhlIGRlZmF1bHQgZXhlY3V0b3IgaXMgdXNlZCBpZiAqZXhlY3V0b3IqIGlzIGBgTm9uZWBgLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisKKyAgIFNldCB0aGUgZGVmYXVsdCBleGVjdXRvciB1c2VkIGJ5IDptZXRoOmBydW5faW5fZXhlY3V0b3JgLgorCisKK0Vycm9yIEhhbmRsaW5nIEFQSQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbG93cyB0byBjdXN0b21pemUgaG93IGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIGV2ZW50IGxvb3AuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGhhbmRsZXIpCisKKyAgIFNldCAqaGFuZGxlciogYXMgdGhlIG5ldyBldmVudCBsb29wIGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICBJZiAqaGFuZGxlciogaXMgYGBOb25lYGAsIHRoZSBkZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyIHdpbGwKKyAgIGJlIHNldC4KKworICAgSWYgKmhhbmRsZXIqIGlzIGEgY2FsbGFibGUgb2JqZWN0LCBpdCBzaG91bGQgaGF2ZSBhCisgICBtYXRjaGluZyBzaWduYXR1cmUgdG8gYGAobG9vcCwgY29udGV4dClgYCwgd2hlcmUgYGBsb29wYGAKKyAgIHdpbGwgYmUgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSBldmVudCBsb29wLCBgYGNvbnRleHRgYAorICAgd2lsbCBiZSBhIGBgZGljdGBgIG9iamVjdCAoc2VlIDptZXRoOmBjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyYAorICAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBhYm91dCBjb250ZXh0KS4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5kZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisKKyAgIERlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIuCisKKyAgIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBhbmQgbm8gZXhjZXB0aW9uCisgICBoYW5kbGVyIGlzIHNldCwgYW5kIGNhbiBiZSBjYWxsZWQgYnkgYSBjdXN0b20gZXhjZXB0aW9uCisgICBoYW5kbGVyIHRoYXQgd2FudHMgdG8gZGVmZXIgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisKKyAgICpjb250ZXh0KiBwYXJhbWV0ZXIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KKyAgIDptZXRoOmBjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyYC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisKKyAgIENhbGwgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBleGNlcHRpb24gaGFuZGxlci4KKworICAgKmNvbnRleHQqIGlzIGEgYGBkaWN0YGAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBrZXlzCisgICAobmV3IGtleXMgbWF5IGJlIGludHJvZHVjZWQgbGF0ZXIpOgorCisgICAqICdtZXNzYWdlJzogRXJyb3IgbWVzc2FnZTsKKyAgICogJ2V4Y2VwdGlvbicgKG9wdGlvbmFsKTogRXhjZXB0aW9uIG9iamVjdDsKKyAgICogJ2Z1dHVyZScgKG9wdGlvbmFsKTogOmNsYXNzOmBhc3luY2lvLkZ1dHVyZWAgaW5zdGFuY2U7CisgICAqICdoYW5kbGUnIChvcHRpb25hbCk6IDpjbGFzczpgYXN5bmNpby5IYW5kbGVgIGluc3RhbmNlOworICAgKiAncHJvdG9jb2wnIChvcHRpb25hbCk6IDpyZWY6YFByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgaW5zdGFuY2U7CisgICAqICd0cmFuc3BvcnQnIChvcHRpb25hbCk6IDpyZWY6YFRyYW5zcG9ydCA8YXN5bmNpby10cmFuc3BvcnQ+YCBpbnN0YW5jZTsKKyAgICogJ3NvY2tldCcgKG9wdGlvbmFsKTogOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBpbnN0YW5jZS4KKworICAgLi4gbm90ZTo6CisKKyAgICAgICBOb3RlOiB0aGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIG92ZXJsb2FkZWQgaW4gc3ViY2xhc3NlZAorICAgICAgIGV2ZW50IGxvb3BzLiAgRm9yIGFueSBjdXN0b20gZXhjZXB0aW9uIGhhbmRsaW5nLCB1c2UKKyAgICAgICA6bWV0aDpgc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKClgIG1ldGhvZC4KKworRGVidWcgbW9kZQorLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmdldF9kZWJ1ZygpCisKKyAgIEdldCB0aGUgZGVidWcgbW9kZSAoOmNsYXNzOmBib29sYCkgb2YgdGhlIGV2ZW50IGxvb3AuCisKKyAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgVHJ1ZWBgIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgOmVudnZhcjpgUFlUSE9OQVNZTkNJT0RFQlVHYCBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBgYEZhbHNlYGAKKyAgIG90aGVyd2lzZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjIKKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zZXRfZGVidWcoZW5hYmxlZDogYm9vbCkKKworICAgU2V0IHRoZSBkZWJ1ZyBtb2RlIG9mIHRoZSBldmVudCBsb29wLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuMgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YGRlYnVnIG1vZGUgb2YgYXN5bmNpbyA8YXN5bmNpby1kZWJ1Zy1tb2RlPmAuCisKK1NlcnZlcgorLS0tLS0tCisKKy4uIGNsYXNzOjogU2VydmVyCisKKyAgIFNlcnZlciBsaXN0ZW5pbmcgb24gc29ja2V0cy4KKworICAgT2JqZWN0IGNyZWF0ZWQgYnkgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgIG1ldGhvZCBhbmQgdGhlCisgICA6ZnVuYzpgc3RhcnRfc2VydmVyYCBmdW5jdGlvbi4gRG9uJ3QgaW5zdGFuY2lhdGUgdGhlIGNsYXNzIGRpcmVjdGx5LgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIFN0b3Agc2VydmluZzogY2xvc2UgbGlzdGVuaW5nIHNvY2tldHMgYW5kIHNldCB0aGUgOmF0dHI6YHNvY2tldHNgCisgICAgICBhdHRyaWJ1dGUgdG8gYGBOb25lYGAuCisKKyAgICAgIFRoZSBzb2NrZXRzIHRoYXQgcmVwcmVzZW50IGV4aXN0aW5nIGluY29taW5nIGNsaWVudCBjb25uZWN0aW9ucyBhcmUKKyAgICAgIGxlYXZlZCBvcGVuLgorCisgICAgICBUaGUgc2VydmVyIGlzIGNsb3NlZCBhc3luY2hvbm91c2x5LCB1c2UgdGhlIDptZXRoOmB3YWl0X2Nsb3NlZGAgY29yb3V0aW5lCisgICAgICB0byB3YWl0IHVudGlsIHRoZSBzZXJ2ZXIgaXMgY2xvc2VkLgorCisgICAuLiBtZXRob2Q6OiB3YWl0X2Nsb3NlZCgpCisKKyAgICAgIFdhaXQgdW50aWwgdGhlIDptZXRoOmBjbG9zZWAgbWV0aG9kIGNvbXBsZXRlcy4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzb2NrZXRzCisKKyAgICAgIExpc3Qgb2YgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBvYmplY3RzIHRoZSBzZXJ2ZXIgaXMgbGlzdGVuaW5nIHRvLCBvcgorICAgICAgYGBOb25lYGAgaWYgdGhlIHNlcnZlciBpcyBjbG9zZWQuCisKKworSGFuZGxlCistLS0tLS0KKworLi4gY2xhc3M6OiBIYW5kbGUKKworICAgQSBjYWxsYmFjayB3cmFwcGVyIG9iamVjdCByZXR1cm5lZCBieSA6ZnVuYzpgQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25gLAorICAgOmZ1bmM6YEJhc2VFdmVudExvb3AuY2FsbF9zb29uX3RocmVhZHNhZmVgLCA6ZnVuYzpgQmFzZUV2ZW50TG9vcC5jYWxsX2xhdGVyYCwKKyAgIGFuZCA6ZnVuYzpgQmFzZUV2ZW50TG9vcC5jYWxsX2F0YC4KKworICAgLi4gbWV0aG9kOjogY2FuY2VsKCkKKworICAgICAgQ2FuY2VsIHRoZSBjYWxsLgorCisKKworLi4gX2FzeW5jaW8taGVsbG8td29ybGQtY2FsbGJhY2s6CisKK0V4YW1wbGU6IEhlbGxvIFdvcmxkIChjYWxsYmFjaykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHJpbnQgYGBIZWxsbyBXb3JsZGBgIGV2ZXJ5IHR3byBzZWNvbmRzLCB1c2luZyBhIGNhbGxiYWNrOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBkZWYgcHJpbnRfYW5kX3JlcGVhdChsb29wKToKKyAgICAgICAgcHJpbnQoJ0hlbGxvIFdvcmxkJykKKyAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDIsIHByaW50X2FuZF9yZXBlYXQsIGxvb3ApCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgbG9vcC5jYWxsX3Nvb24ocHJpbnRfYW5kX3JlcGVhdCwgbG9vcCkKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvb3AuY2xvc2UoKQorCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgSGVsbG8gV29ybGQgZXhhbXBsZSB1c2luZyBhIGNvcm91dGluZSA8YXN5bmNpby1oZWxsby13b3JsZC1jb3JvdXRpbmU+YC4KKworCitFeGFtcGxlOiBTZXQgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdJTlQgYW5kIFNJR1RFUk0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlciBoYW5kbGVycyBmb3Igc2lnbmFscyA6cHk6ZGF0YTpgU0lHSU5UYCBhbmQgOnB5OmRhdGE6YFNJR1RFUk1gOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IGZ1bmN0b29scworICAgIGltcG9ydCBvcworICAgIGltcG9ydCBzaWduYWwKKworICAgIGRlZiBhc2tfZXhpdChzaWduYW1lKToKKyAgICAgICAgcHJpbnQoImdvdCBzaWduYWwgJXM6IGV4aXQiICUgc2lnbmFtZSkKKyAgICAgICAgbG9vcC5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBmb3Igc2lnbmFtZSBpbiAoJ1NJR0lOVCcsICdTSUdURVJNJyk6CisgICAgICAgIGxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKGdldGF0dHIoc2lnbmFsLCBzaWduYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoYXNrX2V4aXQsIHNpZ25hbWUpKQorCisgICAgcHJpbnQoIkV2ZW50IGxvb3AgcnVubmluZyBmb3JldmVyLCBwcmVzcyBDVFJMK2MgdG8gaW50ZXJydXB0LiIpCisgICAgcHJpbnQoInBpZCAlczogc2VuZCBTSUdJTlQgb3IgU0lHVEVSTSB0byBleGl0LiIgJSBvcy5nZXRwaWQoKSkKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvb3AuY2xvc2UoKQorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcHMucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3BzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODJjYzRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3BzLnJzdApAQCAtMCwwICsxLDE4OCBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworRXZlbnQgbG9vcHMKKz09PT09PT09PT09CisKK0V2ZW50IGxvb3AgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgY29udmVuaWVudCBzaG9ydGN1dHMgdG8gYWNjZXNzaW5nIHRoZSBtZXRob2RzIG9mIHRoZQorZ2xvYmFsIHBvbGljeS4gTm90ZSB0aGF0IHRoaXMgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBkZWZhdWx0IHBvbGljeSwgdW5sZXNzIGFuCithbHRlcm5hdGl2ZSBwb2xpY3kgd2FzIHNldCBieSBjYWxsaW5nIDpmdW5jOmBzZXRfZXZlbnRfbG9vcF9wb2xpY3lgIGVhcmxpZXIgaW4KK3RoZSBleGVjdXRpb24gb2YgdGhlIHByb2Nlc3MuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2V2ZW50X2xvb3AoKQorCisgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5nZXRfZXZlbnRfbG9vcCgpYGAuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2V2ZW50X2xvb3AobG9vcCkKKworICAgRXF1aXZhbGVudCB0byBjYWxsaW5nIGBgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuc2V0X2V2ZW50X2xvb3AobG9vcClgYC4KKworLi4gZnVuY3Rpb246OiBuZXdfZXZlbnRfbG9vcCgpCisKKyAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYGdldF9ldmVudF9sb29wX3BvbGljeSgpLm5ld19ldmVudF9sb29wKClgYC4KKworCisuLiBfYXN5bmNpby1ldmVudC1sb29wczoKKworQXZhaWxhYmxlIGV2ZW50IGxvb3BzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXN5bmNpbyBjdXJyZW50bHkgcHJvdmlkZXMgdHdvIGltcGxlbWVudGF0aW9ucyBvZiBldmVudCBsb29wczoKKzpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIGFuZCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYC4KKworLi4gY2xhc3M6OiBTZWxlY3RvckV2ZW50TG9vcAorCisgICBFdmVudCBsb29wIGJhc2VkIG9uIHRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZS4gU3ViY2xhc3Mgb2YKKyAgIDpjbGFzczpgQmFzZUV2ZW50TG9vcGAuCisKKyAgIFVzZSB0aGUgbW9zdCBlZmZpY2llbnQgc2VsZWN0b3IgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KKworICAgT24gV2luZG93cywgb25seSBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQgKGV4OiBwaXBlcyBhcmUgbm90IHN1cHBvcnRlZCk6CisgICBzZWUgdGhlIGBNU0ROIGRvY3VtZW50YXRpb24gb2Ygc2VsZWN0CisgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczc0MDE0MSUyOHY9dnMuODUlMjkuYXNweD5gXy4KKworLi4gY2xhc3M6OiBQcm9hY3RvckV2ZW50TG9vcAorCisgICBQcm9hY3RvciBldmVudCBsb29wIGZvciBXaW5kb3dzIHVzaW5nICJJL08gQ29tcGxldGlvbiBQb3J0cyIgYWthIElPQ1AuCisgICBTdWJjbGFzcyBvZiA6Y2xhc3M6YEJhc2VFdmVudExvb3BgLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBgTVNETiBkb2N1bWVudGF0aW9uIG9uIEkvTyBDb21wbGV0aW9uIFBvcnRzCisgICAgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NTE5OCUyOHY9dnMuODUlMjkuYXNweD5gXy4KKworRXhhbXBsZSB0byB1c2UgYSA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCBvbiBXaW5kb3dzOjoKKworICAgIGltcG9ydCBhc3luY2lvLCBvcworCisgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICBsb29wID0gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKworLi4gX2FzeW5jaW8tcGxhdGZvcm0tc3VwcG9ydDoKKworUGxhdGZvcm0gc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIGhhcyBiZWVuIGRlc2lnbmVkIHRvIGJlIHBvcnRhYmxlLCBidXQgZWFjaCBwbGF0Zm9ybQorc3RpbGwgaGFzIHN1YnRsZSBkaWZmZXJlbmNlcyBhbmQgbWF5IG5vdCBzdXBwb3J0IGFsbCA6bW9kOmBhc3luY2lvYCBmZWF0dXJlcy4KKworV2luZG93cworXl5eXl5eXgorCitDb21tb24gbGltaXRzIG9mIFdpbmRvd3MgZXZlbnQgbG9vcHM6CisKKy0gOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV91bml4X3NlcnZlcmAgYW5kCisgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXJgIGFyZSBub3Qgc3VwcG9ydGVkOiB0aGUgc29ja2V0CisgIGZhbWlseSA6ZGF0YTpgc29ja2V0LkFGX1VOSVhgIGlzIHNwZWNpZmljIHRvIFVOSVgKKy0gOm1ldGg6YH5CYXNlRXZlbnRMb29wLmFkZF9zaWduYWxfaGFuZGxlcmAgYW5kCisgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXJgIGFyZSBub3Qgc3VwcG9ydGVkCistIDptZXRoOmBFdmVudExvb3BQb2xpY3kuc2V0X2NoaWxkX3dhdGNoZXJgIGlzIG5vdCBzdXBwb3J0ZWQuCisgIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIHN1cHBvcnRzIHN1YnByb2Nlc3Nlcy4gSXQgaGFzIG9ubHkgb25lCisgIGltcGxlbWVudGF0aW9uIHRvIHdhdGNoIGNoaWxkIHByb2Nlc3NlcywgdGhlcmUgaXMgbm8gbmVlZCB0byBjb25maWd1cmUgaXQuCisKKzpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIHNwZWNpZmljIGxpbWl0czoKKworLSA6Y2xhc3M6YH5zZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3JgIGlzIHVzZWQgYnV0IGl0IG9ubHkgc3VwcG9ydHMgc29ja2V0cworLSA6bWV0aDpgfkJhc2VFdmVudExvb3AuYWRkX3JlYWRlcmAgYW5kIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5hZGRfd3JpdGVyYCBvbmx5CisgIGFjY2VwdCBmaWxlIGRlc2NyaXB0b3JzIG9mIHNvY2tldHMKKy0gUGlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQKKyAgKGV4OiA6bWV0aDpgfkJhc2VFdmVudExvb3AuY29ubmVjdF9yZWFkX3BpcGVgLAorICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY29ubmVjdF93cml0ZV9waXBlYCkKKy0gOnJlZjpgU3VicHJvY2Vzc2VzIDxhc3luY2lvLXN1YnByb2Nlc3M+YCBhcmUgbm90IHN1cHBvcnRlZAorICAoZXg6IDptZXRoOmB+QmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX2V4ZWNgLAorICA6bWV0aDpgfkJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19zaGVsbGApCisKKzpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIHNwZWNpZmljIGxpbWl0czoKKworLSBTU0wgaXMgbm90IHN1cHBvcnRlZDogOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYCBhbmQKKyAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgIGNhbm5vdCBiZSB1c2VkIHdpdGggU1NMIGZvciBleGFtcGxlCistIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRgIChVRFApIGlzIG5vdCBzdXBwb3J0ZWQKKy0gOm1ldGg6YH5CYXNlRXZlbnRMb29wLmFkZF9yZWFkZXJgIGFuZCA6bWV0aDpgfkJhc2VFdmVudExvb3AuYWRkX3dyaXRlcmAgYXJlCisgIG5vdCBzdXBwb3J0ZWQKKworVGhlIHJlc29sdXRpb24gb2YgdGhlIG1vbm90b25pYyBjbG9jayBvbiBXaW5kb3dzIGlzIHVzdWFsbHkgYXJvdW5kIDE1LjYgbXNlYy4KK1RoZSBiZXN0IHJlc29sdXRpb24gaXMgMC41IG1zZWMuIFRoZSByZXNvbHV0aW9uIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlCisoYXZhaWxhYmlsaXR5IG9mIGBIUEVUCis8aHR0cDovL2ZyLndpa2lwZWRpYS5vcmcvd2lraS9IaWdoX1ByZWNpc2lvbl9FdmVudF9UaW1lcj5gXykgYW5kIG9uIHRoZSBXaW5kb3dzCitjb25maWd1cmF0aW9uLiBTZWUgOnJlZjpgYXN5bmNpbyBkZWxheWVkIGNhbGxzIDxhc3luY2lvLWRlbGF5ZWQtY2FsbHM+YC4KKworCitNYWMgT1MgWAorXl5eXl5eXl4KKworQ2hhcmFjdGVyIGRldmljZXMgbGlrZSBQVFkgYXJlIG9ubHkgd2VsbCBzdXBwb3J0ZWQgc2luY2UgTWF2ZXJpY2tzIChNYWMgT1MKKzEwLjkpLiBUaGV5IGFyZSBub3Qgc3VwcG9ydGVkIGF0IGFsbCBvbiBNYWMgT1MgMTAuNSBhbmQgb2xkZXIuCisKK09uIE1hYyBPUyAxMC42LCAxMC43IGFuZCAxMC44LCB0aGUgZGVmYXVsdCBldmVudCBsb29wIGlzCis6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCB3aGljaCB1c2VzIDpjbGFzczpgc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9yYC4KKzpjbGFzczpgc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9yYCBkb2VzIG5vdCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIG9uIHRoZXNlCit2ZXJzaW9ucy4gIFRoZSA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCBjYW4gYmUgdXNlZCB3aXRoCis6Y2xhc3M6YH5zZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3JgIG9yIDpjbGFzczpgfnNlbGVjdG9ycy5Qb2xsU2VsZWN0b3JgIHRvCitzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIG9uIHRoZXNlIHZlcnNpb25zIG9mIE1hYyBPUyBYLiBFeGFtcGxlOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IHNlbGVjdG9ycworCisgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IoKQorICAgIGxvb3AgPSBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yKQorICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKworCitFdmVudCBsb29wIHBvbGljaWVzIGFuZCB0aGUgZGVmYXVsdCBwb2xpY3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVudCBsb29wIG1hbmFnZW1lbnQgaXMgYWJzdHJhY3RlZCB3aXRoIGEgKnBvbGljeSogcGF0dGVybiwgdG8gcHJvdmlkZSBtYXhpbWFsCitmbGV4aWJpbGl0eSBmb3IgY3VzdG9tIHBsYXRmb3JtcyBhbmQgZnJhbWV3b3Jrcy4gVGhyb3VnaG91dCB0aGUgZXhlY3V0aW9uIG9mIGEKK3Byb2Nlc3MsIGEgc2luZ2xlIGdsb2JhbCBwb2xpY3kgb2JqZWN0IG1hbmFnZXMgdGhlIGV2ZW50IGxvb3BzIGF2YWlsYWJsZSB0byB0aGUKK3Byb2Nlc3MgYmFzZWQgb24gdGhlIGNhbGxpbmcgY29udGV4dC4gQSBwb2xpY3kgaXMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUKKzpjbGFzczpgQWJzdHJhY3RFdmVudExvb3BQb2xpY3lgIGludGVyZmFjZS4KKworRm9yIG1vc3QgdXNlcnMgb2YgOm1vZDpgYXN5bmNpb2AsIHBvbGljaWVzIG5ldmVyIGhhdmUgdG8gYmUgZGVhbHQgd2l0aAorZXhwbGljaXRseSwgc2luY2UgdGhlIGRlZmF1bHQgZ2xvYmFsIHBvbGljeSBpcyBzdWZmaWNpZW50LgorCitUaGUgZGVmYXVsdCBwb2xpY3kgZGVmaW5lcyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IHRocmVhZCwgYW5kIG1hbmFnZXMgYW4gZXZlbnQKK2xvb3AgcGVyIHRocmVhZCB0aGF0IGludGVyYWN0cyB3aXRoIDptb2Q6YGFzeW5jaW9gLiBUaGUgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucworOmZ1bmM6YGdldF9ldmVudF9sb29wYCBhbmQgOmZ1bmM6YHNldF9ldmVudF9sb29wYCBwcm92aWRlIGNvbnZlbmllbnQgYWNjZXNzIHRvCitldmVudCBsb29wcyBtYW5hZ2VkIGJ5IHRoZSBkZWZhdWx0IHBvbGljeS4KKworRXZlbnQgbG9vcCBwb2xpY3kgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gZXZlbnQgbG9vcCBwb2xpY3kgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBpbnRlcmZhY2U6CisKKy4uIGNsYXNzOjogQWJzdHJhY3RFdmVudExvb3BQb2xpY3kKKworICAgLi4gbWV0aG9kOjogZ2V0X2V2ZW50X2xvb3AoKQorCisgICBHZXQgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQuIFJldHVybnMgYW4gZXZlbnQgbG9vcCBvYmplY3QKKyAgIGltcGxlbWVudGluZyB0aGUgOmNsYXNzOmBCYXNlRXZlbnRMb29wYCBpbnRlcmZhY2UsIG9yIHJhaXNlcyBhbiBleGNlcHRpb24gaW4gY2FzZQorICAgbm8gZXZlbnQgbG9vcCBoYXMgYmVlbiBzZXQgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHRoZSBjdXJyZW50IHBvbGljeQorICAgZG9lcyBub3Qgc3BlY2lmeSB0byBjcmVhdGUgb25lLiBJdCBzaG91bGQgbmV2ZXIgcmV0dXJuIGBgTm9uZWBgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfZXZlbnRfbG9vcChsb29wKQorCisgICBTZXQgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gKmxvb3AqLgorCisgICAuLiBtZXRob2Q6OiBuZXdfZXZlbnRfbG9vcCgpCisKKyAgIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGV2ZW50IGxvb3Agb2JqZWN0IGFjY29yZGluZyB0byB0aGlzIHBvbGljeSdzIHJ1bGVzLgorICAgSWYgdGhlcmUncyBuZWVkIHRvIHNldCB0aGlzIGxvb3AgYXMgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQsCisgICA6bWV0aDpgc2V0X2V2ZW50X2xvb3BgIG11c3QgYmUgY2FsbGVkIGV4cGxpY2l0bHkuCisKK0FjY2VzcyB0byB0aGUgZ2xvYmFsIGxvb3AgcG9saWN5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGdldF9ldmVudF9sb29wX3BvbGljeSgpCisKKyAgIEdldCB0aGUgY3VycmVudCBldmVudCBsb29wIHBvbGljeS4KKworLi4gZnVuY3Rpb246OiBzZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KQorCisgICBTZXQgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBwb2xpY3kuIElmICpwb2xpY3kqIGlzIGBgTm9uZWBgLCB0aGUgZGVmYXVsdAorICAgcG9saWN5IGlzIHJlc3RvcmVkLgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjA1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLnJzdApAQCAtMCwwICsxLDUxNCBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK1RyYW5zcG9ydHMgIGFuZCBwcm90b2NvbHMgKGxvdy1sZXZlbCBBUEkpCisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCisuLiBfYXN5bmNpby10cmFuc3BvcnQ6CisKK1RyYW5zcG9ydHMKKz09PT09PT09PT0KKworVHJhbnNwb3J0cyBhcmUgY2xhc3NlcyBwcm92aWRlZCBieSA6bW9kOmBhc3luY2lvYCBpbiBvcmRlciB0byBhYnN0cmFjdAordmFyaW91cyBraW5kcyBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiAgWW91IGdlbmVyYWxseSB3b24ndCBpbnN0YW50aWF0ZQorYSB0cmFuc3BvcnQgeW91cnNlbGY7IGluc3RlYWQsIHlvdSB3aWxsIGNhbGwgYSA6Y2xhc3M6YEJhc2VFdmVudExvb3BgIG1ldGhvZAord2hpY2ggd2lsbCBjcmVhdGUgdGhlIHRyYW5zcG9ydCBhbmQgdHJ5IHRvIGluaXRpYXRlIHRoZSB1bmRlcmx5aW5nCitjb21tdW5pY2F0aW9uIGNoYW5uZWwsIGNhbGxpbmcgeW91IGJhY2sgd2hlbiBpdCBzdWNjZWVkcy4KKworT25jZSB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGlzIGVzdGFibGlzaGVkLCBhIHRyYW5zcG9ydCBpcyBhbHdheXMKK3BhaXJlZCB3aXRoIGEgOnJlZjpgcHJvdG9jb2wgPGFzeW5jaW8tcHJvdG9jb2w+YCBpbnN0YW5jZS4gIFRoZSBwcm90b2NvbCBjYW4KK3RoZW4gY2FsbCB0aGUgdHJhbnNwb3J0J3MgbWV0aG9kcyBmb3IgdmFyaW91cyBwdXJwb3Nlcy4KKworOm1vZDpgYXN5bmNpb2AgY3VycmVudGx5IGltcGxlbWVudHMgdHJhbnNwb3J0cyBmb3IgVENQLCBVRFAsIFNTTCwgYW5kCitzdWJwcm9jZXNzIHBpcGVzLiAgVGhlIG1ldGhvZHMgYXZhaWxhYmxlIG9uIGEgdHJhbnNwb3J0IGRlcGVuZCBvbgordGhlIHRyYW5zcG9ydCdzIGtpbmQuCisKKworQmFzZVRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IEJhc2VUcmFuc3BvcnQKKworICAgQmFzZSBjbGFzcyBmb3IgdHJhbnNwb3J0cy4KKworICAgLi4gbWV0aG9kOjogY2xvc2Uoc2VsZikKKworICAgICAgQ2xvc2UgdGhlIHRyYW5zcG9ydC4gIElmIHRoZSB0cmFuc3BvcnQgaGFzIGEgYnVmZmVyIGZvciBvdXRnb2luZworICAgICAgZGF0YSwgYnVmZmVyZWQgZGF0YSB3aWxsIGJlIGZsdXNoZWQgYXN5bmNocm9ub3VzbHkuICBObyBtb3JlIGRhdGEKKyAgICAgIHdpbGwgYmUgcmVjZWl2ZWQuICBBZnRlciBhbGwgYnVmZmVyZWQgZGF0YSBpcyBmbHVzaGVkLCB0aGUKKyAgICAgIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdpdGgKKyAgICAgIDpjb25zdDpgTm9uZWAgYXMgaXRzIGFyZ3VtZW50LgorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9leHRyYV9pbmZvKG5hbWUsIGRlZmF1bHQ9Tm9uZSkKKworICAgICAgUmV0dXJuIG9wdGlvbmFsIHRyYW5zcG9ydCBpbmZvcm1hdGlvbi4gICpuYW1lKiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcKKyAgICAgIHRoZSBwaWVjZSBvZiB0cmFuc3BvcnQtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gZ2V0LCAqZGVmYXVsdCogaXMgdGhlCisgICAgICB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGluZm9ybWF0aW9uIGRvZXNuJ3QgZXhpc3QuCisKKyAgICAgIFRoaXMgbWV0aG9kIGFsbG93cyB0cmFuc3BvcnQgaW1wbGVtZW50YXRpb25zIHRvIGVhc2lseSBleHBvc2UKKyAgICAgIGNoYW5uZWwtc3BlY2lmaWMgaW5mb3JtYXRpb24uCisKKyAgICAgICogc29ja2V0OgorCisgICAgICAgIC0gYGAncGVlcm5hbWUnYGA6IHRoZSByZW1vdGUgYWRkcmVzcyB0byB3aGljaCB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZCwKKyAgICAgICAgICByZXN1bHQgb2YgOm1ldGg6YHNvY2tldC5zb2NrZXQuZ2V0cGVlcm5hbWVgIChgYE5vbmVgYCBvbiBlcnJvcikKKyAgICAgICAgLSBgYCdzb2NrZXQnYGA6IDpjbGFzczpgc29ja2V0LnNvY2tldGAgaW5zdGFuY2UKKyAgICAgICAgLSBgYCdzb2NrbmFtZSdgYDogdGhlIHNvY2tldCdzIG93biBhZGRyZXNzLAorICAgICAgICAgIHJlc3VsdCBvZiA6bWV0aDpgc29ja2V0LnNvY2tldC5nZXRzb2NrbmFtZWAKKworICAgICAgKiBTU0wgc29ja2V0OgorCisgICAgICAgIC0gYGAnY29tcHJlc3Npb24nYGA6IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gYmVpbmcgdXNlZCBhcyBhIHN0cmluZywKKyAgICAgICAgICBvciBgYE5vbmVgYCBpZiB0aGUgY29ubmVjdGlvbiBpc24ndCBjb21wcmVzc2VkOyByZXN1bHQgb2YKKyAgICAgICAgICA6bWV0aDpgc3NsLlNTTFNvY2tldC5jb21wcmVzc2lvbmAKKyAgICAgICAgLSBgYCdjaXBoZXInYGA6IGEgdGhyZWUtdmFsdWUgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY2lwaGVyCisgICAgICAgICAgYmVpbmcgdXNlZCwgdGhlIHZlcnNpb24gb2YgdGhlIFNTTCBwcm90b2NvbCB0aGF0IGRlZmluZXMgaXRzIHVzZSwgYW5kCisgICAgICAgICAgdGhlIG51bWJlciBvZiBzZWNyZXQgYml0cyBiZWluZyB1c2VkOyByZXN1bHQgb2YKKyAgICAgICAgICA6bWV0aDpgc3NsLlNTTFNvY2tldC5jaXBoZXJgCisgICAgICAgIC0gYGAncGVlcmNlcnQnYGA6IHBlZXIgY2VydGlmaWNhdGU7IHJlc3VsdCBvZgorICAgICAgICAgIDptZXRoOmBzc2wuU1NMU29ja2V0LmdldHBlZXJjZXJ0YAorICAgICAgICAtIGBgJ3NzbGNvbnRleHQnYGA6IDpjbGFzczpgc3NsLlNTTENvbnRleHRgIGluc3RhbmNlCisKKyAgICAgICogcGlwZToKKworICAgICAgICAtIGBgJ3BpcGUnYGA6IHBpcGUgb2JqZWN0CisKKyAgICAgICogc3VicHJvY2VzczoKKworICAgICAgICAtIGBgJ3N1YnByb2Nlc3MnYGA6IDpjbGFzczpgc3VicHJvY2Vzcy5Qb3BlbmAgaW5zdGFuY2UKKworCitSZWFkVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogUmVhZFRyYW5zcG9ydAorCisgICBJbnRlcmZhY2UgZm9yIHJlYWQtb25seSB0cmFuc3BvcnRzLgorCisgICAuLiBtZXRob2Q6OiBwYXVzZV9yZWFkaW5nKCkKKworICAgICAgUGF1c2UgdGhlIHJlY2VpdmluZyBlbmQgb2YgdGhlIHRyYW5zcG9ydC4gIE5vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8KKyAgICAgIHRoZSBwcm90b2NvbCdzIDptZXRoOmBkYXRhX3JlY2VpdmVkYCBtZXRob2QgdW50aWwgOm1ldGg6YHJlc3VtZV9yZWFkaW5nYAorICAgICAgaXMgY2FsbGVkLgorCisgICAuLiBtZXRob2Q6OiByZXN1bWVfcmVhZGluZygpCisKKyAgICAgIFJlc3VtZSB0aGUgcmVjZWl2aW5nIGVuZC4gIFRoZSBwcm90b2NvbCdzIDptZXRoOmBkYXRhX3JlY2VpdmVkYCBtZXRob2QKKyAgICAgIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4gaWYgc29tZSBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4KKworCitXcml0ZVRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBXcml0ZVRyYW5zcG9ydAorCisgICBJbnRlcmZhY2UgZm9yIHdyaXRlLW9ubHkgdHJhbnNwb3J0cy4KKworICAgLi4gbWV0aG9kOjogYWJvcnQoKQorCisgICAgICBDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgZm9yIHBlbmRpbmcgb3BlcmF0aW9ucworICAgICAgdG8gY29tcGxldGUuICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgICAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgZXZlbnR1YWxseSBiZQorICAgICAgY2FsbGVkIHdpdGggOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKyAgIC4uIG1ldGhvZDo6IGNhbl93cml0ZV9lb2YoKQorCisgICAgICBSZXR1cm4gOmNvbnN0OmBUcnVlYCBpZiB0aGUgdHJhbnNwb3J0IHN1cHBvcnRzIDptZXRoOmB3cml0ZV9lb2ZgLAorICAgICAgOmNvbnN0OmBGYWxzZWAgaWYgbm90LgorCisgICAuLiBtZXRob2Q6OiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorCisgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciB1c2VkIGJ5IHRoZSB0cmFuc3BvcnQuCisKKyAgIC4uIG1ldGhvZDo6IGdldF93cml0ZV9idWZmZXJfbGltaXRzKCkKKworICAgICAgR2V0IHRoZSAqaGlnaCotIGFuZCAqbG93Ki13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4gUmV0dXJuIGEKKyAgICAgIHR1cGxlIGBgKGxvdywgaGlnaClgYCB3aGVyZSAqbG93KiBhbmQgKmhpZ2gqIGFyZSBwb3NpdGl2ZSBudW1iZXIgb2YKKyAgICAgIGJ5dGVzLgorCisgICAgICBVc2UgOm1ldGg6YHNldF93cml0ZV9idWZmZXJfbGltaXRzYCB0byBzZXQgdGhlIGxpbWl0cy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjIKKworICAgLi4gbWV0aG9kOjogc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoaGlnaD1Ob25lLCBsb3c9Tm9uZSkKKworICAgICAgU2V0IHRoZSAqaGlnaCotIGFuZCAqbG93Ki13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4KKworICAgICAgVGhlc2UgdHdvIHZhbHVlcyBjb250cm9sIHdoZW4gY2FsbCB0aGUgcHJvdG9jb2wncworICAgICAgOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGFuZCA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIG1ldGhvZHMgYXJlIGNhbGxlZC4KKyAgICAgIElmIHNwZWNpZmllZCwgdGhlIGxvdy13YXRlciBsaW1pdCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgIGhpZ2gtd2F0ZXIgbGltaXQuICBOZWl0aGVyICpoaWdoKiBub3IgKmxvdyogY2FuIGJlIG5lZ2F0aXZlLgorCisgICAgICBUaGUgZGVmYXVsdHMgYXJlIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgSWYgb25seSB0aGUKKyAgICAgIGhpZ2gtd2F0ZXIgbGltaXQgaXMgZ2l2ZW4sIHRoZSBsb3ctd2F0ZXIgbGltaXQgZGVmYXVsdHMgdG8gYQorICAgICAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgaGlnaC13YXRlciBsaW1pdC4gIFNldHRpbmcgKmhpZ2gqIHRvIHplcm8gZm9yY2VzICpsb3cqIHRvIHplcm8gYXMKKyAgICAgIHdlbGwsIGFuZCBjYXVzZXMgOm1ldGg6YHBhdXNlX3dyaXRpbmdgIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUKKyAgICAgIGJ1ZmZlciBiZWNvbWVzIG5vbi1lbXB0eS4gIFNldHRpbmcgKmxvdyogdG8gemVybyBjYXVzZXMKKyAgICAgIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgdG8gYmUgY2FsbGVkIG9ubHkgb25jZSB0aGUgYnVmZmVyIGlzIGVtcHR5LgorICAgICAgVXNlIG9mIHplcm8gZm9yIGVpdGhlciBsaW1pdCBpcyBnZW5lcmFsbHkgc3ViLW9wdGltYWwgYXMgaXQKKyAgICAgIHJlZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3IgZG9pbmcgSS9PIGFuZCBjb21wdXRhdGlvbgorICAgICAgY29uY3VycmVudGx5LgorCisgICAgICBVc2UgOm1ldGg6YGdldF93cml0ZV9idWZmZXJfbGltaXRzYCB0byBnZXQgdGhlIGxpbWl0cy4KKworICAgLi4gbWV0aG9kOjogd3JpdGUoZGF0YSkKKworICAgICAgV3JpdGUgc29tZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKworICAgICAgVGhpcyBtZXRob2QgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlbGluZXMobGlzdF9vZl9kYXRhKQorCisgICAgICBXcml0ZSBhIGxpc3QgKG9yIGFueSBpdGVyYWJsZSkgb2YgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorICAgICAgVGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nIDptZXRoOmB3cml0ZWAgb24gZWFjaAorICAgICAgZWxlbWVudCB5aWVsZGVkIGJ5IHRoZSBpdGVyYWJsZSwgYnV0IG1heSBiZSBpbXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5LgorCisgICAuLiBtZXRob2Q6OiB3cml0ZV9lb2YoKQorCisgICAgICBDbG9zZSB0aGUgd3JpdGUgZW5kIG9mIHRoZSB0cmFuc3BvcnQgYWZ0ZXIgZmx1c2hpbmcgYnVmZmVyZWQgZGF0YS4KKyAgICAgIERhdGEgbWF5IHN0aWxsIGJlIHJlY2VpdmVkLgorCisgICAgICBUaGlzIG1ldGhvZCBjYW4gcmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaWYgdGhlIHRyYW5zcG9ydAorICAgICAgKGUuZy4gU1NMKSBkb2Vzbid0IHN1cHBvcnQgaGFsZi1jbG9zZXMuCisKKworRGF0YWdyYW1UcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IERhdGFncmFtVHJhbnNwb3J0LnNlbmR0byhkYXRhLCBhZGRyPU5vbmUpCisKKyAgIFNlbmQgdGhlICpkYXRhKiBieXRlcyB0byB0aGUgcmVtb3RlIHBlZXIgZ2l2ZW4gYnkgKmFkZHIqIChhCisgICB0cmFuc3BvcnQtZGVwZW5kZW50IHRhcmdldCBhZGRyZXNzKS4gIElmICphZGRyKiBpcyA6Y29uc3Q6YE5vbmVgLCB0aGUKKyAgIGRhdGEgaXMgc2VudCB0byB0aGUgdGFyZ2V0IGFkZHJlc3MgZ2l2ZW4gb24gdHJhbnNwb3J0IGNyZWF0aW9uLgorCisgICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBibG9jazsgaXQgYnVmZmVycyB0aGUgZGF0YSBhbmQgYXJyYW5nZXMgZm9yIGl0CisgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKworLi4gbWV0aG9kOjogRGF0YWdyYW1UcmFuc3BvcnQuYWJvcnQoKQorCisgICBDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgZm9yIHBlbmRpbmcgb3BlcmF0aW9ucworICAgdG8gY29tcGxldGUuICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgZXZlbnR1YWxseSBiZQorICAgY2FsbGVkIHdpdGggOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKworQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQKKworICAgLi4gbWV0aG9kOjogZ2V0X3BpZCgpCisKKyAgICAgIFJldHVybiB0aGUgc3VicHJvY2VzcyBwcm9jZXNzIGlkIGFzIGFuIGludGVnZXIuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9waXBlX3RyYW5zcG9ydChmZCkKKworICAgICAgUmV0dXJuIHRoZSB0cmFuc3BvcnQgZm9yIHRoZSBjb21tdW5pY2F0aW9uIHBpcGUgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yICpmZCouICBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBhIHJlYWRhYmxlIG9yCisgICAgICB3cml0YWJsZSBzdHJlYW1pbmcgdHJhbnNwb3J0LCBkZXBlbmRpbmcgb24gdGhlICpmZCouICBJZiAqZmQqIGRvZXNuJ3QKKyAgICAgIGNvcnJlc3BvbmQgdG8gYSBwaXBlIGJlbG9uZ2luZyB0byB0aGlzIHRyYW5zcG9ydCwgOmNvbnN0OmBOb25lYCBpcworICAgICAgcmV0dXJuZWQuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9yZXR1cm5jb2RlKCkKKworICAgICAgUmV0dXJuIHRoZSBzdWJwcm9jZXNzIHJldHVybmNvZGUgYXMgYW4gaW50ZWdlciBvciA6Y29uc3Q6YE5vbmVgCisgICAgICBpZiBpdCBoYXNuJ3QgcmV0dXJuZWQsIHNpbWlsYXJseSB0byB0aGUKKyAgICAgIDphdHRyOmBzdWJwcm9jZXNzLlBvcGVuLnJldHVybmNvZGVgIGF0dHJpYnV0ZS4KKworICAgLi4gbWV0aG9kOjoga2lsbChzZWxmKQorCisgICAgICBLaWxsIHRoZSBzdWJwcm9jZXNzLCBhcyBpbiA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi5raWxsYAorCisgICAgICBPbiBQT1NJWCBzeXN0ZW1zLCB0aGUgZnVuY3Rpb24gc2VuZHMgU0lHS0lMTCB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgIE9uIFdpbmRvd3MsIHRoaXMgbWV0aG9kIGlzIGFuIGFsaWFzIGZvciA6bWV0aDpgdGVybWluYXRlYC4KKworICAgLi4gbWV0aG9kOjogc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICAgICBTZW5kIHRoZSAqc2lnbmFsKiBudW1iZXIgdG8gdGhlIHN1YnByb2Nlc3MsIGFzIGluCisgICAgICA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbGAuCisKKyAgIC4uIG1ldGhvZDo6IHRlcm1pbmF0ZSgpCisKKyAgICAgIEFzayB0aGUgc3VicHJvY2VzcyB0byBzdG9wLCBhcyBpbiA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGVgLgorICAgICAgVGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgZm9yIHRoZSA6bWV0aDpgY2xvc2VgIG1ldGhvZC4KKworICAgICAgT24gUE9TSVggc3lzdGVtcywgdGhpcyBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgIE9uIFdpbmRvd3MsIHRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbiBUZXJtaW5hdGVQcm9jZXNzKCkgaXMgY2FsbGVkIHRvCisgICAgICBzdG9wIHRoZSBzdWJwcm9jZXNzLgorCisKKy4uIF9hc3luY2lvLXByb3RvY29sOgorCitQcm90b2NvbHMKKz09PT09PT09PQorCis6bW9kOmBhc3luY2lvYCBwcm92aWRlcyBiYXNlIGNsYXNzZXMgdGhhdCB5b3UgY2FuIHN1YmNsYXNzIHRvIGltcGxlbWVudAoreW91ciBuZXR3b3JrIHByb3RvY29scy4gIFRob3NlIGNsYXNzZXMgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorOnJlZjpgdHJhbnNwb3J0cyA8YXN5bmNpby10cmFuc3BvcnQ+YCAoc2VlIGJlbG93KTogdGhlIHByb3RvY29sIHBhcnNlcyBpbmNvbWluZworZGF0YSBhbmQgYXNrcyBmb3IgdGhlIHdyaXRpbmcgb2Ygb3V0Z29pbmcgZGF0YSwgd2hpbGUgdGhlIHRyYW5zcG9ydCBpcworcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgSS9PIGFuZCBidWZmZXJpbmcuCisKK1doZW4gc3ViY2xhc3NpbmcgYSBwcm90b2NvbCBjbGFzcywgaXQgaXMgcmVjb21tZW5kZWQgeW91IG92ZXJyaWRlIGNlcnRhaW4KK21ldGhvZHMuICBUaG9zZSBtZXRob2RzIGFyZSBjYWxsYmFja3M6IHRoZXkgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHRyYW5zcG9ydAorb24gY2VydGFpbiBldmVudHMgKGZvciBleGFtcGxlIHdoZW4gc29tZSBkYXRhIGlzIHJlY2VpdmVkKTsgeW91IHNob3VsZG4ndAorY2FsbCB0aGVtIHlvdXJzZWxmLCB1bmxlc3MgeW91IGFyZSBpbXBsZW1lbnRpbmcgYSB0cmFuc3BvcnQuCisKKy4uIG5vdGU6OgorICAgQWxsIGNhbGxiYWNrcyBoYXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zLCB3aGljaCBhcmUgZW1wdHkuICBUaGVyZWZvcmUsCisgICB5b3Ugb25seSBuZWVkIHRvIGltcGxlbWVudCB0aGUgY2FsbGJhY2tzIGZvciB0aGUgZXZlbnRzIGluIHdoaWNoIHlvdQorICAgYXJlIGludGVyZXN0ZWQuCisKKworUHJvdG9jb2wgY2xhc3NlcworLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFByb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgc3RyZWFtaW5nIHByb3RvY29scyAoZm9yIHVzZSB3aXRoCisgICBlLmcuIFRDUCBhbmQgU1NMIHRyYW5zcG9ydHMpLgorCisuLiBjbGFzczo6IERhdGFncmFtUHJvdG9jb2wKKworICAgVGhlIGJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBkYXRhZ3JhbSBwcm90b2NvbHMgKGZvciB1c2Ugd2l0aAorICAgZS5nLiBVRFAgdHJhbnNwb3J0cykuCisKKy4uIGNsYXNzOjogU3VicHJvY2Vzc1Byb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgcHJvdG9jb2xzIGNvbW11bmljYXRpbmcgd2l0aCBjaGlsZAorICAgcHJvY2Vzc2VzICh0aHJvdWdoIGEgc2V0IG9mIHVuaWRpcmVjdGlvbmFsIHBpcGVzKS4KKworCitDb25uZWN0aW9uIGNhbGxiYWNrcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAsIDpjbGFzczpgRGF0YWdyYW1Qcm90b2NvbGAKK2FuZCA6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBCYXNlUHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKworICAgQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hZGUuCisKKyAgIFRoZSAqdHJhbnNwb3J0KiBhcmd1bWVudCBpcyB0aGUgdHJhbnNwb3J0IHJlcHJlc2VudGluZyB0aGUKKyAgIGNvbm5lY3Rpb24uICBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIGl0IHNvbWV3aGVyZQorICAgKGUuZy4gYXMgYW4gYXR0cmlidXRlKSBpZiB5b3UgbmVlZCB0by4KKworLi4gbWV0aG9kOjogQmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3Qgb3IgY2xvc2VkLgorCisgICBUaGUgYXJndW1lbnQgaXMgZWl0aGVyIGFuIGV4Y2VwdGlvbiBvYmplY3Qgb3IgOmNvbnN0OmBOb25lYC4KKyAgIFRoZSBsYXR0ZXIgbWVhbnMgYSByZWd1bGFyIEVPRiBpcyByZWNlaXZlZCwgb3IgdGhlIGNvbm5lY3Rpb24gd2FzCisgICBhYm9ydGVkIG9yIGNsb3NlZCBieSB0aGlzIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uCisKKzptZXRoOmB+QmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbWFkZWAgYW5kIDptZXRoOmB+QmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbG9zdGAKK2FyZSBjYWxsZWQgZXhhY3RseSBvbmNlIHBlciBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICBBbGwgb3RoZXIgY2FsbGJhY2tzIHdpbGwgYmUKK2NhbGxlZCBiZXR3ZWVuIHRob3NlIHR3byBtZXRob2RzLCB3aGljaCBhbGxvd3MgZm9yIGVhc2llciByZXNvdXJjZSBtYW5hZ2VtZW50CitpbiB5b3VyIHByb3RvY29sIGltcGxlbWVudGF0aW9uLgorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9ubHkgb24gOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgCitpbnN0YW5jZXM6CisKKy4uIG1ldGhvZDo6IFN1YnByb2Nlc3NQcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQoZmQsIGRhdGEpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIHdyaXRlcyBkYXRhIGludG8gaXRzIHN0ZG91dCBvciBzdGRlcnIgcGlwZS4KKyAgICpmZCogaXMgdGhlIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBwaXBlLiAgKmRhdGEqIGlzIGEgbm9uLWVtcHR5CisgICBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YS4KKworLi4gbWV0aG9kOjogU3VicHJvY2Vzc1Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0KGZkLCBleGMpCisKKyAgIENhbGxlZCB3aGVuIG9uZSBvZiB0aGUgcGlwZXMgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBjaGlsZCBwcm9jZXNzCisgICBpcyBjbG9zZWQuICAqZmQqIGlzIHRoZSBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciB0aGF0IHdhcyBjbG9zZWQuCisKKy4uIG1ldGhvZDo6IFN1YnByb2Nlc3NQcm90b2NvbC5wcm9jZXNzX2V4aXRlZCgpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBleGl0ZWQuCisKKworU3RyZWFtaW5nIHByb3RvY29scworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogUHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorCisgICBDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuICAqZGF0YSogaXMgYSBub24tZW1wdHkgYnl0ZXMgb2JqZWN0CisgICBjb250YWluaW5nIHRoZSBpbmNvbWluZyBkYXRhLgorCisgICAuLiBub3RlOjoKKyAgICAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYnVmZmVyZWQsIGNodW5rZWQgb3IgcmVhc3NlbWJsZWQgZGVwZW5kcyBvbgorICAgICAgdGhlIHRyYW5zcG9ydC4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGRuJ3QgcmVseSBvbiBzcGVjaWZpYyBzZW1hbnRpY3MKKyAgICAgIGFuZCBpbnN0ZWFkIG1ha2UgeW91ciBwYXJzaW5nIGdlbmVyaWMgYW5kIGZsZXhpYmxlIGVub3VnaC4gIEhvd2V2ZXIsCisgICAgICBkYXRhIGlzIGFsd2F5cyByZWNlaXZlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKworLi4gbWV0aG9kOjogUHJvdG9jb2wuZW9mX3JlY2VpdmVkKCkKKworICAgQ2FsbHMgd2hlbiB0aGUgb3RoZXIgZW5kIHNpZ25hbHMgaXQgd29uJ3Qgc2VuZCBhbnkgbW9yZSBkYXRhCisgICAoZm9yIGV4YW1wbGUgYnkgY2FsbGluZyA6bWV0aDpgd3JpdGVfZW9mYCwgaWYgdGhlIG90aGVyIGVuZCBhbHNvIHVzZXMKKyAgIGFzeW5jaW8pLgorCisgICBUaGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEgZmFsc2UgdmFsdWUgKGluY2x1ZGluZyBOb25lKSwgaW4gd2hpY2ggY2FzZQorICAgdGhlIHRyYW5zcG9ydCB3aWxsIGNsb3NlIGl0c2VsZi4gIENvbnZlcnNlbHksIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgYQorICAgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4gIFNpbmNlIHRoZQorICAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIE5vbmUsIGl0IGltcGxpY2l0bHkgY2xvc2VzIHRoZSBjb25uZWN0aW9uLgorCisgICAuLiBub3RlOjoKKyAgICAgIFNvbWUgdHJhbnNwb3J0cyBzdWNoIGFzIFNTTCBkb24ndCBzdXBwb3J0IGhhbGYtY2xvc2VkIGNvbm5lY3Rpb25zLAorICAgICAgaW4gd2hpY2ggY2FzZSByZXR1cm5pbmcgdHJ1ZSBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgbm90IHByZXZlbnQgY2xvc2luZworICAgICAgdGhlIGNvbm5lY3Rpb24uCisKKzptZXRoOmBkYXRhX3JlY2VpdmVkYCBjYW4gYmUgY2FsbGVkIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdGltZXMgZHVyaW5nCithIGNvbm5lY3Rpb24uICBIb3dldmVyLCA6bWV0aDpgZW9mX3JlY2VpdmVkYCBpcyBjYWxsZWQgYXQgbW9zdCBvbmNlCithbmQsIGlmIGNhbGxlZCwgOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIHdvbid0IGJlIGNhbGxlZCBhZnRlciBpdC4KKworRGF0YWdyYW0gcHJvdG9jb2xzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBvbiA6Y2xhc3M6YERhdGFncmFtUHJvdG9jb2xgIGluc3RhbmNlcy4KKworLi4gbWV0aG9kOjogRGF0YWdyYW1Qcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZChkYXRhLCBhZGRyKQorCisgICBDYWxsZWQgd2hlbiBhIGRhdGFncmFtIGlzIHJlY2VpdmVkLiAgKmRhdGEqIGlzIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcKKyAgIHRoZSBpbmNvbWluZyBkYXRhLiAgKmFkZHIqIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBwZWVyIHNlbmRpbmcgdGhlIGRhdGE7CisgICB0aGUgZXhhY3QgZm9ybWF0IGRlcGVuZHMgb24gdGhlIHRyYW5zcG9ydC4KKworLi4gbWV0aG9kOjogRGF0YWdyYW1Qcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisKKyAgIENhbGxlZCB3aGVuIGEgcHJldmlvdXMgc2VuZCBvciByZWNlaXZlIG9wZXJhdGlvbiByYWlzZXMgYW4KKyAgIDpjbGFzczpgT1NFcnJvcmAuICAqZXhjKiBpcyB0aGUgOmNsYXNzOmBPU0Vycm9yYCBpbnN0YW5jZS4KKworICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGluIHJhcmUgY29uZGl0aW9ucywgd2hlbiB0aGUgdHJhbnNwb3J0IChlLmcuIFVEUCkKKyAgIGRldGVjdHMgdGhhdCBhIGRhdGFncmFtIGNvdWxkbid0IGJlIGRlbGl2ZXJlZCB0byBpdHMgcmVjaXBpZW50LgorICAgSW4gbWFueSBjb25kaXRpb25zIHRob3VnaCwgdW5kZWxpdmVyYWJsZSBkYXRhZ3JhbXMgd2lsbCBiZSBzaWxlbnRseQorICAgZHJvcHBlZC4KKworCitGbG93IGNvbnRyb2wgY2FsbGJhY2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgLAorOmNsYXNzOmBEYXRhZ3JhbVByb3RvY29sYCBhbmQgOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogQmFzZVByb3RvY29sLnBhdXNlX3dyaXRpbmcoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGdvZXMgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrLgorCisuLiBtZXRob2Q6OiBCYXNlUHJvdG9jb2wucmVzdW1lX3dyaXRpbmcoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKworOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGFuZCA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIGNhbGxzIGFyZSBwYWlyZWQgLS0KKzptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBidWZmZXIgZ29lcyBzdHJpY3RseSBvdmVyCit0aGUgaGlnaC13YXRlciBtYXJrIChldmVuIGlmIHN1YnNlcXVlbnQgd3JpdGVzIGluY3JlYXNlcyB0aGUgYnVmZmVyIHNpemUKK2V2ZW4gbW9yZSksIGFuZCBldmVudHVhbGx5IDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUKK2J1ZmZlciBzaXplIHJlYWNoZXMgdGhlIGxvdy13YXRlciBtYXJrLgorCisuLiBub3RlOjoKKyAgIElmIHRoZSBidWZmZXIgc2l6ZSBlcXVhbHMgdGhlIGhpZ2gtd2F0ZXIgbWFyaywKKyAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBub3QgY2FsbGVkIC0tIGl0IG11c3QgZ28gc3RyaWN0bHkgb3Zlci4KKyAgIENvbnZlcnNlbHksIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGlzCisgICBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSBsb3ctd2F0ZXIgbWFyay4gIFRoZXNlIGVuZCBjb25kaXRpb25zCisgICBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoaW5ncyBnbyBhcyBleHBlY3RlZCB3aGVuIGVpdGhlcgorICAgbWFyayBpcyB6ZXJvLgorCisuLiBub3RlOjoKKyAgIE9uIEJTRCBzeXN0ZW1zIChPUyBYLCBGcmVlQlNELCBldGMuKSBmbG93IGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZAorICAgZm9yIDpjbGFzczpgRGF0YWdyYW1Qcm90b2NvbGAsIGJlY2F1c2Ugc2VuZCBmYWlsdXJlcyBjYXVzZWQgYnkKKyAgIHdyaXRpbmcgdG9vIG1hbnkgcGFja2V0cyBjYW5ub3QgYmUgZGV0ZWN0ZWQgZWFzaWx5LiAgVGhlIHNvY2tldAorICAgYWx3YXlzIGFwcGVhcnMgJ3JlYWR5JyBhbmQgZXhjZXNzIHBhY2tldHMgYXJlIGRyb3BwZWQ7IGFuCisgICA6Y2xhc3M6YE9TRXJyb3JgIHdpdGggZXJybm8gc2V0IHRvIDpjb25zdDpgZXJybm8uRU5PQlVGU2AgbWF5IG9yCisgICBtYXkgbm90IGJlIHJhaXNlZDsgaWYgaXQgaXMgcmFpc2VkLCBpdCB3aWxsIGJlIHJlcG9ydGVkIHRvCisgICA6bWV0aDpgRGF0YWdyYW1Qcm90b2NvbC5lcnJvcl9yZWNlaXZlZGAgYnV0IG90aGVyd2lzZSBpZ25vcmVkLgorCisKK0Nvcm91dGluZXMgYW5kIHByb3RvY29scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Nvcm91dGluZXMgY2FuIGJlIHNjaGVkdWxlZCBpbiBhIHByb3RvY29sIG1ldGhvZCB1c2luZyA6ZnVuYzpgYXN5bmNgLCBidXQgdGhlcmUKK2lzIG5vdCBndWFyYW50ZWUgb24gdGhlIGV4ZWN1dGlvbiBvcmRlci4gUHJvdG9jb2xzIGFyZSBub3QgYXdhcmUgb2YgY29yb3V0aW5lcworY3JlYXRlZCBpbiBwcm90b2NvbCBtZXRob2RzIGFuZCBzbyB3aWxsIG5vdCB3YWl0IGZvciB0aGVtLgorCitUbyBoYXZlIGEgcmVsaWFibGUgZXhlY3V0aW9uIG9yZGVyLCB1c2UgOnJlZjpgc3RyZWFtIG9iamVjdHMgPGFzeW5jaW8tc3RyZWFtcz5gIGluIGEKK2Nvcm91dGluZSB3aXRoIGBgeWllbGQgZnJvbWBgLiBGb3IgZXhhbXBsZSwgdGhlIDptZXRoOmBTdHJlYW1Xcml0ZXIuZHJhaW5gCitjb3JvdXRpbmUgY2FuIGJlIHVzZWQgdG8gd2FpdCB1bnRpbCB0aGUgd3JpdGUgYnVmZmVyIGlzIGZsdXNoZWQuCisKKworUHJvdG9jb2wgZXhhbXBsZTogVENQIGVjaG8gc2VydmVyIGFuZCBjbGllbnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0VjaG8gY2xpZW50CistLS0tLS0tLS0tLQorCitUQ1AgZWNobyBjbGllbnQgZXhhbXBsZSwgc2VuZCBkYXRhIGFuZCB3YWl0IHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgY2xhc3MgRWNob0NsaWVudChhc3luY2lvLlByb3RvY29sKToKKyAgICAgICAgbWVzc2FnZSA9ICdUaGlzIGlzIHRoZSBtZXNzYWdlLiBJdCB3aWxsIGJlIGVjaG9lZC4nCisKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgdHJhbnNwb3J0LndyaXRlKHNlbGYubWVzc2FnZS5lbmNvZGUoKSkKKyAgICAgICAgICAgIHByaW50KCdkYXRhIHNlbnQ6IHt9Jy5mb3JtYXQoc2VsZi5tZXNzYWdlKSkKKworICAgICAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIHByaW50KCdkYXRhIHJlY2VpdmVkOiB7fScuZm9ybWF0KGRhdGEuZGVjb2RlKCkpKQorCisgICAgICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgICAgIHByaW50KCdzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uJykKKyAgICAgICAgICAgIGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKS5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBjb3JvID0gbG9vcC5jcmVhdGVfY29ubmVjdGlvbihFY2hvQ2xpZW50LCAnMTI3LjAuMC4xJywgODg4OCkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGxvb3AuY2xvc2UoKQorCitUaGUgZXZlbnQgbG9vcCBpcyBydW5uaW5nIHR3aWNlLiBUaGUKKzptZXRoOmB+QmFzZUV2ZW50TG9vcC5ydW5fdW50aWxfY29tcGxldGVgIG1ldGhvZCBpcyBwcmVmZXJyZWQgaW4gdGhpcyBzaG9ydAorZXhhbXBsZSB0byByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIHNlcnZlciBpcyBub3QgbGlzdGVuaW5nLCBpbnN0ZWFkIG9mCitoYXZpbmcgdG8gd3JpdGUgYSBzaG9ydCBjb3JvdXRpbmUgdG8gaGFuZGxlIHRoZSBleGNlcHRpb24gYW5kIHN0b3AgdGhlCitydW5uaW5nIGxvb3AuIEF0IDptZXRoOmB+QmFzZUV2ZW50TG9vcC5ydW5fdW50aWxfY29tcGxldGVgIGV4aXQsIHRoZSBsb29wIGlzCitubyBsb25nZXIgcnVubmluZywgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBzdG9wIHRoZSBsb29wIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisKK0VjaG8gc2VydmVyCistLS0tLS0tLS0tLQorCitUQ1AgZWNobyBzZXJ2ZXIgZXhhbXBsZSwgc2VuZCBiYWNrIHJlY2VpdmVkIGRhdGEgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBjbGFzcyBFY2hvU2VydmVyKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICBwZWVybmFtZSA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGVlcm5hbWUnKQorICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Rpb24gZnJvbSB7fScuZm9ybWF0KHBlZXJuYW1lKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICAgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBwcmludCgnZGF0YSByZWNlaXZlZDoge30nLmZvcm1hdChkYXRhLmRlY29kZSgpKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgICMgY2xvc2UgdGhlIHNvY2tldAorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQuY2xvc2UoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGNvcm8gPSBsb29wLmNyZWF0ZV9zZXJ2ZXIoRWNob1NlcnZlciwgJzEyNy4wLjAuMScsIDg4ODgpCisgICAgc2VydmVyID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICBwcmludCgnc2VydmluZyBvbiB7fScuZm9ybWF0KHNlcnZlci5zb2NrZXRzWzBdLmdldHNvY2tuYW1lKCkpKQorCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHByaW50KCJleGl0IikKKyAgICBmaW5hbGx5OgorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorICAgICAgICBsb29wLmNsb3NlKCkKKworOm1ldGg6YFRyYW5zcG9ydC5jbG9zZWAgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcgorOm1ldGg6YFdyaXRlVHJhbnNwb3J0LndyaXRlYCBldmVuIGlmIGRhdGEgYXJlIG5vdCBzZW50IHlldCBvbiB0aGUgc29ja2V0OiBib3RoCittZXRob2RzIGFyZSBhc3luY2hyb25vdXMuIGBgeWllbGQgZnJvbWBgIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGVzZSB0cmFuc3BvcnQKK21ldGhvZHMgYXJlIG5vdCBjb3JvdXRpbmVzLgorCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGE5OTdlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0ucnN0CkBAIC0wLDAgKzEsMjc1IEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworCisuLiBfYXN5bmNpby1zdHJlYW1zOgorCisrKysrKysrKysrKysrKysrKysrKysrKysKK1N0cmVhbXMgKGhpZ2gtbGV2ZWwgQVBJKQorKysrKysrKysrKysrKysrKysrKysrKysrCisKK1N0cmVhbSBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT0KKworLi4gZnVuY3Rpb246OiBvcGVuX2Nvbm5lY3Rpb24oaG9zdD1Ob25lLCBwb3J0PU5vbmUsIFwqLCBsb29wPU5vbmUsIGxpbWl0PU5vbmUsICoqa3dkcykKKworICAgQSB3cmFwcGVyIGZvciA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oKWAgcmV0dXJuaW5nIGEgKHJlYWRlciwKKyAgIHdyaXRlcikgcGFpci4KKworICAgVGhlIHJlYWRlciByZXR1cm5lZCBpcyBhIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBpbnN0YW5jZTsgdGhlIHdyaXRlciBpcworICAgYSA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgaW5zdGFuY2UuCisKKyAgIFRoZSBhcmd1bWVudHMgYXJlIGFsbCB0aGUgdXN1YWwgYXJndW1lbnRzIHRvCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgZXhjZXB0ICpwcm90b2NvbF9mYWN0b3J5KjsgbW9zdAorICAgY29tbW9uIGFyZSBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cworICAgZm9sbG93aW5nLgorCisgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqbG9vcCogKHRvIHNldCB0aGUgZXZlbnQgbG9vcAorICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgKmxpbWl0KiAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgKS4KKworICAgKElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGFuZC9vcgorICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJQcm90b2NvbGAgY2xhc3NlcywganVzdCBjb3B5IHRoZSBjb2RlIC0tIHRoZXJlJ3MgcmVhbGx5CisgICBub3RoaW5nIHNwZWNpYWwgaGVyZSBleGNlcHQgc29tZSBjb252ZW5pZW5jZS4pCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IHN0YXJ0X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgXCosIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgKiprd2RzKQorCisgICBTdGFydCBhIHNvY2tldCBzZXJ2ZXIsIHdpdGggYSBjYWxsYmFjayBmb3IgZWFjaCBjbGllbnQgY29ubmVjdGVkLiBUaGUgcmV0dXJuCisgICB2YWx1ZSBpcyB0aGUgc2FtZSBhcyA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcigpYC4KKworICAgVGhlICpjbGllbnRfY29ubmVjdGVkX2NiKiBwYXJhbWV0ZXIgaXMgY2FsbGVkIHdpdGggdHdvIHBhcmFtZXRlcnM6CisgICAqY2xpZW50X3JlYWRlciosICpjbGllbnRfd3JpdGVyKi4gICpjbGllbnRfcmVhZGVyKiBpcyBhCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgb2JqZWN0LCB3aGlsZSAqY2xpZW50X3dyaXRlciogaXMgYQorICAgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIG9iamVjdC4gIFRoZSAqY2xpZW50X2Nvbm5lY3RlZF9jYiogcGFyYW1ldGVyIGNhbgorICAgZWl0aGVyIGJlIGEgcGxhaW4gY2FsbGJhY2sgZnVuY3Rpb24gb3IgYSA6cmVmOmBjb3JvdXRpbmUgZnVuY3Rpb24KKyAgIDxjb3JvdXRpbmU+YDsgaWYgaXQgaXMgYSBjb3JvdXRpbmUgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseQorICAgY29udmVydGVkIGludG8gYSA6Y2xhc3M6YFRhc2tgLgorCisgICBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0bworICAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKWAgZXhjZXB0ICpwcm90b2NvbF9mYWN0b3J5KjsgbW9zdAorICAgY29tbW9uIGFyZSBwb3NpdGlvbmFsICpob3N0KiBhbmQgKnBvcnQqLCB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZAorICAgYXJndW1lbnRzIGZvbGxvd2luZy4KKworICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmxvb3AqICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgIGluc3RhbmNlIHRvIHVzZSkgYW5kICpsaW1pdCogKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgIDpjbGFzczpgU3RyZWFtUmVhZGVyYCkuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IG9wZW5fdW5peF9jb25uZWN0aW9uKHBhdGg9Tm9uZSwgXCosIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgKiprd2RzKQorCisgICBBIHdyYXBwZXIgZm9yIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uKClgIHJldHVybmluZworICAgYSAocmVhZGVyLCB3cml0ZXIpIHBhaXIuCisKKyAgIFNlZSA6ZnVuYzpgb3Blbl9jb25uZWN0aW9uYCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgcmV0dXJuIHZhbHVlIGFuZCBvdGhlcgorICAgZGV0YWlscy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIEF2YWlsYWJpbGl0eTogVU5JWC4KKworLi4gZnVuY3Rpb246OiBzdGFydF91bml4X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBwYXRoPU5vbmUsIFwqLCBsb29wPU5vbmUsIGxpbWl0PU5vbmUsICoqa3dkcykKKworICAgU3RhcnQgYSBVTklYIERvbWFpbiBTb2NrZXQgc2VydmVyLCB3aXRoIGEgY2FsbGJhY2sgZm9yIGVhY2ggY2xpZW50IGNvbm5lY3RlZC4KKworICAgU2VlIDpmdW5jOmBzdGFydF9zZXJ2ZXJgIGZvciBpbmZvcm1hdGlvbiBhYm91dCByZXR1cm4gdmFsdWUgYW5kIG90aGVyCisgICBkZXRhaWxzLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgQXZhaWxhYmlsaXR5OiBVTklYLgorCisKK1N0cmVhbVJlYWRlcgorPT09PT09PT09PT09CisKKy4uIGNsYXNzOjogU3RyZWFtUmVhZGVyKGxpbWl0PU5vbmUsIGxvb3A9Tm9uZSkKKworICAgLi4gbWV0aG9kOjogZXhjZXB0aW9uKCkKKworICAgICAgR2V0IHRoZSBleGNlcHRpb24uCisKKyAgIC4uIG1ldGhvZDo6IGZlZWRfZW9mKCkKKworICAgICAgQWNrbm93bGVkZ2UgdGhlIEVPRi4KKworICAgLi4gbWV0aG9kOjogZmVlZF9kYXRhKGRhdGEpCisKKyAgICAgIEZlZWQgKmRhdGEqIGJ5dGVzIGluIHRoZSBpbnRlcm5hbCBidWZmZXIuICBBbnkgb3BlcmF0aW9ucyB3YWl0aW5nCisgICAgICBmb3IgdGhlIGRhdGEgd2lsbCBiZSByZXN1bWVkLgorCisgICAuLiBtZXRob2Q6OiBzZXRfZXhjZXB0aW9uKGV4YykKKworICAgICAgU2V0IHRoZSBleGNlcHRpb24uCisKKyAgIC4uIG1ldGhvZDo6IHNldF90cmFuc3BvcnQodHJhbnNwb3J0KQorCisgICAgICBTZXQgdGhlIHRyYW5zcG9ydC4KKworICAgLi4gbWV0aG9kOjogcmVhZChuPS0xKQorCisgICAgICBSZWFkIHVwIHRvICpuKiBieXRlcy4gIElmICpuKiBpcyBub3QgcHJvdmlkZWQsIG9yIHNldCB0byBgYC0xYGAsCisgICAgICByZWFkIHVudGlsIEVPRiBhbmQgcmV0dXJuIGFsbCByZWFkIGJ5dGVzLgorCisgICAgICBJZiB0aGUgRU9GIHdhcyByZWNlaXZlZCBhbmQgdGhlIGludGVybmFsIGJ1ZmZlciBpcyBlbXB0eSwKKyAgICAgIHJldHVybiBhbiBlbXB0eSBgYGJ5dGVzYGAgb2JqZWN0LgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKCkKKworICAgICAgUmVhZCBvbmUgbGluZSwgd2hlcmUgImxpbmUiIGlzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgZW5kaW5nIHdpdGggYGBcbmBgLgorCisgICAgICBJZiBFT0YgaXMgcmVjZWl2ZWQsIGFuZCBgYFxuYGAgd2FzIG5vdCBmb3VuZCwgdGhlIG1ldGhvZCB3aWxsCisgICAgICByZXR1cm4gdGhlIHBhcnRpYWwgcmVhZCBieXRlcy4KKworICAgICAgSWYgdGhlIEVPRiB3YXMgcmVjZWl2ZWQgYW5kIHRoZSBpbnRlcm5hbCBidWZmZXIgaXMgZW1wdHksCisgICAgICByZXR1cm4gYW4gZW1wdHkgYGBieXRlc2BgIG9iamVjdC4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiByZWFkZXhhY3RseShuKQorCisgICAgICBSZWFkIGV4YWN0bHkgKm4qIGJ5dGVzLiBSYWlzZSBhbiA6ZXhjOmBJbmNvbXBsZXRlUmVhZEVycm9yYCBpZiB0aGUgZW5kIG9mCisgICAgICB0aGUgc3RyZWFtIGlzIHJlYWNoZWQgYmVmb3JlICpuKiBjYW4gYmUgcmVhZCwgdGhlCisgICAgICA6YXR0cjpgSW5jb21wbGV0ZVJlYWRFcnJvci5wYXJ0aWFsYCBhdHRyaWJ1dGUgb2YgdGhlIGV4Y2VwdGlvbiBjb250YWlucworICAgICAgdGhlIHBhcnRpYWwgcmVhZCBieXRlcy4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiBhdF9lb2YoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSBhbmQgOm1ldGg6YGZlZWRfZW9mYCB3YXMgY2FsbGVkLgorCisKK1N0cmVhbVdyaXRlcgorPT09PT09PT09PT09CisKKy4uIGNsYXNzOjogU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCkKKworICAgV3JhcHMgYSBUcmFuc3BvcnQuCisKKyAgIFRoaXMgZXhwb3NlcyA6bWV0aDpgd3JpdGVgLCA6bWV0aDpgd3JpdGVsaW5lc2AsIDptZXRoOmBjYW5fd3JpdGVfZW9mKClgLAorICAgOm1ldGg6YHdyaXRlX2VvZmAsIDptZXRoOmBnZXRfZXh0cmFfaW5mb2AgYW5kIDptZXRoOmBjbG9zZWAuICBJdCBhZGRzCisgICA6bWV0aDpgZHJhaW5gIHdoaWNoIHJldHVybnMgYW4gb3B0aW9uYWwgOmNsYXNzOmBGdXR1cmVgIG9uIHdoaWNoIHlvdSBjYW4KKyAgIHdhaXQgZm9yIGZsb3cgY29udHJvbC4gIEl0IGFsc28gYWRkcyBhIHRyYW5zcG9ydCBhdHRyaWJ1dGUgd2hpY2ggcmVmZXJlbmNlcworICAgdGhlIDpjbGFzczpgVHJhbnNwb3J0YCBkaXJlY3RseS4KKworICAgLi4gYXR0cmlidXRlOjogdHJhbnNwb3J0CisKKyAgICAgIFRyYW5zcG9ydC4KKworICAgLi4gbWV0aG9kOjogY2FuX3dyaXRlX2VvZigpCisKKyAgICAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmIHRoZSB0cmFuc3BvcnQgc3VwcG9ydHMgOm1ldGg6YHdyaXRlX2VvZmAsCisgICAgICA6Y29uc3Q6YEZhbHNlYCBpZiBub3QuIFNlZSA6bWV0aDpgV3JpdGVUcmFuc3BvcnQuY2FuX3dyaXRlX2VvZmAuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQ2xvc2UgdGhlIHRyYW5zcG9ydDogc2VlIDptZXRoOmBCYXNlVHJhbnNwb3J0LmNsb3NlYC4KKworICAgLi4gbWV0aG9kOjogZHJhaW4oKQorCisgICAgICBXYWl0IHVudGlsIHRoZSB3cml0ZSBidWZmZXIgb2YgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGlzIGZsdXNoZWQuCisKKyAgICAgIFRoZSBpbnRlbmRlZCB1c2UgaXMgdG8gd3JpdGU6OgorCisgICAgICAgICAgdy53cml0ZShkYXRhKQorICAgICAgICAgIHlpZWxkIGZyb20gdy5kcmFpbigpCisKKyAgICAgIFdoZW4gdGhlIHRyYW5zcG9ydCBidWZmZXIgaXMgZnVsbCAodGhlIHByb3RvY29sIGlzIHBhdXNlZCksIGJsb2NrIHVudGlsCisgICAgICB0aGUgYnVmZmVyIGlzIChwYXJ0aWFsbHkpIGRyYWluZWQgYW5kIHRoZSBwcm90b2NvbCBpcyByZXN1bWVkLiBXaGVuIHRoZXJlCisgICAgICBpcyBub3RoaW5nIHRvIHdhaXQgZm9yLCB0aGUgeWllbGQtZnJvbSBjb250aW51ZXMgaW1tZWRpYXRlbHkuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdD1Ob25lKQorCisgICAgICBSZXR1cm4gb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uOiBzZWUKKyAgICAgIDptZXRoOmBCYXNlVHJhbnNwb3J0LmdldF9leHRyYV9pbmZvYC4KKworICAgLi4gbWV0aG9kOjogd3JpdGUoZGF0YSkKKworICAgICAgV3JpdGUgc29tZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydDogc2VlCisgICAgICA6bWV0aDpgV3JpdGVUcmFuc3BvcnQud3JpdGVgLgorCisgICAuLiBtZXRob2Q6OiB3cml0ZWxpbmVzKGRhdGEpCisKKyAgICAgIFdyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQ6CisgICAgICBzZWUgOm1ldGg6YFdyaXRlVHJhbnNwb3J0LndyaXRlbGluZXNgLgorCisgICAuLiBtZXRob2Q6OiB3cml0ZV9lb2YoKQorCisgICAgICBDbG9zZSB0aGUgd3JpdGUgZW5kIG9mIHRoZSB0cmFuc3BvcnQgYWZ0ZXIgZmx1c2hpbmcgYnVmZmVyZWQgZGF0YToKKyAgICAgIHNlZSA6bWV0aDpgV3JpdGVUcmFuc3BvcnQud3JpdGVfZW9mYC4KKworCitTdHJlYW1SZWFkZXJQcm90b2NvbAorPT09PT09PT09PT09PT09PT09PT0KKworLi4gY2xhc3M6OiBTdHJlYW1SZWFkZXJQcm90b2NvbChzdHJlYW1fcmVhZGVyLCBjbGllbnRfY29ubmVjdGVkX2NiPU5vbmUsIGxvb3A9Tm9uZSkKKworICAgIFRyaXZpYWwgaGVscGVyIGNsYXNzIHRvIGFkYXB0IGJldHdlZW4gOmNsYXNzOmBQcm90b2NvbGAgYW5kCisgICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgLiBTdWJsY2xhc3Mgb2YgOmNsYXNzOmBQcm90b2NvbGAuCisKKyAgICAqc3RyZWFtX3JlYWRlciogaXMgYSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgaW5zdGFuY2UsICpjbGllbnRfY29ubmVjdGVkX2NiKgorICAgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIChzdHJlYW1fcmVhZGVyLCBzdHJlYW1fd3JpdGVyKSB3aGVuIGEKKyAgICBjb25uZWN0aW9uIGlzIG1hZGUsICpsb29wKiBpcyB0aGUgZXZlbnQgbG9vcCBpbnN0YW5jZSB0byB1c2UuCisKKyAgICAoVGhpcyBpcyBhIGhlbHBlciBjbGFzcyBpbnN0ZWFkIG9mIG1ha2luZyA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgaXRzZWxmIGEKKyAgICA6Y2xhc3M6YFByb3RvY29sYCBzdWJjbGFzcywgYmVjYXVzZSB0aGUgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGhhcyBvdGhlcgorICAgIHBvdGVudGlhbCB1c2VzLCBhbmQgdG8gcHJldmVudCB0aGUgdXNlciBvZiB0aGUgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIHRvCisgICAgYWNjaWRlbnRhbGx5IGNhbGwgaW5hcHByb3ByaWF0ZSBtZXRob2RzIG9mIHRoZSBwcm90b2NvbC4pCisKKworSW5jb21wbGV0ZVJlYWRFcnJvcgorPT09PT09PT09PT09PT09PT09PQorCisuLiBleGNlcHRpb246OiBJbmNvbXBsZXRlUmVhZEVycm9yCisKKyAgICBJbmNvbXBsZXRlIHJlYWQgZXJyb3IsIHN1YmNsYXNzIG9mIDpleGM6YEVPRkVycm9yYC4KKworICAgLi4gYXR0cmlidXRlOjogZXhwZWN0ZWQKKworICAgICAgVG90YWwgbnVtYmVyIG9mIGV4cGVjdGVkIGJ5dGVzICg6Y2xhc3M6YGludGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBwYXJ0aWFsCisKKyAgICAgIFJlYWQgYnl0ZXMgc3RyaW5nIGJlZm9yZSB0aGUgZW5kIG9mIHN0cmVhbSB3YXMgcmVhY2hlZCAoOmNsYXNzOmBieXRlc2ApLgorCisKK0V4YW1wbGUKKz09PT09PT0KKworU2ltcGxlIGV4YW1wbGUgcXVlcnlpbmcgSFRUUCBoZWFkZXJzIG9mIHRoZSBVUkwgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmU6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKyAgICBpbXBvcnQgdXJsbGliLnBhcnNlCisgICAgaW1wb3J0IHN5cworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHByaW50X2h0dHBfaGVhZGVycyh1cmwpOgorICAgICAgICB1cmwgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQodXJsKQorICAgICAgICByZWFkZXIsIHdyaXRlciA9IHlpZWxkIGZyb20gYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24odXJsLmhvc3RuYW1lLCA4MCkKKyAgICAgICAgcXVlcnkgPSAoJ0hFQUQge3VybC5wYXRofSBIVFRQLzEuMFxyXG4nCisgICAgICAgICAgICAgICAgICdIb3N0OiB7dXJsLmhvc3RuYW1lfVxyXG4nCisgICAgICAgICAgICAgICAgICdcclxuJykuZm9ybWF0KHVybD11cmwpCisgICAgICAgIHdyaXRlci53cml0ZShxdWVyeS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUgPSB5aWVsZCBmcm9tIHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCdsYXRpbjEnKS5yc3RyaXAoKQorICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICBwcmludCgnSFRUUCBoZWFkZXI+ICVzJyAlIGxpbmUpCisKKyAgICB1cmwgPSBzeXMuYXJndlsxXQorICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICB0YXNrID0gYXN5bmNpby5hc3luYyhwcmludF9odHRwX2hlYWRlcnModXJsKSkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgIGxvb3AuY2xvc2UoKQorCitVc2FnZTo6CisKKyAgICBweXRob24gZXhhbXBsZS5weSBodHRwOi8vZXhhbXBsZS5jb20vcGF0aC9wYWdlLmh0bWwKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1MzI2MQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5yc3QKQEAgLTAsMCArMSwyODcgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKKy4uIF9hc3luY2lvLXN1YnByb2Nlc3M6CisKK1N1YnByb2Nlc3MKKz09PT09PT09PT0KKworV2luZG93cyBldmVudCBsb29wCistLS0tLS0tLS0tLS0tLS0tLS0KKworT24gV2luZG93cywgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcCBpcyA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCB3aGljaCBkb2VzIG5vdAorc3VwcG9ydCBzdWJwcm9jZXNzZXMuIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCitFeGFtcGxlIHRvIHVzZSBpdCBvbiBXaW5kb3dzOjoKKworICAgIGltcG9ydCBhc3luY2lvLCBvcworCisgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICBsb29wID0gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YEF2YWlsYWJsZSBldmVudCBsb29wcyA8YXN5bmNpby1ldmVudC1sb29wcz5gIGFuZCA6cmVmOmBQbGF0Zm9ybQorICAgc3VwcG9ydCA8YXN5bmNpby1wbGF0Zm9ybS1zdXBwb3J0PmAuCisKKworQ3JlYXRlIGEgc3VicHJvY2VzczogaGlnaC1sZXZlbCBBUEkgdXNpbmcgUHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKGNtZCwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBsb29wPU5vbmUsIGxpbWl0PU5vbmUsIFwqXCprd2RzKQorCisgICBSdW4gdGhlIHNoZWxsIGNvbW1hbmQgKmNtZCouIFNlZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX3NoZWxsYCBmb3IKKyAgIHBhcmFtZXRlcnMuIFJldHVybiBhIDpjbGFzczpgfmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzYCBpbnN0YW5jZS4KKworICAgVGhlIG9wdGlvbmFsICpsaW1pdCogcGFyYW1ldGVyIHNldHMgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoXCphcmdzLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgXCpcKmt3ZHMpCisKKyAgIENyZWF0ZSBhIHN1YnByb2Nlc3MuIFNlZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX2V4ZWNgIGZvcgorICAgcGFyYW1ldGVycy4gUmV0dXJuIGEgOmNsYXNzOmB+YXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3NgIGluc3RhbmNlLgorCisgICBUaGUgb3B0aW9uYWwgKmxpbWl0KiBwYXJhbWV0ZXIgc2V0cyB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgIDpjbGFzczpgU3RyZWFtUmVhZGVyYC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKK1VzZSB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY29ubmVjdF9yZWFkX3BpcGVgIGFuZAorOm1ldGg6YEJhc2VFdmVudExvb3AuY29ubmVjdF93cml0ZV9waXBlYCBtZXRob2RzIHRvIGNvbm5lY3QgcGlwZXMuCisKKworQ3JlYXRlIGEgc3VicHJvY2VzczogbG93LWxldmVsIEFQSSB1c2luZyBzdWJwcm9jZXNzLlBvcGVuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUnVuIHN1YnByb2Nlc3NlcyBhc3luY2hyb25vdXNseSB1c2luZyB0aGUgOm1vZDpgc3VicHJvY2Vzc2AgbW9kdWxlLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnN1YnByb2Nlc3NfZXhlYyhwcm90b2NvbF9mYWN0b3J5LCBcKmFyZ3MsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgXCpcKmt3YXJncykKKworICAgQ3JlYXRlIGEgc3VicHJvY2VzcyBmcm9tIG9uZSBvciBtb3JlIHN0cmluZyBhcmd1bWVudHMgKGNoYXJhY3RlciBzdHJpbmdzIG9yCisgICBieXRlcyBzdHJpbmdzIGVuY29kZWQgdG8gdGhlIDpyZWY6YGZpbGVzeXN0ZW0gZW5jb2RpbmcKKyAgIDxmaWxlc3lzdGVtLWVuY29kaW5nPmApLCB3aGVyZSB0aGUgZmlyc3Qgc3RyaW5nCisgICBzcGVjaWZpZXMgdGhlIHByb2dyYW0gdG8gZXhlY3V0ZSwgYW5kIHRoZSByZW1haW5pbmcgc3RyaW5ncyBzcGVjaWZ5IHRoZQorICAgcHJvZ3JhbSdzIGFyZ3VtZW50cy4gKFRodXMsIHRvZ2V0aGVyIHRoZSBzdHJpbmcgYXJndW1lbnRzIGZvcm0gdGhlCisgICBgYHN5cy5hcmd2YGAgdmFsdWUgb2YgdGhlIHByb2dyYW0sIGFzc3VtaW5nIGl0IGlzIGEgUHl0aG9uIHNjcmlwdC4pIFRoaXMgaXMKKyAgIHNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYCBjbGFzcyBjYWxsZWQgd2l0aAorICAgc2hlbGw9RmFsc2UgYW5kIHRoZSBsaXN0IG9mIHN0cmluZ3MgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudDsKKyAgIGhvd2V2ZXIsIHdoZXJlIDpjbGFzczpgfnN1YnByb2Nlc3MuUG9wZW5gIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IHdoaWNoIGlzCisgICBsaXN0IG9mIHN0cmluZ3MsIDpmdW5jOmBzdWJwcm9jZXNzX2V4ZWNgIHRha2VzIG11bHRpcGxlIHN0cmluZyBhcmd1bWVudHMuCisKKyAgIE90aGVyIHBhcmFtZXRlcnM6CisKKyAgICogKnN0ZGluKjogRWl0aGVyIGEgZmlsZS1saWtlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBpcGUgdG8gYmUgY29ubmVjdGVkCisgICAgIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RhbmRhcmQgaW5wdXQgc3RyZWFtIHVzaW5nCisgICAgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jb25uZWN0X3dyaXRlX3BpcGVgLCBvciB0aGUgY29uc3RhbnQKKyAgICAgOmNvbnN0OmBzdWJwcm9jZXNzLlBJUEVgICh0aGUgZGVmYXVsdCkuIEJ5IGRlZmF1bHQgYSBuZXcgcGlwZSB3aWxsIGJlCisgICAgIGNyZWF0ZWQgYW5kIGNvbm5lY3RlZC4KKworICAgKiAqc3Rkb3V0KjogRWl0aGVyIGEgZmlsZS1saWtlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBpcGUgdG8gYmUgY29ubmVjdGVkCisgICAgIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSB1c2luZworICAgICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY29ubmVjdF9yZWFkX3BpcGVgLCBvciB0aGUgY29uc3RhbnQKKyAgICAgOmNvbnN0OmBzdWJwcm9jZXNzLlBJUEVgICh0aGUgZGVmYXVsdCkuIEJ5IGRlZmF1bHQgYSBuZXcgcGlwZSB3aWxsIGJlCisgICAgIGNyZWF0ZWQgYW5kIGNvbm5lY3RlZC4KKworICAgKiAqc3RkZXJyKjogRWl0aGVyIGEgZmlsZS1saWtlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBpcGUgdG8gYmUgY29ubmVjdGVkCisgICAgIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIHVzaW5nCisgICAgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jb25uZWN0X3JlYWRfcGlwZWAsIG9yIG9uZSBvZiB0aGUgY29uc3RhbnRzCisgICAgIDpjb25zdDpgc3VicHJvY2Vzcy5QSVBFYCAodGhlIGRlZmF1bHQpIG9yIDpjb25zdDpgc3VicHJvY2Vzcy5TVERPVVRgLgorICAgICBCeSBkZWZhdWx0IGEgbmV3IHBpcGUgd2lsbCBiZSBjcmVhdGVkIGFuZCBjb25uZWN0ZWQuIFdoZW4KKyAgICAgOmNvbnN0OmBzdWJwcm9jZXNzLlNURE9VVGAgaXMgc3BlY2lmaWVkLCB0aGUgc3VicHJvY2VzcydzIHN0YW5kYXJkIGVycm9yCisgICAgIHN0cmVhbSB3aWxsIGJlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBwaXBlIGFzIHRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtLgorCisgICAqIEFsbCBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIDpjbGFzczpgc3VicHJvY2Vzcy5Qb3BlbmAKKyAgICAgd2l0aG91dCBpbnRlcnByZXRhdGlvbiwgZXhjZXB0IGZvciAqYnVmc2l6ZSosICp1bml2ZXJzYWxfbmV3bGluZXMqIGFuZAorICAgICAqc2hlbGwqLCB3aGljaCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBhdCBhbGwuCisKKyAgIFJldHVybnMgYSBwYWlyIG9mIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAsIHdoZXJlICp0cmFuc3BvcnQqIGlzIGFuCisgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YEJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0YC4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICBTZWUgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gIGNsYXNzIGZvciBwYXJhbWV0ZXJzLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnN1YnByb2Nlc3Nfc2hlbGwocHJvdG9jb2xfZmFjdG9yeSwgY21kLCBcKiwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBcKlwqa3dhcmdzKQorCisgICBDcmVhdGUgYSBzdWJwcm9jZXNzIGZyb20gKmNtZCosIHdoaWNoIGlzIGEgY2hhcmFjdGVyIHN0cmluZyBvciBhIGJ5dGVzCisgICBzdHJpbmcgZW5jb2RlZCB0byB0aGUgOnJlZjpgZmlsZXN5c3RlbSBlbmNvZGluZyA8ZmlsZXN5c3RlbS1lbmNvZGluZz5gLAorICAgdXNpbmcgdGhlIHBsYXRmb3JtJ3MgInNoZWxsIiBzeW50YXguIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgc3RhbmRhcmQgbGlicmFyeQorICAgOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYCBjbGFzcyBjYWxsZWQgd2l0aCBgYHNoZWxsPVRydWVgYC4KKworICAgU2VlIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX2V4ZWNgIGZvciBtb3JlIGRldGFpbHMgYWJvdXQKKyAgIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorCisgICBSZXR1cm5zIGEgcGFpciBvZiBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgLCB3aGVyZSAqdHJhbnNwb3J0KiBpcyBhbgorICAgaW5zdGFuY2Ugb2YgOmNsYXNzOmBCYXNlU3VicHJvY2Vzc1RyYW5zcG9ydGAuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgU2VlIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYCBjbGFzcyBmb3IgcGFyYW1ldGVycy4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jb25uZWN0X3JlYWRfcGlwZWAgYW5kCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jb25uZWN0X3dyaXRlX3BpcGVgIG1ldGhvZHMuCisKKworQ29uc3RhbnRzCistLS0tLS0tLS0KKworLi4gZGF0YTo6IGFzeW5jaW8uc3VicHJvY2Vzcy5QSVBFCisKKyAgIFNwZWNpYWwgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgKnN0ZGluKiwgKnN0ZG91dCogb3IgKnN0ZGVyciogYXJndW1lbnQKKyAgIHRvIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAgYW5kIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIGluZGljYXRlcyB0aGF0IGEgcGlwZSB0byB0aGUgc3RhbmRhcmQgc3RyZWFtIHNob3VsZCBiZSBvcGVuZWQuCisKKy4uIGRhdGE6OiBhc3luY2lvLnN1YnByb2Nlc3MuU1RET1VUCisKKyAgIFNwZWNpYWwgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgKnN0ZGVyciogYXJndW1lbnQgdG8KKyAgIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAgYW5kIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIGluZGljYXRlcyB0aGF0IHN0YW5kYXJkIGVycm9yIHNob3VsZCBnbyBpbnRvIHRoZSBzYW1lIGhhbmRsZSBhcyBzdGFuZGFyZAorICAgb3V0cHV0LgorCisuLiBkYXRhOjogYXN5bmNpby5zdWJwcm9jZXNzLkRFVk5VTEwKKworICAgU3BlY2lhbCB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSAqc3RkaW4qLCAqc3Rkb3V0KiBvciAqc3RkZXJyKiBhcmd1bWVudAorICAgdG8gOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsYCBhbmQgOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWNgIGFuZAorICAgaW5kaWNhdGVzIHRoYXQgdGhlIHNwZWNpYWwgZmlsZSA6ZGF0YTpgb3MuZGV2bnVsbGAgd2lsbCBiZSB1c2VkLgorCisKK1Byb2Nlc3MKKy0tLS0tLS0KKworLi4gY2xhc3M6OiBhc3luY2lvLnN1YnByb2Nlc3MuUHJvY2VzcworCisgICAuLiBhdHRyaWJ1dGU6OiBwaWQKKworICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByb2Nlc3MuCisKKyAgICAgIE5vdGUgdGhhdCBpZiB5b3Ugc2V0IHRoZSAqc2hlbGwqIGFyZ3VtZW50IHRvIGBgVHJ1ZWBgLCB0aGlzIGlzIHRoZQorICAgICAgcHJvY2VzcyBpZGVudGlmaWVyIG9mIHRoZSBzcGF3bmVkIHNoZWxsLgorCisgICAuLiBhdHRyaWJ1dGU6OiByZXR1cm5jb2RlCisKKyAgICAgIFJldHVybiBjb2RlIG9mIHRoZSBwcm9jZXNzIHdoZW4gaXQgZXhpdGVkLiAgQSBgYE5vbmVgYCB2YWx1ZSBpbmRpY2F0ZXMKKyAgICAgIHRoYXQgdGhlIHByb2Nlc3MgaGFzIG5vdCB0ZXJtaW5hdGVkIHlldC4KKworICAgICAgQSBuZWdhdGl2ZSB2YWx1ZSBgYC1OYGAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoaWxkIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbAorICAgICAgYGBOYGAgKFVuaXggb25seSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0ZGluCisKKyAgICAgIFN0YW5kYXJkIGlucHV0IHN0cmVhbSAod3JpdGUpLCBgYE5vbmVgYCBpZiB0aGUgcHJvY2VzcyB3YXMgY3JlYXRlZCB3aXRoCisgICAgICBgYHN0ZGluPU5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogc3Rkb3V0CisKKyAgICAgIFN0YW5kYXJkIG91dHB1dCBzdHJlYW0gKHJlYWQpLCBgYE5vbmVgYCBpZiB0aGUgcHJvY2VzcyB3YXMgY3JlYXRlZCB3aXRoCisgICAgICBgYHN0ZG91dD1Ob25lYGAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0ZGVycgorCisgICAgICBTdGFuZGFyZCBlcnJvciBzdHJlYW0gKHJlYWQpLCBgYE5vbmVgYCBpZiB0aGUgcHJvY2VzcyB3YXMgY3JlYXRlZCB3aXRoCisgICAgICBgYHN0ZGVycj1Ob25lYGAuCisKKyAgIC4uIG1ldGhvZDo6IGNvbW11bmljYXRlKGlucHV0PU5vbmUpCisKKyAgICAgIEludGVyYWN0IHdpdGggcHJvY2VzczogU2VuZCBkYXRhIHRvIHN0ZGluLiAgUmVhZCBkYXRhIGZyb20gc3Rkb3V0IGFuZAorICAgICAgc3RkZXJyLCB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkLiAgV2FpdCBmb3IgcHJvY2VzcyB0byB0ZXJtaW5hdGUuCisgICAgICBUaGUgb3B0aW9uYWwgKmlucHV0KiBhcmd1bWVudCBzaG91bGQgYmUgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBjaGlsZAorICAgICAgcHJvY2Vzcywgb3IgYGBOb25lYGAsIGlmIG5vIGRhdGEgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGNoaWxkLiAgVGhlIHR5cGUKKyAgICAgIG9mICppbnB1dCogbXVzdCBiZSBieXRlcy4KKworICAgICAgSWYgYSA6ZXhjOmBCcm9rZW5QaXBlRXJyb3JgIG9yIDpleGM6YENvbm5lY3Rpb25SZXNldEVycm9yYCBleGNlcHRpb24gaXMKKyAgICAgIHJhaXNlZCB3aGVuIHdyaXRpbmcgKmlucHV0KiBpbnRvIHN0ZGluLCB0aGUgZXhjZXB0aW9uIGlzIGlnbm9yZWQuIEl0CisgICAgICBvY2N1cnMgd2hlbiB0aGUgcHJvY2VzcyBleGl0cyBiZWZvcmUgYWxsIGRhdGEgYXJlIHdyaXR0ZW4gaW50byBzdGRpbi4KKworICAgICAgOm1ldGg6YGNvbW11bmljYXRlYCByZXR1cm5zIGEgdHVwbGUgYGAoc3Rkb3V0ZGF0YSwgc3RkZXJyZGF0YSlgYC4KKworICAgICAgTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHNlbmQgZGF0YSB0byB0aGUgcHJvY2VzcydzIHN0ZGluLCB5b3UgbmVlZCB0bworICAgICAgY3JlYXRlIHRoZSBQcm9jZXNzIG9iamVjdCB3aXRoIGBgc3RkaW49UElQRWBgLiAgU2ltaWxhcmx5LCB0byBnZXQgYW55dGhpbmcKKyAgICAgIG90aGVyIHRoYW4gYGBOb25lYGAgaW4gdGhlIHJlc3VsdCB0dXBsZSwgeW91IG5lZWQgdG8gZ2l2ZSBgYHN0ZG91dD1QSVBFYGAKKyAgICAgIGFuZC9vciBgYHN0ZGVycj1QSVBFYGAgdG9vLgorCisgICAgICAuLiBub3RlOjoKKworICAgICAgICAgVGhlIGRhdGEgcmVhZCBpcyBidWZmZXJlZCBpbiBtZW1vcnksIHNvIGRvIG5vdCB1c2UgdGhpcyBtZXRob2QgaWYgdGhlCisgICAgICAgICBkYXRhIHNpemUgaXMgbGFyZ2Ugb3IgdW5saW1pdGVkLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjIKKyAgICAgICAgIFRoZSBtZXRob2Qgbm93IGlnbm9yZXMgOmV4YzpgQnJva2VuUGlwZUVycm9yYCBhbmQKKyAgICAgICAgIDpleGM6YENvbm5lY3Rpb25SZXNldEVycm9yYC4KKworICAgLi4gbWV0aG9kOjoga2lsbCgpCisKKyAgICAgIEtpbGxzIHRoZSBjaGlsZC4gT24gUG9zaXggT1NzIHRoZSBmdW5jdGlvbiBzZW5kcyA6cHk6ZGF0YTpgU0lHS0lMTGAgdG8KKyAgICAgIHRoZSBjaGlsZC4gIE9uIFdpbmRvd3MgOm1ldGg6YGtpbGxgIGlzIGFuIGFsaWFzIGZvciA6bWV0aDpgdGVybWluYXRlYC4KKworICAgLi4gbWV0aG9kOjogc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICAgICBTZW5kcyB0aGUgc2lnbmFsICpzaWduYWwqIHRvIHRoZSBjaGlsZCBwcm9jZXNzLgorCisgICAgICAuLiBub3RlOjoKKworICAgICAgICAgT24gV2luZG93cywgOnB5OmRhdGE6YFNJR1RFUk1gIGlzIGFuIGFsaWFzIGZvciA6bWV0aDpgdGVybWluYXRlYC4KKyAgICAgICAgIGBgQ1RSTF9DX0VWRU5UYGAgYW5kIGBgQ1RSTF9CUkVBS19FVkVOVGBgIGNhbiBiZSBzZW50IHRvIHByb2Nlc3NlcworICAgICAgICAgc3RhcnRlZCB3aXRoIGEgKmNyZWF0aW9uZmxhZ3MqIHBhcmFtZXRlciB3aGljaCBpbmNsdWRlcworICAgICAgICAgYGBDUkVBVEVfTkVXX1BST0NFU1NfR1JPVVBgYC4KKworICAgLi4gbWV0aG9kOjogdGVybWluYXRlKCkKKworICAgICAgU3RvcCB0aGUgY2hpbGQuIE9uIFBvc2l4IE9TcyB0aGUgbWV0aG9kIHNlbmRzIDpweTpkYXRhOmBzaWduYWwuU0lHVEVSTWAKKyAgICAgIHRvIHRoZSBjaGlsZC4gT24gV2luZG93cyB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uCisgICAgICA6YzpmdW5jOmBUZXJtaW5hdGVQcm9jZXNzYCBpcyBjYWxsZWQgdG8gc3RvcCB0aGUgY2hpbGQuCisKKyAgIC4uIG1ldGhvZDo6IHdhaXQoKToKKworICAgICAgV2FpdCBmb3IgY2hpbGQgcHJvY2VzcyB0byB0ZXJtaW5hdGUuICBTZXQgYW5kIHJldHVybiA6YXR0cjpgcmV0dXJuY29kZWAKKyAgICAgIGF0dHJpYnV0ZS4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisKK0V4YW1wbGUKKy0tLS0tLS0KKworSW1wbGVtZW50IGEgZnVuY3Rpb24gc2ltaWxhciB0byA6ZnVuYzpgc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXRgLCBleGNlcHQgdGhhdAoraXQgZG9lcyBub3QgdXNlIGEgc2hlbGwuIEdldCB0aGUgb3V0cHV0IG9mIHRoZSAicHl0aG9uIC1tIHBsYXRmb3JtIiBjb21tYW5kIGFuZAorZGlzcGxheSB0aGUgb3V0cHV0OjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IG9zCisgICAgaW1wb3J0IHN5cworICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgc3VicHJvY2VzcworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGdldHN0YXR1c291dHB1dCgqYXJncyk6CisgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Rkb3V0LCBfID0geWllbGQgZnJvbSBwcm9jLmNvbW11bmljYXRlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJvYy5raWxsKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcHJvYy53YWl0KCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4aXRjb2RlID0geWllbGQgZnJvbSBwcm9jLndhaXQoKQorICAgICAgICByZXR1cm4gKGV4aXRjb2RlLCBzdGRvdXQpCisKKyAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgIGxvb3AgPSBhc3luY2lvLlByb2FjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgIGVsc2U6CisgICAgICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBjb3JvID0gZ2V0c3RhdHVzb3V0cHV0KHN5cy5leGVjdXRhYmxlLCAnLW0nLCAncGxhdGZvcm0nKQorICAgIGV4aXRjb2RlLCBzdGRvdXQgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgIGlmIG5vdCBleGl0Y29kZToKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZSgnYXNjaWknKS5yc3RyaXAoKQorICAgICAgICBwcmludCgiUGxhdGZvcm06ICVzIiAlIHN0ZG91dCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiUHl0aG9uIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlczoiICUgZXhpdGNvZGUsIGZsdXNoPVRydWUpCisgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKHN0ZG91dCkKKyAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIuZmx1c2goKQorICAgIGxvb3AuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1zeW5jLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3luYy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4MGJkNwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3luYy5yc3QKQEAgLTAsMCArMSw0MTIgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisuLiBfYXN5bmNpby1zeW5jOgorCitTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTG9ja3MKKy0tLS0tCisKK0xvY2sKK15eXl4KKworLi4gY2xhc3M6OiBMb2NrKFwqLCBsb29wPU5vbmUpCisKKyAgIFByaW1pdGl2ZSBsb2NrIG9iamVjdHMuCisKKyAgIEEgcHJpbWl0aXZlIGxvY2sgaXMgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIHRoYXQgaXMgbm90IG93bmVkIGJ5IGEKKyAgIHBhcnRpY3VsYXIgY29yb3V0aW5lIHdoZW4gbG9ja2VkLiAgQSBwcmltaXRpdmUgbG9jayBpcyBpbiBvbmUgb2YgdHdvIHN0YXRlcywKKyAgICdsb2NrZWQnIG9yICd1bmxvY2tlZCcuCisKKyAgIEl0IGlzIGNyZWF0ZWQgaW4gdGhlIHVubG9ja2VkIHN0YXRlLiAgSXQgaGFzIHR3byBiYXNpYyBtZXRob2RzLCA6bWV0aDpgYWNxdWlyZWAKKyAgIGFuZCA6bWV0aDpgcmVsZWFzZWAuICBXaGVuIHRoZSBzdGF0ZSBpcyB1bmxvY2tlZCwgYWNxdWlyZSgpIGNoYW5nZXMgdGhlIHN0YXRlIHRvCisgICBsb2NrZWQgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBXaGVuIHRoZSBzdGF0ZSBpcyBsb2NrZWQsIGFjcXVpcmUoKSBibG9ja3MKKyAgIHVudGlsIGEgY2FsbCB0byByZWxlYXNlKCkgaW4gYW5vdGhlciBjb3JvdXRpbmUgY2hhbmdlcyBpdCB0byB1bmxvY2tlZCwgdGhlbgorICAgdGhlIGFjcXVpcmUoKSBjYWxsIHJlc2V0cyBpdCB0byBsb2NrZWQgYW5kIHJldHVybnMuICBUaGUgcmVsZWFzZSgpIG1ldGhvZAorICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHRoZSBsb2NrZWQgc3RhdGU7IGl0IGNoYW5nZXMgdGhlIHN0YXRlIHRvIHVubG9ja2VkCisgICBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4gIElmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byByZWxlYXNlIGFuIHVubG9ja2VkIGxvY2ssCisgICBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuCisKKyAgIFdoZW4gbW9yZSB0aGFuIG9uZSBjb3JvdXRpbmUgaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkgd2FpdGluZyBmb3IgdGhlIHN0YXRlCisgICB0byB0dXJuIHRvIHVubG9ja2VkLCBvbmx5IG9uZSBjb3JvdXRpbmUgcHJvY2VlZHMgd2hlbiBhIHJlbGVhc2UoKSBjYWxsCisgICByZXNldHMgdGhlIHN0YXRlIHRvIHVubG9ja2VkOyBmaXJzdCBjb3JvdXRpbmUgd2hpY2ggaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkKKyAgIGlzIGJlaW5nIHByb2Nlc3NlZC4KKworICAgOm1ldGg6YGFjcXVpcmVgIGlzIGEgY29yb3V0aW5lIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggYGB5aWVsZCBmcm9tYGAuCisKKyAgIExvY2tzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgYGAoeWllbGQgZnJvbSBsb2NrKWBgCisgICBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbi4KKworICAgVXNhZ2U6OgorCisgICAgICAgbG9jayA9IExvY2soKQorICAgICAgIC4uLgorICAgICAgIHlpZWxkIGZyb20gbG9jaworICAgICAgIHRyeToKKyAgICAgICAgICAgLi4uCisgICAgICAgZmluYWxseToKKyAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgQ29udGV4dCBtYW5hZ2VyIHVzYWdlOjoKKworICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAuLi4KKyAgICAgICB3aXRoICh5aWVsZCBmcm9tIGxvY2spOgorICAgICAgICAgICAgLi4uCisKKyAgIExvY2sgb2JqZWN0cyBjYW4gYmUgdGVzdGVkIGZvciBsb2NraW5nIHN0YXRlOjoKKworICAgICAgIGlmIG5vdCBsb2NrLmxvY2tlZCgpOgorICAgICAgICAgIHlpZWxkIGZyb20gbG9jaworICAgICAgIGVsc2U6CisgICAgICAgICAgIyBsb2NrIGlzIGFjcXVpcmVkCisgICAgICAgICAgIC4uLgorCisgICAuLiBtZXRob2Q6OiBsb2NrZWQoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGxvY2sgaXMgYWNxdWlyZWQuCisKKyAgIC4uIG1ldGhvZDo6IGFjcXVpcmUoKQorCisgICAgICBBY3F1aXJlIGEgbG9jay4KKworICAgICAgVGhpcyBtZXRob2QgYmxvY2tzIHVudGlsIHRoZSBsb2NrIGlzIHVubG9ja2VkLCB0aGVuIHNldHMgaXQgdG8gbG9ja2VkIGFuZAorICAgICAgcmV0dXJucyBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSBhIGxvY2suCisKKyAgICAgIFdoZW4gdGhlIGxvY2sgaXMgbG9ja2VkLCByZXNldCBpdCB0byB1bmxvY2tlZCwgYW5kIHJldHVybi4gIElmIGFueSBvdGhlcgorICAgICAgY29yb3V0aW5lcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZWNvbWUgdW5sb2NrZWQsIGFsbG93CisgICAgICBleGFjdGx5IG9uZSBvZiB0aGVtIHRvIHByb2NlZWQuCisKKyAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisKKworRXZlbnQKK15eXl5eCisKKy4uIGNsYXNzOjogRXZlbnQoXCosIGxvb3A9Tm9uZSkKKworICAgQW4gRXZlbnQgaW1wbGVtZW50YXRpb24sIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IHRvIDpjbGFzczpgdGhyZWFkaW5nLkV2ZW50YC4KKworICAgQ2xhc3MgaW1wbGVtZW50aW5nIGV2ZW50IG9iamVjdHMuIEFuIGV2ZW50IG1hbmFnZXMgYSBmbGFnIHRoYXQgY2FuIGJlIHNldCB0bworICAgdHJ1ZSB3aXRoIHRoZSA6bWV0aDpgc2V0YCBtZXRob2QgYW5kIHJlc2V0IHRvIGZhbHNlIHdpdGggdGhlIDptZXRoOmBjbGVhcmAKKyAgIG1ldGhvZC4gIFRoZSA6bWV0aDpgd2FpdGAgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgZmxhZyBpcyB0cnVlLiBUaGUgZmxhZyBpcworICAgaW5pdGlhbGx5IGZhbHNlLgorCisgICAuLiBtZXRob2Q6OiBjbGVhcigpCisKKyAgICAgIFJlc2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIGZhbHNlLiBTdWJzZXF1ZW50bHksIGNvcm91dGluZXMgY2FsbGluZworICAgICAgOm1ldGg6YHdhaXRgIHdpbGwgYmxvY2sgdW50aWwgOm1ldGg6YHNldGAgaXMgY2FsbGVkIHRvIHNldCB0aGUgaW50ZXJuYWwKKyAgICAgIGZsYWcgdG8gdHJ1ZSBhZ2Fpbi4KKworICAgLi4gbWV0aG9kOjogaXNfc2V0KCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuCisKKyAgIC4uIG1ldGhvZDo6IHNldCgpCisKKyAgICAgIFNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byB0cnVlLiBBbGwgY29yb3V0aW5lcyB3YWl0aW5nIGZvciBpdCB0byBiZWNvbWUKKyAgICAgIHRydWUgYXJlIGF3YWtlbmVkLiBDb3JvdXRpbmUgdGhhdCBjYWxsIDptZXRoOmB3YWl0YCBvbmNlIHRoZSBmbGFnIGlzIHRydWUKKyAgICAgIHdpbGwgbm90IGJsb2NrIGF0IGFsbC4KKworICAgLi4gbWV0aG9kOjogd2FpdCgpCisKKyAgICAgIEJsb2NrIHVudGlsIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuCisKKyAgICAgIElmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUgb24gZW50cnksIHJldHVybiBgYFRydWVgYCBpbW1lZGlhdGVseS4KKyAgICAgIE90aGVyd2lzZSwgYmxvY2sgdW50aWwgYW5vdGhlciBjb3JvdXRpbmUgY2FsbHMgOm1ldGg6YHNldGAgdG8gc2V0IHRoZQorICAgICAgZmxhZyB0byB0cnVlLCB0aGVuIHJldHVybiBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisKK0NvbmRpdGlvbgorXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogQ29uZGl0aW9uKGxvY2s9Tm9uZSwgXCosIGxvb3A9Tm9uZSkKKworICAgQSBDb25kaXRpb24gaW1wbGVtZW50YXRpb24sIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IHRvCisgICA6Y2xhc3M6YHRocmVhZGluZy5Db25kaXRpb25gLgorCisgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgY29uZGl0aW9uIHZhcmlhYmxlIG9iamVjdHMuIEEgY29uZGl0aW9uIHZhcmlhYmxlCisgICBhbGxvd3Mgb25lIG9yIG1vcmUgY29yb3V0aW5lcyB0byB3YWl0IHVudGlsIHRoZXkgYXJlIG5vdGlmaWVkIGJ5IGFub3RoZXIKKyAgIGNvcm91dGluZS4KKworICAgSWYgdGhlICpsb2NrKiBhcmd1bWVudCBpcyBnaXZlbiBhbmQgbm90IGBgTm9uZWBgLCBpdCBtdXN0IGJlIGEgOmNsYXNzOmBMb2NrYAorICAgb2JqZWN0LCBhbmQgaXQgaXMgdXNlZCBhcyB0aGUgdW5kZXJseWluZyBsb2NrLiAgT3RoZXJ3aXNlLAorICAgYSBuZXcgOmNsYXNzOmBMb2NrYCBvYmplY3QgaXMgY3JlYXRlZCBhbmQgdXNlZCBhcyB0aGUgdW5kZXJseWluZyBsb2NrLgorCisgICAuLiBtZXRob2Q6OiBhY3F1aXJlKCkKKworICAgICAgQWNxdWlyZSB0aGUgdW5kZXJseWluZyBsb2NrLgorCisgICAgICBUaGlzIG1ldGhvZCBibG9ja3MgdW50aWwgdGhlIGxvY2sgaXMgdW5sb2NrZWQsIHRoZW4gc2V0cyBpdCB0byBsb2NrZWQgYW5kCisgICAgICByZXR1cm5zIGBgVHJ1ZWBgLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IG5vdGlmeShuPTEpCisKKyAgICAgIEJ5IGRlZmF1bHQsIHdha2UgdXAgb25lIGNvcm91dGluZSB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLCBpZiBhbnkuCisgICAgICBJZiB0aGUgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzCisgICAgICBjYWxsZWQsIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKyAgICAgIFRoaXMgbWV0aG9kIHdha2VzIHVwIGF0IG1vc3QgKm4qIG9mIHRoZSBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIHRoZQorICAgICAgY29uZGl0aW9uIHZhcmlhYmxlOyBpdCBpcyBhIG5vLW9wIGlmIG5vIGNvcm91dGluZXMgYXJlIHdhaXRpbmcuCisKKyAgICAgIC4uIG5vdGU6OgorCisgICAgICAgICBBbiBhd2FrZW5lZCBjb3JvdXRpbmUgZG9lcyBub3QgYWN0dWFsbHkgcmV0dXJuIGZyb20gaXRzIDptZXRoOmB3YWl0YAorICAgICAgICAgY2FsbCB1bnRpbCBpdCBjYW4gcmVhY3F1aXJlIHRoZSBsb2NrLiBTaW5jZSA6bWV0aDpgbm90aWZ5YCBkb2VzIG5vdAorICAgICAgICAgcmVsZWFzZSB0aGUgbG9jaywgaXRzIGNhbGxlciBzaG91bGQuCisKKyAgIC4uIG1ldGhvZDo6IGxvY2tlZCgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgdW5kZXJseWluZyBsb2NrIGlzIGFjcXVpcmVkLgorCisgICAuLiBtZXRob2Q6OiBub3RpZnlfYWxsKCkKKworICAgICAgV2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLiBUaGlzIG1ldGhvZCBhY3RzIGxpa2UKKyAgICAgIDptZXRoOmBub3RpZnlgLCBidXQgd2FrZXMgdXAgYWxsIHdhaXRpbmcgdGhyZWFkcyBpbnN0ZWFkIG9mIG9uZS4gSWYgdGhlCisgICAgICBjYWxsaW5nIHRocmVhZCBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBhCisgICAgICA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworICAgLi4gbWV0aG9kOjogcmVsZWFzZSgpCisKKyAgICAgIFJlbGVhc2UgdGhlIHVuZGVybHlpbmcgbG9jay4KKworICAgICAgV2hlbiB0aGUgbG9jayBpcyBsb2NrZWQsIHJlc2V0IGl0IHRvIHVubG9ja2VkLCBhbmQgcmV0dXJuLiBJZiBhbnkgb3RoZXIKKyAgICAgIGNvcm91dGluZXMgYXJlIGJsb2NrZWQgd2FpdGluZyBmb3IgdGhlIGxvY2sgdG8gYmVjb21lIHVubG9ja2VkLCBhbGxvdworICAgICAgZXhhY3RseSBvbmUgb2YgdGhlbSB0byBwcm9jZWVkLgorCisgICAgICBXaGVuIGludm9rZWQgb24gYW4gdW5sb2NrZWQgbG9jaywgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworICAgICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorCisgICAuLiBtZXRob2Q6OiB3YWl0KCkKKworICAgICAgV2FpdCB1bnRpbCBub3RpZmllZC4KKworICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZCBpcworICAgICAgY2FsbGVkLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICBUaGlzIG1ldGhvZCByZWxlYXNlcyB0aGUgdW5kZXJseWluZyBsb2NrLCBhbmQgdGhlbiBibG9ja3MgdW50aWwgaXQgaXMKKyAgICAgIGF3YWtlbmVkIGJ5IGEgOm1ldGg6YG5vdGlmeWAgb3IgOm1ldGg6YG5vdGlmeV9hbGxgIGNhbGwgZm9yIHRoZSBzYW1lCisgICAgICBjb25kaXRpb24gdmFyaWFibGUgaW4gYW5vdGhlciBjb3JvdXRpbmUuICBPbmNlIGF3YWtlbmVkLCBpdCByZS1hY3F1aXJlcworICAgICAgdGhlIGxvY2sgYW5kIHJldHVybnMgYGBUcnVlYGAuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogd2FpdF9mb3IocHJlZGljYXRlKQorCisgICAgICBXYWl0IHVudGlsIGEgcHJlZGljYXRlIGJlY29tZXMgdHJ1ZS4KKworICAgICAgVGhlIHByZWRpY2F0ZSBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCByZXN1bHQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhCisgICAgICBib29sZWFuIHZhbHVlLiBUaGUgZmluYWwgcHJlZGljYXRlIHZhbHVlIGlzIHRoZSByZXR1cm4gdmFsdWUuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworCitTZW1hcGhvcmVzCistLS0tLS0tLS0tCisKK1NlbWFwaG9yZQorXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogU2VtYXBob3JlKHZhbHVlPTEsIFwqLCBsb29wPU5vbmUpCisKKyAgIEEgU2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorCisgICBBIHNlbWFwaG9yZSBtYW5hZ2VzIGFuIGludGVybmFsIGNvdW50ZXIgd2hpY2ggaXMgZGVjcmVtZW50ZWQgYnkgZWFjaAorICAgOm1ldGg6YGFjcXVpcmVgIGNhbGwgYW5kIGluY3JlbWVudGVkIGJ5IGVhY2ggOm1ldGg6YHJlbGVhc2VgIGNhbGwuIFRoZQorICAgY291bnRlciBjYW4gbmV2ZXIgZ28gYmVsb3cgemVybzsgd2hlbiA6bWV0aDpgYWNxdWlyZWAgZmluZHMgdGhhdCBpdCBpcyB6ZXJvLAorICAgaXQgYmxvY2tzLCB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgdGhyZWFkIGNhbGxzIDptZXRoOmByZWxlYXNlYC4KKworICAgU2VtYXBob3JlcyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4KKworICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50IGdpdmVzIHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgaW50ZXJuYWwgY291bnRlcjsgaXQKKyAgIGRlZmF1bHRzIHRvIGBgMWBgLiBJZiB0aGUgdmFsdWUgZ2l2ZW4gaXMgbGVzcyB0aGFuIGBgMGBgLCA6ZXhjOmBWYWx1ZUVycm9yYAorICAgaXMgcmFpc2VkLgorCisgICAuLiBtZXRob2Q6OiBhY3F1aXJlKCkKKworICAgICAgQWNxdWlyZSBhIHNlbWFwaG9yZS4KKworICAgICAgSWYgdGhlIGludGVybmFsIGNvdW50ZXIgaXMgbGFyZ2VyIHRoYW4gemVybyBvbiBlbnRyeSwgZGVjcmVtZW50IGl0IGJ5IG9uZQorICAgICAgYW5kIHJldHVybiBgYFRydWVgYCBpbW1lZGlhdGVseS4gIElmIGl0IGlzIHplcm8gb24gZW50cnksIGJsb2NrLCB3YWl0aW5nCisgICAgICB1bnRpbCBzb21lIG90aGVyIGNvcm91dGluZSBoYXMgY2FsbGVkIDptZXRoOmByZWxlYXNlYCB0byBtYWtlIGl0IGxhcmdlcgorICAgICAgdGhhbiBgYDBgYCwgYW5kIHRoZW4gcmV0dXJuIGBgVHJ1ZWBgLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IGxvY2tlZCgpCisKKyAgICAgIFJldHVybnMgYGBUcnVlYGAgaWYgc2VtYXBob3JlIGNhbiBub3QgYmUgYWNxdWlyZWQgaW1tZWRpYXRlbHkuCisKKyAgIC4uIG1ldGhvZDo6IHJlbGVhc2UoKQorCisgICAgICBSZWxlYXNlIGEgc2VtYXBob3JlLCBpbmNyZW1lbnRpbmcgdGhlIGludGVybmFsIGNvdW50ZXIgYnkgb25lLiBXaGVuIGl0CisgICAgICB3YXMgemVybyBvbiBlbnRyeSBhbmQgYW5vdGhlciBjb3JvdXRpbmUgaXMgd2FpdGluZyBmb3IgaXQgdG8gYmVjb21lCisgICAgICBsYXJnZXIgdGhhbiB6ZXJvIGFnYWluLCB3YWtlIHVwIHRoYXQgY29yb3V0aW5lLgorCisKK0JvdW5kZWRTZW1hcGhvcmUKK15eXl5eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlPTEsIFwqLCBsb29wPU5vbmUpCisKKyAgICBBIGJvdW5kZWQgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLiBJbmhlcml0IGZyb20gOmNsYXNzOmBTZW1hcGhvcmVgLgorCisgICAgVGhpcyByYWlzZXMgOmV4YzpgVmFsdWVFcnJvcmAgaW4gOm1ldGg6YH5TZW1hcGhvcmUucmVsZWFzZWAgaWYgaXQgd291bGQKKyAgICBpbmNyZWFzZSB0aGUgdmFsdWUgYWJvdmUgdGhlIGluaXRpYWwgdmFsdWUuCisKKworUXVldWVzCistLS0tLS0KKworUXVldWUKK15eXl5eCisKKy4uIGNsYXNzOjogUXVldWUobWF4c2l6ZT0wLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIHF1ZXVlLCB1c2VmdWwgZm9yIGNvb3JkaW5hdGluZyBwcm9kdWNlciBhbmQgY29uc3VtZXIgY29yb3V0aW5lcy4KKworICAgSWYgKm1heHNpemUqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCB0aGUgcXVldWUgc2l6ZSBpcyBpbmZpbml0ZS4gSWYKKyAgIGl0IGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGBgMGBgLCB0aGVuIGBgeWllbGQgZnJvbSBwdXQoKWBgIHdpbGwgYmxvY2sKKyAgIHdoZW4gdGhlIHF1ZXVlIHJlYWNoZXMgKm1heHNpemUqLCB1bnRpbCBhbiBpdGVtIGlzIHJlbW92ZWQgYnkgOm1ldGg6YGdldGAuCisKKyAgIFVubGlrZSB0aGUgc3RhbmRhcmQgbGlicmFyeSA6bW9kOmBxdWV1ZWAsIHlvdSBjYW4gcmVsaWFibHkga25vdyB0aGlzIFF1ZXVlJ3MKKyAgIHNpemUgd2l0aCA6bWV0aDpgcXNpemVgLCBzaW5jZSB5b3VyIHNpbmdsZS10aHJlYWRlZCBhc3luY2lvIGFwcGxpY2F0aW9uIHdvbid0CisgICBiZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIGNhbGxpbmcgOm1ldGg6YHFzaXplYCBhbmQgZG9pbmcgYW4gb3BlcmF0aW9uIG9uIHRoZQorICAgUXVldWUuCisKKyAgIC4uIG1ldGhvZDo6IGVtcHR5KCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgLi4gbWV0aG9kOjogZnVsbCgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGVyZSBhcmUgbWF4c2l6ZSBpdGVtcyBpbiB0aGUgcXVldWUuCisKKyAgICAgIC4uIG5vdGU6OgorCisgICAgICAgICBJZiB0aGUgUXVldWUgd2FzIGluaXRpYWxpemVkIHdpdGggYGBtYXhzaXplPTBgYCAodGhlIGRlZmF1bHQpLCB0aGVuCisgICAgICAgICA6bWV0aDpgZnVsbCgpYCBpcyBuZXZlciBgYFRydWVgYC4KKworICAgLi4gbWV0aG9kOjogZ2V0KCkKKworICAgICAgUmVtb3ZlIGFuZCByZXR1cm4gYW4gaXRlbSBmcm9tIHRoZSBxdWV1ZS4KKworICAgICAgSWYgeW91IHlpZWxkIGZyb20gOm1ldGg6YGdldCgpYCwgd2FpdCB1bnRpbCBhIGl0ZW0gaXMgYXZhaWxhYmxlLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9ub3dhaXQoKQorCisgICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICBSZXR1cm4gYW4gaXRlbSBpZiBvbmUgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCBlbHNlIHJhaXNlCisgICAgICA6ZXhjOmBRdWV1ZUVtcHR5YC4KKworICAgLi4gbWV0aG9kOjogcHV0KGl0ZW0pCisKKyAgICAgIFB1dCBhbiBpdGVtIGludG8gdGhlIHF1ZXVlLgorCisgICAgICBJZiB5b3UgeWllbGQgZnJvbSBgYHB1dCgpYGAsIHdhaXQgdW50aWwgYSBmcmVlIHNsb3QgaXMgYXZhaWxhYmxlIGJlZm9yZQorICAgICAgYWRkaW5nIGl0ZW0uCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogcHV0X25vd2FpdChpdGVtKQorCisgICAgICBQdXQgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZSB3aXRob3V0IGJsb2NraW5nLgorCisgICAgICBJZiBubyBmcmVlIHNsb3QgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCByYWlzZSA6ZXhjOmBRdWV1ZUZ1bGxgLgorCisgICAuLiBtZXRob2Q6OiBxc2l6ZSgpCisKKyAgICAgIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgcXVldWUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG1heHNpemUKKworICAgICAgTnVtYmVyIG9mIGl0ZW1zIGFsbG93ZWQgaW4gdGhlIHF1ZXVlLgorCisKK1ByaW9yaXR5UXVldWUKK15eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBQcmlvcml0eVF1ZXVlCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBRdWV1ZWA7IHJldHJpZXZlcyBlbnRyaWVzIGluIHByaW9yaXR5IG9yZGVyIChsb3dlc3QKKyAgIGZpcnN0KS4KKworICAgRW50cmllcyBhcmUgdHlwaWNhbGx5IHR1cGxlcyBvZiB0aGUgZm9ybTogKHByaW9yaXR5IG51bWJlciwgZGF0YSkuCisKKworTGlmb1F1ZXVlCiteXl5eXl5eXl4KKworLi4gY2xhc3M6OiBMaWZvUXVldWUKKworICAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBRdWV1ZWAgdGhhdCByZXRyaWV2ZXMgbW9zdCByZWNlbnRseSBhZGRlZCBlbnRyaWVzCisgICAgZmlyc3QuCisKKworSm9pbmFibGVRdWV1ZQorXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IEpvaW5hYmxlUXVldWUKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFF1ZXVlYCB3aXRoIDptZXRoOmB0YXNrX2RvbmVgIGFuZCA6bWV0aDpgam9pbmAKKyAgIG1ldGhvZHMuCisKKyAgIC4uIG1ldGhvZDo6IGpvaW4oKQorCisgICAgICBCbG9jayB1bnRpbCBhbGwgaXRlbXMgaW4gdGhlIHF1ZXVlIGhhdmUgYmVlbiBnb3R0ZW4gYW5kIHByb2Nlc3NlZC4KKworICAgICAgVGhlIGNvdW50IG9mIHVuZmluaXNoZWQgdGFza3MgZ29lcyB1cCB3aGVuZXZlciBhbiBpdGVtIGlzIGFkZGVkIHRvIHRoZQorICAgICAgcXVldWUuIFRoZSBjb3VudCBnb2VzIGRvd24gd2hlbmV2ZXIgYSBjb25zdW1lciB0aHJlYWQgY2FsbHMKKyAgICAgIDptZXRoOmB0YXNrX2RvbmVgIHRvIGluZGljYXRlIHRoYXQgdGhlIGl0ZW0gd2FzIHJldHJpZXZlZCBhbmQgYWxsIHdvcmsgb24KKyAgICAgIGl0IGlzIGNvbXBsZXRlLiAgV2hlbiB0aGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBkcm9wcyB0byB6ZXJvLAorICAgICAgOm1ldGg6YGpvaW5gIHVuYmxvY2tzLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IHRhc2tfZG9uZSgpCisKKyAgICAgIEluZGljYXRlIHRoYXQgYSBmb3JtZXJseSBlbnF1ZXVlZCB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICBVc2VkIGJ5IHF1ZXVlIGNvbnN1bWVycy4gRm9yIGVhY2ggOm1ldGg6YH5RdWV1ZS5nZXRgIHVzZWQgdG8gZmV0Y2ggYSB0YXNrLCBhCisgICAgICBzdWJzZXF1ZW50IGNhbGwgdG8gOm1ldGg6YHRhc2tfZG9uZWAgdGVsbHMgdGhlIHF1ZXVlIHRoYXQgdGhlIHByb2Nlc3NpbmcKKyAgICAgIG9uIHRoZSB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICBJZiBhIDptZXRoOmBqb2luYCBpcyBjdXJyZW50bHkgYmxvY2tpbmcsIGl0IHdpbGwgcmVzdW1lIHdoZW4gYWxsIGl0ZW1zCisgICAgICBoYXZlIGJlZW4gcHJvY2Vzc2VkIChtZWFuaW5nIHRoYXQgYSA6bWV0aDpgdGFza19kb25lYCBjYWxsIHdhcyByZWNlaXZlZAorICAgICAgZm9yIGV2ZXJ5IGl0ZW0gdGhhdCBoYWQgYmVlbiA6bWV0aDpgflF1ZXVlLnB1dGAgaW50byB0aGUgcXVldWUpLgorCisgICAgICBSYWlzZXMgOmV4YzpgVmFsdWVFcnJvcmAgaWYgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiB0aGVyZSB3ZXJlIGl0ZW1zCisgICAgICBwbGFjZWQgaW4gdGhlIHF1ZXVlLgorCisKK0V4Y2VwdGlvbnMKK15eXl5eXl5eXl4KKworLi4gZXhjZXB0aW9uOjogUXVldWVFbXB0eQorCisgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gbm9uLWJsb2NraW5nIDptZXRoOmB+UXVldWUuZ2V0YCAob3IKKyAgIDptZXRoOmB+UXVldWUuZ2V0X25vd2FpdGApIGlzIGNhbGxlZAorICAgb24gYSA6Y2xhc3M6YFF1ZXVlYCBvYmplY3Qgd2hpY2ggaXMgZW1wdHkuCisKKworLi4gZXhjZXB0aW9uOjogUXVldWVGdWxsCisKKyAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBub24tYmxvY2tpbmcgOm1ldGg6YH5RdWV1ZS5wdXRgIChvcgorICAgOm1ldGg6YH5RdWV1ZS5wdXRfbm93YWl0YCkgaXMgY2FsbGVkCisgICBvbiBhIDpjbGFzczpgUXVldWVgIG9iamVjdCB3aGljaCBpcyBmdWxsLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby10YXNrLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tdGFzay5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlMGUzNAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tdGFzay5yc3QKQEAgLTAsMCArMSw2MTIgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKK1Rhc2tzIGFuZCBjb3JvdXRpbmVzCis9PT09PT09PT09PT09PT09PT09PQorCisuLiBfY29yb3V0aW5lOgorCitDb3JvdXRpbmVzCistLS0tLS0tLS0tCisKK0EgY29yb3V0aW5lIGlzIGEgZ2VuZXJhdG9yIHRoYXQgZm9sbG93cyBjZXJ0YWluIGNvbnZlbnRpb25zLiAgRm9yCitkb2N1bWVudGF0aW9uIHB1cnBvc2VzLCBhbGwgY29yb3V0aW5lcyBzaG91bGQgYmUgZGVjb3JhdGVkIHdpdGgKK2BgQGFzeW5jaW8uY29yb3V0aW5lYGAsIGJ1dCB0aGlzIGNhbm5vdCBiZSBzdHJpY3RseSBlbmZvcmNlZC4KKworQ29yb3V0aW5lcyB1c2UgdGhlIGBgeWllbGQgZnJvbWBgIHN5bnRheCBpbnRyb2R1Y2VkIGluIDpwZXA6YDM4MGAsCitpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgYHlpZWxkYGAgc3ludGF4LgorCitUaGUgd29yZCAiY29yb3V0aW5lIiwgbGlrZSB0aGUgd29yZCAiZ2VuZXJhdG9yIiwgaXMgdXNlZCBmb3IgdHdvCitkaWZmZXJlbnQgKHRob3VnaCByZWxhdGVkKSBjb25jZXB0czoKKworLSBUaGUgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEgY29yb3V0aW5lIChhIGZ1bmN0aW9uIGRlZmluaXRpb24KKyAgZGVjb3JhdGVkIHdpdGggYGBAYXN5bmNpby5jb3JvdXRpbmVgYCkuICBJZiBkaXNhbWJpZ3VhdGlvbiBpcyBuZWVkZWQKKyAgd2Ugd2lsbCBjYWxsIHRoaXMgYSAqY29yb3V0aW5lIGZ1bmN0aW9uKiAoOmZ1bmM6YGlzY29yb3V0aW5lZnVuY3Rpb25gCisgIHJldHVybnMgYGBUcnVlYGApLgorCistIFRoZSBvYmplY3Qgb2J0YWluZWQgYnkgY2FsbGluZyBhIGNvcm91dGluZSBmdW5jdGlvbi4gIFRoaXMgb2JqZWN0CisgIHJlcHJlc2VudHMgYSBjb21wdXRhdGlvbiBvciBhbiBJL08gb3BlcmF0aW9uICh1c3VhbGx5IGEgY29tYmluYXRpb24pCisgIHRoYXQgd2lsbCBjb21wbGV0ZSBldmVudHVhbGx5LiAgSWYgZGlzYW1iaWd1YXRpb24gaXMgbmVlZGVkIHdlIHdpbGwKKyAgY2FsbCBpdCBhICpjb3JvdXRpbmUgb2JqZWN0KiAoOmZ1bmM6YGlzY29yb3V0aW5lYCByZXR1cm5zIGBgVHJ1ZWBgKS4KKworVGhpbmdzIGEgY29yb3V0aW5lIGNhbiBkbzoKKworLSBgYHJlc3VsdCA9IHlpZWxkIGZyb20gZnV0dXJlYGAgLS0gc3VzcGVuZHMgdGhlIGNvcm91dGluZSB1bnRpbCB0aGUKKyAgZnV0dXJlIGlzIGRvbmUsIHRoZW4gcmV0dXJucyB0aGUgZnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZXMgYW4KKyAgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGJlIHByb3BhZ2F0ZWQuICAoSWYgdGhlIGZ1dHVyZSBpcyBjYW5jZWxsZWQsCisgIGl0IHdpbGwgcmFpc2UgYSBgYENhbmNlbGxlZEVycm9yYGAgZXhjZXB0aW9uLikgIE5vdGUgdGhhdCB0YXNrcyBhcmUKKyAgZnV0dXJlcywgYW5kIGV2ZXJ5dGhpbmcgc2FpZCBhYm91dCBmdXR1cmVzIGFsc28gYXBwbGllcyB0byB0YXNrcy4KKworLSBgYHJlc3VsdCA9IHlpZWxkIGZyb20gY29yb3V0aW5lYGAgLS0gd2FpdCBmb3IgYW5vdGhlciBjb3JvdXRpbmUgdG8KKyAgcHJvZHVjZSBhIHJlc3VsdCAob3IgcmFpc2UgYW4gZXhjZXB0aW9uLCB3aGljaCB3aWxsIGJlIHByb3BhZ2F0ZWQpLgorICBUaGUgYGBjb3JvdXRpbmVgYCBleHByZXNzaW9uIG11c3QgYmUgYSAqY2FsbCogdG8gYW5vdGhlciBjb3JvdXRpbmUuCisKKy0gYGByZXR1cm4gZXhwcmVzc2lvbmBgIC0tIHByb2R1Y2UgYSByZXN1bHQgdG8gdGhlIGNvcm91dGluZSB0aGF0IGlzCisgIHdhaXRpbmcgZm9yIHRoaXMgb25lIHVzaW5nIGBgeWllbGQgZnJvbWBgLgorCistIGBgcmFpc2UgZXhjZXB0aW9uYGAgLS0gcmFpc2UgYW4gZXhjZXB0aW9uIGluIHRoZSBjb3JvdXRpbmUgdGhhdCBpcworICB3YWl0aW5nIGZvciB0aGlzIG9uZSB1c2luZyBgYHlpZWxkIGZyb21gYC4KKworQ2FsbGluZyBhIGNvcm91dGluZSBkb2VzIG5vdCBzdGFydCBpdHMgY29kZSBydW5uaW5nIC0tIGl0IGlzIGp1c3QgYQorZ2VuZXJhdG9yLCBhbmQgdGhlIGNvcm91dGluZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGNhbGwgaXMgcmVhbGx5IGEKK2dlbmVyYXRvciBvYmplY3QsIHdoaWNoIGRvZXNuJ3QgZG8gYW55dGhpbmcgdW50aWwgeW91IGl0ZXJhdGUgb3ZlciBpdC4KK0luIHRoZSBjYXNlIG9mIGEgY29yb3V0aW5lIG9iamVjdCwgdGhlcmUgYXJlIHR3byBiYXNpYyB3YXlzIHRvIHN0YXJ0CitpdCBydW5uaW5nOiBjYWxsIGBgeWllbGQgZnJvbSBjb3JvdXRpbmVgYCBmcm9tIGFub3RoZXIgY29yb3V0aW5lCisoYXNzdW1pbmcgdGhlIG90aGVyIGNvcm91dGluZSBpcyBhbHJlYWR5IHJ1bm5pbmchKSwgb3Igc2NoZWR1bGUgaXRzIGV4ZWN1dGlvbgordXNpbmcgdGhlIDpmdW5jOmBhc3luY2AgZnVuY3Rpb24gb3IgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYAorbWV0aG9kLgorCisKK0Nvcm91dGluZXMgKGFuZCB0YXNrcykgY2FuIG9ubHkgcnVuIHdoZW4gdGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZy4KKworLi4gZGVjb3JhdG9yOjogY29yb3V0aW5lCisKKyAgICBEZWNvcmF0b3IgdG8gbWFyayBjb3JvdXRpbmVzLgorCisgICAgSWYgdGhlIGNvcm91dGluZSBpcyBub3QgeWllbGRlZCBmcm9tIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQsIGFuIGVycm9yCisgICAgbWVzc2FnZSBpcyBsb2dnZWQuIFNlZSA6cmVmOmBEZXRlY3QgY29yb3V0aW5lcyBuZXZlciBzY2hlZHVsZWQKKyAgICA8YXN5bmNpby1jb3JvdXRpbmUtbm90LXNjaGVkdWxlZD5gLgorCisuLiBub3RlOjoKKworICAgIEluIHRoaXMgZG9jdW1lbnRhdGlvbiwgc29tZSBtZXRob2RzIGFyZSBkb2N1bWVudGVkIGFzIGNvcm91dGluZXMsCisgICAgZXZlbiBpZiB0aGV5IGFyZSBwbGFpbiBQeXRob24gZnVuY3Rpb25zIHJldHVybmluZyBhIDpjbGFzczpgRnV0dXJlYC4KKyAgICBUaGlzIGlzIGludGVudGlvbmFsIHRvIGhhdmUgYSBmcmVlZG9tIG9mIHR3ZWFraW5nIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgZnV0dXJlLiBJZiBzdWNoIGEgZnVuY3Rpb24gaXMgbmVlZGVkIHRvIGJlCisgICAgdXNlZCBpbiBhIGNhbGxiYWNrLXN0eWxlIGNvZGUsIHdyYXAgaXRzIHJlc3VsdCB3aXRoIDpmdW5jOmBhc3luY2AuCisKKworLi4gX2FzeW5jaW8taGVsbG8td29ybGQtY29yb3V0aW5lOgorCitFeGFtcGxlOiAiSGVsbG8gV29ybGQiIGNvcm91dGluZQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworUHJpbnQgYGAiSGVsbG8gV29ybGQiYGAgZXZlcnkgdHdvIHNlY29uZHMgdXNpbmcgYSBjb3JvdXRpbmU6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBncmVldF9ldmVyeV90d29fc2Vjb25kcygpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgcHJpbnQoJ0hlbGxvIFdvcmxkJykKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgyKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ3JlZXRfZXZlcnlfdHdvX3NlY29uZHMoKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBsb29wLmNsb3NlKCkKKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YEhlbGxvIFdvcmxkIGV4YW1wbGUgdXNpbmcgYSBjYWxsYmFjayA8YXN5bmNpby1oZWxsby13b3JsZC1jYWxsYmFjaz5gLgorCisKK0V4YW1wbGU6IENoYWluIGNvcm91dGluZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSBjaGFpbmluZyBjb3JvdXRpbmVzOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgY29tcHV0ZSh4LCB5KToKKyAgICAgICAgcHJpbnQoIkNvbXB1dGUgJXMgKyAlcyAuLi4iICUgKHgsIHkpKQorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMS4wKQorICAgICAgICByZXR1cm4geCArIHkKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBwcmludF9zdW0oeCwgeSk6CisgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gY29tcHV0ZSh4LCB5KQorICAgICAgICBwcmludCgiJXMgKyAlcyA9ICVzIiAlICh4LCB5LCByZXN1bHQpKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByaW50X3N1bSgxLCAyKSkKKyAgICBsb29wLmNsb3NlKCkKKworYGBjb21wdXRlKClgYCBpcyBjaGFpbmVkIHRvIGBgcHJpbnRfc3VtKClgYDogYGBwcmludF9zdW0oKWBgIGNvcm91dGluZSB3YWl0cwordW50aWwgYGBjb21wdXRlKClgYCBpcyBjb21wbGV0ZWQgYmVmb3JlIHJldHVybmluZyBpdHMgcmVzdWx0LgorCitTZXF1ZW5jZSBkaWFncmFtIG9mIHRoZSBleGFtcGxlOgorCisuLiBpbWFnZTo6IHR1bGlwX2Nvcm8ucG5nCisgICA6YWxpZ246IGNlbnRlcgorCitUaGUgIlRhc2siIGlzIGNyZWF0ZWQgYnkgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAgbWV0aG9kCit3aGVuIGl0IGdldHMgYSBjb3JvdXRpbmUgb2JqZWN0IGluc3RlYWQgb2YgYSB0YXNrLgorCitUaGUgZGlhZ3JhbSBzaG93cyB0aGUgY29udHJvbCBmbG93LCBpdCBkb2VzIG5vdCBkZXNjcmliZSBleGFjdGx5IGhvdyB0aGluZ3MKK3dvcmsgaW50ZXJuYWxseS4gRm9yIGV4YW1wbGUsIHRoZSBzbGVlcCBjb3JvdXRpbmUgY3JlYXRlcyBhbiBpbnRlcm5hbCBmdXR1cmUKK3doaWNoIHVzZXMgOm1ldGg6YEJhc2VFdmVudExvb3AuY2FsbF9sYXRlcmAgdG8gd2FrZSB1cCB0aGUgdGFzayBpbiAxIHNlY29uZC4KKworCitJbnZhbGlkU3RhdGVFcnJvcgorLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gZXhjZXB0aW9uOjogSW52YWxpZFN0YXRlRXJyb3IKKworICAgVGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHN0YXRlLgorCisKK1RpbWVvdXRFcnJvcgorLS0tLS0tLS0tLS0tCisKKy4uIGV4Y2VwdGlvbjo6IFRpbWVvdXRFcnJvcgorCisgICBUaGUgb3BlcmF0aW9uIGV4Y2VlZGVkIHRoZSBnaXZlbiBkZWFkbGluZS4KKworLi4gbm90ZTo6CisKKyAgIFRoaXMgZXhjZXB0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBidWlsdGluIDpleGM6YFRpbWVvdXRFcnJvcmAgZXhjZXB0aW9uIQorCisKK0Z1dHVyZQorLS0tLS0tCisKKy4uIGNsYXNzOjogRnV0dXJlKFwqLCBsb29wPU5vbmUpCisKKyAgIFRoaXMgY2xhc3MgaXMgKmFsbW9zdCogY29tcGF0aWJsZSB3aXRoIDpjbGFzczpgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZWAuCisKKyAgIERpZmZlcmVuY2VzOgorCisgICAtIDptZXRoOmByZXN1bHRgIGFuZCA6bWV0aDpgZXhjZXB0aW9uYCBkbyBub3QgdGFrZSBhIHRpbWVvdXQgYXJndW1lbnQgYW5kCisgICAgIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBmdXR1cmUgaXNuJ3QgZG9uZSB5ZXQuCisKKyAgIC0gQ2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCA6bWV0aDpgYWRkX2RvbmVfY2FsbGJhY2tgIGFyZSBhbHdheXMgY2FsbGVkCisgICAgIHZpYSB0aGUgZXZlbnQgbG9vcCdzIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZWAuCisKKyAgIC0gVGhpcyBjbGFzcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSA6ZnVuYzpgfmNvbmN1cnJlbnQuZnV0dXJlcy53YWl0YCBhbmQKKyAgICAgOmZ1bmM6YH5jb25jdXJyZW50LmZ1dHVyZXMuYXNfY29tcGxldGVkYCBmdW5jdGlvbnMgaW4gdGhlCisgICAgIDptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AgcGFja2FnZS4KKworICAgLi4gbWV0aG9kOjogY2FuY2VsKCkKKworICAgICAgQ2FuY2VsIHRoZSBmdXR1cmUgYW5kIHNjaGVkdWxlIGNhbGxiYWNrcy4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgb3IgY2FuY2VsbGVkLCByZXR1cm4gYGBGYWxzZWBgLiBPdGhlcndpc2UsCisgICAgICBjaGFuZ2UgdGhlIGZ1dHVyZSdzIHN0YXRlIHRvIGNhbmNlbGxlZCwgc2NoZWR1bGUgdGhlIGNhbGxiYWNrcyBhbmQgcmV0dXJuCisgICAgICBgYFRydWVgYC4KKworICAgLi4gbWV0aG9kOjogY2FuY2VsbGVkKCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBmdXR1cmUgd2FzIGNhbmNlbGxlZC4KKworICAgLi4gbWV0aG9kOjogZG9uZSgpCisKKyAgICAgIFJldHVybiBUcnVlIGlmIHRoZSBmdXR1cmUgaXMgZG9uZS4KKworICAgICAgRG9uZSBtZWFucyBlaXRoZXIgdGhhdCBhIHJlc3VsdCAvIGV4Y2VwdGlvbiBhcmUgYXZhaWxhYmxlLCBvciB0aGF0IHRoZQorICAgICAgZnV0dXJlIHdhcyBjYW5jZWxsZWQuCisKKyAgIC4uIG1ldGhvZDo6IHJlc3VsdCgpCisKKyAgICAgIFJldHVybiB0aGUgcmVzdWx0IHRoaXMgZnV0dXJlIHJlcHJlc2VudHMuCisKKyAgICAgIElmIHRoZSBmdXR1cmUgaGFzIGJlZW4gY2FuY2VsbGVkLCByYWlzZXMgOmV4YzpgQ2FuY2VsbGVkRXJyb3JgLiBJZiB0aGUKKyAgICAgIGZ1dHVyZSdzIHJlc3VsdCBpc24ndCB5ZXQgYXZhaWxhYmxlLCByYWlzZXMgOmV4YzpgSW52YWxpZFN0YXRlRXJyb3JgLiBJZgorICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lIGFuZCBoYXMgYW4gZXhjZXB0aW9uIHNldCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkLgorCisgICAuLiBtZXRob2Q6OiBleGNlcHRpb24oKQorCisgICAgICBSZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBzZXQgb24gdGhpcyBmdXR1cmUuCisKKyAgICAgIFRoZSBleGNlcHRpb24gKG9yIGBgTm9uZWBgIGlmIG5vIGV4Y2VwdGlvbiB3YXMgc2V0KSBpcyByZXR1cm5lZCBvbmx5IGlmCisgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUuIElmIHRoZSBmdXR1cmUgaGFzIGJlZW4gY2FuY2VsbGVkLCByYWlzZXMKKyAgICAgIDpleGM6YENhbmNlbGxlZEVycm9yYC4gSWYgdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldCwgcmFpc2VzCisgICAgICA6ZXhjOmBJbnZhbGlkU3RhdGVFcnJvcmAuCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9kb25lX2NhbGxiYWNrKGZuKQorCisgICAgICBBZGQgYSBjYWxsYmFjayB0byBiZSBydW4gd2hlbiB0aGUgZnV0dXJlIGJlY29tZXMgZG9uZS4KKworICAgICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGZ1dHVyZSBvYmplY3QuIElmIHRoZQorICAgICAgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgaXMgY2FsbGVkLCB0aGUgY2FsbGJhY2sgaXMgc2NoZWR1bGVkCisgICAgICB3aXRoIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25gLgorCisgICAuLiBtZXRob2Q6OiByZW1vdmVfZG9uZV9jYWxsYmFjayhmbikKKworICAgICAgUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSBjYWxsYmFjayBmcm9tIHRoZSAiY2FsbCB3aGVuIGRvbmUiIGxpc3QuCisKKyAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBjYWxsYmFja3MgcmVtb3ZlZC4KKworICAgLi4gbWV0aG9kOjogc2V0X3Jlc3VsdChyZXN1bHQpCisKKyAgICAgIE1hcmsgdGhlIGZ1dHVyZSBkb25lIGFuZCBzZXQgaXRzIHJlc3VsdC4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgOmV4YzpgSW52YWxpZFN0YXRlRXJyb3JgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKworICAgICAgTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBhbiBleGNlcHRpb24uCisKKyAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCByYWlzZXMKKyAgICAgIDpleGM6YEludmFsaWRTdGF0ZUVycm9yYC4KKworCitFeGFtcGxlOiBGdXR1cmUgd2l0aCBydW5fdW50aWxfY29tcGxldGUoKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSBjb21iaW5pbmcgYSA6Y2xhc3M6YEZ1dHVyZWAgYW5kIGEgOnJlZjpgY29yb3V0aW5lIGZ1bmN0aW9uCis8Y29yb3V0aW5lPmA6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBzbG93X29wZXJhdGlvbihmdXR1cmUpOgorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMSkKKyAgICAgICAgZnV0dXJlLnNldF9yZXN1bHQoJ0Z1dHVyZSBpcyBkb25lIScpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgZnV0dXJlID0gYXN5bmNpby5GdXR1cmUoKQorICAgIGFzeW5jaW8uYXN5bmMoc2xvd19vcGVyYXRpb24oZnV0dXJlKSkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXR1cmUpCisgICAgcHJpbnQoZnV0dXJlLnJlc3VsdCgpKQorICAgIGxvb3AuY2xvc2UoKQorCitUaGUgY29yb3V0aW5lIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgY29tcHV0YXRpb24gKHdoaWNoIHRha2VzIDEgc2Vjb25kKQorYW5kIGl0IHN0b3JlcyB0aGUgcmVzdWx0IGludG8gdGhlIGZ1dHVyZS4gVGhlCis6bWV0aDpgfkJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYCBtZXRob2Qgd2FpdHMgZm9yIHRoZSBjb21wbGV0aW9uIG9mCit0aGUgZnV0dXJlLgorCisuLiBub3RlOjoKKyAgIFRoZSA6bWV0aDpgfkJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYCBtZXRob2QgdXNlcyBpbnRlcm5hbGx5IHRoZQorICAgOm1ldGg6YH5GdXR1cmUuYWRkX2RvbmVfY2FsbGJhY2tgIG1ldGhvZCB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBmdXR1cmUgaXMKKyAgIGRvbmUuCisKKworRXhhbXBsZTogRnV0dXJlIHdpdGggcnVuX2ZvcmV2ZXIoKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgcHJldmlvdXMgZXhhbXBsZSBjYW4gYmUgd3JpdHRlbiBkaWZmZXJlbnRseSB1c2luZyB0aGUKKzptZXRoOmBGdXR1cmUuYWRkX2RvbmVfY2FsbGJhY2tgIG1ldGhvZCB0byBkZXNjcmliZSBleHBsaWNpdGx5IHRoZSBjb250cm9sCitmbG93OjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgc2xvd19vcGVyYXRpb24oZnV0dXJlKToKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEpCisgICAgICAgIGZ1dHVyZS5zZXRfcmVzdWx0KCdGdXR1cmUgaXMgZG9uZSEnKQorCisgICAgZGVmIGdvdF9yZXN1bHQoZnV0dXJlKToKKyAgICAgICAgcHJpbnQoZnV0dXJlLnJlc3VsdCgpKQorICAgICAgICBsb29wLnN0b3AoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGZ1dHVyZSA9IGFzeW5jaW8uRnV0dXJlKCkKKyAgICBhc3luY2lvLmFzeW5jKHNsb3dfb3BlcmF0aW9uKGZ1dHVyZSkpCisgICAgZnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrKGdvdF9yZXN1bHQpCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBsb29wLmNsb3NlKCkKKworSW4gdGhpcyBleGFtcGxlLCB0aGUgZnV0dXJlIGlzIHJlc3BvbnNpYmxlIHRvIGRpc3BsYXkgdGhlIHJlc3VsdCBhbmQgdG8gc3RvcAordGhlIGxvb3AuCisKKy4uIG5vdGU6OgorICAgVGhlICJzbG93X29wZXJhdGlvbiIgY29yb3V0aW5lIG9iamVjdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50IGxvb3AKKyAgIHN0YXJ0cyBydW5uaW5nLCBzbyBpdCBpcyBwb3NzaWJsZSB0byBhZGQgYSAiZG9uZSBjYWxsYmFjayIgdG8gdGhlIGZ1dHVyZQorICAgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhc2sgc2NoZWR1bGluZyB0aGUgY29yb3V0aW5lIG9iamVjdC4KKworCisKK1Rhc2sKKy0tLS0KKworLi4gY2xhc3M6OiBUYXNrKGNvcm8sIFwqLCBsb29wPU5vbmUpCisKKyAgIFNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gOiB3cmFwIGl0IGluIGEKKyAgIGZ1dHVyZS4gQSB0YXNrIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBGdXR1cmVgLgorCisgICBBIHRhc2sgaXMgcmVzcG9uc2libGUgdG8gZXhlY3V0ZSBhIGNvcm91dGluZSBvYmplY3QgaW4gYW4gZXZlbnQgbG9vcC4gIElmCisgICB0aGUgd3JhcHBlZCBjb3JvdXRpbmUgeWllbGRzIGZyb20gYSBmdXR1cmUsIHRoZSB0YXNrIHN1c3BlbmRzIHRoZSBleGVjdXRpb24KKyAgIG9mIHRoZSB3cmFwcGVkIGNvcm91dGluZSBhbmQgd2FpdHMgZm9yIHRoZSBjb21wbGV0aXRpb24gb2YgdGhlIGZ1dHVyZS4gV2hlbgorICAgdGhlIGZ1dHVyZSBpcyBkb25lLCB0aGUgZXhlY3V0aW9uIG9mIHRoZSB3cmFwcGVkIGNvcm91dGluZSByZXN0YXJ0cyB3aXRoIHRoZQorICAgcmVzdWx0IG9yIHRoZSBleGNlcHRpb24gb2YgdGhlIGZ1dHVyZS4KKworICAgRXZlbnQgbG9vcHMgdXNlIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmc6IGFuIGV2ZW50IGxvb3Agb25seSBydW5zIG9uZSB0YXNrIGF0CisgICB0aGUgc2FtZSB0aW1lLiBPdGhlciB0YXNrcyBtYXkgcnVuIGluIHBhcmFsbGVsIGlmIG90aGVyIGV2ZW50IGxvb3BzIGFyZQorICAgcnVubmluZyBpbiBkaWZmZXJlbnQgdGhyZWFkcy4gV2hpbGUgYSB0YXNrIHdhaXRzIGZvciB0aGUgY29tcGxldGlvbiBvZiBhCisgICBmdXR1cmUsIHRoZSBldmVudCBsb29wIGV4ZWN1dGVzIGEgbmV3IHRhc2suCisKKyAgIFRoZSBjYW5jZWxsYXRpb24gb2YgYSB0YXNrIGlzIGRpZmZlcmVudCB0aGFuIGNhbmNlbGxpbmcgYSBmdXR1cmUuIENhbGxpbmcKKyAgIDptZXRoOmBjYW5jZWxgIHdpbGwgdGhyb3cgYSA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCB0byB0aGUKKyAgIHdyYXBwZWQgY29yb3V0aW5lLiA6bWV0aDpgfkZ1dHVyZS5jYW5jZWxsZWRgIG9ubHkgcmV0dXJucyBgYFRydWVgYCBpZiB0aGUKKyAgIHdyYXBwZWQgY29yb3V0aW5lIGRpZCBub3QgY2F0Y2ggdGhlCisgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCBleGNlcHRpb24sIG9yIHJhaXNlZCBhCisgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCBleGNlcHRpb24uCisKKyAgIElmIGEgcGVuZGluZyB0YXNrIGlzIGRlc3Ryb3llZCwgdGhlIGV4ZWN1dGlvbiBvZiBpdHMgd3JhcHBlZCA6cmVmOmBjb3JvdXRpbmUKKyAgIDxjb3JvdXRpbmU+YCBkaWQgbm90IGNvbXBsZXRlLiBJdCBpcyBwcm9iYWJseSBhIGJ1ZyBhbmQgYSB3YXJuaW5nIGlzCisgICBsb2dnZWQ6IHNlZSA6cmVmOmBQZW5kaW5nIHRhc2sgZGVzdHJveWVkIDxhc3luY2lvLXBlbmRpbmctdGFzay1kZXN0cm95ZWQ+YC4KKworICAgRG9uJ3QgY3JlYXRlIGRpcmVjdGx5IDpjbGFzczpgVGFza2AgaW5zdGFuY2VzOiB1c2UgdGhlIDpmdW5jOmBhc3luY2AKKyAgIGZ1bmN0aW9uIG9yIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AgbWV0aG9kLgorCisgICAuLiBjbGFzc21ldGhvZDo6IGFsbF90YXNrcyhsb29wPU5vbmUpCisKKyAgICAgIFJldHVybiBhIHNldCBvZiBhbGwgdGFza3MgZm9yIGFuIGV2ZW50IGxvb3AuCisKKyAgICAgIEJ5IGRlZmF1bHQgYWxsIHRhc2tzIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGFyZSByZXR1cm5lZC4KKworICAgLi4gY2xhc3NtZXRob2Q6OiBjdXJyZW50X3Rhc2sobG9vcD1Ob25lKQorCisgICAgICBSZXR1cm4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgaW4gYW4gZXZlbnQgbG9vcCBvciBgYE5vbmVgYC4KKworICAgICAgQnkgZGVmYXVsdCB0aGUgY3VycmVudCB0YXNrIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGlzIHJldHVybmVkLgorCisgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZCB3aGVuIGNhbGxlZCBub3QgaW4gdGhlIGNvbnRleHQgb2YgYSA6Y2xhc3M6YFRhc2tgLgorCisgICAuLiBtZXRob2Q6OiBjYW5jZWwoKQorCisgICAgICBSZXF1ZXN0IHRoaXMgdGFzayB0byBjYW5jZWwgaXRzZWxmLgorCisgICAgICBUaGlzIGFycmFuZ2VzIGZvciBhIDpleGM6YH5jb25jdXJyZW50LmZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3JgIHRvIGJlCisgICAgICB0aHJvd24gaW50byB0aGUgd3JhcHBlZCBjb3JvdXRpbmUgb24gdGhlIG5leHQgY3ljbGUgdGhyb3VnaCB0aGUgZXZlbnQKKyAgICAgIGxvb3AuIFRoZSBjb3JvdXRpbmUgdGhlbiBoYXMgYSBjaGFuY2UgdG8gY2xlYW4gdXAgb3IgZXZlbiBkZW55IHRoZQorICAgICAgcmVxdWVzdCB1c2luZyB0cnkvZXhjZXB0L2ZpbmFsbHkuCisKKyAgICAgIENvbnRyYXJ5IHRvIDptZXRoOmBGdXR1cmUuY2FuY2VsYCwgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgdGFzaworICAgICAgd2lsbCBiZSBjYW5jZWxsZWQ6IHRoZSBleGNlcHRpb24gbWlnaHQgYmUgY2F1Z2h0IGFuZCBhY3RlZCB1cG9uLCBkZWxheWluZworICAgICAgY2FuY2VsbGF0aW9uIG9mIHRoZSB0YXNrIG9yIHByZXZlbnRpbmcgaXQgY29tcGxldGVseS4gVGhlIHRhc2sgbWF5IGFsc28KKyAgICAgIHJldHVybiBhIHZhbHVlIG9yIHJhaXNlIGEgZGlmZmVyZW50IGV4Y2VwdGlvbi4KKworICAgICAgSW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCA6bWV0aDpgfkZ1dHVyZS5jYW5jZWxsZWRgIHdpbGwKKyAgICAgIG5vdCByZXR1cm4gYGBUcnVlYGAgKHVubGVzcyB0aGUgdGFzayB3YXMgYWxyZWFkeSBjYW5jZWxsZWQpLiBBIHRhc2sgd2lsbAorICAgICAgYmUgbWFya2VkIGFzIGNhbmNlbGxlZCB3aGVuIHRoZSB3cmFwcGVkIGNvcm91dGluZSB0ZXJtaW5hdGVzIHdpdGggYQorICAgICAgOmV4YzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcmAgZXhjZXB0aW9uIChldmVuIGlmCisgICAgICA6bWV0aDpgY2FuY2VsYCB3YXMgbm90IGNhbGxlZCkuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9zdGFjayhcKiwgbGltaXQ9Tm9uZSkKKworICAgICAgUmV0dXJuIHRoZSBsaXN0IG9mIHN0YWNrIGZyYW1lcyBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICBJZiB0aGUgY29yb3V0aW5lIGlzIGFjdGl2ZSwgdGhpcyByZXR1cm5zIHRoZSBzdGFjayB3aGVyZSBpdCBpcyBzdXNwZW5kZWQuCisgICAgICBJZiB0aGUgY29yb3V0aW5lIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9yIHdhcyBjYW5jZWxsZWQsIHRoaXMKKyAgICAgIHJldHVybnMgYW4gZW1wdHkgbGlzdC4gIElmIHRoZSBjb3JvdXRpbmUgd2FzIHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLAorICAgICAgdGhpcyByZXR1cm5zIHRoZSBsaXN0IG9mIHRyYWNlYmFjayBmcmFtZXMuCisKKyAgICAgIFRoZSBmcmFtZXMgYXJlIGFsd2F5cyBvcmRlcmVkIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKworICAgICAgVGhlIG9wdGlvbmFsIGxpbWl0IGdpdmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdG8gcmV0dXJuOyBieQorICAgICAgZGVmYXVsdCBhbGwgYXZhaWxhYmxlIGZyYW1lcyBhcmUgcmV0dXJuZWQuICBJdHMgbWVhbmluZyBkaWZmZXJzIGRlcGVuZGluZworICAgICAgb24gd2hldGhlciBhIHN0YWNrIG9yIGEgdHJhY2ViYWNrIGlzIHJldHVybmVkOiB0aGUgbmV3ZXN0IGZyYW1lcyBvZiBhCisgICAgICBzdGFjayBhcmUgcmV0dXJuZWQsIGJ1dCB0aGUgb2xkZXN0IGZyYW1lcyBvZiBhIHRyYWNlYmFjayBhcmUgcmV0dXJuZWQuCisgICAgICAoVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZS4pCisKKyAgICAgIEZvciByZWFzb25zIGJleW9uZCBvdXIgY29udHJvbCwgb25seSBvbmUgc3RhY2sgZnJhbWUgaXMgcmV0dXJuZWQgZm9yIGEKKyAgICAgIHN1c3BlbmRlZCBjb3JvdXRpbmUuCisKKyAgIC4uIG1ldGhvZDo6IHByaW50X3N0YWNrKFwqLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpCisKKyAgICAgIFByaW50IHRoZSBzdGFjayBvciB0cmFjZWJhY2sgZm9yIHRoaXMgdGFzaydzIGNvcm91dGluZS4KKworICAgICAgVGhpcyBwcm9kdWNlcyBvdXRwdXQgc2ltaWxhciB0byB0aGF0IG9mIHRoZSB0cmFjZWJhY2sgbW9kdWxlLCBmb3IgdGhlCisgICAgICBmcmFtZXMgcmV0cmlldmVkIGJ5IGdldF9zdGFjaygpLiAgVGhlIGxpbWl0IGFyZ3VtZW50IGlzIHBhc3NlZCB0bworICAgICAgZ2V0X3N0YWNrKCkuICBUaGUgZmlsZSBhcmd1bWVudCBpcyBhbiBJL08gc3RyZWFtIHRvIHdoaWNoIHRoZSBvdXRwdXQKKyAgICAgIGdvZXM7IGJ5IGRlZmF1bHQgaXQgZ29lcyB0byBzeXMuc3RkZXJyLgorCisKK0V4YW1wbGU6IFBhcmFsbGVsIGV4ZWN1dGlvbiBvZiB0YXNrcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V4YW1wbGUgZXhlY3V0aW5nIDMgdGFza3MgKEEsIEIsIEMpIGluIHBhcmFsbGVsOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgZmFjdG9yaWFsKG5hbWUsIG51bWJlcik6CisgICAgICAgIGYgPSAxCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsIG51bWJlcisxKToKKyAgICAgICAgICAgIHByaW50KCJUYXNrICVzOiBDb21wdXRlIGZhY3RvcmlhbCglcykuLi4iICUgKG5hbWUsIGkpKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEpCisgICAgICAgICAgICBmICo9IGkKKyAgICAgICAgcHJpbnQoIlRhc2sgJXM6IGZhY3RvcmlhbCglcykgPSAlcyIgJSAobmFtZSwgbnVtYmVyLCBmKSkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICB0YXNrcyA9IFsKKyAgICAgICAgYXN5bmNpby5hc3luYyhmYWN0b3JpYWwoIkEiLCAyKSksCisgICAgICAgIGFzeW5jaW8uYXN5bmMoZmFjdG9yaWFsKCJCIiwgMykpLAorICAgICAgICBhc3luY2lvLmFzeW5jKGZhY3RvcmlhbCgiQyIsIDQpKV0KKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQodGFza3MpKQorICAgIGxvb3AuY2xvc2UoKQorCitPdXRwdXQ6OgorCisgICAgVGFzayBBOiBDb21wdXRlIGZhY3RvcmlhbCgyKS4uLgorICAgIFRhc2sgQjogQ29tcHV0ZSBmYWN0b3JpYWwoMikuLi4KKyAgICBUYXNrIEM6IENvbXB1dGUgZmFjdG9yaWFsKDIpLi4uCisgICAgVGFzayBBOiBmYWN0b3JpYWwoMikgPSAyCisgICAgVGFzayBCOiBDb21wdXRlIGZhY3RvcmlhbCgzKS4uLgorICAgIFRhc2sgQzogQ29tcHV0ZSBmYWN0b3JpYWwoMykuLi4KKyAgICBUYXNrIEI6IGZhY3RvcmlhbCgzKSA9IDYKKyAgICBUYXNrIEM6IENvbXB1dGUgZmFjdG9yaWFsKDQpLi4uCisgICAgVGFzayBDOiBmYWN0b3JpYWwoNCkgPSAyNAorCitBIHRhc2sgaXMgYXV0b21hdGljYWxseSBzY2hlZHVsZWQgZm9yIGV4ZWN1dGlvbiB3aGVuIGl0IGlzIGNyZWF0ZWQuIFRoZSBldmVudAorbG9vcCBzdG9wcyB3aGVuIGFsbCB0YXNrcyBhcmUgZG9uZS4KKworCitUYXNrIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0KKworLi4gbm90ZTo6CisKKyAgIEluIHRoZSBmdW5jdGlvbnMgYmVsb3csIHRoZSBvcHRpb25hbCAqbG9vcCogYXJndW1lbnQgYWxsb3dzIHRvIGV4cGxpY2l0bHkgc2V0CisgICB0aGUgZXZlbnQgbG9vcCBvYmplY3QgdXNlZCBieSB0aGUgdW5kZXJseWluZyB0YXNrIG9yIGNvcm91dGluZS4gIElmIGl0J3MKKyAgIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcCBpcyB1c2VkLgorCisuLiBmdW5jdGlvbjo6IGFzX2NvbXBsZXRlZChmcywgXCosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lKQorCisgICBSZXR1cm4gYW4gaXRlcmF0b3Igd2hvc2UgdmFsdWVzLCB3aGVuIHdhaXRlZCBmb3IsIGFyZSA6Y2xhc3M6YEZ1dHVyZWAKKyAgIGluc3RhbmNlcy4KKworICAgUmFpc2VzIDpleGM6YGFzeW5jaW8uVGltZW91dEVycm9yYCBpZiB0aGUgdGltZW91dCBvY2N1cnMgYmVmb3JlIGFsbCBGdXR1cmVzCisgICBhcmUgZG9uZS4KKworICAgRXhhbXBsZTo6CisKKyAgICAgICBmb3IgZiBpbiBhc19jb21wbGV0ZWQoZnMpOgorICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGYgICMgVGhlICd5aWVsZCBmcm9tJyBtYXkgcmFpc2UKKyAgICAgICAgICAgIyBVc2UgcmVzdWx0CisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgZnV0dXJlcyBgYGZgYCBhcmUgbm90IG5lY2Vzc2FyaWx5IG1lbWJlcnMgb2YgZnMuCisKKy4uIGZ1bmN0aW9uOjogYXN5bmMoY29yb19vcl9mdXR1cmUsIFwqLCBsb29wPU5vbmUpCisKKyAgIFdyYXAgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YCBpbiBhIGZ1dHVyZS4KKworICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgOmNsYXNzOmBGdXR1cmVgLCBpdCBpcyByZXR1cm5lZCBkaXJlY3RseS4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AgbWV0aG9kLgorCisuLiBmdW5jdGlvbjo6IGdhdGhlcihcKmNvcm9zX29yX2Z1dHVyZXMsIGxvb3A9Tm9uZSwgcmV0dXJuX2V4Y2VwdGlvbnM9RmFsc2UpCisKKyAgIFJldHVybiBhIGZ1dHVyZSBhZ2dyZWdhdGluZyByZXN1bHRzIGZyb20gdGhlIGdpdmVuIGNvcm91dGluZSBvYmplY3RzIG9yCisgICBmdXR1cmVzLgorCisgICBBbGwgZnV0dXJlcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGV2ZW50IGxvb3AuICBJZiBhbGwgdGhlIHRhc2tzIGFyZSBkb25lCisgICBzdWNjZXNzZnVsbHksIHRoZSByZXR1cm5lZCBmdXR1cmUncyByZXN1bHQgaXMgdGhlIGxpc3Qgb2YgcmVzdWx0cyAoaW4gdGhlCisgICBvcmRlciBvZiB0aGUgb3JpZ2luYWwgc2VxdWVuY2UsIG5vdCBuZWNlc3NhcmlseSB0aGUgb3JkZXIgb2YgcmVzdWx0cworICAgYXJyaXZhbCkuICBJZiAqcmV0dXJuX2V4Y2VwdGlvbnMqIGlzIFRydWUsIGV4Y2VwdGlvbnMgaW4gdGhlIHRhc2tzIGFyZQorICAgdHJlYXRlZCB0aGUgc2FtZSBhcyBzdWNjZXNzZnVsIHJlc3VsdHMsIGFuZCBnYXRoZXJlZCBpbiB0aGUgcmVzdWx0IGxpc3Q7CisgICBvdGhlcndpc2UsIHRoZSBmaXJzdCByYWlzZWQgZXhjZXB0aW9uIHdpbGwgYmUgaW1tZWRpYXRlbHkgcHJvcGFnYXRlZCB0byB0aGUKKyAgIHJldHVybmVkIGZ1dHVyZS4KKworICAgQ2FuY2VsbGF0aW9uOiBpZiB0aGUgb3V0ZXIgRnV0dXJlIGlzIGNhbmNlbGxlZCwgYWxsIGNoaWxkcmVuICh0aGF0IGhhdmUgbm90CisgICBjb21wbGV0ZWQgeWV0KSBhcmUgYWxzbyBjYW5jZWxsZWQuICBJZiBhbnkgY2hpbGQgaXMgY2FuY2VsbGVkLCB0aGlzIGlzCisgICB0cmVhdGVkIGFzIGlmIGl0IHJhaXNlZCA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCAtLSB0aGUKKyAgIG91dGVyIEZ1dHVyZSBpcyAqbm90KiBjYW5jZWxsZWQgaW4gdGhpcyBjYXNlLiAgKFRoaXMgaXMgdG8gcHJldmVudCB0aGUKKyAgIGNhbmNlbGxhdGlvbiBvZiBvbmUgY2hpbGQgdG8gY2F1c2Ugb3RoZXIgY2hpbGRyZW4gdG8gYmUgY2FuY2VsbGVkLikKKworLi4gZnVuY3Rpb246OiBpc2Nvcm91dGluZShvYmopCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiAqb2JqKiBpcyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IGlzY29yb3V0aW5lZnVuY3Rpb24ob2JqKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgKmZ1bmMqIGlzIGEgZGVjb3JhdGVkIDpyZWY6YGNvcm91dGluZSBmdW5jdGlvbgorICAgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IHNsZWVwKGRlbGF5LCByZXN1bHQ9Tm9uZSwgXCosIGxvb3A9Tm9uZSkKKworICAgQ3JlYXRlIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YCB0aGF0IGNvbXBsZXRlcyBhZnRlciBhIGdpdmVuCisgICB0aW1lIChpbiBzZWNvbmRzKS4gIElmICpyZXN1bHQqIGlzIHByb3ZpZGVkLCBpdCBpcyBwcm9kdWNlZCB0byB0aGUgY2FsbGVyCisgICB3aGVuIHRoZSBjb3JvdXRpbmUgY29tcGxldGVzLgorCisgICBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgc2xlZXAgZGVwZW5kcyBvbiB0aGUgOnJlZjpgZ3JhbnVsYXJpdHkgb2YgdGhlIGV2ZW50CisgICBsb29wIDxhc3luY2lvLWRlbGF5ZWQtY2FsbHM+YC4KKworLi4gZnVuY3Rpb246OiBzaGllbGQoYXJnLCBcKiwgbG9vcD1Ob25lKQorCisgICBXYWl0IGZvciBhIGZ1dHVyZSwgc2hpZWxkaW5nIGl0IGZyb20gY2FuY2VsbGF0aW9uLgorCisgICBUaGUgc3RhdGVtZW50OjoKKworICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc2hpZWxkKHNvbWV0aGluZygpKQorCisgICBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gdGhlIHN0YXRlbWVudDo6CisKKyAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNvbWV0aGluZygpCisKKyAgICpleGNlcHQqIHRoYXQgaWYgdGhlIGNvcm91dGluZSBjb250YWluaW5nIGl0IGlzIGNhbmNlbGxlZCwgdGhlIHRhc2sgcnVubmluZworICAgaW4gYGBzb21ldGhpbmcoKWBgIGlzIG5vdCBjYW5jZWxsZWQuICBGcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCisgICBgYHNvbWV0aGluZygpYGAsIHRoZSBjYW5jZWxsYXRpb24gZGlkIG5vdCBoYXBwZW4uICBCdXQgaXRzIGNhbGxlciBpcyBzdGlsbAorICAgY2FuY2VsbGVkLCBzbyB0aGUgeWllbGQtZnJvbSBleHByZXNzaW9uIHN0aWxsIHJhaXNlcworICAgOmV4YzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcmAuICBOb3RlOiBJZiBgYHNvbWV0aGluZygpYGAgaXMKKyAgIGNhbmNlbGxlZCBieSBvdGhlciBtZWFucyB0aGlzIHdpbGwgc3RpbGwgY2FuY2VsIGBgc2hpZWxkKClgYC4KKworICAgSWYgeW91IHdhbnQgdG8gY29tcGxldGVseSBpZ25vcmUgY2FuY2VsbGF0aW9uIChub3QgcmVjb21tZW5kZWQpIHlvdSBjYW4KKyAgIGNvbWJpbmUgYGBzaGllbGQoKWBgIHdpdGggYSB0cnkvZXhjZXB0IGNsYXVzZSwgYXMgZm9sbG93czo6CisKKyAgICAgICB0cnk6CisgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc2hpZWxkKHNvbWV0aGluZygpKQorICAgICAgIGV4Y2VwdCBDYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgcmVzID0gTm9uZQorCisuLiBmdW5jdGlvbjo6IHdhaXQoZnV0dXJlcywgXCosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lLCByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKQorCisgICBXYWl0IGZvciB0aGUgRnV0dXJlcyBhbmQgY29yb3V0aW5lIG9iamVjdHMgZ2l2ZW4gYnkgdGhlIHNlcXVlbmNlICpmdXR1cmVzKgorICAgdG8gY29tcGxldGUuICBDb3JvdXRpbmVzIHdpbGwgYmUgd3JhcHBlZCBpbiBUYXNrcy4gUmV0dXJucyB0d28gc2V0cyBvZgorICAgOmNsYXNzOmBGdXR1cmVgOiAoZG9uZSwgcGVuZGluZykuCisKKyAgIFRoZSBzZXF1ZW5jZSAqZnV0dXJlcyogbXVzdCBub3QgYmUgZW1wdHkuCisKKyAgICp0aW1lb3V0KiBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlCisgICByZXR1cm5pbmcuICAqdGltZW91dCogY2FuIGJlIGFuIGludCBvciBmbG9hdC4gIElmICp0aW1lb3V0KiBpcyBub3Qgc3BlY2lmaWVkCisgICBvciBgYE5vbmVgYCwgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIHdhaXQgdGltZS4KKworICAgKnJldHVybl93aGVuKiBpbmRpY2F0ZXMgd2hlbiB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4uICBJdCBtdXN0IGJlIG9uZSBvZgorICAgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgb2YgdGhlIDptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AgbW9kdWxlOgorCisgICAuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBDb25zdGFudCAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgOmNvbnN0OmBGSVJTVF9DT01QTEVURURgICAgIHwgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHdoZW4gYW55ICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdXR1cmUgZmluaXNoZXMgb3IgaXMgY2FuY2VsbGVkLiAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBGSVJTVF9FWENFUFRJT05gICAgIHwgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHdoZW4gYW55ICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdXR1cmUgZmluaXNoZXMgYnkgcmFpc2luZyBhbiAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4Y2VwdGlvbi4gIElmIG5vIGZ1dHVyZSByYWlzZXMgYW4gICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhjZXB0aW9uIHRoZW4gaXQgaXMgZXF1aXZhbGVudCB0byAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6Y29uc3Q6YEFMTF9DT01QTEVURURgLiAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBBTExfQ09NUExFVEVEYCAgICAgIHwgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHdoZW4gYWxsICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdXR1cmVzIGZpbmlzaCBvciBhcmUgY2FuY2VsbGVkLiAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIFVzYWdlOjoKKworICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoZnMpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGRvZXMgbm90IHJhaXNlIDpleGM6YGFzeW5jaW8uVGltZW91dEVycm9yYCEgRnV0dXJlcyB0aGF0IGFyZW4ndCBkb25lCisgICAgICB3aGVuIHRoZSB0aW1lb3V0IG9jY3VycyBhcmUgcmV0dXJuZWQgaW4gdGhlIHNlY29uZCBzZXQuCisKKworLi4gZnVuY3Rpb246OiB3YWl0X2ZvcihmdXQsIHRpbWVvdXQsIFwqLCBsb29wPU5vbmUpCisKKyAgIFdhaXQgZm9yIHRoZSBzaW5nbGUgOmNsYXNzOmBGdXR1cmVgIG9yIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gCisgICB0byBjb21wbGV0ZSB3aXRoIHRpbWVvdXQuIElmICp0aW1lb3V0KiBpcyBgYE5vbmVgYCwgYmxvY2sgdW50aWwgdGhlIGZ1dHVyZQorICAgY29tcGxldGVzLgorCisgICBDb3JvdXRpbmUgd2lsbCBiZSB3cmFwcGVkIGluIDpjbGFzczpgVGFza2AuCisKKyAgIFJldHVybnMgcmVzdWx0IG9mIHRoZSBGdXR1cmUgb3IgY29yb3V0aW5lLiAgV2hlbiBhIHRpbWVvdXQgb2NjdXJzLCBpdAorICAgY2FuY2VscyB0aGUgdGFzayBhbmQgcmFpc2VzIDpleGM6YGFzeW5jaW8uVGltZW91dEVycm9yYC4gVG8gYXZvaWQgdGhlIHRhc2sKKyAgIGNhbmNlbGxhdGlvbiwgd3JhcCBpdCBpbiA6ZnVuYzpgc2hpZWxkYC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAsIHVzYWdlOjoKKworICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0X2ZvcihmdXQsIDYwLjApCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8ucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxZDY1OQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8ucnN0CkBAIC0wLDAgKzEsNjcgQEAKKzptb2Q6YGFzeW5jaW9gIC0tIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBhc3luY2lvCisgICA6c3lub3BzaXM6IEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzLgorCisuLiBub3RlOjoKKworICAgVGhlIGFzeW5jaW8gcGFja2FnZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCisgICA6dGVybTpgcHJvdmlzaW9uYWwgYmFzaXMgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4gQmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBtb2R1bGUpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvYXN5bmNpby9gCisKKy0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGluZnJhc3RydWN0dXJlIGZvciB3cml0aW5nIHNpbmdsZS10aHJlYWRlZCBjb25jdXJyZW50Citjb2RlIHVzaW5nIGNvcm91dGluZXMsIG11bHRpcGxleGluZyBJL08gYWNjZXNzIG92ZXIgc29ja2V0cyBhbmQgb3RoZXIKK3Jlc291cmNlcywgcnVubmluZyBuZXR3b3JrIGNsaWVudHMgYW5kIHNlcnZlcnMsIGFuZCBvdGhlciByZWxhdGVkIHByaW1pdGl2ZXMuCitIZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBsaXN0IG9mIHRoZSBwYWNrYWdlIGNvbnRlbnRzOgorCisqIGEgcGx1Z2dhYmxlIDpyZWY6YGV2ZW50IGxvb3AgPGFzeW5jaW8tZXZlbnQtbG9vcD5gIHdpdGggdmFyaW91cyBzeXN0ZW0tc3BlY2lmaWMKKyAgaW1wbGVtZW50YXRpb25zOworCisqIDpyZWY6YHRyYW5zcG9ydCA8YXN5bmNpby10cmFuc3BvcnQ+YCBhbmQgOnJlZjpgcHJvdG9jb2wgPGFzeW5jaW8tcHJvdG9jb2w+YCBhYnN0cmFjdGlvbnMKKyAgKHNpbWlsYXIgdG8gdGhvc2UgaW4gYFR3aXN0ZWQgPGh0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8+YF8pOworCisqIGNvbmNyZXRlIHN1cHBvcnQgZm9yIFRDUCwgVURQLCBTU0wsIHN1YnByb2Nlc3MgcGlwZXMsIGRlbGF5ZWQgY2FsbHMsIGFuZAorICBvdGhlcnMgKHNvbWUgbWF5IGJlIHN5c3RlbS1kZXBlbmRlbnQpOworCisqIGEgOmNsYXNzOmBGdXR1cmVgIGNsYXNzIHRoYXQgbWltaWNzIHRoZSBvbmUgaW4gdGhlIDptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AKKyAgbW9kdWxlLCBidXQgYWRhcHRlZCBmb3IgdXNlIHdpdGggdGhlIGV2ZW50IGxvb3A7CisKKyogY29yb3V0aW5lcyBhbmQgdGFza3MgYmFzZWQgb24gYGB5aWVsZCBmcm9tYGAgKDpQRVA6YDM4MGApLCB0byBoZWxwIHdyaXRlCisgIGNvbmN1cnJlbnQgY29kZSBpbiBhIHNlcXVlbnRpYWwgZmFzaGlvbjsKKworKiBjYW5jZWxsYXRpb24gc3VwcG9ydCBmb3IgOmNsYXNzOmBGdXR1cmVgXHMgYW5kIGNvcm91dGluZXM7CisKKyogOnJlZjpgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgPGFzeW5jaW8tc3luYz5gIGZvciB1c2UgYmV0d2VlbiBjb3JvdXRpbmVzIGluCisgIGEgc2luZ2xlIHRocmVhZCwgbWltaWNraW5nIHRob3NlIGluIHRoZSA6bW9kOmB0aHJlYWRpbmdgIG1vZHVsZTsKKworKiBhbiBpbnRlcmZhY2UgZm9yIHBhc3Npbmcgd29yayBvZmYgdG8gYSB0aHJlYWRwb29sLCBmb3IgdGltZXMgd2hlbgorICB5b3UgYWJzb2x1dGVseSwgcG9zaXRpdmVseSBoYXZlIHRvIHVzZSBhIGxpYnJhcnkgdGhhdCBtYWtlcyBibG9ja2luZworICBJL08gY2FsbHMuCisKK1RhYmxlIG9mIGNvbnRlbnRzOgorCisuLiB0b2N0cmVlOjoKKyAgIDptYXhkZXB0aDogMworCisgICBhc3luY2lvLWV2ZW50bG9vcC5yc3QKKyAgIGFzeW5jaW8tZXZlbnRsb29wcy5yc3QKKyAgIGFzeW5jaW8tdGFzay5yc3QKKyAgIGFzeW5jaW8tcHJvdG9jb2wucnN0CisgICBhc3luY2lvLXN0cmVhbS5yc3QKKyAgIGFzeW5jaW8tc3VicHJvY2Vzcy5yc3QKKyAgIGFzeW5jaW8tc3luYy5yc3QKKyAgIGFzeW5jaW8tZGV2LnJzdAorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSB3YXMgZGVzaWduZWQgaW4gOlBFUDpgMzE1NmAuIEZvciBhCisgICBtb3RpdmF0aW9uYWwgcHJpbWVyIG9uIHRyYW5zcG9ydHMgYW5kIHByb3RvY29scywgc2VlIDpQRVA6YDMxNTNgLgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKaW5kZXggMTUyMWU3Mi4uOTE3ZDA0NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdApAQCAtMTMsNiArMTMsMTEgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAorLi4gbm90ZTo6CisKKyAgIFRoaXMgbW9kdWxlIGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4gIEZvciBuZXcgY29kZSB3ZQorICAgcmVjb21tZW5kIHVzaW5nIDptb2Q6YGFzeW5jaW9gLgorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgYmFzaWMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHdyaXRpbmcgYXN5bmNocm9ub3VzICBzb2NrZXQKIHNlcnZpY2UgY2xpZW50cyBhbmQgc2VydmVycy4KIApAQCAtMjExLDYgKzIxNiwxMCBAQAogICAgICAgZW1wdHkgYnl0ZXMgb2JqZWN0IGltcGxpZXMgdGhhdCB0aGUgY2hhbm5lbCBoYXMgYmVlbiBjbG9zZWQgZnJvbSB0aGUKICAgICAgIG90aGVyIGVuZC4KIAorICAgICAgTm90ZSB0aGF0IDptZXRoOmByZWN2YCBtYXkgcmFpc2UgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCAsIGV2ZW4gdGhvdWdoCisgICAgICA6ZnVuYzpgc2VsZWN0LnNlbGVjdGAgb3IgOmZ1bmM6YHNlbGVjdC5wb2xsYCBoYXMgcmVwb3J0ZWQgdGhlIHNvY2tldAorICAgICAgcmVhZHkgZm9yIHJlYWRpbmcuCisKIAogICAgLi4gbWV0aG9kOjogbGlzdGVuKGJhY2tsb2cpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0IGIvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKaW5kZXggZWRiMzg3MC4uY2UxMjdhYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKQEAgLTYsOSArNiwxNCBAQAogCiAKIFRoZSA6bW9kOmBhdWRpb29wYCBtb2R1bGUgY29udGFpbnMgc29tZSB1c2VmdWwgb3BlcmF0aW9ucyBvbiBzb3VuZCBmcmFnbWVudHMuCi1JdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2IG9yIDMyCi1iaXRzIHdpZGUsIHN0b3JlZCBpbiBieXRlcyBvYmplY3RzLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUgaW50ZWdlcnMsIHVubGVzcwotc3BlY2lmaWVkIG90aGVyd2lzZS4KK0l0IG9wZXJhdGVzIG9uIHNvdW5kIGZyYWdtZW50cyBjb25zaXN0aW5nIG9mIHNpZ25lZCBpbnRlZ2VyIHNhbXBsZXMgOCwgMTYsIDI0CitvciAzMiBiaXRzIHdpZGUsIHN0b3JlZCBpbiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUKK2ludGVnZXJzLCB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFN1cHBvcnQgZm9yIDI0LWJpdCBzYW1wbGVzIHdhcyBhZGRlZC4KKyAgIEFsbCBmdW5jdGlvbnMgbm93IGFjY2VwdCBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKyAgIFN0cmluZyBpbnB1dCBub3cgcmVzdWx0cyBpbiBhbiBpbW1lZGlhdGUgZXJyb3IuCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogSW50ZWwvRFZJIEFEUENNCkBAIC0zNSw3ICs0MCw3IEBACiAuLiBmdW5jdGlvbjo6IGFkZChmcmFnbWVudDEsIGZyYWdtZW50Miwgd2lkdGgpCiAKICAgIFJldHVybiBhIGZyYWdtZW50IHdoaWNoIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIHNhbXBsZXMgcGFzc2VkIGFzIHBhcmFtZXRlcnMuCi0gICAqd2lkdGgqIGlzIHRoZSBzYW1wbGUgd2lkdGggaW4gYnl0ZXMsIGVpdGhlciBgYDFgYCwgYGAyYGAgb3IgYGA0YGAuICBCb3RoCisgICAqd2lkdGgqIGlzIHRoZSBzYW1wbGUgd2lkdGggaW4gYnl0ZXMsIGVpdGhlciBgYDFgYCwgYGAyYGAsIGBgM2BgIG9yIGBgNGBgLiAgQm90aAogICAgZnJhZ21lbnRzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gIFNhbXBsZXMgYXJlIHRydW5jYXRlZCBpbiBjYXNlIG9mIG92ZXJmbG93LgogCiAKQEAgLTcwLDYgKzc1LDE0IEBACiAgICBzYW1wbGUuICBTYW1wbGVzIHdyYXAgYXJvdW5kIGluIGNhc2Ugb2Ygb3ZlcmZsb3cuCiAKIAorLi4gZnVuY3Rpb246OiBieXRlc3dhcChmcmFnbWVudCwgd2lkdGgpCisKKyAgICJCeXRlc3dhcCIgYWxsIHNhbXBsZXMgaW4gYSBmcmFnbWVudCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgZnJhZ21lbnQuCisgICBDb252ZXJ0cyBiaWctZW5kaWFuIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBjcm9zcyhmcmFnbWVudCwgd2lkdGgpCiAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHplcm8gY3Jvc3NpbmdzIGluIHRoZSBmcmFnbWVudCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuCkBAIC0xMzMsMTkgKzE0NiwxOSBAQAogCiAuLiBmdW5jdGlvbjo6IGxpbjJsaW4oZnJhZ21lbnQsIHdpZHRoLCBuZXd3aWR0aCkKIAotICAgQ29udmVydCBzYW1wbGVzIGJldHdlZW4gMS0sIDItIGFuZCA0LWJ5dGUgZm9ybWF0cy4KKyAgIENvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSwgMy0gYW5kIDQtYnl0ZSBmb3JtYXRzLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgSW4gc29tZSBhdWRpbyBmb3JtYXRzLCBzdWNoIGFzIC5XQVYgZmlsZXMsIDE2IGFuZCAzMiBiaXQgc2FtcGxlcyBhcmUKKyAgICAgIEluIHNvbWUgYXVkaW8gZm9ybWF0cywgc3VjaCBhcyAuV0FWIGZpbGVzLCAxNiwgMjQgYW5kIDMyIGJpdCBzYW1wbGVzIGFyZQogICAgICAgc2lnbmVkLCBidXQgOCBiaXQgc2FtcGxlcyBhcmUgdW5zaWduZWQuICBTbyB3aGVuIGNvbnZlcnRpbmcgdG8gOCBiaXQgd2lkZQogICAgICAgc2FtcGxlcyBmb3IgdGhlc2UgZm9ybWF0cywgeW91IG5lZWQgdG8gYWxzbyBhZGQgMTI4IHRvIHRoZSByZXN1bHQ6OgogCiAgICAgICAgICBuZXdfZnJhbWVzID0gYXVkaW9vcC5saW4ybGluKGZyYW1lcywgb2xkX3dpZHRoLCAxKQogICAgICAgICAgbmV3X2ZyYW1lcyA9IGF1ZGlvb3AuYmlhcyhuZXdfZnJhbWVzLCAxLCAxMjgpCiAKLSAgICAgIFRoZSBzYW1lLCBpbiByZXZlcnNlLCBoYXMgdG8gYmUgYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZnJvbSA4IHRvIDE2IG9yIDMyCi0gICAgICBiaXQgd2lkdGggc2FtcGxlcy4KKyAgICAgIFRoZSBzYW1lLCBpbiByZXZlcnNlLCBoYXMgdG8gYmUgYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZnJvbSA4IHRvIDE2LCAyNAorICAgICAgb3IgMzIgYml0IHdpZHRoIHNhbXBsZXMuCiAKIAogLi4gZnVuY3Rpb246OiBsaW4ydWxhdyhmcmFnbWVudCwgd2lkdGgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9iYXNlNjQucnN0IGIvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAppbmRleCBmMGQxMWIwLi4wMmI0ZDdiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKQEAgLTEsMzIgKzEsNDIgQEAKLTptb2Q6YGJhc2U2NGAgLS0tIFJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOm1vZDpgYmFzZTY0YCAtLS0gQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCwgQmFzZTg1IERhdGEgRW5jb2RpbmdzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogYmFzZTY0Ci0gICA6c3lub3BzaXM6IFJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzCisgICA6c3lub3BzaXM6IFJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzOworICAgICAgICAgICAgICBCYXNlODUgYW5kIEFzY2lpODUKIAogCiAuLiBpbmRleDo6CiAgICBwYWlyOiBiYXNlNjQ7IGVuY29kaW5nCiAgICBzaW5nbGU6IE1JTUU7IGJhc2U2NCBlbmNvZGluZwogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyBkYXRhIGVuY29kaW5nIGFuZCBkZWNvZGluZyBhcyBzcGVjaWZpZWQgaW4gOnJmYzpgMzU0OGAuCi1UaGlzIHN0YW5kYXJkIGRlZmluZXMgdGhlIEJhc2UxNiwgQmFzZTMyLCBhbmQgQmFzZTY0IGFsZ29yaXRobXMgZm9yIGVuY29kaW5nCi1hbmQgZGVjb2RpbmcgYXJiaXRyYXJ5IGJpbmFyeSBzdHJpbmdzIGludG8gQVNDSUktb25seSBieXRlIHN0cmluZ3MgdGhhdCBjYW4gYmUKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgZW5jb2RpbmcgYmluYXJ5IGRhdGEgdG8gcHJpbnRhYmxlCitBU0NJSSBjaGFyYWN0ZXJzIGFuZCBkZWNvZGluZyBzdWNoIGVuY29kaW5ncyBiYWNrIHRvIGJpbmFyeSBkYXRhLgorSXQgcHJvdmlkZXMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGZ1bmN0aW9ucyBmb3IgdGhlIGVuY29kaW5ncyBzcGVjaWZpZWQgaW4KK2luIDpyZmM6YDM1NDhgLCB3aGljaCBkZWZpbmVzIHRoZSBCYXNlMTYsIEJhc2UzMiwgYW5kIEJhc2U2NCBhbGdvcml0aG1zLAorYW5kIGZvciB0aGUgZGUtZmFjdG8gc3RhbmRhcmQgQXNjaWk4NSBhbmQgQmFzZTg1IGVuY29kaW5ncy4KKworVGhlIDpyZmM6YDM1NDhgIGVuY29kaW5ncyBhcmUgc3VpdGFibGUgZm9yIGVuY29kaW5nIGJpbmFyeSBkYXRhIHNvIHRoYXQgaXQgY2FuCiBzYWZlbHkgc2VudCBieSBlbWFpbCwgdXNlZCBhcyBwYXJ0cyBvZiBVUkxzLCBvciBpbmNsdWRlZCBhcyBwYXJ0IG9mIGFuIEhUVFAKIFBPU1QgcmVxdWVzdC4gIFRoZSBlbmNvZGluZyBhbGdvcml0aG0gaXMgbm90IHRoZSBzYW1lIGFzIHRoZQogOnByb2dyYW06YHV1ZW5jb2RlYCBwcm9ncmFtLgogCi1UaGVyZSBhcmUgdHdvIGludGVyZmFjZXMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuICBUaGUgbW9kZXJuIGludGVyZmFjZQotc3VwcG9ydHMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIEFTQ0lJIGJ5dGUgc3RyaW5nIG9iamVjdHMgdXNpbmcgYWxsIHRocmVlCi1hbHBoYWJldHMuIEFkZGl0aW9uYWxseSwgdGhlIGRlY29kaW5nIGZ1bmN0aW9ucyBvZiB0aGUgbW9kZXJuIGludGVyZmFjZSBhbHNvCi1hY2NlcHQgVW5pY29kZSBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSBBU0NJSSBjaGFyYWN0ZXJzLiBUaGUgbGVnYWN5IGludGVyZmFjZQotcHJvdmlkZXMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyB0byBhbmQgZnJvbSBmaWxlLWxpa2Ugb2JqZWN0cyBhcyB3ZWxsIGFzCi1ieXRlIHN0cmluZ3MsIGJ1dCBvbmx5IHVzaW5nIHRoZSBCYXNlNjQgc3RhbmRhcmQgYWxwaGFiZXQuCitUaGVyZSBhcmUgdHdvIDpyZmM6YDM1NDhgIGludGVyZmFjZXMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuICBUaGUgbW9kZXJuCitpbnRlcmZhY2Ugc3VwcG9ydHMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIEFTQ0lJIGJ5dGUgc3RyaW5nIG9iamVjdHMgdXNpbmcgYWxsCit0aHJlZSA6cmZjOmAzNTQ4YCBkZWZpbmVkIGFscGhhYmV0cyAobm9ybWFsLCBVUkwtc2FmZSwgYW5kIGZpbGVzeXN0ZW0tc2FmZSkuCitBZGRpdGlvbmFsbHksIHRoZSBkZWNvZGluZyBmdW5jdGlvbnMgb2YgdGhlIG1vZGVybiBpbnRlcmZhY2UgYWxzbyBhY2NlcHQKK1VuaWNvZGUgc3RyaW5ncyBjb250YWluaW5nIG9ubHkgQVNDSUkgY2hhcmFjdGVycy4gVGhlIGxlZ2FjeSBpbnRlcmZhY2UgcHJvdmlkZXMKK2ZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdG8gYW5kIGZyb20gZmlsZS1saWtlIG9iamVjdHMgYXMgd2VsbCBhcyBieXRlCitzdHJpbmdzLCBidXQgb25seSB1c2luZyB0aGUgQmFzZTY0IHN0YW5kYXJkIGFscGhhYmV0LgogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgQVNDSUktb25seSBVbmljb2RlIHN0cmluZ3MgYXJlIG5vdyBhY2NlcHRlZCBieSB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mCiAgICB0aGUgbW9kZXJuIGludGVyZmFjZS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQgYnkgYWxsCisgICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLiAgQXNjaWk4NS9CYXNlODUgc3VwcG9ydCBhZGRlZC4KKwogVGhlIG1vZGVybiBpbnRlcmZhY2UgcHJvdmlkZXM6CiAKIC4uIGZ1bmN0aW9uOjogYjY0ZW5jb2RlKHMsIGFsdGNoYXJzPU5vbmUpCkBAIC0xMjgsNiArMTM4LDc2IEBACiAgICBzdHJpbmcuCiAKIAorLi4gZnVuY3Rpb246OiBhODVlbmNvZGUocywgKiwgZm9sZHNwYWNlcz1GYWxzZSwgd3JhcGNvbD0wLCBwYWQ9RmFsc2UsIGFkb2JlPUZhbHNlKQorCisgICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBBc2NpaTg1LgorCisgICAqcyogaXMgdGhlIHN0cmluZyB0byBlbmNvZGUuIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAqZm9sZHNwYWNlcyogaXMgYW4gb3B0aW9uYWwgZmxhZyB0aGF0IHVzZXMgdGhlIHNwZWNpYWwgc2hvcnQgc2VxdWVuY2UgJ3knCisgICBpbnN0ZWFkIG9mIDQgY29uc2VjdXRpdmUgc3BhY2VzIChBU0NJSSAweDIwKSBhcyBzdXBwb3J0ZWQgYnkgJ2J0b2EnLiBUaGlzCisgICBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQXNjaWk4NSBlbmNvZGluZy4KKworICAgKndyYXBjb2wqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIG91dHB1dCBzaG91bGQgaGF2ZSBuZXdsaW5lICgnXG4nKQorICAgY2hhcmFjdGVycyBhZGRlZCB0byBpdC4gSWYgdGhpcyBpcyBub24temVybywgZWFjaCBvdXRwdXQgbGluZSB3aWxsIGJlCisgICBhdCBtb3N0IHRoaXMgbWFueSBjaGFyYWN0ZXJzIGxvbmcuCisKKyAgICpwYWQqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHN0cmluZyBpcyBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA0CisgICBiZWZvcmUgZW5jb2RpbmcuIE5vdGUgdGhhdCB0aGUgYGBidG9hYGAgaW1wbGVtZW50YXRpb24gYWx3YXlzIHBhZHMuCisKKyAgICphZG9iZSogY29udHJvbHMgd2hldGhlciB0aGUgZW5jb2RlZCBieXRlIHNlcXVlbmNlIGlzIGZyYW1lZCB3aXRoIGBgPH5gYAorICAgYW5kIGBgfj5gYCwgd2hpY2ggaXMgdXNlZCBieSB0aGUgQWRvYmUgaW1wbGVtZW50YXRpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogYTg1ZGVjb2RlKHMsICosIGZvbGRzcGFjZXM9RmFsc2UsIGFkb2JlPUZhbHNlLCBpZ25vcmVjaGFycz1iJyBcdFxuXHJcdicpCisKKyAgIERlY29kZSBhbiBBc2NpaTg1IGVuY29kZWQgYnl0ZSBzdHJpbmcuCisKKyAgICpzKiBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZGVjb2RlLgorCisgICAqZm9sZHNwYWNlcyogaXMgYSBmbGFnIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlICd5JyBzaG9ydCBzZXF1ZW5jZQorICAgc2hvdWxkIGJlIGFjY2VwdGVkIGFzIHNob3J0aGFuZCBmb3IgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApLgorICAgVGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQXNjaWk4NSBlbmNvZGluZy4KKworICAgKmFkb2JlKiBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyBpbiBBZG9iZSBBc2NpaTg1IGZvcm1hdAorICAgKGkuZS4gaXMgZnJhbWVkIHdpdGggPH4gYW5kIH4+KS4KKworICAgKmlnbm9yZWNoYXJzKiBzaG91bGQgYmUgYSBieXRlIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gaWdub3JlCisgICBmcm9tIHRoZSBpbnB1dC4gVGhpcyBzaG91bGQgb25seSBjb250YWluIHdoaXRlc3BhY2UgY2hhcmFjdGVycywgYW5kIGJ5CisgICBkZWZhdWx0IGNvbnRhaW5zIGFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gQVNDSUkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogYjg1ZW5jb2RlKHMsIHBhZD1GYWxzZSkKKworICAgRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgYmFzZTg1LCBhcyB1c2VkIGluIGUuZy4gZ2l0LXN0eWxlIGJpbmFyeQorICAgZGlmZnMuCisKKyAgIElmICpwYWQqIGlzIHRydWUsIHRoZSBpbnB1dCBpcyBwYWRkZWQgd2l0aCAiXFwwIiBzbyBpdHMgbGVuZ3RoIGlzIGEKKyAgIG11bHRpcGxlIG9mIDQgY2hhcmFjdGVycyBiZWZvcmUgZW5jb2RpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogYjg1ZGVjb2RlKGIpCisKKyAgIERlY29kZSBiYXNlODUtZW5jb2RlZCBieXRlIHN0cmluZy4gIFBhZGRpbmcgaXMgaW1wbGljaXRseSByZW1vdmVkLCBpZgorICAgbmVjZXNzYXJ5LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBub3RlOjoKKyAgIEJvdGggQmFzZTg1IGFuZCBBc2NpaTg1IGhhdmUgYW4gZXhwYW5zaW9uIGZhY3RvciBvZiA1IHRvIDQgKDUgQmFzZTg1IG9yCisgICBBc2NpaTg1IGNoYXJhY3RlcnMgY2FuIGVuY29kZSA0IGJpbmFyeSBieXRlcyksIHdoaWxlIHRoZSBiZXR0ZXIta25vd24KKyAgIEJhc2U2NCBoYXMgYW4gZXhwYW5zaW9uIGZhY3RvciBvZiA2IHRvIDQuICBUaGV5IGFyZSB0aGVyZWZvcmUgbW9yZQorICAgZWZmaWNpZW50IHdoZW4gc3BhY2UgZXhwZW5zaXZlLiAgVGhleSBkaWZmZXIgYnkgZGV0YWlscyBzdWNoIGFzIHRoZQorICAgY2hhcmFjdGVyIG1hcCB1c2VkIGZvciBlbmNvZGluZy4KKworCiBUaGUgbGVnYWN5IGludGVyZmFjZToKIAogLi4gZnVuY3Rpb246OiBkZWNvZGUoaW5wdXQsIG91dHB1dCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2J6Mi5yc3QgYi9Eb2MvbGlicmFyeS9iejIucnN0CmluZGV4IGI3OWJjY2QuLjQ4OGNkYTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2J6Mi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYnoyLnJzdApAQCAtMzcsOCArMzcsOCBAQAogICAgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAncidgYCwgYGAncmInYGAsIGBgJ3cnYGAsIGBgJ3diJ2BgLAotICAgYGAnYSdgYCwgb3IgYGAnYWInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwgYGAnd3QnYGAsIG9yIGBgJ2F0J2BgIGZvcgotICAgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KKyAgIGBgJ3gnYGAsIGBgJ3hiJ2BgLCBgYCdhJ2BgIG9yIGBgJ2FiJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsCisgICBgYCd3dCdgYCwgYGAneHQnYGAsIG9yIGBgJ2F0J2BgIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgogCiAgICBUaGUgKmNvbXByZXNzbGV2ZWwqIGFyZ3VtZW50IGlzIGFuIGludGVnZXIgZnJvbSAxIHRvIDksIGFzIGZvciB0aGUKICAgIDpjbGFzczpgQloyRmlsZWAgY29uc3RydWN0b3IuCkBAIC01NCw2ICs1NCw5IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgJ3gnYGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZSB3YXMgYWRkZWQuCisKIAogLi4gY2xhc3M6OiBCWjJGaWxlKGZpbGVuYW1lLCBtb2RlPSdyJywgYnVmZmVyaW5nPU5vbmUsIGNvbXByZXNzbGV2ZWw9OSkKIApAQCAtNjQsOCArNjcsOSBAQAogICAgYmUgdXNlZCB0byByZWFkIG9yIHdyaXRlIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgYCdyJ2BgIGZvciByZWFkaW5nIChkZWZhdWx0KSwgYGAndydgYCBmb3IKLSAgIG92ZXJ3cml0aW5nLCBvciBgYCdhJ2BgIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMKLSAgIGBgJ3JiJ2BgLCBgYCd3YidgYCwgYW5kIGBgJ2FiJ2BgIHJlc3BlY3RpdmVseS4KKyAgIG92ZXJ3cml0aW5nLCBgYCd4J2BgIGZvciBleGNsdXNpdmUgY3JlYXRpb24sIG9yIGBgJ2EnYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UKKyAgIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgYGAncmInYGAsIGBgJ3diJ2BgLCBgYCd4YidgYCBhbmQgYGAnYWInYGAKKyAgIHJlc3BlY3RpdmVseS4KIAogICAgSWYgKmZpbGVuYW1lKiBpcyBhIGZpbGUgb2JqZWN0IChyYXRoZXIgdGhhbiBhbiBhY3R1YWwgZmlsZSBuYW1lKSwgYSBtb2RlIG9mCiAgICBgYCd3J2BgIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlLCBhbmQgaXMgaW5zdGVhZCBlcXVpdmFsZW50IHRvIGBgJ2EnYGAuCkBAIC0xMTMsNiArMTE3LDkgQEAKICAgICAgIFRoZSBgYCdhJ2BgIChhcHBlbmQpIG1vZGUgd2FzIGFkZGVkLCBhbG9uZyB3aXRoIHN1cHBvcnQgZm9yIHJlYWRpbmcKICAgICAgIG11bHRpLXN0cmVhbSBmaWxlcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYCd4J2BgIChleGNsdXNpdmUgY3JlYXRpb24pIG1vZGUgd2FzIGFkZGVkLgorCiAKIEluY3JlbWVudGFsIChkZSljb21wcmVzc2lvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jZ2kucnN0IGIvRG9jL2xpYnJhcnkvY2dpLnJzdAppbmRleCBjNGU3YzYwLi5mYTEzMTQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jZ2kucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NnaS5yc3QKQEAgLTE0Miw5ICsxNDIsMTEgQEAKIG1ldGhvZCByZWFkcyB0aGUgZW50aXJlIGZpbGUgaW4gbWVtb3J5IGFzIGJ5dGVzLiAgVGhpcyBtYXkgbm90IGJlIHdoYXQgeW91CiB3YW50LiAgWW91IGNhbiB0ZXN0IGZvciBhbiB1cGxvYWRlZCBmaWxlIGJ5IHRlc3RpbmcgZWl0aGVyIHRoZQogOmF0dHI6YH5GaWVsZFN0b3JhZ2UuZmlsZW5hbWVgIGF0dHJpYnV0ZSBvciB0aGUgOmF0dHI6YH5GaWVsZFN0b3JhZ2UuZmlsZWAKLWF0dHJpYnV0ZS4gIFlvdSBjYW4gdGhlbiByZWFkIHRoZSBkYXRhIGF0IGxlaXN1cmUgZnJvbSB0aGUgOmF0dHI6YCFmaWxlYAotYXR0cmlidXRlICh0aGUgOmZ1bmM6YH5pby5SYXdJT0Jhc2UucmVhZGAgYW5kIDpmdW5jOmB+aW8uSU9CYXNlLnJlYWRsaW5lYAotbWV0aG9kcyB3aWxsIHJldHVybiBieXRlcyk6OgorYXR0cmlidXRlLiAgWW91IGNhbiB0aGVuIHJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgOmF0dHI6YCFmaWxlYAorYXR0cmlidXRlIGJlZm9yZSBpdCBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZCBhcyBwYXJ0IG9mIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gb2YKK3RoZSA6Y2xhc3M6YEZpZWxkU3RvcmFnZWAgaW5zdGFuY2UKKyh0aGUgOmZ1bmM6YH5pby5SYXdJT0Jhc2UucmVhZGAgYW5kIDpmdW5jOmB+aW8uSU9CYXNlLnJlYWRsaW5lYCBtZXRob2RzIHdpbGwKK3JldHVybiBieXRlcyk6OgogCiAgICBmaWxlaXRlbSA9IGZvcm1bInVzZXJmaWxlIl0KICAgIGlmIGZpbGVpdGVtLmZpbGU6CkBAIC0xNzYsNiArMTc4LDExIEBACiBBIGZvcm0gc3VibWl0dGVkIHZpYSBQT1NUIHRoYXQgYWxzbyBoYXMgYSBxdWVyeSBzdHJpbmcgd2lsbCBjb250YWluIGJvdGgKIDpjbGFzczpgRmllbGRTdG9yYWdlYCBhbmQgOmNsYXNzOmBNaW5pRmllbGRTdG9yYWdlYCBpdGVtcy4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSA6YXR0cjpgfkZpZWxkU3RvcmFnZS5maWxlYCBhdHRyaWJ1dGUgaXMgYXV0b21hdGljYWxseSBjbG9zZWQgdXBvbiB0aGUKKyAgIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiB0aGUgY3JlYXRpbmcgOmNsYXNzOmBGaWVsZFN0b3JhZ2VgIGluc3RhbmNlLgorCisKIEhpZ2hlciBMZXZlbCBJbnRlcmZhY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZS5yc3QgYi9Eb2MvbGlicmFyeS9jb2RlLnJzdAppbmRleCBlODY5MDA0Li41YjVkN2NjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2RlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlLnJzdApAQCAtMTMyLDEyICsxMzIsMTUgQEAKIAogLi4gbWV0aG9kOjogSW50ZXJhY3RpdmVDb25zb2xlLmludGVyYWN0KGJhbm5lcj1Ob25lKQogCi0gICBDbG9zZWx5IGVtdWxhdGUgdGhlIGludGVyYWN0aXZlIFB5dGhvbiBjb25zb2xlLiBUaGUgb3B0aW9uYWwgYmFubmVyIGFyZ3VtZW50CisgICBDbG9zZWx5IGVtdWxhdGUgdGhlIGludGVyYWN0aXZlIFB5dGhvbiBjb25zb2xlLiBUaGUgb3B0aW9uYWwgKmJhbm5lciogYXJndW1lbnQKICAgIHNwZWNpZnkgdGhlIGJhbm5lciB0byBwcmludCBiZWZvcmUgdGhlIGZpcnN0IGludGVyYWN0aW9uOyBieSBkZWZhdWx0IGl0IHByaW50cyBhCiAgICBiYW5uZXIgc2ltaWxhciB0byB0aGUgb25lIHByaW50ZWQgYnkgdGhlIHN0YW5kYXJkIFB5dGhvbiBpbnRlcnByZXRlciwgZm9sbG93ZWQKICAgIGJ5IHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjb25zb2xlIG9iamVjdCBpbiBwYXJlbnRoZXNlcyAoc28gYXMgbm90IHRvIGNvbmZ1c2UKICAgIHRoaXMgd2l0aCB0aGUgcmVhbCBpbnRlcnByZXRlciAtLSBzaW5jZSBpdCdzIHNvIGNsb3NlISkuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUbyBzdXBwcmVzcyBwcmludGluZyBhbnkgYmFubmVyLCBwYXNzIGFuIGVtcHR5IHN0cmluZy4KKwogCiAuLiBtZXRob2Q6OiBJbnRlcmFjdGl2ZUNvbnNvbGUucHVzaChsaW5lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2RlY3MucnN0IGIvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAppbmRleCAwMDlhZTI2Li5mYjNhZjNiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKQEAgLTIyLDkgKzIyLDEwIEBACiAKIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogZW5jb2RlKG9iaiwgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKQorLi4gZnVuY3Rpb246OiBlbmNvZGUob2JqLCBbZW5jb2RpbmdbLCBlcnJvcnNdXSkKIAotICAgRW5jb2RlcyAqb2JqKiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgKmVuY29kaW5nKi4KKyAgIEVuY29kZXMgKm9iaiogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yICplbmNvZGluZyouIFRoZSBkZWZhdWx0CisgICBlbmNvZGluZyBpcyBgYHV0Zi04YGAuCiAKICAgICpFcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgdGhlIGRlc2lyZWQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUKICAgIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBpcyBgYHN0cmljdGBgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UKQEAgLTMyLDkgKzMzLDEwIEBACiAgICA6ZXhjOmBVbmljb2RlRW5jb2RlRXJyb3JgKS4gUmVmZXIgdG8gOnJlZjpgY29kZWMtYmFzZS1jbGFzc2VzYCBmb3IgbW9yZQogICAgaW5mb3JtYXRpb24gb24gY29kZWMgZXJyb3IgaGFuZGxpbmcuCiAKLS4uIGZ1bmN0aW9uOjogZGVjb2RlKG9iaiwgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKQorLi4gZnVuY3Rpb246OiBkZWNvZGUob2JqLCBbZW5jb2RpbmdbLCBlcnJvcnNdXSkKIAotICAgRGVjb2RlcyAqb2JqKiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgKmVuY29kaW5nKi4KKyAgIERlY29kZXMgKm9iaiogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yICplbmNvZGluZyouIFRoZSBkZWZhdWx0CisgICBlbmNvZGluZyBpcyBgYHV0Zi04YGAuCiAKICAgICpFcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgdGhlIGRlc2lyZWQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUKICAgIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBpcyBgYHN0cmljdGBgIG1lYW5pbmcgdGhhdCBkZWNvZGluZyBlcnJvcnMgcmFpc2UKQEAgLTM2NSwxOCArMzY3LDIzIEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW4gOnBlcDpgMzgzYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1JbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBlcnJvciBoYW5kbGVycyBhcmUgc3BlY2lmaWMgdG8gYSBzaW5nbGUgY29kZWM6CitJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBlcnJvciBoYW5kbGVycyBhcmUgc3BlY2lmaWMgdG8gVW5pY29kZSBlbmNvZGluZworc2NoZW1lczoKIAotKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFZhbHVlICAgICAgICAgICAgIHwgQ29kZWMgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfGBgJ3N1cnJvZ2F0ZXBhc3MnYGB8IHV0Zi04ICAgfCBBbGxvdyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgb2Ygc3Vycm9nYXRlICB8Ci18ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGNvZGVzIGluIFVURi04LiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFZhbHVlICAgICAgICAgICAgIHwgQ29kZWMgICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfGBgJ3N1cnJvZ2F0ZXBhc3MnYGB8IHV0Zi04LCB1dGYtMTYsIHV0Zi0zMiwgfCBBbGxvdyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgb2Ygc3Vycm9nYXRlICB8Cit8ICAgICAgICAgICAgICAgICAgIHwgdXRmLTE2LWJlLCB1dGYtMTYtbGUsICB8IGNvZGVzIGluIGFsbCB0aGUgVW5pY29kZSBlbmNvZGluZyBzY2hlbWVzLnwKK3wgICAgICAgICAgICAgICAgICAgfCB1dGYtMzItYmUsIHV0Zi0zMi1sZSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogICAgVGhlIGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYCBhbmQgYGAnc3Vycm9nYXRlcGFzcydgYCBlcnJvciBoYW5kbGVycy4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBgYCdzdXJyb2dhdGVwYXNzJ2BgIGVycm9yIGhhbmRsZXJzIG5vdyB3b3JrcyB3aXRoIHV0Zi0xNlwqIGFuZCB1dGYtMzJcKiBjb2RlY3MuCisKIFRoZSBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMgY2FuIGJlIGV4dGVuZGVkIHZpYSA6bWV0aDpgcmVnaXN0ZXJfZXJyb3JgLgogCiAKQEAgLTk2Niw2ICs5NzMsMTAgQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AwMzcgICAgICAgICAgIHwgSUJNMDM3LCBJQk0wMzkgICAgICAgICAgICAgICAgIHwgRW5nbGlzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3AyNzMgICAgICAgICAgIHwgMjczLCBJQk0yNzMsIGNzSUJNMjczICAgICAgICAgIHwgR2VybWFuICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmFkZGVkOjogMy40ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A0MjQgICAgICAgICAgIHwgRUJDRElDLUNQLUhFLCBJQk00MjQgICAgICAgICAgIHwgSGVicmV3ICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A0MzcgICAgICAgICAgIHwgNDM3LCBJQk00MzcgICAgICAgICAgICAgICAgICAgIHwgRW5nbGlzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTEwMjIsNiArMTAzMywxMCBAQAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDEwMjYgICAgICAgICAgfCBpYm0xMDI2ICAgICAgICAgICAgICAgICAgICAgICAgfCBUdXJraXNoICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBjcDExMjUgICAgICAgICAgfCAxMTI1LCBpYm0xMTI1LCBjcDg2NnUsIHJ1c2NpaSAgfCBVa3JhaW5pYW4gICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDExNDAgICAgICAgICAgfCBpYm0xMTQwICAgICAgICAgICAgICAgICAgICAgICAgfCBXZXN0ZXJuIEV1cm9wZSAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDEyNTAgICAgICAgICAgfCB3aW5kb3dzLTEyNTAgICAgICAgICAgICAgICAgICAgfCBDZW50cmFsIGFuZCBFYXN0ZXJuIEV1cm9wZSAgICAgfApAQCAtMTE2Nyw2ICsxMTgyLDEyIEBACiB8IHV0Zl84X3NpZyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsbCBsYW5ndWFnZXMgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgdXRmLTE2XCogYW5kIHV0Zi0zMlwqIGVuY29kZXJzIG5vIGxvbmdlciBhbGxvdyBzdXJyb2dhdGUgY29kZSBwb2ludHMKKyAgIChVK0Q4MDAtLVUrREZGRikgdG8gYmUgZW5jb2RlZC4gIFRoZSB1dGYtMzJcKiBkZWNvZGVycyBubyBsb25nZXIgZGVjb2RlCisgICBieXRlIHNlcXVlbmNlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3Vycm9nYXRlIGNvZGUgcG9pbnRzLgorCisKIFB5dGhvbiBTcGVjaWZpYyBFbmNvZGluZ3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTE3Nyw2ICsxMTk4LDkgQEAKIGFyYml0cmFyeSBkYXRhIHRyYW5zZm9ybXMgcmF0aGVyIHRoYW4ganVzdCB0ZXh0IGVuY29kaW5ncykuICBGb3IgYXN5bW1ldHJpYwogY29kZWNzLCB0aGUgc3RhdGVkIHB1cnBvc2UgZGVzY3JpYmVzIHRoZSBlbmNvZGluZyBkaXJlY3Rpb24uCiAKK1RleHQgRW5jb2RpbmdzCiteXl5eXl5eXl5eXl5eXgorCiBUaGUgZm9sbG93aW5nIGNvZGVjcyBwcm92aWRlIDpjbGFzczpgc3RyYCB0byA6Y2xhc3M6YGJ5dGVzYCBlbmNvZGluZyBhbmQKIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgdG8gOmNsYXNzOmBzdHJgIGRlY29kaW5nLCBzaW1pbGFyIHRvIHRoZSBVbmljb2RlIHRleHQKIGVuY29kaW5ncy4KQEAgLTEyMjMsNTcgKzEyNDcsODMgQEAKIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IC4uIGRlcHJlY2F0ZWQ6OiAzLjMgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLVRoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCB0byA6Y2xhc3M6YGJ5dGVzYAotbWFwcGluZ3MuCisuLiBfYmluYXJ5LXRyYW5zZm9ybXM6CisKK0JpbmFyeSBUcmFuc2Zvcm1zCiteXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgZm9sbG93aW5nIGNvZGVjcyBwcm92aWRlIGJpbmFyeSB0cmFuc2Zvcm1zOiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgCit0byA6Y2xhc3M6YGJ5dGVzYCBtYXBwaW5ncy4KIAogCi0uLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THwKKy4uIHRhYnVsYXJjb2x1bW5zOjogfGx8THxMfEx8CiAKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IENvZGVjICAgICAgICAgICAgICAgIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICB8IEVuY29kZXIvZGVjb2RlciAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgYmFzZTY0X2NvZGVjIFsjYjY0XV8gfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgIHwgOm1ldGg6YGJhc2U2NC5iNjRlbmNvZGVgLCAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZTY0ICh0aGUgcmVzdWx0IGFsd2F5cyB8IDptZXRoOmBiYXNlNjQuYjY0ZGVjb2RlYCAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGluY2x1ZGVzIGEgdHJhaWxpbmcgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBgYCdcbidgYCkgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBiejJfY29kZWMgICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgfCA6bWV0aDpgYnoyLmNvbXByZXNzYCwgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1c2luZyBiejIgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJ6Mi5kZWNvbXByZXNzYCAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBoZXhfY29kZWMgICAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byAgICAgICAgfCA6bWV0aDpgYmFzZTY0LmIxNmVuY29kZWAsICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBoZXhhZGVjaW1hbCAgICAgICAgICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZkZWNvZGVgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgcmVwcmVzZW50YXRpb24sIHdpdGggdHdvICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGRpZ2l0cyBwZXIgYnl0ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHF1b3ByaV9jb2RlYyAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICB8IDptZXRoOmBxdW9wcmkuZW5jb2Rlc3RyaW5nYCwgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZCBwcmludGFibGUgICAgICAgICAgfCA6bWV0aDpgcXVvcHJpLmRlY29kZXN0cmluZ2AgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHV1X2NvZGVjICAgICAgICAgICAgIHwgQ29udmVydCB0aGUgb3BlcmFuZCB1c2luZyB8IDptZXRoOmB1dS5lbmNvZGVgLCAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHV1ZW5jb2RlICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgdXUuZGVjb2RlYCAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHpsaWJfY29kZWMgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICB8IDptZXRoOmB6bGliLmNvbXByZXNzYCwgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHVzaW5nIGd6aXAgICAgICAgICAgICAgICAgfCA6bWV0aDpgemxpYi5kZWNvbXByZXNzYCAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgQ29kZWMgICAgICAgICAgICAgICAgfCBBbGlhc2VzICAgICAgICAgIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICAgICB8IEVuY29kZXIgLyBkZWNvZGVyICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IGJhc2U2NF9jb2RlYyBbI2I2NF1fIHwgYmFzZTY0LCBiYXNlXzY0ICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgICAgfCA6bWV0aDpgYmFzZTY0LmI2NGVuY29kZWAgLyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgYmFzZTY0ICh0aGUgcmVzdWx0IGFsd2F5cyAgICB8IDptZXRoOmBiYXNlNjQuYjY0ZGVjb2RlYCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBpbmNsdWRlcyBhIHRyYWlsaW5nICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGBgJ1xuJ2BgKSAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIGFjY2VwdHMgYW55ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBhcyBpbnB1dCBmb3IgZW5jb2RpbmcgYW5kIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIGRlY29kaW5nICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBiejJfY29kZWMgICAgICAgICAgICB8IGJ6MiAgICAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgICAgIHwgOm1ldGg6YGJ6Mi5jb21wcmVzc2AgLyAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHVzaW5nIGJ6MiAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgYnoyLmRlY29tcHJlc3NgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBoZXhfY29kZWMgICAgICAgICAgICB8IGhleCAgICAgICAgICAgICAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gICAgICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZlbmNvZGVgIC8gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGhleGFkZWNpbWFsICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgYmFzZTY0LmIxNmRlY29kZWAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgcmVwcmVzZW50YXRpb24sIHdpdGggdHdvICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBkaWdpdHMgcGVyIGJ5dGUgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgcXVvcHJpX2NvZGVjICAgICAgICAgfCBxdW9wcmksICAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICAgICB8IDptZXRoOmBxdW9wcmkuZW5jb2Rlc3RyaW5nYCAvfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZHByaW50YWJsZSwgfCBxdW90ZWQgcHJpbnRhYmxlICAgICAgICAgICAgIHwgOm1ldGg6YHF1b3ByaS5kZWNvZGVzdHJpbmdgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgcXVvdGVkX3ByaW50YWJsZSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCB1dV9jb2RlYyAgICAgICAgICAgICB8IHV1ICAgICAgICAgICAgICAgfCBDb252ZXJ0IHRoZSBvcGVyYW5kIHVzaW5nICAgIHwgOm1ldGg6YHV1LmVuY29kZWAgLyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHV1ZW5jb2RlICAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgdXUuZGVjb2RlYCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCB6bGliX2NvZGVjICAgICAgICAgICB8IHppcCwgemxpYiAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgICAgIHwgOm1ldGg6YHpsaWIuY29tcHJlc3NgIC8gICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHVzaW5nIGd6aXAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgemxpYi5kZWNvbXByZXNzYCAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi0uLiBbI2I2NF0gUmF0aGVyIHRoYW4gYWNjZXB0aW5nIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLAotICAgYGAnYmFzZTY0X2NvZGVjJ2BgIGFjY2VwdHMgb25seSA6Y2xhc3M6YGJ5dGVzYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIGZvcgotICAgZW5jb2RpbmcgYW5kIG9ubHkgOmNsYXNzOmBieXRlc2AsIDpjbGFzczpgYnl0ZWFycmF5YCwgYW5kIEFTQ0lJLW9ubHkKLSAgIGluc3RhbmNlcyBvZiA6Y2xhc3M6YHN0cmAgZm9yIGRlY29kaW5nCi0KLQotVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBzdHJgIG1hcHBpbmdzLgotCi0uLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8Ci0KLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IENvZGVjICAgICAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgcm90XzEzICAgICAgICAgICAgIHwgUmV0dXJucyB0aGUgQ2Flc2FyLWN5cGhlciB8Ci18ICAgICAgICAgICAgICAgICAgICB8IGVuY3J5cHRpb24gb2YgdGhlIG9wZXJhbmQgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKy4uIFsjYjY0XSBJbiBhZGRpdGlvbiB0byA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gLAorICAgYGAnYmFzZTY0X2NvZGVjJ2BgIGFsc28gYWNjZXB0cyBBU0NJSS1vbmx5IGluc3RhbmNlcyBvZiA6Y2xhc3M6YHN0cmAgZm9yCisgICBkZWNvZGluZwogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKLSAgIGJ5dGVzLXRvLWJ5dGVzIGFuZCBzdHItdG8tc3RyIGNvZGVjcy4KKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBiaW5hcnkgdHJhbnNmb3Jtcy4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBhbGlhc2VzIGZvciB0aGUgYmluYXJ5IHRyYW5zZm9ybXMuCisKKworLi4gX3RleHQtdHJhbnNmb3JtczoKKworVGV4dCBUcmFuc2Zvcm1zCiteXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBjb2RlYyBwcm92aWRlcyBhIHRleHQgdHJhbnNmb3JtOiBhIDpjbGFzczpgc3RyYCB0byA6Y2xhc3M6YHN0cmAKK21hcHBpbmcuCisKKy4uIHRhYnVsYXJjb2x1bW5zOjogfGx8bHxMfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgQ29kZWMgICAgICAgICAgICAgIHwgQWxpYXNlcyB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IHJvdF8xMyAgICAgICAgICAgICB8IHJvdDEzICAgfCBSZXR1cm5zIHRoZSBDYWVzYXItY3lwaGVyIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGVuY3J5cHRpb24gb2YgdGhlIG9wZXJhbmQgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgUmVzdG9yYXRpb24gb2YgdGhlIGBgcm90XzEzYGAgdGV4dCB0cmFuc2Zvcm0uCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYGByb3QxM2BgIGFsaWFzLgogCiAKIDptb2Q6YGVuY29kaW5ncy5pZG5hYCAtLS0gSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIGluIEFwcGxpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdCBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKaW5kZXggNGIyMTkzMi4uMGJiMjZmOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CkBAIC0xNSw3ICsxNSw3IEBACiAgICBpbXBvcnQgaXRlcnRvb2xzCiAgICBfX25hbWVfXyA9ICc8ZG9jdGVzdD4nCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NvbGxlY3Rpb25zL2FiYy5weWAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL19jb2xsZWN0aW9uc19hYmMucHlgCiAKIC0tLS0tLS0tLS0tLS0tCiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogCiAoMikKICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQotICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIHJlZGVmaW5lIDptZXRoOmBfX2xlX19gIGFuZAorICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIHJlZGVmaW5lIDptZXRoOmBfX2xlX19gIGFuZCA6bWV0aDpgX19nZV9fYCwKICAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgogCiAoMykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdAppbmRleCA0ZGVmMWRjLi5mNWZlMTJhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CkBAIC03NiwxNCArNzYsMTkgQEAKICAgICAgICAgYmUgbW9kaWZpZWQgdG8gY2hhbmdlIHdoaWNoIG1hcHBpbmdzIGFyZSBzZWFyY2hlZC4gIFRoZSBsaXN0IHNob3VsZAogICAgICAgICBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgbWFwcGluZy4KIAotICAgIC4uIG1ldGhvZDo6IG5ld19jaGlsZCgpCisgICAgLi4gbWV0aG9kOjogbmV3X2NoaWxkKG09Tm9uZSkKIAotICAgICAgICBSZXR1cm5zIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYSBuZXcgOmNsYXNzOmBkaWN0YCBmb2xsb3dlZCBieQotICAgICAgICBhbGwgb2YgdGhlIG1hcHMgaW4gdGhlIGN1cnJlbnQgaW5zdGFuY2UuICBBIGNhbGwgdG8gYGBkLm5ld19jaGlsZCgpYGAgaXMKLSAgICAgICAgZXF1aXZhbGVudCB0bzogYGBDaGFpbk1hcCh7fSwgKmQubWFwcylgYC4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yCisgICAgICAgIFJldHVybnMgYSBuZXcgOmNsYXNzOmBDaGFpbk1hcGAgY29udGFpbmluZyBhIG5ldyBtYXAgZm9sbG93ZWQgYnkKKyAgICAgICAgYWxsIG9mIHRoZSBtYXBzIGluIHRoZSBjdXJyZW50IGluc3RhbmNlLiAgSWYgYGBtYGAgaXMgc3BlY2lmaWVkLAorICAgICAgICBpdCBiZWNvbWVzIHRoZSBuZXcgbWFwIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCBvZiBtYXBwaW5nczsgaWYgbm90CisgICAgICAgIHNwZWNpZmllZCwgYW4gZW1wdHkgZGljdCBpcyB1c2VkLCBzbyB0aGF0IGEgY2FsbCB0byBgYGQubmV3X2NoaWxkKClgYAorICAgICAgICBpcyBlcXVpdmFsZW50IHRvOiBgYENoYWluTWFwKHt9LCAqZC5tYXBzKWBgLiAgVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IKICAgICAgICAgY3JlYXRpbmcgc3ViY29udGV4dHMgdGhhdCBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IGFsdGVyaW5nIHZhbHVlcyBpbiBhbnkKICAgICAgICAgb2YgdGhlIHBhcmVudCBtYXBwaW5ncy4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBUaGUgb3B0aW9uYWwgYGBtYGAgcGFyYW1ldGVyIHdhcyBhZGRlZC4KKwogICAgIC4uIGF0dHJpYnV0ZTo6IHBhcmVudHMKIAogICAgICAgICBQcm9wZXJ0eSByZXR1cm5pbmcgYSBuZXcgOmNsYXNzOmBDaGFpbk1hcGAgY29udGFpbmluZyBhbGwgb2YgdGhlIG1hcHMgaW4KQEAgLTM2OSwxMCArMzc0LDYgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgICAqIGBDb3VudGVyIGNsYXNzIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2MTEvPmBfCi0gICAgICBhZGFwdGVkIGZvciBQeXRob24gMi41IGFuZCBhbiBlYXJseSBgQmFnIHJlY2lwZQotICAgICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzI1OTE3NC8+YF8gZm9yIFB5dGhvbiAyLjQuCi0KICAgICAqIGBCYWcgY2xhc3MgPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zbWFsbHRhbGsvbWFudWFsLWJhc2UvaHRtbF9ub2RlL0JhZy5odG1sPmBfCiAgICAgICBpbiBTbWFsbHRhbGsuCiAKQEAgLTkxNSwxMSArOTE2LDYgQEAKICAgICA+Pj4gY2xhc3MgU3RhdHVzOgogICAgICAgICBvcGVuLCBwZW5kaW5nLCBjbG9zZWQgPSByYW5nZSgzKQogCi0uLiBzZWVhbHNvOjoKLQotICAgICogYE5hbWVkIHR1cGxlIHJlY2lwZSA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTAwMjYxLz5gXwotICAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNC4KLQogICAgICogYFJlY2lwZSBmb3IgbmFtZWQgdHVwbGUgYWJzdHJhY3QgYmFzZSBjbGFzcyB3aXRoIGEgbWV0YWNsYXNzIG1peC1pbgogICAgICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzYyOS1uYW1lZHR1cGxlYWJjLWFic3RyYWN0LWJhc2UtY2xhc3MtbWl4LWluLWZvci1uYW1lZC8+YF8KICAgICAgIGJ5IEphbiBLYWxpc3pld3NraS4gIEJlc2lkZXMgcHJvdmlkaW5nIGFuIDp0ZXJtOmBhYnN0cmFjdCBiYXNlIGNsYXNzYCBmb3IKQEAgLTk4MiwxMCArOTc4LDYgQEAKIGtleXdvcmQgYXJndW1lbnRzLCBidXQgdGhlaXIgb3JkZXIgaXMgbG9zdCBiZWNhdXNlIFB5dGhvbidzIGZ1bmN0aW9uIGNhbGwKIHNlbWFudGljcyBwYXNzLWluIGtleXdvcmQgYXJndW1lbnRzIHVzaW5nIGEgcmVndWxhciB1bm9yZGVyZWQgZGljdGlvbmFyeS4KIAotLi4gc2VlYWxzbzo6Ci0KLSAgICBgRXF1aXZhbGVudCBPcmRlcmVkRGljdCByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjY5My8+YF8KLSAgICB0aGF0IHJ1bnMgb24gUHl0aG9uIDIuNCBvciBsYXRlci4KIAogOmNsYXNzOmBPcmRlcmVkRGljdGAgRXhhbXBsZXMgYW5kIFJlY2lwZXMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdCBiL0RvYy9saWJyYXJ5L2NvbXBpbGVhbGwucnN0CmluZGV4IGIxMmMyMTcuLjQxZTllMWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbXBpbGVhbGwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbXBpbGVhbGwucnN0CkBAIC0yMCw3ICsyMCw4IEBACiAKIC4uIHByb2dyYW06OiBjb21waWxlYWxsCiAKLS4uIGNtZG9wdGlvbjo6IFtkaXJlY3Rvcnl8ZmlsZV0uLi4KKy4uIGNtZG9wdGlvbjo6IGRpcmVjdG9yeSAuLi4KKyAgICAgICAgICAgICAgIGZpbGUgLi4uCiAKICAgIFBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSBmaWxlcyB0byBjb21waWxlIG9yIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbgogICAgc291cmNlIGZpbGVzLCB0cmF2ZXJzZWQgcmVjdXJzaXZlbHkuICBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgYmVoYXZlIGFzIGlmCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QKaW5kZXggZjJhNTEyZi4uMGRlMjgxYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdApAQCAtMjAsNyArMjAsNiBAQAogICAgc3VicHJvY2Vzcy5yc3QKICAgIHNjaGVkLnJzdAogICAgcXVldWUucnN0Ci0gICBzZWxlY3QucnN0CiAKIAogVGhlIGZvbGxvd2luZyBhcmUgc3VwcG9ydCBtb2R1bGVzIGZvciBzb21lIG9mIHRoZSBhYm92ZSBzZXJ2aWNlczoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CmluZGV4IDU3NWIxZWEuLjA0OTU3MzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdApAQCAtMTY0LDYgKzE2NCw5IEBACiBhbGxvd3MgaXQgdG8gc2lkZS1zdGVwIHRoZSA6dGVybTpgR2xvYmFsIEludGVycHJldGVyIExvY2tgIGJ1dCBhbHNvIG1lYW5zIHRoYXQKIG9ubHkgcGlja2xhYmxlIG9iamVjdHMgY2FuIGJlIGV4ZWN1dGVkIGFuZCByZXR1cm5lZC4KIAorVGhlIGBgX19tYWluX19gYCBtb2R1bGUgbXVzdCBiZSBpbXBvcnRhYmxlIGJ5IHdvcmtlciBzdWJwcm9jZXNzZXMuIFRoaXMgbWVhbnMKK3RoYXQgOmNsYXNzOmBQcm9jZXNzUG9vbEV4ZWN1dG9yYCB3aWxsIG5vdCB3b3JrIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4KKwogQ2FsbGluZyA6Y2xhc3M6YEV4ZWN1dG9yYCBvciA6Y2xhc3M6YEZ1dHVyZWAgbWV0aG9kcyBmcm9tIGEgY2FsbGFibGUgc3VibWl0dGVkCiB0byBhIDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCByZXN1bHQgaW4gZGVhZGxvY2suCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0IGIvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKaW5kZXggZmJhNDhmNC4uOWYxNzRkNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKQEAgLTk1LDYgKzk1LDgzIEBACiAgICBgYHBhZ2UuY2xvc2UoKWBgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBpcyBleGl0ZWQuCiAKIAorLi4gZnVuY3Rpb246OiBzdXBwcmVzcygqZXhjZXB0aW9ucykKKworICAgUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgc3VwcHJlc3NlcyBhbnkgb2YgdGhlIHNwZWNpZmllZCBleGNlcHRpb25zCisgICBpZiB0aGV5IG9jY3VyIGluIHRoZSBib2R5IG9mIGEgd2l0aCBzdGF0ZW1lbnQgYW5kIHRoZW4gcmVzdW1lcyBleGVjdXRpb24KKyAgIHdpdGggdGhlIGZpcnN0IHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgd2l0aCBzdGF0ZW1lbnQuCisKKyAgIEFzIHdpdGggYW55IG90aGVyIG1lY2hhbmlzbSB0aGF0IGNvbXBsZXRlbHkgc3VwcHJlc3NlcyBleGNlcHRpb25zLCB0aGlzCisgICBjb250ZXh0IG1hbmFnZXIgc2hvdWxkIGJlIHVzZWQgb25seSB0byBjb3ZlciB2ZXJ5IHNwZWNpZmljIGVycm9ycyB3aGVyZQorICAgc2lsZW50bHkgY29udGludWluZyB3aXRoIHByb2dyYW0gZXhlY3V0aW9uIGlzIGtub3duIHRvIGJlIHRoZSByaWdodAorICAgdGhpbmcgdG8gZG8uCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgIGZyb20gY29udGV4dGxpYiBpbXBvcnQgc3VwcHJlc3MKKworICAgICAgIHdpdGggc3VwcHJlc3MoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICBvcy5yZW1vdmUoJ3NvbWVmaWxlLnRtcCcpCisKKyAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lb3RoZXJmaWxlLnRtcCcpCisKKyAgIFRoaXMgY29kZSBpcyBlcXVpdmFsZW50IHRvOjoKKworICAgICAgIHRyeToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lZmlsZS50bXAnKQorICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgcGFzcworCisgICAgICAgdHJ5OgorICAgICAgICAgICBvcy5yZW1vdmUoJ3NvbWVvdGhlcmZpbGUudG1wJykKKyAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmVlbnRyYW50IDxyZWVudHJhbnQtY21zPmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogcmVkaXJlY3Rfc3Rkb3V0KG5ld190YXJnZXQpCisKKyAgIENvbnRleHQgbWFuYWdlciBmb3IgdGVtcG9yYXJpbHkgcmVkaXJlY3RpbmcgOmRhdGE6YHN5cy5zdGRvdXRgIHRvCisgICBhbm90aGVyIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdC4KKworICAgVGhpcyB0b29sIGFkZHMgZmxleGliaWxpdHkgdG8gZXhpc3RpbmcgZnVuY3Rpb25zIG9yIGNsYXNzZXMgd2hvc2Ugb3V0cHV0CisgICBpcyBoYXJkd2lyZWQgdG8gc3Rkb3V0LgorCisgICBGb3IgZXhhbXBsZSwgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgbm9ybWFsbHkgaXMgc2VudCB0byAqc3lzLnN0ZG91dCouCisgICBZb3UgY2FuIGNhcHR1cmUgdGhhdCBvdXRwdXQgaW4gYSBzdHJpbmcgYnkgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCB0byBhCisgICA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBvYmplY3Q6OgorCisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgorICAgICAgICAgICAgaGVscChwb3cpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKworICAgVG8gc2VuZCB0aGUgb3V0cHV0IG9mIDpmdW5jOmBoZWxwYCB0byBhIGZpbGUgb24gZGlzaywgcmVkaXJlY3QgdGhlIG91dHB1dAorICAgdG8gYSByZWd1bGFyIGZpbGU6OgorCisgICAgICAgIHdpdGggb3BlbignaGVscC50eHQnLCAndycpIGFzIGY6CisgICAgICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgICAgICBoZWxwKHBvdykKKworICAgVG8gc2VuZCB0aGUgb3V0cHV0IG9mIDpmdW5jOmBoZWxwYCB0byAqc3lzLnN0ZGVycio6OgorCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KHN5cy5zdGRlcnIpOgorICAgICAgICAgICAgaGVscChwb3cpCisKKyAgIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0IG9uIDpkYXRhOmBzeXMuc3Rkb3V0YCBtZWFucyB0aGF0IHRoaXMKKyAgIGNvbnRleHQgbWFuYWdlciBpcyBub3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBsaWJyYXJ5IGNvZGUgYW5kIG1vc3QgdGhyZWFkZWQKKyAgIGFwcGxpY2F0aW9ucy4gSXQgYWxzbyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBvdXRwdXQgb2Ygc3VicHJvY2Vzc2VzLgorICAgSG93ZXZlciwgaXQgaXMgc3RpbGwgYSB1c2VmdWwgYXBwcm9hY2ggZm9yIG1hbnkgdXRpbGl0eSBzY3JpcHRzLgorCisgICBUaGlzIGNvbnRleHQgbWFuYWdlciBpcyA6cmVmOmByZXVzYWJsZSBidXQgbm90IHJlZW50cmFudCA8cmV1c2FibGUtY21zPmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGNsYXNzOjogQ29udGV4dERlY29yYXRvcigpCiAKICAgIEEgYmFzZSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBjb250ZXh0IG1hbmFnZXIgdG8gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLgpAQCAtMjk0LDcgKzM3MSw3IEBACiAgICAgd2l0aCBFeGl0U3RhY2soKSBhcyBzdGFjazoKICAgICAgICAgZm9yIHJlc291cmNlIGluIHJlc291cmNlczoKICAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocmVzb3VyY2UpCi0gICAgICAgIGlmIG5lZWRfc3BlY2lhbCByZXNvdXJjZToKKyAgICAgICAgaWYgbmVlZF9zcGVjaWFsX3Jlc291cmNlKCk6CiAgICAgICAgICAgICBzcGVjaWFsID0gYWNxdWlyZV9zcGVjaWFsX3Jlc291cmNlKCkKICAgICAgICAgICAgIHN0YWNrLmNhbGxiYWNrKHJlbGVhc2Vfc3BlY2lhbF9yZXNvdXJjZSwgc3BlY2lhbCkKICAgICAgICAgIyBQZXJmb3JtIG9wZXJhdGlvbnMgdGhhdCB1c2UgdGhlIGFjcXVpcmVkIHJlc291cmNlcwpAQCAtNTIwLDMgKzU5NywxNTMgQEAKICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gOmtleXdvcmQ6YHdpdGhgCiAgICAgICBzdGF0ZW1lbnQuCiAKKy4uIF9zaW5nbGUtdXNlLXJldXNhYmxlLWFuZC1yZWVudHJhbnQtY21zOgorCitTaW5nbGUgdXNlLCByZXVzYWJsZSBhbmQgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb3N0IGNvbnRleHQgbWFuYWdlcnMgYXJlIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdCBtZWFucyB0aGV5IGNhbiBvbmx5IGJlCit1c2VkIGVmZmVjdGl2ZWx5IGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBvbmNlLiBUaGVzZSBzaW5nbGUgdXNlCitjb250ZXh0IG1hbmFnZXJzIG11c3QgYmUgY3JlYXRlZCBhZnJlc2ggZWFjaCB0aW1lIHRoZXkncmUgdXNlZCAtCithdHRlbXB0aW5nIHRvIHVzZSB0aGVtIGEgc2Vjb25kIHRpbWUgd2lsbCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbiBvcgorb3RoZXJ3aXNlIG5vdCB3b3JrIGNvcnJlY3RseS4KKworVGhpcyBjb21tb24gbGltaXRhdGlvbiBtZWFucyB0aGF0IGl0IGlzIGdlbmVyYWxseSBhZHZpc2FibGUgdG8gY3JlYXRlCitjb250ZXh0IG1hbmFnZXJzIGRpcmVjdGx5IGluIHRoZSBoZWFkZXIgb2YgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQKK3doZXJlIHRoZXkgYXJlIHVzZWQgKGFzIHNob3duIGluIGFsbCBvZiB0aGUgdXNhZ2UgZXhhbXBsZXMgYWJvdmUpLgorCitGaWxlcyBhcmUgYW4gZXhhbXBsZSBvZiBlZmZlY3RpdmVseSBzaW5nbGUgdXNlIGNvbnRleHQgbWFuYWdlcnMsIHNpbmNlCit0aGUgZmlyc3QgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3aWxsIGNsb3NlIHRoZSBmaWxlLCBwcmV2ZW50aW5nIGFueQorZnVydGhlciBJTyBvcGVyYXRpb25zIHVzaW5nIHRoYXQgZmlsZSBvYmplY3QuCisKK0NvbnRleHQgbWFuYWdlcnMgY3JlYXRlZCB1c2luZyA6ZnVuYzpgY29udGV4dG1hbmFnZXJgIGFyZSBhbHNvIHNpbmdsZSB1c2UKK2NvbnRleHQgbWFuYWdlcnMsIGFuZCB3aWxsIGNvbXBsYWluIGFib3V0IHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBmYWlsaW5nCit0byB5aWVsZCBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdXNlIHRoZW0gYSBzZWNvbmQgdGltZTo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorICAgID4+PiBAY29udGV4dG1hbmFnZXIKKyAgICAuLi4gZGVmIHNpbmdsZXVzZSgpOgorICAgIC4uLiAgICAgcHJpbnQoIkJlZm9yZSIpCisgICAgLi4uICAgICB5aWVsZAorICAgIC4uLiAgICAgcHJpbnQoIkFmdGVyIikKKyAgICAuLi4KKyAgICA+Pj4gY20gPSBzaW5nbGV1c2UoKQorICAgID4+PiB3aXRoIGNtOgorICAgIC4uLiAgICAgcGFzcworICAgIC4uLgorICAgIEJlZm9yZQorICAgIEFmdGVyCisgICAgPj4+IHdpdGggY206CisgICAgLi4uICAgIHBhc3MKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgIFJ1bnRpbWVFcnJvcjogZ2VuZXJhdG9yIGRpZG4ndCB5aWVsZAorCisKKy4uIF9yZWVudHJhbnQtY21zOgorCitSZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworTW9yZSBzb3BoaXN0aWNhdGVkIGNvbnRleHQgbWFuYWdlcnMgbWF5IGJlICJyZWVudHJhbnQiLiBUaGVzZSBjb250ZXh0CittYW5hZ2VycyBjYW4gbm90IG9ubHkgYmUgdXNlZCBpbiBtdWx0aXBsZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cywKK2J1dCBtYXkgYWxzbyBiZSB1c2VkICppbnNpZGUqIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0aGF0IGlzIGFscmVhZHkKK3VzaW5nIHRoZSBzYW1lIGNvbnRleHQgbWFuYWdlci4KKworOmNsYXNzOmB0aHJlYWRpbmcuUkxvY2tgIGlzIGFuIGV4YW1wbGUgb2YgYSByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VyLCBhcyBhcmUKKzpmdW5jOmBzdXBwcmVzc2AgYW5kIDpmdW5jOmByZWRpcmVjdF9zdGRvdXRgLiBIZXJlJ3MgYSB2ZXJ5IHNpbXBsZSBleGFtcGxlIG9mCityZWVudHJhbnQgdXNlOjoKKworICAgID4+PiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IHJlZGlyZWN0X3N0ZG91dAorICAgID4+PiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworICAgID4+PiBzdHJlYW0gPSBTdHJpbmdJTygpCisgICAgPj4+IHdyaXRlX3RvX3N0cmVhbSA9IHJlZGlyZWN0X3N0ZG91dChzdHJlYW0pCisgICAgPj4+IHdpdGggd3JpdGVfdG9fc3RyZWFtOgorICAgIC4uLiAgICAgcHJpbnQoIlRoaXMgaXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtIHJhdGhlciB0aGFuIHN0ZG91dCIpCisgICAgLi4uICAgICB3aXRoIHdyaXRlX3RvX3N0cmVhbToKKyAgICAuLi4gICAgICAgICBwcmludCgiVGhpcyBpcyBhbHNvIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSIpCisgICAgLi4uCisgICAgPj4+IHByaW50KCJUaGlzIGlzIHdyaXR0ZW4gZGlyZWN0bHkgdG8gc3Rkb3V0IikKKyAgICBUaGlzIGlzIHdyaXR0ZW4gZGlyZWN0bHkgdG8gc3Rkb3V0CisgICAgPj4+IHByaW50KHN0cmVhbS5nZXR2YWx1ZSgpKQorICAgIFRoaXMgaXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtIHJhdGhlciB0aGFuIHN0ZG91dAorICAgIFRoaXMgaXMgYWxzbyB3cml0dGVuIHRvIHRoZSBzdHJlYW0KKworUmVhbCB3b3JsZCBleGFtcGxlcyBvZiByZWVudHJhbmN5IGFyZSBtb3JlIGxpa2VseSB0byBpbnZvbHZlIG11bHRpcGxlCitmdW5jdGlvbnMgY2FsbGluZyBlYWNoIG90aGVyIGFuZCBoZW5jZSBiZSBmYXIgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoaXMKK2V4YW1wbGUuCisKK05vdGUgYWxzbyB0aGF0IGJlaW5nIHJlZW50cmFudCBpcyAqbm90KiB0aGUgc2FtZSB0aGluZyBhcyBiZWluZyB0aHJlYWQgc2FmZS4KKzpmdW5jOmByZWRpcmVjdF9zdGRvdXRgLCBmb3IgZXhhbXBsZSwgaXMgZGVmaW5pdGVseSBub3QgdGhyZWFkIHNhZmUsIGFzIGl0CittYWtlcyBhIGdsb2JhbCBtb2RpZmljYXRpb24gdG8gdGhlIHN5c3RlbSBzdGF0ZSBieSBiaW5kaW5nIDpkYXRhOmBzeXMuc3Rkb3V0YAordG8gYSBkaWZmZXJlbnQgc3RyZWFtLgorCisKKy4uIF9yZXVzYWJsZS1jbXM6CisKK1JldXNhYmxlIGNvbnRleHQgbWFuYWdlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRGlzdGluY3QgZnJvbSBib3RoIHNpbmdsZSB1c2UgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzIGFyZSAicmV1c2FibGUiCitjb250ZXh0IG1hbmFnZXJzIChvciwgdG8gYmUgY29tcGxldGVseSBleHBsaWNpdCwgInJldXNhYmxlLCBidXQgbm90CityZWVudHJhbnQiIGNvbnRleHQgbWFuYWdlcnMsIHNpbmNlIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzIGFyZSBhbHNvCityZXVzYWJsZSkuIFRoZXNlIGNvbnRleHQgbWFuYWdlcnMgc3VwcG9ydCBiZWluZyB1c2VkIG11bHRpcGxlIHRpbWVzLCBidXQKK3dpbGwgZmFpbCAob3Igb3RoZXJ3aXNlIG5vdCB3b3JrIGNvcnJlY3RseSkgaWYgdGhlIHNwZWNpZmljIGNvbnRleHQgbWFuYWdlcgoraW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIGEgY29udGFpbmluZyB3aXRoIHN0YXRlbWVudC4KKworOmNsYXNzOmB0aHJlYWRpbmcuTG9ja2AgaXMgYW4gZXhhbXBsZSBvZiBhIHJldXNhYmxlLCBidXQgbm90IHJlZW50cmFudCwKK2NvbnRleHQgbWFuYWdlciAoZm9yIGEgcmVlbnRyYW50IGxvY2ssIGl0IGlzIG5lY2Vzc2FyeSB0byB1c2UKKzpjbGFzczpgdGhyZWFkaW5nLlJMb2NrYCBpbnN0ZWFkKS4KKworQW5vdGhlciBleGFtcGxlIG9mIGEgcmV1c2FibGUsIGJ1dCBub3QgcmVlbnRyYW50LCBjb250ZXh0IG1hbmFnZXIgaXMKKzpjbGFzczpgRXhpdFN0YWNrYCwgYXMgaXQgaW52b2tlcyAqYWxsKiBjdXJyZW50bHkgcmVnaXN0ZXJlZCBjYWxsYmFja3MKK3doZW4gbGVhdmluZyBhbnkgd2l0aCBzdGF0ZW1lbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhvc2UgY2FsbGJhY2tzCit3ZXJlIGFkZGVkOjoKKworICAgID4+PiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IEV4aXRTdGFjaworICAgID4+PiBzdGFjayA9IEV4aXRTdGFjaygpCisgICAgPj4+IHdpdGggc3RhY2s6CisgICAgLi4uICAgICBzdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIGZpcnN0IGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgZmlyc3QgY29udGV4dCIpCisgICAgLi4uCisgICAgTGVhdmluZyBmaXJzdCBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gZmlyc3QgY29udGV4dAorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBzZWNvbmQgY29udGV4dCIpCisgICAgLi4uICAgICBwcmludCgiTGVhdmluZyBzZWNvbmQgY29udGV4dCIpCisgICAgLi4uCisgICAgTGVhdmluZyBzZWNvbmQgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIHNlY29uZCBjb250ZXh0CisgICAgPj4+IHdpdGggc3RhY2s6CisgICAgLi4uICAgICBzdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgd2l0aCBzdGFjazoKKyAgICAuLi4gICAgICAgICBzdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgICAgIHByaW50KCJMZWF2aW5nIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgb3V0ZXIgY29udGV4dCIpCisgICAgLi4uCisgICAgTGVhdmluZyBpbm5lciBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gaW5uZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQKKyAgICBMZWF2aW5nIG91dGVyIGNvbnRleHQKKworQXMgdGhlIG91dHB1dCBmcm9tIHRoZSBleGFtcGxlIHNob3dzLCByZXVzaW5nIGEgc2luZ2xlIHN0YWNrIG9iamVjdCBhY3Jvc3MKK211bHRpcGxlIHdpdGggc3RhdGVtZW50cyB3b3JrcyBjb3JyZWN0bHksIGJ1dCBhdHRlbXB0aW5nIHRvIG5lc3QgdGhlbQord2lsbCBjYXVzZSB0aGUgc3RhY2sgdG8gYmUgY2xlYXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBpbm5lcm1vc3Qgd2l0aAorc3RhdGVtZW50LCB3aGljaCBpcyB1bmxpa2VseSB0byBiZSBkZXNpcmFibGUgYmVoYXZpb3VyLgorCitVc2luZyBzZXBhcmF0ZSA6Y2xhc3M6YEV4aXRTdGFja2AgaW5zdGFuY2VzIGluc3RlYWQgb2YgcmV1c2luZyBhIHNpbmdsZQoraW5zdGFuY2UgYXZvaWRzIHRoYXQgcHJvYmxlbTo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCBFeGl0U3RhY2sKKyAgICA+Pj4gd2l0aCBFeGl0U3RhY2soKSBhcyBvdXRlcl9zdGFjazoKKyAgICAuLi4gICAgIG91dGVyX3N0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gb3V0ZXIgY29udGV4dCIpCisgICAgLi4uICAgICB3aXRoIEV4aXRTdGFjaygpIGFzIGlubmVyX3N0YWNrOgorICAgIC4uLiAgICAgICAgIGlubmVyX3N0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gaW5uZXIgY29udGV4dCIpCisgICAgLi4uICAgICAgICAgcHJpbnQoIkxlYXZpbmcgaW5uZXIgY29udGV4dCIpCisgICAgLi4uICAgICBwcmludCgiTGVhdmluZyBvdXRlciBjb250ZXh0IikKKyAgICAuLi4KKyAgICBMZWF2aW5nIGlubmVyIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBpbm5lciBjb250ZXh0CisgICAgTGVhdmluZyBvdXRlciBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gb3V0ZXIgY29udGV4dApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3Vyc2VzLnJzdCBiL0RvYy9saWJyYXJ5L2N1cnNlcy5yc3QKaW5kZXggMzE0NjM2ZS4uZjNlNjBiNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3Vyc2VzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jdXJzZXMucnN0CkBAIC0xMiw3ICsxMiw3IEBACiBkZS1mYWN0byBzdGFuZGFyZCBmb3IgcG9ydGFibGUgYWR2YW5jZWQgdGVybWluYWwgaGFuZGxpbmcuCiAKIFdoaWxlIGN1cnNlcyBpcyBtb3N0IHdpZGVseSB1c2VkIGluIHRoZSBVbml4IGVudmlyb25tZW50LCB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlCi1mb3IgRE9TLCBPUy8yLCBhbmQgcG9zc2libHkgb3RoZXIgc3lzdGVtcyBhcyB3ZWxsLiAgVGhpcyBleHRlbnNpb24gbW9kdWxlIGlzCitmb3IgV2luZG93cywgRE9TLCBhbmQgcG9zc2libHkgb3RoZXIgc3lzdGVtcyBhcyB3ZWxsLiAgVGhpcyBleHRlbnNpb24gbW9kdWxlIGlzCiBkZXNpZ25lZCB0byBtYXRjaCB0aGUgQVBJIG9mIG5jdXJzZXMsIGFuIG9wZW4tc291cmNlIGN1cnNlcyBsaWJyYXJ5IGhvc3RlZCBvbgogTGludXggYW5kIHRoZSBCU0QgdmFyaWFudHMgb2YgVW5peC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QKaW5kZXggZDAzODJlMC4uNDhhZjA4MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0CkBAIC0zMCwzICszMCw0IEBACiAgICBjb3B5LnJzdAogICAgcHByaW50LnJzdAogICAgcmVwcmxpYi5yc3QKKyAgIGVudW0ucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKaW5kZXggMDY1ZTg1MC4uZTFiOWUxMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdApAQCAtMTcwLDEwICsxNzAsMTIgQEAKICAgICogYGAwIDw9IHNlY29uZHMgPCAzNjAwKjI0YGAgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpbiBvbmUgZGF5KQogICAgKiBgYC05OTk5OTk5OTkgPD0gZGF5cyA8PSA5OTk5OTk5OTlgYAogCi0gICBJZiBhbnkgYXJndW1lbnQgaXMgYSBmbG9hdCBhbmQgdGhlcmUgYXJlIGZyYWN0aW9uYWwgbWljcm9zZWNvbmRzLCB0aGUgZnJhY3Rpb25hbAotICAgbWljcm9zZWNvbmRzIGxlZnQgb3ZlciBmcm9tIGFsbCBhcmd1bWVudHMgYXJlIGNvbWJpbmVkIGFuZCB0aGVpciBzdW0gaXMgcm91bmRlZAotICAgdG8gdGhlIG5lYXJlc3QgbWljcm9zZWNvbmQuICBJZiBubyBhcmd1bWVudCBpcyBhIGZsb2F0LCB0aGUgY29udmVyc2lvbiBhbmQKLSAgIG5vcm1hbGl6YXRpb24gcHJvY2Vzc2VzIGFyZSBleGFjdCAobm8gaW5mb3JtYXRpb24gaXMgbG9zdCkuCisgICBJZiBhbnkgYXJndW1lbnQgaXMgYSBmbG9hdCBhbmQgdGhlcmUgYXJlIGZyYWN0aW9uYWwgbWljcm9zZWNvbmRzLAorICAgdGhlIGZyYWN0aW9uYWwgbWljcm9zZWNvbmRzIGxlZnQgb3ZlciBmcm9tIGFsbCBhcmd1bWVudHMgYXJlCisgICBjb21iaW5lZCBhbmQgdGhlaXIgc3VtIGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgbWljcm9zZWNvbmQgdXNpbmcKKyAgIHJvdW5kLWhhbGYtdG8tZXZlbiB0aWVicmVha2VyLiAgSWYgbm8gYXJndW1lbnQgaXMgYSBmbG9hdCwgdGhlCisgICBjb252ZXJzaW9uIGFuZCBub3JtYWxpemF0aW9uIHByb2Nlc3NlcyBhcmUgZXhhY3QgKG5vIGluZm9ybWF0aW9uIGlzCisgICBsb3N0KS4KIAogICAgSWYgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgZGF5cyBsaWVzIG91dHNpZGUgdGhlIGluZGljYXRlZCByYW5nZSwKICAgIDpleGM6YE92ZXJmbG93RXJyb3JgIGlzIHJhaXNlZC4KQEAgLTE2ODUsMTEgKzE2ODcsMTEgQEAKIC4uIHNlZWFsc286OgogCiAgICBgcHl0eiA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL3B5dHovPmBfCi0gICAgICBUaGUgc3RhbmRhcmQgbGlicmFyeSBoYXMgbm8gOmNsYXNzOmB0emluZm9gIGluc3RhbmNlcyBleGNlcHQgZm9yIFVUQywgYnV0Ci0gICAgICB0aGVyZSBleGlzdHMgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IHdoaWNoIGJyaW5ncyB0aGUgKklBTkEgdGltZXpvbmUKLSAgICAgIGRhdGFiYXNlKiAoYWxzbyBrbm93biBhcyB0aGUgT2xzb24gZGF0YWJhc2UpIHRvIFB5dGhvbjogKnB5dHoqLgorICAgICAgVGhlIHN0YW5kYXJkIGxpYnJhcnkgaGFzIDpjbGFzczpgdGltZXpvbmVgIGNsYXNzIGZvciBoYW5kbGluZyBhcmJpdHJhcnkKKyAgICAgIGZpeGVkIG9mZnNldHMgZnJvbSBVVEMgYW5kIDphdHRyOmB0aW1lem9uZS51dGNgIGFzIFVUQyB0aW1lem9uZSBpbnN0YW5jZS4KIAotICAgICAgKnB5dHoqIGNvbnRhaW5zIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gYW5kIGl0cyB1c2FnZSBpcyByZWNvbW1lbmRlZC4KKyAgICAgICpweXR6KiBsaWJyYXJ5IGJyaW5ncyB0aGUgKklBTkEgdGltZXpvbmUgZGF0YWJhc2UqIChhbHNvIGtub3duIGFzIHRoZQorICAgICAgT2xzb24gZGF0YWJhc2UpIHRvIFB5dGhvbiBhbmQgaXRzIHVzYWdlIGlzIHJlY29tbWVuZGVkLgogCiAgICBgSUFOQSB0aW1lem9uZSBkYXRhYmFzZSA8aHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzPmBfCiAgICAgICBUaGUgVGltZSBab25lIERhdGFiYXNlIChvZnRlbiBjYWxsZWQgdHogb3Igem9uZWluZm8pIGNvbnRhaW5zIGNvZGUgYW5kCkBAIC0xNzI2LDYgKzE3MjgsOCBAQAogICAqb2Zmc2V0KiwgSEggYW5kIE1NIGFyZSB0d28gZGlnaXRzIG9mIGBgb2Zmc2V0LmhvdXJzYGAgYW5kCiAgIGBgb2Zmc2V0Lm1pbnV0ZXNgYCByZXNwZWN0aXZlbHkuCiAKKyAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIC4uIG1ldGhvZDo6IHRpbWV6b25lLnV0Y29mZnNldChkdCkKIAogICBSZXR1cm4gdGhlIGZpeGVkIHZhbHVlIHNwZWNpZmllZCB3aGVuIHRoZSA6Y2xhc3M6YHRpbWV6b25lYCBpbnN0YW5jZSBpcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGJtLnJzdCBiL0RvYy9saWJyYXJ5L2RibS5yc3QKaW5kZXggYmQ4OGY0MS4uZTZhODJkNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGJtLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYm0ucnN0CkBAIC03MywzMyArNzMsMzkgQEAKIHN0cmluZ3MgYXJlIHVzZWQgdGhleSBhcmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gdGhlIGRlZmF1bHQgZW5jb2RpbmcgYmVmb3JlCiBiZWluZyBzdG9yZWQuCiAKK1RoZXNlIG9iamVjdHMgYWxzbyBzdXBwb3J0IGJlaW5nIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCB3aGljaAord2lsbCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZW0gd2hlbiBkb25lLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgQWRkZWQgbmF0aXZlIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgdG8gdGhlIG9iamVjdHMKKyAgIHJldHVybmVkIGJ5IDpmdW5jOmAub3BlbmAuCisKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSByZWNvcmRzIHNvbWUgaG9zdG5hbWVzIGFuZCBhIGNvcnJlc3BvbmRpbmcgdGl0bGUsICBhbmQKIHRoZW4gcHJpbnRzIG91dCB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlOjoKIAogICAgaW1wb3J0IGRibQogCiAgICAjIE9wZW4gZGF0YWJhc2UsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS4KLSAgIGRiID0gZGJtLm9wZW4oJ2NhY2hlJywgJ2MnKQorICAgd2l0aCBkYm0ub3BlbignY2FjaGUnLCAnYycpIGFzIGRiOgogCi0gICAjIFJlY29yZCBzb21lIHZhbHVlcwotICAgZGJbYidoZWxsbyddID0gYid0aGVyZScKLSAgIGRiWyd3d3cucHl0aG9uLm9yZyddID0gJ1B5dGhvbiBXZWJzaXRlJwotICAgZGJbJ3d3dy5jbm4uY29tJ10gPSAnQ2FibGUgTmV3cyBOZXR3b3JrJworICAgICAgICMgUmVjb3JkIHNvbWUgdmFsdWVzCisgICAgICAgZGJbYidoZWxsbyddID0gYid0aGVyZScKKyAgICAgICBkYlsnd3d3LnB5dGhvbi5vcmcnXSA9ICdQeXRob24gV2Vic2l0ZScKKyAgICAgICBkYlsnd3d3LmNubi5jb20nXSA9ICdDYWJsZSBOZXdzIE5ldHdvcmsnCiAKLSAgICMgTm90ZSB0aGF0IHRoZSBrZXlzIGFyZSBjb25zaWRlcmVkIGJ5dGVzIG5vdy4KLSAgIGFzc2VydCBkYltiJ3d3dy5weXRob24ub3JnJ10gPT0gYidQeXRob24gV2Vic2l0ZScKLSAgICMgTm90aWNlIGhvdyB0aGUgdmFsdWUgaXMgbm93IGluIGJ5dGVzLgotICAgYXNzZXJ0IGRiWyd3d3cuY25uLmNvbSddID09IGInQ2FibGUgTmV3cyBOZXR3b3JrJworICAgICAgICMgTm90ZSB0aGF0IHRoZSBrZXlzIGFyZSBjb25zaWRlcmVkIGJ5dGVzIG5vdy4KKyAgICAgICBhc3NlcnQgZGJbYid3d3cucHl0aG9uLm9yZyddID09IGInUHl0aG9uIFdlYnNpdGUnCisgICAgICAgIyBOb3RpY2UgaG93IHRoZSB2YWx1ZSBpcyBub3cgaW4gYnl0ZXMuCisgICAgICAgYXNzZXJ0IGRiWyd3d3cuY25uLmNvbSddID09IGInQ2FibGUgTmV3cyBOZXR3b3JrJwogCi0gICAjIE9mdGVuLXVzZWQgbWV0aG9kcyBvZiB0aGUgZGljdCBpbnRlcmZhY2Ugd29yayB0b28uCi0gICBwcmludChkYi5nZXQoJ3B5dGhvbi5vcmcnLCBiJ25vdCBwcmVzZW50JykpCisgICAgICAgIyBPZnRlbi11c2VkIG1ldGhvZHMgb2YgdGhlIGRpY3QgaW50ZXJmYWNlIHdvcmsgdG9vLgorICAgICAgIHByaW50KGRiLmdldCgncHl0aG9uLm9yZycsIGInbm90IHByZXNlbnQnKSkKIAotICAgIyBTdG9yaW5nIGEgbm9uLXN0cmluZyBrZXkgb3IgdmFsdWUgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gKG1vc3QKLSAgICMgbGlrZWx5IGEgVHlwZUVycm9yKS4KLSAgIGRiWyd3d3cueWFob28uY29tJ10gPSA0CisgICAgICAgIyBTdG9yaW5nIGEgbm9uLXN0cmluZyBrZXkgb3IgdmFsdWUgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gKG1vc3QKKyAgICAgICAjIGxpa2VseSBhIFR5cGVFcnJvcikuCisgICAgICAgZGJbJ3d3dy55YWhvby5jb20nXSA9IDQKIAotICAgIyBDbG9zZSB3aGVuIGRvbmUuCi0gICBkYi5jbG9zZSgpCisgICAjIGRiIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gbGVhdmluZyB0aGUgd2l0aCBzdGF0ZW1lbnQuCiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QgYi9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QKaW5kZXggYzY5ZmIxYy4uODhhMmZhNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGVidWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RlYnVnLnJzdApAQCAtMTUsMyArMTUsNCBAQAogICAgcHJvZmlsZS5yc3QKICAgIHRpbWVpdC5yc3QKICAgIHRyYWNlLnJzdAorICAgdHJhY2VtYWxsb2MucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QgYi9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QKaW5kZXggMjM2ODc2OS4uMDZlNzA0OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdApAQCAtMjMsNCArMjMsMyBAQAogICAgdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKICAgIDJ0bzMucnN0CiAgICB0ZXN0LnJzdAotICAgdmVudi5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RpZmZsaWIucnN0IGIvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QKaW5kZXggODFkYzBmMS4uMmE3NWQyYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QKQEAgLTIyNiw4ICsyMjYsOCBAQAogCiAgICA6ZmlsZTpgVG9vbHMvc2NyaXB0cy9uZGlmZi5weWAgaXMgYSBjb21tYW5kLWxpbmUgZnJvbnQtZW5kIHRvIHRoaXMgZnVuY3Rpb24uCiAKLSAgICAgID4+PiBkaWZmID0gbmRpZmYoJ29uZVxudHdvXG50aHJlZVxuJy5zcGxpdGxpbmVzKDEpLAotICAgICAgLi4uICAgICAgICAgICAgICAnb3JlXG50cmVlXG5lbXVcbicuc3BsaXRsaW5lcygxKSkKKyAgICAgID4+PiBkaWZmID0gbmRpZmYoJ29uZVxudHdvXG50aHJlZVxuJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpLAorICAgICAgLi4uICAgICAgICAgICAgICAnb3JlXG50cmVlXG5lbXVcbicuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkKICAgICAgID4+PiBwcmludCgnJy5qb2luKGRpZmYpLCBlbmQ9IiIpCiAgICAgICAtIG9uZQogICAgICAgPyAgXgpAQCAtMjUwLDggKzI1MCw4IEBACiAKICAgIEV4YW1wbGU6CiAKLSAgICAgID4+PiBkaWZmID0gbmRpZmYoJ29uZVxudHdvXG50aHJlZVxuJy5zcGxpdGxpbmVzKDEpLAotICAgICAgLi4uICAgICAgICAgICAgICAnb3JlXG50cmVlXG5lbXVcbicuc3BsaXRsaW5lcygxKSkKKyAgICAgID4+PiBkaWZmID0gbmRpZmYoJ29uZVxudHdvXG50aHJlZVxuJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpLAorICAgICAgLi4uICAgICAgICAgICAgICAnb3JlXG50cmVlXG5lbXVcbicuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkKICAgICAgID4+PiBkaWZmID0gbGlzdChkaWZmKSAjIG1hdGVyaWFsaXplIHRoZSBnZW5lcmF0ZWQgZGVsdGEgaW50byBhIGxpc3QKICAgICAgID4+PiBwcmludCgnJy5qb2luKHJlc3RvcmUoZGlmZiwgMSkpLCBlbmQ9IiIpCiAgICAgICBvbmUKQEAgLTY1MCw3ICs2NTAsNyBAQAogICAgLi4uICAgMi4gRXhwbGljaXQgaXMgYmV0dGVyIHRoYW4gaW1wbGljaXQuCiAgICAuLi4gICAzLiBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgIC4uLiAgIDQuIENvbXBsZXggaXMgYmV0dGVyIHRoYW4gY29tcGxpY2F0ZWQuCi0gICAuLi4gJycnLnNwbGl0bGluZXMoMSkKKyAgIC4uLiAnJycuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKQogICAgPj4+IGxlbih0ZXh0MSkKICAgIDQKICAgID4+PiB0ZXh0MVswXVstMV0KQEAgLTY1OSw3ICs2NTksNyBAQAogICAgLi4uICAgMy4gICBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgIC4uLiAgIDQuIENvbXBsaWNhdGVkIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCiAgICAuLi4gICA1LiBGbGF0IGlzIGJldHRlciB0aGFuIG5lc3RlZC4KLSAgIC4uLiAnJycuc3BsaXRsaW5lcygxKQorICAgLi4uICcnJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCiAKIE5leHQgd2UgaW5zdGFudGlhdGUgYSBEaWZmZXIgb2JqZWN0OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXMucnN0IGIvRG9jL2xpYnJhcnkvZGlzLnJzdAppbmRleCBlYzcxMTJkLi5kODY1NTBmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kaXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKQEAgLTI2LDcgKzI2LDggQEAKICAgIGRlZiBteWZ1bmMoYWxpc3QpOgogICAgICAgIHJldHVybiBsZW4oYWxpc3QpCiAKLXRoZSBmb2xsb3dpbmcgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIGRpc2Fzc2VtYmx5IG9mIDpmdW5jOmBteWZ1bmNgOjoKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBkaXNhc3NlbWJseSBvZgorOmZ1bmM6YG15ZnVuY2A6OgogCiAgICA+Pj4gZGlzLmRpcyhteWZ1bmMpCiAgICAgIDIgICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKGxlbikKQEAgLTM2LDggKzM3LDc3IEBACiAKIChUaGUgIjIiIGlzIGEgbGluZSBudW1iZXIpLgogCi1UaGUgOm1vZDpgZGlzYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzOgorQnl0ZWNvZGUgYW5hbHlzaXMKKy0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgYnl0ZWNvZGUgYW5hbHlzaXMgQVBJIGFsbG93cyBwaWVjZXMgb2YgUHl0aG9uIGNvZGUgdG8gYmUgd3JhcHBlZCBpbiBhCis6Y2xhc3M6YEJ5dGVjb2RlYCBvYmplY3QgdGhhdCBwcm92aWRlcyBlYXN5IGFjY2VzcyB0byBkZXRhaWxzIG9mIHRoZQorY29tcGlsZWQgY29kZS4KKworLi4gY2xhc3M6OiBCeXRlY29kZSh4LCAqLCBmaXJzdF9saW5lPU5vbmUsIGN1cnJlbnRfb2Zmc2V0PU5vbmUpCisKKyAgIEFuYWx5c2UgdGhlIGJ5dGVjb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBmdW5jdGlvbiwgbWV0aG9kLCBzdHJpbmcgb2YKKyAgIHNvdXJjZSBjb2RlLCBvciBhIGNvZGUgb2JqZWN0IChhcyByZXR1cm5lZCBieSA6ZnVuYzpgY29tcGlsZWApLgorCisgICBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgbWFueSBvZiB0aGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdywKKyAgIG1vc3Qgbm90YWJseSA6ZnVuYzpgZ2V0X2luc3RydWN0aW9uc2AsIGFzIGl0ZXJhdGluZyBvdmVyIGEKKyAgIDpjbGFzczpgQnl0ZWNvZGVgIGluc3RhbmNlIHlpZWxkcyB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyBhcworICAgOmNsYXNzOmBJbnN0cnVjdGlvbmAgaW5zdGFuY2VzLgorCisgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQKKyAgIGJlIHJlcG9ydGVkIGZvciB0aGUgZmlyc3Qgc291cmNlIGxpbmUgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLgorICAgT3RoZXJ3aXNlLCB0aGUgc291cmNlIGxpbmUgaW5mb3JtYXRpb24gKGlmIGFueSkgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbQorICAgdGhlIGRpc2Fzc2VtYmxlZCBjb2RlIG9iamVjdC4KKworICAgSWYgKmN1cnJlbnRfb2Zmc2V0KiBpcyBub3QgTm9uZSwgaXQgcmVmZXJzIHRvIGFuIGluc3RydWN0aW9uIG9mZnNldAorICAgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLiBTZXR0aW5nIHRoaXMgbWVhbnMgOm1ldGg6YGRpc2Agd2lsbCBkaXNwbGF5CisgICBhICJjdXJyZW50IGluc3RydWN0aW9uIiBtYXJrZXIgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIG9wY29kZS4KKworICAgLi4gY2xhc3NtZXRob2Q6OiBmcm9tX3RyYWNlYmFjayh0YikKKworICAgICAgQ29uc3RydWN0IGEgOmNsYXNzOmBCeXRlY29kZWAgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrLAorICAgICAgc2V0dGluZyAqY3VycmVudF9vZmZzZXQqIHRvIHRoZSBpbnN0cnVjdGlvbiByZXNwb25zaWJsZSBmb3IgdGhlCisgICAgICBleGNlcHRpb24uCisKKyAgIC4uIGRhdGE6OiBjb2Rlb2JqCisKKyAgICAgIFRoZSBjb21waWxlZCBjb2RlIG9iamVjdC4KKworICAgLi4gZGF0YTo6IGZpcnN0X2xpbmUKKworICAgICAgVGhlIGZpcnN0IHNvdXJjZSBsaW5lIG9mIHRoZSBjb2RlIG9iamVjdCAoaWYgYXZhaWxhYmxlKQorCisgICAuLiBtZXRob2Q6OiBkaXMoKQorCisgICAgICBSZXR1cm4gYSBmb3JtYXR0ZWQgdmlldyBvZiB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyAodGhlIHNhbWUgYXMKKyAgICAgIHByaW50ZWQgYnkgOmZ1bmM6YGRpc2AsIGJ1dCByZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nKS4KKworICAgLi4gbWV0aG9kOjogaW5mbygpCisKKyAgICAgIFJldHVybiBhIGZvcm1hdHRlZCBtdWx0aS1saW5lIHN0cmluZyB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgY29kZSBvYmplY3QsIGxpa2UgOmZ1bmM6YGNvZGVfaW5mb2AuCisKK0V4YW1wbGU6OgorCisgICAgPj4+IGJ5dGVjb2RlID0gZGlzLkJ5dGVjb2RlKG15ZnVuYykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIC4uLgorICAgIExPQURfR0xPQkFMCisgICAgTE9BRF9GQVNUCisgICAgQ0FMTF9GVU5DVElPTgorICAgIFJFVFVSTl9WQUxVRQorCisKK0FuYWx5c2lzIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBkaXNgIG1vZHVsZSBhbHNvIGRlZmluZXMgdGhlIGZvbGxvd2luZyBhbmFseXNpcyBmdW5jdGlvbnMgdGhhdAorY29udmVydCB0aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGRlc2lyZWQgb3V0cHV0LiBUaGV5IGNhbiBiZSB1c2VmdWwgaWYKK29ubHkgYSBzaW5nbGUgb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZCwgc28gdGhlIGludGVybWVkaWF0ZSBhbmFseXNpcworb2JqZWN0IGlzbid0IHVzZWZ1bDoKIAogLi4gZnVuY3Rpb246OiBjb2RlX2luZm8oeCkKIApAQCAtNTEsMTcgKzEyMSwyMiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAotLi4gZnVuY3Rpb246OiBzaG93X2NvZGUoeCkKKy4uIGZ1bmN0aW9uOjogc2hvd19jb2RlKHgsICosIGZpbGU9Tm9uZSkKIAogICAgUHJpbnQgZGV0YWlsZWQgY29kZSBvYmplY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLAotICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0IHRvIHN0ZG91dC4KKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdCB0byAqZmlsZSogKG9yIGBgc3lzLnN0ZG91dGBgIGlmICpmaWxlKgorICAgaXMgbm90IHNwZWNpZmllZCkuCiAKLSAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCkpYGAsIGludGVuZGVkIGZvcgotICAgaW50ZXJhY3RpdmUgZXhwbG9yYXRpb24gYXQgdGhlIGludGVycHJldGVyIHByb21wdC4KKyAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCksIGZpbGU9ZmlsZSlgYCwKKyAgIGludGVuZGVkIGZvciBpbnRlcmFjdGl2ZSBleHBsb3JhdGlvbiBhdCB0aGUgaW50ZXJwcmV0ZXIgcHJvbXB0LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotLi4gZnVuY3Rpb246OiBkaXMoeD1Ob25lKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIGBgZmlsZWBgIHBhcmFtZXRlcgorCisKKy4uIGZ1bmN0aW9uOjogZGlzKHg9Tm9uZSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSB0aGUgKngqIG9iamVjdC4gICp4KiBjYW4gZGVub3RlIGVpdGhlciBhIG1vZHVsZSwgYSBjbGFzcywgYQogICAgbWV0aG9kLCBhIGZ1bmN0aW9uLCBhIGNvZGUgb2JqZWN0LCBhIHN0cmluZyBvZiBzb3VyY2UgY29kZSBvciBhIGJ5dGUgc2VxdWVuY2UKQEAgLTcyLDE2ICsxNDcsMjggQEAKICAgIGRpc2Fzc2VtYmxlZC4gIElmIG5vIG9iamVjdCBpcyBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBkaXNhc3NlbWJsZXMgdGhlIGxhc3QKICAgIHRyYWNlYmFjay4KIAorICAgVGhlIGRpc2Fzc2VtYmx5IGlzIHdyaXR0ZW4gYXMgdGV4dCB0byB0aGUgc3VwcGxpZWQgYGBmaWxlYGAgYXJndW1lbnQgaWYKKyAgIHByb3ZpZGVkIGFuZCB0byBgYHN5cy5zdGRvdXRgYCBvdGhlcndpc2UuCiAKLS4uIGZ1bmN0aW9uOjogZGlzdGIodGI9Tm9uZSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpc3RiKHRiPU5vbmUsICosIGZpbGU9Tm9uZSkKIAogICAgRGlzYXNzZW1ibGUgdGhlIHRvcC1vZi1zdGFjayBmdW5jdGlvbiBvZiBhIHRyYWNlYmFjaywgdXNpbmcgdGhlIGxhc3QKICAgIHRyYWNlYmFjayBpZiBub25lIHdhcyBwYXNzZWQuICBUaGUgaW5zdHJ1Y3Rpb24gY2F1c2luZyB0aGUgZXhjZXB0aW9uIGlzCiAgICBpbmRpY2F0ZWQuCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgogCi0uLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xKQotICAgICAgICAgICAgICBkaXNjbyhjb2RlLCBsYXN0aT0tMSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpCisgICAgICAgICAgICAgIGRpc2NvKGNvZGUsIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpCiAKICAgIERpc2Fzc2VtYmxlIGEgY29kZSBvYmplY3QsIGluZGljYXRpbmcgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaWYgKmxhc3RpKiB3YXMKICAgIHByb3ZpZGVkLiAgVGhlIG91dHB1dCBpcyBkaXZpZGVkIGluIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKQEAgLTk3LDYgKzE4NCwyOCBAQAogICAgVGhlIHBhcmFtZXRlciBpbnRlcnByZXRhdGlvbiByZWNvZ25pemVzIGxvY2FsIGFuZCBnbG9iYWwgdmFyaWFibGUgbmFtZXMsCiAgICBjb25zdGFudCB2YWx1ZXMsIGJyYW5jaCB0YXJnZXRzLCBhbmQgY29tcGFyZSBvcGVyYXRvcnMuCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgYGBmaWxlYGAgcGFyYW1ldGVyCisKKworLi4gZnVuY3Rpb246OiBnZXRfaW5zdHJ1Y3Rpb25zKHgsICosIGZpcnN0X2xpbmU9Tm9uZSkKKworICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24sIG1ldGhvZCwKKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdC4KKworICAgVGhlIGl0ZXJhdG9yIGdlbmVyYXRlcyBhIHNlcmllcyBvZiA6Y2xhc3M6YEluc3RydWN0aW9uYCBuYW1lZCB0dXBsZXMKKyAgIGdpdmluZyB0aGUgZGV0YWlscyBvZiBlYWNoIG9wZXJhdGlvbiBpbiB0aGUgc3VwcGxpZWQgY29kZS4KKworICAgSWYgKmZpcnN0X2xpbmUqIGlzIG5vdCBOb25lLCBpdCBpbmRpY2F0ZXMgdGhlIGxpbmUgbnVtYmVyIHRoYXQgc2hvdWxkCisgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgIE90aGVyd2lzZSwgdGhlIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20KKyAgIHRoZSBkaXNhc3NlbWJsZWQgY29kZSBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZmluZGxpbmVzdGFydHMoY29kZSkKIApAQCAtMTExLDYxICsyMjAsNjcgQEAKICAgIHJldHVybiBhIGxpc3Qgb2YgdGhlc2Ugb2Zmc2V0cy4KIAogCi0uLiBkYXRhOjogb3BuYW1lCisuLiBmdW5jdGlvbjo6IHN0YWNrX2VmZmVjdChvcGNvZGUsIFtvcGFyZ10pCiAKLSAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKyAgIENvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiAqb3Bjb2RlKiB3aXRoIGFyZ3VtZW50ICpvcGFyZyouCiAKLQotLi4gZGF0YTo6IG9wbWFwCi0KLSAgIERpY3Rpb25hcnkgbWFwcGluZyBvcGVyYXRpb24gbmFtZXMgdG8gYnl0ZWNvZGVzLgotCi0KLS4uIGRhdGE6OiBjbXBfb3AKLQotICAgU2VxdWVuY2Ugb2YgYWxsIGNvbXBhcmUgb3BlcmF0aW9uIG5hbWVzLgotCi0KLS4uIGRhdGE6OiBoYXNjb25zdAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgY29uc3RhbnQgcGFyYW1ldGVyLgotCi0KLS4uIGRhdGE6OiBoYXNmcmVlCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGZyZWUgdmFyaWFibGUuCi0KLQotLi4gZGF0YTo6IGhhc25hbWUKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGFuIGF0dHJpYnV0ZSBieSBuYW1lLgotCi0KLS4uIGRhdGE6OiBoYXNqcmVsCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSByZWxhdGl2ZSBqdW1wIHRhcmdldC4KLQotCi0uLiBkYXRhOjogaGFzamFicwotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGFuIGFic29sdXRlIGp1bXAgdGFyZ2V0LgotCi0KLS4uIGRhdGE6OiBoYXNsb2NhbAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBsb2NhbCB2YXJpYWJsZS4KLQotCi0uLiBkYXRhOjogaGFzY29tcGFyZQotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgb2YgQm9vbGVhbiBvcGVyYXRpb25zLgotCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gX2J5dGVjb2RlczoKIAogUHl0aG9uIEJ5dGVjb2RlIEluc3RydWN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitUaGUgOmZ1bmM6YGdldF9pbnN0cnVjdGlvbnNgIGZ1bmN0aW9uIGFuZCA6Y2xhc3M6YEJ5dGVjb2RlYCBjbGFzcyBwcm92aWRlCitkZXRhaWxzIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBhcyA6Y2xhc3M6YEluc3RydWN0aW9uYCBpbnN0YW5jZXM6CisKKy4uIGNsYXNzOjogSW5zdHJ1Y3Rpb24KKworICAgRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgLi4gZGF0YTo6IG9wY29kZQorCisgICAgICBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbiwgY29ycmVzcG9uZGluZyB0byB0aGUgb3Bjb2RlIHZhbHVlcyBsaXN0ZWQKKyAgICAgIGJlbG93IGFuZCB0aGUgYnl0ZWNvZGUgdmFsdWVzIGluIHRoZSA6cmVmOmBvcGNvZGVfY29sbGVjdGlvbnNgLgorCisKKyAgIC4uIGRhdGE6OiBvcG5hbWUKKworICAgICAgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisKKworICAgLi4gZGF0YTo6IGFyZworCisgICAgICBudW1lcmljIGFyZ3VtZW50IHRvIG9wZXJhdGlvbiAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKworCisgICAuLiBkYXRhOjogYXJndmFsCisKKyAgICAgIHJlc29sdmVkIGFyZyB2YWx1ZSAoaWYga25vd24pLCBvdGhlcndpc2Ugc2FtZSBhcyBhcmcKKworCisgICAuLiBkYXRhOjogYXJncmVwcgorCisgICAgICBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRpb24gYXJndW1lbnQKKworCisgICAuLiBkYXRhOjogb2Zmc2V0CisKKyAgICAgIHN0YXJ0IGluZGV4IG9mIG9wZXJhdGlvbiB3aXRoaW4gYnl0ZWNvZGUgc2VxdWVuY2UKKworCisgICAuLiBkYXRhOjogc3RhcnRzX2xpbmUKKworICAgICAgbGluZSBzdGFydGVkIGJ5IHRoaXMgb3Bjb2RlIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorCisKKyAgIC4uIGRhdGE6OiBpc19qdW1wX3RhcmdldAorCisgICAgICBgYFRydWVgYCBpZiBvdGhlciBjb2RlIGp1bXBzIHRvIGhlcmUsIG90aGVyd2lzZSBgYEZhbHNlYGAKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIFB5dGhvbiBjb21waWxlciBjdXJyZW50bHkgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogCiAKQEAgLTUwNiwxMiArNjIxLDYgQEAKICAgIC4uIFhYWCBleHBsYWluIHRoZSBXSFkgc3R1ZmYhCiAKIAotLi4gb3Bjb2RlOjogU1RPUkVfTE9DQUxTCi0KLSAgIFBvcHMgVE9TIGZyb20gdGhlIHN0YWNrIGFuZCBzdG9yZXMgaXQgYXMgdGhlIGN1cnJlbnQgZnJhbWUncyBgYGZfbG9jYWxzYGAuCi0gICBUaGlzIGlzIHVzZWQgaW4gY2xhc3MgY29uc3RydWN0aW9uLgotCi0KIEFsbCBvZiB0aGUgZm9sbG93aW5nIG9wY29kZXMgZXhwZWN0IGFyZ3VtZW50cy4gIEFuIGFyZ3VtZW50IGlzIHR3byBieXRlcywgd2l0aAogdGhlIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSBsYXN0LgogCkBAIC03MjIsNiArODMxLDEzIEBACiAgICBQdXNoZXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB0aGUgY2VsbCBjb250YWlucyBvbiB0aGUgc3RhY2suCiAKIAorLi4gb3Bjb2RlOjogTE9BRF9DTEFTU0RFUkVGIChpKQorCisgICBNdWNoIGxpa2UgOm9wY29kZTpgTE9BRF9ERVJFRmAgYnV0IGZpcnN0IGNoZWNrcyB0aGUgbG9jYWxzIGRpY3Rpb25hcnkgYmVmb3JlCisgICBjb25zdWx0aW5nIHRoZSBjZWxsLiAgVGhpcyBpcyB1c2VkIGZvciBsb2FkaW5nIGZyZWUgdmFyaWFibGVzIGluIGNsYXNzCisgICBib2RpZXMuCisKKwogLi4gb3Bjb2RlOjogU1RPUkVfREVSRUYgKGkpCiAKICAgIFN0b3JlcyBUT1MgaW50byB0aGUgY2VsbCBjb250YWluZWQgaW4gc2xvdCAqaSogb2YgdGhlIGNlbGwgYW5kIGZyZWUgdmFyaWFibGUKQEAgLTgyMCwzICs5MzYsNjIgQEAKICAgIHdoaWNoIGRvbid0IHRha2UgYXJndW1lbnRzIGBgPCBIQVZFX0FSR1VNRU5UYGAgYW5kIHRob3NlIHdoaWNoIGRvIGBgPj0KICAgIEhBVkVfQVJHVU1FTlRgYC4KIAorLi4gX29wY29kZV9jb2xsZWN0aW9uczoKKworT3Bjb2RlIGNvbGxlY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29sbGVjdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBhdXRvbWF0aWMgaW50cm9zcGVjdGlvbiBvZiBieXRlY29kZQoraW5zdHJ1Y3Rpb25zOgorCisuLiBkYXRhOjogb3BuYW1lCisKKyAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKworCisuLiBkYXRhOjogb3BtYXAKKworICAgRGljdGlvbmFyeSBtYXBwaW5nIG9wZXJhdGlvbiBuYW1lcyB0byBieXRlY29kZXMuCisKKworLi4gZGF0YTo6IGNtcF9vcAorCisgICBTZXF1ZW5jZSBvZiBhbGwgY29tcGFyZSBvcGVyYXRpb24gbmFtZXMuCisKKworLi4gZGF0YTo6IGhhc2NvbnN0CisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSBjb25zdGFudCBwYXJhbWV0ZXIuCisKKworLi4gZGF0YTo6IGhhc2ZyZWUKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGEgZnJlZSB2YXJpYWJsZSAobm90ZSB0aGF0ICdmcmVlJyBpbgorICAgdGhpcyBjb250ZXh0IHJlZmVycyB0byBuYW1lcyBpbiB0aGUgY3VycmVudCBzY29wZSB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5CisgICBpbm5lciBzY29wZXMgb3IgbmFtZXMgaW4gb3V0ZXIgc2NvcGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGlzIHNjb3BlLgorICAgSXQgZG9lcyAqbm90KiBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIG9yIGJ1aWx0aW4gc2NvcGVzKS4KKworCisuLiBkYXRhOjogaGFzbmFtZQorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYW4gYXR0cmlidXRlIGJ5IG5hbWUuCisKKworLi4gZGF0YTo6IGhhc2pyZWwKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIHJlbGF0aXZlIGp1bXAgdGFyZ2V0LgorCisKKy4uIGRhdGE6OiBoYXNqYWJzCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYW4gYWJzb2x1dGUganVtcCB0YXJnZXQuCisKKworLi4gZGF0YTo6IGhhc2xvY2FsCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGxvY2FsIHZhcmlhYmxlLgorCisKKy4uIGRhdGE6OiBoYXNjb21wYXJlCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyBvZiBCb29sZWFuIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXN0cmlidXRpb24ucnN0IGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjNmNWRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApAQCAtMCwwICsxLDE0IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU29mdHdhcmUgUGFja2FnaW5nIGFuZCBEaXN0cmlidXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZXNlIGxpYnJhcmllcyBoZWxwIHlvdSB3aXRoIHB1Ymxpc2hpbmcgYW5kIGluc3RhbGxpbmcgUHl0aG9uIHNvZnR3YXJlLgorV2hpbGUgdGhlc2UgbW9kdWxlcyBhcmUgZGVzaWduZWQgdG8gd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorYFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwczovL3B5cGkucHl0aG9uLm9yZz5gX18sIHRoZXkgY2FuIGFsc28gYmUgdXNlZAord2l0aCBhIGxvY2FsIGluZGV4IHNlcnZlciwgb3Igd2l0aG91dCBhbnkgaW5kZXggc2VydmVyIGF0IGFsbC4KKworLi4gdG9jdHJlZTo6CisKKyAgIGRpc3R1dGlscy5yc3QKKyAgIGVuc3VyZXBpcC5yc3QKKyAgIHZlbnYucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXN0dXRpbHMucnN0IGIvRG9jL2xpYnJhcnkvZGlzdHV0aWxzLnJzdAppbmRleCA2NjY2YTliLi44ZTM3MzJiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kaXN0dXRpbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Rpc3R1dGlscy5yc3QKQEAgLTEyLDE0ICsxMiwxNSBAQAogMTAwJS1wdXJlIFB5dGhvbiwgb3IgbWF5IGJlIGV4dGVuc2lvbiBtb2R1bGVzIHdyaXR0ZW4gaW4gQywgb3IgbWF5IGJlCiBjb2xsZWN0aW9ucyBvZiBQeXRob24gcGFja2FnZXMgd2hpY2ggaW5jbHVkZSBtb2R1bGVzIGNvZGVkIGluIGJvdGggUHl0aG9uIGFuZCBDLgogCitNb3N0IFB5dGhvbiB1c2VycyB3aWxsICpub3QqIHdhbnQgdG8gdXNlIHRoaXMgbW9kdWxlIGRpcmVjdGx5LCBidXQgaW5zdGVhZAordXNlIHRoZSBjcm9zcy12ZXJzaW9uIHRvb2xzIG1haW50YWluZWQgYnkgdGhlIFB5dGhvbiBQYWNrYWdpbmcgQXV0aG9yaXR5LgorUmVmZXIgdG8gdGhlIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgPGh0dHA6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZz5gXworZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLVVzZXIgZG9jdW1lbnRhdGlvbiBhbmQgQVBJIHJlZmVyZW5jZSBhcmUgcHJvdmlkZWQgaW4gYW5vdGhlciBkb2N1bWVudDoKK0ZvciB0aGUgYmVuZWZpdHMgb2YgcGFja2FnaW5nIHRvb2wgYXV0aG9ycyBhbmQgdXNlcnMgc2Vla2luZyBhIGRlZXBlcgordW5kZXJzdGFuZGluZyBvZiB0aGUgZGV0YWlscyBvZiB0aGUgY3VycmVudCBwYWNrYWdpbmcgYW5kIGRpc3RyaWJ1dGlvbgorc3lzdGVtLCB0aGUgbGVnYWN5IDptb2Q6YGRpc3R1dGlsc2AgYmFzZWQgdXNlciBkb2N1bWVudGF0aW9uIGFuZCBBUEkKK3JlZmVyZW5jZSByZW1haW4gYXZhaWxhYmxlOgogCi0uLiBzZWVhbHNvOjoKLQotICAgOnJlZjpgZGlzdHV0aWxzLWluZGV4YAotICAgICAgVGhlIG1hbnVhbCBmb3IgZGV2ZWxvcGVycyBhbmQgcGFja2FnZXJzIG9mIFB5dGhvbiBtb2R1bGVzLiAgVGhpcyBkZXNjcmliZXMKLSAgICAgIGhvdyB0byBwcmVwYXJlIDptb2Q6YGRpc3R1dGlsc2BcIC1iYXNlZCBwYWNrYWdlcyBzbyB0aGF0IHRoZXkgbWF5IGJlCi0gICAgICBlYXNpbHkgaW5zdGFsbGVkIGludG8gYW4gZXhpc3RpbmcgUHl0aG9uIGluc3RhbGxhdGlvbi4gIEl0IGFsc28gY29udGFpbnMKLSAgICAgIGluc3RydWN0aW9ucyBmb3IgZW5kLXVzZXJzIHdhbnRpbmcgdG8gaW5zdGFsbCBhIGRpc3R1dGlscy1iYXNlZCBwYWNrYWdlLAotICAgICAgOnJlZjpgaW5zdGFsbC1pbmRleGAuCisqIDpyZWY6YGluc3RhbGwtaW5kZXhgCisqIDpyZWY6YGRpc3R1dGlscy1pbmRleGAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKaW5kZXggMjIyYzcxOS4uNTA2MjZlOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKQEAgLTI3OCw2ICsyNzgsMTAgQEAKIEFueSBjbGFzc2VzIGZvdW5kIGFyZSByZWN1cnNpdmVseSBzZWFyY2hlZCBzaW1pbGFybHksIHRvIHRlc3QgZG9jc3RyaW5ncyBpbgogdGhlaXIgY29udGFpbmVkIG1ldGhvZHMgYW5kIG5lc3RlZCBjbGFzc2VzLgogCisuLiBpbXBsLWRldGFpbDo6CisgICBQcmlvciB0byB2ZXJzaW9uIDMuNCwgZXh0ZW5zaW9uIG1vZHVsZXMgd3JpdHRlbiBpbiBDIHdlcmUgbm90IGZ1bGx5CisgICBzZWFyY2hlZCBieSBkb2N0ZXN0LgorCiAKIC4uIF9kb2N0ZXN0LWZpbmRpbmctZXhhbXBsZXM6CiAKQEAgLTQ5NSw3ICs0OTksMTEgQEAKIEEgbnVtYmVyIG9mIG9wdGlvbiBmbGFncyBjb250cm9sIHZhcmlvdXMgYXNwZWN0cyBvZiBkb2N0ZXN0J3MgYmVoYXZpb3IuCiBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWdzIGFyZSBzdXBwbGllZCBhcyBtb2R1bGUgY29uc3RhbnRzLCB3aGljaCBjYW4gYmUKIG9yJ2VkIHRvZ2V0aGVyIGFuZCBwYXNzZWQgdG8gdmFyaW91cyBmdW5jdGlvbnMuICBUaGUgbmFtZXMgY2FuIGFsc28gYmUgdXNlZCBpbgotOnJlZjpgZG9jdGVzdCBkaXJlY3RpdmVzIDxkb2N0ZXN0LWRpcmVjdGl2ZXM+YC4KKzpyZWY6YGRvY3Rlc3QgZGlyZWN0aXZlcyA8ZG9jdGVzdC1kaXJlY3RpdmVzPmAsIGFuZCBtYXkgYmUgcGFzc2VkIHRvIHRoZQorZG9jdGVzdCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHZpYSB0aGUgYGAtb2BgIG9wdGlvbi4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICBUaGUgYGAtb2BgIGNvbW1hbmQgbGluZSBvcHRpb24uCiAKIFRoZSBmaXJzdCBncm91cCBvZiBvcHRpb25zIGRlZmluZSB0ZXN0IHNlbWFudGljcywgY29udHJvbGxpbmcgYXNwZWN0cyBvZiBob3cKIGRvY3Rlc3QgZGVjaWRlcyB3aGV0aGVyIGFjdHVhbCBvdXRwdXQgbWF0Y2hlcyBhbiBleGFtcGxlJ3MgZXhwZWN0ZWQgb3V0cHV0OgpAQCAtNjMzLDYgKzY0MSwxOSBAQAogICAgdGhlIG91dHB1dCBpcyBzdXBwcmVzc2VkLgogCiAKKy4uIGRhdGE6OiBGQUlMX0ZBU1QKKworICAgV2hlbiBzcGVjaWZpZWQsIGV4aXQgYWZ0ZXIgdGhlIGZpcnN0IGZhaWxpbmcgZXhhbXBsZSBhbmQgZG9uJ3QgYXR0ZW1wdCB0byBydW4KKyAgIHRoZSByZW1haW5pbmcgZXhhbXBsZXMuIFRodXMsIHRoZSBudW1iZXIgb2YgZmFpbHVyZXMgcmVwb3J0ZWQgd2lsbCBiZSBhdCBtb3N0CisgICAxLiAgVGhpcyBmbGFnIG1heSBiZSB1c2VmdWwgZHVyaW5nIGRlYnVnZ2luZywgc2luY2UgZXhhbXBsZXMgYWZ0ZXIgdGhlIGZpcnN0CisgICBmYWlsdXJlIHdvbid0IGV2ZW4gcHJvZHVjZSBkZWJ1Z2dpbmcgb3V0cHV0LgorCisgICBUaGUgZG9jdGVzdCBjb21tYW5kIGxpbmUgYWNjZXB0cyB0aGUgb3B0aW9uIGBgLWZgYCBhcyBhIHNob3J0aGFuZCBmb3IgYGAtbworICAgRkFJTF9GQVNUYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGRhdGE6OiBSRVBPUlRJTkdfRkxBR1MKIAogICAgQSBiaXRtYXNrIG9yJ2luZyB0b2dldGhlciBhbGwgdGhlIHJlcG9ydGluZyBmbGFncyBhYm92ZS4KQEAgLTEyNjksOSArMTI5MCw4IEBACiAKICAgIEEgcHJvY2Vzc2luZyBjbGFzcyB1c2VkIHRvIGV4dHJhY3QgdGhlIDpjbGFzczpgRG9jVGVzdGBcIHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8KICAgIGEgZ2l2ZW4gb2JqZWN0LCBmcm9tIGl0cyBkb2NzdHJpbmcgYW5kIHRoZSBkb2NzdHJpbmdzIG9mIGl0cyBjb250YWluZWQgb2JqZWN0cy4KLSAgIDpjbGFzczpgRG9jVGVzdGBcIHMgY2FuIGN1cnJlbnRseSBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIG9iamVjdCB0eXBlczoKLSAgIG1vZHVsZXMsIGZ1bmN0aW9ucywgY2xhc3NlcywgbWV0aG9kcywgc3RhdGljbWV0aG9kcywgY2xhc3NtZXRob2RzLCBhbmQKLSAgIHByb3BlcnRpZXMuCisgICA6Y2xhc3M6YERvY1Rlc3RgXCBzIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBtb2R1bGVzLCBjbGFzc2VzLCBmdW5jdGlvbnMsCisgICBtZXRob2RzLCBzdGF0aWNtZXRob2RzLCBjbGFzc21ldGhvZHMsIGFuZCBwcm9wZXJ0aWVzLgogCiAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKnZlcmJvc2UqIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIG9iamVjdHMgc2VhcmNoZWQgYnkKICAgIHRoZSBmaW5kZXIuICBJdCBkZWZhdWx0cyB0byBgYEZhbHNlYGAgKG5vIG91dHB1dCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QKaW5kZXggMzJjZWNmMy4uY2JiY2I3OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdApAQCAtNDAsNiArNDAsMzYgQEAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKIAogCisuLiBfZW1haWwtY29udGVudG1hbmFnZXItYXBpLWV4YW1wbGVzOgorCitFeGFtcGxlcyB1c2luZyB0aGUgUHJvdmlzaW9uYWwgQVBJCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitIZXJlIGlzIGEgcmV3b3JraW5nIG9mIHRoZSBsYXN0IGV4YW1wbGUgdXNpbmcgdGhlIHByb3Zpc2lvbmFsIEFQSS4gIFRvIG1ha2UKK3RoaW5ncyBhIGJpdCBtb3JlIGludGVyZXN0aW5nLCB3ZSBpbmNsdWRlIGEgcmVsYXRlZCBpbWFnZSBpbiB0aGUgaHRtbCBwYXJ0LCBhbmQKK3dlIHNhdmUgYSBjb3B5IG9mIHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQgdG8gZGlzaywgYXMgd2VsbCBhcyBzZW5kaW5nIGl0LgorCitUaGlzIGV4YW1wbGUgYWxzbyBzaG93cyBob3cgZWFzeSBpdCBpcyB0byBpbmNsdWRlIG5vbi1BU0NJSSwgYW5kIHNpbXBsaWZpZXMgdGhlCitzZW5kaW5nIG9mIHRoZSBtZXNzYWdlIHVzaW5nIHRoZSA6bWV0aDpgLnNlbmRfbWVzc2FnZWAgbWV0aG9kIG9mIHRoZQorOm1vZDpgc210cGxpYmAgbW9kdWxlLgorCisuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKKworSWYgd2Ugd2VyZSBpbnN0ZWFkIHNlbnQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgbGFzdCBleGFtcGxlLCBoZXJlIGlzIG9uZQord2F5IHdlIGNvdWxkIHByb2Nlc3MgaXQ6CisKKy4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvZW1haWwtcmVhZC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5CisKK1VwIHRvIHRoZSBwcm9tcHQsIHRoZSBvdXRwdXQgZnJvbSB0aGUgYWJvdmUgaXM6OgorCisgICAgVG86IFBlbmVsb3BlIFB1c3N5Y2F0IDwicGVuZWxvcGVAZXhhbXBsZS5jb20iPiwgRmFicmV0dGUgUHVzc3ljYXQgPCJmYWJyZXR0ZUBleGFtcGxlLmNvbSI+CisgICAgRnJvbTogUGVww6kgTGUgUGV3IDxwZXBlQGV4YW1wbGUuY29tPgorICAgIFN1YmplY3Q6IEF5b25zIGFzcGVyZ2VzIHBvdXIgbGUgZMOpamV1bmVyCisKKyAgICBTYWx1dCEKKworICAgIENlbGEgcmVzc2VtYmxlIMOgIHVuIGV4Y2VsbGVudCByZWNpcGllWzFdIGTDqWpldW5lci4KKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWzFdIFRoYW5rcyB0byBNYXR0aGV3IERpeG9uIENvd2xlcyBmb3IgdGhlIG9yaWdpbmFsIGluc3BpcmF0aW9uIGFuZCBleGFtcGxlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjBiZmRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0CkBAIC0wLDAgKzEsNDMwIEBACis6bW9kOmBlbWFpbC5jb250ZW50bWFuYWdlcmA6IE1hbmFnaW5nIE1JTUUgQ29udGVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbW9kdWxlOjogZW1haWwuY29udGVudG1hbmFnZXIKKyAgIDpzeW5vcHNpczogU3RvcmluZyBhbmQgUmV0cmlldmluZyBDb250ZW50IGZyb20gTUlNRSBQYXJ0cworCisuLiBtb2R1bGVhdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KKy4uIHNlY3Rpb25hdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KKworCisuLiBub3RlOjoKKworICAgVGhlIGNvbnRlbnRtYW5hZ2VyIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCisgICA6dGVybTpgcHJvdmlzaW9uYWwgYmFzaXMgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4gQmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBtb2R1bGUpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIGFzIGEgOnRlcm06YHByb3Zpc2lvbmFsIG1vZHVsZSA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLgorCitUaGUgOm1vZDpgfmVtYWlsLm1lc3NhZ2VgIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIHRoYXQgY2FuIHJlcHJlc2VudCBhbgorYXJiaXRyYXJ5IGVtYWlsIG1lc3NhZ2UuICBUaGF0IGJhc2ljIG1lc3NhZ2UgbW9kZWwgaGFzIGEgdXNlZnVsIGFuZCBmbGV4aWJsZQorQVBJLCBidXQgaXQgcHJvdmlkZXMgb25seSBhIGxvd2VyLWxldmVsIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZ2VuZXJpYworcGFydHMgb2YgYSBtZXNzYWdlICh0aGUgaGVhZGVycywgZ2VuZXJpYyBoZWFkZXIgcGFyYW1ldGVycywgYW5kIHRoZSBwYXlsb2FkLAord2hpY2ggbWF5IGJlIGEgbGlzdCBvZiBzdWItcGFydHMpLiAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xhc3NlcyBhbmQgdG9vbHMKK3RoYXQgcHJvdmlkZSBhbiBlbmhhbmNlZCBhbmQgZXh0ZW5zaWJsZSBBUEkgZm9yIGRlYWxpbmcgd2l0aCB2YXJpb3VzIHNwZWNpZmljCit0eXBlcyBvZiBjb250ZW50LCBpbmNsdWRpbmcgdGhlIGFiaWxpdHkgdG8gcmV0cmlldmUgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UKK2FzIGEgc3BlY2lhbGl6ZWQgb2JqZWN0IHR5cGUgcmF0aGVyIHRoYW4gYXMgYSBzaW1wbGUgYnl0ZXMgb2JqZWN0LiAgVGhlIG1vZHVsZQorYXV0b21hdGljYWxseSB0YWtlcyBjYXJlIG9mIHRoZSBSRkMtc3BlY2lmaWVkIE1JTUUgZGV0YWlscyAocmVxdWlyZWQgaGVhZGVycworYW5kIHBhcmFtZXRlcnMsIGV0Yy4pIGZvciB0aGUgY2VydGFpbiBjb21tb24gY29udGVudCB0eXBlcyBjb250ZW50IHByb3BlcnRpZXMsCithbmQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCB0eXBlcyBjYW4gYmUgYWRkZWQgYnkgYW4gYXBwbGljYXRpb24gdXNpbmcgdGhlCitleHRlbnNpb24gbWVjaGFuaXNtcy4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZXBvbnltb3VzICJDb250ZW50IE1hbmFnZXIiIGNsYXNzZXMuICBUaGUgYmFzZQorOmNsYXNzOmAuQ29udGVudE1hbmFnZXJgIGNsYXNzIGRlZmluZXMgYW4gQVBJIGZvciByZWdpc3RlcmluZyBjb250ZW50CittYW5hZ2VtZW50IGZ1bmN0aW9ucyB3aGljaCBleHRyYWN0IGRhdGEgZnJvbSBgYE1lc3NhZ2VgYCBvYmplY3RzIG9yIGluc2VydCBkYXRhCithbmQgaGVhZGVycyBpbnRvIGBgTWVzc2FnZWBgIG9iamVjdHMsIHRodXMgcHJvdmlkaW5nIGEgd2F5IG9mIGNvbnZlcnRpbmcKK2JldHdlZW4gYGBNZXNzYWdlYGAgb2JqZWN0cyBjb250YWluaW5nIGRhdGEgYW5kIG90aGVyIHJlcHJlc2VudGF0aW9ucyBvZiB0aGF0CitkYXRhIChQeXRob24gZGF0YSB0eXBlcywgc3BlY2lhbGl6ZWQgUHl0aG9uIG9iamVjdHMsIGV4dGVybmFsIGZpbGVzLCBldGMpLiAgVGhlCittb2R1bGUgYWxzbyBkZWZpbmVzIG9uZSBjb25jcmV0ZSBjb250ZW50IG1hbmFnZXI6IDpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYAorY29udmVydHMgYmV0d2VlbiBNSU1FIGNvbnRlbnQgdHlwZXMgYW5kIGBgc3RyYGAgb3IgYGBieXRlc2BgIGRhdGEuICBJdCBhbHNvCitwcm92aWRlcyBhIGNvbnZlbmllbnQgQVBJIGZvciBtYW5hZ2luZyB0aGUgTUlNRSBwYXJhbWV0ZXJzIHdoZW4gaW5zZXJ0aW5nCitjb250ZW50IGludG8gYGBNZXNzYWdlYGBcIHMuICBJdCBhbHNvIGhhbmRsZXMgaW5zZXJ0aW5nIGFuZCBleHRyYWN0aW5nCitgYE1lc3NhZ2VgYCBvYmplY3RzIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgYG1lc3NhZ2UvcmZjODIyYGAgY29udGVudCB0eXBlLgorCitBbm90aGVyIHBhcnQgb2YgdGhlIGVuaGFuY2VkIGludGVyZmFjZSBpcyBzdWJjbGFzc2VzIG9mCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHRoYXQgcHJvdmlkZSBuZXcgY29udmVuaWVuY2UgQVBJIGZ1bmN0aW9ucywKK2luY2x1ZGluZyBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBjYWxsaW5nIHRoZSBDb250ZW50IE1hbmFnZXJzIGRlcml2ZWQgZnJvbQordGhpcyBtb2R1bGUuCisKKy4uIG5vdGU6OgorCisgICBBbHRob3VnaCA6Y2xhc3M6YC5FbWFpbE1lc3NhZ2VgIGFuZCA6Y2xhc3M6YC5NSU1FUGFydGAgYXJlIGN1cnJlbnRseQorICAgZG9jdW1lbnRlZCBpbiB0aGlzIG1vZHVsZSBiZWNhdXNlIG9mIHRoZSBwcm92aXNpb25hbCBuYXR1cmUgb2YgdGhlIGNvZGUsIHRoZQorICAgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gdGhlIDptb2Q6YGVtYWlsLm1lc3NhZ2VgIG1vZHVsZS4KKworLi4gY3VycmVudG1vZHVsZTo6IGVtYWlsLm1lc3NhZ2UKKworLi4gY2xhc3M6OiBFbWFpbE1lc3NhZ2UocG9saWN5PWRlZmF1bHQpCisKKyAgIElmICpwb2xpY3kqIGlzIHNwZWNpZmllZCAoaXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgCisgICBjbGFzcykgdXNlIHRoZSBydWxlcyBpdCBzcGVjaWZpZXMgdG8gdWRwYXRlIGFuZCBzZXJpYWxpemUgdGhlIHJlcHJlc2VudGF0aW9uCisgICBvZiB0aGUgbWVzc2FnZS4gIElmICpwb2xpY3kqIGlzIG5vdCBzZXQsIHVzZSB0aGUKKyAgIDpjbGFzczpgfmVtYWlsLnBvbGljeS5kZWZhdWx0YCBwb2xpY3ksIHdoaWNoIGZvbGxvd3MgdGhlIHJ1bGVzIG9mIHRoZSBlbWFpbAorICAgUkZDcyBleGNlcHQgZm9yIGxpbmUgZW5kaW5ncyAoaW5zdGVhZCBvZiB0aGUgUkZDIG1hbmRhdGVkIGBgXHJcbmBgLCBpdCB1c2VzCisgICB0aGUgUHl0aG9uIHN0YW5kYXJkIGBgXG5gYCBsaW5lIGVuZGluZ3MpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KKworICAgVGhpcyBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAuICBJdCBhZGRzCisgICB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisKKworICAgLi4gYXR0cmlidXRlOjogaXNfYXR0YWNobWVudAorCisgICAgICBTZXQgdG8gYGBUcnVlYGAgaWYgdGhlcmUgaXMgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyCisgICAgICBhbmQgaXRzIChjYXNlIGluc2Vuc2l0aXZlKSB2YWx1ZSBpcyBgYGF0dGFjaG1lbnRgYCwgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworCisgICAuLiBtZXRob2Q6OiBnZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpKQorCisgICAgICBSZXR1cm4gdGhlIE1JTUUgcGFydCB0aGF0IGlzIHRoZSBiZXN0IGNhbmRpZGF0ZSB0byBiZSB0aGUgImJvZHkiIG9mIHRoZQorICAgICAgbWVzc2FnZS4KKworICAgICAgKnByZWZlcmVuY2VsaXN0KiBtdXN0IGJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBmcm9tIHRoZSBzZXQgYGByZWxhdGVkYGAsCisgICAgICBgYGh0bWxgYCwgYW5kIGBgcGxhaW5gYCwgYW5kIGluZGljYXRlcyB0aGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBmb3IgdGhlCisgICAgICBjb250ZW50IHR5cGUgb2YgdGhlIHBhcnQgcmV0dXJuZWQuCisKKyAgICAgIFN0YXJ0IGxvb2tpbmcgZm9yIGNhbmRpZGF0ZSBtYXRjaGVzIHdpdGggdGhlIG9iamVjdCBvbiB3aGljaCB0aGUKKyAgICAgIGBgZ2V0X2JvZHlgYCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAgICBJZiBgYHJlbGF0ZWRgYCBpcyBub3QgaW5jbHVkZWQgaW4gKnByZWZlcmVuY2VsaXN0KiwgY29uc2lkZXIgdGhlIHJvb3QKKyAgICAgIHBhcnQgKG9yIHN1YnBhcnQgb2YgdGhlIHJvb3QgcGFydCkgb2YgYW55IHJlbGF0ZWQgZW5jb3VudGVyZWQgYXMgYQorICAgICAgY2FuZGlkYXRlIGlmIHRoZSAoc3ViLSlwYXJ0IG1hdGNoZXMgYSBwcmVmZXJlbmNlLgorCisgICAgICBXaGVuIGVuY291bnRlcmluZyBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgY2hlY2sgdGhlIGBgc3RhcnRgYCBwYXJhbWV0ZXIKKyAgICAgIGFuZCBpZiBhIHBhcnQgd2l0aCBhIG1hdGNoaW5nIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBpcyBmb3VuZCwgY29uc2lkZXIKKyAgICAgIG9ubHkgaXQgd2hlbiBsb29raW5nIGZvciBjYW5kaWRhdGUgbWF0Y2hlcy4gIE90aGVyd2lzZSBjb25zaWRlciBvbmx5IHRoZQorICAgICAgZmlyc3QgKGRlZmF1bHQgcm9vdCkgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLgorCisgICAgICBJZiBhIHBhcnQgaGFzIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlciwgb25seSBjb25zaWRlcgorICAgICAgdGhlIHBhcnQgYSBjYW5kaWRhdGUgbWF0Y2ggaWYgdGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgaXMgYGBpbmxpbmVgYC4KKworICAgICAgSWYgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBtYXRjaGVzIGFueSBvZiB0aGUgcHJlZmVyZW5jZXMgaW4KKyAgICAgICpwcmVmZXJuZWNsaXN0KiwgcmV0dXJuIGBgTm9uZWBgLgorCisgICAgICBOb3RlczogKDEpIEZvciBtb3N0IGFwcGxpY2F0aW9ucyB0aGUgb25seSAqcHJlZmVyZW5jZWxpc3QqIGNvbWJpbmF0aW9ucworICAgICAgdGhhdCByZWFsbHkgbWFrZSBzZW5zZSBhcmUgYGAoJ3BsYWluJywpYGAsIGBgKCdodG1sJywgJ3BsYWluJylgYCwgYW5kIHRoZQorICAgICAgZGVmYXVsdCwgYGAoJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpYGAuICAoMikgQmVjYXVzZSBtYXRjaGluZyBzdGFydHMKKyAgICAgIHdpdGggdGhlIG9iamVjdCBvbiB3aGljaCBgYGdldF9ib2R5YGAgaXMgY2FsbGVkLCBjYWxsaW5nIGBgZ2V0X2JvZHlgYCBvbgorICAgICAgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgd2lsbCByZXR1cm4gdGhlIG9iamVjdCBpdHNlbGYgdW5sZXNzCisgICAgICAqcHJlZmVyZW5jZWxpc3QqIGhhcyBhIG5vbi1kZWZhdWx0IHZhbHVlLiAoMykgTWVzc2FnZXMgKG9yIG1lc3NhZ2UgcGFydHMpCisgICAgICB0aGF0IGRvIG5vdCBzcGVjaWZ5IGEgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgb3Igd2hvc2UKKyAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlciBpcyBpbnZhbGlkIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB0aGV5CisgICAgICBhcmUgb2YgdHlwZSBgYHRleHQvcGxhaW5gYCwgd2hpY2ggbWF5IG9jY2FzaW9uYWxseSBjYXVzZSBgYGdldF9ib2R5YGAgdG8KKyAgICAgIHJldHVybiB1bmV4cGVjdGVkIHJlc3VsdHMuCisKKworICAgLi4gbWV0aG9kOjogaXRlcl9hdHRhY2htZW50cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBvZiB0aGUgcGFydHMgb2YgdGhlIG1lc3NhZ2UgdGhhdCBhcmUgbm90CisgICAgICBjYW5kaWRhdGUgImJvZHkiIHBhcnRzLiAgVGhhdCBpcywgc2tpcCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlYWNoIG9mCisgICAgICBgYHRleHQvcGxhaW5gYCwgYGB0ZXh0L2h0bWxgYCwgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvcgorICAgICAgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCAodW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgbWFya2VkIGFzCisgICAgICBhdHRhY2htZW50cyB2aWEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgKSwgYW5kCisgICAgICByZXR1cm4gYWxsIHJlbWFpbmluZyBwYXJ0cy4gIFdoZW4gYXBwbGllZCBkaXJlY3RseSB0byBhCisgICAgICBgYG11bHRpcGFydC9yZWxhdGVkYGAsIHJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBhbGwgdGhlIHJlbGF0ZWQgcGFydHMKKyAgICAgIGV4Y2VwdCB0aGUgcm9vdCBwYXJ0IChpZTogdGhlIHBhcnQgcG9pbnRlZCB0byBieSB0aGUgYGBzdGFydGBgIHBhcmFtZXRlciwKKyAgICAgIG9yIHRoZSBmaXJzdCBwYXJ0IGlmIHRoZXJlIGlzIG5vIGBgc3RhcnRgYCBwYXJhbWV0ZXIgb3IgdGhlIGBgc3RhcnRgYAorICAgICAgcGFyYW1ldGVyIGRvZXNuJ3QgbWF0Y2ggdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBvZiBhbnkgb2YgdGhlCisgICAgICBwYXJ0cykuICBXaGVuIGFwcGxpZWQgZGlyZWN0bHkgdG8gYSBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgIG9yIGEKKyAgICAgIG5vbi1gYG11bHRpcGFydGBgLCByZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IuCisKKworICAgLi4gbWV0aG9kOjogaXRlcl9wYXJ0cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBvZiB0aGUgaW1tZWRpYXRlIHN1Yi1wYXJ0cyBvZiB0aGUgbWVzc2FnZSwKKyAgICAgIHdoaWNoIHdpbGwgYmUgZW1wdHkgZm9yIGEgbm9uLWBgbXVsdGlwYXJ0YGAuICAoU2VlIGFsc28KKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS53YWxrYC4pCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBDYWxsIHRoZSBgYGdldF9jb250ZW50YGAgbWV0aG9kIG9mIHRoZSAqY29udGVudF9tYW5hZ2VyKiwgcGFzc2luZyBzZWxmCisgICAgICBhcyB0aGUgbWVzc2FnZSBvYmplY3QsIGFuZCBwYXNzaW5nIGFsb25nIGFueSBvdGhlciBhcmd1bWVudHMgb3Iga2V5d29yZHMKKyAgICAgIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlCisgICAgICB0aGUgYGBjb250ZW50X21hbmFnZXJgYCBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogc2V0X2NvbnRlbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBDYWxsIHRoZSBgYHNldF9jb250ZW50YGAgbWV0aG9kIG9mIHRoZSAqY29udGVudF9tYW5hZ2VyKiwgcGFzc2luZyBzZWxmCisgICAgICBhcyB0aGUgbWVzc2FnZSBvYmplY3QsIGFuZCBwYXNzaW5nIGFsb25nIGFueSBvdGhlciBhcmd1bWVudHMgb3Iga2V5d29yZHMKKyAgICAgIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlCisgICAgICB0aGUgYGBjb250ZW50X21hbmFnZXJgYCBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9yZWxhdGVkKGJvdW5kYXJ5PU5vbmUpCisKKyAgICAgIENvbnZlcnQgYSBub24tYGBtdWx0aXBhcnRgYCBtZXNzYWdlIGludG8gYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgbWVzc2FnZSwKKyAgICAgIG1vdmluZyBhbnkgZXhpc3RpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtYCBoZWFkZXJzIGFuZCBwYXlsb2FkIGludG8gYQorICAgICAgKG5ldykgZmlyc3QgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnRgYC4gIElmICpib3VuZGFyeSogaXMgc3BlY2lmaWVkLCB1c2UKKyAgICAgIGl0IGFzIHRoZSBib3VuZGFyeSBzdHJpbmcgaW4gdGhlIG11bHRpcGFydCwgb3RoZXJ3aXNlIGxlYXZlIHRoZSBib3VuZGFyeQorICAgICAgdG8gYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdoZW4gaXQgaXMgbmVlZGVkIChmb3IgZXhhbXBsZSwgd2hlbiB0aGUKKyAgICAgIG1lc3NhZ2UgaXMgc2VyaWFsaXplZCkuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9hbHRlcm5hdGl2ZShib3VuZGFyeT1Ob25lKQorCisgICAgICBDb252ZXJ0IGEgbm9uLWBgbXVsdGlwYXJ0YGAgb3IgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgaW50byBhCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBtb3ZpbmcgYW55IGV4aXN0aW5nIDptYWlsaGVhZGVyOmBDb250ZW50LWAKKyAgICAgIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhIChuZXcpIGZpcnN0IHBhcnQgb2YgdGhlIGBgbXVsdGlwYXJ0YGAuICBJZgorICAgICAgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgYm91bmRhcnkgc3RyaW5nIGluIHRoZSBtdWx0aXBhcnQsCisgICAgICBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5IHRvIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aGVuIGl0IGlzCisgICAgICBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQpLgorCisKKyAgIC4uIG1ldGhvZDo6IG1ha2VfbWl4ZWQoYm91bmRhcnk9Tm9uZSkKKworICAgICAgQ29udmVydCBhIG5vbi1gYG11bHRpcGFydGBgLCBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgb3IgYQorICAgICAgYGBtdWx0aXBhcnQtYWx0ZXJuYXRpdmVgYCBpbnRvIGEgYGBtdWx0aXBhcnQvbWl4ZWRgYCwgbW92aW5nIGFueSBleGlzdGluZworICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtYCBoZWFkZXJzIGFuZCBwYXlsb2FkIGludG8gYSAobmV3KSBmaXJzdCBwYXJ0IG9mIHRoZQorICAgICAgYGBtdWx0aXBhcnRgYC4gIElmICpib3VuZGFyeSogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIGJvdW5kYXJ5IHN0cmluZworICAgICAgaW4gdGhlIG11bHRpcGFydCwgb3RoZXJ3aXNlIGxlYXZlIHRoZSBib3VuZGFyeSB0byBiZSBhdXRvbWF0aWNhbGx5CisgICAgICBjcmVhdGVkIHdoZW4gaXQgaXMgbmVlZGVkIChmb3IgZXhhbXBsZSwgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZXJpYWxpemVkKS4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfcmVsYXRlZCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjcmVhdGUgYSBuZXcgbWVzc2FnZQorICAgICAgb2JqZWN0LCBwYXNzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIGl0cyA6bWV0aDpgc2V0X2NvbnRlbnRgIG1ldGhvZCwKKyAgICAgIGFuZCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgIGl0IHRvIHRoZSBgYG11bHRpcGFydGBgLiAgSWYKKyAgICAgIHRoZSBtZXNzYWdlIGlzIGEgbm9uLWBgbXVsdGlwYXJ0YGAsIGNhbGwgOm1ldGg6YG1ha2VfcmVsYXRlZGAgYW5kIHRoZW4KKyAgICAgIHByb2NlZWQgYXMgYWJvdmUuICBJZiB0aGUgbWVzc2FnZSBpcyBhbnkgb3RoZXIgdHlwZSBvZiBgYG11bHRpcGFydGBgLAorICAgICAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgLiBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKyAgICAgIElmIHRoZSBhZGRlZCBwYXJ0IGhhcyBubyA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLAorICAgICAgYWRkIG9uZSB3aXRoIHRoZSB2YWx1ZSBgYGlubGluZWBgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9hbHRlcm5hdGl2ZSgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCwgY3JlYXRlIGEgbmV3IG1lc3NhZ2UKKyAgICAgIG9iamVjdCwgcGFzcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBpdHMgOm1ldGg6YHNldF9jb250ZW50YCBtZXRob2QsIGFuZAorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYCBpdCB0byB0aGUgYGBtdWx0aXBhcnRgYC4gIElmIHRoZQorICAgICAgbWVzc2FnZSBpcyBhIG5vbi1gYG11bHRpcGFydGBgIG9yIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgY2FsbAorICAgICAgOm1ldGg6YG1ha2VfYWx0ZXJuYXRpdmVgIGFuZCB0aGVuIHByb2NlZWQgYXMgYWJvdmUuICBJZiB0aGUgbWVzc2FnZSBpcworICAgICAgYW55IG90aGVyIHR5cGUgb2YgYGBtdWx0aXBhcnRgYCwgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgLiBJZgorICAgICAgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZAorICAgICAgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX2F0dGFjaG1lbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBJZiB0aGUgbWVzc2FnZSBpcyBhIGBgbXVsdGlwYXJ0L21peGVkYGAsIGNyZWF0ZSBhIG5ldyBtZXNzYWdlIG9iamVjdCwKKyAgICAgIHBhc3MgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gaXRzIDptZXRoOmBzZXRfY29udGVudGAgbWV0aG9kLCBhbmQKKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGAgaXQgdG8gdGhlIGBgbXVsdGlwYXJ0YGAuICBJZiB0aGUKKyAgICAgIG1lc3NhZ2UgaXMgYSBub24tYGBtdWx0aXBhcnRgYCwgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvcgorICAgICAgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCwgY2FsbCA6bWV0aDpgbWFrZV9taXhlZGAgYW5kIHRoZW4gcHJvY2VlZCBhcworICAgICAgYWJvdmUuIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgYGBjb250ZW50X21hbmFnZXJgYAorICAgICAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLiAgSWYgdGhlIGFkZGVkIHBhcnQKKyAgICAgIGhhcyBubyA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLCBhZGQgb25lIHdpdGggdGhlIHZhbHVlCisgICAgICBgYGF0dGFjaG1lbnRgYC4gIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGJvdGggZm9yIGV4cGxpY2l0IGF0dGFjaG1lbnRzCisgICAgICAoOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgIGFuZCBgYGlubGluZWBgIGF0dGFjaG1lbnRzCisgICAgICAoOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZWApLCBieSBwYXNzaW5nIGFwcHJvcHJpYXRlCisgICAgICBvcHRpb25zIHRvIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgLgorCisKKyAgIC4uIG1ldGhvZDo6IGNsZWFyKCkKKworICAgICAgUmVtb3ZlIHRoZSBwYXlsb2FkIGFuZCBhbGwgb2YgdGhlIGhlYWRlcnMuCisKKworICAgLi4gbWV0aG9kOjogY2xlYXJfY29udGVudCgpCisKKyAgICAgIFJlbW92ZSB0aGUgcGF5bG9hZCBhbmQgYWxsIG9mIHRoZSA6ZXhjOmBDb250ZW50LWAgaGVhZGVycywgbGVhdmluZworICAgICAgYWxsIG90aGVyIGhlYWRlcnMgaW50YWN0IGFuZCBpbiB0aGVpciBvcmlnaW5hbCBvcmRlci4KKworCisuLiBjbGFzczo6IE1JTUVQYXJ0KHBvbGljeT1kZWZhdWx0KQorCisgICAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc3VicGFydCBvZiBhIE1JTUUgbWVzc2FnZS4gIEl0IGlzIGlkZW50aWNhbCB0bworICAgIDpjbGFzczpgRW1haWxNZXNzYWdlYCwgZXhjZXB0IHRoYXQgbm8gOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycyBhcmUKKyAgICBhZGRlZCB3aGVuIDptZXRoOmB+RW1haWxNZXNzYWdlLnNldF9jb250ZW50YCBpcyBjYWxsZWQsIHNpbmNlIHN1Yi1wYXJ0cyBkbworICAgIG5vdCBuZWVkIHRoZWlyIG93biA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzLgorCisKKy4uIGN1cnJlbnRtb2R1bGU6OiBlbWFpbC5jb250ZW50bWFuYWdlcgorCisuLiBjbGFzczo6IENvbnRlbnRNYW5hZ2VyKCkKKworICAgQmFzZSBjbGFzcyBmb3IgY29udGVudCBtYW5hZ2Vycy4gIFByb3ZpZGVzIHRoZSBzdGFuZGFyZCByZWdpc3RyeSBtZWNoYW5pc21zCisgICB0byByZWdpc3RlciBjb252ZXJ0ZXJzIGJldHdlZW4gTUlNRSBjb250ZW50IGFuZCBvdGhlciByZXByZXNlbnRhdGlvbnMsIGFzCisgICB3ZWxsIGFzIHRoZSBgYGdldF9jb250ZW50YGAgYW5kIGBgc2V0X2NvbnRlbnRgYCBkaXNwYXRjaCBtZXRob2RzLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9jb250ZW50KG1zZywgKmFyZ3MsICoqa3cpCisKKyAgICAgIExvb2sgdXAgYSBoYW5kbGVyIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBgYG1pbWV0eXBlYGAgb2YgKm1zZyogKHNlZSBuZXh0CisgICAgICBwYXJhZ3JhcGgpLCBjYWxsIGl0LCBwYXNzaW5nIHRocm91Z2ggYWxsIGFyZ3VtZW50cywgYW5kIHJldHVybiB0aGUgcmVzdWx0CisgICAgICBvZiB0aGUgY2FsbC4gIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBoYW5kbGVyIHdpbGwgZXh0cmFjdCB0aGUKKyAgICAgIHBheWxvYWQgZnJvbSAqbXNnKiBhbmQgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGVuY29kZXMgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgIHRoZSBleHRyYWN0ZWQgZGF0YS4KKworICAgICAgVG8gZmluZCB0aGUgaGFuZGxlciwgbG9vayBmb3IgdGhlIGZvbGxvd2luZyBrZXlzIGluIHRoZSByZWdpc3RyeSwKKyAgICAgIHN0b3BwaW5nIHdpdGggdGhlIGZpcnN0IG9uZSBmb3VuZDoKKworICAgICAgICAgICAgKiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZnVsbCBNSU1FIHR5cGUgKGBgbWFpbnR5cGUvc3VidHlwZWBgKQorICAgICAgICAgICAgKiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYGBtYWludHlwZWBgCisgICAgICAgICAgICAqIHRoZSBlbXB0eSBzdHJpbmcKKworICAgICAgSWYgbm9uZSBvZiB0aGVzZSBrZXlzIHByb2R1Y2UgYSBoYW5kbGVyLCByYWlzZSBhIDpleGM6YEtleUVycm9yYCBmb3IgdGhlCisgICAgICBmdWxsIE1JTUUgdHlwZS4KKworCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudChtc2csIG9iaiwgKmFyZ3MsICoqa3cpCisKKyAgICAgIElmIHRoZSBgYG1haW50eXBlYGAgaXMgYGBtdWx0aXBhcnRgYCwgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgOyBvdGhlcndpc2UKKyAgICAgIGxvb2sgdXAgYSBoYW5kbGVyIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSB0eXBlIG9mICpvYmoqIChzZWUgbmV4dAorICAgICAgcGFyYWdyYXBoKSwgY2FsbCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmNsZWFyX2NvbnRlbnRgIG9uIHRoZQorICAgICAgKm1zZyosIGFuZCBjYWxsIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLCBwYXNzaW5nIHRocm91Z2ggYWxsIGFyZ3VtZW50cy4gIFRoZQorICAgICAgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgaGFuZGxlciB3aWxsIHRyYW5zZm9ybSBhbmQgc3RvcmUgKm9iaiogaW50bworICAgICAgKm1zZyosIHBvc3NpYmx5IG1ha2luZyBvdGhlciBjaGFuZ2VzIHRvICptc2cqIGFzIHdlbGwsIHN1Y2ggYXMgYWRkaW5nCisgICAgICB2YXJpb3VzIE1JTUUgaGVhZGVycyB0byBlbmNvZGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGludGVycHJldCB0aGUgc3RvcmVkCisgICAgICBkYXRhLgorCisgICAgICBUbyBmaW5kIHRoZSBoYW5kbGVyLCBvYnRhaW4gdGhlIHR5cGUgb2YgKm9iaiogKGBgdHlwID0gdHlwZShvYmopYGApLCBhbmQKKyAgICAgIGxvb2sgZm9yIHRoZSBmb2xsb3dpbmcga2V5cyBpbiB0aGUgcmVnaXN0cnksIHN0b3BwaW5nIHdpdGggdGhlIGZpcnN0IG9uZQorICAgICAgZm91bmQ6CisKKyAgICAgICAgICAgKiB0aGUgdHlwZSBpdHNlbGYgKGBgdHlwYGApCisgICAgICAgICAgICogdGhlIHR5cGUncyBmdWxseSBxdWFsaWZpZWQgbmFtZSAoYGB0eXAuX19tb2R1bGVfXyArICcuJyArCisgICAgICAgICAgICAgdHlwLl9fcXVhbG5hbWVfX2BgKS4KKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIHF1YWxuYW1lIChgYHR5cC5fX3F1YWxuYW1lX19gYCkKKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIG5hbWUgKGBgdHlwLl9fbmFtZV9fYGApLgorCisgICAgICBJZiBub25lIG9mIHRoZSBhYm92ZSBtYXRjaCwgcmVwZWF0IGFsbCBvZiB0aGUgY2hlY2tzIGFib3ZlIGZvciBlYWNoIG9mCisgICAgICB0aGUgdHlwZXMgaW4gdGhlIDp0ZXJtOmBNUk9gIChgYHR5cC5fX21yb19fYGApLiAgRmluYWxseSwgaWYgbm8gb3RoZXIga2V5CisgICAgICB5aWVsZHMgYSBoYW5kbGVyLCBjaGVjayBmb3IgYSBoYW5kbGVyIGZvciB0aGUga2V5IGBgTm9uZWBgLiAgSWYgdGhlcmUgaXMKKyAgICAgIG5vIGhhbmRsZXIgZm9yIGBgTm9uZWBgLCByYWlzZSBhIDpleGM6YEtleUVycm9yYCBmb3IgdGhlIGZ1bGx5CisgICAgICBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZS4KKworICAgICAgQWxzbyBhZGQgYSA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXIgaWYgb25lIGlzIG5vdCBwcmVzZW50IChzZWUKKyAgICAgIGFsc28gOmNsYXNzOmAuTUlNRVBhcnRgKS4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfZ2V0X2hhbmRsZXIoa2V5LCBoYW5kbGVyKQorCisgICAgICBSZWNvcmQgdGhlIGZ1bmN0aW9uICpoYW5kbGVyKiBhcyB0aGUgaGFuZGxlciBmb3IgKmtleSouICBGb3IgdGhlIHBvc3NpYmxlCisgICAgICB2YWx1ZXMgb2YgKmtleSosIHNlZSA6bWV0aDpgZ2V0X2NvbnRlbnRgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9zZXRfaGFuZGxlcih0eXBla2V5LCBoYW5kbGVyKQorCisgICAgICBSZWNvcmQgKmhhbmRsZXIqIGFzIHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYW4gb2JqZWN0IG9mIGEgdHlwZQorICAgICAgbWF0Y2hpbmcgKnR5cGVrZXkqIGlzIHBhc3NlZCB0byA6bWV0aDpgc2V0X2NvbnRlbnRgLiAgRm9yIHRoZSBwb3NzaWJsZQorICAgICAgdmFsdWVzIG9mICp0eXBla2V5Kiwgc2VlIDptZXRoOmBzZXRfY29udGVudGAuCisKKworQ29udGVudCBNYW5hZ2VyIEluc3RhbmNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDdXJyZW50bHkgdGhlIGVtYWlsIHBhY2thZ2UgcHJvdmlkZXMgb25seSBvbmUgY29uY3JldGUgY29udGVudCBtYW5hZ2VyLAorOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgLCBhbHRob3VnaCBtb3JlIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgIGlzIHRoZQorOmF0dHI6YH5lbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuY29udGVudF9tYW5hZ2VyYCBwcm92aWRlZCBieQorOmF0dHI6YH5lbWFpbC5wb2xpY3kuRW1haWxQb2xpY3lgIGFuZCBpdHMgZGVyaXZhdGl2ZXMuCisKKworLi4gZGF0YTo6IHJhd19kYXRhX21hbmFnZXIKKworICAgVGhpcyBjb250ZW50IG1hbmFnZXIgcHJvdmlkZXMgb25seSBhIG1pbmltdW0gaW50ZXJmYWNlIGJleW9uZCB0aGF0IHByb3ZpZGVkCisgICBieSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGl0c2VsZjogIGl0IGRlYWxzIG9ubHkgd2l0aCB0ZXh0LCByYXcKKyAgIGJ5dGUgc3RyaW5ncywgYW5kIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cy4gIE5ldmVydGhlbGVzcywgaXQKKyAgIHByb3ZpZGVzIHNpZ25pZmljYW50IGFkdmFudGFnZXMgY29tcGFyZWQgdG8gdGhlIGJhc2UgQVBJOiBgYGdldF9jb250ZW50YGAgb24KKyAgIGEgdGV4dCBwYXJ0IHdpbGwgcmV0dXJuIGEgdW5pY29kZSBzdHJpbmcgd2l0aG91dCB0aGUgYXBwbGljYXRpb24gbmVlZGluZyB0bworICAgbWFudWFsbHkgZGVjb2RlIGl0LCBgYHNldF9jb250ZW50YGAgcHJvdmlkZXMgYSByaWNoIHNldCBvZiBvcHRpb25zIGZvcgorICAgY29udHJvbGxpbmcgdGhlIGhlYWRlcnMgYWRkZWQgdG8gYSBwYXJ0IGFuZCBjb250cm9sbGluZyB0aGUgY29udGVudCB0cmFuc2ZlcgorICAgZW5jb2RpbmcsIGFuZCBpdCBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIHZhcmlvdXMgYGBhZGRfYGAgbWV0aG9kcywgdGhlcmVieQorICAgc2ltcGxpZnlpbmcgdGhlIGNyZWF0aW9uIG9mIG11bHRpcGFydCBtZXNzYWdlcy4KKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQobXNnLCBlcnJvcnM9J3JlcGxhY2UnKQorCisgICAgICBSZXR1cm4gdGhlIHBheWxvYWQgb2YgdGhlIHBhcnQgYXMgZWl0aGVyIGEgc3RyaW5nIChmb3IgYGB0ZXh0YGAgcGFydHMpLCBhCisgICAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZWAgb2JqZWN0IChmb3IgYGBtZXNzYWdlL3JmYzgyMmBgCisgICAgICBwYXJ0cyksIG9yIGEgYGBieXRlc2BgIG9iamVjdCAoZm9yIGFsbCBvdGhlciBub24tbXVsdGlwYXJ0IHR5cGVzKS4gIFJhaXNlCisgICAgICBhIDpleGM6YEtleUVycm9yYCBpZiBjYWxsZWQgb24gYSBgYG11bHRpcGFydGBgLiAgSWYgdGhlIHBhcnQgaXMgYQorICAgICAgYGB0ZXh0YGAgcGFydCBhbmQgKmVycm9ycyogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIGVycm9yIGhhbmRsZXIgd2hlbgorICAgICAgZGVjb2RpbmcgdGhlIHBheWxvYWQgdG8gdW5pY29kZS4gIFRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMKKyAgICAgIGBgcmVwbGFjZWBgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudChtc2csIDwnc3RyJz4sIHN1YnR5cGU9InBsYWluIiwgY2hhcnNldD0ndXRmLTgnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0ZT1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdieXRlcyc+LCBtYWludHlwZSwgc3VidHlwZSwgY3RlPSJiYXNlNjQiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdNZXNzYWdlJz4sIGN0ZT1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdsaXN0Jz4sIHN1YnR5cGU9J21peGVkJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisKKyAgICAgICBBZGQgaGVhZGVycyBhbmQgcGF5bG9hZCB0byAqbXNnKjoKKworICAgICAgIEFkZCBhIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlciB3aXRoIGEgYGBtYWludHlwZS9zdWJ0eXBlYGAKKyAgICAgICB2YWx1ZS4KKworICAgICAgICAgICAqIEZvciBgYHN0cmBgLCBzZXQgdGhlIE1JTUUgYGBtYWludHlwZWBgIHRvIGBgdGV4dGBgLCBhbmQgc2V0IHRoZQorICAgICAgICAgICAgIHN1YnR5cGUgdG8gKnN1YnR5cGUqIGlmIGl0IGlzIHNwZWNpZmllZCwgb3IgYGBwbGFpbmBgIGlmIGl0IGlzIG5vdC4KKyAgICAgICAgICAgKiBGb3IgYGBieXRlc2BgLCB1c2UgdGhlIHNwZWNpZmllZCAqbWFpbnR5cGUqIGFuZCAqc3VidHlwZSosIG9yCisgICAgICAgICAgICAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQuCisgICAgICAgICAgICogRm9yIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cywgc2V0IHRoZSBtYWludHlwZSB0bworICAgICAgICAgICAgIGBgbWVzc2FnZWBgLCBhbmQgc2V0IHRoZSBzdWJ0eXBlIHRvICpzdWJ0eXBlKiBpZiBpdCBpcyBzcGVjaWZpZWQKKyAgICAgICAgICAgICBvciBgYHJmYzgyMmBgIGlmIGl0IGlzIG5vdC4gIElmICpzdWJ0eXBlKiBpcyBgYHBhcnRpYWxgYCwgcmFpc2UgYW4KKyAgICAgICAgICAgICBlcnJvciAoYGBieXRlc2BgIG9iamVjdHMgbXVzdCBiZSB1c2VkIHRvIGNvbnN0cnVjdAorICAgICAgICAgICAgIGBgbWVzc2FnZS9wYXJ0aWFsYGAgcGFydHMpLgorICAgICAgICAgICAqIEZvciAqPCdsaXN0Jz4qLCB3aGljaCBzaG91bGQgYmUgYSBsaXN0IG9mCisgICAgICAgICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3RzLCBzZXQgdGhlIGBgbWFpbnR5cGVgYCB0bworICAgICAgICAgICAgIGBgbXVsdGlwYXJ0YGAsIGFuZCB0aGUgYGBzdWJ0eXBlYGAgdG8gKnN1YnR5cGUqIGlmIGl0IGlzCisgICAgICAgICAgICAgc3BlY2lmaWVkLCBhbmQgYGBtaXhlZGBgIGlmIGl0IGlzIG5vdC4gIElmIHRoZSBtZXNzYWdlIHBhcnRzIGluCisgICAgICAgICAgICAgdGhlICo8J2xpc3QnPiogaGF2ZSA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzLCByZW1vdmUKKyAgICAgICAgICAgICB0aGVtLgorCisgICAgICAgSWYgKmNoYXJzZXQqIGlzIHByb3ZpZGVkICh3aGljaCBpcyB2YWxpZCBvbmx5IGZvciBgYHN0cmBgKSwgZW5jb2RlIHRoZQorICAgICAgIHN0cmluZyB0byBieXRlcyB1c2luZyB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQuICBUaGUgZGVmYXVsdCBpcworICAgICAgIGBgdXRmLThgYC4gIElmIHRoZSBzcGVjaWZpZWQgKmNoYXJzZXQqIGlzIGEga25vd24gYWxpYXMgZm9yIGEgc3RhbmRhcmQKKyAgICAgICBNSU1FIGNoYXJzZXQgbmFtZSwgdXNlIHRoZSBzdGFuZGFyZCBjaGFyc2V0IGluc3RlYWQuCisKKyAgICAgICBJZiAqY3RlKiBpcyBzZXQsIGVuY29kZSB0aGUgcGF5bG9hZCB1c2luZyB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgdHJhbnNmZXIKKyAgICAgICBlbmNvZGluZywgYW5kIHNldCB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtVHJhbnNmZXItRW5kY29kaW5nYCBoZWFkZXIgdG8KKyAgICAgICB0aGF0IHZhbHVlLiAgRm9yIGBgc3RyYGAgb2JqZWN0cywgaWYgaXQgaXMgbm90IHNldCB1c2UgaGV1cmlzdGljcyB0bworICAgICAgIGRldGVybWluZSB0aGUgbW9zdCBjb21wYWN0IGVuY29kaW5nLiAgUG9zc2libGUgdmFsdWVzIGZvciAqY3RlKiBhcmUKKyAgICAgICBgYHF1b3RlZC1wcmludGFibGVgYCwgYGBiYXNlNjRgYCwgYGA3Yml0YGAsIGBgOGJpdGBgLCBhbmQgYGBiaW5hcnlgYC4KKyAgICAgICBJZiB0aGUgaW5wdXQgY2Fubm90IGJlIGVuY29kZWQgaW4gdGhlIHNwZWNpZmllZCBlbmNvZGluZyAoZWc6IGBgN2JpdGBgKSwKKyAgICAgICByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgLiAgRm9yIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAsIHBlcgorICAgICAgIDpyZmM6YDIwNDZgLCByYWlzZSBhbiBlcnJvciBpZiBhICpjdGUqIG9mIGBgcXVvdGVkLXByaW50YWJsZWBgIG9yCisgICAgICAgYGBiYXNlNjRgYCBpcyByZXF1ZXN0ZWQgZm9yICpzdWJ0eXBlKiBgYHJmYzgyMmBgLCBhbmQgZm9yIGFueSAqY3RlKgorICAgICAgIG90aGVyIHRoYW4gYGA3Yml0YGAgZm9yICpzdWJ0eXBlKiBgYGV4dGVybmFsLWJvZHlgYC4gIEZvcgorICAgICAgIGBgbWVzc2FnZS9yZmM4MjJgYCwgdXNlIGBgOGJpdGBgIGlmICpjdGUqIGlzIG5vdCBzcGVjaWZpZWQuICBGb3IgYWxsCisgICAgICAgb3RoZXIgdmFsdWVzIG9mICpzdWJ0eXBlKiwgdXNlIGBgN2JpdGBgLgorCisgICAgICAgLi4gbm90ZTo6IEEgKmN0ZSogb2YgYGBiaW5hcnlgYCBkb2VzIG5vdCBhY3R1YWxseSB3b3JrIGNvcnJlY3RseSB5ZXQuCisgICAgICAgICAgVGhlIGBgTWVzc2FnZWBgIG9iamVjdCBhcyBtb2RpZmllZCBieSBgYHNldF9jb250ZW50YGAgaXMgY29ycmVjdCwgYnV0CisgICAgICAgICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCBkb2VzIG5vdCBzZXJpYWxpemUgaXQKKyAgICAgICAgICBjb3JyZWN0bHkuCisKKyAgICAgICBJZiAqZGlzcG9zaXRpb24qIGlzIHNldCwgdXNlIGl0IGFzIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLiAgSWYgbm90IHNwZWNpZmllZCwgYW5kCisgICAgICAgKmZpbGVuYW1lKiBpcyBzcGVjaWZpZWQsIGFkZCB0aGUgaGVhZGVyIHdpdGggdGhlIHZhbHVlIGBgYXR0YWNobWVudGBgLgorICAgICAgIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgYW5kICpmaWxlbmFtZSogaXMgYWxzbyBub3Qgc3BlY2lmaWVkLCBkbyBub3QgYWRkCisgICAgICAgdGhlIGhlYWRlci4gIFRoZSBvbmx5IHZhbGlkIHZhbHVlcyBmb3IgKmRpc3Bvc2l0aW9uKiBhcmUgYGBhdHRhY2htZW50YGAKKyAgICAgICBhbmQgYGBpbmxpbmVgYC4KKworICAgICAgIElmICpmaWxlbmFtZSogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIHZhbHVlIG9mIHRoZSBgYGZpbGVuYW1lYGAKKyAgICAgICBwYXJhbWV0ZXIgb2YgdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIuICBUaGVyZSBpcyBubworICAgICAgIGRlZmF1bHQuCisKKyAgICAgICBJZiAqY2lkKiBpcyBzcGVjaWZpZWQsIGFkZCBhIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBoZWFkZXIgd2l0aAorICAgICAgICpjaWQqIGFzIGl0cyB2YWx1ZS4KKworICAgICAgIElmICpwYXJhbXMqIGlzIHNwZWNpZmllZCwgaXRlcmF0ZSBpdHMgYGBpdGVtc2BgIG1ldGhvZCBhbmQgdXNlIHRoZQorICAgICAgIHJlc3VsdGluZyBgYChrZXksIHZhbHVlKWBgIHBhaXJzIHRvIHNldCBhZGRpdGlvbmFsIHBhcmFtdGVycyBvbiB0aGUKKyAgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIuCisKKyAgICAgICBJZiAqaGVhZGVycyogaXMgc3BlY2lmaWVkIGFuZCBpcyBhIGxpc3Qgb2Ygc3RyaW5ncyBvZiB0aGUgZm9ybQorICAgICAgIGBgaGVhZGVybmFtZTogaGVhZGVydmFsdWVgYCBvciBhIGxpc3Qgb2YgYGBoZWFkZXJgYCBvYmplY3RzCisgICAgICAgKGRpc3Rpbmd1aXNlZCBmcm9tIHN0cmluZ3MgYnkgaGF2aW5nIGEgYGBuYW1lYGAgYXR0cmlidXRlKSwgYWRkIHRoZQorICAgICAgIGhlYWRlcnMgdG8gKm1zZyouCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLnJzdAppbmRleCBjMTcyYWNiLi40OGQ0MWUxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5yc3QKQEAgLTExMiw3ICsxMTIsNyBAQAogOm1vZDpgZW1haWwubWVzc2FnZWAuCiAKIC4uIGNsYXNzOjogQnl0ZXNHZW5lcmF0b3Iob3V0ZnAsIG1hbmdsZV9mcm9tXz1UcnVlLCBtYXhoZWFkZXJsZW49NzgsICosIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3k9Tm9uZSkKIAogICAgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgOmNsYXNzOmBCeXRlc0dlbmVyYXRvcmAgY2xhc3MgdGFrZXMgYSBiaW5hcnkKICAgIDp0ZXJtOmBmaWxlLWxpa2Ugb2JqZWN0YCBjYWxsZWQgKm91dGZwKiBmb3IgYW4gYXJndW1lbnQuICAqb3V0ZnAqIG11c3QKQEAgLTEzNCw5ICsxMzQsMTEgQEAKICAgIHdyYXBwaW5nLiAgVGhlIGRlZmF1bHQgaXMgNzgsIGFzIHJlY29tbWVuZGVkIChidXQgbm90IHJlcXVpcmVkKSBieQogICAgOnJmYzpgMjgyMmAuCiAKKwogICAgVGhlICpwb2xpY3kqIGtleXdvcmQgc3BlY2lmaWVzIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAgb2JqZWN0IHRoYXQgY29udHJvbHMgYQotICAgbnVtYmVyIG9mIGFzcGVjdHMgb2YgdGhlIGdlbmVyYXRvcidzIG9wZXJhdGlvbi4gIFRoZSBkZWZhdWx0IHBvbGljeQotICAgbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICBudW1iZXIgb2YgYXNwZWN0cyBvZiB0aGUgZ2VuZXJhdG9yJ3Mgb3BlcmF0aW9uLiAgSWYgbm8gKnBvbGljeSogaXMgc3BlY2lmaWVkLAorICAgdGhlbiB0aGUgKnBvbGljeSogYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0IHBhc3NlZCB0byA6YXR0cjpgZmxhdHRlbmAKKyAgIGlzIHVzZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zIEFkZGVkIHRoZSAqcG9saWN5KiBrZXl3b3JkLgogCkBAIC0xNzQsNyArMTc2LDcgQEAKIAogICAgICAgT3B0aW9uYWwgKmxpbmVzZXAqIHNwZWNpZmllcyB0aGUgbGluZSBzZXBhcmF0b3IgY2hhcmFjdGVyIHVzZWQgdG8KICAgICAgIHRlcm1pbmF0ZSBsaW5lcyBpbiB0aGUgb3V0cHV0LiAgSWYgc3BlY2lmaWVkIGl0IG92ZXJyaWRlcyB0aGUgdmFsdWUKLSAgICAgIHNwZWNpZmllZCBieSB0aGUgYGBHZW5lcmF0b3JgYFwgJ3MgYGBwb2xpY3lgYC4KKyAgICAgIHNwZWNpZmllZCBieSB0aGUgYGBHZW5lcmF0b3JgYFwgb3IgKm1zZypcICdzIGBgcG9saWN5YGAuCiAKICAgIC4uIG1ldGhvZDo6IGNsb25lKGZwKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CmluZGV4IDMwNzVlODYuLjg1NzNlODUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CkBAIC0zMywyMyArMzMsMzEgQEAKIAogLi4gY2xhc3M6OiBNZXNzYWdlKHBvbGljeT1jb21wYXQzMikKIAotICAgVGhlICpwb2xpY3kqIGFyZ3VtZW50IGRldGVybWllbnMgdGhlIDptb2Q6YH5lbWFpbC5wb2xpY3lgIHRoYXQgd2lsbCBiZSB1c2VkCi0gICB0byB1cGRhdGUgdGhlIG1lc3NhZ2UgbW9kZWwuICBUaGUgZGVmYXVsdCB2YWx1ZSwgOmNsYXNzOmBjb21wYXQzMgotICAgPGVtYWlsLnBvbGljeS5Db21wYXQzMj5gIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlCi0gICBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICBJZiAqcG9saWN5KiBpcyBzcGVjaWZpZWQgKGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6bW9kOmB+ZW1haWwucG9saWN5YAorICAgY2xhc3MpIHVzZSB0aGUgcnVsZXMgaXQgc3BlY2lmaWVzIHRvIHVwZGF0ZSBhbmQgc2VyaWFsaXplIHRoZSByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIG1lc3NhZ2UuICBJZiAqcG9saWN5KiBpcyBub3Qgc2V0LCB1c2UgdGhlIDpjbGFzczpgY29tcGF0MzIKKyAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBwb2xpY3ksIHdoaWNoIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIHRoZSBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCiAgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMyBUaGUgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCB3YXMgYWRkZWQuCiAKIAotICAgLi4gbWV0aG9kOjogYXNfc3RyaW5nKHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCkKKyAgIC4uIG1ldGhvZDo6IGFzX3N0cmluZyh1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTAsIHBvbGljeT1Ob25lKQogCiAgICAgICBSZXR1cm4gdGhlIGVudGlyZSBtZXNzYWdlIGZsYXR0ZW5lZCBhcyBhIHN0cmluZy4gIFdoZW4gb3B0aW9uYWwgKnVuaXhmcm9tKgotICAgICAgaXMgYGBUcnVlYGAsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KLSAgICAgICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlcgotICAgICAgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZiBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0bwotICAgICAgY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heQotICAgICAgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KKyAgICAgIGlzIHRydWUsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KKyAgICAgICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgRm9yIGJhY2t3YXJkIGNvbXBhYml0aWxpdHkgcmVhc29ucywKKyAgICAgICptYXhoZWFkZXJsZW4qIGRlZmF1bHRzIHRvIGBgMGBgLCBzbyBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCB2YWx1ZSB5b3UKKyAgICAgIG11c3Qgb3ZlcnJpZGUgaXQgZXhwbGljaXRseSAodGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgKm1heF9saW5lX2xlbmd0aCogaW4KKyAgICAgIHRoZSBwb2xpY3kgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoaXMgbWV0aG9kKS4gIFRoZSAqcG9saWN5KiBhcmd1bWVudCBtYXkgYmUKKyAgICAgIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9idGFpbmVkIGZyb20gdGhlIG1lc3NhZ2UgaW5zdGFuY2UuCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgc29tZSBvZiB0aGUgZm9ybWF0dGluZyBwcm9kdWNlZCBieSB0aGUKKyAgICAgIG1ldGhvZCwgc2luY2UgdGhlIHNwZWNpZmllZCAqcG9saWN5KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYGBHZW5lcmF0b3JgYC4KKworICAgICAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlciBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmCisgICAgICBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0byBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcKKyAgICAgIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heSBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgogCiAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgbWF5IG5vdCBhbHdheXMKICAgICAgIGZvcm1hdCB0aGUgbWVzc2FnZSB0aGUgd2F5IHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgaXQgZG9lcwpAQCAtNjUsMTAgKzczLDU4IEBACiAgICAgICAgICBnLmZsYXR0ZW4obXNnKQogICAgICAgICAgdGV4dCA9IGZwLmdldHZhbHVlKCkKIAorICAgICAgSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5zIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90IGVuY29kZWQgYWNjb3JkaW5nCisgICAgICB0byBSRkMgc3RhbmRhcmRzLCB0aGUgbm9uLWNvbXBsaWFudCBkYXRhIHdpbGwgYmUgcmVwbGFjZWQgYnkgdW5pY29kZQorICAgICAgInVua25vd24gY2hhcmFjdGVyIiBjb2RlIHBvaW50cy4gIChTZWUgYWxzbyA6bWV0aDpgLmFzX2J5dGVzYCBhbmQKKyAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAuKQorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCB0aGUgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogX19zdHJfXygpCiAKLSAgICAgIEVxdWl2YWxlbnQgdG8gYGBhc19zdHJpbmcodW5peGZyb209VHJ1ZSlgYC4KKyAgICAgIEVxdWl2YWxlbnQgdG8gOm1ldGg6YC5hc19zdHJpbmcoKWAuICBBbGxvd3MgYGBzdHIobXNnKWBgIHRvIHByb2R1Y2UgYQorICAgICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLgorCisKKyAgIC4uIG1ldGhvZDo6IGFzX2J5dGVzKHVuaXhmcm9tPUZhbHNlLCBwb2xpY3k9Tm9uZSkKKworICAgICAgUmV0dXJuIHRoZSBlbnRpcmUgbWVzc2FnZSBmbGF0dGVuZWQgYXMgYSBieXRlcyBvYmplY3QuICBXaGVuIG9wdGlvbmFsCisgICAgICAqdW5peGZyb20qIGlzIHRydWUsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkCisgICAgICBzdHJpbmcuICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIFRoZSAqcG9saWN5KiBhcmd1bWVudCBtYXkgYmUKKyAgICAgIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9idGFpbmVkIGZyb20gdGhlIG1lc3NhZ2UgaW5zdGFuY2UuCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgc29tZSBvZiB0aGUgZm9ybWF0dGluZyBwcm9kdWNlZCBieSB0aGUKKyAgICAgIG1ldGhvZCwgc2luY2UgdGhlIHNwZWNpZmllZCAqcG9saWN5KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUKKyAgICAgIGBgQnl0ZXNHZW5lcmF0b3JgYC4KKworICAgICAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlciBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmCisgICAgICBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0byBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcKKyAgICAgIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heSBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgorCisgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgbWF5IG5vdCBhbHdheXMKKyAgICAgIGZvcm1hdCB0aGUgbWVzc2FnZSB0aGUgd2F5IHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgaXQgZG9lcworICAgICAgbm90IGRvIHRoZSBtYW5nbGluZyBvZiBsaW5lcyB0aGF0IGJlZ2luIHdpdGggYGBGcm9tYGAgdGhhdCBpcworICAgICAgcmVxdWlyZWQgYnkgdGhlIHVuaXggbWJveCBmb3JtYXQuICBGb3IgbW9yZSBmbGV4aWJpbGl0eSwgaW5zdGFudGlhdGUgYQorICAgICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCBpbnN0YW5jZSBhbmQgdXNlIGl0cworICAgICAgOm1ldGg6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3IuZmxhdHRlbmAgbWV0aG9kIGRpcmVjdGx5LgorICAgICAgRm9yIGV4YW1wbGU6OgorCisgICAgICAgICBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCisgICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgQnl0ZXNHZW5lcmF0b3IKKyAgICAgICAgIGZwID0gQnl0ZXNJTygpCisgICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1UcnVlLCBtYXhoZWFkZXJsZW49NjApCisgICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICAgdGV4dCA9IGZwLmdldHZhbHVlKCkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgLi4gbWV0aG9kOjogX19ieXRlc19fKCkKKworICAgICAgRXF1aXZhbGVudCB0byA6bWV0aDpgLmFzX2J5dGVzKClgLiAgQWxsb3dzIGBgYnl0ZXMobXNnKWBgIHRvIHByb2R1Y2UgYQorICAgICAgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCiAgICAuLiBtZXRob2Q6OiBpc19tdWx0aXBhcnQoKQpAQCAtNDEwLDcgKzQ2Niw4IEBACiAgICAgICB0byBgYEZhbHNlYGAuCiAKIAotICAgLi4gbWV0aG9kOjogc2V0X3BhcmFtKHBhcmFtLCB2YWx1ZSwgaGVhZGVyPSdDb250ZW50LVR5cGUnLCByZXF1b3RlPVRydWUsIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycpCisgICAuLiBtZXRob2Q6OiBzZXRfcGFyYW0ocGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycsIHJlcGxhY2U9RmFsc2UpCiAKICAgICAgIFNldCBhIHBhcmFtZXRlciBpbiB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyLiAgSWYgdGhlCiAgICAgICBwYXJhbWV0ZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGhlYWRlciwgaXRzIHZhbHVlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aApAQCAtNDI3LDYgKzQ4NCwxMiBAQAogICAgICAgbGFuZ3VhZ2UsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHN0cmluZy4gIEJvdGggKmNoYXJzZXQqIGFuZCAqbGFuZ3VhZ2UqCiAgICAgICBzaG91bGQgYmUgc3RyaW5ncy4KIAorICAgICAgSWYgKnJlcGxhY2UqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpIHRoZSBoZWFkZXIgaXMgbW92ZWQgdG8gdGhlCisgICAgICBlbmQgb2YgdGhlIGxpc3Qgb2YgaGVhZGVycy4gIElmICpyZXBsYWNlKiBpcyBgYFRydWVgYCwgdGhlIGhlYWRlcgorICAgICAgd2lsbCBiZSB1cGRhdGVkIGluIHBsYWNlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCBgYHJlcGxhY2VgYCBrZXl3b3JkIHdhcyBhZGRlZC4KKwogCiAgICAuLiBtZXRob2Q6OiBkZWxfcGFyYW0ocGFyYW0sIGhlYWRlcj0nY29udGVudC10eXBlJywgcmVxdW90ZT1UcnVlKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5wYXJzZXIucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucGFyc2VyLnJzdAppbmRleCBlZTZhZjNmLi45ZjEzN2NkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5wYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnBhcnNlci5yc3QKQEAgLTYwLDE1ICs2MCwxOCBAQAogSGVyZSBpcyB0aGUgQVBJIGZvciB0aGUgOmNsYXNzOmBGZWVkUGFyc2VyYDoKIAogCi0uLiBjbGFzczo6IEZlZWRQYXJzZXIoX2ZhY3Rvcnk9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9cG9saWN5LmRlZmF1bHQpCisuLiBjbGFzczo6IEZlZWRQYXJzZXIoX2ZhY3Rvcnk9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9cG9saWN5LmNvbXBhdDMyKQogCiAgICBDcmVhdGUgYSA6Y2xhc3M6YEZlZWRQYXJzZXJgIGluc3RhbmNlLiAgT3B0aW9uYWwgKl9mYWN0b3J5KiBpcyBhIG5vLWFyZ3VtZW50CiAgICBjYWxsYWJsZSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbmV3IG1lc3NhZ2Ugb2JqZWN0IGlzIG5lZWRlZC4gIEl0CiAgICBkZWZhdWx0cyB0byB0aGUgOmNsYXNzOmBlbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGNsYXNzLgogCi0gICBUaGUgKnBvbGljeSoga2V5d29yZCBzcGVjaWZpZXMgYSA6bW9kOmB+ZW1haWwucG9saWN5YCBvYmplY3QgdGhhdCBjb250cm9scyBhCi0gICBudW1iZXIgb2YgYXNwZWN0cyBvZiB0aGUgcGFyc2VyJ3Mgb3BlcmF0aW9uLiAgVGhlIGRlZmF1bHQgcG9saWN5IG1haW50YWlucwotICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgIElmICpwb2xpY3kqIGlzIHNwZWNpZmllZCAoaXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgCisgICBjbGFzcykgdXNlIHRoZSBydWxlcyBpdCBzcGVjaWZpZXMgdG8gdXBkYXRlIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgIG1lc3NhZ2UuICBJZiAqcG9saWN5KiBpcyBub3Qgc2V0LCB1c2UgdGhlIDpjbGFzczpgY29tcGF0MzIKKyAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBwb2xpY3ksIHdoaWNoIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIHRoZSBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMyBBZGRlZCB0aGUgKnBvbGljeSoga2V5d29yZC4KIApAQCAtMTEzLDcgKzExNiw3IEBACiAgICBUaGUgQnl0ZXNIZWFkZXJQYXJzZXIgY2xhc3MuCiAKIAotLi4gY2xhc3M6OiBQYXJzZXIoX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorLi4gY2xhc3M6OiBQYXJzZXIoX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgcG9saWN5PXBvbGljeS5jb21wYXQzMikKIAogICAgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgOmNsYXNzOmBQYXJzZXJgIGNsYXNzIHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50CiAgICAqX2NsYXNzKi4gIFRoaXMgbXVzdCBiZSBhIGNhbGxhYmxlIGZhY3RvcnkgKHN1Y2ggYXMgYSBmdW5jdGlvbiBvciBhIGNsYXNzKSwgYW5kCkBAIC0xMjEsOSArMTI0LDEyIEBACiAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIChzZWUgOm1vZDpgZW1haWwubWVzc2FnZWApLiAgVGhlIGZhY3Rvcnkgd2lsbAogICAgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLgogCi0gICBUaGUgKnBvbGljeSoga2V5d29yZCBzcGVjaWZpZXMgYSA6bW9kOmB+ZW1haWwucG9saWN5YCBvYmplY3QgdGhhdCBjb250cm9scyBhCi0gICBudW1iZXIgb2YgYXNwZWN0cyBvZiB0aGUgcGFyc2VyJ3Mgb3BlcmF0aW9uLiAgVGhlIGRlZmF1bHQgcG9saWN5IG1haW50YWlucwotICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgIElmICpwb2xpY3kqIGlzIHNwZWNpZmllZCAoaXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgCisgICBjbGFzcykgdXNlIHRoZSBydWxlcyBpdCBzcGVjaWZpZXMgdG8gdXBkYXRlIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgIG1lc3NhZ2UuICBJZiAqcG9saWN5KiBpcyBub3Qgc2V0LCB1c2UgdGhlIDpjbGFzczpgY29tcGF0MzIKKyAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBwb2xpY3ksIHdoaWNoIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIHRoZSBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgUmVtb3ZlZCB0aGUgKnN0cmljdCogYXJndW1lbnQgdGhhdCB3YXMgZGVwcmVjYXRlZCBpbiAyLjQuICBBZGRlZCB0aGUKQEAgLTE1OSwxNSArMTY1LDE4IEBACiAgICAgICBPcHRpb25hbCAqaGVhZGVyc29ubHkqIGlzIGFzIHdpdGggdGhlIDptZXRoOmBwYXJzZWAgbWV0aG9kLgogCiAKLS4uIGNsYXNzOjogQnl0ZXNQYXJzZXIoX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorLi4gY2xhc3M6OiBCeXRlc1BhcnNlcihfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9cG9saWN5LmNvbXBhdDMyKQogCiAgICBUaGlzIGNsYXNzIGlzIGV4YWN0bHkgcGFyYWxsZWwgdG8gOmNsYXNzOmBQYXJzZXJgLCBidXQgaGFuZGxlcyBieXRlcyBpbnB1dC4KICAgIFRoZSAqX2NsYXNzKiBhbmQgKnN0cmljdCogYXJndW1lbnRzIGFyZSBpbnRlcnByZXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yCiAgICB0aGUgOmNsYXNzOmBQYXJzZXJgIGNvbnN0cnVjdG9yLgogCi0gICBUaGUgKnBvbGljeSoga2V5d29yZCBzcGVjaWZpZXMgYSA6bW9kOmB+ZW1haWwucG9saWN5YCBvYmplY3QgdGhhdAotICAgY29udHJvbHMgYSBudW1iZXIgb2YgYXNwZWN0cyBvZiB0aGUgcGFyc2VyJ3Mgb3BlcmF0aW9uLiAgVGhlIGRlZmF1bHQKLSAgIHBvbGljeSBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgIElmICpwb2xpY3kqIGlzIHNwZWNpZmllZCAoaXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgCisgICBjbGFzcykgdXNlIHRoZSBydWxlcyBpdCBzcGVjaWZpZXMgdG8gdXBkYXRlIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgIG1lc3NhZ2UuICBJZiAqcG9saWN5KiBpcyBub3Qgc2V0LCB1c2UgdGhlIDpjbGFzczpgY29tcGF0MzIKKyAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBwb2xpY3ksIHdoaWNoIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIHRoZSBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgUmVtb3ZlZCB0aGUgKnN0cmljdCogYXJndW1lbnQuICBBZGRlZCB0aGUgKnBvbGljeSoga2V5d29yZC4KQEAgLTIwOSw3ICsyMTgsNyBAQAogLi4gY3VycmVudG1vZHVsZTo6IGVtYWlsCiAKIC4uIGZ1bmN0aW9uOjogbWVzc2FnZV9mcm9tX3N0cmluZyhzLCBfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuY29tcGF0MzIpCiAKICAgIFJldHVybiBhIG1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZSBmcm9tIGEgc3RyaW5nLiAgVGhpcyBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8KICAgIGBgUGFyc2VyKCkucGFyc2VzdHIocylgYC4gICpfY2xhc3MqIGFuZCAqcG9saWN5KiBhcmUgaW50ZXJwcmV0ZWQgYXMKQEAgLTIxOSw3ICsyMjgsNyBAQAogICAgICAgUmVtb3ZlZCB0aGUgKnN0cmljdCogYXJndW1lbnQuICBBZGRlZCB0aGUgKnBvbGljeSoga2V5d29yZC4KIAogLi4gZnVuY3Rpb246OiBtZXNzYWdlX2Zyb21fYnl0ZXMocywgX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5jb21wYXQzMikKIAogICAgUmV0dXJuIGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlIGZyb20gYSBieXRlIHN0cmluZy4gIFRoaXMgaXMgZXhhY3RseQogICAgZXF1aXZhbGVudCB0byBgYEJ5dGVzUGFyc2VyKCkucGFyc2VieXRlcyhzKWBgLiAgT3B0aW9uYWwgKl9jbGFzcyogYW5kCkBAIC0yMzEsNyArMjQwLDcgQEAKICAgICAgIFJlbW92ZWQgdGhlICpzdHJpY3QqIGFyZ3VtZW50LiAgQWRkZWQgdGhlICpwb2xpY3kqIGtleXdvcmQuCiAKIC4uIGZ1bmN0aW9uOjogbWVzc2FnZV9mcm9tX2ZpbGUoZnAsIF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3k9cG9saWN5LmNvbXBhdDMyKQogCiAgICBSZXR1cm4gYSBtZXNzYWdlIG9iamVjdCBzdHJ1Y3R1cmUgdHJlZSBmcm9tIGFuIG9wZW4gOnRlcm06YGZpbGUgb2JqZWN0YC4KICAgIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGBgUGFyc2VyKCkucGFyc2UoZnApYGAuICAqX2NsYXNzKgpAQCAtMjQyLDcgKzI1MSw3IEBACiAgICAgICBSZW1vdmVkIHRoZSAqc3RyaWN0KiBhcmd1bWVudC4gIEFkZGVkIHRoZSAqcG9saWN5KiBrZXl3b3JkLgogCiAuLiBmdW5jdGlvbjo6IG1lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZShmcCwgX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5jb21wYXQzMikKIAogICAgUmV0dXJuIGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlIHRyZWUgZnJvbSBhbiBvcGVuIGJpbmFyeSA6dGVybTpgZmlsZQogICAgb2JqZWN0YC4gIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGBgQnl0ZXNQYXJzZXIoKS5wYXJzZShmcClgYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CmluZGV4IGNiMjAyM2MuLjk3MzU4ZjAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdApAQCAtOTcsNiArOTcsMTcgQEAKIGBgc2VuZG1haWwnc2BgIGBgc3RkaW5gYCwgd2hlcmUgdGhlIGRlZmF1bHQgcG9saWN5IHdvdWxkIHVzZSBgYFxuYGAgbGluZQogc2VwYXJhdG9ycy4KIAorU29tZSBlbWFpbCBwYWNrYWdlIG1ldGhvZHMgYWNjZXB0IGEgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCwgYWxsb3dpbmcgdGhlCitwb2xpY3kgdG8gYmUgb3ZlcnJpZGRlbiBmb3IgdGhhdCBtZXRob2QuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIHVzZXMKK3RoZSA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19zdHJpbmdgIG1ldGhvZCBvZiB0aGUgKm1zZyogb2JqZWN0IGZyb20KK3RoZSBwcmV2aW91cyBleGFtcGxlIGFuZCB3cml0ZXMgdGhlIG1lc3NhZ2UgdG8gYSBmaWxlIHVzaW5nIHRoZSBuYXRpdmUgbGluZQorc2VwYXJhdG9ycyBmb3IgdGhlIHBsYXRmb3JtIG9uIHdoaWNoIGl0IGlzIHJ1bm5pbmc6OgorCisgICA+Pj4gaW1wb3J0IG9zCisgICA+Pj4gd2l0aCBvcGVuKCdjb252ZXJ0ZWQudHh0JywgJ3diJykgYXMgZjoKKyAgIC4uLiAgICAgZi53cml0ZShtc2cuYXNfYnl0ZXMocG9saWN5PW1zZy5wb2xpY3kuY2xvbmUobGluZXNlcD1vcy5saW5lc2VwKSkpCisgICAxNworCiBQb2xpY3kgb2JqZWN0cyBjYW4gYWxzbyBiZSBjb21iaW5lZCB1c2luZyB0aGUgYWRkaXRpb24gb3BlcmF0b3IsIHByb2R1Y2luZyBhCiBwb2xpY3kgb2JqZWN0IHdob3NlIHNldHRpbmdzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBub24tZGVmYXVsdCB2YWx1ZXMgb2YgdGhlCiBzdW1tZWQgb2JqZWN0czo6CkBAIC0zNjAsNyArMzcxLDcgQEAKICAgIHRvKSA6cmZjOmA1MzIyYCwgOnJmYzpgMjA0N2AsIGFuZCB0aGUgY3VycmVudCBNSU1FIFJGQ3MuCiAKICAgIFRoaXMgcG9saWN5IGFkZHMgbmV3IGhlYWRlciBwYXJzaW5nIGFuZCBmb2xkaW5nIGFsZ29yaXRobXMuICBJbnN0ZWFkIG9mCi0gICBzaW1wbGUgc3RyaW5ncywgaGVhZGVycyBhcmUgY3VzdG9tIG9iamVjdHMgd2l0aCBjdXN0b20gYXR0cmlidXRlcyBkZXBlbmRpbmcKKyAgIHNpbXBsZSBzdHJpbmdzLCBoZWFkZXJzIGFyZSBgYHN0cmBgIHN1YmNsYXNzZXMgd2l0aCBhdHRyaWJ1dGVzIHRoYXQgZGVwZW5kCiAgICBvbiB0aGUgdHlwZSBvZiB0aGUgZmllbGQuICBUaGUgcGFyc2luZyBhbmQgZm9sZGluZyBhbGdvcml0aG0gZnVsbHkgaW1wbGVtZW50CiAgICA6cmZjOmAyMDQ3YCBhbmQgOnJmYzpgNTMyMmAuCiAKQEAgLTM5Nyw2ICs0MDgsMjAgQEAKICAgICAgIGZpZWxkcyBhcmUgdHJlYXRlZCBhcyB1bnN0cnVjdHVyZWQuICBUaGlzIGxpc3Qgd2lsbCBiZSBjb21wbGV0ZWQgYmVmb3JlCiAgICAgICB0aGUgZXh0ZW5zaW9uIGlzIG1hcmtlZCBzdGFibGUuKQogCisgICAuLiBhdHRyaWJ1dGU6OiBjb250ZW50X21hbmFnZXIKKworICAgICAgQW4gb2JqZWN0IHdpdGggYXQgbGVhc3QgdHdvIG1ldGhvZHM6IGdldF9jb250ZW50IGFuZCBzZXRfY29udGVudC4gIFdoZW4KKyAgICAgIHRoZSA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudGAgb3IKKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9jb250ZW50YCBtZXRob2Qgb2YgYQorICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3QgaXMgY2FsbGVkLCBpdCBjYWxscyB0aGUKKyAgICAgIGNvcnJlc3BvbmRpbmcgbWV0aG9kIG9mIHRoaXMgb2JqZWN0LCBwYXNzaW5nIGl0IHRoZSBtZXNzYWdlIG9iamVjdCBhcyBpdHMKKyAgICAgIGZpcnN0IGFyZ3VtZW50LCBhbmQgYW55IGFyZ3VtZW50cyBvciBrZXl3b3JkcyB0aGF0IHdlcmUgcGFzc2VkIHRvIGl0IGFzCisgICAgICBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIEJ5IGRlZmF1bHQgYGBjb250ZW50X21hbmFnZXJgYCBpcyBzZXQgdG8KKyAgICAgIDpkYXRhOmB+ZW1haWwuY29udGVudG1hbmFnZXIucmF3X2RhdGFfbWFuYWdlcmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKICAgIFRoZSBjbGFzcyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWJzdHJhY3QKICAgIG1ldGhvZHMgb2YgOmNsYXNzOmBQb2xpY3lgOgogCkBAIC00MTYsNyArNDQxLDcgQEAKICAgICAgIFRoZSBuYW1lIGlzIHJldHVybmVkIHVuY2hhbmdlZC4gIElmIHRoZSBpbnB1dCB2YWx1ZSBoYXMgYSBgYG5hbWVgYAogICAgICAgYXR0cmlidXRlIGFuZCBpdCBtYXRjaGVzICpuYW1lKiBpZ25vcmluZyBjYXNlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQKICAgICAgIHVuY2hhbmdlZC4gIE90aGVyd2lzZSB0aGUgKm5hbWUqIGFuZCAqdmFsdWUqIGFyZSBwYXNzZWQgdG8KLSAgICAgIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgY3VzdG9tIGhlYWRlciBvYmplY3QgaXMgcmV0dXJuZWQgYXMKKyAgICAgIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgaGVhZGVyIG9iamVjdCBpcyByZXR1cm5lZCBhcwogICAgICAgdGhlIHZhbHVlLiAgSW4gdGhpcyBjYXNlIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkIGlmIHRoZSBpbnB1dCB2YWx1ZQogICAgICAgY29udGFpbnMgQ1Igb3IgTEYgY2hhcmFjdGVycy4KIApAQCAtNDI0LDcgKzQ0OSw3IEBACiAKICAgICAgIElmIHRoZSB2YWx1ZSBoYXMgYSBgYG5hbWVgYCBhdHRyaWJ1dGUsIGl0IGlzIHJldHVybmVkIHRvIHVubW9kaWZpZWQuCiAgICAgICBPdGhlcndpc2UgdGhlICpuYW1lKiwgYW5kIHRoZSAqdmFsdWUqIHdpdGggYW55IENSIG9yIExGIGNoYXJhY3RlcnMKLSAgICAgIHJlbW92ZWQsIGFyZSBwYXNzZWQgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgY3VzdG9tCisgICAgICByZW1vdmVkLCBhcmUgcGFzc2VkIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAsIGFuZCB0aGUgcmVzdWx0aW5nCiAgICAgICBoZWFkZXIgb2JqZWN0IGlzIHJldHVybmVkLiAgQW55IHN1cnJvZ2F0ZWVzY2FwZWQgYnl0ZXMgZ2V0IHR1cm5lZCBpbnRvCiAgICAgICB0aGUgdW5pY29kZSB1bmtub3duLWNoYXJhY3RlciBnbHlwaC4KIApAQCAtNDM0LDkgKzQ1OSw5IEBACiAgICAgICBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSAnc291cmNlIHZhbHVlJyBpZiBhbmQgb25seSBpZiBpdCBkb2VzIG5vdAogICAgICAgaGF2ZSBhIGBgbmFtZWBgIGF0dHJpYnV0ZSAoaGF2aW5nIGEgYGBuYW1lYGAgYXR0cmlidXRlIG1lYW5zIGl0IGlzIGEKICAgICAgIGhlYWRlciBvYmplY3Qgb2Ygc29tZSBzb3J0KS4gIElmIGEgc291cmNlIHZhbHVlIG5lZWRzIHRvIGJlIHJlZm9sZGVkCi0gICAgICBhY2NvcmRpbmcgdG8gdGhlIHBvbGljeSwgaXQgaXMgY29udmVydGVkIGludG8gYSBjdXN0b20gaGVhZGVyIG9iamVjdCBieQorICAgICAgYWNjb3JkaW5nIHRvIHRoZSBwb2xpY3ksIGl0IGlzIGNvbnZlcnRlZCBpbnRvIGEgaGVhZGVyIG9iamVjdCBieQogICAgICAgcGFzc2luZyB0aGUgKm5hbWUqIGFuZCB0aGUgKnZhbHVlKiB3aXRoIGFueSBDUiBhbmQgTEYgY2hhcmFjdGVycyByZW1vdmVkCi0gICAgICB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLiAgRm9sZGluZyBvZiBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGlzIGRvbmUgYnkKKyAgICAgIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAuICBGb2xkaW5nIG9mIGEgaGVhZGVyIG9iamVjdCBpcyBkb25lIGJ5CiAgICAgICBjYWxsaW5nIGl0cyBgYGZvbGRgYCBtZXRob2Qgd2l0aCB0aGUgY3VycmVudCBwb2xpY3kuCiAKICAgICAgIFNvdXJjZSB2YWx1ZXMgYXJlIHNwbGl0IGludG8gbGluZXMgdXNpbmcgOm1ldGg6YH5zdHIuc3BsaXRsaW5lc2AuICBJZgpAQCAtNDkxLDIzICs1MTYsMjMgQEAKIHRoZSBlbWFpbCBwYWNrYWdlIGlzIGNoYW5nZWQgZnJvbSB0aGUgUHl0aG9uIDMuMiBBUEkgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgogCiAgICAqIFNldHRpbmcgYSBoZWFkZXIgb24gYSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHJlc3VsdHMgaW4gdGhhdAotICAgICBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQuCisgICAgIGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgaGVhZGVyIG9iamVjdCBjcmVhdGVkLgogCiAgICAqIEZldGNoaW5nIGEgaGVhZGVyIHZhbHVlIGZyb20gYSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHJlc3VsdHMKLSAgICAgaW4gdGhhdCBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQgYW5kCisgICAgIGluIHRoYXQgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQgYW5kCiAgICAgIHJldHVybmVkLgogCi0gICAqIEFueSBjdXN0b20gaGVhZGVyIG9iamVjdCwgb3IgYW55IGhlYWRlciB0aGF0IGlzIHJlZm9sZGVkIGR1ZSB0byB0aGUKKyAgICogQW55IGhlYWRlciBvYmplY3QsIG9yIGFueSBoZWFkZXIgdGhhdCBpcyByZWZvbGRlZCBkdWUgdG8gdGhlCiAgICAgIHBvbGljeSBzZXR0aW5ncywgaXMgZm9sZGVkIHVzaW5nIGFuIGFsZ29yaXRobSB0aGF0IGZ1bGx5IGltcGxlbWVudHMgdGhlCiAgICAgIFJGQyBmb2xkaW5nIGFsZ29yaXRobXMsIGluY2x1ZGluZyBrbm93aW5nIHdoZXJlIGVuY29kZWQgd29yZHMgYXJlIHJlcXVpcmVkCiAgICAgIGFuZCBhbGxvd2VkLgogCiBGcm9tIHRoZSBhcHBsaWNhdGlvbiB2aWV3LCB0aGlzIG1lYW5zIHRoYXQgYW55IGhlYWRlciBvYnRhaW5lZCB0aHJvdWdoIHRoZQotOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpcyBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IHdpdGggY3VzdG9tCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGlzIGEgaGVhZGVyIG9iamVjdCB3aXRoIGV4dHJhCiBhdHRyaWJ1dGVzLCB3aG9zZSBzdHJpbmcgdmFsdWUgaXMgdGhlIGZ1bGx5IGRlY29kZWQgdW5pY29kZSB2YWx1ZSBvZiB0aGUKIGhlYWRlci4gIExpa2V3aXNlLCBhIGhlYWRlciBtYXkgYmUgYXNzaWduZWQgYSBuZXcgdmFsdWUsIG9yIGEgbmV3IGhlYWRlcgogY3JlYXRlZCwgdXNpbmcgYSB1bmljb2RlIHN0cmluZywgYW5kIHRoZSBwb2xpY3kgd2lsbCB0YWtlIGNhcmUgb2YgY29udmVydGluZwogdGhlIHVuaWNvZGUgc3RyaW5nIGludG8gdGhlIGNvcnJlY3QgUkZDIGVuY29kZWQgZm9ybS4KIAotVGhlIGN1c3RvbSBoZWFkZXIgb2JqZWN0cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGluCitUaGUgaGVhZGVyIG9iamVjdHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgYXJlIGRlc2NyaWJlZCBpbgogOm1vZDpgfmVtYWlsLmhlYWRlcnJlZ2lzdHJ5YC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnJzdAppbmRleCBhNmNiYmNlLi4zMzFkMmVmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwucnN0CkBAIC01Myw2ICs1Myw3IEBACiAgICBlbWFpbC5nZW5lcmF0b3IucnN0CiAgICBlbWFpbC5wb2xpY3kucnN0CiAgICBlbWFpbC5oZWFkZXJyZWdpc3RyeS5yc3QKKyAgIGVtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdAogICAgZW1haWwubWltZS5yc3QKICAgIGVtYWlsLmhlYWRlci5yc3QKICAgIGVtYWlsLmNoYXJzZXQucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC51dGlsLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0CmluZGV4IGY3NTk3NWUuLjIxOWUyODQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0CkBAIC05OCwxMiArOTgsOSBAQAogCiAuLiBmdW5jdGlvbjo6IG1rdGltZV90eih0dXBsZSkKIAotICAgVHVybiBhIDEwLXR1cGxlIGFzIHJldHVybmVkIGJ5IDpmdW5jOmBwYXJzZWRhdGVfdHpgIGludG8gYSBVVEMgdGltZXN0YW1wLiAgSXQKLSAgIHRoZSB0aW1lem9uZSBpdGVtIGluIHRoZSB0dXBsZSBpcyBgYE5vbmVgYCwgYXNzdW1lIGxvY2FsIHRpbWUuICBNaW5vcgotICAgZGVmaWNpZW5jeTogOmZ1bmM6YG1rdGltZV90emAgaW50ZXJwcmV0cyB0aGUgZmlyc3QgOCBlbGVtZW50cyBvZiAqdHVwbGUqIGFzIGEKLSAgIGxvY2FsIHRpbWUgYW5kIHRoZW4gY29tcGVuc2F0ZXMgZm9yIHRoZSB0aW1lem9uZSBkaWZmZXJlbmNlLiAgVGhpcyBtYXkgeWllbGQgYQotICAgc2xpZ2h0IGVycm9yIGFyb3VuZCBjaGFuZ2VzIGluIGRheWxpZ2h0IHNhdmluZ3MgdGltZSwgdGhvdWdoIG5vdCB3b3J0aCB3b3JyeWluZwotICAgYWJvdXQgZm9yIGNvbW1vbiB1c2UuCisgICBUdXJuIGEgMTAtdHVwbGUgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YHBhcnNlZGF0ZV90emAgaW50byBhIFVUQworICAgdGltZXN0YW1wIChzZWNvbmRzIHNpbmNlIHRoZSBFcG9jaCkuICBJZiB0aGUgdGltZXpvbmUgaXRlbSBpbiB0aGUKKyAgIHR1cGxlIGlzIGBgTm9uZWBgLCBhc3N1bWUgbG9jYWwgdGltZS4KIAogCiAuLiBmdW5jdGlvbjo6IGZvcm1hdGRhdGUodGltZXZhbD1Ob25lLCBsb2NhbHRpbWU9RmFsc2UsIHVzZWdtdD1GYWxzZSkKQEAgLTIxMCw0ICsyMDcsMyBAQAogLi4gWyNdIE5vdGUgdGhhdCB0aGUgc2lnbiBvZiB0aGUgdGltZXpvbmUgb2Zmc2V0IGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgc2lnbiBvZiB0aGUKICAgIGBgdGltZS50aW1lem9uZWBgIHZhcmlhYmxlIGZvciB0aGUgc2FtZSB0aW1lem9uZTsgdGhlIGxhdHRlciB2YXJpYWJsZSBmb2xsb3dzCiAgICB0aGUgUE9TSVggc3RhbmRhcmQgd2hpbGUgdGhpcyBtb2R1bGUgZm9sbG93cyA6cmZjOmAyODIyYC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdCBiL0RvYy9saWJyYXJ5L2Vuc3VyZXBpcC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxMmY1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2Vuc3VyZXBpcC5yc3QKQEAgLTAsMCArMSwxMzEgQEAKKzptb2Q6YGVuc3VyZXBpcGAgLS0tIEJvb3RzdHJhcHBpbmcgdGhlIGBgcGlwYGAgaW5zdGFsbGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBlbnN1cmVwaXAKKyAgIDpzeW5vcHNpczogQm9vdHN0cmFwcGluZyB0aGUgYGBwaXBgYCBpbnN0YWxsZXIgaW50byBhbiBleGlzdGluZyBQeXRob24KKyAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwgZW52aXJvbm1lbnQuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgOm1vZDpgZW5zdXJlcGlwYCBwYWNrYWdlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGJvb3RzdHJhcHBpbmcgdGhlIGBgcGlwYGAKK2luc3RhbGxlciBpbnRvIGFuIGV4aXN0aW5nIFB5dGhvbiBpbnN0YWxsYXRpb24gb3IgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhpcworYm9vdHN0cmFwcGluZyBhcHByb2FjaCByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IGBgcGlwYGAgaXMgYW4gaW5kZXBlbmRlbnQKK3Byb2plY3Qgd2l0aCBpdHMgb3duIHJlbGVhc2UgY3ljbGUsIGFuZCB0aGUgbGF0ZXN0IGF2YWlsYWJsZSBzdGFibGUgdmVyc2lvbgoraXMgYnVuZGxlZCB3aXRoIG1haW50ZW5hbmNlIGFuZCBmZWF0dXJlIHJlbGVhc2VzIG9mIHRoZSBDUHl0aG9uIHJlZmVyZW5jZQoraW50ZXJwcmV0ZXIuCisKK0luIG1vc3QgY2FzZXMsIGVuZCB1c2VycyBvZiBQeXRob24gc2hvdWxkbid0IG5lZWQgdG8gaW52b2tlIHRoaXMgbW9kdWxlCitkaXJlY3RseSAoYXMgYGBwaXBgYCBzaG91bGQgYmUgYm9vdHN0cmFwcGVkIGJ5IGRlZmF1bHQpLCBidXQgaXQgbWF5IGJlCituZWVkZWQgaWYgaW5zdGFsbGluZyBgYHBpcGBgIHdhcyBza2lwcGVkIHdoZW4gaW5zdGFsbGluZyBQeXRob24gKG9yCit3aGVuIGNyZWF0aW5nIGEgdmlydHVhbCBlbnZpcm9ubWVudCkgb3IgYWZ0ZXIgZXhwbGljaXRseSB1bmluc3RhbGxpbmcKK2BgcGlwYGAuCisKKy4uIG5vdGU6OgorCisgICBUaGlzIG1vZHVsZSAqZG9lcyBub3QqIGFjY2VzcyB0aGUgaW50ZXJuZXQuIEFsbCBvZiB0aGUgY29tcG9uZW50cworICAgbmVlZGVkIHRvIGJvb3RzdHJhcCBgYHBpcGBgIGFyZSBpbmNsdWRlZCBhcyBpbnRlcm5hbCBwYXJ0cyBvZiB0aGUKKyAgIHBhY2thZ2UuCisKKy4uIHNlZWFsc286OgorCisgICA6cmVmOmBpbnN0YWxsaW5nLWluZGV4YAorICAgICAgVGhlIGVuZCB1c2VyIGd1aWRlIGZvciBpbnN0YWxsaW5nIFB5dGhvbiBwYWNrYWdlcworCisgICA6cGVwOmA0NTNgOiBFeHBsaWNpdCBib290c3RyYXBwaW5nIG9mIHBpcCBpbiBQeXRob24gaW5zdGFsbGF0aW9ucworICAgICAgVGhlIG9yaWdpbmFsIHJhdGlvbmFsZSBhbmQgc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBtb2R1bGUuCisKKworQ29tbWFuZCBsaW5lIGludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBpcyBpbnZva2VkIHVzaW5nIHRoZSBpbnRlcnByZXRlcidzIGBgLW1gYCBzd2l0Y2guCisKK1RoZSBzaW1wbGVzdCBwb3NzaWJsZSBpbnZvY2F0aW9uIGlzOjoKKworICAgIHB5dGhvbiAtbSBlbnN1cmVwaXAKKworVGhpcyBpbnZvY2F0aW9uIHdpbGwgaW5zdGFsbCBgYHBpcGBgIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZCwKK2J1dCBvdGhlcndpc2UgZG9lcyBub3RoaW5nLiBUbyBlbnN1cmUgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIGBgcGlwYGAKK2lzIGF0IGxlYXN0IGFzIHJlY2VudCBhcyB0aGUgb25lIGJ1bmRsZWQgd2l0aCBgYGVuc3VyZXBpcGBgLCBwYXNzIHRoZQorYGAtLXVwZ3JhZGVgYCBvcHRpb246OgorCisgICAgcHl0aG9uIC1tIGVuc3VyZXBpcCAtLXVwZ3JhZGUKKworQnkgZGVmYXVsdCwgYGBwaXBgYCBpcyBpbnN0YWxsZWQgaW50byB0aGUgY3VycmVudCB2aXJ0dWFsIGVudmlyb25tZW50CisoaWYgb25lIGlzIGFjdGl2ZSkgb3IgaW50byB0aGUgc3lzdGVtIHNpdGUgcGFja2FnZXMgKGlmIHRoZXJlIGlzIG5vCithY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCkuIFRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb24gY2FuIGJlIGNvbnRyb2xsZWQKK3Rocm91Z2ggdHdvIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnM6CisKKyogYGAtLXJvb3QgPGRpcj5gYDogSW5zdGFsbHMgYGBwaXBgYCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcm9vdCBkaXJlY3RvcnkKKyAgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCAoaWYgYW55KQorICBvciB0aGUgZGVmYXVsdCByb290IGZvciB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uLgorKiBgYC0tdXNlcmBgOiBJbnN0YWxscyBgYHBpcGBgIGludG8gdGhlIHVzZXIgc2l0ZSBwYWNrYWdlcyBkaXJlY3RvcnkgcmF0aGVyCisgIHRoYW4gZ2xvYmFsbHkgZm9yIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gKHRoaXMgb3B0aW9uIGlzIG5vdAorICBwZXJtaXR0ZWQgaW5zaWRlIGFuIGFjdGl2ZSB2aXJ0dWFsIGVudmlyb25tZW50KS4KKworQnkgZGVmYXVsdCwgdGhlIHNjcmlwdHMgYGBwaXBYYGAgYW5kIGBgcGlwWC5ZYGAgd2lsbCBiZSBpbnN0YWxsZWQgKHdoZXJlCitYLlkgc3RhbmRzIGZvciB0aGUgdmVyc2lvbiBvZiBQeXRob24gdXNlZCB0byBpbnZva2UgYGBlbnN1cmVwaXBgYCkuIFRoZQorc2NyaXB0cyBpbnN0YWxsZWQgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCB0d28gYWRkaXRpb25hbCBjb21tYW5kIGxpbmUKK29wdGlvbnM6CisKKyogYGAtLWFsdGluc3RhbGxgYDogaWYgYW4gYWx0ZXJuYXRlIGluc3RhbGxhdGlvbiBpcyByZXF1ZXN0ZWQsIHRoZSBgYHBpcFhgYAorICBzY3JpcHQgd2lsbCAqbm90KiBiZSBpbnN0YWxsZWQuCisKKyogYGAtLWRlZmF1bHQtcGlwYGA6IGlmIGEgImRlZmF1bHQgcGlwIiBpbnN0YWxsYXRpb24gaXMgcmVxdWVzdGVkLCB0aGUKKyAgIGBgcGlwYGAgc2NyaXB0IHdpbGwgYmUgaW5zdGFsbGVkIGluIGFkZGl0aW9uIHRvIHRoZSB0d28gcmVndWxhciBzY3JpcHRzLgorCitQcm92aWRpbmcgYm90aCBvZiB0aGUgc2NyaXB0IHNlbGVjdGlvbiBvcHRpb25zIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24uCisKKworTW9kdWxlIEFQSQorLS0tLS0tLS0tLQorCis6bW9kOmBlbnN1cmVwaXBgIGV4cG9zZXMgdHdvIGZ1bmN0aW9ucyBmb3IgcHJvZ3JhbW1hdGljIHVzZToKKworLi4gZnVuY3Rpb246OiB2ZXJzaW9uKCkKKworICAgUmV0dXJucyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBidW5kbGVkIHZlcnNpb24gb2YgcGlwIHRoYXQgd2lsbCBiZQorICAgaW5zdGFsbGVkIHdoZW4gYm9vdHN0cmFwcGluZyBhbiBlbnZpcm9ubWVudC4KKworLi4gZnVuY3Rpb246OiBib290c3RyYXAocm9vdD1Ob25lLCB1cGdyYWRlPUZhbHNlLCB1c2VyPUZhbHNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbHRpbnN0YWxsPUZhbHNlLCBkZWZhdWx0X3BpcD1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTApCisKKyAgIEJvb3RzdHJhcHMgYGBwaXBgYCBpbnRvIHRoZSBjdXJyZW50IG9yIGRlc2lnbmF0ZWQgZW52aXJvbm1lbnQuCisKKyAgICpyb290KiBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgcm9vdCBkaXJlY3RvcnkgdG8gaW5zdGFsbCByZWxhdGl2ZSB0by4KKyAgIElmICpyb290KiBpcyBOb25lLCB0aGVuIGluc3RhbGxhdGlvbiB1c2VzIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb24KKyAgIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4KKworICAgKnVwZ3JhZGUqIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byB1cGdyYWRlIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbgorICAgb2YgYW4gZWFybGllciB2ZXJzaW9uIG9mIGBgcGlwYGAgdG8gdGhlIGJ1bmRsZWQgdmVyc2lvbi4KKworICAgKnVzZXIqIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSB0aGUgdXNlciBzY2hlbWUgcmF0aGVyIHRoYW4gaW5zdGFsbGluZworICAgZ2xvYmFsbHkuCisKKyAgIEJ5IGRlZmF1bHQsIHRoZSBzY3JpcHRzIGBgcGlwWGBgIGFuZCBgYHBpcFguWWBgIHdpbGwgYmUgaW5zdGFsbGVkICh3aGVyZQorICAgWC5ZIHN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBQeXRob24pLgorCisgICBJZiAqYWx0aW5zdGFsbCogaXMgc2V0LCB0aGVuIGBgcGlwWGBgIHdpbGwgKm5vdCogYmUgaW5zdGFsbGVkLgorCisgICBJZiAqZGVmYXVsdF9waXAqIGlzIHNldCwgdGhlbiBgYHBpcGBgIHdpbGwgYmUgaW5zdGFsbGVkIGluIGFkZGl0aW9uIHRvCisgICB0aGUgdHdvIHJlZ3VsYXIgc2NyaXB0cy4KKworICAgU2V0dGluZyBib3RoICphbHRpbnN0YWxsKiBhbmQgKmRlZmF1bHRfcGlwKiB3aWxsIHRyaWdnZXIKKyAgIDpleGM6YFZhbHVlRXJyb3JgLgorCisgICAqdmVyYm9zaXR5KiBjb250cm9scyB0aGUgbGV2ZWwgb2Ygb3V0cHV0IHRvIDpkYXRhOmBzeXMuc3Rkb3V0YCBmcm9tIHRoZQorICAgYm9vdHN0cmFwcGluZyBvcGVyYXRpb24uCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYm9vdHN0cmFwcGluZyBwcm9jZXNzIGhhcyBzaWRlIGVmZmVjdHMgb24gYm90aCBgYHN5cy5wYXRoYGAgYW5kCisgICAgICBgYG9zLmVudmlyb25gYC4gSW52b2tpbmcgdGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgaW4gYSBzdWJwcm9jZXNzCisgICAgICBpbnN0ZWFkIGFsbG93cyB0aGVzZSBzaWRlIGVmZmVjdHMgdG8gYmUgYXZvaWRlZC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBib290c3RyYXBwaW5nIHByb2Nlc3MgbWF5IGluc3RhbGwgYWRkaXRpb25hbCBtb2R1bGVzIHJlcXVpcmVkIGJ5CisgICAgICBgYHBpcGBgLCBidXQgb3RoZXIgc29mdHdhcmUgc2hvdWxkIG5vdCBhc3N1bWUgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwKKyAgICAgIGFsd2F5cyBiZSBwcmVzZW50IGJ5IGRlZmF1bHQgKGFzIHRoZSBkZXBlbmRlbmNpZXMgbWF5IGJlIHJlbW92ZWQgaW4gYQorICAgICAgZnV0dXJlIHZlcnNpb24gb2YgYGBwaXBgYCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnVtLnJzdCBiL0RvYy9saWJyYXJ5L2VudW0ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwM2QzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9lbnVtLnJzdApAQCAtMCwwICsxLDc1MiBAQAorOm1vZDpgZW51bWAgLS0tIFN1cHBvcnQgZm9yIGVudW1lcmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBlbnVtCisgICA6c3lub3BzaXM6IEltcGxlbWVudGF0aW9uIG9mIGFuIGVudW1lcmF0aW9uIGNsYXNzLgorCisuLiA6bW9kdWxlYXV0aG9yOjogRXRoYW4gRnVybWFuIDxldGhhbkBzdG9uZWxlYWYudXM+CisuLiA6c2VjdGlvbmF1dGhvcjo6IEJhcnJ5IFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4sCisuLiA6c2VjdGlvbmF1dGhvcjo6IEVsaSBCZW5kZXJza3kgPGVsaWJlbkBnbWFpbC5jb20+LAorLi4gOnNlY3Rpb25hdXRob3I6OiBFdGhhbiBGdXJtYW4gPGV0aGFuQHN0b25lbGVhZi51cz4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2VudW0ucHlgCisKKy0tLS0tLS0tLS0tLS0tLS0KKworQW4gZW51bWVyYXRpb24gaXMgYSBzZXQgb2Ygc3ltYm9saWMgbmFtZXMgKG1lbWJlcnMpIGJvdW5kIHRvIHVuaXF1ZSwKK2NvbnN0YW50IHZhbHVlcy4gIFdpdGhpbiBhbiBlbnVtZXJhdGlvbiwgdGhlIG1lbWJlcnMgY2FuIGJlIGNvbXBhcmVkCitieSBpZGVudGl0eSwgYW5kIHRoZSBlbnVtZXJhdGlvbiBpdHNlbGYgY2FuIGJlIGl0ZXJhdGVkIG92ZXIuCisKKworTW9kdWxlIENvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0d28gZW51bWVyYXRpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSB1bmlxdWUKK3NldHMgb2YgbmFtZXMgYW5kIHZhbHVlczogOmNsYXNzOmBFbnVtYCBhbmQgOmNsYXNzOmBJbnRFbnVtYC4gIEl0IGFsc28gZGVmaW5lcworb25lIGRlY29yYXRvciwgOmZ1bmM6YHVuaXF1ZWAuCisKKy4uIGNsYXNzOjogRW51bQorCisgICAgQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgZW51bWVyYXRlZCBjb25zdGFudHMuICBTZWUgc2VjdGlvbgorICAgIGBGdW5jdGlvbmFsIEFQSWBfIGZvciBhbiBhbHRlcm5hdGUgY29uc3RydWN0aW9uIHN5bnRheC4KKworLi4gY2xhc3M6OiBJbnRFbnVtCisKKyAgICBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBlbnVtZXJhdGVkIGNvbnN0YW50cyB0aGF0IGFyZSBhbHNvCisgICAgc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YGludGAuCisKKy4uIGZ1bmN0aW9uOjogdW5pcXVlCisKKyAgICBFbnVtIGNsYXNzIGRlY29yYXRvciB0aGF0IGVuc3VyZXMgb25seSBvbmUgbmFtZSBpcyBib3VuZCB0byBhbnkgb25lIHZhbHVlLgorCisKK0NyZWF0aW5nIGFuIEVudW0KKy0tLS0tLS0tLS0tLS0tLS0KKworRW51bWVyYXRpb25zIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSA6a2V5d29yZDpgY2xhc3NgIHN5bnRheCwgd2hpY2ggbWFrZXMgdGhlbQorZWFzeSB0byByZWFkIGFuZCB3cml0ZS4gIEFuIGFsdGVybmF0aXZlIGNyZWF0aW9uIG1ldGhvZCBpcyBkZXNjcmliZWQgaW4KK2BGdW5jdGlvbmFsIEFQSWBfLiAgVG8gZGVmaW5lIGFuIGVudW1lcmF0aW9uLCBzdWJjbGFzcyA6Y2xhc3M6YEVudW1gIGFzCitmb2xsb3dzOjoKKworICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEVudW0KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRW51bSk6CisgICAgLi4uICAgICByZWQgPSAxCisgICAgLi4uICAgICBncmVlbiA9IDIKKyAgICAuLi4gICAgIGJsdWUgPSAzCisgICAgLi4uCisKKy4uIG5vdGU6OiBOb21lbmNsYXR1cmUKKworICAtIFRoZSBjbGFzcyA6Y2xhc3M6YENvbG9yYCBpcyBhbiAqZW51bWVyYXRpb24qIChvciAqZW51bSopCisgIC0gVGhlIGF0dHJpYnV0ZXMgOmF0dHI6YENvbG9yLnJlZGAsIDphdHRyOmBDb2xvci5ncmVlbmAsIGV0Yy4sIGFyZQorICAgICplbnVtZXJhdGlvbiBtZW1iZXJzKiAob3IgKmVudW0gbWVtYmVycyopLgorICAtIFRoZSBlbnVtIG1lbWJlcnMgaGF2ZSAqbmFtZXMqIGFuZCAqdmFsdWVzKiAodGhlIG5hbWUgb2YKKyAgICA6YXR0cjpgQ29sb3IucmVkYCBpcyBgYHJlZGBgLCB0aGUgdmFsdWUgb2YgOmF0dHI6YENvbG9yLmJsdWVgIGlzCisgICAgYGAzYGAsIGV0Yy4pCisKKy4uIG5vdGU6OgorCisgICAgRXZlbiB0aG91Z2ggd2UgdXNlIHRoZSA6a2V5d29yZDpgY2xhc3NgIHN5bnRheCB0byBjcmVhdGUgRW51bXMsIEVudW1zCisgICAgYXJlIG5vdCBub3JtYWwgUHl0aG9uIGNsYXNzZXMuICBTZWUgYEhvdyBhcmUgRW51bXMgZGlmZmVyZW50P2BfIGZvcgorICAgIG1vcmUgZGV0YWlscy4KKworRW51bWVyYXRpb24gbWVtYmVycyBoYXZlIGh1bWFuIHJlYWRhYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbnM6OgorCisgICAgPj4+IHByaW50KENvbG9yLnJlZCkKKyAgICBDb2xvci5yZWQKKworLi4ud2hpbGUgdGhlaXIgYGByZXByYGAgaGFzIG1vcmUgaW5mb3JtYXRpb246OgorCisgICAgPj4+IHByaW50KHJlcHIoQ29sb3IucmVkKSkKKyAgICA8Q29sb3IucmVkOiAxPgorCitUaGUgKnR5cGUqIG9mIGFuIGVudW1lcmF0aW9uIG1lbWJlciBpcyB0aGUgZW51bWVyYXRpb24gaXQgYmVsb25ncyB0bzo6CisKKyAgICA+Pj4gdHlwZShDb2xvci5yZWQpCisgICAgPGVudW0gJ0NvbG9yJz4KKyAgICA+Pj4gaXNpbnN0YW5jZShDb2xvci5ncmVlbiwgQ29sb3IpCisgICAgVHJ1ZQorICAgID4+PgorCitFbnVtIG1lbWJlcnMgYWxzbyBoYXZlIGEgcHJvcGVydHkgdGhhdCBjb250YWlucyBqdXN0IHRoZWlyIGl0ZW0gbmFtZTo6CisKKyAgICA+Pj4gcHJpbnQoQ29sb3IucmVkLm5hbWUpCisgICAgcmVkCisKK0VudW1lcmF0aW9ucyBzdXBwb3J0IGl0ZXJhdGlvbiwgaW4gZGVmaW5pdGlvbiBvcmRlcjo6CisKKyAgICA+Pj4gY2xhc3MgU2hha2UoRW51bSk6CisgICAgLi4uICAgICB2YW5pbGxhID0gNworICAgIC4uLiAgICAgY2hvY29sYXRlID0gNAorICAgIC4uLiAgICAgY29va2llcyA9IDkKKyAgICAuLi4gICAgIG1pbnQgPSAzCisgICAgLi4uCisgICAgPj4+IGZvciBzaGFrZSBpbiBTaGFrZToKKyAgICAuLi4gICAgIHByaW50KHNoYWtlKQorICAgIC4uLgorICAgIFNoYWtlLnZhbmlsbGEKKyAgICBTaGFrZS5jaG9jb2xhdGUKKyAgICBTaGFrZS5jb29raWVzCisgICAgU2hha2UubWludAorCitFbnVtZXJhdGlvbiBtZW1iZXJzIGFyZSBoYXNoYWJsZSwgc28gdGhleSBjYW4gYmUgdXNlZCBpbiBkaWN0aW9uYXJpZXMgYW5kIHNldHM6OgorCisgICAgPj4+IGFwcGxlcyA9IHt9CisgICAgPj4+IGFwcGxlc1tDb2xvci5yZWRdID0gJ3JlZCBkZWxpY2lvdXMnCisgICAgPj4+IGFwcGxlc1tDb2xvci5ncmVlbl0gPSAnZ3Jhbm55IHNtaXRoJworICAgID4+PiBhcHBsZXMgPT0ge0NvbG9yLnJlZDogJ3JlZCBkZWxpY2lvdXMnLCBDb2xvci5ncmVlbjogJ2dyYW5ueSBzbWl0aCd9CisgICAgVHJ1ZQorCisKK1Byb2dyYW1tYXRpYyBhY2Nlc3MgdG8gZW51bWVyYXRpb24gbWVtYmVycyBhbmQgdGhlaXIgYXR0cmlidXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWV0aW1lcyBpdCdzIHVzZWZ1bCB0byBhY2Nlc3MgbWVtYmVycyBpbiBlbnVtZXJhdGlvbnMgcHJvZ3JhbW1hdGljYWxseSAoaS5lLgorc2l0dWF0aW9ucyB3aGVyZSBgYENvbG9yLnJlZGBgIHdvbid0IGRvIGJlY2F1c2UgdGhlIGV4YWN0IGNvbG9yIGlzIG5vdCBrbm93bgorYXQgcHJvZ3JhbS13cml0aW5nIHRpbWUpLiAgYGBFbnVtYGAgYWxsb3dzIHN1Y2ggYWNjZXNzOjoKKworICAgID4+PiBDb2xvcigxKQorICAgIDxDb2xvci5yZWQ6IDE+CisgICAgPj4+IENvbG9yKDMpCisgICAgPENvbG9yLmJsdWU6IDM+CisKK0lmIHlvdSB3YW50IHRvIGFjY2VzcyBlbnVtIG1lbWJlcnMgYnkgKm5hbWUqLCB1c2UgaXRlbSBhY2Nlc3M6OgorCisgICAgPj4+IENvbG9yWydyZWQnXQorICAgIDxDb2xvci5yZWQ6IDE+CisgICAgPj4+IENvbG9yWydncmVlbiddCisgICAgPENvbG9yLmdyZWVuOiAyPgorCitJZiB5b3UgaGF2ZSBhbiBlbnVtIG1lbWJlciBhbmQgbmVlZCBpdHMgOmF0dHI6YG5hbWVgIG9yIDphdHRyOmB2YWx1ZWA6OgorCisgICAgPj4+IG1lbWJlciA9IENvbG9yLnJlZAorICAgID4+PiBtZW1iZXIubmFtZQorICAgICdyZWQnCisgICAgPj4+IG1lbWJlci52YWx1ZQorICAgIDEKKworCitEdXBsaWNhdGluZyBlbnVtIG1lbWJlcnMgYW5kIHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGF2aW5nIHR3byBlbnVtIG1lbWJlcnMgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGludmFsaWQ6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEVudW0pOgorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLiAgICAgc3F1YXJlID0gMworICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byByZXVzZSBrZXk6ICdzcXVhcmUnCisKK0hvd2V2ZXIsIHR3byBlbnVtIG1lbWJlcnMgYXJlIGFsbG93ZWQgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gIEdpdmVuIHR3byBtZW1iZXJzCitBIGFuZCBCIHdpdGggdGhlIHNhbWUgdmFsdWUgKGFuZCBBIGRlZmluZWQgZmlyc3QpLCBCIGlzIGFuIGFsaWFzIHRvIEEuICBCeS12YWx1ZQorbG9va3VwIG9mIHRoZSB2YWx1ZSBvZiBBIGFuZCBCIHdpbGwgcmV0dXJuIEEuICBCeS1uYW1lIGxvb2t1cCBvZiBCIHdpbGwgYWxzbworcmV0dXJuIEE6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEVudW0pOgorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLiAgICAgZGlhbW9uZCA9IDEKKyAgICAuLi4gICAgIGNpcmNsZSA9IDMKKyAgICAuLi4gICAgIGFsaWFzX2Zvcl9zcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlLnNxdWFyZQorICAgIDxTaGFwZS5zcXVhcmU6IDI+CisgICAgPj4+IFNoYXBlLmFsaWFzX2Zvcl9zcXVhcmUKKyAgICA8U2hhcGUuc3F1YXJlOiAyPgorICAgID4+PiBTaGFwZSgyKQorICAgIDxTaGFwZS5zcXVhcmU6IDI+CisKKy4uIG5vdGU6OgorCisgICAgQXR0ZW1wdGluZyB0byBjcmVhdGUgYSBtZW1iZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGFscmVhZHkKKyAgICBkZWZpbmVkIGF0dHJpYnV0ZSAoYW5vdGhlciBtZW1iZXIsIGEgbWV0aG9kLCBldGMuKSBvciBhdHRlbXB0aW5nIHRvIGNyZWF0ZQorICAgIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBtZW1iZXIgaXMgbm90IGFsbG93ZWQuCisKKworRW5zdXJpbmcgdW5pcXVlIGVudW1lcmF0aW9uIHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCBlbnVtZXJhdGlvbnMgYWxsb3cgbXVsdGlwbGUgbmFtZXMgYXMgYWxpYXNlcyBmb3IgdGhlIHNhbWUgdmFsdWUuCitXaGVuIHRoaXMgYmVoYXZpb3IgaXNuJ3QgZGVzaXJlZCwgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3IgY2FuIGJlIHVzZWQgdG8KK2Vuc3VyZSBlYWNoIHZhbHVlIGlzIHVzZWQgb25seSBvbmNlIGluIHRoZSBlbnVtZXJhdGlvbjoKKworLi4gZGVjb3JhdG9yOjogdW5pcXVlCisKK0EgOmtleXdvcmQ6YGNsYXNzYCBkZWNvcmF0b3Igc3BlY2lmaWNhbGx5IGZvciBlbnVtZXJhdGlvbnMuICBJdCBzZWFyY2hlcyBhbgorZW51bWVyYXRpb24ncyA6YXR0cjpgX19tZW1iZXJzX19gIGdhdGhlcmluZyBhbnkgYWxpYXNlcyBpdCBmaW5kczsgaWYgYW55IGFyZQorZm91bmQgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIHdpdGggdGhlIGRldGFpbHM6OgorCisgICAgPj4+IGZyb20gZW51bSBpbXBvcnQgRW51bSwgdW5pcXVlCisgICAgPj4+IEB1bmlxdWUKKyAgICAuLi4gY2xhc3MgTWlzdGFrZShFbnVtKToKKyAgICAuLi4gICAgIG9uZSA9IDEKKyAgICAuLi4gICAgIHR3byA9IDIKKyAgICAuLi4gICAgIHRocmVlID0gMworICAgIC4uLiAgICAgZm91ciA9IDMKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZHVwbGljYXRlIHZhbHVlcyBmb3VuZCBpbiA8ZW51bSAnTWlzdGFrZSc+OiBmb3VyIC0+IHRocmVlCisKKworSXRlcmF0aW9uCistLS0tLS0tLS0KKworSXRlcmF0aW5nIG92ZXIgdGhlIG1lbWJlcnMgb2YgYW4gZW51bSBkb2VzIG5vdCBwcm92aWRlIHRoZSBhbGlhc2VzOjoKKworICAgID4+PiBsaXN0KFNoYXBlKQorICAgIFs8U2hhcGUuc3F1YXJlOiAyPiwgPFNoYXBlLmRpYW1vbmQ6IDE+LCA8U2hhcGUuY2lyY2xlOiAzPl0KKworVGhlIHNwZWNpYWwgYXR0cmlidXRlIGBgX19tZW1iZXJzX19gYCBpcyBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgbWFwcGluZyBuYW1lcwordG8gbWVtYmVycy4gIEl0IGluY2x1ZGVzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZSBlbnVtZXJhdGlvbiwgaW5jbHVkaW5nIHRoZQorYWxpYXNlczo6CisKKyAgICA+Pj4gZm9yIG5hbWUsIG1lbWJlciBpbiBTaGFwZS5fX21lbWJlcnNfXy5pdGVtcygpOgorICAgIC4uLiAgICAgbmFtZSwgbWVtYmVyCisgICAgLi4uCisgICAgKCdzcXVhcmUnLCA8U2hhcGUuc3F1YXJlOiAyPikKKyAgICAoJ2RpYW1vbmQnLCA8U2hhcGUuZGlhbW9uZDogMT4pCisgICAgKCdjaXJjbGUnLCA8U2hhcGUuY2lyY2xlOiAzPikKKyAgICAoJ2FsaWFzX2Zvcl9zcXVhcmUnLCA8U2hhcGUuc3F1YXJlOiAyPikKKworVGhlIGBgX19tZW1iZXJzX19gYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgZm9yIGRldGFpbGVkIHByb2dyYW1tYXRpYyBhY2Nlc3MgdG8KK3RoZSBlbnVtZXJhdGlvbiBtZW1iZXJzLiAgRm9yIGV4YW1wbGUsIGZpbmRpbmcgYWxsIHRoZSBhbGlhc2VzOjoKKworICAgID4+PiBbbmFtZSBmb3IgbmFtZSwgbWVtYmVyIGluIFNoYXBlLl9fbWVtYmVyc19fLml0ZW1zKCkgaWYgbWVtYmVyLm5hbWUgIT0gbmFtZV0KKyAgICBbJ2FsaWFzX2Zvcl9zcXVhcmUnXQorCisKK0NvbXBhcmlzb25zCistLS0tLS0tLS0tLQorCitFbnVtZXJhdGlvbiBtZW1iZXJzIGFyZSBjb21wYXJlZCBieSBpZGVudGl0eTo6CisKKyAgICA+Pj4gQ29sb3IucmVkIGlzIENvbG9yLnJlZAorICAgIFRydWUKKyAgICA+Pj4gQ29sb3IucmVkIGlzIENvbG9yLmJsdWUKKyAgICBGYWxzZQorICAgID4+PiBDb2xvci5yZWQgaXMgbm90IENvbG9yLmJsdWUKKyAgICBUcnVlCisKK09yZGVyZWQgY29tcGFyaXNvbnMgYmV0d2VlbiBlbnVtZXJhdGlvbiB2YWx1ZXMgYXJlICpub3QqIHN1cHBvcnRlZC4gIEVudW0KK21lbWJlcnMgYXJlIG5vdCBpbnRlZ2VycyAoYnV0IHNlZSBgSW50RW51bWBfIGJlbG93KTo6CisKKyAgICA+Pj4gQ29sb3IucmVkIDwgQ29sb3IuYmx1ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgVHlwZUVycm9yOiB1bm9yZGVyYWJsZSB0eXBlczogQ29sb3IoKSA8IENvbG9yKCkKKworRXF1YWxpdHkgY29tcGFyaXNvbnMgYXJlIGRlZmluZWQgdGhvdWdoOjoKKworICAgID4+PiBDb2xvci5ibHVlID09IENvbG9yLnJlZAorICAgIEZhbHNlCisgICAgPj4+IENvbG9yLmJsdWUgIT0gQ29sb3IucmVkCisgICAgVHJ1ZQorICAgID4+PiBDb2xvci5ibHVlID09IENvbG9yLmJsdWUKKyAgICBUcnVlCisKK0NvbXBhcmlzb25zIGFnYWluc3Qgbm9uLWVudW1lcmF0aW9uIHZhbHVlcyB3aWxsIGFsd2F5cyBjb21wYXJlIG5vdCBlcXVhbAorKGFnYWluLCA6Y2xhc3M6YEludEVudW1gIHdhcyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGJlaGF2ZSBkaWZmZXJlbnRseSwgc2VlCitiZWxvdyk6OgorCisgICAgPj4+IENvbG9yLmJsdWUgPT0gMgorICAgIEZhbHNlCisKKworQWxsb3dlZCBtZW1iZXJzIGFuZCBhdHRyaWJ1dGVzIG9mIGVudW1lcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZXhhbXBsZXMgYWJvdmUgdXNlIGludGVnZXJzIGZvciBlbnVtZXJhdGlvbiB2YWx1ZXMuICBVc2luZyBpbnRlZ2VycyBpcworc2hvcnQgYW5kIGhhbmR5IChhbmQgcHJvdmlkZWQgYnkgZGVmYXVsdCBieSB0aGUgYEZ1bmN0aW9uYWwgQVBJYF8pLCBidXQgbm90CitzdHJpY3RseSBlbmZvcmNlZC4gIEluIHRoZSB2YXN0IG1ham9yaXR5IG9mIHVzZS1jYXNlcywgb25lIGRvZXNuJ3QgY2FyZSB3aGF0Cit0aGUgYWN0dWFsIHZhbHVlIG9mIGFuIGVudW1lcmF0aW9uIGlzLiAgQnV0IGlmIHRoZSB2YWx1ZSAqaXMqIGltcG9ydGFudCwKK2VudW1lcmF0aW9ucyBjYW4gaGF2ZSBhcmJpdHJhcnkgdmFsdWVzLgorCitFbnVtZXJhdGlvbnMgYXJlIFB5dGhvbiBjbGFzc2VzLCBhbmQgY2FuIGhhdmUgbWV0aG9kcyBhbmQgc3BlY2lhbCBtZXRob2RzIGFzCit1c3VhbC4gIElmIHdlIGhhdmUgdGhpcyBlbnVtZXJhdGlvbjo6CisKKyAgICA+Pj4gY2xhc3MgTW9vZChFbnVtKToKKyAgICAuLi4gICAgIGZ1bmt5ID0gMQorICAgIC4uLiAgICAgaGFwcHkgPSAzCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgZGVzY3JpYmUoc2VsZik6CisgICAgLi4uICAgICAgICAgIyBzZWxmIGlzIHRoZSBtZW1iZXIgaGVyZQorICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUsIHNlbGYudmFsdWUKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHJldHVybiAnbXkgY3VzdG9tIHN0ciEgezB9Jy5mb3JtYXQoc2VsZi52YWx1ZSkKKyAgICAuLi4KKyAgICAuLi4gICAgIEBjbGFzc21ldGhvZAorICAgIC4uLiAgICAgZGVmIGZhdm9yaXRlX21vb2QoY2xzKToKKyAgICAuLi4gICAgICAgICAjIGNscyBoZXJlIGlzIHRoZSBlbnVtZXJhdGlvbgorICAgIC4uLiAgICAgICAgIHJldHVybiBjbHMuaGFwcHkKKyAgICAuLi4KKworVGhlbjo6CisKKyAgICA+Pj4gTW9vZC5mYXZvcml0ZV9tb29kKCkKKyAgICA8TW9vZC5oYXBweTogMz4KKyAgICA+Pj4gTW9vZC5oYXBweS5kZXNjcmliZSgpCisgICAgKCdoYXBweScsIDMpCisgICAgPj4+IHN0cihNb29kLmZ1bmt5KQorICAgICdteSBjdXN0b20gc3RyISAxJworCitUaGUgcnVsZXMgZm9yIHdoYXQgaXMgYWxsb3dlZCBhcmUgYXMgZm9sbG93czogX3N1bmRlcl8gbmFtZXMgKHN0YXJ0aW5nIGFuZAorZW5kaW5nIHdpdGggYSBzaW5nbGUgdW5kZXJzY29yZSkgYXJlIHJlc2VydmVkIGJ5IGVudW0gYW5kIGNhbm5vdCBiZSB1c2VkOworYWxsIG90aGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCB3aXRoaW4gYW4gZW51bWVyYXRpb24gd2lsbCBiZWNvbWUgbWVtYmVycyBvZiB0aGlzCitlbnVtZXJhdGlvbiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICpfX2R1bmRlcl9fKiBuYW1lcyBhbmQgZGVzY3JpcHRvcnMgKG1ldGhvZHMKK2FyZSBhbHNvIGRlc2NyaXB0b3JzKS4KKworTm90ZTogIGlmIHlvdXIgZW51bWVyYXRpb24gZGVmaW5lcyA6bWV0aDpgX19uZXdfX2AgYW5kL29yIDptZXRoOmBfX2luaXRfX2AgdGhlbgord2hhdGV2ZXIgdmFsdWUocykgd2VyZSBnaXZlbiB0byB0aGUgZW51bSBtZW1iZXIgd2lsbCBiZSBwYXNzZWQgaW50byB0aG9zZQorbWV0aG9kcy4gIFNlZSBgUGxhbmV0YF8gZm9yIGFuIGV4YW1wbGUuCisKKworUmVzdHJpY3RlZCBzdWJjbGFzc2luZyBvZiBlbnVtZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1YmNsYXNzaW5nIGFuIGVudW1lcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpZiB0aGUgZW51bWVyYXRpb24gZG9lcyBub3QgZGVmaW5lCithbnkgbWVtYmVycy4gIFNvIHRoaXMgaXMgZm9yYmlkZGVuOjoKKworICAgID4+PiBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgIC4uLiAgICAgcGluayA9IDE3CisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFR5cGVFcnJvcjogQ2Fubm90IGV4dGVuZCBlbnVtZXJhdGlvbnMKKworQnV0IHRoaXMgaXMgYWxsb3dlZDo6CisKKyAgICA+Pj4gY2xhc3MgRm9vKEVudW0pOgorICAgIC4uLiAgICAgZGVmIHNvbWVfYmVoYXZpb3Ioc2VsZik6CisgICAgLi4uICAgICAgICAgcGFzcworICAgIC4uLgorICAgID4+PiBjbGFzcyBCYXIoRm9vKToKKyAgICAuLi4gICAgIGhhcHB5ID0gMQorICAgIC4uLiAgICAgc2FkID0gMgorICAgIC4uLgorCitBbGxvd2luZyBzdWJjbGFzc2luZyBvZiBlbnVtcyB0aGF0IGRlZmluZSBtZW1iZXJzIHdvdWxkIGxlYWQgdG8gYSB2aW9sYXRpb24gb2YKK3NvbWUgaW1wb3J0YW50IGludmFyaWFudHMgb2YgdHlwZXMgYW5kIGluc3RhbmNlcy4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBtYWtlcworc2Vuc2UgdG8gYWxsb3cgc2hhcmluZyBzb21lIGNvbW1vbiBiZWhhdmlvciBiZXR3ZWVuIGEgZ3JvdXAgb2YgZW51bWVyYXRpb25zLgorKFNlZSBgT3JkZXJlZEVudW1gXyBmb3IgYW4gZXhhbXBsZS4pCisKKworUGlja2xpbmcKKy0tLS0tLS0tCisKK0VudW1lcmF0aW9ucyBjYW4gYmUgcGlja2xlZCBhbmQgdW5waWNrbGVkOjoKKworICAgID4+PiBmcm9tIHRlc3QudGVzdF9lbnVtIGltcG9ydCBGcnVpdAorICAgID4+PiBmcm9tIHBpY2tsZSBpbXBvcnQgZHVtcHMsIGxvYWRzCisgICAgPj4+IEZydWl0LnRvbWF0byBpcyBsb2FkcyhkdW1wcyhGcnVpdC50b21hdG8pKQorICAgIFRydWUKKworVGhlIHVzdWFsIHJlc3RyaWN0aW9ucyBmb3IgcGlja2xpbmcgYXBwbHk6IHBpY2tsYWJsZSBlbnVtcyBtdXN0IGJlIGRlZmluZWQgaW4KK3RoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUsIHNpbmNlIHVucGlja2xpbmcgcmVxdWlyZXMgdGhlbSB0byBiZSBpbXBvcnRhYmxlCitmcm9tIHRoYXQgbW9kdWxlLgorCisuLiBub3RlOjoKKworICAgIFdpdGggcGlja2xlIHByb3RvY29sIHZlcnNpb24gNCBpdCBpcyBwb3NzaWJsZSB0byBlYXNpbHkgcGlja2xlIGVudW1zCisgICAgbmVzdGVkIGluIG90aGVyIGNsYXNzZXMuCisKK0l0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSBob3cgRW51bSBtZW1iZXJzIGFyZSBwaWNrbGVkL3VucGlja2xlZCBieSBkZWZpbmluZworOm1ldGg6YF9fcmVkdWNlX2V4X19gIGluIHRoZSBlbnVtZXJhdGlvbiBjbGFzcy4KKworCitGdW5jdGlvbmFsIEFQSQorLS0tLS0tLS0tLS0tLS0KKworVGhlIDpjbGFzczpgRW51bWAgY2xhc3MgaXMgY2FsbGFibGUsIHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgQVBJOjoKKworICAgID4+PiBBbmltYWwgPSBFbnVtKCdBbmltYWwnLCAnYW50IGJlZSBjYXQgZG9nJykKKyAgICA+Pj4gQW5pbWFsCisgICAgPGVudW0gJ0FuaW1hbCc+CisgICAgPj4+IEFuaW1hbC5hbnQKKyAgICA8QW5pbWFsLmFudDogMT4KKyAgICA+Pj4gQW5pbWFsLmFudC52YWx1ZQorICAgIDEKKyAgICA+Pj4gbGlzdChBbmltYWwpCisgICAgWzxBbmltYWwuYW50OiAxPiwgPEFuaW1hbC5iZWU6IDI+LCA8QW5pbWFsLmNhdDogMz4sIDxBbmltYWwuZG9nOiA0Pl0KKworVGhlIHNlbWFudGljcyBvZiB0aGlzIEFQSSByZXNlbWJsZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYC4gVGhlIGZpcnN0Cithcmd1bWVudCBvZiB0aGUgY2FsbCB0byA6Y2xhc3M6YEVudW1gIGlzIHRoZSBuYW1lIG9mIHRoZSBlbnVtZXJhdGlvbi4KKworVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgKnNvdXJjZSogb2YgZW51bWVyYXRpb24gbWVtYmVyIG5hbWVzLiAgSXQgY2FuIGJlIGEKK3doaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZyBvZiBuYW1lcywgYSBzZXF1ZW5jZSBvZiBuYW1lcywgYSBzZXF1ZW5jZSBvZgorMi10dXBsZXMgd2l0aCBrZXkvdmFsdWUgcGFpcnMsIG9yIGEgbWFwcGluZyAoZS5nLiBkaWN0aW9uYXJ5KSBvZiBuYW1lcyB0bwordmFsdWVzLiAgVGhlIGxhc3QgdHdvIG9wdGlvbnMgZW5hYmxlIGFzc2lnbmluZyBhcmJpdHJhcnkgdmFsdWVzIHRvCitlbnVtZXJhdGlvbnM7IHRoZSBvdGhlcnMgYXV0by1hc3NpZ24gaW5jcmVhc2luZyBpbnRlZ2VycyBzdGFydGluZyB3aXRoIDEuICBBCituZXcgY2xhc3MgZGVyaXZlZCBmcm9tIDpjbGFzczpgRW51bWAgaXMgcmV0dXJuZWQuICBJbiBvdGhlciB3b3JkcywgdGhlIGFib3ZlCithc3NpZ25tZW50IHRvIDpjbGFzczpgQW5pbWFsYCBpcyBlcXVpdmFsZW50IHRvOjoKKworICAgID4+PiBjbGFzcyBBbmltYWxzKEVudW0pOgorICAgIC4uLiAgICAgYW50ID0gMQorICAgIC4uLiAgICAgYmVlID0gMgorICAgIC4uLiAgICAgY2F0ID0gMworICAgIC4uLiAgICAgZG9nID0gNAorICAgIC4uLgorCitUaGUgcmVhc29uIGZvciBkZWZhdWx0aW5nIHRvIGBgMWBgIGFzIHRoZSBzdGFydGluZyBudW1iZXIgYW5kIG5vdCBgYDBgYCBpcwordGhhdCBgYDBgYCBpcyBgYEZhbHNlYGAgaW4gYSBib29sZWFuIHNlbnNlLCBidXQgZW51bSBtZW1iZXJzIGFsbCBldmFsdWF0ZQordG8gYGBUcnVlYGAuCisKK1BpY2tsaW5nIGVudW1zIGNyZWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb25hbCBBUEkgY2FuIGJlIHRyaWNreSBhcyBmcmFtZSBzdGFjaworaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgdXNlZCB0byB0cnkgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggbW9kdWxlIHRoZQorZW51bWVyYXRpb24gaXMgYmVpbmcgY3JlYXRlZCBpbiAoZS5nLiBpdCB3aWxsIGZhaWwgaWYgeW91IHVzZSBhIHV0aWxpdHkKK2Z1bmN0aW9uIGluIHNlcGFyYXRlIG1vZHVsZSwgYW5kIGFsc28gbWF5IG5vdCB3b3JrIG9uIElyb25QeXRob24gb3IgSnl0aG9uKS4KK1RoZSBzb2x1dGlvbiBpcyB0byBzcGVjaWZ5IHRoZSBtb2R1bGUgbmFtZSBleHBsaWNpdGx5IGFzIGZvbGxvd3M6OgorCisgICAgPj4+IEFuaW1hbHMgPSBFbnVtKCdBbmltYWxzJywgJ2FudCBiZWUgY2F0IGRvZycsIG1vZHVsZT1fX25hbWVfXykKKworLi4gd2FybmluZzo6CisKKyAgICBJZiBgYG1vZHVsZWBgIGlzIG5vdCBzdXBwbGllZCwgYW5kIEVudW0gY2Fubm90IGRldGVybWluZSB3aGF0IGl0IGlzLAorICAgIHRoZSBuZXcgRW51bSBtZW1iZXJzIHdpbGwgbm90IGJlIHVucGlja2xhYmxlOyB0byBrZWVwIGVycm9ycyBjbG9zZXIgdG8KKyAgICB0aGUgc291cmNlLCBwaWNrbGluZyB3aWxsIGJlIGRpc2FibGVkLgorCitUaGUgbmV3IHBpY2tsZSBwcm90b2NvbCA0IGFsc28sIGluIHNvbWUgY2lyY3Vtc3RhbmNlcywgcmVsaWVzIG9uCis6YXR0cjpgX19xdWFsbmFtZV9fYCBiZWluZyBzZXQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHBpY2tsZSB3aWxsIGJlIGFibGUKK3RvIGZpbmQgdGhlIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjbGFzcyB3YXMgbWFkZSBhdmFpbGFibGUgaW4gY2xhc3MKK1NvbWVEYXRhIGluIHRoZSBnbG9iYWwgc2NvcGU6OgorCisgICAgPj4+IEFuaW1hbHMgPSBFbnVtKCdBbmltYWxzJywgJ2FudCBiZWUgY2F0IGRvZycsIHF1YWxuYW1lPSdTb21lRGF0YS5BbmltYWxzJykKKworVGhlIGNvbXBsZXRlIHNpZ25hdHVyZSBpczo6CisKKyAgICBFbnVtKHZhbHVlPSdOZXdFbnVtTmFtZScsIG5hbWVzPTwuLi4+LCAqLCBtb2R1bGU9Jy4uLicsIHF1YWxuYW1lPScuLi4nLCB0eXBlPTxtaXhlZC1pbiBjbGFzcz4pCisKKzp2YWx1ZTogV2hhdCB0aGUgbmV3IEVudW0gY2xhc3Mgd2lsbCByZWNvcmQgYXMgaXRzIG5hbWUuCisKKzpuYW1lczogVGhlIEVudW0gbWVtYmVycy4gIFRoaXMgY2FuIGJlIGEgd2hpdGVzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nCisgICh2YWx1ZXMgd2lsbCBzdGFydCBhdCAxKTo6CisKKyAgICAncmVkIGdyZWVuIGJsdWUnIHwgJ3JlZCxncmVlbixibHVlJyB8ICdyZWQsIGdyZWVuLCBibHVlJworCisgIG9yIGFuIGl0ZXJhdG9yIG9mIChuYW1lLCB2YWx1ZSkgcGFpcnM6OgorCisgICAgWygnY3lhbicsIDQpLCAoJ21hZ2VudGEnLCA1KSwgKCd5ZWxsb3cnLCA2KV0KKworICBvciBhIG1hcHBpbmc6OgorCisgICAgeydjaGFydHJldXNlJzogNywgJ3NlYV9ncmVlbic6IDExLCAncm9zZW1hcnknOiA0Mn0KKworOm1vZHVsZTogbmFtZSBvZiBtb2R1bGUgd2hlcmUgbmV3IEVudW0gY2xhc3MgY2FuIGJlIGZvdW5kLgorCis6cXVhbG5hbWU6IHdoZXJlIGluIG1vZHVsZSBuZXcgRW51bSBjbGFzcyBjYW4gYmUgZm91bmQuCisKKzp0eXBlOiB0eXBlIHRvIG1peCBpbiB0byBuZXcgRW51bSBjbGFzcy4KKworCitEZXJpdmVkIEVudW1lcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW50RW51bQorXl5eXl5eXgorCitBIHZhcmlhdGlvbiBvZiA6Y2xhc3M6YEVudW1gIGlzIHByb3ZpZGVkIHdoaWNoIGlzIGFsc28gYSBzdWJjbGFzcyBvZgorOmNsYXNzOmBpbnRgLiAgTWVtYmVycyBvZiBhbiA6Y2xhc3M6YEludEVudW1gIGNhbiBiZSBjb21wYXJlZCB0byBpbnRlZ2VyczsKK2J5IGV4dGVuc2lvbiwgaW50ZWdlciBlbnVtZXJhdGlvbnMgb2YgZGlmZmVyZW50IHR5cGVzIGNhbiBhbHNvIGJlIGNvbXBhcmVkCit0byBlYWNoIG90aGVyOjoKKworICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEludEVudW0KKyAgICA+Pj4gY2xhc3MgU2hhcGUoSW50RW51bSk6CisgICAgLi4uICAgICBjaXJjbGUgPSAxCisgICAgLi4uICAgICBzcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IGNsYXNzIFJlcXVlc3QoSW50RW51bSk6CisgICAgLi4uICAgICBwb3N0ID0gMQorICAgIC4uLiAgICAgZ2V0ID0gMgorICAgIC4uLgorICAgID4+PiBTaGFwZSA9PSAxCisgICAgRmFsc2UKKyAgICA+Pj4gU2hhcGUuY2lyY2xlID09IDEKKyAgICBUcnVlCisgICAgPj4+IFNoYXBlLmNpcmNsZSA9PSBSZXF1ZXN0LnBvc3QKKyAgICBUcnVlCisKK0hvd2V2ZXIsIHRoZXkgc3RpbGwgY2FuJ3QgYmUgY29tcGFyZWQgdG8gc3RhbmRhcmQgOmNsYXNzOmBFbnVtYCBlbnVtZXJhdGlvbnM6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEludEVudW0pOgorICAgIC4uLiAgICAgY2lyY2xlID0gMQorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAuLi4gICAgIHJlZCA9IDEKKyAgICAuLi4gICAgIGdyZWVuID0gMgorICAgIC4uLgorICAgID4+PiBTaGFwZS5jaXJjbGUgPT0gQ29sb3IucmVkCisgICAgRmFsc2UKKworOmNsYXNzOmBJbnRFbnVtYCB2YWx1ZXMgYmVoYXZlIGxpa2UgaW50ZWdlcnMgaW4gb3RoZXIgd2F5cyB5b3UnZCBleHBlY3Q6OgorCisgICAgPj4+IGludChTaGFwZS5jaXJjbGUpCisgICAgMQorICAgID4+PiBbJ2EnLCAnYicsICdjJ11bU2hhcGUuY2lyY2xlXQorICAgICdiJworICAgID4+PiBbaSBmb3IgaSBpbiByYW5nZShTaGFwZS5zcXVhcmUpXQorICAgIFswLCAxXQorCitGb3IgdGhlIHZhc3QgbWFqb3JpdHkgb2YgY29kZSwgOmNsYXNzOmBFbnVtYCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCwKK3NpbmNlIDpjbGFzczpgSW50RW51bWAgYnJlYWtzIHNvbWUgc2VtYW50aWMgcHJvbWlzZXMgb2YgYW4gZW51bWVyYXRpb24gKGJ5CitiZWluZyBjb21wYXJhYmxlIHRvIGludGVnZXJzLCBhbmQgdGh1cyBieSB0cmFuc2l0aXZpdHkgdG8gb3RoZXIKK3VucmVsYXRlZCBlbnVtZXJhdGlvbnMpLiAgSXQgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBzcGVjaWFsIGNhc2VzIHdoZXJlCit0aGVyZSdzIG5vIG90aGVyIGNob2ljZTsgZm9yIGV4YW1wbGUsIHdoZW4gaW50ZWdlciBjb25zdGFudHMgYXJlCityZXBsYWNlZCB3aXRoIGVudW1lcmF0aW9ucyBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQgd2l0aCBjb2RlCit0aGF0IHN0aWxsIGV4cGVjdHMgaW50ZWdlcnMuCisKKworT3RoZXJzCiteXl5eXl4KKworV2hpbGUgOmNsYXNzOmBJbnRFbnVtYCBpcyBwYXJ0IG9mIHRoZSA6bW9kOmBlbnVtYCBtb2R1bGUsIGl0IHdvdWxkIGJlIHZlcnkKK3NpbXBsZSB0byBpbXBsZW1lbnQgaW5kZXBlbmRlbnRseTo6CisKKyAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgIHBhc3MKKworVGhpcyBkZW1vbnN0cmF0ZXMgaG93IHNpbWlsYXIgZGVyaXZlZCBlbnVtZXJhdGlvbnMgY2FuIGJlIGRlZmluZWQ7IGZvciBleGFtcGxlCithIDpjbGFzczpgU3RyRW51bWAgdGhhdCBtaXhlcyBpbiA6Y2xhc3M6YHN0cmAgaW5zdGVhZCBvZiA6Y2xhc3M6YGludGAuCisKK1NvbWUgcnVsZXM6CisKKzEuIFdoZW4gc3ViY2xhc3NpbmcgOmNsYXNzOmBFbnVtYCwgbWl4LWluIHR5cGVzIG11c3QgYXBwZWFyIGJlZm9yZQorICAgOmNsYXNzOmBFbnVtYCBpdHNlbGYgaW4gdGhlIHNlcXVlbmNlIG9mIGJhc2VzLCBhcyBpbiB0aGUgOmNsYXNzOmBJbnRFbnVtYAorICAgZXhhbXBsZSBhYm92ZS4KKzIuIFdoaWxlIDpjbGFzczpgRW51bWAgY2FuIGhhdmUgbWVtYmVycyBvZiBhbnkgdHlwZSwgb25jZSB5b3UgbWl4IGluIGFuCisgICBhZGRpdGlvbmFsIHR5cGUsIGFsbCB0aGUgbWVtYmVycyBtdXN0IGhhdmUgdmFsdWVzIG9mIHRoYXQgdHlwZSwgZS5nLgorICAgOmNsYXNzOmBpbnRgIGFib3ZlLiAgVGhpcyByZXN0cmljdGlvbiBkb2VzIG5vdCBhcHBseSB0byBtaXgtaW5zIHdoaWNoIG9ubHkKKyAgIGFkZCBtZXRob2RzIGFuZCBkb24ndCBzcGVjaWZ5IGFub3RoZXIgZGF0YSB0eXBlIHN1Y2ggYXMgOmNsYXNzOmBpbnRgIG9yCisgICA6Y2xhc3M6YHN0cmAuCiszLiBXaGVuIGFub3RoZXIgZGF0YSB0eXBlIGlzIG1peGVkIGluLCB0aGUgOmF0dHI6YHZhbHVlYCBhdHRyaWJ1dGUgaXMgKm5vdCB0aGUKKyAgIHNhbWUqIGFzIHRoZSBlbnVtIG1lbWJlciBpdHNlbGYsIGFsdGhvdWdoIGl0IGlzIGVxdWl2YWxlbnQgYW5kIHdpbGwgY29tcGFyZQorICAgZXF1YWwuCis0LiAlLXN0eWxlIGZvcm1hdHRpbmc6ICBgJXNgIGFuZCBgJXJgIGNhbGwgOmNsYXNzOmBFbnVtYCdzIDptZXRoOmBfX3N0cl9fYCBhbmQKKyAgIDptZXRoOmBfX3JlcHJfX2AgcmVzcGVjdGl2ZWx5OyBvdGhlciBjb2RlcyAoc3VjaCBhcyBgJWlgIG9yIGAlaGAgZm9yCisgICBJbnRFbnVtKSB0cmVhdCB0aGUgZW51bSBtZW1iZXIgYXMgaXRzIG1peGVkLWluIHR5cGUuCis1LiA6bWV0aDpgc3RyLl9fZm9ybWF0X19gIChvciA6ZnVuYzpgZm9ybWF0YCkgd2lsbCB1c2UgdGhlIG1peGVkLWluCisgICB0eXBlJ3MgOm1ldGg6YF9fZm9ybWF0X19gLiAgSWYgdGhlIDpjbGFzczpgRW51bWAncyA6ZnVuYzpgc3RyYCBvcgorICAgOmZ1bmM6YHJlcHJgIGlzIGRlc2lyZWQgdXNlIHRoZSBgIXNgIG9yIGAhcmAgOmNsYXNzOmBzdHJgIGZvcm1hdCBjb2Rlcy4KKworCitJbnRlcmVzdGluZyBleGFtcGxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hpbGUgOmNsYXNzOmBFbnVtYCBhbmQgOmNsYXNzOmBJbnRFbnVtYCBhcmUgZXhwZWN0ZWQgdG8gY292ZXIgdGhlIG1ham9yaXR5IG9mCit1c2UtY2FzZXMsIHRoZXkgY2Fubm90IGNvdmVyIHRoZW0gYWxsLiAgSGVyZSBhcmUgcmVjaXBlcyBmb3Igc29tZSBkaWZmZXJlbnQKK3R5cGVzIG9mIGVudW1lcmF0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGRpcmVjdGx5LCBvciBhcyBleGFtcGxlcyBmb3IgY3JlYXRpbmcKK29uZSdzIG93bi4KKworCitBdXRvTnVtYmVyCiteXl5eXl5eXl5eCisKK0F2b2lkcyBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgdmFsdWUgZm9yIGVhY2ggZW51bWVyYXRpb24gbWVtYmVyOjoKKworICAgID4+PiBjbGFzcyBBdXRvTnVtYmVyKEVudW0pOgorICAgIC4uLiAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAuLi4gICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgIC4uLiAgICAgICAgIG9iaiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAuLi4gICAgICAgICBvYmouX3ZhbHVlXyA9IHZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIG9iagorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihBdXRvTnVtYmVyKToKKyAgICAuLi4gICAgIHJlZCA9ICgpCisgICAgLi4uICAgICBncmVlbiA9ICgpCisgICAgLi4uICAgICBibHVlID0gKCkKKyAgICAuLi4KKyAgICA+Pj4gQ29sb3IuZ3JlZW4udmFsdWUgPT0gMgorICAgIFRydWUKKworLi4gbm90ZTo6CisKKyAgICBUaGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCwgaWYgZGVmaW5lZCwgaXMgdXNlZCBkdXJpbmcgY3JlYXRpb24gb2YgdGhlIEVudW0KKyAgICBtZW1iZXJzOyBpdCBpcyB0aGVuIHJlcGxhY2VkIGJ5IEVudW0ncyA6bWV0aDpgX19uZXdfX2Agd2hpY2ggaXMgdXNlZCBhZnRlcgorICAgIGNsYXNzIGNyZWF0aW9uIGZvciBsb29rdXAgb2YgZXhpc3RpbmcgbWVtYmVycy4KKworCitPcmRlcmVkRW51bQorXl5eXl5eXl5eXl4KKworQW4gb3JkZXJlZCBlbnVtZXJhdGlvbiB0aGF0IGlzIG5vdCBiYXNlZCBvbiA6Y2xhc3M6YEludEVudW1gIGFuZCBzbyBtYWludGFpbnMKK3RoZSBub3JtYWwgOmNsYXNzOmBFbnVtYCBpbnZhcmlhbnRzIChzdWNoIGFzIG5vdCBiZWluZyBjb21wYXJhYmxlIHRvIG90aGVyCitlbnVtZXJhdGlvbnMpOjoKKworICAgID4+PiBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAuLi4gICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPj0gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPiBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLiAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8PSBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLiAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uCisgICAgPj4+IGNsYXNzIEdyYWRlKE9yZGVyZWRFbnVtKToKKyAgICAuLi4gICAgIEEgPSA1CisgICAgLi4uICAgICBCID0gNAorICAgIC4uLiAgICAgQyA9IDMKKyAgICAuLi4gICAgIEQgPSAyCisgICAgLi4uICAgICBGID0gMQorICAgIC4uLgorICAgID4+PiBHcmFkZS5DIDwgR3JhZGUuQQorICAgIFRydWUKKworCitEdXBsaWNhdGVGcmVlRW51bQorXl5eXl5eXl5eXl5eXl5eXl4KKworUmFpc2VzIGFuIGVycm9yIGlmIGEgZHVwbGljYXRlIG1lbWJlciBuYW1lIGlzIGZvdW5kIGluc3RlYWQgb2YgY3JlYXRpbmcgYW4KK2FsaWFzOjoKKworICAgID4+PiBjbGFzcyBEdXBsaWNhdGVGcmVlRW51bShFbnVtKToKKyAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgLi4uICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAuLi4gICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgLi4uICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAuLi4gICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgLi4uICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgLi4uICAgICAgICAgICAgICAgICAiYWxpYXNlcyBub3QgYWxsb3dlZCBpbiBEdXBsaWNhdGVGcmVlRW51bTogICVyIC0tPiAlciIKKyAgICAuLi4gICAgICAgICAgICAgICAgICUgKGEsIGUpKQorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihEdXBsaWNhdGVGcmVlRW51bSk6CisgICAgLi4uICAgICByZWQgPSAxCisgICAgLi4uICAgICBncmVlbiA9IDIKKyAgICAuLi4gICAgIGJsdWUgPSAzCisgICAgLi4uICAgICBncmVuZSA9IDIKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogYWxpYXNlcyBub3QgYWxsb3dlZCBpbiBEdXBsaWNhdGVGcmVlRW51bTogICdncmVuZScgLS0+ICdncmVlbicKKworLi4gbm90ZTo6CisKKyAgICBUaGlzIGlzIGEgdXNlZnVsIGV4YW1wbGUgZm9yIHN1YmNsYXNzaW5nIEVudW0gdG8gYWRkIG9yIGNoYW5nZSBvdGhlcgorICAgIGJlaGF2aW9ycyBhcyB3ZWxsIGFzIGRpc2FsbG93aW5nIGFsaWFzZXMuICBJZiB0aGUgb25seSBkZXNpcmVkIGNoYW5nZSBpcworICAgIGRpc2FsbG93aW5nIGFsaWFzZXMsIHRoZSA6ZnVuYzpgdW5pcXVlYCBkZWNvcmF0b3IgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworCitQbGFuZXQKK15eXl5eXgorCitJZiA6bWV0aDpgX19uZXdfX2Agb3IgOm1ldGg6YF9faW5pdF9fYCBpcyBkZWZpbmVkIHRoZSB2YWx1ZSBvZiB0aGUgZW51bSBtZW1iZXIKK3dpbGwgYmUgcGFzc2VkIHRvIHRob3NlIG1ldGhvZHM6OgorCisgICAgPj4+IGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAuLi4gICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAuLi4gICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAuLi4gICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgLi4uICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgLi4uICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgLi4uICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgLi4uICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgLi4uICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAuLi4gICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgLi4uICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgIC4uLiAgICAgQHByb3BlcnR5CisgICAgLi4uICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgIC4uLiAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAuLi4gICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAuLi4gICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgIC4uLgorICAgID4+PiBQbGFuZXQuRUFSVEgudmFsdWUKKyAgICAoNS45NzZlKzI0LCA2Mzc4MTQwLjApCisgICAgPj4+IFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHkKKyAgICA5LjgwMjY1Mjc0MzMzNzEyOQorCisKK0hvdyBhcmUgRW51bXMgZGlmZmVyZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VudW1zIGhhdmUgYSBjdXN0b20gbWV0YWNsYXNzIHRoYXQgYWZmZWN0cyBtYW55IGFzcGVjdHMgb2YgYm90aCBkZXJpdmVkIEVudW0KK2NsYXNzZXMgYW5kIHRoZWlyIGluc3RhbmNlcyAobWVtYmVycykuCisKKworRW51bSBDbGFzc2VzCiteXl5eXl5eXl5eXl4KKworVGhlIDpjbGFzczpgRW51bU1ldGFgIG1ldGFjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIHRoZQorOm1ldGg6YF9fY29udGFpbnNfX2AsIDptZXRoOmBfX2Rpcl9fYCwgOm1ldGg6YF9faXRlcl9fYCBhbmQgb3RoZXIgbWV0aG9kcyB0aGF0CithbGxvdyBvbmUgdG8gZG8gdGhpbmdzIHdpdGggYW4gOmNsYXNzOmBFbnVtYCBjbGFzcyB0aGF0IGZhaWwgb24gYSB0eXBpY2FsCitjbGFzcywgc3VjaCBhcyBgbGlzdChDb2xvcilgIG9yIGBzb21lX3ZhciBpbiBDb2xvcmAuICA6Y2xhc3M6YEVudW1NZXRhYCBpcworcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdmFyaW91cyBvdGhlciBtZXRob2RzIG9uIHRoZSBmaW5hbCA6Y2xhc3M6YEVudW1gCitjbGFzcyBhcmUgY29ycmVjdCAoc3VjaCBhcyA6bWV0aDpgX19uZXdfX2AsIDptZXRoOmBfX2dldG5ld2FyZ3NfX2AsCis6bWV0aDpgX19zdHJfX2AgYW5kIDptZXRoOmBfX3JlcHJfX2ApCisKKworRW51bSBNZW1iZXJzIChha2EgaW5zdGFuY2VzKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBhYm91dCBFbnVtIG1lbWJlcnMgaXMgdGhhdCB0aGV5IGFyZSBzaW5nbGV0b25zLgorOmNsYXNzOmBFbnVtTWV0YWAgY3JlYXRlcyB0aGVtIGFsbCB3aGlsZSBpdCBpcyBjcmVhdGluZyB0aGUgOmNsYXNzOmBFbnVtYAorY2xhc3MgaXRzZWxmLCBhbmQgdGhlbiBwdXRzIGEgY3VzdG9tIDptZXRoOmBfX25ld19fYCBpbiBwbGFjZSB0byBlbnN1cmUKK3RoYXQgbm8gbmV3IG9uZXMgYXJlIGV2ZXIgaW5zdGFudGlhdGVkIGJ5IHJldHVybmluZyBvbmx5IHRoZSBleGlzdGluZworbWVtYmVyIGluc3RhbmNlcy4KKworCitGaW5lciBQb2ludHMKK15eXl5eXl5eXl5eXgorCitFbnVtIG1lbWJlcnMgYXJlIGluc3RhbmNlcyBvZiBhbiBFbnVtIGNsYXNzLCBhbmQgZXZlbiB0aG91Z2ggdGhleSBhcmUKK2FjY2Vzc2libGUgYXMgYEVudW1DbGFzcy5tZW1iZXJgLCB0aGV5IGFyZSBub3QgYWNjZXNzaWJsZSBkaXJlY3RseSBmcm9tCit0aGUgbWVtYmVyOjoKKworICAgID4+PiBDb2xvci5yZWQKKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvci5yZWQuYmx1ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBBdHRyaWJ1dGVFcnJvcjogJ0NvbG9yJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnYmx1ZScKKworTGlrZXdpc2UsIHRoZSA6YXR0cjpgX19tZW1iZXJzX19gIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBjbGFzcy4KKworSWYgeW91IGdpdmUgeW91ciA6Y2xhc3M6YEVudW1gIHN1YmNsYXNzIGV4dHJhIG1ldGhvZHMsIGxpa2UgdGhlIGBQbGFuZXRgXworY2xhc3MgYWJvdmUsIHRob3NlIG1ldGhvZHMgd2lsbCBzaG93IHVwIGluIGEgOmZ1bmM6YGRpcmAgb2YgdGhlIG1lbWJlciwKK2J1dCBub3Qgb2YgdGhlIGNsYXNzOjoKKworICAgID4+PiBkaXIoUGxhbmV0KQorICAgIFsnRUFSVEgnLCAnSlVQSVRFUicsICdNQVJTJywgJ01FUkNVUlknLCAnTkVQVFVORScsICdTQVRVUk4nLCAnVVJBTlVTJywgJ1ZFTlVTJywgJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nXQorICAgID4+PiBkaXIoUGxhbmV0LkVBUlRIKQorICAgIFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3N1cmZhY2VfZ3Jhdml0eScsICd2YWx1ZSddCisKK1RoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHdpbGwgb25seSBiZSB1c2VkIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlCis6Y2xhc3M6YEVudW1gIG1lbWJlcnMgLS0gYWZ0ZXIgdGhhdCBpdCBpcyByZXBsYWNlZC4gIEFueSBjdXN0b20gOm1ldGg6YF9fbmV3X19gCittZXRob2QgbXVzdCBjcmVhdGUgdGhlIG9iamVjdCBhbmQgc2V0IHRoZSA6YXR0cjpgX3ZhbHVlX2AgYXR0cmlidXRlCithcHByb3ByaWF0ZWx5LgorCitJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgaG93IDpjbGFzczpgRW51bWAgbWVtYmVycyBhcmUgbG9va2VkIHVwIHlvdSBzaG91bGQgZWl0aGVyCit3cml0ZSBhIGhlbHBlciBmdW5jdGlvbiBvciBhIDpmdW5jOmBjbGFzc21ldGhvZGAgZm9yIHRoZSA6Y2xhc3M6YEVudW1gCitzdWJjbGFzcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKaW5kZXggNmU0NTU5Yy4uNzRkNmZjYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKQEAgLTI4LDEwICsyOCwxMCBAQAogaW50ZXJwcmV0ZXIgcmFpc2VzIHRoZSBzYW1lIGV4Y2VwdGlvbjsgYnV0IGJld2FyZSB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgdG8KIHByZXZlbnQgdXNlciBjb2RlIGZyb20gcmFpc2luZyBhbiBpbmFwcHJvcHJpYXRlIGVycm9yLgogCi1UaGUgYnVpbHQtaW4gZXhjZXB0aW9uIGNsYXNzZXMgY2FuIGJlIHN1Yi1jbGFzc2VkIHRvIGRlZmluZSBuZXcgZXhjZXB0aW9uczsKLXByb2dyYW1tZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGF0IGxlYXN0IGRlcml2ZSBuZXcgZXhjZXB0aW9ucyBmcm9tIHRoZQotOmV4YzpgRXhjZXB0aW9uYCBjbGFzcyBhbmQgbm90IDpleGM6YEJhc2VFeGNlcHRpb25gLiAgTW9yZSBpbmZvcm1hdGlvbiBvbgotZGVmaW5pbmcgZXhjZXB0aW9ucyBpcyBhdmFpbGFibGUgaW4gdGhlIFB5dGhvbiBUdXRvcmlhbCB1bmRlcgorVGhlIGJ1aWx0LWluIGV4Y2VwdGlvbiBjbGFzc2VzIGNhbiBiZSBzdWJjbGFzc2VkIHRvIGRlZmluZSBuZXcgZXhjZXB0aW9uczsKK3Byb2dyYW1tZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGRlcml2ZSBuZXcgZXhjZXB0aW9ucyBmcm9tIHRoZSA6ZXhjOmBFeGNlcHRpb25gCitjbGFzcyBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMsIGFuZCBub3QgZnJvbSA6ZXhjOmBCYXNlRXhjZXB0aW9uYC4gIE1vcmUKK2luZm9ybWF0aW9uIG9uIGRlZmluaW5nIGV4Y2VwdGlvbnMgaXMgYXZhaWxhYmxlIGluIHRoZSBQeXRob24gVHV0b3JpYWwgdW5kZXIKIDpyZWY6YHR1dC11c2VyZXhjZXB0aW9uc2AuCiAKIFdoZW4gcmFpc2luZyAob3IgcmUtcmFpc2luZykgYW4gZXhjZXB0aW9uIGluIGFuIDprZXl3b3JkOmBleGNlcHRgIGNsYXVzZQpAQCAtODIsNyArODIsNyBAQAogICAgLi4gYXR0cmlidXRlOjogYXJncwogCiAgICAgICBUaGUgdHVwbGUgb2YgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBleGNlcHRpb24gY29uc3RydWN0b3IuICBTb21lIGJ1aWx0LWluCi0gICAgICBleGNlcHRpb25zIChsaWtlIDpleGM6YElPRXJyb3JgKSBleHBlY3QgYSBjZXJ0YWluIG51bWJlciBvZiBhcmd1bWVudHMgYW5kCisgICAgICBleGNlcHRpb25zIChsaWtlIDpleGM6YE9TRXJyb3JgKSBleHBlY3QgYSBjZXJ0YWluIG51bWJlciBvZiBhcmd1bWVudHMgYW5kCiAgICAgICBhc3NpZ24gYSBzcGVjaWFsIG1lYW5pbmcgdG8gdGhlIGVsZW1lbnRzIG9mIHRoaXMgdHVwbGUsIHdoaWxlIG90aGVycyBhcmUKICAgICAgIHVzdWFsbHkgY2FsbGVkIG9ubHkgd2l0aCBhIHNpbmdsZSBzdHJpbmcgZ2l2aW5nIGFuIGVycm9yIG1lc3NhZ2UuCiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAuLiBleGNlcHRpb246OiBHZW5lcmF0b3JFeGl0CiAKLSAgIFJhaXNlIHdoZW4gYSA6dGVybTpgZ2VuZXJhdG9yYFwncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuICBJdAorICAgUmFpc2VkIHdoZW4gYSA6dGVybTpgZ2VuZXJhdG9yYFwncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuICBJdAogICAgZGlyZWN0bHkgaW5oZXJpdHMgZnJvbSA6ZXhjOmBCYXNlRXhjZXB0aW9uYCBpbnN0ZWFkIG9mIDpleGM6YEV4Y2VwdGlvbmAgc2luY2UKICAgIGl0IGlzIHRlY2huaWNhbGx5IG5vdCBhbiBlcnJvci4KIApAQCAtMjUzLDIwICsyNTMsMzEgQEAKICAgIEZvciBleGNlcHRpb25zIHRoYXQgaW52b2x2ZSBhIGZpbGUgc3lzdGVtIHBhdGggKHN1Y2ggYXMgOmZ1bmM6YG9wZW5gIG9yCiAgICA6ZnVuYzpgb3MudW5saW5rYCksIHRoZSBleGNlcHRpb24gaW5zdGFuY2Ugd2lsbCBjb250YWluIGFuIGFkZGl0aW9uYWwKICAgIGF0dHJpYnV0ZSwgOmF0dHI6YGZpbGVuYW1lYCwgd2hpY2ggaXMgdGhlIGZpbGUgbmFtZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICAgRm9yIGZ1bmN0aW9ucyB0aGF0IGludm9sdmUgdHdvIGZpbGUgc3lzdGVtIHBhdGhzIChzdWNoIGFzCisgICA6ZnVuYzpgb3MucmVuYW1lYCksIHRoZSBleGNlcHRpb24gaW5zdGFuY2Ugd2lsbCBjb250YWluIGEgc2Vjb25kCisgICA6YXR0cjpgZmlsZW5hbWUyYCBhdHRyaWJ1dGUgY29ycmVzcG9uZGluZyB0byB0aGUgc2Vjb25kIGZpbGUgbmFtZSBwYXNzZWQKKyAgIHRvIHRoZSBmdW5jdGlvbi4KKwogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgOmV4YzpgRW52aXJvbm1lbnRFcnJvcmAsIDpleGM6YElPRXJyb3JgLCA6ZXhjOmBXaW5kb3dzRXJyb3JgLAogICAgICAgOmV4YzpgVk1TRXJyb3JgLCA6ZXhjOmBzb2NrZXQuZXJyb3JgLCA6ZXhjOmBzZWxlY3QuZXJyb3JgIGFuZAogICAgICAgOmV4YzpgbW1hcC5lcnJvcmAgaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIDpleGM6YE9TRXJyb3JgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIDphdHRyOmBmaWxlbmFtZWAgYXR0cmlidXRlIGlzIG5vdyB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIHBhc3NlZCB0bworICAgICAgdGhlIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHRoZSBuYW1lIGVuY29kZWQgdG8gb3IgZGVjb2RlZCBmcm9tIHRoZQorICAgICAgZmlsZXN5c3RlbSBlbmNvZGluZy4gIEFsc28sIHRoZSA6YXR0cjpgZmlsZW5hbWUyYCBhdHRyaWJ1dGUgd2FzIGFkZGVkLgorCiAKIC4uIGV4Y2VwdGlvbjo6IE92ZXJmbG93RXJyb3IKIAogICAgUmFpc2VkIHdoZW4gdGhlIHJlc3VsdCBvZiBhbiBhcml0aG1ldGljIG9wZXJhdGlvbiBpcyB0b28gbGFyZ2UgdG8gYmUKICAgIHJlcHJlc2VudGVkLiAgVGhpcyBjYW5ub3Qgb2NjdXIgZm9yIGludGVnZXJzICh3aGljaCB3b3VsZCByYXRoZXIgcmFpc2UKLSAgIDpleGM6YE1lbW9yeUVycm9yYCB0aGFuIGdpdmUgdXApLiAgQmVjYXVzZSBvZiB0aGUgbGFjayBvZiBzdGFuZGFyZGl6YXRpb24gb2YKLSAgIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBDLCBtb3N0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgYWxzbwotICAgYXJlbid0IGNoZWNrZWQuCisgICA6ZXhjOmBNZW1vcnlFcnJvcmAgdGhhbiBnaXZlIHVwKS4gIEhvd2V2ZXIsIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsCisgICBPdmVyZmxvd0Vycm9yIGlzIHNvbWV0aW1lcyByYWlzZWQgZm9yIGludGVnZXJzIHRoYXQgYXJlIG91dHNpZGUgYSByZXF1aXJlZAorICAgcmFuZ2UuICAgQmVjYXVzZSBvZiB0aGUgbGFjayBvZiBzdGFuZGFyZGl6YXRpb24gb2YgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uCisgICBoYW5kbGluZyBpbiBDLCBtb3N0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgYXJlIG5vdCBjaGVja2VkLgogCiAKIC4uIGV4Y2VwdGlvbjo6IFJlZmVyZW5jZUVycm9yCkBAIC00NDcsMTAgKzQ1OCw2IEBACiAKIC4uIGV4Y2VwdGlvbjo6IElPRXJyb3IKIAotLi4gZXhjZXB0aW9uOjogVk1TRXJyb3IKLQotICAgT25seSBhdmFpbGFibGUgb24gVk1TLgotCiAuLiBleGNlcHRpb246OiBXaW5kb3dzRXJyb3IKIAogICAgT25seSBhdmFpbGFibGUgb24gV2luZG93cy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QgYi9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CmluZGV4IDNjMzM2MjEuLmViMjAxNmEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdApAQCAtNCwxMiArNCwxNCBAQAogLi4gbW9kdWxlOjogZmF1bHRoYW5kbGVyCiAgICA6c3lub3BzaXM6IER1bXAgdGhlIFB5dGhvbiB0cmFjZWJhY2suCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBUaGlzIG1vZHVsZSBjb250YWlucyBmdW5jdGlvbnMgdG8gZHVtcCBQeXRob24gdHJhY2ViYWNrcyBleHBsaWNpdGx5LCBvbiBhIGZhdWx0LAogYWZ0ZXIgYSB0aW1lb3V0LCBvciBvbiBhIHVzZXIgc2lnbmFsLiBDYWxsIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCB0bwogaW5zdGFsbCBmYXVsdCBoYW5kbGVycyBmb3IgdGhlIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwKIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCwgYW5kIDpjb25zdDpgU0lHSUxMYCBzaWduYWxzLiBZb3UgY2FuIGFsc28KIGVuYWJsZSB0aGVtIGF0IHN0YXJ0dXAgYnkgc2V0dGluZyB0aGUgOmVudnZhcjpgUFlUSE9ORkFVTFRIQU5ETEVSYCBlbnZpcm9ubWVudAotdmFyaWFibGUgb3IgYnkgdXNpbmcgOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAgY29tbWFuZCBsaW5lIG9wdGlvbi4KK3ZhcmlhYmxlIG9yIGJ5IHVzaW5nIHRoZSA6b3B0aW9uOmAtWGAgYGBmYXVsdGhhbmRsZXJgYCBjb21tYW5kIGxpbmUgb3B0aW9uLgogCiBUaGUgZmF1bHQgaGFuZGxlciBpcyBjb21wYXRpYmxlIHdpdGggc3lzdGVtIGZhdWx0IGhhbmRsZXJzIGxpa2UgQXBwb3J0IG9yIHRoZQogV2luZG93cyBmYXVsdCBoYW5kbGVyLiBUaGUgbW9kdWxlIHVzZXMgYW4gYWx0ZXJuYXRpdmUgc3RhY2sgZm9yIHNpZ25hbCBoYW5kbGVycwpAQCAtMjcsNiArMjksNyBAQAogKiBPbmx5IHRoZSBmaWxlbmFtZSwgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBsaW5lIG51bWJlciBhcmUKICAgZGlzcGxheWVkLiAobm8gc291cmNlIGNvZGUpCiAqIEl0IGlzIGxpbWl0ZWQgdG8gMTAwIGZyYW1lcyBhbmQgMTAwIHRocmVhZHMuCisqIFRoZSBvcmRlciBpcyByZXZlcnNlZDogdGhlIG1vc3QgcmVjZW50IGNhbGwgaXMgc2hvd24gZmlyc3QuCiAKIEJ5IGRlZmF1bHQsIHRoZSBQeXRob24gdHJhY2ViYWNrIGlzIHdyaXR0ZW4gdG8gOmRhdGE6YHN5cy5zdGRlcnJgLiBUbyBzZWUKIHRyYWNlYmFja3MsIGFwcGxpY2F0aW9ucyBtdXN0IGJlIHJ1biBpbiB0aGUgdGVybWluYWwuIEEgbG9nIGZpbGUgY2FuCkBAIC0zNSwxMSArMzgsOSBAQAogVGhlIG1vZHVsZSBpcyBpbXBsZW1lbnRlZCBpbiBDLCBzbyB0cmFjZWJhY2tzIGNhbiBiZSBkdW1wZWQgb24gYSBjcmFzaCBvciB3aGVuCiBQeXRob24gaXMgZGVhZGxvY2tlZC4KIAotLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLQotRHVtcCB0aGUgdHJhY2ViYWNrCi0tLS0tLS0tLS0tLS0tLS0tLS0KK0R1bXBpbmcgdGhlIHRyYWNlYmFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC4uIGZ1bmN0aW9uOjogZHVtcF90cmFjZWJhY2soZmlsZT1zeXMuc3RkZXJyLCBhbGxfdGhyZWFkcz1UcnVlKQogCkBAIC02OCw4ICs2OSw4IEBACiAgICBDaGVjayBpZiB0aGUgZmF1bHQgaGFuZGxlciBpcyBlbmFibGVkLgogCiAKLUR1bXAgdGhlIHRyYWNlYmFja3MgYWZ0ZXIgYSB0aW1lb3V0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRHVtcGluZyB0aGUgdHJhY2ViYWNrcyBhZnRlciBhIHRpbWVvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC4uIGZ1bmN0aW9uOjogZHVtcF90cmFjZWJhY2tfbGF0ZXIodGltZW91dCwgcmVwZWF0PUZhbHNlLCBmaWxlPXN5cy5zdGRlcnIsIGV4aXQ9RmFsc2UpCiAKQEAgLTg5LDggKzkwLDggQEAKICAgIENhbmNlbCB0aGUgbGFzdCBjYWxsIHRvIDpmdW5jOmBkdW1wX3RyYWNlYmFja19sYXRlcmAuCiAKIAotRHVtcCB0aGUgdHJhY2ViYWNrIG9uIGEgdXNlciBzaWduYWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEdW1waW5nIHRoZSB0cmFjZWJhY2sgb24gYSB1c2VyIHNpZ25hbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLi4gZnVuY3Rpb246OiByZWdpc3RlcihzaWdudW0sIGZpbGU9c3lzLnN0ZGVyciwgYWxsX3RocmVhZHM9VHJ1ZSwgY2hhaW49RmFsc2UpCiAKQEAgLTEwOSw4ICsxMTAsOCBAQAogICAgTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogCiAKLUZpbGUgZGVzY3JpcHRvciBpc3N1ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJc3N1ZSB3aXRoIGZpbGUgZGVzY3JpcHRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiA6ZnVuYzpgZW5hYmxlYCwgOmZ1bmM6YGR1bXBfdHJhY2ViYWNrX2xhdGVyYCBhbmQgOmZ1bmM6YHJlZ2lzdGVyYCBrZWVwIHRoZQogZmlsZSBkZXNjcmlwdG9yIG9mIHRoZWlyICpmaWxlKiBhcmd1bWVudC4gSWYgdGhlIGZpbGUgaXMgY2xvc2VkIGFuZCBpdHMgZmlsZQpAQCAtMTIyLDE0ICsxMjMsMjAgQEAKIEV4YW1wbGUKIC0tLS0tLS0KIAotRXhhbXBsZSBvZiBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBMaW51eDogOjoKKy4uIGhpZ2hsaWdodDo6IHNoCiAKLSAgICAkIHB5dGhvbiAtcSAtWCBmYXVsdGhhbmRsZXIKK0V4YW1wbGUgb2YgYSBzZWdtZW50YXRpb24gZmF1bHQgb24gTGludXggd2l0aCBhbmQgd2l0aG91dCBlbmFibGluZyB0aGUgZmF1bHQKK2hhbmRsZXI6OgorCisgICAgJCBweXRob24zIC1jICJpbXBvcnQgY3R5cGVzOyBjdHlwZXMuc3RyaW5nX2F0KDApIgorICAgIFNlZ21lbnRhdGlvbiBmYXVsdAorCisgICAgJCBweXRob24zIC1xIC1YIGZhdWx0aGFuZGxlcgogICAgID4+PiBpbXBvcnQgY3R5cGVzCiAgICAgPj4+IGN0eXBlcy5zdHJpbmdfYXQoMCkKICAgICBGYXRhbCBQeXRob24gZXJyb3I6IFNlZ21lbnRhdGlvbiBmYXVsdAogCi0gICAgQ3VycmVudCB0aHJlYWQgMHgwMDAwN2ZiODk5ZjM5NzAwOgorICAgIEN1cnJlbnQgdGhyZWFkIDB4MDAwMDdmYjg5OWYzOTcwMCAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6CiAgICAgICBGaWxlICIvaG9tZS9weXRob24vY3B5dGhvbi9MaWIvY3R5cGVzL19faW5pdF9fLnB5IiwgbGluZSA0ODYgaW4gc3RyaW5nX2F0CiAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxIGluIDxtb2R1bGU+CiAgICAgU2VnbWVudGF0aW9uIGZhdWx0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlY21wLnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CmluZGV4IDhhODhmOGMuLjA2ZDNmMjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CkBAIC0yNyw2ICsyNywxMCBAQAogICAgTm90ZSB0aGF0IG5vIGV4dGVybmFsIHByb2dyYW1zIGFyZSBjYWxsZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLCBnaXZpbmcgaXQKICAgIHBvcnRhYmlsaXR5IGFuZCBlZmZpY2llbmN5LgogCisgICBUaGlzIGZ1bmN0aW9uIHVzZXMgYSBjYWNoZSBmb3IgcGFzdCBjb21wYXJpc29ucyBhbmQgdGhlIHJlc3VsdHMsCisgICB3aXRoIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgaWYgdGhlIDpmdW5jOmBvcy5zdGF0YCBpbmZvcm1hdGlvbiBmb3IgdGhlCisgICBmaWxlIGNoYW5nZXMuICBUaGUgZW50aXJlIGNhY2hlIG1heSBiZSBjbGVhcmVkIHVzaW5nIDpmdW5jOmBjbGVhcl9jYWNoZWAuCisKIAogLi4gZnVuY3Rpb246OiBjbXBmaWxlcyhkaXIxLCBkaXIyLCBjb21tb24sIHNoYWxsb3c9VHJ1ZSkKIApAQCAtNDgsNiArNTIsMTUgQEAKICAgIG9uZSBvZiB0aGUgdGhyZWUgcmV0dXJuZWQgbGlzdHMuCiAKIAorLi4gZnVuY3Rpb246OiBjbGVhcl9jYWNoZSgpCisKKyAgIENsZWFyIHRoZSBmaWxlY21wIGNhY2hlLiBUaGlzIG1heSBiZSB1c2VmdWwgaWYgYSBmaWxlIGlzIGNvbXBhcmVkIHNvIHF1aWNrbHkKKyAgIGFmdGVyIGl0IGlzIG1vZGlmaWVkIHRoYXQgaXQgaXMgd2l0aGluIHRoZSBtdGltZSByZXNvbHV0aW9uIG9mCisgICB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBfZGlyY21wLW9iamVjdHM6CiAKIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MKQEAgLTU1LDI4ICs2OCwyNSBAQAogCiAuLiBjbGFzczo6IGRpcmNtcChhLCBiLCBpZ25vcmU9Tm9uZSwgaGlkZT1Ob25lKQogCi0gICBDb25zdHJ1Y3QgYSBuZXcgZGlyZWN0b3J5IGNvbXBhcmlzb24gb2JqZWN0LCB0byBjb21wYXJlIHRoZSBkaXJlY3RvcmllcyAqYSogYW5kCi0gICAqYiouICppZ25vcmUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsIGFuZCBkZWZhdWx0cyB0byBgYFsnUkNTJywgJ0NWUycsCi0gICAndGFncyddYGAuICpoaWRlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwgYW5kIGRlZmF1bHRzIHRvIGBgW29zLmN1cmRpciwKLSAgIG9zLnBhcmRpcl1gYC4KKyAgIENvbnN0cnVjdCBhIG5ldyBkaXJlY3RvcnkgY29tcGFyaXNvbiBvYmplY3QsIHRvIGNvbXBhcmUgdGhlIGRpcmVjdG9yaWVzICphKgorICAgYW5kICpiKi4gICppZ25vcmUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsIGFuZCBkZWZhdWx0cyB0bworICAgOmF0dHI6YGZpbGVjbXAuREVGQVVMVF9JR05PUkVTYC4gICpoaWRlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwgYW5kCisgICBkZWZhdWx0cyB0byBgYFtvcy5jdXJkaXIsIG9zLnBhcmRpcl1gYC4KIAogICAgVGhlIDpjbGFzczpgZGlyY21wYCBjbGFzcyBjb21wYXJlcyBmaWxlcyBieSBkb2luZyAqc2hhbGxvdyogY29tcGFyaXNvbnMKICAgIGFzIGRlc2NyaWJlZCBmb3IgOmZ1bmM6YGZpbGVjbXAuY21wYC4KIAogICAgVGhlIDpjbGFzczpgZGlyY21wYCBjbGFzcyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0KCkKIAogICAgICAgUHJpbnQgKHRvIDpkYXRhOmBzeXMuc3Rkb3V0YCkgYSBjb21wYXJpc29uIGJldHdlZW4gKmEqIGFuZCAqYiouCiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0X3BhcnRpYWxfY2xvc3VyZSgpCiAKICAgICAgIFByaW50IGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqIGFuZCBjb21tb24gaW1tZWRpYXRlCiAgICAgICBzdWJkaXJlY3Rvcmllcy4KIAotCiAgICAuLiBtZXRob2Q6OiByZXBvcnRfZnVsbF9jbG9zdXJlKCkKIAogICAgICAgUHJpbnQgYSBjb21wYXJpc29uIGJldHdlZW4gKmEqIGFuZCAqYiogYW5kIGNvbW1vbiBzdWJkaXJlY3RvcmllcwpAQCAtMTMzLDcgKzE0Myw3IEBACiAKICAgIC4uIGF0dHJpYnV0ZTo6IGNvbW1vbl9maWxlcwogCi0gICAgICBGaWxlcyBpbiBib3RoICphKiBhbmQgKmIqCisgICAgICBGaWxlcyBpbiBib3RoICphKiBhbmQgKmIqLgogCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGNvbW1vbl9mdW5ueQpAQCAtMTY0LDYgKzE3NCwxMiBAQAogICAgICAgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgbmFtZXMgaW4gOmF0dHI6YGNvbW1vbl9kaXJzYCB0byA6Y2xhc3M6YGRpcmNtcGAKICAgICAgIG9iamVjdHMuCiAKKy4uIGF0dHJpYnV0ZTo6IERFRkFVTFRfSUdOT1JFUworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgTGlzdCBvZiBkaXJlY3RvcmllcyBpZ25vcmVkIGJ5IDpjbGFzczpgZGlyY21wYCBieSBkZWZhdWx0LgorCiAKIEhlcmUgaXMgYSBzaW1wbGlmaWVkIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGBgc3ViZGlyc2BgIGF0dHJpYnV0ZSB0byBzZWFyY2gKIHJlY3Vyc2l2ZWx5IHRocm91Z2ggdHdvIGRpcmVjdG9yaWVzIHRvIHNob3cgY29tbW9uIGRpZmZlcmVudCBmaWxlczo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0IGIvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAppbmRleCBkNWE0ODc1Li5lZTA2ODMwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKQEAgLTE2MCw2ICsxNjAsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIENhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgIFRoZSBgYCdyVSdgYCBhbmQgYGAnVSdgYCBtb2Rlcy4KKwogCiAqKk9wdGlvbmFsIGluLXBsYWNlIGZpbHRlcmluZzoqKiBpZiB0aGUga2V5d29yZCBhcmd1bWVudCBgYGlucGxhY2U9VHJ1ZWBgIGlzCiBwYXNzZWQgdG8gOmZ1bmM6YGZpbGVpbnB1dC5pbnB1dGAgb3IgdG8gdGhlIDpjbGFzczpgRmlsZUlucHV0YCBjb25zdHJ1Y3RvciwgdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CmluZGV4IDU4OTk4YTguLjAzZTA4NWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CkBAIC0xMiw2ICsxMiw3IEBACiAKIC4uIHRvY3RyZWU6OgogCisgICBwYXRobGliLnJzdAogICAgb3MucGF0aC5yc3QKICAgIGZpbGVpbnB1dC5yc3QKICAgIHN0YXQucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdCBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CmluZGV4IGUwNDM0YjAuLmVmOTNmMDUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAnLipcXC50eHQkJwogICAgICAgPj4+IHJlb2JqID0gcmUuY29tcGlsZShyZWdleCkKICAgICAgID4+PiByZW9iai5tYXRjaCgnZm9vYmFyLnR4dCcpCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMTApLCBtYXRjaD0nZm9vYmFyLnR4dCc+CiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0IGIvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdAppbmRleCA4OGJlMTFjLi4xODQ3YTgwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKQEAgLTMsNiArMywxMSBAQAogCiAuLiBtb2R1bGU6OiBmb3JtYXR0ZXIKICAgIDpzeW5vcHNpczogR2VuZXJpYyBvdXRwdXQgZm9ybWF0dGVyIGFuZCBkZXZpY2UgaW50ZXJmYWNlLgorICAgOmRlcHJlY2F0ZWQ6CisKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgIER1ZSB0byBsYWNrIG9mIHVzYWdlLCB0aGUgZm9ybWF0dGVyIG1vZHVsZSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBpcyBzbGF0ZWQKKyAgIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjYuCiAKIAogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdHdvIGludGVyZmFjZSBkZWZpbml0aW9ucywgZWFjaCB3aXRoIG11bHRpcGxlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdHBsaWIucnN0IGIvRG9jL2xpYnJhcnkvZnRwbGliLnJzdAppbmRleCBkY2IyYWM0Li5iZmVjOWIwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKQEAgLTgwLDQwICs4MCwzNCBAQAogICAgOnJmYzpgNDIxN2AuCiAgICBDb25uZWN0IGFzIHVzdWFsIHRvIHBvcnQgMjEgaW1wbGljaXRseSBzZWN1cmluZyB0aGUgRlRQIGNvbnRyb2wgY29ubmVjdGlvbgogICAgYmVmb3JlIGF1dGhlbnRpY2F0aW5nLiBTZWN1cmluZyB0aGUgZGF0YSBjb25uZWN0aW9uIHJlcXVpcmVzIHRoZSB1c2VyIHRvCi0gICBleHBsaWNpdGx5IGFzayBmb3IgaXQgYnkgY2FsbGluZyB0aGUgOm1ldGg6YHByb3RfcGAgbWV0aG9kLgotICAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBvcHRpb25hbCAtLSB0aGV5IGNhbiBjb250YWluIGEgUEVNIGZvcm1hdHRlZAotICAgcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlIGNoYWluIGZpbGUgbmFtZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLgotICAgKmNvbnRleHQqIHBhcmFtZXRlciBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MKLSAgIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8gYQotICAgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuICpzb3VyY2VfYWRkcmVzcyogaXMgYSAyLXR1cGxlCi0gICBgYChob3N0LCBwb3J0KWBgIGZvciB0aGUgc29ja2V0IHRvIGJpbmQgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZQotICAgY29ubmVjdGluZy4KKyAgIGV4cGxpY2l0bHkgYXNrIGZvciBpdCBieSBjYWxsaW5nIHRoZSA6bWV0aDpgcHJvdF9wYCBtZXRob2QuICAqY29udGV4dCoKKyAgIGlzIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IHdoaWNoIGFsbG93cyBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbgorICAgb3B0aW9ucywgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50byBhIHNpbmdsZSAocG90ZW50aWFsbHkKKyAgIGxvbmctbGl2ZWQpIHN0cnVjdHVyZS4gIFBsZWFzZSByZWFkIDpyZWY6YHNzbC1zZWN1cml0eWAgZm9yIGJlc3QgcHJhY3RpY2VzLgorCisgICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIGEgbGVnYWN5IGFsdGVybmF0aXZlIHRvICpjb250ZXh0KiAtLSB0aGV5CisgICBjYW4gcG9pbnQgdG8gUEVNLWZvcm1hdHRlZCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZXMKKyAgIChyZXNwZWN0aXZlbHkpIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnNvdXJjZV9hZGRyZXNzKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgogCi0gICBIZXJlJ3MgYSBzYW1wbGUgc2Vzc2lvbiB1c2luZyB0aGUgOmNsYXNzOmBGVFBfVExTYCBjbGFzczoKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAotICAgPj4+IGZyb20gZnRwbGliIGltcG9ydCBGVFBfVExTCi0gICA+Pj4gZnRwcyA9IEZUUF9UTFMoJ2Z0cC5weXRob24ub3JnJykKLSAgID4+PiBmdHBzLmxvZ2luKCkgICAgICAgICAgICMgbG9naW4gYW5vbnltb3VzbHkgYmVmb3JlIHNlY3VyaW5nIGNvbnRyb2wgY2hhbm5lbAotICAgPj4+IGZ0cHMucHJvdF9wKCkgICAgICAgICAgIyBzd2l0Y2ggdG8gc2VjdXJlIGRhdGEgY29ubmVjdGlvbgotICAgPj4+IGZ0cHMucmV0cmxpbmVzKCdMSVNUJykgIyBsaXN0IGRpcmVjdG9yeSBjb250ZW50IHNlY3VyZWx5Ci0gICB0b3RhbCA5Ci0gICBkcnd4ci14ci14ICAgOCByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgLgotICAgZHJ3eHIteHIteCAgIDggcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IC4uCi0gICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgYmluCi0gICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgZXRjCi0gICBkLXd4cnd4ci14ICAgMiBmdHAgICAgICB3aGVlbCAgICAgICAgMTAyNCBTZXAgIDUgMTM6NDMgaW5jb21pbmcKLSAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IE5vdiAxNyAgMTk5MyBsaWIKLSAgIGRyd3hyLXhyLXggICA2IDEwOTQgICAgIHdoZWVsICAgICAgICAxMDI0IFNlcCAxMyAxOTowNyBwdWIKLSAgIGRyd3hyLXhyLXggICAzIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCB1c3IKLSAgIC1ydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMzEyIEF1ZyAgMSAgMTk5NCB3ZWxjb21lLm1zZwotICAgJzIyNiBUcmFuc2ZlciBjb21wbGV0ZS4nCi0gICA+Pj4gZnRwcy5xdWl0KCkKLSAgID4+PgorICAgSGVyZSdzIGEgc2FtcGxlIHNlc3Npb24gdXNpbmcgdGhlIDpjbGFzczpgRlRQX1RMU2AgY2xhc3M6OgorCisgICAgICA+Pj4gZnRwcyA9IEZUUF9UTFMoJ2Z0cC5wdXJlZnRwZC5vcmcnKQorICAgICAgPj4+IGZ0cHMubG9naW4oKQorICAgICAgJzIzMCBBbm9ueW1vdXMgdXNlciBsb2dnZWQgaW4nCisgICAgICA+Pj4gZnRwcy5wcm90X3AoKQorICAgICAgJzIwMCBEYXRhIHByb3RlY3Rpb24gbGV2ZWwgc2V0IHRvICJwcml2YXRlIicKKyAgICAgID4+PiBmdHBzLm5sc3QoKQorICAgICAgWyc2amFjaycsICdPcGVuQlNEJywgJ2FudGlsaW5rJywgJ2Jsb2diZW5jaCcsICdic2RjYW0nLCAnY2xvY2tzcGVlZCcsICdkamJkbnMtamVkaScsICdkb2NzJywgJ2VhY2NlbGVyYXRvci1qZWRpJywgJ2Zhdmljb24uaWNvJywgJ2ZyYW5jb3RvbmUnLCAnZnVndScsICdpZ25vcmUnLCAnbGlicHV6emxlJywgJ21ldGFsb2cnLCAnbWluaWRlbnRkJywgJ21pc2MnLCAnbXlzcWwtdWRmLWdsb2JhbC11c2VyLXZhcmlhYmxlcycsICdwaHAtamVua2lucy1oYXNoJywgJ3BocC1za2Vpbi1oYXNoJywgJ3BocC13ZWJkYXYnLCAncGhwYXVkaXQnLCAncGhwYmVuY2gnLCAncGluY2FzdGVyJywgJ3BpbmcnLCAncG9zdG8nLCAncHViJywgJ3B1YmxpYycsICdwdWJsaWNfa2V5cycsICdwdXJlLWZ0cGQnLCAncXNjYW4nLCAncXRjJywgJ3NoYXJlZGFuY2UnLCAnc2t5Y2FjaGUnLCAnc291bmQnLCAndG1wJywgJ3VjYXJwJ10KIAogCiAuLiBleGNlcHRpb246OiBlcnJvcl9yZXBseQpAQCAtNDI3LDYgKzQyMSwxMSBAQAogICAgU2V0IHVwIHNlY3VyZSBjb250cm9sIGNvbm5lY3Rpb24gYnkgdXNpbmcgVExTIG9yIFNTTCwgZGVwZW5kaW5nIG9uIHdoYXQKICAgIHNwZWNpZmllZCBpbiA6bWV0aDpgc3NsX3ZlcnNpb25gIGF0dHJpYnV0ZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBtZXRob2Qgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KKwogLi4gbWV0aG9kOjogRlRQX1RMUy5jY2MoKQogCiAgICBSZXZlcnQgY29udHJvbCBjaGFubmVsIGJhY2sgdG8gcGxhaW50ZXh0LiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRha2UKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CmluZGV4IDdlZDI1YzEuLjJhODljZTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdApAQCAtNDEwLDYgKzQxMCw3IEBACiAgICBTZWUgOmZ1bmM6YGFzdC5saXRlcmFsX2V2YWxgIGZvciBhIGZ1bmN0aW9uIHRoYXQgY2FuIHNhZmVseSBldmFsdWF0ZSBzdHJpbmdzCiAgICB3aXRoIGV4cHJlc3Npb25zIGNvbnRhaW5pbmcgb25seSBsaXRlcmFscy4KIAorLi4gaW5kZXg6OiBidWlsdGluOiBleGVjCiAKIC4uIGZ1bmN0aW9uOjogZXhlYyhvYmplY3RbLCBnbG9iYWxzWywgbG9jYWxzXV0pCiAKQEAgLTU0MCw4ICs1NDEsMTMgQEAKICAgIEEgY2FsbCB0byBgYGZvcm1hdCh2YWx1ZSwgZm9ybWF0X3NwZWMpYGAgaXMgdHJhbnNsYXRlZCB0bwogICAgYGB0eXBlKHZhbHVlKS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKWBgIHdoaWNoIGJ5cGFzc2VzIHRoZSBpbnN0YW5jZQogICAgZGljdGlvbmFyeSB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIHZhbHVlJ3MgOm1ldGg6YF9fZm9ybWF0X19gIG1ldGhvZC4gIEEKLSAgIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZCBpZiB0aGUgbWV0aG9kIGlzIG5vdCBmb3VuZCBvciBpZiBlaXRoZXIKLSAgIHRoZSAqZm9ybWF0X3NwZWMqIG9yIHRoZSByZXR1cm4gdmFsdWUgYXJlIG5vdCBzdHJpbmdzLgorICAgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHRoZSBtZXRob2Qgc2VhcmNoIHJlYWNoZXMKKyAgIDptb2Q6YG9iamVjdGAgYW5kIHRoZSAqZm9ybWF0X3NwZWMqIGlzIG5vbi1lbXB0eSwgb3IgaWYgZWl0aGVyIHRoZQorICAgKmZvcm1hdF9zcGVjKiBvciB0aGUgcmV0dXJuIHZhbHVlIGFyZSBub3Qgc3RyaW5ncy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIGBgb2JqZWN0KCkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYylgYCByYWlzZXMgOmV4YzpgVHlwZUVycm9yYAorICAgICAgaWYgKmZvcm1hdF9zcGVjKiBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgogCiAKIC4uIF9mdW5jLWZyb3plbnNldDoKQEAgLTYwNSw2ICs2MTEsMTAgQEAKIAogICAgVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byB0aGUgYnVpbHQtaW4gbmFtZXNwYWNlIGJ5IHRoZSA6bW9kOmBzaXRlYCBtb2R1bGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBDaGFuZ2VzIHRvIDptb2Q6YHB5ZG9jYCBhbmQgOm1vZDpgaW5zcGVjdGAgbWVhbiB0aGF0IHRoZSByZXBvcnRlZAorICAgICAgc2lnbmF0dXJlcyBmb3IgY2FsbGFibGVzIGFyZSBub3cgbW9yZSBjb21wcmVoZW5zaXZlIGFuZCBjb25zaXN0ZW50LgorCiAKIC4uIGZ1bmN0aW9uOjogaGV4KHgpCiAKQEAgLTY3Niw2ICs2ODYsMTIgQEAKIAogICAgVGhlIGludGVnZXIgdHlwZSBpcyBkZXNjcmliZWQgaW4gOnJlZjpgdHlwZXNudW1lcmljYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmICpiYXNlKiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBpbnRgIGFuZCB0aGUgKmJhc2UqIG9iamVjdCBoYXMgYQorICAgICAgOm1ldGg6YGJhc2UuX19pbmRleF9fIDxvYmplY3QuX19pbmRleF9fPmAgbWV0aG9kLCB0aGF0IG1ldGhvZCBpcyBjYWxsZWQKKyAgICAgIHRvIG9idGFpbiBhbiBpbnRlZ2VyIGZvciB0aGUgYmFzZS4gIFByZXZpb3VzIHZlcnNpb25zIHVzZWQKKyAgICAgIDptZXRoOmBiYXNlLl9faW50X18gPG9iamVjdC5fX2ludF9fPmAgaW5zdGVhZCBvZiA6bWV0aDpgYmFzZS5fX2luZGV4X18KKyAgICAgIDxvYmplY3QuX19pbmRleF9fPmAuCiAKIC4uIGZ1bmN0aW9uOjogaXNpbnN0YW5jZShvYmplY3QsIGNsYXNzaW5mbykKIApAQCAtNzI3LDcgKzc0Myw4IEBACiAuLiBmdW5jdGlvbjo6IGxlbihzKQogCiAgICBSZXR1cm4gdGhlIGxlbmd0aCAodGhlIG51bWJlciBvZiBpdGVtcykgb2YgYW4gb2JqZWN0LiAgVGhlIGFyZ3VtZW50IG1heSBiZSBhCi0gICBzZXF1ZW5jZSAoc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBhIG1hcHBpbmcgKGRpY3Rpb25hcnkpLgorICAgc2VxdWVuY2UgKHN1Y2ggYXMgYSBzdHJpbmcsIGJ5dGVzLCB0dXBsZSwgbGlzdCwgb3IgcmFuZ2UpIG9yIGEgY29sbGVjdGlvbgorICAgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5LCBzZXQsIG9yIGZyb3plbiBzZXQpLgogCiAKIC4uIF9mdW5jLWxpc3Q6CkBAIC03NTgsMjUgKzc3NSwzMSBAQAogICAgYWxyZWFkeSBhcnJhbmdlZCBpbnRvIGFyZ3VtZW50IHR1cGxlcywgc2VlIDpmdW5jOmBpdGVydG9vbHMuc3Rhcm1hcGBcLgogCiAKLS4uIGZ1bmN0aW9uOjogbWF4KGl0ZXJhYmxlLCAqWywga2V5XSkKKy4uIGZ1bmN0aW9uOjogbWF4KGl0ZXJhYmxlLCAqWywga2V5LCBkZWZhdWx0XSkKICAgICAgICAgICAgICAgbWF4KGFyZzEsIGFyZzIsICphcmdzWywga2V5XSkKIAogICAgUmV0dXJuIHRoZSBsYXJnZXN0IGl0ZW0gaW4gYW4gaXRlcmFibGUgb3IgdGhlIGxhcmdlc3Qgb2YgdHdvIG9yIG1vcmUKICAgIGFyZ3VtZW50cy4KIAotICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsICppdGVyYWJsZSogbXVzdCBiZSBhIG5vbi1lbXB0eQotICAgaXRlcmFibGUgKHN1Y2ggYXMgYSBub24tZW1wdHkgc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFRoZSBsYXJnZXN0IGl0ZW0KLSAgIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZQotICAgcHJvdmlkZWQsIHRoZSBsYXJnZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KKyAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgYmUgYW4gOnRlcm06YGl0ZXJhYmxlYC4KKyAgIFRoZSBsYXJnZXN0IGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbAorICAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIGxhcmdlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzCisgICByZXR1cm5lZC4KIAotICAgVGhlIG9wdGlvbmFsIGtleXdvcmQtb25seSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcKLSAgIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4KKyAgIFRoZXJlIGFyZSB0d28gb3B0aW9uYWwga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gVGhlICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcworICAgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLiBUaGUKKyAgICpkZWZhdWx0KiBhcmd1bWVudCBzcGVjaWZpZXMgYW4gb2JqZWN0IHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgaXRlcmFibGUgaXMKKyAgIGVtcHR5LiBJZiB0aGUgaXRlcmFibGUgaXMgZW1wdHkgYW5kICpkZWZhdWx0KiBpcyBub3QgcHJvdmlkZWQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgSWYgbXVsdGlwbGUgaXRlbXMgYXJlIG1heGltYWwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBvbmUKICAgIGVuY291bnRlcmVkLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgc29ydC1zdGFiaWxpdHkgcHJlc2VydmluZyB0b29scwogICAgc3VjaCBhcyBgYHNvcnRlZChpdGVyYWJsZSwga2V5PWtleWZ1bmMsIHJldmVyc2U9VHJ1ZSlbMF1gYCBhbmQKICAgIGBgaGVhcHEubmxhcmdlc3QoMSwgaXRlcmFibGUsIGtleT1rZXlmdW5jKWBgLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqZGVmYXVsdCoga2V5d29yZC1vbmx5IGFyZ3VtZW50LgorCiAKIC4uIF9mdW5jLW1lbW9yeXZpZXc6CiAuLiBmdW5jdGlvbjo6IG1lbW9yeXZpZXcob2JqKQpAQCAtNzg2LDI1ICs4MDksMzIgQEAKICAgIDpyZWY6YHR5cGVtZW1vcnl2aWV3YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCi0uLiBmdW5jdGlvbjo6IG1pbihpdGVyYWJsZSwgKlssIGtleV0pCisuLiBmdW5jdGlvbjo6IG1pbihpdGVyYWJsZSwgKlssIGtleSwgZGVmYXVsdF0pCiAgICAgICAgICAgICAgIG1pbihhcmcxLCBhcmcyLCAqYXJnc1ssIGtleV0pCiAKICAgIFJldHVybiB0aGUgc21hbGxlc3QgaXRlbSBpbiBhbiBpdGVyYWJsZSBvciB0aGUgc21hbGxlc3Qgb2YgdHdvIG9yIG1vcmUKICAgIGFyZ3VtZW50cy4KIAotICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsICppdGVyYWJsZSogbXVzdCBiZSBhIG5vbi1lbXB0eQotICAgaXRlcmFibGUgKHN1Y2ggYXMgYSBub24tZW1wdHkgc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFRoZSBzbWFsbGVzdCBpdGVtCi0gICBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUKLSAgIHByb3ZpZGVkLCB0aGUgc21hbGxlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzIHJldHVybmVkLgorICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBhbiA6dGVybTpgaXRlcmFibGVgLgorICAgVGhlIHNtYWxsZXN0IGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbAorICAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIHNtYWxsZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcworICAgcmV0dXJuZWQuCiAKLSAgIFRoZSBvcHRpb25hbCBrZXl3b3JkLW9ubHkgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nCi0gICBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuCisgICBUaGVyZSBhcmUgdHdvIG9wdGlvbmFsIGtleXdvcmQtb25seSBhcmd1bWVudHMuIFRoZSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMKKyAgIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4gVGhlCisgICAqZGVmYXVsdCogYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIGl0ZXJhYmxlIGlzCisgICBlbXB0eS4gSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5IGFuZCAqZGVmYXVsdCogaXMgbm90IHByb3ZpZGVkLCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCiAKICAgIElmIG11bHRpcGxlIGl0ZW1zIGFyZSBtaW5pbWFsLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgb25lCiAgICBlbmNvdW50ZXJlZC4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIHNvcnQtc3RhYmlsaXR5IHByZXNlcnZpbmcgdG9vbHMKICAgIHN1Y2ggYXMgYGBzb3J0ZWQoaXRlcmFibGUsIGtleT1rZXlmdW5jKVswXWBgIGFuZCBgYGhlYXBxLm5zbWFsbGVzdCgxLAogICAgaXRlcmFibGUsIGtleT1rZXlmdW5jKWBgLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqZGVmYXVsdCoga2V5d29yZC1vbmx5IGFyZ3VtZW50LgorCisKIC4uIGZ1bmN0aW9uOjogbmV4dChpdGVyYXRvclssIGRlZmF1bHRdKQogCiAgICBSZXRyaWV2ZSB0aGUgbmV4dCBpdGVtIGZyb20gdGhlICppdGVyYXRvciogYnkgY2FsbGluZyBpdHMKQEAgLTg2Niw4ICs4OTYsNyBAQAogICAgYGAnYidgYCAgIGJpbmFyeSBtb2RlCiAgICBgYCd0J2BgICAgdGV4dCBtb2RlIChkZWZhdWx0KQogICAgYGAnKydgYCAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKQotICAgYGAnVSdgYCAgIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHNob3VsZAotICAgICAgICAgICAgIG5vdCBiZSB1c2VkIGluIG5ldyBjb2RlKQorICAgYGAnVSdgYCAgIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgIG1vZGUgKGRlcHJlY2F0ZWQpCiAgICA9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgYGAncidgYCAob3BlbiBmb3IgcmVhZGluZyB0ZXh0LCBzeW5vbnltIG9mIGBgJ3J0J2BgKS4KQEAgLTk3Myw2ICsxMDAyLDggQEAKICAgIDptb2Q6YG9zLm9wZW5gIGFzICpvcGVuZXIqIHJlc3VsdHMgaW4gZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHBhc3NpbmcKICAgIGBgTm9uZWBgKS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIHRoZSA6cmVmOmBkaXJfZmQgPGRpcl9mZD5gIHBhcmFtZXRlciBvZiB0aGUKICAgIDpmdW5jOmBvcy5vcGVuYCBmdW5jdGlvbiB0byBvcGVuIGEgZmlsZSByZWxhdGl2ZSB0byBhIGdpdmVuIGRpcmVjdG9yeTo6CiAKQEAgLTk4NiwxMCArMTAxNyw2IEBACiAgICAgICAuLi4KICAgICAgID4+PiBvcy5jbG9zZShkaXJfZmQpICAjIGRvbid0IGxlYWsgYSBmaWxlIGRlc2NyaXB0b3IKIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIFRoZSAqb3BlbmVyKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgotICAgICAgVGhlIGBgJ3gnYGAgbW9kZSB3YXMgYWRkZWQuCi0KICAgIFRoZSB0eXBlIG9mIDp0ZXJtOmBmaWxlIG9iamVjdGAgcmV0dXJuZWQgYnkgdGhlIDpmdW5jOmBvcGVuYCBmdW5jdGlvbgogICAgZGVwZW5kcyBvbiB0aGUgbW9kZS4gIFdoZW4gOmZ1bmM6YG9wZW5gIGlzIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSB0ZXh0CiAgICBtb2RlIChgYCd3J2BgLCBgYCdyJ2BgLCBgYCd3dCdgYCwgYGAncnQnYGAsIGV0Yy4pLCBpdCByZXR1cm5zIGEgc3ViY2xhc3Mgb2YKQEAgLTEwMTYsMTAgKzEwNDMsMTggQEAKICAgIGFuZCA6bW9kOmBzaHV0aWxgLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCisgICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KICAgICAgIDpleGM6YElPRXJyb3JgIHVzZWQgdG8gYmUgcmFpc2VkLCBpdCBpcyBub3cgYW4gYWxpYXMgb2YgOmV4YzpgT1NFcnJvcmAuCiAgICAgICA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIG5vdyByYWlzZWQgaWYgdGhlIGZpbGUgb3BlbmVkIGluIGV4Y2x1c2l2ZQogICAgICAgY3JlYXRpb24gbW9kZSAoYGAneCdgYCkgYWxyZWFkeSBleGlzdHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgZmlsZSBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCisgICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjQgNC4wCisgICAgICBUaGUgYGAnVSdgYCBtb2RlLgorCiAKIC4uIFhYWCB3b3JrcyBmb3IgYnl0ZXMgdG9vLCBidXQgc2hvdWxkIGl0PwogLi4gZnVuY3Rpb246OiBvcmQoYykKQEAgLTEwNzEsOSArMTEwNiwxMSBAQAogCiAgICBSZXR1cm4gYSBwcm9wZXJ0eSBhdHRyaWJ1dGUuCiAKLSAgICpmZ2V0KiBpcyBhIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGFuIGF0dHJpYnV0ZSB2YWx1ZSwgbGlrZXdpc2UgKmZzZXQqIGlzIGEKLSAgIGZ1bmN0aW9uIGZvciBzZXR0aW5nLCBhbmQgKmZkZWwqIGEgZnVuY3Rpb24gZm9yIGRlbCdpbmcsIGFuIGF0dHJpYnV0ZS4gIFR5cGljYWwKLSAgIHVzZSBpcyB0byBkZWZpbmUgYSBtYW5hZ2VkIGF0dHJpYnV0ZSBgYHhgYDo6CisgICAqZmdldCogaXMgYSBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhbiBhdHRyaWJ1dGUgdmFsdWUuICAqZnNldCogaXMgYSBmdW5jdGlvbgorICAgZm9yIHNldHRpbmcgYW4gYXR0cmlidXRlIHZhbHVlLiAqZmRlbCogaXMgYSBmdW5jdGlvbiBmb3IgZGVsZXRpbmcgYW4gYXR0cmlidXRlCisgICB2YWx1ZS4gIEFuZCAqZG9jKiBjcmVhdGVzIGEgZG9jc3RyaW5nIGZvciB0aGUgYXR0cmlidXRlLgorCisgICBBIHR5cGljYWwgdXNlIGlzIHRvIGRlZmluZSBhIG1hbmFnZWQgYXR0cmlidXRlIGBgeGBgOjoKIAogICAgICAgY2xhc3MgQzoKICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC0xMDgxLDEzICsxMTE4LDE2IEBACiAKICAgICAgICAgICBkZWYgZ2V0eChzZWxmKToKICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3gKKwogICAgICAgICAgIGRlZiBzZXR4KHNlbGYsIHZhbHVlKToKICAgICAgICAgICAgICAgc2VsZi5feCA9IHZhbHVlCisKICAgICAgICAgICBkZWYgZGVseChzZWxmKToKICAgICAgICAgICAgICAgZGVsIHNlbGYuX3gKKwogICAgICAgICAgIHggPSBwcm9wZXJ0eShnZXR4LCBzZXR4LCBkZWx4LCAiSSdtIHRoZSAneCcgcHJvcGVydHkuIikKIAotICAgSWYgdGhlbiAqYyogaXMgYW4gaW5zdGFuY2Ugb2YgKkMqLCBgYGMueGBgIHdpbGwgaW52b2tlIHRoZSBnZXR0ZXIsCisgICBJZiAqYyogaXMgYW4gaW5zdGFuY2Ugb2YgKkMqLCBgYGMueGBgIHdpbGwgaW52b2tlIHRoZSBnZXR0ZXIsCiAgICBgYGMueCA9IHZhbHVlYGAgd2lsbCBpbnZva2UgdGhlIHNldHRlciBhbmQgYGBkZWwgYy54YGAgdGhlIGRlbGV0ZXIuCiAKICAgIElmIGdpdmVuLCAqZG9jKiB3aWxsIGJlIHRoZSBkb2NzdHJpbmcgb2YgdGhlIHByb3BlcnR5IGF0dHJpYnV0ZS4gT3RoZXJ3aXNlLCB0aGUKQEAgLTExMDMsOCArMTE0Myw5IEBACiAgICAgICAgICAgICAgICIiIkdldCB0aGUgY3VycmVudCB2b2x0YWdlLiIiIgogICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdm9sdGFnZQogCi0gICB0dXJucyB0aGUgOm1ldGg6YHZvbHRhZ2VgIG1ldGhvZCBpbnRvIGEgImdldHRlciIgZm9yIGEgcmVhZC1vbmx5IGF0dHJpYnV0ZQotICAgd2l0aCB0aGUgc2FtZSBuYW1lLgorICAgVGhlIGBgQHByb3BlcnR5YGAgZGVjb3JhdG9yIHR1cm5zIHRoZSA6bWV0aDpgdm9sdGFnZWAgbWV0aG9kIGludG8gYSAiZ2V0dGVyIgorICAgZm9yIGEgcmVhZC1vbmx5IGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUsIGFuZCBpdCBzZXRzIHRoZSBkb2NzdHJpbmcgZm9yCisgICAqdm9sdGFnZSogdG8gIkdldCB0aGUgY3VycmVudCB2b2x0YWdlLiIKIAogICAgQSBwcm9wZXJ0eSBvYmplY3QgaGFzIDphdHRyOmB+cHJvcGVydHkuZ2V0dGVyYCwgOmF0dHI6YH5wcm9wZXJ0eS5zZXR0ZXJgLAogICAgYW5kIDphdHRyOmB+cHJvcGVydHkuZGVsZXRlcmAgbWV0aG9kcyB1c2FibGUgYXMgZGVjb3JhdG9ycyB0aGF0IGNyZWF0ZSBhCkBAIC0xMTMyLDcgKzExNzMsNyBAQAogICAgYWRkaXRpb25hbCBmdW5jdGlvbnMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgb3JpZ2luYWwgcHJvcGVydHkgKGBgeGBgIGluIHRoaXMKICAgIGNhc2UuKQogCi0gICBUaGUgcmV0dXJuZWQgcHJvcGVydHkgYWxzbyBoYXMgdGhlIGF0dHJpYnV0ZXMgYGBmZ2V0YGAsIGBgZnNldGBgLCBhbmQKKyAgIFRoZSByZXR1cm5lZCBwcm9wZXJ0eSBvYmplY3QgYWxzbyBoYXMgdGhlIGF0dHJpYnV0ZXMgYGBmZ2V0YGAsIGBgZnNldGBgLCBhbmQKICAgIGBgZmRlbGBgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cy4KIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0IGIvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAppbmRleCAzYzk0NmUzLi45NjY0NWMzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKQEAgLTYsNiArNiw3IEBACiAuLiBtb2R1bGVhdXRob3I6OiBQZXRlciBIYXJyaXMgPHNjYXZAYmx1ZXlvbmRlci5jby51az4KIC4uIG1vZHVsZWF1dGhvcjo6IFJheW1vbmQgSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KIC4uIG1vZHVsZWF1dGhvcjo6IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW5AZ21haWwuY29tPgorLi4gbW9kdWxlYXV0aG9yOjogxYF1a2FzeiBMYW5nYSA8bHVrYXN6QGxhbmdhLnBsPgogLi4gc2VjdGlvbmF1dGhvcjo6IFBldGVyIEhhcnJpcyA8c2NhdkBibHVleW9uZGVyLmNvLnVrPgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9mdW5jdG9vbHMucHlgCkBAIC0xMzMsMTUgKzEzNCwzNCBAQAogCiAgICAgICAgQHRvdGFsX29yZGVyaW5nCiAgICAgICAgY2xhc3MgU3R1ZGVudDoKKyAgICAgICAgICAgZGVmIF9pc192YWxpZF9vcGVyYW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIHJldHVybiAoaGFzYXR0cihvdGhlciwgImxhc3RuYW1lIikgYW5kCisgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob3RoZXIsICJmaXJzdG5hbWUiKSkKICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfdmFsaWRfb3BlcmFuZChvdGhlcik6CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpID09CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3ZhbGlkX29wZXJhbmQob3RoZXIpOgorICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA8CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGlsZSB0aGlzIGRlY29yYXRvciBtYWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSB3ZWxsIGJlaGF2ZWQgdG90YWxseQorICAgICAgb3JkZXJlZCB0eXBlcywgaXQgKmRvZXMqIGNvbWUgYXQgdGhlIGNvc3Qgb2Ygc2xvd2VyIGV4ZWN1dGlvbiBhbmQKKyAgICAgIG1vcmUgY29tcGxleCBzdGFjayB0cmFjZXMgZm9yIHRoZSBkZXJpdmVkIGNvbXBhcmlzb24gbWV0aG9kcy4gSWYKKyAgICAgIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyBpbmRpY2F0ZXMgdGhpcyBpcyBhIGJvdHRsZW5lY2sgZm9yIGEgZ2l2ZW4KKyAgICAgIGFwcGxpY2F0aW9uLCBpbXBsZW1lbnRpbmcgYWxsIHNpeCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBpbnN0ZWFkIGlzCisgICAgICBsaWtlbHkgdG8gcHJvdmlkZSBhbiBlYXN5IHNwZWVkIGJvb3N0LgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJldHVybmluZyBOb3RJbXBsZW1lbnRlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yCisgICAgICB1bnJlY29nbmlzZWQgdHlwZXMgaXMgbm93IHN1cHBvcnRlZC4KIAogLi4gZnVuY3Rpb246OiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQogCkBAIC0xNzQsNiArMTk0LDUwIEBACiAgICAgICAxOAogCiAKKy4uIGNsYXNzOjogcGFydGlhbG1ldGhvZChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgcGFydGlhbG1ldGhvZGAgZGVzY3JpcHRvciB3aGljaCBiZWhhdmVzCisgICBsaWtlIDpjbGFzczpgcGFydGlhbGAgZXhjZXB0IHRoYXQgaXQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIG1ldGhvZAorICAgZGVmaW5pdGlvbiByYXRoZXIgdGhhbiBiZWluZyBkaXJlY3RseSBjYWxsYWJsZS4KKworICAgKmZ1bmMqIG11c3QgYmUgYSA6dGVybTpgZGVzY3JpcHRvcmAgb3IgYSBjYWxsYWJsZSAob2JqZWN0cyB3aGljaCBhcmUgYm90aCwKKyAgIGxpa2Ugbm9ybWFsIGZ1bmN0aW9ucywgYXJlIGhhbmRsZWQgYXMgZGVzY3JpcHRvcnMpLgorCisgICBXaGVuICpmdW5jKiBpcyBhIGRlc2NyaXB0b3IgKHN1Y2ggYXMgYSBub3JtYWwgUHl0aG9uIGZ1bmN0aW9uLAorICAgOmZ1bmM6YGNsYXNzbWV0aG9kYCwgOmZ1bmM6YHN0YXRpY21ldGhvZGAsIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAgb3IKKyAgIGFub3RoZXIgaW5zdGFuY2Ugb2YgOmNsYXNzOmBwYXJ0aWFsbWV0aG9kYCksIGNhbGxzIHRvIGBgX19nZXRfX2BgIGFyZQorICAgZGVsZWdhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGRlc2NyaXB0b3IsIGFuZCBhbiBhcHByb3ByaWF0ZQorICAgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3QgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4KKworICAgV2hlbiAqZnVuYyogaXMgYSBub24tZGVzY3JpcHRvciBjYWxsYWJsZSwgYW4gYXBwcm9wcmlhdGUgYm91bmQgbWV0aG9kIGlzCisgICBjcmVhdGVkIGR5bmFtaWNhbGx5LiBUaGlzIGJlaGF2ZXMgbGlrZSBhIG5vcm1hbCBQeXRob24gZnVuY3Rpb24gd2hlbgorICAgdXNlZCBhcyBhIG1ldGhvZDogdGhlICpzZWxmKiBhcmd1bWVudCB3aWxsIGJlIGluc2VydGVkIGFzIHRoZSBmaXJzdAorICAgcG9zaXRpb25hbCBhcmd1bWVudCwgZXZlbiBiZWZvcmUgdGhlICphcmdzKiBhbmQgKmtleXdvcmRzKiBzdXBwbGllZCB0bworICAgdGhlIDpjbGFzczpgcGFydGlhbG1ldGhvZGAgY29uc3RydWN0b3IuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gY2xhc3MgQ2VsbChvYmplY3QpOgorICAgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAuLi4gICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisgICAgICAuLi4gICAgIEBwcm9wZXJ0eQorICAgICAgLi4uICAgICBkZWYgYWxpdmUoc2VsZik6CisgICAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKKyAgICAgIC4uLiAgICAgZGVmIHNldF9zdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAuLi4gICAgICAgICBzZWxmLl9hbGl2ZSA9IGJvb2woc3RhdGUpCisgICAgICAuLi4gICAgIHNldF9hbGl2ZSA9IHBhcnRpYWxtZXRob2Qoc2V0X3N0YXRlLCBUcnVlKQorICAgICAgLi4uICAgICBzZXRfZGVhZCA9IHBhcnRpYWxtZXRob2Qoc2V0X3N0YXRlLCBGYWxzZSkKKyAgICAgIC4uLgorICAgICAgPj4+IGMgPSBDZWxsKCkKKyAgICAgID4+PiBjLmFsaXZlCisgICAgICBGYWxzZQorICAgICAgPj4+IGMuc2V0X2FsaXZlKCkKKyAgICAgID4+PiBjLmFsaXZlCisgICAgICBUcnVlCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogcmVkdWNlKGZ1bmN0aW9uLCBpdGVyYWJsZVssIGluaXRpYWxpemVyXSkKIAogICAgQXBwbHkgKmZ1bmN0aW9uKiBvZiB0d28gYXJndW1lbnRzIGN1bXVsYXRpdmVseSB0byB0aGUgaXRlbXMgb2YgKnNlcXVlbmNlKiwgZnJvbQpAQCAtMTk4LDYgKzI2MiwxMTEgQEAKICAgICAgICAgICByZXR1cm4gdmFsdWUKIAogCisuLiBkZWNvcmF0b3I6OiBzaW5nbGVkaXNwYXRjaChkZWZhdWx0KQorCisgICBUcmFuc2Zvcm1zIGEgZnVuY3Rpb24gaW50byBhIDp0ZXJtOmBzaW5nbGUtZGlzcGF0Y2ggPHNpbmdsZQorICAgZGlzcGF0Y2g+YCA6dGVybTpgZ2VuZXJpYyBmdW5jdGlvbmAuCisKKyAgIFRvIGRlZmluZSBhIGdlbmVyaWMgZnVuY3Rpb24sIGRlY29yYXRlIGl0IHdpdGggdGhlIGBgQHNpbmdsZWRpc3BhdGNoYGAKKyAgIGRlY29yYXRvci4gTm90ZSB0aGF0IHRoZSBkaXNwYXRjaCBoYXBwZW5zIG9uIHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCwKKyAgIGNyZWF0ZSB5b3VyIGZ1bmN0aW9uIGFjY29yZGluZ2x5OjoKKworICAgICA+Pj4gZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHNpbmdsZWRpc3BhdGNoCisgICAgID4+PiBAc2luZ2xlZGlzcGF0Y2gKKyAgICAgLi4uIGRlZiBmdW4oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiTGV0IG1lIGp1c3Qgc2F5LCIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnKQorCisgICBUbyBhZGQgb3ZlcmxvYWRlZCBpbXBsZW1lbnRhdGlvbnMgdG8gdGhlIGZ1bmN0aW9uLCB1c2UgdGhlIDpmdW5jOmByZWdpc3RlcmAKKyAgIGF0dHJpYnV0ZSBvZiB0aGUgZ2VuZXJpYyBmdW5jdGlvbi4gIEl0IGlzIGEgZGVjb3JhdG9yLCB0YWtpbmcgYSB0eXBlCisgICBwYXJhbWV0ZXIgYW5kIGRlY29yYXRpbmcgYSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIG9wZXJhdGlvbiBmb3IgdGhhdAorICAgdHlwZTo6CisKKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIoaW50KQorICAgICAuLi4gZGVmIF8oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiU3RyZW5ndGggaW4gbnVtYmVycywgZWg/IiwgZW5kPSIgIikKKyAgICAgLi4uICAgICBwcmludChhcmcpCisgICAgIC4uLgorICAgICA+Pj4gQGZ1bi5yZWdpc3RlcihsaXN0KQorICAgICAuLi4gZGVmIF8oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiRW51bWVyYXRlIHRoaXM6IikKKyAgICAgLi4uICAgICBmb3IgaSwgZWxlbSBpbiBlbnVtZXJhdGUoYXJnKToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoaSwgZWxlbSkKKworICAgVG8gZW5hYmxlIHJlZ2lzdGVyaW5nIGxhbWJkYXMgYW5kIHByZS1leGlzdGluZyBmdW5jdGlvbnMsIHRoZQorICAgOmZ1bmM6YHJlZ2lzdGVyYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgaW4gYSBmdW5jdGlvbmFsIGZvcm06OgorCisgICAgID4+PiBkZWYgbm90aGluZyhhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIHByaW50KCJOb3RoaW5nLiIpCisgICAgIC4uLgorICAgICA+Pj4gZnVuLnJlZ2lzdGVyKHR5cGUoTm9uZSksIG5vdGhpbmcpCisKKyAgIFRoZSA6ZnVuYzpgcmVnaXN0ZXJgIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSB1bmRlY29yYXRlZCBmdW5jdGlvbiB3aGljaAorICAgZW5hYmxlcyBkZWNvcmF0b3Igc3RhY2tpbmcsIHBpY2tsaW5nLCBhcyB3ZWxsIGFzIGNyZWF0aW5nIHVuaXQgdGVzdHMgZm9yCisgICBlYWNoIHZhcmlhbnQgaW5kZXBlbmRlbnRseTo6CisKKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIoZmxvYXQpCisgICAgIC4uLiBAZnVuLnJlZ2lzdGVyKERlY2ltYWwpCisgICAgIC4uLiBkZWYgZnVuX251bShhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIGlmIHZlcmJvc2U6CisgICAgIC4uLiAgICAgICAgIHByaW50KCJIYWxmIG9mIHlvdXIgbnVtYmVyOiIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnIC8gMikKKyAgICAgLi4uCisgICAgID4+PiBmdW5fbnVtIGlzIGZ1bgorICAgICBGYWxzZQorCisgICBXaGVuIGNhbGxlZCwgdGhlIGdlbmVyaWMgZnVuY3Rpb24gZGlzcGF0Y2hlcyBvbiB0aGUgdHlwZSBvZiB0aGUgZmlyc3QKKyAgIGFyZ3VtZW50OjoKKworICAgICA+Pj4gZnVuKCJIZWxsbywgd29ybGQuIikKKyAgICAgSGVsbG8sIHdvcmxkLgorICAgICA+Pj4gZnVuKCJ0ZXN0LiIsIHZlcmJvc2U9VHJ1ZSkKKyAgICAgTGV0IG1lIGp1c3Qgc2F5LCB0ZXN0LgorICAgICA+Pj4gZnVuKDQyLCB2ZXJib3NlPVRydWUpCisgICAgIFN0cmVuZ3RoIGluIG51bWJlcnMsIGVoPyA0MgorICAgICA+Pj4gZnVuKFsnc3BhbScsICdzcGFtJywgJ2VnZ3MnLCAnc3BhbSddLCB2ZXJib3NlPVRydWUpCisgICAgIEVudW1lcmF0ZSB0aGlzOgorICAgICAwIHNwYW0KKyAgICAgMSBzcGFtCisgICAgIDIgZWdncworICAgICAzIHNwYW0KKyAgICAgPj4+IGZ1bihOb25lKQorICAgICBOb3RoaW5nLgorICAgICA+Pj4gZnVuKDEuMjMpCisgICAgIDAuNjE1CisKKyAgIFdoZXJlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgdHlwZSwgaXRzCisgICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBpcyB1c2VkIHRvIGZpbmQgYSBtb3JlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uCisgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVjb3JhdGVkIHdpdGggYGBAc2luZ2xlZGlzcGF0Y2hgYCBpcyByZWdpc3RlcmVkCisgICBmb3IgdGhlIGJhc2UgYGBvYmplY3RgYCB0eXBlLCB3aGljaCBtZWFucyBpdCBpcyB1c2VkIGlmIG5vIGJldHRlcgorICAgaW1wbGVtZW50YXRpb24gaXMgZm91bmQuCisKKyAgIFRvIGNoZWNrIHdoaWNoIGltcGxlbWVudGF0aW9uIHdpbGwgdGhlIGdlbmVyaWMgZnVuY3Rpb24gY2hvb3NlIGZvcgorICAgYSBnaXZlbiB0eXBlLCB1c2UgdGhlIGBgZGlzcGF0Y2goKWBgIGF0dHJpYnV0ZTo6CisKKyAgICAgPj4+IGZ1bi5kaXNwYXRjaChmbG9hdCkKKyAgICAgPGZ1bmN0aW9uIGZ1bl9udW0gYXQgMHgxMDM1YTI4NDA+CisgICAgID4+PiBmdW4uZGlzcGF0Y2goZGljdCkgICAgIyBub3RlOiBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgIDxmdW5jdGlvbiBmdW4gYXQgMHgxMDNmZTAwMDA+CisKKyAgIFRvIGFjY2VzcyBhbGwgcmVnaXN0ZXJlZCBpbXBsZW1lbnRhdGlvbnMsIHVzZSB0aGUgcmVhZC1vbmx5IGBgcmVnaXN0cnlgYAorICAgYXR0cmlidXRlOjoKKworICAgID4+PiBmdW4ucmVnaXN0cnkua2V5cygpCisgICAgZGljdF9rZXlzKFs8Y2xhc3MgJ05vbmVUeXBlJz4sIDxjbGFzcyAnaW50Jz4sIDxjbGFzcyAnb2JqZWN0Jz4sCisgICAgICAgICAgICAgIDxjbGFzcyAnZGVjaW1hbC5EZWNpbWFsJz4sIDxjbGFzcyAnbGlzdCc+LAorICAgICAgICAgICAgICA8Y2xhc3MgJ2Zsb2F0Jz5dKQorICAgID4+PiBmdW4ucmVnaXN0cnlbZmxvYXRdCisgICAgPGZ1bmN0aW9uIGZ1bl9udW0gYXQgMHgxMDM1YTI4NDA+CisgICAgPj4+IGZ1bi5yZWdpc3RyeVtvYmplY3RdCisgICAgPGZ1bmN0aW9uIGZ1biBhdCAweDEwM2ZlMDAwMD4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCB3cmFwcGVkLCBhc3NpZ25lZD1XUkFQUEVSX0FTU0lHTk1FTlRTLCB1cGRhdGVkPVdSQVBQRVJfVVBEQVRFUykKIAogICAgVXBkYXRlIGEgKndyYXBwZXIqIGZ1bmN0aW9uIHRvIGxvb2sgbGlrZSB0aGUgKndyYXBwZWQqIGZ1bmN0aW9uLiBUaGUgb3B0aW9uYWwKQEAgLTIxMiw4ICszODEsOCBAQAogCiAgICBUbyBhbGxvdyBhY2Nlc3MgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGZvciBpbnRyb3NwZWN0aW9uIGFuZCBvdGhlciBwdXJwb3NlcwogICAgKGUuZy4gYnlwYXNzaW5nIGEgY2FjaGluZyBkZWNvcmF0b3Igc3VjaCBhcyA6ZnVuYzpgbHJ1X2NhY2hlYCksIHRoaXMgZnVuY3Rpb24KLSAgIGF1dG9tYXRpY2FsbHkgYWRkcyBhIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSB0byB0aGUgd3JhcHBlciB0aGF0IHJlZmVycyB0bwotICAgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgorICAgYXV0b21hdGljYWxseSBhZGRzIGEgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSB0byB0aGUgd3JhcHBlciB0aGF0IHJlZmVycyB0bworICAgdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuCiAKICAgIFRoZSBtYWluIGludGVuZGVkIHVzZSBmb3IgdGhpcyBmdW5jdGlvbiBpcyBpbiA6dGVybTpgZGVjb3JhdG9yYCBmdW5jdGlvbnMgd2hpY2gKICAgIHdyYXAgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiBhbmQgcmV0dXJuIHRoZSB3cmFwcGVyLiBJZiB0aGUgd3JhcHBlciBmdW5jdGlvbiBpcwpAQCAtMjM2LDEyICs0MDUsMTggQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBNaXNzaW5nIGF0dHJpYnV0ZXMgbm8gbG9uZ2VyIHRyaWdnZXIgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgbm93IGFsd2F5cyByZWZlcnMgdG8gdGhlIHdyYXBwZWQKKyAgICAgIGZ1bmN0aW9uLCBldmVuIGlmIHRoYXQgZnVuY3Rpb24gZGVmaW5lZCBhIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUuCisgICAgICAoc2VlIDppc3N1ZTpgMTc0ODJgKQorCiAKIC4uIGRlY29yYXRvcjo6IHdyYXBzKHdyYXBwZWQsIGFzc2lnbmVkPVdSQVBQRVJfQVNTSUdOTUVOVFMsIHVwZGF0ZWQ9V1JBUFBFUl9VUERBVEVTKQogCi0gICBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGludm9raW5nIGBgcGFydGlhbCh1cGRhdGVfd3JhcHBlciwKLSAgIHdyYXBwZWQ9d3JhcHBlZCwgYXNzaWduZWQ9YXNzaWduZWQsIHVwZGF0ZWQ9dXBkYXRlZClgYCBhcyBhIGZ1bmN0aW9uIGRlY29yYXRvcgotICAgd2hlbiBkZWZpbmluZyBhIHdyYXBwZXIgZnVuY3Rpb24uIEZvciBleGFtcGxlOgorICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBpbnZva2luZyA6ZnVuYzpgdXBkYXRlX3dyYXBwZXJgIGFzIGEKKyAgIGZ1bmN0aW9uIGRlY29yYXRvciB3aGVuIGRlZmluaW5nIGEgd3JhcHBlciBmdW5jdGlvbi4gIEl0IGlzIGVxdWl2YWxlbnQgdG8KKyAgIGBgcGFydGlhbCh1cGRhdGVfd3JhcHBlciwgd3JhcHBlZD13cmFwcGVkLCBhc3NpZ25lZD1hc3NpZ25lZCwgdXBkYXRlZD11cGRhdGVkKWBgLgorICAgRm9yIGV4YW1wbGU6OgogCiAgICAgICA+Pj4gZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCiAgICAgICA+Pj4gZGVmIG15X2RlY29yYXRvcihmKToKQEAgLTMwMSw0ICs0NzYsMyBAQAogYXJlIG5vdCBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuICBBbHNvLCA6Y2xhc3M6YHBhcnRpYWxgIG9iamVjdHMgZGVmaW5lZCBpbgogY2xhc3NlcyBiZWhhdmUgbGlrZSBzdGF0aWMgbWV0aG9kcyBhbmQgZG8gbm90IHRyYW5zZm9ybSBpbnRvIGJvdW5kIG1ldGhvZHMKIGR1cmluZyBpbnN0YW5jZSBhdHRyaWJ1dGUgbG9vay11cC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2MucnN0IGIvRG9jL2xpYnJhcnkvZ2MucnN0CmluZGV4IDcxNDQ5YTMuLjgxMzU1NDIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2djLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nYy5yc3QKQEAgLTY3LDYgKzY3LDI1IEBACiAgICByZXR1cm5lZC4KIAogCisuLiBmdW5jdGlvbjo6IGdldF9zdGF0cygpCisKKyAgIFJldHVybiBhIGxpc3Qgb2YgdGhyZWUgcGVyLWdlbmVyYXRpb24gZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgY29sbGVjdGlvbgorICAgc3RhdGlzdGljcyBzaW5jZSBpbnRlcnByZXRlciBzdGFydC4gIFRoZSBudW1iZXIgb2Yga2V5cyBtYXkgY2hhbmdlCisgICBpbiB0aGUgZnV0dXJlLCBidXQgY3VycmVudGx5IGVhY2ggZGljdGlvbmFyeSB3aWxsIGNvbnRhaW4gdGhlIGZvbGxvd2luZworICAgaXRlbXM6CisKKyAgICogYGBjb2xsZWN0aW9uc2BgIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBnZW5lcmF0aW9uIHdhcyBjb2xsZWN0ZWQ7CisKKyAgICogYGBjb2xsZWN0ZWRgYCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgY29sbGVjdGVkIGluc2lkZSB0aGlzCisgICAgIGdlbmVyYXRpb247CisKKyAgICogYGB1bmNvbGxlY3RhYmxlYGAgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIHdoaWNoIHdlcmUgZm91bmQKKyAgICAgdG8gYmUgdW5jb2xsZWN0YWJsZSAoYW5kIHdlcmUgdGhlcmVmb3JlIG1vdmVkIHRvIHRoZSA6ZGF0YTpgZ2FyYmFnZWAKKyAgICAgbGlzdCkgaW5zaWRlIHRoaXMgZ2VuZXJhdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzZXRfdGhyZXNob2xkKHRocmVzaG9sZDBbLCB0aHJlc2hvbGQxWywgdGhyZXNob2xkMl1dKQogCiAgICBTZXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB0aHJlc2hvbGRzICh0aGUgY29sbGVjdGlvbiBmcmVxdWVuY3kpLiBTZXR0aW5nCkBAIC0xNTgsMjQgKzE3NywxMyBAQAogCiAuLiBkYXRhOjogZ2FyYmFnZQogCi0gICBBIGxpc3Qgb2Ygb2JqZWN0cyB3aGljaCB0aGUgY29sbGVjdG9yIGZvdW5kIHRvIGJlIHVucmVhY2hhYmxlIGJ1dCBjb3VsZCBub3QgYmUKLSAgIGZyZWVkICh1bmNvbGxlY3RhYmxlIG9iamVjdHMpLiAgQnkgZGVmYXVsdCwgdGhpcyBsaXN0IGNvbnRhaW5zIG9ubHkgb2JqZWN0cyB3aXRoCi0gICA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcy4gT2JqZWN0cyB0aGF0IGhhdmUgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgYW5kIGFyZQotICAgcGFydCBvZiBhIHJlZmVyZW5jZSBjeWNsZSBjYXVzZSB0aGUgZW50aXJlIHJlZmVyZW5jZSBjeWNsZSB0byBiZSB1bmNvbGxlY3RhYmxlLAotICAgaW5jbHVkaW5nIG9iamVjdHMgbm90IG5lY2Vzc2FyaWx5IGluIHRoZSBjeWNsZSBidXQgcmVhY2hhYmxlIG9ubHkgZnJvbSBpdC4KLSAgIFB5dGhvbiBkb2Vzbid0IGNvbGxlY3Qgc3VjaCBjeWNsZXMgYXV0b21hdGljYWxseSBiZWNhdXNlLCBpbiBnZW5lcmFsLCBpdCBpc24ndAotICAgcG9zc2libGUgZm9yIFB5dGhvbiB0byBndWVzcyBhIHNhZmUgb3JkZXIgaW4gd2hpY2ggdG8gcnVuIHRoZSA6bWV0aDpgX19kZWxfX2AKLSAgIG1ldGhvZHMuICBJZiB5b3Uga25vdyBhIHNhZmUgb3JkZXIsIHlvdSBjYW4gZm9yY2UgdGhlIGlzc3VlIGJ5IGV4YW1pbmluZyB0aGUKLSAgICpnYXJiYWdlKiBsaXN0LCBhbmQgZXhwbGljaXRseSBicmVha2luZyBjeWNsZXMgZHVlIHRvIHlvdXIgb2JqZWN0cyB3aXRoaW4gdGhlCi0gICBsaXN0LiAgTm90ZSB0aGF0IHRoZXNlIG9iamVjdHMgYXJlIGtlcHQgYWxpdmUgZXZlbiBzbyBieSB2aXJ0dWUgb2YgYmVpbmcgaW4gdGhlCi0gICAqZ2FyYmFnZSogbGlzdCwgc28gdGhleSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tICpnYXJiYWdlKiB0b28uICBGb3IgZXhhbXBsZSwKLSAgIGFmdGVyIGJyZWFraW5nIGN5Y2xlcywgZG8gYGBkZWwgZ2MuZ2FyYmFnZVs6XWBgIHRvIGVtcHR5IHRoZSBsaXN0LiAgSXQncwotICAgZ2VuZXJhbGx5IGJldHRlciB0byBhdm9pZCB0aGUgaXNzdWUgYnkgbm90IGNyZWF0aW5nIGN5Y2xlcyBjb250YWluaW5nIG9iamVjdHMKLSAgIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIGFuZCAqZ2FyYmFnZSogY2FuIGJlIGV4YW1pbmVkIGluIHRoYXQgY2FzZSB0bwotICAgdmVyaWZ5IHRoYXQgbm8gc3VjaCBjeWNsZXMgYXJlIGJlaW5nIGNyZWF0ZWQuCisgICBBIGxpc3Qgb2Ygb2JqZWN0cyB3aGljaCB0aGUgY29sbGVjdG9yIGZvdW5kIHRvIGJlIHVucmVhY2hhYmxlIGJ1dCBjb3VsZAorICAgbm90IGJlIGZyZWVkICh1bmNvbGxlY3RhYmxlIG9iamVjdHMpLiAgU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCB0aGlzCisgICBsaXN0IHNob3VsZCBiZSBlbXB0eSBtb3N0IG9mIHRoZSB0aW1lLCBleGNlcHQgd2hlbiB1c2luZyBpbnN0YW5jZXMgb2YKKyAgIEMgZXh0ZW5zaW9uIHR5cGVzIHdpdGggYSBub24tTlVMTCBgYHRwX2RlbGBgIHNsb3QuCiAKLSAgIElmIDpjb25zdDpgREVCVUdfU0FWRUFMTGAgaXMgc2V0LCB0aGVuIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIHdpbGwgYmUgYWRkZWQKLSAgIHRvIHRoaXMgbGlzdCByYXRoZXIgdGhhbiBmcmVlZC4KKyAgIElmIDpjb25zdDpgREVCVUdfU0FWRUFMTGAgaXMgc2V0LCB0aGVuIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIHdpbGwgYmUKKyAgIGFkZGVkIHRvIHRoaXMgbGlzdCByYXRoZXIgdGhhbiBmcmVlZC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIElmIHRoaXMgbGlzdCBpcyBub24tZW1wdHkgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24sIGEKQEAgLTE4Myw2ICsxOTEsMTAgQEAKICAgICAgIDpjb25zdDpgREVCVUdfVU5DT0xMRUNUQUJMRWAgaXMgc2V0LCBpbiBhZGRpdGlvbiBhbGwgdW5jb2xsZWN0YWJsZSBvYmplY3RzCiAgICAgICBhcmUgcHJpbnRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEZvbGxvd2luZyA6cGVwOmA0NDJgLCBvYmplY3RzIHdpdGggYSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kIGRvbid0IGVuZAorICAgICAgdXAgaW4gOmF0dHI6YGdjLmdhcmJhZ2VgIGFueW1vcmUuCisKIC4uIGRhdGE6OiBjYWxsYmFja3MKIAogICAgQSBsaXN0IG9mIGNhbGxiYWNrcyB0aGF0IHdpbGwgYmUgaW52b2tlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYmVmb3JlIGFuZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2V0cGFzcy5yc3QgYi9Eb2MvbGlicmFyeS9nZXRwYXNzLnJzdAppbmRleCBmZmUyYjEyLi4yMTE1NjNlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nZXRwYXNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nZXRwYXNzLnJzdApAQCAtMTMsMTAgKzEzLDExIEBACiAuLiBmdW5jdGlvbjo6IGdldHBhc3MocHJvbXB0PSdQYXNzd29yZDogJywgc3RyZWFtPU5vbmUpCiAKICAgIFByb21wdCB0aGUgdXNlciBmb3IgYSBwYXNzd29yZCB3aXRob3V0IGVjaG9pbmcuICBUaGUgdXNlciBpcyBwcm9tcHRlZCB1c2luZwotICAgdGhlIHN0cmluZyAqcHJvbXB0Kiwgd2hpY2ggZGVmYXVsdHMgdG8gYGAnUGFzc3dvcmQ6ICdgYC4gIE9uIFVuaXgsIHRoZSBwcm9tcHQKLSAgIGlzIHdyaXR0ZW4gdG8gdGhlIGZpbGUtbGlrZSBvYmplY3QgKnN0cmVhbSouICAqc3RyZWFtKiBkZWZhdWx0cyB0byB0aGUKLSAgIGNvbnRyb2xsaW5nIHRlcm1pbmFsICg6ZmlsZTpgL2Rldi90dHlgKSBvciBpZiB0aGF0IGlzIHVuYXZhaWxhYmxlIHRvCi0gICBgYHN5cy5zdGRlcnJgYCAodGhpcyBhcmd1bWVudCBpcyBpZ25vcmVkIG9uIFdpbmRvd3MpLgorICAgdGhlIHN0cmluZyAqcHJvbXB0Kiwgd2hpY2ggZGVmYXVsdHMgdG8gYGAnUGFzc3dvcmQ6ICdgYC4gIE9uIFVuaXgsIHRoZQorICAgcHJvbXB0IGlzIHdyaXR0ZW4gdG8gdGhlIGZpbGUtbGlrZSBvYmplY3QgKnN0cmVhbSogdXNpbmcgdGhlIHJlcGxhY2UgZXJyb3IKKyAgIGhhbmRsZXIgaWYgbmVlZGVkLiAgKnN0cmVhbSogZGVmYXVsdHMgdG8gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsCisgICAoOmZpbGU6YC9kZXYvdHR5YCkgb3IgaWYgdGhhdCBpcyB1bmF2YWlsYWJsZSB0byBgYHN5cy5zdGRlcnJgYCAodGhpcworICAgYXJndW1lbnQgaXMgaWdub3JlZCBvbiBXaW5kb3dzKS4KIAogICAgSWYgZWNobyBmcmVlIGlucHV0IGlzIHVuYXZhaWxhYmxlIGdldHBhc3MoKSBmYWxscyBiYWNrIHRvIHByaW50aW5nCiAgICBhIHdhcm5pbmcgbWVzc2FnZSB0byAqc3RyZWFtKiBhbmQgcmVhZGluZyBmcm9tIGBgc3lzLnN0ZGluYGAgYW5kCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nbG9iLnJzdCBiL0RvYy9saWJyYXJ5L2dsb2IucnN0CmluZGV4IGVmZjEzOGIuLmFiY2JmMzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2dsb2IucnN0CisrKyBiL0RvYy9saWJyYXJ5L2dsb2IucnN0CkBAIC0yNSw2ICsyNSwxMCBAQAogRm9yIGV4YW1wbGUsIGBgJ1s/XSdgYCBtYXRjaGVzIHRoZSBjaGFyYWN0ZXIgYGAnPydgYC4KIAogCisuLiBzZWVhbHNvOjoKKyAgIFRoZSA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGhpZ2gtbGV2ZWwgcGF0aCBvYmplY3RzLgorCisKIC4uIGZ1bmN0aW9uOjogZ2xvYihwYXRobmFtZSkKIAogICAgUmV0dXJuIGEgcG9zc2libHktZW1wdHkgbGlzdCBvZiBwYXRoIG5hbWVzIHRoYXQgbWF0Y2ggKnBhdGhuYW1lKiwgd2hpY2ggbXVzdCBiZQpAQCAtNDAsNiArNDQsMTcgQEAKICAgIHdpdGhvdXQgYWN0dWFsbHkgc3RvcmluZyB0aGVtIGFsbCBzaW11bHRhbmVvdXNseS4KIAogCisuLiBmdW5jdGlvbjo6IGVzY2FwZShwYXRobmFtZSkKKworICAgRXNjYXBlIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgKGBgJz8nYGAsIGBgJyonYGAgYW5kIGBgJ1snYGApLgorICAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gbWF0Y2ggYW4gYXJiaXRyYXJ5IGxpdGVyYWwgc3RyaW5nIHRoYXQgbWF5CisgICBoYXZlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBpdC4gIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBkcml2ZS9VTkMKKyAgIHNoYXJlcG9pbnRzIGFyZSBub3QgZXNjYXBlZCwgZS5nLiBvbiBXaW5kb3dzCisgICBgYGVzY2FwZSgnLy8/L2M6L1F1byB2YWRpcz8udHh0JylgYCByZXR1cm5zIGBgJy8vPy9jOi9RdW8gdmFkaXNbP10udHh0J2BgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBkaXJlY3RvcnkgY29udGFpbmluZyBvbmx5IHRoZSBmb2xsb3dpbmcgZmlsZXM6CiA6ZmlsZTpgMS5naWZgLCA6ZmlsZTpgMi50eHRgLCBhbmQgOmZpbGU6YGNhcmQuZ2lmYC4gIDpmdW5jOmBnbG9iYCB3aWxsIHByb2R1Y2UKIHRoZSBmb2xsb3dpbmcgcmVzdWx0cy4gIE5vdGljZSBob3cgYW55IGxlYWRpbmcgY29tcG9uZW50cyBvZiB0aGUgcGF0aCBhcmUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2d6aXAucnN0IGIvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKaW5kZXggMzU0ZGVlZC4uNzg1MzZmYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKQEAgLTM1LDggKzM1LDggQEAKICAgIDpjbGFzczpgYnl0ZXNgIG9iamVjdCksIG9yIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgJ3InYGAsIGBgJ3JiJ2BgLCBgYCdhJ2BgLCBgYCdhYidgYCwKLSAgIGBgJ3cnYGAsIG9yIGBgJ3diJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsIGBgJ2F0J2BgLCBvciBgYCd3dCdgYCBmb3IKLSAgIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCisgICBgYCd3J2BgLCBgYCd3YidgYCwgYGAneCdgYCBvciBgYCd4YidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLAorICAgYGAnYXQnYGAsIGBgJ3d0J2BgLCBvciBgYCd4dCdgYCBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KIAogICAgVGhlICpjb21wcmVzc2xldmVsKiBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5LCBhcyBmb3IgdGhlCiAgICA6Y2xhc3M6YEd6aXBGaWxlYCBjb25zdHJ1Y3Rvci4KQEAgLTUzLDYgKzUzLDkgQEAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yICpmaWxlbmFtZSogYmVpbmcgYSBmaWxlIG9iamVjdCwgc3VwcG9ydCBmb3IgdGV4dCBtb2RlLAogICAgICAgYW5kIHRoZSAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqIGFyZ3VtZW50cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCd4J2BgLCBgYCd4YidgYCBhbmQgYGAneHQnYGAgbW9kZXMuCisKIAogLi4gY2xhc3M6OiBHemlwRmlsZShmaWxlbmFtZT1Ob25lLCBtb2RlPU5vbmUsIGNvbXByZXNzbGV2ZWw9OSwgZmlsZW9iaj1Ob25lLCBtdGltZT1Ob25lKQogCkBAIC03Myw4ICs3Niw5IEBACiAgICBvcmlnaW5hbCBmaWxlbmFtZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGhlYWRlci4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgJ3InYGAsIGBgJ3JiJ2BgLCBgYCdhJ2BgLCBgYCdhYidgYCwgYGAndydgYCwKLSAgIG9yIGBgJ3diJ2BgLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0Ci0gICBpcyB0aGUgbW9kZSBvZiAqZmlsZW9iaiogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCisgICBgYCd3YidgYCwgYGAneCdgYCwgb3IgYGAneGInYGAsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaWxlIHdpbGwgYmUgcmVhZCBvcgorICAgd3JpdHRlbi4gIFRoZSBkZWZhdWx0IGlzIHRoZSBtb2RlIG9mICpmaWxlb2JqKiBpZiBkaXNjZXJuaWJsZTsgb3RoZXJ3aXNlLCB0aGUKKyAgIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIE5vdGUgdGhhdCB0aGUgZmlsZSBpcyBhbHdheXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlLiBUbyBvcGVuIGEgY29tcHJlc3NlZCBmaWxlCiAgICBpbiB0ZXh0IG1vZGUsIHVzZSA6ZnVuYzpgLm9wZW5gIChvciB3cmFwIHlvdXIgOmNsYXNzOmBHemlwRmlsZWAgd2l0aCBhbgpAQCAtMTMwLDYgKzEzNCw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgVGhlIDptZXRoOmBpby5CdWZmZXJlZElPQmFzZS5yZWFkMWAgbWV0aG9kIGlzIG5vdyBpbXBsZW1lbnRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCd4J2BgIGFuZCBgYCd4YidgYCBtb2Rlcy4KKwogCiAuLiBmdW5jdGlvbjo6IGNvbXByZXNzKGRhdGEsIGNvbXByZXNzbGV2ZWw9OSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAppbmRleCBhNjkzZjdlLi5lMGE4NzdhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdApAQCAtMzIsNiArMzIsMTIgQEAKICAgIFNvbWUgYWxnb3JpdGhtcyBoYXZlIGtub3duIGhhc2ggY29sbGlzaW9uIHdlYWtuZXNzZXMsIHJlZmVyIHRvIHRoZSAiU2VlCiAgICBhbHNvIiBzZWN0aW9uIGF0IHRoZSBlbmQuCiAKKworLi4gX2hhc2gtYWxnb3JpdGhtczoKKworSGFzaCBhbGdvcml0aG1zCistLS0tLS0tLS0tLS0tLS0KKwogVGhlcmUgaXMgb25lIGNvbnN0cnVjdG9yIG1ldGhvZCBuYW1lZCBmb3IgZWFjaCB0eXBlIG9mIDpkZm46YGhhc2hgLiAgQWxsIHJldHVybgogYSBoYXNoIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNpbXBsZSBpbnRlcmZhY2UuIEZvciBleGFtcGxlOiB1c2UgOmZ1bmM6YHNoYTFgIHRvCiBjcmVhdGUgYSBTSEExIGhhc2ggb2JqZWN0LiBZb3UgY2FuIG5vdyBmZWVkIHRoaXMgb2JqZWN0IHdpdGggOnRlcm06YGJ5dGVzLWxpa2UKQEAgLTUzLDkgKzU5LDkgQEAKIC4uIGluZGV4Ojogc2luZ2xlOiBPcGVuU1NMOyAodXNlIGluIG1vZHVsZSBoYXNobGliKQogCiBDb25zdHJ1Y3RvcnMgZm9yIGhhc2ggYWxnb3JpdGhtcyB0aGF0IGFyZSBhbHdheXMgcHJlc2VudCBpbiB0aGlzIG1vZHVsZSBhcmUKLTpmdW5jOmBtZDVgLCA6ZnVuYzpgc2hhMWAsIDpmdW5jOmBzaGEyMjRgLCA6ZnVuYzpgc2hhMjU2YCwgOmZ1bmM6YHNoYTM4NGAsIGFuZAotOmZ1bmM6YHNoYTUxMmAuICBBZGRpdGlvbmFsIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGRlcGVuZGluZyB1cG9uIHRoZQotT3BlblNTTCBsaWJyYXJ5IHRoYXQgUHl0aG9uIHVzZXMgb24geW91ciBwbGF0Zm9ybS4KKzpmdW5jOmBtZDVgLCA6ZnVuYzpgc2hhMWAsIDpmdW5jOmBzaGEyMjRgLCA6ZnVuYzpgc2hhMjU2YCwgOmZ1bmM6YHNoYTM4NGAsCithbmQgOmZ1bmM6YHNoYTUxMmAuIEFkZGl0aW9uYWwgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBhdmFpbGFibGUgZGVwZW5kaW5nIHVwb24KK3RoZSBPcGVuU1NMIGxpYnJhcnkgdGhhdCBQeXRob24gdXNlcyBvbiB5b3VyIHBsYXRmb3JtLgogCiBGb3IgZXhhbXBsZSwgdG8gb2J0YWluIHRoZSBkaWdlc3Qgb2YgdGhlIGJ5dGUgc3RyaW5nIGBgYidOb2JvZHkgaW5zcGVjdHMgdGhlCiBzcGFtbWlzaCByZXBldGl0aW9uJ2BgOjoKQEAgLTEyMiw2ICsxMjgsMTggQEAKIAogICAgVGhlIGludGVybmFsIGJsb2NrIHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtIGluIGJ5dGVzLgogCitBIGhhc2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKy4uIGF0dHJpYnV0ZTo6IGhhc2gubmFtZQorCisgICBUaGUgY2Fub25pY2FsIG5hbWUgb2YgdGhpcyBoYXNoLCBhbHdheXMgbG93ZXJjYXNlIGFuZCBhbHdheXMgc3VpdGFibGUgYXMgYQorICAgcGFyYW1ldGVyIHRvIDpmdW5jOmBuZXdgIHRvIGNyZWF0ZSBhbm90aGVyIGhhc2ggb2YgdGhpcyB0eXBlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5hbWUgYXR0cmlidXRlIGhhcyBiZWVuIHByZXNlbnQgaW4gQ1B5dGhvbiBzaW5jZSBpdHMgaW5jZXB0aW9uLCBidXQKKyAgICAgIHVudGlsIFB5dGhvbiAzLjQgd2FzIG5vdCBmb3JtYWxseSBzcGVjaWZpZWQsIHNvIG1heSBub3QgZXhpc3Qgb24gc29tZQorICAgICAgcGxhdGZvcm1zLgorCiBBIGhhc2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKIApAQCAtMTU4LDYgKzE3Niw0NiBAQAogICAgY29tcHV0ZSB0aGUgZGlnZXN0cyBvZiBkYXRhIHNoYXJpbmcgYSBjb21tb24gaW5pdGlhbCBzdWJzdHJpbmcuCiAKIAorS2V5IERlcml2YXRpb24gRnVuY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tleSBkZXJpdmF0aW9uIGFuZCBrZXkgc3RyZXRjaGluZyBhbGdvcml0aG1zIGFyZSBkZXNpZ25lZCBmb3Igc2VjdXJlIHBhc3N3b3JkCitoYXNoaW5nLiBOYWl2ZSBhbGdvcml0aG1zIHN1Y2ggYXMgYGBzaGExKHBhc3N3b3JkKWBgIGFyZSBub3QgcmVzaXN0YW50IGFnYWluc3QKK2JydXRlLWZvcmNlIGF0dGFja3MuIEEgZ29vZCBwYXNzd29yZCBoYXNoaW5nIGZ1bmN0aW9uIG11c3QgYmUgdHVuYWJsZSwgc2xvdywgYW5kCitpbmNsdWRlIGEgYHNhbHQgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NhbHRfJTI4Y3J5cHRvZ3JhcGh5JTI5PmBfLgorCisKKy4uIGZ1bmN0aW9uOjogcGJrZGYyX2htYWMobmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW49Tm9uZSkKKworICAgVGhlIGZ1bmN0aW9uIHByb3ZpZGVzIFBLQ1MjNSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyLiBJdAorICAgdXNlcyBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KKworICAgVGhlIHN0cmluZyAqbmFtZSogaXMgdGhlIGRlc2lyZWQgbmFtZSBvZiB0aGUgaGFzaCBkaWdlc3QgYWxnb3JpdGhtIGZvcgorICAgSE1BQywgZS5nLiAnc2hhMScgb3IgJ3NoYTI1NicuICpwYXNzd29yZCogYW5kICpzYWx0KiBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgIGJ1ZmZlcnMgb2YgYnl0ZXMuIEFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHNob3VsZCBsaW1pdCAqcGFzc3dvcmQqIHRvCisgICBhIHNlbnNpYmxlIHZhbHVlIChlLmcuIDEwMjQpLiAqc2FsdCogc2hvdWxkIGJlIGFib3V0IDE2IG9yIG1vcmUgYnl0ZXMgZnJvbQorICAgYSBwcm9wZXIgc291cmNlLCBlLmcuIDpmdW5jOmBvcy51cmFuZG9tYC4KKworICAgVGhlIG51bWJlciBvZiAqcm91bmRzKiBzaG91bGQgYmUgY2hvc2VuIGJhc2VkIG9uIHRoZSBoYXNoIGFsZ29yaXRobSBhbmQKKyAgIGNvbXB1dGluZyBwb3dlci4gQXMgb2YgMjAxMywgYXQgbGVhc3QgMTAwLDAwMCByb3VuZHMgb2YgU0hBLTI1NiBpcyBzdWdnZXN0ZWQuCisKKyAgICpka2xlbiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgZGVyaXZlZCBrZXkuIElmICpka2xlbiogaXMgYGBOb25lYGAgdGhlbiB0aGUKKyAgIGRpZ2VzdCBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSAqbmFtZSogaXMgdXNlZCwgZS5nLiA2NCBmb3IgU0hBLTUxMi4KKworICAgPj4+IGltcG9ydCBoYXNobGliLCBiaW5hc2NpaQorICAgPj4+IGRrID0gaGFzaGxpYi5wYmtkZjJfaG1hYygnc2hhMjU2JywgYidwYXNzd29yZCcsIGInc2FsdCcsIDEwMDAwMCkKKyAgID4+PiBiaW5hc2NpaS5oZXhsaWZ5KGRrKQorICAgYicwMzk0YTJlZGUzMzJjOWExM2ViODJlOWIyNDYzMTYwNGMzMWRmOTc4YjRlMmYwZmJkMmM1NDk5NDRmOWQ3OWE1JworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gbm90ZTo6CisKKyAgICAgIEEgZmFzdCBpbXBsZW1lbnRhdGlvbiBvZiAqcGJrZGYyX2htYWMqIGlzIGF2YWlsYWJsZSB3aXRoIE9wZW5TU0wuICBUaGUKKyAgICAgIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiB1c2VzIGFuIGlubGluZSB2ZXJzaW9uIG9mIDptb2Q6YGhtYWNgLiBJdCBpcyBhYm91dAorICAgICAgdGhyZWUgdGltZXMgc2xvd2VyIGFuZCBkb2Vzbid0IHJlbGVhc2UgdGhlIEdJTC4KKworCiAuLiBzZWVhbHNvOjoKIAogICAgTW9kdWxlIDptb2Q6YGhtYWNgCkBAIC0xNzMsMyArMjMxLDUgQEAKICAgICAgIFdpa2lwZWRpYSBhcnRpY2xlIHdpdGggaW5mb3JtYXRpb24gb24gd2hpY2ggYWxnb3JpdGhtcyBoYXZlIGtub3duIGlzc3VlcyBhbmQKICAgICAgIHdoYXQgdGhhdCBtZWFucyByZWdhcmRpbmcgdGhlaXIgdXNlLgogCisgICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyODk4LnR4dAorICAgICAgUEtDUyAjNTogUGFzc3dvcmQtQmFzZWQgQ3J5cHRvZ3JhcGh5IFNwZWNpZmljYXRpb24gVmVyc2lvbiAyLjAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2htYWMucnN0IGIvRG9jL2xpYnJhcnkvaG1hYy5yc3QKaW5kZXggOTU3NTY5My4uYjJlMzc3ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaG1hYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaG1hYy5yc3QKQEAgLTE2LDIwICsxNiwzMiBAQAogCiAuLiBmdW5jdGlvbjo6IG5ldyhrZXksIG1zZz1Ob25lLCBkaWdlc3Rtb2Q9Tm9uZSkKIAotICAgUmV0dXJuIGEgbmV3IGhtYWMgb2JqZWN0LiAgKmtleSogaXMgYSBieXRlcyBvYmplY3QgZ2l2aW5nIHRoZSBzZWNyZXQga2V5LiAgSWYKLSAgICptc2cqIGlzIHByZXNlbnQsIHRoZSBtZXRob2QgY2FsbCBgYHVwZGF0ZShtc2cpYGAgaXMgbWFkZS4gICpkaWdlc3Rtb2QqIGlzCi0gICB0aGUgZGlnZXN0IGNvbnN0cnVjdG9yIG9yIG1vZHVsZSBmb3IgdGhlIEhNQUMgb2JqZWN0IHRvIHVzZS4gSXQgZGVmYXVsdHMgdG8KLSAgIHRoZSA6ZGF0YTpgaGFzaGxpYi5tZDVgIGNvbnN0cnVjdG9yLgorICAgUmV0dXJuIGEgbmV3IGhtYWMgb2JqZWN0LiAgKmtleSogaXMgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0IGdpdmluZyB0aGUKKyAgIHNlY3JldCBrZXkuICBJZiAqbXNnKiBpcyBwcmVzZW50LCB0aGUgbWV0aG9kIGNhbGwgYGB1cGRhdGUobXNnKWBgIGlzIG1hZGUuCisgICAqZGlnZXN0bW9kKiBpcyB0aGUgZGlnZXN0IG5hbWUsIGRpZ2VzdCBjb25zdHJ1Y3RvciBvciBtb2R1bGUgZm9yIHRoZSBITUFDCisgICBvYmplY3QgdG8gdXNlLiBJdCBzdXBwb3J0cyBhbnkgbmFtZSBzdWl0YWJsZSB0byA6ZnVuYzpgaGFzaGxpYi5uZXdgIGFuZAorICAgZGVmYXVsdHMgdG8gdGhlIDpkYXRhOmBoYXNobGliLm1kNWAgY29uc3RydWN0b3IuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBQYXJhbWV0ZXIgKmtleSogY2FuIGJlIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdC4KKyAgICAgIFBhcmFtZXRlciAqbXNnKiBjYW4gYmUgb2YgYW55IHR5cGUgc3VwcG9ydGVkIGJ5IDptb2Q6YGhhc2hsaWJgLgorICAgICAgUGFyYW1ldGVyICpkaWdlc3Rtb2QqIGNhbiBiZSB0aGUgbmFtZSBvZiBhIGhhc2ggYWxnb3JpdGhtLgorCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBNRDUgYXMgaW1wbGljaXQgZGVmYXVsdCBkaWdlc3QgZm9yICpkaWdlc3Rtb2QqIGlzIGRlcHJlY2F0ZWQuCiAKIAogQW4gSE1BQyBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogLi4gbWV0aG9kOjogSE1BQy51cGRhdGUobXNnKQogCi0gICBVcGRhdGUgdGhlIGhtYWMgb2JqZWN0IHdpdGggdGhlIGJ5dGVzIG9iamVjdCAqbXNnKi4gIFJlcGVhdGVkIGNhbGxzIGFyZQotICAgZXF1aXZhbGVudCB0byBhIHNpbmdsZSBjYWxsIHdpdGggdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHM6CisgICBVcGRhdGUgdGhlIGhtYWMgb2JqZWN0IHdpdGggKm1zZyouICBSZXBlYXRlZCBjYWxscyBhcmUgZXF1aXZhbGVudCB0byBhCisgICBzaW5nbGUgY2FsbCB3aXRoIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCB0aGUgYXJndW1lbnRzOgogICAgYGBtLnVwZGF0ZShhKTsgbS51cGRhdGUoYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgbS51cGRhdGUoYSArIGIpYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBQYXJhbWV0ZXIgKm1zZyogY2FuIGJlIG9mIGFueSB0eXBlIHN1cHBvcnRlZCBieSA6bW9kOmBoYXNobGliYC4KKwogCiAuLiBtZXRob2Q6OiBITUFDLmRpZ2VzdCgpCiAKQEAgLTY2LDYgKzc4LDI1IEBACiAgICBjb21wdXRlIHRoZSBkaWdlc3RzIG9mIHN0cmluZ3MgdGhhdCBzaGFyZSBhIGNvbW1vbiBpbml0aWFsIHN1YnN0cmluZy4KIAogCitBIGhhc2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKy4uIGF0dHJpYnV0ZTo6IEhNQUMuZGlnZXN0X3NpemUKKworICAgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBITUFDIGRpZ2VzdCBpbiBieXRlcy4KKworLi4gYXR0cmlidXRlOjogSE1BQy5ibG9ja19zaXplCisKKyAgIFRoZSBpbnRlcm5hbCBibG9jayBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSBpbiBieXRlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGF0dHJpYnV0ZTo6IEhNQUMubmFtZQorCisgICBUaGUgY2Fub25pY2FsIG5hbWUgb2YgdGhpcyBITUFDLCBhbHdheXMgbG93ZXJjYXNlLCBlLmcuIGBgaG1hYy1tZDVgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhpcyBtb2R1bGUgYWxzbyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbjoKIAogLi4gZnVuY3Rpb246OiBjb21wYXJlX2RpZ2VzdChhLCBiKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdAppbmRleCAwYWFiYmFkLi4wOWIwYWJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdApAQCAtMjAsNiArMjAsNyBAQAogICAgTm90ZSB0aGF0IHRoZSB0cmFpbGluZyBzZW1pY29sb24gaXMgaW5jbHVkZWQgaW4gdGhlIG5hbWUgKGUuZy4gYGAnZ3Q7J2BgKSwKICAgIGhvd2V2ZXIgc29tZSBvZiB0aGUgbmFtZXMgYXJlIGFjY2VwdGVkIGJ5IHRoZSBzdGFuZGFyZCBldmVuIHdpdGhvdXQgdGhlCiAgICBzZW1pY29sb246IGluIHRoaXMgY2FzZSB0aGUgbmFtZSBpcyBwcmVzZW50IHdpdGggYW5kIHdpdGhvdXQgdGhlIGBgJzsnYGAuCisgICBTZWUgYWxzbyA6ZnVuYzpgaHRtbC51bmVzY2FwZWAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKaW5kZXggZTQxNTRlZi4uNDRiN2Q2ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdApAQCAtMTYsMTQgKzE2LDIxIEBACiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MgOmNsYXNzOmBIVE1MUGFyc2VyYCB3aGljaCBzZXJ2ZXMgYXMgdGhlIGJhc2lzIGZvcgogcGFyc2luZyB0ZXh0IGZpbGVzIGZvcm1hdHRlZCBpbiBIVE1MIChIeXBlclRleHQgTWFyay11cCBMYW5ndWFnZSkgYW5kIFhIVE1MLgogCi0uLiBjbGFzczo6IEhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorLi4gY2xhc3M6OiBIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSwgKiwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAotICAgQ3JlYXRlIGEgcGFyc2VyIGluc3RhbmNlLiAgSWYgKnN0cmljdCogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIKLSAgIHdpbGwgYWNjZXB0IGFuZCBwYXJzZSBpbnZhbGlkIG1hcmt1cC4gIElmICpzdHJpY3QqIGlzIGBgVHJ1ZWBgIHRoZSBwYXJzZXIKLSAgIHdpbGwgcmFpc2UgYW4gOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb24gaW5zdGVhZCBbI11fIHdoZW4KLSAgIGl0J3Mgbm90IGFibGUgdG8gcGFyc2UgdGhlIG1hcmt1cC4KLSAgIFRoZSB1c2Ugb2YgYGBzdHJpY3Q9VHJ1ZWBgIGlzIGRpc2NvdXJhZ2VkIGFuZCB0aGUgKnN0cmljdCogYXJndW1lbnQgaXMKLSAgIGRlcHJlY2F0ZWQuCisgICBDcmVhdGUgYSBwYXJzZXIgaW5zdGFuY2UuCisKKyAgIElmICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBgYFRydWVgYCAoZGVmYXVsdDogYGBGYWxzZWBgKSwgYWxsIGNoYXJhY3RlcgorICAgcmVmZXJlbmNlcyAoZXhjZXB0IHRoZSBvbmVzIGluIGBgc2NyaXB0YGAvYGBzdHlsZWBgIGVsZW1lbnRzKSBhcmUKKyAgIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KKyAgIFRoZSB1c2Ugb2YgYGBjb252ZXJ0X2NoYXJyZWZzPVRydWVgYCBpcyBlbmNvdXJhZ2VkIGFuZCB3aWxsIGJlY29tZQorICAgdGhlIGRlZmF1bHQgaW4gUHl0aG9uIDMuNS4KKworICAgSWYgKnN0cmljdCogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIgd2lsbCBhY2NlcHQgYW5kIHBhcnNlCisgICBpbnZhbGlkIG1hcmt1cC4gIElmICpzdHJpY3QqIGlzIGBgVHJ1ZWBgIHRoZSBwYXJzZXIgd2lsbCByYWlzZSBhbgorICAgOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb24gaW5zdGVhZCBbI11fIHdoZW4gaXQncyBub3QKKyAgIGFibGUgdG8gcGFyc2UgdGhlIG1hcmt1cC4gIFRoZSB1c2Ugb2YgYGBzdHJpY3Q9VHJ1ZWBgIGlzIGRpc2NvdXJhZ2VkIGFuZAorICAgdGhlICpzdHJpY3QqIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuCiAKICAgIEFuIDpjbGFzczpgLkhUTUxQYXJzZXJgIGluc3RhbmNlIGlzIGZlZCBIVE1MIGRhdGEgYW5kIGNhbGxzIGhhbmRsZXIgbWV0aG9kcwogICAgd2hlbiBzdGFydCB0YWdzLCBlbmQgdGFncywgdGV4dCwgY29tbWVudHMsIGFuZCBvdGhlciBtYXJrdXAgZWxlbWVudHMgYXJlCkBAIC0zNCwxMiArNDEsMTUgQEAKICAgIGhhbmRsZXIgZm9yIGVsZW1lbnRzIHdoaWNoIGFyZSBjbG9zZWQgaW1wbGljaXRseSBieSBjbG9zaW5nIGFuIG91dGVyIGVsZW1lbnQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICAgICAqc3RyaWN0KiBrZXl3b3JkIGFkZGVkLgorICAgICAgKnN0cmljdCogYXJndW1lbnQgYWRkZWQuCiAKICAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjUKICAgICAgIFRoZSAqc3RyaWN0KiBhcmd1bWVudCBhbmQgdGhlIHN0cmljdCBtb2RlIGhhdmUgYmVlbiBkZXByZWNhdGVkLgogICAgICAgVGhlIHBhcnNlciBpcyBub3cgYWJsZSB0byBhY2NlcHQgYW5kIHBhcnNlIGludmFsaWQgbWFya3VwIHRvby4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICpjb252ZXJ0X2NoYXJyZWZzKiBrZXl3b3JkIGFyZ3VtZW50IGFkZGVkLgorCiBBbiBleGNlcHRpb24gaXMgZGVmaW5lZCBhcyB3ZWxsOgogCiAKQEAgLTc0LDcgKzg0LDcgQEAKICAgICAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJFbmNvdW50ZXJlZCBzb21lIGRhdGEgIDoiLCBkYXRhKQogCi0gICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKCkKICAgIHBhcnNlci5mZWVkKCc8aHRtbD48aGVhZD48dGl0bGU+VGVzdDwvdGl0bGU+PC9oZWFkPicKICAgICAgICAgICAgICAgICc8Ym9keT48aDE+UGFyc2UgbWUhPC9oMT48L2JvZHk+PC9odG1sPicpCiAKQEAgLTE4MSw3ICsxOTEsOCBAQAogCiAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcHJvY2VzcyBhIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2Ugb2YgdGhlIGZvcm0KICAgIGBgJm5hbWU7YGAgKGUuZy4gYGAmZ3Q7YGApLCB3aGVyZSAqbmFtZSogaXMgYSBnZW5lcmFsIGVudGl0eSByZWZlcmVuY2UKLSAgIChlLmcuIGBgJ2d0J2BgKS4KKyAgIChlLmcuIGBgJ2d0J2BgKS4gIFRoaXMgbWV0aG9kIGlzIG5ldmVyIGNhbGxlZCBpZiAqY29udmVydF9jaGFycmVmcyogaXMKKyAgIGBgVHJ1ZWBgLgogCiAKIC4uIG1ldGhvZDo6IEhUTUxQYXJzZXIuaGFuZGxlX2NoYXJyZWYobmFtZSkKQEAgLTE4OSw3ICsyMDAsOCBAQAogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHByb2Nlc3MgZGVjaW1hbCBhbmQgaGV4YWRlY2ltYWwgbnVtZXJpYyBjaGFyYWN0ZXIKICAgIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0gYGAmI05OTjtgYCBhbmQgYGAmI3hOTk47YGAuICBGb3IgZXhhbXBsZSwgdGhlIGRlY2ltYWwKICAgIGVxdWl2YWxlbnQgZm9yIGBgJmd0O2BgIGlzIGBgJiM2MjtgYCwgd2hlcmVhcyB0aGUgaGV4YWRlY2ltYWwgaXMgYGAmI3gzRTtgYDsKLSAgIGluIHRoaXMgY2FzZSB0aGUgbWV0aG9kIHdpbGwgcmVjZWl2ZSBgYCc2MidgYCBvciBgYCd4M0UnYGAuCisgICBpbiB0aGlzIGNhc2UgdGhlIG1ldGhvZCB3aWxsIHJlY2VpdmUgYGAnNjInYGAgb3IgYGAneDNFJ2BgLiAgVGhpcyBtZXRob2QKKyAgIGlzIG5ldmVyIGNhbGxlZCBpZiAqY29udmVydF9jaGFycmVmcyogaXMgYGBUcnVlYGAuCiAKIAogLi4gbWV0aG9kOjogSFRNTFBhcnNlci5oYW5kbGVfY29tbWVudChkYXRhKQpAQCAtMjcyLDcgKzI4NCw3IEBACiAgICAgICAgZGVmIGhhbmRsZV9kZWNsKHNlbGYsIGRhdGEpOgogICAgICAgICAgICBwcmludCgiRGVjbCAgICAgOiIsIGRhdGEpCiAKLSAgIHBhcnNlciA9IE15SFRNTFBhcnNlcihzdHJpY3Q9RmFsc2UpCisgICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoKQogCiBQYXJzaW5nIGEgZG9jdHlwZTo6CiAKQEAgLTMyNCw3ICszMzYsOCBAQAogICAgTnVtIGVudCAgOiA+CiAKIEZlZWRpbmcgaW5jb21wbGV0ZSBjaHVua3MgdG8gOm1ldGg6YH5IVE1MUGFyc2VyLmZlZWRgIHdvcmtzLCBidXQKLTptZXRoOmB+SFRNTFBhcnNlci5oYW5kbGVfZGF0YWAgbWlnaHQgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlOjoKKzptZXRoOmB+SFRNTFBhcnNlci5oYW5kbGVfZGF0YWAgbWlnaHQgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisodW5sZXNzICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBzZXQgdG8gYGBUcnVlYGApOjoKIAogICAgPj4+IGZvciBjaHVuayBpbiBbJzxzcCcsICdhbj5idWZmJywgJ2VyZWQgJywgJ3RleHQ8L3MnLCAncGFuPiddOgogICAgLi4uICAgICBwYXJzZXIuZmVlZChjaHVuaykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0bWwucnN0IGIvRG9jL2xpYnJhcnkvaHRtbC5yc3QKaW5kZXggMTEwN2NhOS4uZDA3MDZiYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHRtbC5yc3QKQEAgLTIwLDYgKzIwLDE3IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisKKy4uIGZ1bmN0aW9uOjogdW5lc2NhcGUocykKKworICAgQ29udmVydCBhbGwgbmFtZWQgYW5kIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKGUuZy4gYGAmZ3Q7YGAsCisgICBgYCYjNjI7YGAsIGBgJngzZTtgYCkgaW4gdGhlIHN0cmluZyAqcyogdG8gdGhlIGNvcnJlc3BvbmRpbmcgdW5pY29kZQorICAgY2hhcmFjdGVycy4gIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgcnVsZXMgZGVmaW5lZCBieSB0aGUgSFRNTCA1IHN0YW5kYXJkCisgICBmb3IgYm90aCB2YWxpZCBhbmQgaW52YWxpZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcywgYW5kIHRoZSA6ZGF0YTpgbGlzdCBvZgorICAgSFRNTCA1IG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIDxodG1sLmVudGl0aWVzLmh0bWw1PmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAtLS0tLS0tLS0tLS0tLQogCiBTdWJtb2R1bGVzIGluIHRoZSBgYGh0bWxgYCBwYWNrYWdlIGFyZToKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAppbmRleCBiYjMwZjI0Li45ZjZiY2QxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CkBAIC0yNyw3ICsyNyw3IEBACiBUaGUgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogCi0uLiBjbGFzczo6IEhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZVssIHN0cmljdF1bLCB0aW1lb3V0XSwgXAorLi4gY2xhc3M6OiBIVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmVbLCB0aW1lb3V0XSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKQogCiAgICBBbiA6Y2xhc3M6YEhUVFBDb25uZWN0aW9uYCBpbnN0YW5jZSByZXByZXNlbnRzIG9uZSB0cmFuc2FjdGlvbiB3aXRoIGFuIEhUVFAKQEAgLTQzLDQ0ICs0Myw0OCBAQAogICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY2FsbHMgYWxsIGNyZWF0ZSBpbnN0YW5jZXMgdGhhdCBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIKICAgIGF0IHRoZSBzYW1lIGhvc3QgYW5kIHBvcnQ6OgogCi0gICAgICA+Pj4gaDEgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LmN3aS5ubCcpCi0gICAgICA+Pj4gaDIgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LmN3aS5ubDo4MCcpCi0gICAgICA+Pj4gaDMgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LmN3aS5ubCcsIDgwKQotICAgICAgPj4+IGgzID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5jd2kubmwnLCA4MCwgdGltZW91dD0xMCkKKyAgICAgID4+PiBoMSA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKCd3d3cucHl0aG9uLm9yZycpCisgICAgICA+Pj4gaDIgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LnB5dGhvbi5vcmc6ODAnKQorICAgICAgPj4+IGgzID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5weXRob24ub3JnJywgODApCisgICAgICA+Pj4gaDQgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LnB5dGhvbi5vcmcnLCA4MCwgdGltZW91dD0xMCkKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpzb3VyY2VfYWRkcmVzcyogd2FzIGFkZGVkLgogCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjIgMy40Ci0gICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQuICBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIKLSAgICAgIGFyZSBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICAqc3RyaWN0KiBwYXJhbWV0ZXIgd2FzIHJlbW92ZWQuIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIiBhcmUKKyAgICAgIG5vdCBsb25nZXIgc3VwcG9ydGVkLgogCiAKIC4uIGNsYXNzOjogSFRUUFNDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZSwga2V5X2ZpbGU9Tm9uZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9maWxlPU5vbmVbLCBzdHJpY3RdWywgdGltZW91dF0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZT1Ob25lWywgdGltZW91dF0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Tm9uZSkKIAogICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YEhUVFBDb25uZWN0aW9uYCB0aGF0IHVzZXMgU1NMIGZvciBjb21tdW5pY2F0aW9uIHdpdGgKICAgIHNlY3VyZSBzZXJ2ZXJzLiAgRGVmYXVsdCBwb3J0IGlzIGBgNDQzYGAuICBJZiAqY29udGV4dCogaXMgc3BlY2lmaWVkLCBpdAogICAgbXVzdCBiZSBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIHZhcmlvdXMgU1NMCi0gICBvcHRpb25zLiAgSWYgKmNvbnRleHQqIGlzIHNwZWNpZmllZCBhbmQgaGFzIGEgOmF0dHI6YH5zc2wuU1NMQ29udGV4dC52ZXJpZnlfbW9kZWAKLSAgIG9mIGVpdGhlciA6ZGF0YTpgfnNzbC5DRVJUX09QVElPTkFMYCBvciA6ZGF0YTpgfnNzbC5DRVJUX1JFUVVJUkVEYCwgdGhlbgotICAgYnkgZGVmYXVsdCAqaG9zdCogaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBob3N0IG5hbWUocykgYWxsb3dlZCBieSB0aGUKLSAgIHNlcnZlcidzIGNlcnRpZmljYXRlLiAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoYXQgYmVoYXZpb3VyLCB5b3UgY2FuCi0gICBleHBsaWNpdGx5IHNldCAqY2hlY2tfaG9zdG5hbWUqIHRvIEZhbHNlLgorICAgb3B0aW9ucy4KIAogICAgKmtleV9maWxlKiBhbmQgKmNlcnRfZmlsZSogYXJlIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UKLSAgIDptZXRoOmBzc2wuU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW5gIGluc3RlYWQuCisgICA6bWV0aDpgc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluYCBpbnN0ZWFkLCBvciBsZXQKKyAgIDpmdW5jOmBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dGAgc2VsZWN0IHRoZSBzeXN0ZW0ncyB0cnVzdGVkIENBCisgICBjZXJ0aWZpY2F0ZXMgZm9yIHlvdS4KIAotICAgSWYgeW91IGFjY2VzcyBhcmJpdHJhcnkgaG9zdHMgb24gdGhlIEludGVybmV0LCBpdCBpcyByZWNvbW1lbmRlZCB0bwotICAgcmVxdWlyZSBjZXJ0aWZpY2F0ZSBjaGVja2luZyBhbmQgZmVlZCB0aGUgKmNvbnRleHQqIHdpdGggYSBzZXQgb2YKLSAgIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzOjoKKyAgIFRoZSByZWNvbW1lbmRlZCB3YXkgdG8gY29ubmVjdCB0byBIVFRQUyBob3N0cyBvbiB0aGUgSW50ZXJuZXQgaXMgYXMKKyAgIGZvbGxvd3M6OgogCi0gICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQotICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECi0gICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucygnL2V0Yy9wa2kvdGxzL2NlcnRzL2NhLWJ1bmRsZS5jcnQnKQotICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ3N2bi5weXRob24ub3JnJywgNDQzLCBjb250ZXh0PWNvbnRleHQpCisgICAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKQorICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ3d3dy5weXRob24ub3JnJywgNDQzLCBjb250ZXh0PWNvbnRleHQpCisKKyAgIFBsZWFzZSByZWFkIDpyZWY6YHNzbC1zZWN1cml0eWAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYmVzdCBwcmFjdGljZXMuCisKKyAgIC4uIG5vdGU6OgorICAgICAgSWYgKmNvbnRleHQqIGlzIHNwZWNpZmllZCBhbmQgaGFzIGEgOmF0dHI6YH5zc2wuU1NMQ29udGV4dC52ZXJpZnlfbW9kZWAKKyAgICAgIG9mIGVpdGhlciA6ZGF0YTpgfnNzbC5DRVJUX09QVElPTkFMYCBvciA6ZGF0YTpgfnNzbC5DRVJUX1JFUVVJUkVEYCwgdGhlbgorICAgICAgYnkgZGVmYXVsdCAqaG9zdCogaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBob3N0IG5hbWUocykgYWxsb3dlZCBieSB0aGUKKyAgICAgIHNlcnZlcidzIGNlcnRpZmljYXRlLiAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoYXQgYmVoYXZpb3VyLCB5b3UgY2FuCisgICAgICBleHBsaWNpdGx5IHNldCAqY2hlY2tfaG9zdG5hbWUqIHRvIEZhbHNlLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgKnNvdXJjZV9hZGRyZXNzKiwgKmNvbnRleHQqIGFuZCAqY2hlY2tfaG9zdG5hbWUqIHdlcmUgYWRkZWQuCkBAIC04OSwxOSArOTMsMTkgQEAKICAgICAgIFRoaXMgY2xhc3Mgbm93IHN1cHBvcnRzIEhUVFBTIHZpcnR1YWwgaG9zdHMgaWYgcG9zc2libGUgKHRoYXQgaXMsCiAgICAgICBpZiA6ZGF0YTpgc3NsLkhBU19TTklgIGlzIHRydWUpLgogCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjIgMy40Ci0gICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQuICBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIKLSAgICAgIGFyZSBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciB3YXMgcmVtb3ZlZC4gSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiIGFyZQorICAgICAgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KIAogCi0uLiBjbGFzczo6IEhUVFBSZXNwb25zZShzb2NrLCBkZWJ1Z2xldmVsPTBbLCBzdHJpY3RdLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpCisuLiBjbGFzczo6IEhUVFBSZXNwb25zZShzb2NrLCBkZWJ1Z2xldmVsPTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSkKIAogICAgQ2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCB1cG9uIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4gIE5vdAogICAgaW5zdGFudGlhdGVkIGRpcmVjdGx5IGJ5IHVzZXIuCiAKLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMiAzLjQKLSAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIgotICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIHdhcyByZW1vdmVkLiBIVFRQIDAuOSBzdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBubyBsb25nZXIgc3VwcG9ydGVkLgogCiAKIFRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGFzIGFwcHJvcHJpYXRlOgpAQCAtNjU2LDcgKzY2MCw3IEBACiAKICAgICA+Pj4gIyBUaGlzIGNyZWF0ZXMgYW4gSFRUUCBtZXNzYWdlCiAgICAgPj4+ICMgd2l0aCB0aGUgY29udGVudCBvZiBCT0RZIGFzIHRoZSBlbmNsb3NlZCByZXByZXNlbnRhdGlvbgotICAgID4+PiAjIGZvciB0aGUgcmVzb3VyY2UgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2Zvb2JhcgorICAgID4+PiAjIGZvciB0aGUgcmVzb3VyY2UgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbGUKICAgICAuLi4KICAgICA+Pj4gaW1wb3J0IGh0dHAuY2xpZW50CiAgICAgPj4+IEJPRFkgPSAiKioqZmlsZWNvbnRlbnRzKioqIgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CmluZGV4IDVhZWI3MTkuLjBkOGU3ZmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKQEAgLTgxLDcgKzgxLDEwIEBACiAKICAgICAgIEhvbGRzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBzcGVjaWZpZWQgYnkgdGhlIDphdHRyOmBNZXNzYWdlQ2xhc3NgIGNsYXNzCiAgICAgICB2YXJpYWJsZS4gVGhpcyBpbnN0YW5jZSBwYXJzZXMgYW5kIG1hbmFnZXMgdGhlIGhlYWRlcnMgaW4gdGhlIEhUVFAKLSAgICAgIHJlcXVlc3QuCisgICAgICByZXF1ZXN0LiBUaGUgOmZ1bmM6YH5odHRwLmNsaWVudC5wYXJzZV9oZWFkZXJzYCBmdW5jdGlvbiBmcm9tCisgICAgICA6bW9kOmBodHRwLmNsaWVudGAgaXMgdXNlZCB0byBwYXJzZSB0aGUgaGVhZGVycyBhbmQgaXQgcmVxdWlyZXMgdGhhdCB0aGUKKyAgICAgIEhUVFAgcmVxdWVzdCBwcm92aWRlIGEgdmFsaWQgOnJmYzpgMjgyMmAgc3R5bGUgaGVhZGVyLgorCiAKICAgIC4uIGF0dHJpYnV0ZTo6IHJmaWxlCiAKQEAgLTExNiw3ICsxMTksNyBAQAogICAgICAgSFRUUCBlcnJvciBjb2RlIHZhbHVlLiAqbWVzc2FnZSogc2hvdWxkIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYQogICAgICAgKGRldGFpbGVkKSBlcnJvciBtZXNzYWdlIG9mIHdoYXQgb2NjdXJyZWQsIGFuZCAqZXhwbGFpbiogc2hvdWxkIGJlIGFuCiAgICAgICBleHBsYW5hdGlvbiBvZiB0aGUgZXJyb3IgY29kZSBudW1iZXIuIERlZmF1bHQgKm1lc3NhZ2UqIGFuZCAqZXhwbGFpbioKLSAgICAgIHZhbHVlcyBjYW4gZm91bmQgaW4gdGhlICpyZXNwb25zZXMqIGNsYXNzIHZhcmlhYmxlLgorICAgICAgdmFsdWVzIGNhbiBmb3VuZCBpbiB0aGUgOmF0dHI6YHJlc3BvbnNlc2AgY2xhc3MgdmFyaWFibGUuCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGVycm9yX2NvbnRlbnRfdHlwZQogCkBAIC0xNzAsMTIgKzE3MywyMiBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotICAgLi4gbWV0aG9kOjogc2VuZF9lcnJvcihjb2RlLCBtZXNzYWdlPU5vbmUpCisgICAuLiBtZXRob2Q6OiBzZW5kX2Vycm9yKGNvZGUsIG1lc3NhZ2U9Tm9uZSwgZXhwbGFpbj1Ob25lKQogCiAgICAgICBTZW5kcyBhbmQgbG9ncyBhIGNvbXBsZXRlIGVycm9yIHJlcGx5IHRvIHRoZSBjbGllbnQuIFRoZSBudW1lcmljICpjb2RlKgotICAgICAgc3BlY2lmaWVzIHRoZSBIVFRQIGVycm9yIGNvZGUsIHdpdGggKm1lc3NhZ2UqIGFzIG9wdGlvbmFsLCBtb3JlIHNwZWNpZmljIHRleHQuIEEKLSAgICAgIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzIGlzIHNlbnQsIGZvbGxvd2VkIGJ5IHRleHQgY29tcG9zZWQgdXNpbmcgdGhlCi0gICAgICA6YXR0cjpgZXJyb3JfbWVzc2FnZV9mb3JtYXRgIGNsYXNzIHZhcmlhYmxlLgorICAgICAgc3BlY2lmaWVzIHRoZSBIVFRQIGVycm9yIGNvZGUsIHdpdGggKm1lc3NhZ2UqIGFzIGFuIG9wdGlvbmFsLCBzaG9ydCwgaHVtYW4KKyAgICAgIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvci4gIFRoZSAqZXhwbGFpbiogYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8KKyAgICAgIHByb3ZpZGUgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3I7IGl0IHdpbGwgYmUgZm9ybWF0dGVkCisgICAgICB1c2luZyB0aGUgOmF0dHI6YGVycm9yX21lc3NhZ2VfZm9ybWF0YCBjbGFzcyB2YXJpYWJsZSBhbmQgZW1pdHRlZCwgYWZ0ZXIKKyAgICAgIGEgY29tcGxldGUgc2V0IG9mIGhlYWRlcnMsIGFzIHRoZSByZXNwb25zZSBib2R5LiAgVGhlIDphdHRyOmByZXNwb25zZXNgCisgICAgICBjbGFzcyB2YXJpYWJsZSBob2xkcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yICptZXNzYWdlKiBhbmQgKmV4cGxhaW4qIHRoYXQKKyAgICAgIHdpbGwgYmUgdXNlZCBpZiBubyB2YWx1ZSBpcyBwcm92aWRlZDsgZm9yIHVua25vd24gY29kZXMgdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgIGZvciBib3RoIGlzIHRoZSBzdHJpbmcgYGA/Pz9gYC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFRoZSBlcnJvciByZXNwb25zZSBpbmNsdWRlcyBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlci4KKyAgICAgICAgIEFkZGVkIHRoZSAqZXhwbGFpbiogYXJndW1lbnQuCisKIAogICAgLi4gbWV0aG9kOjogc2VuZF9yZXNwb25zZShjb2RlLCBtZXNzYWdlPU5vbmUpCiAKQEAgLTM0MSw3ICszNTQsNyBAQAogCiBUaGUgOmNsYXNzOmBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGNsYXNzIGNhbiBiZSB1c2VkIGluIHRoZSBmb2xsb3dpbmcKIG1hbm5lciBpbiBvcmRlciB0byBjcmVhdGUgYSB2ZXJ5IGJhc2ljIHdlYnNlcnZlciBzZXJ2aW5nIGZpbGVzIHJlbGF0aXZlIHRvCi10aGUgY3VycmVudCBkaXJlY3RvcnkuIDo6Cit0aGUgY3VycmVudCBkaXJlY3Rvcnk6OgogCiAgICBpbXBvcnQgaHR0cC5zZXJ2ZXIKICAgIGltcG9ydCBzb2NrZXRzZXJ2ZXIKQEAgLTM1NSwxMiArMzY4LDIzIEBACiAgICBwcmludCgic2VydmluZyBhdCBwb3J0IiwgUE9SVCkKICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQogCisuLiBfaHR0cC1zZXJ2ZXItY2xpOgorCiA6bW9kOmBodHRwLnNlcnZlcmAgY2FuIGFsc28gYmUgaW52b2tlZCBkaXJlY3RseSB1c2luZyB0aGUgOm9wdGlvbjpgLW1gCiBzd2l0Y2ggb2YgdGhlIGludGVycHJldGVyIHdpdGggYSBgYHBvcnQgbnVtYmVyYGAgYXJndW1lbnQuICBTaW1pbGFyIHRvCi10aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhpcyBzZXJ2ZXMgZmlsZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiA6OgordGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoaXMgc2VydmVzIGZpbGVzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeTo6CiAKICAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwMDAKIAorQnkgZGVmYXVsdCwgc2VydmVyIGJpbmRzIGl0c2VsZiB0byBhbGwgaW50ZXJmYWNlcy4gIFRoZSBvcHRpb24gYGAtYi8tLWJpbmRgYAorc3BlY2lmaWVzIGEgc3BlY2lmaWMgYWRkcmVzcyB0byB3aGljaCBpdCBzaG91bGQgYmluZC4gIEZvciBleGFtcGxlLCB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIGNhdXNlcyB0aGUgc2VydmVyIHRvIGJpbmQgdG8gbG9jYWxob3N0IG9ubHk6OgorCisgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwIC0tYmluZCAxMjcuMC4wLjEKKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgYGAtLWJpbmRgYCBhcmd1bWVudCB3YXMgaW50cm9kdWNlZC4KKwogCiAuLiBjbGFzczo6IENHSUhUVFBSZXF1ZXN0SGFuZGxlcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQogCkBAIC00MDMsNyArNDI3LDcgQEAKICAgIHJlYXNvbnMuICBQcm9ibGVtcyB3aXRoIHRoZSBDR0kgc2NyaXB0IHdpbGwgYmUgdHJhbnNsYXRlZCB0byBlcnJvciA0MDMuCiAKIDpjbGFzczpgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyYCBjYW4gYmUgZW5hYmxlZCBpbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHBhc3NpbmcKLXRoZSBgYC0tY2dpYGAgb3B0aW9uLjo6Cit0aGUgYGAtLWNnaWBgIG9wdGlvbjo6CiAKICAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIC0tY2dpIDgwMDAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaWRsZS5yc3QgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdAppbmRleCAzNmQ3OGIwLi4yNzE4Y2VmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pZGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdApAQCAtMTYsNzAgKzE2LDgyIEBACiAKICogY29kZWQgaW4gMTAwJSBwdXJlIFB5dGhvbiwgdXNpbmcgdGhlIDptb2Q6YHRraW50ZXJgIEdVSSB0b29sa2l0CiAKLSogY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MgYW5kIFVuaXgKKyogY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MsIFVuaXgsIGFuZCBNYWMgT1MgWAogCi0qIG11bHRpLXdpbmRvdyB0ZXh0IGVkaXRvciB3aXRoIG11bHRpcGxlIHVuZG8sIFB5dGhvbiBjb2xvcml6aW5nIGFuZCBtYW55IG90aGVyCi0gIGZlYXR1cmVzLCBlLmcuIHNtYXJ0IGluZGVudCBhbmQgY2FsbCB0aXBzCisqIG11bHRpLXdpbmRvdyB0ZXh0IGVkaXRvciB3aXRoIG11bHRpcGxlIHVuZG8sIFB5dGhvbiBjb2xvcml6aW5nLAorICBzbWFydCBpbmRlbnQsIGNhbGwgdGlwcywgYW5kIG1hbnkgb3RoZXIgZmVhdHVyZXMKIAogKiBQeXRob24gc2hlbGwgd2luZG93IChhLmsuYS4gaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIpCiAKLSogZGVidWdnZXIgKG5vdCBjb21wbGV0ZSwgYnV0IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzLCB2aWV3ICBhbmQgc3RlcCkKKyogZGVidWdnZXIgKG5vdCBjb21wbGV0ZSwgYnV0IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzLCB2aWV3IGFuZCBzdGVwKQogCiAKIE1lbnVzCiAtLS0tLQogCitJRExFIGhhcyB0d28gd2luZG93IHR5cGVzLCB0aGUgU2hlbGwgd2luZG93IGFuZCB0aGUgRWRpdG9yIHdpbmRvdy4gSXQgaXMKK3Bvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgZWRpdG9yIHdpbmRvd3Mgc2ltdWx0YW5lb3VzbHkuIElETEUncworbWVudXMgZHluYW1pY2FsbHkgY2hhbmdlIGJhc2VkIG9uIHdoaWNoIHdpbmRvdyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuIEVhY2ggbWVudQorZG9jdW1lbnRlZCBiZWxvdyBpbmRpY2F0ZXMgd2hpY2ggd2luZG93IHR5cGUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBDbGljayBvbgordGhlIGRvdHRlZCBsaW5lIGF0IHRoZSB0b3Agb2YgYSBtZW51IHRvICJ0ZWFyIGl0IG9mZiI6IGEgc2VwYXJhdGUgd2luZG93Citjb250YWluaW5nIHRoZSBtZW51IGlzIGNyZWF0ZWQgKGZvciBVbml4IGFuZCBXaW5kb3dzIG9ubHkpLgogCi1GaWxlIG1lbnUKLV5eXl5eXl5eXgorRmlsZSBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBOZXcgZmlsZQotICAgY3JlYXRlIGEgbmV3IGZpbGUgZWRpdGluZyB3aW5kb3cKKyAgIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93CiAKIE9wZW4uLi4KLSAgIG9wZW4gYW4gZXhpc3RpbmcgZmlsZQorICAgT3BlbiBhbiBleGlzdGluZyBmaWxlCiAKIE9wZW4gbW9kdWxlLi4uCi0gICBvcGVuIGFuIGV4aXN0aW5nIG1vZHVsZSAoc2VhcmNoZXMgc3lzLnBhdGgpCisgICBPcGVuIGFuIGV4aXN0aW5nIG1vZHVsZSAoc2VhcmNoZXMgc3lzLnBhdGgpCisKK1JlY2VudCBGaWxlcworICAgT3BlbiBhIGxpc3Qgb2YgcmVjZW50IGZpbGVzCiAKIENsYXNzIGJyb3dzZXIKLSAgIHNob3cgY2xhc3NlcyBhbmQgbWV0aG9kcyBpbiBjdXJyZW50IGZpbGUKKyAgIFNob3cgY2xhc3NlcyBhbmQgbWV0aG9kcyBpbiBjdXJyZW50IGZpbGUKIAogUGF0aCBicm93c2VyCi0gICBzaG93IHN5cy5wYXRoIGRpcmVjdG9yaWVzLCBtb2R1bGVzLCBjbGFzc2VzIGFuZCBtZXRob2RzCisgICBTaG93IHN5cy5wYXRoIGRpcmVjdG9yaWVzLCBtb2R1bGVzLCBjbGFzc2VzIGFuZCBtZXRob2RzCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogQ2xhc3MgYnJvd3NlcgogICAgc2luZ2xlOiBQYXRoIGJyb3dzZXIKIAogU2F2ZQotICAgc2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkIHdpbmRvd3MgaGF2ZSBhIFwqIGJlZm9yZSBhbmQKLSAgIGFmdGVyIHRoZSB3aW5kb3cgdGl0bGUpCisgICBTYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQgd2luZG93cyBoYXZlIGEKKyAgIFwqIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKIAogU2F2ZSBBcy4uLgotICAgc2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICBTYXZlIGN1cnJlbnQgd2luZG93IHRvIG5ldyBmaWxlLCB3aGljaCBiZWNvbWVzIHRoZSBhc3NvY2lhdGVkIGZpbGUKIAogU2F2ZSBDb3B5IEFzLi4uCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQorICAgU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBkaWZmZXJlbnQgZmlsZSB3aXRob3V0IGNoYW5naW5nIHRoZSBhc3NvY2lhdGVkIGZpbGUKKworUHJpbnQgV2luZG93CisgICBQcmludCB0aGUgY3VycmVudCB3aW5kb3cKIAogQ2xvc2UKLSAgIGNsb3NlIGN1cnJlbnQgd2luZG93IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgIENsb3NlIGN1cnJlbnQgd2luZG93IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKIAogRXhpdAotICAgY2xvc2UgYWxsIHdpbmRvd3MgYW5kIHF1aXQgSURMRSAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICBDbG9zZSBhbGwgd2luZG93cyBhbmQgcXVpdCBJRExFIChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKIAogCi1FZGl0IG1lbnUKLV5eXl5eXl5eXgorRWRpdCBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBVbmRvCi0gICBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93IChtYXggMTAwMCBjaGFuZ2VzKQorICAgVW5kbyBsYXN0IGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdyAoYSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkgYmUgdW5kb25lKQogCiBSZWRvCiAgICBSZWRvIGxhc3QgdW5kb25lIGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdwogCiBDdXQKLSAgIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSBzZWxlY3Rpb24KKyAgIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uCiAKIENvcHkKICAgIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCkBAIC0xMDgsMTEgKzEyMCwzMCBAQAogR28gdG8gbGluZQogICAgQXNrIGZvciBhIGxpbmUgbnVtYmVyIGFuZCBzaG93IHRoYXQgbGluZQogCitFeHBhbmQgd29yZAorICAgRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7CisgICByZXBlYXQgdG8gZ2V0IGEgZGlmZmVyZW50IGV4cGFuc2lvbgorCitTaG93IGNhbGwgdGlwCisgICBBZnRlciBhbiB1bmNsb3NlZCBwYXJlbnRoZXNpcyBmb3IgYSBmdW5jdGlvbiwgb3BlbiBhIHNtYWxsIHdpbmRvdyB3aXRoCisgICBmdW5jdGlvbiBwYXJhbWV0ZXIgaGludHMKKworU2hvdyBzdXJyb3VuZGluZyBwYXJlbnMKKyAgIEhpZ2hsaWdodCB0aGUgc3Vycm91bmRpbmcgcGFyZW50aGVzaXMKKworU2hvdyBDb21wbGV0aW9ucworICAgT3BlbiBhIHNjcm9sbCB3aW5kb3cgYWxsb3dpbmcgc2VsZWN0aW9uIGtleXdvcmRzIGFuZCBhdHRyaWJ1dGVzLiBTZWUKKyAgIENvbXBsZXRpb25zIGJlbG93LgorCisKK0Zvcm1hdCBtZW51IChFZGl0b3Igd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCiBJbmRlbnQgcmVnaW9uCi0gICBTaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCA0IHNwYWNlcworICAgU2hpZnQgc2VsZWN0ZWQgbGluZXMgcmlnaHQgYnkgdGhlIGluZGVudCB3aWR0aCAoZGVmYXVsdCA0IHNwYWNlcykKIAogRGVkZW50IHJlZ2lvbgotICAgU2hpZnQgc2VsZWN0ZWQgbGluZXMgbGVmdCA0IHNwYWNlcworICAgU2hpZnQgc2VsZWN0ZWQgbGluZXMgbGVmdCBieSB0aGUgaW5kZW50IHdpZHRoIChkZWZhdWx0IDQgc3BhY2VzKQogCiBDb21tZW50IG91dCByZWdpb24KICAgIEluc2VydCAjIyBpbiBmcm9udCBvZiBzZWxlY3RlZCBsaW5lcwpAQCAtMTIxLDY3ICsxNTIsMTIxIEBACiAgICBSZW1vdmUgbGVhZGluZyAjIG9yICMjIGZyb20gc2VsZWN0ZWQgbGluZXMKIAogVGFiaWZ5IHJlZ2lvbgotICAgVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzCisgICBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMuIChOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcKKyAgIDQgc3BhY2UgYmxvY2tzIHRvIGluZGVudCBQeXRob24gY29kZS4pCiAKIFVudGFiaWZ5IHJlZ2lvbgotICAgVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIHJpZ2h0IG51bWJlciBvZiBzcGFjZXMKKyAgIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSBjb3JyZWN0IG51bWJlciBvZiBzcGFjZXMKIAotRXhwYW5kIHdvcmQKLSAgIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyIHdvcmQgaW4gdGhlIHNhbWUgYnVmZmVyOyByZXBlYXQKLSAgIHRvIGdldCBhIGRpZmZlcmVudCBleHBhbnNpb24KK1RvZ2dsZSB0YWJzCisgICBPcGVuIGEgZGlhbG9nIHRvIHN3aXRjaCBiZXR3ZWVuIGluZGVudGluZyB3aXRoIHNwYWNlcyBhbmQgdGFicy4KKworTmV3IEluZGVudCBXaWR0aAorICAgT3BlbiBhIGRpYWxvZyB0byBjaGFuZ2UgaW5kZW50IHdpZHRoLiBUaGUgYWNjZXB0ZWQgZGVmYXVsdCBieSB0aGUgUHl0aG9uCisgICBjb21tdW5pdHkgaXMgNCBzcGFjZXMuCiAKIEZvcm1hdCBQYXJhZ3JhcGgKLSAgIFJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtc2VwYXJhdGVkIHBhcmFncmFwaAorICAgUmVmb3JtYXQgdGhlIGN1cnJlbnQgYmxhbmstbGluZS1zZXBhcmF0ZWQgcGFyYWdyYXBoLiBBbGwgbGluZXMgaW4gdGhlCisgICBwYXJhZ3JhcGggd2lsbCBiZSBmb3JtYXR0ZWQgdG8gbGVzcyB0aGFuIDgwIGNvbHVtbnMuCiAKLUltcG9ydCBtb2R1bGUKLSAgIEltcG9ydCBvciByZWxvYWQgdGhlIGN1cnJlbnQgbW9kdWxlCi0KLVJ1biBzY3JpcHQKLSAgIEV4ZWN1dGUgdGhlIGN1cnJlbnQgZmlsZSBpbiB0aGUgX19tYWluX18gbmFtZXNwYWNlCitTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICBSZW1vdmVzIGFueSBzcGFjZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxhc3Qgbm9uLXNwYWNlIGNoYXJhY3RlcgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IEltcG9ydCBtb2R1bGUKICAgIHNpbmdsZTogUnVuIHNjcmlwdAogCiAKLVdpbmRvd3MgbWVudQotXl5eXl5eXl5eXl5eCitSdW4gbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotWm9vbSBIZWlnaHQKLSAgIHRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG5vcm1hbCBzaXplICgyNHg4MCkgYW5kIG1heGltdW0gaGVpZ2h0LgorUHl0aG9uIFNoZWxsCisgICBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cKIAotVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOyBzZWxlY3Qgb25lIHRvIGJyaW5nCi1pdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmIG5lY2Vzc2FyeSkuCitDaGVjayBtb2R1bGUKKyAgIENoZWNrIHRoZSBzeW50YXggb2YgdGhlIG1vZHVsZSBjdXJyZW50bHkgb3BlbiBpbiB0aGUgRWRpdG9yIHdpbmRvdy4gSWYgdGhlCisgICBtb2R1bGUgaGFzIG5vdCBiZWVuIHNhdmVkIElETEUgd2lsbCBwcm9tcHQgdGhlIHVzZXIgdG8gc2F2ZSB0aGUgY29kZS4KIAorUnVuIG1vZHVsZQorICAgUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50LCB0aGVuIGV4ZWN1dGUgdGhlIGN1cnJlbnRseQorICAgb3BlbiBtb2R1bGUuICBJZiB0aGUgbW9kdWxlIGhhcyBub3QgYmVlbiBzYXZlZCBJRExFIHdpbGwgcHJvbXB0IHRoZSB1c2VyCisgICB0byBzYXZlIHRoZSBjb2RlLgogCi1EZWJ1ZyBtZW51Ci1eXl5eXl5eXl5eCitTaGVsbCBtZW51IChTaGVsbCB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi0qIGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IG9ubHkKK1ZpZXcgTGFzdCBSZXN0YXJ0CisgIFNjcm9sbCB0aGUgc2hlbGwgd2luZG93IHRvIHRoZSBsYXN0IFNoZWxsIHJlc3RhcnQKKworUmVzdGFydCBTaGVsbAorICBSZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUgZW52aXJvbm1lbnQKKworRGVidWcgbWVudSAoU2hlbGwgd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogR28gdG8gZmlsZS9saW5lCiAgICBMb29rIGFyb3VuZCB0aGUgaW5zZXJ0IHBvaW50IGZvciBhIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwKICAgIGFuZCBzaG93IHRoZSBsaW5lLiAgVXNlZnVsIHRvIHZpZXcgdGhlIHNvdXJjZSBsaW5lcyByZWZlcmVuY2VkIGluIGFuCi0gICBleGNlcHRpb24gdHJhY2ViYWNrLgorICAgZXhjZXB0aW9uIHRyYWNlYmFjay4gQXZhaWxhYmxlIGluIHRoZSBjb250ZXh0IG1lbnUgb2YgdGhlIFNoZWxsIHdpbmRvdy4KIAotRGVidWdnZXIKLSAgIFJ1biBjb21tYW5kcyBpbiB0aGUgc2hlbGwgdW5kZXIgdGhlIGRlYnVnZ2VyLgorRGVidWdnZXIgKHRvZ2dsZSkKKyAgIFRoaXMgZmVhdHVyZSBpcyBub3QgY29tcGxldGUgYW5kIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsLiBSdW4gY29tbWFuZHMgaW4KKyAgIHRoZSBzaGVsbCB1bmRlciB0aGUgZGVidWdnZXIKIAogU3RhY2sgdmlld2VyCi0gICBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uLgorICAgU2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbgogCiBBdXRvLW9wZW4gU3RhY2sgVmlld2VyCi0gICBPcGVuIHN0YWNrIHZpZXdlciBvbiB0cmFjZWJhY2suCisgICBUb2dnbGUgYXV0b21hdGljYWxseSBvcGVuaW5nIHRoZSBzdGFjayB2aWV3ZXIgb24gdW5oYW5kbGVkIGV4Y2VwdGlvbgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IHN0YWNrIHZpZXdlcgogICAgc2luZ2xlOiBkZWJ1Z2dlcgogCitPcHRpb25zIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLUVkaXQgY29udGV4dCBtZW51Ci1eXl5eXl5eXl5eXl5eXl5eXgorQ29uZmlndXJlIElETEUKKyAgIE9wZW4gYSBjb25maWd1cmF0aW9uIGRpYWxvZy4gIEZvbnRzLCBpbmRlbnRhdGlvbiwga2V5YmluZGluZ3MsIGFuZCBjb2xvcgorICAgdGhlbWVzIG1heSBiZSBhbHRlcmVkLiAgU3RhcnR1cCBQcmVmZXJlbmNlcyBtYXkgYmUgc2V0LCBhbmQgYWRkaXRpb25hbAorICAgaGVscCBzb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCiAKLSogUmlnaHQtY2xpY2sgaW4gRWRpdCB3aW5kb3cgKENvbnRyb2wtY2xpY2sgb24gT1MgWCkKK0NvZGUgQ29udGV4dCAodG9nZ2xlKShFZGl0b3IgV2luZG93IG9ubHkpCisgICBPcGVuIGEgcGFuZSBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0IHdpbmRvdyB3aGljaCBzaG93cyB0aGUgYmxvY2sgY29udGV4dAorICAgb2YgdGhlIHNlY3Rpb24gb2YgY29kZSB3aGljaCBpcyBzY3JvbGxpbmcgb2ZmIHRoZSB0b3Agb2YgdGhlIHdpbmRvdy4KKworV2luZG93cyBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitab29tIEhlaWdodAorICAgVG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDQweDgwIGluaXRpYWwgc2V0dGluZykgYW5kIG1heGltdW0KKyAgIGhlaWdodC4gVGhlIGluaXRpYWwgc2l6ZSBpcyBpbiB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nIHVuZGVyIHRoZSBnZW5lcmFsCisgICB0YWIuCisKK1RoZSByZXN0IG9mIHRoaXMgbWVudSBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIG9wZW4gd2luZG93czsgc2VsZWN0IG9uZSB0byBicmluZworaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZiBuZWNlc3NhcnkpLgorCitIZWxwIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0Fib3V0IElETEUKKyAgIFZlcnNpb24sIGNvcHlyaWdodCwgbGljZW5zZSwgY3JlZGl0cworCitJRExFIEhlbHAKKyAgIERpc3BsYXkgYSBoZWxwIGZpbGUgZm9yIElETEUgZGV0YWlsaW5nIHRoZSBtZW51IG9wdGlvbnMsIGJhc2ljIGVkaXRpbmcgYW5kCisgICBuYXZpZ2F0aW9uLCBhbmQgb3RoZXIgdGlwcy4KKworUHl0aG9uIERvY3MKKyAgIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYgaW5zdGFsbGVkLiBPciB3aWxsIHN0YXJ0IGEgd2ViIGJyb3dzZXIKKyAgIGFuZCBvcGVuIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uCisKK0FkZGl0aW9uYWwgaGVscCBzb3VyY2VzIG1heSBiZSBhZGRlZCBoZXJlIHdpdGggdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZyB1bmRlcgordGhlIEdlbmVyYWwgdGFiLgorCitFZGl0b3IgV2luZG93IGNvbnRleHQgbWVudQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworKiBSaWdodC1jbGljayBpbiBFZGl0b3Igd2luZG93IChDb250cm9sLWNsaWNrIG9uIE9TIFgpCiAKIEN1dAogICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHNlbGVjdGlvbgpAQCAtMjA3LDggKzI5Miw4IEBACiAgICBzaW5nbGU6IGJyZWFrcG9pbnRzCiAKIAotU2hlbGwgY29udGV4dCBtZW51Ci1eXl5eXl5eXl5eXl5eXl5eXl4KK1NoZWxsIFdpbmRvdyBjb250ZXh0IG1lbnUKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogKiBSaWdodC1jbGljayBpbiBQeXRob24gU2hlbGwgd2luZG93IChDb250cm9sLWNsaWNrIG9uIE9TIFgpCiAKQEAgLTIyNSwxOSArMzEwLDQ0IEBACiAgICBTYW1lIGFzIGluIERlYnVnIG1lbnUuCiAKIAotQmFzaWMgZWRpdGluZyBhbmQgbmF2aWdhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRWRpdGluZyBhbmQgbmF2aWdhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAqIDprYmQ6YEJhY2tzcGFjZWAgZGVsZXRlcyB0byB0aGUgbGVmdDsgOmtiZDpgRGVsYCBkZWxldGVzIHRvIHRoZSByaWdodAogCisqIDprYmQ6YEMtQmFja3NwYWNlYCBkZWxldGUgd29yZCBsZWZ0OyA6a2JkOmBDLURlbGAgZGVsZXRlIHdvcmQgdG8gdGhlIHJpZ2h0CisKICogQXJyb3cga2V5cyBhbmQgOmtiZDpgUGFnZSBVcGAvOmtiZDpgUGFnZSBEb3duYCB0byBtb3ZlIGFyb3VuZAogCisqIDprYmQ6YEMtTGVmdEFycm93YCBhbmQgOmtiZDpgQy1SaWdodEFycm93YCBtb3ZlcyBieSB3b3JkcworCiAqIDprYmQ6YEhvbWVgLzprYmQ6YEVuZGAgZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmUKIAogKiA6a2JkOmBDLUhvbWVgLzprYmQ6YEMtRW5kYCBnbyB0byBiZWdpbi9lbmQgb2YgZmlsZQogCi0qIFNvbWUgOnByb2dyYW06YEVtYWNzYCBiaW5kaW5ncyBtYXkgYWxzbyB3b3JrLCBpbmNsdWRpbmcgOmtiZDpgQy1CYCwKLSAgOmtiZDpgQy1QYCwgOmtiZDpgQy1BYCwgOmtiZDpgQy1FYCwgOmtiZDpgQy1EYCwgOmtiZDpgQy1MYAorKiBTb21lIHVzZWZ1bCBFbWFjcyBiaW5kaW5ncyBhcmUgaW5oZXJpdGVkIGZyb20gVGNsL1RrOgorCisgICAqIDprYmQ6YEMtYWAgYmVnaW5uaW5nIG9mIGxpbmUKKworICAgKiA6a2JkOmBDLWVgIGVuZCBvZiBsaW5lCisKKyAgICogOmtiZDpgQy1rYCBraWxsIGxpbmUgKGJ1dCBkb2Vzbid0IHB1dCBpdCBpbiBjbGlwYm9hcmQpCisKKyAgICogOmtiZDpgQy1sYCBjZW50ZXIgd2luZG93IGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50CisKKyAgICogOmtiZDpgQy1iYCBnbyBiYWNrd2FyZHMgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KKyAgICAgYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yIHRoaXMpCisKKyAgICogOmtiZDpgQy1mYCBnbyBmb3J3YXJkIG9uZSBjaGFyYWN0ZXIgd2l0aG91dCBkZWxldGluZyAodXN1YWxseSB5b3UgY2FuCisgICAgIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvciB0aGlzKQorCisgICAqIDprYmQ6YEMtcGAgZ28gdXAgb25lIGxpbmUgKHVzdWFsbHkgeW91IGNhbiBhbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IKKyAgICAgdGhpcykKKworICAgKiA6a2JkOmBDLWRgIGRlbGV0ZSBuZXh0IGNoYXJhY3RlcgorCitTdGFuZGFyZCBrZXliaW5kaW5ncyAobGlrZSA6a2JkOmBDLWNgIHRvIGNvcHkgYW5kIDprYmQ6YEMtdmAgdG8gcGFzdGUpCittYXkgd29yay4gIEtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nLgogCiAKIEF1dG9tYXRpYyBpbmRlbnRhdGlvbgpAQCAtMjQ2LDI3ICszNTYsNzYgQEAKIEFmdGVyIGEgYmxvY2stb3BlbmluZyBzdGF0ZW1lbnQsIHRoZSBuZXh0IGxpbmUgaXMgaW5kZW50ZWQgYnkgNCBzcGFjZXMgKGluIHRoZQogUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMgKGJyZWFrLCByZXR1cm4gZXRjLikKIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nIGluZGVudGF0aW9uLCA6a2JkOmBCYWNrc3BhY2VgIGRlbGV0ZXMgdXAKLXRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiA6a2JkOmBUYWJgIGluc2VydHMgMS00IHNwYWNlcyAoaW4gdGhlIFB5dGhvbgotU2hlbGwgd2luZG93IG9uZSB0YWIpLiBTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQKLW1lbnUuCit0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gOmtiZDpgVGFiYCBpbnNlcnRzIHNwYWNlcyAoaW4gdGhlIFB5dGhvbgorU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbiBJbmRlbnQgd2lkdGguIEN1cnJlbnRseSB0YWJzCithcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUgdG8gVGNsL1RrIGxpbWl0YXRpb25zLgogCitTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQgbWVudS4KKworQ29tcGxldGlvbnMKK15eXl5eXl5eXl5eCisKK0NvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZiBjbGFzc2VzLAorYm90aCBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkLiBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZCBmb3IKK2ZpbGVuYW1lcy4KKworVGhlIEF1dG9Db21wbGV0ZVdpbmRvdyAoQUNXKSB3aWxsIG9wZW4gYWZ0ZXIgYSBwcmVkZWZpbmVkIGRlbGF5IChkZWZhdWx0IGlzCit0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMgdHlwZWQuIElmIGFmdGVyIG9uZQorb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIgY2hhcmFjdGVycykgYSB0YWIgaXMgdHlwZWQKK3RoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUgY29udGludWF0aW9uIGlzIGZvdW5kLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCis6a2JkOmBUYWJgIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KKworJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdywgYnkgZGVmYXVsdCB0aGUKKzprYmQ6YEMtc3BhY2VgIHdpbGwgb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gSW4gYW4gZW1wdHkKK3N0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gT24gYQorYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKK2NsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuIElmIHNvbWUKK2NoYXJhY3RlcnMgaGF2ZSBiZWVuIGVudGVyZWQsIHRoZSBBQ1cgd2lsbCBhdHRlbXB0IHRvIGJlIG1vcmUgc3BlY2lmaWMuCisKK0lmIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKK2VudHJ5IG1vc3QgY2xvc2VseSBtYXRjaGluZyB0aG9zZSBjaGFyYWN0ZXJzLiAgRW50ZXJpbmcgYSA6a2JkOmB0YWJgIHdpbGwKK2NhdXNlIHRoZSBsb25nZXN0IG5vbi1hbWJpZ3VvdXMgbWF0Y2ggdG8gYmUgZW50ZXJlZCBpbiB0aGUgRWRpdG9yIHdpbmRvdyBvcgorU2hlbGwuICBUd28gOmtiZDpgdGFiYCBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcword2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZSBzZWxlY3Rpb24sCithbmQgdGhlIHNjcm9sbCB3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgorCisiSGlkZGVuIiBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KK25hbWUgYWZ0ZXIgYSAnLicsIGUuZy4gJ18nLiBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCitgYF9fYWxsX19gYCBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy4KKworQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKKworQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiBOYW1lcyBpbgorYW4gRWRpdG9yIHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBgYF9fbWFpbl9fYGAgYW5kIDpkYXRhOmBzeXMubW9kdWxlc2Agd2lsbAorbm90IGJlIGZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMgc2l0dWF0aW9uLgorTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluIHN5cy5tb2R1bGVzLCBzbworbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgorCitJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQorbG9uZ2VyIG9yIGRpc2FibGUgdGhlIGV4dGVuc2lvbi4gIE9yIGFub3RoZXIgb3B0aW9uIGlzIHRoZSBkZWxheSBjb3VsZAorYmUgc2V0IHRvIHplcm8uIEFub3RoZXIgYWx0ZXJuYXRpdmUgdG8gcHJldmVudGluZyBBQ1cgcG9wdXBzIGlzIHRvCitkaXNhYmxlIHRoZSBjYWxsIHRpcHMgZXh0ZW5zaW9uLgogCiBQeXRob24gU2hlbGwgd2luZG93CiBeXl5eXl5eXl5eXl5eXl5eXl5eCiAKLSogOmtiZDpgQy1DYCBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kCisqIDprYmQ6YEMtY2AgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZAogCi0qIDprYmQ6YEMtRGAgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSBgYD4+PmBgIHByb21wdAorKiA6a2JkOmBDLWRgIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0IGEgYGA+Pj5gYCBwcm9tcHQKKyAgKHRoaXMgaXMgOmtiZDpgQy16YCBvbiBXaW5kb3dzKS4KIAotKiA6a2JkOmBBbHQtcGAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZAorKiA6a2JkOmBBbHQtL2AgKEV4cGFuZCB3b3JkKSBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nCiAKLSogOmtiZDpgQWx0LW5gIHJldHJpZXZlcyBuZXh0CisgIENvbW1hbmQgaGlzdG9yeQogCi0qIDprYmQ6YFJldHVybmAgd2hpbGUgb24gYW55IHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZAorICAqIDprYmQ6YEFsdC1wYCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkLiBPbgorICAgIE9TIFggdXNlIDprYmQ6YEMtcGAuCiAKLSogOmtiZDpgQWx0LS9gIChFeHBhbmQgd29yZCkgaXMgYWxzbyB1c2VmdWwgaGVyZQorICAqIDprYmQ6YEFsdC1uYCByZXRyaWV2ZXMgbmV4dC4gT24gT1MgWCB1c2UgOmtiZDpgQy1uYC4KIAotLi4gaW5kZXg6OiBzaW5nbGU6IGluZGVudGF0aW9uCisgICogOmtiZDpgUmV0dXJuYCB3aGlsZSBvbiBhbnkgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kCiAKIAogU3ludGF4IGNvbG9ycwpAQCAtMzA4LDE3ICs0NjcsMTcgQEAKIAogVXBvbiBzdGFydHVwIHdpdGggdGhlIGBgLXNgYCBvcHRpb24sIElETEUgd2lsbCBleGVjdXRlIHRoZSBmaWxlIHJlZmVyZW5jZWQgYnkKIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgOmVudnZhcjpgSURMRVNUQVJUVVBgIG9yIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgLgotSWRsZSBmaXJzdCBjaGVja3MgZm9yIGBgSURMRVNUQVJUVVBgYDsgaWYgYGBJRExFU1RBUlRVUGBgIGlzIHByZXNlbnQgdGhlIGZpbGUKLXJlZmVyZW5jZWQgaXMgcnVuLiAgSWYgYGBJRExFU1RBUlRVUGBgIGlzIG5vdCBwcmVzZW50LCBJZGxlIGNoZWNrcyBmb3IKK0lETEUgZmlyc3QgY2hlY2tzIGZvciBgYElETEVTVEFSVFVQYGA7IGlmIGBgSURMRVNUQVJUVVBgYCBpcyBwcmVzZW50IHRoZSBmaWxlCityZWZlcmVuY2VkIGlzIHJ1bi4gIElmIGBgSURMRVNUQVJUVVBgYCBpcyBub3QgcHJlc2VudCwgSURMRSBjaGVja3MgZm9yCiBgYFBZVEhPTlNUQVJUVVBgYC4gIEZpbGVzIHJlZmVyZW5jZWQgYnkgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZQotY29udmVuaWVudCBwbGFjZXMgdG8gc3RvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgZnJlcXVlbnRseSBmcm9tIHRoZSBJZGxlCitjb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElETEUKIHNoZWxsLCBvciBmb3IgZXhlY3V0aW5nIGltcG9ydCBzdGF0ZW1lbnRzIHRvIGltcG9ydCBjb21tb24gbW9kdWxlcy4KIAogSW4gYWRkaXRpb24sIGBgVGtgYCBhbHNvIGxvYWRzIGEgc3RhcnR1cCBmaWxlIGlmIGl0IGlzIHByZXNlbnQuICBOb3RlIHRoYXQgdGhlCiBUayBmaWxlIGlzIGxvYWRlZCB1bmNvbmRpdGlvbmFsbHkuICBUaGlzIGFkZGl0aW9uYWwgZmlsZSBpcyBgYC5JZGxlLnB5YGAgYW5kIGlzCiBsb29rZWQgZm9yIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICBTdGF0ZW1lbnRzIGluIHRoaXMgZmlsZSB3aWxsIGJlCiBleGVjdXRlZCBpbiB0aGUgVGsgbmFtZXNwYWNlLCBzbyB0aGlzIGZpbGUgaXMgbm90IHVzZWZ1bCBmb3IgaW1wb3J0aW5nIGZ1bmN0aW9ucwotdG8gYmUgdXNlZCBmcm9tIElkbGUncyBQeXRob24gc2hlbGwuCit0byBiZSB1c2VkIGZyb20gSURMRSdzIFB5dGhvbiBzaGVsbC4KIAogCiBDb21tYW5kIGxpbmUgdXNhZ2UKQEAgLTM0OSwzICs1MDgsNDUgQEAKICAgIHRoZSBhcmd1bWVudHMgYXJlIHN0aWxsIGF2YWlsYWJsZSBpbiBgYHN5cy5hcmd2YGAuCiAKIAorQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lETEUgaW5jbHVkZXMgYSBoZWxwIG1lbnUgZW50cnkgY2FsbGVkICJQeXRob24gRG9jcyIgdGhhdCB3aWxsIG9wZW4gdGhlCitleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcgdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgZG9jcy5weXRob24ub3JnLgorU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBoZWxwIG1lbnUgYXQgYW55IHRpbWUgdXNpbmcgdGhlCitDb25maWd1cmUgSURMRSBkaWFsb2cuIFNlZSB0aGUgSURMRSBoZWxwIG9wdGlvbiBpbiB0aGUgaGVscCBtZW51IG9mIElETEUgZm9yCittb3JlIGluZm9ybWF0aW9uLgorCisKK090aGVyIHByZWZlcmVuY2VzCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9udCBwcmVmZXJlbmNlcywgaGlnaGxpZ2h0aW5nLCBrZXlzLCBhbmQgZ2VuZXJhbCBwcmVmZXJlbmNlcyBjYW4gYmUKK2NoYW5nZWQgdmlhIHRoZSBDb25maWd1cmUgSURMRSBtZW51IG9wdGlvbi4gIEJlIHN1cmUgdG8gbm90ZSB0aGF0CitrZXlzIGNhbiBiZSB1c2VyIGRlZmluZWQsIElETEUgc2hpcHMgd2l0aCBmb3VyIGJ1aWx0IGluIGtleSBzZXRzLiBJbgorYWRkaXRpb24gYSB1c2VyIGNhbiBjcmVhdGUgYSBjdXN0b20ga2V5IHNldCBpbiB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nCit1bmRlciB0aGUga2V5cyB0YWIuCisKK0V4dGVuc2lvbnMKKy0tLS0tLS0tLS0KKworSURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBTZWUgdGhlIGJlZ2lubmluZyBvZgorY29uZmlnLWV4dGVuc2lvbnMuZGVmIGluIHRoZSBpZGxlbGliIGRpcmVjdG9yeSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4gIFRoZQorZGVmYXVsdCBleHRlbnNpb25zIGFyZSBjdXJyZW50bHk6CisKKyogRm9ybWF0UGFyYWdyYXBoCisKKyogQXV0b0V4cGFuZAorCisqIFpvb21IZWlnaHQKKworKiBTY3JpcHRCaW5kaW5nCisKKyogQ2FsbFRpcHMKKworKiBQYXJlbk1hdGNoCisKKyogQXV0b0NvbXBsZXRlCisKKyogQ29kZUNvbnRleHQKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAppbmRleCAwMTIzNmZiLi5mYTczNmZlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdApAQCAtNjksMTcgKzY5LDI1IEBACiAgICBUaGlzIGlzIGEgc3ViY2xhc3MgZGVyaXZlZCBmcm9tIDpjbGFzczpgSU1BUDRgIHRoYXQgY29ubmVjdHMgb3ZlciBhbiBTU0wKICAgIGVuY3J5cHRlZCBzb2NrZXQgKHRvIHVzZSB0aGlzIGNsYXNzIHlvdSBuZWVkIGEgc29ja2V0IG1vZHVsZSB0aGF0IHdhcyBjb21waWxlZAogICAgd2l0aCBTU0wgc3VwcG9ydCkuICBJZiAqaG9zdCogaXMgbm90IHNwZWNpZmllZCwgYGAnJ2BgICh0aGUgbG9jYWwgaG9zdCkgaXMgdXNlZC4KLSAgIElmICpwb3J0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgSU1BUDQtb3Zlci1TU0wgcG9ydCAoOTkzKSBpcyB1c2VkLiAgKmtleWZpbGUqCi0gICBhbmQgKmNlcnRmaWxlKiBhcmUgYWxzbyBvcHRpb25hbCAtIHRoZXkgY2FuIGNvbnRhaW4gYSBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5Ci0gICBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLiAqc3NsX2NvbnRleHQqIHBhcmFtZXRlciBpcyBhCi0gICA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uCi0gICBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKQotICAgc3RydWN0dXJlLiBOb3RlIHRoYXQgdGhlICprZXlmaWxlKi8qY2VydGZpbGUqIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoICpzc2xfY29udGV4dCosCi0gICBhIDpjbGFzczpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmICprZXlmaWxlKi8qY2VydGZpbGUqIGlzIHByb3ZpZGVkIGFsb25nIHdpdGggKnNzbF9jb250ZXh0Ki4KKyAgIElmICpwb3J0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgSU1BUDQtb3Zlci1TU0wgcG9ydCAoOTkzKSBpcyB1c2VkLgorICAgKnNzbF9jb250ZXh0KiBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MgYnVuZGxpbmcKKyAgIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8gYSBzaW5nbGUKKyAgIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvcgorICAgYmVzdCBwcmFjdGljZXMuCisKKyAgICprZXlmaWxlKiBhbmQgKmNlcnRmaWxlKiBhcmUgYSBsZWdhY3kgYWx0ZXJuYXRpdmUgdG8gKnNzbF9jb250ZXh0KiAtIHRoZXkKKyAgIGNhbiBwb2ludCB0byBQRU0tZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlcyBmb3IKKyAgIHRoZSBTU0wgY29ubmVjdGlvbi4gIE5vdGUgdGhhdCB0aGUgKmtleWZpbGUqLypjZXJ0ZmlsZSogcGFyYW1ldGVycyBhcmUKKyAgIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoICpzc2xfY29udGV4dCosIGEgOmNsYXNzOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQKKyAgIGlmICprZXlmaWxlKi8qY2VydGZpbGUqIGlzIHByb3ZpZGVkIGFsb25nIHdpdGggKnNzbF9jb250ZXh0Ki4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpzc2xfY29udGV4dCogcGFyYW1ldGVyIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGNsYXNzIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgc3NsLlNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdGlvbiogKHNlZQorICAgICAgOmRhdGE6YHNzbC5IQVNfU05JYCkuCiAKIFRoZSBzZWNvbmQgc3ViY2xhc3MgYWxsb3dzIGZvciBjb25uZWN0aW9ucyBjcmVhdGVkIGJ5IGEgY2hpbGQgcHJvY2VzczoKIApAQCAtNDMzLDEwICs0NDEsMTYgQEAKIAogICAgU2VuZCBhIGBgU1RBUlRUTFNgYCBjb21tYW5kLiAgVGhlICpzc2xfY29udGV4dCogYXJndW1lbnQgaXMgb3B0aW9uYWwKICAgIGFuZCBzaG91bGQgYmUgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QuICBUaGlzIHdpbGwgZW5hYmxlCi0gICBlbmNyeXB0aW9uIG9uIHRoZSBJTUFQIGNvbm5lY3Rpb24uCisgICBlbmNyeXB0aW9uIG9uIHRoZSBJTUFQIGNvbm5lY3Rpb24uICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvcgorICAgYmVzdCBwcmFjdGljZXMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG1ldGhvZCBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgorCiAKIC4uIG1ldGhvZDo6IElNQVA0LnN0YXR1cyhtYWlsYm94LCBuYW1lcykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1wLnJzdCBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKaW5kZXggMzY0ZDgxZS4uYzJkYmRjNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbXAucnN0CkBAIC0zLDcgKzMsMTAgQEAKIAogLi4gbW9kdWxlOjogaW1wCiAgICA6c3lub3BzaXM6IEFjY2VzcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGltcG9ydCBzdGF0ZW1lbnQuCisgICA6ZGVwcmVjYXRlZDoKIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgVGhlIDptb2Q6YGltcGAgcGFja2FnZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uIGluIGZhdm9yIG9mIDptb2Q6YGltcG9ydGxpYmAuCiAKIC4uIGluZGV4Ojogc3RhdGVtZW50OiBpbXBvcnQKIApAQCAtMTEsMTAgKzE0LDYgQEAKIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4gIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIGZ1bmN0aW9uczoKIAogCi0uLiBub3RlOjoKLSAgIE5ldyBwcm9ncmFtcyBzaG91bGQgdXNlIDptb2Q6YGltcG9ydGxpYmAgcmF0aGVyIHRoYW4gdGhpcyBtb2R1bGUuCi0KLQogLi4gZnVuY3Rpb246OiBnZXRfbWFnaWMoKQogCiAgICAuLiBpbmRleDo6IHBhaXI6IGZpbGU7IGJ5dGUtY29kZQpAQCAtMjIsNiArMjEsOSBAQAogICAgUmV0dXJuIHRoZSBtYWdpYyBzdHJpbmcgdmFsdWUgdXNlZCB0byByZWNvZ25pemUgYnl0ZS1jb21waWxlZCBjb2RlIGZpbGVzCiAgICAoOmZpbGU6YC5weWNgIGZpbGVzKS4gIChUaGlzIHZhbHVlIG1heSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggUHl0aG9uIHZlcnNpb24uKQogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgVXNlIDphdHRyOmBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVJgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRfc3VmZml4ZXMoKQogCkBAIC03Nyw3ICs3OSw5IEBACiAgICBXaGVuICpQKiBpdHNlbGYgaGFzIGEgZG90dGVkIG5hbWUsIGFwcGx5IHRoaXMgcmVjaXBlIHJlY3Vyc2l2ZWx5LgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCi0gICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAgaW5zdGVhZC4KKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjYCBpbnN0ZWFkIHVubGVzcyBQeXRob24gMy4zCisgICAgICBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkLCBpbiB3aGljaCBjYXNlIHVzZQorICAgICAgOmZ1bmM6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAuCiAKIAogLi4gZnVuY3Rpb246OiBsb2FkX21vZHVsZShuYW1lLCBmaWxlLCBwYXRobmFtZSwgZGVzY3JpcHRpb24pCkBAIC0xMDEsOCArMTA1LDEyIEBACiAgICB1c2luZyBhIDprZXl3b3JkOmB0cnlgIC4uLiA6a2V5d29yZDpgZmluYWxseWAgc3RhdGVtZW50LgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCi0gICAgICBVbm5lZWRlZCBhcyBsb2FkZXJzIHNob3VsZCBiZSB1c2VkIHRvIGxvYWQgbW9kdWxlcyBhbmQKLSAgICAgIDpmdW5jOmBmaW5kX21vZHVsZWAgaXMgZGVwcmVjYXRlZC4KKyAgICAgIElmIHByZXZpb3VzbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIDpmdW5jOmBpbXAuZmluZF9tb2R1bGVgIHRoZW4KKyAgICAgIGNvbnNpZGVyIHVzaW5nIDpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAsIG90aGVyd2lzZSB1c2UgdGhlIGxvYWRlcgorICAgICAgcmV0dXJuZWQgYnkgdGhlIHJlcGxhY2VtZW50IHlvdSBjaG9zZSBmb3IgOmZ1bmM6YGltcC5maW5kX21vZHVsZWAuIElmIHlvdQorICAgICAgY2FsbGVkIDpmdW5jOmBpbXAubG9hZF9tb2R1bGVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBkaXJlY3RseSB0aGVuIHVzZSB0aGUKKyAgICAgIGNsYXNzZXMgaW4gOm1vZDpgaW1wb3J0bGliLm1hY2hpbmVyeWAsIGUuZy4KKyAgICAgIGBgaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGgpLmxvYWRfbW9kdWxlKClgYC4KIAogCiAuLiBmdW5jdGlvbjo6IG5ld19tb2R1bGUobmFtZSkKQEAgLTExMCw2ICsxMTgsOSBAQAogICAgUmV0dXJuIGEgbmV3IGVtcHR5IG1vZHVsZSBvYmplY3QgY2FsbGVkICpuYW1lKi4gIFRoaXMgb2JqZWN0IGlzICpub3QqIGluc2VydGVkCiAgICBpbiBgYHN5cy5tb2R1bGVzYGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6Y2xhc3M6YHR5cGVzLk1vZHVsZVR5cGVgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiByZWxvYWQobW9kdWxlKQogCkBAIC0xNzYsNiArMTg3LDkgQEAKICAgICAgIFJlbGllcyBvbiBib3RoIGBgX19uYW1lX19gYCBhbmQgYGBfX2xvYWRlcl9fYGAgYmVpbmcgZGVmaW5lZCBvbiB0aGUgbW9kdWxlCiAgICAgICBiZWluZyByZWxvYWRlZCBpbnN0ZWFkIG9mIGp1c3QgYGBfX25hbWVfX2BgLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi5yZWxvYWRgIGluc3RlYWQuCisKIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNvbnZlbmllbmNlcyBmb3IgaGFuZGxpbmcgOnBlcDpgMzE0N2AgYnl0ZS1jb21waWxlZAogZmlsZSBwYXRocy4KQEAgLTIwMSw2ICsyMTUsOSBAQAogICAgICAgSWYgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIGBgTm9uZWBgLCB0aGVuCiAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpcyByYWlzZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBzb3VyY2VfZnJvbV9jYWNoZShwYXRoKQogCkBAIC0yMTYsMTQgKzIzMywxNyBAQAogICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2hlbgogICAgICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X3RhZygpCiAKICAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgbWFnaWMgdGFnIHN0cmluZyBtYXRjaGluZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uJ3MKICAgIG1hZ2ljIG51bWJlciwgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9tYWdpY2AuCiAKLSAgIC4uIG5vdGU6OgotICAgICAgWW91IG1heSB1c2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCiAgICAgICBpbiBQeXRob24gMy4zLgogCiAKQEAgLTI0NiwxMCArMjY2LDEyIEBACiAgICBleGNlcHRpb24gaXMgbWFkZSBmb3IgY2lyY3VsYXIgaW1wb3J0cywgd2hpY2ggYnkgY29uc3RydWN0aW9uIGhhdmUgdG8KICAgIGV4cG9zZSBhbiBpbmNvbXBsZXRlIG1vZHVsZSBvYmplY3QgYXQgc29tZSBwb2ludC4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiAuLiBmdW5jdGlvbjo6IGFjcXVpcmVfbG9jaygpCkBAIC0yNjQsMTAgKzI4NiwxMiBAQAogCiAgICBPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiAuLiBmdW5jdGlvbjo6IHJlbGVhc2VfbG9jaygpCkBAIC0yNzUsMTAgKzI5OSwxMiBAQAogICAgUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIncyBnbG9iYWwgaW1wb3J0IGxvY2suIE9uIHBsYXRmb3JtcyB3aXRob3V0CiAgICB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3aXRoIGludGVnZXIgdmFsdWVzLCBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLCBhcmUgdXNlZApAQCAtMzQ1LDYgKzM3MSw5IEBACiAgICAgICBgYE5vbmVgYCBpcyBpbnNlcnRlZCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkIG9mIGFuCiAgICAgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YE51bGxJbXBvcnRlcmAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIEluc2VydCBgYE5vbmVgYCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkLgorCiAKIC4uIF9leGFtcGxlcy1pbXA6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CmluZGV4IDVmNzQwYTIuLjA5YTVkNzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdApAQCAtOTUsNyArOTUsNyBAQAogCiAgICBGaW5kIHRoZSBsb2FkZXIgZm9yIGEgbW9kdWxlLCBvcHRpb25hbGx5IHdpdGhpbiB0aGUgc3BlY2lmaWVkICpwYXRoKi4gSWYgdGhlCiAgICBtb2R1bGUgaXMgaW4gOmF0dHI6YHN5cy5tb2R1bGVzYCwgdGhlbiBgYHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX19gYCBpcwotICAgcmV0dXJuZWQgKHVubGVzcyB0aGUgbG9hZGVyIHdvdWxkIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlCisgICByZXR1cm5lZCAodW5sZXNzIHRoZSBsb2FkZXIgd291bGQgYmUgYGBOb25lYGAgb3IgaXMgbm90IHNldCwgaW4gd2hpY2ggY2FzZQogICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkKS4gT3RoZXJ3aXNlIGEgc2VhcmNoIHVzaW5nIDphdHRyOmBzeXMubWV0YV9wYXRoYAogICAgaXMgZG9uZS4gYGBOb25lYGAgaXMgcmV0dXJuZWQgaWYgbm8gbG9hZGVyIGlzIGZvdW5kLgogCkBAIC0xMDQsNiArMTA0LDE1IEBACiAgICB3aWxsIG5lZWQgdG8gaW1wb3J0IGFsbCBwYXJlbnQgcGFja2FnZXMgb2YgdGhlIHN1Ym1vZHVsZSBhbmQgdXNlIHRoZSBjb3JyZWN0CiAgICBhcmd1bWVudCB0byAqcGF0aCouCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBfX2xvYWRlcl9fYGAgaXMgbm90IHNldCwgcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAsIGp1c3QgbGlrZSB3aGVuIHRoZQorICAgICAgYXR0cmlidXRlIGlzIHNldCB0byBgYE5vbmVgYC4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWNgIGluc3RlYWQuCisKIC4uIGZ1bmN0aW9uOjogaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICBJbnZhbGlkYXRlIHRoZSBpbnRlcm5hbCBjYWNoZXMgb2YgZmluZGVycyBzdG9yZWQgYXQKQEAgLTExNCw2ICsxMjMsNzQgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIGZ1bmN0aW9uOjogcmVsb2FkKG1vZHVsZSkKKworICAgUmVsb2FkIGEgcHJldmlvdXNseSBpbXBvcnRlZCAqbW9kdWxlKi4gIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgbW9kdWxlIG9iamVjdCwKKyAgIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UKKyAgIGhhdmUgZWRpdGVkIHRoZSBtb2R1bGUgc291cmNlIGZpbGUgdXNpbmcgYW4gZXh0ZXJuYWwgZWRpdG9yIGFuZCB3YW50IHRvIHRyeQorICAgb3V0IHRoZSBuZXcgdmVyc2lvbiB3aXRob3V0IGxlYXZpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4gIFRoZSByZXR1cm4gdmFsdWUKKyAgIGlzIHRoZSBtb2R1bGUgb2JqZWN0ICh3aGljaCBjYW4gYmUgZGlmZmVyZW50IGlmIHJlLWltcG9ydGluZyBjYXVzZXMgYQorICAgZGlmZmVyZW50IG9iamVjdCB0byBiZSBwbGFjZWQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCkuCisKKyAgIFdoZW4gOmZ1bmM6YHJlbG9hZGAgaXMgZXhlY3V0ZWQ6CisKKyAgICogUHl0aG9uIG1vZHVsZSdzIGNvZGUgaXMgcmVjb21waWxlZCBhbmQgdGhlIG1vZHVsZS1sZXZlbCBjb2RlIHJlLWV4ZWN1dGVkLAorICAgICBkZWZpbmluZyBhIG5ldyBzZXQgb2Ygb2JqZWN0cyB3aGljaCBhcmUgYm91bmQgdG8gbmFtZXMgaW4gdGhlIG1vZHVsZSdzCisgICAgIGRpY3Rpb25hcnkgYnkgcmV1c2luZyB0aGUgOnRlcm06YGxvYWRlcmAgd2hpY2ggb3JpZ2luYWxseSBsb2FkZWQgdGhlCisgICAgIG1vZHVsZS4gIFRoZSBgYGluaXRgYCBmdW5jdGlvbiBvZiBleHRlbnNpb24gbW9kdWxlcyBpcyBub3QgY2FsbGVkIGEgc2Vjb25kCisgICAgIHRpbWUuCisKKyAgICogQXMgd2l0aCBhbGwgb3RoZXIgb2JqZWN0cyBpbiBQeXRob24gdGhlIG9sZCBvYmplY3RzIGFyZSBvbmx5IHJlY2xhaW1lZAorICAgICBhZnRlciB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3AgdG8gemVyby4KKworICAgKiBUaGUgbmFtZXMgaW4gdGhlIG1vZHVsZSBuYW1lc3BhY2UgYXJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gYW55IG5ldyBvcgorICAgICBjaGFuZ2VkIG9iamVjdHMuCisKKyAgICogT3RoZXIgcmVmZXJlbmNlcyB0byB0aGUgb2xkIG9iamVjdHMgKHN1Y2ggYXMgbmFtZXMgZXh0ZXJuYWwgdG8gdGhlIG1vZHVsZSkgYXJlCisgICAgIG5vdCByZWJvdW5kIHRvIHJlZmVyIHRvIHRoZSBuZXcgb2JqZWN0cyBhbmQgbXVzdCBiZSB1cGRhdGVkIGluIGVhY2ggbmFtZXNwYWNlCisgICAgIHdoZXJlIHRoZXkgb2NjdXIgaWYgdGhhdCBpcyBkZXNpcmVkLgorCisgICBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygb3RoZXIgY2F2ZWF0czoKKworICAgSWYgYSBtb2R1bGUgaXMgc3ludGFjdGljYWxseSBjb3JyZWN0IGJ1dCBpdHMgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSBmaXJzdAorICAgOmtleXdvcmQ6YGltcG9ydGAgc3RhdGVtZW50IGZvciBpdCBkb2VzIG5vdCBiaW5kIGl0cyBuYW1lIGxvY2FsbHksIGJ1dCBkb2VzCisgICBzdG9yZSBhIChwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQpIG1vZHVsZSBvYmplY3QgaW4gYGBzeXMubW9kdWxlc2BgLiAgVG8gcmVsb2FkCisgICB0aGUgbW9kdWxlIHlvdSBtdXN0IGZpcnN0IDprZXl3b3JkOmBpbXBvcnRgIGl0IGFnYWluICh0aGlzIHdpbGwgYmluZCB0aGUgbmFtZQorICAgdG8gdGhlIHBhcnRpYWxseSBpbml0aWFsaXplZCBtb2R1bGUgb2JqZWN0KSBiZWZvcmUgeW91IGNhbiA6ZnVuYzpgcmVsb2FkYCBpdC4KKworICAgV2hlbiBhIG1vZHVsZSBpcyByZWxvYWRlZCwgaXRzIGRpY3Rpb25hcnkgKGNvbnRhaW5pbmcgdGhlIG1vZHVsZSdzIGdsb2JhbAorICAgdmFyaWFibGVzKSBpcyByZXRhaW5lZC4gIFJlZGVmaW5pdGlvbnMgb2YgbmFtZXMgd2lsbCBvdmVycmlkZSB0aGUgb2xkCisgICBkZWZpbml0aW9ucywgc28gdGhpcyBpcyBnZW5lcmFsbHkgbm90IGEgcHJvYmxlbS4gIElmIHRoZSBuZXcgdmVyc2lvbiBvZiBhCisgICBtb2R1bGUgZG9lcyBub3QgZGVmaW5lIGEgbmFtZSB0aGF0IHdhcyBkZWZpbmVkIGJ5IHRoZSBvbGQgdmVyc2lvbiwgdGhlIG9sZAorICAgZGVmaW5pdGlvbiByZW1haW5zLiAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIHRoZSBtb2R1bGUncyBhZHZhbnRhZ2UgaWYgaXQKKyAgIG1haW50YWlucyBhIGdsb2JhbCB0YWJsZSBvciBjYWNoZSBvZiBvYmplY3RzIC0tLSB3aXRoIGEgOmtleXdvcmQ6YHRyeWAKKyAgIHN0YXRlbWVudCBpdCBjYW4gdGVzdCBmb3IgdGhlIHRhYmxlJ3MgcHJlc2VuY2UgYW5kIHNraXAgaXRzIGluaXRpYWxpemF0aW9uIGlmCisgICBkZXNpcmVkOjoKKworICAgICAgdHJ5OgorICAgICAgICAgIGNhY2hlCisgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgIGNhY2hlID0ge30KKworICAgSXQgaXMgbGVnYWwgdGhvdWdoIGdlbmVyYWxseSBub3QgdmVyeSB1c2VmdWwgdG8gcmVsb2FkIGJ1aWx0LWluIG9yCisgICBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyAodGhpcyBpcyBub3QgdHJ1ZSBmb3IgZS5nLiA6bW9kOmBzeXNgLAorICAgOm1vZDpgX19tYWluX19gLCA6bW9kOmBidWlsdGluc2AgYW5kIG90aGVyIGtleSBtb2R1bGVzIHdoZXJlIHJlbG9hZGluZyBpcworICAgZnJvd25lZCB1cG9uKS4gSW4gbWFueSBjYXNlcywgaG93ZXZlciwgZXh0ZW5zaW9uIG1vZHVsZXMgYXJlIG5vdCBkZXNpZ25lZCB0bworICAgYmUgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UsIGFuZCBtYXkgZmFpbCBpbiBhcmJpdHJhcnkgd2F5cyB3aGVuIHJlbG9hZGVkLgorCisgICBJZiBhIG1vZHVsZSBpbXBvcnRzIG9iamVjdHMgZnJvbSBhbm90aGVyIG1vZHVsZSB1c2luZyA6a2V5d29yZDpgZnJvbWAgLi4uCisgICA6a2V5d29yZDpgaW1wb3J0YCAuLi4sIGNhbGxpbmcgOmZ1bmM6YHJlbG9hZGAgZm9yIHRoZSBvdGhlciBtb2R1bGUgZG9lcyBub3QKKyAgIHJlZGVmaW5lIHRoZSBvYmplY3RzIGltcG9ydGVkIGZyb20gaXQgLS0tIG9uZSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8KKyAgIHJlLWV4ZWN1dGUgdGhlIDprZXl3b3JkOmBmcm9tYCBzdGF0ZW1lbnQsIGFub3RoZXIgaXMgdG8gdXNlIDprZXl3b3JkOmBpbXBvcnRgCisgICBhbmQgcXVhbGlmaWVkIG5hbWVzICgqbW9kdWxlLm5hbWUqKSBpbnN0ZWFkLgorCisgICBJZiBhIG1vZHVsZSBpbnN0YW50aWF0ZXMgaW5zdGFuY2VzIG9mIGEgY2xhc3MsIHJlbG9hZGluZyB0aGUgbW9kdWxlIHRoYXQKKyAgIGRlZmluZXMgdGhlIGNsYXNzIGRvZXMgbm90IGFmZmVjdCB0aGUgbWV0aG9kIGRlZmluaXRpb25zIG9mIHRoZSBpbnN0YW5jZXMgLS0tCisgICB0aGV5IGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkIGNsYXNzIGRlZmluaXRpb24uICBUaGUgc2FtZSBpcyB0cnVlIGZvciBkZXJpdmVkCisgICBjbGFzc2VzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiA6bW9kOmBpbXBvcnRsaWIuYWJjYCAtLSBBYnN0cmFjdCBiYXNlIGNsYXNzZXMgcmVsYXRlZCB0byBpbXBvcnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM3LDggKzIxNCw2IEBACiAgICAgICAgICAgICAgICArLS0gRXhlY3V0aW9uTG9hZGVyIC0tKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBGaWxlTG9hZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFNvdXJjZUxvYWRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFB5TG9hZGVyIChkZXByZWNhdGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFB5UHljTG9hZGVyIChkZXByZWNhdGVkKQogCiAKIC4uIGNsYXNzOjogRmluZGVyCkBAIC0xNTQsNiArMjI5LDEwIEBACiAgICAgICBtb2R1bGUuICBPcmlnaW5hbGx5IHNwZWNpZmllZCBpbiA6cGVwOmAzMDJgLCB0aGlzIG1ldGhvZCB3YXMgbWVhbnQKICAgICAgIGZvciB1c2UgaW4gOmRhdGE6YHN5cy5tZXRhX3BhdGhgIGFuZCBpbiB0aGUgcGF0aC1iYXNlZCBpbXBvcnQgc3Vic3lzdGVtLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogTWV0YVBhdGhGaW5kZXIKIApAQCAtMTYyLDIwICsyNDEsNDYgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIG1ldGhvZDo6IGZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCwgdGFyZ2V0PU5vbmUpCisKKyAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCBmb3IgZmluZGluZyBhIDp0ZXJtOmBzcGVjIDxtb2R1bGUgc3BlYz5gIGZvcgorICAgICAgdGhlIHNwZWNpZmllZCBtb2R1bGUuICBJZiB0aGlzIGlzIGEgdG9wLWxldmVsIGltcG9ydCwgKnBhdGgqIHdpbGwKKyAgICAgIGJlIGBgTm9uZWBgLiAgT3RoZXJ3aXNlLCB0aGlzIGlzIGEgc2VhcmNoIGZvciBhIHN1YnBhY2thZ2Ugb3IKKyAgICAgIG1vZHVsZSBhbmQgKnBhdGgqIHdpbGwgYmUgdGhlIHZhbHVlIG9mIDphdHRyOmBfX3BhdGhfX2AgZnJvbSB0aGUKKyAgICAgIHBhcmVudCBwYWNrYWdlLiBJZiBhIHNwZWMgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4KKyAgICAgIFdoZW4gcGFzc2VkIGluLCBgYHRhcmdldGBgIGlzIGEgbW9kdWxlIG9iamVjdCB0aGF0IHRoZSBmaW5kZXIgbWF5CisgICAgICB1c2UgdG8gbWFrZSBhIG1vcmUgZWR1Y2F0ZWQgYWJvdXQgd2hhdCBzcGVjIHRvIHJldHVybi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgIC4uIG1ldGhvZDo6IGZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQogCi0gICAgICBBbiBhYnN0cmFjdCBtZXRob2QgZm9yIGZpbmRpbmcgYSA6dGVybTpgbG9hZGVyYCBmb3IgdGhlIHNwZWNpZmllZAorICAgICAgQSBsZWdhY3kgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YGxvYWRlcmAgZm9yIHRoZSBzcGVjaWZpZWQKICAgICAgIG1vZHVsZS4gIElmIHRoaXMgaXMgYSB0b3AtbGV2ZWwgaW1wb3J0LCAqcGF0aCogd2lsbCBiZSBgYE5vbmVgYC4KICAgICAgIE90aGVyd2lzZSwgdGhpcyBpcyBhIHNlYXJjaCBmb3IgYSBzdWJwYWNrYWdlIG9yIG1vZHVsZSBhbmQgKnBhdGgqCiAgICAgICB3aWxsIGJlIHRoZSB2YWx1ZSBvZiA6YXR0cjpgX19wYXRoX19gIGZyb20gdGhlIHBhcmVudAogICAgICAgcGFja2FnZS4gSWYgYSBsb2FkZXIgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIAorICAgICAgSWYgOm1ldGg6YGZpbmRfc3BlY2AgaXMgZGVmaW5lZCwgYmFja3dhcmRzLWNvbXBhdGlibGUgZnVuY3Rpb25hbGl0eSBpcworICAgICAgcHJvdmlkZWQuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgTm9uZWBgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuIENhbiB1c2UgOm1ldGg6YGZpbmRfc3BlY2AgdG8gcHJvdmlkZQorICAgICAgICAgZnVuY3Rpb25hbGl0eS4KKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgVXNlIDptZXRoOmBmaW5kX3NwZWNgIGluc3RlYWQuCisKICAgIC4uIG1ldGhvZDo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAogICAgICAgQW4gb3B0aW9uYWwgbWV0aG9kIHdoaWNoLCB3aGVuIGNhbGxlZCwgc2hvdWxkIGludmFsaWRhdGUgYW55IGludGVybmFsCiAgICAgICBjYWNoZSB1c2VkIGJ5IHRoZSBmaW5kZXIuIFVzZWQgYnkgOmZ1bmM6YGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlc2AKICAgICAgIHdoZW4gaW52YWxpZGF0aW5nIHRoZSBjYWNoZXMgb2YgYWxsIGZpbmRlcnMgb24gOmRhdGE6YHN5cy5tZXRhX3BhdGhgLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIGBgTm90SW1wbGVtZW50ZWRgYC4KKwogCiAuLiBjbGFzczo6IFBhdGhFbnRyeUZpbmRlcgogCkBAIC0xODMsMjcgKzI4OCw1MSBAQAogICAgaXQgYmVhcnMgc29tZSBzaW1pbGFyaXRpZXMgdG8gOmNsYXNzOmBNZXRhUGF0aEZpbmRlcmAsIGBgUGF0aEVudHJ5RmluZGVyYGAKICAgIGlzIG1lYW50IGZvciB1c2Ugb25seSB3aXRoaW4gdGhlIHBhdGgtYmFzZWQgaW1wb3J0IHN1YnN5c3RlbSBwcm92aWRlZAogICAgYnkgOmNsYXNzOmBQYXRoRmluZGVyYC4gVGhpcyBBQkMgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YEZpbmRlcmAgZm9yCi0gICBjb21wYXRpYmlsaXR5LgorICAgY29tcGF0aWJpbGl0eSByZWFzb25zIG9ubHkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiBtZXRob2Q6OiBmaW5kX3NwZWMoZnVsbG5hbWUsIHRhcmdldD1Ob25lKQorCisgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgZm9yIGZpbmRpbmcgYSA6dGVybTpgc3BlYyA8bW9kdWxlIHNwZWM+YCBmb3IKKyAgICAgIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiAgVGhlIGZpbmRlciB3aWxsIHNlYXJjaCBmb3IgdGhlIG1vZHVsZSBvbmx5CisgICAgICB3aXRoaW4gdGhlIDp0ZXJtOmBwYXRoIGVudHJ5YCB0byB3aGljaCBpdCBpcyBhc3NpZ25lZC4gIElmIGEgc3BlYworICAgICAgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4gIFdoZW4gcGFzc2VkIGluLCBgYHRhcmdldGBgCisgICAgICBpcyBhIG1vZHVsZSBvYmplY3QgdGhhdCB0aGUgZmluZGVyIG1heSB1c2UgdG8gbWFrZSBhIG1vcmUgZWR1Y2F0ZWQKKyAgICAgIGFib3V0IHdoYXQgc3BlYyB0byByZXR1cm4uCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBtZXRob2Q6OiBmaW5kX2xvYWRlcihmdWxsbmFtZSkKIAotICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YGxvYWRlcmAgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgIEEgbGVnYWN5IG1ldGhvZCBmb3IgZmluZGluZyBhIDp0ZXJtOmBsb2FkZXJgIGZvciB0aGUgc3BlY2lmaWVkCiAgICAgICBtb2R1bGUuICBSZXR1cm5zIGEgMi10dXBsZSBvZiBgYChsb2FkZXIsIHBvcnRpb24pYGAgd2hlcmUgYGBwb3J0aW9uYGAKICAgICAgIGlzIGEgc2VxdWVuY2Ugb2YgZmlsZSBzeXN0ZW0gbG9jYXRpb25zIGNvbnRyaWJ1dGluZyB0byBwYXJ0IG9mIGEgbmFtZXNwYWNlCiAgICAgICBwYWNrYWdlLiBUaGUgbG9hZGVyIG1heSBiZSBgYE5vbmVgYCB3aGlsZSBzcGVjaWZ5aW5nIGBgcG9ydGlvbmBgIHRvCiAgICAgICBzaWduaWZ5IHRoZSBjb250cmlidXRpb24gb2YgdGhlIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyB0byBhIG5hbWVzcGFjZQogICAgICAgcGFja2FnZS4gQW4gZW1wdHkgbGlzdCBjYW4gYmUgdXNlZCBmb3IgYGBwb3J0aW9uYGAgdG8gc2lnbmlmeSB0aGUgbG9hZGVyCi0gICAgICBpcyBub3QgcGFydCBvZiBhIHBhY2thZ2UuIElmIGBgbG9hZGVyYGAgaXMgYGBOb25lYGAgYW5kIGBgcG9ydGlvbmBgIGlzCi0gICAgICB0aGUgZW1wdHkgbGlzdCB0aGVuIG5vIGxvYWRlciBvciBsb2NhdGlvbiBmb3IgYSBuYW1lc3BhY2UgcGFja2FnZSB3ZXJlCi0gICAgICBmb3VuZCAoaS5lLiBmYWlsdXJlIHRvIGZpbmQgYW55dGhpbmcgZm9yIHRoZSBtb2R1bGUpLgorICAgICAgaXMgbm90IHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4gSWYgYGBsb2FkZXJgYCBpcyBgYE5vbmVgYCBhbmQKKyAgICAgIGBgcG9ydGlvbmBgIGlzIHRoZSBlbXB0eSBsaXN0IHRoZW4gbm8gbG9hZGVyIG9yIGxvY2F0aW9uIGZvciBhIG5hbWVzcGFjZQorICAgICAgcGFja2FnZSB3ZXJlIGZvdW5kIChpLmUuIGZhaWx1cmUgdG8gZmluZCBhbnl0aGluZyBmb3IgdGhlIG1vZHVsZSkuCisKKyAgICAgIElmIDptZXRoOmBmaW5kX3NwZWNgIGlzIGRlZmluZWQgdGhlbiBiYWNrd2FyZHMtY29tcGF0aWJsZSBmdW5jdGlvbmFsaXR5IGlzCisgICAgICBwcm92aWRlZC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGAoTm9uZSwgW10pYGAgaW5zdGVhZCBvZiByYWlzaW5nIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorICAgICAgICAgVXNlcyA6bWV0aDpgZmluZF9zcGVjYCB3aGVuIGF2YWlsYWJsZSB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgIFVzZSA6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkLgogCiAgICAuLiBtZXRob2Q6OiBmaW5kX21vZHVsZShmdWxsbmFtZSkKIAogICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgRmluZGVyLmZpbmRfbW9kdWxlYCB3aGljaCBpcwogICAgICAgZXF1aXZhbGVudCB0byBgYHNlbGYuZmluZF9sb2FkZXIoZnVsbG5hbWUpWzBdYGAuCiAKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgIFVzZSA6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkLgorCiAgICAuLiBtZXRob2Q6OiBpbnZhbGlkYXRlX2NhY2hlcygpCiAKICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB3aGljaCwgd2hlbiBjYWxsZWQsIHNob3VsZCBpbnZhbGlkYXRlIGFueSBpbnRlcm5hbApAQCAtMjE2LDkgKzM0NSwyNiBAQAogICAgIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGEgOnRlcm06YGxvYWRlcmAuCiAgICAgU2VlIDpwZXA6YDMwMmAgZm9yIHRoZSBleGFjdCBkZWZpbml0aW9uIGZvciBhIGxvYWRlci4KIAorICAgIC4uIG1ldGhvZDo6IGNyZWF0ZV9tb2R1bGUoc3BlYykKKworICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIG1vZHVsZSBvYmplY3QgdG8gdXNlIHdoZW4KKyAgICAgICBpbXBvcnRpbmcgYSBtb2R1bGUuICBjcmVhdGVfbW9kdWxlKCkgbWF5IGFsc28gcmV0dXJuIGBgTm9uZWBgLAorICAgICAgIGluZGljYXRpbmcgdGhhdCB0aGUgZGVmYXVsdCBtb2R1bGUgY3JlYXRpb24gc2hvdWxkIHRha2UgcGxhY2UKKyAgICAgICBpbnN0ZWFkLgorCisgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgICAuLiBtZXRob2Q6OiBleGVjX21vZHVsZShtb2R1bGUpCisKKyAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCBleGVjdXRlcyB0aGUgbW9kdWxlIGluIGl0cyBvd24gbmFtZXNwYWNlCisgICAgICAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBvciByZWxvYWRlZC4gIFRoZSBtb2R1bGUgc2hvdWxkIGFscmVhZHkKKyAgICAgICBiZSBpbml0aWFsaXplZCB3aGVuIGV4ZWNfbW9kdWxlKCkgaXMgY2FsbGVkLgorCisgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgICAuLiBtZXRob2Q6OiBsb2FkX21vZHVsZShmdWxsbmFtZSkKIAotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgZm9yIGxvYWRpbmcgYSBtb2R1bGUuIElmIHRoZSBtb2R1bGUgY2Fubm90IGJlCisgICAgICAgIEEgbGVnYWN5IG1ldGhvZCBmb3IgbG9hZGluZyBhIG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUKICAgICAgICAgbG9hZGVkLCA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLCBvdGhlcndpc2UgdGhlIGxvYWRlZCBtb2R1bGUgaXMKICAgICAgICAgcmV0dXJuZWQuCiAKQEAgLTIyOSwxMiArMzc1LDExIEBACiAgICAgICAgIGZyb20gdGhlIGltcG9ydC4gSWYgdGhlIGxvYWRlciBpbnNlcnRlZCBhIG1vZHVsZSBhbmQgdGhlIGxvYWQgZmFpbHMsIGl0CiAgICAgICAgIG11c3QgYmUgcmVtb3ZlZCBieSB0aGUgbG9hZGVyIGZyb20gOmRhdGE6YHN5cy5tb2R1bGVzYDsgbW9kdWxlcyBhbHJlYWR5CiAgICAgICAgIGluIDpkYXRhOmBzeXMubW9kdWxlc2AgYmVmb3JlIHRoZSBsb2FkZXIgYmVnYW4gZXhlY3V0aW9uIHNob3VsZCBiZSBsZWZ0Ci0gICAgICAgIGFsb25lLiBUaGUgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgaGFuZGxlcwotICAgICAgICBhbGwgb2YgdGhlc2UgZGV0YWlscy4KKyAgICAgICAgYWxvbmUgKHNlZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgKS4KIAogICAgICAgICBUaGUgbG9hZGVyIHNob3VsZCBzZXQgc2V2ZXJhbCBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUuCiAgICAgICAgIChOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBjaGFuZ2Ugd2hlbiBhIG1vZHVsZSBpcwotICAgICAgICByZWxvYWRlZC4pCisgICAgICAgIHJlbG9hZGVkKToKIAogICAgICAgICAtIDphdHRyOmBfX25hbWVfX2AKICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCkBAIC0yNTQsMjAgKzM5OSw0MiBAQAogICAgICAgICAtIDphdHRyOmBfX3BhY2thZ2VfX2AKICAgICAgICAgICAgIFRoZSBwYXJlbnQgcGFja2FnZSBmb3IgdGhlIG1vZHVsZS9wYWNrYWdlLiBJZiB0aGUgbW9kdWxlIGlzCiAgICAgICAgICAgICB0b3AtbGV2ZWwgdGhlbiBpdCBoYXMgYSB2YWx1ZSBvZiB0aGUgZW1wdHkgc3RyaW5nLiBUaGUKLSAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5zZXRfcGFja2FnZWAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlIGRldGFpbHMKLSAgICAgICAgICAgIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgorICAgICAgICAgICAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgICAgIGRldGFpbHMgZm9yIDphdHRyOmBfX3BhY2thZ2VfX2AuCiAKICAgICAgICAgLSA6YXR0cjpgX19sb2FkZXJfX2AKLSAgICAgICAgICAgIFRoZSBsb2FkZXIgdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuCi0gICAgICAgICAgICAoVGhpcyBpcyBub3Qgc2V0IGJ5IHRoZSBidWlsdC1pbiBpbXBvcnQgbWFjaGluZXJ5LAotICAgICAgICAgICAgYnV0IGl0IHNob3VsZCBiZSBzZXQgd2hlbmV2ZXIgYSA6dGVybTpgbG9hZGVyYCBpcyB1c2VkLikKKyAgICAgICAgICAgIFRoZSBsb2FkZXIgdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuIFRoZQorICAgICAgICAgICAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgICAgIGRldGFpbHMgZm9yIDphdHRyOmBfX3BhY2thZ2VfX2AuCisKKyAgICAgICAgV2hlbiA6bWV0aDpgZXhlY19tb2R1bGVgIGlzIGF2YWlsYWJsZSB0aGVuIGJhY2t3YXJkcy1jb21wYXRpYmxlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQuCisKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YKKyAgICAgICAgICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuIEZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgd2hlbgorICAgICAgICAgICA6bWV0aDpgZXhlY19tb2R1bGVgIGlzIGF2YWlsYWJsZS4KKworICAgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBBUEkgZm9yIGxvYWRpbmcgYSBtb2R1bGUgaXMgOm1ldGg6YGV4ZWNfbW9kdWxlYAorICAgICAgICAgICAoYW5kIG9wdGlvbmFsbHkgOm1ldGg6YGNyZWF0ZV9tb2R1bGVgKS4gIExvYWRlcnMgc2hvdWxkIGltcGxlbWVudAorICAgICAgICAgICBpdCBpbnN0ZWFkIG9mIGxvYWRfbW9kdWxlKCkuICBUaGUgaW1wb3J0IG1hY2hpbmVyeSB0YWtlcyBjYXJlIG9mCisgICAgICAgICAgIGFsbCB0aGUgb3RoZXIgcmVzcG9uc2liaWxpdGllcyBvZiBsb2FkX21vZHVsZSgpIHdoZW4gZXhlY19tb2R1bGUoKQorICAgICAgICAgICBpcyBpbXBsZW1lbnRlZC4KIAogICAgIC4uIG1ldGhvZDo6IG1vZHVsZV9yZXByKG1vZHVsZSkKIAotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZQotICAgICAgICBnaXZlbiBtb2R1bGUncyByZXByLCBhcyBhIHN0cmluZy4KKyAgICAgICAgQSBsZWdhY3kgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKKyAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwciwgYXMgYSBzdHJpbmcuIFRoZSBtb2R1bGUgdHlwZSdzIGRlZmF1bHQgcmVwcigpIHdpbGwKKyAgICAgICAgdXNlIHRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgYXMgYXBwcm9wcmlhdGUuCiAKLSAgICAgICAgLi4gdmVyc2lvbmFkZGVkOiAzLjMKKyAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTWFkZSBvcHRpb25hbCBpbnN0ZWFkIG9mIGFuIGFic3RyYWN0bWV0aG9kLgorCisgICAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgICAgVGhlIGltcG9ydCBtYWNoaW5lcnkgbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LgogCiAKIC4uIGNsYXNzOjogUmVzb3VyY2VMb2FkZXIKQEAgLTI4MiwxMCArNDQ5LDEzIEBACiAgICAgICAgIExvYWRlcnMgdGhhdCBoYXZlIGEgZmlsZS1saWtlIHN0b3JhZ2UgYmFjay1lbmQKICAgICAgICAgdGhhdCBhbGxvd3Mgc3RvcmluZyBhcmJpdHJhcnkgZGF0YQogICAgICAgICBjYW4gaW1wbGVtZW50IHRoaXMgYWJzdHJhY3QgbWV0aG9kIHRvIGdpdmUgZGlyZWN0IGFjY2VzcwotICAgICAgICB0byB0aGUgZGF0YSBzdG9yZWQuIDpleGM6YElPRXJyb3JgIGlzIHRvIGJlIHJhaXNlZCBpZiB0aGUgKnBhdGgqIGNhbm5vdAorICAgICAgICB0byB0aGUgZGF0YSBzdG9yZWQuIDpleGM6YE9TRXJyb3JgIGlzIHRvIGJlIHJhaXNlZCBpZiB0aGUgKnBhdGgqIGNhbm5vdAogICAgICAgICBiZSBmb3VuZC4gVGhlICpwYXRoKiBpcyBleHBlY3RlZCB0byBiZSBjb25zdHJ1Y3RlZCB1c2luZyBhIG1vZHVsZSdzCiAgICAgICAgIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9yIGFuIGl0ZW0gZnJvbSBhIHBhY2thZ2UncyA6YXR0cjpgX19wYXRoX19gLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBPU0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogSW5zcGVjdExvYWRlcgogCkBAIC0yOTQsMTQgKzQ2NCwyMSBAQAogCiAgICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCiAKLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRvIHJldHVybiB0aGUgOmNsYXNzOmBjb2RlYCBvYmplY3QgZm9yIGEgbW9kdWxlLgotICAgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGhhdmUgYSBjb2RlIG9iamVjdAotICAgICAgICAoZS5nLiBidWlsdC1pbiBtb2R1bGUpLiAgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZCBpZiBsb2FkZXIgY2Fubm90Ci0gICAgICAgIGZpbmQgdGhlIHJlcXVlc3RlZCBtb2R1bGUuCisgICAgICAgIFJldHVybiB0aGUgY29kZSBvYmplY3QgZm9yIGEgbW9kdWxlLCBvciBgYE5vbmVgYCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90CisgICAgICAgIGhhdmUgYSBjb2RlIG9iamVjdCAoYXMgd291bGQgYmUgdGhlIGNhc2UsIGZvciBleGFtcGxlLCBmb3IgYSBidWlsdC1pbgorICAgICAgICBtb2R1bGUpLiAgUmFpc2UgYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlmIGxvYWRlciBjYW5ub3QgZmluZCB0aGUKKyAgICAgICAgcmVxdWVzdGVkIG1vZHVsZS4KKworICAgICAgICAuLiBub3RlOjoKKyAgICAgICAgICAgV2hpbGUgdGhlIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdAorICAgICAgICAgICBpdCBiZSBvdmVycmlkZGVuIGlmIHBvc3NpYmxlIGZvciBwZXJmb3JtYW5jZS4KIAogICAgICAgICAuLiBpbmRleDo6CiAgICAgICAgICAgIHNpbmdsZTogdW5pdmVyc2FsIG5ld2xpbmVzOyBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZSBtZXRob2QKIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBObyBsb25nZXIgYWJzdHJhY3QgYW5kIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQuCisKICAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIHNvdXJjZSBvZiBhIG1vZHVsZS4gSXQgaXMgcmV0dXJuZWQgYXMKQEAgLTMxMCwxMiArNDg3LDQyIEBACiAgICAgICAgIGlmIG5vIHNvdXJjZSBpcyBhdmFpbGFibGUgKGUuZy4gYSBidWlsdC1pbiBtb2R1bGUpLiBSYWlzZXMKICAgICAgICAgOmV4YzpgSW1wb3J0RXJyb3JgIGlmIHRoZSBsb2FkZXIgY2Fubm90IGZpbmQgdGhlIG1vZHVsZSBzcGVjaWZpZWQuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAgICAgLi4gbWV0aG9kOjogaXNfcGFja2FnZShmdWxsbmFtZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIGEgdHJ1ZSB2YWx1ZSBpZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgYQogICAgICAgICBmYWxzZSB2YWx1ZSBvdGhlcndpc2UuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQgaWYgdGhlCiAgICAgICAgIDp0ZXJtOmBsb2FkZXJgIGNhbm5vdCBmaW5kIHRoZSBtb2R1bGUuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCisgICAgLi4gbWV0aG9kOjogc291cmNlX3RvX2NvZGUoZGF0YSwgcGF0aD0nPHN0cmluZz4nKQorCisgICAgICAgIENyZWF0ZSBhIGNvZGUgb2JqZWN0IGZyb20gUHl0aG9uIHNvdXJjZS4KKworICAgICAgICBUaGUgKmRhdGEqIGFyZ3VtZW50IGNhbiBiZSB3aGF0ZXZlciB0aGUgOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uCisgICAgICAgIHN1cHBvcnRzIChpLmUuIHN0cmluZyBvciBieXRlcykuIFRoZSAqcGF0aCogYXJndW1lbnQgc2hvdWxkIGJlCisgICAgICAgIHRoZSAicGF0aCIgdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIG9yaWdpbmF0ZWQgZnJvbSwgd2hpY2ggY2FuIGJlIGFuCisgICAgICAgIGFic3RyYWN0IGNvbmNlcHQgKGUuZy4gbG9jYXRpb24gaW4gYSB6aXAgZmlsZSkuCisKKyAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgICAuLiBtZXRob2Q6OiBleGVjX21vZHVsZShtb2R1bGUpCisKKyAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYC4KKworICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCisKKyAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgTG9hZGVyLmxvYWRfbW9kdWxlYC4KKworICAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgICB1c2UgOm1ldGg6YGV4ZWNfbW9kdWxlYCBpbnN0ZWFkLgorCiAKIC4uIGNsYXNzOjogRXhlY3V0aW9uTG9hZGVyCiAKQEAgLTMzMyw2ICs1NDAsOSBAQAogICAgICAgICB0aGUgc291cmNlIGZpbGUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGJ5dGVjb2RlIHdhcyB1c2VkIHRvIGxvYWQgdGhlCiAgICAgICAgIG1vZHVsZS4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKIAogLi4gY2xhc3M6OiBGaWxlTG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQogCkBAIC0zNTcsMTMgKzU2NywxNiBAQAogCiAgICAgICBDYWxscyBzdXBlcidzIGBgbG9hZF9tb2R1bGUoKWBgLgogCisgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICBVc2UgOm1ldGg6YExvYWRlci5leGVjX21vZHVsZWAgaW5zdGVhZC4KKwogICAgLi4gbWV0aG9kOjogZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQogCiAgICAgICBSZXR1cm5zIDphdHRyOmBwYXRoYC4KIAogICAgLi4gbWV0aG9kOjogZ2V0X2RhdGEocGF0aCkKIAotICAgICAgUmV0dXJucyB0aGUgb3BlbiwgYmluYXJ5IGZpbGUgZm9yICpwYXRoKi4KKyAgICAgIFJlYWRzICpwYXRoKiBhcyBhIGJpbmFyeSBmaWxlIGFuZCByZXR1cm5zIHRoZSBieXRlcyBmcm9tIGl0LgogCiAKIC4uIGNsYXNzOjogU291cmNlTG9hZGVyCkBAIC0zNzgsNyArNTkxLDggQEAKICAgICAgICAgICBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiAKICAgICBUaGUgYWJzdHJhY3QgbWV0aG9kcyBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgYXJlIHRvIGFkZCBvcHRpb25hbCBieXRlY29kZQotICAgIGZpbGUgc3VwcG9ydC4gTm90IGltcGxlbWVudGluZyB0aGVzZSBvcHRpb25hbCBtZXRob2RzIGNhdXNlcyB0aGUgbG9hZGVyIHRvCisgICAgZmlsZSBzdXBwb3J0LiBOb3QgaW1wbGVtZW50aW5nIHRoZXNlIG9wdGlvbmFsIG1ldGhvZHMgKG9yIGNhdXNpbmcgdGhlbSB0bworICAgIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgKSBjYXVzZXMgdGhlIGxvYWRlciB0bwogICAgIG9ubHkgd29yayB3aXRoIHNvdXJjZSBjb2RlLiBJbXBsZW1lbnRpbmcgdGhlIG1ldGhvZHMgYWxsb3dzIHRoZSBsb2FkZXIgdG8KICAgICB3b3JrIHdpdGggc291cmNlICphbmQqIGJ5dGVjb2RlIGZpbGVzOyBpdCBkb2VzIG5vdCBhbGxvdyBmb3IgKnNvdXJjZWxlc3MqCiAgICAgbG9hZGluZyB3aGVyZSBvbmx5IGJ5dGVjb2RlIGlzIHByb3ZpZGVkLiAgQnl0ZWNvZGUgZmlsZXMgYXJlIGFuCkBAIC0zOTUsMTAgKzYwOSwxMyBAQAogICAgICAgICAtIGBgJ3NpemUnYGAgKG9wdGlvbmFsKTogdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogCiAgICAgICAgIEFueSBvdGhlciBrZXlzIGluIHRoZSBkaWN0aW9uYXJ5IGFyZSBpZ25vcmVkLCB0byBhbGxvdyBmb3IgZnV0dXJlCi0gICAgICAgIGV4dGVuc2lvbnMuCisgICAgICAgIGV4dGVuc2lvbnMuIElmIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLCA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQuCiAKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2UgOmV4YzpgT1NFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogICAgIC4uIG1ldGhvZDo6IHBhdGhfbXRpbWUocGF0aCkKIAogICAgICAgICBPcHRpb25hbCBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZQpAQCAtNDA3LDcgKzYyNCwxMCBAQAogICAgICAgICAuLiBkZXByZWNhdGVkOjogMy4zCiAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIDptZXRoOmBwYXRoX3N0YXRzYC4gIFlvdSBkb24ndAogICAgICAgICAgICBoYXZlIHRvIGltcGxlbWVudCBpdCwgYnV0IGl0IGlzIHN0aWxsIGF2YWlsYWJsZSBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAgICBwdXJwb3Nlcy4KKyAgICAgICAgICAgcHVycG9zZXMuIFJhaXNlIDpleGM6YE9TRXJyb3JgIGlmIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgorCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YE9TRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCiAKICAgICAuLiBtZXRob2Q6OiBzZXRfZGF0YShwYXRoLCBkYXRhKQogCkBAIC00MTksMTMgKzYzOSwyNSBAQAogICAgICAgICAoOmF0dHI6YGVycm5vLkVBQ0NFU2AvOmV4YzpgUGVybWlzc2lvbkVycm9yYCksIGRvIG5vdCBwcm9wYWdhdGUgdGhlCiAgICAgICAgIGV4Y2VwdGlvbi4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBObyBsb25nZXIgcmFpc2VzIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdoZW4gY2FsbGVkLgorCiAgICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCiAKICAgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YEluc3BlY3RMb2FkZXIuZ2V0X2NvZGVgLgogCisgICAgLi4gbWV0aG9kOjogZXhlY19tb2R1bGUobW9kdWxlKQorCisgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5leGVjX21vZHVsZWAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCiAKLSAgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5sb2FkX21vZHVsZWAuCisgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5sb2FkX21vZHVsZWAuCisKKyAgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICAgVXNlIDptZXRoOmBleGVjX21vZHVsZWAgaW5zdGVhZC4KIAogICAgIC4uIG1ldGhvZDo6IGdldF9zb3VyY2UoZnVsbG5hbWUpCiAKQEAgLTQ0MCwxNDIgKzY3Miw2IEBACiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBlbmQgaW4gYGBfX2luaXRfX2BgLgogCiAKLS4uIGNsYXNzOjogUHlMb2FkZXIKLQotICAgIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5oZXJpdGluZyBmcm9tCi0gICAgOmNsYXNzOmBFeGVjdXRpb25Mb2FkZXJgIGFuZAotICAgIDpjbGFzczpgUmVzb3VyY2VMb2FkZXJgIGRlc2lnbmVkIHRvIGVhc2UgdGhlIGxvYWRpbmcgb2YKLSAgICBQeXRob24gc291cmNlIG1vZHVsZXMgKGJ5dGVjb2RlIGlzIG5vdCBoYW5kbGVkOyBzZWUKLSAgICA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgZm9yIGEgc291cmNlL2J5dGVjb2RlIEFCQykuIEEgc3ViY2xhc3MKLSAgICBpbXBsZW1lbnRpbmcgdGhpcyBBQkMgd2lsbCBvbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgZXhwb3NpbmcgaG93IHRoZSBzb3VyY2UKLSAgICBjb2RlIGlzIHN0b3JlZDsgYWxsIG90aGVyIGRldGFpbHMgZm9yIGxvYWRpbmcgUHl0aG9uIHNvdXJjZSBjb2RlIHdpbGwgYmUKLSAgICBoYW5kbGVkIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgb2Yga2V5IG1ldGhvZHMuCi0KLSAgICAuLiBkZXByZWNhdGVkOjogMy4yCi0gICAgICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIGlzCi0gICAgICAgIHNsYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40LiBTZWUgYmVsb3cgZm9yIGhvdyB0byBjcmVhdGUgYQotICAgICAgICBzdWJjbGFzcyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHMuCi0KLSAgICBJZiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMSBpcyByZXF1aXJlZCwgdGhlbiB1c2UgdGhlIGZvbGxvd2luZyBpZGlvbQotICAgIHRvIGltcGxlbWVudCBhIHN1YmNsYXNzIHRoYXQgd2lsbCB3b3JrIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzIChtYWtlIHN1cmUKLSAgICB0byBpbXBsZW1lbnQgOm1ldGg6YEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWVgKTo6Ci0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBTb3VyY2VMb2FkZXIKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBQeUxvYWRlciBhcyBTb3VyY2VMb2FkZXIKLQotCi0gICAgICAgIGNsYXNzIEN1c3RvbUxvYWRlcihTb3VyY2VMb2FkZXIpOgotICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZS4iIiIKLSAgICAgICAgICAgICAgICAjIEltcGxlbWVudCAuLi4KLQotICAgICAgICAgICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAiIiJJbXBsZW1lbnQgc291cmNlX3BhdGggaW4gdGVybXMgb2YgZ2V0X2ZpbGVuYW1lLiIiIgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICIiIkltcGxlbWVudCBpc19wYWNrYWdlIGJ5IGxvb2tpbmcgZm9yIGFuIF9faW5pdF9fIGZpbGUKLSAgICAgICAgICAgICAgICBuYW1lIGFzIHJldHVybmVkIGJ5IGdldF9maWxlbmFtZS4iIiIKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLQotICAgIC4uIG1ldGhvZDo6IHNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBjb2RlIGZvciBhCi0gICAgICAgIG1vZHVsZS4gU2hvdWxkIHJldHVybiBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZS4KLSAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGtub3dzIGl0IGNhbm5vdCBoYW5kbGUgdGhlCi0gICAgICAgIG1vZHVsZS4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWVgIHRoYXQKLSAgICAgICAgcmVsaWVzIG9uIDptZXRoOmBzb3VyY2VfcGF0aGAuIElmIDptZXRoOmBzb3VyY2VfcGF0aGAgcmV0dXJucwotICAgICAgICBgYE5vbmVgYCwgdGhlbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgotCi0gICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgCi0gICAgICAgIHRoYXQgbG9hZHMgUHl0aG9uIHNvdXJjZSBjb2RlLiBBbGwgbmVlZGVkIGluZm9ybWF0aW9uIGNvbWVzIGZyb20gdGhlCi0gICAgICAgIGFic3RyYWN0IG1ldGhvZHMgcmVxdWlyZWQgYnkgdGhpcyBBQkMuIFRoZSBvbmx5IHBlcnRpbmVudCBhc3N1bXB0aW9uCi0gICAgICAgIG1hZGUgYnkgdGhpcyBtZXRob2QgaXMgdGhhdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlCi0gICAgICAgIDphdHRyOmBfX3BhdGhfX2AgaXMgc2V0IHRvIGBgW29zLnBhdGguZGlybmFtZShfX2ZpbGVfXyldYGAuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfY29kZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGVgIHRoYXQgY3JlYXRlcyBjb2RlIG9iamVjdHMKLSAgICAgICAgZnJvbSBQeXRob24gc291cmNlIGNvZGUsIGJ5IHJlcXVlc3RpbmcgdGhlIHNvdXJjZSBjb2RlICh1c2luZwotICAgICAgICA6bWV0aDpgc291cmNlX3BhdGhgIGFuZCA6bWV0aDpgZ2V0X2RhdGFgKSBhbmQgY29tcGlsaW5nIGl0IHdpdGggdGhlCi0gICAgICAgIGJ1aWx0LWluIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbi4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9zb3VyY2UoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgLiBVc2VzCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlJlc291cmNlTG9hZGVyLmdldF9kYXRhYCBhbmQgOm1ldGg6YHNvdXJjZV9wYXRoYAotICAgICAgICB0byBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgSXQgdHJpZXMgdG8gZ3Vlc3MgdGhlIHNvdXJjZSBlbmNvZGluZyB1c2luZwotICAgICAgICA6ZnVuYzpgdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nYC4KLQotCi0uLiBjbGFzczo6IFB5UHljTG9hZGVyCi0KLSAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGluaGVyaXRpbmcgZnJvbSA6Y2xhc3M6YFB5TG9hZGVyYC4KLSAgICBUaGlzIEFCQyBpcyBtZWFudCB0byBoZWxwIGluIGNyZWF0aW5nIGxvYWRlcnMgdGhhdCBzdXBwb3J0IGJvdGggUHl0aG9uCi0gICAgc291cmNlIGFuZCBieXRlY29kZS4KLQotICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKLSAgICAgICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIDpjbGFzczpgU291cmNlTG9hZGVyYCBhbmQgdG8KLSAgICAgICAgcHJvcGVybHkgc3VwcG9ydCA6cGVwOmAzMTQ3YC4gSWYgY29tcGF0aWJpbGl0eSBpcyByZXF1aXJlZCB3aXRoCi0gICAgICAgIFB5dGhvbiAzLjEsIGltcGxlbWVudCBib3RoIDpjbGFzczpgU291cmNlTG9hZGVyYCBhbmQgOmNsYXNzOmBQeUxvYWRlcmA7Ci0gICAgICAgIGluc3RydWN0aW9ucyBvbiBob3cgdG8gZG8gc28gYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgotICAgICAgICA6Y2xhc3M6YFB5TG9hZGVyYC4gRG8gbm90ZSB0aGF0IHRoaXMgc29sdXRpb24gd2lsbCBub3Qgc3VwcG9ydAotICAgICAgICBzb3VyY2VsZXNzL2J5dGVjb2RlLW9ubHkgbG9hZGluZzsgb25seSBzb3VyY2UgKmFuZCogYnl0ZWNvZGUgbG9hZGluZy4KLQotICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICAgVXBkYXRlZCB0byBwYXJzZSAoYnV0IG5vdCB1c2UpIHRoZSBuZXcgc291cmNlIHNpemUgZmllbGQgaW4gYnl0ZWNvZGUKLSAgICAgICBmaWxlcyB3aGVuIHJlYWRpbmcgYW5kIHRvIHdyaXRlIG91dCB0aGUgZmllbGQgcHJvcGVybHkgd2hlbiB3cml0aW5nLgotCi0gICAgLi4gbWV0aG9kOjogc291cmNlX210aW1lKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHNvdXJjZQotICAgICAgICBjb2RlIG9mIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgc2hvdWxkIGJlIGFuCi0gICAgICAgIGludGVnZXIuIElmIHRoZXJlIGlzIG5vIHNvdXJjZSBjb2RlLCByZXR1cm4gYGBOb25lYGAuIElmIHRoZQotICAgICAgICBtb2R1bGUgY2Fubm90IGJlIGZvdW5kIHRoZW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IGJ5dGVjb2RlX3BhdGgoZnVsbG5hbWUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIHBhdGggdG8gdGhlIGJ5dGVjb2RlIGZvciB0aGUKLSAgICAgICAgc3BlY2lmaWVkIG1vZHVsZSwgaWYgaXQgZXhpc3RzLiBJdCByZXR1cm5zIGBgTm9uZWBgCi0gICAgICAgIGlmIG5vIGJ5dGVjb2RlIGV4aXN0cyAoeWV0KS4KLSAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGtub3dzIGl0IGNhbm5vdCBoYW5kbGUgdGhlCi0gICAgICAgIG1vZHVsZS4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCB0aGF0IHJlbGllcyBvbgotICAgICAgICA6bWV0aDpgUHlMb2FkZXIuc291cmNlX3BhdGhgIGFuZCA6bWV0aDpgYnl0ZWNvZGVfcGF0aGAuCi0gICAgICAgIElmIDptZXRoOmBzb3VyY2VfcGF0aGAgcmV0dXJucyBhIHBhdGgsIHRoZW4gdGhhdCB2YWx1ZSBpcyByZXR1cm5lZC4KLSAgICAgICAgRWxzZSBpZiA6bWV0aDpgYnl0ZWNvZGVfcGF0aGAgcmV0dXJucyBhIHBhdGgsIHRoYXQgcGF0aCB3aWxsIGJlCi0gICAgICAgIHJldHVybmVkLiBJZiBhIHBhdGggaXMgbm90IGF2YWlsYWJsZSBmcm9tIGJvdGggbWV0aG9kcywKLSAgICAgICAgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IHdyaXRlX2J5dGVjb2RlKGZ1bGxuYW1lLCBieXRlY29kZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggaGFzIHRoZSBsb2FkZXIgd3JpdGUgKmJ5dGVjb2RlKiBmb3IgZnV0dXJlCi0gICAgICAgIHVzZS4gSWYgdGhlIGJ5dGVjb2RlIGlzIHdyaXR0ZW4sIHJldHVybiBgYFRydWVgYC4gUmV0dXJuCi0gICAgICAgIGBgRmFsc2VgYCBpZiB0aGUgYnl0ZWNvZGUgY291bGQgbm90IGJlIHdyaXR0ZW4uIFRoaXMgbWV0aG9kCi0gICAgICAgIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIDpkYXRhOmBzeXMuZG9udF93cml0ZV9ieXRlY29kZWAgaXMgdHJ1ZS4KLSAgICAgICAgVGhlICpieXRlY29kZSogYXJndW1lbnQgc2hvdWxkIGJlIGEgYnl0ZXMgc3RyaW5nIG9yIGJ5dGVzIGFycmF5LgotCi0KIDptb2Q6YGltcG9ydGxpYi5tYWNoaW5lcnlgIC0tIEltcG9ydGVycyBhbmQgcGF0aCBob29rcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTY0Miw2ICs3MzgsMTAgQEAKICAgICBPbmx5IGNsYXNzIG1ldGhvZHMgYXJlIGRlZmluZWQgYnkgdGhpcyBjbGFzcyB0byBhbGxldmlhdGUgdGhlIG5lZWQgZm9yCiAgICAgaW5zdGFudGlhdGlvbi4KIAorICAgIC4uIG5vdGU6OgorICAgICAgIER1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBDLUFQSSwgZm9yIG5vdworICAgICAgIEJ1aWx0aW5JbXBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgOm1ldGg6YExvYWRlci5leGVjX21vZHVsZWAuCisKIAogLi4gY2xhc3M6OiBGcm96ZW5JbXBvcnRlcgogCkBAIC02NzIsMjQgKzc3MiwzNyBAQAogICAgT25seSBjbGFzcyBtZXRob2RzIGFyZSBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgdG8gYWxsZXZpYXRlIHRoZSBuZWVkIGZvcgogICAgaW5zdGFudGlhdGlvbi4KIAorICAgLi4gY2xhc3NtZXRob2Q6OiBmaW5kX3NwZWMoZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpCisKKyAgICAgIENsYXNzIG1ldGhvZCB0aGF0IGF0dGVtcHRzIHRvIGZpbmQgYSA6dGVybTpgc3BlYyA8bW9kdWxlIHNwZWM+YAorICAgICAgZm9yIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGJ5ICpmdWxsbmFtZSogb24gOmRhdGE6YHN5cy5wYXRoYCBvciwgaWYKKyAgICAgIGRlZmluZWQsIG9uICpwYXRoKi4gRm9yIGVhY2ggcGF0aCBlbnRyeSB0aGF0IGlzIHNlYXJjaGVkLAorICAgICAgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBpcyBjaGVja2VkLiBJZiBhIG5vbi1mYWxzZSBvYmplY3QKKyAgICAgIGlzIGZvdW5kIHRoZW4gaXQgaXMgdXNlZCBhcyB0aGUgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYCB0byBsb29rCisgICAgICBmb3IgdGhlIG1vZHVsZSBiZWluZyBzZWFyY2hlZCBmb3IuIElmIG5vIGVudHJ5IGlzIGZvdW5kIGluCisgICAgICA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLCB0aGVuIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgaXMKKyAgICAgIHNlYXJjaGVkIGZvciBhIGZpbmRlciBmb3IgdGhlIHBhdGggZW50cnkgYW5kLCBpZiBmb3VuZCwgaXMgc3RvcmVkCisgICAgICBpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGFsb25nIHdpdGggYmVpbmcgcXVlcmllZCBhYm91dAorICAgICAgdGhlIG1vZHVsZS4gSWYgbm8gZmluZGVyIGlzIGV2ZXIgZm91bmQgdGhlbiBgYE5vbmVgYCBpcyBib3RoCisgICAgICBzdG9yZWQgaW4gdGhlIGNhY2hlIGFuZCByZXR1cm5lZC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgIC4uIGNsYXNzbWV0aG9kOjogZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGg9Tm9uZSkKIAotICAgICBDbGFzcyBtZXRob2QgdGhhdCBhdHRlbXB0cyB0byBmaW5kIGEgOnRlcm06YGxvYWRlcmAgZm9yIHRoZSBtb2R1bGUKLSAgICAgc3BlY2lmaWVkIGJ5ICpmdWxsbmFtZSogb24gOmRhdGE6YHN5cy5wYXRoYCBvciwgaWYgZGVmaW5lZCwgb24KLSAgICAgKnBhdGgqLiBGb3IgZWFjaCBwYXRoIGVudHJ5IHRoYXQgaXMgc2VhcmNoZWQsCi0gICAgIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgaXMgY2hlY2tlZC4gSWYgYSBub24tZmFsc2Ugb2JqZWN0IGlzCi0gICAgIGZvdW5kIHRoZW4gaXQgaXMgdXNlZCBhcyB0aGUgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYCB0byBsb29rIGZvciB0aGUKLSAgICAgbW9kdWxlIGJlaW5nIHNlYXJjaGVkIGZvci4gSWYgbm8gZW50cnkgaXMgZm91bmQgaW4KLSAgICAgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCwgdGhlbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGlzCi0gICAgIHNlYXJjaGVkIGZvciBhIGZpbmRlciBmb3IgdGhlIHBhdGggZW50cnkgYW5kLCBpZiBmb3VuZCwgaXMgc3RvcmVkIGluCi0gICAgIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYWxvbmcgd2l0aCBiZWluZyBxdWVyaWVkIGFib3V0IHRoZQotICAgICBtb2R1bGUuIElmIG5vIGZpbmRlciBpcyBldmVyIGZvdW5kIHRoZW4gYGBOb25lYGAgaXMgYm90aCBzdG9yZWQgaW4KLSAgICAgdGhlIGNhY2hlIGFuZCByZXR1cm5lZC4KKyAgICAgIEEgbGVnYWN5IHdyYXBwZXIgYXJvdW5kIDptZXRoOmBmaW5kX3NwZWNgLgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICBVc2UgOm1ldGg6YGZpbmRfc3BlY2AgaW5zdGVhZC4KIAogICAgLi4gY2xhc3NtZXRob2Q6OiBpbnZhbGlkYXRlX2NhY2hlcygpCiAKLSAgICAgQ2FsbHMgOm1ldGg6YGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmludmFsaWRhdGVfY2FjaGVzYCBvbiBhbGwKLSAgICAgZmluZGVycyBzdG9yZWQgaW4gOmF0dHI6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYC4KKyAgICAgIENhbGxzIDptZXRoOmBpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5pbnZhbGlkYXRlX2NhY2hlc2Agb24gYWxsCisgICAgICBmaW5kZXJzIHN0b3JlZCBpbiA6YXR0cjpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQ2FsbHMgb2JqZWN0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZworICAgICAgZGlyZWN0b3J5IGZvciBgYCcnYGAgKGkuZS4gdGhlIGVtcHR5IHN0cmluZykuCiAKIAogLi4gY2xhc3M6OiBGaWxlRmluZGVyKHBhdGgsIFwqbG9hZGVyX2RldGFpbHMpCkBAIC03MjEsNiArODM0LDEyIEBACiAKICAgICAgIFRoZSBwYXRoIHRoZSBmaW5kZXIgd2lsbCBzZWFyY2ggaW4uCiAKKyAgIC4uIG1ldGhvZDo6IGZpbmRfc3BlYyhmdWxsbmFtZSwgdGFyZ2V0PU5vbmUpCisKKyAgICAgIEF0dGVtcHQgdG8gZmluZCB0aGUgc3BlYyB0byBoYW5kbGUgKmZ1bGxuYW1lKiB3aXRoaW4gOmF0dHI6YHBhdGhgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgLi4gbWV0aG9kOjogZmluZF9sb2FkZXIoZnVsbG5hbWUpCiAKICAgICAgIEF0dGVtcHQgdG8gZmluZCB0aGUgbG9hZGVyIHRvIGhhbmRsZSAqZnVsbG5hbWUqIHdpdGhpbiA6YXR0cjpgcGF0aGAuCkBAIC03NjgsNiArODg3LDExIEBACiAKICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5zZXRfZGF0YWAuCiAKKyAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKG5hbWU9Tm9uZSkKKworICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCB3aGVyZQorICAgICAgc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGxvYWQgaXMgb3B0aW9uYWwuCisKIAogLi4gY2xhc3M6OiBTb3VyY2VsZXNzRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIApAQCAtODAyLDEwICs5MjYsMTUgQEAKICAgICAgIFJldHVybnMgYGBOb25lYGAgYXMgYnl0ZWNvZGUgZmlsZXMgaGF2ZSBubyBzb3VyY2Ugd2hlbiB0aGlzIGxvYWRlciBpcwogICAgICAgdXNlZC4KIAorICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUobmFtZT1Ob25lKQorCisgICBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIHdoZXJlCisgICBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gbG9hZCBpcyBvcHRpb25hbC4KKwogCiAuLiBjbGFzczo6IEV4dGVuc2lvbkZpbGVMb2FkZXIoZnVsbG5hbWUsIHBhdGgpCiAKLSAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXJgIGZvcgorICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuRXhlY3V0aW9uTG9hZGVyYCBmb3IKICAgIGV4dGVuc2lvbiBtb2R1bGVzLgogCiAgICBUaGUgKmZ1bGxuYW1lKiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbG9hZGVyIGlzIHRvCkBAIC04MjEsMTEgKzk1MCwxNSBAQAogCiAgICAgICBQYXRoIHRvIHRoZSBleHRlbnNpb24gbW9kdWxlLgogCi0gICAuLiBtZXRob2Q6OiBsb2FkX21vZHVsZShmdWxsbmFtZSkKKyAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKG5hbWU9Tm9uZSkKIAogICAgICAgTG9hZHMgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaWYgYW5kIG9ubHkgaWYgKmZ1bGxuYW1lKiBpcyB0aGUgc2FtZSBhcwogICAgICAgOmF0dHI6YG5hbWVgIG9yIGlzIGBgTm9uZWBgLgogCisgICAgICAuLiBub3RlOjoKKyAgICAgICAgIER1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBDLUFQSSwgZm9yIG5vdworICAgICAgICAgRXh0ZW5zaW9uRmlsZUxvYWRlciBkb2VzIG5vdCBpbXBsZW1lbnQgOm1ldGg6YExvYWRlci5leGVjX21vZHVsZWAuCisKICAgIC4uIG1ldGhvZDo6IGlzX3BhY2thZ2UoZnVsbG5hbWUpCiAKICAgICAgIFJldHVybnMgYGBUcnVlYGAgaWYgdGhlIGZpbGUgcGF0aCBwb2ludHMgdG8gYSBwYWNrYWdlJ3MgYGBfX2luaXRfX2BgCkBAIC04MzksNiArOTcyLDcwIEBACiAKICAgICAgIFJldHVybnMgYGBOb25lYGAgYXMgZXh0ZW5zaW9uIG1vZHVsZXMgZG8gbm90IGhhdmUgc291cmNlIGNvZGUuCiAKKyAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKKworICAgICAgUmV0dXJucyA6YXR0cjpgcGF0aGAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGNsYXNzOjogTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBsb2FkZXJfc3RhdGU9Tm9uZSwgaXNfcGFja2FnZT1Ob25lKQorCisgICBBIHNwZWNpZmljYXRpb24gZm9yIGEgbW9kdWxlJ3MgaW1wb3J0LXN5c3RlbS1yZWxhdGVkIHN0YXRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gYXR0cmlidXRlOjogbmFtZQorCisgICAoYGBfX25hbWVfX2BgKQorCisgICBBIHN0cmluZyBmb3IgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxvYWRlcgorCisgICAoYGBfX2xvYWRlcl9fYGApCisKKyAgIFRoZSBsb2FkZXIgdG8gdXNlIGZvciBsb2FkaW5nLiAgRm9yIG5hbWVzcGFjZSBwYWNrYWdlcyB0aGlzIHNob3VsZCBiZQorICAgc2V0IHRvIE5vbmUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG9yaWdpbgorCisgICAoYGBfX2ZpbGVfX2BgKQorCisgICBOYW1lIG9mIHRoZSBwbGFjZSBmcm9tIHdoaWNoIHRoZSBtb2R1bGUgaXMgbG9hZGVkLCBlLmcuICJidWlsdGluIiBmb3IKKyAgIGJ1aWx0LWluIG1vZHVsZXMgYW5kIHRoZSBmaWxlbmFtZSBmb3IgbW9kdWxlcyBsb2FkZWQgZnJvbSBzb3VyY2UuCisgICBOb3JtYWxseSAib3JpZ2luIiBzaG91bGQgYmUgc2V0LCBidXQgaXQgbWF5IGJlIE5vbmUgKHRoZSBkZWZhdWx0KQorICAgd2hpY2ggaW5kaWNhdGVzIGl0IGlzIHVuc3BlY2lmaWVkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworCisgICAoYGBfX3BhdGhfX2BgKQorCisgICBMaXN0IG9mIHN0cmluZ3MgZm9yIHdoZXJlIHRvIGZpbmQgc3VibW9kdWxlcywgaWYgYSBwYWNrYWdlIChOb25lCisgICBvdGhlcndpc2UpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsb2FkZXJfc3RhdGUKKworICAgQ29udGFpbmVyIG9mIGV4dHJhIG1vZHVsZS1zcGVjaWZpYyBkYXRhIGZvciB1c2UgZHVyaW5nIGxvYWRpbmcgKG9yCisgICBOb25lKS4KKworICAgLi4gYXR0cmlidXRlOjogY2FjaGVkCisKKyAgIChgYF9fY2FjaGVkX19gYCkKKworICAgU3RyaW5nIGZvciB3aGVyZSB0aGUgY29tcGlsZWQgbW9kdWxlIHNob3VsZCBiZSBzdG9yZWQgKG9yIE5vbmUpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBwYXJlbnQKKworICAgKGBgX19wYWNrYWdlX19gYCkKKworICAgKFJlYWQtb25seSkgRnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gd2hpY2ggdGhlIG1vZHVsZQorICAgYmVsb25ncyBhcyBhIHN1Ym1vZHVsZSAob3IgTm9uZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGhhc19sb2NhdGlvbgorCisgICBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIG1vZHVsZSdzICJvcmlnaW4iCisgICBhdHRyaWJ1dGUgcmVmZXJzIHRvIGEgbG9hZGFibGUgbG9jYXRpb24uCiAKIDptb2Q6YGltcG9ydGxpYi51dGlsYCAtLSBVdGlsaXR5IGNvZGUgZm9yIGltcG9ydGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NDksNiArMTA0Niw1MSBAQAogVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIHZhcmlvdXMgb2JqZWN0cyB0aGF0IGhlbHAgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZgogYW4gOnRlcm06YGltcG9ydGVyYC4KIAorLi4gYXR0cmlidXRlOjogTUFHSUNfTlVNQkVSCisKKyAgIFRoZSBieXRlcyB3aGljaCByZXByZXNlbnQgdGhlIGJ5dGVjb2RlIHZlcnNpb24gbnVtYmVyLiBJZiB5b3UgbmVlZCBoZWxwIHdpdGgKKyAgIGxvYWRpbmcvd3JpdGluZyBieXRlY29kZSB0aGVuIGNvbnNpZGVyIDpjbGFzczpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBjYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZT1Ob25lKQorCisgICBSZXR1cm4gdGhlIDpwZXA6YDMxNDdgIHBhdGggdG8gdGhlIGJ5dGUtY29tcGlsZWQgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICBzb3VyY2UgKnBhdGgqLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcyBgYC9mb28vYmFyL2Jhei5weWBgIHRoZSByZXR1cm4KKyAgIHZhbHVlIHdvdWxkIGJlIGBgL2Zvby9iYXIvX19weWNhY2hlX18vYmF6LmNweXRob24tMzIucHljYGAgZm9yIFB5dGhvbiAzLjIuCisgICBUaGUgYGBjcHl0aG9uLTMyYGAgc3RyaW5nIGNvbWVzIGZyb20gdGhlIGN1cnJlbnQgbWFnaWMgdGFnIChzZWUKKyAgIDpmdW5jOmBnZXRfdGFnYDsgaWYgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkIHRoZW4KKyAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdpbGwgYmUgcmFpc2VkKS4gIFRoZSByZXR1cm5lZCBwYXRoIHdpbGwgZW5kIGluCisgICBgYC5weWNgYCB3aGVuIGBgX19kZWJ1Z19fYGAgaXMgYGBUcnVlYGAgb3IgYGAucHlvYGAgZm9yIGFuIG9wdGltaXplZCBQeXRob24KKyAgIChpLmUuIGBgX19kZWJ1Z19fYGAgaXMgYGBGYWxzZWBgKS4gIEJ5IHBhc3NpbmcgaW4gYGBUcnVlYGAgb3IgYGBGYWxzZWBgIGZvcgorICAgKmRlYnVnX292ZXJyaWRlKiB5b3UgY2FuIG92ZXJyaWRlIHRoZSBzeXN0ZW0ncyB2YWx1ZSBmb3IgYGBfX2RlYnVnX19gYCBmb3IKKyAgIGV4dGVuc2lvbiBzZWxlY3Rpb24uCisKKyAgICpwYXRoKiBuZWVkIG5vdCBleGlzdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBzb3VyY2VfZnJvbV9jYWNoZShwYXRoKQorCisgICBHaXZlbiB0aGUgKnBhdGgqIHRvIGEgOnBlcDpgMzE0N2AgZmlsZSBuYW1lLCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgc291cmNlIGNvZGUKKyAgIGZpbGUgcGF0aC4gIEZvciBleGFtcGxlLCBpZiAqcGF0aCogaXMKKyAgIGBgL2Zvby9iYXIvX19weWNhY2hlX18vYmF6LmNweXRob24tMzIucHljYGAgdGhlIHJldHVybmVkIHBhdGggd291bGQgYmUKKyAgIGBgL2Zvby9iYXIvYmF6LnB5YGAuICAqcGF0aCogbmVlZCBub3QgZXhpc3QsIGhvd2V2ZXIgaWYgaXQgZG9lcyBub3QgY29uZm9ybQorICAgdG8gOnBlcDpgMzE0N2AgZm9ybWF0LCBhIGBgVmFsdWVFcnJvcmBgIGlzIHJhaXNlZC4gSWYKKyAgIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBub3QgZGVmaW5lZCwKKyAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlzIHJhaXNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpCisKKyAgIERlY29kZSB0aGUgZ2l2ZW4gYnl0ZXMgcmVwcmVzZW50aW5nIHNvdXJjZSBjb2RlIGFuZCByZXR1cm4gaXQgYXMgYSBzdHJpbmcKKyAgIHdpdGggdW5pdmVyc2FsIG5ld2xpbmVzIChhcyByZXF1aXJlZCBieQorICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYCkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBmdW5jdGlvbjo6IHJlc29sdmVfbmFtZShuYW1lLCBwYWNrYWdlKQogCiAgICBSZXNvbHZlIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUgdG8gYW4gYWJzb2x1dGUgb25lLgpAQCAtODY1LDkgKzExMDcsMjUgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIGZ1bmN0aW9uOjogZmluZF9zcGVjKG5hbWUsIHBhY2thZ2U9Tm9uZSkKKworICAgRmluZCB0aGUgOnRlcm06YHNwZWMgPG1vZHVsZSBzcGVjPmAgZm9yIGEgbW9kdWxlLCBvcHRpb25hbGx5IHJlbGF0aXZlIHRvCisgICB0aGUgc3BlY2lmaWVkICoqcGFja2FnZSoqIG5hbWUuIElmIHRoZSBtb2R1bGUgaXMgaW4gOmF0dHI6YHN5cy5tb2R1bGVzYCwKKyAgIHRoZW4gYGBzeXMubW9kdWxlc1tuYW1lXS5fX3NwZWNfX2BgIGlzIHJldHVybmVkICh1bmxlc3MgdGhlIHNwZWMgd291bGQgYmUKKyAgIGBgTm9uZWBgIG9yIGlzIG5vdCBzZXQsIGluIHdoaWNoIGNhc2UgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkKS4KKyAgIE90aGVyd2lzZSBhIHNlYXJjaCB1c2luZyA6YXR0cjpgc3lzLm1ldGFfcGF0aGAgaXMgZG9uZS4gYGBOb25lYGAgaXMKKyAgIHJldHVybmVkIGlmIG5vIHNwZWMgaXMgZm91bmQuCisKKyAgIElmICoqbmFtZSoqIGlzIGZvciBhIHN1Ym1vZHVsZSAoY29udGFpbnMgYSBkb3QpLCB0aGUgcGFyZW50IG1vZHVsZSBpcworICAgYXV0b21hdGljYWxseSBpbXBvcnRlZC4KKworICAgKipuYW1lKiogYW5kICoqcGFja2FnZSoqIHdvcmsgdGhlIHNhbWUgYXMgZm9yIDpmdW5jOmBpbXBvcnRfbW9kdWxlYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGRlY29yYXRvcjo6IG1vZHVsZV9mb3JfbG9hZGVyCiAKLSAgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciBhIDp0ZXJtOmBsb2FkZXJgIG1ldGhvZCwKKyAgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgCiAgICAgdG8gaGFuZGxlIHNlbGVjdGluZyB0aGUgcHJvcGVyCiAgICAgbW9kdWxlIG9iamVjdCB0byBsb2FkIHdpdGguIFRoZSBkZWNvcmF0ZWQgbWV0aG9kIGlzIGV4cGVjdGVkIHRvIGhhdmUgYSBjYWxsCiAgICAgc2lnbmF0dXJlIHRha2luZyB0d28gcG9zaXRpb25hbCBhcmd1bWVudHMKQEAgLTg3OCw1NSArMTEzNiw2OCBAQAogCiAgICAgVGhlIGRlY29yYXRlZCBtZXRob2Qgd2lsbCB0YWtlIGluIHRoZSAqKm5hbWUqKiBvZiB0aGUgbW9kdWxlIHRvIGJlIGxvYWRlZAogICAgIGFzIGV4cGVjdGVkIGZvciBhIDp0ZXJtOmBsb2FkZXJgLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbgotICAgIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBhIG5ldyBvbmUgaXMgY29uc3RydWN0ZWQgd2l0aCBpdHMKLSAgICA6YXR0cjpgX19uYW1lX19gIGF0dHJpYnV0ZSBzZXQgdG8gKipuYW1lKiosIDphdHRyOmBfX2xvYWRlcl9fYCBzZXQgdG8KLSAgICAqKnNlbGYqKiwgYW5kIDphdHRyOmBfX3BhY2thZ2VfX2Agc2V0IGlmCi0gICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5pc19wYWNrYWdlYCBpcyBkZWZpbmVkIGZvciAqKnNlbGYqKiBhbmQKLSAgICBkb2VzIG5vdCByYWlzZSA6ZXhjOmBJbXBvcnRFcnJvcmAgZm9yICoqbmFtZSoqLiBJZiBhIG5ldyBtb2R1bGUgaXMgbm90Ci0gICAgbmVlZGVkIHRoZW4gdGhlIG1vZHVsZSBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIHdpbGwgYmUgcGFzc2VkIGludG8gdGhlCi0gICAgbWV0aG9kLgorICAgIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBhIG5ldyBvbmUgaXMgY29uc3RydWN0ZWQuIFJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlCisgICAgbW9kdWxlIGNhbWUgZnJvbSwgOmF0dHI6YF9fbG9hZGVyX19gIHNldCB0byAqKnNlbGYqKiBhbmQgOmF0dHI6YF9fcGFja2FnZV9fYAorICAgIGlzIHNldCBiYXNlZCBvbiB3aGF0IDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuaXNfcGFja2FnZWAgcmV0dXJucworICAgIChpZiBhdmFpbGFibGUpLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBzZXQgdW5jb25kaXRpb25hbGx5IHRvIHN1cHBvcnQKKyAgICByZWxvYWRpbmcuCiAKICAgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGJ5IHRoZSBkZWNvcmF0ZWQgbWV0aG9kIGFuZCBhIG1vZHVsZSB3YXMgYWRkZWQgdG8KLSAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIGl0IHdpbGwgYmUgcmVtb3ZlZCB0byBwcmV2ZW50IGEgcGFydGlhbGx5IGluaXRpYWxpemVkCi0gICAgbW9kdWxlIGZyb20gYmVpbmcgaW4gbGVmdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLiBJZiB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5Ci0gICAgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGl0IGlzIGxlZnQgYWxvbmUuCi0KLSAgICBVc2Ugb2YgdGhpcyBkZWNvcmF0b3IgaGFuZGxlcyBhbGwgdGhlIGRldGFpbHMgb2Ygd2hpY2ggbW9kdWxlIG9iamVjdCBhCi0gICAgbG9hZGVyIHNob3VsZCBpbml0aWFsaXplIGFzIHNwZWNpZmllZCBieSA6cGVwOmAzMDJgIGFzIGJlc3QgYXMgcG9zc2libGUuCisgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlbiB0aGUgbW9kdWxlIHdpbGwgYmUgcmVtb3ZlZCB0byBwcmV2ZW50IGEgcGFydGlhbGx5CisgICAgaW5pdGlhbGl6ZWQgbW9kdWxlIGZyb20gYmVpbmcgaW4gbGVmdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLiBJZiB0aGUgbW9kdWxlCisgICAgd2FzIGFscmVhZHkgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGl0IGlzIGxlZnQgYWxvbmUuCiAKICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgIDphdHRyOmBfX2xvYWRlcl9fYCBhbmQgOmF0dHI6YF9fcGFja2FnZV9fYCBhcmUgYXV0b21hdGljYWxseSBzZXQKICAgICAgICAod2hlbiBwb3NzaWJsZSkuCiAKKyAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgIFNldCA6YXR0cjpgX19uYW1lX19gLCA6YXR0cjpgX19sb2FkZXJfX2AgOmF0dHI6YF9fcGFja2FnZV9fYAorICAgICAgIHVuY29uZGl0aW9uYWxseSB0byBzdXBwb3J0IHJlbG9hZGluZy4KKworICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICBUaGUgaW1wb3J0IG1hY2hpbmVyeSBub3cgZGlyZWN0bHkgcGVyZm9ybXMgYWxsIHRoZSBmdW5jdGlvbmFsaXR5CisgICAgICAgcHJvdmlkZWQgYnkgdGhpcyBmdW5jdGlvbi4KKwogLi4gZGVjb3JhdG9yOjogc2V0X2xvYWRlcgogCi0gICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgYSA6dGVybTpgbG9hZGVyYCBtZXRob2QsCi0gICAgdG8gc2V0IHRoZSA6YXR0cjpgX19sb2FkZXJfX2AKLSAgICBhdHRyaWJ1dGUgb24gbG9hZGVkIG1vZHVsZXMuIElmIHRoZSBhdHRyaWJ1dGUgaXMgYWxyZWFkeSBzZXQgdGhlIGRlY29yYXRvcgotICAgIGRvZXMgbm90aGluZy4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IHRvIHRoZQotICAgIHdyYXBwZWQgbWV0aG9kIChpLmUuIGBgc2VsZmBgKSBpcyB3aGF0IDphdHRyOmBfX2xvYWRlcl9fYCBzaG91bGQgYmUgc2V0IHRvLgorICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYAorICAgdG8gc2V0IHRoZSA6YXR0cjpgX19sb2FkZXJfX2AKKyAgIGF0dHJpYnV0ZSBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiBJZiB0aGUgYXR0cmlidXRlIGlzIGFscmVhZHkgc2V0IHRoZQorICAgZGVjb3JhdG9yIGRvZXMgbm90aGluZy4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IHRvCisgICB0aGUgd3JhcHBlZCBtZXRob2QgKGkuZS4gYGBzZWxmYGApIGlzIHdoYXQgOmF0dHI6YF9fbG9hZGVyX19gIHNob3VsZCBiZSBzZXQKKyAgIHRvLgogCi0gICAuLiBub3RlOjoKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTZXQgYGBfX2xvYWRlcl9fYGAgaWYgc2V0IHRvIGBgTm9uZWBgLCBhcyBpZiB0aGUgYXR0cmlidXRlIGRvZXMgbm90CisgICAgICBleGlzdC4KIAotICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCA6ZnVuYzpgbW9kdWxlX2Zvcl9sb2FkZXJgIGJlIHVzZWQgb3ZlciB0aGlzCi0gICAgICBkZWNvcmF0b3IgYXMgaXQgc3Vic3VtZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgotCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBUaGUgaW1wb3J0IG1hY2hpbmVyeSB0YWtlcyBjYXJlIG9mIHRoaXMgYXV0b21hdGljYWxseS4KIAogLi4gZGVjb3JhdG9yOjogc2V0X3BhY2thZ2UKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgdG8gc2V0IHRoZSA6YXR0cjpgX19wYWNrYWdlX19gCi0gICAgYXR0cmlidXRlIG9uIHRoZSBtb2R1bGUgcmV0dXJuZWQgYnkgdGhlIGxvYWRlci4gSWYgOmF0dHI6YF9fcGFja2FnZV9fYCBpcwotICAgIHNldCBhbmQgaGFzIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5vbmVgYCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkLgotICAgIE5vdGUgdGhhdCB0aGUgbW9kdWxlIHJldHVybmVkIGJ5IHRoZSBsb2FkZXIgaXMgd2hhdCBoYXMgdGhlIGF0dHJpYnV0ZQotICAgIHNldCBvbiBhbmQgbm90IHRoZSBtb2R1bGUgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4KKyAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAgdG8gc2V0IHRoZSA6YXR0cjpgX19wYWNrYWdlX19gIGF0dHJpYnV0ZSBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiBJZiA6YXR0cjpgX19wYWNrYWdlX19gCisgICBpcyBzZXQgYW5kIGhhcyBhIHZhbHVlIG90aGVyIHRoYW4gYGBOb25lYGAgaXQgd2lsbCBub3QgYmUgY2hhbmdlZC4KIAotICAgIFJlbGlhbmNlIG9uIHRoaXMgZGVjb3JhdG9yIGlzIGRpc2NvdXJhZ2VkIHdoZW4gaXQgaXMgcG9zc2libGUgdG8gc2V0Ci0gICAgOmF0dHI6YF9fcGFja2FnZV9fYCBiZWZvcmUgaW1wb3J0aW5nLiBCeQotICAgIHNldHRpbmcgaXQgYmVmb3JlaGFuZCB0aGUgY29kZSBmb3IgdGhlIG1vZHVsZSBpcyBleGVjdXRlZCB3aXRoIHRoZQotICAgIGF0dHJpYnV0ZSBzZXQgYW5kIHRodXMgY2FuIGJlIHVzZWQgYnkgZ2xvYmFsIGxldmVsIGNvZGUgZHVyaW5nCi0gICAgaW5pdGlhbGl6YXRpb24uCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBUaGUgaW1wb3J0IG1hY2hpbmVyeSB0YWtlcyBjYXJlIG9mIHRoaXMgYXV0b21hdGljYWxseS4KIAotICAgLi4gbm90ZTo6CisuLiBmdW5jdGlvbjo6IHNwZWNfZnJvbV9sb2FkZXIobmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgaXNfcGFja2FnZT1Ob25lKQogCi0gICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IDpmdW5jOmBtb2R1bGVfZm9yX2xvYWRlcmAgYmUgdXNlZCBvdmVyIHRoaXMKLSAgICAgIGRlY29yYXRvciBhcyBpdCBzdWJzdW1lcyB0aGlzIGZ1bmN0aW9uYWxpdHkuCisgICBBIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgOmNsYXNzOmBNb2R1bGVTcGVjYCBpbnN0YW5jZSBiYXNlZAorICAgb24gYSBsb2FkZXIuICBUaGUgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhleSBkbyBmb3IKKyAgIE1vZHVsZVNwZWMuICBUaGUgZnVuY3Rpb24gdXNlcyBhdmFpbGFibGUgOnRlcm06YGxvYWRlcmAgQVBJcywgc3VjaCBhcworICAgOm1ldGg6YEluc3BlY3RMb2FkZXIuaXNfcGFja2FnZWAsIHRvIGZpbGwgaW4gYW55IG1pc3NpbmcKKyAgIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBsb2NhdGlvbiwgKiwgbG9hZGVyPU5vbmUsIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUpCisKKyAgIEEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSA6Y2xhc3M6YE1vZHVsZVNwZWNgIGluc3RhbmNlIGJhc2VkCisgICBvbiB0aGUgcGF0aCB0byBhIGZpbGUuICBNaXNzaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgZmlsbGVkIGluIG9uIHRoZQorICAgc3BlYyBieSBtYWtpbmcgdXNlIG9mIGxvYWRlciBBUElzIGFuZCBieSB0aGUgaW1wbGljYXRpb24gdGhhdCB0aGUKKyAgIG1vZHVsZSB3aWxsIGJlIGZpbGUtYmFzZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW5kZXgucnN0IGIvRG9jL2xpYnJhcnkvaW5kZXgucnN0CmluZGV4IDFiMjVjNmUuLjgxMjg5YTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2luZGV4LnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbmRleC5yc3QKQEAgLTY1LDYgKzY1LDcgQEAKICAgIHRrLnJzdAogICAgZGV2ZWxvcG1lbnQucnN0CiAgICBkZWJ1Zy5yc3QKKyAgIGRpc3RyaWJ1dGlvbi5yc3QKICAgIHB5dGhvbi5yc3QKICAgIGN1c3RvbWludGVycC5yc3QKICAgIG1vZHVsZXMucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdCBiL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CmluZGV4IGQ0Y2Y5MDUuLjBjMDg3MTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CkBAIC02OSw3ICs2OSwxMiBAQAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCA6dGVybTpgYnl0ZWNvZGVgICAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fZGVmYXVsdHNfXyAgICB8IHR1cGxlIG9mIGFueSBkZWZhdWx0ICAgICAgfAotfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB2YWx1ZXMgZm9yIGFyZ3VtZW50cyAgICAgIHwKK3wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgdmFsdWVzIGZvciBwb3NpdGlvbmFsIG9yICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IGtleXdvcmQgcGFyYW1ldGVycyAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgX19rd2RlZmF1bHRzX18gIHwgbWFwcGluZyBvZiBhbnkgZGVmYXVsdCAgICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHZhbHVlcyBmb3Iga2V5d29yZC1vbmx5ICAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fZ2xvYmFsc19fICAgICB8IGdsb2JhbCBuYW1lc3BhY2UgaW4gd2hpY2ggfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB0aGlzIGZ1bmN0aW9uIHdhcyBkZWZpbmVkIHwKQEAgLTE3Myw4ICsxNzgsOSBAQAogCiAgICAuLiBub3RlOjoKIAotICAgICAgOmZ1bmM6YGdldG1lbWJlcnNgIGRvZXMgbm90IHJldHVybiBtZXRhY2xhc3MgYXR0cmlidXRlcyB3aGVuIHRoZSBhcmd1bWVudAotICAgICAgaXMgYSBjbGFzcyAodGhpcyBiZWhhdmlvciBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgOmZ1bmM6YGRpcmAgZnVuY3Rpb24pLgorICAgICAgOmZ1bmM6YGdldG1lbWJlcnNgIHdpbGwgb25seSByZXR1cm4gY2xhc3MgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZQorICAgICAgbWV0YWNsYXNzIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgY2xhc3MgYW5kIHRob3NlIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuCisgICAgICBsaXN0ZWQgaW4gdGhlIG1ldGFjbGFzcycgY3VzdG9tIDptZXRoOmBfX2Rpcl9fYC4KIAogCiAuLiBmdW5jdGlvbjo6IGdldG1vZHVsZWluZm8ocGF0aCkKQEAgLTQyOCwxMSArNDM0LDE0IEBACiAgICBBY2NlcHRzIGEgd2lkZSByYW5nZSBvZiBweXRob24gY2FsbGFibGVzLCBmcm9tIHBsYWluIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyB0bwogICAgOmZ1bmM6YGZ1bmN0b29scy5wYXJ0aWFsYCBvYmplY3RzLgogCisgICBSYWlzZXMgOmV4YzpgVmFsdWVFcnJvcmAgaWYgbm8gc2lnbmF0dXJlIGNhbiBiZSBwcm92aWRlZCwgYW5kCisgICA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoYXQgdHlwZSBvZiBvYmplY3QgaXMgbm90IHN1cHBvcnRlZC4KKwogICAgLi4gbm90ZTo6CiAKICAgICAgIFNvbWUgY2FsbGFibGVzIG1heSBub3QgYmUgaW50cm9zcGVjdGFibGUgaW4gY2VydGFpbiBpbXBsZW1lbnRhdGlvbnMgb2YKLSAgICAgIFB5dGhvbi4gIEZvciBleGFtcGxlLCBpbiBDUHl0aG9uLCBidWlsdC1pbiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBDIHByb3ZpZGUKLSAgICAgIG5vIG1ldGFkYXRhIGFib3V0IHRoZWlyIGFyZ3VtZW50cy4KKyAgICAgIFB5dGhvbi4gIEZvciBleGFtcGxlLCBpbiBDUHl0aG9uLCBzb21lIGJ1aWx0LWluIGZ1bmN0aW9ucyBkZWZpbmVkIGluCisgICAgICBDIHByb3ZpZGUgbm8gbWV0YWRhdGEgYWJvdXQgdGhlaXIgYXJndW1lbnRzLgogCiAKIC4uIGNsYXNzOjogU2lnbmF0dXJlKHBhcmFtZXRlcnM9Tm9uZSwgXCosIHJldHVybl9hbm5vdGF0aW9uPVNpZ25hdHVyZS5lbXB0eSkKQEAgLTUxMCw5ICs1MTksOCBAQAogCiAgICAuLiBhdHRyaWJ1dGU6OiBQYXJhbWV0ZXIubmFtZQogCi0gICAgICBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGFzIGEgc3RyaW5nLiAgTXVzdCBiZSBhIHZhbGlkIHB5dGhvbiBpZGVudGlmaWVyCi0gICAgICBuYW1lICh3aXRoIHRoZSBleGNlcHRpb24gb2YgYGBQT1NJVElPTkFMX09OTFlgYCBwYXJhbWV0ZXJzLCB3aGljaCBjYW4gaGF2ZQotICAgICAgaXQgc2V0IHRvIGBgTm9uZWBgKS4KKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgYXMgYSBzdHJpbmcuICBUaGUgbmFtZSBtdXN0IGJlIGEgdmFsaWQKKyAgICAgIFB5dGhvbiBpZGVudGlmaWVyLgogCiAgICAuLiBhdHRyaWJ1dGU6OiBQYXJhbWV0ZXIuZGVmYXVsdAogCkBAIC01OTYsNiArNjA0LDEwIEBACiAgICAgICAgICA+Pj4gc3RyKHBhcmFtLnJlcGxhY2UoZGVmYXVsdD1QYXJhbWV0ZXIuZW1wdHksIGFubm90YXRpb249J3NwYW0nKSkKICAgICAgICAgICJmb286J3NwYW0nIgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgSW4gUHl0aG9uIDMuMyBQYXJhbWV0ZXIgb2JqZWN0cyB3ZXJlIGFsbG93ZWQgdG8gaGF2ZSBgYG5hbWVgYCBzZXQKKyAgICAgICAgdG8gYGBOb25lYGAgaWYgdGhlaXIgYGBraW5kYGAgd2FzIHNldCB0byBgYFBPU0lUSU9OQUxfT05MWWBgLgorICAgICAgICBUaGlzIGlzIG5vIGxvbmdlciBwZXJtaXR0ZWQuCiAKIC4uIGNsYXNzOjogQm91bmRBcmd1bWVudHMKIApAQCAtNzE3LDYgKzcyOSwxMSBAQAogICAgICAgQ29uc2lkZXIgdXNpbmcgdGhlIG5ldyA6cmVmOmBTaWduYXR1cmUgT2JqZWN0IDxpbnNwZWN0LXNpZ25hdHVyZS1vYmplY3Q+YAogICAgICAgaW50ZXJmYWNlLCB3aGljaCBwcm92aWRlcyBhIGJldHRlciB3YXkgb2YgaW50cm9zcGVjdGluZyBmdW5jdGlvbnMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdyBiYXNlZCBvbiA6ZnVuYzpgc2lnbmF0dXJlYCwgYnV0IHN0aWxsIGlnbm9yZXMKKyAgICAgIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGVzIGFuZCBpbmNsdWRlcyB0aGUgYWxyZWFkeSBib3VuZCBmaXJzdAorICAgICAgcGFyYW1ldGVyIGluIHRoZSBzaWduYXR1cmUgb3V0cHV0IGZvciBib3VuZCBtZXRob2RzLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0YXJndmFsdWVzKGZyYW1lKQogCkBAIC04MDYsNiArODIzLDIzIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCisuLiBmdW5jdGlvbjo6IHVud3JhcChmdW5jLCAqLCBzdG9wPU5vbmUpCisKKyAgIEdldCB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgKmZ1bmMqLiBJdCBmb2xsb3dzIHRoZSBjaGFpbiBvZiA6YXR0cjpgX193cmFwcGVkX19gCisgICBhdHRyaWJ1dGVzIHJldHVybmluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluLgorCisgICAqc3RvcCogaXMgYW4gb3B0aW9uYWwgY2FsbGJhY2sgYWNjZXB0aW5nIGFuIG9iamVjdCBpbiB0aGUgd3JhcHBlciBjaGFpbgorICAgYXMgaXRzIHNvbGUgYXJndW1lbnQgdGhhdCBhbGxvd3MgdGhlIHVud3JhcHBpbmcgdG8gYmUgdGVybWluYXRlZCBlYXJseSBpZgorICAgdGhlIGNhbGxiYWNrIHJldHVybnMgYSB0cnVlIHZhbHVlLiBJZiB0aGUgY2FsbGJhY2sgbmV2ZXIgcmV0dXJucyBhIHRydWUKKyAgIHZhbHVlLCB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluIGlzIHJldHVybmVkIGFzIHVzdWFsLiBGb3IgZXhhbXBsZSwKKyAgIDpmdW5jOmBzaWduYXR1cmVgIHVzZXMgdGhpcyB0byBzdG9wIHVud3JhcHBpbmcgaWYgYW55IG9iamVjdCBpbiB0aGUKKyAgIGNoYWluIGhhcyBhIGBgX19zaWduYXR1cmVfX2BgIGF0dHJpYnV0ZSBkZWZpbmVkLgorCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgYSBjeWNsZSBpcyBlbmNvdW50ZXJlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gX2luc3BlY3Qtc3RhY2s6CiAKIFRoZSBpbnRlcnByZXRlciBzdGFjawpAQCAtODM4LDYgKzg3MiwxMCBAQAogICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgIGRlbCBmcmFtZQogCisgICBJZiB5b3Ugd2FudCB0byBrZWVwIHRoZSBmcmFtZSBhcm91bmQgKGZvciBleGFtcGxlIHRvIHByaW50IGEgdHJhY2ViYWNrCisgICBsYXRlciksIHlvdSBjYW4gYWxzbyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGJ5IHVzaW5nIHRoZQorICAgOm1ldGg6YGZyYW1lLmNsZWFyYCBtZXRob2QuCisKIFRoZSBvcHRpb25hbCAqY29udGV4dCogYXJndW1lbnQgc3VwcG9ydGVkIGJ5IG1vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIHNwZWNpZmllcwogdGhlIG51bWJlciBvZiBsaW5lcyBvZiBjb250ZXh0IHRvIHJldHVybiwgd2hpY2ggYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgY3VycmVudAogbGluZS4KQEAgLTk5NCwzICsxMDMyLDIyIEBACiAgICAgICByZXR1cm4gYW4gZW1wdHkgZGljdGlvbmFyeS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKworLi4gX2luc3BlY3QtbW9kdWxlLWNsaToKKworQ29tbWFuZCBMaW5lIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBiYXNpYyBpbnRyb3NwZWN0aW9uIGNhcGFiaWxpdHkKK2Zyb20gdGhlIGNvbW1hbmQgbGluZS4KKworLi4gcHJvZ3JhbTo6IGluc3BlY3QKKworQnkgZGVmYXVsdCwgYWNjZXB0cyB0aGUgbmFtZSBvZiBhIG1vZHVsZSBhbmQgcHJpbnRzIHRoZSBzb3VyY2Ugb2YgdGhhdAorbW9kdWxlLiBBIGNsYXNzIG9yIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbW9kdWxlIGNhbiBiZSBwcmludGVkIGluc3RlYWQgYnkKK2FwcGVuZGVkIGEgY29sb24gYW5kIHRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdC4KKworLi4gY21kb3B0aW9uOjogLS1kZXRhaWxzCisKKyAgIFByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgb2JqZWN0IHJhdGhlciB0aGFuIHRoZSBzb3VyY2UgY29kZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW8ucnN0IGIvRG9jL2xpYnJhcnkvaW8ucnN0CmluZGV4IDcxNjc2N2YuLmI4ZGM2ODggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lvLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pby5yc3QKQEAgLTI4MywxMyArMjgzLDEzIEBACiAgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZCBmcm9tLiAgSWYgYGBGYWxzZWBgLCA6bWV0aDpgcmVhZGAKICAgICAgIHdpbGwgcmFpc2UgOmV4YzpgT1NFcnJvcmAuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKGxpbWl0PS0xKQorICAgLi4gbWV0aG9kOjogcmVhZGxpbmUoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIG9uZSBsaW5lIGZyb20gdGhlIHN0cmVhbS4gIElmICpsaW1pdCogaXMgc3BlY2lmaWVkLCBhdAotICAgICAgbW9zdCAqbGltaXQqIGJ5dGVzIHdpbGwgYmUgcmVhZC4KKyAgICAgIFJlYWQgYW5kIHJldHVybiBvbmUgbGluZSBmcm9tIHRoZSBzdHJlYW0uICBJZiAqc2l6ZSogaXMgc3BlY2lmaWVkLCBhdAorICAgICAgbW9zdCAqc2l6ZSogYnl0ZXMgd2lsbCBiZSByZWFkLgogCiAgICAgICBUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBgYGInXG4nYGAgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHQgZmlsZXMsCi0gICAgICB0aGUgKm5ld2xpbmVzKiBhcmd1bWVudCB0byA6ZnVuYzpgb3BlbmAgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCisgICAgICB0aGUgKm5ld2xpbmUqIGFyZ3VtZW50IHRvIDpmdW5jOmBvcGVuYCBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGxpbmUKICAgICAgIHRlcm1pbmF0b3IocykgcmVjb2duaXplZC4KIAogICAgLi4gbWV0aG9kOjogcmVhZGxpbmVzKGhpbnQ9LTEpCkBAIC0zNTMsNiArMzUzLDEyIEBACiAgICAgICBpcyB1c3VhbCBmb3IgZWFjaCBvZiB0aGUgbGluZXMgcHJvdmlkZWQgdG8gaGF2ZSBhIGxpbmUgc2VwYXJhdG9yIGF0IHRoZQogICAgICAgZW5kLgogCisgICAuLiBtZXRob2Q6OiBfX2RlbF9fKCkKKworICAgICAgUHJlcGFyZSBmb3Igb2JqZWN0IGRlc3RydWN0aW9uLiA6Y2xhc3M6YElPQmFzZWAgcHJvdmlkZXMgYSBkZWZhdWx0CisgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0aGF0IGNhbGxzIHRoZSBpbnN0YW5jZSdzCisgICAgICA6bWV0aDpgfklPQmFzZS5jbG9zZWAgbWV0aG9kLgorCiAKIC4uIGNsYXNzOjogUmF3SU9CYXNlCiAKQEAgLTM2NiwxNCArMzcyLDE0IEBACiAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcyBmcm9tIDpjbGFzczpgSU9CYXNlYCwKICAgIDpjbGFzczpgUmF3SU9CYXNlYCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQoc2l6ZT0tMSkKIAotICAgICAgUmVhZCB1cCB0byAqbiogYnl0ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm4gdGhlbS4gIEFzIGEgY29udmVuaWVuY2UsCi0gICAgICBpZiAqbiogaXMgdW5zcGVjaWZpZWQgb3IgLTEsIDptZXRoOmByZWFkYWxsYCBpcyBjYWxsZWQuICBPdGhlcndpc2UsCi0gICAgICBvbmx5IG9uZSBzeXN0ZW0gY2FsbCBpcyBldmVyIG1hZGUuICBGZXdlciB0aGFuICpuKiBieXRlcyBtYXkgYmUKLSAgICAgIHJldHVybmVkIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbGwgcmV0dXJucyBmZXdlciB0aGFuICpuKiBieXRlcy4KKyAgICAgIFJlYWQgdXAgdG8gKnNpemUqIGJ5dGVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZW0uICBBcyBhIGNvbnZlbmllbmNlLAorICAgICAgaWYgKnNpemUqIGlzIHVuc3BlY2lmaWVkIG9yIC0xLCA6bWV0aDpgcmVhZGFsbGAgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlLAorICAgICAgb25seSBvbmUgc3lzdGVtIGNhbGwgaXMgZXZlciBtYWRlLiAgRmV3ZXIgdGhhbiAqc2l6ZSogYnl0ZXMgbWF5IGJlCisgICAgICByZXR1cm5lZCBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYWxsIHJldHVybnMgZmV3ZXIgdGhhbiAqc2l6ZSogYnl0ZXMuCiAKLSAgICAgIElmIDAgYnl0ZXMgYXJlIHJldHVybmVkLCBhbmQgKm4qIHdhcyBub3QgMCwgdGhpcyBpbmRpY2F0ZXMgZW5kIG9mIGZpbGUuCisgICAgICBJZiAwIGJ5dGVzIGFyZSByZXR1cm5lZCwgYW5kICpzaXplKiB3YXMgbm90IDAsIHRoaXMgaW5kaWNhdGVzIGVuZCBvZiBmaWxlLgogICAgICAgSWYgdGhlIG9iamVjdCBpcyBpbiBub24tYmxvY2tpbmcgbW9kZSBhbmQgbm8gYnl0ZXMgYXJlIGF2YWlsYWJsZSwKICAgICAgIGBgTm9uZWBgIGlzIHJldHVybmVkLgogCkBAIC00NDIsMTAgKzQ0OCwxMCBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAotICAgLi4gbWV0aG9kOjogcmVhZChuPS0xKQorICAgLi4gbWV0aG9kOjogcmVhZChzaXplPS0xKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKm4qIGJ5dGVzLiAgSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGBgTm9uZWBgLCBvcgotICAgICAgbmVnYXRpdmUsIGRhdGEgaXMgcmVhZCBhbmQgcmV0dXJuZWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuICBBbiBlbXB0eQorICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcy4gIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBgYE5vbmVgYCwKKyAgICAgIG9yIG5lZ2F0aXZlLCBkYXRhIGlzIHJlYWQgYW5kIHJldHVybmVkIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgQW4gZW1wdHkKICAgICAgIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBpcyByZXR1cm5lZCBpZiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgYXQgRU9GLgogCiAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUsIGFuZCB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIG5vdApAQCAtNDU3LDkgKzQ2Myw5IEBACiAgICAgICBBIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4KICAgICAgIG5vbiBibG9ja2luZy1tb2RlLCBhbmQgaGFzIG5vIGRhdGEgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQxKG49LTEpCisgICAuLiBtZXRob2Q6OiByZWFkMShzaXplPS0xKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKm4qIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcKKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgY2FsbCB0byB0aGUgdW5kZXJseWluZwogICAgICAgcmF3IHN0cmVhbSdzIDptZXRoOmB+UmF3SU9CYXNlLnJlYWRgIG1ldGhvZC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3UKICAgICAgIGFyZSBpbXBsZW1lbnRpbmcgeW91ciBvd24gYnVmZmVyaW5nIG9uIHRvcCBvZiBhIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgCiAgICAgICBvYmplY3QuCkBAIC01MjIsNiArNTI4LDggQEAKICAgIDptb2Q6YG9zLm9wZW5gIGFzICpvcGVuZXIqIHJlc3VsdHMgaW4gZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHBhc3NpbmcKICAgIGBgTm9uZWBgKS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIFNlZSB0aGUgOmZ1bmM6YG9wZW5gIGJ1aWx0LWluIGZ1bmN0aW9uIGZvciBleGFtcGxlcyBvbiB1c2luZyB0aGUgKm9wZW5lcioKICAgIHBhcmFtZXRlci4KIApAQCAtNTI5LDYgKzUzNyw5IEBACiAgICAgICBUaGUgKm9wZW5lciogcGFyYW1ldGVyIHdhcyBhZGRlZC4KICAgICAgIFRoZSBgYCd4J2BgIG1vZGUgd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGZpbGUgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogICAgSW4gYWRkaXRpb24gdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgZnJvbSA6Y2xhc3M6YElPQmFzZWAgYW5kCiAgICA6Y2xhc3M6YFJhd0lPQmFzZWAsIDpjbGFzczpgRmlsZUlPYCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGRhdGEKICAgIGF0dHJpYnV0ZXM6CkBAIC02MDEsMjEgKzYxMiwyMSBAQAogICAgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmAgcHJvdmlkZXMgb3Igb3ZlcnJpZGVzIHRoZXNlIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8KICAgIHRob3NlIGZyb20gOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgYW5kIDpjbGFzczpgSU9CYXNlYDoKIAotICAgLi4gbWV0aG9kOjogcGVlayhbbl0pCisgICAuLiBtZXRob2Q6OiBwZWVrKFtzaXplXSkKIAogICAgICAgUmV0dXJuIGJ5dGVzIGZyb20gdGhlIHN0cmVhbSB3aXRob3V0IGFkdmFuY2luZyB0aGUgcG9zaXRpb24uICBBdCBtb3N0IG9uZQogICAgICAgc2luZ2xlIHJlYWQgb24gdGhlIHJhdyBzdHJlYW0gaXMgZG9uZSB0byBzYXRpc2Z5IHRoZSBjYWxsLiBUaGUgbnVtYmVyIG9mCiAgICAgICBieXRlcyByZXR1cm5lZCBtYXkgYmUgbGVzcyBvciBtb3JlIHRoYW4gcmVxdWVzdGVkLgogCi0gICAuLiBtZXRob2Q6OiByZWFkKFtuXSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQoW3NpemVdKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gKm4qIGJ5dGVzLCBvciBpZiAqbiogaXMgbm90IGdpdmVuIG9yIG5lZ2F0aXZlLCB1bnRpbCBFT0YKLSAgICAgIG9yIGlmIHRoZSByZWFkIGNhbGwgd291bGQgYmxvY2sgaW4gbm9uLWJsb2NraW5nIG1vZGUuCisgICAgICBSZWFkIGFuZCByZXR1cm4gKnNpemUqIGJ5dGVzLCBvciBpZiAqc2l6ZSogaXMgbm90IGdpdmVuIG9yIG5lZ2F0aXZlLCB1bnRpbAorICAgICAgRU9GIG9yIGlmIHRoZSByZWFkIGNhbGwgd291bGQgYmxvY2sgaW4gbm9uLWJsb2NraW5nIG1vZGUuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQxKG4pCisgICAuLiBtZXRob2Q6OiByZWFkMShzaXplKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKm4qIGJ5dGVzIHdpdGggb25seSBvbmUgY2FsbCBvbiB0aGUgcmF3IHN0cmVhbS4gIElmCi0gICAgICBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgb25seSBidWZmZXJlZCBieXRlcyBhcmUgcmV0dXJuZWQuCisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKnNpemUqIGJ5dGVzIHdpdGggb25seSBvbmUgY2FsbCBvbiB0aGUgcmF3IHN0cmVhbS4KKyAgICAgIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCBvbmx5IGJ1ZmZlcmVkIGJ5dGVzIGFyZSByZXR1cm5lZC4KICAgICAgIE90aGVyd2lzZSwgb25lIHJhdyBzdHJlYW0gcmVhZCBjYWxsIGlzIG1hZGUuCiAKIApAQCAtNzM1LDE3ICs3NDYsMTcgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQobikKKyAgIC4uIG1ldGhvZDo6IHJlYWQoc2l6ZSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIGF0IG1vc3QgKm4qIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RyZWFtIGFzIGEgc2luZ2xlCi0gICAgICA6Y2xhc3M6YHN0cmAuICBJZiAqbiogaXMgbmVnYXRpdmUgb3IgYGBOb25lYGAsIHJlYWRzIHVudGlsIEVPRi4KKyAgICAgIFJlYWQgYW5kIHJldHVybiBhdCBtb3N0ICpzaXplKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhcyBhIHNpbmdsZQorICAgICAgOmNsYXNzOmBzdHJgLiAgSWYgKnNpemUqIGlzIG5lZ2F0aXZlIG9yIGBgTm9uZWBgLCByZWFkcyB1bnRpbCBFT0YuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKGxpbWl0PS0xKQorICAgLi4gbWV0aG9kOjogcmVhZGxpbmUoc2l6ZT0tMSkKIAogICAgICAgUmVhZCB1bnRpbCBuZXdsaW5lIG9yIEVPRiBhbmQgcmV0dXJuIGEgc2luZ2xlIGBgc3RyYGAuICBJZiB0aGUgc3RyZWFtIGlzCiAgICAgICBhbHJlYWR5IGF0IEVPRiwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgogCi0gICAgICBJZiAqbGltaXQqIGlzIHNwZWNpZmllZCwgYXQgbW9zdCAqbGltaXQqIGNoYXJhY3RlcnMgd2lsbCBiZSByZWFkLgorICAgICAgSWYgKnNpemUqIGlzIHNwZWNpZmllZCwgYXQgbW9zdCAqc2l6ZSogY2hhcmFjdGVycyB3aWxsIGJlIHJlYWQuCiAKICAgIC4uIG1ldGhvZDo6IHNlZWsob2Zmc2V0LCB3aGVuY2U9U0VFS19TRVQpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QgYi9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CmluZGV4IDhlYWM5MmYuLjk2MjVlNzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdApAQCAtOSwxMyArOSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKLS4uIG5vdGU6OgotCi0gICBUaGUgYGBpcGFkZHJlc3NgYCBtb2R1bGUgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgb24gYQotICAgOnRlcm06YHByb3Zpc2lvbmFsIGJhc2lzIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuIEJhY2t3YXJkcyBpbmNvbXBhdGlibGUKLSAgIGNoYW5nZXMgKHVwIHRvIGFuZCBpbmNsdWRpbmcgcmVtb3ZhbCBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAotICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCi0KIDptb2Q6YGlwYWRkcmVzc2AgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdGllcyB0byBjcmVhdGUsIG1hbmlwdWxhdGUgYW5kCiBvcGVyYXRlIG9uIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGFuZCBuZXR3b3Jrcy4KIApAQCAtMTYxLDcgKzE1NCwxNiBAQAogICAgLi4gYXR0cmlidXRlOjogaXNfcHJpdmF0ZQogCiAgICAgICBgYFRydWVgYCBpZiB0aGUgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuICBTZWUKLSAgICAgIDpSRkM6YDE5MThgIChmb3IgSVB2NCkgb3IgOlJGQzpgNDE5M2AgKGZvciBJUHY2KS4KKyAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5XyAoZm9yIElQdjQpIG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5XworICAgICAgKGZvciBJUHY2KS4KKworICAgLi4gYXR0cmlidXRlOjogaXNfZ2xvYmFsCisKKyAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLiAgU2VlCisgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeV8gKGZvciBJUHY0KSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeV8KKyAgICAgIChmb3IgSVB2NikuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAgICAuLiBhdHRyaWJ1dGU6OiBpc191bnNwZWNpZmllZAogCkBAIC0xODIsNiArMTg0LDkgQEAKICAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIGZvciBsaW5rLWxvY2FsIHVzYWdlLiAgU2VlCiAgICAgICA6UkZDOmAzOTI3YC4KIAorLi4gX2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5OiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5L2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LnhodG1sCisuLiBfaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnk6IGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkvaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkueGh0bWwKKwogCiAuLiBjbGFzczo6IElQdjZBZGRyZXNzKGFkZHJlc3MpCiAKQEAgLTIxNiwxOCArMjIxLDIzIEBACiAgICBUaGUgbG9uZyBmb3JtIG9mIHRoZSBhZGRyZXNzIHJlcHJlc2VudGF0aW9uLCB3aXRoIGFsbCBsZWFkaW5nIHplcm9lcyBhbmQKICAgIGdyb3VwcyBjb25zaXN0aW5nIGVudGlyZWx5IG9mIHplcm9lcyBpbmNsdWRlZC4KIAorCisgICBGb3IgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLCBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRpb24gb2YgdGhlCisgICA6Y2xhc3M6YElQdjRBZGRyZXNzYCBjbGFzczoKKwogICAgLi4gYXR0cmlidXRlOjogcGFja2VkCiAgICAuLiBhdHRyaWJ1dGU6OiB2ZXJzaW9uCiAgICAuLiBhdHRyaWJ1dGU6OiBtYXhfcHJlZml4bGVuCiAgICAuLiBhdHRyaWJ1dGU6OiBpc19tdWx0aWNhc3QKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3ByaXZhdGUKKyAgIC4uIGF0dHJpYnV0ZTo6IGlzX2dsb2JhbAogICAgLi4gYXR0cmlidXRlOjogaXNfdW5zcGVjaWZpZWQKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3Jlc2VydmVkCiAgICAuLiBhdHRyaWJ1dGU6OiBpc19sb29wYmFjawogICAgLi4gYXR0cmlidXRlOjogaXNfbGlua19sb2NhbAogCi0gICAgICBSZWZlciB0byB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgZG9jdW1lbnRhdGlvbiBpbgotICAgICAgOmNsYXNzOmBJUHY0QWRkcmVzc2AKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgICAgaXNfZ2xvYmFsCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3NpdGVfbG9jYWwKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXBjLnJzdCBiL0RvYy9saWJyYXJ5L2lwYy5yc3QKaW5kZXggOTFlYzY5My4uNmIxNzU2MyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXBjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pcGMucnN0CkBAIC05LDcgKzksNyBAQAogCiBTb21lIG1vZHVsZXMgb25seSB3b3JrIGZvciB0d28gcHJvY2Vzc2VzIHRoYXQgYXJlIG9uIHRoZSBzYW1lIG1hY2hpbmUsIGUuZy4KIDptb2Q6YHNpZ25hbGAgYW5kIDptb2Q6YG1tYXBgLiAgT3RoZXIgbW9kdWxlcyBzdXBwb3J0IG5ldHdvcmtpbmcgcHJvdG9jb2xzCi10aGF0IHR3byBvciBtb3JlIHByb2Nlc3NlcyBjYW4gdXNlZCB0byBjb21tdW5pY2F0ZSBhY3Jvc3MgbWFjaGluZXMuCit0aGF0IHR3byBvciBtb3JlIHByb2Nlc3NlcyBjYW4gdXNlIHRvIGNvbW11bmljYXRlIGFjcm9zcyBtYWNoaW5lcy4KIAogVGhlIGxpc3Qgb2YgbW9kdWxlcyBkZXNjcmliZWQgaW4gdGhpcyBjaGFwdGVyIGlzOgogCkBAIC0xOCw2ICsxOCw5IEBACiAKICAgIHNvY2tldC5yc3QKICAgIHNzbC5yc3QKKyAgIHNlbGVjdC5yc3QKKyAgIHNlbGVjdG9ycy5yc3QKKyAgIGFzeW5jaW8ucnN0CiAgICBhc3luY29yZS5yc3QKICAgIGFzeW5jaGF0LnJzdAogICAgc2lnbmFsLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2l0ZXJ0b29scy5yc3QKaW5kZXggNWQzZTUwYS4uZjQ4OTUzNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0CkBAIC03ODQsNiArNzg0LDE5IEBACiAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbjoKICAgICAgICAgICAgcGFzcwogCisgICBkZWYgZmlyc3RfdHJ1ZShpdGVyYWJsZSwgZGVmYXVsdD1GYWxzZSwgcHJlZD1Ob25lKToKKyAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCB0cnVlIHZhbHVlIGluIHRoZSBpdGVyYWJsZS4KKworICAgICAgIElmIG5vIHRydWUgdmFsdWUgaXMgZm91bmQsIHJldHVybnMgKmRlZmF1bHQqCisKKyAgICAgICBJZiAqcHJlZCogaXMgbm90IE5vbmUsIHJldHVybnMgdGhlIGZpcnN0IGl0ZW0KKyAgICAgICBmb3Igd2hpY2ggcHJlZChpdGVtKSBpcyB0cnVlLgorCisgICAgICAgIiIiCisgICAgICAgIyBmaXJzdF90cnVlKFthLGIsY10sIHgpIC0tPiBhIG9yIGIgb3IgYyBvciB4CisgICAgICAgIyBmaXJzdF90cnVlKFthLGJdLCB4LCBmKSAtLT4gYSBpZiBmKGEpIGVsc2UgYiBpZiBmKGIpIGVsc2UgeAorICAgICAgIHJldHVybiBuZXh0KGZpbHRlcihwcmVkLCBpdGVyYWJsZSksIGRlZmF1bHQpCisKICAgIGRlZiByYW5kb21fcHJvZHVjdCgqYXJncywgcmVwZWF0PTEpOgogICAgICAgICJSYW5kb20gc2VsZWN0aW9uIGZyb20gaXRlcnRvb2xzLnByb2R1Y3QoKmFyZ3MsICoqa3dkcykiCiAgICAgICAgcG9vbHMgPSBbdHVwbGUocG9vbCkgZm9yIHBvb2wgaW4gYXJnc10gKiByZXBlYXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2pzb24ucnN0IGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKaW5kZXggZjY1MjAzOS4uNWQ5N2VlOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvanNvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKQEAgLTQyLDggKzQyLDcgQEAKIFByZXR0eSBwcmludGluZzo6CiAKICAgICA+Pj4gaW1wb3J0IGpzb24KLSAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwKLSAgICAuLi4gICAgICAgICAgICAgICAgICBpbmRlbnQ9NCwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkpCisgICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KSkKICAgICB7CiAgICAgICAgICI0IjogNSwKICAgICAgICAgIjYiOiA3CkBAIC0xNTgsMTUgKzE1NywxMyBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFsbG93IHN0cmluZ3MgZm9yICppbmRlbnQqIGluIGFkZGl0aW9uIHRvIGludGVnZXJzLgogCi0gICAuLiBub3RlOjoKKyAgIElmIHNwZWNpZmllZCwgKnNlcGFyYXRvcnMqIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAorICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKLSAgICAgIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlIG91dHB1dCBtaWdodCBpbmNsdWRlCi0gICAgICB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gKmluZGVudCogaXMgc3BlY2lmaWVkLiAgWW91IGNhbiB1c2UKLSAgICAgIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCi0KLSAgIElmICpzZXBhcmF0b3JzKiBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUsIHRoZW4gaXQKLSAgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4gIGBgKCcsJywKLSAgICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXNlIGBgKCcsJywgJzogJylgYCBhcyBkZWZhdWx0IGlmICppbmRlbnQqIGlzIG5vdCBgYE5vbmVgYC4KIAogICAgKmRlZmF1bHQob2JqKSogaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYSBzZXJpYWxpemFibGUgdmVyc2lvbiBvZgogICAgKm9iaiogb3IgcmFpc2UgOmV4YzpgVHlwZUVycm9yYC4gIFRoZSBkZWZhdWx0IHNpbXBseSByYWlzZXMgOmV4YzpgVHlwZUVycm9yYC4KQEAgLTI0OCw2ICsyNDUsOCBAQAogICAga3dhcmc7IG90aGVyd2lzZSA6Y2xhc3M6YEpTT05EZWNvZGVyYCBpcyB1c2VkLiAgQWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cwogICAgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzcy4KIAorICAgSWYgdGhlIGRhdGEgYmVpbmcgZGVzZXJpYWxpemVkIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgogCiAuLiBmdW5jdGlvbjo6IGxvYWRzKHMsIGVuY29kaW5nPU5vbmUsIGNscz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLCBwYXJzZV9mbG9hdD1Ob25lLCBwYXJzZV9pbnQ9Tm9uZSwgcGFyc2VfY29uc3RhbnQ9Tm9uZSwgb2JqZWN0X3BhaXJzX2hvb2s9Tm9uZSwgKiprdykKIApAQCAtMjU3LDYgKzI1Niw4IEBACiAgICBUaGUgb3RoZXIgYXJndW1lbnRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6ZnVuYzpgbG9hZGAsIGV4Y2VwdAogICAgKmVuY29kaW5nKiB3aGljaCBpcyBpZ25vcmVkIGFuZCBkZXByZWNhdGVkLgogCisgICBJZiB0aGUgZGF0YSBiZWluZyBkZXNlcmlhbGl6ZWQgaXMgbm90IGEgdmFsaWQgSlNPTiBkb2N1bWVudCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAKIEVuY29kZXJzIGFuZCBEZWNvZGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNTQsMjMgKzM1NSwyNiBAQAogCiAgICAuLiBfcHktdG8tanNvbi10YWJsZToKIAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBQeXRob24gICAgICAgICAgICB8IEpTT04gICAgICAgICAgfAotICAgKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KwotICAgfCBkaWN0ICAgICAgICAgICAgICB8IG9iamVjdCAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBsaXN0LCB0dXBsZSAgICAgICB8IGFycmF5ICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBzdHIgICAgICAgICAgICAgICB8IHN0cmluZyAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBpbnQsIGZsb2F0ICAgICAgICB8IG51bWJlciAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBUcnVlICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBGYWxzZSAgICAgICAgICAgICB8IGZhbHNlICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBOb25lICAgICAgICAgICAgICB8IG51bGwgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBQeXRob24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEpTT04gICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KworICAgfCBkaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9iamVjdCAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBsaXN0LCB0dXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFycmF5ICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBzdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0cmluZyAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBpbnQsIGZsb2F0LCBpbnQtICYgZmxvYXQtZGVyaXZlZCBFbnVtcyB8IG51bWJlciAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBUcnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBGYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZhbHNlICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG51bGwgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgaW50LSBhbmQgZmxvYXQtZGVyaXZlZCBFbnVtIGNsYXNzZXMuCiAKICAgIFRvIGV4dGVuZCB0aGlzIHRvIHJlY29nbml6ZSBvdGhlciBvYmplY3RzLCBzdWJjbGFzcyBhbmQgaW1wbGVtZW50IGEKICAgIDptZXRoOmBkZWZhdWx0YCBtZXRob2Qgd2l0aCBhbm90aGVyIG1ldGhvZCB0aGF0IHJldHVybnMgYSBzZXJpYWxpemFibGUgb2JqZWN0CkBAIC00MTAsMTUgKzQxNCwxMyBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFsbG93IHN0cmluZ3MgZm9yICppbmRlbnQqIGluIGFkZGl0aW9uIHRvIGludGVnZXJzLgogCi0gICAuLiBub3RlOjoKLQotICAgICAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUgb3V0cHV0IG1pZ2h0IGluY2x1ZGUKLSAgICAgIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hlbiAqaW5kZW50KiBpcyBzcGVjaWZpZWQuICBZb3UgY2FuIHVzZQotICAgICAgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KLQogICAgSWYgc3BlY2lmaWVkLCAqc2VwYXJhdG9ycyogc2hvdWxkIGJlIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKWBgCi0gICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OCi0gICByZXByZXNlbnRhdGlvbiwgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBVc2UgYGAoJywnLCAnOiAnKWBgIGFzIGRlZmF1bHQgaWYgKmluZGVudCogaXMgbm90IGBgTm9uZWBgLgogCiAgICBJZiBzcGVjaWZpZWQsICpkZWZhdWx0KiBpcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBjYW4ndAogICAgb3RoZXJ3aXNlIGJlIHNlcmlhbGl6ZWQuICBJdCBzaG91bGQgcmV0dXJuIGEgSlNPTiBlbmNvZGFibGUgdmVyc2lvbiBvZiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdAppbmRleCAzMDNiNGQ4Li4xODA1NjliIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CkBAIC04MCwyNyArODAsNDkgQEAKIAogLi4gZnVuY3Rpb246OiBmaWxlQ29uZmlnKGZuYW1lLCBkZWZhdWx0cz1Ob25lLCBkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM9VHJ1ZSkKIAotICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgOm1vZDpgY29uZmlncGFyc2VyYFwtZm9ybWF0IGZpbGUKLSAgIG5hbWVkICpmbmFtZSouIFRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgc2hvdWxkIGJlIGFzIGRlc2NyaWJlZCBpbgotICAgOnJlZjpgbG9nZ2luZy1jb25maWctZmlsZWZvcm1hdGAuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzCi0gICBmcm9tIGFuIGFwcGxpY2F0aW9uLCBhbGxvd2luZyBhbiBlbmQgdXNlciB0byBzZWxlY3QgZnJvbSB2YXJpb3VzIHByZS1jYW5uZWQKLSAgIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUgZGV2ZWxvcGVyIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHByZXNlbnQgdGhlIGNob2ljZXMKLSAgIGFuZCBsb2FkIHRoZSBjaG9zZW4gY29uZmlndXJhdGlvbikuCisgICBSZWFkcyB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZyb20gYSA6bW9kOmBjb25maWdwYXJzZXJgXC1mb3JtYXQgZmlsZS4gVGhlCisgICBmb3JtYXQgb2YgdGhlIGZpbGUgc2hvdWxkIGJlIGFzIGRlc2NyaWJlZCBpbgorICAgOnJlZjpgbG9nZ2luZy1jb25maWctZmlsZWZvcm1hdGAuCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGFuIGFwcGxpY2F0aW9uLCBhbGxvd2luZyBhbgorICAgZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUgZGV2ZWxvcGVyCisgICBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzIGFuZCBsb2FkIHRoZSBjaG9zZW4KKyAgIGNvbmZpZ3VyYXRpb24pLgorCisgICA6cGFyYW0gZm5hbWU6IEEgZmlsZW5hbWUsIG9yIGEgZmlsZS1saWtlIG9iamVjdCwgb3IgYW4gaW5zdGFuY2UgZGVyaXZlZAorICAgICAgICAgICAgICAgICBmcm9tIDpjbGFzczpgfmNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgLiBJZiBhCisgICAgICAgICAgICAgICAgIGBgUmF3Q29uZmlnUGFyc2VyYGAtZGVyaXZlZCBpbnN0YW5jZSBpcyBwYXNzZWQsIGl0IGlzIHVzZWQgYXMKKyAgICAgICAgICAgICAgICAgaXMuIE90aGVyd2lzZSwgYSA6Y2xhc3M6YH5jb25maWdwYXJzZXIuQ29uZmlncGFyc2VyYCBpcworICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWFkIGJ5IGl0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQgaW4gYGBmbmFtZWBgLiBJZiB0aGF0IGhhcyBhIDptZXRoOmByZWFkbGluZWAKKyAgICAgICAgICAgICAgICAgbWV0aG9kLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgZmlsZS1saWtlIG9iamVjdCBhbmQgcmVhZCB1c2luZworICAgICAgICAgICAgICAgICA6bWV0aDpgfmNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZF9maWxlYDsgb3RoZXJ3aXNlLAorICAgICAgICAgICAgICAgICBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgZmlsZW5hbWUgYW5kIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICA6bWV0aDpgfmNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZGAuCisKIAogICAgOnBhcmFtIGRlZmF1bHRzOiBEZWZhdWx0cyB0byBiZSBwYXNzZWQgdG8gdGhlIENvbmZpZ1BhcnNlciBjYW4gYmUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgYXJndW1lbnQuCiAKICAgIDpwYXJhbSBkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6IElmIHNwZWNpZmllZCBhcyBgYEZhbHNlYGAsIGxvZ2dlcnMgd2hpY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IHdoZW4gdGhpcyBjYWxsIGlzIG1hZGUgYXJlIGxlZnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsb25lLiBUaGUgZGVmYXVsdCBpcyBgYFRydWVgYCBiZWNhdXNlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQuIFRoZSBkZWZhdWx0IGlzIGBgVHJ1ZWBgIGJlY2F1c2UgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyBvbGQgYmVoYXZpb3VyIGluIGEgYmFja3dhcmQtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdheS4gVGhpcyBiZWhhdmlvdXIgaXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUgYW55IGV4aXN0aW5nIGxvZ2dlcnMgdW5sZXNzIHRoZXkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIGFuY2VzdG9ycyBhcmUgZXhwbGljaXRseSBuYW1lZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmB+Y29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcmAgaXMKKyAgICAgIG5vdyBhY2NlcHRlZCBhcyBhIHZhbHVlIGZvciBgYGZuYW1lYGAuIFRoaXMgZmFjaWxpdGF0ZXM6CiAKLS4uIGZ1bmN0aW9uOjogbGlzdGVuKHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JUKQorICAgICAgKiBVc2Ugb2YgYSBjb25maWd1cmF0aW9uIGZpbGUgd2hlcmUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGp1c3QgcGFydAorICAgICAgICBvZiB0aGUgb3ZlcmFsbCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLgorICAgICAgKiBVc2Ugb2YgYSBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSBhIGZpbGUsIGFuZCB0aGVuIG1vZGlmaWVkIGJ5IHRoZSB1c2luZworICAgICAgICBhcHBsaWNhdGlvbiAoZS5nLiBiYXNlZCBvbiBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBvciBvdGhlciBhc3BlY3RzCisgICAgICAgIG9mIHRoZSBydW50aW1lIGVudmlyb25tZW50KSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBgZmlsZUNvbmZpZ2BgLgorCisuLiBmdW5jdGlvbjo6IGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpCiAKICAgIFN0YXJ0cyB1cCBhIHNvY2tldCBzZXJ2ZXIgb24gdGhlIHNwZWNpZmllZCBwb3J0LCBhbmQgbGlzdGVucyBmb3IgbmV3CiAgICBjb25maWd1cmF0aW9ucy4gSWYgbm8gcG9ydCBpcyBzcGVjaWZpZWQsIHRoZSBtb2R1bGUncyBkZWZhdWx0CkBAIC0xMTEsNiArMTMzLDE3IEBACiAgICA6bWV0aDpgfnRocmVhZGluZy5UaHJlYWQuam9pbmAgd2hlbiBhcHByb3ByaWF0ZS4gVG8gc3RvcCB0aGUgc2VydmVyLAogICAgY2FsbCA6ZnVuYzpgc3RvcExpc3RlbmluZ2AuCiAKKyAgIFRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50LCBpZiBzcGVjaWZpZWQsIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHNob3VsZAorICAgdmVyaWZ5IHdoZXRoZXIgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSBzb2NrZXQgYXJlIHZhbGlkIGFuZCBzaG91bGQgYmUKKyAgIHByb2Nlc3NlZC4gVGhpcyBjb3VsZCBiZSBkb25lIGJ5IGVuY3J5cHRpbmcgYW5kL29yIHNpZ25pbmcgd2hhdCBpcyBzZW50CisgICBhY3Jvc3MgdGhlIHNvY2tldCwgc3VjaCB0aGF0IHRoZSBgYHZlcmlmeWBgIGNhbGxhYmxlIGNhbiBwZXJmb3JtCisgICBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGFuZC9vciBkZWNyeXB0aW9uLiBUaGUgYGB2ZXJpZnlgYCBjYWxsYWJsZSBpcyBjYWxsZWQKKyAgIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgLSB0aGUgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSBzb2NrZXQgLSBhbmQgc2hvdWxkCisgICByZXR1cm4gdGhlIGJ5dGVzIHRvIGJlIHByb2Nlc3NlZCwgb3IgTm9uZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBieXRlcyBzaG91bGQKKyAgIGJlIGRpc2NhcmRlZC4gVGhlIHJldHVybmVkIGJ5dGVzIGNvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwYXNzZWQgaW4gYnl0ZXMKKyAgIChlLmcuIHdoZW4gb25seSB2ZXJpZmljYXRpb24gaXMgZG9uZSksIG9yIHRoZXkgY291bGQgYmUgY29tcGxldGVseSBkaWZmZXJlbnQKKyAgIChwZXJoYXBzIGlmIGRlY3J5cHRpb24gd2VyZSBwZXJmb3JtZWQpLgorCiAgICBUbyBzZW5kIGEgY29uZmlndXJhdGlvbiB0byB0aGUgc29ja2V0LCByZWFkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCiAgICBzZW5kIGl0IHRvIHRoZSBzb2NrZXQgYXMgYSBzdHJpbmcgb2YgYnl0ZXMgcHJlY2VkZWQgYnkgYSBmb3VyLWJ5dGUgbGVuZ3RoCiAgICBzdHJpbmcgcGFja2VkIGluIGJpbmFyeSB1c2luZyBgYHN0cnVjdC5wYWNrKCc+TCcsIG4pYGAuCkBAIC0xMjksNyArMTYyLDEyIEBACiAgICAgICA6ZnVuYzpgbGlzdGVuYCBzb2NrZXQgYW5kIHNlbmRpbmcgYSBjb25maWd1cmF0aW9uIHdoaWNoIHJ1bnMgd2hhdGV2ZXIKICAgICAgIGNvZGUgdGhlIGF0dGFja2VyIHdhbnRzIHRvIGhhdmUgZXhlY3V0ZWQgaW4gdGhlIHZpY3RpbSdzIHByb2Nlc3MuIFRoaXMgaXMKICAgICAgIGVzcGVjaWFsbHkgZWFzeSB0byBkbyBpZiB0aGUgZGVmYXVsdCBwb3J0IGlzIHVzZWQsIGJ1dCBub3QgaGFyZCBldmVuIGlmIGEKLSAgICAgIGRpZmZlcmVudCBwb3J0IGlzIHVzZWQpLgorICAgICAgZGlmZmVyZW50IHBvcnQgaXMgdXNlZCkuIFRvIGF2b2lkIHRoZSByaXNrIG9mIHRoaXMgaGFwcGVuaW5nLCB1c2UgdGhlCisgICAgICBgYHZlcmlmeWBgIGFyZ3VtZW50IHRvIDpmdW5jOmBsaXN0ZW5gIHRvIHByZXZlbnQgdW5yZWNvZ25pc2VkCisgICAgICBjb25maWd1cmF0aW9ucyBmcm9tIGJlaW5nIGFwcGxpZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LgorICAgICAgVGhlIGBgdmVyaWZ5YGAgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAuLiBmdW5jdGlvbjo6IHN0b3BMaXN0ZW5pbmcoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CmluZGV4IDQxNWUzOTcuLmEyYjE0ZGUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CkBAIC0zMDAsNyArMzAwLDcgQEAKIHRpbWVkIGludGVydmFscy4KIAogCi0uLiBjbGFzczo6IFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcihmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UpCisuLiBjbGFzczo6IFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcihmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UsIGF0VGltZT1Ob25lKQogCiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgY2xhc3MuIFRoZQogICAgc3BlY2lmaWVkIGZpbGUgaXMgb3BlbmVkIGFuZCB1c2VkIGFzIHRoZSBzdHJlYW0gZm9yIGxvZ2dpbmcuIE9uIHJvdGF0aW5nIGl0IGFsc28KQEAgLTM1MCw2ICszNTAsMTIgQEAKICAgIElmICpkZWxheSogaXMgdHJ1ZSwgdGhlbiBmaWxlIG9wZW5pbmcgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGZpcnN0IGNhbGwgdG8KICAgIDptZXRoOmBlbWl0YC4KIAorICAgSWYgKmF0VGltZSogaXMgbm90IGBgTm9uZWBgLCBpdCBtdXN0IGJlIGEgYGBkYXRldGltZS50aW1lYGAgaW5zdGFuY2Ugd2hpY2gKKyAgIHNwZWNpZmllcyB0aGUgdGltZSBvZiBkYXkgd2hlbiByb2xsb3ZlciBvY2N1cnMsIGZvciB0aGUgY2FzZXMgd2hlcmUgcm9sbG92ZXIKKyAgIGlzIHNldCB0byBoYXBwZW4gImF0IG1pZG5pZ2h0IiBvciAib24gYSBwYXJ0aWN1bGFyIHdlZWtkYXkiLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgKmF0VGltZSogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAogICAgLi4gbWV0aG9kOjogZG9Sb2xsb3ZlcigpCiAKQEAgLTM3NSw2ICszODEsOSBAQAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bwogICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBtYWNoaW5lIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4gYnkgKmhvc3QqIGFuZCAqcG9ydCouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiBgYHBvcnRgYCBpcyBzcGVjaWZpZWQgYXMgYGBOb25lYGAsIGEgVW5peCBkb21haW4gc29ja2V0IGlzIGNyZWF0ZWQKKyAgICAgIHVzaW5nIHRoZSB2YWx1ZSBpbiBgYGhvc3RgYCAtIG90aGVyd2lzZSwgYSBUQ1Agc29ja2V0IGlzIGNyZWF0ZWQuCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIApAQCAtNDYwLDYgKzQ2OSw5IEBACiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YERhdGFncmFtSGFuZGxlcmAgY2xhc3MgaW50ZW5kZWQgdG8KICAgIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgbWFjaGluZSB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGJ5ICpob3N0KiBhbmQgKnBvcnQqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBwb3J0YGAgaXMgc3BlY2lmaWVkIGFzIGBgTm9uZWBgLCBhIFVuaXggZG9tYWluIHNvY2tldCBpcyBjcmVhdGVkCisgICAgICB1c2luZyB0aGUgdmFsdWUgaW4gYGBob3N0YGAgLSBvdGhlcndpc2UsIGEgVENQIHNvY2tldCBpcyBjcmVhdGVkLgogCiAgICAuLiBtZXRob2Q6OiBlbWl0KCkKIApAQCAtODM4LDEwICs4NTAsMjcgQEAKICAgIGNyZWRlbnRpYWxzLCB5b3Ugc2hvdWxkIGFsc28gc3BlY2lmeSBzZWN1cmU9VHJ1ZSBzbyB0aGF0IHlvdXIgdXNlcmlkIGFuZAogICAgcGFzc3dvcmQgYXJlIG5vdCBwYXNzZWQgaW4gY2xlYXJ0ZXh0IGFjcm9zcyB0aGUgd2lyZS4KIAorICAgLi4gbWV0aG9kOjogbWFwTG9nUmVjb3JkKHJlY29yZCkKKworICAgICAgUHJvdmlkZXMgYSBkaWN0aW9uYXJ5LCBiYXNlZCBvbiBgYHJlY29yZGBgLCB3aGljaCBpcyB0byBiZSBVUkwtZW5jb2RlZAorICAgICAgYW5kIHNlbnQgdG8gdGhlIHdlYiBzZXJ2ZXIuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucworICAgICAgYGByZWNvcmQuX19kaWN0X19gYC4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gaWYgZS5nLiBvbmx5IGEKKyAgICAgIHN1YnNldCBvZiA6Y2xhc3M6YH5sb2dnaW5nLkxvZ1JlY29yZGAgaXMgdG8gYmUgc2VudCB0byB0aGUgd2ViIHNlcnZlciwgb3IKKyAgICAgIGlmIG1vcmUgc3BlY2lmaWMgY3VzdG9taXphdGlvbiBvZiB3aGF0J3Mgc2VudCB0byB0aGUgc2VydmVyIGlzIHJlcXVpcmVkLgogCiAgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKIAotICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhIHBlcmNlbnQtZW5jb2RlZCBkaWN0aW9uYXJ5LgorICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhbiBVUkwtZW5jb2RlZCBkaWN0aW9uYXJ5LiBUaGUKKyAgICAgIDptZXRoOmBtYXBMb2dSZWNvcmRgIG1ldGhvZCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIHJlY29yZCB0byB0aGUKKyAgICAgIGRpY3Rpb25hcnkgdG8gYmUgc2VudC4KKworICAgLi4gbm90ZTo6IFNpbmNlIHByZXBhcmluZyBhIHJlY29yZCBmb3Igc2VuZGluZyBpdCB0byBhIFdlYiBzZXJ2ZXIgaXMgbm90CisgICAgICB0aGUgc2FtZSBhcyBhIGdlbmVyaWMgZm9ybWF0dGluZyBvcGVyYXRpb24sIHVzaW5nCisgICAgICA6bWV0aDpgfmxvZ2dpbmcuSGFuZGxlci5zZXRGb3JtYXR0ZXJgIHRvIHNwZWNpZnkgYQorICAgICAgOmNsYXNzOmB+bG9nZ2luZy5Gb3JtYXR0ZXJgIGZvciBhIDpjbGFzczpgSFRUUEhhbmRsZXJgIGhhcyBubyBlZmZlY3QuCisgICAgICBJbnN0ZWFkIG9mIGNhbGxpbmcgOm1ldGg6YH5sb2dnaW5nLkhhbmRsZXIuZm9ybWF0YCwgdGhpcyBoYW5kbGVyIGNhbGxzCisgICAgICA6bWV0aDpgbWFwTG9nUmVjb3JkYCBhbmQgdGhlbiA6ZnVuYzpgdXJsbGliLnBhcnNlLnVybGVuY29kZWAgdG8gZW5jb2RlIHRoZQorICAgICAgZGljdGlvbmFyeSBpbiBhIGZvcm0gc3VpdGFibGUgZm9yIHNlbmRpbmcgdG8gYSBXZWIgc2VydmVyLgogCiAKIC4uIF9xdWV1ZS1oYW5kbGVyOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdAppbmRleCA4ZDA5M2UxLi45OTgzNzExIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdApAQCAtMjUwLDcgKzI1MCw3IEBACiAgICBpbnRlcnByZXRlZCBhcyBmb3IgOm1ldGg6YGRlYnVnYC4KIAogCi0uLiBtZXRob2Q6OiBMb2dnZXIuZXhjZXB0aW9uKG1zZywgKmFyZ3MpCisuLiBtZXRob2Q6OiBMb2dnZXIuZXhjZXB0aW9uKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiAgICBMb2dzIGEgbWVzc2FnZSB3aXRoIGxldmVsIDpjb25zdDpgRVJST1JgIG9uIHRoaXMgbG9nZ2VyLiBUaGUgYXJndW1lbnRzIGFyZQogICAgaW50ZXJwcmV0ZWQgYXMgZm9yIDptZXRoOmBkZWJ1Z2AuIEV4Y2VwdGlvbiBpbmZvIGlzIGFkZGVkIHRvIHRoZSBsb2dnaW5nCkBAIC05OTIsNyArOTkyLDcgQEAKICAgIGFyZSBpbnRlcnByZXRlZCBhcyBmb3IgOmZ1bmM6YGRlYnVnYC4KIAogCi0uLiBmdW5jdGlvbjo6IGV4Y2VwdGlvbihtc2csICphcmdzKQorLi4gZnVuY3Rpb246OiBleGNlcHRpb24obXNnLCAqYXJncywgKiprd2FyZ3MpCiAKICAgIExvZ3MgYSBtZXNzYWdlIHdpdGggbGV2ZWwgOmNvbnN0OmBFUlJPUmAgb24gdGhlIHJvb3QgbG9nZ2VyLiBUaGUgYXJndW1lbnRzIGFyZQogICAgaW50ZXJwcmV0ZWQgYXMgZm9yIDpmdW5jOmBkZWJ1Z2AuIEV4Y2VwdGlvbiBpbmZvIGlzIGFkZGVkIHRvIHRoZSBsb2dnaW5nCkBAIC0xMDQ5LDYgKzEwNDksMTEgQEAKICAgIG9mIHRoZSBkZWZpbmVkIGxldmVscyBpcyBwYXNzZWQgaW4sIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcwogICAgcmV0dXJuZWQuIE90aGVyd2lzZSwgdGhlIHN0cmluZyAnTGV2ZWwgJXMnICUgbHZsIGlzIHJldHVybmVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSW4gUHl0aG9uIHZlcnNpb25zIGVhcmxpZXIgdGhhbiAzLjQsIHRoaXMgZnVuY3Rpb24gY291bGQgYWxzbyBiZSBwYXNzZWQgYQorICAgICAgdGV4dCBsZXZlbCwgYW5kIHdvdWxkIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBudW1lcmljIHZhbHVlIG9mIHRoZSBsZXZlbC4KKyAgICAgIFRoaXMgdW5kb2N1bWVudGVkIGJlaGF2aW91ciB3YXMgY29uc2lkZXJlZCBhIG1pc3Rha2UsIGFuZCB3YXMgcmVtb3ZlZCBpbgorICAgICAgUHl0aG9uIDMuNCwgYnV0IHJlaW5zdGF0ZWQgaW4gMy40LjIgZHVlIHRvIHJldGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogCiAuLiBmdW5jdGlvbjo6IG1ha2VMb2dSZWNvcmQoYXR0cmRpY3QpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2x6bWEucnN0IGIvRG9jL2xpYnJhcnkvbHptYS5yc3QKaW5kZXggMDdiNjllYi4uYjcxMDUxZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbHptYS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbHptYS5yc3QKQEAgLTM5LDggKzM5LDggQEAKICAgIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgInIiYGAsIGBgInJiImBgLCBgYCJ3ImBgLCBgYCJ3YiJgYCwKLSAgIGBgImEiYGAgb3IgYGAiYWIiYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCJydCJgYCwgYGAid3QiYGAsIG9yIGBgImF0ImBgIGZvcgotICAgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCJyYiJgYC4KKyAgIGBgIngiYGAsIGBgInhiImBgLCBgYCJhImBgIG9yIGBgImFiImBgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAicnQiYGAsCisgICBgYCJ3dCJgYCwgYGAieHQiYGAsIG9yIGBgImF0ImBgIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgInJiImBgLgogCiAgICBXaGVuIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkaW5nLCB0aGUgKmZvcm1hdCogYW5kICpmaWx0ZXJzKiBhcmd1bWVudHMgaGF2ZQogICAgdGhlIHNhbWUgbWVhbmluZ3MgYXMgZm9yIDpjbGFzczpgTFpNQURlY29tcHJlc3NvcmAuIEluIHRoaXMgY2FzZSwgdGhlICpjaGVjayoKQEAgLTU3LDYgKzU3LDkgQEAKICAgIDpjbGFzczpgaW8uVGV4dElPV3JhcHBlcmAgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvcgogICAgaGFuZGxpbmcgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCJ4ImBgLCBgYCJ4YiJgYCBhbmQgYGAieHQiYGAgbW9kZXMuCisKIAogLi4gY2xhc3M6OiBMWk1BRmlsZShmaWxlbmFtZT1Ob25lLCBtb2RlPSJyIiwgXCosIGZvcm1hdD1Ob25lLCBjaGVjaz0tMSwgcHJlc2V0PU5vbmUsIGZpbHRlcnM9Tm9uZSkKIApAQCAtNjksOCArNzIsOSBAQAogICAgZmlsZSB3aWxsIG5vdCBiZSBjbG9zZWQgd2hlbiB0aGUgOmNsYXNzOmBMWk1BRmlsZWAgaXMgY2xvc2VkLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYGAiciJgYCBmb3IgcmVhZGluZyAoZGVmYXVsdCksIGBgInciYGAgZm9yCi0gICBvdmVyd3JpdGluZywgb3IgYGAiYSJgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzCi0gICBgYCJyYiJgYCwgYGAid2IiYGAsIGFuZCBgYCJhYiJgYCByZXNwZWN0aXZlbHkuCisgICBvdmVyd3JpdGluZywgYGAieCJgYCBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLCBvciBgYCJhImBgIGZvciBhcHBlbmRpbmcuIFRoZXNlCisgICBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzIGBgInJiImBgLCBgYCJ3YiJgYCwgYGAieGIiYGAgYW5kIGBgImFiImBgCisgICByZXNwZWN0aXZlbHkuCiAKICAgIElmICpmaWxlbmFtZSogaXMgYSBmaWxlIG9iamVjdCAocmF0aGVyIHRoYW4gYW4gYWN0dWFsIGZpbGUgbmFtZSksIGEgbW9kZSBvZgogICAgYGAidyJgYCBkb2VzIG5vdCB0cnVuY2F0ZSB0aGUgZmlsZSwgYW5kIGlzIGluc3RlYWQgZXF1aXZhbGVudCB0byBgYCJhImBgLgpAQCAtMTAzLDYgKzEwNyw5IEBACiAgICAgICAgICBmaWxlIG9iamVjdCAoZS5nLiBpZiB0aGUgOmNsYXNzOmBMWk1BRmlsZWAgd2FzIGNvbnN0cnVjdGVkIGJ5IHBhc3NpbmcgYQogICAgICAgICAgZmlsZSBvYmplY3QgZm9yICpmaWxlbmFtZSopLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAgYW5kIGBgInhiImBgIG1vZGVzLgorCiAKIENvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nIGRhdGEgaW4gbWVtb3J5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFpbGJveC5yc3QgYi9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdAppbmRleCAwNDc4ZWQxLi5hMDNmZDFjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdApAQCAtMjAyLDcgKzIwMiw3IEBACiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgICAgVGhlIGZpbGUgb2JqZWN0IHJlYWxseSBpcyBhIGJpbmFyeSBmaWxlOyBwcmV2aW91c2x5IGl0IHdhcyBpbmNvcnJlY3RseQogICAgICAgICAgcmV0dXJuZWQgaW4gdGV4dCBtb2RlLiAgQWxzbywgdGhlIGZpbGUtbGlrZSBvYmplY3Qgbm93IHN1cHBvcnRzIHRoZQotICAgICAgICAgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sOiB5b3UgY2FuIHVzZSBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdG8KKyAgICAgICAgIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDogeW91IGNhbiB1c2UgYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHRvCiAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNsb3NlIGl0LgogCiAgICAgICAuLiBub3RlOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0IGIvRG9jL2xpYnJhcnkvbWFyc2hhbC5yc3QKaW5kZXggM2I5ZTNkMi4uMTI0ZWI2MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbWFyc2hhbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbWFyc2hhbC5yc3QKQEAgLTQwLDEwICs0MCwxMSBAQAogcG9pbnQgbnVtYmVycywgY29tcGxleCBudW1iZXJzLCBzdHJpbmdzLCBieXRlcywgYnl0ZWFycmF5cywgdHVwbGVzLCBsaXN0cywgc2V0cywKIGZyb3plbnNldHMsIGRpY3Rpb25hcmllcywgYW5kIGNvZGUgb2JqZWN0cywgd2hlcmUgaXQgc2hvdWxkIGJlIHVuZGVyc3Rvb2QgdGhhdAogdHVwbGVzLCBsaXN0cywgc2V0cywgZnJvemVuc2V0cyBhbmQgZGljdGlvbmFyaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBhcyBsb25nIGFzCi10aGUgdmFsdWVzIGNvbnRhaW5lZCB0aGVyZWluIGFyZSB0aGVtc2VsdmVzIHN1cHBvcnRlZDsgYW5kIHJlY3Vyc2l2ZSBsaXN0cywgc2V0cwotYW5kIGRpY3Rpb25hcmllcyBzaG91bGQgbm90IGJlIHdyaXR0ZW4gKHRoZXkgd2lsbCBjYXVzZSBpbmZpbml0ZSBsb29wcykuICBUaGUKK3RoZSB2YWx1ZXMgY29udGFpbmVkIHRoZXJlaW4gYXJlIHRoZW1zZWx2ZXMgc3VwcG9ydGVkLgogc2luZ2xldG9ucyA6Y29uc3Q6YE5vbmVgLCA6Y29uc3Q6YEVsbGlwc2lzYCBhbmQgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgY2FuIGFsc28gYmUKIG1hcnNoYWxsZWQgYW5kIHVubWFyc2hhbGxlZC4KK0ZvciBmb3JtYXQgKnZlcnNpb24qIGxvd2VyIHRoYW4gMywgcmVjdXJzaXZlIGxpc3RzLCBzZXRzIGFuZCBkaWN0aW9uYXJpZXMgY2Fubm90CitiZSB3cml0dGVuIChzZWUgYmVsb3cpLgogCiBUaGVyZSBhcmUgZnVuY3Rpb25zIHRoYXQgcmVhZC93cml0ZSBmaWxlcyBhcyB3ZWxsIGFzIGZ1bmN0aW9ucyBvcGVyYXRpbmcgb24KIHN0cmluZ3MuCkBAIC0xMDMsNyArMTA0LDkgQEAKIAogICAgSW5kaWNhdGVzIHRoZSBmb3JtYXQgdGhhdCB0aGUgbW9kdWxlIHVzZXMuIFZlcnNpb24gMCBpcyB0aGUgaGlzdG9yaWNhbAogICAgZm9ybWF0LCB2ZXJzaW9uIDEgc2hhcmVzIGludGVybmVkIHN0cmluZ3MgYW5kIHZlcnNpb24gMiB1c2VzIGEgYmluYXJ5IGZvcm1hdAotICAgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFRoZSBjdXJyZW50IHZlcnNpb24gaXMgMi4KKyAgIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLgorICAgVmVyc2lvbiAzIGFkZHMgc3VwcG9ydCBmb3Igb2JqZWN0IGluc3RhbmNpbmcgYW5kIHJlY3Vyc2lvbi4KKyAgIFRoZSBjdXJyZW50IHZlcnNpb24gaXMgMy4KIAogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QgYi9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CmluZGV4IDVmNTBjZjEuLmU1NjhlNjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdApAQCAtOTMsMTEgKzkzLDExMiBAQAogICAgICAgICBwLnN0YXJ0KCkKICAgICAgICAgcC5qb2luKCkKIAotRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSAob24gV2luZG93cykgdGhlIGBgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJ2BgIHBhcnQgaXMKK0ZvciBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhlIGBgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJ2BgIHBhcnQgaXMKIG5lY2Vzc2FyeSwgc2VlIDpyZWY6YG11bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ2AuCiAKIAogCitDb250ZXh0cyBhbmQgc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLi4gX211bHRpcHJvY2Vzc2luZy1zdGFydC1tZXRob2RzOgorCitEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIHN1cHBvcnRzIHRocmVlIHdheXMKK3RvIHN0YXJ0IGEgcHJvY2Vzcy4gIFRoZXNlICpzdGFydCBtZXRob2RzKiBhcmUKKworICAqc3Bhd24qCisgICAgVGhlIHBhcmVudCBwcm9jZXNzIHN0YXJ0cyBhIGZyZXNoIHB5dGhvbiBpbnRlcnByZXRlciBwcm9jZXNzLiAgVGhlCisgICAgY2hpbGQgcHJvY2VzcyB3aWxsIG9ubHkgaW5oZXJpdCB0aG9zZSByZXNvdXJjZXMgbmVjZXNzYXJ5IHRvIHJ1bgorICAgIHRoZSBwcm9jZXNzIG9iamVjdHMgOm1ldGg6YH5Qcm9jZXNzLnJ1bmAgbWV0aG9kLiAgSW4gcGFydGljdWxhciwKKyAgICB1bm5lY2Vzc2FyeSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBoYW5kbGVzIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzCisgICAgd2lsbCBub3QgYmUgaW5oZXJpdGVkLiAgU3RhcnRpbmcgYSBwcm9jZXNzIHVzaW5nIHRoaXMgbWV0aG9kIGlzCisgICAgcmF0aGVyIHNsb3cgY29tcGFyZWQgdG8gdXNpbmcgKmZvcmsqIG9yICpmb3Jrc2VydmVyKi4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLiAgVGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworICAqZm9yayoKKyAgICBUaGUgcGFyZW50IHByb2Nlc3MgdXNlcyA6ZnVuYzpgb3MuZm9ya2AgdG8gZm9yayB0aGUgUHl0aG9uCisgICAgaW50ZXJwcmV0ZXIuICBUaGUgY2hpbGQgcHJvY2Vzcywgd2hlbiBpdCBiZWdpbnMsIGlzIGVmZmVjdGl2ZWx5CisgICAgaWRlbnRpY2FsIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIEFsbCByZXNvdXJjZXMgb2YgdGhlIHBhcmVudCBhcmUKKyAgICBpbmhlcml0ZWQgYnkgdGhlIGNoaWxkIHByb2Nlc3MuICBOb3RlIHRoYXQgc2FmZWx5IGZvcmtpbmcgYQorICAgIG11bHRpdGhyZWFkZWQgcHJvY2VzcyBpcyBwcm9ibGVtYXRpYy4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IG9ubHkuICBUaGUgZGVmYXVsdCBvbiBVbml4LgorCisgICpmb3Jrc2VydmVyKgorICAgIFdoZW4gdGhlIHByb2dyYW0gc3RhcnRzIGFuZCBzZWxlY3RzIHRoZSAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kLAorICAgIGEgc2VydmVyIHByb2Nlc3MgaXMgc3RhcnRlZC4gIEZyb20gdGhlbiBvbiwgd2hlbmV2ZXIgYSBuZXcgcHJvY2VzcworICAgIGlzIG5lZWRlZCwgdGhlIHBhcmVudCBwcm9jZXNzIGNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgYW5kIHJlcXVlc3RzCisgICAgdGhhdCBpdCBmb3JrIGEgbmV3IHByb2Nlc3MuICBUaGUgZm9yayBzZXJ2ZXIgcHJvY2VzcyBpcyBzaW5nbGUKKyAgICB0aHJlYWRlZCBzbyBpdCBpcyBzYWZlIGZvciBpdCB0byB1c2UgOmZ1bmM6YG9zLmZvcmtgLiAgTm8KKyAgICB1bm5lY2Vzc2FyeSByZXNvdXJjZXMgYXJlIGluaGVyaXRlZC4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycworICAgIG92ZXIgVW5peCBwaXBlcy4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICpzcGF3biogYWRkZWQgb24gYWxsIHVuaXggcGxhdGZvcm1zLCBhbmQgKmZvcmtzZXJ2ZXIqIGFkZGVkIGZvcgorICAgc29tZSB1bml4IHBsYXRmb3Jtcy4KKyAgIENoaWxkIHByb2Nlc3NlcyBubyBsb25nZXIgaW5oZXJpdCBhbGwgb2YgdGhlIHBhcmVudHMgaW5oZXJpdGFibGUKKyAgIGhhbmRsZXMgb24gV2luZG93cy4KKworT24gVW5peCB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcyB3aWxsIGFsc28KK3N0YXJ0IGEgKnNlbWFwaG9yZSB0cmFja2VyKiBwcm9jZXNzIHdoaWNoIHRyYWNrcyB0aGUgdW5saW5rZWQgbmFtZWQKK3NlbWFwaG9yZXMgY3JlYXRlZCBieSBwcm9jZXNzZXMgb2YgdGhlIHByb2dyYW0uICBXaGVuIGFsbCBwcm9jZXNzZXMKK2hhdmUgZXhpdGVkIHRoZSBzZW1hcGhvcmUgdHJhY2tlciB1bmxpbmtzIGFueSByZW1haW5pbmcgc2VtYXBob3Jlcy4KK1VzdWFsbHkgdGhlcmUgc2hvdWxkIGJlIG5vbmUsIGJ1dCBpZiBhIHByb2Nlc3Mgd2FzIGtpbGxlZCBieSBhIHNpZ25hbAordGhlcmUgbWF5IHNvbWUgImxlYWtlZCIgc2VtYXBob3Jlcy4gIChVbmxpbmtpbmcgdGhlIG5hbWVkIHNlbWFwaG9yZXMKK2lzIGEgc2VyaW91cyBtYXR0ZXIgc2luY2UgdGhlIHN5c3RlbSBhbGxvd3Mgb25seSBhIGxpbWl0ZWQgbnVtYmVyLCBhbmQKK3RoZXkgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSB1bmxpbmtlZCB1bnRpbCB0aGUgbmV4dCByZWJvb3QuKQorCitUbyBzZWxlY3QgYSBzdGFydCBtZXRob2QgeW91IHVzZSB0aGUgOmZ1bmM6YHNldF9zdGFydF9tZXRob2RgIGluCit0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgY2xhdXNlIG9mIHRoZSBtYWluIG1vZHVsZS4gIEZvcgorZXhhbXBsZTo6CisKKyAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wCisKKyAgICAgICBkZWYgZm9vKHEpOgorICAgICAgICAgICBxLnB1dCgnaGVsbG8nKQorCisgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgbXAuc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQorICAgICAgICAgICBxID0gbXAuUXVldWUoKQorICAgICAgICAgICBwID0gbXAuUHJvY2Vzcyh0YXJnZXQ9Zm9vLCBhcmdzPShxLCkpCisgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICBwcmludChxLmdldCgpKQorICAgICAgICAgICBwLmpvaW4oKQorCis6ZnVuYzpgc2V0X3N0YXJ0X21ldGhvZGAgc2hvdWxkIG5vdCBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlIGluIHRoZQorcHJvZ3JhbS4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgOmZ1bmM6YGdldF9jb250ZXh0YCB0byBvYnRhaW4gYSBjb250ZXh0CitvYmplY3QuICBDb250ZXh0IG9iamVjdHMgaGF2ZSB0aGUgc2FtZSBBUEkgYXMgdGhlIG11bHRpcHJvY2Vzc2luZworbW9kdWxlLCBhbmQgYWxsb3cgb25lIHRvIHVzZSBtdWx0aXBsZSBzdGFydCBtZXRob2RzIGluIHRoZSBzYW1lCitwcm9ncmFtLiA6OgorCisgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtcAorCisgICAgICAgZGVmIGZvbyhxKToKKyAgICAgICAgICAgcS5wdXQoJ2hlbGxvJykKKworICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgICAgIGN0eCA9IG1wLmdldF9jb250ZXh0KCdzcGF3bicpCisgICAgICAgICAgIHEgPSBjdHguUXVldWUoKQorICAgICAgICAgICBwID0gY3R4LlByb2Nlc3ModGFyZ2V0PWZvbywgYXJncz0ocSwpKQorICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgcHJpbnQocS5nZXQoKSkKKyAgICAgICAgICAgcC5qb2luKCkKKworTm90ZSB0aGF0IG9iamVjdHMgcmVsYXRlZCB0byBvbmUgY29udGV4dCBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aAorcHJvY2Vzc2VzIGZvciBhIGRpZmZlcmVudCBjb250ZXh0LiAgSW4gcGFydGljdWxhciwgbG9ja3MgY3JlYXRlZCB1c2luZwordGhlICpmb3JrKiBjb250ZXh0IGNhbm5vdCBiZSBwYXNzZWQgdG8gYSBwcm9jZXNzZXMgc3RhcnRlZCB1c2luZyB0aGUKKypzcGF3biogb3IgKmZvcmtzZXJ2ZXIqIHN0YXJ0IG1ldGhvZHMuCisKK0EgbGlicmFyeSB3aGljaCB3YW50cyB0byB1c2UgYSBwYXJ0aWN1bGFyIHN0YXJ0IG1ldGhvZCBzaG91bGQgcHJvYmFibHkKK3VzZSA6ZnVuYzpgZ2V0X2NvbnRleHRgIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggdGhlIGNob2ljZSBvZiB0aGUKK2xpYnJhcnkgdXNlci4KKworCiBFeGNoYW5naW5nIG9iamVjdHMgYmV0d2VlbiBwcm9jZXNzZXMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCkBAIC0xNjEsOCArMjYyLDEwIEBACiAKICAgIGRlZiBmKGwsIGkpOgogICAgICAgIGwuYWNxdWlyZSgpCi0gICAgICAgcHJpbnQoJ2hlbGxvIHdvcmxkJywgaSkKLSAgICAgICBsLnJlbGVhc2UoKQorICAgICAgIHRyeToKKyAgICAgICAgICAgcHJpbnQoJ2hlbGxvIHdvcmxkJywgaSkKKyAgICAgICBmaW5hbGx5OgorICAgICAgICAgICBsLnJlbGVhc2UoKQogCiAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAgIGxvY2sgPSBMb2NrKCkKQEAgLTI3NCwxNSArMzc3LDMxIEBACiBGb3IgZXhhbXBsZTo6CiAKICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCisgICBmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCiAKICAgIGRlZiBmKHgpOgogICAgICAgIHJldHVybiB4KngKIAogICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6ICAgICAgICAjIHN0YXJ0IDQgd29ya2VyIHByb2Nlc3NlcwotICAgICAgICAgICByZXN1bHQgPSBwb29sLmFwcGx5X2FzeW5jKGYsIFsxMF0pICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseQotICAgICAgICAgICBwcmludChyZXN1bHQuZ2V0KHRpbWVvdXQ9MSkpICAgICAgICMgcHJpbnRzICIxMDAiIHVubGVzcyB5b3VyIGNvbXB1dGVyIGlzICp2ZXJ5KiBzbG93Ci0gICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIHJhbmdlKDEwKSkpICAgICAgIyBwcmludHMgIlswLCAxLCA0LC4uLiwgODFdIgorICAgICAgICMgc3RhcnQgNCB3b3JrZXIgcHJvY2Vzc2VzCisgICAgICAgd2l0aCBQb29sKHByb2Nlc3Nlcz00KSBhcyBwb29sOgorCisgICAgICAgICAgICMgcHJpbnQgIlswLCAxLCA0LC4uLiwgODFdIgorICAgICAgICAgICBwcmludChwb29sLm1hcChmLCByYW5nZSgxMCkpKQorCisgICAgICAgICAgICMgcHJpbnQgc2FtZSBudW1iZXJzIGluIGFyYml0cmFyeSBvcmRlcgorICAgICAgICAgICBmb3IgaSBpbiBwb29sLmltYXBfdW5vcmRlcmVkKGYsIHJhbmdlKDEwKSk6CisgICAgICAgICAgICAgICBwcmludChpKQorCisgICAgICAgICAgICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseQorICAgICAgICAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGYsIFsxMF0pCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyBwcmludHMgIjEwMCIKKworICAgICAgICAgICAjIG1ha2Ugd29ya2VyIHNsZWVwIGZvciAxMCBzZWNzCisgICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoc2xlZXAsIFsxMF0pCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyByYWlzZXMgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcgorCisgICAgICAgIyBleGl0aW5nIHRoZSAnd2l0aCctYmxvY2sgaGFzIHN0b3BwZWQgdGhlIHBvb2wKIAogTm90ZSB0aGF0IHRoZSBtZXRob2RzIG9mIGEgcG9vbCBzaG91bGQgb25seSBldmVyIGJlIHVzZWQgYnkgdGhlCiBwcm9jZXNzIHdoaWNoIGNyZWF0ZWQgaXQuCkBAIC03MzEsNiArODUwLDkgQEAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbS4gIE1heSByYWlzZQogICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCiAKKyAgIC4uIHNlZWFsc286OgorICAgICAgOmZ1bmM6YG9zLmNwdV9jb3VudGAKKwogLi4gZnVuY3Rpb246OiBjdXJyZW50X3Byb2Nlc3MoKQogCiAgICBSZXR1cm4gdGhlIDpjbGFzczpgUHJvY2Vzc2Agb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4KQEAgLTc2MSw2ICs4ODMsNDMgQEAKICAgIElmIHRoZSBtb2R1bGUgaXMgYmVpbmcgcnVuIG5vcm1hbGx5IGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdGhlbgogICAgOmZ1bmM6YGZyZWV6ZV9zdXBwb3J0YCBoYXMgbm8gZWZmZWN0LgogCisuLiBmdW5jdGlvbjo6IGdldF9hbGxfc3RhcnRfbWV0aG9kcygpCisKKyAgIFJldHVybnMgYSBsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgc3RhcnQgbWV0aG9kcywgdGhlIGZpcnN0IG9mIHdoaWNoCisgICBpcyB0aGUgZGVmYXVsdC4gIFRoZSBwb3NzaWJsZSBzdGFydCBtZXRob2RzIGFyZSBgYCdmb3JrJ2BgLAorICAgYGAnc3Bhd24nYGAgYW5kIGBgJ2ZvcmtzZXJ2ZXInYGAuICBPbiBXaW5kb3dzIG9ubHkgYGAnc3Bhd24nYGAgaXMKKyAgIGF2YWlsYWJsZS4gIE9uIFVuaXggYGAnZm9yaydgYCBhbmQgYGAnc3Bhd24nYGAgYXJlIGFsd2F5cworICAgc3VwcG9ydGVkLCB3aXRoIGBgJ2ZvcmsnYGAgYmVpbmcgdGhlIGRlZmF1bHQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGdldF9jb250ZXh0KG1ldGhvZD1Ob25lKQorCisgICBSZXR1cm4gYSBjb250ZXh0IG9iamVjdCB3aGljaCBoYXMgdGhlIHNhbWUgYXR0cmlidXRlcyBhcyB0aGUKKyAgIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlLgorCisgICBJZiAqbWV0aG9kKiBpcyAqTm9uZSogdGhlbiB0aGUgZGVmYXVsdCBjb250ZXh0IGlzIHJldHVybmVkLgorICAgT3RoZXJ3aXNlICptZXRob2QqIHNob3VsZCBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCwKKyAgIGBgJ2ZvcmtzZXJ2ZXInYGAuICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgdGhlIHNwZWNpZmllZAorICAgc3RhcnQgbWV0aG9kIGlzIG5vdCBhdmFpbGFibGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGdldF9zdGFydF9tZXRob2QoYWxsb3dfbm9uZT1GYWxzZSkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHN0YXJ0IG1ldGhvZCB1c2VkIGZvciBzdGFydGluZyBwcm9jZXNzZXMuCisKKyAgIElmIHRoZSBzdGFydCBtZXRob2QgaGFzIG5vdCBiZWVuIGZpeGVkIGFuZCAqYWxsb3dfbm9uZSogaXMgZmFsc2UsCisgICB0aGVuIHRoZSBzdGFydCBtZXRob2QgaXMgZml4ZWQgdG8gdGhlIGRlZmF1bHQgYW5kIHRoZSBuYW1lIGlzCisgICByZXR1cm5lZC4gIElmIHRoZSBzdGFydCBtZXRob2QgaGFzIG5vdCBiZWVuIGZpeGVkIGFuZCAqYWxsb3dfbm9uZSoKKyAgIGlzIHRydWUgdGhlbiAqTm9uZSogaXMgcmV0dXJuZWQuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGBgJ2ZvcmsnYGAsIGBgJ3NwYXduJ2BgLCBgYCdmb3Jrc2VydmVyJ2BgCisgICBvciAqTm9uZSouICBgYCdmb3JrJ2BgIGlzIHRoZSBkZWZhdWx0IG9uIFVuaXgsIHdoaWxlIGBgJ3NwYXduJ2BgIGlzCisgICB0aGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZnVuY3Rpb246OiBzZXRfZXhlY3V0YWJsZSgpCiAKICAgIFNldHMgdGhlIHBhdGggb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB0byB1c2Ugd2hlbiBzdGFydGluZyBhIGNoaWxkIHByb2Nlc3MuCkBAIC03NjksOCArOTI4LDIxIEBACiAKICAgICAgIHNldF9leGVjdXRhYmxlKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdweXRob253LmV4ZScpKQogCi0gICBiZWZvcmUgdGhleSBjYW4gY3JlYXRlIGNoaWxkIHByb2Nlc3Nlcy4gIChXaW5kb3dzIG9ubHkpCisgICBiZWZvcmUgdGhleSBjYW4gY3JlYXRlIGNoaWxkIHByb2Nlc3Nlcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIE5vdyBzdXBwb3J0ZWQgb24gVW5peCB3aGVuIHRoZSBgYCdzcGF3bidgYCBzdGFydCBtZXRob2QgaXMgdXNlZC4KKworLi4gZnVuY3Rpb246OiBzZXRfc3RhcnRfbWV0aG9kKG1ldGhvZCkKKworICAgU2V0IHRoZSBtZXRob2Qgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gc3RhcnQgY2hpbGQgcHJvY2Vzc2VzLgorICAgKm1ldGhvZCogY2FuIGJlIGBgJ2ZvcmsnYGAsIGBgJ3NwYXduJ2BgIG9yIGBgJ2ZvcmtzZXJ2ZXInYGAuCisKKyAgIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlLCBhbmQgaXQgc2hvdWxkIGJlCisgICBwcm90ZWN0ZWQgaW5zaWRlIHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBjbGF1c2Ugb2YgdGhlCisgICBtYWluIG1vZHVsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIG5vdGU6OgogCkBAIC04NzQsNyArMTA0Niw3IEBACiAgICAgICB1c2luZyA6bWV0aDpgQ29ubmVjdGlvbi5zZW5kYCBhbmQgOm1ldGg6YENvbm5lY3Rpb24ucmVjdmAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgICAgQ29ubmVjdGlvbiBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgLS0gc2VlCisgICAgICBDb25uZWN0aW9uIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCAtLSBzZWUKICAgICAgIDpyZWY6YHR5cGVjb250ZXh0bWFuYWdlcmAuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZW50ZXJfX2AgcmV0dXJucyB0aGUKICAgICAgIGNvbm5lY3Rpb24gb2JqZWN0LCBhbmQgOm1ldGg6YH5jb250ZXh0bWFuYWdlci5fX2V4aXRfX2AgY2FsbHMgOm1ldGg6YGNsb3NlYC4KIApAQCAtMTMzMSw3ICsxNTAzLDcgQEAKICAgICAgIFRoZSBhZGRyZXNzIHVzZWQgYnkgdGhlIG1hbmFnZXIuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICBNYW5hZ2VyIG9iamVjdHMgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIC0tIHNlZQorICAgICAgTWFuYWdlciBvYmplY3RzIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCAtLSBzZWUKICAgICAgIDpyZWY6YHR5cGVjb250ZXh0bWFuYWdlcmAuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZW50ZXJfX2Agc3RhcnRzIHRoZQogICAgICAgc2VydmVyIHByb2Nlc3MgKGlmIGl0IGhhcyBub3QgYWxyZWFkeSBzdGFydGVkKSBhbmQgdGhlbiByZXR1cm5zIHRoZQogICAgICAgbWFuYWdlciBvYmplY3QuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZXhpdF9fYCBjYWxscyA6bWV0aDpgc2h1dGRvd25gLgpAQCAtMTY3OCwyNSArMTg1MCwzNyBAQAogT25lIGNhbiBjcmVhdGUgYSBwb29sIG9mIHByb2Nlc3NlcyB3aGljaCB3aWxsIGNhcnJ5IG91dCB0YXNrcyBzdWJtaXR0ZWQgdG8gaXQKIHdpdGggdGhlIDpjbGFzczpgUG9vbGAgY2xhc3MuCiAKLS4uIGNsYXNzOjogUG9vbChbcHJvY2Vzc2VzWywgaW5pdGlhbGl6ZXJbLCBpbml0YXJnc1ssIG1heHRhc2tzcGVyY2hpbGRdXV1dKQorLi4gY2xhc3M6OiBQb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzWywgbWF4dGFza3NwZXJjaGlsZCBbLCBjb250ZXh0XV1dXV0pCiAKICAgIEEgcHJvY2VzcyBwb29sIG9iamVjdCB3aGljaCBjb250cm9scyBhIHBvb2wgb2Ygd29ya2VyIHByb2Nlc3NlcyB0byB3aGljaCBqb2JzCiAgICBjYW4gYmUgc3VibWl0dGVkLiAgSXQgc3VwcG9ydHMgYXN5bmNocm9ub3VzIHJlc3VsdHMgd2l0aCB0aW1lb3V0cyBhbmQKICAgIGNhbGxiYWNrcyBhbmQgaGFzIGEgcGFyYWxsZWwgbWFwIGltcGxlbWVudGF0aW9uLgogCiAgICAqcHJvY2Vzc2VzKiBpcyB0aGUgbnVtYmVyIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gdXNlLiAgSWYgKnByb2Nlc3NlcyogaXMKLSAgIGBgTm9uZWBgIHRoZW4gdGhlIG51bWJlciByZXR1cm5lZCBieSA6ZnVuYzpgY3B1X2NvdW50YCBpcyB1c2VkLiAgSWYKLSAgICppbml0aWFsaXplciogaXMgbm90IGBgTm9uZWBgIHRoZW4gZWFjaCB3b3JrZXIgcHJvY2VzcyB3aWxsIGNhbGwKKyAgIGBgTm9uZWBgIHRoZW4gdGhlIG51bWJlciByZXR1cm5lZCBieSA6ZnVuYzpgb3MuY3B1X2NvdW50YCBpcyB1c2VkLgorCisgICBJZiAqaW5pdGlhbGl6ZXIqIGlzIG5vdCBgYE5vbmVgYCB0aGVuIGVhY2ggd29ya2VyIHByb2Nlc3Mgd2lsbCBjYWxsCiAgICBgYGluaXRpYWxpemVyKCppbml0YXJncylgYCB3aGVuIGl0IHN0YXJ0cy4KIAorICAgKm1heHRhc2tzcGVyY2hpbGQqIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgYSB3b3JrZXIgcHJvY2VzcyBjYW4gY29tcGxldGUKKyAgIGJlZm9yZSBpdCB3aWxsIGV4aXQgYW5kIGJlIHJlcGxhY2VkIHdpdGggYSBmcmVzaCB3b3JrZXIgcHJvY2VzcywgdG8gZW5hYmxlCisgICB1bnVzZWQgcmVzb3VyY2VzIHRvIGJlIGZyZWVkLiBUaGUgZGVmYXVsdCAqbWF4dGFza3NwZXJjaGlsZCogaXMgTm9uZSwgd2hpY2gKKyAgIG1lYW5zIHdvcmtlciBwcm9jZXNzZXMgd2lsbCBsaXZlIGFzIGxvbmcgYXMgdGhlIHBvb2wuCisKKyAgICpjb250ZXh0KiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb250ZXh0IHVzZWQgZm9yIHN0YXJ0aW5nCisgICB0aGUgd29ya2VyIHByb2Nlc3Nlcy4gIFVzdWFsbHkgYSBwb29sIGlzIGNyZWF0ZWQgdXNpbmcgdGhlCisgICBmdW5jdGlvbiA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLlBvb2xgIG9yIHRoZSA6bWV0aDpgUG9vbGAgbWV0aG9kCisgICBvZiBhIGNvbnRleHQgb2JqZWN0LiAgSW4gYm90aCBjYXNlcyAqY29udGV4dCogaXMgc2V0CisgICBhcHByb3ByaWF0ZWx5LgorCiAgICBOb3RlIHRoYXQgdGhlIG1ldGhvZHMgb2YgdGhlIHBvb2wgb2JqZWN0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieQogICAgdGhlIHByb2Nlc3Mgd2hpY2ggY3JlYXRlZCB0aGUgcG9vbC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICAgICAqbWF4dGFza3NwZXJjaGlsZCogaXMgdGhlIG51bWJlciBvZiB0YXNrcyBhIHdvcmtlciBwcm9jZXNzIGNhbiBjb21wbGV0ZQotICAgICAgYmVmb3JlIGl0IHdpbGwgZXhpdCBhbmQgYmUgcmVwbGFjZWQgd2l0aCBhIGZyZXNoIHdvcmtlciBwcm9jZXNzLCB0byBlbmFibGUKLSAgICAgIHVudXNlZCByZXNvdXJjZXMgdG8gYmUgZnJlZWQuIFRoZSBkZWZhdWx0ICptYXh0YXNrc3BlcmNoaWxkKiBpcyBOb25lLCB3aGljaAotICAgICAgbWVhbnMgd29ya2VyIHByb2Nlc3NlcyB3aWxsIGxpdmUgYXMgbG9uZyBhcyB0aGUgcG9vbC4KKyAgICAgICptYXh0YXNrc3BlcmNoaWxkKgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgICpjb250ZXh0KgogCiAgICAuLiBub3RlOjoKIApAQCAtMTgxMSw3ICsxOTk1LDcgQEAKICAgICAgIDptZXRoOmB0ZXJtaW5hdGVgIGJlZm9yZSB1c2luZyA6bWV0aDpgam9pbmAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgICAgUG9vbCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgLS0gc2VlCisgICAgICBQb29sIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCAtLSBzZWUKICAgICAgIDpyZWY6YHR5cGVjb250ZXh0bWFuYWdlcmAuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZW50ZXJfX2AgcmV0dXJucyB0aGUKICAgICAgIHBvb2wgb2JqZWN0LCBhbmQgOm1ldGg6YH5jb250ZXh0bWFuYWdlci5fX2V4aXRfX2AgY2FsbHMgOm1ldGg6YHRlcm1pbmF0ZWAuCiAKQEAgLTE5ODQsNyArMjE2OCw3IEBACiAgICAgICB1bmF2YWlsYWJsZSB0aGVuIGl0IGlzIGBgTm9uZWBgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKLSAgICAgIExpc3RlbmVyIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAtLSBzZWUKKyAgICAgIExpc3RlbmVyIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCAtLSBzZWUKICAgICAgIDpyZWY6YHR5cGVjb250ZXh0bWFuYWdlcmAuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZW50ZXJfX2AgcmV0dXJucyB0aGUKICAgICAgIGxpc3RlbmVyIG9iamVjdCwgYW5kIDptZXRoOmB+Y29udGV4dG1hbmFnZXIuX19leGl0X19gIGNhbGxzIDptZXRoOmBjbG9zZWAuCiAKQEAgLTIxODksNDMgKzIzNzMsOCBAQAogICAgIFtJTkZPL01haW5Qcm9jZXNzXSBzZW5kaW5nIHNodXRkb3duIG1lc3NhZ2UgdG8gbWFuYWdlcgogICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciBleGl0aW5nIHdpdGggZXhpdGNvZGUgMAogCi1JbiBhZGRpdGlvbiB0byBoYXZpbmcgdGhlc2UgdHdvIGxvZ2dpbmcgZnVuY3Rpb25zLCB0aGUgbXVsdGlwcm9jZXNzaW5nIGFsc28KLWV4cG9zZXMgdHdvIGFkZGl0aW9uYWwgbG9nZ2luZyBsZXZlbCBhdHRyaWJ1dGVzLiBUaGVzZSBhcmUgIDpjb25zdDpgU1VCV0FSTklOR2AKLWFuZCA6Y29uc3Q6YFNVQkRFQlVHYC4gVGhlIHRhYmxlIGJlbG93IGlsbHVzdHJhdGVzIHdoZXJlIHRoZXNlcyBmaXQgaW4gdGhlCi1ub3JtYWwgbGV2ZWwgaGllcmFyY2h5LgotCi0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotfCBMZXZlbCAgICAgICAgICB8IE51bWVyaWMgdmFsdWUgIHwKLSs9PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT0rCi18IGBgU1VCV0FSTklOR2BgIHwgMjUgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGBTVUJERUJVR2BgICAgfCA1ICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotCiBGb3IgYSBmdWxsIHRhYmxlIG9mIGxvZ2dpbmcgbGV2ZWxzLCBzZWUgdGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZS4KIAotVGhlc2UgYWRkaXRpb25hbCBsb2dnaW5nIGxldmVscyBhcmUgdXNlZCBwcmltYXJpbHkgZm9yIGNlcnRhaW4gZGVidWcgbWVzc2FnZXMKLXdpdGhpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4gQmVsb3cgaXMgdGhlIHNhbWUgZXhhbXBsZSBhcyBhYm92ZSwgZXhjZXB0Ci13aXRoIDpjb25zdDpgU1VCREVCVUdgIGVuYWJsZWQ6OgotCi0gICAgPj4+IGltcG9ydCBtdWx0aXByb2Nlc3NpbmcsIGxvZ2dpbmcKLSAgICA+Pj4gbG9nZ2VyID0gbXVsdGlwcm9jZXNzaW5nLmxvZ190b19zdGRlcnIoKQotICAgID4+PiBsb2dnZXIuc2V0TGV2ZWwobXVsdGlwcm9jZXNzaW5nLlNVQkRFQlVHKQotICAgID4+PiBsb2dnZXIud2FybmluZygnZG9vbWVkJykKLSAgICBbV0FSTklORy9NYWluUHJvY2Vzc10gZG9vbWVkCi0gICAgPj4+IG0gPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBjaGlsZCBwcm9jZXNzIGNhbGxpbmcgc2VsZi5ydW4oKQotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gY3JlYXRlZCB0ZW1wIGRpcmVjdG9yeSAvLi4uL3B5bXAtLi4uCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIHNlcnZpbmcgYXQgJy8uLi4vcHltcC1kakdCWE4vbGlzdGVuZXItLi4uJwotICAgID4+PiBkZWwgbQotICAgIFtTVUJERUJVRy9NYWluUHJvY2Vzc10gZmluYWxpemVyIGNhbGxpbmcgLi4uCi0gICAgW0lORk8vTWFpblByb2Nlc3NdIHNlbmRpbmcgc2h1dGRvd24gbWVzc2FnZSB0byBtYW5hZ2VyCi0gICAgW0RFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciByZWNlaXZlZCBzaHV0ZG93biBtZXNzYWdlCi0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gY2FsbGluZyA8RmluYWxpemUgb2JqZWN0LCBjYWxsYmFjaz11bmxpbmssIC4uLgotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGZpbmFsaXplciBjYWxsaW5nIDxidWlsdC1pbiBmdW5jdGlvbiB1bmxpbms+IC4uLgotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGNhbGxpbmcgPEZpbmFsaXplIG9iamVjdCwgZGVhZD4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBmaW5hbGl6ZXIgY2FsbGluZyA8ZnVuY3Rpb24gcm10cmVlIGF0IDB4NWFhNzMwPiAuLi4KLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgZXhpdGluZyB3aXRoIGV4aXRjb2RlIDAKIAogVGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZy5kdW1teWAgbW9kdWxlCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTIyNDYsOCArMjM5NSwxMCBAQAogOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4KIAogCi1BbGwgcGxhdGZvcm1zCi1+fn5+fn5+fn5+fn5+CitBbGwgc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZvbGxvd2luZyBhcHBsaWVzIHRvIGFsbCBzdGFydCBtZXRob2RzLgogCiBBdm9pZCBzaGFyZWQgc3RhdGUKIApAQCAtMjI4MSwxMSArMjQzMiwxMyBAQAogCiBCZXR0ZXIgdG8gaW5oZXJpdCB0aGFuIHBpY2tsZS91bnBpY2tsZQogCi0gICAgT24gV2luZG93cyBtYW55IHR5cGVzIGZyb20gOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBuZWVkIHRvIGJlIHBpY2tsYWJsZSBzbwotICAgIHRoYXQgY2hpbGQgcHJvY2Vzc2VzIGNhbiB1c2UgdGhlbS4gIEhvd2V2ZXIsIG9uZSBzaG91bGQgZ2VuZXJhbGx5IGF2b2lkCi0gICAgc2VuZGluZyBzaGFyZWQgb2JqZWN0cyB0byBvdGhlciBwcm9jZXNzZXMgdXNpbmcgcGlwZXMgb3IgcXVldWVzLiAgSW5zdGVhZAotICAgIHlvdSBzaG91bGQgYXJyYW5nZSB0aGUgcHJvZ3JhbSBzbyB0aGF0IGEgcHJvY2VzcyB3aGljaCBuZWVkcyBhY2Nlc3MgdG8gYQotICAgIHNoYXJlZCByZXNvdXJjZSBjcmVhdGVkIGVsc2V3aGVyZSBjYW4gaW5oZXJpdCBpdCBmcm9tIGFuIGFuY2VzdG9yIHByb2Nlc3MuCisgICAgV2hlbiB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcyBtYW55IHR5cGVzCisgICAgZnJvbSA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG5lZWQgdG8gYmUgcGlja2xhYmxlIHNvIHRoYXQgY2hpbGQKKyAgICBwcm9jZXNzZXMgY2FuIHVzZSB0aGVtLiAgSG93ZXZlciwgb25lIHNob3VsZCBnZW5lcmFsbHkgYXZvaWQKKyAgICBzZW5kaW5nIHNoYXJlZCBvYmplY3RzIHRvIG90aGVyIHByb2Nlc3NlcyB1c2luZyBwaXBlcyBvciBxdWV1ZXMuCisgICAgSW5zdGVhZCB5b3Ugc2hvdWxkIGFycmFuZ2UgdGhlIHByb2dyYW0gc28gdGhhdCBhIHByb2Nlc3Mgd2hpY2gKKyAgICBuZWVkcyBhY2Nlc3MgdG8gYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBlbHNld2hlcmUgY2FuIGluaGVyaXQgaXQKKyAgICBmcm9tIGFuIGFuY2VzdG9yIHByb2Nlc3MuCiAKIEF2b2lkIHRlcm1pbmF0aW5nIHByb2Nlc3NlcwogCkBAIC0yMzMyLDE1ICsyNDg1LDE3IEBACiAKIEV4cGxpY2l0bHkgcGFzcyByZXNvdXJjZXMgdG8gY2hpbGQgcHJvY2Vzc2VzCiAKLSAgICBPbiBVbml4IGEgY2hpbGQgcHJvY2VzcyBjYW4gbWFrZSB1c2Ugb2YgYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBpbiBhCi0gICAgcGFyZW50IHByb2Nlc3MgdXNpbmcgYSBnbG9iYWwgcmVzb3VyY2UuICBIb3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gcGFzcyB0aGUKLSAgICBvYmplY3QgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAgICBPbiBVbml4IHVzaW5nIHRoZSAqZm9yayogc3RhcnQgbWV0aG9kLCBhIGNoaWxkIHByb2Nlc3MgY2FuIG1ha2UKKyAgICB1c2Ugb2YgYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBpbiBhIHBhcmVudCBwcm9jZXNzIHVzaW5nIGEKKyAgICBnbG9iYWwgcmVzb3VyY2UuICBIb3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGFzIGFuCisgICAgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4KIAotICAgIEFwYXJ0IGZyb20gbWFraW5nIHRoZSBjb2RlIChwb3RlbnRpYWxseSkgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MgdGhpcyBhbHNvCi0gICAgZW5zdXJlcyB0aGF0IGFzIGxvbmcgYXMgdGhlIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgdGhlIG9iamVjdCB3aWxsIG5vdAotICAgIGJlIGdhcmJhZ2UgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGlmIHNvbWUKLSAgICByZXNvdXJjZSBpcyBmcmVlZCB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgaW4gdGhlIHBhcmVudAotICAgIHByb2Nlc3MuCisgICAgQXBhcnQgZnJvbSBtYWtpbmcgdGhlIGNvZGUgKHBvdGVudGlhbGx5KSBjb21wYXRpYmxlIHdpdGggV2luZG93cworICAgIGFuZCB0aGUgb3RoZXIgc3RhcnQgbWV0aG9kcyB0aGlzIGFsc28gZW5zdXJlcyB0aGF0IGFzIGxvbmcgYXMgdGhlCisgICAgY2hpbGQgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGdhcmJhZ2UKKyAgICBjb2xsZWN0ZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgVGhpcyBtaWdodCBiZSBpbXBvcnRhbnQgaWYgc29tZQorICAgIHJlc291cmNlIGlzIGZyZWVkIHdoZW4gdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCBpbiB0aGUKKyAgICBwYXJlbnQgcHJvY2Vzcy4KIAogICAgIFNvIGZvciBpbnN0YW5jZSA6OgogCkBAIC0yMzk5LDE3ICsyNTU0LDE5IEBACiAKICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDppc3N1ZTpgNTE1NWAsIDppc3N1ZTpgNTMxM2AgYW5kIDppc3N1ZTpgNTMzMWAKIAotV2luZG93cwotfn5+fn5+fgorVGhlICpzcGF3biogYW5kICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotU2luY2UgV2luZG93cyBsYWNrcyA6ZnVuYzpgb3MuZm9ya2AgaXQgaGFzIGEgZmV3IGV4dHJhIHJlc3RyaWN0aW9uczoKK1RoZXJlIGFyZSBhIGZldyBleHRyYSByZXN0cmljdGlvbiB3aGljaCBkb24ndCBhcHBseSB0byB0aGUgKmZvcmsqCitzdGFydCBtZXRob2QuCiAKIE1vcmUgcGlja2xhYmlsaXR5CiAKLSAgICBFbnN1cmUgdGhhdCBhbGwgYXJndW1lbnRzIHRvIDptZXRoOmBQcm9jZXNzLl9faW5pdF9fYCBhcmUgcGlja2xhYmxlLiAgVGhpcwotICAgIG1lYW5zLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IGJvdW5kIG9yIHVuYm91bmQgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseQotICAgIGFzIHRoZSBgYHRhcmdldGBgIGFyZ3VtZW50IG9uIFdpbmRvd3MgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZQotICAgIHRoYXQgaW5zdGVhZC4KKyAgICBFbnN1cmUgdGhhdCBhbGwgYXJndW1lbnRzIHRvIDptZXRoOmBQcm9jZXNzLl9faW5pdF9fYCBhcmUKKyAgICBwaWNrbGFibGUuICBUaGlzIG1lYW5zLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IGJvdW5kIG9yIHVuYm91bmQKKyAgICBtZXRob2RzIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSBgYHRhcmdldGBgICh1bmxlc3MgeW91IHVzZQorICAgIHRoZSAqZm9yayogc3RhcnQgbWV0aG9kKSAtLS0ganVzdCBkZWZpbmUgYSBmdW5jdGlvbiBhbmQgdXNlIHRoYXQKKyAgICBpbnN0ZWFkLgogCiAgICAgQWxzbywgaWYgeW91IHN1YmNsYXNzIDpjbGFzczpgfm11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzYCB0aGVuIG1ha2Ugc3VyZSB0aGF0CiAgICAgaW5zdGFuY2VzIHdpbGwgYmUgcGlja2xhYmxlIHdoZW4gdGhlIDptZXRoOmBQcm9jZXNzLnN0YXJ0CkBAIC0yNDMxLDcgKzI1ODgsOCBAQAogICAgIGludGVycHJldGVyIHdpdGhvdXQgY2F1c2luZyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyAoc3VjaCBhIHN0YXJ0aW5nIGEgbmV3CiAgICAgcHJvY2VzcykuCiAKLSAgICBGb3IgZXhhbXBsZSwgdW5kZXIgV2luZG93cyBydW5uaW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHdvdWxkIGZhaWwgd2l0aCBhCisgICAgRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSAqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2QKKyAgICBydW5uaW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHdvdWxkIGZhaWwgd2l0aCBhCiAgICAgOmV4YzpgUnVudGltZUVycm9yYDo6CiAKICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MKQEAgLTI0NDUsMTMgKzI2MDMsMTQgQEAKICAgICBJbnN0ZWFkIG9uZSBzaG91bGQgcHJvdGVjdCB0aGUgImVudHJ5IHBvaW50IiBvZiB0aGUgcHJvZ3JhbSBieSB1c2luZyBgYGlmCiAgICAgX19uYW1lX18gPT0gJ19fbWFpbl9fJzpgYCBhcyBmb2xsb3dzOjoKIAotICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBmcmVlemVfc3VwcG9ydAorICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBmcmVlemVfc3VwcG9ydCwgc2V0X3N0YXJ0X21ldGhvZAogCiAgICAgICAgZGVmIGZvbygpOgogICAgICAgICAgICBwcmludCgnaGVsbG8nKQogCiAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQorICAgICAgICAgICBzZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCiAgICAgICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1mb28pCiAgICAgICAgICAgIHAuc3RhcnQoKQogCkBAIC0yNDgyLDI2ICsyNjQxLDcgQEAKICAgIDpsYW5ndWFnZTogcHl0aG9uMwogCiAKLVN5bmNocm9uaXphdGlvbiB0eXBlcyBsaWtlIGxvY2tzLCBjb25kaXRpb25zIGFuZCBxdWV1ZXM6Ci0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKLSAgIDpsYW5ndWFnZTogcHl0aG9uMwotCi0KIEFuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gdXNlIHF1ZXVlcyB0byBmZWVkIHRhc2tzIHRvIGEgY29sbGVjdGlvbiBvZiB3b3JrZXIKIHByb2Nlc3NlcyBhbmQgY29sbGVjdCB0aGUgcmVzdWx0czoKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF93b3JrZXJzLnB5Ci0KLQotQW4gZXhhbXBsZSBvZiBob3cgYSBwb29sIG9mIHdvcmtlciBwcm9jZXNzZXMgY2FuIGVhY2ggcnVuIGEKLTpjbGFzczpgfmh0dHAuc2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcmAgaW5zdGFuY2Ugd2hpbGUgc2hhcmluZyBhIHNpbmdsZQotbGlzdGVuaW5nIHNvY2tldC4KLQotLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKLQotCi1Tb21lIHNpbXBsZSBiZW5jaG1hcmtzIGNvbXBhcmluZyA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIHdpdGggOm1vZDpgdGhyZWFkaW5nYDoKLQotLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5Ci0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L25ldHJjLnJzdCBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdAppbmRleCA1NjRmMTAxLi4yM2ZmZWQ2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbmV0cmMucnN0CkBAIC0yOSw3ICsyOSw3IEBACiAgICBUaGlzIGltcGxlbWVudHMgc2VjdXJpdHkgYmVoYXZpb3IgZXF1aXZhbGVudCB0byB0aGF0IG9mIGZ0cCBhbmQgb3RoZXIKICAgIHByb2dyYW1zIHRoYXQgdXNlIDpmaWxlOmAubmV0cmNgLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy4zIEFkZGVkIHRoZSBQT1NJWCBwZXJtaXNzaW9uIGNoZWNrLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgQWRkZWQgdGhlIFBPU0lYIHBlcm1pc3Npb24gY2hlY2suCiAKIAogLi4gZXhjZXB0aW9uOjogTmV0cmNQYXJzZUVycm9yCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CmluZGV4IGExNWQ3ZjcuLjM5NDNmMmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBubnRwbGliYCAtLS0gTk5UUCBwcm90b2NvbCBjbGllbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC03MSw3ICs3MCw3IEBACiAgICByZWFkZXItc3BlY2lmaWMgY29tbWFuZHMsIHN1Y2ggYXMgYGBncm91cGBgLiAgSWYgeW91IGdldCB1bmV4cGVjdGVkCiAgICA6ZXhjOmBOTlRQUGVybWFuZW50RXJyb3JgXCBzLCB5b3UgbWlnaHQgbmVlZCB0byBzZXQgKnJlYWRlcm1vZGUqLgogICAgOmNsYXNzOmBOTlRQYCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0bwotICAgdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4Yzpgc29ja2V0LmVycm9yYCBleGNlcHRpb25zIGFuZCB0byBjbG9zZSB0aGUgTk5UUAorICAgdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4YzpgT1NFcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlIE5OVFAKICAgIGNvbm5lY3Rpb24gd2hlbiBkb25lLiBIZXJlIGlzIGEgc2FtcGxlIG9uIGhvdyB1c2luZyBpdDoKIAogICAgID4+PiBmcm9tIG5udHBsaWIgaW1wb3J0IE5OVFAKQEAgLTk1LDYgKzk0LDcgQEAKICAgIHBvcnQgKnBvcnQqLiAgOmNsYXNzOmBOTlRQX1NTTGAgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG1ldGhvZHMgYXMKICAgIDpjbGFzczpgTk5UUGAgb2JqZWN0cy4gIElmICpwb3J0KiBpcyBvbWl0dGVkLCBwb3J0IDU2MyAoTk5UUFMpIGlzIHVzZWQuCiAgICAqc3NsX2NvbnRleHQqIGlzIGFsc28gb3B0aW9uYWwsIGFuZCBpcyBhIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBvYmplY3QuCisgICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvciBiZXN0IHByYWN0aWNlcy4KICAgIEFsbCBvdGhlciBwYXJhbWV0ZXJzIGJlaGF2ZSB0aGUgc2FtZSBhcyBmb3IgOmNsYXNzOmBOTlRQYC4KIAogICAgTm90ZSB0aGF0IFNTTC1vbi01NjMgaXMgZGlzY291cmFnZWQgcGVyIDpyZmM6YDQ2NDJgLCBpbiBmYXZvciBvZgpAQCAtMTAzLDYgKzEwMywxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgogCiAuLiBleGNlcHRpb246OiBOTlRQRXJyb3IKIApAQCAtMjMxLDkgKzIzNSwxMCBAQAogCiAuLiBtZXRob2Q6OiBOTlRQLnN0YXJ0dGxzKHNzbF9jb250ZXh0PU5vbmUpCiAKLSAgIFNlbmQgYSBgYFNUQVJUVExTYGAgY29tbWFuZC4gIFRoZSAqc3NsX2NvbnRleHQqIGFyZ3VtZW50IGlzIG9wdGlvbmFsCi0gICBhbmQgc2hvdWxkIGJlIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0LiAgVGhpcyB3aWxsIGVuYWJsZQotICAgZW5jcnlwdGlvbiBvbiB0aGUgTk5UUCBjb25uZWN0aW9uLgorICAgU2VuZCBhIGBgU1RBUlRUTFNgYCBjb21tYW5kLiAgVGhpcyB3aWxsIGVuYWJsZSBlbmNyeXB0aW9uIG9uIHRoZSBOTlRQCisgICBjb25uZWN0aW9uLiAgVGhlICpzc2xfY29udGV4dCogYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBhCisgICA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvciBiZXN0CisgICBwcmFjdGljZXMuCiAKICAgIE5vdGUgdGhhdCB0aGlzIG1heSBub3QgYmUgZG9uZSBhZnRlciBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBoYXMKICAgIGJlZW4gdHJhbnNtaXR0ZWQsIGFuZCBhdXRoZW50aWNhdGlvbiBvY2N1cnMgYnkgZGVmYXVsdCBpZiBwb3NzaWJsZSBkdXJpbmcgYQpAQCAtMjQyLDYgKzI0NywxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBtZXRob2Qgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAogLi4gbWV0aG9kOjogTk5UUC5uZXdncm91cHMoZGF0ZSwgKiwgZmlsZT1Ob25lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9udW1lcmljLnJzdCBiL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CmluZGV4IDI3MzJhODQuLjdjNzZhNDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CisrKyBiL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CkBAIC0yMywzICsyMyw0IEBACiAgICBkZWNpbWFsLnJzdAogICAgZnJhY3Rpb25zLnJzdAogICAgcmFuZG9tLnJzdAorICAgc3RhdGlzdGljcy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdCBiL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdAppbmRleCAyNGJlY2Y5Li5mOWUyYTNkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CkBAIC0xMSw2ICsxMSw5IEBACiAgICBpbXBvcnQgb3BlcmF0b3IKICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIsIGlhZGQKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvb3BlcmF0b3IucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgZWZmaWNpZW50IGZ1bmN0aW9ucyBjb3JyZXNwb25kaW5nIHRvCiB0aGUgaW50cmluc2ljIG9wZXJhdG9ycyBvZiBQeXRob24uICBGb3IgZXhhbXBsZSwgYGBvcGVyYXRvci5hZGQoeCwgeSlgYCBpcwpAQCAtMjI1LDE1ICsyMjgsMTQgQEAKIAogICAgU2V0IHRoZSB2YWx1ZSBvZiAqYSogYXQgaW5kZXggKmIqIHRvICpjKi4KIAotRXhhbXBsZTogQnVpbGQgYSBkaWN0aW9uYXJ5IHRoYXQgbWFwcyB0aGUgb3JkaW5hbHMgZnJvbSBgYDBgYCB0byBgYDI1NWBgIHRvCi10aGVpciBjaGFyYWN0ZXIgZXF1aXZhbGVudHMuCiAKLSAgID4+PiBkID0ge30KLSAgID4+PiBrZXlzID0gcmFuZ2UoMjU2KQotICAgPj4+IHZhbHMgPSBtYXAoY2hyLCBrZXlzKQotICAgPj4+IG1hcChvcGVyYXRvci5zZXRpdGVtLCBbZF0qbGVuKGtleXMpLCBrZXlzLCB2YWxzKSAgICMgZG9jdGVzdDogK1NLSVAKKy4uIGZ1bmN0aW9uOjogbGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApCiAKLS4uIFhYWDogZmluZCBhIGJldHRlciwgcmVhZGFibGUsIGV4YW1wbGUKKyAgIFJldHVybiBhbiBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICpvKi4gRmlyc3QgdHJ5IHRvIHJldHVybiBpdHMKKyAgIGFjdHVhbCBsZW5ndGgsIHRoZW4gYW4gZXN0aW1hdGUgdXNpbmcgOm1ldGg6YG9iamVjdC5fX2xlbmd0aF9oaW50X19gLCBhbmQKKyAgIGZpbmFsbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogVGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgYWxzbyBkZWZpbmVzIHRvb2xzIGZvciBnZW5lcmFsaXplZCBhdHRyaWJ1dGUgYW5kIGl0ZW0KIGxvb2t1cHMuICBUaGVzZSBhcmUgdXNlZnVsIGZvciBtYWtpbmcgZmFzdCBmaWVsZCBleHRyYWN0b3JzIGFzIGFyZ3VtZW50cyBmb3IKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdCBiL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdAppbmRleCAxMzM5NWI2Li43MjE0NWFhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0CkBAIC04LDggKzgsOCBAQAogLi4gc2VjdGlvbmF1dGhvcjo6IEdyZWcgV2FyZCA8Z3dhcmRAcHl0aG9uLm5ldD4KIAogLi4gZGVwcmVjYXRlZDo6IDMuMgotICBUaGUgOm1vZDpgb3B0cGFyc2VgIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIG5vdCBiZSBkZXZlbG9wZWQgZnVydGhlcjsKLSAgZGV2ZWxvcG1lbnQgd2lsbCBjb250aW51ZSB3aXRoIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlLgorICAgVGhlIDptb2Q6YG9wdHBhcnNlYCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBub3QgYmUgZGV2ZWxvcGVkIGZ1cnRoZXI7CisgICBkZXZlbG9wbWVudCB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUuCiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL29wdHBhcnNlLnB5YAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdCBiL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0CmluZGV4IDU3YTZiY2EuLmRjMDNmNDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0CkBAIC0yMiw2ICsyMiwxMSBAQAogZXhwbGljaXRseSB3aGVuIGFuIGFwcGxpY2F0aW9uIGRlc2lyZXMgc2hlbGwtbGlrZSBwYXRoIGV4cGFuc2lvbi4gIChTZWUgYWxzbwogdGhlIDptb2Q6YGdsb2JgIG1vZHVsZS4pCiAKKworLi4gc2VlYWxzbzo6CisgICBUaGUgOm1vZDpgcGF0aGxpYmAgbW9kdWxlIG9mZmVycyBoaWdoLWxldmVsIHBhdGggb2JqZWN0cy4KKworCiAuLiBub3RlOjoKIAogICAgQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhY2NlcHQgZWl0aGVyIG9ubHkgYnl0ZXMgb3Igb25seSBzdHJpbmcgb2JqZWN0cyBhcwpAQCAtNDIsNyArNDcsNiBAQAogICAgKiA6bW9kOmBwb3NpeHBhdGhgIGZvciBVTklYLXN0eWxlIHBhdGhzCiAgICAqIDptb2Q6YG50cGF0aGAgZm9yIFdpbmRvd3MgcGF0aHMKICAgICogOm1vZDpgbWFjcGF0aGAgZm9yIG9sZC1zdHlsZSBNYWNPUyBwYXRocwotICAgKiA6bW9kOmBvczJlbXhwYXRoYCBmb3IgT1MvMiBFTVggcGF0aHMKIAogCiAuLiBmdW5jdGlvbjo6IGFic3BhdGgocGF0aCkKQEAgLTE4NCwxNiArMTg4LDIyIEBACiAuLiBmdW5jdGlvbjo6IGlzbGluayhwYXRoKQogCiAgICBSZXR1cm4gYGBUcnVlYGAgaWYgKnBhdGgqIHJlZmVycyB0byBhIGRpcmVjdG9yeSBlbnRyeSB0aGF0IGlzIGEgc3ltYm9saWMgbGluay4KLSAgIEFsd2F5cyBgYEZhbHNlYGAgaWYgc3ltYm9saWMgbGlua3MgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICBBbHdheXMgYGBGYWxzZWBgIGlmIHN5bWJvbGljIGxpbmtzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBweXRob24gcnVudGltZS4KIAogCiAuLiBmdW5jdGlvbjo6IGlzbW91bnQocGF0aCkKIAotICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHBhdGhuYW1lICpwYXRoKiBpcyBhIDpkZm46YG1vdW50IHBvaW50YDogYSBwb2ludCBpbiBhIGZpbGUKLSAgIHN5c3RlbSB3aGVyZSBhIGRpZmZlcmVudCBmaWxlIHN5c3RlbSBoYXMgYmVlbiBtb3VudGVkLiAgVGhlIGZ1bmN0aW9uIGNoZWNrcwotICAgd2hldGhlciAqcGF0aConcyBwYXJlbnQsIDpmaWxlOmBwYXRoLy4uYCwgaXMgb24gYSBkaWZmZXJlbnQgZGV2aWNlIHRoYW4gKnBhdGgqLAotICAgb3Igd2hldGhlciA6ZmlsZTpgcGF0aC8uLmAgYW5kICpwYXRoKiBwb2ludCB0byB0aGUgc2FtZSBpLW5vZGUgb24gdGhlIHNhbWUKLSAgIGRldmljZSAtLS0gdGhpcyBzaG91bGQgZGV0ZWN0IG1vdW50IHBvaW50cyBmb3IgYWxsIFVuaXggYW5kIFBPU0lYIHZhcmlhbnRzLgorICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHBhdGhuYW1lICpwYXRoKiBpcyBhIDpkZm46YG1vdW50IHBvaW50YDogYSBwb2ludCBpbiBhCisgICBmaWxlIHN5c3RlbSB3aGVyZSBhIGRpZmZlcmVudCBmaWxlIHN5c3RlbSBoYXMgYmVlbiBtb3VudGVkLiAgT24gUE9TSVgsIHRoZQorICAgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgKnBhdGgqJ3MgcGFyZW50LCA6ZmlsZTpgcGF0aC8uLmAsIGlzIG9uIGEgZGlmZmVyZW50CisgICBkZXZpY2UgdGhhbiAqcGF0aCosIG9yIHdoZXRoZXIgOmZpbGU6YHBhdGgvLi5gIGFuZCAqcGF0aCogcG9pbnQgdG8gdGhlIHNhbWUKKyAgIGktbm9kZSBvbiB0aGUgc2FtZSBkZXZpY2UgLS0tIHRoaXMgc2hvdWxkIGRldGVjdCBtb3VudCBwb2ludHMgZm9yIGFsbCBVbml4CisgICBhbmQgUE9TSVggdmFyaWFudHMuICBPbiBXaW5kb3dzLCBhIGRyaXZlIGxldHRlciByb290IGFuZCBhIHNoYXJlIFVOQyBhcmUKKyAgIGFsd2F5cyBtb3VudCBwb2ludHMsIGFuZCBmb3IgYW55IG90aGVyIHBhdGggYGBHZXRWb2x1bWVQYXRoTmFtZWBgIGlzIGNhbGxlZAorICAgdG8gc2VlIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBpbnB1dCBwYXRoLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFN1cHBvcnQgZm9yIGRldGVjdGluZyBub24tcm9vdCBtb3VudCBwb2ludHMgb24gV2luZG93cy4KIAogCiAuLiBmdW5jdGlvbjo6IGpvaW4ocGF0aDFbLCBwYXRoMlssIC4uLl1dKQpAQCAtMjMyLDcgKzI0Miw3IEBACiAgICBsaW5rcyBlbmNvdW50ZXJlZCBpbiB0aGUgcGF0aCAoaWYgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtKS4KIAogCi0uLiBmdW5jdGlvbjo6IHJlbHBhdGgocGF0aCwgc3RhcnQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcmVscGF0aChwYXRoLCBzdGFydD1vcy5jdXJkaXIpCiAKICAgIFJldHVybiBhIHJlbGF0aXZlIGZpbGVwYXRoIHRvICpwYXRoKiBlaXRoZXIgZnJvbSB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb3IKICAgIGZyb20gYW4gb3B0aW9uYWwgKnN0YXJ0KiBkaXJlY3RvcnkuICBUaGlzIGlzIGEgcGF0aCBjb21wdXRhdGlvbjogIHRoZQpAQCAtMjQ3LDE4ICsyNTcsMTcgQEAKIC4uIGZ1bmN0aW9uOjogc2FtZWZpbGUocGF0aDEsIHBhdGgyKQogCiAgICBSZXR1cm4gYGBUcnVlYGAgaWYgYm90aCBwYXRobmFtZSBhcmd1bWVudHMgcmVmZXIgdG8gdGhlIHNhbWUgZmlsZSBvciBkaXJlY3RvcnkuCi0gICBPbiBVbml4LCB0aGlzIGlzIGRldGVybWluZWQgYnkgdGhlIGRldmljZSBudW1iZXIgYW5kIGktbm9kZSBudW1iZXIgYW5kIHJhaXNlcyBhbgorICAgVGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBpLW5vZGUgbnVtYmVyIGFuZCByYWlzZXMgYW4KICAgIGV4Y2VwdGlvbiBpZiBhIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KIAotICAgT24gV2luZG93cywgdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIHNhbWUgZmluYWwgcGF0aAotICAgbmFtZSB1c2luZyB0aGUgV2luZG93cyBBUEkgY2FsbCBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuIFRoaXMgZnVuY3Rpb24KLSAgIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgaGFuZGxlcyBjYW5ub3QgYmUgb2J0YWluZWQgdG8gZWl0aGVyIGZpbGUuCi0KICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFdpbmRvd3Mgbm93IHVzZXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgYWxsIG90aGVyIHBsYXRmb3Jtcy4KKwogCiAuLiBmdW5jdGlvbjo6IHNhbWVvcGVuZmlsZShmcDEsIGZwMikKIApAQCAtMjc3LDcgKzI4NiwxMCBAQAogICAgOmZ1bmM6YG9zLmxzdGF0YCwgb3IgOmZ1bmM6YG9zLnN0YXRgLiAgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZQogICAgdW5kZXJseWluZyBjb21wYXJpc29uIHVzZWQgYnkgOmZ1bmM6YHNhbWVmaWxlYCBhbmQgOmZ1bmM6YHNhbWVvcGVuZmlsZWAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAogCiAuLiBmdW5jdGlvbjo6IHNwbGl0KHBhdGgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5yc3QgYi9Eb2MvbGlicmFyeS9vcy5yc3QKaW5kZXggZDdiOTgyOS4uMGE1OTEwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnJzdApAQCAtNTMsOCArNTMsOCBAQAogLi4gZGF0YTo6IG5hbWUKIAogICAgVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW50IG1vZHVsZSBpbXBvcnRlZC4gIFRoZSBmb2xsb3dpbmcKLSAgIG5hbWVzIGhhdmUgY3VycmVudGx5IGJlZW4gcmVnaXN0ZXJlZDogYGAncG9zaXgnYGAsIGBgJ250J2BgLCBgYCdtYWMnYGAsCi0gICBgYCdvczInYGAsIGBgJ2NlJ2BgLCBgYCdqYXZhJ2BgLgorICAgbmFtZXMgaGF2ZSBjdXJyZW50bHkgYmVlbiByZWdpc3RlcmVkOiBgYCdwb3NpeCdgYCwgYGAnbnQnYGAsCisgICBgYCdjZSdgYCwgYGAnamF2YSdgYC4KIAogICAgLi4gc2VlYWxzbzo6CiAgICAgICA6YXR0cjpgc3lzLnBsYXRmb3JtYCBoYXMgYSBmaW5lciBncmFudWxhcml0eS4gIDpmdW5jOmBvcy51bmFtZWAgZ2l2ZXMKQEAgLTY1LDYgKzY1LDcgQEAKIAogCiAuLiBfb3MtZmlsZW5hbWVzOgorLi4gX2ZpbGVzeXN0ZW0tZW5jb2Rpbmc6CiAKIEZpbGUgTmFtZXMsIENvbW1hbmQgTGluZSBBcmd1bWVudHMsIGFuZCBFbnZpcm9ubWVudCBWYXJpYWJsZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4MCwxMCArMjgxLDEwIEBACiAuLiBmdW5jdGlvbjo6IGdldGxvZ2luKCkKIAogICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB1c2VyIGxvZ2dlZCBpbiBvbiB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgb2YgdGhlCi0gICBwcm9jZXNzLiAgRm9yIG1vc3QgcHVycG9zZXMsIGl0IGlzIG1vcmUgdXNlZnVsIHRvIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gICA6ZW52dmFyOmBMT0dOQU1FYCBvciA6ZW52dmFyOmBVU0VSTkFNRWAgdG8gZmluZCBvdXQgd2hvIHRoZSB1c2VyIGlzLCBvcgotICAgYGBwd2QuZ2V0cHd1aWQob3MuZ2V0dWlkKCkpWzBdYGAgdG8gZ2V0IHRoZSBsb2dpbiBuYW1lIG9mIHRoZSBjdXJyZW50bHkKLSAgIGVmZmVjdGl2ZSB1c2VyIGlkLgorICAgcHJvY2Vzcy4gIEZvciBtb3N0IHB1cnBvc2VzLCBpdCBpcyBtb3JlIHVzZWZ1bCB0byB1c2UgdGhlIGVudmlyb25tZW50CisgICB2YXJpYWJsZXMgOmVudnZhcjpgTE9HTkFNRWAgb3IgOmVudnZhcjpgVVNFUk5BTUVgIHRvIGZpbmQgb3V0IHdobyB0aGUgdXNlcgorICAgaXMsIG9yIGBgcHdkLmdldHB3dWlkKG9zLmdldHVpZCgpKVswXWBgIHRvIGdldCB0aGUgbG9naW4gbmFtZSBvZiB0aGUgY3VycmVudAorICAgcmVhbCB1c2VyIGlkLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKQEAgLTM3OSw3ICszODAsNyBAQAogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogdXNlcjsgaWQKIAotICAgUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MncyB1c2VyIGlkLgorICAgUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsIHVzZXIgaWQuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIApAQCAtNjg3LDE3ICs2ODgsMzAgQEAKIAogLi4gZnVuY3Rpb246OiBkdXAoZmQpCiAKLSAgIFJldHVybiBhIGR1cGxpY2F0ZSBvZiBmaWxlIGRlc2NyaXB0b3IgKmZkKi4KKyAgIFJldHVybiBhIGR1cGxpY2F0ZSBvZiBmaWxlIGRlc2NyaXB0b3IgKmZkKi4gVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMKKyAgIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgT24gV2luZG93cywgd2hlbiBkdXBsaWNhdGluZyBhIHN0YW5kYXJkIHN0cmVhbSAoMDogc3RkaW4sIDE6IHN0ZG91dCwKKyAgIDI6IHN0ZGVyciksIHRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YGluaGVyaXRhYmxlCisgICA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KIAotLi4gZnVuY3Rpb246OiBkdXAyKGZkLCBmZDIpCisKKy4uIGZ1bmN0aW9uOjogZHVwMihmZCwgZmQyLCBpbmhlcml0YWJsZT1UcnVlKQogCiAgICBEdXBsaWNhdGUgZmlsZSBkZXNjcmlwdG9yICpmZCogdG8gKmZkMiosIGNsb3NpbmcgdGhlIGxhdHRlciBmaXJzdCBpZiBuZWNlc3NhcnkuCisgICBUaGUgZmlsZSBkZXNjcmlwdG9yICpmZDIqIGlzIDpyZWY6YGluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gIGJ5IGRlZmF1bHQsCisgICBvciBub24taW5oZXJpdGFibGUgaWYgKmluaGVyaXRhYmxlKiBpcyBgYEZhbHNlYGAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZCB0aGUgb3B0aW9uYWwgKmluaGVyaXRhYmxlKiBwYXJhbWV0ZXIuCisKIAogLi4gZnVuY3Rpb246OiBmY2htb2QoZmQsIG1vZGUpCiAKQEAgLTc1MSw4ICs3NjUsMTQgQEAKIAogLi4gZnVuY3Rpb246OiBmc3RhdChmZCkKIAotICAgUmV0dXJuIHN0YXR1cyBmb3IgZmlsZSBkZXNjcmlwdG9yICpmZCosIGxpa2UgOmZ1bmM6YH5vcy5zdGF0YC4gIEFzIG9mIFB5dGhvbgotICAgMy4zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBvcy5zdGF0KGZkKWBgLgorICAgR2V0IHRoZSBzdGF0dXMgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciAqZmQqLiBSZXR1cm4gYSA6Y2xhc3M6YHN0YXRfcmVzdWx0YAorICAgb2JqZWN0LgorCisgICBBcyBvZiBQeXRob24gMy4zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBvcy5zdGF0KGZkKWBgLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIDpmdW5jOmBzdGF0YCBmdW5jdGlvbi4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCkBAIC04NDgsMTcgKzg2OCwyMSBAQAogICAgT3BlbiB0aGUgZmlsZSAqZmlsZSogYW5kIHNldCB2YXJpb3VzIGZsYWdzIGFjY29yZGluZyB0byAqZmxhZ3MqIGFuZCBwb3NzaWJseQogICAgaXRzIG1vZGUgYWNjb3JkaW5nIHRvICptb2RlKi4gIFdoZW4gY29tcHV0aW5nICptb2RlKiwgdGhlIGN1cnJlbnQgdW1hc2sgdmFsdWUKICAgIGlzIGZpcnN0IG1hc2tlZCBvdXQuICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIG5ld2x5IG9wZW5lZCBmaWxlLgorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmxhZyBhbmQgbW9kZSB2YWx1ZXMsIHNlZSB0aGUgQyBydW4tdGltZSBkb2N1bWVudGF0aW9uOwogICAgZmxhZyBjb25zdGFudHMgKGxpa2UgOmNvbnN0OmBPX1JET05MWWAgYW5kIDpjb25zdDpgT19XUk9OTFlgKSBhcmUgZGVmaW5lZCBpbgotICAgdGhpcyBtb2R1bGUgdG9vIChzZWUgOnJlZjpgb3Blbi1jb25zdGFudHNgKS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCisgICB0aGUgOm1vZDpgb3NgIG1vZHVsZS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCiAgICA6Y29uc3Q6YE9fQklOQVJZYCBpcyBuZWVkZWQgdG8gb3BlbiBmaWxlcyBpbiBiaW5hcnkgbW9kZS4KIAogICAgVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMKLSAgIDxkaXJfZmQ+YC4KKyAgIDxkaXJfZmQ+YCB3aXRoIHRoZSAqZGlyX2ZkKiBwYXJhbWV0ZXIuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBsb3ctbGV2ZWwgSS9PLiAgRm9yIG5vcm1hbCB1c2FnZSwgdXNlIHRoZQpAQCAtODY5LDI1ICs4OTMsOTMgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQorOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCitgYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgordGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4CitvciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fUkRPTkxZCisgICAgICAgICAgT19XUk9OTFkKKyAgICAgICAgICBPX1JEV1IKKyAgICAgICAgICBPX0FQUEVORAorICAgICAgICAgIE9fQ1JFQVQKKyAgICAgICAgICBPX0VYQ0wKKyAgICAgICAgICBPX1RSVU5DCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fRFNZTkMKKyAgICAgICAgICBPX1JTWU5DCisgICAgICAgICAgT19TWU5DCisgICAgICAgICAgT19OREVMQVkKKyAgICAgICAgICBPX05PTkJMT0NLCisgICAgICAgICAgT19OT0NUVFkKKyAgICAgICAgICBPX1NITE9DSworICAgICAgICAgIE9fRVhMT0NLCisgICAgICAgICAgT19DTE9FWEVDCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KKworLi4gZGF0YTo6IE9fQklOQVJZCisgICAgICAgICAgT19OT0lOSEVSSVQKKyAgICAgICAgICBPX1NIT1JUX0xJVkVECisgICAgICAgICAgT19URU1QT1JBUlkKKyAgICAgICAgICBPX1JBTkRPTQorICAgICAgICAgIE9fU0VRVUVOVElBTAorICAgICAgICAgIE9fVEVYVAorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fQVNZTkMKKyAgICAgICAgICBPX0RJUkVDVAorICAgICAgICAgIE9fRElSRUNUT1JZCisgICAgICAgICAgT19OT0ZPTExPVworICAgICAgICAgIE9fTk9BVElNRQorICAgICAgICAgIE9fUEFUSAorICAgICAgICAgIE9fVE1QRklMRQorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQorICAgdGhlIEMgbGlicmFyeS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZCA6ZGF0YTpgT19QQVRIYCBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdC4KKyAgICAgIEFkZCA6ZGF0YTpgT19UTVBGSUxFYCwgb25seSBhdmFpbGFibGUgb24gTGludXggS2VybmVsIDMuMTEKKyAgICAgICAgb3IgbmV3ZXIuCisKIAogLi4gZnVuY3Rpb246OiBvcGVucHR5KCkKIAogICAgLi4gaW5kZXg6OiBtb2R1bGU6IHB0eQogCi0gICBPcGVuIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBwYWlyLiBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAobWFzdGVyLAotICAgc2xhdmUpYGAgZm9yIHRoZSBwdHkgYW5kIHRoZSB0dHksIHJlc3BlY3RpdmVseS4gRm9yIGEgKHNsaWdodGx5KSBtb3JlIHBvcnRhYmxlCi0gICBhcHByb2FjaCwgdXNlIHRoZSA6bW9kOmBwdHlgIG1vZHVsZS4KKyAgIE9wZW4gYSBuZXcgcHNldWRvLXRlcm1pbmFsIHBhaXIuIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycworICAgYGAobWFzdGVyLCBzbGF2ZSlgYCBmb3IgdGhlIHB0eSBhbmQgdGhlIHR0eSwgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGZpbGUKKyAgIGRlc2NyaXB0b3JzIGFyZSA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuIEZvciBhIChzbGlnaHRseSkgbW9yZQorICAgcG9ydGFibGUgYXBwcm9hY2gsIHVzZSB0aGUgOm1vZDpgcHR5YCBtb2R1bGUuCiAKICAgIEF2YWlsYWJpbGl0eTogc29tZSBmbGF2b3JzIG9mIFVuaXguCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlKCkKIAotICAgQ3JlYXRlIGEgcGlwZS4gIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBgYChyLCB3KWBgIHVzYWJsZSBmb3IgcmVhZGluZwotICAgYW5kIHdyaXRpbmcsIHJlc3BlY3RpdmVseS4KKyAgIENyZWF0ZSBhIHBpcGUuICBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAociwgdylgYCB1c2FibGUgZm9yCisgICByZWFkaW5nIGFuZCB3cml0aW5nLCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzCisgICA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBpcGUyKGZsYWdzKQogCkBAIC0xMDAyLDggKzEwOTQsMTYgQEAKICAgIEFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBzb2NrZXRzIGFzICpvdXQqIGZpbGUgZGVzY3JpcHRvciwgYW5kIHNvbWUgcGxhdGZvcm1zCiAgICBhbGxvdyBvdGhlciB0eXBlcyAoZS5nLiByZWd1bGFyIGZpbGUsIHBpcGUpIGFzIHdlbGwuCiAKKyAgIENyb3NzLXBsYXRmb3JtIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHVzZSAqaGVhZGVycyosICp0cmFpbGVycyogYW5kICpmbGFncyoKKyAgIGFyZ3VtZW50cy4KKwogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCisgICAuLiBub3RlOjoKKworICAgICAgRm9yIGEgaGlnaGVyLWxldmVsIHdyYXBwZXIgb2YgOmZ1bmM6YHNlbmRmaWxlYCwgc2VlCisgICAgICA6bW9kOmBzb2NrZXQuc29ja2V0LnNlbmRmaWxlYC4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIApAQCAtMTAyNyw3ICsxMTI3LDcgQEAKICAgIHNlcXVlbmNlIHRvIGhvbGQgdGhlIHJlc3Qgb2YgdGhlIGRhdGEuIDpmdW5jOmB+b3MucmVhZHZgIHJldHVybnMgdGhlIHRvdGFsCiAgICBudW1iZXIgb2YgYnl0ZXMgcmVhZCAod2hpY2ggbWF5IGJlIGxlc3MgdGhhbiB0aGUgdG90YWwgY2FwYWNpdHkgb2YgYWxsIHRoZQogICAgb2JqZWN0cykuCi0gICAgICAgICAgCisKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCkBAIC0xMDgwLDg0ICsxMTgwLDEyIEBACiAgICBzZXF1ZW5jZSBvZiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gLgogICAgOmZ1bmM6YH5vcy53cml0ZXZgIHdyaXRlcyB0aGUgY29udGVudHMgb2YgZWFjaCBvYmplY3QgdG8gdGhlIGZpbGUgZGVzY3JpcHRvcgogICAgYW5kIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgotICAgCisKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gX29wZW4tY29uc3RhbnRzOgotCi1gYG9wZW4oKWBgIGZsYWcgY29uc3RhbnRzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBvcHRpb25zIGZvciB0aGUgKmZsYWdzKiBwYXJhbWV0ZXIgdG8gdGhlCi06ZnVuYzpgfm9zLm9wZW5gIGZ1bmN0aW9uLiAgVGhleSBjYW4gYmUgY29tYmluZWQgdXNpbmcgdGhlIGJpdHdpc2UgT1Igb3BlcmF0b3IKLWBgfGBgLiAgU29tZSBvZiB0aGVtIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMuICBGb3IgZGVzY3JpcHRpb25zIG9mCi10aGVpciBhdmFpbGFiaWxpdHkgYW5kIHVzZSwgY29uc3VsdCB0aGUgOm1hbnBhZ2U6YG9wZW4oMilgIG1hbnVhbCBwYWdlIG9uIFVuaXgKLW9yIGB0aGUgTVNETiA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3owa2M4ZTN6LmFzcHg+YF8gb24gV2luZG93cy4KLQotCi0uLiBkYXRhOjogT19SRE9OTFkKLSAgICAgICAgICBPX1dST05MWQotICAgICAgICAgIE9fUkRXUgotICAgICAgICAgIE9fQVBQRU5ECi0gICAgICAgICAgT19DUkVBVAotICAgICAgICAgIE9fRVhDTAotICAgICAgICAgIE9fVFJVTkMKLQotICAgVGhlc2UgY29uc3RhbnRzIGFyZSBhdmFpbGFibGUgb24gVW5peCBhbmQgV2luZG93cy4KLQotCi0uLiBkYXRhOjogT19EU1lOQwotICAgICAgICAgIE9fUlNZTkMKLSAgICAgICAgICBPX1NZTkMKLSAgICAgICAgICBPX05ERUxBWQotICAgICAgICAgIE9fTk9OQkxPQ0sKLSAgICAgICAgICBPX05PQ1RUWQotICAgICAgICAgIE9fU0hMT0NLCi0gICAgICAgICAgT19FWExPQ0sKLSAgICAgICAgICBPX0NMT0VYRUMKLQotICAgVGhlc2UgY29uc3RhbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBVbml4LgotCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgQWRkIDpkYXRhOmBPX0NMT0VYRUNgIGNvbnN0YW50LgotCi0uLiBkYXRhOjogT19CSU5BUlkKLSAgICAgICAgICBPX05PSU5IRVJJVAotICAgICAgICAgIE9fU0hPUlRfTElWRUQKLSAgICAgICAgICBPX1RFTVBPUkFSWQotICAgICAgICAgIE9fUkFORE9NCi0gICAgICAgICAgT19TRVFVRU5USUFMCi0gICAgICAgICAgT19URVhUCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gV2luZG93cy4KLQotCi0uLiBkYXRhOjogT19BU1lOQwotICAgICAgICAgIE9fRElSRUNUCi0gICAgICAgICAgT19ESVJFQ1RPUlkKLSAgICAgICAgICBPX05PRk9MTE9XCi0gICAgICAgICAgT19OT0FUSU1FCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgR05VIGV4dGVuc2lvbnMgYW5kIG5vdCBwcmVzZW50IGlmIHRoZXkgYXJlIG5vdCBkZWZpbmVkIGJ5Ci0gICB0aGUgQyBsaWJyYXJ5LgotCi0KLS4uIGRhdGE6OiBSVExEX0xBWlkKLSAgICAgICAgICBSVExEX05PVwotICAgICAgICAgIFJUTERfR0xPQkFMCi0gICAgICAgICAgUlRMRF9MT0NBTAotICAgICAgICAgIFJUTERfTk9ERUxFVEUKLSAgICAgICAgICBSVExEX05PTE9BRAotICAgICAgICAgIFJUTERfREVFUEJJTkQKLQotICAgU2VlIHRoZSBVbml4IG1hbnVhbCBwYWdlIDptYW5wYWdlOmBkbG9wZW4oMylgLgotCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKLQotCiAuLiBfdGVybWluYWwtc2l6ZToKIAogUXVlcnlpbmcgdGhlIHNpemUgb2YgYSB0ZXJtaW5hbApAQCAtMTE5NSw2ICsxMjIzLDQ5IEBACiAgICAgICBIZWlnaHQgb2YgdGhlIHRlcm1pbmFsIHdpbmRvdyBpbiBjaGFyYWN0ZXJzLgogCiAKKy4uIF9mZF9pbmhlcml0YW5jZToKKworSW5oZXJpdGFuY2Ugb2YgRmlsZSBEZXNjcmlwdG9ycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworQSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFuICJpbmhlcml0YWJsZSIgZmxhZyB3aGljaCBpbmRpY2F0ZXMgaWYgdGhlIGZpbGUgZGVzY3JpcHRvcgorY2FuIGJlIGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMuICBTaW5jZSBQeXRob24gMy40LCBmaWxlIGRlc2NyaXB0b3JzCitjcmVhdGVkIGJ5IFB5dGhvbiBhcmUgbm9uLWluaGVyaXRhYmxlIGJ5IGRlZmF1bHQuCisKK09uIFVOSVgsIG5vbi1pbmhlcml0YWJsZSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaW4gY2hpbGQgcHJvY2Vzc2VzIGF0IHRoZQorZXhlY3V0aW9uIG9mIGEgbmV3IHByb2dyYW0sIG90aGVyIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGluaGVyaXRlZC4KKworT24gV2luZG93cywgbm9uLWluaGVyaXRhYmxlIGhhbmRsZXMgYW5kIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpbiBjaGlsZAorcHJvY2Vzc2VzLCBleGNlcHQgZm9yIHN0YW5kYXJkIHN0cmVhbXMgKGZpbGUgZGVzY3JpcHRvcnMgMCwgMSBhbmQgMjogc3RkaW4sIHN0ZG91dAorYW5kIHN0ZGVyciksIHdoaWNoIGFyZSBhbHdheXMgaW5oZXJpdGVkLiAgVXNpbmcgOmZ1bmM6YHNwYXduXCogPHNwYXdubD5gIGZ1bmN0aW9ucywKK2FsbCBpbmhlcml0YWJsZSBoYW5kbGVzIGFuZCBhbGwgaW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgaW5oZXJpdGVkLgorVXNpbmcgdGhlIDptb2Q6YHN1YnByb2Nlc3NgIG1vZHVsZSwgYWxsIGZpbGUgZGVzY3JpcHRvcnMgZXhjZXB0IHN0YW5kYXJkCitzdHJlYW1zIGFyZSBjbG9zZWQsIGFuZCBpbmhlcml0YWJsZSBoYW5kbGVzIGFyZSBvbmx5IGluaGVyaXRlZCBpZiB0aGUKKypjbG9zZV9mZHMqIHBhcmFtZXRlciBpcyBgYEZhbHNlYGAuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2luaGVyaXRhYmxlKGZkKQorCisgICBHZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvciAoYSBib29sZWFuKS4KKworLi4gZnVuY3Rpb246OiBzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKQorCisgICBTZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4KKworLi4gZnVuY3Rpb246OiBnZXRfaGFuZGxlX2luaGVyaXRhYmxlKGhhbmRsZSkKKworICAgR2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBoYW5kbGUgKGEgYm9vbGVhbikuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworLi4gZnVuY3Rpb246OiBzZXRfaGFuZGxlX2luaGVyaXRhYmxlKGhhbmRsZSwgaW5oZXJpdGFibGUpCisKKyAgIFNldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKwogLi4gX29zLWZpbGUtZGlyOgogCiBGaWxlcyBhbmQgRGlyZWN0b3JpZXMKQEAgLTE1MTMsMTcgKzE1ODQsMjUgQEAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgZm9yICpwYXRoKi4KIAogCi0uLiBmdW5jdGlvbjo6IGxzdGF0KHBhdGgsICosIGRpcl9mZD1Ob25lKQorLi4gZnVuY3Rpb246OiBsc3RhdChwYXRoLCBcKiwgZGlyX2ZkPU5vbmUpCiAKICAgIFBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgYW4gOmM6ZnVuYzpgbHN0YXRgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgotICAgU2ltaWxhciB0byA6ZnVuYzpgfm9zLnN0YXRgLCBidXQgZG9lcyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLiAgT24KLSAgIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzLCB0aGlzIGlzIGFuIGFsaWFzIGZvcgotICAgOmZ1bmM6YH5vcy5zdGF0YC4gIEFzIG9mIFB5dGhvbiAzLjMsIHRoaXMgaXMgZXF1aXZhbGVudCB0byBgYG9zLnN0YXQocGF0aCwKLSAgIGRpcl9mZD1kaXJfZmQsIGZvbGxvd19zeW1saW5rcz1GYWxzZSlgYC4KKyAgIFNpbWlsYXIgdG8gOmZ1bmM6YH5vcy5zdGF0YCwgYnV0IGRvZXMgbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4gUmV0dXJuIGEKKyAgIDpjbGFzczpgc3RhdF9yZXN1bHRgIG9iamVjdC4KKworICAgT24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgc3ltYm9saWMgbGlua3MsIHRoaXMgaXMgYW4gYWxpYXMgZm9yCisgICA6ZnVuYzpgfm9zLnN0YXRgLgorCisgICBBcyBvZiBQeXRob24gMy4zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBvcy5zdGF0KHBhdGgsIGRpcl9mZD1kaXJfZmQsCisgICBmb2xsb3dfc3ltbGlua3M9RmFsc2UpYGAuCiAKICAgIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gc3VwcG9ydCA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMKICAgIDxkaXJfZmQ+YC4KIAorICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6ZnVuYzpgc3RhdGAgZnVuY3Rpb24uCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBXaW5kb3dzIDYuMCAoVmlzdGEpIHN5bWJvbGljIGxpbmtzLgogCkBAIC0xNTUxLDcgKzE2MzAsNyBAQAogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCiAKLS4uIGZ1bmN0aW9uOjogbWFrZWRpcnMocGF0aCwgbW9kZT0wbzc3NywgZXhpc3Rfb2s9RmFsc2UpCisuLiBmdW5jdGlvbjo6IG1ha2VkaXJzKG5hbWUsIG1vZGU9MG83NzcsIGV4aXN0X29rPUZhbHNlKQogCiAgICAuLiBpbmRleDo6CiAgICAgICBzaW5nbGU6IGRpcmVjdG9yeTsgY3JlYXRpbmcKQEAgLTE1NzYsMTIgKzE2NTUsMTIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogICAgICAgVGhlICpleGlzdF9vayogcGFyYW1ldGVyLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy42CisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4xCiAKLSAgICAgIEJlZm9yZSBQeXRob24gMy4zLjYsIGlmICpleGlzdF9vayogd2FzIGBgVHJ1ZWBgIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0ZWQsCisgICAgICBCZWZvcmUgUHl0aG9uIDMuNC4xLCBpZiAqZXhpc3Rfb2sqIHdhcyBgYFRydWVgYCBhbmQgdGhlIGRpcmVjdG9yeSBleGlzdGVkLAogICAgICAgOmZ1bmM6YG1ha2VkaXJzYCB3b3VsZCBzdGlsbCByYWlzZSBhbiBlcnJvciBpZiAqbW9kZSogZGlkIG5vdCBtYXRjaCB0aGUKICAgICAgIG1vZGUgb2YgdGhlIGV4aXN0aW5nIGRpcmVjdG9yeS4gU2luY2UgdGhpcyBiZWhhdmlvciB3YXMgaW1wb3NzaWJsZSB0bwotICAgICAgaW1wbGVtZW50IHNhZmVseSwgaXQgd2FzIHJlbW92ZWQgaW4gUHl0aG9uIDMuMy42LiBTZWUgOmlzc3VlOmAyMTA4MmAuCisgICAgICBpbXBsZW1lbnQgc2FmZWx5LCBpdCB3YXMgcmVtb3ZlZCBpbiBQeXRob24gMy40LjEuIFNlZSA6aXNzdWU6YDIxMDgyYC4KIAogCiAuLiBmdW5jdGlvbjo6IG1rZmlmbyhwYXRoLCBtb2RlPTBvNjY2LCAqLCBkaXJfZmQ9Tm9uZSkKQEAgLTE3MTEsNyArMTc5MCw3IEBACiAgICAgICBUaGUgKmRpcl9mZCogYXJndW1lbnQuCiAKIAotLi4gZnVuY3Rpb246OiByZW1vdmVkaXJzKHBhdGgpCisuLiBmdW5jdGlvbjo6IHJlbW92ZWRpcnMobmFtZSkKIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IGRpcmVjdG9yeTsgZGVsZXRpbmcKIApAQCAtMTc5MCw1NSArMTg2OSwxMTYgQEAKICAgICAgIFRoZSAqZGlyX2ZkKiBwYXJhbWV0ZXIuCiAKIAotLi4gZnVuY3Rpb246OiBzdGF0KHBhdGgsICosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkKKy4uIGZ1bmN0aW9uOjogc3RhdChwYXRoLCBcKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKQogCi0gICBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGEgOmM6ZnVuYzpgc3RhdGAgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCi0gICAqcGF0aCogbWF5IGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBzdHJpbmcgb3IgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCi0gICAoVGhpcyBmdW5jdGlvbiBub3JtYWxseSBmb2xsb3dzIHN5bWxpbmtzOyB0byBzdGF0IGEgc3ltbGluayBhZGQgdGhlIGFyZ3VtZW50Ci0gICBgYGZvbGxvd19zeW1saW5rcz1GYWxzZWBgLCBvciB1c2UgOmZ1bmM6YGxzdGF0YC4pCisgICBHZXQgdGhlIHN0YXR1cyBvZiBhIGZpbGUgb3IgYSBmaWxlIGRlc2NyaXB0b3IuIFBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgYQorICAgOmM6ZnVuYzpgc3RhdGAgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguICpwYXRoKiBtYXkgYmUgc3BlY2lmaWVkIGFzCisgICBlaXRoZXIgYSBzdHJpbmcgb3IgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuIFJldHVybiBhIDpjbGFzczpgc3RhdF9yZXN1bHRgCisgICBvYmplY3QuCiAKLSAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gb2JqZWN0IHdob3NlIGF0dHJpYnV0ZXMgY29ycmVzcG9uZCByb3VnaGx5Ci0gICB0byB0aGUgbWVtYmVycyBvZiB0aGUgOmM6dHlwZTpgc3RhdGAgc3RydWN0dXJlLCBuYW1lbHk6CisgICBUaGlzIGZ1bmN0aW9uIG5vcm1hbGx5IGZvbGxvd3Mgc3ltbGlua3M7IHRvIHN0YXQgYSBzeW1saW5rIGFkZCB0aGUgYXJndW1lbnQKKyAgIGBgZm9sbG93X3N5bWxpbmtzPUZhbHNlYGAsIG9yIHVzZSA6ZnVuYzpgbHN0YXRgLgogCi0gICAqIDphdHRyOmBzdF9tb2RlYCAtIHByb3RlY3Rpb24gYml0cywKLSAgICogOmF0dHI6YHN0X2lub2AgLSBpbm9kZSBudW1iZXIsCi0gICAqIDphdHRyOmBzdF9kZXZgIC0gZGV2aWNlLAotICAgKiA6YXR0cjpgc3RfbmxpbmtgIC0gbnVtYmVyIG9mIGhhcmQgbGlua3MsCi0gICAqIDphdHRyOmBzdF91aWRgIC0gdXNlciBpZCBvZiBvd25lciwKLSAgICogOmF0dHI6YHN0X2dpZGAgLSBncm91cCBpZCBvZiBvd25lciwKLSAgICogOmF0dHI6YHN0X3NpemVgIC0gc2l6ZSBvZiBmaWxlLCBpbiBieXRlcywKLSAgICogOmF0dHI6YHN0X2F0aW1lYCAtIHRpbWUgb2YgbW9zdCByZWNlbnQgYWNjZXNzIGV4cHJlc3NlZCBpbiBzZWNvbmRzLAotICAgKiA6YXR0cjpgc3RfbXRpbWVgIC0gdGltZSBvZiBtb3N0IHJlY2VudCBjb250ZW50IG1vZGlmaWNhdGlvbgotICAgICBleHByZXNzZWQgaW4gc2Vjb25kcywKLSAgICogOmF0dHI6YHN0X2N0aW1lYCAtIHBsYXRmb3JtIGRlcGVuZGVudDsgdGltZSBvZiBtb3N0IHJlY2VudCBtZXRhZGF0YQotICAgICBjaGFuZ2Ugb24gVW5peCwgb3IgdGhlIHRpbWUgb2YgY3JlYXRpb24gb24gV2luZG93cywgZXhwcmVzc2VkIGluIHNlY29uZHMKLSAgICogOmF0dHI6YHN0X2F0aW1lX25zYCAtIHRpbWUgb2YgbW9zdCByZWNlbnQgYWNjZXNzCi0gICAgIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcyBhcyBhbiBpbnRlZ2VyLAotICAgKiA6YXR0cjpgc3RfbXRpbWVfbnNgIC0gdGltZSBvZiBtb3N0IHJlY2VudCBjb250ZW50IG1vZGlmaWNhdGlvbgotICAgICBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgYXMgYW4gaW50ZWdlciwKLSAgICogOmF0dHI6YHN0X2N0aW1lX25zYCAtIHBsYXRmb3JtIGRlcGVuZGVudDsgdGltZSBvZiBtb3N0IHJlY2VudCBtZXRhZGF0YQotICAgICBjaGFuZ2Ugb24gVW5peCwgb3IgdGhlIHRpbWUgb2YgY3JlYXRpb24gb24gV2luZG93cywKLSAgICAgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzIGFzIGFuIGludGVnZXIKKyAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgc3BlY2lmeWluZyBhIGZpbGUgZGVzY3JpcHRvciA8cGF0aF9mZD5gIGFuZAorICAgOnJlZjpgbm90IGZvbGxvd2luZyBzeW1saW5rcyA8Zm9sbG93X3N5bWxpbmtzPmAuCiAKLSAgIE9uIHNvbWUgVW5peCBzeXN0ZW1zIChzdWNoIGFzIExpbnV4KSwgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG1heSBhbHNvIGJlCi0gICBhdmFpbGFibGU6CisgICAuLiBpbmRleDo6IG1vZHVsZTogc3RhdAogCi0gICAqIDphdHRyOmBzdF9ibG9ja3NgIC0gbnVtYmVyIG9mIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIGZpbGUKLSAgICogOmF0dHI6YHN0X2Jsa3NpemVgIC0gZmlsZXN5c3RlbSBibG9ja3NpemUgZm9yIGVmZmljaWVudCBmaWxlIHN5c3RlbSBJL08KLSAgICogOmF0dHI6YHN0X3JkZXZgIC0gdHlwZSBvZiBkZXZpY2UgaWYgYW4gaW5vZGUgZGV2aWNlCi0gICAqIDphdHRyOmBzdF9mbGFnc2AgLSB1c2VyIGRlZmluZWQgZmxhZ3MgZm9yIGZpbGUKKyAgIEV4YW1wbGU6OgogCi0gICBPbiBvdGhlciBVbml4IHN5c3RlbXMgKHN1Y2ggYXMgRnJlZUJTRCksIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYmUKLSAgIGF2YWlsYWJsZSAoYnV0IG1heSBiZSBvbmx5IGZpbGxlZCBvdXQgaWYgcm9vdCB0cmllcyB0byB1c2UgdGhlbSk6CisgICAgICA+Pj4gaW1wb3J0IG9zCisgICAgICA+Pj4gc3RhdGluZm8gPSBvcy5zdGF0KCdzb21lZmlsZS50eHQnKQorICAgICAgPj4+IHN0YXRpbmZvCisgICAgICBvcy5zdGF0X3Jlc3VsdChzdF9tb2RlPTMzMTg4LCBzdF9pbm89Nzg3NjkzMiwgc3RfZGV2PTIzNDg4MTAyNiwKKyAgICAgIHN0X25saW5rPTEsIHN0X3VpZD01MDEsIHN0X2dpZD01MDEsIHN0X3NpemU9MjY0LCBzdF9hdGltZT0xMjk3MjMwMjk1LAorICAgICAgc3RfbXRpbWU9MTI5NzIzMDAyNywgc3RfY3RpbWU9MTI5NzIzMDAyNykKKyAgICAgID4+PiBzdGF0aW5mby5zdF9zaXplCisgICAgICAyNjQKIAotICAgKiA6YXR0cjpgc3RfZ2VuYCAtIGZpbGUgZ2VuZXJhdGlvbiBudW1iZXIKLSAgICogOmF0dHI6YHN0X2JpcnRodGltZWAgLSB0aW1lIG9mIGZpbGUgY3JlYXRpb24KKyAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAotICAgT24gTWFjIE9TIHN5c3RlbXMsIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYWxzbyBiZSBhdmFpbGFibGU6CisgICAuLiBzZWVhbHNvOjoKIAotICAgKiA6YXR0cjpgc3RfcnNpemVgCi0gICAqIDphdHRyOmBzdF9jcmVhdG9yYAotICAgKiA6YXR0cjpgc3RfdHlwZWAKKyAgICAgIDpmdW5jOmBmc3RhdGAgYW5kIDpmdW5jOmBsc3RhdGAgZnVuY3Rpb25zLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKyAgICAgIEFkZGVkIHRoZSAqZGlyX2ZkKiBhbmQgKmZvbGxvd19zeW1saW5rcyogYXJndW1lbnRzLCBzcGVjaWZ5aW5nIGEgZmlsZQorICAgICAgZGVzY3JpcHRvciBpbnN0ZWFkIG9mIGEgcGF0aC4KKworCisuLiBjbGFzczo6IHN0YXRfcmVzdWx0CisKKyAgIE9iamVjdCB3aG9zZSBhdHRyaWJ1dGVzIGNvcnJlc3BvbmQgcm91Z2hseSB0byB0aGUgbWVtYmVycyBvZiB0aGUKKyAgIDpjOnR5cGU6YHN0YXRgIHN0cnVjdHVyZS4gSXQgaXMgdXNlZCBmb3IgdGhlIHJlc3VsdCBvZiA6ZnVuYzpgb3Muc3RhdGAsCisgICA6ZnVuYzpgb3MuZnN0YXRgIGFuZCA6ZnVuYzpgb3MubHN0YXRgLgorCisgICBBdHRyaWJ1dGVzOgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9tb2RlCisKKyAgICAgIEZpbGUgbW9kZTogZmlsZSB0eXBlIGFuZCBmaWxlIG1vZGUgYml0cyAocGVybWlzc2lvbnMpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9pbm8KKworICAgICAgSW5vZGUgbnVtYmVyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9kZXYKKworICAgICAgSWRlbnRpZmllciBvZiB0aGUgZGV2aWNlIG9uIHdoaWNoIHRoaXMgZmlsZSByZXNpZGVzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9ubGluaworCisgICAgICBOdW1iZXIgb2YgaGFyZCBsaW5rcy4KKworICAgLi4gYXR0cmlidXRlOjogc3RfdWlkCisKKyAgICAgIFVzZXIgaWRlbnRpZmllciBvZiB0aGUgZmlsZSBvd25lci4KKworICAgLi4gYXR0cmlidXRlOjogc3RfZ2lkCisKKyAgICAgIEdyb3VwIGlkZW50aWZpZXIgb2YgdGhlIGZpbGUgb3duZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X3NpemUKKworICAgICAgU2l6ZSBvZiB0aGUgZmlsZSBpbiBieXRlcywgaWYgaXQgaXMgYSByZWd1bGFyIGZpbGUgb3IgYSBzeW1ib2xpYyBsaW5rLgorICAgICAgVGhlIHNpemUgb2YgYSBzeW1ib2xpYyBsaW5rIGlzIHRoZSBsZW5ndGggb2YgdGhlIHBhdGhuYW1lIGl0IGNvbnRhaW5zLAorICAgICAgd2l0aG91dCBhIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KKworICAgVGltZXN0YW1wczoKKworICAgLi4gYXR0cmlidXRlOjogc3RfYXRpbWUKKworICAgICAgVGltZSBvZiBtb3N0IHJlY2VudCBhY2Nlc3MgZXhwcmVzc2VkIGluIHNlY29uZHMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X210aW1lCisKKyAgICAgIFRpbWUgb2YgbW9zdCByZWNlbnQgY29udGVudCBtb2RpZmljYXRpb24gZXhwcmVzc2VkIGluIHNlY29uZHMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2N0aW1lCisKKyAgICAgIFBsYXRmb3JtIGRlcGVuZGVudDoKKworICAgICAgKiB0aGUgdGltZSBvZiBtb3N0IHJlY2VudCBtZXRhZGF0YSBjaGFuZ2Ugb24gVW5peCwKKyAgICAgICogdGhlIHRpbWUgb2YgY3JlYXRpb24gb24gV2luZG93cywgZXhwcmVzc2VkIGluIHNlY29uZHMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2F0aW1lX25zCisKKyAgICAgIFRpbWUgb2YgbW9zdCByZWNlbnQgYWNjZXNzIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcyBhcyBhbiBpbnRlZ2VyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9tdGltZV9ucworCisgICAgICBUaW1lIG9mIG1vc3QgcmVjZW50IGNvbnRlbnQgbW9kaWZpY2F0aW9uIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcyBhcyBhbgorICAgICAgaW50ZWdlci4KKworICAgLi4gYXR0cmlidXRlOjogc3RfY3RpbWVfbnMKKworICAgICAgUGxhdGZvcm0gZGVwZW5kZW50OgorCisgICAgICAqIHRoZSB0aW1lIG9mIG1vc3QgcmVjZW50IG1ldGFkYXRhIGNoYW5nZSBvbiBVbml4LAorICAgICAgKiB0aGUgdGltZSBvZiBjcmVhdGlvbiBvbiBXaW5kb3dzLCBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgYXMgYW4KKyAgICAgICAgaW50ZWdlci4KKworICAgU2VlIGFsc28gdGhlIDpmdW5jOmBzdGF0X2Zsb2F0X3RpbWVzYCBmdW5jdGlvbi4KIAogICAgLi4gbm90ZTo6CiAKQEAgLTE4NDgsNiArMTk4OCw3IEBACiAgICAgICBvciBGQVQzMiBmaWxlIHN5c3RlbXMsIDphdHRyOmBzdF9tdGltZWAgaGFzIDItc2Vjb25kIHJlc29sdXRpb24sIGFuZAogICAgICAgOmF0dHI6YHN0X2F0aW1lYCBoYXMgb25seSAxLWRheSByZXNvbHV0aW9uLiAgU2VlIHlvdXIgb3BlcmF0aW5nIHN5c3RlbQogICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKwogICAgICAgU2ltaWxhcmx5LCBhbHRob3VnaCA6YXR0cjpgc3RfYXRpbWVfbnNgLCA6YXR0cjpgc3RfbXRpbWVfbnNgLAogICAgICAgYW5kIDphdHRyOmBzdF9jdGltZV9uc2AgYXJlIGFsd2F5cyBleHByZXNzZWQgaW4gbmFub3NlY29uZHMsIG1hbnkKICAgICAgIHN5c3RlbXMgZG8gbm90IHByb3ZpZGUgbmFub3NlY29uZCBwcmVjaXNpb24uICBPbiBzeXN0ZW1zIHRoYXQgZG8KQEAgLTE4NTcsNDEgKzE5OTgsNjggQEAKICAgICAgIElmIHlvdSBuZWVkIHRoZSBleGFjdCB0aW1lc3RhbXBzIHlvdSBzaG91bGQgYWx3YXlzIHVzZQogICAgICAgOmF0dHI6YHN0X2F0aW1lX25zYCwgOmF0dHI6YHN0X210aW1lX25zYCwgYW5kIDphdHRyOmBzdF9jdGltZV9uc2AuCiAKLSAgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIDpmdW5jOmB+b3Muc3RhdGAgaXMgYWxzbworICAgT24gc29tZSBVbml4IHN5c3RlbXMgKHN1Y2ggYXMgTGludXgpLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGFsc28gYmUKKyAgIGF2YWlsYWJsZToKKworICAgLi4gYXR0cmlidXRlOjogc3RfYmxvY2tzCisKKyAgICAgIE51bWJlciBvZiA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkIGZvciBmaWxlLgorICAgICAgVGhpcyBtYXkgYmUgc21hbGxlciB0aGFuIDphdHRyOmBzdF9zaXplYC81MTIgd2hlbiB0aGUgZmlsZSBoYXMgaG9sZXMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2Jsa3NpemUKKworICAgICAgIlByZWZlcnJlZCIgYmxvY2tzaXplIGZvciBlZmZpY2llbnQgZmlsZSBzeXN0ZW0gSS9PLiBXcml0aW5nIHRvIGEgZmlsZSBpbgorICAgICAgc21hbGxlciBjaHVua3MgbWF5IGNhdXNlIGFuIGluZWZmaWNpZW50IHJlYWQtbW9kaWZ5LXJld3JpdGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X3JkZXYKKworICAgICAgVHlwZSBvZiBkZXZpY2UgaWYgYW4gaW5vZGUgZGV2aWNlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9mbGFncworCisgICAgICBVc2VyIGRlZmluZWQgZmxhZ3MgZm9yIGZpbGUuCisKKyAgIE9uIG90aGVyIFVuaXggc3lzdGVtcyAoc3VjaCBhcyBGcmVlQlNEKSwgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG1heSBiZQorICAgYXZhaWxhYmxlIChidXQgbWF5IGJlIG9ubHkgZmlsbGVkIG91dCBpZiByb290IHRyaWVzIHRvIHVzZSB0aGVtKToKKworICAgLi4gYXR0cmlidXRlOjogc3RfZ2VuCisKKyAgICAgIEZpbGUgZ2VuZXJhdGlvbiBudW1iZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2JpcnRodGltZQorCisgICAgICBUaW1lIG9mIGZpbGUgY3JlYXRpb24uCisKKyAgIE9uIE1hYyBPUyBzeXN0ZW1zLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlOgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9yc2l6ZQorCisgICAgICBSZWFsIHNpemUgb2YgdGhlIGZpbGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2NyZWF0b3IKKworICAgICAgQ3JlYXRvciBvZiB0aGUgZmlsZS4KKworICAgLi4gYXR0cmlidXRlOjogc3RfdHlwZQorCisgICAgICBGaWxlIHR5cGUuCisKKyAgIFRoZSBzdGFuZGFyZCBtb2R1bGUgOm1vZDpgc3RhdGAgZGVmaW5lcyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyB0aGF0IGFyZQorICAgdXNlZnVsIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gYSA6Yzp0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUuIChPbgorICAgV2luZG93cywgc29tZSBpdGVtcyBhcmUgZmlsbGVkIHdpdGggZHVtbXkgdmFsdWVzLikKKworICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGEgOmNsYXNzOmBzdGF0X3Jlc3VsdGAgaW5zdGFuY2UgaXMgYWxzbwogICAgYWNjZXNzaWJsZSBhcyBhIHR1cGxlIG9mIGF0IGxlYXN0IDEwIGludGVnZXJzIGdpdmluZyB0aGUgbW9zdCBpbXBvcnRhbnQgKGFuZAogICAgcG9ydGFibGUpIG1lbWJlcnMgb2YgdGhlIDpjOnR5cGU6YHN0YXRgIHN0cnVjdHVyZSwgaW4gdGhlIG9yZGVyCiAgICA6YXR0cjpgc3RfbW9kZWAsIDphdHRyOmBzdF9pbm9gLCA6YXR0cjpgc3RfZGV2YCwgOmF0dHI6YHN0X25saW5rYCwKICAgIDphdHRyOmBzdF91aWRgLCA6YXR0cjpgc3RfZ2lkYCwgOmF0dHI6YHN0X3NpemVgLCA6YXR0cjpgc3RfYXRpbWVgLAogICAgOmF0dHI6YHN0X210aW1lYCwgOmF0dHI6YHN0X2N0aW1lYC4gTW9yZSBpdGVtcyBtYXkgYmUgYWRkZWQgYXQgdGhlIGVuZCBieQotICAgc29tZSBpbXBsZW1lbnRhdGlvbnMuCi0KLSAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgc3BlY2lmeWluZyBhIGZpbGUgZGVzY3JpcHRvciA8cGF0aF9mZD5gIGFuZAotICAgOnJlZjpgbm90IGZvbGxvd2luZyBzeW1saW5rcyA8Zm9sbG93X3N5bWxpbmtzPmAuCi0KLSAgIC4uIGluZGV4OjogbW9kdWxlOiBzdGF0Ci0KLSAgIFRoZSBzdGFuZGFyZCBtb2R1bGUgOm1vZDpgc3RhdGAgZGVmaW5lcyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyB0aGF0IGFyZSB1c2VmdWwKLSAgIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gYSA6Yzp0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUuIChPbiBXaW5kb3dzLCBzb21lCi0gICBpdGVtcyBhcmUgZmlsbGVkIHdpdGggZHVtbXkgdmFsdWVzLikKLQotICAgRXhhbXBsZTo6Ci0KLSAgICAgID4+PiBpbXBvcnQgb3MKLSAgICAgID4+PiBzdGF0aW5mbyA9IG9zLnN0YXQoJ3NvbWVmaWxlLnR4dCcpCi0gICAgICA+Pj4gc3RhdGluZm8KLSAgICAgIHBvc2l4LnN0YXRfcmVzdWx0KHN0X21vZGU9MzMxODgsIHN0X2lubz03ODc2OTMyLCBzdF9kZXY9MjM0ODgxMDI2LAotICAgICAgc3Rfbmxpbms9MSwgc3RfdWlkPTUwMSwgc3RfZ2lkPTUwMSwgc3Rfc2l6ZT0yNjQsIHN0X2F0aW1lPTEyOTcyMzAyOTUsCi0gICAgICBzdF9tdGltZT0xMjk3MjMwMDI3LCBzdF9jdGltZT0xMjk3MjMwMDI3KQotICAgICAgPj4+IHN0YXRpbmZvLnN0X3NpemUKLSAgICAgIDI2NAotCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCisgICBzb21lIGltcGxlbWVudGF0aW9ucy4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBQeXRob24gdmVyc2lvbnMsCisgICBhY2Nlc3NpbmcgOmNsYXNzOmBzdGF0X3Jlc3VsdGAgYXMgYSB0dXBsZSBhbHdheXMgcmV0dXJucyBpbnRlZ2Vycy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCi0gICAgICBBZGRlZCB0aGUgKmRpcl9mZCogYW5kICpmb2xsb3dfc3ltbGlua3MqIGFyZ3VtZW50cywKLSAgICAgIHNwZWNpZnlpbmcgYSBmaWxlIGRlc2NyaXB0b3IgaW5zdGVhZCBvZiBhIHBhdGgsCi0gICAgICBhbmQgdGhlIDphdHRyOmBzdF9hdGltZV9uc2AsIDphdHRyOmBzdF9tdGltZV9uc2AsCi0gICAgICBhbmQgOmF0dHI6YHN0X2N0aW1lX25zYCBtZW1iZXJzLgorICAgICAgQWRkZWQgdGhlIDphdHRyOmBzdF9hdGltZV9uc2AsIDphdHRyOmBzdF9tdGltZV9uc2AsIGFuZAorICAgICAgOmF0dHI6YHN0X2N0aW1lX25zYCBtZW1iZXJzLgogCiAKIC4uIGZ1bmN0aW9uOjogc3RhdF9mbG9hdF90aW1lcyhbbmV3dmFsdWVdKQpAQCAtMTkzNSwxMSArMjEwMywyNiBAQAogICAgcmVhZC1vbmx5LCBhbmQgaWYgOmNvbnN0OmBTVF9OT1NVSURgIGlzIHNldCwgdGhlIHNlbWFudGljcyBvZgogICAgc2V0dWlkL3NldGdpZCBiaXRzIGFyZSBkaXNhYmxlZCBvciBub3Qgc3VwcG9ydGVkLgogCisgICBBZGRpdGlvbmFsIG1vZHVsZS1sZXZlbCBjb25zdGFudHMgYXJlIGRlZmluZWQgZm9yIEdOVS9nbGliYyBiYXNlZCBzeXN0ZW1zLgorICAgVGhlc2UgYXJlIDpjb25zdDpgU1RfTk9ERVZgIChkaXNhbGxvdyBhY2Nlc3MgdG8gZGV2aWNlIHNwZWNpYWwgZmlsZXMpLAorICAgOmNvbnN0OmBTVF9OT0VYRUNgIChkaXNhbGxvdyBwcm9ncmFtIGV4ZWN1dGlvbiksIDpjb25zdDpgU1RfU1lOQ0hST05PVVNgCisgICAod3JpdGVzIGFyZSBzeW5jZWQgYXQgb25jZSksIDpjb25zdDpgU1RfTUFORExPQ0tgIChhbGxvdyBtYW5kYXRvcnkgbG9ja3Mgb24gYW4gRlMpLAorICAgOmNvbnN0OmBTVF9XUklURWAgKHdyaXRlIG9uIGZpbGUvZGlyZWN0b3J5L3N5bWxpbmspLCA6Y29uc3Q6YFNUX0FQUEVORGAKKyAgIChhcHBlbmQtb25seSBmaWxlKSwgOmNvbnN0OmBTVF9JTU1VVEFCTEVgIChpbW11dGFibGUgZmlsZSksIDpjb25zdDpgU1RfTk9BVElNRWAKKyAgIChkbyBub3QgdXBkYXRlIGFjY2VzcyB0aW1lcyksIDpjb25zdDpgU1RfTk9ESVJBVElNRWAgKGRvIG5vdCB1cGRhdGUgZGlyZWN0b3J5IGFjY2VzcworICAgdGltZXMpLCA6Y29uc3Q6YFNUX1JFTEFUSU1FYCAodXBkYXRlIGF0aW1lIHJlbGF0aXZlIHRvIG10aW1lL2N0aW1lKS4KKwogICAgVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCA6cmVmOmBzcGVjaWZ5aW5nIGEgZmlsZSBkZXNjcmlwdG9yIDxwYXRoX2ZkPmAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBUaGUgOmNvbnN0OmBTVF9SRE9OTFlgIGFuZCA6Y29uc3Q6YFNUX05PU1VJRGAgY29uc3RhbnRzIHdlcmUgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgOmNvbnN0OmBTVF9OT0RFVmAsIDpjb25zdDpgU1RfTk9FWEVDYCwgOmNvbnN0OmBTVF9TWU5DSFJPTk9VU2AsCisgICAgICA6Y29uc3Q6YFNUX01BTkRMT0NLYCwgOmNvbnN0OmBTVF9XUklURWAsIDpjb25zdDpgU1RfQVBQRU5EYCwKKyAgICAgIDpjb25zdDpgU1RfSU1NVVRBQkxFYCwgOmNvbnN0OmBTVF9OT0FUSU1FYCwgOmNvbnN0OmBTVF9OT0RJUkFUSU1FYCwKKyAgICAgIGFuZCA6Y29uc3Q6YFNUX1JFTEFUSU1FYCBjb25zdGFudHMgd2VyZSBhZGRlZC4KKwogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKQEAgLTIxNTcsOSArMjM0MCwxMSBAQAogCiAgICBJZiBvcHRpb25hbCBhcmd1bWVudCAqdG9wZG93biogaXMgYGBUcnVlYGAgb3Igbm90IHNwZWNpZmllZCwgdGhlIHRyaXBsZSBmb3IgYQogICAgZGlyZWN0b3J5IGlzIGdlbmVyYXRlZCBiZWZvcmUgdGhlIHRyaXBsZXMgZm9yIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMKLSAgIChkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkIHRvcC1kb3duKS4gIElmICp0b3Bkb3duKiBpcyBgYEZhbHNlYGAsIHRoZSB0cmlwbGUgZm9yIGEKLSAgIGRpcmVjdG9yeSBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIHRyaXBsZXMgZm9yIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMKLSAgIChkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkIGJvdHRvbS11cCkuCisgICAoZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZCB0b3AtZG93bikuICBJZiAqdG9wZG93biogaXMgYGBGYWxzZWBgLCB0aGUgdHJpcGxlCisgICBmb3IgYSBkaXJlY3RvcnkgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSB0cmlwbGVzIGZvciBhbGwgb2YgaXRzIHN1YmRpcmVjdG9yaWVzCisgICAoZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZCBib3R0b20tdXApLiBObyBtYXR0ZXIgdGhlIHZhbHVlIG9mICp0b3Bkb3duKiwgdGhlCisgICBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGlzIHJldHJpZXZlZCBiZWZvcmUgdGhlIHR1cGxlcyBmb3IgdGhlIGRpcmVjdG9yeSBhbmQKKyAgIGl0cyBzdWJkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkLgogCiAgICBXaGVuICp0b3Bkb3duKiBpcyBgYFRydWVgYCwgdGhlIGNhbGxlciBjYW4gbW9kaWZ5IHRoZSAqZGlybmFtZXMqIGxpc3QgaW4tcGxhY2UKICAgIChwZXJoYXBzIHVzaW5nIDprZXl3b3JkOmBkZWxgIG9yIHNsaWNlIGFzc2lnbm1lbnQpLCBhbmQgOmZ1bmM6YHdhbGtgIHdpbGwgb25seQpAQCAtMjU4OSw3ICsyNzc0LDcgQEAKICAgIEZvcmsgYSBjaGlsZCBwcm9jZXNzLiAgUmV0dXJuIGBgMGBgIGluIHRoZSBjaGlsZCBhbmQgdGhlIGNoaWxkJ3MgcHJvY2VzcyBpZCBpbiB0aGUKICAgIHBhcmVudC4gIElmIGFuIGVycm9yIG9jY3VycyA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQuCiAKLSAgIE5vdGUgdGhhdCBzb21lIHBsYXRmb3JtcyBpbmNsdWRpbmcgRnJlZUJTRCA8PSA2LjMsIEN5Z3dpbiBhbmQgT1MvMiBFTVggaGF2ZQorICAgTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zIGluY2x1ZGluZyBGcmVlQlNEIDw9IDYuMyBhbmQgQ3lnd2luIGhhdmUKICAgIGtub3duIGlzc3VlcyB3aGVuIHVzaW5nIGZvcmsoKSBmcm9tIGEgdGhyZWFkLgogCiAgICAuLiB3YXJuaW5nOjoKQEAgLTI2NTksMTAgKzI4NDQsMjcgQEAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCi0uLiBmdW5jdGlvbjo6IHBvcGVuKC4uLikKKy4uIGZ1bmN0aW9uOjogcG9wZW4oY29tbWFuZCwgbW9kZT0ncicsIGJ1ZmZlcmluZz0tMSkKIAotICAgUnVuIGNoaWxkIHByb2Nlc3NlcywgcmV0dXJuaW5nIG9wZW5lZCBwaXBlcyBmb3IgY29tbXVuaWNhdGlvbnMuICBUaGVzZSBmdW5jdGlvbnMKLSAgIGFyZSBkZXNjcmliZWQgaW4gc2VjdGlvbiA6cmVmOmBvcy1uZXdzdHJlYW1zYC4KKyAgIE9wZW4gYSBwaXBlIHRvIG9yIGZyb20gKmNvbW1hbmQqLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0CisgICBjb25uZWN0ZWQgdG8gdGhlIHBpcGUsIHdoaWNoIGNhbiBiZSByZWFkIG9yIHdyaXR0ZW4gZGVwZW5kaW5nIG9uIHdoZXRoZXIgKm1vZGUqCisgICBpcyBgYCdyJ2BgIChkZWZhdWx0KSBvciBgYCd3J2BgLiBUaGUgKmJ1ZmZlcmluZyogYXJndW1lbnQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMKKyAgIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IHRvIHRoZSBidWlsdC1pbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24uIFRoZQorICAgcmV0dXJuZWQgZmlsZSBvYmplY3QgcmVhZHMgb3Igd3JpdGVzIHRleHQgc3RyaW5ncyByYXRoZXIgdGhhbiBieXRlcy4KKworICAgVGhlIGBgY2xvc2VgYCBtZXRob2QgcmV0dXJucyA6Y29uc3Q6YE5vbmVgIGlmIHRoZSBzdWJwcm9jZXNzIGV4aXRlZAorICAgc3VjY2Vzc2Z1bGx5LCBvciB0aGUgc3VicHJvY2VzcydzIHJldHVybiBjb2RlIGlmIHRoZXJlIHdhcyBhbgorICAgZXJyb3IuIE9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSByZXR1cm4gY29kZSBpcyBwb3NpdGl2ZSBpdAorICAgcmVwcmVzZW50cyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcm9jZXNzIGxlZnQtc2hpZnRlZCBieSBvbmUKKyAgIGJ5dGUuICBJZiB0aGUgcmV0dXJuIGNvZGUgaXMgbmVnYXRpdmUsIHRoZSBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkCisgICBieSB0aGUgc2lnbmFsIGdpdmVuIGJ5IHRoZSBuZWdhdGVkIHZhbHVlIG9mIHRoZSByZXR1cm4gY29kZS4gIChGb3IKKyAgIGV4YW1wbGUsIHRoZSByZXR1cm4gdmFsdWUgbWlnaHQgYmUgYGAtIHNpZ25hbC5TSUdLSUxMYGAgaWYgdGhlCisgICBzdWJwcm9jZXNzIHdhcyBraWxsZWQuKSAgT24gV2luZG93cyBzeXN0ZW1zLCB0aGUgcmV0dXJuIHZhbHVlCisgICBjb250YWlucyB0aGUgc2lnbmVkIGludGVnZXIgcmV0dXJuIGNvZGUgZnJvbSB0aGUgY2hpbGQgcHJvY2Vzcy4KKworICAgVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gOyBzZWUgdGhhdCBjbGFzcydzCisgICBkb2N1bWVudGF0aW9uIGZvciBtb3JlIHBvd2VyZnVsIHdheXMgdG8gbWFuYWdlIGFuZCBjb21tdW5pY2F0ZSB3aXRoCisgICBzdWJwcm9jZXNzZXMuCiAKIAogLi4gZnVuY3Rpb246OiBzcGF3bmwobW9kZSwgcGF0aCwgLi4uKQpAQCAtMjgzNSw3ICszMDM3LDYgQEAKICAgIDptYW5wYWdlOmB0aW1lcygyKWAgb3IgdGhlIGNvcnJlc3BvbmRpbmcgV2luZG93cyBQbGF0Zm9ybSBBUEkgZG9jdW1lbnRhdGlvbi4KICAgIE9uIFdpbmRvd3MsIG9ubHkgOmF0dHI6YHVzZXJgIGFuZCA6YXR0cjpgc3lzdGVtYCBhcmUga25vd247IHRoZSBvdGhlcgogICAgYXR0cmlidXRlcyBhcmUgemVyby4KLSAgIE9uIE9TLzIsIG9ubHkgOmF0dHI6YGVsYXBzZWRgIGlzIGtub3duOyB0aGUgb3RoZXIgYXR0cmlidXRlcyBhcmUgemVyby4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCkBAIC0zMDU3LDcgKzMyNTgsNyBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIGEgc3VwcG9ydGVkIGJ5IHRoZQorVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBieSB0aGUKIG9wZXJhdGluZyBzeXN0ZW0uCiAKIC4uIGRhdGE6OiBTQ0hFRF9PVEhFUgpAQCAtMzE2NiwxMCArMzM2Nyw2IEBACiAgICBSZXR1cm4gdGhlIHNldCBvZiBDUFVzIHRoZSBwcm9jZXNzIHdpdGggUElEICpwaWQqIChvciB0aGUgY3VycmVudCBwcm9jZXNzCiAgICBpZiB6ZXJvKSBpcyByZXN0cmljdGVkIHRvLgogCi0gICAuLiBzZWVhbHNvOjoKLSAgICAgIDpmdW5jOmBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50YCByZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUKLSAgICAgIHN5c3RlbS4KLQogCiAuLiBfb3MtcGF0aDoKIApAQCAtMzIwNyw2ICszNDA0LDEzIEBACiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAorLi4gZnVuY3Rpb246OiBjcHVfY291bnQoKQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uIFJldHVybnMgTm9uZSBpZiB1bmRldGVybWluZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0bG9hZGF2ZygpCiAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgc3lzdGVtIHJ1biBxdWV1ZSBhdmVyYWdlZCBvdmVyIHRoZSBsYXN0CkBAIC0zMzA1LDYgKzM1MDksMTkgQEAKICAgIFRoZSBmaWxlIHBhdGggb2YgdGhlIG51bGwgZGV2aWNlLiBGb3IgZXhhbXBsZTogYGAnL2Rldi9udWxsJ2BgIGZvcgogICAgUE9TSVgsIGBgJ251bCdgYCBmb3IgV2luZG93cy4gIEFsc28gYXZhaWxhYmxlIHZpYSA6bW9kOmBvcy5wYXRoYC4KIAorLi4gZGF0YTo6IFJUTERfTEFaWQorICAgICAgICAgIFJUTERfTk9XCisgICAgICAgICAgUlRMRF9HTE9CQUwKKyAgICAgICAgICBSVExEX0xPQ0FMCisgICAgICAgICAgUlRMRF9OT0RFTEVURQorICAgICAgICAgIFJUTERfTk9MT0FECisgICAgICAgICAgUlRMRF9ERUVQQklORAorCisgICBGbGFncyBmb3IgdXNlIHdpdGggdGhlIDpmdW5jOmB+c3lzLnNldGRsb3BlbmZsYWdzYCBhbmQKKyAgIDpmdW5jOmB+c3lzLmdldGRsb3BlbmZsYWdzYCBmdW5jdGlvbnMuICBTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UKKyAgIDptYW5wYWdlOmBkbG9wZW4oMylgIGZvciB3aGF0IHRoZSBkaWZmZXJlbnQgZmxhZ3MgbWVhbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIC4uIF9vcy1taXNjZnVuYzoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3NzYXVkaW9kZXYucnN0IGIvRG9jL2xpYnJhcnkvb3NzYXVkaW9kZXYucnN0CmluZGV4IDgwNTUxYWEuLmJiNTA4MWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zc2F1ZGlvZGV2LnJzdAorKysgYi9Eb2MvbGlicmFyeS9vc3NhdWRpb2Rldi5yc3QKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgZGF0YSB3cml0dGVuIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgYW1vdW50IG9mIGRhdGEgc3VwcGxpZWQuCiAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICBBdWRpbyBkZXZpY2Ugb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCwgaS5lLiB0aGV5IGNhbgorICAgQXVkaW8gZGV2aWNlIG9iamVjdHMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wsIGkuZS4gdGhleSBjYW4KICAgIGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LgogCiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogICAgUmV0dXJucyB0aGUgZmlsZSBoYW5kbGUgbnVtYmVyIG9mIHRoZSBvcGVuIG1peGVyIGRldmljZSBmaWxlLgogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgTWl4ZXIgb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KKyAgIE1peGVyIG9iamVjdHMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCiAKIAogVGhlIHJlbWFpbmluZyBtZXRob2RzIGFyZSBzcGVjaWZpYyB0byBhdWRpbyBtaXhpbmc6CkBAIC00MDcsNyArNDA3LDcgQEAKICAgIChzaWxlbnQpIHRvIDEwMCAoZnVsbCB2b2x1bWUpLiAgSWYgdGhlIGNvbnRyb2wgaXMgbW9ub3Bob25pYywgYSAyLXR1cGxlIGlzIHN0aWxsCiAgICByZXR1cm5lZCwgYnV0IGJvdGggdm9sdW1lcyBhcmUgdGhlIHNhbWUuCiAKLSAgIFJhaXNlcyA6ZXhjOmBPU1NBdWRpb0Vycm9yYCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgd2FzIGlzIHNwZWNpZmllZCwgb3IKKyAgIFJhaXNlcyA6ZXhjOmBPU1NBdWRpb0Vycm9yYCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgaXMgc3BlY2lmaWVkLCBvcgogICAgOmV4YzpgT1NFcnJvcmAgaWYgYW4gdW5zdXBwb3J0ZWQgY29udHJvbCBpcyBzcGVjaWZpZWQuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcgYi9Eb2MvbGlicmFyeS9wYXRobGliLWluaGVyaXRhbmNlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODFjM2RlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5zdmcgYi9Eb2MvbGlicmFyeS9wYXRobGliLWluaGVyaXRhbmNlLnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjQyMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5zdmcKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9InllcyI/PgorCis8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMC4wIDAuMCA1MzguMCA0OTYuMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJub25lIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0icC4wIj48cGF0aCBkPSJtMCAwbDUzOC4wIDBsMCA0OTYuMGwtNTM4LjAgMGwwIC00OTYuMHoiIGNsaXAtcnVsZT0ibm9uemVybyI+PC9wYXRoPjwvY2xpcFBhdGg+PGcgY2xpcC1wYXRoPSJ1cmwoI3AuMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtMCAwbDUzOC45MTYgMGwwIDQ5Ni4wODM5OGwtNTM4LjkxNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0ibTE3Ni4wIDI0LjBsMTg3LjQzMzA3IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA3IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTE3Ni4wIDI0LjBsMTg3LjQzMzA3IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA3IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJtMjM1LjE4NTI3IDY2Ljg3NzcxNmwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTMuOTI5Njg3NSAtMi4yMzQzNzVsMCA1LjQ4NDM3NXEwLjUxNTYyNSAwIDAuNzUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuNTE1NjI1IDBsMCAtMC4zNzVxLTAuNjg3NSAwLjMxMjUgLTEuMzEyNSAwLjQ2ODc1cS0wLjYyNSAwLjE3MTg3NSAtMS4xODc1IDAuMTcxODc1cS0wLjc5Njg3NSAwIC0xLjM3NSAtMC4zMjgxMjVxLTAuNTc4MTI1IC0wLjM0Mzc1IC0wLjkwNjI1IC0wLjkzNzVxLTAuMjUgLTAuNDIxODc1IC0wLjI1IC0xLjA0Njg3NWwwIC0zLjQ1MzEyNWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS44NzUgMGwwIDQuNzY1NjI1cTAgMC41IDAuMjM0Mzc1IDAuNzVxMC4yNSAwLjIzNDM3NSAwLjc2NTYyNSAwLjIzNDM3NXEwLjQ4NDM3NSAwIDEuMDMxMjUgLTAuMTg3NXEwLjU2MjUgLTAuMjAzMTI1IDEuMzkwNjI1IC0wLjcwMzEyNWwwIC0zLjI2NTYyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi4xNzE4NzUgMHptNS44NjcxODc1IDBsMCAxLjBxMS4wMTU2MjUgLTAuNzM0Mzc1IDEuNTkzNzUgLTAuOTY4NzVxMC41NzgxMjUgLTAuMjUgMS4wOTM3NSAtMC4yNXEwLjc4MTI1IDAgMS41MTU2MjUgMC41NzgxMjVxMC41IDAuMzkwNjI1IDAuNSAwLjc5Njg3NXEwIDAuMzQzNzUgLTAuMjUgMC41OTM3NXEtMC4yMzQzNzUgMC4yMzQzNzUgLTAuNTYyNSAwLjIzNDM3NXEtMC4yOTY4NzUgMCAtMC42MjUgLTAuMjk2ODc1cS0wLjMyODEyNSAtMC4yOTY4NzUgLTAuNTkzNzUgLTAuMjk2ODc1cS0wLjMyODEyNSAwIC0xLjAgMC40MjE4NzVxLTAuNjcxODc1IDAuNDIxODc1IC0xLjY3MTg3NSAxLjI2NTYyNWwwIDIuNDA2MjVsMi4yODEyNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTQuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC45NTMxMjUgMGwwIC0zLjg5MDYyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi4xNzE4NzUgMHptMTMuOTYwOTM3NSA0LjM1OTM3NWwtNi41NzgxMjUgMHEwLjI1IDAuNjI1IDAuODkwNjI1IDEuMDE1NjI1cTAuNjQwNjI1IDAuMzc1IDEuNzE4NzUgMC4zNzVxMC44OTA2MjUgMCAyLjM3NSAtMC4zOTA2MjVxMC42MDkzNzUgLTAuMTU2MjUgMC44NDM3NSAtMC4xNTYyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjE4NzUgMC4yMTg3NSAwLjIxODc1IDAuNTYyNXEwIDAuMzEyNSAtMC4yMzQzNzUgMC41MzEyNXEtMC4zMTI1IDAuMjk2ODc1IC0xLjUzMTI1IDAuNTYyNXEtMS4yMDMxMjUgMC4yNjU2MjUgLTIuMzEyNSAwLjI2NTYyNXEtMS45MjE4NzUgMCAtMy4wNzgxMjUgLTEuMDkzNzVxLTEuMTU2MjUgLTEuMDkzNzUgLTEuMTU2MjUgLTIuNjcxODc1cTAgLTEuNjg3NSAxLjI1IC0yLjc1cTEuMjUgLTEuMDYyNSAyLjg3NSAtMS4wNjI1cTAuOTY4NzUgMCAxLjc4MTI1IDAuMzQzNzVxMC44MjgxMjUgMC4zNDM3NSAxLjIxODc1IDAuNzVxMC41NjI1IDAuNTc4MTI1IDAuOTM3NSAxLjQyMTg3NXEwLjI1IDAuNTkzNzUgMC4yNSAxLjM3NWwwIDAuNjg3NXptLTEuNzgxMjUgLTEuNjA5Mzc1cS0wLjM1OTM3NSAtMC42ODc1IC0wLjk1MzEyNSAtMS4wMTU2MjVxLTAuNTkzNzUgLTAuMzQzNzUgLTEuNDIxODc1IC0wLjM0Mzc1cS0wLjgxMjUgMCAtMS40MDYyNSAwLjM0Mzc1cS0wLjU5Mzc1IDAuMzI4MTI1IC0wLjk2ODc1IDEuMDE1NjI1bDQuNzUgMHptNi40Mjk2ODc1IDEuMDkzNzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU2MjUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjUgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc1IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NSAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjUgLTAuMTA5Mzc1IDEuMTI1IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NSAwIC0xLjY3MTg3NSAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMjUgMCAxLjI5Njg3NSAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0ibTE2LjAgMTQ0LjBsMTg3LjQzMzA2IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA2IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTE2LjAgMTQ0LjBsMTg3LjQzMzA2IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA2IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJtNTEuMTgxMzc0IDE4Ni44Nzc3MmwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTMuOTI5Njg3NSAtMi4yMzQzNzVsMCA1LjQ4NDM3NXEwLjUxNTYyNSAwIDAuNzUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuNTE1NjI1IDBsMCAtMC4zNzVxLTAuNjg3NSAwLjMxMjUgLTEuMzEyNSAwLjQ2ODc1cS0wLjYyNSAwLjE3MTg3NSAtMS4xODc1IDAuMTcxODc1cS0wLjc5Njg3NSAwIC0xLjM3NSAtMC4zMjgxMjVxLTAuNTc4MTI1IC0wLjM0Mzc1IC0wLjkwNjI1IC0wLjkzNzVxLTAuMjUgLTAuNDIxODc1IC0wLjI1IC0xLjA0Njg3NWwwIC0zLjQ1MzEyNWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS44NzUgMGwwIDQuNzY1NjI1cTAgMC41IDAuMjM0Mzc1IDAuNzVxMC4yNSAwLjIzNDM3NSAwLjc2NTYyNSAwLjIzNDM3NXEwLjQ4NDM3NSAwIDEuMDMxMjUgLTAuMTg3NXEwLjU2MjUgLTAuMjAzMTI1IDEuMzkwNjI1IC0wLjcwMzEyNWwwIC0zLjI2NTYyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi4xNzE4NzUgMHptNS44NjcxODc1IDBsMCAxLjBxMS4wMTU2MjUgLTAuNzM0Mzc1IDEuNTkzNzUgLTAuOTY4NzVxMC41NzgxMjUgLTAuMjUgMS4wOTM3NSAtMC4yNXEwLjc4MTI1IDAgMS41MTU2MjUgMC41NzgxMjVxMC41IDAuMzkwNjI1IDAuNSAwLjc5Njg3NXEwIDAuMzQzNzUgLTAuMjUgMC41OTM3NXEtMC4yMzQzNzUgMC4yMzQzNzUgLTAuNTYyNSAwLjIzNDM3NXEtMC4yOTY4NzUgMCAtMC42MjUgLTAuMjk2ODc1cS0wLjMyODEyNSAtMC4yOTY4NzUgLTAuNTkzNzUgLTAuMjk2ODc1cS0wLjMyODEyNSAwIC0xLjAgMC40MjE4NzVxLTAuNjcxODc1IDAuNDIxODc1IC0xLjY3MTg3NSAxLjI2NTYyNWwwIDIuNDA2MjVsMi4yODEyNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTQuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC45NTMxMjUgMGwwIC0zLjg5MDYyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi4xNzE4NzUgMHptMTMuOTYwOTM3NSA0LjM1OTM3NWwtNi41NzgxMjUgMHEwLjI1IDAuNjI1IDAuODkwNjI1IDEuMDE1NjI1cTAuNjQwNjI1IDAuMzc1IDEuNzE4NzUgMC4zNzVxMC44OTA2MjUgMCAyLjM3NSAtMC4zOTA2MjVxMC42MDkzNzUgLTAuMTU2MjUgMC44NDM3NSAtMC4xNTYyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjE4NzUgMC4yMTg3NSAwLjIxODc1IDAuNTYyNXEwIDAuMzEyNSAtMC4yMzQzNzUgMC41MzEyNXEtMC4zMTI1IDAuMjk2ODc1IC0xLjUzMTI1IDAuNTYyNXEtMS4yMDMxMjUgMC4yNjU2MjUgLTIuMzEyNSAwLjI2NTYyNXEtMS45MjE4NzUgMCAtMy4wNzgxMjUgLTEuMDkzNzVxLTEuMTU2MjUgLTEuMDkzNzUgLTEuMTU2MjUgLTIuNjcxODc1cTAgLTEuNjg3NSAxLjI1IC0yLjc1cTEuMjUgLTEuMDYyNSAyLjg3NSAtMS4wNjI1cTAuOTY4NzUgMCAxLjc4MTI1IDAuMzQzNzVxMC44MjgxMjUgMC4zNDM3NSAxLjIxODc1IDAuNzVxMC41NjI1IDAuNTc4MTI1IDAuOTM3NSAxLjQyMTg3NXEwLjI1IDAuNTkzNzUgMC4yNSAxLjM3NWwwIDAuNjg3NXptLTEuNzgxMjUgLTEuNjA5Mzc1cS0wLjM1OTM3NSAtMC42ODc1IC0wLjk1MzEyNSAtMS4wMTU2MjVxLTAuNTkzNzUgLTAuMzQzNzUgLTEuNDIxODc1IC0wLjM0Mzc1cS0wLjgxMjUgMCAtMS40MDYyNSAwLjM0Mzc1cS0wLjU5Mzc1IDAuMzI4MTI1IC0wLjk2ODc1IDEuMDE1NjI1bDQuNzUgMHptNi40Mjk2ODc1IDEuMDkzNzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTE0LjY5NTMxMjUgMS40Mzc1cTAgMC45MjE4NzUgLTAuNTE1NjI1IDEuNzk2ODc1cS0wLjUxNTYyNSAwLjg1OTM3NSAtMS41MzEyNSAxLjM3NXEtMS4wIDAuNTE1NjI1IC0yLjEwOTM3NSAwLjUxNTYyNXEtMS4wOTM3NSAwIC0yLjA5Mzc1IC0wLjVxLTEuMCAtMC41MTU2MjUgLTEuNTMxMjUgLTEuMzc1cS0wLjUxNTYyNSAtMC44NzUgLTAuNTE1NjI1IC0xLjgyODEyNXEwIC0wLjk1MzEyNSAwLjUzMTI1IC0xLjg3NXEwLjUzMTI1IC0wLjkzNzUgMS41MzEyNSAtMS40Njg3NXExLjAgLTAuNTMxMjUgMi4wNzgxMjUgLTAuNTMxMjVxMS4wOTM3NSAwIDIuMTA5Mzc1IDAuNTQ2ODc1cTEuMDE1NjI1IDAuNTQ2ODc1IDEuNTMxMjUgMS40Njg3NXEwLjUxNTYyNSAwLjkwNjI1IDAuNTE1NjI1IDEuODc1em0tMS42MDkzNzUgMC4wMTU2MjVxMCAtMC43ODEyNSAtMC41NDY4NzUgLTEuNDIxODc1cS0wLjc2NTYyNSAtMC44NzUgLTIuMCAtMC44NzVxLTEuMDc4MTI1IDAgLTEuODEyNSAwLjcwMzEyNXEtMC43MTg3NSAwLjY4NzUgLTAuNzE4NzUgMS41OTM3NXEwIDAuNzUgMC43MzQzNzUgMS40MDYyNXEwLjczNDM3NSAwLjY1NjI1IDEuNzk2ODc1IDAuNjU2MjVxMS4wNzgxMjUgMCAxLjgxMjUgLTAuNjU2MjVxMC43MzQzNzUgLTAuNjU2MjUgMC43MzQzNzUgLTEuNDA2MjV6bTguNzczNDM3NSAtMS44MTI1cS0wLjM5MDYyNSAtMC4yNSAtMC44MjgxMjUgLTAuMzU5Mzc1cS0wLjQyMTg3NSAtMC4xMjUgLTAuODkwNjI1IC0wLjEyNXEtMC45MjE4NzUgMCAtMS40Njg3NSAwLjI5Njg3NXEtMC4yNSAwLjE0MDYyNSAtMC4yNSAwLjI5Njg3NXEwIDAuMTcxODc1IDAuMzI4MTI1IDAuMzQzNzVxMC4yNSAwLjEyNSAxLjEyNSAwLjI1cTEuNTkzNzUgMC4yMTg3NSAyLjIxODc1IDAuNDM3NXEwLjgxMjUgMC4yODEyNSAxLjI1IDAuODU5Mzc1cTAuNDUzMTI1IDAuNTYyNSAwLjQ1MzEyNSAxLjIwMzEyNXEwIDAuODU5Mzc1IC0wLjc1IDEuNDM3NXEtMS4wOTM3NSAwLjg0Mzc1IC0yLjgyODEyNSAwLjg0Mzc1cS0wLjY4NzUgMCAtMS4yODEyNSAtMC4xMjVxLTAuNTkzNzUgLTAuMTI1IC0xLjA3ODEyNSAtMC4zNTkzNzVxLTAuMTI1IDAuMDkzNzUgLTAuMjY1NjI1IDAuMTU2MjVxLTAuMTI1IDAuMDQ2ODc1IC0wLjI2NTYyNSAwLjA0Njg3NXEtMC4zNzUgMCAtMC41OTM3NSAtMC4yMzQzNzVxLTAuMjE4NzUgLTAuMjUgLTAuMjE4NzUgLTAuODI4MTI1bDAgLTAuNTQ2ODc1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMjk2ODc1IDAgMC40ODQzNzUgMC4xNTYyNXEwLjIwMzEyNSAwLjE1NjI1IDAuMzEyNSAwLjU0Njg3NXEwLjM1OTM3NSAwLjMxMjUgMC44NzUgMC40ODQzNzVxMC41MTU2MjUgMC4xNTYyNSAxLjE4NzUgMC4xNTYyNXExLjEwOTM3NSAwIDEuNzE4NzUgLTAuMzQzNzVxMC4yODEyNSAtMC4xNzE4NzUgMC4yODEyNSAtMC4zNTkzNzVxMCAtMC4zMTI1IC0wLjQwNjI1IC0wLjUxNTYyNXEtMC40MjE4NzUgLTAuMjAzMTI1IC0xLjcxODc1IC0wLjM0Mzc1cS0xLjkyMTg3NSAtMC4yMDMxMjUgLTIuNTc4MTI1IC0wLjc4MTI1cS0wLjY0MDYyNSAtMC41NzgxMjUgLTAuNjQwNjI1IC0xLjQwNjI1cTAgLTAuODU5Mzc1IDAuNzE4NzUgLTEuNDM3NXEwLjk4NDM3NSAtMC43ODEyNSAyLjU3ODEyNSAtMC43ODEyNXEwLjU2MjUgMCAxLjA2MjUgMC4xMDkzNzVxMC41MTU2MjUgMC4xMDkzNzUgMC45ODQzNzUgMC4zMjgxMjVxMC4xNTYyNSAtMC4xMDkzNzUgMC4yODEyNSAtMC4xNTYyNXEwLjEyNSAtMC4wNjI1IDAuMjM0Mzc1IC0wLjA2MjVxMC4zMjgxMjUgMCAwLjU0Njg3NSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAwLjM5MDYyNXEwIDAuNTMxMjUgLTAuMTI1IDAuNzE4NzVxLTAuMjUgMC4zNTkzNzUgLTAuNjcxODc1IDAuMzU5Mzc1cS0wLjI5Njg3NSAwIC0wLjUxNTYyNSAtMC4xNzE4NzVxLTAuMjE4NzUgLTAuMTg3NSAtMC4yODEyNSAtMC40ODQzNzV6bTguNDQ1MzEyNSAtNC45MjE4NzVsMCAxLjcwMzEyNWwtMS45MDYyNSAwbDAgLTEuNzAzMTI1bDEuOTA2MjUgMHptMC4yMTg3NSAzLjA0Njg3NWwwIDUuNDg0Mzc1bDEuOTIxODc1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtNS40Mzc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS45MjE4NzUgMGwwIC0zLjg5MDYyNWwtMS4yOTY4NzUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yMzQzNzUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi44OTA2MjUgMHptMTAuMDA3ODA1IDMuNDA2MjVsMi40Mzc1IDIuMDc4MTI1cTAuNDM3NSAwLjAzMTI1IDAuNjU2MjUgMC4yNXEwLjIxODc1IDAuMjE4NzUgMC4yMTg3NSAwLjU2MjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4yODEyNSAwLjE3MTg3NSAtMC41cTAuMTg3NSAtMC4yMTg3NSAwLjQ4NDM3NSAtMC4yOTY4NzVsLTEuMTg3NSAtMS4wMzEyNWwtMS4yMTg3NDI0IDEuMDMxMjVxMC4zNTkzNjczNyAwLjA5Mzc1IDAuNTE1NjE3NCAwLjI5Njg3NXEwLjE3MTg3NSAwLjE4NzUgMC4xNzE4NzUgMC41cTAgMC4zNTkzNzUgLTAuMjUgMC41OTM3NXEtMC4yMzQzNjczNyAwLjIxODc1IC0wLjgxMjQ5MjQgMC4yMTg3NWwtMS44MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuMzI4MTI1IDAuMjE4NzUgLTAuNTQ2ODc1cTAuMjE4NzUgLTAuMjE4NzUgMC42NTYyNSAtMC4yNWwyLjM3NSAtMi4wOTM3NWwtMi4xMDkzNzUgLTEuNzk2ODc1cS0wLjQwNjI1IC0wLjAzMTI1IC0wLjYyNSAtMC4yNXEtMC4yMTg3NSAtMC4yMTg3NSAtMC4yMTg3NSAtMC41NDY4NzVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjUgMHEwLjU3ODEyNSAwIDAuODEyNDkyNCAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTYyNXEwIDAuNDY4NzUgLTAuNDM3NDkyMzcgMC43NWwwLjk2ODc0MjQgMC44MTI1bDAuOTUzMTI1IC0wLjgyODEyNXEtMC40MjE4NzUgLTAuMjk2ODc1IC0wLjQyMTg3NSAtMC43MDMxMjVxMCAtMC4zNzUgMC4yMzQzNzUgLTAuNTkzNzVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjQ4NDM3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzI4MTI1IC0wLjIxODc1IDAuNTQ2ODc1cS0wLjIxODc1IDAuMjE4NzUgLTAuNjQwNjI1IDAuMjVsLTIuMTA5Mzc1IDEuODEyNXptNy40NzY1NjI1IDAuNDM3NWwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTEuOTc2NTYyNSA0Ljg1OTM3NWwwIC0wLjM3NXEtMC42MDkzNzUgMC4zMTI1IC0xLjM0Mzc1IDAuNDY4NzVxLTAuNzE4NzUgMC4xNzE4NzUgLTEuMzEyNSAwLjE3MTg3NXEtMS4yODEyNSAwIC0yLjA5Mzc1IC0wLjY4NzVxLTAuNzk2ODc1IC0wLjY4NzUgLTAuNzk2ODc1IC0xLjUxNTYyNXEwIC0xLjAgMS4wMTU2MjUgLTEuODU5Mzc1cTEuMDMxMjUgLTAuODc1IDIuODQzNzUgLTAuODc1cTAuNzM0Mzc1IDAgMS42ODc1IDAuMTU2MjVsMCAtMC4zNzVxMCAtMC4zNTkzNzUgLTAuMzEyNSAtMC41NzgxMjVxLTAuMzEyNSAtMC4yMzQzNzUgLTEuMTcxODc1IC0wLjIzNDM3NXEtMC43MTg3NSAwIC0xLjg0Mzc1IDAuMjgxMjVxLTAuNDIxODc1IDAuMDkzNzUgLTAuNjU2MjUgMC4wOTM3NXEtMC4zMjgxMjUgMCAtMC41NDY4NzUgLTAuMjE4NzVxLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjU5Mzc1cTAgLTAuMjAzMTI1IDAuMDc4MTI1IC0wLjM0Mzc1cTAuMDc4MTI1IC0wLjE1NjI1IDAuMjE4NzUgLTAuMjVxMC4xNDA2MjUgLTAuMDkzNzUgMC41NzgxMjUgLTAuMjE4NzVxMC41OTM3NSAtMC4xNTYyNSAxLjIwMzEyNSAtMC4yNXEwLjYyNSAtMC4xMDkzNzUgMS4xMjUgLTAuMTA5Mzc1cTEuNSAwIDIuMzEyNSAwLjY1NjI1cTAuODI4MTI1IDAuNjQwNjI1IDAuODI4MTI1IDEuNzVsMCAzLjI5Njg3NWwwLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44NzUgMHptMCAtMi44NzVxLTAuOTY4NzUgLTAuMTg3NSAtMS43ODEyNSAtMC4xODc1cS0wLjk2ODc1IDAgLTEuNjcxODc1IDAuNDg0Mzc1cS0wLjQzNzUgMC4yOTY4NzUgLTAuNDM3NSAwLjYwOTM3NXEwIDAuMjM0Mzc1IDAuMjAzMTI1IDAuMzc1cTAuMzkwNjI1IDAuMjUgMS4wNzgxMjUgMC4yNXEwLjU3ODEyNSAwIDEuMjk2ODc1IC0wLjIxODc1cTAuNzM0Mzc1IC0wLjIzNDM3NSAxLjMxMjUgLTAuNjI1bDAgLTAuNjg3NXptNy43NTc4MTI1IC0yLjYyNWwwIDMuMjE4NzVxMCAwLjUxNTYyNSAwLjIxODc1IDAuNjcxODc1cTAuMzI4MTI1IDAuMjY1NjI1IDEuMTcxODc1IDAuMjY1NjI1cTEuMjE4NzUgMCAyLjI2NTYyNSAtMC41MzEyNXEwLjM5MDYyNSAtMC4yMDMxMjUgMC42MjUgLTAuMjAzMTI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMzQzNzUgMC4yMzQzNzUgMC4yMzQzNzUgMC41NzgxMjVxMCAwLjMxMjUgLTAuMjUgMC41MzEyNXEtMC4zNzUgMC4zNzUgLTEuNTE1NjI1IDAuNjg3NXEtMS4xMjUgMC4zMTI1IC0xLjg5MDYyNSAwLjMxMjVxLTEuNSAwIC0yLjI1IC0wLjY0MDYyNXEtMC43MzQzNzUgLTAuNjU2MjUgLTAuNzM0Mzc1IC0xLjU5Mzc1bDAgLTMuNTMxMjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDAuNTc4MTI1IDBsMCAtMS40NTMxMjVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4zNTkzNzUgMCAwLjU3ODEyNSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAxLjQ1MzEyNWwyLjk2ODc1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMi45Njg3NSAwem04LjM1MTU2MjUgLTQuNjQwNjI1bDAgMy40MjE4NzVxMC41IC0wLjI5Njg3NSAxLjAgLTAuNDM3NXEwLjUxNTYyNSAtMC4xNTYyNSAxLjA0Njg3NSAtMC4xNTYyNXEwLjgyODEyNSAwIDEuNDY4NzUgMC4yODEyNXEwLjY1NjI1IDAuMjgxMjUgMS4wNzgxMjUgMC44OTA2MjVxMC40MjE4NzUgMC42MDkzNzUgMC40MjE4NzUgMS41MzEyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMjAzMTI1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMi44OTA2MjVxMCAtMC42MjUgLTAuMjgxMjUgLTAuODc1cS0wLjM1OTM3NSAtMC4zMjgxMjUgLTEuMDc4MTI1IC0wLjMyODEyNXEtMC41MzEyNSAwIC0wLjk1MzEyNSAwLjIwMzEyNXEtMC40MDYyNSAwLjIwMzEyNSAtMS4wOTM3NSAwLjg5MDYyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMTg3NSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTYuOTIxODc1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJtMzM2LjAgMTQzLjQ2NDU3bDE4Ny40MzMwNCAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNCAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0zMzYuMCAxNDMuNDY0NTdsMTg3LjQzMzA0IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA0IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJtMzYxLjU3OTggMTg2LjM0MjI5bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMy45Mjk2ODc1IC0yLjIzNDM3NWwwIDUuNDg0Mzc1cTAuNTE1NjI1IDAgMC43NSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMS41MTU2MjUgMGwwIC0wLjM3NXEtMC42ODc1IDAuMzEyNSAtMS4zMTI1IDAuNDY4NzVxLTAuNjI1IDAuMTcxODc1IC0xLjE4NzUgMC4xNzE4NzVxLTAuNzk2ODc1IDAgLTEuMzc1IC0wLjMyODEyNXEtMC41NzgxMjUgLTAuMzQzNzUgLTAuOTA2MjUgLTAuOTM3NXEtMC4yNSAtMC40MjE4NzUgLTAuMjUgLTEuMDQ2ODc1bDAgLTMuNDUzMTI1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjg3NSAwbDAgNC43NjU2MjVxMCAwLjUgMC4yMzQzNzUgMC43NXEwLjI1IDAuMjM0Mzc1IDAuNzY1NjI1IDAuMjM0Mzc1cTAuNDg0Mzc1IDAgMS4wMzEyNSAtMC4xODc1cTAuNTYyNSAtMC4yMDMxMjUgMS4zOTA2MjUgLTAuNzAzMTI1bDAgLTMuMjY1NjI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjE3MTg3NSAwem01Ljg2NzE4NzUgMGwwIDEuMHExLjAxNTYyNSAtMC43MzQzNzUgMS41OTM3NSAtMC45Njg3NXEwLjU3ODEyNSAtMC4yNSAxLjA5Mzc1IC0wLjI1cTAuNzgxMjUgMCAxLjUxNTYyNSAwLjU3ODEyNXEwLjUgMC4zOTA2MjUgMC41IDAuNzk2ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU5Mzc1cS0wLjIzNDM3NSAwLjIzNDM3NSAtMC41NjI1IDAuMjM0Mzc1cS0wLjI5Njg3NSAwIC0wLjYyNSAtMC4yOTY4NzVxLTAuMzI4MTI1IC0wLjI5Njg3NSAtMC41OTM3NSAtMC4yOTY4NzVxLTAuMzI4MTI1IDAgLTEuMCAwLjQyMTg3NXEtMC42NzE4NzUgMC40MjE4NzUgLTEuNjcxODc1IDEuMjY1NjI1bDAgMi40MDYyNWwyLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtNC44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjk1MzEyNSAwbDAgLTMuODkwNjI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjE3MTg3NSAwem0xMy45NjA5Mzc1IDQuMzU5Mzc1bC02LjU3ODEyNSAwcTAuMjUgMC42MjUgMC44OTA2MjUgMS4wMTU2MjVxMC42NDA2MjUgMC4zNzUgMS43MTg3NSAwLjM3NXEwLjg5MDYyNSAwIDIuMzc1IC0wLjM5MDYyNXEwLjYwOTM3NSAtMC4xNTYyNSAwLjg0Mzc1IC0wLjE1NjI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMTg3NSAwLjIxODc1IDAuMjE4NzUgMC41NjI1cTAgMC4zMTI1IC0wLjIzNDM3NSAwLjUzMTI1cS0wLjMxMjUgMC4yOTY4NzUgLTEuNTMxMjUgMC41NjI1cS0xLjIwMzEyNSAwLjI2NTYyNSAtMi4zMTI1IDAuMjY1NjI1cS0xLjkyMTg3NSAwIC0zLjA3ODEyNSAtMS4wOTM3NXEtMS4xNTYyNSAtMS4wOTM3NSAtMS4xNTYyNSAtMi42NzE4NzVxMCAtMS42ODc1IDEuMjUgLTIuNzVxMS4yNSAtMS4wNjI1IDIuODc1IC0xLjA2MjVxMC45Njg3NSAwIDEuNzgxMjUgMC4zNDM3NXEwLjgyODEyNSAwLjM0Mzc1IDEuMjE4NzUgMC43NXEwLjU2MjUgMC41NzgxMjUgMC45Mzc1IDEuNDIxODc1cTAuMjUgMC41OTM3NSAwLjI1IDEuMzc1bDAgMC42ODc1em0tMS43ODEyNSAtMS42MDkzNzVxLTAuMzU5Mzc1IC0wLjY4NzUgLTAuOTUzMTI1IC0xLjAxNTYyNXEtMC41OTM3NSAtMC4zNDM3NSAtMS40MjE4NzUgLTAuMzQzNzVxLTAuODEyNSAwIC0xLjQwNjI1IDAuMzQzNzVxLTAuNTkzNzUgMC4zMjgxMjUgLTAuOTY4NzUgMS4wMTU2MjVsNC43NSAwem03LjM2NzE4NzUgLTAuMjAzMTI1bC0xLjQ4NDM3NSA0LjU0Njg3NWwtMS43OTY4NzUgMGwtMC45NTMxMjUgLTcuODc1cS0wLjM3NSAtMC4wNDY4NzUgLTAuNTYyNSAtMC4yNXEtMC4xODc1IC0wLjIwMzEyNSAtMC4xODc1IC0wLjUzMTI1cTAgLTAuMzc1IDAuMjUgLTAuNTkzNzVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDIuMTI1IDAuMDE1NjI1cTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTAuODI4MTI1IDBsMC41MzEyNSA0LjQ4NDM3NWwxLjI1IC0zLjczNDM3NWwxLjY3MTg3NSAwbDEuMjUgMy43MzQzNzVsMC41MzEyNSAtNC40ODQzNzVsLTAuODQzNzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjIzNDM3NSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yMzQzNzUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwyLjEyNSAwLjAxNTYyNXEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjI5Njg3NSAtMC4yMDMxMjUgMC41MTU2MjVxLTAuMTg3NSAwLjIxODc1IC0wLjU2MjUgMC4yODEyNWwtMC45MjE4NzUgNy44NzVsLTEuNzY1NjI1IDBsLTEuNTMxMjUgLTQuNTQ2ODc1em0xMC4xNjQwNjI1IC01LjU5Mzc1bDAgMS43MDMxMjVsLTEuOTA2MjUgMGwwIC0xLjcwMzEyNWwxLjkwNjI1IDB6bTAuMjE4NzUgMy4wNDY4NzVsMCA1LjQ4NDM3NWwxLjkyMTg3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTUuNDM3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuOTIxODc1IDBsMCAtMy44OTA2MjVsLTEuMjk2ODc1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuODkwNjI1IDB6bTcuMTk1MzEyNSAwbDAgMC41MzEyNXEwLjQzNzUgLTAuMzc1IDAuOTUzMTI1IC0wLjU2MjVxMC41MzEyNSAtMC4xODc1IDEuMTU2MjUgLTAuMTg3NXExLjQyMTg3NSAwIDIuMjUgMC44OTA2MjVxMC42NTYyNSAwLjcwMzEyNSAwLjY1NjI1IDEuODQzNzVsMCAyLjk2ODc1cTAuNSAwIDAuNzM0Mzc1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuNDUzMTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yMzQzNzUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjc1IC0wLjIzNDM3NWwwIC0zLjAxNTYyNXEwIC0wLjUzMTI1IC0wLjI4MTI1IC0wLjc2NTYyNXEtMC4zNTkzNzUgLTAuMzEyNSAtMS4wOTM3NSAtMC4zMTI1cS0wLjU2MjUgMCAtMC45ODQzNzUgMC4yMTg3NXEtMC40MDYyNSAwLjIwMzEyNSAtMS4wNDY4NzUgMC45MDYyNWwwIDIuOTY4NzVxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0zLjg5MDYyNXEtMC41IDAgLTAuNzUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNTMxMjUgMHptMTQuODk4NDM3NSAtMy4wNDY4NzVsMCA4LjUzMTI1bDAuMjY1NjI1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMS44NzUgMGwwIC0wLjM5MDYyNXEtMC41NDY4NzUgMC4zMTI1IC0xLjE0MDYyNSAwLjQ4NDM3NXEtMC41OTM3NSAwLjE3MTg3NSAtMS4yMzQzNzUgMC4xNzE4NzVxLTEuODEyNSAwIC0yLjkyMTg3NSAtMS4wNDY4NzVxLTEuMDkzNzUgLTEuMDQ2ODc1IC0xLjA5Mzc1IC0yLjYwOTM3NXEwIC0xLjYyNSAxLjE1NjI1IC0yLjc2NTYyNXExLjE1NjI1IC0xLjE1NjI1IDIuODI4MTI1IC0xLjE1NjI1cTAuNjI1IDAgMS4yMTg3NSAwLjIwMzEyNXEwLjYwOTM3NSAwLjE4NzUgMS4xODc1IDAuNTYyNWwwIC0xLjk4NDM3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHptLTEuNjA5Mzc1IDYuNzk2ODc1cTAgLTAuOTg0Mzc1IC0wLjcwMzEyNSAtMS42NzE4NzVxLTAuNjg3NSAtMC42ODc1IC0xLjY4NzUgLTAuNjg3NXEtMS4wIDAgLTEuNzAzMTI1IDAuNjg3NXEtMC42ODc1IDAuNjg3NSAtMC42ODc1IDEuNjU2MjVxMCAwLjg3NSAwLjYyNSAxLjQ1MzEyNXEwLjYyNSAwLjU2MjUgMS43NjU2MjUgMC41NjI1cTEuMTI1IDAgMS43NSAtMC41NjI1cTAuNjQwNjI1IC0wLjU3ODEyNSAwLjY0MDYyNSAtMS40Mzc1em0xMS42OTUzMTI1IC0wLjA3ODEyNXEwIDAuOTIxODc1IC0wLjUxNTYyNSAxLjc5Njg3NXEtMC41MTU2MjUgMC44NTkzNzUgLTEuNTMxMjUgMS4zNzVxLTEuMCAwLjUxNTYyNSAtMi4xMDkzNzUgMC41MTU2MjVxLTEuMDkzNzUgMCAtMi4wOTM3NSAtMC41cS0xLjAgLTAuNTE1NjI1IC0xLjUzMTI1IC0xLjM3NXEtMC41MTU2MjUgLTAuODc1IC0wLjUxNTYyNSAtMS44MjgxMjVxMCAtMC45NTMxMjUgMC41MzEyNSAtMS44NzVxMC41MzEyNSAtMC45Mzc1IDEuNTMxMjUgLTEuNDY4NzVxMS4wIC0wLjUzMTI1IDIuMDc4MTI1IC0wLjUzMTI1cTEuMDkzNzUgMCAyLjEwOTM3NSAwLjU0Njg3NXExLjAxNTYyNSAwLjU0Njg3NSAxLjUzMTI1IDEuNDY4NzVxMC41MTU2MjUgMC45MDYyNSAwLjUxNTYyNSAxLjg3NXptLTEuNjA5Mzc1IDAuMDE1NjI1cTAgLTAuNzgxMjUgLTAuNTQ2ODc1IC0xLjQyMTg3NXEtMC43NjU2MjUgLTAuODc1IC0yLjAgLTAuODc1cS0xLjA3ODEyNSAwIC0xLjgxMjUgMC43MDMxMjVxLTAuNzE4NzUgMC42ODc1IC0wLjcxODc1IDEuNTkzNzVxMCAwLjc1IDAuNzM0Mzc1IDEuNDA2MjVxMC43MzQzNzUgMC42NTYyNSAxLjc5Njg3NSAwLjY1NjI1cTEuMDc4MTI1IDAgMS44MTI1IC0wLjY1NjI1cTAuNzM0Mzc1IC0wLjY1NjI1IDAuNzM0Mzc1IC0xLjQwNjI1em03LjA1NDY4NzUgMC40NTMxMjVsLTEuMTA5Mzc1IDIuOTUzMTI1bC0xLjUgMGwtMS4zNDM3NSAtNS41cS0wLjQzNzUgLTAuMDE1NjI1IC0wLjY3MTg3NSAtMC4yMzQzNzVxLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjU2MjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjQ4NDM3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI4MTI1IDAuNjA5Mzc1cS0wLjIxODc1IDAuMTg3NSAtMC44MjgxMjUgMC4xODc1bDAuNjA5Mzc1IDIuNTQ2ODc1bDAuOTg0Mzc1IC0yLjYwOTM3NWwxLjQyMTg3NSAwbDEuMCAyLjYwOTM3NWwwLjYyNSAtMi41NDY4NzVxLTAuNTkzNzUgMCAtMC43ODEyNSAtMC4xMDkzNzVxLTAuMzc1IC0wLjI1IC0wLjM3NSAtMC42ODc1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS41IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zMjgxMjUgLTAuMjE4NzUgMC41NDY4NzVxLTAuMjE4NzUgMC4yMTg3NSAtMC42NDA2MjUgMC4yNWwtMS4zMTI1IDUuNWwtMS40ODQzNzUgMGwtMS4xNzE4NzUgLTIuOTUzMTI1em0xMS4zMjAzMTI1IC0yLjI2NTYyNXEtMC4zOTA2MjUgLTAuMjUgLTAuODI4MTI1IC0wLjM1OTM3NXEtMC40MjE4NzUgLTAuMTI1IC0wLjg5MDYyNSAtMC4xMjVxLTAuOTIxODc1IDAgLTEuNDY4NzUgMC4yOTY4NzVxLTAuMjUgMC4xNDA2MjUgLTAuMjUgMC4yOTY4NzVxMCAwLjE3MTg3NSAwLjMyODEyNSAwLjM0Mzc1cTAuMjUgMC4xMjUgMS4xMjUgMC4yNXExLjU5Mzc1IDAuMjE4NzUgMi4yMTg3NSAwLjQzNzVxMC44MTI1IDAuMjgxMjUgMS4yNSAwLjg1OTM3NXEwLjQ1MzEyNSAwLjU2MjUgMC40NTMxMjUgMS4yMDMxMjVxMCAwLjg1OTM3NSAtMC43NSAxLjQzNzVxLTEuMDkzNzUgMC44NDM3NSAtMi44MjgxMjUgMC44NDM3NXEtMC42ODc1IDAgLTEuMjgxMjUgLTAuMTI1cS0wLjU5Mzc1IC0wLjEyNSAtMS4wNzgxMjUgLTAuMzU5Mzc1cS0wLjEyNSAwLjA5Mzc1IC0wLjI2NTYyNSAwLjE1NjI1cS0wLjEyNSAwLjA0Njg3NSAtMC4yNjU2MjUgMC4wNDY4NzVxLTAuMzc1IDAgLTAuNTkzNzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjI1IC0wLjIxODc1IC0wLjgyODEyNWwwIC0wLjU0Njg3NXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjI5Njg3NSAwIDAuNDg0Mzc1IDAuMTU2MjVxMC4yMDMxMjUgMC4xNTYyNSAwLjMxMjUgMC41NDY4NzVxMC4zNTkzNzUgMC4zMTI1IDAuODc1IDAuNDg0Mzc1cTAuNTE1NjI1IDAuMTU2MjUgMS4xODc1IDAuMTU2MjVxMS4xMDkzNzUgMCAxLjcxODc1IC0wLjM0Mzc1cTAuMjgxMjUgLTAuMTcxODc1IDAuMjgxMjUgLTAuMzU5Mzc1cTAgLTAuMzEyNSAtMC40MDYyNSAtMC41MTU2MjVxLTAuNDIxODc1IC0wLjIwMzEyNSAtMS43MTg3NSAtMC4zNDM3NXEtMS45MjE4NzUgLTAuMjAzMTI1IC0yLjU3ODEyNSAtMC43ODEyNXEtMC42NDA2MjUgLTAuNTc4MTI1IC0wLjY0MDYyNSAtMS40MDYyNXEwIC0wLjg1OTM3NSAwLjcxODc1IC0xLjQzNzVxMC45ODQzNzUgLTAuNzgxMjUgMi41NzgxMjUgLTAuNzgxMjVxMC41NjI1IDAgMS4wNjI1IDAuMTA5Mzc1cTAuNTE1NjI1IDAuMTA5Mzc1IDAuOTg0Mzc1IDAuMzI4MTI1cTAuMTU2MjUgLTAuMTA5Mzc1IDAuMjgxMjUgLTAuMTU2MjVxMC4xMjUgLTAuMDYyNSAwLjIzNDM3NSAtMC4wNjI1cTAuMzI4MTI1IDAgMC41NDY4NzUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMC4zOTA2MjVxMCAwLjUzMTI1IC0wLjEyNSAwLjcxODc1cS0wLjI1IDAuMzU5Mzc1IC0wLjY3MTg3NSAwLjM1OTM3NXEtMC4yOTY4NzUgMCAtMC41MTU2MjUgLTAuMTcxODc1cS0wLjIxODc1IC0wLjE4NzUgLTAuMjgxMjUgLTAuNDg0Mzc1em02Ljk0NTMxMjUgMS45Njg3NWwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTEuOTc2NTYyNSA0Ljg1OTM3NWwwIC0wLjM3NXEtMC42MDkzNzUgMC4zMTI1IC0xLjM0Mzc1IDAuNDY4NzVxLTAuNzE4NzUgMC4xNzE4NzUgLTEuMzEyNSAwLjE3MTg3NXEtMS4yODEyNSAwIC0yLjA5Mzc1IC0wLjY4NzVxLTAuNzk2ODc1IC0wLjY4NzUgLTAuNzk2ODc1IC0xLjUxNTYyNXEwIC0xLjAgMS4wMTU2MjUgLTEuODU5Mzc1cTEuMDMxMjUgLTAuODc1IDIuODQzNzUgLTAuODc1cTAuNzM0Mzc1IDAgMS42ODc1IDAuMTU2MjVsMCAtMC4zNzVxMCAtMC4zNTkzNzUgLTAuMzEyNSAtMC41NzgxMjVxLTAuMzEyNSAtMC4yMzQzNzUgLTEuMTcxODc1IC0wLjIzNDM3NXEtMC43MTg3NSAwIC0xLjg0Mzc1IDAuMjgxMjVxLTAuNDIxODc1IDAuMDkzNzUgLTAuNjU2MjUgMC4wOTM3NXEtMC4zMjgxMjUgMCAtMC41NDY4NzUgLTAuMjE4NzVxLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjU5Mzc1cTAgLTAuMjAzMTI1IDAuMDc4MTI1IC0wLjM0Mzc1cTAuMDc4MTI1IC0wLjE1NjI1IDAuMjE4NzUgLTAuMjVxMC4xNDA2MjUgLTAuMDkzNzUgMC41NzgxMjUgLTAuMjE4NzVxMC41OTM3NSAtMC4xNTYyNSAxLjIwMzEyNSAtMC4yNXEwLjYyNSAtMC4xMDkzNzUgMS4xMjUgLTAuMTA5Mzc1cTEuNSAwIDIuMzEyNSAwLjY1NjI1cTAuODI4MTI1IDAuNjQwNjI1IDAuODI4MTI1IDEuNzVsMCAzLjI5Njg3NWwwLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44NzUgMHptMCAtMi44NzVxLTAuOTY4NzUgLTAuMTg3NSAtMS43ODEyNSAtMC4xODc1cS0wLjk2ODc1IDAgLTEuNjcxODc1IDAuNDg0Mzc1cS0wLjQzNzUgMC4yOTY4NzUgLTAuNDM3NSAwLjYwOTM3NXEwIDAuMjM0Mzc1IDAuMjAzMTI1IDAuMzc1cTAuMzkwNjI1IDAuMjUgMS4wNzgxMjUgMC4yNXEwLjU3ODEyNSAwIDEuMjk2ODc1IC0wLjIxODc1cTAuNzM0Mzc1IC0wLjIzNDM3NSAxLjMxMjUgLTAuNjI1bDAgLTAuNjg3NXptNy43NTc4MTI1IC0yLjYyNWwwIDMuMjE4NzVxMCAwLjUxNTYyNSAwLjIxODc1IDAuNjcxODc1cTAuMzI4MTI1IDAuMjY1NjI1IDEuMTcxODc1IDAuMjY1NjI1cTEuMjE4NzUgMCAyLjI2NTYyNSAtMC41MzEyNXEwLjM5MDYyNSAtMC4yMDMxMjUgMC42MjUgLTAuMjAzMTI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMzQzNzUgMC4yMzQzNzUgMC4yMzQzNzUgMC41NzgxMjVxMCAwLjMxMjUgLTAuMjUgMC41MzEyNXEtMC4zNzUgMC4zNzUgLTEuNTE1NjI1IDAuNjg3NXEtMS4xMjUgMC4zMTI1IC0xLjg5MDYyNSAwLjMxMjVxLTEuNSAwIC0yLjI1IC0wLjY0MDYyNXEtMC43MzQzNzUgLTAuNjU2MjUgLTAuNzM0Mzc1IC0xLjU5Mzc1bDAgLTMuNTMxMjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDAuNTc4MTI1IDBsMCAtMS40NTMxMjVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4zNTkzNzUgMCAwLjU3ODEyNSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAxLjQ1MzEyNWwyLjk2ODc1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMi45Njg3NSAwem04LjM1MTU2MjUgLTQuNjQwNjI1bDAgMy40MjE4NzVxMC41IC0wLjI5Njg3NSAxLjAgLTAuNDM3NXEwLjUxNTYyNSAtMC4xNTYyNSAxLjA0Njg3NSAtMC4xNTYyNXEwLjgyODEyNSAwIDEuNDY4NzUgMC4yODEyNXEwLjY1NjI1IDAuMjgxMjUgMS4wNzgxMjUgMC44OTA2MjVxMC40MjE4NzUgMC42MDkzNzUgMC40MjE4NzUgMS41MzEyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMjAzMTI1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMi44OTA2MjVxMCAtMC42MjUgLTAuMjgxMjUgLTAuODc1cS0wLjM1OTM3NSAtMC4zMjgxMjUgLTEuMDc4MTI1IC0wLjMyODEyNXEtMC41MzEyNSAwIC0wLjk1MzEyNSAwLjIwMzEyNXEtMC40MDYyNSAwLjIwMzEyNSAtMS4wOTM3NSAwLjg5MDYyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMTg3NSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTYuOTIxODc1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJtMTc2LjAgMjcxLjQ2NDU3bDE4Ny40MzMwNyAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNyAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNzYuMCAyNzEuNDY0NTdsMTg3LjQzMzA3IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA3IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJtMjU0LjM4ODQgMzE0LjM0MjNsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU2MjUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjUgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc1IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NSAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjUgLTAuMTA5Mzc1IDEuMTI1IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NSAwIC0xLjY3MTg3NSAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMjUgMCAxLjI5Njg3NSAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0ibTE2LjAgNDAwLjBsMTg3LjQzMzA2IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA2IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTE2LjAgNDAwLjBsMTg3LjQzMzA2IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA2IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJtNzAuMzg0NSA0NDIuODc3NzJsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTE0LjY5NTMxMjUgMS40Mzc1cTAgMC45MjE4NzUgLTAuNTE1NjI1IDEuNzk2ODc1cS0wLjUxNTYyNSAwLjg1OTM3NSAtMS41MzEyNSAxLjM3NXEtMS4wIDAuNTE1NjI1IC0yLjEwOTM3NSAwLjUxNTYyNXEtMS4wOTM3NSAwIC0yLjA5Mzc1IC0wLjVxLTEuMCAtMC41MTU2MjUgLTEuNTMxMjUgLTEuMzc1cS0wLjUxNTYyNSAtMC44NzUgLTAuNTE1NjI1IC0xLjgyODEyNXEwIC0wLjk1MzEyNSAwLjUzMTI1IC0xLjg3NXEwLjUzMTI1IC0wLjkzNzUgMS41MzEyNSAtMS40Njg3NXExLjAgLTAuNTMxMjUgMi4wNzgxMjUgLTAuNTMxMjVxMS4wOTM3NSAwIDIuMTA5Mzc1IDAuNTQ2ODc1cTEuMDE1NjI1IDAuNTQ2ODc1IDEuNTMxMjUgMS40Njg3NXEwLjUxNTYyNSAwLjkwNjI1IDAuNTE1NjI1IDEuODc1em0tMS42MDkzNzUgMC4wMTU2MjVxMCAtMC43ODEyNSAtMC41NDY4NzUgLTEuNDIxODc1cS0wLjc2NTYyNSAtMC44NzUgLTIuMCAtMC44NzVxLTEuMDc4MTI1IDAgLTEuODEyNSAwLjcwMzEyNXEtMC43MTg3NSAwLjY4NzUgLTAuNzE4NzUgMS41OTM3NXEwIDAuNzUgMC43MzQzNzUgMS40MDYyNXEwLjczNDM3NSAwLjY1NjI1IDEuNzk2ODc1IDAuNjU2MjVxMS4wNzgxMjUgMCAxLjgxMjUgLTAuNjU2MjVxMC43MzQzNzUgLTAuNjU2MjUgMC43MzQzNzUgLTEuNDA2MjV6bTguNzczNDM3NSAtMS44MTI1cS0wLjM5MDYyNSAtMC4yNSAtMC44MjgxMjUgLTAuMzU5Mzc1cS0wLjQyMTg3NSAtMC4xMjUgLTAuODkwNjI1IC0wLjEyNXEtMC45MjE4NzUgMCAtMS40Njg3NSAwLjI5Njg3NXEtMC4yNSAwLjE0MDYyNSAtMC4yNSAwLjI5Njg3NXEwIDAuMTcxODc1IDAuMzI4MTI1IDAuMzQzNzVxMC4yNSAwLjEyNSAxLjEyNSAwLjI1cTEuNTkzNzUgMC4yMTg3NSAyLjIxODc1IDAuNDM3NXEwLjgxMjUgMC4yODEyNSAxLjI1IDAuODU5Mzc1cTAuNDUzMTI1IDAuNTYyNSAwLjQ1MzEyNSAxLjIwMzEyNXEwIDAuODU5Mzc1IC0wLjc1IDEuNDM3NXEtMS4wOTM3NSAwLjg0Mzc1IC0yLjgyODEyNSAwLjg0Mzc1cS0wLjY4NzUgMCAtMS4yODEyNSAtMC4xMjVxLTAuNTkzNzUgLTAuMTI1IC0xLjA3ODEyNSAtMC4zNTkzNzVxLTAuMTI1IDAuMDkzNzUgLTAuMjY1NjI1IDAuMTU2MjVxLTAuMTI1IDAuMDQ2ODc1IC0wLjI2NTYyNSAwLjA0Njg3NXEtMC4zNzUgMCAtMC41OTM3NSAtMC4yMzQzNzVxLTAuMjE4NzUgLTAuMjUgLTAuMjE4NzUgLTAuODI4MTI1bDAgLTAuNTQ2ODc1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMjk2ODc1IDAgMC40ODQzNzUgMC4xNTYyNXEwLjIwMzEyNSAwLjE1NjI1IDAuMzEyNSAwLjU0Njg3NXEwLjM1OTM3NSAwLjMxMjUgMC44NzUgMC40ODQzNzVxMC41MTU2MjUgMC4xNTYyNSAxLjE4NzUgMC4xNTYyNXExLjEwOTM3NSAwIDEuNzE4NzUgLTAuMzQzNzVxMC4yODEyNSAtMC4xNzE4NzUgMC4yODEyNSAtMC4zNTkzNzVxMCAtMC4zMTI1IC0wLjQwNjI1IC0wLjUxNTYyNXEtMC40MjE4NzUgLTAuMjAzMTI1IC0xLjcxODc1IC0wLjM0Mzc1cS0xLjkyMTg3NSAtMC4yMDMxMjUgLTIuNTc4MTI1IC0wLjc4MTI1cS0wLjY0MDYyNSAtMC41NzgxMjUgLTAuNjQwNjI1IC0xLjQwNjI1cTAgLTAuODU5Mzc1IDAuNzE4NzUgLTEuNDM3NXEwLjk4NDM3NSAtMC43ODEyNSAyLjU3ODEyNSAtMC43ODEyNXEwLjU2MjUgMCAxLjA2MjUgMC4xMDkzNzVxMC41MTU2MjUgMC4xMDkzNzUgMC45ODQzNzUgMC4zMjgxMjVxMC4xNTYyNSAtMC4xMDkzNzUgMC4yODEyNSAtMC4xNTYyNXEwLjEyNSAtMC4wNjI1IDAuMjM0Mzc1IC0wLjA2MjVxMC4zMjgxMjUgMCAwLjU0Njg3NSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAwLjM5MDYyNXEwIDAuNTMxMjUgLTAuMTI1IDAuNzE4NzVxLTAuMjUgMC4zNTkzNzUgLTAuNjcxODc1IDAuMzU5Mzc1cS0wLjI5Njg3NSAwIC0wLjUxNTYyNSAtMC4xNzE4NzVxLTAuMjE4NzUgLTAuMTg3NSAtMC4yODEyNSAtMC40ODQzNzV6bTguNDQ1MzEyNSAtNC45MjE4NzVsMCAxLjcwMzEyNWwtMS45MDYyNSAwbDAgLTEuNzAzMTI1bDEuOTA2MjUgMHptMC4yMTg3NSAzLjA0Njg3NWwwIDUuNDg0Mzc1bDEuOTIxODc1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtNS40Mzc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS45MjE4NzUgMGwwIC0zLjg5MDYyNWwtMS4yOTY4NzUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yMzQzNzUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi44OTA2MjUgMHptMTAuMDA3ODEyNSAzLjQwNjI1bDIuNDM3NSAyLjA3ODEyNXEwLjQzNzUgMC4wMzEyNSAwLjY1NjI1IDAuMjVxMC4yMTg3NSAwLjIxODc1IDAuMjE4NzUgMC41NjI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMjgxMjUgMC4xNzE4NzUgLTAuNXEwLjE4NzUgLTAuMjE4NzUgMC40ODQzNzUgLTAuMjk2ODc1bC0xLjE4NzUgLTEuMDMxMjVsLTEuMjE4NzUgMS4wMzEyNXEwLjM1OTM3NSAwLjA5Mzc1IDAuNTE1NjI1IDAuMjk2ODc1cTAuMTcxODc1IDAuMTg3NSAwLjE3MTg3NSAwLjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU5Mzc1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuMzI4MTI1IDAuMjE4NzUgLTAuNTQ2ODc1cTAuMjE4NzUgLTAuMjE4NzUgMC42NTYyNSAtMC4yNWwyLjM3NSAtMi4wOTM3NWwtMi4xMDkzNzUgLTEuNzk2ODc1cS0wLjQwNjI1IC0wLjAzMTI1IC0wLjYyNSAtMC4yNXEtMC4yMTg3NSAtMC4yMTg3NSAtMC4yMTg3NSAtMC41NDY4NzVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTYyNXEwIDAuNDY4NzUgLTAuNDM3NSAwLjc1bDAuOTY4NzUgMC44MTI1bDAuOTUzMTI1IC0wLjgyODEyNXEtMC40MjE4NzUgLTAuMjk2ODc1IC0wLjQyMTg3NSAtMC43MDMxMjVxMCAtMC4zNzUgMC4yMzQzNzUgLTAuNTkzNzVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjQ4NDM3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzI4MTI1IC0wLjIxODc1IDAuNTQ2ODc1cS0wLjIxODc1IDAuMjE4NzUgLTAuNjQwNjI1IDAuMjVsLTIuMTA5Mzc1IDEuODEyNXptNy40NzY1NjI1IDAuNDM3NWwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTEuOTc2NTU1IDQuODU5Mzc1bDAgLTAuMzc1cS0wLjYwOTM3NSAwLjMxMjUgLTEuMzQzNzUgMC40Njg3NXEtMC43MTg3NSAwLjE3MTg3NSAtMS4zMTI0OTI0IDAuMTcxODc1cS0xLjI4MTI1IDAgLTIuMDkzNzUgLTAuNjg3NXEtMC43OTY4NzUgLTAuNjg3NSAtMC43OTY4NzUgLTEuNTE1NjI1cTAgLTEuMCAxLjAxNTYyNSAtMS44NTkzNzVxMS4wMzEyNSAtMC44NzUgMi44NDM3NDI0IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NDI0IDAuMjgxMjVxLTAuNDIxODc1IDAuMDkzNzUgLTAuNjU2MjUgMC4wOTM3NXEtMC4zMjgxMjUgMCAtMC41NDY4NzUgLTAuMjE4NzVxLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjU5Mzc1cTAgLTAuMjAzMTI1IDAuMDc4MTI1IC0wLjM0Mzc1cTAuMDc4MTI1IC0wLjE1NjI1IDAuMjE4NzUgLTAuMjVxMC4xNDA2MjUgLTAuMDkzNzUgMC41NzgxMjUgLTAuMjE4NzVxMC41OTM3NSAtMC4xNTYyNSAxLjIwMzEyNSAtMC4yNXEwLjYyNDk5MjQgLTAuMTA5Mzc1IDEuMTI0OTkyNCAtMC4xMDkzNzVxMS41IDAgMi4zMTI1IDAuNjU2MjVxMC44MjgxMjUgMC42NDA2MjUgMC44MjgxMjUgMS43NWwwIDMuMjk2ODc1bDAuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjg3NSAwem0wIC0yLjg3NXEtMC45Njg3NSAtMC4xODc1IC0xLjc4MTI1IC0wLjE4NzVxLTAuOTY4NzQyNCAwIC0xLjY3MTg2NzQgMC40ODQzNzVxLTAuNDM3NSAwLjI5Njg3NSAtMC40Mzc1IDAuNjA5Mzc1cTAgMC4yMzQzNzUgMC4yMDMxMjUgMC4zNzVxMC4zOTA2MjUgMC4yNSAxLjA3ODEyNSAwLjI1cTAuNTc4MTE3NCAwIDEuMjk2ODY3NCAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0ibTMzNi4wIDQwMC4wbDE4Ny40MzMwNCAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNCAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0zMzYuMCA0MDAuMGwxODcuNDMzMDQgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDQgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Im0zODEuNzIwNDMgNDQxLjU4MDg0bC0xLjQ4NDM3NSA0LjU0Njg3NWwtMS43OTY4NzUgMGwtMC45NTMxMjUgLTcuODc1cS0wLjM3NSAtMC4wNDY4NzUgLTAuNTYyNSAtMC4yNXEtMC4xODc1IC0wLjIwMzEyNSAtMC4xODc1IC0wLjUzMTI1cTAgLTAuMzc1IDAuMjUgLTAuNTkzNzVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDIuMTI1IDAuMDE1NjI1cTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTAuODI4MTI1IDBsMC41MzEyNSA0LjQ4NDM3NWwxLjI1IC0zLjczNDM3NWwxLjY3MTg3NSAwbDEuMjUgMy43MzQzNzVsMC41MzEyNSAtNC40ODQzNzVsLTAuODQzNzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjIzNDM3NSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yMzQzNzUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwyLjEyNSAwLjAxNTYyNXEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjI5Njg3NSAtMC4yMDMxMjUgMC41MTU2MjVxLTAuMTg3NSAwLjIxODc1IC0wLjU2MjUgMC4yODEyNWwtMC45MjE4NzUgNy44NzVsLTEuNzY1NjI1IDBsLTEuNTMxMjUgLTQuNTQ2ODc1em0xMC4xNjQwNjI1IC01LjU5Mzc1bDAgMS43MDMxMjVsLTEuOTA2MjUgMGwwIC0xLjcwMzEyNWwxLjkwNjI1IDB6bTAuMjE4NzUgMy4wNDY4NzVsMCA1LjQ4NDM3NWwxLjkyMTg3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTUuNDM3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuOTIxODc1IDBsMCAtMy44OTA2MjVsLTEuMjk2ODc1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuODkwNjI1IDB6bTcuMTk1MzEyNSAwbDAgMC41MzEyNXEwLjQzNzUgLTAuMzc1IDAuOTUzMTI1IC0wLjU2MjVxMC41MzEyNSAtMC4xODc1IDEuMTU2MjUgLTAuMTg3NXExLjQyMTg3NSAwIDIuMjUgMC44OTA2MjVxMC42NTYyNSAwLjcwMzEyNSAwLjY1NjI1IDEuODQzNzVsMCAyLjk2ODc1cTAuNSAwIDAuNzM0Mzc1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuNDUzMTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yMzQzNzUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjc1IC0wLjIzNDM3NWwwIC0zLjAxNTYyNXEwIC0wLjUzMTI1IC0wLjI4MTI1IC0wLjc2NTYyNXEtMC4zNTkzNzUgLTAuMzEyNSAtMS4wOTM3NSAtMC4zMTI1cS0wLjU2MjUgMCAtMC45ODQzNzUgMC4yMTg3NXEtMC40MDYyNSAwLjIwMzEyNSAtMS4wNDY4NzUgMC45MDYyNWwwIDIuOTY4NzVxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0zLjg5MDYyNXEtMC41IDAgLTAuNzUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNTMxMjUgMHptMTQuODk4NDM3NSAtMy4wNDY4NzVsMCA4LjUzMTI1bDAuMjY1NjI1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMS44NzUgMGwwIC0wLjM5MDYyNXEtMC41NDY4NzUgMC4zMTI1IC0xLjE0MDYyNSAwLjQ4NDM3NXEtMC41OTM3NSAwLjE3MTg3NSAtMS4yMzQzNzUgMC4xNzE4NzVxLTEuODEyNSAwIC0yLjkyMTg3NSAtMS4wNDY4NzVxLTEuMDkzNzUgLTEuMDQ2ODc1IC0xLjA5Mzc1IC0yLjYwOTM3NXEwIC0xLjYyNSAxLjE1NjI1IC0yLjc2NTYyNXExLjE1NjI1IC0xLjE1NjI1IDIuODI4MTI1IC0xLjE1NjI1cTAuNjI1IDAgMS4yMTg3NSAwLjIwMzEyNXEwLjYwOTM3NSAwLjE4NzUgMS4xODc1IDAuNTYyNWwwIC0xLjk4NDM3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHptLTEuNjA5Mzc1IDYuNzk2ODc1cTAgLTAuOTg0Mzc1IC0wLjcwMzEyNSAtMS42NzE4NzVxLTAuNjg3NSAtMC42ODc1IC0xLjY4NzUgLTAuNjg3NXEtMS4wIDAgLTEuNzAzMTI1IDAuNjg3NXEtMC42ODc1IDAuNjg3NSAtMC42ODc1IDEuNjU2MjVxMCAwLjg3NSAwLjYyNSAxLjQ1MzEyNXEwLjYyNSAwLjU2MjUgMS43NjU2MjUgMC41NjI1cTEuMTI1IDAgMS43NSAtMC41NjI1cTAuNjQwNjI1IC0wLjU3ODEyNSAwLjY0MDYyNSAtMS40Mzc1em0xMS42OTUzMTI1IC0wLjA3ODEyNXEwIDAuOTIxODc1IC0wLjUxNTYyNSAxLjc5Njg3NXEtMC41MTU2MjUgMC44NTkzNzUgLTEuNTMxMjUgMS4zNzVxLTEuMCAwLjUxNTYyNSAtMi4xMDkzNzUgMC41MTU2MjVxLTEuMDkzNzUgMCAtMi4wOTM3NSAtMC41cS0xLjAgLTAuNTE1NjI1IC0xLjUzMTI1IC0xLjM3NXEtMC41MTU2MjUgLTAuODc1IC0wLjUxNTYyNSAtMS44MjgxMjVxMCAtMC45NTMxMjUgMC41MzEyNSAtMS44NzVxMC41MzEyNSAtMC45Mzc1IDEuNTMxMjUgLTEuNDY4NzVxMS4wIC0wLjUzMTI1IDIuMDc4MTI1IC0wLjUzMTI1cTEuMDkzNzUgMCAyLjEwOTM3NSAwLjU0Njg3NXExLjAxNTYyNSAwLjU0Njg3NSAxLjUzMTI1IDEuNDY4NzVxMC41MTU2MjUgMC45MDYyNSAwLjUxNTYyNSAxLjg3NXptLTEuNjA5Mzc1IDAuMDE1NjI1cTAgLTAuNzgxMjUgLTAuNTQ2ODc1IC0xLjQyMTg3NXEtMC43NjU2MjUgLTAuODc1IC0yLjAgLTAuODc1cS0xLjA3ODEyNSAwIC0xLjgxMjUgMC43MDMxMjVxLTAuNzE4NzUgMC42ODc1IC0wLjcxODc1IDEuNTkzNzVxMCAwLjc1IDAuNzM0Mzc1IDEuNDA2MjVxMC43MzQzNzUgMC42NTYyNSAxLjc5Njg3NSAwLjY1NjI1cTEuMDc4MTI1IDAgMS44MTI1IC0wLjY1NjI1cTAuNzM0Mzc1IC0wLjY1NjI1IDAuNzM0Mzc1IC0xLjQwNjI1em03LjA1NDY4NzUgMC40NTMxMjVsLTEuMTA5Mzc1IDIuOTUzMTI1bC0xLjUgMGwtMS4zNDM3NSAtNS41cS0wLjQzNzUgLTAuMDE1NjI1IC0wLjY3MTg3NSAtMC4yMzQzNzVxLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjU2MjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjQ4NDM3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI4MTI1IDAuNjA5Mzc1cS0wLjIxODc1IDAuMTg3NSAtMC44MjgxMjUgMC4xODc1bDAuNjA5Mzc1IDIuNTQ2ODc1bDAuOTg0Mzc1IC0yLjYwOTM3NWwxLjQyMTg3NSAwbDEuMCAyLjYwOTM3NWwwLjYyNSAtMi41NDY4NzVxLTAuNTkzNzUgMCAtMC43ODEyNSAtMC4xMDkzNzVxLTAuMzc1IC0wLjI1IC0wLjM3NSAtMC42ODc1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS41IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zMjgxMjUgLTAuMjE4NzUgMC41NDY4NzVxLTAuMjE4NzUgMC4yMTg3NSAtMC42NDA2MjUgMC4yNWwtMS4zMTI1IDUuNWwtMS40ODQzNzUgMGwtMS4xNzE4NzUgLTIuOTUzMTI1em0xMS4zMjAzMTI1IC0yLjI2NTYyNXEtMC4zOTA2MjUgLTAuMjUgLTAuODI4MTI1IC0wLjM1OTM3NXEtMC40MjE4NzUgLTAuMTI1IC0wLjg5MDYyNSAtMC4xMjVxLTAuOTIxODc1IDAgLTEuNDY4NzUgMC4yOTY4NzVxLTAuMjUgMC4xNDA2MjUgLTAuMjUgMC4yOTY4NzVxMCAwLjE3MTg3NSAwLjMyODEyNSAwLjM0Mzc1cTAuMjUgMC4xMjUgMS4xMjUgMC4yNXExLjU5Mzc1IDAuMjE4NzUgMi4yMTg3NSAwLjQzNzVxMC44MTI1IDAuMjgxMjUgMS4yNSAwLjg1OTM3NXEwLjQ1MzEyNSAwLjU2MjUgMC40NTMxMjUgMS4yMDMxMjVxMCAwLjg1OTM3NSAtMC43NSAxLjQzNzVxLTEuMDkzNzUgMC44NDM3NSAtMi44MjgxMjUgMC44NDM3NXEtMC42ODc1IDAgLTEuMjgxMjUgLTAuMTI1cS0wLjU5Mzc1IC0wLjEyNSAtMS4wNzgxMjUgLTAuMzU5Mzc1cS0wLjEyNSAwLjA5Mzc1IC0wLjI2NTYyNSAwLjE1NjI1cS0wLjEyNSAwLjA0Njg3NSAtMC4yNjU2MjUgMC4wNDY4NzVxLTAuMzc1IDAgLTAuNTkzNzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjI1IC0wLjIxODc1IC0wLjgyODEyNWwwIC0wLjU0Njg3NXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjI5Njg3NSAwIDAuNDg0Mzc1IDAuMTU2MjVxMC4yMDMxMjUgMC4xNTYyNSAwLjMxMjUgMC41NDY4NzVxMC4zNTkzNzUgMC4zMTI1IDAuODc1IDAuNDg0Mzc1cTAuNTE1NjI1IDAuMTU2MjUgMS4xODc1IDAuMTU2MjVxMS4xMDkzNzUgMCAxLjcxODc1IC0wLjM0Mzc1cTAuMjgxMjUgLTAuMTcxODc1IDAuMjgxMjUgLTAuMzU5Mzc1cTAgLTAuMzEyNSAtMC40MDYyNSAtMC41MTU2MjVxLTAuNDIxODc1IC0wLjIwMzEyNSAtMS43MTg3NSAtMC4zNDM3NXEtMS45MjE4NzUgLTAuMjAzMTI1IC0yLjU3ODEyNSAtMC43ODEyNXEtMC42NDA2MjUgLTAuNTc4MTI1IC0wLjY0MDYyNSAtMS40MDYyNXEwIC0wLjg1OTM3NSAwLjcxODc1IC0xLjQzNzVxMC45ODQzNzUgLTAuNzgxMjUgMi41NzgxMjUgLTAuNzgxMjVxMC41NjI1IDAgMS4wNjI1IDAuMTA5Mzc1cTAuNTE1NjI1IDAuMTA5Mzc1IDAuOTg0Mzc1IDAuMzI4MTI1cTAuMTU2MjUgLTAuMTA5Mzc1IDAuMjgxMjUgLTAuMTU2MjVxMC4xMjUgLTAuMDYyNSAwLjIzNDM3NSAtMC4wNjI1cTAuMzI4MTI1IDAgMC41NDY4NzUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMC4zOTA2MjVxMCAwLjUzMTI1IC0wLjEyNSAwLjcxODc1cS0wLjI1IDAuMzU5Mzc1IC0wLjY3MTg3NSAwLjM1OTM3NXEtMC4yOTY4NzUgMCAtMC41MTU2MjUgLTAuMTcxODc1cS0wLjIxODc1IC0wLjE4NzUgLTAuMjgxMjUgLTAuNDg0Mzc1em02Ljk0NTMxMjUgMS45Njg3NWwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTEuOTc2NTYyNSA0Ljg1OTM3NWwwIC0wLjM3NXEtMC42MDkzNzUgMC4zMTI1IC0xLjM0Mzc1IDAuNDY4NzVxLTAuNzE4NzUgMC4xNzE4NzUgLTEuMzEyNSAwLjE3MTg3NXEtMS4yODEyNSAwIC0yLjA5Mzc1IC0wLjY4NzVxLTAuNzk2ODc1IC0wLjY4NzUgLTAuNzk2ODc1IC0xLjUxNTYyNXEwIC0xLjAgMS4wMTU2MjUgLTEuODU5Mzc1cTEuMDMxMjUgLTAuODc1IDIuODQzNzUgLTAuODc1cTAuNzM0Mzc1IDAgMS42ODc1IDAuMTU2MjVsMCAtMC4zNzVxMCAtMC4zNTkzNzUgLTAuMzEyNSAtMC41NzgxMjVxLTAuMzEyNSAtMC4yMzQzNzUgLTEuMTcxODc1IC0wLjIzNDM3NXEtMC43MTg3NSAwIC0xLjg0Mzc1IDAuMjgxMjVxLTAuNDIxODc1IDAuMDkzNzUgLTAuNjU2MjUgMC4wOTM3NXEtMC4zMjgxMjUgMCAtMC41NDY4NzUgLTAuMjE4NzVxLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjU5Mzc1cTAgLTAuMjAzMTI1IDAuMDc4MTI1IC0wLjM0Mzc1cTAuMDc4MTI1IC0wLjE1NjI1IDAuMjE4NzUgLTAuMjVxMC4xNDA2MjUgLTAuMDkzNzUgMC41NzgxMjUgLTAuMjE4NzVxMC41OTM3NSAtMC4xNTYyNSAxLjIwMzEyNSAtMC4yNXEwLjYyNSAtMC4xMDkzNzUgMS4xMjUgLTAuMTA5Mzc1cTEuNSAwIDIuMzEyNSAwLjY1NjI1cTAuODI4MTI1IDAuNjQwNjI1IDAuODI4MTI1IDEuNzVsMCAzLjI5Njg3NWwwLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44NzUgMHptMCAtMi44NzVxLTAuOTY4NzUgLTAuMTg3NSAtMS43ODEyNSAtMC4xODc1cS0wLjk2ODc1IDAgLTEuNjcxODc1IDAuNDg0Mzc1cS0wLjQzNzUgMC4yOTY4NzUgLTAuNDM3NSAwLjYwOTM3NXEwIDAuMjM0Mzc1IDAuMjAzMTI1IDAuMzc1cTAuMzkwNjI1IDAuMjUgMS4wNzgxMjUgMC4yNXEwLjU3ODEyNSAwIDEuMjk2ODc1IC0wLjIxODc1cTAuNzM0Mzc1IC0wLjIzNDM3NSAxLjMxMjUgLTAuNjI1bDAgLTAuNjg3NXptNy43NTc4MTI1IC0yLjYyNWwwIDMuMjE4NzVxMCAwLjUxNTYyNSAwLjIxODc1IDAuNjcxODc1cTAuMzI4MTI1IDAuMjY1NjI1IDEuMTcxODc1IDAuMjY1NjI1cTEuMjE4NzUgMCAyLjI2NTYyNSAtMC41MzEyNXEwLjM5MDYyNSAtMC4yMDMxMjUgMC42MjUgLTAuMjAzMTI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMzQzNzUgMC4yMzQzNzUgMC4yMzQzNzUgMC41NzgxMjVxMCAwLjMxMjUgLTAuMjUgMC41MzEyNXEtMC4zNzUgMC4zNzUgLTEuNTE1NjI1IDAuNjg3NXEtMS4xMjUgMC4zMTI1IC0xLjg5MDYyNSAwLjMxMjVxLTEuNSAwIC0yLjI1IC0wLjY0MDYyNXEtMC43MzQzNzUgLTAuNjU2MjUgLTAuNzM0Mzc1IC0xLjU5Mzc1bDAgLTMuNTMxMjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDAuNTc4MTI1IDBsMCAtMS40NTMxMjVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4zNTkzNzUgMCAwLjU3ODEyNSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAxLjQ1MzEyNWwyLjk2ODc1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMi45Njg3NSAwem04LjM1MTU2MjUgLTQuNjQwNjI1bDAgMy40MjE4NzVxMC41IC0wLjI5Njg3NSAxLjAgLTAuNDM3NXEwLjUxNTYyNSAtMC4xNTYyNSAxLjA0Njg3NSAtMC4xNTYyNXEwLjgyODEyNSAwIDEuNDY4NzUgMC4yODEyNXEwLjY1NjI1IDAuMjgxMjUgMS4wNzgxMjUgMC44OTA2MjVxMC40MjE4NzUgMC42MDkzNzUgMC40MjE4NzUgMS41MzEyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMjAzMTI1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMi44OTA2MjVxMCAtMC42MjUgLTAuMjgxMjUgLTAuODc1cS0wLjM1OTM3NSAtMC4zMjgxMjUgLTEuMDc4MTI1IC0wLjMyODEyNXEtMC41MzEyNSAwIC0wLjk1MzEyNSAwLjIwMzEyNXEtMC40MDYyNSAwLjIwMzEyNSAtMS4wOTM3NSAwLjg5MDYyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMTg3NSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTYuOTIxODc1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTk2LjAgMTQ0LjBsMCAtODAuMGw4MC4wIDAiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtOTYuMCAxNDQuMGwwIC04MC4wbDY4LjAgMCIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNjQuMCA2Ny4zMDM0N2w5LjA3NjIwMiAtMy4zMDM0NjY4bC05LjA3NjIwMiAtMy4zMDM0NjN6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTQzMS41MDEzIDE0My4wODM5OGwwIC03OC45OTk5OWwtNjguMCAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTQzMS41MDEzIDE0My4wODM5OGwwIC03OC45OTk5OWwtNTYuMCAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTM3NS41MDEzIDYwLjc4MDUyNWwtOS4wNzYyMDIgMy4zMDM0NjY4bDkuMDc2MjAyIDMuMzAzNDU5MnoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtMjY5LjcxNjUyIDEwNC41MzU0M2wwIDE2Ni45MjkxNCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0yNjkuNzE2NTIgMTE2LjUzNTQzbDAgMTU0LjkyOTE0IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTI3My4wMiAxMTYuNTM1NDNsLTMuMzAzNDY2OCAtOS4wNzYxOTVsLTMuMzAzNDY2OCA5LjA3NjE5NXoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtNjUuMCAyMjMuMDgzOThsLTEuMDA3ODczNSAxNzYuOTEzMzkiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtNjQuOTMxNjMgMjM1LjA4Mzc5bC0wLjkzOTUwNjUzIDE2NC45MTM1OSIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im02OC4yMzUwNSAyMzUuMTAyNjJsLTMuMjUxNzAxNCAtOS4wOTQ4NjRsLTMuMzU1MTE3OCA5LjA1NzIyeiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im00NzEuMCAyMjQuMzgwNThsLTEuMDA3ODczNSAxNzYuOTEzMzYiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtNDcwLjkzMTY0IDIzNi4zODAzN2wtMC45Mzk1MTQxNiAxNjQuOTEzNiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im00NzQuMjM1MDUgMjM2LjM5OTJsLTMuMjUxNzA5IC05LjA5NDg2NGwtMy4zNTUxMDI1IDkuMDU3MjJ6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTEyOC41MDEzMSA0MDAuMDAyNjZsMCAtODYuMTY4bDQ3LjQ5NjAwMiAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTEyOC41MDEzMSA0MDAuMDAyNjZsMCAtODYuMTY4bDM1LjQ5NjAwMiAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTE2My45OTczMSAzMTcuMTM4MTJsOS4wNzYyMDIgLTMuMzAzNDY2OGwtOS4wNzYyMDIgLTMuMzAzNDY2OHoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtNDE0LjcxOTAyIDQwMC4wMDI2NmwwIC04Ni4xNjhsLTUxLjIxNjAwMyAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTQxNC43MTkwMiA0MDAuMDAyNjZsMCAtODYuMTY4bC0zOS4yMTYwMDMgMCIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0zNzUuNTAzMDIgMzEwLjUzMTJsLTkuMDc2MTcyIDMuMzAzNDY2OGw5LjA3NjE3MiAzLjMwMzQ2Njh6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48L2c+PC9zdmc+CisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0IGIvRG9jL2xpYnJhcnkvcGF0aGxpYi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMxZGM0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0CkBAIC0wLDAgKzEsOTE5IEBACisKKzptb2Q6YHBhdGhsaWJgIC0tLSBPYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHBhdGhsaWIKKyAgIDpzeW5vcHNpczogT2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMKKworLi4gaW5kZXg6OiBzaW5nbGU6IHBhdGg7IG9wZXJhdGlvbnMKKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1RoaXMgbW9kdWxlIG9mZmVycyBjbGFzc2VzIHJlcHJlc2VudGluZyBmaWxlc3lzdGVtIHBhdGhzIHdpdGggc2VtYW50aWNzCithcHByb3ByaWF0ZSBmb3IgZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zLiAgUGF0aCBjbGFzc2VzIGFyZSBkaXZpZGVkCitiZXR3ZWVuIDpyZWY6YHB1cmUgcGF0aHMgPHB1cmUtcGF0aHM+YCwgd2hpY2ggcHJvdmlkZSBwdXJlbHkgY29tcHV0YXRpb25hbAorb3BlcmF0aW9ucyB3aXRob3V0IEkvTywgYW5kIDpyZWY6YGNvbmNyZXRlIHBhdGhzIDxjb25jcmV0ZS1wYXRocz5gLCB3aGljaAoraW5oZXJpdCBmcm9tIHB1cmUgcGF0aHMgYnV0IGFsc28gcHJvdmlkZSBJL08gb3BlcmF0aW9ucy4KKworLi4gaW1hZ2U6OiBwYXRobGliLWluaGVyaXRhbmNlLnBuZworICAgOmFsaWduOiBjZW50ZXIKKworSWYgeW91J3ZlIG5ldmVyIHVzZWQgdGhpcyBtb2R1bGUgYmVmb3JlIG9yIGp1c3QgYXJlbid0IHN1cmUgd2hpY2ggY2xhc3MgaXMKK3JpZ2h0IGZvciB5b3VyIHRhc2ssIDpjbGFzczpgUGF0aGAgaXMgbW9zdCBsaWtlbHkgd2hhdCB5b3UgbmVlZC4gSXQgaW5zdGFudGlhdGVzCithIDpyZWY6YGNvbmNyZXRlIHBhdGggPGNvbmNyZXRlLXBhdGhzPmAgZm9yIHRoZSBwbGF0Zm9ybSB0aGUgY29kZSBpcyBydW5uaW5nIG9uLgorCitQdXJlIHBhdGhzIGFyZSB1c2VmdWwgaW4gc29tZSBzcGVjaWFsIGNhc2VzOyBmb3IgZXhhbXBsZToKKworIy4gSWYgeW91IHdhbnQgdG8gbWFuaXB1bGF0ZSBXaW5kb3dzIHBhdGhzIG9uIGEgVW5peCBtYWNoaW5lIChvciB2aWNlIHZlcnNhKS4KKyAgIFlvdSBjYW5ub3QgaW5zdGFudGlhdGUgYSA6Y2xhc3M6YFdpbmRvd3NQYXRoYCB3aGVuIHJ1bm5pbmcgb24gVW5peCwgYnV0IHlvdQorICAgY2FuIGluc3RhbnRpYXRlIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYC4KKyMuIFlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdXIgY29kZSBvbmx5IG1hbmlwdWxhdGVzIHBhdGhzIHdpdGhvdXQgYWN0dWFsbHkKKyAgIGFjY2Vzc2luZyB0aGUgT1MuIEluIHRoaXMgY2FzZSwgaW5zdGFudGlhdGluZyBvbmUgb2YgdGhlIHB1cmUgY2xhc3NlcyBtYXkgYmUKKyAgIHVzZWZ1bCBzaW5jZSB0aG9zZSBzaW1wbHkgZG9uJ3QgaGF2ZSBhbnkgT1MtYWNjZXNzaW5nIG9wZXJhdGlvbnMuCisKKy4uIG5vdGU6OgorICAgVGhpcyBtb2R1bGUgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgb24gYQorICAgOnRlcm06YHByb3Zpc2lvbmFsIGJhc2lzIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuIEJhY2t3YXJkcyBpbmNvbXBhdGlibGUKKyAgIGNoYW5nZXMgKHVwIHRvIGFuZCBpbmNsdWRpbmcgcmVtb3ZhbCBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAorICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCisKKy4uIHNlZWFsc286OgorICAgOnBlcDpgNDI4YDogVGhlIHBhdGhsaWIgbW9kdWxlIC0tIG9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzLgorCisuLiBzZWVhbHNvOjoKKyAgIEZvciBsb3ctbGV2ZWwgcGF0aCBtYW5pcHVsYXRpb24gb24gc3RyaW5ncywgeW91IGNhbiBhbHNvIHVzZSB0aGUKKyAgIDptb2Q6YG9zLnBhdGhgIG1vZHVsZS4KKworCitCYXNpYyB1c2UKKy0tLS0tLS0tLQorCitJbXBvcnRpbmcgdGhlIG1haW4gY2xhc3M6OgorCisgICA+Pj4gZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCisKK0xpc3Rpbmcgc3ViZGlyZWN0b3JpZXM6OgorCisgICA+Pj4gcCA9IFBhdGgoJy4nKQorICAgPj4+IFt4IGZvciB4IGluIHAuaXRlcmRpcigpIGlmIHguaXNfZGlyKCldCisgICBbUG9zaXhQYXRoKCcuaGcnKSwgUG9zaXhQYXRoKCdkb2NzJyksIFBvc2l4UGF0aCgnZGlzdCcpLAorICAgIFBvc2l4UGF0aCgnX19weWNhY2hlX18nKSwgUG9zaXhQYXRoKCdidWlsZCcpXQorCitMaXN0aW5nIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZTo6CisKKyAgID4+PiBsaXN0KHAuZ2xvYignKiovKi5weScpKQorICAgW1Bvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyksIFBvc2l4UGF0aCgnc2V0dXAucHknKSwKKyAgICBQb3NpeFBhdGgoJ3BhdGhsaWIucHknKSwgUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKSwKKyAgICBQb3NpeFBhdGgoJ2J1aWxkL2xpYi9wYXRobGliLnB5JyldCisKK05hdmlnYXRpbmcgaW5zaWRlIGEgZGlyZWN0b3J5IHRyZWU6OgorCisgICA+Pj4gcCA9IFBhdGgoJy9ldGMnKQorICAgPj4+IHEgPSBwIC8gJ2luaXQuZCcgLyAncmVib290JworICAgPj4+IHEKKyAgIFBvc2l4UGF0aCgnL2V0Yy9pbml0LmQvcmVib290JykKKyAgID4+PiBxLnJlc29sdmUoKQorICAgUG9zaXhQYXRoKCcvZXRjL3JjLmQvaW5pdC5kL2hhbHQnKQorCitRdWVyeWluZyBwYXRoIHByb3BlcnRpZXM6OgorCisgICA+Pj4gcS5leGlzdHMoKQorICAgVHJ1ZQorICAgPj4+IHEuaXNfZGlyKCkKKyAgIEZhbHNlCisKK09wZW5pbmcgYSBmaWxlOjoKKworICAgPj4+IHdpdGggcS5vcGVuKCkgYXMgZjogZi5yZWFkbGluZSgpCisgICAuLi4KKyAgICcjIS9iaW4vYmFzaFxuJworCisKKy4uIF9wdXJlLXBhdGhzOgorCitQdXJlIHBhdGhzCistLS0tLS0tLS0tCisKK1B1cmUgcGF0aCBvYmplY3RzIHByb3ZpZGUgcGF0aC1oYW5kbGluZyBvcGVyYXRpb25zIHdoaWNoIGRvbid0IGFjdHVhbGx5CithY2Nlc3MgYSBmaWxlc3lzdGVtLiAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gYWNjZXNzIHRoZXNlIGNsYXNzZXMsIHdoaWNoCit3ZSBhbHNvIGNhbGwgKmZsYXZvdXJzKjoKKworLi4gY2xhc3M6OiBQdXJlUGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIGdlbmVyaWMgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBzeXN0ZW0ncyBwYXRoIGZsYXZvdXIgKGluc3RhbnRpYXRpbmcKKyAgIGl0IGNyZWF0ZXMgZWl0aGVyIGEgOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCBvciBhIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYCk6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ3NldHVwLnB5JykgICAgICAjIFJ1bm5pbmcgb24gYSBVbml4IG1hY2hpbmUKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ3NldHVwLnB5JykKKworICAgRWFjaCBlbGVtZW50IG9mICpwYXRoc2VnbWVudHMqIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYnl0ZXMgb2JqZWN0CisgICByZXByZXNlbnRpbmcgYSBwYXRoIHNlZ21lbnQ7IGl0IGNhbiBhbHNvIGJlIGFub3RoZXIgcGF0aCBvYmplY3Q6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ2ZvbycsICdzb21lL3BhdGgnLCAnYmFyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9zb21lL3BhdGgvYmFyJykKKyAgICAgID4+PiBQdXJlUGF0aChQYXRoKCdmb28nKSwgUGF0aCgnYmFyJykpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vYmFyJykKKworICAgV2hlbiAqcGF0aHNlZ21lbnRzKiBpcyBlbXB0eSwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGFzc3VtZWQ6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoKQorICAgICAgUHVyZVBvc2l4UGF0aCgnLicpCisKKyAgIFdoZW4gc2V2ZXJhbCBhYnNvbHV0ZSBwYXRocyBhcmUgZ2l2ZW4sIHRoZSBsYXN0IGlzIHRha2VuIGFzIGFuIGFuY2hvcgorICAgKG1pbWlja2luZyA6ZnVuYzpgb3MucGF0aC5qb2luYCdzIGJlaGF2aW91cik6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJy9ldGMnLCAnL3VzcicsICdsaWI2NCcpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvdXNyL2xpYjY0JykKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1dpbmRvd3MnLCAnZDpiYXInKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdkOmJhcicpCisKKyAgIEhvd2V2ZXIsIGluIGEgV2luZG93cyBwYXRoLCBjaGFuZ2luZyB0aGUgbG9jYWwgcm9vdCBkb2Vzbid0IGRpc2NhcmQgdGhlCisgICBwcmV2aW91cyBkcml2ZSBzZXR0aW5nOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycsICcvUHJvZ3JhbSBGaWxlcycpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisgICBTcHVyaW91cyBzbGFzaGVzIGFuZCBzaW5nbGUgZG90cyBhcmUgY29sbGFwc2VkLCBidXQgZG91YmxlIGRvdHMgKGBgJy4uJ2BgKQorICAgYXJlIG5vdCwgc2luY2UgdGhpcyB3b3VsZCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYSBwYXRoIGluIHRoZSBmYWNlIG9mCisgICBzeW1ib2xpYyBsaW5rczo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vLy9iYXInKQorICAgICAgUHVyZVBvc2l4UGF0aCgnZm9vL2JhcicpCisgICAgICA+Pj4gUHVyZVBhdGgoJ2Zvby8uL2JhcicpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vYmFyJykKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vLy4uL2JhcicpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vLi4vYmFyJykKKworICAgKGEgbmHDr3ZlIGFwcHJvYWNoIHdvdWxkIG1ha2UgYGBQdXJlUG9zaXhQYXRoKCdmb28vLi4vYmFyJylgYCBlcXVpdmFsZW50CisgICB0byBgYFB1cmVQb3NpeFBhdGgoJ2JhcicpYGAsIHdoaWNoIGlzIHdyb25nIGlmIGBgZm9vYGAgaXMgYSBzeW1ib2xpYyBsaW5rCisgICB0byBhbm90aGVyIGRpcmVjdG9yeSkKKworLi4gY2xhc3M6OiBQdXJlUG9zaXhQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQdXJlUGF0aGAsIHRoaXMgcGF0aCBmbGF2b3VyIHJlcHJlc2VudHMgbm9uLVdpbmRvd3MKKyAgIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworLi4gY2xhc3M6OiBQdXJlV2luZG93c1BhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFB1cmVQYXRoYCwgdGhpcyBwYXRoIGZsYXZvdXIgcmVwcmVzZW50cyBXaW5kb3dzCisgICBmaWxlc3lzdGVtIHBhdGhzOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworUmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtIHlvdSdyZSBydW5uaW5nIG9uLCB5b3UgY2FuIGluc3RhbnRpYXRlIGFsbCBvZgordGhlc2UgY2xhc3Nlcywgc2luY2UgdGhleSBkb24ndCBwcm92aWRlIGFueSBvcGVyYXRpb24gdGhhdCBkb2VzIHN5c3RlbSBjYWxscy4KKworCitHZW5lcmFsIHByb3BlcnRpZXMKK15eXl5eXl5eXl5eXl5eXl5eXgorCitQYXRocyBhcmUgaW1tdXRhYmxlIGFuZCBoYXNoYWJsZS4gIFBhdGhzIG9mIGEgc2FtZSBmbGF2b3VyIGFyZSBjb21wYXJhYmxlCithbmQgb3JkZXJhYmxlLiAgVGhlc2UgcHJvcGVydGllcyByZXNwZWN0IHRoZSBmbGF2b3VyJ3MgY2FzZS1mb2xkaW5nCitzZW1hbnRpY3M6OgorCisgICA+Pj4gUHVyZVBvc2l4UGF0aCgnZm9vJykgPT0gUHVyZVBvc2l4UGF0aCgnRk9PJykKKyAgIEZhbHNlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdmb28nKSA9PSBQdXJlV2luZG93c1BhdGgoJ0ZPTycpCisgICBUcnVlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdGT08nKSBpbiB7IFB1cmVXaW5kb3dzUGF0aCgnZm9vJykgfQorICAgVHJ1ZQorICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnQzonKSA8IFB1cmVXaW5kb3dzUGF0aCgnZDonKQorICAgVHJ1ZQorCitQYXRocyBvZiBhIGRpZmZlcmVudCBmbGF2b3VyIGNvbXBhcmUgdW5lcXVhbCBhbmQgY2Fubm90IGJlIG9yZGVyZWQ6OgorCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdmb28nKSA9PSBQdXJlUG9zaXhQYXRoKCdmb28nKQorICAgRmFsc2UKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2ZvbycpIDwgUHVyZVBvc2l4UGF0aCgnZm9vJykKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgIFR5cGVFcnJvcjogdW5vcmRlcmFibGUgdHlwZXM6IFB1cmVXaW5kb3dzUGF0aCgpIDwgUHVyZVBvc2l4UGF0aCgpCisKKworT3BlcmF0b3JzCiteXl5eXl5eXl4KKworVGhlIHNsYXNoIG9wZXJhdG9yIGhlbHBzIGNyZWF0ZSBjaGlsZCBwYXRocywgc2ltaWxhcmx5IHRvIDpmdW5jOmBvcy5wYXRoLmpvaW5gOjoKKworICAgPj4+IHAgPSBQdXJlUGF0aCgnL2V0YycpCisgICA+Pj4gcAorICAgUHVyZVBvc2l4UGF0aCgnL2V0YycpCisgICA+Pj4gcCAvICdpbml0LmQnIC8gJ2FwYWNoZTInCisgICBQdXJlUG9zaXhQYXRoKCcvZXRjL2luaXQuZC9hcGFjaGUyJykKKyAgID4+PiBxID0gUHVyZVBhdGgoJ2JpbicpCisgICA+Pj4gJy91c3InIC8gcQorICAgUHVyZVBvc2l4UGF0aCgnL3Vzci9iaW4nKQorCitUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcGF0aCBpcyB0aGUgcmF3IGZpbGVzeXN0ZW0gcGF0aCBpdHNlbGYKKyhpbiBuYXRpdmUgZm9ybSwgZS5nLiB3aXRoIGJhY2tzbGFzaGVzIHVuZGVyIFdpbmRvd3MpLCB3aGljaCB5b3UgY2FuCitwYXNzIHRvIGFueSBmdW5jdGlvbiB0YWtpbmcgYSBmaWxlIHBhdGggYXMgYSBzdHJpbmc6OgorCisgICA+Pj4gcCA9IFB1cmVQYXRoKCcvZXRjJykKKyAgID4+PiBzdHIocCkKKyAgICcvZXRjJworICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorICAgPj4+IHN0cihwKQorICAgJ2M6XFxQcm9ncmFtIEZpbGVzJworCitTaW1pbGFybHksIGNhbGxpbmcgOmNsYXNzOmBieXRlc2Agb24gYSBwYXRoIGdpdmVzIHRoZSByYXcgZmlsZXN5c3RlbSBwYXRoIGFzIGEKK2J5dGVzIG9iamVjdCwgYXMgZW5jb2RlZCBieSA6ZnVuYzpgb3MuZnNlbmNvZGVgOjoKKworICAgPj4+IGJ5dGVzKHApCisgICBiJy9ldGMnCisKKy4uIG5vdGU6OgorICAgQ2FsbGluZyA6Y2xhc3M6YGJ5dGVzYCBpcyBvbmx5IHJlY29tbWVuZGVkIHVuZGVyIFVuaXguICBVbmRlciBXaW5kb3dzLAorICAgdGhlIHVuaWNvZGUgZm9ybSBpcyB0aGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIG9mIGZpbGVzeXN0ZW0gcGF0aHMuCisKKworQWNjZXNzaW5nIGluZGl2aWR1YWwgcGFydHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RvIGFjY2VzcyB0aGUgaW5kaXZpZHVhbCAicGFydHMiIChjb21wb25lbnRzKSBvZiBhIHBhdGgsIHVzZSB0aGUgZm9sbG93aW5nCitwcm9wZXJ0eToKKworLi4gZGF0YTo6IFB1cmVQYXRoLnBhcnRzCisKKyAgIEEgdHVwbGUgZ2l2aW5nIGFjY2VzcyB0byB0aGUgcGF0aCdzIHZhcmlvdXMgY29tcG9uZW50czo6CisKKyAgICAgID4+PiBwID0gUHVyZVBhdGgoJy91c3IvYmluL3B5dGhvbjMnKQorICAgICAgPj4+IHAucGFydHMKKyAgICAgICgnLycsICd1c3InLCAnYmluJywgJ3B5dGhvbjMnKQorCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy9QU0YnKQorICAgICAgPj4+IHAucGFydHMKKyAgICAgICgnYzpcXCcsICdQcm9ncmFtIEZpbGVzJywgJ1BTRicpCisKKyAgIChub3RlIGhvdyB0aGUgZHJpdmUgYW5kIGxvY2FsIHJvb3QgYXJlIHJlZ3JvdXBlZCBpbiBhIHNpbmdsZSBwYXJ0KQorCisKK01ldGhvZHMgYW5kIHByb3BlcnRpZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworUHVyZSBwYXRocyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgcHJvcGVydGllczoKKworLi4gZGF0YTo6IFB1cmVQYXRoLmRyaXZlCisKKyAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJpdmUgbGV0dGVyIG9yIG5hbWUsIGlmIGFueTo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykuZHJpdmUKKyAgICAgICdjOicKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy9Qcm9ncmFtIEZpbGVzLycpLmRyaXZlCisgICAgICAnJworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5kcml2ZQorICAgICAgJycKKworICAgVU5DIHNoYXJlcyBhcmUgYWxzbyBjb25zaWRlcmVkIGRyaXZlczo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vaG9zdC9zaGFyZS9mb28udHh0JykuZHJpdmUKKyAgICAgICdcXFxcaG9zdFxcc2hhcmUnCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5yb290CisKKyAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgKGxvY2FsIG9yIGdsb2JhbCkgcm9vdCwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKS5yb290CisgICAgICAnXFwnCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykucm9vdAorICAgICAgJycKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykucm9vdAorICAgICAgJy8nCisKKyAgIFVOQyBzaGFyZXMgYWx3YXlzIGhhdmUgYSByb290OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9ob3N0L3NoYXJlJykucm9vdAorICAgICAgJ1xcJworCisuLiBkYXRhOjogUHVyZVBhdGguYW5jaG9yCisKKyAgIFRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBkcml2ZSBhbmQgcm9vdDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykuYW5jaG9yCisgICAgICAnYzpcXCcKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6UHJvZ3JhbSBGaWxlcy8nKS5hbmNob3IKKyAgICAgICdjOicKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuYW5jaG9yCisgICAgICAnLycKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vaG9zdC9zaGFyZScpLmFuY2hvcgorICAgICAgJ1xcXFxob3N0XFxzaGFyZVxcJworCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5wYXJlbnRzCisKKyAgIEFuIGltbXV0YWJsZSBzZXF1ZW5jZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBsb2dpY2FsIGFuY2VzdG9ycyBvZgorICAgdGhlIHBhdGg6OgorCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovZm9vL2Jhci9zZXR1cC5weScpCisgICAgICA+Pj4gcC5wYXJlbnRzWzBdCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L2Zvby9iYXInKQorICAgICAgPj4+IHAucGFyZW50c1sxXQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9mb28nKQorICAgICAgPj4+IHAucGFyZW50c1syXQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi8nKQorCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5wYXJlbnQKKworICAgVGhlIGxvZ2ljYWwgcGFyZW50IG9mIHRoZSBwYXRoOjoKKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvYS9iL2MvZCcpCisgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9hL2IvYycpCisKKyAgIFlvdSBjYW5ub3QgZ28gcGFzdCBhbiBhbmNob3IsIG9yIGVtcHR5IHBhdGg6OgorCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy8nKQorICAgICAgPj4+IHAucGFyZW50CisgICAgICBQdXJlUG9zaXhQYXRoKCcvJykKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnLicpCisgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy4nKQorCisgICAuLiBub3RlOjoKKyAgICAgIFRoaXMgaXMgYSBwdXJlbHkgbGV4aWNhbCBvcGVyYXRpb24sIGhlbmNlIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3VyOjoKKworICAgICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCdmb28vLi4nKQorICAgICAgICAgPj4+IHAucGFyZW50CisgICAgICAgICBQdXJlUG9zaXhQYXRoKCdmb28nKQorCisgICAgICBJZiB5b3Ugd2FudCB0byB3YWxrIGFuIGFyYml0cmFyeSBmaWxlc3lzdGVtIHBhdGggdXB3YXJkcywgaXQgaXMKKyAgICAgIHJlY29tbWVuZGVkIHRvIGZpcnN0IGNhbGwgOm1ldGg6YFBhdGgucmVzb2x2ZWAgc28gYXMgdG8gcmVzb2x2ZQorICAgICAgc3ltbGlua3MgYW5kIGVsaW1pbmF0ZSBgIi4uImAgY29tcG9uZW50cy4KKworCisuLiBkYXRhOjogUHVyZVBhdGgubmFtZQorCisgICBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBleGNsdWRpbmcgdGhlIGRyaXZlIGFuZAorICAgcm9vdCwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkvc2V0dXAucHknKS5uYW1lCisgICAgICAnc2V0dXAucHknCisKKyAgIFVOQyBkcml2ZSBuYW1lcyBhcmUgbm90IGNvbnNpZGVyZWQ6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL3NvbWUvc2hhcmUvc2V0dXAucHknKS5uYW1lCisgICAgICAnc2V0dXAucHknCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL3NvbWUvc2hhcmUnKS5uYW1lCisgICAgICAnJworCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5zdWZmaXgKKworICAgVGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBmaW5hbCBjb21wb25lbnQsIGlmIGFueTo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5L3NldHVwLnB5Jykuc3VmZml4CisgICAgICAnLnB5JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmd6Jykuc3VmZml4CisgICAgICAnLmd6JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdWZmaXgKKyAgICAgICcnCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnN1ZmZpeGVzCisKKyAgIEEgbGlzdCBvZiB0aGUgcGF0aCdzIGZpbGUgZXh0ZW5zaW9uczo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhci5nYXInKS5zdWZmaXhlcworICAgICAgWycudGFyJywgJy5nYXInXQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmd6Jykuc3VmZml4ZXMKKyAgICAgIFsnLnRhcicsICcuZ3onXQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdWZmaXhlcworICAgICAgW10KKworCisuLiBkYXRhOjogUHVyZVBhdGguc3RlbQorCisgICBUaGUgZmluYWwgcGF0aCBjb21wb25lbnQsIHdpdGhvdXQgaXRzIHN1ZmZpeDo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhci5neicpLnN0ZW0KKyAgICAgICdsaWJyYXJ5LnRhcicKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhcicpLnN0ZW0KKyAgICAgICdsaWJyYXJ5JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdGVtCisgICAgICAnbGlicmFyeScKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5hc19wb3NpeCgpCisKKyAgIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aCB3aXRoIGZvcndhcmQgc2xhc2hlcyAoYGAvYGApOjoKKworICAgICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6XFx3aW5kb3dzJykKKyAgICAgID4+PiBzdHIocCkKKyAgICAgICdjOlxcd2luZG93cycKKyAgICAgID4+PiBwLmFzX3Bvc2l4KCkKKyAgICAgICdjOi93aW5kb3dzJworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmFzX3VyaSgpCisKKyAgIFJlcHJlc2VudCB0aGUgcGF0aCBhcyBhIGBgZmlsZWBgIFVSSS4gIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZgorICAgdGhlIHBhdGggaXNuJ3QgYWJzb2x1dGUuCisKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnL2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IHAuYXNfdXJpKCkKKyAgICAgICdmaWxlOi8vL2V0Yy9wYXNzd2QnCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycpCisgICAgICA+Pj4gcC5hc191cmkoKQorICAgICAgJ2ZpbGU6Ly8vYzovV2luZG93cycKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5pc19hYnNvbHV0ZSgpCisKKyAgIFJldHVybiB3aGV0aGVyIHRoZSBwYXRoIGlzIGFic29sdXRlIG9yIG5vdC4gIEEgcGF0aCBpcyBjb25zaWRlcmVkIGFic29sdXRlCisgICBpZiBpdCBoYXMgYm90aCBhIHJvb3QgYW5kIChpZiB0aGUgZmxhdm91ciBhbGxvd3MpIGEgZHJpdmU6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2EvYicpLmlzX2Fic29sdXRlKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdhL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBGYWxzZQorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9hL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvYS9iJykuaXNfYWJzb2x1dGUoKQorICAgICAgRmFsc2UKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6JykuaXNfYWJzb2x1dGUoKQorICAgICAgRmFsc2UKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vc29tZS9zaGFyZScpLmlzX2Fic29sdXRlKCkKKyAgICAgIFRydWUKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5pc19yZXNlcnZlZCgpCisKKyAgIFdpdGggOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgLCByZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggaXMgY29uc2lkZXJlZAorICAgcmVzZXJ2ZWQgdW5kZXIgV2luZG93cywgYGBGYWxzZWBgIG90aGVyd2lzZS4gIFdpdGggOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCwKKyAgIGBgRmFsc2VgYCBpcyBhbHdheXMgcmV0dXJuZWQuCisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ251bCcpLmlzX3Jlc2VydmVkKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdudWwnKS5pc19yZXNlcnZlZCgpCisgICAgICBGYWxzZQorCisgICBGaWxlIHN5c3RlbSBjYWxscyBvbiByZXNlcnZlZCBwYXRocyBjYW4gZmFpbCBteXN0ZXJpb3VzbHkgb3IgaGF2ZQorICAgdW5pbnRlbmRlZCBlZmZlY3RzLgorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmpvaW5wYXRoKCpvdGhlcikKKworICAgQ2FsbGluZyB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGNvbWJpbmluZyB0aGUgcGF0aCB3aXRoIGVhY2ggb2YKKyAgIHRoZSAqb3RoZXIqIGFyZ3VtZW50cyBpbiB0dXJuOjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5qb2lucGF0aCgncGFzc3dkJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvcGFzc3dkJykKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuam9pbnBhdGgoUHVyZVBvc2l4UGF0aCgncGFzc3dkJykpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmpvaW5wYXRoKCdpbml0LmQnLCAnYXBhY2hlMicpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjL2luaXQuZC9hcGFjaGUyJykKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6Jykuam9pbnBhdGgoJy9Qcm9ncmFtIEZpbGVzJykKKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcycpCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGgubWF0Y2gocGF0dGVybikKKworICAgTWF0Y2ggdGhpcyBwYXRoIGFnYWluc3QgdGhlIHByb3ZpZGVkIGdsb2Itc3R5bGUgcGF0dGVybi4gIFJldHVybiBgYFRydWVgYAorICAgaWYgbWF0Y2hpbmcgaXMgc3VjY2Vzc2Z1bCwgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgSWYgKnBhdHRlcm4qIGlzIHJlbGF0aXZlLCB0aGUgcGF0aCBjYW4gYmUgZWl0aGVyIHJlbGF0aXZlIG9yIGFic29sdXRlLAorICAgYW5kIG1hdGNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgcmlnaHQ6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ2EvYi5weScpLm1hdGNoKCcqLnB5JykKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUGF0aCgnL2EvYi9jLnB5JykubWF0Y2goJ2IvKi5weScpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVBhdGgoJy9hL2IvYy5weScpLm1hdGNoKCdhLyoucHknKQorICAgICAgRmFsc2UKKworICAgSWYgKnBhdHRlcm4qIGlzIGFic29sdXRlLCB0aGUgcGF0aCBtdXN0IGJlIGFic29sdXRlLCBhbmQgdGhlIHdob2xlIHBhdGgKKyAgIG11c3QgbWF0Y2g6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJy9hLnB5JykubWF0Y2goJy8qLnB5JykKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUGF0aCgnYS9iLnB5JykubWF0Y2goJy8qLnB5JykKKyAgICAgIEZhbHNlCisKKyAgIEFzIHdpdGggb3RoZXIgbWV0aG9kcywgY2FzZS1zZW5zaXRpdml0eSBpcyBvYnNlcnZlZDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2IucHknKS5tYXRjaCgnKi5QWScpCisgICAgICBUcnVlCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGgucmVsYXRpdmVfdG8oKm90aGVyKQorCisgICBDb21wdXRlIGEgdmVyc2lvbiBvZiB0aGlzIHBhdGggcmVsYXRpdmUgdG8gdGhlIHBhdGggcmVwcmVzZW50ZWQgYnkKKyAgICpvdGhlciouICBJZiBpdCdzIGltcG9zc2libGUsIFZhbHVlRXJyb3IgaXMgcmFpc2VkOjoKKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5yZWxhdGl2ZV90bygnLycpCisgICAgICBQdXJlUG9zaXhQYXRoKCdldGMvcGFzc3dkJykKKyAgICAgID4+PiBwLnJlbGF0aXZlX3RvKCcvZXRjJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5yZWxhdGl2ZV90bygnL3VzcicpCisgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgICAgIEZpbGUgInBhdGhsaWIucHkiLCBsaW5lIDY5NCwgaW4gcmVsYXRpdmVfdG8KKyAgICAgICAgICAuZm9ybWF0KHN0cihzZWxmKSwgc3RyKGZvcm1hdHRlZCkpKQorICAgICAgVmFsdWVFcnJvcjogJy9ldGMvcGFzc3dkJyBkb2VzIG5vdCBzdGFydCB3aXRoICcvdXNyJworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLndpdGhfbmFtZShuYW1lKQorCisgICBSZXR1cm4gYSBuZXcgcGF0aCB3aXRoIHRoZSA6YXR0cjpgbmFtZWAgY2hhbmdlZC4gIElmIHRoZSBvcmlnaW5hbCBwYXRoCisgICBkb2Vzbid0IGhhdmUgYSBuYW1lLCBWYWx1ZUVycm9yIGlzIHJhaXNlZDo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuZ3onKQorICAgICAgPj4+IHAud2l0aF9uYW1lKCdzZXR1cC5weScpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L0Rvd25sb2Fkcy9zZXR1cC5weScpCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovJykKKyAgICAgID4+PiBwLndpdGhfbmFtZSgnc2V0dXAucHknKQorICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICAgICBGaWxlICIvaG9tZS9hbnRvaW5lL2NweXRob24vZGVmYXVsdC9MaWIvcGF0aGxpYi5weSIsIGxpbmUgNzUxLCBpbiB3aXRoX25hbWUKKyAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciBoYXMgYW4gZW1wdHkgbmFtZSIgJSAoc2VsZiwpKQorICAgICAgVmFsdWVFcnJvcjogUHVyZVdpbmRvd3NQYXRoKCdjOi8nKSBoYXMgYW4gZW1wdHkgbmFtZQorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLndpdGhfc3VmZml4KHN1ZmZpeCkKKworICAgUmV0dXJuIGEgbmV3IHBhdGggd2l0aCB0aGUgOmF0dHI6YHN1ZmZpeGAgY2hhbmdlZC4gIElmIHRoZSBvcmlnaW5hbCBwYXRoCisgICBkb2Vzbid0IGhhdmUgYSBzdWZmaXgsIHRoZSBuZXcgKnN1ZmZpeCogaXMgYXBwZW5kZWQgaW5zdGVhZDo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuZ3onKQorICAgICAgPj4+IHAud2l0aF9zdWZmaXgoJy5iejInKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuYnoyJykKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdSRUFETUUnKQorICAgICAgPj4+IHAud2l0aF9zdWZmaXgoJy50eHQnKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdSRUFETUUudHh0JykKKworCisuLiBfY29uY3JldGUtcGF0aHM6CisKKworQ29uY3JldGUgcGF0aHMKKy0tLS0tLS0tLS0tLS0tCisKK0NvbmNyZXRlIHBhdGhzIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSBwdXJlIHBhdGggY2xhc3Nlcy4gIEluIGFkZGl0aW9uIHRvCitvcGVyYXRpb25zIHByb3ZpZGVkIGJ5IHRoZSBsYXR0ZXIsIHRoZXkgYWxzbyBwcm92aWRlIG1ldGhvZHMgdG8gZG8gc3lzdGVtCitjYWxscyBvbiBwYXRoIG9iamVjdHMuICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBpbnN0YW50aWF0ZSBjb25jcmV0ZSBwYXRoczoKKworLi4gY2xhc3M6OiBQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQdXJlUGF0aGAsIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBjb25jcmV0ZSBwYXRocyBvZgorICAgdGhlIHN5c3RlbSdzIHBhdGggZmxhdm91ciAoaW5zdGFudGlhdGluZyBpdCBjcmVhdGVzIGVpdGhlciBhCisgICA6Y2xhc3M6YFBvc2l4UGF0aGAgb3IgYSA6Y2xhc3M6YFdpbmRvd3NQYXRoYCk6OgorCisgICAgICA+Pj4gUGF0aCgnc2V0dXAucHknKQorICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpCisKKyAgICpwYXRoc2VnbWVudHMqIGlzIHNwZWNpZmllZCBzaW1pbGFybHkgdG8gOmNsYXNzOmBQdXJlUGF0aGAuCisKKy4uIGNsYXNzOjogUG9zaXhQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQYXRoYCBhbmQgOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCwgdGhpcyBjbGFzcworICAgcmVwcmVzZW50cyBjb25jcmV0ZSBub24tV2luZG93cyBmaWxlc3lzdGVtIHBhdGhzOjoKKworICAgICAgPj4+IFBvc2l4UGF0aCgnL2V0YycpCisgICAgICBQb3NpeFBhdGgoJy9ldGMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCisuLiBjbGFzczo6IFdpbmRvd3NQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQYXRoYCBhbmQgOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgLCB0aGlzIGNsYXNzCisgICByZXByZXNlbnRzIGNvbmNyZXRlIFdpbmRvd3MgZmlsZXN5c3RlbSBwYXRoczo6CisKKyAgICAgID4+PiBXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKQorICAgICAgV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCitZb3UgY2FuIG9ubHkgaW5zdGFudGlhdGUgdGhlIGNsYXNzIGZsYXZvdXIgdGhhdCBjb3JyZXNwb25kcyB0byB5b3VyIHN5c3RlbQorKGFsbG93aW5nIHN5c3RlbSBjYWxscyBvbiBub24tY29tcGF0aWJsZSBwYXRoIGZsYXZvdXJzIGNvdWxkIGxlYWQgdG8KK2J1Z3Mgb3IgZmFpbHVyZXMgaW4geW91ciBhcHBsaWNhdGlvbik6OgorCisgICA+Pj4gaW1wb3J0IG9zCisgICA+Pj4gb3MubmFtZQorICAgJ3Bvc2l4JworICAgPj4+IFBhdGgoJ3NldHVwLnB5JykKKyAgIFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgPj4+IFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgUG9zaXhQYXRoKCdzZXR1cC5weScpCisgICA+Pj4gV2luZG93c1BhdGgoJ3NldHVwLnB5JykKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgRmlsZSAicGF0aGxpYi5weSIsIGxpbmUgNzk4LCBpbiBfX25ld19fCisgICAgICAgJSAoY2xzLl9fbmFtZV9fLCkpCisgICBOb3RJbXBsZW1lbnRlZEVycm9yOiBjYW5ub3QgaW5zdGFudGlhdGUgJ1dpbmRvd3NQYXRoJyBvbiB5b3VyIHN5c3RlbQorCisKK01ldGhvZHMKK15eXl5eXl4KKworQ29uY3JldGUgcGF0aHMgcHJvdmlkZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8gcHVyZSBwYXRocworbWV0aG9kcy4gIE1hbnkgb2YgdGhlc2UgbWV0aG9kcyBjYW4gcmFpc2UgYW4gOmV4YzpgT1NFcnJvcmAgaWYgYSBzeXN0ZW0KK2NhbGwgZmFpbHMgKGZvciBleGFtcGxlIGJlY2F1c2UgdGhlIHBhdGggZG9lc24ndCBleGlzdCk6CisKKy4uIGNsYXNzbWV0aG9kOjogUGF0aC5jd2QoKQorCisgICBSZXR1cm4gYSBuZXcgcGF0aCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAoYXMgcmV0dXJuZWQKKyAgIGJ5IDpmdW5jOmBvcy5nZXRjd2RgKTo6CisKKyAgICAgID4+PiBQYXRoLmN3ZCgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYicpCisKKworLi4gbWV0aG9kOjogUGF0aC5zdGF0KCkKKworICAgUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGF0aCAoc2ltaWxhcmx5IHRvIDpmdW5jOmBvcy5zdGF0YCkuCisgICBUaGUgcmVzdWx0IGlzIGxvb2tlZCB1cCBhdCBlYWNoIGNhbGwgdG8gdGhpcyBtZXRob2QuCisKKyAgICAgID4+PiBwID0gUGF0aCgnc2V0dXAucHknKQorICAgICAgPj4+IHAuc3RhdCgpLnN0X3NpemUKKyAgICAgIDk1NgorICAgICAgPj4+IHAuc3RhdCgpLnN0X210aW1lCisgICAgICAxMzI3ODgzNTQ3Ljg1MjU1NAorCisKKy4uIG1ldGhvZDo6IFBhdGguY2htb2QobW9kZSkKKworICAgQ2hhbmdlIHRoZSBmaWxlIG1vZGUgYW5kIHBlcm1pc3Npb25zLCBsaWtlIDpmdW5jOmBvcy5jaG1vZGA6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9tb2RlCisgICAgICAzMzI3NworICAgICAgPj4+IHAuY2htb2QoMG80NDQpCisgICAgICA+Pj4gcC5zdGF0KCkuc3RfbW9kZQorICAgICAgMzMwNjAKKworCisuLiBtZXRob2Q6OiBQYXRoLmV4aXN0cygpCisKKyAgIFdoZXRoZXIgdGhlIHBhdGggcG9pbnRzIHRvIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5OjoKKworICAgICAgPj4+IFBhdGgoJy4nKS5leGlzdHMoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFBhdGgoJ3NldHVwLnB5JykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCcvZXRjJykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCdub25leGlzdGVudGZpbGUnKS5leGlzdHMoKQorICAgICAgRmFsc2UKKworICAgLi4gbm90ZTo6CisgICAgICBJZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCA6bWV0aDpgZXhpc3RzYCByZXR1cm5zIHdoZXRoZXIgdGhlCisgICAgICBzeW1saW5rICpwb2ludHMgdG8qIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5LgorCisKKy4uIG1ldGhvZDo6IFBhdGguZ2xvYihwYXR0ZXJuKQorCisgICBHbG9iIHRoZSBnaXZlbiAqcGF0dGVybiogaW4gdGhlIGRpcmVjdG9yeSByZXByZXNlbnRlZCBieSB0aGlzIHBhdGgsCisgICB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZmlsZXMgKG9mIGFueSBraW5kKTo6CisKKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgnLicpLmdsb2IoJyoucHknKSkKKyAgICAgIFtQb3NpeFBhdGgoJ3BhdGhsaWIucHknKSwgUG9zaXhQYXRoKCdzZXR1cC5weScpLCBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorICAgICAgPj4+IHNvcnRlZChQYXRoKCcuJykuZ2xvYignKi8qLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKV0KKworICAgVGhlICJgYCoqYGAiIHBhdHRlcm4gbWVhbnMgInRoaXMgZGlyZWN0b3J5IGFuZCBhbGwgc3ViZGlyZWN0b3JpZXMsCisgICByZWN1cnNpdmVseSIuICBJbiBvdGhlciB3b3JkcywgaXQgZW5hYmxlcyByZWN1cnNpdmUgZ2xvYmJpbmc6OgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoJy4nKS5nbG9iKCcqKi8qLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpLAorICAgICAgIFBvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyldCisKKyAgIC4uIG5vdGU6OgorICAgICAgVXNpbmcgdGhlICJgYCoqYGAiIHBhdHRlcm4gaW4gbGFyZ2UgZGlyZWN0b3J5IHRyZWVzIG1heSBjb25zdW1lCisgICAgICBhbiBpbm9yZGluYXRlIGFtb3VudCBvZiB0aW1lLgorCisKKy4uIG1ldGhvZDo6IFBhdGguZ3JvdXAoKQorCisgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGdyb3VwIG93bmluZyB0aGUgZmlsZS4gIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQKKyAgIGlmIHRoZSBmaWxlJ3MgZ2lkIGlzbid0IGZvdW5kIGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19kaXIoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5IChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgZGlyZWN0b3J5KSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2ZpbGUoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgcmVndWxhciBmaWxlIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgcmVndWxhciBmaWxlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX3N5bWxpbmsoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltYm9saWMgbGluaywgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdDsgb3RoZXIgZXJyb3JzIChzdWNoCisgICBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19zb2NrZXQoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgVW5peCBzb2NrZXQgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBVbml4IHNvY2tldCksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19maWZvKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIEZJRk8gKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBGSUZPKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2Jsb2NrX2RldmljZSgpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBibG9jayBkZXZpY2UgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBibG9jayBkZXZpY2UpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfY2hhcl9kZXZpY2UoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGRldmljZSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIGNoYXJhY3RlciBkZXZpY2UpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXRlcmRpcigpCisKKyAgIFdoZW4gdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5LCB5aWVsZCBwYXRoIG9iamVjdHMgb2YgdGhlIGRpcmVjdG9yeQorICAgY29udGVudHM6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ2RvY3MnKQorICAgICAgPj4+IGZvciBjaGlsZCBpbiBwLml0ZXJkaXIoKTogY2hpbGQKKyAgICAgIC4uLgorICAgICAgUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL190ZW1wbGF0ZXMnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL21ha2UuYmF0JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9pbmRleC5yc3QnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL19idWlsZCcpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvX3N0YXRpYycpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvTWFrZWZpbGUnKQorCisuLiBtZXRob2Q6OiBQYXRoLmxjaG1vZChtb2RlKQorCisgICBMaWtlIDptZXRoOmBQYXRoLmNobW9kYCBidXQsIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWJvbGljIGxpbmssIHRoZQorICAgc3ltYm9saWMgbGluaydzIG1vZGUgaXMgY2hhbmdlZCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisKKworLi4gbWV0aG9kOjogUGF0aC5sc3RhdCgpCisKKyAgIExpa2UgOm1ldGg6YFBhdGguc3RhdGAgYnV0LCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1ib2xpYyBsaW5rLCByZXR1cm4KKyAgIHRoZSBzeW1ib2xpYyBsaW5rJ3MgaW5mb3JtYXRpb24gcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgubWtkaXIobW9kZT0wbzc3NywgcGFyZW50cz1GYWxzZSkKKworICAgQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBhdCB0aGlzIGdpdmVuIHBhdGguICBJZiAqbW9kZSogaXMgZ2l2ZW4sIGl0IGlzCisgICBjb21iaW5lZCB3aXRoIHRoZSBwcm9jZXNzJyBgYHVtYXNrYGAgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG1vZGUKKyAgIGFuZCBhY2Nlc3MgZmxhZ3MuICBJZiB0aGUgcGF0aCBhbHJlYWR5IGV4aXN0cywgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYAorICAgaXMgcmFpc2VkLgorCisgICBJZiAqcGFyZW50cyogaXMgdHJ1ZSwgYW55IG1pc3NpbmcgcGFyZW50cyBvZiB0aGlzIHBhdGggYXJlIGNyZWF0ZWQKKyAgIGFzIG5lZWRlZDsgdGhleSBhcmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIHdpdGhvdXQgdGFraW5nCisgICAqbW9kZSogaW50byBhY2NvdW50IChtaW1pY2tpbmcgdGhlIFBPU0lYIGBgbWtkaXIgLXBgYCBjb21tYW5kKS4KKworICAgSWYgKnBhcmVudHMqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCksIGEgbWlzc2luZyBwYXJlbnQgcmFpc2VzCisgICA6ZXhjOmBGaWxlTm90Rm91bmRFcnJvcmAuCisKKworLi4gbWV0aG9kOjogUGF0aC5vcGVuKG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpCisKKyAgIE9wZW4gdGhlIGZpbGUgcG9pbnRlZCB0byBieSB0aGUgcGF0aCwgbGlrZSB0aGUgYnVpbHQtaW4gOmZ1bmM6YG9wZW5gCisgICBmdW5jdGlvbiBkb2VzOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdzZXR1cC5weScpCisgICAgICA+Pj4gd2l0aCBwLm9wZW4oKSBhcyBmOgorICAgICAgLi4uICAgICBmLnJlYWRsaW5lKCkKKyAgICAgIC4uLgorICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbicKKworCisuLiBtZXRob2Q6OiBQYXRoLm93bmVyKCkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB1c2VyIG93bmluZyB0aGUgZmlsZS4gIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQKKyAgIGlmIHRoZSBmaWxlJ3MgdWlkIGlzbid0IGZvdW5kIGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UuCisKKworLi4gbWV0aG9kOjogUGF0aC5yZW5hbWUodGFyZ2V0KQorCisgICBSZW5hbWUgdGhpcyBmaWxlIG9yIGRpcmVjdG9yeSB0byB0aGUgZ2l2ZW4gKnRhcmdldCouICAqdGFyZ2V0KiBjYW4gYmUKKyAgIGVpdGhlciBhIHN0cmluZyBvciBhbm90aGVyIHBhdGggb2JqZWN0OjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdmb28nKQorICAgICAgPj4+IHAub3BlbigndycpLndyaXRlKCdzb21lIHRleHQnKQorICAgICAgOQorICAgICAgPj4+IHRhcmdldCA9IFBhdGgoJ2JhcicpCisgICAgICA+Pj4gcC5yZW5hbWUodGFyZ2V0KQorICAgICAgPj4+IHRhcmdldC5vcGVuKCkucmVhZCgpCisgICAgICAnc29tZSB0ZXh0JworCisKKy4uIG1ldGhvZDo6IFBhdGgucmVwbGFjZSh0YXJnZXQpCisKKyAgIFJlbmFtZSB0aGlzIGZpbGUgb3IgZGlyZWN0b3J5IHRvIHRoZSBnaXZlbiAqdGFyZ2V0Ki4gIElmICp0YXJnZXQqIHBvaW50cworICAgdG8gYW4gZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnksIGl0IHdpbGwgYmUgdW5jb25kaXRpb25hbGx5IHJlcGxhY2VkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmVzb2x2ZSgpCisKKyAgIE1ha2UgdGhlIHBhdGggYWJzb2x1dGUsIHJlc29sdmluZyBhbnkgc3ltbGlua3MuICBBIG5ldyBwYXRoIG9iamVjdCBpcworICAgcmV0dXJuZWQ6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoKQorICAgICAgPj4+IHAKKyAgICAgIFBvc2l4UGF0aCgnLicpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliJykKKworICAgYCIuLiJgIGNvbXBvbmVudHMgYXJlIGFsc28gZWxpbWluYXRlZCAodGhpcyBpcyB0aGUgb25seSBtZXRob2QgdG8gZG8gc28pOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdkb2NzLy4uL3NldHVwLnB5JykKKyAgICAgID4+PiBwLnJlc29sdmUoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lL3BhdGhsaWIvc2V0dXAucHknKQorCisgICBJZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0LCA6ZXhjOmBGaWxlTm90Rm91bmRFcnJvcmAgaXMgcmFpc2VkLiAgSWYgYW4KKyAgIGluZmluaXRlIGxvb3AgaXMgZW5jb3VudGVyZWQgYWxvbmcgdGhlIHJlc29sdXRpb24gcGF0aCwKKyAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmdsb2IocGF0dGVybikKKworICAgVGhpcyBpcyBsaWtlIGNhbGxpbmcgOm1ldGg6YGdsb2JgIHdpdGggImBgKipgYCIgYWRkZWQgaW4gZnJvbnQgb2YgdGhlCisgICBnaXZlbiAqcGF0dGVybio6CisKKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgpLnJnbG9iKCIqLnB5IikpCisgICAgICBbUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpLAorICAgICAgIFBvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyldCisKKworLi4gbWV0aG9kOjogUGF0aC5ybWRpcigpCisKKyAgIFJlbW92ZSB0aGlzIGRpcmVjdG9yeS4gIFRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4KKworCisuLiBtZXRob2Q6OiBQYXRoLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlKQorCisgICBNYWtlIHRoaXMgcGF0aCBhIHN5bWJvbGljIGxpbmsgdG8gKnRhcmdldCouICBVbmRlciBXaW5kb3dzLAorICAgKnRhcmdldF9pc19kaXJlY3RvcnkqIG11c3QgYmUgdHJ1ZSAoZGVmYXVsdCBgYEZhbHNlYGApIGlmIHRoZSBsaW5rJ3MgdGFyZ2V0CisgICBpcyBhIGRpcmVjdG9yeS4gIFVuZGVyIFBPU0lYLCAqdGFyZ2V0X2lzX2RpcmVjdG9yeSoncyB2YWx1ZSBpcyBpZ25vcmVkLgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ215bGluaycpCisgICAgICA+Pj4gcC5zeW1saW5rX3RvKCdzZXR1cC5weScpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliL3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9zaXplCisgICAgICA5NTYKKyAgICAgID4+PiBwLmxzdGF0KCkuc3Rfc2l6ZQorICAgICAgOAorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSBvcmRlciBvZiBhcmd1bWVudHMgKGxpbmssIHRhcmdldCkgaXMgdGhlIHJldmVyc2UKKyAgICAgIG9mIDpmdW5jOmBvcy5zeW1saW5rYCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgudG91Y2gobW9kZT0wbzc3NywgZXhpc3Rfb2s9VHJ1ZSkKKworICAgQ3JlYXRlIGEgZmlsZSBhdCB0aGlzIGdpdmVuIHBhdGguICBJZiAqbW9kZSogaXMgZ2l2ZW4sIGl0IGlzIGNvbWJpbmVkCisgICB3aXRoIHRoZSBwcm9jZXNzJyBgYHVtYXNrYGAgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG1vZGUgYW5kIGFjY2VzcworICAgZmxhZ3MuICBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzIGlmICpleGlzdF9vayoKKyAgIGlzIHRydWUgKGFuZCBpdHMgbW9kaWZpY2F0aW9uIHRpbWUgaXMgdXBkYXRlZCB0byB0aGUgY3VycmVudCB0aW1lKSwKKyAgIG90aGVyd2lzZSA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIHJhaXNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnVubGluaygpCisKKyAgIFJlbW92ZSB0aGlzIGZpbGUgb3Igc3ltYm9saWMgbGluay4gIElmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSwKKyAgIHVzZSA6ZnVuYzpgUGF0aC5ybWRpcmAgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BkYi5yc3QgYi9Eb2MvbGlicmFyeS9wZGIucnN0CmluZGV4IGY0ZTM3YWMuLjQ4YThhNmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BkYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGRiLnJzdApAQCAtNDEsNyArNDEsNyBAQAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgIFRhYi1jb21wbGV0aW9uIHZpYSB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBpcyBhdmFpbGFibGUgZm9yIGNvbW1hbmRzIGFuZAogICAgY29tbWFuZCBhcmd1bWVudHMsIGUuZy4gdGhlIGN1cnJlbnQgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lcyBhcmUgb2ZmZXJlZCBhcwotICAgYXJndW1lbnRzIG9mIHRoZSBgYHByaW50YGAgY29tbWFuZC4KKyAgIGFyZ3VtZW50cyBvZiB0aGUgYGBwYGAgY29tbWFuZC4KIAogOmZpbGU6YHBkYi5weWAgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLiAgRm9yCiBleGFtcGxlOjoKQEAgLTMwOSw3ICszMDksNyBAQAogICAgYGBlbmRgYCB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLiBBbiBleGFtcGxlOjoKIAogICAgICAgKFBkYikgY29tbWFuZHMgMQotICAgICAgKGNvbSkgcHJpbnQgc29tZV92YXJpYWJsZQorICAgICAgKGNvbSkgcCBzb21lX3ZhcmlhYmxlCiAgICAgICAoY29tKSBlbmQKICAgICAgIChQZGIpCiAKQEAgLTQwMywxMyArNDAzLDE5IEBACiAKICAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgogCi0uLiBwZGJjb21tYW5kOjogcChyaW50KSBleHByZXNzaW9uCisuLiBwZGJjb21tYW5kOjogcCBleHByZXNzaW9uCiAKICAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzIHZhbHVlLgogCisgICAuLiBub3RlOjoKKworICAgICAgYGBwcmludCgpYGAgY2FuIGFsc28gYmUgdXNlZCwgYnV0IGlzIG5vdCBhIGRlYnVnZ2VyIGNvbW1hbmQgLS0tIHRoaXMgZXhlY3V0ZXMgdGhlCisgICAgICBQeXRob24gOmZ1bmM6YHByaW50YCBmdW5jdGlvbi4KKworCiAuLiBwZGJjb21tYW5kOjogcHAgZXhwcmVzc2lvbgogCi0gICBMaWtlIHRoZSA6cGRiY21kOmBwcmludGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcworICAgTGlrZSB0aGUgOnBkYmNtZDpgcGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcwogICAgcHJldHR5LXByaW50ZWQgdXNpbmcgdGhlIDptb2Q6YHBwcmludGAgbW9kdWxlLgogCiAuLiBwZGJjb21tYW5kOjogd2hhdGlzIGV4cHJlc3Npb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QgYi9Eb2MvbGlicmFyeS9waWNrbGUucnN0CmluZGV4IDI3M2ZiMzQuLmNlNTQ2N2YgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdApAQCAtOTQsNiArOTQsOSBAQAogICAgVGhlIDptb2Q6YGpzb25gIG1vZHVsZTogYSBzdGFuZGFyZCBsaWJyYXJ5IG1vZHVsZSBhbGxvd2luZyBKU09OCiAgICBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCiAKKworLi4gX3BpY2tsZS1wcm90b2NvbHM6CisKIERhdGEgc3RyZWFtIGZvcm1hdAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTExMyw3ICsxMTYsOSBAQAogZ2VuZXJhdGVkIGJ5IDptb2Q6YHBpY2tsZWAuICA6bW9kOmBwaWNrbGV0b29sc2Agc291cmNlIGNvZGUgaGFzIGV4dGVuc2l2ZQogY29tbWVudHMgYWJvdXQgb3Bjb2RlcyB1c2VkIGJ5IHBpY2tsZSBwcm90b2NvbHMuCiAKLVRoZXJlIGFyZSBjdXJyZW50bHkgNCBkaWZmZXJlbnQgcHJvdG9jb2xzIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBwaWNrbGluZy4KK1RoZXJlIGFyZSBjdXJyZW50bHkgNSBkaWZmZXJlbnQgcHJvdG9jb2xzIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBwaWNrbGluZy4KK1RoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZiBQeXRob24gbmVlZGVkCit0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCiAKICogUHJvdG9jb2wgdmVyc2lvbiAwIGlzIHRoZSBvcmlnaW5hbCAiaHVtYW4tcmVhZGFibGUiIHByb3RvY29sIGFuZCBpcwogICBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLgpAQCAtMTI1LDEwICsxMzAsMTUgQEAKICAgZWZmaWNpZW50IHBpY2tsaW5nIG9mIDp0ZXJtOmBuZXctc3R5bGUgY2xhc3NgXGVzLiAgUmVmZXIgdG8gOnBlcDpgMzA3YCBmb3IKICAgaW5mb3JtYXRpb24gYWJvdXQgaW1wcm92ZW1lbnRzIGJyb3VnaHQgYnkgcHJvdG9jb2wgMi4KIAotKiBQcm90b2NvbCB2ZXJzaW9uIDMgd2FzIGFkZGVkIGluIFB5dGhvbiAzLiAgSXQgaGFzIGV4cGxpY2l0IHN1cHBvcnQgZm9yCisqIFByb3RvY29sIHZlcnNpb24gMyB3YXMgYWRkZWQgaW4gUHl0aG9uIDMuMC4gIEl0IGhhcyBleHBsaWNpdCBzdXBwb3J0IGZvcgogICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzIGFuZCBjYW5ub3QgYmUgdW5waWNrbGVkIGJ5IFB5dGhvbiAyLnguICBUaGlzIGlzCi0gIHRoZSBkZWZhdWx0IGFzIHdlbGwgYXMgdGhlIGN1cnJlbnQgcmVjb21tZW5kZWQgcHJvdG9jb2w7IHVzZSBpdCB3aGVuZXZlcgotICBwb3NzaWJsZS4KKyAgdGhlIGRlZmF1bHQgcHJvdG9jb2wsIGFuZCB0aGUgcmVjb21tZW5kZWQgcHJvdG9jb2wgd2hlbiBjb21wYXRpYmlsaXR5IHdpdGgKKyAgb3RoZXIgUHl0aG9uIDMgdmVyc2lvbnMgaXMgcmVxdWlyZWQuCisKKyogUHJvdG9jb2wgdmVyc2lvbiA0IHdhcyBhZGRlZCBpbiBQeXRob24gMy40LiAgSXQgYWRkcyBzdXBwb3J0IGZvciB2ZXJ5IGxhcmdlCisgIG9iamVjdHMsIHBpY2tsaW5nIG1vcmUga2luZHMgb2Ygb2JqZWN0cywgYW5kIHNvbWUgZGF0YSBmb3JtYXQKKyAgb3B0aW1pemF0aW9ucy4gIFJlZmVyIHRvIDpwZXA6YDMxNTRgIGZvciBpbmZvcm1hdGlvbiBhYm91dCBpbXByb3ZlbWVudHMKKyAgYnJvdWdodCBieSBwcm90b2NvbCA0LgogCiAuLiBub3RlOjoKICAgIFNlcmlhbGl6YXRpb24gaXMgYSBtb3JlIHByaW1pdGl2ZSBub3Rpb24gdGhhbiBwZXJzaXN0ZW5jZTsgYWx0aG91Z2gKQEAgLTE1NiwxMyArMTY2LDE2IEBACiAKIC4uIGRhdGE6OiBISUdIRVNUX1BST1RPQ09MCiAKLSAgIFRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24gYXZhaWxhYmxlLiAgVGhpcyB2YWx1ZSBjYW4gYmUgcGFzc2VkIGFzIGEKLSAgICpwcm90b2NvbCogdmFsdWUuCisgICBBbiBpbnRlZ2VyLCB0aGUgaGlnaGVzdCA6cmVmOmBwcm90b2NvbCB2ZXJzaW9uIDxwaWNrbGUtcHJvdG9jb2xzPmAKKyAgIGF2YWlsYWJsZS4gIFRoaXMgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBhICpwcm90b2NvbCogdmFsdWUgdG8gZnVuY3Rpb25zCisgICA6ZnVuYzpgZHVtcGAgYW5kIDpmdW5jOmBkdW1wc2AgYXMgd2VsbCBhcyB0aGUgOmNsYXNzOmBQaWNrbGVyYAorICAgY29uc3RydWN0b3IuCiAKIC4uIGRhdGE6OiBERUZBVUxUX1BST1RPQ09MCiAKLSAgIFRoZSBkZWZhdWx0IHByb3RvY29sIHVzZWQgZm9yIHBpY2tsaW5nLiAgTWF5IGJlIGxlc3MgdGhhbiBISUdIRVNUX1BST1RPQ09MLgotICAgQ3VycmVudGx5IHRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDMsIGEgbmV3IHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgorICAgQW4gaW50ZWdlciwgdGhlIGRlZmF1bHQgOnJlZjpgcHJvdG9jb2wgdmVyc2lvbiA8cGlja2xlLXByb3RvY29scz5gIHVzZWQKKyAgIGZvciBwaWNrbGluZy4gIE1heSBiZSBsZXNzIHRoYW4gOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgLiAgQ3VycmVudGx5IHRoZQorICAgZGVmYXVsdCBwcm90b2NvbCBpcyAzLCBhIG5ldyBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuCiAKIAogVGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIG1ha2UgdGhlIHBpY2tsaW5nCkBAIC0xNzMsMTMgKzE4NiwxMCBAQAogICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmoqIHRvIHRoZSBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAgKmZpbGUqLgogICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAuCiAKLSAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7Ci0gICBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYQotICAgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgotCi0gICBTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24KLSAgIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZgotICAgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCisgICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCwgYW4gaW50ZWdlciwgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlCisgICB0aGUgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAgdG8gOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgLgorICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgOmRhdGE6YERFRkFVTFRfUFJPVE9DT0xgLiAgSWYgYSBuZWdhdGl2ZQorICAgbnVtYmVyIGlzIHNwZWNpZmllZCwgOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgIGlzIHNlbGVjdGVkLgogCiAgICBUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBieXRlcwogICAgYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhbiBvbi1kaXNrIGZpbGUgb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgYQpAQCAtMTg3LDY0ICsxOTcsNTcgQEAKICAgIGludGVyZmFjZS4KIAogICAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAotICAgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KKyAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsIHNvCisgICB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KIAogLi4gZnVuY3Rpb246OiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsIFwqLCBmaXhfaW1wb3J0cz1UcnVlKQogCi0gICBSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIDpjbGFzczpgYnl0ZXNgCi0gICBvYmplY3QsIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byBhIGZpbGUuCisgICBSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCwKKyAgIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byBhIGZpbGUuCiAKLSAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7Ci0gICBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYQotICAgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgotCi0gICBTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24KLSAgIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZgotICAgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCi0KLSAgIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvCi0gICBtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCwKLSAgIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICBBcmd1bWVudHMgKnByb3RvY29sKiBhbmQgKmZpeF9pbXBvcnRzKiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KKyAgIDpmdW5jOmBkdW1wYC4KIAogLi4gZnVuY3Rpb246OiBsb2FkKGZpbGUsIFwqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpCiAKLSAgIFJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAgKmZpbGUqCi0gICBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkIHRoZXJlaW4uICBUaGlzIGlzCi0gICBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLgorICAgUmVhZCBhIHBpY2tsZWQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG9wZW4gOnRlcm06YGZpbGUgb2JqZWN0YAorICAgKmZpbGUqIGFuZCByZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbi4KKyAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYC4KIAotICAgVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbAotICAgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncyByZXByZXNlbnRhdGlvbiBhcmUKLSAgIGlnbm9yZWQuCisgICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vCisgICBwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzCisgICByZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC4KIAogICAgVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzIGFuCiAgICBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEJvdGgKLSAgIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhbiBvbi1kaXNrIGZpbGUgb3BlbmVkCi0gICBmb3IgYmluYXJ5IHJlYWRpbmcsIGEgOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0CisgICBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IKKyAgIGJpbmFyeSByZWFkaW5nLCBhIDpjbGFzczpgaW8uQnl0ZXNJT2Agb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdAogICAgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KIAogICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAogICAgd2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkCi0gICBieSBQeXRob24gMi54LiAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGQKLSAgIFB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUgKmVuY29kaW5nKiBhbmQKKyAgIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGQKKyAgIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZSAqZW5jb2RpbmcqIGFuZAogICAgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uCi0gICAyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4KKyAgIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4gIFRoZSAqZW5jb2RpbmcqIGNhbgorICAgYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgYXMgYnl0ZXMgb2JqZWN0cy4KIAogLi4gZnVuY3Rpb246OiBsb2FkcyhieXRlc19vYmplY3QsIFwqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpCiAKICAgIFJlYWQgYSBwaWNrbGVkIG9iamVjdCBoaWVyYXJjaHkgZnJvbSBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBhbmQgcmV0dXJuIHRoZQogICAgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluCiAKLSAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2wKLSAgIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlCi0gICBpZ25vcmVkLgorICAgVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubworICAgcHJvdG9jb2wgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncworICAgcmVwcmVzZW50YXRpb24gYXJlIGlnbm9yZWQuCiAKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiwKICAgIHdoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZAotICAgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCi0gICBQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlICplbmNvZGluZyogYW5kCisgICBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCisgICBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGUgKmVuY29kaW5nKiBhbmQKICAgICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbgotICAgMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuCisgICAyOyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4KKyAgIGJlICdieXRlcycgdG8gcmVhZCB0aGVzZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAKIAogVGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIGRlZmluZXMgdGhyZWUgZXhjZXB0aW9uczoKQEAgLTI3OSwyMSArMjgyLDE5IEBACiAKICAgIFRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS4KIAotICAgVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDsKLSAgIHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhCi0gICBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLjAuCi0KLSAgIFNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvbgotICAgc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mCi0gICBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKyAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50LCBhbiBpbnRlZ2VyLCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UKKyAgIHRoZSBnaXZlbiBwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCB0byA6ZGF0YTpgSElHSEVTVF9QUk9UT0NPTGAuCisgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyA6ZGF0YTpgREVGQVVMVF9QUk9UT0NPTGAuICBJZiBhIG5lZ2F0aXZlCisgICBudW1iZXIgaXMgc3BlY2lmaWVkLCA6ZGF0YTpgSElHSEVTVF9QUk9UT0NPTGAgaXMgc2VsZWN0ZWQuCiAKICAgIFRoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIGJ5dGVzCiAgICBhcmd1bWVudC4gIEl0IGNhbiB0aHVzIGJlIGFuIG9uLWRpc2sgZmlsZSBvcGVuZWQgZm9yIGJpbmFyeSB3cml0aW5nLCBhCi0gICA6Y2xhc3M6YGlvLkJ5dGVzSU9gIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorICAgOmNsYXNzOmBpby5CeXRlc0lPYCBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzCisgICBpbnRlcmZhY2UuCiAKICAgIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvCi0gICBtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCwKLSAgIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICBtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLCBzbworICAgdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuCiAKICAgIC4uIG1ldGhvZDo6IGR1bXAob2JqKQogCkBAIC0zNTUsMTYgKzM1NiwxNyBAQAogCiAgICBUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMgYW4KICAgIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgQm90aAotICAgbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGFuIG9uLWRpc2sgZmlsZSBvYmplY3Qgb3BlbmVkCi0gICBmb3IgYmluYXJ5IHJlYWRpbmcsIGEgOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0Ci0gICB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorICAgbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGFuIG9uLWRpc2sgZmlsZSBvYmplY3QKKyAgIG9wZW5lZCBmb3IgYmluYXJ5IHJlYWRpbmcsIGEgOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlcgorICAgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCiAgICB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQKLSAgIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAotICAgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSAqZW5jb2RpbmcqIGFuZAorICAgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorICAgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kCiAgICAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KLSAgIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorICAgMjsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuCisgICBiZSAnYnl0ZXMnIHRvIHJlYWQgdGhlc2Ugw584LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAKICAgIC4uIG1ldGhvZDo6IGxvYWQoKQogCkBAIC00MDksNyArNDExLDggQEAKIAogKiB0dXBsZXMsIGxpc3RzLCBzZXRzLCBhbmQgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgb25seSBwaWNrbGFibGUgb2JqZWN0cwogCi0qIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUKKyogZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZSAodXNpbmcgOmtleXdvcmQ6YGRlZmAsIG5vdAorICA6a2V5d29yZDpgbGFtYmRhYCkKIAogKiBidWlsdC1pbiBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlCiAKQEAgLTQyNyw3ICs0MzAsNyBAQAogOmZ1bmM6YHN5cy5zZXRyZWN1cnNpb25saW1pdGAuCiAKIE5vdGUgdGhhdCBmdW5jdGlvbnMgKGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQpIGFyZSBwaWNrbGVkIGJ5ICJmdWxseSBxdWFsaWZpZWQiCi1uYW1lIHJlZmVyZW5jZSwgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGZ1bmN0aW9uIG5hbWUgaXMKK25hbWUgcmVmZXJlbmNlLCBub3QgYnkgdmFsdWUuIFsjXV8gIFRoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lIGlzCiBwaWNrbGVkLCBhbG9uZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4uICBOZWl0aGVyCiB0aGUgZnVuY3Rpb24ncyBjb2RlLCBub3IgYW55IG9mIGl0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIGFyZSBwaWNrbGVkLiAgVGh1cyB0aGUKIGRlZmluaW5nIG1vZHVsZSBtdXN0IGJlIGltcG9ydGFibGUgaW4gdGhlIHVucGlja2xpbmcgZW52aXJvbm1lbnQsIGFuZCB0aGUgbW9kdWxlCkBAIC00ODMsMTIgKzQ4NiwyOSBAQAogQ2xhc3NlcyBjYW4gYWx0ZXIgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGJ5IHByb3ZpZGluZyBvbmUgb3Igc2V2ZXJhbCBzcGVjaWFsCiBtZXRob2RzOgogCisuLiBtZXRob2Q6OiBvYmplY3QuX19nZXRuZXdhcmdzX2V4X18oKQorCisgICBJbiBwcm90b2NvbHMgNCBhbmQgbmV3ZXIsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRzIHRoZQorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCBtZXRob2QgY2FuIGRpY3RhdGUgdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlCisgICA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24gdW5waWNrbGluZy4gIFRoZSBtZXRob2QgbXVzdCByZXR1cm4gYSBwYWlyCisgICBgYChhcmdzLCBrd2FyZ3MpYGAgd2hlcmUgKmFyZ3MqIGlzIGEgdHVwbGUgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMKKyAgIGFuZCAqa3dhcmdzKiBhIGRpY3Rpb25hcnkgb2YgbmFtZWQgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RpbmcgdGhlCisgICBvYmplY3QuICBUaG9zZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uCisgICB1bnBpY2tsaW5nLgorCisgICBZb3Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIG1ldGhvZCBpZiB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCBvZiB5b3VyCisgICBjbGFzcyByZXF1aXJlcyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiAgT3RoZXJ3aXNlLCBpdCBpcyByZWNvbW1lbmRlZCBmb3IKKyAgIGNvbXBhdGliaWxpdHkgdG8gaW1wbGVtZW50IDptZXRoOmBfX2dldG5ld2FyZ3NfX2AuCisKKwogLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0bmV3YXJnc19fKCkKIAotICAgSW4gcHJvdG9jb2wgMiBhbmQgbmV3ZXIsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRzIHRoZSA6bWV0aDpgX19nZXRuZXdhcmdzX19gCi0gICBtZXRob2QgY2FuIGRpY3RhdGUgdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbgotICAgdW5waWNrbGluZy4gIFRoaXMgaXMgb2Z0ZW4gbmVlZGVkIGZvciBjbGFzc2VzIHdob3NlIDptZXRoOmBfX25ld19fYCBtZXRob2QKLSAgIHJlcXVpcmVzIGFyZ3VtZW50cy4KKyAgIFRoaXMgbWV0aG9kIHNlcnZlIGEgc2ltaWxhciBwdXJwb3NlIGFzIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgYnV0CisgICBmb3IgcHJvdG9jb2xzIDIgYW5kIG5ld2VyLiAgSXQgbXVzdCByZXR1cm4gYSB0dXBsZSBvZiBhcmd1bWVudHMgYGFyZ3NgCisgICB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uIHVucGlja2xpbmcuCisKKyAgIEluIHByb3RvY29scyA0IGFuZCBuZXdlciwgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCB3aWxsIG5vdCBiZSBjYWxsZWQgaWYKKyAgIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgaXMgZGVmaW5lZC4KIAogCiAuLiBtZXRob2Q6OiBvYmplY3QuX19nZXRzdGF0ZV9fKCkKQEAgLTUyMCwxMCArNTQwLDEwIEBACiAKICAgIEF0IHVucGlja2xpbmcgdGltZSwgc29tZSBtZXRob2RzIGxpa2UgOm1ldGg6YF9fZ2V0YXR0cl9fYCwKICAgIDptZXRoOmBfX2dldGF0dHJpYnV0ZV9fYCwgb3IgOm1ldGg6YF9fc2V0YXR0cl9fYCBtYXkgYmUgY2FsbGVkIHVwb24gdGhlCi0gICBpbnN0YW5jZS4gIEluIGNhc2UgdGhvc2UgbWV0aG9kcyByZWx5IG9uIHNvbWUgaW50ZXJuYWwgaW52YXJpYW50IGJlaW5nIHRydWUsCi0gICB0aGUgdHlwZSBzaG91bGQgaW1wbGVtZW50IDptZXRoOmBfX2dldG5ld2FyZ3NfX2AgdG8gZXN0YWJsaXNoIHN1Y2ggYW4KLSAgIGludmFyaWFudDsgb3RoZXJ3aXNlLCBuZWl0aGVyIDptZXRoOmBfX25ld19fYCBub3IgOm1ldGg6YF9faW5pdF9fYCB3aWxsIGJlCi0gICBjYWxsZWQuCisgICBpbnN0YW5jZS4gIEluIGNhc2UgdGhvc2UgbWV0aG9kcyByZWx5IG9uIHNvbWUgaW50ZXJuYWwgaW52YXJpYW50IGJlaW5nCisgICB0cnVlLCB0aGUgdHlwZSBzaG91bGQgaW1wbGVtZW50IDptZXRoOmBfX2dldG5ld2FyZ3NfX2Agb3IKKyAgIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgdG8gZXN0YWJsaXNoIHN1Y2ggYW4gaW52YXJpYW50OyBvdGhlcndpc2UsCisgICBuZWl0aGVyIDptZXRoOmBfX25ld19fYCBub3IgOm1ldGg6YF9faW5pdF9fYCB3aWxsIGJlIGNhbGxlZC4KIAogLi4gaW5kZXg6OiBwYWlyOiBjb3B5OyBwcm90b2NvbAogCkBAIC01MzUsNyArNTU1LDcgQEAKIAogQWx0aG91Z2ggcG93ZXJmdWwsIGltcGxlbWVudGluZyA6bWV0aDpgX19yZWR1Y2VfX2AgZGlyZWN0bHkgaW4geW91ciBjbGFzc2VzIGlzCiBlcnJvciBwcm9uZS4gIEZvciB0aGlzIHJlYXNvbiwgY2xhc3MgZGVzaWduZXJzIHNob3VsZCB1c2UgdGhlIGhpZ2gtbGV2ZWwKLWludGVyZmFjZSAoaS5lLiwgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCwgOm1ldGg6YF9fZ2V0c3RhdGVfX2AgYW5kCitpbnRlcmZhY2UgKGkuZS4sIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AsIDptZXRoOmBfX2dldHN0YXRlX19gIGFuZAogOm1ldGg6YF9fc2V0c3RhdGVfX2ApIHdoZW5ldmVyIHBvc3NpYmxlLiAgV2Ugd2lsbCBzaG93LCBob3dldmVyLCBjYXNlcyB3aGVyZQogdXNpbmcgOm1ldGg6YF9fcmVkdWNlX19gIGlzIHRoZSBvbmx5IG9wdGlvbiBvciBsZWFkcyB0byBtb3JlIGVmZmljaWVudCBwaWNrbGluZwogb3IgYm90aC4KQEAgLTg4Myw2ICs5MDMsOSBAQAogCiAuLiBbI10gRG9uJ3QgY29uZnVzZSB0aGlzIHdpdGggdGhlIDptb2Q6YG1hcnNoYWxgIG1vZHVsZQogCisuLiBbI10gVGhpcyBpcyB3aHkgOmtleXdvcmQ6YGxhbWJkYWAgZnVuY3Rpb25zIGNhbm5vdCBiZSBwaWNrbGVkOiAgYWxsCisgICAgOmtleXdvcmQ6YGxhbWJkYWAgZnVuY3Rpb25zIHNoYXJlIHRoZSBzYW1lIG5hbWU6ICBgYDxsYW1iZGE+YGAuCisKIC4uIFsjXSBUaGUgZXhjZXB0aW9uIHJhaXNlZCB3aWxsIGxpa2VseSBiZSBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgb3IgYW4KICAgIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBidXQgaXQgY291bGQgYmUgc29tZXRoaW5nIGVsc2UuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BrZ3V0aWwucnN0IGIvRG9jL2xpYnJhcnkvcGtndXRpbC5yc3QKaW5kZXggN2M0ZjkxMi4uMTNlYTdiOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGtndXRpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGtndXRpbC5yc3QKQEAgLTc0LDE1ICs3NCwxNyBAQAogCiAgICBSZXRyaWV2ZSBhIDpwZXA6YDMwMmAgbW9kdWxlIGxvYWRlciBmb3IgdGhlIGdpdmVuICpmdWxsbmFtZSouCiAKLSAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCA6ZnVuYzpgaW1wb3J0bGliLmZpbmRfbG9hZGVyYCB0aGF0Ci0gICBzZXRzIHRoZSAqcGF0aCogYXJndW1lbnQgY29ycmVjdGx5IHdoZW4gc2VhcmNoaW5nIGZvciBzdWJtb2R1bGVzLCBhbmQKLSAgIGFsc28gZW5zdXJlcyBwYXJlbnQgcGFja2FnZXMgKGlmIGFueSkgYXJlIGltcG9ydGVkIGJlZm9yZSBzZWFyY2hpbmcgZm9yCi0gICBzdWJtb2R1bGVzLgorICAgVGhpcyBpcyBhIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdyYXBwZXIgYXJvdW5kCisgICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjYCB0aGF0IGNvbnZlcnRzIG1vc3QgZmFpbHVyZXMgdG8KKyAgIDpleGM6YEltcG9ydEVycm9yYCBhbmQgb25seSByZXR1cm5zIHRoZSBsb2FkZXIgcmF0aGVyIHRoYW4gdGhlIGZ1bGwKKyAgIDpjbGFzczpgTW9kdWxlU3BlY2AuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBVcGRhdGVkIHRvIGJlIGJhc2VkIGRpcmVjdGx5IG9uIDptb2Q6YGltcG9ydGxpYmAgcmF0aGVyIHRoYW4gcmVseWluZwogICAgICAgb24gdGhlIHBhY2thZ2UgaW50ZXJuYWwgUEVQIDMwMiBpbXBvcnQgZW11bGF0aW9uLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXBkYXRlZCB0byBiZSBiYXNlZCBvbiA6cGVwOmA0NTFgCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X2ltcG9ydGVyKHBhdGhfaXRlbSkKIApAQCAtMTA5LDE0ICsxMTEsMTMgQEAKICAgIG5vdCBhbHJlYWR5IGltcG9ydGVkLCBpdHMgY29udGFpbmluZyBwYWNrYWdlIChpZiBhbnkpIGlzIGltcG9ydGVkLCBpbiBvcmRlcgogICAgdG8gZXN0YWJsaXNoIHRoZSBwYWNrYWdlIGBgX19wYXRoX19gYC4KIAotICAgVGhpcyBmdW5jdGlvbiB1c2VzIDpmdW5jOmBpdGVyX2ltcG9ydGVyc2AsIGFuZCBpcyB0aHVzIHN1YmplY3QgdG8gdGhlIHNhbWUKLSAgIGxpbWl0YXRpb25zIHJlZ2FyZGluZyBwbGF0Zm9ybS1zcGVjaWZpYyBzcGVjaWFsIGltcG9ydCBsb2NhdGlvbnMgc3VjaCBhcyB0aGUKLSAgIFdpbmRvd3MgcmVnaXN0cnkuCi0KICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBVcGRhdGVkIHRvIGJlIGJhc2VkIGRpcmVjdGx5IG9uIDptb2Q6YGltcG9ydGxpYmAgcmF0aGVyIHRoYW4gcmVseWluZwogICAgICAgb24gdGhlIHBhY2thZ2UgaW50ZXJuYWwgUEVQIDMwMiBpbXBvcnQgZW11bGF0aW9uLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXBkYXRlZCB0byBiZSBiYXNlZCBvbiA6cGVwOmA0NTFgCisKIAogLi4gZnVuY3Rpb246OiBpdGVyX2ltcG9ydGVycyhmdWxsbmFtZT0nJykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0IGIvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CmluZGV4IGEyNjczNjguLjZhMmQ2YjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKQEAgLTE2LDI2ICsxNiwyNCBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSAicHJvcGVydHkgbGlzdCIKLVhNTCBmaWxlcyB1c2VkIG1haW5seSBieSBNYWMgT1MgWC4KK2ZpbGVzIHVzZWQgbWFpbmx5IGJ5IE1hYyBPUyBYIGFuZCBzdXBwb3J0cyBib3RoIGJpbmFyeSBhbmQgWE1MIHBsaXN0IGZpbGVzLgogCi1UaGUgcHJvcGVydHkgbGlzdCAoYGAucGxpc3RgYCkgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgWE1MIHBpY2tsZSBzdXBwb3J0aW5nCitUaGUgcHJvcGVydHkgbGlzdCAoYGAucGxpc3RgYCkgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgc2VyaWFsaXphdGlvbiBzdXBwb3J0aW5nCiBiYXNpYyBvYmplY3QgdHlwZXMsIGxpa2UgZGljdGlvbmFyaWVzLCBsaXN0cywgbnVtYmVycyBhbmQgc3RyaW5ncy4gIFVzdWFsbHkgdGhlCiB0b3AgbGV2ZWwgb2JqZWN0IGlzIGEgZGljdGlvbmFyeS4KIAotVG8gd3JpdGUgb3V0IGFuZCB0byBwYXJzZSBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgOmZ1bmM6YHdyaXRlUGxpc3RgIGFuZAotOmZ1bmM6YHJlYWRQbGlzdGAgZnVuY3Rpb25zLgorVG8gd3JpdGUgb3V0IGFuZCB0byBwYXJzZSBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgOmZ1bmM6YGR1bXBgIGFuZAorOmZ1bmM6YGxvYWRgIGZ1bmN0aW9ucy4KIAotVG8gd29yayB3aXRoIHBsaXN0IGRhdGEgaW4gYnl0ZXMgb2JqZWN0cywgdXNlIDpmdW5jOmB3cml0ZVBsaXN0VG9CeXRlc2AKLWFuZCA6ZnVuYzpgcmVhZFBsaXN0RnJvbUJ5dGVzYC4KK1RvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHVzZSA6ZnVuYzpgZHVtcHNgCithbmQgOmZ1bmM6YGxvYWRzYC4KIAogVmFsdWVzIGNhbiBiZSBzdHJpbmdzLCBpbnRlZ2VycywgZmxvYXRzLCBib29sZWFucywgdHVwbGVzLCBsaXN0cywgZGljdGlvbmFyaWVzCi0oYnV0IG9ubHkgd2l0aCBzdHJpbmcga2V5cyksIDpjbGFzczpgRGF0YWAgb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAKLW9iamVjdHMuICBTdHJpbmcgdmFsdWVzIChpbmNsdWRpbmcgZGljdGlvbmFyeSBrZXlzKSBoYXZlIHRvIGJlIHVuaWNvZGUgc3RyaW5ncyAtLQotdGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IGFzIFVURi04LgorKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCA6Y2xhc3M6YERhdGFgLCA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlc2FycmF5YAorb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAgb2JqZWN0cy4KIAotVGhlIGBgPGRhdGE+YGAgcGxpc3QgdHlwZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgOmNsYXNzOmBEYXRhYCBjbGFzcy4gIFRoaXMgaXMKLWEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFB5dGhvbiBieXRlcyBvYmplY3QuICBVc2UgOmNsYXNzOmBEYXRhYCBpZiB5b3VyIHN0cmluZ3MKLWNvbnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIE5ldyBBUEksIG9sZCBBUEkgZGVwcmVjYXRlZC4gIFN1cHBvcnQgZm9yIGJpbmFyeSBmb3JtYXQgcGxpc3RzIGFkZGVkLgogCiAuLiBzZWVhbHNvOjoKIApAQCAtNDUsMzcgKzQzLDE0NyBAQAogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCi0uLiBmdW5jdGlvbjo6IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorLi4gZnVuY3Rpb246OiBsb2FkKGZwLCBcKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KQogCi0gICBSZWFkIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUgb3IgYSAocmVhZGFibGUgYW5kCi0gICBiaW5hcnkpIGZpbGUgb2JqZWN0LiAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhCisgICBSZWFkIGEgcGxpc3QgZmlsZS4gKmZwKiBzaG91bGQgYmUgYSByZWFkYWJsZSBhbmQgYmluYXJ5IGZpbGUgb2JqZWN0LgorICAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhCiAgICBkaWN0aW9uYXJ5KS4KIAotICAgVGhlIFhNTCBkYXRhIGlzIHBhcnNlZCB1c2luZyB0aGUgRXhwYXQgcGFyc2VyIGZyb20gOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgCi0gICAtLSBzZWUgaXRzIGRvY3VtZW50YXRpb24gZm9yIHBvc3NpYmxlIGV4Y2VwdGlvbnMgb24gaWxsLWZvcm1lZCBYTUwuCi0gICBVbmtub3duIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQgYnkgdGhlIHBsaXN0IHBhcnNlci4KKyAgIFRoZSAqZm10KiBpcyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlIGFuZCB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgdmFsaWQ6CisKKyAgICogOmRhdGE6YE5vbmVgOiBBdXRvZGV0ZWN0IHRoZSBmaWxlIGZvcm1hdAorCisgICAqIDpkYXRhOmBGTVRfWE1MYDogWE1MIGZpbGUgZm9ybWF0CisKKyAgICogOmRhdGE6YEZNVF9CSU5BUllgOiBCaW5hcnkgcGxpc3QgZm9ybWF0CisKKyAgIElmICp1c2VfYnVpbHRpbl90eXBlcyogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpIGJpbmFyeSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKKyAgIGFzIGluc3RhbmNlcyBvZiA6Y2xhc3M6YGJ5dGVzYCwgb3RoZXJ3aXNlIGl0IGlzIHJldHVybmVkIGFzIGluc3RhbmNlcyBvZgorICAgOmNsYXNzOmBEYXRhYC4KKworICAgVGhlICpkaWN0X3R5cGUqIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGRpY3Rpb25hcmllcyB0aGF0IGFyZSByZWFkIGZyb20gdGhlCisgICBwbGlzdCBmaWxlLiBUaGUgZXhhY3Qgc3RydWN0dXJlIG9mIHRoZSBwbGlzdCBjYW4gYmUgcmVjb3ZlcmVkIGJ5IHVzaW5nCisgICA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCAoYWx0aG91Z2ggdGhlIG9yZGVyIG9mIGtleXMgc2hvdWxkbid0IGJlCisgICBpbXBvcnRhbnQgaW4gcGxpc3QgZmlsZXMpLgorCisgICBYTUwgZGF0YSBmb3IgdGhlIDpkYXRhOmBGTVRfWE1MYCBmb3JtYXQgaXMgcGFyc2VkIHVzaW5nIHRoZSBFeHBhdCBwYXJzZXIKKyAgIGZyb20gOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgIC0tIHNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgcG9zc2libGUKKyAgIGV4Y2VwdGlvbnMgb24gaWxsLWZvcm1lZCBYTUwuICBVbmtub3duIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQKKyAgIGJ5IHRoZSBwbGlzdCBwYXJzZXIuCisKKyAgIFRoZSBwYXJzZXIgZm9yIHRoZSBiaW5hcnkgZm9ybWF0IHJhaXNlcyA6ZXhjOmBJbnZhbGlkRmlsZUV4Y2VwdGlvbmAKKyAgIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHBhcnNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBsb2FkcyhkYXRhLCBcKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KQorCisgICBMb2FkIGEgcGxpc3QgZnJvbSBhIGJ5dGVzIG9iamVjdC4gU2VlIDpmdW5jOmBsb2FkYCBmb3IgYW4gZXhwbGFuYXRpb24gb2YKKyAgIHRoZSBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBkdW1wKHZhbHVlLCBmcCwgXCosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKyAgIFdyaXRlICp2YWx1ZSogdG8gYSBwbGlzdCBmaWxlLiAqRnAqIHNob3VsZCBiZSBhIHdyaXRhYmxlLCBiaW5hcnkKKyAgIGZpbGUgb2JqZWN0LgorCisgICBUaGUgKmZtdCogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIHBsaXN0IGZpbGUgYW5kIGNhbiBiZQorICAgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICAqIDpkYXRhOmBGTVRfWE1MYDogWE1MIGZvcm1hdHRlZCBwbGlzdCBmaWxlCisKKyAgICogOmRhdGE6YEZNVF9CSU5BUllgOiBCaW5hcnkgZm9ybWF0dGVkIHBsaXN0IGZpbGUKKworICAgV2hlbiAqc29ydF9rZXlzKiBpcyB0cnVlICh0aGUgZGVmYXVsdCkgdGhlIGtleXMgZm9yIGRpY3Rpb25hcmllcyB3aWxsIGJlCisgICB3cml0dGVuIHRvIHRoZSBwbGlzdCBpbiBzb3J0ZWQgb3JkZXIsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgd3JpdHRlbiBpbgorICAgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGUgZGljdGlvbmFyeS4KKworICAgV2hlbiAqc2tpcGtleXMqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgdGhlIGZ1bmN0aW9uIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgCisgICB3aGVuIGEga2V5IG9mIGEgZGljdGlvbmFyeSBpcyBub3QgYSBzdHJpbmcsIG90aGVyd2lzZSBzdWNoIGtleXMgYXJlIHNraXBwZWQuCisKKyAgIEEgOmV4YzpgVHlwZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb2JqZWN0IGlzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUgb3IKKyAgIGEgY29udGFpbmVyIHRoYXQgY29udGFpbnMgb2JqZWN0cyBvZiB1bnN1cHBvcnRlZCB0eXBlcy4KKworICAgQW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgd2lsbCBiZSByYWlzZWQgZm9yIGludGVnZXIgdmFsdWVzIHRoYXQgY2Fubm90CisgICBiZSByZXByZXNlbnRlZCBpbiAoYmluYXJ5KSBwbGlzdCBmaWxlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBkdW1wcyh2YWx1ZSwgXCosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKyAgIFJldHVybiAqdmFsdWUqIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4gU2VlCisgICB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgOmZ1bmM6YGR1bXBgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZAorICAgYXJndW1lbnRzIG9mIHRoaXMgZnVuY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZDoKKworLi4gZnVuY3Rpb246OiByZWFkUGxpc3QocGF0aE9yRmlsZSkKKworICAgUmVhZCBhIHBsaXN0IGZpbGUuICpwYXRoT3JGaWxlKiBtYXkgYmUgZWl0aGVyIGEgZmlsZSBuYW1lIG9yIGEgKHJlYWRhYmxlCisgICBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4gUmV0dXJucyB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkKKyAgIGlzIGEgZGljdGlvbmFyeSkuCisKKyAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgOmZ1bmM6YGxvYWRgIHRvIGRvIHRoZSBhY3R1YWwgd29yaywgdGhlIHRoZSBkb2N1bWVudGF0aW9uCisgICBvZiA6ZnVuYzpgdGhhdCBmdW5jdGlvbiA8bG9hZD5gIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBEaWN0IHZhbHVlcyBpbiB0aGUgcmVzdWx0IGhhdmUgYSBgYF9fZ2V0YXR0cl9fYGAgbWV0aG9kIHRoYXQgZGVmZXJzCisgICAgICB0byBgYF9fZ2V0aXRlbV9gYC4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIGF0dHJpYnV0ZSBhY2Nlc3MgdG8KKyAgICAgIGFjY2VzcyBpdGVtcyBvZiB0aGVzZSBkaWN0aW9uYXJpZXMuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIDpmdW5jOmBsb2FkYCBpbnN0ZWFkLgogCiAKIC4uIGZ1bmN0aW9uOjogd3JpdGVQbGlzdChyb290T2JqZWN0LCBwYXRoT3JGaWxlKQogCi0gICAgV3JpdGUgKnJvb3RPYmplY3QqIHRvIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUKLSAgICBvciBhICh3cml0YWJsZSBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4KKyAgIFdyaXRlICpyb290T2JqZWN0KiB0byBhbiBYTUwgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBiZSBlaXRoZXIgYSBmaWxlIG5hbWUKKyAgIG9yIGEgKHdyaXRhYmxlIGFuZCBiaW5hcnkpIGZpbGUgb2JqZWN0CiAKLSAgICBBIDpleGM6YFR5cGVFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgdGhlIG9iamVjdCBpcyBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlIG9yCi0gICAgYSBjb250YWluZXIgdGhhdCBjb250YWlucyBvYmplY3RzIG9mIHVuc3VwcG9ydGVkIHR5cGVzLgorICAgLi4gZGVwcmVjYXRlZDo6IDMuNCBVc2UgOmZ1bmM6YGR1bXBgIGluc3RlYWQuCiAKIAogLi4gZnVuY3Rpb246OiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSkKIAogICAgUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCiAKKyAgIFNlZSA6ZnVuYzpgbG9hZGAgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgRGljdCB2YWx1ZXMgaW4gdGhlIHJlc3VsdCBoYXZlIGEgYGBfX2dldGF0dHJfX2BgIG1ldGhvZCB0aGF0IGRlZmVycworICAgICAgdG8gYGBfX2dldGl0ZW1fYGAuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSBhdHRyaWJ1dGUgYWNjZXNzIHRvCisgICAgICBhY2Nlc3MgaXRlbXMgb2YgdGhlc2UgZGljdGlvbmFyaWVzLgorCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSA6ZnVuYzpgbG9hZHNgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiB3cml0ZVBsaXN0VG9CeXRlcyhyb290T2JqZWN0KQogCi0gICBSZXR1cm4gKnJvb3RPYmplY3QqIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KKyAgIFJldHVybiAqcm9vdE9iamVjdCogYXMgYW4gWE1MIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIDpmdW5jOmBkdW1wc2AgaW5zdGVhZC4KIAogCi1UaGUgZm9sbG93aW5nIGNsYXNzIGlzIGF2YWlsYWJsZToKK1RoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgYXZhaWxhYmxlOgorCisuLiBjbGFzczo6IERpY3QoW2RpY3RdKToKKworICAgUmV0dXJuIGFuIGV4dGVuZGVkIG1hcHBpbmcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgZGljdGlvbmFyeQorICAgKmRpY3QqLgorCisgICBUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBkaWN0YCB3aGVyZSBhdHRyaWJ1dGUgYWNjZXNzIGNhbgorICAgYmUgdXNlZCB0byBhY2Nlc3MgaXRlbXMuIFRoYXQgaXMsIGBgYURpY3Qua2V5YGAgaXMgdGhlIHNhbWUgYXMKKyAgIGBgYURpY3RbJ2tleSddYGAgZm9yIGdldHRpbmcsIHNldHRpbmcgYW5kIGRlbGV0aW5nIGl0ZW1zIGluIHRoZSBtYXBwaW5nLgorCisgICAuLiBkZXByZWNhdGVkOjogMy4wCisKIAogLi4gY2xhc3M6OiBEYXRhKGRhdGEpCiAKQEAgLTg2LDYgKzE5NCwyNCBAQAogICAgSXQgaGFzIG9uZSBhdHRyaWJ1dGUsIDphdHRyOmBkYXRhYCwgdGhhdCBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgUHl0aG9uCiAgICBieXRlcyBvYmplY3Qgc3RvcmVkIGluIGl0LgogCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBpbnN0ZWFkCisKKworVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGF2YWlsYWJsZToKKworLi4gZGF0YTo6IEZNVF9YTUwKKworICAgVGhlIFhNTCBmb3JtYXQgZm9yIHBsaXN0IGZpbGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogRk1UX0JJTkFSWQorCisgICBUaGUgYmluYXJ5IGZvcm1hdCBmb3IgcGxpc3QgZmlsZXMKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogRXhhbXBsZXMKIC0tLS0tLS0tCkBAIC0xMDMsMTMgKzIyOSwxNSBAQAogICAgICAgICAgICAgYVRydWVWYWx1ZSA9IFRydWUsCiAgICAgICAgICAgICBhRmFsc2VWYWx1ZSA9IEZhbHNlLAogICAgICAgICApLAotICAgICAgICBzb21lRGF0YSA9IERhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgIHNvbWVNb3JlRGF0YSA9IERhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTApLAorICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwLAogICAgICAgICBhRGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZS5ta3RpbWUodGltZS5nbXRpbWUoKSkpLAogICAgICkKLSAgICB3cml0ZVBsaXN0KHBsLCBmaWxlTmFtZSkKKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHBsLCBmcCkKIAogUGFyc2luZyBhIHBsaXN0OjoKIAotICAgIHBsID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgcGwgPSBsb2FkKGZwKQogICAgIHByaW50KHBsWyJhS2V5Il0pCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0IGIvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAppbmRleCBiNDA4MGQ2Li5iYzdiM2U3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKQEAgLTEzLDggKzEzLDExIEBACiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MsIDpjbGFzczpgUE9QM2AsIHdoaWNoIGVuY2Fwc3VsYXRlcyBhIGNvbm5lY3Rpb24gdG8gYQotUE9QMyBzZXJ2ZXIgYW5kIGltcGxlbWVudHMgdGhlIHByb3RvY29sIGFzIGRlZmluZWQgaW4gOnJmYzpgMTcyNWAuICBUaGUKLTpjbGFzczpgUE9QM2AgY2xhc3Mgc3VwcG9ydHMgYm90aCB0aGUgbWluaW1hbCBhbmQgb3B0aW9uYWwgY29tbWFuZCBzZXRzLgorUE9QMyBzZXJ2ZXIgYW5kIGltcGxlbWVudHMgdGhlIHByb3RvY29sIGFzIGRlZmluZWQgaW4gOnJmYzpgMTkzOWAuIFRoZQorOmNsYXNzOmBQT1AzYCBjbGFzcyBzdXBwb3J0cyBib3RoIHRoZSBtaW5pbWFsIGFuZCBvcHRpb25hbCBjb21tYW5kIHNldHMgZnJvbQorOnJmYzpgMTkzOWAuIFRoZSA6Y2xhc3M6YFBPUDNgIGNsYXNzIGFsc28gc3VwcG9ydHMgdGhlIGBTVExTYCBjb21tYW5kIGludHJvZHVjZWQKK2luIDpyZmM6YDI1OTVgIHRvIGVuYWJsZSBlbmNyeXB0ZWQgY29tbXVuaWNhdGlvbiBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uCisKIEFkZGl0aW9uYWxseSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyA6Y2xhc3M6YFBPUDNfU1NMYCwgd2hpY2ggcHJvdmlkZXMKIHN1cHBvcnQgZm9yIGNvbm5lY3RpbmcgdG8gUE9QMyBzZXJ2ZXJzIHRoYXQgdXNlIFNTTCBhcyBhbiB1bmRlcmx5aW5nIHByb3RvY29sCiBsYXllci4KQEAgLTQwLDE2ICs0MywyMyBAQAogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQT1AzYCB0aGF0IGNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgb3ZlciBhbiBTU0wKICAgIGVuY3J5cHRlZCBzb2NrZXQuICBJZiAqcG9ydCogaXMgbm90IHNwZWNpZmllZCwgOTk1LCB0aGUgc3RhbmRhcmQgUE9QMy1vdmVyLVNTTAotICAgcG9ydCBpcyB1c2VkLiAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBhbHNvIG9wdGlvbmFsIC0gdGhleSBjYW4gY29udGFpbiBhCi0gICBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCi0gICAqdGltZW91dCogd29ya3MgYXMgaW4gdGhlIDpjbGFzczpgUE9QM2AgY29uc3RydWN0b3IuICpjb250ZXh0KiBwYXJhbWV0ZXIgaXMgYQotICAgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IHdoaWNoIGFsbG93cyBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbgotICAgb3B0aW9ucywgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50byBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkKLSAgIHN0cnVjdHVyZS4KKyAgIHBvcnQgaXMgdXNlZC4gICp0aW1lb3V0KiB3b3JrcyBhcyBpbiB0aGUgOmNsYXNzOmBQT1AzYCBjb25zdHJ1Y3Rvci4KKyAgICpjb250ZXh0KiBpcyBhbiBvcHRpb25hbCA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzCisgICBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEKKyAgIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkgc3RydWN0dXJlLiAgUGxlYXNlIHJlYWQgOnJlZjpgc3NsLXNlY3VyaXR5YAorICAgZm9yIGJlc3QgcHJhY3RpY2VzLgorCisgICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIGEgbGVnYWN5IGFsdGVybmF0aXZlIHRvICpjb250ZXh0KiAtIHRoZXkgY2FuCisgICBwb2ludCB0byBQRU0tZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlcywKKyAgIHJlc3BlY3RpdmVseSwgZm9yIHRoZSBTU0wgY29ubmVjdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpjb250ZXh0KiBwYXJhbWV0ZXIgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAogT25lIGV4Y2VwdGlvbiBpcyBkZWZpbmVkIGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgOm1vZDpgcG9wbGliYCBtb2R1bGU6CiAKQEAgLTk3LDYgKzEwNywxNCBAQAogICAgUmV0dXJucyB0aGUgZ3JlZXRpbmcgc3RyaW5nIHNlbnQgYnkgdGhlIFBPUDMgc2VydmVyLgogCiAKKy4uIG1ldGhvZDo6IFBPUDMuY2FwYSgpCisKKyAgIFF1ZXJ5IHRoZSBzZXJ2ZXIncyBjYXBhYmlsaXRpZXMgYXMgc3BlY2lmaWVkIGluIDpyZmM6YDI0NDlgLgorICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgaW4gdGhlIGZvcm0gYGB7J25hbWUnOiBbJ3BhcmFtJy4uLl19YGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFBPUDMudXNlcih1c2VybmFtZSkKIAogICAgU2VuZCB1c2VyIGNvbW1hbmQsIHJlc3BvbnNlIHNob3VsZCBpbmRpY2F0ZSB0aGF0IGEgcGFzc3dvcmQgaXMgcmVxdWlyZWQuCkBAIC0xNzYsNiArMTk0LDIzIEBACiAgICB0aGUgdW5pcXVlIGlkIGZvciB0aGF0IG1lc3NhZ2UgaW4gdGhlIGZvcm0gYGAncmVzcG9uc2UgbWVzZ251bSB1aWRgYCwgb3RoZXJ3aXNlCiAgICByZXN1bHQgaXMgbGlzdCBgYChyZXNwb25zZSwgWydtZXNnbnVtIHVpZCcsIC4uLl0sIG9jdGV0cylgYC4KIAorLi4gbWV0aG9kOjogUE9QMy5zdGxzKGNvbnRleHQ9Tm9uZSkKKworICAgU3RhcnQgYSBUTFMgc2Vzc2lvbiBvbiB0aGUgYWN0aXZlIGNvbm5lY3Rpb24gYXMgc3BlY2lmaWVkIGluIDpyZmM6YDI1OTVgLgorICAgVGhpcyBpcyBvbmx5IGFsbG93ZWQgYmVmb3JlIHVzZXIgYXV0aGVudGljYXRpb24KKworICAgKmNvbnRleHQqIHBhcmFtZXRlciBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MKKyAgIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8KKyAgIGEgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgCisgICBmb3IgYmVzdCBwcmFjdGljZXMuCisKKyAgIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNraW5nIHZpYQorICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBJbnN0YW5jZXMgb2YgOmNsYXNzOmBQT1AzX1NTTGAgaGF2ZSBubyBhZGRpdGlvbmFsIG1ldGhvZHMuIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcwogc3ViY2xhc3MgaXMgaWRlbnRpY2FsIHRvIGl0cyBwYXJlbnQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CmluZGV4IDNhODYzMzEuLjQ0N2Y4ZjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdApAQCAtMTQsOCArMTQsOCBAQAogUHl0aG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIGZvcm0gd2hpY2ggY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGludGVycHJldGVyLgogSWYgdGhlIGZvcm1hdHRlZCBzdHJ1Y3R1cmVzIGluY2x1ZGUgb2JqZWN0cyB3aGljaCBhcmUgbm90IGZ1bmRhbWVudGFsIFB5dGhvbgogdHlwZXMsIHRoZSByZXByZXNlbnRhdGlvbiBtYXkgbm90IGJlIGxvYWRhYmxlLiAgVGhpcyBtYXkgYmUgdGhlIGNhc2UgaWYgb2JqZWN0cwotc3VjaCBhcyBmaWxlcywgc29ja2V0cywgY2xhc3Nlcywgb3IgaW5zdGFuY2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55Ci1vdGhlciBidWlsdC1pbiBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gY29uc3RhbnRzLgorc3VjaCBhcyBmaWxlcywgc29ja2V0cyBvciBjbGFzc2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55IG90aGVyCitvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gbGl0ZXJhbHMuCiAKIFRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24ga2VlcHMgb2JqZWN0cyBvbiBhIHNpbmdsZSBsaW5lIGlmIGl0IGNhbiwgYW5kCiBicmVha3MgdGhlbSBvbnRvIG11bHRpcGxlIGxpbmVzIGlmIHRoZXkgZG9uJ3QgZml0IHdpdGhpbiB0aGUgYWxsb3dlZCB3aWR0aC4KQEAgLTI5LDE0ICsyOSwxNCBAQAogLi4gRmlyc3QgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzOgogCiAKLS4uIGNsYXNzOjogUHJldHR5UHJpbnRlcihpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lKQorLi4gY2xhc3M6OiBQcmV0dHlQcmludGVyKGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKQogCiAgICBDb25zdHJ1Y3QgYSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGluc3RhbmNlLiAgVGhpcyBjb25zdHJ1Y3RvciB1bmRlcnN0YW5kcwogICAgc2V2ZXJhbCBrZXl3b3JkIHBhcmFtZXRlcnMuICBBbiBvdXRwdXQgc3RyZWFtIG1heSBiZSBzZXQgdXNpbmcgdGhlICpzdHJlYW0qCiAgICBrZXl3b3JkOyB0aGUgb25seSBtZXRob2QgdXNlZCBvbiB0aGUgc3RyZWFtIG9iamVjdCBpcyB0aGUgZmlsZSBwcm90b2NvbCdzCiAgICA6bWV0aDpgd3JpdGVgIG1ldGhvZC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGFkb3B0cwotICAgYGBzeXMuc3Rkb3V0YGAuICBUaHJlZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgbWF5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUKLSAgIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbi4gIFRoZSBrZXl3b3JkcyBhcmUgKmluZGVudCosICpkZXB0aCosIGFuZCAqd2lkdGgqLiAgVGhlCisgICBgYHN5cy5zdGRvdXRgYC4gIFRoZQogICAgYW1vdW50IG9mIGluZGVudGF0aW9uIGFkZGVkIGZvciBlYWNoIHJlY3Vyc2l2ZSBsZXZlbCBpcyBzcGVjaWZpZWQgYnkgKmluZGVudCo7CiAgICB0aGUgZGVmYXVsdCBpcyBvbmUuICBPdGhlciB2YWx1ZXMgY2FuIGNhdXNlIG91dHB1dCB0byBsb29rIGEgbGl0dGxlIG9kZCwgYnV0IGNhbgogICAgbWFrZSBuZXN0aW5nIGVhc2llciB0byBzcG90LiAgVGhlIG51bWJlciBvZiBsZXZlbHMgd2hpY2ggbWF5IGJlIHByaW50ZWQgaXMKQEAgLTQ1LDcgKzQ1LDEyIEBACiAgICB0aGUgZGVwdGggb2YgdGhlIG9iamVjdHMgYmVpbmcgZm9ybWF0dGVkLiAgVGhlIGRlc2lyZWQgb3V0cHV0IHdpZHRoIGlzCiAgICBjb25zdHJhaW5lZCB1c2luZyB0aGUgKndpZHRoKiBwYXJhbWV0ZXI7IHRoZSBkZWZhdWx0IGlzIDgwIGNoYXJhY3RlcnMuICBJZiBhCiAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGZvcm1hdHRlZCB3aXRoaW4gdGhlIGNvbnN0cmFpbmVkIHdpZHRoLCBhIGJlc3QgZWZmb3J0IHdpbGwKLSAgIGJlIG1hZGUuCisgICBiZSBtYWRlLiAgSWYgKmNvbXBhY3QqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgZWFjaCBpdGVtIG9mIGEgbG9uZyBzZXF1ZW5jZQorICAgd2lsbCBiZSBmb3JtYXR0ZWQgb24gYSBzZXBhcmF0ZSBsaW5lLiAgSWYgKmNvbXBhY3QqIGlzIHRydWUsIGFzIG1hbnkgaXRlbXMKKyAgIGFzIHdpbGwgZml0IHdpdGhpbiB0aGUgKndpZHRoKiB3aWxsIGJlIGZvcm1hdHRlZCBvbiBlYWNoIG91dHB1dCBsaW5lLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpjb21wYWN0KiBwYXJhbWV0ZXIuCiAKICAgICAgID4+PiBpbXBvcnQgcHByaW50CiAgICAgICA+Pj4gc3R1ZmYgPSBbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywgJ2tuaWdodHMnLCAnbmknXQpAQCAtNTgsNiArNjMsMTIgQEAKICAgICAgICAgICAnbHVtYmVyamFjaycsCiAgICAgICAgICAgJ2tuaWdodHMnLAogICAgICAgICAgICduaSddCisgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcih3aWR0aD00MSwgY29tcGFjdD1UcnVlKQorICAgICAgPj4+IHBwLnBwcmludChzdHVmZikKKyAgICAgIFtbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywKKyAgICAgICAgJ2tuaWdodHMnLCAnbmknXSwKKyAgICAgICAnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsCisgICAgICAgJ25pJ10KICAgICAgID4+PiB0dXAgPSAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywKICAgICAgIC4uLiAoJ3BhcnJvdCcsICgnZnJlc2ggZnJ1aXQnLCkpKSkpKSkpCiAgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcihkZXB0aD02KQpAQCAtNjUsMjMgKzc2LDMwIEBACiAgICAgICAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywgKC4uLikpKSkpKSkKIAogCi1UaGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjbGFzcyBzdXBwb3J0cyBzZXZlcmFsIGRlcml2YXRpdmUgZnVuY3Rpb25zOgorVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgc2V2ZXJhbCBzaG9ydGN1dCBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSkKIAotICAgUmV0dXJuIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogYXMgYSBzdHJpbmcuICAqaW5kZW50KiwgKndpZHRoKgotICAgYW5kICpkZXB0aCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY29uc3RydWN0b3IgYXMKLSAgIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKyAgIFJldHVybiB0aGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmplY3QqIGFzIGEgc3RyaW5nLiAgKmluZGVudCosCisgICAqd2lkdGgqLCAqZGVwdGgqIGFuZCAqY29tcGFjdCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAKKyAgIGNvbnN0cnVjdG9yIGFzIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqY29tcGFjdCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1GYWxzZSkKIAogICAgUHJpbnRzIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogb24gKnN0cmVhbSosIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUuICBJZiAqc3RyZWFtKiBpcyBgYE5vbmVgYCwgYGBzeXMuc3Rkb3V0YGAgaXMgdXNlZC4gIFRoaXMgbWF5IGJlIHVzZWQKICAgIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBpbnN0ZWFkIG9mIHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uIGZvcgogICAgaW5zcGVjdGluZyB2YWx1ZXMgKHlvdSBjYW4gZXZlbiByZWFzc2lnbiBgYHByaW50ID0gcHByaW50LnBwcmludGBgIGZvciB1c2UKLSAgIHdpdGhpbiBhIHNjb3BlKS4gICppbmRlbnQqLCAqd2lkdGgqIGFuZCAqZGVwdGgqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQotICAgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisgICB3aXRoaW4gYSBzY29wZSkuICAqaW5kZW50KiwgKndpZHRoKiwgKmRlcHRoKiBhbmQgKmNvbXBhY3QqIHdpbGwgYmUgcGFzc2VkCisgICB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmNvbXBhY3QqIHBhcmFtZXRlci4KIAogICAgICAgPj4+IGltcG9ydCBwcHJpbnQKICAgICAgID4+PiBzdHVmZiA9IFsnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsICduaSddCkBAIC0xOTMsMTAxICsyMTEsMTQxIEBACiAtLS0tLS0tCiAKIFRvIGRlbW9uc3RyYXRlIHNldmVyYWwgdXNlcyBvZiB0aGUgOmZ1bmM6YHBwcmludGAgZnVuY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLAotbGV0J3MgZmV0Y2ggaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9qZWN0IGZyb20gUHlQSTo6CitsZXQncyBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2plY3QgZnJvbSBgUHlQSSA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmc+YF86OgogCiAgICA+Pj4gaW1wb3J0IGpzb24KICAgID4+PiBpbXBvcnQgcHByaW50CiAgICA+Pj4gZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgotICAgPj4+IHdpdGggdXJsb3BlbignaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci9qc29uJykgYXMgdXJsOgorICAgPj4+IHdpdGggdXJsb3BlbignaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvanNvbicpIGFzIHVybDoKICAgIC4uLiAgICAgaHR0cF9pbmZvID0gdXJsLmluZm8oKQogICAgLi4uICAgICByYXdfZGF0YSA9IHVybC5yZWFkKCkuZGVjb2RlKGh0dHBfaW5mby5nZXRfY29udGVudF9jaGFyc2V0KCkpCiAgICA+Pj4gcHJvamVjdF9pbmZvID0ganNvbi5sb2FkcyhyYXdfZGF0YSkKLSAgID4+PiByZXN1bHQgPSB7J2hlYWRlcnMnOiBodHRwX2luZm8uaXRlbXMoKSwgJ2JvZHknOiBwcm9qZWN0X2luZm99CiAKIEluIGl0cyBiYXNpYyBmb3JtLCA6ZnVuYzpgcHByaW50YCBzaG93cyB0aGUgd2hvbGUgb2JqZWN0OjoKIAotICAgPj4+IHBwcmludC5wcHJpbnQocmVzdWx0KQotICAgeydib2R5JzogeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcyddLAotICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCi0gICAgICAgICAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJ2NvbmZpZ3BhcnNlciBpbmkgcGFyc2luZyBjb25mIGNmZyBjb25maWd1cmF0aW9uIGZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvMy4yLjByMycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeSc6ICdUaGlzIGxpYnJhcnkgYnJpbmdzIHRoZSB1cGRhdGVkIGNvbmZpZ3BhcnNlciBmcm9tIFB5dGhvbiAzLjIrIHRvIFB5dGhvbiAyLjYtMi43LicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMy4yLjByMyd9LAotICAgICAgICAgICAndXJscyc6IFt7J2NvbW1lbnRfdGV4dCc6ICcnLAotICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2Fkcyc6IDQ3LAotICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ2NvbmZpZ3BhcnNlci0zLjIuMHIzLnRhci5neicsCi0gICAgICAgICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiAnODUwMGZkODdjNjFhYzBkZTMyOGZjOTk2ZmNlNjliOTYnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ3NkaXN0JywKLSAgICAgICAgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICdzb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiAzMjI4MSwKLSAgICAgICAgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDExLTA1LTEwVDE2OjI4OjUwJywKLSAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvYy9jb25maWdwYXJzZXIvY29uZmlncGFyc2VyLTMuMi4wcjMudGFyLmd6J31dfSwKLSAgICdoZWFkZXJzJzogWygnRGF0ZScsICdTYXQsIDE0IE1heSAyMDExIDEyOjQ4OjUyIEdNVCcpLAotICAgICAgICAgICAgICAgKCdTZXJ2ZXInLCAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2lubGluZScpLAotICAgICAgICAgICAgICAgKCdDb25uZWN0aW9uJywgJ2Nsb3NlJyksCi0gICAgICAgICAgICAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywgJ2NodW5rZWQnKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9IlVURi04IicpXX0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbykKKyAgIHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTI1LAorICAgICAgICAgICAgICdhdXRob3InOiAnR2x5cGggTGVma293aXR6JywKKyAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ2dseXBoQHR3aXN0ZWRtYXRyaXguY29tJywKKyAgICAgICAgICAgICAnYnVndHJhY2tfdXJsJzogJycsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfY29kZV9rd2FsaXRlZV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyIDo6IE9ubHknXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSBmcmFtZXdvcmsgZm9yIFB5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcHJvdG9jb2wgaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgbmV0d29ya2luZyBmcmFtZXdvcmsgd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3snY29tbWVudF90ZXh0JzogJycsCisgICAgICAgICAgICAgICdkb3dubG9hZHMnOiA3MTg0NCwKKyAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ1R3aXN0ZWQtMTIuMy4wLnRhci5iejInLAorICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAorICAgICAgICAgICAgICAnbWQ1X2RpZ2VzdCc6ICc2ZTI4OTgyNWYzYmY1NTkxY2ZkNjcwODc0Y2MwODYyZCcsCisgICAgICAgICAgICAgICdwYWNrYWdldHlwZSc6ICdzZGlzdCcsCisgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICdzb3VyY2UnLAorICAgICAgICAgICAgICAnc2l6ZSc6IDI2MTU3MzMsCisgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDEyLTEyLTI2VDEyOjQ3OjAzJywKKyAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvVC9Ud2lzdGVkL1R3aXN0ZWQtMTIuMy4wLnRhci5iejInfSwKKyAgICAgICAgICAgICB7J2NvbW1lbnRfdGV4dCc6ICcnLAorICAgICAgICAgICAgICAnZG93bmxvYWRzJzogNTIyNCwKKyAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ1R3aXN0ZWQtMTIuMy4wLndpbjMyLXB5Mi43Lm1zaScsCisgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCisgICAgICAgICAgICAgICdtZDVfZGlnZXN0JzogJzZiNzc4ZjUyMDFiNjIyYTU1MTlhMmFjYTFhMmZlNTEyJywKKyAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ2JkaXN0X21zaScsCisgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICcyLjcnLAorICAgICAgICAgICAgICAnc2l6ZSc6IDI5MTYzNTIsCisgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDEyLTEyLTI2VDEyOjQ4OjE1JywKKyAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy8yLjcvVC9Ud2lzdGVkL1R3aXN0ZWQtMTIuMy4wLndpbjMyLXB5Mi43Lm1zaSd9XX0KIAogVGhlIHJlc3VsdCBjYW4gYmUgbGltaXRlZCB0byBhIGNlcnRhaW4gKmRlcHRoKiAoZWxsaXBzaXMgaXMgdXNlZCBmb3IgZGVlcGVyCiBjb250ZW50cyk6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHQsIGRlcHRoPTMpCi0gICB7J2JvZHknOiB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAotICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCi0gICAgICAgICAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJ2NvbmZpZ3BhcnNlciBpbmkgcGFyc2luZyBjb25mIGNmZyBjb25maWd1cmF0aW9uIGZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvMy4yLjByMycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeSc6ICdUaGlzIGxpYnJhcnkgYnJpbmdzIHRoZSB1cGRhdGVkIGNvbmZpZ3BhcnNlciBmcm9tIFB5dGhvbiAzLjIrIHRvIFB5dGhvbiAyLjYtMi43LicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMy4yLjByMyd9LAotICAgICAgICAgICAndXJscyc6IFt7Li4ufV19LAotICAgJ2hlYWRlcnMnOiBbKCdEYXRlJywgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgICAgICAgICAgICAoJ1NlcnZlcicsICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnaW5saW5lJyksCi0gICAgICAgICAgICAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAgICAgICAgICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLCAnY2h1bmtlZCcpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0iVVRGLTgiJyldfQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvLCBkZXB0aD0yKQorICAgeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMjUsCisgICAgICAgICAgICAgJ2F1dGhvcic6ICdHbHlwaCBMZWZrb3dpdHonLAorICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAnZ2x5cGhAdHdpc3RlZG1hdHJpeC5jb20nLAorICAgICAgICAgICAgICdidWd0cmFja191cmwnOiAnJywKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9jb2RlX2t3YWxpdGVlX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9kb2N1bWVudGF0aW9uX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9pbnN0YWxsYWJpbGl0eV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWy4uLl0sCisgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0FuIGV4dGVuc2libGUgZnJhbWV3b3JrIGZvciBQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsIGZvY3VzXHJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gZXZlbnQtYmFzZWQgbmV0d29yayBwcm9ncmFtbWluZyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXByb3RvY29sIGludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzIG5ldHdvcmtpbmcgZnJhbWV3b3JrIHdyaXR0ZW4gaW4gUHl0aG9uJywKKyAgICAgICAgICAgICAndmVyc2lvbic6ICcxMi4zLjAnfSwKKyAgICAndXJscyc6IFt7Li4ufSwgey4uLn1dfQogCi1BZGRpdGlvbmFsbHksIG1heGltdW0gKndpZHRoKiBjYW4gYmUgc3VnZ2VzdGVkLiBJZiBhIGxvbmcgb2JqZWN0IGNhbm5vdCBiZQotc3BsaXQsIHRoZSBzcGVjaWZpZWQgd2lkdGggd2lsbCBiZSBleGNlZWRlZDo6CitBZGRpdGlvbmFsbHksIG1heGltdW0gY2hhcmFjdGVyICp3aWR0aCogY2FuIGJlIHN1Z2dlc3RlZC4gSWYgYSBsb25nIG9iamVjdAorY2Fubm90IGJlIHNwbGl0LCB0aGUgc3BlY2lmaWVkIHdpZHRoIHdpbGwgYmUgZXhjZWVkZWQ6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHRbJ2hlYWRlcnMnXSwgd2lkdGg9MzApCi0gICBbKCdEYXRlJywKLSAgICAgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgKCdTZXJ2ZXInLAotICAgICAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICgnQ29udGVudC1EaXNwb3NpdGlvbicsCi0gICAgICdpbmxpbmUnKSwKLSAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywKLSAgICAgJ2NodW5rZWQnKSwKLSAgICAoJ0NvbnRlbnQtVHlwZScsCi0gICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSJVVEYtOCInKV0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbywgZGVwdGg9Miwgd2lkdGg9NTApCisgICB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyNSwKKyAgICAgICAgICAgICAnYXV0aG9yJzogJ0dseXBoIExlZmtvd2l0eicsCisgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICdnbHlwaEB0d2lzdGVkbWF0cml4LmNvbScsCisgICAgICAgICAgICAgJ2J1Z3RyYWNrX3VybCc6ICcnLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2NvZGVfa3dhbGl0ZWVfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2RvY3VtZW50YXRpb25faWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2luc3RhbGxhYmlsaXR5X2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbLi4uXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyYW1ld29yayBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmsgcHJvZ3JhbW1pbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgbXVsdGlwcm90b2NvbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICduZXR3b3JraW5nIGZyYW1ld29yayAnCisgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3suLi59LCB7Li4ufV19CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wdHkucnN0IGIvRG9jL2xpYnJhcnkvcHR5LnJzdAppbmRleCAyYjkzODViLi45MGJhZWM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wdHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B0eS5yc3QKQEAgLTQ1LDYgKzQ1LDkgQEAKICAgIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgZGVmYXVsdHMgdHJ5IHRvIHJlYWQgMTAyNCBieXRlcyBlYWNoIHRpbWUgdGhleSBhcmUKICAgIGNhbGxlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIDpmdW5jOmBzcGF3bmAgbm93IHJldHVybnMgdGhlIHN0YXR1cyB2YWx1ZSBmcm9tIDpmdW5jOmBvcy53YWl0cGlkYAorICAgICAgb24gdGhlIGNoaWxkIHByb2Nlc3MuCiAKIEV4YW1wbGUKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKaW5kZXggMDdkZGMyNS4uYmFlODQ1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKQEAgLTI4LDcgKzI4LDcgQEAKIAogLi4gZnVuY3Rpb246OiBjb21waWxlKGZpbGUsIGNmaWxlPU5vbmUsIGRmaWxlPU5vbmUsIGRvcmFpc2U9RmFsc2UsIG9wdGltaXplPS0xKQogCi0gICBDb21waWxlIGEgc291cmNlIGZpbGUgdG8gYnl0ZS1jb2RlIGFuZCB3cml0ZSBvdXQgdGhlIGJ5dGUtY29kZSBjYWNoZSAgZmlsZS4KKyAgIENvbXBpbGUgYSBzb3VyY2UgZmlsZSB0byBieXRlLWNvZGUgYW5kIHdyaXRlIG91dCB0aGUgYnl0ZS1jb2RlIGNhY2hlIGZpbGUuCiAgICBUaGUgc291cmNlIGNvZGUgaXMgbG9hZGVkIGZyb20gdGhlIGZpbGUgbmFtZSAqZmlsZSouICBUaGUgIGJ5dGUtY29kZSBpcwogICAgd3JpdHRlbiB0byAqY2ZpbGUqLCB3aGljaCBkZWZhdWx0cyB0byB0aGUgOlBFUDpgMzE0N2AgcGF0aCwgZW5kaW5nIGluCiAgICBgYC5weWNgYCAoYGAucHlvYGAgaWYgb3B0aW1pemF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIpLgpAQCAtNDEsNiArNDEsMTMgQEAKICAgIGlzIHJhaXNlZC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGF0aCB0byBieXRlLWNvbXBpbGVkIGZpbGUsIGkuZS4KICAgIHdoYXRldmVyICpjZmlsZSogdmFsdWUgd2FzIHVzZWQuCiAKKyAgIElmIHRoZSBwYXRoIHRoYXQgKmNmaWxlKiBiZWNvbWVzIChlaXRoZXIgZXhwbGljaXRseSBzcGVjaWZpZWQgb3IgY29tcHV0ZWQpCisgICBpcyBhIHN5bWxpbmsgb3Igbm9uLXJlZ3VsYXIgZmlsZSwgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKyAgIFRoaXMgaXMgdG8gYWN0IGFzIGEgd2FybmluZyB0aGF0IGltcG9ydCB3aWxsIHR1cm4gdGhvc2UgcGF0aHMgaW50byByZWd1bGFyCisgICBmaWxlcyBpZiBpdCBpcyBhbGxvd2VkIHRvIHdyaXRlIGJ5dGUtY29tcGlsZWQgZmlsZXMgdG8gdGhvc2UgcGF0aHMuIFRoaXMgaXMKKyAgIGEgc2lkZS1lZmZlY3Qgb2YgaW1wb3J0IHVzaW5nIGZpbGUgcmVuYW1pbmcgdG8gcGxhY2UgdGhlIGZpbmFsIGJ5dGUtY29tcGlsZWQKKyAgIGZpbGUgaW50byBwbGFjZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgZmlsZSB3cml0aW5nIGlzc3Vlcy4KKwogICAgKm9wdGltaXplKiBjb250cm9scyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIGFuZCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWx0LWluCiAgICA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uICBUaGUgZGVmYXVsdCBvZiBgYC0xYGAgc2VsZWN0cyB0aGUgb3B0aW1pemF0aW9uCiAgICBsZXZlbCBvZiB0aGUgY3VycmVudCBpbnRlcnByZXRlci4KQEAgLTUwLDYgKzU3LDEzIEBACiAgICAgICBkZWZhdWx0IHdhcyAqZmlsZSogKyBgYCdjJ2BgIChgYCdvJ2BgIGlmIG9wdGltaXphdGlvbiB3YXMgZW5hYmxlZCkuCiAgICAgICBBbHNvIGFkZGVkIHRoZSAqb3B0aW1pemUqIHBhcmFtZXRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENoYW5nZWQgY29kZSB0byB1c2UgOm1vZDpgaW1wb3J0bGliYCBmb3IgdGhlIGJ5dGUtY29kZSBjYWNoZSBmaWxlIHdyaXRpbmcuCisgICAgICBUaGlzIG1lYW5zIGZpbGUgY3JlYXRpb24vd3JpdGluZyBzZW1hbnRpY3Mgbm93IG1hdGNoIHdoYXQgOm1vZDpgaW1wb3J0bGliYAorICAgICAgZG9lcywgZS5nLiBwZXJtaXNzaW9ucywgd3JpdGUtYW5kLW1vdmUgc2VtYW50aWNzLCBldGMuIEFsc28gYWRkZWQgdGhlCisgICAgICBjYXZlYXQgdGhhdCA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIHJhaXNlZCBpZiAqY2ZpbGUqIGlzIGEgc3ltbGluayBvcgorICAgICAgbm9uLXJlZ3VsYXIgZmlsZS4KKwogCiAuLiBmdW5jdGlvbjo6IG1haW4oYXJncz1Ob25lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weWRvYy5yc3QgYi9Eb2MvbGlicmFyeS9weWRvYy5yc3QKaW5kZXggZTEwMDg2NS4uM2Y1MjBlOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlkb2MucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdApAQCAtODQsMyArODQsOCBAQAogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgQWRkZWQgdGhlIGBgLWJgYCBvcHRpb24sIGRlcHJlY2F0ZWQgdGhlIGBgLWdgYCBvcHRpb24uCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICA6bW9kOmBweWRvY2Agbm93IHVzZXMgOmZ1bmM6YGluc3BlY3Quc2lnbmF0dXJlYCByYXRoZXIgdGhhbgorICAgOmZ1bmM6YGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWNgIHRvIGV4dHJhY3Qgc2lnbmF0dXJlIGluZm9ybWF0aW9uIGZyb20KKyAgIGNhbGxhYmxlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0IGIvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKaW5kZXggM2Q4OGQ4NS4uY2I4YWI2NSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKQEAgLTEwMCw2ICsxMDAsMTEgQEAKICAgICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9ucy8gZWxlbTEKICAgICAgIGVsZW0yCiAKKyAgIER1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgYGBFeHBhdGBgIGxpYnJhcnkgdXNlZCBieSA6bW9kOmBweWV4cGF0YCwKKyAgIHRoZSA6Y2xhc3M6YHhtbHBhcnNlcmAgaW5zdGFuY2UgcmV0dXJuZWQgY2FuIG9ubHkgYmUgdXNlZCB0byBwYXJzZSBhIHNpbmdsZQorICAgWE1MIGRvY3VtZW50LiAgQ2FsbCBgYFBhcnNlckNyZWF0ZWBgIGZvciBlYWNoIGRvY3VtZW50IHRvIHByb3ZpZGUgdW5pcXVlCisgICBwYXJzZXIgaW5zdGFuY2VzLgorCiAKIC4uIHNlZWFsc286OgogCkBAIC0xMTksNyArMTI0LDkgQEAKIAogICAgUGFyc2VzIHRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nICpkYXRhKiwgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcgogICAgZnVuY3Rpb25zIHRvIHByb2Nlc3MgdGhlIHBhcnNlZCBkYXRhLiAgKmlzZmluYWwqIG11c3QgYmUgdHJ1ZSBvbiB0aGUgZmluYWwgY2FsbAotICAgdG8gdGhpcyBtZXRob2QuICAqZGF0YSogY2FuIGJlIHRoZSBlbXB0eSBzdHJpbmcgYXQgYW55IHRpbWUuCisgICB0byB0aGlzIG1ldGhvZDsgaXQgYWxsb3dzIHRoZSBwYXJzaW5nIG9mIGEgc2luZ2xlIGZpbGUgaW4gZnJhZ21lbnRzLAorICAgbm90IHRoZSBzdWJtaXNzaW9uIG9mIG11bHRpcGxlIGZpbGVzLgorICAgKmRhdGEqIGNhbiBiZSB0aGUgZW1wdHkgc3RyaW5nIGF0IGFueSB0aW1lLgogCiAKIC4uIG1ldGhvZDo6IHhtbHBhcnNlci5QYXJzZUZpbGUoZmlsZSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QgYi9Eb2MvbGlicmFyeS9weXRob24ucnN0CmluZGV4IGI2N2ZiZmMuLmYzMDdkN2QgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdApAQCAtMjUsNCArMjUsMyBAQAogICAgaW5zcGVjdC5yc3QKICAgIHNpdGUucnN0CiAgICBmcGVjdGwucnN0Ci0gICBkaXN0dXRpbHMucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9xdW9wcmkucnN0IGIvRG9jL2xpYnJhcnkvcXVvcHJpLnJzdAppbmRleCA3NTU4MTFhLi4zYTc0Y2Y4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9xdW9wcmkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QKQEAgLTI0LDkgKzI0LDggQEAKIC4uIGZ1bmN0aW9uOjogZGVjb2RlKGlucHV0LCBvdXRwdXQsIGhlYWRlcj1GYWxzZSkKIAogICAgRGVjb2RlIHRoZSBjb250ZW50cyBvZiB0aGUgKmlucHV0KiBmaWxlIGFuZCB3cml0ZSB0aGUgcmVzdWx0aW5nIGRlY29kZWQgYmluYXJ5Ci0gICBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBmaWxlIG9iamVjdHMKLSAgIDxmaWxlIG9iamVjdD5gLiAgKmlucHV0KiB3aWxsIGJlIHJlYWQgdW50aWwgYGBpbnB1dC5yZWFkbGluZSgpYGAgcmV0dXJucyBhbgotICAgZW1wdHkgc3RyaW5nLiBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmhlYWRlciogaXMgcHJlc2VudCBhbmQgdHJ1ZSwgdW5kZXJzY29yZQorICAgZGF0YSB0byB0aGUgKm91dHB1dCogZmlsZS4gKmlucHV0KiBhbmQgKm91dHB1dCogbXVzdCBiZSA6dGVybTpgYmluYXJ5IGZpbGUgb2JqZWN0cworICAgPGZpbGUgb2JqZWN0PmAuICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmhlYWRlciogaXMgcHJlc2VudCBhbmQgdHJ1ZSwgdW5kZXJzY29yZQogICAgd2lsbCBiZSBkZWNvZGVkIGFzIHNwYWNlLiBUaGlzIGlzIHVzZWQgdG8gZGVjb2RlICJRIi1lbmNvZGVkIGhlYWRlcnMgYXMKICAgIGRlc2NyaWJlZCBpbiA6cmZjOmAxNTIyYDogIk1JTUUgKE11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMpCiAgICBQYXJ0IFR3bzogTWVzc2FnZSBIZWFkZXIgRXh0ZW5zaW9ucyBmb3IgTm9uLUFTQ0lJIFRleHQiLgpAQCAtMzQsMjcgKzMzLDI4IEBACiAKIC4uIGZ1bmN0aW9uOjogZW5jb2RlKGlucHV0LCBvdXRwdXQsIHF1b3RldGFicywgaGVhZGVyPUZhbHNlKQogCi0gICBFbmNvZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSAqaW5wdXQqIGZpbGUgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcgcXVvdGVkLXByaW50YWJsZQotICAgZGF0YSB0byB0aGUgKm91dHB1dCogZmlsZS4gKmlucHV0KiBhbmQgKm91dHB1dCogbXVzdCBiZSA6dGVybTpgZmlsZSBvYmplY3RzCi0gICA8ZmlsZSBvYmplY3Q+YC4gICppbnB1dCogd2lsbCBiZSByZWFkIHVudGlsIGBgaW5wdXQucmVhZGxpbmUoKWBgIHJldHVybnMgYW4KLSAgIGVtcHR5IHN0cmluZy4gKnF1b3RldGFicyogaXMgYSBmbGFnIHdoaWNoIGNvbnRyb2xzIHdoZXRoZXIgdG8gZW5jb2RlIGVtYmVkZGVkCi0gICBzcGFjZXMgYW5kIHRhYnM7IHdoZW4gdHJ1ZSBpdCBlbmNvZGVzIHN1Y2ggZW1iZWRkZWQgd2hpdGVzcGFjZSwgYW5kIHdoZW4KLSAgIGZhbHNlIGl0IGxlYXZlcyB0aGVtIHVuZW5jb2RlZC4gIE5vdGUgdGhhdCBzcGFjZXMgYW5kIHRhYnMgYXBwZWFyaW5nIGF0IHRoZQotICAgZW5kIG9mIGxpbmVzIGFyZSBhbHdheXMgZW5jb2RlZCwgYXMgcGVyIDpyZmM6YDE1MjFgLiAgKmhlYWRlciogaXMgYSBmbGFnCi0gICB3aGljaCBjb250cm9scyBpZiBzcGFjZXMgYXJlIGVuY29kZWQgYXMgdW5kZXJzY29yZXMgYXMgcGVyIDpyZmM6YDE1MjJgLgorICAgRW5jb2RlIHRoZSBjb250ZW50cyBvZiB0aGUgKmlucHV0KiBmaWxlIGFuZCB3cml0ZSB0aGUgcmVzdWx0aW5nIHF1b3RlZC0KKyAgIHByaW50YWJsZSBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlCisgICA6dGVybTpgYmluYXJ5IGZpbGUgb2JqZWN0cyA8ZmlsZSBvYmplY3Q+YC4gKnF1b3RldGFicyosIGEgZmxhZyB3aGljaCBjb250cm9scworICAgd2hldGhlciB0byBlbmNvZGUgZW1iZWRkZWQgc3BhY2VzIGFuZCB0YWJzIG11c3QgYmUgcHJvdmlkZWRhIGFuZCB3aGVuIHRydWUgaXQKKyAgIGVuY29kZXMgc3VjaCBlbWJlZGRlZCB3aGl0ZXNwYWNlLCBhbmQgd2hlbiBmYWxzZSBpdCBsZWF2ZXMgdGhlbSB1bmVuY29kZWQuCisgICBOb3RlIHRoYXQgc3BhY2VzIGFuZCB0YWJzIGFwcGVhcmluZyBhdCB0aGUgZW5kIG9mIGxpbmVzIGFyZSBhbHdheXMgZW5jb2RlZCwKKyAgIGFzIHBlciA6cmZjOmAxNTIxYC4gICpoZWFkZXIqIGlzIGEgZmxhZyB3aGljaCBjb250cm9scyBpZiBzcGFjZXMgYXJlIGVuY29kZWQKKyAgIGFzIHVuZGVyc2NvcmVzIGFzIHBlciA6cmZjOmAxNTIyYC4KIAogCiAuLiBmdW5jdGlvbjo6IGRlY29kZXN0cmluZyhzLCBoZWFkZXI9RmFsc2UpCiAKLSAgIExpa2UgOmZ1bmM6YGRlY29kZWAsIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBzb3VyY2Ugc3RyaW5nIGFuZCByZXR1cm5zIHRoZQotICAgY29ycmVzcG9uZGluZyBkZWNvZGVkIHN0cmluZy4KKyAgIExpa2UgOmZ1bmM6YGRlY29kZWAsIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBzb3VyY2UgOmNsYXNzOmBieXRlc2AgYW5kCisgICByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGRlY29kZWQgOmNsYXNzOmBieXRlc2AuCiAKIAogLi4gZnVuY3Rpb246OiBlbmNvZGVzdHJpbmcocywgcXVvdGV0YWJzPUZhbHNlLCBoZWFkZXI9RmFsc2UpCiAKLSAgIExpa2UgOmZ1bmM6YGVuY29kZWAsIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBzb3VyY2Ugc3RyaW5nIGFuZCByZXR1cm5zIHRoZQotICAgY29ycmVzcG9uZGluZyBlbmNvZGVkIHN0cmluZy4gICpxdW90ZXRhYnMqIGFuZCAqaGVhZGVyKiBhcmUgb3B0aW9uYWwKLSAgIChkZWZhdWx0aW5nIHRvIGBgRmFsc2VgYCksIGFuZCBhcmUgcGFzc2VkIHN0cmFpZ2h0IHRocm91Z2ggdG8gOmZ1bmM6YGVuY29kZWAuCisgICBMaWtlIDpmdW5jOmBlbmNvZGVgLCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgc291cmNlIDpjbGFzczpgYnl0ZXNgIGFuZAorICAgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBlbmNvZGVkIDpjbGFzczpgYnl0ZXNgLiBCeSBkZWZhdWx0LCBpdCBzZW5kcyBhCisgICBGYWxzZSB2YWx1ZSB0byAqcXVvdGV0YWJzKiBwYXJhbWV0ZXIgb2YgdGhlIDpmdW5jOmBlbmNvZGVgIGZ1bmN0aW9uLgorCiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZS5yc3QgYi9Eb2MvbGlicmFyeS9yZS5yc3QKaW5kZXggZGQ3OTBlNy4uZWRiMjQ4NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlLnJzdApAQCAtNDU4LDggKzQ1OCw4IEBACiAuLiBmdW5jdGlvbjo6IGNvbXBpbGUocGF0dGVybiwgZmxhZ3M9MCkKIAogICAgQ29tcGlsZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCB3aGljaAotICAgY2FuIGJlIHVzZWQgZm9yIG1hdGNoaW5nIHVzaW5nIGl0cyA6ZnVuYzpgbWF0Y2hgIGFuZCA6ZnVuYzpgc2VhcmNoYCBtZXRob2RzLAotICAgZGVzY3JpYmVkIGJlbG93LgorICAgY2FuIGJlIHVzZWQgZm9yIG1hdGNoaW5nIHVzaW5nIGl0cyA6ZnVuYzpgfnJlZ2V4Lm1hdGNoYCBhbmQKKyAgIDpmdW5jOmB+cmVnZXguc2VhcmNoYCBtZXRob2RzLCBkZXNjcmliZWQgYmVsb3cuCiAKICAgIFRoZSBleHByZXNzaW9uJ3MgYmVoYXZpb3VyIGNhbiBiZSBtb2RpZmllZCBieSBzcGVjaWZ5aW5nIGEgKmZsYWdzKiB2YWx1ZS4KICAgIFZhbHVlcyBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzLCBjb21iaW5lZCB1c2luZyBiaXR3aXNlIE9SICh0aGUKQEAgLTQ4MSw3ICs0ODEsNyBAQAogICAgLi4gbm90ZTo6CiAKICAgICAgIFRoZSBjb21waWxlZCB2ZXJzaW9ucyBvZiB0aGUgbW9zdCByZWNlbnQgcGF0dGVybnMgcGFzc2VkIHRvCi0gICAgICA6ZnVuYzpgcmUubWF0Y2hgLCA6ZnVuYzpgcmUuc2VhcmNoYCBvciA6ZnVuYzpgcmUuY29tcGlsZWAgYXJlIGNhY2hlZCwgc28KKyAgICAgIDpmdW5jOmByZS5jb21waWxlYCBhbmQgdGhlIG1vZHVsZS1sZXZlbCBtYXRjaGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCwgc28KICAgICAgIHByb2dyYW1zIHRoYXQgdXNlIG9ubHkgYSBmZXcgcmVndWxhciBleHByZXNzaW9ucyBhdCBhIHRpbWUgbmVlZG4ndCB3b3JyeQogICAgICAgYWJvdXQgY29tcGlsaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAKQEAgLTU2Myw3ICs1NjMsNyBAQAogCiAuLiBmdW5jdGlvbjo6IHNlYXJjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApCiAKLSAgIFNjYW4gdGhyb3VnaCAqc3RyaW5nKiBsb29raW5nIGZvciBhIGxvY2F0aW9uIHdoZXJlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgIFNjYW4gdGhyb3VnaCAqc3RyaW5nKiBsb29raW5nIGZvciB0aGUgZmlyc3QgbG9jYXRpb24gd2hlcmUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgKnBhdHRlcm4qIHByb2R1Y2VzIGEgbWF0Y2gsIGFuZCByZXR1cm4gYSBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdAogICAgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiBubyBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIG1hdGNoZXMgdGhlCiAgICBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBmaW5kaW5nIGEgemVyby1sZW5ndGggbWF0Y2ggYXQgc29tZQpAQCAtNTg0LDYgKzU4NCwxNiBAQAogICAgaW5zdGVhZCAoc2VlIGFsc28gOnJlZjpgc2VhcmNoLXZzLW1hdGNoYCkuCiAKIAorLi4gZnVuY3Rpb246OiBmdWxsbWF0Y2gocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKQorCisgICBJZiB0aGUgd2hvbGUgKnN0cmluZyogbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uICpwYXR0ZXJuKiwgcmV0dXJuIGEKKyAgIGNvcnJlc3BvbmRpbmcgOnJlZjpgbWF0Y2ggb2JqZWN0IDxtYXRjaC1vYmplY3RzPmAuICBSZXR1cm4gYGBOb25lYGAgaWYgdGhlCisgICBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm47IG5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIGEKKyAgIHplcm8tbGVuZ3RoIG1hdGNoLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IHNwbGl0KHBhdHRlcm4sIHN0cmluZywgbWF4c3BsaXQ9MCwgZmxhZ3M9MCkKIAogICAgU3BsaXQgKnN0cmluZyogYnkgdGhlIG9jY3VycmVuY2VzIG9mICpwYXR0ZXJuKi4gIElmIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBhcmUKQEAgLTc1NSw3ICs3NjUsNyBAQAogCiAgICA+Pj4gcGF0dGVybiA9IHJlLmNvbXBpbGUoImQiKQogICAgPj4+IHBhdHRlcm4uc2VhcmNoKCJkb2ciKSAgICAgIyBNYXRjaCBhdCBpbmRleCAwCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEpLCBtYXRjaD0nZCc+CiAgICA+Pj4gcGF0dGVybi5zZWFyY2goImRvZyIsIDEpICAjIE5vIG1hdGNoOyBzZWFyY2ggZG9lc24ndCBpbmNsdWRlIHRoZSAiZCIKIAogCkBAIC03NzIsMTIgKzc4MiwzMCBAQAogICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJvIikKICAgID4+PiBwYXR0ZXJuLm1hdGNoKCJkb2ciKSAgICAgICMgTm8gbWF0Y2ggYXMgIm8iIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgImRvZyIuCiAgICA+Pj4gcGF0dGVybi5tYXRjaCgiZG9nIiwgMSkgICAjIE1hdGNoIGFzICJvIiBpcyB0aGUgMm5kIGNoYXJhY3RlciBvZiAiZG9nIi4KLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMSwgMiksIG1hdGNoPSdvJz4KIAogICAgSWYgeW91IHdhbnQgdG8gbG9jYXRlIGEgbWF0Y2ggYW55d2hlcmUgaW4gKnN0cmluZyosIHVzZQogICAgOm1ldGg6YH5yZWdleC5zZWFyY2hgIGluc3RlYWQgKHNlZSBhbHNvIDpyZWY6YHNlYXJjaC12cy1tYXRjaGApLgogCiAKKy4uIG1ldGhvZDo6IHJlZ2V4LmZ1bGxtYXRjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkKKworICAgSWYgdGhlIHdob2xlICpzdHJpbmcqIG1hdGNoZXMgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24sIHJldHVybiBhIGNvcnJlc3BvbmRpbmcKKyAgIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gLiAgUmV0dXJuIGBgTm9uZWBgIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QKKyAgIG1hdGNoIHRoZSBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIHplcm8tbGVuZ3RoIG1hdGNoLgorCisgICBUaGUgb3B0aW9uYWwgKnBvcyogYW5kICplbmRwb3MqIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciB0aGUKKyAgIDptZXRoOmB+cmVnZXguc2VhcmNoYCBtZXRob2QuCisKKyAgID4+PiBwYXR0ZXJuID0gcmUuY29tcGlsZSgib1tnaF0iKQorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJkb2ciKSAgICAgICMgTm8gbWF0Y2ggYXMgIm8iIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgImRvZyIuCisgICA+Pj4gcGF0dGVybi5mdWxsbWF0Y2goIm9ncmUiKSAgICAgIyBObyBtYXRjaCBhcyBub3QgdGhlIGZ1bGwgc3RyaW5nIG1hdGNoZXMuCisgICA+Pj4gcGF0dGVybi5mdWxsbWF0Y2goImRvZ2dpZSIsIDEsIDMpICAgIyBNYXRjaGVzIHdpdGhpbiBnaXZlbiBsaW1pdHMuCisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgxLCAzKSwgbWF0Y2g9J29nJz4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogcmVnZXguc3BsaXQoc3RyaW5nLCBtYXhzcGxpdD0wKQogCiAgICBJZGVudGljYWwgdG8gdGhlIDpmdW5jOmBzcGxpdGAgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuLgpAQCAtMTEzOSw3ICsxMTY3LDcgQEAKIAogICAgPj4+IHJlLm1hdGNoKCJjIiwgImFiY2RlZiIpICAjIE5vIG1hdGNoCiAgICA+Pj4gcmUuc2VhcmNoKCJjIiwgImFiY2RlZiIpICMgTWF0Y2gKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMiwgMyksIG1hdGNoPSdjJz4KIAogUmVndWxhciBleHByZXNzaW9ucyBiZWdpbm5pbmcgd2l0aCBgYCdeJ2BgIGNhbiBiZSB1c2VkIHdpdGggOmZ1bmM6YHNlYXJjaGAgdG8KIHJlc3RyaWN0IHRoZSBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmc6OgpAQCAtMTE0Nyw3ICsxMTc1LDcgQEAKICAgID4+PiByZS5tYXRjaCgiYyIsICJhYmNkZWYiKSAgIyBObyBtYXRjaAogICAgPj4+IHJlLnNlYXJjaCgiXmMiLCAiYWJjZGVmIikgIyBObyBtYXRjaAogICAgPj4+IHJlLnNlYXJjaCgiXmEiLCAiYWJjZGVmIikgICMgTWF0Y2gKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdhJz4KIAogTm90ZSBob3dldmVyIHRoYXQgaW4gOmNvbnN0OmBNVUxUSUxJTkVgIG1vZGUgOmZ1bmM6YG1hdGNoYCBvbmx5IG1hdGNoZXMgYXQgdGhlCiBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZywgd2hlcmVhcyB1c2luZyA6ZnVuYzpgc2VhcmNoYCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uCkBAIC0xMTU1LDcgKzExODMsNyBAQAogCiAgICA+Pj4gcmUubWF0Y2goJ1gnLCAnQVxuQlxuWCcsIHJlLk1VTFRJTElORSkgICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goJ15YJywgJ0FcbkJcblgnLCByZS5NVUxUSUxJTkUpICAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDQsIDUpLCBtYXRjaD0nWCc+CiAKIAogTWFraW5nIGEgUGhvbmVib29rCkBAIC0xMjc0LDkgKzEzMDIsOSBAQAogZnVuY3Rpb25hbGx5IGlkZW50aWNhbDoKIAogICAgPj4+IHJlLm1hdGNoKHIiXFcoLilcMVxXIiwgIiBmZiAiKQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9JyBmZiAnPgogICAgPj4+IHJlLm1hdGNoKCJcXFcoLilcXDFcXFciLCAiIGZmICIpCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDQpLCBtYXRjaD0nIGZmICc+CiAKIFdoZW4gb25lIHdhbnRzIHRvIG1hdGNoIGEgbGl0ZXJhbCBiYWNrc2xhc2gsIGl0IG11c3QgYmUgZXNjYXBlZCBpbiB0aGUgcmVndWxhcgogZXhwcmVzc2lvbi4gIFdpdGggcmF3IHN0cmluZyBub3RhdGlvbiwgdGhpcyBtZWFucyBgYHIiXFwiYGAuICBXaXRob3V0IHJhdyBzdHJpbmcKQEAgLTEyODQsOSArMTMxMiw5IEBACiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsOgogCiAgICA+Pj4gcmUubWF0Y2gociJcXCIsIHIiXFwiKQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J1xcJz4KICAgID4+PiByZS5tYXRjaCgiXFxcXCIsIHIiXFwiKQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J1xcJz4KIAogCiBXcml0aW5nIGEgVG9rZW5pemVyCkBAIC0xMzA1LDM2ICsxMzMzLDM2IEBACiAKICAgICBUb2tlbiA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoJ1Rva2VuJywgWyd0eXAnLCAndmFsdWUnLCAnbGluZScsICdjb2x1bW4nXSkKIAotICAgIGRlZiB0b2tlbml6ZShzKToKKyAgICBkZWYgdG9rZW5pemUoY29kZSk6CiAgICAgICAgIGtleXdvcmRzID0geydJRicsICdUSEVOJywgJ0VORElGJywgJ0ZPUicsICdORVhUJywgJ0dPU1VCJywgJ1JFVFVSTid9CiAgICAgICAgIHRva2VuX3NwZWNpZmljYXRpb24gPSBbCiAgICAgICAgICAgICAoJ05VTUJFUicsICByJ1xkKyhcLlxkKik/JyksICMgSW50ZWdlciBvciBkZWNpbWFsIG51bWJlcgogICAgICAgICAgICAgKCdBU1NJR04nLCAgcic6PScpLCAgICAgICAgICAjIEFzc2lnbm1lbnQgb3BlcmF0b3IKICAgICAgICAgICAgICgnRU5EJywgICAgIHInOycpLCAgICAgICAgICAgIyBTdGF0ZW1lbnQgdGVybWluYXRvcgogICAgICAgICAgICAgKCdJRCcsICAgICAgcidbQS1aYS16XSsnKSwgICAjIElkZW50aWZpZXJzCi0gICAgICAgICAgICAoJ09QJywgICAgICByJ1srKlwvXC1dJyksICAgICMgQXJpdGhtZXRpYyBvcGVyYXRvcnMKKyAgICAgICAgICAgICgnT1AnLCAgICAgIHInWytcLSovXScpLCAgICAgIyBBcml0aG1ldGljIG9wZXJhdG9ycwogICAgICAgICAgICAgKCdORVdMSU5FJywgcidcbicpLCAgICAgICAgICAjIExpbmUgZW5kaW5ncwotICAgICAgICAgICAgKCdTS0lQJywgICAgcidbIFx0XScpLCAgICAgICAjIFNraXAgb3ZlciBzcGFjZXMgYW5kIHRhYnMKKyAgICAgICAgICAgICgnU0tJUCcsICAgIHInWyBcdF0rJyksICAgICAgIyBTa2lwIG92ZXIgc3BhY2VzIGFuZCB0YWJzCisgICAgICAgICAgICAoJ01JU01BVENIJyxyJy4nKSwgICAgICAgICAgICMgQW55IG90aGVyIGNoYXJhY3RlcgogICAgICAgICBdCiAgICAgICAgIHRva19yZWdleCA9ICd8Jy5qb2luKCcoP1A8JXM+JXMpJyAlIHBhaXIgZm9yIHBhaXIgaW4gdG9rZW5fc3BlY2lmaWNhdGlvbikKLSAgICAgICAgZ2V0X3Rva2VuID0gcmUuY29tcGlsZSh0b2tfcmVnZXgpLm1hdGNoCi0gICAgICAgIGxpbmUgPSAxCi0gICAgICAgIHBvcyA9IGxpbmVfc3RhcnQgPSAwCi0gICAgICAgIG1vID0gZ2V0X3Rva2VuKHMpCi0gICAgICAgIHdoaWxlIG1vIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHlwID0gbW8ubGFzdGdyb3VwCi0gICAgICAgICAgICBpZiB0eXAgPT0gJ05FV0xJTkUnOgotICAgICAgICAgICAgICAgIGxpbmVfc3RhcnQgPSBwb3MKLSAgICAgICAgICAgICAgICBsaW5lICs9IDEKLSAgICAgICAgICAgIGVsaWYgdHlwICE9ICdTS0lQJzoKLSAgICAgICAgICAgICAgICB2YWwgPSBtby5ncm91cCh0eXApCi0gICAgICAgICAgICAgICAgaWYgdHlwID09ICdJRCcgYW5kIHZhbCBpbiBrZXl3b3JkczoKLSAgICAgICAgICAgICAgICAgICAgdHlwID0gdmFsCi0gICAgICAgICAgICAgICAgeWllbGQgVG9rZW4odHlwLCB2YWwsIGxpbmUsIG1vLnN0YXJ0KCktbGluZV9zdGFydCkKLSAgICAgICAgICAgIHBvcyA9IG1vLmVuZCgpCi0gICAgICAgICAgICBtbyA9IGdldF90b2tlbihzLCBwb3MpCi0gICAgICAgIGlmIHBvcyAhPSBsZW4ocyk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyICVyIG9uIGxpbmUgJWQnICUoc1twb3NdLCBsaW5lKSkKKyAgICAgICAgbGluZV9udW0gPSAxCisgICAgICAgIGxpbmVfc3RhcnQgPSAwCisgICAgICAgIGZvciBtbyBpbiByZS5maW5kaXRlcih0b2tfcmVnZXgsIGNvZGUpOgorICAgICAgICAgICAga2luZCA9IG1vLmxhc3Rncm91cAorICAgICAgICAgICAgdmFsdWUgPSBtby5ncm91cChraW5kKQorICAgICAgICAgICAgaWYga2luZCA9PSAnTkVXTElORSc6CisgICAgICAgICAgICAgICAgbGluZV9zdGFydCA9IG1vLmVuZCgpCisgICAgICAgICAgICAgICAgbGluZV9udW0gKz0gMQorICAgICAgICAgICAgZWxpZiBraW5kID09ICdTS0lQJzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbGlmIGtpbmQgPT0gJ01JU01BVENIJzoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyVyIHVuZXhwZWN0ZWQgb24gbGluZSAlZCcgJSAodmFsdWUsIGxpbmVfbnVtKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYga2luZCA9PSAnSUQnIGFuZCB2YWx1ZSBpbiBrZXl3b3JkczoKKyAgICAgICAgICAgICAgICAgICAga2luZCA9IHZhbHVlCisgICAgICAgICAgICAgICAgY29sdW1uID0gbW8uc3RhcnQoKSAtIGxpbmVfc3RhcnQKKyAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbihraW5kLCB2YWx1ZSwgbGluZV9udW0sIGNvbHVtbikKIAogICAgIHN0YXRlbWVudHMgPSAnJycKICAgICAgICAgSUYgcXVhbnRpdHkgVEhFTgpAQCAtMTM0OCwyMiArMTM3NiwyMiBAQAogCiBUaGUgdG9rZW5pemVyIHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjoKIAotICAgIFRva2VuKHR5cD0nSUYnLCB2YWx1ZT0nSUYnLCBsaW5lPTIsIGNvbHVtbj01KQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncXVhbnRpdHknLCBsaW5lPTIsIGNvbHVtbj04KQotICAgIFRva2VuKHR5cD0nVEhFTicsIHZhbHVlPSdUSEVOJywgbGluZT0yLCBjb2x1bW49MTcpCi0gICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0b3RhbCcsIGxpbmU9MywgY29sdW1uPTkpCi0gICAgVG9rZW4odHlwPSdBU1NJR04nLCB2YWx1ZT0nOj0nLCBsaW5lPTMsIGNvbHVtbj0xNSkKLSAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3RvdGFsJywgbGluZT0zLCBjb2x1bW49MTgpCi0gICAgVG9rZW4odHlwPSdPUCcsIHZhbHVlPScrJywgbGluZT0zLCBjb2x1bW49MjQpCi0gICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSdwcmljZScsIGxpbmU9MywgY29sdW1uPTI2KQotICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKicsIGxpbmU9MywgY29sdW1uPTMyKQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncXVhbnRpdHknLCBsaW5lPTMsIGNvbHVtbj0zNCkKLSAgICBUb2tlbih0eXA9J0VORCcsIHZhbHVlPSc7JywgbGluZT0zLCBjb2x1bW49NDIpCi0gICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0YXgnLCBsaW5lPTQsIGNvbHVtbj05KQotICAgIFRva2VuKHR5cD0nQVNTSUdOJywgdmFsdWU9Jzo9JywgbGluZT00LCBjb2x1bW49MTMpCi0gICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSdwcmljZScsIGxpbmU9NCwgY29sdW1uPTE2KQotICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKicsIGxpbmU9NCwgY29sdW1uPTIyKQotICAgIFRva2VuKHR5cD0nTlVNQkVSJywgdmFsdWU9JzAuMDUnLCBsaW5lPTQsIGNvbHVtbj0yNCkKLSAgICBUb2tlbih0eXA9J0VORCcsIHZhbHVlPSc7JywgbGluZT00LCBjb2x1bW49MjgpCi0gICAgVG9rZW4odHlwPSdFTkRJRicsIHZhbHVlPSdFTkRJRicsIGxpbmU9NSwgY29sdW1uPTUpCi0gICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9NSwgY29sdW1uPTEwKQorICAgIFRva2VuKHR5cD0nSUYnLCB2YWx1ZT0nSUYnLCBsaW5lPTIsIGNvbHVtbj00KQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncXVhbnRpdHknLCBsaW5lPTIsIGNvbHVtbj03KQorICAgIFRva2VuKHR5cD0nVEhFTicsIHZhbHVlPSdUSEVOJywgbGluZT0yLCBjb2x1bW49MTYpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0b3RhbCcsIGxpbmU9MywgY29sdW1uPTgpCisgICAgVG9rZW4odHlwPSdBU1NJR04nLCB2YWx1ZT0nOj0nLCBsaW5lPTMsIGNvbHVtbj0xNCkKKyAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3RvdGFsJywgbGluZT0zLCBjb2x1bW49MTcpCisgICAgVG9rZW4odHlwPSdPUCcsIHZhbHVlPScrJywgbGluZT0zLCBjb2x1bW49MjMpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSdwcmljZScsIGxpbmU9MywgY29sdW1uPTI1KQorICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKicsIGxpbmU9MywgY29sdW1uPTMxKQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncXVhbnRpdHknLCBsaW5lPTMsIGNvbHVtbj0zMykKKyAgICBUb2tlbih0eXA9J0VORCcsIHZhbHVlPSc7JywgbGluZT0zLCBjb2x1bW49NDEpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0YXgnLCBsaW5lPTQsIGNvbHVtbj04KQorICAgIFRva2VuKHR5cD0nQVNTSUdOJywgdmFsdWU9Jzo9JywgbGluZT00LCBjb2x1bW49MTIpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSdwcmljZScsIGxpbmU9NCwgY29sdW1uPTE1KQorICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKicsIGxpbmU9NCwgY29sdW1uPTIxKQorICAgIFRva2VuKHR5cD0nTlVNQkVSJywgdmFsdWU9JzAuMDUnLCBsaW5lPTQsIGNvbHVtbj0yMykKKyAgICBUb2tlbih0eXA9J0VORCcsIHZhbHVlPSc7JywgbGluZT00LCBjb2x1bW49MjcpCisgICAgVG9rZW4odHlwPSdFTkRJRicsIHZhbHVlPSdFTkRJRicsIGxpbmU9NSwgY29sdW1uPTQpCisgICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9NSwgY29sdW1uPTkpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKaW5kZXggMTEzNDYxOS4uNjkyMzEwYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdApAQCAtMTkwLDI4ICsxOTAsMzIgQEAKIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBob3cgdG8gdXNlIHRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlJ3MKIGhpc3RvcnkgcmVhZGluZyBhbmQgd3JpdGluZyBmdW5jdGlvbnMgdG8gYXV0b21hdGljYWxseSBsb2FkIGFuZCBzYXZlIGEgaGlzdG9yeQotZmlsZSBuYW1lZCA6ZmlsZTpgLnB5aGlzdGAgZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgVGhlIGNvZGUgYmVsb3cgd291bGQKLW5vcm1hbGx5IGJlIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIGludGVyYWN0aXZlIHNlc3Npb25zIGZyb20gdGhlIHVzZXIncwotOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZS4gOjoKK2ZpbGUgbmFtZWQgOmZpbGU6YC5weXRob25faGlzdG9yeWAgZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgVGhlIGNvZGUKK2JlbG93IHdvdWxkIG5vcm1hbGx5IGJlIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIGludGVyYWN0aXZlIHNlc3Npb25zCitmcm9tIHRoZSB1c2VyJ3MgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZS4gOjoKIAorICAgaW1wb3J0IGF0ZXhpdAogICAgaW1wb3J0IG9zCiAgICBpbXBvcnQgcmVhZGxpbmUKLSAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcigifiIpLCAiLnB5aGlzdCIpCisKKyAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcigifiIpLCAiLnB5dGhvbl9oaXN0b3J5IikKICAgIHRyeToKICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZShoaXN0ZmlsZSkKICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICAgICAgICBwYXNzCi0gICBpbXBvcnQgYXRleGl0CisKICAgIGF0ZXhpdC5yZWdpc3RlcihyZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUsIGhpc3RmaWxlKQotICAgZGVsIG9zLCBoaXN0ZmlsZQorCitUaGlzIGNvZGUgaXMgYWN0dWFsbHkgYXV0b21hdGljYWxseSBydW4gd2hlbiBQeXRob24gaXMgcnVuIGluCis6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlIDx0dXQtaW50ZXJhY3RpdmU+YCAoc2VlIDpyZWY6YHJsY29tcGxldGVyLWNvbmZpZ2ApLgogCiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZXh0ZW5kcyB0aGUgOmNsYXNzOmBjb2RlLkludGVyYWN0aXZlQ29uc29sZWAgY2xhc3MgdG8KIHN1cHBvcnQgaGlzdG9yeSBzYXZlL3Jlc3RvcmUuIDo6CiAKLSAgIGltcG9ydCBjb2RlCi0gICBpbXBvcnQgcmVhZGxpbmUKICAgIGltcG9ydCBhdGV4aXQKKyAgIGltcG9ydCBjb2RlCiAgICBpbXBvcnQgb3MKKyAgIGltcG9ydCByZWFkbGluZQogCiAgICBjbGFzcyBIaXN0b3J5Q29uc29sZShjb2RlLkludGVyYWN0aXZlQ29uc29sZSk6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2Fscz1Ob25lLCBmaWxlbmFtZT0iPGNvbnNvbGU+IiwKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlcHJsaWIucnN0IGIvRG9jL2xpYnJhcnkvcmVwcmxpYi5yc3QKaW5kZXggMjRhOGU1Mi4uNTY4YWM2ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVwcmxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmVwcmxpYi5yc3QKQEAgLTQ5LDggKzQ5LDggQEAKIAogICAgICAgICA+Pj4gY2xhc3MgTXlMaXN0KGxpc3QpOgogICAgICAgICAuLi4gICAgIEByZWN1cnNpdmVfcmVwcigpCi0gICAgICAgIC4uLiAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgLi4uICAgICAgICAgIHJldHVybiAnPCcgKyAnfCcuam9pbihtYXAocmVwciwgc2VsZikpICsgJz4nCisgICAgICAgIC4uLiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAuLi4gICAgICAgICByZXR1cm4gJzwnICsgJ3wnLmpvaW4obWFwKHJlcHIsIHNlbGYpKSArICc+JwogICAgICAgICAuLi4KICAgICAgICAgPj4+IG0gPSBNeUxpc3QoJ2FiYycpCiAgICAgICAgID4+PiBtLmFwcGVuZChtKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0IGIvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CmluZGV4IGVkODU4NTAuLmY4MTEyY2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKQEAgLTc0LDYgKzc0LDI3IEBACiAgICBgYHNldHJsaW1pdGBgIG1heSBhbHNvIHJhaXNlIDpleGM6YGVycm9yYCBpZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0gY2FsbAogICAgZmFpbHMuCiAKKy4uIGZ1bmN0aW9uOjogcHJsaW1pdChwaWQsIHJlc291cmNlWywgbGltaXRzXSkKKworICAgQ29tYmluZXMgOmZ1bmM6YHNldHJsaW1pdGAgYW5kIDpmdW5jOmBnZXRybGltaXRgIGluIG9uZSBmdW5jdGlvbiBhbmQKKyAgIHN1cHBvcnRzIHRvIGdldCBhbmQgc2V0IHRoZSByZXNvdXJjZXMgbGltaXRzIG9mIGFuIGFyYml0cmFyeSBwcm9jZXNzLiBJZgorICAgKnBpZCogaXMgMCwgdGhlbiB0aGUgY2FsbCBhcHBsaWVzIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuICpyZXNvdXJjZSogYW5kCisgICAqbGltaXRzKiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YHNldHJsaW1pdGAsIGV4Y2VwdCB0aGF0CisgICAqbGltaXRzKiBpcyBvcHRpb25hbC4KKworICAgV2hlbiAqbGltaXRzKiBpcyBub3QgZ2l2ZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlICpyZXNvdXJjZSogbGltaXQgb2YgdGhlCisgICBwcm9jZXNzICpwaWQqLiBXaGVuICpsaW1pdHMqIGlzIGdpdmVuIHRoZSAqcmVzb3VyY2UqIGxpbWl0IG9mIHRoZSBwcm9jZXNzIGlzCisgICBzZXQgYW5kIHRoZSBmb3JtZXIgcmVzb3VyY2UgbGltaXQgaXMgcmV0dXJuZWQuCisKKyAgIFJhaXNlcyA6ZXhjOmBQcm9jZXNzTG9va3VwRXJyb3JgIHdoZW4gKnBpZCogY2FuJ3QgYmUgZm91bmQgYW5kCisgICA6ZXhjOmBQZXJtaXNzaW9uRXJyb3JgIHdoZW4gdGhlIHVzZXIgZG9lc24ndCBoYXZlIGBgQ0FQX1NZU19SRVNPVVJDRWBgIGZvcgorICAgdGhlIHByb2Nlc3MuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjM2IG9yIGxhdGVyIHdpdGggZ2xpYmMgMi4xMyBvciBsYXRlcgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBUaGVzZSBzeW1ib2xzIGRlZmluZSByZXNvdXJjZXMgd2hvc2UgY29uc3VtcHRpb24gY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgdGhlCiA6ZnVuYzpgc2V0cmxpbWl0YCBhbmQgOmZ1bmM6YGdldHJsaW1pdGAgZnVuY3Rpb25zIGRlc2NyaWJlZCBiZWxvdy4gVGhlIHZhbHVlcyBvZgogdGhlc2Ugc3ltYm9scyBhcmUgZXhhY3RseSB0aGUgY29uc3RhbnRzIHVzZWQgYnkgQyBwcm9ncmFtcy4KQEAgLTE1MSw2ICsxNzIsODAgQEAKICAgIFRoZSBtYXhpbXVtIGFyZWEgKGluIGJ5dGVzKSBvZiBhZGRyZXNzIHNwYWNlIHdoaWNoIG1heSBiZSB0YWtlbiBieSB0aGUgcHJvY2Vzcy4KIAogCisuLiBkYXRhOjogUkxJTUlUX01TR1FVRVVFCisKKyAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkIGZvciBQT1NJWCBtZXNzYWdlIHF1ZXVlcy4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuOCBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9OSUNFCisKKyAgIFRoZSBjZWlsaW5nIGZvciB0aGUgcHJvY2VzcydzIG5pY2UgbGV2ZWwgKGNhbGN1bGF0ZWQgYXMgMjAgLSBybGltX2N1cikuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjEyIG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX1JUUFJJTworCisgICBUaGUgY2VpbGluZyBvZiB0aGUgcmVhbC10aW1lIHByaW9yaXR5LgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4xMiBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9SVFRJTUUKKworICAgVGhlIHRpbWUgbGltaXQgKGluIG1pY3Jvc2Vjb25kcykgb24gQ1BVIHRpbWUgdGhhdCBhIHByb2Nlc3MgY2FuIHNwZW5kCisgICB1bmRlciByZWFsLXRpbWUgc2NoZWR1bGluZyB3aXRob3V0IG1ha2luZyBhIGJsb2NraW5nIHN5c2NhbGwuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjI1IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX1NJR1BFTkRJTkcKKworICAgVGhlIG51bWJlciBvZiBzaWduYWxzIHdoaWNoIHRoZSBwcm9jZXNzIG1heSBxdWV1ZS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuOCBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBSTElNSVRfU0JTSVpFCisKKyAgIFRoZSBtYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiBzb2NrZXQgYnVmZmVyIHVzYWdlIGZvciB0aGlzIHVzZXIuCisgICBUaGlzIGxpbWl0cyB0aGUgYW1vdW50IG9mIG5ldHdvcmsgbWVtb3J5LCBhbmQgaGVuY2UgdGhlIGFtb3VudCBvZiBtYnVmcywKKyAgIHRoYXQgdGhpcyB1c2VyIG1heSBob2xkIGF0IGFueSB0aW1lLgorCisgICBBdmFpbGFiaWxpdHk6IEZyZWVCU0QgOSBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBSTElNSVRfU1dBUAorCisgICBUaGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgdGhlIHN3YXAgc3BhY2UgdGhhdCBtYXkgYmUgcmVzZXJ2ZWQgb3IKKyAgIHVzZWQgYnkgYWxsIG9mIHRoaXMgdXNlciBpZCdzIHByb2Nlc3Nlcy4KKyAgIFRoaXMgbGltaXQgaXMgZW5mb3JjZWQgb25seSBpZiBiaXQgMSBvZiB0aGUgdm0ub3ZlcmNvbW1pdCBzeXNjdGwgaXMgc2V0LgorICAgUGxlYXNlIHNlZSA6bWFucGFnZTpgdHVuaW5nKDcpYCBmb3IgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGlzIHN5c2N0bC4KKworICAgQXZhaWxhYmlsaXR5OiBGcmVlQlNEIDkgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUkxJTUlUX05QVFMKKworICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHBzZXVkby10ZXJtaW5hbHMgY3JlYXRlZCBieSB0aGlzIHVzZXIgaWQuCisKKyAgIEF2YWlsYWJpbGl0eTogRnJlZUJTRCA5IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogUmVzb3VyY2UgVXNhZ2UKIC0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdCBiL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdAppbmRleCA2MzMwODhkLi45ZWQwMWM3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CkBAIC0yNywxOCArMjcsMTAgQEAKICAgIHJlYWRsaW5lLl9fbmFtZV9fICAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoCiAgICA+Pj4gcmVhZGxpbmUuCiAKLVRoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlIGlzIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBQeXRob24ncyBpbnRlcmFjdGl2ZQotbW9kZS4gIEEgdXNlciBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gaGlzIG9yIGhlciBpbml0aWFsaXphdGlvbiBmaWxlCi0oaWRlbnRpZmllZCBieSB0aGUgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZW52aXJvbm1lbnQgdmFyaWFibGUpIHRvIGdldAotYXV0b21hdGljIDprYmQ6YFRhYmAgY29tcGxldGlvbjo6Ci0KLSAgIHRyeToKLSAgICAgICBpbXBvcnQgcmVhZGxpbmUKLSAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICBwcmludCgiTW9kdWxlIHJlYWRsaW5lIG5vdCBhdmFpbGFibGUuIikKLSAgIGVsc2U6Ci0gICAgICAgaW1wb3J0IHJsY29tcGxldGVyCi0gICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoInRhYjogY29tcGxldGUiKQorVGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFB5dGhvbidzCis6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlIDx0dXQtaW50ZXJhY3RpdmU+YC4gIFVubGVzcyBQeXRob24gaXMgcnVuIHdpdGggdGhlCis6b3B0aW9uOmAtU2Agb3B0aW9uLCB0aGUgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQKKyhzZWUgOnJlZjpgcmxjb21wbGV0ZXItY29uZmlnYCkuCiAKIE9uIHBsYXRmb3JtcyB3aXRob3V0IDptb2Q6YHJlYWRsaW5lYCwgdGhlIDpjbGFzczpgQ29tcGxldGVyYCBjbGFzcyBkZWZpbmVkIGJ5CiB0aGlzIG1vZHVsZSBjYW4gc3RpbGwgYmUgdXNlZCBmb3IgY3VzdG9tIHB1cnBvc2VzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcnVucHkucnN0IGIvRG9jL2xpYnJhcnkvcnVucHkucnN0CmluZGV4IDY5MTliYzAuLmE3NjQ2OTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3J1bnB5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9ydW5weS5yc3QKQEAgLTI4LDYgKzI4LDkgQEAKIAogLi4gZnVuY3Rpb246OiBydW5fbW9kdWxlKG1vZF9uYW1lLCBpbml0X2dsb2JhbHM9Tm9uZSwgcnVuX25hbWU9Tm9uZSwgYWx0ZXJfc3lzPUZhbHNlKQogCisgICAuLiBpbmRleDo6CisgICAgICBtb2R1bGU6IF9fbWFpbl9fCisKICAgIEV4ZWN1dGUgdGhlIGNvZGUgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIG1vZHVsZQogICAgZ2xvYmFscyBkaWN0aW9uYXJ5LiBUaGUgbW9kdWxlJ3MgY29kZSBpcyBmaXJzdCBsb2NhdGVkIHVzaW5nIHRoZSBzdGFuZGFyZAogICAgaW1wb3J0IG1lY2hhbmlzbSAocmVmZXIgdG8gOnBlcDpgMzAyYCBmb3IgZGV0YWlscykgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYQpAQCAtNDQsMjggKzQ3LDIyIEBACiAgICBiZWxvdyBhcmUgZGVmaW5lZCBpbiB0aGUgc3VwcGxpZWQgZGljdGlvbmFyeSwgdGhvc2UgZGVmaW5pdGlvbnMgYXJlCiAgICBvdmVycmlkZGVuIGJ5IDpmdW5jOmBydW5fbW9kdWxlYC4KIAotICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGAsCi0gICBgYF9fbG9hZGVyX19gYAotICAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUKLSAgIGNvZGUgaXMgZXhlY3V0ZWQgKE5vdGUgdGhhdCB0aGlzIGlzIGEgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIKLSAgIHZhcmlhYmxlcyBtYXkgYmUgc2V0IGltcGxpY2l0bHkgYXMgYW4gaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KKyAgIFRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMgYGBfX25hbWVfX2BgLCBgYF9fc3BlY19fYGAsIGBgX19maWxlX19gYCwKKyAgIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMKKyAgIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYQorICAgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbgorICAgaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KIAogICAgYGBfX25hbWVfX2BgIGlzIHNldCB0byAqcnVuX25hbWUqIGlmIHRoaXMgb3B0aW9uYWwgYXJndW1lbnQgaXMgbm90CiAgICA6Y29uc3Q6YE5vbmVgLCB0byBgYG1vZF9uYW1lICsgJy5fX21haW5fXydgYCBpZiB0aGUgbmFtZWQgbW9kdWxlIGlzIGEKICAgIHBhY2thZ2UgYW5kIHRvIHRoZSAqbW9kX25hbWUqIGFyZ3VtZW50IG90aGVyd2lzZS4KIAotICAgYGBfX2ZpbGVfX2BgIGlzIHNldCB0byB0aGUgbmFtZSBwcm92aWRlZCBieSB0aGUgbW9kdWxlIGxvYWRlci4gSWYgdGhlCi0gICBsb2FkZXIgZG9lcyBub3QgbWFrZSBmaWxlbmFtZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgaXMgc2V0Ci0gICB0byA6Y29uc3Q6YE5vbmVgLgorICAgYGBfX3NwZWNfX2BgIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZm9yIHRoZSAqYWN0dWFsbHkqIGltcG9ydGVkCisgICBtb2R1bGUgKHRoYXQgaXMsIGBgX19zcGVjX18ubmFtZWBgIHdpbGwgYWx3YXlzIGJlICptb2RfbmFtZSogb3IKKyAgIGBgbW9kX25hbWUgKyAnLl9fbWFpbl9fYGAsIG5ldmVyICpydW5fbmFtZSopLgogCi0gICBgYF9fY2FjaGVkX19gYCB3aWxsIGJlIHNldCB0byBgYE5vbmVgYC4KLQotICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSA6cGVwOmAzMDJgIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUKLSAgIGNvZGUgZm9yIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZAotICAgaW1wb3J0IG1lY2hhbmlzbSkuCi0KLSAgIGBgX19wYWNrYWdlX19gYCBpcyBzZXQgdG8gKm1vZF9uYW1lKiBpZiB0aGUgbmFtZWQgbW9kdWxlIGlzIGEgcGFja2FnZSBhbmQKLSAgIHRvIGBgbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdYGAgb3RoZXJ3aXNlLgorICAgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCwgYGBfX2xvYWRlcl9fYGAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUKKyAgIDpyZWY6YHNldCBhcyBub3JtYWwgPGltcG9ydC1tb2QtYXR0cnM+YCBiYXNlZCBvbiB0aGUgbW9kdWxlIHNwZWMuCiAKICAgIElmIHRoZSBhcmd1bWVudCAqYWx0ZXJfc3lzKiBpcyBzdXBwbGllZCBhbmQgZXZhbHVhdGVzIHRvIDpjb25zdDpgVHJ1ZWAsCiAgICB0aGVuIGBgc3lzLmFyZ3ZbMF1gYCBpcyB1cGRhdGVkIHdpdGggdGhlIHZhbHVlIG9mIGBgX19maWxlX19gYCBhbmQKQEAgLTgzLDExICs4MCwxOSBAQAogICAgICAgQWRkZWQgYWJpbGl0eSB0byBleGVjdXRlIHBhY2thZ2VzIGJ5IGxvb2tpbmcgZm9yIGEgYGBfX21haW5fX2BgIHN1Ym1vZHVsZS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgICAgIEFkZGVkIGBgX19jYWNoZWRfX2BgIGdsb2JhbCB2YXJpYWJsZSAoc2VlIDpQRVA6YDMxNDdgKS4KKyAgICAgIEFkZGVkIGBgX19jYWNoZWRfX2BgIGdsb2JhbCB2YXJpYWJsZSAoc2VlIDpwZXA6YDMxNDdgKS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFVwZGF0ZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG1vZHVsZSBzcGVjIGZlYXR1cmUgYWRkZWQgYnkKKyAgICAgIDpwZXA6YDQ1MWAuIFRoaXMgYWxsb3dzIGBgX19jYWNoZWRfX2BgIHRvIGJlIHNldCBjb3JyZWN0bHkgZm9yIG1vZHVsZXMKKyAgICAgIHJ1biB0aGlzIHdheSwgYXMgd2VsbCBhcyBlbnN1cmluZyB0aGUgcmVhbCBtb2R1bGUgbmFtZSBpcyBhbHdheXMKKyAgICAgIGFjY2Vzc2libGUgYXMgYGBfX3NwZWNfXy5uYW1lYGAuCiAKIC4uIGZ1bmN0aW9uOjogcnVuX3BhdGgoZmlsZV9wYXRoLCBpbml0X2dsb2JhbHM9Tm9uZSwgcnVuX25hbWU9Tm9uZSkKIAorICAgLi4gaW5kZXg6OgorICAgICAgbW9kdWxlOiBfX21haW5fXworCiAgICBFeGVjdXRlIHRoZSBjb2RlIGF0IHRoZSBuYW1lZCBmaWxlc3lzdGVtIGxvY2F0aW9uIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZwogICAgbW9kdWxlIGdsb2JhbHMgZGljdGlvbmFyeS4gQXMgd2l0aCBhIHNjcmlwdCBuYW1lIHN1cHBsaWVkIHRvIHRoZSBDUHl0aG9uCiAgICBjb21tYW5kIGxpbmUsIHRoZSBzdXBwbGllZCBwYXRoIG1heSByZWZlciB0byBhIFB5dGhvbiBzb3VyY2UgZmlsZSwgYQpAQCAtMTA4LDIzICsxMTMsMjggQEAKICAgIGJlbG93IGFyZSBkZWZpbmVkIGluIHRoZSBzdXBwbGllZCBkaWN0aW9uYXJ5LCB0aG9zZSBkZWZpbml0aW9ucyBhcmUKICAgIG92ZXJyaWRkZW4gYnkgOmZ1bmM6YHJ1bl9wYXRoYC4KIAotICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2xvYWRlcl9fYGAKLSAgIGFuZCBgYF9fcGFja2FnZV9fYGAgYXJlIHNldCBpbiB0aGUgZ2xvYmFscyBkaWN0aW9uYXJ5IGJlZm9yZSB0aGUgbW9kdWxlCi0gICBjb2RlIGlzIGV4ZWN1dGVkIChOb3RlIHRoYXQgdGhpcyBpcyBhIG1pbmltYWwgc2V0IG9mIHZhcmlhYmxlcyAtIG90aGVyCi0gICB2YXJpYWJsZXMgbWF5IGJlIHNldCBpbXBsaWNpdGx5IGFzIGFuIGludGVycHJldGVyIGltcGxlbWVudGF0aW9uIGRldGFpbCkuCisgICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX3NwZWNfX2BgLCBgYF9fZmlsZV9fYGAsCisgICBgYF9fY2FjaGVkX19gYCwgYGBfX2xvYWRlcl9fYGAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzCisgICBkaWN0aW9uYXJ5IGJlZm9yZSB0aGUgbW9kdWxlIGNvZGUgaXMgZXhlY3V0ZWQgKE5vdGUgdGhhdCB0aGlzIGlzIGEKKyAgIG1pbmltYWwgc2V0IG9mIHZhcmlhYmxlcyAtIG90aGVyIHZhcmlhYmxlcyBtYXkgYmUgc2V0IGltcGxpY2l0bHkgYXMgYW4KKyAgIGludGVycHJldGVyIGltcGxlbWVudGF0aW9uIGRldGFpbCkuCiAKICAgIGBgX19uYW1lX19gYCBpcyBzZXQgdG8gKnJ1bl9uYW1lKiBpZiB0aGlzIG9wdGlvbmFsIGFyZ3VtZW50IGlzIG5vdAogICAgOmNvbnN0OmBOb25lYCBhbmQgdG8gYGAnPHJ1bl9wYXRoPidgYCBvdGhlcndpc2UuCiAKLSAgIGBgX19maWxlX19gYCBpcyBzZXQgdG8gdGhlIG5hbWUgcHJvdmlkZWQgYnkgdGhlIG1vZHVsZSBsb2FkZXIuIElmIHRoZQotICAgbG9hZGVyIGRvZXMgbm90IG1ha2UgZmlsZW5hbWUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGlzIHNldAotICAgdG8gOmNvbnN0OmBOb25lYC4gRm9yIGEgc2ltcGxlIHNjcmlwdCwgdGhpcyB3aWxsIGJlIHNldCB0byBgYGZpbGVfcGF0aGBgLgorICAgSWYgdGhlIHN1cHBsaWVkIHBhdGggZGlyZWN0bHkgcmVmZXJlbmNlcyBhIHNjcmlwdCBmaWxlICh3aGV0aGVyIGFzIHNvdXJjZQorICAgb3IgYXMgcHJlY29tcGlsZWQgYnl0ZSBjb2RlKSwgdGhlbiBgYF9fZmlsZV9fYGAgd2lsbCBiZSBzZXQgdG8gdGhlCisgICBzdXBwbGllZCBwYXRoLCBhbmQgYGBfX3NwZWNfX2BgLCBgYF9fY2FjaGVkX19gYCwgYGBfX2xvYWRlcl9fYGAgYW5kCisgICBgYF9fcGFja2FnZV9fYGAgd2lsbCBhbGwgYmUgc2V0IHRvIDpjb25zdDpgTm9uZWAuCiAKLSAgIGBgX19sb2FkZXJfX2BgIGlzIHNldCB0byB0aGUgOnBlcDpgMzAyYCBtb2R1bGUgbG9hZGVyIHVzZWQgdG8gcmV0cmlldmUgdGhlCi0gICBjb2RlIGZvciB0aGUgbW9kdWxlIChUaGlzIGxvYWRlciBtYXkgYmUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgc3RhbmRhcmQKLSAgIGltcG9ydCBtZWNoYW5pc20pLiBGb3IgYSBzaW1wbGUgc2NyaXB0LCB0aGlzIHdpbGwgYmUgc2V0IHRvIDpjb25zdDpgTm9uZWAuCisgICBgYF9fc3BlY19fYGAgd2lsbCBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYCBpZiB0aGUgc3VwcGxpZWQgcGF0aCBpcyBhCisgICBkaXJlY3QgcGF0aCB0byBhIHNjcmlwdCAoYXMgc291cmNlIG9yIGFzIHByZWNvbXBpbGVkIGJ5dGVjb2RlKS4KIAotICAgYGBfX3BhY2thZ2VfX2BgIGlzIHNldCB0byBgYF9fbmFtZV9fLnJwYXJ0aXRpb24oJy4nKVswXWBgLgorICAgSWYgdGhlIHN1cHBsaWVkIHBhdGggaXMgYSByZWZlcmVuY2UgdG8gYSB2YWxpZCBzeXMucGF0aCBlbnRyeSwgdGhlbgorICAgYGBfX3NwZWNfX2BgIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBpbXBvcnRlZCBgYF9fbWFpbl9fYGAKKyAgIG1vZHVsZSAodGhhdCBpcywgYGBfX3NwZWNfXy5uYW1lYGAgd2lsbCBhbHdheXMgYmUgYGBfX21haW5fX2BgKS4KKyAgIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGAsIGBgX19sb2FkZXJfX2BgIGFuZCBgYF9fcGFja2FnZV9fYGAgd2lsbCBiZQorICAgOnJlZjpgc2V0IGFzIG5vcm1hbCA8aW1wb3J0LW1vZC1hdHRycz5gIGJhc2VkIG9uIHRoZSBtb2R1bGUgc3BlYy4KIAogICAgQSBudW1iZXIgb2YgYWx0ZXJhdGlvbnMgYXJlIGFsc28gbWFkZSB0byB0aGUgOm1vZDpgc3lzYCBtb2R1bGUuIEZpcnN0bHksCiAgICBgYHN5cy5wYXRoYGAgbWF5IGJlIGFsdGVyZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiBgYHN5cy5hcmd2WzBdYGAgaXMgdXBkYXRlZApAQCAtMTQxLDYgKzE1MSwxMiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFVwZGF0ZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG1vZHVsZSBzcGVjIGZlYXR1cmUgYWRkZWQgYnkKKyAgICAgIDpwZXA6YDQ1MWAuIFRoaXMgYWxsb3dzIGBgX19jYWNoZWRfX2BgIHRvIGJlIHNldCBjb3JyZWN0bHkgaW4gdGhlCisgICAgICBjYXNlIHdoZXJlIGBgX19tYWluX19gYCBpcyBpbXBvcnRlZCBmcm9tIGEgdmFsaWQgc3lzLnBhdGggZW50cnkgcmF0aGVyCisgICAgICB0aGFuIGJlaW5nIGV4ZWN1dGVkIGRpcmVjdGx5LgorCiAuLiBzZWVhbHNvOjoKIAogICAgOnBlcDpgMzM4YCAtIEV4ZWN1dGluZyBtb2R1bGVzIGFzIHNjcmlwdHMKQEAgLTE0OSw2ICsxNjUsOSBAQAogICAgOnBlcDpgMzY2YCAtIE1haW4gbW9kdWxlIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMKICAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBOaWNrIENvZ2hsYW4uCiAKKyAgIDpwZXA6YDQ1MWAgLSBBIE1vZHVsZVNwZWMgVHlwZSBmb3IgdGhlIEltcG9ydCBTeXN0ZW0KKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBFcmljIFNub3cKKwogICAgOnJlZjpgdXNpbmctb24tZ2VuZXJhbGAgLSBDUHl0aG9uIGNvbW1hbmQgbGluZSBkZXRhaWxzCiAKICAgIFRoZSA6ZnVuYzpgaW1wb3J0bGliLmltcG9ydF9tb2R1bGVgIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdAppbmRleCBiMWZkM2E4Li45NzNhMGNjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKQEAgLTE0LDYgKzE0LDE0IEBACiBJdCBjYW5ub3QgYmUgdXNlZCBvbiByZWd1bGFyIGZpbGVzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZmlsZSBoYXMgZ3Jvd24gc2luY2UKIGl0IHdhcyBsYXN0IHJlYWQuCiAKKy4uIG5vdGU6OgorCisgICBUaGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08KKyAgIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUgOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4gVXNlcnMgYXJlCisgICBlbmNvdXJhZ2VkIHRvIHVzZSB0aGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgaW5zdGVhZCwgdW5sZXNzIHRoZXkgd2FudAorICAgcHJlY2lzZSBjb250cm9sIG92ZXIgdGhlIE9TLWxldmVsIHByaW1pdGl2ZXMgdXNlZC4KKworCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZzoKIAogCkBAIC0zNywyMSArNDUsMzcgQEAKICAgIGluY3JlYXNlcyB0aGlzIHZhbHVlLCA6YzpmdW5jOmBkZXZwb2xsYCBtYXkgcmV0dXJuIGFuCiAgICBpbmNvbXBsZXRlIGxpc3Qgb2YgYWN0aXZlIGZpbGUgZGVzY3JpcHRvcnMuCiAKKyAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAuLiBmdW5jdGlvbjo6IGVwb2xsKHNpemVoaW50PS0xLCBmbGFncz0wKQogCiAgICAoT25seSBzdXBwb3J0ZWQgb24gTGludXggMi41LjQ0IGFuZCBuZXdlci4pIFJldHVybiBhbiBlZGdlIHBvbGxpbmcgb2JqZWN0LAogICAgd2hpY2ggY2FuIGJlIHVzZWQgYXMgRWRnZSBvciBMZXZlbCBUcmlnZ2VyZWQgaW50ZXJmYWNlIGZvciBJL08KICAgIGV2ZW50cy4gKnNpemVoaW50KiBpcyBkZXByZWNhdGVkIGFuZCBjb21wbGV0ZWx5IGlnbm9yZWQuICpmbGFncyogY2FuIGJlIHNldAogICAgdG8gOmNvbnN0OmBFUE9MTF9DTE9FWEVDYCwgd2hpY2ggY2F1c2VzIHRoZSBlcG9sbCBkZXNjcmlwdG9yIHRvIGJlIGNsb3NlZAotICAgYXV0b21hdGljYWxseSB3aGVuIDpmdW5jOmBvcy5leGVjdmVgIGlzIGNhbGxlZC4gU2VlIHNlY3Rpb24KLSAgIDpyZWY6YGVwb2xsLW9iamVjdHNgIGJlbG93IGZvciB0aGUgbWV0aG9kcyBzdXBwb3J0ZWQgYnkgZXBvbGxpbmcgb2JqZWN0cy4KKyAgIGF1dG9tYXRpY2FsbHkgd2hlbiA6ZnVuYzpgb3MuZXhlY3ZlYCBpcyBjYWxsZWQuCiAKKyAgIFNlZSB0aGUgOnJlZjpgZXBvbGwtb2JqZWN0c2Agc2VjdGlvbiBiZWxvdyBmb3IgdGhlIG1ldGhvZHMgc3VwcG9ydGVkIGJ5CisgICBlcG9sbGluZyBvYmplY3RzLgorCisgICBgYGVwb2xsYGAgb2JqZWN0cyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2w6IHdoZW4gdXNlZCBpbiBhCisgICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCB0aGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZAorICAgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suCisKKyAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIEFkZGVkIHRoZSAqZmxhZ3MqIHBhcmFtZXRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFN1cHBvcnQgZm9yIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdhcyBhZGRlZC4KKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwb2xsKCkKIApAQCAtNjYsNiArOTAsMTEgQEAKICAgIChPbmx5IHN1cHBvcnRlZCBvbiBCU0QuKSAgUmV0dXJucyBhIGtlcm5lbCBxdWV1ZSBvYmplY3Q7IHNlZSBzZWN0aW9uCiAgICA6cmVmOmBrcXVldWUtb2JqZWN0c2AgYmVsb3cgZm9yIHRoZSBtZXRob2RzIHN1cHBvcnRlZCBieSBrcXVldWUgb2JqZWN0cy4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IGtldmVudChpZGVudCwgZmlsdGVyPUtRX0ZJTFRFUl9SRUFELCBmbGFncz1LUV9FVl9BREQsIGZmbGFncz0wLCBkYXRhPTAsIHVkYXRhPTApCiAKQEAgLTE0NCw2ICsxNzMsMjcgQEAKIG9iamVjdC4KIAogCisuLiBtZXRob2Q6OiBkZXZwb2xsLmNsb3NlKCkKKworICAgQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgcG9sbGluZyBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGF0dHJpYnV0ZTo6IGRldnBvbGwuY2xvc2VkCisKKyAgIGBgVHJ1ZWBgIGlmIHRoZSBwb2xsaW5nIG9iamVjdCBpcyBjbG9zZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIG1ldGhvZDo6IGRldnBvbGwuZmlsZW5vKCkKKworICAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIHRoZSBwb2xsaW5nIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogZGV2cG9sbC5yZWdpc3RlcihmZFssIGV2ZW50bWFza10pCiAKICAgIFJlZ2lzdGVyIGEgZmlsZSBkZXNjcmlwdG9yIHdpdGggdGhlIHBvbGxpbmcgb2JqZWN0LiAgRnV0dXJlIGNhbGxzIHRvIHRoZQpAQCAtMjQxLDYgKzI5MSwxMSBAQAogICAgQ2xvc2UgdGhlIGNvbnRyb2wgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBlcG9sbCBvYmplY3QuCiAKIAorLi4gYXR0cmlidXRlOjogZXBvbGwuY2xvc2VkCisKKyAgIGBgVHJ1ZWBgIGlmIHRoZSBlcG9sbCBvYmplY3QgaXMgY2xvc2VkLgorCisKIC4uIG1ldGhvZDo6IGVwb2xsLmZpbGVubygpCiAKICAgIFJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBvZiB0aGUgY29udHJvbCBmZC4KQEAgLTI1OCw3ICszMTMsNyBAQAogCiAuLiBtZXRob2Q6OiBlcG9sbC5tb2RpZnkoZmQsIGV2ZW50bWFzaykKIAotICAgTW9kaWZ5IGEgcmVnaXN0ZXIgZmlsZSBkZXNjcmlwdG9yLgorICAgTW9kaWZ5IGEgcmVnaXN0ZXJlZCBmaWxlIGRlc2NyaXB0b3IuCiAKIAogLi4gbWV0aG9kOjogZXBvbGwudW5yZWdpc3RlcihmZCkKQEAgLTMyMiw3ICszNzcsNyBAQAogCiAgICBNb2RpZmllcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgZmQuIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcwogICAgYGByZWdpc3RlcihmZCwgZXZlbnRtYXNrKWBgLiAgQXR0ZW1wdGluZyB0byBtb2RpZnkgYSBmaWxlIGRlc2NyaXB0b3IKLSAgIHRoYXQgd2FzIG5ldmVyIHJlZ2lzdGVyZWQgY2F1c2VzIGFuIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiB3aXRoIGVycm5vCisgICB0aGF0IHdhcyBuZXZlciByZWdpc3RlcmVkIGNhdXNlcyBhbiA6ZXhjOmBPU0Vycm9yYCBleGNlcHRpb24gd2l0aCBlcnJubwogICAgOmNvbnN0OmBFTk9FTlRgIHRvIGJlIHJhaXNlZC4KIAogCkBAIC0zNjAsNiArNDE1LDExIEBACiAgICBDbG9zZSB0aGUgY29udHJvbCBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGtxdWV1ZSBvYmplY3QuCiAKIAorLi4gYXR0cmlidXRlOjoga3F1ZXVlLmNsb3NlZAorCisgICBgYFRydWVgYCBpZiB0aGUga3F1ZXVlIG9iamVjdCBpcyBjbG9zZWQuCisKKwogLi4gbWV0aG9kOjoga3F1ZXVlLmZpbGVubygpCiAKICAgIFJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBvZiB0aGUgY29udHJvbCBmZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdG9ycy5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Mzc3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0CkBAIC0wLDAgKzEsMjU3IEBACis6bW9kOmBzZWxlY3RvcnNgIC0tIEhpZ2gtbGV2ZWwgSS9PIG11bHRpcGxleGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogc2VsZWN0b3JzCisgICA6c3lub3BzaXM6IEhpZ2gtbGV2ZWwgSS9PIG11bHRpcGxleGluZy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZQorOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRoaXMgbW9kdWxlCitpbnN0ZWFkLCB1bmxlc3MgdGhleSB3YW50IHByZWNpc2UgY29udHJvbCBvdmVyIHRoZSBPUy1sZXZlbCBwcmltaXRpdmVzIHVzZWQuCisKK0l0IGRlZmluZXMgYSA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgYWJzdHJhY3QgYmFzZSBjbGFzcywgYWxvbmcgd2l0aCBzZXZlcmFsCitjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgKDpjbGFzczpgS3F1ZXVlU2VsZWN0b3JgLCA6Y2xhc3M6YEVwb2xsU2VsZWN0b3JgLi4uKSwKK3RoYXQgY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IgSS9PIHJlYWRpbmVzcyBub3RpZmljYXRpb24gb24gbXVsdGlwbGUgZmlsZQorb2JqZWN0cy4gSW4gdGhlIGZvbGxvd2luZywgImZpbGUgb2JqZWN0IiByZWZlcnMgdG8gYW55IG9iamVjdCB3aXRoIGEKKzptZXRoOmBmaWxlbm8oKWAgbWV0aG9kLCBvciBhIHJhdyBmaWxlIGRlc2NyaXB0b3IuIFNlZSA6dGVybTpgZmlsZSBvYmplY3RgLgorCis6Y2xhc3M6YERlZmF1bHRTZWxlY3RvcmAgaXMgYW4gYWxpYXMgdG8gdGhlIG1vc3QgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uCithdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm06IHRoaXMgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IgbW9zdAordXNlcnMuCisKKy4uIG5vdGU6OgorICAgVGhlIHR5cGUgb2YgZmlsZSBvYmplY3RzIHN1cHBvcnRlZCBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybTogb24gV2luZG93cywKKyAgIHNvY2tldHMgYXJlIHN1cHBvcnRlZCwgYnV0IG5vdCBwaXBlcywgd2hlcmVhcyBvbiBVbml4LCBib3RoIGFyZSBzdXBwb3J0ZWQKKyAgIChzb21lIG90aGVyIHR5cGVzIG1heSBiZSBzdXBwb3J0ZWQgYXMgd2VsbCwgc3VjaCBhcyBmaWZvcyBvciBzcGVjaWFsIGZpbGUKKyAgIGRldmljZXMpLgorCisuLiBzZWVhbHNvOjoKKworICAgOm1vZDpgc2VsZWN0YAorICAgICAgTG93LWxldmVsIEkvTyBtdWx0aXBsZXhpbmcgbW9kdWxlLgorCisKK0NsYXNzZXMKKy0tLS0tLS0KKworQ2xhc3NlcyBoaWVyYXJjaHk6OgorCisgICBCYXNlU2VsZWN0b3IKKyAgICstLSBTZWxlY3RTZWxlY3RvcgorICAgKy0tIFBvbGxTZWxlY3RvcgorICAgKy0tIEVwb2xsU2VsZWN0b3IKKyAgICstLSBLcXVldWVTZWxlY3RvcgorCisKK0luIHRoZSBmb2xsb3dpbmcsICpldmVudHMqIGlzIGEgYml0d2lzZSBtYXNrIGluZGljYXRpbmcgd2hpY2ggSS9PIGV2ZW50cyBzaG91bGQKK2JlIHdhaXRlZCBmb3Igb24gYSBnaXZlbiBmaWxlIG9iamVjdC4gSXQgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGNvbnN0YW50cworYmVsb3c6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgQ29uc3RhbnQgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgOmNvbnN0OmBFVkVOVF9SRUFEYCAgIHwgQXZhaWxhYmxlIGZvciByZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBFVkVOVF9XUklURWAgIHwgQXZhaWxhYmxlIGZvciB3cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisuLiBjbGFzczo6IFNlbGVjdG9yS2V5CisKKyAgIEEgOmNsYXNzOmBTZWxlY3RvcktleWAgaXMgYSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCB1c2VkIHRvCisgICBhc3NvY2lhdGUgYSBmaWxlIG9iamVjdCB0byBpdHMgdW5kZXJseWluZyBmaWxlIGRlY3JpcHRvciwgc2VsZWN0ZWQgZXZlbnQKKyAgIG1hc2sgYW5kIGF0dGFjaGVkIGRhdGEuIEl0IGlzIHJldHVybmVkIGJ5IHNldmVyYWwgOmNsYXNzOmBCYXNlU2VsZWN0b3JgCisgICBtZXRob2RzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmaWxlb2JqCisKKyAgICAgIEZpbGUgb2JqZWN0IHJlZ2lzdGVyZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZkCisKKyAgICAgIFVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLgorCisgICAuLiBhdHRyaWJ1dGU6OiBldmVudHMKKworICAgICAgRXZlbnRzIHRoYXQgbXVzdCBiZSB3YWl0ZWQgZm9yIG9uIHRoaXMgZmlsZSBvYmplY3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGRhdGEKKworICAgICAgT3B0aW9uYWwgb3BhcXVlIGRhdGEgYXNzb2NpYXRlZCB0byB0aGlzIGZpbGUgb2JqZWN0OiBmb3IgZXhhbXBsZSwgdGhpcworICAgICAgY291bGQgYmUgdXNlZCB0byBzdG9yZSBhIHBlci1jbGllbnQgc2Vzc2lvbiBJRC4KKworCisuLiBjbGFzczo6IEJhc2VTZWxlY3RvcgorCisgICBBIDpjbGFzczpgQmFzZVNlbGVjdG9yYCBpcyB1c2VkIHRvIHdhaXQgZm9yIEkvTyBldmVudCByZWFkaW5lc3Mgb24gbXVsdGlwbGUKKyAgIGZpbGUgb2JqZWN0cy4gSXQgc3VwcG9ydHMgZmlsZSBzdHJlYW0gcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGEKKyAgIG1ldGhvZCB0byB3YWl0IGZvciBJL08gZXZlbnRzIG9uIHRob3NlIHN0cmVhbXMsIHdpdGggYW4gb3B0aW9uYWwgdGltZW91dC4KKyAgIEl0J3MgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcywgc28gY2Fubm90IGJlIGluc3RhbnRpYXRlZC4gVXNlCisgICA6Y2xhc3M6YERlZmF1bHRTZWxlY3RvcmAgaW5zdGVhZCwgb3Igb25lIG9mIDpjbGFzczpgU2VsZWN0U2VsZWN0b3JgLAorICAgOmNsYXNzOmBLcXVldWVTZWxlY3RvcmAgZXRjLiBpZiB5b3Ugd2FudCB0byBzcGVjaWZpY2FsbHkgdXNlIGFuCisgICBpbXBsZW1lbnRhdGlvbiwgYW5kIHlvdXIgcGxhdGZvcm0gc3VwcG9ydHMgaXQuCisgICA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgYW5kIGl0cyBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgc3VwcG9ydCB0aGUKKyAgIDp0ZXJtOmBjb250ZXh0IG1hbmFnZXJgIHByb3RvY29sLgorCisgICAuLiBtZXRob2Q6OiByZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSkKKworICAgICAgUmVnaXN0ZXIgYSBmaWxlIG9iamVjdCBmb3Igc2VsZWN0aW9uLCBtb25pdG9yaW5nIGl0IGZvciBJL08gZXZlbnRzLgorCisgICAgICAqZmlsZW9iaiogaXMgdGhlIGZpbGUgb2JqZWN0IHRvIG1vbml0b3IuICBJdCBtYXkgZWl0aGVyIGJlIGFuIGludGVnZXIKKyAgICAgIGZpbGUgZGVzY3JpcHRvciBvciBhbiBvYmplY3Qgd2l0aCBhIGBgZmlsZW5vKClgYCBtZXRob2QuCisgICAgICAqZXZlbnRzKiBpcyBhIGJpdHdpc2UgbWFzayBvZiBldmVudHMgdG8gbW9uaXRvci4KKyAgICAgICpkYXRhKiBpcyBhbiBvcGFxdWUgb2JqZWN0LgorCisgICAgICBUaGlzIHJldHVybnMgYSBuZXcgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpbiBjYXNlIG9mIGludmFsaWQgZXZlbnQgbWFzayBvciBmaWxlIGRlc2NyaXB0b3IsIG9yCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4KKworICAgLi4gbWV0aG9kOjogdW5yZWdpc3RlcihmaWxlb2JqKQorCisgICAgICBVbnJlZ2lzdGVyIGEgZmlsZSBvYmplY3QgZnJvbSBzZWxlY3Rpb24sIHJlbW92aW5nIGl0IGZyb20gbW9uaXRvcmluZy4gQQorICAgICAgZmlsZSBvYmplY3Qgc2hhbGwgYmUgdW5yZWdpc3RlcmVkIHByaW9yIHRvIGJlaW5nIGNsb3NlZC4KKworICAgICAgKmZpbGVvYmoqIG11c3QgYmUgYSBmaWxlIG9iamVjdCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQuCisKKyAgICAgIFRoaXMgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCA6Y2xhc3M6YFNlbGVjdG9yS2V5YCBpbnN0YW5jZSwgb3IgcmFpc2VzIGEKKyAgICAgIDpleGM6YEtleUVycm9yYCBpZiAqZmlsZW9iaiogaXMgbm90IHJlZ2lzdGVyZWQuICBJdCB3aWxsIHJhaXNlCisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpZiAqZmlsZW9iaiogaXMgaW52YWxpZCAoZS5nLiBpdCBoYXMgbm8gYGBmaWxlbm8oKWBgCisgICAgICBtZXRob2Qgb3IgaXRzIGBgZmlsZW5vKClgYCBtZXRob2QgaGFzIGFuIGludmFsaWQgcmV0dXJuIHZhbHVlKS4KKworICAgLi4gbWV0aG9kOjogbW9kaWZ5KGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKQorCisgICAgICBDaGFuZ2UgYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0J3MgbW9uaXRvcmVkIGV2ZW50cyBvciBhdHRhY2hlZCBkYXRhLgorCisgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gOm1ldGg6YEJhc2VTZWxlY3Rvci51bnJlZ2lzdGVyKGZpbGVvYmopYCBmb2xsb3dlZAorICAgICAgYnkgOm1ldGg6YEJhc2VTZWxlY3Rvci5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpYCwgZXhjZXB0IHRoYXQgaXQKKyAgICAgIGNhbiBiZSBpbXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5LgorCisgICAgICBUaGlzIHJldHVybnMgYSBuZXcgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpbiBjYXNlIG9mIGludmFsaWQgZXZlbnQgbWFzayBvciBmaWxlIGRlc2NyaXB0b3IsIG9yCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBzZWxlY3QodGltZW91dD1Ob25lKQorCisgICAgICBXYWl0IHVudGlsIHNvbWUgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdHMgYmVjb21lIHJlYWR5LCBvciB0aGUgdGltZW91dAorICAgICAgZXhwaXJlcy4KKworICAgICAgSWYgYGB0aW1lb3V0ID4gMGBgLCB0aGlzIHNwZWNpZmllcyB0aGUgbWF4aW11bSB3YWl0IHRpbWUsIGluIHNlY29uZHMuCisgICAgICBJZiBgYHRpbWVvdXQgPD0gMGBgLCB0aGUgY2FsbCB3b24ndCBibG9jaywgYW5kIHdpbGwgcmVwb3J0IHRoZSBjdXJyZW50bHkKKyAgICAgIHJlYWR5IGZpbGUgb2JqZWN0cy4KKyAgICAgIElmICp0aW1lb3V0KiBpcyBgYE5vbmVgYCwgdGhlIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhIG1vbml0b3JlZCBmaWxlIG9iamVjdAorICAgICAgYmVjb21lcyByZWFkeS4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbGlzdCBvZiBgYChrZXksIGV2ZW50cylgYCB0dXBsZXMsIG9uZSBmb3IgZWFjaCByZWFkeSBmaWxlCisgICAgICBvYmplY3QuCisKKyAgICAgICprZXkqIGlzIHRoZSA6Y2xhc3M6YFNlbGVjdG9yS2V5YCBpbnN0YW5jZSBjb3JyZXNwb25kaW5nIHRvIGEgcmVhZHkgZmlsZQorICAgICAgb2JqZWN0LgorICAgICAgKmV2ZW50cyogaXMgYSBiaXRtYXNrIG9mIGV2ZW50cyByZWFkeSBvbiB0aGlzIGZpbGUgb2JqZWN0LgorCisgICAgICAuLiBub3RlOjoKKyAgICAgICAgICBUaGlzIG1ldGhvZCBjYW4gcmV0dXJuIGJlZm9yZSBhbnkgZmlsZSBvYmplY3QgYmVjb21lcyByZWFkeSBvciB0aGUKKyAgICAgICAgICB0aW1lb3V0IGhhcyBlbGFwc2VkIGlmIHRoZSBjdXJyZW50IHByb2Nlc3MgcmVjZWl2ZXMgYSBzaWduYWw6IGluIHRoaXMKKyAgICAgICAgICBjYXNlLCBhbiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQ2xvc2UgdGhlIHNlbGVjdG9yLgorCisgICAgICBUaGlzIG11c3QgYmUgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSB1bmRlcmx5aW5nIHJlc291cmNlIGlzIGZyZWVkLgorICAgICAgVGhlIHNlbGVjdG9yIHNoYWxsIG5vdCBiZSB1c2VkIG9uY2UgaXQgaGFzIGJlZW4gY2xvc2VkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfa2V5KGZpbGVvYmopCisKKyAgICAgIFJldHVybiB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QuCisKKyAgICAgIFRoaXMgcmV0dXJucyB0aGUgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UgYXNzb2NpYXRlZCB0byB0aGlzIGZpbGUKKyAgICAgIG9iamVjdCwgb3IgcmFpc2VzIDpleGM6YEtleUVycm9yYCBpZiB0aGUgZmlsZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9tYXAoKQorCisgICAgICBSZXR1cm4gYSBtYXBwaW5nIG9mIGZpbGUgb2JqZWN0cyB0byBzZWxlY3RvciBrZXlzLgorCisgICAgICBUaGlzIHJldHVybnMgYSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5hYmMuTWFwcGluZ2AgaW5zdGFuY2UgbWFwcGluZworICAgICAgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdHMgdG8gdGhlaXIgYXNzb2NpYXRlZCA6Y2xhc3M6YFNlbGVjdG9yS2V5YAorICAgICAgaW5zdGFuY2UuCisKKworLi4gY2xhc3M6OiBEZWZhdWx0U2VsZWN0b3IoKQorCisgICBUaGUgZGVmYXVsdCBzZWxlY3RvciBjbGFzcywgdXNpbmcgdGhlIG1vc3QgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uCisgICBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIFRoaXMgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IKKyAgIG1vc3QgdXNlcnMuCisKKworLi4gY2xhc3M6OiBTZWxlY3RTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3Quc2VsZWN0YC1iYXNlZCBzZWxlY3Rvci4KKworCisuLiBjbGFzczo6IFBvbGxTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3QucG9sbGAtYmFzZWQgc2VsZWN0b3IuCisKKworLi4gY2xhc3M6OiBFcG9sbFNlbGVjdG9yKCkKKworICAgOmZ1bmM6YHNlbGVjdC5lcG9sbGAtYmFzZWQgc2VsZWN0b3IuCisKKyAgIC4uIG1ldGhvZDo6IGZpbGVubygpCisKKyAgICAgIFRoaXMgcmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yIHVzZWQgYnkgdGhlIHVuZGVybHlpbmcKKyAgICAgIDpmdW5jOmBzZWxlY3QuZXBvbGxgIG9iamVjdC4KKworCisuLiBjbGFzczo6IEtxdWV1ZVNlbGVjdG9yKCkKKworICAgOmZ1bmM6YHNlbGVjdC5rcXVldWVgLWJhc2VkIHNlbGVjdG9yLgorCisgICAuLiBtZXRob2Q6OiBmaWxlbm8oKQorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nCisgICAgICA6ZnVuYzpgc2VsZWN0LmtxdWV1ZWAgb2JqZWN0LgorCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitIZXJlIGlzIGEgc2ltcGxlIGVjaG8gc2VydmVyIGltcGxlbWVudGF0aW9uOjoKKworICAgaW1wb3J0IHNlbGVjdG9ycworICAgaW1wb3J0IHNvY2tldAorCisgICBzZWwgPSBzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9yKCkKKworICAgZGVmIGFjY2VwdChzb2NrLCBtYXNrKToKKyAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKSAgIyBTaG91bGQgYmUgcmVhZHkKKyAgICAgICBwcmludCgnYWNjZXB0ZWQnLCBjb25uLCAnZnJvbScsIGFkZHIpCisgICAgICAgY29ubi5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICBzZWwucmVnaXN0ZXIoY29ubiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIHJlYWQpCisKKyAgIGRlZiByZWFkKGNvbm4sIG1hc2spOgorICAgICAgIGRhdGEgPSBjb25uLnJlY3YoMTAwMCkgICMgU2hvdWxkIGJlIHJlYWR5CisgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgcHJpbnQoJ2VjaG9pbmcnLCByZXByKGRhdGEpLCAndG8nLCBjb25uKQorICAgICAgICAgICBjb25uLnNlbmQoZGF0YSkgICMgSG9wZSBpdCB3b24ndCBibG9jaworICAgICAgIGVsc2U6CisgICAgICAgICAgIHByaW50KCdjbG9zaW5nJywgY29ubikKKyAgICAgICAgICAgc2VsLnVucmVnaXN0ZXIoY29ubikKKyAgICAgICAgICAgY29ubi5jbG9zZSgpCisKKyAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgIHNvY2suYmluZCgoJ2xvY2FsaG9zdCcsIDEyMzQpKQorICAgc29jay5saXN0ZW4oMTAwKQorICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgIHNlbC5yZWdpc3Rlcihzb2NrLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgYWNjZXB0KQorCisgICB3aGlsZSBUcnVlOgorICAgICAgIGV2ZW50cyA9IHNlbC5zZWxlY3QoKQorICAgICAgIGZvciBrZXksIG1hc2sgaW4gZXZlbnRzOgorICAgICAgICAgICBjYWxsYmFjayA9IGtleS5kYXRhCisgICAgICAgICAgIGNhbGxiYWNrKGtleS5maWxlb2JqLCBtYXNrKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdCBiL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKaW5kZXggMDQ4ZjgwYS4uMjJlMjAyZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CkBAIC00NCw4ICs0NCwxMSBAQAogICAgLi4gbm90ZTo6CiAKICAgICAgIERvIG5vdCByZWx5IG9uIHRoZSBzaGVsZiBiZWluZyBjbG9zZWQgYXV0b21hdGljYWxseTsgYWx3YXlzIGNhbGwKLSAgICAgIDptZXRoOmBjbG9zZWAgZXhwbGljaXRseSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLCBvciB1c2UgYQotICAgICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3aXRoIDpmdW5jOmBjb250ZXh0bGliLmNsb3NpbmdgLgorICAgICAgOm1ldGg6YH5TaGVsZi5jbG9zZWAgZXhwbGljaXRseSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLCBvcgorICAgICAgdXNlIDpmdW5jOmBzaGVsdmUub3BlbmAgYXMgYSBjb250ZXh0IG1hbmFnZXI6OgorCisgICAgICAgICAgd2l0aCBzaGVsdmUub3Blbignc3BhbScpIGFzIGRiOgorICAgICAgICAgICAgICBkYlsnZWdncyddID0gJ2VnZ3MnCiAKIC4uIHdhcm5pbmc6OgogCkBAIC0xMTgsMTAgKzEyMSwxNiBAQAogICAgVGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyIGlzIHRoZSBlbmNvZGluZyB1c2VkIHRvIGVuY29kZSBrZXlzIGJlZm9yZSB0aGV5CiAgICBhcmUgdXNlZCB3aXRoIHRoZSB1bmRlcmx5aW5nIGRpY3QuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgotICAgICAgVGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KKyAgIEEgOmNsYXNzOmBTaGVsZmAgb2JqZWN0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIGluIHdoaWNoCisgICBjYXNlIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjbG9zZWQgd2hlbiB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrIGVuZHMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCB0aGUgKmtleWVuY29kaW5nKiBwYXJhbWV0ZXI7IHByZXZpb3VzbHksIGtleXMgd2VyZSBhbHdheXMgZW5jb2RlZCBpbgogICAgICAgVVRGLTguCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBjb250ZXh0IG1hbmFnZXIgc3VwcG9ydC4KKwogCiAuLiBjbGFzczo6IEJzZERiU2hlbGYoZGljdCwgcHJvdG9jb2w9Tm9uZSwgd3JpdGViYWNrPUZhbHNlLCBrZXllbmNvZGluZz0ndXRmLTgnKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaHV0aWwucnN0IGIvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAppbmRleCBhMTQ1N2QwLi5lNGYzNDhjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKQEAgLTUzLDcgKzUzLDcgQEAKICAgICpkc3QqIGFuZCByZXR1cm4gKmRzdCouICAqc3JjKiBhbmQgKmRzdCogYXJlIHBhdGggbmFtZXMgZ2l2ZW4gYXMgc3RyaW5ncy4KICAgICpkc3QqIG11c3QgYmUgdGhlIGNvbXBsZXRlIHRhcmdldCBmaWxlIG5hbWU7IGxvb2sgYXQgOmZ1bmM6YHNodXRpbC5jb3B5YAogICAgZm9yIGEgY29weSB0aGF0IGFjY2VwdHMgYSB0YXJnZXQgZGlyZWN0b3J5IHBhdGguICBJZiAqc3JjKiBhbmQgKmRzdCoKLSAgIHNwZWNpZnkgdGhlIHNhbWUgZmlsZSwgOmV4YzpgRXJyb3JgIGlzIHJhaXNlZC4KKyAgIHNwZWNpZnkgdGhlIHNhbWUgZmlsZSwgOmV4YzpgU2FtZUZpbGVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBUaGUgZGVzdGluYXRpb24gbG9jYXRpb24gbXVzdCBiZSB3cml0YWJsZTsgb3RoZXJ3aXNlLCBhbiA6ZXhjOmBPU0Vycm9yYAogICAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiBJZiAqZHN0KiBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSByZXBsYWNlZC4KQEAgLTY5LDYgKzY5LDE5IEBACiAgICAgICBBZGRlZCAqZm9sbG93X3N5bWxpbmtzKiBhcmd1bWVudC4KICAgICAgIE5vdyByZXR1cm5zICpkc3QqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgUmFpc2UgOmV4YzpgU2FtZUZpbGVFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBFcnJvcmAuICBTaW5jZSB0aGUgZm9ybWVyIGlzCisgICAgICBhIHN1YmNsYXNzIG9mIHRoZSBsYXR0ZXIsIHRoaXMgY2hhbmdlIGlzIGJhY2t3YXJkIGNvbXBhdGlibGUuCisKKworLi4gZXhjZXB0aW9uOjogU2FtZUZpbGVFcnJvcgorCisgICBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbiA6ZnVuYzpgY29weWZpbGVgCisgICBhcmUgdGhlIHNhbWUgZmlsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBjb3B5bW9kZShzcmMsIGRzdCwgKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpCiAKICAgIENvcHkgdGhlIHBlcm1pc3Npb24gYml0cyBmcm9tICpzcmMqIHRvICpkc3QqLiAgVGhlIGZpbGUgY29udGVudHMsIG93bmVyLCBhbmQKQEAgLTM4MCwxMSArMzkzLDEwIEBACiAgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQogICAgICAgIHRyeToKICAgICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCi0gICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKLSAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKLSAgICAgICAgICAgcGFzcwogICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKKyAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKKyAgICAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgICAgIGlmIGVycm9yczoKICAgICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaXRlLnJzdCBiL0RvYy9saWJyYXJ5L3NpdGUucnN0CmluZGV4IDM2YjgwYzMuLmU1N2I4Y2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NpdGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NpdGUucnN0CkBAIC0zOCw2ICszOCw5IEBACiBpZiBpdCByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBhbmQgaWYgc28sIGFkZHMgaXQgdG8gYGBzeXMucGF0aGBgIGFuZAogYWxzbyBpbnNwZWN0cyB0aGUgbmV3bHkgYWRkZWQgcGF0aCBmb3IgY29uZmlndXJhdGlvbiBmaWxlcy4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgU3VwcG9ydCBmb3IgdGhlICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjUuCisKIElmIGEgZmlsZSBuYW1lZCAicHl2ZW52LmNmZyIgZXhpc3RzIG9uZSBkaXJlY3RvcnkgYWJvdmUgc3lzLmV4ZWN1dGFibGUsCiBzeXMucHJlZml4IGFuZCBzeXMuZXhlY19wcmVmaXggYXJlIHNldCB0byB0aGF0IGRpcmVjdG9yeSBhbmQKIGl0IGlzIGFsc28gY2hlY2tlZCBmb3Igc2l0ZS1wYWNrYWdlcyBhbmQgc2l0ZS1weXRob24gKHN5cy5iYXNlX3ByZWZpeCBhbmQKQEAgLTk2LDcgKzk5LDExIEBACiA6bW9kOmBzaXRlY3VzdG9taXplYCwgd2hpY2ggY2FuIHBlcmZvcm0gYXJiaXRyYXJ5IHNpdGUtc3BlY2lmaWMgY3VzdG9taXphdGlvbnMuCiBJdCBpcyB0eXBpY2FsbHkgY3JlYXRlZCBieSBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGluIHRoZSBzaXRlLXBhY2thZ2VzCiBkaXJlY3RvcnkuICBJZiB0aGlzIGltcG9ydCBmYWlscyB3aXRoIGFuIDpleGM6YEltcG9ydEVycm9yYCBleGNlcHRpb24sIGl0IGlzCi1zaWxlbnRseSBpZ25vcmVkLgorc2lsZW50bHkgaWdub3JlZC4gIElmIFB5dGhvbiBpcyBzdGFydGVkIHdpdGhvdXQgb3V0cHV0IHN0cmVhbXMgYXZhaWxhYmxlLCBhcword2l0aCA6ZmlsZTpgcHl0aG9udy5leGVgIG9uIFdpbmRvd3MgKHdoaWNoIGlzIHVzZWQgYnkgZGVmYXVsdCB0byBzdGFydCBJRExFKSwKK2F0dGVtcHRlZCBvdXRwdXQgZnJvbSA6bW9kOmBzaXRlY3VzdG9taXplYCBpcyBpZ25vcmVkLiBBbnkgZXhjZXB0aW9uIG90aGVyCit0aGFuIDpleGM6YEltcG9ydEVycm9yYCBjYXVzZXMgYSBzaWxlbnQgYW5kIHBlcmhhcHMgbXlzdGVyaW91cyBmYWlsdXJlIG9mIHRoZQorcHJvY2Vzcy4KIAogLi4gaW5kZXg6OiBtb2R1bGU6IHVzZXJjdXN0b21pemUKIApAQCAtMTExLDYgKzExOCwyNyBAQAogOm1vZDpgc2l0ZWN1c3RvbWl6ZWAgYW5kIDptb2Q6YHVzZXJjdXN0b21pemVgIGlzIHN0aWxsIGF0dGVtcHRlZC4KIAogCisuLiBfcmxjb21wbGV0ZXItY29uZmlnOgorCitSZWFkbGluZSBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IDptb2Q6YHJlYWRsaW5lYCwgdGhpcyBtb2R1bGUgd2lsbCBhbHNvIGltcG9ydCBhbmQKK2NvbmZpZ3VyZSB0aGUgOm1vZDpgcmxjb21wbGV0ZXJgIG1vZHVsZSwgaWYgUHl0aG9uIGlzIHN0YXJ0ZWQgaW4KKzpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gIGFuZCB3aXRob3V0IHRoZSA6b3B0aW9uOmAtU2Agb3B0aW9uLgorVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgZW5hYmxlIHRhYi1jb21wbGV0aW9uIGFuZCB0byB1c2UKKzpmaWxlOmB+Ly5weXRob25faGlzdG9yeWAgYXMgdGhlIGhpc3Rvcnkgc2F2ZSBmaWxlLiAgVG8gZGlzYWJsZSBpdCwgZGVsZXRlIChvcgorb3ZlcnJpZGUpIHRoZSA6ZGF0YTpgc3lzLl9faW50ZXJhY3RpdmVob29rX19gIGF0dHJpYnV0ZSBpbiB5b3VyCis6bW9kOmBzaXRlY3VzdG9taXplYCBvciA6bW9kOmB1c2VyY3VzdG9taXplYCBtb2R1bGUgb3IgeW91cgorOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFjdGl2YXRpb24gb2Ygcmxjb21wbGV0ZXIgYW5kIGhpc3Rvcnkgd2FzIG1hZGUgYXV0b21hdGljLgorCisKK01vZHVsZSBjb250ZW50cworLS0tLS0tLS0tLS0tLS0tCisKIC4uIGRhdGE6OiBQUkVGSVhFUwogCiAgICBBIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMuCkBAIC0xNTMsOCArMTgxLDcgQEAKIAogICAgQWRkcyBhbGwgdGhlIHN0YW5kYXJkIHNpdGUtc3BlY2lmaWMgZGlyZWN0b3JpZXMgdG8gdGhlIG1vZHVsZSBzZWFyY2gKICAgIHBhdGguICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhpcyBtb2R1bGUgaXMgaW1wb3J0ZWQsCi0gICB1bmxlc3MgdGhlIDpwcm9ncmFtOmBweXRob25gIGludGVycHJldGVyIHdhcyBzdGFydGVkIHdpdGggdGhlIDpvcHRpb246YC1TYAotICAgZmxhZy4KKyAgIHVubGVzcyB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhcyBzdGFydGVkIHdpdGggdGhlIDpvcHRpb246YC1TYCBmbGFnLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgVGhpcyBmdW5jdGlvbiB1c2VkIHRvIGJlIGNhbGxlZCB1bmNvbmRpdGlvbm5hbGx5LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc210cGQucnN0IGIvRG9jL2xpYnJhcnkvc210cGQucnN0CmluZGV4IGYzMDU4MTguLjNlYmVkMDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NtdHBkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKQEAgLTI3LDcgKzI3LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLS4uIGNsYXNzOjogU01UUFNlcnZlcihsb2NhbGFkZHIsIHJlbW90ZWFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMikKKy4uIGNsYXNzOjogU01UUFNlcnZlcihsb2NhbGFkZHIsIHJlbW90ZWFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMixcCisgICAgICAgICAgICAgICAgICAgICAgbWFwPU5vbmUpCiAKICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNNVFBTZXJ2ZXJgIG9iamVjdCwgd2hpY2ggYmluZHMgdG8gbG9jYWwgYWRkcmVzcwogICAgKmxvY2FsYWRkciouICBJdCB3aWxsIHRyZWF0ICpyZW1vdGVhZGRyKiBhcyBhbiB1cHN0cmVhbSBTTVRQIHJlbGF5ZXIuICBJdApAQCAtMzgsNiArMzksOCBAQAogICAgYWNjZXB0ZWQgaW4gYSBgYERBVEFgYCBjb21tYW5kLiAgQSB2YWx1ZSBvZiBgYE5vbmVgYCBvciBgYDBgYCBtZWFucyBubwogICAgbGltaXQuCiAKKyAgIEEgZGljdGlvbmFyeSBjYW4gYmUgc3BlY2lmaWVkIGluICptYXAqIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIHNvY2tldCBtYXAuCisKICAgIC4uIG1ldGhvZDo6IHByb2Nlc3NfbWVzc2FnZShwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSkKIAogICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgZXhjZXB0aW9uLiBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8KQEAgLTUzLDYgKzU2LDkgQEAKICAgICAgIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0byB1c2UgYSBjdXN0b20gOmNsYXNzOmBTTVRQQ2hhbm5lbGAgZm9yCiAgICAgICBtYW5hZ2luZyBTTVRQIGNsaWVudHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKm1hcCogYXJndW1lbnQgd2FzIGFkZGVkLgorCiAKIERlYnVnZ2luZ1NlcnZlciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTAsMTEgKzk2LDIwIEBACiBTTVRQQ2hhbm5lbCBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGNsYXNzOjogU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyKQorLi4gY2xhc3M6OiBTTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMixcCisgICAgICAgICAgICAgICAgICAgICAgIG1hcD1Ob25lKSkKIAogICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU01UUENoYW5uZWxgIG9iamVjdCB3aGljaCBtYW5hZ2VzIHRoZSBjb21tdW5pY2F0aW9uCiAgICBiZXR3ZWVuIHRoZSBzZXJ2ZXIgYW5kIGEgc2luZ2xlIFNNVFAgY2xpZW50LgogCisgICAqY29ubiogYW5kICphZGRyKiBhcmUgYXMgcGVyIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgZGVzY3JpYmVkIGJlbG93LgorCisgICAqZGF0YV9zaXplX2xpbWl0KiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZQorICAgYWNjZXB0ZWQgaW4gYSBgYERBVEFgYCBjb21tYW5kLiAgQSB2YWx1ZSBvZiBgYE5vbmVgYCBvciBgYDBgYCBtZWFucyBubworICAgbGltaXQuCisKKyAgIEEgZGljdGlvbmFyeSBjYW4gYmUgc3BlY2lmaWVkIGluICptYXAqIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIHNvY2tldCBtYXAuCisKICAgIFRvIHVzZSBhIGN1c3RvbSBTTVRQQ2hhbm5lbCBpbXBsZW1lbnRhdGlvbiB5b3UgbmVlZCB0byBvdmVycmlkZSB0aGUKICAgIDphdHRyOmBTTVRQU2VydmVyLmNoYW5uZWxfY2xhc3NgIG9mIHlvdXIgOmNsYXNzOmBTTVRQU2VydmVyYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAppbmRleCBhZGRjNmJlLi44ZTFiZmI1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdApAQCAtMzIsNyArMzIsOCBAQAogICAgdGhhbiBhIHN1Y2Nlc3MgY29kZSwgYW4gOmV4YzpgU01UUENvbm5lY3RFcnJvcmAgaXMgcmFpc2VkLiBUaGUgb3B0aW9uYWwKICAgICp0aW1lb3V0KiBwYXJhbWV0ZXIgc3BlY2lmaWVzIGEgdGltZW91dCBpbiBzZWNvbmRzIGZvciBibG9ja2luZyBvcGVyYXRpb25zCiAgICBsaWtlIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgKGlmIG5vdCBzcGVjaWZpZWQsIHRoZSBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0Ci0gICBzZXR0aW5nIHdpbGwgYmUgdXNlZCkuIFRoZSBvcHRpb25hbCBzb3VyY2VfYWRkcmVzcyBwYXJhbWV0ZXIgYWxsb3dzIHRvIGJpbmQKKyAgIHNldHRpbmcgd2lsbCBiZSB1c2VkKS4gIElmIHRoZSB0aW1lb3V0IGV4cGlyZXMsIDpleGM6YHNvY2tldC50aW1lb3V0YCBpcworICAgcmFpc2VkLiAgVGhlIG9wdGlvbmFsIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciBhbGxvd3MgdG8gYmluZAogICAgdG8gc29tZSBzcGVjaWZpYyBzb3VyY2UgYWRkcmVzcyBpbiBhIG1hY2hpbmUgd2l0aCBtdWx0aXBsZSBuZXR3b3JrCiAgICBpbnRlcmZhY2VzLCBhbmQvb3IgdG8gc29tZSBzcGVjaWZpYyBzb3VyY2UgVENQIHBvcnQuIEl0IHRha2VzIGEgMi10dXBsZQogICAgKGhvc3QsIHBvcnQpLCBmb3IgdGhlIHNvY2tldCB0byBiaW5kIHRvIGFzIGl0cyBzb3VyY2UgYWRkcmVzcyBiZWZvcmUKQEAgLTY5LDIwICs3MCwxNSBAQAogICAgcmVxdWlyZWQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25uZWN0aW9uIGFuZCB1c2luZyA6bWV0aDpgc3RhcnR0bHNgIGlzCiAgICBub3QgYXBwcm9wcmlhdGUuIElmICpob3N0KiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbG9jYWwgaG9zdCBpcyB1c2VkLiBJZgogICAgKnBvcnQqIGlzIHplcm8sIHRoZSBzdGFuZGFyZCBTTVRQLW92ZXItU1NMIHBvcnQgKDQ2NSkgaXMgdXNlZC4gIFRoZSBvcHRpb25hbAotICAgYXJndW1lbnRzICpsb2NhbF9ob3N0bmFtZSogYW5kICpzb3VyY2VfYWRkcmVzcyogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzCi0gICB0aGV5IGRvIGluIHRoZSA6Y2xhc3M6YFNNVFBgIGNsYXNzLiAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBhbHNvCi0gICBvcHRpb25hbCwgYW5kIGNhbiBjb250YWluIGEgUEVNIGZvcm1hdHRlZCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgY2hhaW4KLSAgIGZpbGUgZm9yIHRoZSBTU0wgY29ubmVjdGlvbi4gKmNvbnRleHQqIGFsc28gb3B0aW9uYWwsIGNhbiBjb250YWluIGEKLSAgIFNTTENvbnRleHQsIGFuZCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBrZXlmaWxlIGFuZCBjZXJ0ZmlsZTsgSWYgaXQgaXMKLSAgIHNwZWNpZmllZCBib3RoIGtleWZpbGUgYW5kIGNlcnRmaWxlIG11c3QgYmUgTm9uZS4gIFRoZSBvcHRpb25hbCAqdGltZW91dCoKLSAgIHBhcmFtZXRlciBzcGVjaWZpZXMgYSB0aW1lb3V0IGluIHNlY29uZHMgZm9yIGJsb2NraW5nIG9wZXJhdGlvbnMgbGlrZSB0aGUKLSAgIGNvbm5lY3Rpb24gYXR0ZW1wdCAoaWYgbm90IHNwZWNpZmllZCwgdGhlIGdsb2JhbCBkZWZhdWx0IHRpbWVvdXQgc2V0dGluZwotICAgd2lsbCBiZSB1c2VkKS4gVGhlIG9wdGlvbmFsIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciBhbGxvd3MgdG8gYmluZCB0byBzb21lCi0gICBzcGVjaWZpYyBzb3VyY2UgYWRkcmVzcyBpbiBhIG1hY2hpbmUgd2l0aCBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMsCi0gICBhbmQvb3IgdG8gc29tZSBzcGVjaWZpYyBzb3VyY2UgdGNwIHBvcnQuIEl0IHRha2VzIGEgMi10dXBsZSAoaG9zdCwgcG9ydCksCi0gICBmb3IgdGhlIHNvY2tldCB0byBiaW5kIHRvIGFzIGl0cyBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdGluZy4gSWYKLSAgIG9taXR0ZWQgKG9yIGlmIGhvc3Qgb3IgcG9ydCBhcmUgYGAnJ2BgIGFuZC9vciAwIHJlc3BlY3RpdmVseSkgdGhlIE9TIGRlZmF1bHQKLSAgIGJlaGF2aW9yIHdpbGwgYmUgdXNlZC4KKyAgIGFyZ3VtZW50cyAqbG9jYWxfaG9zdG5hbWUqLCAqdGltZW91dCogYW5kICpzb3VyY2VfYWRkcmVzcyogaGF2ZSB0aGUgc2FtZQorICAgbWVhbmluZyBhcyB0aGV5IGRvIGluIHRoZSA6Y2xhc3M6YFNNVFBgIGNsYXNzLiAgKmNvbnRleHQqLCBhbHNvIG9wdGlvbmFsLAorICAgY2FuIGNvbnRhaW4gYSA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgYW5kIGFsbG93cyB0byBjb25maWd1cmUgdmFyaW91cworICAgYXNwZWN0cyBvZiB0aGUgc2VjdXJlIGNvbm5lY3Rpb24uICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvcgorICAgYmVzdCBwcmFjdGljZXMuCisKKyAgICprZXlmaWxlKiBhbmQgKmNlcnRmaWxlKiBhcmUgYSBsZWdhY3kgYWx0ZXJuYXRpdmUgdG8gKmNvbnRleHQqLCBhbmQgY2FuCisgICBwb2ludCB0byBhIFBFTSBmb3JtYXR0ZWQgcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlIGNoYWluIGZpbGUgZm9yIHRoZQorICAgU1NMIGNvbm5lY3Rpb24uCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqY29udGV4dCogd2FzIGFkZGVkLgpAQCAtOTAsNiArODYsMTAgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBzb3VyY2VfYWRkcmVzcyBhcmd1bWVudCB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAogLi4gY2xhc3M6OiBMTVRQKGhvc3Q9JycsIHBvcnQ9TE1UUF9QT1JULCBsb2NhbF9ob3N0bmFtZT1Ob25lLCBzb3VyY2VfYWRkcmVzcz1Ob25lKQogCkBAIC0xMTAsOCArMTEwLDExIEBACiAKIC4uIGV4Y2VwdGlvbjo6IFNNVFBFeGNlcHRpb24KIAotICAgVGhlIGJhc2UgZXhjZXB0aW9uIGNsYXNzIGZvciBhbGwgdGhlIG90aGVyIGV4Y2VwdGlvbnMgcHJvdmlkZWQgYnkgdGhpcwotICAgbW9kdWxlLgorICAgU3ViY2xhc3Mgb2YgOmV4YzpgT1NFcnJvcmAgdGhhdCBpcyB0aGUgYmFzZSBleGNlcHRpb24gY2xhc3MgZm9yIGFsbAorICAgdGhlIG90aGVyIGV4Y2VwdGlvbnMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTTVRQRXhjZXB0aW9uIGJlY2FtZSBzdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYAogCiAKIC4uIGV4Y2VwdGlvbjo6IFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQKQEAgLTMxNiw2ICszMTksMTEgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqY29udGV4dCogd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG1ldGhvZCBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdG9yKiAoc2VlCisgICAgICA6ZGF0YTpgfnNzbC5IQVNfU05JYCkuCisKIAogLi4gbWV0aG9kOjogU01UUC5zZW5kbWFpbChmcm9tX2FkZHIsIHRvX2FkZHJzLCBtc2csIG1haWxfb3B0aW9ucz1bXSwgcmNwdF9vcHRpb25zPVtdKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zb2NrZXQucnN0IGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdAppbmRleCAzYTQ5ZWVkLi41NGM2YmFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKQEAgLTYsOCArNiw3IEBACiAKIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBCU0QgKnNvY2tldCogaW50ZXJmYWNlLiBJdCBpcyBhdmFpbGFibGUgb24KLWFsbCBtb2Rlcm4gVW5peCBzeXN0ZW1zLCBXaW5kb3dzLCBNYWNPUywgT1MvMiwgYW5kIHByb2JhYmx5IGFkZGl0aW9uYWwKLXBsYXRmb3Jtcy4KK2FsbCBtb2Rlcm4gVW5peCBzeXN0ZW1zLCBXaW5kb3dzLCBNYWNPUywgYW5kIHByb2JhYmx5IGFkZGl0aW9uYWwgcGxhdGZvcm1zLgogCiAuLiBub3RlOjoKIApAQCAtMTA3LDggKzEwNiw4IEBACiAKICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLS0gQ2VydGFpbiBvdGhlciBhZGRyZXNzIGZhbWlsaWVzICg6Y29uc3Q6YEFGX0JMVUVUT09USGAsIDpjb25zdDpgQUZfUEFDS0VUYCkKLSAgc3VwcG9ydCBzcGVjaWZpYyByZXByZXNlbnRhdGlvbnMuCistIENlcnRhaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcyAoOmNvbnN0OmBBRl9CTFVFVE9PVEhgLCA6Y29uc3Q6YEFGX1BBQ0tFVGAsCisgIDpjb25zdDpgQUZfQ0FOYCkgc3VwcG9ydCBzcGVjaWZpYyByZXByZXNlbnRhdGlvbnMuCiAKICAgLi4gWFhYIGRvY3VtZW50IHRoZW0hCiAKQEAgLTI2NCw2ICsyNjMsMTYgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIGRhdGE6OiBDQU5fQkNNCisgICAgICAgICAgQ0FOX0JDTV8qCisKKyAgIENBTl9CQ00sIGluIHRoZSBDQU4gcHJvdG9jb2wgZmFtaWx5LCBpcyB0aGUgYnJvYWRjYXN0IG1hbmFnZXIgKEJDTSkgcHJvdG9jb2wuCisgICBCcm9hZGNhc3QgbWFuYWdlciBjb25zdGFudHMsIGRvY3VtZW50ZWQgaW4gdGhlIExpbnV4IGRvY3VtZW50YXRpb24sIGFyZSBhbHNvCisgICBkZWZpbmVkIGluIHRoZSBzb2NrZXQgbW9kdWxlLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4ID49IDIuNi4yNS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGRhdGE6OiBBRl9SRFMKICAgICAgICAgICBQRl9SRFMKQEAgLTI5MCw2ICsyOTksMTEgQEAKICAgIFRJUEMgcmVsYXRlZCBjb25zdGFudHMsIG1hdGNoaW5nIHRoZSBvbmVzIGV4cG9ydGVkIGJ5IHRoZSBDIHNvY2tldCBBUEkuIFNlZQogICAgdGhlIFRJUEMgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorLi4gZGF0YTo6IEFGX0xJTksKKworICBBdmFpbGFiaWxpdHk6IEJTRCwgT1NYLgorCisgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogaGFzX2lwdjYKIApAQCAtMzA2LDIwICszMjAsMjkgQEAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFsbCBjcmVhdGUgOnJlZjpgc29ja2V0IG9iamVjdHMgPHNvY2tldC1vYmplY3RzPmAuCiAKIAotLi4gZnVuY3Rpb246OiBzb2NrZXQoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkKKy4uIGZ1bmN0aW9uOjogc29ja2V0KGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSkKIAogICAgQ3JlYXRlIGEgbmV3IHNvY2tldCB1c2luZyB0aGUgZ2l2ZW4gYWRkcmVzcyBmYW1pbHksIHNvY2tldCB0eXBlIGFuZCBwcm90b2NvbAogICAgbnVtYmVyLiAgVGhlIGFkZHJlc3MgZmFtaWx5IHNob3VsZCBiZSA6Y29uc3Q6YEFGX0lORVRgICh0aGUgZGVmYXVsdCksCiAgICA6Y29uc3Q6YEFGX0lORVQ2YCwgOmNvbnN0OmBBRl9VTklYYCwgOmNvbnN0OmBBRl9DQU5gIG9yIDpjb25zdDpgQUZfUkRTYC4gVGhlCiAgICBzb2NrZXQgdHlwZSBzaG91bGQgYmUgOmNvbnN0OmBTT0NLX1NUUkVBTWAgKHRoZSBkZWZhdWx0KSwKICAgIDpjb25zdDpgU09DS19ER1JBTWAsIDpjb25zdDpgU09DS19SQVdgIG9yIHBlcmhhcHMgb25lIG9mIHRoZSBvdGhlciBgYFNPQ0tfYGAKLSAgIGNvbnN0YW50cy4gVGhlIHByb3RvY29sIG51bWJlciBpcyB1c3VhbGx5IHplcm8gYW5kIG1heSBiZSBvbWl0dGVkIGluIHRoYXQKLSAgIGNhc2Ugb3IgOmNvbnN0OmBDQU5fUkFXYCBpbiBjYXNlIHRoZSBhZGRyZXNzIGZhbWlseSBpcyA6Y29uc3Q6YEFGX0NBTmAuCisgICBjb25zdGFudHMuIFRoZSBwcm90b2NvbCBudW1iZXIgaXMgdXN1YWxseSB6ZXJvIGFuZCBtYXkgYmUgb21pdHRlZCBvciBpbiB0aGUKKyAgIGNhc2Ugd2hlcmUgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIDpjb25zdDpgQUZfQ0FOYCB0aGUgcHJvdG9jb2wgc2hvdWxkIGJlIG9uZQorICAgb2YgOmNvbnN0OmBDQU5fUkFXYCBvciA6Y29uc3Q6YENBTl9CQ01gLgorCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgVGhlIEFGX0NBTiBmYW1pbHkgd2FzIGFkZGVkLgogICAgICAgVGhlIEFGX1JEUyBmYW1pbHkgd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgIFRoZSBDQU5fQkNNIHByb3RvY29sIHdhcyBhZGRlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHNvY2tldHBhaXIoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkKIApAQCAtMzI5LDEwICszNTIsMTUgQEAKICAgIGlmIGRlZmluZWQgb24gdGhlIHBsYXRmb3JtOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIDpjb25zdDpgQUZfSU5FVGAuCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldHMgYXJlIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXQgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgd2hvbGUgc29ja2V0IEFQSSwgcmF0aGVyCiAgICAgICB0aGFuIGEgc3Vic2V0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHJldHVybmVkIHNvY2tldHMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBjcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzWywgdGltZW91dFssIHNvdXJjZV9hZGRyZXNzXV0pCiAKQEAgLTM2MCw3ICszODgsNyBAQAogICAgICAgc3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgogCiAKLS4uIGZ1bmN0aW9uOjogZnJvbWZkKGZkLCBmYW1pbHksIHR5cGVbLCBwcm90b10pCisuLiBmdW5jdGlvbjo6IGZyb21mZChmZCwgZmFtaWx5LCB0eXBlLCBwcm90bz0wKQogCiAgICBEdXBsaWNhdGUgdGhlIGZpbGUgZGVzY3JpcHRvciAqZmQqIChhbiBpbnRlZ2VyIGFzIHJldHVybmVkIGJ5IGEgZmlsZSBvYmplY3QncwogICAgOm1ldGg6YGZpbGVub2AgbWV0aG9kKSBhbmQgYnVpbGQgYSBzb2NrZXQgb2JqZWN0IGZyb20gdGhlIHJlc3VsdC4gIEFkZHJlc3MKQEAgLTM3MSw2ICszOTksMTEgQEAKICAgIGEgc29ja2V0IHBhc3NlZCB0byBhIHByb2dyYW0gYXMgc3RhbmRhcmQgaW5wdXQgb3Igb3V0cHV0IChzdWNoIGFzIGEgc2VydmVyCiAgICBzdGFydGVkIGJ5IHRoZSBVbml4IGluZXQgZGFlbW9uKS4gIFRoZSBzb2NrZXQgaXMgYXNzdW1lZCB0byBiZSBpbiBibG9ja2luZyBtb2RlLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHJldHVybmVkIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogZnJvbXNoYXJlKGRhdGEpCiAKQEAgLTU5OCw3ICs2MzEsMTAgQEAKICAgIGJvdGggdGhlIHZhbHVlIG9mICphZGRyZXNzX2ZhbWlseSogYW5kIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIG9mCiAgICA6YzpmdW5jOmBpbmV0X3B0b25gLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKS4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLCBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgV2luZG93cyBzdXBwb3J0IGFkZGVkCiAKIAogLi4gZnVuY3Rpb246OiBpbmV0X250b3AoYWRkcmVzc19mYW1pbHksIHBhY2tlZF9pcCkKQEAgLTYxNCw3ICs2NTAsMTAgQEAKICAgIHNwZWNpZmllZCBhZGRyZXNzIGZhbWlseSwgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuICBBCiAgICA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQgZm9yIGVycm9ycyBmcm9tIHRoZSBjYWxsIHRvIDpmdW5jOmBpbmV0X250b3BgLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKS4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLCBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgV2luZG93cyBzdXBwb3J0IGFkZGVkCiAKIAogLi4KQEAgLTczNSw2ICs3NzQsMTEgQEAKICAgICpuZXcqIHNvY2tldCBvYmplY3QgdXNhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvbiB0aGUgY29ubmVjdGlvbiwgYW5kCiAgICAqYWRkcmVzcyogaXMgdGhlIGFkZHJlc3MgYm91bmQgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5iaW5kKGFkZHJlc3MpCiAKQEAgLTc4Nyw2ICs4MzEsMTYgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKKy4uIG1ldGhvZDo6IHNvY2tldC5kdXAoKQorCisgICBEdXBsaWNhdGUgdGhlIHNvY2tldC4KKworICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBzb2NrZXQncyBmaWxlIGRlc2NyaXB0b3IgKGEgc21hbGwgaW50ZWdlcikuICBUaGlzIGlzIHVzZWZ1bCB3aXRoCkBAIC03OTcsNiArODUxLDE1IEBACiAgICB0aGlzIGxpbWl0YXRpb24uCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LmdldF9pbmhlcml0YWJsZSgpCisKKyAgIEdldCB0aGUgOnJlZjpgaW5oZXJpdGFibGUgZmxhZyA8ZmRfaW5oZXJpdGFuY2U+YCBvZiB0aGUgc29ja2V0J3MgZmlsZQorICAgZGVzY3JpcHRvciBvciBzb2NrZXQncyBoYW5kbGU6IGBgVHJ1ZWBgIGlmIHRoZSBzb2NrZXQgY2FuIGJlIGluaGVyaXRlZCBpbgorICAgY2hpbGQgcHJvY2Vzc2VzLCBgYEZhbHNlYGAgaWYgaXQgY2Fubm90LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZ2V0cGVlcm5hbWUoKQogCiAgICBSZXR1cm4gdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkLiAgVGhpcyBpcyB1c2VmdWwgdG8KQEAgLTEwODMsNiArMTE0NiwxNCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogc29ja2V0LnNldGJsb2NraW5nKGZsYWcpCiAKICAgIFNldCBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBvZiB0aGUgc29ja2V0OiBpZiAqZmxhZyogaXMgZmFsc2UsIHRoZQpAQCAtMTM2NCw3ICsxNDM1LDE2IEBACiAgICBzLmlvY3RsKHNvY2tldC5TSU9fUkNWQUxMLCBzb2NrZXQuUkNWQUxMX09GRikKIAogVGhlIGxhc3QgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIHRoZSBzb2NrZXQgaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHRvIGEgQ0FOCi1uZXR3b3JrLiBUaGlzIGV4YW1wbGUgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHByaXZpbGVkZ2U6OgorbmV0d29yayB1c2luZyB0aGUgcmF3IHNvY2tldCBwcm90b2NvbC4gVG8gdXNlIENBTiB3aXRoIHRoZSBicm9hZGNhc3QKK21hbmFnZXIgcHJvdG9jb2wgaW5zdGVhZCwgb3BlbiBhIHNvY2tldCB3aXRoOjoKKworICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKQorCitBZnRlciBiaW5kaW5nICg6Y29uc3Q6YENBTl9SQVdgKSBvciBjb25uZWN0aW5nICg6Y29uc3Q6YENBTl9CQ01gKSB0aGUgc29ja2V0LCB5b3UKK2NhbiB1c2UgdGhlIDptZXRoOmBzb2NrZXQuc2VuZGAsIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5yZWN2YCBvcGVyYXRpb25zIChhbmQKK3RoZWlyIGNvdW50ZXJwYXJ0cykgb24gdGhlIHNvY2tldCBvYmplY3QgYXMgdXN1YWwuCisKK1RoaXMgZXhhbXBsZSBtaWdodCByZXF1aXJlIHNwZWNpYWwgcHJpdmlsZWRnZTo6CiAKICAgIGltcG9ydCBzb2NrZXQKICAgIGltcG9ydCBzdHJ1Y3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Nwd2QucnN0IGIvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKaW5kZXggYWRkNjExZi4uNThiZTc4ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKQEAgLTE5LDkgKzE5LDkgQEAKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IEluZGV4IHwgQXR0cmlidXRlICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfAogKz09PT09PT0rPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgMCAgICAgfCBgYHNwX25hbWBgICAgIHwgTG9naW4gbmFtZSAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAgICAgIHwgYGBzcF9uYW1wYGAgICB8IExvZ2luIG5hbWUgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgMSAgICAgfCBgYHNwX3B3ZGBgICAgIHwgRW5jcnlwdGVkIHBhc3N3b3JkICAgICAgICAgICAgICB8Cit8IDEgICAgIHwgYGBzcF9wd2RwYGAgICB8IEVuY3J5cHRlZCBwYXNzd29yZCAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgMiAgICAgfCBgYHNwX2xzdGNoZ2BgIHwgRGF0ZSBvZiBsYXN0IGNoYW5nZSAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMzYsMTUgKzM2LDE1IEBACiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA2ICAgICB8IGBgc3BfaW5hY3RgYCAgfCBOdW1iZXIgb2YgZGF5cyBhZnRlciBwYXNzd29yZCAgIHwKIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgZXhwaXJlcyB1bnRpbCBhY2NvdW50IGlzICAgICAgICB8Ci18ICAgICAgIHwgICAgICAgICAgICAgICB8IGJsb2NrZWQgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICB8ICAgICAgICAgICAgICAgfCBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDcgICAgIHwgYGBzcF9leHBpcmVgYCB8IE51bWJlciBvZiBkYXlzIHNpbmNlIDE5NzAtMDEtMDEgfAotfCAgICAgICB8ICAgICAgICAgICAgICAgfCB1bnRpbCBhY2NvdW50IGlzIGRpc2FibGVkICAgICAgIHwKK3wgICAgICAgfCAgICAgICAgICAgICAgIHwgd2hlbiBhY2NvdW50IGV4cGlyZXMgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA4ICAgICB8IGBgc3BfZmxhZ2BgICAgfCBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLVRoZSBzcF9uYW0gYW5kIHNwX3B3ZCBpdGVtcyBhcmUgc3RyaW5ncywgYWxsIG90aGVycyBhcmUgaW50ZWdlcnMuCitUaGUgc3BfbmFtcCBhbmQgc3BfcHdkcCBpdGVtcyBhcmUgc3RyaW5ncywgYWxsIG90aGVycyBhcmUgaW50ZWdlcnMuCiA6ZXhjOmBLZXlFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBlbnRyeSBhc2tlZCBmb3IgY2Fubm90IGJlIGZvdW5kLgogCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZDoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0IGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKaW5kZXggOGE1MGY4Ny4uNjA5N2U3YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKQEAgLTEzLDggKzEzLDggQEAKIGFwcGxpY2F0aW9uIHVzaW5nIFNRTGl0ZSBhbmQgdGhlbiBwb3J0IHRoZSBjb2RlIHRvIGEgbGFyZ2VyIGRhdGFiYXNlIHN1Y2ggYXMKIFBvc3RncmVTUUwgb3IgT3JhY2xlLgogCi1zcWxpdGUzIHdhcyB3cml0dGVuIGJ5IEdlcmhhcmQgSMOkcmluZyBhbmQgcHJvdmlkZXMgYSBTUUwgaW50ZXJmYWNlIGNvbXBsaWFudAotd2l0aCB0aGUgREItQVBJIDIuMCBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlZCBieSA6cGVwOmAyNDlgLgorVGhlIHNxbGl0ZTMgbW9kdWxlIHdhcyB3cml0dGVuIGJ5IEdlcmhhcmQgSMOkcmluZy4gIEl0IHByb3ZpZGVzIGEgU1FMIGludGVyZmFjZQorY29tcGxpYW50IHdpdGggdGhlIERCLUFQSSAyLjAgc3BlY2lmaWNhdGlvbiBkZXNjcmliZWQgYnkgOnBlcDpgMjQ5YC4KIAogVG8gdXNlIHRoZSBtb2R1bGUsIHlvdSBtdXN0IGZpcnN0IGNyZWF0ZSBhIDpjbGFzczpgQ29ubmVjdGlvbmAgb2JqZWN0IHRoYXQKIHJlcHJlc2VudHMgdGhlIGRhdGFiYXNlLiAgSGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUKQEAgLTMxLDIzICszMSwyOSBAQAogICAgYyA9IGNvbm4uY3Vyc29yKCkKIAogICAgIyBDcmVhdGUgdGFibGUKLSAgIGMuZXhlY3V0ZSgnJydjcmVhdGUgdGFibGUgc3RvY2tzCi0gICAoZGF0ZSB0ZXh0LCB0cmFucyB0ZXh0LCBzeW1ib2wgdGV4dCwKLSAgICBxdHkgcmVhbCwgcHJpY2UgcmVhbCknJycpCisgICBjLmV4ZWN1dGUoJycnQ1JFQVRFIFRBQkxFIHN0b2NrcworICAgICAgICAgICAgICAgIChkYXRlIHRleHQsIHRyYW5zIHRleHQsIHN5bWJvbCB0ZXh0LCBxdHkgcmVhbCwgcHJpY2UgcmVhbCknJycpCiAKICAgICMgSW5zZXJ0IGEgcm93IG9mIGRhdGEKLSAgIGMuZXhlY3V0ZSgiIiJpbnNlcnQgaW50byBzdG9ja3MKLSAgICAgICAgICAgICB2YWx1ZXMgKCcyMDA2LTAxLTA1JywnQlVZJywnUkhBVCcsMTAwLDM1LjE0KSIiIikKKyAgIGMuZXhlY3V0ZSgiSU5TRVJUIElOVE8gc3RvY2tzIFZBTFVFUyAoJzIwMDYtMDEtMDUnLCdCVVknLCdSSEFUJywxMDAsMzUuMTQpIikKIAogICAgIyBTYXZlIChjb21taXQpIHRoZSBjaGFuZ2VzCiAgICBjb25uLmNvbW1pdCgpCiAKLSAgICMgV2UgY2FuIGFsc28gY2xvc2UgdGhlIGN1cnNvciBpZiB3ZSBhcmUgZG9uZSB3aXRoIGl0Ci0gICBjLmNsb3NlKCkKKyAgICMgV2UgY2FuIGFsc28gY2xvc2UgdGhlIGNvbm5lY3Rpb24gaWYgd2UgYXJlIGRvbmUgd2l0aCBpdC4KKyAgICMgSnVzdCBiZSBzdXJlIGFueSBjaGFuZ2VzIGhhdmUgYmVlbiBjb21taXR0ZWQgb3IgdGhleSB3aWxsIGJlIGxvc3QuCisgICBjb25uLmNsb3NlKCkKKworVGhlIGRhdGEgeW91J3ZlIHNhdmVkIGlzIHBlcnNpc3RlbnQgYW5kIGlzIGF2YWlsYWJsZSBpbiBzdWJzZXF1ZW50IHNlc3Npb25zOjoKKworICAgaW1wb3J0IHNxbGl0ZTMKKyAgIGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoJ2V4YW1wbGUuZGInKQorICAgYyA9IGNvbm4uY3Vyc29yKCkKIAogVXN1YWxseSB5b3VyIFNRTCBvcGVyYXRpb25zIHdpbGwgbmVlZCB0byB1c2UgdmFsdWVzIGZyb20gUHl0aG9uIHZhcmlhYmxlcy4gIFlvdQogc2hvdWxkbid0IGFzc2VtYmxlIHlvdXIgcXVlcnkgdXNpbmcgUHl0aG9uJ3Mgc3RyaW5nIG9wZXJhdGlvbnMgYmVjYXVzZSBkb2luZyBzbwotaXMgaW5zZWN1cmU7IGl0IG1ha2VzIHlvdXIgcHJvZ3JhbSB2dWxuZXJhYmxlIHRvIGFuIFNRTCBpbmplY3Rpb24gYXR0YWNrLgoraXMgaW5zZWN1cmU7IGl0IG1ha2VzIHlvdXIgcHJvZ3JhbSB2dWxuZXJhYmxlIHRvIGFuIFNRTCBpbmplY3Rpb24gYXR0YWNrCisoc2VlIGh0dHA6Ly94a2NkLmNvbS8zMjcvIGZvciBodW1vcm91cyBleGFtcGxlIG9mIHdoYXQgY2FuIGdvIHdyb25nKS4KIAogSW5zdGVhZCwgdXNlIHRoZSBEQi1BUEkncyBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9uLiAgUHV0IGBgP2BgIGFzIGEgcGxhY2Vob2xkZXIKIHdoZXJldmVyIHlvdSB3YW50IHRvIHVzZSBhIHZhbHVlLCBhbmQgdGhlbiBwcm92aWRlIGEgdHVwbGUgb2YgdmFsdWVzIGFzIHRoZQpAQCAtNTYsMTkgKzYyLDIwIEBACiBleGFtcGxlOjoKIAogICAgIyBOZXZlciBkbyB0aGlzIC0tIGluc2VjdXJlIQotICAgc3ltYm9sID0gJ0lCTScKLSAgIGMuZXhlY3V0ZSgic2VsZWN0ICogZnJvbSBzdG9ja3Mgd2hlcmUgc3ltYm9sID0gJyVzJyIgJSBzeW1ib2wpCisgICBzeW1ib2wgPSAnUkhBVCcKKyAgIGMuZXhlY3V0ZSgiU0VMRUNUICogRlJPTSBzdG9ja3MgV0hFUkUgc3ltYm9sID0gJyVzJyIgJSBzeW1ib2wpCiAKICAgICMgRG8gdGhpcyBpbnN0ZWFkCi0gICB0ID0gKCdJQk0nLCkKLSAgIGMuZXhlY3V0ZSgnc2VsZWN0ICogZnJvbSBzdG9ja3Mgd2hlcmUgc3ltYm9sPT8nLCB0KQorICAgdCA9ICgnUkhBVCcsKQorICAgYy5leGVjdXRlKCdTRUxFQ1QgKiBGUk9NIHN0b2NrcyBXSEVSRSBzeW1ib2w9PycsIHQpCisgICBwcmludChjLmZldGNob25lKCkpCiAKLSAgICMgTGFyZ2VyIGV4YW1wbGUKLSAgIGZvciB0IGluIFsoJzIwMDYtMDMtMjgnLCAnQlVZJywgJ0lCTScsIDEwMDAsIDQ1LjAwKSwKLSAgICAgICAgICAgICAoJzIwMDYtMDQtMDUnLCAnQlVZJywgJ01TRlQnLCAxMDAwLCA3Mi4wMCksCi0gICAgICAgICAgICAgKCcyMDA2LTA0LTA2JywgJ1NFTEwnLCAnSUJNJywgNTAwLCA1My4wMCksCi0gICAgICAgICAgICBdOgotICAgICAgIGMuZXhlY3V0ZSgnaW5zZXJ0IGludG8gc3RvY2tzIHZhbHVlcyAoPyw/LD8sPyw/KScsIHQpCisgICAjIExhcmdlciBleGFtcGxlIHRoYXQgaW5zZXJ0cyBtYW55IHJlY29yZHMgYXQgYSB0aW1lCisgICBwdXJjaGFzZXMgPSBbKCcyMDA2LTAzLTI4JywgJ0JVWScsICdJQk0nLCAxMDAwLCA0NS4wMCksCisgICAgICAgICAgICAgICAgKCcyMDA2LTA0LTA1JywgJ0JVWScsICdNU0ZUJywgMTAwMCwgNzIuMDApLAorICAgICAgICAgICAgICAgICgnMjAwNi0wNC0wNicsICdTRUxMJywgJ0lCTScsIDUwMCwgNTMuMDApLAorICAgICAgICAgICAgICAgXQorICAgYy5leGVjdXRlbWFueSgnSU5TRVJUIElOVE8gc3RvY2tzIFZBTFVFUyAoPyw/LD8sPyw/KScsIHB1cmNoYXNlcykKIAogVG8gcmV0cmlldmUgZGF0YSBhZnRlciBleGVjdXRpbmcgYSBTRUxFQ1Qgc3RhdGVtZW50LCB5b3UgY2FuIGVpdGhlciB0cmVhdCB0aGUKIGN1cnNvciBhcyBhbiA6dGVybTpgaXRlcmF0b3JgLCBjYWxsIHRoZSBjdXJzb3IncyA6bWV0aDpgfkN1cnNvci5mZXRjaG9uZWAgbWV0aG9kIHRvCkBAIC03NywxNiArODQsMTMgQEAKIAogVGhpcyBleGFtcGxlIHVzZXMgdGhlIGl0ZXJhdG9yIGZvcm06OgogCi0gICA+Pj4gYyA9IGNvbm4uY3Vyc29yKCkKLSAgID4+PiBjLmV4ZWN1dGUoJ3NlbGVjdCAqIGZyb20gc3RvY2tzIG9yZGVyIGJ5IHByaWNlJykKLSAgID4+PiBmb3Igcm93IGluIGM6Ci0gICAuLi4gICAgIHByaW50KHJvdykKLSAgIC4uLgorICAgPj4+IGZvciByb3cgaW4gYy5leGVjdXRlKCdTRUxFQ1QgKiBGUk9NIHN0b2NrcyBPUkRFUiBCWSBwcmljZScpOgorICAgICAgICAgICBwcmludChyb3cpCisKICAgICgnMjAwNi0wMS0wNScsICdCVVknLCAnUkhBVCcsIDEwMCwgMzUuMTQpCiAgICAoJzIwMDYtMDMtMjgnLCAnQlVZJywgJ0lCTScsIDEwMDAsIDQ1LjApCiAgICAoJzIwMDYtMDQtMDYnLCAnU0VMTCcsICdJQk0nLCA1MDAsIDUzLjApCi0gICAoJzIwMDYtMDQtMDUnLCAnQlVZJywgJ01TT0ZUJywgMTAwMCwgNzIuMCkKLSAgID4+PgorICAgKCcyMDA2LTA0LTA1JywgJ0JVWScsICdNU0ZUJywgMTAwMCwgNzIuMCkKIAogCiAuLiBzZWVhbHNvOjoKQEAgLTk5LDYgKzEwMyw5IEBACiAgICAgICBUaGUgU1FMaXRlIHdlYiBwYWdlOyB0aGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgdGhlIHN5bnRheCBhbmQgdGhlCiAgICAgICBhdmFpbGFibGUgZGF0YSB0eXBlcyBmb3IgdGhlIHN1cHBvcnRlZCBTUUwgZGlhbGVjdC4KIAorICAgaHR0cDovL3d3dy53M3NjaG9vbHMuY29tL3NxbC8KKyAgICAgIFR1dG9yaWFsLCByZWZlcmVuY2UgYW5kIGV4YW1wbGVzIGZvciBsZWFybmluZyBTUUwgc3ludGF4LgorCiAgICA6cGVwOmAyNDlgIC0gRGF0YWJhc2UgQVBJIFNwZWNpZmljYXRpb24gMi4wCiAgICAgICBQRVAgd3JpdHRlbiBieSBNYXJjLUFuZHLDqSBMZW1idXJnLgogCkBAIC0xNTksNyArMTY2LDcgQEAKICAgIGZpcnN0IGJsYW5rIGZvciB0aGUgY29sdW1uIG5hbWU6IHRoZSBjb2x1bW4gbmFtZSB3b3VsZCBzaW1wbHkgYmUgIngiLgogCiAKLS4uIGZ1bmN0aW9uOjogY29ubmVjdChkYXRhYmFzZVssIHRpbWVvdXQsIGRldGVjdF90eXBlcywgaXNvbGF0aW9uX2xldmVsLCBjaGVja19zYW1lX3RocmVhZCwgZmFjdG9yeSwgY2FjaGVkX3N0YXRlbWVudHNdKQorLi4gZnVuY3Rpb246OiBjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50cywgdXJpXSkKIAogICAgT3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBTUUxpdGUgZGF0YWJhc2UgZmlsZSAqZGF0YWJhc2UqLiBZb3UgY2FuIHVzZQogICAgYGAiOm1lbW9yeToiYGAgdG8gb3BlbiBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aGF0IHJlc2lkZXMgaW4gUkFNCkBAIC0xOTUsNiArMjAyLDE4IEBACiAgICBmb3IgdGhlIGNvbm5lY3Rpb24sIHlvdSBjYW4gc2V0IHRoZSAqY2FjaGVkX3N0YXRlbWVudHMqIHBhcmFtZXRlci4gVGhlIGN1cnJlbnRseQogICAgaW1wbGVtZW50ZWQgZGVmYXVsdCBpcyB0byBjYWNoZSAxMDAgc3RhdGVtZW50cy4KIAorICAgSWYgKnVyaSogaXMgdHJ1ZSwgKmRhdGFiYXNlKiBpcyBpbnRlcnByZXRlZCBhcyBhIFVSSS4gVGhpcyBhbGxvd3MgeW91CisgICB0byBzcGVjaWZ5IG9wdGlvbnMuIEZvciBleGFtcGxlLCB0byBvcGVuIGEgZGF0YWJhc2UgaW4gcmVhZC1vbmx5IG1vZGUKKyAgIHlvdSBjYW4gdXNlOjoKKworICAgICAgIGRiID0gc3FsaXRlMy5jb25uZWN0KCdmaWxlOnBhdGgvdG8vZGF0YWJhc2U/bW9kZT1ybycsIHVyaT1UcnVlKQorCisgICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmVhdHVyZSwgaW5jbHVkaW5nIGEgbGlzdCBvZiByZWNvZ25pemVkIG9wdGlvbnMsIGNhbgorICAgYmUgZm91bmQgaW4gdGhlIGBTUUxpdGUgVVJJIGRvY3VtZW50YXRpb24gPGh0dHA6Ly93d3cuc3FsaXRlLm9yZy91cmkuaHRtbD5gXy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqdXJpKiBwYXJhbWV0ZXIuCisKIAogLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9jb252ZXJ0ZXIodHlwZW5hbWUsIGNhbGxhYmxlKQogCkBAIC01MDUsNyArNTI0LDcgQEAKIAogICAgLi4gbWV0aG9kOjogZXhlY3V0ZShzcWwsIFtwYXJhbWV0ZXJzXSkKIAotICAgICAgRXhlY3V0ZXMgYW4gU1FMIHN0YXRlbWVudC4gVGhlIFNRTCBzdGF0ZW1lbnQgbWF5IGJlIHBhcmFtZXRyaXplZCAoaS4gZS4KKyAgICAgIEV4ZWN1dGVzIGFuIFNRTCBzdGF0ZW1lbnQuIFRoZSBTUUwgc3RhdGVtZW50IG1heSBiZSBwYXJhbWV0ZXJpemVkIChpLiBlLgogICAgICAgcGxhY2Vob2xkZXJzIGluc3RlYWQgb2YgU1FMIGxpdGVyYWxzKS4gVGhlIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSBzdXBwb3J0cyB0d28KICAgICAgIGtpbmRzIG9mIHBsYWNlaG9sZGVyczogcXVlc3Rpb24gbWFya3MgKHFtYXJrIHN0eWxlKSBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzCiAgICAgICAobmFtZWQgc3R5bGUpLgpAQCAtNjI3LDcgKzY0Niw3IEBACiAKICAgIC4uIG1ldGhvZDo6IGtleXMKIAotICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIHR1cGxlIG9mIGNvbHVtbiBuYW1lcy4gSW1tZWRpYXRlbHkgYWZ0ZXIgYSBxdWVyeSwKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGNvbHVtbiBuYW1lcy4gSW1tZWRpYXRlbHkgYWZ0ZXIgYSBxdWVyeSwKICAgICAgIGl0IGlzIHRoZSBmaXJzdCBtZW1iZXIgb2YgZWFjaCB0dXBsZSBpbiA6YXR0cjpgQ3Vyc29yLmRlc2NyaXB0aW9uYC4KIAogTGV0J3MgYXNzdW1lIHdlIGluaXRpYWxpemUgYSB0YWJsZSBhcyBpbiB0aGUgZXhhbXBsZSBnaXZlbiBhYm92ZTo6CkBAIC03MDIsMTkgKzcyMSwyMCBAQAogCiBUaGlzIGlzIGhvdyBTUUxpdGUgdHlwZXMgYXJlIGNvbnZlcnRlZCB0byBQeXRob24gdHlwZXMgYnkgZGVmYXVsdDoKIAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBTUUxpdGUgdHlwZSB8IFB5dGhvbiB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCBgYE5VTExgYCAgICB8IDpjb25zdDpgTm9uZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYElOVEVHRVJgYCB8IDpjbGFzczpgaW50YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYFJFQUxgYCAgICB8IDpjbGFzczpgZmxvYXRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYFRFWFRgYCAgICB8IGRlcGVuZHMgb24gdGV4dF9mYWN0b3J5LCBzdHIgYnkgZGVmYXVsdCAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYEJMT0JgYCAgICB8IDpjbGFzczpgYnl0ZXNgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgU1FMaXRlIHR5cGUgfCBQeXRob24gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBgYE5VTExgYCAgICB8IDpjb25zdDpgTm9uZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgSU5URUdFUmBgIHwgOmNsYXNzOmBpbnRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBSRUFMYGAgICAgfCA6Y2xhc3M6YGZsb2F0YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYFRFWFRgYCAgICB8IGRlcGVuZHMgb24gOmF0dHI6YH5Db25uZWN0aW9uLnRleHRfZmFjdG9yeWAsIHwKK3wgICAgICAgICAgICAgfCA6Y2xhc3M6YHN0cmAgYnkgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYEJMT0JgYCAgICB8IDpjbGFzczpgYnl0ZXNgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFRoZSB0eXBlIHN5c3RlbSBvZiB0aGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIGlzIGV4dGVuc2libGUgaW4gdHdvIHdheXM6IHlvdSBjYW4KIHN0b3JlIGFkZGl0aW9uYWwgUHl0aG9uIHR5cGVzIGluIGEgU1FMaXRlIGRhdGFiYXNlIHZpYSBvYmplY3QgYWRhcHRhdGlvbiwgYW5kCkBAIC03MzAsOSArNzUwLDYgQEAKIHNxbGl0ZTMgbW9kdWxlJ3Mgc3VwcG9ydGVkIHR5cGVzIGZvciBTUUxpdGU6IG9uZSBvZiBOb25lVHlwZSwgaW50LCBmbG9hdCwKIHN0ciwgYnl0ZXMuCiAKLVRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgdXNlcyBQeXRob24gb2JqZWN0IGFkYXB0YXRpb24sIGFzIGRlc2NyaWJlZCBpbgotOnBlcDpgMjQ2YCBmb3IgdGhpcy4gIFRoZSBwcm90b2NvbCB0byB1c2UgaXMgOmNsYXNzOmBQcmVwYXJlUHJvdG9jb2xgLgotCiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZW5hYmxlIHRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgdG8gYWRhcHQgYSBjdXN0b20gUHl0aG9uCiB0eXBlIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG9uZXMuCiAKQEAgLTc4OCw4ICs4MDUsOCBAQAogCiAuLiBub3RlOjoKIAotICAgQ29udmVydGVyIGZ1bmN0aW9ucyAqKmFsd2F5cyoqIGdldCBjYWxsZWQgd2l0aCBhIHN0cmluZywgbm8gbWF0dGVyIHVuZGVyIHdoaWNoCi0gICBkYXRhIHR5cGUgeW91IHNlbnQgdGhlIHZhbHVlIHRvIFNRTGl0ZS4KKyAgIENvbnZlcnRlciBmdW5jdGlvbnMgKiphbHdheXMqKiBnZXQgY2FsbGVkIHdpdGggYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QsIG5vCisgICBtYXR0ZXIgdW5kZXIgd2hpY2ggZGF0YSB0eXBlIHlvdSBzZW50IHRoZSB2YWx1ZSB0byBTUUxpdGUuCiAKIDo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NzbC5yc3QgYi9Eb2MvbGlicmFyeS9zc2wucnN0CmluZGV4IGFhNWE1MmYuLjVhYjZjMTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NzbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3NsLnJzdApAQCAtMjYsNyArMjYsOCBAQAogCiAgICBTb21lIGJlaGF2aW9yIG1heSBiZSBwbGF0Zm9ybSBkZXBlbmRlbnQsIHNpbmNlIGNhbGxzIGFyZSBtYWRlIHRvIHRoZQogICAgb3BlcmF0aW5nIHN5c3RlbSBzb2NrZXQgQVBJcy4gIFRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBPcGVuU1NMIG1heSBhbHNvCi0gICBjYXVzZSB2YXJpYXRpb25zIGluIGJlaGF2aW9yLgorICAgY2F1c2UgdmFyaWF0aW9ucyBpbiBiZWhhdmlvci4gRm9yIGV4YW1wbGUsIFRMU3YxLjEgYW5kIFRMU3YxLjIgY29tZSB3aXRoCisgICBvcGVuc3NsIHZlcnNpb24gMS4wLjEuCiAKIC4uIHdhcm5pbmc6OgogICAgRG9uJ3QgdXNlIHRoaXMgbW9kdWxlIHdpdGhvdXQgcmVhZGluZyB0aGUgOnJlZjpgc3NsLXNlY3VyaXR5YC4gIERvaW5nIHNvCkBAIC0xODYsMTQgKzE4NywxNiBAQAogCiAgICAgIC4uIHRhYmxlOjoKIAotICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQotICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKgotICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLQotICAgICAgICAqU1NMdjIqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8KLSAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vCi0gICAgICAgICpTU0x2MjMqICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwotICAgICAgICAqVExTdjEqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgeWVzCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09CisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT0KKyAgICAgICAgKmNsaWVudCogLyAqKnNlcnZlcioqICAgICoqU1NMdjIqKiAgKipTU0x2MyoqICAqKlNTTHYyMyoqICAqKlRMU3YxKiogICoqVExTdjEuMSoqICAqKlRMU3YxLjIqKgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCisgICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqU1NMdjIzKiAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIG5vCisgICAgICAgICpUTFN2MSogICAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlRMU3YxLjEqICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICBubworICAgICAgICAqVExTdjEuMiogICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcworICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PT0gID09PT09PT09PT09CiAKICAgIC4uIG5vdGU6OgogCkBAIC0yMjcsNiArMjMwLDU4IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjaXBoZXJzKi4KIAorCitDb250ZXh0IGNyZWF0aW9uCiteXl5eXl5eXl5eXl5eXl5eCisKK0EgY29udmVuaWVuY2UgZnVuY3Rpb24gaGVscHMgY3JlYXRlIDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0cyBmb3IgY29tbW9uCitwdXJwb3Nlcy4KKworLi4gZnVuY3Rpb246OiBjcmVhdGVfZGVmYXVsdF9jb250ZXh0KHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCwgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSkKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0IHdpdGggZGVmYXVsdCBzZXR0aW5ncyBmb3IKKyAgIHRoZSBnaXZlbiAqcHVycG9zZSouICBUaGUgc2V0dGluZ3MgYXJlIGNob3NlbiBieSB0aGUgOm1vZDpgc3NsYCBtb2R1bGUsCisgICBhbmQgdXN1YWxseSByZXByZXNlbnQgYSBoaWdoZXIgc2VjdXJpdHkgbGV2ZWwgdGhhbiB3aGVuIGNhbGxpbmcgdGhlCisgICA6Y2xhc3M6YFNTTENvbnRleHRgIGNvbnN0cnVjdG9yIGRpcmVjdGx5LgorCisgICAqY2FmaWxlKiwgKmNhcGF0aCosICpjYWRhdGEqIHJlcHJlc2VudCBvcHRpb25hbCBDQSBjZXJ0aWZpY2F0ZXMgdG8KKyAgIHRydXN0IGZvciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24sIGFzIGluCisgICA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgLiAgSWYgYWxsIHRocmVlIGFyZQorICAgOmNvbnN0OmBOb25lYCwgdGhpcyBmdW5jdGlvbiBjYW4gY2hvb3NlIHRvIHRydXN0IHRoZSBzeXN0ZW0ncyBkZWZhdWx0CisgICBDQSBjZXJ0aWZpY2F0ZXMgaW5zdGVhZC4KKworICAgVGhlIHNldHRpbmdzIGluIFB5dGhvbiAzLjQgYXJlOiA6ZGF0YTpgUFJPVE9DT0xfU1NMdjIzYCwgOmRhdGE6YE9QX05PX1NTTHYyYCwKKyAgIGFuZCA6ZGF0YTpgT1BfTk9fU1NMdjNgIHdpdGggaGlnaCBlbmNyeXB0aW9uIGNpcGhlciBzdWl0ZXMgd2l0aG91dCBSQzQgYW5kCisgICB3aXRob3V0IHVuYXV0aGVudGljYXRlZCBjaXBoZXIgc3VpdGVzLiBQYXNzaW5nIDpkYXRhOmB+UHVycG9zZS5TRVJWRVJfQVVUSGAKKyAgIGFzICpwdXJwb3NlKiBzZXRzIDpkYXRhOmB+U1NMQ29udGV4dC52ZXJpZnlfbW9kZWAgdG8gOmRhdGE6YENFUlRfUkVRVUlSRURgCisgICBhbmQgZWl0aGVyIGxvYWRzIENBIGNlcnRpZmljYXRlcyAod2hlbiBhdCBsZWFzdCBvbmUgb2YgKmNhZmlsZSosICpjYXBhdGgqIG9yCisgICAqY2FkYXRhKiBpcyBnaXZlbikgb3IgdXNlcyA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgIHRvIGxvYWQKKyAgIGRlZmF1bHQgQ0EgY2VydGlmaWNhdGVzLgorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSBwcm90b2NvbCwgb3B0aW9ucywgY2lwaGVyIGFuZCBvdGhlciBzZXR0aW5ncyBtYXkgY2hhbmdlIHRvIG1vcmUKKyAgICAgIHJlc3RyaWN0aXZlIHZhbHVlcyBhbnl0aW1lIHdpdGhvdXQgcHJpb3IgZGVwcmVjYXRpb24uICBUaGUgdmFsdWVzCisgICAgICByZXByZXNlbnQgYSBmYWlyIGJhbGFuY2UgYmV0d2VlbiBjb21wYXRpYmlsaXR5IGFuZCBzZWN1cml0eS4KKworICAgICAgSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyBzcGVjaWZpYyBzZXR0aW5ncywgeW91IHNob3VsZCBjcmVhdGUgYQorICAgICAgOmNsYXNzOmBTU0xDb250ZXh0YCBhbmQgYXBwbHkgdGhlIHNldHRpbmdzIHlvdXJzZWxmLgorCisgICAuLiBub3RlOjoKKyAgICAgIElmIHlvdSBmaW5kIHRoYXQgd2hlbiBjZXJ0YWluIG9sZGVyIGNsaWVudHMgb3Igc2VydmVycyBhdHRlbXB0IHRvIGNvbm5lY3QKKyAgICAgIHdpdGggYSA6Y2xhc3M6YFNTTENvbnRleHRgIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiB0aGF0IHRoZXkgZ2V0IGFuCisgICAgICBlcnJvciBzdGF0aW5nICJQcm90b2NvbCBvciBjaXBoZXIgc3VpdGUgbWlzbWF0Y2giLCBpdCBtYXkgYmUgdGhhdCB0aGV5CisgICAgICBvbmx5IHN1cHBvcnQgU1NMMy4wIHdoaWNoIHRoaXMgZnVuY3Rpb24gZXhjbHVkZXMgdXNpbmcgdGhlCisgICAgICA6ZGF0YTpgT1BfTk9fU1NMdjNgLiBTU0wzLjAgaGFzIHByb2JsZW1hdGljIHNlY3VyaXR5IGR1ZSB0byBhIG51bWJlciBvZgorICAgICAgcG9vciBpbXBsZW1lbnRhdGlvbnMgYW5kIGl0J3MgcmVsaWFuY2Ugb24gTUQ1IHdpdGhpbiB0aGUgcHJvdG9jb2wuIElmIHlvdQorICAgICAgd2lzaCB0byBjb250aW51ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiBidXQgc3RpbGwgYWxsb3cgU1NMIDMuMCBjb25uZWN0aW9ucworICAgICAgeW91IGNhbiByZS1lbmFibGUgdGhlbSB1c2luZzo6CisKKyAgICAgICAgIGN0eCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KFB1cnBvc2UuQ0xJRU5UX0FVVEgpCisgICAgICAgICBjdHgub3B0aW9ucyAmPSB+c3NsLk9QX05PX1NTTHYzCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFJhbmRvbSBnZW5lcmF0aW9uCiBeXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0zNTYsNiArNDExLDYxIEBACiAgICBHaXZlbiBhIGNlcnRpZmljYXRlIGFzIGFuIEFTQ0lJIFBFTSBzdHJpbmcsIHJldHVybnMgYSBERVItZW5jb2RlZCBzZXF1ZW5jZSBvZgogICAgYnl0ZXMgZm9yIHRoYXQgc2FtZSBjZXJ0aWZpY2F0ZS4KIAorLi4gZnVuY3Rpb246OiBnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCisgICBSZXR1cm5zIGEgbmFtZWQgdHVwbGUgd2l0aCBwYXRocyB0byBPcGVuU1NMJ3MgZGVmYXVsdCBjYWZpbGUgYW5kIGNhcGF0aC4KKyAgIFRoZSBwYXRocyBhcmUgdGhlIHNhbWUgYXMgdXNlZCBieQorICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gVGhlIHJldHVybiB2YWx1ZSBpcyBhCisgICA6dGVybTpgbmFtZWQgdHVwbGVgIGBgRGVmYXVsdFZlcmlmeVBhdGhzYGA6CisKKyAgICogOmF0dHI6YGNhZmlsZWAgLSByZXNvbHZlZCBwYXRoIHRvIGNhZmlsZSBvciBOb25lIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsCisgICAqIDphdHRyOmBjYXBhdGhgIC0gcmVzb2x2ZWQgcGF0aCB0byBjYXBhdGggb3IgTm9uZSBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhZmlsZV9lbnZgIC0gT3BlblNTTCdzIGVudmlyb25tZW50IGtleSB0aGF0IHBvaW50cyB0byBhIGNhZmlsZSwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FmaWxlYCAtIGhhcmQgY29kZWQgcGF0aCB0byBhIGNhZmlsZSwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FwYXRoX2VudmAgLSBPcGVuU1NMJ3MgZW52aXJvbm1lbnQga2V5IHRoYXQgcG9pbnRzIHRvIGEgY2FwYXRoLAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYXBhdGhgIC0gaGFyZCBjb2RlZCBwYXRoIHRvIGEgY2FwYXRoIGRpcmVjdG9yeQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBlbnVtX2NlcnRpZmljYXRlcyhzdG9yZV9uYW1lKQorCisgICBSZXRyaWV2ZSBjZXJ0aWZpY2F0ZXMgZnJvbSBXaW5kb3dzJyBzeXN0ZW0gY2VydCBzdG9yZS4gKnN0b3JlX25hbWUqIG1heSBiZQorICAgb25lIG9mIGBgQ0FgYCwgYGBST09UYGAgb3IgYGBNWWBgLiBXaW5kb3dzIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgY2VydAorICAgc3RvcmVzLCB0b28uCisKKyAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoY2VydF9ieXRlcywgZW5jb2RpbmdfdHlwZSwgdHJ1c3QpIHR1cGxlcy4KKyAgIFRoZSBlbmNvZGluZ190eXBlIHNwZWNpZmllcyB0aGUgZW5jb2Rpbmcgb2YgY2VydF9ieXRlcy4gSXQgaXMgZWl0aGVyCisgICA6Y29uc3Q6YHg1MDlfYXNuYCBmb3IgWC41MDkgQVNOLjEgZGF0YSBvciA6Y29uc3Q6YHBrY3NfN19hc25gIGZvcgorICAgUEtDUyM3IEFTTi4xIGRhdGEuIFRydXN0IHNwZWNpZmllcyB0aGUgcHVycG9zZSBvZiB0aGUgY2VydGlmaWNhdGUgYXMgYSBzZXQKKyAgIG9mIE9JRFMgb3IgZXhhY3RseSBgYFRydWVgYCBpZiB0aGUgY2VydGlmaWNhdGUgaXMgdHJ1c3R3b3J0aHkgZm9yIGFsbAorICAgcHVycG9zZXMuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gc3NsLmVudW1fY2VydGlmaWNhdGVzKCJDQSIpCisgICAgICBbKGInZGF0YS4uLicsICd4NTA5X2FzbicsIHsnMS4zLjYuMS41LjUuNy4zLjEnLCAnMS4zLjYuMS41LjUuNy4zLjInfSksCisgICAgICAgKGInZGF0YS4uLicsICd4NTA5X2FzbicsIFRydWUpXQorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGVudW1fY3JscyhzdG9yZV9uYW1lKQorCisgICBSZXRyaWV2ZSBDUkxzIGZyb20gV2luZG93cycgc3lzdGVtIGNlcnQgc3RvcmUuICpzdG9yZV9uYW1lKiBtYXkgYmUKKyAgIG9uZSBvZiBgYENBYGAsIGBgUk9PVGBgIG9yIGBgTVlgYC4gV2luZG93cyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGNlcnQKKyAgIHN0b3JlcywgdG9vLgorCisgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGNlcnRfYnl0ZXMsIGVuY29kaW5nX3R5cGUsIHRydXN0KSB0dXBsZXMuCisgICBUaGUgZW5jb2RpbmdfdHlwZSBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIG9mIGNlcnRfYnl0ZXMuIEl0IGlzIGVpdGhlcgorICAgOmNvbnN0OmB4NTA5X2FzbmAgZm9yIFguNTA5IEFTTi4xIGRhdGEgb3IgOmNvbnN0OmBwa2NzXzdfYXNuYCBmb3IKKyAgIFBLQ1MjNyBBU04uMSBkYXRhLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIENvbnN0YW50cwogXl5eXl5eXl5eCiAKQEAgLTM5Miw2ICs1MDIsMzggQEAKICAgIGJlIHBhc3NlZCwgZWl0aGVyIHRvIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc2Agb3IgYXMgYQogICAgdmFsdWUgb2YgdGhlIGBgY2FfY2VydHNgYCBwYXJhbWV0ZXIgdG8gOmZ1bmM6YHdyYXBfc29ja2V0YC4KIAorLi4gZGF0YTo6IFZFUklGWV9ERUZBVUxUCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgLiBJbiB0aGlzIG1vZGUsCisgICBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIChDUkxzKSBhcmUgbm90IGNoZWNrZWQuIEJ5IGRlZmF1bHQgT3BlblNTTAorICAgZG9lcyBuZWl0aGVyIHJlcXVpcmUgbm9yIHZlcmlmeSBDUkxzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFZFUklGWV9DUkxfQ0hFQ0tfTEVBRgorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSW4gdGhpcyBtb2RlLCBvbmx5IHRoZQorICAgcGVlciBjZXJ0IGlzIGNoZWNrIGJ1dCBub24gb2YgdGhlIGludGVybWVkaWF0ZSBDQSBjZXJ0aWZpY2F0ZXMuIFRoZSBtb2RlCisgICByZXF1aXJlcyBhIHZhbGlkIENSTCB0aGF0IGlzIHNpZ25lZCBieSB0aGUgcGVlciBjZXJ0J3MgaXNzdWVyIChpdHMgZGlyZWN0CisgICBhbmNlc3RvciBDQSkuIElmIG5vIHByb3BlciBoYXMgYmVlbiBsb2FkZWQKKyAgIDphdHRyOmBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc2AsIHZhbGlkYXRpb24gd2lsbCBmYWlsLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4KKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AuIEluIHRoaXMgbW9kZSwgQ1JMcyBvZgorICAgYWxsIGNlcnRpZmljYXRlcyBpbiB0aGUgcGVlciBjZXJ0IGNoYWluIGFyZSBjaGVja2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFZFUklGWV9YNTA5X1NUUklDVAorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYCB0byBkaXNhYmxlIHdvcmthcm91bmRzCisgICBmb3IgYnJva2VuIFguNTA5IGNlcnRpZmljYXRlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGRhdGE6OiBQUk9UT0NPTF9TU0x2MgogCiAgICBTZWxlY3RzIFNTTCB2ZXJzaW9uIDIgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4KQEAgLTQxNyw5ICs1NTksMjIgQEAKIAogLi4gZGF0YTo6IFBST1RPQ09MX1RMU3YxCiAKLSAgIFNlbGVjdHMgVExTIHZlcnNpb24gMSBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLiAgVGhpcyBpcyB0aGUgbW9zdAorICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjAgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4KKworLi4gZGF0YTo6IFBST1RPQ09MX1RMU3YxXzEKKworICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4KKyAgIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8yCisKKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4yIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuIFRoaXMgaXMgdGhlIG1vc3QKICAgIG1vZGVybiB2ZXJzaW9uLCBhbmQgcHJvYmFibHkgdGhlIGJlc3QgY2hvaWNlIGZvciBtYXhpbXVtIHByb3RlY3Rpb24sIGlmIGJvdGgKLSAgIHNpZGVzIGNhbiBzcGVhayBpdC4KKyAgIHNpZGVzIGNhbiBzcGVhayBpdC4gIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGRhdGE6OiBPUF9BTEwKIApAQCAtNDUzLDYgKzYwOCwyMiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorLi4gZGF0YTo6IE9QX05PX1RMU3YxXzEKKworICAgUHJldmVudHMgYSBUTFN2MS4xIGNvbm5lY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSBpbiBjb25qdW5jdGlvbgorICAgd2l0aCA6Y29uc3Q6YFBST1RPQ09MX1NTTHYyM2AuIEl0IHByZXZlbnRzIHRoZSBwZWVycyBmcm9tIGNob29zaW5nIFRMU3YxLjEgYXMKKyAgIHRoZSBwcm90b2NvbCB2ZXJzaW9uLiBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogT1BfTk9fVExTdjFfMgorCisgICBQcmV2ZW50cyBhIFRMU3YxLjIgY29ubmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluIGNvbmp1bmN0aW9uCisgICB3aXRoIDpjb25zdDpgUFJPVE9DT0xfU1NMdjIzYC4gSXQgcHJldmVudHMgdGhlIHBlZXJzIGZyb20gY2hvb3NpbmcgVExTdjEuMiBhcworICAgdGhlIHByb3RvY29sIHZlcnNpb24uIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGRhdGE6OiBPUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UKIAogICAgVXNlIHRoZSBzZXJ2ZXIncyBjaXBoZXIgb3JkZXJpbmcgcHJlZmVyZW5jZSwgcmF0aGVyIHRoYW4gdGhlIGNsaWVudCdzLgpAQCAtNTQ5LDYgKzcyMCwzNyBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorLi4gZGF0YTo6IEFMRVJUX0RFU0NSSVBUSU9OX0hBTkRTSEFLRV9GQUlMVVJFCisgICAgICAgICAgQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1IKKyAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl8qCisKKyAgIEFsZXJ0IERlc2NyaXB0aW9ucyBmcm9tIDpyZmM6YDUyNDZgIGFuZCBvdGhlcnMuIFRoZSBgSUFOQSBUTFMgQWxlcnQgUmVnaXN0cnkKKyAgIDxodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1wYXJhbWV0ZXJzL3Rscy1wYXJhbWV0ZXJzLnhtbCN0bHMtcGFyYW1ldGVycy02PmBfCisgICBjb250YWlucyB0aGlzIGxpc3QgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIFJGQ3Mgd2hlcmUgdGhlaXIgbWVhbmluZyBpcyBkZWZpbmVkLgorCisgICBVc2VkIGFzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGluCisgICA6bWV0aDpgU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja2AuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUHVycG9zZS5TRVJWRVJfQVVUSAorCisgICBPcHRpb24gZm9yIDpmdW5jOmBjcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBhbmQKKyAgIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c2AuICBUaGlzIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZQorICAgY29udGV4dCBtYXkgYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgV2ViIHNlcnZlcnMgKHRoZXJlZm9yZSwgaXQgd2lsbAorICAgYmUgdXNlZCB0byBjcmVhdGUgY2xpZW50LXNpZGUgc29ja2V0cykuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUHVycG9zZS5DTElFTlRfQVVUSAorCisgICBPcHRpb24gZm9yIDpmdW5jOmBjcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBhbmQKKyAgIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c2AuICBUaGlzIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZQorICAgY29udGV4dCBtYXkgYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgV2ViIGNsaWVudHMgKHRoZXJlZm9yZSwgaXQgd2lsbAorICAgYmUgdXNlZCB0byBjcmVhdGUgc2VydmVyLXNpZGUgc29ja2V0cykuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIFNTTCBTb2NrZXRzCiAtLS0tLS0tLS0tLQpAQCAtNTg0LDEwICs3ODYsMTYgQEAKIAogICAgUGVyZm9ybSB0aGUgU1NMIHNldHVwIGhhbmRzaGFrZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBoYW5kc2hha2UgbWV0aG9kIGFsc28gcGVyZm9ybXMgOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCB3aGVuIHRoZQorICAgICAgOmF0dHI6YH5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhdHRyaWJ1dGUgb2YgdGhlIHNvY2tldCdzCisgICAgICA6YXR0cjpgflNTTFNvY2tldC5jb250ZXh0YCBpcyB0cnVlLgorCiAuLiBtZXRob2Q6OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoYmluYXJ5X2Zvcm09RmFsc2UpCiAKICAgIElmIHRoZXJlIGlzIG5vIGNlcnRpZmljYXRlIGZvciB0aGUgcGVlciBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLAotICAgcmV0dXJucyBgYE5vbmVgYC4KKyAgIHJldHVybiBgYE5vbmVgYC4gIElmIHRoZSBTU0wgaGFuZHNoYWtlIGhhc24ndCBiZWVuIGRvbmUgeWV0LCByYWlzZQorICAgOmV4YzpgVmFsdWVFcnJvcmAuCiAKICAgIElmIHRoZSBgYGJpbmFyeV9mb3JtYGAgcGFyYW1ldGVyIGlzIDpjb25zdDpgRmFsc2VgLCBhbmQgYSBjZXJ0aWZpY2F0ZSB3YXMKICAgIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIsIHRoaXMgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YGRpY3RgIGluc3RhbmNlLiAgSWYgdGhlCkBAIC02NDUsNiArODUzLDExIEBACiAgICAgICBUaGUgcmV0dXJuZWQgZGljdGlvbmFyeSBpbmNsdWRlcyBhZGRpdGlvbmFsIGl0ZW1zIHN1Y2ggYXMgYGBpc3N1ZXJgYAogICAgICAgYW5kIGBgbm90QmVmb3JlYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgd2hlbiB0aGUgaGFuZHNoYWtlIGlzbid0IGRvbmUuCisgICAgICBUaGUgcmV0dXJuZWQgZGljdGlvbmFyeSBpbmNsdWRlcyBhZGRpdGlvbmFsIFg1MDl2MyBleHRlbnNpb24gaXRlbXMKKyAgICAgICAgc3VjaCBhcyBgYGNybERpc3RyaWJ1dGlvblBvaW50c2BgLCBgYGNhSXNzdWVyc2BgIGFuZCBgYE9DU1BgYCBVUklzLgorCiAuLiBtZXRob2Q6OiBTU0xTb2NrZXQuY2lwaGVyKCkKIAogICAgUmV0dXJucyBhIHRocmVlLXZhbHVlIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGNpcGhlciBiZWluZyB1c2VkLCB0aGUKQEAgLTcxNSwxMSArOTI4LDMwIEBACiAKICAgIENyZWF0ZSBhIG5ldyBTU0wgY29udGV4dC4gIFlvdSBtdXN0IHBhc3MgKnByb3RvY29sKiB3aGljaCBtdXN0IGJlIG9uZQogICAgb2YgdGhlIGBgUFJPVE9DT0xfKmBgIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgotICAgOmRhdGE6YFBST1RPQ09MX1NTTHYyM2AgaXMgcmVjb21tZW5kZWQgZm9yIG1heGltdW0gaW50ZXJvcGVyYWJpbGl0eS4KKyAgIDpkYXRhOmBQUk9UT0NPTF9TU0x2MjNgIGlzIGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgbWF4aW11bQorICAgaW50ZXJvcGVyYWJpbGl0eS4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6ZnVuYzpgY3JlYXRlX2RlZmF1bHRfY29udGV4dGAgbGV0cyB0aGUgOm1vZDpgc3NsYCBtb2R1bGUgY2hvb3NlCisgICAgICBzZWN1cml0eSBzZXR0aW5ncyBmb3IgYSBnaXZlbiBwdXJwb3NlLgogCiAKIDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKworICAgR2V0IHN0YXRpc3RpY3MgYWJvdXQgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLCBjb3VudCBvZgorICAgWC41MDkgY2VydGlmaWNhdGVzIGZsYWdnZWQgYXMgQ0EgY2VydGlmaWNhdGVzIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uCisgICBsaXN0cyBhcyBkaWN0aW9uYXJ5LgorCisgICBFeGFtcGxlIGZvciBhIGNvbnRleHQgd2l0aCBvbmUgQ0EgY2VydCBhbmQgb25lIG90aGVyIGNlcnQ6OgorCisgICAgICA+Pj4gY29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKyAgICAgIHsnY3JsJzogMCwgJ3g1MDlfY2EnOiAxLCAneDUwOSc6IDJ9CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUsIHBhc3N3b3JkPU5vbmUpCiAKICAgIExvYWQgYSBwcml2YXRlIGtleSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2VydGlmaWNhdGUuICBUaGUgKmNlcnRmaWxlKgpAQCAtNzUwLDEyICs5ODIsMzIgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBOZXcgb3B0aW9uYWwgYXJndW1lbnQgKnBhc3N3b3JkKi4KIAotLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lKQorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMocHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRIKQorCisgICBMb2FkIGEgc2V0IG9mIGRlZmF1bHQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcyBmcm9tCisgICBkZWZhdWx0IGxvY2F0aW9ucy4gT24gV2luZG93cyBpdCBsb2FkcyBDQSBjZXJ0cyBmcm9tIHRoZSBgYENBYGAgYW5kCisgICBgYFJPT1RgYCBzeXN0ZW0gc3RvcmVzLiBPbiBvdGhlciBzeXN0ZW1zIGl0IGNhbGxzCisgICA6bWV0aDpgU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNgLiBJbiB0aGUgZnV0dXJlIHRoZSBtZXRob2QgbWF5CisgICBsb2FkIENBIGNlcnRpZmljYXRlcyBmcm9tIG90aGVyIGxvY2F0aW9ucywgdG9vLgorCisgICBUaGUgKnB1cnBvc2UqIGZsYWcgc3BlY2lmaWVzIHdoYXQga2luZCBvZiBDQSBjZXJ0aWZpY2F0ZXMgYXJlIGxvYWRlZC4gVGhlCisgICBkZWZhdWx0IHNldHRpbmdzIDpkYXRhOmBQdXJwb3NlLlNFUlZFUl9BVVRIYCBsb2FkcyBjZXJ0aWZpY2F0ZXMsIHRoYXQgYXJlCisgICBmbGFnZ2VkIGFuZCB0cnVzdGVkIGZvciBUTFMgd2ViIHNlcnZlciBhdXRoZW50aWNhdGlvbiAoY2xpZW50IHNpZGUKKyAgIHNvY2tldHMpLiA6ZGF0YTpgUHVycG9zZS5DTElFTlRfQVVUSGAgbG9hZHMgQ0EgY2VydGlmaWNhdGVzIGZvciBjbGllbnQKKyAgIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBvbiB0aGUgc2VydmVyIHNpZGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKQogCiAgICBMb2FkIGEgc2V0IG9mICJjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eSIgKENBKSBjZXJ0aWZpY2F0ZXMgdXNlZCB0byB2YWxpZGF0ZQogICAgb3RoZXIgcGVlcnMnIGNlcnRpZmljYXRlcyB3aGVuIDpkYXRhOmB2ZXJpZnlfbW9kZWAgaXMgb3RoZXIgdGhhbgogICAgOmRhdGE6YENFUlRfTk9ORWAuICBBdCBsZWFzdCBvbmUgb2YgKmNhZmlsZSogb3IgKmNhcGF0aCogbXVzdCBiZSBzcGVjaWZpZWQuCiAKKyAgIFRoaXMgbWV0aG9kIGNhbiBhbHNvIGxvYWQgY2VydGlmaWNhdGlvbiByZXZvY2F0aW9uIGxpc3RzIChDUkxzKSBpbiBQRU0gb3IKKyAgIG9yIERFUiBmb3JtYXQuIEluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIENSTHMsIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AKKyAgIG11c3QgYmUgY29uZmlndXJlZCBwcm9wZXJseS4KKwogICAgVGhlICpjYWZpbGUqIHN0cmluZywgaWYgcHJlc2VudCwgaXMgdGhlIHBhdGggdG8gYSBmaWxlIG9mIGNvbmNhdGVuYXRlZAogICAgQ0EgY2VydGlmaWNhdGVzIGluIFBFTSBmb3JtYXQuIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZgogICAgOnJlZjpgc3NsLWNlcnRpZmljYXRlc2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGFycmFuZ2UgdGhlCkBAIC03NjYsNiArMTAxOCwyNSBAQAogICAgZm9sbG93aW5nIGFuIGBPcGVuU1NMIHNwZWNpZmljIGxheW91dAogICAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9zc2wvU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMuaHRtbD5gXy4KIAorICAgVGhlICpjYWRhdGEqIG9iamVjdCwgaWYgcHJlc2VudCwgaXMgZWl0aGVyIGFuIEFTQ0lJIHN0cmluZyBvZiBvbmUgb3IgbW9yZQorICAgUEVNLWVuY29kZWQgY2VydGlmaWNhdGVzIG9yIGEgYnl0ZXMtbGlrZSBvYmplY3Qgb2YgREVSLWVuY29kZWQKKyAgIGNlcnRpZmljYXRlcy4gTGlrZSB3aXRoICpjYXBhdGgqIGV4dHJhIGxpbmVzIGFyb3VuZCBQRU0tZW5jb2RlZAorICAgY2VydGlmaWNhdGVzIGFyZSBpZ25vcmVkIGJ1dCBhdCBsZWFzdCBvbmUgY2VydGlmaWNhdGUgbXVzdCBiZSBwcmVzZW50LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjYWRhdGEqCisKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBHZXQgYSBsaXN0IG9mIGxvYWRlZCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzLiBJZiB0aGUKKyAgIGBgYmluYXJ5X2Zvcm1gYCBwYXJhbWV0ZXIgaXMgOmNvbnN0OmBGYWxzZWAgZWFjaCBsaXN0CisgICBlbnRyeSBpcyBhIGRpY3QgbGlrZSB0aGUgb3V0cHV0IG9mIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLiBPdGhlcndpc2UKKyAgIHRoZSBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgREVSLWVuY29kZWQgY2VydGlmaWNhdGVzLiBUaGUgcmV0dXJuZWQgbGlzdAorICAgZG9lcyBub3QgY29udGFpbiBjZXJ0aWZpY2F0ZXMgZnJvbSAqY2FwYXRoKiB1bmxlc3MgYSBjZXJ0aWZpY2F0ZSB3YXMKKyAgIHJlcXVlc3RlZCBhbmQgbG9hZGVkIGJ5IGEgU1NMIGNvbm5lY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBtZXRob2Q6OiBTU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCiAKICAgIExvYWQgYSBzZXQgb2YgZGVmYXVsdCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIGZyb20KQEAgLTgwMyw2ICsxMDc0LDU2IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlcnZlcl9uYW1lX2NhbGxiYWNrKQorCisgICBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIFRMUyBDbGllbnQgSGVsbG8KKyAgIGhhbmRzaGFrZSBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IHRoZSBTU0wvVExTIHNlcnZlciB3aGVuIHRoZSBUTFMgY2xpZW50CisgICBzcGVjaWZpZXMgYSBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uLiBUaGUgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiBtZWNoYW5pc20KKyAgIGlzIHNwZWNpZmllZCBpbiA6cmZjOmA2MDY2YCBzZWN0aW9uIDMgLSBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uLgorCisgICBPbmx5IG9uZSBjYWxsYmFjayBjYW4gYmUgc2V0IHBlciBgYFNTTENvbnRleHRgYC4gIElmICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayoKKyAgIGlzIGBgTm9uZWBgIHRoZW4gdGhlIGNhbGxiYWNrIGlzIGRpc2FibGVkLiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gYQorICAgc3Vic2VxdWVudCB0aW1lIHdpbGwgZGlzYWJsZSB0aGUgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrLgorCisgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayosIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhyZWUKKyAgIGFyZ3VtZW50czsgdGhlIGZpcnN0IGJlaW5nIHRoZSA6Y2xhc3M6YHNzbC5TU0xTb2NrZXRgLCB0aGUgc2Vjb25kIGlzIGEgc3RyaW5nCisgICB0aGF0IHJlcHJlc2VudHMgdGhlIHNlcnZlciBuYW1lIHRoYXQgdGhlIGNsaWVudCBpcyBpbnRlbmRpbmcgdG8gY29tbXVuaWNhdGUKKyAgIChvciA6Y29uc3Q6YE5vbmVgIGlmIHRoZSBUTFMgQ2xpZW50IEhlbGxvIGRvZXMgbm90IGNvbnRhaW4gYSBzZXJ2ZXIgbmFtZSkKKyAgIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIG9yaWdpbmFsIDpjbGFzczpgU1NMQ29udGV4dGAuIFRoZSBzZXJ2ZXIgbmFtZQorICAgYXJndW1lbnQgaXMgdGhlIElETkEgZGVjb2RlZCBzZXJ2ZXIgbmFtZS4KKworICAgQSB0eXBpY2FsIHVzZSBvZiB0aGlzIGNhbGxiYWNrIGlzIHRvIGNoYW5nZSB0aGUgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCdzCisgICA6YXR0cjpgU1NMU29ja2V0LmNvbnRleHRgIGF0dHJpYnV0ZSB0byBhIG5ldyBvYmplY3Qgb2YgdHlwZQorICAgOmNsYXNzOmBTU0xDb250ZXh0YCByZXByZXNlbnRpbmcgYSBjZXJ0aWZpY2F0ZSBjaGFpbiB0aGF0IG1hdGNoZXMgdGhlIHNlcnZlcgorICAgbmFtZS4KKworICAgRHVlIHRvIHRoZSBlYXJseSBuZWdvdGlhdGlvbiBwaGFzZSBvZiB0aGUgVExTIGNvbm5lY3Rpb24sIG9ubHkgbGltaXRlZAorICAgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyBhcmUgdXNhYmxlIGxpa2UKKyAgIDptZXRoOmBTU0xTb2NrZXQuc2VsZWN0ZWRfbnBuX3Byb3RvY29sYCBhbmQgOmF0dHI6YFNTTFNvY2tldC5jb250ZXh0YC4KKyAgIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLCA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwKKyAgIDptZXRoOmBTU0xTb2NrZXQuY2lwaGVyYCBhbmQgOm1ldGg6YFNTTFNvY2tldC5jb21wcmVzc2AgbWV0aG9kcyByZXF1aXJlIHRoYXQKKyAgIHRoZSBUTFMgY29ubmVjdGlvbiBoYXMgcHJvZ3Jlc3NlZCBiZXlvbmQgdGhlIFRMUyBDbGllbnQgSGVsbG8gYW5kIHRoZXJlZm9yZQorICAgd2lsbCBub3QgY29udGFpbiByZXR1cm4gbWVhbmluZ2Z1bCB2YWx1ZXMgbm9yIGNhbiB0aGV5IGJlIGNhbGxlZCBzYWZlbHkuCisKKyAgIFRoZSAqc2VydmVyX25hbWVfY2FsbGJhY2sqIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGBgTm9uZWBgIHRvIGFsbG93IHRoZQorICAgVExTIG5lZ290aWF0aW9uIHRvIGNvbnRpbnVlLiAgSWYgYSBUTFMgZmFpbHVyZSBpcyByZXF1aXJlZCwgYSBjb25zdGFudAorICAgOmNvbnN0OmBBTEVSVF9ERVNDUklQVElPTl8qIDxBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUj5gIGNhbiBiZQorICAgcmV0dXJuZWQuICBPdGhlciByZXR1cm4gdmFsdWVzIHdpbGwgcmVzdWx0IGluIGEgVExTIGZhdGFsIGVycm9yIHdpdGgKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1JgLgorCisgICBJZiB0aGVyZSBpcyBhbiBJRE5BIGRlY29kaW5nIGVycm9yIG9uIHRoZSBzZXJ2ZXIgbmFtZSwgdGhlIFRMUyBjb25uZWN0aW9uCisgICB3aWxsIHRlcm1pbmF0ZSB3aXRoIGFuIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1JgIGZhdGFsIFRMUworICAgYWxlcnQgbWVzc2FnZSB0byB0aGUgY2xpZW50LgorCisgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGZyb20gdGhlICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayogZnVuY3Rpb24gdGhlIFRMUworICAgY29ubmVjdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmF0YWwgVExTIGFsZXJ0IG1lc3NhZ2UKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkVgLgorCisgICBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIHRoZSBPcGVuU1NMIGxpYnJhcnkKKyAgIGhhZCBPUEVOU1NMX05PX1RMU0VYVCBkZWZpbmVkIHdoZW4gaXQgd2FzIGJ1aWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcyhkaGZpbGUpCiAKICAgIExvYWQgdGhlIGtleSBnZW5lcmF0aW9uIHBhcmFtZXRlcnMgZm9yIERpZmZpZS1IZWxtYW4gKERIKSBrZXkgZXhjaGFuZ2UuCkBAIC04NjksNiArMTE5MCw0NSBAQAogICAgICAgPj4+IHN0YXRzWydoaXRzJ10sIHN0YXRzWydtaXNzZXMnXQogICAgICAgKDAsIDApCiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiBkaWN0cyB3aXRoIGluZm9ybWF0aW9uIG9mIGxvYWRlZCBDQSBjZXJ0cy4gSWYgdGhlCisgICBvcHRpb25hbCBhcmd1bWVudCBpcyB0cnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0EKKyAgIGNlcnRpZmljYXRlLgorCisgICAuLiBub3RlOjoKKyAgICAgIENlcnRpZmljYXRlcyBpbiBhIGNhcGF0aCBkaXJlY3RvcnkgYXJlbid0IGxvYWRlZCB1bmxlc3MgdGhleSBoYXZlCisgICAgICBiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUKKworICAgV2V0aGVyIHRvIG1hdGNoIHRoZSBwZWVyIGNlcnQncyBob3N0bmFtZSB3aXRoIDpmdW5jOmBtYXRjaF9ob3N0bmFtZWAgaW4KKyAgIDptZXRoOmBTU0xTb2NrZXQuZG9faGFuZHNoYWtlYC4gVGhlIGNvbnRleHQncworICAgOmF0dHI6YH5TU0xDb250ZXh0LnZlcmlmeV9tb2RlYCBtdXN0IGJlIHNldCB0byA6ZGF0YTpgQ0VSVF9PUFRJT05BTGAgb3IKKyAgIDpkYXRhOmBDRVJUX1JFUVVJUkVEYCwgYW5kIHlvdSBtdXN0IHBhc3MgKnNlcnZlcl9ob3N0bmFtZSogdG8KKyAgIDptZXRoOmB+U1NMQ29udGV4dC53cmFwX3NvY2tldGAgaW4gb3JkZXIgdG8gbWF0Y2ggdGhlIGhvc3RuYW1lLgorCisgICBFeGFtcGxlOjoKKworICAgICAgaW1wb3J0IHNvY2tldCwgc3NsCisKKyAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICBjb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICBzc2xfc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQocywgc2VydmVyX2hvc3RuYW1lPSd3d3cudmVyaXNpZ24uY29tJykKKyAgICAgIHNzbF9zb2NrLmNvbm5lY3QoKCd3d3cudmVyaXNpZ24uY29tJywgNDQzKSkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIG5vdGU6OgorCisgICAgIFRoaXMgZmVhdHVyZXMgcmVxdWlyZXMgT3BlblNTTCAwLjkuOGYgb3IgbmV3ZXIuCisKIC4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQub3B0aW9ucwogCiAgICBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIFNTTCBvcHRpb25zIGVuYWJsZWQgb24gdGhpcyBjb250ZXh0LgpAQCAtODg1LDYgKzEyNDUsMTUgQEAKICAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIGNob3NlbiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgY29udGV4dC4gIFRoaXMgYXR0cmlidXRlCiAgICBpcyByZWFkLW9ubHkuCiAKKy4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzCisKKyAgIFRoZSBmbGFncyBmb3IgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIG9wZXJhdGlvbnMuIFlvdSBjYW4gc2V0IGZsYWdzIGxpa2UKKyAgIDpkYXRhOmBWRVJJRllfQ1JMX0NIRUNLX0xFQUZgIGJ5IE9SaW5nIHRoZW0gdG9nZXRoZXIuIEJ5IGRlZmF1bHQgT3BlblNTTAorICAgZG9lcyBuZWl0aGVyIHJlcXVpcmUgbm9yIHZlcmlmeSBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIChDUkxzKS4KKyAgIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDAuOS44Ky4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQudmVyaWZ5X21vZGUKIAogICAgV2hldGhlciB0byB0cnkgdG8gdmVyaWZ5IG90aGVyIHBlZXJzJyBjZXJ0aWZpY2F0ZXMgYW5kIGhvdyB0byBiZWhhdmUKQEAgLTk3MCwyMCArMTMzOSw5IEBACiBjZXJ0aWZpY2F0ZSwgeW91IG5lZWQgdG8gcHJvdmlkZSBhICJDQSBjZXJ0cyIgZmlsZSwgZmlsbGVkIHdpdGggdGhlIGNlcnRpZmljYXRlCiBjaGFpbnMgZm9yIGVhY2ggaXNzdWVyIHlvdSBhcmUgd2lsbGluZyB0byB0cnVzdC4gIEFnYWluLCB0aGlzIGZpbGUganVzdCBjb250YWlucwogdGhlc2UgY2hhaW5zIGNvbmNhdGVuYXRlZCB0b2dldGhlci4gIEZvciB2YWxpZGF0aW9uLCBQeXRob24gd2lsbCB1c2UgdGhlIGZpcnN0Ci1jaGFpbiBpdCBmaW5kcyBpbiB0aGUgZmlsZSB3aGljaCBtYXRjaGVzLiAgU29tZSAic3RhbmRhcmQiIHJvb3QgY2VydGlmaWNhdGVzIGFyZQotYXZhaWxhYmxlIGZyb20gdmFyaW91cyBjZXJ0aWZpY2F0aW9uIGF1dGhvcml0aWVzOiBgQ0FDZXJ0Lm9yZwotPGh0dHA6Ly93d3cuY2FjZXJ0Lm9yZy9pbmRleC5waHA/aWQ9Mz5gXywgYFRoYXd0ZQotPGh0dHA6Ly93d3cudGhhd3RlLmNvbS9yb290cy8+YF8sIGBWZXJpc2lnbgotPGh0dHA6Ly93d3cudmVyaXNpZ24uY29tL3N1cHBvcnQvcm9vdHMuaHRtbD5gXywgYFBvc2l0aXZlIFNTTAotPGh0dHA6Ly93d3cuUG9zaXRpdmVTU0wuY29tL3NzbC1jZXJ0aWZpY2F0ZS1zdXBwb3J0L2NlcnRfaW5zdGFsbGF0aW9uL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3J0PmBfCi0odXNlZCBieSBweXRob24ub3JnKSwgYEVxdWlmYXggYW5kIEdlb1RydXN0Ci08aHR0cDovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3Jvb3RfY2VydGlmaWNhdGVzL2luZGV4LmFzcD5gXy4KLQotSW4gZ2VuZXJhbCwgaWYgeW91IGFyZSB1c2luZyBTU0wzIG9yIFRMUzEsIHlvdSBkb24ndCBuZWVkIHRvIHB1dCB0aGUgZnVsbCBjaGFpbgotaW4geW91ciAiQ0EgY2VydHMiIGZpbGU7IHlvdSBvbmx5IG5lZWQgdGhlIHJvb3QgY2VydGlmaWNhdGVzLCBhbmQgdGhlIHJlbW90ZQotcGVlciBpcyBzdXBwb3NlZCB0byBmdXJuaXNoIHRoZSBvdGhlciBjZXJ0aWZpY2F0ZXMgbmVjZXNzYXJ5IHRvIGNoYWluIGZyb20gaXRzCi1jZXJ0aWZpY2F0ZSB0byBhIHJvb3QgY2VydGlmaWNhdGUuICBTZWUgOnJmYzpgNDE1OGAgZm9yIG1vcmUgZGlzY3Vzc2lvbiBvZiB0aGUKLXdheSBpbiB3aGljaCBjZXJ0aWZpY2F0aW9uIGNoYWlucyBjYW4gYmUgYnVpbHQuCitjaGFpbiBpdCBmaW5kcyBpbiB0aGUgZmlsZSB3aGljaCBtYXRjaGVzLiAgVGhlIHBsYXRmb3JtJ3MgY2VydGlmaWNhdGVzIGZpbGUgY2FuCitiZSB1c2VkIGJ5IGNhbGxpbmcgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYCwgdGhpcyBpcyBkb25lCithdXRvbWF0aWNhbGx5IHdpdGggOmZ1bmM6YC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0YC4KIAogQ29tYmluZWQga2V5IGFuZCBjZXJ0aWZpY2F0ZQogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpAQCAtMTE4Niw3ICsxNTQ0LDcgQEAKIAogICAgaW1wb3J0IHNvY2tldCwgc3NsCiAKLSAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlPSJteWNlcnRmaWxlIiwga2V5ZmlsZT0ibXlrZXlmaWxlIikKIAogICAgYmluZHNvY2tldCA9IHNvY2tldC5zb2NrZXQoKQpAQCAtMTIzMCw4ICsxNTg4LDE5IEBACiBOb3RlcyBvbiBub24tYmxvY2tpbmcgc29ja2V0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hlbiB3b3JraW5nIHdpdGggbm9uLWJsb2NraW5nIHNvY2tldHMsIHRoZXJlIGFyZSBzZXZlcmFsIHRoaW5ncyB5b3UgbmVlZAotdG8gYmUgYXdhcmUgb2Y6CitTU0wgc29ja2V0cyBiZWhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gcmVndWxhciBzb2NrZXRzIGluCitub24tYmxvY2tpbmcgbW9kZS4gV2hlbiB3b3JraW5nIHdpdGggbm9uLWJsb2NraW5nIHNvY2tldHMsIHRoZXJlIGFyZQordGh1cyBzZXZlcmFsIHRoaW5ncyB5b3UgbmVlZCB0byBiZSBhd2FyZSBvZjoKKworLSBNb3N0IDpjbGFzczpgU1NMU29ja2V0YCBtZXRob2RzIHdpbGwgcmFpc2UgZWl0aGVyCisgIDpleGM6YFNTTFdhbnRXcml0ZUVycm9yYCBvciA6ZXhjOmBTU0xXYW50UmVhZEVycm9yYCBpbnN0ZWFkIG9mCisgIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaWYgYW4gSS9PIG9wZXJhdGlvbiB3b3VsZAorICBibG9jay4gOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgYSByZWFkIG9wZXJhdGlvbiBvbgorICB0aGUgdW5kZXJseWluZyBzb2NrZXQgaXMgbmVjZXNzYXJ5LCBhbmQgOmV4YzpgU1NMV2FudFdyaXRlRXJyb3JgIGZvcgorICBhIHdyaXRlIG9wZXJhdGlvbiBvbiB0aGUgdW5kZXJseWluZyBzb2NrZXQuIE5vdGUgdGhhdCBhdHRlbXB0cyB0bworICAqd3JpdGUqIHRvIGFuIFNTTCBzb2NrZXQgbWF5IHJlcXVpcmUgKnJlYWRpbmcqIGZyb20gdGhlIHVuZGVybHlpbmcKKyAgc29ja2V0IGZpcnN0LCBhbmQgYXR0ZW1wdHMgdG8gKnJlYWQqIGZyb20gdGhlIFNTTCBzb2NrZXQgbWF5IHJlcXVpcmUKKyAgYSBwcmlvciAqd3JpdGUqIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KIAogLSBDYWxsaW5nIDpmdW5jOmB+c2VsZWN0LnNlbGVjdGAgdGVsbHMgeW91IHRoYXQgdGhlIE9TLWxldmVsIHNvY2tldCBjYW4gYmUKICAgcmVhZCBmcm9tIChvciB3cml0dGVuIHRvKSwgYnV0IGl0IGRvZXMgbm90IGltcGx5IHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudApAQCAtMTI0MCw4ICsxNjA5LDE0IEBACiAgIGFuZCA6bWV0aDpgU1NMU29ja2V0LnNlbmRgIGZhaWx1cmVzLCBhbmQgcmV0cnkgYWZ0ZXIgYW5vdGhlciBjYWxsIHRvCiAgIDpmdW5jOmB+c2VsZWN0LnNlbGVjdGAuCiAKKy0gQ29udmVyc2VseSwgc2luY2UgdGhlIFNTTCBsYXllciBoYXMgaXRzIG93biBmcmFtaW5nLCBhIFNTTCBzb2NrZXQgbWF5CisgIHN0aWxsIGhhdmUgZGF0YSBhdmFpbGFibGUgZm9yIHJlYWRpbmcgd2l0aG91dCA6ZnVuYzpgfnNlbGVjdC5zZWxlY3RgCisgIGJlaW5nIGF3YXJlIG9mIGl0LiAgVGhlcmVmb3JlLCB5b3Ugc2hvdWxkIGZpcnN0IGNhbGwKKyAgOm1ldGg6YFNTTFNvY2tldC5yZWN2YCB0byBkcmFpbiBhbnkgcG90ZW50aWFsbHkgYXZhaWxhYmxlIGRhdGEsIGFuZCB0aGVuCisgIG9ubHkgYmxvY2sgb24gYSA6ZnVuYzpgfnNlbGVjdC5zZWxlY3RgIGNhbGwgaWYgc3RpbGwgbmVjZXNzYXJ5LgorCiAgIChvZiBjb3Vyc2UsIHNpbWlsYXIgcHJvdmlzaW9ucyBhcHBseSB3aGVuIHVzaW5nIG90aGVyIHByaW1pdGl2ZXMgc3VjaCBhcwotICA6ZnVuYzpgfnNlbGVjdC5wb2xsYCkKKyAgOmZ1bmM6YH5zZWxlY3QucG9sbGAsIG9yIHRob3NlIGluIHRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSkKIAogLSBUaGUgU1NMIGhhbmRzaGFrZSBpdHNlbGYgd2lsbCBiZSBub24tYmxvY2tpbmc6IHRoZQogICA6bWV0aDpgU1NMU29ja2V0LmRvX2hhbmRzaGFrZWAgbWV0aG9kIGhhcyB0byBiZSByZXRyaWVkIHVudGlsIGl0IHJldHVybnMKQEAgLTEyNjMsOSArMTYzOCw0MCBAQAogU2VjdXJpdHkgY29uc2lkZXJhdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVZlcmlmeWluZyBjZXJ0aWZpY2F0ZXMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK0Jlc3QgZGVmYXVsdHMKK15eXl5eXl5eXl5eXl4KIAorRm9yICoqY2xpZW50IHVzZSoqLCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIHlvdXIKK3NlY3VyaXR5IHBvbGljeSwgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUKKzpmdW5jOmBjcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBmdW5jdGlvbiB0byBjcmVhdGUgeW91ciBTU0wgY29udGV4dC4KK0l0IHdpbGwgbG9hZCB0aGUgc3lzdGVtJ3MgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMsIGVuYWJsZSBjZXJ0aWZpY2F0ZQordmFsaWRhdGlvbiBhbmQgaG9zdG5hbWUgY2hlY2tpbmcsIGFuZCB0cnkgdG8gY2hvb3NlIHJlYXNvbmFibHkgc2VjdXJlCitwcm90b2NvbCBhbmQgY2lwaGVyIHNldHRpbmdzLgorCitGb3IgZXhhbXBsZSwgaGVyZSBpcyBob3cgeW91IHdvdWxkIHVzZSB0aGUgOmNsYXNzOmBzbXRwbGliLlNNVFBgIGNsYXNzIHRvCitjcmVhdGUgYSB0cnVzdGVkLCBzZWN1cmUgY29ubmVjdGlvbiB0byBhIFNNVFAgc2VydmVyOjoKKworICAgPj4+IGltcG9ydCBzc2wsIHNtdHBsaWIKKyAgID4+PiBzbXRwID0gc210cGxpYi5TTVRQKCJtYWlsLnB5dGhvbi5vcmciLCBwb3J0PTU4NykKKyAgID4+PiBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKQorICAgPj4+IHNtdHAuc3RhcnR0bHMoY29udGV4dD1jb250ZXh0KQorICAgKDIyMCwgYicyLjAuMCBSZWFkeSB0byBzdGFydCBUTFMnKQorCitJZiBhIGNsaWVudCBjZXJ0aWZpY2F0ZSBpcyBuZWVkZWQgZm9yIHRoZSBjb25uZWN0aW9uLCBpdCBjYW4gYmUgYWRkZWQgd2l0aAorOm1ldGg6YFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluYC4KKworQnkgY29udHJhc3QsIGlmIHlvdSBjcmVhdGUgdGhlIFNTTCBjb250ZXh0IGJ5IGNhbGxpbmcgdGhlIDpjbGFzczpgU1NMQ29udGV4dGAKK2NvbnN0cnVjdG9yIHlvdXJzZWxmLCBpdCB3aWxsIG5vdCBoYXZlIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gbm9yIGhvc3RuYW1lCitjaGVja2luZyBlbmFibGVkIGJ5IGRlZmF1bHQuICBJZiB5b3UgZG8gc28sIHBsZWFzZSByZWFkIHRoZSBwYXJhZ3JhcGhzIGJlbG93Cit0byBhY2hpZXZlIGEgZ29vZCBzZWN1cml0eSBsZXZlbC4KKworTWFudWFsIHNldHRpbmdzCiteXl5eXl5eXl5eXl5eXl4KKworVmVyaWZ5aW5nIGNlcnRpZmljYXRlcworJycnJycnJycnJycnJycnJycnJycnJworCitXaGVuIGNhbGxpbmcgdGhlIHRoZSA6Y2xhc3M6YFNTTENvbnRleHRgIGNvbnN0cnVjdG9yIGRpcmVjdGx5LAogOmNvbnN0OmBDRVJUX05PTkVgIGlzIHRoZSBkZWZhdWx0LiAgU2luY2UgaXQgZG9lcyBub3QgYXV0aGVudGljYXRlIHRoZSBvdGhlcgogcGVlciwgaXQgY2FuIGJlIGluc2VjdXJlLCBlc3BlY2lhbGx5IGluIGNsaWVudCBtb2RlIHdoZXJlIG1vc3Qgb2YgdGltZSB5b3UKIHdvdWxkIGxpa2UgdG8gZW5zdXJlIHRoZSBhdXRoZW50aWNpdHkgb2YgdGhlIHNlcnZlciB5b3UncmUgdGFsa2luZyB0by4KQEAgLTEyNzQsNyArMTY4MCw5IEBACiBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSwgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcKIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLCBtYXRjaGVzIHRoZSBkZXNpcmVkIHNlcnZpY2UuICBGb3IgbWFueQogcHJvdG9jb2xzIGFuZCBhcHBsaWNhdGlvbnMsIHRoZSBzZXJ2aWNlIGNhbiBiZSBpZGVudGlmaWVkIGJ5IHRoZSBob3N0bmFtZTsKLWluIHRoaXMgY2FzZSwgdGhlIDpmdW5jOmBtYXRjaF9ob3N0bmFtZWAgZnVuY3Rpb24gY2FuIGJlIHVzZWQuCitpbiB0aGlzIGNhc2UsIHRoZSA6ZnVuYzpgbWF0Y2hfaG9zdG5hbWVgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLiAgVGhpcyBjb21tb24KK2NoZWNrIGlzIGF1dG9tYXRpY2FsbHkgcGVyZm9ybWVkIHdoZW4gOmF0dHI6YFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGlzCitlbmFibGVkLgogCiBJbiBzZXJ2ZXIgbW9kZSwgaWYgeW91IHdhbnQgdG8gYXV0aGVudGljYXRlIHlvdXIgY2xpZW50cyB1c2luZyB0aGUgU1NMIGxheWVyCiAocmF0aGVyIHRoYW4gdXNpbmcgYSBoaWdoZXItbGV2ZWwgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtKSwgeW91J2xsIGFsc28gaGF2ZQpAQCAtMTI4Nyw3ICsxNjk1LDcgQEAKICAgICAgIGJ5IGRlZmF1bHQpLgogCiBQcm90b2NvbCB2ZXJzaW9ucwotXl5eXl5eXl5eXl5eXl5eXl4KKycnJycnJycnJycnJycnJycnCiAKIFNTTCB2ZXJzaW9uIDIgaXMgY29uc2lkZXJlZCBpbnNlY3VyZSBhbmQgaXMgdGhlcmVmb3JlIGRhbmdlcm91cyB0byB1c2UuICBJZgogeW91IHdhbnQgbWF4aW11bSBjb21wYXRpYmlsaXR5IGJldHdlZW4gY2xpZW50cyBhbmQgc2VydmVycywgaXQgaXMgcmVjb21tZW5kZWQKQEAgLTEyOTcsMjcgKzE3MDUsMjAgQEAKICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgogCi1UaGUgU1NMIGNvbnRleHQgY3JlYXRlZCBhYm92ZSB3aWxsIGFsbG93IFNTTHYzIGFuZCBUTFN2MSBjb25uZWN0aW9ucywgYnV0Ci1ub3QgU1NMdjIuCitUaGUgU1NMIGNvbnRleHQgY3JlYXRlZCBhYm92ZSB3aWxsIGFsbG93IFNTTHYzIGFuZCBUTFN2MSAoYW5kIGxhdGVyLCBpZgorc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtKSBjb25uZWN0aW9ucywgYnV0IG5vdCBTU0x2Mi4KIAogQ2lwaGVyIHNlbGVjdGlvbgotXl5eXl5eXl5eXl5eXl5eXgorJycnJycnJycnJycnJycnJwogCiBJZiB5b3UgaGF2ZSBhZHZhbmNlZCBzZWN1cml0eSByZXF1aXJlbWVudHMsIGZpbmUtdHVuaW5nIG9mIHRoZSBjaXBoZXJzCiBlbmFibGVkIHdoZW4gbmVnb3RpYXRpbmcgYSBTU0wgc2Vzc2lvbiBpcyBwb3NzaWJsZSB0aHJvdWdoIHRoZQogOm1ldGg6YFNTTENvbnRleHQuc2V0X2NpcGhlcnNgIG1ldGhvZC4gIFN0YXJ0aW5nIGZyb20gUHl0aG9uIDMuMi4zLCB0aGUKIHNzbCBtb2R1bGUgZGlzYWJsZXMgY2VydGFpbiB3ZWFrIGNpcGhlcnMgYnkgZGVmYXVsdCwgYnV0IHlvdSBtYXkgd2FudAotdG8gZnVydGhlciByZXN0cmljdCB0aGUgY2lwaGVyIGNob2ljZS4gIEZvciBleGFtcGxlOjoKLQotICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKLSAgIGNvbnRleHQuc2V0X2NpcGhlcnMoJ0hJR0g6IWFOVUxMOiFlTlVMTCcpCi0KLVRoZSBgYCFhTlVMTDohZU5VTExgYCBwYXJ0IG9mIHRoZSBjaXBoZXIgc3BlYyBpcyBuZWNlc3NhcnkgdG8gZGlzYWJsZSBjaXBoZXJzCi13aGljaCBkb24ndCBwcm92aWRlIGJvdGggZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24uICBCZSBzdXJlIHRvIHJlYWQKLU9wZW5TU0wncyBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBgY2lwaGVyIGxpc3QKLWZvcm1hdCA8aHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sI0NJUEhFUl9MSVNUX0ZPUk1BVD5gXy4KLUlmIHlvdSB3YW50IHRvIGNoZWNrIHdoaWNoIGNpcGhlcnMgYXJlIGVuYWJsZWQgYnkgYSBnaXZlbiBjaXBoZXIgbGlzdCwKLXVzZSB0aGUgYGBvcGVuc3NsIGNpcGhlcnNgYCBjb21tYW5kIG9uIHlvdXIgc3lzdGVtLgordG8gZnVydGhlciByZXN0cmljdCB0aGUgY2lwaGVyIGNob2ljZS4gQmUgc3VyZSB0byByZWFkIE9wZW5TU0wncyBkb2N1bWVudGF0aW9uCithYm91dCB0aGUgYGNpcGhlciBsaXN0IGZvcm1hdCA8aHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sI0NJUEhFUl9MSVNUX0ZPUk1BVD5gXy4KK0lmIHlvdSB3YW50IHRvIGNoZWNrIHdoaWNoIGNpcGhlcnMgYXJlIGVuYWJsZWQgYnkgYSBnaXZlbiBjaXBoZXIgbGlzdCwgdXNlIHRoZQorYGBvcGVuc3NsIGNpcGhlcnNgYCBjb21tYW5kIG9uIHlvdXIgc3lzdGVtLgogCiBNdWx0aS1wcm9jZXNzaW5nCiBeXl5eXl5eXl5eXl5eXl5eCkBAIC0xMzUwLDMgKzE3NTEsMTIgQEAKIAogICAgYFJGQyA0MzY2OiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgRXh0ZW5zaW9ucyA8aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDM2Nj5gXwogICAgICAgIEJsYWtlLVdpbHNvbiBldC4gYWwuCisKKyAgIGBSRkMgNTI0NjogVGhlIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBQcm90b2NvbCBWZXJzaW9uIDEuMiA8aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNTI0Nj5gXworICAgICAgIFQuIERpZXJrcyBldC4gYWwuCisKKyAgIGBSRkMgNjA2NjogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIEV4dGVuc2lvbnMgPGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzYwNjY+YF8KKyAgICAgICBELiBFYXN0bGFrZQorCisgICBgSUFOQSBUTFM6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBQYXJhbWV0ZXJzIDxodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1wYXJhbWV0ZXJzL3Rscy1wYXJhbWV0ZXJzLnhtbD5gXworICAgICAgIElBTkEKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0YXQucnN0IGIvRG9jL2xpYnJhcnkvc3RhdC5yc3QKaW5kZXggNmMyMGFhMi4uMjQ3NjlmNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RhdC5yc3QKQEAgLTYsNyArNiw4IEBACiAgICAgICAgICAgICAgIG9zLmxzdGF0KCkgYW5kIG9zLmZzdGF0KCkuCiAuLiBzZWN0aW9uYXV0aG9yOjogU2tpcCBNb250YW5hcm8gPHNraXBAYXV0b21hdHJpeC5jb20+CiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N0YXQucHlgCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YE1vZHVsZXMvX3N0YXQuY2AKKyAgICAgICAgICAgICAgICAgOnNvdXJjZTpgTGliL3N0YXQucHlgCiAKIC0tLS0tLS0tLS0tLS0tCiAKQEAgLTE1LDYgKzE2LDkgQEAKIGV4aXN0KS4gIEZvciBjb21wbGV0ZSBkZXRhaWxzIGFib3V0IHRoZSA6YzpmdW5jOmBzdGF0YCwgOmM6ZnVuYzpgZnN0YXRgIGFuZAogOmM6ZnVuYzpgbHN0YXRgIGNhbGxzLCBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIHN5c3RlbS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBzdGF0IG1vZHVsZSBpcyBiYWNrZWQgYnkgYSBDIGltcGxlbWVudGF0aW9uLgorCiBUaGUgOm1vZDpgc3RhdGAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gdGVzdCBmb3Igc3BlY2lmaWMgZmlsZQogdHlwZXM6CiAKQEAgLTUzLDYgKzU3LDI0IEBACiAKICAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGEgc29ja2V0LgogCisuLiBmdW5jdGlvbjo6IFNfSVNET09SKG1vZGUpCisKKyAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGEgZG9vci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogU19JU1BPUlQobW9kZSkKKworICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYW4gZXZlbnQgcG9ydC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogU19JU1dIVChtb2RlKQorCisgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhIHdoaXRlb3V0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVHdvIGFkZGl0aW9uYWwgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGZvciBtb3JlIGdlbmVyYWwgbWFuaXB1bGF0aW9uIG9mIHRoZSBmaWxlJ3MKIG1vZGU6CiAKQEAgLTExMyw2ICsxMzUsMTAgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgOmRhdGE6YFNfSUZET09SYCwgOmRhdGE6YFNfSUZQT1JUYCBhbmQKKyAgICAgIDpkYXRhOmBTX0lGV0hUYC4KKwogCiBBbGwgdGhlIHZhcmlhYmxlcyBiZWxvdyBhcmUgc2ltcGx5IHN5bWJvbGljIGluZGV4ZXMgaW50byB0aGUgMTAtdHVwbGUgcmV0dXJuZWQKIGJ5IDpmdW5jOmBvcy5zdGF0YCwgOmZ1bmM6YG9zLmZzdGF0YCBvciA6ZnVuYzpgb3MubHN0YXRgLgpAQCAtMjEwLDYgKzIzNiwyOSBAQAogCiAgICBGSUZPLgogCisuLiBkYXRhOjogU19JRkRPT1IKKworICAgRG9vci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBTX0lGUE9SVAorCisgICBFdmVudCBwb3J0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFNfSUZXSFQKKworICAgV2hpdGVvdXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBub3RlOjoKKworICAgOmRhdGE6YFNfSUZET09SYCwgOmRhdGE6YFNfSUZQT1JUYCBvciA6ZGF0YTpgU19JRldIVGAgYXJlIGRlZmluZWQgYXMKKyAgIDAgd2hlbiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciB0aGUgZmlsZSB0eXBlcy4KKwogVGhlIGZvbGxvd2luZyBmbGFncyBjYW4gYWxzbyBiZSB1c2VkIGluIHRoZSAqbW9kZSogYXJndW1lbnQgb2YgOmZ1bmM6YG9zLmNobW9kYDoKIAogLi4gZGF0YTo6IFNfSVNVSUQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0YXRpc3RpY3MucnN0IGIvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3NzgzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3N0YXRpc3RpY3MucnN0CkBAIC0wLDAgKzEsNDE4IEBACis6bW9kOmBzdGF0aXN0aWNzYCAtLS0gTWF0aGVtYXRpY2FsIHN0YXRpc3RpY3MgZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHN0YXRpc3RpY3MKKyAgIDpzeW5vcHNpczogbWF0aGVtYXRpY2FsIHN0YXRpc3RpY3MgZnVuY3Rpb25zCisuLiBtb2R1bGVhdXRob3I6OiBTdGV2ZW4gRCdBcHJhbm8gPHN0ZXZlK3B5dGhvbkBwZWFyd29vZC5pbmZvPgorLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+CisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiB0ZXN0c2V0dXA6OiAqCisKKyAgIGZyb20gc3RhdGlzdGljcyBpbXBvcnQgKgorICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JworCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zdGF0aXN0aWNzLnB5YAorCistLS0tLS0tLS0tLS0tLQorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGNhbGN1bGF0aW5nIG1hdGhlbWF0aWNhbCBzdGF0aXN0aWNzIG9mCitudW1lcmljICg6Y2xhc3M6YFJlYWxgLXZhbHVlZCkgZGF0YS4KKworLi4gbm90ZTo6CisKKyAgIFVubGVzcyBleHBsaWNpdGx5IG5vdGVkIG90aGVyd2lzZSwgdGhlc2UgZnVuY3Rpb25zIHN1cHBvcnQgOmNsYXNzOmBpbnRgLAorICAgOmNsYXNzOmBmbG9hdGAsIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYCBhbmQgOmNsYXNzOmBmcmFjdGlvbnMuRnJhY3Rpb25gLgorICAgQmVoYXZpb3VyIHdpdGggb3RoZXIgdHlwZXMgKHdoZXRoZXIgaW4gdGhlIG51bWVyaWMgdG93ZXIgb3Igbm90KSBpcworICAgY3VycmVudGx5IHVuc3VwcG9ydGVkLiAgTWl4ZWQgdHlwZXMgYXJlIGFsc28gdW5kZWZpbmVkIGFuZAorICAgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LiAgSWYgeW91ciBpbnB1dCBkYXRhIGNvbnNpc3RzIG9mIG1peGVkIHR5cGVzLAorICAgeW91IG1heSBiZSBhYmxlIHRvIHVzZSA6ZnVuYzpgbWFwYCB0byBlbnN1cmUgYSBjb25zaXN0ZW50IHJlc3VsdCwgZS5nLgorICAgYGBtYXAoZmxvYXQsIGlucHV0X2RhdGEpYGAuCisKK0F2ZXJhZ2VzIGFuZCBtZWFzdXJlcyBvZiBjZW50cmFsIGxvY2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBmdW5jdGlvbnMgY2FsY3VsYXRlIGFuIGF2ZXJhZ2Ugb3IgdHlwaWNhbCB2YWx1ZSBmcm9tIGEgcG9wdWxhdGlvbgorb3Igc2FtcGxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6ZnVuYzpgbWVhbmAgICAgICAgICAgICAgQXJpdGhtZXRpYyBtZWFuICgiYXZlcmFnZSIpIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuYCAgICAgICAgICAgTWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2xvd2AgICAgICAgTG93IG1lZGlhbiBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbl9oaWdoYCAgICAgIEhpZ2ggbWVkaWFuIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2dyb3VwZWRgICAgTWVkaWFuLCBvciA1MHRoIHBlcmNlbnRpbGUsIG9mIGdyb3VwZWQgZGF0YS4KKzpmdW5jOmBtb2RlYCAgICAgICAgICAgICBNb2RlIChtb3N0IGNvbW1vbiB2YWx1ZSkgb2YgZGlzY3JldGUgZGF0YS4KKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWVhc3VyZXMgb2Ygc3ByZWFkCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgZnVuY3Rpb25zIGNhbGN1bGF0ZSBhIG1lYXN1cmUgb2YgaG93IG11Y2ggdGhlIHBvcHVsYXRpb24gb3Igc2FtcGxlCit0ZW5kcyB0byBkZXZpYXRlIGZyb20gdGhlIHR5cGljYWwgb3IgYXZlcmFnZSB2YWx1ZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpmdW5jOmBwc3RkZXZgICAgICAgICAgICBQb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorOmZ1bmM6YHB2YXJpYW5jZWAgICAgICAgIFBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgZGF0YS4KKzpmdW5jOmBzdGRldmAgICAgICAgICAgICBTYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis6ZnVuYzpgdmFyaWFuY2VgICAgICAgICAgU2FtcGxlIHZhcmlhbmNlIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworRnVuY3Rpb24gZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOiBUaGUgZnVuY3Rpb25zIGRvIG5vdCByZXF1aXJlIHRoZSBkYXRhIGdpdmVuIHRvIHRoZW0gdG8gYmUgc29ydGVkLgorSG93ZXZlciwgZm9yIHJlYWRpbmcgY29udmVuaWVuY2UsIG1vc3Qgb2YgdGhlIGV4YW1wbGVzIHNob3cgc29ydGVkIHNlcXVlbmNlcy4KKworLi4gZnVuY3Rpb246OiBtZWFuKGRhdGEpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIGFyaXRobWV0aWMgbWVhbiBvZiAqZGF0YSosIGEgc2VxdWVuY2Ugb3IgaXRlcmF0b3Igb2YKKyAgIHJlYWwtdmFsdWVkIG51bWJlcnMuCisKKyAgIFRoZSBhcml0aG1ldGljIG1lYW4gaXMgdGhlIHN1bSBvZiB0aGUgZGF0YSBkaXZpZGVkIGJ5IHRoZSBudW1iZXIgb2YgZGF0YQorICAgcG9pbnRzLiAgSXQgaXMgY29tbW9ubHkgY2FsbGVkICJ0aGUgYXZlcmFnZSIsIGFsdGhvdWdoIGl0IGlzIG9ubHkgb25lIG9mIG1hbnkKKyAgIGRpZmZlcmVudCBtYXRoZW1hdGljYWwgYXZlcmFnZXMuICBJdCBpcyBhIG1lYXN1cmUgb2YgdGhlIGNlbnRyYWwgbG9jYXRpb24gb2YKKyAgIHRoZSBkYXRhLgorCisgICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgd2lsbCBiZSByYWlzZWQuCisKKyAgIFNvbWUgZXhhbXBsZXMgb2YgdXNlOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lYW4oWzEsIDIsIDMsIDQsIDRdKQorICAgICAgMi44CisgICAgICA+Pj4gbWVhbihbLTEuMCwgMi41LCAzLjI1LCA1Ljc1XSkKKyAgICAgIDIuNjI1CisKKyAgICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgICAgPj4+IG1lYW4oW0YoMywgNyksIEYoMSwgMjEpLCBGKDUsIDMpLCBGKDEsIDMpXSkKKyAgICAgIEZyYWN0aW9uKDEzLCAyMSkKKworICAgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgICA+Pj4gbWVhbihbRCgiMC41IiksIEQoIjAuNzUiKSwgRCgiMC42MjUiKSwgRCgiMC4zNzUiKV0pCisgICAgICBEZWNpbWFsKCcwLjU2MjUnKQorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIG1lYW4gaXMgc3Ryb25nbHkgYWZmZWN0ZWQgYnkgb3V0bGllcnMgYW5kIGlzIG5vdCBhIHJvYnVzdCBlc3RpbWF0b3IKKyAgICAgIGZvciBjZW50cmFsIGxvY2F0aW9uOiB0aGUgbWVhbiBpcyBub3QgbmVjZXNzYXJpbHkgYSB0eXBpY2FsIGV4YW1wbGUgb2YgdGhlCisgICAgICBkYXRhIHBvaW50cy4gIEZvciBtb3JlIHJvYnVzdCwgYWx0aG91Z2ggbGVzcyBlZmZpY2llbnQsIG1lYXN1cmVzIG9mCisgICAgICBjZW50cmFsIGxvY2F0aW9uLCBzZWUgOmZ1bmM6YG1lZGlhbmAgYW5kIDpmdW5jOmBtb2RlYC4gIChJbiB0aGlzIGNhc2UsCisgICAgICAiZWZmaWNpZW50IiByZWZlcnMgdG8gc3RhdGlzdGljYWwgZWZmaWNpZW5jeSByYXRoZXIgdGhhbiBjb21wdXRhdGlvbmFsCisgICAgICBlZmZpY2llbmN5LikKKworICAgICAgVGhlIHNhbXBsZSBtZWFuIGdpdmVzIGFuIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSB0cnVlIHBvcHVsYXRpb24gbWVhbiwKKyAgICAgIHdoaWNoIG1lYW5zIHRoYXQsIHRha2VuIG9uIGF2ZXJhZ2Ugb3ZlciBhbGwgdGhlIHBvc3NpYmxlIHNhbXBsZXMsCisgICAgICBgYG1lYW4oc2FtcGxlKWBgIGNvbnZlcmdlcyBvbiB0aGUgdHJ1ZSBtZWFuIG9mIHRoZSBlbnRpcmUgcG9wdWxhdGlvbi4gIElmCisgICAgICAqZGF0YSogcmVwcmVzZW50cyB0aGUgZW50aXJlIHBvcHVsYXRpb24gcmF0aGVyIHRoYW4gYSBzYW1wbGUsIHRoZW4KKyAgICAgIGBgbWVhbihkYXRhKWBgIGlzIGVxdWl2YWxlbnQgdG8gY2FsY3VsYXRpbmcgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuIM68LgorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuKGRhdGEpCisKKyAgIFJldHVybiB0aGUgbWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIG51bWVyaWMgZGF0YSwgdXNpbmcgdGhlIGNvbW1vbiAibWVhbiBvZgorICAgbWlkZGxlIHR3byIgbWV0aG9kLiAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlzIHJhaXNlZC4KKworICAgVGhlIG1lZGlhbiBpcyBhIHJvYnVzdCBtZWFzdXJlIG9mIGNlbnRyYWwgbG9jYXRpb24sIGFuZCBpcyBsZXNzIGFmZmVjdGVkIGJ5CisgICB0aGUgcHJlc2VuY2Ugb2Ygb3V0bGllcnMgaW4geW91ciBkYXRhLiAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzCisgICBvZGQsIHRoZSBtaWRkbGUgZGF0YSBwb2ludCBpcyByZXR1cm5lZDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW4oWzEsIDMsIDVdKQorICAgICAgMworCisgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgZXZlbiwgdGhlIG1lZGlhbiBpcyBpbnRlcnBvbGF0ZWQgYnkgdGFraW5nCisgICB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1LCA3XSkKKyAgICAgIDQuMAorCisgICBUaGlzIGlzIHN1aXRlZCBmb3Igd2hlbiB5b3VyIGRhdGEgaXMgZGlzY3JldGUsIGFuZCB5b3UgZG9uJ3QgbWluZCB0aGF0IHRoZQorICAgbWVkaWFuIG1heSBub3QgYmUgYW4gYWN0dWFsIGRhdGEgcG9pbnQuCisKKyAgIC4uIHNlZWFsc286OiA6ZnVuYzpgbWVkaWFuX2xvd2AsIDpmdW5jOmBtZWRpYW5faGlnaGAsIDpmdW5jOmBtZWRpYW5fZ3JvdXBlZGAKKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbl9sb3coZGF0YSkKKworICAgUmV0dXJuIHRoZSBsb3cgbWVkaWFuIG9mIG51bWVyaWMgZGF0YS4gIElmICpkYXRhKiBpcyBlbXB0eSwKKyAgIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgaXMgcmFpc2VkLgorCisgICBUaGUgbG93IG1lZGlhbiBpcyBhbHdheXMgYSBtZW1iZXIgb2YgdGhlIGRhdGEgc2V0LiAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEKKyAgIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBzbWFsbGVyIG9mCisgICB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNV0pCisgICAgICAzCisgICAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNSwgN10pCisgICAgICAzCisKKyAgIFVzZSB0aGUgbG93IG1lZGlhbiB3aGVuIHlvdXIgZGF0YSBhcmUgZGlzY3JldGUgYW5kIHlvdSBwcmVmZXIgdGhlIG1lZGlhbiB0bworICAgYmUgYW4gYWN0dWFsIGRhdGEgcG9pbnQgcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGVkLgorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuX2hpZ2goZGF0YSkKKworICAgUmV0dXJuIHRoZSBoaWdoIG1lZGlhbiBvZiBkYXRhLiAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgCisgICBpcyByYWlzZWQuCisKKyAgIFRoZSBoaWdoIG1lZGlhbiBpcyBhbHdheXMgYSBtZW1iZXIgb2YgdGhlIGRhdGEgc2V0LiAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEKKyAgIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBsYXJnZXIgb2YKKyAgIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNV0pCisgICAgICAzCisgICAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDUsIDddKQorICAgICAgNQorCisgICBVc2UgdGhlIGhpZ2ggbWVkaWFuIHdoZW4geW91ciBkYXRhIGFyZSBkaXNjcmV0ZSBhbmQgeW91IHByZWZlciB0aGUgbWVkaWFuIHRvCisgICBiZSBhbiBhY3R1YWwgZGF0YSBwb2ludCByYXRoZXIgdGhhbiBpbnRlcnBvbGF0ZWQuCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW5fZ3JvdXBlZChkYXRhLCBpbnRlcnZhbD0xKQorCisgICBSZXR1cm4gdGhlIG1lZGlhbiBvZiBncm91cGVkIGNvbnRpbnVvdXMgZGF0YSwgY2FsY3VsYXRlZCBhcyB0aGUgNTB0aAorICAgcGVyY2VudGlsZSwgdXNpbmcgaW50ZXJwb2xhdGlvbi4gIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYAorICAgaXMgcmFpc2VkLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFs1MiwgNTIsIDUzLCA1NF0pCisgICAgICA1Mi41CisKKyAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIGRhdGEgYXJlIHJvdW5kZWQsIHNvIHRoYXQgZWFjaCB2YWx1ZSByZXByZXNlbnRzCisgICB0aGUgbWlkcG9pbnQgb2YgZGF0YSBjbGFzc2VzLCBlLmcuIDEgaXMgdGhlIG1pZHBvaW50IG9mIHRoZSBjbGFzcyAwLjUtMS41LCAyCisgICBpcyB0aGUgbWlkcG9pbnQgb2YgMS41LTIuNSwgMyBpcyB0aGUgbWlkcG9pbnQgb2YgMi41LTMuNSwgZXRjLiAgV2l0aCB0aGUgZGF0YQorICAgZ2l2ZW4sIHRoZSBtaWRkbGUgdmFsdWUgZmFsbHMgc29tZXdoZXJlIGluIHRoZSBjbGFzcyAzLjUtNC41LCBhbmQKKyAgIGludGVycG9sYXRpb24gaXMgdXNlZCB0byBlc3RpbWF0ZSBpdDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMiwgMiwgMywgNCwgNCwgNCwgNCwgNCwgNV0pCisgICAgICAzLjcKKworICAgT3B0aW9uYWwgYXJndW1lbnQgKmludGVydmFsKiByZXByZXNlbnRzIHRoZSBjbGFzcyBpbnRlcnZhbCwgYW5kIGRlZmF1bHRzCisgICB0byAxLiAgQ2hhbmdpbmcgdGhlIGNsYXNzIGludGVydmFsIG5hdHVyYWxseSB3aWxsIGNoYW5nZSB0aGUgaW50ZXJwb2xhdGlvbjoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTEpCisgICAgICAzLjI1CisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0yKQorICAgICAgMy41CisKKyAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgd2hldGhlciB0aGUgZGF0YSBwb2ludHMgYXJlIGF0IGxlYXN0CisgICAqaW50ZXJ2YWwqIGFwYXJ0LgorCisgICAuLiBpbXBsLWRldGFpbDo6CisKKyAgICAgIFVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgOmZ1bmM6YG1lZGlhbl9ncm91cGVkYCBtYXkgY29lcmNlIGRhdGEgcG9pbnRzIHRvCisgICAgICBmbG9hdHMuICBUaGlzIGJlaGF2aW91ciBpcyBsaWtlbHkgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICAqICJTdGF0aXN0aWNzIGZvciB0aGUgQmVoYXZpb3JhbCBTY2llbmNlcyIsIEZyZWRlcmljayBKIEdyYXZldHRlciBhbmQKKyAgICAgICAgTGFycnkgQiBXYWxsbmF1ICg4dGggRWRpdGlvbikuCisKKyAgICAgICogQ2FsY3VsYXRpbmcgdGhlIGBtZWRpYW4gPGh0dHA6Ly93d3cudWFsYmVydGEuY2Evfm9wc2Nhbi9tZWRpYW4uaHRtbD5gXy4KKworICAgICAgKiBUaGUgYFNTTUVESUFOCisgICAgICAgIDxodHRwczovL3Byb2plY3RzLmdub21lLm9yZy9nbnVtZXJpYy9kb2MvZ251bWVyaWMtZnVuY3Rpb24tU1NNRURJQU4uc2h0bWw+YF8KKyAgICAgICAgZnVuY3Rpb24gaW4gdGhlIEdub21lIEdudW1lcmljIHNwcmVhZHNoZWV0LCBpbmNsdWRpbmcgYHRoaXMgZGlzY3Vzc2lvbgorICAgICAgICA8aHR0cHM6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy9nbnVtZXJpYy1saXN0LzIwMTEtQXByaWwvbXNnMDAwMTguaHRtbD5gXy4KKworCisuLiBmdW5jdGlvbjo6IG1vZGUoZGF0YSkKKworICAgUmV0dXJuIHRoZSBtb3N0IGNvbW1vbiBkYXRhIHBvaW50IGZyb20gZGlzY3JldGUgb3Igbm9taW5hbCAqZGF0YSouICBUaGUgbW9kZQorICAgKHdoZW4gaXQgZXhpc3RzKSBpcyB0aGUgbW9zdCB0eXBpY2FsIHZhbHVlLCBhbmQgaXMgYSByb2J1c3QgbWVhc3VyZSBvZgorICAgY2VudHJhbCBsb2NhdGlvbi4KKworICAgSWYgKmRhdGEqIGlzIGVtcHR5LCBvciBpZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbW9zdCBjb21tb24gdmFsdWUsCisgICA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlzIHJhaXNlZC4KKworICAgYGBtb2RlYGAgYXNzdW1lcyBkaXNjcmV0ZSBkYXRhLCBhbmQgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZS4gVGhpcyBpcyB0aGUKKyAgIHN0YW5kYXJkIHRyZWF0bWVudCBvZiB0aGUgbW9kZSBhcyBjb21tb25seSB0YXVnaHQgaW4gc2Nob29sczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtb2RlKFsxLCAxLCAyLCAzLCAzLCAzLCAzLCA0XSkKKyAgICAgIDMKKworICAgVGhlIG1vZGUgaXMgdW5pcXVlIGluIHRoYXQgaXQgaXMgdGhlIG9ubHkgc3RhdGlzdGljIHdoaWNoIGFsc28gYXBwbGllcworICAgdG8gbm9taW5hbCAobm9uLW51bWVyaWMpIGRhdGE6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbW9kZShbInJlZCIsICJibHVlIiwgImJsdWUiLCAicmVkIiwgImdyZWVuIiwgInJlZCIsICJyZWQiXSkKKyAgICAgICdyZWQnCisKKworLi4gZnVuY3Rpb246OiBwc3RkZXYoZGF0YSwgbXU9Tm9uZSkKKworICAgUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiAodGhlIHNxdWFyZSByb290IG9mIHRoZSBwb3B1bGF0aW9uCisgICB2YXJpYW5jZSkuICBTZWUgOmZ1bmM6YHB2YXJpYW5jZWAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBwc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgICAgMC45ODY4OTMyNzM1MjcyNTEKKworCisuLiBmdW5jdGlvbjo6IHB2YXJpYW5jZShkYXRhLCBtdT1Ob25lKQorCisgICBSZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgKmRhdGEqLCBhIG5vbi1lbXB0eSBpdGVyYWJsZSBvZiByZWFsLXZhbHVlZAorICAgbnVtYmVycy4gIFZhcmlhbmNlLCBvciBzZWNvbmQgbW9tZW50IGFib3V0IHRoZSBtZWFuLCBpcyBhIG1lYXN1cmUgb2YgdGhlCisgICB2YXJpYWJpbGl0eSAoc3ByZWFkIG9yIGRpc3BlcnNpb24pIG9mIGRhdGEuICBBIGxhcmdlIHZhcmlhbmNlIGluZGljYXRlcyB0aGF0CisgICB0aGUgZGF0YSBpcyBzcHJlYWQgb3V0OyBhIHNtYWxsIHZhcmlhbmNlIGluZGljYXRlcyBpdCBpcyBjbHVzdGVyZWQgY2xvc2VseQorICAgYXJvdW5kIHRoZSBtZWFuLgorCisgICBJZiB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICptdSogaXMgZ2l2ZW4sIGl0IHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgKmRhdGEqLiAgSWYgaXQgaXMgbWlzc2luZyBvciBgYE5vbmVgYCAodGhlIGRlZmF1bHQpLCB0aGUgbWVhbiBpcworICAgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLiAgVG8KKyAgIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBmcm9tIGEgc2FtcGxlLCB0aGUgOmZ1bmM6YHZhcmlhbmNlYCBmdW5jdGlvbiBpcyB1c3VhbGx5CisgICBhIGJldHRlciBjaG9pY2UuCisKKyAgIFJhaXNlcyA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlmICpkYXRhKiBpcyBlbXB0eS4KKworICAgRXhhbXBsZXM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZGF0YSA9IFswLjAsIDAuMjUsIDAuMjUsIDEuMjUsIDEuNSwgMS43NSwgMi43NSwgMy4yNV0KKyAgICAgID4+PiBwdmFyaWFuY2UoZGF0YSkKKyAgICAgIDEuMjUKKworICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZQorICAgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICptdSogdG8gYXZvaWQgcmVjYWxjdWxhdGlvbjoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtdSA9IG1lYW4oZGF0YSkKKyAgICAgID4+PiBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgICAxLjI1CisKKyAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYXR0ZW1wdCB0byB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBwYXNzZWQgdGhlIGFjdHVhbCBtZWFuCisgICBhcyAqbXUqLiAgVXNpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgKm11KiBtYXkgbGVhZCB0byBpbnZhbGlkIG9yIGltcG9zc2libGUKKyAgIHJlc3VsdHMuCisKKyAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgICAgPj4+IHB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgICAgRGVjaW1hbCgnMjQuODE1JykKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gcHZhcmlhbmNlKFtGKDEsIDQpLCBGKDUsIDQpLCBGKDEsIDIpXSkKKyAgICAgIEZyYWN0aW9uKDEzLCA3MikKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFdoZW4gY2FsbGVkIHdpdGggdGhlIGVudGlyZSBwb3B1bGF0aW9uLCB0aGlzIGdpdmVzIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlCisgICAgICDPg8KyLiAgV2hlbiBjYWxsZWQgb24gYSBzYW1wbGUgaW5zdGVhZCwgdGhpcyBpcyB0aGUgYmlhc2VkIHNhbXBsZSB2YXJpYW5jZQorICAgICAgc8KyLCBhbHNvIGtub3duIGFzIHZhcmlhbmNlIHdpdGggTiBkZWdyZWVzIG9mIGZyZWVkb20uCisKKyAgICAgIElmIHlvdSBzb21laG93IGtub3cgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuIM68LCB5b3UgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uCisgICAgICB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIGEgc2FtcGxlLCBnaXZpbmcgdGhlIGtub3duIHBvcHVsYXRpb24gbWVhbiBhcworICAgICAgdGhlIHNlY29uZCBhcmd1bWVudC4gIFByb3ZpZGVkIHRoZSBkYXRhIHBvaW50cyBhcmUgcmVwcmVzZW50YXRpdmUKKyAgICAgIChlLmcuIGluZGVwZW5kZW50IGFuZCBpZGVudGljYWxseSBkaXN0cmlidXRlZCksIHRoZSByZXN1bHQgd2lsbCBiZSBhbgorICAgICAgdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKworLi4gZnVuY3Rpb246OiBzdGRldihkYXRhLCB4YmFyPU5vbmUpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiAodGhlIHNxdWFyZSByb290IG9mIHRoZSBzYW1wbGUKKyAgIHZhcmlhbmNlKS4gIFNlZSA6ZnVuYzpgdmFyaWFuY2VgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgICAgMS4wODEwODc0MTU1MjE5ODI3CisKKworLi4gZnVuY3Rpb246OiB2YXJpYW5jZShkYXRhLCB4YmFyPU5vbmUpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIHZhcmlhbmNlIG9mICpkYXRhKiwgYW4gaXRlcmFibGUgb2YgYXQgbGVhc3QgdHdvIHJlYWwtdmFsdWVkCisgICBudW1iZXJzLiAgVmFyaWFuY2UsIG9yIHNlY29uZCBtb21lbnQgYWJvdXQgdGhlIG1lYW4sIGlzIGEgbWVhc3VyZSBvZiB0aGUKKyAgIHZhcmlhYmlsaXR5IChzcHJlYWQgb3IgZGlzcGVyc2lvbikgb2YgZGF0YS4gIEEgbGFyZ2UgdmFyaWFuY2UgaW5kaWNhdGVzIHRoYXQKKyAgIHRoZSBkYXRhIGlzIHNwcmVhZCBvdXQ7IGEgc21hbGwgdmFyaWFuY2UgaW5kaWNhdGVzIGl0IGlzIGNsdXN0ZXJlZCBjbG9zZWx5CisgICBhcm91bmQgdGhlIG1lYW4uCisKKyAgIElmIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgKnhiYXIqIGlzIGdpdmVuLCBpdCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICpkYXRhKi4gIElmIGl0IGlzIG1pc3Npbmcgb3IgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSwgdGhlIG1lYW4gaXMKKyAgIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB5b3VyIGRhdGEgaXMgYSBzYW1wbGUgZnJvbSBhIHBvcHVsYXRpb24uIFRvIGNhbGN1bGF0ZQorICAgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLCBzZWUgOmZ1bmM6YHB2YXJpYW5jZWAuCisKKyAgIFJhaXNlcyA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlmICpkYXRhKiBoYXMgZmV3ZXIgdGhhbiB0d28gdmFsdWVzLgorCisgICBFeGFtcGxlczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBkYXRhID0gWzIuNzUsIDEuNzUsIDEuMjUsIDAuMjUsIDAuNSwgMS4yNSwgMy41XQorICAgICAgPj4+IHZhcmlhbmNlKGRhdGEpCisgICAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZQorICAgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICp4YmFyKiB0byBhdm9pZCByZWNhbGN1bGF0aW9uOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG0gPSBtZWFuKGRhdGEpCisgICAgICA+Pj4gdmFyaWFuY2UoZGF0YSwgbSkKKyAgICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gdmVyaWZ5IHRoYXQgeW91IGhhdmUgcGFzc2VkIHRoZSBhY3R1YWwgbWVhbgorICAgYXMgKnhiYXIqLiAgVXNpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgKnhiYXIqIGNhbiBsZWFkIHRvIGludmFsaWQgb3IKKyAgIGltcG9zc2libGUgcmVzdWx0cy4KKworICAgRGVjaW1hbCBhbmQgRnJhY3Rpb24gdmFsdWVzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgICAgRGVjaW1hbCgnMzEuMDE4NzUnKQorCisgICAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICAgID4+PiB2YXJpYW5jZShbRigxLCA2KSwgRigxLCAyKSwgRig1LCAzKV0pCisgICAgICBGcmFjdGlvbig2NywgMTA4KQorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBpcyB0aGUgc2FtcGxlIHZhcmlhbmNlIHPCsiB3aXRoIEJlc3NlbCdzIGNvcnJlY3Rpb24sIGFsc28ga25vd24gYXMKKyAgICAgIHZhcmlhbmNlIHdpdGggTi0xIGRlZ3JlZXMgb2YgZnJlZWRvbS4gIFByb3ZpZGVkIHRoYXQgdGhlIGRhdGEgcG9pbnRzIGFyZQorICAgICAgcmVwcmVzZW50YXRpdmUgKGUuZy4gaW5kZXBlbmRlbnQgYW5kIGlkZW50aWNhbGx5IGRpc3RyaWJ1dGVkKSwgdGhlIHJlc3VsdAorICAgICAgc2hvdWxkIGJlIGFuIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSB0cnVlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKyAgICAgIElmIHlvdSBzb21laG93IGtub3cgdGhlIGFjdHVhbCBwb3B1bGF0aW9uIG1lYW4gzrwgeW91IHNob3VsZCBwYXNzIGl0IHRvIHRoZQorICAgICAgOmZ1bmM6YHB2YXJpYW5jZWAgZnVuY3Rpb24gYXMgdGhlICptdSogcGFyYW1ldGVyIHRvIGdldCB0aGUgdmFyaWFuY2Ugb2YgYQorICAgICAgc2FtcGxlLgorCitFeGNlcHRpb25zCistLS0tLS0tLS0tCisKK0Egc2luZ2xlIGV4Y2VwdGlvbiBpcyBkZWZpbmVkOgorCisuLiBleGNlcHRpb246OiBTdGF0aXN0aWNzRXJyb3IKKworICAgU3ViY2xhc3Mgb2YgOmV4YzpgVmFsdWVFcnJvcmAgZm9yIHN0YXRpc3RpY3MtcmVsYXRlZCBleGNlcHRpb25zLgorCisuLgorICAgIyBUaGlzIG1vZGVsaW5lcyBtdXN0IGFwcGVhciB3aXRoaW4gdGhlIGxhc3QgdGVuIGxpbmVzIG9mIHRoZSBmaWxlLgorICAga2F0ZTogaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10YWJzIG9uOyBlbmNvZGluZyB1dGYtODsKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAppbmRleCBhYjc4Y2RjLi4yZGQ1N2JjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CkBAIC0xNDkzLDcgKzE0OTMsOSBAQAogLi4gbWV0aG9kOjogc3RyLmNlbnRlcih3aWR0aFssIGZpbGxjaGFyXSkKIAogICAgUmV0dXJuIGNlbnRlcmVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlCi0gICBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhIHNwYWNlKS4KKyAgIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFuIEFTQ0lJIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcworICAgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KKwogCiAKIC4uIG1ldGhvZDo6IHN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKQpAQCAtMTUyNiw3ICsxNTI4LDcgQEAKICAgIGF0IHRoYXQgcG9zaXRpb24uCiAKIAotLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKQorLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnModGFic2l6ZT04KQogCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieSBvbmUgb3IKICAgIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgZ2l2ZW4gdGFiIHNpemUuICBUYWIKQEAgLTE1OTgsNyArMTYwMCw4IEBACiAKIC4uIG1ldGhvZDo6IHN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKQogCi0gICBMaWtlIDptZXRoOmBmaW5kYCwgYnV0IHJhaXNlIDpleGM6YFZhbHVlRXJyb3JgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3QgZm91bmQuCisgICBMaWtlIDptZXRoOmB+c3RyLmZpbmRgLCBidXQgcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiB0aGUgc3Vic3RyaW5nIGlzCisgICBub3QgZm91bmQuCiAKIAogLi4gbWV0aG9kOjogc3RyLmlzYWxudW0oKQpAQCAtMTcwMSw5ICsxNzA0LDkgQEAKIAogLi4gbWV0aG9kOjogc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKQogCi0gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lCi0gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzCi0gICByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorICAgUmV0dXJuIHRoZSBzdHJpbmcgbGVmdCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMKKyAgIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFuIEFTQ0lJIHNwYWNlKS4gVGhlCisgICBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KIAogCiAuLiBtZXRob2Q6OiBzdHIubG93ZXIoKQpAQCAtMTcyMCw3ICsxNzIzLDcgQEAKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlICpjaGFycyoKICAgIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuICBJZiBvbWl0dGVkCiAgICBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqCi0gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDoKKyAgIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOjoKIAogICAgICAgPj4+ICcgICBzcGFjaW91cyAgICcubHN0cmlwKCkKICAgICAgICdzcGFjaW91cyAgICcKQEAgLTE3NzMsOSArMTc3Niw5IEBACiAKIC4uIG1ldGhvZDo6IHN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSkKIAotICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmUKLSAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcwotICAgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KKyAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcworICAgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUkgc3BhY2UpLiBUaGUKKyAgIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgogCiAKIC4uIG1ldGhvZDo6IHN0ci5ycGFydGl0aW9uKHNlcCkKQEAgLTE4MDAsNyArMTgwMyw3IEBACiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGUgKmNoYXJzKgogICAgYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gIElmIG9taXR0ZWQKICAgIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyoKLSAgIGFyZ3VtZW50IGlzIG5vdCBhIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOgorICAgYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6OgogCiAgICAgICA+Pj4gJyAgIHNwYWNpb3VzICAgJy5yc3RyaXAoKQogICAgICAgJyAgIHNwYWNpb3VzJwpAQCAtMTgyMiw2ICsxODI1LDE1IEBACiAgICAoZm9yIGV4YW1wbGUsIGBgJzE8PjI8PjMnLnNwbGl0KCc8PicpYGAgcmV0dXJucyBgYFsnMScsICcyJywgJzMnXWBgKS4KICAgIFNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFsnJ11gYC4KIAorICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gJzEsMiwzJy5zcGxpdCgnLCcpCisgICAgICBbJzEnLCAnMicsICczJ10KKyAgICAgID4+PiAnMSwyLDMnLnNwbGl0KCcsJywgbWF4c3BsaXQ9MSkKKyAgICAgIFsnMScsICcyIDMnXQorICAgICAgPj4+ICcxLDIsLDMsJy5zcGxpdCgnLCcpCisgICAgICBbJzEnLCAnMicsICcnLCAnMycsICcnXQorCiAgICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmcgYWxnb3JpdGhtIGlzCiAgICBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwKICAgIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlCkBAIC0xODI5LDggKzE4NDEsMTQgQEAKICAgIHN0cmluZyBvciBhIHN0cmluZyBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yCiAgICByZXR1cm5zIGBgW11gYC4KIAotICAgRm9yIGV4YW1wbGUsIGBgJyAxICAyICAgMyAgJy5zcGxpdCgpYGAgcmV0dXJucyBgYFsnMScsICcyJywgJzMnXWBgLCBhbmQKLSAgIGBgJyAgMSAgMiAgIDMgICcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgWycxJywgJzIgICAzICAnXWBgLgorICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gJzEgMiAzJy5zcGxpdCgpCisgICAgICBbJzEnLCAnMicsICczJ10KKyAgICAgID4+PiAnMSAyIDMnLnNwbGl0KG1heHNwbGl0PTEpCisgICAgICBbJzEnLCAnMiAzJ10KKyAgICAgID4+PiAnICAgMSAgIDIgICAzICAgJy5zcGxpdCgpCisgICAgICBbJzEnLCAnMicsICczJ10KIAogCiAuLiBpbmRleDo6CkBAIC0xODQzLDEzICsxODYxLDI4IEBACiAgICBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdCB1bmxlc3MgKmtlZXBlbmRzKiBpcwogICAgZ2l2ZW4gYW5kIHRydWUuCiAKLSAgIEZvciBleGFtcGxlLCBgYCdhYiBjXG5cbmRlIGZnXHJrbFxyXG4nLnNwbGl0bGluZXMoKWBgIHJldHVybnMKLSAgIGBgWydhYiBjJywgJycsICdkZSBmZycsICdrbCddYGAsIHdoaWxlIHRoZSBzYW1lIGNhbGwgd2l0aCBgYHNwbGl0bGluZXMoVHJ1ZSlgYAotICAgcmV0dXJucyBgYFsnYWIgY1xuJywgJ1xuJywgJ2RlIGZnXHInLCAna2xcclxuJ11gYC4KKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+ICdhYiBjXG5cbmRlIGZnXHJrbFxyXG4nLnNwbGl0bGluZXMoKQorICAgICAgWydhYiBjJywgJycsICdkZSBmZycsICdrbCddYGAKKyAgICAgID4+PiAnYWIgY1xuXG5kZSBmZ1xya2xcclxuJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCisgICAgICBbJ2FiIGNcbicsICdcbicsICdkZSBmZ1xyJywgJ2tsXHJcbiddCiAKICAgIFVubGlrZSA6bWV0aDpgfnN0ci5zcGxpdGAgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXMKICAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsIGxpbmUKLSAgIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lLgorICAgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmU6OgorCisgICAgICA+Pj4gIiIuc3BsaXRsaW5lcygpCisgICAgICBbXQorICAgICAgPj4+ICJPbmUgbGluZVxuIi5zcGxpdGxpbmVzKCkKKyAgICAgIFsnT25lIGxpbmUnXQorCisgICBGb3IgY29tcGFyaXNvbiwgYGBzcGxpdCgnXG4nKWBgIGdpdmVzOjoKKworICAgICAgPj4+ICcnLnNwbGl0KCdcbicpCisgICAgICBbJyddCisgICAgICA+Pj4gJ1R3byBsaW5lc1xuJy5zcGxpdCgnXG4nKQorICAgICAgWydUd28gbGluZXMnLCAnJ10KIAogCiAuLiBtZXRob2Q6OiBzdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKQpAQCAtMTg2Niw3ICsxODk5LDcgQEAKICAgIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuCiAgICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLgogICAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cwotICAgdmFsdWVzIGFyZSBzdHJpcHBlZDoKKyAgIHZhbHVlcyBhcmUgc3RyaXBwZWQ6OgogCiAgICAgICA+Pj4gJyAgIHNwYWNpb3VzICAgJy5zdHJpcCgpCiAgICAgICAnc3BhY2lvdXMnCkBAIC0xODg2LDYgKzE5MTksMTEgQEAKICAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlCiAgICBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLgogCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiAnSGVsbG8gd29ybGQnLnRpdGxlKCkKKyAgICAgICdIZWxsbyBXb3JsZCcKKwogICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYSB3b3JkIGFzCiAgICBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluIG1hbnkgY29udGV4dHMgYnV0CiAgICBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmQgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkCkBAIC0xOTM4LDkgKzE5NzYsMTggQEAKIAogLi4gbWV0aG9kOjogc3RyLnpmaWxsKHdpZHRoKQogCi0gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoCi0gICAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMKLSAgIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCBBU0NJSSBgYCcwJ2BgIGRpZ2l0cyB0bworICAgbWFrZSBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gQSBsZWFkaW5nIHNpZ24gcHJlZml4IChgYCcrJ2BgL2BgJy0nYGAKKyAgIGlzIGhhbmRsZWQgYnkgaW5zZXJ0aW5nIHRoZSBwYWRkaW5nICphZnRlciogdGhlIHNpZ24gY2hhcmFjdGVyIHJhdGhlcgorICAgdGhhbiBiZWZvcmUuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4KKyAgIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+ICI0MiIuemZpbGwoNSkKKyAgICAgICcwMDA0MicKKyAgICAgID4+PiAiLTQyIi56ZmlsbCg1KQorICAgICAgJy0wMDQyJwogCiAKIApAQCAtMjE5OCwxNiArMjI0NSwyOCBAQAogCiBBbHNvIHNlZSB0aGUgOnJlZjpgYnl0ZXMgPGZ1bmMtYnl0ZXM+YCBidWlsdC1pbi4KIAotU2luY2UgYnl0ZXMgb2JqZWN0cyBhcmUgc2VxdWVuY2VzIG9mIGludGVnZXJzLCBmb3IgYSBieXRlcyBvYmplY3QgKmIqLAotYGBiWzBdYGAgd2lsbCBiZSBhbiBpbnRlZ2VyLCB3aGlsZSBgYGJbMDoxXWBgIHdpbGwgYmUgYSBieXRlcyBvYmplY3Qgb2YKLWxlbmd0aCAxLiAgKFRoaXMgY29udHJhc3RzIHdpdGggdGV4dCBzdHJpbmdzLCB3aGVyZSBib3RoIGluZGV4aW5nIGFuZAotc2xpY2luZyB3aWxsIHByb2R1Y2UgYSBzdHJpbmcgb2YgbGVuZ3RoIDEpCitTaW5jZSAyIGhleGFkZWNpbWFsIGRpZ2l0cyBjb3JyZXNwb25kIHByZWNpc2VseSB0byBhIHNpbmdsZSBieXRlLCBoZXhhZGVjaW1hbAorbnVtYmVycyBhcmUgYSBjb21tb25seSB1c2VkIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBiaW5hcnkgZGF0YS4gQWNjb3JkaW5nbHksCit0aGUgYnl0ZXMgdHlwZSBoYXMgYW4gYWRkaXRpb25hbCBjbGFzcyBtZXRob2QgdG8gcmVhZCBkYXRhIGluIHRoYXQgZm9ybWF0OgorCisuLiBjbGFzc21ldGhvZDo6IGJ5dGVzLmZyb21oZXgoc3RyaW5nKQorCisgICBUaGlzIDpjbGFzczpgYnl0ZXNgIGNsYXNzIG1ldGhvZCByZXR1cm5zIGEgYnl0ZXMgb2JqZWN0LCBkZWNvZGluZyB0aGUKKyAgIGdpdmVuIHN0cmluZyBvYmplY3QuICBUaGUgc3RyaW5nIG11c3QgY29udGFpbiB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIHBlcgorICAgYnl0ZSwgd2l0aCBBU0NJSSBzcGFjZXMgYmVpbmcgaWdub3JlZC4KKworICAgPj4+IGJ5dGVzLmZyb21oZXgoJzJFZjAgRjFmMiAgJykKKyAgIGInLlx4ZjBceGYxXHhmMicKKworU2luY2UgYnl0ZXMgb2JqZWN0cyBhcmUgc2VxdWVuY2VzIG9mIGludGVnZXJzIChha2luIHRvIGEgdHVwbGUpLCBmb3IgYSBieXRlcworb2JqZWN0ICpiKiwgYGBiWzBdYGAgd2lsbCBiZSBhbiBpbnRlZ2VyLCB3aGlsZSBgYGJbMDoxXWBgIHdpbGwgYmUgYSBieXRlcworb2JqZWN0IG9mIGxlbmd0aCAxLiAgKFRoaXMgY29udHJhc3RzIHdpdGggdGV4dCBzdHJpbmdzLCB3aGVyZSBib3RoIGluZGV4aW5nCithbmQgc2xpY2luZyB3aWxsIHByb2R1Y2UgYSBzdHJpbmcgb2YgbGVuZ3RoIDEpCiAKIFRoZSByZXByZXNlbnRhdGlvbiBvZiBieXRlcyBvYmplY3RzIHVzZXMgdGhlIGxpdGVyYWwgZm9ybWF0IChgYGInLi4uJ2BgKQogc2luY2UgaXQgaXMgb2Z0ZW4gbW9yZSB1c2VmdWwgdGhhbiBlLmcuIGBgYnl0ZXMoWzQ2LCA0NiwgNDZdKWBgLiAgWW91IGNhbgogYWx3YXlzIGNvbnZlcnQgYSBieXRlcyBvYmplY3QgaW50byBhIGxpc3Qgb2YgaW50ZWdlcnMgdXNpbmcgYGBsaXN0KGIpYGAuCiAKLQogLi4gbm90ZTo6CiAgICBGb3IgUHl0aG9uIDIueCB1c2VyczogSW4gdGhlIFB5dGhvbiAyLnggc2VyaWVzLCBhIHZhcmlldHkgb2YgaW1wbGljaXQKICAgIGNvbnZlcnNpb25zIGJldHdlZW4gOC1iaXQgc3RyaW5ncyAodGhlIGNsb3Nlc3QgdGhpbmcgMi54IG9mZmVycyB0byBhCkBAIC0yMjQxLDYgKzIzMDAsMjkgQEAKIAogQWxzbyBzZWUgdGhlIDpyZWY6YGJ5dGVhcnJheSA8ZnVuYy1ieXRlYXJyYXk+YCBidWlsdC1pbi4KIAorU2luY2UgMiBoZXhhZGVjaW1hbCBkaWdpdHMgY29ycmVzcG9uZCBwcmVjaXNlbHkgdG8gYSBzaW5nbGUgYnl0ZSwgaGV4YWRlY2ltYWwKK251bWJlcnMgYXJlIGEgY29tbW9ubHkgdXNlZCBmb3JtYXQgZm9yIGRlc2NyaWJpbmcgYmluYXJ5IGRhdGEuIEFjY29yZGluZ2x5LAordGhlIGJ5dGVhcnJheSB0eXBlIGhhcyBhbiBhZGRpdGlvbmFsIGNsYXNzIG1ldGhvZCB0byByZWFkIGRhdGEgaW4gdGhhdCBmb3JtYXQ6CisKKy4uIGNsYXNzbWV0aG9kOjogYnl0ZWFycmF5LmZyb21oZXgoc3RyaW5nKQorCisgICBUaGlzIDpjbGFzczpgYnl0ZWFycmF5YCBjbGFzcyBtZXRob2QgcmV0dXJucyBieXRlYXJyYXkgb2JqZWN0LCBkZWNvZGluZworICAgdGhlIGdpdmVuIHN0cmluZyBvYmplY3QuICBUaGUgc3RyaW5nIG11c3QgY29udGFpbiB0d28gaGV4YWRlY2ltYWwgZGlnaXRzCisgICBwZXIgYnl0ZSwgd2l0aCBBU0NJSSBzcGFjZXMgYmVpbmcgaWdub3JlZC4KKworICAgPj4+IGJ5dGVhcnJheS5mcm9taGV4KCcyRWYwIEYxZjIgICcpCisgICBieXRlYXJyYXkoYicuXHhmMFx4ZjFceGYyJykKKworU2luY2UgYnl0ZWFycmF5IG9iamVjdHMgYXJlIHNlcXVlbmNlcyBvZiBpbnRlZ2VycyAoYWtpbiB0byBhIGxpc3QpLCBmb3IgYQorYnl0ZWFycmF5IG9iamVjdCAqYiosIGBgYlswXWBgIHdpbGwgYmUgYW4gaW50ZWdlciwgd2hpbGUgYGBiWzA6MV1gYCB3aWxsIGJlCithIGJ5dGVhcnJheSBvYmplY3Qgb2YgbGVuZ3RoIDEuICAoVGhpcyBjb250cmFzdHMgd2l0aCB0ZXh0IHN0cmluZ3MsIHdoZXJlCitib3RoIGluZGV4aW5nIGFuZCBzbGljaW5nIHdpbGwgcHJvZHVjZSBhIHN0cmluZyBvZiBsZW5ndGggMSkKKworVGhlIHJlcHJlc2VudGF0aW9uIG9mIGJ5dGVhcnJheSBvYmplY3RzIHVzZXMgdGhlIGJ5dGVzIGxpdGVyYWwgZm9ybWF0CisoYGBieXRlYXJyYXkoYicuLi4nKWBgKSBzaW5jZSBpdCBpcyBvZnRlbiBtb3JlIHVzZWZ1bCB0aGFuIGUuZy4KK2BgYnl0ZWFycmF5KFs0NiwgNDYsIDQ2XSlgYC4gIFlvdSBjYW4gYWx3YXlzIGNvbnZlcnQgYSBieXRlYXJyYXkgb2JqZWN0IGludG8KK2EgbGlzdCBvZiBpbnRlZ2VycyB1c2luZyBgYGxpc3QoYilgYC4KKwogCiAuLiBfYnl0ZXMtbWV0aG9kczoKIApAQCAtMjI1MiwyNSArMjMzNCwxMCBAQAogCiBCb3RoIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBzdXBwb3J0IHRoZSA6cmVmOmBjb21tb24gPHR5cGVzc2VxLWNvbW1vbj5gCiBzZXF1ZW5jZSBvcGVyYXRpb25zLiBUaGV5IGludGVyb3BlcmF0ZSBub3QganVzdCB3aXRoIG9wZXJhbmRzIG9mIHRoZSBzYW1lCi10eXBlLCBidXQgd2l0aCBhbnkgb2JqZWN0IHRoYXQgc3VwcG9ydHMgdGhlCi06cmVmOmBidWZmZXIgcHJvdG9jb2wgPGJ1ZmZlcm9iamVjdHM+YC4gRHVlIHRvIHRoaXMgZmxleGliaWxpdHksIHRoZXkgY2FuIGJlCit0eXBlLCBidXQgd2l0aCBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4gRHVlIHRvIHRoaXMgZmxleGliaWxpdHksIHRoZXkgY2FuIGJlCiBmcmVlbHkgbWl4ZWQgaW4gb3BlcmF0aW9ucyB3aXRob3V0IGNhdXNpbmcgZXJyb3JzLiBIb3dldmVyLCB0aGUgcmV0dXJuIHR5cGUKIG9mIHRoZSByZXN1bHQgbWF5IGRlcGVuZCBvbiB0aGUgb3JkZXIgb2Ygb3BlcmFuZHMuCiAKLUR1ZSB0byB0aGUgY29tbW9uIHVzZSBvZiBBU0NJSSB0ZXh0IGFzIHRoZSBiYXNpcyBmb3IgYmluYXJ5IHByb3RvY29scywgYnl0ZXMKLWFuZCBieXRlYXJyYXkgb2JqZWN0cyBwcm92aWRlIGFsbW9zdCBhbGwgbWV0aG9kcyBmb3VuZCBvbiB0ZXh0IHN0cmluZ3MsIHdpdGgKLXRoZSBleGNlcHRpb25zIG9mOgotCi0qIDptZXRoOmBzdHIuZW5jb2RlYCAod2hpY2ggY29udmVydHMgdGV4dCBzdHJpbmdzIHRvIGJ5dGVzIG9iamVjdHMpCi0qIDptZXRoOmBzdHIuZm9ybWF0YCBhbmQgOm1ldGg6YHN0ci5mb3JtYXRfbWFwYCAod2hpY2ggYXJlIHVzZWQgdG8gZm9ybWF0Ci0gIHRleHQgZm9yIGRpc3BsYXkgdG8gdXNlcnMpCi0qIDptZXRoOmBzdHIuaXNpZGVudGlmaWVyYCwgOm1ldGg6YHN0ci5pc251bWVyaWNgLCA6bWV0aDpgc3RyLmlzZGVjaW1hbGAsCi0gIDptZXRoOmBzdHIuaXNwcmludGFibGVgICh3aGljaCBhcmUgdXNlZCB0byBjaGVjayB2YXJpb3VzIHByb3BlcnRpZXMgb2YKLSAgdGV4dCBzdHJpbmdzIHdoaWNoIGFyZSBub3QgdHlwaWNhbGx5IGFwcGxpY2FibGUgdG8gYmluYXJ5IHByb3RvY29scykuCi0KLUFsbCBvdGhlciBzdHJpbmcgbWV0aG9kcyBhcmUgc3VwcG9ydGVkLCBhbHRob3VnaCBzb21ldGltZXMgd2l0aCBzbGlnaHQKLWRpZmZlcmVuY2VzIGluIGZ1bmN0aW9uYWxpdHkgYW5kIHNlbWFudGljcyAoYXMgZGVzY3JpYmVkIGJlbG93KS4KLQogLi4gbm90ZTo6CiAKICAgIFRoZSBtZXRob2RzIG9uIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBkb24ndCBhY2NlcHQgc3RyaW5ncyBhcyB0aGVpcgpAQCAtMjI4NSwyNSArMjM1MiwzMCBAQAogICAgICAgYSA9IGIiYWJjIgogICAgICAgYiA9IGEucmVwbGFjZShiImEiLCBiImYiKQogCi1XaGVuZXZlciBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBtZXRob2QgbmVlZHMgdG8gaW50ZXJwcmV0IHRoZSBieXRlcyBhcwotY2hhcmFjdGVycyAoZS5nLiB0aGUgOm1ldGg6YGlzLi4uYCBtZXRob2RzLCA6bWV0aDpgc3BsaXRgLCA6bWV0aDpgc3RyaXBgKSwKLXRoZSBBU0NJSSBjaGFyYWN0ZXIgc2V0IGlzIGFzc3VtZWQgKHRleHQgc3RyaW5ncyB1c2UgVW5pY29kZSBzZW1hbnRpY3MpLgorU29tZSBieXRlcyBhbmQgYnl0ZWFycmF5IG9wZXJhdGlvbnMgYXNzdW1lIHRoZSB1c2Ugb2YgQVNDSUkgY29tcGF0aWJsZQorYmluYXJ5IGZvcm1hdHMsIGFuZCBoZW5jZSBzaG91bGQgYmUgYXZvaWRlZCB3aGVuIHdvcmtpbmcgd2l0aCBhcmJpdHJhcnkKK2JpbmFyeSBkYXRhLiBUaGVzZSByZXN0cmljdGlvbnMgYXJlIGNvdmVyZWQgYmVsb3cuCiAKIC4uIG5vdGU6OgotICAgVXNpbmcgdGhlc2UgQVNDSUkgYmFzZWQgbWV0aG9kcyB0byBtYW5pcHVsYXRlIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90CisgICBVc2luZyB0aGVzZSBBU0NJSSBiYXNlZCBvcGVyYXRpb25zIHRvIG1hbmlwdWxhdGUgYmluYXJ5IGRhdGEgdGhhdCBpcyBub3QKICAgIHN0b3JlZCBpbiBhbiBBU0NJSSBiYXNlZCBmb3JtYXQgbWF5IGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uLgogCi1UaGUgc2VhcmNoIG9wZXJhdGlvbnMgKDprZXl3b3JkOmBpbmAsIDptZXRoOmBjb3VudGAsIDptZXRoOmBmaW5kYCwKLTptZXRoOmBpbmRleGAsIDptZXRoOmByZmluZGAgYW5kIDptZXRoOmByaW5kZXhgKSBhbGwgYWNjZXB0IGJvdGggaW50ZWdlcnMKLWluIHRoZSByYW5nZSAwIHRvIDI1NSAoaW5jbHVzaXZlKSBhcyB3ZWxsIGFzIGJ5dGVzIGFuZCBieXRlIGFycmF5IHNlcXVlbmNlcy4KK1RoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbiBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgY2FuIGJlIHVzZWQgd2l0aAorYXJiaXRyYXJ5IGJpbmFyeSBkYXRhLgogCi0uLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgQWxsIG9mIHRoZSBzZWFyY2ggbWV0aG9kcyBhbHNvIGFjY2VwdCBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NQotICAgKGluY2x1c2l2ZSkgYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuCisuLiBtZXRob2Q6OiBieXRlcy5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKQorICAgICAgICAgICAgYnl0ZWFycmF5LmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pCiAKKyAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzZXF1ZW5jZSAqc3ViKiBpbgorICAgdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlCisgICBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi4KIAotRWFjaCBieXRlcyBhbmQgYnl0ZWFycmF5IGluc3RhbmNlIHByb3ZpZGVzIGEgOm1ldGg6YH5ieXRlcy5kZWNvZGVgIGNvbnZlbmllbmNlCi1tZXRob2QgdGhhdCBpcyB0aGUgaW52ZXJzZSBvZiA6bWV0aDpgc3RyLmVuY29kZWA6CisgICBUaGUgc3Vic2VxdWVuY2UgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgYW4KKyAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgQWxzbyBhY2NlcHQgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUgYXMgdGhlIHN1YnNlcXVlbmNlLgorCiAKIC4uIG1ldGhvZDo6IGJ5dGVzLmRlY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpCiAgICAgICAgICAgICBieXRlYXJyYXkuZGVjb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IikKQEAgLTIzMTYsMzcgKzIzODgsMTc1IEBACiAgICA6ZnVuYzpgY29kZWNzLnJlZ2lzdGVyX2Vycm9yYCwgc2VlIHNlY3Rpb24gOnJlZjpgY29kZWMtYmFzZS1jbGFzc2VzYC4gRm9yIGEKICAgIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiA6cmVmOmBzdGFuZGFyZC1lbmNvZGluZ3NgLgogCisgICAuLiBub3RlOjoKKworICAgICAgUGFzc2luZyB0aGUgKmVuY29kaW5nKiBhcmd1bWVudCB0byA6Y2xhc3M6YHN0cmAgYWxsb3dzIGRlY29kaW5nIGFueQorICAgICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBkaXJlY3RseSwgd2l0aG91dCBuZWVkaW5nIHRvIG1ha2UgYSB0ZW1wb3JhcnkKKyAgICAgIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4xCiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cy4KIAotU2luY2UgMiBoZXhhZGVjaW1hbCBkaWdpdHMgY29ycmVzcG9uZCBwcmVjaXNlbHkgdG8gYSBzaW5nbGUgYnl0ZSwgaGV4YWRlY2ltYWwKLW51bWJlcnMgYXJlIGEgY29tbW9ubHkgdXNlZCBmb3JtYXQgZm9yIGRlc2NyaWJpbmcgYmluYXJ5IGRhdGEuIEFjY29yZGluZ2x5LAotdGhlIGJ5dGVzIGFuZCBieXRlYXJyYXkgdHlwZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIGNsYXNzIG1ldGhvZCB0byByZWFkIGRhdGEgaW4KLXRoYXQgZm9ybWF0OgogCi0uLiBjbGFzc21ldGhvZDo6IGJ5dGVzLmZyb21oZXgoc3RyaW5nKQotICAgICAgICAgICAgICAgICBieXRlYXJyYXkuZnJvbWhleChzdHJpbmcpCisuLiBtZXRob2Q6OiBieXRlcy5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKQorICAgICAgICAgICAgYnl0ZWFycmF5LmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pCiAKLSAgIFRoaXMgOmNsYXNzOmBieXRlc2AgY2xhc3MgbWV0aG9kIHJldHVybnMgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LAotICAgZGVjb2RpbmcgdGhlIGdpdmVuIHN0cmluZyBvYmplY3QuICBUaGUgc3RyaW5nIG11c3QgY29udGFpbiB0d28gaGV4YWRlY2ltYWwKLSAgIGRpZ2l0cyBwZXIgYnl0ZSwgc3BhY2VzIGFyZSBpZ25vcmVkLgorICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBiaW5hcnkgZGF0YSBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KiwKKyAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBzdWZmaXhlcyB0bworICAgbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0IHRoYXQgcG9zaXRpb24uICBXaXRoCisgICBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdCBwb3NpdGlvbi4KIAotICAgPj4+IGJ5dGVzLmZyb21oZXgoJzJFZjAgRjFmMiAgJykKLSAgIGInLlx4ZjBceGYxXHhmMicKKyAgIFRoZSBzdWZmaXgoZXMpIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgogCiAKLVRoZSBtYWtldHJhbnMgYW5kIHRyYW5zbGF0ZSBtZXRob2RzIGRpZmZlciBpbiBzZW1hbnRpY3MgZnJvbSB0aGUgdmVyc2lvbnMKLWF2YWlsYWJsZSBvbiBzdHJpbmdzOgorLi4gbWV0aG9kOjogYnl0ZXMuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKQorICAgICAgICAgICAgYnl0ZWFycmF5LmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSkKKworICAgUmV0dXJuIHRoZSBsb3dlc3QgaW5kZXggaW4gdGhlIGRhdGEgd2hlcmUgdGhlIHN1YnNlcXVlbmNlICpzdWIqIGlzIGZvdW5kLAorICAgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgYGBzW3N0YXJ0OmVuZF1gYC4gIE9wdGlvbmFsCisgICBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLiAgUmV0dXJuCisgICBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLgorCisgICBUaGUgc3Vic2VxdWVuY2UgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgYW4KKyAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIDptZXRoOmB+Ynl0ZXMuZmluZGAgbWV0aG9kIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgeW91IG5lZWQgdG8ga25vdyB0aGUKKyAgICAgIHBvc2l0aW9uIG9mICpzdWIqLiAgVG8gY2hlY2sgaWYgKnN1YiogaXMgYSBzdWJzdHJpbmcgb3Igbm90LCB1c2UgdGhlCisgICAgICA6a2V5d29yZDpgaW5gIG9wZXJhdG9yOjoKKworICAgICAgICAgPj4+IGInUHknIGluIGInUHl0aG9uJworICAgICAgICAgVHJ1ZQorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgQWxzbyBhY2NlcHQgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUgYXMgdGhlIHN1YnNlcXVlbmNlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pCisgICAgICAgICAgICBieXRlYXJyYXkuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSkKKworICAgTGlrZSA6bWV0aDpgfmJ5dGVzLmZpbmRgLCBidXQgcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiB0aGUKKyAgIHN1YnNlcXVlbmNlIGlzIG5vdCBmb3VuZC4KKworICAgVGhlIHN1YnNlcXVlbmNlIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIGFuCisgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFsc28gYWNjZXB0IGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1IGFzIHRoZSBzdWJzZXF1ZW5jZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5qb2luKGl0ZXJhYmxlKQorICAgICAgICAgICAgYnl0ZWFycmF5LmpvaW4oaXRlcmFibGUpCisKKyAgIFJldHVybiBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3Qgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlCisgICBiaW5hcnkgZGF0YSBzZXF1ZW5jZXMgaW4gdGhlIDp0ZXJtOmBpdGVyYWJsZWAgKml0ZXJhYmxlKi4gIEEKKyAgIDpleGM6YFR5cGVFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlIGFueSB2YWx1ZXMgaW4gKml0ZXJhYmxlKgorICAgdGhhdCBhcmUgbm90ZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gLCBpbmNsdWRpbmcKKyAgIDpjbGFzczpgc3RyYCBvYmplY3RzLiAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBjb250ZW50cworICAgb2YgdGhlIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLgorCisKKy4uIHN0YXRpY21ldGhvZDo6IGJ5dGVzLm1ha2V0cmFucyhmcm9tLCB0bykKKyAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheS5tYWtldHJhbnMoZnJvbSwgdG8pCisKKyAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvcgorICAgOm1ldGg6YGJ5dGVzLnRyYW5zbGF0ZWAgdGhhdCB3aWxsIG1hcCBlYWNoIGNoYXJhY3RlciBpbiAqZnJvbSogaW50byB0aGUKKyAgIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiAqdG8qOyAqZnJvbSogYW5kICp0byogbXVzdCBib3RoIGJlCisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gIGFuZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKKworLi4gbWV0aG9kOjogYnl0ZXMucGFydGl0aW9uKHNlcCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5wYXJ0aXRpb24oc2VwKQorCisgICBTcGxpdCB0aGUgc2VxdWVuY2UgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYSAzLXR1cGxlCisgICBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yLCBhbmQgdGhlIHBhcnQKKyAgIGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdCBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZQorICAgY29udGFpbmluZyBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHNlcXVlbmNlLCBmb2xsb3dlZCBieSB0d28gZW1wdHkgYnl0ZXMgb3IKKyAgIGJ5dGVhcnJheSBvYmplY3RzLgorCisgICBUaGUgc2VwYXJhdG9yIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pCisgICAgICAgICAgICBieXRlYXJyYXkucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic2VxdWVuY2UgKm9sZCoKKyAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHkgdGhlCisgICBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC4KKworICAgVGhlIHN1YnNlcXVlbmNlIHRvIHNlYXJjaCBmb3IgYW5kIGl0cyByZXBsYWNlbWVudCBtYXkgYmUgYW55CisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pCisgICAgICAgICAgICBieXRlYXJyYXkucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSkKKworICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzZXF1ZW5jZSB3aGVyZSB0aGUgc3Vic2VxdWVuY2UgKnN1YiogaXMKKyAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiBgYHNbc3RhcnQ6ZW5kXWBgLiAgT3B0aW9uYWwKKyAgIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uIFJldHVybgorICAgYGAtMWBgIG9uIGZhaWx1cmUuCisKKyAgIFRoZSBzdWJzZXF1ZW5jZSB0byBzZWFyY2ggZm9yIG1heSBiZSBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBvciBhbgorICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBBbHNvIGFjY2VwdCBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NSBhcyB0aGUgc3Vic2VxdWVuY2UuCisKKworLi4gbWV0aG9kOjogYnl0ZXMucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pCisgICAgICAgICAgICBieXRlYXJyYXkucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pCisKKyAgIExpa2UgOm1ldGg6YH5ieXRlcy5yZmluZGAgYnV0IHJhaXNlcyA6ZXhjOmBWYWx1ZUVycm9yYCB3aGVuIHRoZQorICAgc3Vic2VxdWVuY2UgKnN1YiogaXMgbm90IGZvdW5kLgorCisgICBUaGUgc3Vic2VxdWVuY2UgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgYW4KKyAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgQWxzbyBhY2NlcHQgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUgYXMgdGhlIHN1YnNlcXVlbmNlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnJwYXJ0aXRpb24oc2VwKQorICAgICAgICAgICAgYnl0ZWFycmF5LnJwYXJ0aXRpb24oc2VwKQorCisgICBTcGxpdCB0aGUgc2VxdWVuY2UgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhIDMtdHVwbGUKKyAgIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3IsIGFuZCB0aGUgcGFydAorICAgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90IGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlCisgICBjb250YWluaW5nIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgc2VxdWVuY2UsIGZvbGxvd2VkIGJ5IHR3byBlbXB0eSBieXRlcyBvcgorICAgYnl0ZWFycmF5IG9iamVjdHMuCisKKyAgIFRoZSBzZXBhcmF0b3IgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisKKworLi4gbWV0aG9kOjogYnl0ZXMuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKQorICAgICAgICAgICAgYnl0ZWFycmF5LnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBiaW5hcnkgZGF0YSBzdGFydHMgd2l0aCB0aGUgc3BlY2lmaWVkICpwcmVmaXgqLAorICAgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICAqcHJlZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHByZWZpeGVzIHRvCisgICBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXQgdGhhdCBwb3NpdGlvbi4gIFdpdGgKKyAgIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0IHBvc2l0aW9uLgorCisgICBUaGUgcHJlZml4KGVzKSB0byBzZWFyY2ggZm9yIG1heSBiZSBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKwogCiAuLiBtZXRob2Q6OiBieXRlcy50cmFuc2xhdGUodGFibGVbLCBkZWxldGVdKQogICAgICAgICAgICAgYnl0ZWFycmF5LnRyYW5zbGF0ZSh0YWJsZVssIGRlbGV0ZV0pCiAKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3Qgd2hlcmUgYWxsIGJ5dGVzIG9jY3VycmluZyBpbgotICAgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpkZWxldGUqIGFyZSByZW1vdmVkLCBhbmQgdGhlIHJlbWFpbmluZyBieXRlcyBoYXZlIGJlZW4KLSAgIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZSwgd2hpY2ggbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCBvZgotICAgbGVuZ3RoIDI1Ni4KKyAgIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqZGVsZXRlKiBhcmUgcmVtb3ZlZCwgYW5kIHRoZSByZW1haW5pbmcgYnl0ZXMgaGF2ZQorICAgYmVlbiBtYXBwZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUsIHdoaWNoIG11c3QgYmUgYSBieXRlcworICAgb2JqZWN0IG9mIGxlbmd0aCAyNTYuCiAKLSAgIFlvdSBjYW4gdXNlIHRoZSA6ZnVuYzpgYnl0ZXMubWFrZXRyYW5zYCBtZXRob2QgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gdGFibGUuCisgICBZb3UgY2FuIHVzZSB0aGUgOmZ1bmM6YGJ5dGVzLm1ha2V0cmFuc2AgbWV0aG9kIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uCisgICB0YWJsZS4KIAogICAgU2V0IHRoZSAqdGFibGUqIGFyZ3VtZW50IHRvIGBgTm9uZWBgIGZvciB0cmFuc2xhdGlvbnMgdGhhdCBvbmx5IGRlbGV0ZQogICAgY2hhcmFjdGVyczo6CkBAIC0yMzU1LDE1ICsyNTY1LDQ5NyBAQAogICAgICAgYidyZCB0aHMgc2hydCB0eHQnCiAKIAotLi4gc3RhdGljbWV0aG9kOjogYnl0ZXMubWFrZXRyYW5zKGZyb20sIHRvKQotICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5Lm1ha2V0cmFucyhmcm9tLCB0bykKK1RoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbiBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgaGF2ZSBkZWZhdWx0IGJlaGF2aW91cnMKK3RoYXQgYXNzdW1lIHRoZSB1c2Ugb2YgQVNDSUkgY29tcGF0aWJsZSBiaW5hcnkgZm9ybWF0cywgYnV0IGNhbiBzdGlsbCBiZSB1c2VkCit3aXRoIGFyYml0cmFyeSBiaW5hcnkgZGF0YSBieSBwYXNzaW5nIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy4gTm90ZSB0aGF0IGFsbCBvZgordGhlIGJ5dGVhcnJheSBtZXRob2RzIGluIHRoaXMgc2VjdGlvbiBkbyAqbm90KiBvcGVyYXRlIGluIHBsYWNlLCBhbmQgaW5zdGVhZAorcHJvZHVjZSBuZXcgb2JqZWN0cy4KIAotICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yCi0gICA6bWV0aDpgYnl0ZXMudHJhbnNsYXRlYCB0aGF0IHdpbGwgbWFwIGVhY2ggY2hhcmFjdGVyIGluICpmcm9tKiBpbnRvIHRoZQotICAgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluICp0byo7ICpmcm9tKiBhbmQgKnRvKiBtdXN0IGJlIGJ5dGVzIG9iamVjdHMKLSAgIGFuZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4KKy4uIG1ldGhvZDo6IGJ5dGVzLmNlbnRlcih3aWR0aFssIGZpbGxieXRlXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5jZW50ZXIod2lkdGhbLCBmaWxsYnl0ZV0pCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQorICAgUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IGNlbnRlcmVkIGluIGEgc2VxdWVuY2Ugb2YgbGVuZ3RoICp3aWR0aCouCisgICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGJ5dGUqIChkZWZhdWx0IGlzIGFuIEFTQ0lJCisgICBzcGFjZSkuIEZvciA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzLCB0aGUgb3JpZ2luYWwgc2VxdWVuY2UgaXMgcmV0dXJuZWQgaWYKKyAgICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0KKyAgICAgIGl0IGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMubGp1c3Qod2lkdGhbLCBmaWxsYnl0ZV0pCisgICAgICAgICAgICBieXRlYXJyYXkubGp1c3Qod2lkdGhbLCBmaWxsYnl0ZV0pCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBsZWZ0IGp1c3RpZmllZCBpbiBhIHNlcXVlbmNlIG9mIGxlbmd0aCAqd2lkdGgqLgorICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxieXRlKiAoZGVmYXVsdCBpcyBhbiBBU0NJSQorICAgc3BhY2UpLiBGb3IgOmNsYXNzOmBieXRlc2Agb2JqZWN0cywgdGhlIG9yaWdpbmFsIHNlcXVlbmNlIGlzIHJldHVybmVkIGlmCisgICAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtCisgICAgICBpdCBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmxzdHJpcChbY2hhcnNdKQorICAgICAgICAgICAgYnl0ZWFycmF5LmxzdHJpcChbY2hhcnNdKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIHNwZWNpZmllZCBsZWFkaW5nIGJ5dGVzIHJlbW92ZWQuICBUaGUKKyAgICpjaGFycyogYXJndW1lbnQgaXMgYSBiaW5hcnkgc2VxdWVuY2Ugc3BlY2lmeWluZyB0aGUgc2V0IG9mIGJ5dGUgdmFsdWVzIHRvCisgICBiZSByZW1vdmVkIC0gdGhlIG5hbWUgcmVmZXJzIHRvIHRoZSBmYWN0IHRoaXMgbWV0aG9kIGlzIHVzdWFsbHkgdXNlZCB3aXRoCisgICBBU0NJSSBjaGFyYWN0ZXJzLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMKKyAgIHRvIHJlbW92aW5nIEFTQ0lJIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7CisgICByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6OgorCisgICAgICA+Pj4gYicgICBzcGFjaW91cyAgICcubHN0cmlwKCkKKyAgICAgIGInc3BhY2lvdXMgICAnCisgICAgICA+Pj4gYid3d3cuZXhhbXBsZS5jb20nLmxzdHJpcChiJ2Ntb3d6LicpCisgICAgICBiJ2V4YW1wbGUuY29tJworCisgICBUaGUgYmluYXJ5IHNlcXVlbmNlIG9mIGJ5dGUgdmFsdWVzIHRvIHJlbW92ZSBtYXkgYmUgYW55CisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtCisgICAgICBpdCBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnJqdXN0KHdpZHRoWywgZmlsbGJ5dGVdKQorICAgICAgICAgICAgYnl0ZWFycmF5LnJqdXN0KHdpZHRoWywgZmlsbGJ5dGVdKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3QgcmlnaHQganVzdGlmaWVkIGluIGEgc2VxdWVuY2Ugb2YgbGVuZ3RoICp3aWR0aCouCisgICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGJ5dGUqIChkZWZhdWx0IGlzIGFuIEFTQ0lJCisgICBzcGFjZSkuIEZvciA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzLCB0aGUgb3JpZ2luYWwgc2VxdWVuY2UgaXMgcmV0dXJuZWQgaWYKKyAgICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0KKyAgICAgIGl0IGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMucnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKQorCisgICBTcGxpdCB0aGUgYmluYXJ5IHNlcXVlbmNlIGludG8gc3Vic2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUsIHVzaW5nICpzZXAqCisgICBhcyB0aGUgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0cworICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBgYE5vbmVgYCwKKyAgIGFueSBzdWJzZXF1ZW5jZSBjb25zaXN0aW5nIHNvbGVseSBvZiBBU0NJSSB3aGl0ZXNwYWNlIGlzIGEgc2VwYXJhdG9yLgorICAgRXhjZXB0IGZvciBzcGxpdHRpbmcgZnJvbSB0aGUgcmlnaHQsIDptZXRoOmByc3BsaXRgIGJlaGF2ZXMgbGlrZQorICAgOm1ldGg6YHNwbGl0YCB3aGljaCBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnJzdHJpcChbY2hhcnNdKQorICAgICAgICAgICAgYnl0ZWFycmF5LnJzdHJpcChbY2hhcnNdKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIHNwZWNpZmllZCB0cmFpbGluZyBieXRlcyByZW1vdmVkLiAgVGhlCisgICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgYmluYXJ5IHNlcXVlbmNlIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBieXRlIHZhbHVlcyB0bworICAgYmUgcmVtb3ZlZCAtIHRoZSBuYW1lIHJlZmVycyB0byB0aGUgZmFjdCB0aGlzIG1ldGhvZCBpcyB1c3VhbGx5IHVzZWQgd2l0aAorICAgQVNDSUkgY2hhcmFjdGVycy4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvCisgICByZW1vdmluZyBBU0NJSSB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsCisgICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOjoKKworICAgICAgPj4+IGInICAgc3BhY2lvdXMgICAnLnJzdHJpcCgpCisgICAgICBiJyAgIHNwYWNpb3VzJworICAgICAgPj4+IGInbWlzc2lzc2lwcGknLnJzdHJpcChiJ2lweicpCisgICAgICBiJ21pc3Npc3MnCisKKyAgIFRoZSBiaW5hcnkgc2VxdWVuY2Ugb2YgYnl0ZSB2YWx1ZXMgdG8gcmVtb3ZlIG1heSBiZSBhbnkKKyAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0KKyAgICAgIGl0IGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMuc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKQorICAgICAgICAgICAgYnl0ZWFycmF5LnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSkKKworICAgU3BsaXQgdGhlIGJpbmFyeSBzZXF1ZW5jZSBpbnRvIHN1YnNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCB1c2luZyAqc2VwKgorICAgYXMgdGhlIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4gYW5kIG5vbi1uZWdhdGl2ZSwgYXQgbW9zdAorICAgKm1heHNwbGl0KiBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgCisgICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgYGAtMWBgLCB0aGVuIHRoZXJlIGlzIG5vCisgICBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuCisKKyAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlciBhbmQgYXJlCisgICBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdWJzZXF1ZW5jZXMgKGZvciBleGFtcGxlLCBgYGInMSwsMicuc3BsaXQoYicsJylgYAorICAgcmV0dXJucyBgYFtiJzEnLCBiJycsIGInMiddYGApLiAgVGhlICpzZXAqIGFyZ3VtZW50IG1heSBjb25zaXN0IG9mIGEKKyAgIG11bHRpYnl0ZSBzZXF1ZW5jZSAoZm9yIGV4YW1wbGUsIGBgYicxPD4yPD4zJy5zcGxpdChiJzw+JylgYCByZXR1cm5zCisgICBgYFtiJzEnLCBiJzInLCBiJzMnXWBgKS4gU3BsaXR0aW5nIGFuIGVtcHR5IHNlcXVlbmNlIHdpdGggYSBzcGVjaWZpZWQKKyAgIHNlcGFyYXRvciByZXR1cm5zIGBgW2InJ11gYCBvciBgYFtieXRlYXJyYXkoYicnKV1gYCBkZXBlbmRpbmcgb24gdGhlIHR5cGUKKyAgIG9mIG9iamVjdCBiZWluZyBzcGxpdC4gIFRoZSAqc2VwKiBhcmd1bWVudCBtYXkgYmUgYW55CisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJzEsMiwzJy5zcGxpdChiJywnKQorICAgICAgW2InMScsIGInMicsIGInMyddCisgICAgICA+Pj4gYicxLDIsMycuc3BsaXQoYicsJywgbWF4c3BsaXQ9MSkKKyAgICAgIFtiJzEnLCBiJzIgMyddCisgICAgICA+Pj4gYicxLDIsLDMsJy5zcGxpdChiJywnKQorICAgICAgW2InMScsIGInMicsIGInJywgYiczJywgYicnXQorCisgICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmcgYWxnb3JpdGhtCisgICBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIEFTQ0lJIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkIGFzIGEgc2luZ2xlCisgICBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzIGF0IHRoZSBzdGFydCBvcgorICAgZW5kIGlmIHRoZSBzZXF1ZW5jZSBoYXMgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LAorICAgc3BsaXR0aW5nIGFuIGVtcHR5IHNlcXVlbmNlIG9yIGEgc2VxdWVuY2UgY29uc2lzdGluZyBzb2xlbHkgb2YgQVNDSUkKKyAgIHdoaXRlc3BhY2Ugd2l0aG91dCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFtdYGAuCisKKyAgIEZvciBleGFtcGxlOjoKKworCisgICAgICA+Pj4gYicxIDIgMycuc3BsaXQoKQorICAgICAgW2InMScsIGInMicsIGInMyddCisgICAgICA+Pj4gYicxIDIgMycuc3BsaXQobWF4c3BsaXQ9MSkKKyAgICAgIFtiJzEnLCBiJzIgMyddCisgICAgICA+Pj4gYicgICAxICAgMiAgIDMgICAnLnNwbGl0KCkKKyAgICAgIFtiJzEnLCBiJzInLCBiJzMnXQorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnN0cmlwKFtjaGFyc10pCisgICAgICAgICAgICBieXRlYXJyYXkuc3RyaXAoW2NoYXJzXSkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBzcGVjaWZpZWQgbGVhZGluZyBhbmQgdHJhaWxpbmcgYnl0ZXMKKyAgIHJlbW92ZWQuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgYmluYXJ5IHNlcXVlbmNlIHNwZWNpZnlpbmcgdGhlIHNldCBvZgorICAgYnl0ZSB2YWx1ZXMgdG8gYmUgcmVtb3ZlZCAtIHRoZSBuYW1lIHJlZmVycyB0byB0aGUgZmFjdCB0aGlzIG1ldGhvZCBpcworICAgdXN1YWxseSB1c2VkIHdpdGggQVNDSUkgY2hhcmFjdGVycy4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqCisgICBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyBBU0NJSSB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcworICAgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlCisgICBzdHJpcHBlZDo6CisKKyAgICAgID4+PiBiJyAgIHNwYWNpb3VzICAgJy5zdHJpcCgpCisgICAgICBiJ3NwYWNpb3VzJworICAgICAgPj4+IGInd3d3LmV4YW1wbGUuY29tJy5zdHJpcChiJ2Ntb3d6LicpCisgICAgICBiJ2V4YW1wbGUnCisKKyAgIFRoZSBiaW5hcnkgc2VxdWVuY2Ugb2YgYnl0ZSB2YWx1ZXMgdG8gcmVtb3ZlIG1heSBiZSBhbnkKKyAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0KKyAgICAgIGl0IGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworVGhlIGZvbGxvd2luZyBtZXRob2RzIG9uIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBhc3N1bWUgdGhlIHVzZSBvZiBBU0NJSQorY29tcGF0aWJsZSBiaW5hcnkgZm9ybWF0cyBhbmQgc2hvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIGFyYml0cmFyeSBiaW5hcnkgZGF0YS4KK05vdGUgdGhhdCBhbGwgb2YgdGhlIGJ5dGVhcnJheSBtZXRob2RzIGluIHRoaXMgc2VjdGlvbiBkbyAqbm90KiBvcGVyYXRlIGluCitwbGFjZSwgYW5kIGluc3RlYWQgcHJvZHVjZSBuZXcgb2JqZWN0cy4KKworLi4gbWV0aG9kOjogYnl0ZXMuY2FwaXRhbGl6ZSgpCisgICAgICAgICAgICBieXRlYXJyYXkuY2FwaXRhbGl6ZSgpCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIHdpdGggZWFjaCBieXRlIGludGVycHJldGVkIGFzIGFuIEFTQ0lJCisgICBjaGFyYWN0ZXIsIGFuZCB0aGUgZmlyc3QgYnl0ZSBjYXBpdGFsaXplZCBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC4KKyAgIE5vbi1BU0NJSSBieXRlIHZhbHVlcyBhcmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmV4cGFuZHRhYnModGFic2l6ZT04KQorICAgICAgICAgICAgYnl0ZWFycmF5LmV4cGFuZHRhYnModGFic2l6ZT04KQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aGVyZSBhbGwgQVNDSUkgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkCisgICBieSBvbmUgb3IgbW9yZSBBU0NJSSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZSBnaXZlbgorICAgdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBieXRlcyAoZGVmYXVsdCBpcyA4LAorICAgZ2l2aW5nIHRhYiBwb3NpdGlvbnMgYXQgY29sdW1ucyAwLCA4LCAxNiBhbmQgc28gb24pLiAgVG8gZXhwYW5kIHRoZQorICAgc2VxdWVuY2UsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzZXQgdG8gemVybyBhbmQgdGhlIHNlcXVlbmNlIGlzIGV4YW1pbmVkCisgICBieXRlIGJ5IGJ5dGUuICBJZiB0aGUgYnl0ZSBpcyBhbiBBU0NJSSB0YWIgY2hhcmFjdGVyIChgYGInXHQnYGApLCBvbmUgb3IKKyAgIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIHJlc3VsdCB1bnRpbCB0aGUgY3VycmVudCBjb2x1bW4KKyAgIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi4gKFRoZSB0YWIgY2hhcmFjdGVyIGl0c2VsZiBpcyBub3QKKyAgIGNvcGllZC4pICBJZiB0aGUgY3VycmVudCBieXRlIGlzIGFuIEFTQ0lJIG5ld2xpbmUgKGBgYidcbidgYCkgb3IKKyAgIGNhcnJpYWdlIHJldHVybiAoYGBiJ1xyJ2BgKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXMgcmVzZXQKKyAgIHRvIHplcm8uICBBbnkgb3RoZXIgYnl0ZSB2YWx1ZSBpcyBjb3BpZWQgdW5jaGFuZ2VkIGFuZCB0aGUgY3VycmVudCBjb2x1bW4KKyAgIGlzIGluY3JlbWVudGVkIGJ5IG9uZSByZWdhcmRsZXNzIG9mIGhvdyB0aGUgYnl0ZSB2YWx1ZSBpcyByZXByZXNlbnRlZCB3aGVuCisgICBwcmludGVkOjoKKworICAgICAgPj4+IGInMDFcdDAxMlx0MDEyM1x0MDEyMzQnLmV4cGFuZHRhYnMoKQorICAgICAgYicwMSAgICAgIDAxMiAgICAgMDEyMyAgICAwMTIzNCcKKyAgICAgID4+PiBiJzAxXHQwMTJcdDAxMjNcdDAxMjM0Jy5leHBhbmR0YWJzKDQpCisgICAgICBiJzAxICAwMTIgMDEyMyAgICAwMTIzNCcKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLSBpdAorICAgICAgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5pc2FsbnVtKCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5pc2FsbnVtKCkKKworICAgUmV0dXJuIHRydWUgaWYgYWxsIGJ5dGVzIGluIHRoZSBzZXF1ZW5jZSBhcmUgYWxwaGFiZXRpY2FsIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIG9yIEFTQ0lJIGRlY2ltYWwgZGlnaXRzIGFuZCB0aGUgc2VxdWVuY2UgaXMgbm90IGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuCisgICBBbHBoYWJldGljIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuIEFTQ0lJIGRlY2ltYWwKKyAgIGRpZ2l0cyBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlIGBgYicwMTIzNDU2Nzg5J2BgLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJ0FCQ2FiYzEnLmlzYWxudW0oKQorICAgICAgVHJ1ZQorICAgICAgPj4+IGInQUJDIGFiYzEnLmlzYWxudW0oKQorICAgICAgRmFsc2UKKworCisuLiBtZXRob2Q6OiBieXRlcy5pc2FscGhhKCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5pc2FscGhhKCkKKworICAgUmV0dXJuIHRydWUgaWYgYWxsIGJ5dGVzIGluIHRoZSBzZXF1ZW5jZSBhcmUgYWxwaGFiZXRpYyBBU0NJSSBjaGFyYWN0ZXJzCisgICBhbmQgdGhlIHNlcXVlbmNlIGlzIG5vdCBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiAgQWxwaGFiZXRpYyBBU0NJSQorICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlCisgICBgYGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgYC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidBQkNhYmMnLmlzYWxwaGEoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IGInQUJDYWJjMScuaXNhbHBoYSgpCisgICAgICBGYWxzZQorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzZGlnaXQoKQorICAgICAgICAgICAgYnl0ZWFycmF5LmlzZGlnaXQoKQorCisgICBSZXR1cm4gdHJ1ZSBpZiBhbGwgYnl0ZXMgaW4gdGhlIHNlcXVlbmNlIGFyZSBBU0NJSSBkZWNpbWFsIGRpZ2l0cworICAgYW5kIHRoZSBzZXF1ZW5jZSBpcyBub3QgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gQVNDSUkgZGVjaW1hbCBkaWdpdHMgYXJlCisgICB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYGBiJzAxMjM0NTY3ODknYGAuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInMTIzNCcuaXNkaWdpdCgpCisgICAgICBUcnVlCisgICAgICA+Pj4gYicxLjIzJy5pc2RpZ2l0KCkKKyAgICAgIEZhbHNlCisKKworLi4gbWV0aG9kOjogYnl0ZXMuaXNsb3dlcigpCisgICAgICAgICAgICBieXRlYXJyYXkuaXNsb3dlcigpCisKKyAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBsb3dlcmNhc2UgQVNDSUkgY2hhcmFjdGVyCisgICBpbiB0aGUgc2VxdWVuY2UgYW5kIG5vIHVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzLCBmYWxzZSBvdGhlcndpc2UuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInaGVsbG8gd29ybGQnLmlzbG93ZXIoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IGInSGVsbG8gd29ybGQnLmlzbG93ZXIoKQorICAgICAgRmFsc2UKKworICAgTG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2BgLiBVcHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuCisKKworLi4gbWV0aG9kOjogYnl0ZXMuaXNzcGFjZSgpCisgICAgICAgICAgICBieXRlYXJyYXkuaXNzcGFjZSgpCisKKyAgIFJldHVybiB0cnVlIGlmIGFsbCBieXRlcyBpbiB0aGUgc2VxdWVuY2UgYXJlIEFTQ0lJIHdoaXRlc3BhY2UgYW5kIHRoZQorICAgc2VxdWVuY2UgaXMgbm90IGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBBU0NJSSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlCisgICB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYicgXHRcblxyXHgwYlxmJyAoc3BhY2UsIHRhYiwgbmV3bGluZSwKKyAgIGNhcnJpYWdlIHJldHVybiwgdmVydGljYWwgdGFiLCBmb3JtIGZlZWQpLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzdGl0bGUoKQorICAgICAgICAgICAgYnl0ZWFycmF5LmlzdGl0bGUoKQorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc2VxdWVuY2UgaXMgQVNDSUkgdGl0bGVjYXNlIGFuZCB0aGUgc2VxdWVuY2UgaXMgbm90CisgICBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiBTZWUgOm1ldGg6YGJ5dGVzLnRpdGxlYCBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZQorICAgZGVmaW5pdGlvbiBvZiAidGl0bGVjYXNlIi4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidIZWxsbyBXb3JsZCcuaXN0aXRsZSgpCisgICAgICBUcnVlCisgICAgICA+Pj4gYidIZWxsbyB3b3JsZCcuaXN0aXRsZSgpCisgICAgICBGYWxzZQorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzdXBwZXIoKQorICAgICAgICAgICAgYnl0ZWFycmF5LmlzdXBwZXIoKQorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbG93ZXJjYXNlIGFscGhhYmV0aWMgQVNDSUkgY2hhcmFjdGVyCisgICBpbiB0aGUgc2VxdWVuY2UgYW5kIG5vIHVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzLCBmYWxzZSBvdGhlcndpc2UuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInSEVMTE8gV09STEQnLmlzdXBwZXIoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IGInSGVsbG8gd29ybGQnLmlzdXBwZXIoKQorICAgICAgRmFsc2UKKworICAgTG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2BgLiBVcHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuCisKKworLi4gbWV0aG9kOjogYnl0ZXMubG93ZXIoKQorICAgICAgICAgICAgYnl0ZWFycmF5Lmxvd2VyKCkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBhbGwgdGhlIHVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzCisgICBjb252ZXJ0ZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBsb3dlcmNhc2UgY291bnRlcnBhcnQuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInSGVsbG8gV29ybGQnLmxvd2VyKCkKKyAgICAgIGInaGVsbG8gd29ybGQnCisKKyAgIExvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UKKyAgIGBgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgYC4gVXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYGBiJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2BgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIGluZGV4OjoKKyAgIHNpbmdsZTogdW5pdmVyc2FsIG5ld2xpbmVzOyBieXRlcy5zcGxpdGxpbmVzIG1ldGhvZAorICAgc2luZ2xlOiB1bml2ZXJzYWwgbmV3bGluZXM7IGJ5dGVhcnJheS5zcGxpdGxpbmVzIG1ldGhvZAorCisuLiBtZXRob2Q6OiBieXRlcy5zcGxpdGxpbmVzKGtlZXBlbmRzPUZhbHNlKQorICAgICAgICAgICAgYnl0ZWFycmF5LnNwbGl0bGluZXMoa2VlcGVuZHM9RmFsc2UpCisKKyAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBiaW5hcnkgc2VxdWVuY2UsIGJyZWFraW5nIGF0IEFTQ0lJCisgICBsaW5lIGJvdW5kYXJpZXMuIFRoaXMgbWV0aG9kIHVzZXMgdGhlIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgIGFwcHJvYWNoCisgICB0byBzcGxpdHRpbmcgbGluZXMuIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0CisgICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidhYiBjXG5cbmRlIGZnXHJrbFxyXG4nLnNwbGl0bGluZXMoKQorICAgICAgW2InYWIgYycsIGInJywgYidkZSBmZycsIGIna2wnXWBgCisgICAgICA+Pj4gYidhYiBjXG5cbmRlIGZnXHJrbFxyXG4nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkKKyAgICAgIFtiJ2FiIGNcbicsIGInXG4nLCBiJ2RlIGZnXHInLCBiJ2tsXHJcbiddCisKKyAgIFVubGlrZSA6bWV0aDpgfmJ5dGVzLnNwbGl0YCB3aGVuIGEgZGVsaW1pdGVyIHN0cmluZyAqc2VwKiBpcyBnaXZlbiwgdGhpcworICAgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgdGhlIGVtcHR5IHN0cmluZywgYW5kIGEgdGVybWluYWwgbGluZQorICAgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmU6OgorCisgICAgICA+Pj4gYiIiLnNwbGl0KGInXG4nKSwgYiJUd28gbGluZXNcbiIuc3BsaXQoYidcbicpCisgICAgICAoW2InJ10sIFtiJ1R3byBsaW5lcycsIGInJ10pCisgICAgICA+Pj4gYiIiLnNwbGl0bGluZXMoKSwgYiJPbmUgbGluZVxuIi5zcGxpdGxpbmVzKCkKKyAgICAgIChbXSwgW2InT25lIGxpbmUnXSkKKworCisuLiBtZXRob2Q6OiBieXRlcy5zd2FwY2FzZSgpCisgICAgICAgICAgICBieXRlYXJyYXkuc3dhcGNhc2UoKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIGFsbCB0aGUgbG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGNvbnZlcnRlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHVwcGVyY2FzZSBjb3VudGVycGFydCBhbmQgdmljZS12ZXJzYS4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidIZWxsbyBXb3JsZCcuc3dhcGNhc2UoKQorICAgICAgYidoRUxMTyB3T1JMRCcKKworICAgTG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2BgLiBVcHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuCisKKyAgIFVubGlrZSA6ZnVuYzpgc3RyLnN3YXBjYXNlKClgLCBpdCBpcyBhbHdheXMgdGhlIGNhc2UgdGhhdAorICAgYGBiaW4uc3dhcGNhc2UoKS5zd2FwY2FzZSgpID09IGJpbmBgIGZvciB0aGUgYmluYXJ5IHZlcnNpb25zLiBDYXNlCisgICBjb252ZXJzaW9ucyBhcmUgc3ltbWV0cmljYWwgaW4gQVNDSUksIGV2ZW4gdGhvdWdoIHRoYXQgaXMgbm90IGdlbmVyYWxseQorICAgdHJ1ZSBmb3IgYXJiaXRyYXJ5IFVuaWNvZGUgY29kZSBwb2ludHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0gaXQKKyAgICAgIGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMudGl0bGUoKQorICAgICAgICAgICAgYnl0ZWFycmF5LnRpdGxlKCkKKworICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBiaW5hcnkgc2VxdWVuY2Ugd2hlcmUgd29yZHMgc3RhcnQgd2l0aAorICAgYW4gdXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuCisgICBVbmNhc2VkIGJ5dGUgdmFsdWVzIGFyZSBsZWZ0IHVubW9kaWZpZWQuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInSGVsbG8gd29ybGQnLnRpdGxlKCkKKyAgICAgIGInSGVsbG8gV29ybGQnCisKKyAgIExvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UKKyAgIGBgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgYC4gVXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYGBiJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2BgLgorICAgQWxsIG90aGVyIGJ5dGUgdmFsdWVzIGFyZSB1bmNhc2VkLgorCisgICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhIHdvcmQgYXMKKyAgIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW4gbWFueSBjb250ZXh0cyBidXQKKyAgIGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZCBwb3NzZXNzaXZlcyBmb3JtIHdvcmQKKyAgIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWQgcmVzdWx0OjoKKworICAgICAgICA+Pj4gYiJ0aGV5J3JlIGJpbGwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpCisgICAgICAgIGIiVGhleSdSZSBCaWxsJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayIKKworICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhciBleHByZXNzaW9uczo6CisKKyAgICAgICAgPj4+IGltcG9ydCByZQorICAgICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKToKKyAgICAgICAgLi4uICAgICByZXR1cm4gcmUuc3ViKHJiIltBLVphLXpdKygnW0EtWmEtel0rKT8iLAorICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswOjFdLnVwcGVyKCkgKworICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSwKKyAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgIHMpCisgICAgICAgIC4uLgorICAgICAgICA+Pj4gdGl0bGVjYXNlKGIidGhleSdyZSBiaWxsJ3MgZnJpZW5kcy4iKQorICAgICAgICBiIlRoZXkncmUgQmlsbCdzIEZyaWVuZHMuIgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnVwcGVyKCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS51cHBlcigpCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIHdpdGggYWxsIHRoZSBsb3dlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgY29udmVydGVkIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdXBwZXJjYXNlIGNvdW50ZXJwYXJ0LgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJ0hlbGxvIFdvcmxkJy51cHBlcigpCisgICAgICBiJ0hFTExPIFdPUkxEJworCisgICBMb3dlcmNhc2UgQVNDSUkgY2hhcmFjdGVycyBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlCisgICBgYGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYGAuIFVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzCisgICBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlIGBgYidBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgYC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLSBpdAorICAgICAgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy56ZmlsbCh3aWR0aCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS56ZmlsbCh3aWR0aCkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2UgbGVmdCBmaWxsZWQgd2l0aCBBU0NJSSBgYGInMCdgYCBkaWdpdHMgdG8KKyAgIG1ha2UgYSBzZXF1ZW5jZSBvZiBsZW5ndGggKndpZHRoKi4gQSBsZWFkaW5nIHNpZ24gcHJlZml4IChgYGInKydgYC8KKyAgIGBgYictJ2BgIGlzIGhhbmRsZWQgYnkgaW5zZXJ0aW5nIHRoZSBwYWRkaW5nICphZnRlciogdGhlIHNpZ24gY2hhcmFjdGVyCisgICByYXRoZXIgdGhhbiBiZWZvcmUuIEZvciA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzLCB0aGUgb3JpZ2luYWwgc2VxdWVuY2UgaXMKKyAgIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHNlcSlgYC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYiI0MiIuemZpbGwoNSkKKyAgICAgIGInMDAwNDInCisgICAgICA+Pj4gYiItNDIiLnpmaWxsKDUpCisgICAgICBiJy0wMDQyJworCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgogCiAKIC4uIF90eXBlbWVtb3J5dmlldzoKQEAgLTI0NjIsNiArMzE1NCwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIE9uZS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cyB3aXRoIGZvcm1hdHMgJ0InLCAnYicgb3IgJ2MnIGFyZSBub3cgaGFzaGFibGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBtZW1vcnl2aWV3IGlzIG5vdyByZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHkgd2l0aAorICAgICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgCisKICAgIDpjbGFzczpgbWVtb3J5dmlld2AgaGFzIHNldmVyYWwgbWV0aG9kczoKIAogICAgLi4gbWV0aG9kOjogX19lcV9fKGV4cG9ydGVyKQpAQCAtMzAyNyw4ICszNzIzLDggQEAKICAgIElmIG5vIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4sIGFuIGVtcHR5IGRpY3Rpb25hcnkgaXMgY3JlYXRlZC4KICAgIElmIGEgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiBhbmQgaXQgaXMgYSBtYXBwaW5nIG9iamVjdCwgYSBkaWN0aW9uYXJ5CiAgICBpcyBjcmVhdGVkIHdpdGggdGhlIHNhbWUga2V5LXZhbHVlIHBhaXJzIGFzIHRoZSBtYXBwaW5nIG9iamVjdC4gIE90aGVyd2lzZSwKLSAgIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gOnRlcm06YGl0ZXJhdG9yYCBvYmplY3QuICBFYWNoIGl0ZW0gaW4KLSAgIHRoZSBpdGVyYWJsZSBtdXN0IGl0c2VsZiBiZSBhbiBpdGVyYXRvciB3aXRoIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUKKyAgIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gOnRlcm06YGl0ZXJhYmxlYCBvYmplY3QuICBFYWNoIGl0ZW0gaW4KKyAgIHRoZSBpdGVyYWJsZSBtdXN0IGl0c2VsZiBiZSBhbiBpdGVyYWJsZSB3aXRoIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUKICAgIGZpcnN0IG9iamVjdCBvZiBlYWNoIGl0ZW0gYmVjb21lcyBhIGtleSBpbiB0aGUgbmV3IGRpY3Rpb25hcnksIGFuZCB0aGUKICAgIHNlY29uZCBvYmplY3QgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUuICBJZiBhIGtleSBvY2N1cnMgbW9yZSB0aGFuIG9uY2UsIHRoZQogICAgbGFzdCB2YWx1ZSBmb3IgdGhhdCBrZXkgYmVjb21lcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbmV3CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0IGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdAppbmRleCBkZGUzMmI5Li5lYzJlMWJlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKQEAgLTY2LDYgKzY2LDE5IEBACiAgICBmb3JtYXQgKGBgbGVuKGJ1ZmZlcltvZmZzZXQ6XSlgYCBtdXN0IGJlIGF0IGxlYXN0IGBgY2FsY3NpemUoZm10KWBgKS4KIAogCisuLiBmdW5jdGlvbjo6IGl0ZXJfdW5wYWNrKGZtdCwgYnVmZmVyKQorCisgICBJdGVyYXRpdmVseSB1bnBhY2sgZnJvbSB0aGUgYnVmZmVyICpidWZmZXIqIGFjY29yZGluZyB0byB0aGUgZm9ybWF0CisgICBzdHJpbmcgKmZtdCouICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gaXRlcmF0b3Igd2hpY2ggd2lsbCByZWFkCisgICBlcXVhbGx5LXNpemVkIGNodW5rcyBmcm9tIHRoZSBidWZmZXIgdW50aWwgYWxsIGl0cyBjb250ZW50cyBoYXZlIGJlZW4KKyAgIGNvbnN1bWVkLiAgVGhlIGJ1ZmZlcidzIHNpemUgaW4gYnl0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBhbW91bnQKKyAgIG9mIGRhdGEgcmVxdWlyZWQgYnkgdGhlIGZvcm1hdCwgYXMgcmVmbGVjdGVkIGJ5IDpmdW5jOmBjYWxjc2l6ZWAuCisKKyAgIEVhY2ggaXRlcmF0aW9uIHlpZWxkcyBhIHR1cGxlIGFzIHNwZWNpZmllZCBieSB0aGUgZm9ybWF0IHN0cmluZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBjYWxjc2l6ZShmbXQpCiAKICAgIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0IChhbmQgaGVuY2Ugb2YgdGhlIGJ5dGVzIG9iamVjdCBwcm9kdWNlZCBieQpAQCAtMzg4LDYgKzQwMSwxMyBAQAogICAgICAgKGBgbGVuKGJ1ZmZlcltvZmZzZXQ6XSlgYCBtdXN0IGJlIGF0IGxlYXN0IDphdHRyOmBzZWxmLnNpemVgKS4KIAogCisgICAuLiBtZXRob2Q6OiBpdGVyX3VucGFjayhidWZmZXIpCisKKyAgICAgIElkZW50aWNhbCB0byB0aGUgOmZ1bmM6YGl0ZXJfdW5wYWNrYCBmdW5jdGlvbiwgdXNpbmcgdGhlIGNvbXBpbGVkIGZvcm1hdC4KKyAgICAgIChgYGxlbihidWZmZXIpYGAgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDphdHRyOmBzZWxmLnNpemVgKS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgIC4uIGF0dHJpYnV0ZTo6IGZvcm1hdAogCiAgICAgICBUaGUgZm9ybWF0IHN0cmluZyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIFN0cnVjdCBvYmplY3QuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdCBiL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CmluZGV4IGE5ZWU5NzAuLjg1NDk5M2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CkBAIC01NCwxOCArNTQsMTIgQEAKICAgICAgID4+PiBzdWJwcm9jZXNzLmNhbGwoImV4aXQgMSIsIHNoZWxsPVRydWUpCiAgICAgICAxCiAKLSAgIC4uIHdhcm5pbmc6OgotCi0gICAgICBJbnZva2luZyB0aGUgc3lzdGVtIHNoZWxsIHdpdGggYGBzaGVsbD1UcnVlYGAgY2FuIGJlIGEgc2VjdXJpdHkgaGF6YXJkCi0gICAgICBpZiBjb21iaW5lZCB3aXRoIHVudHJ1c3RlZCBpbnB1dC4gU2VlIHRoZSB3YXJuaW5nIHVuZGVyCi0gICAgICA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCBmb3IgZGV0YWlscy4KLQogICAgLi4gbm90ZTo6CiAKLSAgICAgIERvIG5vdCB1c2UgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMgZnVuY3Rpb24uIEFzCi0gICAgICB0aGUgcGlwZXMgYXJlIG5vdCBiZWluZyByZWFkIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHRoZSBjaGlsZAotICAgICAgcHJvY2VzcyBtYXkgYmxvY2sgaWYgaXQgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gYSBwaXBlIHRvIGZpbGwgdXAKLSAgICAgIHRoZSBPUyBwaXBlIGJ1ZmZlci4KKyAgICAgIERvIG5vdCB1c2UgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMKKyAgICAgIGZ1bmN0aW9uLiAgVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBibG9jayBpZiBpdCBnZW5lcmF0ZXMgZW5vdWdoCisgICAgICBvdXRwdXQgdG8gYSBwaXBlIHRvIGZpbGwgdXAgdGhlIE9TIHBpcGUgYnVmZmVyIGFzIHRoZSBwaXBlcyBhcmUKKyAgICAgIG5vdCBiZWluZyByZWFkIGZyb20uCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgpAQCAtOTksMjQgKzkzLDE4IEBACiAgICAgICAgICAuLi4KICAgICAgIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOiBDb21tYW5kICdleGl0IDEnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzIDEKIAotICAgLi4gd2FybmluZzo6Ci0KLSAgICAgIEludm9raW5nIHRoZSBzeXN0ZW0gc2hlbGwgd2l0aCBgYHNoZWxsPVRydWVgYCBjYW4gYmUgYSBzZWN1cml0eSBoYXphcmQKLSAgICAgIGlmIGNvbWJpbmVkIHdpdGggdW50cnVzdGVkIGlucHV0LiBTZWUgdGhlIHdhcm5pbmcgdW5kZXIKLSAgICAgIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIGZvciBkZXRhaWxzLgotCiAgICAuLiBub3RlOjoKIAotICAgICAgRG8gbm90IHVzZSBgYHN0ZG91dD1QSVBFYGAgb3IgYGBzdGRlcnI9UElQRWBgIHdpdGggdGhpcyBmdW5jdGlvbi4gQXMKLSAgICAgIHRoZSBwaXBlcyBhcmUgbm90IGJlaW5nIHJlYWQgaW4gdGhlIGN1cnJlbnQgcHJvY2VzcywgdGhlIGNoaWxkCi0gICAgICBwcm9jZXNzIG1heSBibG9jayBpZiBpdCBnZW5lcmF0ZXMgZW5vdWdoIG91dHB1dCB0byBhIHBpcGUgdG8gZmlsbCB1cAotICAgICAgdGhlIE9TIHBpcGUgYnVmZmVyLgorICAgICAgRG8gbm90IHVzZSBgYHN0ZG91dD1QSVBFYGAgb3IgYGBzdGRlcnI9UElQRWBgIHdpdGggdGhpcworICAgICAgZnVuY3Rpb24uICBUaGUgY2hpbGQgcHJvY2VzcyB3aWxsIGJsb2NrIGlmIGl0IGdlbmVyYXRlcyBlbm91Z2gKKyAgICAgIG91dHB1dCB0byBhIHBpcGUgdG8gZmlsbCB1cCB0aGUgT1MgcGlwZSBidWZmZXIgYXMgdGhlIHBpcGVzIGFyZQorICAgICAgbm90IGJlaW5nIHJlYWQgZnJvbS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCiAKIAotLi4gZnVuY3Rpb246OiBjaGVja19vdXRwdXQoYXJncywgKiwgc3RkaW49Tm9uZSwgc3RkZXJyPU5vbmUsIHNoZWxsPUZhbHNlLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRpbWVvdXQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogY2hlY2tfb3V0cHV0KGFyZ3MsICosIGlucHV0PU5vbmUsIHN0ZGluPU5vbmUsIHN0ZGVycj1Ob25lLCBzaGVsbD1GYWxzZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0aW1lb3V0PU5vbmUpCiAKICAgIFJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzIGFuZCByZXR1cm4gaXRzIG91dHB1dC4KIApAQCAtMTI5LDE1ICsxMTcsMjEgQEAKICAgIGluIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIChoZW5jZSB0aGUgdXNlIG9mIGtleXdvcmQtb25seSBub3RhdGlvbgogICAgaW4gdGhlIGFiYnJldmlhdGVkIHNpZ25hdHVyZSkuIFRoZSBmdWxsIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBsYXJnZWx5IHRoZQogICAgc2FtZSBhcyB0aGF0IG9mIHRoZSA6Y2xhc3M6YFBvcGVuYCBjb25zdHJ1Y3RvciAtIHRoaXMgZnVuY3Rpb25zIHBhc3NlcyBhbGwKLSAgIHN1cHBsaWVkIGFyZ3VtZW50cyBvdGhlciB0aGFuICp0aW1lb3V0KiBkaXJlY3RseSB0aHJvdWdoIHRvIHRoYXQgaW50ZXJmYWNlLgotICAgSW4gYWRkaXRpb24sICpzdGRvdXQqIGlzIG5vdCBwZXJtaXR0ZWQgYXMgYW4gYXJndW1lbnQsIGFzIGl0IGlzIHVzZWQKLSAgIGludGVybmFsbHkgdG8gY29sbGVjdCB0aGUgb3V0cHV0IGZyb20gdGhlIHN1YnByb2Nlc3MuCisgICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqaW5wdXQqIGFuZCAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0bworICAgdGhhdCBpbnRlcmZhY2UuICBJbiBhZGRpdGlvbiwgKnN0ZG91dCogaXMgbm90IHBlcm1pdHRlZCBhcyBhbiBhcmd1bWVudCwgYXMKKyAgIGl0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBjb2xsZWN0IHRoZSBvdXRwdXQgZnJvbSB0aGUgc3VicHJvY2Vzcy4KIAogICAgVGhlICp0aW1lb3V0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLndhaXRgLiBJZiB0aGUgdGltZW91dAogICAgZXhwaXJlcywgdGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWQgYW5kIHRoZW4gd2FpdGVkIGZvciBhZ2Fpbi4gIFRoZQogICAgOmV4YzpgVGltZW91dEV4cGlyZWRgIGV4Y2VwdGlvbiB3aWxsIGJlIHJlLXJhaXNlZCBhZnRlciB0aGUgY2hpbGQgcHJvY2VzcwogICAgaGFzIHRlcm1pbmF0ZWQuCiAKKyAgIFRoZSAqaW5wdXQqIGFyZ3VtZW50IGlzIHBhc3NlZCB0byA6bWV0aDpgUG9wZW4uY29tbXVuaWNhdGVgIGFuZCB0aHVzIHRvIHRoZQorICAgc3VicHJvY2VzcydzIHN0ZGluLiAgSWYgdXNlZCBpdCBtdXN0IGJlIGEgYnl0ZSBzZXF1ZW5jZSwgb3IgYSBzdHJpbmcgaWYKKyAgIGBgdW5pdmVyc2FsX25ld2xpbmVzPVRydWVgYC4gIFdoZW4gdXNlZCwgdGhlIGludGVybmFsIDpjbGFzczpgUG9wZW5gIG9iamVjdAorICAgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHdpdGggYGBzdGRpbj1QSVBFYGAsIGFuZCB0aGUgKnN0ZGluKiBhcmd1bWVudCBtYXkKKyAgIG5vdCBiZSB1c2VkIGFzIHdlbGwuCisKICAgIEV4YW1wbGVzOjoKIAogICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZWNobyIsICJIZWxsbyBXb3JsZCEiXSkKQEAgLTE0Niw2ICsxNDAsMTAgQEAKICAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImVjaG8iLCAiSGVsbG8gV29ybGQhIl0sIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQogICAgICAgJ0hlbGxvIFdvcmxkIVxuJwogCisgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJzZWQiLCAiLWUiLCAicy9mb28vYmFyLyJdLAorICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0PWIid2hlbiBpbiB0aGUgY291cnNlIG9mIGZvb21hbiBldmVudHNcbiIpCisgICAgICBiJ3doZW4gaW4gdGhlIGNvdXJzZSBvZiBiYXJtYW4gZXZlbnRzXG4nCisKICAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiZXhpdCAxIiwgc2hlbGw9VHJ1ZSkKICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgIC4uLgpAQCAtMTY3LDI1ICsxNjUsMjAgQEAKICAgICAgIC4uLiAgICAgc2hlbGw9VHJ1ZSkKICAgICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCi0KLSAgIC4uCi0KLSAgIC4uIHdhcm5pbmc6OgotCi0gICAgICBJbnZva2luZyB0aGUgc3lzdGVtIHNoZWxsIHdpdGggYGBzaGVsbD1UcnVlYGAgY2FuIGJlIGEgc2VjdXJpdHkgaGF6YXJkCi0gICAgICBpZiBjb21iaW5lZCB3aXRoIHVudHJ1c3RlZCBpbnB1dC4gU2VlIHRoZSB3YXJuaW5nIHVuZGVyCi0gICAgICA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCBmb3IgZGV0YWlscy4KLQogICAgLi4gbm90ZTo6CiAKLSAgICAgIERvIG5vdCB1c2UgYGBzdGRlcnI9UElQRWBgIHdpdGggdGhpcyBmdW5jdGlvbi4gQXMgdGhlIHBpcGUgaXMgbm90IGJlaW5nCi0gICAgICByZWFkIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHRoZSBjaGlsZCBwcm9jZXNzIG1heSBibG9jayBpZiBpdAotICAgICAgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gdGhlIHBpcGUgdG8gZmlsbCB1cCB0aGUgT1MgcGlwZSBidWZmZXIuCisgICAgICBEbyBub3QgdXNlIGBgc3Rkb3V0PVBJUEVgYCBvciBgYHN0ZGVycj1QSVBFYGAgd2l0aCB0aGlzCisgICAgICBmdW5jdGlvbi4gIFRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmxvY2sgaWYgaXQgZ2VuZXJhdGVzIGVub3VnaAorICAgICAgb3V0cHV0IHRvIGEgcGlwZSB0byBmaWxsIHVwIHRoZSBPUyBwaXBlIGJ1ZmZlciBhcyB0aGUgcGlwZXMgYXJlCisgICAgICBub3QgYmVpbmcgcmVhZCBmcm9tLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAqaW5wdXQqIHdhcyBhZGRlZC4KIAogLi4gZGF0YTo6IERFVk5VTEwKIApAQCAtMjAwLDcgKzE5Myw3IEBACiAKICAgIFNwZWNpYWwgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgKnN0ZGluKiwgKnN0ZG91dCogb3IgKnN0ZGVyciogYXJndW1lbnQKICAgIHRvIDpjbGFzczpgUG9wZW5gIGFuZCBpbmRpY2F0ZXMgdGhhdCBhIHBpcGUgdG8gdGhlIHN0YW5kYXJkIHN0cmVhbSBzaG91bGQgYmUKLSAgIG9wZW5lZC4KKyAgIG9wZW5lZC4gIE1vc3QgdXNlZnVsIHdpdGggOm1ldGg6YFBvcGVuLmNvbW11bmljYXRlYC4KIAogCiAuLiBkYXRhOjogU1RET1VUCkBAIC0zMjYsMjggKzMxOSw5IEBACiAgICAgICBpbnN0ZWFkIG9mIGBgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKClgYC4gIFNlZSB0aGUKICAgICAgIDpjbGFzczpgaW8uVGV4dElPV3JhcHBlcmAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjaGFuZ2UuCiAKLSAgIC4uIHdhcm5pbmc6OgorICAgLi4gbm90ZTo6CiAKLSAgICAgIEV4ZWN1dGluZyBzaGVsbCBjb21tYW5kcyB0aGF0IGluY29ycG9yYXRlIHVuc2FuaXRpemVkIGlucHV0IGZyb20gYW4KLSAgICAgIHVudHJ1c3RlZCBzb3VyY2UgbWFrZXMgYSBwcm9ncmFtIHZ1bG5lcmFibGUgdG8gYHNoZWxsIGluamVjdGlvbgotICAgICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hlbGxfaW5qZWN0aW9uI1NoZWxsX2luamVjdGlvbj5gXywKLSAgICAgIGEgc2VyaW91cyBzZWN1cml0eSBmbGF3IHdoaWNoIGNhbiByZXN1bHQgaW4gYXJiaXRyYXJ5IGNvbW1hbmQgZXhlY3V0aW9uLgotICAgICAgRm9yIHRoaXMgcmVhc29uLCB0aGUgdXNlIG9mIGBgc2hlbGw9VHJ1ZWBgIGlzICoqc3Ryb25nbHkgZGlzY291cmFnZWQqKgotICAgICAgaW4gY2FzZXMgd2hlcmUgdGhlIGNvbW1hbmQgc3RyaW5nIGlzIGNvbnN0cnVjdGVkIGZyb20gZXh0ZXJuYWwgaW5wdXQ6OgotCi0gICAgICAgICA+Pj4gZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjYWxsCi0gICAgICAgICA+Pj4gZmlsZW5hbWUgPSBpbnB1dCgiV2hhdCBmaWxlIHdvdWxkIHlvdSBsaWtlIHRvIGRpc3BsYXk/XG4iKQotICAgICAgICAgV2hhdCBmaWxlIHdvdWxkIHlvdSBsaWtlIHRvIGRpc3BsYXk/Ci0gICAgICAgICBub25fZXhpc3RlbnQ7IHJtIC1yZiAvICMKLSAgICAgICAgID4+PiBjYWxsKCJjYXQgIiArIGZpbGVuYW1lLCBzaGVsbD1UcnVlKSAjIFVoLW9oLiBUaGlzIHdpbGwgZW5kIGJhZGx5Li4uCi0KLSAgICAgIGBgc2hlbGw9RmFsc2VgYCBkaXNhYmxlcyBhbGwgc2hlbGwgYmFzZWQgZmVhdHVyZXMsIGJ1dCBkb2VzIG5vdCBzdWZmZXIKLSAgICAgIGZyb20gdGhpcyB2dWxuZXJhYmlsaXR5OyBzZWUgdGhlIE5vdGUgaW4gdGhlIDpjbGFzczpgUG9wZW5gIGNvbnN0cnVjdG9yCi0gICAgICBkb2N1bWVudGF0aW9uIGZvciBoZWxwZnVsIGhpbnRzIGluIGdldHRpbmcgYGBzaGVsbD1GYWxzZWBgIHRvIHdvcmsuCi0KLSAgICAgIFdoZW4gdXNpbmcgYGBzaGVsbD1UcnVlYGAsIDpmdW5jOmBzaGxleC5xdW90ZWAgY2FuIGJlIHVzZWQgdG8gcHJvcGVybHkKLSAgICAgIGVzY2FwZSB3aGl0ZXNwYWNlIGFuZCBzaGVsbCBtZXRhY2hhcmFjdGVycyBpbiBzdHJpbmdzIHRoYXQgYXJlIGdvaW5nIHRvCi0gICAgICBiZSB1c2VkIHRvIGNvbnN0cnVjdCBzaGVsbCBjb21tYW5kcy4KKyAgICAgIFJlYWQgdGhlIGBTZWN1cml0eSBDb25zaWRlcmF0aW9uc2BfIHNlY3Rpb24gYmVmb3JlIHVzaW5nIGBgc2hlbGw9VHJ1ZWBgLgogCiBUaGVzZSBvcHRpb25zLCBhbG9uZyB3aXRoIGFsbCBvZiB0aGUgb3RoZXIgb3B0aW9ucywgYXJlIGRlc2NyaWJlZCBpbiBtb3JlCiBkZXRhaWwgaW4gdGhlIDpjbGFzczpgUG9wZW5gIGNvbnN0cnVjdG9yIGRvY3VtZW50YXRpb24uCkBAIC0zNjgsNyArMzQyLDcgQEAKICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm89Tm9uZSwgY3JlYXRpb25mbGFncz0wLCByZXN0b3JlX3NpZ25hbHM9VHJ1ZSwgXAogICAgICAgICAgICAgICAgICBzdGFydF9uZXdfc2Vzc2lvbj1GYWxzZSwgcGFzc19mZHM9KCkpCiAKLSAgIEV4ZWN1dGUgYSBjaGlsZCBwcm9ncmFtIGluIGEgbmV3IHByb2Nlc3MuICBPbiBVbml4LCB0aGUgY2xhc3MgdXNlcworICAgRXhlY3V0ZSBhIGNoaWxkIHByb2dyYW0gaW4gYSBuZXcgcHJvY2Vzcy4gIE9uIFBPU0lYLCB0aGUgY2xhc3MgdXNlcwogICAgOm1ldGg6YG9zLmV4ZWN2cGAtbGlrZSBiZWhhdmlvciB0byBleGVjdXRlIHRoZSBjaGlsZCBwcm9ncmFtLiAgT24gV2luZG93cywKICAgIHRoZSBjbGFzcyB1c2VzIHRoZSBXaW5kb3dzIGBgQ3JlYXRlUHJvY2VzcygpYGAgZnVuY3Rpb24uICBUaGUgYXJndW1lbnRzIHRvCiAgICA6Y2xhc3M6YFBvcGVuYCBhcmUgYXMgZm9sbG93cy4KQEAgLTM4MCw3ICszNTQsNyBAQAogICAgYXJndW1lbnRzIGZvciBhZGRpdGlvbmFsIGRpZmZlcmVuY2VzIGZyb20gdGhlIGRlZmF1bHQgYmVoYXZpb3IuICBVbmxlc3MKICAgIG90aGVyd2lzZSBzdGF0ZWQsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHBhc3MgKmFyZ3MqIGFzIGEgc2VxdWVuY2UuCiAKLSAgIE9uIFVuaXgsIGlmICphcmdzKiBpcyBhIHN0cmluZywgdGhlIHN0cmluZyBpcyBpbnRlcnByZXRlZCBhcyB0aGUgbmFtZSBvcgorICAgT24gUE9TSVgsIGlmICphcmdzKiBpcyBhIHN0cmluZywgdGhlIHN0cmluZyBpcyBpbnRlcnByZXRlZCBhcyB0aGUgbmFtZSBvcgogICAgcGF0aCBvZiB0aGUgcHJvZ3JhbSB0byBleGVjdXRlLiAgSG93ZXZlciwgdGhpcyBjYW4gb25seSBiZSBkb25lIGlmIG5vdAogICAgcGFzc2luZyBhcmd1bWVudHMgdG8gdGhlIHByb2dyYW0uCiAKQEAgLTQxMSw3ICszODUsNyBAQAogICAgdGhlIHNoZWxsIGFzIHRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUuICBJZiAqc2hlbGwqIGlzICpUcnVlKiwgaXQgaXMKICAgIHJlY29tbWVuZGVkIHRvIHBhc3MgKmFyZ3MqIGFzIGEgc3RyaW5nIHJhdGhlciB0aGFuIGFzIGEgc2VxdWVuY2UuCiAKLSAgIE9uIFVuaXggd2l0aCBgYHNoZWxsPVRydWVgYCwgdGhlIHNoZWxsIGRlZmF1bHRzIHRvIDpmaWxlOmAvYmluL3NoYC4gIElmCisgICBPbiBQT1NJWCB3aXRoIGBgc2hlbGw9VHJ1ZWBgLCB0aGUgc2hlbGwgZGVmYXVsdHMgdG8gOmZpbGU6YC9iaW4vc2hgLiAgSWYKICAgICphcmdzKiBpcyBhIHN0cmluZywgdGhlIHN0cmluZyBzcGVjaWZpZXMgdGhlIGNvbW1hbmQKICAgIHRvIGV4ZWN1dGUgdGhyb3VnaCB0aGUgc2hlbGwuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0cmluZyBtdXN0IGJlCiAgICBmb3JtYXR0ZWQgZXhhY3RseSBhcyBpdCB3b3VsZCBiZSB3aGVuIHR5cGVkIGF0IHRoZSBzaGVsbCBwcm9tcHQuICBUaGlzCkBAIC00MjgsMTEgKzQwMiw5IEBACiAgICBpbnRvIHRoZSBzaGVsbCAoZS5nLiA6Y29tbWFuZDpgZGlyYCBvciA6Y29tbWFuZDpgY29weWApLiAgWW91IGRvIG5vdCBuZWVkCiAgICBgYHNoZWxsPVRydWVgYCB0byBydW4gYSBiYXRjaCBmaWxlIG9yIGNvbnNvbGUtYmFzZWQgZXhlY3V0YWJsZS4KIAotICAgLi4gd2FybmluZzo6CisgICAuLiBub3RlOjoKIAotICAgICAgUGFzc2luZyBgYHNoZWxsPVRydWVgYCBjYW4gYmUgYSBzZWN1cml0eSBoYXphcmQgaWYgY29tYmluZWQgd2l0aAotICAgICAgdW50cnVzdGVkIGlucHV0LiAgU2VlIHRoZSB3YXJuaW5nIHVuZGVyIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgCi0gICAgICBmb3IgZGV0YWlscy4KKyAgICAgIFJlYWQgdGhlIGBTZWN1cml0eSBDb25zaWRlcmF0aW9uc2BfIHNlY3Rpb24gYmVmb3JlIHVzaW5nIGBgc2hlbGw9VHJ1ZWBgLgogCiAgICAqYnVmc2l6ZSogd2lsbCBiZSBzdXBwbGllZCBhcyB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCB0byB0aGUgOmZ1bmM6YG9wZW5gCiAgICBmdW5jdGlvbiB3aGVuIGNyZWF0aW5nIHRoZSBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGUgZmlsZSBvYmplY3RzOiA6Y29uc3Q6YDBgCkBAIC00NTMsOSArNDI1LDkgQEAKICAgIHByb2dyYW0gdG8gZXhlY3V0ZSBzcGVjaWZpZWQgYnkgKmFyZ3MqLiAgSG93ZXZlciwgdGhlIG9yaWdpbmFsICphcmdzKiBpcwogICAgc3RpbGwgcGFzc2VkIHRvIHRoZSBwcm9ncmFtLiAgTW9zdCBwcm9ncmFtcyB0cmVhdCB0aGUgcHJvZ3JhbSBzcGVjaWZpZWQKICAgIGJ5ICphcmdzKiBhcyB0aGUgY29tbWFuZCBuYW1lLCB3aGljaCBjYW4gdGhlbiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcHJvZ3JhbQotICAgYWN0dWFsbHkgZXhlY3V0ZWQuICBPbiBVbml4LCB0aGUgKmFyZ3MqIG5hbWUKKyAgIGFjdHVhbGx5IGV4ZWN1dGVkLiAgT24gUE9TSVgsIHRoZSAqYXJncyogbmFtZQogICAgYmVjb21lcyB0aGUgZGlzcGxheSBuYW1lIGZvciB0aGUgZXhlY3V0YWJsZSBpbiB1dGlsaXRpZXMgc3VjaCBhcwotICAgOnByb2dyYW06YHBzYC4gIElmIGBgc2hlbGw9VHJ1ZWBgLCBvbiBVbml4IHRoZSAqZXhlY3V0YWJsZSogYXJndW1lbnQKKyAgIDpwcm9ncmFtOmBwc2AuICBJZiBgYHNoZWxsPVRydWVgYCwgb24gUE9TSVggdGhlICpleGVjdXRhYmxlKiBhcmd1bWVudAogICAgc3BlY2lmaWVzIGEgcmVwbGFjZW1lbnQgc2hlbGwgZm9yIHRoZSBkZWZhdWx0IDpmaWxlOmAvYmluL3NoYC4KIAogICAgKnN0ZGluKiwgKnN0ZG91dCogYW5kICpzdGRlcnIqIHNwZWNpZnkgdGhlIGV4ZWN1dGVkIHByb2dyYW0ncyBzdGFuZGFyZCBpbnB1dCwKQEAgLTQ3MSw3ICs0NDMsNyBAQAogCiAgICBJZiAqcHJlZXhlY19mbiogaXMgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LCB0aGlzIG9iamVjdCB3aWxsIGJlIGNhbGxlZCBpbiB0aGUKICAgIGNoaWxkIHByb2Nlc3MganVzdCBiZWZvcmUgdGhlIGNoaWxkIGlzIGV4ZWN1dGVkLgotICAgKFVuaXggb25seSkKKyAgIChQT1NJWCBvbmx5KQogCiAgICAuLiB3YXJuaW5nOjoKIApAQCAtNDg5LDggKzQ2MSw4IEBACiAgICAgICBjb21tb24gdXNlIG9mICpwcmVleGVjX2ZuKiB0byBjYWxsIG9zLnNldHNpZCgpIGluIHRoZSBjaGlsZC4KIAogICAgSWYgKmNsb3NlX2ZkcyogaXMgdHJ1ZSwgYWxsIGZpbGUgZGVzY3JpcHRvcnMgZXhjZXB0IDpjb25zdDpgMGAsIDpjb25zdDpgMWAgYW5kCi0gICA6Y29uc3Q6YDJgIHdpbGwgYmUgY2xvc2VkIGJlZm9yZSB0aGUgY2hpbGQgcHJvY2VzcyBpcyBleGVjdXRlZC4gKFVuaXggb25seSkuCi0gICBUaGUgZGVmYXVsdCB2YXJpZXMgYnkgcGxhdGZvcm06ICBBbHdheXMgdHJ1ZSBvbiBVbml4LiAgT24gV2luZG93cyBpdCBpcworICAgOmNvbnN0OmAyYCB3aWxsIGJlIGNsb3NlZCBiZWZvcmUgdGhlIGNoaWxkIHByb2Nlc3MgaXMgZXhlY3V0ZWQuIChQT1NJWCBvbmx5KS4KKyAgIFRoZSBkZWZhdWx0IHZhcmllcyBieSBwbGF0Zm9ybTogIEFsd2F5cyB0cnVlIG9uIFBPU0lYLiAgT24gV2luZG93cyBpdCBpcwogICAgdHJ1ZSB3aGVuICpzdGRpbiovKnN0ZG91dCovKnN0ZGVyciogYXJlIDpjb25zdDpgTm9uZWAsIGZhbHNlIG90aGVyd2lzZS4KICAgIE9uIFdpbmRvd3MsIGlmICpjbG9zZV9mZHMqIGlzIHRydWUgdGhlbiBubyBoYW5kbGVzIHdpbGwgYmUgaW5oZXJpdGVkIGJ5IHRoZQogICAgY2hpbGQgcHJvY2Vzcy4gIE5vdGUgdGhhdCBvbiBXaW5kb3dzLCB5b3UgY2Fubm90IHNldCAqY2xvc2VfZmRzKiB0byB0cnVlIGFuZApAQCAtNTAyLDcgKzQ3NCw3IEBACiAKICAgICpwYXNzX2ZkcyogaXMgYW4gb3B0aW9uYWwgc2VxdWVuY2Ugb2YgZmlsZSBkZXNjcmlwdG9ycyB0byBrZWVwIG9wZW4KICAgIGJldHdlZW4gdGhlIHBhcmVudCBhbmQgY2hpbGQuICBQcm92aWRpbmcgYW55ICpwYXNzX2ZkcyogZm9yY2VzCi0gICAqY2xvc2VfZmRzKiB0byBiZSA6Y29uc3Q6YFRydWVgLiAgKFVuaXggb25seSkKKyAgICpjbG9zZV9mZHMqIHRvIGJlIDpjb25zdDpgVHJ1ZWAuICAoUE9TSVggb25seSkKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAgICAgICBUaGUgKnBhc3NfZmRzKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgpAQCAtNTE1LDEzICs0ODcsMTMgQEAKICAgIElmICpyZXN0b3JlX3NpZ25hbHMqIGlzIHRydWUgKHRoZSBkZWZhdWx0KSBhbGwgc2lnbmFscyB0aGF0IFB5dGhvbiBoYXMgc2V0IHRvCiAgICBTSUdfSUdOIGFyZSByZXN0b3JlZCB0byBTSUdfREZMIGluIHRoZSBjaGlsZCBwcm9jZXNzIGJlZm9yZSB0aGUgZXhlYy4KICAgIEN1cnJlbnRseSB0aGlzIGluY2x1ZGVzIHRoZSBTSUdQSVBFLCBTSUdYRlogYW5kIFNJR1hGU1ogc2lnbmFscy4KLSAgIChVbml4IG9ubHkpCisgICAoUE9TSVggb25seSkKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpyZXN0b3JlX3NpZ25hbHMqIHdhcyBhZGRlZC4KIAogICAgSWYgKnN0YXJ0X25ld19zZXNzaW9uKiBpcyB0cnVlIHRoZSBzZXRzaWQoKSBzeXN0ZW0gY2FsbCB3aWxsIGJlIG1hZGUgaW4gdGhlCi0gICBjaGlsZCBwcm9jZXNzIHByaW9yIHRvIHRoZSBleGVjdXRpb24gb2YgdGhlIHN1YnByb2Nlc3MuICAoVW5peCBvbmx5KQorICAgY2hpbGQgcHJvY2VzcyBwcmlvciB0byB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzdWJwcm9jZXNzLiAgKFBPU0lYIG9ubHkpCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAqc3RhcnRfbmV3X3Nlc3Npb24qIHdhcyBhZGRlZC4KQEAgLTU4OCwxNCArNTYwLDIxIEBACiAgICAgICBUaGUgOmV4YzpgU3VicHJvY2Vzc0Vycm9yYCBiYXNlIGNsYXNzIHdhcyBhZGRlZC4KIAogCi1TZWN1cml0eQotXl5eXl5eXl4KK1NlY3VyaXR5IENvbnNpZGVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Vbmxpa2Ugc29tZSBvdGhlciBwb3BlbiBmdW5jdGlvbnMsIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBuZXZlciBjYWxsIGEKLXN5c3RlbSBzaGVsbCBpbXBsaWNpdGx5LiAgVGhpcyBtZWFucyB0aGF0IGFsbCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgc2hlbGwKLW1ldGFjaGFyYWN0ZXJzLCBjYW4gc2FmZWx5IGJlIHBhc3NlZCB0byBjaGlsZCBwcm9jZXNzZXMuIE9idmlvdXNseSwgaWYgdGhlCi1zaGVsbCBpcyBpbnZva2VkIGV4cGxpY2l0bHksIHRoZW4gaXQgaXMgdGhlIGFwcGxpY2F0aW9uJ3MgcmVzcG9uc2liaWxpdHkgdG8KLWVuc3VyZSB0aGF0IGFsbCB3aGl0ZXNwYWNlIGFuZCBtZXRhY2hhcmFjdGVycyBhcmUgcXVvdGVkIGFwcHJvcHJpYXRlbHkuCitVbmxpa2Ugc29tZSBvdGhlciBwb3BlbiBmdW5jdGlvbnMsIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBuZXZlcgoraW1wbGljaXRseSBjYWxsIGEgc3lzdGVtIHNoZWxsLiAgVGhpcyBtZWFucyB0aGF0IGFsbCBjaGFyYWN0ZXJzLAoraW5jbHVkaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLCBjYW4gc2FmZWx5IGJlIHBhc3NlZCB0byBjaGlsZCBwcm9jZXNzZXMuCitJZiB0aGUgc2hlbGwgaXMgaW52b2tlZCBleHBsaWNpdGx5LCB2aWEgYGBzaGVsbD1UcnVlYGAsIGl0IGlzIHRoZSBhcHBsaWNhdGlvbidzCityZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBhbGwgd2hpdGVzcGFjZSBhbmQgbWV0YWNoYXJhY3RlcnMgYXJlCitxdW90ZWQgYXBwcm9wcmlhdGVseSB0byBhdm9pZAorYHNoZWxsIGluamVjdGlvbiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGVsbF9pbmplY3Rpb24jU2hlbGxfaW5qZWN0aW9uPmBfCit2dWxuZXJhYmlsaXRpZXMuCisKK1doZW4gdXNpbmcgYGBzaGVsbD1UcnVlYGAsIHRoZSA6ZnVuYzpgc2hsZXgucXVvdGVgIGZ1bmN0aW9uIGNhbiBiZQordXNlZCB0byBwcm9wZXJseSBlc2NhcGUgd2hpdGVzcGFjZSBhbmQgc2hlbGwgbWV0YWNoYXJhY3RlcnMgaW4gc3RyaW5ncwordGhhdCBhcmUgZ29pbmcgdG8gYmUgdXNlZCB0byBjb25zdHJ1Y3Qgc2hlbGwgY29tbWFuZHMuCiAKIAogUG9wZW4gT2JqZWN0cwpAQCAtNjE5LDE2ICs1OTgsMjcgQEAKICAgIDpleGM6YFRpbWVvdXRFeHBpcmVkYCBleGNlcHRpb24uICBJdCBpcyBzYWZlIHRvIGNhdGNoIHRoaXMgZXhjZXB0aW9uIGFuZAogICAgcmV0cnkgdGhlIHdhaXQuCiAKLSAgIC4uIHdhcm5pbmc6OgorICAgLi4gbm90ZTo6CiAKLSAgICAgIFRoaXMgd2lsbCBkZWFkbG9jayB3aGVuIHVzaW5nIGBgc3Rkb3V0PVBJUEVgYCBhbmQvb3IKLSAgICAgIGBgc3RkZXJyPVBJUEVgYCBhbmQgdGhlIGNoaWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8KLSAgICAgIGEgcGlwZSBzdWNoIHRoYXQgaXQgYmxvY2tzIHdhaXRpbmcgZm9yIHRoZSBPUyBwaXBlIGJ1ZmZlciB0bwotICAgICAgYWNjZXB0IG1vcmUgZGF0YS4gIFVzZSA6bWV0aDpgY29tbXVuaWNhdGVgIHRvIGF2b2lkIHRoYXQuCisgICAgICBUaGlzIHdpbGwgZGVhZGxvY2sgd2hlbiB1c2luZyBgYHN0ZG91dD1QSVBFYGAgb3IgYGBzdGRlcnI9UElQRWBgCisgICAgICBhbmQgdGhlIGNoaWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gYSBwaXBlIHN1Y2ggdGhhdAorICAgICAgaXQgYmxvY2tzIHdhaXRpbmcgZm9yIHRoZSBPUyBwaXBlIGJ1ZmZlciB0byBhY2NlcHQgbW9yZSBkYXRhLgorICAgICAgVXNlIDptZXRoOmBQb3Blbi5jb21tdW5pY2F0ZWAgd2hlbiB1c2luZyBwaXBlcyB0byBhdm9pZCB0aGF0LgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgYnVzeSBsb29wIChub24tYmxvY2tpbmcgY2FsbCBhbmQKKyAgICAgIHNob3J0IHNsZWVwcykuIFVzZSB0aGUgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIGZvciBhbiBhc3luY2hyb25vdXMgd2FpdDoKKyAgICAgIHNlZSA6Y2xhc3M6YGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlY2AuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisKKyAgICAgIERvIG5vdCB1c2UgdGhlICplbmR0aW1lKiBwYXJhbWV0ZXIuICBJdCBpcyB3YXMgdW5pbnRlbnRpb25hbGx5CisgICAgICBleHBvc2VkIGluIDMuMyBidXQgd2FzIGxlZnQgdW5kb2N1bWVudGVkIGFzIGl0IHdhcyBpbnRlbmRlZCB0byBiZQorICAgICAgcHJpdmF0ZSBmb3IgaW50ZXJuYWwgdXNlLiAgVXNlICp0aW1lb3V0KiBpbnN0ZWFkLgogCiAuLiBtZXRob2Q6OiBQb3Blbi5jb21tdW5pY2F0ZShpbnB1dD1Ob25lLCB0aW1lb3V0PU5vbmUpCiAKQEAgLTY5NSwxMyArNjg1LDYgQEAKIAogVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBhbHNvIGF2YWlsYWJsZToKIAotLi4gd2FybmluZzo6Ci0KLSAgIFVzZSA6bWV0aDpgflBvcGVuLmNvbW11bmljYXRlYCByYXRoZXIgdGhhbiA6YXR0cjpgLnN0ZGluLndyaXRlIDxQb3Blbi5zdGRpbj5gLAotICAgOmF0dHI6YC5zdGRvdXQucmVhZCA8UG9wZW4uc3Rkb3V0PmAgb3IgOmF0dHI6YC5zdGRlcnIucmVhZCA8UG9wZW4uc3RkZXJyPmAgdG8gYXZvaWQKLSAgIGRlYWRsb2NrcyBkdWUgdG8gYW55IG9mIHRoZSBvdGhlciBPUyBwaXBlIGJ1ZmZlcnMgZmlsbGluZyB1cCBhbmQgYmxvY2tpbmcgdGhlCi0gICBjaGlsZCBwcm9jZXNzLgotCiAuLiBhdHRyaWJ1dGU6OiBQb3Blbi5hcmdzCiAKICAgIFRoZSAqYXJncyogYXJndW1lbnQgYXMgaXQgd2FzIHBhc3NlZCB0byA6Y2xhc3M6YFBvcGVuYCAtLSBhCkBAIC03MzUsNiArNzE4LDEzIEBACiAgICBgYFRydWVgYCwgdGhlIHN0cmVhbSBpcyBhIHRleHQgc3RyZWFtLCBvdGhlcndpc2UgaXQgaXMgYSBieXRlIHN0cmVhbS4gSWYgdGhlCiAgICAqc3RkZXJyKiBhcmd1bWVudCB3YXMgbm90IDpkYXRhOmBQSVBFYCwgdGhpcyBhdHRyaWJ1dGUgaXMgYGBOb25lYGAuCiAKKy4uIHdhcm5pbmc6OgorCisgICBVc2UgOm1ldGg6YH5Qb3Blbi5jb21tdW5pY2F0ZWAgcmF0aGVyIHRoYW4gOmF0dHI6YC5zdGRpbi53cml0ZSA8UG9wZW4uc3RkaW4+YCwKKyAgIDphdHRyOmAuc3Rkb3V0LnJlYWQgPFBvcGVuLnN0ZG91dD5gIG9yIDphdHRyOmAuc3RkZXJyLnJlYWQgPFBvcGVuLnN0ZGVycj5gIHRvIGF2b2lkCisgICBkZWFkbG9ja3MgZHVlIHRvIGFueSBvZiB0aGUgb3RoZXIgT1MgcGlwZSBidWZmZXJzIGZpbGxpbmcgdXAgYW5kIGJsb2NraW5nIHRoZQorICAgY2hpbGQgcHJvY2Vzcy4KKwogCiAuLiBhdHRyaWJ1dGU6OiBQb3Blbi5waWQKIApAQCAtNzUxLDcgKzc0MSw3IEBACiAgICBoYXNuJ3QgdGVybWluYXRlZCB5ZXQuCiAKICAgIEEgbmVnYXRpdmUgdmFsdWUgYGAtTmBgIGluZGljYXRlcyB0aGF0IHRoZSBjaGlsZCB3YXMgdGVybWluYXRlZCBieSBzaWduYWwKLSAgIGBgTmBgIChVbml4IG9ubHkpLgorICAgYGBOYGAgKFBPU0lYIG9ubHkpLgogCiAKIFdpbmRvd3MgUG9wZW4gSGVscGVycwpAQCAtODQ3LDggKzgzNyw2IEBACiAgICBUaGUgbmV3IHByb2Nlc3MgaGFzIGEgbmV3IGNvbnNvbGUsIGluc3RlYWQgb2YgaW5oZXJpdGluZyBpdHMgcGFyZW50J3MKICAgIGNvbnNvbGUgKHRoZSBkZWZhdWx0KS4KIAotICAgVGhpcyBmbGFnIGlzIGFsd2F5cyBzZXQgd2hlbiA6Y2xhc3M6YFBvcGVuYCBpcyBjcmVhdGVkIHdpdGggYGBzaGVsbD1UcnVlYGAuCi0KIC4uIGRhdGE6OiBDUkVBVEVfTkVXX1BST0NFU1NfR1JPVVAKIAogICAgQSA6Y2xhc3M6YFBvcGVuYCBgYGNyZWF0aW9uZmxhZ3NgYCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGF0IGEgbmV3IHByb2Nlc3MKQEAgLTEwMjUsNyArMTAxMyw3IEBACiAKICAgIChjaGlsZF9zdGRvdXQsIGNoaWxkX3N0ZGluKSA9IHBvcGVuMi5wb3BlbjIoInNvbWVzdHJpbmciLCBidWZzaXplLCBtb2RlKQogICAgPT0+Ci0gICBwID0gUG9wZW4oWyJzb21lc3RyaW5nIl0sIHNoZWxsPVRydWUsIGJ1ZnNpemU9YnVmc2l6ZSwKKyAgIHAgPSBQb3Blbigic29tZXN0cmluZyIsIHNoZWxsPVRydWUsIGJ1ZnNpemU9YnVmc2l6ZSwKICAgICAgICAgICAgICBzdGRpbj1QSVBFLCBzdGRvdXQ9UElQRSwgY2xvc2VfZmRzPVRydWUpCiAgICAoY2hpbGRfc3Rkb3V0LCBjaGlsZF9zdGRpbikgPSAocC5zdGRvdXQsIHAuc3RkaW4pCiAKQEAgLTEwNjMsOSArMTA1MSw5IEBACiAKICAgIFJldHVybiBgYChzdGF0dXMsIG91dHB1dClgYCBvZiBleGVjdXRpbmcgKmNtZCogaW4gYSBzaGVsbC4KIAotICAgRXhlY3V0ZSB0aGUgc3RyaW5nICpjbWQqIGluIGEgc2hlbGwgd2l0aCA6Y2xhc3M6YFBvcGVuYCBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgYGAoc3RhdHVzLCBvdXRwdXQpYGAgdmlhIDpmdW5jOmBQb3Blbi5jb21tdW5pY2F0ZWAuIFVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlCi0gICBpcyB1c2VkOyBzZWUgdGhlIG5vdGVzIG9uIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIGZvciBtb3JlIGRldGFpbHMuCisgICBFeGVjdXRlIHRoZSBzdHJpbmcgKmNtZCogaW4gYSBzaGVsbCB3aXRoIDptZXRoOmBQb3Blbi5jaGVja19vdXRwdXRgIGFuZAorICAgcmV0dXJuIGEgMi10dXBsZSBgYChzdGF0dXMsIG91dHB1dClgYC4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXMgdXNlZDsKKyAgIHNlZSB0aGUgbm90ZXMgb24gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4KICAgIFRoZSBleGl0IHN0YXR1cyBmb3IgdGhlIGNvbW1hbmQgY2FuIGJlIGludGVycHJldGVkCkBAIC0xMDc4LDcgKzEwNjYsNyBAQAogICAgICAgPj4+IHN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0KCcvYmluL2p1bmsnKQogICAgICAgKDI1NiwgJ3NoOiAvYmluL2p1bms6IG5vdCBmb3VuZCcpCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCAmIFdpbmRvd3MKKyAgIEF2YWlsYWJpbGl0eTogUE9TSVggJiBXaW5kb3dzCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjQKICAgICAgIFdpbmRvd3Mgc3VwcG9ydCBhZGRlZApAQCAtMTA5NCw3ICsxMDgyLDcgQEAKICAgICAgID4+PiBzdWJwcm9jZXNzLmdldG91dHB1dCgnbHMgL2Jpbi9scycpCiAgICAgICAnL2Jpbi9scycKIAotICAgQXZhaWxhYmlsaXR5OiBVbml4ICYgV2luZG93cworICAgQXZhaWxhYmlsaXR5OiBQT1NJWCAmIFdpbmRvd3MKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuNAogICAgICAgV2luZG93cyBzdXBwb3J0IGFkZGVkCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdW5hdS5yc3QgYi9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKaW5kZXggNGJkYjk5Yi4uYTk0YWUwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3VuYXUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N1bmF1LnJzdApAQCAtMTUwLDggKzE1MCw5IEBACiAKIC4uIG1ldGhvZDo6IEFVX3JlYWQuZ2V0cGFyYW1zKCkKIAotICAgUmV0dXJucyBhIHR1cGxlIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLCBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLAotICAgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZSA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCisgICBSZXR1cm5zIGEgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwKKyAgIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUKKyAgIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KIAogCiAuLiBtZXRob2Q6OiBBVV9yZWFkLnJlYWRmcmFtZXMobikKQEAgLTIxMSw2ICsyMTIsOSBAQAogCiAgICBTZXQgdGhlIHNhbXBsZSB3aWR0aCAoaW4gYnl0ZXMuKQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgMjQtYml0IHNhbXBsZXMuCisKIAogLi4gbWV0aG9kOjogQVVfd3JpdGUuc2V0ZnJhbWVyYXRlKG4pCiAKQEAgLTI0NiwxMSArMjUwLDE3IEBACiAKICAgIFdyaXRlIGF1ZGlvIGZyYW1lcywgd2l0aG91dCBjb3JyZWN0aW5nICpuZnJhbWVzKi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS53cml0ZWZyYW1lcyhkYXRhKQogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5cy5yc3QgYi9Eb2MvbGlicmFyeS9zeXMucnN0CmluZGV4IDM2YzYwOGMuLmJlZTMwOWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3lzLnJzdApAQCAtMTIsMTEgKzEyLDEyIEBACiAKIC4uIGRhdGE6OiBhYmlmbGFncwogCi0gICBPbiBQT1NJWCBzeXN0ZW1zIHdoZXJlIFB5dGhvbiBpcyBidWlsZCB3aXRoIHRoZSBzdGFuZGFyZCBgYGNvbmZpZ3VyZWBgCisgICBPbiBQT1NJWCBzeXN0ZW1zIHdoZXJlIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCB0aGUgc3RhbmRhcmQgYGBjb25maWd1cmVgYAogICAgc2NyaXB0LCB0aGlzIGNvbnRhaW5zIHRoZSBBQkkgZmxhZ3MgYXMgc3BlY2lmaWVkIGJ5IDpwZXA6YDMxNDlgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorCiAuLiBkYXRhOjogYXJndgogCiAgICBUaGUgbGlzdCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHBhc3NlZCB0byBhIFB5dGhvbiBzY3JpcHQuIGBgYXJndlswXWBgIGlzIHRoZQpAQCAtMzgyLDYgKzM4MywyMSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorLi4gZnVuY3Rpb246OiBnZXRhbGxvY2F0ZWRibG9ja3MoKQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnkgdGhlIGludGVycHJldGVyLAorICAgcmVnYXJkbGVzcyBvZiB0aGVpciBzaXplLiAgVGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgdXNlZnVsIGZvciB0cmFja2luZworICAgYW5kIGRlYnVnZ2luZyBtZW1vcnkgbGVha3MuICBCZWNhdXNlIG9mIHRoZSBpbnRlcnByZXRlcidzIGludGVybmFsCisgICBjYWNoZXMsIHRoZSByZXN1bHQgY2FuIHZhcnkgZnJvbSBjYWxsIHRvIGNhbGw7IHlvdSBtYXkgaGF2ZSB0byBjYWxsCisgICA6ZnVuYzpgX2NsZWFyX3R5cGVfY2FjaGUoKWAgYW5kIDpmdW5jOmBnYy5jb2xsZWN0KClgIHRvIGdldCBtb3JlCisgICBwcmVkaWN0YWJsZSByZXN1bHRzLgorCisgICBJZiBhIFB5dGhvbiBidWlsZCBvciBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgcmVhc29uYWJseSBjb21wdXRlIHRoaXMKKyAgIGluZm9ybWF0aW9uLCA6ZnVuYzpgZ2V0YWxsb2NhdGVkYmxvY2tzKClgIGlzIGFsbG93ZWQgdG8gcmV0dXJuIDAgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBnZXRjaGVja2ludGVydmFsKCkKIAogICAgUmV0dXJuIHRoZSBpbnRlcnByZXRlcidzICJjaGVjayBpbnRlcnZhbCI7IHNlZSA6ZnVuYzpgc2V0Y2hlY2tpbnRlcnZhbGAuCkBAIC0zOTgsOSArNDE0LDEwIEBACiAKIC4uIGZ1bmN0aW9uOjogZ2V0ZGxvcGVuZmxhZ3MoKQogCi0gICBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZsYWdzIHRoYXQgYXJlIHVzZWQgZm9yIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMuCi0gICBUaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIDptb2Q6YGN0eXBlc2AgYW5kIDptb2Q6YERMRkNOYCBtb2R1bGVzLgotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorICAgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvcgorICAgOmM6ZnVuYzpgZGxvcGVuYCBjYWxscy4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyB2YWx1ZXMgY2FuIGJlCisgICBmb3VuZCBpbiB0aGUgOm1vZDpgb3NgIG1vZHVsZSAoYGBSVExEX3h4eGBgIGNvbnN0YW50cywgZS5nLgorICAgOmRhdGE6YG9zLlJUTERfTEFaWWApLiAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKQEAgLTU3OSw5ICs1OTYsMjAgQEAKICAgIHwgOmNvbnN0OmBpbWFnYCAgICAgICB8IG11bHRpcGxpZXIgdXNlZCBmb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgICAgfCBjb21wbGV4IG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBhbGdvcml0aG1gICB8IG5hbWUgb2YgdGhlIGFsZ29yaXRobSBmb3IgaGFzaGluZyBvZiBzdHIsIGJ5dGVzLCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgfCBhbmQgbWVtb3J5dmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBoYXNoX2JpdHNgICB8IGludGVybmFsIG91dHB1dCBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YHNlZWRfYml0c2AgIHwgc2l6ZSBvZiB0aGUgc2VlZCBrZXkgb2YgdGhlIGhhc2ggYWxnb3JpdGhtICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCAqYWxnb3JpdGhtKiwgKmhhc2hfYml0cyogYW5kICpzZWVkX2JpdHMqCisKIAogLi4gZGF0YTo6IGhleHZlcnNpb24KIApAQCAtNjY1LDYgKzY5MywxNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorLi4gZGF0YTo6IF9faW50ZXJhY3RpdmVob29rX18KKworICAgV2hlbiB0aGlzIGF0dHJpYnV0ZSBleGlzdHMsIGl0cyB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCAod2l0aCBubworICAgYXJndW1lbnRzKSB3aGVuIHRoZSBpbnRlcnByZXRlciBpcyBsYXVuY2hlZCBpbiA6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlCisgICA8dHV0LWludGVyYWN0aXZlPmAuICBUaGlzIGlzIGRvbmUgYWZ0ZXIgdGhlIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUgaXMKKyAgIHJlYWQsIHNvIHRoYXQgeW91IGNhbiBzZXQgdGhpcyBob29rIHRoZXJlLiAgVGhlIDptb2Q6YHNpdGVgIG1vZHVsZQorICAgOnJlZjpgc2V0cyB0aGlzIDxybGNvbXBsZXRlci1jb25maWc+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBpbnRlcm4oc3RyaW5nKQogCiAgICBFbnRlciAqc3RyaW5nKiBpbiB0aGUgdGFibGUgb2YgImludGVybmVkIiBzdHJpbmdzIGFuZCByZXR1cm4gdGhlIGludGVybmVkIHN0cmluZwpAQCAtODEyLDggKzg1MSw2IEBACiAgICBXaW5kb3dzICAgICAgICAgIGBgJ3dpbjMyJ2BgCiAgICBXaW5kb3dzL0N5Z3dpbiAgIGBgJ2N5Z3dpbidgYAogICAgTWFjIE9TIFggICAgICAgICBgYCdkYXJ3aW4nYGAKLSAgIE9TLzIgICAgICAgICAgICAgYGAnb3MyJ2BgCi0gICBPUy8yIEVNWCAgICAgICAgIGBgJ29zMmVteCdgYAogICAgPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKQEAgLTg4NCw3ICs5MjEsNyBAQAogICAgdGhlIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlIGEKICAgIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhcwogICAgYGBzeXMuc2V0ZGxvcGVuZmxhZ3MoMClgYC4gIFRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzCi0gICBgYHN5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTClgYC4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyBtb2R1bGVzCisgICBgYHN5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTClgYC4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyB2YWx1ZXMKICAgIGNhbiBiZSBmb3VuZCBpbiB0aGUgOm1vZDpgb3NgIG1vZHVsZSAoYGBSVExEX3h4eGBgIGNvbnN0YW50cywgZS5nLgogICAgOmRhdGE6YG9zLlJUTERfTEFaWWApLgogCkBAIC0xMDI5LDggKzEwNjYsOSBAQAogICAgICBzdGF0ZW1lbnRzIGFuZCBmb3IgdGhlIHByb21wdHMgb2YgOmZ1bmM6YGlucHV0YDsKICAgICogVGhlIGludGVycHJldGVyJ3Mgb3duIHByb21wdHMgYW5kIGl0cyBlcnJvciBtZXNzYWdlcyBnbyB0byBgYHN0ZGVycmBgLgogCi0gICBCeSBkZWZhdWx0LCB0aGVzZSBzdHJlYW1zIGFyZSByZWd1bGFyIHRleHQgc3RyZWFtcyBhcyByZXR1cm5lZCBieSB0aGUKLSAgIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIFRoZWlyIHBhcmFtZXRlcnMgYXJlIGNob3NlbiBhcyBmb2xsb3dzOgorICAgVGhlc2Ugc3RyZWFtcyBhcmUgcmVndWxhciA6dGVybTpgdGV4dCBmaWxlcyA8dGV4dCBmaWxlPmAgbGlrZSB0aG9zZQorICAgcmV0dXJuZWQgYnkgdGhlIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIFRoZWlyIHBhcmFtZXRlcnMgYXJlIGNob3NlbiBhcworICAgZm9sbG93czoKIAogICAgKiBUaGUgY2hhcmFjdGVyIGVuY29kaW5nIGlzIHBsYXRmb3JtLWRlcGVuZGVudC4gIFVuZGVyIFdpbmRvd3MsIGlmIHRoZSBzdHJlYW0KICAgICAgaXMgaW50ZXJhY3RpdmUgKHRoYXQgaXMsIGlmIGl0cyA6bWV0aDpgaXNhdHR5YCBtZXRob2QgcmV0dXJucyBgYFRydWVgYCksIHRoZQpAQCAtMTAzOCwyNiArMTA3NiwyMiBAQAogICAgICBwbGF0Zm9ybXMsIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMgdXNlZCAoc2VlIDptZXRoOmBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmdgKS4KIAogICAgICBVbmRlciBhbGwgcGxhdGZvcm1zIHRob3VnaCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIHZhbHVlIGJ5IHNldHRpbmcgdGhlCi0gICAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICA6ZW52dmFyOmBQWVRIT05JT0VOQ09ESU5HYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgc3RhcnRpbmcgUHl0aG9uLgogCiAgICAqIFdoZW4gaW50ZXJhY3RpdmUsIHN0YW5kYXJkIHN0cmVhbXMgYXJlIGxpbmUtYnVmZmVyZWQuICBPdGhlcndpc2UsIHRoZXkKICAgICAgYXJlIGJsb2NrLWJ1ZmZlcmVkIGxpa2UgcmVndWxhciB0ZXh0IGZpbGVzLiAgWW91IGNhbiBvdmVycmlkZSB0aGlzCiAgICAgIHZhbHVlIHdpdGggdGhlIDpvcHRpb246YC11YCBjb21tYW5kLWxpbmUgb3B0aW9uLgogCi0gICBUbyB3cml0ZSBvciByZWFkIGJpbmFyeSBkYXRhIGZyb20vdG8gdGhlIHN0YW5kYXJkIHN0cmVhbXMsIHVzZSB0aGUKLSAgIHVuZGVybHlpbmcgYmluYXJ5IDpkYXRhOmB+aW8uVGV4dElPQmFzZS5idWZmZXJgLiAgRm9yIGV4YW1wbGUsIHRvIHdyaXRlCi0gICBieXRlcyB0byA6ZGF0YTpgc3Rkb3V0YCwgdXNlIGBgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUoYidhYmMnKWBgLiAgVXNpbmcKLSAgIDptZXRoOmBpby5UZXh0SU9CYXNlLmRldGFjaGAsIHN0cmVhbXMgY2FuIGJlIG1hZGUgYmluYXJ5IGJ5IGRlZmF1bHQuICBUaGlzCi0gICBmdW5jdGlvbiBzZXRzIDpkYXRhOmBzdGRpbmAgYW5kIDpkYXRhOmBzdGRvdXRgIHRvIGJpbmFyeTo6CisgICAuLiBub3RlOjoKIAotICAgICAgZGVmIG1ha2Vfc3RyZWFtc19iaW5hcnkoKToKLSAgICAgICAgICBzeXMuc3RkaW4gPSBzeXMuc3RkaW4uZGV0YWNoKCkKLSAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZG91dC5kZXRhY2goKQorICAgICAgVG8gd3JpdGUgb3IgcmVhZCBiaW5hcnkgZGF0YSBmcm9tL3RvIHRoZSBzdGFuZGFyZCBzdHJlYW1zLCB1c2UgdGhlCisgICAgICB1bmRlcmx5aW5nIGJpbmFyeSA6ZGF0YTpgfmlvLlRleHRJT0Jhc2UuYnVmZmVyYCBvYmplY3QuICBGb3IgZXhhbXBsZSwgdG8KKyAgICAgIHdyaXRlIGJ5dGVzIHRvIDpkYXRhOmBzdGRvdXRgLCB1c2UgYGBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShiJ2FiYycpYGAuCiAKLSAgIE5vdGUgdGhhdCB0aGUgc3RyZWFtcyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBvYmplY3RzIChsaWtlIDpjbGFzczpgaW8uU3RyaW5nSU9gKQotICAgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGUgOmF0dHI6YH5pby5CdWZmZXJlZElPQmFzZS5idWZmZXJgIGF0dHJpYnV0ZSBvciB0aGUKLSAgIDptZXRoOmB+aW8uQnVmZmVyZWRJT0Jhc2UuZGV0YWNoYCBtZXRob2QgYW5kIGNhbiByYWlzZSA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAKLSAgIG9yIDpleGM6YGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uYC4KKyAgICAgIEhvd2V2ZXIsIGlmIHlvdSBhcmUgd3JpdGluZyBhIGxpYnJhcnkgKGFuZCBkbyBub3QgY29udHJvbCBpbiB3aGljaAorICAgICAgY29udGV4dCBpdHMgY29kZSB3aWxsIGJlIGV4ZWN1dGVkKSwgYmUgYXdhcmUgdGhhdCB0aGUgc3RhbmRhcmQgc3RyZWFtcworICAgICAgbWF5IGJlIHJlcGxhY2VkIHdpdGggZmlsZS1saWtlIG9iamVjdHMgbGlrZSA6Y2xhc3M6YGlvLlN0cmluZ0lPYCB3aGljaAorICAgICAgZG8gbm90IHN1cHBvcnQgdGhlIDphdHRyOmB+aW8uQnVmZmVyZWRJT0Jhc2UuYnVmZmVyYCBhdHRyaWJ1dGUuCiAKIAogLi4gZGF0YTo6IF9fc3RkaW5fXwpAQCAtMTA5NCw3ICsxMTI4LDYgQEAKICAgIHwgOmNvbnN0OmBuYW1lYCAgICB8IE5hbWUgb2YgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbjogICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdudCdgYDogV2luZG93cyB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ29zMidgYDogT1MvMiB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAncHRocmVhZCdgYDogUE9TSVggdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdzb2xhcmlzJ2BgOiBTb2xhcmlzIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdCBiL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKaW5kZXggYzQ3ZGNjZS4uNTM1YWM1NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CkBAIC04Myw4ICs4Myw2IEBACiAgIGxvY2F0ZWQgdW5kZXIgdGhlIHVzZXIgaG9tZSBkaXJlY3RvcnkuCiAtICpudCo6IHNjaGVtZSBmb3IgTlQgcGxhdGZvcm1zIGxpa2UgV2luZG93cy4KIC0gKm50X3VzZXIqOiBzY2hlbWUgZm9yIE5UIHBsYXRmb3Jtcywgd2hlbiB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLgotLSAqb3MyKjogc2NoZW1lIGZvciBPUy8yIHBsYXRmb3Jtcy4KLS0gKm9zMl9ob21lKjogc2NoZW1lIGZvciBPUy8yIHBhdGZvcm1zLCB3aGVuIHRoZSAqdXNlciogb3B0aW9uIGlzIHVzZWQuCiAKIEVhY2ggc2NoZW1lIGlzIGl0c2VsZiBjb21wb3NlZCBvZiBhIHNlcmllcyBvZiBwYXRocyBhbmQgZWFjaCBwYXRoIGhhcyBhIHVuaXF1ZQogaWRlbnRpZmllci4gIFB5dGhvbiBjdXJyZW50bHkgdXNlcyBlaWdodCBwYXRoczoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0IGIvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKaW5kZXggMWVhZDcxYy4uZDM5NTZmZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKQEAgLTgxLDYgKzgxLDEwIEBACiAgICBJZiAqZmlsZW9iaiogaXMgc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIGEgOnRlcm06YGZpbGUgb2JqZWN0YAogICAgb3BlbmVkIGluIGJpbmFyeSBtb2RlIGZvciAqbmFtZSouIEl0IGlzIHN1cHBvc2VkIHRvIGJlIGF0IHBvc2l0aW9uIDAuCiAKKyAgIEZvciBtb2RlcyBgYCd3Omd6J2BgLCBgYCdyOmd6J2BgLCBgYCd3OmJ6MidgYCwgYGAncjpiejInYGAsIDpmdW5jOmB0YXJmaWxlLm9wZW5gCisgICBhY2NlcHRzIHRoZSBrZXl3b3JkIGFyZ3VtZW50ICpjb21wcmVzc2xldmVsKiB0byBzcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvZgorICAgdGhlIGZpbGUuCisKICAgIEZvciBzcGVjaWFsIHB1cnBvc2VzLCB0aGVyZSBpcyBhIHNlY29uZCBmb3JtYXQgZm9yICptb2RlKjoKICAgIGBgJ2ZpbGVtb2RlfFtjb21wcmVzc2lvbl0nYGAuICA6ZnVuYzpgdGFyZmlsZS5vcGVuYCB3aWxsIHJldHVybiBhIDpjbGFzczpgVGFyRmlsZWAKICAgIG9iamVjdCB0aGF0IHByb2Nlc3NlcyBpdHMgZGF0YSBhcyBhIHN0cmVhbSBvZiBibG9ja3MuICBObyByYW5kb20gc2Vla2luZyB3aWxsCkBAIC0yMzQsNyArMjM4LDcgQEAKIDpyZWY6YHRhci1leGFtcGxlc2Agc2VjdGlvbiBmb3IgYSB1c2UgY2FzZS4KIAogLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4KIAogLi4gY2xhc3M6OiBUYXJGaWxlKG5hbWU9Tm9uZSwgbW9kZT0ncicsIGZpbGVvYmo9Tm9uZSwgZm9ybWF0PURFRkFVTFRfRk9STUFULCB0YXJpbmZvPVRhckluZm8sIGRlcmVmZXJlbmNlPUZhbHNlLCBpZ25vcmVfemVyb3M9RmFsc2UsIGVuY29kaW5nPUVOQ09ESU5HLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScsIHBheF9oZWFkZXJzPU5vbmUsIGRlYnVnPTAsIGVycm9ybGV2ZWw9MCkKIApAQCAtMjkyLDcgKzI5Niw3IEBACiAgICB3aWxsIGJlIGFkZGVkIGFzIGEgcGF4IGdsb2JhbCBoZWFkZXIgaWYgKmZvcm1hdCogaXMgOmNvbnN0OmBQQVhfRk9STUFUYC4KIAogCi0uLiBtZXRob2Q6OiBUYXJGaWxlLm9wZW4oLi4uKQorLi4gY2xhc3NtZXRob2Q6OiBUYXJGaWxlLm9wZW4oLi4uKQogCiAgICBBbHRlcm5hdGl2ZSBjb25zdHJ1Y3Rvci4gVGhlIDpmdW5jOmB0YXJmaWxlLm9wZW5gIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEKICAgIHNob3J0Y3V0IHRvIHRoaXMgY2xhc3NtZXRob2QuCkBAIC01MDksNyArNTEzLDcgQEAKICAgIDpjb25zdDpgQVJFR1RZUEVgLCA6Y29uc3Q6YExOS1RZUEVgLCA6Y29uc3Q6YFNZTVRZUEVgLCA6Y29uc3Q6YERJUlRZUEVgLAogICAgOmNvbnN0OmBGSUZPVFlQRWAsIDpjb25zdDpgQ09OVFRZUEVgLCA6Y29uc3Q6YENIUlRZUEVgLCA6Y29uc3Q6YEJMS1RZUEVgLAogICAgOmNvbnN0OmBHTlVUWVBFX1NQQVJTRWAuICBUbyBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdAotICAgbW9yZSBjb252ZW5pZW50bHksIHVzZSB0aGUgYGBpc18qKClgYCBtZXRob2RzIGJlbG93LgorICAgbW9yZSBjb252ZW5pZW50bHksIHVzZSB0aGUgYGBpcyooKWBgIG1ldGhvZHMgYmVsb3cuCiAKIAogLi4gYXR0cmlidXRlOjogVGFySW5mby5saW5rbmFtZQpAQCAtNTkxLDYgKzU5NSw2NyBAQAogICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgaXQgaXMgb25lIG9mIGNoYXJhY3RlciBkZXZpY2UsIGJsb2NrIGRldmljZSBvciBGSUZPLgogCiAKKy4uIF90YXJmaWxlLWNvbW1hbmRsaW5lOgorCitDb21tYW5kIExpbmUgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gaW50ZXJhY3QKK3dpdGggdGFyIGFyY2hpdmVzLgorCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgdGFyIGFyY2hpdmUsIHNwZWNpZnkgaXRzIG5hbWUgYWZ0ZXIgdGhlIDpvcHRpb246YC1jYAorb3B0aW9uIGFuZCB0aGVuIGxpc3QgdGhlIGZpbGVuYW1lKHMpIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWMgbW9udHkudGFyICBzcGFtLnR4dCBlZ2dzLnR4dAorCitQYXNzaW5nIGEgZGlyZWN0b3J5IGlzIGFsc28gYWNjZXB0YWJsZTo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1jIG1vbnR5LnRhciBsaWZlLW9mLWJyaWFuXzE5NzkvCisKK0lmIHlvdSB3YW50IHRvIGV4dHJhY3QgYSB0YXIgYXJjaGl2ZSBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdXNlCit0aGUgOm9wdGlvbjpgLWVgIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1lIG1vbnR5LnRhcgorCitZb3UgY2FuIGFsc28gZXh0cmFjdCBhIHRhciBhcmNoaXZlIGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IGJ5IHBhc3NpbmcgdGhlCitkaXJlY3RvcnkncyBuYW1lOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWUgbW9udHkudGFyICBvdGhlci1kaXIvCisKK0ZvciBhIGxpc3Qgb2YgdGhlIGZpbGVzIGluIGEgdGFyIGFyY2hpdmUsIHVzZSB0aGUgOm9wdGlvbjpgLWxgIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1sIG1vbnR5LnRhcgorCisKK0NvbW1hbmQgbGluZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBjbWRvcHRpb246OiAtbCA8dGFyZmlsZT4KKyAgICAgICAgICAgICAgIC0tbGlzdCA8dGFyZmlsZT4KKworICAgTGlzdCBmaWxlcyBpbiBhIHRhcmZpbGUuCisKKy4uIGNtZG9wdGlvbjo6IC1jIDx0YXJmaWxlPiA8c291cmNlMT4gPHNvdXJjZU4+CisgICAgICAgICAgICAgICAtLWNyZWF0ZSA8dGFyZmlsZT4gPHNvdXJjZTE+IDxzb3VyY2VOPgorCisgICBDcmVhdGUgdGFyZmlsZSBmcm9tIHNvdXJjZSBmaWxlcy4KKworLi4gY21kb3B0aW9uOjogLWUgPHRhcmZpbGU+IFs8b3V0cHV0X2Rpcj5dCisgICAgICAgICAgICAgICAtLWV4dHJhY3QgPHRhcmZpbGU+IFs8b3V0cHV0X2Rpcj5dCisKKyAgIEV4dHJhY3QgdGFyZmlsZSBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiAqb3V0cHV0X2RpciogaXMgbm90IHNwZWNpZmllZC4KKworLi4gY21kb3B0aW9uOjogLXQgPHRhcmZpbGU+CisgICAgICAgICAgICAgICAtLXRlc3QgPHRhcmZpbGU+CisKKyAgIFRlc3Qgd2hldGhlciB0aGUgdGFyZmlsZSBpcyB2YWxpZCBvciBub3QuCisKKy4uIGNtZG9wdGlvbjo6IC12LCAtLXZlcmJvc2UKKworICAgVmVyYm9zZSBvdXRwdXQKKwogLi4gX3Rhci1leGFtcGxlczoKIAogRXhhbXBsZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKaW5kZXggYzI4NTM2ZC4uN2E3MTgyYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKQEAgLTQ0MywxMyArNDQzLDYgQEAKICAgIEEgZGVjb3JhdG9yIGZvciBydW5uaW5nIHRlc3RzIHRoYXQgcmVxdWlyZSBzdXBwb3J0IGZvciBzeW1ib2xpYyBsaW5rcy4KIAogCi0uLiBmdW5jdGlvbjo6IHN1cHByZXNzX2NyYXNoX3BvcHVwKCkKLQotICAgQSBjb250ZXh0IG1hbmFnZXIgdGhhdCBkaXNhYmxlcyBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCi0gICBgU2V0RXJyb3JNb2RlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxJTI4dj12cy44NSUyOS5hc3B4PmBfLgotICAgT24gb3RoZXIgcGxhdGZvcm1zIGl0J3MgYSBuby1vcC4KLQotCiAuLiBkZWNvcmF0b3I6OiBhbnRpY2lwYXRlX2ZhaWx1cmUoY29uZGl0aW9uKQogCiAgICBBIGRlY29yYXRvciB0byBjb25kaXRpb25hbGx5IG1hcmsgdGVzdHMgd2l0aApAQCAtNDY4LDcgKzQ2MSw3IEBACiAuLiBmdW5jdGlvbjo6IG1ha2VfYmFkX2ZkKCkKIAogICAgQ3JlYXRlIGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yIGJ5IG9wZW5pbmcgYW5kIGNsb3NpbmcgYSB0ZW1wb3JhcnkgZmlsZSwKLSAgIGFuZCByZXR1cm5pbmcgaXRzIGRlc2NyaXBvci4KKyAgIGFuZCByZXR1cm5pbmcgaXRzIGRlc2NyaXB0b3IuCiAKIAogLi4gZnVuY3Rpb246OiBpbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9RmFsc2UpCkBAIC01NjEsNiArNTU0LDIxIEBACiAgICBydW4gc2ltdWx0YW5lb3VzbHksIHdoaWNoIGlzIGEgcHJvYmxlbSBmb3IgYnVpbGRib3RzLgogCiAKKy4uIGZ1bmN0aW9uOjogbG9hZF9wYWNrYWdlX3Rlc3RzKHBrZ19kaXIsIGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pCisKKyAgIEdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIDptb2Q6YHVuaXR0ZXN0YCBgYGxvYWRfdGVzdHNgYCBwcm90b2NvbCBmb3IKKyAgIHVzZSBpbiB0ZXN0IHBhY2thZ2VzLiAgKnBrZ19kaXIqIGlzIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZTsKKyAgICpsb2FkZXIqLCAqc3RhbmRhcmRfdGVzdHMqLCBhbmQgKnBhdHRlcm4qIGFyZSB0aGUgYXJndW1lbnRzIGV4cGVjdGVkIGJ5CisgICBgYGxvYWRfdGVzdHNgYC4gIEluIHNpbXBsZSBjYXNlcywgdGhlIHRlc3QgcGFja2FnZSdzIGBgX19pbml0X18ucHlgYAorICAgY2FuIGJlIHRoZSBmb2xsb3dpbmc6OgorCisgICAgICBpbXBvcnQgb3MKKyAgICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKKworICAgICAgZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgICAgICAgIHJldHVybiBsb2FkX3BhY2thZ2VfdGVzdHMob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKmFyZ3MpCisKKwogVGhlIDptb2Q6YHRlc3Quc3VwcG9ydGAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IFRyYW5zaWVudFJlc291cmNlKGV4YywgKiprd2FyZ3MpCkBAIC01OTQsNiArNjAyLDIxIEBACiAgICBUZW1wb3JhcmlseSB1bnNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBlbnZ2YXJgYC4KIAogCisuLiBjbGFzczo6IFN1cHByZXNzQ3Jhc2hSZXBvcnQoKQorCisgICBBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIHRyeSB0byBwcmV2ZW50IGNyYXNoIGRpYWxvZyBwb3B1cHMgb24gdGVzdHMgdGhhdAorICAgYXJlIGV4cGVjdGVkIHRvIGNyYXNoIGEgc3VicHJvY2Vzcy4KKworICAgT24gV2luZG93cywgaXQgZGlzYWJsZXMgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZworICAgYFNldEVycm9yTW9kZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMS5hc3B4PmBfLgorCisgICBPbiBVTklYLCA6ZnVuYzpgcmVzb3VyY2Uuc2V0cmxpbWl0YCBpcyB1c2VkIHRvIHNldAorICAgOmF0dHI6YHJlc291cmNlLlJMSU1JVF9DT1JFYCdzIHNvZnQgbGltaXQgdG8gMCB0byBwcmV2ZW50IGNvcmVkdW1wIGZpbGUKKyAgIGNyZWF0aW9uLgorCisgICBPbiBib3RoIHBsYXRmb3JtcywgdGhlIG9sZCB2YWx1ZSBpcyByZXN0b3JlZCBieSA6bWV0aDpgX19leGl0X19gLgorCisKIC4uIGNsYXNzOjogV2FybmluZ3NSZWNvcmRlcigpCiAKICAgIENsYXNzIHVzZWQgdG8gcmVjb3JkIHdhcm5pbmdzIGZvciB1bml0IHRlc3RzLiBTZWUgZG9jdW1lbnRhdGlvbiBvZgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0IGIvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CmluZGV4IGM2MjUyNTQuLmVkZjFmZDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKQEAgLTEwLDExICsxMCwxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgOm1vZDpgdGV4dHdyYXBgIG1vZHVsZSBwcm92aWRlcyB0d28gY29udmVuaWVuY2UgZnVuY3Rpb25zLCA6ZnVuYzpgd3JhcGAgYW5kCi06ZnVuYzpgZmlsbGAsIGFzIHdlbGwgYXMgOmNsYXNzOmBUZXh0V3JhcHBlcmAsIHRoZSBjbGFzcyB0aGF0IGRvZXMgYWxsIHRoZSB3b3JrLAotYW5kIHR3byB1dGlsaXR5IGZ1bmN0aW9ucywgOmZ1bmM6YGRlZGVudGAgYW5kIDpmdW5jOmBpbmRlbnRgLiAgSWYgeW91J3JlIGp1c3Qgd3JhcHBpbmcgb3IgZmlsbGluZyBvbmUKLW9yIHR3byAgdGV4dCBzdHJpbmdzLCB0aGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHNob3VsZCBiZSBnb29kIGVub3VnaDsKLW90aGVyd2lzZSwgIHlvdSBzaG91bGQgdXNlIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgVGV4dFdyYXBwZXJgIGZvciBlZmZpY2llbmN5LgorVGhlIDptb2Q6YHRleHR3cmFwYCBtb2R1bGUgcHJvdmlkZXMgc29tZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMsCithcyB3ZWxsIGFzIDpjbGFzczpgVGV4dFdyYXBwZXJgLCB0aGUgY2xhc3MgdGhhdCBkb2VzIGFsbCB0aGUgd29yay4KK0lmIHlvdSdyZSBqdXN0IHdyYXBwaW5nIG9yIGZpbGxpbmcgb25lIG9yIHR3byB0ZXh0IHN0cmluZ3MsIHRoZSBjb252ZW5pZW5jZQorZnVuY3Rpb25zIHNob3VsZCBiZSBnb29kIGVub3VnaDsgb3RoZXJ3aXNlLCB5b3Ugc2hvdWxkIHVzZSBhbiBpbnN0YW5jZSBvZgorOmNsYXNzOmBUZXh0V3JhcHBlcmAgZm9yIGVmZmljaWVuY3kuCiAKIC4uIGZ1bmN0aW9uOjogd3JhcCh0ZXh0LCB3aWR0aD03MCwgKiprd2FyZ3MpCiAKQEAgLTM5LDE5ICszOSwzMSBAQAogICAgSW4gcGFydGljdWxhciwgOmZ1bmM6YGZpbGxgIGFjY2VwdHMgZXhhY3RseSB0aGUgc2FtZSBrZXl3b3JkIGFyZ3VtZW50cyBhcwogICAgOmZ1bmM6YHdyYXBgLgogCi1Cb3RoIDpmdW5jOmB3cmFwYCBhbmQgOmZ1bmM6YGZpbGxgIHdvcmsgYnkgY3JlYXRpbmcgYSA6Y2xhc3M6YFRleHRXcmFwcGVyYAotaW5zdGFuY2UgYW5kIGNhbGxpbmcgYSBzaW5nbGUgbWV0aG9kIG9uIGl0LiAgVGhhdCBpbnN0YW5jZSBpcyBub3QgcmV1c2VkLCBzbyBmb3IKLWFwcGxpY2F0aW9ucyB0aGF0IHdyYXAvZmlsbCBtYW55IHRleHQgc3RyaW5ncywgaXQgd2lsbCBiZSBtb3JlIGVmZmljaWVudCBmb3IgeW91Ci10byBjcmVhdGUgeW91ciBvd24gOmNsYXNzOmBUZXh0V3JhcHBlcmAgb2JqZWN0LgogCi1UZXh0IGlzIHByZWZlcmFibHkgd3JhcHBlZCBvbiB3aGl0ZXNwYWNlcyBhbmQgcmlnaHQgYWZ0ZXIgdGhlIGh5cGhlbnMgaW4KLWh5cGhlbmF0ZWQgd29yZHM7IG9ubHkgdGhlbiB3aWxsIGxvbmcgd29yZHMgYmUgYnJva2VuIGlmIG5lY2Vzc2FyeSwgdW5sZXNzCi06YXR0cjpgVGV4dFdyYXBwZXIuYnJlYWtfbG9uZ193b3Jkc2AgaXMgc2V0IHRvIGZhbHNlLgorLi4gZnVuY3Rpb246OiBzaG9ydGVuKHRleHQsIHdpZHRoLCAqKmt3YXJncykKIAotVHdvIGFkZGl0aW9uYWwgdXRpbGl0eSBmdW5jdGlvbiwgOmZ1bmM6YGRlZGVudGAgYW5kIDpmdW5jOmBpbmRlbnRgLCBhcmUKLXByb3ZpZGVkIHRvIHJlbW92ZSBpbmRlbnRhdGlvbiBmcm9tIHN0cmluZ3MgdGhhdCBoYXZlIHVud2FudGVkIHdoaXRlc3BhY2UKLXRvIHRoZSBsZWZ0IG9mIHRoZSB0ZXh0IGFuZCB0byBhZGQgYW4gYXJiaXRyYXJ5IHByZWZpeCB0byBzZWxlY3RlZCBsaW5lcwotaW4gYSBibG9jayBvZiB0ZXh0LgorICAgQ29sbGFwc2UgYW5kIHRydW5jYXRlIHRoZSBnaXZlbiAqdGV4dCogdG8gZml0IGluIHRoZSBnaXZlbiAqd2lkdGgqLgorCisgICBGaXJzdCB0aGUgd2hpdGVzcGFjZSBpbiAqdGV4dCogaXMgY29sbGFwc2VkIChhbGwgd2hpdGVzcGFjZSBpcyByZXBsYWNlZCBieQorICAgc2luZ2xlIHNwYWNlcykuICBJZiB0aGUgcmVzdWx0IGZpdHMgaW4gdGhlICp3aWR0aCosIGl0IGlzIHJldHVybmVkLgorICAgT3RoZXJ3aXNlLCBlbm91Z2ggd29yZHMgYXJlIGRyb3BwZWQgZnJvbSB0aGUgZW5kIHNvIHRoYXQgdGhlIHJlbWFpbmluZyB3b3JkcworICAgcGx1cyB0aGUgOmF0dHI6YHBsYWNlaG9sZGVyYCBmaXQgd2l0aGluIDphdHRyOmB3aWR0aGA6OgorCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTEyKQorICAgICAgJ0hlbGxvIHdvcmxkIScKKyAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTEpCisgICAgICAnSGVsbG8gWy4uLl0nCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gd29ybGQiLCB3aWR0aD0xMCwgcGxhY2Vob2xkZXI9Ii4uLiIpCisgICAgICAnSGVsbG8uLi4nCisKKyAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGNvcnJlc3BvbmQgdG8gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZXMgb2YKKyAgIDpjbGFzczpgVGV4dFdyYXBwZXJgLCBkb2N1bWVudGVkIGJlbG93LiAgTm90ZSB0aGF0IHRoZSB3aGl0ZXNwYWNlIGlzCisgICBjb2xsYXBzZWQgYmVmb3JlIHRoZSB0ZXh0IGlzIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBUZXh0V3JhcHBlcmAgOm1ldGg6YGZpbGxgCisgICBmdW5jdGlvbiwgc28gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIDphdHRyOmAudGFic2l6ZWAsIDphdHRyOmAuZXhwYW5kX3RhYnNgLAorICAgOmF0dHI6YC5kcm9wX3doaXRlc3BhY2VgLCBhbmQgOmF0dHI6YC5yZXBsYWNlX3doaXRlc3BhY2VgIHdpbGwgaGF2ZSBubyBlZmZlY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZGVkZW50KHRleHQpCiAKQEAgLTEwMiw2ICsxMTQsMTYgQEAKICAgICAgICsgd29ybGQKIAogCis6ZnVuYzpgd3JhcGAsIDpmdW5jOmBmaWxsYCBhbmQgOmZ1bmM6YHNob3J0ZW5gIHdvcmsgYnkgY3JlYXRpbmcgYQorOmNsYXNzOmBUZXh0V3JhcHBlcmAgaW5zdGFuY2UgYW5kIGNhbGxpbmcgYSBzaW5nbGUgbWV0aG9kIG9uIGl0LiAgVGhhdAoraW5zdGFuY2UgaXMgbm90IHJldXNlZCwgc28gZm9yIGFwcGxpY2F0aW9ucyB0aGF0IHByb2Nlc3MgbWFueSB0ZXh0CitzdHJpbmdzIHVzaW5nIDpmdW5jOmB3cmFwYCBhbmQvb3IgOmZ1bmM6YGZpbGxgLCBpdCBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdG8KK2NyZWF0ZSB5b3VyIG93biA6Y2xhc3M6YFRleHRXcmFwcGVyYCBvYmplY3QuCisKK1RleHQgaXMgcHJlZmVyYWJseSB3cmFwcGVkIG9uIHdoaXRlc3BhY2VzIGFuZCByaWdodCBhZnRlciB0aGUgaHlwaGVucyBpbgoraHlwaGVuYXRlZCB3b3Jkczsgb25seSB0aGVuIHdpbGwgbG9uZyB3b3JkcyBiZSBicm9rZW4gaWYgbmVjZXNzYXJ5LCB1bmxlc3MKKzphdHRyOmBUZXh0V3JhcHBlci5icmVha19sb25nX3dvcmRzYCBpcyBzZXQgdG8gZmFsc2UuCisKIC4uIGNsYXNzOjogVGV4dFdyYXBwZXIoKiprd2FyZ3MpCiAKICAgIFRoZSA6Y2xhc3M6YFRleHRXcmFwcGVyYCBjb25zdHJ1Y3RvciBhY2NlcHRzIGEgbnVtYmVyIG9mIG9wdGlvbmFsIGtleXdvcmQKQEAgLTIzNSw3ICsyNTcsMjMgQEAKICAgICAgIHdhcyB0byBhbHdheXMgYWxsb3cgYnJlYWtpbmcgaHlwaGVuYXRlZCB3b3Jkcy4KIAogCi0gICA6Y2xhc3M6YFRleHRXcmFwcGVyYCBhbHNvIHByb3ZpZGVzIHR3byBwdWJsaWMgbWV0aG9kcywgYW5hbG9nb3VzIHRvIHRoZQorICAgLi4gYXR0cmlidXRlOjogbWF4X2xpbmVzCisKKyAgICAgIChkZWZhdWx0OiBgYE5vbmVgYCkgSWYgbm90IGBgTm9uZWBgLCB0aGVuIHRoZSBvdXRwdXQgd2lsbCBjb250YWluIGF0IG1vc3QKKyAgICAgICptYXhfbGluZXMqIGxpbmVzLCB3aXRoICpwbGFjZWhvbGRlciogYXBwZWFyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIG91dHB1dC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgLi4gYXR0cmlidXRlOjogcGxhY2Vob2xkZXIKKworICAgICAgKGRlZmF1bHQ6IGBgJyBbLi4uXSdgYCkgU3RyaW5nIHRoYXQgd2lsbCBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgb3V0cHV0CisgICAgICB0ZXh0IGlmIGl0IGhhcyBiZWVuIHRydW5jYXRlZC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgOmNsYXNzOmBUZXh0V3JhcHBlcmAgYWxzbyBwcm92aWRlcyBzb21lIHB1YmxpYyBtZXRob2RzLCBhbmFsb2dvdXMgdG8gdGhlCiAgICBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb25zOgogCiAgICAuLiBtZXRob2Q6OiB3cmFwKHRleHQpCkBAIC0yNTEsNCArMjg5LDMgQEAKIAogICAgICAgV3JhcHMgdGhlIHNpbmdsZSBwYXJhZ3JhcGggaW4gKnRleHQqLCBhbmQgcmV0dXJucyBhIHNpbmdsZSBzdHJpbmcKICAgICAgIGNvbnRhaW5pbmcgdGhlIHdyYXBwZWQgcGFyYWdyYXBoLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0IGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAppbmRleCA3YzMyNmQxLi5mNTlmZmU1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKQEAgLTU3LDYgKzU3LDE1IEBACiAgICBhbmQgdGhyZWFkcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHN0YXJ0ZWQuCiAKIAorLi4gZnVuY3Rpb246OiBtYWluX3RocmVhZCgpCisKKyAgIFJldHVybiB0aGUgbWFpbiA6Y2xhc3M6YFRocmVhZGAgb2JqZWN0LiAgSW4gbm9ybWFsIGNvbmRpdGlvbnMsIHRoZQorICAgbWFpbiB0aHJlYWQgaXMgdGhlIHRocmVhZCBmcm9tIHdoaWNoIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FzCisgICBzdGFydGVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IHNldHRyYWNlKGZ1bmMpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiB0cmFjZSBmdW5jdGlvbgpAQCAtMzQ1LDcgKzM1NCw3IEBACiBpbW1lZGlhdGVseS4gSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbGVhc2UgYW4gdW5sb2NrZWQgbG9jaywgYQogOmV4YzpgUnVudGltZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAotTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YC4KK0xvY2tzIGFsc28gc3VwcG9ydCB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIDx3aXRoLWxvY2tzPmAuCiAKIFdoZW4gbW9yZSB0aGFuIG9uZSB0aHJlYWQgaXMgYmxvY2tlZCBpbiA6bWV0aDpgfkxvY2suYWNxdWlyZWAgd2FpdGluZyBmb3IgdGhlCiBzdGF0ZSB0byB0dXJuIHRvIHVubG9ja2VkLCBvbmx5IG9uZSB0aHJlYWQgcHJvY2VlZHMgd2hlbiBhIDptZXRoOmB+TG9jay5yZWxlYXNlYApAQCAtNDI0LDcgKzQzMyw3IEBACiA6bWV0aDpgfkxvY2sucmVsZWFzZWAgb2YgdGhlIG91dGVybW9zdCBwYWlyKSByZXNldHMgdGhlIGxvY2sgdG8gdW5sb2NrZWQgYW5kCiBhbGxvd3MgYW5vdGhlciB0aHJlYWQgYmxvY2tlZCBpbiA6bWV0aDpgfkxvY2suYWNxdWlyZWAgdG8gcHJvY2VlZC4KIAotUmVlbnRyYW50IGxvY2tzIGFsc28gc3VwcG9ydCB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIDx3aXRoLWxvY2tzPmAuCitSZWVudHJhbnQgbG9ja3MgYWxzbyBzdXBwb3J0IHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YC4KIAogCiAuLiBjbGFzczo6IFJMb2NrKCkKQEAgLTQ5Miw3ICs1MDEsNyBAQAogc2V2ZXJhbCBjb25kaXRpb24gdmFyaWFibGVzIG11c3Qgc2hhcmUgdGhlIHNhbWUgbG9jay4gIFRoZSBsb2NrIGlzIHBhcnQgb2YKIHRoZSBjb25kaXRpb24gb2JqZWN0OiB5b3UgZG9uJ3QgaGF2ZSB0byB0cmFjayBpdCBzZXBhcmF0ZWx5LgogCi1BIGNvbmRpdGlvbiB2YXJpYWJsZSBvYmV5cyB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIDx3aXRoLWxvY2tzPmA6CitBIGNvbmRpdGlvbiB2YXJpYWJsZSBvYmV5cyB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIDx3aXRoLWxvY2tzPmA6CiB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IGFjcXVpcmVzIHRoZSBhc3NvY2lhdGVkIGxvY2sgZm9yIHRoZSBkdXJhdGlvbiBvZgogdGhlIGVuY2xvc2VkIGJsb2NrLiAgVGhlIDptZXRoOmB+Q29uZGl0aW9uLmFjcXVpcmVgIGFuZAogOm1ldGg6YH5Db25kaXRpb24ucmVsZWFzZWAgbWV0aG9kcyBhbHNvIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZgpAQCAtNjY4LDcgKzY3Nyw3IEBACiBmaW5kcyB0aGF0IGl0IGlzIHplcm8sIGl0IGJsb2Nrcywgd2FpdGluZyB1bnRpbCBzb21lIG90aGVyIHRocmVhZCBjYWxscwogOm1ldGg6YH5TZW1hcGhvcmUucmVsZWFzZWAuCiAKLVNlbWFwaG9yZXMgYWxzbyBzdXBwb3J0IHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YC4KK1NlbWFwaG9yZXMgYWxzbyBzdXBwb3J0IHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YC4KIAogCiAuLiBjbGFzczo6IFNlbWFwaG9yZSh2YWx1ZT0xKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdCBiL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKaW5kZXggYTQ4NzkxNy4uMTliNWU0ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdAorKysgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CkBAIC0yOCwyMiArMjgsMjMgQEAKIAogLi4gY29kZS1ibG9jazo6IHNoCiAKLSAgICQgcHl0aG9uIC1tIHRpbWVpdCAnIi0iLmpvaW4oc3RyKG4pIGZvciBuIGluIHJhbmdlKDEwMCkpJwotICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogNDAuMyB1c2VjIHBlciBsb29wCi0gICAkIHB5dGhvbiAtbSB0aW1laXQgJyItIi5qb2luKFtzdHIobikgZm9yIG4gaW4gcmFuZ2UoMTAwKV0pJwotICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMzMuNCB1c2VjIHBlciBsb29wCi0gICAkIHB5dGhvbiAtbSB0aW1laXQgJyItIi5qb2luKG1hcChzdHIsIHJhbmdlKDEwMCkpKScKLSAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDI1LjIgdXNlYyBwZXIgbG9vcAorICAgJCBweXRob24zIC1tIHRpbWVpdCAnIi0iLmpvaW4oc3RyKG4pIGZvciBuIGluIHJhbmdlKDEwMCkpJworICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMzAuMiB1c2VjIHBlciBsb29wCisgICAkIHB5dGhvbjMgLW0gdGltZWl0ICciLSIuam9pbihbc3RyKG4pIGZvciBuIGluIHJhbmdlKDEwMCldKScKKyAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDI3LjUgdXNlYyBwZXIgbG9vcAorICAgJCBweXRob24zIC1tIHRpbWVpdCAnIi0iLmpvaW4obWFwKHN0ciwgcmFuZ2UoMTAwKSkpJworICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMjMuMiB1c2VjIHBlciBsb29wCiAKIFRoaXMgY2FuIGJlIGFjaGlldmVkIGZyb20gdGhlIDpyZWY6YHB5dGhvbi1pbnRlcmZhY2VgIHdpdGg6OgogCiAgICA+Pj4gaW1wb3J0IHRpbWVpdAogICAgPj4+IHRpbWVpdC50aW1laXQoJyItIi5qb2luKHN0cihuKSBmb3IgbiBpbiByYW5nZSgxMDApKScsIG51bWJlcj0xMDAwMCkKLSAgIDAuODE4NzI2MDYyNzc0NjU4MgorICAgMC4zMDE4NjExODQ4ODIwMDAxCiAgICA+Pj4gdGltZWl0LnRpbWVpdCgnIi0iLmpvaW4oW3N0cihuKSBmb3IgbiBpbiByYW5nZSgxMDApXSknLCBudW1iZXI9MTAwMDApCi0gICAwLjcyODgzMDgxNDM2MTU3MjMKKyAgIDAuMjcyNzM2ODc5MDY1NjMyOAogICAgPj4+IHRpbWVpdC50aW1laXQoJyItIi5qb2luKG1hcChzdHIsIHJhbmdlKDEwMCkpKScsIG51bWJlcj0xMDAwMCkKLSAgIDAuNTg1ODk1MDYxNDkyOTE5OQorICAgMC4yMzcwMjY3OTgwNzMyMDIzNworCiAKIE5vdGUgaG93ZXZlciB0aGF0IDptb2Q6YHRpbWVpdGAgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUgbnVtYmVyIG9mCiByZXBldGl0aW9ucyBvbmx5IHdoZW4gdGhlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgaXMgdXNlZC4gIEluIHRoZQpAQCAtNjMsNiArNjQsMTIgQEAKICAgIENyZWF0ZSBhIDpjbGFzczpgVGltZXJgIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHN0YXRlbWVudCwgKnNldHVwKiBjb2RlIGFuZAogICAgKnRpbWVyKiBmdW5jdGlvbiBhbmQgcnVuIGl0cyA6bWV0aDpgLnRpbWVpdGAgbWV0aG9kIHdpdGggKm51bWJlciogZXhlY3V0aW9ucy4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgICAgQmVjYXVzZSA6bWV0aDpgLnRpbWVpdGAgaXMgZXhlY3V0aW5nICpzdG10KiwgcGxhY2luZyBhIHJldHVybiBzdGF0ZW1lbnQKKyAgICAgICAgaW4gKnN0bXQqIHdpbGwgcHJldmVudCA6bWV0aDpgLnRpbWVpdGAgZnJvbSByZXR1cm5pbmcgZXhlY3V0aW9uIHRpbWUuCisgICAgICAgIEl0IHdpbGwgaW5zdGVhZCByZXR1cm4gdGhlIGRhdGEgc3BlY2lmaWVkIGJ5IHlvdXIgcmV0dXJuIHN0YXRlbWVudC4KKwogCiAuLiBmdW5jdGlvbjo6IHJlcGVhdChzdG10PSdwYXNzJywgc2V0dXA9J3Bhc3MnLCB0aW1lcj08ZGVmYXVsdCB0aW1lcj4sIHJlcGVhdD0zLCBudW1iZXI9MTAwMDAwMCkKIApAQCAtMTUxLDcgKzE1OCw3IEBACiAgICAgICAgICB0ID0gVGltZXIoLi4uKSAgICAgICAjIG91dHNpZGUgdGhlIHRyeS9leGNlcHQKICAgICAgICAgIHRyeToKICAgICAgICAgICAgICB0LnRpbWVpdCguLi4pICAgICMgb3IgdC5yZXBlYXQoLi4uKQotICAgICAgICAgZXhjZXB0OgorICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICB0LnByaW50X2V4YygpCiAKICAgICAgIFRoZSBhZHZhbnRhZ2Ugb3ZlciB0aGUgc3RhbmRhcmQgdHJhY2ViYWNrIGlzIHRoYXQgc291cmNlIGxpbmVzIGluIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QgYi9Eb2MvbGlicmFyeS90a2ludGVyLnJzdAppbmRleCBlZWIxZjgwLi4wNzE1YTQzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90a2ludGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS90a2ludGVyLnJzdApAQCAtMTUsNyArMTUsNyBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYFB5dGhvbiBUa2ludGVyIFJlc291cmNlcyA8aHR0cDovL3d3dy5weXRob24ub3JnL3RvcGljcy90a2ludGVyLz5gXworICAgYFB5dGhvbiBUa2ludGVyIFJlc291cmNlcyA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Ua0ludGVyPmBfCiAgICAgICBUaGUgUHl0aG9uIFRraW50ZXIgVG9waWMgR3VpZGUgcHJvdmlkZXMgYSBncmVhdCBkZWFsIG9mIGluZm9ybWF0aW9uIG9uIHVzaW5nIFRrCiAgICAgICBmcm9tIFB5dGhvbiBhbmQgbGlua3MgdG8gb3RoZXIgc291cmNlcyBvZiBpbmZvcm1hdGlvbiBvbiBUay4KIApAQCAtNzQ3LDMyICs3NDcsNiBAQAogICAgZGlzcGxheWVkLiAgWW91IGNhbiB1c2UgdGhlc2UgOm1vZDpgdGtpbnRlcmAgZnVuY3Rpb25zIHRvIGFjY2VzcyB0aGVzZSBzcGVjaWFsCiAgICBwb2ludHMgaW4gdGV4dCB3aWRnZXRzOgogCi0uLiBmdW5jdGlvbjo6IEF0RW5kKCkKLSAgICAgIHJlZmVycyB0byB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgdGV4dAotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRJbnNlcnQoKQotICAgICAgcmVmZXJzIHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgdGV4dCBjdXJzb3IgaXMKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0U2VsRmlyc3QoKQotICAgICAgaW5kaWNhdGVzIHRoZSBiZWdpbm5pbmcgcG9pbnQgb2YgdGhlIHNlbGVjdGVkIHRleHQKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0U2VsTGFzdCgpCi0gICAgICBkZW5vdGVzIHRoZSBsYXN0IHBvaW50IG9mIHRoZSBzZWxlY3RlZCB0ZXh0IGFuZCBmaW5hbGx5Ci0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdCh4WywgeV0pCi0gICAgICByZWZlcnMgdG8gdGhlIGNoYXJhY3RlciBhdCBwaXhlbCBsb2NhdGlvbiAqeCosICp5KiAod2l0aCAqeSogbm90IHVzZWQgaW4gdGhlCi0gICAgICBjYXNlIG9mIGEgdGV4dCBlbnRyeSB3aWRnZXQsIHdoaWNoIGNvbnRhaW5zIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCkuCi0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQogVGV4dCB3aWRnZXQgaW5kZXhlcwogICAgVGhlIGluZGV4IG5vdGF0aW9uIGZvciBUZXh0IHdpZGdldHMgaXMgdmVyeSByaWNoIGFuZCBpcyBiZXN0IGRlc2NyaWJlZCBpbiB0aGUgVGsKICAgIG1hbiBwYWdlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdCBiL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdAppbmRleCAzN2Q5ZjQxLi5iZDZiMTIxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0CkBAIC0xMzEsNiArMTMxLDI0IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBleGNlcHRpb246OiBUb2tlbkVycm9yCisKKyAgIFJhaXNlZCB3aGVuIGVpdGhlciBhIGRvY3N0cmluZyBvciBleHByZXNzaW9uIHRoYXQgbWF5IGJlIHNwbGl0IG92ZXIgc2V2ZXJhbAorICAgbGluZXMgaXMgbm90IGNvbXBsZXRlZCBhbnl3aGVyZSBpbiB0aGUgZmlsZSwgZm9yIGV4YW1wbGU6OgorCisgICAgICAiIiJCZWdpbm5pbmcgb2YKKyAgICAgIGRvY3N0cmluZworCisgICBvcjo6CisKKyAgICAgIFsxLAorICAgICAgIDIsCisgICAgICAgMworCitOb3RlIHRoYXQgdW5jbG9zZWQgc2luZ2xlLXF1b3RlZCBzdHJpbmdzIGRvIG5vdCBjYXVzZSBhbiBlcnJvciB0byBiZQorcmFpc2VkLiBUaGV5IGFyZSB0b2tlbml6ZWQgYXMgYGBFUlJPUlRPS0VOYGAsIGZvbGxvd2VkIGJ5IHRoZSB0b2tlbml6YXRpb24gb2YKK3RoZWlyIGNvbnRlbnRzLgorCiAKIC4uIF90b2tlbml6ZS1jbGk6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QgYi9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CmluZGV4IDMyZTU3MzMuLjE1ZmJlZGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdApAQCAtNzIsNyArNzIsNyBAQAogICAgUmV0dXJuIGEgbGlzdCBvZiB1cCB0byAqbGltaXQqICJwcmUtcHJvY2Vzc2VkIiBzdGFjayB0cmFjZSBlbnRyaWVzIGV4dHJhY3RlZAogICAgZnJvbSB0aGUgdHJhY2ViYWNrIG9iamVjdCAqdHJhY2ViYWNrKi4gIEl0IGlzIHVzZWZ1bCBmb3IgYWx0ZXJuYXRlIGZvcm1hdHRpbmcgb2YKICAgIHN0YWNrIHRyYWNlcy4gIElmICpsaW1pdCogaXMgb21pdHRlZCBvciBgYE5vbmVgYCwgYWxsIGVudHJpZXMgYXJlIGV4dHJhY3RlZC4gIEEKLSAgICJwcmUtcHJvY2Vzc2VkIiBzdGFjayB0cmFjZSBlbnRyeSBpcyBhIHF1YWRydXBsZSAoKmZpbGVuYW1lKiwgKmxpbmUgbnVtYmVyKiwKKyAgICJwcmUtcHJvY2Vzc2VkIiBzdGFjayB0cmFjZSBlbnRyeSBpcyBhIDQtdHVwbGUgKCpmaWxlbmFtZSosICpsaW5lIG51bWJlciosCiAgICAqZnVuY3Rpb24gbmFtZSosICp0ZXh0KikgcmVwcmVzZW50aW5nIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIHVzdWFsbHkgcHJpbnRlZAogICAgZm9yIGEgc3RhY2sgdHJhY2UuICBUaGUgKnRleHQqIGlzIGEgc3RyaW5nIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgc3RyaXBwZWQ7IGlmIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpdCBpcyBgYE5vbmVgYC4KQEAgLTEyOSw2ICsxMjksMTMgQEAKIAogICAgQSBzaG9ydGhhbmQgZm9yIGBgZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpYGAuCiAKKy4uIGZ1bmN0aW9uOjogY2xlYXJfZnJhbWVzKHRiKQorCisgICBDbGVhcnMgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhbGwgdGhlIHN0YWNrIGZyYW1lcyBpbiBhIHRyYWNlYmFjayAqdGIqCisgICBieSBjYWxsaW5nIHRoZSA6bWV0aDpgY2xlYXJgIG1ldGhvZCBvZiBlYWNoIGZyYW1lIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogLi4gX3RyYWNlYmFjay1leGFtcGxlOgogCkBAIC0xNDYsNyArMTUzLDcgQEAKICAgICAgICBzb3VyY2UgPSBpbnB1dCgiPj4+ICIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBleGVjKHNvdXJjZSwgZW52ZGlyKQotICAgICAgIGV4Y2VwdDoKKyAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICBwcmludCgiRXhjZXB0aW9uIGluIHVzZXIgY29kZToiKQogICAgICAgICAgICBwcmludCgiLSIqNjApCiAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3Rkb3V0KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0IGIvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MDU1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QKQEAgLTAsMCArMSw2MzQgQEAKKzptb2Q6YHRyYWNlbWFsbG9jYCAtLS0gVHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiB0cmFjZW1hbGxvYworICAgOnN5bm9wc2lzOiBUcmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGEgZGVidWcgdG9vbCB0byB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieQorUHl0aG9uLiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisqIFRyYWNlYmFjayB3aGVyZSBhbiBvYmplY3Qgd2FzIGFsbG9jYXRlZAorKiBTdGF0aXN0aWNzIG9uIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzIHBlciBmaWxlbmFtZSBhbmQgcGVyIGxpbmUgbnVtYmVyOgorICB0b3RhbCBzaXplLCBudW1iZXIgYW5kIGF2ZXJhZ2Ugc2l6ZSBvZiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcworKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBzbmFwc2hvdHMgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcworCitUbyB0cmFjZSBtb3N0IG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbiwgdGhlIG1vZHVsZSBzaG91bGQgYmUgc3RhcnRlZAorYXMgZWFybHkgYXMgcG9zc2libGUgYnkgc2V0dGluZyB0aGUgOmVudnZhcjpgUFlUSE9OVFJBQ0VNQUxMT0NgIGVudmlyb25tZW50Cit2YXJpYWJsZSB0byBgYDFgYCwgb3IgYnkgdXNpbmcgOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2NgYCBjb21tYW5kIGxpbmUKK29wdGlvbi4gVGhlIDpmdW5jOmB0cmFjZW1hbGxvYy5zdGFydGAgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBydW50aW1lIHRvCitzdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisKK0J5IGRlZmF1bHQsIGEgdHJhY2Ugb2YgYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jayBvbmx5IHN0b3JlcyB0aGUgbW9zdCByZWNlbnQKK2ZyYW1lICgxIGZyYW1lKS4gVG8gc3RvcmUgMjUgZnJhbWVzIGF0IHN0YXJ0dXA6IHNldCB0aGUKKzplbnZ2YXI6YFBZVEhPTlRSQUNFTUFMTE9DYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgYDI1YGAsIG9yIHVzZSB0aGUKKzpvcHRpb246YC1YYCBgYHRyYWNlbWFsbG9jPTI1YGAgY29tbWFuZCBsaW5lIG9wdGlvbi4KKworCitFeGFtcGxlcworPT09PT09PT0KKworRGlzcGxheSB0aGUgdG9wIDEwCistLS0tLS0tLS0tLS0tLS0tLS0KKworRGlzcGxheSB0aGUgMTAgZmlsZXMgYWxsb2NhdGluZyB0aGUgbW9zdCBtZW1vcnk6OgorCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisKKyAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisKKyAgICAjIC4uLiBydW4geW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJykKKworICAgIHByaW50KCJbIFRvcCAxMCBdIikKKyAgICBmb3Igc3RhdCBpbiB0b3Bfc3RhdHNbOjEwXToKKyAgICAgICAgcHJpbnQoc3RhdCkKKworCitFeGFtcGxlIG9mIG91dHB1dCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGU6OgorCisgICAgWyBUb3AgMTAgXQorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjcxNjogc2l6ZT00ODU1IEtpQiwgY291bnQ9MzkzMjgsIGF2ZXJhZ2U9MTI2IEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoyODQ6IHNpemU9NTIxIEtpQiwgY291bnQ9MzE5OSwgYXZlcmFnZT0xNjcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9jb2xsZWN0aW9ucy9fX2luaXRfXy5weTozNjg6IHNpemU9MjQ0IEtpQiwgY291bnQ9MjMxNSwgYXZlcmFnZT0xMDggQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9jYXNlLnB5OjM4MTogc2l6ZT0xODUgS2lCLCBjb3VudD03NzksIGF2ZXJhZ2U9MjQzIEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvY2FzZS5weTo0MDI6IHNpemU9MTU0IEtpQiwgY291bnQ9Mzc4LCBhdmVyYWdlPTQxNiBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2FiYy5weToxMzM6IHNpemU9ODguNyBLaUIsIGNvdW50PTM0NywgYXZlcmFnZT0yNjIgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjE0NDY6IHNpemU9NzAuNCBLaUIsIGNvdW50PTkxMSwgYXZlcmFnZT03OSBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46MTQ1NDogc2l6ZT01Mi4wIEtpQiwgY291bnQ9MjUsIGF2ZXJhZ2U9MjEzMSBCCisgICAgPHN0cmluZz46NTogc2l6ZT00OS43IEtpQiwgY291bnQ9MTQ4LCBhdmVyYWdlPTM0NCBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3N5c2NvbmZpZy5weTo0MTE6IHNpemU9NDguMCBLaUIsIGNvdW50PTEsIGF2ZXJhZ2U9NDguMCBLaUIKKworV2UgY2FuIHNlZSB0aGF0IFB5dGhvbiBsb2FkZWQgYGA0LjggTWlCYGAgZGF0YSAoYnl0ZWNvZGUgYW5kIGNvbnN0YW50cykgZnJvbQorbW9kdWxlcyBhbmQgdGhhdCB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSBhbGxvY2F0ZWQgYGAyNDQgS2lCYGAgdG8gYnVpbGQKKzpjbGFzczpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIHR5cGVzLgorCitTZWUgOm1ldGg6YFNuYXBzaG90LnN0YXRpc3RpY3NgIGZvciBtb3JlIG9wdGlvbnMuCisKKworQ29tcHV0ZSBkaWZmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUYWtlIHR3byBzbmFwc2hvdHMgYW5kIGRpc3BsYXkgdGhlIGRpZmZlcmVuY2VzOjoKKworICAgIGltcG9ydCB0cmFjZW1hbGxvYworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKyAgICAjIC4uLiBzdGFydCB5b3VyIGFwcGxpY2F0aW9uIC4uLgorCisgICAgc25hcHNob3QxID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgIyAuLi4gY2FsbCB0aGUgZnVuY3Rpb24gbGVha2luZyBtZW1vcnkgLi4uCisgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisKKyAgICB0b3Bfc3RhdHMgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdDEsICdsaW5lbm8nKQorCisgICAgcHJpbnQoIlsgVG9wIDEwIGRpZmZlcmVuY2VzIF0iKQorICAgIGZvciBzdGF0IGluIHRvcF9zdGF0c1s6MTBdOgorICAgICAgICBwcmludChzdGF0KQorCitFeGFtcGxlIG9mIG91dHB1dCBiZWZvcmUvYWZ0ZXIgcnVubmluZyBzb21lIHRlc3RzIG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZTo6CisKKyAgICBbIFRvcCAxMCBkaWZmZXJlbmNlcyBdCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46NzE2OiBzaXplPTgxNzMgS2lCICgrNDQyOCBLaUIpLCBjb3VudD03MTMzMiAoKzM5MzY5KSwgYXZlcmFnZT0xMTcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9saW5lY2FjaGUucHk6MTI3OiBzaXplPTk0MCBLaUIgKCs5NDAgS2lCKSwgY291bnQ9ODEwNiAoKzgxMDYpLCBhdmVyYWdlPTExOSBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L2Nhc2UucHk6NTcxOiBzaXplPTI5OCBLaUIgKCsyOTggS2lCKSwgY291bnQ9NTg5ICgrNTg5KSwgYXZlcmFnZT01MTkgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjI4NDogc2l6ZT0xMDA1IEtpQiAoKzE2NiBLaUIpLCBjb3VudD03NDIzICgrMTUyNiksIGF2ZXJhZ2U9MTM5IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvbWltZXR5cGVzLnB5OjIxNzogc2l6ZT0xMTIgS2lCICgrMTEyIEtpQiksIGNvdW50PTEzMzQgKCsxMzM0KSwgYXZlcmFnZT04NiBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2h0dHAvc2VydmVyLnB5Ojg0ODogc2l6ZT05Ni4wIEtpQiAoKzk2LjAgS2lCKSwgY291bnQ9MSAoKzEpLCBhdmVyYWdlPTk2LjAgS2lCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2luc3BlY3QucHk6MTQ2NTogc2l6ZT04My41IEtpQiAoKzgzLjUgS2lCKSwgY291bnQ9MTA5ICgrMTA5KSwgYXZlcmFnZT03ODQgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9tb2NrLnB5OjQ5MTogc2l6ZT03Ny43IEtpQiAoKzc3LjcgS2lCKSwgY291bnQ9MTQzICgrMTQzKSwgYXZlcmFnZT01NTcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91cmxsaWIvcGFyc2UucHk6NDc2OiBzaXplPTcxLjggS2lCICgrNzEuOCBLaUIpLCBjb3VudD05NjkgKCs5NjkpLCBhdmVyYWdlPTc2IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvY29udGV4dGxpYi5weTozODogc2l6ZT02Ny4yIEtpQiAoKzY3LjIgS2lCKSwgY291bnQ9MTI2ICgrMTI2KSwgYXZlcmFnZT01NDYgQgorCitXZSBjYW4gc2VlIHRoYXQgUHl0aG9uIGhhcyBsb2FkZWQgYGA4LjIgTWlCYGAgb2YgbW9kdWxlIGRhdGEgKGJ5dGVjb2RlIGFuZAorY29uc3RhbnRzKSwgYW5kIHRoYXQgdGhpcyBpcyBgYDQuNCBNaUJgYCBtb3JlIHRoYW4gaGFkIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUKK3Rlc3RzLCB3aGVuIHRoZSBwcmV2aW91cyBzbmFwc2hvdCB3YXMgdGFrZW4uIFNpbWlsYXJseSwgdGhlIDptb2Q6YGxpbmVjYWNoZWAKK21vZHVsZSBoYXMgY2FjaGVkIGBgOTQwIEtpQmBgIG9mIFB5dGhvbiBzb3VyY2UgY29kZSB0byBmb3JtYXQgdHJhY2ViYWNrcywgYWxsCitvZiBpdCBzaW5jZSB0aGUgcHJldmlvdXMgc25hcHNob3QuCisKK0lmIHRoZSBzeXN0ZW0gaGFzIGxpdHRsZSBmcmVlIG1lbW9yeSwgc25hcHNob3RzIGNhbiBiZSB3cml0dGVuIG9uIGRpc2sgdXNpbmcKK3RoZSA6bWV0aDpgU25hcHNob3QuZHVtcGAgbWV0aG9kIHRvIGFuYWx5emUgdGhlIHNuYXBzaG90IG9mZmxpbmUuIFRoZW4gdXNlIHRoZQorOm1ldGg6YFNuYXBzaG90LmxvYWRgIG1ldGhvZCByZWxvYWQgdGhlIHNuYXBzaG90LgorCisKK0dldCB0aGUgdHJhY2ViYWNrIG9mIGEgbWVtb3J5IGJsb2NrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb2RlIHRvIGRpc3BsYXkgdGhlIHRyYWNlYmFjayBvZiB0aGUgYmlnZ2VzdCBtZW1vcnkgYmxvY2s6OgorCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisKKyAgICAjIFN0b3JlIDI1IGZyYW1lcworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDI1KQorCisgICAgIyAuLi4gcnVuIHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgIHRvcF9zdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ3RyYWNlYmFjaycpCisKKyAgICAjIHBpY2sgdGhlIGJpZ2dlc3QgbWVtb3J5IGJsb2NrCisgICAgc3RhdCA9IHRvcF9zdGF0c1swXQorICAgIHByaW50KCIlcyBtZW1vcnkgYmxvY2tzOiAlLjFmIEtpQiIgJSAoc3RhdC5jb3VudCwgc3RhdC5zaXplIC8gMTAyNCkpCisgICAgZm9yIGxpbmUgaW4gc3RhdC50cmFjZWJhY2suZm9ybWF0KCk6CisgICAgICAgIHByaW50KGxpbmUpCisKK0V4YW1wbGUgb2Ygb3V0cHV0IG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZSAodHJhY2ViYWNrIGxpbWl0ZWQgdG8gMjUgZnJhbWVzKTo6CisKKyAgICA5MDMgbWVtb3J5IGJsb2NrczogODcwLjEgS2lCCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgNzE2CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTAzNgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDkzNAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDEwNjgKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA2MTkKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNTgxCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTYxNAorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L2RvY3Rlc3QucHkiLCBsaW5lIDEwMQorICAgICAgICBpbXBvcnQgcGRiCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMjg0CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgOTM4CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTA2OAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDYxOQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE1ODEKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNjE0CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5IiwgbGluZSAxNzI4CisgICAgICAgIGltcG9ydCBkb2N0ZXN0CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5IiwgbGluZSAyMQorICAgICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHBpY2tsZXRvb2xzKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDEyNzYKKyAgICAgICAgdGVzdF9ydW5uZXIoKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDk3NgorICAgICAgICBkaXNwbGF5X2ZhaWx1cmU9bm90IHZlcmJvc2UpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgNzYxCisgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDE1NjMKKyAgICAgICAgbWFpbigpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9fX21haW5fXy5weSIsIGxpbmUgMworICAgICAgICByZWdydGVzdC5tYWluX2luX3RlbXBfY3dkKCkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9ydW5weS5weSIsIGxpbmUgNzMKKyAgICAgICAgZXhlYyhjb2RlLCBydW5fZ2xvYmFscykKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9ydW5weS5weSIsIGxpbmUgMTYwCisgICAgICAgICJfX21haW5fXyIsIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKQorCitXZSBjYW4gc2VlIHRoYXQgdGhlIG1vc3QgbWVtb3J5IHdhcyBhbGxvY2F0ZWQgaW4gdGhlIDptb2Q6YGltcG9ydGxpYmAgbW9kdWxlIHRvCitsb2FkIGRhdGEgKGJ5dGVjb2RlIGFuZCBjb25zdGFudHMpIGZyb20gbW9kdWxlczogYGA4NzAgS2lCYGAuIFRoZSB0cmFjZWJhY2sgaXMKK3doZXJlIHRoZSA6bW9kOmBpbXBvcnRsaWJgIGxvYWRlZCBkYXRhIG1vc3QgcmVjZW50bHk6IG9uIHRoZSBgYGltcG9ydCBwZGJgYAorbGluZSBvZiB0aGUgOm1vZDpgZG9jdGVzdGAgbW9kdWxlLiBUaGUgdHJhY2ViYWNrIG1heSBjaGFuZ2UgaWYgYSBuZXcgbW9kdWxlIGlzCitsb2FkZWQuCisKKworUHJldHR5IHRvcAorLS0tLS0tLS0tLQorCitDb2RlIHRvIGRpc3BsYXkgdGhlIDEwIGxpbmVzIGFsbG9jYXRpbmcgdGhlIG1vc3QgbWVtb3J5IHdpdGggYSBwcmV0dHkgb3V0cHV0LAoraWdub3JpbmcgYGA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPmBgIGFuZCBgYDx1bmtub3duPmBgIGZpbGVzOjoKKworICAgIGltcG9ydCBsaW5lY2FjaGUKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgIGRlZiBkaXNwbGF5X3RvcChzbmFwc2hvdCwgZ3JvdXBfYnk9J2xpbmVubycsIGxpbWl0PTEwKToKKyAgICAgICAgc25hcHNob3QgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKCgKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iKSwKKyAgICAgICAgKSkKKyAgICAgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcyhncm91cF9ieSkKKworICAgICAgICBwcmludCgiVG9wICVzIGxpbmVzIiAlIGxpbWl0KQorICAgICAgICBmb3IgaW5kZXgsIHN0YXQgaW4gZW51bWVyYXRlKHRvcF9zdGF0c1s6bGltaXRdLCAxKToKKyAgICAgICAgICAgIGZyYW1lID0gc3RhdC50cmFjZWJhY2tbMF0KKyAgICAgICAgICAgICMgcmVwbGFjZSAiL3BhdGgvdG8vbW9kdWxlL2ZpbGUucHkiIHdpdGggIm1vZHVsZS9maWxlLnB5IgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5zZXAuam9pbihmcmFtZS5maWxlbmFtZS5zcGxpdChvcy5zZXApWy0yOl0pCisgICAgICAgICAgICBwcmludCgiIyVzOiAlczolczogJS4xZiBLaUIiCisgICAgICAgICAgICAgICAgICAlIChpbmRleCwgZmlsZW5hbWUsIGZyYW1lLmxpbmVubywgc3RhdC5zaXplIC8gMTAyNCkpCisgICAgICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZnJhbWUuZmlsZW5hbWUsIGZyYW1lLmxpbmVubykuc3RyaXAoKQorICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICBwcmludCgnICAgICVzJyAlIGxpbmUpCisKKyAgICAgICAgb3RoZXIgPSB0b3Bfc3RhdHNbbGltaXQ6XQorICAgICAgICBpZiBvdGhlcjoKKyAgICAgICAgICAgIHNpemUgPSBzdW0oc3RhdC5zaXplIGZvciBzdGF0IGluIG90aGVyKQorICAgICAgICAgICAgcHJpbnQoIiVzIG90aGVyOiAlLjFmIEtpQiIgJSAobGVuKG90aGVyKSwgc2l6ZSAvIDEwMjQpKQorICAgICAgICB0b3RhbCA9IHN1bShzdGF0LnNpemUgZm9yIHN0YXQgaW4gdG9wX3N0YXRzKQorICAgICAgICBwcmludCgiVG90YWwgYWxsb2NhdGVkIHNpemU6ICUuMWYgS2lCIiAlICh0b3RhbCAvIDEwMjQpKQorCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorCisgICAgIyAuLi4gcnVuIHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgIGRpc3BsYXlfdG9wKHNuYXBzaG90KQorCitFeGFtcGxlIG9mIG91dHB1dCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGU6OgorCisgICAgVG9wIDEwIGxpbmVzCisgICAgIzE6IExpYi9iYXNlNjQucHk6NDE0OiA0MTkuOCBLaUIKKyAgICAgICAgX2I4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9iODVjaGFycyBmb3IgYiBpbiBfYjg1Y2hhcnNdCisgICAgIzI6IExpYi9iYXNlNjQucHk6MzA2OiA0MTkuOCBLaUIKKyAgICAgICAgX2E4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9hODVjaGFycyBmb3IgYiBpbiBfYTg1Y2hhcnNdCisgICAgIzM6IGNvbGxlY3Rpb25zL19faW5pdF9fLnB5OjM2ODogMjkzLjYgS2lCCisgICAgICAgIGV4ZWMoY2xhc3NfZGVmaW5pdGlvbiwgbmFtZXNwYWNlKQorICAgICM0OiBMaWIvYWJjLnB5OjEzMzogMTE1LjIgS2lCCisgICAgICAgIGNscyA9IHN1cGVyKCkuX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKQorICAgICM1OiB1bml0dGVzdC9jYXNlLnB5OjU3NDogMTAzLjEgS2lCCisgICAgICAgIHRlc3RNZXRob2QoKQorICAgICM2OiBMaWIvbGluZWNhY2hlLnB5OjEyNzogOTUuNCBLaUIKKyAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQorICAgICM3OiB1cmxsaWIvcGFyc2UucHk6NDc2OiA3MS44IEtpQgorICAgICAgICBmb3IgYSBpbiBfaGV4ZGlnIGZvciBiIGluIF9oZXhkaWd9CisgICAgIzg6IDxzdHJpbmc+OjU6IDYyLjAgS2lCCisgICAgIzk6IExpYi9fd2Vha3JlZnNldC5weTozNzogNjAuMCBLaUIKKyAgICAgICAgc2VsZi5kYXRhID0gc2V0KCkKKyAgICAjMTA6IExpYi9iYXNlNjQucHk6MTQyOiA1OS44IEtpQgorICAgICAgICBfYjMydGFiMiA9IFthICsgYiBmb3IgYSBpbiBfYjMydGFiIGZvciBiIGluIF9iMzJ0YWJdCisgICAgNjIyMCBvdGhlcjogMzYwMi44IEtpQgorICAgIFRvdGFsIGFsbG9jYXRlZCBzaXplOiA1MzAzLjEgS2lCCisKK1NlZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgZm9yIG1vcmUgb3B0aW9ucy4KKworCitBUEkKKz09PQorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGNsZWFyX3RyYWNlcygpCisKKyAgIENsZWFyIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIFNlZSBhbHNvIDpmdW5jOmBzdG9wYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKworICAgR2V0IHRoZSB0cmFjZWJhY2sgd2hlcmUgdGhlIFB5dGhvbiBvYmplY3QgKm9iaiogd2FzIGFsbG9jYXRlZC4KKyAgIFJldHVybiBhIDpjbGFzczpgVHJhY2ViYWNrYCBpbnN0YW5jZSwgb3IgYGBOb25lYGAgaWYgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYAorICAgbW9kdWxlIGlzIG5vdCB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBkaWQgbm90IHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mCisgICB0aGUgb2JqZWN0LgorCisgICBTZWUgYWxzbyA6ZnVuYzpgZ2MuZ2V0X3JlZmVycmVyc2AgYW5kIDpmdW5jOmBzeXMuZ2V0c2l6ZW9mYCBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2ViYWNrX2xpbWl0KCkKKworICAgR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZS4KKworICAgVGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0bworICAgZ2V0IHRoZSBsaW1pdCwgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgIFRoZSBsaW1pdCBpcyBzZXQgYnkgdGhlIDpmdW5jOmBzdGFydGAgZnVuY3Rpb24uCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2VkX21lbW9yeSgpCisKKyAgIEdldCB0aGUgY3VycmVudCBzaXplIGFuZCBwZWFrIHNpemUgb2YgbWVtb3J5IGJsb2NrcyB0cmFjZWQgYnkgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIGFzIGEgdHVwbGU6IGBgKGN1cnJlbnQ6IGludCwgcGVhazogaW50KWBgLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpCisKKyAgIEdldCB0aGUgbWVtb3J5IHVzYWdlIGluIGJ5dGVzIG9mIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIHVzZWQgdG8gc3RvcmUKKyAgIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzLgorICAgUmV0dXJuIGFuIDpjbGFzczpgaW50YC4KKworCisuLiBmdW5jdGlvbjo6IGlzX3RyYWNpbmcoKQorCisgICAgYGBUcnVlYGAgaWYgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgaXMgdHJhY2luZyBQeXRob24gbWVtb3J5CisgICAgYWxsb2NhdGlvbnMsIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgICBTZWUgYWxzbyA6ZnVuYzpgc3RhcnRgIGFuZCA6ZnVuYzpgc3RvcGAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogc3RhcnQobmZyYW1lOiBpbnQ9MSkKKworICAgU3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zOiBpbnN0YWxsIGhvb2tzIG9uIFB5dGhvbiBtZW1vcnkKKyAgIGFsbG9jYXRvcnMuIENvbGxlY3RlZCB0cmFjZWJhY2tzIG9mIHRyYWNlcyB3aWxsIGJlIGxpbWl0ZWQgdG8gKm5mcmFtZSoKKyAgIGZyYW1lcy4gQnkgZGVmYXVsdCwgYSB0cmFjZSBvZiBhIG1lbW9yeSBibG9jayBvbmx5IHN0b3JlcyB0aGUgbW9zdCByZWNlbnQKKyAgIGZyYW1lOiB0aGUgbGltaXQgaXMgYGAxYGAuICpuZnJhbWUqIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBgYDFgYC4KKworICAgU3RvcmluZyBtb3JlIHRoYW4gYGAxYGAgZnJhbWUgaXMgb25seSB1c2VmdWwgdG8gY29tcHV0ZSBzdGF0aXN0aWNzIGdyb3VwZWQKKyAgIGJ5IGBgJ3RyYWNlYmFjaydgYCBvciB0byBjb21wdXRlIGN1bXVsYXRpdmUgc3RhdGlzdGljczogc2VlIHRoZQorICAgOm1ldGg6YFNuYXBzaG90LmNvbXBhcmVfdG9gIGFuZCA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgbWV0aG9kcy4KKworICAgU3RvcmluZyBtb3JlIGZyYW1lcyBpbmNyZWFzZXMgdGhlIG1lbW9yeSBhbmQgQ1BVIG92ZXJoZWFkIG9mIHRoZQorICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4gVXNlIHRoZSA6ZnVuYzpgZ2V0X3RyYWNlbWFsbG9jX21lbW9yeWAgZnVuY3Rpb24KKyAgIHRvIG1lYXN1cmUgaG93IG11Y2ggbWVtb3J5IGlzIHVzZWQgYnkgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUuCisKKyAgIFRoZSA6ZW52dmFyOmBQWVRIT05UUkFDRU1BTExPQ2AgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIChgYFBZVEhPTlRSQUNFTUFMTE9DPU5GUkFNRWBgKSBhbmQgdGhlIDpvcHRpb246YC1YYCBgYHRyYWNlbWFsbG9jPU5GUkFNRWBgCisgICBjb21tYW5kIGxpbmUgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHN0YXJ0IHRyYWNpbmcgYXQgc3RhcnR1cC4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0b3BgLCA6ZnVuYzpgaXNfdHJhY2luZ2AgYW5kIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YAorICAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogc3RvcCgpCisKKyAgIFN0b3AgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zOiB1bmluc3RhbGwgaG9va3Mgb24gUHl0aG9uIG1lbW9yeQorICAgYWxsb2NhdG9ycy4gQWxzbyBjbGVhcnMgYWxsIHByZXZpb3VzbHkgY29sbGVjdGVkIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzCisgICBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorCisgICBDYWxsIDpmdW5jOmB0YWtlX3NuYXBzaG90YCBmdW5jdGlvbiB0byB0YWtlIGEgc25hcHNob3Qgb2YgdHJhY2VzIGJlZm9yZQorICAgY2xlYXJpbmcgdGhlbS4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0YXJ0YCwgOmZ1bmM6YGlzX3RyYWNpbmdgIGFuZCA6ZnVuYzpgY2xlYXJfdHJhY2VzYAorICAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogdGFrZV9zbmFwc2hvdCgpCisKKyAgIFRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiBSZXR1cm4gYSBuZXcKKyAgIDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlLgorCisgICBUaGUgc25hcHNob3QgZG9lcyBub3QgaW5jbHVkZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBiZWZvcmUgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIHN0YXJ0ZWQgdG8gdHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zLgorCisgICBUcmFjZWJhY2tzIG9mIHRyYWNlcyBhcmUgbGltaXRlZCB0byA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnJhbWVzLiBVc2UKKyAgIHRoZSAqbmZyYW1lKiBwYXJhbWV0ZXIgb2YgdGhlIDpmdW5jOmBzdGFydGAgZnVuY3Rpb24gdG8gc3RvcmUgbW9yZSBmcmFtZXMuCisKKyAgIFRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgdG8gdGFrZSBhCisgICBzbmFwc2hvdCwgc2VlIHRoZSB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbi4KKworICAgU2VlIGFsc28gdGhlIDpmdW5jOmBnZXRfb2JqZWN0X3RyYWNlYmFja2AgZnVuY3Rpb24uCisKKworRmlsdGVyCistLS0tLS0KKworLi4gY2xhc3M6OiBGaWx0ZXIoaW5jbHVzaXZlOiBib29sLCBmaWxlbmFtZV9wYXR0ZXJuOiBzdHIsIGxpbmVubzogaW50PU5vbmUsIGFsbF9mcmFtZXM6IGJvb2w9RmFsc2UpCisKKyAgIEZpbHRlciBvbiB0cmFjZXMgb2YgbWVtb3J5IGJsb2Nrcy4KKworICAgU2VlIHRoZSA6ZnVuYzpgZm5tYXRjaC5mbm1hdGNoYCBmdW5jdGlvbiBmb3IgdGhlIHN5bnRheCBvZgorICAgKmZpbGVuYW1lX3BhdHRlcm4qLiBUaGUgYGAnLnB5YydgYCBhbmQgYGAnLnB5bydgYCBmaWxlIGV4dGVuc2lvbnMgYXJlCisgICByZXBsYWNlZCB3aXRoIGBgJy5weSdgYC4KKworICAgRXhhbXBsZXM6CisKKyAgICogYGBGaWx0ZXIoVHJ1ZSwgc3VicHJvY2Vzcy5fX2ZpbGVfXylgYCBvbmx5IGluY2x1ZGVzIHRyYWNlcyBvZiB0aGUKKyAgICAgOm1vZDpgc3VicHJvY2Vzc2AgbW9kdWxlCisgICAqIGBgRmlsdGVyKEZhbHNlLCB0cmFjZW1hbGxvYy5fX2ZpbGVfXylgYCBleGNsdWRlcyB0cmFjZXMgb2YgdGhlCisgICAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUKKyAgICogYGBGaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iKWBgIGV4Y2x1ZGVzIGVtcHR5IHRyYWNlYmFja3MKKworICAgLi4gYXR0cmlidXRlOjogaW5jbHVzaXZlCisKKyAgICAgIElmICppbmNsdXNpdmUqIGlzIGBgVHJ1ZWBgIChpbmNsdWRlKSwgb25seSB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZAorICAgICAgaW4gYSBmaWxlIHdpdGggYSBuYW1lIG1hdGNoaW5nIDphdHRyOmBmaWxlbmFtZV9wYXR0ZXJuYCBhdCBsaW5lIG51bWJlcgorICAgICAgOmF0dHI6YGxpbmVub2AuCisKKyAgICAgIElmICppbmNsdXNpdmUqIGlzIGBgRmFsc2VgYCAoZXhjbHVkZSksIGlnbm9yZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBpbgorICAgICAgYSBmaWxlIHdpdGggYSBuYW1lIG1hdGNoaW5nIDphdHRyOmBmaWxlbmFtZV9wYXR0ZXJuYCBhdCBsaW5lIG51bWJlcgorICAgICAgOmF0dHI6YGxpbmVub2AuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxpbmVubworCisgICAgICBMaW5lIG51bWJlciAoYGBpbnRgYCkgb2YgdGhlIGZpbHRlci4gSWYgKmxpbmVubyogaXMgYGBOb25lYGAsIHRoZSBmaWx0ZXIKKyAgICAgIG1hdGNoZXMgYW55IGxpbmUgbnVtYmVyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmaWxlbmFtZV9wYXR0ZXJuCisKKyAgICAgIEZpbGVuYW1lIHBhdHRlcm4gb2YgdGhlIGZpbHRlciAoYGBzdHJgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGFsbF9mcmFtZXMKKworICAgICAgSWYgKmFsbF9mcmFtZXMqIGlzIGBgVHJ1ZWBgLCBhbGwgZnJhbWVzIG9mIHRoZSB0cmFjZWJhY2sgYXJlIGNoZWNrZWQuIElmCisgICAgICAqYWxsX2ZyYW1lcyogaXMgYGBGYWxzZWBgLCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZSBpcyBjaGVja2VkLgorCisgICAgICBUaGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IGlmIHRoZSB0cmFjZWJhY2sgbGltaXQgaXMgYGAxYGAuICBTZWUgdGhlCisgICAgICA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnVuY3Rpb24gYW5kIDphdHRyOmBTbmFwc2hvdC50cmFjZWJhY2tfbGltaXRgCisgICAgICBhdHRyaWJ1dGUuCisKKworRnJhbWUKKy0tLS0tCisKKy4uIGNsYXNzOjogRnJhbWUKKworICAgRnJhbWUgb2YgYSB0cmFjZWJhY2suCisKKyAgIFRoZSA6Y2xhc3M6YFRyYWNlYmFja2AgY2xhc3MgaXMgYSBzZXF1ZW5jZSBvZiA6Y2xhc3M6YEZyYW1lYCBpbnN0YW5jZXMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lCisKKyAgICAgIEZpbGVuYW1lIChgYHN0cmBgKS4KKworICAgLi4gYXR0cmlidXRlOjogbGluZW5vCisKKyAgICAgIExpbmUgbnVtYmVyIChgYGludGBgKS4KKworCitTbmFwc2hvdAorLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTbmFwc2hvdAorCisgICBTbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorCisgICBUaGUgOmZ1bmM6YHRha2Vfc25hcHNob3RgIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzbmFwc2hvdCBpbnN0YW5jZS4KKworICAgLi4gbWV0aG9kOjogY29tcGFyZV90byhvbGRfc25hcHNob3Q6IFNuYXBzaG90LCBncm91cF9ieTogc3RyLCBjdW11bGF0aXZlOiBib29sPUZhbHNlKQorCisgICAgICBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyB3aXRoIGFuIG9sZCBzbmFwc2hvdC4gR2V0IHN0YXRpc3RpY3MgYXMgYSBzb3J0ZWQKKyAgICAgIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYCBpbnN0YW5jZXMgZ3JvdXBlZCBieSAqZ3JvdXBfYnkqLgorCisgICAgICBTZWUgdGhlIDptZXRoOmBzdGF0aXN0aWNzYCBtZXRob2QgZm9yICpncm91cF9ieSogYW5kICpjdW11bGF0aXZlKgorICAgICAgcGFyYW1ldGVycy4KKworICAgICAgVGhlIHJlc3VsdCBpcyBzb3J0ZWQgZnJvbSB0aGUgYmlnZ2VzdCB0byB0aGUgc21hbGxlc3QgYnk6IGFic29sdXRlIHZhbHVlCisgICAgICBvZiA6YXR0cjpgU3RhdGlzdGljRGlmZi5zaXplX2RpZmZgLCA6YXR0cjpgU3RhdGlzdGljRGlmZi5zaXplYCwgYWJzb2x1dGUKKyAgICAgIHZhbHVlIG9mIDphdHRyOmBTdGF0aXN0aWNEaWZmLmNvdW50X2RpZmZgLCA6YXR0cjpgU3RhdGlzdGljLmNvdW50YCBhbmQKKyAgICAgIHRoZW4gYnkgOmF0dHI6YFN0YXRpc3RpY0RpZmYudHJhY2ViYWNrYC4KKworCisgICAuLiBtZXRob2Q6OiBkdW1wKGZpbGVuYW1lKQorCisgICAgICBXcml0ZSB0aGUgc25hcHNob3QgaW50byBhIGZpbGUuCisKKyAgICAgIFVzZSA6bWV0aDpgbG9hZGAgdG8gcmVsb2FkIHRoZSBzbmFwc2hvdC4KKworCisgICAuLiBtZXRob2Q6OiBmaWx0ZXJfdHJhY2VzKGZpbHRlcnMpCisKKyAgICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNuYXBzaG90YCBpbnN0YW5jZSB3aXRoIGEgZmlsdGVyZWQgOmF0dHI6YHRyYWNlc2AKKyAgICAgIHNlcXVlbmNlLCAqZmlsdGVycyogaXMgYSBsaXN0IG9mIDpjbGFzczpgRmlsdGVyYCBpbnN0YW5jZXMuICBJZiAqZmlsdGVycyoKKyAgICAgIGlzIGFuIGVtcHR5IGxpc3QsIHJldHVybiBhIG5ldyA6Y2xhc3M6YFNuYXBzaG90YCBpbnN0YW5jZSB3aXRoIGEgY29weSBvZgorICAgICAgdGhlIHRyYWNlcy4KKworICAgICAgQWxsIGluY2x1c2l2ZSBmaWx0ZXJzIGFyZSBhcHBsaWVkIGF0IG9uY2UsIGEgdHJhY2UgaXMgaWdub3JlZCBpZiBubworICAgICAgaW5jbHVzaXZlIGZpbHRlcnMgbWF0Y2ggaXQuIEEgdHJhY2UgaXMgaWdub3JlZCBpZiBhdCBsZWFzdCBvbmUgZXhjbHVzaXZlCisgICAgICBmaWx0ZXIgbWF0Y2hzIGl0LgorCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogbG9hZChmaWxlbmFtZSkKKworICAgICAgTG9hZCBhIHNuYXBzaG90IGZyb20gYSBmaWxlLgorCisgICAgICBTZWUgYWxzbyA6bWV0aDpgZHVtcGAuCisKKworICAgLi4gbWV0aG9kOjogc3RhdGlzdGljcyhncm91cF9ieTogc3RyLCBjdW11bGF0aXZlOiBib29sPUZhbHNlKQorCisgICAgICBHZXQgc3RhdGlzdGljcyBhcyBhIHNvcnRlZCBsaXN0IG9mIDpjbGFzczpgU3RhdGlzdGljYCBpbnN0YW5jZXMgZ3JvdXBlZAorICAgICAgYnkgKmdyb3VwX2J5KjoKKworICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgIGdyb3VwX2J5ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24KKyAgICAgID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICBgYCdmaWxlbmFtZSdgYCAgICAgICAgIGZpbGVuYW1lCisgICAgICBgYCdsaW5lbm8nYGAgICAgICAgICAgIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlcgorICAgICAgYGAndHJhY2ViYWNrJ2BgICAgICAgICB0cmFjZWJhY2sKKyAgICAgID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgIElmICpjdW11bGF0aXZlKiBpcyBgYFRydWVgYCwgY3VtdWxhdGUgc2l6ZSBhbmQgY291bnQgb2YgbWVtb3J5IGJsb2NrcyBvZgorICAgICAgYWxsIGZyYW1lcyBvZiB0aGUgdHJhY2ViYWNrIG9mIGEgdHJhY2UsIG5vdCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICAgIFRoZSBjdW11bGF0aXZlIG1vZGUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoICpncm91cF9ieSogZXF1YWxzIHRvCisgICAgICBgYCdmaWxlbmFtZSdgYCBhbmQgYGAnbGluZW5vJ2BgLgorCisgICAgICBUaGUgcmVzdWx0IGlzIHNvcnRlZCBmcm9tIHRoZSBiaWdnZXN0IHRvIHRoZSBzbWFsbGVzdCBieToKKyAgICAgIDphdHRyOmBTdGF0aXN0aWMuc2l6ZWAsIDphdHRyOmBTdGF0aXN0aWMuY291bnRgIGFuZCB0aGVuIGJ5CisgICAgICA6YXR0cjpgU3RhdGlzdGljLnRyYWNlYmFja2AuCisKKworICAgLi4gYXR0cmlidXRlOjogdHJhY2ViYWNrX2xpbWl0CisKKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiA6YXR0cjpgdHJhY2VzYDoKKyAgICAgIHJlc3VsdCBvZiB0aGUgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIHdoZW4gdGhlIHNuYXBzaG90IHdhcyB0YWtlbi4KKworICAgLi4gYXR0cmlidXRlOjogdHJhY2VzCisKKyAgICAgIFRyYWNlcyBvZiBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uOiBzZXF1ZW5jZSBvZgorICAgICAgOmNsYXNzOmBUcmFjZWAgaW5zdGFuY2VzLgorCisgICAgICBUaGUgc2VxdWVuY2UgaGFzIGFuIHVuZGVmaW5lZCBvcmRlci4gVXNlIHRoZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AKKyAgICAgIG1ldGhvZCB0byBnZXQgYSBzb3J0ZWQgbGlzdCBvZiBzdGF0aXN0aWNzLgorCisKK1N0YXRpc3RpYworLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogU3RhdGlzdGljCisKKyAgIFN0YXRpc3RpYyBvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKyAgIDpmdW5jOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCByZXR1cm5zIGEgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY2AgaW5zdGFuY2VzLgorCisgICBTZWUgYWxzbyB0aGUgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYCBjbGFzcy4KKworICAgLi4gYXR0cmlidXRlOjogY291bnQKKworICAgICAgTnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgKGBgaW50YGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1N0YXRpc3RpY0RpZmYKKy0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTdGF0aXN0aWNEaWZmCisKKyAgIFN0YXRpc3RpYyBkaWZmZXJlbmNlIG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGFuIG9sZCBhbmQgYSBuZXcKKyAgIDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlLgorCisgICA6ZnVuYzpgU25hcHNob3QuY29tcGFyZV90b2AgcmV0dXJucyBhIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYAorICAgaW5zdGFuY2VzLiBTZWUgYWxzbyB0aGUgOmNsYXNzOmBTdGF0aXN0aWNgIGNsYXNzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudAorCisgICAgICBOdW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBpbiB0aGUgbmV3IHNuYXBzaG90IChgYGludGBgKTogYGAwYGAgaWYKKyAgICAgIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudF9kaWZmCisKKyAgICAgIERpZmZlcmVuY2Ugb2YgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgYmV0d2VlbiB0aGUgb2xkIGFuZCB0aGUgbmV3CisgICAgICBzbmFwc2hvdHMgKGBgaW50YGApOiBgYDBgYCBpZiB0aGUgbWVtb3J5IGJsb2NrcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGluCisgICAgICB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyBpbiB0aGUgbmV3IHNuYXBzaG90IChgYGludGBgKToKKyAgICAgIGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplX2RpZmYKKworICAgICAgRGlmZmVyZW5jZSBvZiB0b3RhbCBzaXplIG9mIG1lbW9yeSBibG9ja3MgaW4gYnl0ZXMgYmV0d2VlbiB0aGUgb2xkIGFuZAorICAgICAgdGhlIG5ldyBzbmFwc2hvdHMgKGBgaW50YGApOiBgYDBgYCBpZiB0aGUgbWVtb3J5IGJsb2NrcyBoYXZlIGJlZW4KKyAgICAgIGFsbG9jYXRlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2sKKworICAgICAgVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2tzIHdlcmUgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1RyYWNlCistLS0tLQorCisuLiBjbGFzczo6IFRyYWNlCisKKyAgIFRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrLgorCisgICBUaGUgOmF0dHI6YFNuYXBzaG90LnRyYWNlc2AgYXR0cmlidXRlIGlzIGEgc2VxdWVuY2Ugb2YgOmNsYXNzOmBUcmFjZWAKKyAgIGluc3RhbmNlcy4KKworICAgLi4gYXR0cmlidXRlOjogc2l6ZQorCisgICAgICBTaXplIG9mIHRoZSBtZW1vcnkgYmxvY2sgaW4gYnl0ZXMgKGBgaW50YGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2sKKworICAgICAgVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2sgd2FzIGFsbG9jYXRlZCwgOmNsYXNzOmBUcmFjZWJhY2tgCisgICAgICBpbnN0YW5jZS4KKworCitUcmFjZWJhY2sKKy0tLS0tLS0tLQorCisuLiBjbGFzczo6IFRyYWNlYmFjaworCisgICBTZXF1ZW5jZSBvZiA6Y2xhc3M6YEZyYW1lYCBpbnN0YW5jZXMgc29ydGVkIGZyb20gdGhlIG1vc3QgcmVjZW50IGZyYW1lIHRvCisgICB0aGUgb2xkZXN0IGZyYW1lLgorCisgICBBIHRyYWNlYmFjayBjb250YWlucyBhdCBsZWFzdCBgYDFgYCBmcmFtZS4gSWYgdGhlIGBgdHJhY2VtYWxsb2NgYCBtb2R1bGUKKyAgIGZhaWxlZCB0byBnZXQgYSBmcmFtZSwgdGhlIGZpbGVuYW1lIGBgIjx1bmtub3duPiJgYCBhdCBsaW5lIG51bWJlciBgYDBgYCBpcworICAgdXNlZC4KKworICAgV2hlbiBhIHNuYXBzaG90IGlzIHRha2VuLCB0cmFjZWJhY2tzIG9mIHRyYWNlcyBhcmUgbGltaXRlZCB0bworICAgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIGZyYW1lcy4gU2VlIHRoZSA6ZnVuYzpgdGFrZV9zbmFwc2hvdGAgZnVuY3Rpb24uCisKKyAgIFRoZSA6YXR0cjpgVHJhY2UudHJhY2ViYWNrYCBhdHRyaWJ1dGUgaXMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBUcmFjZWJhY2tgCisgICBpbnN0YW5jZS4KKworICAgLi4gbWV0aG9kOjogZm9ybWF0KGxpbWl0PU5vbmUpCisKKyAgICAgIEZvcm1hdCB0aGUgdHJhY2ViYWNrIGFzIGEgbGlzdCBvZiBsaW5lcyB3aXRoIG5ld2xpbmVzLiAgVXNlIHRoZQorICAgICAgOm1vZDpgbGluZWNhY2hlYCBtb2R1bGUgdG8gcmV0cmlldmUgbGluZXMgZnJvbSB0aGUgc291cmNlIGNvZGUuICBJZgorICAgICAgKmxpbWl0KiBpcyBzZXQsIG9ubHkgZm9ybWF0IHRoZSAqbGltaXQqIG1vc3QgcmVjZW50IGZyYW1lcy4KKworICAgICAgU2ltaWxhciB0byB0aGUgOmZ1bmM6YHRyYWNlYmFjay5mb3JtYXRfdGJgIGZ1bmN0aW9uLCBleGNlcHQgdGhhdAorICAgICAgOm1ldGg6YGZvcm1hdGAgZG9lcyBub3QgaW5jbHVkZSBuZXdsaW5lcy4KKworICAgICAgRXhhbXBsZTo6CisKKyAgICAgICAgICBwcmludCgiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KToiKQorICAgICAgICAgIGZvciBsaW5lIGluIHRyYWNlYmFjazoKKyAgICAgICAgICAgICAgcHJpbnQobGluZSkKKworICAgICAgT3V0cHV0OjoKKworICAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6CisgICAgICAgICAgICBGaWxlICJ0ZXN0LnB5IiwgbGluZSA5CisgICAgICAgICAgICAgIG9iaiA9IE9iamVjdCgpCisgICAgICAgICAgICBGaWxlICJ0ZXN0LnB5IiwgbGluZSAxMgorICAgICAgICAgICAgICB0YiA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKGYoKSkKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5kaWEgYi9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLmRpYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2NmNGZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5kaWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5wbmcgYi9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI2OTUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHVydGxlLnJzdCBiL0RvYy9saWJyYXJ5L3R1cnRsZS5yc3QKaW5kZXggYjAxNTUzMC4uOWU3MGI0MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHVydGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90dXJ0bGUucnN0CkBAIC0xOTgxLDcgKzE5ODEsNyBAQAogICAgOnBhcmFtIHN0YXJ0eDogaWYgcG9zaXRpdmUsIHN0YXJ0aW5nIHBvc2l0aW9uIGluIHBpeGVscyBmcm9tIHRoZSBsZWZ0CiAgICAgICAgICAgICAgICAgICBlZGdlIG9mIHRoZSBzY3JlZW4sIGlmIG5lZ2F0aXZlIGZyb20gdGhlIHJpZ2h0IGVkZ2UsIGlmIE5vbmUsCiAgICAgICAgICAgICAgICAgICBjZW50ZXIgd2luZG93IGhvcml6b250YWxseQotICAgOnBhcmFtIHN0YXJ0eDogaWYgcG9zaXRpdmUsIHN0YXJ0aW5nIHBvc2l0aW9uIGluIHBpeGVscyBmcm9tIHRoZSB0b3AKKyAgIDpwYXJhbSBzdGFydHk6IGlmIHBvc2l0aXZlLCBzdGFydGluZyBwb3NpdGlvbiBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wCiAgICAgICAgICAgICAgICAgICBlZGdlIG9mIHRoZSBzY3JlZW4sIGlmIG5lZ2F0aXZlIGZyb20gdGhlIGJvdHRvbSBlZGdlLCBpZiBOb25lLAogICAgICAgICAgICAgICAgICAgY2VudGVyIHdpbmRvdyB2ZXJ0aWNhbGx5CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3R5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdAppbmRleCA2OTU0ODBmLi5hYmRiOTM5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHlwZXMucnN0CkBAIC0xNSw2ICsxNSw5IEBACiBQeXRob24gaW50ZXJwcmV0ZXIsIGJ1dCBub3QgZXhwb3NlZCBhcyBidWlsdGlucyBsaWtlIDpjbGFzczpgaW50YCBvcgogOmNsYXNzOmBzdHJgIGFyZS4KIAorRmluYWxseSwgaXQgcHJvdmlkZXMgc29tZSBhZGRpdGlvbmFsIHR5cGUtcmVsYXRlZCB1dGlsaXR5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwordGhhdCBhcmUgbm90IGZ1bmRhbWVudGFsIGVub3VnaCB0byBiZSBidWlsdGlucy4KKwogCiBEeW5hbWljIFR5cGUgQ3JlYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA3LDkgKzExMCwzNSBAQAogICAgQyIuKQogCiAKLS4uIGRhdGE6OiBNb2R1bGVUeXBlCisuLiBjbGFzczo6IE1vZHVsZVR5cGUobmFtZSwgZG9jPU5vbmUpCiAKLSAgIFRoZSB0eXBlIG9mIG1vZHVsZXMuCisgICBUaGUgdHlwZSBvZiA6dGVybTpgbW9kdWxlcyA8bW9kdWxlPmAuIENvbnN0cnVjdG9yIHRha2VzIHRoZSBuYW1lIG9mIHRoZQorICAgbW9kdWxlIHRvIGJlIGNyZWF0ZWQgYW5kIG9wdGlvbmFsbHkgaXRzIDp0ZXJtOmBkb2NzdHJpbmdgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX2RvY19fCisKKyAgICAgIFRoZSA6dGVybTpgZG9jc3RyaW5nYCBvZiB0aGUgbW9kdWxlLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogX19sb2FkZXJfXworCisgICAgICBUaGUgOnRlcm06YGxvYWRlcmAgd2hpY2ggbG9hZGVkIHRoZSBtb2R1bGUuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgRGVmYXVsdHMgdG8gYGBOb25lYGAuIFByZXZpb3VzbHkgdGhlIGF0dHJpYnV0ZSB3YXMgb3B0aW9uYWwuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fbmFtZV9fCisKKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fcGFja2FnZV9fCisKKyAgICAgIFdoaWNoIDp0ZXJtOmBwYWNrYWdlYCBhIG1vZHVsZSBiZWxvbmdzIHRvLiBJZiB0aGUgbW9kdWxlIGlzIHRvcC1sZXZlbAorICAgICAgKGkuZS4gbm90IGEgcGFydCBvZiBhbnkgc3BlY2lmaWMgcGFja2FnZSkgdGhlbiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQKKyAgICAgIHRvIGBgJydgYCwgZWxzZSBpdCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlICh3aGljaCBjYW4gYmUKKyAgICAgIDphdHRyOmBfX25hbWVfX2AgaWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UgaXRzZWxmKS4gRGVmYXVsdHMgdG8gYGBOb25lYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBEZWZhdWx0cyB0byBgYE5vbmVgYC4gUHJldmlvdXNseSB0aGUgYXR0cmlidXRlIHdhcyBvcHRpb25hbC4KIAogCiAuLiBkYXRhOjogVHJhY2ViYWNrVHlwZQpAQCAtMTk0LDYgKzIyMyw5IEBACiAgICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgdW5kZXJseWluZyBtYXBwaW5nJ3MgdmFsdWVzLgogCiAKK0FkZGl0aW9uYWwgVXRpbGl0eSBDbGFzc2VzIGFuZCBGdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogLi4gY2xhc3M6OiBTaW1wbGVOYW1lc3BhY2UKIAogICAgQSBzaW1wbGUgOmNsYXNzOmBvYmplY3RgIHN1YmNsYXNzIHRoYXQgcHJvdmlkZXMgYXR0cmlidXRlIGFjY2VzcyB0byBpdHMKQEAgLTIxMiw5ICsyNDQsMjYgQEAKICAgICAgICAgICAgICAgIGtleXMgPSBzb3J0ZWQoc2VsZi5fX2RpY3RfXykKICAgICAgICAgICAgICAgIGl0ZW1zID0gKCJ7fT17IXJ9Ii5mb3JtYXQoaywgc2VsZi5fX2RpY3RfX1trXSkgZm9yIGsgaW4ga2V5cykKICAgICAgICAgICAgICAgIHJldHVybiAie30oe30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywgIiwgIi5qb2luKGl0ZW1zKSkKKyAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXwogCiAgICBgYFNpbXBsZU5hbWVzcGFjZWBgIG1heSBiZSB1c2VmdWwgYXMgYSByZXBsYWNlbWVudCBmb3IgYGBjbGFzcyBOUzogcGFzc2BgLgogICAgSG93ZXZlciwgZm9yIGEgc3RydWN0dXJlZCByZWNvcmQgdHlwZSB1c2UgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYAogICAgaW5zdGVhZC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKworLi4gZnVuY3Rpb246OiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUoZmdldD1Ob25lLCBmc2V0PU5vbmUsIGZkZWw9Tm9uZSwgZG9jPU5vbmUpCisKKyAgIFJvdXRlIGF0dHJpYnV0ZSBhY2Nlc3Mgb24gYSBjbGFzcyB0byBfX2dldGF0dHJfXy4KKworICAgVGhpcyBpcyBhIGRlc2NyaXB0b3IsIHVzZWQgdG8gZGVmaW5lIGF0dHJpYnV0ZXMgdGhhdCBhY3QgZGlmZmVyZW50bHkgd2hlbgorICAgYWNjZXNzZWQgdGhyb3VnaCBhbiBpbnN0YW5jZSBhbmQgdGhyb3VnaCBhIGNsYXNzLiAgSW5zdGFuY2UgYWNjZXNzIHJlbWFpbnMKKyAgIG5vcm1hbCwgYnV0IGFjY2VzcyB0byBhbiBhdHRyaWJ1dGUgdGhyb3VnaCBhIGNsYXNzIHdpbGwgYmUgcm91dGVkIHRvIHRoZQorICAgY2xhc3MncyBfX2dldGF0dHJfXyBtZXRob2Q7IHRoaXMgaXMgZG9uZSBieSByYWlzaW5nIEF0dHJpYnV0ZUVycm9yLgorCisgICBUaGlzIGFsbG93cyBvbmUgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFjdGl2ZSBvbiBhbiBpbnN0YW5jZSwgYW5kIGhhdmUgdmlydHVhbAorICAgYXR0cmlidXRlcyBvbiB0aGUgY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lIChzZWUgRW51bSBmb3IgYW4gZXhhbXBsZSkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5kb2MucnN0IGIvRG9jL2xpYnJhcnkvdW5kb2MucnN0CmluZGV4IDgwMzg2ZDIuLjIwODMwZTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuZG9jLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bmRvYy5yc3QKQEAgLTIwLDcgKzIwLDcgQEAKIGRvY3VtZW50ZWQgYmV5b25kIHRoaXMgbWVudGlvbi4gIFRoZXJlJ3MgbGl0dGxlIG5lZWQgdG8gZG9jdW1lbnQgdGhlc2UuCiAKIDptb2Q6YG50cGF0aGAKLSAgIC0tLSBJbXBsZW1lbnRhdGlvbiBvZiA6bW9kOmBvcy5wYXRoYCBvbiBXaW4zMiwgV2luNjQsIFdpbkNFLCBhbmQgT1MvMiBwbGF0Zm9ybXMuCisgICAtLS0gSW1wbGVtZW50YXRpb24gb2YgOm1vZDpgb3MucGF0aGAgb24gV2luMzIsIFdpbjY0LCBhbmQgV2luQ0UgcGxhdGZvcm1zLgogCiA6bW9kOmBwb3NpeHBhdGhgCiAgICAtLS0gSW1wbGVtZW50YXRpb24gb2YgOm1vZDpgb3MucGF0aGAgb24gUE9TSVguCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QgYi9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKaW5kZXggYWQ3MGRkOS4uM2IzZDNhMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdApAQCAtMTUsOCArMTUsOCBAQAogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIChVQ0QpIHdoaWNoCiBkZWZpbmVzIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGZvciBhbGwgVW5pY29kZSBjaGFyYWN0ZXJzLiBUaGUgZGF0YSBjb250YWluZWQgaW4KLXRoaXMgZGF0YWJhc2UgaXMgY29tcGlsZWQgZnJvbSB0aGUgYFVDRCB2ZXJzaW9uIDYuMS4wCi08aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkPmBfLgordGhpcyBkYXRhYmFzZSBpcyBjb21waWxlZCBmcm9tIHRoZSBgVUNEIHZlcnNpb24gNi4zLjAKKzxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2Q+YF8uCiAKIFRoZSBtb2R1bGUgdXNlcyB0aGUgc2FtZSBuYW1lcyBhbmQgc3ltYm9scyBhcyBkZWZpbmVkIGJ5IFVuaWNvZGUKIFN0YW5kYXJkIEFubmV4ICM0NCwgYCJVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSIKQEAgLTE2Niw2ICsxNjYsNiBAQAogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAotLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZC9OYW1lQWxpYXNlcy50eHQKKy4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2QvTmFtZUFsaWFzZXMudHh0CiAKLS4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjEuMC91Y2QvTmFtZWRTZXF1ZW5jZXMudHh0CisuLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkL05hbWVkU2VxdWVuY2VzLnR4dApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAppbmRleCA1NTRlZjExLi4xYzQzYmZlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdApAQCAtMjc3LDYgKzI3NywyMCBAQAogICAgICAgIC4uLgogICAgIEF0dHJpYnV0ZUVycm9yOiBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnb2xkX21ldGhvZCcKIAorVXNpbmcgYSBzcGVjaWZpY2F0aW9uIGFsc28gZW5hYmxlcyBhIHNtYXJ0ZXIgbWF0Y2hpbmcgb2YgY2FsbHMgbWFkZSB0byB0aGUKK21vY2ssIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBzb21lIHBhcmFtZXRlcnMgd2VyZSBwYXNzZWQgYXMgcG9zaXRpb25hbCBvcgorbmFtZWQgYXJndW1lbnRzOjoKKworICAgPj4+IGRlZiBmKGEsIGIsIGMpOiBwYXNzCisgICAuLi4KKyAgID4+PiBtb2NrID0gTW9jayhzcGVjPWYpCisgICA+Pj4gbW9jaygxLCAyLCAzKQorICAgPE1vY2sgbmFtZT0nbW9jaygpJyBpZD0nMTQwMTYxNTgwNDU2NTc2Jz4KKyAgID4+PiBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQorCitJZiB5b3Ugd2FudCB0aGlzIHNtYXJ0ZXIgbWF0Y2hpbmcgdG8gYWxzbyB3b3JrIHdpdGggbWV0aG9kIGNhbGxzIG9uIHRoZSBtb2NrLAoreW91IGNhbiB1c2UgOnJlZjpgYXV0by1zcGVjY2luZyA8YXV0by1zcGVjY2luZz5gLgorCiBJZiB5b3Ugd2FudCBhIHN0cm9uZ2VyIGZvcm0gb2Ygc3BlY2lmaWNhdGlvbiB0aGF0IHByZXZlbnRzIHRoZSBzZXR0aW5nCiBvZiBhcmJpdHJhcnkgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIHRoZSBnZXR0aW5nIG9mIHRoZW0gdGhlbiB5b3UgY2FuIHVzZQogYHNwZWNfc2V0YCBpbnN0ZWFkIG9mIGBzcGVjYC4KQEAgLTkyMCw4ICs5MzQsOCBAQAogICAgIHRoZSBtYWdpYyBtZXRob2RzIHlvdSBzcGVjaWZpY2FsbHkgd2FudDoKIAogICAgICAgICA+Pj4gbW9jayA9IE1vY2soKQotICAgICAgICA+Pj4gbW9jay5fX3NldGl0ZW1fXyA9IE1vY2soc2lkZV9lZmZlY3Q9Z2V0aXRlbSkKLSAgICAgICAgPj4+IG1vY2suX19nZXRpdGVtX18gPSBNb2NrKHNpZGVfZWZmZWN0PXNldGl0ZW0pCisgICAgICAgID4+PiBtb2NrLl9fZ2V0aXRlbV9fID0gTW9jayhzaWRlX2VmZmVjdD1nZXRpdGVtKQorICAgICAgICA+Pj4gbW9jay5fX3NldGl0ZW1fXyA9IE1vY2soc2lkZV9lZmZlY3Q9c2V0aXRlbSkKIAogICAgIEEgKnRoaXJkKiBvcHRpb24gaXMgdG8gdXNlIGBNYWdpY01vY2tgIGJ1dCBwYXNzaW5nIGluIGBkaWN0YCBhcyB0aGUgYHNwZWNgCiAgICAgKG9yIGBzcGVjX3NldGApIGFyZ3VtZW50IHNvIHRoYXQgdGhlIGBNYWdpY01vY2tgIGNyZWF0ZWQgb25seSBoYXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay5yc3QKaW5kZXggZjgwNWRmMy4uY2I3MmE2OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay5yc3QKQEAgLTI2NCw3ICsyNjQsNiBAQAogICAgICAgICAgICAgPE1vY2sgbmFtZT0nbW9jay5tZXRob2QoKScgaWQ9Jy4uLic+CiAgICAgICAgICAgICA+Pj4gbW9jay5tZXRob2QuYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMsIHRlc3Q9J3dvdycpCiAKLQogICAgIC4uIG1ldGhvZDo6IGFzc2VydF9jYWxsZWRfb25jZV93aXRoKCphcmdzLCAqKmt3YXJncykKIAogICAgICAgIEFzc2VydCB0aGF0IHRoZSBtb2NrIHdhcyBjYWxsZWQgZXhhY3RseSBvbmNlIGFuZCB3aXRoIHRoZSBzcGVjaWZpZWQKQEAgLTY4NSw2ICs2ODQsMjcgQEAKICAgICAgIC4uLgogICAgIEtleUVycm9yCiAKK0EgY2FsbGFibGUgbW9jayB3aGljaCB3YXMgY3JlYXRlZCB3aXRoIGEgKnNwZWMqIChvciBhICpzcGVjX3NldCopIHdpbGwKK2ludHJvc3BlY3QgdGhlIHNwZWNpZmljYXRpb24gb2JqZWN0J3Mgc2lnbmF0dXJlIHdoZW4gbWF0Y2hpbmcgY2FsbHMgdG8KK3RoZSBtb2NrLiAgVGhlcmVmb3JlLCBpdCBjYW4gbWF0Y2ggdGhlIGFjdHVhbCBjYWxsJ3MgYXJndW1lbnRzIHJlZ2FyZGxlc3MKK29mIHdoZXRoZXIgdGhleSB3ZXJlIHBhc3NlZCBwb3NpdGlvbmFsbHkgb3IgYnkgbmFtZTo6CisKKyAgID4+PiBkZWYgZihhLCBiLCBjKTogcGFzcworICAgLi4uCisgICA+Pj4gbW9jayA9IE1vY2soc3BlYz1mKQorICAgPj4+IG1vY2soMSwgMiwgYz0zKQorICAgPE1vY2sgbmFtZT0nbW9jaygpJyBpZD0nMTQwMTYxNTgwNDU2NTc2Jz4KKyAgID4+PiBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzKQorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisKK1RoaXMgYXBwbGllcyB0byA6bWV0aDpgfk1vY2suYXNzZXJ0X2NhbGxlZF93aXRoYCwKKzptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aGAsIDptZXRoOmB+TW9jay5hc3NlcnRfaGFzX2NhbGxzYCBhbmQKKzptZXRoOmB+TW9jay5hc3NlcnRfYW55X2NhbGxgLiAgV2hlbiA6cmVmOmBhdXRvLXNwZWNjaW5nYCwgaXQgd2lsbCBhbHNvCithcHBseSB0byBtZXRob2QgY2FsbHMgb24gdGhlIG1vY2sgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc2lnbmF0dXJlIGludHJvc3BlY3Rpb24gb24gc3BlY2NlZCBhbmQgYXV0b3NwZWNjZWQgbW9jayBvYmplY3RzLgorCiAKIC4uIGNsYXNzOjogUHJvcGVydHlNb2NrKCphcmdzLCAqKmt3YXJncykKIApAQCAtMTk2OSw4ICsxOTg5LDEzIEBACiAgICAgZGVmYXVsdCkgdGhlbiBhIGBNYWdpY01vY2tgIHdpbGwgYmUgY3JlYXRlZCBmb3IgeW91LCB3aXRoIHRoZSBBUEkgbGltaXRlZAogICAgIHRvIG1ldGhvZHMgb3IgYXR0cmlidXRlcyBhdmFpbGFibGUgb24gc3RhbmRhcmQgZmlsZSBoYW5kbGVzLgogCi0gICAgYHJlYWRfZGF0YWAgaXMgYSBzdHJpbmcgZm9yIHRoZSBgfmlvLklPQmFzZS5yZWFkYCBtZXRob2Qgb2YgdGhlIGZpbGUgaGFuZGxlCi0gICAgdG8gcmV0dXJuLiAgVGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KKyAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIDptZXRoOmB+aW8uSU9CYXNlLnJlYWRgLAorICAgIDptZXRoOmB+aW8uSU9CYXNlLnJlYWRsaW5lYCwgYW5kIDptZXRoOmB+aW8uSU9CYXNlLnJlYWRsaW5lc2AgbWV0aG9kcworICAgIG9mIHRoZSBmaWxlIGhhbmRsZSB0byByZXR1cm4uICBDYWxscyB0byB0aG9zZSBtZXRob2RzIHdpbGwgdGFrZSBkYXRhIGZyb20KKyAgICBgcmVhZF9kYXRhYCB1bnRpbCBpdCBpcyBkZXBsZXRlZC4gIFRoZSBtb2NrIG9mIHRoZXNlIG1ldGhvZHMgaXMgcHJldHR5CisgICAgc2ltcGxpc3RpYy4gIElmIHlvdSBuZWVkIG1vcmUgY29udHJvbCBvdmVyIHRoZSBkYXRhIHRoYXQgeW91IGFyZSBmZWVkaW5nIHRvCisgICAgdGhlIHRlc3RlZCBjb2RlIHlvdSB3aWxsIG5lZWQgdG8gY3VzdG9taXplIHRoaXMgbW9jayBmb3IgeW91cnNlbGYuCisgICAgYHJlYWRfZGF0YWAgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCiAKIFVzaW5nIGBvcGVuYCBhcyBhIGNvbnRleHQgbWFuYWdlciBpcyBhIGdyZWF0IHdheSB0byBlbnN1cmUgeW91ciBmaWxlIGhhbmRsZXMKIGFyZSBjbG9zZWQgcHJvcGVybHkgYW5kIGlzIGJlY29taW5nIGNvbW1vbjo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKaW5kZXggZmRjOTQwOS4uNTJmNmUzZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdApAQCAtMjM5LDkgKzIzOSwxMCBAQAogCiBVbml0dGVzdCBzdXBwb3J0cyBzaW1wbGUgdGVzdCBkaXNjb3ZlcnkuIEluIG9yZGVyIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0ZXN0CiBkaXNjb3ZlcnksIGFsbCBvZiB0aGUgdGVzdCBmaWxlcyBtdXN0IGJlIDpyZWY6YG1vZHVsZXMgPHR1dC1tb2R1bGVzPmAgb3IKLTpyZWY6YHBhY2thZ2VzIDx0dXQtcGFja2FnZXM+YCBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YKLXRoZSBwcm9qZWN0ICh0aGlzIG1lYW5zIHRoYXQgdGhlaXIgZmlsZW5hbWVzIG11c3QgYmUgdmFsaWQKLTpyZWY6YGlkZW50aWZpZXJzIDxpZGVudGlmaWVycz5gKS4KKzpyZWY6YHBhY2thZ2VzIDx0dXQtcGFja2FnZXM+YCAoaW5jbHVkaW5nIDp0ZXJtOmBuYW1lc3BhY2UgcGFja2FnZXMKKzxuYW1lc3BhY2UgcGFja2FnZT5gKSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YKK3RoZSBwcm9qZWN0ICh0aGlzIG1lYW5zIHRoYXQgdGhlaXIgZmlsZW5hbWVzIG11c3QgYmUgdmFsaWQgOnJlZjpgaWRlbnRpZmllcnMKKzxpZGVudGlmaWVycz5gKS4KIAogVGVzdCBkaXNjb3ZlcnkgaXMgaW1wbGVtZW50ZWQgaW4gOm1ldGg6YFRlc3RMb2FkZXIuZGlzY292ZXJgLCBidXQgY2FuIGFsc28gYmUKIHVzZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBUaGUgYmFzaWMgY29tbWFuZC1saW5lIHVzYWdlIGlzOjoKQEAgLTMwNiw2ICszMDcsOSBAQAogVGVzdCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBjYW4gY3VzdG9taXplIHRlc3QgbG9hZGluZyBhbmQgZGlzY292ZXJ5IGJ5IHRocm91Z2gKIHRoZSBgbG9hZF90ZXN0cyBwcm90b2NvbGBfLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGVzdCBkaXNjb3Zlcnkgc3VwcG9ydHMgOnRlcm06YG5hbWVzcGFjZSBwYWNrYWdlcyA8bmFtZXNwYWNlIHBhY2thZ2U+YC4KKwogCiAuLiBfb3JnYW5pemluZy10ZXN0czoKIApAQCAtNTU5LDggKzU2Myw3MSBAQAogICAgVXN1YWxseSB5b3UgY2FuIHVzZSA6bWV0aDpgVGVzdENhc2Uuc2tpcFRlc3RgIG9yIG9uZSBvZiB0aGUgc2tpcHBpbmcKICAgIGRlY29yYXRvcnMgaW5zdGVhZCBvZiByYWlzaW5nIHRoaXMgZGlyZWN0bHkuCiAKLVNraXBwZWQgdGVzdHMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgc2V0VXBgIG9yIDptZXRoOmB0ZWFyRG93bmAgcnVuIGFyb3VuZCB0aGVtLgotU2tpcHBlZCBjbGFzc2VzIHdpbGwgbm90IGhhdmUgOm1ldGg6YHNldFVwQ2xhc3NgIG9yIDptZXRoOmB0ZWFyRG93bkNsYXNzYCBydW4uCitTa2lwcGVkIHRlc3RzIHdpbGwgbm90IGhhdmUgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcGAgb3IgOm1ldGg6YH5UZXN0Q2FzZS50ZWFyRG93bmAgcnVuIGFyb3VuZCB0aGVtLgorU2tpcHBlZCBjbGFzc2VzIHdpbGwgbm90IGhhdmUgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcENsYXNzYCBvciA6bWV0aDpgflRlc3RDYXNlLnRlYXJEb3duQ2xhc3NgIHJ1bi4KK1NraXBwZWQgbW9kdWxlcyB3aWxsIG5vdCBoYXZlIDpmdW5jOmBzZXRVcE1vZHVsZWAgb3IgOmZ1bmM6YHRlYXJEb3duTW9kdWxlYCBydW4uCisKKworLi4gX3N1YnRlc3RzOgorCitEaXN0aW5ndWlzaGluZyB0ZXN0IGl0ZXJhdGlvbnMgdXNpbmcgc3VidGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworV2hlbiBzb21lIG9mIHlvdXIgdGVzdHMgZGlmZmVyIG9ubHkgYnkgYSBzb21lIHZlcnkgc21hbGwgZGlmZmVyZW5jZXMsIGZvcgoraW5zdGFuY2Ugc29tZSBwYXJhbWV0ZXJzLCB1bml0dGVzdCBhbGxvd3MgeW91IHRvIGRpc3Rpbmd1aXNoIHRoZW0gaW5zaWRlCit0aGUgYm9keSBvZiBhIHRlc3QgbWV0aG9kIHVzaW5nIHRoZSA6bWV0aDpgflRlc3RDYXNlLnN1YlRlc3RgIGNvbnRleHQgbWFuYWdlci4KKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdGVzdDo6CisKKyAgIGNsYXNzIE51bWJlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgIGRlZiB0ZXN0X2V2ZW4oc2VsZik6CisgICAgICAgICAgICIiIgorICAgICAgICAgICBUZXN0IHRoYXQgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDUgYXJlIGFsbCBldmVuLgorICAgICAgICAgICAiIiIKKyAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgNik6CisgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisKK3dpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIG91dHB1dDo6CisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpIChpPTEpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkgKGk9MykKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KSAoaT01KQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCisKK1dpdGhvdXQgdXNpbmcgYSBzdWJ0ZXN0LCBleGVjdXRpb24gd291bGQgc3RvcCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSwKK2FuZCB0aGUgZXJyb3Igd291bGQgYmUgbGVzcyBlYXN5IHRvIGRpYWdub3NlIGJlY2F1c2UgdGhlIHZhbHVlIG9mIGBgaWBgCit3b3VsZG4ndCBiZSBkaXNwbGF5ZWQ6OgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCiAKIAogLi4gX3VuaXR0ZXN0LWNvbnRlbnRzOgpAQCAtNjA3LDkgKzY3NCw5IEBACiAgICAuLiBtZXRob2Q6OiBzZXRVcCgpCiAKICAgICAgIE1ldGhvZCBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgdGVzdCBmaXh0dXJlLiAgVGhpcyBpcyBjYWxsZWQgaW1tZWRpYXRlbHkKLSAgICAgIGJlZm9yZSBjYWxsaW5nIHRoZSB0ZXN0IG1ldGhvZDsgYW55IGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhpcyBtZXRob2Qgd2lsbAotICAgICAgYmUgY29uc2lkZXJlZCBhbiBlcnJvciByYXRoZXIgdGhhbiBhIHRlc3QgZmFpbHVyZS4gVGhlIGRlZmF1bHQKLSAgICAgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KKyAgICAgIGJlZm9yZSBjYWxsaW5nIHRoZSB0ZXN0IG1ldGhvZDsgb3RoZXIgdGhhbiA6ZXhjOmBBc3NlcnRpb25FcnJvcmAgb3IgOmV4YzpgU2tpcFRlc3RgLAorICAgICAgYW55IGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhpcyBtZXRob2Qgd2lsbCBiZSBjb25zaWRlcmVkIGFuIGVycm9yIHJhdGhlciB0aGFuCisgICAgICBhIHRlc3QgZmFpbHVyZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgogCiAKICAgIC4uIG1ldGhvZDo6IHRlYXJEb3duKCkKQEAgLTYxNywxMCArNjg0LDEwIEBACiAgICAgICBNZXRob2QgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0ZXN0IG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgYW5kIHRoZQogICAgICAgcmVzdWx0IHJlY29yZGVkLiAgVGhpcyBpcyBjYWxsZWQgZXZlbiBpZiB0aGUgdGVzdCBtZXRob2QgcmFpc2VkIGFuCiAgICAgICBleGNlcHRpb24sIHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBzdWJjbGFzc2VzIG1heSBuZWVkIHRvIGJlIHBhcnRpY3VsYXJseQotICAgICAgY2FyZWZ1bCBhYm91dCBjaGVja2luZyBpbnRlcm5hbCBzdGF0ZS4gIEFueSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoaXMKLSAgICAgIG1ldGhvZCB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYSB0ZXN0IGZhaWx1cmUuICBUaGlzCi0gICAgICBtZXRob2Qgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgOm1ldGg6YHNldFVwYCBzdWNjZWVkcywgcmVnYXJkbGVzcyBvZgotICAgICAgdGhlIG91dGNvbWUgb2YgdGhlIHRlc3QgbWV0aG9kLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCisgICAgICBjYXJlZnVsIGFib3V0IGNoZWNraW5nIGludGVybmFsIHN0YXRlLiAgQW55IGV4Y2VwdGlvbiwgb3RoZXIgdGhhbiA6ZXhjOmBBc3NlcnRpb25FcnJvcmAKKyAgICAgIG9yIDpleGM6YFNraXBUZXN0YCwgcmFpc2VkIGJ5IHRoaXMgbWV0aG9kIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBlcnJvciByYXRoZXIgdGhhbiBhCisgICAgICB0ZXN0IGZhaWx1cmUuICBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSA6bWV0aDpgc2V0VXBgIHN1Y2NlZWRzLAorICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSBvZiB0aGUgdGVzdCBtZXRob2QuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KIAogCiAgICAuLiBtZXRob2Q6OiBzZXRVcENsYXNzKCkKQEAgLTY3Niw2ICs3NDMsMjEgQEAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKKyAgIC4uIG1ldGhvZDo6IHN1YlRlc3QobXNnPU5vbmUsICoqcGFyYW1zKQorCisgICAgICBSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgd2hpY2ggZXhlY3V0ZXMgdGhlIGVuY2xvc2VkIGNvZGUgYmxvY2sgYXMgYQorICAgICAgc3VidGVzdC4gICptc2cqIGFuZCAqcGFyYW1zKiBhcmUgb3B0aW9uYWwsIGFyYml0cmFyeSB2YWx1ZXMgd2hpY2ggYXJlCisgICAgICBkaXNwbGF5ZWQgd2hlbmV2ZXIgYSBzdWJ0ZXN0IGZhaWxzLCBhbGxvd2luZyB5b3UgdG8gaWRlbnRpZnkgdGhlbQorICAgICAgY2xlYXJseS4KKworICAgICAgQSB0ZXN0IGNhc2UgY2FuIGNvbnRhaW4gYW55IG51bWJlciBvZiBzdWJ0ZXN0IGRlY2xhcmF0aW9ucywgYW5kCisgICAgICB0aGV5IGNhbiBiZSBhcmJpdHJhcmlseSBuZXN0ZWQuCisKKyAgICAgIFNlZSA6cmVmOmBzdWJ0ZXN0c2AgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKICAgIC4uIG1ldGhvZDo6IGRlYnVnKCkKIAogICAgICAgUnVuIHRoZSB0ZXN0IHdpdGhvdXQgY29sbGVjdGluZyB0aGUgcmVzdWx0LiAgVGhpcyBhbGxvd3MgZXhjZXB0aW9ucyByYWlzZWQKQEAgLTgwNiw4ICs4ODgsOCBAQAogCiAKIAotICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGVjayB0aGF0IGV4Y2VwdGlvbnMgYW5kIHdhcm5pbmdzIGFyZSByYWlzZWQgdXNpbmcKLSAgIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKyAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hlY2sgdGhlIHByb2R1Y3Rpb24gb2YgZXhjZXB0aW9ucywgd2FybmluZ3MgYW5kCisgICBsb2cgbWVzc2FnZXMgdXNpbmcgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKICAgIHwgTWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENoZWNrcyB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5ldyBpbiAgICAgfApAQCAtODI0LDYgKzkwNiw5IEBACiAgICB8IDptZXRoOmBhc3NlcnRXYXJuc1JlZ2V4KHdhcm4sIHIsIGZ1biwgKmFyZ3MsICoqa3dkcykgICAgfCBgYGZ1bigqYXJncywgKiprd2RzKWBgIHJhaXNlcyAqd2FybiogfCAzLjIgICAgICAgIHwKICAgIHwgPFRlc3RDYXNlLmFzc2VydFdhcm5zUmVnZXg+YCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFuZCB0aGUgbWVzc2FnZSBtYXRjaGVzIHJlZ2V4ICpyKiAgICB8ICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgICB8IDptZXRoOmBhc3NlcnRMb2dzKGxvZ2dlciwgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGUgYGB3aXRoYGAgYmxvY2sgbG9ncyBvbiAqbG9nZ2VyKiAgfCAzLjQgICAgICAgIHwKKyAgIHwgPFRlc3RDYXNlLmFzc2VydExvZ3M+YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdpdGggbWluaW11bSAqbGV2ZWwqICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiAKICAgIC4uIG1ldGhvZDo6IGFzc2VydFJhaXNlcyhleGNlcHRpb24sIGNhbGxhYmxlLCAqYXJncywgKiprd2RzKQogICAgICAgICAgICAgICAgYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbiwgbXNnPU5vbmUpCkBAIC05NTQsNiArMTAzOSw0NyBAQAogICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICAgIEFkZGVkIHRoZSAqbXNnKiBrZXl3b3JkIGFyZ3VtZW50IHdoZW4gdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KIAorICAgLi4gbWV0aG9kOjogYXNzZXJ0TG9ncyhsb2dnZXI9Tm9uZSwgbGV2ZWw9Tm9uZSkKKworICAgICAgQSBjb250ZXh0IG1hbmFnZXIgdG8gdGVzdCB0aGF0IGF0IGxlYXN0IG9uZSBtZXNzYWdlIGlzIGxvZ2dlZCBvbgorICAgICAgdGhlICpsb2dnZXIqIG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4sIHdpdGggYXQgbGVhc3QgdGhlIGdpdmVuCisgICAgICAqbGV2ZWwqLgorCisgICAgICBJZiBnaXZlbiwgKmxvZ2dlciogc2hvdWxkIGJlIGEgOmNsYXNzOmBsb2dnaW5nLkxvZ2dlcmAgb2JqZWN0IG9yIGEKKyAgICAgIDpjbGFzczpgc3RyYCBnaXZpbmcgdGhlIG5hbWUgb2YgYSBsb2dnZXIuICBUaGUgZGVmYXVsdCBpcyB0aGUgcm9vdAorICAgICAgbG9nZ2VyLCB3aGljaCB3aWxsIGNhdGNoIGFsbCBtZXNzYWdlcy4KKworICAgICAgSWYgZ2l2ZW4sICpsZXZlbCogc2hvdWxkIGJlIGVpdGhlciBhIG51bWVyaWMgbG9nZ2luZyBsZXZlbCBvcgorICAgICAgaXRzIHN0cmluZyBlcXVpdmFsZW50IChmb3IgZXhhbXBsZSBlaXRoZXIgYGAiRVJST1IiYGAgb3IKKyAgICAgIDphdHRyOmBsb2dnaW5nLkVSUk9SYCkuICBUaGUgZGVmYXVsdCBpcyA6YXR0cjpgbG9nZ2luZy5JTkZPYC4KKworICAgICAgVGhlIHRlc3QgcGFzc2VzIGlmIGF0IGxlYXN0IG9uZSBtZXNzYWdlIGVtaXR0ZWQgaW5zaWRlIHRoZSBgYHdpdGhgYAorICAgICAgYmxvY2sgbWF0Y2hlcyB0aGUgKmxvZ2dlciogYW5kICpsZXZlbCogY29uZGl0aW9ucywgb3RoZXJ3aXNlIGl0IGZhaWxzLgorCisgICAgICBUaGUgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBjb250ZXh0IG1hbmFnZXIgaXMgYSByZWNvcmRpbmcgaGVscGVyCisgICAgICB3aGljaCBrZWVwcyB0cmFja3Mgb2YgdGhlIG1hdGNoaW5nIGxvZyBtZXNzYWdlcy4gIEl0IGhhcyB0d28KKyAgICAgIGF0dHJpYnV0ZXM6CisKKyAgICAgIC4uIGF0dHJpYnV0ZTo6IHJlY29yZHMKKworICAgICAgICAgQSBsaXN0IG9mIDpjbGFzczpgbG9nZ2luZy5Mb2dSZWNvcmRgIG9iamVjdHMgb2YgdGhlIG1hdGNoaW5nCisgICAgICAgICBsb2cgbWVzc2FnZXMuCisKKyAgICAgIC4uIGF0dHJpYnV0ZTo6IG91dHB1dAorCisgICAgICAgICBBIGxpc3Qgb2YgOmNsYXNzOmBzdHJgIG9iamVjdHMgd2l0aCB0aGUgZm9ybWF0dGVkIG91dHB1dCBvZgorICAgICAgICAgbWF0Y2hpbmcgbWVzc2FnZXMuCisKKyAgICAgIEV4YW1wbGU6OgorCisgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJywgbGV2ZWw9J0lORk8nKSBhcyBjbToKKyAgICAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKS5pbmZvKCdmaXJzdCBtZXNzYWdlJykKKyAgICAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28uYmFyJykuZXJyb3IoJ3NlY29uZCBtZXNzYWdlJykKKyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiAgICBUaGVyZSBhcmUgYWxzbyBvdGhlciBtZXRob2RzIHVzZWQgdG8gcGVyZm9ybSBtb3JlIHNwZWNpZmljIGNoZWNrcywgc3VjaCBhczoKIApAQCAtMTM5MywxNSArMTUxOSwyNCBAQAogCiAgICAgICBUZXN0cyBncm91cGVkIGJ5IGEgOmNsYXNzOmBUZXN0U3VpdGVgIGFyZSBhbHdheXMgYWNjZXNzZWQgYnkgaXRlcmF0aW9uLgogICAgICAgU3ViY2xhc3NlcyBjYW4gbGF6aWx5IHByb3ZpZGUgdGVzdHMgYnkgb3ZlcnJpZGluZyA6bWV0aDpgX19pdGVyX19gLiBOb3RlCi0gICAgICB0aGF0IHRoaXMgbWV0aG9kIG1heWJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIG9uIGEgc2luZ2xlIHN1aXRlCi0gICAgICAoZm9yIGV4YW1wbGUgd2hlbiBjb3VudGluZyB0ZXN0cyBvciBjb21wYXJpbmcgZm9yIGVxdWFsaXR5KQotICAgICAgc28gdGhlIHRlc3RzIHJldHVybmVkIG11c3QgYmUgdGhlIHNhbWUgZm9yIHJlcGVhdGVkIGl0ZXJhdGlvbnMuCisgICAgICB0aGF0IHRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBvbiBhIHNpbmdsZSBzdWl0ZSAoZm9yCisgICAgICBleGFtcGxlIHdoZW4gY291bnRpbmcgdGVzdHMgb3IgY29tcGFyaW5nIGZvciBlcXVhbGl0eSkgc28gdGhlIHRlc3RzCisgICAgICByZXR1cm5lZCBieSByZXBlYXRlZCBpdGVyYXRpb25zIGJlZm9yZSA6bWV0aDpgVGVzdFN1aXRlLnJ1bmAgbXVzdCBiZSB0aGUKKyAgICAgIHNhbWUgZm9yIGVhY2ggY2FsbCBpdGVyYXRpb24uIEFmdGVyIDptZXRoOmBUZXN0U3VpdGUucnVuYCwgY2FsbGVycyBzaG91bGQKKyAgICAgIG5vdCByZWx5IG9uIHRoZSB0ZXN0cyByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCB1bmxlc3MgdGhlIGNhbGxlciB1c2VzIGEKKyAgICAgIHN1YmNsYXNzIHRoYXQgb3ZlcnJpZGVzIDptZXRoOmBUZXN0U3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4YCB0byBwcmVzZXJ2ZQorICAgICAgdGVzdCByZWZlcmVuY2VzLgogCiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgICAgSW4gZWFybGllciB2ZXJzaW9ucyB0aGUgOmNsYXNzOmBUZXN0U3VpdGVgIGFjY2Vzc2VkIHRlc3RzIGRpcmVjdGx5IHJhdGhlcgogICAgICAgICAgdGhhbiB0aHJvdWdoIGl0ZXJhdGlvbiwgc28gb3ZlcnJpZGluZyA6bWV0aDpgX19pdGVyX19gIHdhc24ndCBzdWZmaWNpZW50CiAgICAgICAgICBmb3IgcHJvdmlkaW5nIHRlc3RzLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgSW4gZWFybGllciB2ZXJzaW9ucyB0aGUgOmNsYXNzOmBUZXN0U3VpdGVgIGhlbGQgcmVmZXJlbmNlcyB0byBlYWNoCisgICAgICAgICA6Y2xhc3M6YFRlc3RDYXNlYCBhZnRlciA6bWV0aDpgVGVzdFN1aXRlLnJ1bmAuIFN1YmNsYXNzZXMgY2FuIHJlc3RvcmUKKyAgICAgICAgIHRoYXQgYmVoYXZpb3IgYnkgb3ZlcnJpZGluZyA6bWV0aDpgVGVzdFN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleGAuCisKICAgIEluIHRoZSB0eXBpY2FsIHVzYWdlIG9mIGEgOmNsYXNzOmBUZXN0U3VpdGVgIG9iamVjdCwgdGhlIDptZXRoOmBydW5gIG1ldGhvZAogICAgaXMgaW52b2tlZCBieSBhIDpjbGFzczpgVGVzdFJ1bm5lcmAgcmF0aGVyIHRoYW4gYnkgdGhlIGVuZC11c2VyIHRlc3QgaGFybmVzcy4KIApAQCAtMTUwMCw3ICsxNjM1LDkgQEAKICAgICAgIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LgogCiAgICAgICBJZiBpbXBvcnRpbmcgYSBtb2R1bGUgZmFpbHMsIGZvciBleGFtcGxlIGR1ZSB0byBhIHN5bnRheCBlcnJvciwgdGhlbiB0aGlzCi0gICAgICB3aWxsIGJlIHJlY29yZGVkIGFzIGEgc2luZ2xlIGVycm9yIGFuZCBkaXNjb3Zlcnkgd2lsbCBjb250aW51ZS4KKyAgICAgIHdpbGwgYmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgZXJyb3IgYW5kIGRpc2NvdmVyeSB3aWxsIGNvbnRpbnVlLiAgSWYgdGhlCisgICAgICBpbXBvcnQgZmFpbHVyZSBpcyBkdWUgdG8gOmV4YzpgU2tpcFRlc3RgIGJlaW5nIHJhaXNlZCwgaXQgd2lsbCBiZSByZWNvcmRlZAorICAgICAgYXMgYSBza2lwIGluc3RlYWQgb2YgYW4gZXJyb3IuCiAKICAgICAgIElmIGEgdGVzdCBwYWNrYWdlIG5hbWUgKGRpcmVjdG9yeSB3aXRoIDpmaWxlOmBfX2luaXRfXy5weWApIG1hdGNoZXMgdGhlCiAgICAgICBwYXR0ZXJuIHRoZW4gdGhlIHBhY2thZ2Ugd2lsbCBiZSBjaGVja2VkIGZvciBhIGBgbG9hZF90ZXN0c2BgCkBAIC0xNTE5LDYgKzE2NTYsMTQgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBNb2R1bGVzIHRoYXQgcmFpc2UgOmV4YzpgU2tpcFRlc3RgIG9uIGltcG9ydCBhcmUgcmVjb3JkZWQgYXMgc2tpcHMsCisgICAgICAgICAgIG5vdCBlcnJvcnMuCisgICAgICAgICBEaXNjb3Zlcnkgd29ya3MgZm9yIDp0ZXJtOmBuYW1lc3BhY2UgcGFja2FnZXMgPG5hbWVzcGFjZSBwYWNrYWdlPmAuCisgICAgICAgICBQYXRocyBhcmUgc29ydGVkIGJlZm9yZSBiZWluZyBpbXBvcnRlZCBzbyB0aGF0IGV4ZWN1dGlvbiBvcmRlciBpcworICAgICAgICAgICB0aGUgc2FtZSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtJ3Mgb3JkZXJpbmcgaXMgbm90CisgICAgICAgICAgIGRlcGVuZGVudCBvbiBmaWxlIG5hbWUuCisKIAogICAgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG9mIGEgOmNsYXNzOmBUZXN0TG9hZGVyYCBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgYnkKICAgIHN1YmNsYXNzaW5nIG9yIGFzc2lnbm1lbnQgb24gYW4gaW5zdGFuY2U6CkBAIC0xNjMwLDYgKzE3NzUsMTAgQEAKICAgICAgIFJldHVybiBgYFRydWVgYCBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwgb3RoZXJ3aXNlIHJldHVybnMKICAgICAgIGBgRmFsc2VgYC4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBGYWxzZWBgIGlmIHRoZXJlIHdlcmUgYW55IDphdHRyOmB1bmV4cGVjdGVkU3VjY2Vzc2VzYAorICAgICAgICAgZnJvbSB0ZXN0cyBtYXJrZWQgd2l0aCB0aGUgOmZ1bmM6YGV4cGVjdGVkRmFpbHVyZWAgZGVjb3JhdG9yLgorCiAKICAgIC4uIG1ldGhvZDo6IHN0b3AoKQogCkBAIC0xNjU4LDE0ICsxODA3LDE0IEBACiAgICAgICBDYWxsZWQgYWZ0ZXIgdGhlIHRlc3QgY2FzZSAqdGVzdCogaGFzIGJlZW4gZXhlY3V0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlCiAgICAgICBvdXRjb21lLgogCi0gICAuLiBtZXRob2Q6OiBzdGFydFRlc3RSdW4odGVzdCkKKyAgIC4uIG1ldGhvZDo6IHN0YXJ0VGVzdFJ1bigpCiAKICAgICAgIENhbGxlZCBvbmNlIGJlZm9yZSBhbnkgdGVzdHMgYXJlIGV4ZWN1dGVkLgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCi0gICAuLiBtZXRob2Q6OiBzdG9wVGVzdFJ1bih0ZXN0KQorICAgLi4gbWV0aG9kOjogc3RvcFRlc3RSdW4oKQogCiAgICAgICBDYWxsZWQgb25jZSBhZnRlciBhbGwgdGVzdHMgYXJlIGV4ZWN1dGVkLgogCkBAIC0xNzI4LDYgKzE4NzcsMjIgQEAKICAgICAgIDphdHRyOmB1bmV4cGVjdGVkU3VjY2Vzc2VzYCBhdHRyaWJ1dGUuCiAKIAorICAgLi4gbWV0aG9kOjogYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBvdXRjb21lKQorCisgICAgICBDYWxsZWQgd2hlbiBhIHN1YnRlc3QgZmluaXNoZXMuICAqdGVzdCogaXMgdGhlIHRlc3QgY2FzZQorICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgdGVzdCBtZXRob2QuICAqc3VidGVzdCogaXMgYSBjdXN0b20KKyAgICAgIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIHN1YnRlc3QuCisKKyAgICAgIElmICpvdXRjb21lKiBpcyA6Y29uc3Q6YE5vbmVgLCB0aGUgc3VidGVzdCBzdWNjZWVkZWQuICBPdGhlcndpc2UsCisgICAgICBpdCBmYWlsZWQgd2l0aCBhbiBleGNlcHRpb24gd2hlcmUgKm91dGNvbWUqIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0KKyAgICAgIHJldHVybmVkIGJ5IDpmdW5jOmBzeXMuZXhjX2luZm9gOiBgYCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKWBgLgorCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgb3V0Y29tZSBpcyBhCisgICAgICBzdWNjZXNzLCBhbmQgcmVjb3JkcyBzdWJ0ZXN0IGZhaWx1cmVzIGFzIG5vcm1hbCBmYWlsdXJlcy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY2xhc3M6OiBUZXh0VGVzdFJlc3VsdChzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5KQogCiAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgVGVzdFJlc3VsdGAgdXNlZCBieSB0aGUKQEAgLTE3ODMsNiArMTk0OCwxNCBAQAogCiAgICAgICAgIHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkKIAorICAgLi4gbWV0aG9kOjogcnVuKHRlc3QpCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIHRoZSBtYWluIHB1YmxpYyBpbnRlcmZhY2UgdG8gdGhlIGBUZXh0VGVzdFJ1bm5lcmAuIFRoaXMKKyAgICAgIG1ldGhvZCB0YWtlcyBhIDpjbGFzczpgVGVzdFN1aXRlYCBvciA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZS4gQQorICAgICAgOmNsYXNzOmBUZXN0UmVzdWx0YCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcKKyAgICAgIDpmdW5jOmBfbWFrZVJlc3VsdGAgYW5kIHRoZSB0ZXN0KHMpIGFyZSBydW4gYW5kIHRoZQorICAgICAgcmVzdWx0cyBwcmludGVkIHRvIHN0ZG91dC4KKwogCiAuLiBmdW5jdGlvbjo6IG1haW4obW9kdWxlPSdfX21haW5fXycsIGRlZmF1bHRUZXN0PU5vbmUsIGFyZ3Y9Tm9uZSwgdGVzdFJ1bm5lcj1Ob25lLCBcCiAgICAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj11bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlciwgZXhpdD1UcnVlLCB2ZXJib3NpdHk9MSwgXApAQCAtMTgwMiw5ICsxOTc1LDEwIEBACiAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAgICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCiAKLSAgIFRoZSAqZGVmYXVsdFRlc3QqIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IHRvIHJ1biBpZiBubyB0ZXN0IG5hbWVzCi0gICBhcmUgc3BlY2lmaWVkIHZpYSAqYXJndiouICBJZiBub3Qgc3BlY2lmaWVkIG9yIGBgTm9uZWBgIGFuZCBubyB0ZXN0IG5hbWVzIGFyZQotICAgcHJvdmlkZWQgdmlhICphcmd2KiwgYWxsIHRlc3RzIGZvdW5kIGluICptb2R1bGUqIGFyZSBydW4uCisgICBUaGUgKmRlZmF1bHRUZXN0KiBhcmd1bWVudCBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBzaW5nbGUgdGVzdCBvciBhbgorICAgaXRlcmFibGUgb2YgdGVzdCBuYW1lcyB0byBydW4gaWYgbm8gdGVzdCBuYW1lcyBhcmUgc3BlY2lmaWVkIHZpYSAqYXJndiouICBJZgorICAgbm90IHNwZWNpZmllZCBvciBgYE5vbmVgYCBhbmQgbm8gdGVzdCBuYW1lcyBhcmUgcHJvdmlkZWQgdmlhICphcmd2KiwgYWxsCisgICB0ZXN0cyBmb3VuZCBpbiAqbW9kdWxlKiBhcmUgcnVuLgogCiAgICBUaGUgKmFyZ3YqIGFyZ3VtZW50IGNhbiBiZSBhIGxpc3Qgb2Ygb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHByb2dyYW0sIHdpdGggdGhlCiAgICBmaXJzdCBlbGVtZW50IGJlaW5nIHRoZSBwcm9ncmFtIG5hbWUuICBJZiBub3Qgc3BlY2lmaWVkIG9yIGBgTm9uZWBgLApAQCAtMTg0Miw2ICsyMDE2LDEwIEBACiAgICAgICBUaGUgKnZlcmJvc2l0eSosICpmYWlsZmFzdCosICpjYXRjaGJyZWFrKiwgKmJ1ZmZlcioKICAgICAgIGFuZCAqd2FybmluZ3MqIHBhcmFtZXRlcnMgd2VyZSBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqZGVmYXVsdFRlc3QqIHBhcmFtZXRlciB3YXMgY2hhbmdlZCB0byBhbHNvIGFjY2VwdCBhbiBpdGVyYWJsZSBvZgorICAgICAgdGVzdCBuYW1lcy4KKwogCiBsb2FkX3Rlc3RzIFByb3RvY29sCiAjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdAppbmRleCAyNWMxM2JkLi5mN2YwYzk3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKQEAgLTQ2LDYgKzQ2LDEzIEBACiAKICAgICAgIFRoaXMgaXMgdXN1YWxseSBhIHN0cmluZyBleHBsYWluaW5nIHRoZSByZWFzb24gZm9yIHRoaXMgZXJyb3IuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGhlYWRlcnMKKworICAgICAgVGhlIEhUVFAgcmVzcG9uc2UgaGVhZGVycyBmb3IgdGhlIEhUVFAgcmVxdWVzdCB0aGF0IGNhdXNlZCB0aGUKKyAgICAgIDpleGM6YEhUVFBFcnJvcmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBleGNlcHRpb246OiBDb250ZW50VG9vU2hvcnRFcnJvcihtc2csIGNvbnRlbnQpCiAKICAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHRoZSA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CmluZGV4IDY0OTNhMjkuLjAxOWY1OWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKQEAgLTIxOCwxMiArMjE4LDE3IEBACiAgICBmZXRjaGluZyBvZiB0aGUgaW1hZ2UsIHRoaXMgc2hvdWxkIGJlIHRydWUuCiAKICAgICptZXRob2QqIHNob3VsZCBiZSBhIHN0cmluZyB0aGF0IGluZGljYXRlcyB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZCB0aGF0Ci0gICB3aWxsIGJlIHVzZWQgKGUuZy4gYGAnSEVBRCdgYCkuICBJdHMgdmFsdWUgaXMgc3RvcmVkIGluIHRoZQorICAgd2lsbCBiZSB1c2VkIChlLmcuIGBgJ0hFQUQnYGApLiAgSWYgcHJvdmlkZWQsIGl0cyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlCiAgICA6YXR0cjpgflJlcXVlc3QubWV0aG9kYCBhdHRyaWJ1dGUgYW5kIGlzIHVzZWQgYnkgOm1ldGg6YGdldF9tZXRob2QoKWAuCisgICBTdWJjbGFzc2VzIG1heSBpbmRpY2F0ZSBhIGRlZmF1bHQgbWV0aG9kIGJ5IHNldHRpbmcgdGhlCisgICA6YXR0cjpgflJlcXVlc3QubWV0aG9kYCBhdHRyaWJ1dGUgaW4gdGhlIGNsYXNzIGl0c2VsZi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIDphdHRyOmBSZXF1ZXN0Lm1ldGhvZGAgYXJndW1lbnQgaXMgYWRkZWQgdG8gdGhlIFJlcXVlc3QgY2xhc3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBEZWZhdWx0IDphdHRyOmBSZXF1ZXN0Lm1ldGhvZGAgbWF5IGJlIGluZGljYXRlZCBhdCB0aGUgY2xhc3MgbGV2ZWwuCisKIAogLi4gY2xhc3M6OiBPcGVuZXJEaXJlY3RvcigpCiAKQEAgLTM1Niw2ICszNjEsMTEgQEAKIAogICAgT3BlbiBsb2NhbCBmaWxlcy4KIAorLi4gY2xhc3M6OiBEYXRhSGFuZGxlcigpCisKKyAgIE9wZW4gZGF0YSBVUkxzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gY2xhc3M6OiBGVFBIYW5kbGVyKCkKIApAQCAtMzkxLDYgKzQwMSwxMiBAQAogCiAgICBUaGUgb3JpZ2luYWwgVVJMIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisKKyAgIFJlcXVlc3QuZnVsbF91cmwgaXMgYSBwcm9wZXJ0eSB3aXRoIHNldHRlciwgZ2V0dGVyIGFuZCBhIGRlbGV0ZXIuIEdldHRpbmcKKyAgIDphdHRyOmB+UmVxdWVzdC5mdWxsX3VybGAgcmV0dXJucyB0aGUgb3JpZ2luYWwgcmVxdWVzdCBVUkwgd2l0aCB0aGUKKyAgIGZyYWdtZW50LCBpZiBpdCB3YXMgcHJlc2VudC4KKwogLi4gYXR0cmlidXRlOjogUmVxdWVzdC50eXBlCiAKICAgIFRoZSBVUkkgc2NoZW1lLgpAQCAtNDEzLDYgKzQyOSwxMCBAQAogCiAgICBUaGUgZW50aXR5IGJvZHkgZm9yIHRoZSByZXF1ZXN0LCBvciBOb25lIGlmIG5vdCBzcGVjaWZpZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBDaGFuZ2luZyB2YWx1ZSBvZiA6YXR0cjpgUmVxdWVzdC5kYXRhYCBub3cgZGVsZXRlcyAiQ29udGVudC1MZW5ndGgiCisgICAgICBoZWFkZXIgaWYgaXQgd2FzIHByZXZpb3VzbHkgc2V0IG9yIGNhbGN1bGF0ZWQuCisKIC4uIGF0dHJpYnV0ZTo6IFJlcXVlc3QudW52ZXJpZmlhYmxlCiAKICAgIGJvb2xlYW4sIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXF1ZXN0IGlzIHVudmVyaWZpYWJsZSBhcyBkZWZpbmVkCkBAIC00MjAsMTMgKzQ0MCwyMCBAQAogCiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0Lm1ldGhvZAogCi0gICBUaGUgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byB1c2UuICBUaGlzIHZhbHVlIGlzIHVzZWQgYnkKLSAgIDptZXRoOmB+UmVxdWVzdC5nZXRfbWV0aG9kYCB0byBvdmVycmlkZSB0aGUgY29tcHV0ZWQgSFRUUCByZXF1ZXN0Ci0gICBtZXRob2QgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgcmV0dXJuZWQuICBUaGlzIGF0dHJpYnV0ZSBpcyBpbml0aWFsaXplZCB3aXRoCi0gICB0aGUgdmFsdWUgb2YgdGhlICptZXRob2QqIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisgICBUaGUgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byB1c2UuICBCeSBkZWZhdWx0IGl0cyB2YWx1ZSBpcyA6Y29uc3Q6YE5vbmVgLAorICAgd2hpY2ggbWVhbnMgdGhhdCA6bWV0aDpgflJlcXVlc3QuZ2V0X21ldGhvZGAgd2lsbCBkbyBpdHMgbm9ybWFsIGNvbXB1dGF0aW9uCisgICBvZiB0aGUgbWV0aG9kIHRvIGJlIHVzZWQuICBJdHMgdmFsdWUgY2FuIGJlIHNldCAodGh1cyBvdmVycmlkaW5nIHRoZSBkZWZhdWx0CisgICBjb21wdXRhdGlvbiBpbiA6bWV0aDpgflJlcXVlc3QuZ2V0X21ldGhvZGApIGVpdGhlciBieSBwcm92aWRpbmcgYSBkZWZhdWx0CisgICB2YWx1ZSBieSBzZXR0aW5nIGl0IGF0IHRoZSBjbGFzcyBsZXZlbCBpbiBhIDpjbGFzczpgUmVxdWVzdGAgc3ViY2xhc3MsIG9yIGJ5CisgICBwYXNzaW5nIGEgdmFsdWUgaW4gdG8gdGhlIDpjbGFzczpgUmVxdWVzdGAgY29uc3RydWN0b3IgdmlhIHRoZSAqbWV0aG9kKgorICAgYXJndW1lbnQuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQSBkZWZhdWx0IHZhbHVlIGNhbiBub3cgYmUgc2V0IGluIHN1YmNsYXNzZXM7IHByZXZpb3VzbHkgaXQgY291bGQgb25seQorICAgICAgYmUgc2V0IHZpYSB0aGUgY29uc3RydWN0b3IgYXJndW1lbnQuCisKIAogLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfbWV0aG9kKCkKIApAQCAtNDYxLDEwICs0ODgsMjIgQEAKICAgIHVucmVkaXJlY3RlZCkuCiAKIAorLi4gbWV0aG9kOjogUmVxdWVzdC5yZW1vdmVfaGVhZGVyKGhlYWRlcikKKworICAgUmVtb3ZlIG5hbWVkIGhlYWRlciBmcm9tIHRoZSByZXF1ZXN0IGluc3RhbmNlIChib3RoIGZyb20gcmVndWxhciBhbmQKKyAgIHVucmVkaXJlY3RlZCBoZWFkZXJzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfZnVsbF91cmwoKQogCiAgICBSZXR1cm4gdGhlIFVSTCBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisKKyAgIFJldHVybnMgOmF0dHI6YFJlcXVlc3QuZnVsbF91cmxgCisKIAogLi4gbWV0aG9kOjogUmVxdWVzdC5zZXRfcHJveHkoaG9zdCwgdHlwZSkKIApAQCAtNDczLDU0ICs1MTIsNiBAQAogICAgVVJMIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvci4KIAogCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmFkZF9kYXRhKGRhdGEpCi0KLSAgIFNldCB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBkYXRhIHRvICpkYXRhKi4gIFRoaXMgaXMgaWdub3JlZCBieSBhbGwgaGFuZGxlcnMgZXhjZXB0Ci0gICBIVFRQIGhhbmRsZXJzIC0tLSBhbmQgdGhlcmUgaXQgc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcsIGFuZCB3aWxsIGNoYW5nZSB0aGUKLSAgIHJlcXVlc3QgdG8gYmUgYGBQT1NUYGAgcmF0aGVyIHRoYW4gYGBHRVRgYC4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UKLSAgIDphdHRyOmBSZXF1ZXN0LmRhdGFgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5oYXNfZGF0YSgpCi0KLSAgIFJldHVybiB3aGV0aGVyIHRoZSBpbnN0YW5jZSBoYXMgYSBub24tXCBgYE5vbmVgYCBkYXRhLiBEZXByZWNhdGVkIGluIDMuMywKLSAgIHVzZSA6YXR0cjpgUmVxdWVzdC5kYXRhYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2RhdGEoKQotCi0gICBSZXR1cm4gdGhlIGluc3RhbmNlJ3MgZGF0YS4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3QuZGF0YWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF90eXBlKCkKLQotICAgUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBVUkwgLS0tIGFsc28ga25vd24gYXMgdGhlIHNjaGVtZS4gIERlcHJlY2F0ZWQgaW4gMy4zLAotICAgdXNlIDphdHRyOmBSZXF1ZXN0LnR5cGVgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfaG9zdCgpCi0KLSAgIFJldHVybiB0aGUgaG9zdCB0byB3aGljaCBhIGNvbm5lY3Rpb24gd2lsbCBiZSBtYWRlLiBEZXByZWNhdGVkIGluIDMuMywgdXNlCi0gICA6YXR0cjpgUmVxdWVzdC5ob3N0YC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X3NlbGVjdG9yKCkKLQotICAgUmV0dXJuIHRoZSBzZWxlY3RvciAtLS0gdGhlIHBhcnQgb2YgdGhlIFVSTCB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlci4KLSAgIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3Quc2VsZWN0b3JgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KIC4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2hlYWRlcihoZWFkZXJfbmFtZSwgZGVmYXVsdD1Ob25lKQogCiAgICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBoZWFkZXIuIElmIHRoZSBoZWFkZXIgaXMgbm90IHByZXNlbnQsIHJldHVybgpAQCAtNTMxLDI1ICs1MjIsMTAgQEAKIAogICAgUmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMgKGhlYWRlcl9uYW1lLCBoZWFkZXJfdmFsdWUpIG9mIHRoZSBSZXF1ZXN0IGhlYWRlcnMuCiAKLQotLi4gbWV0aG9kOjogUmVxdWVzdC5zZXRfcHJveHkoaG9zdCwgdHlwZSkKLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfb3JpZ2luX3JlcV9ob3N0KCkKLQotICAgUmV0dXJuIHRoZSByZXF1ZXN0LWhvc3Qgb2YgdGhlIG9yaWdpbiB0cmFuc2FjdGlvbiwgYXMgZGVmaW5lZCBieQotICAgOnJmYzpgMjk2NWAuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGNvbnN0cnVjdG9yLgotICAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZSA6YXR0cjpgUmVxdWVzdC5vcmlnaW5fcmVxX2hvc3RgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5pc191bnZlcmlmaWFibGUoKQotCi0gICBSZXR1cm4gd2hldGhlciB0aGUgcmVxdWVzdCBpcyB1bnZlcmlmaWFibGUsIGFzIGRlZmluZWQgYnkgUkZDIDI5NjUuIFNlZSB0aGUKLSAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGNvbnN0cnVjdG9yLiAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZQotICAgOmF0dHI6YFJlcXVlc3QudW52ZXJpZmlhYmxlYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSByZXF1ZXN0IG1ldGhvZHMgYWRkX2RhdGEsIGhhc19kYXRhLCBnZXRfZGF0YSwgZ2V0X3R5cGUsIGdldF9ob3N0LAorICAgZ2V0X3NlbGVjdG9yLCBnZXRfb3JpZ2luX3JlcV9ob3N0IGFuZCBpc191bnZlcmlmaWFibGUgdGhhdCB3ZXJlIGRlcHJlY2F0ZWQKKyAgIHNpbmNlIDMuMyBoYXZlIGJlZW4gcmVtb3ZlZC4KIAogCiAuLiBfb3BlbmVyLWRpcmVjdG9yLW9iamVjdHM6CkBAIC05ODMsNiArOTU5LDIxIEBACiAgICAgICBob3N0bmFtZSBpcyBnaXZlbiwgYW4gOmV4YzpgfnVybGxpYi5lcnJvci5VUkxFcnJvcmAgaXMgcmFpc2VkLgogCiAKKy4uIF9kYXRhLWhhbmRsZXItb2JqZWN0czoKKworRGF0YUhhbmRsZXIgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBEYXRhSGFuZGxlci5kYXRhX29wZW4ocmVxKQorCisgICBSZWFkIGEgZGF0YSBVUkwuIFRoaXMga2luZCBvZiBVUkwgY29udGFpbnMgdGhlIGNvbnRlbnQgZW5jb2RlZCBpbiB0aGUgVVJMCisgICBpdHNlbGYuIFRoZSBkYXRhIFVSTCBzeW50YXggaXMgc3BlY2lmaWVkIGluIDpyZmM6YDIzOTdgLiBUaGlzIGltcGxlbWVudGF0aW9uCisgICBpZ25vcmVzIHdoaXRlIHNwYWNlcyBpbiBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTHMgc28gdGhlIFVSTCBtYXkgYmUgd3JhcHBlZAorICAgaW4gd2hhdGV2ZXIgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4gQnV0IGV2ZW4gdGhvdWdoIHNvbWUgYnJvd3NlcnMgZG9uJ3QKKyAgIG1pbmQgYWJvdXQgYSBtaXNzaW5nIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiBhIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMLCB0aGlzCisgICBpbXBsZW1lbnRhdGlvbiB3aWxsIHJhaXNlIGFuIDpleGM6YFZhbHVlRXJyb3JgIGluIHRoYXQgY2FzZS4KKworCiAuLiBfZnRwLWhhbmRsZXItb2JqZWN0czoKIAogRlRQSGFuZGxlciBPYmplY3RzCkBAIC0xMzk4LDcgKzEzODksOSBAQAogICAgICBwYWlyOiBGVFA7IHByb3RvY29sCiAKICogQ3VycmVudGx5LCBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IEhUVFAgKHZlcnNpb25zIDAuOSBhbmQKLSAgMS4wKSwgRlRQLCBhbmQgbG9jYWwgZmlsZXMuCisgIDEuMCksIEZUUCwgbG9jYWwgZmlsZXMsIGFuZCBkYXRhIFVSTHMuCisKKyAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgQWRkZWQgc3VwcG9ydCBmb3IgZGF0YSBVUkxzLgogCiAqIFRoZSBjYWNoaW5nIGZlYXR1cmUgb2YgOmZ1bmM6YHVybHJldHJpZXZlYCBoYXMgYmVlbiBkaXNhYmxlZCB1bnRpbCBzb21lb25lCiAgIGZpbmRzIHRoZSB0aW1lIHRvIGhhY2sgcHJvcGVyIHByb2Nlc3Npbmcgb2YgRXhwaXJhdGlvbiB0aW1lIGhlYWRlcnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS92ZW52LnJzdCBiL0RvYy9saWJyYXJ5L3ZlbnYucnN0CmluZGV4IGJlMGNhZDQuLmU5ZWRlOGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ZlbnYucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ZlbnYucnN0CkBAIC03Niw2ICs3Niw4IEBACiAgICB3aXRob3V0IHRoZXJlIG5lZWRpbmcgdG8gYmUgYW55IHJlZmVyZW5jZSB0byBpdHMgdmVudiBpbiBgYFBBVEhgYC4KIAogCisuLiBfdmVudi1hcGk6CisKIEFQSQogLS0tCiAKQEAgLTg1LDcgKzg3LDggQEAKIG1lY2hhbmlzbXMgZm9yIHRoaXJkLXBhcnR5IHZpcnR1YWwgZW52aXJvbm1lbnQgY3JlYXRvcnMgdG8gY3VzdG9taXplIGVudmlyb25tZW50CiBjcmVhdGlvbiBhY2NvcmRpbmcgdG8gdGhlaXIgbmVlZHMsIHRoZSA6Y2xhc3M6YEVudkJ1aWxkZXJgIGNsYXNzLgogCi0uLiBjbGFzczo6IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSkKKy4uIGNsYXNzOjogRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSwgd2l0aF9waXA9RmFsc2UpCiAKICAgICBUaGUgOmNsYXNzOmBFbnZCdWlsZGVyYCBjbGFzcyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcga2V5d29yZCBhcmd1bWVudHMgb24KICAgICBpbnN0YW50aWF0aW9uOgpAQCAtOTMsOCArOTYsOCBAQAogICAgICogYGBzeXN0ZW1fc2l0ZV9wYWNrYWdlc2BgIC0tIGEgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHN5c3RlbSBQeXRob24KICAgICAgIHNpdGUtcGFja2FnZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSB0byB0aGUgZW52aXJvbm1lbnQgKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCiAKLSAgICAqIGBgY2xlYXJgYCAtLSBhIEJvb2xlYW4gdmFsdWUgd2hpY2gsIGlmIHRydWUsIHdpbGwgZGVsZXRlIGFueSBleGlzdGluZyB0YXJnZXQKLSAgICAgIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXhjZXB0aW9uIChkZWZhdWx0cyB0byBgYEZhbHNlYGApLgorICAgICogYGBjbGVhcmBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgdHJ1ZSwgd2lsbCBkZWxldGUgdGhlIGNvbnRlbnRzIG9mCisgICAgICBhbnkgZXhpc3RpbmcgdGFyZ2V0IGRpcmVjdG9yeSwgYmVmb3JlIGNyZWF0aW5nIHRoZSBlbnZpcm9ubWVudC4KIAogICAgICogYGBzeW1saW5rc2BgIC0tIGEgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXR0ZW1wdCB0byBzeW1saW5rIHRoZQogICAgICAgUHl0aG9uIGJpbmFyeSAoYW5kIGFueSBuZWNlc3NhcnkgRExMcyBvciBvdGhlciBiaW5hcmllcywKQEAgLTEwNSw2ICsxMDgsMTIgQEAKICAgICAgIGVudmlyb25tZW50IHdpdGggdGhlIHJ1bm5pbmcgUHl0aG9uIC0gZm9yIHVzZSB3aGVuIHRoYXQgUHl0aG9uIGhhcyBiZWVuCiAgICAgICB1cGdyYWRlZCBpbi1wbGFjZSAoZGVmYXVsdHMgdG8gYGBGYWxzZWBgKS4KIAorICAgICogYGB3aXRoX3BpcGBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgdHJ1ZSwgZW5zdXJlcyBwaXAgaXMKKyAgICAgIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhpcyB1c2VzIDptb2Q6YGVuc3VyZXBpcGAgd2l0aAorICAgICAgdGhlIGBgLS1kZWZhdWx0LXBpcGBgIG9wdGlvbi4KKworICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgQWRkZWQgdGhlIGBgd2l0aF9waXBgYCBwYXJhbWV0ZXIKIAogCiAgICAgQ3JlYXRvcnMgb2YgdGhpcmQtcGFydHkgdmlydHVhbCBlbnZpcm9ubWVudCB0b29scyB3aWxsIGJlIGZyZWUgdG8gdXNlIHRoZQpAQCAtMTg4LDYgKzE5Nyw5IEBACiAgICAgICAgICogYGBfX1ZFTlZfTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSAoZmluYWwgcGF0aAogICAgICAgICAgIHNlZ21lbnQgb2YgZW52aXJvbm1lbnQgZGlyZWN0b3J5KS4KIAorICAgICAgICAqIGBgX19WRU5WX1BST01QVF9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcHJvbXB0ICh0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICBuYW1lIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgYW5kIHdpdGggYSBmb2xsb3dpbmcgc3BhY2UpCisKICAgICAgICAgKiBgYF9fVkVOVl9CSU5fTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgYmluIGRpcmVjdG9yeQogICAgICAgICAgIChlaXRoZXIgYGBiaW5gYCBvciBgYFNjcmlwdHNgYCkuCiAKQEAgLTE5OSwxMSArMjExLDE1IEBACiAKIFRoZXJlIGlzIGFsc28gYSBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb246CiAKLS4uIGZ1bmN0aW9uOjogY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UpCisuLiBmdW5jdGlvbjo6IGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSkKIAogICAgIENyZWF0ZSBhbiA6Y2xhc3M6YEVudkJ1aWxkZXJgIHdpdGggdGhlIGdpdmVuIGtleXdvcmQgYXJndW1lbnRzLCBhbmQgY2FsbCBpdHMKICAgICA6bWV0aDpgfkVudkJ1aWxkZXIuY3JlYXRlYCBtZXRob2Qgd2l0aCB0aGUgKmVudl9kaXIqIGFyZ3VtZW50LgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBBZGRlZCB0aGUgYGB3aXRoX3BpcGBgIHBhcmFtZXRlcgorCiBBbiBleGFtcGxlIG9mIGV4dGVuZGluZyBgYEVudkJ1aWxkZXJgYAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QgYi9Eb2MvbGlicmFyeS93YXZlLnJzdAppbmRleCBhZmFmYjQ1Li5hYjY0OTc4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93YXZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXZlLnJzdApAQCAtMTksMjYgKzE5LDMyIEBACiAuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZSwgbW9kZT1Ob25lKQogCiAgICBJZiAqZmlsZSogaXMgYSBzdHJpbmcsIG9wZW4gdGhlIGZpbGUgYnkgdGhhdCBuYW1lLCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgYQotICAgc2Vla2FibGUgZmlsZS1saWtlIG9iamVjdC4gICptb2RlKiBjYW4gYmUgYW55IG9mCisgICBmaWxlLWxpa2Ugb2JqZWN0LiAgKm1vZGUqIGNhbiBiZToKIAotICAgYGAncidgYCwgYGAncmInYGAKKyAgIGBgJ3JiJ2BgCiAgICAgICBSZWFkIG9ubHkgbW9kZS4KIAotICAgYGAndydgYCwgYGAnd2InYGAKKyAgIGBgJ3diJ2BgCiAgICAgICBXcml0ZSBvbmx5IG1vZGUuCiAKICAgIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBhbGxvdyByZWFkL3dyaXRlIFdBViBmaWxlcy4KIAotICAgQSAqbW9kZSogb2YgYGAncidgYCBvciBgYCdyYidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3JlYWRgIG9iamVjdCwgd2hpbGUgYQotICAgKm1vZGUqIG9mIGBgJ3cnYGAgb3IgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV93cml0ZWAgb2JqZWN0LiAgSWYKLSAgICptb2RlKiBpcyBvbWl0dGVkIGFuZCBhIGZpbGUtbGlrZSBvYmplY3QgaXMgcGFzc2VkIGFzICpmaWxlKiwgYGBmaWxlLm1vZGVgYAotICAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgKm1vZGUqICh0aGUgYGAnYidgYCBmbGFnIGlzIHN0aWxsIGFkZGVkIGlmCi0gICBuZWNlc3NhcnkpLgorICAgQSAqbW9kZSogb2YgYGAncmInYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV9yZWFkYCBvYmplY3QsIHdoaWxlIGEgKm1vZGUqIG9mCisgICBgYCd3YidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3dyaXRlYCBvYmplY3QuICBJZiAqbW9kZSogaXMgb21pdHRlZCBhbmQgYQorICAgZmlsZS1saWtlIG9iamVjdCBpcyBwYXNzZWQgYXMgKmZpbGUqLCBgYGZpbGUubW9kZWBgIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQKKyAgIHZhbHVlIGZvciAqbW9kZSouCiAKICAgIElmIHlvdSBwYXNzIGluIGEgZmlsZS1saWtlIG9iamVjdCwgdGhlIHdhdmUgb2JqZWN0IHdpbGwgbm90IGNsb3NlIGl0IHdoZW4gaXRzCiAgICA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQ7IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbG9zZQogICAgdGhlIGZpbGUgb2JqZWN0LgogCisgICBUaGUgOmZ1bmM6YC5vcGVuYCBmdW5jdGlvbiBtYXkgYmUgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuICBXaGVuCisgICB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrIGNvbXBsZXRlcywgdGhlIDptZXRoOmBXYXZlX3JlYWQuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV9yZWFkLmNsb3NlPmAgb3IgOm1ldGg6YFdhdmVfd3JpdGUuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV93cml0ZS5jbG9zZSgpPmAgbWV0aG9kIGlzIGNhbGxlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMuCiAKIC4uIGZ1bmN0aW9uOjogb3BlbmZwKGZpbGUsIG1vZGUpCiAKQEAgLTk4LDggKzEwNCw5IEBACiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm5zIGEgdHVwbGUgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsCi0gICBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5yZWFkZnJhbWVzKG4pCkBAIC0xNDMsMTMgKzE1MCwzMCBAQAogV2F2ZV93cml0ZSBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorRm9yIHNlZWthYmxlIG91dHB1dCBzdHJlYW1zLCB0aGUgYGB3YXZlYGAgaGVhZGVyIHdpbGwgYXV0b21hdGljYWxseSBiZSB1cGRhdGVkCit0byByZWZsZWN0IHRoZSBudW1iZXIgb2YgZnJhbWVzIGFjdHVhbGx5IHdyaXR0ZW4uICBGb3IgdW5zZWVrYWJsZSBzdHJlYW1zLCB0aGUKKypuZnJhbWVzKiB2YWx1ZSBtdXN0IGJlIGFjY3VyYXRlIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGRhdGEgaXMgd3JpdHRlbi4gIEFuCithY2N1cmF0ZSAqbmZyYW1lcyogdmFsdWUgY2FuIGJlIGFjaGlldmVkIGVpdGhlciBieSBjYWxsaW5nCis6bWV0aDpgfldhdmVfd3JpdGUuc2V0bmZyYW1lc2Agb3IgOm1ldGg6YH5XYXZlX3dyaXRlLnNldHBhcmFtc2Agd2l0aCB0aGUgbnVtYmVyCitvZiBmcmFtZXMgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gYmVmb3JlIDptZXRoOmB+V2F2ZV93cml0ZS5jbG9zZWAgaXMgY2FsbGVkIGFuZAordGhlbiB1c2luZyA6bWV0aDpgfldhdmVfd3JpdGUud3JpdGVmcmFtZXNyYXdgIHRvIHdyaXRlIHRoZSBmcmFtZSBkYXRhLCBvciBieQorY2FsbGluZyA6bWV0aDpgfldhdmVfd3JpdGUud3JpdGVmcmFtZXNgIHdpdGggYWxsIG9mIHRoZSBmcmFtZSBkYXRhIHRvIGJlCit3cml0dGVuLiAgSW4gdGhlIGxhdHRlciBjYXNlIDptZXRoOmB+V2F2ZV93cml0ZS53cml0ZWZyYW1lc2Agd2lsbCBjYWxjdWxhdGUKK3RoZSBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBkYXRhIGFuZCBzZXQgKm5mcmFtZXMqIGFjY29yZGluZ2x5IGJlZm9yZSB3cml0aW5nCit0aGUgZnJhbWUgZGF0YS4KKwogV2F2ZV93cml0ZSBvYmplY3RzLCBhcyByZXR1cm5lZCBieSA6ZnVuYzpgLm9wZW5gLCBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFkZGVkIHN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMuCisKIAogLi4gbWV0aG9kOjogV2F2ZV93cml0ZS5jbG9zZSgpCiAKICAgIE1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdCwgYW5kIGNsb3NlIHRoZSBmaWxlIGlmIGl0IHdhcyBvcGVuZWQgYnkKLSAgIDptb2Q6YHdhdmVgLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gb2JqZWN0IGNvbGxlY3Rpb24uCisgICA6bW9kOmB3YXZlYC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIG9iamVjdCBjb2xsZWN0aW9uLiAgSXQgd2lsbCByYWlzZQorICAgYW4gZXhjZXB0aW9uIGlmIHRoZSBvdXRwdXQgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSBhbmQgKm5mcmFtZXMqIGRvZXMgbm90CisgICBtYXRjaCB0aGUgbnVtYmVyIG9mIGZyYW1lcyBhY3R1YWxseSB3cml0dGVuLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuc2V0bmNoYW5uZWxzKG4pCkBAIC0xNzMsOCArMTk3LDkgQEAKIAogLi4gbWV0aG9kOjogV2F2ZV93cml0ZS5zZXRuZnJhbWVzKG4pCiAKLSAgIFNldCB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byAqbiouIFRoaXMgd2lsbCBiZSBjaGFuZ2VkIGxhdGVyIGlmIG1vcmUgZnJhbWVzIGFyZQotICAgd3JpdHRlbi4KKyAgIFNldCB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byAqbiouICBUaGlzIHdpbGwgYmUgY2hhbmdlZCBsYXRlciBpZiB0aGUgbnVtYmVyCisgICBvZiBmcmFtZXMgYWN0dWFsbHkgd3JpdHRlbiBpcyBkaWZmZXJlbnQgKHRoaXMgdXBkYXRlIGF0dGVtcHQgd2lsbAorICAgcmFpc2UgYW4gZXJyb3IgaWYgdGhlIG91dHB1dCBzdHJlYW0gaXMgbm90IHNlZWthYmxlKS4KIAogCiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLnNldGNvbXB0eXBlKHR5cGUsIG5hbWUpCkBAIC0yMDAsMTAgKzIyNSwxOSBAQAogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMsIHdpdGhvdXQgY29ycmVjdGluZyAqbmZyYW1lcyouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCisKIAogLi4gbWV0aG9kOjogV2F2ZV93cml0ZS53cml0ZWZyYW1lcyhkYXRhKQogCi0gICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4KKyAgIFdyaXRlIGF1ZGlvIGZyYW1lcyBhbmQgbWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LiAgSXQgd2lsbCByYWlzZSBhbgorICAgZXJyb3IgaWYgdGhlIG91dHB1dCBzdHJlYW0gaXMgbm90IHNlZWthYmxlIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcworICAgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiBhZnRlciAqZGF0YSogaGFzIGJlZW4gd3JpdHRlbiBkb2VzIG5vdCBtYXRjaCB0aGUKKyAgIHByZXZpb3VzbHkgc2V0IHZhbHVlIGZvciAqbmZyYW1lcyouCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCiAKIAogTm90ZSB0aGF0IGl0IGlzIGludmFsaWQgdG8gc2V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyIGNhbGxpbmcgOm1ldGg6YHdyaXRlZnJhbWVzYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAppbmRleCAyMjRmNDQyLi45Y2E2MGE5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdApAQCAtNTEsMTAgKzUxLDE2IEBACiBidXQga2VlcHMgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBlbGVtZW50cywganVzdCBsaWtlIGEKIDpjbGFzczpgV2Vha0tleURpY3Rpb25hcnlgIGRvZXMuCiAKLU1vc3QgcHJvZ3JhbXMgc2hvdWxkIGZpbmQgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2Ugd2VhayBjb250YWluZXIgdHlwZXMgaXMgYWxsCi10aGV5IG5lZWQgLS0gaXQncyBub3QgdXN1YWxseSBuZWNlc3NhcnkgdG8gY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcwotZGlyZWN0bHkuICBUaGUgbG93LWxldmVsIG1hY2hpbmVyeSB1c2VkIGJ5IHRoZSB3ZWFrIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb25zCi1pcyBleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCis6Y2xhc3M6YGZpbmFsaXplYCBwcm92aWRlcyBhIHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvIHJlZ2lzdGVyIGEKK2NsZWFudXAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLgorVGhpcyBpcyBzaW1wbGVyIHRvIHVzZSB0aGFuIHNldHRpbmcgdXAgYSBjYWxsYmFjayBmdW5jdGlvbiBvbiBhIHJhdword2VhayByZWZlcmVuY2UsIHNpbmNlIHRoZSBtb2R1bGUgYXV0b21hdGljYWxseSBlbnN1cmVzIHRoYXQgdGhlIGZpbmFsaXplcgorcmVtYWlucyBhbGl2ZSB1bnRpbCB0aGUgb2JqZWN0IGlzIGNvbGxlY3RlZC4KKworTW9zdCBwcm9ncmFtcyBzaG91bGQgZmluZCB0aGF0IHVzaW5nIG9uZSBvZiB0aGVzZSB3ZWFrIGNvbnRhaW5lciB0eXBlcworb3IgOmNsYXNzOmBmaW5hbGl6ZWAgaXMgYWxsIHRoZXkgbmVlZCAtLSBpdCdzIG5vdCB1c3VhbGx5IG5lY2Vzc2FyeSB0bworY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcyBkaXJlY3RseS4gIFRoZSBsb3ctbGV2ZWwgbWFjaGluZXJ5IGlzCitleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCiAKIE5vdCBhbGwgb2JqZWN0cyBjYW4gYmUgd2Vha2x5IHJlZmVyZW5jZWQ7IHRob3NlIG9iamVjdHMgd2hpY2ggY2FuIGluY2x1ZGUgY2xhc3MKIGluc3RhbmNlcywgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIChidXQgbm90IGluIEMpLCBpbnN0YW5jZSBtZXRob2RzLCBzZXRzLApAQCAtMTExLDYgKzExNywxNSBAQAogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3NhYmxlIHR5cGUgcmF0aGVyIHRoYW4gYSBmYWN0b3J5IGZ1bmN0aW9uLgogCisgICAuLiBhdHRyaWJ1dGU6OiBfX2NhbGxiYWNrX18KKworICAgICAgVGhpcyByZWFkLW9ubHkgYXR0cmlidXRlIHJldHVybnMgdGhlIGNhbGxiYWNrIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICAgICAgd2Vha3JlZi4gIElmIHRoZXJlIGlzIG5vIGNhbGxiYWNrIG9yIGlmIHRoZSByZWZlcmVudCBvZiB0aGUgd2Vha3JlZiBpcworICAgICAgbm8gbG9uZ2VyIGFsaXZlIHRoZW4gdGhpcyBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGBgTm9uZWBgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlIDphdHRyOmBfX2NhbGxiYWNrX19gIGF0dHJpYnV0ZS4KKwogCiAuLiBmdW5jdGlvbjo6IHByb3h5KG9iamVjdFssIGNhbGxiYWNrXSkKIApAQCAtMTkyLDYgKzIwNyw5OCBAQAogICAgZGlzY2FyZGVkIHdoZW4gbm8gc3Ryb25nIHJlZmVyZW5jZSB0byBpdCBleGlzdHMgYW55IG1vcmUuCiAKIAorLi4gY2xhc3M6OiBXZWFrTWV0aG9kKG1ldGhvZCkKKworICAgQSBjdXN0b20gOmNsYXNzOmByZWZgIHN1YmNsYXNzIHdoaWNoIHNpbXVsYXRlcyBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgYm91bmQKKyAgIG1ldGhvZCAoaS5lLiwgYSBtZXRob2QgZGVmaW5lZCBvbiBhIGNsYXNzIGFuZCBsb29rZWQgdXAgb24gYW4gaW5zdGFuY2UpLgorICAgU2luY2UgYSBib3VuZCBtZXRob2QgaXMgZXBoZW1lcmFsLCBhIHN0YW5kYXJkIHdlYWsgcmVmZXJlbmNlIGNhbm5vdCBrZWVwCisgICBob2xkIG9mIGl0LiAgOmNsYXNzOmBXZWFrTWV0aG9kYCBoYXMgc3BlY2lhbCBjb2RlIHRvIHJlY3JlYXRlIHRoZSBib3VuZAorICAgbWV0aG9kIHVudGlsIGVpdGhlciB0aGUgb2JqZWN0IG9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkaWVzOjoKKworICAgICAgPj4+IGNsYXNzIEM6CisgICAgICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZik6CisgICAgICAuLi4gICAgICAgICBwcmludCgibWV0aG9kIGNhbGxlZCEiKQorICAgICAgLi4uCisgICAgICA+Pj4gYyA9IEMoKQorICAgICAgPj4+IHIgPSB3ZWFrcmVmLnJlZihjLm1ldGhvZCkKKyAgICAgID4+PiByKCkKKyAgICAgID4+PiByID0gd2Vha3JlZi5XZWFrTWV0aG9kKGMubWV0aG9kKQorICAgICAgPj4+IHIoKQorICAgICAgPGJvdW5kIG1ldGhvZCBDLm1ldGhvZCBvZiA8X19tYWluX18uQyBvYmplY3QgYXQgMHg3ZmM4NTk4MzAyMjA+PgorICAgICAgPj4+IHIoKSgpCisgICAgICBtZXRob2QgY2FsbGVkIQorICAgICAgPj4+IGRlbCBjCisgICAgICA+Pj4gZ2MuY29sbGVjdCgpCisgICAgICAwCisgICAgICA+Pj4gcigpCisgICAgICA+Pj4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGNsYXNzOjogZmluYWxpemUob2JqLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpCisKKyAgIFJldHVybiBhIGNhbGxhYmxlIGZpbmFsaXplciBvYmplY3Qgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiAqb2JqKgorICAgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFVubGlrZSBhbiBvcmRpbmFyeSB3ZWFrIHJlZmVyZW5jZSwgYSBmaW5hbGl6ZXIKKyAgIHdpbGwgYWx3YXlzIHN1cnZpdmUgdW50aWwgdGhlIHJlZmVyZW5jZSBvYmplY3QgaXMgY29sbGVjdGVkLCBncmVhdGx5CisgICBzaW1wbGlmeWluZyBsaWZlY3ljbGUgbWFuYWdlbWVudC4KKworICAgQSBmaW5hbGl6ZXIgaXMgY29uc2lkZXJlZCAqYWxpdmUqIHVudGlsIGl0IGlzIGNhbGxlZCAoZWl0aGVyIGV4cGxpY2l0bHkKKyAgIG9yIGF0IGdhcmJhZ2UgY29sbGVjdGlvbiksIGFuZCBhZnRlciB0aGF0IGl0IGlzICpkZWFkKi4gIENhbGxpbmcgYSBsaXZlCisgICBmaW5hbGl6ZXIgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgYGBmdW5jKCphcmcsICoqa3dhcmdzKWBgLAorICAgd2hlcmVhcyBjYWxsaW5nIGEgZGVhZCBmaW5hbGl6ZXIgcmV0dXJucyA6Y29uc3Q6YE5vbmVgLgorCisgICBFeGNlcHRpb25zIHJhaXNlZCBieSBmaW5hbGl6ZXIgY2FsbGJhY2tzIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgIHdpbGwgYmUgc2hvd24gb24gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dCwgYnV0IGNhbm5vdCBiZQorICAgcHJvcGFnYXRlZC4gIFRoZXkgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGV4Y2VwdGlvbnMgcmFpc2VkCisgICBmcm9tIGFuIG9iamVjdCdzIDptZXRoOmBfX2RlbF9fYCBtZXRob2Qgb3IgYSB3ZWFrIHJlZmVyZW5jZSdzCisgICBjYWxsYmFjay4KKworICAgV2hlbiB0aGUgcHJvZ3JhbSBleGl0cywgZWFjaCByZW1haW5pbmcgbGl2ZSBmaW5hbGl6ZXIgaXMgY2FsbGVkCisgICB1bmxlc3MgaXRzIDphdHRyOmBhdGV4aXRgIGF0dHJpYnV0ZSBoYXMgYmVlbiBzZXQgdG8gZmFsc2UuICBUaGV5CisgICBhcmUgY2FsbGVkIGluIHJldmVyc2Ugb3JkZXIgb2YgY3JlYXRpb24uCisKKyAgIEEgZmluYWxpemVyIHdpbGwgbmV2ZXIgaW52b2tlIGl0cyBjYWxsYmFjayBkdXJpbmcgdGhlIGxhdGVyIHBhcnQgb2YKKyAgIHRoZSBpbnRlcnByZXRlciBzaHV0ZG93biB3aGVuIG1vZHVsZSBnbG9iYWxzIGFyZSBsaWFibGUgdG8gaGF2ZQorICAgYmVlbiByZXBsYWNlZCBieSA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBtZXRob2Q6OiBfX2NhbGxfXygpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIG1hcmsgaXQgYXMgZGVhZCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgIGNhbGxpbmcgYGBmdW5jKCphcmdzLCAqKmt3YXJncylgYC4gIElmICpzZWxmKiBpcyBkZWFkIHRoZW4gcmV0dXJuCisgICAgICA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBtZXRob2Q6OiBkZXRhY2goKQorCisgICAgICBJZiAqc2VsZiogaXMgYWxpdmUgdGhlbiBtYXJrIGl0IGFzIGRlYWQgYW5kIHJldHVybiB0aGUgdHVwbGUKKyAgICAgIGBgKG9iaiwgZnVuYywgYXJncywga3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4KKyAgICAgIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IHBlZWsoKQorCisgICAgICBJZiAqc2VsZiogaXMgYWxpdmUgdGhlbiByZXR1cm4gdGhlIHR1cGxlIGBgKG9iaiwgZnVuYywgYXJncywKKyAgICAgIGt3YXJncylgYC4gIElmICpzZWxmKiBpcyBkZWFkIHRoZW4gcmV0dXJuIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGFsaXZlCisKKyAgICAgIFByb3BlcnR5IHdoaWNoIGlzIHRydWUgaWYgdGhlIGZpbmFsaXplciBpcyBhbGl2ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBhdGV4aXQKKworICAgICAgQSB3cml0YWJsZSBib29sZWFuIHByb3BlcnR5IHdoaWNoIGJ5IGRlZmF1bHQgaXMgdHJ1ZS4gIFdoZW4gdGhlCisgICAgICBwcm9ncmFtIGV4aXRzLCBpdCBjYWxscyBhbGwgcmVtYWluaW5nIGxpdmUgZmluYWxpemVycyBmb3Igd2hpY2gKKyAgICAgIDphdHRyOmAuYXRleGl0YCBpcyB0cnVlLiAgVGhleSBhcmUgY2FsbGVkIGluIHJldmVyc2Ugb3JkZXIgb2YKKyAgICAgIGNyZWF0aW9uLgorCisgICAuLiBub3RlOjoKKworICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0ICpmdW5jKiwgKmFyZ3MqIGFuZCAqa3dhcmdzKiBkbworICAgICAgbm90IG93biBhbnkgcmVmZXJlbmNlcyB0byAqb2JqKiwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCisgICAgICBzaW5jZSBvdGhlcndpc2UgKm9iaiogd2lsbCBuZXZlciBiZSBnYXJiYWdlIGNvbGxlY3RlZC4gIEluCisgICAgICBwYXJ0aWN1bGFyLCAqZnVuYyogc2hvdWxkIG5vdCBiZSBhIGJvdW5kIG1ldGhvZCBvZiAqb2JqKi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZGF0YTo6IFJlZmVyZW5jZVR5cGUKIAogICAgVGhlIHR5cGUgb2JqZWN0IGZvciB3ZWFrIHJlZmVyZW5jZXMgb2JqZWN0cy4KQEAgLTIzMiw4ICszMzksOSBAQAogV2VhayBSZWZlcmVuY2UgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XZWFrIHJlZmVyZW5jZSBvYmplY3RzIGhhdmUgbm8gYXR0cmlidXRlcyBvciBtZXRob2RzLCBidXQgZG8gYWxsb3cgdGhlIHJlZmVyZW50Ci10byBiZSBvYnRhaW5lZCwgaWYgaXQgc3RpbGwgZXhpc3RzLCBieSBjYWxsaW5nIGl0OgorV2VhayByZWZlcmVuY2Ugb2JqZWN0cyBoYXZlIG5vIG1ldGhvZHMgYW5kIG5vIGF0dHJpYnV0ZXMgYmVzaWRlcworOmF0dHI6YHJlZi5fX2NhbGxiYWNrX19gLiBBIHdlYWsgcmVmZXJlbmNlIG9iamVjdCBhbGxvd3MgdGhlIHJlZmVyZW50IHRvIGJlCitvYnRhaW5lZCwgaWYgaXQgc3RpbGwgZXhpc3RzLCBieSBjYWxsaW5nIGl0OgogCiAgICA+Pj4gaW1wb3J0IHdlYWtyZWYKICAgID4+PiBjbGFzcyBPYmplY3Q6CkBAIC0zMjYsMyArNDM0LDE0MCBAQAogICAgZGVmIGlkMm9iaihvaWQpOgogICAgICAgIHJldHVybiBfaWQyb2JqX2RpY3Rbb2lkXQogCisKKy4uIF9maW5hbGl6ZS1leGFtcGxlczoKKworRmluYWxpemVyIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYWluIGJlbmVmaXQgb2YgdXNpbmcgOmNsYXNzOmBmaW5hbGl6ZWAgaXMgdGhhdCBpdCBtYWtlcyBpdCBzaW1wbGUKK3RvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgd2l0aG91dCBuZWVkaW5nIHRvIHByZXNlcnZlIHRoZSByZXR1cm5lZCBmaW5hbGl6ZXIKK29iamVjdC4gIEZvciBpbnN0YW5jZQorCisgICAgPj4+IGltcG9ydCB3ZWFrcmVmCisgICAgPj4+IGNsYXNzIE9iamVjdDoKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4KKyAgICA+Pj4ga2VubnkgPSBPYmplY3QoKQorICAgID4+PiB3ZWFrcmVmLmZpbmFsaXplKGtlbm55LCBwcmludCwgIllvdSBraWxsZWQgS2VubnkhIikgICNkb2N0ZXN0OitFTExJUFNJUworICAgIDxmaW5hbGl6ZSBvYmplY3QgYXQgLi4uOyBmb3IgJ09iamVjdCcgYXQgLi4uPgorICAgID4+PiBkZWwga2VubnkKKyAgICBZb3Uga2lsbGVkIEtlbm55IQorCitUaGUgZmluYWxpemVyIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgYXMgd2VsbC4gIEhvd2V2ZXIgdGhlIGZpbmFsaXplcgord2lsbCBpbnZva2UgdGhlIGNhbGxiYWNrIGF0IG1vc3Qgb25jZS4KKworICAgID4+PiBkZWYgY2FsbGJhY2soeCwgeSwgeik6CisgICAgLi4uICAgICBwcmludCgiQ0FMTEJBQ0siKQorICAgIC4uLiAgICAgcmV0dXJuIHggKyB5ICsgegorICAgIC4uLgorICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiBmID0gd2Vha3JlZi5maW5hbGl6ZShvYmosIGNhbGxiYWNrLCAxLCAyLCB6PTMpCisgICAgPj4+IGFzc2VydCBmLmFsaXZlCisgICAgPj4+IGFzc2VydCBmKCkgPT0gNgorICAgIENBTExCQUNLCisgICAgPj4+IGFzc2VydCBub3QgZi5hbGl2ZQorICAgID4+PiBmKCkgICAgICAgICAgICAgICAgICAgICAjIGNhbGxiYWNrIG5vdCBjYWxsZWQgYmVjYXVzZSBmaW5hbGl6ZXIgZGVhZAorICAgID4+PiBkZWwgb2JqICAgICAgICAgICAgICAgICAjIGNhbGxiYWNrIG5vdCBjYWxsZWQgYmVjYXVzZSBmaW5hbGl6ZXIgZGVhZAorCitZb3UgY2FuIHVucmVnaXN0ZXIgYSBmaW5hbGl6ZXIgdXNpbmcgaXRzIDptZXRoOmB+ZmluYWxpemUuZGV0YWNoYAorbWV0aG9kLiAgVGhpcyBraWxscyB0aGUgZmluYWxpemVyIGFuZCByZXR1cm5zIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvCit0aGUgY29uc3RydWN0b3Igd2hlbiBpdCB3YXMgY3JlYXRlZC4KKworICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiBmID0gd2Vha3JlZi5maW5hbGl6ZShvYmosIGNhbGxiYWNrLCAxLCAyLCB6PTMpCisgICAgPj4+IGYuZGV0YWNoKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgKDxfX21haW5fXy5PYmplY3Qgb2JqZWN0IC4uLj4sIDxmdW5jdGlvbiBjYWxsYmFjayAuLi4+LCAoMSwgMiksIHsneic6IDN9KQorICAgID4+PiBuZXdvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncyA9IF8KKyAgICA+Pj4gYXNzZXJ0IG5vdCBmLmFsaXZlCisgICAgPj4+IGFzc2VydCBuZXdvYmogaXMgb2JqCisgICAgPj4+IGFzc2VydCBmdW5jKCphcmdzLCAqKmt3YXJncykgPT0gNgorICAgIENBTExCQUNLCisKK1VubGVzcyB5b3Ugc2V0IHRoZSA6YXR0cjpgfmZpbmFsaXplLmF0ZXhpdGAgYXR0cmlidXRlIHRvCis6Y29uc3Q6YEZhbHNlYCwgYSBmaW5hbGl6ZXIgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcHJvZ3JhbSBleGl0cyBpZiBpdAoraXMgc3RpbGwgYWxpdmUuICBGb3IgaW5zdGFuY2UKKworICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgcHJpbnQsICJvYmogZGVhZCBvciBleGl0aW5nIikgICNkb2N0ZXN0OitFTExJUFNJUworICAgIDxmaW5hbGl6ZSBvYmplY3QgYXQgLi4uOyBmb3IgJ09iamVjdCcgYXQgLi4uPgorICAgID4+PiBleGl0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkb2N0ZXN0OitTS0lQCisgICAgb2JqIGRlYWQgb3IgZXhpdGluZworCisKK0NvbXBhcmluZyBmaW5hbGl6ZXJzIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSB3ZSB3YW50IHRvIGNyZWF0ZSBhIGNsYXNzIHdob3NlIGluc3RhbmNlcyByZXByZXNlbnQgdGVtcG9yYXJ5CitkaXJlY3Rvcmllcy4gIFRoZSBkaXJlY3RvcmllcyBzaG91bGQgYmUgZGVsZXRlZCB3aXRoIHRoZWlyIGNvbnRlbnRzCit3aGVuIHRoZSBmaXJzdCBvZiB0aGUgZm9sbG93aW5nIGV2ZW50cyBvY2N1cnM6CisKKyogdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCwKKyogdGhlIG9iamVjdCdzIDptZXRoOmByZW1vdmVgIG1ldGhvZCBpcyBjYWxsZWQsIG9yCisqIHRoZSBwcm9ncmFtIGV4aXRzLgorCitXZSBtaWdodCB0cnkgdG8gaW1wbGVtZW50IHRoZSBjbGFzcyB1c2luZyBhIDptZXRoOmBfX2RlbF9fYCBtZXRob2QgYXMKK2ZvbGxvd3M6OgorCisgICAgY2xhc3MgVGVtcERpcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCisKKyAgICAgICAgZGVmIHJlbW92ZShzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYubmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYubmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiByZW1vdmVkKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZSBpcyBOb25lCisKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBzZWxmLnJlbW92ZSgpCisKK1N0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgbm8gbG9uZ2VyIHByZXZlbnQKK3JlZmVyZW5jZSBjeWNsZXMgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCwgYW5kIG1vZHVsZSBnbG9iYWxzIGFyZQorbm8gbG9uZ2VyIGZvcmNlZCB0byA6Y29uc3Q6YE5vbmVgIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93bi4gU28gdGhpcworY29kZSBzaG91bGQgd29yayB3aXRob3V0IGFueSBpc3N1ZXMgb24gQ1B5dGhvbi4KKworSG93ZXZlciwgaGFuZGxpbmcgb2YgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgaXMgbm90b3Jpb3VzbHkgaW1wbGVtZW50YXRpb24KK3NwZWNpZmljLCBzaW5jZSBpdCBkZXBlbmRzIG9uIGludGVybmFsIGRldGFpbHMgb2YgdGhlIGludGVycHJldGVyJ3MgZ2FyYmFnZQorY29sbGVjdG9yIGltcGxlbWVudGF0aW9uLgorCitBIG1vcmUgcm9idXN0IGFsdGVybmF0aXZlIGNhbiBiZSB0byBkZWZpbmUgYSBmaW5hbGl6ZXIgd2hpY2ggb25seSByZWZlcmVuY2VzCit0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBvYmplY3RzIHRoYXQgaXQgbmVlZHMsIHJhdGhlciB0aGFuIGhhdmluZyBhY2Nlc3MKK3RvIHRoZSBmdWxsIHN0YXRlIG9mIHRoZSBvYmplY3Q6OgorCisgICAgY2xhc3MgVGVtcERpcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZXIgPSB3ZWFrcmVmLmZpbmFsaXplKHNlbGYsIHNodXRpbC5ybXRyZWUsIHNlbGYubmFtZSkKKworICAgICAgICBkZWYgcmVtb3ZlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZmluYWxpemVyKCkKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIHJlbW92ZWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gbm90IHNlbGYuX2ZpbmFsaXplci5hbGl2ZQorCitEZWZpbmVkIGxpa2UgdGhpcywgb3VyIGZpbmFsaXplciBvbmx5IHJlY2VpdmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXRhaWxzCitpdCBuZWVkcyB0byBjbGVhbiB1cCB0aGUgZGlyZWN0b3J5IGFwcHJvcHJpYXRlbHkuIElmIHRoZSBvYmplY3QgbmV2ZXIgZ2V0cworZ2FyYmFnZSBjb2xsZWN0ZWQgdGhlIGZpbmFsaXplciB3aWxsIHN0aWxsIGJlIGNhbGxlZCBhdCBleGl0LgorCitUaGUgb3RoZXIgYWR2YW50YWdlIG9mIHdlYWtyZWYgYmFzZWQgZmluYWxpemVycyBpcyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgdG8KK3JlZ2lzdGVyIGZpbmFsaXplcnMgZm9yIGNsYXNzZXMgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMgY29udHJvbGxlZCBieSBhCit0aGlyZCBwYXJ0eSwgc3VjaCBhcyBydW5uaW5nIGNvZGUgd2hlbiBhIG1vZHVsZSBpcyB1bmxvYWRlZDo6CisKKyAgICBpbXBvcnQgd2Vha3JlZiwgc3lzCisgICAgZGVmIHVubG9hZGluZ19tb2R1bGUoKToKKyAgICAgICAgIyBpbXBsaWNpdCByZWZlcmVuY2UgdG8gdGhlIG1vZHVsZSBnbG9iYWxzIGZyb20gdGhlIGZ1bmN0aW9uIGJvZHkKKyAgICB3ZWFrcmVmLmZpbmFsaXplKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgdW5sb2FkaW5nX21vZHVsZSkKKworCisuLiBub3RlOjoKKworICAgSWYgeW91IGNyZWF0ZSBhIGZpbmFsaXplciBvYmplY3QgaW4gYSBkYWVtb25pYyB0aHJlYWQganVzdCBhcyB0aGUKKyAgIHRoZSBwcm9ncmFtIGV4aXRzIHRoZW4gdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGZpbmFsaXplcgorICAgZG9lcyBub3QgZ2V0IGNhbGxlZCBhdCBleGl0LiAgSG93ZXZlciwgaW4gYSBkYWVtb25pYyB0aHJlYWQKKyAgIDpmdW5jOmBhdGV4aXQucmVnaXN0ZXJgLCBgYHRyeTogLi4uIGZpbmFsbHk6IC4uLmBgIGFuZCBgYHdpdGg6IC4uLmBgCisgICBkbyBub3QgZ3VhcmFudGVlIHRoYXQgY2xlYW51cCBvY2N1cnMgZWl0aGVyLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QgYi9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdAppbmRleCA5YzJiM2FiLi5lZjYzNzY5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdApAQCAtMTksMTIgKzE5LDEyIEBACiBhdmFpbGFibGUuICBJZiB0ZXh0LW1vZGUgYnJvd3NlcnMgYXJlIHVzZWQsIHRoZSBjYWxsaW5nIHByb2Nlc3Mgd2lsbCBibG9jayB1bnRpbAogdGhlIHVzZXIgZXhpdHMgdGhlIGJyb3dzZXIuCiAKLUlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA6ZW52dmFyOmBCUk9XU0VSYCBleGlzdHMsIGl0IGlzIGludGVycHJldGVkIHRvCi1vdmVycmlkZSB0aGUgcGxhdGZvcm0gZGVmYXVsdCBsaXN0IG9mIGJyb3dzZXJzLCBhcyBhIDpkYXRhOmBvcy5wYXRoc2VwYC1zZXBhcmF0ZWQKLWxpc3Qgb2YgYnJvd3NlcnMgdG8gdHJ5IGluIG9yZGVyLiAgV2hlbiB0aGUgdmFsdWUgb2YgYSBsaXN0IHBhcnQgY29udGFpbnMgdGhlCi1zdHJpbmcgYGAlc2BgLCB0aGVuIGl0IGlzICBpbnRlcnByZXRlZCBhcyBhIGxpdGVyYWwgYnJvd3NlciBjb21tYW5kIGxpbmUgdG8gYmUKLXVzZWQgd2l0aCB0aGUgYXJndW1lbnQgVVJMIHN1YnN0aXR1dGVkIGZvciBgYCVzYGA7IGlmIHRoZSBwYXJ0IGRvZXMgbm90IGNvbnRhaW4KLWBgJXNgYCwgaXQgaXMgc2ltcGx5IGludGVycHJldGVkIGFzIHRoZSBuYW1lIG9mIHRoZSBicm93c2VyIHRvIGxhdW5jaC4gWzFdXworSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDplbnZ2YXI6YEJST1dTRVJgIGV4aXN0cywgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCis6ZGF0YTpgb3MucGF0aHNlcGAtc2VwYXJhdGVkIGxpc3Qgb2YgYnJvd3NlcnMgdG8gdHJ5IGFoZWFkIG9mIHRoZSB0aGUgcGxhdGZvcm0KK2RlZmF1bHRzLiAgV2hlbiB0aGUgdmFsdWUgb2YgYSBsaXN0IHBhcnQgY29udGFpbnMgdGhlIHN0cmluZyBgYCVzYGAsIHRoZW4gaXQgaXMKK2ludGVycHJldGVkIGFzIGEgbGl0ZXJhbCBicm93c2VyIGNvbW1hbmQgbGluZSB0byBiZSB1c2VkIHdpdGggdGhlIGFyZ3VtZW50IFVSTAorc3Vic3RpdHV0ZWQgZm9yIGBgJXNgYDsgaWYgdGhlIHBhcnQgZG9lcyBub3QgY29udGFpbiBgYCVzYGAsIGl0IGlzIHNpbXBseQoraW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGJyb3dzZXIgdG8gbGF1bmNoLiBbMV1fCiAKIEZvciBub24tVW5peCBwbGF0Zm9ybXMsIG9yIHdoZW4gYSByZW1vdGUgYnJvd3NlciBpcyBhdmFpbGFibGUgb24gVW5peCwgdGhlCiBjb250cm9sbGluZyBwcm9jZXNzIHdpbGwgbm90IHdhaXQgZm9yIHRoZSB1c2VyIHRvIGZpbmlzaCB3aXRoIHRoZSBicm93c2VyLCBidXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dpbnJlZy5yc3QgYi9Eb2MvbGlicmFyeS93aW5yZWcucnN0CmluZGV4IDA2YmNiODYuLjZjOTIwYjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dpbnJlZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2lucmVnLnJzdApAQCAtMzIyLDcgKzMyMiw3IEBACiAgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IGBgMmBgIHwgQW4gaW50ZWdlciBnaXZpbmcgd2hlbiB0aGUga2V5IHdhcyBsYXN0ICAgICB8CiAgICB8ICAgICAgIHwgbW9kaWZpZWQgKGlmIGF2YWlsYWJsZSkgYXMgMTAwJ3Mgb2YgICAgICAgICB8Ci0gICB8ICAgICAgIHwgbmFub3NlY29uZHMgc2luY2UgSmFuIDEsIDE2MDAuICAgICAgICAgICAgICB8CisgICB8ICAgICAgIHwgbmFub3NlY29uZHMgc2luY2UgSmFuIDEsIDE2MDEuICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKaW5kZXggM2YyZGNiYi4uZmMwYjc5ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CkBAIC0xMDUsNiArMTA1LDU5IEBACiAgICA+Pj4gcm9vdFswXVsxXS50ZXh0CiAgICAnMjAwOCcKIAorCisuLiBub3RlOjoKKworICAgTm90IGFsbCBlbGVtZW50cyBvZiB0aGUgWE1MIGlucHV0IHdpbGwgZW5kIHVwIGFzIGVsZW1lbnRzIG9mIHRoZQorICAgcGFyc2VkIHRyZWUuIEN1cnJlbnRseSwgdGhpcyBtb2R1bGUgc2tpcHMgb3ZlciBhbnkgWE1MIGNvbW1lbnRzLAorICAgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIGFuZCBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9ucyBpbiB0aGUKKyAgIGlucHV0LiBOZXZlcnRoZWxlc3MsIHRyZWVzIGJ1aWx0IHVzaW5nIHRoaXMgbW9kdWxlJ3MgQVBJIHJhdGhlcgorICAgdGhhbiBwYXJzaW5nIGZyb20gWE1MIHRleHQgY2FuIGhhdmUgY29tbWVudHMgYW5kIHByb2Nlc3NpbmcKKyAgIGluc3RydWN0aW9ucyBpbiB0aGVtOyB0aGV5IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiBnZW5lcmF0aW5nIFhNTAorICAgb3V0cHV0LiBBIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb24gbWF5IGJlIGFjY2Vzc2VkIGJ5IHBhc3NpbmcgYQorICAgY3VzdG9tIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGluc3RhbmNlIHRvIHRoZSA6Y2xhc3M6YFhNTFBhcnNlcmAKKyAgIGNvbnN0cnVjdG9yLgorCisKKy4uIF9lbGVtZW50dHJlZS1wdWxsLXBhcnNpbmc6CisKK1B1bGwgQVBJIGZvciBub24tYmxvY2tpbmcgcGFyc2luZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vc3QgcGFyc2luZyBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUgcmVxdWlyZSB0aGUgd2hvbGUgZG9jdW1lbnQKK3RvIGJlIHJlYWQgYXQgb25jZSBiZWZvcmUgcmV0dXJuaW5nIGFueSByZXN1bHQuICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYW4KKzpjbGFzczpgWE1MUGFyc2VyYCBhbmQgZmVlZCBkYXRhIGludG8gaXQgaW5jcmVtZW50YWxseSwgYnV0IGl0IGlzIGEgcHVzaCBBUEkgdGhhdAorY2FsbHMgbWV0aG9kcyBvbiBhIGNhbGxiYWNrIHRhcmdldCwgd2hpY2ggaXMgdG9vIGxvdy1sZXZlbCBhbmQgaW5jb252ZW5pZW50IGZvcgorbW9zdCBuZWVkcy4gIFNvbWV0aW1lcyB3aGF0IHRoZSB1c2VyIHJlYWxseSB3YW50cyBpcyB0byBiZSBhYmxlIHRvIHBhcnNlIFhNTAoraW5jcmVtZW50YWxseSwgd2l0aG91dCBibG9ja2luZyBvcGVyYXRpb25zLCB3aGlsZSBlbmpveWluZyB0aGUgY29udmVuaWVuY2Ugb2YKK2Z1bGx5IGNvbnN0cnVjdGVkIDpjbGFzczpgRWxlbWVudGAgb2JqZWN0cy4KKworVGhlIG1vc3QgcG93ZXJmdWwgdG9vbCBmb3IgZG9pbmcgdGhpcyBpcyA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgLiAgSXQgZG9lcyBub3QKK3JlcXVpcmUgYSBibG9ja2luZyByZWFkIHRvIG9idGFpbiB0aGUgWE1MIGRhdGEsIGFuZCBpcyBpbnN0ZWFkIGZlZCB3aXRoIGRhdGEKK2luY3JlbWVudGFsbHkgd2l0aCA6bWV0aDpgWE1MUHVsbFBhcnNlci5mZWVkYCBjYWxscy4gIFRvIGdldCB0aGUgcGFyc2VkIFhNTAorZWxlbWVudHMsIGNhbGwgOm1ldGg6YFhNTFB1bGxQYXJzZXIucmVhZF9ldmVudHNgLiAgSGVyZSBpcyBhbiBleGFtcGxlOjoKKworICAgPj4+IHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoWydzdGFydCcsICdlbmQnXSkKKyAgID4+PiBwYXJzZXIuZmVlZCgnPG15dGFnPnNvbWV0ZXh0JykKKyAgID4+PiBsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKQorICAgWygnc3RhcnQnLCA8RWxlbWVudCAnbXl0YWcnIGF0IDB4N2ZhNjZkYjJiZTU4PildCisgICA+Pj4gcGFyc2VyLmZlZWQoJyBtb3JlIHRleHQ8L215dGFnPicpCisgICA+Pj4gZm9yIGV2ZW50LCBlbGVtIGluIHBhcnNlci5yZWFkX2V2ZW50cygpOgorICAgLi4uICAgcHJpbnQoZXZlbnQpCisgICAuLi4gICBwcmludChlbGVtLnRhZywgJ3RleHQ9JywgZWxlbS50ZXh0KQorICAgLi4uCisgICBlbmQKKworVGhlIG9idmlvdXMgdXNlIGNhc2UgaXMgYXBwbGljYXRpb25zIHRoYXQgb3BlcmF0ZSBpbiBhIG5vbi1ibG9ja2luZyBmYXNoaW9uCit3aGVyZSB0aGUgWE1MIGRhdGEgaXMgYmVpbmcgcmVjZWl2ZWQgZnJvbSBhIHNvY2tldCBvciByZWFkIGluY3JlbWVudGFsbHkgZnJvbQorc29tZSBzdG9yYWdlIGRldmljZS4gIEluIHN1Y2ggY2FzZXMsIGJsb2NraW5nIHJlYWRzIGFyZSB1bmFjY2VwdGFibGUuCisKK0JlY2F1c2UgaXQncyBzbyBmbGV4aWJsZSwgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBjYW4gYmUgaW5jb252ZW5pZW50IHRvIHVzZSBmb3IKK3NpbXBsZXIgdXNlLWNhc2VzLiAgSWYgeW91IGRvbid0IG1pbmQgeW91ciBhcHBsaWNhdGlvbiBibG9ja2luZyBvbiByZWFkaW5nIFhNTAorZGF0YSBidXQgd291bGQgc3RpbGwgbGlrZSB0byBoYXZlIGluY3JlbWVudGFsIHBhcnNpbmcgY2FwYWJpbGl0aWVzLCB0YWtlIGEgbG9vaworYXQgOmZ1bmM6YGl0ZXJwYXJzZWAuICBJdCBjYW4gYmUgdXNlZnVsIHdoZW4geW91J3JlIHJlYWRpbmcgYSBsYXJnZSBYTUwgZG9jdW1lbnQKK2FuZCBkb24ndCB3YW50IHRvIGhvbGQgaXQgd2hvbGx5IGluIG1lbW9yeS4KKwogRmluZGluZyBpbnRlcmVzdGluZyBlbGVtZW50cwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0yODUsNyArMzM4LDcgQEAKICs9PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCiB8IGBgdGFnYGAgICAgICAgICAgICAgICB8IFNlbGVjdHMgYWxsIGNoaWxkIGVsZW1lbnRzIHdpdGggdGhlIGdpdmVuIHRhZy4gICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgfCBGb3IgZXhhbXBsZSwgYGBzcGFtYGAgc2VsZWN0cyBhbGwgY2hpbGQgZWxlbWVudHMgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgIHwgbmFtZWQgYGBzcGFtYGAsIGBgc3BhbS9lZ2dgYCBzZWxlY3RzIGFsbCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVkIGBgc3BhbWBgLCBhbmQgYGBzcGFtL2VnZ2BgIHNlbGVjdHMgYWxsICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgfCBncmFuZGNoaWxkcmVuIG5hbWVkIGBgZWdnYGAgaW4gYWxsIGNoaWxkcmVuIG5hbWVkICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzcGFtYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMzQxLDYgKzM5NCwxMCBAQAogICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1lbnQgc3RyaW5nLiAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlCiAgICByZXByZXNlbnRpbmcgYSBjb21tZW50LgogCisgICBOb3RlIHRoYXQgOmNsYXNzOmBYTUxQYXJzZXJgIHNraXBzIG92ZXIgY29tbWVudHMgaW4gdGhlIGlucHV0CisgICBpbnN0ZWFkIG9mIGNyZWF0aW5nIGNvbW1lbnQgb2JqZWN0cyBmb3IgdGhlbS4gQW4gOmNsYXNzOmBFbGVtZW50VHJlZWAgd2lsbAorICAgb25seSBjb250YWluIGNvbW1lbnQgbm9kZXMgaWYgdGhleSBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0bworICAgdGhlIHRyZWUgdXNpbmcgb25lIG9mIHRoZSA6Y2xhc3M6YEVsZW1lbnRgIG1ldGhvZHMuCiAKIC4uIGZ1bmN0aW9uOjogZHVtcChlbGVtKQogCkBAIC0zNzksMjUgKzQzNiwzMiBAQAogCiAgICBQYXJzZXMgYW4gWE1MIHNlY3Rpb24gaW50byBhbiBlbGVtZW50IHRyZWUgaW5jcmVtZW50YWxseSwgYW5kIHJlcG9ydHMgd2hhdCdzCiAgICBnb2luZyBvbiB0byB0aGUgdXNlci4gICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgOnRlcm06YGZpbGUgb2JqZWN0YAotICAgY29udGFpbmluZyBYTUwgZGF0YS4gICpldmVudHMqIGlzIGEgdHVwbGUgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLiAgVGhlCi0gICBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyBgYCJzdGFydCJgYCwgYGAiZW5kImBgLCBgYCJzdGFydC1ucyJgYAotICAgYW5kIGBgImVuZC1ucyJgYCAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZCBuYW1lc3BhY2UKKyAgIGNvbnRhaW5pbmcgWE1MIGRhdGEuICAqZXZlbnRzKiBpcyBhIHNlcXVlbmNlIG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIFRoZQorICAgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwgYGAic3RhcnQtbnMiYGAgYW5kCisgICBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCiAgICBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5IGBgImVuZCJgYCBldmVudHMgYXJlIHJlcG9ydGVkLgogICAgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQKLSAgIDpjbGFzczpgWE1MUGFyc2VyYCBwYXJzZXIgaXMgdXNlZC4gICpwYXJzZXIqIGNhbiBvbmx5IHVzZSB0aGUgZGVmYXVsdAotICAgOmNsYXNzOmBUcmVlQnVpbGRlcmAgYXMgYSB0YXJnZXQuICBSZXR1cm5zIGFuIDp0ZXJtOmBpdGVyYXRvcmAgcHJvdmlkaW5nCi0gICBgYChldmVudCwgZWxlbSlgYCBwYWlycy4KKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBwYXJzZXIgaXMgdXNlZC4gICpwYXJzZXIqIG11c3QgYmUgYSBzdWJjbGFzcyBvZgorICAgOmNsYXNzOmBYTUxQYXJzZXJgIGFuZCBjYW4gb25seSB1c2UgdGhlIGRlZmF1bHQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgYXMgYQorICAgdGFyZ2V0LiAgUmV0dXJucyBhbiA6dGVybTpgaXRlcmF0b3JgIHByb3ZpZGluZyBgYChldmVudCwgZWxlbSlgYCBwYWlycy4KKworICAgTm90ZSB0aGF0IHdoaWxlIDpmdW5jOmBpdGVycGFyc2VgIGJ1aWxkcyB0aGUgdHJlZSBpbmNyZW1lbnRhbGx5LCBpdCBpc3N1ZXMKKyAgIGJsb2NraW5nIHJlYWRzIG9uICpzb3VyY2UqIChvciB0aGUgZmlsZSBpdCBuYW1lcykuICBBcyBzdWNoLCBpdCdzIHVuc3VpdGFibGUKKyAgIGZvciBhcHBsaWNhdGlvbnMgd2hlcmUgYmxvY2tpbmcgcmVhZHMgY2FuJ3QgYmUgbWFkZS4gIEZvciBmdWxseSBub24tYmxvY2tpbmcKKyAgIHBhcnNpbmcsIHNlZSA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgOmZ1bmM6YGl0ZXJwYXJzZWAgb25seSBndWFyYW50ZWVzIHRoYXQgaXQgaGFzIHNlZW4gdGhlICI+IgotICAgICAgY2hhcmFjdGVyIG9mIGEgc3RhcnRpbmcgdGFnIHdoZW4gaXQgZW1pdHMgYSAic3RhcnQiIGV2ZW50LCBzbyB0aGUKLSAgICAgIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsIGJ1dCB0aGUgY29udGVudHMgb2YgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcwotICAgICAgYXJlIHVuZGVmaW5lZCBhdCB0aGF0IHBvaW50LiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgZWxlbWVudCBjaGlsZHJlbjsKLSAgICAgIHRoZXkgbWF5IG9yIG1heSBub3QgYmUgcHJlc2VudC4KKyAgICAgIDpmdW5jOmBpdGVycGFyc2VgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIgY2hhcmFjdGVyIG9mIGEKKyAgICAgIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsCisgICAgICBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMgYXJlIHVuZGVmaW5lZCBhdCB0aGF0CisgICAgICBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47IHRoZXkgbWF5IG9yIG1heSBub3QgYmUKKyAgICAgIHByZXNlbnQuCiAKICAgICAgIElmIHlvdSBuZWVkIGEgZnVsbHkgcG9wdWxhdGVkIGVsZW1lbnQsIGxvb2sgZm9yICJlbmQiIGV2ZW50cyBpbnN0ZWFkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBUaGUgKnBhcnNlciogYXJndW1lbnQuCiAKIC4uIGZ1bmN0aW9uOjogcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSkKIApAQCAtNDE0LDYgKzQ3OCwxMSBAQAogICAgY29udGFpbmluZyB0aGUgUEkgdGFyZ2V0LiAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIGNvbnRlbnRzLCBpZgogICAgZ2l2ZW4uICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uCiAKKyAgIE5vdGUgdGhhdCA6Y2xhc3M6YFhNTFBhcnNlcmAgc2tpcHMgb3ZlciBwcm9jZXNzaW5nIGluc3RydWN0aW9ucworICAgaW4gdGhlIGlucHV0IGluc3RlYWQgb2YgY3JlYXRpbmcgY29tbWVudCBvYmplY3RzIGZvciB0aGVtLiBBbgorICAgOmNsYXNzOmBFbGVtZW50VHJlZWAgd2lsbCBvbmx5IGNvbnRhaW4gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2RlcyBpZgorICAgdGhleSBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0byB0aGUgdHJlZSB1c2luZyBvbmUgb2YgdGhlCisgICA6Y2xhc3M6YEVsZW1lbnRgIG1ldGhvZHMuCiAKIC4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfbmFtZXNwYWNlKHByZWZpeCwgdXJpKQogCkBAIC00MzgsMjkgKzUwNywzOSBAQAogICAgYXJndW1lbnRzLiAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlLgogCiAKLS4uIGZ1bmN0aW9uOjogdG9zdHJpbmcoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiKQorLi4gZnVuY3Rpb246OiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSkKIAogICAgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCiAgICBzdWJlbGVtZW50cy4gICplbGVtZW50KiBpcyBhbiA6Y2xhc3M6YEVsZW1lbnRgIGluc3RhbmNlLiAgKmVuY29kaW5nKiBbMV1fIGlzCiAgICB0aGUgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4gIFVzZSBgYGVuY29kaW5nPSJ1bmljb2RlImBgIHRvCiAgICBnZW5lcmF0ZSBhIFVuaWNvZGUgc3RyaW5nIChvdGhlcndpc2UsIGEgYnl0ZXN0cmluZyBpcyBnZW5lcmF0ZWQpLiAgKm1ldGhvZCoKICAgIGlzIGVpdGhlciBgYCJ4bWwiYGAsIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcyBgYCJ4bWwiYGApLgorICAgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6bWV0aDpgRWxlbWVudFRyZWUud3JpdGVgLgogICAgUmV0dXJucyBhbiAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyLgogCi0uLiBmdW5jdGlvbjo6IHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIpCisKKy4uIGZ1bmN0aW9uOjogdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIiwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSkKIAogICAgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCiAgICBzdWJlbGVtZW50cy4gICplbGVtZW50KiBpcyBhbiA6Y2xhc3M6YEVsZW1lbnRgIGluc3RhbmNlLiAgKmVuY29kaW5nKiBbMV1fIGlzCiAgICB0aGUgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4gIFVzZSBgYGVuY29kaW5nPSJ1bmljb2RlImBgIHRvCiAgICBnZW5lcmF0ZSBhIFVuaWNvZGUgc3RyaW5nIChvdGhlcndpc2UsIGEgYnl0ZXN0cmluZyBpcyBnZW5lcmF0ZWQpLiAgKm1ldGhvZCoKICAgIGlzIGVpdGhlciBgYCJ4bWwiYGAsIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcyBgYCJ4bWwiYGApLgorICAgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6bWV0aDpgRWxlbWVudFRyZWUud3JpdGVgLgogICAgUmV0dXJucyBhIGxpc3Qgb2YgKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5ncyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KICAgIEl0IGRvZXMgbm90IGd1YXJhbnRlZSBhbnkgc3BlY2lmaWMgc2VxdWVuY2UsIGV4Y2VwdCB0aGF0CiAgICBgYGIiIi5qb2luKHRvc3RyaW5nbGlzdChlbGVtZW50KSkgPT0gdG9zdHJpbmcoZWxlbWVudClgYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogWE1MKHRleHQsIHBhcnNlcj1Ob25lKQogCkBAIC03NTMsNyArODMyLDggQEAKIAogCiAgICAuLiBtZXRob2Q6OiB3cml0ZShmaWxlLCBlbmNvZGluZz0idXMtYXNjaWkiLCB4bWxfZGVjbGFyYXRpb249Tm9uZSwgXAotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwgbWV0aG9kPSJ4bWwiKQorICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICAgICBXcml0ZXMgdGhlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUsIGFzIFhNTC4gICpmaWxlKiBpcyBhIGZpbGUgbmFtZSwgb3IgYQogICAgICAgOnRlcm06YGZpbGUgb2JqZWN0YCBvcGVuZWQgZm9yIHdyaXRpbmcuICAqZW5jb2RpbmcqIFsxXV8gaXMgdGhlIG91dHB1dApAQCAtNzY0LDYgKzg0NCwxMCBAQAogICAgICAgKmRlZmF1bHRfbmFtZXNwYWNlKiBzZXRzIHRoZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2UgKGZvciAieG1sbnMiKS4KICAgICAgICptZXRob2QqIGlzIGVpdGhlciBgYCJ4bWwiYGAsIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcwogICAgICAgYGAieG1sImBgKS4KKyAgICAgIFRoZSBrZXl3b3JkLW9ubHkgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGZvcm1hdHRpbmcKKyAgICAgIG9mIGVsZW1lbnRzIHRoYXQgY29udGFpbiBubyBjb250ZW50LiAgSWYgKlRydWUqICh0aGUgZGVmYXVsdCksIHRoZXkgYXJlCisgICAgICBlbWl0dGVkIGFzIGEgc2luZ2xlIHNlbGYtY2xvc2VkIHRhZywgb3RoZXJ3aXNlIHRoZXkgYXJlIGVtaXR0ZWQgYXMgYSBwYWlyCisgICAgICBvZiBzdGFydC9lbmQgdGFncy4KIAogICAgICAgVGhlIG91dHB1dCBpcyBlaXRoZXIgYSBzdHJpbmcgKDpjbGFzczpgc3RyYCkgb3IgYmluYXJ5ICg6Y2xhc3M6YGJ5dGVzYCkuCiAgICAgICBUaGlzIGlzIGNvbnRyb2xsZWQgYnkgdGhlICplbmNvZGluZyogYXJndW1lbnQuICBJZiAqZW5jb2RpbmcqIGlzCkBAIC03NzIsNiArODU2LDkgQEAKICAgICAgIDp0ZXJtOmBmaWxlIG9iamVjdGA7IG1ha2Ugc3VyZSB5b3UgZG8gbm90IHRyeSB0byB3cml0ZSBhIHN0cmluZyB0byBhCiAgICAgICBiaW5hcnkgc3RyZWFtIGFuZCB2aWNlIHZlcnNhLgogCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KKwogCiBUaGlzIGlzIHRoZSBYTUwgZmlsZSB0aGF0IGlzIGdvaW5nIHRvIGJlIG1hbmlwdWxhdGVkOjoKIApAQCAtODE3LDYgKzkwNCw3IEBACiAgICA6Y2xhc3M6YFFOYW1lYCBpbnN0YW5jZXMgYXJlIG9wYXF1ZS4KIAogCisKIC4uIF9lbGVtZW50dHJlZS10cmVlYnVpbGRlci1vYmplY3RzOgogCiBUcmVlQnVpbGRlciBPYmplY3RzCkBAIC04NzYsMTMgKzk2NCwxOCBAQAogCiAuLiBjbGFzczo6IFhNTFBhcnNlcihodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKQogCi0gICA6Y2xhc3M6YEVsZW1lbnRgIHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZSBleHBhdAotICAgcGFyc2VyLiAgKmh0bWwqIGFyZSBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBieQotICAgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICAqdGFyZ2V0KiBpcyB0aGUgdGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZQotICAgYnVpbGRlciB1c2VzIGFuIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBjbGFzcy4KLSAgICplbmNvZGluZyogWzFdXyBpcyBvcHRpb25hbC4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZworICAgVGhpcyBjbGFzcyBpcyB0aGUgbG93LWxldmVsIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBtb2R1bGUuICBJdCB1c2VzCisgICA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAgZm9yIGVmZmljaWVudCwgZXZlbnQtYmFzZWQgcGFyc2luZyBvZiBYTUwuICBJdCBjYW4KKyAgIGJlIGZlZCBYTUwgZGF0YSBpbmNyZW1lbnRhbGwgd2l0aCB0aGUgOm1ldGg6YGZlZWRgIG1ldGhvZCwgYW5kIHBhcnNpbmcgZXZlbnRzCisgICBhcmUgdHJhbnNsYXRlZCB0byBhIHB1c2ggQVBJIC0gYnkgaW52b2tpbmcgY2FsbGJhY2tzIG9uIHRoZSAqdGFyZ2V0KiBvYmplY3QuCisgICBJZiAqdGFyZ2V0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgaXMgdXNlZC4gIFRoZQorICAgKmh0bWwqIGFyZ3VtZW50IHdhcyBoaXN0b3JpY2FsbHkgdXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGlzIG5vdworICAgZGVwcmVjYXRlZC4gIElmICplbmNvZGluZyogWzFdXyBpcyBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcKICAgIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGUuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSAqaHRtbCogYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBzaG91bGQgYmUgcGFzc2VkIHZpYQorICAgICAga2V5d3dvcmQgdG8gcHJlcGFyZSBmb3IgdGhlIHJlbW92YWwgb2YgdGhlICpodG1sKiBhcmd1bWVudC4KIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCkBAIC05MDIsMTIgKzk5NSwxMiBAQAogCiAgICAgICBGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuICAqZGF0YSogaXMgZW5jb2RlZCBkYXRhLgogCi0gICA6bWV0aDpgWE1MUGFyc2VyLmZlZWRgIGNhbGxzICp0YXJnZXQqXCdzIGBgc3RhcnQoKWBgIG1ldGhvZAotICAgZm9yIGVhY2ggb3BlbmluZyB0YWcsIGl0cyBgYGVuZCgpYGAgbWV0aG9kIGZvciBlYWNoIGNsb3NpbmcgdGFnLAotICAgYW5kIGRhdGEgaXMgcHJvY2Vzc2VkIGJ5IG1ldGhvZCBgYGRhdGEoKWBgLiAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAKLSAgIGNhbGxzICp0YXJnZXQqXCdzIG1ldGhvZCBgYGNsb3NlKClgYC4KLSAgIDpjbGFzczpgWE1MUGFyc2VyYCBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IgYnVpbGRpbmcgYSB0cmVlIHN0cnVjdHVyZS4KLSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBjb3VudGluZyB0aGUgbWF4aW11bSBkZXB0aCBvZiBhbiBYTUwgZmlsZTo6CisgICA6bWV0aDpgWE1MUGFyc2VyLmZlZWRgIGNhbGxzICp0YXJnZXQqXCdzIGBgc3RhcnQodGFnLCBhdHRyc19kaWN0KWBgIG1ldGhvZAorICAgZm9yIGVhY2ggb3BlbmluZyB0YWcsIGl0cyBgYGVuZCh0YWcpYGAgbWV0aG9kIGZvciBlYWNoIGNsb3NpbmcgdGFnLCBhbmQgZGF0YQorICAgaXMgcHJvY2Vzc2VkIGJ5IG1ldGhvZCBgYGRhdGEoZGF0YSlgYC4gIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgIGNhbGxzCisgICAqdGFyZ2V0KlwncyBtZXRob2QgYGBjbG9zZSgpYGAuIDpjbGFzczpgWE1MUGFyc2VyYCBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IKKyAgIGJ1aWxkaW5nIGEgdHJlZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBjb3VudGluZyB0aGUgbWF4aW11bSBkZXB0aAorICAgb2YgYW4gWE1MIGZpbGU6OgogCiAgICAgPj4+IGZyb20geG1sLmV0cmVlLkVsZW1lbnRUcmVlIGltcG9ydCBYTUxQYXJzZXIKICAgICA+Pj4gY2xhc3MgTWF4RGVwdGg6ICAgICAgICAgICAgICAgICAgICAgIyBUaGUgdGFyZ2V0IG9iamVjdCBvZiB0aGUgcGFyc2VyCkBAIC05NDEsNiArMTAzNCw2MCBAQAogICAgID4+PiBwYXJzZXIuY2xvc2UoKQogICAgIDQKIAorCisuLiBfZWxlbWVudHRyZWUteG1scHVsbHBhcnNlci1vYmplY3RzOgorCitYTUxQdWxsUGFyc2VyIE9iamVjdHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IFhNTFB1bGxQYXJzZXIoZXZlbnRzPU5vbmUpCisKKyAgIEEgcHVsbCBwYXJzZXIgc3VpdGFibGUgZm9yIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuICBJdHMgaW5wdXQtc2lkZSBBUEkgaXMKKyAgIHNpbWlsYXIgdG8gdGhhdCBvZiA6Y2xhc3M6YFhNTFBhcnNlcmAsIGJ1dCBpbnN0ZWFkIG9mIHB1c2hpbmcgY2FsbHMgdG8gYQorICAgY2FsbGJhY2sgdGFyZ2V0LCA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgIGNvbGxlY3RzIGFuIGludGVybmFsIGxpc3Qgb2YgcGFyc2luZworICAgZXZlbnRzIGFuZCBsZXRzIHRoZSB1c2VyIHJlYWQgZnJvbSBpdC4gKmV2ZW50cyogaXMgYSBzZXF1ZW5jZSBvZiBldmVudHMgdG8KKyAgIHJlcG9ydCBiYWNrLiAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzIGBgInN0YXJ0ImBgLCBgYCJlbmQiYGAsCisgICBgYCJzdGFydC1ucyJgYCBhbmQgYGAiZW5kLW5zImBgICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkCisgICBuYW1lc3BhY2UgaW5mb3JtYXRpb24pLiAgSWYgKmV2ZW50cyogaXMgb21pdHRlZCwgb25seSBgYCJlbmQiYGAgZXZlbnRzIGFyZQorICAgcmVwb3J0ZWQuCisKKyAgIC4uIG1ldGhvZDo6IGZlZWQoZGF0YSkKKworICAgICAgRmVlZCB0aGUgZ2l2ZW4gYnl0ZXMgZGF0YSB0byB0aGUgcGFyc2VyLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIFNpZ25hbCB0aGUgcGFyc2VyIHRoYXQgdGhlIGRhdGEgc3RyZWFtIGlzIHRlcm1pbmF0ZWQuIFVubGlrZQorICAgICAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAsIHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIDpjb25zdDpgTm9uZWAuCisgICAgICBBbnkgZXZlbnRzIG5vdCB5ZXQgcmV0cmlldmVkIHdoZW4gdGhlIHBhcnNlciBpcyBjbG9zZWQgY2FuIHN0aWxsIGJlCisgICAgICByZWFkIHdpdGggOm1ldGg6YHJlYWRfZXZlbnRzYC4KKworICAgLi4gbWV0aG9kOjogcmVhZF9ldmVudHMoKQorCisgICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgZXZlbnRzIHdoaWNoIGhhdmUgYmVlbiBlbmNvdW50ZXJlZCBpbiB0aGUKKyAgICAgIGRhdGEgZmVkIHRvIHRoZQorICAgICAgcGFyc2VyLiAgVGhlIGl0ZXJhdG9yIHlpZWxkcyBgYChldmVudCwgZWxlbSlgYCBwYWlycywgd2hlcmUgKmV2ZW50KiBpcyBhCisgICAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIGV2ZW50IChlLmcuIGBgImVuZCJgYCkgYW5kICplbGVtKiBpcyB0aGUKKyAgICAgIGVuY291bnRlcmVkIDpjbGFzczpgRWxlbWVudGAgb2JqZWN0LgorCisgICAgICBFdmVudHMgcHJvdmlkZWQgaW4gYSBwcmV2aW91cyBjYWxsIHRvIDptZXRoOmByZWFkX2V2ZW50c2Agd2lsbCBub3QgYmUKKyAgICAgIHlpZWxkZWQgYWdhaW4uICBFdmVudHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGludGVybmFsIHF1ZXVlIG9ubHkgd2hlbgorICAgICAgdGhleSBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGl0ZXJhdG9yLCBzbyBtdWx0aXBsZSByZWFkZXJzIGl0ZXJhdGluZyBpbgorICAgICAgcGFyYWxsZWwgb3ZlciBpdGVyYXRvcnMgb2J0YWluZWQgZnJvbSA6bWV0aDpgcmVhZF9ldmVudHNgIHdpbGwgaGF2ZQorICAgICAgdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBvbmx5IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgc2VlbiB0aGUgIj4iCisgICAgICBjaGFyYWN0ZXIgb2YgYSBzdGFydGluZyB0YWcgd2hlbiBpdCBlbWl0cyBhICJzdGFydCIgZXZlbnQsIHNvIHRoZQorICAgICAgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwgYnV0IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzCisgICAgICBhcmUgdW5kZWZpbmVkIGF0IHRoYXQgcG9pbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBlbGVtZW50IGNoaWxkcmVuOworICAgICAgdGhleSBtYXkgb3IgbWF5IG5vdCBiZSBwcmVzZW50LgorCisgICAgICBJZiB5b3UgbmVlZCBhIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50LCBsb29rIGZvciAiZW5kIiBldmVudHMgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEV4Y2VwdGlvbnMKIF5eXl5eXl5eXl4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdAppbmRleCA3YTY0ODJiLi4xZDIzYTdjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdApAQCAtMTMwLDcgKzEzMCw3IEBACiAtLS0tLS0tLS0tLS0tLS0KIAogCi0uLiBjbGFzczo6IFppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9RmFsc2UpCisuLiBjbGFzczo6IFppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSkKIAogICAgT3BlbiBhIFpJUCBmaWxlLCB3aGVyZSAqZmlsZSogY2FuIGJlIGVpdGhlciBhIHBhdGggdG8gYSBmaWxlIChhIHN0cmluZykgb3IgYQogICAgZmlsZS1saWtlIG9iamVjdC4gIFRoZSAqbW9kZSogcGFyYW1ldGVyIHNob3VsZCBiZSBgYCdyJ2BgIHRvIHJlYWQgYW4gZXhpc3RpbmcKQEAgLTE0NCwxNSArMTQ0LDEyIEBACiAgICBhbmQgc2hvdWxkIGJlIDpjb25zdDpgWklQX1NUT1JFRGAsIDpjb25zdDpgWklQX0RFRkxBVEVEYCwKICAgIDpjb25zdDpgWklQX0JaSVAyYCBvciA6Y29uc3Q6YFpJUF9MWk1BYDsgdW5yZWNvZ25pemVkCiAgICB2YWx1ZXMgd2lsbCBjYXVzZSA6ZXhjOmBSdW50aW1lRXJyb3JgIHRvIGJlIHJhaXNlZC4gIElmIDpjb25zdDpgWklQX0RFRkxBVEVEYCwKLSAgIDpjb25zdDpgWklQX0JaSVAyYCBvciA6Y29uc3Q6YFpJUF9MWk1BYCBpcyBzcGVjaWZpZWQgYnV0IHRoZSBjb3JyZXNwb25kZWQgbW9kdWxlCisgICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWAgaXMgc3BlY2lmaWVkIGJ1dCB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUKICAgICg6bW9kOmB6bGliYCwgOm1vZDpgYnoyYCBvciA6bW9kOmBsem1hYCkgaXMgbm90IGF2YWlsYWJsZSwgOmV4YzpgUnVudGltZUVycm9yYAogICAgaXMgYWxzbyByYWlzZWQuIFRoZSBkZWZhdWx0IGlzIDpjb25zdDpgWklQX1NUT1JFRGAuICBJZiAqYWxsb3daaXA2NCogaXMKLSAgIGBgVHJ1ZWBgIHppcGZpbGUgd2lsbCBjcmVhdGUgWklQIGZpbGVzIHRoYXQgdXNlIHRoZSBaSVA2NCBleHRlbnNpb25zIHdoZW4KLSAgIHRoZSB6aXBmaWxlIGlzIGxhcmdlciB0aGFuIDIgR2lCLiBJZiBpdCBpcyAgZmFsc2UgKHRoZSBkZWZhdWx0KSA6bW9kOmB6aXBmaWxlYAorICAgYGBUcnVlYGAgKHRoZSBkZWZhdWx0KSB6aXBmaWxlIHdpbGwgY3JlYXRlIFpJUCBmaWxlcyB0aGF0IHVzZSB0aGUgWklQNjQKKyAgIGV4dGVuc2lvbnMgd2hlbiB0aGUgemlwZmlsZSBpcyBsYXJnZXIgdGhhbiAyIEdpQi4gSWYgaXQgaXMgIGZhbHNlIDptb2Q6YHppcGZpbGVgCiAgICB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBaSVAgZmlsZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMuCi0gICBaSVA2NCBleHRlbnNpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIGRlZmF1bHQgOnByb2dyYW06YHppcGAKLSAgIGFuZCA6cHJvZ3JhbTpgdW56aXBgIGNvbW1hbmRzIG9uIFVuaXggKHRoZSBJbmZvWklQIHV0aWxpdGllcykgZG9uJ3Qgc3VwcG9ydAotICAgdGhlc2UgZXh0ZW5zaW9ucy4KIAogICAgSWYgdGhlIGZpbGUgaXMgY3JlYXRlZCB3aXRoIG1vZGUgYGAnYSdgYCBvciBgYCd3J2BgIGFuZCB0aGVuCiAgICA6bWV0aDpgY2xvc2VkIDxjbG9zZT5gIHdpdGhvdXQgYWRkaW5nIGFueSBmaWxlcyB0byB0aGUgYXJjaGl2ZSwgdGhlIGFwcHJvcHJpYXRlCkBAIC0xNzEsNiArMTY4LDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciA6bW9kOmBiemlwMiA8YnoyPmAgYW5kIDptb2Q6YGx6bWFgIGNvbXByZXNzaW9uLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorCiAKIC4uIG1ldGhvZDo6IFppcEZpbGUuY2xvc2UoKQogCkBAIC0yMzQsNiArMjM0LDkgQEAKICAgICAgIG9yIGEgOmNsYXNzOmBaaXBJbmZvYCBvYmplY3QuICBZb3Ugd2lsbCBhcHByZWNpYXRlIHRoaXMgd2hlbiB0cnlpbmcgdG8gcmVhZCBhCiAgICAgICBaSVAgZmlsZSB0aGF0IGNvbnRhaW5zIG1lbWJlcnMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuCiAKKyAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNCAzLjYKKyAgICAgIFRoZSBgYCdVJ2BgIG9yICBgYCdyVSdgYCBtb2RlLiAgVXNlIDpjbGFzczpgaW8uVGV4dElPV3JhcHBlcmAgZm9yIHJlYWRpbmcKKyAgICAgIGNvbXByZXNzZWQgdGV4dCBmaWxlcyBpbiA6dGVybTpgdW5pdmVyc2FsIG5ld2xpbmVzYCBtb2RlLgogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLmV4dHJhY3QobWVtYmVyLCBwYXRoPU5vbmUsIHB3ZD1Ob25lKQogCkBAIC0yNjYsMTAgKzI2OSw4IEBACiAgICAgICBOZXZlciBleHRyYWN0IGFyY2hpdmVzIGZyb20gdW50cnVzdGVkIHNvdXJjZXMgd2l0aG91dCBwcmlvciBpbnNwZWN0aW9uLgogICAgICAgSXQgaXMgcG9zc2libGUgdGhhdCBmaWxlcyBhcmUgY3JlYXRlZCBvdXRzaWRlIG9mICpwYXRoKiwgZS5nLiBtZW1iZXJzCiAgICAgICB0aGF0IGhhdmUgYWJzb2x1dGUgZmlsZW5hbWVzIHN0YXJ0aW5nIHdpdGggYGAiLyJgYCBvciBmaWxlbmFtZXMgd2l0aCB0d28KLSAgICAgIGRvdHMgYGAiLi4iYGAuCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjEKLSAgICAgIFRoZSB6aXBmaWxlIG1vZHVsZSBhdHRlbXB0cyB0byBwcmV2ZW50IHRoYXQuICBTZWUgOm1ldGg6YGV4dHJhY3RgIG5vdGUuCisgICAgICBkb3RzIGBgIi4uImBgLiAgVGhpcyBtb2R1bGUgYXR0ZW1wdHMgdG8gcHJldmVudCB0aGF0LgorICAgICAgU2VlIDptZXRoOmBleHRyYWN0YCBub3RlLgogCiAKIC4uIG1ldGhvZDo6IFppcEZpbGUucHJpbnRkaXIoKQpAQCAtMzc2LDE1ICszNzcsMTggQEAKIFRoZSA6Y2xhc3M6YFB5WmlwRmlsZWAgY29uc3RydWN0b3IgdGFrZXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUKIDpjbGFzczpgWmlwRmlsZWAgY29uc3RydWN0b3IsIGFuZCBvbmUgYWRkaXRpb25hbCBwYXJhbWV0ZXIsICpvcHRpbWl6ZSouCiAKLS4uIGNsYXNzOjogUHlaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlLCBcCisuLiBjbGFzczo6IFB5WmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlLCBcCiAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT0tMSkKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAgICAgICBUaGUgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBaSVA2NCBleHRlbnNpb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisKICAgIEluc3RhbmNlcyBoYXZlIG9uZSBtZXRob2QgaW4gYWRkaXRpb24gdG8gdGhvc2Ugb2YgOmNsYXNzOmBaaXBGaWxlYCBvYmplY3RzOgogCi0gICAuLiBtZXRob2Q6OiBQeVppcEZpbGUud3JpdGVweShwYXRobmFtZSwgYmFzZW5hbWU9JycpCisgICAuLiBtZXRob2Q6OiBQeVppcEZpbGUud3JpdGVweShwYXRobmFtZSwgYmFzZW5hbWU9JycsIGZpbHRlcmZ1bmM9Tm9uZSkKIAogICAgICAgU2VhcmNoIGZvciBmaWxlcyA6ZmlsZTpgXCoucHlgIGFuZCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSB0byB0aGUKICAgICAgIGFyY2hpdmUuCkBAIC0zOTcsMTYgKzQwMSwzMyBAQAogICAgICAgYGAyYGAsIG9ubHkgZmlsZXMgd2l0aCB0aGF0IG9wdGltaXphdGlvbiBsZXZlbCAoc2VlIDpmdW5jOmBjb21waWxlYCkgYXJlCiAgICAgICBhZGRlZCB0byB0aGUgYXJjaGl2ZSwgY29tcGlsaW5nIGlmIG5lY2Vzc2FyeS4KIAotICAgICAgSWYgdGhlIHBhdGhuYW1lIGlzIGEgZmlsZSwgdGhlIGZpbGVuYW1lIG11c3QgZW5kIHdpdGggOmZpbGU6YC5weWAsIGFuZAorICAgICAgSWYgKnBhdGhuYW1lKiBpcyBhIGZpbGUsIHRoZSBmaWxlbmFtZSBtdXN0IGVuZCB3aXRoIDpmaWxlOmAucHlgLCBhbmQKICAgICAgIGp1c3QgdGhlIChjb3JyZXNwb25kaW5nIDpmaWxlOmBcKi5weVtjb11gKSBmaWxlIGlzIGFkZGVkIGF0IHRoZSB0b3AgbGV2ZWwKLSAgICAgIChubyBwYXRoIGluZm9ybWF0aW9uKS4gIElmIHRoZSBwYXRobmFtZSBpcyBhIGZpbGUgdGhhdCBkb2VzIG5vdCBlbmQgd2l0aAorICAgICAgKG5vIHBhdGggaW5mb3JtYXRpb24pLiAgSWYgKnBhdGhuYW1lKiBpcyBhIGZpbGUgdGhhdCBkb2VzIG5vdCBlbmQgd2l0aAogICAgICAgOmZpbGU6YC5weWAsIGEgOmV4YzpgUnVudGltZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4gIElmIGl0IGlzIGEgZGlyZWN0b3J5LAogICAgICAgYW5kIHRoZSBkaXJlY3RvcnkgaXMgbm90IGEgcGFja2FnZSBkaXJlY3RvcnksIHRoZW4gYWxsIHRoZSBmaWxlcwogICAgICAgOmZpbGU6YFwqLnB5W2NvXWAgYXJlIGFkZGVkIGF0IHRoZSB0b3AgbGV2ZWwuICBJZiB0aGUgZGlyZWN0b3J5IGlzIGEKICAgICAgIHBhY2thZ2UgZGlyZWN0b3J5LCB0aGVuIGFsbCA6ZmlsZTpgXCoucHlbY29dYCBhcmUgYWRkZWQgdW5kZXIgdGhlIHBhY2thZ2UKICAgICAgIG5hbWUgYXMgYSBmaWxlIHBhdGgsIGFuZCBpZiBhbnkgc3ViZGlyZWN0b3JpZXMgYXJlIHBhY2thZ2UgZGlyZWN0b3JpZXMsCi0gICAgICBhbGwgb2YgdGhlc2UgYXJlIGFkZGVkIHJlY3Vyc2l2ZWx5LiAgKmJhc2VuYW1lKiBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwKLSAgICAgIHVzZSBvbmx5LiAgVGhlIDptZXRoOmB3cml0ZXB5YCBtZXRob2QgbWFrZXMgYXJjaGl2ZXMgd2l0aCBmaWxlIG5hbWVzIGxpa2UKKyAgICAgIGFsbCBvZiB0aGVzZSBhcmUgYWRkZWQgcmVjdXJzaXZlbHkuCisKKyAgICAgICpiYXNlbmFtZSogaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5LgorCisgICAgICAqZmlsdGVyZnVuYyosIGlmIGdpdmVuLCBtdXN0IGJlIGEgZnVuY3Rpb24gdGFraW5nIGEgc2luZ2xlIHN0cmluZworICAgICAgYXJndW1lbnQuICBJdCB3aWxsIGJlIHBhc3NlZCBlYWNoIHBhdGggKGluY2x1ZGluZyBlYWNoIGluZGl2aWR1YWwgZnVsbAorICAgICAgZmlsZSBwYXRoKSBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFyY2hpdmUuICBJZiAqZmlsdGVyZnVuYyogcmV0dXJucyBhCisgICAgICBmYWxzZSB2YWx1ZSwgdGhlIHBhdGggd2lsbCBub3QgYmUgYWRkZWQsIGFuZCBpZiBpdCBpcyBhIGRpcmVjdG9yeSBpdHMKKyAgICAgIGNvbnRlbnRzIHdpbGwgYmUgaWdub3JlZC4gIEZvciBleGFtcGxlLCBpZiBvdXIgdGVzdCBmaWxlcyBhcmUgYWxsIGVpdGhlcgorICAgICAgaW4gYGB0ZXN0YGAgZGlyZWN0b3JpZXMgb3Igc3RhcnQgd2l0aCB0aGUgc3RyaW5nIGBgdGVzdF9gYCwgd2UgY2FuIHVzZSBhCisgICAgICAqZmlsdGVyZnVuYyogdG8gZXhjbHVkZSB0aGVtOjoKKworICAgICAgICAgID4+PiB6ZiA9IFB5WmlwRmlsZSgnbXlwcm9nLnppcCcpCisgICAgICAgICAgPj4+IGRlZiBub3Rlc3RzKHMpOgorICAgICAgICAgIC4uLiAgICAgZm4gPSBvcy5wYXRoLmJhc2VuYW1lKHMpCisgICAgICAgICAgLi4uICAgICByZXR1cm4gKG5vdCAoZm4gPT0gJ3Rlc3QnIG9yIGZuLnN0YXJ0c3dpdGgoJ3Rlc3RfJykpKQorICAgICAgICAgID4+PiB6Zi53cml0ZXB5KCdteXByb2cnLCBmaWx0ZXJmdW5jPW5vdGVzdHMpCisKKyAgICAgIFRoZSA6bWV0aDpgd3JpdGVweWAgbWV0aG9kIG1ha2VzIGFyY2hpdmVzIHdpdGggZmlsZSBuYW1lcyBsaWtlCiAgICAgICB0aGlzOjoKIAogICAgICAgICAgc3RyaW5nLnB5YyAgICAgICAgICAgICAgICAgICAjIFRvcCBsZXZlbCBuYW1lCkBAIC00MTUsNiArNDM2LDkgQEAKICAgICAgICAgIHRlc3QvYm9ndXMvX19pbml0X18ucHljICAgICAgIyBTdWJwYWNrYWdlIGRpcmVjdG9yeQogICAgICAgICAgdGVzdC9ib2d1cy9teWZpbGUucHljICAgICAgICAjIFN1Ym1vZHVsZSB0ZXN0LmJvZ3VzLm15ZmlsZQogCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgICAgIFRoZSAqZmlsdGVyZnVuYyogcGFyYW1ldGVyLgorCiAKIC4uIF96aXBpbmZvLW9iamVjdHM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWNlbnNlLnJzdCBiL0RvYy9saWNlbnNlLnJzdAppbmRleCA0NDQwYzdiLi42MTkwZmUwIDEwMDY0NAotLS0gYS9Eb2MvbGljZW5zZS5yc3QKKysrIGIvRG9jL2xpY2Vuc2UucnN0CkBAIC04NCw5ICs4NCw5IEBACiAgICBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsCiAgICBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gfHJlbGVhc2V8IGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlCiAgICB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBQU0YncyBMaWNlbnNlIEFncmVlbWVudCBhbmQgUFNGJ3Mgbm90aWNlIG9mCi0gICBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgwqkgMjAwMS0yMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzCi0gICBSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiB8cmVsZWFzZXwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbgotICAgcHJlcGFyZWQgYnkgTGljZW5zZWUuCisgICBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgwqkgMjAwMS0yMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwKKyAgIFJpZ2h0cyBSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiB8cmVsZWFzZXwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUKKyAgIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuCiAKICMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uIG9yCiAgICBpbmNvcnBvcmF0ZXMgUHl0aG9uIHxyZWxlYXNlfCBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZSB0aGUKQEAgLTU5MCw2ICs1OTAsMzUgQEAKICAgU1VDSCBEQU1BR0UuCiAKIAorU2lwSGFzaDI0CistLS0tLS0tLS0KKworVGhlIGZpbGUgOmZpbGU6YFB5dGhvbi9weWhhc2guY2AgY29udGFpbnMgTWFyZWsgTWFqa293c2tpJyBpbXBsZW1lbnRhdGlvbiBvZgorRGFuIEJlcm5zdGVpbidzIFNpcEhhc2gyNCBhbGdvcml0aG0uIFRoZSBjb250YWlucyB0aGUgZm9sbG93aW5nIG5vdGU6OgorCisgIDxNSVQgTGljZW5zZT4KKyAgQ29weXJpZ2h0IChjKSAyMDEzICBNYXJlayBNYWprb3dza2kgPG1hcmVrQHBvcGNvdW50Lm9yZz4KKworICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgPC9NSVQgTGljZW5zZT4KKworICBPcmlnaW5hbCBsb2NhdGlvbjoKKyAgICAgaHR0cHM6Ly9naXRodWIuY29tL21hamVrL2NzaXBoYXNoLworCisgIFNvbHV0aW9uIGluc3BpcmVkIGJ5IGNvZGUgZnJvbToKKyAgICAgU2FtdWVsIE5ldmVzIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlKQorICAgICBkamIgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUyKQorICAgICBKZWFuLVBoaWxpcHBlIEF1bWFzc29uIChodHRwczovLzEzMTAwMi5uZXQvc2lwaGFzaC9zaXBoYXNoMjQuYykKKworCiBzdHJ0b2QgYW5kIGR0b2EKIC0tLS0tLS0tLS0tLS0tLQogCkBAIC04NDYsNiArODc1LDQ3IEBACiAgIGpsb3VwQGd6aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKIAogCitjZnVoYXNoCistLS0tLS0tCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaGFzaCB0YWJsZSB1c2VkIGJ5IHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgaXMgYmFzZWQKK29uIHRoZSBjZnVoYXNoIHByb2plY3Q6OgorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUgRG9uIE93ZW5zCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgICBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCiBsaWJtcGRlYwogLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL21ha2UuYmF0IGIvRG9jL21ha2UuYmF0CmluZGV4IGQ2ZjcwNzQuLmIyNjgyNmUgMTAwNjQ0Ci0tLSBhL0RvYy9tYWtlLmJhdAorKysgYi9Eb2MvbWFrZS5iYXQKQEAgLTEsNTkgKzEsMTI0IEBACi1AQGVjaG8gb2ZmCitAZWNobyBvZmYKIHNldGxvY2FsCiAKLXNldCBTVk5ST09UPWh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cwotaWYgIiVQWVRIT04lIiBFUVUgIiIgc2V0IFBZVEhPTj1weSAtMgotaWYgIiVIVE1MSEVMUCUiIEVRVSAiIiBzZXQgSFRNTEhFTFA9JVByb2dyYW1GaWxlcyVcSFRNTCBIZWxwIFdvcmtzaG9wXGhoYy5leGUKK3B1c2hkICV+ZHAwCisKK3NldCB0aGlzPSV+bjAKKworaWYgIiVTUEhJTlhCVUlMRCUiIEVRVSAiIiBzZXQgU1BISU5YQlVJTEQ9c3BoaW54LWJ1aWxkCitpZiAiJVBZVEhPTiUiIEVRVSAiIiBzZXQgUFlUSE9OPXB5CisKK2lmIERFRklORUQgUHJvZ3JhbUZpbGVzKHg4Nikgc2V0IF9QUkdNRkxTPSVQcm9ncmFtRmlsZXMoeDg2KSUKK2lmIE5PVCBERUZJTkVEIFByb2dyYW1GaWxlcyh4ODYpIHNldCBfUFJHTUZMUz0lUHJvZ3JhbUZpbGVzJQoraWYgIiVIVE1MSEVMUCUiIEVRVSAiIiBzZXQgSFRNTEhFTFA9JV9QUkdNRkxTJVxIVE1MIEhlbHAgV29ya3Nob3BcaGhjLmV4ZQorCiBpZiAiJURJU1RWRVJTSU9OJSIgRVFVICIiIGZvciAvZiAidXNlYmFja3EiICUldiBpbiAoYCVQWVRIT04lIHRvb2xzL3NwaGlueGV4dC9wYXRjaGxldmVsLnB5YCkgZG8gc2V0IERJU1RWRVJTSU9OPSUldgogCitpZiAiJUJVSUxERElSJSIgRVFVICIiIHNldCBCVUlMRERJUj1idWlsZAorCityZW0gVGFyZ2V0cyB0aGF0IGRvbid0IHJlcXVpcmUgc3BoaW54LWJ1aWxkCiBpZiAiJTEiIEVRVSAiIiBnb3RvIGhlbHAKLWlmICIlMSIgRVFVICJodG1sIiBnb3RvIGJ1aWxkCi1pZiAiJTEiIEVRVSAiaHRtbGhlbHAiIGdvdG8gYnVpbGQKLWlmICIlMSIgRVFVICJsYXRleCIgZ290byBidWlsZAotaWYgIiUxIiBFUVUgInRleHQiIGdvdG8gYnVpbGQKLWlmICIlMSIgRVFVICJzdXNwaWNpb3VzIiBnb3RvIGJ1aWxkCi1pZiAiJTEiIEVRVSAibGlua2NoZWNrIiBnb3RvIGJ1aWxkCi1pZiAiJTEiIEVRVSAiY2hhbmdlcyIgZ290byBidWlsZAotaWYgIiUxIiBFUVUgImNoZWNrb3V0IiBnb3RvIGNoZWNrb3V0Ci1pZiAiJTEiIEVRVSAidXBkYXRlIiBnb3RvIHVwZGF0ZQoraWYgIiUxIiBFUVUgImhlbHAiIGdvdG8gaGVscAoraWYgIiUxIiBFUVUgImNoZWNrIiBnb3RvIGNoZWNrCitpZiAiJTEiIEVRVSAic2VydmUiIGdvdG8gc2VydmUKK2lmICIlMSIgPT0gImNsZWFuIiAoCisgICAgcm1kaXIgL3EgL3MgJUJVSUxERElSJQorICAgIGdvdG8gZW5kCispCisKKyVTUEhJTlhCVUlMRCUgMj4gbnVsCitpZiBlcnJvcmxldmVsIDkwMDkgKAorICAgIGVjaG8uCisgICAgZWNoby5UaGUgJ3NwaGlueC1idWlsZCcgY29tbWFuZCB3YXMgbm90IGZvdW5kLiBNYWtlIHN1cmUgeW91IGhhdmUgU3BoaW54CisgICAgZWNoby5pbnN0YWxsZWQsIHRoZW4gc2V0IHRoZSBTUEhJTlhCVUlMRCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwb2ludAorICAgIGVjaG8udG8gdGhlIGZ1bGwgcGF0aCBvZiB0aGUgJ3NwaGlueC1idWlsZCcgZXhlY3V0YWJsZS4gQWx0ZXJuYXRpdmVseSB5b3UKKyAgICBlY2hvLm1heSBhZGQgdGhlIFNwaGlueCBkaXJlY3RvcnkgdG8gUEFUSC4KKyAgICBlY2hvLgorICAgIGVjaG8uSWYgeW91IGRvbid0IGhhdmUgU3BoaW54IGluc3RhbGxlZCwgZ3JhYiBpdCBmcm9tCisgICAgZWNoby5odHRwOi8vc3BoaW54LWRvYy5vcmcvCisgICAgZ290byBlbmQKKykKKworcmVtIFRhcmdldHMgdGhhdCBkbyByZXF1aXJlIHNwaGlueC1idWlsZCBhbmQgaGF2ZSB0aGVpciBvd24gbGFiZWwKK2lmICIlMSIgRVFVICJodG1sdmlldyIgZ290byBodG1sdmlldworCityZW0gRXZlcnl0aGluZyBlbHNlCitnb3RvIGJ1aWxkCiAKIDpoZWxwCi1zZXQgdGhpcz0lfm4wCi1lY2hvIEhFTFAKK2VjaG8udXNhZ2U6ICV0aGlzJSBCVUlMREVSIFtmaWxlbmFtZSAuLi5dCiBlY2hvLgotZWNobyAldGhpcyUgY2hlY2tvdXQKLWVjaG8gJXRoaXMlIHVwZGF0ZQotZWNobyAldGhpcyUgaHRtbAotZWNobyAldGhpcyUgaHRtbGhlbHAKLWVjaG8gJXRoaXMlIGxhdGV4Ci1lY2hvICV0aGlzJSB0ZXh0Ci1lY2hvICV0aGlzJSBzdXNwaWNpb3VzCi1lY2hvICV0aGlzJSBsaW5rY2hlY2sKLWVjaG8gJXRoaXMlIGNoYW5nZXMKK2VjaG8uQ2FsbCAldGhpcyUgd2l0aCB0aGUgZGVzaXJlZCBTcGhpbnggYnVpbGRlciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGUuZy4KK2VjaG8uYGAldGhpcyUgaHRtbGBgIG9yIGBgJXRoaXMlIGRvY3Rlc3RgYC4gIEludGVyZXN0aW5nIHRhcmdldHMgdGhhdCBhcmUKK2VjaG8uYWx3YXlzIGF2YWlsYWJsZSBpbmNsdWRlOgogZWNoby4KLWdvdG8gZW5kCi0KLTpjaGVja291dAotc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9TcGhpbngtMS4yL3NwaGlueCB0b29scy9zcGhpbngKLXN2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvZG9jdXRpbHMtMC4xMS9kb2N1dGlscyB0b29scy9kb2N1dGlscwotc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9KaW5qYS0yLjMuMS9qaW5qYTIgdG9vbHMvamluamEyCi1zdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL1B5Z21lbnRzLTEuNi9weWdtZW50cyB0b29scy9weWdtZW50cwotZ290byBlbmQKLQotOnVwZGF0ZQotc3ZuIHVwZGF0ZSB0b29scy9zcGhpbngKLXN2biB1cGRhdGUgdG9vbHMvZG9jdXRpbHMKLXN2biB1cGRhdGUgdG9vbHMvamluamEyCi1zdm4gdXBkYXRlIHRvb2xzL3B5Z21lbnRzCitlY2hvLiAgIFByb3ZpZGVkIGJ5IFNwaGlueDoKK2VjaG8uICAgICAgaHRtbCwgaHRtbGhlbHAsIGxhdGV4LCB0ZXh0CitlY2hvLiAgICAgIHN1c3BpY2lvdXMsIGxpbmtjaGVjaywgY2hhbmdlcywgZG9jdGVzdAorZWNoby4gICBQcm92aWRlZCBieSB0aGlzIHNjcmlwdDoKK2VjaG8uICAgICAgY2xlYW4sIGNoZWNrLCBzZXJ2ZSwgaHRtbHZpZXcKK2VjaG8uCitlY2hvLkFsbCBhcmd1bWVudHMgcGFzdCB0aGUgZmlyc3Qgb25lIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBzcGhpbngtYnVpbGQgYXMKK2VjaG8uZmlsZW5hbWVzIHRvIGJ1aWxkIG9yIGFyZSBpZ25vcmVkLiAgU2VlIFJFQURNRS50eHQgaW4gdGhpcyBkaXJlY3Rvcnkgb3IKK2VjaG8udGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgdmVyc2lvbiBvZiBTcGhpbnggZm9yIG1vcmUgZXhoYXVzdGl2ZSBsaXN0cworZWNoby5vZiBhdmFpbGFibGUgdGFyZ2V0cyBhbmQgZGVzY3JpcHRpb25zIG9mIGVhY2guCitlY2hvLgorZWNoby5UaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgdGhlIFNQSElOWEJVSUxEIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5zCitlY2hvLmEgbGVnaXRpbWF0ZSBjb21tYW5kIGZvciBjYWxsaW5nIHNwaGlueC1idWlsZCwgb3IgdGhhdCBzcGhpbngtYnVpbGQgaXMKK2VjaG8ub24geW91ciBQQVRIIGlmIFNQSElOWEJVSUxEIGlzIG5vdCBzZXQuICBPcHRpb25zIGZvciBzcGhpbngtYnVpbGQgY2FuCitlY2hvLmJlIHBhc3NlZCBieSBzZXR0aW5nIHRoZSBTUEhJTlhPUFRTIGVudmlyb25tZW50IHZhcmlhYmxlLgogZ290byBlbmQKIAogOmJ1aWxkCi1pZiBub3QgZXhpc3QgYnVpbGQgbWtkaXIgYnVpbGQKLWlmIG5vdCBleGlzdCBidWlsZFwlMSBta2RpciBidWlsZFwlMQotaWYgbm90IGV4aXN0IGJ1aWxkXGRvY3RyZWVzIG1rZGlyIGJ1aWxkXGRvY3RyZWVzCi1jbWQgL0MgJVBZVEhPTiUgLS12ZXJzaW9uCi1jbWQgL0MgJVBZVEhPTiUgdG9vbHNcc3BoaW54LWJ1aWxkLnB5IC1iJTEgLWRidWlsZFxkb2N0cmVlcyAuIGJ1aWxkXCUqCi1pZiAiJTEiIEVRVSAiaHRtbGhlbHAiICIlSFRNTEhFTFAlIiBidWlsZFxodG1saGVscFxweXRob24lRElTVFZFUlNJT046Lj0lLmhocAoraWYgTk9UICIlUEFQRVIlIiA9PSAiIiAoCisgICAgc2V0IFNQSElOWE9QVFM9LUQgbGF0ZXhfcGFwZXJfc2l6ZT0lUEFQRVIlICVTUEhJTlhPUFRTJQorKQorY21kIC9DICVTUEhJTlhCVUlMRCUgJVNQSElOWE9QVFMlIC1iJTEgLWRidWlsZFxkb2N0cmVlcyAuICVCVUlMRERJUiVcJSoKKworaWYgIiUxIiBFUVUgImh0bWxoZWxwIiAoCisgICAgaWYgIG5vdCBleGlzdCAiJUhUTUxIRUxQJSIgKAorICAgICAgICBlY2hvLgorICAgICAgICBlY2hvLlRoZSBIVE1MIEhlbHAgV29ya3Nob3Agd2FzIG5vdCBmb3VuZC4gIFNldCB0aGUgSFRNTEhFTFAgdmFyaWFibGUKKyAgICAgICAgZWNoby50byB0aGUgcGF0aCB0byBoaGMuZXhlIG9yIGRvd25sb2FkIGFuZCBpbnN0YWxsIGl0IGZyb20KKyAgICAgICAgZWNoby5odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2Njk5ODUKKyAgICAgICAgcmVtIFNldCBlcnJvcmxldmVsIHRvIDEgYW5kIGV4aXQKKyAgICAgICAgY21kIC9DIGV4aXQgL2IgMQorICAgICAgICBnb3RvIGVuZAorICAgICkKKyAgICBjbWQgL0MgIiVIVE1MSEVMUCUiIGJ1aWxkXGh0bWxoZWxwXHB5dGhvbiVESVNUVkVSU0lPTjouPSUuaGhwCisgICAgcmVtIGhoYy5leGUgc2VlbXMgdG8gYWx3YXlzIGV4aXQgd2l0aCBjb2RlIDEsIHJlc2V0IHRvIDAgZm9yIGxlc3MgdGhhbiAyCisgICAgaWYgbm90IGVycm9ybGV2ZWwgMiBjbWQgL0MgZXhpdCAvYiAwCispCisKK2VjaG8uCitpZiBlcnJvcmxldmVsIDEgKAorICAgIGVjaG8uQnVpbGQgZmFpbGVkIChleGl0IGNvZGUgJUVSUk9STEVWRUwlXiksIGNoZWNrIGZvciBlcnJvciBtZXNzYWdlcworICAgIGVjaG8uYWJvdmUuICBBbnkgb3V0cHV0IHdpbGwgYmUgZm91bmQgaW4gJUJVSUxERElSJVwlMQorKSBlbHNlICgKKyAgICBlY2hvLkJ1aWxkIHN1Y2NlZWRlZC4gQWxsIG91dHB1dCBzaG91bGQgYmUgaW4gJUJVSUxERElSJVwlMQorKQorZ290byBlbmQKKworOmh0bWx2aWV3CitpZiBOT1QgIiUyIiBFUVUgIiIgKAorICAgIGVjaG8uQ2FuJ3Qgc3BlY2lmeSBmaWxlbmFtZXMgdG8gYnVpbGQgd2l0aCBodG1sdmlldyB0YXJnZXQsIGlnbm9yaW5nLgorKQorY21kIC9DICV0aGlzJSBodG1sCisKK2lmIEVYSVNUICVCVUlMRERJUiVcaHRtbFxpbmRleC5odG1sICgKKyAgICBlY2hvLk9wZW5pbmcgJUJVSUxERElSJVxodG1sXGluZGV4Lmh0bWwgaW4gdGhlIGRlZmF1bHQgd2ViIGJyb3dzZXIuLi4KKyAgICBzdGFydCAlQlVJTERESVIlXGh0bWxcaW5kZXguaHRtbAorKQorCitnb3RvIGVuZAorCis6Y2hlY2sKK2NtZCAvQyAlUFlUSE9OJSB0b29sc1xyc3RsaW50LnB5IC1pIHRvb2xzCitnb3RvIGVuZAorCis6c2VydmUKK2NtZCAvQyAlUFlUSE9OJSAuLlxUb29sc1xzY3JpcHRzXHNlcnZlLnB5ICVCVUlMRERJUiVcaHRtbAogZ290byBlbmQKIAogOmVuZAorcG9wZApkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QgYi9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdAppbmRleCA4YWZjNjllLi41ZGQxN2ViIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdApAQCAtMjIsMTQgKzIyLDE0IEBACiAgICBzaW5nbGU6IGNsYXVzZQogICAgc2luZ2xlOiBzdWl0ZQogCi1Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgJ2NsYXVzZXMuJyAgQSBjbGF1c2UgY29uc2lzdHMgb2YgYQorQSBjb21wb3VuZCBzdGF0ZW1lbnQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgJ2NsYXVzZXMuJyAgQSBjbGF1c2UgY29uc2lzdHMgb2YgYQogaGVhZGVyIGFuZCBhICdzdWl0ZS4nICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYSBwYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUKIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC4gRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkKIGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHMgd2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMKIGNvbnRyb2xsZWQgYnkgYSBjbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZQogc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyJ3MgY29sb24sIG9yIGl0CiBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50IGxpbmVzLiAgT25seSB0aGUgbGF0dGVyCi1mb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZCBzdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsCitmb3JtIG9mIGEgc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kIHN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwKIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkbid0IGJlIGNsZWFyIHRvIHdoaWNoIDprZXl3b3JkOmBpZmAgY2xhdXNlIGEgZm9sbG93aW5nCiA6a2V5d29yZDpgZWxzZWAgY2xhdXNlIHdvdWxkIGJlbG9uZzo6CiAKQEAgLTE1Niw4ICsxNTYsOCBAQAogCiBUaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGUgb2JqZWN0LiAgQW4KIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlIGBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMKLXRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtIHByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mCi1hc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2ggaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUKK3RoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtIHByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIHJldHVybmVkCitieSB0aGUgaXRlcmF0b3IuICBFYWNoIGl0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlCiBzdGFuZGFyZCBydWxlcyBmb3IgYXNzaWdubWVudHMgKHNlZSA6cmVmOmBhc3NpZ25tZW50YCksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpcwogZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZSBzZXF1ZW5jZQogaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgZXhjZXB0aW9uKSwgdGhlIHN1aXRlIGluCkBAIC0xNzAsMTcgKzE3MCwyNSBAQAogQSA6a2V5d29yZDpgYnJlYWtgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcAogd2l0aG91dCBleGVjdXRpbmcgdGhlIDprZXl3b3JkOmBlbHNlYCBjbGF1c2UncyBzdWl0ZS4gIEEgOmtleXdvcmQ6YGNvbnRpbnVlYAogc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGNvbnRpbnVlcwotd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSA6a2V5d29yZDpgZWxzZWAgY2xhdXNlIGlmIHRoZXJlIHdhcyBubyBuZXh0Cit3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIDprZXl3b3JkOmBlbHNlYCBjbGF1c2UgaWYgdGhlcmUgaXMgbm8gbmV4dAogaXRlbS4KIAotVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzIG5vdCBhZmZlY3QKLXRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuCitUaGUgZm9yLWxvb3AgbWFrZXMgYXNzaWdubWVudHMgdG8gdGhlIHZhcmlhYmxlcyhzKSBpbiB0aGUgdGFyZ2V0IGxpc3QuCitUaGlzIG92ZXJ3cml0ZXMgYWxsIHByZXZpb3VzIGFzc2lnbm1lbnRzIHRvIHRob3NlIHZhcmlhYmxlcyBpbmNsdWRpbmcKK3Rob3NlIG1hZGUgaW4gdGhlIHN1aXRlIG9mIHRoZSBmb3ItbG9vcDo6CisKKyAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICBwcmludChpKQorICAgICAgIGkgPSA1ICAgICAgICAgICAgICMgdGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIGZvci1sb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGkgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRleCBpbiB0aGUgcmFuZ2UKKwogCiAuLiBpbmRleDo6CiAgICBidWlsdGluOiByYW5nZQogCiBOYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsIGJ1dCBpZiB0aGUKLXNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsIGJ5IHRoZSBsb29wLiAgSGludDoKK3NlcXVlbmNlIGlzIGVtcHR5LCB0aGV5IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGwgYnkgdGhlIGxvb3AuICBIaW50OgogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmByYW5nZWAgcmV0dXJucyBhbiBpdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0bwogZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbCdzIGBgZm9yIGkgOj0gYSB0byBiIGRvYGA7IGUuZy4sIGBgbGlzdChyYW5nZSgzKSlgYAogcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLCAyXWBgLgpAQCAtMjI2LDcgKzIzNCw3IEBACiAuLiBwcm9kdWN0aW9ubGlzdDo6CiAgICB0cnlfc3RtdDogdHJ5MV9zdG10IHwgdHJ5Ml9zdG10CiAgICB0cnkxX3N0bXQ6ICJ0cnkiICI6IiBgc3VpdGVgCi0gICAgICAgICAgICA6ICgiZXhjZXB0IiBbYGV4cHJlc3Npb25gIFsiYXMiIGB0YXJnZXRgXV0gIjoiIGBzdWl0ZWApKworICAgICAgICAgICAgOiAoImV4Y2VwdCIgW2BleHByZXNzaW9uYCBbImFzIiBgaWRlbnRpZmllcmBdXSAiOiIgYHN1aXRlYCkrCiAgICAgICAgICAgICA6IFsiZWxzZSIgIjoiIGBzdWl0ZWBdCiAgICAgICAgICAgICA6IFsiZmluYWxseSIgIjoiIGBzdWl0ZWBdCiAgICB0cnkyX3N0bXQ6ICJ0cnkiICI6IiBgc3VpdGVgCkBAIC0yODQsNyArMjkyLDcgQEAKICAgIG9iamVjdDogdHJhY2ViYWNrCiAKIEJlZm9yZSBhbiBleGNlcHQgY2xhdXNlJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlIGV4Y2VwdGlvbiBhcmUKLXN0b3JlZCBpbiB0aGUgOm1vZDpgc3lzYCBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhIDpmdW5jOmBzeXMuZXhjX2luZm9gLgorc3RvcmVkIGluIHRoZSA6bW9kOmBzeXNgIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2Vzc2VkIHZpYSA6ZnVuYzpgc3lzLmV4Y19pbmZvYC4KIDpmdW5jOmBzeXMuZXhjX2luZm9gIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4Y2VwdGlvbiBjbGFzcywgdGhlCiBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlIHNlY3Rpb24gOnJlZjpgdHlwZXNgKSBpZGVudGlmeWluZwogdGhlIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICA6ZnVuYzpgc3lzLmV4Y19pbmZvYApAQCAtMzEzLDE0ICszMjEsMTQgQEAKIElmIHRoZSA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlIGV4ZWN1dGVzIGEgOmtleXdvcmQ6YHJldHVybmAgb3IgOmtleXdvcmQ6YGJyZWFrYAogc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZDo6CiAKLSAgICBkZWYgZigpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAxLzAKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHJldHVybiA0MgotCi0gICAgPj4+IGYoKQotICAgIDQyCisgICA+Pj4gZGVmIGYoKToKKyAgIC4uLiAgICAgdHJ5OgorICAgLi4uICAgICAgICAgMS8wCisgICAuLi4gICAgIGZpbmFsbHk6CisgICAuLi4gICAgICAgICByZXR1cm4gNDIKKyAgIC4uLgorICAgPj4+IGYoKQorICAgNDIKIAogVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZyBleGVjdXRpb24gb2YKIHRoZSA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlLgpAQCAtMzM3LDYgKzM0NSwyMCBAQAogcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZQogbGlmdGVkIGluIHRoZSBmdXR1cmUpLgogCitUaGUgcmV0dXJuIHZhbHVlIG9mIGEgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFzdCA6a2V5d29yZDpgcmV0dXJuYAorc3RhdGVtZW50IGV4ZWN1dGVkLiAgU2luY2UgdGhlIDprZXl3b3JkOmBmaW5hbGx5YCBjbGF1c2UgYWx3YXlzIGV4ZWN1dGVzLCBhCis6a2V5d29yZDpgcmV0dXJuYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIDprZXl3b3JkOmBmaW5hbGx5YCBjbGF1c2Ugd2lsbAorYWx3YXlzIGJlIHRoZSBsYXN0IG9uZSBleGVjdXRlZDo6CisKKyAgID4+PiBkZWYgZm9vKCk6CisgICAuLi4gICAgIHRyeToKKyAgIC4uLiAgICAgICAgIHJldHVybiAndHJ5JworICAgLi4uICAgICBmaW5hbGx5OgorICAgLi4uICAgICAgICAgcmV0dXJuICdmaW5hbGx5JworICAgLi4uCisgICA+Pj4gZm9vKCkKKyAgICdmaW5hbGx5JworCiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb24gOnJlZjpgZXhjZXB0aW9uc2AsCiBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIDprZXl3b3JkOmByYWlzZWAgc3RhdGVtZW50IHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMKIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uIDpyZWY6YHJhaXNlYC4KQEAgLTM0OCw3ICszNzAsOSBAQAogVGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLS4uIGluZGV4Ojogc3RhdGVtZW50OiB3aXRoCisuLiBpbmRleDo6CisgICAgc3RhdGVtZW50OiB3aXRoCisgICAgc2luZ2xlOiBhczsgd2l0aCBzdGF0ZW1lbnQKIAogVGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoCiBtZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uIDpyZWY6YGNvbnRleHQtbWFuYWdlcnNgKS4KQEAgLTQ0NSw3ICs0NjksNyBAQAogICAgZGVjb3JhdG9yOiAiQCIgYGRvdHRlZF9uYW1lYCBbIigiIFtgcGFyYW1ldGVyX2xpc3RgIFsiLCJdXSAiKSJdIE5FV0xJTkUKICAgIGRvdHRlZF9uYW1lOiBgaWRlbnRpZmllcmAgKCIuIiBgaWRlbnRpZmllcmApKgogICAgcGFyYW1ldGVyX2xpc3Q6IChgZGVmcGFyYW1ldGVyYCAiLCIpKgotICAgICAgICAgICAgICAgICA6ICggIioiIFtgcGFyYW1ldGVyYF0gKCIsIiBgZGVmcGFyYW1ldGVyYCkqIFsiLCIgIioqIiBgcGFyYW1ldGVyYF0KKyAgICAgICAgICAgICAgICAgOiB8ICIqIiBbYHBhcmFtZXRlcmBdICgiLCIgYGRlZnBhcmFtZXRlcmApKiBbIiwiICIqKiIgYHBhcmFtZXRlcmBdCiAgICAgICAgICAgICAgICAgIDogfCAiKioiIGBwYXJhbWV0ZXJgCiAgICAgICAgICAgICAgICAgIDogfCBgZGVmcGFyYW1ldGVyYCBbIiwiXSApCiAgICBwYXJhbWV0ZXI6IGBpZGVudGlmaWVyYCBbIjoiIGBleHByZXNzaW9uYF0KQEAgLTQ5MywxNCArNTE3LDE1IEBACiB2YWx1ZSwgYWxsIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdAogdmFsdWUgLS0tIHRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLgogCi0qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMKLWV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24KLWlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMKLWlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZQotb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0Ci0oZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuCi1UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAKLWFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46OgorKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGUgZnVuY3Rpb24KK2RlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuCit0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaAorY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYQorbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZQorb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdAorbW9kaWZpZWQuICBUaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UKK2BgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sCitlLmcuOjoKIAogICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOgogICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZToKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdAppbmRleCAxNjBhZjMwLi5kNDAxZWUwIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CkBAIC03Nyw3ICs3Nyw3IEBACiAgICBtb2R1bGUgZm9yIGluZm9ybWF0aW9uIG9uIGNvbnRyb2xsaW5nIHRoZSBjb2xsZWN0aW9uIG9mIGN5Y2xpYyBnYXJiYWdlLgogICAgT3RoZXIgaW1wbGVtZW50YXRpb25zIGFjdCBkaWZmZXJlbnRseSBhbmQgQ1B5dGhvbiBtYXkgY2hhbmdlLgogICAgRG8gbm90IGRlcGVuZCBvbiBpbW1lZGlhdGUgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2hlbiB0aGV5IGJlY29tZQotICAgdW5yZWFjaGFibGUgKGV4OiBhbHdheXMgY2xvc2UgZmlsZXMpLgorICAgdW5yZWFjaGFibGUgKHNvIHlvdSBzaG91bGQgYWx3YXlzIGNsb3NlIGZpbGVzIGV4cGxpY2l0bHkpLgogCiBOb3RlIHRoYXQgdGhlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24ncyB0cmFjaW5nIG9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzIG1heQoga2VlcCBvYmplY3RzIGFsaXZlIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgY29sbGVjdGFibGUuIEFsc28gbm90ZSB0aGF0IGNhdGNoaW5nCkBAIC0yODUsMTYgKzI4NSwxNyBAQAogICAgICAgICAgICAgc2luZ2xlOiBpbnRlZ2VyCiAgICAgICAgICAgICBzaW5nbGU6IFVuaWNvZGUKIAotICAgICAgICAgQSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhhdCByZXByZXNlbnQgVW5pY29kZSBjb2RlcG9pbnRzLgotICAgICAgICAgQWxsIHRoZSBjb2RlcG9pbnRzIGluIHJhbmdlIGBgVSswMDAwIC0gVSsxMEZGRkZgYCBjYW4gYmUgcmVwcmVzZW50ZWQKLSAgICAgICAgIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuJ3QgaGF2ZSBhIDpjOnR5cGU6YGNocmAgdHlwZSwgYW5kCi0gICAgICAgICBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyBpcyByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBvYmplY3QKLSAgICAgICAgIHdpdGggbGVuZ3RoIGBgMWBgLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBvcmRgIGNvbnZlcnRzIGEKLSAgICAgICAgIGNoYXJhY3RlciB0byBpdHMgY29kZXBvaW50IChhcyBhbiBpbnRlZ2VyKTsgOmZ1bmM6YGNocmAgY29udmVydHMKLSAgICAgICAgIGFuIGludGVnZXIgaW4gcmFuZ2UgYGAwIC0gMTBGRkZGYGAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLgorICAgICAgICAgQSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhhdCByZXByZXNlbnQgVW5pY29kZSBjb2RlIHBvaW50cy4KKyAgICAgICAgIEFsbCB0aGUgY29kZSBwb2ludHMgaW4gdGhlIHJhbmdlIGBgVSswMDAwIC0gVSsxMEZGRkZgYCBjYW4gYmUKKyAgICAgICAgIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuJ3QgaGF2ZSBhIDpjOnR5cGU6YGNoYXJgIHR5cGU7CisgICAgICAgICBpbnN0ZWFkLCBldmVyeSBjb2RlIHBvaW50IGluIHRoZSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcKKyAgICAgICAgIG9iamVjdCB3aXRoIGxlbmd0aCBgYDFgYC4gIFRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgb3JkYAorICAgICAgICAgY29udmVydHMgYSBjb2RlIHBvaW50IGZyb20gaXRzIHN0cmluZyBmb3JtIHRvIGFuIGludGVnZXIgaW4gdGhlCisgICAgICAgICByYW5nZSBgYDAgLSAxMEZGRkZgYDsgOmZ1bmM6YGNocmAgY29udmVydHMgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UKKyAgICAgICAgIGBgMCAtIDEwRkZGRmBgIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlbmd0aCBgYDFgYCBzdHJpbmcgb2JqZWN0LgogICAgICAgICAgOm1ldGg6YHN0ci5lbmNvZGVgIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSA6Y2xhc3M6YHN0cmAgdG8KLSAgICAgICAgIDpjbGFzczpgYnl0ZXNgIHVzaW5nIHRoZSBnaXZlbiBlbmNvZGluZywgYW5kIDptZXRoOmBieXRlcy5kZWNvZGVgIGNhbgotICAgICAgICAgYmUgdXNlZCB0byBhY2hpZXZlIHRoZSBvcHBvc2l0ZS4KKyAgICAgICAgIDpjbGFzczpgYnl0ZXNgIHVzaW5nIHRoZSBnaXZlbiB0ZXh0IGVuY29kaW5nLCBhbmQKKyAgICAgICAgIDptZXRoOmBieXRlcy5kZWNvZGVgIGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgdGhlIG9wcG9zaXRlLgogCiAgICAgICBUdXBsZXMKICAgICAgICAgIC4uIGluZGV4OjoKQEAgLTMyMyw4ICszMjQsNiBAQAogICAgICAgICAgb2JqZWN0OiBtdXRhYmxlIHNlcXVlbmNlCiAgICAgICAgICBvYmplY3Q6IG11dGFibGUKICAgICAgICAgIHBhaXI6IGFzc2lnbm1lbnQ7IHN0YXRlbWVudAotICAgICAgICAgc2luZ2xlOiBkZWxldGUKLSAgICAgICAgIHN0YXRlbWVudDogZGVsCiAgICAgICAgICBzaW5nbGU6IHN1YnNjcmlwdGlvbgogICAgICAgICAgc2luZ2xlOiBzbGljaW5nCiAKQEAgLTkzNCw2ICs5MzMsMjAgQEAKICAgICAgIGZyYW1lKS4gIEEgZGVidWdnZXIgY2FuIGltcGxlbWVudCBhIEp1bXAgY29tbWFuZCAoYWthIFNldCBOZXh0IFN0YXRlbWVudCkKICAgICAgIGJ5IHdyaXRpbmcgdG8gZl9saW5lbm8uCiAKKyAgICAgIEZyYW1lIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOgorCisgICAgICAuLiBtZXRob2Q6OiBmcmFtZS5jbGVhcigpCisKKyAgICAgICAgIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaGVsZCBieSB0aGUKKyAgICAgICAgIGZyYW1lLiAgQWxzbywgaWYgdGhlIGZyYW1lIGJlbG9uZ2VkIHRvIGEgZ2VuZXJhdG9yLCB0aGUgZ2VuZXJhdG9yCisgICAgICAgICBpcyBmaW5hbGl6ZWQuICBUaGlzIGhlbHBzIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgaW52b2x2aW5nIGZyYW1lCisgICAgICAgICBvYmplY3RzIChmb3IgZXhhbXBsZSB3aGVuIGNhdGNoaW5nIGFuIGV4Y2VwdGlvbiBhbmQgc3RvcmluZyBpdHMKKyAgICAgICAgIHRyYWNlYmFjayBmb3IgbGF0ZXIgdXNlKS4KKworICAgICAgICAgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIGN1cnJlbnRseSBleGVjdXRpbmcuCisKKyAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICBUcmFjZWJhY2sgb2JqZWN0cwogICAgICAgLi4gaW5kZXg6OgogICAgICAgICAgb2JqZWN0OiB0cmFjZWJhY2sKQEAgLTExMjEsMTIgKzExMzQsMTAgQEAKICAgICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdCBzaXR1YXRpb24KICAgICAgIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlczsgdGhlIGxhdHRlciB0d28KICAgICAgIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW4gYGBzeXMubGFzdF90cmFjZWJhY2tgYC4KLSAgICAgIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZQotICAgICAgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXQncyBvbiBieSBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWQgdXAgaWYKLSAgICAgIHRoZXJlIGFyZSBubyBQeXRob24tIGxldmVsIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUKLSAgICAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6bW9kOmBnY2AgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdwotICAgICAgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGN5Y2xlIGRldGVjdG9yLCBwYXJ0aWN1bGFybHkKLSAgICAgIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBnYXJiYWdlYGAgdmFsdWUuCisgICAgICBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuCisgICAgICB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzIGVuYWJsZWQgKGl0J3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyIHRvIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDptb2Q6YGdjYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcworICAgICAgdG9waWMuCiAKICAgIC4uIHdhcm5pbmc6OgogCkBAIC0xMjE0LDYgKzEyMjUsMTAgQEAKIAogICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBfX2Zvcm1hdF9fIG1ldGhvZCBvZiBgYG9iamVjdGBgIGl0c2VsZiByYWlzZXMgYSA6ZXhjOmBUeXBlRXJyb3JgCisgICAgICBpZiBwYXNzZWQgYW55IG5vbi1lbXB0eSBzdHJpbmcuCisKIAogLi4gX3JpY2hjbXBmdW5jczoKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpCkBAIC0xNDUxLDYgKzE0NjYsMTQgQEAKICAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lciBjbGFzcy4KIAogCitUaGUgYXR0cmlidXRlIDphdHRyOmBfX29iamNsYXNzX19gIGlzIGludGVycHJldGVkIGJ5IHRoZSA6bW9kOmBpbnNwZWN0YCBtb2R1bGUKK2FzIHNwZWNpZnlpbmcgdGhlIGNsYXNzIHdoZXJlIHRoaXMgb2JqZWN0IHdhcyBkZWZpbmVkIChzZXR0aW5nIHRoaXMKK2FwcHJvcHJpYXRlbHkgY2FuIGFzc2lzdCBpbiBydW50aW1lIGludHJvc3BlY3Rpb24gb2YgZHluYW1pYyBjbGFzcyBhdHRyaWJ1dGVzKS4KK0ZvciBjYWxsYWJsZXMsIGl0IG1heSBpbmRpY2F0ZSB0aGF0IGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlIChvciBhCitzdWJjbGFzcykgaXMgZXhwZWN0ZWQgb3IgcmVxdWlyZWQgYXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGZvciBleGFtcGxlLAorQ1B5dGhvbiBzZXRzIHRoaXMgYXR0cmlidXRlIGZvciB1bmJvdW5kIG1ldGhvZHMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gQykuCisKKwogLi4gX2Rlc2NyaXB0b3ItaW52b2NhdGlvbjoKIAogSW52b2tpbmcgRGVzY3JpcHRvcnMKQEAgLTE2MzEsNiArMTY1NCw4IEBACiB0aGF0IGNyaXRlcmlvbiwgdGhlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiB3aWxsIGZhaWwgd2l0aCBgYFR5cGVFcnJvcmBgLgogCiAKKy4uIF9wcmVwYXJlOgorCiBQcmVwYXJpbmcgdGhlIGNsYXNzIG5hbWVzcGFjZQogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMTY5OCw3ICsxNzIzLDcgQEAKIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLgogCiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXRhY2xhc3MgdGhhdCB1c2VzIGFuIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgCi10byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyBtZW1iZXJzIHdlcmUgZGVmaW5lZDo6Cit0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyB2YXJpYWJsZXMgYXJlIGRlZmluZWQ6OgogCiAgICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOgogCkBAIC0xODMwLDYgKzE4NTUsMTUgQEAKICAgIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuCiAKIAorLi4gbWV0aG9kOjogb2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKQorCisgICBDYWxsZWQgdG8gaW1wbGVtZW50IDpmdW5jOmBvcGVyYXRvci5sZW5ndGhfaGludGAuIFNob3VsZCByZXR1cm4gYW4gZXN0aW1hdGVkCisgICBsZW5ndGggZm9yIHRoZSBvYmplY3QgKHdoaWNoIG1heSBiZSBncmVhdGVyIG9yIGxlc3MgdGhhbiB0aGUgYWN0dWFsIGxlbmd0aCkuCisgICBUaGUgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlciBgYD49YGAgMC4gVGhpcyBtZXRob2QgaXMgcHVyZWx5IGFuCisgICBvcHRpbWl6YXRpb24gYW5kIGlzIG5ldmVyIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIG5vdGU6OgogCiAgICBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBIGNhbGwgbGlrZSA6OgpAQCAtMjA2MSw5ICsyMDk1LDE3IEBACiAKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2luZGV4X18oc2VsZikKIAotICAgQ2FsbGVkIHRvIGltcGxlbWVudCA6ZnVuYzpgb3BlcmF0b3IuaW5kZXhgLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXIgUHl0aG9uIG5lZWRzCi0gICBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGUgYnVpbHQtaW4gOmZ1bmM6YGJpbmAsCi0gICA6ZnVuYzpgaGV4YCBhbmQgOmZ1bmM6YG9jdGAgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm4gYW4gaW50ZWdlci4KKyAgIENhbGxlZCB0byBpbXBsZW1lbnQgOmZ1bmM6YG9wZXJhdG9yLmluZGV4YCwgYW5kIHdoZW5ldmVyIFB5dGhvbiBuZWVkcyB0bworICAgbG9zc2xlc3NseSBjb252ZXJ0IHRoZSBudW1lcmljIG9iamVjdCB0byBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbgorICAgc2xpY2luZywgb3IgaW4gdGhlIGJ1aWx0LWluIDpmdW5jOmBiaW5gLCA6ZnVuYzpgaGV4YCBhbmQgOmZ1bmM6YG9jdGAKKyAgIGZ1bmN0aW9ucykuIFByZXNlbmNlIG9mIHRoaXMgbWV0aG9kIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljIG9iamVjdCBpcworICAgYW4gaW50ZWdlciB0eXBlLiAgTXVzdCByZXR1cm4gYW4gaW50ZWdlci4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIEluIG9yZGVyIHRvIGhhdmUgYSBjb2hlcmVudCBpbnRlZ2VyIHR5cGUgY2xhc3MsIHdoZW4gOm1ldGg6YF9faW5kZXhfX2AgaXMKKyAgICAgIGRlZmluZWQgOm1ldGg6YF9faW50X19gIHNob3VsZCBhbHNvIGJlIGRlZmluZWQsIGFuZCBib3RoIHNob3VsZCByZXR1cm4KKyAgICAgIHRoZSBzYW1lIHZhbHVlLgogCiAKIC4uIF9jb250ZXh0LW1hbmFnZXJzOgpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLnJzdAppbmRleCA4MmUzN2EyLi42NjRkNzM2IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLnJzdApAQCAtMzEsMTEgKzMxLDExIEBACiBBIDpkZm46YGJsb2NrYCBpcyBhIHBpZWNlIG9mIFB5dGhvbiBwcm9ncmFtIHRleHQgdGhhdCBpcyBleGVjdXRlZCBhcyBhIHVuaXQuCiBUaGUgZm9sbG93aW5nIGFyZSBibG9ja3M6IGEgbW9kdWxlLCBhIGZ1bmN0aW9uIGJvZHksIGFuZCBhIGNsYXNzIGRlZmluaXRpb24uCiBFYWNoIGNvbW1hbmQgdHlwZWQgaW50ZXJhY3RpdmVseSBpcyBhIGJsb2NrLiAgQSBzY3JpcHQgZmlsZSAoYSBmaWxlIGdpdmVuIGFzCi1zdGFuZGFyZCBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIgb3Igc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUKLXRoZSBmaXJzdCBhcmd1bWVudCkgaXMgYSBjb2RlIGJsb2NrLiAgQSBzY3JpcHQgY29tbWFuZCAoYSBjb21tYW5kIHNwZWNpZmllZCBvbgotdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZSB3aXRoIHRoZSAnKiotYyoqJyBvcHRpb24pIGlzIGEgY29kZSBibG9jay4gIFRoZQotc3RyaW5nIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIDpmdW5jOmBldmFsYCBhbmQgOmZ1bmM6YGV4ZWNgCi1pcyBhIGNvZGUgYmxvY2suCitzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIgb3Igc3BlY2lmaWVkIGFzIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIHRoZQoraW50ZXJwcmV0ZXIpIGlzIGEgY29kZSBibG9jay4gIEEgc2NyaXB0IGNvbW1hbmQgKGEgY29tbWFuZCBzcGVjaWZpZWQgb24gdGhlCitpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgd2l0aCB0aGUgJyoqLWMqKicgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nCithcmd1bWVudCBwYXNzZWQgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyA6ZnVuYzpgZXZhbGAgYW5kIDpmdW5jOmBleGVjYCBpcyBhCitjb2RlIGJsb2NrLgogCiAuLiBpbmRleDo6IHBhaXI6IGV4ZWN1dGlvbjsgZnJhbWUKIApAQCAtNzcsNyArNzcsNyBAQAogICAgc2luZ2xlOiBVbmJvdW5kTG9jYWxFcnJvcgogCiBXaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhIDpleGM6YE5hbWVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIElmIHRoZQotbmFtZSByZWZlcnMgdG8gYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGhhcyBub3QgYmVlbiBib3VuZCwgYQorbmFtZSByZWZlcnMgdG8gYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGhhcyBub3QgYmVlbiBib3VuZCwgYW4KIDpleGM6YFVuYm91bmRMb2NhbEVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLiAgOmV4YzpgVW5ib3VuZExvY2FsRXJyb3JgIGlzIGEKIHN1YmNsYXNzIG9mIDpleGM6YE5hbWVFcnJvcmAuCiAKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMucnN0IGIvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKaW5kZXggMDZiYWJhMC4uMmI4MTUyMiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKQEAgLTI5LDcgKzI5LDcgQEAKIAogV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlICJ0aGUgbnVtZXJpYwogYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoaXMgbWVhbnMgdGhhdCB0aGUgb3BlcmF0b3IKLWltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyB0aGF0IHdheToKK2ltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyBhcyBmb2xsb3dzOgogCiAqIElmIGVpdGhlciBhcmd1bWVudCBpcyBhIGNvbXBsZXggbnVtYmVyLCB0aGUgb3RoZXIgaXMgY29udmVydGVkIHRvIGNvbXBsZXg7CiAKQEAgLTM4LDggKzM4LDkgQEAKIAogKiBvdGhlcndpc2UsIGJvdGggbXVzdCBiZSBpbnRlZ2VycyBhbmQgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuCiAKLVNvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGxlZnQgYXJndW1lbnQKLXRvIHRoZSAnJScgb3BlcmF0b3IpLiAgRXh0ZW5zaW9ucyBtdXN0IGRlZmluZSB0aGVpciBvd24gY29udmVyc2lvbiBiZWhhdmlvci4KK1NvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGFzIGEgbGVmdAorYXJndW1lbnQgdG8gdGhlICclJyBvcGVyYXRvcikuICBFeHRlbnNpb25zIG11c3QgZGVmaW5lIHRoZWlyIG93biBjb252ZXJzaW9uCitiZWhhdmlvci4KIAogCiAuLiBfYXRvbXM6CkBAIC0xODMsNyArMTg0LDcgQEAKIGVhY2ggdGltZSB0aGUgaW5uZXJtb3N0IGJsb2NrIGlzIHJlYWNoZWQuCiAKIE5vdGUgdGhhdCB0aGUgY29tcHJlaGVuc2lvbiBpcyBleGVjdXRlZCBpbiBhIHNlcGFyYXRlIHNjb3BlLCBzbyBuYW1lcyBhc3NpZ25lZAotdG8gaW4gdGhlIHRhcmdldCBsaXN0IGRvbid0ICJsZWFrIiBpbiB0aGUgZW5jbG9zaW5nIHNjb3BlLgordG8gaW4gdGhlIHRhcmdldCBsaXN0IGRvbid0ICJsZWFrIiBpbnRvIHRoZSBlbmNsb3Npbmcgc2NvcGUuCiAKIAogLi4gX2xpc3RzOgpAQCAtMjkzLDcgKzI5NCw3IEBACiBicmFja2V0cyBvciBjdXJseSBicmFjZXMuCiAKIFZhcmlhYmxlcyB1c2VkIGluIHRoZSBnZW5lcmF0b3IgZXhwcmVzc2lvbiBhcmUgZXZhbHVhdGVkIGxhemlseSB3aGVuIHRoZQotOm1ldGg6YH5nZW5lcmF0b3IuX19uZXh0X19gIG1ldGhvZCBpcyBjYWxsZWQgZm9yIGdlbmVyYXRvciBvYmplY3QgKGluIHRoZSBzYW1lCis6bWV0aDpgfmdlbmVyYXRvci5fX25leHRfX2AgbWV0aG9kIGlzIGNhbGxlZCBmb3IgdGhlIGdlbmVyYXRvciBvYmplY3QgKGluIHRoZSBzYW1lCiBmYXNoaW9uIGFzIG5vcm1hbCBnZW5lcmF0b3JzKS4gIEhvd2V2ZXIsIHRoZSBsZWZ0bW9zdCA6a2V5d29yZDpgZm9yYCBjbGF1c2UgaXMKIGltbWVkaWF0ZWx5IGV2YWx1YXRlZCwgc28gdGhhdCBhbiBlcnJvciBwcm9kdWNlZCBieSBpdCBjYW4gYmUgc2VlbiBiZWZvcmUgYW55CiBvdGhlciBwb3NzaWJsZSBlcnJvciBpbiB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIGdlbmVyYXRvciBleHByZXNzaW9uLgpAQCAtMzAyLDcgKzMwMyw3IEBACiByYW5nZSgxMCkgZm9yIHkgaW4gYmFyKHgpKWBgLgogCiBUaGUgcGFyZW50aGVzZXMgY2FuIGJlIG9taXR0ZWQgb24gY2FsbHMgd2l0aCBvbmx5IG9uZSBhcmd1bWVudC4gIFNlZSBzZWN0aW9uCi06cmVmOmBjYWxsc2AgZm9yIHRoZSBkZXRhaWwuCis6cmVmOmBjYWxsc2AgZm9yIGRldGFpbHMuCiAKIAogLi4gX3lpZWxkZXhwcjoKQEAgLTMyNywxMiArMzI4LDEyIEBACiBnZW5lcmF0b3IuICBUaGF0IGdlbmVyYXRvciB0aGVuIGNvbnRyb2xzIHRoZSBleGVjdXRpb24gb2YgYSBnZW5lcmF0b3IgZnVuY3Rpb24uCiBUaGUgZXhlY3V0aW9uIHN0YXJ0cyB3aGVuIG9uZSBvZiB0aGUgZ2VuZXJhdG9yJ3MgbWV0aG9kcyBpcyBjYWxsZWQuICBBdCB0aGF0CiB0aW1lLCB0aGUgZXhlY3V0aW9uIHByb2NlZWRzIHRvIHRoZSBmaXJzdCB5aWVsZCBleHByZXNzaW9uLCB3aGVyZSBpdCBpcwotc3VzcGVuZGVkIGFnYWluLCByZXR1cm5pbmcgdGhlIHZhbHVlIG9mIDp0b2tlbjpgZXhwcmVzc2lvbl9saXN0YCB0byBnZW5lcmF0b3Incworc3VzcGVuZGVkIGFnYWluLCByZXR1cm5pbmcgdGhlIHZhbHVlIG9mIDp0b2tlbjpgZXhwcmVzc2lvbl9saXN0YCB0byB0aGUgZ2VuZXJhdG9yJ3MKIGNhbGxlci4gIEJ5IHN1c3BlbmRlZCwgd2UgbWVhbiB0aGF0IGFsbCBsb2NhbCBzdGF0ZSBpcyByZXRhaW5lZCwgaW5jbHVkaW5nIHRoZQogY3VycmVudCBiaW5kaW5ncyBvZiBsb2NhbCB2YXJpYWJsZXMsIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyLCBhbmQgdGhlIGludGVybmFsCiBldmFsdWF0aW9uIHN0YWNrLiAgV2hlbiB0aGUgZXhlY3V0aW9uIGlzIHJlc3VtZWQgYnkgY2FsbGluZyBvbmUgb2YgdGhlCiBnZW5lcmF0b3IncyBtZXRob2RzLCB0aGUgZnVuY3Rpb24gY2FuIHByb2NlZWQgZXhhY3RseSBhcyBpZiB0aGUgeWllbGQgZXhwcmVzc2lvbgotd2FzIGp1c3QgYW5vdGhlciBleHRlcm5hbCBjYWxsLiAgVGhlIHZhbHVlIG9mIHRoZSB5aWVsZCBleHByZXNzaW9uIGFmdGVyCit3ZXJlIGp1c3QgYW5vdGhlciBleHRlcm5hbCBjYWxsLiAgVGhlIHZhbHVlIG9mIHRoZSB5aWVsZCBleHByZXNzaW9uIGFmdGVyCiByZXN1bWluZyBkZXBlbmRzIG9uIHRoZSBtZXRob2Qgd2hpY2ggcmVzdW1lZCB0aGUgZXhlY3V0aW9uLiAgSWYKIDptZXRoOmB+Z2VuZXJhdG9yLl9fbmV4dF9fYCBpcyB1c2VkICh0eXBpY2FsbHkgdmlhIGVpdGhlciBhIDprZXl3b3JkOmBmb3JgIG9yCiB0aGUgOmZ1bmM6YG5leHRgIGJ1aWx0aW4pIHRoZW4gdGhlIHJlc3VsdCBpcyA6Y29uc3Q6YE5vbmVgLiAgT3RoZXJ3aXNlLCBpZgpAQCAtMzQ0LDEwICszNDUsMTAgQEAKIEFsbCBvZiB0aGlzIG1ha2VzIGdlbmVyYXRvciBmdW5jdGlvbnMgcXVpdGUgc2ltaWxhciB0byBjb3JvdXRpbmVzOyB0aGV5IHlpZWxkCiBtdWx0aXBsZSB0aW1lcywgdGhleSBoYXZlIG1vcmUgdGhhbiBvbmUgZW50cnkgcG9pbnQgYW5kIHRoZWlyIGV4ZWN1dGlvbiBjYW4gYmUKIHN1c3BlbmRlZC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBhIGdlbmVyYXRvciBmdW5jdGlvbiBjYW5ub3QgY29udHJvbAotd2hlcmUgc2hvdWxkIHRoZSBleGVjdXRpb24gY29udGludWUgYWZ0ZXIgaXQgeWllbGRzOyB0aGUgY29udHJvbCBpcyBhbHdheXMKK3doZXJlIHRoZSBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIGFmdGVyIGl0IHlpZWxkczsgdGhlIGNvbnRyb2wgaXMgYWx3YXlzCiB0cmFuc2ZlcnJlZCB0byB0aGUgZ2VuZXJhdG9yJ3MgY2FsbGVyLgogCi15aWVsZCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiB0aGUgOmtleXdvcmQ6YHRyeWAgY2xhdXNlIG9mIGEgOmtleXdvcmQ6YHRyeWAKK1lpZWxkIGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkIGluIHRoZSA6a2V5d29yZDpgdHJ5YCBjbGF1c2Ugb2YgYSA6a2V5d29yZDpgdHJ5YAogLi4uICA6a2V5d29yZDpgZmluYWxseWAgY29uc3RydWN0LiAgSWYgdGhlIGdlbmVyYXRvciBpcyBub3QgcmVzdW1lZCBiZWZvcmUgaXQgaXMKIGZpbmFsaXplZCAoYnkgcmVhY2hpbmcgYSB6ZXJvIHJlZmVyZW5jZSBjb3VudCBvciBieSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCksCiB0aGUgZ2VuZXJhdG9yLWl0ZXJhdG9yJ3MgOm1ldGg6YH5nZW5lcmF0b3IuY2xvc2VgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCwKQEAgLTM5OSw3ICs0MDAsNiBAQAogaXMgYWxyZWFkeSBleGVjdXRpbmcgcmFpc2VzIGEgOmV4YzpgVmFsdWVFcnJvcmAgZXhjZXB0aW9uLgogCiAuLiBpbmRleDo6IGV4Y2VwdGlvbjogU3RvcEl0ZXJhdGlvbgotLi4gY2xhc3M6OiBnZW5lcmF0b3IKIAogCiAuLiBtZXRob2Q6OiBnZW5lcmF0b3IuX19uZXh0X18oKQpAQCAtNDA5LDcgKzQwOSw3IEBACiAgICA6bWV0aDpgfmdlbmVyYXRvci5fX25leHRfX2AgbWV0aG9kLCB0aGUgY3VycmVudCB5aWVsZCBleHByZXNzaW9uIGFsd2F5cwogICAgZXZhbHVhdGVzIHRvIDpjb25zdDpgTm9uZWAuICBUaGUgZXhlY3V0aW9uIHRoZW4gY29udGludWVzIHRvIHRoZSBuZXh0IHlpZWxkCiAgICBleHByZXNzaW9uLCB3aGVyZSB0aGUgZ2VuZXJhdG9yIGlzIHN1c3BlbmRlZCBhZ2FpbiwgYW5kIHRoZSB2YWx1ZSBvZiB0aGUKLSAgIDp0b2tlbjpgZXhwcmVzc2lvbl9saXN0YCBpcyByZXR1cm5lZCB0byA6bWV0aDpgbmV4dGAncyBjYWxsZXIuICBJZiB0aGUKKyAgIDp0b2tlbjpgZXhwcmVzc2lvbl9saXN0YCBpcyByZXR1cm5lZCB0byA6bWV0aDpgX19uZXh0X19gJ3MgY2FsbGVyLiAgSWYgdGhlCiAgICBnZW5lcmF0b3IgZXhpdHMgd2l0aG91dCB5aWVsZGluZyBhbm90aGVyIHZhbHVlLCBhIDpleGM6YFN0b3BJdGVyYXRpb25gCiAgICBleGNlcHRpb24gaXMgcmFpc2VkLgogCkBAIC00MzAsNyArNDMwLDcgQEAKIAogLi4gbWV0aG9kOjogZ2VuZXJhdG9yLnRocm93KHR5cGVbLCB2YWx1ZVssIHRyYWNlYmFja11dKQogCi0gICBSYWlzZXMgYW4gZXhjZXB0aW9uIG9mIHR5cGUgYGB0eXBlYGAgYXQgdGhlIHBvaW50IHdoZXJlIGdlbmVyYXRvciB3YXMgcGF1c2VkLAorICAgUmFpc2VzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIGBgdHlwZWBgIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZ2VuZXJhdG9yIHdhcyBwYXVzZWQsCiAgICBhbmQgcmV0dXJucyB0aGUgbmV4dCB2YWx1ZSB5aWVsZGVkIGJ5IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24uICBJZiB0aGUgZ2VuZXJhdG9yCiAgICBleGl0cyB3aXRob3V0IHlpZWxkaW5nIGFub3RoZXIgdmFsdWUsIGEgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgZXhjZXB0aW9uIGlzCiAgICByYWlzZWQuICBJZiB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGRvZXMgbm90IGNhdGNoIHRoZSBwYXNzZWQtaW4gZXhjZXB0aW9uLCBvcgpAQCAtNDQ5LDggKzQ0OSw2IEBACiAgICBvdGhlciBleGNlcHRpb24sIGl0IGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGNhbGxlci4gIDptZXRoOmBjbG9zZWAgZG9lcyBub3RoaW5nCiAgICBpZiB0aGUgZ2VuZXJhdG9yIGhhcyBhbHJlYWR5IGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uIG9yIG5vcm1hbCBleGl0LgogCi0uLiBjbGFzczo6IC4KLQogLi4gaW5kZXg6OiBzaW5nbGU6IHlpZWxkOyBleGFtcGxlcwogCiBFeGFtcGxlcwpAQCAtNTIwLDExICs1MTgsMTEgQEAKIAogVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3Qgb2YgYSB0eXBlIHRoYXQgc3VwcG9ydHMgYXR0cmlidXRlCiByZWZlcmVuY2VzLCB3aGljaCBtb3N0IG9iamVjdHMgZG8uICBUaGlzIG9iamVjdCBpcyB0aGVuIGFza2VkIHRvIHByb2R1Y2UgdGhlCi1hdHRyaWJ1dGUgd2hvc2UgbmFtZSBpcyB0aGUgaWRlbnRpZmllciAod2hpY2ggY2FuIGJlIGN1c3RvbWl6ZWQgYnkgb3ZlcnJpZGluZwotdGhlIDptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kKS4gIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBhdmFpbGFibGUsIHRoZQotZXhjZXB0aW9uIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBpcyByYWlzZWQuICBPdGhlcndpc2UsIHRoZSB0eXBlIGFuZCB2YWx1ZSBvZiB0aGUKLW9iamVjdCBwcm9kdWNlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvYmplY3QuICBNdWx0aXBsZSBldmFsdWF0aW9ucyBvZiB0aGUgc2FtZQotYXR0cmlidXRlIHJlZmVyZW5jZSBtYXkgeWllbGQgZGlmZmVyZW50IG9iamVjdHMuCithdHRyaWJ1dGUgd2hvc2UgbmFtZSBpcyB0aGUgaWRlbnRpZmllci4gIFRoaXMgcHJvZHVjdGlvbiBjYW4gYmUgY3VzdG9taXplZCBieQorb3ZlcnJpZGluZyB0aGUgOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QuICBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3QgYXZhaWxhYmxlLAordGhlIGV4Y2VwdGlvbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgdHlwZSBhbmQgdmFsdWUgb2YKK3RoZSBvYmplY3QgcHJvZHVjZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb2JqZWN0LiAgTXVsdGlwbGUgZXZhbHVhdGlvbnMgb2YgdGhlCitzYW1lIGF0dHJpYnV0ZSByZWZlcmVuY2UgbWF5IHlpZWxkIGRpZmZlcmVudCBvYmplY3RzLgogCiAKIC4uIF9zdWJzY3JpcHRpb25zOgpAQCAtNTQ5LDkgKzU0Nyw5IEBACiAuLiBwcm9kdWN0aW9ubGlzdDo6CiAgICBzdWJzY3JpcHRpb246IGBwcmltYXJ5YCAiWyIgYGV4cHJlc3Npb25fbGlzdGAgIl0iCiAKLVRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IHRoYXQgc3VwcG9ydHMgc3Vic2NyaXB0aW9uLCBlLmcuIGEgbGlzdAotb3IgZGljdGlvbmFyeS4gIFVzZXItZGVmaW5lZCBvYmplY3RzIGNhbiBzdXBwb3J0IHN1YnNjcmlwdGlvbiBieSBkZWZpbmluZyBhCi06bWV0aDpgX19nZXRpdGVtX19gIG1ldGhvZC4KK1RoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IHRoYXQgc3VwcG9ydHMgc3Vic2NyaXB0aW9uIChsaXN0cyBvcgorZGljdGlvbmFyaWVzIGZvciBleGFtcGxlKS4gIFVzZXItZGVmaW5lZCBvYmplY3RzIGNhbiBzdXBwb3J0IHN1YnNjcmlwdGlvbiBieQorZGVmaW5pbmcgYSA6bWV0aDpgX19nZXRpdGVtX19gIG1ldGhvZC4KIAogRm9yIGJ1aWx0LWluIG9iamVjdHMsIHRoZXJlIGFyZSB0d28gdHlwZXMgb2Ygb2JqZWN0cyB0aGF0IHN1cHBvcnQgc3Vic2NyaXB0aW9uOgogCkBAIC02NjAsOCArNjU4LDggQEAKICAgIGtleXdvcmRfYXJndW1lbnRzOiBga2V5d29yZF9pdGVtYCAoIiwiIGBrZXl3b3JkX2l0ZW1gKSoKICAgIGtleXdvcmRfaXRlbTogYGlkZW50aWZpZXJgICI9IiBgZXhwcmVzc2lvbmAKIAotQSB0cmFpbGluZyBjb21tYSBtYXkgYmUgcHJlc2VudCBhZnRlciB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMgYnV0Ci1kb2VzIG5vdCBhZmZlY3QgdGhlIHNlbWFudGljcy4KK0FuIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cworYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgc2VtYW50aWNzLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IHBhcmFtZXRlcjsgY2FsbCBzZW1hbnRpY3MKQEAgLTk0Myw5ICs5NDEsOSBAQAogLi4gaW5kZXg6OiBzaW5nbGU6IGFkZGl0aW9uCiAKIFRoZSBgYCtgYCAoYWRkaXRpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgc3VtIG9mIGl0cyBhcmd1bWVudHMuICBUaGUgYXJndW1lbnRzCi1tdXN0IGVpdGhlciBib3RoIGJlIG51bWJlcnMgb3IgYm90aCBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZS4gIEluIHRoZSBmb3JtZXIKLWNhc2UsIHRoZSBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSBhbmQgdGhlbiBhZGRlZCB0b2dldGhlci4gIEluCi10aGUgbGF0dGVyIGNhc2UsIHRoZSBzZXF1ZW5jZXMgYXJlIGNvbmNhdGVuYXRlZC4KK211c3QgZWl0aGVyIGJvdGggYmUgbnVtYmVycyBvciBib3RoIGJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLiAgSW4gdGhlCitmb3JtZXIgY2FzZSwgdGhlIG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlIGFuZCB0aGVuIGFkZGVkIHRvZ2V0aGVyLgorSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgc2VxdWVuY2VzIGFyZSBjb25jYXRlbmF0ZWQuCiAKIC4uIGluZGV4Ojogc2luZ2xlOiBzdWJ0cmFjdGlvbgogCkBAIC0xMTA2LDcgKzExMDQsNyBAQAogICBhbm90aGVyIG9uZSBpcyBtYWRlIGFyYml0cmFyaWx5IGJ1dCBjb25zaXN0ZW50bHkgd2l0aGluIG9uZSBleGVjdXRpb24gb2YgYQogICBwcm9ncmFtLgogCi1Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIGRpZmZlcmluZyB0eXBlcyBkZXBlbmRzIG9uIHdoZXRoZXIgZWl0aGVyIG9mIHRoZQorQ29tcGFyaXNvbiBvZiBvYmplY3RzIG9mIGRpZmZlcmluZyB0eXBlcyBkZXBlbmRzIG9uIHdoZXRoZXIgZWl0aGVyIG9mIHRoZQogdHlwZXMgcHJvdmlkZSBleHBsaWNpdCBzdXBwb3J0IGZvciB0aGUgY29tcGFyaXNvbi4gIE1vc3QgbnVtZXJpYyB0eXBlcyBjYW4gYmUKIGNvbXBhcmVkIHdpdGggb25lIGFub3RoZXIuICBXaGVuIGNyb3NzLXR5cGUgY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUKIGNvbXBhcmlzb24gbWV0aG9kIHJldHVybnMgYGBOb3RJbXBsZW1lbnRlZGBgLgpAQCAtMTExNiw3ICsxMTE0LDcgQEAKIFRoZSBvcGVyYXRvcnMgOmtleXdvcmQ6YGluYCBhbmQgOmtleXdvcmQ6YG5vdCBpbmAgdGVzdCBmb3IgbWVtYmVyc2hpcC4gIGBgeCBpbgogc2BgIGV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiAqcyosIGFuZCBmYWxzZSBvdGhlcndpc2UuICBgYHggbm90CiBpbiBzYGAgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgYGB4IGluIHNgYC4gIEFsbCBidWlsdC1pbiBzZXF1ZW5jZXMgYW5kIHNldCB0eXBlcwotc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoIDprZXl3b3JkOmBpbmAgdGVzdHMgd2hldGhlciBhIHRoZQorc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoIDprZXl3b3JkOmBpbmAgdGVzdHMgd2hldGhlciB0aGUKIGRpY3Rpb25hcnkgaGFzIGEgZ2l2ZW4ga2V5LiBGb3IgY29udGFpbmVyIHR5cGVzIHN1Y2ggYXMgbGlzdCwgdHVwbGUsIHNldCwKIGZyb3plbnNldCwgZGljdCwgb3IgY29sbGVjdGlvbnMuZGVxdWUsIHRoZSBleHByZXNzaW9uIGBgeCBpbiB5YGAgaXMgZXF1aXZhbGVudAogdG8gYGBhbnkoeCBpcyBlIG9yIHggPT0gZSBmb3IgZSBpbiB5KWBgLgpAQCAtMTIwMiw5ICsxMjAwLDkgQEAKIHRoZXkgcmV0dXJuIHRvIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAsIGJ1dCByYXRoZXIgcmV0dXJuIHRoZSBsYXN0IGV2YWx1YXRlZAogYXJndW1lbnQuICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwsIGUuZy4sIGlmIGBgc2BgIGlzIGEgc3RyaW5nIHRoYXQgc2hvdWxkIGJlCiByZXBsYWNlZCBieSBhIGRlZmF1bHQgdmFsdWUgaWYgaXQgaXMgZW1wdHksIHRoZSBleHByZXNzaW9uIGBgcyBvciAnZm9vJ2BgIHlpZWxkcwotdGhlIGRlc2lyZWQgdmFsdWUuICBCZWNhdXNlIDprZXl3b3JkOmBub3RgIGhhcyB0byBpbnZlbnQgYSB2YWx1ZSBhbnl3YXksIGl0IGRvZXMKLW5vdCBib3RoZXIgdG8gcmV0dXJuIGEgdmFsdWUgb2YgdGhlIHNhbWUgdHlwZSBhcyBpdHMgYXJndW1lbnQsIHNvIGUuZy4sIGBgbm90Ci0nZm9vJ2BgIHlpZWxkcyBgYEZhbHNlYGAsIG5vdCBgYCcnYGAuKQordGhlIGRlc2lyZWQgdmFsdWUuICBCZWNhdXNlIDprZXl3b3JkOmBub3RgIGhhcyB0byBjcmVhdGUgYSBuZXcgdmFsdWUsIGl0CityZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGl0cyBhcmd1bWVudAorKGZvciBleGFtcGxlLCBgYG5vdCAnZm9vJ2BgIHByb2R1Y2VzIGBgRmFsc2VgYCByYXRoZXIgdGhhbiBgYCcnYGAuKQogCiAKIENvbmRpdGlvbmFsIGV4cHJlc3Npb25zCkBAIC0xMjIyLDggKzEyMjAsOCBAQAogQ29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgKHNvbWV0aW1lcyBjYWxsZWQgYSAidGVybmFyeSBvcGVyYXRvciIpIGhhdmUgdGhlIGxvd2VzdAogcHJpb3JpdHkgb2YgYWxsIFB5dGhvbiBvcGVyYXRpb25zLgogCi1UaGUgZXhwcmVzc2lvbiBgYHggaWYgQyBlbHNlIHlgYCBmaXJzdCBldmFsdWF0ZXMgdGhlIGNvbmRpdGlvbiwgKkMqICgqbm90KiAqeCopOwotaWYgKkMqIGlzIHRydWUsICp4KiBpcyBldmFsdWF0ZWQgYW5kIGl0cyB2YWx1ZSBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCAqeSogaXMKK1RoZSBleHByZXNzaW9uIGBgeCBpZiBDIGVsc2UgeWBgIGZpcnN0IGV2YWx1YXRlcyB0aGUgY29uZGl0aW9uLCAqQyogcmF0aGVyIHRoYW4gKngqLgorSWYgKkMqIGlzIHRydWUsICp4KiBpcyBldmFsdWF0ZWQgYW5kIGl0cyB2YWx1ZSBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCAqeSogaXMKIGV2YWx1YXRlZCBhbmQgaXRzIHZhbHVlIGlzIHJldHVybmVkLgogCiBTZWUgOnBlcDpgMzA4YCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zLgpAQCAtMTI0NCwxMCArMTI0Miw5IEBACiAgICBsYW1iZGFfZXhwcjogImxhbWJkYSIgW2BwYXJhbWV0ZXJfbGlzdGBdOiBgZXhwcmVzc2lvbmAKICAgIGxhbWJkYV9leHByX25vY29uZDogImxhbWJkYSIgW2BwYXJhbWV0ZXJfbGlzdGBdOiBgZXhwcmVzc2lvbl9ub2NvbmRgCiAKLUxhbWJkYSBleHByZXNzaW9ucyAoc29tZXRpbWVzIGNhbGxlZCBsYW1iZGEgZm9ybXMpIGhhdmUgdGhlIHNhbWUgc3ludGFjdGljIHBvc2l0aW9uIGFzCi1leHByZXNzaW9ucy4gIFRoZXkgYXJlIGEgc2hvcnRoYW5kIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zOyB0aGUgZXhwcmVzc2lvbgotYGBsYW1iZGEgYXJndW1lbnRzOiBleHByZXNzaW9uYGAgeWllbGRzIGEgZnVuY3Rpb24gb2JqZWN0LiAgVGhlIHVubmFtZWQgb2JqZWN0Ci1iZWhhdmVzIGxpa2UgYSBmdW5jdGlvbiBvYmplY3QgZGVmaW5lZCB3aXRoIDo6CitMYW1iZGEgZXhwcmVzc2lvbnMgKHNvbWV0aW1lcyBjYWxsZWQgbGFtYmRhIGZvcm1zKSBhcmUgdXNlZCB0byBjcmVhdGUgYW5vbnltb3VzCitmdW5jdGlvbnMuIFRoZSBleHByZXNzaW9uIGBgbGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbmBgIHlpZWxkcyBhIGZ1bmN0aW9uCitvYmplY3QuICBUaGUgdW5uYW1lZCBvYmplY3QgYmVoYXZlcyBsaWtlIGEgZnVuY3Rpb24gb2JqZWN0IGRlZmluZWQgd2l0aCA6OgogCiAgICBkZWYgPGxhbWJkYT4oYXJndW1lbnRzKToKICAgICAgICByZXR1cm4gZXhwcmVzc2lvbgpAQCAtMTMxMCwxMyArMTMwNywxNSBAQAogCiAuLiBpbmRleDo6IHBhaXI6IG9wZXJhdG9yOyBwcmVjZWRlbmNlCiAKLVRoZSBmb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMgaW4gUHl0aG9uLCBmcm9tIGxvd2VzdAorVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlIGluIFB5dGhvbiwgZnJvbSBsb3dlc3QKIHByZWNlZGVuY2UgKGxlYXN0IGJpbmRpbmcpIHRvIGhpZ2hlc3QgcHJlY2VkZW5jZSAobW9zdCBiaW5kaW5nKS4gIE9wZXJhdG9ycyBpbgogdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZS4gIFVubGVzcyB0aGUgc3ludGF4IGlzIGV4cGxpY2l0bHkgZ2l2ZW4sCiBvcGVyYXRvcnMgYXJlIGJpbmFyeS4gIE9wZXJhdG9ycyBpbiB0aGUgc2FtZSBib3ggZ3JvdXAgbGVmdCB0byByaWdodCAoZXhjZXB0IGZvcgotY29tcGFyaXNvbnMsIGluY2x1ZGluZyB0ZXN0cywgd2hpY2ggYWxsIGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZSBhbmQgY2hhaW4gZnJvbQotbGVmdCB0byByaWdodCAtLS0gc2VlIHNlY3Rpb24gOnJlZjpgY29tcGFyaXNvbnNgIC0tLSBhbmQgZXhwb25lbnRpYXRpb24sIHdoaWNoCi1ncm91cHMgZnJvbSByaWdodCB0byBsZWZ0KS4KK2V4cG9uZW50aWF0aW9uLCB3aGljaCBncm91cHMgZnJvbSByaWdodCB0byBsZWZ0KS4KKworTm90ZSB0aGF0IGNvbXBhcmlzb25zLCBtZW1iZXJzaGlwIHRlc3RzLCBhbmQgaWRlbnRpdHkgdGVzdHMsIGFsbCBoYXZlIHRoZSBzYW1lCitwcmVjZWRlbmNlIGFuZCBoYXZlIGEgbGVmdC10by1yaWdodCBjaGFpbmluZyBmZWF0dXJlIGFzIGRlc2NyaWJlZCBpbiB0aGUKKzpyZWY6YGNvbXBhcmlzb25zYCBzZWN0aW9uLgogCiAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0IGIvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CmluZGV4IGViNDk3YTEuLjY0NTgwMmQgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKQEAgLTIxMCw2ICsyMTAsNyBAQAogLi4gaW5kZXg6OgogICAgIHNpbmdsZTogZmluZGVyCiAgICAgc2luZ2xlOiBsb2FkZXIKKyAgICBzaW5nbGU6IG1vZHVsZSBzcGVjCiAKIElmIHRoZSBuYW1lZCBtb2R1bGUgaXMgbm90IGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZW4gUHl0aG9uJ3MgaW1wb3J0CiBwcm90b2NvbCBpcyBpbnZva2VkIHRvIGZpbmQgYW5kIGxvYWQgdGhlIG1vZHVsZS4gIFRoaXMgcHJvdG9jb2wgY29uc2lzdHMgb2YKQEAgLTIzMCwxMyArMjMxLDE3IEBACiByYW5nZSBhbmQgc2NvcGUgb2YgbW9kdWxlIHNlYXJjaGluZy4KIAogRmluZGVycyBkbyBub3QgYWN0dWFsbHkgbG9hZCBtb2R1bGVzLiAgSWYgdGhleSBjYW4gZmluZCB0aGUgbmFtZWQgbW9kdWxlLCB0aGV5Ci1yZXR1cm4gYSA6dGVybTpgbG9hZGVyYCwgd2hpY2ggdGhlIGltcG9ydCBtYWNoaW5lcnkgdGhlbiBpbnZva2VzIHRvIGxvYWQgdGhlCi1tb2R1bGUgYW5kIGNyZWF0ZSB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgb2JqZWN0LgorcmV0dXJuIGEgOmRmbjpgbW9kdWxlIHNwZWNgLCBhbiBlbmNhcHN1bGF0aW9uIG9mIHRoZSBtb2R1bGUncyBpbXBvcnQtcmVsYXRlZAoraW5mb3JtYXRpb24sIHdoaWNoIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRoZW4gdXNlcyB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4KIAogVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgcHJvdG9jb2wgZm9yIGZpbmRlcnMgYW5kIGxvYWRlcnMgaW4gbW9yZQogZGV0YWlsLCBpbmNsdWRpbmcgaG93IHlvdSBjYW4gY3JlYXRlIGFuZCByZWdpc3RlciBuZXcgb25lcyB0byBleHRlbmQgdGhlCiBpbXBvcnQgbWFjaGluZXJ5LgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uLCBmaW5kZXJzIHJldHVybmVkIDp0ZXJtOmBsb2FkZXJzIDxsb2FkZXI+YAorICAgZGlyZWN0bHksIHdoZXJlYXMgbm93IHRoZXkgcmV0dXJuIG1vZHVsZSBzcGVjcyB3aGljaCAqY29udGFpbiogbG9hZGVycy4KKyAgIExvYWRlcnMgYXJlIHN0aWxsIHVzZWQgZHVyaW5nIGltcG9ydCBidXQgaGF2ZSBmZXdlciByZXNwb25zaWJpbGl0aWVzLgogCiBJbXBvcnQgaG9va3MKIC0tLS0tLS0tLS0tLQpAQCAtMjcwLDQxICsyNzUsNDMgQEAKIAogLi4gaW5kZXg6OgogICAgIHNpbmdsZTogc3lzLm1ldGFfcGF0aAotICAgIHBhaXI6IGZpbmRlcjsgZmluZF9tb2R1bGUKLSAgICBwYWlyOiBmaW5kZXI7IGZpbmRfbG9hZGVyCisgICAgcGFpcjogZmluZGVyOyBmaW5kX3NwZWMKIAogV2hlbiB0aGUgbmFtZWQgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBQeXRob24gbmV4dAogc2VhcmNoZXMgOmRhdGE6YHN5cy5tZXRhX3BhdGhgLCB3aGljaCBjb250YWlucyBhIGxpc3Qgb2YgbWV0YSBwYXRoIGZpbmRlcgogb2JqZWN0cy4gIFRoZXNlIGZpbmRlcnMgYXJlIHF1ZXJpZWQgaW4gb3JkZXIgdG8gc2VlIGlmIHRoZXkga25vdyBob3cgdG8gaGFuZGxlCiB0aGUgbmFtZWQgbW9kdWxlLiAgTWV0YSBwYXRoIGZpbmRlcnMgbXVzdCBpbXBsZW1lbnQgYSBtZXRob2QgY2FsbGVkCi06bWV0aDpgZmluZF9tb2R1bGUoKWAgd2hpY2ggdGFrZXMgdHdvIGFyZ3VtZW50cywgYSBuYW1lIGFuZCBhbiBpbXBvcnQgcGF0aC4KLVRoZSBtZXRhIHBhdGggZmluZGVyIGNhbiB1c2UgYW55IHN0cmF0ZWd5IGl0IHdhbnRzIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGNhbgotaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUgb3Igbm90LgorOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlYygpYCB3aGljaCB0YWtlcyB0aHJlZSBhcmd1bWVudHM6CithIG5hbWUsIGFuIGltcG9ydCBwYXRoLCBhbmQgKG9wdGlvbmFsbHkpIGEgdGFyZ2V0IG1vZHVsZS4gIFRoZSBtZXRhIHBhdGgKK2ZpbmRlciBjYW4gdXNlIGFueSBzdHJhdGVneSBpdCB3YW50cyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBjYW4gaGFuZGxlCit0aGUgbmFtZWQgbW9kdWxlIG9yIG5vdC4KIAogSWYgdGhlIG1ldGEgcGF0aCBmaW5kZXIga25vd3MgaG93IHRvIGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGEKLWxvYWRlciBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgorc3BlYyBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgogOmRhdGE6YHN5cy5tZXRhX3BhdGhgIHByb2Nlc3NpbmcgcmVhY2hlcyB0aGUgZW5kIG9mIGl0cyBsaXN0IHdpdGhvdXQgcmV0dXJuaW5nCi1hIGxvYWRlciwgdGhlbiBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLiAgQW55IG90aGVyIGV4Y2VwdGlvbnMgcmFpc2VkCithIHNwZWMsIHRoZW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIEFueSBvdGhlciBleGNlcHRpb25zIHJhaXNlZAogYXJlIHNpbXBseSBwcm9wYWdhdGVkIHVwLCBhYm9ydGluZyB0aGUgaW1wb3J0IHByb2Nlc3MuCiAKLVRoZSA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIG9mIG1ldGEgcGF0aCBmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3bwotYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nCi1pbXBvcnRlZCwgZm9yIGV4YW1wbGUgYGBmb28uYmFyLmJhemBgLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGF0aAotZW50cmllcyB0byB1c2UgZm9yIHRoZSBtb2R1bGUgc2VhcmNoLiAgRm9yIHRvcC1sZXZlbCBtb2R1bGVzLCB0aGUgc2Vjb25kCi1hcmd1bWVudCBpcyBgYE5vbmVgYCwgYnV0IGZvciBzdWJtb2R1bGVzIG9yIHN1YnBhY2thZ2VzLCB0aGUgc2Vjb25kCi1hcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHBhcmVudCBwYWNrYWdlJ3MgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4gSWYKLXRoZSBhcHByb3ByaWF0ZSBgYF9fcGF0aF9fYGAgYXR0cmlidXRlIGNhbm5vdCBiZSBhY2Nlc3NlZCwgYW4KLTpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCitUaGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlYygpYCBtZXRob2Qgb2YgbWV0YSBwYXRoCitmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3byBvciB0aHJlZSBhcmd1bWVudHMuICBUaGUgZmlyc3QgaXMgdGhlIGZ1bGx5CitxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkLCBmb3IgZXhhbXBsZSBgYGZvby5iYXIuYmF6YGAuCitUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXRoIGVudHJpZXMgdG8gdXNlIGZvciB0aGUgbW9kdWxlIHNlYXJjaC4gIEZvcgordG9wLWxldmVsIG1vZHVsZXMsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYGBOb25lYGAsIGJ1dCBmb3Igc3VibW9kdWxlcyBvcgorc3VicGFja2FnZXMsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJlbnQgcGFja2FnZSdzCitgYF9fcGF0aF9fYGAgYXR0cmlidXRlLiBJZiB0aGUgYXBwcm9wcmlhdGUgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZSBjYW5ub3QKK2JlIGFjY2Vzc2VkLCBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLiAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuCitleGlzdGluZyBtb2R1bGUgb2JqZWN0IHRoYXQgd2lsbCBiZSB0aGUgdGFyZ2V0IG9mIGxvYWRpbmcgbGF0ZXIuICBUaGUKK2ltcG9ydCBzeXN0ZW0gcGFzc2VzIGluIGEgdGFyZ2V0IG1vZHVsZSBvbmx5IGR1cmluZyByZWxvYWQuCiAKIFRoZSBtZXRhIHBhdGggbWF5IGJlIHRyYXZlcnNlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBzaW5nbGUgaW1wb3J0IHJlcXVlc3QuCiBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgbm9uZSBvZiB0aGUgbW9kdWxlcyBpbnZvbHZlZCBoYXMgYWxyZWFkeSBiZWVuIGNhY2hlZCwKIGltcG9ydGluZyBgYGZvby5iYXIuYmF6YGAgd2lsbCBmaXJzdCBwZXJmb3JtIGEgdG9wIGxldmVsIGltcG9ydCwgY2FsbGluZwotYGBtcGYuZmluZF9tb2R1bGUoImZvbyIsIE5vbmUpYGAgb24gZWFjaCBtZXRhIHBhdGggZmluZGVyIChgYG1wZmBgKS4gQWZ0ZXIKK2BgbXBmLmZpbmRfc3BlYygiZm9vIiwgTm9uZSwgTm9uZSlgYCBvbiBlYWNoIG1ldGEgcGF0aCBmaW5kZXIgKGBgbXBmYGApLiBBZnRlcgogYGBmb29gYCBoYXMgYmVlbiBpbXBvcnRlZCwgYGBmb28uYmFyYGAgd2lsbCBiZSBpbXBvcnRlZCBieSB0cmF2ZXJzaW5nIHRoZQogbWV0YSBwYXRoIGEgc2Vjb25kIHRpbWUsIGNhbGxpbmcKLWBgbXBmLmZpbmRfbW9kdWxlKCJmb28uYmFyIiwgZm9vLl9fcGF0aF9fKWBgLiBPbmNlIGBgZm9vLmJhcmBgIGhhcyBiZWVuCitgYG1wZi5maW5kX3NwZWMoImZvby5iYXIiLCBmb28uX19wYXRoX18sIE5vbmUpYGAuIE9uY2UgYGBmb28uYmFyYGAgaGFzIGJlZW4KIGltcG9ydGVkLCB0aGUgZmluYWwgdHJhdmVyc2FsIHdpbGwgY2FsbAotYGBtcGYuZmluZF9tb2R1bGUoImZvby5iYXIuYmF6IiwgZm9vLmJhci5fX3BhdGhfXylgYC4KK2BgbXBmLmZpbmRfc3BlYygiZm9vLmJhci5iYXoiLCBmb28uYmFyLl9fcGF0aF9fLCBOb25lKWBgLgogCiBTb21lIG1ldGEgcGF0aCBmaW5kZXJzIG9ubHkgc3VwcG9ydCB0b3AgbGV2ZWwgaW1wb3J0cy4gVGhlc2UgaW1wb3J0ZXJzIHdpbGwKIGFsd2F5cyByZXR1cm4gYGBOb25lYGAgd2hlbiBhbnl0aGluZyBvdGhlciB0aGFuIGBgTm9uZWBgIGlzIHBhc3NlZCBhcyB0aGUKQEAgLTMxNSwxMjkgKzMyMiwyMzkgQEAKIG1vZHVsZXMsIGFuZCBvbmUgdGhhdCBrbm93cyBob3cgdG8gaW1wb3J0IG1vZHVsZXMgZnJvbSBhbiA6dGVybTpgaW1wb3J0IHBhdGhgCiAoaS5lLiB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kIG9mIG1ldGEgcGF0aAorICAgZmluZGVycyByZXBsYWNlZCA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9tb2R1bGVgLCB3aGljaAorICAgaXMgbm93IGRlcHJlY2F0ZWQuICBXaGlsZSBpdCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgd2l0aG91dCBjaGFuZ2UsIHRoZQorICAgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHRyeSBpdCBvbmx5IGlmIHRoZSBmaW5kZXIgZG9lcyBub3QgaW1wbGVtZW50CisgICBgYGZpbmRfc3BlYygpYGAuCiAKLUxvYWRlcnMKKworTG9hZGluZwogPT09PT09PQogCi1JZiBhbmQgd2hlbiBhIG1vZHVsZSBsb2FkZXIgaXMgZm91bmQgaXRzCi06bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCBtZXRob2QgaXMgY2FsbGVkLCB3aXRoIGEgc2luZ2xlCi1hcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICBUaGlzIG1ldGhvZAotaGFzIHNldmVyYWwgcmVzcG9uc2liaWxpdGllcywgYW5kIHNob3VsZCByZXR1cm4gdGhlIG1vZHVsZSBvYmplY3QgaXQgaGFzCi1sb2FkZWQgWyNmbmxvXV8uICBJZiBpdCBjYW5ub3QgbG9hZCB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KLTpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCi06bWV0aDpgbG9hZF9tb2R1bGUoKWAgd2lsbCBiZSBwcm9wYWdhdGVkLgorSWYgYW5kIHdoZW4gYSBtb2R1bGUgc3BlYyBpcyBmb3VuZCwgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCB1c2UgaXQgKGFuZAordGhlIGxvYWRlciBpdCBjb250YWlucykgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuICBIZXJlIGlzIGFuIGFwcHJveGltYXRpb24KK29mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGxvYWRpbmcgcG9ydGlvbiBvZiBpbXBvcnQ6OgogCi1JbiBtYW55IGNhc2VzLCB0aGUgZmluZGVyIGFuZCBsb2FkZXIgY2FuIGJlIHRoZSBzYW1lIG9iamVjdDsgaW4gc3VjaCBjYXNlcyB0aGUKLTptZXRoOmBmaW5kZXIuZmluZF9tb2R1bGUoKWAgd291bGQganVzdCByZXR1cm4gYGBzZWxmYGAuCisgICAgbW9kdWxlID0gTm9uZQorICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lIGFuZCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgorICAgICAgICBtb2R1bGUgPSBzcGVjLmxvYWRlci5jcmVhdGVfbW9kdWxlKHNwZWMpCisgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgIG1vZHVsZSA9IE1vZHVsZVR5cGUoc3BlYy5uYW1lKQorICAgICMgVGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIGdldCBzZXQgaGVyZToKKyAgICBfaW5pdF9tb2R1bGVfYXR0cnMoc3BlYywgbW9kdWxlKQogCi1Mb2FkZXJzIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKyAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXSA9IG1vZHVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB1bnN1cHBvcnRlZAorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICBlbGlmIG5vdCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICAjIFNldCBfX2xvYWRlcl9fIGFuZCBfX3BhY2thZ2VfXyBpZiBtaXNzaW5nLgorICAgIGVsc2U6CisgICAgICAgIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0gPSBtb2R1bGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJhaXNlCisgICAgcmV0dXJuIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKworTm90ZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6CiAKICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgotICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4gIChPdGhlcndpc2UsCi0gICA6ZnVuYzpgaW1wLnJlbG9hZGAgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuKSAgSWYgdGhlIG5hbWVkIG1vZHVsZSBkb2VzCi0gICBub3QgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUKLSAgIG9iamVjdCBhbmQgYWRkIGl0IHRvIDpkYXRhOmBzeXMubW9kdWxlc2AuCisgICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBpbXBvcnQgd2lsbCBoYXZlIGFscmVhZHkgcmV0dXJuZWQgaXQuCiAKLSAgIE5vdGUgdGhhdCB0aGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgKiBUaGUgbW9kdWxlIHdpbGwgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCBiZWZvcmUgdGhlIGxvYWRlcgogICAgZXhlY3V0ZXMgdGhlIG1vZHVsZSBjb2RlLiAgVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgdGhlIG1vZHVsZSBjb2RlIG1heQogICAgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGltcG9ydCBpdHNlbGY7IGFkZGluZyBpdCB0byA6ZGF0YTpgc3lzLm1vZHVsZXNgCiAgICBiZWZvcmVoYW5kIHByZXZlbnRzIHVuYm91bmRlZCByZWN1cnNpb24gaW4gdGhlIHdvcnN0IGNhc2UgYW5kIG11bHRpcGxlCiAgICBsb2FkaW5nIGluIHRoZSBiZXN0LgogCi0gICBJZiBsb2FkaW5nIGZhaWxzLCB0aGUgbG9hZGVyIG11c3QgcmVtb3ZlIGFueSBtb2R1bGVzIGl0IGhhcyBpbnNlcnRlZCBpbnRvCi0gICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBidXQgaXQgbXVzdCByZW1vdmUgKipvbmx5KiogdGhlIGZhaWxpbmcgbW9kdWxlLCBhbmQKLSAgIG9ubHkgaWYgdGhlIGxvYWRlciBpdHNlbGYgaGFzIGxvYWRlZCBpdCBleHBsaWNpdGx5LiAgQW55IG1vZHVsZSBhbHJlYWR5IGluCi0gICB0aGUgOmRhdGE6YHN5cy5tb2R1bGVzYCBjYWNoZSwgYW5kIGFueSBtb2R1bGUgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZAotICAgYXMgYSBzaWRlLWVmZmVjdCwgbXVzdCByZW1haW4gaW4gdGhlIGNhY2hlLgorICogSWYgbG9hZGluZyBmYWlscywgdGhlIGZhaWxpbmcgbW9kdWxlIC0tIGFuZCBvbmx5IHRoZSBmYWlsaW5nIG1vZHVsZSAtLQorICAgZ2V0cyByZW1vdmVkIGZyb20gOmRhdGE6YHN5cy5tb2R1bGVzYC4gIEFueSBtb2R1bGUgYWxyZWFkeSBpbiB0aGUKKyAgIDpkYXRhOmBzeXMubW9kdWxlc2AgY2FjaGUsIGFuZCBhbnkgbW9kdWxlIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQKKyAgIGFzIGEgc2lkZS1lZmZlY3QsIG11c3QgcmVtYWluIGluIHRoZSBjYWNoZS4gIFRoaXMgY29udHJhc3RzIHdpdGgKKyAgIHJlbG9hZGluZyB3aGVyZSBldmVuIHRoZSBmYWlsaW5nIG1vZHVsZSBpcyBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuCiAKLSAqIFRoZSBsb2FkZXIgbWF5IHNldCB0aGUgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlLiAgSWYgc2V0LCB0aGlzCi0gICBhdHRyaWJ1dGUncyB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nLiAgVGhlIGxvYWRlciBtYXkgb3B0IHRvIGxlYXZlCi0gICBgYF9fZmlsZV9fYGAgdW5zZXQgaWYgaXQgaGFzIG5vIHNlbWFudGljIG1lYW5pbmcgKGUuZy4gYSBtb2R1bGUgbG9hZGVkIGZyb20KLSAgIGEgZGF0YWJhc2UpLiBJZiBgYF9fZmlsZV9fYGAgaXMgc2V0LCBpdCBtYXkgYWxzbyBiZSBhcHByb3ByaWF0ZSB0byBzZXQgdGhlCi0gICBgYF9fY2FjaGVkX19gYCBhdHRyaWJ1dGUgd2hpY2ggaXMgdGhlIHBhdGggdG8gYW55IGNvbXBpbGVkIHZlcnNpb24gb2YgdGhlCi0gICBjb2RlIChlLmcuIGJ5dGUtY29tcGlsZWQgZmlsZSkuIFRoZSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3QgdG8gc2V0IHRoaXMKLSAgIGF0dHJpYnV0ZTsgdGhlIHBhdGggY2FuIHNpbXBseSBwb2ludCB0byB3aGV0aGVyIHRoZSBjb21waWxlZCBmaWxlIHdvdWxkCi0gICBleGlzdCAoc2VlIDpwZXA6YDMxNDdgKS4KKyAqIEFmdGVyIHRoZSBtb2R1bGUgaXMgY3JlYXRlZCBidXQgYmVmb3JlIGV4ZWN1dGlvbiwgdGhlIGltcG9ydCBtYWNoaW5lcnkKKyAgIHNldHMgdGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzICgiX2luaXRfbW9kdWxlX2F0dHJzIiBpbgorICAgdGhlIHBzZXVkby1jb2RlIGV4YW1wbGUgYWJvdmUpLCBhcyBzdW1tYXJpemVkIGluIGEKKyAgIDpyZWY6YGxhdGVyIHNlY3Rpb24gPGltcG9ydC1tb2QtYXR0cnM+YC4KIAotICogVGhlIGxvYWRlciBtYXkgc2V0IHRoZSBgYF9fbmFtZV9fYGAgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUuICBXaGlsZSBub3QKLSAgIHJlcXVpcmVkLCBzZXR0aW5nIHRoaXMgYXR0cmlidXRlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCBzbyB0aGF0IHRoZQotICAgOm1ldGg6YHJlcHIoKWAgb2YgdGhlIG1vZHVsZSBpcyBtb3JlIGluZm9ybWF0aXZlLgorICogTW9kdWxlIGV4ZWN1dGlvbiBpcyB0aGUga2V5IG1vbWVudCBvZiBsb2FkaW5nIGluIHdoaWNoIHRoZSBtb2R1bGUncworICAgbmFtZXNwYWNlIGdldHMgcG9wdWxhdGVkLiAgRXhlY3V0aW9uIGlzIGVudGlyZWx5IGRlbGVnYXRlZCB0byB0aGUKKyAgIGxvYWRlciwgd2hpY2ggZ2V0cyB0byBkZWNpZGUgd2hhdCBnZXRzIHBvcHVsYXRlZCBhbmQgaG93LgogCi0gKiBJZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSAoZWl0aGVyIHJlZ3VsYXIgb3IgbmFtZXNwYWNlKSwgdGhlIGxvYWRlciBtdXN0Ci0gICBzZXQgdGhlIG1vZHVsZSBvYmplY3QncyBgYF9fcGF0aF9fYGAgYXR0cmlidXRlLiAgVGhlIHZhbHVlIG11c3QgYmUKLSAgIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGVtcHR5IGlmIGBgX19wYXRoX19gYCBoYXMgbm8gZnVydGhlciBzaWduaWZpY2FuY2UKLSAgIHRvIHRoZSBsb2FkZXIuIElmIGBgX19wYXRoX19gYCBpcyBub3QgZW1wdHksIGl0IG11c3QgcHJvZHVjZSBzdHJpbmdzCi0gICB3aGVuIGl0ZXJhdGVkIG92ZXIuIE1vcmUgZGV0YWlscyBvbiB0aGUgc2VtYW50aWNzIG9mIGBgX19wYXRoX19gYCBhcmUKLSAgIGdpdmVuIDpyZWY6YGJlbG93IDxwYWNrYWdlLXBhdGgtcnVsZXM+YC4KKyAqIFRoZSBtb2R1bGUgY3JlYXRlZCBkdXJpbmcgbG9hZGluZyBhbmQgcGFzc2VkIHRvIGV4ZWNfbW9kdWxlKCkgbWF5CisgICBub3QgYmUgdGhlIG9uZSByZXR1cm5lZCBhdCB0aGUgZW5kIG9mIGltcG9ydCBbI2ZubG9dXy4KIAotICogVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0IGxvYWRlZAotICAgdGhlIG1vZHVsZS4gIFRoaXMgaXMgbW9zdGx5IGZvciBpbnRyb3NwZWN0aW9uIGFuZCByZWxvYWRpbmcsIGJ1dCBjYW4gYmUKLSAgIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlIGdldHRpbmcKLSAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBpbXBvcnQgc3lzdGVtIGhhcyB0YWtlbiBvdmVyIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mCisgICBsb2FkZXJzLiAgVGhlc2Ugd2VyZSBwcmV2aW91c2x5IHBlcmZvcm1lZCBieSB0aGUKKyAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAgbWV0aG9kLgogCi0gKiBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBzaG91bGQgYmUgc2V0LiAgSXRzIHZhbHVlIG11c3QgYmUgYQotICAgc3RyaW5nLCBidXQgaXQgY2FuIGJlIHRoZSBzYW1lIHZhbHVlIGFzIGl0cyBgYF9fbmFtZV9fYGAuICBJZiB0aGUgYXR0cmlidXRlCi0gICBpcyBzZXQgdG8gYGBOb25lYGAgb3IgaXMgbWlzc2luZywgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBmaWxsIGl0IGluIHdpdGggYQotICAgbW9yZSBhcHByb3ByaWF0ZSB2YWx1ZS4gIFdoZW4gdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGl0cyBgYF9fcGFja2FnZV9fYGAKLSAgIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gaXRzIGBgX19uYW1lX19gYC4gIFdoZW4gdGhlIG1vZHVsZSBpcyBub3QgYSBwYWNrYWdlLAotICAgYGBfX3BhY2thZ2VfX2BgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdG9wLWxldmVsIG1vZHVsZXMsIG9yCi0gICBmb3Igc3VibW9kdWxlcywgdG8gdGhlIHBhcmVudCBwYWNrYWdlJ3MgbmFtZS4gIFNlZSA6cGVwOmAzNjZgIGZvciBmdXJ0aGVyCi0gICBkZXRhaWxzLgorTG9hZGVycworLS0tLS0tLQogCi0gICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAotICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCitNb2R1bGUgbG9hZGVycyBwcm92aWRlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBvZiBsb2FkaW5nOiBtb2R1bGUgZXhlY3V0aW9uLgorVGhlIGltcG9ydCBtYWNoaW5lcnkgY2FsbHMgdGhlIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZWAKK21ldGhvZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbW9kdWxlIG9iamVjdCB0byBleGVjdXRlLiAgQW55IHZhbHVlCityZXR1cm5lZCBmcm9tIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGVgIGlzIGlnbm9yZWQuCisKK0xvYWRlcnMgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgogCiAgKiBJZiB0aGUgbW9kdWxlIGlzIGEgUHl0aG9uIG1vZHVsZSAoYXMgb3Bwb3NlZCB0byBhIGJ1aWx0LWluIG1vZHVsZSBvciBhCiAgICBkeW5hbWljYWxseSBsb2FkZWQgZXh0ZW5zaW9uKSwgdGhlIGxvYWRlciBzaG91bGQgZXhlY3V0ZSB0aGUgbW9kdWxlJ3MgY29kZQogICAgaW4gdGhlIG1vZHVsZSdzIGdsb2JhbCBuYW1lIHNwYWNlIChgYG1vZHVsZS5fX2RpY3RfX2BgKS4KIAorICogSWYgdGhlIGxvYWRlciBjYW5ub3QgZXhlY3V0ZSB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KKyAgIDpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmV4ZWNfbW9kdWxlYCB3aWxsIGJlIHByb3BhZ2F0ZWQuCiAKLU1vZHVsZSByZXBycwotLS0tLS0tLS0tLS0tCitJbiBtYW55IGNhc2VzLCB0aGUgZmluZGVyIGFuZCBsb2FkZXIgY2FuIGJlIHRoZSBzYW1lIG9iamVjdDsgaW4gc3VjaCBjYXNlcyB0aGUKKzptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWNgIG1ldGhvZCB3b3VsZCBqdXN0IHJldHVybiBhCitzcGVjIHdpdGggdGhlIGxvYWRlciBzZXQgdG8gYGBzZWxmYGAuCiAKLUJ5IGRlZmF1bHQsIGFsbCBtb2R1bGVzIGhhdmUgYSB1c2FibGUgcmVwciwgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlCi1hdHRyaWJ1dGVzIHNldCBhYm92ZSwgYW5kIGhvb2tzIGluIHRoZSBsb2FkZXIsIHlvdSBjYW4gbW9yZSBleHBsaWNpdGx5IGNvbnRyb2wKLXRoZSByZXByIG9mIG1vZHVsZSBvYmplY3RzLgorTW9kdWxlIGxvYWRlcnMgbWF5IG9wdCBpbiB0byBjcmVhdGluZyB0aGUgbW9kdWxlIG9iamVjdCBkdXJpbmcgbG9hZGluZworYnkgaW1wbGVtZW50aW5nIGEgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5jcmVhdGVfbW9kdWxlYCBtZXRob2QuCitJdCB0YWtlcyBvbmUgYXJndW1lbnQsIHRoZSBtb2R1bGUgc3BlYywgYW5kIHJldHVybnMgdGhlIG5ldyBtb2R1bGUgb2JqZWN0Cit0byB1c2UgZHVyaW5nIGxvYWRpbmcuICBgYGNyZWF0ZV9tb2R1bGUoKWBgIGRvZXMgbm90IG5lZWQgdG8gc2V0IGFueSBhdHRyaWJ1dGVzCitvbiB0aGUgbW9kdWxlIG9iamVjdC4gIElmIHRoZSBsb2FkZXIgZG9lcyBub3QgZGVmaW5lIGBgY3JlYXRlX21vZHVsZSgpYGAsIHRoZQoraW1wb3J0IG1hY2hpbmVyeSB3aWxsIGNyZWF0ZSB0aGUgbmV3IG1vZHVsZSBpdHNlbGYuCiAKLUxvYWRlcnMgbWF5IGltcGxlbWVudCBhIDptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2Qgd2hpY2ggdGFrZXMgYSBzaW5nbGUKLWFyZ3VtZW50LCB0aGUgbW9kdWxlIG9iamVjdC4gIFdoZW4gYGByZXByKG1vZHVsZSlgYCBpcyBjYWxsZWQgZm9yIGEgbW9kdWxlCi13aXRoIGEgbG9hZGVyIHN1cHBvcnRpbmcgdGhpcyBwcm90b2NvbCwgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbQotYGBtb2R1bGUuX19sb2FkZXJfXy5tb2R1bGVfcmVwcihtb2R1bGUpYGAgaXMgcmV0dXJuZWQgYXMgdGhlIG1vZHVsZSdzIHJlcHIKLXdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLiAgVGhpcyByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZy4KKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgVGhlIGNyZWF0ZV9tb2R1bGUoKSBtZXRob2Qgb2YgbG9hZGVycy4KIAotSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2xvYWRlcl9fYGAgYXR0cmlidXRlLCBvciB0aGUgbG9hZGVyIGhhcyBubwotOm1ldGg6YG1vZHVsZV9yZXByKClgIG1ldGhvZCwgdGhlbiB0aGUgbW9kdWxlIG9iamVjdCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYKLXdpbGwgY3JhZnQgYSBkZWZhdWx0IHJlcHIgdXNpbmcgd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiAgSXQgd2lsbAotdHJ5IHRvIHVzZSB0aGUgYGBtb2R1bGUuX19uYW1lX19gYCwgYGBtb2R1bGUuX19maWxlX19gYCwgYW5kCi1gYG1vZHVsZS5fX2xvYWRlcl9fYGAgYXMgaW5wdXQgaW50byB0aGUgcmVwciwgd2l0aCBkZWZhdWx0cyBmb3Igd2hhdGV2ZXIKLWluZm9ybWF0aW9uIGlzIG1pc3NpbmcuCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIG1ldGhvZCB3YXMgcmVwbGFjZWQgYnkKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGVgIGFuZCB0aGUgaW1wb3J0CisgICBtYWNoaW5lcnkgYXNzdW1lZCBhbGwgdGhlIGJvaWxlcnBsYXRlIHJlc3BvbnNpYmlsaXRpZXMgb2YgbG9hZGluZy4KIAotSGVyZSBhcmUgdGhlIGV4YWN0IHJ1bGVzIHVzZWQ6CisgICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGxvYWRlcnMsIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdXNlCisgICB0aGUgYGBsb2FkX21vZHVsZSgpYGAgbWV0aG9kIG9mIGxvYWRlcnMgaWYgaXQgZXhpc3RzIGFuZCB0aGUgbG9hZGVyIGRvZXMKKyAgIG5vdCBhbHNvIGltcGxlbWVudCBgYGV4ZWNfbW9kdWxlKClgYC4gIEhvd2V2ZXIsIGBgbG9hZF9tb2R1bGUoKWBgIGhhcyBiZWVuCisgICBkZXByZWNhdGVkIGFuZCBsb2FkZXJzIHNob3VsZCBpbXBsZW1lbnQgYGBleGVjX21vZHVsZSgpYGAgaW5zdGVhZC4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fbG9hZGVyX19gYCBhbmQgdGhhdCBsb2FkZXIgaGFzIGEKLSAgIDptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2QsIGNhbGwgaXQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCwgd2hpY2ggaXMgdGhlCi0gICBtb2R1bGUgb2JqZWN0LiAgVGhlIHZhbHVlIHJldHVybmVkIGlzIHVzZWQgYXMgdGhlIG1vZHVsZSdzIHJlcHIuCisgICBUaGUgYGBsb2FkX21vZHVsZSgpYGAgbWV0aG9kIG11c3QgaW1wbGVtZW50IGFsbCB0aGUgYm9pbGVycGxhdGUgbG9hZGluZworICAgZnVuY3Rpb25hbGl0eSBkZXNjcmliZWQgYWJvdmUgaW4gYWRkaXRpb24gdG8gZXhlY3V0aW5nIHRoZSBtb2R1bGUuICBBbGwKKyAgIHRoZSBzYW1lIGNvbnN0cmFpbnRzIGFwcGx5LCB3aXRoIHNvbWUgYWRkaXRpb25hbCBjbGFyaWZpY2F0aW9uOgogCi0gKiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIDptZXRoOmBtb2R1bGVfcmVwcigpYCwgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQKLSAgIGFuZCBkaXNjYXJkZWQsIGFuZCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIG1vZHVsZSdzIHJlcHIgY29udGludWVzIGFzIGlmCi0gICA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgZGlkIG5vdCBleGlzdC4KKyAgICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgorICAgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4KKyAgICAgIChPdGhlcndpc2UsIDpmdW5jOmBpbXBvcnRsaWIucmVsb2FkYCB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4pICBJZiB0aGUKKyAgICAgIG5hbWVkIG1vZHVsZSBkb2VzIG5vdCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyCisgICAgICBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0IGFuZCBhZGQgaXQgdG8gOmRhdGE6YHN5cy5tb2R1bGVzYC4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLCB0aGlzIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKLSAgIG1vZHVsZSdzIHJlcHIuCisgICAgKiBUaGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgICAgICBleGVjdXRlcyB0aGUgbW9kdWxlIGNvZGUsIHRvIHByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiBvciBtdWx0aXBsZQorICAgICAgbG9hZGluZy4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2ZpbGVfX2BgIGJ1dCBkb2VzIGhhdmUgYSBgYF9fbG9hZGVyX19gYCwgdGhlbiB0aGUKLSAgIGxvYWRlcidzIHJlcHIgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBtb2R1bGUncyByZXByLgorICAgICogSWYgbG9hZGluZyBmYWlscywgdGhlIGxvYWRlciBtdXN0IHJlbW92ZSBhbnkgbW9kdWxlcyBpdCBoYXMgaW5zZXJ0ZWQKKyAgICAgIGludG8gOmRhdGE6YHN5cy5tb2R1bGVzYCwgYnV0IGl0IG11c3QgcmVtb3ZlICoqb25seSoqIHRoZSBmYWlsaW5nCisgICAgICBtb2R1bGUsIGFuZCBvbmx5IGlmIHRoZSBsb2FkZXIgaXRzZWxmIGhhcyBsb2FkZWQgaXQgZXhwbGljaXRseS4KIAotICogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgbW9kdWxlJ3MgYGBfX25hbWVfX2BgIGluIHRoZSByZXByLgorTW9kdWxlIHNwZWMKKy0tLS0tLS0tLS0tCiAKLVRoaXMgZXhhbXBsZSwgZnJvbSA6cGVwOmA0MjBgIHNob3dzIGhvdyBhIGxvYWRlciBjYW4gY3JhZnQgaXRzIG93biBtb2R1bGUKLXJlcHI6OgorVGhlIGltcG9ydCBtYWNoaW5lcnkgdXNlcyBhIHZhcmlldHkgb2YgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBtb2R1bGUKK2R1cmluZyBpbXBvcnQsIGVzcGVjaWFsbHkgYmVmb3JlIGxvYWRpbmcuICBNb3N0IG9mIHRoZSBpbmZvcm1hdGlvbiBpcworY29tbW9uIHRvIGFsbCBtb2R1bGVzLiAgVGhlIHB1cnBvc2Ugb2YgYSBtb2R1bGUncyBzcGVjIGlzIHRvIGVuY2Fwc3VsYXRlCit0aGlzIGltcG9ydC1yZWxhdGVkIGluZm9ybWF0aW9uIG9uIGEgcGVyLW1vZHVsZSBiYXNpcy4KIAotICAgIGNsYXNzIE5hbWVzcGFjZUxvYWRlcjoKLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAobmFtZXNwYWNlKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCitVc2luZyBhIHNwZWMgZHVyaW5nIGltcG9ydCBhbGxvd3Mgc3RhdGUgdG8gYmUgdHJhbnNmZXJyZWQgYmV0d2VlbiBpbXBvcnQKK3N5c3RlbSBjb21wb25lbnRzLCBlLmcuIGJldHdlZW4gdGhlIGZpbmRlciB0aGF0IGNyZWF0ZXMgdGhlIG1vZHVsZSBzcGVjCithbmQgdGhlIGxvYWRlciB0aGF0IGV4ZWN1dGVzIGl0LiAgTW9zdCBpbXBvcnRhbnRseSwgaXQgYWxsb3dzIHRoZQoraW1wb3J0IG1hY2hpbmVyeSB0byBwZXJmb3JtIHRoZSBib2lsZXJwbGF0ZSBvcGVyYXRpb25zIG9mIGxvYWRpbmcsCit3aGVyZWFzIHdpdGhvdXQgYSBtb2R1bGUgc3BlYyB0aGUgbG9hZGVyIGhhZCB0aGF0IHJlc3BvbnNpYmlsaXR5LgogCitTZWUgOmNsYXNzOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjYCBmb3IgbW9yZSBzcGVjaWZpY3Mgb24gd2hhdAoraW5mb3JtYXRpb24gYSBtb2R1bGUncyBzcGVjIG1heSBob2xkLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gX2ltcG9ydC1tb2QtYXR0cnM6CisKK0ltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW1wb3J0IG1hY2hpbmVyeSBmaWxscyBpbiB0aGVzZSBhdHRyaWJ1dGVzIG9uIGVhY2ggbW9kdWxlIG9iamVjdAorZHVyaW5nIGxvYWRpbmcsIGJhc2VkIG9uIHRoZSBtb2R1bGUncyBzcGVjLCBiZWZvcmUgdGhlIGxvYWRlciBleGVjdXRlcwordGhlIG1vZHVsZS4KKworLi4gYXR0cmlidXRlOjogX19uYW1lX18KKworICAgVGhlIGBgX19uYW1lX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mCisgICB0aGUgbW9kdWxlLiAgVGhpcyBuYW1lIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIG1vZHVsZSBpbgorICAgdGhlIGltcG9ydCBzeXN0ZW0uCisKKy4uIGF0dHJpYnV0ZTo6IF9fbG9hZGVyX18KKworICAgVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0CisgICB0aGUgaW1wb3J0IG1hY2hpbmVyeSB1c2VkIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgVGhpcyBpcyBtb3N0bHkKKyAgIGZvciBpbnRyb3NwZWN0aW9uLCBidXQgY2FuIGJlIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljCisgICBmdW5jdGlvbmFsaXR5LCBmb3IgZXhhbXBsZSBnZXR0aW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorCisuLiBhdHRyaWJ1dGU6OiBfX3BhY2thZ2VfXworCisgICBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldC4gIEl0cyB2YWx1ZSBtdXN0CisgICBiZSBhIHN0cmluZywgYnV0IGl0IGNhbiBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBpdHMgYGBfX25hbWVfX2BgLiAgV2hlbgorICAgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGl0cyBgYF9fcGFja2FnZV9fYGAgdmFsdWUgc2hvdWxkIGJlIHNldCB0bworICAgaXRzIGBgX19uYW1lX19gYC4gIFdoZW4gdGhlIG1vZHVsZSBpcyBub3QgYSBwYWNrYWdlLCBgYF9fcGFja2FnZV9fYGAKKyAgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdG9wLWxldmVsIG1vZHVsZXMsIG9yIGZvcgorICAgc3VibW9kdWxlcywgdG8gdGhlIHBhcmVudCBwYWNrYWdlJ3MgbmFtZS4gIFNlZSA6cGVwOmAzNjZgIGZvciBmdXJ0aGVyCisgICBkZXRhaWxzLgorCisgICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAorICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCisKKy4uIGF0dHJpYnV0ZTo6IF9fc3BlY19fCisKKyAgIFRoZSBgYF9fc3BlY19fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBtb2R1bGUgc3BlYyB0aGF0IHdhcworICAgdXNlZCB3aGVuIGltcG9ydGluZyB0aGUgbW9kdWxlLiAgVGhpcyBpcyB1c2VkIHByaW1hcmlseSBmb3IKKyAgIGludHJvc3BlY3Rpb24gYW5kIGR1cmluZyByZWxvYWRpbmcuICBTZXR0aW5nIGBgX19zcGVjX19gYAorICAgYXBwcm9wcmlhdGVseSBhcHBsaWVzIGVxdWFsbHkgdG8gOnJlZjpgbW9kdWxlcyBpbml0aWFsaXplZCBkdXJpbmcKKyAgIGludGVycHJldGVyIHN0YXJ0dXAgPHByb2dyYW1zPmAuICBUaGUgb25lIGV4Y2VwdGlvbiBpcyBgYF9fbWFpbl9fYGAsCisgICB3aGVyZSBgYF9fc3BlY19fYGAgaXMgOnJlZjpgc2V0IHRvIE5vbmUgaW4gc29tZSBjYXNlcyA8bWFpbl9zcGVjPmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBhdHRyaWJ1dGU6OiBfX3BhdGhfXworCisgICBJZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSAoZWl0aGVyIHJlZ3VsYXIgb3IgbmFtZXNwYWNlKSwgdGhlIG1vZHVsZQorICAgb2JqZWN0J3MgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldC4gIFRoZSB2YWx1ZSBtdXN0IGJlCisgICBpdGVyYWJsZSwgYnV0IG1heSBiZSBlbXB0eSBpZiBgYF9fcGF0aF9fYGAgaGFzIG5vIGZ1cnRoZXIgc2lnbmlmaWNhbmNlLgorICAgSWYgYGBfX3BhdGhfX2BgIGlzIG5vdCBlbXB0eSwgaXQgbXVzdCBwcm9kdWNlIHN0cmluZ3Mgd2hlbiBpdGVyYXRlZAorICAgb3Zlci4gTW9yZSBkZXRhaWxzIG9uIHRoZSBzZW1hbnRpY3Mgb2YgYGBfX3BhdGhfX2BgIGFyZSBnaXZlbgorICAgOnJlZjpgYmVsb3cgPHBhY2thZ2UtcGF0aC1ydWxlcz5gLgorCisgICBOb24tcGFja2FnZSBtb2R1bGVzIHNob3VsZCBub3QgaGF2ZSBhIGBgX19wYXRoX19gYCBhdHRyaWJ1dGUuCisKKy4uIGF0dHJpYnV0ZTo6IF9fZmlsZV9fCisuLiBhdHRyaWJ1dGU6OiBfX2NhY2hlZF9fCisKKyAgIGBgX19maWxlX19gYCBpcyBvcHRpb25hbC4gSWYgc2V0LCB0aGlzIGF0dHJpYnV0ZSdzIHZhbHVlIG11c3QgYmUgYQorICAgc3RyaW5nLiAgVGhlIGltcG9ydCBzeXN0ZW0gbWF5IG9wdCB0byBsZWF2ZSBgYF9fZmlsZV9fYGAgdW5zZXQgaWYgaXQKKyAgIGhhcyBubyBzZW1hbnRpYyBtZWFuaW5nIChlLmcuIGEgbW9kdWxlIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UpLgorCisgICBJZiBgYF9fZmlsZV9fYGAgaXMgc2V0LCBpdCBtYXkgYWxzbyBiZSBhcHByb3ByaWF0ZSB0byBzZXQgdGhlCisgICBgYF9fY2FjaGVkX19gYCBhdHRyaWJ1dGUgd2hpY2ggaXMgdGhlIHBhdGggdG8gYW55IGNvbXBpbGVkIHZlcnNpb24gb2YKKyAgIHRoZSBjb2RlIChlLmcuIGJ5dGUtY29tcGlsZWQgZmlsZSkuIFRoZSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3QKKyAgIHRvIHNldCB0aGlzIGF0dHJpYnV0ZTsgdGhlIHBhdGggY2FuIHNpbXBseSBwb2ludCB0byB3aGVyZSB0aGUKKyAgIGNvbXBpbGVkIGZpbGUgd291bGQgZXhpc3QgKHNlZSA6cGVwOmAzMTQ3YCkuCisKKyAgIEl0IGlzIGFsc28gYXBwcm9wcmlhdGUgdG8gc2V0IGBgX19jYWNoZWRfX2BgIHdoZW4gYGBfX2ZpbGVfX2BgIGlzIG5vdAorICAgc2V0LiAgSG93ZXZlciwgdGhhdCBzY2VuYXJpbyBpcyBxdWl0ZSBhdHlwaWNhbC4gIFVsdGltYXRlbHksIHRoZQorICAgbG9hZGVyIGlzIHdoYXQgbWFrZXMgdXNlIG9mIGBgX19maWxlX19gYCBhbmQvb3IgYGBfX2NhY2hlZF9fYGAuICBTbworICAgaWYgYSBsb2FkZXIgY2FuIGxvYWQgZnJvbSBhIGNhY2hlZCBtb2R1bGUgYnV0IG90aGVyd2lzZSBkb2VzIG5vdCBsb2FkCisgICBmcm9tIGEgZmlsZSwgdGhhdCBhdHlwaWNhbCBzY2VuYXJpbyBtYXkgYmUgYXBwcm9wcmlhdGUuCiAKIC4uIF9wYWNrYWdlLXBhdGgtcnVsZXM6CiAKQEAgLTQ2Miw5ICs1NzksNDcgQEAKIGF0dHJpYnV0ZSwgYW5kIHRoaXMgd2FzIHR5cGljYWxseSB0aGUgd2F5IG5hbWVzcGFjZSBwYWNrYWdlcyB3ZXJlIGltcGxlbWVudGVkCiBwcmlvciB0byA6cGVwOmA0MjBgLiAgV2l0aCB0aGUgYWRvcHRpb24gb2YgOnBlcDpgNDIwYCwgbmFtZXNwYWNlIHBhY2thZ2VzIG5vCiBsb25nZXIgbmVlZCB0byBzdXBwbHkgYGBfX2luaXRfXy5weWBgIGZpbGVzIGNvbnRhaW5pbmcgb25seSBgYF9fcGF0aF9fYGAKLW1hbmlwdWxhdGlvbiBjb2RlOyB0aGUgbmFtZXNwYWNlIGxvYWRlciBhdXRvbWF0aWNhbGx5IHNldHMgYGBfX3BhdGhfX2BgCittYW5pcHVsYXRpb24gY29kZTsgdGhlIGltcG9ydCBtYWNoaW5lcnkgYXV0b21hdGljYWxseSBzZXRzIGBgX19wYXRoX19gYAogY29ycmVjdGx5IGZvciB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCiAKK01vZHVsZSByZXBycworLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGFsbCBtb2R1bGVzIGhhdmUgYSB1c2FibGUgcmVwciwgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlCithdHRyaWJ1dGVzIHNldCBhYm92ZSwgYW5kIGluIHRoZSBtb2R1bGUncyBzcGVjLCB5b3UgY2FuIG1vcmUgZXhwbGljaXRseQorY29udHJvbCB0aGUgcmVwciBvZiBtb2R1bGUgb2JqZWN0cy4KKworSWYgdGhlIG1vZHVsZSBoYXMgYSBzcGVjIChgYF9fc3BlY19fYGApLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHRyeQordG8gZ2VuZXJhdGUgYSByZXByIGZyb20gaXQuICBJZiB0aGF0IGZhaWxzIG9yIHRoZXJlIGlzIG5vIHNwZWMsIHRoZSBpbXBvcnQKK3N5c3RlbSB3aWxsIGNyYWZ0IGEgZGVmYXVsdCByZXByIHVzaW5nIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZQorb24gdGhlIG1vZHVsZS4gIEl0IHdpbGwgdHJ5IHRvIHVzZSB0aGUgYGBtb2R1bGUuX19uYW1lX19gYCwKK2BgbW9kdWxlLl9fZmlsZV9fYGAsIGFuZCBgYG1vZHVsZS5fX2xvYWRlcl9fYGAgYXMgaW5wdXQgaW50byB0aGUgcmVwciwKK3dpdGggZGVmYXVsdHMgZm9yIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIG1pc3NpbmcuCisKK0hlcmUgYXJlIHRoZSBleGFjdCBydWxlcyB1c2VkOgorCisgKiBJZiB0aGUgbW9kdWxlIGhhcyBhIGBgX19zcGVjX19gYCBhdHRyaWJ1dGUsIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc3BlYworICAgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVwci4gIFRoZSAibmFtZSIsICJsb2FkZXIiLCAib3JpZ2luIiwgYW5kCisgICAiaGFzX2xvY2F0aW9uIiBhdHRyaWJ1dGVzIGFyZSBjb25zdWx0ZWQuCisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSwgdGhpcyBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlCisgICBtb2R1bGUncyByZXByLgorCisgKiBJZiB0aGUgbW9kdWxlIGhhcyBubyBgYF9fZmlsZV9fYGAgYnV0IGRvZXMgaGF2ZSBhIGBgX19sb2FkZXJfX2BgIHRoYXQgaXMgbm90CisgICBgYE5vbmVgYCwgdGhlbiB0aGUgbG9hZGVyJ3MgcmVwciBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG1vZHVsZSdzIHJlcHIuCisKKyAqIE90aGVyd2lzZSwganVzdCB1c2UgdGhlIG1vZHVsZSdzIGBgX19uYW1lX19gYCBpbiB0aGUgcmVwci4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFVzZSBvZiA6bWV0aDpgbG9hZGVyLm1vZHVsZV9yZXByKCkgPGltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXByPmAKKyAgIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHRoZSBtb2R1bGUgc3BlYyBpcyBub3cgdXNlZCBieSB0aGUgaW1wb3J0CisgICBtYWNoaW5lcnkgdG8gZ2VuZXJhdGUgYSBtb2R1bGUgcmVwci4KKworICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4zLCB0aGUgbW9kdWxlIHJlcHIgd2lsbCBiZQorICAgZ2VuZXJhdGVkIGJ5IGNhbGxpbmcgdGhlIGxvYWRlcidzCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXByYCBtZXRob2QsIGlmIGRlZmluZWQsIGJlZm9yZQorICAgdHJ5aW5nIGVpdGhlciBhcHByb2FjaCBkZXNjcmliZWQgYWJvdmUuICBIb3dldmVyLCB0aGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuCisKIAogVGhlIFBhdGggQmFzZWQgRmluZGVyCiA9PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ3Myw4ICs2MjgsOSBAQAogICAgIHNpbmdsZTogcGF0aCBiYXNlZCBmaW5kZXIKIAogQXMgbWVudGlvbmVkIHByZXZpb3VzbHksIFB5dGhvbiBjb21lcyB3aXRoIHNldmVyYWwgZGVmYXVsdCBtZXRhIHBhdGggZmluZGVycy4KLU9uZSBvZiB0aGVzZSwgY2FsbGVkIHRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgLCBzZWFyY2hlcyBhbiA6dGVybTpgaW1wb3J0Ci1wYXRoYCwgd2hpY2ggY29udGFpbnMgYSBsaXN0IG9mIDp0ZXJtOmBwYXRoIGVudHJpZXMgPHBhdGggZW50cnk+YC4gIEVhY2ggcGF0aAorT25lIG9mIHRoZXNlLCBjYWxsZWQgdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAKKyg6Y2xhc3M6YH5pbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXJgKSwgc2VhcmNoZXMgYW4gOnRlcm06YGltcG9ydCBwYXRoYCwKK3doaWNoIGNvbnRhaW5zIGEgbGlzdCBvZiA6dGVybTpgcGF0aCBlbnRyaWVzIDxwYXRoIGVudHJ5PmAuICBFYWNoIHBhdGgKIGVudHJ5IG5hbWVzIGEgbG9jYXRpb24gdG8gc2VhcmNoIGZvciBtb2R1bGVzLgogCiBUaGUgcGF0aCBiYXNlZCBmaW5kZXIgaXRzZWxmIGRvZXNuJ3Qga25vdyBob3cgdG8gaW1wb3J0IGFueXRoaW5nLiBJbnN0ZWFkLCBpdApAQCAtNTIzLDE1ICs2NzksMTUgQEAKICAgICBzaW5nbGU6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlCiAgICAgc2luZ2xlOiBQWVRIT05QQVRICiAKLVRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGFuZCBsb2FkaW5nIFB5dGhvbgotbW9kdWxlcyBhbmQgcGFja2FnZXMgd2hvc2UgbG9jYXRpb24gaXMgc3BlY2lmaWVkIHdpdGggYSBzdHJpbmcgOnRlcm06YHBhdGgKLWVudHJ5YC4gIE1vc3QgcGF0aCBlbnRyaWVzIG5hbWUgbG9jYXRpb25zIGluIHRoZSBmaWxlIHN5c3RlbSwgYnV0IHRoZXkgbmVlZAotbm90IGJlIGxpbWl0ZWQgdG8gdGhpcy4KK1RoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGFuZCBsb2FkaW5nCitQeXRob24gbW9kdWxlcyBhbmQgcGFja2FnZXMgd2hvc2UgbG9jYXRpb24gaXMgc3BlY2lmaWVkIHdpdGggYSBzdHJpbmcKKzp0ZXJtOmBwYXRoIGVudHJ5YC4gIE1vc3QgcGF0aCBlbnRyaWVzIG5hbWUgbG9jYXRpb25zIGluIHRoZSBmaWxlIHN5c3RlbSwKK2J1dCB0aGV5IG5lZWQgbm90IGJlIGxpbWl0ZWQgdG8gdGhpcy4KIAogQXMgYSBtZXRhIHBhdGggZmluZGVyLCB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCBpbXBsZW1lbnRzIHRoZQotOm1ldGg6YGZpbmRfbW9kdWxlKClgIHByb3RvY29sIHByZXZpb3VzbHkgZGVzY3JpYmVkLCBob3dldmVyIGl0IGV4cG9zZXMKLWFkZGl0aW9uYWwgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgaG93IG1vZHVsZXMgYXJlIGZvdW5kIGFuZAotbG9hZGVkIGZyb20gdGhlIDp0ZXJtOmBpbXBvcnQgcGF0aGAuCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9zcGVjYCBwcm90b2NvbCBwcmV2aW91c2x5CitkZXNjcmliZWQsIGhvd2V2ZXIgaXQgZXhwb3NlcyBhZGRpdGlvbmFsIGhvb2tzIHRoYXQgY2FuIGJlIHVzZWQgdG8KK2N1c3RvbWl6ZSBob3cgbW9kdWxlcyBhcmUgZm91bmQgYW5kIGxvYWRlZCBmcm9tIHRoZSA6dGVybTpgaW1wb3J0IHBhdGhgLgogCiBUaHJlZSB2YXJpYWJsZXMgYXJlIHVzZWQgYnkgdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAsIDpkYXRhOmBzeXMucGF0aGAsCiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGFuZCA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLiAgVGhlIGBgX19wYXRoX19gYApAQCAtNTUxLDE0ICs3MDcsMTYgQEAKIAogVGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAgaXMgYSA6dGVybTpgbWV0YSBwYXRoIGZpbmRlcmAsIHNvIHRoZSBpbXBvcnQKIG1hY2hpbmVyeSBiZWdpbnMgdGhlIDp0ZXJtOmBpbXBvcnQgcGF0aGAgc2VhcmNoIGJ5IGNhbGxpbmcgdGhlIHBhdGgKLWJhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QgYXMgZGVzY3JpYmVkIHByZXZpb3VzbHkuICBXaGVuCi10aGUgYGBwYXRoYGAgYXJndW1lbnQgdG8gOm1ldGg6YGZpbmRfbW9kdWxlKClgIGlzIGdpdmVuLCBpdCB3aWxsIGJlIGEKK2Jhc2VkIGZpbmRlcidzIDptZXRoOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kIGFzCitkZXNjcmliZWQgcHJldmlvdXNseS4gIFdoZW4gdGhlIGBgcGF0aGBgIGFyZ3VtZW50IHRvCis6bWV0aDpgfmltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX3NwZWNgIGlzIGdpdmVuLCBpdCB3aWxsIGJlIGEKIGxpc3Qgb2Ygc3RyaW5nIHBhdGhzIHRvIHRyYXZlcnNlIC0gdHlwaWNhbGx5IGEgcGFja2FnZSdzIGBgX19wYXRoX19gYAotYXR0cmlidXRlIGZvciBhbiBpbXBvcnQgd2l0aGluIHRoYXQgcGFja2FnZS4gIElmIHRoZSBgYHBhdGhgYCBhcmd1bWVudAotaXMgYGBOb25lYGAsIHRoaXMgaW5kaWNhdGVzIGEgdG9wIGxldmVsIGltcG9ydCBhbmQgOmRhdGE6YHN5cy5wYXRoYCBpcyB1c2VkLgorYXR0cmlidXRlIGZvciBhbiBpbXBvcnQgd2l0aGluIHRoYXQgcGFja2FnZS4gIElmIHRoZSBgYHBhdGhgYCBhcmd1bWVudCBpcworYGBOb25lYGAsIHRoaXMgaW5kaWNhdGVzIGEgdG9wIGxldmVsIGltcG9ydCBhbmQgOmRhdGE6YHN5cy5wYXRoYCBpcyB1c2VkLgogCiBUaGUgcGF0aCBiYXNlZCBmaW5kZXIgaXRlcmF0ZXMgb3ZlciBldmVyeSBlbnRyeSBpbiB0aGUgc2VhcmNoIHBhdGgsIGFuZAotZm9yIGVhY2ggb2YgdGhlc2UsIGxvb2tzIGZvciBhbiBhcHByb3ByaWF0ZSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgIGZvciB0aGUKK2ZvciBlYWNoIG9mIHRoZXNlLCBsb29rcyBmb3IgYW4gYXBwcm9wcmlhdGUgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYAorKDpjbGFzczpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyYCkgZm9yIHRoZQogcGF0aCBlbnRyeS4gIEJlY2F1c2UgdGhpcyBjYW4gYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiAoZS5nLiB0aGVyZSBtYXkgYmUKIGBzdGF0KClgIGNhbGwgb3ZlcmhlYWRzIGZvciB0aGlzIHNlYXJjaCksIHRoZSBwYXRoIGJhc2VkIGZpbmRlciBtYWludGFpbnMKIGEgY2FjaGUgbWFwcGluZyBwYXRoIGVudHJpZXMgdG8gcGF0aCBlbnRyeSBmaW5kZXJzLiAgVGhpcyBjYWNoZSBpcyBtYWludGFpbmVkCkBAIC01NzUsNTkgKzczMyw4MiBAQAogcGF0aCBlbnRyeSB0byBiZSBzZWFyY2hlZC4gIFRoaXMgY2FsbGFibGUgbWF5IGVpdGhlciByZXR1cm4gYSA6dGVybTpgcGF0aAogZW50cnkgZmluZGVyYCB0aGF0IGNhbiBoYW5kbGUgdGhlIHBhdGggZW50cnksIG9yIGl0IG1heSByYWlzZQogOmV4YzpgSW1wb3J0RXJyb3JgLiAgQW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHVzZWQgYnkgdGhlIHBhdGggYmFzZWQgZmluZGVyIHRvCi1zaWduYWwgdGhhdCB0aGUgaG9vayBjYW5ub3QgZmluZCBhIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAgZm9yIHRoYXQKLTp0ZXJtOmBwYXRoIGVudHJ5YC4gIFRoZSBleGNlcHRpb24gaXMgaWdub3JlZCBhbmQgOnRlcm06YGltcG9ydCBwYXRoYAotaXRlcmF0aW9uIGNvbnRpbnVlcy4gIFRoZSBob29rIHNob3VsZCBleHBlY3QgZWl0aGVyIGEgc3RyaW5nIG9yIGJ5dGVzIG9iamVjdDsKLXRoZSBlbmNvZGluZyBvZiBieXRlcyBvYmplY3RzIGlzIHVwIHRvIHRoZSBob29rIChlLmcuIGl0IG1heSBiZSBhIGZpbGUgc3lzdGVtCi1lbmNvZGluZywgVVRGLTgsIG9yIHNvbWV0aGluZyBlbHNlKSwgYW5kIGlmIHRoZSBob29rIGNhbm5vdCBkZWNvZGUgdGhlCi1hcmd1bWVudCwgaXQgc2hvdWxkIHJhaXNlIDpleGM6YEltcG9ydEVycm9yYC4KK3NpZ25hbCB0aGF0IHRoZSBob29rIGNhbm5vdCBmaW5kIGEgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYC4KK2ZvciB0aGF0IDp0ZXJtOmBwYXRoIGVudHJ5YC4gIFRoZQorZXhjZXB0aW9uIGlzIGlnbm9yZWQgYW5kIDp0ZXJtOmBpbXBvcnQgcGF0aGAgaXRlcmF0aW9uIGNvbnRpbnVlcy4gIFRoZSBob29rCitzaG91bGQgZXhwZWN0IGVpdGhlciBhIHN0cmluZyBvciBieXRlcyBvYmplY3Q7IHRoZSBlbmNvZGluZyBvZiBieXRlcyBvYmplY3RzCitpcyB1cCB0byB0aGUgaG9vayAoZS5nLiBpdCBtYXkgYmUgYSBmaWxlIHN5c3RlbSBlbmNvZGluZywgVVRGLTgsIG9yIHNvbWV0aGluZworZWxzZSksIGFuZCBpZiB0aGUgaG9vayBjYW5ub3QgZGVjb2RlIHRoZSBhcmd1bWVudCwgaXQgc2hvdWxkIHJhaXNlCis6ZXhjOmBJbXBvcnRFcnJvcmAuCiAKIElmIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgaXRlcmF0aW9uIGVuZHMgd2l0aCBubyA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgCi1iZWluZyByZXR1cm5lZCwgdGhlbiB0aGUgcGF0aCBiYXNlZCBmaW5kZXIncyA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kCi13aWxsIHN0b3JlIGBgTm9uZWBgIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgKHRvIGluZGljYXRlIHRoYXQKLXRoZXJlIGlzIG5vIGZpbmRlciBmb3IgdGhpcyBwYXRoIGVudHJ5KSBhbmQgcmV0dXJuIGBgTm9uZWBgLCBpbmRpY2F0aW5nIHRoYXQKLXRoaXMgOnRlcm06YG1ldGEgcGF0aCBmaW5kZXJgIGNvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUuCitiZWluZyByZXR1cm5lZCwgdGhlbiB0aGUgcGF0aCBiYXNlZCBmaW5kZXIncworOm1ldGg6YH5pbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjYCBtZXRob2Qgd2lsbCBzdG9yZSBgYE5vbmVgYAoraW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCAodG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyBmaW5kZXIgZm9yCit0aGlzIHBhdGggZW50cnkpIGFuZCByZXR1cm4gYGBOb25lYGAsIGluZGljYXRpbmcgdGhhdCB0aGlzCis6dGVybTpgbWV0YSBwYXRoIGZpbmRlcmAgY291bGQgbm90IGZpbmQgdGhlIG1vZHVsZS4KIAogSWYgYSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgICppcyogcmV0dXJuZWQgYnkgb25lIG9mIHRoZSA6dGVybTpgcGF0aCBlbnRyeQogaG9va2AgY2FsbGFibGVzIG9uIDpkYXRhOmBzeXMucGF0aF9ob29rc2AsIHRoZW4gdGhlIGZvbGxvd2luZyBwcm90b2NvbCBpcyB1c2VkCi10byBhc2sgdGhlIGZpbmRlciBmb3IgYSBtb2R1bGUgbG9hZGVyLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLgotCit0byBhc2sgdGhlIGZpbmRlciBmb3IgYSBtb2R1bGUgc3BlYywgd2hpY2ggaXMgdGhlbiB1c2VkIHdoZW4gbG9hZGluZyB0aGUKK21vZHVsZS4KIAogUGF0aCBlbnRyeSBmaW5kZXIgcHJvdG9jb2wKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEluIG9yZGVyIHRvIHN1cHBvcnQgaW1wb3J0cyBvZiBtb2R1bGVzIGFuZCBpbml0aWFsaXplZCBwYWNrYWdlcyBhbmQgYWxzbyB0bwogY29udHJpYnV0ZSBwb3J0aW9ucyB0byBuYW1lc3BhY2UgcGFja2FnZXMsIHBhdGggZW50cnkgZmluZGVycyBtdXN0IGltcGxlbWVudAotdGhlIDptZXRoOmBmaW5kX2xvYWRlcigpYCBtZXRob2QuCit0aGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX3NwZWNgIG1ldGhvZC4KIAotOm1ldGg6YGZpbmRfbG9hZGVyKClgIHRha2VzIG9uZSBhcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQotbW9kdWxlIGJlaW5nIGltcG9ydGVkLiAgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSAyLXR1cGxlIHdoZXJlIHRoZQotZmlyc3QgaXRlbSBpcyB0aGUgbG9hZGVyIGFuZCB0aGUgc2Vjb25kIGl0ZW0gaXMgYSBuYW1lc3BhY2UgOnRlcm06YHBvcnRpb25gLgotV2hlbiB0aGUgZmlyc3QgaXRlbSAoaS5lLiB0aGUgbG9hZGVyKSBpcyBgYE5vbmVgYCwgdGhpcyBtZWFucyB0aGF0IHdoaWxlIHRoZQotcGF0aCBlbnRyeSBmaW5kZXIgZG9lcyBub3QgaGF2ZSBhIGxvYWRlciBmb3IgdGhlIG5hbWVkIG1vZHVsZSwgaXQga25vd3MgdGhhdCB0aGUKLXBhdGggZW50cnkgY29udHJpYnV0ZXMgdG8gYSBuYW1lc3BhY2UgcG9ydGlvbiBmb3IgdGhlIG5hbWVkIG1vZHVsZS4gIFRoaXMgd2lsbAotYWxtb3N0IGFsd2F5cyBiZSB0aGUgY2FzZSB3aGVyZSBQeXRob24gaXMgYXNrZWQgdG8gaW1wb3J0IGEgbmFtZXNwYWNlIHBhY2thZ2UKLXRoYXQgaGFzIG5vIHBoeXNpY2FsIHByZXNlbmNlIG9uIHRoZSBmaWxlIHN5c3RlbS4gIFdoZW4gYSBwYXRoIGVudHJ5IGZpbmRlcgotcmV0dXJucyBgYE5vbmVgYCBmb3IgdGhlIGxvYWRlciwgdGhlIHNlY29uZCBpdGVtIG9mIHRoZSAyLXR1cGxlIHJldHVybiB2YWx1ZQotbXVzdCBiZSBhIHNlcXVlbmNlLCBhbHRob3VnaCBpdCBjYW4gYmUgZW1wdHkuCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfc3BlY2AgdGFrZXMgdHdvIGFyZ3VtZW50LCB0aGUKK2Z1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQsIGFuZCB0aGUgKG9wdGlvbmFsKSB0YXJnZXQKK21vZHVsZS4gIGBgZmluZF9zcGVjKClgYCByZXR1cm5zIGEgZnVsbHkgcG9wdWxhdGVkIHNwZWMgZm9yIHRoZSBtb2R1bGUuCitUaGlzIHNwZWMgd2lsbCBhbHdheXMgaGF2ZSAibG9hZGVyIiBzZXQgKHdpdGggb25lIGV4Y2VwdGlvbikuCiAKLUlmIDptZXRoOmBmaW5kX2xvYWRlcigpYCByZXR1cm5zIGEgbm9uLWBgTm9uZWBgIGxvYWRlciB2YWx1ZSwgdGhlIHBvcnRpb24gaXMKLWlnbm9yZWQgYW5kIHRoZSBsb2FkZXIgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcGF0aCBiYXNlZCBmaW5kZXIsIHRlcm1pbmF0aW5nCi10aGUgc2VhcmNoIHRocm91Z2ggdGhlIHBhdGggZW50cmllcy4KK1RvIGluZGljYXRlIHRvIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRoYXQgdGhlIHNwZWMgcmVwcmVzZW50cyBhIG5hbWVzcGFjZQorOnRlcm06YHBvcnRpb25gLiB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgc2V0cyAibG9hZGVyIiBvbiB0aGUgc3BlYyB0bworYGBOb25lYGAgYW5kICJzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyIgdG8gYSBsaXN0IGNvbnRhaW5pbmcgdGhlCitwb3J0aW9uLgogCi1Gb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGltcG9ydAotcHJvdG9jb2wsIG1hbnkgcGF0aCBlbnRyeSBmaW5kZXJzIGFsc28gc3VwcG9ydCB0aGUgc2FtZSwKLXRyYWRpdGlvbmFsIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QgdGhhdCBtZXRhIHBhdGggZmluZGVycyBzdXBwb3J0LgotSG93ZXZlciBwYXRoIGVudHJ5IGZpbmRlciA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kcyBhcmUgbmV2ZXIgY2FsbGVkCi13aXRoIGEgYGBwYXRoYGAgYXJndW1lbnQgKHRoZXkgYXJlIGV4cGVjdGVkIHRvIHJlY29yZCB0aGUgYXBwcm9wcmlhdGUKLXBhdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5pdGlhbCBjYWxsIHRvIHRoZSBwYXRoIGhvb2spLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9zcGVjYCByZXBsYWNlZAorICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX2xvYWRlcmAgYW5kCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfbW9kdWxlYCwgYm90aCBvZiB3aGljaAorICAgYXJlIG5vdyBkZXByZWNhdGVkLCBidXQgd2lsbCBiZSB1c2VkIGlmIGBgZmluZF9zcGVjKClgYCBpcyBub3QgZGVmaW5lZC4KIAotVGhlIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2Qgb24gcGF0aCBlbnRyeSBmaW5kZXJzIGlzIGRlcHJlY2F0ZWQsCi1hcyBpdCBkb2VzIG5vdCBhbGxvdyB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgdG8gY29udHJpYnV0ZSBwb3J0aW9ucyB0bwotbmFtZXNwYWNlIHBhY2thZ2VzLiBJbnN0ZWFkIHBhdGggZW50cnkgZmluZGVycyBzaG91bGQgaW1wbGVtZW50IHRoZQotOm1ldGg6YGZpbmRfbG9hZGVyKClgIG1ldGhvZCBhcyBkZXNjcmliZWQgYWJvdmUuIElmIGl0IGV4aXN0cyBvbiB0aGUgcGF0aAotZW50cnkgZmluZGVyLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGFsd2F5cyBjYWxsIDptZXRoOmBmaW5kX2xvYWRlcigpYAotaW4gcHJlZmVyZW5jZSB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAuCisgICBPbGRlciBwYXRoIGVudHJ5IGZpbmRlcnMgbWF5IGltcGxlbWVudCBvbmUgb2YgdGhlc2UgdHdvIGRlcHJlY2F0ZWQgbWV0aG9kcworICAgaW5zdGVhZCBvZiBgYGZpbmRfc3BlYygpYGAuICBUaGUgbWV0aG9kcyBhcmUgc3RpbGwgcmVzcGVjdGVkIGZvciB0aGUKKyAgIHNha2Ugb2YgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIEhvd2V2ZXZlciwgaWYgYGBmaW5kX3NwZWMoKWBgIGlzCisgICBpbXBsZW1lbnRlZCBvbiB0aGUgcGF0aCBlbnRyeSBmaW5kZXIsIHRoZSBsZWdhY3kgbWV0aG9kcyBhcmUgaWdub3JlZC4KKworICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX2xvYWRlcmAgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUKKyAgIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICBgYGZpbmRfbG9hZGVyKClgYAorICAgcmV0dXJucyBhIDItdHVwbGUgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgdGhlIGxvYWRlciBhbmQgdGhlIHNlY29uZCBpdGVtCisgICBpcyBhIG5hbWVzcGFjZSA6dGVybTpgcG9ydGlvbmAuICBXaGVuIHRoZSBmaXJzdCBpdGVtIChpLmUuIHRoZSBsb2FkZXIpIGlzCisgICBgYE5vbmVgYCwgdGhpcyBtZWFucyB0aGF0IHdoaWxlIHRoZSBwYXRoIGVudHJ5IGZpbmRlciBkb2VzIG5vdCBoYXZlIGEKKyAgIGxvYWRlciBmb3IgdGhlIG5hbWVkIG1vZHVsZSwgaXQga25vd3MgdGhhdCB0aGUgcGF0aCBlbnRyeSBjb250cmlidXRlcyB0bworICAgYSBuYW1lc3BhY2UgcG9ydGlvbiBmb3IgdGhlIG5hbWVkIG1vZHVsZS4gIFRoaXMgd2lsbCBhbG1vc3QgYWx3YXlzIGJlIHRoZQorICAgY2FzZSB3aGVyZSBQeXRob24gaXMgYXNrZWQgdG8gaW1wb3J0IGEgbmFtZXNwYWNlIHBhY2thZ2UgdGhhdCBoYXMgbm8KKyAgIHBoeXNpY2FsIHByZXNlbmNlIG9uIHRoZSBmaWxlIHN5c3RlbS4gIFdoZW4gYSBwYXRoIGVudHJ5IGZpbmRlciByZXR1cm5zCisgICBgYE5vbmVgYCBmb3IgdGhlIGxvYWRlciwgdGhlIHNlY29uZCBpdGVtIG9mIHRoZSAyLXR1cGxlIHJldHVybiB2YWx1ZSBtdXN0CisgICBiZSBhIHNlcXVlbmNlLCBhbHRob3VnaCBpdCBjYW4gYmUgZW1wdHkuCisKKyAgIElmIGBgZmluZF9sb2FkZXIoKWBgIHJldHVybnMgYSBub24tYGBOb25lYGAgbG9hZGVyIHZhbHVlLCB0aGUgcG9ydGlvbiBpcworICAgaWdub3JlZCBhbmQgdGhlIGxvYWRlciBpcyByZXR1cm5lZCBmcm9tIHRoZSBwYXRoIGJhc2VkIGZpbmRlciwgdGVybWluYXRpbmcKKyAgIHRoZSBzZWFyY2ggdGhyb3VnaCB0aGUgcGF0aCBlbnRyaWVzLgorCisgICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGltcG9ydAorICAgcHJvdG9jb2wsIG1hbnkgcGF0aCBlbnRyeSBmaW5kZXJzIGFsc28gc3VwcG9ydCB0aGUgc2FtZSwKKyAgIHRyYWRpdGlvbmFsIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZCB0aGF0IG1ldGEgcGF0aCBmaW5kZXJzIHN1cHBvcnQuCisgICBIb3dldmVyIHBhdGggZW50cnkgZmluZGVyIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZHMgYXJlIG5ldmVyIGNhbGxlZAorICAgd2l0aCBhIGBgcGF0aGBgIGFyZ3VtZW50ICh0aGV5IGFyZSBleHBlY3RlZCB0byByZWNvcmQgdGhlIGFwcHJvcHJpYXRlCisgICBwYXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIGluaXRpYWwgY2FsbCB0byB0aGUgcGF0aCBob29rKS4KKworICAgVGhlIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZCBvbiBwYXRoIGVudHJ5IGZpbmRlcnMgaXMgZGVwcmVjYXRlZCwKKyAgIGFzIGl0IGRvZXMgbm90IGFsbG93IHRoZSBwYXRoIGVudHJ5IGZpbmRlciB0byBjb250cmlidXRlIHBvcnRpb25zIHRvCisgICBuYW1lc3BhY2UgcGFja2FnZXMuICBJZiBib3RoIGBgZmluZF9sb2FkZXIoKWBgIGFuZCBgYGZpbmRfbW9kdWxlKClgYAorICAgZXhpc3Qgb24gYSBwYXRoIGVudHJ5IGZpbmRlciwgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBhbHdheXMgY2FsbAorICAgYGBmaW5kX2xvYWRlcigpYGAgaW4gcHJlZmVyZW5jZSB0byBgYGZpbmRfbW9kdWxlKClgYC4KIAogCiBSZXBsYWNpbmcgdGhlIHN0YW5kYXJkIGltcG9ydCBzeXN0ZW0KQEAgLTY0Niw5ICs4MjcsNTQgQEAKIFRvIHNlbGVjdGl2ZWx5IHByZXZlbnQgaW1wb3J0IG9mIHNvbWUgbW9kdWxlcyBmcm9tIGEgaG9vayBlYXJseSBvbiB0aGUKIG1ldGEgcGF0aCAocmF0aGVyIHRoYW4gZGlzYWJsaW5nIHRoZSBzdGFuZGFyZCBpbXBvcnQgc3lzdGVtIGVudGlyZWx5KSwKIGl0IGlzIHN1ZmZpY2llbnQgdG8gcmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIGRpcmVjdGx5IGZyb20KLTptZXRoOmBmaW5kX21vZHVsZWAgaW5zdGVhZCBvZiByZXR1cm5pbmcgYGBOb25lYGAuIFRoZSBsYXR0ZXIgaW5kaWNhdGVzCi10aGF0IHRoZSBtZXRhIHBhdGggc2VhcmNoIHNob3VsZCBjb250aW51ZS4gd2hpbGUgcmFpc2luZyBhbiBleGNlcHRpb24KLXRlcm1pbmF0ZXMgaXQgaW1tZWRpYXRlbHkuCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9zcGVjYCBpbnN0ZWFkIG9mIHJldHVybmluZworYGBOb25lYGAuIFRoZSBsYXR0ZXIgaW5kaWNhdGVzIHRoYXQgdGhlIG1ldGEgcGF0aCBzZWFyY2ggc2hvdWxkIGNvbnRpbnVlLAord2hpbGUgcmFpc2luZyBhbiBleGNlcHRpb24gdGVybWluYXRlcyBpdCBpbW1lZGlhdGVseS4KKworCitTcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBfX21haW5fXworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIDptb2Q6YF9fbWFpbl9fYCBtb2R1bGUgaXMgYSBzcGVjaWFsIGNhc2UgcmVsYXRpdmUgdG8gUHl0aG9uJ3MgaW1wb3J0CitzeXN0ZW0uICBBcyBub3RlZCA6cmVmOmBlbHNld2hlcmUgPHByb2dyYW1zPmAsIHRoZSBgYF9fbWFpbl9fYGAgbW9kdWxlCitpcyBkaXJlY3RseSBpbml0aWFsaXplZCBhdCBpbnRlcnByZXRlciBzdGFydHVwLCBtdWNoIGxpa2UgOm1vZDpgc3lzYCBhbmQKKzptb2Q6YGJ1aWx0aW5zYC4gIEhvd2V2ZXIsIHVubGlrZSB0aG9zZSB0d28sIGl0IGRvZXNuJ3Qgc3RyaWN0bHkKK3F1YWxpZnkgYXMgYSBidWlsdC1pbiBtb2R1bGUuICBUaGlzIGlzIGJlY2F1c2UgdGhlIG1hbm5lciBpbiB3aGljaAorYGBfX21haW5fX2BgIGlzIGluaXRpYWxpemVkIGRlcGVuZHMgb24gdGhlIGZsYWdzIGFuZCBvdGhlciBvcHRpb25zIHdpdGgKK3doaWNoIHRoZSBpbnRlcnByZXRlciBpcyBpbnZva2VkLgorCisuLiBfbWFpbl9zcGVjOgorCitfX21haW5fXy5fX3NwZWNfXworLS0tLS0tLS0tLS0tLS0tLS0KKworRGVwZW5kaW5nIG9uIGhvdyA6bW9kOmBfX21haW5fX2AgaXMgaW5pdGlhbGl6ZWQsIGBgX19tYWluX18uX19zcGVjX19gYAorZ2V0cyBzZXQgYXBwcm9wcmlhdGVseSBvciB0byBgYE5vbmVgYC4KKworV2hlbiBQeXRob24gaXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtbWAgb3B0aW9uLCBgYF9fc3BlY19fYGAgaXMgc2V0Cit0byB0aGUgbW9kdWxlIHNwZWMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIG9yIHBhY2thZ2UuIGBgX19zcGVjX19gYCBpcworYWxzbyBwb3B1bGF0ZWQgd2hlbiB0aGUgYGBfX21haW5fX2BgIG1vZHVsZSBpcyBsb2FkZWQgYXMgcGFydCBvZiBleGVjdXRpbmcgYQorZGlyZWN0b3J5LCB6aXBmaWxlIG9yIG90aGVyIDpkYXRhOmBzeXMucGF0aGAgZW50cnkuCisKK0luIDpyZWY6YHRoZSByZW1haW5pbmcgY2FzZXMgPHVzaW5nLW9uLWludGVyZmFjZS1vcHRpb25zPmAKK2BgX19tYWluX18uX19zcGVjX19gYCBpcyBzZXQgdG8gYGBOb25lYGAsIGFzIHRoZSBjb2RlIHVzZWQgdG8gcG9wdWxhdGUgdGhlCis6bW9kOmBfX21haW5fX2AgZG9lcyBub3QgY29ycmVzcG9uZCBkaXJlY3RseSB3aXRoIGFuIGltcG9ydGFibGUgbW9kdWxlOgorCistIGludGVyYWN0aXZlIHByb21wdAorLSAtYyBzd2l0Y2gKKy0gcnVubmluZyBmcm9tIHN0ZGluCistIHJ1bm5pbmcgZGlyZWN0bHkgZnJvbSBhIHNvdXJjZSBvciBieXRlY29kZSBmaWxlCisKK05vdGUgdGhhdCBgYF9fbWFpbl9fLl9fc3BlY19fYGAgaXMgYWx3YXlzIGBgTm9uZWBgIGluIHRoZSBsYXN0IGNhc2UsCisqZXZlbiBpZiogdGhlIGZpbGUgY291bGQgdGVjaG5pY2FsbHkgYmUgaW1wb3J0ZWQgZGlyZWN0bHkgYXMgYSBtb2R1bGUKK2luc3RlYWQuIFVzZSB0aGUgOm9wdGlvbjpgLW1gIHN3aXRjaCBpZiB2YWxpZCBtb2R1bGUgbWV0YWRhdGEgaXMgZGVzaXJlZAoraW4gOm1vZDpgX19tYWluX19gLgorCitOb3RlIGFsc28gdGhhdCBldmVuIHdoZW4gYGBfX21haW5fX2BgIGNvcnJlc3BvbmRzIHdpdGggYW4gaW1wb3J0YWJsZSBtb2R1bGUKK2FuZCBgYF9fbWFpbl9fLl9fc3BlY19fYGAgaXMgc2V0IGFjY29yZGluZ2x5LCB0aGV5J3JlIHN0aWxsIGNvbnNpZGVyZWQKKypkaXN0aW5jdCogbW9kdWxlcy4gVGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QgdGhhdCBibG9ja3MgZ3VhcmRlZCBieQorYGBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOmBgIGNoZWNrcyBvbmx5IGV4ZWN1dGUgd2hlbiB0aGUgbW9kdWxlIGlzIHVzZWQKK3RvIHBvcHVsYXRlIHRoZSBgYF9fbWFpbl9fYGAgbmFtZXNwYWNlLCBhbmQgbm90IGR1cmluZyBub3JtYWwgaW1wb3J0LgogCiAKIE9wZW4gaXNzdWVzCkBAIC02NjMsNiArODg5LDEyIEBACiBYWFggcnVucHksIHBrZ3V0aWwsIGV0IGFsIGluIHRoZSBsaWJyYXJ5IG1hbnVhbCBzaG91bGQgYWxsIGdldCAiU2VlIEFsc28iCiBsaW5rcyBhdCB0aGUgdG9wIHBvaW50aW5nIHRvIHRoZSBuZXcgaW1wb3J0IHN5c3RlbSBzZWN0aW9uLgogCitYWFggQWRkIG1vcmUgZXhwbGFuYXRpb24gcmVnYXJkaW5nIHRoZSBkaWZmZXJlbnQgd2F5cyBpbiB3aGljaAorYGBfX21haW5fX2BgIGlzIGluaXRpYWxpemVkPworCitYWFggQWRkIG1vcmUgaW5mbyBvbiBgYF9fbWFpbl9fYGAgcXVpcmtzL3BpdGZhbGxzIChpLmUuIGNvcHkgZnJvbQorOnBlcDpgMzk1YCkuCisKIAogUmVmZXJlbmNlcwogPT09PT09PT09PQpAQCAtNjg4LDYgKzkyMCwxMSBAQAogCiA6cGVwOmAzMzhgIGRlZmluZXMgZXhlY3V0aW5nIG1vZHVsZXMgYXMgc2NyaXB0cy4KIAorOnBlcDpgNDUxYCBhZGRzIHRoZSBlbmNhcHN1bGF0aW9uIG9mIHBlci1tb2R1bGUgaW1wb3J0IHN0YXRlIGluIHNwZWMKK29iamVjdHMuICBJdCBhbHNvIG9mZi1sb2FkcyBtb3N0IG9mIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mCitsb2FkZXJzIGJhY2sgb250byB0aGUgaW1wb3J0IG1hY2hpbmVyeS4gIFRoZXNlIGNoYW5nZXMgYWxsb3cgdGhlCitkZXByZWNhdGlvbiBvZiBzZXZlcmFsIEFQSXMgaW4gdGhlIGltcG9ydCBzeXN0ZW0gYW5kIGFsc28gYWRkaXRpb24gb2YgbmV3CittZXRob2RzIHRvIGZpbmRlcnMgYW5kIGxvYWRlcnMuCiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0IGIvRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdAppbmRleCAwZWQzZDNiLi42NjE3YzNiIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QKQEAgLTc2LDcgKzc2LDcgQEAKIEVuY29kaW5nIGRlY2xhcmF0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGluZGV4Ojogc291cmNlIGNoYXJhY3RlciBzZXQsIGVuY29kaW5ncworLi4gaW5kZXg6OiBzb3VyY2UgY2hhcmFjdGVyIHNldCwgZW5jb2RpbmcgZGVjbGFyYXRpb25zIChzb3VyY2UgZmlsZSkKIAogSWYgYSBjb21tZW50IGluIHRoZSBmaXJzdCBvciBzZWNvbmQgbGluZSBvZiB0aGUgUHl0aG9uIHNjcmlwdCBtYXRjaGVzIHRoZQogcmVndWxhciBleHByZXNzaW9uIGBgY29kaW5nWz06XVxzKihbLVx3Ll0rKWBgLCB0aGlzIGNvbW1lbnQgaXMgcHJvY2Vzc2VkIGFzIGFuCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QgYi9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QKaW5kZXggNDBiYmMzOS4uMTc0OGQ1YSAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLnJzdApAQCAtNyw3ICs3LDcgQEAKIAogLi4gaW5kZXg6OiBwYWlyOiBzaW1wbGU7IHN0YXRlbWVudAogCi1TaW1wbGUgc3RhdGVtZW50cyBhcmUgY29tcHJpc2VkIHdpdGhpbiBhIHNpbmdsZSBsb2dpY2FsIGxpbmUuIFNldmVyYWwgc2ltcGxlCitBIHNpbXBsZSBzdGF0ZW1lbnQgaXMgY29tcHJpc2VkIHdpdGhpbiBhIHNpbmdsZSBsb2dpY2FsIGxpbmUuIFNldmVyYWwgc2ltcGxlCiBzdGF0ZW1lbnRzIG1heSBvY2N1ciBvbiBhIHNpbmdsZSBsaW5lIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLiAgVGhlIHN5bnRheCBmb3IKIHNpbXBsZSBzdGF0ZW1lbnRzIGlzOgogCkBAIC03MCw2ICs3MCw3IEBACiA9PT09PT09PT09PT09PT09PT09PT0KIAogLi4gaW5kZXg6OgorICAgc2luZ2xlOiA9OyBhc3NpZ25tZW50IHN0YXRlbWVudAogICAgcGFpcjogYXNzaWdubWVudDsgc3RhdGVtZW50CiAgICBwYWlyOiBiaW5kaW5nOyBuYW1lCiAgICBwYWlyOiByZWJpbmRpbmc7IG5hbWUKQEAgLTkwLDggKzkxLDggQEAKICAgICAgICAgIDogfCBgc2xpY2luZ2AKICAgICAgICAgIDogfCAiKiIgYHRhcmdldGAKIAotKFNlZSBzZWN0aW9uIDpyZWY6YHByaW1hcmllc2AgZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlCi1zeW1ib2xzLikKKyhTZWUgc2VjdGlvbiA6cmVmOmBwcmltYXJpZXNgIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciAqYXR0cmlidXRlcmVmKiwKKypzdWJzY3JpcHRpb24qLCBhbmQgKnNsaWNpbmcqLikKIAogQW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGxpc3QgKHJlbWVtYmVyIHRoYXQgdGhpcyBjYW4gYmUKIGEgc2luZ2xlIGV4cHJlc3Npb24gb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgdGhlIGxhdHRlciB5aWVsZGluZyBhIHR1cGxlKSBhbmQKQEAgLTIyNyw3ICsyMjgsNyBAQAogICBpbmNsdXNpdmUuICBGaW5hbGx5LCB0aGUgc2VxdWVuY2Ugb2JqZWN0IGlzIGFza2VkIHRvIHJlcGxhY2UgdGhlIHNsaWNlIHdpdGgKICAgdGhlIGl0ZW1zIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZS4gIFRoZSBsZW5ndGggb2YgdGhlIHNsaWNlIG1heSBiZSBkaWZmZXJlbnQKICAgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZSwgdGh1cyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9mIHRoZQotICB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSBvYmplY3QgYWxsb3dzIGl0LgorICB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSB0YXJnZXQgc2VxdWVuY2UgYWxsb3dzIGl0LgogCiAuLiBpbXBsLWRldGFpbDo6CiAKQEAgLTIzNSwxNCArMjM2LDE1IEBACiAgICBhcyBmb3IgZXhwcmVzc2lvbnMsIGFuZCBpbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbgogICAgcGhhc2UsIGNhdXNpbmcgbGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy4KIAotV0FSTklORzogQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHMgYmV0d2VlbiB0aGUKLWxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSAnc2FmZScgKGZvciBleGFtcGxlIGBgYSwgYiA9IGIsIGFgYAotc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZSBjb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvIHZhcmlhYmxlcwotYXJlIG5vdCBzYWZlISAgRm9yIGluc3RhbmNlLCB0aGUgZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIGBgWzAsIDJdYGA6OgorQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHMgYmV0d2VlbiB0aGUKK2xlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSAnc2ltdWx0YW5lbm91cycgKGZvciBleGFtcGxlIGBgYSwgYiA9CitiLCBhYGAgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZSBjb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvCit2YXJpYWJsZXMgb2NjdXIgbGVmdC10by1yaWdodCwgc29tZXRpbWVzIHJlc3VsdGluZyBpbiBjb25mdXNpb24uICBGb3IgaW5zdGFuY2UsCit0aGUgZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIGBgWzAsIDJdYGA6OgogCiAgICB4ID0gWzAsIDFdCiAgICBpID0gMAotICAgaSwgeFtpXSA9IDEsIDIKKyAgIGksIHhbaV0gPSAxLCAyICAgICAgICAgIyBpIGlzIHVwZGF0ZWQsIHRoZW4geFtpXSBpcyB1cGRhdGVkCiAgICBwcmludCh4KQogCiAKQEAgLTI2MCw2ICsyNjIsMTggQEAKIC4uIGluZGV4OjoKICAgIHBhaXI6IGF1Z21lbnRlZDsgYXNzaWdubWVudAogICAgc2luZ2xlOiBzdGF0ZW1lbnQ7IGFzc2lnbm1lbnQsIGF1Z21lbnRlZAorICAgc2luZ2xlOiArPTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogLT07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6ICo9OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiAvPTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogJT07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6ICY9OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiBePTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogfD07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6ICoqPTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogLy89OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiA+Pj07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6IDw8PTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKIAogQXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIGNvbWJpbmF0aW9uLCBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQsIG9mIGEgYmluYXJ5CiBvcGVyYXRpb24gYW5kIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50OgpAQCAtMjcwLDcgKzI4NCw3IEBACiAgICBhdWdvcDogIis9IiB8ICItPSIgfCAiKj0iIHwgIi89IiB8ICIvLz0iIHwgIiU9IiB8ICIqKj0iCiAgICAgICAgIDogfCAiPj49IiB8ICI8PD0iIHwgIiY9IiB8ICJePSIgfCAifD0iCiAKLShTZWUgc2VjdGlvbiA6cmVmOmBwcmltYXJpZXNgIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZQorKFNlZSBzZWN0aW9uIDpyZWY6YHByaW1hcmllc2AgZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgb2YgdGhlIGxhc3QgdGhyZWUKIHN5bWJvbHMuKQogCiBBbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWwgYXNzaWdubWVudApAQCAtMjg0LDYgKzI5OCwxMSBAQAogaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdCByYXRoZXIgdGhhbiBjcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kCiBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LCB0aGUgb2xkIG9iamVjdCBpcyBtb2RpZmllZCBpbnN0ZWFkLgogCitVbmxpa2Ugbm9ybWFsIGFzc2lnbm1lbnRzLCBhdWdtZW50ZWQgYXNzaWdubWVudHMgZXZhbHVhdGUgdGhlIGxlZnQtaGFuZCBzaWRlCisqYmVmb3JlKiBldmFsdWF0aW5nIHRoZSByaWdodC1oYW5kIHNpZGUuICBGb3IgZXhhbXBsZSwgYGBhW2ldICs9IGYoeClgYCBmaXJzdAorbG9va3MtdXAgYGBhW2ldYGAsIHRoZW4gaXQgZXZhbHVhdGVzIGBgZih4KWBgIGFuZCBwZXJmb3JtcyB0aGUgYWRkaXRpb24sIGFuZAorbGFzdGx5LCBpdCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIGBgYVtpXWBgLgorCiBXaXRoIHRoZSBleGNlcHRpb24gb2YgYXNzaWduaW5nIHRvIHR1cGxlcyBhbmQgbXVsdGlwbGUgdGFyZ2V0cyBpbiBhIHNpbmdsZQogc3RhdGVtZW50LCB0aGUgYXNzaWdubWVudCBkb25lIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUKIHNhbWUgd2F5IGFzIG5vcm1hbCBhc3NpZ25tZW50cy4gU2ltaWxhcmx5LCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlCkBAIC02NDUsNyArNjY0LDcgQEAKIGFzIHRob3VnaCB0aGUgY2xhdXNlcyBoYWQgYmVlbiBzZXBhcmF0ZWQgb3V0IGludG8gaW5kaXZpZGl1YWwgaW1wb3J0CiBzdGF0ZW1lbnRzLgogCi1UaGUgZGV0YWlscyBvZiB0aGUgZmlyc3Qgc3RlcCwgZmluZGluZyBhbmQgbG9hZGluZyBtb2R1bGVzIGlzIGRlc2NyaWJlZCBpbgorVGhlIGRldGFpbHMgb2YgdGhlIGZpcnN0IHN0ZXAsIGZpbmRpbmcgYW5kIGxvYWRpbmcgbW9kdWxlcyBhcmUgZGVzY3JpYmVkIGluCiBncmVhdGVyIGRldGFpbCBpbiB0aGUgc2VjdGlvbiBvbiB0aGUgOnJlZjpgaW1wb3J0IHN5c3RlbSA8aW1wb3J0c3lzdGVtPmAsCiB3aGljaCBhbHNvIGRlc2NyaWJlcyB0aGUgdmFyaW91cyB0eXBlcyBvZiBwYWNrYWdlcyBhbmQgbW9kdWxlcyB0aGF0IGNhbgogYmUgaW1wb3J0ZWQsIGFzIHdlbGwgYXMgYWxsIHRoZSBob29rcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGN1c3RvbWl6ZQpAQCAtNjU2LDYgKzY3NSw4IEBACiBJZiB0aGUgcmVxdWVzdGVkIG1vZHVsZSBpcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LCBpdCB3aWxsIGJlIG1hZGUKIGF2YWlsYWJsZSBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGluIG9uZSBvZiB0aHJlZSB3YXlzOgogCisuLiBpbmRleDo6IHNpbmdsZTogYXM7IGltcG9ydCBzdGF0ZW1lbnQKKwogKiBJZiB0aGUgbW9kdWxlIG5hbWUgaXMgZm9sbG93ZWQgYnkgOmtleXdvcmQ6YGFzYCwgdGhlbiB0aGUgbmFtZQogICBmb2xsb3dpbmcgOmtleXdvcmQ6YGFzYCBpcyBib3VuZCBkaXJlY3RseSB0byB0aGUgaW1wb3J0ZWQgbW9kdWxlLgogKiBJZiBubyBvdGhlciBuYW1lIGlzIHNwZWNpZmllZCwgYW5kIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQgaXMgYSB0b3AKQEAgLTY3NCw3ICs2OTUsNyBAQAogCiBUaGUgOmtleXdvcmQ6YGZyb21gIGZvcm0gdXNlcyBhIHNsaWdodGx5IG1vcmUgY29tcGxleCBwcm9jZXNzOgogCi0jLiBmaW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIHRoZSA6a2V5d29yZDpgZnJvbWAgY2xhdXNlIGxvYWRpbmcgYW5kCisjLiBmaW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIHRoZSA6a2V5d29yZDpgZnJvbWAgY2xhdXNlLCBsb2FkaW5nIGFuZAogICAgaW5pdGlhbGl6aW5nIGl0IGlmIG5lY2Vzc2FyeTsKICMuIGZvciBlYWNoIG9mIHRoZSBpZGVudGlmaWVycyBzcGVjaWZpZWQgaW4gdGhlIDprZXl3b3JkOmBpbXBvcnRgIGNsYXVzZXM6CiAKQEAgLTY4Miw3ICs3MDMsNyBAQAogICAgIy4gaWYgbm90LCBhdHRlbXB0IHRvIGltcG9ydCBhIHN1Ym1vZHVsZSB3aXRoIHRoYXQgbmFtZSBhbmQgdGhlbgogICAgICAgY2hlY2sgdGhlIGltcG9ydGVkIG1vZHVsZSBhZ2FpbiBmb3IgdGhhdCBhdHRyaWJ1dGUKICAgICMuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kLCA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgotICAgIy4gb3RoZXJ3aXNlLCBhIHJlZmVyZW5jZSB0byB0aGF0IHZhbHVlIGlzIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UsCisgICAjLiBvdGhlcndpc2UsIGEgcmVmZXJlbmNlIHRvIHRoYXQgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UsCiAgICAgICB1c2luZyB0aGUgbmFtZSBpbiB0aGUgOmtleXdvcmQ6YGFzYCBjbGF1c2UgaWYgaXQgaXMgcHJlc2VudCwKICAgICAgIG90aGVyd2lzZSB1c2luZyB0aGUgYXR0cmlidXRlIG5hbWUKIApAQCAtNzExLDkgKzczMiw5IEBACiBsaWJyYXJ5IG1vZHVsZXMgd2hpY2ggd2VyZSBpbXBvcnRlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSkuCiAKIFRoZSA6a2V5d29yZDpgZnJvbWAgZm9ybSB3aXRoIGBgKmBgIG1heSBvbmx5IG9jY3VyIGluIGEgbW9kdWxlIHNjb3BlLiAgVGhlIHdpbGQKLWNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgb25seSBhbGxvd2VkIGF0IHRoZSBtb2R1bGUgbGV2ZWwuCi1BdHRlbXB0aW5nIHRvIHVzZSBpdCBpbiBjbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aWxsIHJhaXNlIGEKLTpleGM6YFN5bnRheEVycm9yYC4KK2NhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYCAtLS0gaXMgb25seSBhbGxvd2VkIGF0IHRoZQorbW9kdWxlIGxldmVsLiAgQXR0ZW1wdGluZyB0byB1c2UgaXQgaW4gY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2lsbCByYWlzZQorYSA6ZXhjOmBTeW50YXhFcnJvcmAuCiAKIC4uIGluZGV4OjoKICAgICBzaW5nbGU6IHJlbGF0aXZlOyBpbXBvcnQKQEAgLTczMiw3ICs3NTMsNyBAQAogVGhlIHNwZWNpZmljYXRpb24gZm9yIHJlbGF0aXZlIGltcG9ydHMgaXMgY29udGFpbmVkIHdpdGhpbiA6cGVwOmAzMjhgLgogCiA6ZnVuYzpgaW1wb3J0bGliLmltcG9ydF9tb2R1bGVgIGlzIHByb3ZpZGVkIHRvIHN1cHBvcnQgYXBwbGljYXRpb25zIHRoYXQKLWRldGVybWluZSB3aGljaCBtb2R1bGVzIG5lZWQgdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5LgorZGV0ZXJtaW5lIGR5bmFtaWNhbGx5IHRoZSBtb2R1bGVzIHRvIGJlIGxvYWRlZC4KIAogCiAuLiBfZnV0dXJlOgpAQCAtNzQ0LDEwICs3NjUsMTIgQEAKIAogQSA6ZGZuOmBmdXR1cmUgc3RhdGVtZW50YCBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIgdGhhdCBhIHBhcnRpY3VsYXIKIG1vZHVsZSBzaG91bGQgYmUgY29tcGlsZWQgdXNpbmcgc3ludGF4IG9yIHNlbWFudGljcyB0aGF0IHdpbGwgYmUgYXZhaWxhYmxlIGluIGEKLXNwZWNpZmllZCBmdXR1cmUgcmVsZWFzZSBvZiBQeXRob24uICBUaGUgZnV0dXJlIHN0YXRlbWVudCBpcyBpbnRlbmRlZCB0byBlYXNlCi1taWdyYXRpb24gdG8gZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvbiB0aGF0IGludHJvZHVjZSBpbmNvbXBhdGlibGUgY2hhbmdlcyB0bwotdGhlIGxhbmd1YWdlLiAgSXQgYWxsb3dzIHVzZSBvZiB0aGUgbmV3IGZlYXR1cmVzIG9uIGEgcGVyLW1vZHVsZSBiYXNpcyBiZWZvcmUKLXRoZSByZWxlYXNlIGluIHdoaWNoIHRoZSBmZWF0dXJlIGJlY29tZXMgc3RhbmRhcmQuCitzcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uIHdoZXJlIHRoZSBmZWF0dXJlIGJlY29tZXMgc3RhbmRhcmQuCisKK1RoZSBmdXR1cmUgc3RhdGVtZW50IGlzIGludGVuZGVkIHRvIGVhc2UgbWlncmF0aW9uIHRvIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob24KK3RoYXQgaW50cm9kdWNlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBsYW5ndWFnZS4gIEl0IGFsbG93cyB1c2Ugb2YgdGhlIG5ldworZmVhdHVyZXMgb24gYSBwZXItbW9kdWxlIGJhc2lzIGJlZm9yZSB0aGUgcmVsZWFzZSBpbiB3aGljaCB0aGUgZmVhdHVyZSBiZWNvbWVzCitzdGFuZGFyZC4KIAogLi4gcHJvZHVjdGlvbmxpc3Q6OiAqCiAgICBmdXR1cmVfc3RhdGVtZW50OiAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiIGZlYXR1cmUgWyJhcyIgbmFtZV0KQEAgLTg0Miw3ICs4NjUsNyBAQAogCiAuLiBpbXBsLWRldGFpbDo6CiAKLSAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGVuZm9yY2UgdGhlIGxhdHRlciB0d28gcmVzdHJpY3Rpb25zLCBidXQKKyAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGVuZm9yY2UgdGhlIHR3byByZXN0cmljdGlvbnMsIGJ1dAogICAgcHJvZ3JhbXMgc2hvdWxkIG5vdCBhYnVzZSB0aGlzIGZyZWVkb20sIGFzIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGVuZm9yY2UKICAgIHRoZW0gb3Igc2lsZW50bHkgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtLgogCkBAIC04NzUsMTYgKzg5OCwxNiBAQAogICAgICAgICAgICAgICAgIDogfCAibm9ubG9jYWwiIGlkZW50aWZpZXIgYXVnb3AgZXhwcmVzc2lvbl9saXN0CiAKIFRoZSA6a2V5d29yZDpgbm9ubG9jYWxgIHN0YXRlbWVudCBjYXVzZXMgdGhlIGxpc3RlZCBpZGVudGlmaWVycyB0byByZWZlciB0bwotcHJldmlvdXNseSBib3VuZCB2YXJpYWJsZXMgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlLiAgVGhpcyBpcyBpbXBvcnRhbnQKLWJlY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGJpbmRpbmcgaXMgdG8gc2VhcmNoIHRoZSBsb2NhbCBuYW1lc3BhY2UKLWZpcnN0LiAgVGhlIHN0YXRlbWVudCBhbGxvd3MgZW5jYXBzdWxhdGVkIGNvZGUgdG8gcmViaW5kIHZhcmlhYmxlcyBvdXRzaWRlIG9mCi10aGUgbG9jYWwgc2NvcGUgYmVzaWRlcyB0aGUgZ2xvYmFsIChtb2R1bGUpIHNjb3BlLgorcHJldmlvdXNseSBib3VuZCB2YXJpYWJsZXMgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGV4Y2x1ZGluZyBnbG9iYWxzLgorVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYmluZGluZyBpcyB0byBzZWFyY2ggdGhlCitsb2NhbCBuYW1lc3BhY2UgZmlyc3QuICBUaGUgc3RhdGVtZW50IGFsbG93cyBlbmNhcHN1bGF0ZWQgY29kZSB0byByZWJpbmQKK3ZhcmlhYmxlcyBvdXRzaWRlIG9mIHRoZSBsb2NhbCBzY29wZSBiZXNpZGVzIHRoZSBnbG9iYWwgKG1vZHVsZSkgc2NvcGUuCiAKIC4uIFhYWCBub3QgaW1wbGVtZW50ZWQKICAgIFRoZSA6a2V5d29yZDpgbm9ubG9jYWxgIHN0YXRlbWVudCBtYXkgcHJlcGVuZCBhbiBhc3NpZ25tZW50IG9yIGF1Z21lbnRlZAogICAgYXNzaWdubWVudCwgYnV0IG5vdCBhbiBleHByZXNzaW9uLgogCi1OYW1lcyBsaXN0ZWQgaW4gYSA6a2V5d29yZDpgbm9ubG9jYWxgIHN0YXRlbWVudCwgdW5saWtlIHRvIHRob3NlIGxpc3RlZCBpbiBhCitOYW1lcyBsaXN0ZWQgaW4gYSA6a2V5d29yZDpgbm9ubG9jYWxgIHN0YXRlbWVudCwgdW5saWtlIHRob3NlIGxpc3RlZCBpbiBhCiA6a2V5d29yZDpgZ2xvYmFsYCBzdGF0ZW1lbnQsIG11c3QgcmVmZXIgdG8gcHJlLWV4aXN0aW5nIGJpbmRpbmdzIGluIGFuCiBlbmNsb3Npbmcgc2NvcGUgKHRoZSBzY29wZSBpbiB3aGljaCBhIG5ldyBiaW5kaW5nIHNob3VsZCBiZSBjcmVhdGVkIGNhbm5vdAogYmUgZGV0ZXJtaW5lZCB1bmFtYmlndW91c2x5KS4KZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbngtYnVpbGQucHkgYi9Eb2MvdG9vbHMvc3BoaW54LWJ1aWxkLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZlNzAyLi4wMDAwMDAwCi0tLSBhL0RvYy90b29scy9zcGhpbngtYnVpbGQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotIiIiCi0gICAgU3BoaW54IC0gUHl0aG9uIGRvY3VtZW50YXRpb24gdG9vbGNoYWluCi0gICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLSAgICA6Y29weXJpZ2h0OiAyMDA3LTIwMTAgYnkgR2VvcmcgQnJhbmRsLgotICAgIDpsaWNlbnNlOiBQeXRob24gbGljZW5zZS4KLSIiIgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgd2FybmluZ3MKLQotIyBHZXQgcmlkIG9mIFVzZXJXYXJuaW5ncyByZXBvcnRlZCBieSBwa2dfcmVzb3VyY2VzLgotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoJ2lnbm9yZScsIGNhdGVnb3J5PVVzZXJXYXJuaW5nLCBtb2R1bGU9J2ppbmphMicpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0KLSAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzozXSA8ICgyLCA0LCAwKSBvciBzeXMudmVyc2lvbl9pbmZvWzozXSA+ICgzLCAwLCAwKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiIiJcCi1FcnJvcjogU3BoaW54IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIHdpdGggUHl0aG9uIDIuNCBvciBuZXdlciAobm90IDMueCB0aG91Z2gpLgotKElmIHlvdSBydW4gdGhpcyBmcm9tIHRoZSBNYWtlZmlsZSwgeW91IGNhbiBzZXQgdGhlIFBZVEhPTiB2YXJpYWJsZQotdG8gdGhlIHBhdGggb2YgYW4gYWx0ZXJuYXRpdmUgaW50ZXJwcmV0ZXIgZXhlY3V0YWJsZSwgZS5nLiwKLWBgbWFrZSBodG1sIFBZVEhPTj1weXRob24yLjVgYCkuCi0iIiIpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBmcm9tIHNwaGlueCBpbXBvcnQgbWFpbgotICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9jX2Fubm90YXRpb25zLnB5IGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9jX2Fubm90YXRpb25zLnB5CmluZGV4IDhiNTE2N2EuLmNmOWFkOWUgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvY19hbm5vdGF0aW9ucy5weQorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2NfYW5ub3RhdGlvbnMucHkKQEAgLTgxLDcgKzgxLDEwIEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIG5vdCBwYXJbMF0uaGFzX2tleSgnbmFtZXMnKSBvciBub3QgcGFyWzBdWyduYW1lcyddOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBlbnRyeSA9IHNlbGYuZ2V0KHBhclswXVsnbmFtZXMnXVswXSkKKyAgICAgICAgICAgIG5hbWUgPSBwYXJbMF1bJ25hbWVzJ11bMF0KKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiYy4iKToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVsyOl0KKyAgICAgICAgICAgIGVudHJ5ID0gc2VsZi5nZXQobmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBlbnRyeToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxpZiBlbnRyeS5yZXN1bHRfdHlwZSBub3QgaW4gKCJQeU9iamVjdCoiLCAiUHlWYXJPYmplY3QqIik6CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2Rvd25sb2FkLmh0bWwgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2Rvd25sb2FkLmh0bWwKaW5kZXggMzFhNTNjZi4uMDU1MDExMSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9kb3dubG9hZC5odG1sCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvZG93bmxvYWQuaHRtbApAQCAtMzQsOCArMzQsOCBAQAogICAgIDx0ZD48YSBocmVmPSJ7eyBkbGJhc2UgfX0vcHl0aG9uLXt7IHJlbGVhc2UgfX0tZG9jcy10ZXh0LnRhci5iejIiPkRvd25sb2FkPC9hPiAoY2EuIDEuNSBNQik8L3RkPgogICA8L3RyPgogIDx0cj48dGQ+RVBVQjwvdGQ+Ci0gICAgPHRkPjxhIGhyZWY9Int7IGRsYmFzZSB9fS9weXRob24te3sgcmVsZWFzZSB9fS1kb2NzLWVwdWIuemlwIj5Eb3dubG9hZDwvYT4gKGNhLiAzLjUgTUIpPC90ZD4KLSAgICA8dGQ+PGEgaHJlZj0ie3sgZGxiYXNlIH19L3B5dGhvbi17eyByZWxlYXNlIH19LWRvY3MtZXB1Yi50YXIuYnoyIj5Eb3dubG9hZDwvYT4gKGNhLiAzLjUgTUIpPC90ZD4KKyAgICA8dGQ+PGEgaHJlZj0ie3sgZGxiYXNlIH19L3B5dGhvbi17eyByZWxlYXNlIH19LWRvY3MuZXB1YiI+RG93bmxvYWQ8L2E+IChjYS4gNC41IE1CKTwvdGQ+CisgICAgPHRkPjwvdGQ+CiAgIDwvdHI+CiA8L3RhYmxlPgogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleGNvbnRlbnQuaHRtbAppbmRleCA3Zjg1NDcwLi45NjkwOTlhIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhjb250ZW50Lmh0bWwKQEAgLTE2LDE0ICsxNiwxNCBAQAogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImhvd3RvL2luZGV4IikgfX0iPlB5dGhvbiBIT1dUT3M8L2E+PGJyLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPmluLWRlcHRoIGRvY3VtZW50cyBvbiBzcGVjaWZpYyB0b3BpY3M8L3NwYW4+PC9wPgogICAgIDwvdGQ+PHRkIHdpZHRoPSI1MCUiPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImluc3RhbGxpbmcvaW5kZXgiKSB9fSI+SW5zdGFsbGluZyBQeXRob24gTW9kdWxlczwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+aW5zdGFsbGluZyBmcm9tIHRoZSBQeXRob24gUGFja2FnZSBJbmRleCAmYW1wOyBvdGhlciBzb3VyY2VzPC9zcGFuPjwvcD4KKyAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJkaXN0cmlidXRpbmcvaW5kZXgiKSB9fSI+RGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzPC9hPjxici8+CisgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5wdWJsaXNoaW5nIG1vZHVsZXMgZm9yIGluc3RhbGxhdGlvbiBieSBvdGhlcnM8L3NwYW4+PC9wPgogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImV4dGVuZGluZy9pbmRleCIpIH19Ij5FeHRlbmRpbmcgYW5kIEVtYmVkZGluZzwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+dHV0b3JpYWwgZm9yIEMvQysrIHByb2dyYW1tZXJzPC9zcGFuPjwvcD4KICAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJjLWFwaS9pbmRleCIpIH19Ij5QeXRob24vQyBBUEk8L2E+PGJyLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnJlZmVyZW5jZSBmb3IgQy9DKysgcHJvZ3JhbW1lcnM8L3NwYW4+PC9wPgotICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImluc3RhbGwvaW5kZXgiKSB9fSI+SW5zdGFsbGluZyBQeXRob24gTW9kdWxlczwvYT48YnIvPgotICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+aW5mb3JtYXRpb24gZm9yIGluc3RhbGxlcnMgJmFtcDsgc3lzLWFkbWluczwvc3Bhbj48L3A+Ci0gICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZGlzdHV0aWxzL2luZGV4IikgfX0iPkRpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlczwvYT48YnIvPgotICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+c2hhcmluZyBtb2R1bGVzIHdpdGggb3RoZXJzPC9zcGFuPjwvcD4KICAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJmYXEvaW5kZXgiKSB9fSI+RkFRczwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+ZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMgKHdpdGggYW5zd2VycyEpPC9zcGFuPjwvcD4KICAgICA8L3RkPjwvdHI+CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAppbmRleCBhMGVjMzJmLi44M2JhMTIzIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKQEAgLTEsMTcgKzEsMTggQEAKLSAgICAgICAgICAgIDxoMz5Eb3dubG9hZDwvaDM+Ci0gICAgICAgICAgICA8cD48YSBocmVmPSJ7eyBwYXRodG8oJ2Rvd25sb2FkJykgfX0iPkRvd25sb2FkIHRoZXNlIGRvY3VtZW50czwvYT48L3A+Ci0JICAgIDxoMz5Eb2NzIGZvciBvdGhlciB2ZXJzaW9uczwvaDM+Ci0JICAgIDx1bD4KLQkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yLjcvIj5QeXRob24gMi43IChzdGFibGUpPC9hPjwvbGk+Ci0JICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LyI+UHl0aG9uIDMuNCAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+Ci0gICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL3ZlcnNpb25zLyI+T2xkIHZlcnNpb25zPC9hPjwvbGk+Ci0gICAgICAgICAgICA8L3VsPgorPGgzPkRvd25sb2FkPC9oMz4KKzxwPjxhIGhyZWY9Int7IHBhdGh0bygnZG93bmxvYWQnKSB9fSI+RG93bmxvYWQgdGhlc2UgZG9jdW1lbnRzPC9hPjwvcD4KKzxoMz5Eb2NzIGZvciBvdGhlciB2ZXJzaW9uczwvaDM+Cis8dWw+CisgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzIuNy8iPlB5dGhvbiAyLjcgKHN0YWJsZSk8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLyI+UHl0aG9uIDMuMyAoc3RhYmxlKTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjUvIj5QeXRob24gMy41IChpbiBkZXZlbG9wbWVudCk8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvdmVyc2lvbnMvIj5PbGQgdmVyc2lvbnM8L2E+PC9saT4KKzwvdWw+CiAKLSAgICAgICAgICAgIDxoMz5PdGhlciByZXNvdXJjZXM8L2gzPgotICAgICAgICAgICAgPHVsPgotICAgICAgICAgICAgICB7IyBYWFg6IG1hbnkgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIG1lcmdlZCBpbiB0aGUgbWFpbiBkb2NzICN9Ci0gICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvIj5QRVAgSW5kZXg8L2E+PC9saT4KLSAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9CZWdpbm5lcnNHdWlkZSI+QmVnaW5uZXIncyBHdWlkZTwvYT48L2xpPgotICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1B5dGhvbkJvb2tzIj5Cb29rIExpc3Q8L2E+PC9saT4KLSAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvYXYvIj5BdWRpby9WaXN1YWwgVGFsa3M8L2E+PC9saT4KLSAgICAgICAgICAgIDwvdWw+Cis8aDM+T3RoZXIgcmVzb3VyY2VzPC9oMz4KKzx1bD4KKyAgeyMgWFhYOiBtYW55IG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBtZXJnZWQgaW4gdGhlIG1haW4gZG9jcyAjfQorICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzLyI+UEVQIEluZGV4PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGUiPkJlZ2lubmVyJ3MgR3VpZGU8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25Cb29rcyI+Qm9vayBMaXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2F2LyI+QXVkaW8vVmlzdWFsIFRhbGtzPC9hPjwvbGk+Cis8L3VsPgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9sYXlvdXQuaHRtbCBiL0RvYy90b29scy9zcGhpbnhleHQvbGF5b3V0Lmh0bWwKaW5kZXggMTZhOTIxMi4uZDNiMjgwMSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9sYXlvdXQuaHRtbAorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2xheW91dC5odG1sCkBAIC0xMiw2ICsxMiw4IEBACiAgICAgICAgICAgeyUtIGVuZGlmICV9CiAgICAgICAgIDwvbGk+CiB7JSBlbmRibG9jayAlfQoreyUgYmxvY2sgcmVsYmFyMSAlfSB7JSBpZiBidWlsZGVyICE9ICdxdGhlbHAnICV9IHt7IHJlbGJhcigpIH19IHslIGVuZGlmICV9IHslIGVuZGJsb2NrICV9Cit7JSBibG9jayByZWxiYXIyICV9IHslIGlmIGJ1aWxkZXIgIT0gJ3F0aGVscCcgJX0ge3sgcmVsYmFyKCkgfX0geyUgZW5kaWYgJX0geyUgZW5kYmxvY2sgJX0KIHslIGJsb2NrIGV4dHJhaGVhZCAlfQogICAgIDxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBocmVmPSJ7eyBwYXRodG8oJ19zdGF0aWMvcHkucG5nJywgMSkgfX0iIC8+CiAgICAgeyUgaWYgbm90IGVtYmVkZGVkICV9PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ie3sgcGF0aHRvKCdfc3RhdGljL2NvcHlidXR0b24uanMnLCAxKSB9fSI+PC9zY3JpcHQ+eyUgZW5kaWYgJX0KZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weSBiL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQppbmRleCBmMmQzY2ExLi4xZjMxZTc5IDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CkBAIC0xMCw3ICsxMCw3IEBACiAiIiIKIAogSVNTVUVfVVJJID0gJ2h0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUlcycKLVNPVVJDRV9VUkkgPSAnaHR0cDovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlLzMuMy8lcycKK1NPVVJDRV9VUkkgPSAnaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vZmlsZS8zLjQvJXMnCiAKIGZyb20gZG9jdXRpbHMgaW1wb3J0IG5vZGVzLCB1dGlscwogCkBAIC0xODAsNyArMTgwLDEwIEBACiAgICAgICAgIGVsaWYgbm90IFNQSElOWDExOgogICAgICAgICAgICAgcGFyYSA9IG5vZGVzLnBhcmFncmFwaCgnJywgJycsCiAgICAgICAgICAgICAgICAgbm9kZXMuaW5saW5lKCcnLCAnJXMuJyAlIHRleHQsIGNsYXNzZXM9Wyd2ZXJzaW9ubW9kaWZpZWQnXSkpCi0gICAgICAgICAgICBub2RlLmFwcGVuZChwYXJhKQorICAgICAgICAgICAgaWYgbGVuKG5vZGUpOgorICAgICAgICAgICAgICAgIG5vZGUuaW5zZXJ0KDAsIHBhcmEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kKHBhcmEpCiAgICAgICAgIGVudiA9IHNlbGYuc3RhdGUuZG9jdW1lbnQuc2V0dGluZ3MuZW52CiAgICAgICAgIGVudi5ub3RlX3ZlcnNpb25jaGFuZ2UoJ2RlcHJlY2F0ZWQnLCB2ZXJzaW9uWzBdLCBub2RlLCBzZWxmLmxpbmVubykKICAgICAgICAgcmV0dXJuIFtub2RlXSArIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MKaW5kZXggMzI0MmE4MS4uZGQxYTlkNCAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvYmFzaWMuY3NzCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2Jhc2ljLmNzcwpAQCAtMzQ0LDYgKzM0NCw3IEBACiAKIGRpdi5kZXByZWNhdGVkIHAsIGRpdi5kZXByZWNhdGVkLXJlbW92ZWQgcCB7CiAgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBtYXJnaW4tdG9wOiAwOwogfQogCiAuc3lzdGVtLW1lc3NhZ2UgewpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2IGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CmluZGV4IGFiYzNjYTguLjE3NjkwMjMgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKQEAgLTc5LDkgKzc5LDggQEAKIGhvd3RvL2xvZ2dpbmcsLDpUaGlzLERFQlVHOnJvb3Q6VGhpcyBtZXNzYWdlIHNob3VsZCBnbyB0byB0aGUgbG9nIGZpbGUKIGhvd3RvL2xvZ2dpbmcsLDpUaGlzLERFQlVHOlRoaXMgbWVzc2FnZSBzaG91bGQgYXBwZWFyIG9uIHRoZSBjb25zb2xlCiBob3d0by9sb2dnaW5nLCw6V2F0Y2gsV0FSTklORzpyb290OldhdGNoIG91dCEKLWhvd3RvL3B5cG9ydGluZyw3NSw6OiwjIG1ha2Ugc3VyZSB0byB1c2UgOjogUHl0aG9uICphbmQqIDo6IFB5dGhvbiA6OiAzIHNvCi1ob3d0by9weXBvcnRpbmcsNzUsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLCIKLWhvd3RvL3B5cG9ydGluZyw3NSw6OiwnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMnCitob3d0by9weXBvcnRpbmcsLDo6LFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyCitob3d0by9weXBvcnRpbmcsLDo6LFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzCiBob3d0by9yZWdleCwsOjosCiBob3d0by9yZWdleCwsOmZvbywoPzpmb28pCiBob3d0by91cmxsaWIyLCw6ZXhhbXBsZSwiZm9yIGV4YW1wbGUgIiJqb2VAcGFzc3dvcmQ6ZXhhbXBsZS5jb20iIiIKQEAgLTE0MSwxNSArMTQwLDggQEAKIGxpYnJhcnkvbG9nZ2luZy5oYW5kbGVycywsOnBvcnQsaG9zdDpwb3J0CiBsaWJyYXJ5L21tYXAsLDppMixvYmpbaTE6aTJdCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIEFkZCBtb3JlIHRhc2tzIHVzaW5nIGBwdXQoKWAKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgQSB0ZXN0IGZpbGUgZm9yIHRoZSBgbXVsdGlwcm9jZXNzaW5nYCBwYWNrYWdlCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIEEgdGVzdCBvZiBgbXVsdGlwcm9jZXNzaW5nLlBvb2xgIGNsYXNzCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIGBCYXNlTWFuYWdlcmAuCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIGluIHRoZSBvcmlnaW5hbCBvcmRlciB0aGVuIGNvbnNpZGVyIHVzaW5nIGBQb29sLm1hcCgpYCBvcgogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIj4+PiBsLl9jYWxsbWV0aG9kKCdfX2dldGl0ZW1fXycsICgyMCwpKSAgICAgIyBlcXVpdiB0byBgbFsyMF1gIgogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIj4+PiBsLl9jYWxsbWV0aG9kKCdfX2dldHNsaWNlX18nLCAoMiwgNykpICAgIyBlcXVpdiB0byBgbFsyOjddYCIKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHN5bmNocm9uaXplIGFjY2VzcyB0byBgc29ja2V0LmFjY2VwdCgpYCBtZXRob2QgYnkKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgb2JqZWN0LiAgKFdlIGltcG9ydCBgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbmAgdG8gZW5hYmxlIHRoaXMgcGlja2xpbmcuKQotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBgUG9vbC5pbWFwKClgICh3aGljaCB3aWxsIHNhdmUgb24gdGhlIGFtb3VudCBvZiBjb2RlIG5lZWRlZCBhbnl3YXkpLgogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLDpxdWV1ZSwiPj4+IFF1ZXVlTWFuYWdlci5yZWdpc3RlcignZ2V0X3F1ZXVlJywgY2FsbGFibGU9bGFtYmRhOnF1ZXVlKSIKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgcmVnaXN0ZXIgdGhlIEZvbyBjbGFzczsgbWFrZSBgZigpYCBhbmQgYGcoKWAgYWNjZXNzaWJsZSB2aWEgcHJveHkKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgcmVnaXN0ZXIgdGhlIEZvbyBjbGFzczsgbWFrZSBgZygpYCBhbmQgYF9oKClgIGFjY2Vzc2libGUgdmlhIHByb3h5CkBAIC0xNTgsMjAgKzE1MCwxNiBAQAogbGlicmFyeS9ubnRwbGliLCw6bGluZXMsOmxpbmVzCiBsaWJyYXJ5L29wdHBhcnNlLCw6bGVuLCJkZWwgcGFyc2VyLnJhcmdzWzpsZW4odmFsdWUpXSIKIGxpYnJhcnkvb3MucGF0aCwsOmZvbyxjOmZvbworbGlicmFyeS9wYXRobGliLCw6YmFyLCI+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9XaW5kb3dzJywgJ2Q6YmFyJykiCitsaWJyYXJ5L3BhdGhsaWIsLDpiYXIsUHVyZVdpbmRvd3NQYXRoKCdkOmJhcicpCitsaWJyYXJ5L3BhdGhsaWIsLDpQcm9ncmFtLD4+PiBQdXJlV2luZG93c1BhdGgoJ2M6UHJvZ3JhbSBGaWxlcy8nKS5yb290CitsaWJyYXJ5L3BhdGhsaWIsLDpQcm9ncmFtLD4+PiBQdXJlV2luZG93c1BhdGgoJ2M6UHJvZ3JhbSBGaWxlcy8nKS5hbmNob3IKIGxpYnJhcnkvcGRiLCw6bGluZW5vLGZpbGVuYW1lOmxpbmVubwogbGlicmFyeS9waWNrbGUsLDptZW1vcnksImNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoIiI6bWVtb3J5OiIiKSIKIGxpYnJhcnkvcG9zaXgsLGAsIkNGTEFHUz0iImBnZXRjb25mIExGU19DRkxBR1NgIiIgT1BUPSIiLWcgLU8yICRDRkxBR1MiIiIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ2NsYXNzaWZpZXJzJzogWydEZXZlbG9wbWVudCBTdGF0dXMgOjogNCAtIEJldGEnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidOYXR1cmFsIExhbmd1YWdlIDo6IEVuZ2xpc2gnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDInLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzIDo6IFB5dGhvbiBNb2R1bGVzJ10sIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIgOjogT25seSddLCIKK2xpYnJhcnkvcHByaW50LCw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYnLCIKK2xpYnJhcnkvcHByaW50LCw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLCIKIGxpYnJhcnkvcHJvZmlsZSwsOmxpbmVubyxmaWxlbmFtZTpsaW5lbm8oZnVuY3Rpb24pCiBsaWJyYXJ5L3B5ZXhwYXQsLDplbGVtMSw8cHk6ZWxlbTEgLz4KIGxpYnJhcnkvcHlleHBhdCwsOnB5LCJ4bWxuczpweSA9ICIiaHR0cDovL3d3dy5weXRob24ub3JnL25zLyIiPiIKQEAgLTE4Myw2ICsxNzEsNyBAQAogbGlicmFyeS9zcWxpdGUzLCw6YWdlLCJjdXIuZXhlY3V0ZSgiInNlbGVjdCAqIGZyb20gcGVvcGxlIHdoZXJlIG5hbWVfbGFzdD06d2hvIGFuZCBhZ2U9OmFnZSIiLCB7IiJ3aG8iIjogd2hvLCAiImFnZSIiOiBhZ2V9KSIKIGxpYnJhcnkvc3FsaXRlMywsOm1lbW9yeSwKIGxpYnJhcnkvc3FsaXRlMywsOndobywiY3VyLmV4ZWN1dGUoIiJzZWxlY3QgKiBmcm9tIHBlb3BsZSB3aGVyZSBuYW1lX2xhc3Q9OndobyBhbmQgYWdlPTphZ2UiIiwgeyIid2hvIiI6IHdobywgIiJhZ2UiIjogYWdlfSkiCitsaWJyYXJ5L3NxbGl0ZTMsLDpwYXRoLCJkYiA9IHNxbGl0ZTMuY29ubmVjdCgnZmlsZTpwYXRoL3RvL2RhdGFiYXNlP21vZGU9cm8nLCB1cmk9VHJ1ZSkiCiBsaWJyYXJ5L3NzbCwsOk15LCJPcmdhbml6YXRpb25hbCBVbml0IE5hbWUgKGVnLCBzZWN0aW9uKSBbXTpNeSBHcm91cCIKIGxpYnJhcnkvc3NsLCw6TXksIk9yZ2FuaXphdGlvbiBOYW1lIChlZywgY29tcGFueSkgW0ludGVybmV0IFdpZGdpdHMgUHR5IEx0ZF06TXkgT3JnYW5pemF0aW9uLCBJbmMuIgogbGlicmFyeS9zc2wsLDpteXNlcnZlciwiQ29tbW9uIE5hbWUgKGVnLCBZT1VSIG5hbWUpIFtdOm15c2VydmVyLm15Z3JvdXAubXlvcmdhbml6YXRpb24uY29tIgpAQCAtMjA3LDcgKzE5NiwxMiBAQAogbGlicmFyeS90YXJmaWxlLCw6eHosJ3c6eHonCiBsaWJyYXJ5L3RpbWUsLDptbSwKIGxpYnJhcnkvdGltZSwsOnNzLAorbGlicmFyeS90cmFjZW1hbGxvYywsOmxpbWl0LCJmb3IgaW5kZXgsIHN0YXQgaW4gZW51bWVyYXRlKHRvcF9zdGF0c1s6bGltaXRdLCAxKToiCiBsaWJyYXJ5L3R1cnRsZSwsOjosRXhhbXBsZTo6CitsaWJyYXJ5L3VuaXR0ZXN0LDE0MTIsOmZvbywic2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsIgorbGlicmFyeS91bml0dGVzdCwxNDEyLDpmaXJzdCwic2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsIgorbGlicmFyeS91bml0dGVzdCwxNDEyLDpmb28sJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKK2xpYnJhcnkvdW5pdHRlc3QsMTQxMiw6c2Vjb25kLCdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCiBsaWJyYXJ5L3VybGxpYi5yZXF1ZXN0LCw6Y2xvc2UsQ29ubmVjdGlvbjpjbG9zZQogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmxhbmcsInhtbG5zPSIiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIiIHhtbDpsYW5nPSIiZW4iIiBsYW5nPSIiZW4iIj5cblxuPGhlYWQ+XG4iCiBsaWJyYXJ5L3VybGxpYi5yZXF1ZXN0LCw6cGFzc3dvcmQsIiIiam9lOnBhc3N3b3JkQHB5dGhvbi5vcmciIiIKQEAgLTI4Myw4ICsyNzcsOCBAQAogd2hhdHNuZXcvMy4yLCw6bG9jYXRpb24sem9wZTktbG9jYXRpb24gPSAke3pvcGU5OmxvY2F0aW9ufQogd2hhdHNuZXcvMy4yLCw6cHJlZml4LHpvcGUtY29uZiA9ICR7Y3VzdG9tOnByZWZpeH0vZXRjL3pvcGUuY29uZgogd2hhdHNuZXcvY2hhbmdlbG9nLCw6cGxhdGZvcm0sOnBsYXRmb3JtOgord2hhdHNuZXcvY2hhbmdlbG9nLCw6Z3osIjogVGFyRmlsZSBvcGVuZWQgd2l0aCBleHRlcm5hbCBmaWxlb2JqIGFuZCAiInc6Z3oiIiBtb2RlIGRpZG4ndCIKIHdoYXRzbmV3L2NoYW5nZWxvZywsOlB5dGhvbkNtZCwiV2l0aCBUayA8IDguNSBfdGtpbnRlci5jOlB5dGhvbkNtZCgpIHJhaXNlZCBVbmljb2RlRGVjb2RlRXJyb3IsIGNhdXNlZCIKIHdoYXRzbmV3L2NoYW5nZWxvZywsOjosIjogRml4IEZUUCB0ZXN0cyBmb3IgSVB2NiwgYmluZCB0byAiIjo6MSIiIGluc3RlYWQgb2YgIiJsb2NhbGhvc3QiIi4iCiB3aGF0c25ldy9jaGFuZ2Vsb2csLDo6LCI6IFVzZSAiIjEyNy4wLjAuMSIiIG9yICIiOjoxIiIgaW5zdGVhZCBvZiAiImxvY2FsaG9zdCIiIGFzIG11Y2ggYXMiCiB3aGF0c25ldy9jaGFuZ2Vsb2csLDpwYXNzd29yZCx1c2VyOnBhc3N3b3JkCi13aGF0c25ldy9jaGFuZ2Vsb2csLDpneix3Omd6CmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QgYi9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QKaW5kZXggMDgwNzJhMy4uMTFlMDdlMyAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdApAQCAtMzg3LDYgKzM4Nyw3NyBAQAogYXJndW1lbnQgbGlzdC4KIAogCisuLiBfdHV0LWNsYXNzLWFuZC1pbnN0YW5jZS12YXJpYWJsZXM6CisKK0NsYXNzIGFuZCBJbnN0YW5jZSBWYXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2VuZXJhbGx5IHNwZWFraW5nLCBpbnN0YW5jZSB2YXJpYWJsZXMgYXJlIGZvciBkYXRhIHVuaXF1ZSB0byBlYWNoIGluc3RhbmNlCithbmQgY2xhc3MgdmFyaWFibGVzIGFyZSBmb3IgYXR0cmlidXRlcyBhbmQgbWV0aG9kcyBzaGFyZWQgYnkgYWxsIGluc3RhbmNlcworb2YgdGhlIGNsYXNzOjoKKworICAgIGNsYXNzIERvZzoKKworICAgICAgICBraW5kID0gJ2NhbmluZScgICAgICAgICAjIGNsYXNzIHZhcmlhYmxlIHNoYXJlZCBieSBhbGwgaW5zdGFuY2VzCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZSAgICAjIGluc3RhbmNlIHZhcmlhYmxlIHVuaXF1ZSB0byBlYWNoIGluc3RhbmNlCisKKyAgICA+Pj4gZCA9IERvZygnRmlkbycpCisgICAgPj4+IGUgPSBEb2coJ0J1ZGR5JykKKyAgICA+Pj4gZC5raW5kICAgICAgICAgICAgICAgICAgIyBzaGFyZWQgYnkgYWxsIGRvZ3MKKyAgICAnY2FuaW5lJworICAgID4+PiBlLmtpbmQgICAgICAgICAgICAgICAgICAjIHNoYXJlZCBieSBhbGwgZG9ncworICAgICdjYW5pbmUnCisgICAgPj4+IGQubmFtZSAgICAgICAgICAgICAgICAgICMgdW5pcXVlIHRvIGQKKyAgICAnRmlkbycKKyAgICA+Pj4gZS5uYW1lICAgICAgICAgICAgICAgICAgIyB1bmlxdWUgdG8gZQorICAgICdCdWRkeScKKworQXMgZGlzY3Vzc2VkIGluIDpyZWY6YHR1dC1vYmplY3RgLCBzaGFyZWQgZGF0YSBjYW4gaGF2ZSBwb3NzaWJseSBzdXJwcmlzaW5nCitlZmZlY3RzIHdpdGggaW52b2x2aW5nIDp0ZXJtOmBtdXRhYmxlYCBvYmplY3RzIHN1Y2ggYXMgbGlzdHMgYW5kIGRpY3Rpb25hcmllcy4KK0ZvciBleGFtcGxlLCB0aGUgKnRyaWNrcyogbGlzdCBpbiB0aGUgZm9sbG93aW5nIGNvZGUgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEKK2NsYXNzIHZhcmlhYmxlIGJlY2F1c2UganVzdCBhIHNpbmdsZSBsaXN0IHdvdWxkIGJlIHNoYXJlZCBieSBhbGwgKkRvZyoKK2luc3RhbmNlczo6CisKKyAgICBjbGFzcyBEb2c6CisKKyAgICAgICAgdHJpY2tzID0gW10gICAgICAgICAgICAgIyBtaXN0YWtlbiB1c2Ugb2YgYSBjbGFzcyB2YXJpYWJsZQorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgICAgICBkZWYgYWRkX3RyaWNrKHNlbGYsIHRyaWNrKToKKyAgICAgICAgICAgIHNlbGYudHJpY2tzLmFwcGVuZCh0cmljaykKKworICAgID4+PiBkID0gRG9nKCdGaWRvJykKKyAgICA+Pj4gZSA9IERvZygnQnVkZHknKQorICAgID4+PiBkLmFkZF90cmljaygncm9sbCBvdmVyJykKKyAgICA+Pj4gZS5hZGRfdHJpY2soJ3BsYXkgZGVhZCcpCisgICAgPj4+IGQudHJpY2tzICAgICAgICAgICAgICAgICMgdW5leHBlY3RlZGx5IHNoYXJlZCBieSBhbGwgZG9ncworICAgIFsncm9sbCBvdmVyJywgJ3BsYXkgZGVhZCddCisKK0NvcnJlY3QgZGVzaWduIG9mIHRoZSBjbGFzcyBzaG91bGQgdXNlIGFuIGluc3RhbmNlIHZhcmlhYmxlIGluc3RlYWQ6OgorCisgICAgY2xhc3MgRG9nOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgICAgIHNlbGYudHJpY2tzID0gW10gICAgIyBjcmVhdGVzIGEgbmV3IGVtcHR5IGxpc3QgZm9yIGVhY2ggZG9nCisKKyAgICAgICAgZGVmIGFkZF90cmljayhzZWxmLCB0cmljayk6CisgICAgICAgICAgICBzZWxmLnRyaWNrcy5hcHBlbmQodHJpY2spCisKKyAgICA+Pj4gZCA9IERvZygnRmlkbycpCisgICAgPj4+IGUgPSBEb2coJ0J1ZGR5JykKKyAgICA+Pj4gZC5hZGRfdHJpY2soJ3JvbGwgb3ZlcicpCisgICAgPj4+IGUuYWRkX3RyaWNrKCdwbGF5IGRlYWQnKQorICAgID4+PiBkLnRyaWNrcworICAgIFsncm9sbCBvdmVyJ10KKyAgICA+Pj4gZS50cmlja3MKKyAgICBbJ3BsYXkgZGVhZCddCisKKwogLi4gX3R1dC1yZW1hcmtzOgogCiBSYW5kb20gUmVtYXJrcwpAQCAtNzMxLDcgKzgwMiw3IEBACiAgICBmb3IgY2hhciBpbiAiMTIzIjoKICAgICAgICBwcmludChjaGFyKQogICAgZm9yIGxpbmUgaW4gb3BlbigibXlmaWxlLnR4dCIpOgotICAgICAgIHByaW50KGxpbmUpCisgICAgICAgcHJpbnQobGluZSwgZW5kPScnKQogCiBUaGlzIHN0eWxlIG9mIGFjY2VzcyBpcyBjbGVhciwgY29uY2lzZSwgYW5kIGNvbnZlbmllbnQuICBUaGUgdXNlIG9mIGl0ZXJhdG9ycwogcGVydmFkZXMgYW5kIHVuaWZpZXMgUHl0aG9uLiAgQmVoaW5kIHRoZSBzY2VuZXMsIHRoZSA6a2V5d29yZDpgZm9yYCBzdGF0ZW1lbnQKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QgYi9Eb2MvdHV0b3JpYWwvY29udHJvbGZsb3cucnN0CmluZGV4IDk3YWVhNGYuLmVmNTA3MzEgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdApAQCAtMzcwLDcgKzM3MCw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgcmV0cmllcyA9IHJldHJpZXMgLSAxCiAgICAgICAgICAgIGlmIHJldHJpZXMgPCAwOgotICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigndW5jb29wZXJhdGl2ZSB1c2VyJykKKyAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3VuY29vcGVyYXRpdmUgdXNlcicpCiAgICAgICAgICAgIHByaW50KGNvbXBsYWludCkKIAogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGluIHNldmVyYWwgd2F5czoKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5yc3QgYi9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0CmluZGV4IDI0ZDJkMmUuLmYyYjY2ZjcgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLnJzdApAQCAtMTExLDEwICsxMTEsMTUgQEAKICAgID4+PiBhLnNvcnQoKQogICAgPj4+IGEKICAgIFstMSwgMSwgNjYuMjUsIDMzMywgMzMzLCAxMjM0LjVdCisgICA+Pj4gYS5wb3AoKQorICAgMTIzNC41CisgICA+Pj4gYQorICAgWy0xLCAxLCA2Ni4yNSwgMzMzLCAzMzNdCiAKIFlvdSBtaWdodCBoYXZlIG5vdGljZWQgdGhhdCBtZXRob2RzIGxpa2UgYGBpbnNlcnRgYCwgYGByZW1vdmVgYCBvciBgYHNvcnRgYCB0aGF0Ci1tb2RpZnkgdGhlIGxpc3QgaGF2ZSBubyByZXR1cm4gdmFsdWUgcHJpbnRlZCAtLSB0aGV5IHJldHVybiBgYE5vbmVgYC4gWzFdXyAgVGhpcwotaXMgYSBkZXNpZ24gcHJpbmNpcGxlIGZvciBhbGwgbXV0YWJsZSBkYXRhIHN0cnVjdHVyZXMgaW4gUHl0aG9uLgorb25seSBtb2RpZnkgdGhlIGxpc3QgaGF2ZSBubyByZXR1cm4gdmFsdWUgcHJpbnRlZCAtLSB0aGV5IHJldHVybiB0aGUgZGVmYXVsdAorYGBOb25lYGAuIFsxXV8gIFRoaXMgaXMgYSBkZXNpZ24gcHJpbmNpcGxlIGZvciBhbGwgbXV0YWJsZSBkYXRhIHN0cnVjdHVyZXMgaW4KK1B5dGhvbi4KIAogCiAuLiBfdHV0LWxpc3RzLWFzLXN0YWNrczoKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9lcnJvcnMucnN0IGIvRG9jL3R1dG9yaWFsL2Vycm9ycy5yc3QKaW5kZXggNDI4MjE1MS4uZDA0OGFlOSAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2Vycm9ycy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2Vycm9ycy5yc3QKQEAgLTEzMSw4ICsxMzEsOCBAQAogICAgICAgIGYgPSBvcGVuKCdteWZpbGUudHh0JykKICAgICAgICBzID0gZi5yZWFkbGluZSgpCiAgICAgICAgaSA9IGludChzLnN0cmlwKCkpCi0gICBleGNlcHQgSU9FcnJvciBhcyBlcnI6Ci0gICAgICAgcHJpbnQoIkkvTyBlcnJvcjogezB9Ii5mb3JtYXQoZXJyKSkKKyAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICBwcmludCgiT1MgZXJyb3I6IHswfSIuZm9ybWF0KGVycikpCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICBwcmludCgiQ291bGQgbm90IGNvbnZlcnQgZGF0YSB0byBhbiBpbnRlZ2VyLiIpCiAgICBleGNlcHQ6CmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdAppbmRleCAzNmFjYjA2Li5hYmYzMGYwIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKQEAgLTcsMTQwICs3LDI3IEBACiBTb21lIHZlcnNpb25zIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc3VwcG9ydCBlZGl0aW5nIG9mIHRoZSBjdXJyZW50IGlucHV0CiBsaW5lIGFuZCBoaXN0b3J5IHN1YnN0aXR1dGlvbiwgc2ltaWxhciB0byBmYWNpbGl0aWVzIGZvdW5kIGluIHRoZSBLb3JuIHNoZWxsIGFuZAogdGhlIEdOVSBCYXNoIHNoZWxsLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgYEdOVSBSZWFkbGluZWBfIGxpYnJhcnksCi13aGljaCBzdXBwb3J0cyBFbWFjcy1zdHlsZSBhbmQgdmktc3R5bGUgZWRpdGluZy4gIFRoaXMgbGlicmFyeSBoYXMgaXRzIG93bgotZG9jdW1lbnRhdGlvbiB3aGljaCBJIHdvbid0IGR1cGxpY2F0ZSBoZXJlOyBob3dldmVyLCB0aGUgYmFzaWNzIGFyZSBlYXNpbHkKLWV4cGxhaW5lZC4gIFRoZSBpbnRlcmFjdGl2ZSBlZGl0aW5nIGFuZCBoaXN0b3J5IGRlc2NyaWJlZCBoZXJlIGFyZSBvcHRpb25hbGx5Ci1hdmFpbGFibGUgaW4gdGhlIFVuaXggYW5kIEN5Z3dpbiB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuCi0KLVRoaXMgY2hhcHRlciBkb2VzICpub3QqIGRvY3VtZW50IHRoZSBlZGl0aW5nIGZhY2lsaXRpZXMgb2YgTWFyayBIYW1tb25kJ3MKLVB5dGhvbldpbiBwYWNrYWdlIG9yIHRoZSBUay1iYXNlZCBlbnZpcm9ubWVudCwgSURMRSwgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24uCi1UaGUgY29tbWFuZCBsaW5lIGhpc3RvcnkgcmVjYWxsIHdoaWNoIG9wZXJhdGVzIHdpdGhpbiBET1MgYm94ZXMgb24gTlQgYW5kIHNvbWUKLW90aGVyIERPUyBhbmQgV2luZG93cyBmbGF2b3JzICBpcyB5ZXQgYW5vdGhlciBiZWFzdC4KLQotCi0uLiBfdHV0LWxpbmVlZGl0aW5nOgotCi1MaW5lIEVkaXRpbmcKLT09PT09PT09PT09PQotCi1JZiBzdXBwb3J0ZWQsIGlucHV0IGxpbmUgZWRpdGluZyBpcyBhY3RpdmUgd2hlbmV2ZXIgdGhlIGludGVycHJldGVyIHByaW50cyBhCi1wcmltYXJ5IG9yIHNlY29uZGFyeSBwcm9tcHQuICBUaGUgY3VycmVudCBsaW5lIGNhbiBiZSBlZGl0ZWQgdXNpbmcgdGhlCi1jb252ZW50aW9uYWwgRW1hY3MgY29udHJvbCBjaGFyYWN0ZXJzLiAgVGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGFyZToKLTprYmQ6YEMtQWAgKENvbnRyb2wtQSkgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLCA6a2JkOmBDLUVgCi10byB0aGUgZW5kLCA6a2JkOmBDLUJgIG1vdmVzIGl0IG9uZSBwb3NpdGlvbiB0byB0aGUgbGVmdCwgOmtiZDpgQy1GYCB0byB0aGUKLXJpZ2h0LiAgQmFja3NwYWNlIGVyYXNlcyB0aGUgY2hhcmFjdGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJzb3IsIDprYmQ6YEMtRGAgdGhlCi1jaGFyYWN0ZXIgdG8gaXRzIHJpZ2h0LiA6a2JkOmBDLUtgIGtpbGxzIChlcmFzZXMpIHRoZSByZXN0IG9mIHRoZSBsaW5lIHRvIHRoZQotcmlnaHQgb2YgdGhlIGN1cnNvciwgOmtiZDpgQy1ZYCB5YW5rcyBiYWNrIHRoZSBsYXN0IGtpbGxlZCBzdHJpbmcuCi06a2JkOmBDLXVuZGVyc2NvcmVgIHVuZG9lcyB0aGUgbGFzdCBjaGFuZ2UgeW91IG1hZGU7IGl0IGNhbiBiZSByZXBlYXRlZCBmb3IKLWN1bXVsYXRpdmUgZWZmZWN0LgotCi0KLS4uIF90dXQtaGlzdG9yeToKLQotSGlzdG9yeSBTdWJzdGl0dXRpb24KLT09PT09PT09PT09PT09PT09PT09Ci0KLUhpc3Rvcnkgc3Vic3RpdHV0aW9uIHdvcmtzIGFzIGZvbGxvd3MuICBBbGwgbm9uLWVtcHR5IGlucHV0IGxpbmVzIGlzc3VlZCBhcmUKLXNhdmVkIGluIGEgaGlzdG9yeSBidWZmZXIsIGFuZCB3aGVuIGEgbmV3IHByb21wdCBpcyBnaXZlbiB5b3UgYXJlIHBvc2l0aW9uZWQgb24KLWEgbmV3IGxpbmUgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGJ1ZmZlci4gOmtiZDpgQy1QYCBtb3ZlcyBvbmUgbGluZSB1cCAoYmFjaykgaW4KLXRoZSBoaXN0b3J5IGJ1ZmZlciwgOmtiZDpgQy1OYCBtb3ZlcyBvbmUgZG93bi4gIEFueSBsaW5lIGluIHRoZSBoaXN0b3J5IGJ1ZmZlcgotY2FuIGJlIGVkaXRlZDsgYW4gYXN0ZXJpc2sgYXBwZWFycyBpbiBmcm9udCBvZiB0aGUgcHJvbXB0IHRvIG1hcmsgYSBsaW5lIGFzCi1tb2RpZmllZC4gIFByZXNzaW5nIHRoZSA6a2JkOmBSZXR1cm5gIGtleSBwYXNzZXMgdGhlIGN1cnJlbnQgbGluZSB0byB0aGUKLWludGVycHJldGVyLiAgOmtiZDpgQy1SYCBzdGFydHMgYW4gaW5jcmVtZW50YWwgcmV2ZXJzZSBzZWFyY2g7IDprYmQ6YEMtU2Agc3RhcnRzCi1hIGZvcndhcmQgc2VhcmNoLgord2hpY2ggc3VwcG9ydHMgdmFyaW91cyBzdHlsZXMgb2YgZWRpdGluZy4gIFRoaXMgbGlicmFyeSBoYXMgaXRzIG93bgorZG9jdW1lbnRhdGlvbiB3aGljaCB3ZSB3b24ndCBkdXBsaWNhdGUgaGVyZS4KIAogCiAuLiBfdHV0LWtleWJpbmRpbmdzOgogCi1LZXkgQmluZGluZ3MKLT09PT09PT09PT09PQorVGFiIENvbXBsZXRpb24gYW5kIEhpc3RvcnkgRWRpdGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUga2V5IGJpbmRpbmdzIGFuZCBzb21lIG90aGVyIHBhcmFtZXRlcnMgb2YgdGhlIFJlYWRsaW5lIGxpYnJhcnkgY2FuIGJlCi1jdXN0b21pemVkIGJ5IHBsYWNpbmcgY29tbWFuZHMgaW4gYW4gaW5pdGlhbGl6YXRpb24gZmlsZSBjYWxsZWQKLTpmaWxlOmB+Ly5pbnB1dHJjYC4gIEtleSBiaW5kaW5ncyBoYXZlIHRoZSBmb3JtIDo6Ci0KLSAgIGtleS1uYW1lOiBmdW5jdGlvbi1uYW1lCi0KLW9yIDo6Ci0KLSAgICJzdHJpbmciOiBmdW5jdGlvbi1uYW1lCi0KLWFuZCBvcHRpb25zIGNhbiBiZSBzZXQgd2l0aCA6OgotCi0gICBzZXQgb3B0aW9uLW5hbWUgdmFsdWUKLQotRm9yIGV4YW1wbGU6OgotCi0gICAjIEkgcHJlZmVyIHZpLXN0eWxlIGVkaXRpbmc6Ci0gICBzZXQgZWRpdGluZy1tb2RlIHZpCi0KLSAgICMgRWRpdCB1c2luZyBhIHNpbmdsZSBsaW5lOgotICAgc2V0IGhvcml6b250YWwtc2Nyb2xsLW1vZGUgT24KLQotICAgIyBSZWJpbmQgc29tZSBrZXlzOgotICAgTWV0YS1oOiBiYWNrd2FyZC1raWxsLXdvcmQKLSAgICJcQy11IjogdW5pdmVyc2FsLWFyZ3VtZW50Ci0gICAiXEMteFxDLXIiOiByZS1yZWFkLWluaXQtZmlsZQotCi1Ob3RlIHRoYXQgdGhlIGRlZmF1bHQgYmluZGluZyBmb3IgOmtiZDpgVGFiYCBpbiBQeXRob24gaXMgdG8gaW5zZXJ0IGEgOmtiZDpgVGFiYAotY2hhcmFjdGVyIGluc3RlYWQgb2YgUmVhZGxpbmUncyBkZWZhdWx0IGZpbGVuYW1lIGNvbXBsZXRpb24gZnVuY3Rpb24uICBJZiB5b3UKLWluc2lzdCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IHB1dHRpbmcgOjoKLQotICAgVGFiOiBjb21wbGV0ZQotCi1pbiB5b3VyIDpmaWxlOmB+Ly5pbnB1dHJjYC4gIChPZiBjb3Vyc2UsIHRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIHR5cGUgaW5kZW50ZWQKLWNvbnRpbnVhdGlvbiBsaW5lcyBpZiB5b3UncmUgYWNjdXN0b21lZCB0byB1c2luZyA6a2JkOmBUYWJgIGZvciB0aGF0IHB1cnBvc2UuKQotCi0uLiBpbmRleDo6Ci0gICBtb2R1bGU6IHJsY29tcGxldGVyCi0gICBtb2R1bGU6IHJlYWRsaW5lCi0KLUF1dG9tYXRpYyBjb21wbGV0aW9uIG9mIHZhcmlhYmxlIGFuZCBtb2R1bGUgbmFtZXMgaXMgb3B0aW9uYWxseSBhdmFpbGFibGUuICBUbwotZW5hYmxlIGl0IGluIHRoZSBpbnRlcnByZXRlcidzIGludGVyYWN0aXZlIG1vZGUsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIKLXN0YXJ0dXAgZmlsZTogWyNdXyAgOjoKLQotICAgaW1wb3J0IHJsY29tcGxldGVyLCByZWFkbGluZQotICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29tcGxldGUnKQotCi1UaGlzIGJpbmRzIHRoZSA6a2JkOmBUYWJgIGtleSB0byB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiwgc28gaGl0dGluZyB0aGUKLTprYmQ6YFRhYmAga2V5IHR3aWNlIHN1Z2dlc3RzIGNvbXBsZXRpb25zOyBpdCBsb29rcyBhdCBQeXRob24gc3RhdGVtZW50IG5hbWVzLAotdGhlIGN1cnJlbnQgbG9jYWwgdmFyaWFibGVzLCBhbmQgdGhlIGF2YWlsYWJsZSBtb2R1bGUgbmFtZXMuICBGb3IgZG90dGVkCi1leHByZXNzaW9ucyBzdWNoIGFzIGBgc3RyaW5nLmFgYCwgaXQgd2lsbCBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiB1cCB0byB0aGUKLWZpbmFsIGBgJy4nYGAgYW5kIHRoZW4gc3VnZ2VzdCBjb21wbGV0aW9ucyBmcm9tIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZXN1bHRpbmcKLW9iamVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSBleGVjdXRlIGFwcGxpY2F0aW9uLWRlZmluZWQgY29kZSBpZiBhbiBvYmplY3Qgd2l0aCBhCi06bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uLgotCi1BIG1vcmUgY2FwYWJsZSBzdGFydHVwIGZpbGUgbWlnaHQgbG9vayBsaWtlIHRoaXMgZXhhbXBsZS4gIE5vdGUgdGhhdCB0aGlzCi1kZWxldGVzIHRoZSBuYW1lcyBpdCBjcmVhdGVzIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZDsgdGhpcyBpcyBkb25lIHNpbmNlCi10aGUgc3RhcnR1cCBmaWxlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZHMsCi1hbmQgcmVtb3ZpbmcgdGhlIG5hbWVzIGF2b2lkcyBjcmVhdGluZyBzaWRlIGVmZmVjdHMgaW4gdGhlIGludGVyYWN0aXZlCi1lbnZpcm9ubWVudC4gIFlvdSBtYXkgZmluZCBpdCBjb252ZW5pZW50IHRvIGtlZXAgc29tZSBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlcywKLXN1Y2ggYXMgOm1vZDpgb3NgLCB3aGljaCB0dXJuIG91dCB0byBiZSBuZWVkZWQgaW4gbW9zdCBzZXNzaW9ucyB3aXRoIHRoZQotaW50ZXJwcmV0ZXIuIDo6Ci0KLSAgICMgQWRkIGF1dG8tY29tcGxldGlvbiBhbmQgYSBzdG9yZWQgaGlzdG9yeSBmaWxlIG9mIGNvbW1hbmRzIHRvIHlvdXIgUHl0aG9uCi0gICAjIGludGVyYWN0aXZlIGludGVycHJldGVyLiBSZXF1aXJlcyBQeXRob24gMi4wKywgcmVhZGxpbmUuIEF1dG9jb21wbGV0ZSBpcwotICAgIyBib3VuZCB0byB0aGUgRXNjIGtleSBieSBkZWZhdWx0ICh5b3UgY2FuIGNoYW5nZSBpdCAtIHNlZSByZWFkbGluZSBkb2NzKS4KLSAgICMKLSAgICMgU3RvcmUgdGhlIGZpbGUgaW4gfi8ucHlzdGFydHVwLCBhbmQgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHBvaW50Ci0gICAjIHRvIGl0OiAgImV4cG9ydCBQWVRIT05TVEFSVFVQPX4vLnB5c3RhcnR1cCIgaW4gYmFzaC4KLQotICAgaW1wb3J0IGF0ZXhpdAotICAgaW1wb3J0IG9zCi0gICBpbXBvcnQgcmVhZGxpbmUKLSAgIGltcG9ydCBybGNvbXBsZXRlcgotCi0gICBoaXN0b3J5UGF0aCA9IG9zLnBhdGguZXhwYW5kdXNlcigifi8ucHloaXN0b3J5IikKLQotICAgZGVmIHNhdmVfaGlzdG9yeShoaXN0b3J5UGF0aD1oaXN0b3J5UGF0aCk6Ci0gICAgICAgaW1wb3J0IHJlYWRsaW5lCi0gICAgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKGhpc3RvcnlQYXRoKQotCi0gICBpZiBvcy5wYXRoLmV4aXN0cyhoaXN0b3J5UGF0aCk6Ci0gICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdG9yeVBhdGgpCi0KLSAgIGF0ZXhpdC5yZWdpc3RlcihzYXZlX2hpc3RvcnkpCi0gICBkZWwgb3MsIGF0ZXhpdCwgcmVhZGxpbmUsIHJsY29tcGxldGVyLCBzYXZlX2hpc3RvcnksIGhpc3RvcnlQYXRoCitDb21wbGV0aW9uIG9mIHZhcmlhYmxlIGFuZCBtb2R1bGUgbmFtZXMgaXMKKzpyZWY6YGF1dG9tYXRpY2FsbHkgZW5hYmxlZCA8cmxjb21wbGV0ZXItY29uZmlnPmAgYXQgaW50ZXJwcmV0ZXIgc3RhcnR1cCBzbwordGhhdCB0aGUgOmtiZDpgVGFiYCBrZXkgaW52b2tlcyB0aGUgY29tcGxldGlvbiBmdW5jdGlvbjsgaXQgbG9va3MgYXQKK1B5dGhvbiBzdGF0ZW1lbnQgbmFtZXMsIHRoZSBjdXJyZW50IGxvY2FsIHZhcmlhYmxlcywgYW5kIHRoZSBhdmFpbGFibGUKK21vZHVsZSBuYW1lcy4gIEZvciBkb3R0ZWQgZXhwcmVzc2lvbnMgc3VjaCBhcyBgYHN0cmluZy5hYGAsIGl0IHdpbGwgZXZhbHVhdGUKK3RoZSBleHByZXNzaW9uIHVwIHRvIHRoZSBmaW5hbCBgYCcuJ2BgIGFuZCB0aGVuIHN1Z2dlc3QgY29tcGxldGlvbnMgZnJvbQordGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZyBvYmplY3QuICBOb3RlIHRoYXQgdGhpcyBtYXkgZXhlY3V0ZQorYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGlmIGFuIG9iamVjdCB3aXRoIGEgOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QKK2lzIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24uICBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGFsc28gc2F2ZXMgeW91cgoraGlzdG9yeSBpbnRvIGEgZmlsZSBuYW1lZCA6ZmlsZTpgLnB5dGhvbl9oaXN0b3J5YCBpbiB5b3VyIHVzZXIgZGlyZWN0b3J5LgorVGhlIGhpc3Rvcnkgd2lsbCBiZSBhdmFpbGFibGUgYWdhaW4gZHVyaW5nIHRoZSBuZXh0IGludGVyYWN0aXZlIGludGVycHJldGVyCitzZXNzaW9uLgogCiAKIC4uIF90dXQtY29tbWVudGFyeToKQEAgLTE2MiwxNCArNDksNiBAQAogYnB5dGhvbl8uCiAKIAotLi4gcnVicmljOjogRm9vdG5vdGVzCi0KLS4uIFsjXSBQeXRob24gd2lsbCBleGVjdXRlIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgaWRlbnRpZmllZCBieSB0aGUKLSAgIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4geW91IHN0YXJ0IGFuIGludGVyYWN0aXZlCi0gICBpbnRlcnByZXRlci4gIFRvIGN1c3RvbWl6ZSBQeXRob24gZXZlbiBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUsIHNlZQotICAgOnJlZjpgdHV0LWN1c3RvbWl6ZWAuCi0KLQogLi4gX0dOVSBSZWFkbGluZTogaHR0cDovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9yZWFkbGluZS9ybHRvcC5odG1sCiAuLiBfSVB5dGhvbjogaHR0cDovL2lweXRob24uc2NpcHkub3JnLwogLi4gX2JweXRob246IGh0dHA6Ly93d3cuYnB5dGhvbi1pbnRlcnByZXRlci5vcmcvCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAppbmRleCBjZGMyYmYyLi40NGRjNmQxIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKQEAgLTEwLDEzICsxMCwxMyBAQAogSW52b2tpbmcgdGhlIEludGVycHJldGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy4zYAorVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy40YAogb24gdGhvc2UgbWFjaGluZXMgd2hlcmUgaXQgaXMgYXZhaWxhYmxlOyBwdXR0aW5nIDpmaWxlOmAvdXNyL2xvY2FsL2JpbmAgaW4geW91cgogVW5peCBzaGVsbCdzIHNlYXJjaCBwYXRoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IGl0IGJ5IHR5cGluZyB0aGUgY29tbWFuZDoKIAogLi4gY29kZS1ibG9jazo6IHRleHQKIAotICAgcHl0aG9uMy4zCisgICBweXRob24zLjQKIAogdG8gdGhlIHNoZWxsLiBbI11fIFNpbmNlIHRoZSBjaG9pY2Ugb2YgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgaW50ZXJwcmV0ZXIgbGl2ZXMKIGlzIGFuIGluc3RhbGxhdGlvbiBvcHRpb24sIG90aGVyIHBsYWNlcyBhcmUgcG9zc2libGU7IGNoZWNrIHdpdGggeW91ciBsb2NhbApAQCAtMjQsMjYgKzI0LDI1IEBACiBwb3B1bGFyIGFsdGVybmF0aXZlIGxvY2F0aW9uLikKIAogT24gV2luZG93cyBtYWNoaW5lcywgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gaXMgdXN1YWxseSBwbGFjZWQgaW4KLTpmaWxlOmBDOlxcUHl0aG9uMzNgLCB0aG91Z2ggeW91IGNhbiBjaGFuZ2UgdGhpcyB3aGVuIHlvdSdyZSBydW5uaW5nIHRoZQorOmZpbGU6YEM6XFxQeXRob24zNGAsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCiBpbnN0YWxsZXIuICBUbyBhZGQgdGhpcyBkaXJlY3RvcnkgdG8geW91ciBwYXRoLCAgeW91IGNhbiB0eXBlIHRoZSBmb2xsb3dpbmcKIGNvbW1hbmQgaW50byB0aGUgY29tbWFuZCBwcm9tcHQgaW4gYSBET1MgYm94OjoKIAotICAgc2V0IHBhdGg9JXBhdGglO0M6XHB5dGhvbjMzCisgICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMzQKIAogVHlwaW5nIGFuIGVuZC1vZi1maWxlIGNoYXJhY3RlciAoOmtiZDpgQ29udHJvbC1EYCBvbiBVbml4LCA6a2JkOmBDb250cm9sLVpgIG9uCiBXaW5kb3dzKSBhdCB0aGUgcHJpbWFyeSBwcm9tcHQgY2F1c2VzIHRoZSBpbnRlcnByZXRlciB0byBleGl0IHdpdGggYSB6ZXJvIGV4aXQKIHN0YXR1cy4gIElmIHRoYXQgZG9lc24ndCB3b3JrLCB5b3UgY2FuIGV4aXQgdGhlIGludGVycHJldGVyIGJ5IHR5cGluZyB0aGUKIGZvbGxvd2luZyBjb21tYW5kOiBgYHF1aXQoKWBgLgogCi1UaGUgaW50ZXJwcmV0ZXIncyBsaW5lLWVkaXRpbmcgZmVhdHVyZXMgdXN1YWxseSBhcmVuJ3QgdmVyeSBzb3BoaXN0aWNhdGVkLiAgT24KLVVuaXgsIHdob2V2ZXIgaW5zdGFsbGVkIHRoZSBpbnRlcnByZXRlciBtYXkgaGF2ZSBlbmFibGVkIHN1cHBvcnQgZm9yIHRoZSBHTlUKLXJlYWRsaW5lIGxpYnJhcnksIHdoaWNoIGFkZHMgbW9yZSBlbGFib3JhdGUgaW50ZXJhY3RpdmUgZWRpdGluZyBhbmQgaGlzdG9yeQotZmVhdHVyZXMuIFBlcmhhcHMgdGhlIHF1aWNrZXN0IGNoZWNrIHRvIHNlZSB3aGV0aGVyIGNvbW1hbmQgbGluZSBlZGl0aW5nIGlzCi1zdXBwb3J0ZWQgaXMgdHlwaW5nIENvbnRyb2wtUCB0byB0aGUgZmlyc3QgUHl0aG9uIHByb21wdCB5b3UgZ2V0LiAgSWYgaXQgYmVlcHMsCi15b3UgaGF2ZSBjb21tYW5kIGxpbmUgZWRpdGluZzsgc2VlIEFwcGVuZGl4IDpyZWY6YHR1dC1pbnRlcmFjdGluZ2AgZm9yIGFuCi1pbnRyb2R1Y3Rpb24gdG8gdGhlIGtleXMuICBJZiBub3RoaW5nIGFwcGVhcnMgdG8gaGFwcGVuLCBvciBpZiBgYF5QYGAgaXMgZWNob2VkLAotY29tbWFuZCBsaW5lIGVkaXRpbmcgaXNuJ3QgYXZhaWxhYmxlOyB5b3UnbGwgb25seSBiZSBhYmxlIHRvIHVzZSBiYWNrc3BhY2UgdG8KLXJlbW92ZSBjaGFyYWN0ZXJzIGZyb20gdGhlIGN1cnJlbnQgbGluZS4KK1RoZSBpbnRlcnByZXRlcidzIGxpbmUtZWRpdGluZyBmZWF0dXJlcyBpbmNsdWRlIGludGVyYWN0aXZlIGVkaXRpbmcsIGhpc3RvcnkKK3N1YnN0aXR1dGlvbiBhbmQgY29kZSBjb21wbGV0aW9uIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHJlYWRsaW5lLiAgUGVyaGFwcyB0aGUKK3F1aWNrZXN0IGNoZWNrIHRvIHNlZSB3aGV0aGVyIGNvbW1hbmQgbGluZSBlZGl0aW5nIGlzIHN1cHBvcnRlZCBpcyB0eXBpbmcKK0NvbnRyb2wtUCB0byB0aGUgZmlyc3QgUHl0aG9uIHByb21wdCB5b3UgZ2V0LiAgSWYgaXQgYmVlcHMsIHlvdSBoYXZlIGNvbW1hbmQKK2xpbmUgZWRpdGluZzsgc2VlIEFwcGVuZGl4IDpyZWY6YHR1dC1pbnRlcmFjdGluZ2AgZm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUKK2tleXMuICBJZiBub3RoaW5nIGFwcGVhcnMgdG8gaGFwcGVuLCBvciBpZiBgYF5QYGAgaXMgZWNob2VkLCBjb21tYW5kIGxpbmUKK2VkaXRpbmcgaXNuJ3QgYXZhaWxhYmxlOyB5b3UnbGwgb25seSBiZSBhYmxlIHRvIHVzZSBiYWNrc3BhY2UgdG8gcmVtb3ZlCitjaGFyYWN0ZXJzIGZyb20gdGhlIGN1cnJlbnQgbGluZS4KIAogVGhlIGludGVycHJldGVyIG9wZXJhdGVzIHNvbWV3aGF0IGxpa2UgdGhlIFVuaXggc2hlbGw6IHdoZW4gY2FsbGVkIHdpdGggc3RhbmRhcmQKIGlucHV0IGNvbm5lY3RlZCB0byBhIHR0eSBkZXZpY2UsIGl0IHJlYWRzIGFuZCBleGVjdXRlcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5OwpAQCAtOTUsOSArOTQsOSBAQAogcHJpbnRzIGEgd2VsY29tZSBtZXNzYWdlIHN0YXRpbmcgaXRzIHZlcnNpb24gbnVtYmVyIGFuZCBhIGNvcHlyaWdodCBub3RpY2UKIGJlZm9yZSBwcmludGluZyB0aGUgZmlyc3QgcHJvbXB0OjoKIAotICAgJCBweXRob24zLjMKLSAgIFB5dGhvbiAzLjMgKGRlZmF1bHQsIFNlcCAyNCAyMDEyLCAwOToyNTowNCkKLSAgIFtHQ0MgNC42LjNdIG9uIGxpbnV4MgorICAgJCBweXRob24zLjQKKyAgIFB5dGhvbiAzLjQgKGRlZmF1bHQsIE1hciAxNiAyMDE0LCAwOToyNTowNCkKKyAgIFtHQ0MgNC44LjJdIG9uIGxpbnV4CiAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICA+Pj4KIApAQCAtMTA2LDcgKzEwNSw3IEBACiBDb250aW51YXRpb24gbGluZXMgYXJlIG5lZWRlZCB3aGVuIGVudGVyaW5nIGEgbXVsdGktbGluZSBjb25zdHJ1Y3QuIEFzIGFuCiBleGFtcGxlLCB0YWtlIGEgbG9vayBhdCB0aGlzIDprZXl3b3JkOmBpZmAgc3RhdGVtZW50OjoKIAotICAgPj4+IHRoZV93b3JsZF9pc19mbGF0ID0gMQorICAgPj4+IHRoZV93b3JsZF9pc19mbGF0ID0gVHJ1ZQogICAgPj4+IGlmIHRoZV93b3JsZF9pc19mbGF0OgogICAgLi4uICAgICBwcmludCgiQmUgY2FyZWZ1bCBub3QgdG8gZmFsbCBvZmYhIikKICAgIC4uLgpAQCAtMTQ5LDcgKzE0OCw3IEBACiBPbiBCU0QnaXNoIFVuaXggc3lzdGVtcywgUHl0aG9uIHNjcmlwdHMgY2FuIGJlIG1hZGUgZGlyZWN0bHkgZXhlY3V0YWJsZSwgbGlrZQogc2hlbGwgc2NyaXB0cywgYnkgcHV0dGluZyB0aGUgbGluZSA6OgogCi0gICAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMy4zCisgICAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMy40CiAKIChhc3N1bWluZyB0aGF0IHRoZSBpbnRlcnByZXRlciBpcyBvbiB0aGUgdXNlcidzIDplbnZ2YXI6YFBBVEhgKSBhdCB0aGUgYmVnaW5uaW5nCiBvZiB0aGUgc2NyaXB0IGFuZCBnaXZpbmcgdGhlIGZpbGUgYW4gZXhlY3V0YWJsZSBtb2RlLiAgVGhlIGBgIyFgYCBtdXN0IGJlIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0IGIvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CmluZGV4IDE5MDI5NjQuLmZkMzYxYWUgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKQEAgLTE2NSwxMCArMTY1LDE2IEBACiBuYW1lZCA6ZmlsZTpgc3BhbS5weWAgaW4gYSBsaXN0IG9mIGRpcmVjdG9yaWVzIGdpdmVuIGJ5IHRoZSB2YXJpYWJsZQogOmRhdGE6YHN5cy5wYXRoYC4gIDpkYXRhOmBzeXMucGF0aGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSB0aGVzZSBsb2NhdGlvbnM6CiAKLSogdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbnB1dCBzY3JpcHQgKG9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeSkuCisqIFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW5wdXQgc2NyaXB0IChvciB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlbiBubworICBmaWxlIGlzIHNwZWNpZmllZCkuCiAqIDplbnZ2YXI6YFBZVEhPTlBBVEhgIChhIGxpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzLCB3aXRoIHRoZSBzYW1lIHN5bnRheCBhcyB0aGUKICAgc2hlbGwgdmFyaWFibGUgOmVudnZhcjpgUEFUSGApLgotKiB0aGUgaW5zdGFsbGF0aW9uLWRlcGVuZGVudCBkZWZhdWx0LgorKiBUaGUgaW5zdGFsbGF0aW9uLWRlcGVuZGVudCBkZWZhdWx0LgorCisuLiBub3RlOjoKKyAgIE9uIGZpbGUgc3lzdGVtcyB3aGljaCBzdXBwb3J0IHN5bWxpbmtzLCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGlucHV0CisgICBzY3JpcHQgaXMgY2FsY3VsYXRlZCBhZnRlciB0aGUgc3ltbGluayBpcyBmb2xsb3dlZC4gSW4gb3RoZXIgd29yZHMgdGhlCisgICBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc3ltbGluayBpcyAqKm5vdCoqIGFkZGVkIHRvIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGguCiAKIEFmdGVyIGluaXRpYWxpemF0aW9uLCBQeXRob24gcHJvZ3JhbXMgY2FuIG1vZGlmeSA6ZGF0YTpgc3lzLnBhdGhgLiAgVGhlCiBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc2NyaXB0IGJlaW5nIHJ1biBpcyBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKQEAgLTI3OCwyNCArMjg0LDIzIEBACiAgICA+Pj4gZGlyKGZpYm8pCiAgICBbJ19fbmFtZV9fJywgJ2ZpYicsICdmaWIyJ10KICAgID4+PiBkaXIoc3lzKSAgIyBkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0UKLSAgIFsnX19kaXNwbGF5aG9va19fJywgJ19fZG9jX18nLCAnX19lZ2dpbnNlcnQnLCAnX19leGNlcHRob29rX18nLAotICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGxlbicsICdfX3N0ZGVycl9fJywKLSAgICAnX19zdGRpbl9fJywgJ19fc3Rkb3V0X18nLCAnX2NsZWFyX3R5cGVfY2FjaGUnLCAnX2N1cnJlbnRfZnJhbWVzJywKLSAgICAnX2RlYnVnbWFsbG9jc3RhdHMnLCAnX2dldGZyYW1lJywgJ19ob21lJywgJ19tZXJjdXJpYWwnLCAnX3hvcHRpb25zJywKLSAgICAnYWJpZmxhZ3MnLCAnYXBpX3ZlcnNpb24nLCAnYXJndicsICdiYXNlX2V4ZWNfcHJlZml4JywgJ2Jhc2VfcHJlZml4JywKLSAgICAnYnVpbHRpbl9tb2R1bGVfbmFtZXMnLCAnYnl0ZW9yZGVyJywgJ2NhbGxfdHJhY2luZycsICdjYWxsc3RhdHMnLAotICAgICdjb3B5cmlnaHQnLCAnZGlzcGxheWhvb2snLCAnZG9udF93cml0ZV9ieXRlY29kZScsICdleGNfaW5mbycsCi0gICAgJ2V4Y2VwdGhvb2snLCAnZXhlY19wcmVmaXgnLCAnZXhlY3V0YWJsZScsICdleGl0JywgJ2ZsYWdzJywgJ2Zsb2F0X2luZm8nLAotICAgICdmbG9hdF9yZXByX3N0eWxlJywgJ2dldGNoZWNraW50ZXJ2YWwnLCAnZ2V0ZGVmYXVsdGVuY29kaW5nJywKLSAgICAnZ2V0ZGxvcGVuZmxhZ3MnLCAnZ2V0ZmlsZXN5c3RlbWVuY29kaW5nJywgJ2dldG9iamVjdHMnLCAnZ2V0cHJvZmlsZScsCi0gICAgJ2dldHJlY3Vyc2lvbmxpbWl0JywgJ2dldHJlZmNvdW50JywgJ2dldHNpemVvZicsICdnZXRzd2l0Y2hpbnRlcnZhbCcsCi0gICAgJ2dldHRvdGFscmVmY291bnQnLCAnZ2V0dHJhY2UnLCAnaGFzaF9pbmZvJywgJ2hleHZlcnNpb24nLAotICAgICdpbXBsZW1lbnRhdGlvbicsICdpbnRfaW5mbycsICdpbnRlcm4nLCAnbWF4c2l6ZScsICdtYXh1bmljb2RlJywKLSAgICAnbWV0YV9wYXRoJywgJ21vZHVsZXMnLCAncGF0aCcsICdwYXRoX2hvb2tzJywgJ3BhdGhfaW1wb3J0ZXJfY2FjaGUnLAotICAgICdwbGF0Zm9ybScsICdwcmVmaXgnLCAncHMxJywgJ3NldGNoZWNraW50ZXJ2YWwnLCAnc2V0ZGxvcGVuZmxhZ3MnLAotICAgICdzZXRwcm9maWxlJywgJ3NldHJlY3Vyc2lvbmxpbWl0JywgJ3NldHN3aXRjaGludGVydmFsJywgJ3NldHRyYWNlJywKLSAgICAnc3RkZXJyJywgJ3N0ZGluJywgJ3N0ZG91dCcsICd0aHJlYWRfaW5mbycsICd2ZXJzaW9uJywgJ3ZlcnNpb25faW5mbycsCi0gICAgJ3dhcm5vcHRpb25zJ10KKyAgIFsnX19kaXNwbGF5aG9va19fJywgJ19fZG9jX18nLCAnX19leGNlcHRob29rX18nLCAnX19sb2FkZXJfXycsICdfX25hbWVfXycsCisgICAgJ19fcGFja2FnZV9fJywgJ19fc3RkZXJyX18nLCAnX19zdGRpbl9fJywgJ19fc3Rkb3V0X18nLAorICAgICdfY2xlYXJfdHlwZV9jYWNoZScsICdfY3VycmVudF9mcmFtZXMnLCAnX2RlYnVnbWFsbG9jc3RhdHMnLCAnX2dldGZyYW1lJywKKyAgICAnX2hvbWUnLCAnX21lcmN1cmlhbCcsICdfeG9wdGlvbnMnLCAnYWJpZmxhZ3MnLCAnYXBpX3ZlcnNpb24nLCAnYXJndicsCisgICAgJ2Jhc2VfZXhlY19wcmVmaXgnLCAnYmFzZV9wcmVmaXgnLCAnYnVpbHRpbl9tb2R1bGVfbmFtZXMnLCAnYnl0ZW9yZGVyJywKKyAgICAnY2FsbF90cmFjaW5nJywgJ2NhbGxzdGF0cycsICdjb3B5cmlnaHQnLCAnZGlzcGxheWhvb2snLAorICAgICdkb250X3dyaXRlX2J5dGVjb2RlJywgJ2V4Y19pbmZvJywgJ2V4Y2VwdGhvb2snLCAnZXhlY19wcmVmaXgnLAorICAgICdleGVjdXRhYmxlJywgJ2V4aXQnLCAnZmxhZ3MnLCAnZmxvYXRfaW5mbycsICdmbG9hdF9yZXByX3N0eWxlJywKKyAgICAnZ2V0Y2hlY2tpbnRlcnZhbCcsICdnZXRkZWZhdWx0ZW5jb2RpbmcnLCAnZ2V0ZGxvcGVuZmxhZ3MnLAorICAgICdnZXRmaWxlc3lzdGVtZW5jb2RpbmcnLCAnZ2V0b2JqZWN0cycsICdnZXRwcm9maWxlJywgJ2dldHJlY3Vyc2lvbmxpbWl0JywKKyAgICAnZ2V0cmVmY291bnQnLCAnZ2V0c2l6ZW9mJywgJ2dldHN3aXRjaGludGVydmFsJywgJ2dldHRvdGFscmVmY291bnQnLAorICAgICdnZXR0cmFjZScsICdoYXNoX2luZm8nLCAnaGV4dmVyc2lvbicsICdpbXBsZW1lbnRhdGlvbicsICdpbnRfaW5mbycsCisgICAgJ2ludGVybicsICdtYXhzaXplJywgJ21heHVuaWNvZGUnLCAnbWV0YV9wYXRoJywgJ21vZHVsZXMnLCAncGF0aCcsCisgICAgJ3BhdGhfaG9va3MnLCAncGF0aF9pbXBvcnRlcl9jYWNoZScsICdwbGF0Zm9ybScsICdwcmVmaXgnLCAncHMxJywKKyAgICAnc2V0Y2hlY2tpbnRlcnZhbCcsICdzZXRkbG9wZW5mbGFncycsICdzZXRwcm9maWxlJywgJ3NldHJlY3Vyc2lvbmxpbWl0JywKKyAgICAnc2V0c3dpdGNoaW50ZXJ2YWwnLCAnc2V0dHJhY2UnLCAnc3RkZXJyJywgJ3N0ZGluJywgJ3N0ZG91dCcsCisgICAgJ3RocmVhZF9pbmZvJywgJ3ZlcnNpb24nLCAndmVyc2lvbl9pbmZvJywgJ3dhcm5vcHRpb25zJ10KIAogV2l0aG91dCBhcmd1bWVudHMsIDpmdW5jOmBkaXJgIGxpc3RzIHRoZSBuYW1lcyB5b3UgaGF2ZSBkZWZpbmVkIGN1cnJlbnRseTo6CiAKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0IGIvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QKaW5kZXggN2U3YTE1NC4uY2Q3M2JjMiAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QKQEAgLTE1LDcgKzE1LDcgQEAKIAogICAgPj4+IGltcG9ydCBvcwogICAgPj4+IG9zLmdldGN3ZCgpICAgICAgIyBSZXR1cm4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKLSAgICdDOlxcUHl0aG9uMzMnCisgICAnQzpcXFB5dGhvbjM0JwogICAgPj4+IG9zLmNoZGlyKCcvc2VydmVyL2FjY2Vzc2xvZ3MnKSAgICMgQ2hhbmdlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAgID4+PiBvcy5zeXN0ZW0oJ21rZGlyIHRvZGF5JykgICAjIFJ1biB0aGUgY29tbWFuZCBta2RpciBpbiB0aGUgc3lzdGVtIHNoZWxsCiAgICAwCkBAIC00MCw3ICs0MCw5IEBACiAKICAgID4+PiBpbXBvcnQgc2h1dGlsCiAgICA+Pj4gc2h1dGlsLmNvcHlmaWxlKCdkYXRhLmRiJywgJ2FyY2hpdmUuZGInKQorICAgJ2FyY2hpdmUuZGInCiAgICA+Pj4gc2h1dGlsLm1vdmUoJy9idWlsZC9leGVjdXRhYmxlcycsICdpbnN0YWxsZGlyJykKKyAgICdpbnN0YWxsZGlyJwogCiAKIC4uIF90dXQtZmlsZS13aWxkY2FyZHM6CmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QgYi9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKaW5kZXggYzFkZDY5YS4uYzAxOTdlYSAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdApAQCAtMjc3LDcgKzI3Nyw3IEBACiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CiAgICAgICAgZFsncHJpbWFyeSddICAgICAgICAgICAgICAgICMgZW50cnkgd2FzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZAotICAgICBGaWxlICJDOi9weXRob24zMy9saWIvd2Vha3JlZi5weSIsIGxpbmUgNDYsIGluIF9fZ2V0aXRlbV9fCisgICAgIEZpbGUgIkM6L3B5dGhvbjM0L2xpYi93ZWFrcmVmLnB5IiwgbGluZSA0NiwgaW4gX19nZXRpdGVtX18KICAgICAgICBvID0gc2VsZi5kYXRhW2tleV0oKQogICAgS2V5RXJyb3I6ICdwcmltYXJ5JwogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvd2hhdG5vdy5yc3QgYi9Eb2MvdHV0b3JpYWwvd2hhdG5vdy5yc3QKaW5kZXggN2ZjYmRjM2YuLjk3OWY1ODcgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC93aGF0bm93LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvd2hhdG5vdy5yc3QKQEAgLTIxLDggKzIxLDggQEAKICAgYW5kIG1hbnkgb3RoZXIgdGFza3MuIFNraW1taW5nIHRocm91Z2ggdGhlIExpYnJhcnkgUmVmZXJlbmNlIHdpbGwgZ2l2ZSB5b3UgYW4KICAgaWRlYSBvZiB3aGF0J3MgYXZhaWxhYmxlLgogCi0qIDpyZWY6YGluc3RhbGwtaW5kZXhgIGV4cGxhaW5zIGhvdyB0byBpbnN0YWxsIGV4dGVybmFsIG1vZHVsZXMgd3JpdHRlbiBieSBvdGhlcgotICBQeXRob24gdXNlcnMuCisqIDpyZWY6YGluc3RhbGxpbmctaW5kZXhgIGV4cGxhaW5zIGhvdyB0byBpbnN0YWxsIGFkZGl0aW9uYWwgbW9kdWxlcyB3cml0dGVuCisgIGJ5IG90aGVyIFB5dGhvbiB1c2Vycy4KIAogKiA6cmVmOmByZWZlcmVuY2UtaW5kZXhgOiBBIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIFB5dGhvbidzIHN5bnRheCBhbmQKICAgc2VtYW50aWNzLiAgSXQncyBoZWF2eSByZWFkaW5nLCBidXQgaXMgdXNlZnVsIGFzIGEgY29tcGxldGUgZ3VpZGUgdG8gdGhlCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvY21kbGluZS5yc3QgYi9Eb2MvdXNpbmcvY21kbGluZS5yc3QKaW5kZXggNGU3MTY4Zi4uNTVlMGU2NyAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL2NtZGxpbmUucnN0CisrKyBiL0RvYy91c2luZy9jbWRsaW5lLnJzdApAQCAtMjQsNyArMjQsNyBAQAogCiBXaGVuIGludm9raW5nIFB5dGhvbiwgeW91IG1heSBzcGVjaWZ5IGFueSBvZiB0aGVzZSBvcHRpb25zOjoKIAotICAgIHB5dGhvbiBbLWJCZEVoaU9xc1N1dlZXeD9dIFstYyBjb21tYW5kIHwgLW0gbW9kdWxlLW5hbWUgfCBzY3JpcHQgfCAtIF0gW2FyZ3NdCisgICAgcHl0aG9uIFstYkJkRWhpSU9xc1N1dlZXeD9dIFstYyBjb21tYW5kIHwgLW0gbW9kdWxlLW5hbWUgfCBzY3JpcHQgfCAtIF0gW2FyZ3NdCiAKIFRoZSBtb3N0IGNvbW1vbiB1c2UgY2FzZSBpcywgb2YgY291cnNlLCBhIHNpbXBsZSBpbnZvY2F0aW9uIG9mIGEgc2NyaXB0OjoKIApAQCAtODEsNyArODEsOCBAQAogICAgdGhlIGltcGxlbWVudGF0aW9uIG1heSBub3QgYWx3YXlzIGVuZm9yY2UgdGhpcyAoZS5nLiBpdCBtYXkgYWxsb3cgeW91IHRvCiAgICB1c2UgYSBuYW1lIHRoYXQgaW5jbHVkZXMgYSBoeXBoZW4pLgogCi0gICBQYWNrYWdlIG5hbWVzIGFyZSBhbHNvIHBlcm1pdHRlZC4gV2hlbiBhIHBhY2thZ2UgbmFtZSBpcyBzdXBwbGllZCBpbnN0ZWFkCisgICBQYWNrYWdlIG5hbWVzIChpbmNsdWRpbmcgbmFtZXNwYWNlIHBhY2thZ2VzKSBhcmUgYWxzbyBwZXJtaXR0ZWQuIFdoZW4gYQorICAgcGFja2FnZSBuYW1lIGlzIHN1cHBsaWVkIGluc3RlYWQKICAgIG9mIGEgbm9ybWFsIG1vZHVsZSwgdGhlIGludGVycHJldGVyIHdpbGwgZXhlY3V0ZSBgYDxwa2c+Ll9fbWFpbl9fYGAgYXMKICAgIHRoZSBtYWluIG1vZHVsZS4gVGhpcyBiZWhhdmlvdXIgaXMgZGVsaWJlcmF0ZWx5IHNpbWlsYXIgdG8gdGhlIGhhbmRsaW5nCiAgICBvZiBkaXJlY3RvcmllcyBhbmQgemlwZmlsZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlciBhcyB0aGUKQEAgLTExNSw2ICsxMTYsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIFN1cHBseSB0aGUgcGFja2FnZSBuYW1lIHRvIHJ1biBhIGBgX19tYWluX19gYCBzdWJtb2R1bGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBuYW1lc3BhY2UgcGFja2FnZXMgYXJlIGFsc28gc3VwcG9ydGVkCisKIAogLi4gZGVzY3JpYmU6OiAtCiAKQEAgLTE0Nyw3ICsxNTEsMTIgQEAKIAogSWYgbm8gaW50ZXJmYWNlIG9wdGlvbiBpcyBnaXZlbiwgOm9wdGlvbjpgLWlgIGlzIGltcGxpZWQsIGBgc3lzLmFyZ3ZbMF1gYCBpcwogYW4gZW1wdHkgc3RyaW5nIChgYCIiYGApIGFuZCB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBhZGRlZCB0byB0aGUKLXN0YXJ0IG9mIDpkYXRhOmBzeXMucGF0aGAuCitzdGFydCBvZiA6ZGF0YTpgc3lzLnBhdGhgLiAgQWxzbywgdGFiLWNvbXBsZXRpb24gYW5kIGhpc3RvcnkgZWRpdGluZyBpcworYXV0b21hdGljYWxseSBlbmFibGVkLCBpZiBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybSAoc2VlCis6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEF1dG9tYXRpYyBlbmFibGluZyBvZiB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nLgogCiAuLiBzZWVhbHNvOjogIDpyZWY6YHR1dC1pbnZva2luZ2AKIApAQCAtMTcwLDYgKzE3OSw4IEBACiAgICAgICAgUHl0aG9uIDMuMAogCiAKKy4uIF91c2luZy1vbi1taXNjLW9wdGlvbnM6CisKIE1pc2NlbGxhbmVvdXMgb3B0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTIwOCw2ICsyMTksMTcgQEAKICAgIHJhaXNlcyBhbiBleGNlcHRpb24uICBTZWUgYWxzbyA6ZW52dmFyOmBQWVRIT05JTlNQRUNUYC4KIAogCisuLiBjbWRvcHRpb246OiAtSQorCisgICBSdW4gUHl0aG9uIGluIGlzb2xhdGVkIG1vZGUuIFRoaXMgYWxzbyBpbXBsaWVzIC1FIGFuZCAtcy4KKyAgIEluIGlzb2xhdGVkIG1vZGUgOmRhdGE6YHN5cy5wYXRoYCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHQncyBkaXJlY3Rvcnkgbm9yCisgICB0aGUgdXNlcidzIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LiBBbGwgOmVudnZhcjpgUFlUSE9OKmAgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlcyBhcmUgaWdub3JlZCwgdG9vLiBGdXJ0aGVyIHJlc3RyaWN0aW9ucyBtYXkgYmUgaW1wb3NlZCB0byBwcmV2ZW50CisgICB0aGUgdXNlciBmcm9tIGluamVjdGluZyBtYWxpY2lvdXMgY29kZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY21kb3B0aW9uOjogLU8KIAogICAgVHVybiBvbiBiYXNpYyBvcHRpbWl6YXRpb25zLiAgVGhpcyBjaGFuZ2VzIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gZm9yCkBAIC0zNTgsOSArMzgwLDE5IEBACiAuLiBjbWRvcHRpb246OiAtWAogCiAgICBSZXNlcnZlZCBmb3IgdmFyaW91cyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvcHRpb25zLiAgQ1B5dGhvbiBjdXJyZW50bHkKLSAgIGRlZmluZXMganVzdCBvbmUsIHlvdSBjYW4gdXNlIGBgLVggZmF1bHRoYW5kbGVyYGAgdG8gZW5hYmxlCi0gICA6bW9kOmBmYXVsdGhhbmRsZXJgLiBJdCBhbHNvIGFsbG93cyB0byBwYXNzIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZlCi0gICB0aGVtIHRocm91Z2ggdGhlIDpkYXRhOmBzeXMuX3hvcHRpb25zYCBkaWN0aW9uYXJ5LgorICAgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHBvc3NpYmxlIHZhbHVlczoKKworICAgKiBgYC1YIGZhdWx0aGFuZGxlcmBgIHRvIGVuYWJsZSA6bW9kOmBmYXVsdGhhbmRsZXJgOworICAgKiBgYC1YIHNob3dyZWZjb3VudGBgIHRvIGVuYWJsZSB0aGUgb3V0cHV0IG9mIHRoZSB0b3RhbCByZWZlcmVuY2UgY291bnQKKyAgICAgYW5kIG1lbW9yeSBibG9ja3MgKG9ubHkgd29ya3Mgb24gZGVidWcgYnVpbGRzKTsKKyAgICogYGAtWCB0cmFjZW1hbGxvY2BgIHRvIHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyB1c2luZyB0aGUKKyAgICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4gQnkgZGVmYXVsdCwgb25seSB0aGUgbW9zdCByZWNlbnQgZnJhbWUgaXMKKyAgICAgc3RvcmVkIGluIGEgdHJhY2ViYWNrIG9mIGEgdHJhY2UuIFVzZSBgYC1YIHRyYWNlbWFsbG9jPU5GUkFNRWBgIHRvIHN0YXJ0CisgICAgIHRyYWNpbmcgd2l0aCBhIHRyYWNlYmFjayBsaW1pdCBvZiAqTkZSQU1FKiBmcmFtZXMuIFNlZSB0aGUKKyAgICAgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgSXQgYWxzbyBhbGxvd3MgdG8gcGFzcyBhcmJpdHJhcnkgdmFsdWVzIGFuZCByZXRyaWV2ZSB0aGVtIHRocm91Z2ggdGhlCisgICA6ZGF0YTpgc3lzLl94b3B0aW9uc2AgZGljdGlvbmFyeS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEl0IGlzIG5vdyBhbGxvd2VkIHRvIHBhc3MgOm9wdGlvbjpgLVhgIHdpdGggQ1B5dGhvbi4KQEAgLTM2OCw2ICs0MDAsOSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAgICAgICBUaGUgYGAtWCBmYXVsdGhhbmRsZXJgYCBvcHRpb24uCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlIGBgLVggc2hvd3JlZmNvdW50YGAgYW5kIGBgLVggdHJhY2VtYWxsb2NgYCBvcHRpb25zLgorCiAKIE9wdGlvbnMgeW91IHNob3VsZG4ndCB1c2UKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTM4NSw3ICs0MjAsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbmZsdWVuY2UgUHl0aG9uJ3MgYmVoYXZpb3IsIHRoZXkgYXJlIHByb2Nlc3NlZAotYmVmb3JlIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoZXMgb3RoZXIgdGhhbiAtRS4gIEl0IGlzIGN1c3RvbWFyeSB0aGF0CitiZWZvcmUgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdGhlciB0aGFuIC1FIG9yIC1JLiAgSXQgaXMgY3VzdG9tYXJ5IHRoYXQKIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdmVycmlkZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyB3aGVyZSB0aGVyZSBpcyBhCiBjb25mbGljdC4KIApAQCAtNDMwLDcgKzQ2NSw3IEBACiAgICBpcyBleGVjdXRlZCBpbiB0aGUgc2FtZSBuYW1lc3BhY2Ugd2hlcmUgaW50ZXJhY3RpdmUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIHNvCiAgICB0aGF0IG9iamVjdHMgZGVmaW5lZCBvciBpbXBvcnRlZCBpbiBpdCBjYW4gYmUgdXNlZCB3aXRob3V0IHF1YWxpZmljYXRpb24gaW4KICAgIHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9uLiAgWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgcHJvbXB0cyA6ZGF0YTpgc3lzLnBzMWAgYW5kCi0gICA6ZGF0YTpgc3lzLnBzMmAgaW4gdGhpcyBmaWxlLgorICAgOmRhdGE6YHN5cy5wczJgIGFuZCB0aGUgaG9vayA6ZGF0YTpgc3lzLl9faW50ZXJhY3RpdmVob29rX19gIGluIHRoaXMgZmlsZS4KIAogCiAuLiBlbnZ2YXI6OiBQWVRIT05ZMksKQEAgLTQ4NSw5ICs1MjAsOSBAQAogCiAuLiBlbnZ2YXI6OiBQWVRIT05ET05UV1JJVEVCWVRFQ09ERQogCi0gICBJZiB0aGlzIGlzIHNldCwgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvciBgYC5weW9gYCBmaWxlcyBvbiB0aGUKLSAgIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZSA6b3B0aW9uOmAtQmAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvcgorICAgYGAucHlvYGAgZmlsZXMgb24gdGhlIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgc3BlY2lmeWluZyB0aGUgOm9wdGlvbjpgLUJgIG9wdGlvbi4KIAogCiAuLiBlbnZ2YXI6OiBQWVRIT05IQVNIU0VFRApAQCAtNTEyLDEzICs1NDcsMTYgQEAKIC4uIGVudnZhcjo6IFBZVEhPTklPRU5DT0RJTkcKIAogICAgSWYgdGhpcyBpcyBzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlIGludGVycHJldGVyLCBpdCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHVzZWQKLSAgIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4IGBgZW5jb2RpbmduYW1lOmVycm9yaGFuZGxlcmBgLiBUaGUKLSAgIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCi0gICA6ZnVuYzpgc3RyLmVuY29kZWAuCisgICBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgaW4gdGhlIHN5bnRheCBgYGVuY29kaW5nbmFtZTplcnJvcmhhbmRsZXJgYC4gIEJvdGgKKyAgIHRoZSBgYGVuY29kaW5nbmFtZWBgIGFuZCB0aGUgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydHMgYXJlIG9wdGlvbmFsIGFuZCBoYXZlCisgICB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBzdHIuZW5jb2RlYC4KIAogICAgRm9yIHN0ZGVyciwgdGhlIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgaWdub3JlZDsgdGhlIGhhbmRsZXIgd2lsbCBhbHdheXMgYmUKICAgIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGBlbmNvZGluZ25hbWVgYCBwYXJ0IGlzIG5vdyBvcHRpb25hbC4KKwogCiAuLiBlbnZ2YXI6OiBQWVRIT05OT1VTRVJTSVRFCiAKQEAgLTU1NiwxNSArNTk0LDM0IEBACiAKIC4uIGVudnZhcjo6IFBZVEhPTkZBVUxUSEFORExFUgogCi0gICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgOmZ1bmM6YGZhdWx0aGFuZGxlci5lbmFibGVgIGlzIGNhbGxlZAotICAgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwKLSAgIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQgOmNvbnN0OmBTSUdJTExgIHNpZ25hbHMgdG8gZHVtcCB0aGUKLSAgIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywKKyAgIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCBpcyBjYWxsZWQgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yCisgICA6Y29uc3Q6YFNJR1NFR1ZgLCA6Y29uc3Q6YFNJR0ZQRWAsIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQKKyAgIDpjb25zdDpgU0lHSUxMYCBzaWduYWxzIHRvIGR1bXAgdGhlIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgIDpvcHRpb246YC1YYCBgYGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gZW52dmFyOjogUFlUSE9OVFJBQ0VNQUxMT0MKKworICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBzdGFydCB0cmFjaW5nCisgICBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIHVzaW5nIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBUaGUgdmFsdWUgb2YKKyAgIHRoZSB2YXJpYWJsZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiBhIHRyYWNlYmFjayBvZiBhCisgICB0cmFjZS4gRm9yIGV4YW1wbGUsIGBgUFlUSE9OVFJBQ0VNQUxMT0M9MWBgIHN0b3JlcyBvbmx5IHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWUuIFNlZSB0aGUgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZW52dmFyOjogUFlUSE9OQVNZTkNJT0RFQlVHCisKKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgZW5hYmxlIHRoZQorICAgOnJlZjpgZGVidWcgbW9kZSA8YXN5bmNpby1kZWJ1Zy1tb2RlPmAgb2YgdGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogRGVidWctbW9kZSB2YXJpYWJsZXMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9tYWMucnN0IGIvRG9jL3VzaW5nL21hYy5yc3QKaW5kZXggM2UxYjc0ZC4uNWJlNDM5ZiAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL21hYy5yc3QKKysrIGIvRG9jL3VzaW5nL21hYy5yc3QKQEAgLTI1LDcgKzI1LDcgQEAKIAogV2hhdCB5b3UgZ2V0IGFmdGVyIGluc3RhbGxpbmcgaXMgYSBudW1iZXIgb2YgdGhpbmdzOgogCi0qIEEgOmZpbGU6YE1hY1B5dGhvbiAzLjNgIGZvbGRlciBpbiB5b3VyIDpmaWxlOmBBcHBsaWNhdGlvbnNgIGZvbGRlci4gSW4gaGVyZQorKiBBIDpmaWxlOmBNYWNQeXRob24gMy40YCBmb2xkZXIgaW4geW91ciA6ZmlsZTpgQXBwbGljYXRpb25zYCBmb2xkZXIuIEluIGhlcmUKICAgeW91IGZpbmQgSURMRSwgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRoYXQgaXMgYSBzdGFuZGFyZCBwYXJ0IG9mIG9mZmljaWFsCiAgIFB5dGhvbiBkaXN0cmlidXRpb25zOyBQeXRob25MYXVuY2hlciwgd2hpY2ggaGFuZGxlcyBkb3VibGUtY2xpY2tpbmcgUHl0aG9uCiAgIHNjcmlwdHMgZnJvbSB0aGUgRmluZGVyOyBhbmQgdGhlICJCdWlsZCBBcHBsZXQiIHRvb2wsIHdoaWNoIGFsbG93cyB5b3UgdG8KQEAgLTkzLDcgKzkzLDcgQEAKIGFueXRoaW5nIHRoYXQgaGFzIGEgR1VJKSBuZWVkIHRvIGJlIHJ1biBpbiBhIHNwZWNpYWwgd2F5LiBVc2UgOnByb2dyYW06YHB5dGhvbndgCiBpbnN0ZWFkIG9mIDpwcm9ncmFtOmBweXRob25gIHRvIHN0YXJ0IHN1Y2ggc2NyaXB0cy4KIAotV2l0aCBQeXRob24gMy4zLCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgorV2l0aCBQeXRob24gMy40LCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgogCiAKIENvbmZpZ3VyYXRpb24KQEAgLTE1OCw3ICsxNTgsNyBAQAogRGlzdHJpYnV0aW5nIFB5dGhvbiBBcHBsaWNhdGlvbnMgb24gdGhlIE1hYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgIkJ1aWxkIEFwcGxldCIgdG9vbCB0aGF0IGlzIHBsYWNlZCBpbiB0aGUgTWFjUHl0aG9uIDMuMyBmb2xkZXIgaXMgZmluZSBmb3IKK1RoZSAiQnVpbGQgQXBwbGV0IiB0b29sIHRoYXQgaXMgcGxhY2VkIGluIHRoZSBNYWNQeXRob24gMy40IGZvbGRlciBpcyBmaW5lIGZvcgogcGFja2FnaW5nIHNtYWxsIFB5dGhvbiBzY3JpcHRzIG9uIHlvdXIgb3duIG1hY2hpbmUgdG8gcnVuIGFzIGEgc3RhbmRhcmQgTWFjCiBhcHBsaWNhdGlvbi4gVGhpcyB0b29sLCBob3dldmVyLCBpcyBub3Qgcm9idXN0IGVub3VnaCB0byBkaXN0cmlidXRlIFB5dGhvbgogYXBwbGljYXRpb25zIHRvIG90aGVyIHVzZXJzLgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3VuaXgucnN0IGIvRG9jL3VzaW5nL3VuaXgucnN0CmluZGV4IDQwNjM1YzYuLjNjN2ZjNDEgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy91bml4LnJzdAorKysgYi9Eb2MvdXNpbmcvdW5peC5yc3QKQEAgLTYwLDYgKzYwLDggQEAKIHByb21wdC4KIAogCisuLiBfYnVpbGRpbmctcHl0aG9uLW9uLXVuaXg6CisKIEJ1aWxkaW5nIFB5dGhvbgogPT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMgYi9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCmluZGV4IDVmZGJjOWIuLjUyY2RkYTAgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKKysrIGIvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYwpAQCAtMTEsNiArMTEsMTEgQEAKIFdpbmRvd3MpLiAgSXQgYWxzbyBjcmVhdGVzIGFuIChpbml0aWFsbHkgZW1wdHkpIGBgbGliL3B5dGhvblguWS9zaXRlLXBhY2thZ2VzYGAKIHN1YmRpcmVjdG9yeSAob24gV2luZG93cywgdGhpcyBpcyBgYExpYlxzaXRlLXBhY2thZ2VzYGApLgogCisuLiBzZWVhbHNvOjoKKworICAgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZTogQ3JlYXRpbmcgYW5kIHVzaW5nIHZpcnR1YWwgZW52aXJvbm1lbnRzCisgICA8aHR0cDovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC90dXRvcmlhbC5odG1sI2NyZWF0aW5nLWFuZC11c2luZy12aXJ0dWFsLWVudmlyb25tZW50cz5gX18KKwogLi4gaGlnaGxpZ2h0Ojogbm9uZQogCiBPbiBXaW5kb3dzLCB5b3UgbWF5IGhhdmUgdG8gaW52b2tlIHRoZSBgYHB5dmVudmBgIHNjcmlwdCBhcyBmb2xsb3dzLCBpZiB5b3UKQEAgLTI1LDcgKzMwLDcgQEAKIFRoZSBjb21tYW5kLCBpZiBydW4gd2l0aCBgYC1oYGAsIHdpbGwgc2hvdyB0aGUgYXZhaWxhYmxlIG9wdGlvbnM6OgogCiAgICAgdXNhZ2U6IHB5dmVudiBbLWhdIFstLXN5c3RlbS1zaXRlLXBhY2thZ2VzXSBbLS1zeW1saW5rc10gWy0tY2xlYXJdCi0gICAgICAgICAgICAgICAgICBbLS11cGdyYWRlXSBFTlZfRElSIFtFTlZfRElSIC4uLl0KKyAgICAgICAgICAgICAgICAgIFstLXVwZ3JhZGVdIFstLXdpdGhvdXQtcGlwXSBFTlZfRElSIFtFTlZfRElSIC4uLl0KIAogICAgIENyZWF0ZXMgdmlydHVhbCBQeXRob24gZW52aXJvbm1lbnRzIGluIG9uZSBvciBtb3JlIHRhcmdldCBkaXJlY3Rvcmllcy4KIApAQCAtMzgsMTEgKzQzLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCiAgICAgICAtLXN5bWxpbmtzICAgICAgICAgICAgIFRyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCB3aGVuIHN5bWxpbmtzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgdGhlIGRlZmF1bHQgZm9yIHRoZSBwbGF0Zm9ybS4KKyAgICAgIC0tY29waWVzICAgICAgICAgICAgICAgVHJ5IHRvIHVzZSBjb3BpZXMgcmF0aGVyIHRoYW4gc3ltbGlua3MsIGV2ZW4gd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcyBhcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSBwbGF0Zm9ybS4KICAgICAgIC0tY2xlYXIgICAgICAgICAgICAgICAgRGVsZXRlIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RvcnkgaWYgaXQgYWxyZWFkeSBleGlzdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLCBhbiBlcnJvciBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgICAgICAtLXVwZ3JhZGUgICAgICAgICAgICAgIFVwZ3JhZGUgdGhlIGVudmlyb25tZW50IGRpcmVjdG9yeSB0byB1c2UgdGhpcyB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uIGhhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLgorICAgICAgLS13aXRob3V0LXBpcCAgICAgICAgICBTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgKHBpcCBpcyBib290c3RyYXBwZWQgYnkgZGVmYXVsdCkKKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEluc3RhbGxzIHBpcCBieSBkZWZhdWx0LCBhZGRlZCB0aGUgYGAtLXdpdGhvdXQtcGlwYGAgIGFuZCBgYC0tY29waWVzYGAKKyAgIG9wdGlvbnMKIAogSWYgdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgYW4gZXJyb3Igd2lsbCBiZSByYWlzZWQsIHVubGVzcwogdGhlIGBgLS1jbGVhcmBgIG9yIGBgLS11cGdyYWRlYGAgb3B0aW9uIHdhcyBwcm92aWRlZC4KQEAgLTUxLDI1ICs2NCwyOSBAQAogYGBpbmNsdWRlLXN5c3RlbS1zaXRlLXBhY2thZ2VzYGAga2V5LCBzZXQgdG8gYGB0cnVlYGAgaWYgYGB2ZW52YGAgaXMKIHJ1biB3aXRoIHRoZSBgYC0tc3lzdGVtLXNpdGUtcGFja2FnZXNgYCBvcHRpb24sIGBgZmFsc2VgYCBvdGhlcndpc2UuCiAKK1VubGVzcyB0aGUgYGAtLXdpdGhvdXQtcGlwYGAgb3B0aW9uIGlzIGdpdmVuLCA6bW9kOmBlbnN1cmVwaXBgIHdpbGwgYmUKK2ludm9rZWQgdG8gYm9vdHN0cmFwIGBgcGlwYGAgaW50byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKwogTXVsdGlwbGUgcGF0aHMgY2FuIGJlIGdpdmVuIHRvIGBgcHl2ZW52YGAsIGluIHdoaWNoIGNhc2UgYW4gaWRlbnRpY2FsCiB2aXJ0dWFsZW52IHdpbGwgYmUgY3JlYXRlZCwgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBvcHRpb25zLCBhdCBlYWNoCiBwcm92aWRlZCBwYXRoLgogCiBPbmNlIGEgdmVudiBoYXMgYmVlbiBjcmVhdGVkLCBpdCBjYW4gYmUgImFjdGl2YXRlZCIgdXNpbmcgYSBzY3JpcHQgaW4gdGhlCi12ZW52J3MgYmluYXJ5IGRpcmVjdG9yeS4gVGhlIGludm9jYXRpb24gb2YgdGhlIHNjcmlwdCBpcyBwbGF0Zm9ybS1zcGVjaWZpYzogb24KLWEgUG9zaXggcGxhdGZvcm0sIHlvdSB3b3VsZCB0eXBpY2FsbHkgZG86OgordmVudidzIGJpbmFyeSBkaXJlY3RvcnkuIFRoZSBpbnZvY2F0aW9uIG9mIHRoZSBzY3JpcHQgaXMgcGxhdGZvcm0tc3BlY2lmaWM6CiAKLSAgICAkIHNvdXJjZSA8dmVudj4vYmluL2FjdGl2YXRlCi0KLXdoZXJlYXMgb24gV2luZG93cywgeW91IG1pZ2h0IGRvOjoKLQotICAgIEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUKLQotaWYgeW91IGFyZSB1c2luZyB0aGUgYGBjbWQuZXhlYGAgc2hlbGwsIG9yIHBlcmhhcHM6OgotCi0gICAgUFMgQzpcPiA8dmVudj4vU2NyaXB0cy9BY3RpdmF0ZS5wczEKLQotaWYgeW91IHVzZSBQb3dlclNoZWxsLgorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFBsYXRmb3JtICAgIHwgU2hlbGwgICAgICAgICAgIHwgQ29tbWFuZCB0byBhY3RpdmF0ZSB2aXJ0dWFsIGVudmlyb25tZW50IHwKKys9PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBQb3NpeCAgICAgICB8IGJhc2gvenNoICAgICAgICB8ICQgc291cmNlIDx2ZW52Pi9iaW4vYWN0aXZhdGUgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBmaXNoICAgICAgICAgICAgfCAkIC4gPHZlbnY+L2Jpbi9hY3RpdmF0ZS5maXNoICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgY3NoL3Rjc2ggICAgICAgIHwgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZS5jc2ggICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBXaW5kb3dzICAgICB8IGNtZC5leGUgICAgICAgICB8IEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUuYmF0ICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBQb3dlclNoZWxsICAgICAgfCBQUyBDOlw+IDx2ZW52Pi9TY3JpcHRzL0FjdGl2YXRlLnBzMSAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFlvdSBkb24ndCBzcGVjaWZpY2FsbHkgKm5lZWQqIHRvIGFjdGl2YXRlIGFuIGVudmlyb25tZW50OyBhY3RpdmF0aW9uIGp1c3QKIHByZXBlbmRzIHRoZSB2ZW52J3MgYmluYXJ5IGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsIHNvIHRoYXQgInB5dGhvbiIgaW52b2tlcyB0aGUKQEAgLTgzLDMgKzEwMCw1IEBACiBgYGRlYWN0aXZhdGUuYmF0YGAgYW5kIGBgRGVhY3RpdmF0ZS5wczFgYCB3aGljaCBhcmUgaW5zdGFsbGVkIHdoZW4gdGhlIHZlbnYgaXMKIGNyZWF0ZWQuCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgYGBmaXNoYGAgYW5kIGBgY3NoYGAgYWN0aXZhdGlvbiBzY3JpcHRzLgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3dpbmRvd3MucnN0IGIvRG9jL3VzaW5nL3dpbmRvd3MucnN0CmluZGV4IDZjNGQxNmUuLjQyYTkyYWYgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy93aW5kb3dzLnJzdAorKysgYi9Eb2MvdXNpbmcvd2luZG93cy5yc3QKQEAgLTExLDYgKzExLDEwIEBACiBUaGlzIGRvY3VtZW50IGFpbXMgdG8gZ2l2ZSBhbiBvdmVydmlldyBvZiBXaW5kb3dzLXNwZWNpZmljIGJlaGF2aW91ciB5b3Ugc2hvdWxkCiBrbm93IGFib3V0IHdoZW4gdXNpbmcgUHl0aG9uIG9uIE1pY3Jvc29mdCBXaW5kb3dzLgogCisuLiBYWFggKG5jb2dobGFuKQorCisgICBUaGlzIGxvb2tzIHJhdGhlciBzdGFsZSB0byBtZS4uLgorCiAKIEluc3RhbGxpbmcgUHl0aG9uCiA9PT09PT09PT09PT09PT09PQpAQCAtNTYwLDEyICs1NjQsNiBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBEaXJlY3RvcnkgICAgICAgICAgfCBNU1ZDIHZlcnNpb24gfCBWaXN1YWwgU3R1ZGlvIHZlcnNpb24gfAogKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09KwotfCA6ZmlsZTpgUEMvVkM2L2AgICAgfCA2LjAgICAgICAgICAgfCA5NyAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6ZmlsZTpgUEMvVlM3LjEvYCAgfCA3LjEgICAgICAgICAgfCAyMDAzICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6ZmlsZTpgUEMvVlM4LjAvYCAgfCA4LjAgICAgICAgICAgfCAyMDA1ICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6ZmlsZTpgUEMvVlM5LjAvYCAgfCA5LjAgICAgICAgICAgfCAyMDA4ICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6ZmlsZTpgUENidWlsZC9gICAgfCAxMC4wICAgICAgICAgfCAyMDEwICAgICAgICAgICAgICAgICAgfApkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNy5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi43LnJzdAppbmRleCBiMjZjOWIyLi5hNjIyNDk2IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi43LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi43LnJzdApAQCAtNyw3ICs3LDYgQEAKIC4uICBoeXBlcmxpbmsgYWxsIHRoZSBtZXRob2RzICYgZnVuY3Rpb25zLgogCiAuLiBUX1NUUklOR19JTlBMQUNFIG5vdCBkZXNjcmliZWQgaW4gbWFpbiBkb2NzCi0uLiAiRm9ybWF0IFN0cmluZyBTeW50YXgiIGluIHN0cmluZy5yc3QgY291bGQgdXNlIG1hbnkgbW9yZSBleGFtcGxlcy4KIAogLi4gJElkJAogICAgUnVsZXMgZm9yIG1haW50ZW5hbmNlOgpAQCAtNTAsMTcgKzQ5LDE2IEBACiAgICBUaGlzIHNhdmVzIHRoZSBtYWludGFpbmVyIHNvbWUgZWZmb3J0IGdvaW5nIHRocm91Z2ggdGhlIFNWTiBsb2dzCiAgICB3aGVuIHJlc2VhcmNoaW5nIGEgY2hhbmdlLgogCi1UaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMi43LiAgVGhlIGZpbmFsCi1yZWxlYXNlIG9mIDIuNyBpcyBjdXJyZW50bHkgc2NoZWR1bGVkIGZvciBKdWx5IDIwMTA7IHRoZSBkZXRhaWxlZAotc2NoZWR1bGUgaXMgZGVzY3JpYmVkIGluIDpwZXA6YDM3M2AuCitUaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMi43LiAgUHl0aG9uIDIuNyB3YXMgcmVsZWFzZWQKK29uIEp1bHkgMywgMjAxMC4KIAogTnVtZXJpYyBoYW5kbGluZyBoYXMgYmVlbiBpbXByb3ZlZCBpbiBtYW55IHdheXMsIGZvciBib3RoCi1mbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCBmb3IgdGhlIDpjbGFzczpgRGVjaW1hbGAgY2xhc3MuICBUaGVyZSBhcmUKLXNvbWUgdXNlZnVsIGFkZGl0aW9ucyB0byB0aGUgc3RhbmRhcmQgbGlicmFyeSwgc3VjaCBhcyBhIGdyZWF0bHkKLWVuaGFuY2VkIDptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUsIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlIGZvcgotcGFyc2luZyBjb21tYW5kLWxpbmUgb3B0aW9ucywgY29udmVuaWVudCBvcmRlcmVkLWRpY3Rpb25hcnkgYW5kCi06Y2xhc3M6YENvdW50ZXJgIGNsYXNzZXMgaW4gdGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUsIGFuZCBtYW55Ci1vdGhlciBpbXByb3ZlbWVudHMuCitmbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCBmb3IgdGhlIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgY2xhc3MuCitUaGVyZSBhcmUgc29tZSB1c2VmdWwgYWRkaXRpb25zIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCBzdWNoIGFzIGEKK2dyZWF0bHkgZW5oYW5jZWQgOm1vZDpgdW5pdHRlc3RgIG1vZHVsZSwgdGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUKK2ZvciBwYXJzaW5nIGNvbW1hbmQtbGluZSBvcHRpb25zLCBjb252ZW5pZW50IDpjbGFzczpgfmNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YAorYW5kIDpjbGFzczpgfmNvbGxlY3Rpb25zLkNvdW50ZXJgIGNsYXNzZXMgaW4gdGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUsCithbmQgbWFueSBvdGhlciBpbXByb3ZlbWVudHMuCiAKIFB5dGhvbiAyLjcgaXMgcGxhbm5lZCB0byBiZSB0aGUgbGFzdCBvZiB0aGUgMi54IHJlbGVhc2VzLCBzbyB3ZSB3b3JrZWQKIG9uIG1ha2luZyBpdCBhIGdvb2QgcmVsZWFzZSBmb3IgdGhlIGxvbmcgdGVybS4gIFRvIGhlbHAgd2l0aCBwb3J0aW5nCkBAIC04MSw0NSArNzksOTEgQEAKIFRoZSBGdXR1cmUgZm9yIFB5dGhvbiAyLngKID09PT09PT09PT09PT09PT09PT09PT09PT0KIAotUHl0aG9uIDIuNyBpcyBpbnRlbmRlZCB0byBiZSB0aGUgbGFzdCBtYWpvciByZWxlYXNlIGluIHRoZSAyLnggc2VyaWVzLgotVGhlIFB5dGhvbiBtYWludGFpbmVycyBhcmUgcGxhbm5pbmcgdG8gZm9jdXMgdGhlaXIgZnV0dXJlIGVmZm9ydHMgb24KLXRoZSBQeXRob24gMy54IHNlcmllcy4KK1B5dGhvbiAyLjcgaXMgdGhlIGxhc3QgbWFqb3IgcmVsZWFzZSBpbiB0aGUgMi54IHNlcmllcywgYXMgdGhlIFB5dGhvbgorbWFpbnRhaW5lcnMgaGF2ZSBzaGlmdGVkIHRoZSBmb2N1cyBvZiB0aGVpciBuZXcgZmVhdHVyZSBkZXZlbG9wbWVudCBlZmZvcnRzCit0byB0aGUgUHl0aG9uIDMueCBzZXJpZXMuIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSBQeXRob24gMiBjb250aW51ZXMgdG8KK3JlY2VpdmUgYnVnIGZpeGVzLCBhbmQgdG8gYmUgdXBkYXRlZCB0byBidWlsZCBjb3JyZWN0bHkgb24gbmV3IGhhcmR3YXJlIGFuZAordmVyc2lvbnMgb2Ygc3VwcG9ydGVkIG9wZXJhdGVkIHN5c3RlbXMsIHRoZXJlIHdpbGwgYmUgbm8gbmV3IGZ1bGwgZmVhdHVyZQorcmVsZWFzZXMgZm9yIHRoZSBsYW5ndWFnZSBvciBzdGFuZGFyZCBsaWJyYXJ5LgogCi1UaGlzIG1lYW5zIHRoYXQgMi43IHdpbGwgcmVtYWluIGluIHBsYWNlIGZvciBhIGxvbmcgdGltZSwgcnVubmluZwotcHJvZHVjdGlvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBub3QgYmVlbiBwb3J0ZWQgdG8gUHl0aG9uIDMueC4KLVR3byBjb25zZXF1ZW5jZXMgb2YgdGhlIGxvbmctdGVybSBzaWduaWZpY2FuY2Ugb2YgMi43IGFyZToKK0hvd2V2ZXIsIHdoaWxlIHRoZXJlIGlzIGEgbGFyZ2UgY29tbW9uIHN1YnNldCBiZXR3ZWVuIFB5dGhvbiAyLjcgYW5kIFB5dGhvbgorMywgYW5kIG1hbnkgb2YgdGhlIGNoYW5nZXMgaW52b2x2ZWQgaW4gbWlncmF0aW5nIHRvIHRoYXQgY29tbW9uIHN1YnNldCwgb3IKK2RpcmVjdGx5IHRvIFB5dGhvbiAzLCBjYW4gYmUgc2FmZWx5IGF1dG9tYXRlZCwgc29tZSBvdGhlciBjaGFuZ2VzIChub3RhYmx5Cit0aG9zZSBhc3NvY2lhdGVkIHdpdGggVW5pY29kZSBoYW5kbGluZykgbWF5IHJlcXVpcmUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLAorYW5kIHByZWZlcmFibHkgcm9idXN0IGF1dG9tYXRlZCByZWdyZXNzaW9uIHRlc3Qgc3VpdGVzLCB0byBtaWdyYXRlCitlZmZlY3RpdmVseS4KIAotKiBJdCdzIHZlcnkgbGlrZWx5IHRoZSAyLjcgcmVsZWFzZSB3aWxsIGhhdmUgYSBsb25nZXIgcGVyaW9kIG9mCi0gIG1haW50ZW5hbmNlIGNvbXBhcmVkIHRvIGVhcmxpZXIgMi54IHZlcnNpb25zLiAgUHl0aG9uIDIuNyB3aWxsCi0gIGNvbnRpbnVlIHRvIGJlIG1haW50YWluZWQgd2hpbGUgdGhlIHRyYW5zaXRpb24gdG8gMy54IGNvbnRpbnVlcywgYW5kCi0gIHRoZSBkZXZlbG9wZXJzIGFyZSBwbGFubmluZyB0byBzdXBwb3J0IFB5dGhvbiAyLjcgd2l0aCBidWctZml4Ci0gIHJlbGVhc2VzIGJleW9uZCB0aGUgdHlwaWNhbCB0d28geWVhcnMuCitUaGlzIG1lYW5zIHRoYXQgUHl0aG9uIDIuNyB3aWxsIHJlbWFpbiBpbiBwbGFjZSBmb3IgYSBsb25nIHRpbWUsIHByb3ZpZGluZyBhCitzdGFibGUgYW5kIHN1cHBvcnRlZCBiYXNlIHBsYXRmb3JtIGZvciBwcm9kdWN0aW9uIHN5c3RlbXMgdGhhdCBoYXZlIG5vdCB5ZXQKK2JlZW4gcG9ydGVkIHRvIFB5dGhvbiAzLiBUaGUgZnVsbCBleHBlY3RlZCBsaWZlY3ljbGUgb2YgdGhlIFB5dGhvbiAyLjcKK3NlcmllcyBpcyBkZXRhaWxlZCBpbiA6cGVwOmAzNzNgLgogCi0qIEEgcG9saWN5IGRlY2lzaW9uIHdhcyBtYWRlIHRvIHNpbGVuY2Ugd2FybmluZ3Mgb25seSBvZiBpbnRlcmVzdCB0bwotICBkZXZlbG9wZXJzLiAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBhbmQgaXRzCi0gIGRlc2NlbmRhbnRzIGFyZSBub3cgaWdub3JlZCB1bmxlc3Mgb3RoZXJ3aXNlIHJlcXVlc3RlZCwgcHJldmVudGluZwotICB1c2VycyBmcm9tIHNlZWluZyB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgYW4gYXBwbGljYXRpb24uICBUaGlzIGNoYW5nZQotICB3YXMgYWxzbyBtYWRlIGluIHRoZSBicmFuY2ggdGhhdCB3aWxsIGJlY29tZSBQeXRob24gMy4yLiAoRGlzY3Vzc2VkCi0gIG9uIHN0ZGxpYi1zaWcgYW5kIGNhcnJpZWQgb3V0IGluIDppc3N1ZTpgNzMxOWAuKQorU29tZSBrZXkgY29uc2VxdWVuY2VzIG9mIHRoZSBsb25nLXRlcm0gc2lnbmlmaWNhbmNlIG9mIDIuNyBhcmU6CiAKLSAgSW4gcHJldmlvdXMgcmVsZWFzZXMsIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgd2VyZQotICBlbmFibGVkIGJ5IGRlZmF1bHQsIHByb3ZpZGluZyBQeXRob24gZGV2ZWxvcGVycyB3aXRoIGEgY2xlYXIKLSAgaW5kaWNhdGlvbiBvZiB3aGVyZSB0aGVpciBjb2RlIG1heSBicmVhayBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uCi0gIG9mIFB5dGhvbi4KKyogQXMgbm90ZWQgYWJvdmUsIHRoZSAyLjcgcmVsZWFzZSBoYXMgYSBtdWNoIGxvbmdlciBwZXJpb2Qgb2YgbWFpbnRlbmFuY2UKKyAgd2hlbiBjb21wYXJlZCB0byBlYXJsaWVyIDIueCB2ZXJzaW9ucy4gUHl0aG9uIDIuNyBpcyBjdXJyZW50bHkgZXhwZWN0ZWQgdG8KKyAgcmVtYWluIHN1cHBvcnRlZCBieSB0aGUgY29yZSBkZXZlbG9wbWVudCB0ZWFtIChyZWNlaXZpbmcgc2VjdXJpdHkgdXBkYXRlcworICBhbmQgb3RoZXIgYnVnIGZpeGVzKSB1bnRpbCBhdCBsZWFzdCAyMDIwICgxMCB5ZWFycyBhZnRlciBpdHMgaW5pdGlhbAorICByZWxlYXNlLCBjb21wYXJlZCB0byB0aGUgbW9yZSB0eXBpY2FsIHN1cHBvcnQgcGVyaW9kIG9mIDE4LTI0IG1vbnRocykuCiAKLSAgSG93ZXZlciwgdGhlcmUgYXJlIGluY3JlYXNpbmdseSBtYW55IHVzZXJzIG9mIFB5dGhvbi1iYXNlZAotICBhcHBsaWNhdGlvbnMgd2hvIGFyZSBub3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRldmVsb3BtZW50IG9mCi0gIHRob3NlIGFwcGxpY2F0aW9ucy4gIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgYXJlCi0gIGlycmVsZXZhbnQgdG8gc3VjaCB1c2VycywgbWFraW5nIHRoZW0gd29ycnkgYWJvdXQgYW4gYXBwbGljYXRpb24KLSAgdGhhdCdzIGFjdHVhbGx5IHdvcmtpbmcgY29ycmVjdGx5IGFuZCBidXJkZW5pbmcgYXBwbGljYXRpb24gZGV2ZWxvcGVycwotICB3aXRoIHJlc3BvbmRpbmcgdG8gdGhlc2UgY29uY2VybnMuCisqIEFzIHRoZSBQeXRob24gMi43IHN0YW5kYXJkIGxpYnJhcnkgYWdlcywgbWFraW5nIGVmZmVjdGl2ZSB1c2Ugb2YgdGhlCisgIFB5dGhvbiBQYWNrYWdlIEluZGV4IChlaXRoZXIgZGlyZWN0bHkgb3IgdmlhIGEgcmVkaXN0cmlidXRvcikgYmVjb21lcworICBtb3JlIGltcG9ydGFudCBmb3IgUHl0aG9uIDIgdXNlcnMuIEluIGFkZGl0aW9uIHRvIGEgd2lkZSB2YXJpZXR5IG9mIHRoaXJkCisgIHBhcnR5IHBhY2thZ2VzIGZvciB2YXJpb3VzIHRhc2tzLCB0aGUgYXZhaWxhYmxlIHBhY2thZ2VzIGluY2x1ZGUgYmFja3BvcnRzCisgIG9mIG5ldyBtb2R1bGVzIGFuZCBmZWF0dXJlcyBmcm9tIHRoZSBQeXRob24gMyBzdGFuZGFyZCBsaWJyYXJ5IHRoYXQgYXJlCisgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMiwgYXMgd2VsbCBhcyB2YXJpb3VzIHRvb2xzIGFuZCBsaWJyYXJpZXMgdGhhdCBjYW4KKyAgbWFrZSBpdCBlYXNpZXIgdG8gbWlncmF0ZSB0byBQeXRob24gMy4gVGhlIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUKKyAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmc+YF9fIHByb3ZpZGVzIGd1aWRhbmNlIG9uIGRvd25sb2FkaW5nIGFuZAorICBpbnN0YWxsaW5nIHNvZnR3YXJlIGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LgogCi0gIFlvdSBjYW4gcmUtZW5hYmxlIGRpc3BsYXkgb2YgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyBieQotICBydW5uaW5nIFB5dGhvbiB3aXRoIHRoZSA6b3B0aW9uOmAtV2RlZmF1bHRgIChzaG9ydCBmb3JtOgotICA6b3B0aW9uOmAtV2RgKSBzd2l0Y2gsIG9yIGJ5IHNldHRpbmcgdGhlIDplbnZ2YXI6YFBZVEhPTldBUk5JTkdTYAotICBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgYCJkZWZhdWx0ImBgIChvciBgYCJkImBgKSBiZWZvcmUgcnVubmluZwotICBQeXRob24uICBQeXRob24gY29kZSBjYW4gYWxzbyByZS1lbmFibGUgdGhlbQotICBieSBjYWxsaW5nIGBgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdkZWZhdWx0JylgYC4KKyogV2hpbGUgdGhlIHByZWZlcnJlZCBhcHByb2FjaCB0byBlbmhhbmNpbmcgUHl0aG9uIDIgaXMgbm93IHRoZSBwdWJsaWNhdGlvbgorICBvZiBuZXcgcGFja2FnZXMgb24gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LCB0aGlzIGFwcHJvYWNoIGRvZXNuJ3QKKyAgbmVjZXNzYXJpbHkgd29yayBpbiBhbGwgY2FzZXMsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBuZXR3b3JrCisgIHNlY3VyaXR5LiBJbiBleGNlcHRpb25hbCBjYXNlcyB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGFkZXF1YXRlbHkgYnkKKyAgcHVibGlzaGluZyBuZXcgb3IgdXBkYXRlZCBwYWNrYWdlcyBvbiBQeVBJLCB0aGUgUHl0aG9uIEVuaGFuY2VtZW50CisgIFByb3Bvc2FsIHByb2Nlc3MgbWF5IGJlIHVzZWQgdG8gbWFrZSB0aGUgY2FzZSBmb3IgYWRkaW5nIG5ldyBmZWF0dXJlcworICBkaXJlY3RseSB0byB0aGUgUHl0aG9uIDIgc3RhbmRhcmQgbGlicmFyeS4gQW55IHN1Y2ggYWRkaXRpb25zLCBhbmQgdGhlCisgIG1haW50ZW5hbmNlIHJlbGVhc2VzIHdoZXJlIHRoZXkgd2VyZSBhZGRlZCwgd2lsbCBiZSBub3RlZCBpbiB0aGUKKyAgOnJlZjpgcHkyNy1tYWludGVuYW5jZS1lbmhhbmNlbWVudHNgIHNlY3Rpb24gYmVsb3cuCisKK0ZvciBwcm9qZWN0cyB3aXNoaW5nIHRvIG1pZ3JhdGUgZnJvbSBQeXRob24gMiB0byBQeXRob24gMywgb3IgZm9yIGxpYnJhcnkKK2FuZCBmcmFtZXdvcmsgZGV2ZWxvcGVycyB3aXNoaW5nIHRvIHN1cHBvcnQgdXNlcnMgb24gYm90aCBQeXRob24gMiBhbmQKK1B5dGhvbiAzLCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHRvb2xzIGFuZCBndWlkZXMgYXZhaWxhYmxlIHRvIGhlbHAgZGVjaWRlCitvbiBhIHN1aXRhYmxlIGFwcHJvYWNoIGFuZCBtYW5hZ2Ugc29tZSBvZiB0aGUgdGVjaG5pY2FsIGRldGFpbHMgaW52b2x2ZWQuCitUaGUgcmVjb21tZW5kZWQgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIDpyZWY6YHB5cG9ydGluZy1ob3d0b2AgSE9XVE8gZ3VpZGUuCisKKworQ2hhbmdlcyB0byB0aGUgSGFuZGxpbmcgb2YgRGVwcmVjYXRpb24gV2FybmluZ3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBQeXRob24gMi43LCBhIHBvbGljeSBkZWNpc2lvbiB3YXMgbWFkZSB0byBzaWxlbmNlIHdhcm5pbmdzIG9ubHkgb2YKK2ludGVyZXN0IHRvIGRldmVsb3BlcnMgYnkgZGVmYXVsdC4gIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgYW5kIGl0cworZGVzY2VuZGFudHMgYXJlIG5vdyBpZ25vcmVkIHVubGVzcyBvdGhlcndpc2UgcmVxdWVzdGVkLCBwcmV2ZW50aW5nCit1c2VycyBmcm9tIHNlZWluZyB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgYW4gYXBwbGljYXRpb24uICBUaGlzIGNoYW5nZQord2FzIGFsc28gbWFkZSBpbiB0aGUgYnJhbmNoIHRoYXQgYmVjYW1lIFB5dGhvbiAzLjIuIChEaXNjdXNzZWQKK29uIHN0ZGxpYi1zaWcgYW5kIGNhcnJpZWQgb3V0IGluIDppc3N1ZTpgNzMxOWAuKQorCitJbiBwcmV2aW91cyByZWxlYXNlcywgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyB3ZXJlCitlbmFibGVkIGJ5IGRlZmF1bHQsIHByb3ZpZGluZyBQeXRob24gZGV2ZWxvcGVycyB3aXRoIGEgY2xlYXIKK2luZGljYXRpb24gb2Ygd2hlcmUgdGhlaXIgY29kZSBtYXkgYnJlYWsgaW4gYSBmdXR1cmUgbWFqb3IgdmVyc2lvbgorb2YgUHl0aG9uLgorCitIb3dldmVyLCB0aGVyZSBhcmUgaW5jcmVhc2luZ2x5IG1hbnkgdXNlcnMgb2YgUHl0aG9uLWJhc2VkCithcHBsaWNhdGlvbnMgd2hvIGFyZSBub3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRldmVsb3BtZW50IG9mCit0aG9zZSBhcHBsaWNhdGlvbnMuICA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIG1lc3NhZ2VzIGFyZQoraXJyZWxldmFudCB0byBzdWNoIHVzZXJzLCBtYWtpbmcgdGhlbSB3b3JyeSBhYm91dCBhbiBhcHBsaWNhdGlvbgordGhhdCdzIGFjdHVhbGx5IHdvcmtpbmcgY29ycmVjdGx5IGFuZCBidXJkZW5pbmcgYXBwbGljYXRpb24gZGV2ZWxvcGVycword2l0aCByZXNwb25kaW5nIHRvIHRoZXNlIGNvbmNlcm5zLgorCitZb3UgY2FuIHJlLWVuYWJsZSBkaXNwbGF5IG9mIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgYnkKK3J1bm5pbmcgUHl0aG9uIHdpdGggdGhlIDpvcHRpb246YC1XZGVmYXVsdCA8LVc+YCAoc2hvcnQgZm9ybToKKzpvcHRpb246YC1XZCA8LVc+YCkgc3dpdGNoLCBvciBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05XQVJOSU5HU2AKK2Vudmlyb25tZW50IHZhcmlhYmxlIHRvIGBgImRlZmF1bHQiYGAgKG9yIGBgImQiYGApIGJlZm9yZSBydW5uaW5nCitQeXRob24uICBQeXRob24gY29kZSBjYW4gYWxzbyByZS1lbmFibGUgdGhlbQorYnkgY2FsbGluZyBgYHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZGVmYXVsdCcpYGAuCisKK1RoZSBgYHVuaXR0ZXN0YGAgbW9kdWxlIGFsc28gYXV0b21hdGljYWxseSByZWVuYWJsZXMgZGVwcmVjYXRpb24gd2FybmluZ3MKK3doZW4gcnVubmluZyB0ZXN0cy4KIAogCiBQeXRob24gMy4xIEZlYXR1cmVzCkBAIC0xMzMsNyArMTc3LDcgQEAKIEEgcGFydGlhbCBsaXN0IG9mIDMuMSBmZWF0dXJlcyB0aGF0IHdlcmUgYmFja3BvcnRlZCB0byAyLjc6CiAKICogVGhlIHN5bnRheCBmb3Igc2V0IGxpdGVyYWxzIChgYHsxLDIsM31gYCBpcyBhIG11dGFibGUgc2V0KS4KLSogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIChgYHsgaTogaSoyIGZvciBpIGluIHJhbmdlKDMpfWBgKS4KKyogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIChgYHtpOiBpKjIgZm9yIGkgaW4gcmFuZ2UoMyl9YGApLgogKiBNdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIGluIGEgc2luZ2xlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCiAqIEEgbmV3IHZlcnNpb24gb2YgdGhlIDptb2Q6YGlvYCBsaWJyYXJ5LCByZXdyaXR0ZW4gaW4gQyBmb3IgcGVyZm9ybWFuY2UuCiAqIFRoZSBvcmRlcmVkLWRpY3Rpb25hcnkgdHlwZSBkZXNjcmliZWQgaW4gOnJlZjpgcGVwLTAzNzJgLgpAQCAtMTU1LDcgKzE5OSw3IEBACiAqIDpmdW5jOmBvcGVyYXRvci5pc0NhbGxhYmxlYCBhbmQgOmZ1bmM6YG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXNgLAogICB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBpbiAzLngsIG5vdyB0cmlnZ2VyIHdhcm5pbmdzLgogKiBUaGUgOm9wdGlvbjpgLTNgIHN3aXRjaCBub3cgYXV0b21hdGljYWxseQotICBlbmFibGVzIHRoZSA6b3B0aW9uOmAtUXdhcm5gIHN3aXRjaCB0aGF0IGNhdXNlcyB3YXJuaW5ncworICBlbmFibGVzIHRoZSA6b3B0aW9uOmAtUXdhcm4gPC1RPmAgc3dpdGNoIHRoYXQgY2F1c2VzIHdhcm5pbmdzCiAgIGFib3V0IHVzaW5nIGNsYXNzaWMgZGl2aXNpb24gd2l0aCBpbnRlZ2VycyBhbmQgbG9uZyBpbnRlZ2Vycy4KIAogCkBAIC0zOTAsOSArNDM0LDEwIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgYXJncGFyc2UgbW9kdWxlIGRvY3VtZW50YXRpb24gPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2L2xpYnJhcnkvYXJncGFyc2UuaHRtbD5gX18KKyAgIDptb2Q6YGFyZ3BhcnNlYCBkb2N1bWVudGF0aW9uCisgICAgIFRoZSBkb2N1bWVudGF0aW9uIHBhZ2Ugb2YgdGhlIGFyZ3BhcnNlIG1vZHVsZS4KIAotICAgYFVwZ3JhZGluZyBvcHRwYXJzZSBjb2RlIHRvIHVzZSBhcmdwYXJzZSA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvbGlicmFyeS9hcmdwYXJzZS5odG1sI3VwZ3JhZGluZy1vcHRwYXJzZS1jb2RlPmBfXworICAgOnJlZjpgdXBncmFkaW5nLW9wdHBhcnNlLWNvZGVgCiAgICAgIFBhcnQgb2YgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBkZXNjcmliaW5nIGhvdyB0byBjb252ZXJ0CiAgICAgIGNvZGUgdGhhdCB1c2VzIDptb2Q6YG9wdHBhcnNlYC4KIApAQCAtNDAyLDggKzQ0Nyw2IEBACiBQRVAgMzkxOiBEaWN0aW9uYXJ5LUJhc2VkIENvbmZpZ3VyYXRpb24gRm9yIExvZ2dpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotLi4gWFhYIG5vdCBkb2N1bWVudGVkIGluIGxpYnJhcnkgcmVmZXJlbmNlIHlldDsgYWRkIGxpbmsgaGVyZSBvbmNlIGl0J3MgYWRkZWQuCi0KIFRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUgaXMgdmVyeSBmbGV4aWJsZTsgYXBwbGljYXRpb25zIGNhbiBkZWZpbmUKIGEgdHJlZSBvZiBsb2dnaW5nIHN1YnN5c3RlbXMsIGFuZCBlYWNoIGxvZ2dlciBpbiB0aGlzIHRyZWUgY2FuIGZpbHRlcgogb3V0IGNlcnRhaW4gbWVzc2FnZXMsIGZvcm1hdCB0aGVtIGRpZmZlcmVudGx5LCBhbmQgZGlyZWN0IG1lc3NhZ2VzIHRvCkBAIC00MTIsMjEgKzQ1NSwyMSBAQAogQWxsIHRoaXMgZmxleGliaWxpdHkgY2FuIHJlcXVpcmUgYSBsb3Qgb2YgY29uZmlndXJhdGlvbi4gIFlvdSBjYW4KIHdyaXRlIFB5dGhvbiBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBvYmplY3RzIGFuZCBzZXQgdGhlaXIgcHJvcGVydGllcywKIGJ1dCBhIGNvbXBsZXggc2V0LXVwIHJlcXVpcmVzIHZlcmJvc2UgYnV0IGJvcmluZyBjb2RlLgotOm1vZDpgbG9nZ2luZ2AgYWxzbyBzdXBwb3J0cyBhIDpmdW5jOmB+bG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZ2AKKzptb2Q6YGxvZ2dpbmdgIGFsc28gc3VwcG9ydHMgYSA6ZnVuYzpgfmxvZ2dpbmcuZmlsZUNvbmZpZ2AKIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgZmlsZSwgYnV0IHRoZSBmaWxlIGZvcm1hdCBkb2Vzbid0IHN1cHBvcnQKIGNvbmZpZ3VyaW5nIGZpbHRlcnMsIGFuZCBpdCdzIG1lc3NpZXIgdG8gZ2VuZXJhdGUgcHJvZ3JhbW1hdGljYWxseS4KIAotUHl0aG9uIDIuNyBhZGRzIGEgOmZ1bmM6YH5sb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnYCBmdW5jdGlvbiB0aGF0CitQeXRob24gMi43IGFkZHMgYSA6ZnVuYzpgfmxvZ2dpbmcuZGljdENvbmZpZ2AgZnVuY3Rpb24gdGhhdAogdXNlcyBhIGRpY3Rpb25hcnkgdG8gY29uZmlndXJlIGxvZ2dpbmcuICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvCiBwcm9kdWNlIGEgZGljdGlvbmFyeSBmcm9tIGRpZmZlcmVudCBzb3VyY2VzOiBjb25zdHJ1Y3Qgb25lIHdpdGggY29kZTsKIHBhcnNlIGEgZmlsZSBjb250YWluaW5nIEpTT047IG9yIHVzZSBhIFlBTUwgcGFyc2luZyBsaWJyYXJ5IGlmIG9uZSBpcwotaW5zdGFsbGVkLgoraW5zdGFsbGVkLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDpyZWY6YGxvZ2dpbmctY29uZmlnLWFwaWAuCiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb25maWd1cmVzIHR3byBsb2dnZXJzLCB0aGUgcm9vdCBsb2dnZXIgYW5kIGEKLWxvZ2dlciBuYW1lZCAibmV0d29yayIuICAgTWVzc2FnZXMgc2VudCB0byB0aGUgcm9vdCBsb2dnZXIgd2lsbCBiZQorbG9nZ2VyIG5hbWVkICJuZXR3b3JrIi4gIE1lc3NhZ2VzIHNlbnQgdG8gdGhlIHJvb3QgbG9nZ2VyIHdpbGwgYmUKIHNlbnQgdG8gdGhlIHN5c3RlbSBsb2cgdXNpbmcgdGhlIHN5c2xvZyBwcm90b2NvbCwgYW5kIG1lc3NhZ2VzCiB0byB0aGUgIm5ldHdvcmsiIGxvZ2dlciB3aWxsIGJlIHdyaXR0ZW4gdG8gYSA6ZmlsZTpgbmV0d29yay5sb2dgIGZpbGUKLXRoYXQgd2lsbCBiZSByb3RhdGVkIG9uY2UgdGhlIGxvZyByZWFjaGVzIDFNYi4KK3RoYXQgd2lsbCBiZSByb3RhdGVkIG9uY2UgdGhlIGxvZyByZWFjaGVzIDFNQi4KIAogOjoKIApAQCAtNDQ1LDcgKzQ4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJy9sb2dzL25ldHdvcmsubG9nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ3N0YW5kYXJkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnSU5GTycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ21heEJ5dGVzJzogMTAyNCoxMDI0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4Qnl0ZXMnOiAxMDAwMDAwfSwKICAgICAgICAgICAgICAgICAgICdzeXNsb2cnOiB7J2NsYXNzJzogJ2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnc3RhbmRhcmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnRVJST1InfX0sCkBAIC00ODMsMTYgKzUyNiwxOSBAQAogICBmb3IgVURQIG9yIDpjb25zdDpgc29ja2V0LlNPQ0tfU1RSRUFNYCBmb3IgVENQLiAgVGhlIGRlZmF1bHQKICAgcHJvdG9jb2wgcmVtYWlucyBVRFAuCiAKLSogOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlcyBnYWluZWQgYSA6bWV0aDpgZ2V0Q2hpbGRgIG1ldGhvZCB0aGF0IHJldHJpZXZlcyBhCi0gIGRlc2NlbmRhbnQgbG9nZ2VyIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC4gIEZvciBleGFtcGxlLAotICBvbmNlIHlvdSByZXRyaWV2ZSBhIGxvZ2dlciBieSBkb2luZyBgYGxvZyA9IGdldExvZ2dlcignYXBwJylgYCwKKyogOmNsYXNzOmB+bG9nZ2luZy5Mb2dnZXJgIGluc3RhbmNlcyBnYWluZWQgYSA6bWV0aDpgfmxvZ2dpbmcuTG9nZ2VyLmdldENoaWxkYAorICBtZXRob2QgdGhhdCByZXRyaWV2ZXMgYSBkZXNjZW5kYW50IGxvZ2dlciB1c2luZyBhIHJlbGF0aXZlIHBhdGguCisgIEZvciBleGFtcGxlLCBvbmNlIHlvdSByZXRyaWV2ZSBhIGxvZ2dlciBieSBkb2luZyBgYGxvZyA9IGdldExvZ2dlcignYXBwJylgYCwKICAgY2FsbGluZyBgYGxvZy5nZXRDaGlsZCgnbmV0d29yay5saXN0ZW4nKWBgIGlzIGVxdWl2YWxlbnQgdG8KICAgYGBnZXRMb2dnZXIoJ2FwcC5uZXR3b3JrLmxpc3RlbicpYGAuCiAKLSogVGhlIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgY2xhc3MgZ2FpbmVkIGEgOm1ldGg6YGlzRW5hYmxlZEZvcmAgbWV0aG9kCi0gIHRoYXQgdGFrZXMgYSAqbGV2ZWwqIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIHdvdWxkCisqIFRoZSA6Y2xhc3M6YH5sb2dnaW5nLkxvZ2dlckFkYXB0ZXJgIGNsYXNzIGdhaW5lZCBhCisgIDptZXRoOmB+bG9nZ2luZy5Mb2dnZXJBZGFwdGVyLmlzRW5hYmxlZEZvcmAgbWV0aG9kIHRoYXQgdGFrZXMgYQorICAqbGV2ZWwqIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIHdvdWxkCiAgIHByb2Nlc3MgYSBtZXNzYWdlIG9mIHRoYXQgbGV2ZWwgb2YgaW1wb3J0YW5jZS4KIAorLi4gWFhYOiBMb2dnZXIgb2JqZWN0cyBkb24ndCBoYXZlIGEgY2xhc3MgZGVjbGFyYXRpb24gc28gdGhlIGxpbmsgZG9uJ3Qgd29yaworCiAuLiBzZWVhbHNvOjoKIAogICAgOnBlcDpgMzkxYCAtIERpY3Rpb25hcnktQmFzZWQgQ29uZmlndXJhdGlvbiBGb3IgTG9nZ2luZwpAQCAtNTAxLDE0ICs1NDcsMTUgQEAKIFBFUCAzMTA2OiBEaWN0aW9uYXJ5IFZpZXdzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBkaWN0aW9uYXJ5IG1ldGhvZHMgOm1ldGg6YGtleXNgLCA6bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AKLWFyZSBkaWZmZXJlbnQgaW4gUHl0aG9uIDMueC4gIFRoZXkgcmV0dXJuIGFuIG9iamVjdCBjYWxsZWQgYSA6ZGZuOmB2aWV3YAotaW5zdGVhZCBvZiBhIGZ1bGx5IG1hdGVyaWFsaXplZCBsaXN0LgorVGhlIGRpY3Rpb25hcnkgbWV0aG9kcyA6bWV0aDpgfmRpY3Qua2V5c2AsIDptZXRoOmB+ZGljdC52YWx1ZXNgLCBhbmQKKzptZXRoOmB+ZGljdC5pdGVtc2AgYXJlIGRpZmZlcmVudCBpbiBQeXRob24gMy54LiAgVGhleSByZXR1cm4gYW4gb2JqZWN0CitjYWxsZWQgYSA6ZGZuOmB2aWV3YCBpbnN0ZWFkIG9mIGEgZnVsbHkgbWF0ZXJpYWxpemVkIGxpc3QuCiAKLUl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgcmV0dXJuIHZhbHVlcyBvZiA6bWV0aDpga2V5c2AsCi06bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AgaW4gUHl0aG9uIDIuNyBiZWNhdXNlIHRvbyBtdWNoIGNvZGUKLXdvdWxkIGJyZWFrLiAgSW5zdGVhZCB0aGUgMy54IHZlcnNpb25zIHdlcmUgYWRkZWQgdW5kZXIgdGhlIG5ldyBuYW1lcwotOm1ldGg6YHZpZXdrZXlzYCwgOm1ldGg6YHZpZXd2YWx1ZXNgLCBhbmQgOm1ldGg6YHZpZXdpdGVtc2AuCitJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIHJldHVybiB2YWx1ZXMgb2YgOm1ldGg6YH5kaWN0LmtleXNgLAorOm1ldGg6YH5kaWN0LnZhbHVlc2AsIGFuZCA6bWV0aDpgfmRpY3QuaXRlbXNgIGluIFB5dGhvbiAyLjcgYmVjYXVzZQordG9vIG11Y2ggY29kZSB3b3VsZCBicmVhay4gIEluc3RlYWQgdGhlIDMueCB2ZXJzaW9ucyB3ZXJlIGFkZGVkCit1bmRlciB0aGUgbmV3IG5hbWVzIDptZXRoOmB+ZGljdC52aWV3a2V5c2AsIDptZXRoOmB+ZGljdC52aWV3dmFsdWVzYCwKK2FuZCA6bWV0aDpgfmRpY3Qudmlld2l0ZW1zYC4KIAogOjoKIApAQCAtNTUwLDggKzU5Nyw4IEBACiAgICAgUnVudGltZUVycm9yOiBkaWN0aW9uYXJ5IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uCiAKIFlvdSBjYW4gdXNlIHRoZSB2aWV3IG1ldGhvZHMgaW4gUHl0aG9uIDIueCBjb2RlLCBhbmQgdGhlIDJ0bzMKLWNvbnZlcnRlciB3aWxsIGNoYW5nZSB0aGVtIHRvIHRoZSBzdGFuZGFyZCA6bWV0aDpga2V5c2AsCi06bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AgbWV0aG9kcy4KK2NvbnZlcnRlciB3aWxsIGNoYW5nZSB0aGVtIHRvIHRoZSBzdGFuZGFyZCA6bWV0aDpgfmRpY3Qua2V5c2AsCis6bWV0aDpgfmRpY3QudmFsdWVzYCwgYW5kIDptZXRoOmB+ZGljdC5pdGVtc2AgbWV0aG9kcy4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTYyNCw3ICs2NzEsNyBAQAogICBgYHt9YGAgY29udGludWVzIHRvIHJlcHJlc2VudCBhbiBlbXB0eSBkaWN0aW9uYXJ5OyB1c2UKICAgYGBzZXQoKWBgIGZvciBhbiBlbXB0eSBzZXQuCiAKLSAgICA+Pj4gezEsMiwzLDQsNX0KKyAgICA+Pj4gezEsIDIsIDMsIDQsIDV9CiAgICAgc2V0KFsxLCAyLCAzLCA0LCA1XSkKICAgICA+Pj4gc2V0KCkgIyBlbXB0eSBzZXQKICAgICBzZXQoW10pCkBAIC03OTQsNyArODQxLDcgQEAKICAgYGBOb25lYGAgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LiAgKEZpeGVkIGJ5IEdlb3JnIEJyYW5kbDsKICAgOmlzc3VlOmA0NzU5YC4pCiAKLSAgLi4gYnl0ZWFycmF5IGRvZXNuJ3Qgc2VlbSB0byBiZSBkb2N1bWVudGVkCisgIC4uIFhYWCBieXRlYXJyYXkgZG9lc24ndCBzZWVtIHRvIGJlIGRvY3VtZW50ZWQKIAogKiBXaGVuIHVzaW5nIGBgQGNsYXNzbWV0aG9kYGAgYW5kIGBgQHN0YXRpY21ldGhvZGBgIHRvIHdyYXAKICAgbWV0aG9kcyBhcyBjbGFzcyBvciBzdGF0aWMgbWV0aG9kcywgdGhlIHdyYXBwZXIgb2JqZWN0IG5vdwpAQCAtODY3LDEyICs5MTQsNiBAQAogCiBTZXZlcmFsIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBoYXZlIGJlZW4gYWRkZWQ6CiAKLS4uICogQSBuZXcgOnByb2dyYW06YGNvbmZpZ3VyZWAgb3B0aW9uLCA6b3B0aW9uOmAtLXdpdGgtY29tcHV0ZWQtZ290b3NgLAotICAgY29tcGlsZXMgdGhlIG1haW4gYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgbG9vcCB1c2luZyBhIG5ldyBkaXNwYXRjaAotICAgbWVjaGFuaXNtIHRoYXQgZ2l2ZXMgc3BlZWR1cHMgb2YgdXAgdG8gMjAlLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbQotICAgYW5kIGJlbmNobWFyay4gIFRoZSBuZXcgbWVjaGFuaXNtIGlzIG9ubHkgc3VwcG9ydGVkIG9uIGNlcnRhaW4KLSAgIGNvbXBpbGVycywgc3VjaCBhcyBnY2MsIFN1blBybywgYW5kIGljYy4KLQogKiBBIG5ldyBvcGNvZGUgd2FzIGFkZGVkIHRvIHBlcmZvcm0gdGhlIGluaXRpYWwgc2V0dXAgZm9yCiAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLCBsb29raW5nIHVwIHRoZSA6bWV0aDpgX19lbnRlcl9fYCBhbmQKICAgOm1ldGg6YF9fZXhpdF9fYCBtZXRob2RzLiAgKENvbnRyaWJ1dGVkIGJ5IEJlbmphbWluIFBldGVyc29uLikKQEAgLTEwNTQsNyArMTA5NSw3IEBACiAgIDptZXRoOmB+Y29sbGVjdGlvbnMuZGVxdWUuY291bnRgIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZgogICBjb250YWluZWQgZWxlbWVudHMgZXF1YWwgdG8gdGhlIHN1cHBsaWVkIGFyZ3VtZW50ICp4KiwgYW5kIGEKICAgOm1ldGg6YH5jb2xsZWN0aW9ucy5kZXF1ZS5yZXZlcnNlYCBtZXRob2QgdGhhdCByZXZlcnNlcyB0aGUgZWxlbWVudHMKLSAgb2YgdGhlIGRlcXVlIGluLXBsYWNlLiAgOmNsYXNzOmBkZXF1ZWAgYWxzbyBleHBvc2VzIGl0cyBtYXhpbXVtCisgIG9mIHRoZSBkZXF1ZSBpbi1wbGFjZS4gIDpjbGFzczpgfmNvbGxlY3Rpb25zLmRlcXVlYCBhbHNvIGV4cG9zZXMgaXRzIG1heGltdW0KICAgbGVuZ3RoIGFzIHRoZSByZWFkLW9ubHkgOmF0dHI6YH5jb2xsZWN0aW9ucy5kZXF1ZS5tYXhsZW5gIGF0dHJpYnV0ZS4KICAgKEJvdGggZmVhdHVyZXMgYWRkZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIuKQogCkBAIC0xMTM1LDE1ICsxMTc2LDE0IEBACiAgIGBgRGVjaW1hbCgnMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1JylgYC4KICAgKEltcGxlbWVudGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDQ3OTZgLikKIAotICBDb21wYXJpbmcgaW5zdGFuY2VzIG9mIDpjbGFzczpgRGVjaW1hbGAgd2l0aCBmbG9hdGluZy1wb2ludAorICBDb21wYXJpbmcgaW5zdGFuY2VzIG9mIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgd2l0aCBmbG9hdGluZy1wb2ludAogICBudW1iZXJzIG5vdyBwcm9kdWNlcyBzZW5zaWJsZSByZXN1bHRzIGJhc2VkIG9uIHRoZSBudW1lcmljIHZhbHVlcwogICBvZiB0aGUgb3BlcmFuZHMuICBQcmV2aW91c2x5IHN1Y2ggY29tcGFyaXNvbnMgd291bGQgZmFsbCBiYWNrIHRvCiAgIFB5dGhvbidzIGRlZmF1bHQgcnVsZXMgZm9yIGNvbXBhcmluZyBvYmplY3RzLCB3aGljaCBwcm9kdWNlZCBhcmJpdHJhcnkKICAgcmVzdWx0cyBiYXNlZCBvbiB0aGVpciB0eXBlLiAgTm90ZSB0aGF0IHlvdSBzdGlsbCBjYW5ub3QgY29tYmluZQogICA6Y2xhc3M6YERlY2ltYWxgIGFuZCBmbG9hdGluZy1wb2ludCBpbiBvdGhlciBvcGVyYXRpb25zIHN1Y2ggYXMgYWRkaXRpb24sCiAgIHNpbmNlIHlvdSBzaG91bGQgYmUgZXhwbGljaXRseSBjaG9vc2luZyBob3cgdG8gY29udmVydCBiZXR3ZWVuIGZsb2F0IGFuZAotICA6Y2xhc3M6YERlY2ltYWxgLgotICAoRml4ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgMjUzMWAuKQorICA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgLiAgKEZpeGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDI1MzFgLikKIAogICBUaGUgY29uc3RydWN0b3IgZm9yIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgbm93IGFjY2VwdHMKICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycyAoYWRkZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgODI1N2ApCkBAIC0xMTk1LDggKzEyMzUsOCBAQAogCiAgIE9yZGVyaW5nIGNvbXBhcmlzb25zIChgYDxgYCwgYGA8PWBgLCBgYD5gYCwgYGA+PWBgKSBiZXR3ZWVuCiAgIGZyYWN0aW9ucyBhbmQgY29tcGxleCBudW1iZXJzIG5vdyByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuCi0gIFRoaXMgZml4ZXMgYW4gb3ZlcnNpZ2h0LCBtYWtpbmcgdGhlIDpjbGFzczpgRnJhY3Rpb25gIG1hdGNoIHRoZSBvdGhlcgotICBudW1lcmljIHR5cGVzLgorICBUaGlzIGZpeGVzIGFuIG92ZXJzaWdodCwgbWFraW5nIHRoZSA6Y2xhc3M6YH5mcmFjdGlvbnMuRnJhY3Rpb25gCisgIG1hdGNoIHRoZSBvdGhlciBudW1lcmljIHR5cGVzLgogCiAgIC4uIHJldmlzaW9uIDc5NDU1CiAKQEAgLTEyMTAsNyArMTI1MCw3IEBACiAgIHVwbG9hZHMgdGhhbmtzIHRvIGFuIGFkZGVkICpyZXN0KiBwYXJhbWV0ZXIgKHBhdGNoIGJ5IFBhYmxvIE1vdXpvOwogICA6aXNzdWU6YDY4NDVgLikKIAotKiBOZXcgY2xhc3MgZGVjb3JhdG9yOiA6ZnVuYzpgdG90YWxfb3JkZXJpbmdgIGluIHRoZSA6bW9kOmBmdW5jdG9vbHNgCisqIE5ldyBjbGFzcyBkZWNvcmF0b3I6IDpmdW5jOmB+ZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nYCBpbiB0aGUgOm1vZDpgZnVuY3Rvb2xzYAogICBtb2R1bGUgdGFrZXMgYSBjbGFzcyB0aGF0IGRlZmluZXMgYW4gOm1ldGg6YF9fZXFfX2AgbWV0aG9kIGFuZCBvbmUgb2YKICAgOm1ldGg6YF9fbHRfX2AsIDptZXRoOmBfX2xlX19gLCA6bWV0aDpgX19ndF9fYCwgb3IgOm1ldGg6YF9fZ2VfX2AsCiAgIGFuZCBnZW5lcmF0ZXMgdGhlIG1pc3NpbmcgY29tcGFyaXNvbiBtZXRob2RzLiAgU2luY2UgdGhlCkBAIC0xMjE4LDcgKzEyNTgsNyBAQAogICB0aGlzIGRlY29yYXRvciBtYWtlcyBpdCBlYXNpZXIgdG8gZGVmaW5lIG9yZGVyZWQgY2xhc3Nlcy4KICAgKEFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDU0NzlgLikKIAotICBOZXcgZnVuY3Rpb246IDpmdW5jOmBjbXBfdG9fa2V5YCB3aWxsIHRha2UgYW4gb2xkLXN0eWxlIGNvbXBhcmlzb24KKyAgTmV3IGZ1bmN0aW9uOiA6ZnVuYzpgfmZ1bmN0b29scy5jbXBfdG9fa2V5YCB3aWxsIHRha2UgYW4gb2xkLXN0eWxlIGNvbXBhcmlzb24KICAgZnVuY3Rpb24gdGhhdCBleHBlY3RzIHR3byBhcmd1bWVudHMgYW5kIHJldHVybiBhIG5ldyBjYWxsYWJsZSB0aGF0CiAgIGNhbiBiZSB1c2VkIGFzIHRoZSAqa2V5KiBwYXJhbWV0ZXIgdG8gZnVuY3Rpb25zIHN1Y2ggYXMKICAgOmZ1bmM6YHNvcnRlZGAsIDpmdW5jOmBtaW5gIGFuZCA6ZnVuYzpgbWF4YCwgZXRjLiAgVGhlIHByaW1hcnkKQEAgLTEzNDUsNyArMTM4NSw3IEBACiAgIHdpdGggYW55IG9iamVjdCBsaXRlcmFsIHRoYXQgZGVjb2RlcyB0byBhIGxpc3Qgb2YgcGFpcnMuCiAgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA1MzgxYC4pCiAKLSogVGhlIDptb2Q6YG1haWxib3hgIG1vZHVsZSdzIDpjbGFzczpgTWFpbGRpcmAgY2xhc3Mgbm93IHJlY29yZHMgdGhlCisqIFRoZSA6bW9kOmBtYWlsYm94YCBtb2R1bGUncyA6Y2xhc3M6YH5tYWlsYm94Lk1haWxkaXJgIGNsYXNzIG5vdyByZWNvcmRzIHRoZQogICB0aW1lc3RhbXAgb24gdGhlIGRpcmVjdG9yaWVzIGl0IHJlYWRzLCBhbmQgb25seSByZS1yZWFkcyB0aGVtIGlmIHRoZQogICBtb2RpZmljYXRpb24gdGltZSBoYXMgc3Vic2VxdWVudGx5IGNoYW5nZWQuICBUaGlzIGltcHJvdmVzCiAgIHBlcmZvcm1hbmNlIGJ5IGF2b2lkaW5nIHVubmVlZGVkIGRpcmVjdG9yeSBzY2Fucy4gIChGaXhlZCBieQpAQCAtMTQzMiw3ICsxNDcyLDcgQEAKICogVGhlIDptb2Q6YHNpZ25hbGAgbW9kdWxlIG5vIGxvbmdlciByZS1pbnN0YWxscyB0aGUgc2lnbmFsIGhhbmRsZXIKICAgdW5sZXNzIHRoaXMgaXMgdHJ1bHkgbmVjZXNzYXJ5LCB3aGljaCBmaXhlcyBhIGJ1ZyB0aGF0IGNvdWxkIG1ha2UgaXQKICAgaW1wb3NzaWJsZSB0byBjYXRjaCB0aGUgRUlOVFIgc2lnbmFsIHJvYnVzdGx5LiAgKEZpeGVkIGJ5Ci0gIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaTsgOmlzc3VlOmA4MzU0YC4pCisgIENoYXJsZXMtRnJhbmNvaXMgTmF0YWxpOyA6aXNzdWU6YDgzNTRgLikKIAogKiBOZXcgZnVuY3Rpb25zOiBpbiB0aGUgOm1vZDpgc2l0ZWAgbW9kdWxlLCB0aHJlZSBuZXcgZnVuY3Rpb25zCiAgIHJldHVybiB2YXJpb3VzIHNpdGUtIGFuZCB1c2VyLXNwZWNpZmljIHBhdGhzLgpAQCAtMTQ2NiwxMCArMTUwNiwxMCBAQAogICBkZWZhdWx0cyB0byBGYWxzZTsgaWYgb3ZlcnJpZGRlbiB0byBiZSBUcnVlLAogICBuZXcgcmVxdWVzdCBjb25uZWN0aW9ucyB3aWxsIGhhdmUgdGhlIFRDUF9OT0RFTEFZIG9wdGlvbiBzZXQgdG8KICAgcHJldmVudCBidWZmZXJpbmcgbWFueSBzbWFsbCBzZW5kcyBpbnRvIGEgc2luZ2xlIFRDUCBwYWNrZXQuCi0gIFRoZSA6YXR0cjpgflNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIudGltZW91dGAgY2xhc3MgYXR0cmlidXRlIGNhbiBob2xkCisgIFRoZSA6YXR0cjpgflNvY2tldFNlcnZlci5CYXNlU2VydmVyLnRpbWVvdXRgIGNsYXNzIGF0dHJpYnV0ZSBjYW4gaG9sZAogICBhIHRpbWVvdXQgaW4gc2Vjb25kcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVxdWVzdCBzb2NrZXQ7IGlmCi0gIG5vIHJlcXVlc3QgaXMgcmVjZWl2ZWQgd2l0aGluIHRoYXQgdGltZSwgOm1ldGg6YGhhbmRsZV90aW1lb3V0YAotICB3aWxsIGJlIGNhbGxlZCBhbmQgOm1ldGg6YGhhbmRsZV9yZXF1ZXN0YCB3aWxsIHJldHVybi4KKyAgbm8gcmVxdWVzdCBpcyByZWNlaXZlZCB3aXRoaW4gdGhhdCB0aW1lLCA6bWV0aDpgflNvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV90aW1lb3V0YAorICB3aWxsIGJlIGNhbGxlZCBhbmQgOm1ldGg6YH5Tb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5oYW5kbGVfcmVxdWVzdGAgd2lsbCByZXR1cm4uCiAgIChDb250cmlidXRlZCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb247IDppc3N1ZTpgNjE5MmAgYW5kIDppc3N1ZTpgNjI2N2AuKQogCiAqIFVwZGF0ZWQgbW9kdWxlOiB0aGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIGhhcyBiZWVuIHVwZGF0ZWQgdG8KQEAgLTE0NzksNyArMTUxOSw3IEBACiAgIGFuZCB0aGVuIGNhbGwgOm1ldGg6YH5zcWxpdGUzLkNvbm5lY3Rpb24ubG9hZF9leHRlbnNpb25gIHRvIGxvYWQgYSBwYXJ0aWN1bGFyIHNoYXJlZCBsaWJyYXJ5LgogICAoVXBkYXRlZCBieSBHZXJoYXJkIEjDpHJpbmcuKQogCi0qIFRoZSA6bW9kOmBzc2xgIG1vZHVsZSdzIDpjbGFzczpgc3NsLlNTTFNvY2tldGAgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUKKyogVGhlIDptb2Q6YHNzbGAgbW9kdWxlJ3MgOmNsYXNzOmB+c3NsLlNTTFNvY2tldGAgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUKICAgYnVmZmVyIEFQSSwgd2hpY2ggZml4ZWQgYSB0ZXN0IHN1aXRlIGZhaWx1cmUgKGZpeCBieSBBbnRvaW5lIFBpdHJvdTsKICAgOmlzc3VlOmA3MTMzYCkgYW5kIGF1dG9tYXRpY2FsbHkgc2V0CiAgIE9wZW5TU0wncyA6YzptYWNybzpgU1NMX01PREVfQVVUT19SRVRSWWAsIHdoaWNoIHdpbGwgcHJldmVudCBhbiBlcnJvcgpAQCAtMTUzNSw3ICsxNTc1LDcgQEAKICAgb24gcmVjZWl2aW5nIGFuIDpjb25zdDpgRUlOVFJgIHNpZ25hbC4gIChSZXBvcnRlZCBieSBzZXZlcmFsIHBlb3BsZTsgZmluYWwKICAgcGF0Y2ggYnkgR3JlZ29yeSBQLiBTbWl0aCBpbiA6aXNzdWU6YDEwNjgyNjhgLikKIAotKiBOZXcgZnVuY3Rpb246IDpmdW5jOmB+c3ltdGFibGUuaXNfZGVjbGFyZWRfZ2xvYmFsYCBpbiB0aGUgOm1vZDpgc3ltdGFibGVgIG1vZHVsZQorKiBOZXcgZnVuY3Rpb246IDpmdW5jOmB+c3ltdGFibGUuU3ltYm9sLmlzX2RlY2xhcmVkX2dsb2JhbGAgaW4gdGhlIDptb2Q6YHN5bXRhYmxlYCBtb2R1bGUKICAgcmV0dXJucyB0cnVlIGZvciB2YXJpYWJsZXMgdGhhdCBhcmUgZXhwbGljaXRseSBkZWNsYXJlZCB0byBiZSBnbG9iYWwsCiAgIGZhbHNlIGZvciBvbmVzIHRoYXQgYXJlIGltcGxpY2l0bHkgZ2xvYmFsLgogICAoQ29udHJpYnV0ZWQgYnkgSmVyZW15IEh5bHRvbi4pCkBAIC0xNTcyLDcgKzE2MTIsNyBAQAogICByZXN1bHRpbmcgYXJjaGl2ZS4gIFRoaXMgaXMgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBleGlzdGluZwogICAqZXhjbHVkZSogYXJndW1lbnQsIHdoaWNoIGhhcyB0aGVyZWZvcmUgYmVlbiBkZXByZWNhdGVkLgogICAoQWRkZWQgYnkgTGFycyBHdXN0w6RiZWw7IDppc3N1ZTpgNjg1NmAuKQotICBUaGUgOmNsYXNzOmB+dGFyZmlsZS5UYXJGaWxlYCBjbGFzcyBhbHNvIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorICBUaGUgOmNsYXNzOmB+dGFyZmlsZS5UYXJGaWxlYCBjbGFzcyBhbHNvIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgogICAoQWRkZWQgYnkgTGFycyBHdXN0w6RiZWw7IDppc3N1ZTpgNzIzMmAuKQogCiAqIFRoZSA6bWV0aDpgfnRocmVhZGluZy5FdmVudC53YWl0YCBtZXRob2Qgb2YgdGhlIDpjbGFzczpgdGhyZWFkaW5nLkV2ZW50YCBjbGFzcwpAQCAtMTcxNiw3ICsxNzU2LDcgQEAKICAgTWFrZWZpbGUgYW5kIHRoZSA6ZmlsZTpgcHljb25maWcuaGAgZmlsZS4KICogOmZ1bmM6YH5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzYCByZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nCiAgIGFsbCBvZiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCi0qIDpmdW5jOmB+c3lzY29uZmlnLmdldHBhdGhgIHJldHVybnMgdGhlIGNvbmZpZ3VyZWQgcGF0aCBmb3IKKyogOmZ1bmM6YH5zeXNjb25maWcuZ2V0X3BhdGhgIHJldHVybnMgdGhlIGNvbmZpZ3VyZWQgcGF0aCBmb3IKICAgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgbW9kdWxlOiB0aGUgc3RhbmRhcmQgbGlicmFyeSwKICAgc2l0ZS1zcGVjaWZpYyBtb2R1bGVzLCBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzLCBldGMuCiAqIDpmdW5jOmB+c3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZGAgcmV0dXJucyB0cnVlIGlmIHlvdSdyZSBydW5uaW5nIGEKQEAgLTE3NzgsNyArMTgxOCw3IEBACiBDb25zdWx0IHRoZSA6bW9kOmB1bml0dGVzdGAgbW9kdWxlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4KIChEZXZlbG9wZWQgaW4gOmlzc3VlOmA2MDAxYC4pCiAKLVRoZSA6ZnVuYzpgbWFpbmAgZnVuY3Rpb24gc3VwcG9ydHMgc29tZSBvdGhlciBuZXcgb3B0aW9uczoKK1RoZSA6ZnVuYzpgfnVuaXR0ZXN0Lm1haW5gIGZ1bmN0aW9uIHN1cHBvcnRzIHNvbWUgb3RoZXIgbmV3IG9wdGlvbnM6CiAKICogOm9wdGlvbjpgLWJgIG9yIDpvcHRpb246YC0tYnVmZmVyYCB3aWxsIGJ1ZmZlciB0aGUgc3RhbmRhcmQgb3V0cHV0CiAgIGFuZCBzdGFuZGFyZCBlcnJvciBzdHJlYW1zIGR1cmluZyBlYWNoIHRlc3QuICBJZiB0aGUgdGVzdCBwYXNzZXMsCkBAIC0xNzk2LDcgKzE4MzYsNyBAQAogICBiZWluZyB0ZXN0ZWQgb3IgdGhlIHRlc3RzIGJlaW5nIHJ1biBoYXZlIGRlZmluZWQgYSBzaWduYWwgaGFuZGxlciBvZgogICB0aGVpciBvd24sIGJ5IG5vdGljaW5nIHRoYXQgYSBzaWduYWwgaGFuZGxlciB3YXMgYWxyZWFkeSBzZXQgYW5kCiAgIGNhbGxpbmcgaXQuICBJZiB0aGlzIGRvZXNuJ3Qgd29yayBmb3IgeW91LCB0aGVyZSdzIGEKLSAgOmZ1bmM6YHJlbW92ZUhhbmRsZXJgIGRlY29yYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIG1hcmsgdGVzdHMgdGhhdAorICA6ZnVuYzpgfnVuaXR0ZXN0LnJlbW92ZUhhbmRsZXJgIGRlY29yYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIG1hcmsgdGVzdHMgdGhhdAogICBzaG91bGQgaGF2ZSB0aGUgY29udHJvbC1DIGhhbmRsaW5nIGRpc2FibGVkLgogCiAqIDpvcHRpb246YC1mYCBvciA6b3B0aW9uOmAtLWZhaWxmYXN0YCBtYWtlcwpAQCAtMTkyMyw3ICsxOTYzLDcgQEAKIAogOmZ1bmM6YHVuaXR0ZXN0Lm1haW5gIG5vdyB0YWtlcyBhbiBvcHRpb25hbCBgYGV4aXRgYCBhcmd1bWVudC4gIElmCiBGYWxzZSwgOmZ1bmM6YH51bml0dGVzdC5tYWluYCBkb2Vzbid0IGNhbGwgOmZ1bmM6YHN5cy5leGl0YCwgYWxsb3dpbmcKLTpmdW5jOmBtYWluYCB0byBiZSB1c2VkIGZyb20gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyLgorOmZ1bmM6YH51bml0dGVzdC5tYWluYCB0byBiZSB1c2VkIGZyb20gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyLgogKENvbnRyaWJ1dGVkIGJ5IEouIFBhYmxvIEZlcm7DoW5kZXo7IDppc3N1ZTpgMzM3OWAuKQogCiA6Y2xhc3M6YH51bml0dGVzdC5UZXN0UmVzdWx0YCBoYXMgbmV3IDptZXRoOmB+dW5pdHRlc3QuVGVzdFJlc3VsdC5zdGFydFRlc3RSdW5gIGFuZApAQCAtMjEyMCw3ICsyMTYwLDcgQEAKICAgOmM6bWFjcm86YFB5X0lTU1BBQ0VgLAogICA6YzptYWNybzpgUHlfSVNVUFBFUmAsCiAgIDpjOm1hY3JvOmBQeV9JU1hESUdJVGAsCi0gIGFuZCA6YzptYWNybzpgUHlfVE9MT1dFUmAsIDpjOm1hY3JvOmBQeV9UT1VQUEVSYC4KKyAgOmM6bWFjcm86YFB5X1RPTE9XRVJgLCBhbmQgOmM6bWFjcm86YFB5X1RPVVBQRVJgLgogICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbmFsb2dvdXMgdG8gdGhlIEMKICAgc3RhbmRhcmQgbWFjcm9zIGZvciBjbGFzc2lmeWluZyBjaGFyYWN0ZXJzLCBidXQgaWdub3JlIHRoZSBjdXJyZW50CiAgIGxvY2FsZSBzZXR0aW5nLCBiZWNhdXNlIGluCkBAIC0yMjY2LDExICsyMzA2LDExIEBACiAgIChDb250cmlidXRlZCBieSBEYXZpZCBDb3VybmFwZWF1OyA6aXNzdWU6YDQzNjVgLikKIAogKiBUaGUgOm1vZDpgX3dpbnJlZ2AgbW9kdWxlIGZvciBhY2Nlc3NpbmcgdGhlIHJlZ2lzdHJ5IG5vdyBpbXBsZW1lbnRzCi0gIHRoZSA6ZnVuYzpgQ3JlYXRlS2V5RXhgIGFuZCA6ZnVuYzpgRGVsZXRlS2V5RXhgIGZ1bmN0aW9ucywgZXh0ZW5kZWQKLSAgdmVyc2lvbnMgb2YgcHJldmlvdXNseS1zdXBwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgdGFrZSBzZXZlcmFsIGV4dHJhCi0gIGFyZ3VtZW50cy4gIFRoZSA6ZnVuYzpgRGlzYWJsZVJlZmxlY3Rpb25LZXlgLAotICA6ZnVuYzpgRW5hYmxlUmVmbGVjdGlvbktleWAsIGFuZCA6ZnVuYzpgUXVlcnlSZWZsZWN0aW9uS2V5YCB3ZXJlIGFsc28KLSAgdGVzdGVkIGFuZCBkb2N1bWVudGVkLgorICB0aGUgOmZ1bmM6YH5fd2lucmVnLkNyZWF0ZUtleUV4YCBhbmQgOmZ1bmM6YH5fd2lucmVnLkRlbGV0ZUtleUV4YAorICBmdW5jdGlvbnMsIGV4dGVuZGVkIHZlcnNpb25zIG9mIHByZXZpb3VzbHktc3VwcG9ydGVkIGZ1bmN0aW9ucyB0aGF0CisgIHRha2Ugc2V2ZXJhbCBleHRyYSBhcmd1bWVudHMuICBUaGUgOmZ1bmM6YH5fd2lucmVnLkRpc2FibGVSZWZsZWN0aW9uS2V5YCwKKyAgOmZ1bmM6YH5fd2lucmVnLkVuYWJsZVJlZmxlY3Rpb25LZXlgLCBhbmQgOmZ1bmM6YH5fd2lucmVnLlF1ZXJ5UmVmbGVjdGlvbktleWAKKyAgd2VyZSBhbHNvIHRlc3RlZCBhbmQgZG9jdW1lbnRlZC4KICAgKEltcGxlbWVudGVkIGJ5IEJyaWFuIEN1cnRpbjogOmlzc3VlOmA3MzQ3YC4pCiAKICogVGhlIG5ldyA6YzpmdW5jOmBfYmVnaW50aHJlYWRleGAgQVBJIGlzIHVzZWQgdG8gc3RhcnQgdGhyZWFkcywgYW5kCkBAIC0yMzI5LDcgKzIzNjksNyBAQAogICBhdHRyaWJ1dGVzIG9mIHRoZSByZXN1bHRpbmcgY29kZSBvYmplY3RzIGFyZSBvdmVyd3JpdHRlbiB3aGVuIHRoZQogICBvcmlnaW5hbCBmaWxlbmFtZSBpcyBvYnNvbGV0ZS4gIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgZmlsZSBoYXMgYmVlbgogICByZW5hbWVkLCBtb3ZlZCwgb3IgaXMgYWNjZXNzZWQgdGhyb3VnaCBkaWZmZXJlbnQgcGF0aHMuICAoUGF0Y2ggYnkKLSAgxb1pZ2EgU2VpbG5hY2h0IGFuZCBKZWFuLVBhdWwgQ2FsZGVyb25lOyA6aXNzdWU6YDExODAxOTNgLikKKyAgWmlnYSBTZWlsbmFjaHQgYW5kIEplYW4tUGF1bCBDYWxkZXJvbmU7IDppc3N1ZTpgMTE4MDE5M2AuKQogCiAqIFRoZSA6ZmlsZTpgcmVncnRlc3QucHlgIHNjcmlwdCBub3cgdGFrZXMgYSA6b3B0aW9uOmAtLXJhbmRzZWVkPWAKICAgc3dpdGNoIHRoYXQgdGFrZXMgYW4gaW50ZWdlciB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcmFuZG9tIHNlZWQKQEAgLTIzODcsMjAgKzI0MjcsMjAgQEAKIAogSW4gdGhlIHN0YW5kYXJkIGxpYnJhcnk6CiAKLSogT3BlcmF0aW9ucyB3aXRoIDpjbGFzczpgZGF0ZXRpbWVgIGluc3RhbmNlcyB0aGF0IHJlc3VsdGVkIGluIGEgeWVhcgorKiBPcGVyYXRpb25zIHdpdGggOmNsYXNzOmB+ZGF0ZXRpbWUuZGF0ZXRpbWVgIGluc3RhbmNlcyB0aGF0IHJlc3VsdGVkIGluIGEgeWVhcgogICBmYWxsaW5nIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSBkaWRuJ3QgYWx3YXlzIHJhaXNlCiAgIDpleGM6YE92ZXJmbG93RXJyb3JgLiAgU3VjaCBlcnJvcnMgYXJlIG5vdyBjaGVja2VkIG1vcmUgY2FyZWZ1bGx5CiAgIGFuZCB3aWxsIG5vdyByYWlzZSB0aGUgZXhjZXB0aW9uLiAoUmVwb3J0ZWQgYnkgTWFyayBMZWFuZGVyLCBwYXRjaAogICBieSBBbmFuZCBCLiBQaWxsYWkgYW5kIEFsZXhhbmRlciBCZWxvcG9sc2t5OyA6aXNzdWU6YDcxNTBgLikKIAotKiBXaGVuIHVzaW5nIDpjbGFzczpgRGVjaW1hbGAgaW5zdGFuY2VzIHdpdGggYSBzdHJpbmcncworKiBXaGVuIHVzaW5nIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgaW5zdGFuY2VzIHdpdGggYSBzdHJpbmcncwogICA6bWV0aDpgZm9ybWF0YCBtZXRob2QsIHRoZSBkZWZhdWx0IGFsaWdubWVudCB3YXMgcHJldmlvdXNseQogICBsZWZ0LWFsaWdubWVudC4gIFRoaXMgaGFzIGJlZW4gY2hhbmdlZCB0byByaWdodC1hbGlnbm1lbnQsIHdoaWNoIG1pZ2h0CiAgIGNoYW5nZSB0aGUgb3V0cHV0IG9mIHlvdXIgcHJvZ3JhbXMuCiAgIChDaGFuZ2VkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDY4NTdgLikKIAogICBDb21wYXJpc29ucyBpbnZvbHZpbmcgYSBzaWduYWxpbmcgTmFOIHZhbHVlIChvciBgYHNOQU5gYCkgbm93IHNpZ25hbAotICA6Y29uc3Q6YEludmFsaWRPcGVyYXRpb25gIGluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIGEgdHJ1ZSBvcgorICA6Y29uc3Q6YH5kZWNpbWFsLkludmFsaWRPcGVyYXRpb25gIGluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIGEgdHJ1ZSBvcgogICBmYWxzZSB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IuICBRdWlldCBOYU4gdmFsdWVzCiAgIChvciBgYE5hTmBgKSBhcmUgbm93IGhhc2hhYmxlLiAgKEZpeGVkIGJ5IE1hcmsgRGlja2luc29uOwogICA6aXNzdWU6YDcyNzlgLikKQEAgLTI0MTEsNyArMjQ1MSw3IEBACiAgIG9yIGNvbW1lbnQgKHdoaWNoIGxvb2tzIGxpa2UgYDwhLS0gY29tbWVudCAtLT5gKS4KICAgKFBhdGNoIGJ5IE5laWwgTXVsbGVyOyA6aXNzdWU6YDI3NDZgLikKIAotKiBUaGUgOm1ldGg6YHJlYWRsaW5lYCBtZXRob2Qgb2YgOmNsYXNzOmBTdHJpbmdJT2Agb2JqZWN0cyBub3cgZG9lcworKiBUaGUgOm1ldGg6YH5TdHJpbmdJTy5TdHJpbmdJTy5yZWFkbGluZWAgbWV0aG9kIG9mIDpjbGFzczpgflN0cmluZ0lPLlN0cmluZ0lPYCBvYmplY3RzIG5vdyBkb2VzCiAgIG5vdGhpbmcgd2hlbiBhIG5lZ2F0aXZlIGxlbmd0aCBpcyByZXF1ZXN0ZWQsIGFzIG90aGVyIGZpbGUtbGlrZQogICBvYmplY3RzIGRvLiAgKDppc3N1ZTpgNzM0OGApLgogCkBAIC0yNDcwLDYgKzI1MTAsNjQgQEAKIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCisuLiBfcHkyNy1tYWludGVuYW5jZS1lbmhhbmNlbWVudHM6CisKK05ldyBGZWF0dXJlcyBBZGRlZCB0byBQeXRob24gMi43IE1haW50ZW5hbmNlIFJlbGVhc2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXcgZmVhdHVyZXMgbWF5IGJlIGFkZGVkIHRvIFB5dGhvbiAyLjcgbWFpbnRlbmFuY2UgcmVsZWFzZXMgd2hlbiB0aGUKK3NpdHVhdGlvbiBnZW51aW5lbHkgY2FsbHMgZm9yIGl0LiBBbnkgc3VjaCBhZGRpdGlvbnMgbXVzdCBnbyB0aHJvdWdoCit0aGUgUHl0aG9uIEVuaGFuY2VtZW50IFByb3Bvc2FsIHByb2Nlc3MsIGFuZCBtYWtlIGEgY29tcGVsbGluZyBjYXNlIGZvciB3aHkKK3RoZXkgY2FuJ3QgYmUgYWRlcXVhdGVseSBhZGRyZXNzZWQgYnkgZWl0aGVyIGFkZGluZyB0aGUgbmV3IGZlYXR1cmUgc29sZWx5IHRvCitQeXRob24gMywgb3IgZWxzZSBieSBwdWJsaXNoaW5nIGl0IG9uIHRoZSBQeXRob24gUGFja2FnZSBJbmRleC4KKworSW4gYWRkaXRpb24gdG8gdGhlIHNwZWNpZmljIHByb3Bvc2FscyBsaXN0ZWQgYmVsb3csIHRoZXJlIGlzIGEgZ2VuZXJhbAorZXhlbXB0aW9uIGFsbG93aW5nIG5ldyBgYC0zYGAgd2FybmluZ3MgdG8gYmUgYWRkZWQgaW4gYW55IFB5dGhvbiAyLjcKK21haW50ZW5hbmNlIHJlbGVhc2UuCisKKworUEVQIDQzNDogSURMRSBFbmhhbmNlbWVudCBFeGNlcHRpb24gZm9yIEFsbCBCcmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0MzRgIGRlc2NyaWJlcyBhIGdlbmVyYWwgZXhlbXB0aW9uIGZvciBjaGFuZ2VzIG1hZGUgdG8gdGhlIElETEUKK2RldmVsb3BtZW50IGVudmlyb25tZW50IHNoaXBwZWQgYWxvbmcgd2l0aCBQeXRob24uIFRoaXMgZXhlbXB0aW9uIG1ha2VzIGl0Citwb3NzaWJsZSBmb3IgdGhlIElETEUgZGV2ZWxvcGVycyB0byBwcm92aWRlIGEgbW9yZSBjb25zaXN0ZW50IHVzZXIKK2V4cGVyaWVuY2UgYWNyb3NzIGFsbCBzdXBwb3J0ZWQgdmVyc2lvbnMgb2YgUHl0aG9uIDIgYW5kIDMuCisKK0ZvciBkZXRhaWxzIG9mIGFueSBJRExFIGNoYW5nZXMsIHJlZmVyIHRvIHRoZSBORVdTIGZpbGUgZm9yIHRoZSBzcGVjaWZpYworcmVsZWFzZS4KKworCitQRVAgNDY2OiBOZXR3b3JrIFNlY3VyaXR5IEVuaGFuY2VtZW50cyBmb3IgUHl0aG9uIDIuNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDY2YCBkZXNjcmliZXMgYSBudW1iZXIgb2YgbmV0d29yayBzZWN1cml0eSBlbmhhbmNlbWVudCBwcm9wb3NhbHMKK3RoYXQgaGF2ZSBiZWVuIGFwcHJvdmVkIGZvciBpbmNsdXNpb24gaW4gUHl0aG9uIDIuNyBtYWludGVuYW5jZSByZWxlYXNlcywKK3dpdGggdGhlIGZpcnN0IG9mIHRob3NlIGNoYW5nZXMgYXBwZWFyaW5nIGluIHRoZSBQeXRob24gMi43LjcgcmVsZWFzZS4KKworOnBlcDpgNDY2YCByZWxhdGVkIGZlYXR1cmVzIGFkZGVkIGluIFB5dGhvbiAyLjcuNzoKKworKiA6ZnVuYzpgaG1hYy5jb21wYXJlX2RpZ2VzdGAgd2FzIGJhY2twb3J0ZWQgZnJvbSBQeXRob24gMyB0byBtYWtlIGEgdGltaW5nCisgIGF0dGFjayByZXNpc3RhbnQgY29tcGFyaXNvbiBvcGVyYXRpb24gYnJvYWRseSBhdmFpbGFibGUgdG8gUHl0aG9uIDIKKyAgYXBwbGljYXRpb25zIChiYWNrcG9ydGVkIGJ5IEFsZXggR2F5bm9yIGluIDppc3N1ZTpgMjEzMDZgKQorCisqIHVwZ3JhZGVkIHRvIE9wZW5TU0wgMS4wLjFnIGZvciB0aGUgcHJlYnVpbHQgV2luZG93cyBpbnN0YWxsZXJzIHB1Ymxpc2hlZAorICBvbiBweXRob24ub3JnIChjb250cmlidXRlZCBieSBaYWNoYXJ5IFdhcmUgaW4gOmlzc3VlOmAyMTQ2MmApCisKKworOnBlcDpgNDY2YCByZWxhdGVkIGZlYXR1cmVzIGFkZGVkIGluIFB5dGhvbiAyLjcuODoKKworKiA6ZnVuYzpgaGFzaGxpYi5wYmtkZjJfaG1hY2Agd2FzIGJhY2twb3J0ZWQgZnJvbSBQeXRob24gMyB0byBtYWtlIGEgaGFzaGluZworICBhbGdvcml0aG0gc3VpdGFibGUgZm9yIHNlY3VyZSBwYXNzd29yZCBzdG9yYWdlIGJyb2FkbHkgYXZhaWxhYmxlIHRvIFB5dGhvbgorICAyIGFwcGxpY2F0aW9ucyAoYmFja3BvcnRlZCBieSBBbGV4IEdheW5vciBpbiA6aXNzdWU6YDIxMzA0YCkKKworKiB1cGdyYWRlZCB0byBPcGVuU1NMIDEuMC4xaCBmb3IgdGhlIHByZWJ1aWx0IFdpbmRvd3MgaW5zdGFsbGVycyBwdWJsaXNoZWQKKyAgb24gcHl0aG9uLm9yZyAoY29udHJpYnV0ZWQgYnkgWmFjaGFyeSBXYXJlIGluIDppc3N1ZTpgMjE2NzFgIGZvcgorICBDVkUtMjAxNC0wMjI0KQorCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogLi4gX2Fja3MyNzoKIAogQWNrbm93bGVkZ2VtZW50cwpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuMS5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy4xLnJzdAppbmRleCBhYjMyN2Y1Li40MmM0NGEwIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMy4xLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMy4xLnJzdApAQCAtMjM4LDcgKzIzOCw3IEBACiAgIChDb250cmlidXRlZCBieSBHdWlsaGVybWUgUG9sbzsgOmlzc3VlOmAyOTgzYC4pCiAKICogVGhlIDpjbGFzczpgZ3ppcC5HemlwRmlsZWAgYW5kIDpjbGFzczpgYnoyLkJaMkZpbGVgIGNsYXNzZXMgbm93IHN1cHBvcnQKLSAgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbDo6CisgIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2w6OgogCiAgICAgICAgID4+PiAjIEF1dG9tYXRpY2FsbHkgY2xvc2UgZmlsZSBhZnRlciB3cml0aW5nCiAgICAgICAgID4+PiB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW5hbWUsICJ3YiIpIGFzIGY6CmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy4yLnJzdCBiL0RvYy93aGF0c25ldy8zLjIucnN0CmluZGV4IGFhNjlkZjIuLmM0MDQ3YzUgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8zLjIucnN0CisrKyBiL0RvYy93aGF0c25ldy8zLjIucnN0CkBAIC01MjIsNyArNTIyLDcgQEAKICAgKFByb3Bvc2VkIGFuZCBpbXBsZW1lbnRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA5MzM3YC4pCiAKICogOmNsYXNzOmBtZW1vcnl2aWV3YCBvYmplY3RzIG5vdyBoYXZlIGEgOm1ldGg6YH5tZW1vcnl2aWV3LnJlbGVhc2UoKWAgbWV0aG9kCi0gIGFuZCB0aGV5IGFsc28gbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4gIFRoaXMgYWxsb3dzIHRpbWVseQorICBhbmQgdGhleSBhbHNvIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBUaGlzIGFsbG93cyB0aW1lbHkKICAgcmVsZWFzZSBvZiBhbnkgcmVzb3VyY2VzIHRoYXQgd2VyZSBhY3F1aXJlZCB3aGVuIHJlcXVlc3RpbmcgYSBidWZmZXIgZnJvbSB0aGUKICAgb3JpZ2luYWwgb2JqZWN0LgogCkBAIC0xMzE1LDcgKzEzMTUsNyBAQAogZnRwCiAtLS0KIAotVGhlIDpjbGFzczpgZnRwbGliLkZUUGAgY2xhc3Mgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgdG8KK1RoZSA6Y2xhc3M6YGZ0cGxpYi5GVFBgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHRvCiB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBGVFAKIGNvbm5lY3Rpb24gd2hlbiBkb25lOjoKIApAQCAtMTU5NSw3ICsxNTk1LDcgQEAKICAgZGVzY3JpcHRvci4gIFRoZSBsYXR0ZXIgY2FuIHRoZW4gYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KICAgKEFkZGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDg1MjRgLikKIAotKiA6ZnVuYzpgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbAorKiA6ZnVuYzpgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbAogICB0byB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZQogICBzb2NrZXQgd2hlbiBkb25lLgogICAoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6A7IDppc3N1ZTpgOTc5NGAuKQpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuMy5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy4zLnJzdAppbmRleCBjZGE2M2U0Li4zMmI4NTgxIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMy4zLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMy4zLnJzdApAQCAtMTU1Niw3ICsxNTU2LDcgQEAKIG5udHBsaWIKIC0tLS0tLS0KIAotVGhlIDpjbGFzczpgbm50cGxpYi5OTlRQYCBjbGFzcyBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCB0bworVGhlIDpjbGFzczpgbm50cGxpYi5OTlRQYCBjbGFzcyBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCB0bwogdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4Yzpgc29ja2V0LmVycm9yYCBleGNlcHRpb25zIGFuZCB0byBjbG9zZSB0aGUgTk5UUAogY29ubmVjdGlvbiB3aGVuIGRvbmU6OgogCkBAIC0xODYxLDcgKzE4NjEsNyBAQAogd2hlbiBjcmVhdGluZyB0aGUgb3V0Z29pbmcgc29ja2V0LiAgKENvbnRyaWJ1dGVkIGJ5IFBhdWxvIFNjYXJkaW5lIGluCiA6aXNzdWU6YDExMjgxYC4pCiAKLTpjbGFzczpgfnNtdHBsaWIuU01UUGAgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wsIGFsbG93aW5nIGFuCis6Y2xhc3M6YH5zbXRwbGliLlNNVFBgIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLCBhbGxvd2luZyBhbgogYGBTTVRQYGAgaW5zdGFuY2UgdG8gYmUgdXNlZCBpbiBhIGBgd2l0aGBgIHN0YXRlbWVudC4gIChDb250cmlidXRlZAogYnkgR2lhbXBhb2xvIFJvZG9sw6AgaW4gOmlzc3VlOmAxMTI4OWAuKQogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy40LnJzdCBiL0RvYy93aGF0c25ldy8zLjQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMmU0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdApAQCAtMCwwICsxLDI1MDYgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgV2hhdCdzIE5ldyBJbiBQeXRob24gMy40CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKzpBdXRob3I6IFIuIERhdmlkIE11cnJheSA8cmRtdXJyYXlAYml0ZGFuY2UuY29tPiAoRWRpdG9yKQorCisuLiBSdWxlcyBmb3IgbWFpbnRlbmFuY2U6CisKKyAgICogQW55b25lIGNhbiBhZGQgdGV4dCB0byB0aGlzIGRvY3VtZW50LCBidXQgdGhlIG1haW50YWluZXIgcmVzZXJ2ZXMgdGhlCisgICByaWdodCB0byByZXdyaXRlIGFueSBhZGRpdGlvbnMuIEluIHBhcnRpY3VsYXIsIGZvciBvYnNjdXJlIG9yIGVzb3RlcmljCisgICBmZWF0dXJlcywgdGhlIG1haW50YWluZXIgbWF5IHJlZHVjZSBhbnkgYWRkaXRpb24gdG8gYSBzaW1wbGUgcmVmZXJlbmNlIHRvCisgICB0aGUgbmV3IGRvY3VtZW50YXRpb24gcmF0aGVyIHRoYW4gZXhwbGFpbmluZyB0aGUgZmVhdHVyZSBpbmxpbmUuCisKKyAgICogV2hpbGUgdGhlIG1haW50YWluZXIgd2lsbCBwZXJpb2RpY2FsbHkgZ28gdGhyb3VnaCBNaXNjL05FV1MKKyAgIGFuZCBhZGQgY2hhbmdlcywgaXQncyBiZXN0IG5vdCB0byByZWx5IG9uIHRoaXMuIFdlIGtub3cgZnJvbSBleHBlcmllbmNlCisgICB0aGF0IGFueSBjaGFuZ2VzIHRoYXQgYXJlbid0IGluIHRoZSBXaGF0J3MgTmV3IGRvY3VtZW50YXRpb24gYXJvdW5kIHRoZQorICAgdGltZSBvZiB0aGUgb3JpZ2luYWwgcmVsZWFzZSB3aWxsIHJlbWFpbiBsYXJnZWx5IHVua25vd24gdG8gdGhlIGNvbW11bml0eQorICAgZm9yIHllYXJzLCBldmVuIGlmIHRoZXkncmUgYWRkZWQgbGF0ZXIuIFdlIGFsc28ga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdAorICAgb3RoZXIgcHJpb3JpdGllcyBjYW4gYXJpc2UsIGFuZCB0aGUgbWFpbnRhaW5lciB3aWxsIHJ1biBvdXQgb2YgdGltZSB0byBkbworICAgdXBkYXRlcyAtLSBpbiBzdWNoIGNhc2VzLCBlbmQgdXNlcnMgd2lsbCBiZSBtdWNoIGJldHRlciBzZXJ2ZWQgYnkgcGFydGlhbAorICAgbm90aWZpY2F0aW9ucyB0aGF0IGF0IGxlYXN0IGdpdmUgYSBoaW50IGFib3V0IG5ldyBmZWF0dXJlcyB0bworICAgaW52ZXN0aWdhdGUuCisKKyAgICogVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBsaXN0IG9mIGV2ZXJ5IHNpbmdsZSBjaGFuZ2U7IGNvbXBsZXRlbmVzcworICAgaXMgdGhlIHB1cnBvc2Ugb2YgTWlzYy9ORVdTLiBUaGUgV2hhdCdzIE5ldyBzaG91bGQgZm9jdXMgb24gY2hhbmdlcyB0aGF0CisgICBhcmUgdmlzaWJsZSB0byBQeXRob24gKnVzZXJzKiBhbmQgdGhhdCAqcmVxdWlyZSogYSBmZWF0dXJlIHJlbGVhc2UgKGkuZS4KKyAgIG1vc3QgYnVnIGZpeGVzIHNob3VsZCBvbmx5IGJlIHJlY29yZGVkIGluIE1pc2MvTkVXUykKKworICAgKiBQRVBzIHNob3VsZCBub3QgYmUgbWFya2VkIEZpbmFsIHVudGlsIHRoZXkgaGF2ZSBhbiBlbnRyeSBpbiBXaGF0J3MgTmV3LgorICAgQSBwbGFjZWhvbGRlciBlbnRyeSB0aGF0IGlzIGp1c3QgYSBzZWN0aW9uIGhlYWRlciBhbmQgYSBsaW5rIHRvIHRoZSBQRVAKKyAgIChlLmcgIjpwZXA6YDM5N2AgaGFzIGJlZW4gaW1wbGVtZW50ZWQiKSBpcyBhY2NlcHRhYmxlLiBJZiBhIFBFUCBoYXMgYmVlbgorICAgaW1wbGVtZW50ZWQgYW5kIG5vdGVkIGluIFdoYXQncyBOZXcsIGRvbid0IGZvcmdldCB0byBtYXJrIGl0IGFzIEZpbmFsIQorCisgICAqIElmIHlvdSB3YW50IHRvIGRyYXcgeW91ciBuZXcgdGV4dCB0byB0aGUgYXR0ZW50aW9uIG9mIHRoZQorICAgbWFpbnRhaW5lciwgYWRkICdYWFgnIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcmFncmFwaCBvcgorICAgc2VjdGlvbi4KKworICAgKiBJdCdzIE9LIHRvIGFkZCBqdXN0IGEgdmVyeSBicmllZiBub3RlIGFib3V0IGEgY2hhbmdlLiAgRm9yCisgICBleGFtcGxlOiAiVGhlIDpyZWY6YH5zb2NrZXQudHJhbnNtb2dyaWZ5KClgIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byB0aGUKKyAgIDptb2Q6YHNvY2tldGAgbW9kdWxlLiIgIFRoZSBtYWludGFpbmVyIHdpbGwgcmVzZWFyY2ggdGhlIGNoYW5nZSBhbmQKKyAgIHdyaXRlIHRoZSBuZWNlc3NhcnkgdGV4dCAoaWYgYXBwcm9wcmlhdGUpLiBUaGUgYWR2YW50YWdlIG9mIGRvaW5nIHRoaXMKKyAgIGlzIHRoYXQgZXZlbiBpZiBubyBtb3JlIGRlc2NyaXB0aXZlIHRleHQgaXMgZXZlciBhZGRlZCwgcmVhZGVycyB3aWxsIGF0CisgICBsZWFzdCBoYXZlIGEgbm90aWZpY2F0aW9uIHRoYXQgdGhlIG5ldyBmZWF0dXJlIGV4aXN0cyBhbmQgYSBsaW5rIHRvIHRoZQorICAgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4KKworICAgKiBZb3UgY2FuIGNvbW1lbnQgb3V0IHlvdXIgYWRkaXRpb25zIGlmIHlvdSBsaWtlLCBidXQgaXQncyBub3QKKyAgIG5lY2Vzc2FyeSAoZXNwZWNpYWxseSB3aGVuIGEgZmluYWwgcmVsZWFzZSBpcyBzb21lIG1vbnRocyBhd2F5KS4KKworICAgKiBDcmVkaXQgdGhlIGF1dGhvciBvZiBhIHBhdGNoIG9yIGJ1Z2ZpeC4gICBKdXN0IHRoZSBuYW1lIGlzCisgICBzdWZmaWNpZW50OyB0aGUgZS1tYWlsIGFkZHJlc3MgaXNuJ3QgbmVjZXNzYXJ5LgorCisgICAqIEl0J3MgaGVscGZ1bCB0byBhZGQgdGhlIGJ1Zy9wYXRjaCBudW1iZXIgYXMgYSBjb21tZW50OgorCisgICBUaGUgOnJlZjpgfnNvY2tldC50cmFuc21vZ3JpZnkoKWAgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIHRoZQorICAgOm1vZDpgc29ja2V0YCBtb2R1bGUuIChDb250cmlidXRlZCBieSBQLlkuIERldmVsb3BlciBpbiA6aXNzdWU6YDEyMzQ1YC4pCisKKyAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgdGhlIGVmZm9ydCBvZiBnb2luZyB0aHJvdWdoIHRoZSBNZXJjdXJpYWwgbG9nCisgICB3aGVuIHJlc2VhcmNoaW5nIGEgY2hhbmdlLgorCisgICAqIENyb3NzIHJlZmVyZW5jaW5nIHRpcDogOnJlZjpgbW9kLmF0dHJgIHdpbGwgZGlzcGxheSBhcyBgYG1vZC5hdHRyYGAsCisgICB3aGlsZSA6cmVmOmB+bW9kLmF0dHJgIHdpbGwgZGlzcGxheSBhcyBgYGF0dHJgYC4KKworVGhpcyBhcnRpY2xlIGV4cGxhaW5zIHRoZSBuZXcgZmVhdHVyZXMgaW4gUHl0aG9uIDMuNCwgY29tcGFyZWQgdG8gMy4zLgorUHl0aG9uIDMuNCB3YXMgcmVsZWFzZWQgb24gTWFyY2ggMTYsIDIwMTQuICBGb3IgZnVsbCBkZXRhaWxzLCBzZWUgdGhlCitgY2hhbmdlbG9nIDxodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC93aGF0c25ldy9jaGFuZ2Vsb2cuaHRtbD5gXy4KKworCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDI5YCAtLSBQeXRob24gMy40IFJlbGVhc2UgU2NoZWR1bGUKKworCisKK1N1bW1hcnkgLS0gUmVsZWFzZSBIaWdobGlnaHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBUaGlzIHNlY3Rpb24gc2luZ2xlcyBvdXQgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZXMgaW4gUHl0aG9uIDMuNC4KKyAgIEJyZXZpdHkgaXMga2V5LgorCitOZXcgc3ludGF4IGZlYXR1cmVzOgorCisqIE5vIG5ldyBzeW50YXggZmVhdHVyZXMgd2VyZSBhZGRlZCBpbiBQeXRob24gMy40LgorCitPdGhlciBuZXcgZmVhdHVyZXM6CisKKyogOnJlZjpgcGlwIHNob3VsZCBhbHdheXMgYmUgYXZhaWxhYmxlIDx3aGF0c25ldy1wZXAtNDUzPmAgKDpwZXA6YDQ1M2ApLgorKiA6cmVmOmBOZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vbi1pbmhlcml0YWJsZSA8d2hhdHNuZXctcGVwLTQ0Nj5gCisgICg6cGVwOmA0NDZgKS4KKyogY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgOnJlZjpgaXNvbGF0ZWQgbW9kZSA8d2hhdHNuZXctaXNvbGF0ZWQtbW9kZT5gCisgICg6aXNzdWU6YDE2NDk5YCkuCisqIDpyZWY6YGltcHJvdmVtZW50cyBpbiB0aGUgaGFuZGxpbmcgb2YgY29kZWNzIDxjb2RlYy1oYW5kbGluZy1pbXByb3ZlbWVudHM+YAorICB0aGF0IGFyZSBub3QgdGV4dCBlbmNvZGluZ3MgKG11bHRpcGxlIGlzc3VlcykuCisqIDpyZWY6YEEgTW9kdWxlU3BlYyBUeXBlIDx3aGF0c25ldy1wZXAtNDUxPmAgZm9yIHRoZSBJbXBvcnQgU3lzdGVtCisgICg6cGVwOmA0NTFgKS4gIChBZmZlY3RzIGltcG9ydGVyIGF1dGhvcnMuKQorKiBUaGUgOm1vZDpgbWFyc2hhbGAgZm9ybWF0IGhhcyBiZWVuIG1hZGUgOnJlZjpgbW9yZSBjb21wYWN0IGFuZCBlZmZpY2llbnQKKyAgPHdoYXRzbmV3LW1hcnNoYWwtMz5gICg6aXNzdWU6YDE2NDc1YCkuCisKK05ldyBsaWJyYXJ5IG1vZHVsZXM6CisKKyogOm1vZDpgYXN5bmNpb2A6IDpyZWY6YE5ldyBwcm92aXNpb25hbCBBUEkgZm9yIGFzeW5jaHJvbm91cyBJTworICA8d2hhdHNuZXctYXN5bmNpbz5gICg6cGVwOmAzMTU2YCkuCisqIDptb2Q6YGVuc3VyZXBpcGA6IDpyZWY6YEJvb3RzdHJhcHBpbmcgdGhlIHBpcCBpbnN0YWxsZXIgPHdoYXRzbmV3LWVuc3VyZXBpcD5gCisgICg6cGVwOmA0NTNgKS4KKyogOm1vZDpgZW51bWA6IDpyZWY6YFN1cHBvcnQgZm9yIGVudW1lcmF0aW9uIHR5cGVzIDx3aGF0c25ldy1lbnVtPmAKKyAgKDpwZXA6YDQzNWApLgorKiA6bW9kOmBwYXRobGliYDogOnJlZjpgT2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMgPHdoYXRzbmV3LXBhdGhsaWI+YAorICAoOnBlcDpgNDI4YCkuCisqIDptb2Q6YHNlbGVjdG9yc2A6IDpyZWY6YEhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nCisgIDx3aGF0c25ldy1zZWxlY3RvcnM+YCwgYnVpbHQgdXBvbiB0aGUgOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcyAocGFydAorICBvZiA6cGVwOmAzMTU2YCkuCisqIDptb2Q6YHN0YXRpc3RpY3NgOiBBIGJhc2ljIDpyZWY6YG51bWVyaWNhbGx5IHN0YWJsZSBzdGF0aXN0aWNzIGxpYnJhcnkKKyAgPHdoYXRzbmV3LXN0YXRpc3RpY3M+YCAoOnBlcDpgNDUwYCkuCisqIDptb2Q6YHRyYWNlbWFsbG9jYDogOnJlZjpgVHJhY2UgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucworICA8d2hhdHNuZXctdHJhY2VtYWxsb2M+YCAoOnBlcDpgNDU0YCkuCisKK1NpZ25pZmljYW50bHkgaW1wcm92ZWQgbGlicmFyeSBtb2R1bGVzOgorCisqIDpyZWY6YFNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyA8d2hhdHNuZXctc2luZ2xlZGlzcGF0Y2g+YCBpbgorICA6bW9kOmBmdW5jdG9vbHNgICg6cGVwOmA0NDNgKS4KKyogTmV3IDptb2Q6YHBpY2tsZWAgOnJlZjpgcHJvdG9jb2wgNCA8d2hhdHNuZXctcHJvdG9jb2wtND5gICg6cGVwOmAzMTU0YCkuCisqIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agbm93IGhhcyA6cmVmOmBhbiBvcHRpb24gdG8gYXZvaWQgdXNpbmcgb3MuZm9yaworICBvbiBVbml4IDx3aGF0c25ldy1tdWx0aXByb2Nlc3Npbmctbm8tZm9yaz5gICg6aXNzdWU6YDg3MTNgKS4KKyogOm1vZDpgZW1haWxgIGhhcyBhIG5ldyBzdWJtb2R1bGUsIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAsIGFuZAorICBhIG5ldyA6bW9kOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBzdWJjbGFzcworICAoOmNsYXNzOmB+ZW1haWwuY29udGVudG1hbmFnZXIuRW1haWxNZXNzYWdlYCkgdGhhdCA6cmVmOmBzaW1wbGlmeSBNSU1FCisgIGhhbmRsaW5nIDx3aGF0c25ld19lbWFpbF9jb250ZW50bWFuYWdlcj5gICg6aXNzdWU6YDE4ODkxYCkuCisqIFRoZSA6bW9kOmBpbnNwZWN0YCBhbmQgOm1vZDpgcHlkb2NgIG1vZHVsZXMgYXJlIG5vdyBjYXBhYmxlIG9mCisgIGNvcnJlY3QgaW50cm9zcGVjdGlvbiBvZiBhIG11Y2ggd2lkZXIgdmFyaWV0eSBvZiBjYWxsYWJsZSBvYmplY3RzLAorICB3aGljaCBpbXByb3ZlcyB0aGUgb3V0cHV0IG9mIHRoZSBQeXRob24gOmZ1bmM6YGhlbHBgIHN5c3RlbS4KKyogVGhlIDptb2Q6YGlwYWRkcmVzc2AgbW9kdWxlIEFQSSBoYXMgYmVlbiBkZWNsYXJlZCBzdGFibGUKKworU2VjdXJpdHkgaW1wcm92ZW1lbnRzOgorCisqIDpyZWY6YFNlY3VyZSBhbmQgaW50ZXJjaGFuZ2VhYmxlIGhhc2ggYWxnb3JpdGhtIDx3aGF0c25ldy1wZXAtNDU2PmAKKyAgKDpwZXA6YDQ1NmApLgorKiA6cmVmOmBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUgPHdoYXRzbmV3LXBlcC00NDY+YAorICAoOnBlcDpgNDQ2YCkgdG8gYXZvaWQgbGVha2luZyBmaWxlIGRlc2NyaXB0b3JzIHRvIGNoaWxkIHByb2Nlc3Nlcy4KKyogTmV3IGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIDpyZWY6YGlzb2xhdGVkIG1vZGUgPHdoYXRzbmV3LWlzb2xhdGVkLW1vZGU+YCwKKyAgKDppc3N1ZTpgMTY0OTlgKS4KKyogOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBub3cgaGFzIDpyZWY6YGFuIG9wdGlvbiB0byBhdm9pZCB1c2luZyBvcy5mb3JrCisgIG9uIFVuaXggPHdoYXRzbmV3LW11bHRpcHJvY2Vzc2luZy1uby1mb3JrPmAuICAqc3Bhd24qIGFuZCAqZm9ya3NlcnZlciogYXJlCisgIG1vcmUgc2VjdXJlIGJlY2F1c2UgdGhleSBhdm9pZCBzaGFyaW5nIGRhdGEgd2l0aCBjaGlsZCBwcm9jZXNzZXMuCisqIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgY2hpbGQgcHJvY2Vzc2VzIG9uIFdpbmRvd3Mgbm8gbG9uZ2VyIGluaGVyaXQKKyAgYWxsIG9mIHRoZSBwYXJlbnQncyBpbmhlcml0YWJsZSBoYW5kbGVzLCBvbmx5IHRoZSBuZWNlc3Nhcnkgb25lcy4KKyogQSBuZXcgOmZ1bmM6YGhhc2hsaWIucGJrZGYyX2htYWNgIGZ1bmN0aW9uIHByb3ZpZGVzCisgIHRoZSBgUEtDUyM1IHBhc3N3b3JkLWJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIKKyAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUEJLREYyPmBfLgorKiA6cmVmOmBUTFN2MS4xIGFuZCBUTFN2MS4yIHN1cHBvcnQgPHdoYXRzbmV3LXRscy0xMS0xMj5gIGZvciA6bW9kOmBzc2xgLgorKiA6cmVmOmBSZXRyaWV2aW5nIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBXaW5kb3dzIHN5c3RlbSBjZXJ0IHN0b3JlIHN1cHBvcnQKKyAgPHdoYXRzbmV3MzQtd2luLWNlcnQtc3RvcmU+YCBmb3IgOm1vZDpgc3NsYC4KKyogOnJlZjpgU2VydmVyLXNpZGUgU05JIChTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKSBzdXBwb3J0CisgIDx3aGF0c25ldzM0LXNuaT5gIGZvciA6bW9kOmBzc2xgLgorKiBUaGUgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgY2xhc3MgaGFzIGEgOnJlZjpgbG90IG9mIGltcHJvdmVtZW50cworICA8d2hhdHNuZXczNC1zc2xjb250ZXh0PmAuCisqIEFsbCBtb2R1bGVzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHRoYXQgc3VwcG9ydCBTU0wgbm93IHN1cHBvcnQgc2VydmVyCisgIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiwgaW5jbHVkaW5nIGhvc3RuYW1lIG1hdGNoaW5nCisgICg6ZnVuYzpgc3NsLm1hdGNoX2hvc3RuYW1lYCkgYW5kIENSTHMgKENlcnRpZmljYXRlIFJldm9jYXRpb24gbGlzdHMsIHNlZQorICA6ZnVuYzpgc3NsLlNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYCkuCisKK0NQeXRob24gaW1wbGVtZW50YXRpb24gaW1wcm92ZW1lbnRzOgorCisqIDpyZWY6YFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbiA8d2hhdHNuZXctcGVwLTQ0Mj5gICg6cGVwOmA0NDJgKS4KKyogTGV2ZXJhZ2luZyA6cGVwOmA0NDJgLCBpbiBtb3N0IGNhc2VzIDpyZWY6YG1vZHVsZSBnbG9iYWxzIGFyZSBubyBsb25nZXIgc2V0CisgIHRvIE5vbmUgZHVyaW5nIGZpbmFsaXphdGlvbiA8d2hhdHNuZXctcGVwLTQ0Mj5gICg6aXNzdWU6YDE4MjE0YCkuCisqIDpyZWY6YENvbmZpZ3VyYWJsZSBtZW1vcnkgYWxsb2NhdG9ycyA8d2hhdHNuZXctcGVwLTQ0NT5gICg6cGVwOmA0NDVgKS4KKyogOnJlZjpgQXJndW1lbnQgQ2xpbmljIDx3aGF0c25ldy1wZXAtNDM2PmAgKDpwZXA6YDQzNmApLgorCitQbGVhc2UgcmVhZCBvbiBmb3IgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdXNlci1mYWNpbmcgY2hhbmdlcywgaW5jbHVkaW5nIG1hbnkKK290aGVyIHNtYWxsZXIgaW1wcm92ZW1lbnRzLCBDUHl0aG9uIG9wdGltaXphdGlvbnMsIGRlcHJlY2F0aW9ucywgYW5kIHBvdGVudGlhbAorcG9ydGluZyBpc3N1ZXMuCisKKworCitOZXcgRmVhdHVyZXMKKz09PT09PT09PT09PQorCisuLiBfd2hhdHNuZXctcGVwLTQ1MzoKKworUEVQIDQ1MzogRXhwbGljaXQgQm9vdHN0cmFwcGluZyBvZiBQSVAgaW4gUHl0aG9uIEluc3RhbGxhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Jvb3RzdHJhcHBpbmcgcGlwIEJ5IERlZmF1bHQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIG5ldyA6bW9kOmBlbnN1cmVwaXBgIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0NTNgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitjcm9zcy1wbGF0Zm9ybSBtZWNoYW5pc20gdG8gYm9vdHN0cmFwIHRoZSBwaXAgaW5zdGFsbGVyIGludG8gUHl0aG9uCitpbnN0YWxsYXRpb25zIGFuZCB2aXJ0dWFsIGVudmlyb25tZW50cy4gVGhlIHZlcnNpb24gb2YgYGBwaXBgYCBpbmNsdWRlZAord2l0aCBQeXRob24gMy40LjAgaXMgYGBwaXBgYCAxLjUuNCwgYW5kIGZ1dHVyZSAzLjQueCBtYWludGVuYW5jZSByZWxlYXNlcword2lsbCB1cGRhdGUgdGhlIGJ1bmRsZWQgdmVyc2lvbiB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYGBwaXBgYCB0aGF0IGlzCithdmFpbGFibGUgYXQgdGhlIHRpbWUgb2YgY3JlYXRpbmcgdGhlIHJlbGVhc2UgY2FuZGlkYXRlLgorCitCeSBkZWZhdWx0LCB0aGUgY29tbWFuZHMgYGBwaXBYYGAgYW5kIGBgcGlwWC5ZYGAgd2lsbCBiZSBpbnN0YWxsZWQgb24gYWxsCitwbGF0Zm9ybXMgKHdoZXJlIFguWSBzdGFuZHMgZm9yIHRoZSB2ZXJzaW9uIG9mIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uKSwKK2Fsb25nIHdpdGggdGhlIGBgcGlwYGAgUHl0aG9uIHBhY2thZ2UgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE9uIFdpbmRvd3MgYW5kCitpbiB2aXJ0dWFsIGVudmlyb25tZW50cyBvbiBhbGwgcGxhdGZvcm1zLCB0aGUgdW52ZXJzaW9uZWQgYGBwaXBgYCBjb21tYW5kCit3aWxsIGFsc28gYmUgaW5zdGFsbGVkLiBPbiBvdGhlciBwbGF0Zm9ybXMsIHRoZSBzeXN0ZW0gd2lkZSB1bnZlcnNpb25lZAorYGBwaXBgYCBjb21tYW5kIHR5cGljYWxseSByZWZlcnMgdG8gdGhlIHNlcGFyYXRlbHkgaW5zdGFsbGVkIFB5dGhvbiAyCit2ZXJzaW9uLgorCitUaGUgOnJlZjpgcHl2ZW52IDxzY3JpcHRzLXB5dmVudj5gIGNvbW1hbmQgbGluZSB1dGlsaXR5IGFuZCB0aGUgOm1vZDpgdmVudmAKK21vZHVsZSBtYWtlIHVzZSBvZiB0aGUgOm1vZDpgZW5zdXJlcGlwYCBtb2R1bGUgdG8gbWFrZSBgYHBpcGBgIHJlYWRpbHkKK2F2YWlsYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gV2hlbiB1c2luZyB0aGUgY29tbWFuZCBsaW5lIHV0aWxpdHksCitgYHBpcGBgIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0LCB3aGlsZSB3aGVuIHVzaW5nIHRoZSA6bW9kOmB2ZW52YCBtb2R1bGUKKzpyZWY6YHZlbnYtYXBpYCBpbnN0YWxsYXRpb24gb2YgYGBwaXBgYCBtdXN0IGJlIHJlcXVlc3RlZCBleHBsaWNpdGx5LgorCitGb3IgQ1B5dGhvbiA6cmVmOmBzb3VyY2UgYnVpbGRzIG9uIFBPU0lYIHN5c3RlbXMgPGJ1aWxkaW5nLXB5dGhvbi1vbi11bml4PmAsCit0aGUgYGBtYWtlIGluc3RhbGxgYCBhbmQgYGBtYWtlIGFsdGluc3RhbGxgYCBjb21tYW5kcyBib290c3RyYXAgYGBwaXBgYCBieQorZGVmYXVsdC4gIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggY29uZmlndXJlIG9wdGlvbnMsIGFuZAorb3ZlcnJpZGRlbiB0aHJvdWdoIE1ha2VmaWxlIG9wdGlvbnMuCisKK09uIFdpbmRvd3MgYW5kIE1hYyBPUyBYLCB0aGUgQ1B5dGhvbiBpbnN0YWxsZXJzIG5vdyBkZWZhdWx0IHRvIGluc3RhbGxpbmcKK2BgcGlwYGAgYWxvbmcgd2l0aCBDUHl0aG9uIGl0c2VsZiAodXNlcnMgbWF5IG9wdCBvdXQgb2YgaW5zdGFsbGluZyBpdAorZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcykuIFdpbmRvdyB1c2VycyB3aWxsIG5lZWQgdG8gb3B0IGluIHRvIHRoZQorYXV0b21hdGljIGBgUEFUSGBgIG1vZGlmaWNhdGlvbnMgdG8gaGF2ZSBgYHBpcGBgIGF2YWlsYWJsZSBmcm9tIHRoZSBjb21tYW5kCitsaW5lIGJ5IGRlZmF1bHQsIG90aGVyd2lzZSBpdCBjYW4gc3RpbGwgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgUHl0aG9uCitsYXVuY2hlciBmb3IgV2luZG93cyBhcyBgYHB5IC1tIHBpcGBgLgorCitBcyBgZGlzY3Vzc2VkIGluIHRoZSBQRVBgX18sIHBsYXRmb3JtIHBhY2thZ2VycyBtYXkgY2hvb3NlIG5vdCB0byBpbnN0YWxsCit0aGVzZSBjb21tYW5kcyBieSBkZWZhdWx0LCBhcyBsb25nIGFzLCB3aGVuIGludm9rZWQsIHRoZXkgcHJvdmlkZSBjbGVhciBhbmQKK3NpbXBsZSBkaXJlY3Rpb25zIG9uIGhvdyB0byBpbnN0YWxsIHRoZW0gb24gdGhhdCBwbGF0Zm9ybSAodXN1YWxseSB1c2luZwordGhlIHN5c3RlbSBwYWNrYWdlIG1hbmFnZXIpLgorCitfXyBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTA0NTMvI3JlY29tbWVuZGF0aW9ucy1mb3ItZG93bnN0cmVhbS1kaXN0cmlidXRvcnMKKworLi4gbm90ZTo6CisKKyAgIFRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIHBhcmFsbGVsIFB5dGhvbiAyIGFuZCBQeXRob24gMyBpbnN0YWxsYXRpb25zLAorICAgb25seSB0aGUgdmVyc2lvbmVkIGBgcGlwM2BgIGFuZCBgYHBpcDMuNGBgIGNvbW1hbmRzIGFyZSBib290c3RyYXBwZWQgYnkKKyAgIGRlZmF1bHQgd2hlbiBgYGVuc3VyZXBpcGBgIGlzIGludm9rZWQgZGlyZWN0bHkgLSB0aGUgYGAtLWRlZmF1bHQtcGlwYGAKKyAgIG9wdGlvbiBpcyBuZWVkZWQgdG8gYWxzbyByZXF1ZXN0IHRoZSB1bnZlcnNpb25lZCBgYHBpcGBgIGNvbW1hbmQuCisgICBgYHB5dmVudmBgIGFuZCB0aGUgV2luZG93cyBpbnN0YWxsZXIgZW5zdXJlIHRoYXQgdGhlIHVucXVhbGlmaWVkIGBgcGlwYGAKKyAgIGNvbW1hbmQgaXMgbWFkZSBhdmFpbGFibGUgaW4gdGhvc2UgZW52aXJvbm1lbnRzLCBhbmQgYGBwaXBgYCBjYW4gYWx3YXlzIGJlCisgICBpbnZva2VkIHZpYSB0aGUgYGAtbWBgIHN3aXRjaCByYXRoZXIgdGhhbiBkaXJlY3RseSB0byBhdm9pZCBhbWJpZ3VpdHkgb24KKyAgIHN5c3RlbXMgd2l0aCBtdWx0aXBsZSBQeXRob24gaW5zdGFsbGF0aW9ucy4KKworCitEb2N1bWVudGF0aW9uIENoYW5nZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCB0aGUgOnJlZjpgaW5zdGFsbGluZy1pbmRleGAgYW5kCis6cmVmOmBkaXN0cmlidXRpbmctaW5kZXhgIHNlY3Rpb25zIG9mIHRoZSBkb2N1bWVudGF0aW9uIGhhdmUgYmVlbgorY29tcGxldGVseSByZWRlc2lnbmVkIGFzIHNob3J0IGdldHRpbmcgc3RhcnRlZCBhbmQgRkFRIGRvY3VtZW50cy4gTW9zdAorcGFja2FnaW5nIGRvY3VtZW50YXRpb24gaGFzIG5vdyBiZWVuIG1vdmVkIG91dCB0byB0aGUgUHl0aG9uIFBhY2thZ2luZworQXV0aG9yaXR5IG1haW50YWluZWQgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZQorPGh0dHA6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZz5gX18gYW5kIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsCitwcm9qZWN0cy4KKworSG93ZXZlciwgYXMgdGhpcyBtaWdyYXRpb24gaXMgY3VycmVudGx5IHN0aWxsIGluY29tcGxldGUsIHRoZSBsZWdhY3kKK3ZlcnNpb25zIG9mIHRob3NlIGd1aWRlcyByZW1haW5pbmcgYXZhaWxhYmxlIGFzIDpyZWY6YGluc3RhbGwtaW5kZXhgCithbmQgOnJlZjpgZGlzdHV0aWxzLWluZGV4YC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ1M2AgLS0gRXhwbGljaXQgYm9vdHN0cmFwcGluZyBvZiBwaXAgaW4gUHl0aG9uIGluc3RhbGxhdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGJ5IERvbmFsZCBTdHVmZnQgYW5kIE5pY2sgQ29naGxhbiwgaW1wbGVtZW50ZWQgYnkKKyAgICAgIERvbmFsZCBTdHVmZnQsIE5pY2sgQ29naGxhbiwgTWFydGluIHZvbiBMw7Z3aXMgYW5kIE5lZCBEZWlseS4KKworCisuLiBfd2hhdHNuZXctcGVwLTQ0NjoKKworUEVQIDQ0NjogTmV3bHkgQ3JlYXRlZCBGaWxlIERlc2NyaXB0b3JzIEFyZSBOb24tSW5oZXJpdGFibGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpwZXA6YDQ0NmAgbWFrZXMgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIDpyZWY6YG5vbi1pbmhlcml0YWJsZQorPGZkX2luaGVyaXRhbmNlPmAuICBJbiBnZW5lcmFsLCB0aGlzIGlzIHRoZSBiZWhhdmlvciBhbiBhcHBsaWNhdGlvbiB3aWxsCit3YW50OiB3aGVuIGxhdW5jaGluZyBhIG5ldyBwcm9jZXNzLCBoYXZpbmcgY3VycmVudGx5IG9wZW4gZmlsZXMgYWxzbworb3BlbiBpbiB0aGUgbmV3IHByb2Nlc3MgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGhhcmQgdG8gZmluZCBidWdzLAorYW5kIHBvdGVudGlhbGx5IHRvIHNlY3VyaXR5IGlzc3Vlcy4KKworSG93ZXZlciwgdGhlcmUgYXJlIG9jY2FzaW9ucyB3aGVuIGluaGVyaXRhbmNlIGlzIGRlc2lyZWQuICBUbyBzdXBwb3J0Cit0aGVzZSBjYXNlcywgdGhlIGZvbGxvd2luZyBuZXcgZnVuY3Rpb25zIGFuZCBtZXRob2RzIGFyZSBhdmFpbGFibGU6CisKKyogOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsIDpmdW5jOmBvcy5zZXRfaW5oZXJpdGFibGVgCisqIDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgCisqIDptZXRoOmBzb2NrZXQuc29ja2V0LmdldF9pbmhlcml0YWJsZWAsIDptZXRoOmBzb2NrZXQuc29ja2V0LnNldF9pbmhlcml0YWJsZWAKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0NmAgLS0gTWFrZSBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgbm9uLWluaGVyaXRhYmxlCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgVmljdG9yIFN0aW5uZXIuCisKKworLi4gX2NvZGVjLWhhbmRsaW5nLWltcHJvdmVtZW50czoKKworSW1wcm92ZW1lbnRzIHRvIENvZGVjIEhhbmRsaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2luY2UgaXQgd2FzIGZpcnN0IGludHJvZHVjZWQsIHRoZSA6bW9kOmBjb2RlY3NgIG1vZHVsZSBoYXMgYWx3YXlzIGJlZW4KK2ludGVuZGVkIHRvIG9wZXJhdGUgYXMgYSB0eXBlLW5ldXRyYWwgZHluYW1pYyBlbmNvZGluZyBhbmQgZGVjb2RpbmcKK3N5c3RlbS4gSG93ZXZlciwgaXRzIGNsb3NlIGNvdXBsaW5nIHdpdGggdGhlIFB5dGhvbiB0ZXh0IG1vZGVsLCBlc3BlY2lhbGx5Cit0aGUgdHlwZSByZXN0cmljdGVkIGNvbnZlbmllbmNlIG1ldGhvZHMgb24gdGhlIGJ1aWx0aW4gOmNsYXNzOmBzdHJgLAorOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCB0eXBlcywgaGFzIGhpc3RvcmljYWxseSBvYnNjdXJlZCB0aGF0CitmYWN0LgorCitBcyBhIGtleSBzdGVwIGluIGNsYXJpZnlpbmcgdGhlIHNpdHVhdGlvbiwgdGhlIDptZXRoOmBjb2RlY3MuZW5jb2RlYCBhbmQKKzptZXRoOmBjb2RlY3MuZGVjb2RlYCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgYXJlIG5vdyBwcm9wZXJseSBkb2N1bWVudGVkIGluCitQeXRob24gMi43LCAzLjMgYW5kIDMuNC4gVGhlc2UgZnVuY3Rpb25zIGhhdmUgZXhpc3RlZCBpbiB0aGUgOm1vZDpgY29kZWNzYAorbW9kdWxlIChhbmQgaGF2ZSBiZWVuIGNvdmVyZWQgYnkgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSkgc2luY2UgUHl0aG9uIDIuNCwKK2J1dCB3ZXJlIHByZXZpb3VzbHkgb25seSBkaXNjb3ZlcmFibGUgdGhyb3VnaCBydW50aW1lIGludHJvc3BlY3Rpb24uCisKK1VubGlrZSB0aGUgY29udmVuaWVuY2UgbWV0aG9kcyBvbiA6Y2xhc3M6YHN0cmAsIDpjbGFzczpgYnl0ZXNgIGFuZAorOmNsYXNzOmBieXRlYXJyYXlgLCB0aGUgOm1vZDpgY29kZWNzYCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgc3VwcG9ydCBhcmJpdHJhcnkKK2NvZGVjcyBpbiBib3RoIFB5dGhvbiAyIGFuZCBQeXRob24gMywgcmF0aGVyIHRoYW4gYmVpbmcgbGltaXRlZCB0byBVbmljb2RlIHRleHQKK2VuY29kaW5ncyAoaW4gUHl0aG9uIDMpIG9yIGBgYmFzZXN0cmluZ2BgIDwtPiBgYGJhc2VzdHJpbmdgYCBjb252ZXJzaW9ucyAoaW4KK1B5dGhvbiAyKS4KKworSW4gUHl0aG9uIDMuNCwgdGhlIGludGVycHJldGVyIGlzIGFibGUgdG8gaWRlbnRpZnkgdGhlIGtub3duIG5vbi10ZXh0CitlbmNvZGluZ3MgcHJvdmlkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGRpcmVjdCB1c2VycyB0b3dhcmRzIHRoZXNlCitnZW5lcmFsIHB1cnBvc2UgY29udmVuaWVuY2UgZnVuY3Rpb25zIHdoZW4gYXBwcm9wcmlhdGU6OgorCisgICAgPj4+IGIiYWJjZGVmIi5kZWNvZGUoImhleCIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBMb29rdXBFcnJvcjogJ2hleCcgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgdXNlIGNvZGVjcy5kZWNvZGUoKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcworCisgICAgPj4+ICJoZWxsbyIuZW5jb2RlKCJyb3QxMyIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBMb29rdXBFcnJvcjogJ3JvdDEzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyB1c2UgY29kZWNzLmVuY29kZSgpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzCisKKyAgICA+Pj4gb3BlbigiZm9vLnR4dCIsIGVuY29kaW5nPSJoZXgiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgTG9va3VwRXJyb3I6ICdoZXgnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7IHVzZSBjb2RlY3Mub3BlbigpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzCisKK0luIGEgcmVsYXRlZCBjaGFuZ2UsIHdoZW5ldmVyIGl0IGlzIGZlYXNpYmxlIHdpdGhvdXQgYnJlYWtpbmcgYmFja3dhcmRzCitjb21wYXRpYmlsaXR5LCBleGNlcHRpb25zIHJhaXNlZCBkdXJpbmcgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9wZXJhdGlvbnMKK2FyZSB3cmFwcGVkIGluIGEgY2hhaW5lZCBleGNlcHRpb24gb2YgdGhlIHNhbWUgdHlwZSB0aGF0IG1lbnRpb25zIHRoZQorbmFtZSBvZiB0aGUgY29kZWMgcmVzcG9uc2libGUgZm9yIHByb2R1Y2luZyB0aGUgZXJyb3I6OgorCisgICAgPj4+IGltcG9ydCBjb2RlY3MKKworICAgID4+PiBjb2RlY3MuZGVjb2RlKGIiYWJjZGVmZ2giLCAiaGV4IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvZW5jb2RpbmdzL2hleF9jb2RlYy5weSIsIGxpbmUgMjAsIGluIGhleF9kZWNvZGUKKyAgICAgICAgcmV0dXJuIChiaW5hc2NpaS5hMmJfaGV4KGlucHV0KSwgbGVuKGlucHV0KSkKKyAgICBiaW5hc2NpaS5FcnJvcjogTm9uLWhleGFkZWNpbWFsIGRpZ2l0IGZvdW5kCisKKyAgICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBiaW5hc2NpaS5FcnJvcjogZGVjb2Rpbmcgd2l0aCAnaGV4JyBjb2RlYyBmYWlsZWQgKEVycm9yOiBOb24taGV4YWRlY2ltYWwgZGlnaXQgZm91bmQpCisKKyAgICA+Pj4gY29kZWNzLmVuY29kZSgiaGVsbG8iLCAiYnoyIikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weSIsIGxpbmUgMTcsIGluIGJ6Ml9lbmNvZGUKKyAgICAgICAgcmV0dXJuIChiejIuY29tcHJlc3MoaW5wdXQpLCBsZW4oaW5wdXQpKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L2J6Mi5weSIsIGxpbmUgNDk4LCBpbiBjb21wcmVzcworICAgICAgICByZXR1cm4gY29tcC5jb21wcmVzcyhkYXRhKSArIGNvbXAuZmx1c2goKQorICAgIFR5cGVFcnJvcjogJ3N0cicgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZQorCisgICAgVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjoKKworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgVHlwZUVycm9yOiBlbmNvZGluZyB3aXRoICdiejInIGNvZGVjIGZhaWxlZCAoVHlwZUVycm9yOiAnc3RyJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgaW50ZXJmYWNlKQorCitGaW5hbGx5LCBhcyB0aGUgZXhhbXBsZXMgYWJvdmUgc2hvdywgdGhlc2UgaW1wcm92ZW1lbnRzIGhhdmUgcGVybWl0dGVkCit0aGUgcmVzdG9yYXRpb24gb2YgdGhlIGNvbnZlbmllbmNlIGFsaWFzZXMgZm9yIHRoZSBub24tVW5pY29kZSBjb2RlY3MgdGhhdAord2VyZSB0aGVtc2VsdmVzIHJlc3RvcmVkIGluIFB5dGhvbiAzLjIuIFRoaXMgbWVhbnMgdGhhdCBlbmNvZGluZyBiaW5hcnkgZGF0YQordG8gYW5kIGZyb20gaXRzIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIChmb3IgZXhhbXBsZSkgY2FuIG5vdyBiZSB3cml0dGVuCithczo6CisKKyAgICA+Pj4gZnJvbSBjb2RlY3MgaW1wb3J0IGVuY29kZSwgZGVjb2RlCisgICAgPj4+IGVuY29kZShiImhlbGxvIiwgImhleCIpCisgICAgYic2ODY1NmM2YzZmJworICAgID4+PiBkZWNvZGUoYiI2ODY1NmM2YzZmIiwgImhleCIpCisgICAgYidoZWxsbycKKworVGhlIGJpbmFyeSBhbmQgdGV4dCB0cmFuc2Zvcm1zIHByb3ZpZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFyZSBkZXRhaWxlZAoraW4gOnJlZjpgYmluYXJ5LXRyYW5zZm9ybXNgIGFuZCA6cmVmOmB0ZXh0LXRyYW5zZm9ybXNgLgorCisoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluIDppc3N1ZTpgNzQ3NWAsIDppc3N1ZTpgMTc4MjdgLAorOmlzc3VlOmAxNzgyOGAgYW5kIDppc3N1ZTpgMTk2MTlgKQorCisKKy4uIF93aGF0c25ldy1wZXAtNDUxOgorCitQRVAgNDUxOiBBIE1vZHVsZVNwZWMgVHlwZSBmb3IgdGhlIEltcG9ydCBTeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NTFgIHByb3ZpZGVzIGFuIGVuY2Fwc3VsYXRpb24gb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgbW9kdWxlIHRoYXQgdGhlCitpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdXNlIHRvIGxvYWQgaXQgKHRoYXQgaXMsIGEgbW9kdWxlIHNwZWNpZmljYXRpb24pLiAgVGhpcworaGVscHMgc2ltcGxpZnkgYm90aCB0aGUgaW1wb3J0IGltcGxlbWVudGF0aW9uIGFuZCBzZXZlcmFsIGltcG9ydC1yZWxhdGVkIEFQSXMuCitUaGUgY2hhbmdlIGlzIGFsc28gYSBzdGVwcGluZyBzdG9uZSBmb3IgYHNldmVyYWwgZnV0dXJlIGltcG9ydC1yZWxhdGVkCitpbXByb3ZlbWVudHNgX18uCisKK19fIGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMTMtTm92ZW1iZXIvMTMwMTExLmh0bWwKKworVGhlIHB1YmxpYy1mYWNpbmcgY2hhbmdlcyBmcm9tIHRoZSBQRVAgYXJlIGVudGlyZWx5IGJhY2t3YXJkLWNvbXBhdGlibGUuCitGdXJ0aGVybW9yZSwgdGhleSBzaG91bGQgYmUgdHJhbnNwYXJlbnQgdG8gZXZlcnlvbmUgYnV0IGltcG9ydGVyIGF1dGhvcnMuICBLZXkKK2ZpbmRlciBhbmQgbG9hZGVyIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQsIGJ1dCB0aGV5IHdpbGwgY29udGludWUgd29ya2luZy4KK05ldyBpbXBvcnRlcnMgc2hvdWxkIHVzZSB0aGUgbmV3IG1ldGhvZHMgZGVzY3JpYmVkIGluIHRoZSBQRVAuICBFeGlzdGluZworaW1wb3J0ZXJzIHNob3VsZCBiZSB1cGRhdGVkIHRvIGltcGxlbWVudCB0aGUgbmV3IG1ldGhvZHMuICBTZWUgdGhlCis6cmVmOmBkZXByZWNhdGVkLTMuNGAgc2VjdGlvbiBmb3IgYSBsaXN0IG9mIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgcmVwbGFjZWQgYW5kCit0aGVpciByZXBsYWNlbWVudHMuCisKKworT3RoZXIgTGFuZ3VhZ2UgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIHNtYWxsZXIgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIFB5dGhvbiBsYW5ndWFnZSBhcmU6CisKKyogVW5pY29kZSBkYXRhYmFzZSB1cGRhdGVkIHRvIFVDRCB2ZXJzaW9uIDYuMy4KKworKiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAgbm93IGFjY2VwdCBhICpkZWZhdWx0KiBrZXl3b3JkLW9ubHkgYXJndW1lbnQgdGhhdAorICBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZSB0aGV5IHJldHVybiBpZiB0aGUgaXRlcmFibGUgdGhleSBhcmUKKyAgZXZhbHVhdGluZyBoYXMgbm8gZWxlbWVudHMuICAoQ29udHJpYnV0ZWQgYnkgSnVsaWFuIEJlcm1hbiBpbgorICA6aXNzdWU6YDE4MTExYC4pCisKKyogTW9kdWxlIG9iamVjdHMgYXJlIG5vdyA6bW9kOmB3ZWFrcmVmYCdhYmxlLgorCisqIE1vZHVsZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlcyAoYW5kIHJlbGF0ZWQgdmFsdWVzKSBzaG91bGQgbm93IGFsd2F5cworICBjb250YWluIGFic29sdXRlIHBhdGhzIGJ5IGRlZmF1bHQsIHdpdGggdGhlIHNvbGUgZXhjZXB0aW9uIG9mCisgIGBgX19tYWluX18uX19maWxlX19gYCB3aGVuIGEgc2NyaXB0IGhhcyBiZWVuIGV4ZWN1dGVkIGRpcmVjdGx5IHVzaW5nCisgIGEgcmVsYXRpdmUgcGF0aCAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTg0MTZgKS4KKworKiBBbGwgdGhlIFVURi1cKiBjb2RlY3MgKGV4Y2VwdCBVVEYtNykgbm93IHJlamVjdCBzdXJyb2dhdGVzIGR1cmluZyBib3RoCisgIGVuY29kaW5nIGFuZCBkZWNvZGluZyB1bmxlc3MgdGhlIGBgc3Vycm9nYXRlcGFzc2BgIGVycm9yIGhhbmRsZXIgaXMgdXNlZCwKKyAgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBVVEYtMTYgZGVjb2RlciAod2hpY2ggYWNjZXB0cyB2YWxpZCBzdXJyb2dhdGUgcGFpcnMpCisgIGFuZCB0aGUgVVRGLTE2IGVuY29kZXIgKHdoaWNoIHByb2R1Y2VzIHRoZW0gd2hpbGUgZW5jb2Rpbmcgbm9uLUJNUCBjaGFyYWN0ZXJzKS4KKyAgQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIsIEthbmctSGFvIChLZW5ueSkgTHUgYW5kIFNlcmhpeSBTdG9yY2hha2EgaW4KKyAgOmlzc3VlOmAxMjg5MmAuCisKKyogTmV3IEdlcm1hbiBFQkNESUMgOnJlZjpgY29kZWMgPHN0YW5kYXJkLWVuY29kaW5ncz5gIGBgY3AyNzNgYC4gIChDb250cmlidXRlZAorICBieSBNaWNoYWVsIEJpZXJlbmZlbGQgYW5kIEFuZHJldyBLdWNobGluZyBpbiA6aXNzdWU6YDEwOTc3OTdgLikKKworKiBOZXcgVWtyYWluaWFuIDpyZWY6YGNvZGVjIDxzdGFuZGFyZC1lbmNvZGluZ3M+YCBgYGNwMTEyNWBgLiAgKENvbnRyaWJ1dGVkIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxOTY2OGAuKQorCisqIDpjbGFzczpgYnl0ZXNgLmpvaW4oKSBhbmQgOmNsYXNzOmBieXRlYXJyYXlgLmpvaW4oKSBub3cgYWNjZXB0IGFyYml0cmFyeQorICBidWZmZXIgb2JqZWN0cyBhcyBhcmd1bWVudHMuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4KKyAgOmlzc3VlOmAxNTk1OGAuKQorCisqIFRoZSA6Y2xhc3M6YGludGAgY29uc3RydWN0b3Igbm93IGFjY2VwdHMgYW55IG9iamVjdCB0aGF0IGhhcyBhbiBgYF9faW5kZXhfX2BgCisgIG1ldGhvZCBmb3IgaXRzICpiYXNlKiBhcmd1bWVudC4gIChDb250cmlidXRlZCBieSBNYXJrIERpY2tpbnNvbiBpbgorICA6aXNzdWU6YDE2NzcyYC4pCisKKyogRnJhbWUgb2JqZWN0cyBub3cgaGF2ZSBhIDpmdW5jOmB+ZnJhbWUuY2xlYXJgIG1ldGhvZCB0aGF0IGNsZWFycyBhbGwKKyAgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgZnJhbWUuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UKKyAgaW4gOmlzc3VlOmAxNzkzNGAuKQorCisqIDpjbGFzczpgbWVtb3J5dmlld2AgaXMgbm93IHJlZ2lzdGVyZWQgYXMgYSA6Y2xhc3M6YFNlcXVlbmNlIDxjb2xsZWN0aW9ucy5hYmM+YCwKKyAgYW5kIHN1cHBvcnRzIHRoZSA6ZnVuYzpgcmV2ZXJzZWRgIGJ1aWx0aW4uICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuCisgIGFuZCBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxODY5MGAgYW5kIDppc3N1ZTpgMTkwNzhgLikKKworKiBTaWduYXR1cmVzIHJlcG9ydGVkIGJ5IDpmdW5jOmBoZWxwYCBoYXZlIGJlZW4gbW9kaWZpZWQgYW5kIGltcHJvdmVkIGluCisgIHNldmVyYWwgY2FzZXMgYXMgYSByZXN1bHQgb2YgdGhlIGludHJvZHVjdGlvbiBvZiBBcmd1bWVudCBDbGluaWMgYW5kIG90aGVyCisgIGNoYW5nZXMgdG8gdGhlIDptb2Q6YGluc3BlY3RgIGFuZCA6bW9kOmBweWRvY2AgbW9kdWxlcy4KKworKiA6bWV0aDpgfm9iamVjdC5fX2xlbmd0aF9oaW50X19gIGlzIG5vdyBwYXJ0IG9mIHRoZSBmb3JtYWwgbGFuZ3VhZ2UKKyAgc3BlY2lmaWNhdGlvbiAoc2VlIDpwZXA6YDQyNGApLiAgKENvbnRyaWJ1dGVkIGJ5IEFybWluIFJvbmFjaGVyIGluCisgIDppc3N1ZTpgMTYxNDhgLikKKworCitOZXcgTW9kdWxlcworPT09PT09PT09PT0KKworCisuLiBfd2hhdHNuZXctYXN5bmNpbzoKKworYXN5bmNpbworLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YGFzeW5jaW9gIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmAzMTU2YCkgcHJvdmlkZXMgYSBzdGFuZGFyZAorcGx1Z2dhYmxlIGV2ZW50IGxvb3AgbW9kZWwgZm9yIFB5dGhvbiwgcHJvdmlkaW5nIHNvbGlkIGFzeW5jaHJvbm91cyBJTworc3VwcG9ydCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSwgYW5kIG1ha2luZyBpdCBlYXNpZXIgZm9yIG90aGVyIGV2ZW50IGxvb3AKK2ltcGxlbWVudGF0aW9ucyB0byBpbnRlcm9wZXJhdGUgd2l0aCB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgZWFjaCBvdGhlci4KKworRm9yIFB5dGhvbiAzLjQsIHRoaXMgbW9kdWxlIGlzIGNvbnNpZGVyZWQgYSA6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDMxNTZgIC0tIEFzeW5jaHJvbm91cyBJTyBTdXBwb3J0IFJlYm9vdGVkOiB0aGUgImFzeW5jaW8iIE1vZHVsZQorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGF0aW9uIGxlZCBieSBHdWlkbyB2YW4gUm9zc3VtLgorCisKKy4uIF93aGF0c25ldy1lbnN1cmVwaXA6CisKK2Vuc3VyZXBpcAorLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgZW5zdXJlcGlwYCBtb2R1bGUgaXMgdGhlIHByaW1hcnkgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZQorOnBlcDpgNDUzYCBpbXBsZW1lbnRhdGlvbi4gIEluIHRoZSBub3JtYWwgY291cnNlIG9mIGV2ZW50cyBlbmQgdXNlcnMgd2lsbCBub3QKK25lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIG1vZHVsZSwgYnV0IGl0IGNhbiBiZSB1c2VkIHRvIG1hbnVhbGx5IGJvb3RzdHJhcAorYGBwaXBgYCBpZiB0aGUgYXV0b21hdGVkIGJvb3RzdHJhcHBpbmcgaW50byBhbiBpbnN0YWxsYXRpb24gb3IgdmlydHVhbAorZW52aXJvbm1lbnQgd2FzIGRlY2xpbmVkLgorCis6bW9kOmBlbnN1cmVwaXBgIGluY2x1ZGVzIGEgYnVuZGxlZCBjb3B5IG9mIGBgcGlwYGAsIHVwLXRvLWRhdGUgYXMgb2YgdGhlIGZpcnN0CityZWxlYXNlIGNhbmRpZGF0ZSBvZiB0aGUgcmVsZWFzZSBvZiBDUHl0aG9uIHdpdGggd2hpY2ggaXQgc2hpcHMgKHRoaXMgYXBwbGllcwordG8gYm90aCBtYWludGVuYW5jZSByZWxlYXNlcyBhbmQgZmVhdHVyZSByZWxlYXNlcykuICBgYGVuc3VyZXBpcGBgIGRvZXMgbm90CithY2Nlc3MgdGhlIGludGVybmV0LiAgSWYgdGhlIGluc3RhbGxhdGlvbiBoYXMgSW50ZXJuZXQgYWNjZXNzLCBhZnRlcgorYGBlbnN1cmVwaXBgYCBpcyBydW4gdGhlIGJ1bmRsZWQgYGBwaXBgYCBjYW4gYmUgdXNlZCB0byB1cGdyYWRlIGBgcGlwYGAgdG8gYQorbW9yZSByZWNlbnQgcmVsZWFzZSB0aGFuIHRoZSBidW5kbGVkIG9uZS4gIChOb3RlIHRoYXQgc3VjaCBhbiB1cGdyYWRlZCB2ZXJzaW9uCitvZiBgYHBpcGBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzZXBhcmF0ZWx5IGluc3RhbGxlZCBwYWNrYWdlIGFuZCB3aWxsIG5vdCBiZQorcmVtb3ZlZCBpZiBQeXRob24gaXMgdW5pbnN0YWxsZWQuKQorCitUaGUgbW9kdWxlIGlzIG5hbWVkICplbnN1cmUqXCBwaXAgYmVjYXVzZSBpZiBjYWxsZWQgd2hlbiBgYHBpcGBgIGlzIGFscmVhZHkKK2luc3RhbGxlZCwgaXQgZG9lcyBub3RoaW5nLiAgSXQgYWxzbyBoYXMgYW4gYGAtLXVwZ3JhZGVgYCBvcHRpb24gdGhhdCB3aWxsCitjYXVzZSBpdCB0byBpbnN0YWxsIHRoZSBidW5kbGVkIGNvcHkgb2YgYGBwaXBgYCBpZiB0aGUgZXhpc3RpbmcgaW5zdGFsbGVkCit2ZXJzaW9uIG9mIGBgcGlwYGAgaXMgb2xkZXIgdGhhbiB0aGUgYnVuZGxlZCBjb3B5LgorCisKKy4uIF93aGF0c25ldy1lbnVtOgorCitlbnVtCistLS0tCisKK1RoZSBuZXcgOm1vZDpgZW51bWAgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQzNWApIHByb3ZpZGVzIGEgc3RhbmRhcmQKK2ltcGxlbWVudGF0aW9uIG9mIGVudW1lcmF0aW9uIHR5cGVzLCBhbGxvd2luZyBvdGhlciBtb2R1bGVzIChzdWNoIGFzCis6bW9kOmBzb2NrZXRgKSB0byBwcm92aWRlIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgYW5kIGJldHRlcgorZGVidWdnaW5nIHN1cHBvcnQgYnkgcmVwbGFjaW5nIG9wYXF1ZSBpbnRlZ2VyIGNvbnN0YW50cyB3aXRoIGJhY2t3YXJkcworY29tcGF0aWJsZSBlbnVtZXJhdGlvbiB2YWx1ZXMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MzVgIC0tIEFkZGluZyBhbiBFbnVtIHR5cGUgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5CisgICAgICBQRVAgd3JpdHRlbiBieSBCYXJyeSBXYXJzYXcsIEVsaSBCZW5kZXJza3kgYW5kIEV0aGFuIEZ1cm1hbiwKKyAgICAgIGltcGxlbWVudGVkIGJ5IEV0aGFuIEZ1cm1hbi4KKworCisuLiBfd2hhdHNuZXctcGF0aGxpYjoKKworcGF0aGxpYgorLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YHBhdGhsaWJgIG1vZHVsZSBvZmZlcnMgY2xhc3NlcyByZXByZXNlbnRpbmcgZmlsZXN5c3RlbSBwYXRocword2l0aCBzZW1hbnRpY3MgYXBwcm9wcmlhdGUgZm9yIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4gIFBhdGggY2xhc3NlcyBhcmUKK2RpdmlkZWQgYmV0d2VlbiAqcHVyZSBwYXRocyosIHdoaWNoIHByb3ZpZGUgcHVyZWx5IGNvbXB1dGF0aW9uYWwgb3BlcmF0aW9ucword2l0aG91dCBJL08sIGFuZCAqY29uY3JldGUgcGF0aHMqLCB3aGljaCBpbmhlcml0IGZyb20gcHVyZSBwYXRocyBidXQgYWxzbworcHJvdmlkZSBJL08gb3BlcmF0aW9ucy4KKworRm9yIFB5dGhvbiAzLjQsIHRoaXMgbW9kdWxlIGlzIGNvbnNpZGVyZWQgYSA6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQyOGAgLS0gVGhlIHBhdGhsaWIgbW9kdWxlIC0tIG9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgQW50b2luZSBQaXRyb3UuCisKKworLi4gX3doYXRzbmV3LXNlbGVjdG9yczoKKworc2VsZWN0b3JzCistLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSAoY3JlYXRlZCBhcyBwYXJ0IG9mIGltcGxlbWVudGluZyA6cGVwOmAzMTU2YCkKK2FsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKzptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuCisKKworLi4gX3doYXRzbmV3LXN0YXRpc3RpY3M6CisKK3N0YXRpc3RpY3MKKy0tLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBzdGF0aXN0aWNzYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgNDUwYCkgb2ZmZXJzIHNvbWUgY29yZQorc3RhdGlzdGljcyBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5IGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBUaGlzIG1vZHVsZQorc3VwcG9ydHMgY2FsY3VsYXRpb24gb2YgdGhlIG1lYW4sIG1lZGlhbiwgbW9kZSwgdmFyaWFuY2UgYW5kIHN0YW5kYXJkCitkZXZpYXRpb24gb2YgYSBkYXRhIHNlcmllcy4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ1MGAgLS0gQWRkaW5nIEEgU3RhdGlzdGljcyBNb2R1bGUgVG8gVGhlIFN0YW5kYXJkIExpYnJhcnkKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBTdGV2ZW4gRCdBcHJhbm8KKworLi4gX3doYXRzbmV3LXRyYWNlbWFsbG9jOgorCisKK3RyYWNlbWFsbG9jCistLS0tLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgNDU0YCkgaXMgYSBkZWJ1ZyB0b29sIHRvCit0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisKKyogVHJhY2Ugd2hlcmUgYW4gb2JqZWN0IHdhcyBhbGxvY2F0ZWQKKyogU3RhdGlzdGljcyBvbiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcyBwZXIgZmlsZW5hbWUgYW5kIHBlciBsaW5lIG51bWJlcjoKKyAgdG90YWwgc2l6ZSwgbnVtYmVyIGFuZCBhdmVyYWdlIHNpemUgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MKKyogQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gc25hcHNob3RzIHRvIGRldGVjdCBtZW1vcnkgbGVha3MKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ1NGAgLS0gQWRkIGEgbmV3IHRyYWNlbWFsbG9jIG1vZHVsZSB0byB0cmFjZSBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgVmljdG9yIFN0aW5uZXIKKworCisKK0ltcHJvdmVkIE1vZHVsZXMKKz09PT09PT09PT09PT09PT0KKworCithYmMKKy0tLQorCitOZXcgZnVuY3Rpb24gOmZ1bmM6YGFiYy5nZXRfY2FjaGVfdG9rZW5gIGNhbiBiZSB1c2VkIHRvIGtub3cgd2hlbiB0byBpbnZhbGlkYXRlCitjYWNoZXMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgY2hhbmdlcyBpbiB0aGUgb2JqZWN0IGdyYXBoLiAgKENvbnRyaWJ1dGVkCitieSDFgXVrYXN6IExhbmdhIGluIDppc3N1ZTpgMTY4MzJgLikKKworTmV3IGNsYXNzIDpjbGFzczpgfmFiYy5BQkNgIGhhcyA6Y2xhc3M6YH5hYmMuQUJDTWV0YWAgYXMgaXRzIG1ldGEgY2xhc3MuCitVc2luZyBgYEFCQ2BgIGFzIGEgYmFzZSBjbGFzcyBoYXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgZWZmZWN0IGFzIHNwZWNpZnlpbmcKK2BgbWV0YWNsYXNzPWFiYy5BQkNNZXRhYGAsIGJ1dCBpcyBzaW1wbGVyIHRvIHR5cGUgYW5kIGVhc2llciB0byByZWFkLgorKENvbnRyaWJ1dGVkIGJ5IEJydW5vIER1cHVpcyBpbiA6aXNzdWU6YDE2MDQ5YC4pCisKKworYWlmYworLS0tLQorCitUaGUgOm1ldGg6YH5haWZjLmFpZmMuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3ODE4YC4pCisKKzpmdW5jOmBhaWZjLm9wZW5gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sOiB3aGVuIHVzZWQgaW4gYQorOmtleXdvcmQ6YHdpdGhgIGJsb2NrLCB0aGUgOm1ldGg6YH5haWZjLmFpZmMuY2xvc2VgIG1ldGhvZCBvZiB0aGUgcmV0dXJuZWQKK29iamVjdCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiAgKENvbnRyaWJ1dGVkIGJ5CitTZXJoaXkgU3RvcmNoYWNoYSBpbiA6aXNzdWU6YDE2NDg2YC4pCisKK1RoZSA6bWV0aDpgfmFpZmMuYWlmYy53cml0ZWZyYW1lc3Jhd2AgYW5kIDptZXRoOmB+YWlmYy5haWZjLndyaXRlZnJhbWVzYAorbWV0aG9kcyBub3cgYWNjZXB0IGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLiAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeQorU3RvcmNoYWthIGluIDppc3N1ZTpgODMxMWAuKQorCisKK2FyZ3BhcnNlCistLS0tLS0tLQorCitUaGUgOmNsYXNzOmB+YXJncGFyc2UuRmlsZVR5cGVgIGNsYXNzIG5vdyBhY2NlcHRzICplbmNvZGluZyogYW5kCisqZXJyb3JzKiBhcmd1bWVudHMsIHdoaWNoIGFyZSBwYXNzZWQgdGhyb3VnaCB0byA6ZnVuYzpgb3BlbmAuICAoQ29udHJpYnV0ZWQKK2J5IEx1Y2FzIE1heXN0cmUgaW4gOmlzc3VlOmAxMTE3NWAuKQorCisKK2F1ZGlvb3AKKy0tLS0tLS0KKworOm1vZDpgYXVkaW9vcGAgbm93IHN1cHBvcnRzIDI0LWJpdCBzYW1wbGVzLiAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EKK2luIDppc3N1ZTpgMTI4NjZgLikKKworTmV3IDpmdW5jOmB+YXVkaW9vcC5ieXRlc3dhcGAgZnVuY3Rpb24gY29udmVydHMgYmlnLWVuZGlhbiBzYW1wbGVzIHRvCitsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluCis6aXNzdWU6YDE5NjQxYCkuCisKK0FsbCA6bW9kOmBhdWRpb29wYCBmdW5jdGlvbnMgbm93IGFjY2VwdCBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4gIFN0cmluZ3MKK2FyZSBub3QgYWNjZXB0ZWQ6IHRoZXkgZGlkbid0IHdvcmsgYmVmb3JlLCBub3cgdGhleSByYWlzZSBhbiBlcnJvciByaWdodCBhd2F5LgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNjY4NWAuKQorCisKK2Jhc2U2NAorLS0tLS0tCisKK1RoZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIDptb2Q6YGJhc2U2NGAgbm93IGFjY2VwdCBhbnkKKzp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaW4gY2FzZXMgd2hlcmUgaXQgcHJldmlvdXNseSByZXF1aXJlZCBhCis6Y2xhc3M6YGJ5dGVzYCBvciA6Y2xhc3M6YGJ5dGVhcnJheWAgaW5zdGFuY2UuICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluCis6aXNzdWU6YDE3ODM5YC4pCisKK05ldyBmdW5jdGlvbnMgOmZ1bmM6YH5iYXNlNjQuYTg1ZW5jb2RlYCwgOmZ1bmM6YH5iYXNlNjQuYTg1ZGVjb2RlYCwKKzpmdW5jOmB+YmFzZTY0LmI4NWVuY29kZWAsIGFuZCA6ZnVuYzpgfmJhc2U2NC5iODVkZWNvZGVgIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8KK2VuY29kZSBhbmQgZGVjb2RlIGJpbmFyeSBkYXRhIGZyb20gYW5kIHRvIGBgQXNjaWk4NWBgIGFuZCB0aGUgZ2l0L21lcmN1cmlhbAorYGBCYXNlODVgYCBmb3JtYXRzLCByZXNwZWN0aXZlbHkuICBUaGUgYGBhODVgYCBmdW5jdGlvbnMgaGF2ZSBvcHRpb25zIHRoYXQgY2FuCitiZSB1c2VkIHRvIG1ha2UgdGhlbSBjb21wYXRpYmxlIHdpdGggdGhlIHZhcmlhbnRzIG9mIHRoZSBgYEFzY2lpODVgYCBlbmNvZGluZywKK2luY2x1ZGluZyB0aGUgQWRvYmUgdmFyaWFudC4gIChDb250cmlidXRlZCBieSBNYXJ0aW4gTW9ycmlzb24sIHRoZSBNZXJjdXJpYWwKK3Byb2plY3QsIFNlcmhpeSBTdG9yY2hha2EsIGFuZCBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3NjE4YC4pCisKKworY29sbGVjdGlvbnMKKy0tLS0tLS0tLS0tCisKK1RoZSA6bWV0aDpgLkNoYWluTWFwLm5ld19jaGlsZGAgbWV0aG9kIG5vdyBhY2NlcHRzIGFuICptKiBhcmd1bWVudCBzcGVjaWZ5aW5nCit0aGUgY2hpbGQgbWFwIHRvIGFkZCB0byB0aGUgY2hhaW4uICBUaGlzIGFsbG93cyBhbiBleGlzdGluZyBtYXBwaW5nIGFuZC9vciBhCitjdXN0b20gbWFwcGluZyB0eXBlIHRvIGJlIHVzZWQgZm9yIHRoZSBjaGlsZC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbgorOmlzc3VlOmAxNjYxM2AuKQorCisKK2NvbG9yc3lzCistLS0tLS0tLQorCitUaGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUgUkdCIC0tLSBZSVEgY29udmVyc2lvbnMgaGF2ZQorYmVlbiBleHBhbmRlZCBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIEZDQyBOVFNDIHZlcnNpb25zLiAgVGhlIGNoYW5nZSBpbgorcmVzdWx0cyBzaG91bGQgYmUgbGVzcyB0aGFuIDElIGFuZCBtYXkgYmV0dGVyIG1hdGNoIHJlc3VsdHMgZm91bmQgZWxzZXdoZXJlLgorKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIExhbmRlcnMgYW5kIFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNDMyM2AuKQorCisKK2NvbnRleHRsaWIKKy0tLS0tLS0tLS0KKworVGhlIG5ldyA6Y2xhc3M6YGNvbnRleHRsaWIuc3VwcHJlc3NgIGNvbnRleHQgbWFuYWdlciBoZWxwcyB0byBjbGFyaWZ5IHRoZQoraW50ZW50IG9mIGNvZGUgdGhhdCBkZWxpYmVyYXRlbHkgc3VwcHJlc3NlcyBleGNlcHRpb25zIGZyb20gYSBzaW5nbGUKK3N0YXRlbWVudC4gKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyIGluIDppc3N1ZTpgMTU4MDZgIGFuZAorWmVybyBQaXJhZXVzIGluIDppc3N1ZTpgMTkyNjZgKQorCitUaGUgbmV3IDpmdW5jOmBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dGAgY29udGV4dCBtYW5hZ2VyIG1ha2VzIGl0IGVhc2llcgorZm9yIHV0aWxpdHkgc2NyaXB0cyB0byBoYW5kbGUgaW5mbGV4aWJsZSBBUElzIHRoYXQgd3JpdGUgdGhlaXIgb3V0cHV0IHRvCis6ZGF0YTpgc3lzLnN0ZG91dGAgYW5kIGRvbid0IHByb3ZpZGUgYW55IG9wdGlvbnMgdG8gcmVkaXJlY3QgaXQuICBVc2luZyB0aGUKK2NvbnRleHQgbWFuYWdlciwgdGhlIDpkYXRhOmBzeXMuc3Rkb3V0YCBvdXRwdXQgY2FuIGJlIHJlZGlyZWN0ZWQgdG8gYW55CitvdGhlciBzdHJlYW0gb3IsIGluIGNvbmp1bmN0aW9uIHdpdGggOmNsYXNzOmBpby5TdHJpbmdJT2AsIHRvIGEgc3RyaW5nLgorVGhlIGxhdHRlciBjYW4gYmUgZXNwZWNpYWxseSB1c2VmdWwsIGZvciBleGFtcGxlLCB0byBjYXB0dXJlIG91dHB1dAorZnJvbSBhIGZ1bmN0aW9uIHRoYXQgd2FzIHdyaXR0ZW4gdG8gaW1wbGVtZW50IGEgY29tbWFuZCBsaW5lIGludGVyZmFjZS4KK0l0IGlzIHJlY29tbWVuZGVkIG9ubHkgZm9yIHV0aWxpdHkgc2NyaXB0cyBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlCitnbG9iYWwgc3RhdGUgb2YgOmRhdGE6YHN5cy5zdGRvdXRgLiAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyCitpbiA6aXNzdWU6YDE1ODA1YCkKKworVGhlIDptb2Q6YGNvbnRleHRsaWJgIGRvY3VtZW50YXRpb24gaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIGluY2x1ZGUgYQorOnJlZjpgZGlzY3Vzc2lvbiA8c2luZ2xlLXVzZS1yZXVzYWJsZS1hbmQtcmVlbnRyYW50LWNtcz5gIG9mIHRoZQorZGlmZmVyZW5jZXMgYmV0d2VlbiBzaW5nbGUgdXNlLCByZXVzYWJsZSBhbmQgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMuCisKKworZGJtCistLS0KKworOmZ1bmM6YGRibS5vcGVuYCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBXaGVuCit1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgdGhlIGBgY2xvc2VgYCBtZXRob2Qgb2YgdGhlIGRhdGFiYXNlCitvYmplY3Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gIChDb250cmlidXRlZCBieQorQ2xhdWRpdSBQb3BhIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxOTI4MmAuKQorCisKK2RpcworLS0tCisKK0Z1bmN0aW9ucyA6ZnVuYzpgfmRpcy5zaG93X2NvZGVgLCA6ZnVuYzpgfmRpcy5kaXNgLCA6ZnVuYzpgfmRpcy5kaXN0YmAsIGFuZAorOmZ1bmM6YH5kaXMuZGlzYXNzZW1ibGVgIG5vdyBhY2NlcHQgYSBrZXl3b3JkLW9ubHkgKmZpbGUqIGFyZ3VtZW50IHRoYXQKK2NvbnRyb2xzIHdoZXJlIHRoZXkgd3JpdGUgdGhlaXIgb3V0cHV0LgorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgaXMgbm93IGJ1aWx0IGFyb3VuZCBhbiA6Y2xhc3M6YH5kaXMuSW5zdHJ1Y3Rpb25gIGNsYXNzCit0aGF0IHByb3ZpZGVzIG9iamVjdCBvcmllbnRlZCBhY2Nlc3MgdG8gdGhlIGRldGFpbHMgb2YgZWFjaCBpbmRpdmlkdWFsIGJ5dGVjb2RlCitvcGVyYXRpb24uCisKK0EgbmV3IG1ldGhvZCwgOmZ1bmM6YH5kaXMuZ2V0X2luc3RydWN0aW9uc2AsIHByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRoYXQgZW1pdHMKK3RoZSBJbnN0cnVjdGlvbiBzdHJlYW0gZm9yIGEgZ2l2ZW4gcGllY2Ugb2YgUHl0aG9uIGNvZGUuICBUaHVzIGl0IGlzIG5vdworcG9zc2libGUgdG8gd3JpdGUgYSBwcm9ncmFtIHRoYXQgaW5zcGVjdHMgYW5kIG1hbmlwdWxhdGVzIGEgYnl0ZWNvZGUKK29iamVjdCBpbiB3YXlzIGRpZmZlcmVudCBmcm9tIHRob3NlIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmB+ZGlzYCBtb2R1bGUKK2l0c2VsZi4gIEZvciBleGFtcGxlOjoKKworICAgID4+PiBpbXBvcnQgZGlzCisgICAgPj4+IGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhsYW1iZGEgeDogeCArIDEpOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIExPQURfRkFTVAorICAgIExPQURfQ09OU1QKKyAgICBCSU5BUllfQURECisgICAgUkVUVVJOX1ZBTFVFCisKK1RoZSB2YXJpb3VzIGRpc3BsYXkgdG9vbHMgaW4gdGhlIDptb2Q6YGRpc2AgbW9kdWxlIGhhdmUgYmVlbiByZXdyaXR0ZW4gdG8gdXNlCit0aGVzZSBuZXcgY29tcG9uZW50cy4KKworSW4gYWRkaXRpb24sIGEgbmV3IGFwcGxpY2F0aW9uLWZyaWVuZGx5IGNsYXNzIDpjbGFzczpgfmRpcy5CeXRlY29kZWAgcHJvdmlkZXMKK2FuIG9iamVjdC1vcmllbnRlZCBBUEkgZm9yIGluc3BlY3RpbmcgYnl0ZWNvZGUgaW4gYm90aCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtCithbmQgZm9yIGl0ZXJhdGluZyBvdmVyIGluc3RydWN0aW9ucy4gIFRoZSA6Y2xhc3M6YH5kaXMuQnl0ZWNvZGVgIGNvbnN0cnVjdG9yCit0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdCA6ZnVuYzpgfmRpcy5nZXRfaW5zdHJ1Y3Rpb25gIGRvZXMgKHBsdXMgYW4KK29wdGlvbmFsICpjdXJyZW50X29mZnNldCopLCBhbmQgdGhlIHJlc3VsdGluZyBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIHRvIHByb2R1Y2UKKzpjbGFzczpgfmRpcy5JbnN0cnVjdGlvbmAgb2JqZWN0cy4gIEJ1dCBpdCBhbHNvIGhhcyBhIDptb2Q6YH5kaXMuQnl0ZWNvZGUuZGlzYAorbWV0aG9kLCBlcXVpdmFsZW50IHRvIGNhbGxpbmcgOm1vZDpgfmRpcy5kaXNgIG9uIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudCwgYnV0CityZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nOjoKKworICAgID4+PiBieXRlY29kZSA9IGRpcy5CeXRlY29kZShsYW1iZGEgeDogeCArMSwgY3VycmVudF9vZmZzZXQ9MykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoJ3t9ICh7fSknLmZvcm1hdChpbnN0ci5vcG5hbWUsIGluc3RyLm9wY29kZSkpCisgICAgTE9BRF9GQVNUICgxMjQpCisgICAgTE9BRF9DT05TVCAoMTAwKQorICAgIEJJTkFSWV9BREQgKDIzKQorICAgIFJFVFVSTl9WQUxVRSAoODMpCisgICAgPj4+IGJ5dGVjb2RlLmRpcygpLnNwbGl0bGluZXMoKSAgICAgICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIFsnICAxICAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAwICh4KScsCisgICAgICcgICAgICAtLT4gICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpJywKKyAgICAgJyAgICAgICAgICAgICAgNiBCSU5BUllfQUREJywKKyAgICAgJyAgICAgICAgICAgICAgNyBSRVRVUk5fVkFMVUUnXQorCis6Y2xhc3M6YH5kaXMuQnl0ZWNvZGVgIGFsc28gaGFzIGEgY2xhc3MgbWV0aG9kLAorOm1ldGg6YH5kaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2tgLCB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG1hbmlwdWxhdGUgYQordHJhY2ViYWNrICh0aGF0IGlzLCBgYHByaW50KEJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKS5kaXMoKSlgYCBpcyBlcXVpdmFsZW50Cit0byBgYGRpc3RiKHRiKWBgKS4KKworKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiwgUnlhbiBLZWxseSBhbmQgVGhvbWFzIEtsdXl2ZXIgaW4gOmlzc3VlOmAxMTgxNmAKK2FuZCBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzkxNmApCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgfmRpcy5zdGFja19lZmZlY3RgIGNvbXB1dGVzIHRoZSBlZmZlY3Qgb24gdGhlIFB5dGhvbiBzdGFjaworb2YgYSBnaXZlbiBvcGNvZGUgYW5kIGFyZ3VtZW50LCBpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBvdGhlcndpc2UgYXZhaWxhYmxlLgorKENvbnRyaWJ1dGVkIGJ5IExhcnJ5IEhhc3RpbmdzIGluIDppc3N1ZTpgMTk3MjJgLikKKworCitkb2N0ZXN0CistLS0tLS0tCisKK0EgbmV3IDpyZWY6YG9wdGlvbiBmbGFnIDxkb2N0ZXN0LW9wdGlvbnM+YCwgOmRhdGE6YH5kb2N0ZXN0LkZBSUxfRkFTVGAsIGhhbHRzCit0ZXN0IHJ1bm5pbmcgYXMgc29vbiBhcyB0aGUgZmlyc3QgZmFpbHVyZSBpcyBkZXRlY3RlZC4gIChDb250cmlidXRlZCBieSBSLgorRGF2aWQgTXVycmF5IGFuZCBEYW5pZWwgVXJiYW4gaW4gOmlzc3VlOmAxNjUyMmAuKQorCitUaGUgOm1vZDpgZG9jdGVzdGAgY29tbWFuZCBsaW5lIGludGVyZmFjZSBub3cgdXNlcyA6bW9kOmBhcmdwYXJzZWAsIGFuZCBoYXMgdHdvCituZXcgb3B0aW9ucywgYGAtb2BgIGFuZCBgYC1mYGAuICBgYC1vYGAgYWxsb3dzIDpyZWY6YGRvY3Rlc3Qgb3B0aW9ucworPGRvY3Rlc3Qtb3B0aW9ucz5gIHRvIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgYGAtZmBgIGlzIGEKK3Nob3J0aGFuZCBmb3IgYGAtbyBGQUlMX0ZBU1RgYCAodG8gcGFyYWxsZWwgdGhlIHNpbWlsYXIgb3B0aW9uIHN1cHBvcnRlZCBieSB0aGUKKzptb2Q6YHVuaXR0ZXN0YCBDTEkpLiAgKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDExMzkwYC4pCisKKzptb2Q6YGRvY3Rlc3RgIHdpbGwgbm93IGZpbmQgZG9jdGVzdHMgaW4gZXh0ZW5zaW9uIG1vZHVsZSBgYF9fZG9jX19gYCBzdHJpbmdzLgorKENvbnRyaWJ1dGVkIGJ5IFphY2hhcnkgV2FyZSBpbiA6aXNzdWU6YDMxNThgLikKKworCitlbWFpbAorLS0tLS0KKworOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nYCBub3cgYWNjZXB0cyBhICpwb2xpY3kqIGFyZ3VtZW50IHRvCitvdmVycmlkZSB0aGUgZGVmYXVsdCBwb2xpY3kgb2YgdGhlIG1lc3NhZ2Ugd2hlbiBnZW5lcmF0aW5nIGEgc3RyaW5nCityZXByZXNlbnRhdGlvbiBvZiBpdC4gIFRoaXMgbWVhbnMgdGhhdCBgYGFzX3N0cmluZ2BgIGNhbiBub3cgYmUgdXNlZCBpbiBtb3JlCitjaXJjdW1zdGFuY2VzLCBpbnN0ZWFkIG9mIGhhdmluZyB0byBjcmVhdGUgYW5kIHVzZSBhIDptb2Q6YH5lbWFpbC5nZW5lcmF0b3JgIGluCitvcmRlciB0byBwYXNzIGZvcm1hdHRpbmcgcGFyYW1ldGVycyB0byBpdHMgYGBmbGF0dGVuYGAgbWV0aG9kLiAgKENvbnRyaWJ1dGVkIGJ5CitSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxODYwMGAuKQorCitOZXcgbWV0aG9kIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX2J5dGVzYCBhZGRlZCB0byBwcm9kdWNlIGEgYnl0ZXMKK3JlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlIGluIGEgZmFzaGlvbiBzaW1pbGFyIHRvIGhvdyBgYGFzX3N0cmluZ2BgCitwcm9kdWNlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gIEl0IGRvZXMgbm90IGFjY2VwdCB0aGUgKm1heGhlYWRlcmxlbioKK2FyZ3VtZW50LCBidXQgZG9lcyBhY2NlcHQgdGhlICp1bml4ZnJvbSogYW5kICpwb2xpY3kqIGFyZ3VtZW50cy4gVGhlCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fYnl0ZXNfX2AgbWV0aG9kCitjYWxscyBpdCwgbWVhbmluZyB0aGF0IGBgYnl0ZXMobXltc2cpYGAgd2lsbCBub3cgcHJvZHVjZSB0aGUgaW50dWl0aXZlCityZXN1bHQ6ICBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBmdWxseSBmb3JtYXR0ZWQgbWVzc2FnZS4gIChDb250cmlidXRlZAorYnkgUi4gRGF2aWQgTXVycmF5IGluIDppc3N1ZTpgMTg2MDBgLikKKworVGhlIDptZXRoOmAuTWVzc2FnZS5zZXRfcGFyYW1gIG1lc3NhZ2Ugbm93IGFjY2VwdHMgYSAqcmVwbGFjZSoga2V5d29yZCBhcmd1bWVudC4KK1doZW4gc3BlY2lmaWVkLCB0aGUgYXNzb2NpYXRlZCBoZWFkZXIgd2lsbCBiZSB1cGRhdGVkIHdpdGhvdXQgY2hhbmdpbmcKK2l0cyBsb2NhdGlvbiBpbiB0aGUgbGlzdCBvZiBoZWFkZXJzLiAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSBkZWZhdWx0CitpcyBgYEZhbHNlYGAuICAoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQgTXVycmF5IGluIDppc3N1ZTpgMTg4OTFgLikKKworCisuLiBfd2hhdHNuZXdfZW1haWxfY29udGVudG1hbmFnZXI6CisKK0EgcGFpciBvZiBuZXcgc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGhhdmUgYmVlbiBhZGRlZAorKDpjbGFzczpgLkVtYWlsTWVzc2FnZWAgYW5kIDpjbGFzczpgLk1JTUVQYXJ0YCksIGFsb25nIHdpdGggYSBuZXcgc3ViLW1vZHVsZSwKKzptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAgYW5kIGEgbmV3IDptb2Q6YH5lbWFpbC5wb2xpY3lgIGF0dHJpYnV0ZQorOmF0dHI6YH5lbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuY29udGVudF9tYW5hZ2VyYC4gIEFsbCBkb2N1bWVudGF0aW9uIGlzCitjdXJyZW50bHkgaW4gdGhlIG5ldyBtb2R1bGUsIHdoaWNoIGlzIGJlaW5nIGFkZGVkIGFzIHBhcnQgb2YgZW1haWwncyBuZXcKKzp0ZXJtOmBwcm92aXNpb25hbCBBUElgLiAgVGhlc2UgY2xhc3NlcyBwcm92aWRlIGEgbnVtYmVyIG9mIG5ldyBtZXRob2RzIHRoYXQKK21ha2UgZXh0cmFjdGluZyBjb250ZW50IGZyb20gYW5kIGluc2VydGluZyBjb250ZW50IGludG8gZW1haWwgbWVzc2FnZXMgbXVjaAorZWFzaWVyLiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgOm1vZDpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyYCBkb2N1bWVudGF0aW9uIGFuZAordGhlIDpyZWY6YGVtYWlsLWNvbnRlbnRtYW5hZ2VyLWFwaS1leGFtcGxlc2AuICBUaGVzZSBBUEkgYWRkaXRpb25zIGNvbXBsZXRlIHRoZQorYnVsayBvZiB0aGUgd29yayB0aGF0IHdhcyBwbGFubmVkIGFzIHBhcnQgb2YgdGhlIGVtYWlsNiBwcm9qZWN0LiAgVGhlIGN1cnJlbnRseQorcHJvdmlzaW9uYWwgQVBJIGlzIHNjaGVkdWxlZCB0byBiZWNvbWUgZmluYWwgaW4gUHl0aG9uIDMuNSAocG9zc2libHkgd2l0aCBhIGZldworbWlub3IgYWRkaXRpb25zIGluIHRoZSBhcmVhIG9mIGVycm9yIGhhbmRsaW5nKS4gIChDb250cmlidXRlZCBieSBSLiBEYXZpZAorTXVycmF5IGluIDppc3N1ZTpgMTg4OTFgLikKKworCitmaWxlY21wCistLS0tLS0tCisKK0EgbmV3IDpmdW5jOmB+ZmlsZWNtcC5jbGVhcl9jYWNoZWAgZnVuY3Rpb24gcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gY2xlYXIgdGhlCis6bW9kOmBmaWxlY21wYCBjb21wYXJpc29uIGNhY2hlLCB3aGljaCB1c2VzIDpmdW5jOmBvcy5zdGF0YCBpbmZvcm1hdGlvbiB0bworZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGNvbXBhcmUuICBUaGlzIGNhbiBiZSB1c2VkLAorZm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlIG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkIGFuZCByZS1jaGVja2VkIGluIGxlc3MgdGltZQordGhhbiB0aGUgcmVzb2x1dGlvbiBvZiBhIHBhcnRpY3VsYXIgZmlsZXN5c3RlbSdzIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgZmllbGQuCisoQ29udHJpYnV0ZWQgYnkgTWFyayBMZXZpdHQgaW4gOmlzc3VlOmAxODE0OWAuKQorCitOZXcgbW9kdWxlIGF0dHJpYnV0ZSA6ZGF0YTpgfmZpbGVjbXAuREVGQVVMVF9JR05PUkVTYCBwcm92aWRlcyB0aGUgbGlzdCBvZgorZGlyZWN0b3JpZXMgdGhhdCBhcmUgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlICppZ25vcmUqIHBhcmFtZXRlciBvZgordGhlIDpmdW5jOmB+ZmlsZWNtcC5kaXJjbXBgIGZ1bmN0aW9uLiAgKENvbnRyaWJ1dGVkIGJ5IEVsaSBCZW5kZXJza3kgaW4KKzppc3N1ZTpgMTU0NDJgLikKKworCitmdW5jdG9vbHMKKy0tLS0tLS0tLQorCitUaGUgbmV3IDpmdW5jOmB+ZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2RgIGRlc2NyaXB0b3IgYnJpbmdzIHBhcnRpYWwgYXJndW1lbnQKK2FwcGxpY2F0aW9uIHRvIGRlc2NyaXB0b3JzLCBqdXN0IGFzIDpmdW5jOmB+ZnVuY3Rvb2xzLnBhcnRpYWxgIHByb3ZpZGVzCitmb3Igbm9ybWFsIGNhbGxhYmxlcy4gVGhlIG5ldyBkZXNjcmlwdG9yIGFsc28gbWFrZXMgaXQgZWFzaWVyIHRvIGdldAorYXJiaXRyYXJ5IGNhbGxhYmxlcyAoaW5jbHVkaW5nIDpmdW5jOmB+ZnVuY3Rvb2xzLnBhcnRpYWxgIGluc3RhbmNlcykKK3RvIGJlaGF2ZSBsaWtlIG5vcm1hbCBpbnN0YW5jZSBtZXRob2RzIHdoZW4gaW5jbHVkZWQgaW4gYSBjbGFzcyBkZWZpbml0aW9uLgorKENvbnRyaWJ1dGVkIGJ5IEFsb24gSG9yZXYgYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDQzMzFgKQorCisuLiBfd2hhdHNuZXctc2luZ2xlZGlzcGF0Y2g6CisKK1RoZSBuZXcgOmZ1bmM6YH5mdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2hgIGRlY29yYXRvciBicmluZ3Mgc3VwcG9ydCBmb3IKK3NpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyB0byB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkuIFdoZXJlCitvYmplY3Qgb3JpZW50ZWQgcHJvZ3JhbW1pbmcgZm9jdXNlcyBvbiBncm91cGluZyBtdWx0aXBsZSBvcGVyYXRpb25zIG9uIGEKK2NvbW1vbiBzZXQgb2YgZGF0YSBpbnRvIGEgY2xhc3MsIGEgZ2VuZXJpYyBmdW5jdGlvbiBmb2N1c2VzIG9uIGdyb3VwaW5nCittdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMgb2YgYW4gb3BlcmF0aW9uIHRoYXQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aAorKmRpZmZlcmVudCoga2luZHMgb2YgZGF0YS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0M2AgLS0gU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb25zCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgxYF1a2FzeiBMYW5nYS4KKworOmZ1bmM6YH5mdW5jdG9vbHMudG90YWxfb3JkZXJpbmdgIG5vdyBzdXBwb3J0cyBhIHJldHVybiB2YWx1ZSBvZgorOmNvbnN0OmBOb3RJbXBsZW1lbnRlZGAgZnJvbSB0aGUgdW5kZXJseWluZyBjb21wYXJpc29uIGZ1bmN0aW9uLiAgKENvbnRyaWJ1dGVkCitieSBLYXRpZSBNaWxsZXIgaW4gOmlzc3VlOmAxMDA0MmAuKQorCitBIHB1cmUtcHl0aG9uIHZlcnNpb24gb2YgdGhlIDpmdW5jOmB+ZnVuY3Rvb2xzLnBhcnRpYWxgIGZ1bmN0aW9uIGlzIG5vdyBpbiB0aGUKK3N0ZGxpYjsgaW4gQ1B5dGhvbiBpdCBpcyBvdmVycmlkZGVuIGJ5IHRoZSBDIGFjY2VsZXJhdGVkIHZlcnNpb24sIGJ1dCBpdCBpcworYXZhaWxhYmxlIGZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlLiAgKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIFRob3JuZSBpbgorOmlzc3VlOmAxMjQyOGAuKQorCisKK2djCistLQorCitOZXcgZnVuY3Rpb24gOmZ1bmM6YH5nYy5nZXRfc3RhdHNgIHJldHVybnMgYSBsaXN0IG9mIHRocmVlIHBlci1nZW5lcmF0aW9uCitkaWN0aW9uYXJpZXMgY29udGFpbmluZyB0aGUgY29sbGVjdGlvbnMgc3RhdGlzdGljcyBzaW5jZSBpbnRlcnByZXRlciBzdGFydHVwLgorKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTYzNTFgLikKKworCitnbG9iCistLS0tCisKK0EgbmV3IGZ1bmN0aW9uIDpmdW5jOmB+Z2xvYi5lc2NhcGVgIHByb3ZpZGVzIGEgd2F5IHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMKK2luIGEgZmlsZW5hbWUgc28gdGhhdCB0aGV5IGRvIG5vdCBiZWNvbWUgcGFydCBvZiB0aGUgZ2xvYmJpbmcgZXhwYW5zaW9uIGJ1dCBhcmUKK2luc3RlYWQgbWF0Y2hlZCBsaXRlcmFsbHkuICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDg0MDJgLikKKworCitoYXNobGliCistLS0tLS0tCisKK0EgbmV3IDpmdW5jOmBoYXNobGliLnBia2RmMl9obWFjYCBmdW5jdGlvbiBwcm92aWRlcwordGhlIGBQS0NTIzUgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMgorPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUEJLREYyPmBfLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbgorSGVpbWVzIGluIDppc3N1ZTpgMTg1ODJgKQorCitUaGUgOmF0dHI6YH5oYXNobGliLmhhc2gubmFtZWAgYXR0cmlidXRlIG9mIDptb2Q6YGhhc2hsaWJgIGhhc2ggb2JqZWN0cyBpcyBub3cKK2EgZm9ybWFsbHkgc3VwcG9ydGVkIGludGVyZmFjZS4gIEl0IGhhcyBhbHdheXMgZXhpc3RlZCBpbiBDUHl0aG9uJ3MKKzptb2Q6YGhhc2hsaWJgIChhbHRob3VnaCBpdCBkaWQgbm90IHJldHVybiBsb3dlciBjYXNlIG5hbWVzIGZvciBhbGwgc3VwcG9ydGVkCitoYXNoZXMpLCBidXQgaXQgd2FzIG5vdCBhIHB1YmxpYyBpbnRlcmZhY2UgYW5kIHNvIHNvbWUgb3RoZXIgUHl0aG9uCitpbXBsZW1lbnRhdGlvbnMgaGF2ZSBub3QgcHJldmlvdXNseSBzdXBwb3J0ZWQgaXQuICAoQ29udHJpYnV0ZWQgYnkgSmFzb24gUi4KK0Nvb21icyBpbiA6aXNzdWU6YDE4NTMyYC4pCisKKworaG1hYworLS0tLQorCis6bW9kOmBobWFjYCBub3cgYWNjZXB0cyBgYGJ5dGVhcnJheWBgIGFzIHdlbGwgYXMgYGBieXRlc2BgIGZvciB0aGUgKmtleSoKK2FyZ3VtZW50IHRvIHRoZSA6ZnVuYzpgfmhtYWMubmV3YCBmdW5jdGlvbiwgYW5kIHRoZSAqbXNnKiBwYXJhbWV0ZXIgdG8gYm90aCB0aGUKKzpmdW5jOmB+aG1hYy5uZXdgIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YH5obWFjLkhNQUMudXBkYXRlYCBtZXRob2Qgbm93CithY2NlcHRzIGFueSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgOm1vZDpgaGFzaGxpYmAgbW9kdWxlLiAgKENvbnRyaWJ1dGVkCitieSBKb25hcyBCb3Jnc3Ryw7ZtIGluIDppc3N1ZTpgMTgyNDBgLikKKworVGhlICpkaWdlc3Rtb2QqIGFyZ3VtZW50IHRvIHRoZSA6ZnVuYzpgaG1hYy5uZXdgIGZ1bmN0aW9uIG1heSBub3cgYmUgYW55IGhhc2gKK2RpZ2VzdCBuYW1lIHJlY29nbml6ZWQgYnkgOm1vZDpgaGFzaGxpYmAuICBJbiBhZGRpdGlvbiwgdGhlIGN1cnJlbnQgYmVoYXZpb3IgaW4KK3doaWNoIHRoZSB2YWx1ZSBvZiAqZGlnZXN0bW9kKiBkZWZhdWx0cyB0byBgYE1ENWBgIGlzIGRlcHJlY2F0ZWQ6IGluIGEKK2Z1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbiB0aGVyZSB3aWxsIGJlIG5vIGRlZmF1bHQgdmFsdWUuICAoQ29udHJpYnV0ZWQgYnkKK0NocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNzI3NmAuKQorCitXaXRoIHRoZSBhZGRpdGlvbiBvZiA6YXR0cjpgfmhtYWMuSE1BQy5ibG9ja19zaXplYCBhbmQgOmF0dHI6YH5obWFjLkhNQUMubmFtZWAKK2F0dHJpYnV0ZXMgKGFuZCB0aGUgZm9ybWFsIGRvY3VtZW50YXRpb24gb2YgdGhlIDphdHRyOmB+aG1hYy5ITUFDLmRpZ2VzdF9zaXplYAorYXR0cmlidXRlKSwgdGhlIDptb2Q6YGhtYWNgIG1vZHVsZSBub3cgY29uZm9ybXMgZnVsbHkgdG8gdGhlIDpwZXA6YDI0N2AgQVBJLgorKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODc3NWAuKQorCisKK2h0bWwKKy0tLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+aHRtbC51bmVzY2FwZWAgZnVuY3Rpb24gY29udmVydHMgSFRNTDUgY2hhcmFjdGVyIHJlZmVyZW5jZXMgdG8KK3RoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4gIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4KKzppc3N1ZTpgMjkyN2ApCisKKzpjbGFzczpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZXJgIGFjY2VwdHMgYSBuZXcga2V5d29yZCBhcmd1bWVudAorKmNvbnZlcnRfY2hhcnJlZnMqIHRoYXQsIHdoZW4gYGBUcnVlYGAsIGF1dG9tYXRpY2FsbHkgY29udmVydHMgYWxsIGNoYXJhY3RlcgorcmVmZXJlbmNlcy4gIEZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LCBpdHMgdmFsdWUgZGVmYXVsdHMgdG8gYGBGYWxzZWBgLCBidXQKK2l0IHdpbGwgY2hhbmdlIHRvIGBgVHJ1ZWBgIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUHl0aG9uLCBzbyB5b3UgYXJlIGludml0ZWQgdG8KK3NldCBpdCBleHBsaWNpdGx5IGFuZCB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZSB0aGlzIG5ldyBmZWF0dXJlLiAgKENvbnRyaWJ1dGVkCitieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxMzYzM2ApCisKK1RoZSAqc3RyaWN0KiBhcmd1bWVudCBvZiA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBpcyBub3cgZGVwcmVjYXRlZC4KKyhDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxNTExNGApCisKKworaHR0cAorLS0tLQorCis6bWV0aDpgfmh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvcmAgbm93IGFjY2VwdHMgYW4KK29wdGlvbmFsIGFkZGl0aW9uYWwgKmV4cGxhaW4qIHBhcmFtZXRlciB3aGljaCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGFuCitleHRlbmRlZCBlcnJvciBkZXNjcmlwdGlvbiwgb3ZlcnJpZGluZyB0aGUgaGFyZGNvZGVkIGRlZmF1bHQgaWYgdGhlcmUgaXMgb25lLgorVGhpcyBleHRlbmRlZCBlcnJvciBkZXNjcmlwdGlvbiB3aWxsIGJlIGZvcm1hdHRlZCB1c2luZyB0aGUKKzphdHRyOmB+aHR0cC5zZXJ2ZXIuSFRUUC5lcnJvcl9tZXNzYWdlX2Zvcm1hdGAgYXR0cmlidXRlIGFuZCBzZW50IGFzIHRoZSBib2R5CitvZiB0aGUgZXJyb3IgcmVzcG9uc2UuICAoQ29udHJpYnV0ZWQgYnkgS2FybCBDb3cgaW4gOmlzc3VlOmAxMjkyMWAuKQorCitUaGUgOm1vZDpgaHR0cC5zZXJ2ZXJgIDpyZWY6YGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgPGh0dHAtc2VydmVyLWNsaT5gIG5vdyBoYXMKK2EgYGAtYi8tLWJpbmRgYCBvcHRpb24gdGhhdCBjYXVzZXMgdGhlIHNlcnZlciB0byBsaXN0ZW4gb24gYSBzcGVjaWZpYyBhZGRyZXNzLgorKENvbnRyaWJ1dGVkIGJ5IE1hbHRlIFN3YXJ0IGluIDppc3N1ZTpgMTc3NjRgLikKKworCitpbXBvcnRsaWIKKy0tLS0tLS0tLQorCitUaGUgOmNsYXNzOmB+aW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyYCBBQkMgZGVmaW5lcyBhIG5ldyBtZXRob2QsCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5zb3VyY2VfdG9fY29kZWAgdGhhdCBhY2NlcHRzIHNvdXJjZQorZGF0YSBhbmQgYSBwYXRoIGFuZCByZXR1cm5zIGEgY29kZSBvYmplY3QuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgoraXMgZXF1aXZhbGVudCB0byBgYGNvbXBpbGUoZGF0YSwgcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSlgYC4KKyhDb250cmlidXRlZCBieSBFcmljIFNub3cgYW5kIEJyZXR0IENhbm5vbiBpbiA6aXNzdWU6YDE1NjI3YC4pCisKKzpjbGFzczpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlcmAgYWxzbyBub3cgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorZm9yIHRoZSA6bWV0aDpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfY29kZWAgbWV0aG9kLiAgSG93ZXZlciwKK2l0IHdpbGwgbm9ybWFsbHkgYmUgZGVzaXJhYmxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCitmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIChDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24gaW4gOmlzc3VlOmAxODA3MmAuKQorCitUaGUgOmZ1bmM6YH5pbXBvcnRsaWIucmVsb2FkYCBmdW5jdGlvbiBoYXMgYmVlbiBtb3ZlZCBmcm9tIDptb2Q6YGltcGAgdG8KKzptb2Q6YGltcG9ydGxpYmAgYXMgcGFydCBvZiB0aGUgOm1vZDpgaW1wYCBtb2R1bGUgZGVwcmVjYXRpb24uICAoQ29udHJpYnV0ZWQgYnkKK0JlcmtlciBQZWtzYWcgaW4gOmlzc3VlOmAxODE5M2AuKQorCis6bW9kOmBpbXBvcnRsaWIudXRpbGAgbm93IGhhcyBhIDpkYXRhOmB+aW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSYCBhdHRyaWJ1dGUKK3Byb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGJ5dGVjb2RlIHZlcnNpb24gbnVtYmVyLiAgVGhpcyByZXBsYWNlcyB0aGUKKzpmdW5jOmB+aW1wLmdldF9tYWdpY2AgZnVuY3Rpb24gaW4gdGhlIGRlcHJlY2F0ZWQgOm1vZDpgaW1wYCBtb2R1bGUuCisoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTgxOTJgLikKKworTmV3IDptb2Q6YGltcG9ydGxpYi51dGlsYCBmdW5jdGlvbnMgOmZ1bmM6YH5pbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZWAKK2FuZCA6ZnVuYzpgfmltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlYCByZXBsYWNlIHRoZSBzYW1lLW5hbWVkIGZ1bmN0aW9ucworaW4gdGhlIGRlcHJlY2F0ZWQgOm1vZDpgaW1wYCBtb2R1bGUuICAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluCis6aXNzdWU6YDE4MTk0YC4pCisKK1RoZSA6bW9kOmBpbXBvcnRsaWJgIGJvb3RzdHJhcCA6Y2xhc3M6YC5OYW1lc3BhY2VMb2FkZXJgIG5vdyBjb25mb3JtcyB0bwordGhlIDpjbGFzczpgLkluc3BlY3RMb2FkZXJgIEFCQywgd2hpY2ggbWVhbnMgdGhhdCBgYHJ1bnB5YGAgYW5kCitgYHB5dGhvbiAtbWBgIGNhbiBub3cgYmUgdXNlZCB3aXRoIG5hbWVzcGFjZSBwYWNrYWdlcy4gIChDb250cmlidXRlZAorYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTgwNThgLikKKworOm1vZDpgaW1wb3J0bGliLnV0aWxgIGhhcyBhIG5ldyBmdW5jdGlvbiA6ZnVuYzpgfmltcG9ydGxpYi51dGlsLmRlY29kZV9zb3VyY2VgCit0aGF0IGRlY29kZXMgc291cmNlIGZyb20gYnl0ZXMgdXNpbmcgdW5pdmVyc2FsIG5ld2xpbmUgcHJvY2Vzc2luZy4gIFRoaXMgaXMKK3VzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIDptZXRoOmAuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYCBtZXRob2RzLgorCis6Y2xhc3M6YGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcmAgbm93IGhhcyBhCis6bWV0aDpgfmltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfZmlsZW5hbWVgIG1ldGhvZC4gIFRoaXMgd2FzCitpbmFkdmVydGVudGx5IG9taXR0ZWQgaW4gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLiAgKENvbnRyaWJ1dGVkIGJ5IEVyaWMKK1Nub3cgaW4gOmlzc3VlOmAxOTE1MmAuKQorCisKK2luc3BlY3QKKy0tLS0tLS0KKworVGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgOnJlZjpgY29tbWFuZCBsaW5lIGludGVyZmFjZQorPGluc3BlY3QtbW9kdWxlLWNsaT5gIHRvIHF1aWNrbHkgZGlzcGxheSBzb3VyY2UgY29kZSBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIGZvciBtb2R1bGVzLCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEKK2FuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxODYyNmApCisKKzpmdW5jOmB+aW5zcGVjdC51bndyYXBgIG1ha2VzIGl0IGVhc3kgdG8gdW5yYXZlbCB3cmFwcGVyIGZ1bmN0aW9uIGNoYWlucworY3JlYXRlZCBieSA6ZnVuYzpgZnVuY3Rvb2xzLndyYXBzYCAoYW5kIGFueSBvdGhlciBBUEkgdGhhdCBzZXRzIHRoZQorYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBvbiBhIHdyYXBwZXIgZnVuY3Rpb24pLiAoQ29udHJpYnV0ZWQgYnkKK0RhbmllbCBVcmJhbiwgQWFyb24gSWxlcyBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTMyNjZgKQorCitBcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSwgdGhlCis6bW9kOmBpbnNwZWN0YCBtb2R1bGUgbm93IGhhcyBzdWJzdGFudGlhbGx5IGJldHRlciBzdXBwb3J0IGZvciBjdXN0b20KK2BgX19kaXJfX2BgIG1ldGhvZHMgYW5kIGR5bmFtaWMgY2xhc3MgYXR0cmlidXRlcyBwcm92aWRlZCB0aHJvdWdoCittZXRhY2xhc3NlcyAoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTg5MjlgIGFuZAorOmlzc3VlOmAxOTAzMGApCisKKzpmdW5jOmB+aW5zcGVjdC5nZXRmdWxsYXJnc3BlY2AgYW5kIDpmdW5jOmB+aW5zcGVjdC5nZXRhcmdzcGVjYAorbm93IHVzZSB0aGUgOmZ1bmM6YH5pbnNwZWN0LnNpZ25hdHVyZWAgQVBJLiBUaGlzIGFsbG93cyB0aGVtIHRvCitzdXBwb3J0IGEgbXVjaCBicm9hZGVyIHJhbmdlIG9mIGNhbGxhYmxlcywgaW5jbHVkaW5nIHRob3NlIHdpdGgKK2BgX19zaWduYXR1cmVfX2BgIGF0dHJpYnV0ZXMsIHRob3NlIHdpdGggbWV0YWRhdGEgcHJvdmlkZWQgYnkgYXJndW1lbnQKK2NsaW5pYywgOmZ1bmM6YGZ1bmN0b29scy5wYXJ0aWFsYCBvYmplY3RzIGFuZCBtb3JlLiBOb3RlIHRoYXQsIHVubGlrZQorOmZ1bmM6YH5pbnNwZWN0LnNpZ25hdHVyZWAsIHRoZXNlIGZ1bmN0aW9ucyBzdGlsbCBpZ25vcmUgYGBfX3dyYXBwZWRfX2BgCithdHRyaWJ1dGVzLCBhbmQgcmVwb3J0IHRoZSBhbHJlYWR5IGJvdW5kIGZpcnN0IGFyZ3VtZW50IGZvciBib3VuZCBtZXRob2RzLAorc28gaXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIHVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlCis6ZnVuYzpgfmluc3BlY3Quc2lnbmF0dXJlYCBkaXJlY3RseSBpZiB0aG9zZSBmZWF0dXJlcyBhcmUgZGVzaXJlZC4KKyhDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdiBpbiA6aXNzdWU6YDE3NDgxYCkKKworOmZ1bmM6YH5pbnNwZWN0LnNpZ25hdHVyZWAgbm93IHN1cHBvcnRzIGR1Y2sgdHlwZXMgb2YgQ1B5dGhvbiBmdW5jdGlvbnMsCit3aGljaCBhZGRzIHN1cHBvcnQgZm9yIGZ1bmN0aW9ucyBjb21waWxlZCB3aXRoIEN5dGhvbi4gKENvbnRyaWJ1dGVkCitieSBTdGVmYW4gQmVobmVsIGFuZCBZdXJ5IFNlbGl2YW5vdiBpbiA6aXNzdWU6YDE3MTU5YCkKKworCitpcGFkZHJlc3MKKy0tLS0tLS0tLQorCis6bW9kOmBpcGFkZHJlc3NgIHdhcyBhZGRlZCB0byB0aGUgc3RhbmRhcmQgbGlicmFyeSBpbiBQeXRob24gMy4zIGFzIGEKKzp0ZXJtOmBwcm92aXNpb25hbCBBUElgLiBXaXRoIHRoZSByZWxlYXNlIG9mIFB5dGhvbiAzLjQsIHRoaXMgcXVhbGlmaWNhdGlvbgoraGFzIGJlZW4gcmVtb3ZlZDogOm1vZDpgaXBhZGRyZXNzYCBpcyBub3cgY29uc2lkZXJlZCBhIHN0YWJsZSBBUEksIGNvdmVyZWQKK2J5IHRoZSBub3JtYWwgc3RhbmRhcmQgbGlicmFyeSByZXF1aXJlbWVudHMgdG8gbWFpbnRhaW4gYmFja3dhcmRzCitjb21wYXRpYmlsaXR5LgorCitBIG5ldyA6YXR0cjpgfmlwYWRkcmVzcy5JUHY0QWRkcmVzcy5pc19nbG9iYWxgIHByb3BlcnR5IGlzIGBgVHJ1ZWBgIGlmCithbiBhZGRyZXNzIGlzIGdsb2JhbGx5IHJvdXRlYWJsZS4gIChDb250cmlidXRlZCBieSBQZXRlciBNb29keSBpbgorOmlzc3VlOmAxNzQwMGAuKQorCisKK2xvZ2dpbmcKKy0tLS0tLS0KKworVGhlIDpjbGFzczpgfmxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyYCBoYXMgYSBuZXcgKmF0VGltZSoKK3BhcmFtZXRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHRpbWUgb2YgZGF5IHdoZW4gcm9sbG92ZXIgc2hvdWxkCitoYXBwZW4uICAoQ29udHJpYnV0ZWQgYnkgUm9uYWxkIE91c3NvcmVuIGluIDppc3N1ZTpgOTU1NmAuKQorCis6Y2xhc3M6YH5sb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXJgIGFuZAorOmNsYXNzOmB+bG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXJgIG5vdyBzdXBwb3J0IFVuaXggZG9tYWluIHNvY2tldHMgKGJ5CitzZXR0aW5nICpwb3J0KiB0byBgYE5vbmVgYCkuICAoQ29udHJpYnV0ZWQgYnkgVmluYXkgU2FqaXAgaW4gY29tbWl0CitjZTQ2MTk1YjU2YTkuKQorCis6ZnVuYzpgfmxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWdgIG5vdyBhY2NlcHRzIGEKKzpjbGFzczpgY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcmAgc3ViY2xhc3MgaW5zdGFuY2UgZm9yIHRoZSAqZm5hbWUqCitwYXJhbWV0ZXIuICBUaGlzIGZhY2lsaXRhdGVzIHVzaW5nIGEgY29uZmlndXJhdGlvbiBmaWxlIHdoZW4gbG9nZ2luZworY29uZmlndXJhdGlvbiBpcyBqdXN0IGEgcGFydCBvZiB0aGUgb3ZlcmFsbCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCBvciB3aGVyZQordGhlIGFwcGxpY2F0aW9uIG1vZGlmaWVzIHRoZSBjb25maWd1cmF0aW9uIGJlZm9yZSBwYXNzaW5nIGl0IHRvCis6ZnVuYzpgfmxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWdgLiAgKENvbnRyaWJ1dGVkIGJ5IFZpbmF5IFNhamlwIGluCis6aXNzdWU6YDE2MTEwYC4pCisKK0xvZ2dpbmcgY29uZmlndXJhdGlvbiBkYXRhIHJlY2VpdmVkIGZyb20gYSBzb2NrZXQgdmlhIHRoZQorOmZ1bmM6YGxvZ2dpbmcuY29uZmlnLmxpc3RlbmAgZnVuY3Rpb24gY2FuIG5vdyBiZSB2YWxpZGF0ZWQgYmVmb3JlIGJlaW5nCitwcm9jZXNzZWQgYnkgc3VwcGx5aW5nIGEgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uIGFzIHRoZSBhcmd1bWVudCB0byB0aGUgbmV3CisqdmVyaWZ5KiBrZXl3b3JkIGFyZ3VtZW50LiAoQ29udHJpYnV0ZWQgYnkgVmluYXkgU2FqaXAgaW4gOmlzc3VlOmAxNTQ1MmAuKQorCisKKy4uIF93aGF0c25ldy1tYXJzaGFsLTM6CisKK21hcnNoYWwKKy0tLS0tLS0KKworVGhlIGRlZmF1bHQgOm1vZDpgbWFyc2hhbGAgdmVyc2lvbiBoYXMgYmVlbiBidW1wZWQgdG8gMy4gIFRoZSBjb2RlIGltcGxlbWVudGluZwordGhlIG5ldyB2ZXJzaW9uIHJlc3RvcmVzIHRoZSBQeXRob24yIGJlaGF2aW9yIG9mIHJlY29yZGluZyBvbmx5IG9uZSBjb3B5IG9mCitpbnRlcm5lZCBzdHJpbmdzIGFuZCBwcmVzZXJ2aW5nIHRoZSBpbnRlcm5pbmcgb24gZGVzZXJpYWxpemF0aW9uLCBhbmQgZXh0ZW5kcwordGhpcyAib25lIGNvcHkiIGFiaWxpdHkgdG8gYW55IG9iamVjdCB0eXBlIChpbmNsdWRpbmcgaGFuZGxpbmcgcmVjdXJzaXZlCityZWZlcmVuY2VzKS4gIFRoaXMgcmVkdWNlcyBib3RoIHRoZSBzaXplIG9mIGBgLnB5Y2BgIGZpbGVzIGFuZCB0aGUgYW1vdW50IG9mCittZW1vcnkgYSBtb2R1bGUgb2NjdXBpZXMgaW4gbWVtb3J5IHdoZW4gaXQgaXMgbG9hZGVkIGZyb20gYSBgYC5weWNgYCAob3IKK2BgLnB5b2BgKSBmaWxlLiAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbiBpbiA6aXNzdWU6YDE2NDc1YCwKK3dpdGggYWRkaXRpb25hbCBzcGVlZHVwcyBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE5MjE5YC4pCisKKworbW1hcAorLS0tLQorCittbWFwIG9iamVjdHMgY2FuIG5vdyBiZSA6bW9kOmB3ZWFrcmVmYFwgZWQuICAoQ29udHJpYnV0ZWQgYnkgVmFsZXJpZSBMYW1iZXJ0IGluCis6aXNzdWU6YDQ4ODVgLikKKworCittdWx0aXByb2Nlc3NpbmcKKy0tLS0tLS0tLS0tLS0tLQorCisuLiBfd2hhdHNuZXctbXVsdGlwcm9jZXNzaW5nLW5vLWZvcms6CisKK09uIFVuaXggdHdvIG5ldyA6cmVmOmBzdGFydCBtZXRob2RzIDxtdWx0aXByb2Nlc3Npbmctc3RhcnQtbWV0aG9kcz5gLAorKGBgc3Bhd25gYCBhbmQgYGBmb3Jrc2VydmVyYGAsIGhhdmUgYmVlbiBhZGRlZCBmb3Igc3RhcnRpbmcgcHJvY2Vzc2VzIHVzaW5nCis6bW9kOmBtdWx0aXByb2Nlc3NpbmdgLiAgVGhlc2UgbWFrZSB0aGUgbWl4aW5nIG9mIHByb2Nlc3NlcyB3aXRoIHRocmVhZHMgbW9yZQorcm9idXN0LCBhbmQgdGhlIGBgc3Bhd25gYCBtZXRob2QgbWF0Y2hlcyB0aGUgc2VtYW50aWNzIHRoYXQgbXVsdGlwcm9jZXNzaW5nIGhhcworYWx3YXlzIHVzZWQgb24gV2luZG93cy4gIE5ldyBmdW5jdGlvbgorOmZ1bmM6YH5tdWx0aXByb2Nlc3NpbmcuZ2V0X2FsbF9zdGFydF9tZXRob2RzYCByZXBvcnRzIGFsbCBzdGFydCBtZXRob2RzCithdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtLCA6ZnVuYzpgfm11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kYCByZXBvcnRzCit0aGUgY3VycmVudCBzdGFydCBtZXRob2QsIGFuZCA6ZnVuYzpgfm11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kYCBzZXRzCit0aGUgc3RhcnQgbWV0aG9kLiAgKENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgT3Vka2VyayBpbiA6aXNzdWU6YDg3MTNgKS4KKworOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBhbHNvIG5vdyBoYXMgdGhlIGNvbmNlcHQgb2YgYSBgYGNvbnRleHRgYCwgd2hpY2gKK2RldGVybWluZXMgaG93IGNoaWxkIHByb2Nlc3NlcyBhcmUgY3JlYXRlZC4gIE5ldyBmdW5jdGlvbgorOmZ1bmM6YH5tdWx0aXByb2Nlc3NpbmcuZ2V0X2NvbnRleHRgIHJldHVybnMgYSBjb250ZXh0IHRoYXQgdXNlcyBhIHNwZWNpZmllZAorc3RhcnQgbWV0aG9kLiAgSXQgaGFzIHRoZSBzYW1lIEFQSSBhcyB0aGUgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBtb2R1bGUgaXRzZWxmLAorc28geW91IGNhbiB1c2UgaXQgdG8gY3JlYXRlIDpjbGFzczpgfm11bHRpcHJvY2Vzc2luZy5wb29sLlBvb2xgXCBzIGFuZCBvdGhlcgorb2JqZWN0cyB0aGF0IHdpbGwgb3BlcmF0ZSB3aXRoaW4gdGhhdCBjb250ZXh0LiAgVGhpcyBhbGxvd3MgYSBmcmFtZXdvcmsgYW5kIGFuCithcHBsaWNhdGlvbiBvciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNhbWUgYXBwbGljYXRpb24gdG8gdXNlIG11bHRpcHJvY2Vzc2luZword2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuICAoQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBPdWRrZXJrIGluCis6aXNzdWU6YDE4OTk5YC4pCisKK0V4Y2VwdCB3aGVuIHVzaW5nIHRoZSBvbGQgKmZvcmsqIHN0YXJ0IG1ldGhvZCwgY2hpbGQgcHJvY2Vzc2VzIG5vIGxvbmdlcgoraW5oZXJpdCB1bm5lZWRlZCBoYW5kbGVzL2ZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGVpciBwYXJlbnRzIChwYXJ0IG9mCis6aXNzdWU6YDg3MTNgKS4KKworOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBub3cgcmVsaWVzIG9uIDptb2Q6YHJ1bnB5YCAod2hpY2ggaW1wbGVtZW50cyB0aGUKK2BgLW1gYCBzd2l0Y2gpIHRvIGluaXRpYWxpc2UgYGBfX21haW5fX2BgIGFwcHJvcHJpYXRlbHkgaW4gY2hpbGQgcHJvY2Vzc2VzCit3aGVuIHVzaW5nIHRoZSBgYHNwYXduYGAgb3IgYGBmb3Jrc2VydmVyYGAgc3RhcnQgbWV0aG9kcy4gVGhpcyByZXNvbHZlcyBzb21lCitlZGdlIGNhc2VzIHdoZXJlIGNvbWJpbmluZyBtdWx0aXByb2Nlc3NpbmcsIHRoZSBgYC1tYGAgY29tbWFuZCBsaW5lIHN3aXRjaCwKK2FuZCBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIGNvdWxkIGNhdXNlIG9ic2N1cmUgZmFpbHVyZXMgaW4gY2hpbGQKK3Byb2Nlc3Nlcy4gKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDE5OTQ2YCkKKworCitvcGVyYXRvcgorLS0tLS0tLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+b3BlcmF0b3IubGVuZ3RoX2hpbnRgIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZQorc3BlY2lmaWNhdGlvbiBmb3IgaG93IHRoZSA6bWV0aDpgfm9iamVjdC5fX2xlbmd0aF9oaW50X19gIHNwZWNpYWwgbWV0aG9kIHNob3VsZAorYmUgdXNlZCwgYXMgcGFydCBvZiB0aGUgOnBlcDpgNDI0YCBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiB0aGlzIGxhbmd1YWdlCitmZWF0dXJlLiAgKENvbnRyaWJ1dGVkIGJ5IEFybWluIFJvbmFjaGVyIGluIDppc3N1ZTpgMTYxNDhgLikKKworVGhlcmUgaXMgbm93IGEgcHVyZS1weXRob24gdmVyc2lvbiBvZiB0aGUgOm1vZDpgb3BlcmF0b3JgIG1vZHVsZSBhdmFpbGFibGUgZm9yCityZWZlcmVuY2UgYW5kIGZvciB1c2UgYnkgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucyBvZiBQeXRob24uICAoQ29udHJpYnV0ZWQgYnkKK1phY2hhcnkgV2FyZSBpbiA6aXNzdWU6YDE2Njk0YC4pCisKKworb3MKKy0tCisKK1RoZXJlIGFyZSBuZXcgZnVuY3Rpb25zIHRvIGdldCBhbmQgc2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnCis8ZmRfaW5oZXJpdGFuY2U+YCBvZiBhIGZpbGUgZGVzY3JpcHRvciAoOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsCis6ZnVuYzpgb3Muc2V0X2luaGVyaXRhYmxlYCkgb3IgYSBXaW5kb3dzIGhhbmRsZQorKDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgKS4KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+b3MuY3B1X2NvdW50YCByZXBvcnRzIHRoZSBudW1iZXIgb2YgQ1BVcyBhdmFpbGFibGUgb24gdGhlCitwbGF0Zm9ybSBvbiB3aGljaCBQeXRob24gaXMgcnVubmluZyAob3IgYGBOb25lYGAgaWYgdGhlIGNvdW50IGNhbid0IGJlCitkZXRlcm1pbmVkKS4gIFRoZSA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudGAgZnVuY3Rpb24gaXMgbm93IGltcGxlbWVudGVkCitpbiB0ZXJtcyBvZiB0aGlzIGZ1bmN0aW9uKS4gIChDb250cmlidXRlZCBieSBUcmVudCBOZWxzb24sIFlvZ2VzaCBDaGF1ZGhhcmksCitWaWN0b3IgU3Rpbm5lciwgYW5kIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaSBpbiA6aXNzdWU6YDE3OTE0YC4pCisKKzpmdW5jOmBvcy5wYXRoLnNhbWVzdGF0YCBpcyBub3cgYXZhaWxhYmxlIG9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtIChhbmQgdGhlCis6ZnVuYzpgb3MucGF0aC5zYW1lZmlsZWAgaW1wbGVtZW50YXRpb24gaXMgbm93IHNoYXJlZCBiZXR3ZWVuIFVuaXggYW5kCitXaW5kb3dzKS4gIChDb250cmlidXRlZCBieSBCcmlhbiBDdXJ0aW4gaW4gOmlzc3VlOmAxMTkzOWAuKQorCis6ZnVuYzpgb3MucGF0aC5pc21vdW50YCBub3cgcmVjb2duaXplcyB2b2x1bWVzIG1vdW50ZWQgYmVsb3cgYSBkcml2ZQorcm9vdCBvbiBXaW5kb3dzLiAoQ29udHJpYnV0ZWQgYnkgVGltIEdvbGRlbiBpbiA6aXNzdWU6YDkwMzVgLikKKworOmZ1bmM6YG9zLm9wZW5gIHN1cHBvcnRzIHR3byBuZXcgZmxhZ3Mgb24gcGxhdGZvcm1zIHRoYXQgcHJvdmlkZSB0aGVtLAorOmRhdGE6YH5vcy5PX1BBVEhgICh1bi1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yKSwgYW5kIDpkYXRhOmB+b3MuT19UTVBGSUxFYAorKHVubmFtZWQgdGVtcG9yYXJ5IGZpbGU7IGFzIG9mIDMuNC4wIHJlbGVhc2UgYXZhaWxhYmxlIG9ubHkgb24gTGludXggc3lzdGVtcword2l0aCBhIGtlcm5lbCB2ZXJzaW9uIG9mIDMuMTEgb3IgbmV3ZXIgdGhhdCBoYXZlIHVhcGkgaGVhZGVycykuICAoQ29udHJpYnV0ZWQKK2J5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODY3M2AgYW5kIEJlbmphbWluIFBldGVyc29uLCByZXNwZWN0aXZlbHkuKQorCisKK3BkYgorLS0tCisKKzptb2Q6YHBkYmAgaGFzIGJlZW4gZW5oYW5jZWQgdG8gaGFuZGxlIGdlbmVyYXRvcnMsIDprZXl3b3JkOmB5aWVsZGAsIGFuZAorYGB5aWVsZCBmcm9tYGAgaW4gYSBtb3JlIHVzZWZ1bCBmYXNoaW9uLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGhlbHBmdWwgd2hlbgorZGVidWdnaW5nIDptb2Q6YGFzeW5jaW9gIGJhc2VkIHByb2dyYW1zLiAgKENvbnRyaWJ1dGVkIGJ5IEFuZHJldyBTdmV0bG92IGFuZAorWGF2aWVyIGRlIEdheWUgaW4gOmlzc3VlOmAxNjU5NmAuKQorCitUaGUgYGBwcmludGBgIGNvbW1hbmQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIDptb2Q6YHBkYmAsIHJlc3RvcmluZyBhY2Nlc3MgdG8gdGhlCitQeXRob24gOmZ1bmM6YHByaW50YCBmdW5jdGlvbiBmcm9tIHRoZSBwZGIgY29tbWFuZCBsaW5lLiAgUHl0aG9uMidzIGBgcGRiYGAgZGlkCitub3QgaGF2ZSBhIGBgcHJpbnRgYCBjb21tYW5kOyBpbnN0ZWFkLCBlbnRlcmluZyBgYHByaW50YGAgZXhlY3V0ZWQgdGhlCitgYHByaW50YGAgc3RhdGVtZW50LiAgSW4gUHl0aG9uMyBgYHByaW50YGAgd2FzIG1pc3Rha2VubHkgbWFkZSBhbiBhbGlhcyBmb3IgdGhlCitwZGIgOnBkYmNtZDpgcGAgY29tbWFuZC4gIGBgcGBgLCBob3dldmVyLCBwcmludHMgdGhlIGBgcmVwcmBgIG9mIGl0cyBhcmd1bWVudCwKK25vdCB0aGUgYGBzdHJgYCBsaWtlIHRoZSBQeXRob24yIGBgcHJpbnRgYCBjb21tYW5kIGRpZC4gIFdvcnNlLCB0aGUgUHl0aG9uMworYGBwZGIgcHJpbnRgYCBjb21tYW5kIHNoYWRvd2VkIHRoZSBQeXRob24zIGBgcHJpbnRgYCBmdW5jdGlvbiwgbWFraW5nIGl0CitpbmFjY2Vzc2libGUgYXQgdGhlIGBgcGRiYGAgcHJvbXB0LiAgKENvbnRyaWJ1dGVkIGJ5IENvbm5vciBPc2Jvcm4gaW4KKzppc3N1ZTpgMTg3NjRgLikKKworCisuLiBfd2hhdHNuZXctcHJvdG9jb2wtNDoKKworcGlja2xlCistLS0tLS0KKworOm1vZDpgcGlja2xlYCBub3cgc3VwcG9ydHMgKGJ1dCBkb2VzIG5vdCB1c2UgYnkgZGVmYXVsdCkgYSBuZXcgcGlja2xlIHByb3RvY29sLAorcHJvdG9jb2wgNC4gIFRoaXMgbmV3IHByb3RvY29sIGFkZHJlc3NlcyBhIG51bWJlciBvZiBpc3N1ZXMgdGhhdCB3ZXJlIHByZXNlbnQKK2luIHByZXZpb3VzIHByb3RvY29scywgc3VjaCBhcyB0aGUgc2VyaWFsaXphdGlvbiBvZiBuZXN0ZWQgY2xhc3NlcywgdmVyeSBsYXJnZQorc3RyaW5ncyBhbmQgY29udGFpbmVycywgYW5kIGNsYXNzZXMgd2hvc2UgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB0YWtlcwora2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gIEl0IGFsc28gcHJvdmlkZXMgc29tZSBlZmZpY2llbmN5IGltcHJvdmVtZW50cy4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDMxNTRgIC0tIFBpY2tsZSBwcm90b2NvbCA0CisgICAgICBQRVAgd3JpdHRlbiBieSBBbnRvaW5lIFBpdHJvdSBhbmQgaW1wbGVtZW50ZWQgYnkgQWxleGFuZHJlIFZhc3NhbG90dGkuCisKKworcGxpc3RsaWIKKy0tLS0tLS0tCisKKzptb2Q6YHBsaXN0bGliYCBub3cgaGFzIGFuIEFQSSB0aGF0IGlzIHNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIHBhdHRlcm4gZm9yCitzdGRsaWIgc2VyaWFsaXphdGlvbiBwcm90b2NvbHMsIHdpdGggbmV3IDpmdW5jOmB+cGxpc3RsaWIubG9hZGAsCis6ZnVuYzpgfnBsaXN0bGliLmR1bXBgLCA6ZnVuYzpgfnBsaXN0bGliLmxvYWRzYCwgYW5kIDpmdW5jOmB+cGxpc3RsaWIuZHVtcHNgCitmdW5jdGlvbnMuICAoVGhlIG9sZGVyIEFQSSBpcyBub3cgZGVwcmVjYXRlZC4pICBJbiBhZGRpdGlvbiB0byB0aGUgYWxyZWFkeQorc3VwcG9ydGVkIFhNTCBwbGlzdCBmb3JtYXQgKDpkYXRhOmB+cGxpc3RsaWIuRk1UX1hNTGApLCBpdCBhbHNvIG5vdyBzdXBwb3J0cwordGhlIGJpbmFyeSBwbGlzdCBmb3JtYXQgKDpkYXRhOmB+cGxpc3RsaWIuRk1UX0JJTkFSWWApLiAgKENvbnRyaWJ1dGVkIGJ5IFJvbmFsZAorT3Vzc29yZW4gYW5kIG90aGVycyBpbiA6aXNzdWU6YDE0NDU1YCkuCisKKworcG9wbGliCistLS0tLS0KKworVHdvIG5ldyBtZXRob2RzIGhhdmUgYmVlbiBhZGRlZCB0byA6bW9kOmBwb3BsaWJgOiA6bWV0aDpgfnBvcGxpYi5QT1AzLmNhcGFgLAord2hpY2ggcmV0dXJucyB0aGUgbGlzdCBvZiBjYXBhYmlsaXRpZXMgYWR2ZXJ0aXNlZCBieSB0aGUgUE9QIHNlcnZlciwgYW5kCis6bWV0aDpgfnBvcGxpYi5QT1AzLnN0bHNgLCB3aGljaCBzd2l0Y2hlcyBhIGNsZWFyLXRleHQgUE9QMyBzZXNzaW9uIGludG8gYW4KK2VuY3J5cHRlZCBQT1AzIHNlc3Npb24gaWYgdGhlIFBPUCBzZXJ2ZXIgc3VwcG9ydHMgaXQuICAoQ29udHJpYnV0ZWQgYnkgTG9yZW56bworQ2F0dWNjaSBpbiA6aXNzdWU6YDQ0NzNgLikKKworCitwcHJpbnQKKy0tLS0tLQorCitUaGUgOm1vZDpgcHByaW50YCBtb2R1bGUncyA6Y2xhc3M6YH5wcHJpbnQuUHJldHR5UHJpbnRlcmAgY2xhc3MgYW5kIGl0cworOmZ1bmM6YH5wcHJpbnQucGZvcm1hdGAsIGFuZCA6ZnVuYzpgfnBwcmludC5wcHJpbnRgIGZ1bmN0aW9ucyBoYXZlIGEgbmV3CitvcHRpb24sICpjb21wYWN0KiwgdGhhdCBjb250cm9scyBob3cgdGhlIG91dHB1dCBpcyBmb3JtYXR0ZWQuICBDdXJyZW50bHkKK3NldHRpbmcgKmNvbXBhY3QqIHRvIGBgVHJ1ZWBgIG1lYW5zIHRoYXQgc2VxdWVuY2VzIHdpbGwgYmUgcHJpbnRlZCB3aXRoIGFzIG1hbnkKK3NlcXVlbmNlIGVsZW1lbnRzIGFzIHdpbGwgZml0IHdpdGhpbiAqd2lkdGgqIG9uIGVhY2ggKGluZGVudGVkKSBsaW5lLgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxOTEzMmAuKQorCitMb25nIHN0cmluZ3MgYXJlIG5vdyB3cmFwcGVkIHVzaW5nIFB5dGhvbidzIG5vcm1hbCBsaW5lIGNvbnRpbnVhdGlvbgorc3ludGF4LiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTcxNTBgKS4KKworCitwdHkKKy0tLQorCis6ZnVuYzpgcHR5LnNwYXduYCBub3cgcmV0dXJucyB0aGUgc3RhdHVzIHZhbHVlIGZyb20gOmZ1bmM6YG9zLndhaXRwaWRgIG9uCit0aGUgY2hpbGQgcHJvY2VzcywgaW5zdGVhZCBvZiBgYE5vbmVgYC4gIChDb250cmlidXRlZCBieSBHcmVnb3J5IFAuIFNtaXRoLikKKworCitweWRvYworLS0tLS0KKworVGhlIDptb2Q6YHB5ZG9jYCBtb2R1bGUgaXMgbm93IGJhc2VkIGRpcmVjdGx5IG9uIHRoZSA6ZnVuYzpgaW5zcGVjdC5zaWduYXR1cmVgCitpbnRyb3NwZWN0aW9uIEFQSSwgYWxsb3dpbmcgaXQgdG8gcHJvdmlkZSBzaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGEgd2lkZXIKK3ZhcmlldHkgb2YgY2FsbGFibGUgb2JqZWN0cy4gVGhpcyBjaGFuZ2UgYWxzbyBtZWFucyB0aGF0IGBgX193cmFwcGVkX19gYAorYXR0cmlidXRlcyBhcmUgbm93IHRha2VuIGludG8gYWNjb3VudCB3aGVuIGRpc3BsYXlpbmcgaGVscCBpbmZvcm1hdGlvbgorKENvbnRyaWJ1dGVkIGJ5IExhcnJ5IEhhc3RpbmdzIGluIDppc3N1ZTpgMTk2NzRgKQorCitUaGUgOm1vZDpgcHlkb2NgIG1vZHVsZSBubyBsb25nZXIgZGlzcGxheXMgdGhlIGBgc2VsZmBgIHBhcmFtZXRlciBmb3IKK2FscmVhZHkgYm91bmQgbWV0aG9kcy4gSW5zdGVhZCwgaXQgYWltcyB0byBhbHdheXMgZGlzcGxheSB0aGUgZXhhY3QgY3VycmVudAorc2lnbmF0dXJlIG9mIHRoZSBzdXBwbGllZCBjYWxsYWJsZSAoQ29udHJpYnV0ZWQgYnkgTGFycnkgSGFzdGluZ3MgaW4KKzppc3N1ZTpgMjA3MTBgKQorCitJbiBhZGRpdGlvbiB0byB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlIHRvIDptb2Q6YHB5ZG9jYCBkaXJlY3RseSwKK2l0cyBoYW5kbGluZyBvZiBjdXN0b20gYGBfX2Rpcl9fYGAgbWV0aG9kcyBhbmQgdmFyaW91cyBkZXNjcmlwdG9yCitiZWhhdmlvdXJzIGhhcyBhbHNvIGJlZW4gaW1wcm92ZWQgc3Vic3RhbnRpYWxseSBieSB0aGUgdW5kZXJseWluZyBjaGFuZ2VzIGluCit0aGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlLgorCitBcyB0aGUgOmZ1bmM6YGhlbHBgIGJ1aWx0aW4gaXMgYmFzZWQgb24gOm1vZDpgcHlkb2NgLCB0aGUgYWJvdmUgY2hhbmdlcyBhbHNvCithZmZlY3QgdGhlIGJlaGF2aW91ciBvZiA6ZnVuYzpgaGVscGAuCisKKworcmUKKy0tCisKK05ldyA6ZnVuYzpgfnJlLmZ1bGxtYXRjaGAgZnVuY3Rpb24gYW5kIDptZXRoOmAucmVnZXguZnVsbG1hdGNoYCBtZXRob2QgYW5jaG9yCit0aGUgcGF0dGVybiBhdCBib3RoIGVuZHMgb2YgdGhlIHN0cmluZyB0byBtYXRjaC4gIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gYmUKK2V4cGxpY2l0IGFib3V0IHRoZSBnb2FsIG9mIHRoZSBtYXRjaCwgd2hpY2ggYXZvaWRzIGEgY2xhc3Mgb2Ygc3VidGxlIGJ1Z3Mgd2hlcmUKK2BgJGBgIGNoYXJhY3RlcnMgZ2V0IGxvc3QgZHVyaW5nIGNvZGUgY2hhbmdlcyBvciB0aGUgYWRkaXRpb24gb2YgYWx0ZXJuYXRpdmVzCit0byBhbiBleGlzdGluZyByZWd1bGFyIGV4cHJlc3Npb24uICAoQ29udHJpYnV0ZWQgYnkgTWF0dGhldyBCYXJuZXR0IGluCis6aXNzdWU6YDE2MjAzYC4pCisKK1RoZSByZXByIG9mIDpyZWY6YHJlZ2V4IG9iamVjdHMgPHJlLW9iamVjdHM+YCBub3cgaW5jbHVkZXMgdGhlIHBhdHRlcm4KK2FuZCB0aGUgZmxhZ3M7IHRoZSByZXByIG9mIDpyZWY6YG1hdGNoIG9iamVjdHMgPG1hdGNoLW9iamVjdHM+YCBub3cKK2luY2x1ZGVzIHRoZSBzdGFydCwgZW5kLCBhbmQgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQuICAoQ29udHJpYnV0ZWQKK2J5IEh1Z28gTG9wZXMgVGF2YXJlcyBhbmQgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDEzNTkyYCBhbmQKKzppc3N1ZTpgMTcwODdgLikKKworCityZXNvdXJjZQorLS0tLS0tLS0KKworTmV3IDpmdW5jOmB+cmVzb3VyY2UucHJsaW1pdGAgZnVuY3Rpb24sIGF2YWlsYWJsZSBvbiBMaW51eCBwbGF0Zm9ybXMgd2l0aCBhCitrZXJuZWwgdmVyc2lvbiBvZiAyLjYuMzYgb3IgbGF0ZXIgYW5kIGdsaWJjIG9mIDIuMTMgb3IgbGF0ZXIsIHByb3ZpZGVzIHRoZQorYWJpbGl0eSB0byBxdWVyeSBvciBzZXQgdGhlIHJlc291cmNlIGxpbWl0cyBmb3IgcHJvY2Vzc2VzIG90aGVyIHRoYW4gdGhlIG9uZQorbWFraW5nIHRoZSBjYWxsLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjU5NWAuKQorCitPbiBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjYuMzYgb3IgbGF0ZXIsIHRoZXJlIGFyZSB0aGVyZSBhcmUgYWxzbyBzb21lIG5ldworTGludXggc3BlY2lmaWMgY29uc3RhbnRzOiA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9NU0dRVUVVRWAsCis6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9OSUNFYCwgOmF0dHI6YH5yZXNvdXJjZS5STElNSVRfUlRQUklPYCwKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1JUVElNRWAsIGFuZCA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9TSUdQRU5ESU5HYC4KKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTkzMjRgLikKKworT24gRnJlZUJTRCB2ZXJzaW9uIDkgYW5kIGxhdGVyLCB0aGVyZSBzb21lIG5ldyBGcmVlQlNEIHNwZWNpZmljIGNvbnN0YW50czoKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1NCU0laRWAsIDphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1NXQVBgLCBhbmQKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX05QVFNgLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbgorOmlzc3VlOmAxOTM0M2AuKQorCisKK3NlbGVjdAorLS0tLS0tCisKKzpjbGFzczpgfnNlbGVjdC5lcG9sbGAgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgorV2hlbiB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgdGhlIDptZXRoOmB+c2VsZWN0LmVwb2xsLmNsb3NlYAorbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suICAoQ29udHJpYnV0ZWQKK2J5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNjQ4OGAuKQorCis6Y2xhc3M6YH5zZWxlY3QuZGV2cG9sbGAgb2JqZWN0cyBub3cgaGF2ZSA6bWV0aDpgfnNlbGVjdC5kZXZwb2xsLmZpbGVub2AgYW5kCis6bWV0aDpgfnNlbGVjdC5kZXZwb2xsLmNsb3NlYCBtZXRob2RzLCBhcyB3ZWxsIGFzIGEgbmV3IGF0dHJpYnV0ZQorOmF0dHI6YH5zZWxlY3QuZGV2cG9sbC5jbG9zZWRgLiAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluCis6aXNzdWU6YDE4Nzk0YC4pCisKKworc2hlbHZlCistLS0tLS0KKworOmNsYXNzOmB+c2hlbHZlLlNoZWxmYCBpbnN0YW5jZXMgbWF5IG5vdyBiZSB1c2VkIGluIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLAorYW5kIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbG9zZWQgYXQgdGhlIGVuZCBvZiB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrLgorKENvbnRyaWJ1dGVkIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kgaW4gOmlzc3VlOmAxMzg5NmAuKQorCisKK3NodXRpbAorLS0tLS0tCisKKzpmdW5jOmB+c2h1dGlsLmNvcHlmaWxlYCBub3cgcmFpc2VzIGEgc3BlY2lmaWMgOmV4YzpgfnNodXRpbC5FcnJvcmAgc3ViY2xhc3MsCis6ZXhjOmB+c2h1dGlsLlNhbWVGaWxlRXJyb3JgLCB3aGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZQorZmlsZSwgd2hpY2ggYWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIG9uIHRoaXMgc3BlY2lmaWMKK2Vycm9yLiAgKENvbnRyaWJ1dGVkIGJ5IEF0c3VvIElzaGltb3RvIGFuZCBIeW5layBTY2hsYXdhY2sgaW4KKzppc3N1ZTpgMTQ5MjcwNGAuKQorCisKK3NtdHBkCistLS0tLQorCitUaGUgOmNsYXNzOmB+c210cGQuU01UUFNlcnZlcmAgYW5kIDpjbGFzczpgfnNtdHBkLlNNVFBDaGFubmVsYCBjbGFzc2VzIG5vdworYWNjZXB0IGEgKm1hcCoga2V5d29yZCBhcmd1bWVudCB3aGljaCwgaWYgc3BlY2lmaWVkLCBpcyBwYXNzZWQgaW4gdG8KKzpjbGFzczpgYXN5bmNoYXQuYXN5bmNfY2hhdGAgYXMgaXRzICptYXAqIGFyZ3VtZW50LiAgVGhpcyBhbGxvd3MgYW4gYXBwbGljYXRpb24KK3RvIGF2b2lkIGFmZmVjdGluZyB0aGUgZ2xvYmFsIHNvY2tldCBtYXAuICAoQ29udHJpYnV0ZWQgYnkgVmluYXkgU2FqaXAgaW4KKzppc3N1ZTpgMTE5NTlgLikKKworCitzbXRwbGliCistLS0tLS0tCisKKzpleGM6YH5zbXRwbGliLlNNVFBFeGNlcHRpb25gIGlzIG5vdyBhIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgLCB3aGljaCBhbGxvd3MKK2JvdGggc29ja2V0IGxldmVsIGVycm9ycyBhbmQgU01UUCBwcm90b2NvbCBsZXZlbCBlcnJvcnMgdG8gYmUgY2F1Z2h0IGluIG9uZQordHJ5L2V4Y2VwdCBzdGF0ZW1lbnQgYnkgY29kZSB0aGF0IG9ubHkgY2FyZXMgd2hldGhlciBvciBub3QgYW4gZXJyb3Igb2NjdXJyZWQuCisoQ29udHJpYnV0ZWQgYnkgTmVkIEphY2tzb24gTG92ZWx5IGluIDppc3N1ZTpgMjExOGApLgorCisKK3NvY2tldAorLS0tLS0tCisKK1RoZSBzb2NrZXQgbW9kdWxlIG5vdyBzdXBwb3J0cyB0aGUgOmRhdGE6YH5zb2NrZXQuQ0FOX0JDTWAgcHJvdG9jb2wgb24KK3BsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQuICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gVGhvcm5lIGluIDppc3N1ZTpgMTUzNTlgLikKKworU29ja2V0IG9iamVjdHMgaGF2ZSBuZXcgbWV0aG9kcyB0byBnZXQgb3Igc2V0IHRoZWlyIDpyZWY6YGluaGVyaXRhYmxlIGZsYWcKKzxmZF9pbmhlcml0YW5jZT5gLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0X2luaGVyaXRhYmxlYCBhbmQKKzptZXRoOmB+c29ja2V0LnNvY2tldC5zZXRfaW5oZXJpdGFibGVgLgorCitUaGUgYGBzb2NrZXQuQUZfKmBgIGFuZCBgYHNvY2tldC5TT0NLXypgYCBjb25zdGFudHMgYXJlIG5vdyBlbnVtZXJhdGlvbiB2YWx1ZXMKK3VzaW5nIHRoZSBuZXcgOm1vZDpgZW51bWAgbW9kdWxlLiAgVGhpcyBhbGxvd3MgbWVhbmluZ2Z1bCBuYW1lcyB0byBiZSBwcmludGVkCitkdXJpbmcgZGVidWdnaW5nLCBpbnN0ZWFkIG9mIGludGVnZXIgIm1hZ2ljIG51bWJlcnMiLgorCitUaGUgOmRhdGE6YH5zb2NrZXQuQUZfTElOS2AgY29uc3RhbnQgaXMgbm93IGF2YWlsYWJsZSBvbiBCU0QgYW5kIE9TWC4KKworOmZ1bmM6YH5zb2NrZXQuaW5ldF9wdG9uYCBhbmQgOmZ1bmM6YH5zb2NrZXQuaW5ldF9udG9wYCBhcmUgbm93IHN1cHBvcnRlZAorb24gV2luZG93cy4gIChDb250cmlidXRlZCBieSBBdHN1byBJc2hpbW90byBpbiA6aXNzdWU6YDcxNzFgLikKKworCitzcWxpdGUzCistLS0tLS0tCisKK0EgbmV3IGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSA6ZnVuYzpgfnNxbGl0ZTMuY29ubmVjdGAgZnVuY3Rpb24sICp1cmkqLCBjYW4gYmUKK3VzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgKmRhdGFiYXNlKiBwYXJhbWV0ZXIgaXMgYSBgYHVyaWBgIChzZWUgdGhlIGBTUUxpdGUKK1VSSSBkb2N1bWVudGF0aW9uIDxodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdXJpLmh0bWw+YF8pLiAgKENvbnRyaWJ1dGVkIGJ5IHBvcSBpbgorOmlzc3VlOmAxMzc3M2AuKQorCisKK3NzbAorLS0tCisKKy4uIF93aGF0c25ldy10bHMtMTEtMTI6CisKKzpkYXRhOmB+c3NsLlBST1RPQ09MX1RMU3YxXzFgIGFuZCA6ZGF0YTpgfnNzbC5QUk9UT0NPTF9UTFN2MV8yYCAoVExTdjEuMSBhbmQKK1RMU3YxLjIgc3VwcG9ydCkgaGF2ZSBiZWVuIGFkZGVkOyBzdXBwb3J0IGZvciB0aGVzZSBwcm90b2NvbHMgaXMgb25seSBhdmFpbGFibGUgaWYKK1B5dGhvbiBpcyBsaW5rZWQgd2l0aCBPcGVuU1NMIDEuMC4xIG9yIGxhdGVyLiAgKENvbnRyaWJ1dGVkIGJ5IE1pY2hlbGUgT3Jyw7kgYW5kCitBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE2NjkyYCkKKworLi4gX3doYXRzbmV3MzQtc3NsY29udGV4dDoKKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+c3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvCitvYnRhaW4gYW4gOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIHdob3NlIHNldHRpbmdzIGFyZSBpbnRlbmRlZCB0byBiZSBhCityZWFzb25hYmxlIGJhbGFuY2UgYmV0d2VlbiBjb21wYXRpYmlsaXR5IGFuZCBzZWN1cml0eS4gIFRoZXNlIHNldHRpbmdzIGFyZQorbW9yZSBzdHJpbmdlbnQgdGhhbiB0aGUgZGVmYXVsdHMgcHJvdmlkZWQgYnkgdGhlIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YAorY29uc3RydWN0b3IsIGFuZCBtYXkgYmUgYWRqdXN0ZWQgaW4gdGhlIGZ1dHVyZSwgd2l0aG91dCBwcmlvciBkZXByZWNhdGlvbiwgaWYKK2Jlc3QtcHJhY3RpY2Ugc2VjdXJpdHkgcmVxdWlyZW1lbnRzIGNoYW5nZS4gIFRoZSBuZXcgcmVjb21tZW5kZWQgYmVzdAorcHJhY3RpY2UgZm9yIHVzaW5nIHN0ZGxpYiBsaWJyYXJpZXMgdGhhdCBzdXBwb3J0IFNTTCBpcyB0byB1c2UKKzpmdW5jOmB+c3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIHRvIG9idGFpbiBhbiA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAKK29iamVjdCwgbW9kaWZ5IGl0IGlmIG5lZWRlZCwgYW5kIHRoZW4gcGFzcyBpdCBhcyB0aGUgKmNvbnRleHQqIGFyZ3VtZW50CitvZiB0aGUgYXBwcm9wcmlhdGUgc3RkbGliIEFQSS4gIChDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzCitpbiA6aXNzdWU6YDE5Njg5YC4pCisKKzpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBtZXRob2QgOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgCithY2NlcHRzIGEgbmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjYWRhdGEqLCB3aGljaCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIFBFTSBvcgorREVSIGVuY29kZWQgY2VydGlmaWNhdGVzIGRpcmVjdGx5IHZpYSBzdHJpbmdzIG9yIGJ5dGVzLCByZXNwZWN0aXZlbHkuCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE4MTM4YC4pCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgfnNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNgIHJldHVybnMKK2EgbmFtZWQgdHVwbGUgb2YgdGhlIHBhdGhzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB0aGUKKzptZXRoOmB+c3NsLlNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYCBtZXRob2QgdXNlcyB0byBzZXQKK09wZW5TU0wncyBkZWZhdWx0IGBgY2FmaWxlYGAgYW5kIGBgY2FwYXRoYGAuICBUaGlzIGNhbiBiZSBhbiBhaWQgaW4KK2RlYnVnZ2luZyBkZWZhdWx0IHZlcmlmaWNhdGlvbiBpc3N1ZXMuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcworaW4gOmlzc3VlOmAxODE0M2AuKQorCis6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgaGFzIGEgbmV3IG1ldGhvZCwKKzptZXRoOmB+c3NsLlNTTENvbnRleHQuY2VydF9zdG9yZV9zdGF0c2AsIHRoYXQgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIGxvYWRlZAorYGBYLjUwOWBgIGNlcnRzLCBgYFguNTA5IENBYGAgY2VydHMsIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIChgYGNybGBgXAorcyksIGFzIHdlbGwgYXMgYSA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmdldF9jYV9jZXJ0c2AgbWV0aG9kIHRoYXQgcmV0dXJucyBhCitsaXN0IG9mIHRoZSBsb2FkZWQgYGBDQWBgIGNlcnRpZmljYXRlcy4gIChDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluCis6aXNzdWU6YDE4MTQ3YC4pCisKK0lmIE9wZW5TU0wgMC45Ljggb3IgbGF0ZXIgaXMgYXZhaWxhYmxlLCA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgaGFzIGFuIG5ldworYXR0cmlidXRlIDphdHRyOmB+c3NsLlNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlCitjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gcHJvY2VzcyBieSBzZXR0aW5nIGl0IHRvIHNvbWUgY29tYmluYXRpb24gb2YgdGhlIG5ldworY29uc3RhbnRzIDpkYXRhOmB+c3NsLlZFUklGWV9ERUZBVUxUYCwgOmRhdGE6YH5zc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGYCwKKzpkYXRhOmB+c3NsLlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU5gLCBvciA6ZGF0YTpgfnNzbC5WRVJJRllfWDUwOV9TVFJJQ1RgLgorT3BlblNTTCBkb2VzIG5vdCBkbyBhbnkgQ1JMIHZlcmlmaWNhdGlvbiBieSBkZWZhdWx0LiAgKENvbnRyaWJ1dGVkIGJ5CitDaHJpc3RpZW4gSGVpbWVzIGluIDppc3N1ZTpgODgxM2AuKQorCitOZXcgOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIG1ldGhvZCA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c2AKK2xvYWRzIGEgc2V0IG9mIGRlZmF1bHQgImNlcnRpZmljYXRlIGF1dGhvcml0eSIgKENBKSBjZXJ0aWZpY2F0ZXMgZnJvbSBkZWZhdWx0Citsb2NhdGlvbnMsIHdoaWNoIHZhcnkgYWNjb3JkaW5nIHRvIHRoZSBwbGF0Zm9ybS4gIEl0IGNhbiBiZSB1c2VkIHRvIGxvYWQgYm90aAorVExTIHdlYiBzZXJ2ZXIgYXV0aGVudGljYXRpb24gY2VydGlmaWNhdGVzCisoYGBwdXJwb3NlPWBgOmRhdGE6YH5zc2wuUHVycG9zZS5TRVJWRVJfQVVUSGApIGZvciBhIGNsaWVudCB0byB1c2UgdG8gdmVyaWZ5IGEKK3NlcnZlciwgYW5kIGNlcnRpZmljYXRlcyBmb3IgYSBzZXJ2ZXIgdG8gdXNlIGluIHZlcmlmeWluZyBjbGllbnQgY2VydGlmaWNhdGVzCisoYGBwdXJwb3NlPWBgOmRhdGE6YH5zc2wuUHVycG9zZS5DTElFTlRfQVVUSGApLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbgorSGVpbWVzIGluIDppc3N1ZTpgMTkyOTJgLikKKworLi4gX3doYXRzbmV3MzQtd2luLWNlcnQtc3RvcmU6CisKK1R3byBuZXcgd2luZG93cy1vbmx5IGZ1bmN0aW9ucywgOmZ1bmM6YH5zc2wuZW51bV9jZXJ0aWZpY2F0ZXNgIGFuZAorOmZ1bmM6YH5zc2wuZW51bV9jcmxzYCBwcm92aWRlIHRoZSBhYmlsaXR5IHRvIHJldHJpZXZlIGNlcnRpZmljYXRlcywKK2NlcnRpZmljYXRlIGluZm9ybWF0aW9uLCBhbmQgQ1JMcyBmcm9tIHRoZSBXaW5kb3dzIGNlcnQgc3RvcmUuICAoQ29udHJpYnV0ZWQKK2J5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNzEzNGAuKQorCisuLiBfd2hhdHNuZXczNC1zbmk6CisKK1N1cHBvcnQgZm9yIHNlcnZlci1zaWRlIFNOSSAoU2VydmVyIE5hbWUgSW5kaWNhdGlvbikgdXNpbmcgdGhlIG5ldworOm1ldGg6YHNzbC5TU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYCBtZXRob2QuCisoQ29udHJpYnV0ZWQgYnkgRGFuaWVsIEJsYWNrIGluIDppc3N1ZTpgODEwOWAuKQorCitUaGUgZGljdGlvbmFyeSByZXR1cm5lZCBieSA6bWV0aDpgLlNTTFNvY2tldC5nZXRwZWVyY2VydGAgY29udGFpbnMgYWRkaXRpb25hbAorYGBYNTA5djNgYCBleHRlbnNpb24gaXRlbXM6IGBgY3JsRGlzdHJpYnV0aW9uUG9pbnRzYGAsIGBgY2FsSXNzdWVyc2BgLCBhbmQKK2BgT0NTUGBgIFVSSXMuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE4Mzc5YC4pCisKKworc3RhdAorLS0tLQorCitUaGUgOm1vZDpgc3RhdGAgbW9kdWxlIGlzIG5vdyBiYWNrZWQgYnkgYSBDIGltcGxlbWVudGF0aW9uIGluIDptb2Q6YF9zdGF0YC4gQSBDCitpbXBsZW1lbnRhdGlvbiBpcyByZXF1aXJlZCBhcyBtb3N0IG9mIHRoZSB2YWx1ZXMgYXJlbid0IHN0YW5kYXJkaXplZCBhbmQKK2FyZSBwbGF0Zm9ybS1kZXBlbmRlbnQuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDExMDE2YC4pCisKK1RoZSBtb2R1bGUgc3VwcG9ydHMgbmV3IDptb2Q6YH5zdGF0LlNUX01PREVgIGZsYWdzLCA6bW9kOmB+c3RhdC5TX0lGRE9PUmAsCis6YXR0cjpgfnN0YXQuU19JRlBPUlRgLCBhbmQgOmF0dHI6YH5zdGF0LlNfSUZXSFRgLiAgKENvbnRyaWJ1dGVkIGJ5CitDaHJpc3RpYW4gSGllbWVzIGluIDppc3N1ZTpgMTEwMTZgLikKKworCitzdHJ1Y3QKKy0tLS0tLQorCitOZXcgZnVuY3Rpb24gOm1vZDpgfnN0cnVjdC5pdGVyX3VucGFja2AgYW5kIGEgbmV3Cis6bWV0aDpgc3RydWN0LlN0cnVjdC5pdGVyX3VucGFja2AgbWV0aG9kIG9uIGNvbXBpbGVkIGZvcm1hdHMgcHJvdmlkZSBzdHJlYW1lZAordW5wYWNraW5nIG9mIGEgYnVmZmVyIGNvbnRhaW5pbmcgcmVwZWF0ZWQgaW5zdGFuY2VzIG9mIGEgZ2l2ZW4gZm9ybWF0IG9mIGRhdGEuCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNzgwNGAuKQorCisKK3N1YnByb2Nlc3MKKy0tLS0tLS0tLS0KKworOmZ1bmM6YH5zdWJwcm9jZXNzLmNoZWNrX291dHB1dGAgbm93IGFjY2VwdHMgYW4gKmlucHV0KiBhcmd1bWVudCB0aGF0IGNhbgorYmUgdXNlZCB0byBwcm92aWRlIHRoZSBjb250ZW50cyBvZiBgYHN0ZGluYGAgZm9yIHRoZSBjb21tYW5kIHRoYXQgaXMgcnVuLgorKENvbnRyaWJ1dGVkIGJ5IFphY2sgV2VpbmJlcmcgaW4gOmlzc3VlOmAxNjYyNGAuKQorCis6ZnVuYzpgfnN1YnByb2Nlc3MuZ2V0c3RhdHVzYCBhbmQgOmZ1bmM6YH5zdWJwcm9jZXNzLmdldHN0YXR1c291dHB1dGAgbm93Cit3b3JrIG9uIFdpbmRvd3MuICBUaGlzIGNoYW5nZSB3YXMgYWN0dWFsbHkgaW5hZHZlcnRlbnRseSBtYWRlIGluIDMuMy40LgorKENvbnRyaWJ1dGVkIGJ5IFRpbSBHb2xkZW4gaW4gOmlzc3VlOmAxMDE5N2AuKQorCisKK3N1bmF1CistLS0tLQorCitUaGUgOm1ldGg6YH5zdW5hdS5nZXRwYXJhbXNgIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4gYQorcGxhaW4gdHVwbGUuICAoQ29udHJpYnV0ZWQgYnkgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTg5MDFgLikKKworOm1ldGg6YHN1bmF1Lm9wZW5gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sOiB3aGVuIHVzZWQgaW4gYQorOmtleXdvcmQ6YHdpdGhgIGJsb2NrLCB0aGUgYGBjbG9zZWBgIG1ldGhvZCBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUKK2NhbGxlZCBhdXRvbWF0aWNhbGx5IGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EKK2luIDppc3N1ZTpgMTg4NzhgLikKKworOm1ldGg6YC5BVV93cml0ZS5zZXRzYW1wd2lkdGhgIG5vdyBzdXBwb3J0cyAyNCBiaXQgc2FtcGxlcywgdGh1cyBhZGRpbmcKK3N1cHBvcnQgZm9yIHdyaXRpbmcgMjQgc2FtcGxlIHVzaW5nIHRoZSBtb2R1bGUuICAoQ29udHJpYnV0ZWQgYnkKK1NlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxOTI2MWAuKQorCitUaGUgOm1ldGg6YH5zdW5hdS5BVV93cml0ZS53cml0ZWZyYW1lc3Jhd2AgYW5kCis6bWV0aDpgfnN1bmF1LkFVX3dyaXRlLndyaXRlZnJhbWVzYCBtZXRob2RzIG5vdyBhY2NlcHQgYW55IDp0ZXJtOmBieXRlcy1saWtlCitvYmplY3RgLiAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmA4MzExYC4pCisKKworc3lzCistLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzYCByZXR1cm5zIHRoZSBjdXJyZW50IG51bWJlciBvZgorYmxvY2tzIGFsbG9jYXRlZCBieSB0aGUgaW50ZXJwcmV0ZXIuICAoSW4gQ1B5dGhvbiB3aXRoIHRoZSBkZWZhdWx0CitgYC0td2l0aC1weW1hbGxvY2BgIHNldHRpbmcsIHRoaXMgaXMgYWxsb2NhdGlvbnMgbWFkZSB0aHJvdWdoIHRoZQorOmM6ZnVuYzpgUHlPYmplY3RfTWFsbG9jYCBBUEkuKSAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciB0cmFja2luZyBtZW1vcnkgbGVha3MsCitlc3BlY2lhbGx5IGlmIGF1dG9tYXRlZCB2aWEgYSB0ZXN0IHN1aXRlLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91CitpbiA6aXNzdWU6YDEzMzkwYC4pCisKK1doZW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlciBzdGFydHMgaW4gOnJlZjpgaW50ZXJhY3RpdmUgbW9kZQorPHR1dC1pbnRlcmFjdGl2ZT5gLCBpdCBjaGVja3MgZm9yIGFuIDpkYXRhOmB+c3lzLl9faW50ZXJhY3RpdmVob29rX19gIGF0dHJpYnV0ZQorb24gdGhlIDptb2Q6YHN5c2AgbW9kdWxlLiAgSWYgdGhlIGF0dHJpYnV0ZSBleGlzdHMsIGl0cyB2YWx1ZSBpcyBjYWxsZWQgd2l0aCBubworYXJndW1lbnRzIGp1c3QgYmVmb3JlIGludGVyYWN0aXZlIG1vZGUgaXMgc3RhcnRlZC4gIFRoZSBjaGVjayBpcyBtYWRlIGFmdGVyIHRoZQorOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZSBpcyByZWFkLCBzbyBpdCBjYW4gYmUgc2V0IHRoZXJlLiAgVGhlIDptb2Q6YHNpdGVgCittb2R1bGUgOnJlZjpgc2V0cyBpdCA8cmxjb21wbGV0ZXItY29uZmlnPmAgdG8gYSBmdW5jdGlvbiB0aGF0IGVuYWJsZXMgdGFiCitjb21wbGV0aW9uIGFuZCBoaXN0b3J5IHNhdmluZyAoaW4gOmZpbGU6YH4vLnB5dGhvbi1oaXN0b3J5YCkgaWYgdGhlIHBsYXRmb3JtCitzdXBwb3J0cyA6bW9kOmByZWFkbGluZWAuICBJZiB5b3UgZG8gbm90IHdhbnQgdGhpcyAobmV3KSBiZWhhdmlvciwgeW91IGNhbgorb3ZlcnJpZGUgaXQgaW4gOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAsIDptb2Q6YHNpdGVjdXN0b21pemVgLCBvcgorOm1vZDpgdXNlcmN1c3RvbWl6ZWAgYnkgZGVsZXRpbmcgdGhpcyBhdHRyaWJ1dGUgZnJvbSA6bW9kOmBzeXNgIChvciBzZXR0aW5nIGl0Cit0byBzb21lIG90aGVyIGNhbGxhYmxlKS4gIChDb250cmlidXRlZCBieSDDiXJpYyBBcmF1am8gYW5kIEFudG9pbmUgUGl0cm91IGluCis6aXNzdWU6YDU4NDVgLikKKworCit0YXJmaWxlCistLS0tLS0tCisKK1RoZSA6bW9kOmB0YXJmaWxlYCBtb2R1bGUgbm93IHN1cHBvcnRzIGEgc2ltcGxlIDpyZWY6YHRhcmZpbGUtY29tbWFuZGxpbmVgIHdoZW4KK2NhbGxlZCBhcyBhIHNjcmlwdCBkaXJlY3RseSBvciB2aWEgYGAtbWBgLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW5kCitleHRyYWN0IHRhcmZpbGUgYXJjaGl2ZXMuICAoQ29udHJpYnV0ZWQgYnkgQmVya2VyIFBla3NhZyBpbiA6aXNzdWU6YDEzNDc3YC4pCisKKwordGV4dHdyYXAKKy0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH50ZXh0d3JhcC5UZXh0V3JhcHBlcmAgY2xhc3MgaGFzIHR3byBuZXcgYXR0cmlidXRlcy9jb25zdHJ1Y3RvcgorYXJndW1lbnRzOiA6YXR0cjpgfnRleHR3cmFwLlRleHRXcmFwcGVyLm1heF9saW5lc2AsIHdoaWNoIGxpbWl0cyB0aGUgbnVtYmVyIG9mCitsaW5lcyBpbiB0aGUgb3V0cHV0LCBhbmQgOmF0dHI6YH50ZXh0d3JhcC5UZXh0V3JhcHBlci5wbGFjZWhvbGRlcmAsIHdoaWNoIGlzIGEKK3N0cmluZyB0aGF0IHdpbGwgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIG91dHB1dCBpZiBpdCBoYXMgYmVlbiB0cnVuY2F0ZWQKK2JlY2F1c2Ugb2YgKm1heF9saW5lcyouICBCdWlsZGluZyBvbiB0aGVzZSBjYXBhYmlsaXRpZXMsIGEgbmV3IGNvbnZlbmllbmNlCitmdW5jdGlvbiA6ZnVuYzpgfnRleHR3cmFwLnNob3J0ZW5gIGNvbGxhcHNlcyBhbGwgb2YgdGhlIHdoaXRlc3BhY2UgaW4gdGhlIGlucHV0Cit0byBzaW5nbGUgc3BhY2VzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBsaW5lIG9mIGEgZ2l2ZW4gKndpZHRoKiB0aGF0IGVuZHMgd2l0aAordGhlICpwbGFjZWhvbGRlciogKGJ5IGRlZmF1bHQsIGBgWy4uLl1gYCkuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgYW5kCitTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTg1ODVgIGFuZCA6aXNzdWU6YDE4NzI1YC4pCisKKwordGhyZWFkaW5nCistLS0tLS0tLS0KKworVGhlIDpjbGFzczpgfnRocmVhZGluZy5UaHJlYWRgIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG1haW4gdGhyZWFkIGNhbiBiZQorb2J0YWluZWQgZnJvbSB0aGUgbmV3IDpmdW5jOmB+dGhyZWFkaW5nLm1haW5fdGhyZWFkYCBmdW5jdGlvbi4gIEluIG5vcm1hbAorY29uZGl0aW9ucyB0aGlzIHdpbGwgYmUgdGhlIHRocmVhZCBmcm9tIHdoaWNoIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FzCitzdGFydGVkLiAgKENvbnRyaWJ1dGVkIGJ5IEFuZHJldyBTdmV0bG92IGluIDppc3N1ZTpgMTg4ODJgLikKKworCit0cmFjZWJhY2sKKy0tLS0tLS0tLQorCitBIG5ldyA6ZnVuYzpgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lc2AgZnVuY3Rpb24gdGFrZXMgYSB0cmFjZWJhY2sgb2JqZWN0CithbmQgY2xlYXJzIHRoZSBsb2NhbCB2YXJpYWJsZXMgaW4gYWxsIG9mIHRoZSBmcmFtZXMgaXQgcmVmZXJlbmNlcywKK3JlZHVjaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IGNvbnN1bWVkLiAgKENvbnRyaWJ1dGVkIGJ5IEFuZHJldyBLdWNobGluZyBpbgorOmlzc3VlOmAxNTY1NTI1YCkuCisKKwordHlwZXMKKy0tLS0tCisKK0EgbmV3IDpmdW5jOmB+dHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlYCBkZXNjcmlwdG9yIHByb3ZpZGVzIGEgd2F5IHRvIGRlZmluZQorYW4gYXR0cmlidXRlIHRoYXQgYWN0cyBub3JtYWxseSB3aGVuIGxvb2tlZCB1cCB0aHJvdWdoIGFuIGluc3RhbmNlIG9iamVjdCwgYnV0Cit3aGljaCBpcyByb3V0ZWQgdG8gdGhlICpjbGFzcyogYGBfX2dldGF0dHJfX2BgIHdoZW4gbG9va2VkIHVwIHRocm91Z2ggdGhlCitjbGFzcy4gIFRoaXMgYWxsb3dzIG9uZSB0byBoYXZlIHByb3BlcnRpZXMgYWN0aXZlIG9uIGEgY2xhc3MsIGFuZCBoYXZlIHZpcnR1YWwKK2F0dHJpYnV0ZXMgb24gdGhlIGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSAoc2VlIDptb2Q6YEVudW1gIGZvciBhbiBleGFtcGxlKS4KKyhDb250cmlidXRlZCBieSBFdGhhbiBGdXJtYW4gaW4gOmlzc3VlOmAxOTAzMGAuKQorCisKK3VybGxpYgorLS0tLS0tCisKKzptb2Q6YHVybGxpYi5yZXF1ZXN0YCBub3cgc3VwcG9ydHMgYGBkYXRhOmBgIFVSTHMgdmlhIHRoZQorOmNsYXNzOmB+dXJsbGliLnJlcXVlc3QuRGF0YUhhbmRsZXJgIGNsYXNzLiAgKENvbnRyaWJ1dGVkIGJ5IE1hdGhpYXMgUGFuemVuYsO2Y2sKK2luIDppc3N1ZTpgMTY0MjNgLikKKworVGhlIGh0dHAgbWV0aG9kIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGEgOmNsYXNzOmB+dXJsbGliLnJlcXVlc3QuUmVxdWVzdGAgY2xhc3MKK2NhbiBub3cgYmUgc3BlY2lmaWVkIGJ5IHNldHRpbmcgYSA6Y2xhc3M6YH51cmxsaWIucmVxdWVzdC5SZXF1ZXN0Lm1ldGhvZGAKK2NsYXNzIGF0dHJpYnV0ZSBvbiB0aGUgc3ViY2xhc3MuIChDb250cmlidXRlZCBieSBKYXNvbiBSIENvb21icyBpbgorOmlzc3VlOmAxODk3OGAuKQorCis6Y2xhc3M6YH51cmxsaWIucmVxdWVzdC5SZXF1ZXN0YCBvYmplY3RzIGFyZSBub3cgcmV1c2FibGU6IGlmIHRoZQorOmF0dHI6YH51cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmZ1bGxfdXJsYCBvciA6YXR0cjpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuZGF0YWAKK2F0dHJpYnV0ZXMgYXJlIG1vZGlmaWVkLCBhbGwgcmVsZXZhbnQgaW50ZXJuYWwgcHJvcGVydGllcyBhcmUgdXBkYXRlZC4gIFRoaXMKK21lYW5zLCBmb3IgZXhhbXBsZSwgdGhhdCBpdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIHRoZSBzYW1lCis6Y2xhc3M6YH51cmxsaWIucmVxdWVzdC5SZXF1ZXN0YCBvYmplY3QgaW4gbW9yZSB0aGFuIG9uZQorOm1ldGg6YC5PcGVuZXJEaXJlY3Rvci5vcGVuYCBjYWxsIHdpdGggZGlmZmVyZW50ICpkYXRhKiBhcmd1bWVudHMsIG9yIHRvCittb2RpZnkgYSA6Y2xhc3M6YH51cmxsaWIucmVxdWVzdC5SZXF1ZXN0YFwgJ3MgYGB1cmxgYCByYXRoZXIgdGhhbiByZWNvbXB1dGluZyBpdAorZnJvbSBzY3JhdGNoLiAgVGhlcmUgaXMgYWxzbyBhIG5ldworOm1ldGg6YH51cmxsaWIucmVxdWVzdC5SZXF1ZXN0LnJlbW92ZV9oZWFkZXJgIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbW92ZQoraGVhZGVycyBmcm9tIGEgOmNsYXNzOmB+dXJsbGliLnJlcXVlc3QuUmVxdWVzdGAuICAoQ29udHJpYnV0ZWQgYnkgQWxleGV5CitLYWNoYXlldiBpbiA6aXNzdWU6YDE2NDY0YCwgRGFuaWVsIFdvem5pYWsgaW4gOmlzc3VlOmAxNzQ4NWAsIGFuZCBEYW1pZW4gQnJlY2h0CithbmQgU2VudGhpbCBLdW1hcmFuIGluIDppc3N1ZTpgMTcyNzJgLikKKworOmNsYXNzOmB+dXJsbGliLmVycm9yLkhUVFBFcnJvcmAgb2JqZWN0cyBub3cgaGF2ZSBhCis6YXR0cjpgfnVybGxpYi5lcnJvci5IVFRQRXJyb3IuaGVhZGVyc2AgYXR0cmlidXRlIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZQorSFRUUCByZXNwb25zZSBoZWFkZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IuICAoQ29udHJpYnV0ZWQgYnkKK0JlcmtlciBQZWtzYWcgaW4gOmlzc3VlOmAxNTcwMWAuKQorCisKK3VuaXR0ZXN0CistLS0tLS0tLQorCitUaGUgOmNsYXNzOmB+dW5pdHRlc3QuVGVzdENhc2VgIGNsYXNzIGhhcyBhIG5ldyBtZXRob2QsCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLnN1YlRlc3RgLCB0aGF0IHByb2R1Y2VzIGEgY29udGV4dCBtYW5hZ2VyIHdob3NlCis6a2V5d29yZDpgd2l0aGAgYmxvY2sgYmVjb21lcyBhICJzdWItdGVzdCIuICBUaGlzIGNvbnRleHQgbWFuYWdlciBhbGxvd3MgYSB0ZXN0CittZXRob2QgdG8gZHluYW1pY2FsbHkgZ2VuZXJhdGUgc3VidGVzdHMgIGJ5LCBzYXksIGNhbGxpbmcgdGhlIGBgc3ViVGVzdGBgCitjb250ZXh0IG1hbmFnZXIgaW5zaWRlIGEgbG9vcC4gIEEgc2luZ2xlIHRlc3QgbWV0aG9kIGNhbiB0aGVyZWJ5IHByb2R1Y2UgYW4KK2luZGVmaW5pdGUgbnVtYmVyIG9mIHNlcGFyYXRlbHktaWRlbnRpZmllZCBhbmQgc2VwYXJhdGVseS1jb3VudGVkIHRlc3RzLCBhbGwgb2YKK3doaWNoIHdpbGwgcnVuIGV2ZW4gaWYgb25lIG9yIG1vcmUgb2YgdGhlbSBmYWlsLiAgRm9yIGV4YW1wbGU6OgorCisgICAgY2xhc3MgTnVtYmVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBkZWYgdGVzdF9ldmVuKHNlbGYpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKword2lsbCByZXN1bHQgaW4gc2l4IHN1YnRlc3RzLCBlYWNoIGlkZW50aWZpZWQgaW4gdGhlIHVuaXR0ZXN0IHZlcmJvc2Ugb3V0cHV0Cit3aXRoIGEgbGFiZWwgY29uc2lzdGluZyBvZiB0aGUgdmFyaWFibGUgbmFtZSBgYGlgYCBhbmQgYSBwYXJ0aWN1bGFyIHZhbHVlIGZvcgordGhhdCB2YXJpYWJsZSAoYGBpPTBgYCwgYGBpPTFgYCwgZXRjKS4gIFNlZSA6cmVmOmBzdWJ0ZXN0c2AgZm9yIHRoZSBmdWxsCit2ZXJzaW9uIG9mIHRoaXMgZXhhbXBsZS4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE2OTk3YC4pCisKKzpmdW5jOmB1bml0dGVzdC5tYWluYCBub3cgYWNjZXB0cyBhbiBpdGVyYWJsZSBvZiB0ZXN0IG5hbWVzIGZvcgorKmRlZmF1bHRUZXN0Kiwgd2hlcmUgcHJldmlvdXNseSBpdCBvbmx5IGFjY2VwdGVkIGEgc2luZ2xlIHRlc3QgbmFtZSBhcyBhCitzdHJpbmcuICAoQ29udHJpYnV0ZWQgYnkgSnlya2kgUHVsbGlhaW5lbiBpbiA6aXNzdWU6YDE1MTMyYC4pCisKK0lmIDpjbGFzczpgfnVuaXR0ZXN0LlNraXBUZXN0YCBpcyByYWlzZWQgZHVyaW5nIHRlc3QgZGlzY292ZXJ5ICh0aGF0IGlzLCBhdCB0aGUKK21vZHVsZSBsZXZlbCBpbiB0aGUgdGVzdCBmaWxlKSwgaXQgaXMgbm93IHJlcG9ydGVkIGFzIGEgc2tpcCBpbnN0ZWFkIG9mIGFuCitlcnJvci4gIChDb250cmlidXRlZCBieSBaYWNoIFdhcmUgaW4gOmlzc3VlOmAxNjkzNWAuKQorCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RMb2FkZXIuZGlzY292ZXJgIG5vdyBzb3J0cyB0aGUgZGlzY292ZXJlZCBmaWxlcyB0byBwcm92aWRlCitjb25zaXN0ZW50IHRlc3Qgb3JkZXJpbmcuICAoQ29udHJpYnV0ZWQgYnkgTWFydGluIE1lbGluIGFuZCBKZWZmIFJhbW5hbmkgaW4KKzppc3N1ZTpgMTY3MDlgLikKKworOmNsYXNzOmB+dW5pdHRlc3QuVGVzdFN1aXRlYCBub3cgZHJvcHMgcmVmZXJlbmNlcyB0byB0ZXN0cyBhcyBzb29uIGFzIHRoZSB0ZXN0CitoYXMgYmVlbiBydW4sIGlmIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwuICBPbiBQeXRob24gaW50ZXJwcmV0ZXJzIHRoYXQgZG8KK2dhcmJhZ2UgY29sbGVjdGlvbiwgdGhpcyBhbGxvd3MgdGhlIHRlc3RzIHRvIGJlIGdhcmJhZ2UgY29sbGVjdGVkIGlmIG5vdGhpbmcKK2Vsc2UgaXMgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgdGVzdC4gIEl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoaXMKK2JlaGF2aW9yIGJ5IGNyZWF0aW5nIGEgOmNsYXNzOmB+dW5pdHRlc3QuVGVzdFN1aXRlYCBzdWJjbGFzcyB0aGF0IGRlZmluZXMgYQorY3VzdG9tIGBgX3JlbW92ZVRlc3RBdEluZGV4YGAgbWV0aG9kLiAgKENvbnRyaWJ1dGVkIGJ5IFRvbSBXYXJkaWxsLCBNYXR0CitNY0NsdXJlLCBhbmQgQW5kcmV3IFN2ZXRsb3YgaW4gOmlzc3VlOmAxMTc5OGAuKQorCitBIG5ldyB0ZXN0IGFzc2VydGlvbiBjb250ZXh0LW1hbmFnZXIsIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TG9nc2AsCit3aWxsIGVuc3VyZSB0aGF0IGEgZ2l2ZW4gYmxvY2sgb2YgY29kZSBlbWl0cyBhIGxvZyBtZXNzYWdlIHVzaW5nIHRoZQorOm1vZDpgbG9nZ2luZ2AgbW9kdWxlLiAgQnkgZGVmYXVsdCB0aGUgbWVzc2FnZSBjYW4gY29tZSBmcm9tIGFueSBsb2dnZXIgYW5kCitoYXZlIGEgcHJpb3JpdHkgb2YgYGBJTkZPYGAgb3IgaGlnaGVyLCBidXQgYm90aCB0aGUgbG9nZ2VyIG5hbWUgYW5kIGFuCithbHRlcm5hdGl2ZSBtaW5pbXVtIGxvZ2dpbmcgbGV2ZWwgbWF5IGJlIHNwZWNpZmllZC4gIFRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlCitjb250ZXh0IG1hbmFnZXIgY2FuIGJlIHF1ZXJpZWQgZm9yIHRoZSA6Y2xhc3M6YH5sb2dnaW5nLkxvZ1JlY29yZGBcIHMgYW5kL29yCitmb3JtYXR0ZWQgbWVzc2FnZXMgdGhhdCB3ZXJlIGxvZ2dlZC4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbgorOmlzc3VlOmAxODkzN2AuKQorCitUZXN0IGRpc2NvdmVyeSBub3cgd29ya3Mgd2l0aCBuYW1lc3BhY2UgcGFja2FnZXMgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYQoraW4gOmlzc3VlOmAxNzQ1N2AuKQorCis6bW9kOmB1bml0dGVzdC5tb2NrYCBvYmplY3RzIG5vdyBpbnNwZWN0IHRoZWlyIHNwZWNpZmljYXRpb24gc2lnbmF0dXJlcyB3aGVuCittYXRjaGluZyBjYWxscywgd2hpY2ggbWVhbnMgYW4gYXJndW1lbnQgY2FuIG5vdyBiZSBtYXRjaGVkIGJ5IGVpdGhlciBwb3NpdGlvbgorb3IgbmFtZSwgaW5zdGVhZCBvZiBvbmx5IGJ5IHBvc2l0aW9uLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluCis6aXNzdWU6YDE3MDE1YC4pCisKKzpmdW5jOmB+bW9jay5tb2NrX29wZW5gIG9iamVjdHMgbm93IGhhdmUgYGByZWFkbGluZWBgIGFuZCBgYHJlYWRsaW5lc2BgCittZXRob2RzLiAoQ29udHJpYnV0ZWQgYnkgVG9zaGlvIEt1cmF0b21pIGluIDppc3N1ZTpgMTc0NjdgLikKKworCit2ZW52CistLS0tCisKKzptb2Q6YHZlbnZgIG5vdyBpbmNsdWRlcyBhY3RpdmF0aW9uIHNjcmlwdHMgZm9yIHRoZSBgYGNzaGBgIGFuZCBgYGZpc2hgYAorc2hlbGxzIChDb250cmlidXRlZCBieSBBbmRyZXcgU3ZldGxvdiBpbiA6aXNzdWU6YDE1NDE3YC4pCisKKzpjbGFzczpgfnZlbnYuRW52QnVpbGRlcmAgYW5kIHRoZSA6ZnVuYzpgfnZlbnYuY3JlYXRlYCBjb252ZW5pZW5jZSBmdW5jdGlvbgordGFrZSBhIG5ldyBrZXl3b3JkIGFyZ3VtZW50ICp3aXRoX3BpcCosIHdoaWNoIGRlZmF1bHRzIHRvIGBgRmFsc2VgYCwgdGhhdAorY29udHJvbHMgd2hldGhlciBvciBub3QgOmNsYXNzOmB+dmVudi5FbnZCdWlsZGVyYCBlbnN1cmVzIHRoYXQgYGBwaXBgYCBpcworaW5zdGFsbGVkIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LiAgKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiBpbgorOmlzc3VlOmAxOTU1MmAgYXMgcGFydCBvZiB0aGUgOnBlcDpgNDUzYCBpbXBsZW1lbnRhdGlvbi4pCisKKword2F2ZQorLS0tLQorCitUaGUgOm1ldGg6YH53YXZlLmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzQ4N2AuKQorCis6bWV0aDpgd2F2ZS5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gIChDb250cmlidXRlZAorYnkgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTc2MTZgLikKKworOm1vZDpgd2F2ZWAgY2FuIG5vdyA6cmVmOmB3cml0ZSBvdXRwdXQgdG8gdW5zZWVrYWJsZSBmaWxlcworPHdhdmUtd3JpdGUtb2JqZWN0cz5gLiAgKENvbnRyaWJ1dGVkIGJ5IERhdmlkIEpvbmVzLCBHdWlsaGVybWUgUG9sbywgYW5kIFNlcmhpeQorU3RvcmNoYWthIGluIDppc3N1ZTpgNTIwMmAuKQorCitUaGUgOm1ldGg6YH53YXZlLldhdmVfd3JpdGUud3JpdGVmcmFtZXNyYXdgIGFuZAorOm1ldGg6YH53YXZlLldhdmVfd3JpdGUud3JpdGVmcmFtZXNgIG1ldGhvZHMgbm93IGFjY2VwdCBhbnkgOnRlcm06YGJ5dGVzLWxpa2UKK29iamVjdGAuICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDgzMTFgLikKKworCit3ZWFrcmVmCistLS0tLS0tCisKK05ldyA6Y2xhc3M6YH53ZWFrcmVmLldlYWtNZXRob2RgIGNsYXNzIHNpbXVsYXRlcyB3ZWFrIHJlZmVyZW5jZXMgdG8gYm91bmQKK21ldGhvZHMuIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE0NjMxYC4pCisKK05ldyA6Y2xhc3M6YH53ZWFrcmVmLmZpbmFsaXplYCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZWdpc3RlciBhIGNhbGxiYWNrCit0byBiZSBpbnZva2VkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLCB3aXRob3V0IG5lZWRpbmcgdG8KK2NhcmVmdWxseSBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGUgd2VhayByZWZlcmVuY2UgaXRzZWxmLiAoQ29udHJpYnV0ZWQgYnkKK1JpY2hhcmQgT3Vka2VyayBpbiA6aXNzdWU6YDE1NTI4YCkKKworVGhlIGNhbGxiYWNrLCBpZiBhbnksIGFzc29jaWF0ZWQgd2l0aCBhIDpjbGFzczpgfndlYWtyZWYucmVmYCBpcyBub3cKK2V4cG9zZWQgdmlhIHRoZSA6YXR0cjpgfndlYWtyZWYucmVmLl9fY2FsbGJhY2tfX2AgYXR0cmlidXRlLiAgKENvbnRyaWJ1dGVkCitieSBNYXJrIERpY2tpbnNvbiBpbiA6aXNzdWU6YDE3NjQzYC4pCisKKworeG1sLmV0cmVlCistLS0tLS0tLS0KKworQSBuZXcgcGFyc2VyLCA6Y2xhc3M6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUHVsbFBhcnNlcmAsIGFsbG93cyBhCitub24tYmxvY2tpbmcgYXBwbGljYXRpb25zIHRvIHBhcnNlIFhNTCBkb2N1bWVudHMuICBBbiBleGFtcGxlIGNhbiBiZQorc2VlbiBhdCA6cmVmOmBlbGVtZW50dHJlZS1wdWxsLXBhcnNpbmdgLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUKK1BpdHJvdSBpbiA6aXNzdWU6YDE3NzQxYC4pCisKK1RoZSA6bW9kOmB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIDpmdW5jOmB+eG1sLmV0cmVlLkVsZW1lbnRUcmVlLnRvc3RyaW5nYCBhbmQKKzpmdW5jOmB+eG1sLmV0cmVlLkVsZW1lbnRUcmVlLnRvc3RyaW5nbGlzdGAgZnVuY3Rpb25zLCBhbmQgdGhlCis6Y2xhc3M6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWVgCis6bWV0aDpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS53cml0ZWAgbWV0aG9kLCBub3cgaGF2ZSBhCisqc2hvcnRfZW1wdHlfZWxlbWVudHMqIDpyZWY6YGtleXdvcmQtb25seSBwYXJhbWV0ZXIgPGtleXdvcmQtb25seV9wYXJhbWV0ZXI+YAorcHJvdmlkaW5nIGNvbnRyb2wgb3ZlciB3aGV0aGVyIGVsZW1lbnRzIHdpdGggbm8gY29udGVudCBhcmUgd3JpdHRlbiBpbgorYWJicmV2aWF0ZWQgKGBgPHRhZyAvPmBgKSBvciBleHBhbmRlZCAoYGA8dGFnPjwvdGFnPmBgKSBmb3JtLiAgKENvbnRyaWJ1dGVkIGJ5CitBcmllbCBQb2xpYWsgYW5kIFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNDM3N2AuKQorCisKK3ppcGZpbGUKKy0tLS0tLS0KKworVGhlIDptZXRoOmB+emlwZmlsZS5QeVppcEZpbGUud3JpdGVweWAgbWV0aG9kIG9mIHRoZQorOmNsYXNzOmB+emlwZmlsZS5QeVppcEZpbGVgIGNsYXNzIGhhcyBhIG5ldyAqZmlsdGVyZnVuYyogb3B0aW9uIHRoYXQgY2FuIGJlCit1c2VkIHRvIGNvbnRyb2wgd2hpY2ggZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGFyZSBhZGRlZCB0byB0aGUgYXJjaGl2ZS4gIEZvcgorZXhhbXBsZSwgdGhpcyBjb3VsZCBiZSB1c2VkIHRvIGV4Y2x1ZGUgdGVzdCBmaWxlcyBmcm9tIHRoZSBhcmNoaXZlLgorKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBUaXNtZXIgaW4gOmlzc3VlOmAxOTI3NGAuKQorCitUaGUgKmFsbG93WmlwNjQqIHBhcmFtZXRlciB0byA6Y2xhc3M6YH56aXBmaWxlLlppcEZpbGVgIGFuZAorOmNsYXNzOmB+emlwZmlsZS5QeVppcGZpbGVgIGlzIG5vdyBgYFRydWVgYCBieSBkZWZhdWx0LiAgKENvbnRyaWJ1dGVkIGJ5CitXaWxsaWFtIE1hbGxhcmQgaW4gOmlzc3VlOmAxNzIwMWAuKQorCisKKworQ1B5dGhvbiBJbXBsZW1lbnRhdGlvbiBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisuLiBfd2hhdHNuZXctcGVwLTQ0NToKKworUEVQIDQ0NTogQ3VzdG9taXphdGlvbiBvZiBDUHl0aG9uIE1lbW9yeSBBbGxvY2F0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDQ1YCBhZGRzIG5ldyBDIGxldmVsIGludGVyZmFjZXMgdG8gY3VzdG9taXplIG1lbW9yeSBhbGxvY2F0aW9uIGluCit0aGUgQ1B5dGhvbiBpbnRlcnByZXRlci4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0NWAgLS0gQWRkIG5ldyBBUElzIHRvIGN1c3RvbWl6ZSBQeXRob24gbWVtb3J5IGFsbG9jYXRvcnMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lci4KKworCisuLiBfd2hhdHNuZXctcGVwLTQ0MjoKKworUEVQIDQ0MjogU2FmZSBPYmplY3QgRmluYWxpemF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDQyYCByZW1vdmVzIHRoZSBjdXJyZW50IGxpbWl0YXRpb25zIGFuZCBxdWlya3Mgb2Ygb2JqZWN0IGZpbmFsaXphdGlvbgoraW4gQ1B5dGhvbi4gV2l0aCBpdCwgb2JqZWN0cyB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzLCBhcyB3ZWxsIGFzCitnZW5lcmF0b3JzIHdpdGggOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZXMsIGNhbiBiZSBmaW5hbGl6ZWQgd2hlbiB0aGV5IGFyZQorcGFydCBvZiBhIHJlZmVyZW5jZSBjeWNsZS4KKworQXMgcGFydCBvZiB0aGlzIGNoYW5nZSwgbW9kdWxlIGdsb2JhbHMgYXJlIG5vIGxvbmdlciBmb3JjaWJseSBzZXQgdG8KKzpjb25zdDpgTm9uZWAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duIGluIG1vc3QgY2FzZXMsIGluc3RlYWQgcmVseWluZworb24gdGhlIG5vcm1hbCBvcGVyYXRpb24gb2YgdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3Rvci4gIFRoaXMgYXZvaWRzIGEKK3dob2xlIGNsYXNzIG9mIGludGVycHJldGVyLXNodXRkb3duLXRpbWUgZXJyb3JzLCB1c3VhbGx5IGludm9sdmluZworYGBfX2RlbF9fYGAgbWV0aG9kcywgdGhhdCBoYXZlIHBsYWd1ZWQgUHl0aG9uIHNpbmNlIHRoZSBjeWNsaWMgR0MKK3dhcyBmaXJzdCBpbnRyb2R1Y2VkLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQyYCAtLSBTYWZlIG9iamVjdCBmaW5hbGl6YXRpb24KKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBBbnRvaW5lIFBpdHJvdS4KKworCisuLiBfd2hhdHNuZXctcGVwLTQ1NjoKKworUEVQIDQ1NjogU2VjdXJlIGFuZCBJbnRlcmNoYW5nZWFibGUgSGFzaCBBbGdvcml0aG0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpwZXA6YDQ1NmAgZm9sbG93cyB1cCBvbiBlYXJsaWVyIHNlY3VyaXR5IGZpeCB3b3JrIGRvbmUgb24gUHl0aG9uJ3MgaGFzaAorYWxnb3JpdGhtIHRvIGFkZHJlc3MgY2VydGFpbiBET1MgYXR0YWNrcyB0byB3aGljaCBwdWJsaWMgZmFjaW5nIEFQSXMgYmFja2VkIGJ5CitkaWN0aW9uYXJ5IGxvb2t1cHMgbWF5IGJlIHN1YmplY3QuICAoU2VlIDppc3N1ZTpgMTQ2MjFgIGZvciB0aGUgc3RhcnQgb2YgdGhlCitjdXJyZW50IHJvdW5kIG9mIGltcHJvdmVtZW50cy4pICBUaGUgUEVQIHVuaWZpZXMgQ1B5dGhvbidzIGhhc2ggY29kZSB0byBtYWtlIGl0CitlYXNpZXIgZm9yIGEgcGFja2FnZXIgdG8gc3Vic3RpdHV0ZSBhIGRpZmZlcmVudCBoYXNoIGFsZ29yaXRobSwgYW5kIHN3aXRjaGVzCitQeXRob24ncyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIGEgU2lwSGFzaCBpbXBsZW1lbnRhdGlvbiBvbiBwbGF0Zm9ybXMgdGhhdAoraGF2ZSBhIDY0IGJpdCBkYXRhIHR5cGUuICBBbnkgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZXMgaW4gY29tcGFyaXNvbiB3aXRoIHRoZQorb2xkZXIgRk5WIGFsZ29yaXRobSBhcmUgdHJpdmlhbC4KKworVGhlIFBFUCBhZGRzIGFkZGl0aW9uYWwgZmllbGRzIHRvIHRoZSA6YXR0cjpgc3lzLmhhc2hfaW5mb2Agc3RydWN0IHNlcXVlbmNlIHRvCitkZXNjcmliZSB0aGUgaGFzaCBhbGdvcml0aG0gaW4gdXNlIGJ5IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGJpbmFyeS4gIE90aGVyd2lzZSwKK3RoZSBQRVAgZG9lcyBub3QgYWx0ZXIgYW55IGV4aXN0aW5nIENQeXRob24gQVBJcy4KKworCisuLiBfd2hhdHNuZXctcGVwLTQzNjoKKworUEVQIDQzNjogQXJndW1lbnQgQ2xpbmljCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIkFyZ3VtZW50IENsaW5pYyIgKDpwZXA6YDQzNmApIGlzIG5vdyBwYXJ0IG9mIHRoZSBDUHl0aG9uIGJ1aWxkIHByb2Nlc3MKK2FuZCBjYW4gYmUgdXNlZCB0byBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBkZWZpbmluZyBhbmQgbWFpbnRhaW5pbmcKK2FjY3VyYXRlIHNpZ25hdHVyZXMgZm9yIGJ1aWx0aW5zIGFuZCBzdGFuZGFyZCBsaWJyYXJ5IGV4dGVuc2lvbiBtb2R1bGVzCitpbXBsZW1lbnRlZCBpbiBDLgorCitTb21lIHN0YW5kYXJkIGxpYnJhcnkgZXh0ZW5zaW9uIG1vZHVsZXMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB1c2UgQXJndW1lbnQKK0NsaW5pYyBpbiBQeXRob24gMy40LCBhbmQgOm1vZDpgcHlkb2NgIGFuZCA6bW9kOmBpbnNwZWN0YCBoYXZlIGJlZW4gdXBkYXRlZAorYWNjb3JkaW5nbHkuCisKK0l0IGlzIGV4cGVjdGVkIHRoYXQgc2lnbmF0dXJlIG1ldGFkYXRhIGZvciBwcm9ncmFtbWF0aWMgaW50cm9zcGVjdGlvbiB3aWxsCitiZSBhZGRlZCB0byBhZGRpdGlvbmFsIGNhbGxhYmxlcyBpbXBsZW1lbnRlZCBpbiBDIGFzIHBhcnQgb2YgUHl0aG9uIDMuNAorbWFpbnRlbmFuY2UgcmVsZWFzZXMuCisKKy4uIG5vdGU6OgorICAgVGhlIEFyZ3VtZW50IENsaW5pYyBQRVAgaXMgbm90IGZ1bGx5IHVwIHRvIGRhdGUgd2l0aCB0aGUgc3RhdGUgb2YgdGhlCisgICBpbXBsZW1lbnRhdGlvbi4gVGhpcyBoYXMgYmVlbiBkZWVtZWQgYWNjZXB0YWJsZSBieSB0aGUgcmVsZWFzZSBtYW5hZ2VyCisgICBhbmQgY29yZSBkZXZlbG9wbWVudCB0ZWFtIGluIHRoaXMgY2FzZSwgYXMgQXJndW1lbnQgQ2xpbmljIHdpbGwgbm90CisgICBiZSBtYWRlIGF2YWlsYWJsZSBhcyBhIHB1YmxpYyBBUEkgZm9yIHRoaXJkIHBhcnR5IHVzZSBpbiBQeXRob24gMy40LgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDM2YCAtLSBUaGUgQXJndW1lbnQgQ2xpbmljIERTTAorICAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBMYXJyeSBIYXN0aW5ncy4KKworCitPdGhlciBCdWlsZCBhbmQgQyBBUEkgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgbmV3IDpjOmZ1bmM6YFB5VHlwZV9HZXRTbG90YCBmdW5jdGlvbiBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc3RhYmxlIEFCSSwKKyAgYWxsb3dpbmcgcmV0cmlldmFsIG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGZyb20gbmFtZWQgdHlwZSBzbG90cyB3aGVuIHVzaW5nCisgIHRoZSBsaW1pdGVkIEFQSS4gKENvbnRyaWJ1dGVkIGJ5IE1hcnRpbiB2b24gTMO2d2lzIGluIDppc3N1ZTpgMTcxNjJgKQorCisqIFRoZSBuZXcgOmM6ZnVuYzpgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZ2AgcHJlLWluaXRpYWxpemF0aW9uIEFQSQorICBhbGxvd3MgYXBwbGljYXRpb25zIGVtYmVkZGluZyB0aGUgQ1B5dGhvbiBpbnRlcnByZXRlciB0byByZWxpYWJseSBmb3JjZQorICBhIHBhcnRpY3VsYXIgZW5jb2RpbmcgYW5kIGVycm9yIGhhbmRsZXIgZm9yIHRoZSBzdGFuZGFyZCBzdHJlYW1zCisgIChDb250cmlidXRlZCBieSBCYXN0aWVuIE1vbnRhZ25lIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxNjEyOWApCisKKyogTW9zdCBQeXRob24gQyBBUElzIHRoYXQgZG9uJ3QgbXV0YXRlIHN0cmluZyBhcmd1bWVudHMgYXJlIG5vdyBjb3JyZWN0bHkKKyAgbWFya2VkIGFzIGFjY2VwdGluZyBgYGNvbnN0IGNoYXIgKmBgIHJhdGhlciB0aGFuIGBgY2hhciAqYGAgKENvbnRyaWJ1dGVkCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNzcyNjczYCkuCisKKyogQSBuZXcgc2hlbGwgdmVyc2lvbiBvZiBgYHB5dGhvbi1jb25maWdgYCBjYW4gYmUgdXNlZCBldmVuIHdoZW4gYSBweXRob24KKyAgaW50ZXJwcmV0ZXIgaXMgbm90IGF2YWlsYWJsZSAoZm9yIGV4YW1wbGUsIGluIGNyb3NzIGNvbXBpbGF0aW9uIHNjZW5hcmlvcykuCisKKyogOmM6ZnVuYzpgUHlVbmljb2RlX0Zyb21Gb3JtYXRgIG5vdyBzdXBwb3J0cyB3aWR0aCBhbmQgcHJlY2lzaW9uCisgIHNwZWNpZmljYXRpb25zIGZvciBgYCVzYGAsIGBgJUFgYCwgYGAlVWBgLCBgYCVWYGAsIGBgJVNgYCwgYW5kIGBgJVJgYC4KKyAgKENvbnRyaWJ1dGVkIGJ5IFlzaiBSYXkgYW5kIFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgNzMzMGAuKQorCisqIE5ldyBmdW5jdGlvbiA6YzpmdW5jOmBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMmAgc3VwcGxlbWVudHMgdGhlCisgIGV4aXN0aW5nIDpjOmZ1bmM6YFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGVgIGZ1bmN0aW9uLiAgVGhlIGRpZmZlcmVuY2UKKyAgaXMgdGhhdCBpdCByZXR1cm5zIGBgMGBgIG9uIHN1Y2Nlc3MgYW5kIGBgLTFgYCBvbiBmYWlsdXJlLgorCisqIFRoZSBDUHl0aG9uIHNvdXJjZSBjYW4gbm93IGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBhZGRyZXNzIHNhbml0eSBjaGVja2luZworICBmZWF0dXJlcyBvZiByZWNlbnQgdmVyc2lvbnMgb2YgR0NDIGFuZCBjbGFuZzogIHRoZSBmYWxzZSBhbGFybXMgaW4gdGhlIHNtYWxsCisgIG9iamVjdCBhbGxvY2F0b3IgaGF2ZSBiZWVuIHNpbGVuY2VkLiAgKENvbnRyaWJ1dGVkIGJ5IERoaXJ1IEtob2xpYSBpbgorICA6aXNzdWU6YDE4NTk2YC4pCisKKyogVGhlIFdpbmRvd3MgYnVpbGQgbm93IHVzZXMgYEFkZHJlc3MgU3BhY2UgTGF5b3V0IFJhbmRvbWl6YXRpb24KKyAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQVNMUj5gXyBhbmQgYERhdGEgRXhlY3V0aW9uIFByZXZlbnRpb24KKyAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0YV9FeGVjdXRpb25fUHJldmVudGlvbj5gXy4gIChDb250cmlidXRlZCBieQorICBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTY2MzJgLikKKworKiBOZXcgZnVuY3Rpb24gOmM6ZnVuYzpgUHlPYmplY3RfTGVuZ3RoSGludGAgaXMgdGhlIEMgQVBJIGVxdWl2YWxlbnQKKyAgb2YgOmZ1bmM6YG9wZXJhdG9yLmxlbmd0aF9oaW50YC4gIChDb250cmlidXRlZCBieSBBcm1pbiBSb25hY2hlciBpbgorICA6aXNzdWU6YDE2MTQ4YC4pCisKKworLi4gX290aGVyLWltcHJvdmVtZW50cy0zLjQ6CisKK090aGVyIEltcHJvdmVtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIF93aGF0c25ldy1pc29sYXRlZC1tb2RlOgorCisqIFRoZSA6cmVmOmBweXRob24gPHVzaW5nLW9uLWNtZGxpbmU+YCBjb21tYW5kIGhhcyBhIG5ldyA6cmVmOmBvcHRpb24KKyAgPHVzaW5nLW9uLW1pc2Mtb3B0aW9ucz5gLCBgYC1JYGAsIHdoaWNoIGNhdXNlcyBpdCB0byBydW4gaW4gImlzb2xhdGVkIG1vZGUiLAorICB3aGljaCBtZWFucyB0aGF0IDpkYXRhOmBzeXMucGF0aGAgY29udGFpbnMgbmVpdGhlciB0aGUgc2NyaXB0J3MgZGlyZWN0b3J5IG5vcgorICB0aGUgdXNlcidzIGBgc2l0ZS1wYWNrYWdlc2BgIGRpcmVjdG9yeSwgYW5kIGFsbCA6ZW52dmFyOmBQWVRIT04qYCBlbnZpcm9ubWVudAorICB2YXJpYWJsZXMgYXJlIGlnbm9yZWQgKGl0IGltcGxpZXMgYm90aCBgYC1zYGAgYW5kIGBgLUVgYCkuICBPdGhlcgorICByZXN0cmljdGlvbnMgbWF5IGFsc28gYmUgYXBwbGllZCBpbiB0aGUgZnV0dXJlLCB3aXRoIHRoZSBnb2FsIGJlaW5nIHRvCisgIGlzb2xhdGUgdGhlIGV4ZWN1dGlvbiBvZiBhIHNjcmlwdCBmcm9tIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQuICBUaGlzIGlzCisgIGFwcHJvcHJpYXRlLCBmb3IgZXhhbXBsZSwgd2hlbiBQeXRob24gaXMgdXNlZCB0byBydW4gYSBzeXN0ZW0gc2NyaXB0LiAgT24KKyAgbW9zdCBQT1NJWCBzeXN0ZW1zIGl0IGNhbiBhbmQgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIGBgIyFgYCBsaW5lIG9mIHN5c3RlbQorICBzY3JpcHRzLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjQ5OWAuKQorCisqIFRhYi1jb21wbGV0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyCisgIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IDptb2Q6YHJlYWRsaW5lYC4gIEhpc3RvcnkgaXMgYWxzbyBlbmFibGVkIGJ5IGRlZmF1bHQsCisgIGFuZCBpcyB3cml0dGVuIHRvIChhbmQgcmVhZCBmcm9tKSB0aGUgZmlsZSA6ZmlsZTpgfi8ucHl0aG9uLWhpc3RvcnlgLgorICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgYW5kIMOJcmljIEFyYXVqbyBpbiA6aXNzdWU6YDU4NDVgLikKKworKiBJbnZva2luZyB0aGUgUHl0aG9uIGludGVycHJldGVyIHdpdGggYGAtLXZlcnNpb25gYCBub3cgb3V0cHV0cyB0aGUgdmVyc2lvbiB0bworICBzdGFuZGFyZCBvdXRwdXQgaW5zdGVhZCBvZiBzdGFuZGFyZCBlcnJvciAoOmlzc3VlOmAxODMzOGApLiBTaW1pbGFyIGNoYW5nZXMKKyAgd2VyZSBtYWRlIHRvIDptb2Q6YGFyZ3BhcnNlYCAoOmlzc3VlOmAxODkyMGApIGFuZCBvdGhlciBtb2R1bGVzIHRoYXQgaGF2ZQorICBzY3JpcHQtbGlrZSBpbnZvY2F0aW9uIGNhcGFiaWxpdGllcyAoOmlzc3VlOmAxODkyMmApLgorCisqIFRoZSBDUHl0aG9uIFdpbmRvd3MgaW5zdGFsbGVyIG5vdyBhZGRzIGBgLnB5YGAgdG8gdGhlIDplbnZ2YXI6YFBBVEhFWFRgCisgIHZhcmlhYmxlIHdoZW4gZXh0ZW5zaW9ucyBhcmUgcmVnaXN0ZXJlZCwgYWxsb3dpbmcgdXNlcnMgdG8gcnVuIGEgcHl0aG9uCisgIHNjcmlwdCBhdCB0aGUgd2luZG93cyBjb21tYW5kIHByb21wdCBieSBqdXN0IHR5cGluZyBpdHMgbmFtZSB3aXRob3V0IHRoZQorICBgYC5weWBgIGV4dGVuc2lvbi4gIChDb250cmlidXRlZCBieSBQYXVsIE1vb3JlIGluIDppc3N1ZTpgMTg1NjlgLikKKworKiBBIG5ldyBgYG1ha2VgYCB0YXJnZXQgYGNvdmVyYWdlLXJlcG9ydAorICA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9jb3ZlcmFnZS5odG1sI21lYXN1cmluZy1jb3ZlcmFnZS1vZi1jLWNvZGUtd2l0aC1nY292LWFuZC1sY292PmBfCisgIHdpbGwgYnVpbGQgcHl0aG9uLCBydW4gdGhlIHRlc3Qgc3VpdGUsIGFuZCBnZW5lcmF0ZSBhbiBIVE1MIGNvdmVyYWdlIHJlcG9ydAorICBmb3IgdGhlIEMgY29kZWJhc2UgdXNpbmcgYGBnY292YGAgYW5kIGBsY292CisgIDxodHRwOi8vbHRwLnNvdXJjZWZvcmdlLm5ldC9jb3ZlcmFnZS9sY292LnBocD5gXy4KKworKiBUaGUgYGAtUmBgIG9wdGlvbiB0byB0aGUgOnJlZjpgcHl0aG9uIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSA8cmVncnRlc3Q+YCBub3cKKyAgYWxzbyBjaGVja3MgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGxlYWtzLCB1c2luZworICA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpYC4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbgorICA6aXNzdWU6YDEzMzkwYCkuCisKKyogYGBweXRob24gLW1gYCBub3cgd29ya3Mgd2l0aCBuYW1lc3BhY2UgcGFja2FnZXMuCisKKyogVGhlIDptb2Q6YHN0YXRgIG1vZHVsZSBpcyBub3cgaW1wbGVtZW50ZWQgaW4gQywgd2hpY2ggbWVhbnMgaXQgZ2V0cyB0aGUKKyAgdmFsdWVzIGZvciBpdHMgY29uc3RhbnRzIGZyb20gdGhlIEMgaGVhZGVyIGZpbGVzLCBpbnN0ZWFkIG9mIGhhdmluZyB0aGUKKyAgdmFsdWVzIGhhcmQtY29kZWQgaW4gdGhlIHB5dGhvbiBtb2R1bGUgYXMgd2FzIHByZXZpb3VzbHkgdGhlIGNhc2UuCisKKyogTG9hZGluZyBtdWx0aXBsZSBweXRob24gbW9kdWxlcyBmcm9tIGEgc2luZ2xlIE9TIG1vZHVsZSAoYGAuc29gYCwgYGAuZGxsYGApCisgIG5vdyB3b3JrcyBjb3JyZWN0bHkgKHByZXZpb3VzbHkgaXQgc2lsZW50bHkgcmV0dXJuZWQgdGhlIGZpcnN0IHB5dGhvbgorICBtb2R1bGUgaW4gdGhlIGZpbGUpLiAgKENvbnRyaWJ1dGVkIGJ5IFbDoWNsYXYgxaBtaWxhdWVyIGluIDppc3N1ZTpgMTY0MjFgLikKKworKiBBIG5ldyBvcGNvZGUsIDpvcGNvZGU6YExPQURfQ0xBU1NERVJFRmAsIGhhcyBiZWVuIGFkZGVkIHRvIGZpeCBhIGJ1ZyBpbiB0aGUKKyAgbG9hZGluZyBvZiBmcmVlIHZhcmlhYmxlcyBpbiBjbGFzcyBib2RpZXMgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgYnkgY2VydGFpbgorICB1c2VzIG9mIDpyZWY6YF9fcHJlcGFyZV9fIDxwcmVwYXJlPmAuICAoQ29udHJpYnV0ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24gaW4KKyAgOmlzc3VlOmAxNzg1M2AuKQorCisqIEEgbnVtYmVyIG9mIE1lbW9yeUVycm9yLXJlbGF0ZWQgY3Jhc2hlcyB3ZXJlIGlkZW50aWZpZWQgYW5kIGZpeGVkIGJ5IFZpY3RvcgorICBTdGlubmVyIHVzaW5nIGhpcyA6cGVwOmA0NDVgLWJhc2VkIGBgcHlmYWlsbWFsbG9jYGAgdG9vbCAoOmlzc3VlOmAxODQwOGAsCisgIDppc3N1ZTpgMTg1MjBgKS4KKworKiBUaGUgOnJlZjpgcHl2ZW52IDxzY3JpcHRzLXB5dmVudj5gIGNvbW1hbmQgbm93IGFjY2VwdHMgYSBgYC0tY29waWVzYGAgb3B0aW9uCisgIHRvIHVzZSBjb3BpZXMgcmF0aGVyIHRoYW4gc3ltbGlua3MgZXZlbiBvbiBzeXN0ZW1zIHdoZXJlIHN5bWxpbmtzIGFyZSB0aGUKKyAgZGVmYXVsdC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbiA6aXNzdWU6YDE4ODA3YC4pCisKKyogVGhlIDpyZWY6YHB5dmVudiA8c2NyaXB0cy1weXZlbnY+YCBjb21tYW5kIGFsc28gYWNjZXB0cyBhIGBgLS13aXRob3V0LXBpcGBgCisgIG9wdGlvbiB0byBzdXBwcmVzcyB0aGUgb3RoZXJ3aXNlLWF1dG9tYXRpYyBib290c3RyYXBwaW5nIG9mIHBpcCBpbnRvCisgIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LiAgKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDE5NTUyYAorICBhcyBwYXJ0IG9mIHRoZSA6cGVwOmA0NTNgIGltcGxlbWVudGF0aW9uLikKKworKiBUaGUgZW5jb2RpbmcgbmFtZSBpcyBub3cgb3B0aW9uYWwgaW4gdGhlIHZhbHVlIHNldCBmb3IgdGhlCisgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGVudmlyb25tZW50IHZhcmlhYmxlLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0bworICBzZXQganVzdCB0aGUgZXJyb3IgaGFuZGxlciwgd2l0aG91dCBjaGFuZ2luZyB0aGUgZGVmYXVsdCBlbmNvZGluZy4KKyAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxODgxOGAuKQorCisqIFRoZSA6bW9kOmBiejJgLCA6bW9kOmBsem1hYCwgYW5kIDptb2Q6YGd6aXBgIG1vZHVsZSBgYG9wZW5gYCBmdW5jdGlvbnMgbm93CisgIHN1cHBvcnQgYGB4YGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZS4gIChDb250cmlidXRlZCBieSBUaW0gSGVhbmV5IGFuZAorICBWYWpyYXNreSBLb2sgaW4gOmlzc3VlOmAxOTIwMWAsIDppc3N1ZTpgMTkyMjJgLCBhbmQgOmlzc3VlOmAxOTIyM2AuKQorCisKK1NpZ25pZmljYW50IE9wdGltaXphdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgVVRGLTMyIGRlY29kZXIgaXMgbm93IDN4IHRvIDR4IGZhc3Rlci4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthCisgIGluIDppc3N1ZTpgMTQ2MjVgLikKKworKiBUaGUgY29zdCBvZiBoYXNoIGNvbGxpc2lvbnMgZm9yIHNldHMgaXMgbm93IHJlZHVjZWQuICBFYWNoIGhhc2ggdGFibGUKKyAgcHJvYmUgbm93IGNoZWNrcyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZSwgYWRqYWNlbnQga2V5L2hhc2ggcGFpcnMgYmVmb3JlCisgIGNvbnRpbnVpbmcgdG8gbWFrZSByYW5kb20gcHJvYmVzIHRocm91Z2ggdGhlIGhhc2ggdGFibGUuICBUaGlzIGV4cGxvaXRzCisgIGNhY2hlIGxvY2FsaXR5IHRvIG1ha2UgY29sbGlzaW9uIHJlc29sdXRpb24gbGVzcyBleHBlbnNpdmUuCisgIFRoZSBjb2xsaXNpb24gcmVzb2x1dGlvbiBzY2hlbWUgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGh5YnJpZCBvZiBsaW5lYXIKKyAgcHJvYmluZyBhbmQgb3BlbiBhZGRyZXNzaW5nLiAgVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxpbmVhciBwcm9iZXMKKyAgZGVmYXVsdHMgdG8gbmluZS4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgYXQgY29tcGlsZS10aW1lIGJ5IGRlZmluaW5nCisgIExJTkVBUl9QUk9CRVMgdG8gYmUgYW55IHZhbHVlLiAgU2V0IExJTkVBUl9QUk9CRVM9MCB0byB0dXJuLW9mZgorICBsaW5lYXIgcHJvYmluZyBlbnRpcmVseS4gIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbgorICA6aXNzdWU6YDE4NzcxYC4pCisKKyogVGhlIGludGVycHJldGVyIHN0YXJ0cyBhYm91dCAzMCUgZmFzdGVyLiBBIGNvdXBsZSBvZiBtZWFzdXJlcyBsZWFkIHRvIHRoZQorICBzcGVlZHVwLiBUaGUgaW50ZXJwcmV0ZXIgbG9hZHMgZmV3ZXIgbW9kdWxlcyBvbiBzdGFydHVwLCBlLmcuIHRoZSA6bW9kOmByZWAsCisgIDptb2Q6YGNvbGxlY3Rpb25zYCBhbmQgOm1vZDpgbG9jYWxlYCBtb2R1bGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIG5vCisgIGxvbmdlciBpbXBvcnRlZCBieSBkZWZhdWx0LiBUaGUgbWFyc2hhbCBtb2R1bGUgaGFzIGJlZW4gaW1wcm92ZWQgdG8gbG9hZAorICBjb21waWxlZCBQeXRob24gY29kZSBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UsIENocmlzdGlhbgorICBIZWltZXMgYW5kIFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMTkyMTlgLCA6aXNzdWU6YDE5MjE4YCwgOmlzc3VlOmAxOTIwOWAsCisgIDppc3N1ZTpgMTkyMDVgIGFuZCA6aXNzdWU6YDk1NDhgKQorCisqIDpjbGFzczpgYnoyLkJaMkZpbGVgIGlzIG5vdyBhcyBmYXN0IG9yIGZhc3RlciB0aGFuIHRoZSBQeXRob24yIHZlcnNpb24gZm9yCisgIG1vc3QgY2FzZXMuICA6Y2xhc3M6YGx6bWEuTFpNQUZpbGVgIGhhcyBhbHNvIGJlZW4gb3B0aW1pemVkLiAgKENvbnRyaWJ1dGVkIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EgYW5kIE5hZGVlbSBWYXdkYSBpbiA6aXNzdWU6YDE2MDM0YC4pCisKKyogOmZ1bmM6YHJhbmRvbS5nZXRyYW5kYml0c2AgaXMgMjAlLTQwJSBmYXN0ZXIgZm9yIHNtYWxsIGludGVnZXJzICh0aGUgbW9zdAorICBjb21tb24gdXNlIGNhc2UpLiAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNjY3NGApLgorCisqIEJ5IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIG5ldyBzdG9yYWdlIGZvcm1hdCBmb3Igc3RyaW5ncywgcGlja2xpbmcgb2YKKyAgc3RyaW5ncyBpcyBub3cgc2lnbmlmaWNhbnRseSBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgYW5kCisgIEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTU1OTZgLikKKworKiBBIHBlcmZvcm1hbmNlIGlzc3VlIGluIDptZXRoOmBpby5GaWxlSU8ucmVhZGFsbGAgaGFzIGJlZW4gc29sdmVkLiAgVGhpcworICBwYXJ0aWN1bGFybHkgYWZmZWN0cyBXaW5kb3dzLCBhbmQgc2lnbmlmaWNhbnRseSBzcGVlZHMgdXAgdGhlIGNhc2Ugb2YgcGlwaW5nCisgIHNpZ25pZmljYW50IGFtb3VudHMgb2YgZGF0YSB0aHJvdWdoIDptb2Q6YHN1YnByb2Nlc3NgLiAgKENvbnRyaWJ1dGVkCisgIGJ5IFJpY2hhcmQgT3Vka2VyayBpbiA6aXNzdWU6YDE1NzU4YC4pCisKKyogOmZ1bmM6YGh0bWwuZXNjYXBlYCBpcyBub3cgMTB4IGZhc3Rlci4gIChDb250cmlidXRlZCBieSBNYXR0IEJyeWFudCBpbgorICA6aXNzdWU6YDE4MDIwYC4pCisKKyogT24gV2luZG93cywgdGhlIG5hdGl2ZSBgYFZpcnR1YWxBbGxvY2BgIGlzIG5vdyB1c2VkIGluc3RlYWQgb2YgdGhlIENSVAorICBgYG1hbGxvY2BgIGluIGBgb2JtYWxsb2NgYC4gIEFydGlmaWNpYWwgYmVuY2htYXJrcyBzaG93IGFib3V0IGEgMyUgbWVtb3J5CisgIHNhdmluZ3MuCisKKyogOmZ1bmM6YG9zLnVyYW5kb21gIG5vdyB1c2VzIGEgbGF6aWx5LW9wZW5lZCBwZXJzaXN0ZW50IGZpbGUgZGVzY3JpcHRvcgorICBzbyBhcyB0byBhdm9pZCB1c2luZyBtYW55IGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBydW4gaW4gcGFyYWxsZWwgZnJvbQorICBtdWx0aXBsZSB0aHJlYWRzLiAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxODc1NmAuKQorCisKKy4uIF9kZXByZWNhdGVkLTMuNDoKKworRGVwcmVjYXRlZAorPT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gY292ZXJzIHZhcmlvdXMgQVBJcyBhbmQgb3RoZXIgZmVhdHVyZXMgdGhhdCBoYXZlIGJlZW4gZGVwcmVjYXRlZAoraW4gUHl0aG9uIDMuNCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy41IG9yIGxhdGVyLiAgSW4gbW9zdCAoYnV0IG5vdAorYWxsKSBjYXNlcywgdXNpbmcgdGhlIGRlcHJlY2F0ZWQgQVBJcyB3aWxsIHByb2R1Y2UgYSA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgCit3aGVuIHRoZSBpbnRlcnByZXRlciBpcyBydW4gd2l0aCBkZXByZWNhdGlvbiB3YXJuaW5ncyBlbmFibGVkIChmb3IgZXhhbXBsZSwgYnkKK3VzaW5nIGBgLVdkYGApLgorCisKK0RlcHJlY2F0aW9ucyBpbiB0aGUgUHl0aG9uIEFQSQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQXMgbWVudGlvbmVkIGluIDpyZWY6YHdoYXRzbmV3LXBlcC00NTFgLCBhIG51bWJlciBvZiA6bW9kOmBpbXBvcnRpbGJgCisgIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZDogOm1ldGg6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAgaXMKKyAgcmVwbGFjZWQgYnkgOmZ1bmM6YGltcG9ydGxpYi51dGlsLmZpbmRfc3BlY2A7CisgIDptZXRoOmBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGVgIGlzIHJlcGxhY2VkIGJ5CisgIDptZXRoOmBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjYDsKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9tb2R1bGVgIGlzIHJlcGxhY2VkIGJ5CisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY2A7CisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX2xvYWRlcmAgYW5kCisgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9tb2R1bGVgIGFyZSByZXBsYWNlZCBieQorICA6bWV0aDpgaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9zcGVjYDsgYWxsIG9mIHRoZSBgYHh4eExvYWRlcmBgIEFCQworICBgYGxvYWRfbW9kdWxlYGAgbWV0aG9kcyAoOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCwKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5sb2FkX21vZHVsZWAsCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIubG9hZF9tb2R1bGVgLAorICA6bWV0aDpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGVgKSBzaG91bGQgbm8gbG9uZ2VyIGJlCisgIGltcGxlbWVudGVkLCBpbnN0ZWFkIGxvYWRlcnMgc2hvdWxkIGltcGxlbWVudCBhbgorICBgYGV4ZWNfbW9kdWxlYGAgbWV0aG9kCisgICg6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGVgLAorICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmV4ZWNfbW9kdWxlYAorICA6bWV0aDpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGVgKSBhbmQgbGV0IHRoZSBpbXBvcnQgc3lzdGVtCisgIHRha2UgY2FyZSBvZiB0aGUgcmVzdDsgYW5kCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5tb2R1bGVfcmVwcmAsCisgIDptZXRoOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAsIDptZXRoOmBpbXBvcnRsaWIudXRpbC5zZXRfbG9hZGVyYCwKKyAgYW5kIDptZXRoOmBpbXBvcnRsaWIudXRpbC5zZXRfcGFja2FnZWAgYXJlIG5vIGxvbmdlciBuZWVkZWQgYmVjYXVzZSB0aGVpcgorICBmdW5jdGlvbnMgYXJlIG5vdyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGltcG9ydCBzeXN0ZW0uCisKKyogVGhlIDptb2Q6YGltcGAgbW9kdWxlIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24uIFRvIGtlZXAgY29tcGF0aWJpbGl0eSB3aXRoCisgIFB5dGhvbiAyLzMgY29kZSBiYXNlcywgdGhlIG1vZHVsZSdzIHJlbW92YWwgaXMgY3VycmVudGx5IG5vdCBzY2hlZHVsZWQuCisKKyogVGhlIDptb2Q6YGZvcm1hdHRlcmAgbW9kdWxlIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24gYW5kIGlzIHNsYXRlZCBmb3IgcmVtb3ZhbAorICBpbiBQeXRob24gMy42LgorCisqIGBgTUQ1YGAgYXMgdGhlIGRlZmF1bHQgKmRpZ2VzdG1vZCogZm9yIHRoZSA6ZnVuYzpgaG1hYy5uZXdgIGZ1bmN0aW9uIGlzCisgIGRlcHJlY2F0ZWQuICBQeXRob24gMy42IHdpbGwgcmVxdWlyZSBhbiBleHBsaWNpdCBkaWdlc3QgbmFtZSBvciBjb25zdHJ1Y3RvciBhcworICAqZGlnZXN0bW9kKiBhcmd1bWVudC4KKworKiBUaGUgaW50ZXJuYWwgYGBOZXRyY2BgIGNsYXNzIGluIHRoZSA6bW9kOmBmdHBsaWJgIG1vZHVsZSBoYXMgYmVlbiBkb2N1bWVudGVkCisgIGFzIGRlcHJlY2F0ZWQgaW4gaXRzIGRvY3N0cmluZyBmb3IgcXVpdGUgc29tZSB0aW1lLiAgSXQgbm93IGVtaXRzIGEKKyAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBhbmQgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRlbHkgaW4gUHl0aG9uIDMuNS4KKworKiBUaGUgdW5kb2N1bWVudGVkICplbmR0aW1lKiBhcmd1bWVudCB0byA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi53YWl0YCBzaG91bGQKKyAgbm90IGhhdmUgYmVlbiBleHBvc2VkIGFuZCBpcyBob3BlZnVsbHkgbm90IGluIHVzZTsgaXQgaXMgZGVwcmVjYXRlZCBhbmQKKyAgd2lsbCBtb3N0bHkgbGlrZWx5IGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNS4KKworKiBUaGUgKnN0cmljdCogYXJndW1lbnQgb2YgOmNsYXNzOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlcmAgaXMgZGVwcmVjYXRlZC4KKworKiBUaGUgOm1vZDpgcGxpc3RsaWJgIDpmdW5jOmB+cGxpc3RsaWIucmVhZFBsaXN0YCwKKyAgOmZ1bmM6YH5wbGlzdGxpYi53cml0ZVBsaXN0YCwgOmZ1bmM6YH5wbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXNgLCBhbmQKKyAgOmZ1bmM6YH5wbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlc2AgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZQorICBjb3JyZXNwb25kaW5nIG5ldyBmdW5jdGlvbnMgOmZ1bmM6YH5wbGlzdGxpYi5sb2FkYCwgOmZ1bmM6YH5wbGlzdGxpYi5kdW1wYCwKKyAgOmZ1bmM6YH5wbGlzdGxpYi5sb2Fkc2AsIGFuZCA6ZnVuYzpgfnBsaXN0bGliLmR1bXBzYC4gIDpmdW5jOmB+cGxpc3RsaWIuRGF0YWAKKyAgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBqdXN0IHVzaW5nIHRoZSA6Y2xhc3M6YGJ5dGVzYCBjb25zdHJ1Y3Rvci4KKworKiBUaGUgOm1vZDpgc3lzY29uZmlnYCBrZXkgYGBTT2BgIGlzIGRlcHJlY2F0ZWQsIGl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5CisgIGBgRVhUX1NVRkZJWGBgLgorCisqIFRoZSBgYFVgYCBtb2RlIGFjY2VwdGVkIGJ5IHZhcmlvdXMgYGBvcGVuYGAgZnVuY3Rpb25zIGlzIGRlcHJlY2F0ZWQuCisgIEluIFB5dGhvbjMgaXQgZG9lcyBub3QgZG8gYW55dGhpbmcgdXNlZnVsLCBhbmQgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5CisgIGFwcHJvcHJpYXRlIHVzZXMgb2YgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCAoaWYgbmVlZGVkKSBhbmQgaXRzICpuZXdsaW5lKgorICBhcmd1bWVudC4KKworKiBUaGUgKnBhcnNlciogYXJndW1lbnQgb2YgOmZ1bmM6YHhtbC5ldHJlZS5FbGVtZW50VHJlZS5pdGVycGFyc2VgIGhhcworICBiZWVuIGRlcHJlY2F0ZWQsIGFzIGhhcyB0aGUgKmh0bWwqIGFyZ3VtZW50IG9mCisgIDpmdW5jOmB+eG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlcmAuICBUbyBwcmVwYXJlIGZvciB0aGUgcmVtb3ZhbCBvZiB0aGUKKyAgbGF0dGVyLCBhbGwgYXJndW1lbnRzIHRvIGBgWE1MUGFyc2VyYGAgc2hvdWxkIGJlIHBhc3NlZCBieSBrZXl3b3JkLgorCisKK0RlcHJlY2F0ZWQgRmVhdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBSdW5uaW5nIDpyZWY6YGlkbGVgIHdpdGggdGhlIGBgLW5gYCBmbGFnIChubyBzdWJwcm9jZXNzKSBpcyBkZXByZWNhdGVkLgorICBIb3dldmVyLCB0aGUgZmVhdHVyZSB3aWxsIG5vdCBiZSByZW1vdmVkIHVudGlsIDppc3N1ZTpgMTg4MjNgIGlzIHJlc29sdmVkLgorCisqIFRoZSBzaXRlIG1vZHVsZSBhZGRpbmcgYSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB0byBzeXMucGF0aCwgaWYgaXQKKyAgZXhpc3RzLCBpcyBkZXByZWNhdGVkICg6aXNzdWU6YDE5Mzc1YCkuCisKKworCitSZW1vdmVkCis9PT09PT09CisKKworT3BlcmF0aW5nIFN5c3RlbXMgTm8gTG9uZ2VyIFN1cHBvcnRlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIG9wZXJhdGluZyBzeXN0ZW1zIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlCithbmQgYnVpbGQgdG9vbHM6CisKKyogT1MvMiAoOmlzc3VlOmAxNjEzNWApLgorKiBXaW5kb3dzIDIwMDAgKGNoYW5nZXNldCBlNTJkZjA1YjQ5NmEpLgorKiBXaW5kb3dzIHN5c3RlbXMgd2hlcmUgYGBDT01TUEVDYGAgcG9pbnRzIHRvIGBgY29tbWFuZC5jb21gYCAoOmlzc3VlOmAxNDQ3MGApLgorKiBWTVMgKDppc3N1ZTpgMTYxMzZgKS4KKworCitBUEkgYW5kIEZlYXR1cmUgUmVtb3ZhbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIG9ic29sZXRlIGFuZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgQVBJcyBhbmQgZmVhdHVyZXMgaGF2ZSBiZWVuCityZW1vdmVkOgorCisqIFRoZSB1bm1haW50YWluZWQgYGBNaXNjL1RleHRNYXRlYGAgYW5kIGBgTWlzYy92aW1gYCBkaXJlY3RvcmllcyBoYXZlIGJlZW4KKyAgcmVtb3ZlZCAoc2VlIHRoZSBgZGV2Z3VpZGUgPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGU+YF8KKyAgZm9yIHN1Z2dlc3Rpb25zIG9uIHdoYXQgdG8gdXNlIGluc3RlYWQpLgorCisqIFRoZSBgYFNPYGAgbWFrZWZpbGUgbWFjcm8gaXMgcmVtb3ZlZCAoaXQgd2FzIHJlcGxhY2VkIGJ5IHRoZQorICBgYFNITElCX1NVRkZJWGBgIGFuZCBgYEVYVF9TVUZGSVhgYCBtYWNyb3MpICg6aXNzdWU6YDE2NzU0YCkuCisKKyogVGhlIGBgUHlUaHJlYWRTdGF0ZS50aWNrX2NvdW50ZXJgYCBmaWVsZCBoYXMgYmVlbiByZW1vdmVkOyBpdHMgdmFsdWUgaGFzCisgIGJlZW4gbWVhbmluZ2xlc3Mgc2luY2UgUHl0aG9uIDMuMiwgd2hlbiB0aGUgIm5ldyBHSUwiIHdhcyBpbnRyb2R1Y2VkCisgICg6aXNzdWU6YDE5MTk5YCkuCisKKyogYGBQeUxvYWRlcmBgIGFuZCBgYFB5UHljTG9hZGVyYGAgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBpbXBvcnRsaWJgLgorICAoQ29udHJpYnV0ZWQgYnkgVGFyYXMgTHlhcHVuIGluIDppc3N1ZTpgMTU2NDFgLikKKworKiBUaGUgKnN0cmljdCogYXJndW1lbnQgdG8gOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb25gIGFuZAorICA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb25gIGhhcyBiZWVuIHJlbW92ZWQuICBIVFRQIDAuOS1zdHlsZQorICAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyogVGhlIGRlcHJlY2F0ZWQgOm1vZDpgdXJsbGliLnJlcXVlc3QuUmVxdWVzdGAgZ2V0dGVyIGFuZCBzZXR0ZXIgbWV0aG9kcworICBgYGFkZF9kYXRhYGAsIGBgaGFzX2RhdGFgYCwgYGBnZXRfZGF0YWBgLCBgYGdldF90eXBlYGAsIGBgZ2V0X2hvc3RgYCwKKyAgYGBnZXRfc2VsZWN0b3JgYCwgYGBzZXRfcHJveHlgYCwgYGBnZXRfb3JpZ2luX3JlcV9ob3N0YGAsIGFuZAorICBgYGlzX3VudmVyaWZpYWJsZWBgIGhhdmUgYmVlbiByZW1vdmVkICh1c2UgZGlyZWN0IGF0dHJpYnV0ZSBhY2Nlc3MgaW5zdGVhZCkuCisKKyogU3VwcG9ydCBmb3IgbG9hZGluZyB0aGUgZGVwcmVjYXRlZCBgYFRZUEVfSU5UNjRgYCBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgOm1vZDpgbWFyc2hhbGAuICAoQ29udHJpYnV0ZWQgYnkgRGFuIFJpdGkgaW4gOmlzc3VlOmAxNTQ4MGAuKQorCisqIDpjbGFzczpgaW5zcGVjdC5TaWduYXR1cmVgOiBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyBhcmUgbm93IHJlcXVpcmVkCisgIHRvIGhhdmUgYSB2YWxpZCBuYW1lLgorCisqIDptZXRoOmBvYmplY3QuX19mb3JtYXRfX2Agbm8gbG9uZ2VyIGFjY2VwdHMgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmdzLCBpdCBub3cKKyAgcmFpc2VzIGEgOmV4YzpgVHlwZUVycm9yYCBpbnN0ZWFkLiAgVXNpbmcgYSBub24tZW1wdHkgc3RyaW5nIGhhcyBiZWVuCisgIGRlcHJlY2F0ZWQgc2luY2UgUHl0aG9uIDMuMi4gIFRoaXMgY2hhbmdlIGhhcyBiZWVuIG1hZGUgdG8gcHJldmVudCBhCisgIHNpdHVhdGlvbiB3aGVyZSBwcmV2aW91c2x5IHdvcmtpbmcgKGJ1dCBpbmNvcnJlY3QpIGNvZGUgd291bGQgc3RhcnQgZmFpbGluZworICBpZiBhbiBvYmplY3QgZ2FpbmVkIGEgX19mb3JtYXRfXyBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgeW91ciBjb2RlIG1heSBub3cKKyAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGlmIHlvdSBhcmUgdXNpbmcgYW4gYGAncydgYCBmb3JtYXQgY29kZSB3aXRoIG9iamVjdHMKKyAgdGhhdCBkbyBub3QgaGF2ZSBhIF9fZm9ybWF0X18gbWV0aG9kIHRoYXQgaGFuZGxlcyBpdC4gIFNlZSA6aXNzdWU6YDc5OTRgIGZvcgorICBiYWNrZ3JvdW5kLgorCisqIDptZXRoOmBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5pc2JqdW5rYCBhbmQKKyAgOm1ldGg6YGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmlzYnBvcHVsYXJgIHdlcmUgZGVwcmVjYXRlZCBpbiAzLjIsIGFuZCBoYXZlCisgIG5vdyBiZWVuIHJlbW92ZWQ6IHVzZSBgYHggaW4gc20uYmp1bmtgYCBhbmQKKyAgYGB4IGluIHNtLmJwb3B1bGFyYGAsIHdoZXJlICpzbSogaXMgYSA6Y2xhc3M6YH5kaWZmbGliLlNlcXVlbmNlTWF0Y2hlcmAgb2JqZWN0CisgICg6aXNzdWU6YDEzMjQ4YCkuCisKKworQ29kZSBDbGVhbnVwcworLS0tLS0tLS0tLS0tLQorCisqIFRoZSB1bnVzZWQgYW5kIHVuZG9jdW1lbnRlZCBpbnRlcm5hbCBgYFNjYW5uZXJgYCBjbGFzcyBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgdGhlIDptb2Q6YHB5ZG9jYCBtb2R1bGUuCisKKyogVGhlIHByaXZhdGUgYW5kIGVmZmVjdGl2ZWx5IHVudXNlZCBgYF9nZXN0YWx0YGAgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQsCisgIGFsb25nIHdpdGggdGhlIHByaXZhdGUgOm1vZDpgcGxhdGZvcm1gIGZ1bmN0aW9ucyBgYF9tYWNfdmVyX2xvb2t1cGBgLAorICBgYF9tYWNfdmVyX2dzdGFsdGBgLCBhbmQgYGBfYmNkMnN0cmBgLCB3aGljaCB3b3VsZCBvbmx5IGhhdmUgZXZlciBiZWVuIGNhbGxlZAorICBvbiBiYWRseSBicm9rZW4gT1NYIHN5c3RlbXMgKHNlZSA6aXNzdWU6YDE4MzkzYCkuCisKKyogVGhlIGhhcmRjb2RlZCBjb3BpZXMgb2YgY2VydGFpbiA6bW9kOmBzdGF0YCBjb25zdGFudHMgdGhhdCB3ZXJlIGluY2x1ZGVkIGluCisgIHRoZSA6bW9kOmB0YXJmaWxlYCBtb2R1bGUgbmFtZXNwYWNlIGhhdmUgYmVlbiByZW1vdmVkLgorCisKKworUG9ydGluZyB0byBQeXRob24gMy40Cis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGxpc3RzIHByZXZpb3VzbHkgZGVzY3JpYmVkIGNoYW5nZXMgYW5kIG90aGVyIGJ1Z2ZpeGVzCit0aGF0IG1heSByZXF1aXJlIGNoYW5nZXMgdG8geW91ciBjb2RlLgorCisKK0NoYW5nZXMgaW4gJ3B5dGhvbicgQ29tbWFuZCBCZWhhdmlvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogSW4gYSBwb3NpeCBzaGVsbCwgc2V0dGluZyB0aGUgOmVudnZhcjpgUEFUSGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KKyAgYW4gZW1wdHkgdmFsdWUgaXMgZXF1aXZhbGVudCB0byBub3Qgc2V0dGluZyBpdCBhdCBhbGwuICBIb3dldmVyLCBzZXR0aW5nCisgIDplbnZ2YXI6YFBZVEhPTlBBVEhgIHRvIGFuIGVtcHR5IHZhbHVlIHdhcyAqbm90KiBlcXVpdmFsZW50IHRvIG5vdCBzZXR0aW5nIGl0CisgIGF0IGFsbDogc2V0dGluZyA6ZW52dmFyOmBQWVRIT05QQVRIYCB0byBhbiBlbXB0eSB2YWx1ZSB3YXMgZXF1aXZhbGVudCB0bworICBzZXR0aW5nIGl0IHRvIGBgLmBgLCB3aGljaCBsZWFkcyB0byBjb25mdXNpb24gd2hlbiByZWFzb25pbmcgYnkgYW5hbG9neSB0bworICBob3cgOmVudnZhcjpgUEFUSGAgd29ya3MuICBUaGUgYmVoYXZpb3Igbm93IGNvbmZvcm1zIHRvIHRoZSBwb3NpeCBjb252ZW50aW9uCisgIGZvciA6ZW52dmFyOmBQQVRIYC4KKworKiBUaGUgW1ggcmVmcywgWSBibG9ja3NdIG91dHB1dCBvZiBhIGRlYnVnIChgYC0td2l0aC1weWRlYnVnYGApIGJ1aWxkIG9mIHRoZQorICBDUHl0aG9uIGludGVycHJldGVyIGlzIG5vdyBvZmYgYnkgZGVmYXVsdC4gIEl0IGNhbiBiZSByZS1lbmFibGVkIHVzaW5nIHRoZQorICBgYC1YIHNob3dyZWZjb3VudGBgIG9wdGlvbi4gKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDE3MzIzYC4pCisKKyogVGhlIHB5dGhvbiBjb21tYW5kIGFuZCBtb3N0IHN0ZGxpYiBzY3JpcHRzIChhcyB3ZWxsIGFzIDptb2Q6YGFyZ3BhcnNlYCkgbm93CisgIG91dHB1dCBgYC0tdmVyc2lvbmBgIGluZm9ybWF0aW9uIHRvIGBgc3Rkb3V0YGAgaW5zdGVhZCBvZiBgYHN0ZGVycmBgIChmb3IKKyAgaXNzdWUgbGlzdCBzZWUgOnJlZjpgb3RoZXItaW1wcm92ZW1lbnRzLTMuNGAgYWJvdmUpLgorCisKK0NoYW5nZXMgaW4gdGhlIFB5dGhvbiBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgQUJDcyBkZWZpbmVkIGluIDptb2Q6YGltcG9ydGxpYi5hYmNgIG5vdyBlaXRoZXIgcmFpc2UgdGhlIGFwcHJvcHJpYXRlCisgIGV4Y2VwdGlvbiBvciByZXR1cm4gYSBkZWZhdWx0IHZhbHVlIGluc3RlYWQgb2YgcmFpc2luZworICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBibGluZGx5LiBUaGlzIHdpbGwgb25seSBhZmZlY3QgY29kZSBjYWxsaW5nCisgIDpmdW5jOmBzdXBlcmAgYW5kIGZhbGxpbmcgdGhyb3VnaCBhbGwgdGhlIHdheSB0byB0aGUgQUJDcy4gRm9yIGNvbXBhdGliaWxpdHksCisgIGNhdGNoIGJvdGggOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgb3IgdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBhcyBuZWVkZWQuCisKKyogVGhlIG1vZHVsZSB0eXBlIG5vdyBpbml0aWFsaXplcyB0aGUgOmF0dHI6YF9fcGFja2FnZV9fYCBhbmQgOmF0dHI6YF9fbG9hZGVyX19gCisgIGF0dHJpYnV0ZXMgdG8gYGBOb25lYGAgYnkgZGVmYXVsdC4gVG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGF0dHJpYnV0ZXMgd2VyZSBzZXQKKyAgaW4gYSBiYWNrd2FyZHMtY29tcGF0aWJsZSBmYXNoaW9uLCB1c2UgZS5nLgorICBgYGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lYGAuICAoOmlzc3VlOmAxNzExNWAuKQorCisqIDptZXRoOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgbm93IHNldHMgYGBfX2xvYWRlcl9fYGAgYW5kCisgIGBgX19wYWNrYWdlX19gYCB1bmNvbmRpdGlvbmFsbHkgdG8gcHJvcGVybHkgc3VwcG9ydCByZWxvYWRpbmcuIElmIHRoaXMgaXMgbm90CisgIGRlc2lyZWQgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIHNldCB0aGVzZSBhdHRyaWJ1dGVzIG1hbnVhbGx5LiBZb3UgY2FuIHVzZQorICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWRgIGZvciBtb2R1bGUgbWFuYWdlbWVudC4KKworKiBJbXBvcnQgbm93IHJlc2V0cyByZWxldmFudCBhdHRyaWJ1dGVzIChlLmcuIGBgX19uYW1lX19gYCwgYGBfX2xvYWRlcl9fYGAsCisgIGBgX19wYWNrYWdlX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCkgdW5jb25kaXRpb25hbGx5IHdoZW4gcmVsb2FkaW5nLgorICBOb3RlIHRoYXQgdGhpcyByZXN0b3JlcyBhIHByZS0zLjMgYmVoYXZpb3IgaW4gdGhhdCBpdCBtZWFucyBhIG1vZHVsZSBpcworICByZS1mb3VuZCB3aGVuIHJlLWxvYWRlZCAoOmlzc3VlOmAxOTQxM2ApLgorCisqIEZyb3plbiBwYWNrYWdlcyBubyBsb25nZXIgc2V0IGBgX19wYXRoX19gYCB0byBhIGxpc3QgY29udGFpbmluZyB0aGUgcGFja2FnZQorICBuYW1lLCB0aGV5IG5vdyBzZXQgaXQgdG8gYW4gZW1wdHkgbGlzdC4gIFRoZSBwcmV2aW91cyBiZWhhdmlvciBjb3VsZCBjYXVzZQorICB0aGUgaW1wb3J0IHN5c3RlbSB0byBkbyB0aGUgd3JvbmcgdGhpbmcgb24gc3VibW9kdWxlIGltcG9ydHMgaWYgdGhlcmUgd2FzCisgIGFsc28gYSBkaXJlY3Rvcnkgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBmcm96ZW4gcGFja2FnZS4gIFRoZSBjb3JyZWN0IHdheQorICB0byBkZXRlcm1pbmUgaWYgYSBtb2R1bGUgaXMgYSBwYWNrYWdlIG9yIG5vdCBpcyB0byB1c2UgYGBoYXNhdHRyKG1vZHVsZSwKKyAgJ19fcGF0aF9fJylgYCAoOmlzc3VlOmAxODA2NWApLgorCisqIEZyb3plbiBtb2R1bGVzIG5vIGxvbmdlciBkZWZpbmUgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLiBJdCdzIHNlbWFudGljYWxseQorICBpbmNvcnJlY3QgZm9yIGZyb3plbiBtb2R1bGVzIHRvIHNldCB0aGUgYXR0cmlidXRlIGFzIHRoZXkgYXJlIG5vdCBsb2FkZWQgZnJvbQorICBhbnkgZXhwbGljaXQgbG9jYXRpb24uIElmIHlvdSBtdXN0IGtub3cgdGhhdCBhIG1vZHVsZSBjb21lcyBmcm9tIGZyb3plbiBjb2RlCisgIHRoZW4geW91IGNhbiBzZWUgaWYgdGhlIG1vZHVsZSdzIGBgX19zcGVjX18ubG9jYXRpb25gYCBpcyBzZXQgdG8gYGAnZnJvemVuJ2BgLAorICBjaGVjayBpZiB0aGUgbG9hZGVyIGlzIGEgc3ViY2xhc3Mgb2YKKyAgOmNsYXNzOmBpbXBvcnRsaWIubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyYCwKKyAgb3IgaWYgUHl0aG9uIDIgY29tcGF0aWJpbGl0eSBpcyBuZWNlc3NhcnkgeW91IGNhbiB1c2UgOmZ1bmM6YGltcC5pc19mcm96ZW5gLgorCisqIDpmdW5jOmBweV9jb21waWxlLmNvbXBpbGVgIG5vdyByYWlzZXMgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpZiB0aGUgZmlsZSBwYXRoCisgIGl0IHdvdWxkIHdyaXRlIHRvIGlzIGEgc3ltbGluayBvciBhIG5vbi1yZWd1bGFyIGZpbGUuIFRoaXMgaXMgdG8gYWN0IGFzIGEKKyAgd2FybmluZyB0aGF0IGltcG9ydCB3aWxsIG92ZXJ3cml0ZSB0aG9zZSBmaWxlcyB3aXRoIGEgcmVndWxhciBmaWxlIHJlZ2FyZGxlc3MKKyAgb2Ygd2hhdCB0eXBlIG9mIGZpbGUgcGF0aCB0aGV5IHdlcmUgb3JpZ2luYWxseS4KKworKiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZWAgbm8gbG9uZ2VyIHJhaXNlcworICA6ZXhjOmBJbXBvcnRFcnJvcmAgd2hlbiB0aGUgc291cmNlIGNvZGUgYmVpbmcgbG9hZGVkIHRyaWdnZXJzIGEKKyAgOmV4YzpgU3ludGF4RXJyb3JgIG9yIDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmAuIEFzIDpleGM6YEltcG9ydEVycm9yYCBpcworICBtZWFudCB0byBiZSByYWlzZWQgb25seSB3aGVuIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSBmb3VuZCBidXQgaXQgc2hvdWxkLCBpdCB3YXMKKyAgZmVsdCB0byBiZSBvdmVyLXJlYWNoaW5nL292ZXJsb2FkaW5nIG9mIHRoYXQgbWVhbmluZyB3aGVuIHRoZSBzb3VyY2UgY29kZSBpcworICBmb3VuZCBidXQgaW1wcm9wZXJseSBzdHJ1Y3R1cmVkLiBJZiB5b3Ugd2VyZSBjYXRjaGluZyBJbXBvcnRFcnJvciBiZWZvcmUgYW5kCisgIHdpc2ggdG8gY29udGludWUgdG8gaWdub3JlIHN5bnRheCBvciBkZWNvZGluZyBpc3N1ZXMsIGNhdGNoIGFsbCB0aHJlZQorICBleGNlcHRpb25zIG5vdy4KKworKiA6ZnVuYzpgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyYCBhbmQgOmZ1bmM6YGZ1bmN0b29scy53cmFwc2Agbm93IGNvcnJlY3RseQorICBzZXQgdGhlIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgdG8gdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQsIGV2ZW4gaWYKKyAgdGhhdCBmdW5jdGlvbiBhbHNvIGhhZCBpdHMgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBzZXQuIFRoaXMgbWVhbnMKKyAgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZXMgbm93IGNvcnJlY3RseSBsaW5rIGEgc3RhY2sgb2YgZGVjb3JhdGVkCisgIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBldmVyeSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIGluIHRoZSBjaGFpbgorICByZWZlcnJpbmcgdG8gdGhlIGlubmVybW9zdCBmdW5jdGlvbi4gSW50cm9zcGVjdGlvbiBsaWJyYXJpZXMgdGhhdAorICBhc3N1bWVkIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgd2FzIGludGVudGlvbmFsIGNhbiB1c2UKKyAgOmZ1bmM6YGluc3BlY3QudW53cmFwYCB0byBhY2Nlc3MgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBjaGFpbiB0aGF0IGhhcworICBubyBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlLgorCisqIDpmdW5jOmBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjYCBoYXMgYmVlbiByZWltcGxlbWVudGVkIG9uIHRvcCBvZgorICA6ZnVuYzpgaW5zcGVjdC5zaWduYXR1cmVgIGFuZCBoZW5jZSBoYW5kbGVzIGEgbXVjaCB3aWRlciB2YXJpZXR5IG9mIGNhbGxhYmxlCisgIG9iamVjdHMgdGhhbiBpdCBkaWQgaW4gdGhlIHBhc3QuIEl0IGlzIGV4cGVjdGVkIHRoYXQgYWRkaXRpb25hbCBidWlsdGluIGFuZAorICBleHRlbnNpb24gbW9kdWxlIGNhbGxhYmxlcyB3aWxsIGdhaW4gc2lnbmF0dXJlIG1ldGFkYXRhIG92ZXIgdGhlIGNvdXJzZSBvZgorICB0aGUgUHl0aG9uIDMuNCBzZXJpZXMuIENvZGUgdGhhdCBhc3N1bWVzIHRoYXQKKyAgOmZ1bmM6YGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWNgIHdpbGwgZmFpbCBvbiBub24tUHl0aG9uIGNhbGxhYmxlcyBtYXkgbmVlZAorICB0byBiZSBhZGp1c3RlZCBhY2NvcmRpbmdseS4KKworKiA6Y2xhc3M6YGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlcmAgbm93IHBhc3NlcyBvbiB0aGUgY3VycmVudCB3b3JraW5nCisgIGRpcmVjdG9yeSB0byBvYmplY3RzIGluIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgZm9yIHRoZSBlbXB0eSBzdHJpbmcuIFRoaXMKKyAgcmVzdWx0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIG5ldmVyIGNvbnRhaW5pbmcgYGAnJ2BgLCB0aHVzCisgIGl0ZXJhdGluZyB0aHJvdWdoIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYmFzZWQgb24gOmRhdGE6YHN5cy5wYXRoYAorICB3aWxsIG5vdCBmaW5kIGFsbCBrZXlzLiBBIG1vZHVsZSdzIGBgX19maWxlX19gYCB3aGVuIGltcG9ydGVkIGluIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYWxzbyBub3cgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoLCBpbmNsdWRpbmcgd2hlbiB1c2luZworICBgYC1tYGAgd2l0aCB0aGUgaW50ZXJwcmV0ZXIgKGV4Y2VwdCBmb3IgYGBfX21haW5fXy5fX2ZpbGVfX2BgIHdoZW4gYSBzY3JpcHQKKyAgaGFzIGJlZW4gZXhlY3V0ZWQgZGlyZWN0bHkgdXNpbmcgYSByZWxhdGl2ZSBwYXRoKSAoQ29udHJpYnV0ZWQgYnkgQnJldHQKKyAgQ2Fubm9uIGluIDppc3N1ZTpgMTg0MTZgKS4gIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lKQorICAoOmlzc3VlOmAxODQxNmApLgorCisqIFRoZSByZW1vdmFsIG9mIHRoZSAqc3RyaWN0KiBhcmd1bWVudCB0byA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbmAKKyAgYW5kIDpjbGFzczpgfmh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbmAgY2hhbmdlcyB0aGUgbWVhbmluZyBvZiB0aGUKKyAgcmVtYWluaW5nIGFyZ3VtZW50cyBpZiB5b3UgYXJlIHNwZWNpZnlpbmcgdGhlbSBwb3NpdGlvbmFsbHkgcmF0aGVyIHRoYW4gYnkKKyAga2V5d29yZC4gIElmIHlvdSd2ZSBiZWVuIHBheWluZyBhdHRlbnRpb24gdG8gZGVwcmVjYXRpb24gd2FybmluZ3MgeW91ciBjb2RlCisgIHNob3VsZCBhbHJlYWR5IGJlIHNwZWNpZnlpbmcgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIHZpYSBrZXl3b3Jkcy4KKworKiBTdHJpbmdzIGJldHdlZW4gYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IC4uLmBgIHN0YXRlbWVudHMgbm93ICphbHdheXMqIHJhaXNlCisgIGEgOmV4YzpgU3ludGF4RXJyb3JgLiAgUHJldmlvdXNseSBpZiB0aGVyZSB3YXMgbm8gbGVhZGluZyBkb2NzdHJpbmcsIGFuCisgIGludGVyc3RpdGlhbCBzdHJpbmcgd291bGQgc29tZXRpbWVzIGJlIGlnbm9yZWQuICBUaGlzIGJyaW5ncyBDUHl0aG9uIGludG8KKyAgY29tcGxpYW5jZSB3aXRoIHRoZSBsYW5ndWFnZSBzcGVjOyBKeXRob24gYW5kIFB5UHkgYWxyZWFkeSB3ZXJlLgorICAoOmlzc3VlOmAxNzQzNGApLgorCisqIDptZXRoOmBzc2wuU1NMU29ja2V0LmdldHBlZXJjZXJ0YCBhbmQgOm1ldGg6YHNzbC5TU0xTb2NrZXQuZG9faGFuZHNoYWtlYAorICBub3cgcmFpc2UgYW4gOmV4YzpgT1NFcnJvcmAgd2l0aCBgYEVOT1RDT05OYGAgd2hlbiB0aGUgYGBTU0xTb2NrZXRgYCBpcyBub3QKKyAgY29ubmVjdGVkLCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBiZWhhdmlvciBvZiByYWlzaW5nIGFuCisgIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4gIEluIGFkZGl0aW9uLCA6bWV0aDpgfnNzbC5TU0xTb2NrZXQuZ2V0cGVlcmNlcnRgCisgIHdpbGwgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiB0aGUgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gZG9uZS4KKworKiA6ZnVuYzpgYmFzZTY0LmIzMmRlY29kZWAgbm93IHJhaXNlcyBhIDpleGM6YGJpbmFzY2lpLkVycm9yYCB3aGVuIHRoZQorICBpbnB1dCBzdHJpbmcgY29udGFpbnMgbm9uLWIzMi1hbHBoYWJldCBjaGFyYWN0ZXJzLCBpbnN0ZWFkIG9mIGEKKyAgOmV4YzpgVHlwZUVycm9yYC4gIFRoaXMgcGFydGljdWxhciA6ZXhjOmBUeXBlRXJyb3JgIHdhcyBtaXNzZWQgd2hlbiB0aGUgb3RoZXIKKyAgOmV4YzpgVHlwZUVycm9yYFwgcyB3ZXJlIGNvbnZlcnRlZC4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluCisgIDppc3N1ZTpgMTgwMTFgLikgIE5vdGU6IHRoaXMgY2hhbmdlIHdhcyBhbHNvIGluYWR2ZXJ0ZW50bHkgYXBwbGllZCBpbiBQeXRob24KKyAgMy4zLjMuCisKKyogVGhlIDphdHRyOmB+Y2dpLkZpZWxkU3RvcmFnZS5maWxlYCBhdHRyaWJ1dGUgaXMgbm93IGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4KKyAgdGhlIGNyZWF0aW5nIDpjbGFzczpgY2dpLkZpZWxkU3RvcmFnZWAgaW5zdGFuY2UgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIElmIHlvdQorICB3ZXJlIHB1bGxpbmcgdGhlIGZpbGUgb2JqZWN0IG91dCBzZXBhcmF0ZWx5IGZyb20gdGhlIDpjbGFzczpgY2dpLkZpZWxkU3RvcmFnZWAKKyAgaW5zdGFuY2UgYW5kIG5vdCBrZWVwaW5nIHRoZSBpbnN0YW5jZSBhbGl2ZSwgdGhlbiB5b3Ugc2hvdWxkIGVpdGhlciBzdG9yZSB0aGUKKyAgZW50aXJlIDpjbGFzczpgY2dpLkZpZWxkU3RvcmFnZWAgaW5zdGFuY2Ugb3IgcmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUKKyAgYmVmb3JlIHRoZSA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgIGluc3RhbmNlIGlzIGdhcmJhZ2UgY29sbGVjdGVkLgorCisqIENhbGxpbmcgYGByZWFkYGAgb3IgYGB3cml0ZWBgIG9uIGEgY2xvc2VkIFNTTCBzb2NrZXQgbm93IHJhaXNlcyBhbgorICBpbmZvcm1hdGl2ZSA6ZXhjOmBWYWx1ZUVycm9yYCByYXRoZXIgdGhhbiB0aGUgcHJldmlvdXMgbW9yZSBteXN0ZXJpb3VzCisgIDpleGM6YEF0dHJpYnV0ZUVycm9yYCAoOmlzc3VlOmA5MTc3YCkuCisKKyogOm1ldGg6YHNsaWNlLmluZGljZXNgIG5vIGxvbmdlciBwcm9kdWNlcyBhbiA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBmb3IgaHVnZQorICB2YWx1ZXMuICBBcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMgZml4LCA6bWV0aDpgc2xpY2UuaW5kaWNlc2Agbm93IHJhaXNlcyBhCisgIDpleGM6YFZhbHVlRXJyb3JgIGlmIGdpdmVuIGEgbmVnYXRpdmUgbGVuZ3RoOyBwcmV2aW91c2x5IGl0IHJldHVybmVkIG5vbnNlbnNlCisgIHZhbHVlcyAoOmlzc3VlOmAxNDc5NGApLgorCisqIFRoZSA6Y2xhc3M6YGNvbXBsZXhgIGNvbnN0cnVjdG9yLCB1bmxpa2UgdGhlIDptb2Q6YGNtYXRoYCBmdW5jdGlvbnMsIHdhcworICBpbmNvcnJlY3RseSBhY2NlcHRpbmcgOmNsYXNzOmBmbG9hdGAgdmFsdWVzIGlmIGFuIG9iamVjdCdzIGBgX19jb21wbGV4X19gYAorICBzcGVjaWFsIG1ldGhvZCByZXR1cm5lZCBvbmUuICBUaGlzIG5vdyByYWlzZXMgYSA6ZXhjOmBUeXBlRXJyb3JgLgorICAoOmlzc3VlOmAxNjI5MGAuKQorCisqIFRoZSA6Y2xhc3M6YGludGAgY29uc3RydWN0b3IgaW4gMy4yIGFuZCAzLjMgZXJyb25lb3VzbHkgYWNjZXB0cyA6Y2xhc3M6YGZsb2F0YAorICB2YWx1ZXMgZm9yIHRoZSAqYmFzZSogcGFyYW1ldGVyLiAgSXQgaXMgdW5saWtlbHkgYW55b25lIHdhcyBkb2luZyB0aGlzLCBidXQKKyAgaWYgc28sIGl0IHdpbGwgbm93IHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCAoOmlzc3VlOmAxNjc3MmApLgorCisqIERlZmF1bHRzIGZvciBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIGFyZSBub3cgZXZhbHVhdGVkICphZnRlciogZGVmYXVsdHMgZm9yCisgIHJlZ3VsYXIga2V5d29yZCBhcmd1bWVudHMsIGluc3RlYWQgb2YgYmVmb3JlLiAgSG9wZWZ1bGx5IG5vIG9uZSB3cm90ZSBhbnkKKyAgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGJ1Z2d5IGJlaGF2aW9yICg6aXNzdWU6YDE2OTY3YCkuCisKKyogU3RhbGUgdGhyZWFkIHN0YXRlcyBhcmUgbm93IGNsZWFyZWQgYWZ0ZXIgOmZ1bmM6YH5vcy5mb3JrYC4gIFRoaXMgbWF5IGNhdXNlCisgIHNvbWUgc3lzdGVtIHJlc291cmNlcyB0byBiZSByZWxlYXNlZCB0aGF0IHByZXZpb3VzbHkgd2VyZSBpbmNvcnJlY3RseSBrZXB0CisgIHBlcnBldHVhbGx5IGFsaXZlIChmb3IgZXhhbXBsZSwgZGF0YWJhc2UgY29ubmVjdGlvbnMga2VwdCBpbiB0aHJlYWQtbG9jYWwKKyAgc3RvcmFnZSkuICAoOmlzc3VlOmAxNzA5NGAuKQorCisqIFBhcmFtZXRlciBuYW1lcyBpbiBgYF9fYW5ub3RhdGlvbnNfX2BgIGRpY3RzIGFyZSBub3cgbWFuZ2xlZCBwcm9wZXJseSwKKyAgc2ltaWxhcmx5IHRvIGBgX19rd2RlZmF1bHRzX19gYC4gKENvbnRyaWJ1dGVkIGJ5IFl1cnkgU2VsaXZhbm92IGluCisgIDppc3N1ZTpgMjA2MjVgKS4KKworKiA6YXR0cjpgaGFzaGxpYi5oYXNoLm5hbWVgIG5vdyBhbHdheXMgcmV0dXJucyB0aGUgaWRlbnRpZmllciBpbiBsb3dlciBjYXNlLgorICBQcmV2aW91c2x5IHNvbWUgYnVpbHRpbiBoYXNoZXMgaGFkIHVwcGVyY2FzZSBuYW1lcywgYnV0IG5vdyB0aGF0IGl0IGlzIGEKKyAgZm9ybWFsIHB1YmxpYyBpbnRlcmZhY2UgdGhlIG5hbWluZyBoYXMgYmVlbiBtYWRlIGNvbnNpc3RlbnQgKDppc3N1ZTpgMTg1MzJgKS4KKworKiBCZWNhdXNlIDptb2Q6YHVuaXR0ZXN0LlRlc3RTdWl0ZWAgbm93IGRyb3BzIHJlZmVyZW5jZXMgdG8gdGVzdHMgYWZ0ZXIgdGhleQorICBhcmUgcnVuLCB0ZXN0IGhhcm5lc3NlcyB0aGF0IHJlLXVzZSBhIDpjbGFzczpgfnVuaXR0ZXN0LlRlc3RTdWl0ZWAgdG8gcmUtcnVuCisgIGEgc2V0IG9mIHRlc3RzIG1heSBmYWlsLiAgIFRlc3Qgc3VpdGVzIHNob3VsZCBub3QgYmUgcmUtdXNlZCBpbiB0aGlzIGZhc2hpb24KKyAgc2luY2UgaXQgbWVhbnMgc3RhdGUgaXMgcmV0YWluZWQgYmV0d2VlbiB0ZXN0IHJ1bnMsIGJyZWFraW5nIHRoZSB0ZXN0CisgIGlzb2xhdGlvbiB0aGF0IDptb2Q6YHVuaXR0ZXN0YCBpcyBkZXNpZ25lZCB0byBwcm92aWRlLiAgSG93ZXZlciwgaWYgdGhlIGxhY2sKKyAgb2YgaXNvbGF0aW9uIGlzIGNvbnNpZGVyZWQgYWNjZXB0YWJsZSwgdGhlIG9sZCBiZWhhdmlvciBjYW4gYmUgcmVzdG9yZWQgYnkKKyAgY3JlYXRpbmcgYSA6bW9kOmB+dW5pdHRlc3QuVGVzdFN1aXRlYCBzdWJjbGFzcyB0aGF0IGRlZmluZXMgYQorICBgYF9yZW1vdmVUZXN0QXRJbmRleGBgIG1ldGhvZCB0aGF0IGRvZXMgbm90aGluZyAoc2VlCisgIDptZXRoOmAuVGVzdFN1aXRlLl9faXRlcl9fYCkgKDppc3N1ZTpgMTE3OThgKS4KKworKiA6bW9kOmB1bml0dGVzdGAgbm93IHVzZXMgOm1vZDpgYXJncGFyc2VgIGZvciBjb21tYW5kIGxpbmUgcGFyc2luZy4gIFRoZXJlIGFyZQorICBjZXJ0YWluIGludmFsaWQgY29tbWFuZCBmb3JtcyB0aGF0IHVzZWQgdG8gd29yayB0aGF0IGFyZSBubyBsb25nZXIgYWxsb3dlZDsKKyAgaW4gdGhlb3J5IHRoaXMgc2hvdWxkIG5vdCBjYXVzZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlcyBzaW5jZSB0aGUKKyAgZGlzYWxsb3dlZCBjb21tYW5kIGZvcm1zIGRpZG4ndCBtYWtlIGFueSBzZW5zZSBhbmQgYXJlIHVubGlrZWx5IHRvIGJlIGluIHVzZS4KKworKiBUaGUgOmZ1bmM6YHJlLnNwbGl0YCwgOmZ1bmM6YHJlLmZpbmRhbGxgLCBhbmQgOmZ1bmM6YHJlLnN1YmAgZnVuY3Rpb25zLCBhbmQKKyAgdGhlIDptZXRoOmB+cmUubWF0Y2guZ3JvdXBgIGFuZCA6bWV0aDpgfnJlLm1hdGNoLmdyb3Vwc2AgbWV0aG9kcyBvZgorICBgYG1hdGNoYGAgb2JqZWN0cyBub3cgYWx3YXlzIHJldHVybiBhICpieXRlcyogb2JqZWN0IHdoZW4gdGhlIHN0cmluZworICB0byBiZSBtYXRjaGVkIGlzIGEgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4gIFByZXZpb3VzbHkgdGhlIHJldHVybiB0eXBlCisgIG1hdGNoZWQgdGhlIGlucHV0IHR5cGUsIHNvIGlmIHlvdXIgY29kZSB3YXMgZGVwZW5kaW5nIG9uIHRoZSByZXR1cm4gdmFsdWUKKyAgYmVpbmcsIHNheSwgYSBgYGJ5dGVhcnJheWBgLCB5b3Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB5b3VyIGNvZGUuCisKKyogOm1vZDpgYXVkaW9vcGAgZnVuY3Rpb25zIG5vdyByYWlzZSBhbiBlcnJvciBpbW1lZGlhdGVseSBpZiBwYXNzZWQgc3RyaW5nCisgIGlucHV0LCBpbnN0ZWFkIG9mIGZhaWxpbmcgcmFuZG9tbHkgbGF0ZXIgb24gKDppc3N1ZTpgMTY2ODVgKS4KKworKiBUaGUgbmV3ICpjb252ZXJ0X2NoYXJyZWZzKiBhcmd1bWVudCB0byA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYAorICBjdXJyZW50bHkgZGVmYXVsdHMgdG8gYGBGYWxzZWBgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBidXQgd2lsbAorICBldmVudHVhbGx5IGJlIGNoYW5nZWQgdG8gZGVmYXVsdCB0byBgYFRydWVgYC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGFkZAorICB0aGlzIGtleXdvcmQsIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlLCB0byBhbnkKKyAgOmNsYXNzOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlcmAgY2FsbHMgaW4geW91ciBjb2RlICg6aXNzdWU6YDEzNjMzYCkuCisKKyogU2luY2UgdGhlICpkaWdlc3Rtb2QqIGFyZ3VtZW50IHRvIHRoZSA6ZnVuYzpgaG1hYy5uZXdgIGZ1bmN0aW9uIHdpbGwgaW4gdGhlCisgIGZ1dHVyZSBoYXZlIG5vIGRlZmF1bHQsIGFsbCBjYWxscyB0byA6ZnVuYzpgaG1hYy5uZXdgIHNob3VsZCBiZSBjaGFuZ2VkIHRvCisgIGV4cGxpY2l0bHkgc3BlY2lmeSBhICpkaWdlc3Rtb2QqICg6aXNzdWU6YDE3Mjc2YCkuCisKKyogQ2FsbGluZyA6ZnVuYzpgc3lzY29uZmlnLmdldF9jb25maWdfdmFyYCB3aXRoIHRoZSBgYFNPYGAga2V5LCBvciBsb29raW5nCisgIGBgU09gYCB1cCBpbiB0aGUgcmVzdWx0cyBvZiBhIGNhbGwgdG8gOmZ1bmM6YHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnNgCisgIGlzIGRlcHJlY2F0ZWQuICBUaGlzIGtleSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYGBFWFRfU1VGRklYYGAgb3IKKyAgYGBTSExJQl9TVUZGSVhgYCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0ICg6aXNzdWU6YDE5NTU1YCkuCisKKyogQW55IGNhbGxzIHRvIGBgb3BlbmBgIGZ1bmN0aW9ucyB0aGF0IHNwZWNpZnkgYGBVYGAgc2hvdWxkIGJlIG1vZGlmaWVkLgorICBgYFVgYCBpcyBpbmVmZmVjdGl2ZSBpbiBQeXRob24zIGFuZCB3aWxsIGV2ZW50dWFsbHkgcmFpc2UgYW4gZXJyb3IgaWYgdXNlZC4KKyAgRGVwZW5kaW5nIG9uIHRoZSBmdW5jdGlvbiwgdGhlIGVxdWl2YWxlbnQgb2YgaXRzIG9sZCBQeXRob24yIGJlaGF2aW9yIGNhbiBiZQorICBhY2hpZXZlZCB1c2luZyBlaXRoZXIgYSAqbmV3bGluZSogYXJndW1lbnQsIG9yIGlmIG5lY2Vzc2FyeSBieSB3cmFwcGluZyB0aGUKKyAgc3RyZWFtIGluIDptb2Q6YH5pby5UZXh0SU9XcmFwcGVyYCB0byB1c2UgaXRzICpuZXdsaW5lKiBhcmd1bWVudAorICAoOmlzc3VlOmAxNTIwNGApLgorCisqIElmIHlvdSB1c2UgOnJlZjpgcHl2ZW52IDxzY3JpcHRzLXB5dmVudj5gIGluIGEgc2NyaXB0IGFuZCBkZXNpcmUgdGhhdCBwaXAKKyAgKm5vdCogYmUgaW5zdGFsbGVkLCB5b3UgbXVzdCBhZGQgYGAtLXdpdGhvdXQtcGlwYGAgdG8geW91ciBjb21tYW5kCisgIGludm9jYXRpb24uCisKKyogVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgOmZ1bmM6YGpzb24uZHVtcGAgYW5kIDpmdW5jOmBqc29uLmR1bXBzYCB3aGVuCisgIGFuIGluZGVudCBpcyBzcGVjaWZpZWQgaGFzIGNoYW5nZWQ6IGl0IG5vIGxvbmdlciBwcm9kdWNlcyB0cmFpbGluZworICBzcGFjZXMgYWZ0ZXIgdGhlIGl0ZW0gc2VwYXJhdGluZyBjb21tYXMgYXQgdGhlIGVuZHMgb2YgbGluZXMuICBUaGlzCisgIHdpbGwgbWF0dGVyIG9ubHkgaWYgeW91IGhhdmUgdGVzdHMgdGhhdCBhcmUgZG9pbmcgd2hpdGUtc3BhY2Utc2Vuc2l0aXZlCisgIGNvbXBhcmlzb25zIG9mIHN1Y2ggb3V0cHV0ICg6aXNzdWU6YDE2MzMzYCkuCisKKyogOm1vZDpgZG9jdGVzdGAgbm93IGxvb2tzIGZvciBkb2N0ZXN0cyBpbiBleHRlbnNpb24gbW9kdWxlIGBgX19kb2NfX2BgCisgIHN0cmluZ3MsIHNvIGlmIHlvdXIgZG9jdGVzdCB0ZXN0IGRpc2NvdmVyeSBpbmNsdWRlcyBleHRlbnNpb24gbW9kdWxlcyB0aGF0CisgIGhhdmUgdGhpbmdzIHRoYXQgbG9vayBsaWtlIGRvY3Rlc3RzIGluIHRoZW0geW91IG1heSBzZWUgdGVzdCBmYWlsdXJlcyB5b3UndmUKKyAgbmV2ZXIgc2VlbiBiZWZvcmUgd2hlbiBydW5uaW5nIHlvdXIgdGVzdHMgKDppc3N1ZTpgMzE1OGApLgorCisqIFRoZSA6bW9kOmBjb2xsZWN0aW9ucy5hYmNgIG1vZHVsZSBoYXMgYmVlbiBzbGlnaHRseSByZWZhY3RvcmVkIGFzCisgIHBhcnQgb2YgdGhlIFB5dGhvbiBzdGFydHVwIGltcHJvdmVtZW50cy4gIEFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcywgaXQgaXMgbm8KKyAgbG9uZ2VyIHRoZSBjYXNlIHRoYXQgaW1wb3J0aW5nIDptb2Q6YGNvbGxlY3Rpb25zYCBhdXRvbWF0aWNhbGx5IGltcG9ydHMKKyAgOm1vZDpgY29sbGVjdGlvbnMuYWJjYC4gIElmIHlvdXIgcHJvZ3JhbSBkZXBlbmRlZCBvbiB0aGUgKHVuZG9jdW1lbnRlZCkKKyAgaW1wbGljaXQgaW1wb3J0LCB5b3Ugd2lsbCBuZWVkIHRvIGFkZCBhbiBleHBsaWNpdCBgYGltcG9ydCBjb2xsZWN0aW9ucy5hYmNgYAorICAoOmlzc3VlOmAyMDc4NGApLgorCisKK0NoYW5nZXMgaW4gdGhlIEMgQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIDpjOmZ1bmM6YFB5RXZhbF9FdmFsRnJhbWVFeGAsIDpjOmZ1bmM6YFB5T2JqZWN0X1JlcHJgLCBhbmQKKyAgOmM6ZnVuYzpgUHlPYmplY3RfU3RyYCwgYWxvbmcgd2l0aCBzb21lIG90aGVyIGludGVybmFsIEMgQVBJcywgbm93IGluY2x1ZGUKKyAgYSBkZWJ1Z2dpbmcgYXNzZXJ0aW9uIHRoYXQgZW5zdXJlcyB0aGV5IGFyZSBub3QgdXNlZCBpbiBzaXR1YXRpb25zIHdoZXJlCisgIHRoZXkgbWF5IHNpbGVudGx5IGRpc2NhcmQgYSBjdXJyZW50bHkgYWN0aXZlIGV4Y2VwdGlvbi4gSW4gY2FzZXMgd2hlcmUKKyAgZGlzY2FyZGluZyB0aGUgYWN0aXZlIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCBhbmQgZGVzaXJlZCAoZm9yIGV4YW1wbGUsCisgIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCBsb2NhbGx5IHdpdGggOmM6ZnVuYzpgUHlFcnJfRmV0Y2hgIG9yCisgIGlzIGJlaW5nIGRlbGliZXJhdGVseSByZXBsYWNlZCB3aXRoIGEgZGlmZmVyZW50IGV4Y2VwdGlvbiksIGFuIGV4cGxpY2l0CisgIDpjOmZ1bmM6YFB5RXJyX0NsZWFyYCBjYWxsIHdpbGwgYmUgbmVlZGVkIHRvIGF2b2lkIHRyaWdnZXJpbmcgdGhlCisgIGFzc2VydGlvbiB3aGVuIGludm9raW5nIHRoZXNlIG9wZXJhdGlvbnMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZAorICBydW5uaW5nIGFnYWluc3QgYSB2ZXJzaW9uIG9mIFB5dGhvbiB0aGF0IGlzIGNvbXBpbGVkIHdpdGggYXNzZXJ0aW9ucworICBlbmFibGVkLgorCisqIDpjOmZ1bmM6YFB5RXJyX1NldEltcG9ydEVycm9yYCBub3cgc2V0cyA6ZXhjOmBUeXBlRXJyb3JgIHdoZW4gaXRzICoqbXNnKioKKyAgYXJndW1lbnQgaXMgbm90IHNldC4gUHJldmlvdXNseSBvbmx5IGBgTlVMTGBgIHdhcyByZXR1cm5lZCB3aXRoIG5vIGV4Y2VwdGlvbgorICBzZXQuCisKKyogVGhlIHJlc3VsdCBvZiB0aGUgOmM6ZGF0YTpgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcmAgY2FsbGJhY2sgbXVzdAorICBub3cgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIG9yICpOVUxMKiBpZiBhbiBlcnJvciBvY2N1cnJlZCwgaW5zdGVhZCBvZiBhCisgIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYAorICAoOmlzc3VlOmAxNjc0MmApCisKKyogOmM6ZnVuYzpgUHlUaHJlYWRfc2V0X2tleV92YWx1ZWAgbm93IGFsd2F5cyBzZXQgdGhlIHZhbHVlLiBJbiBQeXRob24KKyAgMy4zLCB0aGUgZnVuY3Rpb24gZGlkIG5vdGhpbmcgaWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cyAoaWYgdGhlIGN1cnJlbnQKKyAgdmFsdWUgaXMgYSBub24tTlVMTCBwb2ludGVyKS4KKworKiBUaGUgYGBmX3RzdGF0ZWBgICh0aHJlYWQgc3RhdGUpIGZpZWxkIG9mIHRoZSA6Yzp0eXBlOmBQeUZyYW1lT2JqZWN0YAorICBzdHJ1Y3R1cmUgaGFzIGJlZW4gcmVtb3ZlZCB0byBmaXggYSBidWc6IHNlZSA6aXNzdWU6YDE0NDMyYCBmb3IgdGhlCisgIHJhdGlvbmFsZS4KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QgYi9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CmluZGV4IGJjMTIwNmIuLjI5OTAyZTQgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QKKysrIGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdApAQCAtMTEsNiArMTEsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKIAorICAgMy40LnJzdAogICAgMy4zLnJzdAogICAgMy4yLnJzdAogICAgMy4xLnJzdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24tYXN0LmggYi9JbmNsdWRlL1B5dGhvbi1hc3QuaAppbmRleCAwMGU5MmQwLi42N2Q2NzdiIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi1hc3QuaAorKysgYi9JbmNsdWRlL1B5dGhvbi1hc3QuaApAQCAtMTgyLDggKzE4Miw5IEBACiAgICAgICAgICAgICAgICAgICBTZXRDb21wX2tpbmQ9OSwgRGljdENvbXBfa2luZD0xMCwgR2VuZXJhdG9yRXhwX2tpbmQ9MTEsCiAgICAgICAgICAgICAgICAgICBZaWVsZF9raW5kPTEyLCBZaWVsZEZyb21fa2luZD0xMywgQ29tcGFyZV9raW5kPTE0LAogICAgICAgICAgICAgICAgICAgQ2FsbF9raW5kPTE1LCBOdW1fa2luZD0xNiwgU3RyX2tpbmQ9MTcsIEJ5dGVzX2tpbmQ9MTgsCi0gICAgICAgICAgICAgICAgICBFbGxpcHNpc19raW5kPTE5LCBBdHRyaWJ1dGVfa2luZD0yMCwgU3Vic2NyaXB0X2tpbmQ9MjEsCi0gICAgICAgICAgICAgICAgICBTdGFycmVkX2tpbmQ9MjIsIE5hbWVfa2luZD0yMywgTGlzdF9raW5kPTI0LCBUdXBsZV9raW5kPTI1fTsKKyAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9raW5kPTE5LCBFbGxpcHNpc19raW5kPTIwLCBBdHRyaWJ1dGVfa2luZD0yMSwKKyAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdF9raW5kPTIyLCBTdGFycmVkX2tpbmQ9MjMsIE5hbWVfa2luZD0yNCwKKyAgICAgICAgICAgICAgICAgIExpc3Rfa2luZD0yNSwgVHVwbGVfa2luZD0yNn07CiBzdHJ1Y3QgX2V4cHIgewogICAgIGVudW0gX2V4cHJfa2luZCBraW5kOwogICAgIHVuaW9uIHsKQEAgLTI3OSw2ICsyODAsMTAgQEAKICAgICAgICAgfSBCeXRlczsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzaW5nbGV0b24gdmFsdWU7CisgICAgICAgIH0gTmFtZUNvbnN0YW50OworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAgICAgICAgICAgICBpZGVudGlmaWVyIGF0dHI7CiAgICAgICAgICAgICBleHByX2NvbnRleHRfdHkgY3R4OwpAQCAtMzU5LDE4ICszNjQsMTggQEAKIAogc3RydWN0IF9hcmd1bWVudHMgewogICAgIGFzZGxfc2VxICphcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxICprd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogICAgIGFzZGxfc2VxICprd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogfTsKIAogc3RydWN0IF9hcmcgewogICAgIGlkZW50aWZpZXIgYXJnOwogICAgIGV4cHJfdHkgYW5ub3RhdGlvbjsKKyAgICBpbnQgbGluZW5vOworICAgIGludCBjb2xfb2Zmc2V0OwogfTsKIAogc3RydWN0IF9rZXl3b3JkIHsKQEAgLTUwOSw2ICs1MTQsOSBAQAogZXhwcl90eSBfUHlfU3RyKHN0cmluZyBzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBCeXRlcyhhMCwgYTEsIGEyLCBhMykgX1B5X0J5dGVzKGEwLCBhMSwgYTIsIGEzKQogZXhwcl90eSBfUHlfQnl0ZXMoYnl0ZXMgcywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKSBfUHlfTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKQorZXhwcl90eSBfUHlfTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwogI2RlZmluZSBFbGxpcHNpcyhhMCwgYTEsIGEyKSBfUHlfRWxsaXBzaXMoYTAsIGExLCBhMikKIGV4cHJfdHkgX1B5X0VsbGlwc2lzKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIEF0dHJpYnV0ZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSBfUHlfQXR0cmlidXRlKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpCkBAIC01NDIsMTEgKzU1MCwxMCBAQAogZXhjZXB0aGFuZGxlcl90eSBfUHlfRXhjZXB0SGFuZGxlcihleHByX3R5IHR5cGUsIGlkZW50aWZpZXIgbmFtZSwgYXNkbF9zZXEgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwotI2RlZmluZSBhcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KQotYXJndW1lbnRzX3R5IF9QeV9hcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBpZGVudGlmaWVyIHZhcmFyZywgZXhwcl90eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiwgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywgZXhwcl90eSBrd2FyZ2Fubm90YXRpb24sIGFzZGxfc2VxICogZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqIGt3X2RlZmF1bHRzLCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIGFyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikKK2FyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncywgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgYXJnX3R5IGt3YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBhcmcoYTAsIGExLCBhMikgX1B5X2FyZyhhMCwgYTEsIGEyKQogYXJnX3R5IF9QeV9hcmcoaWRlbnRpZmllciBhcmcsIGV4cHJfdHkgYW5ub3RhdGlvbiwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBrZXl3b3JkKGEwLCBhMSwgYTIpIF9QeV9rZXl3b3JkKGEwLCBhMSwgYTIpCmRpZmYgLS1naXQgYS9JbmNsdWRlL1B5dGhvbi5oIGIvSW5jbHVkZS9QeXRob24uaAppbmRleCBhNzhhNzIxLi4yZGQ4MjkwIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi5oCisrKyBiL0luY2x1ZGUvUHl0aG9uLmgKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJvYmppbXBsLmgiCiAjaW5jbHVkZSAidHlwZXNsb3RzLmgiCisjaW5jbHVkZSAicHloYXNoLmgiCiAKICNpbmNsdWRlICJweWRlYnVnLmgiCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYWJzdHJhY3QuaCBiL0luY2x1ZGUvYWJzdHJhY3QuaAppbmRleCBjOTYyNGYzLi42ZTg1MGI4IDEwMDY0NAotLS0gYS9JbmNsdWRlL2Fic3RyYWN0LmgKKysrIGIvSW5jbHVkZS9hYnN0cmFjdC5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogICAgICAvKiBJbXBsZW1lbnRlZCBlbHNld2hlcmU6CiAKLSAgICAgaW50IFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSk7CisgICAgIGludCBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUpOwogCiAgICAgIFJldHVybnMgMSBpZiBvIGhhcyB0aGUgYXR0cmlidXRlIGF0dHJfbmFtZSwgYW5kIDAgb3RoZXJ3aXNlLgogICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uOgpAQCAtMTU2LDcgKzE1Niw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIFB5T2JqZWN0KiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBQeU9iamVjdCogUHlPYmplY3RfR2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBSZXRyaWV2ZSBhbiBhdHRyaWJ1dGVkIG5hbWVkIGF0dHJfbmFtZSBmb3JtIG9iamVjdCBvLgogICAgICBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgpAQCAtMTg5LDcgKzE4OSw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIGludCBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KTsKKyAgICAgaW50IFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSwgUHlPYmplY3QgKnYpOwogCiAgICAgIFNldCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCBhdHRyX25hbWUsIGZvciBvYmplY3QgbywKICAgICAgdG8gdGhlIHZhbHVlLCB2LiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzCkBAIC0yMDksNyArMjA5LDcgQEAKIAogICAgICAvKiBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvOgogCi0gICAgIGludCBQeU9iamVjdF9EZWxBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBpbnQgUHlPYmplY3RfRGVsQXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBEZWxldGUgYXR0cmlidXRlIG5hbWVkIGF0dHJfbmFtZSwgZm9yIG9iamVjdCBvLiBSZXR1cm5zCiAgICAgIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24KQEAgLTI4NCw3ICsyODQsNyBAQAogICAgICAgICovCiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlX29iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKICAgICAgICAvKgogICAgICBDYWxsIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCwgY2FsbGFibGVfb2JqZWN0LCB3aXRoIGEKQEAgLTI5Niw4ICsyOTYsOSBAQAogICAgICAgICovCiAKIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNoYXIgKm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgQ2FsbCB0aGUgbWV0aG9kIG5hbWVkIG0gb2Ygb2JqZWN0IG8gd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZgpAQCAtMzA4LDggKzMwOSw5IEBACiAgICAgIFB5dGhvbiBleHByZXNzaW9uOiBvLm1ldGhvZChhcmdzKS4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfSWRlbnRpZmllciAqbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgICAgIExpa2UgUHlPYmplY3RfQ2FsbE1ldGhvZCwgYnV0IGV4cGVjdCBhIF9QeV9JZGVudGlmaWVyKiBhcyB0aGUKQEAgLTMxNywxMyArMzE5LDE2IEBACiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVChQeU9iamVjdCAqbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWRfU2l6ZVQoUHlPYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0lkZW50aWZpZXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwpAQCAtMzM5LDExICszNDQsMTAgQEAKIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptZXRob2QsIC4uLik7Ci0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoUHlPYmplY3QgKm8sCisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoUHlPYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogCi0KICAgICAgICAvKgogICAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgbSBvZiBvYmplY3QgbyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mCiAgICAgIEMgYXJndW1lbnRzLiAgVGhlIEMgYXJndW1lbnRzIGFyZSBwcm92aWRlZCBhcyBQeU9iamVjdCAqCkBAIC00MDQsNyArNDA4LDggQEAKICNkZWZpbmUgUHlPYmplY3RfTGVuZ3RoIFB5T2JqZWN0X1NpemUKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotICAgICBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90KTsKKyAgICAgUHlBUElfRlVOQyhpbnQpIF9QeU9iamVjdF9IYXNMZW4oUHlPYmplY3QgKm8pOworICAgICBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIFB5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QpOwogI2VuZGlmCiAKICAgICAgICAvKgpAQCAtNDI5LDcgKzQzNCw3IEBACiAgICAgIHN0YXRlbWVudDogb1trZXldPXYuCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCwga2V5LCBmcm9tIHRoZSBvYmplY3QgKm8uCkBAIC0xMDE2LDcgKzEwMjEsNyBAQAogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTZXF1ZW5jZV9GYXN0KFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyKiBtKTsKICAgICAgICAvKgotICAgICBSZXR1cm5zIHRoZSBzZXF1ZW5jZSwgbywgYXMgYSBsaXN0LCB1bmxlc3MgaXQncyBhbHJlYWR5IGEKKyAgICAgUmV0dXJuIHRoZSBzZXF1ZW5jZSwgbywgYXMgYSBsaXN0LCB1bmxlc3MgaXQncyBhbHJlYWR5IGEKICAgICAgdHVwbGUgb3IgbGlzdC4gIFVzZSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0gdG8gYWNjZXNzIHRoZQogICAgICBtZW1iZXJzIG9mIHRoaXMgbGlzdCwgYW5kIFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRSB0byBnZXQgaXRzIGxlbmd0aC4KIApAQCAtMTE1MSw3ICsxMTU2LDcgQEAKIAogICAgICAvKiBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvOgogCi0gICAgIGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgaW50IFB5TWFwcGluZ19EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpOwogCiAgICAgIFJlbW92ZSB0aGUgbWFwcGluZyBmb3Igb2JqZWN0LCBrZXksIGZyb20gdGhlIG9iamVjdCAqby4KICAgICAgUmV0dXJucyAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCkBAIC0xMTY5LDcgKzExNzQsNyBAQAogICAgICAgICovCiAjZGVmaW5lIFB5TWFwcGluZ19EZWxJdGVtKE8sSykgUHlPYmplY3RfRGVsSXRlbSgoTyksKEspKQogCi0gICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICAgIC8qCiAgICAgIE9uIHN1Y2Nlc3MsIHJldHVybiAxIGlmIHRoZSBtYXBwaW5nIG9iamVjdCBoYXMgdGhlIGtleSwga2V5LApAQCAtMTIxMyw3ICsxMjE4LDggQEAKIAogICAgICAgICovCiAKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXkpOwogCiAgICAgICAgLyoKICAgICAgUmV0dXJuIGVsZW1lbnQgb2YgbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QsIGtleSwgb3IgTlVMTApAQCAtMTIyMSw3ICsxMjI3LDcgQEAKICAgICAgb1trZXldLgogICAgICAgICovCiAKLSAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXksCisgICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUpOwogCiAgICAgICAgLyoKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYXNkbC5oIGIvSW5jbHVkZS9hc2RsLmgKaW5kZXggNmJmNjE4Zi4uNDk1MTUzYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hc2RsLmgKKysrIGIvSW5jbHVkZS9hc2RsLmgKQEAgLTUsNiArNSw3IEBACiB0eXBlZGVmIFB5T2JqZWN0ICogc3RyaW5nOwogdHlwZWRlZiBQeU9iamVjdCAqIGJ5dGVzOwogdHlwZWRlZiBQeU9iamVjdCAqIG9iamVjdDsKK3R5cGVkZWYgUHlPYmplY3QgKiBzaW5nbGV0b247CiAKIC8qIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IGFzZGxfYy5weSB3YXMgY29tcGxldGVseQogICAgaW5kZXBlbmRlbnQgb2YgUHl0aG9uLCBidXQgaXQgaXMgYSBnb2FsIHRoZSByZXF1aXJlcyB0b28gbXVjaCB3b3JrCkBAIC0yNCwxNyArMjUsMTkgQEAKICAgICBpbnQgZWxlbWVudHNbMV07CiB9IGFzZGxfaW50X3NlcTsKIAotYXNkbF9zZXEgKmFzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKLWFzZGxfaW50X3NlcSAqYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKK2FzZGxfc2VxICpfUHlfYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOworYXNkbF9pbnRfc2VxICpfUHlfYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKIAogI2RlZmluZSBhc2RsX3NlcV9HRVQoUywgSSkgKFMpLT5lbGVtZW50c1soSSldCiAjZGVmaW5lIGFzZGxfc2VxX0xFTihTKSAoKFMpID09IE5VTEwgPyAwIDogKFMpLT5zaXplKQogI2lmZGVmIFB5X0RFQlVHCi0jZGVmaW5lIGFzZGxfc2VxX1NFVChTLCBJLCBWKSB7IFwKLSAgICAgICAgaW50IF9hc2RsX2kgPSAoSSk7IFwKLSAgICAgICAgYXNzZXJ0KChTKSAmJiBfYXNkbF9pIDwgKFMpLT5zaXplKTsgXAorI2RlZmluZSBhc2RsX3NlcV9TRVQoUywgSSwgVikgXAorICAgIGRvIHsgXAorICAgICAgICBQeV9zc2l6ZV90IF9hc2RsX2kgPSAoSSk7IFwKKyAgICAgICAgYXNzZXJ0KChTKSAhPSBOVUxMKTsgXAorICAgICAgICBhc3NlcnQoX2FzZGxfaSA8IChTKS0+c2l6ZSk7IFwKICAgICAgICAgKFMpLT5lbGVtZW50c1tfYXNkbF9pXSA9IChWKTsgXAotfQorICAgIH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBhc2RsX3NlcV9TRVQoUywgSSwgVikgKFMpLT5lbGVtZW50c1tJXSA9IChWKQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2FzdC5oIGIvSW5jbHVkZS9hc3QuaAppbmRleCAwNTVlOGRjLi42YThjODE2IDEwMDY0NAotLS0gYS9JbmNsdWRlL2FzdC5oCisrKyBiL0luY2x1ZGUvYXN0LmgKQEAgLTEwLDYgKzEwLDExIEBACiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhtb2RfdHkpIFB5QVNUX0Zyb21Ob2RlT2JqZWN0KAorICAgIGNvbnN0IG5vZGUgKm4sCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgUHlBcmVuYSAqYXJlbmEpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmggYi9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCmluZGV4IGVjY2Q0NGMuLmE3NTdiODggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaApAQCAtMjIsMTAgKzIyLDExIEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfVkFSX0hFQUQKKyAgICBQeV9zc2l6ZV90IG9iX2FsbG9jOyAvKiBIb3cgbWFueSBieXRlcyBhbGxvY2F0ZWQgaW4gb2JfYnl0ZXMgKi8KKyAgICBjaGFyICpvYl9ieXRlczsgICAgICAvKiBQaHlzaWNhbCBiYWNraW5nIGJ1ZmZlciAqLworICAgIGNoYXIgKm9iX3N0YXJ0OyAgICAgIC8qIExvZ2ljYWwgc3RhcnQgaW5zaWRlIG9iX2J5dGVzICovCiAgICAgLyogWFhYKG5ub3J3aXR6KTogc2hvdWxkIG9iX2V4cG9ydHMgYmUgUHlfc3NpemVfdD8gKi8KLSAgICBpbnQgb2JfZXhwb3J0czsgLyogaG93IG1hbnkgYnVmZmVyIGV4cG9ydHMgKi8KLSAgICBQeV9zc2l6ZV90IG9iX2FsbG9jOyAvKiBIb3cgbWFueSBieXRlcyBhbGxvY2F0ZWQgKi8KLSAgICBjaGFyICpvYl9ieXRlczsKKyAgICBpbnQgb2JfZXhwb3J0czsgICAgICAvKiBIb3cgbWFueSBidWZmZXIgZXhwb3J0cyAqLwogfSBQeUJ5dGVBcnJheU9iamVjdDsKICNlbmRpZgogCkBAIC00OSw4ICs1MCw4IEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSBcCiAgICAgKGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSksIFwKLSAgICAgUHlfU0laRShzZWxmKSA/ICgoUHlCeXRlQXJyYXlPYmplY3QgKikoc2VsZikpLT5vYl9ieXRlcyA6IF9QeUJ5dGVBcnJheV9lbXB0eV9zdHJpbmcpCi0jZGVmaW5lIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpICAoYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKSxQeV9TSVpFKHNlbGYpKQorICAgICBQeV9TSVpFKHNlbGYpID8gKChQeUJ5dGVBcnJheU9iamVjdCAqKShzZWxmKSktPm9iX3N0YXJ0IDogX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZykKKyNkZWZpbmUgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgKGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSksIFB5X1NJWkUoc2VsZikpCiAKIFB5QVBJX0RBVEEoY2hhcikgX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZ1tdOwogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVzb2JqZWN0LmggYi9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKaW5kZXggZDdjN2ZmZC4uMGVlOGQzNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlc29iamVjdC5oCisrKyBiL0luY2x1ZGUvYnl0ZXNvYmplY3QuaApAQCAtODYsMTEgKzg2LDExIEBACiAgICAwLXRlcm1pbmF0ZWQgKHBhc3NpbmcgYSBzdHJpbmcgd2l0aCBlbWJlZGRlZCBOVUxMIGNoYXJhY3RlcnMgd2lsbAogICAgY2F1c2UgYW4gZXhjZXB0aW9uKS4gICovCiBQeUFQSV9GVU5DKGludCkgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9iaiwJLyogc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0ICovCi0gICAgcmVnaXN0ZXIgY2hhciAqKnMsCQkvKiBwb2ludGVyIHRvIGJ1ZmZlciB2YXJpYWJsZSAqLwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgKmxlbgkvKiBwb2ludGVyIHRvIGxlbmd0aCB2YXJpYWJsZSBvciBOVUxMCi0JCQkJICAgKG9ubHkgcG9zc2libGUgZm9yIDAtdGVybWluYXRlZAotCQkJCSAgIHN0cmluZ3MpICovCisgICAgUHlPYmplY3QgKm9iaiwgICAgICAvKiBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QgKi8KKyAgICBjaGFyICoqcywgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYnVmZmVyIHZhcmlhYmxlICovCisgICAgUHlfc3NpemVfdCAqbGVuICAgICAvKiBwb2ludGVyIHRvIGxlbmd0aCB2YXJpYWJsZSBvciBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSBwb3NzaWJsZSBmb3IgMC10ZXJtaW5hdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzKSAqLwogICAgICk7CiAKIC8qIFVzaW5nIHRoZSBjdXJyZW50IGxvY2FsZSwgaW5zZXJ0IHRoZSB0aG91c2FuZHMgZ3JvdXBpbmcKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29kZWNzLmggYi9JbmNsdWRlL2NvZGVjcy5oCmluZGV4IDYxMTk2NGMuLmIzMDg4ZTQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29kZWNzLmgKKysrIGIvSW5jbHVkZS9jb2RlY3MuaApAQCAtNDksNiArNDksMTAgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5Q29kZWNfTG9va3VwKAogICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nCiAgICAgICAgKTsKKworUHlBUElfRlVOQyhpbnQpIF9QeUNvZGVjX0ZvcmdldCgKKyAgICAgICBjb25zdCBjaGFyICplbmNvZGluZworICAgICAgICk7CiAjZW5kaWYKIAogLyogQ29kZWMgcmVnaXN0cnkgZW5jb2RpbmcgY2hlY2sgQVBJLgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb21waWxlLmggYi9JbmNsdWRlL2NvbXBpbGUuaAppbmRleCBhYzI2MzZkLi5jNjY1MGQ3IDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvbXBpbGUuaAorKysgYi9JbmNsdWRlL2NvbXBpbGUuaApAQCAtMzYsMTEgKzM2LDI3IEBACiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBpbnQgb3B0aW1pemUsCiAgICAgUHlBcmVuYSAqYXJlbmEpOwotUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1Qoc3RydWN0IF9tb2QgKiwgY29uc3QgY2hhciAqKTsKK1B5QVBJX0ZVTkMoUHlDb2RlT2JqZWN0ICopIFB5QVNUX0NvbXBpbGVPYmplY3QoCisgICAgc3RydWN0IF9tb2QgKm1vZCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBpbnQgb3B0aW1pemUsCisgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1QoCisgICAgc3RydWN0IF9tb2QgKiBtb2QsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgICk7CitQeUFQSV9GVU5DKFB5RnV0dXJlRmVhdHVyZXMgKikgUHlGdXR1cmVfRnJvbUFTVE9iamVjdCgKKyAgICBzdHJ1Y3QgX21vZCAqIG1vZCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUKKyAgICApOwogCiAvKiBfUHlfTWFuZ2xlIGlzIGRlZmluZWQgaW4gY29tcGlsZS5jICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgX1B5X01hbmdsZShQeU9iamVjdCAqcCwgUHlPYmplY3QgKm5hbWUpOwogCisjZGVmaW5lIFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUIElOVF9NQVgKK1B5QVBJX0ZVTkMoaW50KSBQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3QoaW50IG9wY29kZSwgaW50IG9wYXJnKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZGljdG9iamVjdC5oIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKaW5kZXggZDg5YWFjOC4uZWYxMjJiZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9kaWN0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKQEAgLTUzLDYgKzUzLDEwIEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfR2V0SXRlbUlkV2l0aEVycm9yKFB5T2JqZWN0ICpkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9QeV9JZGVudGlmaWVyICprZXkpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfU2V0RGVmYXVsdCgKKyAgICBQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0b2JqKTsKKyNlbmRpZgogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9TZXRJdGVtKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKml0ZW0pOwogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9EZWxJdGVtKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RGljdF9DbGVhcihQeU9iamVjdCAqbXApOwpAQCAtMTA5LDkgKzExMywxMSBAQAogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpkcCwgY29uc3QgY2hhciAqa2V5KTsKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeURpY3RfRGVsSXRlbUlkKFB5T2JqZWN0ICptcCwgc3RydWN0IF9QeV9JZGVudGlmaWVyICprZXkpOworUHlBUElfRlVOQyh2b2lkKSBfUHlEaWN0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KTsKKwogaW50IF9QeU9iamVjdERpY3RfU2V0SXRlbShQeVR5cGVPYmplY3QgKnRwLCBQeU9iamVjdCAqKmRpY3RwdHIsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqdmFsdWUpOwogUHlPYmplY3QgKl9QeURpY3RfTG9hZEdsb2JhbChQeURpY3RPYmplY3QgKiwgUHlEaWN0T2JqZWN0ICosIFB5T2JqZWN0ICopOwotUHlBUElfRlVOQyh2b2lkKSBfUHlEaWN0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KTsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZmlsZW9iamVjdC5oIGIvSW5jbHVkZS9maWxlb2JqZWN0LmgKaW5kZXggYTk5Yzk0ZC4uMDkzOTc0NCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9maWxlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9maWxlb2JqZWN0LmgKQEAgLTgsOCArOCw5IEBACiAKICNkZWZpbmUgUFlfU1RESU9URVhUTU9ERSAiYiIKIAotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfRnJvbUZkKGludCwgY2hhciAqLCBjaGFyICosIGludCwgY2hhciAqLCBjaGFyICosCi0JCQkJICAgICBjaGFyICosIGludCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RmlsZV9Gcm9tRmQoaW50LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX0dldExpbmUoUHlPYmplY3QgKiwgaW50KTsKIFB5QVBJX0ZVTkMoaW50KSBQeUZpbGVfV3JpdGVPYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgaW50KTsKIFB5QVBJX0ZVTkMoaW50KSBQeUZpbGVfV3JpdGVTdHJpbmcoY29uc3QgY2hhciAqLCBQeU9iamVjdCAqKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZmlsZXV0aWxzLmggYi9JbmNsdWRlL2ZpbGV1dGlscy5oCmluZGV4IDdjMThjZjIuLmU5YmFkODAgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZmlsZXV0aWxzLmgKKysrIGIvSW5jbHVkZS9maWxldXRpbHMuaApAQCAtMjcsMTEgKzI3LDIxIEBACiAgICAgc3RydWN0IHN0YXQgKnN0YXRidWYpOwogI2VuZGlmCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlfb3BlbigKKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICBpbnQgZmxhZ3MpOworI2VuZGlmCisKIFB5QVBJX0ZVTkMoRklMRSAqKSBfUHlfd2ZvcGVuKAogICAgIGNvbnN0IHdjaGFyX3QgKnBhdGgsCiAgICAgY29uc3Qgd2NoYXJfdCAqbW9kZSk7CiAKIFB5QVBJX0ZVTkMoRklMRSopIF9QeV9mb3BlbigKKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICBjb25zdCBjaGFyICptb2RlKTsKKworUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuX29iaigKICAgICBQeU9iamVjdCAqcGF0aCwKICAgICBjb25zdCBjaGFyICptb2RlKTsKIApAQCAtNTMsNiArNjMsMTUgQEAKICAgICB3Y2hhcl90ICpidWYsCiAgICAgc2l6ZV90IHNpemUpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkgX1B5X2dldF9pbmhlcml0YWJsZShpbnQgZmQpOworCitQeUFQSV9GVU5DKGludCkgX1B5X3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MpOworCitQeUFQSV9GVU5DKGludCkgX1B5X2R1cChpbnQgZmQpOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmggYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKaW5kZXggMzNmNzNhZi4uOTY2ZmYxZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaApAQCAtMzYsOCArMzYsOSBAQAogICAgICAgICAgICBub24tZ2VuZXJhdG9yIGZyYW1lcy4gU2VlIHRoZSBzYXZlX2V4Y19zdGF0ZSBhbmQgc3dhcF9leGNfc3RhdGUKICAgICAgICAgICAgZnVuY3Rpb25zIGluIGNldmFsLmMgZm9yIGRldGFpbHMgb2YgdGhlaXIgdXNlLiAqLwogICAgIFB5T2JqZWN0ICpmX2V4Y190eXBlLCAqZl9leGNfdmFsdWUsICpmX2V4Y190cmFjZWJhY2s7CisgICAgLyogQm9ycm93ZWQgcmVmZXJlbmNlIHRvIGEgZ2VuZXJhdG9yLCBvciBOVUxMICovCisgICAgUHlPYmplY3QgKmZfZ2VuOwogCi0gICAgUHlUaHJlYWRTdGF0ZSAqZl90c3RhdGU7CiAgICAgaW50IGZfbGFzdGk7ICAgICAgICAgICAgICAgIC8qIExhc3QgaW5zdHJ1Y3Rpb24gaWYgY2FsbGVkICovCiAgICAgLyogQ2FsbCBQeUZyYW1lX0dldExpbmVOdW1iZXIoKSBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhpcyBmaWVsZAogICAgICAgIGRpcmVjdGx5LiAgQXMgb2YgMi4zIGZfbGluZW5vIGlzIG9ubHkgdmFsaWQgd2hlbiB0cmFjaW5nIGlzCkBAIC00Niw2ICs0Nyw3IEBACiAgICAgICAgYnl0ZWNvZGUgaW5kZXguICovCiAgICAgaW50IGZfbGluZW5vOyAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgbGluZSBudW1iZXIgKi8KICAgICBpbnQgZl9pYmxvY2s7ICAgICAgICAgICAgICAgLyogaW5kZXggaW4gZl9ibG9ja3N0YWNrICovCisgICAgY2hhciBmX2V4ZWN1dGluZzsgICAgICAgICAgIC8qIHdoZXRoZXIgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZyAqLwogICAgIFB5VHJ5QmxvY2sgZl9ibG9ja3N0YWNrW0NPX01BWEJMT0NLU107IC8qIGZvciB0cnkgYW5kIGxvb3AgYmxvY2tzICovCiAgICAgUHlPYmplY3QgKmZfbG9jYWxzcGx1c1sxXTsgIC8qIGxvY2FscytzdGFjaywgZHluYW1pY2FsbHkgc2l6ZWQgKi8KIH0gUHlGcmFtZU9iamVjdDsKQEAgLTc1LDYgKzc3LDggQEAKIC8qIENvbnZlcnNpb25zIGJldHdlZW4gImZhc3QgbG9jYWxzIiBhbmQgbG9jYWxzIGluIGRpY3Rpb25hcnkgKi8KIAogUHlBUElfRlVOQyh2b2lkKSBQeUZyYW1lX0xvY2Fsc1RvRmFzdChQeUZyYW1lT2JqZWN0ICosIGludCk7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoUHlGcmFtZU9iamVjdCAqKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfQ2xlYXJGcmVlTGlzdCh2b2lkKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZ2Vub2JqZWN0LmggYi9JbmNsdWRlL2dlbm9iamVjdC5oCmluZGV4IGVkNDUxYmEuLjY1ZjFlY2YgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZ2Vub2JqZWN0LmgKKysrIGIvSW5jbHVkZS9nZW5vYmplY3QuaApAQCAtMzYsNiArMzYsOCBAQAogUHlBUElfRlVOQyhpbnQpIFB5R2VuX05lZWRzRmluYWxpemluZyhQeUdlbk9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlHZW5fRmV0Y2hTdG9wSXRlcmF0aW9uVmFsdWUoUHlPYmplY3QgKiopOwogUHlPYmplY3QgKl9QeUdlbl9TZW5kKFB5R2VuT2JqZWN0ICosIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlHZW5fRmluYWxpemUoUHlPYmplY3QgKnNlbGYpOworCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ncmFtbWFyLmggYi9JbmNsdWRlL2dyYW1tYXIuaAppbmRleCA4NDI2ZGEzLi5iYTdkMTlkIDEwMDY0NAotLS0gYS9JbmNsdWRlL2dyYW1tYXIuaAorKysgYi9JbmNsdWRlL2dyYW1tYXIuaApAQCAtNjksMTQgKzY5LDE0IEBACiAvKiBGVU5DVElPTlMgKi8KIAogZ3JhbW1hciAqbmV3Z3JhbW1hcihpbnQgc3RhcnQpOwotZGZhICphZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNoYXIgKm5hbWUpOworZGZhICphZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IGFkZHN0YXRlKGRmYSAqZCk7CiB2b2lkIGFkZGFyYyhkZmEgKmQsIGludCBmcm9tLCBpbnQgdG8sIGludCBsYmwpOwogZGZhICpQeUdyYW1tYXJfRmluZERGQShncmFtbWFyICpnLCBpbnQgdHlwZSk7CiAKLWludCBhZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKTsKLWludCBmaW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cik7Ci1jaGFyICpQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYik7CitpbnQgYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cik7CitpbnQgZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpOworY29uc3QgY2hhciAqUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpOwogdm9pZCB0cmFuc2xhdGVsYWJlbHMoZ3JhbW1hciAqZyk7CiAKIHZvaWQgYWRkZmlyc3RzZXRzKGdyYW1tYXIgKmcpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9pbXBvcnQuaCBiL0luY2x1ZGUvaW1wb3J0LmgKaW5kZXggNzNjODZlZS4uYWZkZmFjMiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9pbXBvcnQuaAorKysgYi9JbmNsdWRlL2ltcG9ydC5oCkBAIC0xMywxOSArMTMsMTkgQEAKIFB5QVBJX0ZVTkMobG9uZykgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIodm9pZCk7CiBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlJbXBvcnRfR2V0TWFnaWNUYWcodm9pZCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbwogICAgICk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoCi0gICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKmNvLAotICAgIGNoYXIgKnBhdGhuYW1lICAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbywKLSAgICBjaGFyICpwYXRobmFtZSwgICAgICAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCi0gICAgY2hhciAqY3BhdGhuYW1lICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpjcGF0aG5hbWUgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoCiAgICAgUHlPYmplY3QgKm5hbWUsCkBAIC03Miw3ICs3Miw3IEBACiAgICAgUHlPYmplY3QgKm5hbWUKICAgICApOwogUHlBUElfRlVOQyhpbnQpIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZSgKLSAgICBjaGFyICpuYW1lICAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICApOwogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCkBAIC05MiwxMiArOTIsMTIgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbigKICAgICBQeU9iamVjdCAqbW9kLAotICAgIGNoYXIgKm5hbWUgICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgICk7CiBQeUFQSV9GVU5DKGludCkgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0KiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiAKIHN0cnVjdCBfaW5pdHRhYiB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QqICgqaW5pdGZ1bmMpKHZvaWQpOwogfTsKIFB5QVBJX0RBVEEoc3RydWN0IF9pbml0dGFiICopIFB5SW1wb3J0X0luaXR0YWI7CkBAIC0xMTMsMTUgKzExMywxNSBAQAogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBzdHJ1Y3QgX2Zyb3plbiB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCi0gICAgdW5zaWduZWQgY2hhciAqY29kZTsKKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2RlOwogICAgIGludCBzaXplOwogfTsKIAogLyogRW1iZWRkaW5nIGFwcHMgbWF5IGNoYW5nZSB0aGlzIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlaXIgZmF2b3JpdGUKICAgIGNvbGxlY3Rpb24gb2YgZnJvemVuIG1vZHVsZXM6ICovCiAKLVB5QVBJX0RBVEEoc3RydWN0IF9mcm96ZW4gKikgUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK1B5QVBJX0RBVEEoY29uc3Qgc3RydWN0IF9mcm96ZW4gKikgUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbGlzdG9iamVjdC5oIGIvSW5jbHVkZS9saXN0b2JqZWN0LmgKaW5kZXggZGM2MmFlZS4uNzRjZjQ2ZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9saXN0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9saXN0b2JqZWN0LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVNvcnRXcmFwcGVyX1R5cGU7CiAKICNkZWZpbmUgUHlMaXN0X0NoZWNrKG9wKSBcCi0JCVB5VHlwZV9GYXN0U3ViY2xhc3MoUHlfVFlQRShvcCksIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUykKKyAgICBQeVR5cGVfRmFzdFN1YmNsYXNzKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1MpCiAjZGVmaW5lIFB5TGlzdF9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5TGlzdF9UeXBlKQogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TGlzdF9OZXcoUHlfc3NpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbG9uZ29iamVjdC5oIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKaW5kZXggMWMxYzVkZS4uZmY0MzMwOSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9sb25nb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKQEAgLTUyLDYgKzUyLDE5IEBACiAjZXJyb3IgInNpemVvZihwaWRfdCkgaXMgbmVpdGhlciBzaXplb2YoaW50KSwgc2l6ZW9mKGxvbmcpIG9yIHNpemVvZihsb25nIGxvbmcpIgogI2VuZGlmIC8qIFNJWkVPRl9QSURfVCAqLwogCisjaWYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfSU5UCisjICBkZWZpbmUgX1B5X1BBUlNFX0lOVFBUUiAiaSIKKyMgIGRlZmluZSBfUHlfUEFSU0VfVUlOVFBUUiAiSSIKKyNlbGlmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkcKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJsIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJrIgorI2VsaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9MT05HX0xPTkcKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJMIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJLIgorI2Vsc2UKKyMgIGVycm9yICJ2b2lkKiBkaWZmZXJlbnQgaW4gc2l6ZSBmcm9tIGludCwgbG9uZyBhbmQgbG9uZyBsb25nIgorI2VuZGlmIC8qIFNJWkVPRl9WT0lEX1AgKi8KKwogLyogVXNlZCBieSBQeXRob24vbXlzdHJ0b3VsLmMuICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKHVuc2lnbmVkIGNoYXIpIF9QeUxvbmdfRGlnaXRWYWx1ZVsyNTZdOwpAQCAtODAsNyArOTMsNyBAQAogUHlBUElfRlVOQyhQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKiwgaW50ICopOwogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tVW5pY29kZShQeV9VTklDT0RFKiwgUHlfc3NpemVfdCwgaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KFB5T2JqZWN0ICp1LCBpbnQgYmFzZSk7CkBAIC0xODIsOCArMTk1LDggQEAKIC8qIFRoZXNlIGFyZW4ndCByZWFsbHkgcGFydCBvZiB0aGUgaW50IG9iamVjdCwgYnV0IHRoZXkncmUgaGFuZHkuIFRoZQogICAgZnVuY3Rpb25zIGFyZSBpbiBQeXRob24vbXlzdHJ0b3VsLmMuCiAgKi8KLVB5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlPU19zdHJ0b3VsKGNoYXIgKiwgY2hhciAqKiwgaW50KTsKLVB5QVBJX0ZVTkMobG9uZykgUHlPU19zdHJ0b2woY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeU9TX3N0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyhsb25nKSBQeU9TX3N0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tYXJzaGFsLmggYi9JbmNsdWRlL21hcnNoYWwuaAppbmRleCBlOTZkMDYyLi4wOWQ5MzM3IDEwMDY0NAotLS0gYS9JbmNsdWRlL21hcnNoYWwuaAorKysgYi9JbmNsdWRlL21hcnNoYWwuaApAQCAtNyw3ICs3LDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgUHlfTUFSU0hBTF9WRVJTSU9OIDIKKyNkZWZpbmUgUHlfTUFSU0hBTF9WRVJTSU9OIDQKIAogUHlBUElfRlVOQyh2b2lkKSBQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlKGxvbmcsIEZJTEUgKiwgaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlKFB5T2JqZWN0ICosIEZJTEUgKiwgaW50KTsKQEAgLTE5LDcgKzE5LDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZShGSUxFICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZShGSUxFICopOwogI2VuZGlmCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjaGFyICosIFB5X3NzaXplX3QpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tb2RzdXBwb3J0LmggYi9JbmNsdWRlL21vZHN1cHBvcnQuaAppbmRleCBlY2YxZGNjLi41ZGUwNDU4IDEwMDY0NAotLS0gYS9JbmNsdWRlL21vZHN1cHBvcnQuaAorKysgYi9JbmNsdWRlL21vZHN1cHBvcnQuaApAQCAtMjYsNyArMjYsNyBAQAogLyogRHVlIHRvIGEgZ2xpdGNoIGluIDMuMiwgdGhlIF9TaXplVCB2ZXJzaW9ucyB3ZXJlbid0IGV4cG9ydGVkIGZyb20gdGhlIERMTC4gKi8KICNpZiAhZGVmaW5lZChQWV9TU0laRV9UX0NMRUFOKSB8fCAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDMwMDAwCiBQeUFQSV9GVU5DKGludCkgUHlBcmdfUGFyc2UoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pIFB5X0ZPUk1BVF9QQVJTRVRVUExFKFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpOworUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNoYXIgKiosIC4uLik7CiBQeUFQSV9GVU5DKGludCkgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzKFB5T2JqZWN0ICopOwpAQCAtMzYsNiArMzYsNyBAQAogI2VuZGlmCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGludCkgX1B5QXJnX05vS2V5d29yZHMoY29uc3QgY2hhciAqZnVuY25hbWUsIFB5T2JqZWN0ICprdyk7CitQeUFQSV9GVU5DKGludCkgX1B5QXJnX05vUG9zaXRpb25hbChjb25zdCBjaGFyICpmdW5jbmFtZSwgUHlPYmplY3QgKmFyZ3MpOwogCiBQeUFQSV9GVU5DKGludCkgUHlBcmdfVmFQYXJzZShQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCmRpZmYgLS1naXQgYS9JbmNsdWRlL21vZHVsZW9iamVjdC5oIGIvSW5jbHVkZS9tb2R1bGVvYmplY3QuaAppbmRleCA4MDEzZGQ5Li5mMTE5MzY0IDEwMDY0NAotLS0gYS9JbmNsdWRlL21vZHVsZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvbW9kdWxlb2JqZWN0LmgKQEAgLTI1LDYgKzI1LDcgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QoUHlPYmplY3QgKik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIF9QeU1vZHVsZV9DbGVhcihQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5TW9kdWxlX0NsZWFyRGljdChQeU9iamVjdCAqKTsKICNlbmRpZgogUHlBUElfRlVOQyhzdHJ1Y3QgUHlNb2R1bGVEZWYqKSBQeU1vZHVsZV9HZXREZWYoUHlPYmplY3QqKTsKIFB5QVBJX0ZVTkModm9pZCopIFB5TW9kdWxlX0dldFN0YXRlKFB5T2JqZWN0Kik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL29iamVjdC5oIGIvSW5jbHVkZS9vYmplY3QuaAppbmRleCBjZGViMDZjLi43NTg0ZDRjIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamVjdC5oCisrKyBiL0luY2x1ZGUvb2JqZWN0LmgKQEAgLTE0Myw3ICsxNDMsOCBAQAogICAgIFB5T2JqZWN0ICpvYmplY3Q7CiB9IF9QeV9JZGVudGlmaWVyOwogCi0jZGVmaW5lIF9QeV9zdGF0aWNfc3RyaW5nKHZhcm5hbWUsIHZhbHVlKSAgc3RhdGljIF9QeV9JZGVudGlmaWVyIHZhcm5hbWUgPSB7IDAsIHZhbHVlLCAwIH0KKyNkZWZpbmUgX1B5X3N0YXRpY19zdHJpbmdfaW5pdCh2YWx1ZSkgeyAwLCB2YWx1ZSwgMCB9CisjZGVmaW5lIF9QeV9zdGF0aWNfc3RyaW5nKHZhcm5hbWUsIHZhbHVlKSAgc3RhdGljIF9QeV9JZGVudGlmaWVyIHZhcm5hbWUgPSBfUHlfc3RhdGljX3N0cmluZ19pbml0KHZhbHVlKQogI2RlZmluZSBfUHlfSURFTlRJRklFUih2YXJuYW1lKSBfUHlfc3RhdGljX3N0cmluZyhQeUlkXyMjdmFybmFtZSwgI3Zhcm5hbWUpCiAKIC8qCkBAIC0zNjIsNyArMzYzLDcgQEAKICAgICBQeUJ1ZmZlclByb2NzICp0cF9hc19idWZmZXI7CiAKICAgICAvKiBGbGFncyB0byBkZWZpbmUgcHJlc2VuY2Ugb2Ygb3B0aW9uYWwvZXhwYW5kZWQgZmVhdHVyZXMgKi8KLSAgICBsb25nIHRwX2ZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgdHBfZmxhZ3M7CiAKICAgICBjb25zdCBjaGFyICp0cF9kb2M7IC8qIERvY3VtZW50YXRpb24gc3RyaW5nICovCiAKQEAgLTQwOCw2ICs0MDksOCBAQAogICAgIC8qIFR5cGUgYXR0cmlidXRlIGNhY2hlIHZlcnNpb24gdGFnLiBBZGRlZCBpbiB2ZXJzaW9uIDIuNiAqLwogICAgIHVuc2lnbmVkIGludCB0cF92ZXJzaW9uX3RhZzsKIAorICAgIGRlc3RydWN0b3IgdHBfZmluYWxpemU7CisKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICAvKiB0aGVzZSBtdXN0IGJlIGxhc3QgYW5kIG5ldmVyIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKi8KICAgICBQeV9zc2l6ZV90IHRwX2FsbG9jczsKQEAgLTQyOCw3ICs0MzEsNyBAQAogICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgaW50IGJhc2ljc2l6ZTsKICAgICBpbnQgaXRlbXNpemU7Ci0gICAgaW50IGZsYWdzOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICBQeVR5cGVfU2xvdCAqc2xvdHM7IC8qIHRlcm1pbmF0ZWQgYnkgc2xvdD09MC4gKi8KIH0gUHlUeXBlX1NwZWM7CiAKQEAgLTQzNiw2ICs0MzksOSBAQAogI2lmICFkZWZpbmVkKFB5X0xJTUlURURfQVBJKSB8fCBQeV9MSU1JVEVEX0FQSSswID49IDB4MDMwMzAwMDAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMoUHlUeXBlX1NwZWMqLCBQeU9iamVjdCopOwogI2VuZGlmCisjaWYgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzA0MDAwMAorUHlBUElfRlVOQyh2b2lkKikgUHlUeXBlX0dldFNsb3QoUHlUeXBlT2JqZWN0KiwgaW50KTsKKyNlbmRpZgogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAvKiBUaGUgKnJlYWwqIGxheW91dCBvZiBhIHR5cGUgb2JqZWN0IHdoZW4gYWxsb2NhdGVkIG9uIHRoZSBoZWFwICovCkBAIC00NzAsNyArNDc2LDcgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUJhc2VPYmplY3RfVHlwZTsgLyogYnVpbHQtaW4gJ29iamVjdCcgKi8KIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVN1cGVyX1R5cGU7IC8qIGJ1aWx0LWluICdzdXBlcicgKi8KIAotUHlBUElfRlVOQyhsb25nKSBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0Kik7CitQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqKTsKIAogI2RlZmluZSBQeVR5cGVfQ2hlY2sob3ApIFwKICAgICBQeVR5cGVfRmFzdFN1YmNsYXNzKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MpCkBAIC00ODksNiArNDk1LDExIEBACiBQeUFQSV9GVU5DKHVuc2lnbmVkIGludCkgUHlUeXBlX0NsZWFyQ2FjaGUodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VHlwZV9Nb2RpZmllZChQeVR5cGVPYmplY3QgKik7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2MoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2MoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKIC8qIEdlbmVyaWMgb3BlcmF0aW9ucyBvbiBvYmplY3RzICovCiBzdHJ1Y3QgX1B5X0lkZW50aWZpZXI7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCkBAIC01MzAsNiArNTQxLDEwIEBACiBQeUFQSV9GVU5DKGludCkgUHlDYWxsYWJsZV9DaGVjayhQeU9iamVjdCAqKTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9DbGVhcldlYWtSZWZzKFB5T2JqZWN0ICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9DYWxsRmluYWxpemVyKFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqKTsKKyNlbmRpZgogCiAvKiBTYW1lIGFzIFB5T2JqZWN0X0dlbmVyaWN7R2V0LFNldH1BdHRyLCBidXQgcGFzc2luZyB0aGUgYXR0cmlidXRlcwogICAgZGljdCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuICovCkBAIC01NTcsMjMgKzU3Miw2IEBACiBQeUFQSV9GVU5DKGludCkgUHlfUmVwckVudGVyKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeV9SZXByTGVhdmUoUHlPYmplY3QgKik7CiAKLS8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCi0jaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKLVB5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOwotUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXModW5zaWduZWQgY2hhciosIFB5X3NzaXplX3QpOwotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeV9oYXNoX3QgcHJlZml4OwotICAgIFB5X2hhc2hfdCBzdWZmaXg7Ci19IF9QeV9IYXNoU2VjcmV0X3Q7Ci1QeUFQSV9EQVRBKF9QeV9IYXNoU2VjcmV0X3QpIF9QeV9IYXNoU2VjcmV0OwotCi0jaWZkZWYgUHlfREVCVUcKLVB5QVBJX0RBVEEoaW50KSBfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZDsKLSNlbmRpZgotCiAvKiBIZWxwZXIgZm9yIHBhc3Npbmcgb2JqZWN0cyB0byBwcmludGYgYW5kIHRoZSBsaWtlICovCiAjZGVmaW5lIFB5T2JqZWN0X1JFUFIob2JqKSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5T2JqZWN0X1JlcHIob2JqKSkKIApAQCAtNjA0LDUwICs2MDIsNTUgQEAKICovCiAKIC8qIFNldCBpZiB0aGUgdHlwZSBvYmplY3QgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEVBUFRZUEUgKDFMPDw5KQorI2RlZmluZSBQeV9UUEZMQUdTX0hFQVBUWVBFICgxVUwgPDwgOSkKIAogLyogU2V0IGlmIHRoZSB0eXBlIGFsbG93cyBzdWJjbGFzc2luZyAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VUWVBFICgxTDw8MTApCisjZGVmaW5lIFB5X1RQRkxBR1NfQkFTRVRZUEUgKDFVTCA8PCAxMCkKIAogLyogU2V0IGlmIHRoZSB0eXBlIGlzICdyZWFkeScgLS0gZnVsbHkgaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWSAoMUw8PDEyKQorI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZICgxVUwgPDwgMTIpCiAKIC8qIFNldCB3aGlsZSB0aGUgdHlwZSBpcyBiZWluZyAncmVhZGllZCcsIHRvIHByZXZlbnQgcmVjdXJzaXZlIHJlYWR5IGNhbGxzICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFlJTkcgKDFMPDwxMykKKyNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWUlORyAoMVVMIDw8IDEzKQogCiAvKiBPYmplY3RzIHN1cHBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uIChzZWUgb2JqaW1wLmgpICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9HQyAoMUw8PDE0KQorI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfR0MgKDFVTCA8PCAxNCkKIAogLyogVGhlc2UgdHdvIGJpdHMgYXJlIHByZXNlcnZlZCBmb3IgU3RhY2tsZXNzIFB5dGhvbiwgbmV4dCBhZnRlciB0aGlzIGlzIDE3ICovCiAjaWZkZWYgU1RBQ0tMRVNTCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OICgzTDw8MTUpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OICgzVUwgPDwgMTUpCiAjZWxzZQogI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiAwCiAjZW5kaWYKIAogLyogT2JqZWN0cyBzdXBwb3J0IHR5cGUgYXR0cmlidXRlIGNhY2hlICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyAgICgxTDw8MTgpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcgICgxTDw8MTkpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyAgICgxVUwgPDwgMTgpCisjZGVmaW5lIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcgICgxVUwgPDwgMTkpCiAKIC8qIFR5cGUgaXMgYWJzdHJhY3QgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19JU19BQlNUUkFDVCAoMUw8PDIwKQorI2RlZmluZSBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUICgxVUwgPDwgMjApCiAKIC8qIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGRldGVybWluZSBpZiBhIHR5cGUgaXMgYSBzdWJjbGFzcy4gKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19JTlRfU1VCQ0xBU1MgICAgICAgICAoMUw8PDIzKQotI2RlZmluZSBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MgICAgICAgICgxTDw8MjQpCi0jZGVmaW5lIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgICAgKDFMPDwyNSkKLSNkZWZpbmUgUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUyAgICAgICAoMUw8PDI2KQotI2RlZmluZSBQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTICAgICAgICgxTDw8MjcpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUyAgICAgKDFMPDwyOCkKLSNkZWZpbmUgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTICAgICAgICAoMUw8PDI5KQotI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTICAgICgxTDw8MzApCi0jZGVmaW5lIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAgICAgICAgKDFMPDwzMSkKKyNkZWZpbmUgUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDI0KQorI2RlZmluZSBQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMjUpCisjZGVmaW5lIFB5X1RQRkxBR1NfVFVQTEVfU1VCQ0xBU1MgICAgICAgKDFVTCA8PCAyNikKKyNkZWZpbmUgUHlfVFBGTEFHU19CWVRFU19TVUJDTEFTUyAgICAgICAoMVVMIDw8IDI3KQorI2RlZmluZSBQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1MgICAgICgxVUwgPDwgMjgpCisjZGVmaW5lIFB5X1RQRkxBR1NfRElDVF9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAyOSkKKyNkZWZpbmUgUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTUyAgICAoMVVMIDw8IDMwKQorI2RlZmluZSBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMzEpCiAKICNkZWZpbmUgUHlfVFBGTEFHU19ERUZBVUxUICAoIFwKICAgICAgICAgICAgICAgICAgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gfCBcCiAgICAgICAgICAgICAgICAgIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyB8IFwKICAgICAgICAgICAgICAgICAwKQogCisvKiBOT1RFOiBUaGUgZm9sbG93aW5nIGZsYWdzIHJldXNlIGxvd2VyIGJpdHMgKHJlbW92ZWQgYXMgcGFydCBvZiB0aGUKKyAqIFB5dGhvbiAzLjAgdHJhbnNpdGlvbikuICovCisKKy8qIFR5cGUgc3RydWN0dXJlIGhhcyB0cF9maW5hbGl6ZSBtZW1iZXIgKDMuNCkgKi8KKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFICgxVUwgPDwgMCkKKwogI2lmZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5VHlwZV9IYXNGZWF0dXJlKHQsZikgICgoUHlUeXBlX0dldEZsYWdzKHQpICYgKGYpKSAhPSAwKQogI2Vsc2UKQEAgLTY4MiwxMiArNjg1LDYgQEAKIGNvbXBsaWNhdGlvbnMgaW4gdGhlIGRlYWxsb2NhdGlvbiBmdW5jdGlvbi4gIChUaGlzIGlzIGFjdHVhbGx5IGEKIGRlY2lzaW9uIHRoYXQncyB1cCB0byB0aGUgaW1wbGVtZW50ZXIgb2YgZWFjaCBuZXcgdHlwZSBzbyBpZiB5b3Ugd2FudCwKIHlvdSBjYW4gY291bnQgc3VjaCByZWZlcmVuY2VzIHRvIHRoZSB0eXBlIG9iamVjdC4pCi0KLSoqKiBXQVJOSU5HKioqIFRoZSBQeV9ERUNSRUYgbWFjcm8gbXVzdCBoYXZlIGEgc2lkZS1lZmZlY3QtZnJlZSBhcmd1bWVudAotc2luY2UgaXQgbWF5IGV2YWx1YXRlIGl0cyBhcmd1bWVudCBtdWx0aXBsZSB0aW1lcy4gIChUaGUgYWx0ZXJuYXRpdmUKLXdvdWxkIGJlIHRvIG1hY2UgaXQgYSBwcm9wZXIgZnVuY3Rpb24gb3IgYXNzaWduIGl0IHRvIGEgZ2xvYmFsIHRlbXBvcmFyeQotdmFyaWFibGUgZmlyc3QsIGJvdGggb2Ygd2hpY2ggYXJlIHNsb3dlcjsgYW5kIGluIGEgbXVsdGktdGhyZWFkZWQKLWVudmlyb25tZW50IHRoZSBnbG9iYWwgdmFyaWFibGUgdHJpY2sgaXMgbm90IHNhZmUuKQogKi8KIAogLyogRmlyc3QgZGVmaW5lIGEgcGlsZSBvZiBzaW1wbGUgaGVscGVyIG1hY3Jvcywgb25lIHNldCBwZXIgc3BlY2lhbApAQCAtNzA0LDcgKzcwMSw2IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeV9OZWdhdGl2ZVJlZmNvdW50KGNvbnN0IGNoYXIgKmZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBQeU9iamVjdCAqb3ApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0R1bW15KHZvaWQpOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTZXRfRHVtbXkodm9pZCk7CiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeV9HZXRSZWZUb3RhbCh2b2lkKTsKICNkZWZpbmUgX1B5X0lOQ19SRUZUT1RBTCAgICAgICAgX1B5X1JlZlRvdGFsKysKICNkZWZpbmUgX1B5X0RFQ19SRUZUT1RBTCAgICAgICAgX1B5X1JlZlRvdGFsLS0KQEAgLTc2NiwxNSArNzYyLDE2IEBACiAKICNkZWZpbmUgUHlfSU5DUkVGKG9wKSAoICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBfUHlfSU5DX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgIFwKLSAgICAoKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250KyspCisgICAgKChQeU9iamVjdCAqKShvcCkpLT5vYl9yZWZjbnQrKykKIAogI2RlZmluZSBQeV9ERUNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKl9weV9kZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgICAgXAogICAgICAgICBpZiAoX1B5X0RFQ19SRUZUT1RBTCAgX1B5X1JFRl9ERUJVR19DT01NQSAgICAgICBcCi0gICAgICAgIC0tKChQeU9iamVjdCopKG9wKSktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgIFwKLSAgICAgICAgICAgIF9QeV9DSEVDS19SRUZDTlQob3ApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLShfcHlfZGVjcmVmX3RtcCktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgICBcCisgICAgICAgICAgICBfUHlfQ0hFQ0tfUkVGQ05UKF9weV9kZWNyZWZfdG1wKSAgICAgICAgICAgIFwKICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfUHlfRGVhbGxvYygoUHlPYmplY3QgKikob3ApKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9QeV9EZWFsbG9jKF9weV9kZWNyZWZfdG1wKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAvKiBTYWZlbHkgZGVjcmVmIGBvcGAgYW5kIHNldCBgb3BgIHRvIE5VTEwsIGVzcGVjaWFsbHkgdXNlZnVsIGluIHRwX2NsZWFyCkBAIC04MTMsMTYgKzgxMCwyNyBAQAogICovCiAjZGVmaW5lIFB5X0NMRUFSKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChvcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgXAorICAgICAgICBpZiAoX3B5X3RtcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgKG9wKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgUHlfREVDUkVGKF9weV90bXApOyAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIE1hY3JvcyB0byB1c2UgaW4gY2FzZSB0aGUgb2JqZWN0IHBvaW50ZXIgbWF5IGJlIE5VTEw6ICovCi0jZGVmaW5lIFB5X1hJTkNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0lOQ1JFRihvcCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFB5X1hERUNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0RFQ1JFRihvcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFB5X1hJTkNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfeGluY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyBcCisgICAgICAgIGlmIChfcHlfeGluY3JlZl90bXAgIT0gTlVMTCkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9JTkNSRUYoX3B5X3hpbmNyZWZfdG1wKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBQeV9YREVDUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3hkZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgXAorICAgICAgICBpZiAoX3B5X3hkZWNyZWZfdG1wICE9IE5VTEwpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKF9weV94ZGVjcmVmX3RtcCk7ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKIC8qCiBUaGVzZSBhcmUgcHJvdmlkZWQgYXMgY29udmVuaWVuY2VzIHRvIFB5dGhvbiBydW50aW1lIGVtYmVkZGVycywgc28gdGhhdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmppbXBsLmggYi9JbmNsdWRlL29iamltcGwuaAppbmRleCBjNmI3ZGY0Li4zZjIxYjcwIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamltcGwuaAorKysgYi9JbmNsdWRlL29iamltcGwuaApAQCAtOTQsNTEgKzk0LDI3IEBACiAgICB0aGUgb2JqZWN0IGdldHMgaW5pdGlhbGl6ZWQgdmlhIFB5T2JqZWN0X3tJbml0LCBJbml0VmFyfSBhZnRlciBvYnRhaW5pbmcKICAgIHRoZSByYXcgbWVtb3J5LgogKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0ZyZWUodm9pZCAqcHRyKTsKIAorLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MsIHJlZ2FyZGxlc3Mgb2Ygc2l6ZSAqLworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpOwogCiAvKiBNYWNyb3MgKi8KICNpZmRlZiBXSVRIX1BZTUFMTE9DCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYgLyogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSSAqLwotI2lmZGVmIFBZTUFMTE9DX0RFQlVHICAgLyogV0lUSF9QWU1BTExPQyAmJiBQWU1BTExPQ19ERUJVRyAqLwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGFwaSwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApOwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfTWFsbG9jICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfUmVhbGxvYyAgICAgICAgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBfUHlPYmplY3RfRGVidWdGcmVlCi0jZGVmaW5lIFB5T2JqZWN0X0ZyZWUgICAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWUKKyNlbmRpZgogCi0jZWxzZSAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgISBQWU1BTExPQ19ERUJVRyAqLworLyogTWFjcm9zICovCiAjZGVmaW5lIFB5T2JqZWN0X01BTExPQyAgICAgICAgIFB5T2JqZWN0X01hbGxvYwogI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBQeU9iamVjdF9SZWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X0ZSRUUgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNlbmRpZgotCi0jZWxzZSAgIC8qICEgV0lUSF9QWU1BTExPQyAqLwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBQeU1lbV9NQUxMT0MKLSNkZWZpbmUgUHlPYmplY3RfUkVBTExPQyAgICAgICAgUHlNZW1fUkVBTExPQwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBQeU1lbV9GUkVFCi0KLSNlbmRpZiAgLyogV0lUSF9QWU1BTExPQyAqLwotCiAjZGVmaW5lIFB5T2JqZWN0X0RlbCAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNkZWZpbmUgUHlPYmplY3RfREVMICAgICAgICAgICAgUHlPYmplY3RfRlJFRQorI2RlZmluZSBQeU9iamVjdF9ERUwgICAgICAgICAgICBQeU9iamVjdF9GcmVlCisKIAogLyoKICAqIEdlbmVyaWMgb2JqZWN0IGFsbG9jYXRvciBpbnRlcmZhY2UKQEAgLTIyMiw2ICsxOTgsMjYgQEAKICAgIGNvbnN0cnVjdG9yIHlvdSB3b3VsZCBzdGFydCBkaXJlY3RseSB3aXRoIFB5T2JqZWN0X0luaXQvSW5pdFZhcgogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAyIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgKi8KKyAgICB2b2lkKiAoKmFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBmcmVlIGFuIGFyZW5hICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworfSBQeU9iamVjdEFyZW5hQWxsb2NhdG9yOworCisvKiBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcik7CisjZW5kaWYKKworCiAvKgogICogR2FyYmFnZSBDb2xsZWN0aW9uIFN1cHBvcnQKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzAsNiArMjI2LDEwIEBACiAvKiBDIGVxdWl2YWxlbnQgb2YgZ2MuY29sbGVjdCgpLiAqLwogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeUdDX0NvbGxlY3Qodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKTsKKyNlbmRpZgorCiAvKiBUZXN0IGlmIGEgdHlwZSBoYXMgYSBHQyBoZWFkICovCiAjZGVmaW5lIFB5VHlwZV9JU19HQyh0KSBQeVR5cGVfSGFzRmVhdHVyZSgodCksIFB5X1RQRkxBR1NfSEFWRV9HQykKIApAQCAtMjQ5LDEzICsyNDksMzcgQEAKICAgICAgICAgdW5pb24gX2djX2hlYWQgKmdjX3ByZXY7CiAgICAgICAgIFB5X3NzaXplX3QgZ2NfcmVmczsKICAgICB9IGdjOwotICAgIGxvbmcgZG91YmxlIGR1bW15OyAgLyogZm9yY2Ugd29yc3QtY2FzZSBhbGlnbm1lbnQgKi8KKyAgICBkb3VibGUgZHVtbXk7ICAvKiBmb3JjZSB3b3JzdC1jYXNlIGFsaWdubWVudCAqLwogfSBQeUdDX0hlYWQ7CiAKIGV4dGVybiBQeUdDX0hlYWQgKl9QeUdDX2dlbmVyYXRpb24wOwogCiAjZGVmaW5lIF9QeV9BU19HQyhvKSAoKFB5R0NfSGVhZCAqKShvKS0xKQogCisvKiBCaXQgMCBpcyBzZXQgd2hlbiB0cF9maW5hbGl6ZSBpcyBjYWxsZWQgKi8KKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCAgKDEgPDwgMCkKKy8qIFRoZSAoTi0xKSBtb3N0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUgZ2Mgc3RhdGUgLyByZWZjb3VudCAqLworI2RlZmluZSBfUHlHQ19SRUZTX1NISUZUICAgICAgICAgICAoMSkKKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLICAgICAgICAgICAgKCgoc2l6ZV90KSAtMSkgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfUkVGUyhnKSAoKGcpLT5nYy5nY19yZWZzID4+IF9QeUdDX1JFRlNfU0hJRlQpCisjZGVmaW5lIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCB2KSBkbyB7IFwKKyAgICAoZyktPmdjLmdjX3JlZnMgPSAoKGcpLT5nYy5nY19yZWZzICYgfl9QeUdDX1JFRlNfTUFTSykgXAorICAgICAgICB8ICgoKHNpemVfdCkodikpIDw8IF9QeUdDX1JFRlNfU0hJRlQpOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1B5R0NIZWFkX0RFQ1JFRihnKSAoKGcpLT5nYy5nY19yZWZzIC09IDEgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfRklOQUxJWkVEKGcpICgoKGcpLT5nYy5nY19yZWZzICYgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgIT0gMCkKKyNkZWZpbmUgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoZywgdikgZG8geyAgXAorICAgIChnKS0+Z2MuZ2NfcmVmcyA9ICgoZyktPmdjLmdjX3JlZnMgJiB+X1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgXAorICAgICAgICB8ICh2ICE9IDApOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfUHlHQ19GSU5BTElaRUQobykgX1B5R0NIZWFkX0ZJTkFMSVpFRChfUHlfQVNfR0MobykpCisjZGVmaW5lIF9QeUdDX1NFVF9GSU5BTElaRUQobywgdikgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoX1B5X0FTX0dDKG8pLCB2KQorCisjZGVmaW5lIF9QeUdDX1JFRlMobykgX1B5R0NIZWFkX1JFRlMoX1B5X0FTX0dDKG8pKQorCiAjZGVmaW5lIF9QeUdDX1JFRlNfVU5UUkFDS0VEICAgICAgICAgICAgICAgICAgICAoLTIpCiAjZGVmaW5lIF9QeUdDX1JFRlNfUkVBQ0hBQkxFICAgICAgICAgICAgICAgICAgICAoLTMpCiAjZGVmaW5lIF9QeUdDX1JFRlNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICAoLTQpCkBAIC0yNjQsOSArMjg4LDkgQEAKICAqIGNvbGxlY3RvciBpdCBtdXN0IGJlIHNhZmUgdG8gY2FsbCB0aGUgb2JfdHJhdmVyc2UgbWV0aG9kLiAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVFJBQ0sobykgZG8geyBcCiAgICAgUHlHQ19IZWFkICpnID0gX1B5X0FTX0dDKG8pOyBcCi0gICAgaWYgKGctPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKKyAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKICAgICAgICAgUHlfRmF0YWxFcnJvcigiR0Mgb2JqZWN0IGFscmVhZHkgdHJhY2tlZCIpOyBcCi0gICAgZy0+Z2MuZ2NfcmVmcyA9IF9QeUdDX1JFRlNfUkVBQ0hBQkxFOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfUkVBQ0hBQkxFKTsgXAogICAgIGctPmdjLmdjX25leHQgPSBfUHlHQ19nZW5lcmF0aW9uMDsgXAogICAgIGctPmdjLmdjX3ByZXYgPSBfUHlHQ19nZW5lcmF0aW9uMC0+Z2MuZ2NfcHJldjsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnOyBcCkBAIC0yNzksOCArMzAzLDggQEAKICAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVU5UUkFDSyhvKSBkbyB7IFwKICAgICBQeUdDX0hlYWQgKmcgPSBfUHlfQVNfR0Mobyk7IFwKLSAgICBhc3NlcnQoZy0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7IFwKLSAgICBnLT5nYy5nY19yZWZzID0gX1B5R0NfUkVGU19VTlRSQUNLRUQ7IFwKKyAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnLT5nYy5nY19uZXh0OyBcCiAgICAgZy0+Z2MuZ2NfbmV4dC0+Z2MuZ2NfcHJldiA9IGctPmdjLmdjX3ByZXY7IFwKICAgICBnLT5nYy5nY19uZXh0ID0gTlVMTDsgXApAQCAtMjg4LDcgKzMxMiw3IEBACiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkgdHJhY2tlZCBieSB0aGUgR0MuICovCiAjZGVmaW5lIF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKG8pIFwKLSAgICAoKF9QeV9BU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCisgICAgKF9QeUdDX1JFRlMobykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBtYXkgYmUgdHJhY2tlZCBieSB0aGUgR0MgaW4gdGhlIGZ1dHVyZSwgb3IgYWxyZWFkeSBpcy4KICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBpbXBsZW1lbnQgc29tZSBvcHRpbWl6YXRpb25zLiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vcGNvZGUuaCBiL0luY2x1ZGUvb3Bjb2RlLmgKaW5kZXggYTkwMTg0ZC4uMDkzNmYyZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vcGNvZGUuaAorKysgYi9JbmNsdWRlL29wY29kZS5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIEJJTkFSWV9PUiAgICAgICA2NgogI2RlZmluZSBJTlBMQUNFX1BPV0VSICAgNjcKICNkZWZpbmUgR0VUX0lURVIgICAgICAgIDY4Ci0jZGVmaW5lIFNUT1JFX0xPQ0FMUyAgICA2OQogI2RlZmluZSBQUklOVF9FWFBSICAgICAgNzAKICNkZWZpbmUgTE9BRF9CVUlMRF9DTEFTUyA3MQogI2RlZmluZSBZSUVMRF9GUk9NICAgICAgNzIKQEAgLTE0MCw2ICsxMzksNyBAQAogI2RlZmluZSBTRVRfQUREICAgICAgICAgMTQ2CiAjZGVmaW5lIE1BUF9BREQgICAgICAgICAxNDcKIAorI2RlZmluZSBMT0FEX0NMQVNTREVSRUYgICAxNDgKIAogLyogRVhDRVBUX0hBTkRMRVIgaXMgYSBzcGVjaWFsLCBpbXBsaWNpdCBibG9jayB0eXBlIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbgogICAgZW50ZXJpbmcgYW4gZXhjZXB0IGhhbmRsZXIuIEl0IGlzIG5vdCBhbiBvcGNvZGUgYnV0IHdlIGRlZmluZSBpdCBoZXJlCmRpZmYgLS1naXQgYS9JbmNsdWRlL29zZGVmcy5oIGIvSW5jbHVkZS9vc2RlZnMuaAppbmRleCAwNWMwYzhlLi4wYzJlMzRiIDEwMDY0NAotLS0gYS9JbmNsdWRlL29zZGVmcy5oCisrKyBiL0luY2x1ZGUvb3NkZWZzLmgKQEAgLTksMTYgKzksMTAgQEAKIAogLyogTW9kIGJ5IGNocmlzaDogUU5YIGhhcyBXQVRDT00sIGJ1dCBpc24ndCBET1MgKi8KICNpZiAhZGVmaW5lZChfX1FOWF9fKQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKFBZT1NfT1MyKQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE1BWFBBVEhMRU4gMjYwCi0jZGVmaW5lIFNFUCBMJy8nCi0jZGVmaW5lIEFMVFNFUCBMJ1xcJwotI2Vsc2UKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fREpHUFBfXykKICNkZWZpbmUgU0VQIEwnXFwnCiAjZGVmaW5lIEFMVFNFUCBMJy8nCiAjZGVmaW5lIE1BWFBBVEhMRU4gMjU2Ci0jZW5kaWYKICNkZWZpbmUgREVMSU0gTCc7JwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGFyc2V0b2suaCBiL0luY2x1ZGUvcGFyc2V0b2suaAppbmRleCA5MTFkZmMxLi4yYWNiODU0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhcnNldG9rLmgKKysrIGIvSW5jbHVkZS9wYXJzZXRvay5oCkBAIC0zOCwyOSArMzgsNDkgQEAKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZyhjb25zdCBjaGFyICosIGdyYW1tYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKik7CiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgZ3JhbW1hciAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgcGVycmRldGFpbCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqKTsKIAogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7Ci1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosCi0JCQkJCSAgIGNvbnN0IGNoYXIqLCBncmFtbWFyICosCi0JCQkJCQkgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkJCSBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVuYywKKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBjb25zdCBjaGFyICplbmMsCiAgICAgZ3JhbW1hciAqZywKICAgICBpbnQgc3RhcnQsCi0gICAgY2hhciAqcHMxLAotICAgIGNoYXIgKnBzMiwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBjb25zdCBjaGFyICplbmMsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgY29uc3QgY2hhciAqcHMxLAorICAgIGNvbnN0IGNoYXIgKnBzMiwKICAgICBwZXJyZGV0YWlsICplcnJfcmV0LAogICAgIGludCAqZmxhZ3MpOwogCi1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKGNvbnN0IGNoYXIgKiwKLQkJCQkJICAgICAgY29uc3QgY2hhciAqLAotCQkJCQkgICAgICBncmFtbWFyICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeCgKICAgICBjb25zdCBjaGFyICpzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTY4LDYgKzg4LDEzIEBACiAgICAgaW50IHN0YXJ0LAogICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCiAgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgKmZsYWdzKTsKIAogLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHB5dGhvbnJ1bi5jLAogICAgbm90IGluIHBhcnNldG9rLmMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKaW5kZXggNjFhM2JhMC4uYzE4OThmMyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9wYXRjaGxldmVsLmgKKysrIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKQEAgLTE3LDEzICsxNywxMyBAQAogLyogVmVyc2lvbiBwYXJzZWQgb3V0IGludG8gbnVtZXJpYyB2YWx1ZXMgKi8KIC8qLS1zdGFydCBjb25zdGFudHMtLSovCiAjZGVmaW5lIFBZX01BSk9SX1ZFUlNJT04JMwotI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTMKLSNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgk1CisjZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JNAorI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTEKICNkZWZpbmUgUFlfUkVMRUFTRV9MRVZFTAlQWV9SRUxFQVNFX0xFVkVMX0ZJTkFMCiAjZGVmaW5lIFBZX1JFTEVBU0VfU0VSSUFMCTAKIAogLyogVmVyc2lvbiBhcyBhIHN0cmluZyAqLwotI2RlZmluZSBQWV9WRVJTSU9OICAgICAgCSIzLjMuNSsiCisjZGVmaW5lIFBZX1ZFUlNJT04gICAgICAJIjMuNC4xKyIKIC8qLS1lbmQgY29uc3RhbnRzLS0qLwogCiAvKiBWZXJzaW9uIGFzIGEgc2luZ2xlIDQtYnl0ZSBoZXggbnVtYmVyLCBlLmcuIDB4MDEwNTAyQjIgPT0gMS41LjJiMi4KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlkZWJ1Zy5oIGIvSW5jbHVkZS9weWRlYnVnLmgKaW5kZXggOTdjMmY4Yy4uOGZlOTgxOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWRlYnVnLmgKKysrIGIvSW5jbHVkZS9weWRlYnVnLmgKQEAgLTIwLDYgKzIwLDcgQEAKIFB5QVBJX0RBVEEoaW50KSBQeV9Ob1VzZXJTaXRlRGlyZWN0b3J5OwogUHlBUElfREFUQShpbnQpIFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWc7CiBQeUFQSV9EQVRBKGludCkgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnOworUHlBUElfREFUQShpbnQpIFB5X0lzb2xhdGVkRmxhZzsKIAogLyogdGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGdldGVudigpIHRoYXQgcGF5cyBhdHRlbnRpb24gdG8KICAgIFB5X0lnbm9yZUVudmlyb25tZW50RmxhZy4gIEl0IHNob3VsZCBiZSB1c2VkIGZvciBnZXR0aW5nIHZhcmlhYmxlcyBsaWtlCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5ZXJyb3JzLmggYi9JbmNsdWRlL3B5ZXJyb3JzLmgKaW5kZXggZTM4NTEyMy4uZTQ0ZmI1ZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWVycm9ycy5oCisrKyBiL0luY2x1ZGUvcHllcnJvcnMuaApAQCAtNTMsNiArNTMsNyBAQAogICAgIFB5T2JqZWN0ICpteWVycm5vOwogICAgIFB5T2JqZWN0ICpzdHJlcnJvcjsKICAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lMjsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlPYmplY3QgKndpbmVycm9yOwogI2VuZGlmCkBAIC03NSw2ICs3Niw5IEBACiAKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0Tm9uZShQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0T2JqZWN0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyh2b2lkKSBfUHlFcnJfU2V0S2V5RXJyb3IoUHlPYmplY3QgKik7CisjZW5kaWYKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0U3RyaW5nKAogICAgIFB5T2JqZWN0ICpleGNlcHRpb24sCiAgICAgY29uc3QgY2hhciAqc3RyaW5nICAgLyogZGVjb2RlZCBmcm9tIHV0Zi04ICovCkBAIC0xOTgsOSArMjAyLDYgQEAKICNpZmRlZiBNU19XSU5ET1dTCiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX1dpbmRvd3NFcnJvcjsKICNlbmRpZgotI2lmZGVmIF9fVk1TCi1QeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX1ZNU0Vycm9yOwotI2VuZGlmCiAKIFB5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0OwogCkBAIC0yMjUsNiArMjI2LDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoCiAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoCisgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZSgKICAgICBQeU9iamVjdCAqZXhjLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC0yNTMsNiArMjU2LDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCiAgICAgUHlPYmplY3QgKixpbnQsIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoCisgICAgUHlPYmplY3QgKixpbnQsIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZSgKICAgICBQeU9iamVjdCAqZXhjLAogICAgIGludCBpZXJyLApAQCAtMjg0LDYgKzI4OSwyOCBAQAogICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRvYywgUHlPYmplY3QgKmJhc2UsIFB5T2JqZWN0ICpkaWN0KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5T2JqZWN0ICopOwogCisvKiBJbiBleGNlcHRpb25zLmMgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKy8qIEhlbHBlciB0aGF0IGF0dGVtcHRzIHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHdpdGggb25lIG9mIHRoZQorICogc2FtZSB0eXBlIGJ1dCB3aXRoIGEgcHJlZml4IGFkZGVkIHRvIHRoZSBleGNlcHRpb24gdGV4dC4gVGhlIHJlc3VsdGluZworICogZXhjZXB0aW9uIGRlc2NyaXB0aW9uIGxvb2tzIGxpa2U6CisgKgorICogICAgIHByZWZpeCAoZXhjX3R5cGU6IG9yaWdpbmFsX2V4Y19zdHIpCisgKgorICogT25seSBzb21lIGV4Y2VwdGlvbnMgY2FuIGJlIHNhZmVseSByZXBsYWNlZC4gSWYgdGhlIGZ1bmN0aW9uIGRldGVybWluZXMKKyAqIGl0IGlzbid0IHNhZmUgdG8gcGVyZm9ybSB0aGUgcmVwbGFjZW1lbnQsIGl0IHdpbGwgbGVhdmUgdGhlIG9yaWdpbmFsCisgKiB1bm1vZGlmaWVkIGV4Y2VwdGlvbiBpbiBwbGFjZS4KKyAqCisgKiBSZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSBuZXcgZXhjZXB0aW9uIChpZiBhbnkpLCBOVUxMIGlmIHRoZQorICogZXhpc3RpbmcgZXhjZXB0aW9uIHdhcyBsZWZ0IGluIHBsYWNlLgorICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUVycl9UcnlTZXRGcm9tQ2F1c2UoCisgICAgY29uc3QgY2hhciAqcHJlZml4X2Zvcm1hdCwgICAvKiBBU0NJSS1lbmNvZGVkIHN0cmluZyAgKi8KKyAgICAuLi4KKyAgICApOworI2VuZGlmCisKKwogLyogSW4gc2lnY2hlY2suYyBvciBzaWduYWxtb2R1bGUuYyAqLwogUHlBUElfRlVOQyhpbnQpIFB5RXJyX0NoZWNrU2lnbmFscyh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0SW50ZXJydXB0KHZvaWQpOwpAQCAtMzAxLDkgKzMyOCwyMCBAQAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgbGluZW5vLAogICAgIGludCBjb2xfb2Zmc2V0KTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCkgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBsaW5lbm8sCisgICAgaW50IGNvbF9vZmZzZXQpOworI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1Byb2dyYW1UZXh0KAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgbGluZW5vKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBsaW5lbm8pOworI2VuZGlmCiAKIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbW9kaWZ5IHVuaWNvZGUKICAgIGV4Y2VwdGlvbnMgZnJvbSBDICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5aGFzaC5oIGIvSW5jbHVkZS9weWhhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2NhOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9weWhhc2guaApAQCAtMCwwICsxLDE0OSBAQAorI2lmbmRlZiBQeV9IQVNIX0gKKworI2RlZmluZSBQeV9IQVNIX0gKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogSGVscGVycyBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaERvdWJsZShkb3VibGUpOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoUG9pbnRlcih2b2lkKik7CitQeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hCeXRlcyhjb25zdCB2b2lkKiwgUHlfc3NpemVfdCk7CisjZW5kaWYKKworLyogUHJpbWUgbXVsdGlwbGllciB1c2VkIGluIHN0cmluZyBhbmQgdmFyaW91cyBvdGhlciBoYXNoZXMuICovCisjZGVmaW5lIF9QeUhBU0hfTVVMVElQTElFUiAxMDAwMDAzVUwgIC8qIDB4ZjQyNDMgKi8KKworLyogUGFyYW1ldGVycyB1c2VkIGZvciB0aGUgbnVtZXJpYyBoYXNoIGltcGxlbWVudGF0aW9uLiAgU2VlIG5vdGVzIGZvcgorICAgX1B5X0hhc2hEb3VibGUgaW4gT2JqZWN0cy9vYmplY3QuYy4gIE51bWVyaWMgaGFzaGVzIGFyZSBiYXNlZCBvbgorICAgcmVkdWN0aW9uIG1vZHVsbyB0aGUgcHJpbWUgMioqX1B5SEFTSF9CSVRTIC0gMS4gKi8KKworI2lmIFNJWkVPRl9WT0lEX1AgPj0gOAorIyAgZGVmaW5lIF9QeUhBU0hfQklUUyA2MQorI2Vsc2UKKyMgIGRlZmluZSBfUHlIQVNIX0JJVFMgMzEKKyNlbmRpZgorCisjZGVmaW5lIF9QeUhBU0hfTU9EVUxVUyAoKChzaXplX3QpMSA8PCBfUHlIQVNIX0JJVFMpIC0gMSkKKyNkZWZpbmUgX1B5SEFTSF9JTkYgMzE0MTU5CisjZGVmaW5lIF9QeUhBU0hfTkFOIDAKKyNkZWZpbmUgX1B5SEFTSF9JTUFHIF9QeUhBU0hfTVVMVElQTElFUgorCisKKy8qIGhhc2ggc2VjcmV0CisgKgorICogbWVtb3J5IGxheW91dCBvbiA2NCBiaXQgc3lzdGVtcworICogICBjY2NjY2NjYyBjY2NjY2NjYyBjY2NjY2NjYyAgdWMgLS0gdW5zaWduZWQgY2hhclsyNF0KKyAqICAgcHBwcHBwcHAgc3Nzc3Nzc3MgLi4uLi4uLi4gIGZudiAtLSB0d28gUHlfaGFzaF90CisgKiAgIGswazBrMGswIGsxazFrMWsxIC4uLi4uLi4uICBzaXBoYXNoIC0tIHR3byBQWV9VSU5UNjRfVAorICogICAuLi4uLi4uLiAuLi4uLi4uLiBzc3Nzc3NzcyAgZGpieDMzYSAtLSAxNiBieXRlcyBwYWRkaW5nICsgb25lIFB5X2hhc2hfdAorICogICAuLi4uLi4uLiAuLi4uLi4uLiBlZWVlZWVlZSAgcHlleHBhdCBYTUwgaGFzaCBzYWx0CisgKgorICogbWVtb3J5IGxheW91dCBvbiAzMiBiaXQgc3lzdGVtcworICogICBjY2NjY2NjYyBjY2NjY2NjYyBjY2NjY2NjYyAgdWMKKyAqICAgcHBwcHNzc3MgLi4uLi4uLi4gLi4uLi4uLi4gIGZudiAtLSB0d28gUHlfaGFzaF90CisgKiAgIGswazBrMGswIGsxazFrMWsxIC4uLi4uLi4uICBzaXBoYXNoIC0tIHR3byBQWV9VSU5UNjRfVCAoKikKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gc3Nzcy4uLi4gIGRqYngzM2EgLS0gMTYgYnl0ZXMgcGFkZGluZyArIG9uZSBQeV9oYXNoX3QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gZWVlZS4uLi4gIHB5ZXhwYXQgWE1MIGhhc2ggc2FsdAorICoKKyAqICgqKSBUaGUgc2lwaGFzaCBtZW1iZXIgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gMzIgYml0IHBsYXRmb3JtcyB3aXRob3V0CisgKiAgICAgYW4gdW5zaWduZWQgaW50NjQgZGF0YSB0eXBlLgorICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIHVuaW9uIHsKKyAgICAvKiBlbnN1cmUgMjQgYnl0ZXMgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHVjWzI0XTsKKyAgICAvKiB0d28gUHlfaGFzaF90IGZvciBGTlYgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICBQeV9oYXNoX3QgcHJlZml4OworICAgICAgICBQeV9oYXNoX3Qgc3VmZml4OworICAgIH0gZm52OworI2lmZGVmIFBZX1VJTlQ2NF9UCisgICAgLyogdHdvIHVpbnQ2NCBmb3IgU2lwSGFzaDI0ICovCisgICAgc3RydWN0IHsKKyAgICAgICAgUFlfVUlOVDY0X1QgazA7CisgICAgICAgIFBZX1VJTlQ2NF9UIGsxOworICAgIH0gc2lwaGFzaDsKKyNlbmRpZgorICAgIC8qIGEgZGlmZmVyZW50ICghKSBQeV9oYXNoX3QgZm9yIHNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24gKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgICAgICBQeV9oYXNoX3Qgc3VmZml4OworICAgIH0gZGpieDMzYTsKKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgICAgICBQeV9oYXNoX3QgaGFzaHNhbHQ7CisgICAgfSBleHBhdDsKK30gX1B5X0hhc2hTZWNyZXRfdDsKK1B5QVBJX0RBVEEoX1B5X0hhc2hTZWNyZXRfdCkgX1B5X0hhc2hTZWNyZXQ7CisjZW5kaWYKKworI2lmZGVmIFB5X0RFQlVHCitQeUFQSV9EQVRBKGludCkgX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQ7CisjZW5kaWYKKworCisvKiBoYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV9oYXNoX3QgKCpjb25zdCBoYXNoKShjb25zdCB2b2lkICosIFB5X3NzaXplX3QpOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgaW50IGhhc2hfYml0czsKKyAgICBjb25zdCBpbnQgc2VlZF9iaXRzOworfSBQeUhhc2hfRnVuY0RlZjsKKworUHlBUElfRlVOQyhQeUhhc2hfRnVuY0RlZiopIFB5SGFzaF9HZXRGdW5jRGVmKHZvaWQpOworI2VuZGlmCisKKworLyogY3V0b2ZmIGZvciBzbWFsbCBzdHJpbmcgREpCWDMzQSBvcHRpbWl6YXRpb24gaW4gcmFuZ2UgWzEsIGN1dG9mZikuCisgKgorICogQWJvdXQgNTAlIG9mIHRoZSBzdHJpbmdzIGluIGEgdHlwaWNhbCBQeXRob24gYXBwbGljYXRpb24gYXJlIHNtYWxsZXIgdGhhbgorICogNiB0byA3IGNoYXJzLiBIb3dldmVyIERKQlgzM0EgaXMgdnVsbmVyYWJsZSB0byBoYXNoIGNvbGxpc2lvbiBhdHRhY2tzLgorICogTkVWRVIgdXNlIERKQlgzM0EgZm9yIGxvbmcgc3RyaW5ncyEKKyAqCisgKiBBIFB5X0hBU0hfQ1VUT0ZGIG9mIDAgZGlzYWJsZXMgc21hbGwgc3RyaW5nIG9wdGltaXphdGlvbi4gMzIgYml0IHBsYXRmb3JtcworICogc2hvdWxkIHVzZSBhIHNtYWxsZXIgY3V0b2ZmIGJlY2F1c2UgaXQgaXMgZWFzaWVyIHRvIGNyZWF0ZSBjb2xsaWRpbmcKKyAqIHN0cmluZ3MuIEEgY3V0b2ZmIG9mIDcgb24gNjRiaXQgcGxhdGZvcm1zIGFuZCA1IG9uIDMyYml0IHBsYXRmb3JtcyBzaG91bGQKKyAqIHByb3ZpZGUgYSBkZWNlbnQgc2FmZXR5IG1hcmdpbi4KKyAqLworI2lmbmRlZiBQeV9IQVNIX0NVVE9GRgorIyAgZGVmaW5lIFB5X0hBU0hfQ1VUT0ZGIDAKKyNlbGlmIChQeV9IQVNIX0NVVE9GRiA+IDcgfHwgUHlfSEFTSF9DVVRPRkYgPCAwKQorIyAgZXJyb3IgUHlfSEFTSF9DVVRPRkYgbXVzdCBpbiByYW5nZSAwLi4uNy4KKyNlbmRpZiAvKiBQeV9IQVNIX0NVVE9GRiAqLworCisKKy8qIGhhc2ggYWxnb3JpdGhtIHNlbGVjdGlvbgorICoKKyAqIFRoZSB2YWx1ZXMgZm9yIFB5X0hBU0hfU0lQSEFTSDI0IGFuZCBQeV9IQVNIX0ZOViBhcmUgaGFyZC1jb2RlZCBpbiB0aGUKKyAqIGNvbmZpZ3VyZSBzY3JpcHQuCisgKgorICogLSBGTlYgaXMgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgYW5kIGFyY2hpdGVjdHVyZXMuCisgKiAtIFNJUEhBU0gyNCBvbmx5IHdvcmtzIG9uIHBsYWZvcm1zIHRoYXQgcHJvdmlkZSBQWV9VSU5UNjRfVCBhbmQgZG9lc24ndAorICogICByZXF1aXJlIGFsaWduZWQgbWVtb3J5IGZvciBpbnRlZ2Vycy4KKyAqIC0gV2l0aCBFWFRFUk5BTCBlbWJlZGRlcnMgY2FuIHByb3ZpZGUgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gd2l0aDo6CisgKgorICogICAgIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jID0gey4uLn07CisgKgorICogWFhYOiBGaWd1cmUgb3V0IF9fZGVjbHNwZWMoKSBmb3IgZXh0ZXJuIFB5SGFzaF9GdW5jRGVmLgorICovCisjZGVmaW5lIFB5X0hBU0hfRVhURVJOQUwgMAorI2RlZmluZSBQeV9IQVNIX1NJUEhBU0gyNCAxCisjZGVmaW5lIFB5X0hBU0hfRk5WIDIKKworI2lmbmRlZiBQeV9IQVNIX0FMR09SSVRITQorIyAgaWYgKGRlZmluZWQoUFlfVUlOVDY0X1QpICYmIGRlZmluZWQoUFlfVUlOVDMyX1QpIFwKKyAgICAgICAmJiAhZGVmaW5lZChIQVZFX0FMSUdORURfUkVRVUlSRUQpKQorIyAgICBkZWZpbmUgUHlfSEFTSF9BTEdPUklUSE0gUHlfSEFTSF9TSVBIQVNIMjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIFB5X0hBU0hfRk5WCisjICBlbmRpZiAvKiB1aW50NjRfdCAmJiB1aW50MzJfdCAmJiBhbGlnbmVkICovCisjZW5kaWYgLyogUHlfSEFTSF9BTEdPUklUSE0gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qICFQeV9IQVNIX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHltYWNyby5oIGIvSW5jbHVkZS9weW1hY3JvLmgKaW5kZXggNzkzZjY3ZC4uNzk5N2M1NSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1hY3JvLmgKKysrIGIvSW5jbHVkZS9weW1hY3JvLmgKQEAgLTY5LDQgKzY5LDEwIEBACiAvKiBDaGVjayBpZiBwb2ludGVyICJwIiBpcyBhbGlnbmVkIHRvICJhIi1ieXRlcyBib3VuZGFyeS4gKi8KICNkZWZpbmUgX1B5X0lTX0FMSUdORUQocCwgYSkgKCEoKFB5X3VpbnRwdHJfdCkocCkgJiAoUHlfdWludHB0cl90KSgoYSkgLSAxKSkpCiAKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBQeV9VTlVTRUQobmFtZSkgX3VudXNlZF8gIyMgbmFtZSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgUHlfVU5VU0VEKG5hbWUpIF91bnVzZWRfICMjIG5hbWUKKyNlbmRpZgorCiAjZW5kaWYgLyogUHlfUFlNQUNST19IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWVtLmggYi9JbmNsdWRlL3B5bWVtLmgKaW5kZXggMTBiNWJlYS4uMjM3MmI4NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1lbS5oCisrKyBiL0luY2x1ZGUvcHltZW0uaApAQCAtMTEsNiArMTEsMTMgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cik7CisjZW5kaWYKKworCiAvKiBCRVdBUkU6CiAKICAgIEVhY2ggaW50ZXJmYWNlIGV4cG9ydHMgYm90aCBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4gIEV4dGVuc2lvbiBtb2R1bGVzIHNob3VsZApAQCAtNDksMjEgKzU2LDE2IEBACiAgICBwZXJmb3JtZWQgb24gZmFpbHVyZSAobm8gZXhjZXB0aW9uIGlzIHNldCwgbm8gd2FybmluZyBpcyBwcmludGVkLCBldGMpLgogKi8KIAotUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX01hbGxvYyhzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1JlYWxsb2Modm9pZCAqLCBzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9GcmVlKHZvaWQgKik7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fTWFsbG9jKHNpemVfdCBzaXplKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fRnJlZSh2b2lkICpwdHIpOwogCi0vKiBTdGFydGluZyBmcm9tIFB5dGhvbiAxLjYsIHRoZSB3cmFwcGVycyBQeV97TWFsbG9jLFJlYWxsb2MsRnJlZX0gYXJlCi0gICBubyBsb25nZXIgc3VwcG9ydGVkLiBUaGV5IHVzZWQgdG8gY2FsbCBQeUVycl9Ob01lbW9yeSgpIG9uIGZhaWx1cmUuICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGNoYXIgKikgX1B5TWVtX1Jhd1N0cmR1cChjb25zdCBjaGFyICpzdHIpOworUHlBUElfRlVOQyhjaGFyICopIF9QeU1lbV9TdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKKyNlbmRpZgogCiAvKiBNYWNyb3MuICovCi0jaWZkZWYgUFlNQUxMT0NfREVCVUcKLS8qIFJlZGlyZWN0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyB0byBQeXRob24ncyBkZWJ1Z2dpbmcgYWxsb2NhdG9yLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MJCV9QeU1lbV9EZWJ1Z01hbGxvYwotI2RlZmluZSBQeU1lbV9SRUFMTE9DCQlfUHlNZW1fRGVidWdSZWFsbG9jCi0jZGVmaW5lIFB5TWVtX0ZSRUUJCV9QeU1lbV9EZWJ1Z0ZyZWUKLQotI2Vsc2UJLyogISBQWU1BTExPQ19ERUJVRyAqLwogCiAvKiBQeU1lbV9NQUxMT0MoMCkgbWVhbnMgbWFsbG9jKDEpLiBTb21lIHN5c3RlbXMgd291bGQgcmV0dXJuIE5VTEwKICAgIGZvciBtYWxsb2MoMCksIHdoaWNoIHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuIFNvbWUgcGxhdGZvcm1zCkBAIC03MSwxMyArNzMsOSBAQAogICAgcHltYWxsb2MuIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLwogLyogUmV0dXJucyBOVUxMIHRvIGluZGljYXRlIGVycm9yIGlmIGEgbmVnYXRpdmUgc2l6ZSBvciBzaXplIGxhcmdlciB0aGFuCiAgICBQeV9zc2l6ZV90IGNhbiByZXByZXNlbnQgaXMgc3VwcGxpZWQuICBIZWxwcyBwcmV2ZW50cyBzZWN1cml0eSBob2xlcy4gKi8KLSNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pCQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYID8gTlVMTCBcCi0JCQkJOiBtYWxsb2MoKG4pID8gKG4pIDogMSkpCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikJKChzaXplX3QpKG4pID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAgPyBOVUxMIFwKLQkJCQk6IHJlYWxsb2MoKHApLCAobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fRlJFRQkJZnJlZQotCi0jZW5kaWYJLyogUFlNQUxMT0NfREVCVUcgKi8KKyNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pICAgICAgICAgUHlNZW1fTWFsbG9jKG4pCisjZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikgICAgIFB5TWVtX1JlYWxsb2MocCwgbikKKyNkZWZpbmUgUHlNZW1fRlJFRShwKSAgICAgICAgICAgUHlNZW1fRnJlZShwKQogCiAvKgogICogVHlwZS1vcmllbnRlZCBtZW1vcnkgaW50ZXJmYWNlCkBAIC0xMTUsNiArMTEzLDY5IEBACiAjZGVmaW5lIFB5TWVtX0RlbAkJUHlNZW1fRnJlZQogI2RlZmluZSBQeU1lbV9ERUwJCVB5TWVtX0ZSRUUKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBlbnVtIHsKKyAgICAvKiBQeU1lbV9SYXdNYWxsb2MoKSwgUHlNZW1fUmF3UmVhbGxvYygpIGFuZCBQeU1lbV9SYXdGcmVlKCkgKi8KKyAgICBQWU1FTV9ET01BSU5fUkFXLAorCisgICAgLyogUHlNZW1fTWFsbG9jKCksIFB5TWVtX1JlYWxsb2MoKSBhbmQgUHlNZW1fRnJlZSgpICovCisgICAgUFlNRU1fRE9NQUlOX01FTSwKKworICAgIC8qIFB5T2JqZWN0X01hbGxvYygpLCBQeU9iamVjdF9SZWFsbG9jKCkgYW5kIFB5T2JqZWN0X0ZyZWUoKSAqLworICAgIFBZTUVNX0RPTUFJTl9PQkoKK30gUHlNZW1BbGxvY2F0b3JEb21haW47CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgMyBmdW5jdGlvbnMgKi8KKyAgICB2b2lkICpjdHg7CisKKyAgICAvKiBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqbWFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkKiAoKnJlYWxsb2MpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKKworICAgIC8qIHJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKmN0eCwgdm9pZCAqcHRyKTsKK30gUHlNZW1BbGxvY2F0b3I7CisKKy8qIEdldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKyAgIFRoZSBuZXcgYWxsb2NhdG9yIG11c3QgcmV0dXJuIGEgZGlzdGluY3Qgbm9uLU5VTEwgcG9pbnRlciB3aGVuIHJlcXVlc3RpbmcKKyAgIHplcm8gYnl0ZXMuCisKKyAgIEZvciB0aGUgUFlNRU1fRE9NQUlOX1JBVyBkb21haW4sIHRoZSBhbGxvY2F0b3IgbXVzdCBiZSB0aHJlYWQtc2FmZTogdGhlIEdJTAorICAgaXMgbm90IGhlbGQgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNhbGxlZC4KKworICAgSWYgdGhlIG5ldyBhbGxvY2F0b3IgaXMgbm90IGEgaG9vayAoZG9uJ3QgY2FsbCB0aGUgcHJldmlvdXMgYWxsb2NhdG9yKSwgdGhlCisgICBQeU1lbV9TZXR1cERlYnVnSG9va3MoKSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlIGRlYnVnIGhvb2tzCisgICBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5TWVtX1NldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0dXAgaG9va3MgdG8gZGV0ZWN0IGJ1Z3MgaW4gdGhlIGZvbGxvd2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRvcgorICAgZnVuY3Rpb25zOgorCisgICAtIFB5TWVtX1Jhd01hbGxvYygpLCBQeU1lbV9SYXdSZWFsbG9jKCksIFB5TWVtX1Jhd0ZyZWUoKQorICAgLSBQeU1lbV9NYWxsb2MoKSwgUHlNZW1fUmVhbGxvYygpLCBQeU1lbV9GcmVlKCkKKyAgIC0gUHlPYmplY3RfTWFsbG9jKCksIFB5T2JqZWN0X1JlYWxsb2MoKSBhbmQgUHlPYmplY3RfRnJlZSgpCisKKyAgIE5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdGhlIGJ5dGUgMHhDQiwgZnJlZWQgbWVtb3J5IGlzIGZpbGxlZAorICAgd2l0aCB0aGUgYnl0ZSAweERCLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogUHlPYmplY3RfRnJlZSgpIGNhbGxlZCBvbiBhIGJ1ZmZlciBhbGxvY2F0ZWQKKyAgICAgYnkgUHlNZW1fTWFsbG9jKCkKKyAgIC0gZGV0ZWN0IHdyaXRlIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIHVuZGVyZmxvdykKKyAgIC0gZGV0ZWN0IHdyaXRlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIG92ZXJmbG93KQorCisgICBUaGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIFB5dGhvbiBpcyBub3QgY29tcGlsZWQgaXMgZGVidWcgbW9kZS4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5cG9ydC5oIGIvSW5jbHVkZS9weXBvcnQuaAppbmRleCBhNWVkZWE5Li5jNzA2MjEzIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5cG9ydC5oCisrKyBiL0luY2x1ZGUvcHlwb3J0LmgKQEAgLTE0NCwyMyArMTQ0LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLS8qIFByaW1lIG11bHRpcGxpZXIgdXNlZCBpbiBzdHJpbmcgYW5kIHZhcmlvdXMgb3RoZXIgaGFzaGVzLiAqLwotI2RlZmluZSBfUHlIQVNIX01VTFRJUExJRVIgMTAwMDAwM1VMICAvKiAweGY0MjQzICovCi0KLS8qIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIG51bWVyaWMgaGFzaCBpbXBsZW1lbnRhdGlvbi4gIFNlZSBub3RlcyBmb3IKLSAgIF9QeV9IYXNoRG91YmxlIGluIE9iamVjdHMvb2JqZWN0LmMuICBOdW1lcmljIGhhc2hlcyBhcmUgYmFzZWQgb24KLSAgIHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lIDIqKl9QeUhBU0hfQklUUyAtIDEuICovCi0KLSNpZiBTSVpFT0ZfVk9JRF9QID49IDgKLSNkZWZpbmUgX1B5SEFTSF9CSVRTIDYxCi0jZWxzZQotI2RlZmluZSBfUHlIQVNIX0JJVFMgMzEKLSNlbmRpZgotI2RlZmluZSBfUHlIQVNIX01PRFVMVVMgKCgoc2l6ZV90KTEgPDwgX1B5SEFTSF9CSVRTKSAtIDEpCi0jZGVmaW5lIF9QeUhBU0hfSU5GIDMxNDE1OQotI2RlZmluZSBfUHlIQVNIX05BTiAwCi0jZGVmaW5lIF9QeUhBU0hfSU1BRyBfUHlIQVNIX01VTFRJUExJRVIKLQogLyogdWludHB0cl90IGlzIHRoZSBDOVggbmFtZSBmb3IgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSBzdWNoIHRoYXQgYQogICogbGVnaXRpbWF0ZSB2b2lkKiBjYW4gYmUgY2FzdCB0byB1aW50cHRyX3QgYW5kIHRoZW4gYmFjayB0byB2b2lkKiBhZ2FpbgogICogd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLiAgU2ltaWxhcmx5IGZvciBpbnRwdHJfdCwgd3J0IGEgc2lnbmVkCkBAIC0xOTksMTAgKzE4MiwxOSBAQAogI2VuZGlmCiAKIC8qIFB5X2hhc2hfdCBpcyB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlci4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX0hBU0hfVCBTSVpFT0ZfU0laRV9UCiB0eXBlZGVmIFB5X3NzaXplX3QgUHlfaGFzaF90OwogLyogUHlfdWhhc2hfdCBpcyB0aGUgdW5zaWduZWQgZXF1aXZhbGVudCBuZWVkZWQgdG8gY2FsY3VsYXRlIG51bWVyaWMgaGFzaC4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX1VIQVNIX1QgU0laRU9GX1NJWkVfVAogdHlwZWRlZiBzaXplX3QgUHlfdWhhc2hfdDsKIAorLyogT25seSB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IG1heSBub3QgYmUgUFlfU1NJWkVfVF9DTEVBTi4gKi8KKyNpZmRlZiBQWV9TU0laRV9UX0NMRUFOCit0eXBlZGVmIFB5X3NzaXplX3QgUHlfc3NpemVfY2xlYW5fdDsKKyNlbHNlCit0eXBlZGVmIGludCBQeV9zc2l6ZV9jbGVhbl90OworI2VuZGlmCisKIC8qIExhcmdlc3QgcG9zc2libGUgdmFsdWUgb2Ygc2l6ZV90LgogICAgU0laRV9NQVggaXMgcGFydCBvZiBDOTksIHNvIGl0IG1pZ2h0IGJlIGRlZmluZWQgb24gc29tZQogICAgcGxhdGZvcm1zLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgKHNpemVfdCktMSBpcyBhIHBvcnRhYmxlCkBAIC0yMTksMTAgKzIxMSw2IEBACiAvKiBTbWFsbGVzdCBuZWdhdGl2ZSB2YWx1ZSBvZiB0eXBlIFB5X3NzaXplX3QuICovCiAjZGVmaW5lIFBZX1NTSVpFX1RfTUlOICgtUFlfU1NJWkVfVF9NQVgtMSkKIAotI2lmIFNJWkVPRl9QSURfVCA+IFNJWkVPRl9MT05HCi0jICAgZXJyb3IgIlB5dGhvbiBkb2Vzbid0IHN1cHBvcnQgc2l6ZW9mKHBpZF90KSA+IHNpemVvZihsb25nKSIKLSNlbmRpZgotCiAvKiBQWV9GT1JNQVRfU0laRV9UIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgbW9kaWZpZXIgZm9yIHVzZSBpbiBhIHByaW50ZgogICogZm9ybWF0IHRvIGNvbnZlcnQgYW4gYXJndW1lbnQgd2l0aCB0aGUgd2lkdGggb2YgYSBzaXplX3Qgb3IgUHlfc3NpemVfdC4KICAqIEM5OSBpbnRyb2R1Y2VkICJ6IiBmb3IgdGhpcyBwdXJwb3NlLCBidXQgbm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCB0aGF0OwpAQCAtMjY3LDcgKzI1NSw3IEBACiAgKi8KICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogIyAgIGlmbmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCi0jICAgICAgIGlmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyMgICAgICAgaWZkZWYgTVNfV0lORE9XUwogIyAgICAgICAgICAgZGVmaW5lIFBZX0ZPUk1BVF9MT05HX0xPTkcgIkk2NCIKICMgICAgICAgZWxzZQogIyAgICAgICAgICAgZXJyb3IgIlRoaXMgcGxhdGZvcm0ncyBweWNvbmZpZy5oIG5lZWRzIHRvIGRlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HIgpAQCAtMzkyLDE3ICszODAsMjAgQEAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVF9IKQogI2luY2x1ZGUgPHN0YXQuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKQorI2lmbmRlZiBTX0lGTVQKIC8qIFZpc3VhbEFnZSBDL0MrKyBGYWlsZWQgdG8gRGVmaW5lIE1vdW50VHlwZSBGaWVsZCBpbiBzeXMvc3RhdC5oICovCi0jZGVmaW5lIFNfSUZNVCAoU19JRkRJUnxTX0lGQ0hSfFNfSUZSRUcpCisjZGVmaW5lIFNfSUZNVCAwMTcwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGTE5LCisvKiBXaW5kb3dzIGRvZXNuJ3QgZGVmaW5lIFNfSUZMTksgYnV0IHBvc2l4bW9kdWxlLmMgbWFwcworICogSU9fUkVQQVJTRV9UQUdfU1lNTElOSyB0byBTX0lGTE5LICovCisjICBkZWZpbmUgU19JRkxOSyAwMTIwMDAwCiAjZW5kaWYKIAogI2lmbmRlZiBTX0lTUkVHCkBAIC00MTMsNiArNDA0LDkgQEAKICNkZWZpbmUgU19JU0RJUih4KSAoKCh4KSAmIFNfSUZNVCkgPT0gU19JRkRJUikKICNlbmRpZgogCisjaWZuZGVmIFNfSVNDSFIKKyNkZWZpbmUgU19JU0NIUih4KSAoKCh4KSAmIFNfSUZNVCkgPT0gU19JRkNIUikKKyNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIC8qIE1vdmUgdGhpcyBkb3duIGhlcmUgc2luY2Ugc29tZSBDKysgI2luY2x1ZGUncyBkb24ndCBsaWtlIHRvIGJlIGluY2x1ZGVkCkBAIC04MzUsMTUgKzgyOSw2IEBACiAjZW5kaWYKIAogLyoKLSAqIEFkZCBQeUFyZ19QYXJzZVR1cGxlIGZvcm1hdCB3aGVyZSBhdmFpbGFibGUuCi0gKi8KLSNpZmRlZiBIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRQotI2RlZmluZSBQeV9GT1JNQVRfUEFSU0VUVVBMRShmdW5jLHAxLHAyKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoZnVuYyxwMSxwMikpKQotI2Vsc2UKLSNkZWZpbmUgUHlfRk9STUFUX1BBUlNFVFVQTEUoZnVuYyxwMSxwMikKLSNlbmRpZgotCi0vKgogICogU3BlY2lmeSBhbGlnbm1lbnQgb24gY29tcGlsZXJzIHRoYXQgc3VwcG9ydCBpdC4KICAqLwogI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKQEAgLTg4MSw0ICs4NjYsMTggQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBDb252ZW5pZW50IG1hY3JvcyB0byBkZWFsIHdpdGggZW5kaWFubmVzcyBvZiB0aGUgcGxhdGZvcm0uIFdPUkRTX0JJR0VORElBTiBpcworICogZGV0ZWN0ZWQgYnkgY29uZmlndXJlIGFuZCBkZWZpbmVkIGluIHB5Y29uZmlnLmguIFRoZSBjb2RlIGluIHB5Y29uZmlnLmgKKyAqIGFsc28gdGFrZXMgY2FyZSBvZiBBcHBsZSdzIHVuaXZlcnNhbCBidWlsZHMuCisgKi8KKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBQWV9CSUdfRU5ESUFOIDEKKyNkZWZpbmUgUFlfTElUVExFX0VORElBTiAwCisjZWxzZQorI2RlZmluZSBQWV9CSUdfRU5ESUFOIDAKKyNkZWZpbmUgUFlfTElUVExFX0VORElBTiAxCisjZW5kaWYKKwogI2VuZGlmIC8qIFB5X1BZUE9SVF9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5c3RhdGUuaCBiL0luY2x1ZGUvcHlzdGF0ZS5oCmluZGV4IDIwMTdiMDIuLjQ5OTJjMjIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlzdGF0ZS5oCisrKyBiL0luY2x1ZGUvcHlzdGF0ZS5oCkBAIC0zMyw3ICszMyw2IEBACiAgICAgaW50IGNvZGVjc19pbml0aWFsaXplZDsKICAgICBpbnQgZnNjb2RlY19pbml0aWFsaXplZDsKIAotCiAjaWZkZWYgSEFWRV9ETE9QRU4KICAgICBpbnQgZGxvcGVuZmxhZ3M7CiAjZW5kaWYKQEAgLTQxLDYgKzQwLDcgQEAKICAgICBpbnQgdHNjZHVtcDsKICNlbmRpZgogCisgICAgUHlPYmplY3QgKmJ1aWx0aW5zX2NvcHk7CiB9IFB5SW50ZXJwcmV0ZXJTdGF0ZTsKICNlbmRpZgogCkBAIC02OSw2ICs2OSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfdHMgewogICAgIC8qIFNlZSBQeXRob24vY2V2YWwuYyBmb3IgY29tbWVudHMgZXhwbGFpbmluZyBtb3N0IGZpZWxkcyAqLwogCisgICAgc3RydWN0IF90cyAqcHJldjsKICAgICBzdHJ1Y3QgX3RzICpuZXh0OwogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwogCkBAIC05OSwxNiArMTAwLDYgQEAKIAogICAgIFB5T2JqZWN0ICpkaWN0OyAgLyogU3RvcmVzIHBlci10aHJlYWQgc3RhdGUgKi8KIAotICAgIC8qIFhYWCBkb2Vzbid0IG1lYW4gYW55dGhpbmcgYW55bW9yZSAodGhlIGNvbW1lbnQgYmVsb3cgaXMgb2Jzb2xldGUpCi0gICAgICAgPT4gZGVwcmVjYXRlIG9yIHJlbW92ZT8gKi8KLSAgICAvKiB0aWNrX2NvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGNoZWNrX2ludGVydmFsIHRpY2tlcgotICAgICAqIHJlYWNoZXMgemVyby4gVGhlIHB1cnBvc2UgaXMgdG8gZ2l2ZSBhIHVzZWZ1bCBtZWFzdXJlIG9mIHRoZSBudW1iZXIKLSAgICAgKiBvZiBpbnRlcnByZXRlZCBieXRlY29kZSBpbnN0cnVjdGlvbnMgaW4gYSBnaXZlbiB0aHJlYWQuICBUaGlzCi0gICAgICogZXh0cmVtZWx5IGxpZ2h0d2VpZ2h0IHN0YXRpc3RpYyBjb2xsZWN0b3IgbWF5IGJlIG9mIGludGVyZXN0IHRvCi0gICAgICogcHJvZmlsZXJzIChsaWtlIHBzeWNvLmppdCgpKSwgYWx0aG91Z2ggbm90aGluZyBpbiB0aGUgY29yZSB1c2VzIGl0LgotICAgICAqLwotICAgIGludCB0aWNrX2NvdW50ZXI7Ci0KICAgICBpbnQgZ2lsc3RhdGVfY291bnRlcjsKIAogICAgIFB5T2JqZWN0ICphc3luY19leGM7IC8qIEFzeW5jaHJvbm91cyBleGNlcHRpb24gdG8gcmFpc2UgKi8KQEAgLTExNyw2ICsxMDgsMzIgQEAKICAgICBpbnQgdHJhc2hfZGVsZXRlX25lc3Rpbmc7CiAgICAgUHlPYmplY3QgKnRyYXNoX2RlbGV0ZV9sYXRlcjsKIAorICAgIC8qIENhbGxlZCB3aGVuIGEgdGhyZWFkIHN0YXRlIGlzIGRlbGV0ZWQgbm9ybWFsbHksIGJ1dCBub3Qgd2hlbiBpdAorICAgICAqIGlzIGRlc3Ryb3llZCBhZnRlciBmb3JrKCkuCisgICAgICogUGFpbjogIHRvIHByZXZlbnQgcmFyZSBidXQgZmF0YWwgc2h1dGRvd24gZXJyb3JzIChpc3N1ZSAxODgwOCksCisgICAgICogVGhyZWFkLmpvaW4oKSBtdXN0IHdhaXQgZm9yIHRoZSBqb2luJ2VkIHRocmVhZCdzIHRzdGF0ZSB0byBiZSB1bmxpbmtlZAorICAgICAqIGZyb20gdGhlIHRzdGF0ZSBjaGFpbi4gIFRoYXQgaGFwcGVucyBhdCB0aGUgZW5kIG9mIGEgdGhyZWFkJ3MgbGlmZSwKKyAgICAgKiBpbiBweXN0YXRlLmMuCisgICAgICogVGhlIG9idmlvdXMgd2F5IGRvZXNuJ3QgcXVpdGUgd29yazogIGNyZWF0ZSBhIGxvY2sgd2hpY2ggdGhlIHRzdGF0ZQorICAgICAqIHVubGlua2luZyBjb2RlIHJlbGVhc2VzLCBhbmQgaGF2ZSBUaHJlYWQuam9pbigpIHdhaXQgdG8gYWNxdWlyZSB0aGF0CisgICAgICogbG9jay4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgX2FyZV8gYXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZToKKyAgICAgKiBpZiB0aGUgdGhyZWFkIGhvbGRzIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgbG9jaywgZGVjcmVmJ2luZyB0aGUKKyAgICAgKiBsb2NrIHdpbGwgZGVsZXRlIHRoZSBsb2NrLCBhbmQgdGhhdCBtYXkgdHJpZ2dlciBhcmJpdHJhcnkgUHl0aG9uIGNvZGUKKyAgICAgKiBpZiB0aGVyZSdzIGEgd2Vha3JlZiwgd2l0aCBhIGNhbGxiYWNrLCB0byB0aGUgbG9jay4gIEJ1dCBieSB0aGlzIHRpbWUKKyAgICAgKiBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50IGlzIGFscmVhZHkgTlVMTCwgc28gb25seSB0aGUgc2ltcGxlc3Qgb2YgQyBjb2RlCisgICAgICogY2FuIGJlIGFsbG93ZWQgdG8gcnVuIChpbiBwYXJ0aWN1bGFyIGl0IG11c3Qgbm90IGJlIHBvc3NpYmxlIHRvCisgICAgICogcmVsZWFzZSB0aGUgR0lMKS4KKyAgICAgKiBTbyBpbnN0ZWFkIG9mIGhvbGRpbmcgdGhlIGxvY2sgZGlyZWN0bHksIHRoZSB0c3RhdGUgaG9sZHMgYSB3ZWFrcmVmIHRvCisgICAgICogdGhlIGxvY2s6ICB0aGF0J3MgdGhlIHZhbHVlIG9mIG9uX2RlbGV0ZV9kYXRhIGJlbG93LiAgRGVjcmVmJ2luZyBhCisgICAgICogd2Vha3JlZiBpcyBoYXJtbGVzcy4KKyAgICAgKiBvbl9kZWxldGUgcG9pbnRzIHRvIF90aHJlYWRtb2R1bGUuYydzIHN0YXRpYyByZWxlYXNlX3NlbnRpbmVsKCkgZnVuY3Rpb24uCisgICAgICogQWZ0ZXIgdGhlIHRzdGF0ZSBpcyB1bmxpbmtlZCwgcmVsZWFzZV9zZW50aW5lbCBpcyBjYWxsZWQgd2l0aCB0aGUKKyAgICAgKiB3ZWFrcmVmLXRvLWxvY2sgKG9uX2RlbGV0ZV9kYXRhKSBhcmd1bWVudCwgYW5kIHJlbGVhc2Vfc2VudGluZWwgcmVsZWFzZXMKKyAgICAgKiB0aGUgaW5kaXJlY3RseSBoZWxkIGxvY2suCisgICAgICovCisgICAgdm9pZCAoKm9uX2RlbGV0ZSkodm9pZCAqKTsKKyAgICB2b2lkICpvbl9kZWxldGVfZGF0YTsKKwogICAgIC8qIFhYWCBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIGFsc28gYmUgaGVyZSAqLwogCiB9IFB5VGhyZWFkU3RhdGU7CkBAIC0xMzMsMTIgKzE1MCwxNiBAQAogUHlBUElfRlVOQyhpbnQpIFB5U3RhdGVfUmVtb3ZlTW9kdWxlKHN0cnVjdCBQeU1vZHVsZURlZiopOwogI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlTdGF0ZV9GaW5kTW9kdWxlKHN0cnVjdCBQeU1vZHVsZURlZiopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyh2b2lkKSBfUHlTdGF0ZV9DbGVhck1vZHVsZXModm9pZCk7CisjZW5kaWYKIAogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIFB5VGhyZWFkU3RhdGVfTmV3KFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKTsKIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYyhQeUludGVycHJldGVyU3RhdGUgKik7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeVRocmVhZFN0YXRlX0luaXQoUHlUaHJlYWRTdGF0ZSAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRTdGF0ZV9DbGVhcihQeVRocmVhZFN0YXRlICopOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0RlbGV0ZShQeVRocmVhZFN0YXRlICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUdJTFN0YXRlX1JlaW5pdCh2b2lkKTsKQEAgLTIxMiw2ICsyMzMsMTMgQEAKICovCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUodm9pZCk7CiAKKy8qIEhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uIC0gcmV0dXJuIDEgaWYgdGhlIGN1cnJlbnQgdGhyZWFkCisgKiBjdXJyZW50bHkgaG9sZHMgdGhlIEdJTCwgMCBvdGhlcndpc2UKKyAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIFB5R0lMU3RhdGVfQ2hlY2sodm9pZCk7CisjZW5kaWYKKwogI2VuZGlmICAgLyogI2lmZGVmIFdJVEhfVEhSRUFEICovCiAKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkgIFJldHVybnMgYSBkaWN0IG1hcHBpbmcKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHl0aG9ucnVuLmggYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCmluZGV4IGU4YTU4MmQuLjJmYzU1NzggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrIGIvSW5jbHVkZS9weXRob25ydW4uaApAQCAtMjgsNiArMjgsMTQgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICopOwogUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldFB5dGhvbkhvbWUodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKy8qIE9ubHkgdXNlZCBieSBhcHBsaWNhdGlvbnMgdGhhdCBlbWJlZCB0aGUgaW50ZXJwcmV0ZXIgYW5kIG5lZWQgdG8KKyAqIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlbmNvZGluZyBkZXRlcm1pbmF0aW9uIG1lY2hhbmlzbQorICovCitQeUFQSV9GVU5DKGludCkgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisjZW5kaWYKKwogUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplRXgoaW50KTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKQEAgLTU1LDYgKzYzLDEwIEBACiAgICAgRklMRSAqZnAsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOworUHlBUElfRlVOQyhpbnQpIFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKTsKIFB5QVBJX0ZVTkMoaW50KSBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncygKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC02Niw2ICs3OCwxMiBAQAogICAgIGludCBzdGFydCwKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgc3RhcnQsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBQeUFyZW5hICphcmVuYSk7CiBQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21GaWxlKAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTc2LDYgKzk0LDE2IEBACiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBpbnQgKmVycmNvZGUsCiAgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdCgKKyAgICBGSUxFICpmcCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgY29uc3QgY2hhciogZW5jLAorICAgIGludCBzdGFydCwKKyAgICBjaGFyICpwczEsCisgICAgY2hhciAqcHMyLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50ICplcnJjb2RlLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKICNlbmRpZgogCiAjaWZuZGVmIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nCkBAIC0xMTcsMTEgKzE0NSwyMiBAQAogICAgIGludCBzdGFydCwKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGludCBvcHRpbWl6ZSk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqc3RyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplKTsKICNlbmRpZgogUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmcoCiAgICAgY29uc3QgY2hhciAqc3RyLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgc3RhcnQpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqc3RyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgc3RhcnQpOworI2VuZGlmCiAKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfUHJpbnQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1ByaW50RXgoaW50KTsKQEAgLTE5Nyw3ICsyMzYsNyBAQAogUHlBUElfRlVOQyh2b2lkKSBfUHlFeGNfSW5pdChQeU9iamVjdCAqIGJsdGlubW9kKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5SW1wb3J0SG9va3NfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlGcmFtZV9Jbml0KHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlGbG9hdF9Jbml0KHZvaWQpOworUHlBUElfRlVOQyhpbnQpIF9QeUZsb2F0X0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKGludCkgUHlCeXRlQXJyYXlfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5UmFuZG9tX0luaXQodm9pZCk7CiAjZW5kaWYKQEAgLTIxNywxOSArMjU2LDIxIEBACiBQeUFQSV9GVU5DKHZvaWQpIFB5Qnl0ZUFycmF5X0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RmxvYXRfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlPU19GaW5pSW50ZXJydXB0cyh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5R0NfRHVtcFNodXRkb3duU3RhdHModm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUdDX0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5U2xpY2VfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5VHlwZV9GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlSYW5kb21fRmluaSh2b2lkKTsKIAogUHlBUElfREFUQShQeVRocmVhZFN0YXRlICopIF9QeV9GaW5hbGl6aW5nOwogI2VuZGlmCiAKIC8qIFN0dWZmIHdpdGggbm8gcHJvcGVyIGhvbWUgKHlldCkgKi8KICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLVB5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworUHlBUElfRlVOQyhjaGFyICopIFB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKIFB5QVBJX0RBVEEoaW50KSAoKlB5T1NfSW5wdXRIb29rKSh2b2lkKTsKLVB5QVBJX0RBVEEoY2hhcikgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitQeUFQSV9EQVRBKGNoYXIpICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfREFUQShQeVRocmVhZFN0YXRlKikgX1B5T1NfUmVhZGxpbmVUU3RhdGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHl0aW1lLmggYi9JbmNsdWRlL3B5dGltZS5oCmluZGV4IDUyOTAyZjUuLmIwZmM2ZDAgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aW1lLmgKKysrIGIvSW5jbHVkZS9weXRpbWUuaApAQCAtNTMsMTAgKzUzLDE5IEBACiAgICAgICh0dl9lbmQudHZfdXNlYyAtIHR2X3N0YXJ0LnR2X3VzZWMpICogMC4wMDAwMDEpCiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKwordHlwZWRlZiBlbnVtIHsKKyAgICAvKiBSb3VuZCB0b3dhcmRzIHplcm8uICovCisgICAgX1B5VGltZV9ST1VORF9ET1dOPTAsCisgICAgLyogUm91bmQgYXdheSBmcm9tIHplcm8uICovCisgICAgX1B5VGltZV9ST1VORF9VUAorfSBfUHlUaW1lX3JvdW5kX3Q7CisKIC8qIENvbnZlcnQgYSBudW1iZXIgb2Ygc2Vjb25kcywgaW50IG9yIGZsb2F0LCB0byB0aW1lX3QuICovCiBQeUFQSV9GVU5DKGludCkgX1B5VGltZV9PYmplY3RUb1RpbWVfdCgKICAgICBQeU9iamVjdCAqb2JqLAotICAgIHRpbWVfdCAqc2VjKTsKKyAgICB0aW1lX3QgKnNlYywKKyAgICBfUHlUaW1lX3JvdW5kX3QpOwogCiAvKiBDb252ZXJ0IGEgdGltZV90IHRvIGEgUHlMb25nLiAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlMb25nX0Zyb21UaW1lX3QoCkBAIC03Miw3ICs4MSw4IEBACiBQeUFQSV9GVU5DKGludCkgX1B5VGltZV9PYmplY3RUb1RpbWV2YWwoCiAgICAgUHlPYmplY3QgKm9iaiwKICAgICB0aW1lX3QgKnNlYywKLSAgICBsb25nICp1c2VjKTsKKyAgICBsb25nICp1c2VjLAorICAgIF9QeVRpbWVfcm91bmRfdCk7CiAKIC8qIENvbnZlcnQgYSBudW1iZXIgb2Ygc2Vjb25kcywgaW50IG9yIGZsb2F0LCB0byBhIHRpbWVzcGVjIHN0cnVjdHVyZS4KICAgIG5zZWMgaXMgaW4gdGhlIHJhbmdlIFswOyA5OTk5OTk5OTldIGFuZCByb3VuZGVkIHRvd2FyZHMgemVyby4KQEAgLTgwLDcgKzkwLDggQEAKIFB5QVBJX0ZVTkMoaW50KSBfUHlUaW1lX09iamVjdFRvVGltZXNwZWMoCiAgICAgUHlPYmplY3QgKm9iaiwKICAgICB0aW1lX3QgKnNlYywKLSAgICBsb25nICpuc2VjKTsKKyAgICBsb25nICpuc2VjLAorICAgIF9QeVRpbWVfcm91bmRfdCk7CiAjZW5kaWYKIAogLyogRHVtbXkgdG8gZm9yY2UgbGlua2luZy4gKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvc2V0b2JqZWN0LmggYi9JbmNsdWRlL3NldG9iamVjdC5oCmluZGV4IGExNDg3NGIuLmFlM2Y1NTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc2V0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9zZXRvYmplY3QuaApAQCAtMjMsOCArMjMsOCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyogQ2FjaGVkIGhhc2ggY29kZSBvZiB0aGUga2V5LiAqLwotICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5T2JqZWN0ICprZXk7CisgICAgUHlfaGFzaF90IGhhc2g7CiB9IHNldGVudHJ5OwogCiAKQEAgLTUxLDkgKzUxLDkgQEAKICAgICAgKi8KICAgICBzZXRlbnRyeSAqdGFibGU7CiAgICAgc2V0ZW50cnkgKigqbG9va3VwKShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKTsKKyAgICBQeV9oYXNoX3QgaGFzaDsgICAgICAgICAgICAgLyogb25seSB1c2VkIGJ5IGZyb3plbnNldCBvYmplY3RzICovCiAgICAgc2V0ZW50cnkgc21hbGx0YWJsZVtQeVNldF9NSU5TSVpFXTsKIAotICAgIFB5X2hhc2hfdCBoYXNoOyAgICAgICAgICAgICAgICAgIC8qIG9ubHkgdXNlZCBieSBmcm96ZW5zZXQgb2JqZWN0cyAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgICAgICAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwogfTsKICNlbmRpZiAvKiBQeV9MSU1JVEVEX0FQSSAqLwpAQCAtNjEsNiArNjEsMTAgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVNldF9UeXBlOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RnJvemVuU2V0X1R5cGU7CiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlTZXRJdGVyX1R5cGU7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9EQVRBKFB5T2JqZWN0ICopIF9QeVNldF9EdW1teTsKKyNlbmRpZgorCiAKIC8qIEludmFyaWFudHMgZm9yIGZyb3plbnNldHM6CiAgKiAgICAgZGF0YSBpcyBpbW11dGFibGUuCkBAIC0xMDEsNyArMTA1LDYgQEAKIFB5QVBJX0ZVTkMoaW50KSBfUHlTZXRfVXBkYXRlKFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICppdGVyYWJsZSk7CiAKIFB5QVBJX0ZVTkMoaW50KSBQeVNldF9DbGVhckZyZWVMaXN0KHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhGSUxFICpvdXQpOwogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zbGljZW9iamVjdC5oIGIvSW5jbHVkZS9zbGljZW9iamVjdC5oCmluZGV4IDhiZWMxNzkuLmY3ZWU5MGMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc2xpY2VvYmplY3QuaAorKysgYi9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKQEAgLTM0LDYgKzM0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogc3RlcCk7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVNsaWNlX0Zyb21JbmRpY2VzKFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3Qgc3RvcCk7CitQeUFQSV9GVU5DKGludCkgX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoUHlTbGljZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RhcnRfcHRyLCBQeU9iamVjdCAqKnN0b3BfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGVwX3B0cik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeVNsaWNlX0dldEluZGljZXMoUHlPYmplY3QgKnIsIFB5X3NzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKnN0YXJ0LCBQeV9zc2l6ZV90ICpzdG9wLCBQeV9zc2l6ZV90ICpzdGVwKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3RydWN0c2VxLmggYi9JbmNsdWRlL3N0cnVjdHNlcS5oCmluZGV4IDMwYzUyYWMuLmFmMjI3MTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc3RydWN0c2VxLmgKKysrIGIvSW5jbHVkZS9zdHJ1Y3RzZXEuaApAQCAtMjQsNiArMjQsOCBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyh2b2lkKSBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpOworUHlBUElfRlVOQyhpbnQpIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKFB5VHlwZU9iamVjdCAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpOwogI2VuZGlmCiBQeUFQSV9GVU5DKFB5VHlwZU9iamVjdCopIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZShQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpOwogCmRpZmYgLS1naXQgYS9JbmNsdWRlL3N5bXRhYmxlLmggYi9JbmNsdWRlL3N5bXRhYmxlLmgKaW5kZXggNmVkM2EyYi4uMWNmZDg4NCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zeW10YWJsZS5oCisrKyBiL0luY2x1ZGUvc3ltdGFibGUuaApAQCAtMTYsNyArMTYsNyBAQAogc3RydWN0IF9zeW10YWJsZV9lbnRyeTsKIAogc3RydWN0IHN5bXRhYmxlIHsKLSAgICBjb25zdCBjaGFyICpzdF9maWxlbmFtZTsgICAgICAgIC8qIG5hbWUgb2YgZmlsZSBiZWluZyBjb21waWxlZCwKKyAgICBQeU9iamVjdCAqc3RfZmlsZW5hbWU7ICAgICAgICAgIC8qIG5hbWUgb2YgZmlsZSBiZWluZyBjb21waWxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIHN0cnVjdCBfc3ltdGFibGVfZW50cnkgKnN0X2N1cjsgLyogY3VycmVudCBzeW1ib2wgdGFibGUgZW50cnkgKi8KICAgICBzdHJ1Y3QgX3N5bXRhYmxlX2VudHJ5ICpzdF90b3A7IC8qIHN5bWJvbCB0YWJsZSBlbnRyeSBmb3IgbW9kdWxlICovCkBAIC00MSw2ICs0MSw3IEBACiAgICAgUHlPYmplY3QgKnN0ZV9uYW1lOyAgICAgIC8qIHN0cmluZzogbmFtZSBvZiBjdXJyZW50IGJsb2NrICovCiAgICAgUHlPYmplY3QgKnN0ZV92YXJuYW1lczsgIC8qIGxpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycyAqLwogICAgIFB5T2JqZWN0ICpzdGVfY2hpbGRyZW47ICAvKiBsaXN0IG9mIGNoaWxkIGJsb2NrcyAqLworICAgIFB5T2JqZWN0ICpzdGVfZGlyZWN0aXZlczsvKiBsb2NhdGlvbnMgb2YgZ2xvYmFsIGFuZCBub25sb2NhbCBzdGF0ZW1lbnRzICovCiAgICAgX1B5X2Jsb2NrX3R5IHN0ZV90eXBlOyAgIC8qIG1vZHVsZSwgY2xhc3MsIG9yIGZ1bmN0aW9uICovCiAgICAgaW50IHN0ZV91bm9wdGltaXplZDsgICAgIC8qIGZhbHNlIGlmIG5hbWVzcGFjZSBpcyBvcHRpbWl6ZWQgKi8KICAgICBpbnQgc3RlX25lc3RlZDsgICAgICAvKiB0cnVlIGlmIGJsb2NrIGlzIG5lc3RlZCAqLwpAQCAtNTIsNiArNTMsOSBAQAogICAgIHVuc2lnbmVkIHN0ZV92YXJrZXl3b3JkcyA6IDE7IC8qIHRydWUgaWYgYmxvY2sgaGFzIHZhcmtleXdvcmRzICovCiAgICAgdW5zaWduZWQgc3RlX3JldHVybnNfdmFsdWUgOiAxOyAgLyogdHJ1ZSBpZiBuYW1lc3BhY2UgdXNlcyByZXR1cm4gd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFyZ3VtZW50ICovCisgICAgdW5zaWduZWQgc3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUgOiAxOyAvKiBmb3IgY2xhc3Mgc2NvcGVzLCB0cnVlIGlmIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3N1cmUgb3ZlciBfX2NsYXNzX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBjcmVhdGVkICovCiAgICAgaW50IHN0ZV9saW5lbm87ICAgICAgICAgIC8qIGZpcnN0IGxpbmUgb2YgYmxvY2sgKi8KICAgICBpbnQgc3RlX2NvbF9vZmZzZXQ7ICAgICAgLyogb2Zmc2V0IG9mIGZpcnN0IGxpbmUgb2YgYmxvY2sgKi8KICAgICBpbnQgc3RlX29wdF9saW5lbm87ICAgICAgLyogbGluZW5vIG9mIGxhc3QgZXhlYyBvciBpbXBvcnQgKiAqLwpAQCAtNzAsNiArNzQsMTAgQEAKICAgICBtb2RfdHkgbW9kLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpOworUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlTeW10YWJsZV9CdWlsZE9iamVjdCgKKyAgICBtb2RfdHkgbW9kLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpOwogUHlBUElfRlVOQyhQeVNURW50cnlPYmplY3QgKikgUHlTeW10YWJsZV9Mb29rdXAoc3RydWN0IHN5bXRhYmxlICosIHZvaWQgKik7CiAKIFB5QVBJX0ZVTkModm9pZCkgUHlTeW10YWJsZV9GcmVlKHN0cnVjdCBzeW10YWJsZSAqKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3lzbW9kdWxlLmggYi9JbmNsdWRlL3N5c21vZHVsZS5oCmluZGV4IDBjYWJmNmYuLjY1MmMxZTggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc3lzbW9kdWxlLmgKKysrIGIvSW5jbHVkZS9zeXNtb2R1bGUuaApAQCAtOCw3ICs4LDEyIEBACiAjZW5kaWYKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN5c19HZXRPYmplY3QoY29uc3QgY2hhciAqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U3lzX0dldE9iamVjdElkKF9QeV9JZGVudGlmaWVyICprZXkpOworI2VuZGlmCiBQeUFQSV9GVU5DKGludCkgUHlTeXNfU2V0T2JqZWN0KGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkgX1B5U3lzX1NldE9iamVjdElkKF9QeV9JZGVudGlmaWVyICprZXksIFB5T2JqZWN0ICopOworCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3lzX1NldEFyZ3YoaW50LCB3Y2hhcl90ICoqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0QXJndkV4KGludCwgd2NoYXJfdCAqKiwgaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0UGF0aChjb25zdCB3Y2hhcl90ICopOwpAQCAtMjgsNiArMzMsMTAgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfQWRkWE9wdGlvbihjb25zdCB3Y2hhcl90ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN5c19HZXRYT3B0aW9ucyh2b2lkKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfREFUQShzaXplX3QpIF9QeVN5c19HZXRTaXplT2YoUHlPYmplY3QgKik7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvdG9rZW4uaCBiL0luY2x1ZGUvdG9rZW4uaAppbmRleCBmN2Y2NTA0Li45MDUwMjJiIDEwMDY0NAotLS0gYS9JbmNsdWRlL3Rva2VuLmgKKysrIGIvSW5jbHVkZS90b2tlbi5oCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lIElTRU9GKHgpCQkoKHgpID09IEVORE1BUktFUikKIAogCi1QeUFQSV9EQVRBKGNoYXIgKikgX1B5UGFyc2VyX1Rva2VuTmFtZXNbXTsgLyogVG9rZW4gbmFtZXMgKi8KK1B5QVBJX0RBVEEoY29uc3QgY2hhciAqKSBfUHlQYXJzZXJfVG9rZW5OYW1lc1tdOyAvKiBUb2tlbiBuYW1lcyAqLwogUHlBUElfRlVOQyhpbnQpIFB5VG9rZW5fT25lQ2hhcihpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5VG9rZW5fVHdvQ2hhcnMoaW50LCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5VG9rZW5fVGhyZWVDaGFycyhpbnQsIGludCwgaW50KTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oIGIvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKaW5kZXggYThmNWI1ZC4uZmFhNTNkNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKQEAgLTE4MCw5ICsxODAsOSBAQAogICAgIH0gd2hpbGUgKDApCiAKIC8qIG1hY3JvcyB0byB3b3JrIHdpdGggc3Vycm9nYXRlcyAqLwotI2RlZmluZSBQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSBjaCAmJiBjaCA8PSAweERGRkYpCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfSElHSF9TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gY2ggJiYgY2ggPD0gMHhEQkZGKQotI2RlZmluZSBQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUoY2gpICgweERDMDAgPD0gY2ggJiYgY2ggPD0gMHhERkZGKQorI2RlZmluZSBQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSAoY2gpICYmIChjaCkgPD0gMHhERkZGKQorI2RlZmluZSBQeV9VTklDT0RFX0lTX0hJR0hfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERCRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURShjaCkgKDB4REMwMCA8PSAoY2gpICYmIChjaCkgPD0gMHhERkZGKQogLyogSm9pbiB0d28gc3Vycm9nYXRlIGNoYXJhY3RlcnMgYW5kIHJldHVybiBhIHNpbmdsZSBQeV9VQ1M0IHZhbHVlLiAqLwogI2RlZmluZSBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUyhoaWdoLCBsb3cpICBcCiAgICAgKCgoKChQeV9VQ1M0KShoaWdoKSAmIDB4MDNGRikgPDwgMTApIHwgICAgICBcCkBAIC0zNDMsNiArMzQzLDkgQEAKICAgICAgICAgICAgdGhlIGRhdGEgcG9pbnRlciBpcyBmaWxsZWQgb3V0LiBUaGUgYml0IGlzIHJlZHVuZGFudCwgYW5kIGhlbHBzCiAgICAgICAgICAgIHRvIG1pbmltaXplIHRoZSB0ZXN0IGluIFB5VW5pY29kZV9JU19SRUFEWSgpLiAqLwogICAgICAgICB1bnNpZ25lZCBpbnQgcmVhZHk6MTsKKyAgICAgICAgLyogUGFkZGluZyB0byBlbnN1cmUgdGhhdCBQeVVuaWNvZGVfREFUQSgpIGlzIGFsd2F5cyBhbGlnbmVkIHRvCisgICAgICAgICAgIDQgYnl0ZXMgKHNlZSBpc3N1ZSAjMTk1Mzcgb24gbTY4aykuICovCisgICAgICAgIHVuc2lnbmVkIGludCA6MjQ7CiAgICAgfSBzdGF0ZTsKICAgICB3Y2hhcl90ICp3c3RyOyAgICAgICAgICAgICAgLyogd2NoYXJfdCByZXByZXNlbnRhdGlvbiAobnVsbC10ZXJtaW5hdGVkKSAqLwogfSBQeUFTQ0lJT2JqZWN0OwpAQCAtODU5LDcgKzg2Miw3IEBACiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqLCAgICAgICAgICAgICAgLyogT2JqZWN0ICovCiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIGVuY29kaW5nICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKQEAgLTg3OCw3ICs4ODEsNyBAQAogKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmogICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqICAgICAgLyogT2JqZWN0ICovCiAgICAgKTsKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoCkBAIC04OTgsMjIgKzkwMSwyOCBAQAogICAgIFB5X1VDUzQgbWF4Y2hhcjsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlfc3NpemVfdCBwb3M7Ci0gICAgLyogbWluaW11bSBsZW5ndGggb2YgdGhlIGJ1ZmZlciB3aGVuIG92ZXJhbGxvY2F0aW9uIGlzIGVuYWJsZWQsCi0gICAgICAgc2VlIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgpICovCisKKyAgICAvKiBtaW5pbXVtIG51bWJlciBvZiBhbGxvY2F0ZWQgY2hhcmFjdGVycyAoZGVmYXVsdDogMCkgKi8KICAgICBQeV9zc2l6ZV90IG1pbl9sZW5ndGg7CisKKyAgICAvKiBtaW5pbXVtIGNoYXJhY3RlciAoZGVmYXVsdDogMTI3LCBBU0NJSSkgKi8KKyAgICBQeV9VQ1M0IG1pbl9jaGFyOworCisgICAgLyogSWYgbm9uLXplcm8sIG92ZXJhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5IDI1JSAoZGVmYXVsdDogMCkuICovCiAgICAgdW5zaWduZWQgY2hhciBvdmVyYWxsb2NhdGU7CisKICAgICAvKiBJZiByZWFkb25seSBpcyAxLCBidWZmZXIgaXMgYSBzaGFyZWQgc3RyaW5nIChjYW5ub3QgYmUgbW9kaWZpZWQpCiAgICAgICAgYW5kIHNpemUgaXMgc2V0IHRvIDAuICovCiAgICAgdW5zaWduZWQgY2hhciByZWFkb25seTsKIH0gX1B5VW5pY29kZVdyaXRlciA7CiAKIC8qIEluaXRpYWxpemUgYSBVbmljb2RlIHdyaXRlci4KLQotICAgSWYgbWluX2xlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVybywgX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCkKLSAgIG92ZXJhbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhbmQgbWluX2xlbmd0aCBpcyB0aGUgbWluaW11bSBsZW5ndGggaW4gY2hhcmFjdGVycwotICAgb2YgdGhlIGJ1ZmZlci4gKi8KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBpcyAwIGNoYXJhY3RlciBhbmQgb3ZlcmFsbG9jYXRpb24gaXMKKyAqIGRpc2FibGVkLiBTZXQgbWluX2xlbmd0aCwgbWluX2NoYXIgYW5kIG92ZXJhbGxvY2F0ZSBhdHRyaWJ1dGVzIHRvIGNvbnRyb2wKKyAqIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBidWZmZXIuICovCiBQeUFQSV9GVU5DKHZvaWQpCi1fUHlVbmljb2RlV3JpdGVyX0luaXQoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9zc2l6ZV90IG1pbl9sZW5ndGgpOworX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKIC8qIFByZXBhcmUgdGhlIGJ1ZmZlciB0byB3cml0ZSAnbGVuZ3RoJyBjaGFyYWN0ZXJzCiAgICB3aXRoIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjaGFyYWN0ZXIuCkBAIC05MzMsMTIgKzk0Miw1MiBAQAogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlSW50ZXJuYWwoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW5ndGgsIFB5X1VDUzQgbWF4Y2hhcik7CiAKKy8qIEFwcGVuZCBhIFVuaWNvZGUgY2hhcmFjdGVyLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiBQeUFQSV9GVU5DKGludCkKLV9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyKTsKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICBQeV9VQ1M0IGNoCisgICAgKTsKIAorLyogQXBwZW5kIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgKTsKKworLyogQXBwZW5kIGEgc3Vic3RyaW5nIG9mIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBzdGFydCwKKyAgICBQeV9zc2l6ZV90IGVuZAorICAgICk7CisKKy8qIEFwcGVuZCBhIEFTQ0lJLWVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICBjb25zdCBjaGFyICpzdHIsICAgICAgICAgICAvKiBBU0NJSS1lbmNvZGVkIGJ5dGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBsZW4gICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzLCBvciAtMSBpZiB1bmtub3duICovCisgICAgKTsKKworLyogQXBwZW5kIGEgbGF0aW4xLWVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUxhdGluMVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgY29uc3QgY2hhciAqc3RyLCAgICAgICAgICAgLyogbGF0aW4xLWVuY29kZWQgYnl0ZSBzdHJpbmcgKi8KKyAgICBQeV9zc2l6ZV90IGxlbiAgICAgICAgICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICApOworCisvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSB3cml0ZXIgYXMgYW4gVW5pY29kZSBzdHJpbmcuIENsZWFyIHRoZQorICAgYnVmZmVyIG9mIHRoZSB3cml0ZXIuIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIE5VTEwKKyAgIG9uIGVycm9yLiAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKQogX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKTsKIAorLyogRGVhbGxvY2F0ZSBtZW1vcnkgb2YgYSB3cml0ZXIgKGNsZWFyIGl0cyBpbnRlcm5hbCBidWZmZXIpLiAqLwogUHlBUElfRlVOQyh2b2lkKQogX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAjZW5kaWYKQEAgLTk3Nyw3ICsxMDI2LDcgQEAKICAgIFRoZSBidWZmZXIgaXMgY29waWVkIGludG8gdGhlIG5ldyBvYmplY3QuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKAotICAgIHJlZ2lzdGVyIGNvbnN0IHdjaGFyX3QgKncsICAvKiB3Y2hhcl90IGJ1ZmZlciAqLworICAgIGNvbnN0IHdjaGFyX3QgKncsICAgICAgICAgICAvKiB3Y2hhcl90IGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3Qgc2l6ZSAgICAgICAgICAgICAvKiBzaXplIG9mIGJ1ZmZlciAqLwogICAgICk7CiAKQEAgLTk5NSw3ICsxMDQ0LDcgQEAKIAogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeVVuaWNvZGVfQXNXaWRlQ2hhcigKICAgICBQeU9iamVjdCAqdW5pY29kZSwgICAgICAgICAgLyogVW5pY29kZSBvYmplY3QgKi8KLSAgICByZWdpc3RlciB3Y2hhcl90ICp3LCAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KKyAgICB3Y2hhcl90ICp3LCAgICAgICAgICAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOwogCkBAIC0xNzI2LDcgKzE3NzUsNyBAQAogLyogRW5jb2RlIGEgVW5pY29kZSBvYmplY3QgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLiBUaGUgZW5jb2RlciBpcwogICAgc3RyaWN0IGlzICpzdXJyb2dhdGVlc2NhcGUqIGlzIGVxdWFsIHRvIHplcm8sIG90aGVyd2lzZSB0aGUKICAgICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgaXMgdXNlZC4gUmV0dXJuIGEgYnl0ZXMgb2JqZWN0LiBUaGUgc3RyaW5nCi0gICBjYW5ub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMuLiAqLworICAgY2Fubm90IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXJzLiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0VuY29kZUxvY2FsZSgKICAgICBQeU9iamVjdCAqdW5pY29kZSwKQEAgLTE5NTAsMTMgKzE5OTksMjEgQEAKICAgICApOwogCiAvKiBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCByZXR1cm4gLTEsIDAsIDEgZm9yIGxlc3MgdGhhbiwgZXF1YWwsCi0gICBncmVhdGVyIHRoYW4gcmVzcC4gKi8KKyAgIGdyZWF0ZXIgdGhhbiByZXNwLgorICAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiAKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZSgKICAgICBQeU9iamVjdCAqbGVmdCwgICAgICAgICAgICAgLyogTGVmdCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqcmlnaHQgICAgICAgICAgICAgLyogUmlnaHQgc3RyaW5nICovCiAgICAgKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZCgKKyAgICBQeU9iamVjdCAqbGVmdCwgICAgICAgICAgICAgLyogTGVmdCBzdHJpbmcgKi8KKyAgICBfUHlfSWRlbnRpZmllciAqcmlnaHQgICAgICAgLyogUmlnaHQgaWRlbnRpZmllciAqLworICAgICk7CisjZW5kaWYKKwogUHlBUElfRlVOQyhpbnQpIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKAogICAgIFB5T2JqZWN0ICpsZWZ0LAogICAgIGNvbnN0IGNoYXIgKnJpZ2h0ICAgICAgICAgICAvKiBBU0NJSS1lbmNvZGVkIHN0cmluZyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS93YXJuaW5ncy5oIGIvSW5jbHVkZS93YXJuaW5ncy5oCmluZGV4IGI3ZGI2ODEuLmVmZmI5ZmFkIDEwMDY0NAotLS0gYS9JbmNsdWRlL3dhcm5pbmdzLmgKKysrIGIvSW5jbHVkZS93YXJuaW5ncy5oCkBAIC0xNyw2ICsxNywxNSBAQAogICAgIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwsCiAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLwogICAgIC4uLik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KAorICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICBQeU9iamVjdCAqbWVzc2FnZSwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubywKKyAgICBQeU9iamVjdCAqbW9kdWxlLAorICAgIFB5T2JqZWN0ICpyZWdpc3RyeSk7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeUVycl9XYXJuRXhwbGljaXQoCiAgICAgUHlPYmplY3QgKmNhdGVnb3J5LAogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwpAQCAtMjUsNiArMzQsMTQgQEAKICAgICBjb25zdCBjaGFyICptb2R1bGUsICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqcmVnaXN0cnkpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkKK1B5RXJyX1dhcm5FeHBsaWNpdEZvcm1hdChQeU9iamVjdCAqY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworI2VuZGlmCisKIC8qIERFUFJFQ0FURUQ6IFVzZSBQeUVycl9XYXJuRXgoKSBpbnN0ZWFkLiAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUVycl9XYXJuKGNhdGVnb3J5LCBtc2cpIFB5RXJyX1dhcm5FeChjYXRlZ29yeSwgbXNnLCAxKQpkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKaW5kZXggZjljYTJjOS4uNTgzZjlmNiAxMDA2NDQKLS0tIGEvTElDRU5TRQorKysgYi9MSUNFTlNFCkBAIC03NCw4ICs3NCw4IEBACiBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwKIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IFBTRidzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBQU0YncyBub3RpY2Ugb2YgY29weXJpZ2h0LAogaS5lLiwgIkNvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKLTIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb247IEFsbCBSaWdodHMgUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZAotaW4gUHl0aG9uIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuCisyMDExLCAyMDEyLCAyMDEzLCAyMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzIFJlc2VydmVkIiBhcmUKK3JldGFpbmVkIGluIFB5dGhvbiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgogCiAzLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgogb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQpkaWZmIC0tZ2l0IGEvTGliL19ib290bG9jYWxlLnB5IGIvTGliL19ib290bG9jYWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2NhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX2Jvb3Rsb2NhbGUucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiQSBtaW5pbWFsIHN1YnNldCBvZiB0aGUgbG9jYWxlIG1vZHVsZSB1c2VkIGF0IGludGVycHJldGVyIHN0YXJ0dXAKKyhpbXBvcnRlZCBieSB0aGUgX2lvIG1vZHVsZSksIGluIG9yZGVyIHRvIHJlZHVjZSBzdGFydHVwIHRpbWUuCisKK0Rvbid0IGltcG9ydCBkaXJlY3RseSBmcm9tIHRoaXJkLXBhcnR5IGNvZGU7IHVzZSB0aGUgYGxvY2FsZWAgbW9kdWxlIGluc3RlYWQhCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IF9sb2NhbGUKKworaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBfbG9jYWxlLl9nZXRkZWZhdWx0bG9jYWxlKClbMV0KK2Vsc2U6CisgICAgdHJ5OgorICAgICAgICBfbG9jYWxlLkNPREVTRVQKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgICAgICAjIFRoaXMgcGF0aCBmb3IgbGVnYWN5IHN5c3RlbXMgbmVlZHMgdGhlIG1vcmUgY29tcGxleAorICAgICAgICAgICAgIyBnZXRkZWZhdWx0bG9jYWxlKCkgZnVuY3Rpb24sIGltcG9ydCB0aGUgZnVsbCBsb2NhbGUgbW9kdWxlLgorICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgZG9fc2V0bG9jYWxlCisgICAgICAgICAgICByZXN1bHQgPSBfbG9jYWxlLm5sX2xhbmdpbmZvKF9sb2NhbGUuQ09ERVNFVCkKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIG5sX2xhbmdpbmZvIGNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZSBzZXR0aW5nIGhhcyBhbiBpbnZhbGlkIHZhbHVlLgorICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0byBVVEYtOCBpbiB0aGF0IGNhc2UgYmVjYXVzZQorICAgICAgICAgICAgICAgICMgVVRGLTggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBvbiBPU1ggYW5kCisgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcgbm90aGluZyB3aWxsIGNyYXNoIHRoZQorICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0ZXIuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL19jb2xsZWN0aW9uc19hYmMucHkgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDc3NDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL19jb2xsZWN0aW9uc19hYmMucHkKQEAgLTAsMCArMSw3NTMgQEAKKyMgQ29weXJpZ2h0IDIwMDcgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKworIiIiQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBmb3IgY29sbGVjdGlvbnMsIGFjY29yZGluZyB0byBQRVAgMzExOS4KKworVW5pdCB0ZXN0cyBhcmUgaW4gdGVzdF9jb2xsZWN0aW9ucy4KKyIiIgorCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2ltcG9ydCBzeXMKKworX19hbGxfXyA9IFsiSGFzaGFibGUiLCAiSXRlcmFibGUiLCAiSXRlcmF0b3IiLAorICAgICAgICAgICAiU2l6ZWQiLCAiQ29udGFpbmVyIiwgIkNhbGxhYmxlIiwKKyAgICAgICAgICAgIlNldCIsICJNdXRhYmxlU2V0IiwKKyAgICAgICAgICAgIk1hcHBpbmciLCAiTXV0YWJsZU1hcHBpbmciLAorICAgICAgICAgICAiTWFwcGluZ1ZpZXciLCAiS2V5c1ZpZXciLCAiSXRlbXNWaWV3IiwgIlZhbHVlc1ZpZXciLAorICAgICAgICAgICAiU2VxdWVuY2UiLCAiTXV0YWJsZVNlcXVlbmNlIiwKKyAgICAgICAgICAgIkJ5dGVTdHJpbmciLAorICAgICAgICAgICBdCisKKyMgVGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVuYW1lZCBmcm9tIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIHRvCisjIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0dXAuIFNvbWUgb2YgdGhlIHR5cGVzIHN1Y2ggYXMgTXV0YWJsZU1hcHBpbmcgYXJlCisjIHJlcXVpcmVkIGVhcmx5IGJ1dCBjb2xsZWN0aW9ucyBtb2R1bGUgaW1wb3J0cyBhIGxvdCBvZiBvdGhlciBtb2R1bGVzLgorIyBTZWUgaXNzdWUgIzE5MjE4CitfX25hbWVfXyA9ICJjb2xsZWN0aW9ucy5hYmMiCisKKyMgUHJpdmF0ZSBsaXN0IG9mIHR5cGVzIHRoYXQgd2Ugd2FudCB0byByZWdpc3RlciB3aXRoIHRoZSB2YXJpb3VzIEFCQ3MKKyMgc28gdGhhdCB0aGV5IHdpbGwgcGFzcyB0ZXN0cyBsaWtlOgorIyAgICAgICBpdCA9IGl0ZXIoc29tZWJ5dGVhcnJheSkKKyMgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaXQsIEl0ZXJhYmxlKQorIyBOb3RlOiAgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zLCB0aGVzZSB0eXBlcyBtYW55IG5vdCBiZSBkaXN0aW5jdAorIyBhbmQgdGhleSBtYWtlIGhhdmUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHR5cGVzIHRoYXQKKyMgYXJlIG5vdCBpbmNsdWRlZCBvbiB0aGlzIGxpc3QuCitieXRlc19pdGVyYXRvciA9IHR5cGUoaXRlcihiJycpKQorYnl0ZWFycmF5X2l0ZXJhdG9yID0gdHlwZShpdGVyKGJ5dGVhcnJheSgpKSkKKyNjYWxsYWJsZV9pdGVyYXRvciA9ID8/PworZGljdF9rZXlpdGVyYXRvciA9IHR5cGUoaXRlcih7fS5rZXlzKCkpKQorZGljdF92YWx1ZWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LnZhbHVlcygpKSkKK2RpY3RfaXRlbWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9Lml0ZW1zKCkpKQorbGlzdF9pdGVyYXRvciA9IHR5cGUoaXRlcihbXSkpCitsaXN0X3JldmVyc2VpdGVyYXRvciA9IHR5cGUoaXRlcihyZXZlcnNlZChbXSkpKQorcmFuZ2VfaXRlcmF0b3IgPSB0eXBlKGl0ZXIocmFuZ2UoMCkpKQorc2V0X2l0ZXJhdG9yID0gdHlwZShpdGVyKHNldCgpKSkKK3N0cl9pdGVyYXRvciA9IHR5cGUoaXRlcigiIikpCit0dXBsZV9pdGVyYXRvciA9IHR5cGUoaXRlcigoKSkpCit6aXBfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoemlwKCkpKQorIyMgdmlld3MgIyMKK2RpY3Rfa2V5cyA9IHR5cGUoe30ua2V5cygpKQorZGljdF92YWx1ZXMgPSB0eXBlKHt9LnZhbHVlcygpKQorZGljdF9pdGVtcyA9IHR5cGUoe30uaXRlbXMoKSkKKyMjIG1pc2MgIyMKK21hcHBpbmdwcm94eSA9IHR5cGUodHlwZS5fX2RpY3RfXykKKworCisjIyMgT05FLVRSSUNLIFBPTklFUyAjIyMKKworY2xhc3MgSGFzaGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBIYXNoYWJsZToKKyAgICAgICAgICAgIGZvciBCIGluIEMuX19tcm9fXzoKKyAgICAgICAgICAgICAgICBpZiAiX19oYXNoX18iIGluIEIuX19kaWN0X186CisgICAgICAgICAgICAgICAgICAgIGlmIEIuX19kaWN0X19bIl9faGFzaF9fIl06CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBJdGVyYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICB3aGlsZSBGYWxzZToKKyAgICAgICAgICAgIHlpZWxkIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBJdGVyYWJsZToKKyAgICAgICAgICAgIGlmIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBJdGVyYXRvcihJdGVyYWJsZSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICAnUmV0dXJuIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgaXRlcmF0b3IuIFdoZW4gZXhoYXVzdGVkLCByYWlzZSBTdG9wSXRlcmF0aW9uJworICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgSXRlcmF0b3I6CisgICAgICAgICAgICBpZiAoYW55KCJfX25leHRfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pIGFuZAorICAgICAgICAgICAgICAgIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKK0l0ZXJhdG9yLnJlZ2lzdGVyKGJ5dGVzX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZWFycmF5X2l0ZXJhdG9yKQorI0l0ZXJhdG9yLnJlZ2lzdGVyKGNhbGxhYmxlX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9rZXlpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfdmFsdWVpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfaXRlbWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGxpc3RfcmV2ZXJzZWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIocmFuZ2VfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihzZXRfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihzdHJfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3Rlcih0dXBsZV9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHppcF9pdGVyYXRvcikKKworY2xhc3MgU2l6ZWQobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIFNpemVkOgorICAgICAgICAgICAgaWYgYW55KCJfX2xlbl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQ29udGFpbmVyKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBDb250YWluZXI6CisgICAgICAgICAgICBpZiBhbnkoIl9fY29udGFpbnNfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIENhbGxhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIENhbGxhYmxlOgorICAgICAgICAgICAgaWYgYW55KCJfX2NhbGxfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKKyMjIyBTRVRTICMjIworCisKK2NsYXNzIFNldChTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICAiIiJBIHNldCBpcyBhIGZpbml0ZSwgaXRlcmFibGUgY29udGFpbmVyLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19jb250YWluc19fLCBfX2l0ZXJfXyBhbmQgX19sZW5fXy4KKworICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQorICAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCByZWRlZmluZSBfX2xlX18gYW5kIF9fZ2VfXywKKyAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgaWYgbGVuKHNlbGYpID4gbGVuKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgZWxlbSBpbiBzZWxmOgorICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA8IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPiBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fZ2VfXyhvdGhlcikKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBpZiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBlbGVtIGluIG90aGVyOgorICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gbGVuKHNlbGYpID09IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoY2xzLCBpdCk6CisgICAgICAgICcnJ0NvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgZnJvbSBhbnkgaXRlcmFibGUgaW5wdXQuCisKKyAgICAgICAgTXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGUgY2xhc3MgY29uc3RydWN0b3Igc2lnbmF0dXJlCisgICAgICAgIGRvZXMgbm90IGFjY2VwdCBhbiBpdGVyYWJsZSBmb3IgYW4gaW5wdXQuCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gY2xzKGl0KQorCisgICAgZGVmIF9fYW5kX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBvdGhlciBpZiB2YWx1ZSBpbiBzZWxmKQorCisgICAgX19yYW5kX18gPSBfX2FuZF9fCisKKyAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6CisgICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJworICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQorCisgICAgX19yb3JfXyA9IF9fb3JfXworCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKKworICAgIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIG90aGVyID0gc2VsZi5fZnJvbV9pdGVyYWJsZShvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBzZWxmKQorCisgICAgZGVmIF9feG9yX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCisgICAgICAgIHJldHVybiAoc2VsZiAtIG90aGVyKSB8IChvdGhlciAtIHNlbGYpCisKKyAgICBfX3J4b3JfXyA9IF9feG9yX18KKworICAgIGRlZiBfaGFzaChzZWxmKToKKyAgICAgICAgIiIiQ29tcHV0ZSB0aGUgaGFzaCB2YWx1ZSBvZiBhIHNldC4KKworICAgICAgICBOb3RlIHRoYXQgd2UgZG9uJ3QgZGVmaW5lIF9faGFzaF9fOiBub3QgYWxsIHNldHMgYXJlIGhhc2hhYmxlLgorICAgICAgICBCdXQgaWYgeW91IGRlZmluZSBhIGhhc2hhYmxlIHNldCB0eXBlLCBpdHMgX19oYXNoX18gc2hvdWxkCisgICAgICAgIGNhbGwgdGhpcyBmdW5jdGlvbi4KKworICAgICAgICBUaGlzIG11c3QgYmUgY29tcGF0aWJsZSBfX2VxX18uCisKKyAgICAgICAgQWxsIHNldHMgb3VnaHQgdG8gY29tcGFyZSBlcXVhbCBpZiB0aGV5IGNvbnRhaW4gdGhlIHNhbWUKKyAgICAgICAgZWxlbWVudHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhbmQKKyAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzOyBzbyB0aGVyZSdzIG5vdCBtdWNoCisgICAgICAgIGZyZWVkb20gZm9yIF9fZXFfXyBvciBfX2hhc2hfXy4gIFdlIG1hdGNoIHRoZSBhbGdvcml0aG0gdXNlZAorICAgICAgICBieSB0aGUgYnVpbHQtaW4gZnJvemVuc2V0IHR5cGUuCisgICAgICAgICIiIgorICAgICAgICBNQVggPSBzeXMubWF4c2l6ZQorICAgICAgICBNQVNLID0gMiAqIE1BWCArIDEKKyAgICAgICAgbiA9IGxlbihzZWxmKQorICAgICAgICBoID0gMTkyNzg2ODIzNyAqIChuICsgMSkKKyAgICAgICAgaCAmPSBNQVNLCisgICAgICAgIGZvciB4IGluIHNlbGY6CisgICAgICAgICAgICBoeCA9IGhhc2goeCkKKyAgICAgICAgICAgIGggXj0gKGh4IF4gKGh4IDw8IDE2KSBeIDg5ODY5NzQ3KSAgKiAzNjQ0Nzk4MTY3CisgICAgICAgICAgICBoICY9IE1BU0sKKyAgICAgICAgaCA9IGggKiA2OTA2OSArIDkwNzEzMzkyMworICAgICAgICBoICY9IE1BU0sKKyAgICAgICAgaWYgaCA+IE1BWDoKKyAgICAgICAgICAgIGggLT0gTUFTSyArIDEKKyAgICAgICAgaWYgaCA9PSAtMToKKyAgICAgICAgICAgIGggPSA1OTA5MjM3MTMKKyAgICAgICAgcmV0dXJuIGgKKworU2V0LnJlZ2lzdGVyKGZyb3plbnNldCkKKworCitjbGFzcyBNdXRhYmxlU2V0KFNldCk6CisgICAgIiIiQSBtdXRhYmxlIHNldCBpcyBhIGZpbml0ZSwgaXRlcmFibGUgY29udGFpbmVyLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19jb250YWluc19fLCBfX2l0ZXJfXywgX19sZW5fXywKKyAgICBhZGQoKSwgYW5kIGRpc2NhcmQoKS4KKworICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQorICAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCBhbGwgeW91IGhhdmUgdG8gZG8gaXMgcmVkZWZpbmUgX19sZV9fIGFuZAorICAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBhZGQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJBZGQgYW4gZWxlbWVudC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGRpc2NhcmQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gIERvIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYgYWJzZW50LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUmVtb3ZlIGFuIGVsZW1lbnQuIElmIG5vdCBhIG1lbWJlciwgcmFpc2UgYSBLZXlFcnJvci4iIiIKKyAgICAgICAgaWYgdmFsdWUgbm90IGluIHNlbGY6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcih2YWx1ZSkKKyAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorCisgICAgZGVmIHBvcChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwb3BwZWQgdmFsdWUuICBSYWlzZSBLZXlFcnJvciBpZiBlbXB0eS4iIiIKKyAgICAgICAgaXQgPSBpdGVyKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gbmV4dChpdCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJUaGlzIGlzIHNsb3cgKGNyZWF0ZXMgTiBuZXcgaXRlcmF0b3JzISkgYnV0IGVmZmVjdGl2ZS4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2lvcl9fKHNlbGYsIGl0KToKKyAgICAgICAgZm9yIHZhbHVlIGluIGl0OgorICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19pYW5kX18oc2VsZiwgaXQpOgorICAgICAgICBmb3IgdmFsdWUgaW4gKHNlbGYgLSBpdCk6CisgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19peG9yX18oc2VsZiwgaXQpOgorICAgICAgICBpZiBpdCBpcyBzZWxmOgorICAgICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdCwgU2V0KToKKyAgICAgICAgICAgICAgICBpdCA9IHNlbGYuX2Zyb21faXRlcmFibGUoaXQpCisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faXN1Yl9fKHNlbGYsIGl0KToKKyAgICAgICAgaWYgaXQgaXMgc2VsZjoKKyAgICAgICAgICAgIHNlbGYuY2xlYXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHZhbHVlIGluIGl0OgorICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworTXV0YWJsZVNldC5yZWdpc3RlcihzZXQpCisKKworIyMjIE1BUFBJTkdTICMjIworCisKK2NsYXNzIE1hcHBpbmcoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgICIiIkEgTWFwcGluZyBpcyBhIGdlbmVyaWMgY29udGFpbmVyIGZvciBhc3NvY2lhdGluZyBrZXkvdmFsdWUKKyAgICBwYWlycy4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCisgICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fZ2V0aXRlbV9fLCBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICdELmdldChrWyxkXSkgLT4gRFtrXSBpZiBrIGluIEQsIGVsc2UgZC4gIGQgZGVmYXVsdHMgdG8gTm9uZS4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAiRC5rZXlzKCkgLT4gYSBzZXQtbGlrZSBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3Mga2V5cyIKKyAgICAgICAgcmV0dXJuIEtleXNWaWV3KHNlbGYpCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgICJELml0ZW1zKCkgLT4gYSBzZXQtbGlrZSBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgaXRlbXMiCisgICAgICAgIHJldHVybiBJdGVtc1ZpZXcoc2VsZikKKworICAgIGRlZiB2YWx1ZXMoc2VsZik6CisgICAgICAgICJELnZhbHVlcygpIC0+IGFuIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyB2YWx1ZXMiCisgICAgICAgIHJldHVybiBWYWx1ZXNWaWV3KHNlbGYpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIE1hcHBpbmcpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBkaWN0KHNlbGYuaXRlbXMoKSkgPT0gZGljdChvdGhlci5pdGVtcygpKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCisKK01hcHBpbmcucmVnaXN0ZXIobWFwcGluZ3Byb3h5KQorCisKK2NsYXNzIE1hcHBpbmdWaWV3KFNpemVkKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBwaW5nKToKKyAgICAgICAgc2VsZi5fbWFwcGluZyA9IG1hcHBpbmcKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX21hcHBpbmcpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnezAuX19jbGFzc19fLl9fbmFtZV9ffSh7MC5fbWFwcGluZyFyfSknLmZvcm1hdChzZWxmKQorCisKK2NsYXNzIEtleXNWaWV3KE1hcHBpbmdWaWV3LCBTZXQpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKKyAgICAgICAgcmV0dXJuIHNldChpdCkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9tYXBwaW5nCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fbWFwcGluZworCitLZXlzVmlldy5yZWdpc3RlcihkaWN0X2tleXMpCisKKworY2xhc3MgSXRlbXNWaWV3KE1hcHBpbmdWaWV3LCBTZXQpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKKyAgICAgICAgcmV0dXJuIHNldChpdCkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CisgICAgICAgIGtleSwgdmFsdWUgPSBpdGVtCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHYgPSBzZWxmLl9tYXBwaW5nW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdiA9PSB2YWx1ZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6CisgICAgICAgICAgICB5aWVsZCAoa2V5LCBzZWxmLl9tYXBwaW5nW2tleV0pCisKK0l0ZW1zVmlldy5yZWdpc3RlcihkaWN0X2l0ZW1zKQorCisKK2NsYXNzIFZhbHVlc1ZpZXcoTWFwcGluZ1ZpZXcpOgorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKKyAgICAgICAgICAgIGlmIHZhbHVlID09IHNlbGYuX21hcHBpbmdba2V5XToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgorICAgICAgICAgICAgeWllbGQgc2VsZi5fbWFwcGluZ1trZXldCisKK1ZhbHVlc1ZpZXcucmVnaXN0ZXIoZGljdF92YWx1ZXMpCisKKworY2xhc3MgTXV0YWJsZU1hcHBpbmcoTWFwcGluZyk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgIiIiQSBNdXRhYmxlTWFwcGluZyBpcyBhIGdlbmVyaWMgY29udGFpbmVyIGZvciBhc3NvY2lhdGluZworICAgIGtleS92YWx1ZSBwYWlycy4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCisgICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fZ2V0aXRlbV9fLCBfX3NldGl0ZW1fXywgX19kZWxpdGVtX18sCisgICAgX19pdGVyX18sIGFuZCBfX2xlbl9fLgorCisgICAgIiIiCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIF9fbWFya2VyID0gb2JqZWN0KCkKKworICAgIGRlZiBwb3Aoc2VsZiwga2V5LCBkZWZhdWx0PV9fbWFya2VyKToKKyAgICAgICAgJycnRC5wb3Aoa1ssZF0pIC0+IHYsIHJlbW92ZSBzcGVjaWZpZWQga2V5IGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUuCisgICAgICAgICAgSWYga2V5IGlzIG5vdCBmb3VuZCwgZCBpcyByZXR1cm5lZCBpZiBnaXZlbiwgb3RoZXJ3aXNlIEtleUVycm9yIGlzIHJhaXNlZC4KKyAgICAgICAgJycnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgc2VsZi5fX21hcmtlcjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlbCBzZWxmW2tleV0KKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHBvcGl0ZW0oc2VsZik6CisgICAgICAgICcnJ0QucG9waXRlbSgpIC0+IChrLCB2KSwgcmVtb3ZlIGFuZCByZXR1cm4gc29tZSAoa2V5LCB2YWx1ZSkgcGFpcgorICAgICAgICAgICBhcyBhIDItdHVwbGU7IGJ1dCByYWlzZSBLZXlFcnJvciBpZiBEIGlzIGVtcHR5LgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gbmV4dChpdGVyKHNlbGYpKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgIHZhbHVlID0gc2VsZltrZXldCisgICAgICAgIGRlbCBzZWxmW2tleV0KKyAgICAgICAgcmV0dXJuIGtleSwgdmFsdWUKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgJ0QuY2xlYXIoKSAtPiBOb25lLiAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIEQuJworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucG9waXRlbSgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB1cGRhdGUoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICcnJyBELnVwZGF0ZShbRSwgXSoqRikgLT4gTm9uZS4gIFVwZGF0ZSBEIGZyb20gbWFwcGluZy9pdGVyYWJsZSBFIGFuZCBGLgorICAgICAgICAgICAgSWYgRSBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciBrIGluIEU6IERba10gPSBFW2tdCisgICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGxhY2tzIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIChrLCB2KSBpbiBFOiBEW2tdID0gdgorICAgICAgICAgICAgSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMgZm9sbG93ZWQgYnk6IGZvciBrLCB2IGluIEYuaXRlbXMoKTogRFtrXSA9IHYKKyAgICAgICAgJycnCisgICAgICAgIGlmIGxlbihhcmdzKSA+IDI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IG1vc3QgMiBwb3NpdGlvbmFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICh7fSBnaXZlbikiLmZvcm1hdChsZW4oYXJncykpKQorICAgICAgICBlbGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1cGRhdGUoKSB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50ICgwIGdpdmVuKSIpCisgICAgICAgIHNlbGYgPSBhcmdzWzBdCisgICAgICAgIG90aGVyID0gYXJnc1sxXSBpZiBsZW4oYXJncykgPj0gMiBlbHNlICgpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6CisgICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KKyAgICAgICAgZWxpZiBoYXNhdHRyKG90aGVyLCAia2V5cyIpOgorICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlci5rZXlzKCk6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4ga3dkcy5pdGVtcygpOgorICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKKworICAgIGRlZiBzZXRkZWZhdWx0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgJ0Quc2V0ZGVmYXVsdChrWyxkXSkgLT4gRC5nZXQoayxkKSwgYWxzbyBzZXQgRFtrXT1kIGlmIGsgbm90IGluIEQnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZltrZXldID0gZGVmYXVsdAorICAgICAgICByZXR1cm4gZGVmYXVsdAorCitNdXRhYmxlTWFwcGluZy5yZWdpc3RlcihkaWN0KQorCisKKyMjIyBTRVFVRU5DRVMgIyMjCisKKworY2xhc3MgU2VxdWVuY2UoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgorCisgICAgIiIiQWxsIHRoZSBvcGVyYXRpb25zIG9uIGEgcmVhZC1vbmx5IHNlcXVlbmNlLgorCisgICAgQ29uY3JldGUgc3ViY2xhc3NlcyBtdXN0IG92ZXJyaWRlIF9fbmV3X18gb3IgX19pbml0X18sCisgICAgX19nZXRpdGVtX18sIGFuZCBfX2xlbl9fLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgaSA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB2ID0gc2VsZltpXQorICAgICAgICAgICAgICAgIHlpZWxkIHYKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgorICAgICAgICBmb3IgdiBpbiBzZWxmOgorICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX3JldmVyc2VkX18oc2VsZik6CisgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKGxlbihzZWxmKSkpOgorICAgICAgICAgICAgeWllbGQgc2VsZltpXQorCisgICAgZGVmIGluZGV4KHNlbGYsIHZhbHVlKToKKyAgICAgICAgJycnUy5pbmRleCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gZmlyc3QgaW5kZXggb2YgdmFsdWUuCisgICAgICAgICAgIFJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KKyAgICAgICAgJycnCisgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZShzZWxmKToKKyAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgZGVmIGNvdW50KHNlbGYsIHZhbHVlKToKKyAgICAgICAgJ1MuY291bnQodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB2YWx1ZScKKyAgICAgICAgcmV0dXJuIHN1bSgxIGZvciB2IGluIHNlbGYgaWYgdiA9PSB2YWx1ZSkKKworU2VxdWVuY2UucmVnaXN0ZXIodHVwbGUpCitTZXF1ZW5jZS5yZWdpc3RlcihzdHIpCitTZXF1ZW5jZS5yZWdpc3RlcihyYW5nZSkKK1NlcXVlbmNlLnJlZ2lzdGVyKG1lbW9yeXZpZXcpCisKKworY2xhc3MgQnl0ZVN0cmluZyhTZXF1ZW5jZSk6CisKKyAgICAiIiJUaGlzIHVuaWZpZXMgYnl0ZXMgYW5kIGJ5dGVhcnJheS4KKworICAgIFhYWCBTaG91bGQgYWRkIGFsbCB0aGVpciBtZXRob2RzLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworQnl0ZVN0cmluZy5yZWdpc3RlcihieXRlcykKK0J5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZWFycmF5KQorCisKK2NsYXNzIE11dGFibGVTZXF1ZW5jZShTZXF1ZW5jZSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgIiIiQWxsIHRoZSBvcGVyYXRpb25zIG9uIGEgcmVhZC13cml0ZSBzZXF1ZW5jZS4KKworICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIF9fbmV3X18gb3IgX19pbml0X18sCisgICAgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywgX19sZW5fXywgYW5kIGluc2VydCgpLgorCisgICAgIiIiCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKToKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgdmFsdWUpOgorICAgICAgICAnUy5pbnNlcnQoaW5kZXgsIHZhbHVlKSAtLSBpbnNlcnQgdmFsdWUgYmVmb3JlIGluZGV4JworICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgJ1MuYXBwZW5kKHZhbHVlKSAtLSBhcHBlbmQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UnCisgICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmKSwgdmFsdWUpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICdTLmNsZWFyKCkgLT4gTm9uZSAtLSByZW1vdmUgYWxsIGl0ZW1zIGZyb20gUycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHJldmVyc2Uoc2VsZik6CisgICAgICAgICdTLnJldmVyc2UoKSAtLSByZXZlcnNlICpJTiBQTEFDRSonCisgICAgICAgIG4gPSBsZW4oc2VsZikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi8vMik6CisgICAgICAgICAgICBzZWxmW2ldLCBzZWxmW24taS0xXSA9IHNlbGZbbi1pLTFdLCBzZWxmW2ldCisKKyAgICBkZWYgZXh0ZW5kKHNlbGYsIHZhbHVlcyk6CisgICAgICAgICdTLmV4dGVuZChpdGVyYWJsZSkgLS0gZXh0ZW5kIHNlcXVlbmNlIGJ5IGFwcGVuZGluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZScKKyAgICAgICAgZm9yIHYgaW4gdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hcHBlbmQodikKKworICAgIGRlZiBwb3Aoc2VsZiwgaW5kZXg9LTEpOgorICAgICAgICAnJydTLnBvcChbaW5kZXhdKSAtPiBpdGVtIC0tIHJlbW92ZSBhbmQgcmV0dXJuIGl0ZW0gYXQgaW5kZXggKGRlZmF1bHQgbGFzdCkuCisgICAgICAgICAgIFJhaXNlIEluZGV4RXJyb3IgaWYgbGlzdCBpcyBlbXB0eSBvciBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCisgICAgICAgICcnJworICAgICAgICB2ID0gc2VsZltpbmRleF0KKyAgICAgICAgZGVsIHNlbGZbaW5kZXhdCisgICAgICAgIHJldHVybiB2CisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgJycnUy5yZW1vdmUodmFsdWUpIC0tIHJlbW92ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHZhbHVlLgorICAgICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KKyAgICAgICAgJycnCisgICAgICAgIGRlbCBzZWxmW3NlbGYuaW5kZXgodmFsdWUpXQorCisgICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbHVlcyk6CisgICAgICAgIHNlbGYuZXh0ZW5kKHZhbHVlcykKKyAgICAgICAgcmV0dXJuIHNlbGYKKworTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGxpc3QpCitNdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoYnl0ZWFycmF5KSAgIyBNdWx0aXBseSBpbmhlcml0aW5nLCBzZWUgQnl0ZVN0cmluZwpkaWZmIC0tZ2l0IGEvTGliL19kdW1teV90aHJlYWQucHkgYi9MaWIvX2R1bW15X3RocmVhZC5weQppbmRleCAxM2IxZjI2Li5iNjdjZmI5IDEwMDY0NAotLS0gYS9MaWIvX2R1bW15X3RocmVhZC5weQorKysgYi9MaWIvX2R1bW15X3RocmVhZC5weQpAQCAtODEsNiArODEsMTAgQEAKICAgICAgICAgcmFpc2UgZXJyb3IoInNldHRpbmcgdGhyZWFkIHN0YWNrIHNpemUgbm90IHN1cHBvcnRlZCIpCiAgICAgcmV0dXJuIDAKIAorZGVmIF9zZXRfc2VudGluZWwoKToKKyAgICAiIiJEdW1teSBpbXBsZW1lbnRhdGlvbiBvZiBfdGhyZWFkLl9zZXRfc2VudGluZWwoKS4iIiIKKyAgICByZXR1cm4gTG9ja1R5cGUoKQorCiBjbGFzcyBMb2NrVHlwZShvYmplY3QpOgogICAgICIiIkNsYXNzIGltcGxlbWVudGluZyBkdW1teSBpbXBsZW1lbnRhdGlvbiBvZiBfdGhyZWFkLkxvY2tUeXBlLgogCmRpZmYgLS1naXQgYS9MaWIvX29zeF9zdXBwb3J0LnB5IGIvTGliL19vc3hfc3VwcG9ydC5weQppbmRleCA1MGIyZDE3Li5iMDdlNzVkIDEwMDY0NAotLS0gYS9MaWIvX29zeF9zdXBwb3J0LnB5CisrKyBiL0xpYi9fb3N4X3N1cHBvcnQucHkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICBwYXRocyA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4ZWN1dGFibGUpCiAKLSAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igb3MubmFtZSA9PSAnb3MyJykgYW5kIChleHQgIT0gJy5leGUnKToKKyAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CiAgICAgICAgIGV4ZWN1dGFibGUgPSBleGVjdXRhYmxlICsgJy5leGUnCiAKICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhlY3V0YWJsZSk6CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIF9TWVNURU1fVkVSU0lPTiA9ICcnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKCcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QnKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIFdlJ3JlIG9uIGEgcGxhaW4gZGFyd2luIGJveCwgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAjIGJlaGF2aW91ci4KICAgICAgICAgICAgIHBhc3MKQEAgLTE4Miw3ICsxODIsNyBAQAogICAgICAgICAjIENvbXBpbGVyIGlzIEdDQywgY2hlY2sgaWYgaXQgaXMgTExWTS1HQ0MKICAgICAgICAgZGF0YSA9IF9yZWFkX291dHB1dCgiJyVzJyAtLXZlcnNpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNjLnJlcGxhY2UoIiciLCAiJ1wiJ1wiJyIpLCkpCi0gICAgICAgIGlmICdsbHZtLWdjYycgaW4gZGF0YToKKyAgICAgICAgaWYgZGF0YSBhbmQgJ2xsdm0tZ2NjJyBpbiBkYXRhOgogICAgICAgICAgICAgIyBGb3VuZCBMTFZNLUdDQywgZmFsbCBiYWNrIHRvIGNsYW5nCiAgICAgICAgICAgICBjYyA9IF9maW5kX2J1aWxkX3Rvb2woJ2NsYW5nJykKIApAQCAtNDUwLDggKzQ1MCwxNiBAQAogICAgICAgICAjIGNhc2UgYW5kIGRpc2FsbG93IGluc3RhbGxzLgogICAgICAgICBjZmxhZ3MgPSBfY29uZmlnX3ZhcnMuZ2V0KF9JTklUUFJFKydDRkxBR1MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbmZpZ192YXJzLmdldCgnQ0ZMQUdTJywgJycpKQotICAgICAgICBpZiAoKG1hY3JlbGVhc2UgKyAnLicpID49ICcxMC40LicgYW5kCi0gICAgICAgICAgICAnLWFyY2gnIGluIGNmbGFncy5zdHJpcCgpKToKKyAgICAgICAgaWYgbWFjcmVsZWFzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYWNyZWxlYXNlID0gdHVwbGUoaW50KGkpIGZvciBpIGluIG1hY3JlbGVhc2Uuc3BsaXQoJy4nKVswOjJdKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgbWFjcmVsZWFzZSA9ICgxMCwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgYXNzdW1lIG5vIHVuaXZlcnNhbCBzdXBwb3J0CisgICAgICAgICAgICBtYWNyZWxlYXNlID0gKDEwLCAwKQorCisgICAgICAgIGlmIChtYWNyZWxlYXNlID49ICgxMCwgNCkpIGFuZCAnLWFyY2gnIGluIGNmbGFncy5zdHJpcCgpOgogICAgICAgICAgICAgIyBUaGUgdW5pdmVyc2FsIGJ1aWxkIHdpbGwgYnVpbGQgZmF0IGJpbmFyaWVzLCBidXQgbm90IG9uCiAgICAgICAgICAgICAjIHN5c3RlbXMgYmVmb3JlIDEwLjQKIApkaWZmIC0tZ2l0IGEvTGliL19weWlvLnB5IGIvTGliL19weWlvLnB5CmluZGV4IGEwYzRiMjUuLmQ0Y2ZiNmUgMTAwNjQ0Ci0tLSBhL0xpYi9fcHlpby5weQorKysgYi9MaWIvX3B5aW8ucHkKQEAgLTM0LDcgKzM0LDcgQEAKIGRlZiBvcGVuKGZpbGUsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLAogICAgICAgICAgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUsIG9wZW5lcj1Ob25lKToKIAotICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLgorICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIE9TRXJyb3IgdXBvbiBmYWlsdXJlLgogCiAgICAgZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoCiAgICAgaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvCkBAIC02Miw4ICs2Miw3IEBACiAgICAgJ2InICAgICAgIGJpbmFyeSBtb2RlCiAgICAgJ3QnICAgICAgIHRleHQgbW9kZSAoZGVmYXVsdCkKICAgICAnKycgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpCi0gICAgJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdW5uZWVkZWQKLSAgICAgICAgICAgICAgZm9yIG5ldyBjb2RlKQorICAgICdVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChkZXByZWNhdGVkKQogICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb20KQEAgLTc5LDYgKzc4LDEwIEBACiAgICAgcmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYQogICAgIHBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLgogCisgICAgJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zCisgICAgb2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2wKKyAgICB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS4KKwogICAgIGJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LgogICAgIFBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3QKICAgICBsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlCkBAIC0xMjksNiArMTMyLDggQEAKICAgICBiZSBrZXB0IG9wZW4gd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzCiAgICAgZ2l2ZW4gYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuCiAKKyAgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG5vbi1pbmhlcml0YWJsZS4KKwogICAgIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZQogICAgIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBvYmplY3QgaXMgdGhlbiBvYnRhaW5lZCBieSBjYWxsaW5nCiAgICAgKm9wZW5lciogd2l0aCAoKmZpbGUqLCAqZmxhZ3MqKS4gKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbiBmaWxlCkBAIC0xNzIsNiArMTc3LDkgQEAKICAgICBpZiAiVSIgaW4gbW9kZXM6CiAgICAgICAgIGlmIGNyZWF0aW5nIG9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIikKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmVhZGluZyA9IFRydWUKICAgICBpZiB0ZXh0IGFuZCBiaW5hcnk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXQgb25jZSIpCkBAIC0xOTIsMzggKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAoYXBwZW5kaW5nIGFuZCAiYSIgb3IgIiIpICsKICAgICAgICAgICAgICAgICAgKHVwZGF0aW5nIGFuZCAiKyIgb3IgIiIpLAogICAgICAgICAgICAgICAgICBjbG9zZWZkLCBvcGVuZXI9b3BlbmVyKQotICAgIGxpbmVfYnVmZmVyaW5nID0gRmFsc2UKLSAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IC0xCi0gICAgICAgIGxpbmVfYnVmZmVyaW5nID0gVHJ1ZQotICAgIGlmIGJ1ZmZlcmluZyA8IDA6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IERFRkFVTFRfQlVGRkVSX1NJWkUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKLSAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICAgICAgcGFzcworICAgIHJlc3VsdCA9IHJhdworICAgIHRyeToKKyAgICAgICAgbGluZV9idWZmZXJpbmcgPSBGYWxzZQorICAgICAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6CisgICAgICAgICAgICBidWZmZXJpbmcgPSAtMQorICAgICAgICAgICAgbGluZV9idWZmZXJpbmcgPSBUcnVlCisgICAgICAgIGlmIGJ1ZmZlcmluZyA8IDA6CisgICAgICAgICAgICBidWZmZXJpbmcgPSBERUZBVUxUX0JVRkZFUl9TSVpFCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgYnMgPiAxOgorICAgICAgICAgICAgICAgICAgICBidWZmZXJpbmcgPSBicworICAgICAgICBpZiBidWZmZXJpbmcgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBidWZmZXJpbmcgc2l6ZSIpCisgICAgICAgIGlmIGJ1ZmZlcmluZyA9PSAwOgorICAgICAgICAgICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdW5idWZmZXJlZCB0ZXh0IEkvTyIpCisgICAgICAgIGlmIHVwZGF0aW5nOgorICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJpbmcpCisgICAgICAgIGVsaWYgY3JlYXRpbmcgb3Igd3JpdGluZyBvciBhcHBlbmRpbmc6CisgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFdyaXRlcihyYXcsIGJ1ZmZlcmluZykKKyAgICAgICAgZWxpZiByZWFkaW5nOgorICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSZWFkZXIocmF3LCBidWZmZXJpbmcpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBicyA+IDE6Ci0gICAgICAgICAgICAgICAgYnVmZmVyaW5nID0gYnMKLSAgICBpZiBidWZmZXJpbmcgPCAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGJ1ZmZlcmluZyBzaXplIikKLSAgICBpZiBidWZmZXJpbmcgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gbW9kZTogJXIiICUgbW9kZSkKKyAgICAgICAgcmVzdWx0ID0gYnVmZmVyCiAgICAgICAgIGlmIGJpbmFyeToKLSAgICAgICAgICAgIHJldHVybiByYXcKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgaGF2ZSB1bmJ1ZmZlcmVkIHRleHQgSS9PIikKLSAgICBpZiB1cGRhdGluZzoKLSAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJpbmcpCi0gICAgZWxpZiBjcmVhdGluZyBvciB3cml0aW5nIG9yIGFwcGVuZGluZzoKLSAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRXcml0ZXIocmF3LCBidWZmZXJpbmcpCi0gICAgZWxpZiByZWFkaW5nOgotICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFJlYWRlcihyYXcsIGJ1ZmZlcmluZykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIG1vZGU6ICVyIiAlIG1vZGUpCi0gICAgaWYgYmluYXJ5OgotICAgICAgICByZXR1cm4gYnVmZmVyCi0gICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZykKLSAgICB0ZXh0Lm1vZGUgPSBtb2RlCi0gICAgcmV0dXJuIHRleHQKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZykKKyAgICAgICAgcmVzdWx0ID0gdGV4dAorICAgICAgICB0ZXh0Lm1vZGUgPSBtb2RlCisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBleGNlcHQ6CisgICAgICAgIHJlc3VsdC5jbG9zZSgpCisgICAgICAgIHJhaXNlCiAKIAogY2xhc3MgRG9jRGVzY3JpcHRvcjoKQEAgLTI1NCw3ICsyNjksNyBAQAogdHJ5OgogICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBJT0Vycm9yKToKKyAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcGFzcwogCiAKQEAgLTI3OCw3ICsyOTMsNyBAQAogICAgIHJlYWRpbnRvKSBuZWVkZWQuIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLgogCiAgICAgTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpcwotICAgIHVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBJT0Vycm9yIGluIHRoaXMgY2FzZS4KKyAgICB1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgT1NFcnJvciBpbiB0aGlzIGNhc2UuCiAKICAgICBJT0Jhc2UgKGFuZCBpdHMgc3ViY2xhc3Nlcykgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIG1lYW5pbmcKICAgICB0aGF0IGFuIElPQmFzZSBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGEKQEAgLTI5NCw3ICszMDksNyBAQAogICAgICMjIyBJbnRlcm5hbCAjIyMKIAogICAgIGRlZiBfdW5zdXBwb3J0ZWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy4iIiIKKyAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgogICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigiJXMuJXMoKSBub3Qgc3VwcG9ydGVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbmFtZSkpCiAKQEAgLTQ0MSw3ICs0NTYsNyBAQAogICAgIGRlZiBmaWxlbm8oc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgKGFuIGludCkgaWYgb25lIGV4aXN0cy4KIAotICAgICAgICBBbiBJT0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgQW4gT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgiZmlsZW5vIikKIApAQCAtNDU1LDExICs0NzAsMTEgQEAKIAogICAgICMjIyBSZWFkbGluZVtzXSBhbmQgd3JpdGVsaW5lcyAjIyMKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD0tMSk6CisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgogICAgICAgICByIiIiUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBvZiBieXRlcyBmcm9tIHRoZSBzdHJlYW0uCiAKLSAgICAgICAgSWYgbGltaXQgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IGxpbWl0IGJ5dGVzIHdpbGwgYmUgcmVhZC4KLSAgICAgICAgTGltaXQgc2hvdWxkIGJlIGFuIGludC4KKyAgICAgICAgSWYgc2l6ZSBpcyBzcGVjaWZpZWQsIGF0IG1vc3Qgc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICAgIFNpemUgc2hvdWxkIGJlIGFuIGludC4KIAogICAgICAgICBUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBiJ1xuJyBmb3IgYmluYXJ5IGZpbGVzOyBmb3IgdGV4dAogICAgICAgICBmaWxlcywgdGhlIG5ld2xpbmVzIGFyZ3VtZW50IHRvIG9wZW4gY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCkBAIC00NzIsMTggKzQ4NywxOCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkYWhlYWQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgICAgICAgICAgbiA9IChyZWFkYWhlYWQuZmluZChiIlxuIikgKyAxKSBvciBsZW4ocmVhZGFoZWFkKQotICAgICAgICAgICAgICAgIGlmIGxpbWl0ID49IDA6Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBtaW4obiwgbGltaXQpCisgICAgICAgICAgICAgICAgaWYgc2l6ZSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gbWluKG4sIHNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRlZiBucmVhZGFoZWFkKCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIGxpbWl0ID0gLTEKLSAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShsaW1pdCwgaW50KToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uoc2l6ZSwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGFuIGludGVnZXIiKQogICAgICAgICByZXMgPSBieXRlYXJyYXkoKQotICAgICAgICB3aGlsZSBsaW1pdCA8IDAgb3IgbGVuKHJlcykgPCBsaW1pdDoKKyAgICAgICAgd2hpbGUgc2l6ZSA8IDAgb3IgbGVuKHJlcykgPCBzaXplOgogICAgICAgICAgICAgYiA9IHNlbGYucmVhZChucmVhZGFoZWFkKCkpCiAgICAgICAgICAgICBpZiBub3QgYjoKICAgICAgICAgICAgICAgICBicmVhawpAQCAtNTQyLDE3ICs1NTcsMTcgQEAKICAgICAjIHByaW1pdGl2ZSBvcGVyYXRpb24sIGJ1dCB0aGF0IHdvdWxkIGxlYWQgdG8gbmFzdHkgcmVjdXJzaW9uIGluIGNhc2UKICAgICAjIGEgc3ViY2xhc3MgZG9lc24ndCBpbXBsZW1lbnQgZWl0aGVyLikKIAotICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcywgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBzaXplIGJ5dGVzLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAogICAgICAgICBSZXR1cm5zIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBvbiBFT0YsIG9yIE5vbmUgaWYgdGhlIG9iamVjdCBpcwogICAgICAgICBzZXQgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgaWYgc2l6ZSA8IDA6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkYWxsKCkKLSAgICAgICAgYiA9IGJ5dGVhcnJheShuLl9faW5kZXhfXygpKQorICAgICAgICBiID0gYnl0ZWFycmF5KHNpemUuX19pbmRleF9fKCkpCiAgICAgICAgIG4gPSBzZWxmLnJlYWRpbnRvKGIpCiAgICAgICAgIGlmIG4gaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC02MTAsOCArNjI1LDggQEAKICAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lLgogICAgICIiIgogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMsIHdoZXJlIG4gaXMgYW4gaW50LgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBzaXplIGJ5dGVzLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAogICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgTm9uZSwgb3IgbmVnYXRpdmUsIHJlYWRzIGFuZAogICAgICAgICByZXR1cm5zIGFsbCBkYXRhIHVudGlsIEVPRi4KQEAgLTYzMCw5ICs2NDUsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQiKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbiBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbCwKLSAgICAgICAgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbCwKKyAgICAgICAgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZDEiKQogCkBAIC02OTksMTMgKzcxNCwxMyBAQAogICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgogICAgICAgICBuZXdfcG9zaXRpb24gPSBzZWxmLnJhdy5zZWVrKHBvcywgd2hlbmNlKQogICAgICAgICBpZiBuZXdfcG9zaXRpb24gPCAwOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQogICAgICAgICByZXR1cm4gbmV3X3Bvc2l0aW9uCiAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcG9zID0gc2VsZi5yYXcudGVsbCgpCiAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBwb3MKIAogICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CkBAIC04MjAsMjQgKzgzNSwyNCBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIG1lbW9yeXZpZXcoc2VsZi5fYnVmZmVyKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlYWQgZnJvbSBjbG9zZWQgZmlsZSIpCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICBpZiBuIDwgMDoKLSAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBzaXplID0gbGVuKHNlbGYuX2J1ZmZlcikKICAgICAgICAgaWYgbGVuKHNlbGYuX2J1ZmZlcikgPD0gc2VsZi5fcG9zOgogICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICBuZXdwb3MgPSBtaW4obGVuKHNlbGYuX2J1ZmZlciksIHNlbGYuX3BvcyArIG4pCisgICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgc2l6ZSkKICAgICAgICAgYiA9IHNlbGYuX2J1ZmZlcltzZWxmLl9wb3MgOiBuZXdwb3NdCiAgICAgICAgIHNlbGYuX3BvcyA9IG5ld3BvcwogICAgICAgICByZXR1cm4gYnl0ZXMoYikKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CiAgICAgICAgICIiIlRoaXMgaXMgdGhlIHNhbWUgYXMgcmVhZC4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWQobikKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZChzaXplKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKQEAgLTkyNyw3ICs5NDIsNyBAQAogICAgICAgICAiIiJDcmVhdGUgYSBuZXcgYnVmZmVyZWQgcmVhZGVyIHVzaW5nIHRoZSBnaXZlbiByZWFkYWJsZSByYXcgSU8gb2JqZWN0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHJhdy5yZWFkYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQogCiAgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQogICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgpAQCAtOTQwLDE4ICs5NTUsMTggQEAKICAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBiIiIKICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIG4gYnl0ZXMuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBzaXplIGJ5dGVzLgogCi0gICAgICAgIFJldHVybnMgZXhhY3RseSBuIGJ5dGVzIG9mIGRhdGEgdW5sZXNzIHRoZSB1bmRlcmx5aW5nIHJhdyBJTworICAgICAgICBSZXR1cm5zIGV4YWN0bHkgc2l6ZSBieXRlcyBvZiBkYXRhIHVubGVzcyB0aGUgdW5kZXJseWluZyByYXcgSU8KICAgICAgICAgc3RyZWFtIHJlYWNoZXMgRU9GIG9yIGlmIHRoZSBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZwotICAgICAgICBtb2RlLiBJZiBuIGlzIG5lZ2F0aXZlLCByZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQKKyAgICAgICAgbW9kZS4gSWYgc2l6ZSBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkCiAgICAgICAgIGJsb2NrLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbiBpcyBub3QgTm9uZSBhbmQgbiA8IC0xOgorICAgICAgICBpZiBzaXplIGlzIG5vdCBOb25lIGFuZCBzaXplIDwgLTE6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG51bWJlciBvZiBieXRlcyB0byByZWFkIikKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChuKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQoc2l6ZSkKIAogICAgIGRlZiBfcmVhZF91bmxvY2tlZChzZWxmLCBuPU5vbmUpOgogICAgICAgICBub2RhdGFfdmFsID0gYiIiCkBAIC0xMDExLDcgKzEwMjYsNyBAQAogICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKICAgICAgICAgcmV0dXJuIG91dFs6bl0gaWYgb3V0IGVsc2Ugbm9kYXRhX3ZhbAogCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICBkZWYgcGVlayhzZWxmLCBzaXplPTApOgogICAgICAgICAiIiJSZXR1cm5zIGJ1ZmZlcmVkIGJ5dGVzIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbi4KIAogICAgICAgICBUaGUgYXJndW1lbnQgaW5kaWNhdGVzIGEgZGVzaXJlZCBtaW5pbWFsIG51bWJlciBvZiBieXRlczsgd2UKQEAgLTEwMTksNyArMTAzNCw3IEBACiAgICAgICAgIHRoYW4gc2VsZi5idWZmZXJfc2l6ZS4KICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfdW5sb2NrZWQobikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wZWVrX3VubG9ja2VkKHNpemUpCiAKICAgICBkZWYgX3BlZWtfdW5sb2NrZWQoc2VsZiwgbj0wKToKICAgICAgICAgd2FudCA9IG1pbihuLCBzZWxmLmJ1ZmZlcl9zaXplKQpAQCAtMTAzNywxOCArMTA1MiwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAogICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9idWZbc2VsZi5fcmVhZF9wb3M6XQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICAiIiJSZWFkcyB1cCB0byBuIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKLSAgICAgICAgIyBSZXR1cm5zIHVwIHRvIG4gYnl0ZXMuICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgd2UKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CisgICAgICAgICIiIlJlYWRzIHVwIHRvIHNpemUgYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgorICAgICAgICAjIFJldHVybnMgdXAgdG8gc2l6ZSBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQogICAgICAgICAjIG9ubHkgcmV0dXJuIGJ1ZmZlcmVkIGJ5dGVzLiAgT3RoZXJ3aXNlLCB3ZSBkbyBvbmUgcmF3IHJlYWQuCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm51bWJlciBvZiBieXRlcyB0byByZWFkIG11c3QgYmUgcG9zaXRpdmUiKQotICAgICAgICBpZiBuID09IDA6CisgICAgICAgIGlmIHNpemUgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiIiIKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9wZWVrX3VubG9ja2VkKDEpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZCgKLSAgICAgICAgICAgICAgICBtaW4obiwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKKyAgICAgICAgICAgICAgICBtaW4oc2l6ZSwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gX0J1ZmZlcmVkSU9NaXhpbi50ZWxsKHNlbGYpIC0gbGVuKHNlbGYuX3JlYWRfYnVmKSArIHNlbGYuX3JlYWRfcG9zCkBAIC0xMDc0LDcgKzEwODksNyBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdywgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSk6CiAgICAgICAgIGlmIG5vdCByYXcud3JpdGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKIAogICAgICAgICBfQnVmZmVyZWRJT01peGluLl9faW5pdF9fKHNlbGYsIHJhdykKICAgICAgICAgaWYgYnVmZmVyX3NpemUgPD0gMDoKQEAgLTExMzgsNyArMTE1Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVBR0FJTiwKICAgICAgICAgICAgICAgICAgICAgIndyaXRlIGNvdWxkIG5vdCBjb21wbGV0ZSB3aXRob3V0IGJsb2NraW5nIiwgMCkKICAgICAgICAgICAgIGlmIG4gPiBsZW4oc2VsZi5fd3JpdGVfYnVmKSBvciBuIDwgMDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ3cml0ZSgpIHJldHVybmVkIGluY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIndyaXRlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcyIpCiAgICAgICAgICAgICBkZWwgc2VsZi5fd3JpdGVfYnVmWzpuXQogCiAgICAgZGVmIHRlbGwoc2VsZik6CkBAIC0xMTc0LDE4ICsxMTg5LDE4IEBACiAgICAgICAgIFRoZSBhcmd1bWVudHMgYXJlIHR3byBSYXdJTyBpbnN0YW5jZXMuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3QgcmVhZGVyLnJlYWRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmVhZGVyIiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcicmVhZGVyIiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCiAKICAgICAgICAgaWYgbm90IHdyaXRlci53cml0YWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignIndyaXRlciIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignIndyaXRlciIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQogCiAgICAgICAgIHNlbGYucmVhZGVyID0gQnVmZmVyZWRSZWFkZXIocmVhZGVyLCBidWZmZXJfc2l6ZSkKICAgICAgICAgc2VsZi53cml0ZXIgPSBCdWZmZXJlZFdyaXRlcih3cml0ZXIsIGJ1ZmZlcl9zaXplKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkKG4pCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkKHNpemUpCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkaW50byhiKQpAQCAtMTE5MywxMSArMTIwOCwxMSBAQAogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLndyaXRlKGIpCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucGVlayhuKQorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5wZWVrKHNpemUpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkMShuKQorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKHNpemUpCiAKICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkYWJsZSgpCkBAIC0xMjQ4LDcgKzEyNjMsNyBAQAogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKICAgICAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKICAgICAgICAgaWYgcG9zIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInNlZWsoKSByZXR1cm5lZCBpbnZhbGlkIHBvc2l0aW9uIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInNlZWsoKSByZXR1cm5lZCBpbnZhbGlkIHBvc2l0aW9uIikKICAgICAgICAgcmV0dXJuIHBvcwogCiAgICAgZGVmIHRlbGwoc2VsZik6CkBAIC0xMjYzLDIzICsxMjc4LDIzIEBACiAgICAgICAgICMgVXNlIHNlZWsgdG8gZmx1c2ggdGhlIHJlYWQgYnVmZmVyLgogICAgICAgICByZXR1cm4gQnVmZmVyZWRXcml0ZXIudHJ1bmNhdGUoc2VsZiwgcG9zKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCiAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZChzZWxmLCBuKQorICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZChzZWxmLCBzaXplKQogCiAgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgogICAgICAgICBzZWxmLmZsdXNoKCkKICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWRpbnRvKHNlbGYsIGIpCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CiAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucGVlayhzZWxmLCBuKQorICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucGVlayhzZWxmLCBzaXplKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkMShzZWxmLCBuKQorICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZDEoc2VsZiwgc2l6ZSkKIAogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICAgICAgaWYgc2VsZi5fcmVhZF9idWY6CkBAIC0xMjk5LDExICsxMzE0LDExIEBACiAgICAgYXJlIGltbXV0YWJsZS4gVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgogICAgICIiIgogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6Ci0gICAgICAgICIiIlJlYWQgYXQgbW9zdCBuIGNoYXJhY3RlcnMgZnJvbSBzdHJlYW0sIHdoZXJlIG4gaXMgYW4gaW50LgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAiIiJSZWFkIGF0IG1vc3Qgc2l6ZSBjaGFyYWN0ZXJzIGZyb20gc3RyZWFtLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAotICAgICAgICBSZWFkIGZyb20gdW5kZXJseWluZyBidWZmZXIgdW50aWwgd2UgaGF2ZSBuIGNoYXJhY3RlcnMgb3Igd2UgaGl0IEVPRi4KLSAgICAgICAgSWYgbiBpcyBuZWdhdGl2ZSBvciBvbWl0dGVkLCByZWFkIHVudGlsIEVPRi4KKyAgICAgICAgUmVhZCBmcm9tIHVuZGVybHlpbmcgYnVmZmVyIHVudGlsIHdlIGhhdmUgc2l6ZSBjaGFyYWN0ZXJzIG9yIHdlIGhpdCBFT0YuCisgICAgICAgIElmIHNpemUgaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YuCiAKICAgICAgICAgUmV0dXJucyBhIHN0cmluZy4KICAgICAgICAgIiIiCkBAIC0xNzMyLDcgKzE3NDcsNyBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fc2Vla2FibGU6CiAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKICAgICAgICAgaWYgbm90IHNlbGYuX3RlbGxpbmc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsaW5nIHBvc2l0aW9uIGRpc2FibGVkIGJ5IG5leHQoKSBjYWxsIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQogICAgICAgICBzZWxmLmZsdXNoKCkKICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci50ZWxsKCkKICAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIKQEAgLTE4MTksNyArMTgzNCw3IEBACiAgICAgICAgICAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBsZW4oZGVjb2Rlci5kZWNvZGUoYicnLCBmaW5hbD1UcnVlKSkKICAgICAgICAgICAgICAgICBuZWVkX2VvZiA9IDEKICAgICAgICAgICAgICAgICBpZiBjaGFyc19kZWNvZGVkIDwgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKIAogICAgICAgICAgICAgIyBUaGUgcmV0dXJuZWQgY29va2llIGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IHNhZmUgc3RhcnQgcG9pbnQuCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFja19jb29raWUoCkBAIC0xODk2LDcgKzE5MTEsNyBAQAogCiAgICAgICAgICAgICAjIFNraXAgY2hhcnNfdG9fc2tpcCBvZiB0aGUgZGVjb2RlZCBjaGFyYWN0ZXJzLgogICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2RlY29kZWRfY2hhcnMpIDwgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCByZXN0b3JlIGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2FuJ3QgcmVzdG9yZSBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQogICAgICAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkID0gY2hhcnNfdG9fc2tpcAogCiAgICAgICAgICMgRmluYWxseSwgcmVzZXQgdGhlIGVuY29kZXIgKG1lcmVseSB1c2VmdWwgZm9yIHByb3BlciBCT00gaGFuZGxpbmcpCkBAIC0xOTEyLDE2ICsxOTI3LDE2IEBACiAgICAgICAgICAgICAgICAgZW5jb2Rlci5yZXNldCgpCiAgICAgICAgIHJldHVybiBjb29raWUKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgc2VsZi5fY2hlY2tSZWFkYWJsZSgpCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKICAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIgb3Igc2VsZi5fZ2V0X2RlY29kZXIoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBuLl9faW5kZXhfXworICAgICAgICAgICAgc2l6ZS5fX2luZGV4X18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGVycjoKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpIGZyb20gZXJyCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgICMgUmVhZCBldmVyeXRoaW5nLgogICAgICAgICAgICAgcmVzdWx0ID0gKHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKCkgKwogICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIuZGVjb2RlKHNlbGYuYnVmZmVyLnJlYWQoKSwgZmluYWw9VHJ1ZSkpCkBAIC0xOTI5LDEyICsxOTQ0LDEyIEBACiAgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyB0byByZXR1cm4uCisgICAgICAgICAgICAjIEtlZXAgcmVhZGluZyBjaHVua3MgdW50aWwgd2UgaGF2ZSBzaXplIGNoYXJhY3RlcnMgdG8gcmV0dXJuLgogICAgICAgICAgICAgZW9mID0gRmFsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKG4pCi0gICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IG4gYW5kIG5vdCBlb2Y6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhzaXplKQorICAgICAgICAgICAgd2hpbGUgbGVuKHJlc3VsdCkgPCBzaXplIGFuZCBub3QgZW9mOgogICAgICAgICAgICAgICAgIGVvZiA9IG5vdCBzZWxmLl9yZWFkX2NodW5rKCkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobiAtIGxlbihyZXN1bHQpKQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhzaXplIC0gbGVuKHJlc3VsdCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgX19uZXh0X18oc2VsZik6CkBAIC0xOTQ2LDEzICsxOTYxLDEzIEBACiAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ9Tm9uZSk6CisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVhZCBmcm9tIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIGxpbWl0ID0gLTEKLSAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShsaW1pdCwgaW50KToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uoc2l6ZSwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGFuIGludGVnZXIiKQogCiAgICAgICAgICMgR3JhYiBhbGwgdGhlIGRlY29kZWQgdGV4dCAod2Ugd2lsbCByZXdpbmQgYW55IGV4dHJhIGJpdHMgbGF0ZXIpLgogICAgICAgICBsaW5lID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKQpAQCAtMjAxMSw4ICsyMDI2LDggQEAKICAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gcG9zICsgbGVuKHNlbGYuX3JlYWRubCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAotICAgICAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgbGVuKGxpbmUpID49IGxpbWl0OgotICAgICAgICAgICAgICAgIGVuZHBvcyA9IGxpbWl0ICAjIHJlYWNoZWQgbGVuZ3RoIGxpbWl0CisgICAgICAgICAgICBpZiBzaXplID49IDAgYW5kIGxlbihsaW5lKSA+PSBzaXplOgorICAgICAgICAgICAgICAgIGVuZHBvcyA9IHNpemUgICMgcmVhY2hlZCBsZW5ndGggc2l6ZQogICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgICMgTm8gbGluZSBlbmRpbmcgc2VlbiB5ZXQgLSBnZXQgbW9yZSBkYXRhJwpAQCAtMjAyNyw4ICsyMDQyLDggQEAKICAgICAgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKICAgICAgICAgICAgICAgICByZXR1cm4gbGluZQogCi0gICAgICAgIGlmIGxpbWl0ID49IDAgYW5kIGVuZHBvcyA+IGxpbWl0OgotICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgZG9uJ3QgZXhjZWVkIGxpbWl0CisgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgZW5kcG9zID4gc2l6ZToKKyAgICAgICAgICAgIGVuZHBvcyA9IHNpemUgICMgZG9uJ3QgZXhjZWVkIHNpemUKIAogICAgICAgICAjIFJld2luZCBfZGVjb2RlZF9jaGFycyB0byBqdXN0IGFmdGVyIHRoZSBsaW5lIGVuZGluZyB3ZSBmb3VuZC4KICAgICAgICAgc2VsZi5fcmV3aW5kX2RlY29kZWRfY2hhcnMobGVuKGxpbmUpIC0gZW5kcG9zKQpAQCAtMjA1OSw3ICsyMDc0LDYgQEAKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGluaXRpYWxfdmFsdWUsIHN0cik6CiAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbml0aWFsX3ZhbHVlIG11c3QgYmUgc3RyIG9yIE5vbmUsIG5vdCB7MH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQodHlwZShpbml0aWFsX3ZhbHVlKS5fX25hbWVfXykpCi0gICAgICAgICAgICAgICAgaW5pdGlhbF92YWx1ZSA9IHN0cihpbml0aWFsX3ZhbHVlKQogICAgICAgICAgICAgc2VsZi53cml0ZShpbml0aWFsX3ZhbHVlKQogICAgICAgICAgICAgc2VsZi5zZWVrKDApCiAKZGlmZiAtLWdpdCBhL0xpYi9fc2l0ZWJ1aWx0aW5zLnB5IGIvTGliL19zaXRlYnVpbHRpbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5Y2Y0YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9fc2l0ZWJ1aWx0aW5zLnB5CkBAIC0wLDAgKzEsMTAzIEBACisiIiIKK1RoZSBvYmplY3RzIHVzZWQgYnkgdGhlIHNpdGUgbW9kdWxlIHRvIGFkZCBjdXN0b20gYnVpbHRpbnMuCisiIiIKKworIyBUaG9zZSBvYmplY3RzIGFyZSBhbG1vc3QgaW1tb3J0YWwgYW5kIHRoZXkga2VlcCBhIHJlZmVyZW5jZSB0byB0aGVpciBtb2R1bGUKKyMgZ2xvYmFscy4gIERlZmluaW5nIHRoZW0gaW4gdGhlIHNpdGUgbW9kdWxlIHdvdWxkIGtlZXAgdG9vIG1hbnkgcmVmZXJlbmNlcworIyBhbGl2ZS4KKyMgTm90ZSB0aGlzIG1lYW5zIHRoaXMgbW9kdWxlIHNob3VsZCBhbHNvIGF2b2lkIGtlZXAgdGhpbmdzIGFsaXZlIGluIGl0cworIyBnbG9iYWxzLgorCitpbXBvcnQgc3lzCisKK2NsYXNzIFF1aXR0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZW9mKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmVvZiA9IGVvZgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdVc2UgJXMoKSBvciAlcyB0byBleGl0JyAlIChzZWxmLm5hbWUsIHNlbGYuZW9mKQorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjb2RlPU5vbmUpOgorICAgICAgICAjIFNoZWxscyBsaWtlIElETEUgY2F0Y2ggdGhlIFN5c3RlbUV4aXQsIGJ1dCBsaXN0ZW4gd2hlbiB0aGVpcgorICAgICAgICAjIHN0ZGluIHdyYXBwZXIgaXMgY2xvc2VkLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoY29kZSkKKworCitjbGFzcyBfUHJpbnRlcihvYmplY3QpOgorICAgICIiImludGVyYWN0aXZlIHByb21wdCBvYmplY3RzIGZvciBwcmludGluZyB0aGUgbGljZW5zZSB0ZXh0LCBhIGxpc3Qgb2YKKyAgICBjb250cmlidXRvcnMgYW5kIHRoZSBjb3B5cmlnaHQgbm90aWNlLiIiIgorCisgICAgTUFYTElORVMgPSAyMworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGRhdGEsIGZpbGVzPSgpLCBkaXJzPSgpKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHNlbGYuX19uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9fZGF0YSA9IGRhdGEKKyAgICAgICAgc2VsZi5fX2xpbmVzID0gTm9uZQorICAgICAgICBzZWxmLl9fZmlsZW5hbWVzID0gW29zLnBhdGguam9pbihkaXIsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkaXIgaW4gZGlycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlc10KKworICAgIGRlZiBfX3NldHVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9fbGluZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGF0YSA9IE5vbmUKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuX19maWxlbmFtZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAiciIpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fX2RhdGEKKyAgICAgICAgc2VsZi5fX2xpbmVzID0gZGF0YS5zcGxpdCgnXG4nKQorICAgICAgICBzZWxmLl9fbGluZWNudCA9IGxlbihzZWxmLl9fbGluZXMpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHNlbGYuX19zZXR1cCgpCisgICAgICAgIGlmIGxlbihzZWxmLl9fbGluZXMpIDw9IHNlbGYuTUFYTElORVM6CisgICAgICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYuX19saW5lcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiVHlwZSAlcygpIHRvIHNlZSB0aGUgZnVsbCAlcyB0ZXh0IiAlICgoc2VsZi5fX25hbWUsKSoyKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9fc2V0dXAoKQorICAgICAgICBwcm9tcHQgPSAnSGl0IFJldHVybiBmb3IgbW9yZSwgb3IgcSAoYW5kIFJldHVybikgdG8gcXVpdDogJworICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGluZW5vLCBsaW5lbm8gKyBzZWxmLk1BWExJTkVTKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5fX2xpbmVzW2ldKQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGluZW5vICs9IHNlbGYuTUFYTElORVMKKyAgICAgICAgICAgICAgICBrZXkgPSBOb25lCisgICAgICAgICAgICAgICAgd2hpbGUga2V5IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGlucHV0KHByb21wdCkKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiAoJycsICdxJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBOb25lCisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdxJzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworCitjbGFzcyBfSGVscGVyKG9iamVjdCk6CisgICAgIiIiRGVmaW5lIHRoZSBidWlsdGluICdoZWxwJy4KKworICAgIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBweWRvYy5oZWxwIHRoYXQgcHJvdmlkZXMgYSBoZWxwZnVsIG1lc3NhZ2UKKyAgICB3aGVuICdoZWxwJyBpcyB0eXBlZCBhdCB0aGUgUHl0aG9uIGludGVyYWN0aXZlIHByb21wdC4KKworICAgIENhbGxpbmcgaGVscCgpIGF0IHRoZSBQeXRob24gcHJvbXB0IHN0YXJ0cyBhbiBpbnRlcmFjdGl2ZSBoZWxwIHNlc3Npb24uCisgICAgQ2FsbGluZyBoZWxwKHRoaW5nKSBwcmludHMgaGVscCBmb3IgdGhlIHB5dGhvbiBvYmplY3QgJ3RoaW5nJy4KKyAgICAiIiIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUeXBlIGhlbHAoKSBmb3IgaW50ZXJhY3RpdmUgaGVscCwgIiBcCisgICAgICAgICAgICAgICAib3IgaGVscChvYmplY3QpIGZvciBoZWxwIGFib3V0IG9iamVjdC4iCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBpbXBvcnQgcHlkb2MKKyAgICAgICAgcmV0dXJuIHB5ZG9jLmhlbHAoKmFyZ3MsICoqa3dkcykKZGlmZiAtLWdpdCBhL0xpYi9fc3RycHRpbWUucHkgYi9MaWIvX3N0cnB0aW1lLnB5CmluZGV4IDkwNThhNjkuLjUzYmQzNGIgMTAwNjQ0Ci0tLSBhL0xpYi9fc3RycHRpbWUucHkKKysrIGIvTGliL19zdHJwdGltZS5weQpAQCAtMTQsMTQgKzE0LDE0IEBACiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgY2FsZW5kYXIKIGZyb20gcmUgaW1wb3J0IGNvbXBpbGUgYXMgcmVfY29tcGlsZQotZnJvbSByZSBpbXBvcnQgSUdOT1JFQ0FTRSwgQVNDSUkKK2Zyb20gcmUgaW1wb3J0IElHTk9SRUNBU0UKIGZyb20gcmUgaW1wb3J0IGVzY2FwZSBhcyByZV9lc2NhcGUKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IChkYXRlIGFzIGRhdGV0aW1lX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgdGltZWRlbHRhIGFzIGRhdGV0aW1lX3RpbWVkZWx0YSwKICAgICAgICAgICAgICAgICAgICAgICB0aW1lem9uZSBhcyBkYXRldGltZV90aW1lem9uZSkKIHRyeToKICAgICBmcm9tIF90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgX3RocmVhZF9hbGxvY2F0ZV9sb2NrCi1leGNlcHQ6CitleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZnJvbSBfZHVtbXlfdGhyZWFkIGltcG9ydCBhbGxvY2F0ZV9sb2NrIGFzIF90aHJlYWRfYWxsb2NhdGVfbG9jawogCiBfX2FsbF9fID0gW10KZGlmZiAtLWdpdCBhL0xpYi9hYmMucHkgYi9MaWIvYWJjLnB5CmluZGV4IDA5Nzc4ZTguLjAzNThhNDYgMTAwNjQ0Ci0tLSBhL0xpYi9hYmMucHkKKysrIGIvTGliL2FiYy5weQpAQCAtNSw2ICs1LDcgQEAKIAogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldAogCisKIGRlZiBhYnN0cmFjdG1ldGhvZChmdW5jb2JqKToKICAgICAiIiJBIGRlY29yYXRvciBpbmRpY2F0aW5nIGFic3RyYWN0IG1ldGhvZHMuCiAKQEAgLTEyNCw2ICsxMjUsOCBAQAogICAgICMgQSBnbG9iYWwgY291bnRlciB0aGF0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIGNsYXNzIGlzCiAgICAgIyByZWdpc3RlcmVkIGFzIGEgdmlydHVhbCBzdWJjbGFzcyBvZiBhbnl0aGluZy4gIEl0IGZvcmNlcyB0aGUKICAgICAjIG5lZ2F0aXZlIGNhY2hlIHRvIGJlIGNsZWFyZWQgYmVmb3JlIGl0cyBuZXh0IHVzZS4KKyAgICAjIE5vdGU6IHRoaXMgY291bnRlciBpcyBwcml2YXRlLiBVc2UgYGFiYy5nZXRfY2FjaGVfdG9rZW4oKWAgZm9yCisgICAgIyAgICAgICBleHRlcm5hbCBjb2RlLgogICAgIF9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIgPSAwCiAKICAgICBkZWYgX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKToKQEAgLTIyNiwzICsyMjksMjAgQEAKICAgICAgICAgIyBObyBkaWNlOyB1cGRhdGUgbmVnYXRpdmUgY2FjaGUKICAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUuYWRkKHN1YmNsYXNzKQogICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBBQkMobWV0YWNsYXNzPUFCQ01ldGEpOgorICAgICIiIkhlbHBlciBjbGFzcyB0aGF0IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSBhbiBBQkMgdXNpbmcKKyAgICBpbmhlcml0YW5jZS4KKyAgICAiIiIKKyAgICBwYXNzCisKKworZGVmIGdldF9jYWNoZV90b2tlbigpOgorICAgICIiIlJldHVybnMgdGhlIGN1cnJlbnQgQUJDIGNhY2hlIHRva2VuLgorCisgICAgVGhlIHRva2VuIGlzIGFuIG9wYXF1ZSBvYmplY3QgKHN1cHBvcnRpbmcgZXF1YWxpdHkgdGVzdGluZykgaWRlbnRpZnlpbmcgdGhlCisgICAgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBBQkMgY2FjaGUgZm9yIHZpcnR1YWwgc3ViY2xhc3Nlcy4gVGhlIHRva2VuIGNoYW5nZXMKKyAgICB3aXRoIGV2ZXJ5IGNhbGwgdG8gYGByZWdpc3RlcigpYGAgb24gYW55IEFCQy4KKyAgICAiIiIKKyAgICByZXR1cm4gQUJDTWV0YS5fYWJjX2ludmFsaWRhdGlvbl9jb3VudGVyCmRpZmYgLS1naXQgYS9MaWIvYWlmYy5weSBiL0xpYi9haWZjLnB5CmluZGV4IGRiMDkyNGEuLjllNjRkZTkgMTAwNjQ0Ci0tLSBhL0xpYi9haWZjLnB5CisrKyBiL0xpYi9haWZjLnB5CkBAIC02OSw3ICs2OSw3IEBACiAgIGdldGNvbXB0eXBlKCkgICAtLSByZXR1cm5zIGNvbXByZXNzaW9uIHR5cGUgKCdOT05FJyBmb3IgQUlGRiBmaWxlcykKICAgZ2V0Y29tcG5hbWUoKSAgIC0tIHJldHVybnMgaHVtYW4tcmVhZGFibGUgdmVyc2lvbiBvZgogICAgICAgICAgICAgIGNvbXByZXNzaW9uIHR5cGUgKCdub3QgY29tcHJlc3NlZCcgZm9yIEFJRkYgZmlsZXMpCi0gIGdldHBhcmFtcygpIC0tIHJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKKyAgZ2V0cGFyYW1zKCkgLS0gcmV0dXJucyBhIG5hbWVkdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCiAgICAgICAgICAgICAgYWJvdmUgaW4gdGhlIGFib3ZlIG9yZGVyCiAgIGdldG1hcmtlcnMoKSAgICAtLSBnZXQgdGhlIGxpc3Qgb2YgbWFya3MgaW4gdGhlIGF1ZGlvIGZpbGUgb3IgTm9uZQogICAgICAgICAgICAgIGlmIHRoZXJlIGFyZSBubyBtYXJrcwpAQCAtMjUyLDYgKzI1MiwxMSBAQAogICAgIF93cml0ZV91bG9uZyhmLCBsb21hbnQpCiAKIGZyb20gY2h1bmsgaW1wb3J0IENodW5rCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK19haWZjX3BhcmFtcyA9IG5hbWVkdHVwbGUoJ19haWZjX3BhcmFtcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICduY2hhbm5lbHMgc2FtcHdpZHRoIGZyYW1lcmF0ZSBuZnJhbWVzIGNvbXB0eXBlIGNvbXBuYW1lJykKKwogCiBjbGFzcyBBaWZjX3JlYWQ6CiAgICAgIyBWYXJpYWJsZXMgdXNlZCBpbiB0aGlzIGNsYXNzOgpAQCAtMzM0LDYgKzMzOSwxMiBAQAogICAgICAgICAjIGVsc2UsIGFzc3VtZSBpdCBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0IGFscmVhZHkKICAgICAgICAgc2VsZi5pbml0ZnAoZikKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTM3Miw5ICszODMsOSBAQAogIyMgICAgICByZXR1cm4gc2VsZi5fdmVyc2lvbgogCiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksIFwKLSAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF9haWZjX3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIGdldG1hcmtlcnMoc2VsZik6CiAgICAgICAgIGlmIGxlbihzZWxmLl9tYXJrZXJzKSA9PSAwOgpAQCAtNTUxLDYgKzU2MiwxMiBAQAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTY0NCw4ICs2NjEsOCBAQAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9uY2hhbm5lbHMgb3Igbm90IHNlbGYuX3NhbXB3aWR0aCBvciBub3Qgc2VsZi5fZnJhbWVyYXRlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ25vdCBhbGwgcGFyYW1ldGVycyBzZXQnKQotICAgICAgICByZXR1cm4gc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwgXAotICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUKKyAgICAgICAgcmV0dXJuIF9haWZjX3BhcmFtcyhzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZSkKIAogICAgIGRlZiBzZXRtYXJrKHNlbGYsIGlkLCBwb3MsIG5hbWUpOgogICAgICAgICBpZiBpZCA8PSAwOgpAQCAtNjc1LDYgKzY5Miw4IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbihsZW4oZGF0YSkpCiAgICAgICAgIG5mcmFtZXMgPSBsZW4oZGF0YSkgLy8gKHNlbGYuX3NhbXB3aWR0aCAqIHNlbGYuX25jaGFubmVscykKICAgICAgICAgaWYgc2VsZi5fY29udmVydDoKQEAgLTg3OCw4ICs4OTcsNyBAQAogICAgIGlmIG5vdCBzeXMuYXJndlsxOl06CiAgICAgICAgIHN5cy5hcmd2LmFwcGVuZCgnL3Vzci9kZW1vcy9kYXRhL2F1ZGlvL2JhY2guYWlmZicpCiAgICAgZm4gPSBzeXMuYXJndlsxXQotICAgIGYgPSBvcGVuKGZuLCAncicpCi0gICAgdHJ5OgorICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgogICAgICAgICBwcmludCgiUmVhZGluZyIsIGZuKQogICAgICAgICBwcmludCgibmNoYW5uZWxzID0iLCBmLmdldG5jaGFubmVscygpKQogICAgICAgICBwcmludCgibmZyYW1lcyAgID0iLCBmLmdldG5mcmFtZXMoKSkKQEAgLTg5MCwxNiArOTA4LDExIEBACiAgICAgICAgIGlmIHN5cy5hcmd2WzI6XToKICAgICAgICAgICAgIGduID0gc3lzLmFyZ3ZbMl0KICAgICAgICAgICAgIHByaW50KCJXcml0aW5nIiwgZ24pCi0gICAgICAgICAgICBnID0gb3BlbihnbiwgJ3cnKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGduLCAndycpIGFzIGc6CiAgICAgICAgICAgICAgICAgZy5zZXRwYXJhbXMoZi5nZXRwYXJhbXMoKSkKICAgICAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkZnJhbWVzKDEwMjQpCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgZy53cml0ZWZyYW1lcyhkYXRhKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBnLmNsb3NlKCkKICAgICAgICAgICAgIHByaW50KCJEb25lLiIpCi0gICAgZmluYWxseToKLSAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvYXJncGFyc2UucHkgYi9MaWIvYXJncGFyc2UucHkKaW5kZXggYmMyYmExMy4uODM4NzhiMSAxMDA2NDQKLS0tIGEvTGliL2FyZ3BhcnNlLnB5CisrKyBiL0xpYi9hcmdwYXJzZS5weQpAQCAtNjA4LDggKzYwOCw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9pbmRlbnQoKQotICAgICAgICAgICAgZm9yIHN1YmFjdGlvbiBpbiBnZXRfc3ViYWN0aW9ucygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHN1YmFjdGlvbgorICAgICAgICAgICAgeWllbGQgZnJvbSBnZXRfc3ViYWN0aW9ucygpCiAgICAgICAgICAgICBzZWxmLl9kZWRlbnQoKQogCiAgICAgZGVmIF9zcGxpdF9saW5lcyhzZWxmLCB0ZXh0LCB3aWR0aCk6CkBAIC0xMDQwLDcgKzEwMzksOCBAQAogICAgICAgICAgICAgdmVyc2lvbiA9IHBhcnNlci52ZXJzaW9uCiAgICAgICAgIGZvcm1hdHRlciA9IHBhcnNlci5fZ2V0X2Zvcm1hdHRlcigpCiAgICAgICAgIGZvcm1hdHRlci5hZGRfdGV4dCh2ZXJzaW9uKQotICAgICAgICBwYXJzZXIuZXhpdChtZXNzYWdlPWZvcm1hdHRlci5mb3JtYXRfaGVscCgpKQorICAgICAgICBwYXJzZXIuX3ByaW50X21lc3NhZ2UoZm9ybWF0dGVyLmZvcm1hdF9oZWxwKCksIF9zeXMuc3Rkb3V0KQorICAgICAgICBwYXJzZXIuZXhpdCgpCiAKIAogY2xhc3MgX1N1YlBhcnNlcnNBY3Rpb24oQWN0aW9uKToKQEAgLTExNDMsMTEgKzExNDMsMTcgQEAKICAgICAgICAgICAgIHNhbWUgdmFsdWVzIGFzIHRoZSBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KICAgICAgICAgLSBidWZzaXplIC0tIFRoZSBmaWxlJ3MgZGVzaXJlZCBidWZmZXIgc2l6ZS4gQWNjZXB0cyB0aGUgc2FtZSB2YWx1ZXMgYXMKICAgICAgICAgICAgIHRoZSBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KKyAgICAgICAgLSBlbmNvZGluZyAtLSBUaGUgZmlsZSdzIGVuY29kaW5nLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUKKyAgICAgICAgICAgIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICAgICAtIGVycm9ycyAtLSBBIHN0cmluZyBpbmRpY2F0aW5nIGhvdyBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZXJyb3JzIGFyZSB0bworICAgICAgICAgICAgYmUgaGFuZGxlZC4gQWNjZXB0cyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZT0ncicsIGJ1ZnNpemU9LTEpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlPSdyJywgYnVmc2l6ZT0tMSwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpOgogICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQogICAgICAgICBzZWxmLl9idWZzaXplID0gYnVmc2l6ZQorICAgICAgICBzZWxmLl9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgICAgIHNlbGYuX2Vycm9ycyA9IGVycm9ycwogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHN0cmluZyk6CiAgICAgICAgICMgdGhlIHNwZWNpYWwgYXJndW1lbnQgIi0iIG1lYW5zIHN5cy5zdGR7aW4sb3V0fQpAQCAtMTE2MiwxNCArMTE2OCwxOCBAQAogCiAgICAgICAgICMgYWxsIG90aGVyIGFyZ3VtZW50cyBhcmUgdXNlZCBhcyBmaWxlIG5hbWVzCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBvcGVuKHN0cmluZywgc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJldHVybiBvcGVuKHN0cmluZywgc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZSwgc2VsZi5fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvcnMpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBtZXNzYWdlID0gXygiY2FuJ3Qgb3BlbiAnJXMnOiAlcyIpCiAgICAgICAgICAgICByYWlzZSBBcmd1bWVudFR5cGVFcnJvcihtZXNzYWdlICUgKHN0cmluZywgZSkpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIGFyZ3MgPSBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplCi0gICAgICAgIGFyZ3Nfc3RyID0gJywgJy5qb2luKHJlcHIoYXJnKSBmb3IgYXJnIGluIGFyZ3MgaWYgYXJnICE9IC0xKQorICAgICAgICBrd2FyZ3MgPSBbKCdlbmNvZGluZycsIHNlbGYuX2VuY29kaW5nKSwgKCdlcnJvcnMnLCBzZWxmLl9lcnJvcnMpXQorICAgICAgICBhcmdzX3N0ciA9ICcsICcuam9pbihbcmVwcihhcmcpIGZvciBhcmcgaW4gYXJncyBpZiBhcmcgIT0gLTFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyclcz0lcicgJSAoa3csIGFyZykgZm9yIGt3LCBhcmcgaW4ga3dhcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhcmcgaXMgbm90IE5vbmVdKQogICAgICAgICByZXR1cm4gJyVzKCVzKScgJSAodHlwZShzZWxmKS5fX25hbWVfXywgYXJnc19zdHIpCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMTg4LDkgKzExOTgsMTMgQEAKICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZSwga3dhcmdzW25hbWVdKQogCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBOYW1lc3BhY2UpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIHJldHVybiB2YXJzKHNlbGYpID09IHZhcnMob3RoZXIpCiAKICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVzcGFjZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKQEAgLTIwMDMsMTcgKzIwMTcsMTQgQEAKICAgICAgICAgICAgICMgcmVwbGFjZSBhcmd1bWVudHMgcmVmZXJlbmNpbmcgZmlsZXMgd2l0aCB0aGUgZmlsZSBjb250ZW50CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlID0gb3Blbihhcmdfc3RyaW5nWzE6XSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oYXJnX3N0cmluZ1sxOl0pIGFzIGFyZ3NfZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gW10KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmdfbGluZSBpbiBhcmdzX2ZpbGUucmVhZCgpLnNwbGl0bGluZXMoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHNlbGYuY29udmVydF9hcmdfbGluZV90b19hcmdzKGFyZ19saW5lKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKGFyZykKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gc2VsZi5fcmVhZF9hcmdzX2Zyb21fZmlsZXMoYXJnX3N0cmluZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJnX3N0cmluZ3MuZXh0ZW5kKGFyZ19zdHJpbmdzKQotICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgZXJyID0gX3N5cy5leGNfaW5mbygpWzFdCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCiAKZGlmZiAtLWdpdCBhL0xpYi9hc3QucHkgYi9MaWIvYXN0LnB5CmluZGV4IDEzZjU5ZjkuLjAyYzNiMjggMTAwNjQ0Ci0tLSBhL0xpYi9hc3QucHkKKysrIGIvTGliL2FzdC5weQpAQCAtNDIsNyArNDIsNiBAQAogICAgIFB5dGhvbiBsaXRlcmFsIHN0cnVjdHVyZXM6IHN0cmluZ3MsIGJ5dGVzLCBudW1iZXJzLCB0dXBsZXMsIGxpc3RzLCBkaWN0cywKICAgICBzZXRzLCBib29sZWFucywgYW5kIE5vbmUuCiAgICAgIiIiCi0gICAgX3NhZmVfbmFtZXMgPSB7J05vbmUnOiBOb25lLCAnVHJ1ZSc6IFRydWUsICdGYWxzZSc6IEZhbHNlfQogICAgIGlmIGlzaW5zdGFuY2Uobm9kZV9vcl9zdHJpbmcsIHN0cik6CiAgICAgICAgIG5vZGVfb3Jfc3RyaW5nID0gcGFyc2Uobm9kZV9vcl9zdHJpbmcsIG1vZGU9J2V2YWwnKQogICAgIGlmIGlzaW5zdGFuY2Uobm9kZV9vcl9zdHJpbmcsIEV4cHJlc3Npb24pOgpAQCAtNjEsOSArNjAsOCBAQAogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgRGljdCk6CiAgICAgICAgICAgICByZXR1cm4gZGljdCgoX2NvbnZlcnQoayksIF9jb252ZXJ0KHYpKSBmb3IgaywgdgogICAgICAgICAgICAgICAgICAgICAgICAgaW4gemlwKG5vZGUua2V5cywgbm9kZS52YWx1ZXMpKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZSk6Ci0gICAgICAgICAgICBpZiBub2RlLmlkIGluIF9zYWZlX25hbWVzOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2FmZV9uYW1lc1tub2RlLmlkXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZUNvbnN0YW50KToKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBVbmFyeU9wKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcCwgKFVBZGQsIFVTdWIpKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcGVyYW5kLCAoTnVtLCBVbmFyeU9wLCBCaW5PcCkpOgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaGF0LnB5IGIvTGliL2FzeW5jaGF0LnB5CmluZGV4IGVlYTM0MTguLjE0YzE1MmYgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY2hhdC5weQorKysgYi9MaWIvYXN5bmNoYXQucHkKQEAgLTQ1LDI3ICs0NSwyNiBAQAogbWV0aG9kKSB1cCB0byB0aGUgdGVybWluYXRvciwgYW5kIHRoZW4gY29udHJvbCB3aWxsIGJlIHJldHVybmVkIHRvCiB5b3UgLSBieSBjYWxsaW5nIHlvdXIgc2VsZi5mb3VuZF90ZXJtaW5hdG9yKCkgbWV0aG9kLgogIiIiCi1pbXBvcnQgc29ja2V0CiBpbXBvcnQgYXN5bmNvcmUKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiAKIAotY2xhc3MgYXN5bmNfY2hhdCAoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CitjbGFzcyBhc3luY19jaGF0KGFzeW5jb3JlLmRpc3BhdGNoZXIpOgogICAgICIiIlRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuICBZb3UgbXVzdCBkZXJpdmUgZnJvbSB0aGlzIGNsYXNzLCBhbmQgYWRkCiAgICAgdGhlIHR3byBtZXRob2RzIGNvbGxlY3RfaW5jb21pbmdfZGF0YSgpIGFuZCBmb3VuZF90ZXJtaW5hdG9yKCkiIiIKIAogICAgICMgdGhlc2UgYXJlIG92ZXJyaWRhYmxlIGRlZmF1bHRzCiAKLSAgICBhY19pbl9idWZmZXJfc2l6ZSAgICAgICA9IDQwOTYKLSAgICBhY19vdXRfYnVmZmVyX3NpemUgICAgICA9IDQwOTYKKyAgICBhY19pbl9idWZmZXJfc2l6ZSA9IDY1NTM2CisgICAgYWNfb3V0X2J1ZmZlcl9zaXplID0gNjU1MzYKIAogICAgICMgd2UgZG9uJ3Qgd2FudCB0byBlbmFibGUgdGhlIHVzZSBvZiBlbmNvZGluZyBieSBkZWZhdWx0LCBiZWNhdXNlIHRoYXQgaXMgYQogICAgICMgc2lnbiBvZiBhbiBhcHBsaWNhdGlvbiBidWcgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHBhc3Mgc2lsZW50bHkKIAotICAgIHVzZV9lbmNvZGluZyAgICAgICAgICAgID0gMAotICAgIGVuY29kaW5nICAgICAgICAgICAgICAgID0gJ2xhdGluLTEnCisgICAgdXNlX2VuY29kaW5nID0gMAorICAgIGVuY29kaW5nID0gJ2xhdGluLTEnCiAKLSAgICBkZWYgX19pbml0X18gKHNlbGYsIHNvY2s9Tm9uZSwgbWFwPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrPU5vbmUsIG1hcD1Ob25lKToKICAgICAgICAgIyBmb3Igc3RyaW5nIHRlcm1pbmF0b3IgbWF0Y2hpbmcKICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBiJycKIApAQCAtNzcsNyArNzYsNyBAQAogICAgICAgICAjIHdlIHRvc3MgdGhlIHVzZSBvZiB0aGUgInNpbXBsZSBwcm9kdWNlciIgYW5kIHJlcGxhY2UgaXQgd2l0aAogICAgICAgICAjIGEgcHVyZSBkZXF1ZSwgd2hpY2ggdGhlIG9yaWdpbmFsIGZpZm8gd2FzIGEgd3JhcHBpbmcgb2YKICAgICAgICAgc2VsZi5wcm9kdWNlcl9maWZvID0gZGVxdWUoKQotICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fIChzZWxmLCBzb2NrLCBtYXApCisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgc29jaywgbWFwKQogCiAgICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigibXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzcyIpCkBAIC05MywxMyArOTIsMTggQEAKICAgICBkZWYgZm91bmRfdGVybWluYXRvcihzZWxmKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigibXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzcyIpCiAKLSAgICBkZWYgc2V0X3Rlcm1pbmF0b3IgKHNlbGYsIHRlcm0pOgotICAgICAgICAiU2V0IHRoZSBpbnB1dCBkZWxpbWl0ZXIuICBDYW4gYmUgYSBmaXhlZCBzdHJpbmcgb2YgYW55IGxlbmd0aCwgYW4gaW50ZWdlciwgb3IgTm9uZSIKKyAgICBkZWYgc2V0X3Rlcm1pbmF0b3Ioc2VsZiwgdGVybSk6CisgICAgICAgICIiIlNldCB0aGUgaW5wdXQgZGVsaW1pdGVyLgorCisgICAgICAgIENhbiBiZSBhIGZpeGVkIHN0cmluZyBvZiBhbnkgbGVuZ3RoLCBhbiBpbnRlZ2VyLCBvciBOb25lLgorICAgICAgICAiIiIKICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXJtLCBzdHIpIGFuZCBzZWxmLnVzZV9lbmNvZGluZzoKICAgICAgICAgICAgIHRlcm0gPSBieXRlcyh0ZXJtLCBzZWxmLmVuY29kaW5nKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodGVybSwgaW50KSBhbmQgdGVybSA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIG11c3QgYmUgcG9zaXRpdmUnKQogICAgICAgICBzZWxmLnRlcm1pbmF0b3IgPSB0ZXJtCiAKLSAgICBkZWYgZ2V0X3Rlcm1pbmF0b3IgKHNlbGYpOgorICAgIGRlZiBnZXRfdGVybWluYXRvcihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYudGVybWluYXRvcgogCiAgICAgIyBncmFiIHNvbWUgbW9yZSBkYXRhIGZyb20gdGhlIHNvY2tldCwKQEAgLTEwNywxMSArMTExLDEzIEBACiAgICAgIyBjaGVjayBmb3IgdGhlIHRlcm1pbmF0b3IsCiAgICAgIyBpZiBmb3VuZCwgdHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS4KIAotICAgIGRlZiBoYW5kbGVfcmVhZCAoc2VsZik6CisgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlY3YgKHNlbGYuYWNfaW5fYnVmZmVyX3NpemUpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdihzZWxmLmFjX2luX2J1ZmZlcl9zaXplKQorICAgICAgICBleGNlcHQgQmxvY2tpbmdJT0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybgogCkBAIC0xMjksMTcgKzEzNSwxNyBAQAogICAgICAgICAgICAgdGVybWluYXRvciA9IHNlbGYuZ2V0X3Rlcm1pbmF0b3IoKQogICAgICAgICAgICAgaWYgbm90IHRlcm1pbmF0b3I6CiAgICAgICAgICAgICAgICAgIyBubyB0ZXJtaW5hdG9yLCBjb2xsZWN0IGl0IGFsbAotICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhIChzZWxmLmFjX2luX2J1ZmZlcikKKyAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLmFjX2luX2J1ZmZlcikKICAgICAgICAgICAgICAgICBzZWxmLmFjX2luX2J1ZmZlciA9IGInJwogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRlcm1pbmF0b3IsIGludCk6CiAgICAgICAgICAgICAgICAgIyBudW1lcmljIHRlcm1pbmF0b3IKICAgICAgICAgICAgICAgICBuID0gdGVybWluYXRvcgogICAgICAgICAgICAgICAgIGlmIGxiIDwgbjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEgKHNlbGYuYWNfaW5fYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLmFjX2luX2J1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBiJycKICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXJtaW5hdG9yID0gc2VsZi50ZXJtaW5hdG9yIC0gbGIKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YSAoc2VsZi5hY19pbl9idWZmZXJbOm5dKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLmFjX2luX2J1ZmZlcls6bl0pCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWNfaW5fYnVmZmVyID0gc2VsZi5hY19pbl9idWZmZXJbbjpdCiAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVybWluYXRvciA9IDAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3VuZF90ZXJtaW5hdG9yKCkKQEAgLTE1NiwzMiArMTYyLDM3IEBACiAgICAgICAgICAgICAgICAgaWYgaW5kZXggIT0gLTE6CiAgICAgICAgICAgICAgICAgICAgICMgd2UgZm91bmQgdGhlIHRlcm1pbmF0b3IKICAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXggPiAwOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBkb24ndCBib3RoZXIgcmVwb3J0aW5nIHRoZSBlbXB0eSBzdHJpbmcgKHNvdXJjZSBvZiBzdWJ0bGUgYnVncykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhIChzZWxmLmFjX2luX2J1ZmZlcls6aW5kZXhdKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBkb24ndCBib3RoZXIgcmVwb3J0aW5nIHRoZSBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICMgKHNvdXJjZSBvZiBzdWJ0bGUgYnVncykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYuYWNfaW5fYnVmZmVyWzppbmRleF0pCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWNfaW5fYnVmZmVyID0gc2VsZi5hY19pbl9idWZmZXJbaW5kZXgrdGVybWluYXRvcl9sZW46XQotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgZG9lcyB0aGUgUmlnaHQgVGhpbmcgaWYgdGhlIHRlcm1pbmF0b3IgaXMgY2hhbmdlZCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgZG9lcyB0aGUgUmlnaHQgVGhpbmcgaWYgdGhlIHRlcm1pbmF0b3IKKyAgICAgICAgICAgICAgICAgICAgIyBpcyBjaGFuZ2VkIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm91bmRfdGVybWluYXRvcigpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgYSBwcmVmaXggb2YgdGhlIHRlcm1pbmF0b3IKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBmaW5kX3ByZWZpeF9hdF9lbmQgKHNlbGYuYWNfaW5fYnVmZmVyLCB0ZXJtaW5hdG9yKQorICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGZpbmRfcHJlZml4X2F0X2VuZChzZWxmLmFjX2luX2J1ZmZlciwgdGVybWluYXRvcikKICAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXg6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbmRleCAhPSBsYjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIGZvdW5kIGEgcHJlZml4LCBjb2xsZWN0IHVwIHRvIHRoZSBwcmVmaXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YSAoc2VsZi5hY19pbl9idWZmZXJbOi1pbmRleF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZi5hY19pbl9idWZmZXJbOi1pbmRleF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBzZWxmLmFjX2luX2J1ZmZlclstaW5kZXg6XQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gcHJlZml4LCBjb2xsZWN0IGl0IGFsbAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEgKHNlbGYuYWNfaW5fYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZi5hY19pbl9idWZmZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFjX2luX2J1ZmZlciA9IGInJwogCi0gICAgZGVmIGhhbmRsZV93cml0ZSAoc2VsZik6CisgICAgZGVmIGhhbmRsZV93cml0ZShzZWxmKToKICAgICAgICAgc2VsZi5pbml0aWF0ZV9zZW5kKCkKIAotICAgIGRlZiBoYW5kbGVfY2xvc2UgKHNlbGYpOgorICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQogCi0gICAgZGVmIHB1c2ggKHNlbGYsIGRhdGEpOgorICAgIGRlZiBwdXNoKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKICAgICAgICAgc2FicyA9IHNlbGYuYWNfb3V0X2J1ZmZlcl9zaXplCiAgICAgICAgIGlmIGxlbihkYXRhKSA+IHNhYnM6CiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YSksIHNhYnMpOgpAQCAtMTkwLDExICsyMDEsMTEgQEAKICAgICAgICAgICAgIHNlbGYucHJvZHVjZXJfZmlmby5hcHBlbmQoZGF0YSkKICAgICAgICAgc2VsZi5pbml0aWF0ZV9zZW5kKCkKIAotICAgIGRlZiBwdXNoX3dpdGhfcHJvZHVjZXIgKHNlbGYsIHByb2R1Y2VyKToKKyAgICBkZWYgcHVzaF93aXRoX3Byb2R1Y2VyKHNlbGYsIHByb2R1Y2VyKToKICAgICAgICAgc2VsZi5wcm9kdWNlcl9maWZvLmFwcGVuZChwcm9kdWNlcikKICAgICAgICAgc2VsZi5pbml0aWF0ZV9zZW5kKCkKIAotICAgIGRlZiByZWFkYWJsZSAoc2VsZik6CisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICAicHJlZGljYXRlIGZvciBpbmNsdXNpb24gaW4gdGhlIHJlYWRhYmxlIGZvciBzZWxlY3QoKSIKICAgICAgICAgIyBjYW5ub3QgdXNlIHRoZSBvbGQgcHJlZGljYXRlLCBpdCB2aW9sYXRlcyB0aGUgY2xhaW0gb2YgdGhlCiAgICAgICAgICMgc2V0X3Rlcm1pbmF0b3IgbWV0aG9kLgpAQCAtMjAyLDExICsyMTMsMTEgQEAKICAgICAgICAgIyByZXR1cm4gKGxlbihzZWxmLmFjX2luX2J1ZmZlcikgPD0gc2VsZi5hY19pbl9idWZmZXJfc2l6ZSkKICAgICAgICAgcmV0dXJuIDEKIAotICAgIGRlZiB3cml0YWJsZSAoc2VsZik6CisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgogICAgICAgICAicHJlZGljYXRlIGZvciBpbmNsdXNpb24gaW4gdGhlIHdyaXRhYmxlIGZvciBzZWxlY3QoKSIKICAgICAgICAgcmV0dXJuIHNlbGYucHJvZHVjZXJfZmlmbyBvciAobm90IHNlbGYuY29ubmVjdGVkKQogCi0gICAgZGVmIGNsb3NlX3doZW5fZG9uZSAoc2VsZik6CisgICAgZGVmIGNsb3NlX3doZW5fZG9uZShzZWxmKToKICAgICAgICAgImF1dG9tYXRpY2FsbHkgY2xvc2UgdGhpcyBjaGFubmVsIG9uY2UgdGhlIG91dGdvaW5nIHF1ZXVlIGlzIGVtcHR5IgogICAgICAgICBzZWxmLnByb2R1Y2VyX2ZpZm8uYXBwZW5kKE5vbmUpCiAKQEAgLTIxNywxMCArMjI4LDggQEAKICAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKICAgICAgICAgICAgICAgICBkZWwgc2VsZi5wcm9kdWNlcl9maWZvWzBdCiAgICAgICAgICAgICAgICAgaWYgZmlyc3QgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgIyMgcHJpbnQoImZpcnN0IGlzIE5vbmUiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICMjIHByaW50KCJmaXJzdCBpcyBub3QgTm9uZSIpCiAKICAgICAgICAgICAgICMgaGFuZGxlIGNsYXNzaWMgcHJvZHVjZXIgYmVoYXZpb3IKICAgICAgICAgICAgIG9icyA9IHNlbGYuYWNfb3V0X2J1ZmZlcl9zaXplCkBAIC0yNDAsNyArMjQ5LDcgQEAKICAgICAgICAgICAgICMgc2VuZCB0aGUgZGF0YQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG51bV9zZW50ID0gc2VsZi5zZW5kKGRhdGEpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IoKQogICAgICAgICAgICAgICAgIHJldHVybgogCkBAIC0yNTIsMjAgKzI2MSwyMSBAQAogICAgICAgICAgICAgIyB3ZSB0cmllZCB0byBzZW5kIHNvbWUgYWN0dWFsIGRhdGEKICAgICAgICAgICAgIHJldHVybgogCi0gICAgZGVmIGRpc2NhcmRfYnVmZmVycyAoc2VsZik6CisgICAgZGVmIGRpc2NhcmRfYnVmZmVycyhzZWxmKToKICAgICAgICAgIyBFbWVyZ2VuY2llcyBvbmx5IQogICAgICAgICBzZWxmLmFjX2luX2J1ZmZlciA9IGInJwogICAgICAgICBkZWwgc2VsZi5pbmNvbWluZ1s6XQogICAgICAgICBzZWxmLnByb2R1Y2VyX2ZpZm8uY2xlYXIoKQogCisKIGNsYXNzIHNpbXBsZV9wcm9kdWNlcjoKIAotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgZGF0YSwgYnVmZmVyX3NpemU9NTEyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgYnVmZmVyX3NpemU9NTEyKToKICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQogICAgICAgICBzZWxmLmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUKIAotICAgIGRlZiBtb3JlIChzZWxmKToKLSAgICAgICAgaWYgbGVuIChzZWxmLmRhdGEpID4gc2VsZi5idWZmZXJfc2l6ZToKKyAgICBkZWYgbW9yZShzZWxmKToKKyAgICAgICAgaWYgbGVuKHNlbGYuZGF0YSkgPiBzZWxmLmJ1ZmZlcl9zaXplOgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5kYXRhWzpzZWxmLmJ1ZmZlcl9zaXplXQogICAgICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhW3NlbGYuYnVmZmVyX3NpemU6XQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdApAQCAtMjc0LDM4ICsyODQsNDAgQEAKICAgICAgICAgICAgIHNlbGYuZGF0YSA9IGInJwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCisKIGNsYXNzIGZpZm86Ci0gICAgZGVmIF9faW5pdF9fIChzZWxmLCBsaXN0PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaXN0PU5vbmUpOgogICAgICAgICBpZiBub3QgbGlzdDoKICAgICAgICAgICAgIHNlbGYubGlzdCA9IGRlcXVlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYubGlzdCA9IGRlcXVlKGxpc3QpCiAKLSAgICBkZWYgX19sZW5fXyAoc2VsZik6CisgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5saXN0KQogCi0gICAgZGVmIGlzX2VtcHR5IChzZWxmKToKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5saXN0CiAKLSAgICBkZWYgZmlyc3QgKHNlbGYpOgorICAgIGRlZiBmaXJzdChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubGlzdFswXQogCi0gICAgZGVmIHB1c2ggKHNlbGYsIGRhdGEpOgorICAgIGRlZiBwdXNoKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmxpc3QuYXBwZW5kKGRhdGEpCiAKLSAgICBkZWYgcG9wIChzZWxmKToKKyAgICBkZWYgcG9wKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmxpc3Q6CiAgICAgICAgICAgICByZXR1cm4gKDEsIHNlbGYubGlzdC5wb3BsZWZ0KCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gKDAsIE5vbmUpCiAKKwogIyBHaXZlbiAnaGF5c3RhY2snLCBzZWUgaWYgYW55IHByZWZpeCBvZiAnbmVlZGxlJyBpcyBhdCBpdHMgZW5kLiAgVGhpcwogIyBhc3N1bWVzIGFuIGV4YWN0IG1hdGNoIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZC4gIFJldHVybiB0aGUgbnVtYmVyIG9mCiAjIGNoYXJhY3RlcnMgbWF0Y2hlZC4KICMgZm9yIGV4YW1wbGU6Ci0jIGZfcF9hX2UgKCJxd2VydHlcciIsICJcclxuIikgPT4gMQotIyBmX3BfYV9lICgicXdlcnR5ZGtqZiIsICJcclxuIikgPT4gMAotIyBmX3BfYV9lICgicXdlcnR5XHJcbiIsICJcclxuIikgPT4gPHVuZGVmaW5lZD4KKyMgZl9wX2FfZSgicXdlcnR5XHIiLCAiXHJcbiIpID0+IDEKKyMgZl9wX2FfZSgicXdlcnR5ZGtqZiIsICJcclxuIikgPT4gMAorIyBmX3BfYV9lKCJxd2VydHlcclxuIiwgIlxyXG4iKSA9PiA8dW5kZWZpbmVkPgogCiAjIHRoaXMgY291bGQgbWF5YmUgYmUgbWFkZSBmYXN0ZXIgd2l0aCBhIGNvbXB1dGVkIHJlZ2V4PwogIyBbYW5zd2VyOiBubzsgY2lyY2EgUHl0aG9uLTIuMCwgSmFuIDIwMDFdCkBAIC0zMTQsNyArMzI2LDcgQEAKICMgcmU6ICAgICAgICAxMjgyMC9zCiAjIHJlZ2V4OiAgICAgMTQwMzUvcwogCi1kZWYgZmluZF9wcmVmaXhfYXRfZW5kIChoYXlzdGFjaywgbmVlZGxlKToKK2RlZiBmaW5kX3ByZWZpeF9hdF9lbmQoaGF5c3RhY2ssIG5lZWRsZSk6CiAgICAgbCA9IGxlbihuZWVkbGUpIC0gMQogICAgIHdoaWxlIGwgYW5kIG5vdCBoYXlzdGFjay5lbmRzd2l0aChuZWVkbGVbOmxdKToKICAgICAgICAgbCAtPSAxCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9fX2luaXRfXy5weSBiL0xpYi9hc3luY2lvL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTFmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQ4IEBACisiIiJUaGUgYXN5bmNpbyBwYWNrYWdlLCB0cmFja2luZyBQRVAgMzE1Ni4iIiIKKworaW1wb3J0IHN5cworCisjIFRoZSBzZWxlY3RvcnMgbW9kdWxlIGlzIGluIHRoZSBzdGRsaWIgaW4gUHl0aG9uIDMuNCBidXQgbm90IGluIDMuMy4KKyMgRG8gdGhpcyBmaXJzdCwgc28gdGhlIG90aGVyIHN1Ym1vZHVsZXMgY2FuIHVzZSAiZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMiLgorIyBQcmVmZXIgYXN5bmNpby9zZWxlY3RvcnMucHkgb3ZlciB0aGUgc3RkbGliIG9uZSwgYXMgb3VycyBtYXkgYmUgbmV3ZXIuCit0cnk6CisgICAgZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgc2VsZWN0b3JzICAjIFdpbGwgYWxzbyBiZSBleHBvcnRlZC4KKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgIyBTaW1pbGFyIHRoaW5nIGZvciBfb3ZlcmxhcHBlZC4KKyAgICB0cnk6CisgICAgICAgIGZyb20gLiBpbXBvcnQgX292ZXJsYXBwZWQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGltcG9ydCBfb3ZlcmxhcHBlZCAgIyBXaWxsIGFsc28gYmUgZXhwb3J0ZWQuCisKKyMgVGhpcyByZWxpZXMgb24gZWFjaCBvZiB0aGUgc3VibW9kdWxlcyBoYXZpbmcgYW4gX19hbGxfXyB2YXJpYWJsZS4KK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0ICoKK2Zyb20gLmV2ZW50cyBpbXBvcnQgKgorZnJvbSAuZnV0dXJlcyBpbXBvcnQgKgorZnJvbSAubG9ja3MgaW1wb3J0ICoKK2Zyb20gLnByb3RvY29scyBpbXBvcnQgKgorZnJvbSAucXVldWVzIGltcG9ydCAqCitmcm9tIC5zdHJlYW1zIGltcG9ydCAqCitmcm9tIC5zdWJwcm9jZXNzIGltcG9ydCAqCitmcm9tIC50YXNrcyBpbXBvcnQgKgorZnJvbSAudHJhbnNwb3J0cyBpbXBvcnQgKgorCitfX2FsbF9fID0gKGNvcm91dGluZXMuX19hbGxfXyArCisgICAgICAgICAgIGV2ZW50cy5fX2FsbF9fICsKKyAgICAgICAgICAgZnV0dXJlcy5fX2FsbF9fICsKKyAgICAgICAgICAgbG9ja3MuX19hbGxfXyArCisgICAgICAgICAgIHByb3RvY29scy5fX2FsbF9fICsKKyAgICAgICAgICAgcXVldWVzLl9fYWxsX18gKworICAgICAgICAgICBzdHJlYW1zLl9fYWxsX18gKworICAgICAgICAgICBzdWJwcm9jZXNzLl9fYWxsX18gKworICAgICAgICAgICB0YXNrcy5fX2FsbF9fICsKKyAgICAgICAgICAgdHJhbnNwb3J0cy5fX2FsbF9fKQorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfZXZlbnRzIGltcG9ydCAqCisgICAgX19hbGxfXyArPSB3aW5kb3dzX2V2ZW50cy5fX2FsbF9fCitlbHNlOgorICAgIGZyb20gLnVuaXhfZXZlbnRzIGltcG9ydCAqICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBfX2FsbF9fICs9IHVuaXhfZXZlbnRzLl9fYWxsX18KZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxMzI1MAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTA1NSBAQAorIiIiQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBldmVudCBsb29wLgorCitUaGUgZXZlbnQgbG9vcCBjYW4gYmUgYnJva2VuIHVwIGludG8gYSBtdWx0aXBsZXhlciAodGhlIHBhcnQKK3Jlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgdXMgb2YgSS9PIGV2ZW50cykgYW5kIHRoZSBldmVudCBsb29wIHByb3BlciwKK3doaWNoIHdyYXBzIGEgbXVsdGlwbGV4ZXIgd2l0aCBmdW5jdGlvbmFsaXR5IGZvciBzY2hlZHVsaW5nIGNhbGxiYWNrcywKK2ltbWVkaWF0ZWx5IG9yIGF0IGEgZ2l2ZW4gdGltZSBpbiB0aGUgZnV0dXJlLgorCitXaGVuZXZlciBhIHB1YmxpYyBBUEkgdGFrZXMgYSBjYWxsYmFjaywgc3Vic2VxdWVudCBwb3NpdGlvbmFsCithcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGlmL3doZW4gaXQgaXMgY2FsbGVkLiAgVGhpcworYXZvaWRzIHRoZSBwcm9saWZlcmF0aW9uIG9mIHRyaXZpYWwgbGFtYmRhcyBpbXBsZW1lbnRpbmcgY2xvc3VyZXMuCitLZXl3b3JkIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxiYWNrIGFyZSBub3Qgc3VwcG9ydGVkOyB0aGlzIGlzIGEKK2NvbnNjaW91cyBkZXNpZ24gZGVjaXNpb24sIGxlYXZpbmcgdGhlIGRvb3Igb3BlbiBmb3Iga2V5d29yZCBhcmd1bWVudHMKK3RvIG1vZGlmeSB0aGUgbWVhbmluZyBvZiB0aGUgQVBJIGNhbGwgaXRzZWxmLgorIiIiCisKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgaGVhcHEKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBzeXMKKworZnJvbSAuIGltcG9ydCBjb3JvdXRpbmVzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX19hbGxfXyA9IFsnQmFzZUV2ZW50TG9vcCcsICdTZXJ2ZXInXQorCisKKyMgQXJndW1lbnQgZm9yIGRlZmF1bHQgdGhyZWFkIHBvb2wgZXhlY3V0b3IgY3JlYXRpb24uCitfTUFYX1dPUktFUlMgPSA1CisKKworZGVmIF9mb3JtYXRfaGFuZGxlKGhhbmRsZSk6CisgICAgY2IgPSBoYW5kbGUuX2NhbGxiYWNrCisgICAgaWYgaW5zcGVjdC5pc21ldGhvZChjYikgYW5kIGlzaW5zdGFuY2UoY2IuX19zZWxmX18sIHRhc2tzLlRhc2spOgorICAgICAgICAjIGZvcm1hdCB0aGUgdGFzaworICAgICAgICByZXR1cm4gcmVwcihjYi5fX3NlbGZfXykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gc3RyKGhhbmRsZSkKKworCitkZWYgX2Zvcm1hdF9waXBlKGZkKToKKyAgICBpZiBmZCA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgIHJldHVybiAnPHBpcGU+JworICAgIGVsaWYgZmQgPT0gc3VicHJvY2Vzcy5TVERPVVQ6CisgICAgICAgIHJldHVybiAnPHN0ZG91dD4nCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHJlcHIoZmQpCisKKworY2xhc3MgX1N0b3BFcnJvcihCYXNlRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgdG8gc3RvcCB0aGUgZXZlbnQgbG9vcC4iIiIKKworCitkZWYgX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgYWRkcmVzcyk6CisgICAgIyBFbnN1cmUgdGhhdCB0aGUgYWRkcmVzcyBpcyBhbHJlYWR5IHJlc29sdmVkIHRvIGF2b2lkIHRoZSB0cmFwIG9mIGhhbmdpbmcKKyAgICAjIHRoZSBlbnRpcmUgZXZlbnQgbG9vcCB3aGVuIHRoZSBhZGRyZXNzIHJlcXVpcmVzIGRvaW5nIGEgRE5TIGxvb2t1cC4KKyAgICBmYW1pbHkgPSBzb2NrLmZhbWlseQorICAgIGlmIGZhbWlseSA9PSBzb2NrZXQuQUZfSU5FVDoKKyAgICAgICAgaG9zdCwgcG9ydCA9IGFkZHJlc3MKKyAgICBlbGlmIGZhbWlseSA9PSBzb2NrZXQuQUZfSU5FVDY6CisgICAgICAgIGhvc3QsIHBvcnQgPSBhZGRyZXNzWzoyXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybgorCisgICAgdHlwZV9tYXNrID0gMAorICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09DS19OT05CTE9DSycpOgorICAgICAgICB0eXBlX21hc2sgfD0gc29ja2V0LlNPQ0tfTk9OQkxPQ0sKKyAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfQ0xPRVhFQycpOgorICAgICAgICB0eXBlX21hc2sgfD0gc29ja2V0LlNPQ0tfQ0xPRVhFQworICAgICMgVXNlIGdldGFkZHJpbmZvKGZsYWdzPUFJX05VTUVSSUNIT1NUKSB0byBlbnN1cmUgdGhhdCB0aGUgYWRkcmVzcyBpcworICAgICMgYWxyZWFkeSByZXNvbHZlZC4KKyAgICB0cnk6CisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9KHNvY2sudHlwZSAmIH50eXBlX21hc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89c29jay5wcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPXNvY2tldC5BSV9OVU1FUklDSE9TVCkKKyAgICBleGNlcHQgc29ja2V0LmdhaWVycm9yIGFzIGVycjoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYWRkcmVzcyBtdXN0IGJlIHJlc29sdmVkIChJUCBhZGRyZXNzKSwgZ290ICVyOiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChhZGRyZXNzLCBlcnIpKQorCitkZWYgX3JhaXNlX3N0b3BfZXJyb3IoKmFyZ3MpOgorICAgIHJhaXNlIF9TdG9wRXJyb3IKKworCitjbGFzcyBTZXJ2ZXIoZXZlbnRzLkFic3RyYWN0U2VydmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrZXRzKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5zb2NrZXRzID0gc29ja2V0cworICAgICAgICBzZWxmLl9hY3RpdmVfY291bnQgPSAwCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwlcyBzb2NrZXRzPSVyPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuc29ja2V0cykKKworICAgIGRlZiBfYXR0YWNoKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zb2NrZXRzIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYuX2FjdGl2ZV9jb3VudCArPSAxCisKKyAgICBkZWYgX2RldGFjaChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2FjdGl2ZV9jb3VudCA+IDAKKyAgICAgICAgc2VsZi5fYWN0aXZlX2NvdW50IC09IDEKKyAgICAgICAgaWYgc2VsZi5fYWN0aXZlX2NvdW50ID09IDAgYW5kIHNlbGYuc29ja2V0cyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc29ja2V0cyA9IHNlbGYuc29ja2V0cworICAgICAgICBpZiBzb2NrZXRzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5zb2NrZXRzID0gTm9uZQorICAgICAgICBmb3Igc29jayBpbiBzb2NrZXRzOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5fc3RvcF9zZXJ2aW5nKHNvY2spCisgICAgICAgIGlmIHNlbGYuX2FjdGl2ZV9jb3VudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBfd2FrZXVwKHNlbGYpOgorICAgICAgICB3YWl0ZXJzID0gc2VsZi5fd2FpdGVycworICAgICAgICBzZWxmLl93YWl0ZXJzID0gTm9uZQorICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdCh3YWl0ZXIpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNvY2tldHMgaXMgTm9uZSBvciBzZWxmLl93YWl0ZXJzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcChldmVudHMuQWJzdHJhY3RFdmVudExvb3ApOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9yZWFkeSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVkID0gW10KKyAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IE5vbmUKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzID0gMAorICAgICAgICBzZWxmLl9ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY2xvY2tfcmVzb2x1dGlvbiA9IHRpbWUuZ2V0X2Nsb2NrX2luZm8oJ21vbm90b25pYycpLnJlc29sdXRpb24KKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2hhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2RlYnVnID0gKG5vdCBzeXMuZmxhZ3MuaWdub3JlX2Vudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBib29sKG9zLmVudmlyb24uZ2V0KCdQWVRIT05BU1lOQ0lPREVCVUcnKSkpCisgICAgICAgICMgSW4gZGVidWcgbW9kZSwgaWYgdGhlIGV4ZWN1dGlvbiBvZiBhIGNhbGxiYWNrIG9yIGEgc3RlcCBvZiBhIHRhc2sKKyAgICAgICAgIyBleGNlZWQgdGhpcyBkdXJhdGlvbiBpbiBzZWNvbmRzLCB0aGUgc2xvdyBjYWxsYmFjay90YXNrIGlzIGxvZ2dlZC4KKyAgICAgICAgc2VsZi5zbG93X2NhbGxiYWNrX2R1cmF0aW9uID0gMC4xCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzwlcyBydW5uaW5nPSVzIGNsb3NlZD0lcyBkZWJ1Zz0lcz4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuaXNfcnVubmluZygpLAorICAgICAgICAgICAgICAgICAgIHNlbGYuaXNfY2xvc2VkKCksIHNlbGYuZ2V0X2RlYnVnKCkpKQorCisgICAgZGVmIGNyZWF0ZV90YXNrKHNlbGYsIGNvcm8pOgorICAgICAgICAiIiJTY2hlZHVsZSBhIGNvcm91dGluZSBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuIGEgdGFzayBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICB0YXNrID0gdGFza3MuVGFzayhjb3JvLCBsb29wPXNlbGYpCisgICAgICAgIGlmIHRhc2suX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgdGFzay5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgcmV0dXJuIHRhc2sKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBzb2NrZXQgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBTU0wgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz1Ob25lLCB3YWl0ZXI9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBkYXRhZ3JhbSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlYWQgcGlwZSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgd3JpdGUgcGlwZSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIHN1YnByb2Nlc3MgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgICIiIldyaXRlIGEgYnl0ZSB0byBzZWxmLXBpcGUsIHRvIHdha2UgdXAgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLgorCisgICAgICAgIFRoZSBzdWJjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgaW1wbGVtZW50aW5nIHRoZSBzZWxmLXBpcGUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICAiIiJQcm9jZXNzIHNlbGVjdG9yIGV2ZW50cy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9jaGVja19jbG9zZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBpcyBjbG9zZWQnKQorCisgICAgZGVmIHJ1bl9mb3JldmVyKHNlbGYpOgorICAgICAgICAiIiJSdW4gdW50aWwgc3RvcCgpIGlzIGNhbGxlZC4iIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKyAgICAgICAgaWYgc2VsZi5fcnVubmluZzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBpcyBydW5uaW5nLicpCisgICAgICAgIHNlbGYuX3J1bm5pbmcgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9ydW5fb25jZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IF9TdG9wRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9ydW5uaW5nID0gRmFsc2UKKworICAgIGRlZiBydW5fdW50aWxfY29tcGxldGUoc2VsZiwgZnV0dXJlKToKKyAgICAgICAgIiIiUnVuIHVudGlsIHRoZSBGdXR1cmUgaXMgZG9uZS4KKworICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb3JvdXRpbmUsIGl0IGlzIHdyYXBwZWQgaW4gYSBUYXNrLgorCisgICAgICAgIFdBUk5JTkc6IEl0IHdvdWxkIGJlIGRpc2FzdHJvdXMgdG8gY2FsbCBydW5fdW50aWxfY29tcGxldGUoKQorICAgICAgICB3aXRoIHRoZSBzYW1lIGNvcm91dGluZSB0d2ljZSAtLSBpdCB3b3VsZCB3cmFwIGl0IGluIHR3bworICAgICAgICBkaWZmZXJlbnQgVGFza3MgYW5kIHRoYXQgY2FuJ3QgYmUgZ29vZC4KKworICAgICAgICBSZXR1cm4gdGhlIEZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2UgaXRzIGV4Y2VwdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCisKKyAgICAgICAgbmV3X3Rhc2sgPSBub3QgaXNpbnN0YW5jZShmdXR1cmUsIGZ1dHVyZXMuRnV0dXJlKQorICAgICAgICBmdXR1cmUgPSB0YXNrcy5hc3luYyhmdXR1cmUsIGxvb3A9c2VsZikKKyAgICAgICAgaWYgbmV3X3Rhc2s6CisgICAgICAgICAgICAjIEFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgdGhlIGZ1dHVyZSBkaWRuJ3QgY29tcGxldGUsIHNvIHRoZXJlCisgICAgICAgICAgICAjIGlzIG5vIG5lZWQgdG8gbG9nIHRoZSAiZGVzdHJveSBwZW5kaW5nIHRhc2siIG1lc3NhZ2UKKyAgICAgICAgICAgIGZ1dHVyZS5fbG9nX2Rlc3Ryb3lfcGVuZGluZyA9IEZhbHNlCisKKyAgICAgICAgZnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrKF9yYWlzZV9zdG9wX2Vycm9yKQorICAgICAgICBzZWxmLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZnV0dXJlLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9yYWlzZV9zdG9wX2Vycm9yKQorICAgICAgICBpZiBub3QgZnV0dXJlLmRvbmUoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBzdG9wcGVkIGJlZm9yZSBGdXR1cmUgY29tcGxldGVkLicpCisKKyAgICAgICAgcmV0dXJuIGZ1dHVyZS5yZXN1bHQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgcnVubmluZyB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBFdmVyeSBjYWxsYmFjayBzY2hlZHVsZWQgYmVmb3JlIHN0b3AoKSBpcyBjYWxsZWQgd2lsbCBydW4uIENhbGxiYWNrcworICAgICAgICBzY2hlZHVsZWQgYWZ0ZXIgc3RvcCgpIGlzIGNhbGxlZCB3aWxsIG5vdCBydW4uIEhvd2V2ZXIsIHRob3NlIGNhbGxiYWNrcworICAgICAgICB3aWxsIHJ1biBpZiBydW5fZm9yZXZlciBpcyBjYWxsZWQgYWdhaW4gbGF0ZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNhbGxfc29vbihfcmFpc2Vfc3RvcF9lcnJvcikKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgVGhpcyBjbGVhcnMgdGhlIHF1ZXVlcyBhbmQgc2h1dHMgZG93biB0aGUgZXhlY3V0b3IsCisgICAgICAgIGJ1dCBkb2VzIG5vdCB3YWl0IGZvciB0aGUgZXhlY3V0b3IgdG8gZmluaXNoLgorCisgICAgICAgIFRoZSBldmVudCBsb29wIG11c3Qgbm90IGJlIHJ1bm5pbmcuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9ydW5uaW5nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgY2xvc2UgYSBydW5uaW5nIGV2ZW50IGxvb3AiKQorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkNsb3NlICVyIiwgc2VsZikKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9yZWFkeS5jbGVhcigpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZC5jbGVhcigpCisgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICBpZiBleGVjdXRvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgICAgICBleGVjdXRvci5zaHV0ZG93bih3YWl0PUZhbHNlKQorCisgICAgZGVmIGlzX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBsb29wIHdhcyBjbG9zZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9jbG9zZWQKKworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5pbmcKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgYWNjb3JkaW5nIHRvIHRoZSBldmVudCBsb29wJ3MgY2xvY2suCisKKyAgICAgICAgVGhpcyBpcyBhIGZsb2F0IGV4cHJlc3NlZCBpbiBzZWNvbmRzIHNpbmNlIGFuIGVwb2NoLCBidXQgdGhlCisgICAgICAgIGVwb2NoLCBwcmVjaXNpb24sIGFjY3VyYWN5IGFuZCBkcmlmdCBhcmUgdW5zcGVjaWZpZWQgYW5kIG1heQorICAgICAgICBkaWZmZXIgcGVyIGV2ZW50IGxvb3AuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdGltZS5tb25vdG9uaWMoKQorCisgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFycmFuZ2UgZm9yIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGF0IGEgZ2l2ZW4gdGltZS4KKworICAgICAgICBSZXR1cm4gYSBIYW5kbGU6IGFuIG9wYXF1ZSBvYmplY3Qgd2l0aCBhIGNhbmNlbCgpIG1ldGhvZCB0aGF0CisgICAgICAgIGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbC4KKworICAgICAgICBUaGUgZGVsYXkgY2FuIGJlIGFuIGludCBvciBmbG9hdCwgZXhwcmVzc2VkIGluIHNlY29uZHMuICBJdCBpcworICAgICAgICBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZS4KKworICAgICAgICBFYWNoIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4gIElmIHR3byBjYWxsYmFja3MKKyAgICAgICAgYXJlIHNjaGVkdWxlZCBmb3IgZXhhY3RseSB0aGUgc2FtZSB0aW1lLCBpdCB1bmRlZmluZWQgd2hpY2gKKyAgICAgICAgd2lsbCBiZSBjYWxsZWQgZmlyc3QuCisKKyAgICAgICAgQW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgICB0aGUgY2FsbGJhY2sgd2hlbiBpdCBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICB0aW1lciA9IHNlbGYuY2FsbF9hdChzZWxmLnRpbWUoKSArIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpCisgICAgICAgIGlmIHRpbWVyLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHRpbWVyLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICByZXR1cm4gdGltZXIKKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkxpa2UgY2FsbF9sYXRlcigpLCBidXQgdXNlcyBhbiBhYnNvbHV0ZSB0aW1lLgorCisgICAgICAgIEFic29sdXRlIHRpbWUgY29ycmVzcG9uZHMgdG8gdGhlIGV2ZW50IGxvb3AncyB0aW1lKCkgbWV0aG9kLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgY29yb3V0aW5lcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGNhbGxiYWNrKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGNhbGxfYXQoKSIpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2N1cnJlbnRfZXZlbnRfbG9vcCgpCisgICAgICAgIHRpbWVyID0gZXZlbnRzLlRpbWVySGFuZGxlKHdoZW4sIGNhbGxiYWNrLCBhcmdzLCBzZWxmKQorICAgICAgICBpZiB0aW1lci5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGRlbCB0aW1lci5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fc2NoZWR1bGVkLCB0aW1lcikKKyAgICAgICAgcmV0dXJuIHRpbWVyCisKKyAgICBkZWYgY2FsbF9zb29uKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFycmFuZ2UgZm9yIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuCisKKyAgICAgICAgVGhpcyBvcGVyYXRlcyBhcyBhIEZJRk8gcXVldWU6IGNhbGxiYWNrcyBhcmUgY2FsbGVkIGluIHRoZQorICAgICAgICBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSByZWdpc3RlcmVkLiAgRWFjaCBjYWxsYmFjayB3aWxsIGJlCisgICAgICAgIGNhbGxlZCBleGFjdGx5IG9uY2UuCisKKyAgICAgICAgQW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgICB0aGUgY2FsbGJhY2sgd2hlbiBpdCBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBoYW5kbGUgPSBzZWxmLl9jYWxsX3Nvb24oY2FsbGJhY2ssIGFyZ3MsIGNoZWNrX2xvb3A9VHJ1ZSkKKyAgICAgICAgaWYgaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIGhhbmRsZS5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgZGVmIF9jYWxsX3Nvb24oc2VsZiwgY2FsbGJhY2ssIGFyZ3MsIGNoZWNrX2xvb3ApOgorICAgICAgICBpZiBjb3JvdXRpbmVzLmlzY29yb3V0aW5lZnVuY3Rpb24oY2FsbGJhY2spOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjb3JvdXRpbmVzIGNhbm5vdCBiZSB1c2VkIHdpdGggY2FsbF9zb29uKCkiKQorICAgICAgICBpZiBzZWxmLl9kZWJ1ZyBhbmQgY2hlY2tfbG9vcDoKKyAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jdXJyZW50X2V2ZW50X2xvb3AoKQorICAgICAgICBoYW5kbGUgPSBldmVudHMuSGFuZGxlKGNhbGxiYWNrLCBhcmdzLCBzZWxmKQorICAgICAgICBpZiBoYW5kbGUuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICBzZWxmLl9yZWFkeS5hcHBlbmQoaGFuZGxlKQorICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICBkZWYgX2Fzc2VydF9pc19jdXJyZW50X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICIiIkFzc2VydHMgdGhhdCB0aGlzIGV2ZW50IGxvb3AgaXMgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcC4KKworICAgICAgICBOb24tdGhyZWFkLXNhZmUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIG1ha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCB3aWxsCisgICAgICAgIGxpa2VseSBiZWhhdmUgaW5jb3JyZWN0bHkgd2hlbiB0aGUgYXNzdW1wdGlvbiBpcyB2aW9sYXRlZC4KKworICAgICAgICBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAoc2VsZi5fZGVidWcgPT0gVHJ1ZSkuICBUaGUgY2FsbGVyIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZyB0aGlzIGNvbmRpdGlvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1cnJlbnQgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgY3VycmVudCBpcyBub3Qgc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAiTm9uLXRocmVhZC1zYWZlIG9wZXJhdGlvbiBpbnZva2VkIG9uIGFuIGV2ZW50IGxvb3Agb3RoZXIgIgorICAgICAgICAgICAgICAgICJ0aGFuIHRoZSBjdXJyZW50IG9uZSIpCisKKyAgICBkZWYgY2FsbF9zb29uX3RocmVhZHNhZmUoc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiTGlrZSBjYWxsX3Nvb24oKSwgYnV0IHRocmVhZC1zYWZlLiIiIgorICAgICAgICBoYW5kbGUgPSBzZWxmLl9jYWxsX3Nvb24oY2FsbGJhY2ssIGFyZ3MsIGNoZWNrX2xvb3A9RmFsc2UpCisgICAgICAgIGlmIGhhbmRsZS5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGRlbCBoYW5kbGUuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHNlbGYuX3dyaXRlX3RvX3NlbGYoKQorICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICBkZWYgcnVuX2luX2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBpZiBjb3JvdXRpbmVzLmlzY29yb3V0aW5lZnVuY3Rpb24oY2FsbGJhY2spOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDb3JvdXRpbmVzIGNhbm5vdCBiZSB1c2VkIHdpdGggcnVuX2luX2V4ZWN1dG9yKCkiKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNhbGxiYWNrLCBldmVudHMuSGFuZGxlKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgYXJncworICAgICAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKGNhbGxiYWNrLCBldmVudHMuVGltZXJIYW5kbGUpCisgICAgICAgICAgICBpZiBjYWxsYmFjay5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgICAgICAgICAgZi5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgICAgIGNhbGxiYWNrLCBhcmdzID0gY2FsbGJhY2suX2NhbGxiYWNrLCBjYWxsYmFjay5fYXJncworICAgICAgICBpZiBleGVjdXRvciBpcyBOb25lOgorICAgICAgICAgICAgZXhlY3V0b3IgPSBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yCisgICAgICAgICAgICBpZiBleGVjdXRvciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGV4ZWN1dG9yID0gY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcihfTUFYX1dPUktFUlMpCisgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IGV4ZWN1dG9yCisgICAgICAgIHJldHVybiBmdXR1cmVzLndyYXBfZnV0dXJlKGV4ZWN1dG9yLnN1Ym1pdChjYWxsYmFjaywgKmFyZ3MpLCBsb29wPXNlbGYpCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yID0gZXhlY3V0b3IKKworICAgIGRlZiBfZ2V0YWRkcmluZm9fZGVidWcoc2VsZiwgaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpOgorICAgICAgICBtc2cgPSBbIiVzOiVyIiAlIChob3N0LCBwb3J0KV0KKyAgICAgICAgaWYgZmFtaWx5OgorICAgICAgICAgICAgbXNnLmFwcGVuZCgnZmFtaWx5PSVyJyAlIGZhbWlseSkKKyAgICAgICAgaWYgdHlwZToKKyAgICAgICAgICAgIG1zZy5hcHBlbmQoJ3R5cGU9JXInICUgdHlwZSkKKyAgICAgICAgaWYgcHJvdG86CisgICAgICAgICAgICBtc2cuYXBwZW5kKCdwcm90bz0lcicgJSBwcm90bykKKyAgICAgICAgaWYgZmxhZ3M6CisgICAgICAgICAgICBtc2cuYXBwZW5kKCdmbGFncz0lcicgJSBmbGFncykKKyAgICAgICAgbXNnID0gJywgJy5qb2luKG1zZykKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdHZXQgYWRkcmVzcyBpbmZvICVzJywgbXNnKQorCisgICAgICAgIHQwID0gc2VsZi50aW1lKCkKKyAgICAgICAgYWRkcmluZm8gPSBzb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpCisgICAgICAgIGR0ID0gc2VsZi50aW1lKCkgLSB0MAorCisgICAgICAgIG1zZyA9ICgnR2V0dGluZyBhZGRyZXNzIGluZm8gJXMgdG9vayAlLjNmIG1zOiAlcicKKyAgICAgICAgICAgICAgICUgKG1zZywgZHQgKiAxZTMsIGFkZHJpbmZvKSkKKyAgICAgICAgaWYgZHQgPj0gc2VsZi5zbG93X2NhbGxiYWNrX2R1cmF0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8obXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKG1zZykKKyAgICAgICAgcmV0dXJuIGFkZHJpbmZvCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVuX2luX2V4ZWN1dG9yKE5vbmUsIHNlbGYuX2dldGFkZHJpbmZvX2RlYnVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVuX2luX2V4ZWN1dG9yKE5vbmUsIHNvY2tldC5nZXRhZGRyaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFncykKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0bmFtZWluZm8sIHNvY2thZGRyLCBmbGFncykKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1Ob25lLCBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgIiIiQ29ubmVjdCB0byBhIFRDUCBzZXJ2ZXIuCisKKyAgICAgICAgQ3JlYXRlIGEgc3RyZWFtaW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uIHRvIGEgZ2l2ZW4gSW50ZXJuZXQgaG9zdCBhbmQKKyAgICAgICAgcG9ydDogc29ja2V0IGZhbWlseSBBRl9JTkVUIG9yIHNvY2tldC5BRl9JTkVUNiBkZXBlbmRpbmcgb24gaG9zdCAob3IKKyAgICAgICAgZmFtaWx5IGlmIHNwZWNpZmllZCksIHNvY2tldCB0eXBlIFNPQ0tfU1RSRUFNLiBwcm90b2NvbF9mYWN0b3J5IG11c3QgYmUKKyAgICAgICAgYSBjYWxsYWJsZSByZXR1cm5pbmcgYSBwcm90b2NvbCBpbnN0YW5jZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZSB3aGljaCB3aWxsIHRyeSB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgaW4gdGhlIGJhY2tncm91bmQuICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZSBjb3JvdXRpbmUgcmV0dXJucyBhCisgICAgICAgICh0cmFuc3BvcnQsIHByb3RvY29sKSBwYWlyLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGlzIG5vdCBOb25lIGFuZCBub3Qgc3NsOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2VydmVyX2hvc3RuYW1lIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aXRoIHNzbCcpCisKKyAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGlzIE5vbmUgYW5kIHNzbDoKKyAgICAgICAgICAgICMgVXNlIGhvc3QgYXMgZGVmYXVsdCBmb3Igc2VydmVyX2hvc3RuYW1lLiAgSXQgaXMgYW4gZXJyb3IKKyAgICAgICAgICAgICMgaWYgaG9zdCBpcyBlbXB0eSBvciBub3Qgc2V0LCBlLmcuIHdoZW4gYW4KKyAgICAgICAgICAgICMgYWxyZWFkeS1jb25uZWN0ZWQgc29ja2V0IHdhcyBwYXNzZWQgb3Igd2hlbiBvbmx5IGEgcG9ydAorICAgICAgICAgICAgIyBpcyBnaXZlbi4gIFRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBjYW4gcGFzcworICAgICAgICAgICAgIyBzZXJ2ZXJfaG9zdG5hbWU9JycgLS0gdGhpcyB3aWxsIGJ5cGFzcyB0aGUgaG9zdG5hbWUKKyAgICAgICAgICAgICMgY2hlY2suICAoVGhpcyBhbHNvIG1lYW5zIHRoYXQgaWYgaG9zdCBpcyBhIG51bWVyaWMKKyAgICAgICAgICAgICMgSVAvSVB2NiBhZGRyZXNzLCB3ZSB3aWxsIGF0dGVtcHQgdG8gdmVyaWZ5IHRoYXQgZXhhY3QKKyAgICAgICAgICAgICMgYWRkcmVzczsgdGhpcyB3aWxsIHByb2JhYmx5IGZhaWwsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0bworICAgICAgICAgICAgIyBjcmVhdGUgYSBjZXJ0aWZpY2F0ZSBmb3IgYSBzcGVjaWZpYyBJUCBhZGRyZXNzLCBzbyB3ZQorICAgICAgICAgICAgIyBkb24ndCBqdWRnZSBpdCBoZXJlLikKKyAgICAgICAgICAgIGlmIG5vdCBob3N0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1lvdSBtdXN0IHNldCBzZXJ2ZXJfaG9zdG5hbWUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZW4gdXNpbmcgc3NsIHdpdGhvdXQgYSBob3N0JykKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IGhvc3QKKworICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lIG9yIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0L3BvcnQgYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIGYxID0gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICBmcyA9IFtmMV0KKyAgICAgICAgICAgIGlmIGxvY2FsX2FkZHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZjIgPSBzZWxmLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICAgICAqbG9jYWxfYWRkciwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPXByb3RvLCBmbGFncz1mbGFncykKKyAgICAgICAgICAgICAgICBmcy5hcHBlbmQoZjIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYyID0gTm9uZQorCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLndhaXQoZnMsIGxvb3A9c2VsZikKKworICAgICAgICAgICAgaW5mb3MgPSBmMS5yZXN1bHQoKQorICAgICAgICAgICAgaWYgbm90IGluZm9zOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKCkgcmV0dXJuZWQgZW1wdHkgbGlzdCcpCisgICAgICAgICAgICBpZiBmMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsYWRkcl9pbmZvcyA9IGYyLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxhZGRyX2luZm9zOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorCisgICAgICAgICAgICBleGNlcHRpb25zID0gW10KKyAgICAgICAgICAgIGZvciBmYW1pbHksIHR5cGUsIHByb3RvLCBjbmFtZSwgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGYyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIF8sIF8sIF8sIF8sIGxhZGRyIGluIGxhZGRyX2luZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5iaW5kKGxhZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjID0gT1NFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy5lcnJubywgJ2Vycm9yIHdoaWxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdHRlbXB0aW5nIHRvIGJpbmQgb24gYWRkcmVzcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfToge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWRkciwgZXhjLnN0cmVycm9yLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImNvbm5lY3QgJXIgdG8gJXIiLCBzb2NrLCBhZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKGV4YykKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBsZW4oZXhjZXB0aW9ucykgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgSWYgdGhleSBhbGwgaGF2ZSB0aGUgc2FtZSBzdHIoKSwgcmFpc2Ugb25lLgorICAgICAgICAgICAgICAgICAgICBtb2RlbCA9IHN0cihleGNlcHRpb25zWzBdKQorICAgICAgICAgICAgICAgICAgICBpZiBhbGwoc3RyKGV4YykgPT0gbW9kZWwgZm9yIGV4YyBpbiBleGNlcHRpb25zKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnNbMF0KKyAgICAgICAgICAgICAgICAgICAgIyBSYWlzZSBhIGNvbWJpbmVkIGV4Y2VwdGlvbiBzbyB0aGUgdXNlciBjYW4gc2VlIGFsbAorICAgICAgICAgICAgICAgICAgICAjIHRoZSB2YXJpb3VzIGVycm9yIG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdNdWx0aXBsZSBleGNlcHRpb25zOiB7fScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKHN0cihleGMpIGZvciBleGMgaW4gZXhjZXB0aW9ucykpKQorCisgICAgICAgIGVsaWYgc29jayBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAnaG9zdCBhbmQgcG9ydCB3YXMgbm90IHNwZWNpZmllZCBhbmQgbm8gc29jayBzcGVjaWZpZWQnKQorCisgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gc2VsZi5fY3JlYXRlX2Nvbm5lY3Rpb25fdHJhbnNwb3J0KAorICAgICAgICAgICAgc29jaywgcHJvdG9jb2xfZmFjdG9yeSwgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgIyBHZXQgdGhlIHNvY2tldCBmcm9tIHRoZSB0cmFuc3BvcnQgYmVjYXVzZSBTU0wgdHJhbnNwb3J0IGNsb3NlcworICAgICAgICAgICAgIyB0aGUgb2xkIHNvY2tldCBhbmQgY3JlYXRlcyBhIG5ldyBTU0wgc29ja2V0CisgICAgICAgICAgICBzb2NrID0gdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrZXQnKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBjb25uZWN0ZWQgdG8gJXM6JXI6ICglciwgJXIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBob3N0LCBwb3J0LCB0cmFuc3BvcnQsIHByb3RvY29sKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfY3JlYXRlX2Nvbm5lY3Rpb25fdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sX2ZhY3RvcnksIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUpOgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIGlmIHNzbDoKKyAgICAgICAgICAgIHNzbGNvbnRleHQgPSBOb25lIGlmIGlzaW5zdGFuY2Uoc3NsLCBib29sKSBlbHNlIHNzbAorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHdhaXRlcikKKworICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgcmVtb3RlX2FkZHI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAgICAgIiIiQ3JlYXRlIGRhdGFncmFtIGNvbm5lY3Rpb24uIiIiCisgICAgICAgIGlmIG5vdCAobG9jYWxfYWRkciBvciByZW1vdGVfYWRkcik6CisgICAgICAgICAgICBpZiBmYW1pbHkgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmV4cGVjdGVkIGFkZHJlc3MgZmFtaWx5JykKKyAgICAgICAgICAgIGFkZHJfcGFpcnNfaW5mbyA9ICgoKGZhbWlseSwgcHJvdG8pLCAoTm9uZSwgTm9uZSkpLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgam9pbiBhZGRyZXNzIGJ5IChmYW1pbHksIHByb3RvY29sKQorICAgICAgICAgICAgYWRkcl9pbmZvcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgICAgIGZvciBpZHgsIGFkZHIgaW4gKCgwLCBsb2NhbF9hZGRyKSwgKDEsIHJlbW90ZV9hZGRyKSk6CisgICAgICAgICAgICAgICAgaWYgYWRkciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYWRkciwgdHVwbGUpIGFuZCBsZW4oYWRkcikgPT0gMiwgKAorICAgICAgICAgICAgICAgICAgICAgICAgJzItdHVwbGUgaXMgZXhwZWN0ZWQnKQorCisgICAgICAgICAgICAgICAgICAgIGluZm9zID0geWllbGQgZnJvbSBzZWxmLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgKmFkZHIsIGZhbWlseT1mYW1pbHksIHR5cGU9c29ja2V0LlNPQ0tfREdSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKCkgcmV0dXJuZWQgZW1wdHkgbGlzdCcpCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZhbSwgXywgcHJvLCBfLCBhZGRyZXNzIGluIGluZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gKGZhbSwgcHJvKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBhZGRyX2luZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfaW5mb3Nba2V5XSA9IFtOb25lLCBOb25lXQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9pbmZvc1trZXldW2lkeF0gPSBhZGRyZXNzCisKKyAgICAgICAgICAgICMgZWFjaCBhZGRyIGhhcyB0byBoYXZlIGluZm8gZm9yIGVhY2ggKGZhbWlseSwgcHJvdG8pIHBhaXIKKyAgICAgICAgICAgIGFkZHJfcGFpcnNfaW5mbyA9IFsKKyAgICAgICAgICAgICAgICAoa2V5LCBhZGRyX3BhaXIpIGZvciBrZXksIGFkZHJfcGFpciBpbiBhZGRyX2luZm9zLml0ZW1zKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgKChsb2NhbF9hZGRyIGFuZCBhZGRyX3BhaXJbMF0gaXMgTm9uZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdGVfYWRkciBhbmQgYWRkcl9wYWlyWzFdIGlzIE5vbmUpKV0KKworICAgICAgICAgICAgaWYgbm90IGFkZHJfcGFpcnNfaW5mbzoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW4gbm90IGdldCBhZGRyZXNzIGluZm9ybWF0aW9uJykKKworICAgICAgICBleGNlcHRpb25zID0gW10KKworICAgICAgICBmb3IgKChmYW1pbHksIHByb3RvKSwKKyAgICAgICAgICAgICAobG9jYWxfYWRkcmVzcywgcmVtb3RlX2FkZHJlc3MpKSBpbiBhZGRyX3BhaXJzX2luZm86CisgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgcl9hZGRyID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KAorICAgICAgICAgICAgICAgICAgICBmYW1pbHk9ZmFtaWx5LCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNLCBwcm90bz1wcm90bykKKyAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKworICAgICAgICAgICAgICAgIGlmIGxvY2FsX2FkZHI6CisgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsb2NhbF9hZGRyZXNzKQorICAgICAgICAgICAgICAgIGlmIHJlbW90ZV9hZGRyOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuc29ja19jb25uZWN0KHNvY2ssIHJlbW90ZV9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICByX2FkZHIgPSByZW1vdGVfYWRkcmVzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKGV4YykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHJfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyKQorICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgIGlmIGxvY2FsX2FkZHI6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkRhdGFncmFtIGVuZHBvaW50IGxvY2FsX2FkZHI9JXIgcmVtb3RlX2FkZHI9JXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVhdGVkOiAoJXIsICVyKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkciwgcmVtb3RlX2FkZHIsIHRyYW5zcG9ydCwgcHJvdG9jb2wpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRGF0YWdyYW0gZW5kcG9pbnQgcmVtb3RlX2FkZHI9JXIgY3JlYXRlZDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCVyLCAlcikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfYWRkciwgdHJhbnNwb3J0LCBwcm90b2NvbCkKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAqLAorICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPXNvY2tldC5BSV9QQVNTSVZFLAorICAgICAgICAgICAgICAgICAgICAgIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBiYWNrbG9nPTEwMCwKKyAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYSBUQ1Agc2VydmVyIGJvdW5kIHRvIGhvc3QgYW5kIHBvcnQuCisKKyAgICAgICAgUmV0dXJuIGEgU2VydmVyIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHRoZSBzZXJ2aWNlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzc2wgYXJndW1lbnQgbXVzdCBiZSBhbiBTU0xDb250ZXh0IG9yIE5vbmUnKQorICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lIG9yIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0L3BvcnQgYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIEFGX0lORVQ2ID0gZ2V0YXR0cihzb2NrZXQsICdBRl9JTkVUNicsIDApCisgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcyA9IG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgc3lzLnBsYXRmb3JtICE9ICdjeWd3aW4nCisgICAgICAgICAgICBzb2NrZXRzID0gW10KKyAgICAgICAgICAgIGlmIGhvc3QgPT0gJyc6CisgICAgICAgICAgICAgICAgaG9zdCA9IE5vbmUKKworICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICBpZiBub3QgaW5mb3M6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgY29tcGxldGVkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgcmVzIGluIGluZm9zOgorICAgICAgICAgICAgICAgICAgICBhZiwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNhID0gcmVzCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGFmLCBzb2NrdHlwZSwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEFzc3VtZSBpdCdzIGEgYmFkIGZhbWlseS90eXBlL3Byb3RvY29sIGNvbWJpbmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ2NyZWF0ZV9zZXJ2ZXIoKSBmYWlsZWQgdG8gY3JlYXRlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LnNvY2tldCglciwgJXIsICVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHNvY2tldHMuYXBwZW5kKHNvY2spCisgICAgICAgICAgICAgICAgICAgIGlmIHJldXNlX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgIyBEaXNhYmxlIElQdjQvSVB2NiBkdWFsIHN0YWNrIHN1cHBvcnQgKGVuYWJsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgIyBkZWZhdWx0IG9uIExpbnV4KSB3aGljaCBtYWtlcyBhIHNpbmdsZSBzb2NrZXQKKyAgICAgICAgICAgICAgICAgICAgIyBsaXN0ZW4gb24gYm90aCBhZGRyZXNzIGZhbWlsaWVzLgorICAgICAgICAgICAgICAgICAgICBpZiBhZiA9PSBBRl9JTkVUNiBhbmQgaGFzYXR0cihzb2NrZXQsICdJUFBST1RPX0lQVjYnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFY2X1Y2T05MWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmJpbmQoc2EpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLmVycm5vLCAnZXJyb3Igd2hpbGUgYXR0ZW1wdGluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBiaW5kIG9uIGFkZHJlc3MgJXI6ICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzYSwgZXJyLnN0cmVycm9yLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IFRydWUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBsZXRlZDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc29jayBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05laXRoZXIgaG9zdC9wb3J0IG5vciBzb2NrIHdlcmUgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIHNvY2tldHMgPSBbc29ja10KKworICAgICAgICBzZXJ2ZXIgPSBTZXJ2ZXIoc2VsZiwgc29ja2V0cykKKyAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgIHNvY2subGlzdGVuKGJhY2tsb2cpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZyhwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2wsIHNlcnZlcikKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiJXIgaXMgc2VydmluZyIsIHNlcnZlcikKKyAgICAgICAgcmV0dXJuIHNlcnZlcgorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1JlYWQgcGlwZSAlciBjb25uZWN0ZWQ6ICglciwgJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLmZpbGVubygpLCB0cmFuc3BvcnQsIHByb3RvY29sKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjb25uZWN0X3dyaXRlX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydChwaXBlLCBwcm90b2NvbCwgd2FpdGVyKQorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnV3JpdGUgcGlwZSAlciBjb25uZWN0ZWQ6ICglciwgJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLmZpbGVubygpLCB0cmFuc3BvcnQsIHByb3RvY29sKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgZGVmIF9sb2dfc3VicHJvY2VzcyhzZWxmLCBtc2csIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAgIGluZm8gPSBbbXNnXQorICAgICAgICBpZiBzdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRpbj0lcycgJSBfZm9ybWF0X3BpcGUoc3RkaW4pKQorICAgICAgICBpZiBzdGRvdXQgaXMgbm90IE5vbmUgYW5kIHN0ZGVyciA9PSBzdWJwcm9jZXNzLlNURE9VVDoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRvdXQ9c3RkZXJyPSVzJyAlIF9mb3JtYXRfcGlwZShzdGRvdXQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRvdXQ9JXMnICUgX2Zvcm1hdF9waXBlKHN0ZG91dCkpCisgICAgICAgICAgICBpZiBzdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZGVycj0lcycgJSBfZm9ybWF0X3BpcGUoc3RkZXJyKSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCcgJy5qb2luKGluZm8pKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBzdWJwcm9jZXNzX3NoZWxsKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGNtZCwgKiwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCBzaGVsbD1UcnVlLCBidWZzaXplPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjbWQsIChieXRlcywgc3RyKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjbWQgbXVzdCBiZSBhIHN0cmluZyIpCisgICAgICAgIGlmIHVuaXZlcnNhbF9uZXdsaW5lczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuaXZlcnNhbF9uZXdsaW5lcyBtdXN0IGJlIEZhbHNlIikKKyAgICAgICAgaWYgbm90IHNoZWxsOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2hlbGwgbXVzdCBiZSBUcnVlIikKKyAgICAgICAgaWYgYnVmc2l6ZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYnVmc2l6ZSBtdXN0IGJlIDAiKQorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICMgZG9uJ3QgbG9nIHBhcmFtZXRlcnM6IHRoZXkgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uCisgICAgICAgICAgICAjIChwYXNzd29yZCkgYW5kIG1heSBiZSB0b28gbG9uZworICAgICAgICAgICAgZGVidWdfbG9nID0gJ3J1biBzaGVsbCBjb21tYW5kICVyJyAlIGNtZAorICAgICAgICAgICAgc2VsZi5fbG9nX3N1YnByb2Nlc3MoZGVidWdfbG9nLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIHRyYW5zcG9ydCA9IHlpZWxkIGZyb20gc2VsZi5fbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHByb3RvY29sLCBjbWQsIFRydWUsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVzOiAlcicgJSAoZGVidWdfbG9nLCB0cmFuc3BvcnQpKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBzdWJwcm9jZXNzX2V4ZWMoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcHJvZ3JhbSwgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1GYWxzZSwgYnVmc2l6ZT0wLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHVuaXZlcnNhbF9uZXdsaW5lczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuaXZlcnNhbF9uZXdsaW5lcyBtdXN0IGJlIEZhbHNlIikKKyAgICAgICAgaWYgc2hlbGw6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzaGVsbCBtdXN0IGJlIEZhbHNlIikKKyAgICAgICAgaWYgYnVmc2l6ZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYnVmc2l6ZSBtdXN0IGJlIDAiKQorICAgICAgICBwb3Blbl9hcmdzID0gKHByb2dyYW0sKSArIGFyZ3MKKyAgICAgICAgZm9yIGFyZyBpbiBwb3Blbl9hcmdzOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJnLCAoc3RyLCBieXRlcykpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicHJvZ3JhbSBhcmd1bWVudHMgbXVzdCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIGJ5dGVzIG9yIHRleHQgc3RyaW5nLCBub3QgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgdHlwZShhcmcpLl9fbmFtZV9fKQorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICMgZG9uJ3QgbG9nIHBhcmFtZXRlcnM6IHRoZXkgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uCisgICAgICAgICAgICAjIChwYXNzd29yZCkgYW5kIG1heSBiZSB0b28gbG9uZworICAgICAgICAgICAgZGVidWdfbG9nID0gJ2V4ZWN1dGUgcHJvZ3JhbSAlcicgJSBwcm9ncmFtCisgICAgICAgICAgICBzZWxmLl9sb2dfc3VicHJvY2VzcyhkZWJ1Z19sb2csIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgdHJhbnNwb3J0ID0geWllbGQgZnJvbSBzZWxmLl9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KAorICAgICAgICAgICAgcHJvdG9jb2wsIHBvcGVuX2FyZ3MsIEZhbHNlLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsCisgICAgICAgICAgICBidWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnJXM6ICVyJyAlIChkZWJ1Z19sb2csIHRyYW5zcG9ydCkpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYsIGhhbmRsZXIpOgorICAgICAgICAiIiJTZXQgaGFuZGxlciBhcyB0aGUgbmV3IGV2ZW50IGxvb3AgZXhjZXB0aW9uIGhhbmRsZXIuCisKKyAgICAgICAgSWYgaGFuZGxlciBpcyBOb25lLCB0aGUgZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlciB3aWxsCisgICAgICAgIGJlIHNldC4KKworICAgICAgICBJZiBoYW5kbGVyIGlzIGEgY2FsbGFibGUgb2JqZWN0LCBpdCBzaG91bGQgaGF2ZSBhCisgICAgICAgIHNpZ25hdHVyZSBtYXRjaGluZyAnKGxvb3AsIGNvbnRleHQpJywgd2hlcmUgJ2xvb3AnCisgICAgICAgIHdpbGwgYmUgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSBldmVudCBsb29wLCAnY29udGV4dCcKKyAgICAgICAgd2lsbCBiZSBhIGRpY3Qgb2JqZWN0IChzZWUgYGNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoKWAKKyAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBhYm91dCBjb250ZXh0KS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGhhbmRsZXIgaXMgbm90IE5vbmUgYW5kIG5vdCBjYWxsYWJsZShoYW5kbGVyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBjYWxsYWJsZSBvYmplY3Qgb3IgTm9uZSBpcyBleHBlY3RlZCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnb3QgeyFyfScuZm9ybWF0KGhhbmRsZXIpKQorICAgICAgICBzZWxmLl9leGNlcHRpb25faGFuZGxlciA9IGhhbmRsZXIKKworICAgIGRlZiBkZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYsIGNvbnRleHQpOgorICAgICAgICAiIiJEZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBhbmQgbm8gZXhjZXB0aW9uCisgICAgICAgIGhhbmRsZXIgaXMgc2V0LCBhbmQgY2FuIGJlIGNhbGxlZCBieSBhIGN1c3RvbSBleGNlcHRpb24KKyAgICAgICAgaGFuZGxlciB0aGF0IHdhbnRzIHRvIGRlZmVyIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorCisgICAgICAgIFRoZSBjb250ZXh0IHBhcmFtZXRlciBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbgorICAgICAgICBgY2FsbF9leGNlcHRpb25faGFuZGxlcigpYC4KKyAgICAgICAgIiIiCisgICAgICAgIG1lc3NhZ2UgPSBjb250ZXh0LmdldCgnbWVzc2FnZScpCisgICAgICAgIGlmIG5vdCBtZXNzYWdlOgorICAgICAgICAgICAgbWVzc2FnZSA9ICdVbmhhbmRsZWQgZXhjZXB0aW9uIGluIGV2ZW50IGxvb3AnCisKKyAgICAgICAgZXhjZXB0aW9uID0gY29udGV4dC5nZXQoJ2V4Y2VwdGlvbicpCisgICAgICAgIGlmIGV4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGV4Y19pbmZvID0gKHR5cGUoZXhjZXB0aW9uKSwgZXhjZXB0aW9uLCBleGNlcHRpb24uX190cmFjZWJhY2tfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4Y19pbmZvID0gRmFsc2UKKworICAgICAgICBsb2dfbGluZXMgPSBbbWVzc2FnZV0KKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoY29udGV4dCk6CisgICAgICAgICAgICBpZiBrZXkgaW4geydtZXNzYWdlJywgJ2V4Y2VwdGlvbid9OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB2YWx1ZSA9IGNvbnRleHRba2V5XQorICAgICAgICAgICAgaWYga2V5ID09ICdzb3VyY2VfdHJhY2ViYWNrJzoKKyAgICAgICAgICAgICAgICB0YiA9ICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9saXN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICdPYmplY3QgY3JlYXRlZCBhdCAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSB0Yi5yc3RyaXAoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlcHIodmFsdWUpCisgICAgICAgICAgICBsb2dfbGluZXMuYXBwZW5kKCd7fToge30nLmZvcm1hdChrZXksIHZhbHVlKSkKKworICAgICAgICBsb2dnZXIuZXJyb3IoJ1xuJy5qb2luKGxvZ19saW5lcyksIGV4Y19pbmZvPWV4Y19pbmZvKQorCisgICAgZGVmIGNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCk6CisgICAgICAgICIiIkNhbGwgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCdzIGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICAgICAgIFRoZSBjb250ZXh0IGFyZ3VtZW50IGlzIGEgZGljdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcga2V5czoKKworICAgICAgICAtICdtZXNzYWdlJzogRXJyb3IgbWVzc2FnZTsKKyAgICAgICAgLSAnZXhjZXB0aW9uJyAob3B0aW9uYWwpOiBFeGNlcHRpb24gb2JqZWN0OworICAgICAgICAtICdmdXR1cmUnIChvcHRpb25hbCk6IEZ1dHVyZSBpbnN0YW5jZTsKKyAgICAgICAgLSAnaGFuZGxlJyAob3B0aW9uYWwpOiBIYW5kbGUgaW5zdGFuY2U7CisgICAgICAgIC0gJ3Byb3RvY29sJyAob3B0aW9uYWwpOiBQcm90b2NvbCBpbnN0YW5jZTsKKyAgICAgICAgLSAndHJhbnNwb3J0JyAob3B0aW9uYWwpOiBUcmFuc3BvcnQgaW5zdGFuY2U7CisgICAgICAgIC0gJ3NvY2tldCcgKG9wdGlvbmFsKTogU29ja2V0IGluc3RhbmNlLgorCisgICAgICAgIE5ldyBrZXlzIG1heWJlIGludHJvZHVjZWQgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBOb3RlOiBkbyBub3Qgb3ZlcmxvYWQgdGhpcyBtZXRob2QgaW4gYW4gZXZlbnQgbG9vcCBzdWJjbGFzcy4KKyAgICAgICAgRm9yIGN1c3RvbSBleGNlcHRpb24gaGFuZGxpbmcsIHVzZSB0aGUKKyAgICAgICAgYHNldF9leGNlcHRpb25faGFuZGxlcigpYCBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb25faGFuZGxlciBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAjIFNlY29uZCBwcm90ZWN0aW9uIGxheWVyIGZvciB1bmV4cGVjdGVkIGVycm9ycworICAgICAgICAgICAgICAgICMgaW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFzIHdlbGwgYXMgZm9yIHN1YmNsYXNzZWQKKyAgICAgICAgICAgICAgICAjIGV2ZW50IGxvb3BzIHdpdGggb3ZlcmxvYWRlZCAiZGVmYXVsdF9leGNlcHRpb25faGFuZGxlciIuCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdFeGNlcHRpb24gaW4gZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgICMgRXhjZXB0aW9uIGluIHRoZSB1c2VyIHNldCBjdXN0b20gZXhjZXB0aW9uIGhhbmRsZXIuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIExldCdzIHRyeSBkZWZhdWx0IGhhbmRsZXIuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdVbmhhbmRsZWQgZXJyb3IgaW4gZXhjZXB0aW9uIGhhbmRsZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZXh0JzogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIEd1YXJkICdkZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyJyBpbiBjYXNlIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICMgb3ZlcmxvYWRlZC4KKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdFeGNlcHRpb24gaW4gZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hpbGUgaGFuZGxpbmcgYW4gdW5leHBlY3RlZCBlcnJvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gY3VzdG9tIGV4Y2VwdGlvbiBoYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPVRydWUpCisKKyAgICBkZWYgX2FkZF9jYWxsYmFjayhzZWxmLCBoYW5kbGUpOgorICAgICAgICAiIiJBZGQgYSBIYW5kbGUgdG8gX3NjaGVkdWxlZCAoVGltZXJIYW5kbGUpIG9yIF9yZWFkeS4iIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaGFuZGxlLCBldmVudHMuSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIHJlcXVpcmVkIGhlcmUnCisgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoaGFuZGxlLCBldmVudHMuVGltZXJIYW5kbGUpOgorICAgICAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fc2NoZWR1bGVkLCBoYW5kbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZWFkeS5hcHBlbmQoaGFuZGxlKQorCisgICAgZGVmIF9hZGRfY2FsbGJhY2tfc2lnbmFsc2FmZShzZWxmLCBoYW5kbGUpOgorICAgICAgICAiIiJMaWtlIF9hZGRfY2FsbGJhY2soKSBidXQgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4iIiIKKyAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKGhhbmRsZSkKKyAgICAgICAgc2VsZi5fd3JpdGVfdG9fc2VsZigpCisKKyAgICBkZWYgX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICAiIiJSdW4gb25lIGZ1bGwgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgY2FsbHMgYWxsIGN1cnJlbnRseSByZWFkeSBjYWxsYmFja3MsIHBvbGxzIGZvciBJL08sCisgICAgICAgIHNjaGVkdWxlcyB0aGUgcmVzdWx0aW5nIGNhbGxiYWNrcywgYW5kIGZpbmFsbHkgc2NoZWR1bGVzCisgICAgICAgICdjYWxsX2xhdGVyJyBjYWxsYmFja3MuCisgICAgICAgICIiIgorICAgICAgICAjIFJlbW92ZSBkZWxheWVkIGNhbGxzIHRoYXQgd2VyZSBjYW5jZWxsZWQgZnJvbSBoZWFkIG9mIHF1ZXVlLgorICAgICAgICB3aGlsZSBzZWxmLl9zY2hlZHVsZWQgYW5kIHNlbGYuX3NjaGVkdWxlZFswXS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgaGVhcHEuaGVhcHBvcChzZWxmLl9zY2hlZHVsZWQpCisKKyAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcmVhZHk6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICBlbGlmIHNlbGYuX3NjaGVkdWxlZDoKKyAgICAgICAgICAgICMgQ29tcHV0ZSB0aGUgZGVzaXJlZCB0aW1lb3V0LgorICAgICAgICAgICAgd2hlbiA9IHNlbGYuX3NjaGVkdWxlZFswXS5fd2hlbgorICAgICAgICAgICAgdGltZW91dCA9IG1heCgwLCB3aGVuIC0gc2VsZi50aW1lKCkpCisKKyAgICAgICAgaWYgc2VsZi5fZGVidWcgYW5kIHRpbWVvdXQgIT0gMDoKKyAgICAgICAgICAgIHQwID0gc2VsZi50aW1lKCkKKyAgICAgICAgICAgIGV2ZW50X2xpc3QgPSBzZWxmLl9zZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgICAgIGR0ID0gc2VsZi50aW1lKCkgLSB0MAorICAgICAgICAgICAgaWYgZHQgPj0gMS4wOgorICAgICAgICAgICAgICAgIGxldmVsID0gbG9nZ2luZy5JTkZPCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxldmVsID0gbG9nZ2luZy5ERUJVRworICAgICAgICAgICAgbmV2ZW50ID0gbGVuKGV2ZW50X2xpc3QpCisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwgJ3BvbGwgdG9vayAlLjNmIG1zOiAlcyBldmVudHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZHQgKiAxZTMsIG5ldmVudCkKKyAgICAgICAgICAgIGVsaWYgbmV2ZW50OgorICAgICAgICAgICAgICAgIGxvZ2dlci5sb2cobGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9sbCAlLjNmIG1zIHRvb2sgJS4zZiBtczogJXMgZXZlbnRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgKiAxZTMsIGR0ICogMWUzLCBuZXZlbnQpCisgICAgICAgICAgICBlbGlmIGR0ID49IDEuMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvbGwgJS4zZiBtcyB0b29rICUuM2YgbXM6IHRpbWVvdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCAqIDFlMywgZHQgKiAxZTMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBldmVudF9saXN0ID0gc2VsZi5fc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgIHNlbGYuX3Byb2Nlc3NfZXZlbnRzKGV2ZW50X2xpc3QpCisKKyAgICAgICAgIyBIYW5kbGUgJ2xhdGVyJyBjYWxsYmFja3MgdGhhdCBhcmUgcmVhZHkuCisgICAgICAgIGVuZF90aW1lID0gc2VsZi50aW1lKCkgKyBzZWxmLl9jbG9ja19yZXNvbHV0aW9uCisgICAgICAgIHdoaWxlIHNlbGYuX3NjaGVkdWxlZDoKKyAgICAgICAgICAgIGhhbmRsZSA9IHNlbGYuX3NjaGVkdWxlZFswXQorICAgICAgICAgICAgaWYgaGFuZGxlLl93aGVuID49IGVuZF90aW1lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBoYW5kbGUgPSBoZWFwcS5oZWFwcG9wKHNlbGYuX3NjaGVkdWxlZCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWR5LmFwcGVuZChoYW5kbGUpCisKKyAgICAgICAgIyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGNhbGxiYWNrcyBhcmUgYWN0dWFsbHkgKmNhbGxlZCouCisgICAgICAgICMgQWxsIG90aGVyIHBsYWNlcyBqdXN0IGFkZCB0aGVtIHRvIHJlYWR5LgorICAgICAgICAjIE5vdGU6IFdlIHJ1biBhbGwgY3VycmVudGx5IHNjaGVkdWxlZCBjYWxsYmFja3MsIGJ1dCBub3QgYW55CisgICAgICAgICMgY2FsbGJhY2tzIHNjaGVkdWxlZCBieSBjYWxsYmFja3MgcnVuIHRoaXMgdGltZSBhcm91bmQgLS0KKyAgICAgICAgIyB0aGV5IHdpbGwgYmUgcnVuIHRoZSBuZXh0IHRpbWUgKGFmdGVyIGFub3RoZXIgSS9PIHBvbGwpLgorICAgICAgICAjIFVzZSBhbiBpZGlvbSB0aGF0IGlzIHRocmVhZC1zYWZlIHdpdGhvdXQgdXNpbmcgbG9ja3MuCisgICAgICAgIG50b2RvID0gbGVuKHNlbGYuX3JlYWR5KQorICAgICAgICBmb3IgaSBpbiByYW5nZShudG9kbyk6CisgICAgICAgICAgICBoYW5kbGUgPSBzZWxmLl9yZWFkeS5wb3BsZWZ0KCkKKyAgICAgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICAgICB0MCA9IHNlbGYudGltZSgpCisgICAgICAgICAgICAgICAgaGFuZGxlLl9ydW4oKQorICAgICAgICAgICAgICAgIGR0ID0gc2VsZi50aW1lKCkgLSB0MAorICAgICAgICAgICAgICAgIGlmIGR0ID49IHNlbGYuc2xvd19jYWxsYmFja19kdXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0V4ZWN1dGluZyAlcyB0b29rICUuM2Ygc2Vjb25kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfaGFuZGxlKGhhbmRsZSksIGR0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoYW5kbGUuX3J1bigpCisgICAgICAgIGhhbmRsZSA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisKKyAgICBkZWYgZ2V0X2RlYnVnKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVidWcKKworICAgIGRlZiBzZXRfZGVidWcoc2VsZiwgZW5hYmxlZCk6CisgICAgICAgIHNlbGYuX2RlYnVnID0gZW5hYmxlZApkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDg3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkKQEAgLTAsMCArMSwxOTcgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgY29yb3V0aW5lCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2NsYXNzIEJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0KHRyYW5zcG9ydHMuU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9waWQgPSBOb25lCisKKyAgICAgICAgc2VsZi5fcGlwZXMgPSB7fQorICAgICAgICBpZiBzdGRpbiA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICBzZWxmLl9waXBlc1swXSA9IE5vbmUKKyAgICAgICAgaWYgc3Rkb3V0ID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzWzFdID0gTm9uZQorICAgICAgICBpZiBzdGRlcnIgPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgc2VsZi5fcGlwZXNbMl0gPSBOb25lCisgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcmV0dXJuY29kZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3RhcnQoYXJncz1hcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdGRlcnIsIGJ1ZnNpemU9YnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCisgICAgICAgIHNlbGYuX2V4dHJhWydzdWJwcm9jZXNzJ10gPSBzZWxmLl9wcm9jCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZ3MsIChieXRlcywgc3RyKSk6CisgICAgICAgICAgICAgICAgcHJvZ3JhbSA9IGFyZ3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvZ3JhbSA9IGFyZ3NbMF0KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygncHJvY2VzcyAlciBjcmVhdGVkOiBwaWQgJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0sIHNlbGYuX3BpZCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaW5mbyA9IFtzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJ3BpZD0lcycgJSBzZWxmLl9waWRdCisgICAgICAgIGlmIHNlbGYuX3JldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgncmV0dXJuY29kZT0lcycgJSBzZWxmLl9yZXR1cm5jb2RlKQorCisgICAgICAgIHN0ZGluID0gc2VsZi5fcGlwZXMuZ2V0KDApCisgICAgICAgIGlmIHN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZGluPSVzJyAlIHN0ZGluLnBpcGUpCisKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5fcGlwZXMuZ2V0KDEpCisgICAgICAgIHN0ZGVyciA9IHNlbGYuX3BpcGVzLmdldCgyKQorICAgICAgICBpZiBzdGRvdXQgaXMgbm90IE5vbmUgYW5kIHN0ZGVyciBpcyBzdGRvdXQ6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3Rkb3V0PXN0ZGVycj0lcycgJSBzdGRvdXQucGlwZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3Rkb3V0PSVzJyAlIHN0ZG91dC5waXBlKQorICAgICAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRlcnI9JXMnICUgc3RkZXJyLnBpcGUpCisKKyAgICAgICAgcmV0dXJuICc8JXM+JyAlICcgJy5qb2luKGluZm8pCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIGFyZ3MsIHNoZWxsLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dyaXRlX3N1YnByb2Nlc3NfcGlwZV9wcm90byhzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9yZWFkX3N1YnByb2Nlc3NfcGlwZV9wcm90byhzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHNlbGYuX3BpcGVzLnZhbHVlcygpOgorICAgICAgICAgICAgcHJvdG8ucGlwZS5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiBnZXRfcGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGlkCisKKyAgICBkZWYgZ2V0X3JldHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXR1cm5jb2RlCisKKyAgICBkZWYgZ2V0X3BpcGVfdHJhbnNwb3J0KHNlbGYsIGZkKToKKyAgICAgICAgaWYgZmQgaW4gc2VsZi5fcGlwZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGlwZXNbZmRdLnBpcGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgc2VsZi5fcHJvYy5zZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fcHJvYy5raWxsKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3Bvc3RfaW5pdChzZWxmKToKKyAgICAgICAgcHJvYyA9IHNlbGYuX3Byb2MKKyAgICAgICAgbG9vcCA9IHNlbGYuX2xvb3AKKyAgICAgICAgaWYgcHJvYy5zdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF8sIHBpcGUgPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF93cml0ZV9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvKHNlbGYsIDApLAorICAgICAgICAgICAgICAgIHByb2Muc3RkaW4pCisgICAgICAgICAgICBzZWxmLl9waXBlc1swXSA9IHBpcGUKKyAgICAgICAgaWYgcHJvYy5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfLCBwaXBlID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgMSksCisgICAgICAgICAgICAgICAgcHJvYy5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLl9waXBlc1sxXSA9IHBpcGUKKyAgICAgICAgaWYgcHJvYy5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfLCBwaXBlID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgMiksCisgICAgICAgICAgICAgICAgcHJvYy5zdGRlcnIpCisgICAgICAgICAgICBzZWxmLl9waXBlc1syXSA9IHBpcGUKKworICAgICAgICBhc3NlcnQgc2VsZi5fcGVuZGluZ19jYWxscyBpcyBub3QgTm9uZQorCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgZm9yIGNhbGxiYWNrLCBkYXRhIGluIHNlbGYuX3BlbmRpbmdfY2FsbHM6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYWxsYmFjaywgKmRhdGEpCisgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMgPSBOb25lCisKKyAgICBkZWYgX2NhbGwoc2VsZiwgY2IsICpkYXRhKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19jYWxscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMuYXBwZW5kKChjYiwgZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYiwgKmRhdGEpCisKKyAgICBkZWYgX3BpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0LCBmZCwgZXhjKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQsIGZkLCBkYXRhKQorCisgICAgZGVmIF9wcm9jZXNzX2V4aXRlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgYXNzZXJ0IHJldHVybmNvZGUgaXMgbm90IE5vbmUsIHJldHVybmNvZGUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZSwgc2VsZi5fcmV0dXJuY29kZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVyIGV4aXRlZCB3aXRoIHJldHVybiBjb2RlICVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHJldHVybmNvZGUpCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSByZXR1cm5jb2RlCisgICAgICAgIHNlbGYuX2NhbGwoc2VsZi5fcHJvdG9jb2wucHJvY2Vzc19leGl0ZWQpCisgICAgICAgIHNlbGYuX3RyeV9maW5pc2goKQorCisgICAgZGVmIF90cnlfZmluaXNoKHNlbGYpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2ZpbmlzaGVkCisgICAgICAgIGlmIHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBhbGwocCBpcyBub3QgTm9uZSBhbmQgcC5kaXNjb25uZWN0ZWQKKyAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuX3BpcGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIFdyaXRlU3VicHJvY2Vzc1BpcGVQcm90byhwcm90b2NvbHMuQmFzZVByb3RvY29sKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jLCBmZCk6CisgICAgICAgIHNlbGYucHJvYyA9IHByb2MKKyAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgICAgIHNlbGYucGlwZSA9IE5vbmUKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0ZWQgPSBGYWxzZQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnBpcGUgPSB0cmFuc3BvcnQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgnPCVzIGZkPSVzIHBpcGU9JXI+JworICAgICAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmZkLCBzZWxmLnBpcGUpKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBzZWxmLmRpc2Nvbm5lY3RlZCA9IFRydWUKKyAgICAgICAgc2VsZi5wcm9jLl9waXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLmZkLCBleGMpCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jLl9wcm90b2NvbC5wYXVzZV93cml0aW5nKCkKKworICAgIGRlZiByZXN1bWVfd3JpdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jLl9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisKKworY2xhc3MgUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLlByb3RvY29sKToKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnByb2MuX3BpcGVfZGF0YV9yZWNlaXZlZChzZWxmLmZkLCBkYXRhKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5IGIvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTEyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9jb25zdGFudHMucHkKQEAgLTAsMCArMSw3IEBACisiIiJDb25zdGFudHMuIiIiCisKKyMgQWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgbG9zdCwgbG9nIHdhcm5pbmdzIGFmdGVyIHRoaXMgbWFueSB3cml0ZSgpcy4KK0xPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUyA9IDUKKworIyBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGFjY2VwdCgpLgorQUNDRVBUX1JFVFJZX0RFTEFZID0gMQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29yb3V0aW5lcy5weSBiL0xpYi9hc3luY2lvL2Nvcm91dGluZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4ZGU5NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Nvcm91dGluZXMucHkKQEAgLTAsMCArMSwxOTUgQEAKK19fYWxsX18gPSBbJ2Nvcm91dGluZScsCisgICAgICAgICAgICdpc2Nvcm91dGluZWZ1bmN0aW9uJywgJ2lzY29yb3V0aW5lJ10KKworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBvcGNvZGUKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHR5cGVzCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworIyBPcGNvZGUgb2YgInlpZWxkIGZyb20iIGluc3RydWN0aW9uCitfWUlFTERfRlJPTSA9IG9wY29kZS5vcG1hcFsnWUlFTERfRlJPTSddCisKKyMgSWYgeW91IHNldCBfREVCVUcgdG8gdHJ1ZSwgQGNvcm91dGluZSB3aWxsIHdyYXAgdGhlIHJlc3VsdGluZworIyBnZW5lcmF0b3Igb2JqZWN0cyBpbiBhIENvcm9XcmFwcGVyIGluc3RhbmNlIChkZWZpbmVkIGJlbG93KS4gIFRoYXQKKyMgaW5zdGFuY2Ugd2lsbCBsb2cgYSBtZXNzYWdlIHdoZW4gdGhlIGdlbmVyYXRvciBpcyBuZXZlciBpdGVyYXRlZAorIyBvdmVyLCB3aGljaCBtYXkgaGFwcGVuIHdoZW4geW91IGZvcmdldCB0byB1c2UgInlpZWxkIGZyb20iIHdpdGggYQorIyBjb3JvdXRpbmUgY2FsbC4gIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIF9ERUJVRyBmbGFnIGlzIHRha2VuCisjIHdoZW4gdGhlIGRlY29yYXRvciBpcyB1c2VkLCBzbyB0byBiZSBvZiBhbnkgdXNlIGl0IG11c3QgYmUgc2V0CisjIGJlZm9yZSB5b3UgZGVmaW5lIHlvdXIgY29yb3V0aW5lcy4gIEEgZG93bnNpZGUgb2YgdXNpbmcgdGhpcyBmZWF0dXJlCisjIGlzIHRoYXQgdHJhY2ViYWNrcyBzaG93IGVudHJpZXMgZm9yIHRoZSBDb3JvV3JhcHBlci5fX25leHRfXyBtZXRob2QKKyMgd2hlbiBfREVCVUcgaXMgdHJ1ZS4KK19ERUJVRyA9IChub3Qgc3lzLmZsYWdzLmlnbm9yZV9lbnZpcm9ubWVudAorICAgICAgICAgIGFuZCBib29sKG9zLmVudmlyb24uZ2V0KCdQWVRIT05BU1lOQ0lPREVCVUcnKSkpCisKKworIyBDaGVjayBmb3IgQ1B5dGhvbiBpc3N1ZSAjMjEyMDkKK2RlZiBoYXNfeWllbGRfZnJvbV9idWcoKToKKyAgICBjbGFzcyBNeUdlbjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2FyZ3MgPSBOb25lCisgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICBkZWYgc2VuZChzZWxmLCAqd2hhdCk6CisgICAgICAgICAgICBzZWxmLnNlbmRfYXJncyA9IHdoYXQKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgZGVmIHlpZWxkX2Zyb21fZ2VuKGdlbik6CisgICAgICAgIHlpZWxkIGZyb20gZ2VuCisgICAgdmFsdWUgPSAoMSwgMiwgMykKKyAgICBnZW4gPSBNeUdlbigpCisgICAgY29ybyA9IHlpZWxkX2Zyb21fZ2VuKGdlbikKKyAgICBuZXh0KGNvcm8pCisgICAgY29yby5zZW5kKHZhbHVlKQorICAgIHJldHVybiBnZW4uc2VuZF9hcmdzICE9ICh2YWx1ZSwpCitfWUlFTERfRlJPTV9CVUcgPSBoYXNfeWllbGRfZnJvbV9idWcoKQorZGVsIGhhc195aWVsZF9mcm9tX2J1ZworCisKK2NsYXNzIENvcm9XcmFwcGVyOgorICAgICMgV3JhcHBlciBmb3IgY29yb3V0aW5lIG9iamVjdCBpbiBfREVCVUcgbW9kZS4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW4sIGZ1bmMpOgorICAgICAgICBhc3NlcnQgaW5zcGVjdC5pc2dlbmVyYXRvcihnZW4pLCBnZW4KKyAgICAgICAgc2VsZi5nZW4gPSBnZW4KKyAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrID0gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKyAgICAgICAgIyBfX25hbWVfXywgX19xdWFsbmFtZV9fLCBfX2RvY19fIGF0dHJpYnV0ZXMgYXJlIHNldCBieSB0aGUgY29yb3V0aW5lKCkKKyAgICAgICAgIyBkZWNvcmF0b3IKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgY29yb19yZXByID0gX2Zvcm1hdF9jb3JvdXRpbmUoc2VsZikKKyAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGZyYW1lID0gc2VsZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgICAgIGNvcm9fcmVwciArPSAnLCBjcmVhdGVkIGF0ICVzOiVzJyAlIChmcmFtZVswXSwgZnJhbWVbMV0pCisgICAgICAgIHJldHVybiAnPCVzICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGNvcm9fcmVwcikKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG5leHQoc2VsZi5nZW4pCisKKyAgICBpZiBfWUlFTERfRlJPTV9CVUc6CisgICAgICAgICMgRm9yIGZvciBDUHl0aG9uIGlzc3VlICMyMTIwOTogdXNpbmcgInlpZWxkIGZyb20iIGFuZCBhIGN1c3RvbQorICAgICAgICAjIGdlbmVyYXRvciwgZ2VuZXJhdG9yLnNlbmQodHVwbGUpIHVucGFja3MgdGhlIHR1cGxlIGluc3RlYWQgb2YgcGFzc2luZworICAgICAgICAjIHRoZSB0dXBsZSB1bmNoYW5nZWQuIENoZWNrIGlmIHRoZSBjYWxsZXIgaXMgYSBnZW5lcmF0b3IgdXNpbmcgInlpZWxkCisgICAgICAgICMgZnJvbSIgdG8gZGVjaWRlIGlmIHRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHVucGFja2VkIG9yIG5vdC4KKyAgICAgICAgZGVmIHNlbmQoc2VsZiwgKnZhbHVlKToKKyAgICAgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpCisgICAgICAgICAgICBjYWxsZXIgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgICAgIGFzc2VydCBjYWxsZXIuZl9sYXN0aSA+PSAwCisgICAgICAgICAgICBpZiBjYWxsZXIuZl9jb2RlLmNvX2NvZGVbY2FsbGVyLmZfbGFzdGldICE9IF9ZSUVMRF9GUk9NOgorICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMF0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbi5zZW5kKHZhbHVlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBzZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbi5zZW5kKHZhbHVlKQorCisgICAgZGVmIHRocm93KHNlbGYsIGV4Yyk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi50aHJvdyhleGMpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5jbG9zZSgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZ2lfZnJhbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5naV9mcmFtZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGdpX3J1bm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5naV9ydW5uaW5nCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZ2lfY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmdpX2NvZGUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAjIEJlIGNhcmVmdWwgYWNjZXNzaW5nIHNlbGYuZ2VuLmZyYW1lIC0tIHNlbGYuZ2VuIG1pZ2h0IG5vdCBleGlzdC4KKyAgICAgICAgZ2VuID0gZ2V0YXR0cihzZWxmLCAnZ2VuJywgTm9uZSkKKyAgICAgICAgZnJhbWUgPSBnZXRhdHRyKGdlbiwgJ2dpX2ZyYW1lJywgTm9uZSkKKyAgICAgICAgaWYgZnJhbWUgaXMgbm90IE5vbmUgYW5kIGZyYW1lLmZfbGFzdGkgPT0gLTE6CisgICAgICAgICAgICBtc2cgPSAnJXIgd2FzIG5ldmVyIHlpZWxkZWQgZnJvbScgJSBzZWxmCisgICAgICAgICAgICB0YiA9IGdldGF0dHIoc2VsZiwgJ19zb3VyY2VfdHJhY2ViYWNrJywgKCkpCisgICAgICAgICAgICBpZiB0YjoKKyAgICAgICAgICAgICAgICB0YiA9ICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9saXN0KHRiKSkKKyAgICAgICAgICAgICAgICBtc2cgKz0gKCdcbkNvcm91dGluZSBvYmplY3QgY3JlYXRlZCBhdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAnKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nKQorICAgICAgICAgICAgICAgIG1zZyArPSB0Yi5yc3RyaXAoKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZykKKworCitkZWYgY29yb3V0aW5lKGZ1bmMpOgorICAgICIiIkRlY29yYXRvciB0byBtYXJrIGNvcm91dGluZXMuCisKKyAgICBJZiB0aGUgY29yb3V0aW5lIGlzIG5vdCB5aWVsZGVkIGZyb20gYmVmb3JlIGl0IGlzIGRlc3Ryb3llZCwKKyAgICBhbiBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZC4KKyAgICAiIiIKKyAgICBpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24oZnVuYyk6CisgICAgICAgIGNvcm8gPSBmdW5jCisgICAgZWxzZToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgY29ybygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXMgPSBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXMsIGZ1dHVyZXMuRnV0dXJlKSBvciBpbnNwZWN0LmlzZ2VuZXJhdG9yKHJlcyk6CisgICAgICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSByZXMKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgIGlmIG5vdCBfREVCVUc6CisgICAgICAgIHdyYXBwZXIgPSBjb3JvCisgICAgZWxzZToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHcgPSBDb3JvV3JhcHBlcihjb3JvKCphcmdzLCAqKmt3ZHMpLCBmdW5jKQorICAgICAgICAgICAgaWYgdy5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICBkZWwgdy5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgICAgIHcuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCisgICAgICAgICAgICBpZiBoYXNhdHRyKGZ1bmMsICdfX3F1YWxuYW1lX18nKToKKyAgICAgICAgICAgICAgICB3Ll9fcXVhbG5hbWVfXyA9IGZ1bmMuX19xdWFsbmFtZV9fCisgICAgICAgICAgICB3Ll9fZG9jX18gPSBmdW5jLl9fZG9jX18KKyAgICAgICAgICAgIHJldHVybiB3CisKKyAgICB3cmFwcGVyLl9pc19jb3JvdXRpbmUgPSBUcnVlICAjIEZvciBpc2Nvcm91dGluZWZ1bmN0aW9uKCkuCisgICAgcmV0dXJuIHdyYXBwZXIKKworCitkZWYgaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBmdW5jIGlzIGEgZGVjb3JhdGVkIGNvcm91dGluZSBmdW5jdGlvbi4iIiIKKyAgICByZXR1cm4gZ2V0YXR0cihmdW5jLCAnX2lzX2Nvcm91dGluZScsIEZhbHNlKQorCisKK19DT1JPVVRJTkVfVFlQRVMgPSAodHlwZXMuR2VuZXJhdG9yVHlwZSwgQ29yb1dyYXBwZXIpCisKK2RlZiBpc2Nvcm91dGluZShvYmopOgorICAgICIiIlJldHVybiBUcnVlIGlmIG9iaiBpcyBhIGNvcm91dGluZSBvYmplY3QuIiIiCisgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqLCBfQ09ST1VUSU5FX1RZUEVTKQorCisKK2RlZiBfZm9ybWF0X2Nvcm91dGluZShjb3JvKToKKyAgICBhc3NlcnQgaXNjb3JvdXRpbmUoY29ybykKKyAgICBjb3JvX25hbWUgPSBnZXRhdHRyKGNvcm8sICdfX3F1YWxuYW1lX18nLCBjb3JvLl9fbmFtZV9fKQorCisgICAgZmlsZW5hbWUgPSBjb3JvLmdpX2NvZGUuY29fZmlsZW5hbWUKKyAgICBpZiAoaXNpbnN0YW5jZShjb3JvLCBDb3JvV3JhcHBlcikKKyAgICBhbmQgbm90IGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbihjb3JvLmZ1bmMpKToKKyAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IGV2ZW50cy5fZ2V0X2Z1bmN0aW9uX3NvdXJjZShjb3JvLmZ1bmMpCisgICAgICAgIGlmIGNvcm8uZ2lfZnJhbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGNvcm9fcmVwciA9ICclcygpIGRvbmUsIGRlZmluZWQgYXQgJXM6JXMnICUgKGNvcm9fbmFtZSwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvcm9fcmVwciA9ICclcygpIHJ1bm5pbmcsIGRlZmluZWQgYXQgJXM6JXMnICUgKGNvcm9fbmFtZSwgZmlsZW5hbWUsIGxpbmVubykKKyAgICBlbGlmIGNvcm8uZ2lfZnJhbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGxpbmVubyA9IGNvcm8uZ2lfZnJhbWUuZl9saW5lbm8KKyAgICAgICAgY29yb19yZXByID0gJyVzKCkgcnVubmluZyBhdCAlczolcycgJSAoY29yb19uYW1lLCBmaWxlbmFtZSwgbGluZW5vKQorICAgIGVsc2U6CisgICAgICAgIGxpbmVubyA9IGNvcm8uZ2lfY29kZS5jb19maXJzdGxpbmVubworICAgICAgICBjb3JvX3JlcHIgPSAnJXMoKSBkb25lLCBkZWZpbmVkIGF0ICVzOiVzJyAlIChjb3JvX25hbWUsIGZpbGVuYW1lLCBsaW5lbm8pCisKKyAgICByZXR1cm4gY29yb19yZXByCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M3YTM2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2V2ZW50cy5weQpAQCAtMCwwICsxLDU4MCBAQAorIiIiRXZlbnQgbG9vcCBhbmQgZXZlbnQgbG9vcCBwb2xpY3kuIiIiCisKK19fYWxsX18gPSBbJ0Fic3RyYWN0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgJ0Fic3RyYWN0RXZlbnRMb29wJywgJ0Fic3RyYWN0U2VydmVyJywKKyAgICAgICAgICAgJ0hhbmRsZScsICdUaW1lckhhbmRsZScsCisgICAgICAgICAgICdnZXRfZXZlbnRfbG9vcF9wb2xpY3knLCAnc2V0X2V2ZW50X2xvb3BfcG9saWN5JywKKyAgICAgICAgICAgJ2dldF9ldmVudF9sb29wJywgJ3NldF9ldmVudF9sb29wJywgJ25ld19ldmVudF9sb29wJywKKyAgICAgICAgICAgJ2dldF9jaGlsZF93YXRjaGVyJywgJ3NldF9jaGlsZF93YXRjaGVyJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IHJlcHJsaWIKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdHJhY2ViYWNrCisKKworX1BZMzQgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA0KQorCisKK2RlZiBfZ2V0X2Z1bmN0aW9uX3NvdXJjZShmdW5jKToKKyAgICBpZiBfUFkzNDoKKyAgICAgICAgZnVuYyA9IGluc3BlY3QudW53cmFwKGZ1bmMpCisgICAgZWxpZiBoYXNhdHRyKGZ1bmMsICdfX3dyYXBwZWRfXycpOgorICAgICAgICBmdW5jID0gZnVuYy5fX3dyYXBwZWRfXworICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihmdW5jKToKKyAgICAgICAgY29kZSA9IGZ1bmMuX19jb2RlX18KKyAgICAgICAgcmV0dXJuIChjb2RlLmNvX2ZpbGVuYW1lLCBjb2RlLmNvX2ZpcnN0bGluZW5vKQorICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgZnVuY3Rvb2xzLnBhcnRpYWwpOgorICAgICAgICByZXR1cm4gX2dldF9mdW5jdGlvbl9zb3VyY2UoZnVuYy5mdW5jKQorICAgIGlmIF9QWTM0IGFuZCBpc2luc3RhbmNlKGZ1bmMsIGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKToKKyAgICAgICAgcmV0dXJuIF9nZXRfZnVuY3Rpb25fc291cmNlKGZ1bmMuZnVuYykKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBfZm9ybWF0X2FyZ3MoYXJncyk6CisgICAgIiIiRm9ybWF0IGZ1bmN0aW9uIGFyZ3VtZW50cy4KKworICAgIFNwZWNpYWwgY2FzZSBmb3IgYSBzaW5nbGUgcGFyYW1ldGVyOiAoJ2hlbGxvJywpIGlzIGZvcm1hdHRlZCBhcyAoJ2hlbGxvJykuCisgICAgIiIiCisgICAgIyB1c2UgcmVwcmxpYiB0byBsaW1pdCB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQKKyAgICBhcmdzX3JlcHIgPSByZXBybGliLnJlcHIoYXJncykKKyAgICBpZiBsZW4oYXJncykgPT0gMSBhbmQgYXJnc19yZXByLmVuZHN3aXRoKCcsKScpOgorICAgICAgICBhcmdzX3JlcHIgPSBhcmdzX3JlcHJbOi0yXSArICcpJworICAgIHJldHVybiBhcmdzX3JlcHIKKworCitkZWYgX2Zvcm1hdF9jYWxsYmFjayhmdW5jLCBhcmdzLCBzdWZmaXg9JycpOgorICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgZnVuY3Rvb2xzLnBhcnRpYWwpOgorICAgICAgICBpZiBhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3VmZml4ID0gX2Zvcm1hdF9hcmdzKGFyZ3MpICsgc3VmZml4CisgICAgICAgIHJldHVybiBfZm9ybWF0X2NhbGxiYWNrKGZ1bmMuZnVuYywgZnVuYy5hcmdzLCBzdWZmaXgpCisKKyAgICBmdW5jX3JlcHIgPSBnZXRhdHRyKGZ1bmMsICdfX3F1YWxuYW1lX18nLCBOb25lKQorICAgIGlmIG5vdCBmdW5jX3JlcHI6CisgICAgICAgIGZ1bmNfcmVwciA9IHJlcHIoZnVuYykKKworICAgIGlmIGFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGZ1bmNfcmVwciArPSBfZm9ybWF0X2FyZ3MoYXJncykKKyAgICBpZiBzdWZmaXg6CisgICAgICAgIGZ1bmNfcmVwciArPSBzdWZmaXgKKworICAgIHNvdXJjZSA9IF9nZXRfZnVuY3Rpb25fc291cmNlKGZ1bmMpCisgICAgaWYgc291cmNlOgorICAgICAgICBmdW5jX3JlcHIgKz0gJyBhdCAlczolcycgJSBzb3VyY2UKKyAgICByZXR1cm4gZnVuY19yZXByCisKKworY2xhc3MgSGFuZGxlOgorICAgICIiIk9iamVjdCByZXR1cm5lZCBieSBjYWxsYmFjayByZWdpc3RyYXRpb24gbWV0aG9kcy4iIiIKKworICAgIF9fc2xvdHNfXyA9ICgnX2NhbGxiYWNrJywgJ19hcmdzJywgJ19jYW5jZWxsZWQnLCAnX2xvb3AnLAorICAgICAgICAgICAgICAgICAnX3NvdXJjZV90cmFjZWJhY2snLCAnX193ZWFrcmVmX18nKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxiYWNrLCBhcmdzLCBsb29wKToKKyAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKGNhbGxiYWNrLCBIYW5kbGUpLCAnQSBIYW5kbGUgaXMgbm90IGEgY2FsbGJhY2snCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX2NhbGxiYWNrID0gY2FsbGJhY2sKKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIHNlbGYuX3NvdXJjZV90cmFjZWJhY2sgPSB0cmFjZWJhY2suZXh0cmFjdF9zdGFjayhzeXMuX2dldGZyYW1lKDEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc291cmNlX3RyYWNlYmFjayA9IE5vbmUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaW5mbyA9IFtzZWxmLl9fY2xhc3NfXy5fX25hbWVfX10KKyAgICAgICAgaWYgc2VsZi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2NhbmNlbGxlZCcpCisgICAgICAgIGlmIHNlbGYuX2NhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoX2Zvcm1hdF9jYWxsYmFjayhzZWxmLl9jYWxsYmFjaywgc2VsZi5fYXJncykpCisgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBmcmFtZSA9IHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY3JlYXRlZCBhdCAlczolcycgJSAoZnJhbWVbMF0sIGZyYW1lWzFdKSkKKyAgICAgICAgcmV0dXJuICc8JXM+JyAlICcgJy5qb2luKGluZm8pCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2NhbGxiYWNrID0gTm9uZQorICAgICAgICBzZWxmLl9hcmdzID0gTm9uZQorCisgICAgZGVmIF9ydW4oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrKCpzZWxmLl9hcmdzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGNiID0gX2Zvcm1hdF9jYWxsYmFjayhzZWxmLl9jYWxsYmFjaywgc2VsZi5fYXJncykKKyAgICAgICAgICAgIG1zZyA9ICdFeGNlcHRpb24gaW4gY2FsbGJhY2sge30nLmZvcm1hdChjYikKKyAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBtc2csCisgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAnaGFuZGxlJzogc2VsZiwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgY29udGV4dFsnc291cmNlX3RyYWNlYmFjayddID0gc2VsZi5fc291cmNlX3RyYWNlYmFjaworICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisgICAgICAgIHNlbGYgPSBOb25lICAjIE5lZWRlZCB0byBicmVhayBjeWNsZXMgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLgorCisKK2NsYXNzIFRpbWVySGFuZGxlKEhhbmRsZSk6CisgICAgIiIiT2JqZWN0IHJldHVybmVkIGJ5IHRpbWVkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBtZXRob2RzLiIiIgorCisgICAgX19zbG90c19fID0gWydfd2hlbiddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2hlbiwgY2FsbGJhY2ssIGFyZ3MsIGxvb3ApOgorICAgICAgICBhc3NlcnQgd2hlbiBpcyBub3QgTm9uZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGNhbGxiYWNrLCBhcmdzLCBsb29wKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHNlbGYuX3doZW4gPSB3aGVuCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbXQorICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2FuY2VsbGVkJykKKyAgICAgICAgaW5mby5hcHBlbmQoJ3doZW49JXMnICUgc2VsZi5fd2hlbikKKyAgICAgICAgaWYgc2VsZi5fY2FsbGJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZChfZm9ybWF0X2NhbGxiYWNrKHNlbGYuX2NhbGxiYWNrLCBzZWxmLl9hcmdzKSkKKyAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGZyYW1lID0gc2VsZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjcmVhdGVkIGF0ICVzOiVzJyAlIChmcmFtZVswXSwgZnJhbWVbMV0pKQorICAgICAgICByZXR1cm4gJzwlcyAlcz4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnICcuam9pbihpbmZvKSkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fd2hlbikKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2hlbiA8IG90aGVyLl93aGVuCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fd2hlbiA8IG90aGVyLl93aGVuOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl93aGVuID4gb3RoZXIuX3doZW4KKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl93aGVuID4gb3RoZXIuX3doZW46CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGltZXJIYW5kbGUpOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl93aGVuID09IG90aGVyLl93aGVuIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjayA9PSBvdGhlci5fY2FsbGJhY2sgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPT0gb3RoZXIuX2FyZ3MgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9PSBvdGhlci5fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBlcXVhbCA9IHNlbGYuX19lcV9fKG90aGVyKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQgaWYgZXF1YWwgaXMgTm90SW1wbGVtZW50ZWQgZWxzZSBub3QgZXF1YWwKKworCitjbGFzcyBBYnN0cmFjdFNlcnZlcjoKKyAgICAiIiJBYnN0cmFjdCBzZXJ2ZXIgcmV0dXJuZWQgYnkgY3JlYXRlX3NlcnZlcigpLiIiIgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHNlcnZpbmcuICBUaGlzIGxlYXZlcyBleGlzdGluZyBjb25uZWN0aW9ucyBvcGVuLiIiIgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiB3YWl0X2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiQ29yb3V0aW5lIHRvIHdhaXQgdW50aWwgc2VydmljZSBpcyBjbG9zZWQuIiIiCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wOgorICAgICIiIkFic3RyYWN0IGV2ZW50IGxvb3AuIiIiCisKKyAgICAjIFJ1bm5pbmcgYW5kIHN0b3BwaW5nIHRoZSBldmVudCBsb29wLgorCisgICAgZGVmIHJ1bl9mb3JldmVyKHNlbGYpOgorICAgICAgICAiIiJSdW4gdGhlIGV2ZW50IGxvb3AgdW50aWwgc3RvcCgpIGlzIGNhbGxlZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLCBmdXR1cmUpOgorICAgICAgICAiIiJSdW4gdGhlIGV2ZW50IGxvb3AgdW50aWwgYSBGdXR1cmUgaXMgZG9uZS4KKworICAgICAgICBSZXR1cm4gdGhlIEZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2UgaXRzIGV4Y2VwdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBldmVudCBsb29wIGFzIHNvb24gYXMgcmVhc29uYWJsZS4KKworICAgICAgICBFeGFjdGx5IGhvdyBzb29uIHRoYXQgaXMgbWF5IGRlcGVuZCBvbiB0aGUgaW1wbGVtZW50YXRpb24sIGJ1dAorICAgICAgICBubyBtb3JlIEkvTyBjYWxsYmFja3Mgc2hvdWxkIGJlIHNjaGVkdWxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgZXZlbnQgbG9vcCBpcyBjdXJyZW50bHkgcnVubmluZy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBsb29wIHdhcyBjbG9zZWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIGxvb3AuCisKKyAgICAgICAgVGhlIGxvb3Agc2hvdWxkIG5vdCBiZSBydW5uaW5nLgorCisgICAgICAgIFRoaXMgaXMgaWRlbXBvdGVudCBhbmQgaXJyZXZlcnNpYmxlLgorCisgICAgICAgIE5vIG90aGVyIG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGlzIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgTWV0aG9kcyBzY2hlZHVsaW5nIGNhbGxiYWNrcy4gIEFsbCB0aGVzZSByZXR1cm4gSGFuZGxlcy4KKworICAgIGRlZiBjYWxsX3Nvb24oc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbF9sYXRlcigwLCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgICBkZWYgY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNhbGxfYXQoc2VsZiwgd2hlbiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHRpbWUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgTWV0aG9kIHNjaGVkdWxpbmcgYSBjb3JvdXRpbmUgb2JqZWN0OiBjcmVhdGUgYSB0YXNrLgorCisgICAgZGVmIGNyZWF0ZV90YXNrKHNlbGYsIGNvcm8pOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhyZWFkcy4KKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX2luX2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE5ldHdvcmsgSS9PIG1ldGhvZHMgcmV0dXJuaW5nIEZ1dHVyZXMuCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wLCBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywgZmxhZ3M9c29ja2V0LkFJX1BBU1NJVkUsCisgICAgICAgICAgICAgICAgICAgICAgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUsIHJldXNlX2FkZHJlc3M9Tm9uZSk6CisgICAgICAgICIiIkEgY29yb3V0aW5lIHdoaWNoIGNyZWF0ZXMgYSBUQ1Agc2VydmVyIGJvdW5kIHRvIGhvc3QgYW5kIHBvcnQuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIFNlcnZlciBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcAorICAgICAgICB0aGUgc2VydmljZS4KKworICAgICAgICBJZiBob3N0IGlzIGFuIGVtcHR5IHN0cmluZyBvciBOb25lIGFsbCBpbnRlcmZhY2VzIGFyZSBhc3N1bWVkCisgICAgICAgIGFuZCBhIGxpc3Qgb2YgbXVsdGlwbGUgc29ja2V0cyB3aWxsIGJlIHJldHVybmVkIChtb3N0IGxpa2VseQorICAgICAgICBvbmUgZm9yIElQdjQgYW5kIGFub3RoZXIgb25lIGZvciBJUHY2KS4KKworICAgICAgICBmYW1pbHkgY2FuIGJlIHNldCB0byBlaXRoZXIgQUZfSU5FVCBvciBBRl9JTkVUNiB0byBmb3JjZSB0aGUKKyAgICAgICAgc29ja2V0IHRvIHVzZSBJUHY0IG9yIElQdjYuIElmIG5vdCBzZXQgaXQgd2lsbCBiZSBkZXRlcm1pbmVkCisgICAgICAgIGZyb20gaG9zdCAoZGVmYXVsdHMgdG8gQUZfVU5TUEVDKS4KKworICAgICAgICBmbGFncyBpcyBhIGJpdG1hc2sgZm9yIGdldGFkZHJpbmZvKCkuCisKKyAgICAgICAgc29jayBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8gdXNlIGEgcHJlZXhpc3RpbmcKKyAgICAgICAgc29ja2V0IG9iamVjdC4KKworICAgICAgICBiYWNrbG9nIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29ubmVjdGlvbnMgcGFzc2VkIHRvCisgICAgICAgIGxpc3RlbigpIChkZWZhdWx0cyB0byAxMDApLgorCisgICAgICAgIHNzbCBjYW4gYmUgc2V0IHRvIGFuIFNTTENvbnRleHQgdG8gZW5hYmxlIFNTTCBvdmVyIHRoZQorICAgICAgICBhY2NlcHRlZCBjb25uZWN0aW9ucy4KKworICAgICAgICByZXVzZV9hZGRyZXNzIHRlbGxzIHRoZSBrZXJuZWwgdG8gcmV1c2UgYSBsb2NhbCBzb2NrZXQgaW4KKyAgICAgICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgICAgICAgZXhwaXJlLiBJZiBub3Qgc3BlY2lmaWVkIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gVHJ1ZSBvbgorICAgICAgICBVTklYLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGF0aCwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV91bml4X3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwYXRoLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUpOgorICAgICAgICAiIiJBIGNvcm91dGluZSB3aGljaCBjcmVhdGVzIGEgVU5JWCBEb21haW4gU29ja2V0IHNlcnZlci4KKworICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgU2VydmVyIG9iamVjdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcAorICAgICAgICB0aGUgc2VydmljZS4KKworICAgICAgICBwYXRoIGlzIGEgc3RyLCByZXByZXNlbnRpbmcgYSBmaWxlIHN5c3RzZW0gcGF0aCB0byBiaW5kIHRoZQorICAgICAgICBzZXJ2ZXIgc29ja2V0IHRvLgorCisgICAgICAgIHNvY2sgY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRvIHVzZSBhIHByZWV4aXN0aW5nCisgICAgICAgIHNvY2tldCBvYmplY3QuCisKKyAgICAgICAgYmFja2xvZyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbm5lY3Rpb25zIHBhc3NlZCB0bworICAgICAgICBsaXN0ZW4oKSAoZGVmYXVsdHMgdG8gMTAwKS4KKworICAgICAgICBzc2wgY2FuIGJlIHNldCB0byBhbiBTU0xDb250ZXh0IHRvIGVuYWJsZSBTU0wgb3ZlciB0aGUKKyAgICAgICAgYWNjZXB0ZWQgY29ubmVjdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYsIHByb3RvY29sX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHJlbW90ZV9hZGRyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgUGlwZXMgYW5kIHN1YnByb2Nlc3Nlcy4KKworICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgcmVhZCBwaXBlIGluIGV2ZW50IGxvb3AuIFNldCB0aGUgcGlwZSB0byBub24tYmxvY2tpbmcgbW9kZS4KKworICAgICAgICBwcm90b2NvbF9mYWN0b3J5IHNob3VsZCBpbnN0YW50aWF0ZSBvYmplY3Qgd2l0aCBQcm90b2NvbCBpbnRlcmZhY2UuCisgICAgICAgIHBpcGUgaXMgYSBmaWxlLWxpa2Ugb2JqZWN0LgorICAgICAgICBSZXR1cm4gcGFpciAodHJhbnNwb3J0LCBwcm90b2NvbCksIHdoZXJlIHRyYW5zcG9ydCBzdXBwb3J0cyB0aGUKKyAgICAgICAgUmVhZFRyYW5zcG9ydCBpbnRlcmZhY2UuIiIiCisgICAgICAgICMgVGhlIHJlYXNvbiB0byBhY2NlcHQgZmlsZS1saWtlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3QgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICMgaXM6IHdlIG5lZWQgdG8gb3duIHBpcGUgYW5kIGNsb3NlIGl0IGF0IHRyYW5zcG9ydCBmaW5pc2hpbmcKKyAgICAgICAgIyBDYW4gZ290IGNvbXBsaWNhdGVkIGVycm9ycyBpZiBwYXNzIGYuZmlsZW5vKCksCisgICAgICAgICMgY2xvc2UgZmQgaW4gcGlwZSB0cmFuc3BvcnQgdGhlbiBjbG9zZSBmIGFuZCB2aXNlIHZlcnNhLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY29ubmVjdF93cml0ZV9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICAiIiJSZWdpc3RlciB3cml0ZSBwaXBlIGluIGV2ZW50IGxvb3AuCisKKyAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggQmFzZVByb3RvY29sIGludGVyZmFjZS4KKyAgICAgICAgUGlwZSBpcyBmaWxlLWxpa2Ugb2JqZWN0IGFscmVhZHkgc3dpdGNoZWQgdG8gbm9uYmxvY2tpbmcuCisgICAgICAgIFJldHVybiBwYWlyICh0cmFuc3BvcnQsIHByb3RvY29sKSwgd2hlcmUgdHJhbnNwb3J0IHN1cHBvcnQKKyAgICAgICAgV3JpdGVUcmFuc3BvcnQgaW50ZXJmYWNlLiIiIgorICAgICAgICAjIFRoZSByZWFzb24gdG8gYWNjZXB0IGZpbGUtbGlrZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAjIGlzOiB3ZSBuZWVkIHRvIG93biBwaXBlIGFuZCBjbG9zZSBpdCBhdCB0cmFuc3BvcnQgZmluaXNoaW5nCisgICAgICAgICMgQ2FuIGdvdCBjb21wbGljYXRlZCBlcnJvcnMgaWYgcGFzcyBmLmZpbGVubygpLAorICAgICAgICAjIGNsb3NlIGZkIGluIHBpcGUgdHJhbnNwb3J0IHRoZW4gY2xvc2UgZiBhbmQgdmlzZSB2ZXJzYS4KKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN1YnByb2Nlc3Nfc2hlbGwoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgY21kLCAqLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzdWJwcm9jZXNzX2V4ZWMoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgKmFyZ3MsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgUmVhZHktYmFzZWQgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuCisgICAgIyBUaGUgYWRkXyooKSBtZXRob2RzIHJldHVybiBOb25lLgorICAgICMgVGhlIHJlbW92ZV8qKCkgbWV0aG9kcyByZXR1cm4gVHJ1ZSBpZiBzb21ldGhpbmcgd2FzIHJlbW92ZWQsCisgICAgIyBGYWxzZSBpZiB0aGVyZSB3YXMgbm90aGluZyB0byBkZWxldGUuCisKKyAgICBkZWYgYWRkX3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlbW92ZV9yZWFkZXIoc2VsZiwgZmQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlbW92ZV93cml0ZXIoc2VsZiwgZmQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIENvbXBsZXRpb24gYmFzZWQgSS9PIG1ldGhvZHMgcmV0dXJuaW5nIEZ1dHVyZXMuCisKKyAgICBkZWYgc29ja19yZWN2KHNlbGYsIHNvY2ssIG5ieXRlcyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzb2NrX3NlbmRhbGwoc2VsZiwgc29jaywgZGF0YSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzb2NrX2Nvbm5lY3Qoc2VsZiwgc29jaywgYWRkcmVzcyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzb2NrX2FjY2VwdChzZWxmLCBzb2NrKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBTaWduYWwgaGFuZGxpbmcuCisKKyAgICBkZWYgYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZywgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlbW92ZV9zaWduYWxfaGFuZGxlcihzZWxmLCBzaWcpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIEVycm9yIGhhbmRsZXJzLgorCisgICAgZGVmIHNldF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGRlZmF1bHRfZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYsIGNvbnRleHQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIERlYnVnIGZsYWcgbWFuYWdlbWVudC4KKworICAgIGRlZiBnZXRfZGVidWcoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfZGVidWcoc2VsZiwgZW5hYmxlZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeToKKyAgICAiIiJBYnN0cmFjdCBwb2xpY3kgZm9yIGFjY2Vzc2luZyB0aGUgZXZlbnQgbG9vcC4iIiIKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBldmVudCBsb29wIGZvciB0aGUgY3VycmVudCBjb250ZXh0LgorCisgICAgICAgIFJldHVybnMgYW4gZXZlbnQgbG9vcCBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBCYXNlRXZlbnRMb29wIGludGVyZmFjZSwKKyAgICAgICAgb3IgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpbiBjYXNlIG5vIGV2ZW50IGxvb3AgaGFzIGJlZW4gc2V0IGZvciB0aGUKKyAgICAgICAgY3VycmVudCBjb250ZXh0IGFuZCB0aGUgY3VycmVudCBwb2xpY3kgZG9lcyBub3Qgc3BlY2lmeSB0byBjcmVhdGUgb25lLgorCisgICAgICAgIEl0IHNob3VsZCBuZXZlciByZXR1cm4gTm9uZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJTZXQgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gbG9vcC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG5ld19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBldmVudCBsb29wIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhpcworICAgICAgICBwb2xpY3kncyBydWxlcy4gSWYgdGhlcmUncyBuZWVkIHRvIHNldCB0aGlzIGxvb3AgYXMgdGhlIGV2ZW50IGxvb3AgZm9yCisgICAgICAgIHRoZSBjdXJyZW50IGNvbnRleHQsIHNldF9ldmVudF9sb29wIG11c3QgYmUgY2FsbGVkIGV4cGxpY2l0bHkuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgQ2hpbGQgcHJvY2Vzc2VzIGhhbmRsaW5nIChVbml4IG9ubHkpLgorCisgICAgZGVmIGdldF9jaGlsZF93YXRjaGVyKHNlbGYpOgorICAgICAgICAiR2V0IHRoZSB3YXRjaGVyIGZvciBjaGlsZCBwcm9jZXNzZXMuIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2NoaWxkX3dhdGNoZXIoc2VsZiwgd2F0Y2hlcik6CisgICAgICAgICIiIlNldCB0aGUgd2F0Y2hlciBmb3IgY2hpbGQgcHJvY2Vzc2VzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3koQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpOgorICAgICIiIkRlZmF1bHQgcG9saWN5IGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBJbiB0aGlzIHBvbGljeSwgZWFjaCB0aHJlYWQgaGFzIGl0cyBvd24gZXZlbnQgbG9vcC4gIEhvd2V2ZXIsIHdlCisgICAgb25seSBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhbiBldmVudCBsb29wIGJ5IGRlZmF1bHQgZm9yIHRoZSBtYWluCisgICAgdGhyZWFkOyBvdGhlciB0aHJlYWRzIGJ5IGRlZmF1bHQgaGF2ZSBubyBldmVudCBsb29wLgorCisgICAgT3RoZXIgcG9saWNpZXMgbWF5IGhhdmUgZGlmZmVyZW50IHJ1bGVzIChlLmcuIGEgc2luZ2xlIGdsb2JhbAorICAgIGV2ZW50IGxvb3AsIG9yIGF1dG9tYXRpY2FsbHkgY3JlYXRpbmcgYW4gZXZlbnQgbG9vcCBwZXIgdGhyZWFkLCBvcgorICAgIHVzaW5nIHNvbWUgb3RoZXIgbm90aW9uIG9mIGNvbnRleHQgdG8gd2hpY2ggYW4gZXZlbnQgbG9vcCBpcworICAgIGFzc29jaWF0ZWQpLgorICAgICIiIgorCisgICAgX2xvb3BfZmFjdG9yeSA9IE5vbmUKKworICAgIGNsYXNzIF9Mb2NhbCh0aHJlYWRpbmcubG9jYWwpOgorICAgICAgICBfbG9vcCA9IE5vbmUKKyAgICAgICAgX3NldF9jYWxsZWQgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NhbCA9IHNlbGYuX0xvY2FsKCkKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgbWF5IGJlIE5vbmUgb3IgYW4gaW5zdGFuY2Ugb2YgRXZlbnRMb29wLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKHNlbGYuX2xvY2FsLl9sb29wIGlzIE5vbmUgYW5kCisgICAgICAgICAgICBub3Qgc2VsZi5fbG9jYWwuX3NldF9jYWxsZWQgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCB0aHJlYWRpbmcuX01haW5UaHJlYWQpKToKKyAgICAgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5uZXdfZXZlbnRfbG9vcCgpKQorICAgICAgICBhc3NlcnQgc2VsZi5fbG9jYWwuX2xvb3AgaXMgbm90IE5vbmUsIFwKKyAgICAgICAgICAgICAgICgnVGhlcmUgaXMgbm8gY3VycmVudCBldmVudCBsb29wIGluIHRocmVhZCAlci4nICUKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbG9jYWwuX2xvb3AKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiU2V0IHRoZSBldmVudCBsb29wLiIiIgorICAgICAgICBzZWxmLl9sb2NhbC5fc2V0X2NhbGxlZCA9IFRydWUKKyAgICAgICAgYXNzZXJ0IGxvb3AgaXMgTm9uZSBvciBpc2luc3RhbmNlKGxvb3AsIEFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICBzZWxmLl9sb2NhbC5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBuZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGV2ZW50IGxvb3AuCisKKyAgICAgICAgWW91IG11c3QgY2FsbCBzZXRfZXZlbnRfbG9vcCgpIHRvIG1ha2UgdGhpcyB0aGUgY3VycmVudCBldmVudAorICAgICAgICBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvb3BfZmFjdG9yeSgpCisKKworIyBFdmVudCBsb29wIHBvbGljeS4gIFRoZSBwb2xpY3kgaXRzZWxmIGlzIGFsd2F5cyBnbG9iYWwsIGV2ZW4gaWYgdGhlCisjIHBvbGljeSdzIHJ1bGVzIHNheSB0aGF0IHRoZXJlIGlzIGFuIGV2ZW50IGxvb3AgcGVyIHRocmVhZCAob3Igb3RoZXIKKyMgbm90aW9uIG9mIGNvbnRleHQpLiAgVGhlIGRlZmF1bHQgcG9saWN5IGlzIGluc3RhbGxlZCBieSB0aGUgZmlyc3QKKyMgY2FsbCB0byBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS4KK19ldmVudF9sb29wX3BvbGljeSA9IE5vbmUKKworIyBMb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBvbi10aGUtZmx5IGNyZWF0aW9uIG9mIHRoZSBldmVudCBsb29wIHBvbGljeS4KK19sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisKK2RlZiBfaW5pdF9ldmVudF9sb29wX3BvbGljeSgpOgorICAgIGdsb2JhbCBfZXZlbnRfbG9vcF9wb2xpY3kKKyAgICB3aXRoIF9sb2NrOgorICAgICAgICBpZiBfZXZlbnRfbG9vcF9wb2xpY3kgaXMgTm9uZTogICMgcHJhZ21hOiBubyBicmFuY2gKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgRGVmYXVsdEV2ZW50TG9vcFBvbGljeQorICAgICAgICAgICAgX2V2ZW50X2xvb3BfcG9saWN5ID0gRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKworZGVmIGdldF9ldmVudF9sb29wX3BvbGljeSgpOgorICAgICIiIkdldCB0aGUgY3VycmVudCBldmVudCBsb29wIHBvbGljeS4iIiIKKyAgICBpZiBfZXZlbnRfbG9vcF9wb2xpY3kgaXMgTm9uZToKKyAgICAgICAgX2luaXRfZXZlbnRfbG9vcF9wb2xpY3koKQorICAgIHJldHVybiBfZXZlbnRfbG9vcF9wb2xpY3kKKworCitkZWYgc2V0X2V2ZW50X2xvb3BfcG9saWN5KHBvbGljeSk6CisgICAgIiIiU2V0IHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgcG9saWN5LgorCisgICAgSWYgcG9saWN5IGlzIE5vbmUsIHRoZSBkZWZhdWx0IHBvbGljeSBpcyByZXN0b3JlZC4iIiIKKyAgICBnbG9iYWwgX2V2ZW50X2xvb3BfcG9saWN5CisgICAgYXNzZXJ0IHBvbGljeSBpcyBOb25lIG9yIGlzaW5zdGFuY2UocG9saWN5LCBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeSkKKyAgICBfZXZlbnRfbG9vcF9wb2xpY3kgPSBwb2xpY3kKKworCitkZWYgZ2V0X2V2ZW50X2xvb3AoKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIGNhbGxpbmcgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuZ2V0X2V2ZW50X2xvb3AoKS4iIiIKKyAgICByZXR1cm4gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuZ2V0X2V2ZW50X2xvb3AoKQorCisKK2RlZiBzZXRfZXZlbnRfbG9vcChsb29wKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIGNhbGxpbmcgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuc2V0X2V2ZW50X2xvb3AobG9vcCkuIiIiCisgICAgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuc2V0X2V2ZW50X2xvb3AobG9vcCkKKworCitkZWYgbmV3X2V2ZW50X2xvb3AoKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIGNhbGxpbmcgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkubmV3X2V2ZW50X2xvb3AoKS4iIiIKKyAgICByZXR1cm4gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkubmV3X2V2ZW50X2xvb3AoKQorCisKK2RlZiBnZXRfY2hpbGRfd2F0Y2hlcigpOgorICAgICIiIkVxdWl2YWxlbnQgdG8gY2FsbGluZyBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5nZXRfY2hpbGRfd2F0Y2hlcigpLiIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKworZGVmIHNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpOgorICAgICIiIkVxdWl2YWxlbnQgdG8gY2FsbGluZworICAgIGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpLiIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vZnV0dXJlcy5weSBiL0xpYi9hc3luY2lvL2Z1dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5OGZiYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Z1dHVyZXMucHkKQEAgLTAsMCArMSw0MTEgQEAKKyIiIkEgRnV0dXJlIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBpbiBQRVAgMzE0OC4iIiIKKworX19hbGxfXyA9IFsnQ2FuY2VsbGVkRXJyb3InLCAnVGltZW91dEVycm9yJywKKyAgICAgICAgICAgJ0ludmFsaWRTdGF0ZUVycm9yJywKKyAgICAgICAgICAgJ0Z1dHVyZScsICd3cmFwX2Z1dHVyZScsCisgICAgICAgICAgIF0KKworaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcy5fYmFzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZXBybGliCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCisKKyMgU3RhdGVzIGZvciBGdXR1cmUuCitfUEVORElORyA9ICdQRU5ESU5HJworX0NBTkNFTExFRCA9ICdDQU5DRUxMRUQnCitfRklOSVNIRUQgPSAnRklOSVNIRUQnCisKK19QWTM0ID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNCkKKworIyBUT0RPOiBEbyB3ZSByZWFsbHkgd2FudCB0byBkZXBlbmQgb24gY29uY3VycmVudC5mdXR1cmVzIGludGVybmFscz8KK0Vycm9yID0gY29uY3VycmVudC5mdXR1cmVzLl9iYXNlLkVycm9yCitDYW5jZWxsZWRFcnJvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcgorVGltZW91dEVycm9yID0gY29uY3VycmVudC5mdXR1cmVzLlRpbWVvdXRFcnJvcgorCitTVEFDS19ERUJVRyA9IGxvZ2dpbmcuREVCVUcgLSAxICAjIGhlYXZ5LWR1dHkgZGVidWdnaW5nCisKKworY2xhc3MgSW52YWxpZFN0YXRlRXJyb3IoRXJyb3IpOgorICAgICIiIlRoZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBzdGF0ZS4iIiIKKyAgICAjIFRPRE86IFNob3cgdGhlIGZ1dHVyZSwgaXRzIHN0YXRlLCB0aGUgbWV0aG9kLCBhbmQgdGhlIHJlcXVpcmVkIHN0YXRlLgorCisKK2NsYXNzIF9UcmFjZWJhY2tMb2dnZXI6CisgICAgIiIiSGVscGVyIHRvIGxvZyBhIHRyYWNlYmFjayB1cG9uIGRlc3RydWN0aW9uIGlmIG5vdCBjbGVhcmVkLgorCisgICAgVGhpcyBzb2x2ZXMgYSBuYXN0eSBwcm9ibGVtIHdpdGggRnV0dXJlcyBhbmQgVGFza3MgdGhhdCBoYXZlIGFuCisgICAgZXhjZXB0aW9uIHNldDogaWYgbm9ib2R5IGFza3MgZm9yIHRoZSBleGNlcHRpb24sIHRoZSBleGNlcHRpb24gaXMKKyAgICBuZXZlciBsb2dnZWQuICBUaGlzIHZpb2xhdGVzIHRoZSBaZW4gb2YgUHl0aG9uOiAnRXJyb3JzIHNob3VsZAorICAgIG5ldmVyIHBhc3Mgc2lsZW50bHkuICBVbmxlc3MgZXhwbGljaXRseSBzaWxlbmNlZC4nCisKKyAgICBIb3dldmVyLCB3ZSBkb24ndCB3YW50IHRvIGxvZyB0aGUgZXhjZXB0aW9uIGFzIHNvb24gYXMKKyAgICBzZXRfZXhjZXB0aW9uKCkgaXMgY2FsbGVkOiBpZiB0aGUgY2FsbGluZyBjb2RlIGlzIHdyaXR0ZW4KKyAgICBwcm9wZXJseSwgaXQgd2lsbCBnZXQgdGhlIGV4Y2VwdGlvbiBhbmQgaGFuZGxlIGl0IHByb3Blcmx5LiAgQnV0CisgICAgd2UgKmRvKiB3YW50IHRvIGxvZyBpdCBpZiByZXN1bHQoKSBvciBleGNlcHRpb24oKSB3YXMgbmV2ZXIgY2FsbGVkCisgICAgLS0gb3RoZXJ3aXNlIGRldmVsb3BlcnMgd2FzdGUgYSBsb3Qgb2YgdGltZSB3b25kZXJpbmcgd2h5IHRoZWlyCisgICAgYnVnZ3kgY29kZSBmYWlscyBzaWxlbnRseS4KKworICAgIEFuIGVhcmxpZXIgYXR0ZW1wdCBhZGRlZCBhIF9fZGVsX18oKSBtZXRob2QgdG8gdGhlIEZ1dHVyZSBjbGFzcworICAgIGl0c2VsZiwgYnV0IHRoaXMgYmFja2ZpcmVkIGJlY2F1c2UgdGhlIHByZXNlbmNlIG9mIF9fZGVsX18oKQorICAgIHByZXZlbnRzIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGJyZWFraW5nIGN5Y2xlcy4gIEEgd2F5IG91dCBvZgorICAgIHRoaXMgY2F0Y2gtMjIgaXMgdG8gYXZvaWQgaGF2aW5nIGEgX19kZWxfXygpIG1ldGhvZCBvbiB0aGUgRnV0dXJlCisgICAgY2xhc3MgaXRzZWxmLCBidXQgaW5zdGVhZCB0byBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgaGVscGVyIG9iamVjdAorICAgIHdpdGggYSBfX2RlbF9fKCkgbWV0aG9kIHRoYXQgbG9ncyB0aGUgdHJhY2ViYWNrLCB3aGVyZSB3ZSBlbnN1cmUKKyAgICB0aGF0IHRoZSBoZWxwZXIgb2JqZWN0IGRvZXNuJ3QgcGFydGljaXBhdGUgaW4gY3ljbGVzLCBhbmQgb25seSB0aGUKKyAgICBGdXR1cmUgaGFzIGEgcmVmZXJlbmNlIHRvIGl0LgorCisgICAgVGhlIGhlbHBlciBvYmplY3QgaXMgYWRkZWQgd2hlbiBzZXRfZXhjZXB0aW9uKCkgaXMgY2FsbGVkLiAgV2hlbgorICAgIHRoZSBGdXR1cmUgaXMgY29sbGVjdGVkLCBhbmQgdGhlIGhlbHBlciBpcyBwcmVzZW50LCB0aGUgaGVscGVyCisgICAgb2JqZWN0IGlzIGFsc28gY29sbGVjdGVkLCBhbmQgaXRzIF9fZGVsX18oKSBtZXRob2Qgd2lsbCBsb2cgdGhlCisgICAgdHJhY2ViYWNrLiAgV2hlbiB0aGUgRnV0dXJlJ3MgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkgbWV0aG9kIGlzCisgICAgY2FsbGVkIChhbmQgYSBoZWxwZXIgb2JqZWN0IGlzIHByZXNlbnQpLCBpdCByZW1vdmVzIHRoZSB0aGUgaGVscGVyCisgICAgb2JqZWN0LCBhZnRlciBjYWxsaW5nIGl0cyBjbGVhcigpIG1ldGhvZCB0byBwcmV2ZW50IGl0IGZyb20KKyAgICBsb2dnaW5nLgorCisgICAgT25lIGRvd25zaWRlIGlzIHRoYXQgd2UgZG8gYSBmYWlyIGFtb3VudCBvZiB3b3JrIHRvIGV4dHJhY3QgdGhlCisgICAgdHJhY2ViYWNrIGZyb20gdGhlIGV4Y2VwdGlvbiwgZXZlbiB3aGVuIGl0IGlzIG5ldmVyIGxvZ2dlZC4gIEl0CisgICAgd291bGQgc2VlbSBjaGVhcGVyIHRvIGp1c3Qgc3RvcmUgdGhlIGV4Y2VwdGlvbiBvYmplY3QsIGJ1dCB0aGF0CisgICAgcmVmZXJlbmNlcyB0aGUgdHJhY2ViYWNrLCB3aGljaCByZWZlcmVuY2VzIHN0YWNrIGZyYW1lcywgd2hpY2ggbWF5CisgICAgcmVmZXJlbmNlIHRoZSBGdXR1cmUsIHdoaWNoIHJlZmVyZW5jZXMgdGhlIF9UcmFjZWJhY2tMb2dnZXIsIGFuZAorICAgIHRoZW4gdGhlIF9UcmFjZWJhY2tMb2dnZXIgd291bGQgYmUgaW5jbHVkZWQgaW4gYSBjeWNsZSwgd2hpY2ggaXMKKyAgICB3aGF0IHdlJ3JlIHRyeWluZyB0byBhdm9pZCEgIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgZG9uJ3QKKyAgICBpbW1lZGlhdGVseSBmb3JtYXQgdGhlIGV4Y2VwdGlvbjsgd2Ugb25seSBkbyB0aGUgd29yayB3aGVuCisgICAgYWN0aXZhdGUoKSBpcyBjYWxsZWQsIHdoaWNoIGNhbGwgaXMgZGVsYXllZCB1bnRpbCBhZnRlciBhbGwgdGhlCisgICAgRnV0dXJlJ3MgY2FsbGJhY2tzIGhhdmUgcnVuLiAgU2luY2UgdXN1YWxseSBhIEZ1dHVyZSBoYXMgYXQgbGVhc3QKKyAgICBvbmUgY2FsbGJhY2sgKHR5cGljYWxseSBzZXQgYnkgJ3lpZWxkIGZyb20nKSBhbmQgdXN1YWxseSB0aGF0CisgICAgY2FsbGJhY2sgZXh0cmFjdHMgdGhlIGNhbGxiYWNrLCB0aGVyZWJ5IHJlbW92aW5nIHRoZSBuZWVkIHRvCisgICAgZm9ybWF0IHRoZSBleGNlcHRpb24uCisKKyAgICBQUy4gSSBkb24ndCBjbGFpbSBjcmVkaXQgZm9yIHRoaXMgc29sdXRpb24uICBJIGZpcnN0IGhlYXJkIG9mIGl0CisgICAgaW4gYSBkaXNjdXNzaW9uIGFib3V0IGNsb3NpbmcgZmlsZXMgd2hlbiB0aGV5IGFyZSBjb2xsZWN0ZWQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ2xvb3AnLCAnc291cmNlX3RyYWNlYmFjaycsICdleGMnLCAndGInKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1dHVyZSwgZXhjKToKKyAgICAgICAgc2VsZi5sb29wID0gZnV0dXJlLl9sb29wCisgICAgICAgIHNlbGYuc291cmNlX3RyYWNlYmFjayA9IGZ1dHVyZS5fc291cmNlX3RyYWNlYmFjaworICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBzZWxmLnRiID0gTm9uZQorCisgICAgZGVmIGFjdGl2YXRlKHNlbGYpOgorICAgICAgICBleGMgPSBzZWxmLmV4YworICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmV4YyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYudGIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGMuX19jbGFzc19fLCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLl9fdHJhY2ViYWNrX18pCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuZXhjID0gTm9uZQorICAgICAgICBzZWxmLnRiID0gTm9uZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudGI6CisgICAgICAgICAgICBtc2cgPSAnRnV0dXJlL1Rhc2sgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWQnCisgICAgICAgICAgICBpZiBzZWxmLnNvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgbXNnICs9ICdcbkZ1dHVyZS9UYXNrIGNyZWF0ZWQgYXQgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nCisgICAgICAgICAgICAgICAgbXNnICs9ICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9saXN0KHNlbGYuc291cmNlX3RyYWNlYmFjaykpCisgICAgICAgICAgICBtc2cgKz0gJycuam9pbihzZWxmLnRiKS5yc3RyaXAoKQorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeydtZXNzYWdlJzogbXNnfSkKKworCitjbGFzcyBGdXR1cmU6CisgICAgIiIiVGhpcyBjbGFzcyBpcyAqYWxtb3N0KiBjb21wYXRpYmxlIHdpdGggY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS4KKworICAgIERpZmZlcmVuY2VzOgorCisgICAgLSByZXN1bHQoKSBhbmQgZXhjZXB0aW9uKCkgZG8gbm90IHRha2UgYSB0aW1lb3V0IGFyZ3VtZW50IGFuZAorICAgICAgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldC4KKworICAgIC0gQ2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBhZGRfZG9uZV9jYWxsYmFjaygpIGFyZSBhbHdheXMgY2FsbGVkCisgICAgICB2aWEgdGhlIGV2ZW50IGxvb3AncyBjYWxsX3Nvb25fdGhyZWFkc2FmZSgpLgorCisgICAgLSBUaGlzIGNsYXNzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkKKyAgICAgIG1ldGhvZHMgaW4gdGhlIGNvbmN1cnJlbnQuZnV0dXJlcyBwYWNrYWdlLgorCisgICAgKEluIFB5dGhvbiAzLjQgb3IgbGF0ZXIgd2UgbWF5IGJlIGFibGUgdG8gdW5pZnkgdGhlIGltcGxlbWVudGF0aW9ucy4pCisgICAgIiIiCisKKyAgICAjIENsYXNzIHZhcmlhYmxlcyBzZXJ2aW5nIGFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSB2YXJpYWJsZXMuCisgICAgX3N0YXRlID0gX1BFTkRJTkcKKyAgICBfcmVzdWx0ID0gTm9uZQorICAgIF9leGNlcHRpb24gPSBOb25lCisgICAgX2xvb3AgPSBOb25lCisKKyAgICBfYmxvY2tpbmcgPSBGYWxzZSAgIyBwcm9wZXIgdXNlIG9mIGZ1dHVyZSAoeWllbGQgdnMgeWllbGQgZnJvbSkKKworICAgIF9sb2dfdHJhY2ViYWNrID0gRmFsc2UgICAjIFVzZWQgZm9yIFB5dGhvbiAzLjQgYW5kIGxhdGVyCisgICAgX3RiX2xvZ2dlciA9IE5vbmUgICAgICAgICMgVXNlZCBmb3IgUHl0aG9uIDMuMyBvbmx5CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgZnV0dXJlLgorCisgICAgICAgIFRoZSBvcHRpb25hbCBldmVudF9sb29wIGFyZ3VtZW50IGFsbG93cyB0byBleHBsaWNpdGx5IHNldCB0aGUgZXZlbnQKKyAgICAgICAgbG9vcCBvYmplY3QgdXNlZCBieSB0aGUgZnV0dXJlLiBJZiBpdCdzIG5vdCBwcm92aWRlZCwgdGhlIGZ1dHVyZSB1c2VzCisgICAgICAgIHRoZSBkZWZhdWx0IGV2ZW50IGxvb3AuCisgICAgICAgICIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX2NhbGxiYWNrcyA9IFtdCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrID0gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NvdXJjZV90cmFjZWJhY2sgPSBOb25lCisKKyAgICBkZWYgX2Zvcm1hdF9jYWxsYmFja3Moc2VsZik6CisgICAgICAgIGNiID0gc2VsZi5fY2FsbGJhY2tzCisgICAgICAgIHNpemUgPSBsZW4oY2IpCisgICAgICAgIGlmIG5vdCBzaXplOgorICAgICAgICAgICAgY2IgPSAnJworCisgICAgICAgIGRlZiBmb3JtYXRfY2IoY2FsbGJhY2spOgorICAgICAgICAgICAgcmV0dXJuIGV2ZW50cy5fZm9ybWF0X2NhbGxiYWNrKGNhbGxiYWNrLCAoKSkKKworICAgICAgICBpZiBzaXplID09IDE6CisgICAgICAgICAgICBjYiA9IGZvcm1hdF9jYihjYlswXSkKKyAgICAgICAgZWxpZiBzaXplID09IDI6CisgICAgICAgICAgICBjYiA9ICd7fSwge30nLmZvcm1hdChmb3JtYXRfY2IoY2JbMF0pLCBmb3JtYXRfY2IoY2JbMV0pKQorICAgICAgICBlbGlmIHNpemUgPiAyOgorICAgICAgICAgICAgY2IgPSAne30sIDx7fSBtb3JlPiwge30nLmZvcm1hdChmb3JtYXRfY2IoY2JbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9jYihjYlstMV0pKQorICAgICAgICByZXR1cm4gJ2NiPVslc10nICUgY2IKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX3N0YXRlLmxvd2VyKCldCisgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnZXhjZXB0aW9uPXshcn0nLmZvcm1hdChzZWxmLl9leGNlcHRpb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHVzZSByZXBybGliIHRvIGxpbWl0IHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCwgZXNwZWNpYWxseQorICAgICAgICAgICAgICAgICMgZm9yIHZlcnkgbG9uZyBzdHJpbmdzCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVwcmxpYi5yZXByKHNlbGYuX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgncmVzdWx0PXt9Jy5mb3JtYXQocmVzdWx0KSkKKyAgICAgICAgaWYgc2VsZi5fY2FsbGJhY2tzOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoc2VsZi5fZm9ybWF0X2NhbGxiYWNrcygpKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZnJhbWUgPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2NyZWF0ZWQgYXQgJXM6JXMnICUgKGZyYW1lWzBdLCBmcmFtZVsxXSkpCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBzZWxmLl9yZXByX2luZm8oKQorICAgICAgICByZXR1cm4gJzwlcyAlcz4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnICcuam9pbihpbmZvKSkKKworICAgICMgT24gUHl0aG9uIDMuMyBvciBvbGRlciwgb2JqZWN0cyB3aXRoIGEgZGVzdHJ1Y3RvciBwYXJ0IG9mIGEgcmVmZXJlbmNlCisgICAgIyBjeWNsZSBhcmUgbmV2ZXIgZGVzdHJveWVkLiBJdCdzIG5vdCBtb3JlIHRoZSBjYXNlIG9uIFB5dGhvbiAzLjQgdGhhbmtzIHRvCisgICAgIyB0aGUgUEVQIDQ0Mi4KKyAgICBpZiBfUFkzNDoKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbG9nX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAjIHNldF9leGNlcHRpb24oKSB3YXMgbm90IGNhbGxlZCwgb3IgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkKKyAgICAgICAgICAgICAgICAjIGhhcyBjb25zdW1lZCB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGMgPSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJyVzIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ2Z1dHVyZSc6IHNlbGYsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgIGNvbnRleHRbJ3NvdXJjZV90cmFjZWJhY2snXSA9IHNlbGYuX3NvdXJjZV90cmFjZWJhY2sKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQ2FuY2VsIHRoZSBmdXR1cmUgYW5kIHNjaGVkdWxlIGNhbGxiYWNrcy4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSBvciBjYW5jZWxsZWQsIHJldHVybiBGYWxzZS4gIE90aGVyd2lzZSwKKyAgICAgICAgY2hhbmdlIHRoZSBmdXR1cmUncyBzdGF0ZSB0byBjYW5jZWxsZWQsIHNjaGVkdWxlIHRoZSBjYWxsYmFja3MgYW5kCisgICAgICAgIHJldHVybiBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfQ0FOQ0VMTEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3NjaGVkdWxlX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgIiIiSW50ZXJuYWw6IEFzayB0aGUgZXZlbnQgbG9vcCB0byBjYWxsIGFsbCBjYWxsYmFja3MuCisKKyAgICAgICAgVGhlIGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIHRvIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiBBbHNvCisgICAgICAgIGNsZWFycyB0aGUgY2FsbGJhY2sgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGNhbGxiYWNrcyA9IHNlbGYuX2NhbGxiYWNrc1s6XQorICAgICAgICBpZiBub3QgY2FsbGJhY2tzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzWzpdID0gW10KKyAgICAgICAgZm9yIGNhbGxiYWNrIGluIGNhbGxiYWNrczoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCBzZWxmKQorCisgICAgZGVmIGNhbmNlbGxlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRAorCisgICAgIyBEb24ndCBpbXBsZW1lbnQgcnVubmluZygpOyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE4Njk5CisKKyAgICBkZWYgZG9uZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIERvbmUgbWVhbnMgZWl0aGVyIHRoYXQgYSByZXN1bHQgLyBleGNlcHRpb24gYXJlIGF2YWlsYWJsZSwgb3IgdGhhdCB0aGUKKyAgICAgICAgZnV0dXJlIHdhcyBjYW5jZWxsZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkcKKworICAgIGRlZiByZXN1bHQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVzdWx0IHRoaXMgZnV0dXJlIHJlcHJlc2VudHMuCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcyBDYW5jZWxsZWRFcnJvci4gIElmIHRoZQorICAgICAgICBmdXR1cmUncyByZXN1bHQgaXNuJ3QgeWV0IGF2YWlsYWJsZSwgcmFpc2VzIEludmFsaWRTdGF0ZUVycm9yLiAgSWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lIGFuZCBoYXMgYW4gZXhjZXB0aW9uIHNldCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCdSZXN1bHQgaXMgbm90IHJlYWR5LicpCisgICAgICAgIHNlbGYuX2xvZ190cmFjZWJhY2sgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl90Yl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdAorCisgICAgZGVmIGV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBleGNlcHRpb24gdGhhdCB3YXMgc2V0IG9uIHRoaXMgZnV0dXJlLgorCisgICAgICAgIFRoZSBleGNlcHRpb24gKG9yIE5vbmUgaWYgbm8gZXhjZXB0aW9uIHdhcyBzZXQpIGlzIHJldHVybmVkIG9ubHkgaWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lLiAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcworICAgICAgICBDYW5jZWxsZWRFcnJvci4gIElmIHRoZSBmdXR1cmUgaXNuJ3QgZG9uZSB5ZXQsIHJhaXNlcworICAgICAgICBJbnZhbGlkU3RhdGVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9DQU5DRUxMRUQ6CisgICAgICAgICAgICByYWlzZSBDYW5jZWxsZWRFcnJvcgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfRklOSVNIRUQ6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcignRXhjZXB0aW9uIGlzIG5vdCBzZXQuJykKKyAgICAgICAgc2VsZi5fbG9nX3RyYWNlYmFjayA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX3RiX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKworICAgIGRlZiBhZGRfZG9uZV9jYWxsYmFjayhzZWxmLCBmbik6CisgICAgICAgICIiIkFkZCBhIGNhbGxiYWNrIHRvIGJlIHJ1biB3aGVuIHRoZSBmdXR1cmUgYmVjb21lcyBkb25lLgorCisgICAgICAgIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBmdXR1cmUgb2JqZWN0LiBJZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgaXMgY2FsbGVkLCB0aGUgY2FsbGJhY2sgaXMKKyAgICAgICAgc2NoZWR1bGVkIHdpdGggY2FsbF9zb29uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihmbiwgc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrcy5hcHBlbmQoZm4pCisKKyAgICAjIE5ldyBtZXRob2Qgbm90IGluIFBFUCAzMTQ4LgorCisgICAgZGVmIHJlbW92ZV9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgIiIiUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSBjYWxsYmFjayBmcm9tIHRoZSAiY2FsbCB3aGVuIGRvbmUiIGxpc3QuCisKKyAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhbGxiYWNrcyByZW1vdmVkLgorICAgICAgICAiIiIKKyAgICAgICAgZmlsdGVyZWRfY2FsbGJhY2tzID0gW2YgZm9yIGYgaW4gc2VsZi5fY2FsbGJhY2tzIGlmIGYgIT0gZm5dCisgICAgICAgIHJlbW92ZWRfY291bnQgPSBsZW4oc2VsZi5fY2FsbGJhY2tzKSAtIGxlbihmaWx0ZXJlZF9jYWxsYmFja3MpCisgICAgICAgIGlmIHJlbW92ZWRfY291bnQ6CisgICAgICAgICAgICBzZWxmLl9jYWxsYmFja3NbOl0gPSBmaWx0ZXJlZF9jYWxsYmFja3MKKyAgICAgICAgcmV0dXJuIHJlbW92ZWRfY291bnQKKworICAgICMgU28tY2FsbGVkIGludGVybmFsIG1ldGhvZHMgKG5vdGU6IG5vIHNldF9ydW5uaW5nX29yX25vdGlmeV9jYW5jZWwoKSkuCisKKyAgICBkZWYgX3NldF9yZXN1bHRfdW5sZXNzX2NhbmNlbGxlZChzZWxmLCByZXN1bHQpOgorICAgICAgICAiIiJIZWxwZXIgc2V0dGluZyB0aGUgcmVzdWx0IG9ubHkgaWYgdGhlIGZ1dHVyZSB3YXMgbm90IGNhbmNlbGxlZC4iIiIKKyAgICAgICAgaWYgc2VsZi5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnNldF9yZXN1bHQocmVzdWx0KQorCisgICAgZGVmIHNldF9yZXN1bHQoc2VsZiwgcmVzdWx0KToKKyAgICAgICAgIiIiTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBpdHMgcmVzdWx0LgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCByYWlzZXMKKyAgICAgICAgSW52YWxpZFN0YXRlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCd7fTogeyFyfScuZm9ybWF0KHNlbGYuX3N0YXRlLCBzZWxmKSkKKyAgICAgICAgc2VsZi5fcmVzdWx0ID0gcmVzdWx0CisgICAgICAgIHNlbGYuX3N0YXRlID0gX0ZJTklTSEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbihzZWxmLCBleGNlcHRpb24pOgorICAgICAgICAiIiJNYXJrIHRoZSBmdXR1cmUgZG9uZSBhbmQgc2V0IGFuIGV4Y2VwdGlvbi4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcigne306IHshcn0nLmZvcm1hdChzZWxmLl9zdGF0ZSwgc2VsZikpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCB0eXBlKToKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbigpCisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbgorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9GSU5JU0hFRAorICAgICAgICBzZWxmLl9zY2hlZHVsZV9jYWxsYmFja3MoKQorICAgICAgICBpZiBfUFkzNDoKKyAgICAgICAgICAgIHNlbGYuX2xvZ190cmFjZWJhY2sgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBfVHJhY2ViYWNrTG9nZ2VyKHNlbGYsIGV4Y2VwdGlvbikKKyAgICAgICAgICAgICMgQXJyYW5nZSBmb3IgdGhlIGxvZ2dlciB0byBiZSBhY3RpdmF0ZWQgYWZ0ZXIgYWxsIGNhbGxiYWNrcworICAgICAgICAgICAgIyBoYXZlIGhhZCBhIGNoYW5jZSB0byBjYWxsIHJlc3VsdCgpIG9yIGV4Y2VwdGlvbigpLgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fdGJfbG9nZ2VyLmFjdGl2YXRlKQorCisgICAgIyBUcnVseSBpbnRlcm5hbCBtZXRob2RzLgorCisgICAgZGVmIF9jb3B5X3N0YXRlKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRvIGNvcHkgc3RhdGUgZnJvbSBhbm90aGVyIEZ1dHVyZS4KKworICAgICAgICBUaGUgb3RoZXIgRnV0dXJlIG1heSBiZSBhIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgb3RoZXIuZG9uZSgpCisgICAgICAgIGlmIHNlbGYuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmRvbmUoKQorICAgICAgICBpZiBvdGhlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IG90aGVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICBpZiBleGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3RoZXIucmVzdWx0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXN1bHQocmVzdWx0KQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9ibG9ja2luZyA9IFRydWUKKyAgICAgICAgICAgIHlpZWxkIHNlbGYgICMgVGhpcyB0ZWxscyBUYXNrIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24uCisgICAgICAgIGFzc2VydCBzZWxmLmRvbmUoKSwgInlpZWxkIGZyb20gd2Fzbid0IHVzZWQgd2l0aCBmdXR1cmUiCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdCgpICAjIE1heSByYWlzZSB0b28uCisKKworZGVmIHdyYXBfZnV0dXJlKGZ1dCwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXcmFwIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgb2JqZWN0LiIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnV0LCBGdXR1cmUpOgorICAgICAgICByZXR1cm4gZnV0CisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZnV0LCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKSwgXAorICAgICAgICAnY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSBpcyBleHBlY3RlZCwgZ290IHshcn0nLmZvcm1hdChmdXQpCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICBuZXdfZnV0dXJlID0gRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBfY2hlY2tfY2FuY2VsX290aGVyKGYpOgorICAgICAgICBpZiBmLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgZnV0LmNhbmNlbCgpCisKKyAgICBuZXdfZnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrKF9jaGVja19jYW5jZWxfb3RoZXIpCisgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKAorICAgICAgICBsYW1iZGEgZnV0dXJlOiBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKAorICAgICAgICAgICAgbmV3X2Z1dHVyZS5fY29weV9zdGF0ZSwgZnV0KSkKKyAgICByZXR1cm4gbmV3X2Z1dHVyZQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vbG9ja3MucHkgYi9MaWIvYXN5bmNpby9sb2Nrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTQzZTlkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vbG9ja3MucHkKQEAgLTAsMCArMSw0NjkgQEAKKyIiIlN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiIiIgorCitfX2FsbF9fID0gWydMb2NrJywgJ0V2ZW50JywgJ0NvbmRpdGlvbicsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKKworCitjbGFzcyBfQ29udGV4dE1hbmFnZXI6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyLgorCisgICAgVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgaWRpb20gZm9yIGFjcXVpcmluZyBhbmQgcmVsZWFzaW5nIGEKKyAgICBsb2NrIGFyb3VuZCBhIGJsb2NrOgorCisgICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICA8YmxvY2s+CisKKyAgICB3aGlsZSBmYWlsaW5nIGxvdWRseSB3aGVuIGFjY2lkZW50YWxseSB1c2luZzoKKworICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICA8YmxvY2s+CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jayk6CisgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAjIFdlIGhhdmUgbm8gdXNlIGZvciB0aGUgImFzIC4uLiIgIGNsYXVzZSBpbiB0aGUgd2l0aAorICAgICAgICAjIHN0YXRlbWVudCBmb3IgbG9ja3MuCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbG9jayA9IE5vbmUgICMgQ3J1ZGVseSBwcmV2ZW50IHJldXNlLgorCisKK2NsYXNzIExvY2s6CisgICAgIiIiUHJpbWl0aXZlIGxvY2sgb2JqZWN0cy4KKworICAgIEEgcHJpbWl0aXZlIGxvY2sgaXMgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIHRoYXQgaXMgbm90IG93bmVkCisgICAgYnkgYSBwYXJ0aWN1bGFyIGNvcm91dGluZSB3aGVuIGxvY2tlZC4gIEEgcHJpbWl0aXZlIGxvY2sgaXMgaW4gb25lCisgICAgb2YgdHdvIHN0YXRlcywgJ2xvY2tlZCcgb3IgJ3VubG9ja2VkJy4KKworICAgIEl0IGlzIGNyZWF0ZWQgaW4gdGhlIHVubG9ja2VkIHN0YXRlLiAgSXQgaGFzIHR3byBiYXNpYyBtZXRob2RzLAorICAgIGFjcXVpcmUoKSBhbmQgcmVsZWFzZSgpLiAgV2hlbiB0aGUgc3RhdGUgaXMgdW5sb2NrZWQsIGFjcXVpcmUoKQorICAgIGNoYW5nZXMgdGhlIHN0YXRlIHRvIGxvY2tlZCBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4gIFdoZW4gdGhlCisgICAgc3RhdGUgaXMgbG9ja2VkLCBhY3F1aXJlKCkgYmxvY2tzIHVudGlsIGEgY2FsbCB0byByZWxlYXNlKCkgaW4KKyAgICBhbm90aGVyIGNvcm91dGluZSBjaGFuZ2VzIGl0IHRvIHVubG9ja2VkLCB0aGVuIHRoZSBhY3F1aXJlKCkgY2FsbAorICAgIHJlc2V0cyBpdCB0byBsb2NrZWQgYW5kIHJldHVybnMuICBUaGUgcmVsZWFzZSgpIG1ldGhvZCBzaG91bGQgb25seQorICAgIGJlIGNhbGxlZCBpbiB0aGUgbG9ja2VkIHN0YXRlOyBpdCBjaGFuZ2VzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZAorICAgIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbGVhc2UgYW4KKyAgICB1bmxvY2tlZCBsb2NrLCBhIFJ1bnRpbWVFcnJvciB3aWxsIGJlIHJhaXNlZC4KKworICAgIFdoZW4gbW9yZSB0aGFuIG9uZSBjb3JvdXRpbmUgaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkgd2FpdGluZyBmb3IKKyAgICB0aGUgc3RhdGUgdG8gdHVybiB0byB1bmxvY2tlZCwgb25seSBvbmUgY29yb3V0aW5lIHByb2NlZWRzIHdoZW4gYQorICAgIHJlbGVhc2UoKSBjYWxsIHJlc2V0cyB0aGUgc3RhdGUgdG8gdW5sb2NrZWQ7IGZpcnN0IGNvcm91dGluZSB3aGljaAorICAgIGlzIGJsb2NrZWQgaW4gYWNxdWlyZSgpIGlzIGJlaW5nIHByb2Nlc3NlZC4KKworICAgIGFjcXVpcmUoKSBpcyBhIGNvcm91dGluZSBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoICd5aWVsZCBmcm9tJy4KKworICAgIExvY2tzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgJyh5aWVsZCBmcm9tIGxvY2spJworICAgIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uLgorCisgICAgVXNhZ2U6CisKKyAgICAgICAgbG9jayA9IExvY2soKQorICAgICAgICAuLi4KKyAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIC4uLgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgIENvbnRleHQgbWFuYWdlciB1c2FnZToKKworICAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgIC4uLgorICAgICAgICB3aXRoICh5aWVsZCBmcm9tIGxvY2spOgorICAgICAgICAgICAgIC4uLgorCisgICAgTG9jayBvYmplY3RzIGNhbiBiZSB0ZXN0ZWQgZm9yIGxvY2tpbmcgc3RhdGU6CisKKyAgICAgICAgaWYgbm90IGxvY2subG9ja2VkKCk6CisgICAgICAgICAgIHlpZWxkIGZyb20gbG9jaworICAgICAgICBlbHNlOgorICAgICAgICAgICAjIGxvY2sgaXMgYWNxdWlyZWQKKyAgICAgICAgICAgLi4uCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9sb2NrZWQgPSBGYWxzZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgZXh0cmEgPSAnbG9ja2VkJyBpZiBzZWxmLl9sb2NrZWQgZWxzZSAndW5sb2NrZWQnCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBleHRyYSA9ICd7fSx3YWl0ZXJzOnt9Jy5mb3JtYXQoZXh0cmEsIGxlbihzZWxmLl93YWl0ZXJzKSkKKyAgICAgICAgcmV0dXJuICc8e30gW3t9XT4nLmZvcm1hdChyZXNbMTotMV0sIGV4dHJhKQorCisgICAgZGVmIGxvY2tlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgbG9jayBpcyBhY3F1aXJlZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2tlZAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBhY3F1aXJlKHNlbGYpOgorICAgICAgICAiIiJBY3F1aXJlIGEgbG9jay4KKworICAgICAgICBUaGlzIG1ldGhvZCBibG9ja3MgdW50aWwgdGhlIGxvY2sgaXMgdW5sb2NrZWQsIHRoZW4gc2V0cyBpdCB0bworICAgICAgICBsb2NrZWQgYW5kIHJldHVybnMgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0ZXJzIGFuZCBub3Qgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIiUmVsZWFzZSBhIGxvY2suCisKKyAgICAgICAgV2hlbiB0aGUgbG9jayBpcyBsb2NrZWQsIHJlc2V0IGl0IHRvIHVubG9ja2VkLCBhbmQgcmV0dXJuLgorICAgICAgICBJZiBhbnkgb3RoZXIgY29yb3V0aW5lcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZWNvbWUKKyAgICAgICAgdW5sb2NrZWQsIGFsbG93IGV4YWN0bHkgb25lIG9mIHRoZW0gdG8gcHJvY2VlZC4KKworICAgICAgICBXaGVuIGludm9rZWQgb24gYW4gdW5sb2NrZWQgbG9jaywgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorCisgICAgICAgIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKKyAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgICAgICAjIFdha2UgdXAgdGhlIGZpcnN0IHdhaXRlciB3aG8gaXNuJ3QgY2FuY2VsbGVkLgorICAgICAgICAgICAgZm9yIGZ1dCBpbiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmdXQuZG9uZSgpOgorICAgICAgICAgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChUcnVlKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdMb2NrIGlzIG5vdCBhY3F1aXJlZC4nKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgJyJ5aWVsZCBmcm9tIiBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbicpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAjIFRoaXMgbXVzdCBleGlzdCBiZWNhdXNlIF9fZW50ZXJfXyBleGlzdHMsIGV2ZW4gdGhvdWdoIHRoYXQKKyAgICAgICAgIyBhbHdheXMgcmFpc2VzOyB0aGF0J3MgaG93IHRoZSB3aXRoLXN0YXRlbWVudCB3b3Jrcy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgbm90IGEgY29yb3V0aW5lLiAgSXQgaXMgbWVhbnQgdG8gZW5hYmxlIHRoZSBpZGlvbToKKyAgICAgICAgIworICAgICAgICAjICAgICB3aXRoICh5aWVsZCBmcm9tIGxvY2spOgorICAgICAgICAjICAgICAgICAgPGJsb2NrPgorICAgICAgICAjCisgICAgICAgICMgYXMgYW4gYWx0ZXJuYXRpdmUgdG86CisgICAgICAgICMKKyAgICAgICAgIyAgICAgeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKQorICAgICAgICAjICAgICB0cnk6CisgICAgICAgICMgICAgICAgICA8YmxvY2s+CisgICAgICAgICMgICAgIGZpbmFsbHk6CisgICAgICAgICMgICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuYWNxdWlyZSgpCisgICAgICAgIHJldHVybiBfQ29udGV4dE1hbmFnZXIoc2VsZikKKworCitjbGFzcyBFdmVudDoKKyAgICAiIiJBc3luY2hyb25vdXMgZXF1aXZhbGVudCB0byB0aHJlYWRpbmcuRXZlbnQuCisKKyAgICBDbGFzcyBpbXBsZW1lbnRpbmcgZXZlbnQgb2JqZWN0cy4gQW4gZXZlbnQgbWFuYWdlcyBhIGZsYWcgdGhhdCBjYW4gYmUgc2V0CisgICAgdG8gdHJ1ZSB3aXRoIHRoZSBzZXQoKSBtZXRob2QgYW5kIHJlc2V0IHRvIGZhbHNlIHdpdGggdGhlIGNsZWFyKCkgbWV0aG9kLgorICAgIFRoZSB3YWl0KCkgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgZmxhZyBpcyB0cnVlLiBUaGUgZmxhZyBpcyBpbml0aWFsbHkKKyAgICBmYWxzZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl92YWx1ZSA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdzZXQnIGlmIHNlbGYuX3ZhbHVlIGVsc2UgJ3Vuc2V0JworICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBpc19zZXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQorCisgICAgZGVmIHNldChzZWxmKToKKyAgICAgICAgIiIiU2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIHRydWUuIEFsbCBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIGl0IHRvCisgICAgICAgIGJlY29tZSB0cnVlIGFyZSBhd2FrZW5lZC4gQ29yb3V0aW5lIHRoYXQgY2FsbCB3YWl0KCkgb25jZSB0aGUgZmxhZyBpcworICAgICAgICB0cnVlIHdpbGwgbm90IGJsb2NrIGF0IGFsbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl92YWx1ZToKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gVHJ1ZQorCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlJlc2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIGZhbHNlLiBTdWJzZXF1ZW50bHksIGNvcm91dGluZXMgY2FsbGluZworICAgICAgICB3YWl0KCkgd2lsbCBibG9jayB1bnRpbCBzZXQoKSBpcyBjYWxsZWQgdG8gc2V0IHRoZSBpbnRlcm5hbCBmbGFnCisgICAgICAgIHRvIHRydWUgYWdhaW4uIiIiCisgICAgICAgIHNlbGYuX3ZhbHVlID0gRmFsc2UKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgIiIiQmxvY2sgdW50aWwgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KKworICAgICAgICBJZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlIG9uIGVudHJ5LCByZXR1cm4gVHJ1ZQorICAgICAgICBpbW1lZGlhdGVseS4gIE90aGVyd2lzZSwgYmxvY2sgdW50aWwgYW5vdGhlciBjb3JvdXRpbmUgY2FsbHMKKyAgICAgICAgc2V0KCkgdG8gc2V0IHRoZSBmbGFnIHRvIHRydWUsIHRoZW4gcmV0dXJuIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl92YWx1ZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisKK2NsYXNzIENvbmRpdGlvbjoKKyAgICAiIiJBc3luY2hyb25vdXMgZXF1aXZhbGVudCB0byB0aHJlYWRpbmcuQ29uZGl0aW9uLgorCisgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGNvbmRpdGlvbiB2YXJpYWJsZSBvYmplY3RzLiBBIGNvbmRpdGlvbiB2YXJpYWJsZQorICAgIGFsbG93cyBvbmUgb3IgbW9yZSBjb3JvdXRpbmVzIHRvIHdhaXQgdW50aWwgdGhleSBhcmUgbm90aWZpZWQgYnkgYW5vdGhlcgorICAgIGNvcm91dGluZS4KKworICAgIEEgbmV3IExvY2sgb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIHVzZWQgYXMgdGhlIHVuZGVybHlpbmcgbG9jay4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgaWYgbG9jayBpcyBOb25lOgorICAgICAgICAgICAgbG9jayA9IExvY2sobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBlbGlmIGxvY2suX2xvb3AgaXMgbm90IHNlbGYuX2xvb3A6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsb29wIGFyZ3VtZW50IG11c3QgYWdyZWUgd2l0aCBsb2NrIikKKworICAgICAgICBzZWxmLl9sb2NrID0gbG9jaworICAgICAgICAjIEV4cG9ydCB0aGUgbG9jaydzIGxvY2tlZCgpLCBhY3F1aXJlKCkgYW5kIHJlbGVhc2UoKSBtZXRob2RzLgorICAgICAgICBzZWxmLmxvY2tlZCA9IGxvY2subG9ja2VkCisgICAgICAgIHNlbGYuYWNxdWlyZSA9IGxvY2suYWNxdWlyZQorICAgICAgICBzZWxmLnJlbGVhc2UgPSBsb2NrLnJlbGVhc2UKKworICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgZXh0cmEgPSAnbG9ja2VkJyBpZiBzZWxmLmxvY2tlZCgpIGVsc2UgJ3VubG9ja2VkJworICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCBub3RpZmllZC4KKworICAgICAgICBJZiB0aGUgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMKKyAgICAgICAgbWV0aG9kIGlzIGNhbGxlZCwgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHJlbGVhc2VzIHRoZSB1bmRlcmx5aW5nIGxvY2ssIGFuZCB0aGVuIGJsb2NrcworICAgICAgICB1bnRpbCBpdCBpcyBhd2FrZW5lZCBieSBhIG5vdGlmeSgpIG9yIG5vdGlmeV9hbGwoKSBjYWxsIGZvcgorICAgICAgICB0aGUgc2FtZSBjb25kaXRpb24gdmFyaWFibGUgaW4gYW5vdGhlciBjb3JvdXRpbmUuICBPbmNlCisgICAgICAgIGF3YWtlbmVkLCBpdCByZS1hY3F1aXJlcyB0aGUgbG9jayBhbmQgcmV0dXJucyBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYubG9ja2VkKCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2Nhbm5vdCB3YWl0IG9uIHVuLWFjcXVpcmVkIGxvY2snKQorCisgICAgICAgIHNlbGYucmVsZWFzZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiB3YWl0X2ZvcihzZWxmLCBwcmVkaWNhdGUpOgorICAgICAgICAiIiJXYWl0IHVudGlsIGEgcHJlZGljYXRlIGJlY29tZXMgdHJ1ZS4KKworICAgICAgICBUaGUgcHJlZGljYXRlIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHJlc3VsdCB3aWxsIGJlCisgICAgICAgIGludGVycHJldGVkIGFzIGEgYm9vbGVhbiB2YWx1ZS4gIFRoZSBmaW5hbCBwcmVkaWNhdGUgdmFsdWUgaXMKKyAgICAgICAgdGhlIHJldHVybiB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHByZWRpY2F0ZSgpCisgICAgICAgIHdoaWxlIG5vdCByZXN1bHQ6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYud2FpdCgpCisgICAgICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUoKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgbm90aWZ5KHNlbGYsIG49MSk6CisgICAgICAgICIiIkJ5IGRlZmF1bHQsIHdha2UgdXAgb25lIGNvcm91dGluZSB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLCBpZiBhbnkuCisgICAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QKKyAgICAgICAgaXMgY2FsbGVkLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhpcyBtZXRob2Qgd2FrZXMgdXAgYXQgbW9zdCBuIG9mIHRoZSBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIHRoZQorICAgICAgICBjb25kaXRpb24gdmFyaWFibGU7IGl0IGlzIGEgbm8tb3AgaWYgbm8gY29yb3V0aW5lcyBhcmUgd2FpdGluZy4KKworICAgICAgICBOb3RlOiBhbiBhd2FrZW5lZCBjb3JvdXRpbmUgZG9lcyBub3QgYWN0dWFsbHkgcmV0dXJuIGZyb20gaXRzCisgICAgICAgIHdhaXQoKSBjYWxsIHVudGlsIGl0IGNhbiByZWFjcXVpcmUgdGhlIGxvY2suIFNpbmNlIG5vdGlmeSgpIGRvZXMKKyAgICAgICAgbm90IHJlbGVhc2UgdGhlIGxvY2ssIGl0cyBjYWxsZXIgc2hvdWxkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYubG9ja2VkKCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2Nhbm5vdCBub3RpZnkgb24gdW4tYWNxdWlyZWQgbG9jaycpCisKKyAgICAgICAgaWR4ID0gMAorICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBpZiBpZHggPj0gbjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3QgZnV0LmRvbmUoKToKKyAgICAgICAgICAgICAgICBpZHggKz0gMQorICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgZGVmIG5vdGlmeV9hbGwoc2VsZik6CisgICAgICAgICIiIldha2UgdXAgYWxsIHRocmVhZHMgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gVGhpcyBtZXRob2QgYWN0cworICAgICAgICBsaWtlIG5vdGlmeSgpLCBidXQgd2FrZXMgdXAgYWxsIHdhaXRpbmcgdGhyZWFkcyBpbnN0ZWFkIG9mIG9uZS4gSWYgdGhlCisgICAgICAgIGNhbGxpbmcgdGhyZWFkIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsCisgICAgICAgIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubm90aWZ5KGxlbihzZWxmLl93YWl0ZXJzKSkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAjIFNlZSBjb21tZW50IGluIExvY2suX19pdGVyX18oKS4KKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gX0NvbnRleHRNYW5hZ2VyKHNlbGYpCisKKworY2xhc3MgU2VtYXBob3JlOgorICAgICIiIkEgU2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorCisgICAgQSBzZW1hcGhvcmUgbWFuYWdlcyBhbiBpbnRlcm5hbCBjb3VudGVyIHdoaWNoIGlzIGRlY3JlbWVudGVkIGJ5IGVhY2gKKyAgICBhY3F1aXJlKCkgY2FsbCBhbmQgaW5jcmVtZW50ZWQgYnkgZWFjaCByZWxlYXNlKCkgY2FsbC4gVGhlIGNvdW50ZXIKKyAgICBjYW4gbmV2ZXIgZ28gYmVsb3cgemVybzsgd2hlbiBhY3F1aXJlKCkgZmluZHMgdGhhdCBpdCBpcyB6ZXJvLCBpdCBibG9ja3MsCisgICAgd2FpdGluZyB1bnRpbCBzb21lIG90aGVyIHRocmVhZCBjYWxscyByZWxlYXNlKCkuCisKKyAgICBTZW1hcGhvcmVzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgorCisgICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50IGdpdmVzIHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgaW50ZXJuYWwKKyAgICBjb3VudGVyOyBpdCBkZWZhdWx0cyB0byAxLiBJZiB0aGUgdmFsdWUgZ2l2ZW4gaXMgbGVzcyB0aGFuIDAsCisgICAgVmFsdWVFcnJvciBpcyByYWlzZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgdmFsdWUgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU2VtYXBob3JlIGluaXRpYWwgdmFsdWUgbXVzdCBiZSA+PSAwIikKKyAgICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgZXh0cmEgPSAnbG9ja2VkJyBpZiBzZWxmLmxvY2tlZCgpIGVsc2UgJ3VubG9ja2VkLHZhbHVlOnt9Jy5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLl92YWx1ZSkKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgbG9ja2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgc2VtYXBob3JlIGNhbiBub3QgYmUgYWNxdWlyZWQgaW1tZWRpYXRlbHkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZSA9PSAwCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGFjcXVpcmUoc2VsZik6CisgICAgICAgICIiIkFjcXVpcmUgYSBzZW1hcGhvcmUuCisKKyAgICAgICAgSWYgdGhlIGludGVybmFsIGNvdW50ZXIgaXMgbGFyZ2VyIHRoYW4gemVybyBvbiBlbnRyeSwKKyAgICAgICAgZGVjcmVtZW50IGl0IGJ5IG9uZSBhbmQgcmV0dXJuIFRydWUgaW1tZWRpYXRlbHkuICBJZiBpdCBpcworICAgICAgICB6ZXJvIG9uIGVudHJ5LCBibG9jaywgd2FpdGluZyB1bnRpbCBzb21lIG90aGVyIGNvcm91dGluZSBoYXMKKyAgICAgICAgY2FsbGVkIHJlbGVhc2UoKSB0byBtYWtlIGl0IGxhcmdlciB0aGFuIDAsIGFuZCB0aGVuIHJldHVybgorICAgICAgICBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dhaXRlcnMgYW5kIHNlbGYuX3ZhbHVlID4gMDoKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlIC09IDEKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgICIiIlJlbGVhc2UgYSBzZW1hcGhvcmUsIGluY3JlbWVudGluZyB0aGUgaW50ZXJuYWwgY291bnRlciBieSBvbmUuCisgICAgICAgIFdoZW4gaXQgd2FzIHplcm8gb24gZW50cnkgYW5kIGFub3RoZXIgY29yb3V0aW5lIGlzIHdhaXRpbmcgZm9yIGl0IHRvCisgICAgICAgIGJlY29tZSBsYXJnZXIgdGhhbiB6ZXJvIGFnYWluLCB3YWtlIHVwIHRoYXQgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdmFsdWUgKz0gMQorICAgICAgICBmb3Igd2FpdGVyIGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChUcnVlKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgIyBTZWUgY29tbWVudCBpbiBMb2NrLl9faXRlcl9fKCkuCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgcmV0dXJuIF9Db250ZXh0TWFuYWdlcihzZWxmKQorCisKK2NsYXNzIEJvdW5kZWRTZW1hcGhvcmUoU2VtYXBob3JlKToKKyAgICAiIiJBIGJvdW5kZWQgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorCisgICAgVGhpcyByYWlzZXMgVmFsdWVFcnJvciBpbiByZWxlYXNlKCkgaWYgaXQgd291bGQgaW5jcmVhc2UgdGhlIHZhbHVlCisgICAgYWJvdmUgdGhlIGluaXRpYWwgdmFsdWUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fYm91bmRfdmFsdWUgPSB2YWx1ZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHZhbHVlLCBsb29wPWxvb3ApCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdmFsdWUgPj0gc2VsZi5fYm91bmRfdmFsdWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCb3VuZGVkU2VtYXBob3JlIHJlbGVhc2VkIHRvbyBtYW55IHRpbWVzJykKKyAgICAgICAgc3VwZXIoKS5yZWxlYXNlKCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2xvZy5weSBiL0xpYi9hc3luY2lvL2xvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E3MDc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vbG9nLnB5CkBAIC0wLDAgKzEsNyBAQAorIiIiTG9nZ2luZyBjb25maWd1cmF0aW9uLiIiIgorCitpbXBvcnQgbG9nZ2luZworCisKKyMgTmFtZSB0aGUgbG9nZ2VyIGFmdGVyIHRoZSBwYWNrYWdlLgorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19wYWNrYWdlX18pCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkMDY1NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDQ5OSBAQAorIiIiRXZlbnQgbG9vcCB1c2luZyBhIHByb2FjdG9yIGFuZCByZWxhdGVkIGNsYXNzZXMuCisKK0EgcHJvYWN0b3IgaXMgYSAibm90aWZ5LW9uLWNvbXBsZXRpb24iIG11bHRpcGxleGVyLiAgQ3VycmVudGx5IGEKK3Byb2FjdG9yIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gV2luZG93cyB3aXRoIElPQ1AuCisiIiIKKworX19hbGxfXyA9IFsnQmFzZVByb2FjdG9yRXZlbnRMb29wJ10KKworaW1wb3J0IHNvY2tldAorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbnN0YW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQodHJhbnNwb3J0cy5fRmxvd0NvbnRyb2xNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgcGlwZSBhbmQgc29ja2V0IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEpCisgICAgICAgIHNlbGYuX3NldF9leHRyYShzb2NrKQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9zb2NrID0gc29jaworICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX3NlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lICAjIE5vbmUgb3IgYnl0ZWFycmF5LgorICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl9wZW5kaW5nX3dyaXRlID0gMAorICAgICAgICBzZWxmLl9jb25uX2xvc3QgPSAwCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBGYWxzZSAgIyBTZXQgd2hlbiBjbG9zZSgpIGNhbGxlZC4KKyAgICAgICAgc2VsZi5fZW9mX3dyaXR0ZW4gPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIuX2F0dGFjaCgpCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyB3YWl0IHVudGlsIHByb3RvY29sLmNvbm5lY3Rpb25fbWFkZSgpIGhhcyBiZWVuIGNhbGxlZAorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24od2FpdGVyLl9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQsIE5vbmUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICdmZD0lcycgJSBzZWxmLl9zb2NrLmZpbGVubygpXQorICAgICAgICBpZiBzZWxmLl9yZWFkX2Z1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdyZWFkPSVzJyAlIHNlbGYuX3JlYWRfZnV0KQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgid3JpdGU9JXIiICUgc2VsZi5fd3JpdGVfZnV0KQorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBidWZzaXplID0gbGVuKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCd3cml0ZV9idWZzaXplPSVzJyAlIGJ1ZnNpemUpCisgICAgICAgIGlmIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ0VPRiB3cml0dGVuJykKKyAgICAgICAgcmV0dXJuICc8JXM+JyAlICcgJy5qb2luKGluZm8pCisKKyAgICBkZWYgX3NldF9leHRyYShzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHNvY2sKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyIGFuZCBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorICAgICAgICBpZiBzZWxmLl9yZWFkX2Z1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmNhbmNlbCgpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4YywgbWVzc2FnZT0nRmF0YWwgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSk6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6ICVzIiwgc2VsZiwgbWVzc2FnZSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IHNlbGYsCisgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZi5fcHJvdG9jb2wsCisgICAgICAgICAgICB9KQorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisKKyAgICBkZWYgX2ZvcmNlX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0LmNhbmNlbCgpCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnV0OgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3BlbmRpbmdfd3JpdGUgPSAwCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIGV4YykKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgWFhYIElmIHRoZXJlIGlzIGEgcGVuZGluZyBvdmVybGFwcGVkIHJlYWQgb24gdGhlIG90aGVyCisgICAgICAgICAgICAjIGVuZCB0aGVuIGl0IG1heSBmYWlsIHdpdGggRVJST1JfTkVUTkFNRV9ERUxFVEVEIGlmIHdlCisgICAgICAgICAgICAjIGp1c3QgY2xvc2Ugb3VyIGVuZC4gIEZpcnN0IGNhbGxpbmcgc2h1dGRvd24oKSBzZWVtcyB0bworICAgICAgICAgICAgIyBjdXJlIGl0LCBidXQgbWF5YmUgdXNpbmcgRGlzY29ubmVjdEV4KCkgd291bGQgYmUgYmV0dGVyLgorICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9zb2NrLCAnc2h1dGRvd24nKToKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHNlcnZlciA9IHNlbGYuX3NlcnZlcgorICAgICAgICAgICAgaWYgc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlcnZlci5fZGV0YWNoKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICBzaXplID0gc2VsZi5fcGVuZGluZ193cml0ZQorICAgICAgICBpZiBzZWxmLl9idWZmZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzaXplICs9IGxlbihzZWxmLl9idWZmZXIpCisgICAgICAgIHJldHVybiBzaXplCisKKworY2xhc3MgX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQoX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlJlYWRUcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3IgcmVhZCBwaXBlcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSwgc2VydmVyKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9sb29wX3JlYWRpbmcpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnKQorICAgICAgICBpZiBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0FscmVhZHkgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBwYXVzZXMgcmVhZGluZyIsIHNlbGYpCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vdCBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3BfcmVhZGluZywgc2VsZi5fcmVhZF9mdXQpCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlc3VtZXMgcmVhZGluZyIsIHNlbGYpCisKKyAgICBkZWYgX2xvb3BfcmVhZGluZyhzZWxmLCBmdXQ9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkYXRhID0gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGZ1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fcmVhZF9mdXQgaXMgZnV0IG9yIChzZWxmLl9yZWFkX2Z1dCBpcyBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgICAgICAgICAgZGF0YSA9IGZ1dC5yZXN1bHQoKSAgIyBkZWxpdmVyIGRhdGEgbGF0ZXIgaW4gImZpbmFsbHkiIGNsYXVzZQorCisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICMgc2luY2UgY2xvc2UoKSBoYXMgYmVlbiBjYWxsZWQgd2UgaWdub3JlIGFueSByZWFkIGRhdGEKKyAgICAgICAgICAgICAgICBkYXRhID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBkYXRhID09IGInJzoKKyAgICAgICAgICAgICAgICAjIHdlIGdvdCBlbmQtb2YtZmlsZSBzbyBubyBuZWVkIHRvIHJlc2NoZWR1bGUgYSBuZXcgcmVhZAorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAjIHJlc2NoZWR1bGUgYSBuZXcgcmVhZAorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBzZWxmLl9sb29wLl9wcm9hY3Rvci5yZWN2KHNlbGYuX3NvY2ssIDQwOTYpCisgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uQWJvcnRlZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiUmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCB3aGlsZSBjbG9zaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25SZXNldEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3BfcmVhZGluZykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcmVjZWl2ZWQgRU9GIiwgc2VsZikKKyAgICAgICAgICAgICAgICBrZWVwX29wZW4gPSBzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisKK2NsYXNzIF9Qcm9hY3RvckJhc2VXcml0ZVBpcGVUcmFuc3BvcnQoX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuV3JpdGVUcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3Igd3JpdGUgcGlwZXMuIiIiCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignd3JpdGVfZW9mKCkgYWxyZWFkeSBjYWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgT2JzZXJ2YWJsZSBzdGF0ZXM6CisgICAgICAgICMgMS4gSURMRTogX3dyaXRlX2Z1dCBhbmQgX2J1ZmZlciBib3RoIE5vbmUKKyAgICAgICAgIyAyLiBXUklUSU5HOiBfd3JpdGVfZnV0IHNldDsgX2J1ZmZlciBOb25lCisgICAgICAgICMgMy4gQkFDS0VEIFVQOiBfd3JpdGVfZnV0IHNldDsgX2J1ZmZlciBhIGJ5dGVhcnJheQorICAgICAgICAjIFdlIGFsd2F5cyBjb3B5IHRoZSBkYXRhLCBzbyB0aGUgY2FsbGVyIGNhbid0IG1vZGlmeSBpdAorICAgICAgICAjIHdoaWxlIHdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBJL08gdG8gaGFwcGVuLgorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZTogICMgSURMRSAtPiBXUklUSU5HCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5fYnVmZmVyIGlzIE5vbmUKKyAgICAgICAgICAgICMgUGFzcyBhIGNvcHksIGV4Y2VwdCBpZiBpdCdzIGFscmVhZHkgaW1tdXRhYmxlLgorICAgICAgICAgICAgc2VsZi5fbG9vcF93cml0aW5nKGRhdGE9Ynl0ZXMoZGF0YSkpCisgICAgICAgICAgICAjIFhYWCBTaG91bGQgd2UgcGF1c2UgdGhlIHByb3RvY29sIGF0IHRoaXMgcG9pbnQKKyAgICAgICAgICAgICMgaWYgbGVuKGRhdGEpID4gc2VsZi5faGlnaF93YXRlcj8gIChUaGF0IHdvdWxkCisgICAgICAgICAgICAjIHJlcXVpcmUga2VlcGluZyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBhc3NlZAorICAgICAgICAgICAgIyB0byBhIHNlbmQoKSB0aGF0IGhhc24ndCBmaW5pc2hlZCB5ZXQuKQorICAgICAgICBlbGlmIG5vdCBzZWxmLl9idWZmZXI6ICAjIFdSSVRJTkcgLT4gQkFDS0VEIFVQCisgICAgICAgICAgICAjIE1ha2UgYSBtdXRhYmxlIGNvcHkgd2hpY2ggd2UgY2FuIGV4dGVuZC4KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGJ5dGVhcnJheShkYXRhKQorICAgICAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorICAgICAgICBlbHNlOiAgIyBCQUNLRUQgVVAKKyAgICAgICAgICAgICMgQXBwZW5kIHRvIGJ1ZmZlciAoYWxzbyBjb3BpZXMpLgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIF9sb29wX3dyaXRpbmcoc2VsZiwgZj1Ob25lLCBkYXRhPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhc3NlcnQgZiBpcyBzZWxmLl93cml0ZV9mdXQKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfd3JpdGUgPSAwCisgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgIGYucmVzdWx0KCkKKyAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fZW9mX3dyaXR0ZW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisgICAgICAgICAgICAgICAgIyBOb3cgdGhhdCB3ZSd2ZSByZWR1Y2VkIHRoZSBidWZmZXIgc2l6ZSwgdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIHRvIHJlc3VtZSB3cml0aW5nIGlmIGl0IHdhcyBwYXVzZWQuICBOb3RlIHRoYXQKKyAgICAgICAgICAgICAgICAjIHdlIGRvIHRoaXMgbGFzdCBzaW5jZSB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGltbWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgIyBhbmQgaXQgbWF5IGFkZCBtb3JlIGRhdGEgdG8gdGhlIGJ1ZmZlciAoZXZlbiBjYXVzaW5nIHRoZQorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgdG8gYmUgcGF1c2VkIGFnYWluKS4KKyAgICAgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfcHJvdG9jb2woKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9mdXQgPSBzZWxmLl9sb29wLl9wcm9hY3Rvci5zZW5kKHNlbGYuX3NvY2ssIGRhdGEpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3dyaXRlX2Z1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9wZW5kaW5nX3dyaXRlID09IDAKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGVuZGluZ193cml0ZSA9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9mdXQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF93cml0aW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3Bfd3JpdGluZykKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25SZXNldEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoTm9uZSkKKworCitjbGFzcyBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQoX1Byb2FjdG9yQmFzZVdyaXRlUGlwZVRyYW5zcG9ydCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprdykKKyAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBzZWxmLl9sb29wLl9wcm9hY3Rvci5yZWN2KHNlbGYuX3NvY2ssIDE2KQorICAgICAgICBzZWxmLl9yZWFkX2Z1dC5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9waXBlX2Nsb3NlZCkKKworICAgIGRlZiBfcGlwZV9jbG9zZWQoc2VsZiwgZnV0KToKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgIyB0aGUgdHJhbnNwb3J0IGhhcyBiZWVuIGNsb3NlZAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBmdXQucmVzdWx0KCkgPT0gYicnCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5fcmVhZF9mdXQgaXMgTm9uZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBmdXQgaXMgc2VsZi5fcmVhZF9mdXQsIChmdXQsIHNlbGYuX3JlYWRfZnV0KQorICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoQnJva2VuUGlwZUVycm9yKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworCitjbGFzcyBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJvYWN0b3JCYXNlV3JpdGVQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciBkdXBsZXggcGlwZXMuIiIiCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qcm9hY3RvckJhc2VXcml0ZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5UcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3IgY29ubmVjdGVkIHNvY2tldHMuIiIiCisKKyAgICBkZWYgX3NldF9leHRyYShzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tldCddID0gc29jaworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9leHRyYVsnc29ja25hbWUnXSA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiZ2V0c29ja25hbWUoKSBmYWlsZWQgb24gJXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBleGNfaW5mbz1UcnVlKQorICAgICAgICBpZiAncGVlcm5hbWUnIG5vdCBpbiBzZWxmLl9leHRyYToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9leHRyYVsncGVlcm5hbWUnXSA9IHNvY2suZ2V0cGVlcm5hbWUoKQorICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiZ2V0cGVlcm5hbWUoKSBmYWlsZWQgb24gJXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBleGNfaW5mbz1UcnVlKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nIG9yIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2VvZl93cml0dGVuID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKworY2xhc3MgQmFzZVByb2FjdG9yRXZlbnRMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2FjdG9yKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgcHJvYWN0b3I6ICVzJywgcHJvYWN0b3IuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzZWxmLl9wcm9hY3RvciA9IHByb2FjdG9yCisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gcHJvYWN0b3IgICAjIGNvbnZlbmllbnQgYWxpYXMKKyAgICAgICAgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fYWNjZXB0X2Z1dHVyZXMgPSB7fSAgICMgc29ja2V0IGZpbGUgZGVzY3JpcHRvciA9PiBGdXR1cmUKKyAgICAgICAgcHJvYWN0b3Iuc2V0X2xvb3Aoc2VsZikKKyAgICAgICAgc2VsZi5fbWFrZV9zZWxmX3BpcGUoKQorCisgICAgZGVmIF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICBkZWYgX21ha2VfZHVwbGV4X3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgICMgV2Ugd2FudCBjb25uZWN0aW9uX2xvc3QoKSB0byBiZSBjYWxsZWQgd2hlbiBvdGhlciBlbmQgY2xvc2VzCisgICAgICAgIHJldHVybiBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pc19jbG9zZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fc3RvcF9hY2NlcHRfZnV0dXJlcygpCisgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIHNlbGYuX3Byb2FjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fcHJvYWN0b3IgPSBOb25lCisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gTm9uZQorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLnJlY3Yoc29jaywgbikKKworICAgIGRlZiBzb2NrX3NlbmRhbGwoc2VsZiwgc29jaywgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5zZW5kKHNvY2ssIGRhdGEpCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCBhZGRyZXNzKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihlcnIpCisgICAgICAgICAgICByZXR1cm4gZnV0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IuY29ubmVjdChzb2NrLCBhZGRyZXNzKQorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IuYWNjZXB0KHNvY2spCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zZWxmX3JlYWRpbmdfZnV0dXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZS5jYW5jZWwoKQorICAgICAgICAgICAgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLl9zc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5fY3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLl9jc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzIC09IDEKKworICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgICMgQSBzZWxmLXNvY2tldCwgcmVhbGx5LiA6LSkKKyAgICAgICAgc2VsZi5fc3NvY2ssIHNlbGYuX2Nzb2NrID0gc2VsZi5fc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuX3Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9jc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzICs9IDEKKyAgICAgICAgIyBkb24ndCBjaGVjayB0aGUgY3VycmVudCBsb29wIGJlY2F1c2UgX21ha2Vfc2VsZl9waXBlKCkgaXMgY2FsbGVkCisgICAgICAgICMgZnJvbSB0aGUgZXZlbnQgbG9vcCBjb25zdHJ1Y3RvcgorICAgICAgICBzZWxmLl9jYWxsX3Nvb24oc2VsZi5fbG9vcF9zZWxmX3JlYWRpbmcsICgpLCBjaGVja19sb29wPUZhbHNlKQorCisgICAgZGVmIF9sb29wX3NlbGZfcmVhZGluZyhzZWxmLCBmPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYucmVzdWx0KCkgICMgbWF5IHJhaXNlCisgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IucmVjdihzZWxmLl9zc29jaywgNDA5NikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZSA9IGYKKyAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYuX2Nzb2NrLnNlbmQoYidcMCcpCisKKyAgICBkZWYgX3N0YXJ0X3NlcnZpbmcoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywgc3NsPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgaWYgc3NsOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW9jcEV2ZW50TG9vcCBpcyBpbmNvbXBhdGlibGUgd2l0aCBTU0wuJykKKworICAgICAgICBkZWYgbG9vcChmPU5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBmLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBnb3QgYSBuZXcgY29ubmVjdGlvbiBmcm9tICVyOiAlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLCBhZGRyLCBjb25uKQorICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPXsncGVlcm5hbWUnOiBhZGRyfSwgc2VydmVyPXNlcnZlcikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmlzX2Nsb3NlZCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IuYWNjZXB0KHNvY2spCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgc29jay5maWxlbm8oKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0FjY2VwdCBmYWlsZWQgb24gYSBzb2NrZXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQnOiBzb2NrLAorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkFjY2VwdCBmYWlsZWQgb24gc29ja2V0ICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIGV4Y19pbmZvPVRydWUpCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fYWNjZXB0X2Z1dHVyZXNbc29jay5maWxlbm8oKV0gPSBmCisgICAgICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhsb29wKQorCisgICAgICAgIHNlbGYuY2FsbF9zb29uKGxvb3ApCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICBwYXNzICAgICMgWFhYIGhhcmQgd29yayBjdXJyZW50bHkgZG9uZSBpbiBwb2xsCisKKyAgICBkZWYgX3N0b3BfYWNjZXB0X2Z1dHVyZXMoc2VsZik6CisgICAgICAgIGZvciBmdXR1cmUgaW4gc2VsZi5fYWNjZXB0X2Z1dHVyZXMudmFsdWVzKCk6CisgICAgICAgICAgICBmdXR1cmUuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fYWNjZXB0X2Z1dHVyZXMuY2xlYXIoKQorCisgICAgZGVmIF9zdG9wX3NlcnZpbmcoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX3N0b3BfYWNjZXB0X2Z1dHVyZXMoKQorICAgICAgICBzZWxmLl9wcm9hY3Rvci5fc3RvcF9zZXJ2aW5nKHNvY2spCisgICAgICAgIHNvY2suY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5IGIvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmMyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9wcm90b2NvbHMucHkKQEAgLTAsMCArMSwxMjkgQEAKKyIiIkFic3RyYWN0IFByb3RvY29sIGNsYXNzLiIiIgorCitfX2FsbF9fID0gWydCYXNlUHJvdG9jb2wnLCAnUHJvdG9jb2wnLCAnRGF0YWdyYW1Qcm90b2NvbCcsCisgICAgICAgICAgICdTdWJwcm9jZXNzUHJvdG9jb2wnXQorCisKK2NsYXNzIEJhc2VQcm90b2NvbDoKKyAgICAiIiJDb21tb24gYmFzZSBjbGFzcyBmb3IgcHJvdG9jb2wgaW50ZXJmYWNlcy4KKworICAgIFVzdWFsbHkgdXNlciBpbXBsZW1lbnRzIHByb3RvY29scyB0aGF0IGRlcml2ZWQgZnJvbSBCYXNlUHJvdG9jb2wKKyAgICBsaWtlIFByb3RvY29sIG9yIFByb2Nlc3NQcm90b2NvbC4KKworICAgIFRoZSBvbmx5IGNhc2Ugd2hlbiBCYXNlUHJvdG9jb2wgc2hvdWxkIGJlIGltcGxlbWVudGVkIGRpcmVjdGx5IGlzCisgICAgd3JpdGUtb25seSB0cmFuc3BvcnQgbGlrZSB3cml0ZSBwaXBlCisgICAgIiIiCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyBtYWRlLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgdHJhbnNwb3J0IHJlcHJlc2VudGluZyB0aGUgcGlwZSBjb25uZWN0aW9uLgorICAgICAgICBUbyByZWNlaXZlIGRhdGEsIHdhaXQgZm9yIGRhdGFfcmVjZWl2ZWQoKSBjYWxscy4KKyAgICAgICAgV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQsIGNvbm5lY3Rpb25fbG9zdCgpIGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3Qgb3IgY2xvc2VkLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBpcyBhbiBleGNlcHRpb24gb2JqZWN0IG9yIE5vbmUgKHRoZSBsYXR0ZXIKKyAgICAgICAgbWVhbmluZyBhIHJlZ3VsYXIgRU9GIGlzIHJlY2VpdmVkIG9yIHRoZSBjb25uZWN0aW9uIHdhcworICAgICAgICBhYm9ydGVkIG9yIGNsb3NlZCkuCisgICAgICAgICIiIgorCisgICAgZGVmIHBhdXNlX3dyaXRpbmcoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZ29lcyBvdmVyIHRoZSBoaWdoLXdhdGVyIG1hcmsuCisKKyAgICAgICAgUGF1c2UgYW5kIHJlc3VtZSBjYWxscyBhcmUgcGFpcmVkIC0tIHBhdXNlX3dyaXRpbmcoKSBpcyBjYWxsZWQKKyAgICAgICAgb25jZSB3aGVuIHRoZSBidWZmZXIgZ29lcyBzdHJpY3RseSBvdmVyIHRoZSBoaWdoLXdhdGVyIG1hcmsKKyAgICAgICAgKGV2ZW4gaWYgc3Vic2VxdWVudCB3cml0ZXMgaW5jcmVhc2VzIHRoZSBidWZmZXIgc2l6ZSBldmVuCisgICAgICAgIG1vcmUpLCBhbmQgZXZlbnR1YWxseSByZXN1bWVfd3JpdGluZygpIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlCisgICAgICAgIGJ1ZmZlciBzaXplIHJlYWNoZXMgdGhlIGxvdy13YXRlciBtYXJrLgorCisgICAgICAgIE5vdGUgdGhhdCBpZiB0aGUgYnVmZmVyIHNpemUgZXF1YWxzIHRoZSBoaWdoLXdhdGVyIG1hcmssCisgICAgICAgIHBhdXNlX3dyaXRpbmcoKSBpcyBub3QgY2FsbGVkIC0tIGl0IG11c3QgZ28gc3RyaWN0bHkgb3Zlci4KKyAgICAgICAgQ29udmVyc2VseSwgcmVzdW1lX3dyaXRpbmcoKSBpcyBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIHNpemUgaXMKKyAgICAgICAgZXF1YWwgb3IgbG93ZXIgdGhhbiB0aGUgbG93LXdhdGVyIG1hcmsuICBUaGVzZSBlbmQgY29uZGl0aW9ucworICAgICAgICBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoaW5ncyBnbyBhcyBleHBlY3RlZCB3aGVuIGVpdGhlcgorICAgICAgICBtYXJrIGlzIHplcm8uCisKKyAgICAgICAgTk9URTogVGhpcyBpcyB0aGUgb25seSBQcm90b2NvbCBjYWxsYmFjayB0aGF0IGlzIG5vdCBjYWxsZWQKKyAgICAgICAgdGhyb3VnaCBFdmVudExvb3AuY2FsbF9zb29uKCkgLS0gaWYgaXQgd2VyZSwgaXQgd291bGQgaGF2ZSBubworICAgICAgICBlZmZlY3Qgd2hlbiBpdCdzIG1vc3QgbmVlZGVkICh3aGVuIHRoZSBhcHAga2VlcHMgd3JpdGluZworICAgICAgICB3aXRob3V0IHlpZWxkaW5nIHVudGlsIHBhdXNlX3dyaXRpbmcoKSBpcyBjYWxsZWQpLgorICAgICAgICAiIiIKKworICAgIGRlZiByZXN1bWVfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIHRyYW5zcG9ydCdzIGJ1ZmZlciBkcmFpbnMgYmVsb3cgdGhlIGxvdy13YXRlciBtYXJrLgorCisgICAgICAgIFNlZSBwYXVzZV93cml0aW5nKCkgZm9yIGRldGFpbHMuCisgICAgICAgICIiIgorCisKK2NsYXNzIFByb3RvY29sKEJhc2VQcm90b2NvbCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciBzdHJlYW0gcHJvdG9jb2wuCisKKyAgICBUaGUgdXNlciBzaG91bGQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiAgVGhleSBjYW4gaW5oZXJpdCBmcm9tCisgICAgdGhpcyBjbGFzcyBidXQgZG9uJ3QgbmVlZCB0by4gIFRoZSBpbXBsZW1lbnRhdGlvbnMgaGVyZSBkbworICAgIG5vdGhpbmcgKHRoZXkgZG9uJ3QgcmFpc2UgZXhjZXB0aW9ucykuCisKKyAgICBXaGVuIHRoZSB1c2VyIHdhbnRzIHRvIHJlcXVlc3RzIGEgdHJhbnNwb3J0LCB0aGV5IHBhc3MgYSBwcm90b2NvbAorICAgIGZhY3RvcnkgdG8gYSB1dGlsaXR5IGZ1bmN0aW9uIChlLmcuLCBFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oKSkuCisKKyAgICBXaGVuIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUgc3VjY2Vzc2Z1bGx5LCBjb25uZWN0aW9uX21hZGUoKSBpcworICAgIGNhbGxlZCB3aXRoIGEgc3VpdGFibGUgdHJhbnNwb3J0IG9iamVjdC4gIFRoZW4gZGF0YV9yZWNlaXZlZCgpCisgICAgd2lsbCBiZSBjYWxsZWQgMCBvciBtb3JlIHRpbWVzIHdpdGggZGF0YSAoYnl0ZXMpIHJlY2VpdmVkIGZyb20gdGhlCisgICAgdHJhbnNwb3J0OyBmaW5hbGx5LCBjb25uZWN0aW9uX2xvc3QoKSB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UKKyAgICB3aXRoIGVpdGhlciBhbiBleGNlcHRpb24gb2JqZWN0IG9yIE5vbmUgYXMgYW4gYXJndW1lbnQuCisKKyAgICBTdGF0ZSBtYWNoaW5lIG9mIGNhbGxzOgorCisgICAgICBzdGFydCAtPiBDTSBbLT4gRFIqXSBbLT4gRVI/XSAtPiBDTCAtPiBlbmQKKyAgICAiIiIKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGEgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBvdGhlciBlbmQgY2FsbHMgd3JpdGVfZW9mKCkgb3IgZXF1aXZhbGVudC4KKworICAgICAgICBJZiB0aGlzIHJldHVybnMgYSBmYWxzZSB2YWx1ZSAoaW5jbHVkaW5nIE5vbmUpLCB0aGUgdHJhbnNwb3J0CisgICAgICAgIHdpbGwgY2xvc2UgaXRzZWxmLiAgSWYgaXQgcmV0dXJucyBhIHRydWUgdmFsdWUsIGNsb3NpbmcgdGhlCisgICAgICAgIHRyYW5zcG9ydCBpcyB1cCB0byB0aGUgcHJvdG9jb2wuCisgICAgICAgICIiIgorCisKK2NsYXNzIERhdGFncmFtUHJvdG9jb2woQmFzZVByb3RvY29sKToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIGRhdGFncmFtIHByb3RvY29sLiIiIgorCisgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzb21lIGRhdGFncmFtIGlzIHJlY2VpdmVkLiIiIgorCisgICAgZGVmIGVycm9yX3JlY2VpdmVkKHNlbGYsIGV4Yyk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgc2VuZCBvciByZWNlaXZlIG9wZXJhdGlvbiByYWlzZXMgYW4gT1NFcnJvci4KKworICAgICAgICAoT3RoZXIgdGhhbiBCbG9ja2luZ0lPRXJyb3Igb3IgSW50ZXJydXB0ZWRFcnJvci4pCisgICAgICAgICIiIgorCisKK2NsYXNzIFN1YnByb2Nlc3NQcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkludGVyZmFjZSBmb3IgcHJvdG9jb2wgZm9yIHN1YnByb2Nlc3MgY2FsbHMuIiIiCisKKyAgICBkZWYgcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIHN1YnByb2Nlc3Mgd3JpdGVzIGRhdGEgaW50byBzdGRvdXQvc3RkZXJyIHBpcGUuCisKKyAgICAgICAgZmQgaXMgaW50IGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgZGF0YSBpcyBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorCisgICAgZGVmIHBpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGNoaWxkIHByb2Nlc3MgaXMKKyAgICAgICAgY2xvc2VkLgorCisgICAgICAgIGZkIGlzIHRoZSBpbnQgZmlsZSBkZXNjcmlwdG9yIHRoYXQgd2FzIGNsb3NlZC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcHJvY2Vzc19leGl0ZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHN1YnByb2Nlc3MgaGFzIGV4aXRlZC4iIiIKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3F1ZXVlcy5weSBiL0xpYi9hc3luY2lvL3F1ZXVlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU1MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vcXVldWVzLnB5CkBAIC0wLDAgKzEsMjg4IEBACisiIiJRdWV1ZXMiIiIKKworX19hbGxfXyA9IFsnUXVldWUnLCAnUHJpb3JpdHlRdWV1ZScsICdMaWZvUXVldWUnLCAnSm9pbmFibGVRdWV1ZScsCisgICAgICAgICAgICdRdWV1ZUZ1bGwnLCAnUXVldWVFbXB0eSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGhlYXBxCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgbG9ja3MKK2Zyb20gLnRhc2tzIGltcG9ydCBjb3JvdXRpbmUKKworCitjbGFzcyBRdWV1ZUVtcHR5KEV4Y2VwdGlvbik6CisgICAgJ0V4Y2VwdGlvbiByYWlzZWQgYnkgUXVldWUuZ2V0KGJsb2NrPTApL2dldF9ub3dhaXQoKS4nCisgICAgcGFzcworCisKK2NsYXNzIFF1ZXVlRnVsbChFeGNlcHRpb24pOgorICAgICdFeGNlcHRpb24gcmFpc2VkIGJ5IFF1ZXVlLnB1dChibG9jaz0wKS9wdXRfbm93YWl0KCkuJworICAgIHBhc3MKKworCitjbGFzcyBRdWV1ZToKKyAgICAiIiJBIHF1ZXVlLCB1c2VmdWwgZm9yIGNvb3JkaW5hdGluZyBwcm9kdWNlciBhbmQgY29uc3VtZXIgY29yb3V0aW5lcy4KKworICAgIElmIG1heHNpemUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHRoZSBxdWV1ZSBzaXplIGlzIGluZmluaXRlLiBJZiBpdAorICAgIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAsIHRoZW4gInlpZWxkIGZyb20gcHV0KCkiIHdpbGwgYmxvY2sgd2hlbiB0aGUKKyAgICBxdWV1ZSByZWFjaGVzIG1heHNpemUsIHVudGlsIGFuIGl0ZW0gaXMgcmVtb3ZlZCBieSBnZXQoKS4KKworICAgIFVubGlrZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBRdWV1ZSwgeW91IGNhbiByZWxpYWJseSBrbm93IHRoaXMgUXVldWUncyBzaXplCisgICAgd2l0aCBxc2l6ZSgpLCBzaW5jZSB5b3VyIHNpbmdsZS10aHJlYWRlZCBhc3luY2lvIGFwcGxpY2F0aW9uIHdvbid0IGJlCisgICAgaW50ZXJydXB0ZWQgYmV0d2VlbiBjYWxsaW5nIHFzaXplKCkgYW5kIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgUXVldWUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX21heHNpemUgPSBtYXhzaXplCisKKyAgICAgICAgIyBGdXR1cmVzLgorICAgICAgICBzZWxmLl9nZXR0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICAjIFBhaXJzIG9mIChpdGVtLCBGdXR1cmUpLgorICAgICAgICBzZWxmLl9wdXR0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9pbml0KG1heHNpemUpCisKKyAgICBkZWYgX2luaXQoc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIHNlbGYuX3F1ZXVlID0gY29sbGVjdGlvbnMuZGVxdWUoKQorCisgICAgZGVmIF9nZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9xdWV1ZS5wb3BsZWZ0KCkKKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0pOgorICAgICAgICBzZWxmLl9xdWV1ZS5hcHBlbmQoaXRlbSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8e30gYXQgezojeH0ge30+Jy5mb3JtYXQoCisgICAgICAgICAgICB0eXBlKHNlbGYpLl9fbmFtZV9fLCBpZChzZWxmKSwgc2VsZi5fZm9ybWF0KCkpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8e30ge30+Jy5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fZm9ybWF0KCkpCisKKyAgICBkZWYgX2Zvcm1hdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gJ21heHNpemU9eyFyfScuZm9ybWF0KHNlbGYuX21heHNpemUpCisgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ19xdWV1ZScsIE5vbmUpOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgX3F1ZXVlPXshcn0nLmZvcm1hdChsaXN0KHNlbGYuX3F1ZXVlKSkKKyAgICAgICAgaWYgc2VsZi5fZ2V0dGVyczoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIF9nZXR0ZXJzW3t9XScuZm9ybWF0KGxlbihzZWxmLl9nZXR0ZXJzKSkKKyAgICAgICAgaWYgc2VsZi5fcHV0dGVyczoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIF9wdXR0ZXJzW3t9XScuZm9ybWF0KGxlbihzZWxmLl9wdXR0ZXJzKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9jb25zdW1lX2RvbmVfZ2V0dGVycyhzZWxmKToKKyAgICAgICAgIyBEZWxldGUgd2FpdGVycyBhdCB0aGUgaGVhZCBvZiB0aGUgZ2V0KCkgcXVldWUgd2hvJ3ZlIHRpbWVkIG91dC4KKyAgICAgICAgd2hpbGUgc2VsZi5fZ2V0dGVycyBhbmQgc2VsZi5fZ2V0dGVyc1swXS5kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9nZXR0ZXJzLnBvcGxlZnQoKQorCisgICAgZGVmIF9jb25zdW1lX2RvbmVfcHV0dGVycyhzZWxmKToKKyAgICAgICAgIyBEZWxldGUgd2FpdGVycyBhdCB0aGUgaGVhZCBvZiB0aGUgcHV0KCkgcXVldWUgd2hvJ3ZlIHRpbWVkIG91dC4KKyAgICAgICAgd2hpbGUgc2VsZi5fcHV0dGVycyBhbmQgc2VsZi5fcHV0dGVyc1swXVsxXS5kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9wdXR0ZXJzLnBvcGxlZnQoKQorCisgICAgZGVmIHFzaXplKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIHF1ZXVlLiIiIgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3F1ZXVlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1heHNpemUoc2VsZik6CisgICAgICAgICIiIk51bWJlciBvZiBpdGVtcyBhbGxvd2VkIGluIHRoZSBxdWV1ZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21heHNpemUKKworICAgIGRlZiBlbXB0eShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fcXVldWUKKworICAgIGRlZiBmdWxsKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGVyZSBhcmUgbWF4c2l6ZSBpdGVtcyBpbiB0aGUgcXVldWUuCisKKyAgICAgICAgTm90ZTogaWYgdGhlIFF1ZXVlIHdhcyBpbml0aWFsaXplZCB3aXRoIG1heHNpemU9MCAodGhlIGRlZmF1bHQpLAorICAgICAgICB0aGVuIGZ1bGwoKSBpcyBuZXZlciBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fbWF4c2l6ZSA8PSAwOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5xc2l6ZSgpID49IHNlbGYuX21heHNpemUKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgcHV0KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJQdXQgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZS4KKworICAgICAgICBJZiB5b3UgeWllbGQgZnJvbSBwdXQoKSwgd2FpdCB1bnRpbCBhIGZyZWUgc2xvdCBpcyBhdmFpbGFibGUKKyAgICAgICAgYmVmb3JlIGFkZGluZyBpdGVtLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29uc3VtZV9kb25lX2dldHRlcnMoKQorICAgICAgICBpZiBzZWxmLl9nZXR0ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9xdWV1ZSwgKAorICAgICAgICAgICAgICAgICdxdWV1ZSBub24tZW1wdHksIHdoeSBhcmUgZ2V0dGVycyB3YWl0aW5nPycpCisKKyAgICAgICAgICAgIGdldHRlciA9IHNlbGYuX2dldHRlcnMucG9wbGVmdCgpCisKKyAgICAgICAgICAgICMgVXNlIF9wdXQgYW5kIF9nZXQgaW5zdGVhZCBvZiBwYXNzaW5nIGl0ZW0gc3RyYWlnaHQgdG8gZ2V0dGVyLCBpbgorICAgICAgICAgICAgIyBjYXNlIGEgc3ViY2xhc3MgaGFzIGxvZ2ljIHRoYXQgbXVzdCBydW4gKGUuZy4gSm9pbmFibGVRdWV1ZSkuCisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKyAgICAgICAgICAgIGdldHRlci5zZXRfcmVzdWx0KHNlbGYuX2dldCgpKQorCisgICAgICAgIGVsaWYgc2VsZi5fbWF4c2l6ZSA+IDAgYW5kIHNlbGYuX21heHNpemUgPD0gc2VsZi5xc2l6ZSgpOgorICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorCisgICAgICAgICAgICBzZWxmLl9wdXR0ZXJzLmFwcGVuZCgoaXRlbSwgd2FpdGVyKSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorCisgICAgZGVmIHB1dF9ub3dhaXQoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIlB1dCBhbiBpdGVtIGludG8gdGhlIHF1ZXVlIHdpdGhvdXQgYmxvY2tpbmcuCisKKyAgICAgICAgSWYgbm8gZnJlZSBzbG90IGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgcmFpc2UgUXVldWVGdWxsLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29uc3VtZV9kb25lX2dldHRlcnMoKQorICAgICAgICBpZiBzZWxmLl9nZXR0ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9xdWV1ZSwgKAorICAgICAgICAgICAgICAgICdxdWV1ZSBub24tZW1wdHksIHdoeSBhcmUgZ2V0dGVycyB3YWl0aW5nPycpCisKKyAgICAgICAgICAgIGdldHRlciA9IHNlbGYuX2dldHRlcnMucG9wbGVmdCgpCisKKyAgICAgICAgICAgICMgVXNlIF9wdXQgYW5kIF9nZXQgaW5zdGVhZCBvZiBwYXNzaW5nIGl0ZW0gc3RyYWlnaHQgdG8gZ2V0dGVyLCBpbgorICAgICAgICAgICAgIyBjYXNlIGEgc3ViY2xhc3MgaGFzIGxvZ2ljIHRoYXQgbXVzdCBydW4gKGUuZy4gSm9pbmFibGVRdWV1ZSkuCisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKyAgICAgICAgICAgIGdldHRlci5zZXRfcmVzdWx0KHNlbGYuX2dldCgpKQorCisgICAgICAgIGVsaWYgc2VsZi5fbWF4c2l6ZSA+IDAgYW5kIHNlbGYuX21heHNpemUgPD0gc2VsZi5xc2l6ZSgpOgorICAgICAgICAgICAgcmFpc2UgUXVldWVGdWxsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICAgIElmIHlvdSB5aWVsZCBmcm9tIGdldCgpLCB3YWl0IHVudGlsIGEgaXRlbSBpcyBhdmFpbGFibGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfcHV0dGVycygpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5mdWxsKCksICdxdWV1ZSBub3QgZnVsbCwgd2h5IGFyZSBwdXR0ZXJzIHdhaXRpbmc/JworICAgICAgICAgICAgaXRlbSwgcHV0dGVyID0gc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorCisgICAgICAgICAgICAjIFdoZW4gYSBnZXR0ZXIgcnVucyBhbmQgZnJlZXMgdXAgYSBzbG90IHNvIHRoaXMgcHV0dGVyIGNhbgorICAgICAgICAgICAgIyBydW4sIHdlIG5lZWQgdG8gZGVmZXIgdGhlIHB1dCBmb3IgYSB0aWNrIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAjIGdldHRlcnMgYW5kIHB1dHRlcnMgYWx0ZXJuYXRlIHBlcmZlY3RseS4gU2VlCisgICAgICAgICAgICAjIENoYW5uZWxUZXN0LnRlc3Rfd2FpdC4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHB1dHRlci5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLCBOb25lKQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKworICAgICAgICBlbGlmIHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorCisgICAgICAgICAgICBzZWxmLl9nZXR0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gd2FpdGVyKQorCisgICAgZGVmIGdldF9ub3dhaXQoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZW0gaWYgb25lIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgZWxzZSByYWlzZSBRdWV1ZUVtcHR5LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29uc3VtZV9kb25lX3B1dHRlcnMoKQorICAgICAgICBpZiBzZWxmLl9wdXR0ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuZnVsbCgpLCAncXVldWUgbm90IGZ1bGwsIHdoeSBhcmUgcHV0dGVycyB3YWl0aW5nPycKKyAgICAgICAgICAgIGl0ZW0sIHB1dHRlciA9IHNlbGYuX3B1dHRlcnMucG9wbGVmdCgpCisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKyAgICAgICAgICAgICMgV2FrZSBwdXR0ZXIgb24gbmV4dCB0aWNrLgorICAgICAgICAgICAgcHV0dGVyLnNldF9yZXN1bHQoTm9uZSkKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgpCisKKyAgICAgICAgZWxpZiBzZWxmLnFzaXplKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFF1ZXVlRW1wdHkKKworCitjbGFzcyBQcmlvcml0eVF1ZXVlKFF1ZXVlKToKKyAgICAiIiJBIHN1YmNsYXNzIG9mIFF1ZXVlOyByZXRyaWV2ZXMgZW50cmllcyBpbiBwcmlvcml0eSBvcmRlciAobG93ZXN0IGZpcnN0KS4KKworICAgIEVudHJpZXMgYXJlIHR5cGljYWxseSB0dXBsZXMgb2YgdGhlIGZvcm06IChwcmlvcml0eSBudW1iZXIsIGRhdGEpLgorICAgICIiIgorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IFtdCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtLCBoZWFwcHVzaD1oZWFwcS5oZWFwcHVzaCk6CisgICAgICAgIGhlYXBwdXNoKHNlbGYuX3F1ZXVlLCBpdGVtKQorCisgICAgZGVmIF9nZXQoc2VsZiwgaGVhcHBvcD1oZWFwcS5oZWFwcG9wKToKKyAgICAgICAgcmV0dXJuIGhlYXBwb3Aoc2VsZi5fcXVldWUpCisKKworY2xhc3MgTGlmb1F1ZXVlKFF1ZXVlKToKKyAgICAiIiJBIHN1YmNsYXNzIG9mIFF1ZXVlIHRoYXQgcmV0cmlldmVzIG1vc3QgcmVjZW50bHkgYWRkZWQgZW50cmllcyBmaXJzdC4iIiIKKworICAgIGRlZiBfaW5pdChzZWxmLCBtYXhzaXplKToKKyAgICAgICAgc2VsZi5fcXVldWUgPSBbXQorCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSk6CisgICAgICAgIHNlbGYuX3F1ZXVlLmFwcGVuZChpdGVtKQorCisgICAgZGVmIF9nZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9xdWV1ZS5wb3AoKQorCisKK2NsYXNzIEpvaW5hYmxlUXVldWUoUXVldWUpOgorICAgICIiIkEgc3ViY2xhc3Mgb2YgUXVldWUgd2l0aCB0YXNrX2RvbmUoKSBhbmQgam9pbigpIG1ldGhvZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1heHNpemU9bWF4c2l6ZSwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID0gMAorICAgICAgICBzZWxmLl9maW5pc2hlZCA9IGxvY2tzLkV2ZW50KGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fZmluaXNoZWQuc2V0KCkKKworICAgIGRlZiBfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBRdWV1ZS5fZm9ybWF0KHNlbGYpCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3M6CisgICAgICAgICAgICByZXN1bHQgKz0gJyB0YXNrcz17fScuZm9ybWF0KHNlbGYuX3VuZmluaXNoZWRfdGFza3MpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0pOgorICAgICAgICBzdXBlcigpLl9wdXQoaXRlbSkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyArPSAxCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkLmNsZWFyKCkKKworICAgIGRlZiB0YXNrX2RvbmUoc2VsZik6CisgICAgICAgICIiIkluZGljYXRlIHRoYXQgYSBmb3JtZXJseSBlbnF1ZXVlZCB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICAgIFVzZWQgYnkgcXVldWUgY29uc3VtZXJzLiBGb3IgZWFjaCBnZXQoKSB1c2VkIHRvIGZldGNoIGEgdGFzaywKKyAgICAgICAgYSBzdWJzZXF1ZW50IGNhbGwgdG8gdGFza19kb25lKCkgdGVsbHMgdGhlIHF1ZXVlIHRoYXQgdGhlIHByb2Nlc3NpbmcKKyAgICAgICAgb24gdGhlIHRhc2sgaXMgY29tcGxldGUuCisKKyAgICAgICAgSWYgYSBqb2luKCkgaXMgY3VycmVudGx5IGJsb2NraW5nLCBpdCB3aWxsIHJlc3VtZSB3aGVuIGFsbCBpdGVtcyBoYXZlCisgICAgICAgIGJlZW4gcHJvY2Vzc2VkIChtZWFuaW5nIHRoYXQgYSB0YXNrX2RvbmUoKSBjYWxsIHdhcyByZWNlaXZlZCBmb3IgZXZlcnkKKyAgICAgICAgaXRlbSB0aGF0IGhhZCBiZWVuIHB1dCgpIGludG8gdGhlIHF1ZXVlKS4KKworICAgICAgICBSYWlzZXMgVmFsdWVFcnJvciBpZiBjYWxsZWQgbW9yZSB0aW1lcyB0aGFuIHRoZXJlIHdlcmUgaXRlbXMgcGxhY2VkIGluCisgICAgICAgIHRoZSBxdWV1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPD0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Rhc2tfZG9uZSgpIGNhbGxlZCB0b28gbWFueSB0aW1lcycpCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgLT0gMQorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID09IDA6CisgICAgICAgICAgICBzZWxmLl9maW5pc2hlZC5zZXQoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBqb2luKHNlbGYpOgorICAgICAgICAiIiJCbG9jayB1bnRpbCBhbGwgaXRlbXMgaW4gdGhlIHF1ZXVlIGhhdmUgYmVlbiBnb3R0ZW4gYW5kIHByb2Nlc3NlZC4KKworICAgICAgICBUaGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBnb2VzIHVwIHdoZW5ldmVyIGFuIGl0ZW0gaXMgYWRkZWQgdG8gdGhlCisgICAgICAgIHF1ZXVlLiBUaGUgY291bnQgZ29lcyBkb3duIHdoZW5ldmVyIGEgY29uc3VtZXIgdGhyZWFkIGNhbGxzIHRhc2tfZG9uZSgpCisgICAgICAgIHRvIGluZGljYXRlIHRoYXQgdGhlIGl0ZW0gd2FzIHJldHJpZXZlZCBhbmQgYWxsIHdvcmsgb24gaXQgaXMgY29tcGxldGUuCisgICAgICAgIFdoZW4gdGhlIGNvdW50IG9mIHVuZmluaXNoZWQgdGFza3MgZHJvcHMgdG8gemVybywgam9pbigpIHVuYmxvY2tzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA+IDA6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZpbmlzaGVkLndhaXQoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZGU5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zZWxlY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSw5OTYgQEAKKyIiIkV2ZW50IGxvb3AgdXNpbmcgYSBzZWxlY3RvciBhbmQgcmVsYXRlZCBjbGFzc2VzLgorCitBIHNlbGVjdG9yIGlzIGEgIm5vdGlmeS13aGVuLXJlYWR5IiBtdWx0aXBsZXhlci4gIEZvciBhIHN1YmNsYXNzIHdoaWNoCithbHNvIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHNpZ25hbCBoYW5kbGluZywgc2VlIHRoZSB1bml4X2V2ZW50cyBzdWItbW9kdWxlLgorIiIiCisKK19fYWxsX18gPSBbJ0Jhc2VTZWxlY3RvckV2ZW50TG9vcCddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGVycm5vCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgc29ja2V0Cit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbnN0YW50cworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitkZWYgX3Rlc3Rfc2VsZWN0b3JfZXZlbnQoc2VsZWN0b3IsIGZkLCBldmVudCk6CisgICAgIyBUZXN0IGlmIHRoZSBzZWxlY3RvciBpcyBtb25pdG9yaW5nICdldmVudCcgZXZlbnRzCisgICAgIyBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciAnZmQnLgorICAgIHRyeToKKyAgICAgICAga2V5ID0gc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBib29sKGtleS5ldmVudHMgJiBldmVudCkKKworCitjbGFzcyBCYXNlU2VsZWN0b3JFdmVudExvb3AoYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCk6CisgICAgIiIiU2VsZWN0b3IgZXZlbnQgbG9vcC4KKworICAgIFNlZSBldmVudHMuRXZlbnRMb29wIGZvciBBUEkgc3BlY2lmaWNhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgc2VsZWN0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgc2VsZWN0b3I6ICVzJywgc2VsZWN0b3IuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IHNlbGVjdG9yCisgICAgICAgIHNlbGYuX21ha2Vfc2VsZl9waXBlKCkKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX3NzbF90cmFuc3BvcnQoc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWUsIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICBkZWYgX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz1Ob25lLCB3YWl0ZXI9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfY2xvc2VkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIGlmIHNlbGYuX3NlbGVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBOb25lCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc2VsZi5fc3NvY2suZmlsZW5vKCkpCisgICAgICAgIHNlbGYuX3Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fc3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyAtPSAxCisKKyAgICBkZWYgX21ha2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICAjIEEgc2VsZi1zb2NrZXQsIHJlYWxseS4gOi0pCisgICAgICAgIHNlbGYuX3Nzb2NrLCBzZWxmLl9jc29jayA9IHNlbGYuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9zc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5fY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisgICAgICAgIHNlbGYuYWRkX3JlYWRlcihzZWxmLl9zc29jay5maWxlbm8oKSwgc2VsZi5fcmVhZF9mcm9tX3NlbGYpCisKKyAgICBkZWYgX3Byb2Nlc3Nfc2VsZl9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3JlYWRfZnJvbV9zZWxmKHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zc29jay5yZWN2KDQwOTYpCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19zZWxmX2RhdGEoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBleGNlcHQgQmxvY2tpbmdJT0Vycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgICMgVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLCBwb3NzaWJseSBhZnRlcgorICAgICAgICAjIF9jbG9zZV9zZWxmX3BpcGUoKSBoYXMgYmVlbiBjYWxsZWQgb3IgZXZlbiB3aGlsZSBpdCBpcworICAgICAgICAjIHJ1bm5pbmcuICBHdWFyZCBmb3Igc2VsZi5fY3NvY2sgYmVpbmcgTm9uZSBvciBjbG9zZWQuICBXaGVuCisgICAgICAgICMgYSBzb2NrZXQgaXMgY2xvc2VkLCBzZW5kKCkgcmFpc2VzIE9TRXJyb3IgKHdpdGggZXJybm8gc2V0IHRvCisgICAgICAgICMgRUJBREYsIGJ1dCBsZXQncyBub3QgcmVseSBvbiB0aGUgZXhhY3QgZXJyb3IgY29kZSkuCisgICAgICAgIGNzb2NrID0gc2VsZi5fY3NvY2sKKyAgICAgICAgaWYgY3NvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3NvY2suc2VuZChiJ1wwJykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkZhaWwgdG8gd3JpdGUgYSBudWxsIGJ5dGUgaW50byB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGYtcGlwZSBzb2NrZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89VHJ1ZSkKKworICAgIGRlZiBfc3RhcnRfc2VydmluZyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0PU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc2VsZi5hZGRfcmVhZGVyKHNvY2suZmlsZW5vKCksIHNlbGYuX2FjY2VwdF9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywgc3NsY29udGV4dCwgc2VydmVyKQorCisgICAgZGVmIF9hY2NlcHRfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIGdvdCBhIG5ldyBjb25uZWN0aW9uIGZyb20gJXI6ICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLCBhZGRyLCBjb25uKQorICAgICAgICAgICAgY29ubi5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsIENvbm5lY3Rpb25BYm9ydGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcyAgIyBGYWxzZSBhbGFybS4KKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgIyBUaGVyZSdzIG5vd2hlcmUgdG8gc2VuZCB0aGUgZXJyb3IsIHNvIGp1c3QgbG9nIGl0LgorICAgICAgICAgICAgIyBUT0RPOiBTb21lb25lIHdpbGwgd2FudCBhbiBlcnJvciBoYW5kbGVyIGZvciB0aGlzLgorICAgICAgICAgICAgaWYgZXhjLmVycm5vIGluIChlcnJuby5FTUZJTEUsIGVycm5vLkVORklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PQlVGUywgZXJybm8uRU5PTUVNKToKKyAgICAgICAgICAgICAgICAjIFNvbWUgcGxhdGZvcm1zIChlLmcuIExpbnV4IGtlZXAgcmVwb3J0aW5nIHRoZSBGRCBhcworICAgICAgICAgICAgICAgICMgcmVhZHksIHNvIHdlIHJlbW92ZSB0aGUgcmVhZCBoYW5kbGVyIHRlbXBvcmFyaWx5LgorICAgICAgICAgICAgICAgICMgV2UnbGwgdHJ5IGFnYWluIGluIGEgd2hpbGUuCisgICAgICAgICAgICAgICAgc2VsZi5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnc29ja2V0LmFjY2VwdCgpIG91dCBvZiBzeXN0ZW0gcmVzb3VyY2UnLAorICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAnc29ja2V0Jzogc29jaywKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihzb2NrLmZpbGVubygpKQorICAgICAgICAgICAgICAgIHNlbGYuY2FsbF9sYXRlcihjb25zdGFudHMuQUNDRVBUX1JFVFJZX0RFTEFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGFydF9zZXJ2aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2xjb250ZXh0LCBzZXJ2ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlICAjIFRoZSBldmVudCBsb29wIHdpbGwgY2F0Y2gsIGxvZyBhbmQgaWdub3JlIGl0LgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3NsY29udGV4dDoKKyAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3NzbF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sX2ZhY3RvcnkoKSwgc3NsY29udGV4dCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSwgZXh0cmE9eydwZWVybmFtZSc6IGFkZHJ9LCBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sX2ZhY3RvcnkoKSwgZXh0cmE9eydwZWVybmFtZSc6IGFkZHJ9LAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAjIEl0J3Mgbm93IHVwIHRvIHRoZSBwcm90b2NvbCB0byBoYW5kbGUgdGhlIGNvbm5lY3Rpb24uCisKKyAgICBkZWYgYWRkX3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQWRkIGEgcmVhZGVyIGNhbGxiYWNrLiIiIgorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICBoYW5kbGUgPSBldmVudHMuSGFuZGxlKGNhbGxiYWNrLCBhcmdzLCBzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5yZWdpc3RlcihmZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlLCBOb25lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZSwgd3JpdGVyKSkKKyAgICAgICAgICAgIGlmIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZWFkZXIuY2FuY2VsKCkKKworICAgIGRlZiByZW1vdmVfcmVhZGVyKHNlbGYsIGZkKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgcmVhZGVyIGNhbGxiYWNrLiIiIgorICAgICAgICBpZiBzZWxmLmlzX2Nsb3NlZCgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICBtYXNrICY9IH5zZWxlY3RvcnMuRVZFTlRfUkVBRAorICAgICAgICAgICAgaWYgbm90IG1hc2s6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IudW5yZWdpc3RlcihmZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrLCAoTm9uZSwgd3JpdGVyKSkKKworICAgICAgICAgICAgaWYgcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFkZF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFkZCBhIHdyaXRlciBjYWxsYmFjay4uIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCisgICAgICAgIGhhbmRsZSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLnJlZ2lzdGVyKGZkLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgaGFuZGxlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrIHwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkZXIsIGhhbmRsZSkpCisgICAgICAgICAgICBpZiB3cml0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgd3JpdGVyLmNhbmNlbCgpCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgICIiIlJlbW92ZSBhIHdyaXRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgaWYgc2VsZi5pc19jbG9zZWQoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgIyBSZW1vdmUgYm90aCB3cml0ZXIgYW5kIGNvbm5lY3Rvci4KKyAgICAgICAgICAgIG1hc2sgJj0gfnNlbGVjdG9ycy5FVkVOVF9XUklURQorICAgICAgICAgICAgaWYgbm90IG1hc2s6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IudW5yZWdpc3RlcihmZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrLCAocmVhZGVyLCBOb25lKSkKKworICAgICAgICAgICAgaWYgd3JpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHdyaXRlci5jYW5jZWwoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuKToKKyAgICAgICAgIiIiUmVjZWl2ZSBkYXRhIGZyb20gdGhlIHNvY2tldC4KKworICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYnl0ZXMgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZGF0YSByZWNlaXZlZC4KKyAgICAgICAgVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQgYXQgb25jZSBpcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgbmJ5dGVzLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5nZXRfZGVidWcoKSBhbmQgc29jay5nZXR0aW1lb3V0KCkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRoZSBzb2NrZXQgbXVzdCBiZSBub24tYmxvY2tpbmciKQorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHNlbGYuX3NvY2tfcmVjdihmdXQsIEZhbHNlLCBzb2NrLCBuKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfcmVjdihzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2ssIG4pOgorICAgICAgICAjIF9zb2NrX3JlY3YoKSBjYW4gYWRkIGl0c2VsZiBhcyBhbiBJL08gY2FsbGJhY2sgaWYgdGhlIG9wZXJhdGlvbiBjYW4ndAorICAgICAgICAjIGJlIGRvbmUgaW1tZWRpYXRlbHkuIERvbid0IHVzZSBpdCBkaXJlY3RseSwgY2FsbCBzb2NrX3JlY3YoKS4KKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgY2FsbGJhY2sgZWFybHkuICBJdCBzaG91bGQgYmUgcmFyZSB0aGF0IHRoZQorICAgICAgICAgICAgIyBzZWxlY3RvciBzYXlzIHRoZSBmZCBpcyByZWFkeSBidXQgdGhlIGNhbGwgc3RpbGwgcmV0dXJucworICAgICAgICAgICAgIyBFQUdBSU4sIGFuZCBJIGFtIHdpbGxpbmcgdG8gdGFrZSBhIGhpdCBpbiB0aGF0IGNhc2UgaW4KKyAgICAgICAgICAgICMgb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNvY2sucmVjdihuKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFkZF9yZWFkZXIoZmQsIHNlbGYuX3NvY2tfcmVjdiwgZnV0LCBUcnVlLCBzb2NrLCBuKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KGRhdGEpCisKKyAgICBkZWYgc29ja19zZW5kYWxsKHNlbGYsIHNvY2ssIGRhdGEpOgorICAgICAgICAiIiJTZW5kIGRhdGEgdG8gdGhlIHNvY2tldC4KKworICAgICAgICBUaGUgc29ja2V0IG11c3QgYmUgY29ubmVjdGVkIHRvIGEgcmVtb3RlIHNvY2tldC4gVGhpcyBtZXRob2QgY29udGludWVzCisgICAgICAgIHRvIHNlbmQgZGF0YSBmcm9tIGRhdGEgdW50aWwgZWl0aGVyIGFsbCBkYXRhIGhhcyBiZWVuIHNlbnQgb3IgYW4KKyAgICAgICAgZXJyb3Igb2NjdXJzLiBOb25lIGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MuIE9uIGVycm9yLCBhbiBleGNlcHRpb24gaXMKKyAgICAgICAgcmFpc2VkLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGRldGVybWluZSBob3cgbXVjaCBkYXRhLCBpZiBhbnksIHdhcworICAgICAgICBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGJ5IHRoZSByZWNlaXZpbmcgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5nZXRfZGVidWcoKSBhbmQgc29jay5nZXR0aW1lb3V0KCkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRoZSBzb2NrZXQgbXVzdCBiZSBub24tYmxvY2tpbmciKQorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBzZWxmLl9zb2NrX3NlbmRhbGwoZnV0LCBGYWxzZSwgc29jaywgZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19zZW5kYWxsKHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgZGF0YSk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXIoZmQpCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBzb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBuOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgc2VsZi5hZGRfd3JpdGVyKGZkLCBzZWxmLl9zb2NrX3NlbmRhbGwsIGZ1dCwgVHJ1ZSwgc29jaywgZGF0YSkKKworICAgIGRlZiBzb2NrX2Nvbm5lY3Qoc2VsZiwgc29jaywgYWRkcmVzcyk6CisgICAgICAgICIiIkNvbm5lY3QgdG8gYSByZW1vdGUgc29ja2V0IGF0IGFkZHJlc3MuCisKKyAgICAgICAgVGhlIGFkZHJlc3MgbXVzdCBiZSBhbHJlYWR5IHJlc29sdmVkIHRvIGF2b2lkIHRoZSB0cmFwIG9mIGhhbmdpbmcgdGhlCisgICAgICAgIGVudGlyZSBldmVudCBsb29wIHdoZW4gdGhlIGFkZHJlc3MgcmVxdWlyZXMgZG9pbmcgYSBETlMgbG9va3VwLiBGb3IKKyAgICAgICAgZXhhbXBsZSwgaXQgbXVzdCBiZSBhbiBJUCBhZGRyZXNzLCBub3QgYW4gaG9zdG5hbWUsIGZvciBBRl9JTkVUIGFuZAorICAgICAgICBBRl9JTkVUNiBhZGRyZXNzIGZhbWlsaWVzLiBVc2UgZ2V0YWRkcmluZm8oKSB0byByZXNvbHZlIHRoZSBob3N0bmFtZQorICAgICAgICBhc3luY2hyb25vdXNseS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZ2V0X2RlYnVnKCkgYW5kIHNvY2suZ2V0dGltZW91dCgpICE9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0aGUgc29ja2V0IG11c3QgYmUgbm9uLWJsb2NraW5nIikKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCBhZGRyZXNzKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zb2NrX2Nvbm5lY3QoZnV0LCBzb2NrLCBhZGRyZXNzKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfY29ubmVjdChzZWxmLCBmdXQsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvY2suY29ubmVjdChhZGRyZXNzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soZnVuY3Rvb2xzLnBhcnRpYWwoc2VsZi5fc29ja19jb25uZWN0X2RvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaykpCisgICAgICAgICAgICBzZWxmLmFkZF93cml0ZXIoZmQsIHNlbGYuX3NvY2tfY29ubmVjdF9jYiwgZnV0LCBzb2NrLCBhZGRyZXNzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgX3NvY2tfY29ubmVjdF9kb25lKHNlbGYsIHNvY2ssIGZ1dCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcihzb2NrLmZpbGVubygpKQorCisgICAgZGVmIF9zb2NrX2Nvbm5lY3RfY2Ioc2VsZiwgZnV0LCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXJyID0gc29jay5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fRVJST1IpCisgICAgICAgICAgICBpZiBlcnIgIT0gMDoKKyAgICAgICAgICAgICAgICAjIEp1bXAgdG8gYW55IGV4Y2VwdCBjbGF1c2UgYmVsb3cuCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsICdDb25uZWN0IGNhbGwgZmFpbGVkICVzJyAlIChhZGRyZXNzLCkpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICMgc29ja2V0IGlzIHN0aWxsIHJlZ2lzdGVyZWQsIHRoZSBjYWxsYmFjayB3aWxsIGJlIHJldHJpZWQgbGF0ZXIKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICAiIiJBY2NlcHQgYSBjb25uZWN0aW9uLgorCisgICAgICAgIFRoZSBzb2NrZXQgbXVzdCBiZSBib3VuZCB0byBhbiBhZGRyZXNzIGFuZCBsaXN0ZW5pbmcgZm9yIGNvbm5lY3Rpb25zLgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcGFpciAoY29ubiwgYWRkcmVzcykgd2hlcmUgY29ubiBpcyBhIG5ldyBzb2NrZXQKKyAgICAgICAgb2JqZWN0IHVzYWJsZSB0byBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24sIGFuZCBhZGRyZXNzCisgICAgICAgIGlzIHRoZSBhZGRyZXNzIGJvdW5kIHRvIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbi4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZ2V0X2RlYnVnKCkgYW5kIHNvY2suZ2V0dGltZW91dCgpICE9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0aGUgc29ja2V0IG11c3QgYmUgbm9uLWJsb2NraW5nIikKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBzZWxmLl9zb2NrX2FjY2VwdChmdXQsIEZhbHNlLCBzb2NrKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfYWNjZXB0KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jayk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkcmVzcyA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYWRkX3JlYWRlcihmZCwgc2VsZi5fc29ja19hY2NlcHQsIGZ1dCwgVHJ1ZSwgc29jaykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdCgoY29ubiwgYWRkcmVzcykpCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICBmb3Iga2V5LCBtYXNrIGluIGV2ZW50X2xpc3Q6CisgICAgICAgICAgICBmaWxlb2JqLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmZpbGVvYmosIGtleS5kYXRhCisgICAgICAgICAgICBpZiBtYXNrICYgc2VsZWN0b3JzLkVWRU5UX1JFQUQgYW5kIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiByZWFkZXIuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKHJlYWRlcikKKyAgICAgICAgICAgIGlmIG1hc2sgJiBzZWxlY3RvcnMuRVZFTlRfV1JJVEUgYW5kIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiB3cml0ZXIuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKHdyaXRlcikKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc29jay5maWxlbm8oKSkKKyAgICAgICAgc29jay5jbG9zZSgpCisKKworY2xhc3MgX1NlbGVjdG9yVHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5UcmFuc3BvcnQpOgorCisgICAgbWF4X3NpemUgPSAyNTYgKiAxMDI0ICAjIEJ1ZmZlciBzaXplIHBhc3NlZCB0byByZWN2KCkuCisKKyAgICBfYnVmZmVyX2ZhY3RvcnkgPSBieXRlYXJyYXkgICMgQ29uc3RydWN0cyBpbml0aWFsIHZhbHVlIGZvciBzZWxmLl9idWZmZXIuCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIGV4dHJhLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEpCisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrZXQnXSA9IHNvY2sKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tuYW1lJ10gPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgaWYgJ3BlZXJuYW1lJyBub3QgaW4gc2VsZi5fZXh0cmE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBzb2NrLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBOb25lCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX3NvY2sgPSBzb2NrCisgICAgICAgIHNlbGYuX3NvY2tfZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcl9mYWN0b3J5KCkKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMCAgIyBTZXQgd2hlbiBjYWxsIHRvIGNvbm5lY3Rpb25fbG9zdCBzY2hlZHVsZWQuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBGYWxzZSAgIyBTZXQgd2hlbiBjbG9zZSgpIGNhbGxlZC4KKyAgICAgICAgaWYgc2VsZi5fc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyLl9hdHRhY2goKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnZmQ9JXMnICUgc2VsZi5fc29ja19mZF0KKyAgICAgICAgIyB0ZXN0IGlmIHRoZSB0cmFuc3BvcnQgd2FzIGNsb3NlZAorICAgICAgICBpZiBzZWxmLl9sb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcG9sbGluZyA9IF90ZXN0X3NlbGVjdG9yX2V2ZW50KHNlbGYuX2xvb3AuX3NlbGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2tfZmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgaWYgcG9sbGluZzoKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgncmVhZD1wb2xsaW5nJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3JlYWQ9aWRsZScpCisKKyAgICAgICAgICAgIHBvbGxpbmcgPSBfdGVzdF9zZWxlY3Rvcl9ldmVudChzZWxmLl9sb29wLl9zZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrX2ZkLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBpZiBwb2xsaW5nOgorICAgICAgICAgICAgICAgIHN0YXRlID0gJ3BvbGxpbmcnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXRlID0gJ2lkbGUnCisKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBzZWxmLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpCisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnd3JpdGU9PCVzLCBidWZzaXplPSVzPicgJSAoc3RhdGUsIGJ1ZnNpemUpKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjLCBtZXNzYWdlPSdGYXRhbCBlcnJvciBvbiB0cmFuc3BvcnQnKToKKyAgICAgICAgIyBTaG91bGQgYmUgY2FsbGVkIGZyb20gZXhjZXB0aW9uIGhhbmRsZXIgb25seS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSk6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6ICVzIiwgc2VsZiwgbWVzc2FnZSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IHNlbGYsCisgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZi5fcHJvdG9jb2wsCisgICAgICAgICAgICB9KQorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisKKyAgICBkZWYgX2ZvcmNlX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9zb2NrID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorICAgICAgICAgICAgc2VydmVyID0gc2VsZi5fc2VydmVyCisgICAgICAgICAgICBpZiBzZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VydmVyLl9kZXRhY2goKQorICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlciA9IE5vbmUKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fYnVmZmVyKQorCisKK2NsYXNzIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyKQorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgd2FpdCB1bnRpbCBwcm90b2NvbC5jb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLCBOb25lKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBwYXVzZV9yZWFkaW5nKCkgd2hlbiBjbG9zaW5nJykKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdBbHJlYWR5IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHBhdXNlcyByZWFkaW5nIiwgc2VsZikKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlc3VtZXMgcmVhZGluZyIsIHNlbGYpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zb2NrLnJlY3Yoc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gc29ja2V0IHRyYW5zcG9ydCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciByZWNlaXZlZCBFT0YiLCBzZWxmKQorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYga2VlcF9vcGVuOgorICAgICAgICAgICAgICAgICAgICAjIFdlJ3JlIGtlZXBpbmcgdGhlIGNvbm5lY3Rpb24gb3BlbiBzbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBjYW4gd3JpdGUgbW9yZSwgYnV0IHdlIHN0aWxsIGNhbid0CisgICAgICAgICAgICAgICAgICAgICMgcmVjZWl2ZSBtb3JlLCBzbyByZW1vdmUgdGhlIHJlYWRlciBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICBpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlKCkgYWZ0ZXIgd3JpdGVfZW9mKCknKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgIyBPcHRpbWl6YXRpb246IHRyeSB0byBzZW5kIG5vdy4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgd3JpdGUgZXJyb3Igb24gc29ja2V0IHRyYW5zcG9ydCcpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICMgTm90IGFsbCB3YXMgd3JpdHRlbjsgcmVnaXN0ZXIgd3JpdGUgaGFuZGxlci4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICAjIEFkZCBpdCB0byB0aGUgYnVmZmVyLgorICAgICAgICBzZWxmLl9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9idWZmZXIsICdEYXRhIHNob3VsZCBub3QgYmUgZW1wdHknCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChzZWxmLl9idWZmZXIpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCB3cml0ZSBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG46CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6bl0KKyAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2VvZiA9IFRydWUKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIF9idWZmZXJfZmFjdG9yeSA9IGJ5dGVhcnJheQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzdGRsaWIgc3NsIG1vZHVsZSBub3QgYXZhaWxhYmxlJykKKworICAgICAgICBpZiBzZXJ2ZXJfc2lkZToKKyAgICAgICAgICAgIGlmIG5vdCBzc2xjb250ZXh0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlcnZlciBzaWRlIHNzbCBuZWVkcyBhIHZhbGlkIFNTTENvbnRleHQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IHNzbGNvbnRleHQ6CisgICAgICAgICAgICAgICAgIyBDbGllbnQgc2lkZSBtYXkgcGFzcyBzc2w9VHJ1ZSB0byB1c2UgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgIyBjb250ZXh0OyBpbiB0aGF0IGNhc2UgdGhlIHNzbGNvbnRleHQgcGFzc2VkIGlzIE5vbmUuCisgICAgICAgICAgICAgICAgIyBUaGUgZGVmYXVsdCBpcyB0aGUgc2FtZSBhcyB1c2VkIGJ5IHVybGxpYiB3aXRoCisgICAgICAgICAgICAgICAgIyBjYWRlZmF1bHQ9VHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ19jcmVhdGVfc3RkbGliX2NvbnRleHQnKToKKyAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KAorICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Ym9vbChzZXJ2ZXJfaG9zdG5hbWUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgRmFsbGJhY2sgZm9yIFB5dGhvbiAzLjMuCisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisKKyAgICAgICAgd3JhcF9rd2FyZ3MgPSB7CisgICAgICAgICAgICAnc2VydmVyX3NpZGUnOiBzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICdkb19oYW5kc2hha2Vfb25fY29ubmVjdCc6IEZhbHNlLAorICAgICAgICB9CisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBhbmQgbm90IHNlcnZlcl9zaWRlIGFuZCBzc2wuSEFTX1NOSToKKyAgICAgICAgICAgIHdyYXBfa3dhcmdzWydzZXJ2ZXJfaG9zdG5hbWUnXSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBzc2xzb2NrID0gc3NsY29udGV4dC53cmFwX3NvY2tldChyYXdzb2NrLCAqKndyYXBfa3dhcmdzKQorCisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc3Nsc29jaywgcHJvdG9jb2wsIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICAgICAgc2VsZi5fc2VydmVyX2hvc3RuYW1lID0gc2VydmVyX2hvc3RuYW1lCisgICAgICAgIHNlbGYuX3dhaXRlciA9IHdhaXRlcgorICAgICAgICBzZWxmLl9zc2xjb250ZXh0ID0gc3NsY29udGV4dAorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgICAgICMgU1NMLXNwZWNpZmljIGV4dHJhIGluZm8uICAocGVlcmNlcnQgaXMgc2V0IGxhdGVyKQorICAgICAgICBzZWxmLl9leHRyYS51cGRhdGUoc3NsY29udGV4dD1zc2xjb250ZXh0KQorCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHN0YXJ0cyBTU0wgaGFuZHNoYWtlIiwgc2VsZikKKyAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBzZWxmLl9sb29wLnRpbWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhcnRfdGltZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fb25faGFuZHNoYWtlKHN0YXJ0X3RpbWUpCisKKyAgICBkZWYgX29uX2hhbmRzaGFrZShzZWxmLCBzdGFydF90aW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc29jay5kb19oYW5kc2hha2UoKQorICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRSZWFkRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vbl9oYW5kc2hha2UsIHN0YXJ0X3RpbWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50V3JpdGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29uX2hhbmRzaGFrZSwgc3RhcnRfdGltZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCIlcjogU1NMIGhhbmRzaGFrZSBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGV4Y19pbmZvPVRydWUpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBpZiBzZWxmLl93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgICAgIHBlZXJjZXJ0ID0gc2VsZi5fc29jay5nZXRwZWVyY2VydCgpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX3NzbGNvbnRleHQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgIyBWZXJpZnkgaG9zdG5hbWUgaWYgcmVxdWVzdGVkLCBQeXRob24gMy40KyB1c2VzIGNoZWNrX2hvc3RuYW1lCisgICAgICAgICAgICAjIGFuZCBjaGVja3MgdGhlIGhvc3RuYW1lIGluIGRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBpZiAoc2VsZi5fc2VydmVyX2hvc3RuYW1lIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX3NzbGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUocGVlcmNlcnQsIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCIlcjogU1NMIGhhbmRzaGFrZSBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIG1hdGNoaW5nIHRoZSBob3N0bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBleGNfaW5mbz1UcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEFkZCBleHRyYSBpbmZvIHRoYXQgYmVjb21lcyBhdmFpbGFibGUgYWZ0ZXIgaGFuZHNoYWtlLgorICAgICAgICBzZWxmLl9leHRyYS51cGRhdGUocGVlcmNlcnQ9cGVlcmNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXI9c2VsZi5fc29jay5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uPXNlbGYuX3NvY2suY29tcHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKKyAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgd2FpdCB1bnRpbCBwcm90b2NvbC5jb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3dhaXRlci5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkKKworICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgZHQgPSBzZWxmLl9sb29wLnRpbWUoKSAtIHN0YXJ0X3RpbWUKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6IFNTTCBoYW5kc2hha2UgdG9vayAlLjFmIG1zIiwgc2VsZiwgZHQgKiAxZTMpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIyBYWFggVGhpcyBpcyBhIGJpdCBpY2t5LCBnaXZlbiB0aGUgY29tbWVudCBhdCB0aGUgdG9wIG9mCisgICAgICAgICMgX3JlYWRfcmVhZHkoKS4gIElzIGl0IHBvc3NpYmxlIHRvIGV2b2tlIGEgZGVhZGxvY2s/ICBJIGRvbid0CisgICAgICAgICMga25vdywgYWx0aG91Z2ggaXQgZG9lc24ndCBsb29rIGxpa2UgaXQ7IHdyaXRlKCkgd2lsbCBzdGlsbAorICAgICAgICAjIGFjY2VwdCBtb3JlIGRhdGEgZm9yIHRoZSBidWZmZXIgYW5kIGV2ZW50dWFsbHkgdGhlIGFwcCB3aWxsCisgICAgICAgICMgY2FsbCByZXN1bWVfcmVhZGluZygpIGFnYWluLCBhbmQgdGhpbmdzIHdpbGwgZmxvdyBhZ2Fpbi4KKworICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDYW5ub3QgcGF1c2VfcmVhZGluZygpIHdoZW4gY2xvc2luZycpCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQWxyZWFkeSBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBwYXVzZXMgcmVhZGluZyIsIHNlbGYpCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vdCBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciByZXN1bWVzIHJlYWRpbmciLCBzZWxmKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl93cml0ZV93YW50c19yZWFkOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3NvY2sucmVjdihzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwgc3NsLlNTTFdhbnRSZWFkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRXcml0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fcmVhZF93YW50c193cml0ZSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gU1NMIHRyYW5zcG9ydCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciByZWNlaXZlZCBFT0YiLCBzZWxmKQorICAgICAgICAgICAgICAgICAgICBrZWVwX29wZW4gPSBzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgICAgICAgICBpZiBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygncmV0dXJuaW5nIHRydWUgZnJvbSBlb2ZfcmVjZWl2ZWQoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzIG5vIGVmZmVjdCB3aGVuIHVzaW5nIHNzbCcpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlOgorICAgICAgICAgICAgc2VsZi5fcmVhZF93YW50c193cml0ZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9yZWFkX3JlYWR5KCkKKworICAgICAgICAgICAgaWYgbm90IChzZWxmLl9wYXVzZWQgb3Igc2VsZi5fY2xvc2luZyk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBzZWxmLl9zb2NrLnNlbmQoc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsIHNzbC5TU0xXYW50V3JpdGVFcnJvcik6CisgICAgICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMV2FudFJlYWRFcnJvcjoKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQgPSBUcnVlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIFNTTCB0cmFuc3BvcnQnKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBuOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbOm5dCisKKyAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICAjIEFkZCBpdCB0byB0aGUgYnVmZmVyLgorICAgICAgICBzZWxmLl9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgX2J1ZmZlcl9mYWN0b3J5ID0gY29sbGVjdGlvbnMuZGVxdWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgYWRkcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICB3YWl0ZXI9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc29jaywgcHJvdG9jb2wsIGV4dHJhKQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIHdhaXQgdW50aWwgcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuX3NldF9yZXN1bHRfdW5sZXNzX2NhbmNlbGxlZCwgTm9uZSkKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzdW0obGVuKGRhdGEpIGZvciBkYXRhLCBfIGluIHNlbGYuX2J1ZmZlcikKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSwgYWRkciA9IHNlbGYuX3NvY2sucmVjdmZyb20oc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBkYXRhZ3JhbSB0cmFuc3BvcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKworICAgIGRlZiBzZW5kdG8oc2VsZiwgZGF0YSwgYWRkcj1Ob25lKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBhbmQgYWRkciBub3QgaW4gKE5vbmUsIHNlbGYuX2FkZHJlc3MpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBhZGRyZXNzOiBtdXN0IGJlIE5vbmUgb3IgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX2FkZHJlc3MsKSkKKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgYW5kIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzZW5kIGl0IHJpZ2h0IGF3YXkgZmlyc3QuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kdG8oZGF0YSwgYWRkcikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fc2VuZHRvX3JlYWR5KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gZGF0YWdyYW0gdHJhbnNwb3J0JykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEVuc3VyZSB0aGF0IHdoYXQgd2UgYnVmZmVyIGlzIGltbXV0YWJsZS4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZCgoYnl0ZXMoZGF0YSksIGFkZHIpKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgX3NlbmR0b19yZWFkeShzZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgZGF0YSwgYWRkciA9IHNlbGYuX2J1ZmZlci5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmR0byhkYXRhLCBhZGRyKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmRsZWZ0KChkYXRhLCBhZGRyKSkgICMgVHJ5IGFnYWluIGxhdGVyLgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBkYXRhZ3JhbSB0cmFuc3BvcnQnKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9zdHJlYW1zLnB5IGIvTGliL2FzeW5jaW8vc3RyZWFtcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzdlYjYwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vc3RyZWFtcy5weQpAQCAtMCwwICsxLDQ4NSBAQAorIiIiU3RyZWFtLXJlbGF0ZWQgdGhpbmdzLiIiIgorCitfX2FsbF9fID0gWydTdHJlYW1SZWFkZXInLCAnU3RyZWFtV3JpdGVyJywgJ1N0cmVhbVJlYWRlclByb3RvY29sJywKKyAgICAgICAgICAgJ29wZW5fY29ubmVjdGlvbicsICdzdGFydF9zZXJ2ZXInLAorICAgICAgICAgICAnSW5jb21wbGV0ZVJlYWRFcnJvcicsCisgICAgICAgICAgIF0KKworaW1wb3J0IHNvY2tldAorCitpZiBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKToKKyAgICBfX2FsbF9fLmV4dGVuZChbJ29wZW5fdW5peF9jb25uZWN0aW9uJywgJ3N0YXJ0X3VuaXhfc2VydmVyJ10pCisKK2Zyb20gLiBpbXBvcnQgY29yb3V0aW5lcworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitfREVGQVVMVF9MSU1JVCA9IDIqKjE2CisKKworY2xhc3MgSW5jb21wbGV0ZVJlYWRFcnJvcihFT0ZFcnJvcik6CisgICAgIiIiCisgICAgSW5jb21wbGV0ZSByZWFkIGVycm9yLiBBdHRyaWJ1dGVzOgorCisgICAgLSBwYXJ0aWFsOiByZWFkIGJ5dGVzIHN0cmluZyBiZWZvcmUgdGhlIGVuZCBvZiBzdHJlYW0gd2FzIHJlYWNoZWQKKyAgICAtIGV4cGVjdGVkOiB0b3RhbCBudW1iZXIgb2YgZXhwZWN0ZWQgYnl0ZXMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFydGlhbCwgZXhwZWN0ZWQpOgorICAgICAgICBFT0ZFcnJvci5fX2luaXRfXyhzZWxmLCAiJXMgYnl0ZXMgcmVhZCBvbiBhIHRvdGFsIG9mICVzIGV4cGVjdGVkIGJ5dGVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChsZW4ocGFydGlhbCksIGV4cGVjdGVkKSkKKyAgICAgICAgc2VsZi5wYXJ0aWFsID0gcGFydGlhbAorICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKKworCitAY29yb3V0aW5lCitkZWYgb3Blbl9jb25uZWN0aW9uKGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgICIiIkEgd3JhcHBlciBmb3IgY3JlYXRlX2Nvbm5lY3Rpb24oKSByZXR1cm5pbmcgYSAocmVhZGVyLCB3cml0ZXIpIHBhaXIuCisKKyAgICBUaGUgcmVhZGVyIHJldHVybmVkIGlzIGEgU3RyZWFtUmVhZGVyIGluc3RhbmNlOyB0aGUgd3JpdGVyIGlzIGEKKyAgICBTdHJlYW1Xcml0ZXIgaW5zdGFuY2UuCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0byBjcmVhdGVfY29ubmVjdGlvbigpCisgICAgZXhjZXB0IHByb3RvY29sX2ZhY3Rvcnk7IG1vc3QgY29tbW9uIGFyZSBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsCisgICAgd2l0aCB2YXJpb3VzIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGZvbGxvd2luZy4KKworICAgIEFkZGl0aW9uYWwgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlIGxvb3AgKHRvIHNldCB0aGUgZXZlbnQgbG9vcAorICAgIGluc3RhbmNlIHRvIHVzZSkgYW5kIGxpbWl0ICh0byBzZXQgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICAgU3RyZWFtUmVhZGVyKS4KKworICAgIChJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIFN0cmVhbVJlYWRlciBhbmQvb3IKKyAgICBTdHJlYW1SZWFkZXJQcm90b2NvbCBjbGFzc2VzLCBqdXN0IGNvcHkgdGhlIGNvZGUgLS0gdGhlcmUncworICAgIHJlYWxseSBub3RoaW5nIHNwZWNpYWwgaGVyZSBleGNlcHQgc29tZSBjb252ZW5pZW5jZS4pCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICByZWFkZXIgPSBTdHJlYW1SZWFkZXIobGltaXQ9bGltaXQsIGxvb3A9bG9vcCkKKyAgICBwcm90b2NvbCA9IFN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlciwgbG9vcD1sb29wKQorICAgIHRyYW5zcG9ydCwgXyA9IHlpZWxkIGZyb20gbG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgbGFtYmRhOiBwcm90b2NvbCwgaG9zdCwgcG9ydCwgKiprd2RzKQorICAgIHdyaXRlciA9IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHByb3RvY29sLCByZWFkZXIsIGxvb3ApCisgICAgcmV0dXJuIHJlYWRlciwgd3JpdGVyCisKKworQGNvcm91dGluZQorZGVmIHN0YXJ0X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICAiIiJTdGFydCBhIHNvY2tldCBzZXJ2ZXIsIGNhbGwgYmFjayBmb3IgZWFjaCBjbGllbnQgY29ubmVjdGVkLgorCisgICAgVGhlIGZpcnN0IHBhcmFtZXRlciwgYGNsaWVudF9jb25uZWN0ZWRfY2JgLCB0YWtlcyB0d28gcGFyYW1ldGVyczoKKyAgICBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyLiAgY2xpZW50X3JlYWRlciBpcyBhIFN0cmVhbVJlYWRlcgorICAgIG9iamVjdCwgd2hpbGUgY2xpZW50X3dyaXRlciBpcyBhIFN0cmVhbVdyaXRlciBvYmplY3QuICBUaGlzCisgICAgcGFyYW1ldGVyIGNhbiBlaXRoZXIgYmUgYSBwbGFpbiBjYWxsYmFjayBmdW5jdGlvbiBvciBhIGNvcm91dGluZTsKKyAgICBpZiBpdCBpcyBhIGNvcm91dGluZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBpbnRvIGEKKyAgICBUYXNrLgorCisgICAgVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHRoZSB1c3VhbCBhcmd1bWVudHMgdG8KKyAgICBsb29wLmNyZWF0ZV9zZXJ2ZXIoKSBleGNlcHQgcHJvdG9jb2xfZmFjdG9yeTsgbW9zdCBjb21tb24gYXJlCisgICAgcG9zaXRpb25hbCBob3N0IGFuZCBwb3J0LCB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKKyAgICBmb2xsb3dpbmcuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGxvb3AuY3JlYXRlX3NlcnZlcigpLgorCisgICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbG9vcCAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgbGltaXQgKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgICBTdHJlYW1SZWFkZXIpLgorCisgICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBsb29wLmNyZWF0ZV9zZXJ2ZXIoKSwgaS5lLiBhCisgICAgU2VydmVyIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHRoZSBzZXJ2aWNlLgorICAgICIiIgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICByZWFkZXIgPSBTdHJlYW1SZWFkZXIobGltaXQ9bGltaXQsIGxvb3A9bG9vcCkKKyAgICAgICAgcHJvdG9jb2wgPSBTdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICByZXR1cm4gcHJvdG9jb2wKKworICAgIHJldHVybiAoeWllbGQgZnJvbSBsb29wLmNyZWF0ZV9zZXJ2ZXIoZmFjdG9yeSwgaG9zdCwgcG9ydCwgKiprd2RzKSkKKworCitpZiBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKToKKyAgICAjIFVOSVggRG9tYWluIFNvY2tldHMgYXJlIHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIG9wZW5fdW5peF9jb25uZWN0aW9uKHBhdGg9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICAgICAgIiIiU2ltaWxhciB0byBgb3Blbl9jb25uZWN0aW9uYCBidXQgd29ya3Mgd2l0aCBVTklYIERvbWFpbiBTb2NrZXRzLiIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgcmVhZGVyID0gU3RyZWFtUmVhZGVyKGxpbWl0PWxpbWl0LCBsb29wPWxvb3ApCisgICAgICAgIHByb3RvY29sID0gU3RyZWFtUmVhZGVyUHJvdG9jb2wocmVhZGVyLCBsb29wPWxvb3ApCisgICAgICAgIHRyYW5zcG9ydCwgXyA9IHlpZWxkIGZyb20gbG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uKAorICAgICAgICAgICAgbGFtYmRhOiBwcm90b2NvbCwgcGF0aCwgKiprd2RzKQorICAgICAgICB3cml0ZXIgPSBTdHJlYW1Xcml0ZXIodHJhbnNwb3J0LCBwcm90b2NvbCwgcmVhZGVyLCBsb29wKQorICAgICAgICByZXR1cm4gcmVhZGVyLCB3cml0ZXIKKworCisgICAgQGNvcm91dGluZQorICAgIGRlZiBzdGFydF91bml4X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBwYXRoPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9X0RFRkFVTFRfTElNSVQsICoqa3dkcyk6CisgICAgICAgICIiIlNpbWlsYXIgdG8gYHN0YXJ0X3NlcnZlcmAgYnV0IHdvcmtzIHdpdGggVU5JWCBEb21haW4gU29ja2V0cy4iIiIKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcHJvdG9jb2wgPSBTdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90b2NvbAorCisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBsb29wLmNyZWF0ZV91bml4X3NlcnZlcihmYWN0b3J5LCBwYXRoLCAqKmt3ZHMpKQorCisKK2NsYXNzIEZsb3dDb250cm9sTWl4aW4ocHJvdG9jb2xzLlByb3RvY29sKToKKyAgICAiIiJSZXVzYWJsZSBmbG93IGNvbnRyb2wgbG9naWMgZm9yIFN0cmVhbVdyaXRlci5kcmFpbigpLgorCisgICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBtZXRob2RzIHBhdXNlX3dyaXRpbmcoKSwKKyAgICByZXN1bWVfcmVhZGluZygpIGFuZCBjb25uZWN0aW9uX2xvc3QoKS4gIElmIHRoZSBzdWJjbGFzcyBvdmVycmlkZXMKKyAgICB0aGVzZSBpdCBtdXN0IGNhbGwgdGhlIHN1cGVyIG1ldGhvZHMuCisKKyAgICBTdHJlYW1Xcml0ZXIuZHJhaW4oKSBtdXN0IHdhaXQgZm9yIF9kcmFpbl9oZWxwZXIoKSBjb3JvdXRpbmUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AgICMgTWF5IGJlIE5vbmU7IHdlIG1heSBuZXZlciBuZWVkIGl0LgorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb25fbG9zdCA9IEZhbHNlCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBwYXVzZXMgd3JpdGluZyIsIHNlbGYpCisKKyAgICBkZWYgcmVzdW1lX3dyaXRpbmcoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcmVzdW1lcyB3cml0aW5nIiwgc2VsZikKKworICAgICAgICB3YWl0ZXIgPSBzZWxmLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZHJhaW5fd2FpdGVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbl9sb3N0ID0gVHJ1ZQorICAgICAgICAjIFdha2UgdXAgdGhlIHdyaXRlciBpZiBjdXJyZW50bHkgcGF1c2VkLgorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgIGlmIHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfZHJhaW5faGVscGVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uX2xvc3Q6CisgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcignQ29ubmVjdGlvbiBsb3N0JykKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3YWl0ZXIgPSBzZWxmLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgYXNzZXJ0IHdhaXRlciBpcyBOb25lIG9yIHdhaXRlci5jYW5jZWxsZWQoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IHdhaXRlcgorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisKK2NsYXNzIFN0cmVhbVJlYWRlclByb3RvY29sKEZsb3dDb250cm9sTWl4aW4sIHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgIiIiSGVscGVyIGNsYXNzIHRvIGFkYXB0IGJldHdlZW4gUHJvdG9jb2wgYW5kIFN0cmVhbVJlYWRlci4KKworICAgIChUaGlzIGlzIGEgaGVscGVyIGNsYXNzIGluc3RlYWQgb2YgbWFraW5nIFN0cmVhbVJlYWRlciBpdHNlbGYgYQorICAgIFByb3RvY29sIHN1YmNsYXNzLCBiZWNhdXNlIHRoZSBTdHJlYW1SZWFkZXIgaGFzIG90aGVyIHBvdGVudGlhbAorICAgIHVzZXMsIGFuZCB0byBwcmV2ZW50IHRoZSB1c2VyIG9mIHRoZSBTdHJlYW1SZWFkZXIgdG8gYWNjaWRlbnRhbGx5CisgICAgY2FsbCBpbmFwcHJvcHJpYXRlIG1ldGhvZHMgb2YgdGhlIHByb3RvY29sLikKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW1fcmVhZGVyLCBjbGllbnRfY29ubmVjdGVkX2NiPU5vbmUsIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyID0gc3RyZWFtX3JlYWRlcgorICAgICAgICBzZWxmLl9zdHJlYW1fd3JpdGVyID0gTm9uZQorICAgICAgICBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiID0gY2xpZW50X2Nvbm5lY3RlZF9jYgorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLnNldF90cmFuc3BvcnQodHJhbnNwb3J0KQorICAgICAgICBpZiBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlciA9IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3ApCisgICAgICAgICAgICByZXMgPSBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiKHNlbGYuX3N0cmVhbV9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbV93cml0ZXIpCisgICAgICAgICAgICBpZiBjb3JvdXRpbmVzLmlzY29yb3V0aW5lKHJlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jcmVhdGVfdGFzayhyZXMpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2VvZigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2RhdGEoZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuZmVlZF9lb2YoKQorCisKK2NsYXNzIFN0cmVhbVdyaXRlcjoKKyAgICAiIiJXcmFwcyBhIFRyYW5zcG9ydC4KKworICAgIFRoaXMgZXhwb3NlcyB3cml0ZSgpLCB3cml0ZWxpbmVzKCksIFtjYW5fXXdyaXRlX2VvZigpLAorICAgIGdldF9leHRyYV9pbmZvKCkgYW5kIGNsb3NlKCkuICBJdCBhZGRzIGRyYWluKCkgd2hpY2ggcmV0dXJucyBhbgorICAgIG9wdGlvbmFsIEZ1dHVyZSBvbiB3aGljaCB5b3UgY2FuIHdhaXQgZm9yIGZsb3cgY29udHJvbC4gIEl0IGFsc28KKyAgICBhZGRzIGEgdHJhbnNwb3J0IHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdGhlIFRyYW5zcG9ydAorICAgIGRpcmVjdGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgICMgZHJhaW4oKSBleHBlY3RzIHRoYXQgdGhlIHJlYWRlciBoYXMgYSBleGNlcHRpb24oKSBtZXRob2QKKyAgICAgICAgYXNzZXJ0IHJlYWRlciBpcyBOb25lIG9yIGlzaW5zdGFuY2UocmVhZGVyLCBTdHJlYW1SZWFkZXIpCisgICAgICAgIHNlbGYuX3JlYWRlciA9IHJlYWRlcgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAndHJhbnNwb3J0PSVyJyAlIHNlbGYuX3RyYW5zcG9ydF0KKyAgICAgICAgaWYgc2VsZi5fcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3JlYWRlcj0lcicgJSBzZWxmLl9yZWFkZXIpCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRyYW5zcG9ydChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydAorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGVsaW5lcyhkYXRhKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC53cml0ZV9lb2YoKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuY2FuX3dyaXRlX2VvZigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIGdldF9leHRyYV9pbmZvKHNlbGYsIG5hbWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgZHJhaW4oc2VsZik6CisgICAgICAgICIiIkZsdXNoIHRoZSB3cml0ZSBidWZmZXIuCisKKyAgICAgICAgVGhlIGludGVuZGVkIHVzZSBpcyB0byB3cml0ZQorCisgICAgICAgICAgdy53cml0ZShkYXRhKQorICAgICAgICAgIHlpZWxkIGZyb20gdy5kcmFpbigpCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9yZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBleGMgPSBzZWxmLl9yZWFkZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9wcm90b2NvbC5fZHJhaW5faGVscGVyKCkKKworCitjbGFzcyBTdHJlYW1SZWFkZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGltaXQ9X0RFRkFVTFRfTElNSVQsIGxvb3A9Tm9uZSk6CisgICAgICAgICMgVGhlIGxpbmUgbGVuZ3RoIGxpbWl0IGlzICBhIHNlY3VyaXR5IGZlYXR1cmU7CisgICAgICAgICMgaXQgYWxzbyBkb3VibGVzIGFzIGhhbGYgdGhlIGJ1ZmZlciBsaW1pdC4KKyAgICAgICAgc2VsZi5fbGltaXQgPSBsaW1pdAorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gYnl0ZWFycmF5KCkKKyAgICAgICAgc2VsZi5fZW9mID0gRmFsc2UgICMgV2hldGhlciB3ZSdyZSBkb25lLgorICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lICAjIEEgZnV0dXJlLgorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBOb25lCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgIGRlZiBleGNlcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKworICAgIGRlZiBzZXRfZXhjZXB0aW9uKHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4YworCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBzZXRfdHJhbnNwb3J0KHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIGFzc2VydCBzZWxmLl90cmFuc3BvcnQgaXMgTm9uZSwgJ1RyYW5zcG9ydCBhbHJlYWR5IHNldCcKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICBkZWYgX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3BhdXNlZCBhbmQgbGVuKHNlbGYuX2J1ZmZlcikgPD0gc2VsZi5fbGltaXQ6CisgICAgICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0LnJlc3VtZV9yZWFkaW5nKCkKKworICAgIGRlZiBmZWVkX2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5fZW9mID0gVHJ1ZQorICAgICAgICB3YWl0ZXIgPSBzZWxmLl93YWl0ZXIKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChUcnVlKQorCisgICAgZGVmIGF0X2VvZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSBhbmQgJ2ZlZWRfZW9mJyB3YXMgY2FsbGVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZW9mIGFuZCBub3Qgc2VsZi5fYnVmZmVyCisKKyAgICBkZWYgZmVlZF9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2VvZiwgJ2ZlZWRfZGF0YSBhZnRlciBmZWVkX2VvZicKKworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoZGF0YSkKKworICAgICAgICB3YWl0ZXIgPSBzZWxmLl93YWl0ZXIKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChGYWxzZSkKKworICAgICAgICBpZiAoc2VsZi5fdHJhbnNwb3J0IGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgbm90IHNlbGYuX3BhdXNlZCBhbmQKKyAgICAgICAgICAgIGxlbihzZWxmLl9idWZmZXIpID4gMipzZWxmLl9saW1pdCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0LnBhdXNlX3JlYWRpbmcoKQorICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICAgICAgIyBUaGUgdHJhbnNwb3J0IGNhbid0IGJlIHBhdXNlZC4KKyAgICAgICAgICAgICAgICAjIFdlJ2xsIGp1c3QgaGF2ZSB0byBidWZmZXIgYWxsIGRhdGEuCisgICAgICAgICAgICAgICAgIyBGb3JnZXQgdGhlIHRyYW5zcG9ydCBzbyB3ZSBkb24ndCBrZWVwIHRyeWluZy4KKyAgICAgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKworICAgIGRlZiBfY3JlYXRlX3dhaXRlcihzZWxmLCBmdW5jX25hbWUpOgorICAgICAgICAjIFN0cmVhbVJlYWRlciB1c2VzIGEgZnV0dXJlIHRvIGxpbmsgdGhlIHByb3RvY29sIGZlZWRfZGF0YSgpIG1ldGhvZAorICAgICAgICAjIHRvIGEgcmVhZCBjb3JvdXRpbmUuIFJ1bm5pbmcgdHdvIHJlYWQgY29yb3V0aW5lcyBhdCB0aGUgc2FtZSB0aW1lCisgICAgICAgICMgd291bGQgaGF2ZSBhbiB1bmV4cGVjdGVkIGJlaGF2aW91ci4gSXQgd291bGQgbm90IHBvc3NpYmxlIHRvIGtub3cKKyAgICAgICAgIyB3aGljaCBjb3JvdXRpbmUgd291bGQgZ2V0IHRoZSBuZXh0IGRhdGEuCisgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJXMoKSBjYWxsZWQgd2hpbGUgYW5vdGhlciBjb3JvdXRpbmUgaXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHJlYWR5IHdhaXRpbmcgZm9yIGluY29taW5nIGRhdGEnICUgZnVuY19uYW1lKQorICAgICAgICByZXR1cm4gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgbGluZSA9IGJ5dGVhcnJheSgpCisgICAgICAgIG5vdF9lbm91Z2ggPSBUcnVlCisKKyAgICAgICAgd2hpbGUgbm90X2Vub3VnaDoKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX2J1ZmZlciBhbmQgbm90X2Vub3VnaDoKKyAgICAgICAgICAgICAgICBpY2hhciA9IHNlbGYuX2J1ZmZlci5maW5kKGInXG4nKQorICAgICAgICAgICAgICAgIGlmIGljaGFyIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgbGluZS5leHRlbmQoc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGljaGFyICs9IDEKKyAgICAgICAgICAgICAgICAgICAgbGluZS5leHRlbmQoc2VsZi5fYnVmZmVyWzppY2hhcl0pCisgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbOmljaGFyXQorICAgICAgICAgICAgICAgICAgICBub3RfZW5vdWdoID0gRmFsc2UKKworICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IHNlbGYuX2xpbWl0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTGluZSBpcyB0b28gbG9uZycpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3RfZW5vdWdoOgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IHNlbGYuX2NyZWF0ZV93YWl0ZXIoJ3JlYWRsaW5lJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICByZXR1cm4gYnl0ZXMobGluZSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgaWYgbm90IG46CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgaWYgbiA8IDA6CisgICAgICAgICAgICAjIFRoaXMgdXNlZCB0byBqdXN0IGxvb3AgY3JlYXRpbmcgYSBuZXcgd2FpdGVyIGhvcGluZyB0bworICAgICAgICAgICAgIyBjb2xsZWN0IGV2ZXJ5dGhpbmcgaW4gc2VsZi5fYnVmZmVyLCBidXQgdGhhdCB3b3VsZAorICAgICAgICAgICAgIyBkZWFkbG9jayBpZiB0aGUgc3VicHJvY2VzcyBzZW5kcyBtb3JlIHRoYW4gc2VsZi5saW1pdAorICAgICAgICAgICAgIyBieXRlcy4gIFNvIGp1c3QgY2FsbCBzZWxmLnJlYWQoc2VsZi5fbGltaXQpIHVudGlsIEVPRi4KKyAgICAgICAgICAgIGJsb2NrcyA9IFtdCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGJsb2NrID0geWllbGQgZnJvbSBzZWxmLnJlYWQoc2VsZi5fbGltaXQpCisgICAgICAgICAgICAgICAgaWYgbm90IGJsb2NrOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoYmxvY2spCisgICAgICAgICAgICByZXR1cm4gYicnLmpvaW4oYmxvY2tzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlciBhbmQgbm90IHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBzZWxmLl9jcmVhdGVfd2FpdGVyKCdyZWFkJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgICAgIGlmIG4gPCAwIG9yIGxlbihzZWxmLl9idWZmZXIpIDw9IG46CisgICAgICAgICAgICBkYXRhID0gYnl0ZXMoc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgbiA+IDAgYW5kIGxlbihzZWxmLl9idWZmZXIpID4gbgorICAgICAgICAgICAgZGF0YSA9IGJ5dGVzKHNlbGYuX2J1ZmZlcls6bl0pCisgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpuXQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiByZWFkZXhhY3RseShzZWxmLCBuKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgIyBUaGVyZSB1c2VkIHRvIGJlICJvcHRpbWl6ZWQiIGNvZGUgaGVyZS4gIEl0IGNyZWF0ZWQgaXRzIG93bgorICAgICAgICAjIEZ1dHVyZSBhbmQgd2FpdGVkIHVudGlsIHNlbGYuX2J1ZmZlciBoYWQgYXQgbGVhc3QgdGhlIG4KKyAgICAgICAgIyBieXRlcywgdGhlbiBjYWxsZWQgcmVhZChuKS4gIFVuZm9ydHVuYXRlbHksIHRoaXMgY291bGQgcGF1c2UKKyAgICAgICAgIyB0aGUgdHJhbnNwb3J0IGlmIHRoZSBhcmd1bWVudCB3YXMgbGFyZ2VyIHRoYW4gdGhlIHBhdXNlCisgICAgICAgICMgbGltaXQgKHdoaWNoIGlzIHR3aWNlIHNlbGYuX2xpbWl0KS4gIFNvIG5vdyB3ZSBqdXN0IHJlYWQoKQorICAgICAgICAjIGludG8gYSBsb2NhbCBidWZmZXIuCisKKyAgICAgICAgYmxvY2tzID0gW10KKyAgICAgICAgd2hpbGUgbiA+IDA6CisgICAgICAgICAgICBibG9jayA9IHlpZWxkIGZyb20gc2VsZi5yZWFkKG4pCisgICAgICAgICAgICBpZiBub3QgYmxvY2s6CisgICAgICAgICAgICAgICAgcGFydGlhbCA9IGInJy5qb2luKGJsb2NrcykKKyAgICAgICAgICAgICAgICByYWlzZSBJbmNvbXBsZXRlUmVhZEVycm9yKHBhcnRpYWwsIGxlbihwYXJ0aWFsKSArIG4pCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKQorICAgICAgICAgICAgbiAtPSBsZW4oYmxvY2spCisKKyAgICAgICAgcmV0dXJuIGInJy5qb2luKGJsb2NrcykKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3N1YnByb2Nlc3MucHkgYi9MaWIvYXN5bmNpby9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzE0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zdWJwcm9jZXNzLnB5CkBAIC0wLDAgKzEsMjI4IEBACitfX2FsbF9fID0gWydjcmVhdGVfc3VicHJvY2Vzc19leGVjJywgJ2NyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsJ10KKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCBzdHJlYW1zCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworUElQRSA9IHN1YnByb2Nlc3MuUElQRQorU1RET1VUID0gc3VicHJvY2Vzcy5TVERPVVQKK0RFVk5VTEwgPSBzdWJwcm9jZXNzLkRFVk5VTEwKKworCitjbGFzcyBTdWJwcm9jZXNzU3RyZWFtUHJvdG9jb2woc3RyZWFtcy5GbG93Q29udHJvbE1peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29scy5TdWJwcm9jZXNzUHJvdG9jb2wpOgorICAgICIiIkxpa2UgU3RyZWFtUmVhZGVyUHJvdG9jb2wsIGJ1dCBmb3IgYSBzdWJwcm9jZXNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbWl0LCBsb29wKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX2xpbWl0ID0gbGltaXQKKyAgICAgICAgc2VsZi5zdGRpbiA9IHNlbGYuc3Rkb3V0ID0gc2VsZi5zdGRlcnIgPSBOb25lCisgICAgICAgIHNlbGYud2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIGlmIHNlbGYuc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3RkaW49JXInICUgc2VsZi5zdGRpbikKKyAgICAgICAgaWYgc2VsZi5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3Rkb3V0PSVyJyAlIHNlbGYuc3Rkb3V0KQorICAgICAgICBpZiBzZWxmLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRlcnI9JXInICUgc2VsZi5zdGRlcnIpCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgaWYgdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydCgxKToKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobGltaXQ9c2VsZi5fbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgaWYgdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydCgyKToKKyAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobGltaXQ9c2VsZi5fbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc3RkaW4gPSB0cmFuc3BvcnQuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIGlmIHN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGRpbiA9IHN0cmVhbXMuU3RyZWFtV3JpdGVyKHN0ZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sPXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLndhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgaWYgZmQgPT0gMToKKyAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuc3Rkb3V0CisgICAgICAgIGVsaWYgZmQgPT0gMjoKKyAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkZXIgPSBOb25lCisgICAgICAgIGlmIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlYWRlci5mZWVkX2RhdGEoZGF0YSkKKworICAgIGRlZiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBmZCwgZXhjKToKKyAgICAgICAgaWYgZmQgPT0gMDoKKyAgICAgICAgICAgIHBpcGUgPSBzZWxmLnN0ZGluCisgICAgICAgICAgICBpZiBwaXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGZkID09IDE6CisgICAgICAgICAgICByZWFkZXIgPSBzZWxmLnN0ZG91dAorICAgICAgICBlbGlmIGZkID09IDI6CisgICAgICAgICAgICByZWFkZXIgPSBzZWxmLnN0ZGVycgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZGVyID0gTm9uZQorICAgICAgICBpZiByZWFkZXIgIT0gTm9uZToKKyAgICAgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJlYWRlci5mZWVkX2VvZigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlYWRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBwcm9jZXNzX2V4aXRlZChzZWxmKToKKyAgICAgICAgIyB3YWtlIHVwIGZ1dHVyZXMgd2FpdGluZyBmb3Igd2FpdCgpCisgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl90cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKQorICAgICAgICB3aGlsZSBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgd2FpdGVyID0gc2VsZi5fd2FpdGVycy5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KHJldHVybmNvZGUpCisKKworY2xhc3MgUHJvY2VzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnNwb3J0LCBwcm90b2NvbCwgbG9vcCk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuc3RkaW4gPSBwcm90b2NvbC5zdGRpbgorICAgICAgICBzZWxmLnN0ZG91dCA9IHByb3RvY29sLnN0ZG91dAorICAgICAgICBzZWxmLnN0ZGVyciA9IHByb3RvY29sLnN0ZGVycgorICAgICAgICBzZWxmLnBpZCA9IHRyYW5zcG9ydC5nZXRfcGlkKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8JXMgJXM+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5waWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICIiIldhaXQgdW50aWwgdGhlIHByb2Nlc3MgZXhpdCBhbmQgcmV0dXJuIHRoZSBwcm9jZXNzIHJldHVybiBjb2RlLiIiIgorICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fdHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKCkKKyAgICAgICAgaWYgcmV0dXJuY29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5jb2RlCisKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl9wcm90b2NvbC5fd2FpdGVycy5hcHBlbmQod2FpdGVyKQorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICByZXR1cm4gd2FpdGVyLnJlc3VsdCgpCisKKyAgICBkZWYgX2NoZWNrX2FsaXZlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFByb2Nlc3NMb29rdXBFcnJvcigpCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgc2VsZi5fY2hlY2tfYWxpdmUoKQorICAgICAgICBzZWxmLl90cmFuc3BvcnQuc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfYWxpdmUoKQorICAgICAgICBzZWxmLl90cmFuc3BvcnQudGVybWluYXRlKCkKKworICAgIGRlZiBraWxsKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19hbGl2ZSgpCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5raWxsKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX2ZlZWRfc3RkaW4oc2VsZiwgaW5wdXQpOgorICAgICAgICBkZWJ1ZyA9IHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCkKKyAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBmZWVkIHN0ZGluICglcyBieXRlcyknLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgbGVuKGlucHV0KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnN0ZGluLmRyYWluKCkKKyAgICAgICAgZXhjZXB0IChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSBhcyBleGM6CisgICAgICAgICAgICAjIGNvbW11bmljYXRlKCkgaWdub3JlcyBCcm9rZW5QaXBlRXJyb3IgYW5kIENvbm5lY3Rpb25SZXNldEVycm9yCisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBzdGRpbiBnb3QgJXInLCBzZWxmLCBleGMpCisKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBjbG9zZSBzdGRpbicsIHNlbGYpCisgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfbm9vcChzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3JlYWRfc3RyZWFtKHNlbGYsIGZkKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydChmZCkKKyAgICAgICAgaWYgZmQgPT0gMjoKKyAgICAgICAgICAgIHN0cmVhbSA9IHNlbGYuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgZmQgPT0gMQorICAgICAgICAgICAgc3RyZWFtID0gc2VsZi5zdGRvdXQKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIG5hbWUgPSAnc3Rkb3V0JyBpZiBmZCA9PSAxIGVsc2UgJ3N0ZGVycicKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnJXIgY29tbXVuaWNhdGU6IHJlYWQgJXMnLCBzZWxmLCBuYW1lKQorICAgICAgICBvdXRwdXQgPSB5aWVsZCBmcm9tIHN0cmVhbS5yZWFkKCkKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIG5hbWUgPSAnc3Rkb3V0JyBpZiBmZCA9PSAxIGVsc2UgJ3N0ZGVycicKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnJXIgY29tbXVuaWNhdGU6IGNsb3NlICVzJywgc2VsZiwgbmFtZSkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjb21tdW5pY2F0ZShzZWxmLCBpbnB1dD1Ob25lKToKKyAgICAgICAgaWYgaW5wdXQ6CisgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX2ZlZWRfc3RkaW4oaW5wdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX25vb3AoKQorICAgICAgICBpZiBzZWxmLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX3JlYWRfc3RyZWFtKDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9ub29wKCkKKyAgICAgICAgaWYgc2VsZi5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9yZWFkX3N0cmVhbSgyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fbm9vcCgpCisgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciA9IHlpZWxkIGZyb20gdGFza3MuZ2F0aGVyKHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYud2FpdCgpCisgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCisKKworQGNvcm91dGluZQorZGVmIGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKGNtZCwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9c3RyZWFtcy5fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHByb3RvY29sX2ZhY3RvcnkgPSBsYW1iZGE6IFN1YnByb2Nlc3NTdHJlYW1Qcm90b2NvbChsaW1pdD1saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIGxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVyciwgKiprd2RzKQorICAgIHlpZWxkIGZyb20gcHJvdG9jb2wud2FpdGVyCisgICAgcmV0dXJuIFByb2Nlc3ModHJhbnNwb3J0LCBwcm90b2NvbCwgbG9vcCkKKworQGNvcm91dGluZQorZGVmIGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMocHJvZ3JhbSwgKmFyZ3MsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPU5vbmUsIGxvb3A9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PXN0cmVhbXMuX0RFRkFVTFRfTElNSVQsICoqa3dkcyk6CisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICBwcm90b2NvbF9mYWN0b3J5ID0gbGFtYmRhOiBTdWJwcm9jZXNzU3RyZWFtUHJvdG9jb2wobGltaXQ9bGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKyAgICB0cmFuc3BvcnQsIHByb3RvY29sID0geWllbGQgZnJvbSBsb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSwgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyLCAqKmt3ZHMpCisgICAgeWllbGQgZnJvbSBwcm90b2NvbC53YWl0ZXIKKyAgICByZXR1cm4gUHJvY2Vzcyh0cmFuc3BvcnQsIHByb3RvY29sLCBsb29wKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGFza3MucHkgYi9MaWIvYXN5bmNpby90YXNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTU2ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vdGFza3MucHkKQEAgLTAsMCArMSw2NTggQEAKKyIiIlN1cHBvcnQgZm9yIHRhc2tzLCBjb3JvdXRpbmVzIGFuZCB0aGUgc2NoZWR1bGVyLiIiIgorCitfX2FsbF9fID0gWydUYXNrJywKKyAgICAgICAgICAgJ0ZJUlNUX0NPTVBMRVRFRCcsICdGSVJTVF9FWENFUFRJT04nLCAnQUxMX0NPTVBMRVRFRCcsCisgICAgICAgICAgICd3YWl0JywgJ3dhaXRfZm9yJywgJ2FzX2NvbXBsZXRlZCcsICdzbGVlcCcsICdhc3luYycsCisgICAgICAgICAgICdnYXRoZXInLCAnc2hpZWxkJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGxpbmVjYWNoZQoraW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHdlYWtyZWYKKworZnJvbSAuIGltcG9ydCBjb3JvdXRpbmVzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKKworX1BZMzQgPSAoc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNCkpCisKKworY2xhc3MgVGFzayhmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiQSBjb3JvdXRpbmUgd3JhcHBlZCBpbiBhIEZ1dHVyZS4iIiIKKworICAgICMgQW4gaW1wb3J0YW50IGludmFyaWFudCBtYWludGFpbmVkIHdoaWxlIGEgVGFzayBub3QgZG9uZToKKyAgICAjCisgICAgIyAtIEVpdGhlciBfZnV0X3dhaXRlciBpcyBOb25lLCBhbmQgX3N0ZXAoKSBpcyBzY2hlZHVsZWQ7CisgICAgIyAtIG9yIF9mdXRfd2FpdGVyIGlzIHNvbWUgRnV0dXJlLCBhbmQgX3N0ZXAoKSBpcyAqbm90KiBzY2hlZHVsZWQuCisgICAgIworICAgICMgVGhlIG9ubHkgdHJhbnNpdGlvbiBmcm9tIHRoZSBsYXR0ZXIgdG8gdGhlIGZvcm1lciBpcyB0aHJvdWdoCisgICAgIyBfd2FrZXVwKCkuICBXaGVuIF9mdXRfd2FpdGVyIGlzIG5vdCBOb25lLCBvbmUgb2YgaXRzIGNhbGxiYWNrcworICAgICMgbXVzdCBiZSBfd2FrZXVwKCkuCisKKyAgICAjIFdlYWsgc2V0IGNvbnRhaW5pbmcgYWxsIHRhc2tzIGFsaXZlLgorICAgIF9hbGxfdGFza3MgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgIyBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGFza3MgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBpbgorICAgICMgYWxsIHJ1bm5pbmcgZXZlbnQgbG9vcHMuICB7RXZlbnRMb29wOiBUYXNrfQorICAgIF9jdXJyZW50X3Rhc2tzID0ge30KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjdXJyZW50X3Rhc2soY2xzLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgaW4gYW4gZXZlbnQgbG9vcCBvciBOb25lLgorCisgICAgICAgIEJ5IGRlZmF1bHQgdGhlIGN1cnJlbnQgdGFzayBmb3IgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpcyByZXR1cm5lZC4KKworICAgICAgICBOb25lIGlzIHJldHVybmVkIHdoZW4gY2FsbGVkIG5vdCBpbiB0aGUgY29udGV4dCBvZiBhIFRhc2suCisgICAgICAgICIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgcmV0dXJuIGNscy5fY3VycmVudF90YXNrcy5nZXQobG9vcCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhbGxfdGFza3MoY2xzLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBzZXQgb2YgYWxsIHRhc2tzIGZvciBhbiBldmVudCBsb29wLgorCisgICAgICAgIEJ5IGRlZmF1bHQgYWxsIHRhc2tzIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGFyZSByZXR1cm5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICByZXR1cm4ge3QgZm9yIHQgaW4gY2xzLl9hbGxfdGFza3MgaWYgdC5fbG9vcCBpcyBsb29wfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvcm8sICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGFzc2VydCBjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNvcm8pLCByZXByKGNvcm8pICAjIE5vdCBhIGNvcm91dGluZSBmdW5jdGlvbiEKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgc2VsZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgc2VsZi5fY29ybyA9IGl0ZXIoY29ybykgICMgVXNlIHRoZSBpdGVyYXRvciBqdXN0IGluIGNhc2UuCisgICAgICAgIHNlbGYuX2Z1dF93YWl0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fc3RlcCkKKyAgICAgICAgc2VsZi5fX2NsYXNzX18uX2FsbF90YXNrcy5hZGQoc2VsZikKKyAgICAgICAgIyBJZiBGYWxzZSwgZG9uJ3QgbG9nIGEgbWVzc2FnZSBpZiB0aGUgdGFzayBpcyBkZXN0cm95ZWQgd2hlcmVhcyBpdHMKKyAgICAgICAgIyBzdGF0dXMgaXMgc3RpbGwgcGVuZGluZworICAgICAgICBzZWxmLl9sb2dfZGVzdHJveV9wZW5kaW5nID0gVHJ1ZQorCisgICAgIyBPbiBQeXRob24gMy4zIG9yIG9sZGVyLCBvYmplY3RzIHdpdGggYSBkZXN0cnVjdG9yIHBhcnQgb2YgYSByZWZlcmVuY2UKKyAgICAjIGN5Y2xlIGFyZSBuZXZlciBkZXN0cm95ZWQuIEl0J3Mgbm90IG1vcmUgdGhlIGNhc2Ugb24gUHl0aG9uIDMuNCB0aGFua3MgdG8KKyAgICAjIHRoZSBQRVAgNDQyLgorICAgIGlmIF9QWTM0OgorICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IGZ1dHVyZXMuX1BFTkRJTkcgYW5kIHNlbGYuX2xvZ19kZXN0cm95X3BlbmRpbmc6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ3Rhc2snOiBzZWxmLAorICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdUYXNrIHdhcyBkZXN0cm95ZWQgYnV0IGl0IGlzIHBlbmRpbmchJywKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsnc291cmNlX3RyYWNlYmFjayddID0gc2VsZi5fc291cmNlX3RyYWNlYmFjaworICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorICAgICAgICAgICAgZnV0dXJlcy5GdXR1cmUuX19kZWxfXyhzZWxmKQorCisgICAgZGVmIF9yZXByX2luZm8oc2VsZik6CisgICAgICAgIGluZm8gPSBzdXBlcigpLl9yZXByX2luZm8oKQorCisgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgIyByZXBsYWNlIHN0YXR1cworICAgICAgICAgICAgaW5mb1swXSA9ICdjYW5jZWxsaW5nJworCisgICAgICAgIGNvcm8gPSBjb3JvdXRpbmVzLl9mb3JtYXRfY29yb3V0aW5lKHNlbGYuX2Nvcm8pCisgICAgICAgIGluZm8uaW5zZXJ0KDEsICdjb3JvPTwlcz4nICUgY29ybykKKworICAgICAgICBpZiBzZWxmLl9mdXRfd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5pbnNlcnQoMiwgJ3dhaXRfZm9yPSVyJyAlIHNlbGYuX2Z1dF93YWl0ZXIpCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgZ2V0X3N0YWNrKHNlbGYsICosIGxpbWl0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2Ygc3RhY2sgZnJhbWVzIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgICAgSWYgdGhlIGNvcm91dGluZSBpcyBhY3RpdmUsIHRoaXMgcmV0dXJucyB0aGUgc3RhY2sgd2hlcmUgaXQgaXMKKyAgICAgICAgc3VzcGVuZGVkLiAgSWYgdGhlIGNvcm91dGluZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciB3YXMKKyAgICAgICAgY2FuY2VsbGVkLCB0aGlzIHJldHVybnMgYW4gZW1wdHkgbGlzdC4gIElmIHRoZSBjb3JvdXRpbmUgd2FzCisgICAgICAgIHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLCB0aGlzIHJldHVybnMgdGhlIGxpc3Qgb2YgdHJhY2ViYWNrCisgICAgICAgIGZyYW1lcy4KKworICAgICAgICBUaGUgZnJhbWVzIGFyZSBhbHdheXMgb3JkZXJlZCBmcm9tIG9sZGVzdCB0byBuZXdlc3QuCisKKyAgICAgICAgVGhlIG9wdGlvbmFsIGxpbWl0IGdpdmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdG8KKyAgICAgICAgcmV0dXJuOyBieSBkZWZhdWx0IGFsbCBhdmFpbGFibGUgZnJhbWVzIGFyZSByZXR1cm5lZC4gIEl0cworICAgICAgICBtZWFuaW5nIGRpZmZlcnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBzdGFjayBvciBhIHRyYWNlYmFjayBpcworICAgICAgICByZXR1cm5lZDogdGhlIG5ld2VzdCBmcmFtZXMgb2YgYSBzdGFjayBhcmUgcmV0dXJuZWQsIGJ1dCB0aGUKKyAgICAgICAgb2xkZXN0IGZyYW1lcyBvZiBhIHRyYWNlYmFjayBhcmUgcmV0dXJuZWQuICAoVGhpcyBtYXRjaGVzIHRoZQorICAgICAgICBiZWhhdmlvciBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZS4pCisKKyAgICAgICAgRm9yIHJlYXNvbnMgYmV5b25kIG91ciBjb250cm9sLCBvbmx5IG9uZSBzdGFjayBmcmFtZSBpcworICAgICAgICByZXR1cm5lZCBmb3IgYSBzdXNwZW5kZWQgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgZnJhbWVzID0gW10KKyAgICAgICAgZiA9IHNlbGYuX2Nvcm8uZ2lfZnJhbWUKKyAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IDw9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBsaW1pdCAtPSAxCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIGYgPSBmLmZfYmFjaworICAgICAgICAgICAgZnJhbWVzLnJldmVyc2UoKQorICAgICAgICBlbGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRiID0gc2VsZi5fZXhjZXB0aW9uLl9fdHJhY2ViYWNrX18KKyAgICAgICAgICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCA8PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgLT0gMQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQodGIudGJfZnJhbWUpCisgICAgICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBmcmFtZXMKKworICAgIGRlZiBwcmludF9zdGFjayhzZWxmLCAqLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpOgorICAgICAgICAiIiJQcmludCB0aGUgc3RhY2sgb3IgdHJhY2ViYWNrIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgICAgVGhpcyBwcm9kdWNlcyBvdXRwdXQgc2ltaWxhciB0byB0aGF0IG9mIHRoZSB0cmFjZWJhY2sgbW9kdWxlLAorICAgICAgICBmb3IgdGhlIGZyYW1lcyByZXRyaWV2ZWQgYnkgZ2V0X3N0YWNrKCkuICBUaGUgbGltaXQgYXJndW1lbnQKKyAgICAgICAgaXMgcGFzc2VkIHRvIGdldF9zdGFjaygpLiAgVGhlIGZpbGUgYXJndW1lbnQgaXMgYW4gSS9PIHN0cmVhbQorICAgICAgICB0byB3aGljaCB0aGUgb3V0cHV0IGdvZXM7IGJ5IGRlZmF1bHQgaXQgZ29lcyB0byBzeXMuc3RkZXJyLgorICAgICAgICAiIiIKKyAgICAgICAgZXh0cmFjdGVkX2xpc3QgPSBbXQorICAgICAgICBjaGVja2VkID0gc2V0KCkKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5nZXRfc3RhY2sobGltaXQ9bGltaXQpOgorICAgICAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubworICAgICAgICAgICAgY28gPSBmLmZfY29kZQorICAgICAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQorICAgICAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiBjaGVja2VkOgorICAgICAgICAgICAgICAgIGNoZWNrZWQuYWRkKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQorICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQorICAgICAgICAgICAgZXh0cmFjdGVkX2xpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKKyAgICAgICAgZXhjID0gc2VsZi5fZXhjZXB0aW9uCisgICAgICAgIGlmIG5vdCBleHRyYWN0ZWRfbGlzdDoKKyAgICAgICAgICAgIHByaW50KCdObyBzdGFjayBmb3IgJXInICUgc2VsZiwgZmlsZT1maWxlKQorICAgICAgICBlbGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaW50KCdUcmFjZWJhY2sgZm9yICVyIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicgJSBzZWxmLAorICAgICAgICAgICAgICAgICAgZmlsZT1maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoJ1N0YWNrIGZvciAlciAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonICUgc2VsZiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9ZmlsZSkKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2xpc3QoZXh0cmFjdGVkX2xpc3QsIGZpbGU9ZmlsZSkKKyAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGMuX19jbGFzc19fLCBleGMpOgorICAgICAgICAgICAgICAgIHByaW50KGxpbmUsIGZpbGU9ZmlsZSwgZW5kPScnKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiUmVxdWVzdCB0aGlzIHRhc2sgdG8gY2FuY2VsIGl0c2VsZi4KKworICAgICAgICBUaGlzIGFycmFuZ2VzIGZvciBhIENhbmNlbGxlZEVycm9yIHRvIGJlIHRocm93biBpbnRvIHRoZQorICAgICAgICB3cmFwcGVkIGNvcm91dGluZSBvbiB0aGUgbmV4dCBjeWNsZSB0aHJvdWdoIHRoZSBldmVudCBsb29wLgorICAgICAgICBUaGUgY29yb3V0aW5lIHRoZW4gaGFzIGEgY2hhbmNlIHRvIGNsZWFuIHVwIG9yIGV2ZW4gZGVueQorICAgICAgICB0aGUgcmVxdWVzdCB1c2luZyB0cnkvZXhjZXB0L2ZpbmFsbHkuCisKKyAgICAgICAgQ29udHJhcnkgdG8gRnV0dXJlLmNhbmNlbCgpLCB0aGlzIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IHRoZQorICAgICAgICB0YXNrIHdpbGwgYmUgY2FuY2VsbGVkOiB0aGUgZXhjZXB0aW9uIG1pZ2h0IGJlIGNhdWdodCBhbmQKKyAgICAgICAgYWN0ZWQgdXBvbiwgZGVsYXlpbmcgY2FuY2VsbGF0aW9uIG9mIHRoZSB0YXNrIG9yIHByZXZlbnRpbmcgaXQKKyAgICAgICAgY29tcGxldGVseS4gIFRoZSB0YXNrIG1heSBhbHNvIHJldHVybiBhIHZhbHVlIG9yIHJhaXNlIGEKKyAgICAgICAgZGlmZmVyZW50IGV4Y2VwdGlvbi4KKworICAgICAgICBJbW1lZGlhdGVseSBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIFRhc2suY2FuY2VsbGVkKCkgd2lsbAorICAgICAgICBub3QgcmV0dXJuIFRydWUgKHVubGVzcyB0aGUgdGFzayB3YXMgYWxyZWFkeSBjYW5jZWxsZWQpLiAgQQorICAgICAgICB0YXNrIHdpbGwgYmUgbWFya2VkIGFzIGNhbmNlbGxlZCB3aGVuIHRoZSB3cmFwcGVkIGNvcm91dGluZQorICAgICAgICB0ZXJtaW5hdGVzIHdpdGggYSBDYW5jZWxsZWRFcnJvciBleGNlcHRpb24gKGV2ZW4gaWYgY2FuY2VsKCkKKyAgICAgICAgd2FzIG5vdCBjYWxsZWQpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIuY2FuY2VsKCk6CisgICAgICAgICAgICAgICAgIyBMZWF2ZSBzZWxmLl9mdXRfd2FpdGVyOyBpdCBtYXkgYmUgYSBUYXNrIHRoYXQKKyAgICAgICAgICAgICAgICAjIGNhdGNoZXMgYW5kIGlnbm9yZXMgdGhlIGNhbmNlbGxhdGlvbiBzbyB3ZSBtYXkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gY2FuY2VsIGl0IGFnYWluIGxhdGVyLgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgSXQgbXVzdCBiZSB0aGUgY2FzZSB0aGF0IHNlbGYuX3N0ZXAgaXMgYWxyZWFkeSBzY2hlZHVsZWQuCisgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9zdGVwKHNlbGYsIHZhbHVlPU5vbmUsIGV4Yz1Ob25lKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmRvbmUoKSwgXAorICAgICAgICAgICAgJ19zdGVwKCk6IGFscmVhZHkgZG9uZTogeyFyfSwgeyFyfSwgeyFyfScuZm9ybWF0KHNlbGYsIHZhbHVlLCBleGMpCisgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgICAgICBleGMgPSBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKCkKKyAgICAgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgY29ybyA9IHNlbGYuX2Nvcm8KKyAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IE5vbmUKKworICAgICAgICBzZWxmLl9fY2xhc3NfXy5fY3VycmVudF90YXNrc1tzZWxmLl9sb29wXSA9IHNlbGYKKyAgICAgICAgIyBDYWxsIGVpdGhlciBjb3JvLnRocm93KGV4Yykgb3IgY29yby5zZW5kKHZhbHVlKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcm8udGhyb3coZXhjKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JvLnNlbmQodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQoY29ybykKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5zZXRfcmVzdWx0KGV4Yy52YWx1ZSkKKyAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc3VwZXIoKS5jYW5jZWwoKSAgIyBJLmUuLCBGdXR1cmUuY2FuY2VsKHNlbGYpLgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgICAgICAgICAjIFlpZWxkZWQgRnV0dXJlIG11c3QgY29tZSBmcm9tIEZ1dHVyZS5fX2l0ZXJfXygpLgorICAgICAgICAgICAgICAgIGlmIHJlc3VsdC5fYmxvY2tpbmc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5fYmxvY2tpbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fd2FrZXVwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mdXRfd2FpdGVyID0gcmVzdWx0CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlci5jYW5jZWwoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGVwLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5aWVsZCB3YXMgdXNlZCBpbnN0ZWFkIG9mIHlpZWxkIGZyb20gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0YXNrIHshcn0gd2l0aCB7IXJ9Jy5mb3JtYXQoc2VsZiwgcmVzdWx0KSkpCisgICAgICAgICAgICBlbGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgQmFyZSB5aWVsZCByZWxpbnF1aXNoZXMgY29udHJvbCBmb3Igb25lIGV2ZW50IGxvb3AgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3N0ZXApCisgICAgICAgICAgICBlbGlmIGluc3BlY3QuaXNnZW5lcmF0b3IocmVzdWx0KToKKyAgICAgICAgICAgICAgICAjIFlpZWxkaW5nIGEgZ2VuZXJhdG9yIGlzIGp1c3Qgd3JvbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICd5aWVsZCB3YXMgdXNlZCBpbnN0ZWFkIG9mIHlpZWxkIGZyb20gZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdnZW5lcmF0b3IgaW4gdGFzayB7IXJ9IHdpdGgge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCByZXN1bHQpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBzb21ldGhpbmcgZWxzZSBpcyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1Rhc2sgZ290IGJhZCB5aWVsZDogeyFyfScuZm9ybWF0KHJlc3VsdCkpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX2N1cnJlbnRfdGFza3MucG9wKHNlbGYuX2xvb3ApCisgICAgICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworICAgIGRlZiBfd2FrZXVwKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZnV0dXJlLnJlc3VsdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgIyBUaGlzIG1heSBhbHNvIGJlIGEgY2FuY2VsbGF0aW9uLgorICAgICAgICAgICAgc2VsZi5fc3RlcChOb25lLCBleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdGVwKHZhbHVlLCBOb25lKQorICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworCisjIHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkgc2ltaWxhciB0byB0aG9zZSBpbiBQRVAgMzE0OC4KKworRklSU1RfQ09NUExFVEVEID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0NPTVBMRVRFRAorRklSU1RfRVhDRVBUSU9OID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0VYQ0VQVElPTgorQUxMX0NPTVBMRVRFRCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5BTExfQ09NUExFVEVECisKKworQGNvcm91dGluZQorZGVmIHdhaXQoZnMsICosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lLCByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKToKKyAgICAiIiJXYWl0IGZvciB0aGUgRnV0dXJlcyBhbmQgY29yb3V0aW5lcyBnaXZlbiBieSBmcyB0byBjb21wbGV0ZS4KKworICAgIFRoZSBzZXF1ZW5jZSBmdXR1cmVzIG11c3Qgbm90IGJlIGVtcHR5LgorCisgICAgQ29yb3V0aW5lcyB3aWxsIGJlIHdyYXBwZWQgaW4gVGFza3MuCisKKyAgICBSZXR1cm5zIHR3byBzZXRzIG9mIEZ1dHVyZTogKGRvbmUsIHBlbmRpbmcpLgorCisgICAgVXNhZ2U6CisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KGZzKQorCisgICAgTm90ZTogVGhpcyBkb2VzIG5vdCByYWlzZSBUaW1lb3V0RXJyb3IhIEZ1dHVyZXMgdGhhdCBhcmVuJ3QgZG9uZQorICAgIHdoZW4gdGhlIHRpbWVvdXQgb2NjdXJzIGFyZSByZXR1cm5lZCBpbiB0aGUgc2Vjb25kIHNldC4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZzLCBmdXR1cmVzLkZ1dHVyZSkgb3IgY29yb3V0aW5lcy5pc2Nvcm91dGluZShmcyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0IGEgbGlzdCBvZiBmdXR1cmVzLCBub3QgJXMiICUgdHlwZShmcykuX19uYW1lX18pCisgICAgaWYgbm90IGZzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXQgb2YgY29yb3V0aW5lcy9GdXR1cmVzIGlzIGVtcHR5LicpCisgICAgaWYgcmV0dXJuX3doZW4gbm90IGluIChGSVJTVF9DT01QTEVURUQsIEZJUlNUX0VYQ0VQVElPTiwgQUxMX0NPTVBMRVRFRCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgcmV0dXJuX3doZW4gdmFsdWU6IHt9Jy5mb3JtYXQocmV0dXJuX3doZW4pKQorCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGZzID0ge2FzeW5jKGYsIGxvb3A9bG9vcCkgZm9yIGYgaW4gc2V0KGZzKX0KKworICAgIHJldHVybiAoeWllbGQgZnJvbSBfd2FpdChmcywgdGltZW91dCwgcmV0dXJuX3doZW4sIGxvb3ApKQorCisKK2RlZiBfcmVsZWFzZV93YWl0ZXIod2FpdGVyLCAqYXJncyk6CisgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKworQGNvcm91dGluZQorZGVmIHdhaXRfZm9yKGZ1dCwgdGltZW91dCwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXYWl0IGZvciB0aGUgc2luZ2xlIEZ1dHVyZSBvciBjb3JvdXRpbmUgdG8gY29tcGxldGUsIHdpdGggdGltZW91dC4KKworICAgIENvcm91dGluZSB3aWxsIGJlIHdyYXBwZWQgaW4gVGFzay4KKworICAgIFJldHVybnMgcmVzdWx0IG9mIHRoZSBGdXR1cmUgb3IgY29yb3V0aW5lLiAgV2hlbiBhIHRpbWVvdXQgb2NjdXJzLAorICAgIGl0IGNhbmNlbHMgdGhlIHRhc2sgYW5kIHJhaXNlcyBUaW1lb3V0RXJyb3IuICBUbyBhdm9pZCB0aGUgdGFzaworICAgIGNhbmNlbGxhdGlvbiwgd3JhcCBpdCBpbiBzaGllbGQoKS4KKworICAgIFVzYWdlOgorCisgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0X2ZvcihmdXQsIDEwLjApCisKKyAgICAiIiIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZnV0KQorCisgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyKQorICAgIGNiID0gZnVuY3Rvb2xzLnBhcnRpYWwoX3JlbGVhc2Vfd2FpdGVyLCB3YWl0ZXIpCisKKyAgICBmdXQgPSBhc3luYyhmdXQsIGxvb3A9bG9vcCkKKyAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisKKyAgICB0cnk6CisgICAgICAgICMgd2FpdCB1bnRpbCB0aGUgZnV0dXJlIGNvbXBsZXRlcyBvciB0aGUgdGltZW91dAorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisgICAgICAgIGlmIGZ1dC5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4gZnV0LnJlc3VsdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgICAgIHJhaXNlIGZ1dHVyZXMuVGltZW91dEVycm9yKCkKKyAgICBmaW5hbGx5OgorICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorCisKK0Bjb3JvdXRpbmUKK2RlZiBfd2FpdChmcywgdGltZW91dCwgcmV0dXJuX3doZW4sIGxvb3ApOgorICAgICIiIkludGVybmFsIGhlbHBlciBmb3Igd2FpdCgpIGFuZCBfd2FpdF9mb3IoKS4KKworICAgIFRoZSBmcyBhcmd1bWVudCBtdXN0IGJlIGEgY29sbGVjdGlvbiBvZiBGdXR1cmVzLgorICAgICIiIgorICAgIGFzc2VydCBmcywgJ1NldCBvZiBGdXR1cmVzIGlzIGVtcHR5LicKKyAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgdGltZW91dF9oYW5kbGUgPSBOb25lCisgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgdGltZW91dF9oYW5kbGUgPSBsb29wLmNhbGxfbGF0ZXIodGltZW91dCwgX3JlbGVhc2Vfd2FpdGVyLCB3YWl0ZXIpCisgICAgY291bnRlciA9IGxlbihmcykKKworICAgIGRlZiBfb25fY29tcGxldGlvbihmKToKKyAgICAgICAgbm9ubG9jYWwgY291bnRlcgorICAgICAgICBjb3VudGVyIC09IDEKKyAgICAgICAgaWYgKGNvdW50ZXIgPD0gMCBvcgorICAgICAgICAgICAgcmV0dXJuX3doZW4gPT0gRklSU1RfQ09NUExFVEVEIG9yCisgICAgICAgICAgICByZXR1cm5fd2hlbiA9PSBGSVJTVF9FWENFUFRJT04gYW5kIChub3QgZi5jYW5jZWxsZWQoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuZXhjZXB0aW9uKCkgaXMgbm90IE5vbmUpKToKKyAgICAgICAgICAgIGlmIHRpbWVvdXRfaGFuZGxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZm9yIGYgaW4gZnM6CisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorCisgICAgZG9uZSwgcGVuZGluZyA9IHNldCgpLCBzZXQoKQorICAgIGZvciBmIGluIGZzOgorICAgICAgICBmLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgICAgICBpZiBmLmRvbmUoKToKKyAgICAgICAgICAgIGRvbmUuYWRkKGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwZW5kaW5nLmFkZChmKQorICAgIHJldHVybiBkb25lLCBwZW5kaW5nCisKKworIyBUaGlzIGlzICpub3QqIGEgQGNvcm91dGluZSEgIEl0IGlzIGp1c3QgYW4gaXRlcmF0b3IgKHlpZWxkaW5nIEZ1dHVyZXMpLgorZGVmIGFzX2NvbXBsZXRlZChmcywgKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgICIiIlJldHVybiBhbiBpdGVyYXRvciB3aG9zZSB2YWx1ZXMgYXJlIGNvcm91dGluZXMuCisKKyAgICBXaGVuIHdhaXRpbmcgZm9yIHRoZSB5aWVsZGVkIGNvcm91dGluZXMgeW91J2xsIGdldCB0aGUgcmVzdWx0cyAob3IKKyAgICBleGNlcHRpb25zISkgb2YgdGhlIG9yaWdpbmFsIEZ1dHVyZXMgKG9yIGNvcm91dGluZXMpLCBpbiB0aGUgb3JkZXIKKyAgICBpbiB3aGljaCBhbmQgYXMgc29vbiBhcyB0aGV5IGNvbXBsZXRlLgorCisgICAgVGhpcyBkaWZmZXJzIGZyb20gUEVQIDMxNDg7IHRoZSBwcm9wZXIgd2F5IHRvIHVzZSB0aGlzIGlzOgorCisgICAgICAgIGZvciBmIGluIGFzX2NvbXBsZXRlZChmcyk6CisgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGYgICMgVGhlICd5aWVsZCBmcm9tJyBtYXkgcmFpc2UuCisgICAgICAgICAgICAjIFVzZSByZXN1bHQuCisKKyAgICBJZiBhIHRpbWVvdXQgaXMgc3BlY2lmaWVkLCB0aGUgJ3lpZWxkIGZyb20nIHdpbGwgcmFpc2UKKyAgICBUaW1lb3V0RXJyb3Igd2hlbiB0aGUgdGltZW91dCBvY2N1cnMgYmVmb3JlIGFsbCBGdXR1cmVzIGFyZSBkb25lLgorCisgICAgTm90ZTogVGhlIGZ1dHVyZXMgJ2YnIGFyZSBub3QgbmVjZXNzYXJpbHkgbWVtYmVycyBvZiBmcy4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZzLCBmdXR1cmVzLkZ1dHVyZSkgb3IgY29yb3V0aW5lcy5pc2Nvcm91dGluZShmcyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0IGEgbGlzdCBvZiBmdXR1cmVzLCBub3QgJXMiICUgdHlwZShmcykuX19uYW1lX18pCisgICAgbG9vcCA9IGxvb3AgaWYgbG9vcCBpcyBub3QgTm9uZSBlbHNlIGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgdG9kbyA9IHthc3luYyhmLCBsb29wPWxvb3ApIGZvciBmIGluIHNldChmcyl9CisgICAgZnJvbSAucXVldWVzIGltcG9ydCBRdWV1ZSAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnQgcHJvYmxlbS4KKyAgICBkb25lID0gUXVldWUobG9vcD1sb29wKQorICAgIHRpbWVvdXRfaGFuZGxlID0gTm9uZQorCisgICAgZGVmIF9vbl90aW1lb3V0KCk6CisgICAgICAgIGZvciBmIGluIHRvZG86CisgICAgICAgICAgICBmLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgICAgICAgICAgZG9uZS5wdXRfbm93YWl0KE5vbmUpICAjIFF1ZXVlIGEgZHVtbXkgdmFsdWUgZm9yIF93YWl0X2Zvcl9vbmUoKS4KKyAgICAgICAgdG9kby5jbGVhcigpICAjIENhbid0IGRvIHRvZG8ucmVtb3ZlKGYpIGluIHRoZSBsb29wLgorCisgICAgZGVmIF9vbl9jb21wbGV0aW9uKGYpOgorICAgICAgICBpZiBub3QgdG9kbzoKKyAgICAgICAgICAgIHJldHVybiAgIyBfb25fdGltZW91dCgpIHdhcyBoZXJlIGZpcnN0LgorICAgICAgICB0b2RvLnJlbW92ZShmKQorICAgICAgICBkb25lLnB1dF9ub3dhaXQoZikKKyAgICAgICAgaWYgbm90IHRvZG8gYW5kIHRpbWVvdXRfaGFuZGxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3dhaXRfZm9yX29uZSgpOgorICAgICAgICBmID0geWllbGQgZnJvbSBkb25lLmdldCgpCisgICAgICAgIGlmIGYgaXMgTm9uZToKKyAgICAgICAgICAgICMgRHVtbXkgdmFsdWUgZnJvbSBfb25fdGltZW91dCgpLgorICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IKKyAgICAgICAgcmV0dXJuIGYucmVzdWx0KCkgICMgTWF5IHJhaXNlIGYuZXhjZXB0aW9uKCkuCisKKyAgICBmb3IgZiBpbiB0b2RvOgorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgIGlmIHRvZG8gYW5kIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9vbl90aW1lb3V0KQorICAgIGZvciBfIGluIHJhbmdlKGxlbih0b2RvKSk6CisgICAgICAgIHlpZWxkIF93YWl0X2Zvcl9vbmUoKQorCisKK0Bjb3JvdXRpbmUKK2RlZiBzbGVlcChkZWxheSwgcmVzdWx0PU5vbmUsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiQ29yb3V0aW5lIHRoYXQgY29tcGxldGVzIGFmdGVyIGEgZ2l2ZW4gdGltZSAoaW4gc2Vjb25kcykuIiIiCisgICAgZnV0dXJlID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIGggPSBmdXR1cmUuX2xvb3AuY2FsbF9sYXRlcihkZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlLl9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQsIHJlc3VsdCkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBmdXR1cmUpCisgICAgZmluYWxseToKKyAgICAgICAgaC5jYW5jZWwoKQorCisKK2RlZiBhc3luYyhjb3JvX29yX2Z1dHVyZSwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXcmFwIGEgY29yb3V0aW5lIGluIGEgZnV0dXJlLgorCisgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgRnV0dXJlLCBpdCBpcyByZXR1cm5lZCBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGNvcm9fb3JfZnV0dXJlLCBmdXR1cmVzLkZ1dHVyZSk6CisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmUgYW5kIGxvb3AgaXMgbm90IGNvcm9fb3JfZnV0dXJlLl9sb29wOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbG9vcCBhcmd1bWVudCBtdXN0IGFncmVlIHdpdGggRnV0dXJlJykKKyAgICAgICAgcmV0dXJuIGNvcm9fb3JfZnV0dXJlCisgICAgZWxpZiBjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNvcm9fb3JfZnV0dXJlKToKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIHRhc2sgPSBsb29wLmNyZWF0ZV90YXNrKGNvcm9fb3JfZnV0dXJlKQorICAgICAgICBpZiB0YXNrLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHRhc2suX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHJldHVybiB0YXNrCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBIEZ1dHVyZSBvciBjb3JvdXRpbmUgaXMgcmVxdWlyZWQnKQorCisKK2NsYXNzIF9HYXRoZXJpbmdGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIkhlbHBlciBmb3IgZ2F0aGVyKCkuCisKKyAgICBUaGlzIG92ZXJyaWRlcyBjYW5jZWwoKSB0byBjYW5jZWwgYWxsIHRoZSBjaGlsZHJlbiBhbmQgYWN0IG1vcmUKKyAgICBsaWtlIFRhc2suY2FuY2VsKCksIHdoaWNoIGRvZXNuJ3QgaW1tZWRpYXRlbHkgbWFyayBpdHNlbGYgYXMKKyAgICBjYW5jZWxsZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hpbGRyZW4sICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IGNoaWxkcmVuCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRvbmUoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5fY2hpbGRyZW46CisgICAgICAgICAgICBjaGlsZC5jYW5jZWwoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBnYXRoZXIoKmNvcm9zX29yX2Z1dHVyZXMsIGxvb3A9Tm9uZSwgcmV0dXJuX2V4Y2VwdGlvbnM9RmFsc2UpOgorICAgICIiIlJldHVybiBhIGZ1dHVyZSBhZ2dyZWdhdGluZyByZXN1bHRzIGZyb20gdGhlIGdpdmVuIGNvcm91dGluZXMKKyAgICBvciBmdXR1cmVzLgorCisgICAgQWxsIGZ1dHVyZXMgbXVzdCBzaGFyZSB0aGUgc2FtZSBldmVudCBsb29wLiAgSWYgYWxsIHRoZSB0YXNrcyBhcmUKKyAgICBkb25lIHN1Y2Nlc3NmdWxseSwgdGhlIHJldHVybmVkIGZ1dHVyZSdzIHJlc3VsdCBpcyB0aGUgbGlzdCBvZgorICAgIHJlc3VsdHMgKGluIHRoZSBvcmRlciBvZiB0aGUgb3JpZ2luYWwgc2VxdWVuY2UsIG5vdCBuZWNlc3NhcmlseQorICAgIHRoZSBvcmRlciBvZiByZXN1bHRzIGFycml2YWwpLiAgSWYgKnJldHVybl9leGNlcHRpb25zKiBpcyBUcnVlLAorICAgIGV4Y2VwdGlvbnMgaW4gdGhlIHRhc2tzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzIHN1Y2Nlc3NmdWwKKyAgICByZXN1bHRzLCBhbmQgZ2F0aGVyZWQgaW4gdGhlIHJlc3VsdCBsaXN0OyBvdGhlcndpc2UsIHRoZSBmaXJzdAorICAgIHJhaXNlZCBleGNlcHRpb24gd2lsbCBiZSBpbW1lZGlhdGVseSBwcm9wYWdhdGVkIHRvIHRoZSByZXR1cm5lZAorICAgIGZ1dHVyZS4KKworICAgIENhbmNlbGxhdGlvbjogaWYgdGhlIG91dGVyIEZ1dHVyZSBpcyBjYW5jZWxsZWQsIGFsbCBjaGlsZHJlbiAodGhhdAorICAgIGhhdmUgbm90IGNvbXBsZXRlZCB5ZXQpIGFyZSBhbHNvIGNhbmNlbGxlZC4gIElmIGFueSBjaGlsZCBpcworICAgIGNhbmNlbGxlZCwgdGhpcyBpcyB0cmVhdGVkIGFzIGlmIGl0IHJhaXNlZCBDYW5jZWxsZWRFcnJvciAtLQorICAgIHRoZSBvdXRlciBGdXR1cmUgaXMgKm5vdCogY2FuY2VsbGVkIGluIHRoaXMgY2FzZS4gIChUaGlzIGlzIHRvCisgICAgcHJldmVudCB0aGUgY2FuY2VsbGF0aW9uIG9mIG9uZSBjaGlsZCB0byBjYXVzZSBvdGhlciBjaGlsZHJlbiB0bworICAgIGJlIGNhbmNlbGxlZC4pCisgICAgIiIiCisgICAgaWYgbm90IGNvcm9zX29yX2Z1dHVyZXM6CisgICAgICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBvdXRlci5zZXRfcmVzdWx0KFtdKQorICAgICAgICByZXR1cm4gb3V0ZXIKKworICAgIGFyZ190b19mdXQgPSB7fQorICAgIGZvciBhcmcgaW4gc2V0KGNvcm9zX29yX2Z1dHVyZXMpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmcsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgICAgIGZ1dCA9IGFzeW5jKGFyZywgbG9vcD1sb29wKQorICAgICAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGxvb3AgPSBmdXQuX2xvb3AKKyAgICAgICAgICAgICMgVGhlIGNhbGxlciBjYW5ub3QgY29udHJvbCB0aGlzIGZ1dHVyZSwgdGhlICJkZXN0cm95IHBlbmRpbmcgdGFzayIKKyAgICAgICAgICAgICMgd2FybmluZyBzaG91bGQgbm90IGJlIGVtaXR0ZWQuCisgICAgICAgICAgICBmdXQuX2xvZ19kZXN0cm95X3BlbmRpbmcgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0ID0gYXJnCisgICAgICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9vcCA9IGZ1dC5fbG9vcAorICAgICAgICAgICAgZWxpZiBmdXQuX2xvb3AgaXMgbm90IGxvb3A6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZnV0dXJlcyBhcmUgdGllZCB0byBkaWZmZXJlbnQgZXZlbnQgbG9vcHMiKQorICAgICAgICBhcmdfdG9fZnV0W2FyZ10gPSBmdXQKKworICAgIGNoaWxkcmVuID0gW2FyZ190b19mdXRbYXJnXSBmb3IgYXJnIGluIGNvcm9zX29yX2Z1dHVyZXNdCisgICAgbmNoaWxkcmVuID0gbGVuKGNoaWxkcmVuKQorICAgIG91dGVyID0gX0dhdGhlcmluZ0Z1dHVyZShjaGlsZHJlbiwgbG9vcD1sb29wKQorICAgIG5maW5pc2hlZCA9IDAKKyAgICByZXN1bHRzID0gW05vbmVdICogbmNoaWxkcmVuCisKKyAgICBkZWYgX2RvbmVfY2FsbGJhY2soaSwgZnV0KToKKyAgICAgICAgbm9ubG9jYWwgbmZpbmlzaGVkCisgICAgICAgIGlmIG91dGVyLl9zdGF0ZSAhPSBmdXR1cmVzLl9QRU5ESU5HOgorICAgICAgICAgICAgaWYgZnV0Ll9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBNYXJrIGV4Y2VwdGlvbiByZXRyaWV2ZWQuCisgICAgICAgICAgICAgICAgZnV0LmV4Y2VwdGlvbigpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZnV0Ll9zdGF0ZSA9PSBmdXR1cmVzLl9DQU5DRUxMRUQ6CisgICAgICAgICAgICByZXMgPSBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKCkKKyAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiBmdXQuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlcyA9IGZ1dC5leGNlcHRpb24oKSAgIyBNYXJrIGV4Y2VwdGlvbiByZXRyaWV2ZWQuCisgICAgICAgICAgICBpZiBub3QgcmV0dXJuX2V4Y2VwdGlvbnM6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X2V4Y2VwdGlvbihyZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXMgPSBmdXQuX3Jlc3VsdAorICAgICAgICByZXN1bHRzW2ldID0gcmVzCisgICAgICAgIG5maW5pc2hlZCArPSAxCisgICAgICAgIGlmIG5maW5pc2hlZCA9PSBuY2hpbGRyZW46CisgICAgICAgICAgICBvdXRlci5zZXRfcmVzdWx0KHJlc3VsdHMpCisKKyAgICBmb3IgaSwgZnV0IGluIGVudW1lcmF0ZShjaGlsZHJlbik6CisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhmdW5jdG9vbHMucGFydGlhbChfZG9uZV9jYWxsYmFjaywgaSkpCisgICAgcmV0dXJuIG91dGVyCisKKworZGVmIHNoaWVsZChhcmcsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV2FpdCBmb3IgYSBmdXR1cmUsIHNoaWVsZGluZyBpdCBmcm9tIGNhbmNlbGxhdGlvbi4KKworICAgIFRoZSBzdGF0ZW1lbnQKKworICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKworICAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50CisKKyAgICAgICAgcmVzID0geWllbGQgZnJvbSBzb21ldGhpbmcoKQorCisgICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUKKyAgICB0YXNrIHJ1bm5pbmcgaW4gc29tZXRoaW5nKCkgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIFBPViBvZgorICAgIHNvbWV0aGluZygpLCB0aGUgY2FuY2VsbGF0aW9uIGRpZCBub3QgaGFwcGVuLiAgQnV0IGl0cyBjYWxsZXIgaXMKKyAgICBzdGlsbCBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICAgQ2FuY2VsbGVkRXJyb3IuICBOb3RlOiBJZiBzb21ldGhpbmcoKSBpcyBjYW5jZWxsZWQgYnkgb3RoZXIgbWVhbnMKKyAgICB0aGlzIHdpbGwgc3RpbGwgY2FuY2VsIHNoaWVsZCgpLgorCisgICAgSWYgeW91IHdhbnQgdG8gY29tcGxldGVseSBpZ25vcmUgY2FuY2VsbGF0aW9uIChub3QgcmVjb21tZW5kZWQpCisgICAgeW91IGNhbiBjb21iaW5lIHNoaWVsZCgpIHdpdGggYSB0cnkvZXhjZXB0IGNsYXVzZSwgYXMgZm9sbG93czoKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKyAgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICIiIgorICAgIGlubmVyID0gYXN5bmMoYXJnLCBsb29wPWxvb3ApCisgICAgaWYgaW5uZXIuZG9uZSgpOgorICAgICAgICAjIFNob3J0Y3V0LgorICAgICAgICByZXR1cm4gaW5uZXIKKyAgICBsb29wID0gaW5uZXIuX2xvb3AKKyAgICBvdXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpbm5lcik6CisgICAgICAgIGlmIG91dGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgIyBNYXJrIGlubmVyJ3MgcmVzdWx0IGFzIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlubmVyLmNhbmNlbGxlZCgpIG9yIGlubmVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaW5uZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBvdXRlci5jYW5jZWwoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhjID0gaW5uZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X3Jlc3VsdChpbm5lci5yZXN1bHQoKSkKKworICAgIGlubmVyLmFkZF9kb25lX2NhbGxiYWNrKF9kb25lX2NhbGxiYWNrKQorICAgIHJldHVybiBvdXRlcgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weSBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3NjgwZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKQEAgLTAsMCArMSw0MjUgQEAKKyIiIlV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMuIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc29ja2V0c2VydmVyCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgSFRUUFNlcnZlcgorZnJvbSB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIgaW1wb3J0IFdTR0lSZXF1ZXN0SGFuZGxlciwgV1NHSVNlcnZlcgorCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworZnJvbSAuIGltcG9ydCB0YXNrcworZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgY29yb3V0aW5lCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgZnJvbSAud2luZG93c191dGlscyBpbXBvcnQgc29ja2V0cGFpcgorZWxzZToKKyAgICBmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0cGFpciAgIyBwcmFnbWE6IG5vIGNvdmVyCisKKworZGVmIGR1bW15X3NzbF9jb250ZXh0KCk6CisgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisKKworZGVmIHJ1bl9icmllZmx5KGxvb3ApOgorICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgb25jZSgpOgorICAgICAgICBwYXNzCisgICAgZ2VuID0gb25jZSgpCisgICAgdCA9IGxvb3AuY3JlYXRlX3Rhc2soZ2VuKQorICAgICMgRG9uJ3QgbG9nIGEgd2FybmluZyBpZiB0aGUgdGFzayBpcyBub3QgZG9uZSBhZnRlciBydW5fdW50aWxfY29tcGxldGUoKS4KKyAgICAjIEl0IG9jY3VycyBpZiB0aGUgbG9vcCBpcyBzdG9wcGVkIG9yIGlmIGEgdGFzayByYWlzZXMgYSBCYXNlRXhjZXB0aW9uLgorICAgIHQuX2xvZ19kZXN0cm95X3BlbmRpbmcgPSBGYWxzZQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICBmaW5hbGx5OgorICAgICAgICBnZW4uY2xvc2UoKQorCisKK2RlZiBydW5fdW50aWwobG9vcCwgcHJlZCwgdGltZW91dD0zMCk6CisgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKKyAgICB3aGlsZSBub3QgcHJlZCgpOgorICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBmdXR1cmVzLlRpbWVvdXRFcnJvcigpCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLnNsZWVwKDAuMDAxLCBsb29wPWxvb3ApKQorCisKK2RlZiBydW5fb25jZShsb29wKToKKyAgICAiIiJsb29wLnN0b3AoKSBzY2hlZHVsZXMgX3JhaXNlX3N0b3BfZXJyb3IoKQorICAgIGFuZCBydW5fZm9yZXZlcigpIHJ1bnMgdW50aWwgX3JhaXNlX3N0b3BfZXJyb3IoKSBjYWxsYmFjay4KKyAgICB0aGlzIHdvbnQgd29yayBpZiB0ZXN0IHdhaXRzIGZvciBzb21lIElPIGV2ZW50cywgYmVjYXVzZQorICAgIF9yYWlzZV9zdG9wX2Vycm9yKCkgcnVucyBiZWZvcmUgYW55IG9mIGlvIGV2ZW50cyBjYWxsYmFja3MuCisgICAgIiIiCisgICAgbG9vcC5zdG9wKCkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKworCitjbGFzcyBTaWxlbnRXU0dJUmVxdWVzdEhhbmRsZXIoV1NHSVJlcXVlc3RIYW5kbGVyKToKKworICAgIGRlZiBnZXRfc3RkZXJyKHNlbGYpOgorICAgICAgICByZXR1cm4gaW8uU3RyaW5nSU8oKQorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgU2lsZW50V1NHSVNlcnZlcihXU0dJU2VydmVyKToKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgU1NMV1NHSVNlcnZlck1peGluOgorCisgICAgZGVmIGZpbmlzaF9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgIyBUaGUgcmVsYXRpdmUgbG9jYXRpb24gb2Ygb3VyIHRlc3QgZGlyZWN0b3J5ICh3aGljaAorICAgICAgICAjIGNvbnRhaW5zIHRoZSBzc2wga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlcykgZGlmZmVycworICAgICAgICAjIGJldHdlZW4gdGhlIHN0ZGxpYiBhbmQgc3RhbmQtYWxvbmUgYXN5bmNpby4KKyAgICAgICAgIyBQcmVmZXIgb3VyIG93biBpZiB3ZSBjYW4gZmluZCBpdC4KKyAgICAgICAgaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAndGVzdHMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihoZXJlKToKKyAgICAgICAgICAgIGhlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QnLCAndGVzdF9hc3luY2lvJykKKyAgICAgICAga2V5ZmlsZSA9IG9zLnBhdGguam9pbihoZXJlLCAnc3NsX2tleS5wZW0nKQorICAgICAgICBjZXJ0ZmlsZSA9IG9zLnBhdGguam9pbihoZXJlLCAnc3NsX2NlcnQucGVtJykKKyAgICAgICAgc3NvY2sgPSBzc2wud3JhcF9zb2NrZXQocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5SZXF1ZXN0SGFuZGxlckNsYXNzKHNzb2NrLCBjbGllbnRfYWRkcmVzcywgc2VsZikKKyAgICAgICAgICAgIHNzb2NrLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAjIG1heWJlIHNvY2tldCBoYXMgYmVlbiBjbG9zZWQgYnkgcGVlcgorICAgICAgICAgICAgcGFzcworCisKK2NsYXNzIFNTTFdTR0lTZXJ2ZXIoU1NMV1NHSVNlcnZlck1peGluLCBTaWxlbnRXU0dJU2VydmVyKToKKyAgICBwYXNzCisKKworZGVmIF9ydW5fdGVzdF9zZXJ2ZXIoKiwgYWRkcmVzcywgdXNlX3NzbD1GYWxzZSwgc2VydmVyX2Nscywgc2VydmVyX3NzbF9jbHMpOgorCisgICAgZGVmIGFwcChlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6CisgICAgICAgIHN0YXR1cyA9ICcyMDAgT0snCisgICAgICAgIGhlYWRlcnMgPSBbKCdDb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbicpXQorICAgICAgICBzdGFydF9yZXNwb25zZShzdGF0dXMsIGhlYWRlcnMpCisgICAgICAgIHJldHVybiBbYidUZXN0IG1lc3NhZ2UnXQorCisgICAgIyBSdW4gdGhlIHRlc3QgV1NHSSBzZXJ2ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgaW4gb3JkZXIgbm90IHRvCisgICAgIyBpbnRlcmZlcmUgd2l0aCBldmVudCBoYW5kbGluZyBpbiB0aGUgbWFpbiB0aHJlYWQKKyAgICBzZXJ2ZXJfY2xhc3MgPSBzZXJ2ZXJfc3NsX2NscyBpZiB1c2Vfc3NsIGVsc2Ugc2VydmVyX2NscworICAgIGh0dHBkID0gc2VydmVyX2NsYXNzKGFkZHJlc3MsIFNpbGVudFdTR0lSZXF1ZXN0SGFuZGxlcikKKyAgICBodHRwZC5zZXRfYXBwKGFwcCkKKyAgICBodHRwZC5hZGRyZXNzID0gaHR0cGQuc2VydmVyX2FkZHJlc3MKKyAgICBzZXJ2ZXJfdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aHR0cGQuc2VydmVfZm9yZXZlcikKKyAgICBzZXJ2ZXJfdGhyZWFkLnN0YXJ0KCkKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGh0dHBkCisgICAgZmluYWxseToKKyAgICAgICAgaHR0cGQuc2h1dGRvd24oKQorICAgICAgICBodHRwZC5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICBzZXJ2ZXJfdGhyZWFkLmpvaW4oKQorCisKK2lmIGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpOgorCisgICAgY2xhc3MgVW5peEhUVFBTZXJ2ZXIoc29ja2V0c2VydmVyLlVuaXhTdHJlYW1TZXJ2ZXIsIEhUVFBTZXJ2ZXIpOgorCisgICAgICAgIGRlZiBzZXJ2ZXJfYmluZChzZWxmKToKKyAgICAgICAgICAgIHNvY2tldHNlcnZlci5Vbml4U3RyZWFtU2VydmVyLnNlcnZlcl9iaW5kKHNlbGYpCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9uYW1lID0gJzEyNy4wLjAuMScKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3BvcnQgPSA4MAorCisKKyAgICBjbGFzcyBVbml4V1NHSVNlcnZlcihVbml4SFRUUFNlcnZlciwgV1NHSVNlcnZlcik6CisKKyAgICAgICAgZGVmIHNlcnZlcl9iaW5kKHNlbGYpOgorICAgICAgICAgICAgVW5peEhUVFBTZXJ2ZXIuc2VydmVyX2JpbmQoc2VsZikKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfZW52aXJvbigpCisKKyAgICAgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAgICAgcmVxdWVzdCwgY2xpZW50X2FkZHIgPSBzdXBlcigpLmdldF9yZXF1ZXN0KCkKKyAgICAgICAgICAgICMgQ29kZSBpbiB0aGUgc3RkbGliIGV4cGVjdHMgdGhhdCBnZXRfcmVxdWVzdAorICAgICAgICAgICAgIyB3aWxsIHJldHVybiBhIHNvY2tldCBhbmQgYSB0dXBsZSAoaG9zdCwgcG9ydCkuCisgICAgICAgICAgICAjIEhvd2V2ZXIsIHRoaXMgaXNuJ3QgdHJ1ZSBmb3IgVU5JWCBzb2NrZXRzLAorICAgICAgICAgICAgIyBhcyB0aGUgc2Vjb25kIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEgcGF0aDsKKyAgICAgICAgICAgICMgaGVuY2Ugd2UgcmV0dXJuIHNvbWUgZmFrZSBkYXRhIHN1ZmZpY2llbnQKKyAgICAgICAgICAgICMgdG8gZ2V0IHRoZSB0ZXN0cyBnb2luZworICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QsICgnMTI3LjAuMC4xJywgJycpCisKKworICAgIGNsYXNzIFNpbGVudFVuaXhXU0dJU2VydmVyKFVuaXhXU0dJU2VydmVyKToKKworICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgICAgIHBhc3MKKworCisgICAgY2xhc3MgVW5peFNTTFdTR0lTZXJ2ZXIoU1NMV1NHSVNlcnZlck1peGluLCBTaWxlbnRVbml4V1NHSVNlcnZlcik6CisgICAgICAgIHBhc3MKKworCisgICAgZGVmIGdlbl91bml4X3NvY2tldF9wYXRoKCk6CisgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZmlsZToKKyAgICAgICAgICAgIHJldHVybiBmaWxlLm5hbWUKKworCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgdW5peF9zb2NrZXRfcGF0aCgpOgorICAgICAgICBwYXRoID0gZ2VuX3VuaXhfc29ja2V0X3BhdGgoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBwYXRoCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHBhdGgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHJ1bl90ZXN0X3VuaXhfc2VydmVyKCosIHVzZV9zc2w9RmFsc2UpOgorICAgICAgICB3aXRoIHVuaXhfc29ja2V0X3BhdGgoKSBhcyBwYXRoOgorICAgICAgICAgICAgeWllbGQgZnJvbSBfcnVuX3Rlc3Rfc2VydmVyKGFkZHJlc3M9cGF0aCwgdXNlX3NzbD11c2Vfc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9jbHM9U2lsZW50VW5peFdTR0lTZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NzbF9jbHM9VW5peFNTTFdTR0lTZXJ2ZXIpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBydW5fdGVzdF9zZXJ2ZXIoKiwgaG9zdD0nMTI3LjAuMC4xJywgcG9ydD0wLCB1c2Vfc3NsPUZhbHNlKToKKyAgICB5aWVsZCBmcm9tIF9ydW5fdGVzdF9zZXJ2ZXIoYWRkcmVzcz0oaG9zdCwgcG9ydCksIHVzZV9zc2w9dXNlX3NzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2Nscz1TaWxlbnRXU0dJU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc3NsX2Nscz1TU0xXU0dJU2VydmVyKQorCisKK2RlZiBtYWtlX3Rlc3RfcHJvdG9jb2woYmFzZSk6CisgICAgZGN0ID0ge30KKyAgICBmb3IgbmFtZSBpbiBkaXIoYmFzZSk6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnX18nKSBhbmQgbmFtZS5lbmRzd2l0aCgnX18nKToKKyAgICAgICAgICAgICMgc2tpcCBtYWdpYyBuYW1lcworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZGN0W25hbWVdID0gTW9ja0NhbGxiYWNrKHJldHVybl92YWx1ZT1Ob25lKQorICAgIHJldHVybiB0eXBlKCdUZXN0UHJvdG9jb2wnLCAoYmFzZSwpICsgYmFzZS5fX2Jhc2VzX18sIGRjdCkoKQorCisKK2NsYXNzIFRlc3RTZWxlY3RvcihzZWxlY3RvcnMuQmFzZVNlbGVjdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5rZXlzID0ge30KKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleShmaWxlb2JqLCAwLCBldmVudHMsIGRhdGEpCisgICAgICAgIHNlbGYua2V5c1tmaWxlb2JqXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cy5wb3AoZmlsZW9iaikKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dCk6CisgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIGdldF9tYXAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtleXMKKworCitjbGFzcyBUZXN0TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKyAgICAiIiJMb29wIGZvciB1bml0dGVzdHMuCisKKyAgICBJdCBtYW5hZ2VzIHNlbGYgdGltZSBkaXJlY3RseS4KKyAgICBJZiBzb21ldGhpbmcgc2NoZWR1bGVkIHRvIGJlIGV4ZWN1dGVkIGxhdGVyIHRoZW4KKyAgICBvbiBuZXh0IGxvb3AgaXRlcmF0aW9uIGFmdGVyIGFsbCByZWFkeSBoYW5kbGVycyBkb25lCisgICAgZ2VuZXJhdG9yIHBhc3NlZCB0byBfX2luaXRfXyBpcyBjYWxsaW5nLgorCisgICAgR2VuZXJhdG9yIHNob3VsZCBiZSBsaWtlIHRoaXM6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICB3aGVuID0geWllbGQgLi4uCisgICAgICAgICAgICAuLi4gPSB5aWVsZCB0aW1lX2FkdmFuY2UKKworICAgIFZhbHVlIHJldHVybmVkIGJ5IHlpZWxkIGlzIGFic29sdXRlIHRpbWUgb2YgbmV4dCBzY2hlZHVsZWQgaGFuZGxlci4KKyAgICBWYWx1ZSBwYXNzZWQgdG8geWllbGQgaXMgdGltZSBhZHZhbmNlIHRvIG1vdmUgbG9vcCdzIHRpbWUgZm9yd2FyZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW49Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorCisgICAgICAgIGlmIGdlbiBpcyBOb25lOgorICAgICAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBzZWxmLl9jaGVja19vbl9jbG9zZSA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jaGVja19vbl9jbG9zZSA9IFRydWUKKworICAgICAgICBzZWxmLl9nZW4gPSBnZW4oKQorICAgICAgICBuZXh0KHNlbGYuX2dlbikKKyAgICAgICAgc2VsZi5fdGltZSA9IDAKKyAgICAgICAgc2VsZi5fY2xvY2tfcmVzb2x1dGlvbiA9IDFlLTkKKyAgICAgICAgc2VsZi5fdGltZXJzID0gW10KKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBUZXN0U2VsZWN0b3IoKQorCisgICAgICAgIHNlbGYucmVhZGVycyA9IHt9CisgICAgICAgIHNlbGYud3JpdGVycyA9IHt9CisgICAgICAgIHNlbGYucmVzZXRfY291bnRlcnMoKQorCisgICAgZGVmIHRpbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aW1lCisKKyAgICBkZWYgYWR2YW5jZV90aW1lKHNlbGYsIGFkdmFuY2UpOgorICAgICAgICAiIiJNb3ZlIHRlc3QgdGltZSBmb3J3YXJkLiIiIgorICAgICAgICBpZiBhZHZhbmNlOgorICAgICAgICAgICAgc2VsZi5fdGltZSArPSBhZHZhbmNlCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2NoZWNrX29uX2Nsb3NlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2dlbi5zZW5kKDApCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRpbWUgZ2VuZXJhdG9yIGlzIG5vdCBmaW5pc2hlZCIpCisKKyAgICBkZWYgYWRkX3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi5yZWFkZXJzW2ZkXSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLnJlYWRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi5yZWFkZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLnJlYWRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLnJlYWRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi53cml0ZXJzW2ZkXSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLndyaXRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi53cml0ZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLndyaXRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLndyaXRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgcmVzZXRfY291bnRlcnMoc2VsZik6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyX2NvdW50ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQorCisgICAgZGVmIF9ydW5fb25jZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fcnVuX29uY2UoKQorICAgICAgICBmb3Igd2hlbiBpbiBzZWxmLl90aW1lcnM6CisgICAgICAgICAgICBhZHZhbmNlID0gc2VsZi5fZ2VuLnNlbmQod2hlbikKKyAgICAgICAgICAgIHNlbGYuYWR2YW5jZV90aW1lKGFkdmFuY2UpCisgICAgICAgIHNlbGYuX3RpbWVycyA9IFtdCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLl90aW1lcnMuYXBwZW5kKHdoZW4pCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbGxfYXQod2hlbiwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHBhc3MKKworCitkZWYgTW9ja0NhbGxiYWNrKCoqa3dhcmdzKToKKyAgICByZXR1cm4gbW9jay5Nb2NrKHNwZWM9WydfX2NhbGxfXyddLCAqKmt3YXJncykKKworCitjbGFzcyBNb2NrUGF0dGVybihzdHIpOgorICAgICIiIkEgcmVnZXggYmFzZWQgc3RyIHdpdGggYSBmdXp6eSBfX2VxX18uCisKKyAgICBVc2UgdGhpcyBoZWxwZXIgd2l0aCAnbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgnLCBvciBhbnl3aGVyZQorICAgIHdoZXJlIGEgcmVnZXggY29tcGFyaXNvbiBiZXR3ZWVuIHN0cmluZ3MgaXMgbmVlZGVkLgorCisgICAgRm9yIGluc3RhbmNlOgorICAgICAgIG1vY2tfY2FsbC5hc3NlcnRfY2FsbGVkX3dpdGgoTW9ja1BhdHRlcm4oJ3NwYW0uKmhhbScpKQorICAgICIiIgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gYm9vbChyZS5zZWFyY2goc3RyKHNlbGYpLCBvdGhlciwgcmUuUykpCisKKworZGVmIGdldF9mdW5jdGlvbl9zb3VyY2UoZnVuYyk6CisgICAgc291cmNlID0gZXZlbnRzLl9nZXRfZnVuY3Rpb25fc291cmNlKGZ1bmMpCisgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuYWJsZSB0byBnZXQgdGhlIHNvdXJjZSBvZiAlciIgJSAoZnVuYywpKQorICAgIHJldHVybiBzb3VyY2UKKworCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3AsICosIGNsZWFudXA9VHJ1ZSk6CisgICAgICAgIGFzc2VydCBsb29wIGlzIG5vdCBOb25lCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGV2ZW50IGxvb3AgaXMgcGFzc2VkIGV4cGxpY2l0bHkgaW4gYXN5bmNpbworICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgaWYgY2xlYW51cDoKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgZGVmIG5ld190ZXN0X2xvb3Aoc2VsZiwgZ2VuPU5vbmUpOgorICAgICAgICBsb29wID0gVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHJldHVybiBsb29wCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgZGlzYWJsZV9sb2dnZXIoKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gZGlzYWJsZSBhc3luY2lvIGxvZ2dlci4KKworICAgIEZvciBleGFtcGxlLCBpdCBjYW4gYmUgdXNlZCB0byBpZ25vcmUgd2FybmluZ3MgaW4gZGVidWcgbW9kZS4KKyAgICAiIiIKKyAgICBvbGRfbGV2ZWwgPSBsb2dnZXIubGV2ZWwKKyAgICB0cnk6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkNSSVRJQ0FMKzEpCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKG9sZF9sZXZlbCkKKworZGVmIG1vY2tfbm9uYmxvY2tpbmdfc29ja2V0KCk6CisgICAgIiIiQ3JlYXRlIGEgbW9jayBvZiBhIG5vbi1ibG9ja2luZyBzb2NrZXQuIiIiCisgICAgc29jayA9IG1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgIHNvY2suZ2V0dGltZW91dC5yZXR1cm5fdmFsdWUgPSAwLjAKKyAgICByZXR1cm4gc29jawpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdHJhbnNwb3J0cy5weSBiL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhZjg1MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkKQEAgLTAsMCArMSwyOTggQEAKKyIiIkFic3RyYWN0IFRyYW5zcG9ydCBjbGFzcy4iIiIKKworaW1wb3J0IHN5cworCitfUFkzNCA9IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDQpCisKK19fYWxsX18gPSBbJ0Jhc2VUcmFuc3BvcnQnLCAnUmVhZFRyYW5zcG9ydCcsICdXcml0ZVRyYW5zcG9ydCcsCisgICAgICAgICAgICdUcmFuc3BvcnQnLCAnRGF0YWdyYW1UcmFuc3BvcnQnLCAnU3VicHJvY2Vzc1RyYW5zcG9ydCcsCisgICAgICAgICAgIF0KKworCitjbGFzcyBCYXNlVHJhbnNwb3J0OgorICAgICIiIkJhc2UgY2xhc3MgZm9yIHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0cmE9Tm9uZSk6CisgICAgICAgIGlmIGV4dHJhIGlzIE5vbmU6CisgICAgICAgICAgICBleHRyYSA9IHt9CisgICAgICAgIHNlbGYuX2V4dHJhID0gZXh0cmEKKworICAgIGRlZiBnZXRfZXh0cmFfaW5mbyhzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJHZXQgb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZXh0cmEuZ2V0KG5hbWUsIGRlZmF1bHQpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGZsdXNoZWQgYXN5bmNocm9ub3VzbHkuICBObyBtb3JlIGRhdGEKKyAgICAgICAgd2lsbCBiZSByZWNlaXZlZC4gIEFmdGVyIGFsbCBidWZmZXJlZCBkYXRhIGlzIGZsdXNoZWQsIHRoZQorICAgICAgICBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBjYWxsZWQKKyAgICAgICAgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBSZWFkVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorICAgICIiIkludGVyZmFjZSBmb3IgcmVhZC1vbmx5IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiUGF1c2UgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgTm8gZGF0YSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgcHJvdG9jb2wncyBkYXRhX3JlY2VpdmVkKCkKKyAgICAgICAgbWV0aG9kIHVudGlsIHJlc3VtZV9yZWFkaW5nKCkgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXN1bWUgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgRGF0YSByZWNlaXZlZCB3aWxsIG9uY2UgYWdhaW4gYmUgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCdzCisgICAgICAgIGRhdGFfcmVjZWl2ZWQoKSBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgV3JpdGVUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciB3cml0ZS1vbmx5IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgICIiIlNldCB0aGUgaGlnaC0gYW5kIGxvdy13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4KKworICAgICAgICBUaGVzZSB0d28gdmFsdWVzIGNvbnRyb2wgd2hlbiB0byBjYWxsIHRoZSBwcm90b2NvbCdzCisgICAgICAgIHBhdXNlX3dyaXRpbmcoKSBhbmQgcmVzdW1lX3dyaXRpbmcoKSBtZXRob2RzLiAgSWYgc3BlY2lmaWVkLAorICAgICAgICB0aGUgbG93LXdhdGVyIGxpbWl0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciB2YWx1ZSBjYW4gYmUgbmVnYXRpdmUuCisKKyAgICAgICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICAgICAgIGhpZ2gtd2F0ZXIgbGltaXQgaXMgZ2l2ZW4sIHRoZSBsb3ctd2F0ZXIgbGltaXQgZGVmYXVsdHMgdG8gYQorICAgICAgICBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICAgIGhpZ2gtd2F0ZXIgbGltaXQuICBTZXR0aW5nIGhpZ2ggdG8gemVybyBmb3JjZXMgbG93IHRvIHplcm8gYXMKKyAgICAgICAgd2VsbCwgYW5kIGNhdXNlcyBwYXVzZV93cml0aW5nKCkgdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZQorICAgICAgICBidWZmZXIgYmVjb21lcyBub24tZW1wdHkuICBTZXR0aW5nIGxvdyB0byB6ZXJvIGNhdXNlcworICAgICAgICByZXN1bWVfd3JpdGluZygpIHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgICAgVXNlIG9mIHplcm8gZm9yIGVpdGhlciBsaW1pdCBpcyBnZW5lcmFsbHkgc3ViLW9wdGltYWwgYXMgaXQKKyAgICAgICAgcmVkdWNlcyBvcHBvcnR1bml0aWVzIGZvciBkb2luZyBJL08gYW5kIGNvbXB1dGF0aW9uCisgICAgICAgIGNvbmN1cnJlbnRseS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgY3VycmVudCBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiV3JpdGUgc29tZSBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhpcyBkb2VzIG5vdCBibG9jazsgaXQgYnVmZmVycyB0aGUgZGF0YSBhbmQgYXJyYW5nZXMgZm9yIGl0CisgICAgICAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHdyaXRlbGluZXMoc2VsZiwgbGlzdF9vZl9kYXRhKToKKyAgICAgICAgIiIiV3JpdGUgYSBsaXN0IChvciBhbnkgaXRlcmFibGUpIG9mIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKworICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjb25jYXRlbmF0ZXMgdGhlIGFyZ3VtZW50cyBhbmQKKyAgICAgICAgY2FsbHMgd3JpdGUoKSBvbiB0aGUgcmVzdWx0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IF9QWTM0OgorICAgICAgICAgICAgIyBJbiBQeXRob24gMy4zLCBieXRlcy5qb2luKCkgZG9lc24ndCBoYW5kbGUgbWVtb3J5dmlldy4KKyAgICAgICAgICAgIGxpc3Rfb2ZfZGF0YSA9ICgKKyAgICAgICAgICAgICAgICBieXRlcyhkYXRhKSBpZiBpc2luc3RhbmNlKGRhdGEsIG1lbW9yeXZpZXcpIGVsc2UgZGF0YQorICAgICAgICAgICAgICAgIGZvciBkYXRhIGluIGxpc3Rfb2ZfZGF0YSkKKyAgICAgICAgc2VsZi53cml0ZShiJycuam9pbihsaXN0X29mX2RhdGEpKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHdyaXRlIGVuZCBhZnRlciBmbHVzaGluZyBidWZmZXJlZCBkYXRhLgorCisgICAgICAgIChUaGlzIGlzIGxpa2UgdHlwaW5nIF5EIGludG8gYSBVTklYIHByb2dyYW0gcmVhZGluZyBmcm9tIHN0ZGluLikKKworICAgICAgICBEYXRhIG1heSBzdGlsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGlzIHRyYW5zcG9ydCBzdXBwb3J0cyB3cml0ZV9lb2YoKSwgRmFsc2UgaWYgbm90LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgVGhlIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGJlCisgICAgICAgIGNhbGxlZCB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFRyYW5zcG9ydChSZWFkVHJhbnNwb3J0LCBXcml0ZVRyYW5zcG9ydCk6CisgICAgIiIiSW50ZXJmYWNlIHJlcHJlc2VudGluZyBhIGJpZGlyZWN0aW9uYWwgdHJhbnNwb3J0LgorCisgICAgVGhlcmUgbWF5IGJlIHNldmVyYWwgaW1wbGVtZW50YXRpb25zLCBidXQgdHlwaWNhbGx5LCB0aGUgdXNlciBkb2VzCisgICAgbm90IGltcGxlbWVudCBuZXcgdHJhbnNwb3J0czsgcmF0aGVyLCB0aGUgcGxhdGZvcm0gcHJvdmlkZXMgc29tZQorICAgIHVzZWZ1bCB0cmFuc3BvcnRzIHRoYXQgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIGJlc3QKKyAgICBwcmFjdGljZXMuCisKKyAgICBUaGUgdXNlciBuZXZlciBpbnN0YW50aWF0ZXMgYSB0cmFuc3BvcnQgZGlyZWN0bHk7IHRoZXkgY2FsbCBhCisgICAgdXRpbGl0eSBmdW5jdGlvbiwgcGFzc2luZyBpdCBhIHByb3RvY29sIGZhY3RvcnkgYW5kIG90aGVyCisgICAgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGFuZCBwcm90b2NvbC4gIChFLmcuCisgICAgRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKCkgb3IgRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKS4pCisKKyAgICBUaGUgdXRpbGl0eSBmdW5jdGlvbiB3aWxsIGFzeW5jaHJvbm91c2x5IGNyZWF0ZSBhIHRyYW5zcG9ydCBhbmQgYQorICAgIHByb3RvY29sIGFuZCBob29rIHRoZW0gdXAgYnkgY2FsbGluZyB0aGUgcHJvdG9jb2wncworICAgIGNvbm5lY3Rpb25fbWFkZSgpIG1ldGhvZCwgcGFzc2luZyBpdCB0aGUgdHJhbnNwb3J0LgorCisgICAgVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgcmFpc2VzIE5vdEltcGxlbWVudGVkIGZvciBldmVyeSBtZXRob2QKKyAgICBleGNlcHQgd3JpdGVsaW5lcygpLCB3aGljaCBjYWxscyB3cml0ZSgpIGluIGEgbG9vcC4KKyAgICAiIiIKKworCitjbGFzcyBEYXRhZ3JhbVRyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIGRhdGFncmFtIChVRFApIHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgc2VuZHRvKHNlbGYsIGRhdGEsIGFkZHI9Tm9uZSk6CisgICAgICAgICIiIlNlbmQgZGF0YSB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgYWRkciBpcyB0YXJnZXQgc29ja2V0IGFkZHJlc3MuCisgICAgICAgIElmIGFkZHIgaXMgTm9uZSB1c2UgdGFyZ2V0IGFkZHJlc3MgcG9pbnRlZCBvbiB0cmFuc3BvcnQgY3JlYXRpb24uCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgVGhlIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGJlCisgICAgICAgIGNhbGxlZCB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFN1YnByb2Nlc3NUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisKKyAgICBkZWYgZ2V0X3BpZChzZWxmKToKKyAgICAgICAgIiIiR2V0IHN1YnByb2Nlc3MgaWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgIiIiR2V0IHN1YnByb2Nlc3MgcmV0dXJuY29kZS4KKworICAgICAgICBTZWUgYWxzbworICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4ucmV0dXJuY29kZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9waXBlX3RyYW5zcG9ydChzZWxmLCBmZCk6CisgICAgICAgICIiIkdldCB0cmFuc3BvcnQgZm9yIHBpcGUgd2l0aCBudW1iZXIgZmQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWduYWwpOgorICAgICAgICAiIiJTZW5kIHNpZ25hbCB0byBzdWJwcm9jZXNzLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBkb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgc3VicHJvY2Vzcy4KKworICAgICAgICBBbGlhcyBmb3IgY2xvc2UoKSBtZXRob2QuCisKKyAgICAgICAgT24gUG9zaXggT1NzIHRoZSBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgICAgT24gV2luZG93cyB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uIFRlcm1pbmF0ZVByb2Nlc3MoKQorICAgICAgICAgaXMgY2FsbGVkIHRvIHN0b3AgdGhlIHN1YnByb2Nlc3MuCisKKyAgICAgICAgU2VlIGFsc286CisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBraWxsKHNlbGYpOgorICAgICAgICAiIiJLaWxsIHRoZSBzdWJwcm9jZXNzLgorCisgICAgICAgIE9uIFBvc2l4IE9TcyB0aGUgZnVuY3Rpb24gc2VuZHMgU0lHS0lMTCB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgICAgT24gV2luZG93cyBraWxsKCkgaXMgYW4gYWxpYXMgZm9yIHRlcm1pbmF0ZSgpLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4ua2lsbAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9GbG93Q29udHJvbE1peGluKFRyYW5zcG9ydCk6CisgICAgIiIiQWxsIHRoZSBsb2dpYyBmb3IgKHdyaXRlKSBmbG93IGNvbnRyb2wgaW4gYSBtaXgtaW4gYmFzZSBjbGFzcy4KKworICAgIFRoZSBzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKS4gIEl0IG11c3QgY2FsbAorICAgIF9tYXliZV9wYXVzZV9wcm90b2NvbCgpIHdoZW5ldmVyIHRoZSB3cml0ZSBidWZmZXIgc2l6ZSBpbmNyZWFzZXMsCisgICAgYW5kIF9tYXliZV9yZXN1bWVfcHJvdG9jb2woKSB3aGVuZXZlciBpdCBkZWNyZWFzZXMuICBJdCBtYXkgYWxzbworICAgIG92ZXJyaWRlIHNldF93cml0ZV9idWZmZXJfbGltaXRzKCkgKGUuZy4gdG8gc3BlY2lmeSBkaWZmZXJlbnQKKyAgICBkZWZhdWx0cykuCisKKyAgICBUaGUgc3ViY2xhc3MgY29uc3RydWN0b3IgbXVzdCBjYWxsIHN1cGVyKCkuX19pbml0X18oZXh0cmEpLiAgVGhpcworICAgIHdpbGwgY2FsbCBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpLgorCisgICAgVGhlIHVzZXIgbWF5IGNhbGwgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKSBhbmQKKyAgICBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgYW5kIHRoZWlyIHByb3RvY29sJ3MgcGF1c2Vfd3JpdGluZygpIGFuZAorICAgIHJlc3VtZV93cml0aW5nKCkgbWF5IGJlIGNhbGxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKQorCisgICAgZGVmIF9tYXliZV9wYXVzZV9wcm90b2NvbChzZWxmKToKKyAgICAgICAgc2l6ZSA9IHNlbGYuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKyAgICAgICAgaWYgc2l6ZSA8PSBzZWxmLl9oaWdoX3dhdGVyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm90b2NvbF9wYXVzZWQ6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wucGF1c2Vfd3JpdGluZygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdwcm90b2NvbC5wYXVzZV93cml0aW5nKCkgZmFpbGVkJywKKyAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IHNlbGYsCisgICAgICAgICAgICAgICAgICAgICdwcm90b2NvbCc6IHNlbGYuX3Byb3RvY29sLAorICAgICAgICAgICAgICAgIH0pCisKKyAgICBkZWYgX21heWJlX3Jlc3VtZV9wcm90b2NvbChzZWxmKToKKyAgICAgICAgaWYgKHNlbGYuX3Byb3RvY29sX3BhdXNlZCBhbmQKKyAgICAgICAgICAgIHNlbGYuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkgPD0gc2VsZi5fbG93X3dhdGVyKToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wucmVzdW1lX3dyaXRpbmcoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAncHJvdG9jb2wucmVzdW1lX3dyaXRpbmcoKSBmYWlsZWQnLAorICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAndHJhbnNwb3J0Jzogc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZi5fcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgfSkKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9sb3dfd2F0ZXIsIHNlbGYuX2hpZ2hfd2F0ZXIpCisKKyAgICBkZWYgX3NldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYsIGhpZ2g9Tm9uZSwgbG93PU5vbmUpOgorICAgICAgICBpZiBoaWdoIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBsb3cgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBoaWdoID0gNjQqMTAyNAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoaWdoID0gNCpsb3cKKyAgICAgICAgaWYgbG93IGlzIE5vbmU6CisgICAgICAgICAgICBsb3cgPSBoaWdoIC8vIDQKKyAgICAgICAgaWYgbm90IGhpZ2ggPj0gbG93ID49IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdoaWdoICglcikgbXVzdCBiZSA+PSBsb3cgKCVyKSBtdXN0IGJlID49IDAnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZ2gsIGxvdykpCisgICAgICAgIHNlbGYuX2hpZ2hfd2F0ZXIgPSBoaWdoCisgICAgICAgIHNlbGYuX2xvd193YXRlciA9IGxvdworCisgICAgZGVmIHNldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYsIGhpZ2g9Tm9uZSwgbG93PU5vbmUpOgorICAgICAgICBzZWxmLl9zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhoaWdoPWhpZ2gsIGxvdz1sb3cpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3VuaXhfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczMTBjZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3VuaXhfZXZlbnRzLnB5CkBAIC0wLDAgKzEsOTIyIEBACisiIiJTZWxlY3RvciBldmVudCBsb29wIGZvciBVbml4IHdpdGggc2lnbmFsIGhhbmRsaW5nLiIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBmY250bAoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RhdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBjb25zdGFudHMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgY29yb3V0aW5lCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK19fYWxsX18gPSBbJ1NlbGVjdG9yRXZlbnRMb29wJywKKyAgICAgICAgICAgJ0Fic3RyYWN0Q2hpbGRXYXRjaGVyJywgJ1NhZmVDaGlsZFdhdGNoZXInLAorICAgICAgICAgICAnRmFzdENoaWxkV2F0Y2hlcicsICdEZWZhdWx0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgXQorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHJhaXNlIEltcG9ydEVycm9yKCdTaWduYWxzIGFyZSBub3QgcmVhbGx5IHN1cHBvcnRlZCBvbiBXaW5kb3dzJykKKworCitkZWYgX3NpZ2hhbmRsZXJfbm9vcChzaWdudW0sIGZyYW1lKToKKyAgICAiIiJEdW1teSBzaWduYWwgaGFuZGxlci4iIiIKKyAgICBwYXNzCisKKworY2xhc3MgX1VuaXhTZWxlY3RvckV2ZW50TG9vcChzZWxlY3Rvcl9ldmVudHMuQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKyAgICAiIiJVbml4IGV2ZW50IGxvb3AuCisKKyAgICBBZGRzIHNpZ25hbCBoYW5kbGluZyBhbmQgVU5JWCBEb21haW4gU29ja2V0IHN1cHBvcnQgdG8gU2VsZWN0b3JFdmVudExvb3AuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VsZWN0b3I9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oc2VsZWN0b3IpCisgICAgICAgIHNlbGYuX3NpZ25hbF9oYW5kbGVycyA9IHt9CisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJldHVybiBzb2NrZXQuc29ja2V0cGFpcigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorICAgICAgICBmb3Igc2lnIGluIGxpc3Qoc2VsZi5fc2lnbmFsX2hhbmRsZXJzKToKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZykKKworICAgIGRlZiBfcHJvY2Vzc19zZWxmX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGZvciBzaWdudW0gaW4gZGF0YToKKyAgICAgICAgICAgIGlmIG5vdCBzaWdudW06CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgbnVsbCBieXRlcyB3cml0dGVuIGJ5IF93cml0ZV90b19zZWxmKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5faGFuZGxlX3NpZ25hbChzaWdudW0pCisKKyAgICBkZWYgYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZywgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQWRkIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuICBVTklYIG9ubHkuCisKKyAgICAgICAgUmFpc2UgVmFsdWVFcnJvciBpZiB0aGUgc2lnbmFsIG51bWJlciBpcyBpbnZhbGlkIG9yIHVuY2F0Y2hhYmxlLgorICAgICAgICBSYWlzZSBSdW50aW1lRXJyb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHNldHRpbmcgdXAgdGhlIGhhbmRsZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja19zaWduYWwoc2lnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHNldF93YWtldXBfZmQoKSByYWlzZXMgVmFsdWVFcnJvciBpZiB0aGlzIGlzIG5vdCB0aGUKKyAgICAgICAgICAgICMgbWFpbiB0aHJlYWQuICBCeSBjYWxsaW5nIGl0IGVhcmx5IHdlIGVuc3VyZSB0aGF0IGFuCisgICAgICAgICAgICAjIGV2ZW50IGxvb3AgcnVubmluZyBpbiBhbm90aGVyIHRocmVhZCBjYW5ub3QgYWRkIGEgc2lnbmFsCisgICAgICAgICAgICAjIGhhbmRsZXIuCisgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZChzZWxmLl9jc29jay5maWxlbm8oKSkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZikKKyAgICAgICAgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10gPSBoYW5kbGUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFJlZ2lzdGVyIGEgZHVtbXkgc2lnbmFsIGhhbmRsZXIgdG8gYXNrIFB5dGhvbiB0byB3cml0ZSB0aGUgc2lnbmFsCisgICAgICAgICAgICAjIG51bWJlciBpbiB0aGUgd2FrdXAgZmlsZSBkZXNjcmlwdG9yLiBfcHJvY2Vzc19zZWxmX2RhdGEoKSB3aWxsCisgICAgICAgICAgICAjIHJlYWQgc2lnbmFsIG51bWJlcnMgZnJvbSB0aGlzIGZpbGUgZGVzY3JpcHRvciB0byBoYW5kbGUgc2lnbmFscy4KKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnLCBfc2lnaGFuZGxlcl9ub29wKQorCisgICAgICAgICAgICAjIFNldCBTQV9SRVNUQVJUIHRvIGxpbWl0IEVJTlRSIG9jY3VycmVuY2VzLgorICAgICAgICAgICAgc2lnbmFsLnNpZ2ludGVycnVwdChzaWcsIEZhbHNlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBkZWwgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9zaWduYWxfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCgtMSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpIGFzIG5leGM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdzZXRfd2FrZXVwX2ZkKC0xKSBmYWlsZWQ6ICVzJywgbmV4YykKKworICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NpZyB7fSBjYW5ub3QgYmUgY2F1Z2h0Jy5mb3JtYXQoc2lnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfaGFuZGxlX3NpZ25hbChzZWxmLCBzaWcpOgorICAgICAgICAiIiJJbnRlcm5hbCBoZWxwZXIgdGhhdCBpcyB0aGUgYWN0dWFsIHNpZ25hbCBoYW5kbGVyLiIiIgorICAgICAgICBoYW5kbGUgPSBzZWxmLl9zaWduYWxfaGFuZGxlcnMuZ2V0KHNpZykKKyAgICAgICAgaWYgaGFuZGxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gICMgQXNzdW1lIGl0J3Mgc29tZSByYWNlIGNvbmRpdGlvbi4KKyAgICAgICAgaWYgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWcpICAjIFJlbW92ZSBpdCBwcm9wZXJseS4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFja19zaWduYWxzYWZlKGhhbmRsZSkKKworICAgIGRlZiByZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuICBVTklYIG9ubHkuCisKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgYSBzaWduYWwgaGFuZGxlciB3YXMgcmVtb3ZlZCwgRmFsc2UgaWYgbm90LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfc2lnbmFsKHNpZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX3NpZ25hbF9oYW5kbGVyc1tzaWddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNpZyA9PSBzaWduYWwuU0lHSU5UOgorICAgICAgICAgICAgaGFuZGxlciA9IHNpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoYW5kbGVyID0gc2lnbmFsLlNJR19ERkwKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZywgaGFuZGxlcikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NpZyB7fSBjYW5ub3QgYmUgY2F1Z2h0Jy5mb3JtYXQoc2lnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbmFsX2hhbmRsZXJzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKC0xKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3NldF93YWtldXBfZmQoLTEpIGZhaWxlZDogJXMnLCBleGMpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfY2hlY2tfc2lnbmFsKHNlbGYsIHNpZyk6CisgICAgICAgICIiIkludGVybmFsIGhlbHBlciB0byB2YWxpZGF0ZSBhIHNpZ25hbC4KKworICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICAgICAgIFJhaXNlIFJ1bnRpbWVFcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNpZywgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc2lnIG11c3QgYmUgYW4gaW50LCBub3QgeyFyfScuZm9ybWF0KHNpZykpCisKKyAgICAgICAgaWYgbm90ICgxIDw9IHNpZyA8IHNpZ25hbC5OU0lHKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ3NpZyB7fSBvdXQgb2YgcmFuZ2UoMSwge30pJy5mb3JtYXQoc2lnLCBzaWduYWwuTlNJRykpCisKKyAgICBkZWYgX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfVW5peFdyaXRlUGlwZVRyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBldmVudHMuZ2V0X2NoaWxkX3dhdGNoZXIoKSBhcyB3YXRjaGVyOgorICAgICAgICAgICAgdHJhbnNwID0gX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9ZXh0cmEsICoqa3dhcmdzKQorICAgICAgICAgICAgeWllbGQgZnJvbSB0cmFuc3AuX3Bvc3RfaW5pdCgpCisgICAgICAgICAgICB3YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKHRyYW5zcC5nZXRfcGlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NoaWxkX3dhdGNoZXJfY2FsbGJhY2ssIHRyYW5zcCkKKworICAgICAgICByZXR1cm4gdHJhbnNwCisKKyAgICBkZWYgX2NoaWxkX3dhdGNoZXJfY2FsbGJhY2soc2VsZiwgcGlkLCByZXR1cm5jb2RlLCB0cmFuc3ApOgorICAgICAgICBzZWxmLmNhbGxfc29vbl90aHJlYWRzYWZlKHRyYW5zcC5fcHJvY2Vzc19leGl0ZWQsIHJldHVybmNvZGUpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGF0aCwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IHNlcnZlcl9ob3N0bmFtZSBpcyBOb25lIG9yIGlzaW5zdGFuY2Uoc2VydmVyX2hvc3RuYW1lLCBzdHIpCisgICAgICAgIGlmIHNzbDoKKyAgICAgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICd5b3UgaGF2ZSB0byBwYXNzIHNlcnZlcl9ob3N0bmFtZSB3aGVuIHVzaW5nIHNzbCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2VydmVyX2hvc3RuYW1lIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aXRoIHNzbCcpCisKKyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ3BhdGggYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0sIDApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuc29ja19jb25uZWN0KHNvY2ssIHBhdGgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc29jayBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25vIHBhdGggYW5kIHNvY2sgd2VyZSBzcGVjaWZpZWQnKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKworICAgICAgICB0cmFuc3BvcnQsIHByb3RvY29sID0geWllbGQgZnJvbSBzZWxmLl9jcmVhdGVfY29ubmVjdGlvbl90cmFuc3BvcnQoCisgICAgICAgICAgICBzb2NrLCBwcm90b2NvbF9mYWN0b3J5LCBzc2wsIHNlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX3VuaXhfc2VydmVyKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBhdGg9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2s9Tm9uZSwgYmFja2xvZz0xMDAsIHNzbD1Ob25lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzc2wgYXJndW1lbnQgbXVzdCBiZSBhbiBTU0xDb250ZXh0IG9yIE5vbmUnKQorCisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdwYXRoIGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc29jay5iaW5kKHBhdGgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CisgICAgICAgICAgICAgICAgICAgICMgTGV0J3MgaW1wcm92ZSB0aGUgZXJyb3IgbWVzc2FnZSBieSBhZGRpbmcKKyAgICAgICAgICAgICAgICAgICAgIyB3aXRoIHdoYXQgZXhhY3QgYWRkcmVzcyBpdCBvY2N1cnMuCisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICdBZGRyZXNzIHshcn0gaXMgYWxyZWFkeSBpbiB1c2UnLmZvcm1hdChwYXRoKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVBRERSSU5VU0UsIG1zZykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc29jayBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdwYXRoIHdhcyBub3Qgc3BlY2lmaWVkLCBhbmQgbm8gc29jayBzcGVjaWZpZWQnKQorCisgICAgICAgICAgICBpZiBzb2NrLmZhbWlseSAhPSBzb2NrZXQuQUZfVU5JWDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnQSBVTklYIERvbWFpbiBTb2NrZXQgd2FzIGV4cGVjdGVkLCBnb3QgeyFyfScuZm9ybWF0KHNvY2spKQorCisgICAgICAgIHNlcnZlciA9IGJhc2VfZXZlbnRzLlNlcnZlcihzZWxmLCBbc29ja10pCisgICAgICAgIHNvY2subGlzdGVuKGJhY2tsb2cpCisgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZpbmcocHJvdG9jb2xfZmFjdG9yeSwgc29jaywgc3NsLCBzZXJ2ZXIpCisgICAgICAgIHJldHVybiBzZXJ2ZXIKKworCitpZiBoYXNhdHRyKG9zLCAnc2V0X2Jsb2NraW5nJyk6CisgICAgZGVmIF9zZXRfbm9uYmxvY2tpbmcoZmQpOgorICAgICAgICBvcy5zZXRfYmxvY2tpbmcoZmQsIEZhbHNlKQorZWxzZToKKyAgICBkZWYgX3NldF9ub25ibG9ja2luZyhmZCk6CisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZsYWdzID0gZmxhZ3MgfCBvcy5PX05PTkJMT0NLCisgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbGFncykKKworCitjbGFzcyBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuUmVhZFRyYW5zcG9ydCk6CisKKyAgICBtYXhfc2l6ZSA9IDI1NiAqIDEwMjQgICMgbWF4IGJ5dGVzIHdlIHJlYWQgaW4gb25lIGV2ZW50IGxvb3AgaXRlcmF0aW9uCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHBpcGUKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fcGlwZSA9IHBpcGUKKyAgICAgICAgc2VsZi5fZmlsZW5vID0gcGlwZS5maWxlbm8oKQorICAgICAgICBtb2RlID0gb3MuZnN0YXQoc2VsZi5fZmlsZW5vKS5zdF9tb2RlCisgICAgICAgIGlmIG5vdCAoc3RhdC5TX0lTRklGTyhtb2RlKSBvcgorICAgICAgICAgICAgICAgIHN0YXQuU19JU1NPQ0sobW9kZSkgb3IKKyAgICAgICAgICAgICAgICBzdGF0LlNfSVNDSFIobW9kZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGlwZSB0cmFuc3BvcnQgaXMgZm9yIHBpcGVzL3NvY2tldHMgb25seS4iKQorICAgICAgICBfc2V0X25vbmJsb2NraW5nKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIHdhaXQgdW50aWwgcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuX3NldF9yZXN1bHRfdW5sZXNzX2NhbmNlbGxlZCwgTm9uZSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaW5mbyA9IFtzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJ2ZkPSVzJyAlIHNlbGYuX2ZpbGVub10KKyAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBvbGxpbmcgPSBzZWxlY3Rvcl9ldmVudHMuX3Rlc3Rfc2VsZWN0b3JfZXZlbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuX3NlbGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbm8sIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgaWYgcG9sbGluZzoKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgncG9sbGluZycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdpZGxlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoc2VsZi5fZmlsZW5vLCBzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIlciB3YXMgY2xvc2VkIGJ5IHBlZXIiLCBzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBzZWxmLl9jbG9zZShOb25lKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMsIG1lc3NhZ2U9J0ZhdGFsIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0Jyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGlmIChpc2luc3RhbmNlKGV4YywgT1NFcnJvcikgYW5kIGV4Yy5lcnJubyA9PSBlcnJuby5FSU8pOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiAlcyIsIHNlbGYsIG1lc3NhZ2UsIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLAorICAgICAgICAgICAgICAgICdwcm90b2NvbCc6IHNlbGYuX3Byb3RvY29sLAorICAgICAgICAgICAgfSkKKyAgICAgICAgc2VsZi5fY2xvc2UoZXhjKQorCisgICAgZGVmIF9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIF9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLldyaXRlVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gcGlwZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9waXBlID0gcGlwZQorICAgICAgICBzZWxmLl9maWxlbm8gPSBwaXBlLmZpbGVubygpCisgICAgICAgIG1vZGUgPSBvcy5mc3RhdChzZWxmLl9maWxlbm8pLnN0X21vZGUKKyAgICAgICAgaXNfc29ja2V0ID0gc3RhdC5TX0lTU09DSyhtb2RlKQorICAgICAgICBpZiBub3QgKGlzX3NvY2tldCBvcgorICAgICAgICAgICAgICAgIHN0YXQuU19JU0ZJRk8obW9kZSkgb3IKKyAgICAgICAgICAgICAgICBzdGF0LlNfSVNDSFIobW9kZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGlwZSB0cmFuc3BvcnQgaXMgb25seSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlwZXMsIHNvY2tldHMgYW5kIGNoYXJhY3RlciBkZXZpY2VzIikKKyAgICAgICAgX3NldF9ub25ibG9ja2luZyhzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBvciB3cml0ZV9lb2YoKSBjYWxsZWQuCisKKyAgICAgICAgIyBPbiBBSVgsIHRoZSByZWFkZXIgdHJpY2sgb25seSB3b3JrcyBmb3Igc29ja2V0cy4KKyAgICAgICAgIyBPbiBvdGhlciBwbGF0Zm9ybXMgaXQgd29ya3MgZm9yIHBpcGVzIGFuZCBzb2NrZXRzLgorICAgICAgICAjIChFeGNlcHRpb246IE9TIFggMTAuND8gIElzc3VlICMxOTI5NC4pCisgICAgICAgIGlmIGlzX3NvY2tldCBvciBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgd2FpdCB1bnRpbCBwcm90b2NvbC5jb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLCBOb25lKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnZmQ9JXMnICUgc2VsZi5fZmlsZW5vXQorICAgICAgICBpZiBzZWxmLl9waXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcG9sbGluZyA9IHNlbGVjdG9yX2V2ZW50cy5fdGVzdF9zZWxlY3Rvcl9ldmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5fc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVubywgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgaWYgcG9sbGluZzoKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgncG9sbGluZycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdpZGxlJykKKworICAgICAgICAgICAgYnVmc2l6ZSA9IHNlbGYuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdidWZzaXplPSVzJyAlIGJ1ZnNpemUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2VkJykKKyAgICAgICAgcmV0dXJuICc8JXM+JyAlICcgJy5qb2luKGluZm8pCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc3VtKGxlbihkYXRhKSBmb3IgZGF0YSBpbiBzZWxmLl9idWZmZXIpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgICMgUGlwZSB3YXMgY2xvc2VkIGJ5IHBlZXIuCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiJXIgd2FzIGNsb3NlZCBieSBwZWVyIiwgc2VsZikKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fY2xvc2UoQnJva2VuUGlwZUVycm9yKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jbG9zZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSksIHJlcHIoZGF0YSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBieXRlYXJyYXkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Qgb3Igc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdwaXBlIGNsb3NlZCBieSBwZWVyIG9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3Mud3JpdGUocGlwZSwgZGF0YSkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIEF0dGVtcHQgdG8gc2VuZCBpdCByaWdodCBhd2F5IGZpcnN0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBvcy53cml0ZShzZWxmLl9maWxlbm8sIGRhdGEpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbiA9PSBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgX3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBhc3NlcnQgZGF0YSwgJ0RhdGEgc2hvdWxkIG5vdCBiZSBlbXB0eScKKworICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gb3Mud3JpdGUoc2VsZi5fZmlsZW5vLCBkYXRhKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgICMgUmVtb3ZlIHdyaXRlciBoZXJlLCBfZmF0YWxfZXJyb3IoKSBkb2Vzbid0IGl0CisgICAgICAgICAgICAjIGJlY2F1c2UgX2J1ZmZlciBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCB3cml0ZSBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXIgYW5kIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpICAjIFRyeSBhZ2FpbiBsYXRlci4KKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBUT0RPOiBNYWtlIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gd3JpdGVfZW9mKCksIGNsb3NlKCksCisgICAgIyBhYm9ydCgpLCBfZmF0YWxfZXJyb3IoKSBhbmQgX2Nsb3NlKCkgbW9yZSBzdHJhaWdodGZvcndhcmQuCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBzZWxmLl9waXBlCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgIyB3cml0ZV9lb2YgaXMgYWxsIHdoYXQgd2UgbmVlZGVkIHRvIGNsb3NlIHRoZSB3cml0ZSBwaXBlCisgICAgICAgICAgICBzZWxmLndyaXRlX2VvZigpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2Nsb3NlKE5vbmUpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4YywgbWVzc2FnZT0nRmF0YWwgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKToKKyAgICAgICAgIyBzaG91bGQgYmUgY2FsbGVkIGJ5IGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSk6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6ICVzIiwgc2VsZiwgbWVzc2FnZSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IHNlbGYsCisgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZi5fcHJvdG9jb2wsCisgICAgICAgICAgICB9KQorICAgICAgICBzZWxmLl9jbG9zZShleGMpCisKKyAgICBkZWYgX2Nsb3NlKHNlbGYsIGV4Yz1Ob25lKToKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIGV4YykKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworCitjbGFzcyBfVW5peFN1YnByb2Nlc3NUcmFuc3BvcnQoYmFzZV9zdWJwcm9jZXNzLkJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0KToKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgYXJncywgc2hlbGwsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpOgorICAgICAgICBzdGRpbl93ID0gTm9uZQorICAgICAgICBpZiBzdGRpbiA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICAjIFVzZSBhIHNvY2tldCBwYWlyIGZvciBzdGRpbiwgc2luY2Ugbm90IGFsbCBwbGF0Zm9ybXMKKyAgICAgICAgICAgICMgc3VwcG9ydCBzZWxlY3RpbmcgcmVhZCBldmVudHMgb24gdGhlIHdyaXRlIGVuZCBvZiBhCisgICAgICAgICAgICAjIHNvY2tldCAod2hpY2ggd2UgdXNlIGluIG9yZGVyIHRvIGRldGVjdCBjbG9zaW5nIG9mIHRoZQorICAgICAgICAgICAgIyBvdGhlciBlbmQpLiAgTm90YWJseSB0aGlzIGlzIG5lZWRlZCBvbiBBSVgsIGFuZCB3b3JrcworICAgICAgICAgICAgIyBqdXN0IGZpbmUgb24gb3RoZXIgcGxhdGZvcm1zLgorICAgICAgICAgICAgc3RkaW4sIHN0ZGluX3cgPSBzZWxmLl9sb29wLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5fcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICBhcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsCisgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIGJ1ZnNpemU9YnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIGlmIHN0ZGluX3cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGRpbi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gb3BlbihzdGRpbl93LmRldGFjaCgpLCAnd2InLCBidWZmZXJpbmc9YnVmc2l6ZSkKKworCitjbGFzcyBBYnN0cmFjdENoaWxkV2F0Y2hlcjoKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBtb25pdG9yaW5nIGNoaWxkIHByb2Nlc3Nlcy4KKworICAgIE9iamVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgY2xhc3MgbW9uaXRvciBhIGNvbGxlY3Rpb24gb2Ygc3VicHJvY2Vzc2VzIGFuZAorICAgIHJlcG9ydCB0aGVpciB0ZXJtaW5hdGlvbiBvciBpbnRlcnJ1cHRpb24gYnkgYSBzaWduYWwuCisKKyAgICBOZXcgY2FsbGJhY2tzIGFyZSByZWdpc3RlcmVkIHdpdGggLmFkZF9jaGlsZF9oYW5kbGVyKCkuIFN0YXJ0aW5nIGEgbmV3CisgICAgcHJvY2VzcyBtdXN0IGJlIGRvbmUgd2l0aGluIGEgJ3dpdGgnIGJsb2NrIHRvIGFsbG93IHRoZSB3YXRjaGVyIHRvIHN1c3BlbmQKKyAgICBpdHMgYWN0aXZpdHkgdW50aWwgdGhlIG5ldyBwcm9jZXNzIGlmIGZ1bGx5IHJlZ2lzdGVyZWQgKHRoaXMgaXMgbmVlZGVkIHRvCisgICAgcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIHNvbWUgaW1wbGVtZW50YXRpb25zKS4KKworICAgIEV4YW1wbGU6CisgICAgICAgIHdpdGggd2F0Y2hlcjoKKyAgICAgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKCJzbGVlcCAxIikKKyAgICAgICAgICAgIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIocHJvYy5waWQsIGNhbGxiYWNrKQorCisgICAgTm90ZXM6CisgICAgICAgIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGNsYXNzIG11c3QgYmUgdGhyZWFkLXNhZmUuCisKKyAgICAgICAgU2luY2UgY2hpbGQgd2F0Y2hlciBvYmplY3RzIG1heSBjYXRjaCB0aGUgU0lHQ0hMRCBzaWduYWwgYW5kIGNhbGwKKyAgICAgICAgd2FpdHBpZCgtMSksIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBhY3RpdmUgb2JqZWN0IHBlciBwcm9jZXNzLgorICAgICIiIgorCisgICAgZGVmIGFkZF9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBuZXcgY2hpbGQgaGFuZGxlci4KKworICAgICAgICBBcnJhbmdlIGZvciBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKSB0byBiZSBjYWxsZWQgd2hlbgorICAgICAgICBwcm9jZXNzICdwaWQnIHRlcm1pbmF0ZXMuIFNwZWNpZnlpbmcgYW5vdGhlciBjYWxsYmFjayBmb3IgdGhlIHNhbWUKKyAgICAgICAgcHJvY2VzcyByZXBsYWNlcyB0aGUgcHJldmlvdXMgaGFuZGxlci4KKworICAgICAgICBOb3RlOiBjYWxsYmFjaygpIG11c3QgYmUgdGhyZWFkLXNhZmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiByZW1vdmVfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQpOgorICAgICAgICAiIiJSZW1vdmVzIHRoZSBoYW5kbGVyIGZvciBwcm9jZXNzICdwaWQnLgorCisgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIFRydWUgaWYgdGhlIGhhbmRsZXIgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLAorICAgICAgICBGYWxzZSBpZiB0aGVyZSB3YXMgbm90aGluZyB0byByZW1vdmUuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgYXR0YWNoX2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgICIiIkF0dGFjaCB0aGUgd2F0Y2hlciB0byBhbiBldmVudCBsb29wLgorCisgICAgICAgIElmIHRoZSB3YXRjaGVyIHdhcyBwcmV2aW91c2x5IGF0dGFjaGVkIHRvIGFuIGV2ZW50IGxvb3AsIHRoZW4gaXQgaXMKKyAgICAgICAgZmlyc3QgZGV0YWNoZWQgYmVmb3JlIGF0dGFjaGluZyB0byB0aGUgbmV3IGxvb3AuCisKKyAgICAgICAgTm90ZTogbG9vcCBtYXkgYmUgTm9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgd2F0Y2hlci4KKworICAgICAgICBUaGlzIG11c3QgYmUgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSB1bmRlcmx5aW5nIHJlc291cmNlIGlzIGZyZWVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAiIiJFbnRlciB0aGUgd2F0Y2hlcidzIGNvbnRleHQgYW5kIGFsbG93IHN0YXJ0aW5nIG5ldyBwcm9jZXNzZXMKKworICAgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHNlbGYiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgICIiIkV4aXQgdGhlIHdhdGNoZXIncyBjb250ZXh0IiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisKK2NsYXNzIEJhc2VDaGlsZFdhdGNoZXIoQWJzdHJhY3RDaGlsZFdhdGNoZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmF0dGFjaF9sb29wKE5vbmUpCisKKyAgICBkZWYgX2RvX3dhaXRwaWQoc2VsZiwgZXhwZWN0ZWRfcGlkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgX2RvX3dhaXRwaWRfYWxsKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBhdHRhY2hfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgYXNzZXJ0IGxvb3AgaXMgTm9uZSBvciBpc2luc3RhbmNlKGxvb3AsIGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcCkKKworICAgICAgICBpZiBzZWxmLl9sb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0NITEQpCisKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdDSExELCBzZWxmLl9zaWdfY2hsZCkKKworICAgICAgICAgICAgIyBQcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gY2FzZSBhIGNoaWxkIHRlcm1pbmF0ZWQKKyAgICAgICAgICAgICMgZHVyaW5nIHRoZSBzd2l0Y2guCisgICAgICAgICAgICBzZWxmLl9kb193YWl0cGlkX2FsbCgpCisKKyAgICBkZWYgX3NpZ19jaGxkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9kb193YWl0cGlkX2FsbCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgIyBzZWxmLl9sb29wIHNob3VsZCBhbHdheXMgYmUgYXZhaWxhYmxlIGhlcmUKKyAgICAgICAgICAgICMgYXMgJ19zaWdfY2hsZCcgaXMgYWRkZWQgYXMgYSBzaWduYWwgaGFuZGxlcgorICAgICAgICAgICAgIyBpbiAnYXR0YWNoX2xvb3AnCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ1Vua25vd24gZXhjZXB0aW9uIGluIFNJR0NITEQgaGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgIH0pCisKKyAgICBkZWYgX2NvbXB1dGVfcmV0dXJuY29kZShzZWxmLCBzdGF0dXMpOgorICAgICAgICBpZiBvcy5XSUZTSUdOQUxFRChzdGF0dXMpOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBkaWVkIGJlY2F1c2Ugb2YgYSBzaWduYWwuCisgICAgICAgICAgICByZXR1cm4gLW9zLldURVJNU0lHKHN0YXR1cykKKyAgICAgICAgZWxpZiBvcy5XSUZFWElURUQoc3RhdHVzKToKKyAgICAgICAgICAgICMgVGhlIGNoaWxkIHByb2Nlc3MgZXhpdGVkIChlLmcgc3lzLmV4aXQoKSkuCisgICAgICAgICAgICByZXR1cm4gb3MuV0VYSVRTVEFUVVMoc3RhdHVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgZXhpdGVkLCBidXQgd2UgZG9uJ3QgdW5kZXJzdGFuZCBpdHMgc3RhdHVzLgorICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLCBsZXQncyBqdXN0CisgICAgICAgICAgICAjIHJldHVybiB0aGF0IHN0YXR1czsgcGVyaGFwcyB0aGF0IGhlbHBzIGRlYnVnIGl0LgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cworCisKK2NsYXNzIFNhZmVDaGlsZFdhdGNoZXIoQmFzZUNoaWxkV2F0Y2hlcik6CisgICAgIiIiJ1NhZmUnIGNoaWxkIHdhdGNoZXIgaW1wbGVtZW50YXRpb24uCisKKyAgICBUaGlzIGltcGxlbWVudGF0aW9uIGF2b2lkcyBkaXNydXB0aW5nIG90aGVyIGNvZGUgc3Bhd25pbmcgcHJvY2Vzc2VzIGJ5CisgICAgcG9sbGluZyBleHBsaWNpdGx5IGVhY2ggcHJvY2VzcyBpbiB0aGUgU0lHQ0hMRCBoYW5kbGVyIGluc3RlYWQgb2YgY2FsbGluZworICAgIG9zLndhaXRwaWQoLTEpLgorCisgICAgVGhpcyBpcyBhIHNhZmUgc29sdXRpb24gYnV0IGl0IGhhcyBhIHNpZ25pZmljYW50IG92ZXJoZWFkIHdoZW4gaGFuZGxpbmcgYQorICAgIGJpZyBudW1iZXIgb2YgY2hpbGRyZW4gKE8obikgZWFjaCB0aW1lIFNJR0NITEQgaXMgcmFpc2VkKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0ge30KKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzLmNsZWFyKCkKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3NbcGlkXSA9IGNhbGxiYWNrLCBhcmdzCisKKyAgICAgICAgIyBQcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxyZWFkeSB0ZXJtaW5hdGVkLgorICAgICAgICBzZWxmLl9kb193YWl0cGlkKHBpZCkKKworICAgIGRlZiByZW1vdmVfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5fY2FsbGJhY2tzW3BpZF0KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9kb193YWl0cGlkX2FsbChzZWxmKToKKworICAgICAgICBmb3IgcGlkIGluIGxpc3Qoc2VsZi5fY2FsbGJhY2tzKToKKyAgICAgICAgICAgIHNlbGYuX2RvX3dhaXRwaWQocGlkKQorCisgICAgZGVmIF9kb193YWl0cGlkKHNlbGYsIGV4cGVjdGVkX3BpZCk6CisgICAgICAgIGFzc2VydCBleHBlY3RlZF9waWQgPiAwCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKGV4cGVjdGVkX3BpZCwgb3MuV05PSEFORykKKyAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBpcyBhbHJlYWR5IHJlYXBlZAorICAgICAgICAgICAgIyAobWF5IGhhcHBlbiBpZiB3YWl0cGlkKCkgaXMgY2FsbGVkIGVsc2V3aGVyZSkuCisgICAgICAgICAgICBwaWQgPSBleHBlY3RlZF9waWQKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSAyNTUKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgICAgICJVbmtub3duIGNoaWxkIHByb2Nlc3MgcGlkICVkLCB3aWxsIHJlcG9ydCByZXR1cm5jb2RlIDI1NSIsCisgICAgICAgICAgICAgICAgcGlkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZS4KKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX2NvbXB1dGVfcmV0dXJuY29kZShzdGF0dXMpCisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygncHJvY2VzcyAlcyBleGl0ZWQgd2l0aCByZXR1cm5jb2RlICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGlkLCByZXR1cm5jb2RlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhbGxiYWNrLCBhcmdzID0gc2VsZi5fY2FsbGJhY2tzLnBvcChwaWQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgIyBNYXkgaGFwcGVuIGlmIC5yZW1vdmVfY2hpbGRfaGFuZGxlcigpIGlzIGNhbGxlZAorICAgICAgICAgICAgIyBhZnRlciBvcy53YWl0cGlkKCkgcmV0dXJucy4KKyAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkNoaWxkIHdhdGNoZXIgZ290IGFuIHVuZXhwZWN0ZWQgcGlkOiAlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkLCBleGNfaW5mbz1UcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FsbGJhY2socGlkLCByZXR1cm5jb2RlLCAqYXJncykKKworCitjbGFzcyBGYXN0Q2hpbGRXYXRjaGVyKEJhc2VDaGlsZFdhdGNoZXIpOgorICAgICIiIidGYXN0JyBjaGlsZCB3YXRjaGVyIGltcGxlbWVudGF0aW9uLgorCisgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiByZWFwcyBldmVyeSB0ZXJtaW5hdGVkIHByb2Nlc3NlcyBieSBjYWxsaW5nCisgICAgb3Mud2FpdHBpZCgtMSkgZGlyZWN0bHksIHBvc3NpYmx5IGJyZWFraW5nIG90aGVyIGNvZGUgc3Bhd25pbmcgcHJvY2Vzc2VzCisgICAgYW5kIHdhaXRpbmcgZm9yIHRoZWlyIHRlcm1pbmF0aW9uLgorCisgICAgVGhlcmUgaXMgbm8gbm90aWNlYWJsZSBvdmVyaGVhZCB3aGVuIGhhbmRsaW5nIGEgYmlnIG51bWJlciBvZiBjaGlsZHJlbgorICAgIChPKDEpIGVhY2ggdGltZSBhIGNoaWxkIHRlcm1pbmF0ZXMpLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX2NhbGxiYWNrcyA9IHt9CisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX3pvbWJpZXMgPSB7fQorICAgICAgICBzZWxmLl9mb3JrcyA9IDAKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzLmNsZWFyKCkKKyAgICAgICAgc2VsZi5fem9tYmllcy5jbGVhcigpCisgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgc2VsZi5fZm9ya3MgKz0gMQorCisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9mb3JrcyAtPSAxCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZvcmtzIG9yIG5vdCBzZWxmLl96b21iaWVzOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBjb2xsYXRlcmFsX3ZpY3RpbXMgPSBzdHIoc2VsZi5fem9tYmllcykKKyAgICAgICAgICAgIHNlbGYuX3pvbWJpZXMuY2xlYXIoKQorCisgICAgICAgIGxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgIkNhdWdodCBzdWJwcm9jZXNzZXMgdGVybWluYXRpb24gZnJvbSB1bmtub3duIHBpZHM6ICVzIiwKKyAgICAgICAgICAgIGNvbGxhdGVyYWxfdmljdGltcykKKworICAgIGRlZiBhZGRfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBzZWxmLl9mb3JrcywgIk11c3QgdXNlIHRoZSBjb250ZXh0IG1hbmFnZXIiCisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fem9tYmllcy5wb3AocGlkKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICMgVGhlIGNoaWxkIGlzIHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2tzW3BpZF0gPSBjYWxsYmFjaywgYXJncworICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgVGhlIGNoaWxkIGlzIGRlYWQgYWxyZWFkeS4gV2UgY2FuIGZpcmUgdGhlIGNhbGxiYWNrLgorICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbcGlkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RvX3dhaXRwaWRfYWxsKHNlbGYpOgorICAgICAgICAjIEJlY2F1c2Ugb2Ygc2lnbmFsIGNvYWxlc2NpbmcsIHdlIG11c3Qga2VlcCBjYWxsaW5nIHdhaXRwaWQoKSBhcworICAgICAgICAjIGxvbmcgYXMgd2UncmUgYWJsZSB0byByZWFwIGEgY2hpbGQuCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKC0xLCBvcy5XTk9IQU5HKQorICAgICAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgICMgTm8gbW9yZSBjaGlsZCBwcm9jZXNzZXMgZXhpc3QuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICAjIEEgY2hpbGQgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fY29tcHV0ZV9yZXR1cm5jb2RlKHN0YXR1cykKKworICAgICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssIGFyZ3MgPSBzZWxmLl9jYWxsYmFja3MucG9wKHBpZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgdW5rbm93biBjaGlsZAorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9mb3JrczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSXQgbWF5IG5vdCBiZSByZWdpc3RlcmVkIHlldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3pvbWJpZXNbcGlkXSA9IHJldHVybmNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCd1bmtub3duIHByb2Nlc3MgJXMgZXhpdGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggcmV0dXJuY29kZSAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgcmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3Byb2Nlc3MgJXMgZXhpdGVkIHdpdGggcmV0dXJuY29kZSAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkLCByZXR1cm5jb2RlKQorCisgICAgICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAiQ2F1Z2h0IHN1YnByb2Nlc3MgdGVybWluYXRpb24gZnJvbSB1bmtub3duIHBpZDogIgorICAgICAgICAgICAgICAgICAgICAiJWQgLT4gJWQiLCBwaWQsIHJldHVybmNvZGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpCisKKworY2xhc3MgX1VuaXhEZWZhdWx0RXZlbnRMb29wUG9saWN5KGV2ZW50cy5CYXNlRGVmYXVsdEV2ZW50TG9vcFBvbGljeSk6CisgICAgIiIiWFhYIiIiCisgICAgX2xvb3BfZmFjdG9yeSA9IF9Vbml4U2VsZWN0b3JFdmVudExvb3AKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX3dhdGNoZXIgPSBOb25lCisKKyAgICBkZWYgX2luaXRfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgd2l0aCBldmVudHMuX2xvY2s6CisgICAgICAgICAgICBpZiBzZWxmLl93YXRjaGVyIGlzIE5vbmU6ICAjIHByYWdtYTogbm8gYnJhbmNoCisgICAgICAgICAgICAgICAgc2VsZi5fd2F0Y2hlciA9IFNhZmVDaGlsZFdhdGNoZXIoKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuX01haW5UaHJlYWQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYuX2xvY2FsLl9sb29wKQorCisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJTZXQgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgQXMgYSBzaWRlIGVmZmVjdCwgaWYgYSBjaGlsZCB3YXRjaGVyIHdhcyBzZXQgYmVmb3JlLCB0aGVuIGNhbGxpbmcKKyAgICAgICAgLnNldF9ldmVudF9sb29wKCkgZnJvbSB0aGUgbWFpbiB0aHJlYWQgd2lsbCBjYWxsIC5hdHRhY2hfbG9vcChsb29wKSBvbgorICAgICAgICB0aGUgY2hpbGQgd2F0Y2hlci4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc3VwZXIoKS5zZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICAgIGlmIHNlbGYuX3dhdGNoZXIgaXMgbm90IE5vbmUgYW5kIFwKKyAgICAgICAgICAgIGlzaW5zdGFuY2UodGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCksIHRocmVhZGluZy5fTWFpblRocmVhZCk6CisgICAgICAgICAgICBzZWxmLl93YXRjaGVyLmF0dGFjaF9sb29wKGxvb3ApCisKKyAgICBkZWYgZ2V0X2NoaWxkX3dhdGNoZXIoc2VsZik6CisgICAgICAgICIiIkdldCB0aGUgd2F0Y2hlciBmb3IgY2hpbGQgcHJvY2Vzc2VzLgorCisgICAgICAgIElmIG5vdCB5ZXQgc2V0LCBhIFNhZmVDaGlsZFdhdGNoZXIgb2JqZWN0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3dhdGNoZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2luaXRfd2F0Y2hlcigpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dhdGNoZXIKKworICAgIGRlZiBzZXRfY2hpbGRfd2F0Y2hlcihzZWxmLCB3YXRjaGVyKToKKyAgICAgICAgIiIiU2V0IHRoZSB3YXRjaGVyIGZvciBjaGlsZCBwcm9jZXNzZXMuIiIiCisKKyAgICAgICAgYXNzZXJ0IHdhdGNoZXIgaXMgTm9uZSBvciBpc2luc3RhbmNlKHdhdGNoZXIsIEFic3RyYWN0Q2hpbGRXYXRjaGVyKQorCisgICAgICAgIGlmIHNlbGYuX3dhdGNoZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YXRjaGVyLmNsb3NlKCkKKworICAgICAgICBzZWxmLl93YXRjaGVyID0gd2F0Y2hlcgorCitTZWxlY3RvckV2ZW50TG9vcCA9IF9Vbml4U2VsZWN0b3JFdmVudExvb3AKK0RlZmF1bHRFdmVudExvb3BQb2xpY3kgPSBfVW5peERlZmF1bHRFdmVudExvb3BQb2xpY3kKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3dpbmRvd3NfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2M2YwYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3dpbmRvd3NfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNjM0IEBACisiIiJTZWxlY3RvciBhbmQgcHJvYWN0b3IgZXZlbnQgbG9vcHMgZm9yIFdpbmRvd3MuIiIiCisKK2ltcG9ydCBfd2luYXBpCitpbXBvcnQgZXJybm8KK2ltcG9ydCBtYXRoCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0CitpbXBvcnQgd2Vha3JlZgorCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBiYXNlX3N1YnByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBwcm9hY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IHdpbmRvd3NfdXRpbHMKK2Zyb20gLiBpbXBvcnQgX292ZXJsYXBwZWQKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitfX2FsbF9fID0gWydTZWxlY3RvckV2ZW50TG9vcCcsICdQcm9hY3RvckV2ZW50TG9vcCcsICdJb2NwUHJvYWN0b3InLAorICAgICAgICAgICAnRGVmYXVsdEV2ZW50TG9vcFBvbGljeScsCisgICAgICAgICAgIF0KKworCitOVUxMID0gMAorSU5GSU5JVEUgPSAweGZmZmZmZmZmCitFUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQgPSAxMjI1CitFUlJPUl9DT05ORUNUSU9OX0FCT1JURUQgPSAxMjM2CisKKworY2xhc3MgX092ZXJsYXBwZWRGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIlN1YmNsYXNzIG9mIEZ1dHVyZSB3aGljaCByZXByZXNlbnRzIGFuIG92ZXJsYXBwZWQgb3BlcmF0aW9uLgorCisgICAgQ2FuY2VsbGluZyBpdCB3aWxsIGltbWVkaWF0ZWx5IGNhbmNlbCB0aGUgb3ZlcmxhcHBlZCBvcGVyYXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3YsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHNlbGYuX292ID0gb3YKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gc3VwZXIoKS5fcmVwcl9pbmZvKCkKKyAgICAgICAgaWYgc2VsZi5fb3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ZSA9ICdwZW5kaW5nJyBpZiBzZWxmLl9vdi5wZW5kaW5nIGVsc2UgJ2NvbXBsZXRlZCcKKyAgICAgICAgICAgIGluZm8uaW5zZXJ0KDEsICdvdmVybGFwcGVkPTwlcywgJSN4PicgJSAoc3RhdGUsIHNlbGYuX292LmFkZHJlc3MpKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF9jYW5jZWxfb3ZlcmxhcHBlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb3YgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9vdi5jYW5jZWwoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0NhbmNlbGxpbmcgYW4gb3ZlcmxhcHBlZCBmdXR1cmUgZmFpbGVkJywKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICdmdXR1cmUnOiBzZWxmLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dCkKKyAgICAgICAgc2VsZi5fb3YgPSBOb25lCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxfb3ZlcmxhcHBlZCgpCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbmNlbCgpCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbihzZWxmLCBleGNlcHRpb24pOgorICAgICAgICBzdXBlcigpLnNldF9leGNlcHRpb24oZXhjZXB0aW9uKQorICAgICAgICBzZWxmLl9jYW5jZWxfb3ZlcmxhcHBlZCgpCisKKyAgICBkZWYgc2V0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICBzdXBlcigpLnNldF9yZXN1bHQocmVzdWx0KQorICAgICAgICBzZWxmLl9vdiA9IE5vbmUKKworCitjbGFzcyBfV2FpdEhhbmRsZUZ1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiU3ViY2xhc3Mgb2YgRnV0dXJlIHdoaWNoIHJlcHJlc2VudHMgYSB3YWl0IGhhbmRsZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpb2NwLCBvdiwgaGFuZGxlLCB3YWl0X2hhbmRsZSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgc2VsZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgIyBpb2NwIGFuZCBvdiBhcmUgb25seSB1c2VkIGJ5IGNhbmNlbCgpIHRvIG5vdGlmeSBJb2NwUHJvYWN0b3IKKyAgICAgICAgIyB0aGF0IHRoZSB3YWl0IHdhcyBjYW5jZWxsZWQKKyAgICAgICAgc2VsZi5faW9jcCA9IGlvY3AKKyAgICAgICAgc2VsZi5fb3YgPSBvdgorICAgICAgICBzZWxmLl9oYW5kbGUgPSBoYW5kbGUKKyAgICAgICAgc2VsZi5fd2FpdF9oYW5kbGUgPSB3YWl0X2hhbmRsZQorCisgICAgZGVmIF9wb2xsKHNlbGYpOgorICAgICAgICAjIG5vbi1ibG9ja2luZyB3YWl0OiB1c2UgYSB0aW1lb3V0IG9mIDAgbWlsbGlzZWNvbmQKKyAgICAgICAgcmV0dXJuIChfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3Qoc2VsZi5faGFuZGxlLCAwKSA9PQorICAgICAgICAgICAgICAgIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gc3VwZXIoKS5fcmVwcl9pbmZvKCkKKyAgICAgICAgaW5mby5pbnNlcnQoMSwgJ2hhbmRsZT0lI3gnICUgc2VsZi5faGFuZGxlKQorICAgICAgICBpZiBzZWxmLl93YWl0X2hhbmRsZToKKyAgICAgICAgICAgIHN0YXRlID0gJ3NpZ25hbGVkJyBpZiBzZWxmLl9wb2xsKCkgZWxzZSAnd2FpdGluZycKKyAgICAgICAgICAgIGluZm8uaW5zZXJ0KDEsICd3YWl0X2hhbmRsZT08JXMsICUjeD4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZSwgc2VsZi5fd2FpdF9oYW5kbGUpKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF91bnJlZ2lzdGVyX3dhaXQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3dhaXRfaGFuZGxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuVW5yZWdpc3RlcldhaXQoc2VsZi5fd2FpdF9oYW5kbGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICMgRVJST1JfSU9fUEVORElORyBpcyBub3QgYW4gZXJyb3IsIHRoZSB3YWl0IHdhcyB1bnJlZ2lzdGVyZWQKKyAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciAhPSBfb3ZlcmxhcHBlZC5FUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0ZhaWxlZCB0byB1bnJlZ2lzdGVyIHRoZSB3YWl0IGhhbmRsZScsCisgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgICAgICdmdXR1cmUnOiBzZWxmLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisgICAgICAgIHNlbGYuX3dhaXRfaGFuZGxlID0gTm9uZQorICAgICAgICBzZWxmLl9pb2NwID0gTm9uZQorICAgICAgICBzZWxmLl9vdiA9IE5vbmUKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHN1cGVyKCkuY2FuY2VsKCkKKyAgICAgICAgaWYgc2VsZi5fb3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIHNpZ25hbCB0aGUgY2FuY2VsbGF0aW9uIHRvIHRoZSBvdmVybGFwcGVkIG9iamVjdAorICAgICAgICAgICAgX292ZXJsYXBwZWQuUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoc2VsZi5faW9jcCwgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGYuX292LmFkZHJlc3MpCisgICAgICAgIHNlbGYuX3VucmVnaXN0ZXJfd2FpdCgpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBzZXRfZXhjZXB0aW9uKHNlbGYsIGV4Y2VwdGlvbik6CisgICAgICAgIHN1cGVyKCkuc2V0X2V4Y2VwdGlvbihleGNlcHRpb24pCisgICAgICAgIHNlbGYuX3VucmVnaXN0ZXJfd2FpdCgpCisKKyAgICBkZWYgc2V0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICBzdXBlcigpLnNldF9yZXN1bHQocmVzdWx0KQorICAgICAgICBzZWxmLl91bnJlZ2lzdGVyX3dhaXQoKQorCisKK2NsYXNzIFBpcGVTZXJ2ZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHNlcnZlci4KKworICAgIFRoaXMgaXMgbXVjaCBsaWtlIGEgYm91bmQsIGxpc3RlbmluZyBzb2NrZXQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcyA9IHdlYWtyZWYuV2Vha1NldCgpCisgICAgICAgICMgaW5pdGlhbGl6ZSB0aGUgcGlwZSBhdHRyaWJ1dGUgYmVmb3JlIGNhbGxpbmcgX3NlcnZlcl9waXBlX2hhbmRsZSgpCisgICAgICAgICMgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGNhbiByYWlzZSBhbiBleGNlcHRpb24gYW5kIHRoZSBkZXN0cnVjdG9yIGNhbGxzCisgICAgICAgICMgdGhlIGNsb3NlKCkgbWV0aG9kCisgICAgICAgIHNlbGYuX3BpcGUgPSBOb25lCisgICAgICAgIHNlbGYuX2FjY2VwdF9waXBlX2Z1dHVyZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlwZSA9IHNlbGYuX3NlcnZlcl9waXBlX2hhbmRsZShUcnVlKQorCisgICAgZGVmIF9nZXRfdW5jb25uZWN0ZWRfcGlwZShzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgbmV3IGluc3RhbmNlIGFuZCByZXR1cm4gcHJldmlvdXMgb25lLiAgVGhpcyBlbnN1cmVzCisgICAgICAgICMgdGhhdCAodW50aWwgdGhlIHNlcnZlciBpcyBjbG9zZWQpIHRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdAorICAgICAgICAjIG9uZSBwaXBlIGhhbmRsZSBmb3IgYWRkcmVzcy4gIFRoZXJlZm9yZSBpZiBhIGNsaWVudCBhdHRlbXB0CisgICAgICAgICMgdG8gY29ubmVjdCBpdCB3aWxsIG5vdCBmYWlsIHdpdGggRmlsZU5vdEZvdW5kRXJyb3IuCisgICAgICAgIHRtcCwgc2VsZi5fcGlwZSA9IHNlbGYuX3BpcGUsIHNlbGYuX3NlcnZlcl9waXBlX2hhbmRsZShGYWxzZSkKKyAgICAgICAgcmV0dXJuIHRtcAorCisgICAgZGVmIF9zZXJ2ZXJfcGlwZV9oYW5kbGUoc2VsZiwgZmlyc3QpOgorICAgICAgICAjIFJldHVybiBhIHdyYXBwZXIgZm9yIGEgbmV3IHBpcGUgaGFuZGxlLgorICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBmbGFncyA9IF93aW5hcGkuUElQRV9BQ0NFU1NfRFVQTEVYIHwgX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRAorICAgICAgICBpZiBmaXJzdDoKKyAgICAgICAgICAgIGZsYWdzIHw9IF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UKKyAgICAgICAgaCA9IF93aW5hcGkuQ3JlYXRlTmFtZWRQaXBlKAorICAgICAgICAgICAgc2VsZi5fYWRkcmVzcywgZmxhZ3MsCisgICAgICAgICAgICBfd2luYXBpLlBJUEVfVFlQRV9NRVNTQUdFIHwgX3dpbmFwaS5QSVBFX1JFQURNT0RFX01FU1NBR0UgfAorICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1dBSVQsCisgICAgICAgICAgICBfd2luYXBpLlBJUEVfVU5MSU1JVEVEX0lOU1RBTkNFUywKKyAgICAgICAgICAgIHdpbmRvd3NfdXRpbHMuQlVGU0laRSwgd2luZG93c191dGlscy5CVUZTSVpFLAorICAgICAgICAgICAgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMKQorICAgICAgICBwaXBlID0gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGgpCisgICAgICAgIHNlbGYuX2ZyZWVfaW5zdGFuY2VzLmFkZChwaXBlKQorICAgICAgICByZXR1cm4gcGlwZQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9hY2NlcHRfcGlwZV9mdXR1cmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hY2NlcHRfcGlwZV9mdXR1cmUuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYuX2FjY2VwdF9waXBlX2Z1dHVyZSA9IE5vbmUKKyAgICAgICAgIyBDbG9zZSBhbGwgaW5zdGFuY2VzIHdoaWNoIGhhdmUgbm90IGJlZW4gY29ubmVjdGVkIHRvIGJ5IGEgY2xpZW50LgorICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIHBpcGUgaW4gc2VsZi5fZnJlZV9pbnN0YW5jZXM6CisgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2ZyZWVfaW5zdGFuY2VzLmNsZWFyKCkKKworICAgIF9fZGVsX18gPSBjbG9zZQorCisKK2NsYXNzIF9XaW5kb3dzU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JfZXZlbnRzLkJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisgICAgIiIiV2luZG93cyB2ZXJzaW9uIG9mIHNlbGVjdG9yIGV2ZW50IGxvb3AuIiIiCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJldHVybiB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisKK2NsYXNzIFByb2FjdG9yRXZlbnRMb29wKHByb2FjdG9yX2V2ZW50cy5CYXNlUHJvYWN0b3JFdmVudExvb3ApOgorICAgICIiIldpbmRvd3MgdmVyc2lvbiBvZiBwcm9hY3RvciBldmVudCBsb29wIHVzaW5nIElPQ1AuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYWN0b3I9Tm9uZSk6CisgICAgICAgIGlmIHByb2FjdG9yIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9hY3RvciA9IElvY3BQcm9hY3RvcigpCisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocHJvYWN0b3IpCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJldHVybiB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfcGlwZV9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGFkZHJlc3MpOgorICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IuY29ubmVjdF9waXBlKGFkZHJlc3MpCisgICAgICAgIHBpcGUgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnMgPSBzZWxmLl9tYWtlX2R1cGxleF9waXBlX3RyYW5zcG9ydChwaXBlLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT17J2FkZHInOiBhZGRyZXNzfSkKKyAgICAgICAgcmV0dXJuIHRyYW5zLCBwcm90b2NvbAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBzdGFydF9zZXJ2aW5nX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgYWRkcmVzcyk6CisgICAgICAgIHNlcnZlciA9IFBpcGVTZXJ2ZXIoYWRkcmVzcykKKworICAgICAgICBkZWYgbG9vcF9hY2NlcHRfcGlwZShmPU5vbmUpOgorICAgICAgICAgICAgcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgICAgICBwaXBlID0gZi5yZXN1bHQoKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuX2ZyZWVfaW5zdGFuY2VzLmRpc2NhcmQocGlwZSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLCBwcm90b2NvbCwgZXh0cmE9eydhZGRyJzogYWRkcmVzc30pCisgICAgICAgICAgICAgICAgcGlwZSA9IHNlcnZlci5fZ2V0X3VuY29ubmVjdGVkX3BpcGUoKQorICAgICAgICAgICAgICAgIGlmIHBpcGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLmFjY2VwdF9waXBlKHBpcGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgcGlwZSBhbmQgcGlwZS5maWxlbm8oKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ1BpcGUgYWNjZXB0IGZhaWxlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3BpcGUnOiBwaXBlLAorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiQWNjZXB0IHBpcGUgZmFpbGVkIG9uIHBpcGUgJXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLCBleGNfaW5mbz1UcnVlKQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgcGlwZToKKyAgICAgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlcnZlci5fYWNjZXB0X3BpcGVfZnV0dXJlID0gZgorICAgICAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2sobG9vcF9hY2NlcHRfcGlwZSkKKworICAgICAgICBzZWxmLmNhbGxfc29vbihsb29wX2FjY2VwdF9waXBlKQorICAgICAgICByZXR1cm4gW3NlcnZlcl0KKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgdHJhbnNwID0gX1dpbmRvd3NTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPWV4dHJhLCAqKmt3YXJncykKKyAgICAgICAgeWllbGQgZnJvbSB0cmFuc3AuX3Bvc3RfaW5pdCgpCisgICAgICAgIHJldHVybiB0cmFuc3AKKworCitjbGFzcyBJb2NwUHJvYWN0b3I6CisgICAgIiIiUHJvYWN0b3IgaW1wbGVtZW50YXRpb24gdXNpbmcgSU9DUC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25jdXJyZW5jeT0weGZmZmZmZmZmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2lvY3AgPSBfb3ZlcmxhcHBlZC5DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KAorICAgICAgICAgICAgX292ZXJsYXBwZWQuSU5WQUxJRF9IQU5ETEVfVkFMVUUsIE5VTEwsIDAsIGNvbmN1cnJlbmN5KQorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8JXMgb3ZlcmxhcHBlZCM9JXMgcmVzdWx0Iz0lcz4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGxlbihzZWxmLl9jYWNoZSksCisgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuX3Jlc3VsdHMpKSkKKworICAgIGRlZiBzZXRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHM6CisgICAgICAgICAgICBzZWxmLl9wb2xsKHRpbWVvdXQpCisgICAgICAgIHRtcCA9IHNlbGYuX3Jlc3VsdHMKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHJldHVybiB0bXAKKworICAgIGRlZiByZWN2KHNlbGYsIGNvbm4sIG5ieXRlcywgZmxhZ3M9MCk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChjb25uKQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzb2NrZXQuc29ja2V0KToKKyAgICAgICAgICAgIG92LldTQVJlY3YoY29ubi5maWxlbm8oKSwgbmJ5dGVzLCBmbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG92LlJlYWRGaWxlKGNvbm4uZmlsZW5vKCksIG5ieXRlcykKKworICAgICAgICBkZWYgZmluaXNoX3JlY3YodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9ORVROQU1FX0RFTEVURUQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZXNldEVycm9yKCpleGMuYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoX3JlY3YpCisKKyAgICBkZWYgc2VuZChzZWxmLCBjb25uLCBidWYsIGZsYWdzPTApOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AoY29ubikKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc29ja2V0LnNvY2tldCk6CisgICAgICAgICAgICBvdi5XU0FTZW5kKGNvbm4uZmlsZW5vKCksIGJ1ZiwgZmxhZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdi5Xcml0ZUZpbGUoY29ubi5maWxlbm8oKSwgYnVmKQorCisgICAgICAgIGRlZiBmaW5pc2hfc2VuZCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG92LmdldHJlc3VsdCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgZXhjLndpbmVycm9yID09IF9vdmVybGFwcGVkLkVSUk9SX05FVE5BTUVfREVMRVRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblJlc2V0RXJyb3IoKmV4Yy5hcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBjb25uLCBmaW5pc2hfc2VuZCkKKworICAgIGRlZiBhY2NlcHQoc2VsZiwgbGlzdGVuZXIpOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AobGlzdGVuZXIpCisgICAgICAgIGNvbm4gPSBzZWxmLl9nZXRfYWNjZXB0X3NvY2tldChsaXN0ZW5lci5mYW1pbHkpCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBvdi5BY2NlcHRFeChsaXN0ZW5lci5maWxlbm8oKSwgY29ubi5maWxlbm8oKSkKKworICAgICAgICBkZWYgZmluaXNoX2FjY2VwdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0FDQ0VQVF9DT05URVhUIHNvIGdldHNvY2tuYW1lKCkgZXRjIHdvcmsuCisgICAgICAgICAgICBidWYgPSBzdHJ1Y3QucGFjaygnQFAnLCBsaXN0ZW5lci5maWxlbm8oKSkKKyAgICAgICAgICAgIGNvbm4uc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5TT19VUERBVEVfQUNDRVBUX0NPTlRFWFQsIGJ1ZikKKyAgICAgICAgICAgIGNvbm4uc2V0dGltZW91dChsaXN0ZW5lci5nZXR0aW1lb3V0KCkpCisgICAgICAgICAgICByZXR1cm4gY29ubiwgY29ubi5nZXRwZWVybmFtZSgpCisKKyAgICAgICAgQGNvcm91dGluZQorICAgICAgICBkZWYgYWNjZXB0X2Nvcm8oZnV0dXJlLCBjb25uKToKKyAgICAgICAgICAgICMgQ29yb3V0aW5lIGNsb3NpbmcgdGhlIGFjY2VwdCBzb2NrZXQgaWYgdGhlIGZ1dHVyZSBpcyBjYW5jZWxsZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dHVyZQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBmdXR1cmUgPSBzZWxmLl9yZWdpc3RlcihvdiwgbGlzdGVuZXIsIGZpbmlzaF9hY2NlcHQpCisgICAgICAgIGNvcm8gPSBhY2NlcHRfY29ybyhmdXR1cmUsIGNvbm4pCisgICAgICAgIHRhc2tzLmFzeW5jKGNvcm8sIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgcmV0dXJuIGZ1dHVyZQorCisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgY29ubiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChjb25uKQorICAgICAgICAjIFRoZSBzb2NrZXQgbmVlZHMgdG8gYmUgbG9jYWxseSBib3VuZCBiZWZvcmUgd2UgY2FsbCBDb25uZWN0RXgoKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuQmluZExvY2FsKGNvbm4uZmlsZW5vKCksIGNvbm4uZmFtaWx5KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS53aW5lcnJvciAhPSBlcnJuby5XU0FFSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUHJvYmFibHkgYWxyZWFkeSBsb2NhbGx5IGJvdW5kOyBjaGVjayB1c2luZyBnZXRzb2NrbmFtZSgpLgorICAgICAgICAgICAgaWYgY29ubi5nZXRzb2NrbmFtZSgpWzFdID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LkNvbm5lY3RFeChjb25uLmZpbGVubygpLCBhZGRyZXNzKQorCisgICAgICAgIGRlZiBmaW5pc2hfY29ubmVjdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCBzbyBnZXRzb2NrbmFtZSgpIGV0YyB3b3JrLgorICAgICAgICAgICAgY29ubi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vdmVybGFwcGVkLlNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQsIDApCisgICAgICAgICAgICByZXR1cm4gY29ubgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoX2Nvbm5lY3QpCisKKyAgICBkZWYgYWNjZXB0X3BpcGUoc2VsZiwgcGlwZSk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChwaXBlKQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuQ29ubmVjdE5hbWVkUGlwZShwaXBlLmZpbGVubygpKQorCisgICAgICAgIGRlZiBmaW5pc2hfYWNjZXB0X3BpcGUodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIHJldHVybiBwaXBlCisKKyAgICAgICAgIyBGSVhNRTogVHVsaXAgaXNzdWUgMTk2OiB3aHkgdG8gd2UgbmVlZWQgcmVnaXN0ZXI9RmFsc2U/CisgICAgICAgICMgU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4gdGhlIF9yZWdpc3RlcigpIG1ldGhvZAorICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIHBpcGUsIGZpbmlzaF9hY2NlcHRfcGlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyPUZhbHNlKQorCisgICAgZGVmIGNvbm5lY3RfcGlwZShzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LldhaXROYW1lZFBpcGVBbmRDb25uZWN0KGFkZHJlc3MsIHNlbGYuX2lvY3AsIG92LmFkZHJlc3MpCisKKyAgICAgICAgZGVmIGZpbmlzaF9jb25uZWN0X3BpcGUoZXJyLCBoYW5kbGUsIG92KToKKyAgICAgICAgICAgICMgZXJyLCBoYW5kbGUgd2VyZSBhcmd1bWVudHMgcGFzc2VkIHRvIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkKKyAgICAgICAgICAgICMgaW4gYSBmdW5jdGlvbiBydW4gaW4gYSB0aHJlYWQgcG9vbC4KKyAgICAgICAgICAgIGlmIGVyciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9TRU1fVElNRU9VVDoKKyAgICAgICAgICAgICAgICAjIENvbm5lY3Rpb24gZGlkIG5vdCBzdWNjZWVkIHdpdGhpbiB0aW1lIGxpbWl0LgorICAgICAgICAgICAgICAgIG1zZyA9IF9vdmVybGFwcGVkLkZvcm1hdE1lc3NhZ2UoZXJyKQorICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IoMCwgbXNnLCBOb25lLCBlcnIpCisgICAgICAgICAgICBlbGlmIGVyciAhPSAwOgorICAgICAgICAgICAgICAgIG1zZyA9IF9vdmVybGFwcGVkLkZvcm1hdE1lc3NhZ2UoZXJyKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoMCwgbXNnLCBOb25lLCBlcnIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUoaGFuZGxlKQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgTm9uZSwgZmluaXNoX2Nvbm5lY3RfcGlwZSwgd2FpdF9mb3JfcG9zdD1UcnVlKQorCisgICAgZGVmIHdhaXRfZm9yX2hhbmRsZShzZWxmLCBoYW5kbGUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIG1zID0gX3dpbmFwaS5JTkZJTklURQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsCisgICAgICAgICAgICAjIHJvdW5kIGF3YXkgZnJvbSB6ZXJvIHRvIHdhaXQgKmF0IGxlYXN0KiB0aW1lb3V0IHNlY29uZHMuCisgICAgICAgICAgICBtcyA9IG1hdGguY2VpbCh0aW1lb3V0ICogMWUzKQorCisgICAgICAgICMgV2Ugb25seSBjcmVhdGUgb3Ygc28gd2UgY2FuIHVzZSBvdi5hZGRyZXNzIGFzIGEga2V5IGZvciB0aGUgY2FjaGUuCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICB3aCA9IF9vdmVybGFwcGVkLlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZSgKKyAgICAgICAgICAgIGhhbmRsZSwgc2VsZi5faW9jcCwgb3YuYWRkcmVzcywgbXMpCisgICAgICAgIGYgPSBfV2FpdEhhbmRsZUZ1dHVyZShzZWxmLl9pb2NwLCBvdiwgaGFuZGxlLCB3aCwgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICBpZiBmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisKKyAgICAgICAgZGVmIGZpbmlzaF93YWl0X2Zvcl9oYW5kbGUodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBzZWNvbmQgd2FpdCBtZWFucyB0aGF0IHdlIHNob3VsZCBvbmx5IHVzZQorICAgICAgICAgICAgIyB0aGlzIHdpdGggaGFuZGxlcyB0eXBlcyB3aGVyZSBhIHN1Y2Nlc3NmdWwgd2FpdCBoYXMgbm8KKyAgICAgICAgICAgICMgZWZmZWN0LiAgU28gZXZlbnRzIG9yIHByb2Nlc3NlcyBhcmUgYWxsIHJpZ2h0LCBidXQgbG9ja3MKKyAgICAgICAgICAgICMgb3Igc2VtYXBob3JlcyBhcmUgbm90LiAgQWxzbyBub3RlIGlmIHRoZSBoYW5kbGUgaXMKKyAgICAgICAgICAgICMgc2lnbmFsbGVkIGFuZCB0aGVuIHF1aWNrbHkgcmVzZXQsIHRoZW4gd2UgbWF5IHJldHVybgorICAgICAgICAgICAgIyBGYWxzZSBldmVuIHRob3VnaCB3ZSBoYXZlIG5vdCB0aW1lZCBvdXQuCisgICAgICAgICAgICByZXR1cm4gZi5fcG9sbCgpCisKKyAgICAgICAgaWYgZi5fcG9sbCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGYuX3BvbGwoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChyZXN1bHQpCisKKyAgICAgICAgc2VsZi5fY2FjaGVbb3YuYWRkcmVzc10gPSAoZiwgb3YsIDAsIGZpbmlzaF93YWl0X2Zvcl9oYW5kbGUpCisgICAgICAgIHJldHVybiBmCisKKyAgICBkZWYgX3JlZ2lzdGVyX3dpdGhfaW9jcChzZWxmLCBvYmopOgorICAgICAgICAjIFRvIGdldCBub3RpZmljYXRpb25zIG9mIGZpbmlzaGVkIG9wcyBvbiB0aGlzIG9iamVjdHMgc2VudCB0byB0aGUKKyAgICAgICAgIyBjb21wbGV0aW9uIHBvcnQsIHdlcmUgbXVzdCByZWdpc3RlciB0aGUgaGFuZGxlLgorICAgICAgICBpZiBvYmogbm90IGluIHNlbGYuX3JlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLl9yZWdpc3RlcmVkLmFkZChvYmopCisgICAgICAgICAgICBfb3ZlcmxhcHBlZC5DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KG9iai5maWxlbm8oKSwgc2VsZi5faW9jcCwgMCwgMCkKKyAgICAgICAgICAgICMgWFhYIFdlIGNvdWxkIGFsc28gdXNlIFNldEZpbGVDb21wbGV0aW9uTm90aWZpY2F0aW9uTW9kZXMoKQorICAgICAgICAgICAgIyB0byBhdm9pZCBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgdG8gY29tcGxldGlvbiBwb3J0IG9mIG9wcworICAgICAgICAgICAgIyB0aGF0IHN1Y2NlZWQgaW1tZWRpYXRlbHkuCisKKyAgICBkZWYgX3JlZ2lzdGVyKHNlbGYsIG92LCBvYmosIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgd2FpdF9mb3JfcG9zdD1GYWxzZSwgcmVnaXN0ZXI9VHJ1ZSk6CisgICAgICAgICMgUmV0dXJuIGEgZnV0dXJlIHdoaWNoIHdpbGwgYmUgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAgIyBvcGVyYXRpb24gd2hlbiBpdCBjb21wbGV0ZXMuICBUaGUgZnV0dXJlJ3MgdmFsdWUgaXMgYWN0dWFsbHkKKyAgICAgICAgIyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGJhY2soKS4KKyAgICAgICAgZiA9IF9PdmVybGFwcGVkRnV0dXJlKG92LCBsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGlmIGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgaWYgbm90IG92LnBlbmRpbmcgYW5kIG5vdCB3YWl0X2Zvcl9wb3N0OgorICAgICAgICAgICAgIyBUaGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQsIHNvIG5vIG5lZWQgdG8gcG9zdHBvbmUgdGhlCisgICAgICAgICAgICAjIHdvcmsuICBXZSBjYW5ub3QgdGFrZSB0aGlzIHNob3J0IGN1dCBpZiB3ZSBuZWVkIHRoZQorICAgICAgICAgICAgIyBOdW1iZXJPZkJ5dGVzLCBDb21wbGV0aW9uS2V5IHZhbHVlcyByZXR1cm5lZCBieQorICAgICAgICAgICAgIyBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cygpLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soTm9uZSwgTm9uZSwgb3YpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLnNldF9yZXN1bHQodmFsdWUpCisgICAgICAgICAgICAjIEV2ZW4gaWYgR2V0T3ZlcmxhcHBlZFJlc3VsdCgpIHdhcyBjYWxsZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlCisgICAgICAgICAgICAjIG5vdGlmaWNhdGlvbiBvZiB0aGUgY29tcGxldGlvbiBpbiBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkuCisgICAgICAgICAgICAjIFJlZ2lzdGVyIHRoZSBvdmVybGFwcGVkIG9wZXJhdGlvbiB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZQorICAgICAgICAgICAgIyBPVkVSTEFQUEVEIG9iamVjdCwgb3RoZXJ3aXNlIHRoZSBtZW1vcnkgaXMgZnJlZWQgYW5kIFdpbmRvd3MgbWF5CisgICAgICAgICAgICAjIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEZvciBhbiB1bmtub3duIHJlYXNvbiwgQ29ubmVjdE5hbWVkUGlwZSgpIGJlaGF2ZXMgZGlmZmVyZW50bHk6CisgICAgICAgICAgICAjIHRoZSBjb21wbGV0aW9uIGlzIG5vdCBub3RpZmllZCBieSBHZXRPdmVybGFwcGVkUmVzdWx0KCkgaWYgd2UKKyAgICAgICAgICAgICMgYWxyZWFkeSBjYWxsZWQgR2V0T3ZlcmxhcHBlZFJlc3VsdCgpLiBGb3IgdGhpcyBzcGVjaWZpYyBjYXNlLCB3ZQorICAgICAgICAgICAgIyBkb24ndCBleHBlY3Qgbm90aWZpY2F0aW9uIChyZWdpc3RlciBpcyBzZXQgdG8gRmFsc2UpLgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVnaXN0ZXIgPSBUcnVlCisgICAgICAgIGlmIHJlZ2lzdGVyOgorICAgICAgICAgICAgIyBSZWdpc3RlciB0aGUgb3ZlcmxhcHBlZCBvcGVyYXRpb24gZm9yIGxhdGVyLiAgTm90ZSB0aGF0CisgICAgICAgICAgICAjIHdlIG9ubHkgc3RvcmUgb2JqIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBnYXJiYWdlCisgICAgICAgICAgICAjIGNvbGxlY3RlZCB0b28gZWFybHkuCisgICAgICAgICAgICBzZWxmLl9jYWNoZVtvdi5hZGRyZXNzXSA9IChmLCBvdiwgb2JqLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiBfZ2V0X2FjY2VwdF9zb2NrZXQoc2VsZiwgZmFtaWx5KToKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoZmFtaWx5KQorICAgICAgICBzLnNldHRpbWVvdXQoMCkKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBtcyA9IElORklOSVRFCisgICAgICAgIGVsaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSB0aW1lb3V0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cygpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwKKyAgICAgICAgICAgICMgcm91bmQgYXdheSBmcm9tIHplcm8gdG8gd2FpdCAqYXQgbGVhc3QqIHRpbWVvdXQgc2Vjb25kcy4KKyAgICAgICAgICAgIG1zID0gbWF0aC5jZWlsKHRpbWVvdXQgKiAxZTMpCisgICAgICAgICAgICBpZiBtcyA+PSBJTkZJTklURToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0aW1lb3V0IHRvbyBiaWciKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGF0dXMgPSBfb3ZlcmxhcHBlZC5HZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHNlbGYuX2lvY3AsIG1zKQorICAgICAgICAgICAgaWYgc3RhdHVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBtcyA9IDAKKworICAgICAgICAgICAgZXJyLCB0cmFuc2ZlcnJlZCwga2V5LCBhZGRyZXNzID0gc3RhdHVzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiwgb3YsIG9iaiwgY2FsbGJhY2sgPSBzZWxmLl9jYWNoZS5wb3AoYWRkcmVzcykKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoKSByZXR1cm5lZCBhbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5leHBlY3RlZCBldmVudCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6ICgnZXJyPSVzIHRyYW5zZmVycmVkPSVzIGtleT0lI3ggYWRkcmVzcz0lI3gnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGVyciwgdHJhbnNmZXJyZWQsIGtleSwgYWRkcmVzcykpLAorICAgICAgICAgICAgICAgICAgICB9KQorCisgICAgICAgICAgICAgICAgIyBrZXkgaXMgZWl0aGVyIHplcm8sIG9yIGl0IGlzIHVzZWQgdG8gcmV0dXJuIGEgcGlwZQorICAgICAgICAgICAgICAgICMgaGFuZGxlIHdoaWNoIHNob3VsZCBiZSBjbG9zZWQgdG8gYXZvaWQgYSBsZWFrLgorICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gKDAsIF9vdmVybGFwcGVkLklOVkFMSURfSEFORExFX1ZBTFVFKToKKyAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShrZXkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgb2JqIGluIHNlbGYuX3N0b3BwZWRfc2VydmluZzoKKyAgICAgICAgICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgICAgICAjIERvbid0IGNhbGwgdGhlIGNhbGxiYWNrIGlmIF9yZWdpc3RlcigpIGFscmVhZHkgcmVhZCB0aGUgcmVzdWx0IG9yCisgICAgICAgICAgICAjIGlmIHRoZSBvdmVybGFwcGVkIGhhcyBiZWVuIGNhbmNlbGxlZAorICAgICAgICAgICAgZWxpZiBub3QgZi5kb25lKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKHRyYW5zZmVycmVkLCBrZXksIG92KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRzLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0cy5hcHBlbmQoZikKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIG9iaik6CisgICAgICAgICMgb2JqIGlzIGEgc29ja2V0IG9yIHBpcGUgaGFuZGxlLiAgSXQgd2lsbCBiZSBjbG9zZWQgaW4KKyAgICAgICAgIyBCYXNlUHJvYWN0b3JFdmVudExvb3AuX3N0b3Bfc2VydmluZygpIHdoaWNoIHdpbGwgbWFrZSBhbnkKKyAgICAgICAgIyBwZW5kaW5nIG9wZXJhdGlvbnMgZmFpbCBxdWlja2x5LgorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcuYWRkKG9iaikKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBDYW5jZWwgcmVtYWluaW5nIHJlZ2lzdGVyZWQgb3BlcmF0aW9ucy4KKyAgICAgICAgZm9yIGFkZHJlc3MsIChmdXQsIG92LCBvYmosIGNhbGxiYWNrKSBpbiBsaXN0KHNlbGYuX2NhY2hlLml0ZW1zKCkpOgorICAgICAgICAgICAgaWYgb2JqIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGUgb3BlcmF0aW9uIHdhcyBzdGFydGVkIHdpdGggY29ubmVjdF9waXBlKCkgd2hpY2gKKyAgICAgICAgICAgICAgICAjIHF1ZXVlcyBhIHRhc2sgdG8gV2luZG93cycgdGhyZWFkIHBvb2wuICBUaGlzIGNhbm5vdAorICAgICAgICAgICAgICAgICMgYmUgY2FuY2VsbGVkLCBzbyBqdXN0IGZvcmdldCBpdC4KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fY2FjaGVbYWRkcmVzc10KKyAgICAgICAgICAgICMgRklYTUU6IFR1bGlwIGlzc3VlIDE5NjogcmVtb3ZlIHRoaXMgY2FzZSwgaXQgc2hvdWxkIG5vdCBoYXBwZW4KKyAgICAgICAgICAgIGVsaWYgZnV0LmRvbmUoKSBhbmQgbm90IGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fY2FjaGVbYWRkcmVzc10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0NhbmNlbGxpbmcgYSBmdXR1cmUgZmFpbGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmdXR1cmUnOiBmdXQsCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmdXQuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFsnc291cmNlX3RyYWNlYmFjayddID0gZnV0Ll9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dCkKKworICAgICAgICB3aGlsZSBzZWxmLl9jYWNoZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wb2xsKDEpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygndGFraW5nIGxvbmcgdGltZSB0byBjbG9zZSBwcm9hY3RvcicpCisKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIGlmIHNlbGYuX2lvY3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHNlbGYuX2lvY3ApCisgICAgICAgICAgICBzZWxmLl9pb2NwID0gTm9uZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisKK2NsYXNzIF9XaW5kb3dzU3VicHJvY2Vzc1RyYW5zcG9ydChiYXNlX3N1YnByb2Nlc3MuQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQpOgorCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX3Byb2MgPSB3aW5kb3dzX3V0aWxzLlBvcGVuKAorICAgICAgICAgICAgYXJncywgc2hlbGw9c2hlbGwsIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLAorICAgICAgICAgICAgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKworICAgICAgICBkZWYgY2FsbGJhY2soZik6CisgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fcHJvYy5wb2xsKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfZXhpdGVkKHJldHVybmNvZGUpCisKKyAgICAgICAgZiA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShpbnQoc2VsZi5fcHJvYy5faGFuZGxlKSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYWxsYmFjaykKKworCitTZWxlY3RvckV2ZW50TG9vcCA9IF9XaW5kb3dzU2VsZWN0b3JFdmVudExvb3AKKworCitjbGFzcyBfV2luZG93c0RlZmF1bHRFdmVudExvb3BQb2xpY3koZXZlbnRzLkJhc2VEZWZhdWx0RXZlbnRMb29wUG9saWN5KToKKyAgICBfbG9vcF9mYWN0b3J5ID0gU2VsZWN0b3JFdmVudExvb3AKKworCitEZWZhdWx0RXZlbnRMb29wUG9saWN5ID0gX1dpbmRvd3NEZWZhdWx0RXZlbnRMb29wUG9saWN5CmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5IGIvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2YyZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weQpAQCAtMCwwICsxLDIwNyBAQAorIiIiCitWYXJpb3VzIFdpbmRvd3Mgc3BlY2lmaWMgYml0cyBhbmQgcGllY2VzCisiIiIKKworaW1wb3J0IHN5cworCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHJhaXNlIEltcG9ydEVycm9yKCd3aW4zMiBvbmx5JykKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1zdmNydAoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgX3dpbmFwaQorCisKK19fYWxsX18gPSBbJ3NvY2tldHBhaXInLCAncGlwZScsICdQb3BlbicsICdQSVBFJywgJ1BpcGVIYW5kbGUnXQorCisKKyMgQ29uc3RhbnRzL2dsb2JhbHMKKworCitCVUZTSVpFID0gODE5MgorUElQRSA9IHN1YnByb2Nlc3MuUElQRQorU1RET1VUID0gc3VicHJvY2Vzcy5TVERPVVQKK19tbWFwX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIHNvY2tldC5zb2NrZXRwYWlyKCkKKworCitkZWYgc29ja2V0cGFpcihmYW1pbHk9c29ja2V0LkFGX0lORVQsIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz0wKToKKyAgICAiIiJBIHNvY2tldCBwYWlyIHVzYWJsZSBhcyBhIHNlbGYtcGlwZSwgZm9yIFdpbmRvd3MuCisKKyAgICBPcmlnaW46IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzQzMjU3ODMsIGJ5IEdlZXJ0IEphbnNlbi4gIFB1YmxpYyBkb21haW4uCisgICAgIiIiCisgICAgaWYgZmFtaWx5ID09IHNvY2tldC5BRl9JTkVUOgorICAgICAgICBob3N0ID0gJzEyNy4wLjAuMScKKyAgICBlbGlmIGZhbWlseSA9PSBzb2NrZXQuQUZfSU5FVDY6CisgICAgICAgIGhvc3QgPSAnOjoxJworICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9ueSBBRl9JTkVUIGFuZCBBRl9JTkVUNiBzb2NrZXQgYWRkcmVzcyBmYW1pbGllcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImFyZSBzdXBwb3J0ZWQiKQorICAgIGlmIHR5cGUgIT0gc29ja2V0LlNPQ0tfU1RSRUFNOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJPbmx5IFNPQ0tfU1RSRUFNIHNvY2tldCB0eXBlIGlzIHN1cHBvcnRlZCIpCisgICAgaWYgcHJvdG8gIT0gMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT25seSBwcm90b2NvbCB6ZXJvIGlzIHN1cHBvcnRlZCIpCisKKyAgICAjIFdlIGNyZWF0ZSBhIGNvbm5lY3RlZCBUQ1Agc29ja2V0LiBOb3RlIHRoZSB0cmljayB3aXRoIHNldGJsb2NraW5nKDApCisgICAgIyB0aGF0IHByZXZlbnRzIHVzIGZyb20gaGF2aW5nIHRvIGNyZWF0ZSBhIHRocmVhZC4KKyAgICBsc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykKKyAgICB0cnk6CisgICAgICAgIGxzb2NrLmJpbmQoKGhvc3QsIDApKQorICAgICAgICBsc29jay5saXN0ZW4oMSkKKyAgICAgICAgIyBPbiBJUHY2LCBpZ25vcmUgZmxvd19pbmZvIGFuZCBzY29wZV9pZAorICAgICAgICBhZGRyLCBwb3J0ID0gbHNvY2suZ2V0c29ja25hbWUoKVs6Ml0KKyAgICAgICAgY3NvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNzb2NrLmNvbm5lY3QoKGFkZHIsIHBvcnQpKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNzb2NrLCBfID0gbHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGNzb2NrLnNldGJsb2NraW5nKFRydWUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGNzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgZmluYWxseToKKyAgICAgICAgbHNvY2suY2xvc2UoKQorICAgIHJldHVybiAoc3NvY2ssIGNzb2NrKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIG9zLnBpcGUoKSB1c2luZyBoYW5kbGVzIGluc3RlYWQgb2YgZmRzCisKKworZGVmIHBpcGUoKiwgZHVwbGV4PUZhbHNlLCBvdmVybGFwcGVkPShUcnVlLCBUcnVlKSwgYnVmc2l6ZT1CVUZTSVpFKToKKyAgICAiIiJMaWtlIG9zLnBpcGUoKSBidXQgd2l0aCBvdmVybGFwcGVkIHN1cHBvcnQgYW5kIHVzaW5nIGhhbmRsZXMgbm90IGZkcy4iIiIKKyAgICBhZGRyZXNzID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD1yJ1xcLlxwaXBlXHB5dGhvbi1waXBlLSVkLSVkLScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldHBpZCgpLCBuZXh0KF9tbWFwX2NvdW50ZXIpKSkKKworICAgIGlmIGR1cGxleDoKKyAgICAgICAgb3Blbm1vZGUgPSBfd2luYXBpLlBJUEVfQUNDRVNTX0RVUExFWAorICAgICAgICBhY2Nlc3MgPSBfd2luYXBpLkdFTkVSSUNfUkVBRCB8IF93aW5hcGkuR0VORVJJQ19XUklURQorICAgICAgICBvYnNpemUsIGlic2l6ZSA9IGJ1ZnNpemUsIGJ1ZnNpemUKKyAgICBlbHNlOgorICAgICAgICBvcGVubW9kZSA9IF93aW5hcGkuUElQRV9BQ0NFU1NfSU5CT1VORAorICAgICAgICBhY2Nlc3MgPSBfd2luYXBpLkdFTkVSSUNfV1JJVEUKKyAgICAgICAgb2JzaXplLCBpYnNpemUgPSAwLCBidWZzaXplCisKKyAgICBvcGVubW9kZSB8PSBfd2luYXBpLkZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFCisKKyAgICBpZiBvdmVybGFwcGVkWzBdOgorICAgICAgICBvcGVubW9kZSB8PSBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisKKyAgICBpZiBvdmVybGFwcGVkWzFdOgorICAgICAgICBmbGFnc19hbmRfYXR0cmlicyA9IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKyAgICBlbHNlOgorICAgICAgICBmbGFnc19hbmRfYXR0cmlicyA9IDAKKworICAgIGgxID0gaDIgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBoMSA9IF93aW5hcGkuQ3JlYXRlTmFtZWRQaXBlKAorICAgICAgICAgICAgYWRkcmVzcywgb3Blbm1vZGUsIF93aW5hcGkuUElQRV9XQUlULAorICAgICAgICAgICAgMSwgb2JzaXplLCBpYnNpemUsIF93aW5hcGkuTk1QV0FJVF9XQUlUX0ZPUkVWRVIsIF93aW5hcGkuTlVMTCkKKworICAgICAgICBoMiA9IF93aW5hcGkuQ3JlYXRlRmlsZSgKKyAgICAgICAgICAgIGFkZHJlc3MsIGFjY2VzcywgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICBmbGFnc19hbmRfYXR0cmlicywgX3dpbmFwaS5OVUxMKQorCisgICAgICAgIG92ID0gX3dpbmFwaS5Db25uZWN0TmFtZWRQaXBlKGgxLCBvdmVybGFwcGVkPVRydWUpCisgICAgICAgIG92LkdldE92ZXJsYXBwZWRSZXN1bHQoVHJ1ZSkKKyAgICAgICAgcmV0dXJuIGgxLCBoMgorICAgIGV4Y2VwdDoKKyAgICAgICAgaWYgaDEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgxKQorICAgICAgICBpZiBoMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDIpCisgICAgICAgIHJhaXNlCisKKworIyBXcmFwcGVyIGZvciBhIHBpcGUgaGFuZGxlCisKKworY2xhc3MgUGlwZUhhbmRsZToKKyAgICAiIiJXcmFwcGVyIGZvciBhbiBvdmVybGFwcGVkIHBpcGUgaGFuZGxlIHdoaWNoIGlzIHZhZ3VlbHkgZmlsZS1vYmplY3QgbGlrZS4KKworICAgIFRoZSBJT0NQIGV2ZW50IGxvb3AgY2FuIHVzZSB0aGVzZSBpbnN0ZWFkIG9mIHNvY2tldCBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGUpOgorICAgICAgICBzZWxmLl9oYW5kbGUgPSBoYW5kbGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKworICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKworICAgIGRlZiBjbG9zZShzZWxmLCAqLCBDbG9zZUhhbmRsZT1fd2luYXBpLkNsb3NlSGFuZGxlKToKKyAgICAgICAgaWYgc2VsZi5faGFuZGxlICE9IC0xOgorICAgICAgICAgICAgQ2xvc2VIYW5kbGUoc2VsZi5faGFuZGxlKQorICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gLTEKKworICAgIF9fZGVsX18gPSBjbG9zZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIHN1YnByb2Nlc3MuUG9wZW4gdXNpbmcgb3ZlcmxhcHBlZCBwaXBlIGhhbmRsZXMKKworCitjbGFzcyBQb3BlbihzdWJwcm9jZXNzLlBvcGVuKToKKyAgICAiIiJSZXBsYWNlbWVudCBmb3Igc3VicHJvY2Vzcy5Qb3BlbiB1c2luZyBvdmVybGFwcGVkIHBpcGUgaGFuZGxlcy4KKworICAgIFRoZSBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgYXJlIE5vbmUgb3IgaW5zdGFuY2VzIG9mIFBpcGVIYW5kbGUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgKiprd2RzKToKKyAgICAgICAgYXNzZXJ0IG5vdCBrd2RzLmdldCgndW5pdmVyc2FsX25ld2xpbmVzJykKKyAgICAgICAgYXNzZXJ0IGt3ZHMuZ2V0KCdidWZzaXplJywgMCkgPT0gMAorICAgICAgICBzdGRpbl9yZmQgPSBzdGRvdXRfd2ZkID0gc3RkZXJyX3dmZCA9IE5vbmUKKyAgICAgICAgc3RkaW5fd2ggPSBzdGRvdXRfcmggPSBzdGRlcnJfcmggPSBOb25lCisgICAgICAgIGlmIHN0ZGluID09IFBJUEU6CisgICAgICAgICAgICBzdGRpbl9yaCwgc3RkaW5fd2ggPSBwaXBlKG92ZXJsYXBwZWQ9KEZhbHNlLCBUcnVlKSwgZHVwbGV4PVRydWUpCisgICAgICAgICAgICBzdGRpbl9yZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUoc3RkaW5fcmgsIG9zLk9fUkRPTkxZKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RkaW5fcmZkID0gc3RkaW4KKyAgICAgICAgaWYgc3Rkb3V0ID09IFBJUEU6CisgICAgICAgICAgICBzdGRvdXRfcmgsIHN0ZG91dF93aCA9IHBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgRmFsc2UpKQorICAgICAgICAgICAgc3Rkb3V0X3dmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShzdGRvdXRfd2gsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRvdXRfd2ZkID0gc3Rkb3V0CisgICAgICAgIGlmIHN0ZGVyciA9PSBQSVBFOgorICAgICAgICAgICAgc3RkZXJyX3JoLCBzdGRlcnJfd2ggPSBwaXBlKG92ZXJsYXBwZWQ9KFRydWUsIEZhbHNlKSkKKyAgICAgICAgICAgIHN0ZGVycl93ZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUoc3RkZXJyX3doLCAwKQorICAgICAgICBlbGlmIHN0ZGVyciA9PSBTVERPVVQ6CisgICAgICAgICAgICBzdGRlcnJfd2ZkID0gc3Rkb3V0X3dmZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RkZXJyX3dmZCA9IHN0ZGVycgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKGFyZ3MsIHN0ZGluPXN0ZGluX3JmZCwgc3Rkb3V0PXN0ZG91dF93ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdGRlcnJfd2ZkLCAqKmt3ZHMpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGZvciBoIGluIChzdGRpbl93aCwgc3Rkb3V0X3JoLCBzdGRlcnJfcmgpOgorICAgICAgICAgICAgICAgIGlmIGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzdGRpbl93aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZGluID0gUGlwZUhhbmRsZShzdGRpbl93aCkKKyAgICAgICAgICAgIGlmIHN0ZG91dF9yaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZG91dCA9IFBpcGVIYW5kbGUoc3Rkb3V0X3JoKQorICAgICAgICAgICAgaWYgc3RkZXJyX3JoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gUGlwZUhhbmRsZShzdGRlcnJfcmgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzdGRpbiA9PSBQSVBFOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHN0ZGluX3JmZCkKKyAgICAgICAgICAgIGlmIHN0ZG91dCA9PSBQSVBFOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHN0ZG91dF93ZmQpCisgICAgICAgICAgICBpZiBzdGRlcnIgPT0gUElQRToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRlcnJfd2ZkKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jb3JlLnB5IGIvTGliL2FzeW5jb3JlLnB5CmluZGV4IDkwOWQ5ZjYuLjAwYTYzOTYgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY29yZS5weQorKysgYi9MaWIvYXN5bmNvcmUucHkKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICAgICAgICAgb2JqLmhhbmRsZV9leHB0X2V2ZW50KCkKICAgICAgICAgaWYgZmxhZ3MgJiAoc2VsZWN0LlBPTExIVVAgfCBzZWxlY3QuUE9MTEVSUiB8IHNlbGVjdC5QT0xMTlZBTCk6CiAgICAgICAgICAgICBvYmouaGFuZGxlX2Nsb3NlKCkKLSAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgaWYgZS5hcmdzWzBdIG5vdCBpbiBfRElTQ09OTkVDVEVEOgogICAgICAgICAgICAgb2JqLmhhbmRsZV9lcnJvcigpCiAgICAgICAgIGVsc2U6CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgICAgICAgICMgcGFzc2VkIGJlIGNvbm5lY3RlZC4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmFkZHIgPSBzb2NrLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChFTk9UQ09OTiwgRUlOVkFMKToKICAgICAgICAgICAgICAgICAgICAgIyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgZ290IGFuIHVuY29ubmVjdGVkCiAgICAgICAgICAgICAgICAgICAgICMgc29ja2V0LgpAQCAtMzA0LDcgKzMwNCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT19SRVVTRUFERFIpIHwgMQogICAgICAgICAgICAgICAgICkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNDUsNyArMzQ1LDcgQEAKICAgICAgICAgICAgIHNlbGYuYWRkciA9IGFkZHJlc3MKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3RfZXZlbnQoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVyciwgZXJyb3Jjb2RlW2Vycl0pCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciwgZXJyb3Jjb2RlW2Vycl0pCiAKICAgICBkZWYgYWNjZXB0KHNlbGYpOgogICAgICAgICAjIFhYWCBjYW4gcmV0dXJuIGVpdGhlciBhbiBhZGRyZXNzIHBhaXIgb3IgTm9uZQpAQCAtMzUzLDcgKzM1Myw3IEBACiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBpbiAoRVdPVUxEQkxPQ0ssIEVDT05OQUJPUlRFRCwgRUFHQUlOKToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgZWxzZToKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnNvY2tldC5zZW5kKGRhdGEpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSA9PSBFV09VTERCTE9DSzoKICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgZWxpZiB3aHkuYXJnc1swXSBpbiBfRElTQ09OTkVDVEVEOgpAQCAtMzg0LDcgKzM4NCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgIyB3aW5zb2NrIHNvbWV0aW1lcyByYWlzZXMgRU5PVENPTk4KICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIGluIF9ESVNDT05ORUNURUQ6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQpAQCAtMzk3LDExICszOTcsMTIgQEAKICAgICAgICAgc2VsZi5hY2NlcHRpbmcgPSBGYWxzZQogICAgICAgICBzZWxmLmNvbm5lY3RpbmcgPSBGYWxzZQogICAgICAgICBzZWxmLmRlbF9jaGFubmVsKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKLSAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIG5vdCBpbiAoRU5PVENPTk4sIEVCQURGKToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBpZiBzZWxmLnNvY2tldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gbm90IGluIChFTk9UQ09OTiwgRUJBREYpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgIyBjaGVhcCBpbmhlcml0YW5jZSwgdXNlZCB0byBwYXNzIGFsbCBvdGhlciBhdHRyaWJ1dGUKICAgICAjIHJlZmVyZW5jZXMgdG8gdGhlIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdC4KQEAgLTQ0Myw3ICs0NDQsNyBAQAogICAgIGRlZiBoYW5kbGVfY29ubmVjdF9ldmVudChzZWxmKToKICAgICAgICAgZXJyID0gc2VsZi5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0VSUk9SKQogICAgICAgICBpZiBlcnIgIT0gMDoKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnIsIF9zdHJlcnJvcihlcnIpKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsIF9zdHJlcnJvcihlcnIpKQogICAgICAgICBzZWxmLmhhbmRsZV9jb25uZWN0KCkKICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgIHNlbGYuY29ubmVjdGluZyA9IEZhbHNlCkBAIC01MzIsNyArNTMzLDcgQEAKIAogICAgIGRlZiBpbml0aWF0ZV9zZW5kKHNlbGYpOgogICAgICAgICBudW1fc2VudCA9IDAKLSAgICAgICAgbnVtX3NlbnQgPSBkaXNwYXRjaGVyLnNlbmQoc2VsZiwgc2VsZi5vdXRfYnVmZmVyWzo1MTJdKQorICAgICAgICBudW1fc2VudCA9IGRpc3BhdGNoZXIuc2VuZChzZWxmLCBzZWxmLm91dF9idWZmZXJbOjY1NTM2XSkKICAgICAgICAgc2VsZi5vdXRfYnVmZmVyID0gc2VsZi5vdXRfYnVmZmVyW251bV9zZW50Ol0KIAogICAgIGRlZiBoYW5kbGVfd3JpdGUoc2VsZik6CkBAIC02MTMsNiArNjE0LDExIEBACiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CiAgICAgICAgICAgICBzZWxmLmZkID0gb3MuZHVwKGZkKQogCisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5mZCA+PSAwOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInVuY2xvc2VkIGZpbGUgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICAgICAgZGVmIHJlY3Yoc2VsZiwgKmFyZ3MpOgogICAgICAgICAgICAgcmV0dXJuIG9zLnJlYWQoc2VsZi5mZCwgKmFyZ3MpCiAKQEAgLTYzMSw3ICs2MzcsMTAgQEAKICAgICAgICAgd3JpdGUgPSBzZW5kCiAKICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5mZCA8IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBvcy5jbG9zZShzZWxmLmZkKQorICAgICAgICAgICAgc2VsZi5mZCA9IC0xCiAKICAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLmZkCmRpZmYgLS1naXQgYS9MaWIvYmFzZTY0LnB5IGIvTGliL2Jhc2U2NC5weQppbmRleCBiNmU4MmI2Li4zNmM2OGE2IDEwMDc1NQotLS0gYS9MaWIvYmFzZTY0LnB5CisrKyBiL0xpYi9iYXNlNjQucHkKQEAgLTEsNiArMSw2IEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCi0iIiJSRkMgMzU0ODogQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCBEYXRhIEVuY29kaW5ncyIiIgorIiIiQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCAoUkZDIDM1NDgpLCBCYXNlODUgYW5kIEFzY2lpODUgZGF0YSBlbmNvZGluZ3MiIiIKIAogIyBNb2RpZmllZCAwNC1PY3QtMTk5NSBieSBKYWNrIEphbnNlbiB0byB1c2UgYmluYXNjaWkgbW9kdWxlCiAjIE1vZGlmaWVkIDMwLURlYy0yMDAzIGJ5IEJhcnJ5IFdhcnNhdyB0byBhZGQgZnVsbCBSRkMgMzU0OCBzdXBwb3J0CkBAIC0xNyw2ICsxNyw4IEBACiAgICAgIyBHZW5lcmFsaXplZCBpbnRlcmZhY2UgZm9yIG90aGVyIGVuY29kaW5ncwogICAgICdiNjRlbmNvZGUnLCAnYjY0ZGVjb2RlJywgJ2IzMmVuY29kZScsICdiMzJkZWNvZGUnLAogICAgICdiMTZlbmNvZGUnLCAnYjE2ZGVjb2RlJywKKyAgICAjIEJhc2U4NSBhbmQgQXNjaWk4NSBlbmNvZGluZ3MKKyAgICAnYjg1ZW5jb2RlJywgJ2I4NWRlY29kZScsICdhODVlbmNvZGUnLCAnYTg1ZGVjb2RlJywKICAgICAjIFN0YW5kYXJkIEJhc2U2NCBlbmNvZGluZwogICAgICdzdGFuZGFyZF9iNjRlbmNvZGUnLCAnc3RhbmRhcmRfYjY0ZGVjb2RlJywKICAgICAjIFNvbWUgY29tbW9uIEJhc2U2NCBhbHRlcm5hdGl2ZXMuICBBcyByZWZlcmVuY2VkIGJ5IFJGQyAzNDU4LCBzZWUgdGhyZWFkCkBAIC0zNSwxMSArMzcsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBzLmVuY29kZSgnYXNjaWknKQogICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3RyaW5nIGFyZ3VtZW50IHNob3VsZCBjb250YWluIG9ubHkgQVNDSUkgY2hhcmFjdGVycycpCi0gICAgZWxpZiBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKKyAgICBpZiBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKICAgICAgICAgcmV0dXJuIHMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBieXRlcyBvciBBU0NJSSBzdHJpbmcsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKLQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG1lbW9yeXZpZXcocykudG9ieXRlcygpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBieXRlcy1saWtlIG9iamVjdCBvciBBU0NJSSAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nLCBub3QgJXIiICUgcy5fX2NsYXNzX18uX19uYW1lX18pIGZyb20gTm9uZQogCiAKICMgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHVzZXMgYmluYXNjaWkKQEAgLTU0LDE0ICs1OCw5IEBACiAKICAgICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KICAgICAiIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAjIFN0cmlwIG9mZiB0aGUgdHJhaWxpbmcgbmV3bGluZQogICAgIGVuY29kZWQgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KHMpWzotMV0KICAgICBpZiBhbHRjaGFycyBpcyBub3QgTm9uZToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYWx0Y2hhcnMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFsdGNoYXJzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgYXNzZXJ0IGxlbihhbHRjaGFycykgPT0gMiwgcmVwcihhbHRjaGFycykKICAgICAgICAgcmV0dXJuIGVuY29kZWQudHJhbnNsYXRlKGJ5dGVzLm1ha2V0cmFucyhiJysvJywgYWx0Y2hhcnMpKQogICAgIHJldHVybiBlbmNvZGVkCkBAIC0xMzgsNTMgKzEzNywzOSBAQAogCiAKICMgQmFzZTMyIGVuY29kaW5nL2RlY29kaW5nIG11c3QgYmUgZG9uZSBpbiBQeXRob24KLV9iMzJhbHBoYWJldCA9IHsKLSAgICAwOiBiJ0EnLCAgOTogYidKJywgMTg6IGInUycsIDI3OiBiJzMnLAotICAgIDE6IGInQicsIDEwOiBiJ0snLCAxOTogYidUJywgMjg6IGInNCcsCi0gICAgMjogYidDJywgMTE6IGInTCcsIDIwOiBiJ1UnLCAyOTogYic1JywKLSAgICAzOiBiJ0QnLCAxMjogYidNJywgMjE6IGInVicsIDMwOiBiJzYnLAotICAgIDQ6IGInRScsIDEzOiBiJ04nLCAyMjogYidXJywgMzE6IGInNycsCi0gICAgNTogYidGJywgMTQ6IGInTycsIDIzOiBiJ1gnLAotICAgIDY6IGInRycsIDE1OiBiJ1AnLCAyNDogYidZJywKLSAgICA3OiBiJ0gnLCAxNjogYidRJywgMjU6IGInWicsCi0gICAgODogYidJJywgMTc6IGInUicsIDI2OiBiJzInLAotICAgIH0KLQotX2IzMnRhYiA9IFt2WzBdIGZvciBrLCB2IGluIHNvcnRlZChfYjMyYWxwaGFiZXQuaXRlbXMoKSldCi1fYjMycmV2ID0gZGljdChbKHZbMF0sIGspIGZvciBrLCB2IGluIF9iMzJhbHBoYWJldC5pdGVtcygpXSkKLQorX2IzMmFscGhhYmV0ID0gYidBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2NycKK19iMzJ0YWIyID0gTm9uZQorX2IzMnJldiA9IE5vbmUKIAogZGVmIGIzMmVuY29kZShzKToKICAgICAiIiJFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBCYXNlMzIuCiAKICAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KICAgICAiIiIKKyAgICBnbG9iYWwgX2IzMnRhYjIKKyAgICAjIERlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgdGFibGUgdG8gbm90IHdhc3RlIG1lbW9yeQorICAgICMgaWYgdGhlIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZAorICAgIGlmIF9iMzJ0YWIyIGlzIE5vbmU6CisgICAgICAgIGIzMnRhYiA9IFtieXRlcygoaSwpKSBmb3IgaSBpbiBfYjMyYWxwaGFiZXRdCisgICAgICAgIF9iMzJ0YWIyID0gW2EgKyBiIGZvciBhIGluIGIzMnRhYiBmb3IgYiBpbiBiMzJ0YWJdCisgICAgICAgIGIzMnRhYiA9IE5vbmUKKwogICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQotICAgIHF1YW50YSwgbGVmdG92ZXIgPSBkaXZtb2QobGVuKHMpLCA1KQorICAgICAgICBzID0gbWVtb3J5dmlldyhzKS50b2J5dGVzKCkKKyAgICBsZWZ0b3ZlciA9IGxlbihzKSAlIDUKICAgICAjIFBhZCB0aGUgbGFzdCBxdWFudHVtIHdpdGggemVybyBiaXRzIGlmIG5lY2Vzc2FyeQogICAgIGlmIGxlZnRvdmVyOgogICAgICAgICBzID0gcyArIGJ5dGVzKDUgLSBsZWZ0b3ZlcikgICMgRG9uJ3QgdXNlICs9ICEKLSAgICAgICAgcXVhbnRhICs9IDEKICAgICBlbmNvZGVkID0gYnl0ZWFycmF5KCkKLSAgICBmb3IgaSBpbiByYW5nZShxdWFudGEpOgotICAgICAgICAjIGMxIGFuZCBjMiBhcmUgMTYgYml0cyB3aWRlLCBjMyBpcyA4IGJpdHMgd2lkZS4gIFRoZSBpbnRlbnQgb2YgdGhpcwotICAgICAgICAjIGNvZGUgaXMgdG8gcHJvY2VzcyB0aGUgNDAgYml0cyBpbiB1bml0cyBvZiA1IGJpdHMuICBTbyB3ZSB0YWtlIHRoZSAxCi0gICAgICAgICMgbGVmdG92ZXIgYml0IG9mIGMxIGFuZCB0YWNrIGl0IG9udG8gYzIuICBUaGVuIHdlIHRha2UgdGhlIDIgbGVmdG92ZXIKLSAgICAgICAgIyBiaXRzIG9mIGMyIGFuZCB0YWNrIHRoZW0gb250byBjMy4gIFRoZSBzaGlmdHMgYW5kIG1hc2tzIGFyZSBpbnRlbmRlZAotICAgICAgICAjIHRvIGdpdmUgdXMgdmFsdWVzIG9mIGV4YWN0bHkgNSBiaXRzIGluIHdpZHRoLgotICAgICAgICBjMSwgYzIsIGMzID0gc3RydWN0LnVucGFjaygnIUhIQicsIHNbaSo1OihpKzEpKjVdKQotICAgICAgICBjMiArPSAoYzEgJiAxKSA8PCAxNiAjIDE3IGJpdHMgd2lkZQotICAgICAgICBjMyArPSAoYzIgJiAzKSA8PCA4ICAjIDEwIGJpdHMgd2lkZQotICAgICAgICBlbmNvZGVkICs9IGJ5dGVzKFtfYjMydGFiW2MxID4+IDExXSwgICAgICAgICAjIGJpdHMgMSAtIDUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzEgPj4gNikgJiAweDFmXSwgIyBiaXRzIDYgLSAxMAotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMSA+PiAxKSAmIDB4MWZdLCAjIGJpdHMgMTEgLSAxNQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiW2MyID4+IDEyXSwgICAgICAgICAjIGJpdHMgMTYgLSAyMCAoMSAtIDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMyID4+IDcpICYgMHgxZl0sICMgYml0cyAyMSAtIDI1ICg2IC0gMTApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMyID4+IDIpICYgMHgxZl0sICMgYml0cyAyNiAtIDMwICgxMSAtIDE1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiW2MzID4+IDVdLCAgICAgICAgICAjIGJpdHMgMzEgLSAzNSAoMSAtIDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbYzMgJiAweDFmXSwgICAgICAgICMgYml0cyAzNiAtIDQwICgxIC0gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICBmcm9tX2J5dGVzID0gaW50LmZyb21fYnl0ZXMKKyAgICBiMzJ0YWIyID0gX2IzMnRhYjIKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIDUpOgorICAgICAgICBjID0gZnJvbV9ieXRlcyhzW2k6IGkgKyA1XSwgJ2JpZycpCisgICAgICAgIGVuY29kZWQgKz0gKGIzMnRhYjJbYyA+PiAzMF0gKyAgICAgICAgICAgIyBiaXRzIDEgLSAxMAorICAgICAgICAgICAgICAgICAgICBiMzJ0YWIyWyhjID4+IDIwKSAmIDB4M2ZmXSArICMgYml0cyAxMSAtIDIwCisgICAgICAgICAgICAgICAgICAgIGIzMnRhYjJbKGMgPj4gMTApICYgMHgzZmZdICsgIyBiaXRzIDIxIC0gMzAKKyAgICAgICAgICAgICAgICAgICAgYjMydGFiMltjICYgMHgzZmZdICAgICAgICAgICAjIGJpdHMgMzEgLSA0MAorICAgICAgICAgICAgICAgICAgICkKICAgICAjIEFkanVzdCBmb3IgYW55IGxlZnRvdmVyIHBhcnRpYWwgcXVhbnRhCiAgICAgaWYgbGVmdG92ZXIgPT0gMToKICAgICAgICAgZW5jb2RlZFstNjpdID0gYic9PT09PT0nCkBAIC0xOTYsNyArMTgxLDYgQEAKICAgICAgICAgZW5jb2RlZFstMTpdID0gYic9JwogICAgIHJldHVybiBieXRlcyhlbmNvZGVkKQogCi0KIGRlZiBiMzJkZWNvZGUocywgY2FzZWZvbGQ9RmFsc2UsIG1hcDAxPU5vbmUpOgogICAgICIiIkRlY29kZSBhIEJhc2UzMiBlbmNvZGVkIGJ5dGUgc3RyaW5nLgogCkBAIC0yMTYsOSArMjAwLDEzIEBACiAgICAgdGhlIGlucHV0IGlzIGluY29ycmVjdGx5IHBhZGRlZCBvciBpZiB0aGVyZSBhcmUgbm9uLWFscGhhYmV0CiAgICAgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZSBpbnB1dC4KICAgICAiIiIKKyAgICBnbG9iYWwgX2IzMnJldgorICAgICMgRGVsYXkgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSB0YWJsZSB0byBub3Qgd2FzdGUgbWVtb3J5CisgICAgIyBpZiB0aGUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkCisgICAgaWYgX2IzMnJldiBpcyBOb25lOgorICAgICAgICBfYjMycmV2ID0ge3Y6IGsgZm9yIGssIHYgaW4gZW51bWVyYXRlKF9iMzJhbHBoYWJldCl9CiAgICAgcyA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKHMpCi0gICAgcXVhbnRhLCBsZWZ0b3ZlciA9IGRpdm1vZChsZW4ocyksIDgpCi0gICAgaWYgbGVmdG92ZXI6CisgICAgaWYgbGVuKHMpICUgODoKICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKICAgICAjIEhhbmRsZSBzZWN0aW9uIDIuNCB6ZXJvIGFuZCBvbmUgbWFwcGluZy4gIFRoZSBmbGFnIG1hcDAxIHdpbGwgYmUgZWl0aGVyCiAgICAgIyBGYWxzZSwgb3IgdGhlIGNoYXJhY3RlciB0byBtYXAgdGhlIGRpZ2l0IDEgKG9uZSkgdG8uICBJdCBzaG91bGQgYmUKQEAgLTIzMiw0MiArMjIwLDM2IEBACiAgICAgIyBTdHJpcCBvZmYgcGFkIGNoYXJhY3RlcnMgZnJvbSB0aGUgcmlnaHQuICBXZSBuZWVkIHRvIGNvdW50IHRoZSBwYWQKICAgICAjIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGlzIHdpbGwgdGVsbCB1cyBob3cgbWFueSBudWxsIGJ5dGVzIHRvIHJlbW92ZSBmcm9tCiAgICAgIyB0aGUgZW5kIG9mIHRoZSBkZWNvZGVkIHN0cmluZy4KLSAgICBwYWRjaGFycyA9IDAKLSAgICBtbyA9IHJlLnNlYXJjaChiJyg/UDxwYWQ+Wz1dKikkJywgcykKLSAgICBpZiBtbzoKLSAgICAgICAgcGFkY2hhcnMgPSBsZW4obW8uZ3JvdXAoJ3BhZCcpKQotICAgICAgICBpZiBwYWRjaGFycyA+IDA6Ci0gICAgICAgICAgICBzID0gc1s6LXBhZGNoYXJzXQorICAgIGwgPSBsZW4ocykKKyAgICBzID0gcy5yc3RyaXAoYic9JykKKyAgICBwYWRjaGFycyA9IGwgLSBsZW4ocykKICAgICAjIE5vdyBkZWNvZGUgdGhlIGZ1bGwgcXVhbnRhCi0gICAgcGFydHMgPSBbXQotICAgIGFjYyA9IDAKLSAgICBzaGlmdCA9IDM1Ci0gICAgZm9yIGMgaW4gczoKLSAgICAgICAgdmFsID0gX2IzMnJldi5nZXQoYykKLSAgICAgICAgaWYgdmFsIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignTm9uLWJhc2UzMiBkaWdpdCBmb3VuZCcpCi0gICAgICAgIGFjYyArPSBfYjMycmV2W2NdIDw8IHNoaWZ0Ci0gICAgICAgIHNoaWZ0IC09IDUKLSAgICAgICAgaWYgc2hpZnQgPCAwOgotICAgICAgICAgICAgcGFydHMuYXBwZW5kKGJpbmFzY2lpLnVuaGV4bGlmeShieXRlcygnJTAxMHgnICUgYWNjLCAiYXNjaWkiKSkpCi0gICAgICAgICAgICBhY2MgPSAwCi0gICAgICAgICAgICBzaGlmdCA9IDM1CisgICAgZGVjb2RlZCA9IGJ5dGVhcnJheSgpCisgICAgYjMycmV2ID0gX2IzMnJldgorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgOCk6CisgICAgICAgIHF1YW50YSA9IHNbaTogaSArIDhdCisgICAgICAgIGFjYyA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGMgaW4gcXVhbnRhOgorICAgICAgICAgICAgICAgIGFjYyA9IChhY2MgPDwgNSkgKyBiMzJyZXZbY10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ05vbi1iYXNlMzIgZGlnaXQgZm91bmQnKSBmcm9tIE5vbmUKKyAgICAgICAgZGVjb2RlZCArPSBhY2MudG9fYnl0ZXMoNSwgJ2JpZycpCiAgICAgIyBQcm9jZXNzIHRoZSBsYXN0LCBwYXJ0aWFsIHF1YW50YQotICAgIGxhc3QgPSBiaW5hc2NpaS51bmhleGxpZnkoYnl0ZXMoJyUwMTB4JyAlIGFjYywgImFzY2lpIikpCi0gICAgaWYgcGFkY2hhcnMgPT0gMDoKLSAgICAgICAgbGFzdCA9IGInJyAgICAgICAgICAgICAgICAgICAgICAjIE5vIGNoYXJhY3RlcnMKLSAgICBlbGlmIHBhZGNoYXJzID09IDE6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotMV0KLSAgICBlbGlmIHBhZGNoYXJzID09IDM6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotMl0KLSAgICBlbGlmIHBhZGNoYXJzID09IDQ6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotM10KLSAgICBlbGlmIHBhZGNoYXJzID09IDY6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotNF0KLSAgICBlbHNlOgotICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignSW5jb3JyZWN0IHBhZGRpbmcnKQotICAgIHBhcnRzLmFwcGVuZChsYXN0KQotICAgIHJldHVybiBiJycuam9pbihwYXJ0cykKKyAgICBpZiBwYWRjaGFyczoKKyAgICAgICAgYWNjIDw8PSA1ICogcGFkY2hhcnMKKyAgICAgICAgbGFzdCA9IGFjYy50b19ieXRlcyg1LCAnYmlnJykKKyAgICAgICAgaWYgcGFkY2hhcnMgPT0gMToKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi0xXQorICAgICAgICBlbGlmIHBhZGNoYXJzID09IDM6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotMl0KKyAgICAgICAgZWxpZiBwYWRjaGFycyA9PSA0OgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTNdCisgICAgICAgIGVsaWYgcGFkY2hhcnMgPT0gNjoKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi00XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKKyAgICByZXR1cm4gYnl0ZXMoZGVjb2RlZCkKIAogCiAKQEAgLTI3OSw4ICsyNjEsNiBAQAogCiAgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgcmV0dXJuIGJpbmFzY2lpLmhleGxpZnkocykudXBwZXIoKQogCiAKQEAgLTMwMiw3ICsyODIsMjA2IEBACiAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdOb24tYmFzZTE2IGRpZ2l0IGZvdW5kJykKICAgICByZXR1cm4gYmluYXNjaWkudW5oZXhsaWZ5KHMpCiAKKyMKKyMgQXNjaWk4NSBlbmNvZGluZy9kZWNvZGluZworIwogCitfYTg1Y2hhcnMgPSBOb25lCitfYTg1Y2hhcnMyID0gTm9uZQorX0E4NVNUQVJUID0gYiI8fiIKK19BODVFTkQgPSBiIn4+IgorCitkZWYgXzg1ZW5jb2RlKGIsIGNoYXJzLCBjaGFyczIsIHBhZD1GYWxzZSwgZm9sZG51bHM9RmFsc2UsIGZvbGRzcGFjZXM9RmFsc2UpOgorICAgICMgSGVscGVyIGZ1bmN0aW9uIGZvciBhODVlbmNvZGUgYW5kIGI4NWVuY29kZQorICAgIGlmIG5vdCBpc2luc3RhbmNlKGIsIGJ5dGVzX3R5cGVzKToKKyAgICAgICAgYiA9IG1lbW9yeXZpZXcoYikudG9ieXRlcygpCisKKyAgICBwYWRkaW5nID0gKC1sZW4oYikpICUgNAorICAgIGlmIHBhZGRpbmc6CisgICAgICAgIGIgPSBiICsgYidcMCcgKiBwYWRkaW5nCisgICAgd29yZHMgPSBzdHJ1Y3QuU3RydWN0KCchJWRJJyAlIChsZW4oYikgLy8gNCkpLnVucGFjayhiKQorCisgICAgY2h1bmtzID0gW2IneicgaWYgZm9sZG51bHMgYW5kIG5vdCB3b3JkIGVsc2UKKyAgICAgICAgICAgICAgYid5JyBpZiBmb2xkc3BhY2VzIGFuZCB3b3JkID09IDB4MjAyMDIwMjAgZWxzZQorICAgICAgICAgICAgICAoY2hhcnMyW3dvcmQgLy8gNjE0MTI1XSArCisgICAgICAgICAgICAgICBjaGFyczJbd29yZCAvLyA4NSAlIDcyMjVdICsKKyAgICAgICAgICAgICAgIGNoYXJzW3dvcmQgJSA4NV0pCisgICAgICAgICAgICAgIGZvciB3b3JkIGluIHdvcmRzXQorCisgICAgaWYgcGFkZGluZyBhbmQgbm90IHBhZDoKKyAgICAgICAgaWYgY2h1bmtzWy0xXSA9PSBiJ3onOgorICAgICAgICAgICAgY2h1bmtzWy0xXSA9IGNoYXJzWzBdICogNQorICAgICAgICBjaHVua3NbLTFdID0gY2h1bmtzWy0xXVs6LXBhZGRpbmddCisKKyAgICByZXR1cm4gYicnLmpvaW4oY2h1bmtzKQorCitkZWYgYTg1ZW5jb2RlKGIsICosIGZvbGRzcGFjZXM9RmFsc2UsIHdyYXBjb2w9MCwgcGFkPUZhbHNlLCBhZG9iZT1GYWxzZSk6CisgICAgIiIiRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgQXNjaWk4NS4KKworICAgIGIgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGVuY29kZS4gVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgICBmb2xkc3BhY2VzIGlzIGFuIG9wdGlvbmFsIGZsYWcgdGhhdCB1c2VzIHRoZSBzcGVjaWFsIHNob3J0IHNlcXVlbmNlICd5JworICAgIGluc3RlYWQgb2YgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApIGFzIHN1cHBvcnRlZCBieSAnYnRvYScuIFRoaXMKKyAgICBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQWRvYmUgZW5jb2RpbmcuCisKKyAgICB3cmFwY29sIGNvbnRyb2xzIHdoZXRoZXIgdGhlIG91dHB1dCBzaG91bGQgaGF2ZSBuZXdsaW5lICgnXG4nKSBjaGFyYWN0ZXJzCisgICAgYWRkZWQgdG8gaXQuIElmIHRoaXMgaXMgbm9uLXplcm8sIGVhY2ggb3V0cHV0IGxpbmUgd2lsbCBiZSBhdCBtb3N0IHRoaXMKKyAgICBtYW55IGNoYXJhY3RlcnMgbG9uZy4KKworICAgIHBhZCBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgNCBiZWZvcmUKKyAgICBlbmNvZGluZy4gTm90ZSB0aGF0IHRoZSBidG9hIGltcGxlbWVudGF0aW9uIGFsd2F5cyBwYWRzLgorCisgICAgYWRvYmUgY29udHJvbHMgd2hldGhlciB0aGUgZW5jb2RlZCBieXRlIHNlcXVlbmNlIGlzIGZyYW1lZCB3aXRoIDx+IGFuZCB+PiwKKyAgICB3aGljaCBpcyB1c2VkIGJ5IHRoZSBBZG9iZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAiIiIKKyAgICBnbG9iYWwgX2E4NWNoYXJzLCBfYTg1Y2hhcnMyCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGFibGVzIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYTg1Y2hhcnMgaXMgTm9uZToKKyAgICAgICAgX2E4NWNoYXJzID0gW2J5dGVzKChpLCkpIGZvciBpIGluIHJhbmdlKDMzLCAxMTgpXQorICAgICAgICBfYTg1Y2hhcnMyID0gWyhhICsgYikgZm9yIGEgaW4gX2E4NWNoYXJzIGZvciBiIGluIF9hODVjaGFyc10KKworICAgIHJlc3VsdCA9IF84NWVuY29kZShiLCBfYTg1Y2hhcnMsIF9hODVjaGFyczIsIHBhZCwgVHJ1ZSwgZm9sZHNwYWNlcykKKworICAgIGlmIGFkb2JlOgorICAgICAgICByZXN1bHQgPSBfQTg1U1RBUlQgKyByZXN1bHQKKyAgICBpZiB3cmFwY29sOgorICAgICAgICB3cmFwY29sID0gbWF4KDIgaWYgYWRvYmUgZWxzZSAxLCB3cmFwY29sKQorICAgICAgICBjaHVua3MgPSBbcmVzdWx0W2k6IGkgKyB3cmFwY29sXQorICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHJlc3VsdCksIHdyYXBjb2wpXQorICAgICAgICBpZiBhZG9iZToKKyAgICAgICAgICAgIGlmIGxlbihjaHVua3NbLTFdKSArIDIgPiB3cmFwY29sOgorICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoYicnKQorICAgICAgICByZXN1bHQgPSBiJ1xuJy5qb2luKGNodW5rcykKKyAgICBpZiBhZG9iZToKKyAgICAgICAgcmVzdWx0ICs9IF9BODVFTkQKKworICAgIHJldHVybiByZXN1bHQKKworZGVmIGE4NWRlY29kZShiLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YicgXHRcblxyXHYnKToKKyAgICAiIiJEZWNvZGUgYW4gQXNjaWk4NSBlbmNvZGVkIGJ5dGUgc3RyaW5nLgorCisgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZGVjb2RlLgorCisgICAgZm9sZHNwYWNlcyBpcyBhIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ3knIHNob3J0IHNlcXVlbmNlIHNob3VsZCBiZQorICAgIGFjY2VwdGVkIGFzIHNob3J0aGFuZCBmb3IgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApLiBUaGlzIGZlYXR1cmUgaXMKKyAgICBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFkb2JlIGVuY29kaW5nLgorCisgICAgYWRvYmUgY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgaW4gQWRvYmUgQXNjaWk4NSBmb3JtYXQgKGkuZS4KKyAgICBpcyBmcmFtZWQgd2l0aCA8fiBhbmQgfj4pLgorCisgICAgaWdub3JlY2hhcnMgc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGlnbm9yZSBmcm9tIHRoZQorICAgIGlucHV0LiBUaGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgYnkgZGVmYXVsdAorICAgIGNvbnRhaW5zIGFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gQVNDSUkuCisgICAgIiIiCisgICAgYiA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKGIpCisgICAgaWYgYWRvYmU6CisgICAgICAgIGlmIG5vdCAoYi5zdGFydHN3aXRoKF9BODVTVEFSVCkgYW5kIGIuZW5kc3dpdGgoX0E4NUVORCkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQXNjaWk4NSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2VzIG11c3QgYmUgYnJhY2tldGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IHshcn0gYW5kIHshcn0iLmZvcm1hdChfQTg1U1RBUlQsIF9BODVFTkQpKQorICAgICAgICBiID0gYlsyOi0yXSAjIFN0cmlwIG9mZiBzdGFydC9lbmQgbWFya2VycworICAgICMKKyAgICAjIFdlIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGlzIHN0ZXB3aXNlLCBzbyBhcyB0byBpZ25vcmUgc3BhY2VzIGFuZCBoYW5kbGUKKyAgICAjIHNwZWNpYWwgc2hvcnQgc2VxdWVuY2VzCisgICAgIworICAgIHBhY2tJID0gc3RydWN0LlN0cnVjdCgnIUknKS5wYWNrCisgICAgZGVjb2RlZCA9IFtdCisgICAgZGVjb2RlZF9hcHBlbmQgPSBkZWNvZGVkLmFwcGVuZAorICAgIGN1cnIgPSBbXQorICAgIGN1cnJfYXBwZW5kID0gY3Vyci5hcHBlbmQKKyAgICBjdXJyX2NsZWFyID0gY3Vyci5jbGVhcgorICAgIGZvciB4IGluIGIgKyBiJ3UnICogNDoKKyAgICAgICAgaWYgYichJ1swXSA8PSB4IDw9IGIndSdbMF06CisgICAgICAgICAgICBjdXJyX2FwcGVuZCh4KQorICAgICAgICAgICAgaWYgbGVuKGN1cnIpID09IDU6CisgICAgICAgICAgICAgICAgYWNjID0gMAorICAgICAgICAgICAgICAgIGZvciB4IGluIGN1cnI6CisgICAgICAgICAgICAgICAgICAgIGFjYyA9IDg1ICogYWNjICsgKHggLSAzMykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfYXBwZW5kKHBhY2tJKGFjYykpCisgICAgICAgICAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXNjaWk4NSBvdmVyZmxvdycpIGZyb20gTm9uZQorICAgICAgICAgICAgICAgIGN1cnJfY2xlYXIoKQorICAgICAgICBlbGlmIHggPT0gYid6J1swXToKKyAgICAgICAgICAgIGlmIGN1cnI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneiBpbnNpZGUgQXNjaWk4NSA1LXR1cGxlJykKKyAgICAgICAgICAgIGRlY29kZWRfYXBwZW5kKGInXDBcMFwwXDAnKQorICAgICAgICBlbGlmIGZvbGRzcGFjZXMgYW5kIHggPT0gYid5J1swXToKKyAgICAgICAgICAgIGlmIGN1cnI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneSBpbnNpZGUgQXNjaWk4NSA1LXR1cGxlJykKKyAgICAgICAgICAgIGRlY29kZWRfYXBwZW5kKGInXHgyMFx4MjBceDIwXHgyMCcpCisgICAgICAgIGVsaWYgeCBpbiBpZ25vcmVjaGFyczoKKyAgICAgICAgICAgICMgU2tpcCB3aGl0ZXNwYWNlCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm9uLUFzY2lpODUgZGlnaXQgZm91bmQ6ICVjJyAlIHgpCisKKyAgICByZXN1bHQgPSBiJycuam9pbihkZWNvZGVkKQorICAgIHBhZGRpbmcgPSA0IC0gbGVuKGN1cnIpCisgICAgaWYgcGFkZGluZzoKKyAgICAgICAgIyBUaHJvdyBhd2F5IHRoZSBleHRyYSBwYWRkaW5nCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LXBhZGRpbmddCisgICAgcmV0dXJuIHJlc3VsdAorCisjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBvcmlnaW5hbGx5IHRha2VuICh3aXRoIHBlcm1pc3Npb24pIGZyb20gTWVyY3VyaWFsCisKK19iODVhbHBoYWJldCA9IChiIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgICAgICBiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ISMkJSYoKSorLTs8PT4/QF5fYHt8fX4iKQorX2I4NWNoYXJzID0gTm9uZQorX2I4NWNoYXJzMiA9IE5vbmUKK19iODVkZWMgPSBOb25lCisKK2RlZiBiODVlbmNvZGUoYiwgcGFkPUZhbHNlKToKKyAgICAiIiJFbmNvZGUgYW4gQVNDSUktZW5jb2RlZCBieXRlIGFycmF5IGluIGJhc2U4NSBmb3JtYXQuCisKKyAgICBJZiBwYWQgaXMgdHJ1ZSwgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoICJcMCIgc28gaXRzIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mCisgICAgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKyAgICAiIiIKKyAgICBnbG9iYWwgX2I4NWNoYXJzLCBfYjg1Y2hhcnMyCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGFibGVzIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYjg1Y2hhcnMgaXMgTm9uZToKKyAgICAgICAgX2I4NWNoYXJzID0gW2J5dGVzKChpLCkpIGZvciBpIGluIF9iODVhbHBoYWJldF0KKyAgICAgICAgX2I4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9iODVjaGFycyBmb3IgYiBpbiBfYjg1Y2hhcnNdCisgICAgcmV0dXJuIF84NWVuY29kZShiLCBfYjg1Y2hhcnMsIF9iODVjaGFyczIsIHBhZCkKKworZGVmIGI4NWRlY29kZShiKToKKyAgICAiIiJEZWNvZGUgYmFzZTg1LWVuY29kZWQgYnl0ZSBhcnJheSIiIgorICAgIGdsb2JhbCBfYjg1ZGVjCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGFibGVzIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYjg1ZGVjIGlzIE5vbmU6CisgICAgICAgIF9iODVkZWMgPSBbTm9uZV0gKiAyNTYKKyAgICAgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKF9iODVhbHBoYWJldCk6CisgICAgICAgICAgICBfYjg1ZGVjW2NdID0gaQorCisgICAgYiA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKGIpCisgICAgcGFkZGluZyA9ICgtbGVuKGIpKSAlIDUKKyAgICBiID0gYiArIGInficgKiBwYWRkaW5nCisgICAgb3V0ID0gW10KKyAgICBwYWNrSSA9IHN0cnVjdC5TdHJ1Y3QoJyFJJykucGFjaworICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihiKSwgNSk6CisgICAgICAgIGNodW5rID0gYltpOmkgKyA1XQorICAgICAgICBhY2MgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIGNodW5rOgorICAgICAgICAgICAgICAgIGFjYyA9IGFjYyAqIDg1ICsgX2I4NWRlY1tjXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgZm9yIGosIGMgaW4gZW51bWVyYXRlKGNodW5rKToKKyAgICAgICAgICAgICAgICBpZiBfYjg1ZGVjW2NdIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2JhZCBiYXNlODUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uICVkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaSArIGopKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dC5hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Jhc2U4NSBvdmVyZmxvdyBpbiBodW5rIHN0YXJ0aW5nIGF0IGJ5dGUgJWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaSkgZnJvbSBOb25lCisKKyAgICByZXN1bHQgPSBiJycuam9pbihvdXQpCisgICAgaWYgcGFkZGluZzoKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CiAKICMgTGVnYWN5IGludGVyZmFjZS4gIFRoaXMgY29kZSBjb3VsZCBiZSBjbGVhbmVkIHVwIHNpbmNlIEkgZG9uJ3QgYmVsaWV2ZQogIyBiaW5hc2NpaSBoYXMgYW55IGxpbmUgbGVuZ3RoIGxpbWl0YXRpb25zLiAgSXQganVzdCBkb2Vzbid0IHNlZW0gd29ydGggaXQKQEAgLTMzNSwxMiArNTE0LDI2IEBACiAgICAgICAgIHMgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGxpbmUpCiAgICAgICAgIG91dHB1dC53cml0ZShzKQogCitkZWYgX2lucHV0X3R5cGVfY2hlY2socyk6CisgICAgdHJ5OgorICAgICAgICBtID0gbWVtb3J5dmlldyhzKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgorICAgICAgICBtc2cgPSAiZXhwZWN0ZWQgYnl0ZXMtbGlrZSBvYmplY3QsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKSBmcm9tIGVycgorICAgIGlmIG0uZm9ybWF0IG5vdCBpbiAoJ2MnLCAnYicsICdCJyk6CisgICAgICAgIG1zZyA9ICgiZXhwZWN0ZWQgc2luZ2xlIGJ5dGUgZWxlbWVudHMsIG5vdCAlciBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5mb3JtYXQsIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiBtLm5kaW0gIT0gMToKKyAgICAgICAgbXNnID0gKCJleHBlY3RlZCAxLUQgZGF0YSwgbm90ICVkLUQgZGF0YSBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5uZGltLCBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKIAogZGVmIGVuY29kZWJ5dGVzKHMpOgogICAgICIiIkVuY29kZSBhIGJ5dGVzdHJpbmcgaW50byBhIGJ5dGVzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSBsaW5lcwogICAgIG9mIGJhc2UtNjQgZGF0YS4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHBpZWNlcyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBNQVhCSU5TSVpFKToKICAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgTUFYQklOU0laRV0KQEAgLTM1Nyw4ICs1NTAsNyBAQAogCiBkZWYgZGVjb2RlYnl0ZXMocyk6CiAgICAgIiIiRGVjb2RlIGEgYnl0ZXN0cmluZyBvZiBiYXNlLTY0IGRhdGEgaW50byBhIGJ5dGVzdHJpbmcuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCisgICAgX2lucHV0X3R5cGVfY2hlY2socykKICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQogCiBkZWYgZGVjb2Rlc3RyaW5nKHMpOgpkaWZmIC0tZ2l0IGEvTGliL2JkYi5weSBiL0xpYi9iZGIucHkKaW5kZXggZGQxZjQyOC4uNjdhMDg0NiAxMDA2NDQKLS0tIGEvTGliL2JkYi5weQorKysgYi9MaWIvYmRiLnB5CkBAIC0zLDYgKzMsNyBAQAogaW1wb3J0IGZubWF0Y2gKIGltcG9ydCBzeXMKIGltcG9ydCBvcworZnJvbSBpbnNwZWN0IGltcG9ydCBDT19HRU5FUkFUT1IKIAogX19hbGxfXyA9IFsiQmRiUXVpdCIsICJCZGIiLCAiQnJlYWtwb2ludCJdCiAKQEAgLTc1LDI0ICs3Niw0OCBAQAogICAgICAgICBpZiBub3QgKHNlbGYuc3RvcF9oZXJlKGZyYW1lKSBvciBzZWxmLmJyZWFrX2FueXdoZXJlKGZyYW1lKSk6CiAgICAgICAgICAgICAjIE5vIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbgogICAgICAgICAgICAgcmV0dXJuICMgTm9uZQorICAgICAgICAjIElnbm9yZSBjYWxsIGV2ZW50cyBpbiBnZW5lcmF0b3IgZXhjZXB0IHdoZW4gc3RlcHBpbmcuCisgICAgICAgIGlmIHNlbGYuc3RvcGZyYW1lIGFuZCBmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICBzZWxmLnVzZXJfY2FsbChmcmFtZSwgYXJnKQogICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CiAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAKICAgICBkZWYgZGlzcGF0Y2hfcmV0dXJuKHNlbGYsIGZyYW1lLCBhcmcpOgogICAgICAgICBpZiBzZWxmLnN0b3BfaGVyZShmcmFtZSkgb3IgZnJhbWUgPT0gc2VsZi5yZXR1cm5mcmFtZToKKyAgICAgICAgICAgICMgSWdub3JlIHJldHVybiBldmVudHMgaW4gZ2VuZXJhdG9yIGV4Y2VwdCB3aGVuIHN0ZXBwaW5nLgorICAgICAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVfcmV0dXJuaW5nID0gZnJhbWUKICAgICAgICAgICAgICAgICBzZWxmLnVzZXJfcmV0dXJuKGZyYW1lLCBhcmcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVfcmV0dXJuaW5nID0gTm9uZQogICAgICAgICAgICAgaWYgc2VsZi5xdWl0dGluZzogcmFpc2UgQmRiUXVpdAorICAgICAgICAgICAgIyBUaGUgdXNlciBpc3N1ZWQgYSAnbmV4dCcgb3IgJ3VudGlsJyBjb21tYW5kLgorICAgICAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgaXMgZnJhbWUgYW5kIHNlbGYuc3RvcGxpbmVubyAhPSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oTm9uZSwgTm9uZSkKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgIGRlZiBkaXNwYXRjaF9leGNlcHRpb24oc2VsZiwgZnJhbWUsIGFyZyk6CiAgICAgICAgIGlmIHNlbGYuc3RvcF9oZXJlKGZyYW1lKToKKyAgICAgICAgICAgICMgV2hlbiBzdGVwcGluZyB3aXRoIG5leHQvdW50aWwvcmV0dXJuIGluIGEgZ2VuZXJhdG9yIGZyYW1lLCBza2lwCisgICAgICAgICAgICAjIHRoZSBpbnRlcm5hbCBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbiAod2l0aCBubyB0cmFjZWJhY2spCisgICAgICAgICAgICAjIHRyaWdnZXJlZCBieSBhIHN1Yml0ZXJhdG9yIHJ1biB3aXRoIHRoZSAneWllbGQgZnJvbScgc3RhdGVtZW50LgorICAgICAgICAgICAgaWYgbm90IChmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IKKyAgICAgICAgICAgICAgICAgICAgYW5kIGFyZ1swXSBpcyBTdG9wSXRlcmF0aW9uIGFuZCBhcmdbMl0gaXMgTm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi51c2VyX2V4Y2VwdGlvbihmcmFtZSwgYXJnKQorICAgICAgICAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKKyAgICAgICAgIyBTdG9wIGF0IHRoZSBTdG9wSXRlcmF0aW9uIG9yIEdlbmVyYXRvckV4aXQgZXhjZXB0aW9uIHdoZW4gdGhlIHVzZXIKKyAgICAgICAgIyBoYXMgc2V0IHN0b3BmcmFtZSBpbiBhIGdlbmVyYXRvciBieSBpc3N1aW5nIGEgcmV0dXJuIGNvbW1hbmQsIG9yIGEKKyAgICAgICAgIyBuZXh0L3VudGlsIGNvbW1hbmQgYXQgdGhlIGxhc3Qgc3RhdGVtZW50IGluIHRoZSBnZW5lcmF0b3IgYmVmb3JlIHRoZQorICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgZWxpZiAoc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lIGlzIG5vdCBzZWxmLnN0b3BmcmFtZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLnN0b3BmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IKKyAgICAgICAgICAgICAgICBhbmQgYXJnWzBdIGluIChTdG9wSXRlcmF0aW9uLCBHZW5lcmF0b3JFeGl0KSk6CiAgICAgICAgICAgICBzZWxmLnVzZXJfZXhjZXB0aW9uKGZyYW1lLCBhcmcpCiAgICAgICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CisKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgICMgTm9ybWFsbHkgZGVyaXZlZCBjbGFzc2VzIGRvbid0IG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcKQEAgLTExNSwxMCArMTQwLDggQEAKICAgICAgICAgICAgIGlmIHNlbGYuc3RvcGxpbmVubyA9PSAtMToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBmcmFtZS5mX2xpbmVubyA+PSBzZWxmLnN0b3BsaW5lbm8KLSAgICAgICAgd2hpbGUgZnJhbWUgaXMgbm90IE5vbmUgYW5kIGZyYW1lIGlzIG5vdCBzZWxmLnN0b3BmcmFtZToKLSAgICAgICAgICAgIGlmIGZyYW1lIGlzIHNlbGYuYm90ZnJhbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgIGlmIG5vdCBzZWxmLnN0b3BmcmFtZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIGJyZWFrX2hlcmUoc2VsZiwgZnJhbWUpOgpAQCAtMjA3LDcgKzIzMCwxMCBAQAogCiAgICAgZGVmIHNldF9yZXR1cm4oc2VsZiwgZnJhbWUpOgogICAgICAgICAiIiJTdG9wIHdoZW4gcmV0dXJuaW5nIGZyb20gdGhlIGdpdmVuIGZyYW1lLiIiIgotICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oZnJhbWUuZl9iYWNrLCBmcmFtZSkKKyAgICAgICAgaWYgZnJhbWUuZl9jb2RlLmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SOgorICAgICAgICAgICAgc2VsZi5fc2V0X3N0b3BpbmZvKGZyYW1lLCBOb25lLCAtMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhmcmFtZS5mX2JhY2ssIGZyYW1lKQogCiAgICAgZGVmIHNldF90cmFjZShzZWxmLCBmcmFtZT1Ob25lKToKICAgICAgICAgIiIiU3RhcnQgZGVidWdnaW5nIGZyb20gYGZyYW1lYC4KZGlmZiAtLWdpdCBhL0xpYi9iejIucHkgYi9MaWIvYnoyLnB5CmluZGV4IDFkZThmM2MuLjZmNDdiZmEgMTAwNjQ0Ci0tLSBhL0xpYi9iejIucHkKKysrIGIvTGliL2J6Mi5weQpAQCAtOSw3ICs5LDYgQEAKIAogX19hdXRob3JfXyA9ICJOYWRlZW0gVmF3ZGEgPG5hZGVlbS52YXdkYUBnbWFpbC5jb20+IgogCi1pbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBpbwogaW1wb3J0IHdhcm5pbmdzCiAKQEAgLTI4LDYgKzI3LDggQEAKIAogX0JVRkZFUl9TSVpFID0gODE5MgogCitfYnVpbHRpbl9vcGVuID0gb3BlbgorCiAKIGNsYXNzIEJaMkZpbGUoaW8uQnVmZmVyZWRJT0Jhc2UpOgogCkBAIC00MywxNiArNDQsMTcgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIG1vZGU9InIiLCBidWZmZXJpbmc9Tm9uZSwgY29tcHJlc3NsZXZlbD05KToKICAgICAgICAgIiIiT3BlbiBhIGJ6aXAyLWNvbXByZXNzZWQgZmlsZS4KIAotICAgICAgICBJZiBmaWxlbmFtZSBpcyBhIHN0ciBvciBieXRlcyBvYmplY3QsIGlzIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvCi0gICAgICAgIGJlIG9wZW5lZC4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBmaWxlIG9iamVjdCwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvCi0gICAgICAgIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KKyAgICAgICAgSWYgZmlsZW5hbWUgaXMgYSBzdHIgb3IgYnl0ZXMgb2JqZWN0LCBpdCBnaXZlcyB0aGUgbmFtZQorICAgICAgICBvZiB0aGUgZmlsZSB0byBiZSBvcGVuZWQuIE90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBvYmplY3QsCisgICAgICAgIHdoaWNoIHdpbGwgYmUgdXNlZCB0byByZWFkIG9yIHdyaXRlIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAKLSAgICAgICAgbW9kZSBjYW4gYmUgJ3InIGZvciByZWFkaW5nIChkZWZhdWx0KSwgJ3cnIGZvciAob3Zlcil3cml0aW5nLCBvciAnYScgZm9yCi0gICAgICAgIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyAncmInLCAnd2InLCBhbmQgJ2FiJy4KKyAgICAgICAgbW9kZSBjYW4gYmUgJ3InIGZvciByZWFkaW5nIChkZWZhdWx0KSwgJ3cnIGZvciAob3Zlcil3cml0aW5nLAorICAgICAgICAneCcgZm9yIGNyZWF0aW5nIGV4Y2x1c2l2ZWx5LCBvciAnYScgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuCisgICAgICAgIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyAncmInLCAnd2InLCAneGInLCBhbmQgJ2FiJy4KIAogICAgICAgICBidWZmZXJpbmcgaXMgaWdub3JlZC4gSXRzIHVzZSBpcyBkZXByZWNhdGVkLgogCi0gICAgICAgIElmIG1vZGUgaXMgJ3cnIG9yICdhJywgY29tcHJlc3NsZXZlbCBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAxCisgICAgICAgIElmIG1vZGUgaXMgJ3cnLCAneCcgb3IgJ2EnLCBjb21wcmVzc2xldmVsIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDEKICAgICAgICAgYW5kIDkgc3BlY2lmeWluZyB0aGUgbGV2ZWwgb2YgY29tcHJlc3Npb246IDEgcHJvZHVjZXMgdGhlIGxlYXN0CiAgICAgICAgIGNvbXByZXNzaW9uLCBhbmQgOSAoZGVmYXVsdCkgcHJvZHVjZXMgdGhlIG1vc3QgY29tcHJlc3Npb24uCiAKQEAgLTg1LDE1ICs4NywxOSBAQAogICAgICAgICAgICAgbW9kZSA9ICJ3YiIKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCiAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsKQorICAgICAgICBlbGlmIG1vZGUgaW4gKCJ4IiwgInhiIik6CisgICAgICAgICAgICBtb2RlID0gInhiIgorICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKKyAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWwpCiAgICAgICAgIGVsaWYgbW9kZSBpbiAoImEiLCAiYWIiKToKICAgICAgICAgICAgIG1vZGUgPSAiYWIiCiAgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQogICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IEJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbW9kZTogeyFyfSIuZm9ybWF0KG1vZGUpKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtb2RlOiAlciIgJSAobW9kZSwpKQogCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZW5hbWUsIChzdHIsIGJ5dGVzKSk6Ci0gICAgICAgICAgICBzZWxmLl9mcCA9IGJ1aWx0aW5zLm9wZW4oZmlsZW5hbWUsIG1vZGUpCisgICAgICAgICAgICBzZWxmLl9mcCA9IF9idWlsdGluX29wZW4oZmlsZW5hbWUsIG1vZGUpCiAgICAgICAgICAgICBzZWxmLl9jbG9zZWZwID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGVfY29kZQogICAgICAgICBlbGlmIGhhc2F0dHIoZmlsZW5hbWUsICJyZWFkIikgb3IgaGFzYXR0cihmaWxlbmFtZSwgIndyaXRlIik6CkBAIC0xODksMTUgKzE5NSwxNyBAQAogCiAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKKyAgICAgICAgICAgICAgICAgICAgIyBFbmQtb2Ytc3RyZWFtIG1hcmtlciBhbmQgZW5kIG9mIGZpbGUuIFdlJ3JlIGdvb2QuCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFEX0VPRgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaXplID0gc2VsZi5fcG9zCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgUHJvYmxlbSAtIHdlIHdlcmUgZXhwZWN0aW5nIG1vcmUgY29tcHJlc3NlZCBkYXRhLgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kLW9mLXN0cmVhbSBtYXJrZXIgd2FzIHJlYWNoZWQiKQogCi0gICAgICAgICAgICAjIENvbnRpbnVlIHRvIG5leHQgc3RyZWFtLgogICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKKyAgICAgICAgICAgICAgICAjIENvbnRpbnVlIHRvIG5leHQgc3RyZWFtLgogICAgICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IEJaMkRlY29tcHJlc3NvcigpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhyYXdibG9jaykKQEAgLTQxOSw3ICs0MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2FsbChyZXR1cm5fZGF0YT1GYWxzZSkKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzZWxmLl9zaXplICsgb2Zmc2V0CiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIHdoZW5jZToge30iLmZvcm1hdCh3aGVuY2UpKQorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIHdoZW5jZTogJXMiICUgKHdoZW5jZSwpKQogCiAgICAgICAgICAgICAjIE1ha2UgaXQgc28gdGhhdCBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwIGZvcndhcmQuCiAgICAgICAgICAgICBpZiBvZmZzZXQgPCBzZWxmLl9wb3M6CkBAIC00NDMsMjAgKzQ1MSwyMCBAQAogICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSk6CiAgICAgIiIiT3BlbiBhIGJ6aXAyLWNvbXByZXNzZWQgZmlsZSBpbiBiaW5hcnkgb3IgdGV4dCBtb2RlLgogCi0gICAgVGhlIGZpbGVuYW1lIGFyZ3VtZW50IGNhbiBiZSBhbiBhY3R1YWwgZmlsZW5hbWUgKGEgc3RyIG9yIGJ5dGVzIG9iamVjdCksIG9yCi0gICAgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgorICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcworICAgIG9iamVjdCksIG9yIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgImEiIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLAotICAgIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUKLSAgICBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJ4IiwgInhiIiwgImEiIG9yCisgICAgImFiIiBmb3IgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLgorICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgInJiIiwgYW5kIHRoZSBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KIAotICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBCWjJGaWxlIGNvbnN0cnVjdG9yOgotICAgIEJaMkZpbGUoZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzbGV2ZWwpLiBJbiB0aGlzIGNhc2UsIHRoZSBlbmNvZGluZywgZXJyb3JzCi0gICAgYW5kIG5ld2xpbmUgYXJndW1lbnRzIG11c3Qgbm90IGJlIHByb3ZpZGVkLgorICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBCWjJGaWxlCisgICAgY29uc3RydWN0b3I6IEJaMkZpbGUoZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzbGV2ZWwpLiBJbiB0aGlzIGNhc2UsCisgICAgdGhlIGVuY29kaW5nLCBlcnJvcnMgYW5kIG5ld2xpbmUgYXJndW1lbnRzIG11c3Qgbm90IGJlIHByb3ZpZGVkLgogCiAgICAgRm9yIHRleHQgbW9kZSwgYSBCWjJGaWxlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgd3JhcHBlZCBpbiBhbgotICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvciBoYW5kbGluZwotICAgIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCisgICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCisgICAgaGFuZGxpbmcgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KIAogICAgICIiIgogICAgIGlmICJ0IiBpbiBtb2RlOgpkaWZmIC0tZ2l0IGEvTGliL2NQcm9maWxlLnB5IGIvTGliL2NQcm9maWxlLnB5CmluZGV4IGMyNGQ0NWIuLjExODQzODUgMTAwNzU1Ci0tLSBhL0xpYi9jUHJvZmlsZS5weQorKysgYi9MaWIvY1Byb2ZpbGUucHkKQEAgLTcsNTQgKzcsMjAgQEAKIF9fYWxsX18gPSBbInJ1biIsICJydW5jdHgiLCAiUHJvZmlsZSJdCiAKIGltcG9ydCBfbHNwcm9mCitpbXBvcnQgcHJvZmlsZSBhcyBfcHlwcm9maWxlCiAKICMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAjIFNpbXBsZSBpbnRlcmZhY2UKIAogZGVmIHJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lPU5vbmUsIHNvcnQ9LTEpOgotICAgICIiIlJ1biBzdGF0ZW1lbnQgdW5kZXIgcHJvZmlsZXIgb3B0aW9uYWxseSBzYXZpbmcgcmVzdWx0cyBpbiBmaWxlbmFtZQotCi0gICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlCi0gICAgImV4ZWMiIHN0YXRlbWVudCwgYW5kIGFuIG9wdGlvbmFsIGZpbGUgbmFtZS4gIEluIGFsbCBjYXNlcyB0aGlzCi0gICAgcm91dGluZSBhdHRlbXB0cyB0byAiZXhlYyIgaXRzIGZpcnN0IGFyZ3VtZW50IGFuZCBnYXRoZXIgcHJvZmlsaW5nCi0gICAgc3RhdGlzdGljcyBmcm9tIHRoZSBleGVjdXRpb24uIElmIG5vIGZpbGUgbmFtZSBpcyBwcmVzZW50LCB0aGVuIHRoaXMKLSAgICBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IHByaW50cyBhIHNpbXBsZSBwcm9maWxpbmcgcmVwb3J0LCBzb3J0ZWQgYnkgdGhlCi0gICAgc3RhbmRhcmQgbmFtZSBzdHJpbmcgKGZpbGUvbGluZS9mdW5jdGlvbi1uYW1lKSB0aGF0IGlzIHByZXNlbnRlZCBpbgotICAgIGVhY2ggbGluZS4KLSAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgcmVzdWx0ID0gTm9uZQotICAgIHRyeToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcHJvZiA9IHByb2YucnVuKHN0YXRlbWVudCkKLSAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgICAgICBwYXNzCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXN1bHQgPSBwcm9mLnByaW50X3N0YXRzKHNvcnQpCi0gICAgcmV0dXJuIHJlc3VsdAorICAgIHJldHVybiBfcHlwcm9maWxlLl9VdGlscyhQcm9maWxlKS5ydW4oc3RhdGVtZW50LCBmaWxlbmFtZSwgc29ydCkKIAogZGVmIHJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6Ci0gICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciwgc3VwcGx5aW5nIHlvdXIgb3duIGdsb2JhbHMgYW5kIGxvY2FscywKLSAgICBvcHRpb25hbGx5IHNhdmluZyByZXN1bHRzIGluIGZpbGVuYW1lLgorICAgIHJldHVybiBfcHlwcm9maWxlLl9VdGlscyhQcm9maWxlKS5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgc29ydCkKIAotICAgIHN0YXRlbWVudCBhbmQgZmlsZW5hbWUgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgcHJvZmlsZS5ydW4KLSAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgcmVzdWx0ID0gTm9uZQotICAgIHRyeToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcHJvZiA9IHByb2YucnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzKQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgICAgIHBhc3MKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2YucHJpbnRfc3RhdHMoc29ydCkKLSAgICByZXR1cm4gcmVzdWx0CitydW4uX19kb2NfXyA9IF9weXByb2ZpbGUucnVuLl9fZG9jX18KK3J1bmN0eC5fX2RvY19fID0gX3B5cHJvZmlsZS5ydW5jdHguX19kb2NfXwogCiAjIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogCkBAIC03NywxMCArNDMsOSBAQAogCiAgICAgZGVmIGR1bXBfc3RhdHMoc2VsZiwgZmlsZSk6CiAgICAgICAgIGltcG9ydCBtYXJzaGFsCi0gICAgICAgIGYgPSBvcGVuKGZpbGUsICd3YicpCi0gICAgICAgIHNlbGYuY3JlYXRlX3N0YXRzKCkKLSAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3N0YXRzKCkKKyAgICAgICAgICAgIG1hcnNoYWwuZHVtcChzZWxmLnN0YXRzLCBmKQogCiAgICAgZGVmIGNyZWF0ZV9zdGF0cyhzZWxmKToKICAgICAgICAgc2VsZi5kaXNhYmxlKCkKZGlmZiAtLWdpdCBhL0xpYi9jZ2kucHkgYi9MaWIvY2dpLnB5CmluZGV4IDBmNTBkMGUuLjFlZjc4MGMgMTAwNzU1Ci0tLSBhL0xpYi9jZ2kucHkKKysrIGIvTGliL2NnaS5weQpAQCAtODIsNyArODIsNyBAQAogICAgIGlmIGxvZ2ZpbGUgYW5kIG5vdCBsb2dmcDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbG9nZnAgPSBvcGVuKGxvZ2ZpbGUsICJhIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgIGlmIG5vdCBsb2dmcDoKICAgICAgICAgbG9nID0gbm9sb2cKQEAgLTU2MCw2ICs1NjAsMTIgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucmVhZF9zaW5nbGUoKQogCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uLiIiIgogICAgICAgICByZXR1cm4gIkZpZWxkU3RvcmFnZSglciwgJXIsICVyKSIgJSAoCkBAIC02ODAsNyArNjg2LDYgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nLCBlcnJvcnM9c2VsZi5lcnJvcnMpCiAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBxdWVyeToKICAgICAgICAgICAgICAgICBzZWxmLmxpc3QuYXBwZW5kKE1pbmlGaWVsZFN0b3JhZ2Uoa2V5LCB2YWx1ZSkpCi0gICAgICAgICAgICBGaWVsZFN0b3JhZ2VDbGFzcyA9IE5vbmUKIAogICAgICAgICBrbGFzcyA9IHNlbGYuRmllbGRTdG9yYWdlQ2xhc3Mgb3Igc2VsZi5fX2NsYXNzX18KICAgICAgICAgZmlyc3RfbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoKSAjIGJ5dGVzCkBAIC05NjgsOCArOTczLDggQEAKICAgICBwcmludCgiPEgzPkN1cnJlbnQgV29ya2luZyBEaXJlY3Rvcnk6PC9IMz4iKQogICAgIHRyeToKICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgotICAgICAgICBwcmludCgib3MuZXJyb3I6IiwgaHRtbC5lc2NhcGUoc3RyKG1zZykpKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKKyAgICAgICAgcHJpbnQoIk9TRXJyb3I6IiwgaHRtbC5lc2NhcGUoc3RyKG1zZykpKQogICAgIGVsc2U6CiAgICAgICAgIHByaW50KGh0bWwuZXNjYXBlKHB3ZCkpCiAgICAgcHJpbnQoKQpAQCAtMTA0MCw3ICsxMDQ1LDcgQEAKICAgICByZXR1cm4gcwogCiAKLWRlZiB2YWxpZF9ib3VuZGFyeShzLCBfdmJfcGF0dGVybj1Ob25lKToKK2RlZiB2YWxpZF9ib3VuZGFyeShzKToKICAgICBpbXBvcnQgcmUKICAgICBpZiBpc2luc3RhbmNlKHMsIGJ5dGVzKToKICAgICAgICAgX3ZiX3BhdHRlcm4gPSBiIl5bIC1+XXswLDIwMH1bIS1+XSQiCmRpZmYgLS1naXQgYS9MaWIvY2h1bmsucHkgYi9MaWIvY2h1bmsucHkKaW5kZXggNTg2M2VkMC4uZGM5MGE3NSAxMDA2NDQKLS0tIGEvTGliL2NodW5rLnB5CisrKyBiL0xpYi9jaHVuay5weQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBzZWxmLnNpemVfcmVhZCA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5vZmZzZXQgPSBzZWxmLmZpbGUudGVsbCgpCi0gICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIElPRXJyb3IpOgorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuc2Vla2FibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5zZWVrYWJsZSA9IFRydWUKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5zZWVrYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCBzZWVrIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbm5vdCBzZWVrIikKICAgICAgICAgaWYgd2hlbmNlID09IDE6CiAgICAgICAgICAgICBwb3MgPSBwb3MgKyBzZWxmLnNpemVfcmVhZAogICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5maWxlLnNlZWsobiwgMSkKICAgICAgICAgICAgICAgICBzZWxmLnNpemVfcmVhZCA9IHNlbGYuc2l6ZV9yZWFkICsgbgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHdoaWxlIHNlbGYuc2l6ZV9yZWFkIDwgc2VsZi5jaHVua3NpemU6CiAgICAgICAgICAgICBuID0gbWluKDgxOTIsIHNlbGYuY2h1bmtzaXplIC0gc2VsZi5zaXplX3JlYWQpCmRpZmYgLS1naXQgYS9MaWIvY29kZS5weSBiL0xpYi9jb2RlLnB5CmluZGV4IDkwMjBhYWIuLmY4MTg0YjYgMTAwNjQ0Ci0tLSBhL0xpYi9jb2RlLnB5CisrKyBiL0xpYi9jb2RlLnB5CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgIHNlbGYud3JpdGUoIlB5dGhvbiAlcyBvbiAlc1xuJXNcbiglcylcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAoc3lzLnZlcnNpb24sIHN5cy5wbGF0Zm9ybSwgY3BydCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiBiYW5uZXI6CiAgICAgICAgICAgICBzZWxmLndyaXRlKCIlc1xuIiAlIHN0cihiYW5uZXIpKQogICAgICAgICBtb3JlID0gMAogICAgICAgICB3aGlsZSAxOgpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5IGIvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CmluZGV4IGQ3MzcyOTUuLmQ5OTNmZTAgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKQEAgLTMsMTYgKzMsMTYgQEAKIAogIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGNvbnRpbnVlIHRvIG1ha2UgdGhlIGNvbGxlY3Rpb25zIEFCQ3MKICMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb25zIG1vZHVsZS4KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCAqCi1pbXBvcnQgY29sbGVjdGlvbnMuYWJjCi1fX2FsbF9fICs9IGNvbGxlY3Rpb25zLmFiYy5fX2FsbF9fCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0ICoKK2ltcG9ydCBfY29sbGVjdGlvbnNfYWJjCitfX2FsbF9fICs9IF9jb2xsZWN0aW9uc19hYmMuX19hbGxfXwogCiBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIGRlZmF1bHRkaWN0CiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyIGFzIF9pdGVtZ2V0dGVyLCBlcSBhcyBfZXEKIGZyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkIGFzIF9pc2tleXdvcmQKIGltcG9ydCBzeXMgYXMgX3N5cwogaW1wb3J0IGhlYXBxIGFzIF9oZWFwcQotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eSBhcyBfcHJveHkKK2Zyb20gX3dlYWtyZWYgaW1wb3J0IHByb3h5IGFzIF9wcm94eQogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdCBhcyBfcmVwZWF0LCBjaGFpbiBhcyBfY2hhaW4sIHN0YXJtYXAgYXMgX3N0YXJtYXAKIGZyb20gcmVwcmxpYiBpbXBvcnQgcmVjdXJzaXZlX3JlcHIgYXMgX3JlY3Vyc2l2ZV9yZXByCiAKQEAgLTE5OSwxMyArMTk5LDEwIEBACiAKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgJ1JldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcnCi0gICAgICAgIGl0ZW1zID0gW1trLCBzZWxmW2tdXSBmb3IgayBpbiBzZWxmXQogICAgICAgICBpbnN0X2RpY3QgPSB2YXJzKHNlbGYpLmNvcHkoKQogICAgICAgICBmb3IgayBpbiB2YXJzKE9yZGVyZWREaWN0KCkpOgogICAgICAgICAgICAgaW5zdF9kaWN0LnBvcChrLCBOb25lKQotICAgICAgICBpZiBpbnN0X2RpY3Q6Ci0gICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKCksIGluc3RfZGljdCBvciBOb25lLCBOb25lLCBpdGVyKHNlbGYuaXRlbXMoKSkKIAogICAgIGRlZiBjb3B5KHNlbGYpOgogICAgICAgICAnb2QuY29weSgpIC0+IGEgc2hhbGxvdyBjb3B5IG9mIG9kJwpAQCAtMjc3LDkgKzI3NCw3IEBACiAgICAgICAgIHJldHVybiBPcmRlcmVkRGljdCh6aXAoc2VsZi5fZmllbGRzLCBzZWxmKSkKIAogICAgIGRlZiBfYXNkaWN0KHNlbGYpOgotICAgICAgICAnJydSZXR1cm4gYSBuZXcgT3JkZXJlZERpY3Qgd2hpY2ggbWFwcyBmaWVsZCBuYW1lcyB0byB0aGVpciB2YWx1ZXMuCi0gICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIG9ic29sZXRlLiAgVXNlIHZhcnMobnQpIG9yIG50Ll9fZGljdF9fIGluc3RlYWQuCi0gICAgICAgICcnJworICAgICAgICAnUmV0dXJuIGEgbmV3IE9yZGVyZWREaWN0IHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzLicKICAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18KIAogICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKQEAgLTMyOCw2ICszMjMsNyBAQAogICAgIGlmIGlzaW5zdGFuY2UoZmllbGRfbmFtZXMsIHN0cik6CiAgICAgICAgIGZpZWxkX25hbWVzID0gZmllbGRfbmFtZXMucmVwbGFjZSgnLCcsICcgJykuc3BsaXQoKQogICAgIGZpZWxkX25hbWVzID0gbGlzdChtYXAoc3RyLCBmaWVsZF9uYW1lcykpCisgICAgdHlwZW5hbWUgPSBzdHIodHlwZW5hbWUpCiAgICAgaWYgcmVuYW1lOgogICAgICAgICBzZWVuID0gc2V0KCkKICAgICAgICAgZm9yIGluZGV4LCBuYW1lIGluIGVudW1lcmF0ZShmaWVsZF9uYW1lcyk6CkBAIC0zMzgsNiArMzM0LDggQEAKICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lc1tpbmRleF0gPSAnXyVkJyAlIGluZGV4CiAgICAgICAgICAgICBzZWVuLmFkZChuYW1lKQogICAgIGZvciBuYW1lIGluIFt0eXBlbmFtZV0gKyBmaWVsZF9uYW1lczoKKyAgICAgICAgaWYgdHlwZShuYW1lKSAhPSBzdHI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ1R5cGUgbmFtZXMgYW5kIGZpZWxkIG5hbWVzIG11c3QgYmUgc3RyaW5ncycpCiAgICAgICAgIGlmIG5vdCBuYW1lLmlzaWRlbnRpZmllcigpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVHlwZSBuYW1lcyBhbmQgZmllbGQgbmFtZXMgbXVzdCBiZSB2YWxpZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZGVudGlmaWVyczogJXInICUgbmFtZSkKQEAgLTgyMiw5ICs4MjAsMTQgQEAKIAogICAgIF9fY29weV9fID0gY29weQogCi0gICAgZGVmIG5ld19jaGlsZChzZWxmKTogICAgICAgICAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wdXNoKCkKLSAgICAgICAgJ05ldyBDaGFpbk1hcCB3aXRoIGEgbmV3IGRpY3QgZm9sbG93ZWQgYnkgYWxsIHByZXZpb3VzIG1hcHMuJwotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oe30sICpzZWxmLm1hcHMpCisgICAgZGVmIG5ld19jaGlsZChzZWxmLCBtPU5vbmUpOiAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wdXNoKCkKKyAgICAgICAgJycnCisgICAgICAgIE5ldyBDaGFpbk1hcCB3aXRoIGEgbmV3IG1hcCBmb2xsb3dlZCBieSBhbGwgcHJldmlvdXMgbWFwcy4gSWYgbm8KKyAgICAgICAgbWFwIGlzIHByb3ZpZGVkLCBhbiBlbXB0eSBkaWN0IGlzIHVzZWQuCisgICAgICAgICcnJworICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICBtID0ge30KKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKG0sICpzZWxmLm1hcHMpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgcGFyZW50cyhzZWxmKTogICAgICAgICAgICAgICAgICAgICAgICAgICMgbGlrZSBEamFuZ28ncyBDb250ZXh0LnBvcCgpCmRpZmYgLS1naXQgYS9MaWIvY29sbGVjdGlvbnMvYWJjLnB5IGIvTGliL2NvbGxlY3Rpb25zL2FiYy5weQppbmRleCA3OTM5MjY4Li44OTE2MDBkIDEwMDY0NAotLS0gYS9MaWIvY29sbGVjdGlvbnMvYWJjLnB5CisrKyBiL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkKQEAgLTEsNzI4ICsxLDIgQEAKLSMgQ29weXJpZ2h0IDIwMDcgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLQotIiIiQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBmb3IgY29sbGVjdGlvbnMsIGFjY29yZGluZyB0byBQRVAgMzExOS4KLQotVW5pdCB0ZXN0cyBhcmUgaW4gdGVzdF9jb2xsZWN0aW9ucy4KLSIiIgotCi1mcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKLWltcG9ydCBzeXMKLQotX19hbGxfXyA9IFsiSGFzaGFibGUiLCAiSXRlcmFibGUiLCAiSXRlcmF0b3IiLAotICAgICAgICAgICAiU2l6ZWQiLCAiQ29udGFpbmVyIiwgIkNhbGxhYmxlIiwKLSAgICAgICAgICAgIlNldCIsICJNdXRhYmxlU2V0IiwKLSAgICAgICAgICAgIk1hcHBpbmciLCAiTXV0YWJsZU1hcHBpbmciLAotICAgICAgICAgICAiTWFwcGluZ1ZpZXciLCAiS2V5c1ZpZXciLCAiSXRlbXNWaWV3IiwgIlZhbHVlc1ZpZXciLAotICAgICAgICAgICAiU2VxdWVuY2UiLCAiTXV0YWJsZVNlcXVlbmNlIiwKLSAgICAgICAgICAgIkJ5dGVTdHJpbmciLAotICAgICAgICAgICBdCi0KLSMgUHJpdmF0ZSBsaXN0IG9mIHR5cGVzIHRoYXQgd2Ugd2FudCB0byByZWdpc3RlciB3aXRoIHRoZSB2YXJpb3VzIEFCQ3MKLSMgc28gdGhhdCB0aGV5IHdpbGwgcGFzcyB0ZXN0cyBsaWtlOgotIyAgICAgICBpdCA9IGl0ZXIoc29tZWJ5dGVhcnJheSkKLSMgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaXQsIEl0ZXJhYmxlKQotIyBOb3RlOiAgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zLCB0aGVzZSB0eXBlcyBtYW55IG5vdCBiZSBkaXN0aW5jdAotIyBhbmQgdGhleSBtYWtlIGhhdmUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHR5cGVzIHRoYXQKLSMgYXJlIG5vdCBpbmNsdWRlZCBvbiB0aGlzIGxpc3QuCi1ieXRlc19pdGVyYXRvciA9IHR5cGUoaXRlcihiJycpKQotYnl0ZWFycmF5X2l0ZXJhdG9yID0gdHlwZShpdGVyKGJ5dGVhcnJheSgpKSkKLSNjYWxsYWJsZV9pdGVyYXRvciA9ID8/PwotZGljdF9rZXlpdGVyYXRvciA9IHR5cGUoaXRlcih7fS5rZXlzKCkpKQotZGljdF92YWx1ZWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LnZhbHVlcygpKSkKLWRpY3RfaXRlbWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9Lml0ZW1zKCkpKQotbGlzdF9pdGVyYXRvciA9IHR5cGUoaXRlcihbXSkpCi1saXN0X3JldmVyc2VpdGVyYXRvciA9IHR5cGUoaXRlcihyZXZlcnNlZChbXSkpKQotcmFuZ2VfaXRlcmF0b3IgPSB0eXBlKGl0ZXIocmFuZ2UoMCkpKQotc2V0X2l0ZXJhdG9yID0gdHlwZShpdGVyKHNldCgpKSkKLXN0cl9pdGVyYXRvciA9IHR5cGUoaXRlcigiIikpCi10dXBsZV9pdGVyYXRvciA9IHR5cGUoaXRlcigoKSkpCi16aXBfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoemlwKCkpKQotIyMgdmlld3MgIyMKLWRpY3Rfa2V5cyA9IHR5cGUoe30ua2V5cygpKQotZGljdF92YWx1ZXMgPSB0eXBlKHt9LnZhbHVlcygpKQotZGljdF9pdGVtcyA9IHR5cGUoe30uaXRlbXMoKSkKLSMjIG1pc2MgIyMKLW1hcHBpbmdwcm94eSA9IHR5cGUodHlwZS5fX2RpY3RfXykKLQotCi0jIyMgT05FLVRSSUNLIFBPTklFUyAjIyMKLQotY2xhc3MgSGFzaGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDAKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBIYXNoYWJsZToKLSAgICAgICAgICAgIGZvciBCIGluIEMuX19tcm9fXzoKLSAgICAgICAgICAgICAgICBpZiAiX19oYXNoX18iIGluIEIuX19kaWN0X186Ci0gICAgICAgICAgICAgICAgICAgIGlmIEIuX19kaWN0X19bIl9faGFzaF9fIl06Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBJdGVyYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICB3aGlsZSBGYWxzZToKLSAgICAgICAgICAgIHlpZWxkIE5vbmUKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBJdGVyYWJsZToKLSAgICAgICAgICAgIGlmIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBJdGVyYXRvcihJdGVyYWJsZSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICAnUmV0dXJuIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgaXRlcmF0b3IuIFdoZW4gZXhoYXVzdGVkLCByYWlzZSBTdG9wSXRlcmF0aW9uJwotICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgSXRlcmF0b3I6Ci0gICAgICAgICAgICBpZiAoYW55KCJfX25leHRfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pIGFuZAotICAgICAgICAgICAgICAgIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLUl0ZXJhdG9yLnJlZ2lzdGVyKGJ5dGVzX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZWFycmF5X2l0ZXJhdG9yKQotI0l0ZXJhdG9yLnJlZ2lzdGVyKGNhbGxhYmxlX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9rZXlpdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfdmFsdWVpdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfaXRlbWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGxpc3RfcmV2ZXJzZWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIocmFuZ2VfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihzZXRfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihzdHJfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3Rlcih0dXBsZV9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHppcF9pdGVyYXRvcikKLQotY2xhc3MgU2l6ZWQobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gMAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIFNpemVkOgotICAgICAgICAgICAgaWYgYW55KCJfX2xlbl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgQ29udGFpbmVyKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBDb250YWluZXI6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fY29udGFpbnNfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIENhbGxhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIENhbGxhYmxlOgotICAgICAgICAgICAgaWYgYW55KCJfX2NhbGxfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLSMjIyBTRVRTICMjIwotCi0KLWNsYXNzIFNldChTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICAiIiJBIHNldCBpcyBhIGZpbml0ZSwgaXRlcmFibGUgY29udGFpbmVyLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19jb250YWluc19fLCBfX2l0ZXJfXyBhbmQgX19sZW5fXy4KLQotICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQotICAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCBhbGwgeW91IGhhdmUgdG8gZG8gaXMgcmVkZWZpbmUgX19sZV9fIGFuZAotICAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgotICAgICIiIgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICBpZiBsZW4oc2VsZikgPiBsZW4ob3RoZXIpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGZvciBlbGVtIGluIHNlbGY6Ci0gICAgICAgICAgICBpZiBlbGVtIG5vdCBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gbGVuKHNlbGYpIDwgbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCi0KLSAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG90aGVyLl9fbHRfXyhzZWxmKQotCi0gICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBvdGhlci5fX2xlX18oc2VsZikKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gbGVuKHNlbGYpID09IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoY2xzLCBpdCk6Ci0gICAgICAgICcnJ0NvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgZnJvbSBhbnkgaXRlcmFibGUgaW5wdXQuCi0KLSAgICAgICAgTXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGUgY2xhc3MgY29uc3RydWN0b3Igc2lnbmF0dXJlCi0gICAgICAgIGRvZXMgbm90IGFjY2VwdCBhbiBpdGVyYWJsZSBmb3IgYW4gaW5wdXQuCi0gICAgICAgICcnJwotICAgICAgICByZXR1cm4gY2xzKGl0KQotCi0gICAgZGVmIF9fYW5kX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBvdGhlciBpZiB2YWx1ZSBpbiBzZWxmKQotCi0gICAgZGVmIGlzZGlzam9pbnQoc2VsZiwgb3RoZXIpOgotICAgICAgICAnUmV0dXJuIFRydWUgaWYgdHdvIHNldHMgaGF2ZSBhIG51bGwgaW50ZXJzZWN0aW9uLicKLSAgICAgICAgZm9yIHZhbHVlIGluIG90aGVyOgotICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfX29yX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGNoYWluID0gKGUgZm9yIHMgaW4gKHNlbGYsIG90aGVyKSBmb3IgZSBpbiBzKQotICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZShjaGFpbikKLQotICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQotICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gc2VsZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBub3QgaW4gb3RoZXIpCi0KLSAgICBkZWYgX194b3JfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgICAgIG90aGVyID0gc2VsZi5fZnJvbV9pdGVyYWJsZShvdGhlcikKLSAgICAgICAgcmV0dXJuIChzZWxmIC0gb3RoZXIpIHwgKG90aGVyIC0gc2VsZikKLQotICAgIGRlZiBfaGFzaChzZWxmKToKLSAgICAgICAgIiIiQ29tcHV0ZSB0aGUgaGFzaCB2YWx1ZSBvZiBhIHNldC4KLQotICAgICAgICBOb3RlIHRoYXQgd2UgZG9uJ3QgZGVmaW5lIF9faGFzaF9fOiBub3QgYWxsIHNldHMgYXJlIGhhc2hhYmxlLgotICAgICAgICBCdXQgaWYgeW91IGRlZmluZSBhIGhhc2hhYmxlIHNldCB0eXBlLCBpdHMgX19oYXNoX18gc2hvdWxkCi0gICAgICAgIGNhbGwgdGhpcyBmdW5jdGlvbi4KLQotICAgICAgICBUaGlzIG11c3QgYmUgY29tcGF0aWJsZSBfX2VxX18uCi0KLSAgICAgICAgQWxsIHNldHMgb3VnaHQgdG8gY29tcGFyZSBlcXVhbCBpZiB0aGV5IGNvbnRhaW4gdGhlIHNhbWUKLSAgICAgICAgZWxlbWVudHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhbmQKLSAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzOyBzbyB0aGVyZSdzIG5vdCBtdWNoCi0gICAgICAgIGZyZWVkb20gZm9yIF9fZXFfXyBvciBfX2hhc2hfXy4gIFdlIG1hdGNoIHRoZSBhbGdvcml0aG0gdXNlZAotICAgICAgICBieSB0aGUgYnVpbHQtaW4gZnJvemVuc2V0IHR5cGUuCi0gICAgICAgICIiIgotICAgICAgICBNQVggPSBzeXMubWF4c2l6ZQotICAgICAgICBNQVNLID0gMiAqIE1BWCArIDEKLSAgICAgICAgbiA9IGxlbihzZWxmKQotICAgICAgICBoID0gMTkyNzg2ODIzNyAqIChuICsgMSkKLSAgICAgICAgaCAmPSBNQVNLCi0gICAgICAgIGZvciB4IGluIHNlbGY6Ci0gICAgICAgICAgICBoeCA9IGhhc2goeCkKLSAgICAgICAgICAgIGggXj0gKGh4IF4gKGh4IDw8IDE2KSBeIDg5ODY5NzQ3KSAgKiAzNjQ0Nzk4MTY3Ci0gICAgICAgICAgICBoICY9IE1BU0sKLSAgICAgICAgaCA9IGggKiA2OTA2OSArIDkwNzEzMzkyMwotICAgICAgICBoICY9IE1BU0sKLSAgICAgICAgaWYgaCA+IE1BWDoKLSAgICAgICAgICAgIGggLT0gTUFTSyArIDEKLSAgICAgICAgaWYgaCA9PSAtMToKLSAgICAgICAgICAgIGggPSA1OTA5MjM3MTMKLSAgICAgICAgcmV0dXJuIGgKLQotU2V0LnJlZ2lzdGVyKGZyb3plbnNldCkKLQotCi1jbGFzcyBNdXRhYmxlU2V0KFNldCk6Ci0gICAgIiIiQSBtdXRhYmxlIHNldCBpcyBhIGZpbml0ZSwgaXRlcmFibGUgY29udGFpbmVyLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19jb250YWluc19fLCBfX2l0ZXJfXywgX19sZW5fXywKLSAgICBhZGQoKSwgYW5kIGRpc2NhcmQoKS4KLQotICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQotICAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCBhbGwgeW91IGhhdmUgdG8gZG8gaXMgcmVkZWZpbmUgX19sZV9fIGFuZAotICAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgotICAgICIiIgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBhZGQoc2VsZiwgdmFsdWUpOgotICAgICAgICAiIiJBZGQgYW4gZWxlbWVudC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGRpc2NhcmQoc2VsZiwgdmFsdWUpOgotICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gIERvIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYgYWJzZW50LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgIiIiUmVtb3ZlIGFuIGVsZW1lbnQuIElmIG5vdCBhIG1lbWJlciwgcmFpc2UgYSBLZXlFcnJvci4iIiIKLSAgICAgICAgaWYgdmFsdWUgbm90IGluIHNlbGY6Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcih2YWx1ZSkKLSAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotCi0gICAgZGVmIHBvcChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBwb3BwZWQgdmFsdWUuICBSYWlzZSBLZXlFcnJvciBpZiBlbXB0eS4iIiIKLSAgICAgICAgaXQgPSBpdGVyKHNlbGYpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHZhbHVlID0gbmV4dChpdCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcgotICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgIHJldHVybiB2YWx1ZQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICAiIiJUaGlzIGlzIHNsb3cgKGNyZWF0ZXMgTiBuZXcgaXRlcmF0b3JzISkgYnV0IGVmZmVjdGl2ZS4iIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBfX2lvcl9fKHNlbGYsIGl0KToKLSAgICAgICAgZm9yIHZhbHVlIGluIGl0OgotICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19pYW5kX18oc2VsZiwgaXQpOgotICAgICAgICBmb3IgdmFsdWUgaW4gKHNlbGYgLSBpdCk6Ci0gICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19peG9yX18oc2VsZiwgaXQpOgotICAgICAgICBpZiBpdCBpcyBzZWxmOgotICAgICAgICAgICAgc2VsZi5jbGVhcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdCwgU2V0KToKLSAgICAgICAgICAgICAgICBpdCA9IHNlbGYuX2Zyb21faXRlcmFibGUoaXQpCi0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9faXN1Yl9fKHNlbGYsIGl0KToKLSAgICAgICAgaWYgaXQgaXMgc2VsZjoKLSAgICAgICAgICAgIHNlbGYuY2xlYXIoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9yIHZhbHVlIGluIGl0OgotICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotTXV0YWJsZVNldC5yZWdpc3RlcihzZXQpCi0KLQotIyMjIE1BUFBJTkdTICMjIwotCi0KLWNsYXNzIE1hcHBpbmcoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgICIiIkEgTWFwcGluZyBpcyBhIGdlbmVyaWMgY29udGFpbmVyIGZvciBhc3NvY2lhdGluZyBrZXkvdmFsdWUKLSAgICBwYWlycy4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCi0gICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fZ2V0aXRlbV9fLCBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCi0KLSAgICAiIiIKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotCi0gICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgICAgICdELmdldChrWyxkXSkgLT4gRFtrXSBpZiBrIGluIEQsIGVsc2UgZC4gIGQgZGVmYXVsdHMgdG8gTm9uZS4nCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKLQotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZltrZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBrZXlzKHNlbGYpOgotICAgICAgICAiRC5rZXlzKCkgLT4gYSBzZXQtbGlrZSBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3Mga2V5cyIKLSAgICAgICAgcmV0dXJuIEtleXNWaWV3KHNlbGYpCi0KLSAgICBkZWYgaXRlbXMoc2VsZik6Ci0gICAgICAgICJELml0ZW1zKCkgLT4gYSBzZXQtbGlrZSBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgaXRlbXMiCi0gICAgICAgIHJldHVybiBJdGVtc1ZpZXcoc2VsZikKLQotICAgIGRlZiB2YWx1ZXMoc2VsZik6Ci0gICAgICAgICJELnZhbHVlcygpIC0+IGFuIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyB2YWx1ZXMiCi0gICAgICAgIHJldHVybiBWYWx1ZXNWaWV3KHNlbGYpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIE1hcHBpbmcpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBkaWN0KHNlbGYuaXRlbXMoKSkgPT0gZGljdChvdGhlci5pdGVtcygpKQotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCi0KLU1hcHBpbmcucmVnaXN0ZXIobWFwcGluZ3Byb3h5KQotCi0KLWNsYXNzIE1hcHBpbmdWaWV3KFNpemVkKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBwaW5nKToKLSAgICAgICAgc2VsZi5fbWFwcGluZyA9IG1hcHBpbmcKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gbGVuKHNlbGYuX21hcHBpbmcpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnezAuX19jbGFzc19fLl9fbmFtZV9ffSh7MC5fbWFwcGluZyFyfSknLmZvcm1hdChzZWxmKQotCi0KLWNsYXNzIEtleXNWaWV3KE1hcHBpbmdWaWV3LCBTZXQpOgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKLSAgICAgICAgcmV0dXJuIHNldChpdCkKLQotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKLSAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9tYXBwaW5nCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIHlpZWxkIGtleQotCi1LZXlzVmlldy5yZWdpc3RlcihkaWN0X2tleXMpCi0KLQotY2xhc3MgSXRlbXNWaWV3KE1hcHBpbmdWaWV3LCBTZXQpOgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKLSAgICAgICAgcmV0dXJuIHNldChpdCkKLQotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6Ci0gICAgICAgIGtleSwgdmFsdWUgPSBpdGVtCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHYgPSBzZWxmLl9tYXBwaW5nW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gdiA9PSB2YWx1ZQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICB5aWVsZCAoa2V5LCBzZWxmLl9tYXBwaW5nW2tleV0pCi0KLUl0ZW1zVmlldy5yZWdpc3RlcihkaWN0X2l0ZW1zKQotCi0KLWNsYXNzIFZhbHVlc1ZpZXcoTWFwcGluZ1ZpZXcpOgotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIGlmIHZhbHVlID09IHNlbGYuX21hcHBpbmdba2V5XToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgeWllbGQgc2VsZi5fbWFwcGluZ1trZXldCi0KLVZhbHVlc1ZpZXcucmVnaXN0ZXIoZGljdF92YWx1ZXMpCi0KLQotY2xhc3MgTXV0YWJsZU1hcHBpbmcoTWFwcGluZyk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgIiIiQSBNdXRhYmxlTWFwcGluZyBpcyBhIGdlbmVyaWMgY29udGFpbmVyIGZvciBhc3NvY2lhdGluZwotICAgIGtleS92YWx1ZSBwYWlycy4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCi0gICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fZ2V0aXRlbV9fLCBfX3NldGl0ZW1fXywgX19kZWxpdGVtX18sCi0gICAgX19pdGVyX18sIGFuZCBfX2xlbl9fLgotCi0gICAgIiIiCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLQotICAgIF9fbWFya2VyID0gb2JqZWN0KCkKLQotICAgIGRlZiBwb3Aoc2VsZiwga2V5LCBkZWZhdWx0PV9fbWFya2VyKToKLSAgICAgICAgJycnRC5wb3Aoa1ssZF0pIC0+IHYsIHJlbW92ZSBzcGVjaWZpZWQga2V5IGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUuCi0gICAgICAgICAgSWYga2V5IGlzIG5vdCBmb3VuZCwgZCBpcyByZXR1cm5lZCBpZiBnaXZlbiwgb3RoZXJ3aXNlIEtleUVycm9yIGlzIHJhaXNlZC4KLSAgICAgICAgJycnCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHZhbHVlID0gc2VsZltrZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgc2VsZi5fX21hcmtlcjoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRlbCBzZWxmW2tleV0KLSAgICAgICAgICAgIHJldHVybiB2YWx1ZQotCi0gICAgZGVmIHBvcGl0ZW0oc2VsZik6Ci0gICAgICAgICcnJ0QucG9waXRlbSgpIC0+IChrLCB2KSwgcmVtb3ZlIGFuZCByZXR1cm4gc29tZSAoa2V5LCB2YWx1ZSkgcGFpcgotICAgICAgICAgICBhcyBhIDItdHVwbGU7IGJ1dCByYWlzZSBLZXlFcnJvciBpZiBEIGlzIGVtcHR5LgotICAgICAgICAnJycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAga2V5ID0gbmV4dChpdGVyKHNlbGYpKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgICAgIHZhbHVlID0gc2VsZltrZXldCi0gICAgICAgIGRlbCBzZWxmW2tleV0KLSAgICAgICAgcmV0dXJuIGtleSwgdmFsdWUKLQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgJ0QuY2xlYXIoKSAtPiBOb25lLiAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIEQuJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNlbGYucG9waXRlbSgpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiB1cGRhdGUoKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgICcnJyBELnVwZGF0ZShbRSwgXSoqRikgLT4gTm9uZS4gIFVwZGF0ZSBEIGZyb20gbWFwcGluZy9pdGVyYWJsZSBFIGFuZCBGLgotICAgICAgICAgICAgSWYgRSBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciBrIGluIEU6IERba10gPSBFW2tdCi0gICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGxhY2tzIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIChrLCB2KSBpbiBFOiBEW2tdID0gdgotICAgICAgICAgICAgSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMgZm9sbG93ZWQgYnk6IGZvciBrLCB2IGluIEYuaXRlbXMoKTogRFtrXSA9IHYKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGxlbihhcmdzKSA+IDI6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IG1vc3QgMiBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICh7fSBnaXZlbikiLmZvcm1hdChsZW4oYXJncykpKQotICAgICAgICBlbGlmIG5vdCBhcmdzOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1cGRhdGUoKSB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50ICgwIGdpdmVuKSIpCi0gICAgICAgIHNlbGYgPSBhcmdzWzBdCi0gICAgICAgIG90aGVyID0gYXJnc1sxXSBpZiBsZW4oYXJncykgPj0gMiBlbHNlICgpCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6Ci0gICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyOgotICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KLSAgICAgICAgZWxpZiBoYXNhdHRyKG90aGVyLCAia2V5cyIpOgotICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlci5rZXlzKCk6Ci0gICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb3RoZXI6Ci0gICAgICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4ga3dkcy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKLQotICAgIGRlZiBzZXRkZWZhdWx0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgJ0Quc2V0ZGVmYXVsdChrWyxkXSkgLT4gRC5nZXQoayxkKSwgYWxzbyBzZXQgRFtrXT1kIGlmIGsgbm90IGluIEQnCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgc2VsZltrZXldID0gZGVmYXVsdAotICAgICAgICByZXR1cm4gZGVmYXVsdAotCi1NdXRhYmxlTWFwcGluZy5yZWdpc3RlcihkaWN0KQotCi0KLSMjIyBTRVFVRU5DRVMgIyMjCi0KLQotY2xhc3MgU2VxdWVuY2UoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgotCi0gICAgIiIiQWxsIHRoZSBvcGVyYXRpb25zIG9uIGEgcmVhZC1vbmx5IHNlcXVlbmNlLgotCi0gICAgQ29uY3JldGUgc3ViY2xhc3NlcyBtdXN0IG92ZXJyaWRlIF9fbmV3X18gb3IgX19pbml0X18sCi0gICAgX19nZXRpdGVtX18sIGFuZCBfX2xlbl9fLgotICAgICIiIgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6Ci0gICAgICAgIHJhaXNlIEluZGV4RXJyb3IKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgaSA9IDAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB2ID0gc2VsZltpXQotICAgICAgICAgICAgICAgIHlpZWxkIHYKLSAgICAgICAgICAgICAgICBpICs9IDEKLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgotICAgICAgICBmb3IgdiBpbiBzZWxmOgotICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfX3JldmVyc2VkX18oc2VsZik6Ci0gICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKGxlbihzZWxmKSkpOgotICAgICAgICAgICAgeWllbGQgc2VsZltpXQotCi0gICAgZGVmIGluZGV4KHNlbGYsIHZhbHVlKToKLSAgICAgICAgJycnUy5pbmRleCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gZmlyc3QgaW5kZXggb2YgdmFsdWUuCi0gICAgICAgICAgIFJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KLSAgICAgICAgJycnCi0gICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgotCi0gICAgZGVmIGNvdW50KHNlbGYsIHZhbHVlKToKLSAgICAgICAgJ1MuY291bnQodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB2YWx1ZScKLSAgICAgICAgcmV0dXJuIHN1bSgxIGZvciB2IGluIHNlbGYgaWYgdiA9PSB2YWx1ZSkKLQotU2VxdWVuY2UucmVnaXN0ZXIodHVwbGUpCi1TZXF1ZW5jZS5yZWdpc3RlcihzdHIpCi1TZXF1ZW5jZS5yZWdpc3RlcihyYW5nZSkKLQotCi1jbGFzcyBCeXRlU3RyaW5nKFNlcXVlbmNlKToKLQotICAgICIiIlRoaXMgdW5pZmllcyBieXRlcyBhbmQgYnl0ZWFycmF5LgotCi0gICAgWFhYIFNob3VsZCBhZGQgYWxsIHRoZWlyIG1ldGhvZHMuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi1CeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVzKQotQnl0ZVN0cmluZy5yZWdpc3RlcihieXRlYXJyYXkpCi0KLQotY2xhc3MgTXV0YWJsZVNlcXVlbmNlKFNlcXVlbmNlKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCi0KLSAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3QgcHJvdmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAotICAgIF9fZ2V0aXRlbV9fLCBfX3NldGl0ZW1fXywgX19kZWxpdGVtX18sIF9fbGVuX18sIGFuZCBpbnNlcnQoKS4KLQotICAgICIiIgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEluZGV4RXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6Ci0gICAgICAgIHJhaXNlIEluZGV4RXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIHZhbHVlKToKLSAgICAgICAgJ1MuaW5zZXJ0KGluZGV4LCB2YWx1ZSkgLS0gaW5zZXJ0IHZhbHVlIGJlZm9yZSBpbmRleCcKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgZGVmIGFwcGVuZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICdTLmFwcGVuZCh2YWx1ZSkgLS0gYXBwZW5kIHZhbHVlIHRvIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlJwotICAgICAgICBzZWxmLmluc2VydChsZW4oc2VsZiksIHZhbHVlKQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICAnUy5jbGVhcigpIC0+IE5vbmUgLS0gcmVtb3ZlIGFsbCBpdGVtcyBmcm9tIFMnCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3AoKQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiByZXZlcnNlKHNlbGYpOgotICAgICAgICAnUy5yZXZlcnNlKCkgLS0gcmV2ZXJzZSAqSU4gUExBQ0UqJwotICAgICAgICBuID0gbGVuKHNlbGYpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKG4vLzIpOgotICAgICAgICAgICAgc2VsZltpXSwgc2VsZltuLWktMV0gPSBzZWxmW24taS0xXSwgc2VsZltpXQotCi0gICAgZGVmIGV4dGVuZChzZWxmLCB2YWx1ZXMpOgotICAgICAgICAnUy5leHRlbmQoaXRlcmFibGUpIC0tIGV4dGVuZCBzZXF1ZW5jZSBieSBhcHBlbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgaXRlcmFibGUnCi0gICAgICAgIGZvciB2IGluIHZhbHVlczoKLSAgICAgICAgICAgIHNlbGYuYXBwZW5kKHYpCi0KLSAgICBkZWYgcG9wKHNlbGYsIGluZGV4PS0xKToKLSAgICAgICAgJycnUy5wb3AoW2luZGV4XSkgLT4gaXRlbSAtLSByZW1vdmUgYW5kIHJldHVybiBpdGVtIGF0IGluZGV4IChkZWZhdWx0IGxhc3QpLgotICAgICAgICAgICBSYWlzZSBJbmRleEVycm9yIGlmIGxpc3QgaXMgZW1wdHkgb3IgaW5kZXggaXMgb3V0IG9mIHJhbmdlLgotICAgICAgICAnJycKLSAgICAgICAgdiA9IHNlbGZbaW5kZXhdCi0gICAgICAgIGRlbCBzZWxmW2luZGV4XQotICAgICAgICByZXR1cm4gdgotCi0gICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICcnJ1MucmVtb3ZlKHZhbHVlKSAtLSByZW1vdmUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB2YWx1ZS4KLSAgICAgICAgICAgUmFpc2UgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCi0gICAgICAgICcnJwotICAgICAgICBkZWwgc2VsZltzZWxmLmluZGV4KHZhbHVlKV0KLQotICAgIGRlZiBfX2lhZGRfXyhzZWxmLCB2YWx1ZXMpOgotICAgICAgICBzZWxmLmV4dGVuZCh2YWx1ZXMpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLU11dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihsaXN0KQotTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGJ5dGVhcnJheSkgICMgTXVsdGlwbHkgaW5oZXJpdGluZywgc2VlIEJ5dGVTdHJpbmcKK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgKgorZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCBfX2FsbF9fCmRpZmYgLS1naXQgYS9MaWIvY29sb3JzeXMucHkgYi9MaWIvY29sb3JzeXMucHkKaW5kZXggYTZjMGNmNi4uYjkzZTM4NCAxMDA2NDQKLS0tIGEvTGliL2NvbG9yc3lzLnB5CisrKyBiL0xpYi9jb2xvcnN5cy5weQpAQCAtMzMsMTcgKzMzLDI1IEBACiAjIFlJUTogdXNlZCBieSBjb21wb3NpdGUgdmlkZW8gc2lnbmFscyAobGluZWFyIGNvbWJpbmF0aW9ucyBvZiBSR0IpCiAjIFk6IHBlcmNlaXZlZCBncmV5IGxldmVsICgwLjAgPT0gYmxhY2ssIDEuMCA9PSB3aGl0ZSkKICMgSSwgUTogY29sb3IgY29tcG9uZW50cworIworIyBUaGVyZSBhcmUgYSBncmVhdCBtYW55IHZlcnNpb25zIG9mIHRoZSBjb25zdGFudHMgdXNlZCBpbiB0aGVzZSBmb3JtdWxhZS4KKyMgVGhlIG9uZXMgaW4gdGhpcyBsaWJyYXJ5IHVzZXMgY29uc3RhbnRzIGZyb20gdGhlIEZDQyB2ZXJzaW9uIG9mIE5UU0MuCiAKIGRlZiByZ2JfdG9feWlxKHIsIGcsIGIpOgogICAgIHkgPSAwLjMwKnIgKyAwLjU5KmcgKyAwLjExKmIKLSAgICBpID0gMC42MCpyIC0gMC4yOCpnIC0gMC4zMipiCi0gICAgcSA9IDAuMjEqciAtIDAuNTIqZyArIDAuMzEqYgorICAgIGkgPSAwLjc0KihyLXkpIC0gMC4yNyooYi15KQorICAgIHEgPSAwLjQ4KihyLXkpICsgMC40MSooYi15KQogICAgIHJldHVybiAoeSwgaSwgcSkKIAogZGVmIHlpcV90b19yZ2IoeSwgaSwgcSk6Ci0gICAgciA9IHkgKyAwLjk0ODI2MippICsgMC42MjQwMTMqcQotICAgIGcgPSB5IC0gMC4yNzYwNjYqaSAtIDAuNjM5ODEwKnEKLSAgICBiID0geSAtIDEuMTA1NDUwKmkgKyAxLjcyOTg2MCpxCisgICAgIyByID0geSArICgwLjI3KnEgKyAwLjQxKmkpIC8gKDAuNzQqMC40MSArIDAuMjcqMC40OCkKKyAgICAjIGIgPSB5ICsgKDAuNzQqcSAtIDAuNDgqaSkgLyAoMC43NCowLjQxICsgMC4yNyowLjQ4KQorICAgICMgZyA9IHkgLSAoMC4zMCooci15KSArIDAuMTEqKGIteSkpIC8gMC41OQorCisgICAgciA9IHkgKyAwLjk0Njg4MjIxNzA5MDA2OTMqaSArIDAuNjIzNTU2NTgxOTg2MTQzMypxCisgICAgZyA9IHkgLSAwLjI3NDc4NzY0NjI5ODk3ODM0KmkgLSAwLjYzNTY5MTA3OTE4NzM4MDEqcQorICAgIGIgPSB5IC0gMS4xMDg1NDUwMzQ2NDIwMzIyKmkgKyAxLjcwOTAwNjkyODQwNjQ2NjYqcQorCiAgICAgaWYgciA8IDAuMDoKICAgICAgICAgciA9IDAuMAogICAgIGlmIGcgPCAwLjA6CmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZWFsbC5weSBiL0xpYi9jb21waWxlYWxsLnB5CmluZGV4IDY5M2VkYTkuLmQ5NTdlZTUgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlYWxsLnB5CisrKyBiL0xpYi9jb21waWxlYWxsLnB5CkBAIC0xMiw4ICsxMiw3IEBACiAiIiIKIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc3RydWN0CiAKQEAgLTM4LDcgKzM3LDcgQEAKICAgICAgICAgcHJpbnQoJ0xpc3RpbmcgeyFyfS4uLicuZm9ybWF0KGRpcikpCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcHJpbnQoIkNhbid0IGxpc3QgeyFyfSIuZm9ybWF0KGRpcikpCiAgICAgICAgIG5hbWVzID0gW10KICAgICBuYW1lcy5zb3J0KCkKQEAgLTkxLDIyICs5MCwyMyBAQAogICAgICAgICAgICAgY2ZpbGUgPSBmdWxsbmFtZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKICAgICAgICAgICAgIGNhY2hlX2RpciA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaGVhZCwgdGFpbCA9IG5hbWVbOi0zXSwgbmFtZVstMzpdCiAgICAgICAgIGlmIHRhaWwgPT0gJy5weSc6CiAgICAgICAgICAgICBpZiBub3QgZm9yY2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KGZ1bGxuYW1lKS5zdF9tdGltZSkKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWUpCiAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmlsZSwgJ3JiJykgYXMgY2hhbmRsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IGNoYW5kbGUucmVhZCg4KQogICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3QgPT0gYWN0dWFsOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgICAgIHByaW50KCdDb21waWxpbmcgeyFyfS4uLicuZm9ybWF0KGZ1bGxuYW1lKSkKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgICAgICAgIG1zZyA9IG1zZy5kZWNvZGUoc3lzLnN0ZG91dC5lbmNvZGluZykKICAgICAgICAgICAgICAgICBwcmludChtc2cpCiAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKLSAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgSU9FcnJvcikgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICAgICBpZiBxdWlldDoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBFcnJvciBjb21waWxpbmcgeyFyfS4uLicuZm9ybWF0KGZ1bGxuYW1lKSkKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgICAgICB3aXRoIChzeXMuc3RkaW4gaWYgYXJncy5mbGlzdD09Jy0nIGVsc2Ugb3BlbihhcmdzLmZsaXN0KSkgYXMgZjoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICBjb21waWxlX2Rlc3RzLmFwcGVuZChsaW5lLnN0cmlwKCkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCB7fSIuZm9ybWF0KGFyZ3MuZmxpc3QpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CmluZGV4IGQ0NWE0MDQuLmFjZDA1ZDAgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQpAQCAtMjAwLDggKzIwMCw3IEBACiAgICAgICAgIHdhaXRlciA9IF9jcmVhdGVfYW5kX2luc3RhbGxfd2FpdGVycyhmcywgX0FTX0NPTVBMRVRFRCkKIAogICAgIHRyeToKLSAgICAgICAgZm9yIGZ1dHVyZSBpbiBmaW5pc2hlZDoKLSAgICAgICAgICAgIHlpZWxkIGZ1dHVyZQorICAgICAgICB5aWVsZCBmcm9tIGZpbmlzaGVkCiAKICAgICAgICAgd2hpbGUgcGVuZGluZzoKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKQEAgLTIyNiw3ICsyMjUsOCBAQAogCiAgICAgZmluYWxseToKICAgICAgICAgZm9yIGYgaW4gZnM6Ci0gICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICB3aXRoIGYuX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAKIERvbmVBbmROb3REb25lRnV0dXJlcyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCiAgICAgICAgICdEb25lQW5kTm90RG9uZUZ1dHVyZXMnLCAnZG9uZSBub3RfZG9uZScpCkBAIC0yNzMsNyArMjczLDggQEAKIAogICAgIHdhaXRlci5ldmVudC53YWl0KHRpbWVvdXQpCiAgICAgZm9yIGYgaW4gZnM6Ci0gICAgICAgIGYuX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKKyAgICAgICAgd2l0aCBmLl9jb25kaXRpb246CisgICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAKICAgICBkb25lLnVwZGF0ZSh3YWl0ZXIuZmluaXNoZWRfZnV0dXJlcykKICAgICByZXR1cm4gRG9uZUFuZE5vdERvbmVGdXR1cmVzKGRvbmUsIHNldChmcykgLSBkb25lKQpkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CmluZGV4IGFkZjJhYjQuLjA3YjUyMjUgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKQEAgLTQwLDcgKzQwLDcgQEAKIAogUHJvY2VzcyAjMS4ubjoKIC0gcmVhZHMgX0NhbGxJdGVtcyBmcm9tICJDYWxsIFEiLCBleGVjdXRlcyB0aGUgY2FsbHMsIGFuZCBwdXRzIHRoZSByZXN1bHRpbmcKLSAgX1Jlc3VsdEl0ZW1zIGluICJSZXF1ZXN0IFEiCisgIF9SZXN1bHRJdGVtcyBpbiAiUmVzdWx0IFEiCiAiIiIKIAogX19hdXRob3JfXyA9ICdCcmlhbiBRdWlubGFuIChicmlhbkBzd2VldGFwcC5jb20pJwpAQCAtNDksOCArNDksOSBAQAogaW1wb3J0IG9zCiBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgX2Jhc2UKIGltcG9ydCBxdWV1ZQorZnJvbSBxdWV1ZSBpbXBvcnQgRnVsbAogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZSwgRnVsbAorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNpbXBsZVF1ZXVlCiBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCB3YWl0CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgd2Vha3JlZgpAQCAtMjQwLDYgKzI0MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidGVybWluYXRlZCBhYnJ1cHRseSB3aGlsZSB0aGUgZnV0dXJlIHdhcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicnVubmluZyBvciBwZW5kaW5nLiIKICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXMuY2xlYXIoKQogICAgICAgICAgICAgIyBUZXJtaW5hdGUgcmVtYWluaW5nIHdvcmtlcnMgZm9yY2libHk6IHRoZSBxdWV1ZXMgb3IgdGhlaXIKICAgICAgICAgICAgICMgbG9ja3MgbWF5IGJlIGluIGEgZGlydHkgc3RhdGUgYW5kIGJsb2NrIGZvcmV2ZXIuCkBAIC0yNjQsNiArMjY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmZ1dHVyZS5zZXRfZXhjZXB0aW9uKHJlc3VsdF9pdGVtLmV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0uZnV0dXJlLnNldF9yZXN1bHQocmVzdWx0X2l0ZW0ucmVzdWx0KQorICAgICAgICAgICAgICAgICMgRGVsZXRlIHJlZmVyZW5jZXMgdG8gb2JqZWN0LiBTZWUgaXNzdWUxNjI4NAorICAgICAgICAgICAgICAgIGRlbCB3b3JrX2l0ZW0KICAgICAgICAgIyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzdGFydCBzaHV0dGluZyBkb3duLgogICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX3JlZmVyZW5jZSgpCiAgICAgICAgICMgTm8gbW9yZSB3b3JrIGl0ZW1zIGNhbiBiZSBhZGRlZCBpZjoKQEAgLTMyNyw3ICszMzIsNyBAQAogICAgICAgICBfY2hlY2tfc3lzdGVtX2xpbWl0cygpCiAKICAgICAgICAgaWYgbWF4X3dvcmtlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKIApkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQppbmRleCA5NWJiNjgyLi5mOWJlYjBmIDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQpAQCAtNjMsNiArNjMsOCBAQAogICAgICAgICAgICAgd29ya19pdGVtID0gd29ya19xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKICAgICAgICAgICAgIGlmIHdvcmtfaXRlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0ucnVuKCkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGV4ZWN1dG9yID0gZXhlY3V0b3JfcmVmZXJlbmNlKCkKICAgICAgICAgICAgICMgRXhpdCBpZjoKZGlmZiAtLWdpdCBhL0xpYi9jb25maWdwYXJzZXIucHkgYi9MaWIvY29uZmlncGFyc2VyLnB5CmluZGV4IGFlYmY4YTAuLjRlZTgzMDcgMTAwNjQ0Ci0tLSBhL0xpYi9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL2NvbmZpZ3BhcnNlci5weQpAQCAtNjcwLDcgKzY3MCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoZnAsIGZpbGVuYW1lKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmVhZF9vay5hcHBlbmQoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiByZWFkX29rCmRpZmYgLS1naXQgYS9MaWIvY29udGV4dGxpYi5weSBiL0xpYi9jb250ZXh0bGliLnB5CmluZGV4IGIwM2Y4MjguLjgyZWU5NTUgMTAwNjQ0Ci0tLSBhL0xpYi9jb250ZXh0bGliLnB5CisrKyBiL0xpYi9jb250ZXh0bGliLnB5CkBAIC00LDcgKzQsOCBAQAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogCi1fX2FsbF9fID0gWyJjb250ZXh0bWFuYWdlciIsICJjbG9zaW5nIiwgIkNvbnRleHREZWNvcmF0b3IiLCAiRXhpdFN0YWNrIl0KK19fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgImNsb3NpbmciLCAiQ29udGV4dERlY29yYXRvciIsICJFeGl0U3RhY2siLAorICAgICAgICAgICAicmVkaXJlY3Rfc3Rkb3V0IiwgInN1cHByZXNzIl0KIAogCiBjbGFzcyBDb250ZXh0RGVjb3JhdG9yKG9iamVjdCk6CkBAIC0zNiw2ICszNywxNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprd2RzKToKICAgICAgICAgc2VsZi5nZW4gPSBmdW5jKCphcmdzLCAqKmt3ZHMpCiAgICAgICAgIHNlbGYuZnVuYywgc2VsZi5hcmdzLCBzZWxmLmt3ZHMgPSBmdW5jLCBhcmdzLCBrd2RzCisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGRvYyA9IGdldGF0dHIoZnVuYywgIl9fZG9jX18iLCBOb25lKQorICAgICAgICBpZiBkb2MgaXMgTm9uZToKKyAgICAgICAgICAgIGRvYyA9IHR5cGUoc2VsZikuX19kb2NfXworICAgICAgICBzZWxmLl9fZG9jX18gPSBkb2MKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGlzIHN0aWxsIGRvZXNuJ3QgcHJvdmlkZSBnb29kIGhlbHAgb3V0cHV0IHdoZW4KKyAgICAgICAgIyBpbnNwZWN0aW5nIHRoZSBjcmVhdGVkIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMsIHNpbmNlIHB5ZG9jCisgICAgICAgICMgY3VycmVudGx5IGJ5cGFzc2VzIHRoZSBpbnN0YW5jZSBkb2NzdHJpbmcgYW5kIHNob3dzIHRoZSBkb2NzdHJpbmcKKyAgICAgICAgIyBmb3IgdGhlIGNsYXNzIGluc3RlYWQuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTQwNCBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAgZGVmIF9yZWNyZWF0ZV9jbShzZWxmKToKICAgICAgICAgIyBfR0NNIGluc3RhbmNlcyBhcmUgb25lLXNob3QgY29udGV4dCBtYW5hZ2Vycywgc28gdGhlCkBAIC00Nyw3ICs1OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBuZXh0KHNlbGYuZ2VuKQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZ2VuZXJhdG9yIGRpZG4ndCB5aWVsZCIpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBkaWRuJ3QgeWllbGQiKSBmcm9tIE5vbmUKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICAgaWYgdHlwZSBpcyBOb25lOgpAQCAtMTQwLDYgKzE1MSw2MiBAQAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgogICAgICAgICBzZWxmLnRoaW5nLmNsb3NlKCkKIAorY2xhc3MgcmVkaXJlY3Rfc3Rkb3V0OgorICAgICIiIkNvbnRleHQgbWFuYWdlciBmb3IgdGVtcG9yYXJpbHkgcmVkaXJlY3Rpbmcgc3Rkb3V0IHRvIGFub3RoZXIgZmlsZQorCisgICAgICAgICMgSG93IHRvIHNlbmQgaGVscCgpIHRvIHN0ZGVycgorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAoZGlyKQorCisgICAgICAgICMgSG93IHRvIHdyaXRlIGhlbHAoKSB0byBhIGZpbGUKKyAgICAgICAgd2l0aCBvcGVuKCdoZWxwLnR4dCcsICd3JykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgorICAgICAgICAgICAgICAgIGhlbHAocG93KQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld190YXJnZXQpOgorICAgICAgICBzZWxmLl9uZXdfdGFyZ2V0ID0gbmV3X3RhcmdldAorICAgICAgICAjIFdlIHVzZSBhIGxpc3Qgb2Ygb2xkIHRhcmdldHMgdG8gbWFrZSB0aGlzIENNIHJlLWVudHJhbnQKKyAgICAgICAgc2VsZi5fb2xkX3RhcmdldHMgPSBbXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb2xkX3RhcmdldHMuYXBwZW5kKHN5cy5zdGRvdXQpCisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9uZXdfdGFyZ2V0CisgICAgICAgIHJldHVybiBzZWxmLl9uZXdfdGFyZ2V0CisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjdHlwZSwgZXhjaW5zdCwgZXhjdGIpOgorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5fb2xkX3RhcmdldHMucG9wKCkKKworCitjbGFzcyBzdXBwcmVzczoKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc3VwcHJlc3Mgc3BlY2lmaWVkIGV4Y2VwdGlvbnMKKworICAgIEFmdGVyIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgZXhlY3V0aW9uIHByb2NlZWRzIHdpdGggdGhlIG5leHQKKyAgICBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSB3aXRoIHN0YXRlbWVudC4KKworICAgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICAgb3MucmVtb3ZlKHNvbWVmaWxlKQorICAgICAgICAgIyBFeGVjdXRpb24gc3RpbGwgcmVzdW1lcyBoZXJlIGlmIHRoZSBmaWxlIHdhcyBhbHJlYWR5IHJlbW92ZWQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqZXhjZXB0aW9ucyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbnMgPSBleGNlcHRpb25zCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjdHlwZSwgZXhjaW5zdCwgZXhjdGIpOgorICAgICAgICAjIFVubGlrZSBpc2luc3RhbmNlIGFuZCBpc3N1YmNsYXNzLCBDUHl0aG9uIGV4Y2VwdGlvbiBoYW5kbGluZworICAgICAgICAjIGN1cnJlbnRseSBvbmx5IGxvb2tzIGF0IHRoZSBjb25jcmV0ZSB0eXBlIGhpZXJhcmNoeSAoaWdub3JpbmcKKyAgICAgICAgIyB0aGUgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNraW5nIGhvb2tzKS4gV2hpbGUgR3VpZG8gY29uc2lkZXJzCisgICAgICAgICMgdGhhdCBhIGJ1ZyByYXRoZXIgdGhhbiBhIGZlYXR1cmUsIGl0J3MgYSBmYWlybHkgaGFyZCBvbmUgdG8gZml4CisgICAgICAgICMgZHVlIHRvIHZhcmlvdXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gc3VwcHJlc3MgcHJvdmlkZXMKKyAgICAgICAgIyB0aGUgc2ltcGxlciBpc3N1YmNsYXNzIGJhc2VkIHNlbWFudGljcywgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisgICAgICAgICMgZXhhY3RseSByZXByb2R1Y2UgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBDUHl0aG9uIGludGVycHJldGVyLgorICAgICAgICAjCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjAyOSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgIHJldHVybiBleGN0eXBlIGlzIG5vdCBOb25lIGFuZCBpc3N1YmNsYXNzKGV4Y3R5cGUsIHNlbGYuX2V4Y2VwdGlvbnMpCisKIAogIyBJbnNwaXJlZCBieSBkaXNjdXNzaW9ucyBvbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTM1ODUKIGNsYXNzIEV4aXRTdGFjayhvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL2NvcHlyZWcucHkgYi9MaWIvY29weXJlZy5weQppbmRleCA2NmMwZjhhLi42N2Y1YmIwIDEwMDY0NAotLS0gYS9MaWIvY29weXJlZy5weQorKysgYi9MaWIvY29weXJlZy5weQpAQCAtODcsNiArODcsMTIgQEAKIGRlZiBfX25ld29ial9fKGNscywgKmFyZ3MpOgogICAgIHJldHVybiBjbHMuX19uZXdfXyhjbHMsICphcmdzKQogCitkZWYgX19uZXdvYmpfZXhfXyhjbHMsIGFyZ3MsIGt3YXJncyk6CisgICAgIiIiVXNlZCBieSBwaWNrbGUgcHJvdG9jb2wgNCwgaW5zdGVhZCBvZiBfX25ld29ial9fIHRvIGFsbG93IGNsYXNzZXMgd2l0aAorICAgIGtleXdvcmQtb25seSBhcmd1bWVudHMgdG8gYmUgcGlja2xlZCBjb3JyZWN0bHkuCisgICAgIiIiCisgICAgcmV0dXJuIGNscy5fX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKQorCiBkZWYgX3Nsb3RuYW1lcyhjbHMpOgogICAgICIiIlJldHVybiBhIGxpc3Qgb2Ygc2xvdCBuYW1lcyBmb3IgYSBnaXZlbiBjbGFzcy4KIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy9fX2luaXRfXy5weSBiL0xpYi9jdHlwZXMvX19pbml0X18ucHkKaW5kZXggYzkyZTEzMC4uNWM4MDNmZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CkBAIC0zNCwyNCArMzQsMjIgQEAKICAgICAgRlVOQ0ZMQUdfVVNFX0VSUk5PIGFzIF9GVU5DRkxBR19VU0VfRVJSTk8sIFwKICAgICAgRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUiBhcyBfRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUgogCi0iIiIKLVdJTk9MRUFQSSAtPiBIUkVTVUxUCi1XSU5PTEVBUElfKHR5cGUpCi0KLVNURE1FVEhPRENBTExUWVBFCi0KLVNURE1FVEhPRChuYW1lKQotU1RETUVUSE9EXyh0eXBlLCBuYW1lKQotCi1TVERBUElDQUxMVFlQRQotIiIiCisjIFdJTk9MRUFQSSAtPiBIUkVTVUxUCisjIFdJTk9MRUFQSV8odHlwZSkKKyMKKyMgU1RETUVUSE9EQ0FMTFRZUEUKKyMKKyMgU1RETUVUSE9EKG5hbWUpCisjIFNURE1FVEhPRF8odHlwZSwgbmFtZSkKKyMKKyMgU1REQVBJQ0FMTFRZUEUKIAogZGVmIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGluaXQsIHNpemU9Tm9uZSk6CiAgICAgIiIiY3JlYXRlX3N0cmluZ19idWZmZXIoYUJ5dGVzKSAtPiBjaGFyYWN0ZXIgYXJyYXkKICAgICBjcmVhdGVfc3RyaW5nX2J1ZmZlcihhbkludGVnZXIpIC0+IGNoYXJhY3RlciBhcnJheQogICAgIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGFTdHJpbmcsIGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CiAgICAgIiIiCi0gICAgaWYgaXNpbnN0YW5jZShpbml0LCAoc3RyLCBieXRlcykpOgorICAgIGlmIGlzaW5zdGFuY2UoaW5pdCwgYnl0ZXMpOgogICAgICAgICBpZiBzaXplIGlzIE5vbmU6CiAgICAgICAgICAgICBzaXplID0gbGVuKGluaXQpKzEKICAgICAgICAgYnVmdHlwZSA9IGNfY2hhciAqIHNpemUKQEAgLTI4Niw3ICsyODQsNyBAQAogICAgIGNyZWF0ZV91bmljb2RlX2J1ZmZlcihhbkludGVnZXIpIC0+IGNoYXJhY3RlciBhcnJheQogICAgIGNyZWF0ZV91bmljb2RlX2J1ZmZlcihhU3RyaW5nLCBhbkludGVnZXIpIC0+IGNoYXJhY3RlciBhcnJheQogICAgICIiIgotICAgIGlmIGlzaW5zdGFuY2UoaW5pdCwgKHN0ciwgYnl0ZXMpKToKKyAgICBpZiBpc2luc3RhbmNlKGluaXQsIHN0cik6CiAgICAgICAgIGlmIHNpemUgaXMgTm9uZToKICAgICAgICAgICAgIHNpemUgPSBsZW4oaW5pdCkrMQogICAgICAgICBidWZ0eXBlID0gY193Y2hhciAqIHNpemUKQEAgLTM5NSw3ICszOTMsNyBAQAogICAgICAgICBfdHlwZV8gPSAibCIKICAgICAgICAgIyBfY2hlY2tfcmV0dmFsXyBpcyBjYWxsZWQgd2l0aCB0aGUgZnVuY3Rpb24ncyByZXN1bHQgd2hlbiBpdAogICAgICAgICAjIGlzIHVzZWQgYXMgcmVzdHlwZS4gIEl0IGNoZWNrcyBmb3IgdGhlIEZBSUxFRCBiaXQsIGFuZAotICAgICAgICAjIHJhaXNlcyBhIFdpbmRvd3NFcnJvciBpZiBpdCBpcyBzZXQuCisgICAgICAgICMgcmFpc2VzIGFuIE9TRXJyb3IgaWYgaXQgaXMgc2V0LgogICAgICAgICAjCiAgICAgICAgICMgVGhlIF9jaGVja19yZXR2YWxfIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBpbiBDLCBzbyB0aGF0IHRoZQogICAgICAgICAjIG1ldGhvZCBkZWZpbml0aW9uIGl0c2VsZiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHRyYWNlYmFjawpAQCAtNDA3LDcgKzQwNSw3IEBACiAgICAgY2xhc3MgT2xlRExMKENETEwpOgogICAgICAgICAiIiJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBkbGwgZXhwb3J0aW5nIGZ1bmN0aW9ucyB1c2luZyB0aGUKICAgICAgICAgV2luZG93cyBzdGRjYWxsIGNhbGxpbmcgY29udmVudGlvbiwgYW5kIHJldHVybmluZyBIUkVTVUxULgotICAgICAgICBIUkVTVUxUIGVycm9yIHZhbHVlcyBhcmUgYXV0b21hdGljYWxseSByYWlzZWQgYXMgV2luZG93c0Vycm9yCisgICAgICAgIEhSRVNVTFQgZXJyb3IgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHJhaXNlZCBhcyBPU0Vycm9yCiAgICAgICAgIGV4Y2VwdGlvbnMuCiAgICAgICAgICIiIgogICAgICAgICBfZnVuY19mbGFnc18gPSBfRlVOQ0ZMQUdfU1REQ0FMTApAQCAtNDU2LDcgKzQ1NCw3IEBACiAgICAgICAgICAgICBjb2RlID0gR2V0TGFzdEVycm9yKCkKICAgICAgICAgaWYgZGVzY3IgaXMgTm9uZToKICAgICAgICAgICAgIGRlc2NyID0gRm9ybWF0RXJyb3IoY29kZSkuc3RyaXAoKQotICAgICAgICByZXR1cm4gV2luZG93c0Vycm9yKE5vbmUsIGRlc2NyLCBOb25lLCBjb2RlKQorICAgICAgICByZXR1cm4gT1NFcnJvcihOb25lLCBkZXNjciwgTm9uZSwgY29kZSkKIAogaWYgc2l6ZW9mKGNfdWludCkgPT0gc2l6ZW9mKGNfdm9pZF9wKToKICAgICBjX3NpemVfdCA9IGNfdWludApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CmluZGV4IGNjNWZlMDIuLjI2YTcwYjcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKQEAgLTEsMjA4ICsxLDE0IEBACi1pbXBvcnQgb3MsIHN5cywgdW5pdHRlc3QsIGdldG9wdCwgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi11c2VfcmVzb3VyY2VzID0gW10KKyMgc2tpcCB0ZXN0cyBpZiBfY3R5cGVzIHdhcyBub3QgYnVpbHQKK2N0eXBlcyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKK2N0eXBlc19zeW1ib2xzID0gZGlyKGN0eXBlcykKIAotY2xhc3MgUmVzb3VyY2VEZW5pZWQoRXhjZXB0aW9uKToKLSAgICAiIiJUZXN0IHNraXBwZWQgYmVjYXVzZSBpdCByZXF1ZXN0ZWQgYSBkaXNhbGxvd2VkIHJlc291cmNlLgorZGVmIG5lZWRfc3ltYm9sKG5hbWUpOgorICAgIHJldHVybiB1bml0dGVzdC5za2lwVW5sZXNzKG5hbWUgaW4gY3R5cGVzX3N5bWJvbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gaXMgcmVxdWlyZWQnLmZvcm1hdChuYW1lKSkKIAotICAgIFRoaXMgaXMgcmFpc2VkIHdoZW4gYSB0ZXN0IGNhbGxzIHJlcXVpcmVzKCkgZm9yIGEgcmVzb3VyY2UgdGhhdAotICAgIGhhcyBub3QgYmUgZW5hYmxlZC4gIFJlc291cmNlcyBhcmUgZGVmaW5lZCBieSB0ZXN0IG1vZHVsZXMuCi0gICAgIiIiCi0KLWRlZiBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSByZXNvdXJjZSBpcyBlbmFibGVkLgotCi0gICAgSWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyB0aGVuIGF1dG9tYXRpY2FsbHkgcmV0dXJuIFRydWUuIiIiCi0gICAgaWYgc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX2dsb2JhbHMuZ2V0KCJfX25hbWVfXyIpID09ICJfX21haW5fXyI6Ci0gICAgICAgIHJldHVybiBUcnVlCi0gICAgcmVzdWx0ID0gdXNlX3Jlc291cmNlcyBpcyBub3QgTm9uZSBhbmQgXAotICAgICAgICAgICAocmVzb3VyY2UgaW4gdXNlX3Jlc291cmNlcyBvciAiKiIgaW4gdXNlX3Jlc291cmNlcykKLSAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICBfdW5hdmFpbFtyZXNvdXJjZV0gPSBOb25lCi0gICAgcmV0dXJuIHJlc3VsdAotCi1fdW5hdmFpbCA9IHt9Ci1kZWYgcmVxdWlyZXMocmVzb3VyY2UsIG1zZz1Ob25lKToKLSAgICAiIiJSYWlzZSBSZXNvdXJjZURlbmllZCBpZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCi0KLSAgICBJZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIHRoZW4gYXV0b21hdGljYWxseSByZXR1cm4gVHJ1ZS4iIiIKLSAgICAjIHNlZSBpZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIC0gaWYgc28sIHRyZWF0IGFzIGlmCi0gICAgIyB0aGUgcmVzb3VyY2Ugd2FzIHNldAotICAgIGlmIHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl9nbG9iYWxzLmdldCgiX19uYW1lX18iKSA9PSAiX19tYWluX18iOgotICAgICAgICByZXR1cm4KLSAgICBpZiBub3QgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6Ci0gICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgbXNnID0gIlVzZSBvZiB0aGUgYCVzJyByZXNvdXJjZSBub3QgZW5hYmxlZCIgJSByZXNvdXJjZQotICAgICAgICByYWlzZSBSZXNvdXJjZURlbmllZChtc2cpCi0KLWRlZiBmaW5kX3BhY2thZ2VfbW9kdWxlcyhwYWNrYWdlLCBtYXNrKToKLSAgICBpbXBvcnQgZm5tYXRjaAotICAgIGlmIChoYXNhdHRyKHBhY2thZ2UsICJfX2xvYWRlcl9fIikgYW5kCi0gICAgICAgICAgICBoYXNhdHRyKHBhY2thZ2UuX19sb2FkZXJfXywgJ19maWxlcycpKToKLSAgICAgICAgcGF0aCA9IHBhY2thZ2UuX19uYW1lX18ucmVwbGFjZSgiLiIsIG9zLnBhdGguc2VwKQotICAgICAgICBtYXNrID0gb3MucGF0aC5qb2luKHBhdGgsIG1hc2spCi0gICAgICAgIGZvciBmbm0gaW4gcGFja2FnZS5fX2xvYWRlcl9fLl9maWxlcy5rZXlzKCk6Ci0gICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZubSwgbWFzayk6Ci0gICAgICAgICAgICAgICAgeWllbGQgb3MucGF0aC5zcGxpdGV4dChmbm0pWzBdLnJlcGxhY2Uob3MucGF0aC5zZXAsICIuIikKLSAgICBlbHNlOgotICAgICAgICBwYXRoID0gcGFja2FnZS5fX3BhdGhfX1swXQotICAgICAgICBmb3IgZm5tIGluIG9zLmxpc3RkaXIocGF0aCk6Ci0gICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZubSwgbWFzayk6Ci0gICAgICAgICAgICAgICAgeWllbGQgIiVzLiVzIiAlIChwYWNrYWdlLl9fbmFtZV9fLCBvcy5wYXRoLnNwbGl0ZXh0KGZubSlbMF0pCi0KLWRlZiBnZXRfdGVzdHMocGFja2FnZSwgbWFzaywgdmVyYm9zaXR5LCBleGNsdWRlPSgpKToKLSAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHNraXBwZWQgdGVzdCBtb2R1bGVzLCBhbmQgYSBsaXN0IG9mIHRlc3QgY2FzZXMuIiIiCi0gICAgdGVzdHMgPSBbXQotICAgIHNraXBwZWQgPSBbXQotICAgIGZvciBtb2RuYW1lIGluIGZpbmRfcGFja2FnZV9tb2R1bGVzKHBhY2thZ2UsIG1hc2spOgotICAgICAgICBpZiBtb2RuYW1lLnNwbGl0KCIuIilbLTFdIGluIGV4Y2x1ZGU6Ci0gICAgICAgICAgICBza2lwcGVkLmFwcGVuZChtb2RuYW1lKQotICAgICAgICAgICAgaWYgdmVyYm9zaXR5ID4gMToKLSAgICAgICAgICAgICAgICBwcmludCgiU2tpcHBlZCAlczogZXhjbHVkZWQiICUgbW9kbmFtZSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhtb2RuYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbJyonXSkKLSAgICAgICAgZXhjZXB0IChSZXNvdXJjZURlbmllZCwgdW5pdHRlc3QuU2tpcFRlc3QpIGFzIGRldGFpbDoKLSAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKG1vZG5hbWUpCi0gICAgICAgICAgICBpZiB2ZXJib3NpdHkgPiAxOgotICAgICAgICAgICAgICAgIHByaW50KCJTa2lwcGVkICVzOiAlcyIgJSAobW9kbmFtZSwgZGV0YWlsKSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZm9yIG5hbWUgaW4gZGlyKG1vZCk6Ci0gICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoIl8iKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgbyA9IGdldGF0dHIobW9kLCBuYW1lKQotICAgICAgICAgICAgaWYgdHlwZShvKSBpcyB0eXBlKHVuaXR0ZXN0LlRlc3RDYXNlKSBhbmQgaXNzdWJjbGFzcyhvLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKG8pCi0gICAgcmV0dXJuIHNraXBwZWQsIHRlc3RzCi0KLWRlZiB1c2FnZSgpOgotICAgIHByaW50KF9fZG9jX18pCi0gICAgcmV0dXJuIDEKLQotZGVmIHRlc3Rfd2l0aF9yZWZjb3VudHMocnVubmVyLCB2ZXJib3NpdHksIHRlc3RjYXNlKToKLSAgICAiIiJSdW4gdGVzdGNhc2Ugc2V2ZXJhbCB0aW1lcywgdHJhY2tpbmcgcmVmZXJlbmNlIGNvdW50cy4iIiIKLSAgICBpbXBvcnQgZ2MKLSAgICBpbXBvcnQgY3R5cGVzCi0gICAgcHRjID0gY3R5cGVzLl9wb2ludGVyX3R5cGVfY2FjaGUuY29weSgpCi0gICAgY2ZjID0gY3R5cGVzLl9jX2Z1bmN0eXBlX2NhY2hlLmNvcHkoKQotICAgIHdmYyA9IGN0eXBlcy5fd2luX2Z1bmN0eXBlX2NhY2hlLmNvcHkoKQotCi0gICAgIyB3aGVuIHNlYXJjaGluZyBmb3IgcmVmY291bnQgbGVha3MsIHdlIGhhdmUgdG8gbWFudWFsbHkgcmVzZXQgYW55Ci0gICAgIyBjYWNoZXMgdGhhdCBjdHlwZXMgaGFzLgotICAgIGRlZiBjbGVhbnVwKCk6Ci0gICAgICAgIGN0eXBlcy5fcG9pbnRlcl90eXBlX2NhY2hlID0gcHRjLmNvcHkoKQotICAgICAgICBjdHlwZXMuX2NfZnVuY3R5cGVfY2FjaGUgPSBjZmMuY29weSgpCi0gICAgICAgIGN0eXBlcy5fd2luX2Z1bmN0eXBlX2NhY2hlID0gd2ZjLmNvcHkoKQotICAgICAgICBnYy5jb2xsZWN0KCkKLQotICAgIHRlc3QgPSB1bml0dGVzdC5tYWtlU3VpdGUodGVzdGNhc2UpCi0gICAgZm9yIGkgaW4gcmFuZ2UoNSk6Ci0gICAgICAgIHJjID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBydW5uZXIucnVuKHRlc3QpCi0gICAgICAgIGNsZWFudXAoKQotICAgIENPVU5UID0gNQotICAgIHJlZmNvdW50cyA9IFtOb25lXSAqIENPVU5UCi0gICAgZm9yIGkgaW4gcmFuZ2UoQ09VTlQpOgotICAgICAgICByYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcnVubmVyLnJ1bih0ZXN0KQotICAgICAgICBjbGVhbnVwKCkKLSAgICAgICAgcmVmY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKSAtIHJjCi0gICAgaWYgZmlsdGVyKE5vbmUsIHJlZmNvdW50cyk6Ci0gICAgICAgIHByaW50KCIlcyBsZWFrczpcblx0IiAlIHRlc3RjYXNlLCByZWZjb3VudHMpCi0gICAgZWxpZiB2ZXJib3NpdHk6Ci0gICAgICAgIHByaW50KCIlczogb2suIiAlIHRlc3RjYXNlKQotCi1jbGFzcyBUZXN0UnVubmVyKHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKToKLSAgICBkZWYgcnVuKHNlbGYsIHRlc3QsIHNraXBwZWQpOgotICAgICAgICAiUnVuIHRoZSBnaXZlbiB0ZXN0IGNhc2Ugb3IgdGVzdCBzdWl0ZS4iCi0gICAgICAgICMgU2FtZSBhcyB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lci5ydW4sIGV4Y2VwdCB0aGF0IGl0IHJlcG9ydHMKLSAgICAgICAgIyBza2lwcGVkIHRlc3RzLgotICAgICAgICByZXN1bHQgPSBzZWxmLl9tYWtlUmVzdWx0KCkKLSAgICAgICAgc3RhcnRUaW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGVzdChyZXN1bHQpCi0gICAgICAgIHN0b3BUaW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGltZVRha2VuID0gc3RvcFRpbWUgLSBzdGFydFRpbWUKLSAgICAgICAgcmVzdWx0LnByaW50RXJyb3JzKCkKLSAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihyZXN1bHQuc2VwYXJhdG9yMikKLSAgICAgICAgcnVuID0gcmVzdWx0LnRlc3RzUnVuCi0gICAgICAgIGlmIF91bmF2YWlsOiAjc2tpcHBlZDoKLSAgICAgICAgICAgIHJlcXVlc3RlZCA9IGxpc3QoX3VuYXZhaWwua2V5cygpKQotICAgICAgICAgICAgcmVxdWVzdGVkLnNvcnQoKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiUmFuICVkIHRlc3QlcyBpbiAlLjNmcyAoJXMgbW9kdWxlJXMgc2tpcHBlZCkiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1biwgcnVuICE9IDEgYW5kICJzIiBvciAiIiwgdGltZVRha2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNraXBwZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNraXBwZWQpICE9IDEgYW5kICJzIiBvciAiIikpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJVbmF2YWlsYWJsZSByZXNvdXJjZXM6ICVzIiAlICIsICIuam9pbihyZXF1ZXN0ZWQpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVuLCBydW4gIT0gMSBhbmQgInMiIG9yICIiLCB0aW1lVGFrZW4pKQotICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCkKLSAgICAgICAgaWYgbm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiRkFJTEVEICgiKQotICAgICAgICAgICAgZmFpbGVkLCBlcnJvcmVkID0gbWFwKGxlbiwgKHJlc3VsdC5mYWlsdXJlcywgcmVzdWx0LmVycm9ycykpCi0gICAgICAgICAgICBpZiBmYWlsZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoImZhaWx1cmVzPSVkIiAlIGZhaWxlZCkKLSAgICAgICAgICAgIGlmIGVycm9yZWQ6Ci0gICAgICAgICAgICAgICAgaWYgZmFpbGVkOiBzZWxmLnN0cmVhbS53cml0ZSgiLCAiKQotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJlcnJvcnM9JWQiICUgZXJyb3JlZCkKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIikiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiT0siKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLQotZGVmIG1haW4oKnBhY2thZ2VzKToKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInJxdnU6eDoiKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3I6Ci0gICAgICAgIHJldHVybiB1c2FnZSgpCi0KLSAgICB2ZXJib3NpdHkgPSAxCi0gICAgc2VhcmNoX2xlYWtzID0gRmFsc2UKLSAgICBleGNsdWRlID0gW10KLSAgICBmb3IgZmxhZywgdmFsdWUgaW4gb3B0czoKLSAgICAgICAgaWYgZmxhZyA9PSAiLXEiOgotICAgICAgICAgICAgdmVyYm9zaXR5IC09IDEKLSAgICAgICAgZWxpZiBmbGFnID09ICItdiI6Ci0gICAgICAgICAgICB2ZXJib3NpdHkgKz0gMQotICAgICAgICBlbGlmIGZsYWcgPT0gIi1yIjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzeXMuZ2V0dG90YWxyZWZjb3VudAotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIHByaW50KCItciBmbGFnIHJlcXVpcmVzIFB5dGhvbiBkZWJ1ZyBidWlsZCIsIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgICAgIHNlYXJjaF9sZWFrcyA9IFRydWUKLSAgICAgICAgZWxpZiBmbGFnID09ICItdSI6Ci0gICAgICAgICAgICB1c2VfcmVzb3VyY2VzLmV4dGVuZCh2YWx1ZS5zcGxpdCgiLCIpKQotICAgICAgICBlbGlmIGZsYWcgPT0gIi14IjoKLSAgICAgICAgICAgIGV4Y2x1ZGUuZXh0ZW5kKHZhbHVlLnNwbGl0KCIsIikpCi0KLSAgICBtYXNrID0gInRlc3RfKi5weSIKLSAgICBpZiBhcmdzOgotICAgICAgICBtYXNrID0gYXJnc1swXQotCi0gICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6Ci0gICAgICAgIHJ1bl90ZXN0cyhwYWNrYWdlLCBtYXNrLCB2ZXJib3NpdHksIHNlYXJjaF9sZWFrcywgZXhjbHVkZSkKLQotCi1kZWYgcnVuX3Rlc3RzKHBhY2thZ2UsIG1hc2ssIHZlcmJvc2l0eSwgc2VhcmNoX2xlYWtzLCBleGNsdWRlKToKLSAgICBza2lwcGVkLCB0ZXN0Y2FzZXMgPSBnZXRfdGVzdHMocGFja2FnZSwgbWFzaywgdmVyYm9zaXR5LCBleGNsdWRlKQotICAgIHJ1bm5lciA9IFRlc3RSdW5uZXIodmVyYm9zaXR5PXZlcmJvc2l0eSkKLQotICAgIHN1aXRlcyA9IFt1bml0dGVzdC5tYWtlU3VpdGUobykgZm9yIG8gaW4gdGVzdGNhc2VzXQotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlcykKLSAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlLCBza2lwcGVkKQotCi0gICAgaWYgc2VhcmNoX2xlYWtzOgotICAgICAgICAjIGh1bnQgZm9yIHJlZmNvdW50IGxlYWtzCi0gICAgICAgIHJ1bm5lciA9IEJhc2ljVGVzdFJ1bm5lcigpCi0gICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKLSAgICAgICAgICAgIHRlc3Rfd2l0aF9yZWZjb3VudHMocnVubmVyLCB2ZXJib3NpdHksIHQpCi0KLSAgICByZXR1cm4gYm9vbChyZXN1bHQuZXJyb3JzKQotCi1jbGFzcyBCYXNpY1Rlc3RSdW5uZXI6Ci0gICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0gICAgICAgIHRlc3QocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0CitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIHN1cHBvcnQubG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19fbWFpbl9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmE5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvcnVudGVzdHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvcnVudGVzdHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YTJiMjYuLjAwMDAwMDAKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3J1bnRlc3RzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIiIiVXNhZ2U6IHJ1bnRlc3RzLnB5IFstcV0gWy1yXSBbLXZdIFstdSByZXNvdXJjZXNdIFttYXNrXQotCi1SdW4gYWxsIHRlc3RzIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5LCBhbmQgcHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzLgotQ29tbWFuZCBsaW5lIGZsYWdzOgotICAtcSAgICAgcXVpZXQgbW9kZTogZG9uJ3QgcHJpbnQgYW55dGhpbmcgd2hpbGUgdGhlIHRlc3RzIGFyZSBydW5uaW5nCi0gIC1yICAgICBydW4gdGVzdHMgcmVwZWF0ZWRseSwgbG9vayBmb3IgcmVmY291bnQgbGVha3MKLSAgLXU8cmVzb3VyY2VzPgotICAgICAgICAgQWRkIHJlc291cmNlcyB0byB0aGUgbGl0cyBvZiBhbGxvd2VkIHJlc291cmNlcy4gJyonIGFsbG93cyBhbGwKLSAgICAgICAgIHJlc291cmNlcy4KLSAgLXYgICAgIHZlcmJvc2UgbW9kZTogcHJpbnQgdGhlIHRlc3QgY3VycmVudGx5IGV4ZWN1dGVkCi0gIC14PHRlc3QxWyx0ZXN0Mi4uLl0+Ci0gICAgICAgICBFeGNsdWRlIHNwZWNpZmllZCB0ZXN0cy4KLSAgbWFzayAgIG1hc2sgdG8gc2VsZWN0IGZpbGVuYW1lcyBjb250YWluaW5nIHRlc3RjYXNlcywgd2lsZGNhcmRzIGFsbG93ZWQKLSIiIgotaW1wb3J0IHN5cwotaW1wb3J0IGN0eXBlcy50ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgc3lzLmV4aXQoY3R5cGVzLnRlc3QubWFpbihjdHlwZXMudGVzdCkpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKaW5kZXggOTliOTdhYS4uOGNhNzdlMCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weQpAQCAtMSw2ICsxLDggQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIAorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKKwogZm9ybWF0cyA9ICJiQmhIaUlsTHFRZmQiCiAKIGZvcm1hdHMgPSBjX2J5dGUsIGNfdWJ5dGUsIGNfc2hvcnQsIGNfdXNob3J0LCBjX2ludCwgY191aW50LCBcCkBAIC05OCwyMCArMTAwLDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbMTo0OjJdLCBiIm8iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCBiImZvbyIpCiAKLSAgICB0cnk6Ci0gICAgICAgIGNyZWF0ZV91bmljb2RlX2J1ZmZlcgotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF9mcm9tX2FkZHJlc3NXKHNlbGYpOgotICAgICAgICAgICAgcCA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigiZm9vIikKLSAgICAgICAgICAgIHN6ID0gKGNfd2NoYXIgKiAzKS5mcm9tX2FkZHJlc3MoYWRkcmVzc29mKHApKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6XSwgImZvbyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6XSwgImZvbyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6LTFdLCAib29mIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjozXSwgImYiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzelsxOjQ6Ml0sICJvIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3oudmFsdWUsICJmb28iKQorICAgIEBuZWVkX3N5bWJvbCgnY3JlYXRlX3VuaWNvZGVfYnVmZmVyJykKKyAgICBkZWYgdGVzdF9mcm9tX2FkZHJlc3NXKHNlbGYpOgorICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJmb28iKQorICAgICAgICBzeiA9IChjX3djaGFyICogMykuZnJvbV9hZGRyZXNzKGFkZHJlc3NvZihwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6XSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjpdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Oi0xXSwgIm9vZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjozXSwgImYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6WzE6NDoyXSwgIm8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCAiZm9vIikKIAogICAgIGRlZiB0ZXN0X2NhY2hlKHNlbGYpOgogICAgICAgICAjIEFycmF5IHR5cGVzIGFyZSBjYWNoZWQgaW50ZXJuYWxseSBpbiB0aGUgX2N0eXBlcyBleHRlbnNpb24sCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkKaW5kZXggNDM3MDNlMy4uOTQ4YjQ2MyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXNfcGFyYW1ldGVyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FzX3BhcmFtZXRlci5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgX2N0eXBlc190ZXN0CiAKIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQpAQCAtMTcsMTEgKzE4LDggQEAKICAgICBkZWYgd3JhcChzZWxmLCBwYXJhbSk6CiAgICAgICAgIHJldHVybiBwYXJhbQogCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKICAgICBkZWYgdGVzdF93Y2hhcl9wYXJtKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX3djaGFyCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgxKSwgc2VsZi53cmFwKCJ4IiksIHNlbGYud3JhcCgzKSwgc2VsZi53cmFwKDQpLCBzZWxmLndyYXAoNS4wKSwgc2VsZi53cmFwKDYuMCkpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkKaW5kZXggNzdkZTYwNi4uOWNhMDUzZCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIApAQCAtMTI3LDIwICsxMjgsMTggQEAKICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX2NoYXIsIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgY19jaGFyJykpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY193Y2hhcgotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3djaGFyLCAxKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3djaGFyJykpCi0KICAgICAgICAgY2xhc3MgRHVtbXkoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gW10KIAogICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIER1bW15LCAxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIER1bW15JykpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorICAgIGRlZiB0ZXN0X2Nfd2NoYXIoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY193Y2hhciwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LAorICAgICAgICAgICAgICAgIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfd2NoYXInKSkKKwogICAgIGRlZiB0ZXN0X3NpbmdsZV9iaXRmaWVsZF9zaXplKHNlbGYpOgogICAgICAgICBmb3IgY190eXAgaW4gaW50X3R5cGVzOgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3R5cCwgLTEpKQpAQCAtMjQwLDcgKzIzOSw3IEBACiAgICAgICAgICAgICBfYW5vbnltb3VzXyA9IFsiXyJdCiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIl8iLCBYKV0KIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY3R5cGVzLCAiY191aW50MzIiKSwgImNfaW50MzIgaXMgcmVxdWlyZWQiKQorICAgIEBuZWVkX3N5bWJvbCgnY191aW50MzInKQogICAgIGRlZiB0ZXN0X3VpbnQzMihzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY191aW50MzIsIDMyKV0KQEAgLTI1MCw3ICsyNDksNyBAQAogICAgICAgICB4LmEgPSAweEZEQ0JBOTg3CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAweEZEQ0JBOTg3KQogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjdHlwZXMsICJjX3VpbnQ2NCIpLCAiY19pbnQ2NCBpcyByZXF1aXJlZCIpCisgICAgQG5lZWRfc3ltYm9sKCdjX3VpbnQ2NCcpCiAgICAgZGVmIHRlc3RfdWludDY0KHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3VpbnQ2NCwgNjQpXQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J1ZmZlcnMucHkKaW5kZXggMGQxMmY0Ny4uMTY2ZmFhZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5CkBAIC0xLDQgKzEsNSBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgdW5pdHRlc3QKIAogY2xhc3MgU3RyaW5nQnVmZmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjAsNDMgKzIxLDQ0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCBiImFjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sIGIiYSIpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjcmVhdGVfc3RyaW5nX2J1ZmZlciwgImFiYyIpCisKICAgICBkZWYgdGVzdF9idWZmZXJfaW50ZXJmYWNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihieXRlYXJyYXkoY3JlYXRlX3N0cmluZ19idWZmZXIoMCkpKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnl0ZWFycmF5KGNyZWF0ZV9zdHJpbmdfYnVmZmVyKDEpKSksIDEpCiAKLSAgICB0cnk6Ci0gICAgICAgIGNfd2NoYXIKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgZGVmIHRlc3RfdW5pY29kZV9idWZmZXIoc2VsZik6Ci0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKDMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDMyICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKKyAgICBkZWYgdGVzdF91bmljb2RlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgYiA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgMzIgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShiWzBdKSwgc3RyKQogCi0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCisgICAgICAgIGIgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIoImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYlswXSksIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzBdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sICJhIikKIAotICAgICAgICBkZWYgdGVzdF91bmljb2RlX2NvbnZlcnNpb24oc2VsZik6Ci0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3JlYXRlX3VuaWNvZGVfYnVmZmVyLCBiImFiYyIpCisKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorICAgIGRlZiB0ZXN0X3VuaWNvZGVfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgYiA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShiWzBdKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCAiYWMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjo1XSwgImEiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQppbmRleCBlZTQ5YzQ1Li4yMGZhMDU2IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtNiwyNyArNiw0MCBAQAogY2xhc3MgQnl0ZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9jX2NoYXIoc2VsZik6CiAgICAgICAgIHggPSBjX2NoYXIoYiJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX2NoYXIsICJ4IikKICAgICAgICAgeC52YWx1ZSA9IGIieSIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgeC52YWx1ZSA9ICJ5IgogICAgICAgICBjX2NoYXIuZnJvbV9wYXJhbShiIngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfY2hhci5mcm9tX3BhcmFtLCAieCIpCiAgICAgICAgIChjX2NoYXIgKiAzKShiImEiLCBiImIiLCBiImMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfY2hhciAqIDMsICJhIiwgImIiLCAiYyIpCiAKICAgICBkZWYgdGVzdF9jX3djaGFyKHNlbGYpOgogICAgICAgICB4ID0gY193Y2hhcigieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY193Y2hhciwgYiJ4IikKICAgICAgICAgeC52YWx1ZSA9ICJ5IgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB4LnZhbHVlID0gYiJ5IgogICAgICAgICBjX3djaGFyLmZyb21fcGFyYW0oIngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd2NoYXIuZnJvbV9wYXJhbSwgYiJ4IikKICAgICAgICAgKGNfd2NoYXIgKiAzKSgiYSIsICJiIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd2NoYXIgKiAzLCBiImEiLCBiImIiLCBiImMiKQogCiAgICAgZGVmIHRlc3RfY19jaGFyX3Aoc2VsZik6CiAgICAgICAgIGNfY2hhcl9wKGIiZm9vIGJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19jaGFyX3AsICJmb28gYmFyIikKIAogICAgIGRlZiB0ZXN0X2Nfd2NoYXJfcChzZWxmKToKICAgICAgICAgY193Y2hhcl9wKCJmb28gYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3djaGFyX3AsIGIiZm9vIGJhciIpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfY2hhciAqIDMpXQogCiAgICAgICAgIHggPSBYKGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBYLCAiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIGIiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHguYSksIGJ5dGVzKQogCkBAIC0zNSwxNiArNDgsMTggQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfd2NoYXIgKiAzKV0KIAogICAgICAgICB4ID0gWCgiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBYLCBiImFiYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHguYSksIHN0cikKIAotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgotICAgICAgICBkZWYgdGVzdF9CU1RSKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBfU2ltcGxlQ0RhdGEKLSAgICAgICAgICAgIGNsYXNzIEJTVFIoX1NpbXBsZUNEYXRhKToKLSAgICAgICAgICAgICAgICBfdHlwZV8gPSAiWCIKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfQlNUUihzZWxmKToKKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBfU2ltcGxlQ0RhdGEKKyAgICAgICAgY2xhc3MgQlNUUihfU2ltcGxlQ0RhdGEpOgorICAgICAgICAgICAgX3R5cGVfID0gIlgiCiAKLSAgICAgICAgICAgIEJTVFIoImFiYyIpCisgICAgICAgIEJTVFIoImFiYyIpCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J5dGVzd2FwLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKaW5kZXggNjNkZGUxMy4uNDI3YmI4YiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKQEAgLTE0LDcgKzE0LDggQEAKICMgRm9yIFN0cnVjdHVyZXMgYW5kIFVuaW9ucywgdGhlc2UgdHlwZXMgYXJlIGNyZWF0ZWQgb24gZGVtYW5kLgogCiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgWF90ZXN0KHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9YKHNlbGYpOgogICAgICAgICBwcmludChzeXMuYnl0ZW9yZGVyLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDMyKToKICAgICAgICAgICAgIGJpdHMgPSBCSVRTKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weQppbmRleCA1NjAwYjQzLi4zODI0ZjdjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FsbGJhY2tzLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIGltcG9ydCBfY3R5cGVzX3Rlc3QKIAogY2xhc3MgQ2FsbGJhY2tzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg4LDkgKzg5LDEwIEBACiAgICAgIyBkaXNhYmxlZDogd291bGQgbm93IChjb3JyZWN0bHkpIHJhaXNlIGEgUnVudGltZVdhcm5pbmcgYWJvdXQKICAgICAjIGEgbWVtb3J5IGxlYWsuICBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSBub24taW50ZWdyYWwKICAgICAjIEMgdHlwZSB3aXRob3V0IGNhdXNpbmcgYSBtZW1vcnkgbGVhay4KLSMjICAgIGRlZiB0ZXN0X2NoYXJfcChzZWxmKToKLSMjICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19jaGFyX3AsICJhYmMiKQotIyMgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2NoYXJfcCwgImRlZiIpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NoYXJfcChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfY2hhcl9wLCAiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfY2hhcl9wLCAiZGVmIikKIAogICAgIGRlZiB0ZXN0X3B5b2JqZWN0KHNlbGYpOgogICAgICAgICBvID0gKCkKQEAgLTE0MiwxMyArMTQ0LDEyIEBACiAgICAgICAgIENGVU5DVFlQRShOb25lKShsYW1iZGEgeD1OYXN0eSgpOiBOb25lKQogCiAKLXRyeToKLSAgICBXSU5GVU5DVFlQRQotZXhjZXB0IE5hbWVFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGNsYXNzIFN0ZGNhbGxDYWxsYmFja3MoQ2FsbGJhY2tzKToKK0BuZWVkX3N5bWJvbCgnV0lORlVOQ1RZUEUnKQorY2xhc3MgU3RkY2FsbENhbGxiYWNrcyhDYWxsYmFja3MpOgorICAgIHRyeToKICAgICAgICAgZnVuY3R5cGUgPSBXSU5GVU5DVFlQRQorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0xNzgsNyArMTc5LDcgQEAKICAgICAgICAgZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5CiAgICAgICAgIGxpYmNfcGF0aCA9IGZpbmRfbGlicmFyeSgiYyIpCiAgICAgICAgIGlmIG5vdCBsaWJjX3BhdGg6Ci0gICAgICAgICAgICByZXR1cm4gIyBjYW5ub3QgdGVzdAorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGZpbmQgbGliYycpCiAgICAgICAgIGxpYmMgPSBDRExMKGxpYmNfcGF0aCkKIAogICAgICAgICBAQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKGNfaW50KSwgUE9JTlRFUihjX2ludCkpCkBAIC0xOTAsMjMgKzE5MSwxOSBAQAogICAgICAgICBsaWJjLnFzb3J0KGFycmF5LCBsZW4oYXJyYXkpLCBzaXplb2YoY19pbnQpLCBjbXBfZnVuYykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheVs6XSwgWzEsIDUsIDcsIDMzLCA5OV0pCiAKLSAgICB0cnk6Ci0gICAgICAgIFdJTkZVTkNUWVBFCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYihzZWxmKToKLSAgICAgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICBAbmVlZF9zeW1ib2woJ1dJTkZVTkNUWVBFJykKKyAgICBkZWYgdGVzdF9pc3N1ZV84OTU5X2Ioc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICAgICAgZ2xvYmFsIHdpbmRvd0NvdW50CisgICAgICAgIHdpbmRvd0NvdW50ID0gMAorCisgICAgICAgIEBXSU5GVU5DVFlQRShCT09MLCBIV05ELCBMUEFSQU0pCisgICAgICAgIGRlZiBFbnVtV2luZG93c0NhbGxiYWNrRnVuYyhod25kLCBsUGFyYW0pOgogICAgICAgICAgICAgZ2xvYmFsIHdpbmRvd0NvdW50Ci0gICAgICAgICAgICB3aW5kb3dDb3VudCA9IDAKKyAgICAgICAgICAgIHdpbmRvd0NvdW50ICs9IDEKKyAgICAgICAgICAgIHJldHVybiBUcnVlICNBbGxvdyB3aW5kb3dzIHRvIGtlZXAgZW51bWVyYXRpbmcKIAotICAgICAgICAgICAgQFdJTkZVTkNUWVBFKEJPT0wsIEhXTkQsIExQQVJBTSkKLSAgICAgICAgICAgIGRlZiBFbnVtV2luZG93c0NhbGxiYWNrRnVuYyhod25kLCBsUGFyYW0pOgotICAgICAgICAgICAgICAgIGdsb2JhbCB3aW5kb3dDb3VudAotICAgICAgICAgICAgICAgIHdpbmRvd0NvdW50ICs9IDEKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSAjQWxsb3cgd2luZG93cyB0byBrZWVwIGVudW1lcmF0aW5nCi0KLSAgICAgICAgICAgIHdpbmRsbC51c2VyMzIuRW51bVdpbmRvd3MoRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMsIDApCisgICAgICAgIHdpbmRsbC51c2VyMzIuRW51bVdpbmRvd3MoRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMsIDApCiAKICAgICBkZWYgdGVzdF9jYWxsYmFja19yZWdpc3Rlcl9pbnQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzgyNzU6IGJ1Z2d5IGhhbmRsaW5nIG9mIGNhbGxiYWNrIGFyZ3MgdW5kZXIgV2luNjQKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5CmluZGV4IDMyNDk2ZjYuLjE4N2QyYmQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FzdC5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiAKQEAgLTc1LDE1ICs3NiwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoY2FzdChzLCBjX3ZvaWRfcCksIGNfY2hhcl9wKS52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJoaWhvIikKIAotICAgIHRyeToKLSAgICAgICAgY193Y2hhcl9wCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X3djaGFyX3Aoc2VsZik6Ci0gICAgICAgICAgICBzID0gY193Y2hhcl9wKCJoaWhvIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY193Y2hhcl9wKS52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoaWhvIikKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3Rfd2NoYXJfcChzZWxmKToKKyAgICAgICAgcyA9IGNfd2NoYXJfcCgiaGlobyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY193Y2hhcl9wKS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpaG8iKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5CmluZGV4IGEwODA0OTYuLmFjMjI0MGYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jZnVuY3MucHkKQEAgLTMsNiArMyw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiAKIGltcG9ydCBfY3R5cGVzX3Rlc3QKIApAQCAtMTkzLDcgKzE5NCw3IEBACiB0cnk6CiAgICAgV2luRExMCiBleGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKKyAgICBkZWYgc3RkY2FsbF9kbGwoKl8pOiBwYXNzCiBlbHNlOgogICAgIGNsYXNzIHN0ZGNhbGxfZGxsKFdpbkRMTCk6CiAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKQEAgLTIwMyw5ICsyMDQsOSBAQAogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCBmdW5jKQogICAgICAgICAgICAgcmV0dXJuIGZ1bmMKIAotICAgIGNsYXNzIHN0ZGNhbGxDRnVuY3Rpb25zKENGdW5jdGlvbnMpOgotICAgICAgICBfZGxsID0gc3RkY2FsbF9kbGwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQotICAgICAgICBwYXNzCitAbmVlZF9zeW1ib2woJ1dpbkRMTCcpCitjbGFzcyBzdGRjYWxsQ0Z1bmN0aW9ucyhDRnVuY3Rpb25zKToKKyAgICBfZGxsID0gc3RkY2FsbF9kbGwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQppbmRleCAwMWNjYzU3Li5lOTU2N2RjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQpAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIAogY2xhc3MgQ0hFQ0tFRChjX2ludCk6CiAgICAgZGVmIF9jaGVja19yZXR2YWxfKHZhbHVlKToKQEAgLTI1LDE1ICsyNiwxMSBAQAogICAgICAgICBkZWwgZGxsLl90ZXN0ZnVuY19wX3AucmVzdHlwZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBkbGwuX3Rlc3RmdW5jX3BfcCg0MikpCiAKLSAgICB0cnk6Ci0gICAgICAgIG9sZWRsbAotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF9vbGVkbGwoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlZGxsLm9sZWF1dDMyLkNyZWF0ZVR5cGVMaWIyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCisgICAgQG5lZWRfc3ltYm9sKCdvbGVkbGwnKQorICAgIGRlZiB0ZXN0X29sZWRsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZWRsbC5vbGVhdXQzMi5DcmVhdGVUeXBlTGliMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9lcnJjaGVjay5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2VycmNoZWNrLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDkxM2Y5Li4wMDAwMDAwCi0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2VycmNoZWNrLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotaW1wb3J0IHN5cwotZnJvbSBjdHlwZXMgaW1wb3J0ICoKLQotIyNjbGFzcyBITU9EVUxFKFN0cnVjdHVyZSk6Ci0jIyAgICBfZmllbGRzXyA9IFsoInZhbHVlIiwgY192b2lkX3ApXQotCi0jIyAgICBkZWYgX19yZXByX18oc2VsZik6Ci0jIyAgICAgICAgcmV0dXJuICI8SE1PRFVMRSAlcz4iICUgc2VsZi52YWx1ZQotCi0jI3dpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBLnJlc3R5cGUgPSBITU9EVUxFCi0KLSMjcHJpbnQgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoInB5dGhvbjIzLmRsbCIpCi0jI3ByaW50IGhleChzeXMuZGxsaGFuZGxlKQotCi0jI2RlZiBub256ZXJvKGhhbmRsZSk6Ci0jIyAgICByZXR1cm4gKEdldExhc3RFcnJvcigpLCBoYW5kbGUpCi0KLSMjd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEuZXJyY2hlY2sgPSBub256ZXJvCi0jI3ByaW50IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKCJzcGFtIikKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9maW5kLnB5CmluZGV4IGM1NGI2OWIuLmQ4Y2Q4YWQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weQpAQCAtMSw4MiArMSw4MSBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKIGZyb20gY3R5cGVzIGltcG9ydCAqCiBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKLWZyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKLQotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgbGliX2dsID0gZmluZF9saWJyYXJ5KCJPcGVuR0wzMiIpCi0gICAgbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiR2x1MzIiKQotICAgIGxpYl9nbGUgPSBOb25lCi1lbGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKLSAgICBsaWJfZ2wgPSBsaWJfZ2x1ID0gZmluZF9saWJyYXJ5KCJPcGVuR0wiKQotICAgIGxpYl9nbGUgPSBOb25lCi1lbHNlOgotICAgIGxpYl9nbCA9IGZpbmRfbGlicmFyeSgiR0wiKQotICAgIGxpYl9nbHUgPSBmaW5kX2xpYnJhcnkoIkdMVSIpCi0gICAgbGliX2dsZSA9IGZpbmRfbGlicmFyeSgiZ2xlIikKLQotIyMgcHJpbnQsIGZvciBkZWJ1Z2dpbmcKLWlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6Ci0gICAgaWYgbGliX2dsIG9yIGxpYl9nbHUgb3IgbGliX2dsZToKLSAgICAgICAgcHJpbnQoIk9wZW5HTCBsaWJyYXJpZXM6IikKLSAgICAgICAgZm9yIGl0ZW0gaW4gKCgiR0wiLCBsaWJfZ2wpLAotICAgICAgICAgICAgICAgICAgICAgKCJHTFUiLCBsaWJfZ2x1KSwKLSAgICAgICAgICAgICAgICAgICAgICgiZ2xlIiwgbGliX2dsZSkpOgotICAgICAgICAgICAgcHJpbnQoIlx0IiwgaXRlbSkKLQogCiAjIE9uIHNvbWUgc3lzdGVtcywgbG9hZGluZyB0aGUgT3BlbkdMIGxpYnJhcmllcyBuZWVkcyB0aGUgUlRMRF9HTE9CQUwgbW9kZS4KIGNsYXNzIFRlc3RfT3BlbkdMX2xpYnModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5nbCA9IHNlbGYuZ2x1ID0gc2VsZi5nbGUgPSBOb25lCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgbGliX2dsID0gbGliX2dsdSA9IGxpYl9nbGUgPSBOb25lCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgbGliX2dsID0gZmluZF9saWJyYXJ5KCJPcGVuR0wzMiIpCisgICAgICAgICAgICBsaWJfZ2x1ID0gZmluZF9saWJyYXJ5KCJHbHUzMiIpCisgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgbGliX2dsID0gbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiT3BlbkdMIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpYl9nbCA9IGZpbmRfbGlicmFyeSgiR0wiKQorICAgICAgICAgICAgbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiR0xVIikKKyAgICAgICAgICAgIGxpYl9nbGUgPSBmaW5kX2xpYnJhcnkoImdsZSIpCisKKyAgICAgICAgIyMgcHJpbnQsIGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgaWYgdGVzdC5zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiT3BlbkdMIGxpYnJhcmllczoiKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gKCgiR0wiLCBsaWJfZ2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgiR0xVIiwgbGliX2dsdSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJnbGUiLCBsaWJfZ2xlKSk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlx0IiwgaXRlbSkKKworICAgICAgICBjbHMuZ2wgPSBjbHMuZ2x1ID0gY2xzLmdsZSA9IE5vbmUKICAgICAgICAgaWYgbGliX2dsOgotICAgICAgICAgICAgc2VsZi5nbCA9IENETEwobGliX2dsLCBtb2RlPVJUTERfR0xPQkFMKQorICAgICAgICAgICAgY2xzLmdsID0gQ0RMTChsaWJfZ2wsIG1vZGU9UlRMRF9HTE9CQUwpCiAgICAgICAgIGlmIGxpYl9nbHU6Ci0gICAgICAgICAgICBzZWxmLmdsdSA9IENETEwobGliX2dsdSwgUlRMRF9HTE9CQUwpCisgICAgICAgICAgICBjbHMuZ2x1ID0gQ0RMTChsaWJfZ2x1LCBSVExEX0dMT0JBTCkKICAgICAgICAgaWYgbGliX2dsZToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmdsZSA9IENETEwobGliX2dsZSkKKyAgICAgICAgICAgICAgICBjbHMuZ2xlID0gQ0RMTChsaWJfZ2xlKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgaWYgbGliX2dsOgotICAgICAgICBkZWYgdGVzdF9nbChzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYuZ2w6Ci0gICAgICAgICAgICAgICAgc2VsZi5nbC5nbENsZWFySW5kZXgKKyAgICBkZWYgdGVzdF9nbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nbCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbGliX2dsIG5vdCBhdmFpbGFibGUnKQorICAgICAgICBzZWxmLmdsLmdsQ2xlYXJJbmRleAogCi0gICAgaWYgbGliX2dsdToKLSAgICAgICAgZGVmIHRlc3RfZ2x1KHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5nbHU6Ci0gICAgICAgICAgICAgICAgc2VsZi5nbHUuZ2x1QmVnaW5DdXJ2ZQorICAgIGRlZiB0ZXN0X2dsdShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nbHUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2xpYl9nbHUgbm90IGF2YWlsYWJsZScpCisgICAgICAgIHNlbGYuZ2x1LmdsdUJlZ2luQ3VydmUKIAotICAgIGlmIGxpYl9nbGU6Ci0gICAgICAgIGRlZiB0ZXN0X2dsZShzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYuZ2xlOgotICAgICAgICAgICAgICAgIHNlbGYuZ2xlLmdsZUdldEpvaW5TdHlsZQorICAgIGRlZiB0ZXN0X2dsZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nbGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2xpYl9nbGUgbm90IGF2YWlsYWJsZScpCisgICAgICAgIHNlbGYuZ2xlLmdsZUdldEpvaW5TdHlsZQogCi0jI2lmIG9zLm5hbWUgPT0gInBvc2l4IiBhbmQgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4iOgotCi0jIyAgICAjIE9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBzdWZmaXggaXMgJy5zbycsCi0jIyAgICAjIGF0IGxlYXN0IHNvbWUgbGlicmFyaWVzIGNhbiBiZSBsb2FkZWQgYXMgYXR0cmlidXRlcyBvZiB0aGUgY2RsbAotIyMgICAgIyBvYmplY3QsIHNpbmNlIGN0eXBlcyBub3cgdHJpZXMgbG9hZGluZyB0aGUgbGliIGFnYWluCi0jIyAgICAjIHdpdGggJy5zbycgYXBwZW5kZWQgb2YgdGhlIGZpcnN0IHRyeSBmYWlscy4KLSMjICAgICMKLSMjICAgICMgV29uJ3Qgd29yayBmb3IgbGliYywgdW5mb3J0dW5hdGVseS4gIE9UT0gsIGl0IGlzbid0Ci0jIyAgICAjIG5lZWRlZCBmb3IgbGliYyBzaW5jZSB0aGlzIGlzIGFscmVhZHkgbWFwcGVkIGludG8gdGhlIGN1cnJlbnQKLSMjICAgICMgcHJvY2VzcyAoPykKLSMjICAgICMKLSMjICAgICMgT24gTUFDIE9TWCwgaXQgd29uJ3Qgd29yayBlaXRoZXIsIGJlY2F1c2UgZGxvcGVuKCkgbmVlZHMgYSBmdWxsIHBhdGgsCi0jIyAgICAjIGFuZCB0aGUgZGVmYXVsdCBzdWZmaXggaXMgZWl0aGVyIG5vbmUgb3IgJy5keWxpYicuCi0KLSMjICAgIGNsYXNzIExvYWRMaWJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSMjICAgICAgICBkZWYgdGVzdF9saWJtKHNlbGYpOgotIyMgICAgICAgICAgICBpbXBvcnQgbWF0aAotIyMgICAgICAgICAgICBsaWJtID0gY2RsbC5saWJtCi0jIyAgICAgICAgICAgIHNxcnQgPSBsaWJtLnNxcnQKLSMjICAgICAgICAgICAgc3FydC5hcmd0eXBlcyA9IChjX2RvdWJsZSwpCi0jIyAgICAgICAgICAgIHNxcnQucmVzdHlwZSA9IGNfZG91YmxlCi0jIyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FydCgyKSwgbWF0aC5zcXJ0KDIpKQorIyBPbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgc3VmZml4IGlzICcuc28nLAorIyBhdCBsZWFzdCBzb21lIGxpYnJhcmllcyBjYW4gYmUgbG9hZGVkIGFzIGF0dHJpYnV0ZXMgb2YgdGhlIGNkbGwKKyMgb2JqZWN0LCBzaW5jZSBjdHlwZXMgbm93IHRyaWVzIGxvYWRpbmcgdGhlIGxpYiBhZ2FpbgorIyB3aXRoICcuc28nIGFwcGVuZGVkIG9mIHRoZSBmaXJzdCB0cnkgZmFpbHMuCisjCisjIFdvbid0IHdvcmsgZm9yIGxpYmMsIHVuZm9ydHVuYXRlbHkuICBPVE9ILCBpdCBpc24ndAorIyBuZWVkZWQgZm9yIGxpYmMgc2luY2UgdGhpcyBpcyBhbHJlYWR5IG1hcHBlZCBpbnRvIHRoZSBjdXJyZW50CisjIHByb2Nlc3MgKD8pCisjCisjIE9uIE1BQyBPU1gsIGl0IHdvbid0IHdvcmsgZWl0aGVyLCBiZWNhdXNlIGRsb3BlbigpIG5lZWRzIGEgZnVsbCBwYXRoLAorIyBhbmQgdGhlIGRlZmF1bHQgc3VmZml4IGlzIGVpdGhlciBub25lIG9yICcuZHlsaWInLgorQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZT09InBvc2l4IiBhbmQgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4iLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qgbm90IHN1aXRhYmxlIGZvciB0aGlzIHBsYXRmb3JtJykKK2NsYXNzIExvYWRMaWJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9saWJtKHNlbGYpOgorICAgICAgICBpbXBvcnQgbWF0aAorICAgICAgICBsaWJtID0gY2RsbC5saWJtCisgICAgICAgIHNxcnQgPSBsaWJtLnNxcnQKKyAgICAgICAgc3FydC5hcmd0eXBlcyA9IChjX2RvdWJsZSwpCisgICAgICAgIHNxcnQucmVzdHlwZSA9IGNfZG91YmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FydCgyKSwgbWF0aC5zcXJ0KDIpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5CmluZGV4IDA3ZWViNjguLjc1NjI4OTIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmN0aW9ucy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jdGlvbnMucHkKQEAgLTYsNiArNiw3IEBACiAiIiIKIAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgc3lzLCB1bml0dGVzdAogCiB0cnk6CkBAIC02MywyMiArNjQsMTYgQEAKICAgICAgICAgICAgIHBhc3MKIAogCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKICAgICBkZWYgdGVzdF93Y2hhcl9wYXJtKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX3djaGFyCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICByZXN1bHQgPSBmKDEsICJ4IiwgMywgNCwgNS4wLCA2LjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAxMzkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQogICAgIGRlZiB0ZXN0X3djaGFyX3Jlc3VsdChzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY193Y2hhcgotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2lfYmhpbGZkCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KICAgICAgICAgZi5yZXN0eXBlID0gY193Y2hhcgpAQCAtMTU1LDExICsxNTAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTIxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2NfbG9uZ2xvbmcnKQogICAgIGRlZiB0ZXN0X2xvbmdsb25ncmVzdWx0KHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX2xvbmdsb25nCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcV9iaGlsZmQKICAgICAgICAgZi5yZXN0eXBlID0gY19sb25nbG9uZwogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCkBAIC0yOTYsNiArMjg4LDcgQEAKICAgICAgICAgcmVzdWx0ID0gZigtMTAsIGNiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogCisgICAgQG5lZWRfc3ltYm9sKCdjX2xvbmdsb25nJykKICAgICBkZWYgdGVzdF9sb25nbG9uZ19jYWxsYmFja3Moc2VsZik6CiAKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfY2FsbGJhY2tfcV9xZgpAQCAtMzQ4LDE2ICszNDEsMTYgQEAKICAgICAgICAgczJoID0gZGxsLnJldF8yaF9mdW5jKGlucCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQogCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fMkhfc3RkY2FsbChzZWxmKToKLSAgICAgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfc2hvcnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfc2hvcnQpXQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzJIX3N0ZGNhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19zaG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX3Nob3J0KV0KIAotICAgICAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMucmVzdHlwZSA9IFMySAotICAgICAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMuYXJndHlwZXMgPSBbUzJIXQotICAgICAgICAgICAgczJoID0gd2luZGxsLnNfcmV0XzJoX2Z1bmMoUzJIKDk5LCA4OCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCisgICAgICAgIHdpbmRsbC5zX3JldF8yaF9mdW5jLnJlc3R5cGUgPSBTMkgKKyAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMuYXJndHlwZXMgPSBbUzJIXQorICAgICAgICBzMmggPSB3aW5kbGwuc19yZXRfMmhfZnVuYyhTMkgoOTksIDg4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQogCiAgICAgZGVmIHRlc3Rfc3RydWN0X3JldHVybl84SChzZWxmKToKICAgICAgICAgY2xhc3MgUzhJKFN0cnVjdHVyZSk6CkBAIC0zNzYsMjMgKzM2OSwyNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzOGkuYSwgczhpLmIsIHM4aS5jLCBzOGkuZCwgczhpLmUsIHM4aS5mLCBzOGkuZywgczhpLmgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQogCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fOEhfc3RkY2FsbChzZWxmKToKLSAgICAgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19pbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZCIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImUiLCBjX2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJmIiwgY19pbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZyIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImgiLCBjX2ludCldCi0gICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5yZXN0eXBlID0gUzhJCi0gICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5hcmd0eXBlcyA9IFtTOEldCi0gICAgICAgICAgICBpbnAgPSBTOEkoOSwgOCwgNywgNiwgNSwgNCwgMywgMikKLSAgICAgICAgICAgIHM4aSA9IHdpbmRsbC5zX3JldF84aV9mdW5jKGlucCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHM4aS5hLCBzOGkuYiwgczhpLmMsIHM4aS5kLCBzOGkuZSwgczhpLmYsIHM4aS5nLCBzOGkuaCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzhIX3N0ZGNhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJkIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJlIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJmIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJnIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJoIiwgY19pbnQpXQorICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5yZXN0eXBlID0gUzhJCisgICAgICAgIHdpbmRsbC5zX3JldF84aV9mdW5jLmFyZ3R5cGVzID0gW1M4SV0KKyAgICAgICAgaW5wID0gUzhJKDksIDgsIDcsIDYsIDUsIDQsIDMsIDIpCisgICAgICAgIHM4aSA9IHdpbmRsbC5zX3JldF84aV9mdW5jKGlucCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKKyAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQogCiAgICAgZGVmIHRlc3Rfc2YxNjUxMjM1KHNlbGYpOgogICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvMTY1MTIzNQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZWdlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlZ2Vycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlNGIwOC4uMDAwMDAwMAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlZ2Vycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyBzdXBlcnNlZGVkIGJ5IHRlc3RfbnVtYmVycy5weQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKaW5kZXggY2JmMmUwNS4uMjcxZTNmNSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQpAQCAtNSwxNyArNSwxNCBAQAogCiAjIFhYWCBUaGlzIHRlc3QgbXVzdCBiZSByZXZpZXdlZCBmb3IgY29ycmVjdG5lc3MhISEKIAotIiIiCi1jdHlwZXMnIHR5cGVzIGFyZSBjb250YWluZXIgdHlwZXMuCi0KLVRoZXkgaGF2ZSBhbiBpbnRlcm5hbCBtZW1vcnkgYmxvY2ssIHdoaWNoIG9ubHkgY29uc2lzdHMgb2Ygc29tZSBieXRlcywKLWJ1dCBpdCBoYXMgdG8ga2VlcCByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgYXMgd2VsbC4gVGhpcyBpcyBub3QKLXJlYWxseSBuZWVkZWQgZm9yIHRyaXZpYWwgQyB0eXBlcyBsaWtlIGludCBvciBjaGFyLCBidXQgaXQgaXMgaW1wb3J0YW50Ci1mb3IgYWdncmVnYXRlIHR5cGVzIGxpa2Ugc3RyaW5ncyBvciBwb2ludGVycyBpbiBwYXJ0aWN1bGFyLgotCi1XaGF0IGFib3V0IHBvaW50ZXJzPwotCi0iIiIKKyMgY3R5cGVzJyB0eXBlcyBhcmUgY29udGFpbmVyIHR5cGVzLgorIworIyBUaGV5IGhhdmUgYW4gaW50ZXJuYWwgbWVtb3J5IGJsb2NrLCB3aGljaCBvbmx5IGNvbnNpc3RzIG9mIHNvbWUgYnl0ZXMsCisjIGJ1dCBpdCBoYXMgdG8ga2VlcCByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgYXMgd2VsbC4gVGhpcyBpcyBub3QKKyMgcmVhbGx5IG5lZWRlZCBmb3IgdHJpdmlhbCBDIHR5cGVzIGxpa2UgaW50IG9yIGNoYXIsIGJ1dCBpdCBpcyBpbXBvcnRhbnQKKyMgZm9yIGFnZ3JlZ2F0ZSB0eXBlcyBsaWtlIHN0cmluZ3Mgb3IgcG9pbnRlcnMgaW4gcGFydGljdWxhci4KKyMKKyMgV2hhdCBhYm91dCBwb2ludGVycz8KIAogY2xhc3MgT2JqZWN0c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgYXNzZXJ0U2FtZShzZWxmLCBhLCBiKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKaW5kZXggZGI4YWRmYi4uOTRjMDI1NyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKQEAgLTk0LDcgKzk0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCB7JzEnOiBpfSkKIAogY2xhc3MgRGVsZXRlUG9pbnRlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgWF90ZXN0KHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9YKHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoInAiLCBQT0lOVEVSKGNfY2hhcl9wKSldCiAgICAgICAgIHggPSBYKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9sb2FkaW5nLnB5CmluZGV4IDQxNDM2M2QuLjRmYjg5NjQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weQpAQCAtMSwzOCArMSw0NiBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKLWltcG9ydCBzeXMsIHVuaXR0ZXN0CiBpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3Quc3VwcG9ydAogZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5Ci1mcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBpc19yZXNvdXJjZV9lbmFibGVkCiAKIGxpYmNfbmFtZSA9IE5vbmUKLWlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICBsaWJjX25hbWUgPSBmaW5kX2xpYnJhcnkoImMiKQotZWxpZiBvcy5uYW1lID09ICJjZSI6Ci0gICAgbGliY19uYW1lID0gImNvcmVkbGwiCi1lbGlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKLSAgICBsaWJjX25hbWUgPSAiY3lnd2luMS5kbGwiCi1lbHNlOgotICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCiAKLWlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6Ci0gICAgcHJpbnQoImxpYmNfbmFtZSBpcyIsIGxpYmNfbmFtZSkKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGdsb2JhbCBsaWJjX25hbWUKKyAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCisgICAgZWxpZiBvcy5uYW1lID09ICJjZSI6CisgICAgICAgIGxpYmNfbmFtZSA9ICJjb3JlZGxsIgorICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJjeWd3aW4iOgorICAgICAgICBsaWJjX25hbWUgPSAiY3lnd2luMS5kbGwiCisgICAgZWxzZToKKyAgICAgICAgbGliY19uYW1lID0gZmluZF9saWJyYXJ5KCJjIikKKworICAgIGlmIHRlc3Quc3VwcG9ydC52ZXJib3NlOgorICAgICAgICBwcmludCgibGliY19uYW1lIGlzIiwgbGliY19uYW1lKQogCiBjbGFzcyBMb2FkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIHVua25vd25kbGwgPSAieHhyYW5kb21uYW1leHgiCiAKLSAgICBpZiBsaWJjX25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6Ci0gICAgICAgICAgICBDRExMKGxpYmNfbmFtZSkKLSAgICAgICAgICAgIENETEwob3MucGF0aC5iYXNlbmFtZShsaWJjX25hbWUpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgQ0RMTCwgc2VsZi51bmtub3duZGxsKQorICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6CisgICAgICAgIGlmIGxpYmNfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGZpbmQgbGliYycpCisgICAgICAgIENETEwobGliY19uYW1lKQorICAgICAgICBDRExMKG9zLnBhdGguYmFzZW5hbWUobGliY19uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgQ0RMTCwgc2VsZi51bmtub3duZGxsKQogCi0gICAgaWYgbGliY19uYW1lIGlzIG5vdCBOb25lIGFuZCBvcy5wYXRoLmJhc2VuYW1lKGxpYmNfbmFtZSkgPT0gImxpYmMuc28uNiI6Ci0gICAgICAgIGRlZiB0ZXN0X2xvYWRfdmVyc2lvbihzZWxmKToKLSAgICAgICAgICAgIGNkbGwuTG9hZExpYnJhcnkoImxpYmMuc28uNiIpCi0gICAgICAgICAgICAjIGxpbnV4IHVzZXMgdmVyc2lvbiwgbGliYyA5IHNob3VsZCBub3QgZXhpc3QKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNkbGwuTG9hZExpYnJhcnksICJsaWJjLnNvLjkiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY2RsbC5Mb2FkTGlicmFyeSwgc2VsZi51bmtub3duZGxsKQorICAgIGRlZiB0ZXN0X2xvYWRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgbGliY19uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdjb3VsZCBub3QgZmluZCBsaWJjJykKKyAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShsaWJjX25hbWUpICE9ICdsaWJjLnNvLjYnOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnd3JvbmcgbGliYyBwYXRoIGZvciB0ZXN0JykKKyAgICAgICAgY2RsbC5Mb2FkTGlicmFyeSgibGliYy5zby42IikKKyAgICAgICAgIyBsaW51eCB1c2VzIHZlcnNpb24sIGxpYmMgOSBzaG91bGQgbm90IGV4aXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNkbGwuTG9hZExpYnJhcnksICJsaWJjLnNvLjkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjZGxsLkxvYWRMaWJyYXJ5LCBzZWxmLnVua25vd25kbGwpCiAKICAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgogICAgICAgICBmb3IgbmFtZSBpbiAoImMiLCAibSIpOgpAQCAtNDEsNjYgKzQ5LDcxIEBACiAgICAgICAgICAgICAgICAgY2RsbC5Mb2FkTGlicmFyeShsaWIpCiAgICAgICAgICAgICAgICAgQ0RMTChsaWIpCiAKLSAgICBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKLSAgICAgICAgZGVmIHRlc3RfbG9hZF9saWJyYXJ5KHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobGliY19uYW1lKQotICAgICAgICAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgicHJpbnRpbmciKToKLSAgICAgICAgICAgICAgICBwcmludChmaW5kX2xpYnJhcnkoImtlcm5lbDMyIikpCi0gICAgICAgICAgICAgICAgcHJpbnQoZmluZF9saWJyYXJ5KCJ1c2VyMzIiKSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lIGluICgibnQiLCAiY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzIChOVC9DRSknKQorICAgIGRlZiB0ZXN0X2xvYWRfbGlicmFyeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobGliY19uYW1lKQorICAgICAgICBpZiB0ZXN0LnN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KGZpbmRfbGlicmFyeSgia2VybmVsMzIiKSkKKyAgICAgICAgICAgIHByaW50KGZpbmRfbGlicmFyeSgidXNlcjMyIikpCiAKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgICAgIHdpbmRsbFsia2VybmVsMzIiXS5HZXRNb2R1bGVIYW5kbGVXCi0gICAgICAgICAgICAgICAgd2luZGxsLkxvYWRMaWJyYXJ5KCJrZXJuZWwzMiIpLkdldE1vZHVsZUhhbmRsZVcKLSAgICAgICAgICAgICAgICBXaW5ETEwoImtlcm5lbDMyIikuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgZWxpZiBvcy5uYW1lID09ICJjZSI6Ci0gICAgICAgICAgICAgICAgd2luZGxsLmNvcmVkbGwuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgICAgIHdpbmRsbFsiY29yZWRsbCJdLkdldE1vZHVsZUhhbmRsZVcKLSAgICAgICAgICAgICAgICB3aW5kbGwuTG9hZExpYnJhcnkoImNvcmVkbGwiKS5HZXRNb2R1bGVIYW5kbGVXCi0gICAgICAgICAgICAgICAgV2luRExMKCJjb3JlZGxsIikuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICAgICAgd2luZGxsWyJrZXJuZWwzMiJdLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbC5Mb2FkTGlicmFyeSgia2VybmVsMzIiKS5HZXRNb2R1bGVIYW5kbGVXCisgICAgICAgICAgICBXaW5ETEwoImtlcm5lbDMyIikuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICBlbGlmIG9zLm5hbWUgPT0gImNlIjoKKyAgICAgICAgICAgIHdpbmRsbC5jb3JlZGxsLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbFsiY29yZWRsbCJdLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbC5Mb2FkTGlicmFyeSgiY29yZWRsbCIpLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIFdpbkRMTCgiY29yZWRsbCIpLkdldE1vZHVsZUhhbmRsZVcKIAotICAgICAgICBkZWYgdGVzdF9sb2FkX29yZGluYWxfZnVuY3Rpb25zKHNlbGYpOgotICAgICAgICAgICAgaW1wb3J0IF9jdHlwZXNfdGVzdAotICAgICAgICAgICAgZGxsID0gV2luRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKLSAgICAgICAgICAgICMgV2UgbG9hZCB0aGUgc2FtZSBmdW5jdGlvbiBib3RoIHZpYSBvcmRpbmFsIGFuZCBuYW1lCi0gICAgICAgICAgICBmdW5jX29yZCA9IGRsbFsyXQotICAgICAgICAgICAgZnVuY19uYW1lID0gZGxsLkdldFN0cmluZwotICAgICAgICAgICAgIyBhZGRyZXNzb2YgZ2V0cyB0aGUgYWRkcmVzcyB3aGVyZSB0aGUgZnVuY3Rpb24gcG9pbnRlciBpcyBzdG9yZWQKLSAgICAgICAgICAgIGFfb3JkID0gYWRkcmVzc29mKGZ1bmNfb3JkKQotICAgICAgICAgICAgYV9uYW1lID0gYWRkcmVzc29mKGZ1bmNfbmFtZSkKLSAgICAgICAgICAgIGZfb3JkX2FkZHIgPSBjX3ZvaWRfcC5mcm9tX2FkZHJlc3MoYV9vcmQpLnZhbHVlCi0gICAgICAgICAgICBmX25hbWVfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX25hbWUpLnZhbHVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lIGluICgibnQiLCAiY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzIChOVC9DRSknKQorICAgIGRlZiB0ZXN0X2xvYWRfb3JkaW5hbF9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKKyAgICAgICAgZGxsID0gV2luRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgIyBXZSBsb2FkIHRoZSBzYW1lIGZ1bmN0aW9uIGJvdGggdmlhIG9yZGluYWwgYW5kIG5hbWUKKyAgICAgICAgZnVuY19vcmQgPSBkbGxbMl0KKyAgICAgICAgZnVuY19uYW1lID0gZGxsLkdldFN0cmluZworICAgICAgICAjIGFkZHJlc3NvZiBnZXRzIHRoZSBhZGRyZXNzIHdoZXJlIHRoZSBmdW5jdGlvbiBwb2ludGVyIGlzIHN0b3JlZAorICAgICAgICBhX29yZCA9IGFkZHJlc3NvZihmdW5jX29yZCkKKyAgICAgICAgYV9uYW1lID0gYWRkcmVzc29mKGZ1bmNfbmFtZSkKKyAgICAgICAgZl9vcmRfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX29yZCkudmFsdWUKKyAgICAgICAgZl9uYW1lX2FkZHIgPSBjX3ZvaWRfcC5mcm9tX2FkZHJlc3MoYV9uYW1lKS52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRsbC5fX2dldGl0ZW1fXywgMTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRsbC5fX2dldGl0ZW1fXywgMTIzNCkKIAotICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgZGVmIHRlc3RfMTcwMzI4Nl9BKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBMb2FkTGlicmFyeSwgRnJlZUxpYnJhcnkKLSAgICAgICAgICAgICMgT24gd2luWFAgNjQtYml0LCBhZHZhcGkzMiBsb2FkcyBhdCBhbiBhZGRyZXNzIHRoYXQgZG9lcwotICAgICAgICAgICAgIyBOT1QgZml0IGludG8gYSAzMi1iaXQgaW50ZWdlci4gIEZyZWVMaWJyYXJ5IG11c3QgYmUgYWJsZQotICAgICAgICAgICAgIyB0byBhY2NlcHQgdGhpcyBhZGRyZXNzLgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfMTcwMzI4Nl9BKHNlbGYpOgorICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IExvYWRMaWJyYXJ5LCBGcmVlTGlicmFyeQorICAgICAgICAjIE9uIHdpblhQIDY0LWJpdCwgYWR2YXBpMzIgbG9hZHMgYXQgYW4gYWRkcmVzcyB0aGF0IGRvZXMKKyAgICAgICAgIyBOT1QgZml0IGludG8gYSAzMi1iaXQgaW50ZWdlci4gIEZyZWVMaWJyYXJ5IG11c3QgYmUgYWJsZQorICAgICAgICAjIHRvIGFjY2VwdCB0aGlzIGFkZHJlc3MuCiAKLSAgICAgICAgICAgICMgVGhlc2UgYXJlIHRlc3RzIGZvciBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvMTcwMzI4NgotICAgICAgICAgICAgaGFuZGxlID0gTG9hZExpYnJhcnkoImFkdmFwaTMyIikKLSAgICAgICAgICAgIEZyZWVMaWJyYXJ5KGhhbmRsZSkKKyAgICAgICAgIyBUaGVzZSBhcmUgdGVzdHMgZm9yIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi8xNzAzMjg2CisgICAgICAgIGhhbmRsZSA9IExvYWRMaWJyYXJ5KCJhZHZhcGkzMiIpCisgICAgICAgIEZyZWVMaWJyYXJ5KGhhbmRsZSkKIAotICAgICAgICBkZWYgdGVzdF8xNzAzMjg2X0Ioc2VsZik6Ci0gICAgICAgICAgICAjIFNpbmNlIG9uIHdpblhQIDY0LWJpdCBhZHZhcGkzMiBsb2FkcyBsaWtlIGRlc2NyaWJlZAotICAgICAgICAgICAgIyBhYm92ZSwgdGhlIChhcmJpdHJhcmlseSBzZWxlY3RlZCkgQ2xvc2VFdmVudExvZyBmdW5jdGlvbgotICAgICAgICAgICAgIyBhbHNvIGhhcyBhIGhpZ2ggYWRkcmVzcy4gICdjYWxsX2Z1bmN0aW9uJyBzaG91bGQgYWNjZXB0Ci0gICAgICAgICAgICAjIGFkZHJlc3NlcyBzbyBsYXJnZS4KLSAgICAgICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgY2FsbF9mdW5jdGlvbgotICAgICAgICAgICAgYWR2YXBpMzIgPSB3aW5kbGwuYWR2YXBpMzIKLSAgICAgICAgICAgICMgQ2FsbGluZyBDbG9zZUV2ZW50TG9nIHdpdGggYSBOVUxMIGFyZ3VtZW50IHNob3VsZCBmYWlsLAotICAgICAgICAgICAgIyBidXQgdGhlIGNhbGwgc2hvdWxkIG5vdCBzZWdmYXVsdCBvciBzby4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYWR2YXBpMzIuQ2xvc2VFdmVudExvZyhOb25lKSkKLSAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLnJlc3R5cGUgPSBjX3ZvaWRfcAotICAgICAgICAgICAgcHJvYyA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhhZHZhcGkzMi5faGFuZGxlLCBiIkNsb3NlRXZlbnRMb2ciKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2MpCi0gICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHJlYWwgdGVzdDogY2FsbCB0aGUgZnVuY3Rpb24gdmlhICdjYWxsX2Z1bmN0aW9uJwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfMTcwMzI4Nl9CKHNlbGYpOgorICAgICAgICAjIFNpbmNlIG9uIHdpblhQIDY0LWJpdCBhZHZhcGkzMiBsb2FkcyBsaWtlIGRlc2NyaWJlZAorICAgICAgICAjIGFib3ZlLCB0aGUgKGFyYml0cmFyaWx5IHNlbGVjdGVkKSBDbG9zZUV2ZW50TG9nIGZ1bmN0aW9uCisgICAgICAgICMgYWxzbyBoYXMgYSBoaWdoIGFkZHJlc3MuICAnY2FsbF9mdW5jdGlvbicgc2hvdWxkIGFjY2VwdAorICAgICAgICAjIGFkZHJlc3NlcyBzbyBsYXJnZS4KKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBjYWxsX2Z1bmN0aW9uCisgICAgICAgIGFkdmFwaTMyID0gd2luZGxsLmFkdmFwaTMyCisgICAgICAgICMgQ2FsbGluZyBDbG9zZUV2ZW50TG9nIHdpdGggYSBOVUxMIGFyZ3VtZW50IHNob3VsZCBmYWlsLAorICAgICAgICAjIGJ1dCB0aGUgY2FsbCBzaG91bGQgbm90IHNlZ2ZhdWx0IG9yIHNvLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFkdmFwaTMyLkNsb3NlRXZlbnRMb2coTm9uZSkpCisgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAorICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MucmVzdHlwZSA9IGNfdm9pZF9wCisgICAgICAgIHByb2MgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoYWR2YXBpMzIuX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIkNsb3NlRXZlbnRMb2ciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvYykKKyAgICAgICAgIyBUaGlzIGlzIHRoZSByZWFsIHRlc3Q6IGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSAnY2FsbF9mdW5jdGlvbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQppbmRleCBlZGE4NDZkLi42YjM1MjY5IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQpAQCAtMywzNSArMywzMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKICMgQm9iIElwcG9saXRvOgotIiIiCi1Pay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vawotc29tZXRoaW5nIGxpa2U6Ci0KLWltcG9ydCBvcwotZnJvbSBtYWNob2xpYi5keWxkIGltcG9ydCBkeWxkX2ZpbmQKLQotZGVmIGZpbmRfbGliKG5hbWUpOgotICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAotICAgICBuYW1lKycuZnJhbWV3b3JrLycrbmFtZV0KLSAgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgotICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKGR5bGRfZmluZChkeWxpYikpCi0gICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICBwYXNzCi0gICAgIHJhaXNlIFZhbHVlRXJyb3IsICIlcyBub3QgZm91bmQiICUgKG5hbWUsKQotCi1JdCdsbCBoYXZlIG91dHB1dCBsaWtlIHRoaXM6Ci0KLSA+Pj4gZmluZF9saWIoJ3B0aHJlYWQnKQotJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJwotID4+PiBmaW5kX2xpYigneicpCi0nL3Vzci9saWIvbGliei4xLmR5bGliJwotID4+PiBmaW5kX2xpYignSU9LaXQnKQotJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JwotCi0tYm9iCi0KLSIiIgorIworIyBPay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vaworIyBzb21ldGhpbmcgbGlrZToKKyMKKyMgaW1wb3J0IG9zCisjIGZyb20gbWFjaG9saWIuZHlsZCBpbXBvcnQgZHlsZF9maW5kCisjCisjIGRlZiBmaW5kX2xpYihuYW1lKToKKyMgICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAorIyAgICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQorIyAgICAgIGZvciBkeWxpYiBpbiBwb3NzaWJsZToKKyMgICAgICAgICAgdHJ5OgorIyAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKKyMgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisjICAgICAgICAgICAgICBwYXNzCisjICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCisjCisjIEl0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKKyMKKyMgID4+PiBmaW5kX2xpYigncHRocmVhZCcpCisjICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicKKyMgID4+PiBmaW5kX2xpYigneicpCisjICcvdXNyL2xpYi9saWJ6LjEuZHlsaWInCisjICA+Pj4gZmluZF9saWIoJ0lPS2l0JykKKyMgJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JworIworIyAtYm9iCiAKIGZyb20gY3R5cGVzLm1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAogCkBAIC00NSwxOCArNDMsMjEgQEAKICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBub3QgZm91bmQiICUgKG5hbWUsKSkKIAogY2xhc3MgTWFjaE9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6Ci0gICAgICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iLCAnT1NYLXNwZWNpZmljIHRlc3QnKQorICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJykKIAotICAgICAgICAgICAgcmVzdWx0ID0gZmluZF9saWIoJ3onKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zdGFydHN3aXRoKCcvdXNyL2xpYi9saWJ6LjEnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuZW5kc3dpdGgoJy5keWxpYicpKQorICAgICAgICByZXN1bHQgPSBmaW5kX2xpYigneicpCisgICAgICAgICMgSXNzdWUgIzIxMDkzOiBkeWxkIGRlZmF1bHQgc2VhcmNoIHBhdGggaW5jbHVkZXMgJEhPTUUvbGliIGFuZAorICAgICAgICAjIC91c3IvbG9jYWwvbGliIGJlZm9yZSAvdXNyL2xpYiwgd2hpY2ggY2F1c2VkIHRlc3QgZmFpbHVyZXMgaWYKKyAgICAgICAgIyBhIGxvY2FsIGNvcHkgb2YgbGlieiBleGlzdHMgaW4gb25lIG9mIHRoZW0uIE5vdyBpZ25vcmUgdGhlIGhlYWQKKyAgICAgICAgIyBvZiB0aGUgcGF0aC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXN1bHQsIHIiLiovbGliL2xpYnpcLi4qLipcLmR5bGliIikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kX2xpYignSU9LaXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ0lPS2l0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdCcpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tZW1mdW5jdGlvbnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tZW1mdW5jdGlvbnMucHkKaW5kZXggYWVjNGFhYS4uZTc4NGI5YSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWVtZnVuY3Rpb25zLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21lbWZ1bmN0aW9ucy5weQpAQCAtMiwxNyArMiwxOSBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBjbGFzcyBNZW1GdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSMjICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgotIyMgICAgICAgICMgc3RyaW5nX2F0IGFuZCB3c3RyaW5nX2F0IG11c3QgdXNlIHRoZSBQeXRob24gY2FsbGluZwotIyMgICAgICAgICMgY29udmVudGlvbiAod2hpY2ggYWNxdWlyZXMgdGhlIEdJTCBhbmQgY2hlY2tzIHRoZSBQeXRob24KLSMjICAgICAgICAjIGVycm9yIGZsYWcpLiAgUHJvdm9rZSBhbiBlcnJvciBhbmQgY2F0Y2ggaXQ7IHNlZSBhbHNvIGlzc3VlCi0jIyAgICAgICAgIyAjMzU1NDogPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNTU0PgotIyMgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAotIyMgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogd3N0cmluZ19hdCh1ImZvbyIsIHN5cy5tYXhpbnQgLSAxKSkKLSMjICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IsIFN5c3RlbUVycm9yKSwKLSMjICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHN0cmluZ19hdCgiZm9vIiwgc3lzLm1heGludCAtIDEpKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgIyBzdHJpbmdfYXQgYW5kIHdzdHJpbmdfYXQgbXVzdCB1c2UgdGhlIFB5dGhvbiBjYWxsaW5nCisgICAgICAgICMgY29udmVudGlvbiAod2hpY2ggYWNxdWlyZXMgdGhlIEdJTCBhbmQgY2hlY2tzIHRoZSBQeXRob24KKyAgICAgICAgIyBlcnJvciBmbGFnKS4gIFByb3Zva2UgYW4gZXJyb3IgYW5kIGNhdGNoIGl0OyBzZWUgYWxzbyBpc3N1ZQorICAgICAgICAjICMzNTU0OiA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM1NTQ+CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHdzdHJpbmdfYXQodSJmb28iLCBzeXMubWF4aW50IC0gMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHN0cmluZ19hdCgiZm9vIiwgc3lzLm1heGludCAtIDEpKQogCiAgICAgZGVmIHRlc3RfbWVtbW92ZShzZWxmKToKICAgICAgICAgIyBsYXJnZSBidWZmZXJzIGFwcGFyZW50bHkgaW5jcmVhc2UgdGhlIGNoYW5jZSB0aGF0IHRoZSBtZW1vcnkKQEAgLTYxLDIxICs2MywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChiImZvbyBiYXIiLCA3KSwgYiJmb28gYmFyIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQoYiJmb28gYmFyIiwgMyksIGIiZm9vIikKIAotICAgIHRyeToKLSAgICAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X3dzdHJpbmdfYXQoc2VsZik6Ci0gICAgICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJIZWxsbywgV29ybGQiKQotICAgICAgICAgICAgYSA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigxMDAwMDAwKQotICAgICAgICAgICAgcmVzdWx0ID0gbWVtbW92ZShhLCBwLCBsZW4ocCkgKiBzaXplb2YoY193Y2hhcikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudmFsdWUsICJIZWxsbywgV29ybGQiKQorICAgIEBuZWVkX3N5bWJvbCgnY3JlYXRlX3VuaWNvZGVfYnVmZmVyJykKKyAgICBkZWYgdGVzdF93c3RyaW5nX2F0KHNlbGYpOgorICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJIZWxsbywgV29ybGQiKQorICAgICAgICBhID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKDEwMDAwMDApCisgICAgICAgIHJlc3VsdCA9IG1lbW1vdmUoYSwgcCwgbGVuKHApICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudmFsdWUsICJIZWxsbywgV29ybGQiKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdzdHJpbmdfYXQoYSksICJIZWxsbywgV29ybGQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDUpLCAiSGVsbG8iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCAwKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhKSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCA1KSwgIkhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDApLCAiIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9udW1iZXJzLnB5CmluZGV4IDNiNzE5NGYuLjJhZmNhMjYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weQpAQCAtODIsMTIgKzgyLDEzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCBOb25lKQogCi0jIyAgICBkZWYgdGVzdF92YWxpZF9yYW5nZXMoc2VsZik6Ci0jIyAgICAgICAgIyBpbnZhbGlkIHZhbHVlcyBvZiB0aGUgY29ycmVjdCB0eXBlCi0jIyAgICAgICAgIyByYWlzZSBWYWx1ZUVycm9yIChub3QgT3ZlcmZsb3dFcnJvcikKLSMjICAgICAgICBmb3IgdCwgKGwsIGgpIGluIHppcCh1bnNpZ25lZF90eXBlcywgdW5zaWduZWRfcmFuZ2VzKToKLSMjICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgbC0xKQotIyMgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LCBoKzEpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X3ZhbGlkX3JhbmdlcyhzZWxmKToKKyAgICAgICAgIyBpbnZhbGlkIHZhbHVlcyBvZiB0aGUgY29ycmVjdCB0eXBlCisgICAgICAgICMgcmFpc2UgVmFsdWVFcnJvciAobm90IE92ZXJmbG93RXJyb3IpCisgICAgICAgIGZvciB0LCAobCwgaCkgaW4gemlwKHVuc2lnbmVkX3R5cGVzLCB1bnNpZ25lZF9yYW5nZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgbC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgaCsxKQogCiAgICAgZGVmIHRlc3RfZnJvbV9wYXJhbShzZWxmKToKICAgICAgICAgIyB0aGUgZnJvbV9wYXJhbSBjbGFzcyBtZXRob2QgYXR0cmlidXRlIGFsd2F5cwpAQCAtMjAwLDE2ICsyMDEsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBiJz8nKQogCiAgICAgIyBhcnJheSBkb2VzIG5vdCBzdXBwb3J0IGNfYm9vbCAvICd0JwotICAgICMgZGVmIHRlc3RfYm9vbF9mcm9tX2FkZHJlc3Moc2VsZik6Ci0gICAgIyAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfYm9vbAotICAgICMgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5Ci0gICAgIyAgICAgYSA9IGFycmF5KGNfYm9vbC5fdHlwZV8sIFtUcnVlXSkKLSAgICAjICAgICB2ID0gdC5mcm9tX2FkZHJlc3MoYS5idWZmZXJfaW5mbygpWzBdKQotICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodikgaXMgdCkKLSAgICAjICAgICBhWzBdID0gRmFsc2UKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpIGlzIHQpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X2Jvb2xfZnJvbV9hZGRyZXNzKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19ib29sCisgICAgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CisgICAgICAgIGEgPSBhcnJheShjX2Jvb2wuX3R5cGVfLCBbVHJ1ZV0pCisgICAgICAgIHYgPSB0LmZyb21fYWRkcmVzcyhhLmJ1ZmZlcl9pbmZvKClbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpIGlzIHQpCisgICAgICAgIGFbMF0gPSBGYWxzZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2KSBpcyB0KQogCiAgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKICAgICAgICAgIyBjX2ludCgpIGNhbiBiZSBpbml0aWFsaXplZCBmcm9tIFB5dGhvbidzIGludCwgYW5kIGNfaW50LgpAQCAtMjI3LDggKzIyOSw5IEBACiAgICAgICAgICAgICBpZiAoaGFzYXR0cih0LCAiX19jdHlwZV9sZV9fIikpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHQuX19jdHlwZV9sZV9fLCBiaWdfaW50KQogCi0jIyAgICBkZWYgdGVzdF9wZXJmKHNlbGYpOgotIyMgICAgICAgIGNoZWNrX3BlcmYoKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9wZXJmKHNlbGYpOgorICAgICAgICBjaGVja19wZXJmKCkKIAogZnJvbSBjdHlwZXMgaW1wb3J0IF9TaW1wbGVDRGF0YQogY2xhc3MgY19pbnRfUyhfU2ltcGxlQ0RhdGEpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X29iamVjdHMucHkKaW5kZXggZjA3NWMyMC4uZWY3YjIwYiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9vYmplY3RzLnB5CkBAIC01OSwxMiArNTksOSBAQAogaW1wb3J0IGN0eXBlcy50ZXN0LnRlc3Rfb2JqZWN0cwogCiBjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgc3lzLmhleHZlcnNpb24gPiAweDAyMDQwMDAwOgotICAgICAgICAjIFB5dGhvbiAyLjMgaGFzIG5vIEVMTElQU0lTIGZsYWcsIHNvIHdlIGRvbid0IHRlc3Qgd2l0aCB0aGlzCi0gICAgICAgICMgdmVyc2lvbjoKLSAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICBkb2N0ZXN0LnRlc3Rtb2QoY3R5cGVzLnRlc3QudGVzdF9vYmplY3RzKQorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmYWlsdXJlcywgdGVzdHMgPSBkb2N0ZXN0LnRlc3Rtb2QoY3R5cGVzLnRlc3QudGVzdF9vYmplY3RzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZhaWx1cmVzLCAnZG9jdGVzdHMgZmFpbGVkLCBzZWUgb3V0cHV0IGFib3ZlJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpZiBzeXMuaGV4dmVyc2lvbiA+IDB4MDIwNDAwMDA6Ci0gICAgICAgIGRvY3Rlc3QudGVzdG1vZChjdHlwZXMudGVzdC50ZXN0X29iamVjdHMpCisgICAgZG9jdGVzdC50ZXN0bW9kKGN0eXBlcy50ZXN0LnRlc3Rfb2JqZWN0cykKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5CmluZGV4IDEyYjViZDUuLmU1NmJjY2YgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdCwgc3lzCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBjbGFzcyBTaW1wbGVUeXBlc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzUsMTAgKzM2LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDVk9JRFAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENDSEFSUC5mcm9tX3BhcmFtKCJhYmMiKSwgImFiY2FiY2FiY2FiYyIpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfd2NoYXJfcAotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc19jX3djaGFyX3Aoc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBjX3djaGFyX3AKIAogICAgICAgICBjbGFzcyBDV0NIQVJQKGNfd2NoYXJfcCk6CiAgICAgICAgICAgICBkZWYgZnJvbV9wYXJhbShjbHMsIHZhbHVlKToKQEAgLTY2LDEzICs2Niw5IEBACiAgICAgICAgIGEgPSBjX2NoYXJfcChiIjEyMyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY19jaGFyX3AuZnJvbV9wYXJhbShhKSwgYSkKIAorICAgIEBuZWVkX3N5bWJvbCgnY193Y2hhcl9wJykKICAgICBkZWYgdGVzdF9jd19zdHJpbmdzKHNlbGYpOgotICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgYnlyZWYKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfd2NoYXJfcAotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0jIyAgICAgICAgICAgIHByaW50ICIoTm8gY193Y2hhcl9wKSIKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgYnlyZWYsIGNfd2NoYXJfcAogCiAgICAgICAgIGNfd2NoYXJfcC5mcm9tX3BhcmFtKCIxMjMiKQogCkBAIC0xMzksOSArMTM1LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBjX2xvbmcqMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBjX3VpbnQqMykKIAotIyMgICAgZGVmIHRlc3RfcGVyZm9ybWFuY2Uoc2VsZik6Ci0jIyAgICAgICAgY2hlY2tfcGVyZigpCi0KICAgICBkZWYgdGVzdF9ub2N0eXBlc19hcmd0eXBlKHNlbGYpOgogICAgICAgICBpbXBvcnQgX2N0eXBlc190ZXN0CiAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBDRExMLCBjX3ZvaWRfcCwgQXJndW1lbnRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BlcDMxMTgucHkKaW5kZXggYWQxM2IwMS4uMzJmODAyYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wZXAzMTE4LnB5CkBAIC05Niw2ICs5Niw5IEBACiBjbGFzcyBhVW5pb24oVW5pb24pOgogICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KV0KIAorY2xhc3MgU3RydWN0V2l0aEFycmF5cyhTdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWygieCIsIGNfbG9uZyAqIDMgKiAyKSwgKCJ5IiwgUG9pbnQgKiA0KV0KKwogY2xhc3MgSW5jb21wbGV0ZShTdHJ1Y3R1cmUpOgogICAgIHBhc3MKIApAQCAtMTQ1LDEwICsxNDgsMTAgQEAKIAogICAgICMjIGFycmF5cyBhbmQgcG9pbnRlcnMKIAotICAgIChjX2RvdWJsZSAqIDQsICAgICAgICAgICAgICAiKDQpPGQiLCAgICAgICAgICAgICAgICAoNCwpLCAgICAgICAgICAgY19kb3VibGUpLAotICAgIChjX2Zsb2F0ICogNCAqIDMgKiAyLCAgICAgICAiKDIsMyw0KTxmIiwgICAgICAgICAgICAoMiwzLDQpLCAgICAgICAgY19mbG9hdCksCi0gICAgKFBPSU5URVIoY19zaG9ydCkgKiAyLCAgICAgICIoMikmPGgiLCAgICAgICAgICAgICAgICgyLCksICAgICAgICAgICBQT0lOVEVSKGNfc2hvcnQpKSwKLSAgICAoUE9JTlRFUihjX3Nob3J0KSAqIDIgKiAzLCAgIigzLDIpJjxoIiwgICAgICAgICAgICAgKDMsMiwpLCAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAorICAgIChjX2RvdWJsZSAqIDQsICAgICAgICAgICAgICAiPGQiLCAgICAgICAgICAgICAgICAgICAoNCwpLCAgICAgICAgICAgY19kb3VibGUpLAorICAgIChjX2Zsb2F0ICogNCAqIDMgKiAyLCAgICAgICAiPGYiLCAgICAgICAgICAgICAgICAgICAoMiwzLDQpLCAgICAgICAgY19mbG9hdCksCisgICAgKFBPSU5URVIoY19zaG9ydCkgKiAyLCAgICAgICImPGgiLCAgICAgICAgICAgICAgICAgICgyLCksICAgICAgICAgICBQT0lOVEVSKGNfc2hvcnQpKSwKKyAgICAoUE9JTlRFUihjX3Nob3J0KSAqIDIgKiAzLCAgIiY8aCIsICAgICAgICAgICAgICAgICAgKDMsMiwpLCAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAogICAgIChQT0lOVEVSKGNfc2hvcnQgKiAyKSwgICAgICAiJigyKTxoIiwgICAgICAgICAgICAgICAoKSwgICAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAogCiAgICAgIyMgc3RydWN0dXJlcyBhbmQgdW5pb25zCkBAIC0xNjAsNiArMTYzLDkgQEAKICAgICAoRW1wdHlTdHJ1Y3QsICAgICAgICAgICAgICAgIlR7fSIsICAgICAgICAgICAgICAgICAgKCksICAgICAgICAgICBFbXB0eVN0cnVjdCksCiAgICAgIyB0aGUgcGVwIGRvZXMndCBzdXBwb3J0IHVuaW9ucwogICAgIChhVW5pb24sICAgICAgICAgICAgICAgICAgICAiQiIsICAgICAgICAgICAgICAgICAgICAoKSwgICAgICAgICAgIGFVbmlvbiksCisgICAgIyBzdHJ1Y3R1cmUgd2l0aCBzdWItYXJyYXlzCisgICAgKFN0cnVjdFdpdGhBcnJheXMsICAgICAgICAgICJUeygyLDMpPGw6eDooNClUezxsOng6PGw6eTp9Onk6fSIsICgpLCAgU3RydWN0V2l0aEFycmF5cyksCisgICAgKFN0cnVjdFdpdGhBcnJheXMgKiAzLCAgICAgICJUeygyLDMpPGw6eDooNClUezxsOng6PGw6eTp9Onk6fSIsICgzLCksICBTdHJ1Y3RXaXRoQXJyYXlzKSwKIAogICAgICMjIHBvaW50ZXIgdG8gaW5jb21wbGV0ZSBzdHJ1Y3R1cmUKICAgICAoSW5jb21wbGV0ZSwgICAgICAgICAgICAgICAgIkIiLCAgICAgICAgICAgICAgICAgICAgKCksICAgICAgICAgICBJbmNvbXBsZXRlKSwKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5CmluZGV4IDZlZjFiMWIuLjgxOGMxMTEgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiAKICMgSU1QT1JUQU5UIElORk86CkBAIC0xMzUsMTMgKzEzNiwxNCBAQAogICAgICAgICBmdW5jKHBvaW50ZXIoY19pbnQoKSkpCiAgICAgICAgIGZ1bmMoKGNfaW50ICogMykoKSkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3djaGFyX3AKLSAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhjX3djaGFyX3AoTm9uZSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3RfY192b2lkX3BfYXJnX3dpdGhfY193Y2hhcl9wKHNlbGYpOgorICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY192b2lkX3AsCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY193Y2hhcl9wKCIxMjMiKSkpCiAKICAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcApAQCAtMTU2LDUxICsxNTgsNDcgQEAKICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKFgoKSkpCiAKLXRyeToKLSAgICBjX3djaGFyCi1leGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgY2xhc3MgV0NoYXJQb2ludGVyc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0BuZWVkX3N5bWJvbCgnY193Y2hhcicpCitjbGFzcyBXQ2hhclBvaW50ZXJzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfaW50Ci0gICAgICAgICAgICBmdW5jLmFyZ3R5cGVzID0gTm9uZQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2ludAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gTm9uZQogCiAKLSAgICAgICAgZGVmIHRlc3RfUE9JTlRFUl9jX3djaGFyX2FyZyhzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCisgICAgZGVmIHRlc3RfUE9JTlRFUl9jX3djaGFyX2FyZyhzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3djaGFyX3AKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3didWZmZXIoIjEyMyIpKSkKLSAgICAgICAgICAgIGNhID0gY193Y2hhcigiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2J1ZmZlcigiMTIzIikpKQorICAgICAgICBjYSA9IGNfd2NoYXIoImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCiAKLSAgICAgICAgZGVmIHRlc3RfY193Y2hhcl9wX2FyZyhzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IGNfd2NoYXJfcCwKKyAgICBkZWYgdGVzdF9jX3djaGFyX3BfYXJnKHNlbGYpOgorICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY193Y2hhcl9wLAogCi0gICAgICAgICAgICBjX3djaGFyX3AuZnJvbV9wYXJhbSgiMTIzIikKKyAgICAgICAgY193Y2hhcl9wLmZyb21fcGFyYW0oIjEyMyIpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKIAotICAgICAgICAgICAgIyBYWFggQ3VycmVudGx5LCB0aGVzZSByYWlzZSBUeXBlRXJyb3JzLCBhbHRob3VnaCB0aGV5IHNob3VsZG4ndDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY193YnVmZmVyKCIxMjMiKSkpCi0gICAgICAgICAgICBjYSA9IGNfd2NoYXIoImEiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKKyAgICAgICAgIyBYWFggQ3VycmVudGx5LCB0aGVzZSByYWlzZSBUeXBlRXJyb3JzLCBhbHRob3VnaCB0aGV5IHNob3VsZG4ndDoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3didWZmZXIoIjEyMyIpKSkKKyAgICAgICAgY2EgPSBjX3djaGFyKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQogCiBjbGFzcyBBcnJheVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3B5dGhvbl9hcGkucHkKaW5kZXggNWViODgyYS4uOWMxMzc0NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5CkBAIC0xLDcgKzEsNiBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIGltcG9ydCB1bml0dGVzdCwgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBUaGlzIHNlY3Rpb24gc2hvdWxkIGJlIG1vdmVkIGludG8gY3R5cGVzXF9faW5pdF9fLnB5LCB3aGVuIGl0J3MgcmVhZHkuCkBAIC0zOSwyNCArMzgsMjEgQEAKICAgICAgICAgZGVsIHB5b2IKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMocyksIHJlZmNudCkKIAotICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInJlZmNvdW50Iik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IGlzIHVucmVsaWFibGUsIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCBjb2RlIGluCi0gICAgICAgICMgdW5pdHRlc3QgY2hhbmdlcyB0aGUgcmVmY291bnQgb2YgdGhlICc0MicgaW50ZWdlci4gIFNvLCBpdAotICAgICAgICAjIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgIGRlZiB0ZXN0X1B5TG9uZ19Mb25nKHNlbGYpOgotICAgICAgICAgICAgcmVmNDIgPSBncmMoNDIpCi0gICAgICAgICAgICBweXRob25hcGkuUHlMb25nX0Zyb21Mb25nLnJlc3R5cGUgPSBweV9vYmplY3QKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aG9uYXBpLlB5TG9uZ19Gcm9tTG9uZyg0MiksIDQyKQorICAgIEBzdXBwb3J0LnJlZmNvdW50X3Rlc3QKKyAgICBkZWYgdGVzdF9QeUxvbmdfTG9uZyhzZWxmKToKKyAgICAgICAgcmVmNDIgPSBncmMoNDIpCisgICAgICAgIHB5dGhvbmFwaS5QeUxvbmdfRnJvbUxvbmcucmVzdHlwZSA9IHB5X29iamVjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGhvbmFwaS5QeUxvbmdfRnJvbUxvbmcoNDIpLCA0MikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKIAotICAgICAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcuYXJndHlwZXMgPSAocHlfb2JqZWN0LCkKLSAgICAgICAgICAgIHB5dGhvbmFwaS5QeUxvbmdfQXNMb25nLnJlc3R5cGUgPSBjX2xvbmcKKyAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcuYXJndHlwZXMgPSAocHlfb2JqZWN0LCkKKyAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcucmVzdHlwZSA9IGNfbG9uZwogCi0gICAgICAgICAgICByZXMgPSBweXRob25hcGkuUHlMb25nX0FzTG9uZyg0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHJlcyksIHJlZjQyICsgMSkKLSAgICAgICAgICAgIGRlbCByZXMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKDQyKSwgcmVmNDIpCisgICAgICAgIHJlcyA9IHB5dGhvbmFwaS5QeUxvbmdfQXNMb25nKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhyZXMpLCByZWY0MiArIDEpCisgICAgICAgIGRlbCByZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKIAogICAgIEBzdXBwb3J0LnJlZmNvdW50X3Rlc3QKICAgICBkZWYgdGVzdF9QeU9ial9Gcm9tUHRyKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JhbmRvbV90aGluZ3MucHkKaW5kZXggNTE1YWNmNS4uNDU1NWVjZCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5CkBAIC01LDIzICs1LDIyIEBACiAgICAgNDIgLyBhcmcKICAgICByYWlzZSBWYWx1ZUVycm9yKGFyZykKIAotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCitjbGFzcyBjYWxsX2Z1bmN0aW9uX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIF9jdHlwZXMuY2FsbF9mdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBwcml2YXRlLCBidXQgdXNlZCBieQorICAgICMgR2FyeSBCaXNocCdzIHJlYWRsaW5lIG1vZHVsZS4gIElmIHdlIGhhdmUgaXQsIHdlIG11c3QgdGVzdCBpdCBhcyB3ZWxsLgogCi0gICAgY2xhc3MgY2FsbF9mdW5jdGlvbl9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICMgX2N0eXBlcy5jYWxsX2Z1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHByaXZhdGUsIGJ1dCB1c2VkIGJ5Ci0gICAgICAgICMgR2FyeSBCaXNocCdzIHJlYWRsaW5lIG1vZHVsZS4gIElmIHdlIGhhdmUgaXQsIHdlIG11c3QgdGVzdCBpdCBhcyB3ZWxsLgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IGNhbGxfZnVuY3Rpb24KKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QS5yZXN0eXBlID0gY192b2lkX3AKKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLmFyZ3R5cGVzID0gY192b2lkX3AsIGNfY2hhcl9wCisgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5yZXN0eXBlID0gY192b2lkX3AKIAotICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgY2FsbF9mdW5jdGlvbgotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QS5yZXN0eXBlID0gY192b2lkX3AKLSAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLnJlc3R5cGUgPSBjX3ZvaWRfcAorICAgICAgICBoZGxsID0gd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QShiImtlcm5lbDMyIikKKyAgICAgICAgZnVuY2FkZHIgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoaGRsbCwgYiJHZXRNb2R1bGVIYW5kbGVBIikKIAotICAgICAgICAgICAgaGRsbCA9IHdpbmRsbC5rZXJuZWwzMi5Mb2FkTGlicmFyeUEoYiJrZXJuZWwzMiIpCi0gICAgICAgICAgICBmdW5jYWRkciA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhoZGxsLCBiIkdldE1vZHVsZUhhbmRsZUEiKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxfZnVuY3Rpb24oZnVuY2FkZHIsIChOb25lLCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbF9mdW5jdGlvbihmdW5jYWRkciwgKE5vbmUsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKE5vbmUpKQogCiBjbGFzcyBDYWxsYmFja1RyYWNiYWNrVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgV2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIGEgY3R5cGVzIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgQwpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2xpY2luZy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NsaWNpbmcucHkKaW5kZXggODJmZWU5Ni4uMjQwZGMwYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2xpY2luZy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIAogaW1wb3J0IF9jdHlwZXNfdGVzdAogCkBAIC0xMjUsNDQgKzEyNiw0MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMjo1Oi0zXSwgc1syOjU6LTNdKQogCiAKLSAgICB0cnk6Ci0gICAgICAgIGNfd2NoYXIKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgZGVmIHRlc3Rfd2NoYXJfcHRyKHNlbGYpOgotICAgICAgICAgICAgcyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwwIgorICAgIEBuZWVkX3N5bWJvbCgnY193Y2hhcicpCisgICAgZGVmIHRlc3Rfd2NoYXJfcHRyKHNlbGYpOgorICAgICAgICBzID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XDAiCiAKLSAgICAgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQotICAgICAgICAgICAgZGxsLm15X3djc2R1cC5yZXN0eXBlID0gUE9JTlRFUihjX3djaGFyKQotICAgICAgICAgICAgZGxsLm15X3djc2R1cC5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCi0gICAgICAgICAgICBkbGwubXlfZnJlZS5yZXN0eXBlID0gTm9uZQotICAgICAgICAgICAgcmVzID0gZGxsLm15X3djc2R1cChzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKV0sIHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpOl0sIHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTotMTotMV0sIHNbOjotMV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTo1Oi03XSwgc1s6NTotN10pCisgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgICAgICBkbGwubXlfd2NzZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfd2NoYXIpCisgICAgICAgIGRsbC5teV93Y3NkdXAuYXJndHlwZXMgPSBQT0lOVEVSKGNfd2NoYXIpLAorICAgICAgICBkbGwubXlfZnJlZS5yZXN0eXBlID0gTm9uZQorICAgICAgICByZXMgPSBkbGwubXlfd2NzZHVwKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyldLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpOl0sIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0xOi0xOi0xXSwgc1s6Oi0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTE6NTotN10sIHNbOjU6LTddKQogCi0gICAgICAgICAgICBpbXBvcnQgb3BlcmF0b3IKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcywgc2xpY2UoMCwgNSksICJhYmNkZSIpCi0gICAgICAgICAgICBkbGwubXlfZnJlZShyZXMpCisgICAgICAgIGltcG9ydCBvcGVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcywgc2xpY2UoMCwgNSksICJhYmNkZSIpCisgICAgICAgIGRsbC5teV9mcmVlKHJlcykKIAotICAgICAgICAgICAgaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX3Nob3J0KToKLSAgICAgICAgICAgICAgICBkbGwubXlfd2NzZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfc2hvcnQpCi0gICAgICAgICAgICBlbGlmIHNpemVvZihjX3djaGFyKSA9PSBzaXplb2YoY19pbnQpOgotICAgICAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19pbnQpCi0gICAgICAgICAgICBlbGlmIHNpemVvZihjX3djaGFyKSA9PSBzaXplb2YoY19sb25nKToKLSAgICAgICAgICAgICAgICBkbGwubXlfd2NzZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfbG9uZykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICByZXMgPSBkbGwubXlfd2NzZHVwKHMpCi0gICAgICAgICAgICB0bXBsID0gbGlzdChyYW5nZShvcmQoImEiKSwgb3JkKCJ6IikrMSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpLTFdLCB0bXBsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKS0xOl0sIHRtcGwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMjotMTotMV0sIHRtcGxbOjotMV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMjo1Oi03XSwgdG1wbFs6NTotN10pCi0gICAgICAgICAgICBkbGwubXlfZnJlZShyZXMpCisgICAgICAgIGlmIHNpemVvZihjX3djaGFyKSA9PSBzaXplb2YoY19zaG9ydCk6CisgICAgICAgICAgICBkbGwubXlfd2NzZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfc2hvcnQpCisgICAgICAgIGVsaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX2ludCk6CisgICAgICAgICAgICBkbGwubXlfd2NzZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfaW50KQorICAgICAgICBlbGlmIHNpemVvZihjX3djaGFyKSA9PSBzaXplb2YoY19sb25nKToKKyAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19sb25nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnUG9pbnRlcnMgdG8gY193Y2hhciBhcmUgbm90IHN1cHBvcnRlZCcpCisgICAgICAgIHJlcyA9IGRsbC5teV93Y3NkdXAocykKKyAgICAgICAgdG1wbCA9IGxpc3QocmFuZ2Uob3JkKCJhIiksIG9yZCgieiIpKzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpLTFdLCB0bXBsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpLTE6XSwgdG1wbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTI6LTE6LTFdLCB0bXBsWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMjo1Oi03XSwgdG1wbFs6NTotN10pCisgICAgICAgIGRsbC5teV9mcmVlKHJlcykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncy5weQppbmRleCA5ZGMyYTI5Li5jN2JmYmRhIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBjbGFzcyBTdHJpbmdBcnJheVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdChzZWxmKToKQEAgLTUzLDM2ICs1NCwzMyBAQAogIyMgICAgICAgIHByaW50IEJVRi5mcm9tX3BhcmFtKGNfY2hhcl9wKCJweXRob24iKSkKICMjICAgICAgICBwcmludCBCVUYuZnJvbV9wYXJhbShCVUYoKiJweXRoIikpCiAKLXRyeToKLSAgICBjX3djaGFyCi1leGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgY2xhc3MgV1N0cmluZ0FycmF5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgIEJVRiA9IGNfd2NoYXIgKiA0CitAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorY2xhc3MgV1N0cmluZ0FycmF5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBCVUYgPSBjX3djaGFyICogNAogCi0gICAgICAgICAgICBidWYgPSBCVUYoImEiLCAiYiIsICJjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiYWJjIikKKyAgICAgICAgYnVmID0gQlVGKCJhIiwgImIiLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiYWJjIikKIAotICAgICAgICAgICAgYnVmLnZhbHVlID0gIkFCQ0QiCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIkFCQ0QiKQorICAgICAgICBidWYudmFsdWUgPSAiQUJDRCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJBQkNEIikKIAotICAgICAgICAgICAgYnVmLnZhbHVlID0gIngiCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIngiKQorICAgICAgICBidWYudmFsdWUgPSAieCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJ4IikKIAotICAgICAgICAgICAgYnVmWzFdID0gIloiCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgInhaQ0QiKQorICAgICAgICBidWZbMV0gPSAiWiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJ4WkNEIikKIAotICAgICAgICBAdW5pdHRlc3Quc2tpcElmKHNpemVvZihjX3djaGFyKSA8IDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNpemVvZih3Y2hhcl90KSBpcyBzbWFsbGVyIHRoYW4gNCBieXRlcyIpCi0gICAgICAgIGRlZiB0ZXN0X25vbmJtcChzZWxmKToKLSAgICAgICAgICAgIHUgPSBjaHIoMHgxMGZmZmYpCi0gICAgICAgICAgICB3ID0gY193Y2hhcih1KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnZhbHVlLCB1KQorICAgIEB1bml0dGVzdC5za2lwSWYoc2l6ZW9mKGNfd2NoYXIpIDwgNCwKKyAgICAgICAgICAgICAgICAgICAgICJzaXplb2Yod2NoYXJfdCkgaXMgc21hbGxlciB0aGFuIDQgYnl0ZXMiKQorICAgIGRlZiB0ZXN0X25vbmJtcChzZWxmKToKKyAgICAgICAgdSA9IGNocigweDEwZmZmZikKKyAgICAgICAgdyA9IGNfd2NoYXIodSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnZhbHVlLCB1KQogCiBjbGFzcyBTdHJpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIFhYX3Rlc3RfYmFzaWNfc3RyaW5ncyhzZWxmKToKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3RfYmFzaWNfc3RyaW5ncyhzZWxmKToKICAgICAgICAgY3MgPSBjX3N0cmluZygiYWJjZGVmIikKIAogICAgICAgICAjIENhbm5vdCBjYWxsIGxlbiBvbiBhIGNfc3RyaW5nIGFueSBsb25nZXIKQEAgLTEwOCw3ICsxMDYsOCBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19zdHJpbmcsICIxMjMiKQogCi0gICAgZGVmIFhYX3Rlc3Rfc2l6ZWRfc3RyaW5ncyhzZWxmKToKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3Rfc2l6ZWRfc3RyaW5ncyhzZWxmKToKIAogICAgICAgICAjIE5ldyBpbiByZWxlYXNlcyBsYXRlciB0aGFuIDAuNC4wOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfc3RyaW5nLCBOb25lKQpAQCAtMTI1LDcgKzEyNCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19zdHJpbmcoMikucmF3Wy0xXSwgIlwwMDAiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjX3N0cmluZygyKS5yYXcpLCAyKQogCi0gICAgZGVmIFhYX3Rlc3RfaW5pdGlhbGl6ZWRfc3RyaW5ncyhzZWxmKToKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZWRfc3RyaW5ncyhzZWxmKToKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6Ml0sICJhYiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyOl0sICJhYiIpCkBAIC0xMzQsNyArMTM0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3N0cmluZygiYWIiLCA0KS5yYXdbLTFdLCAiXDAwMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19zdHJpbmcoImFiIiwgMikucmF3LCAiYVwwMDAiKQogCi0gICAgZGVmIFhYX3Rlc3RfdG9vbG9uZyhzZWxmKToKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3RfdG9vbG9uZyhzZWxmKToKICAgICAgICAgY3MgPSBjX3N0cmluZygiYWJjZGVmIikKICAgICAgICAgIyBNdWNoIHRvbyBsb25nIHN0cmluZzoKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgY3MsICJ2YWx1ZSIsICIxMjM0NTY3ODkwMTIzNDUiKQpAQCAtMTQyLDU0ICsxNDMsNTMgQEAKICAgICAgICAgIyBPbmUgY2hhciB0b28gbG9uZyB2YWx1ZXM6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGNzLCAidmFsdWUiLCAiMTIzNDU2NyIpCiAKLSMjICAgIGRlZiB0ZXN0X3BlcmYoc2VsZik6Ci0jIyAgICAgICAgY2hlY2tfcGVyZigpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X3BlcmYoc2VsZik6CisgICAgICAgIGNoZWNrX3BlcmYoKQogCi10cnk6Ci0gICAgY193Y2hhcgotZXhjZXB0IE5hbWVFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGNsYXNzIFdTdHJpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiB0ZXN0X3djaGFyKHNlbGYpOgotICAgICAgICAgICAgY193Y2hhcigieCIpCi0gICAgICAgICAgICByZXByKGJ5cmVmKGNfd2NoYXIoIngiKSkpCi0gICAgICAgICAgICBjX3djaGFyKCJ4IikKK0BuZWVkX3N5bWJvbCgnY193Y2hhcicpCitjbGFzcyBXU3RyaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3djaGFyKHNlbGYpOgorICAgICAgICBjX3djaGFyKCJ4IikKKyAgICAgICAgcmVwcihieXJlZihjX3djaGFyKCJ4IikpKQorICAgICAgICBjX3djaGFyKCJ4IikKIAogCi0gICAgICAgIGRlZiBYX3Rlc3RfYmFzaWNfd3N0cmluZ3Moc2VsZik6Ci0gICAgICAgICAgICBjcyA9IGNfd3N0cmluZygiYWJjZGVmIikKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3RfYmFzaWNfd3N0cmluZ3Moc2VsZik6CisgICAgICAgIGNzID0gY193c3RyaW5nKCJhYmNkZWYiKQogCi0gICAgICAgICAgICAjIFhYWCBUaGlzIGJlaGF2aW91ciBpcyBhYm91dCB0byBjaGFuZ2U6Ci0gICAgICAgICAgICAjIGxlbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgaW4gYnl0ZXMuCi0gICAgICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIE5VTCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihjcyksIDE0KQorICAgICAgICAjIFhYWCBUaGlzIGJlaGF2aW91ciBpcyBhYm91dCB0byBjaGFuZ2U6CisgICAgICAgICMgbGVuIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlciBpbiBieXRlcy4KKyAgICAgICAgIyBUaGlzIGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihjcyksIDE0KQogCi0gICAgICAgICAgICAjIFRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyB0aGUgc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBOVUwuCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnZhbHVlLCAiYWJjZGVmIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193c3RyaW5nKCJhYmNcMDAwZGVmIikudmFsdWUsICJhYmMiKQorICAgICAgICAjIFRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyB0aGUgc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBOVUwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MudmFsdWUsICJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfd3N0cmluZygiYWJjXDAwMGRlZiIpLnZhbHVlLCAiYWJjIikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3dzdHJpbmcoImFiY1wwMDBkZWYiKS52YWx1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193c3RyaW5nKCJhYmNcMDAwZGVmIikudmFsdWUsICJhYmMiKQogCi0gICAgICAgICAgICAjIFRoZSByYXcgcHJvcGVydHkgaXMgdGhlIHRvdGFsIGJ1ZmZlciBjb250ZW50czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MucmF3LCAiYWJjZGVmXDAwMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfd3N0cmluZygiYWJjXDAwMGRlZiIpLnJhdywgImFiY1wwMDBkZWZcMDAwIikKKyAgICAgICAgIyBUaGUgcmF3IHByb3BlcnR5IGlzIHRoZSB0b3RhbCBidWZmZXIgY29udGVudHM6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MucmF3LCAiYWJjZGVmXDAwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193c3RyaW5nKCJhYmNcMDAwZGVmIikucmF3LCAiYWJjXDAwMGRlZlwwMDAiKQogCi0gICAgICAgICAgICAjIFdlIGNhbiBjaGFuZ2UgdGhlIHZhbHVlOgotICAgICAgICAgICAgY3MudmFsdWUgPSAiYWIiCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnZhbHVlLCAiYWIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYlwwMDBcMDAwXDAwMFwwMDBcMDAwIikKKyAgICAgICAgIyBXZSBjYW4gY2hhbmdlIHRoZSB2YWx1ZToKKyAgICAgICAgY3MudmFsdWUgPSAiYWIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MudmFsdWUsICJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MucmF3LCAiYWJcMDAwXDAwMFwwMDBcMDAwXDAwMCIpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY193c3RyaW5nLCAiMTIzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfd3N0cmluZywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3dzdHJpbmcsICIxMjMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjX3dzdHJpbmcsIDApCiAKLSAgICAgICAgZGVmIFhfdGVzdF90b29sb25nKHNlbGYpOgotICAgICAgICAgICAgY3MgPSBjX3dzdHJpbmcoImFiY2RlZiIpCi0gICAgICAgICAgICAjIE11Y2ggdG9vIGxvbmcgc3RyaW5nOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgY3MsICJ2YWx1ZSIsICIxMjM0NTY3ODkwMTIzNDUiKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF90b29sb25nKHNlbGYpOgorICAgICAgICBjcyA9IGNfd3N0cmluZygiYWJjZGVmIikKKyAgICAgICAgIyBNdWNoIHRvbyBsb25nIHN0cmluZzoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgY3MsICJ2YWx1ZSIsICIxMjM0NTY3ODkwMTIzNDUiKQogCi0gICAgICAgICAgICAjIE9uZSBjaGFyIHRvbyBsb25nIHZhbHVlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGNzLCAidmFsdWUiLCAiMTIzNDU2NyIpCisgICAgICAgICMgT25lIGNoYXIgdG9vIGxvbmcgdmFsdWVzOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgIjEyMzQ1NjciKQogCiAKIGRlZiBydW5fdGVzdChyZXAsIG1zZywgZnVuYywgYXJnKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CmluZGV4IDg3NjEzYWQuLjg0ZDQ1NmMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBmcm9tIHN0cnVjdCBpbXBvcnQgY2FsY3NpemUKIGltcG9ydCBfdGVzdGNhcGkKIApAQCAtMjkxLDEyICsyOTIsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGhvbmUubnVtYmVyLCBiIjU2NzgiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWdlLCA1KQogCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKICAgICBkZWYgdGVzdF9zdHJ1Y3R1cmVzX3dpdGhfd2NoYXIoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNfd2NoYXIKLSAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAjIG5vIHVuaWNvZGUKLQogICAgICAgICBjbGFzcyBQZXJzb25XKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIm5hbWUiLCBjX3djaGFyICogMTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJhZ2UiLCBjX2ludCldCkBAIC0zMjUsNyArMzIyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMsIFJ1bnRpbWVFcnJvcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoUGhvbmUpIDxjbGFzcyAnVHlwZUVycm9yJz46ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHN0cmluZywgaW50IGZvdW5kIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGJ5dGVzLCBpbnQgZm91bmQiKQogCiAgICAgICAgIGNscywgbXNnID0gc2VsZi5nZXRfZXhjZXB0KFBlcnNvbiwgYiJTb21lb25lIiwgKGIiYSIsIGIiYiIsIGIiYyIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscywgUnVudGltZUVycm9yKQpAQCAtMzU0LDE0ICszNTEsMTQgQEAKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBkZXRhaWw6CiAgICAgICAgICAgICByZXR1cm4gZGV0YWlsLl9fY2xhc3NfXywgc3RyKGRldGFpbCkKIAotCi0jIyAgICBkZWYgdGVzdF9zdWJjbGFzc19jcmVhdGlvbihzZWxmKToKLSMjICAgICAgICBtZXRhID0gdHlwZShTdHJ1Y3R1cmUpCi0jIyAgICAgICAgIyBzYW1lIGFzICdjbGFzcyBYKFN0cnVjdHVyZSk6IHBhc3MnCi0jIyAgICAgICAgIyBmYWlscywgc2luY2Ugd2UgbmVlZCBlaXRoZXIgYSBfZmllbGRzXyBvciBhIF9hYnN0cmFjdF8gYXR0cmlidXRlCi0jIyAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQobWV0YSwgIlgiLCAoU3RydWN0dXJlLCksIHt9KQotIyMgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNscywgbXNnKSwKLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQXR0cmlidXRlRXJyb3IsICJjbGFzcyBtdXN0IGRlZmluZSBhICdfZmllbGRzXycgYXR0cmlidXRlIikpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2NyZWF0aW9uKHNlbGYpOgorICAgICAgICBtZXRhID0gdHlwZShTdHJ1Y3R1cmUpCisgICAgICAgICMgc2FtZSBhcyAnY2xhc3MgWChTdHJ1Y3R1cmUpOiBwYXNzJworICAgICAgICAjIGZhaWxzLCBzaW5jZSB3ZSBuZWVkIGVpdGhlciBhIF9maWVsZHNfIG9yIGEgX2Fic3RyYWN0XyBhdHRyaWJ1dGUKKyAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQobWV0YSwgIlgiLCAoU3RydWN0dXJlLCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjbHMsIG1zZyksCisgICAgICAgICAgICAgICAgKEF0dHJpYnV0ZUVycm9yLCAiY2xhc3MgbXVzdCBkZWZpbmUgYSAnX2ZpZWxkc18nIGF0dHJpYnV0ZSIpKQogCiAgICAgZGVmIHRlc3RfYWJzdHJhY3RfY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF91bmljb2RlLnB5CmluZGV4IGMzYjJkNDguLmMyMDBhZjcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtMSw1OCArMSw1NSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgY3R5cGVzCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCi10cnk6Ci0gICAgY3R5cGVzLmNfd2NoYXIKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKIAotICAgIGNsYXNzIFVuaWNvZGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiB0ZXN0X3djc2xlbihzZWxmKToKLSAgICAgICAgICAgIGRsbCA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKLSAgICAgICAgICAgIHdjc2xlbiA9IGRsbC5teV93Y3NsZW4KLSAgICAgICAgICAgIHdjc2xlbi5hcmd0eXBlcyA9IFtjdHlwZXMuY193Y2hhcl9wXQorQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKK2NsYXNzIFVuaWNvZGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfd2NzbGVuKHNlbGYpOgorICAgICAgICBkbGwgPSBjdHlwZXMuQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgIHdjc2xlbiA9IGRsbC5teV93Y3NsZW4KKyAgICAgICAgd2NzbGVuLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3djaGFyX3BdCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYlx1MjA3MCIpLCAzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3R5cGVzLkFyZ3VtZW50RXJyb3IsIHdjc2xlbiwgYiJhYlx4ZTQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJjIiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYlx1MjA3MCIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjdHlwZXMuQXJndW1lbnRFcnJvciwgd2NzbGVuLCBiImFiXHhlNCIpCiAKLSAgICAgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKLSAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoImFiYyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCAzKzEpCisgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKKyAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgMysxKQogCi0gICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYlx4ZTRceGY2XHhmYyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgImFiXHhlNFx4ZjZceGZjXDAiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCAiYWJceGU0XHhmNlx4ZmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgJ1x4MDBceGZjXHhmNlx4ZTRiYScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCAnYVx4ZTRceGZjJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzY6NTotMV0sICIiKQorICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYlx4ZTRceGY2XHhmYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCAiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgImFiXHhlNFx4ZjZceGZjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgJ1x4MDBceGZjXHhmNlx4ZTRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6Ml0sICdhXHhlNFx4ZmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCAiIikKIAotICAgIGZ1bmMgPSBjdHlwZXMuQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pLl90ZXN0ZnVuY19wX3AKK2Z1bmMgPSBjdHlwZXMuQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pLl90ZXN0ZnVuY19wX3AKIAotICAgIGNsYXNzIFN0cmluZ1Rlc3RDYXNlKFVuaWNvZGVUZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBbY3R5cGVzLmNfY2hhcl9wXQotICAgICAgICAgICAgZnVuYy5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCitjbGFzcyBTdHJpbmdUZXN0Q2FzZShVbmljb2RlVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFtjdHlwZXMuY19jaGFyX3BdCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGN0eXBlcy5jX2NoYXJfcAogCi0gICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBOb25lCi0gICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBOb25lCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGN0eXBlcy5jX2ludAogCi0gICAgICAgIGRlZiB0ZXN0X2Z1bmMoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYiJhYmNceGU0IiksIGIiYWJjXHhlNCIpCisgICAgZGVmIHRlc3RfZnVuYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKGIiYWJjXHhlNCIpLCBiImFiY1x4ZTQiKQogCi0gICAgICAgIGRlZiB0ZXN0X2J1ZmZlcnMoc2VsZik6Ci0gICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoYiJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgMysxKQorICAgIGRlZiB0ZXN0X2J1ZmZlcnMoc2VsZik6CisgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihiImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIDMrMSkKIAotICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKGIiYWJceGU0XHhmNlx4ZmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOl0sIGIiYWJceGU0XHhmNlx4ZmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sIGIiYWJceGU0XHhmNlx4ZmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgYidceDAwXHhmY1x4ZjZceGU0YmEnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgYidhXHhlNFx4ZmMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNjo1Oi0xXSwgYiIiKQorICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoYiJhYlx4ZTRceGY2XHhmYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCBiImFiXHhlNFx4ZjZceGZjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sIGIiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCBiJ1x4MDBceGZjXHhmNlx4ZTRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6Ml0sIGInYVx4ZTRceGZjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNjo1Oi0xXSwgYiIiKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YWx1ZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YWx1ZXMucHkKaW5kZXggZTQ2NDEwMi4uMWMxZmQ3ZCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weQpAQCAtMyw2ICszLDcgQEAKICIiIgogCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKIGZyb20gY3R5cGVzIGltcG9ydCAqCiAKIGltcG9ydCBfY3R5cGVzX3Rlc3QKQEAgLTI3LDYyICsyOCw2OCBAQAogICAgICAgICBjdGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjX2ludC5pbl9kbGwsIGN0ZGxsLCAiVW5kZWZpbmVkX1N5bWJvbCIpCiAKLSAgICBjbGFzcyBXaW5fVmFsdWVzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAiIiJUaGlzIHRlc3Qgb25seSB3b3JrcyB3aGVuIHB5dGhvbiBpdHNlbGYgaXMgYSBkbGwvc2hhcmVkIGxpYnJhcnkiIiIKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKK2NsYXNzIFdpbl9WYWx1ZXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGhpcyB0ZXN0IG9ubHkgd29ya3Mgd2hlbiBweXRob24gaXRzZWxmIGlzIGEgZGxsL3NoYXJlZCBsaWJyYXJ5IiIiCiAKLSAgICAgICAgZGVmIHRlc3Rfb3B0aW1pemVmbGFnKHNlbGYpOgotICAgICAgICAgICAgIyBUaGlzIHRlc3QgYWNjZXNzZXMgdGhlIFB5X09wdGltaXplRmxhZyBpbnRnZXIsIHdoaWNoIGlzCi0gICAgICAgICAgICAjIGV4cG9ydGVkIGJ5IHRoZSBQeXRob24gZGxsLgorICAgIGRlZiB0ZXN0X29wdGltaXplZmxhZyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgYWNjZXNzZXMgdGhlIFB5X09wdGltaXplRmxhZyBpbnRlZ2VyLCB3aGljaCBpcworICAgICAgICAjIGV4cG9ydGVkIGJ5IHRoZSBQeXRob24gZGxsIGFuZCBzaG91bGQgbWF0Y2ggdGhlIHN5cy5mbGFncyB2YWx1ZQogCi0gICAgICAgICAgICAjIEl0J3MgdmFsdWUgaXMgc2V0IGRlcGVuZGluZyBvbiB0aGUgLU8gYW5kIC1PTyBmbGFnczoKLSAgICAgICAgICAgICMgaWYgbm90IGdpdmVuLCBpdCBpcyAwIGFuZCBfX2RlYnVnX18gaXMgMS4KLSAgICAgICAgICAgICMgSWYgLU8gaXMgZ2l2ZW4sIHRoZSBmbGFnIGlzIDEsIGZvciAtT08gaXQgaXMgMi4KLSAgICAgICAgICAgICMgZG9jc3RyaW5ncyBhcmUgYWxzbyByZW1vdmVkIGluIHRoZSBsYXR0ZXIgY2FzZS4KLSAgICAgICAgICAgIG9wdCA9IGNfaW50LmluX2RsbChweWRsbCwgIlB5X09wdGltaXplRmxhZyIpLnZhbHVlCi0gICAgICAgICAgICBpZiBfX2RlYnVnX186Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQsIDApCi0gICAgICAgICAgICBlbGlmIFZhbHVlc1Rlc3RDYXNlLl9fZG9jX18gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQsIDEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAyKQorICAgICAgICBvcHQgPSBjX2ludC5pbl9kbGwocHl0aG9uYXBpLCAiUHlfT3B0aW1pemVGbGFnIikudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQsIHN5cy5mbGFncy5vcHRpbWl6ZSkKIAotICAgICAgICBkZWYgdGVzdF9mcm96ZW50YWJsZShzZWxmKToKLSAgICAgICAgICAgICMgUHl0aG9uIGV4cG9ydHMgYSBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIHN5bWJvbC4gVGhpcyBpcyBhCi0gICAgICAgICAgICAjIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc3RydWN0IF9mcm96ZW4gZW50cmllcy4gIFRoZSBlbmQgb2YgdGhlCi0gICAgICAgICAgICAjIGFycmF5IGlzIG1hcmtlZCBieSBhbiBlbnRyeSBjb250YWluaW5nIGEgTlVMTCBuYW1lIGFuZCB6ZXJvCi0gICAgICAgICAgICAjIHNpemUuCisgICAgZGVmIHRlc3RfZnJvemVudGFibGUoc2VsZik6CisgICAgICAgICMgUHl0aG9uIGV4cG9ydHMgYSBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIHN5bWJvbC4gVGhpcyBpcyBhCisgICAgICAgICMgcG9pbnRlciB0byBhbiBhcnJheSBvZiBzdHJ1Y3QgX2Zyb3plbiBlbnRyaWVzLiAgVGhlIGVuZCBvZiB0aGUKKyAgICAgICAgIyBhcnJheSBpcyBtYXJrZWQgYnkgYW4gZW50cnkgY29udGFpbmluZyBhIE5VTEwgbmFtZSBhbmQgemVybworICAgICAgICAjIHNpemUuCiAKLSAgICAgICAgICAgICMgSW4gc3RhbmRhcmQgUHl0aG9uLCB0aGlzIHRhYmxlIGNvbnRhaW5zIGEgX19oZWxsb19fCi0gICAgICAgICAgICAjIG1vZHVsZSwgYW5kIGEgX19waGVsbG9fXyBwYWNrYWdlIGNvbnRhaW5pbmcgYSBzcGFtCi0gICAgICAgICAgICAjIG1vZHVsZS4KLSAgICAgICAgICAgIGNsYXNzIHN0cnVjdF9mcm96ZW4oU3RydWN0dXJlKToKLSAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIm5hbWUiLCBjX2NoYXJfcCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjb2RlIiwgUE9JTlRFUihjX3VieXRlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzaXplIiwgY19pbnQpXQotICAgICAgICAgICAgRnJvemVuVGFibGUgPSBQT0lOVEVSKHN0cnVjdF9mcm96ZW4pCisgICAgICAgICMgSW4gc3RhbmRhcmQgUHl0aG9uLCB0aGlzIHRhYmxlIGNvbnRhaW5zIGEgX19oZWxsb19fCisgICAgICAgICMgbW9kdWxlLCBhbmQgYSBfX3BoZWxsb19fIHBhY2thZ2UgY29udGFpbmluZyBhIHNwYW0KKyAgICAgICAgIyBtb2R1bGUuCisgICAgICAgIGNsYXNzIHN0cnVjdF9mcm96ZW4oU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygibmFtZSIsIGNfY2hhcl9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiY29kZSIsIFBPSU5URVIoY191Ynl0ZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJzaXplIiwgY19pbnQpXQorICAgICAgICBGcm96ZW5UYWJsZSA9IFBPSU5URVIoc3RydWN0X2Zyb3plbikKIAotICAgICAgICAgICAgZnQgPSBGcm96ZW5UYWJsZS5pbl9kbGwocHlkbGwsICJQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIikKLSAgICAgICAgICAgICMgZnQgaXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RfZnJvemVuIGVudHJpZXM6Ci0gICAgICAgICAgICBpdGVtcyA9IFtdCi0gICAgICAgICAgICBmb3IgZW50cnkgaW4gZnQ6Ci0gICAgICAgICAgICAgICAgIyBUaGlzIGlzIGRhbmdlcm91cy4gV2UgKmNhbiogaXRlcmF0ZSBvdmVyIGEgcG9pbnRlciwgYnV0Ci0gICAgICAgICAgICAgICAgIyB0aGUgbG9vcCB3aWxsIG5vdCB0ZXJtaW5hdGUgKG1heWJlIHdpdGggYW4gYWNjZXNzCi0gICAgICAgICAgICAgICAgIyB2aW9sYXRpb247LSkgYmVjYXVzZSB0aGUgcG9pbnRlciBpbnN0YW5jZSBoYXMgbm8gc2l6ZS4KLSAgICAgICAgICAgICAgICBpZiBlbnRyeS5uYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaXRlbXMuYXBwZW5kKChlbnRyeS5uYW1lLCBlbnRyeS5zaXplKSkKLSAgICAgICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjJdID49ICgyLCAzKToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFsoIl9faGVsbG9fXyIsIDEwNCksICgiX19waGVsbG9fXyIsIC0xMDQpLCAoIl9fcGhlbGxvX18uc3BhbSIsIDEwNCldCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gWygiX19oZWxsb19fIiwgMTAwKSwgKCJfX3BoZWxsb19fIiwgLTEwMCksICgiX19waGVsbG9fXy5zcGFtIiwgMTAwKV0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIGV4cGVjdGVkKQorICAgICAgICBmdCA9IEZyb3plblRhYmxlLmluX2RsbChweXRob25hcGksICJQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIikKKyAgICAgICAgIyBmdCBpcyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdF9mcm96ZW4gZW50cmllczoKKyAgICAgICAgaXRlbXMgPSBbXQorICAgICAgICAjIF9mcm96ZW5faW1wb3J0bGliIGNoYW5nZXMgc2l6ZSB3aGVuZXZlciBpbXBvcnRsaWIuX2Jvb3RzdHJhcAorICAgICAgICAjIGNoYW5nZXMsIHNvIGl0IGdldHMgYSBzcGVjaWFsIGNhc2UuICBXZSBzaG91bGQgbWFrZSBzdXJlIGl0J3MKKyAgICAgICAgIyBmb3VuZCwgYnV0IGRvbid0IHdvcnJ5IGFib3V0IGl0cyBzaXplIHRvbyBtdWNoLgorICAgICAgICBfZnpuX2ltcGxpYl9zZWVuID0gRmFsc2UKKyAgICAgICAgZm9yIGVudHJ5IGluIGZ0OgorICAgICAgICAgICAgIyBUaGlzIGlzIGRhbmdlcm91cy4gV2UgKmNhbiogaXRlcmF0ZSBvdmVyIGEgcG9pbnRlciwgYnV0CisgICAgICAgICAgICAjIHRoZSBsb29wIHdpbGwgbm90IHRlcm1pbmF0ZSAobWF5YmUgd2l0aCBhbiBhY2Nlc3MKKyAgICAgICAgICAgICMgdmlvbGF0aW9uOy0pIGJlY2F1c2UgdGhlIHBvaW50ZXIgaW5zdGFuY2UgaGFzIG5vIHNpemUuCisgICAgICAgICAgICBpZiBlbnRyeS5uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKIAotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKLSAgICAgICAgICAgIGRlbCBfcG9pbnRlcl90eXBlX2NhY2hlW3N0cnVjdF9mcm96ZW5dCisgICAgICAgICAgICBpZiBlbnRyeS5uYW1lID09IGInX2Zyb3plbl9pbXBvcnRsaWInOgorICAgICAgICAgICAgICAgIF9mem5faW1wbGliX3NlZW4gPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudHJ5LnNpemUsCisgICAgICAgICAgICAgICAgICAgICJfZnJvemVuX2ltcG9ydGxpYiB3YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIG5vIHNpemUiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpdGVtcy5hcHBlbmQoKGVudHJ5Lm5hbWUsIGVudHJ5LnNpemUpKQogCi0gICAgICAgIGRlZiB0ZXN0X3VuZGVmaW5lZChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfaW50LmluX2RsbCwgcHlkbGwsICJVbmRlZmluZWRfU3ltYm9sIikKKyAgICAgICAgZXhwZWN0ZWQgPSBbKGIiX19oZWxsb19fIiwgMTYxKSwKKyAgICAgICAgICAgICAgICAgICAgKGIiX19waGVsbG9fXyIsIC0xNjEpLAorICAgICAgICAgICAgICAgICAgICAoYiJfX3BoZWxsb19fLnNwYW0iLCAxNjEpLAorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIGV4cGVjdGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfZnpuX2ltcGxpYl9zZWVuLAorICAgICAgICAgICAgIl9mcm96ZW5faW1wb3J0bGliIHdhc24ndCBmb3VuZCBpbiBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIikKKworICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgX3BvaW50ZXJfdHlwZV9jYWNoZQorICAgICAgICBkZWwgX3BvaW50ZXJfdHlwZV9jYWNoZVtzdHJ1Y3RfZnJvemVuXQorCisgICAgZGVmIHRlc3RfdW5kZWZpbmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjX2ludC5pbl9kbGwsIHB5dGhvbmFwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuZGVmaW5lZF9TeW1ib2wiKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQppbmRleCBkYTIxMzM2Li45MzU3M2RkIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQpAQCAtMSw5OSArMSwxMDMgQEAKICMgV2luZG93cyBzcGVjaWZpYyB0ZXN0cwogCiBmcm9tIGN0eXBlcyBpbXBvcnQgKgotZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgaXNfcmVzb3VyY2VfZW5hYmxlZAogaW1wb3J0IHVuaXR0ZXN0LCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBpbXBvcnQgX2N0eXBlc190ZXN0CiAKLWlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBzaXplb2YoY192b2lkX3ApID09IHNpemVvZihjX2ludCk6Ci0gICAgIyBPbmx5IHdpbmRvd3MgMzItYml0IGhhcyBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucy4KKyMgT25seSB3aW5kb3dzIDMyLWJpdCBoYXMgZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMuCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzaXplb2YoY192b2lkX3ApID09IHNpemVvZihjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAic2l6ZW9mIGNfdm9pZF9wIGFuZCBjX2ludCBkaWZmZXIiKQorY2xhc3MgV2luZG93c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jYWxsY29udl8xKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc3RkY2FsbCBmdW5jdGlvbgogCi0gICAgY2xhc3MgV2luZG93c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3RfY2FsbGNvbnZfMShzZWxmKToKLSAgICAgICAgICAgICMgVGVzdGluZyBzdGRjYWxsIGZ1bmN0aW9uCisgICAgICAgIElzV2luZG93ID0gd2luZGxsLnVzZXIzMi5Jc1dpbmRvdworICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoIGFyZ3VtZW50cworICAgICAgICAjICg0IGJ5dGVzIG1pc3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIElzV2luZG93KQogCi0gICAgICAgICAgICBJc1dpbmRvdyA9IHdpbmRsbC51c2VyMzIuSXNXaW5kb3cKLSAgICAgICAgICAgICMgVmFsdWVFcnJvcjogUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIG5vdCBlbm91Z2ggYXJndW1lbnRzICg0IGJ5dGVzIG1pc3NpbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdykKKyAgICAgICAgIyBUaGlzIG9uZSBzaG91bGQgc3VjY2VlZC4uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIElzV2luZG93KDApKQogCi0gICAgICAgICAgICAjIFRoaXMgb25lIHNob3VsZCBzdWNjZWVkLi4uCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIElzV2luZG93KDApKQorICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCB0b28gbWFueSBhcmd1bWVudHMKKyAgICAgICAgIyAoOCBieXRlcyBpbiBleGNlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIElzV2luZG93LCAwLCAwLCAwKQogCi0gICAgICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCB0b28gbWFueSBhcmd1bWVudHMgKDggYnl0ZXMgaW4gZXhjZXNzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgSXNXaW5kb3csIDAsIDAsIDApCisgICAgZGVmIHRlc3RfY2FsbGNvbnZfMihzZWxmKToKKyAgICAgICAgIyBDYWxsaW5nIHN0ZGNhbGwgZnVuY3Rpb24gYXMgY2RlY2wKIAotICAgICAgICBkZWYgdGVzdF9jYWxsY29udl8yKHNlbGYpOgotICAgICAgICAgICAgIyBDYWxsaW5nIHN0ZGNhbGwgZnVuY3Rpb24gYXMgY2RlY2wKKyAgICAgICAgSXNXaW5kb3cgPSBjZGxsLnVzZXIzMi5Jc1dpbmRvdwogCi0gICAgICAgICAgICBJc1dpbmRvdyA9IGNkbGwudXNlcjMyLklzV2luZG93CisgICAgICAgICMgVmFsdWVFcnJvcjogUHJvY2VkdXJlIGNhbGxlZCB3aXRoIG5vdCBlbm91Z2ggYXJndW1lbnRzCisgICAgICAgICMgKDQgYnl0ZXMgbWlzc2luZykgb3Igd3JvbmcgY2FsbGluZyBjb252ZW50aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIElzV2luZG93LCBOb25lKQogCi0gICAgICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoIGFyZ3VtZW50cyAoNCBieXRlcyBtaXNzaW5nKQotICAgICAgICAgICAgIyBvciB3cm9uZyBjYWxsaW5nIGNvbnZlbnRpb24KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIElzV2luZG93LCBOb25lKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorY2xhc3MgRnVuY3Rpb25DYWxsVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKCdNU0MnIGluIHN5cy52ZXJzaW9uLCAiU0VIIG9ubHkgc3VwcG9ydGVkIGJ5IE1TQyIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZXhlY3V0YWJsZS5lbmRzd2l0aCgnX2QuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICAiU0VIIG5vdCBlbmFibGVkIGluIGRlYnVnIGJ1aWxkcyIpCisgICAgZGVmIHRlc3RfU0VIKHNlbGYpOgorICAgICAgICAjIENhbGwgZnVuY3Rpb25zIHdpdGggaW52YWxpZCBhcmd1bWVudHMsIGFuZCBtYWtlIHN1cmUKKyAgICAgICAgIyB0aGF0IGFjY2VzcyB2aW9sYXRpb25zIGFyZSB0cmFwcGVkIGFuZCByYWlzZSBhbgorICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQogCi1pZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKLSAgICBjbGFzcyBGdW5jdGlvbkNhbGxUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugb24gd2luMzIgeDY0CisgICAgICAgIHdpbmRsbC51c2VyMzIuR2V0RGVza3RvcFdpbmRvdygpCiAKLSAgICAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgiU0VIIik6Ci0gICAgICAgICAgICBkZWYgdGVzdF9TRUgoc2VsZik6Ci0gICAgICAgICAgICAgICAgIyBDYWxsIGZ1bmN0aW9ucyB3aXRoIGludmFsaWQgYXJndW1lbnRzLCBhbmQgbWFrZSBzdXJlCi0gICAgICAgICAgICAgICAgIyB0aGF0IGFjY2VzcyB2aW9sYXRpb25zIGFyZSB0cmFwcGVkIGFuZCByYWlzZSBhbgotICAgICAgICAgICAgICAgICMgZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorY2xhc3MgVGVzdFdpbnR5cGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9IV05EKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2Yod2ludHlwZXMuSFdORCksIHNpemVvZihjX3ZvaWRfcCkpCiAKLSAgICAgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgotICAgICAgICAgICAgIyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIG9uIHdpbjMyIHg2NAotICAgICAgICAgICAgd2luZGxsLnVzZXIzMi5HZXREZXNrdG9wV2luZG93KCkKKyAgICBkZWYgdGVzdF9QQVJBTShzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLldQQVJBTSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjX3ZvaWRfcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLkxQQVJBTSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjX3ZvaWRfcCkpCiAKLSAgICBjbGFzcyBUZXN0V2ludHlwZXModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICBkZWYgdGVzdF9IV05EKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5IV05EKSwgc2l6ZW9mKGNfdm9pZF9wKSkKKyAgICBkZWYgdGVzdF9DT01FcnJvcihzZWxmKToKKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBDT01FcnJvcgorICAgICAgICBpZiBzdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ09NRXJyb3IuX19kb2NfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhaXNlZCB3aGVuIGEgQ09NIG1ldGhvZCBjYWxsIGZhaWxlZC4iKQogCi0gICAgICAgIGRlZiB0ZXN0X1BBUkFNKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5XUEFSQU0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNfdm9pZF9wKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLkxQQVJBTSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY192b2lkX3ApKQorICAgICAgICBleCA9IENPTUVycm9yKC0xLCAidGV4dCIsICgiZGV0YWlscyIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5ocmVzdWx0LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC50ZXh0LCAidGV4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXguZGV0YWlscywgKCJkZXRhaWxzIiwpKQogCi0gICAgICAgIGRlZiB0ZXN0X0NPTUVycm9yKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBDT01FcnJvcgotICAgICAgICAgICAgaWYgc3VwcG9ydC5IQVZFX0RPQ1NUUklOR1M6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDT01FcnJvci5fX2RvY19fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhaXNlZCB3aGVuIGEgQ09NIG1ldGhvZCBjYWxsIGZhaWxlZC4iKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorY2xhc3MgVGVzdFdpbkVycm9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF93aW5lcnJvcihzZWxmKToKKyAgICAgICAgIyBzZWUgSXNzdWUgMTYxNjkKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSID0gODcKKyAgICAgICAgbXNnID0gRm9ybWF0RXJyb3IoRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpLnN0cmlwKCkKKyAgICAgICAgYXJncyA9IChlcnJuby5FSU5WQUwsIG1zZywgTm9uZSwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpCiAKLSAgICAgICAgICAgIGV4ID0gQ09NRXJyb3IoLTEsICJ0ZXh0IiwgKCJkZXRhaWxzIiwpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5ocmVzdWx0LCAtMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXgudGV4dCwgInRleHQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5kZXRhaWxzLCAoImRldGFpbHMiLCkpCisgICAgICAgIGUgPSBXaW5FcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUlOVkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQogCi0gICAgY2xhc3MgVGVzdFdpbkVycm9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3Rfd2luZXJyb3Ioc2VsZik6Ci0gICAgICAgICAgICAjIHNlZSBJc3N1ZSAxNjE2OQotICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUiA9IDg3Ci0gICAgICAgICAgICBtc2cgPSBGb3JtYXRFcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikuc3RyaXAoKQotICAgICAgICAgICAgYXJncyA9IChlcnJuby5FSU5WQUwsIG1zZywgTm9uZSwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpCi0KLSAgICAgICAgICAgIGUgPSBXaW5FcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCBhcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FSU5WQUwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQotCi0gICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuU2V0TGFzdEVycm9yKEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJhaXNlIFdpbkVycm9yKCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICBlID0gZXhjCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgYXJncykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUlOVkFMKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLlNldExhc3RFcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgV2luRXJyb3IoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBlID0gZXhjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVJTlZBTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKIAogY2xhc3MgU3RydWN0dXJlcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KICAgICBkZWYgdGVzdF9zdHJ1Y3RfYnlfdmFsdWUoc2VsZik6CiAgICAgICAgIGNsYXNzIFBPSU5UKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2xvbmcpLApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2ludHlwZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW50eXBlcy5weQppbmRleCA4MDZmY2NlLi43MTQ0MmRmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW50eXBlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW50eXBlcy5weQpAQCAtMSwxNCArMSwxMiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1dpbmRvd3Mtb25seSB0ZXN0JykKLQogZnJvbSBjdHlwZXMgaW1wb3J0ICoKLWZyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcwogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksICdXaW5kb3dzLW9ubHkgdGVzdCcpCiBjbGFzcyBXaW5UeXBlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3ZhcmlhbnRfYm9vbChzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCiAgICAgICAgICMgcmVhZHMgMTYtYml0cyBmcm9tIG1lbW9yeSwgYW55dGhpbmcgbm9uLXplcm8gaXMgVHJ1ZQogICAgICAgICBmb3IgdHJ1ZV92YWx1ZSBpbiAoMSwgMzI3NjcsIDMyNzY4LCA2NTUzNSwgNjU1MzcpOgogICAgICAgICAgICAgdHJ1ZSA9IFBPSU5URVIoY19pbnQxNikoY19pbnQxNih0cnVlX3ZhbHVlKSkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdXRpbC5weSBiL0xpYi9jdHlwZXMvdXRpbC5weQppbmRleCAwNTRjNTExLi41OTUxMTNiIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3V0aWwucHkKKysrIGIvTGliL2N0eXBlcy91dGlsLnB5CkBAIC04NSw3ICs4NSw3IEBACiAKIGVsaWYgb3MubmFtZSA9PSAicG9zaXgiOgogICAgICMgQW5kcmVhcyBEZWdlcnQncyBmaW5kIGZ1bmN0aW9ucywgdXNpbmcgZ2NjLCAvc2Jpbi9sZGNvbmZpZywgb2JqZHVtcAotICAgIGltcG9ydCByZSwgdGVtcGZpbGUsIGVycm5vCisgICAgaW1wb3J0IHJlLCB0ZW1wZmlsZQogCiAgICAgZGVmIF9maW5kTGliX2djYyhuYW1lKToKICAgICAgICAgZXhwciA9IHInW15cKFwpXHNdKmxpYiVzXC5bXlwoXClcc10qJyAlIHJlLmVzY2FwZShuYW1lKQpAQCAtMTAyLDkgKzEwMiw4IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGNjb3V0KQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIHJ2ID09IDEwOgogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2NjIG9yIGNjIGNvbW1hbmQgbm90IGZvdW5kJykKICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsIHRyYWNlKQpAQCAtMTMzLDggKzEzMiwxMCBAQAogICAgICAgICAgICAgY21kID0gJ2lmICEgdHlwZSBvYmpkdW1wID4vZGV2L251bGwgMj4mMTsgdGhlbiBleGl0IDEwOyBmaTsnIFwKICAgICAgICAgICAgICAgICAgICJvYmpkdW1wIC1wIC1qIC5keW5hbWljIDI+L2Rldi9udWxsICIgKyBmCiAgICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQotICAgICAgICAgICAgZHVtcCA9IGYucmVhZCgpCi0gICAgICAgICAgICBydiA9IGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGR1bXAgPSBmLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBydiA9IGYuY2xvc2UoKQogICAgICAgICAgICAgaWYgcnYgPT0gMTA6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignb2JqZHVtcCBjb21tYW5kIG5vdCBmb3VuZCcpCiAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcc1NPTkFNRVxzKyhbXlxzXSspJywgZHVtcCkKQEAgLTE3NywxMCArMTc4LDExIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGNtZCA9ICdlbnYgTENfQUxMPUMgL3Vzci9iaW4vY3JsZSAyPi9kZXYvbnVsbCcKIAotICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3MucG9wZW4oY21kKS5yZWFkbGluZXMoKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdEZWZhdWx0IExpYnJhcnkgUGF0aCAoRUxGKTonKToKLSAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KClbNF0KKyAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKG9zLnBvcGVuKGNtZCkpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KClbNF0KIAogICAgICAgICAgICAgaWYgbm90IHBhdGhzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvZGF0ZXRpbWUucHkgYi9MaWIvZGF0ZXRpbWUucHkKaW5kZXggZDFmMzUzYi4uMTc4OTcxNCAxMDA2NDQKLS0tIGEvTGliL2RhdGV0aW1lLnB5CisrKyBiL0xpYi9kYXRldGltZS5weQpAQCAtMjMsOSArMjMsMTAgQEAKICMgZm9yIGFsbCBjb21wdXRhdGlvbnMuICBTZWUgdGhlIGJvb2sgZm9yIGFsZ29yaXRobXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbgogIyBwcm9sZXB0aWMgR3JlZ29yaWFuIG9yZGluYWxzIGFuZCBtYW55IG90aGVyIGNhbGVuZGFyIHN5c3RlbXMuCiAKLV9EQVlTX0lOX01PTlRIID0gW05vbmUsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCisjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgorX0RBWVNfSU5fTU9OVEggPSBbLTEsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCiAKLV9EQVlTX0JFRk9SRV9NT05USCA9IFtOb25lXQorX0RBWVNfQkVGT1JFX01PTlRIID0gWy0xXSAjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgogZGJtID0gMAogZm9yIGRpbSBpbiBfREFZU19JTl9NT05USFsxOl06CiAgICAgX0RBWVNfQkVGT1JFX01PTlRILmFwcGVuZChkYm0pCkBAIC0xOTE3LDIwMyArMTkxOCwyMDMgQEAKIHRpbWV6b25lLm1pbiA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21pbm9mZnNldCkKIHRpbWV6b25lLm1heCA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21heG9mZnNldCkKIF9FUE9DSCA9IGRhdGV0aW1lKDE5NzAsIDEsIDEsIHR6aW5mbz10aW1lem9uZS51dGMpCi0iIiIKLVNvbWUgdGltZSB6b25lIGFsZ2VicmEuICBGb3IgYSBkYXRldGltZSB4LCBsZXQKLSAgICB4Lm4gPSB4IHN0cmlwcGVkIG9mIGl0cyB0aW1lem9uZSAtLSBpdHMgbmFpdmUgdGltZS4KLSAgICB4Lm8gPSB4LnV0Y29mZnNldCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgotICAgICAgICAgIHJldHVybiBOb25lCi0gICAgeC5kID0geC5kc3QoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKLSAgICAgICAgICByZXR1cm4gTm9uZQotICAgIHgucyA9IHgncyBzdGFuZGFyZCBvZmZzZXQsIHgubyAtIHguZAogCi1Ob3cgc29tZSBkZXJpdmVkIHJ1bGVzLCB3aGVyZSBrIGlzIGEgZHVyYXRpb24gKHRpbWVkZWx0YSkuCisjIFNvbWUgdGltZSB6b25lIGFsZ2VicmEuICBGb3IgYSBkYXRldGltZSB4LCBsZXQKKyMgICAgIHgubiA9IHggc3RyaXBwZWQgb2YgaXRzIHRpbWV6b25lIC0tIGl0cyBuYWl2ZSB0aW1lLgorIyAgICAgeC5vID0geC51dGNvZmZzZXQoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKKyMgICAgICAgICAgIHJldHVybiBOb25lCisjICAgICB4LmQgPSB4LmRzdCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgorIyAgICAgICAgICAgcmV0dXJuIE5vbmUKKyMgICAgIHgucyA9IHgncyBzdGFuZGFyZCBvZmZzZXQsIHgubyAtIHguZAorIworIyBOb3cgc29tZSBkZXJpdmVkIHJ1bGVzLCB3aGVyZSBrIGlzIGEgZHVyYXRpb24gKHRpbWVkZWx0YSkuCisjCisjIDEuIHgubyA9IHgucyArIHguZAorIyAgICBUaGlzIGZvbGxvd3MgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB4LnMuCisjCisjIDIuIElmIHggYW5kIHkgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLCB4LnMgPSB5LnMuCisjICAgIFRoaXMgaXMgYWN0dWFsbHkgYSByZXF1aXJlbWVudCwgYW4gYXNzdW1wdGlvbiB3ZSBuZWVkIHRvIG1ha2UgYWJvdXQKKyMgICAgc2FuZSB0emluZm8gY2xhc3Nlcy4KKyMKKyMgMy4gVGhlIG5haXZlIFVUQyB0aW1lIGNvcnJlc3BvbmRpbmcgdG8geCBpcyB4Lm4gLSB4Lm8uCisjICAgIFRoaXMgaXMgYWdhaW4gYSByZXF1aXJlbWVudCBmb3IgYSBzYW5lIHR6aW5mbyBjbGFzcy4KKyMKKyMgNC4gKHgraykucyA9IHgucworIyAgICBUaGlzIGZvbGxvd3MgZnJvbSAjMiwgYW5kIHRoYXQgZGF0aW1ldGltZXR6K3RpbWVkZWx0YSBwcmVzZXJ2ZXMgdHppbmZvLgorIworIyA1LiAoeCtrKS5uID0geC5uICsgaworIyAgICBBZ2FpbiBmb2xsb3dzIGZyb20gaG93IGFyaXRobWV0aWMgaXMgZGVmaW5lZC4KKyMKKyMgTm93IHdlIGNhbiBleHBsYWluIHR6LmZyb211dGMoeCkuICBMZXQncyBhc3N1bWUgaXQncyBhbiBpbnRlcmVzdGluZyBjYXNlCisjIChtZWFuaW5nIHRoYXQgdGhlIHZhcmlvdXMgdHppbmZvIG1ldGhvZHMgZXhpc3QsIGFuZCBkb24ndCBibG93IHVwIG9yIHJldHVybgorIyBOb25lIHdoZW4gY2FsbGVkKS4KKyMKKyMgVGhlIGZ1bmN0aW9uIHdhbnRzIHRvIHJldHVybiBhIGRhdGV0aW1lIHkgd2l0aCB0aW1lem9uZSB0eiwgZXF1aXZhbGVudCB0byB4LgorIyB4IGlzIGFscmVhZHkgaW4gVVRDLgorIworIyBCeSAjMywgd2Ugd2FudAorIworIyAgICAgeS5uIC0geS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0KKyMKKyMgVGhlIGFsZ29yaXRobSBzdGFydHMgYnkgYXR0YWNoaW5nIHR6IHRvIHgubiwgYW5kIGNhbGxpbmcgdGhhdCB5LiAgU28KKyMgeC5uID0geS5uIGF0IHRoZSBzdGFydC4gIFRoZW4gaXQgd2FudHMgdG8gYWRkIGEgZHVyYXRpb24gayB0byB5LCBzbyB0aGF0IFsxXQorIyBiZWNvbWVzIHRydWU7IGluIGVmZmVjdCwgd2Ugd2FudCB0byBzb2x2ZSBbMl0gZm9yIGs6CisjCisjICAgICh5K2spLm4gLSAoeStrKS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgIFsyXQorIworIyBCeSAjMSwgdGhpcyBpcyB0aGUgc2FtZSBhcworIworIyAgICAoeStrKS5uIC0gKCh5K2spLnMgKyAoeStrKS5kKSA9IHgubiAgICAgICAgICBbM10KKyMKKyMgQnkgIzUsICh5K2spLm4gPSB5Lm4gKyBrLCB3aGljaCBlcXVhbHMgeC5uICsgayBiZWNhdXNlIHgubj15Lm4gYXQgdGhlIHN0YXJ0LgorIyBTdWJzdGl0dXRpbmcgdGhhdCBpbnRvIFszXSwKKyMKKyMgICAgeC5uICsgayAtICh5K2spLnMgLSAoeStrKS5kID0geC5uOyB0aGUgeC5uIHRlcm1zIGNhbmNlbCwgbGVhdmluZworIyAgICBrIC0gKHkraykucyAtICh5K2spLmQgPSAwOyByZWFycmFuZ2luZywKKyMgICAgayA9ICh5K2spLnMgLSAoeStrKS5kOyBieSAjNCwgKHkraykucyA9PSB5LnMsIHNvCisjICAgIGsgPSB5LnMgLSAoeStrKS5kCisjCisjIE9uIHRoZSBSSFMsICh5K2spLmQgY2FuJ3QgYmUgY29tcHV0ZWQgZGlyZWN0bHksIGJ1dCB5LnMgY2FuIGJlLCBhbmQgd2UKKyMgYXBwcm94aW1hdGUgayBieSBpZ25vcmluZyB0aGUgKHkraykuZCB0ZXJtIGF0IGZpcnN0LiAgTm90ZSB0aGF0IGsgY2FuJ3QgYmUKKyMgdmVyeSBsYXJnZSwgc2luY2UgYWxsIG9mZnNldC1yZXR1cm5pbmcgbWV0aG9kcyByZXR1cm4gYSBkdXJhdGlvbiBvZiBtYWduaXR1ZGUKKyMgbGVzcyB0aGFuIDI0IGhvdXJzLiAgRm9yIHRoYXQgcmVhc29uLCBpZiB5IGlzIGZpcm1seSBpbiBzdGQgdGltZSwgKHkraykuZCBtdXN0CisjIGJlIDAsIHNvIGlnbm9yaW5nIGl0IGhhcyBubyBjb25zZXF1ZW5jZSB0aGVuLgorIworIyBJbiBhbnkgY2FzZSwgdGhlIG5ldyB2YWx1ZSBpcworIworIyAgICAgeiA9IHkgKyB5LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF0KKyMKKyMgSXQncyBoZWxwZnVsIHRvIHN0ZXAgYmFjayBhdCBsb29rIGF0IFs0XSBmcm9tIGEgaGlnaGVyIGxldmVsOiAgaXQncyBzaW1wbHkKKyMgbWFwcGluZyBmcm9tIFVUQyB0byB0eidzIHN0YW5kYXJkIHRpbWUuCisjCisjIEF0IHRoaXMgcG9pbnQsIGlmCisjCisjICAgICB6Lm4gLSB6Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs1XQorIworIyB3ZSBoYXZlIGFuIGVxdWl2YWxlbnQgdGltZSwgYW5kIGFyZSBhbG1vc3QgZG9uZS4gIFRoZSBpbnNlY3VyaXR5IGhlcmUgaXMKKyMgYXQgdGhlIHN0YXJ0IG9mIGRheWxpZ2h0IHRpbWUuICBQaWN0dXJlIFVTIEVhc3Rlcm4gZm9yIGNvbmNyZXRlbmVzcy4gIFRoZSB3YWxsCisjIHRpbWUganVtcHMgZnJvbSAxOjU5IHRvIDM6MDAsIGFuZCB3YWxsIGhvdXJzIG9mIHRoZSBmb3JtIDI6TU0gZG9uJ3QgbWFrZSBnb29kCisjIHNlbnNlIHRoZW4uICBUaGUgZG9jcyBhc2sgdGhhdCBhbiBFYXN0ZXJuIHR6aW5mbyBjbGFzcyBjb25zaWRlciBzdWNoIGEgdGltZSB0bworIyBiZSBFRFQgKGJlY2F1c2UgaXQncyAiYWZ0ZXIgMiIpLCB3aGljaCBpcyBhIHJlZHVuZGFudCBzcGVsbGluZyBvZiAxOk1NIEVTVAorIyBvbiB0aGUgZGF5IERTVCBzdGFydHMuICBXZSB3YW50IHRvIHJldHVybiB0aGUgMTpNTSBFU1Qgc3BlbGxpbmcgYmVjYXVzZSB0aGF0J3MKKyMgdGhlIG9ubHkgc3BlbGxpbmcgdGhhdCBtYWtlcyBzZW5zZSBvbiB0aGUgbG9jYWwgd2FsbCBjbG9jay4KKyMKKyMgSW4gZmFjdCwgaWYgWzVdIGhvbGRzIGF0IHRoaXMgcG9pbnQsIHdlIGRvIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcsCisjIGJ1dCB0aGF0IHRha2VzIGEgYml0IG9mIHByb29mLiAgV2UgZmlyc3QgcHJvdmUgYSBzdHJvbmdlciByZXN1bHQuICBXaGF0J3MgdGhlCisjIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzVdPyAgTGV0CisjCisjICAgICBkaWZmID0geC5uIC0gKHoubiAtIHoubykgICAgICAgICAgICAgICAgICAgIFs2XQorIworIyBOb3cKKyMgICAgIHoubiA9ICAgICAgICAgICAgICAgICAgICAgICBieSBbNF0KKyMgICAgICh5ICsgeS5zKS5uID0gICAgICAgICAgICAgICBieSAjNQorIyAgICAgeS5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHkubiA9IHgubgorIyAgICAgeC5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHogYW5kIHkgYXJlIGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeS5zID0gei5zIGJ5ICMyCisjICAgICB4Lm4gKyB6LnMKKyMKKyMgUGx1Z2dpbmcgdGhhdCBiYWNrIGludG8gWzZdIGdpdmVzCisjCisjICAgICBkaWZmID0KKyMgICAgIHgubiAtICgoeC5uICsgei5zKSAtIHoubykgPSAgICAgZXhwYW5kaW5nCisjICAgICB4Lm4gLSB4Lm4gLSB6LnMgKyB6Lm8gPSAgICAgICAgIGNhbmNlbGxpbmcKKyMgICAgIC0gei5zICsgei5vID0gICAgICAgICAgICAgICAgICAgYnkgIzIKKyMgICAgIHouZAorIworIyBTbyBkaWZmID0gei5kLgorIworIyBJZiBbNV0gaXMgdHJ1ZSBub3csIGRpZmYgPSAwLCBzbyB6LmQgPSAwIHRvbywgYW5kIHdlIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUKKyMgc3BlbGxpbmcgd2Ugd2FudGVkIGluIHRoZSBlbmRjYXNlIGRlc2NyaWJlZCBhYm92ZS4gIFdlJ3JlIGRvbmUuICBDb250cmFyaWx5LAorIyBpZiB6LmQgPSAwLCB0aGVuIHdlIGhhdmUgYSBVVEMgZXF1aXZhbGVudCwgYW5kIGFyZSBhbHNvIGRvbmUuCisjCisjIElmIFs1XSBpcyBub3QgdHJ1ZSBub3csIGRpZmYgPSB6LmQgIT0gMCwgYW5kIHouZCBpcyB0aGUgb2Zmc2V0IHdlIG5lZWQgdG8KKyMgYWRkIHRvIHogKGluIGVmZmVjdCwgeiBpcyBpbiB0eidzIHN0YW5kYXJkIHRpbWUsIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IHRoZQorIyBsb2NhbCBjbG9jayBpbnRvIHR6J3MgZGF5bGlnaHQgdGltZSkuCisjCisjIExldAorIworIyAgICAgeicgPSB6ICsgei5kID0geiArIGRpZmYgICAgICAgICAgICAgICAgICAgICBbN10KKyMKKyMgYW5kIHdlIGNhbiBhZ2FpbiBhc2sgd2hldGhlcgorIworIyAgICAgeicubiAtIHonLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICBbOF0KKyMKKyMgSWYgc28sIHdlJ3JlIGRvbmUuICBJZiBub3QsIHRoZSB0emluZm8gY2xhc3MgaXMgaW5zYW5lLCBhY2NvcmRpbmcgdG8gdGhlCisjIGFzc3VtcHRpb25zIHdlJ3ZlIG1hZGUuICBUaGlzIGFsc28gcmVxdWlyZXMgYSBiaXQgb2YgcHJvb2YuICBBcyBiZWZvcmUsIGxldCdzCisjIGNvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzhdIChhbmQgc2tpcHBpbmcgc29tZSBvZgorIyB0aGUganVzdGlmaWNhdGlvbnMgZm9yIHRoZSBraW5kcyBvZiBzdWJzdGl0dXRpb25zIHdlJ3ZlIGRvbmUgc2V2ZXJhbCB0aW1lcworIyBhbHJlYWR5KToKKyMKKyMgICAgIGRpZmYnID0geC5uIC0gKHonLm4gLSB6Jy5vKSA9ICAgICAgICAgICByZXBsYWNpbmcgeicubiB2aWEgWzddCisjICAgICAgICAgICAgIHgubiAgLSAoei5uICsgZGlmZiAtIHonLm8pID0gICAgcmVwbGFjaW5nIGRpZmYgdmlhIFs2XQorIyAgICAgICAgICAgICB4Lm4gLSAoei5uICsgeC5uIC0gKHoubiAtIHoubykgLSB6Jy5vKSA9CisjICAgICAgICAgICAgIHgubiAtIHoubiAtIHgubiArIHoubiAtIHoubyArIHonLm8gPSAgICBjYW5jZWwgeC5uCisjICAgICAgICAgICAgIC0gei5uICsgei5uIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICBjYW5jZWwgei5uCisjICAgICAgICAgICAgIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICAgICAgICAgICMxIHR3aWNlCisjICAgICAgICAgICAgIC16LnMgLSB6LmQgKyB6Jy5zICsgeicuZCA9ICAgICAgICAgIHogYW5kIHonIGhhdmUgc2FtZSB0emluZm8KKyMgICAgICAgICAgICAgeicuZCAtIHouZAorIworIyBTbyB6JyBpcyBVVEMtZXF1aXZhbGVudCB0byB4IGlmZiB6Jy5kID0gei5kIGF0IHRoaXMgcG9pbnQuICBJZiB0aGV5IGFyZSBlcXVhbCwKKyMgd2UndmUgZm91bmQgdGhlIFVUQy1lcXVpdmFsZW50IHNvIGFyZSBkb25lLiAgSW4gZmFjdCwgd2Ugc3RvcCB3aXRoIFs3XSBhbmQKKyMgcmV0dXJuIHonLCBub3QgYm90aGVyaW5nIHRvIGNvbXB1dGUgeicuZC4KKyMKKyMgSG93IGNvdWxkIHouZCBhbmQgeidkIGRpZmZlcj8gIHonID0geiArIHouZCBbN10sIHNvIG1lcmVseSBtb3ZpbmcgeicgYnkKKyMgYSBkc3QoKSBvZmZzZXQsIGFuZCBzdGFydGluZyAqZnJvbSogYSB0aW1lIGFscmVhZHkgaW4gRFNUICh3ZSBrbm93IHouZCAhPSAwKSwKKyMgd291bGQgaGF2ZSB0byBjaGFuZ2UgdGhlIHJlc3VsdCBkc3QoKSByZXR1cm5zOiAgd2Ugc3RhcnQgaW4gRFNULCBhbmQgbW92aW5nCisjIGEgbGl0dGxlIGZ1cnRoZXIgaW50byBpdCB0YWtlcyB1cyBvdXQgb2YgRFNULgorIworIyBUaGVyZSBpc24ndCBhIHNhbmUgY2FzZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4uICBUaGUgY2xvc2VzdCBpdCBnZXRzIGlzIGF0CisjIHRoZSBlbmQgb2YgRFNULCB3aGVyZSB0aGVyZSdzIGFuIGhvdXIgaW4gVVRDIHdpdGggbm8gc3BlbGxpbmcgaW4gYSBoeWJyaWQKKyMgdHppbmZvIGNsYXNzLiAgSW4gVVMgRWFzdGVybiwgdGhhdCdzIDU6TU0gVVRDID0gMDpNTSBFU1QgPSAxOk1NIEVEVC4gIER1cmluZworIyB0aGF0IGhvdXIsIG9uIGFuIEVhc3Rlcm4gY2xvY2sgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lICg2Ok1NCisjIFVUQykgYmVjYXVzZSB0aGUgZG9jcyBpbnNpc3Qgb24gdGhhdCwgYnV0IDA6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gZGF5bGlnaHQKKyMgdGltZSAoNDpNTSBVVEMpLiAgVGhlcmUgaXMgbm8gbG9jYWwgdGltZSBtYXBwaW5nIHRvIDU6TU0gVVRDLiAgVGhlIGxvY2FsCisjIGNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAgYWdhaW4sIGFuZCByZXBlYXRzIHRoZSAxOk1NIGhvdXIgaW4KKyMgc3RhbmRhcmQgdGltZS4gIFNpbmNlIHRoYXQncyB3aGF0IHRoZSBsb2NhbCBjbG9jayAqZG9lcyosIHdlIHdhbnQgdG8gbWFwIGJvdGgKKyMgVVRDIGhvdXJzIDU6TU0gYW5kIDY6TU0gdG8gMTpNTSBFYXN0ZXJuLiAgVGhlIHJlc3VsdCBpcyBhbWJpZ3VvdXMKKyMgaW4gbG9jYWwgdGltZSwgYnV0IHNvIGl0IGdvZXMgLS0gaXQncyB0aGUgd2F5IHRoZSBsb2NhbCBjbG9jayB3b3Jrcy4KKyMKKyMgV2hlbiB4ID0gNTpNTSBVVEMgaXMgdGhlIGlucHV0IHRvIHRoaXMgYWxnb3JpdGhtLCB4Lm89MCwgeS5vPS01IGFuZCB5LmQ9MCwKKyMgc28gej0wOk1NLiAgei5kPTYwIChtaW51dGVzKSB0aGVuLCBzbyBbNV0gZG9lc24ndCBob2xkIGFuZCB3ZSBrZWVwIGdvaW5nLgorIyB6JyA9IHogKyB6LmQgPSAxOk1NIHRoZW4sIGFuZCB6Jy5kPTAsIGFuZCB6Jy5kIC0gei5kID0gLTYwICE9IDAgc28gWzhdCisjIChjb3JyZWN0bHkpIGNvbmNsdWRlcyB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCB0byB4LgorIworIyBCZWNhdXNlIHdlIGtub3cgei5kIHNhaWQgeiB3YXMgaW4gZGF5bGlnaHQgdGltZSAoZWxzZSBbNV0gd291bGQgaGF2ZSBoZWxkIGFuZAorIyB3ZSB3b3VsZCBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB3ZSBrbm93IHouZCAhPSB6Jy5kIChlbHNlIFs4XSB3b3VsZCBoYXZlIGhlbGQKKyMgYW5kIHdlIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHRoZXJlIGFyZSBvbmx5IDIgcG9zc2libGUgdmFsdWVzIGRzdCgpIGNhbgorIyByZXR1cm4gaW4gRWFzdGVybiwgaXQgZm9sbG93cyB0aGF0IHonLmQgbXVzdCBiZSAwICh3aGljaCBpdCBpcyBpbiB0aGUgZXhhbXBsZSwKKyMgYnV0IHRoZSByZWFzb25pbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGV4YW1wbGUgLS0gaXQgZGVwZW5kcyBvbiB0aGVyZSBiZWluZworIyB0d28gcG9zc2libGUgZHN0KCkgb3V0Y29tZXMsIG9uZSB6ZXJvIGFuZCB0aGUgb3RoZXIgbm9uLXplcm8pLiAgVGhlcmVmb3JlCisjIHonIG11c3QgYmUgaW4gc3RhbmRhcmQgdGltZSwgYW5kIGlzIHRoZSBzcGVsbGluZyB3ZSB3YW50IGluIHRoaXMgY2FzZS4KKyMKKyMgTm90ZSBhZ2FpbiB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCBhcyBmYXIgYXMgdGhlIGh5YnJpZCB0emluZm8gY2xhc3MgaXMKKyMgY29uY2VybmVkIChiZWNhdXNlIGl0IHRha2VzIHonIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgcmF0aGVyIHRoYW4gdGhlCisjIGRheWxpZ2h0IHRpbWUgd2UgaW50ZW5kIGhlcmUpLCBidXQgcmV0dXJuaW5nIGl0IGdpdmVzIHRoZSByZWFsLWxpZmUgImxvY2FsCisjIGNsb2NrIHJlcGVhdHMgYW4gaG91ciIgYmVoYXZpb3Igd2hlbiBtYXBwaW5nIHRoZSAidW5zcGVsbGFibGUiIFVUQyBob3VyIGludG8KKyMgdHouCisjCisjIFdoZW4gdGhlIGlucHV0IGlzIDY6TU0sIHo9MTpNTSBhbmQgei5kPTAsIGFuZCB3ZSBzdG9wIGF0IG9uY2UsIGFnYWluIHdpdGgKKyMgdGhlIDE6TU0gc3RhbmRhcmQgdGltZSBzcGVsbGluZyB3ZSB3YW50LgorIworIyBTbyBob3cgY2FuIHRoaXMgYnJlYWs/ICBPbmUgb2YgdGhlIGFzc3VtcHRpb25zIG11c3QgYmUgdmlvbGF0ZWQuICBUd28KKyMgcG9zc2liaWxpdGllczoKKyMKKyMgMSkgWzJdIGVmZmVjdGl2ZWx5IHNheXMgdGhhdCB5LnMgaXMgaW52YXJpYW50IGFjcm9zcyBhbGwgeSBiZWxvbmcgdG8gYSBnaXZlbgorIyAgICB0aW1lIHpvbmUuICBUaGlzIGlzbid0IHRydWUgaWYsIGZvciBwb2xpdGljYWwgcmVhc29ucyBvciBjb250aW5lbnRhbCBkcmlmdCwKKyMgICAgYSByZWdpb24gZGVjaWRlcyB0byBjaGFuZ2UgaXRzIGJhc2Ugb2Zmc2V0IGZyb20gVVRDLgorIworIyAyKSBUaGVyZSBtYXkgYmUgdmVyc2lvbnMgb2YgImRvdWJsZSBkYXlsaWdodCIgdGltZSB3aGVyZSB0aGUgdGFpbCBlbmQgb2YKKyMgICAgdGhlIGFuYWx5c2lzIGdpdmVzIHVwIGEgc3RlcCB0b28gZWFybHkuICBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGF0CisjICAgIGVub3VnaCB0byBzYXkuCisjCisjIEluIGFueSBjYXNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGRlZmF1bHQgZnJvbXV0YygpIGlzIHN0cm9uZyBlbm91Z2ggdG8gaGFuZGxlCisjICJhbG1vc3QgYWxsIiB0aW1lIHpvbmVzOiAgc28gbG9uZyBhcyB0aGUgc3RhbmRhcmQgb2Zmc2V0IGlzIGludmFyaWFudCwgaXQKKyMgZG9lc24ndCBtYXR0ZXIgaWYgZGF5bGlnaHQgdGltZSB0cmFuc2l0aW9uIHBvaW50cyBjaGFuZ2UgZnJvbSB5ZWFyIHRvIHllYXIsIG9yCisjIGlmIGRheWxpZ2h0IHRpbWUgaXMgc2tpcHBlZCBpbiBzb21lIHllYXJzOyBpdCBkb2Vzbid0IG1hdHRlciBob3cgbGFyZ2Ugb3IKKyMgc21hbGwgZHN0KCkgbWF5IGdldCB3aXRoaW4gaXRzIGJvdW5kczsgYW5kIGl0IGRvZXNuJ3QgZXZlbiBtYXR0ZXIgaWYgc29tZQorIyBwZXJ2ZXJzZSB0aW1lIHpvbmUgcmV0dXJucyBhIG5lZ2F0aXZlIGRzdCgpKS4gIFNvIGEgYnJlYWtpbmcgY2FzZSBtdXN0IGJlCisjIHByZXR0eSBiaXphcnJlLCBhbmQgYSB0emluZm8gc3ViY2xhc3MgY2FuIG92ZXJyaWRlIGZyb211dGMoKSBpZiBpdCBpcy4KIAotMS4geC5vID0geC5zICsgeC5kCi0gICBUaGlzIGZvbGxvd3MgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB4LnMuCi0KLTIuIElmIHggYW5kIHkgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLCB4LnMgPSB5LnMuCi0gICBUaGlzIGlzIGFjdHVhbGx5IGEgcmVxdWlyZW1lbnQsIGFuIGFzc3VtcHRpb24gd2UgbmVlZCB0byBtYWtlIGFib3V0Ci0gICBzYW5lIHR6aW5mbyBjbGFzc2VzLgotCi0zLiBUaGUgbmFpdmUgVVRDIHRpbWUgY29ycmVzcG9uZGluZyB0byB4IGlzIHgubiAtIHguby4KLSAgIFRoaXMgaXMgYWdhaW4gYSByZXF1aXJlbWVudCBmb3IgYSBzYW5lIHR6aW5mbyBjbGFzcy4KLQotNC4gKHgraykucyA9IHgucwotICAgVGhpcyBmb2xsb3dzIGZyb20gIzIsIGFuZCB0aGF0IGRhdGltZXRpbWV0eit0aW1lZGVsdGEgcHJlc2VydmVzIHR6aW5mby4KLQotNS4gKHgraykubiA9IHgubiArIGsKLSAgIEFnYWluIGZvbGxvd3MgZnJvbSBob3cgYXJpdGhtZXRpYyBpcyBkZWZpbmVkLgotCi1Ob3cgd2UgY2FuIGV4cGxhaW4gdHouZnJvbXV0Yyh4KS4gIExldCdzIGFzc3VtZSBpdCdzIGFuIGludGVyZXN0aW5nIGNhc2UKLShtZWFuaW5nIHRoYXQgdGhlIHZhcmlvdXMgdHppbmZvIG1ldGhvZHMgZXhpc3QsIGFuZCBkb24ndCBibG93IHVwIG9yIHJldHVybgotTm9uZSB3aGVuIGNhbGxlZCkuCi0KLVRoZSBmdW5jdGlvbiB3YW50cyB0byByZXR1cm4gYSBkYXRldGltZSB5IHdpdGggdGltZXpvbmUgdHosIGVxdWl2YWxlbnQgdG8geC4KLXggaXMgYWxyZWFkeSBpbiBVVEMuCi0KLUJ5ICMzLCB3ZSB3YW50Ci0KLSAgICB5Lm4gLSB5Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXQotCi1UaGUgYWxnb3JpdGhtIHN0YXJ0cyBieSBhdHRhY2hpbmcgdHogdG8geC5uLCBhbmQgY2FsbGluZyB0aGF0IHkuICBTbwoteC5uID0geS5uIGF0IHRoZSBzdGFydC4gIFRoZW4gaXQgd2FudHMgdG8gYWRkIGEgZHVyYXRpb24gayB0byB5LCBzbyB0aGF0IFsxXQotYmVjb21lcyB0cnVlOyBpbiBlZmZlY3QsIHdlIHdhbnQgdG8gc29sdmUgWzJdIGZvciBrOgotCi0gICAoeStrKS5uIC0gKHkraykubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICBbMl0KLQotQnkgIzEsIHRoaXMgaXMgdGhlIHNhbWUgYXMKLQotICAgKHkraykubiAtICgoeStrKS5zICsgKHkraykuZCkgPSB4Lm4gICAgICAgICAgWzNdCi0KLUJ5ICM1LCAoeStrKS5uID0geS5uICsgaywgd2hpY2ggZXF1YWxzIHgubiArIGsgYmVjYXVzZSB4Lm49eS5uIGF0IHRoZSBzdGFydC4KLVN1YnN0aXR1dGluZyB0aGF0IGludG8gWzNdLAotCi0gICB4Lm4gKyBrIC0gKHkraykucyAtICh5K2spLmQgPSB4Lm47IHRoZSB4Lm4gdGVybXMgY2FuY2VsLCBsZWF2aW5nCi0gICBrIC0gKHkraykucyAtICh5K2spLmQgPSAwOyByZWFycmFuZ2luZywKLSAgIGsgPSAoeStrKS5zIC0gKHkraykuZDsgYnkgIzQsICh5K2spLnMgPT0geS5zLCBzbwotICAgayA9IHkucyAtICh5K2spLmQKLQotT24gdGhlIFJIUywgKHkraykuZCBjYW4ndCBiZSBjb21wdXRlZCBkaXJlY3RseSwgYnV0IHkucyBjYW4gYmUsIGFuZCB3ZQotYXBwcm94aW1hdGUgayBieSBpZ25vcmluZyB0aGUgKHkraykuZCB0ZXJtIGF0IGZpcnN0LiAgTm90ZSB0aGF0IGsgY2FuJ3QgYmUKLXZlcnkgbGFyZ2UsIHNpbmNlIGFsbCBvZmZzZXQtcmV0dXJuaW5nIG1ldGhvZHMgcmV0dXJuIGEgZHVyYXRpb24gb2YgbWFnbml0dWRlCi1sZXNzIHRoYW4gMjQgaG91cnMuICBGb3IgdGhhdCByZWFzb24sIGlmIHkgaXMgZmlybWx5IGluIHN0ZCB0aW1lLCAoeStrKS5kIG11c3QKLWJlIDAsIHNvIGlnbm9yaW5nIGl0IGhhcyBubyBjb25zZXF1ZW5jZSB0aGVuLgotCi1JbiBhbnkgY2FzZSwgdGhlIG5ldyB2YWx1ZSBpcwotCi0gICAgeiA9IHkgKyB5LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF0KLQotSXQncyBoZWxwZnVsIHRvIHN0ZXAgYmFjayBhdCBsb29rIGF0IFs0XSBmcm9tIGEgaGlnaGVyIGxldmVsOiAgaXQncyBzaW1wbHkKLW1hcHBpbmcgZnJvbSBVVEMgdG8gdHoncyBzdGFuZGFyZCB0aW1lLgotCi1BdCB0aGlzIHBvaW50LCBpZgotCi0gICAgei5uIC0gei5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNV0KLQotd2UgaGF2ZSBhbiBlcXVpdmFsZW50IHRpbWUsIGFuZCBhcmUgYWxtb3N0IGRvbmUuICBUaGUgaW5zZWN1cml0eSBoZXJlIGlzCi1hdCB0aGUgc3RhcnQgb2YgZGF5bGlnaHQgdGltZS4gIFBpY3R1cmUgVVMgRWFzdGVybiBmb3IgY29uY3JldGVuZXNzLiAgVGhlIHdhbGwKLXRpbWUganVtcHMgZnJvbSAxOjU5IHRvIDM6MDAsIGFuZCB3YWxsIGhvdXJzIG9mIHRoZSBmb3JtIDI6TU0gZG9uJ3QgbWFrZSBnb29kCi1zZW5zZSB0aGVuLiAgVGhlIGRvY3MgYXNrIHRoYXQgYW4gRWFzdGVybiB0emluZm8gY2xhc3MgY29uc2lkZXIgc3VjaCBhIHRpbWUgdG8KLWJlIEVEVCAoYmVjYXVzZSBpdCdzICJhZnRlciAyIiksIHdoaWNoIGlzIGEgcmVkdW5kYW50IHNwZWxsaW5nIG9mIDE6TU0gRVNUCi1vbiB0aGUgZGF5IERTVCBzdGFydHMuICBXZSB3YW50IHRvIHJldHVybiB0aGUgMTpNTSBFU1Qgc3BlbGxpbmcgYmVjYXVzZSB0aGF0J3MKLXRoZSBvbmx5IHNwZWxsaW5nIHRoYXQgbWFrZXMgc2Vuc2Ugb24gdGhlIGxvY2FsIHdhbGwgY2xvY2suCi0KLUluIGZhY3QsIGlmIFs1XSBob2xkcyBhdCB0aGlzIHBvaW50LCB3ZSBkbyBoYXZlIHRoZSBzdGFuZGFyZC10aW1lIHNwZWxsaW5nLAotYnV0IHRoYXQgdGFrZXMgYSBiaXQgb2YgcHJvb2YuICBXZSBmaXJzdCBwcm92ZSBhIHN0cm9uZ2VyIHJlc3VsdC4gIFdoYXQncyB0aGUKLWRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzVdPyAgTGV0Ci0KLSAgICBkaWZmID0geC5uIC0gKHoubiAtIHoubykgICAgICAgICAgICAgICAgICAgIFs2XQotCi1Ob3cKLSAgICB6Lm4gPSAgICAgICAgICAgICAgICAgICAgICAgYnkgWzRdCi0gICAgKHkgKyB5LnMpLm4gPSAgICAgICAgICAgICAgIGJ5ICM1Ci0gICAgeS5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHkubiA9IHgubgotICAgIHgubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB6IGFuZCB5IGFyZSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LnMgPSB6LnMgYnkgIzIKLSAgICB4Lm4gKyB6LnMKLQotUGx1Z2dpbmcgdGhhdCBiYWNrIGludG8gWzZdIGdpdmVzCi0KLSAgICBkaWZmID0KLSAgICB4Lm4gLSAoKHgubiArIHoucykgLSB6Lm8pID0gICAgIGV4cGFuZGluZwotICAgIHgubiAtIHgubiAtIHoucyArIHoubyA9ICAgICAgICAgY2FuY2VsbGluZwotICAgIC0gei5zICsgei5vID0gICAgICAgICAgICAgICAgICAgYnkgIzIKLSAgICB6LmQKLQotU28gZGlmZiA9IHouZC4KLQotSWYgWzVdIGlzIHRydWUgbm93LCBkaWZmID0gMCwgc28gei5kID0gMCB0b28sIGFuZCB3ZSBoYXZlIHRoZSBzdGFuZGFyZC10aW1lCi1zcGVsbGluZyB3ZSB3YW50ZWQgaW4gdGhlIGVuZGNhc2UgZGVzY3JpYmVkIGFib3ZlLiAgV2UncmUgZG9uZS4gIENvbnRyYXJpbHksCi1pZiB6LmQgPSAwLCB0aGVuIHdlIGhhdmUgYSBVVEMgZXF1aXZhbGVudCwgYW5kIGFyZSBhbHNvIGRvbmUuCi0KLUlmIFs1XSBpcyBub3QgdHJ1ZSBub3csIGRpZmYgPSB6LmQgIT0gMCwgYW5kIHouZCBpcyB0aGUgb2Zmc2V0IHdlIG5lZWQgdG8KLWFkZCB0byB6IChpbiBlZmZlY3QsIHogaXMgaW4gdHoncyBzdGFuZGFyZCB0aW1lLCBhbmQgd2UgbmVlZCB0byBzaGlmdCB0aGUKLWxvY2FsIGNsb2NrIGludG8gdHoncyBkYXlsaWdodCB0aW1lKS4KLQotTGV0Ci0KLSAgICB6JyA9IHogKyB6LmQgPSB6ICsgZGlmZiAgICAgICAgICAgICAgICAgICAgIFs3XQotCi1hbmQgd2UgY2FuIGFnYWluIGFzayB3aGV0aGVyCi0KLSAgICB6Jy5uIC0geicubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4XQotCi1JZiBzbywgd2UncmUgZG9uZS4gIElmIG5vdCwgdGhlIHR6aW5mbyBjbGFzcyBpcyBpbnNhbmUsIGFjY29yZGluZyB0byB0aGUKLWFzc3VtcHRpb25zIHdlJ3ZlIG1hZGUuICBUaGlzIGFsc28gcmVxdWlyZXMgYSBiaXQgb2YgcHJvb2YuICBBcyBiZWZvcmUsIGxldCdzCi1jb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs4XSAoYW5kIHNraXBwaW5nIHNvbWUgb2YKLXRoZSBqdXN0aWZpY2F0aW9ucyBmb3IgdGhlIGtpbmRzIG9mIHN1YnN0aXR1dGlvbnMgd2UndmUgZG9uZSBzZXZlcmFsIHRpbWVzCi1hbHJlYWR5KToKLQotICAgIGRpZmYnID0geC5uIC0gKHonLm4gLSB6Jy5vKSA9ICAgICAgICAgICByZXBsYWNpbmcgeicubiB2aWEgWzddCi0gICAgICAgICAgICB4Lm4gIC0gKHoubiArIGRpZmYgLSB6Jy5vKSA9ICAgIHJlcGxhY2luZyBkaWZmIHZpYSBbNl0KLSAgICAgICAgICAgIHgubiAtICh6Lm4gKyB4Lm4gLSAoei5uIC0gei5vKSAtIHonLm8pID0KLSAgICAgICAgICAgIHgubiAtIHoubiAtIHgubiArIHoubiAtIHoubyArIHonLm8gPSAgICBjYW5jZWwgeC5uCi0gICAgICAgICAgICAtIHoubiArIHoubiAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgY2FuY2VsIHoubgotICAgICAgICAgICAgLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgICAgICAgICAgIzEgdHdpY2UKLSAgICAgICAgICAgIC16LnMgLSB6LmQgKyB6Jy5zICsgeicuZCA9ICAgICAgICAgIHogYW5kIHonIGhhdmUgc2FtZSB0emluZm8KLSAgICAgICAgICAgIHonLmQgLSB6LmQKLQotU28geicgaXMgVVRDLWVxdWl2YWxlbnQgdG8geCBpZmYgeicuZCA9IHouZCBhdCB0aGlzIHBvaW50LiAgSWYgdGhleSBhcmUgZXF1YWwsCi13ZSd2ZSBmb3VuZCB0aGUgVVRDLWVxdWl2YWxlbnQgc28gYXJlIGRvbmUuICBJbiBmYWN0LCB3ZSBzdG9wIHdpdGggWzddIGFuZAotcmV0dXJuIHonLCBub3QgYm90aGVyaW5nIHRvIGNvbXB1dGUgeicuZC4KLQotSG93IGNvdWxkIHouZCBhbmQgeidkIGRpZmZlcj8gIHonID0geiArIHouZCBbN10sIHNvIG1lcmVseSBtb3ZpbmcgeicgYnkKLWEgZHN0KCkgb2Zmc2V0LCBhbmQgc3RhcnRpbmcgKmZyb20qIGEgdGltZSBhbHJlYWR5IGluIERTVCAod2Uga25vdyB6LmQgIT0gMCksCi13b3VsZCBoYXZlIHRvIGNoYW5nZSB0aGUgcmVzdWx0IGRzdCgpIHJldHVybnM6ICB3ZSBzdGFydCBpbiBEU1QsIGFuZCBtb3ZpbmcKLWEgbGl0dGxlIGZ1cnRoZXIgaW50byBpdCB0YWtlcyB1cyBvdXQgb2YgRFNULgotCi1UaGVyZSBpc24ndCBhIHNhbmUgY2FzZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4uICBUaGUgY2xvc2VzdCBpdCBnZXRzIGlzIGF0Ci10aGUgZW5kIG9mIERTVCwgd2hlcmUgdGhlcmUncyBhbiBob3VyIGluIFVUQyB3aXRoIG5vIHNwZWxsaW5nIGluIGEgaHlicmlkCi10emluZm8gY2xhc3MuICBJbiBVUyBFYXN0ZXJuLCB0aGF0J3MgNTpNTSBVVEMgPSAwOk1NIEVTVCA9IDE6TU0gRURULiAgRHVyaW5nCi10aGF0IGhvdXIsIG9uIGFuIEVhc3Rlcm4gY2xvY2sgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lICg2Ok1NCi1VVEMpIGJlY2F1c2UgdGhlIGRvY3MgaW5zaXN0IG9uIHRoYXQsIGJ1dCAwOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIGRheWxpZ2h0Ci10aW1lICg0Ok1NIFVUQykuICBUaGVyZSBpcyBubyBsb2NhbCB0aW1lIG1hcHBpbmcgdG8gNTpNTSBVVEMuICBUaGUgbG9jYWwKLWNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAgYWdhaW4sIGFuZCByZXBlYXRzIHRoZSAxOk1NIGhvdXIgaW4KLXN0YW5kYXJkIHRpbWUuICBTaW5jZSB0aGF0J3Mgd2hhdCB0aGUgbG9jYWwgY2xvY2sgKmRvZXMqLCB3ZSB3YW50IHRvIG1hcCBib3RoCi1VVEMgaG91cnMgNTpNTSBhbmQgNjpNTSB0byAxOk1NIEVhc3Rlcm4uICBUaGUgcmVzdWx0IGlzIGFtYmlndW91cwotaW4gbG9jYWwgdGltZSwgYnV0IHNvIGl0IGdvZXMgLS0gaXQncyB0aGUgd2F5IHRoZSBsb2NhbCBjbG9jayB3b3Jrcy4KLQotV2hlbiB4ID0gNTpNTSBVVEMgaXMgdGhlIGlucHV0IHRvIHRoaXMgYWxnb3JpdGhtLCB4Lm89MCwgeS5vPS01IGFuZCB5LmQ9MCwKLXNvIHo9MDpNTS4gIHouZD02MCAobWludXRlcykgdGhlbiwgc28gWzVdIGRvZXNuJ3QgaG9sZCBhbmQgd2Uga2VlcCBnb2luZy4KLXonID0geiArIHouZCA9IDE6TU0gdGhlbiwgYW5kIHonLmQ9MCwgYW5kIHonLmQgLSB6LmQgPSAtNjAgIT0gMCBzbyBbOF0KLShjb3JyZWN0bHkpIGNvbmNsdWRlcyB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCB0byB4LgotCi1CZWNhdXNlIHdlIGtub3cgei5kIHNhaWQgeiB3YXMgaW4gZGF5bGlnaHQgdGltZSAoZWxzZSBbNV0gd291bGQgaGF2ZSBoZWxkIGFuZAotd2Ugd291bGQgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgd2Uga25vdyB6LmQgIT0geicuZCAoZWxzZSBbOF0gd291bGQgaGF2ZSBoZWxkCi1hbmQgd2UgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgdGhlcmUgYXJlIG9ubHkgMiBwb3NzaWJsZSB2YWx1ZXMgZHN0KCkgY2FuCi1yZXR1cm4gaW4gRWFzdGVybiwgaXQgZm9sbG93cyB0aGF0IHonLmQgbXVzdCBiZSAwICh3aGljaCBpdCBpcyBpbiB0aGUgZXhhbXBsZSwKLWJ1dCB0aGUgcmVhc29uaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBleGFtcGxlIC0tIGl0IGRlcGVuZHMgb24gdGhlcmUgYmVpbmcKLXR3byBwb3NzaWJsZSBkc3QoKSBvdXRjb21lcywgb25lIHplcm8gYW5kIHRoZSBvdGhlciBub24temVybykuICBUaGVyZWZvcmUKLXonIG11c3QgYmUgaW4gc3RhbmRhcmQgdGltZSwgYW5kIGlzIHRoZSBzcGVsbGluZyB3ZSB3YW50IGluIHRoaXMgY2FzZS4KLQotTm90ZSBhZ2FpbiB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCBhcyBmYXIgYXMgdGhlIGh5YnJpZCB0emluZm8gY2xhc3MgaXMKLWNvbmNlcm5lZCAoYmVjYXVzZSBpdCB0YWtlcyB6JyBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lIHJhdGhlciB0aGFuIHRoZQotZGF5bGlnaHQgdGltZSB3ZSBpbnRlbmQgaGVyZSksIGJ1dCByZXR1cm5pbmcgaXQgZ2l2ZXMgdGhlIHJlYWwtbGlmZSAibG9jYWwKLWNsb2NrIHJlcGVhdHMgYW4gaG91ciIgYmVoYXZpb3Igd2hlbiBtYXBwaW5nIHRoZSAidW5zcGVsbGFibGUiIFVUQyBob3VyIGludG8KLXR6LgotCi1XaGVuIHRoZSBpbnB1dCBpcyA2Ok1NLCB6PTE6TU0gYW5kIHouZD0wLCBhbmQgd2Ugc3RvcCBhdCBvbmNlLCBhZ2FpbiB3aXRoCi10aGUgMTpNTSBzdGFuZGFyZCB0aW1lIHNwZWxsaW5nIHdlIHdhbnQuCi0KLVNvIGhvdyBjYW4gdGhpcyBicmVhaz8gIE9uZSBvZiB0aGUgYXNzdW1wdGlvbnMgbXVzdCBiZSB2aW9sYXRlZC4gIFR3bwotcG9zc2liaWxpdGllczoKLQotMSkgWzJdIGVmZmVjdGl2ZWx5IHNheXMgdGhhdCB5LnMgaXMgaW52YXJpYW50IGFjcm9zcyBhbGwgeSBiZWxvbmcgdG8gYSBnaXZlbgotICAgdGltZSB6b25lLiAgVGhpcyBpc24ndCB0cnVlIGlmLCBmb3IgcG9saXRpY2FsIHJlYXNvbnMgb3IgY29udGluZW50YWwgZHJpZnQsCi0gICBhIHJlZ2lvbiBkZWNpZGVzIHRvIGNoYW5nZSBpdHMgYmFzZSBvZmZzZXQgZnJvbSBVVEMuCi0KLTIpIFRoZXJlIG1heSBiZSB2ZXJzaW9ucyBvZiAiZG91YmxlIGRheWxpZ2h0IiB0aW1lIHdoZXJlIHRoZSB0YWlsIGVuZCBvZgotICAgdGhlIGFuYWx5c2lzIGdpdmVzIHVwIGEgc3RlcCB0b28gZWFybHkuICBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGF0Ci0gICBlbm91Z2ggdG8gc2F5LgotCi1JbiBhbnkgY2FzZSwgaXQncyBjbGVhciB0aGF0IHRoZSBkZWZhdWx0IGZyb211dGMoKSBpcyBzdHJvbmcgZW5vdWdoIHRvIGhhbmRsZQotImFsbW9zdCBhbGwiIHRpbWUgem9uZXM6ICBzbyBsb25nIGFzIHRoZSBzdGFuZGFyZCBvZmZzZXQgaXMgaW52YXJpYW50LCBpdAotZG9lc24ndCBtYXR0ZXIgaWYgZGF5bGlnaHQgdGltZSB0cmFuc2l0aW9uIHBvaW50cyBjaGFuZ2UgZnJvbSB5ZWFyIHRvIHllYXIsIG9yCi1pZiBkYXlsaWdodCB0aW1lIGlzIHNraXBwZWQgaW4gc29tZSB5ZWFyczsgaXQgZG9lc24ndCBtYXR0ZXIgaG93IGxhcmdlIG9yCi1zbWFsbCBkc3QoKSBtYXkgZ2V0IHdpdGhpbiBpdHMgYm91bmRzOyBhbmQgaXQgZG9lc24ndCBldmVuIG1hdHRlciBpZiBzb21lCi1wZXJ2ZXJzZSB0aW1lIHpvbmUgcmV0dXJucyBhIG5lZ2F0aXZlIGRzdCgpKS4gIFNvIGEgYnJlYWtpbmcgY2FzZSBtdXN0IGJlCi1wcmV0dHkgYml6YXJyZSwgYW5kIGEgdHppbmZvIHN1YmNsYXNzIGNhbiBvdmVycmlkZSBmcm9tdXRjKCkgaWYgaXQgaXMuCi0iIiIKIHRyeToKICAgICBmcm9tIF9kYXRldGltZSBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgpkaWZmIC0tZ2l0IGEvTGliL2RibS9fX2luaXRfXy5weSBiL0xpYi9kYm0vX19pbml0X18ucHkKaW5kZXggYTc4M2ZkZS4uNWY0NjY0YSAxMDA2NDQKLS0tIGEvTGliL2RibS9fX2luaXRfXy5weQorKysgYi9MaWIvZGJtL19faW5pdF9fLnB5CkBAIC00Miw3ICs0Miw3IEBACiBfZGVmYXVsdG1vZCA9IE5vbmUKIF9tb2R1bGVzID0ge30KIAotZXJyb3IgPSAoZXJyb3IsIElPRXJyb3IpCitlcnJvciA9IChlcnJvciwgT1NFcnJvcikKIAogdHJ5OgogICAgIGZyb20gZGJtIGltcG9ydCBuZGJtCkBAIC0xMTEsMTIgKzExMSwxMCBAQAogICAgIHRyeToKICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLnBhZyIsICJyYiIpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAjIGRibSBsaW5rZWQgd2l0aCBnZGJtIG9uIE9TLzIgZG9lc24ndCBoYXZlIC5kaXIgZmlsZQotICAgICAgICBpZiBub3QgKG5kYm0ubGlicmFyeSA9PSAiR05VIGdkYm0iIGFuZCBzeXMucGxhdGZvcm0gPT0gIm9zMmVteCIpOgotICAgICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLmRpciIsICJyYiIpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLmRpciIsICJyYiIpCisgICAgICAgIGYuY2xvc2UoKQogICAgICAgICByZXR1cm4gImRibS5uZGJtIgotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIHNvbWUgZGJtIGVtdWxhdGlvbnMgYmFzZWQgb24gQmVya2VsZXkgREIgZ2VuZXJhdGUgYSAuZGIgZmlsZQogICAgICAgICAjIHNvbWUgZG8gbm90LCBidXQgdGhleSBzaG91bGQgYmUgY2F1Z2h0IGJ5IHRoZSBic2QgY2hlY2tzCiAgICAgICAgIHRyeToKQEAgLTEyOSw3ICsxMjcsNyBAQAogICAgICAgICAgICAgICAgIGQgPSBuZGJtLm9wZW4oZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuICJkYm0ubmRibSIKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyBDaGVjayBmb3IgZHVtYmRibSBuZXh0IC0tIHRoaXMgaGFzIGEgLmRpciBhbmQgYSAuZGF0IGZpbGUKQEAgLTE0NiwxMyArMTQ0LDEzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICJkYm0uZHVtYiIKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKIAogICAgICMgU2VlIGlmIHRoZSBmaWxlIGV4aXN0cywgcmV0dXJuIE5vbmUgaWYgbm90CiAgICAgdHJ5OgogICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSwgInJiIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgICMgUmVhZCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgLS0gdGhlIG1hZ2ljIG51bWJlcgpkaWZmIC0tZ2l0IGEvTGliL2RibS9kdW1iLnB5IGIvTGliL2RibS9kdW1iLnB5CmluZGV4IGNmYjkxMjMuLjhmNDhhYWQgMTAwNjQ0Ci0tLSBhL0xpYi9kYm0vZHVtYi5weQorKysgYi9MaWIvZGJtL2R1bWIucHkKQEAgLTI5LDcgKzI5LDcgQEAKIAogX0JMT0NLU0laRSA9IDUxMgogCi1lcnJvciA9IElPRXJyb3IKK2Vycm9yID0gT1NFcnJvcgogCiBjbGFzcyBfRGF0YWJhc2UoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgogCkBAIC02NywxMCArNjcsMTEgQEAKICAgICAgICAgIyBNb2QgYnkgSmFjazogY3JlYXRlIGRhdGEgZmlsZSBpZiBuZWVkZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyJywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIGYgPSBfaW8ub3BlbihzZWxmLl9kYXRmaWxlLCAndycsIGVuY29kaW5nPSJMYXRpbi0xIikKLSAgICAgICAgICAgIHNlbGYuX2NobW9kKHNlbGYuX2RhdGZpbGUpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHdpdGggX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3cnLCBlbmNvZGluZz0iTGF0aW4tMSIpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5fY2htb2Qoc2VsZi5fZGF0ZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLl91cGRhdGUoKQogCiAgICAgIyBSZWFkIGRpcmVjdG9yeSBmaWxlIGludG8gdGhlIGluLW1lbW9yeSBpbmRleCBkaWN0LgpAQCAtNzgsMTUgKzc5LDE1IEBACiAgICAgICAgIHNlbGYuX2luZGV4ID0ge30KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICdyJywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCi0gICAgICAgICAgICAgICAga2V5LCBwb3NfYW5kX3Npel9wYWlyID0gZXZhbChsaW5lKQotICAgICAgICAgICAgICAgIGtleSA9IGtleS5lbmNvZGUoJ0xhdGluLTEnKQotICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4W2tleV0gPSBwb3NfYW5kX3Npel9wYWlyCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBrZXksIHBvc19hbmRfc2l6X3BhaXIgPSBldmFsKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5lbmNvZGUoJ0xhdGluLTEnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleFtrZXldID0gcG9zX2FuZF9zaXpfcGFpcgogCiAgICAgIyBXcml0ZSB0aGUgaW5kZXggZGljdCB0byB0aGUgZGlyZWN0b3J5IGZpbGUuICBUaGUgb3JpZ2luYWwgZGlyZWN0b3J5CiAgICAgIyBmaWxlIChpZiBhbnkpIGlzIHJlbmFtZWQgd2l0aCBhIC5iYWsgZXh0ZW5zaW9uIGZpcnN0LiAgSWYgYSAuYmFrCkBAIC0xMDAsMzIgKzEwMSwzNiBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnVubGluayhzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnJlbmFtZShzZWxmLl9kaXJmaWxlLCBzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGYgPSBzZWxmLl9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kaXJmaWxlKQotICAgICAgICBmb3Iga2V5LCBwb3NfYW5kX3Npel9wYWlyIGluIHNlbGYuX2luZGV4Lml0ZW1zKCk6Ci0gICAgICAgICAgICAjIFVzZSBMYXRpbi0xIHNpbmNlIGl0IGhhcyBubyBxdWFsbXMgd2l0aCBhbnkgdmFsdWUgaW4gYW55Ci0gICAgICAgICAgICAjIHBvc2l0aW9uOyBVVEYtOCwgdGhvdWdoLCBkb2VzIGNhcmUgc29tZXRpbWVzLgotICAgICAgICAgICAgZi53cml0ZSgiJXIsICVyXG4iICUgKGtleS5kZWNvZGUoJ0xhdGluLTEnKSwgcG9zX2FuZF9zaXpfcGFpcikpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ3cnLCBlbmNvZGluZz0iTGF0aW4tMSIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kaXJmaWxlKQorICAgICAgICAgICAgZm9yIGtleSwgcG9zX2FuZF9zaXpfcGFpciBpbiBzZWxmLl9pbmRleC5pdGVtcygpOgorICAgICAgICAgICAgICAgICMgVXNlIExhdGluLTEgc2luY2UgaXQgaGFzIG5vIHF1YWxtcyB3aXRoIGFueSB2YWx1ZSBpbiBhbnkKKyAgICAgICAgICAgICAgICAjIHBvc2l0aW9uOyBVVEYtOCwgdGhvdWdoLCBkb2VzIGNhcmUgc29tZXRpbWVzLgorICAgICAgICAgICAgICAgIGVudHJ5ID0gIiVyLCAlclxuIiAlIChrZXkuZGVjb2RlKCdMYXRpbi0xJyksIHBvc19hbmRfc2l6X3BhaXIpCisgICAgICAgICAgICAgICAgZi53cml0ZShlbnRyeSkKIAogICAgIHN5bmMgPSBfY29tbWl0CiAKKyAgICBkZWYgX3ZlcmlmeV9vcGVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9pbmRleCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IoJ0RCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQnKQorCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgogICAgICAgICAgICAga2V5ID0ga2V5LmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLl92ZXJpZnlfb3BlbigpCiAgICAgICAgIHBvcywgc2l6ID0gc2VsZi5faW5kZXhba2V5XSAgICAgIyBtYXkgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYicpCi0gICAgICAgIGYuc2Vlayhwb3MpCi0gICAgICAgIGRhdCA9IGYucmVhZChzaXopCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgZGF0ID0gZi5yZWFkKHNpeikKICAgICAgICAgcmV0dXJuIGRhdAogCiAgICAgIyBBcHBlbmQgdmFsIHRvIHRoZSBkYXRhIGZpbGUsIHN0YXJ0aW5nIGF0IGEgX0JMT0NLU0laRS1hbGlnbmVkCkBAIC0xMzMsMTQgKzEzOCwxMyBAQAogICAgICMgdG8gZ2V0IHRvIGFuIGFsaWduZWQgb2Zmc2V0LiAgUmV0dXJuIHBhaXIKICAgICAjICAgICAoc3RhcnRpbmcgb2Zmc2V0IG9mIHZhbCwgbGVuKHZhbCkpCiAgICAgZGVmIF9hZGR2YWwoc2VsZiwgdmFsKToKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYisnKQotICAgICAgICBmLnNlZWsoMCwgMikKLSAgICAgICAgcG9zID0gaW50KGYudGVsbCgpKQotICAgICAgICBucG9zID0gKChwb3MgKyBfQkxPQ0tTSVpFIC0gMSkgLy8gX0JMT0NLU0laRSkgKiBfQkxPQ0tTSVpFCi0gICAgICAgIGYud3JpdGUoYidcMCcqKG5wb3MtcG9zKSkKLSAgICAgICAgcG9zID0gbnBvcwotICAgICAgICBmLndyaXRlKHZhbCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3JiKycpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsoMCwgMikKKyAgICAgICAgICAgIHBvcyA9IGludChmLnRlbGwoKSkKKyAgICAgICAgICAgIG5wb3MgPSAoKHBvcyArIF9CTE9DS1NJWkUgLSAxKSAvLyBfQkxPQ0tTSVpFKSAqIF9CTE9DS1NJWkUKKyAgICAgICAgICAgIGYud3JpdGUoYidcMCcqKG5wb3MtcG9zKSkKKyAgICAgICAgICAgIHBvcyA9IG5wb3MKKyAgICAgICAgICAgIGYud3JpdGUodmFsKQogICAgICAgICByZXR1cm4gKHBvcywgbGVuKHZhbCkpCiAKICAgICAjIFdyaXRlIHZhbCB0byB0aGUgZGF0YSBmaWxlLCBzdGFydGluZyBhdCBvZmZzZXQgcG9zLiAgVGhlIGNhbGxlcgpAQCAtMTQ4LDEwICsxNTIsOSBAQAogICAgICMgcG9zIHRvIGhvbGQgdmFsLCB3aXRob3V0IG92ZXJ3cml0aW5nIHNvbWUgb3RoZXIgdmFsdWUuICBSZXR1cm4KICAgICAjIHBhaXIgKHBvcywgbGVuKHZhbCkpLgogICAgIGRlZiBfc2V0dmFsKHNlbGYsIHBvcywgdmFsKToKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYisnKQotICAgICAgICBmLnNlZWsocG9zKQotICAgICAgICBmLndyaXRlKHZhbCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3JiKycpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgZi53cml0ZSh2YWwpCiAgICAgICAgIHJldHVybiAocG9zLCBsZW4odmFsKSkKIAogICAgICMga2V5IGlzIGEgbmV3IGtleSB3aG9zZSBhc3NvY2lhdGVkIHZhbHVlIHN0YXJ0cyBpbiB0aGUgZGF0YSBmaWxlCkBAIC0xNTksMTAgKzE2Miw5IEBACiAgICAgIyB0aGUgaW4tbWVtb3J5IGluZGV4IGRpY3QsIGFuZCBhcHBlbmQgb25lIHRvIHRoZSBkaXJlY3RvcnkgZmlsZS4KICAgICBkZWYgX2FkZGtleShzZWxmLCBrZXksIHBvc19hbmRfc2l6X3BhaXIpOgogICAgICAgICBzZWxmLl9pbmRleFtrZXldID0gcG9zX2FuZF9zaXpfcGFpcgotICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ2EnLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIHNlbGYuX2NobW9kKHNlbGYuX2RpcmZpbGUpCi0gICAgICAgIGYud3JpdGUoIiVyLCAlclxuIiAlIChrZXkuZGVjb2RlKCJMYXRpbi0xIiksIHBvc19hbmRfc2l6X3BhaXIpKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBfaW8ub3BlbihzZWxmLl9kaXJmaWxlLCAnYScsIGVuY29kaW5nPSJMYXRpbi0xIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuX2NobW9kKHNlbGYuX2RpcmZpbGUpCisgICAgICAgICAgICBmLndyaXRlKCIlciwgJXJcbiIgJSAoa2V5LmRlY29kZSgiTGF0aW4tMSIpLCBwb3NfYW5kX3Npel9wYWlyKSkKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgpAQCAtMTczLDYgKzE3NSw3IEBACiAgICAgICAgICAgICB2YWwgPSB2YWwuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ2YWx1ZXMgbXVzdCBiZSBieXRlcyBvciBzdHJpbmdzIikKKyAgICAgICAgc2VsZi5fdmVyaWZ5X29wZW4oKQogICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuX2luZGV4OgogICAgICAgICAgICAgc2VsZi5fYWRka2V5KGtleSwgc2VsZi5fYWRkdmFsKHZhbCkpCiAgICAgICAgIGVsc2U6CkBAIC0yMDAsNiArMjAzLDcgQEAKICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuX3ZlcmlmeV9vcGVuKCkKICAgICAgICAgIyBUaGUgYmxvY2tzIHVzZWQgYnkgdGhlIGFzc29jaWF0ZWQgdmFsdWUgYXJlIGxvc3QuCiAgICAgICAgIGRlbCBzZWxmLl9pbmRleFtrZXldCiAgICAgICAgICMgWFhYIEl0J3MgdW5jbGVhciB3aHkgd2UgZG8gYSBfY29tbWl0KCkgaGVyZSAodGhlIGNvZGUgYWx3YXlzCkBAIC0yMDksMjIgKzIxMywzOCBAQAogICAgICAgICBzZWxmLl9jb21taXQoKQogCiAgICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBsaXN0KHNlbGYuX2luZGV4LmtleXMoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5faW5kZXgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBlcnJvcignREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCcpIGZyb20gTm9uZQogCiAgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLl92ZXJpZnlfb3BlbigpCiAgICAgICAgIHJldHVybiBbKGtleSwgc2VsZltrZXldKSBmb3Iga2V5IGluIHNlbGYuX2luZGV4LmtleXMoKV0KIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5faW5kZXgKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9pbmRleAorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgaWYgc2VsZi5faW5kZXggaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcignREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCcpIGZyb20gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgotICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9pbmRleC5rZXlzKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX2luZGV4KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IoJ0RCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQnKSBmcm9tIE5vbmUKICAgICBfX2l0ZXJfXyA9IGl0ZXJrZXlzCiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9pbmRleCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9pbmRleCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yKCdEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkJykgZnJvbSBOb25lCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuX2NvbW1pdCgpCkBAIC0yMzYsNiArMjU2LDEyIEBACiAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fb3MsICdjaG1vZCcpOgogICAgICAgICAgICAgc2VsZi5fb3MuY2htb2QoZmlsZSwgc2VsZi5fbW9kZSkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogCiBkZWYgb3BlbihmaWxlLCBmbGFnPU5vbmUsIG1vZGU9MG82NjYpOgogICAgICIiIk9wZW4gdGhlIGRhdGFiYXNlIGZpbGUsIGZpbGVuYW1lLCBhbmQgcmV0dXJuIGNvcnJlc3BvbmRpbmcgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvTGliL2RlY2ltYWwucHkgYi9MaWIvZGVjaW1hbC5weQppbmRleCA5ZjM3ZTRmLi5iMjU0ZjljIDEwMDY0NAotLS0gYS9MaWIvZGVjaW1hbC5weQorKysgYi9MaWIvZGVjaW1hbC5weQpAQCAtMTE2LDYgKzExNiw5IEBACiAgICAgIyBUd28gbWFqb3IgY2xhc3NlcwogICAgICdEZWNpbWFsJywgJ0NvbnRleHQnLAogCisgICAgIyBOYW1lZCB0dXBsZSByZXByZXNlbnRhdGlvbgorICAgICdEZWNpbWFsVHVwbGUnLAorCiAgICAgIyBDb250ZXh0cwogICAgICdEZWZhdWx0Q29udGV4dCcsICdCYXNpY0NvbnRleHQnLCAnRXh0ZW5kZWRDb250ZXh0JywKIApAQCAtMTI0LDYgKzEyNyw5IEBACiAgICAgJ0luZXhhY3QnLCAnUm91bmRlZCcsICdTdWJub3JtYWwnLCAnT3ZlcmZsb3cnLCAnVW5kZXJmbG93JywKICAgICAnRmxvYXRPcGVyYXRpb24nLAogCisgICAgIyBFeGNlcHRpb25hbCBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBJbnZhbGlkT3BlcmF0aW9uCisgICAgJ0RpdmlzaW9uSW1wb3NzaWJsZScsICdJbnZhbGlkQ29udGV4dCcsICdDb252ZXJzaW9uU3ludGF4JywgJ0RpdmlzaW9uVW5kZWZpbmVkJywKKwogICAgICMgQ29uc3RhbnRzIGZvciB1c2UgaW4gc2V0dGluZyB1cCBjb250ZXh0cwogICAgICdST1VORF9ET1dOJywgJ1JPVU5EX0hBTEZfVVAnLCAnUk9VTkRfSEFMRl9FVkVOJywgJ1JPVU5EX0NFSUxJTkcnLAogICAgICdST1VORF9GTE9PUicsICdST1VORF9VUCcsICdST1VORF9IQUxGX0RPV04nLCAnUk9VTkRfMDVVUCcsCkBAIC0xNDAsOSArMTQ2LDggQEAKIAogX192ZXJzaW9uX18gPSAnMS43MCcgICAgIyBIaWdoZXN0IHZlcnNpb24gb2YgdGhlIHNwZWMgdGhpcyBjb21wbGllcyB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAjIFNlZSBodHRwOi8vc3BlbGVvdHJvdmUuY29tL2RlY2ltYWwvCi1fX2xpYm1wZGVjX3ZlcnNpb25fXyA9ICIyLjQuMCIgIyBjb21wYXRpYmxlIGxpYm1wZGVjIHZlcnNpb24KK19fbGlibXBkZWNfdmVyc2lvbl9fID0gIjIuNC4xIiAjIGNvbXBhdGlibGUgbGlibXBkZWMgdmVyc2lvbgogCi1pbXBvcnQgY29weSBhcyBfY29weQogaW1wb3J0IG1hdGggYXMgX21hdGgKIGltcG9ydCBudW1iZXJzIGFzIF9udW1iZXJzCiBpbXBvcnQgc3lzCkBAIC03MDQsOCArNzA5LDcgQEAKIAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvIERlY2ltYWwiICUgdmFsdWUpCiAKLSAgICAjIEBjbGFzc21ldGhvZCwgYnV0IEBkZWNvcmF0b3IgaXMgbm90IHZhbGlkIFB5dGhvbiAyLjMgc3ludGF4LCBzbwotICAgICMgZG9uJ3QgdXNlIGl0IChzZWUgbm90ZXMgb24gUHkyLjMgY29tcGF0aWJpbGl0eSBhdCB0b3Agb2YgZmlsZSkKKyAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZnJvbV9mbG9hdChjbHMsIGYpOgogICAgICAgICAiIiJDb252ZXJ0cyBhIGZsb2F0IHRvIGEgZGVjaW1hbCBudW1iZXIsIGV4YWN0bHkuCiAKQEAgLTc0NCw3ICs3NDgsNiBAQAogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIGNscyhyZXN1bHQpCi0gICAgZnJvbV9mbG9hdCA9IGNsYXNzbWV0aG9kKGZyb21fZmxvYXQpCiAKICAgICBkZWYgX2lzbmFuKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIG51bWJlciBpcyBub3QgYWN0dWFsbHkgb25lLgpAQCAtMzc3Miw2ICszNzc1LDggQEAKICAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKICAgICAgICAgICAgIHNpZ24gPSBfZm9ybWF0X3NpZ24oc2VsZi5fc2lnbiwgc3BlYykKICAgICAgICAgICAgIGJvZHkgPSBzdHIoc2VsZi5jb3B5X2FicygpKQorICAgICAgICAgICAgaWYgc3BlY1sndHlwZSddID09ICclJzoKKyAgICAgICAgICAgICAgICBib2R5ICs9ICclJwogICAgICAgICAgICAgcmV0dXJuIF9mb3JtYXRfYWxpZ24oc2lnbiwgYm9keSwgc3BlYykKIAogICAgICAgICAjIGEgdHlwZSBvZiBOb25lIGRlZmF1bHRzIHRvICdnJyBvciAnRycsIGRlcGVuZGluZyBvbiBjb250ZXh0CmRpZmYgLS1naXQgYS9MaWIvZGlmZmxpYi5weSBiL0xpYi9kaWZmbGliLnB5CmluZGV4IGYwYmZjYzUuLjdlYjQyYTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaWZmbGliLnB5CisrKyBiL0xpYi9kaWZmbGliLnB5CkBAIC0zMCw3ICszMCw2IEBACiAgICAgICAgICAgICdEaWZmZXInLCdJU19DSEFSQUNURVJfSlVOSycsICdJU19MSU5FX0pVTksnLCAnY29udGV4dF9kaWZmJywKICAgICAgICAgICAgJ3VuaWZpZWRfZGlmZicsICdIdG1sRGlmZicsICdNYXRjaCddCiAKLWltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGhlYXBxCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlIGFzIF9uYW1lZHR1cGxlCiAKQEAgLTMzNCwyMCArMzMzLDYgQEAKICAgICAgICAgICAgIGZvciBlbHQgaW4gcG9wdWxhcjogIyBkaXR0bzsgYXMgZmFzdCBmb3IgMSUgZGVsZXRpb24KICAgICAgICAgICAgICAgICBkZWwgYjJqW2VsdF0KIAotICAgIGRlZiBpc2JqdW5rKHNlbGYsIGl0ZW0pOgotICAgICAgICAiRGVwcmVjYXRlZDsgdXNlICdpdGVtIGluIFNlcXVlbmNlTWF0Y2hlcigpLmJqdW5rJy4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4oIidTZXF1ZW5jZU1hdGNoZXIoKS5pc2JqdW5rKGl0ZW0pJyBpcyBkZXByZWNhdGVkO1xuIgotICAgICAgICAgICAgICAgICAgICAgICJ1c2UgJ2l0ZW0gaW4gU01pbnN0YW5jZS5ianVuaycgaW5zdGVhZC4iLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5ianVuawotCi0gICAgZGVmIGlzYnBvcHVsYXIoc2VsZiwgaXRlbSk6Ci0gICAgICAgICJEZXByZWNhdGVkOyB1c2UgJ2l0ZW0gaW4gU2VxdWVuY2VNYXRjaGVyKCkuYnBvcHVsYXInLiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiJ1NlcXVlbmNlTWF0Y2hlcigpLmlzYnBvcHVsYXIoaXRlbSknIGlzIGRlcHJlY2F0ZWQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgInVzZSAnaXRlbSBpbiBTTWluc3RhbmNlLmJwb3B1bGFyJyBpbnN0ZWFkLiIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLmJwb3B1bGFyCi0KICAgICBkZWYgZmluZF9sb25nZXN0X21hdGNoKHNlbGYsIGFsbywgYWhpLCBibG8sIGJoaSk6CiAgICAgICAgICIiIkZpbmQgbG9uZ2VzdCBtYXRjaGluZyBibG9jayBpbiBhW2FsbzphaGldIGFuZCBiW2JsbzpiaGldLgogCkBAIC01MjYsOCArNTExLDggQEAKICAgICAgICAgICAgIG5vbl9hZGphY2VudC5hcHBlbmQoKGkxLCBqMSwgazEpKQogCiAgICAgICAgIG5vbl9hZGphY2VudC5hcHBlbmQoIChsYSwgbGIsIDApICkKLSAgICAgICAgc2VsZi5tYXRjaGluZ19ibG9ja3MgPSBub25fYWRqYWNlbnQKLSAgICAgICAgcmV0dXJuIG1hcChNYXRjaC5fbWFrZSwgc2VsZi5tYXRjaGluZ19ibG9ja3MpCisgICAgICAgIHNlbGYubWF0Y2hpbmdfYmxvY2tzID0gbGlzdChtYXAoTWF0Y2guX21ha2UsIG5vbl9hZGphY2VudCkpCisgICAgICAgIHJldHVybiBzZWxmLm1hdGNoaW5nX2Jsb2NrcwogCiAgICAgZGVmIGdldF9vcGNvZGVzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gbGlzdCBvZiA1LXR1cGxlcyBkZXNjcmliaW5nIGhvdyB0byB0dXJuIGEgaW50byBiLgpAQCAtOTIwLDggKzkwNSw3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vua25vd24gdGFnICVyJyAlICh0YWcsKSkKIAotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZzoKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIGcKIAogICAgIGRlZiBfZHVtcChzZWxmLCB0YWcsIHgsIGxvLCBoaSk6CiAgICAgICAgICIiIkdlbmVyYXRlIGNvbXBhcmlzb24gcmVzdWx0cyBmb3IgYSBzYW1lLXRhZ2dlZCByYW5nZS4iIiIKQEAgLTk0MCw4ICs5MjQsNyBAQAogICAgICAgICAgICAgc2Vjb25kID0gc2VsZi5fZHVtcCgnKycsIGIsIGJsbywgYmhpKQogCiAgICAgICAgIGZvciBnIGluIGZpcnN0LCBzZWNvbmQ6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBnOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9mYW5jeV9yZXBsYWNlKHNlbGYsIGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6CiAgICAgICAgIHIiIiIKQEAgLTk5NSw4ICs5NzgsNyBAQAogICAgICAgICAgICAgIyBubyBub24taWRlbnRpY2FsICJwcmV0dHkgY2xvc2UiIHBhaXIKICAgICAgICAgICAgIGlmIGVxaSBpcyBOb25lOgogICAgICAgICAgICAgICAgICMgbm8gaWRlbnRpY2FsIHBhaXIgZWl0aGVyIC0tIHRyZWF0IGl0IGFzIGEgc3RyYWlnaHQgcmVwbGFjZQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3BsYWluX3JlcGxhY2UoYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcGxhaW5fcmVwbGFjZShhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAjIG5vIGNsb3NlIHBhaXIsIGJ1dCBhbiBpZGVudGljYWwgcGFpciAtLSBzeW5jaCB1cCBvbiB0aGF0CiAgICAgICAgICAgICBiZXN0X2ksIGJlc3RfaiwgYmVzdF9yYXRpbyA9IGVxaSwgZXFqLCAxLjAKQEAgLTEwMDgsOCArOTkwLDcgQEAKICAgICAgICAgIyBpZGVudGljYWwKIAogICAgICAgICAjIHB1bXAgb3V0IGRpZmZzIGZyb20gYmVmb3JlIHRoZSBzeW5jaCBwb2ludAotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYWxvLCBiZXN0X2ksIGIsIGJsbywgYmVzdF9qKToKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYWxvLCBiZXN0X2ksIGIsIGJsbywgYmVzdF9qKQogCiAgICAgICAgICMgZG8gaW50cmFsaW5lIG1hcmtpbmcgb24gdGhlIHN5bmNoIHBhaXIKICAgICAgICAgYWVsdCwgYmVsdCA9IGFbYmVzdF9pXSwgYltiZXN0X2pdCkBAIC0xMDMxLDE1ICsxMDEyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGJ0YWdzICs9ICcgJyAqIGxiCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biB0YWcgJXInICUgKHRhZywpKQotICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fcWZvcm1hdChhZWx0LCBiZWx0LCBhdGFncywgYnRhZ3MpOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcWZvcm1hdChhZWx0LCBiZWx0LCBhdGFncywgYnRhZ3MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIHRoZSBzeW5jaCBwYWlyIGlzIGlkZW50aWNhbAogICAgICAgICAgICAgeWllbGQgJyAgJyArIGFlbHQKIAogICAgICAgICAjIHB1bXAgb3V0IGRpZmZzIGZyb20gYWZ0ZXIgdGhlIHN5bmNoIHBvaW50Ci0gICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBiZXN0X2krMSwgYWhpLCBiLCBiZXN0X2orMSwgYmhpKToKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYmVzdF9pKzEsIGFoaSwgYiwgYmVzdF9qKzEsIGJoaSkKIAogICAgIGRlZiBfZmFuY3lfaGVscGVyKHNlbGYsIGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6CiAgICAgICAgIGcgPSBbXQpAQCAtMTA1MSw4ICsxMDMwLDcgQEAKICAgICAgICAgZWxpZiBibG8gPCBiaGk6CiAgICAgICAgICAgICBnID0gc2VsZi5fZHVtcCgnKycsIGIsIGJsbywgYmhpKQogCi0gICAgICAgIGZvciBsaW5lIGluIGc6Ci0gICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9xZm9ybWF0KHNlbGYsIGFsaW5lLCBibGluZSwgYXRhZ3MsIGJ0YWdzKToKICAgICAgICAgciIiIgpkaWZmIC0tZ2l0IGEvTGliL2Rpcy5weSBiL0xpYi9kaXMucHkKaW5kZXggNTQzZmRjNy4uODFjYmU3ZiAxMDA2NDQKLS0tIGEvTGliL2Rpcy5weQorKysgYi9MaWIvZGlzLnB5CkBAIC0yLDEyICsyLDE1IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KIAogZnJvbSBvcGNvZGUgaW1wb3J0ICoKIGZyb20gb3Bjb2RlIGltcG9ydCBfX2FsbF9fIGFzIF9vcGNvZGVzX2FsbAogCiBfX2FsbF9fID0gWyJjb2RlX2luZm8iLCAiZGlzIiwgImRpc2Fzc2VtYmxlIiwgImRpc3RiIiwgImRpc2NvIiwKLSAgICAgICAgICAgImZpbmRsaW5lc3RhcnRzIiwgImZpbmRsYWJlbHMiLCAic2hvd19jb2RlIl0gKyBfb3Bjb2Rlc19hbGwKKyAgICAgICAgICAgImZpbmRsaW5lc3RhcnRzIiwgImZpbmRsYWJlbHMiLCAic2hvd19jb2RlIiwKKyAgICAgICAgICAgImdldF9pbnN0cnVjdGlvbnMiLCAiSW5zdHJ1Y3Rpb24iLCAiQnl0ZWNvZGUiXSArIF9vcGNvZGVzX2FsbAogZGVsIF9vcGNvZGVzX2FsbAogCiBfaGF2ZV9jb2RlID0gKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuQ29kZVR5cGUsIHR5cGUpCkBAIC0yNSwxNCArMjgsMTQgQEAKICAgICAgICAgYyA9IGNvbXBpbGUoc291cmNlLCBuYW1lLCAnZXhlYycpCiAgICAgcmV0dXJuIGMKIAotZGVmIGRpcyh4PU5vbmUpOgorZGVmIGRpcyh4PU5vbmUsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiRGlzYXNzZW1ibGUgY2xhc3NlcywgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLgogCiAgICAgV2l0aCBubyBhcmd1bWVudCwgZGlzYXNzZW1ibGUgdGhlIGxhc3QgdHJhY2ViYWNrLgogCiAgICAgIiIiCiAgICAgaWYgeCBpcyBOb25lOgotICAgICAgICBkaXN0YigpCisgICAgICAgIGRpc3RiKGZpbGU9ZmlsZSkKICAgICAgICAgcmV0dXJuCiAgICAgaWYgaGFzYXR0cih4LCAnX19mdW5jX18nKTogICMgTWV0aG9kCiAgICAgICAgIHggPSB4Ll9fZnVuY19fCkBAIC00MiwyMyArNDUsMjMgQEAKICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoeC5fX2RpY3RfXy5pdGVtcygpKQogICAgICAgICBmb3IgbmFtZSwgeDEgaW4gaXRlbXM6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgxLCBfaGF2ZV9jb2RlKToKLSAgICAgICAgICAgICAgICBwcmludCgiRGlzYXNzZW1ibHkgb2YgJXM6IiAlIG5hbWUpCisgICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lLCBmaWxlPWZpbGUpCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkaXMoeDEpCisgICAgICAgICAgICAgICAgICAgIGRpcyh4MSwgZmlsZT1maWxlKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgICAgICBwcmludCgiU29ycnk6IiwgbXNnKQotICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNvcnJ5OiIsIG1zZywgZmlsZT1maWxlKQorICAgICAgICAgICAgICAgIHByaW50KGZpbGU9ZmlsZSkKICAgICBlbGlmIGhhc2F0dHIoeCwgJ2NvX2NvZGUnKTogIyBDb2RlIG9iamVjdAotICAgICAgICBkaXNhc3NlbWJsZSh4KQorICAgICAgICBkaXNhc3NlbWJsZSh4LCBmaWxlPWZpbGUpCiAgICAgZWxpZiBpc2luc3RhbmNlKHgsIChieXRlcywgYnl0ZWFycmF5KSk6ICMgUmF3IGJ5dGVjb2RlCi0gICAgICAgIF9kaXNhc3NlbWJsZV9ieXRlcyh4KQorICAgICAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoeCwgZmlsZT1maWxlKQogICAgIGVsaWYgaXNpbnN0YW5jZSh4LCBzdHIpOiAgICAjIFNvdXJjZSBjb2RlCi0gICAgICAgIF9kaXNhc3NlbWJsZV9zdHIoeCkKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX3N0cih4LCBmaWxlPWZpbGUpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHgpLl9fbmFtZV9fKQogCi1kZWYgZGlzdGIodGI9Tm9uZSk6CitkZWYgZGlzdGIodGI9Tm9uZSwgKiwgZmlsZT1Ob25lKToKICAgICAiIiJEaXNhc3NlbWJsZSBhIHRyYWNlYmFjayAoZGVmYXVsdDogbGFzdCB0cmFjZWJhY2spLiIiIgogICAgIGlmIHRiIGlzIE5vbmU6CiAgICAgICAgIHRyeToKQEAgLTY2LDcgKzY5LDcgQEAKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJubyBsYXN0IHRyYWNlYmFjayB0byBkaXNhc3NlbWJsZSIpCiAgICAgICAgIHdoaWxlIHRiLnRiX25leHQ6IHRiID0gdGIudGJfbmV4dAotICAgIGRpc2Fzc2VtYmxlKHRiLnRiX2ZyYW1lLmZfY29kZSwgdGIudGJfbGFzdGkpCisgICAgZGlzYXNzZW1ibGUodGIudGJfZnJhbWUuZl9jb2RlLCB0Yi50Yl9sYXN0aSwgZmlsZT1maWxlKQogCiAjIFRoZSBpbnNwZWN0IG1vZHVsZSBpbnRlcnJvZ2F0ZXMgdGhpcyBkaWN0aW9uYXJ5IHRvIGJ1aWxkIGl0cwogIyBsaXN0IG9mIENPXyogY29uc3RhbnRzLiBJdCBpcyBhbHNvIHVzZWQgYnkgcHJldHR5X2ZsYWdzIHRvCkBAIC05NSwxOSArOTgsMjIgQEAKICAgICAgICAgbmFtZXMuYXBwZW5kKGhleChmbGFncykpCiAgICAgcmV0dXJuICIsICIuam9pbihuYW1lcykKIAotZGVmIGNvZGVfaW5mbyh4KToKLSAgICAiIiJGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuIiIiCitkZWYgX2dldF9jb2RlX29iamVjdCh4KToKKyAgICAiIiJIZWxwZXIgdG8gaGFuZGxlIG1ldGhvZHMsIGZ1bmN0aW9ucywgc3RyaW5ncyBhbmQgcmF3IGNvZGUgb2JqZWN0cyIiIgogICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6ICMgTWV0aG9kCiAgICAgICAgIHggPSB4Ll9fZnVuY19fCiAgICAgaWYgaGFzYXR0cih4LCAnX19jb2RlX18nKTogIyBGdW5jdGlvbgogICAgICAgICB4ID0geC5fX2NvZGVfXwogICAgIGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgICMgU291cmNlIGNvZGUKLSAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGNvZGVfaW5mbz4iKQorICAgICAgICB4ID0gX3RyeV9jb21waWxlKHgsICI8ZGlzYXNzZW1ibHk+IikKICAgICBpZiBoYXNhdHRyKHgsICdjb19jb2RlJyk6ICAjIENvZGUgb2JqZWN0Ci0gICAgICAgIHJldHVybiBfZm9ybWF0X2NvZGVfaW5mbyh4KQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuIHgKKyAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICVzIG9iamVjdHMiICUKKyAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKKworZGVmIGNvZGVfaW5mbyh4KToKKyAgICAiIiJGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuIiIiCisgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKF9nZXRfY29kZV9vYmplY3QoeCkpCiAKIGRlZiBfZm9ybWF0X2NvZGVfaW5mbyhjbyk6CiAgICAgbGluZXMgPSBbXQpAQCAtMTQwLDEwNiArMTQ2LDIwNiBAQAogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIlNGQ6ICVzIiAlIGlfbikKICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQogCi1kZWYgc2hvd19jb2RlKGNvKToKLSAgICAiIiJQcmludCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZSB0byBzdGRvdXQuIiIiCi0gICAgcHJpbnQoY29kZV9pbmZvKGNvKSkKK2RlZiBzaG93X2NvZGUoY28sICosIGZpbGU9Tm9uZSk6CisgICAgIiIiUHJpbnQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUgdG8gKmZpbGUqLgogCi1kZWYgZGlzYXNzZW1ibGUoY28sIGxhc3RpPS0xKToKLSAgICAiIiJEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LiIiIgotICAgIGNvZGUgPSBjby5jb19jb2RlCi0gICAgbGFiZWxzID0gZmluZGxhYmVscyhjb2RlKQorICAgIElmICpmaWxlKiBpcyBub3QgcHJvdmlkZWQsIHRoZSBvdXRwdXQgaXMgcHJpbnRlZCBvbiBzdGRvdXQuCisgICAgIiIiCisgICAgcHJpbnQoY29kZV9pbmZvKGNvKSwgZmlsZT1maWxlKQorCitfSW5zdHJ1Y3Rpb24gPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCJfSW5zdHJ1Y3Rpb24iLAorICAgICAib3BuYW1lIG9wY29kZSBhcmcgYXJndmFsIGFyZ3JlcHIgb2Zmc2V0IHN0YXJ0c19saW5lIGlzX2p1bXBfdGFyZ2V0IikKKworY2xhc3MgSW5zdHJ1Y3Rpb24oX0luc3RydWN0aW9uKToKKyAgICAiIiJEZXRhaWxzIGZvciBhIGJ5dGVjb2RlIG9wZXJhdGlvbgorCisgICAgICAgRGVmaW5lZCBmaWVsZHM6CisgICAgICAgICBvcG5hbWUgLSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBvcGVyYXRpb24KKyAgICAgICAgIG9wY29kZSAtIG51bWVyaWMgY29kZSBmb3Igb3BlcmF0aW9uCisgICAgICAgICBhcmcgLSBudW1lcmljIGFyZ3VtZW50IHRvIG9wZXJhdGlvbiAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKyAgICAgICAgIGFyZ3ZhbCAtIHJlc29sdmVkIGFyZyB2YWx1ZSAoaWYga25vd24pLCBvdGhlcndpc2Ugc2FtZSBhcyBhcmcKKyAgICAgICAgIGFyZ3JlcHIgLSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRpb24gYXJndW1lbnQKKyAgICAgICAgIG9mZnNldCAtIHN0YXJ0IGluZGV4IG9mIG9wZXJhdGlvbiB3aXRoaW4gYnl0ZWNvZGUgc2VxdWVuY2UKKyAgICAgICAgIHN0YXJ0c19saW5lIC0gbGluZSBzdGFydGVkIGJ5IHRoaXMgb3Bjb2RlIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorICAgICAgICAgaXNfanVtcF90YXJnZXQgLSBUcnVlIGlmIG90aGVyIGNvZGUganVtcHMgdG8gaGVyZSwgb3RoZXJ3aXNlIEZhbHNlCisgICAgIiIiCisKKyAgICBkZWYgX2Rpc2Fzc2VtYmxlKHNlbGYsIGxpbmVub193aWR0aD0zLCBtYXJrX2FzX2N1cnJlbnQ9RmFsc2UpOgorICAgICAgICAiIiJGb3JtYXQgaW5zdHJ1Y3Rpb24gZGV0YWlscyBmb3IgaW5jbHVzaW9uIGluIGRpc2Fzc2VtYmx5IG91dHB1dAorCisgICAgICAgICpsaW5lbm9fd2lkdGgqIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lIG51bWJlciBmaWVsZCAoMCBvbWl0cyBpdCkKKyAgICAgICAgKm1hcmtfYXNfY3VycmVudCogaW5zZXJ0cyBhICctLT4nIG1hcmtlciBhcnJvdyBhcyBwYXJ0IG9mIHRoZSBsaW5lCisgICAgICAgICIiIgorICAgICAgICBmaWVsZHMgPSBbXQorICAgICAgICAjIENvbHVtbjogU291cmNlIGNvZGUgbGluZSBudW1iZXIKKyAgICAgICAgaWYgbGluZW5vX3dpZHRoOgorICAgICAgICAgICAgaWYgc2VsZi5zdGFydHNfbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lbm9fZm10ID0gIiUlJWRkIiAlIGxpbmVub193aWR0aAorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQobGluZW5vX2ZtdCAlIHNlbGYuc3RhcnRzX2xpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAnICogbGluZW5vX3dpZHRoKQorICAgICAgICAjIENvbHVtbjogQ3VycmVudCBpbnN0cnVjdGlvbiBpbmRpY2F0b3IKKyAgICAgICAgaWYgbWFya19hc19jdXJyZW50OgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnLS0+JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAgICcpCisgICAgICAgICMgQ29sdW1uOiBKdW1wIHRhcmdldCBtYXJrZXIKKyAgICAgICAgaWYgc2VsZi5pc19qdW1wX3RhcmdldDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJz4+JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAgJykKKyAgICAgICAgIyBDb2x1bW46IEluc3RydWN0aW9uIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGNvZGUgc2VxdWVuY2UKKyAgICAgICAgZmllbGRzLmFwcGVuZChyZXByKHNlbGYub2Zmc2V0KS5yanVzdCg0KSkKKyAgICAgICAgIyBDb2x1bW46IE9wY29kZSBuYW1lCisgICAgICAgIGZpZWxkcy5hcHBlbmQoc2VsZi5vcG5hbWUubGp1c3QoMjApKQorICAgICAgICAjIENvbHVtbjogT3Bjb2RlIGFyZ3VtZW50CisgICAgICAgIGlmIHNlbGYuYXJnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChyZXByKHNlbGYuYXJnKS5yanVzdCg1KSkKKyAgICAgICAgICAgICMgQ29sdW1uOiBPcGNvZGUgYXJndW1lbnQgZGV0YWlscworICAgICAgICAgICAgaWYgc2VsZi5hcmdyZXByOgorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJygnICsgc2VsZi5hcmdyZXByICsgJyknKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4oZmllbGRzKS5yc3RyaXAoKQorCisKK2RlZiBnZXRfaW5zdHJ1Y3Rpb25zKHgsICosIGZpcnN0X2xpbmU9Tm9uZSk6CisgICAgIiIiSXRlcmF0b3IgZm9yIHRoZSBvcGNvZGVzIGluIG1ldGhvZHMsIGZ1bmN0aW9ucyBvciBjb2RlCisKKyAgICBHZW5lcmF0ZXMgYSBzZXJpZXMgb2YgSW5zdHJ1Y3Rpb24gbmFtZWQgdHVwbGVzIGdpdmluZyB0aGUgZGV0YWlscyBvZgorICAgIGVhY2ggb3BlcmF0aW9ucyBpbiB0aGUgc3VwcGxpZWQgY29kZS4KKworICAgIElmICpmaXJzdF9saW5lKiBpcyBub3QgTm9uZSwgaXQgaW5kaWNhdGVzIHRoZSBsaW5lIG51bWJlciB0aGF0IHNob3VsZAorICAgIGJlIHJlcG9ydGVkIGZvciB0aGUgZmlyc3Qgc291cmNlIGxpbmUgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLgorICAgIE90aGVyd2lzZSwgdGhlIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20KKyAgICB0aGUgZGlzYXNzZW1ibGVkIGNvZGUgb2JqZWN0LgorICAgICIiIgorICAgIGNvID0gX2dldF9jb2RlX29iamVjdCh4KQorICAgIGNlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCiAgICAgbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgIGlmIGZpcnN0X2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgIGxpbmVfb2Zmc2V0ID0gZmlyc3RfbGluZSAtIGNvLmNvX2ZpcnN0bGluZW5vCisgICAgZWxzZToKKyAgICAgICAgbGluZV9vZmZzZXQgPSAwCisgICAgcmV0dXJuIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvLmNvX2NvZGUsIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBjZWxsX25hbWVzLCBsaW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldCkKKworZGVmIF9nZXRfY29uc3RfaW5mbyhjb25zdF9pbmRleCwgY29uc3RfbGlzdCk6CisgICAgIiIiSGVscGVyIHRvIGdldCBvcHRpb25hbCBkZXRhaWxzIGFib3V0IGNvbnN0IHJlZmVyZW5jZXMKKworICAgICAgIFJldHVybnMgdGhlIGRlcmVmZXJlbmNlZCBjb25zdGFudCBhbmQgaXRzIHJlcHIgaWYgdGhlIGNvbnN0YW50CisgICAgICAgbGlzdCBpcyBkZWZpbmVkLgorICAgICAgIE90aGVyd2lzZSByZXR1cm5zIHRoZSBjb25zdGFudCBpbmRleCBhbmQgaXRzIHJlcHIoKS4KKyAgICAiIiIKKyAgICBhcmd2YWwgPSBjb25zdF9pbmRleAorICAgIGlmIGNvbnN0X2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgIGFyZ3ZhbCA9IGNvbnN0X2xpc3RbY29uc3RfaW5kZXhdCisgICAgcmV0dXJuIGFyZ3ZhbCwgcmVwcihhcmd2YWwpCisKK2RlZiBfZ2V0X25hbWVfaW5mbyhuYW1lX2luZGV4LCBuYW1lX2xpc3QpOgorICAgICIiIkhlbHBlciB0byBnZXQgb3B0aW9uYWwgZGV0YWlscyBhYm91dCBuYW1lZCByZWZlcmVuY2VzCisKKyAgICAgICBSZXR1cm5zIHRoZSBkZXJlZmVyZW5jZWQgbmFtZSBhcyBib3RoIHZhbHVlIGFuZCByZXByIGlmIHRoZSBuYW1lCisgICAgICAgbGlzdCBpcyBkZWZpbmVkLgorICAgICAgIE90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIGluZGV4IGFuZCBpdHMgcmVwcigpLgorICAgICIiIgorICAgIGFyZ3ZhbCA9IG5hbWVfaW5kZXgKKyAgICBpZiBuYW1lX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgIGFyZ3ZhbCA9IG5hbWVfbGlzdFtuYW1lX2luZGV4XQorICAgICAgICBhcmdyZXByID0gYXJndmFsCisgICAgZWxzZToKKyAgICAgICAgYXJncmVwciA9IHJlcHIoYXJndmFsKQorICAgIHJldHVybiBhcmd2YWwsIGFyZ3JlcHIKKworCitkZWYgX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY29kZSwgdmFybmFtZXM9Tm9uZSwgbmFtZXM9Tm9uZSwgY29uc3RhbnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgY2VsbHM9Tm9uZSwgbGluZXN0YXJ0cz1Ob25lLCBsaW5lX29mZnNldD0wKToKKyAgICAiIiJJdGVyYXRlIG92ZXIgdGhlIGluc3RydWN0aW9ucyBpbiBhIGJ5dGVjb2RlIHN0cmluZy4KKworICAgIEdlbmVyYXRlcyBhIHNlcXVlbmNlIG9mIEluc3RydWN0aW9uIG5hbWVkdHVwbGVzIGdpdmluZyB0aGUgZGV0YWlscyBvZiBlYWNoCisgICAgb3Bjb2RlLiAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29kZSdzIHJ1bnRpbWUgZW52aXJvbm1lbnQKKyAgICAoZS5nLiB2YXJpYWJsZSBuYW1lcywgY29uc3RhbnRzKSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIG9wdGlvbmFsCisgICAgYXJndW1lbnRzLgorCisgICAgIiIiCisgICAgbGFiZWxzID0gZmluZGxhYmVscyhjb2RlKQorICAgIGV4dGVuZGVkX2FyZyA9IDAKKyAgICBzdGFydHNfbGluZSA9IE5vbmUKKyAgICBmcmVlID0gTm9uZQorICAgICMgZW51bWVyYXRlKCkgaXMgbm90IGFuIG9wdGlvbiwgc2luY2Ugd2Ugc29tZXRpbWVzIHByb2Nlc3MKKyAgICAjIG11bHRpcGxlIGVsZW1lbnRzIG9uIGEgc2luZ2xlIHBhc3MgdGhyb3VnaCB0aGUgbG9vcAogICAgIG4gPSBsZW4oY29kZSkKICAgICBpID0gMAotICAgIGV4dGVuZGVkX2FyZyA9IDAKLSAgICBmcmVlID0gTm9uZQogICAgIHdoaWxlIGkgPCBuOgogICAgICAgICBvcCA9IGNvZGVbaV0KLSAgICAgICAgaWYgaSBpbiBsaW5lc3RhcnRzOgotICAgICAgICAgICAgaWYgaSA+IDA6Ci0gICAgICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgcHJpbnQoIiUzZCIgJSBsaW5lc3RhcnRzW2ldLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoJyAgICcsIGVuZD0nICcpCi0KLSAgICAgICAgaWYgaSA9PSBsYXN0aTogcHJpbnQoJy0tPicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICAnLCBlbmQ9JyAnKQotICAgICAgICBpZiBpIGluIGxhYmVsczogcHJpbnQoJz4+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgJywgZW5kPScgJykKLSAgICAgICAgcHJpbnQocmVwcihpKS5yanVzdCg0KSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQob3BuYW1lW29wXS5sanVzdCgyMCksIGVuZD0nICcpCisgICAgICAgIG9mZnNldCA9IGkKKyAgICAgICAgaWYgbGluZXN0YXJ0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0YXJ0c19saW5lID0gbGluZXN0YXJ0cy5nZXQoaSwgTm9uZSkKKyAgICAgICAgICAgIGlmIHN0YXJ0c19saW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0YXJ0c19saW5lICs9IGxpbmVfb2Zmc2V0CisgICAgICAgIGlzX2p1bXBfdGFyZ2V0ID0gaSBpbiBsYWJlbHMKICAgICAgICAgaSA9IGkrMQorICAgICAgICBhcmcgPSBOb25lCisgICAgICAgIGFyZ3ZhbCA9IE5vbmUKKyAgICAgICAgYXJncmVwciA9ICcnCiAgICAgICAgIGlmIG9wID49IEhBVkVfQVJHVU1FTlQ6Ci0gICAgICAgICAgICBvcGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2ICsgZXh0ZW5kZWRfYXJnCisgICAgICAgICAgICBhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NiArIGV4dGVuZGVkX2FyZwogICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gMAogICAgICAgICAgICAgaSA9IGkrMgogICAgICAgICAgICAgaWYgb3AgPT0gRVhURU5ERURfQVJHOgotICAgICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IG9wYXJnKjY1NTM2Ci0gICAgICAgICAgICBwcmludChyZXByKG9wYXJnKS5yanVzdCg1KSwgZW5kPScgJykKKyAgICAgICAgICAgICAgICBleHRlbmRlZF9hcmcgPSBhcmcqNjU1MzYKKyAgICAgICAgICAgICMgIFNldCBhcmd2YWwgdG8gdGhlIGRlcmVmZXJlbmNlZCB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgd2hlbgorICAgICAgICAgICAgIyAgYXZhaWxhYmUsIGFuZCBhcmdyZXByIHRvIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYXJndmFsLgorICAgICAgICAgICAgIyAgICBfZGlzYXNzZW1ibGVfYnl0ZXMgbmVlZHMgdGhlIHN0cmluZyByZXByIG9mIHRoZQorICAgICAgICAgICAgIyAgICByYXcgbmFtZSBpbmRleCBmb3IgTE9BRF9HTE9CQUwsIExPQURfQ09OU1QsIGV0Yy4KKyAgICAgICAgICAgIGFyZ3ZhbCA9IGFyZwogICAgICAgICAgICAgaWYgb3AgaW4gaGFzY29uc3Q6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjby5jb19jb25zdHNbb3BhcmddKSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X2NvbnN0X2luZm8oYXJnLCBjb25zdGFudHMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hbWU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY28uY29fbmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgbmFtZXMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyh0byAnICsgcmVwcihpICsgb3BhcmcpICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCA9IGkgKyBhcmcKKyAgICAgICAgICAgICAgICBhcmdyZXByID0gInRvICIgKyByZXByKGFyZ3ZhbCkKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbG9jYWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY28uY29fdmFybmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgdmFybmFtZXMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2NvbXBhcmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY21wX29wW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwgPSBjbXBfb3BbYXJnXQorICAgICAgICAgICAgICAgIGFyZ3JlcHIgPSBhcmd2YWwKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzZnJlZToKLSAgICAgICAgICAgICAgICBpZiBmcmVlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCi0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgZnJlZVtvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9uYW1lX2luZm8oYXJnLCBjZWxscykKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbmFyZ3M6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyglZCBwb3NpdGlvbmFsLCAlZCBrZXl3b3JkIHBhaXIpJwotICAgICAgICAgICAgICAgICAgICAgICUgKGNvZGVbaS0yXSwgY29kZVtpLTFdKSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgIGFyZ3JlcHIgPSAiJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyIiAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSkKKyAgICAgICAgeWllbGQgSW5zdHJ1Y3Rpb24ob3BuYW1lW29wXSwgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywgYXJndmFsLCBhcmdyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHN0YXJ0c19saW5lLCBpc19qdW1wX3RhcmdldCkKKworZGVmIGRpc2Fzc2VtYmxlKGNvLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKToKKyAgICAiIiJEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LiIiIgorICAgIGNlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCisgICAgbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgIF9kaXNhc3NlbWJsZV9ieXRlcyhjby5jb19jb2RlLCBsYXN0aSwgY28uY29fdmFybmFtZXMsIGNvLmNvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICBjby5jb19jb25zdHMsIGNlbGxfbmFtZXMsIGxpbmVzdGFydHMsIGZpbGU9ZmlsZSkKIAogZGVmIF9kaXNhc3NlbWJsZV9ieXRlcyhjb2RlLCBsYXN0aT0tMSwgdmFybmFtZXM9Tm9uZSwgbmFtZXM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzPU5vbmUpOgotICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKLSAgICBuID0gbGVuKGNvZGUpCi0gICAgaSA9IDAKLSAgICB3aGlsZSBpIDwgbjoKLSAgICAgICAgb3AgPSBjb2RlW2ldCi0gICAgICAgIGlmIGkgPT0gbGFzdGk6IHByaW50KCctLT4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAgJywgZW5kPScgJykKLSAgICAgICAgaWYgaSBpbiBsYWJlbHM6IHByaW50KCc+PicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICcsIGVuZD0nICcpCi0gICAgICAgIHByaW50KHJlcHIoaSkucmp1c3QoNCksIGVuZD0nICcpCi0gICAgICAgIHByaW50KG9wbmFtZVtvcF0ubGp1c3QoMTUpLCBlbmQ9JyAnKQotICAgICAgICBpID0gaSsxCi0gICAgICAgIGlmIG9wID49IEhBVkVfQVJHVU1FTlQ6Ci0gICAgICAgICAgICBvcGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2Ci0gICAgICAgICAgICBpID0gaSsyCi0gICAgICAgICAgICBwcmludChyZXByKG9wYXJnKS5yanVzdCg1KSwgZW5kPScgJykKLSAgICAgICAgICAgIGlmIG9wIGluIGhhc2NvbnN0OgotICAgICAgICAgICAgICAgIGlmIGNvbnN0YW50czoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjb25zdGFudHNbb3BhcmddKSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKSclb3BhcmcsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hbWU6Ci0gICAgICAgICAgICAgICAgaWYgbmFtZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIG5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKSclb3BhcmcsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyh0byAnICsgcmVwcihpICsgb3BhcmcpICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNsb2NhbDoKLSAgICAgICAgICAgICAgICBpZiB2YXJuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJygnICsgdmFybmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJWQpJyAlIG9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNjb21wYXJlOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNtcF9vcFtvcGFyZ10gKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hcmdzOgotICAgICAgICAgICAgICAgIHByaW50KCcoJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyKScKLSAgICAgICAgICAgICAgICAgICAgICAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSksIGVuZD0nICcpCi0gICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzPU5vbmUsIGNlbGxzPU5vbmUsIGxpbmVzdGFydHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKiwgZmlsZT1Ob25lLCBsaW5lX29mZnNldD0wKToKKyAgICAjIE9taXQgdGhlIGxpbmUgbnVtYmVyIGNvbHVtbiBlbnRpcmVseSBpZiB3ZSBoYXZlIG5vIGxpbmUgbnVtYmVyIGluZm8KKyAgICBzaG93X2xpbmVubyA9IGxpbmVzdGFydHMgaXMgbm90IE5vbmUKKyAgICAjIFRPRE8/OiBBZGp1c3Qgd2lkdGggdXB3YXJkcyBpZiBtYXgobGluZXN0YXJ0cy52YWx1ZXMoKSkgPj0gMTAwMD8KKyAgICBsaW5lbm9fd2lkdGggPSAzIGlmIHNob3dfbGluZW5vIGVsc2UgMAorICAgIGZvciBpbnN0ciBpbiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjb2RlLCB2YXJuYW1lcywgbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cywgY2VsbHMsIGxpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PWxpbmVfb2Zmc2V0KToKKyAgICAgICAgbmV3X3NvdXJjZV9saW5lID0gKHNob3dfbGluZW5vIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHIuc3RhcnRzX2xpbmUgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ci5vZmZzZXQgPiAwKQorICAgICAgICBpZiBuZXdfc291cmNlX2xpbmU6CisgICAgICAgICAgICBwcmludChmaWxlPWZpbGUpCisgICAgICAgIGlzX2N1cnJlbnRfaW5zdHIgPSBpbnN0ci5vZmZzZXQgPT0gbGFzdGkKKyAgICAgICAgcHJpbnQoaW5zdHIuX2Rpc2Fzc2VtYmxlKGxpbmVub193aWR0aCwgaXNfY3VycmVudF9pbnN0ciksIGZpbGU9ZmlsZSkKIAotZGVmIF9kaXNhc3NlbWJsZV9zdHIoc291cmNlKToKK2RlZiBfZGlzYXNzZW1ibGVfc3RyKHNvdXJjZSwgKiwgZmlsZT1Ob25lKToKICAgICAiIiJDb21waWxlIHRoZSBzb3VyY2Ugc3RyaW5nLCB0aGVuIGRpc2Fzc2VtYmxlIHRoZSBjb2RlIG9iamVjdC4iIiIKLSAgICBkaXNhc3NlbWJsZShfdHJ5X2NvbXBpbGUoc291cmNlLCAnPGRpcz4nKSkKKyAgICBkaXNhc3NlbWJsZShfdHJ5X2NvbXBpbGUoc291cmNlLCAnPGRpcz4nKSwgZmlsZT1maWxlKQogCiBkaXNjbyA9IGRpc2Fzc2VtYmxlICAgICAgICAgICAgICAgICAgICAgIyBYWFggRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAKQEAgLTI1MCwxOSArMzU2LDIxIEBACiAKICAgICAiIiIKICAgICBsYWJlbHMgPSBbXQorICAgICMgZW51bWVyYXRlKCkgaXMgbm90IGFuIG9wdGlvbiwgc2luY2Ugd2Ugc29tZXRpbWVzIHByb2Nlc3MKKyAgICAjIG11bHRpcGxlIGVsZW1lbnRzIG9uIGEgc2luZ2xlIHBhc3MgdGhyb3VnaCB0aGUgbG9vcAogICAgIG4gPSBsZW4oY29kZSkKICAgICBpID0gMAogICAgIHdoaWxlIGkgPCBuOgogICAgICAgICBvcCA9IGNvZGVbaV0KICAgICAgICAgaSA9IGkrMQogICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NgorICAgICAgICAgICAgYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKICAgICAgICAgICAgIGkgPSBpKzIKICAgICAgICAgICAgIGxhYmVsID0gLTEKICAgICAgICAgICAgIGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgbGFiZWwgPSBpK29wYXJnCisgICAgICAgICAgICAgICAgbGFiZWwgPSBpK2FyZwogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqYWJzOgotICAgICAgICAgICAgICAgIGxhYmVsID0gb3BhcmcKKyAgICAgICAgICAgICAgICBsYWJlbCA9IGFyZwogICAgICAgICAgICAgaWYgbGFiZWwgPj0gMDoKICAgICAgICAgICAgICAgICBpZiBsYWJlbCBub3QgaW4gbGFiZWxzOgogICAgICAgICAgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKQpAQCAtMjkwLDI3ICszOTgsNzcgQEAKICAgICBpZiBsaW5lbm8gIT0gbGFzdGxpbmVubzoKICAgICAgICAgeWllbGQgKGFkZHIsIGxpbmVubykKIAorY2xhc3MgQnl0ZWNvZGU6CisgICAgIiIiVGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgb2YgYSBwaWVjZSBvZiBjb2RlCisKKyAgICBJbnN0YW50aWF0ZSB0aGlzIHdpdGggYSBmdW5jdGlvbiwgbWV0aG9kLCBzdHJpbmcgb2YgY29kZSwgb3IgYSBjb2RlIG9iamVjdAorICAgIChhcyByZXR1cm5lZCBieSBjb21waWxlKCkpLgorCisgICAgSXRlcmF0aW5nIG92ZXIgdGhpcyB5aWVsZHMgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYXMgSW5zdHJ1Y3Rpb24gaW5zdGFuY2VzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCAqLCBmaXJzdF9saW5lPU5vbmUsIGN1cnJlbnRfb2Zmc2V0PU5vbmUpOgorICAgICAgICBzZWxmLmNvZGVvYmogPSBjbyA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICAgICAgaWYgZmlyc3RfbGluZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5maXJzdF9saW5lID0gY28uY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIHNlbGYuX2xpbmVfb2Zmc2V0ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5maXJzdF9saW5lID0gZmlyc3RfbGluZQorICAgICAgICAgICAgc2VsZi5fbGluZV9vZmZzZXQgPSBmaXJzdF9saW5lIC0gY28uY29fZmlyc3RsaW5lbm8KKyAgICAgICAgc2VsZi5fY2VsbF9uYW1lcyA9IGNvLmNvX2NlbGx2YXJzICsgY28uY29fZnJlZXZhcnMKKyAgICAgICAgc2VsZi5fbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgICAgICBzZWxmLl9vcmlnaW5hbF9vYmplY3QgPSB4CisgICAgICAgIHNlbGYuY3VycmVudF9vZmZzZXQgPSBjdXJyZW50X29mZnNldAorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBjbyA9IHNlbGYuY29kZW9iagorICAgICAgICByZXR1cm4gX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY28uY29fY29kZSwgY28uY29fdmFybmFtZXMsIGNvLmNvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBzZWxmLl9jZWxsX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PXNlbGYuX2xpbmVfb2Zmc2V0KQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9KHshcn0pIi5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9vYmplY3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV90cmFjZWJhY2soY2xzLCB0Yik6CisgICAgICAgICIiIiBDb25zdHJ1Y3QgYSBCeXRlY29kZSBmcm9tIHRoZSBnaXZlbiB0cmFjZWJhY2sgIiIiCisgICAgICAgIHdoaWxlIHRiLnRiX25leHQ6CisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICAgICAgcmV0dXJuIGNscyh0Yi50Yl9mcmFtZS5mX2NvZGUsIGN1cnJlbnRfb2Zmc2V0PXRiLnRiX2xhc3RpKQorCisgICAgZGVmIGluZm8oc2VsZik6CisgICAgICAgICIiIlJldHVybiBmb3JtYXR0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGUgb2JqZWN0LiIiIgorICAgICAgICByZXR1cm4gX2Zvcm1hdF9jb2RlX2luZm8oc2VsZi5jb2Rlb2JqKQorCisgICAgZGVmIGRpcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZm9ybWF0dGVkIHZpZXcgb2YgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMuIiIiCisgICAgICAgIGNvID0gc2VsZi5jb2Rlb2JqCisgICAgICAgIGlmIHNlbGYuY3VycmVudF9vZmZzZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvZmZzZXQgPSBzZWxmLmN1cnJlbnRfb2Zmc2V0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvZmZzZXQgPSAtMQorICAgICAgICB3aXRoIGlvLlN0cmluZ0lPKCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKGNvLmNvX2NvZGUsIHZhcm5hbWVzPWNvLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzPWNvLmNvX25hbWVzLCBjb25zdGFudHM9Y28uY29fY29uc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzPXNlbGYuX2NlbGxfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXN0YXJ0cz1zZWxmLl9saW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PXNlbGYuX2xpbmVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RpPW9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQorCisKIGRlZiBfdGVzdCgpOgogICAgICIiIlNpbXBsZSB0ZXN0IHByb2dyYW0gdG8gZGlzYXNzZW1ibGUgYSBmaWxlLiIiIgotICAgIGlmIHN5cy5hcmd2WzE6XToKLSAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgidXNhZ2U6IHB5dGhvbiBkaXMucHkgWy18ZmlsZV1cbiIpCi0gICAgICAgICAgICBzeXMuZXhpdCgyKQotICAgICAgICBmbiA9IHN5cy5hcmd2WzFdCi0gICAgICAgIGlmIG5vdCBmbiBvciBmbiA9PSAiLSI6Ci0gICAgICAgICAgICBmbiA9IE5vbmUKLSAgICBlbHNlOgotICAgICAgICBmbiA9IE5vbmUKLSAgICBpZiBmbiBpcyBOb25lOgotICAgICAgICBmID0gc3lzLnN0ZGluCi0gICAgZWxzZToKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgc291cmNlID0gZi5yZWFkKCkKLSAgICBpZiBmbiBpcyBub3QgTm9uZToKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgZWxzZToKLSAgICAgICAgZm4gPSAiPHN0ZGluPiIKLSAgICBjb2RlID0gY29tcGlsZShzb3VyY2UsIGZuLCAiZXhlYyIpCisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5maWxlJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgpLCBuYXJncz0nPycsIGRlZmF1bHQ9Jy0nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgd2l0aCBhcmdzLmluZmlsZSBhcyBpbmZpbGU6CisgICAgICAgIHNvdXJjZSA9IGluZmlsZS5yZWFkKCkKKyAgICBjb2RlID0gY29tcGlsZShzb3VyY2UsIGFyZ3MuaW5maWxlLm5hbWUsICJleGVjIikKICAgICBkaXMoY29kZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkgYi9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CmluZGV4IDJlODcxOWYuLjk0NjNhMzUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQpAQCAtMTMsNSArMTMsNSBAQAogIyBVcGRhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFB5dGhvbiByZWxlYXNlIHByb2Nlc3MuCiAjCiAjLS1zdGFydCBjb25zdGFudHMtLQotX192ZXJzaW9uX18gPSAiMy4zLjUiCitfX3ZlcnNpb25fXyA9ICIzLjQuMSIKICMtLWVuZCBjb25zdGFudHMtLQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9hcmNoaXZlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQppbmRleCBmY2RhMDhlLi40NDcwYmIwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQpAQCAtMTgsMTUgKzE4LDU1IEBACiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgbWtwYXRoCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWRlZiBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCBiYXNlX2RpciwgY29tcHJlc3M9Imd6aXAiLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Cit0cnk6CisgICAgZnJvbSBwd2QgaW1wb3J0IGdldHB3bmFtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ2V0cHduYW0gPSBOb25lCisKK3RyeToKKyAgICBmcm9tIGdycCBpbXBvcnQgZ2V0Z3JuYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRncm5hbSA9IE5vbmUKKworZGVmIF9nZXRfZ2lkKG5hbWUpOgorICAgICIiIlJldHVybnMgYSBnaWQsIGdpdmVuIGEgZ3JvdXAgbmFtZS4iIiIKKyAgICBpZiBnZXRncm5hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldGdybmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIF9nZXRfdWlkKG5hbWUpOgorICAgICIiIlJldHVybnMgYW4gdWlkLCBnaXZlbiBhIHVzZXIgbmFtZS4iIiIKKyAgICBpZiBnZXRwd25hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldHB3bmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1ha2VfdGFyYmFsbChiYXNlX25hbWUsIGJhc2VfZGlyLCBjb21wcmVzcz0iZ3ppcCIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wLAorICAgICAgICAgICAgICAgICBvd25lcj1Ob25lLCBncm91cD1Ob25lKToKICAgICAiIiJDcmVhdGUgYSAocG9zc2libHkgY29tcHJlc3NlZCkgdGFyIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyCiAgICAgJ2Jhc2VfZGlyJy4KIAogICAgICdjb21wcmVzcycgbXVzdCBiZSAiZ3ppcCIgKHRoZSBkZWZhdWx0KSwgImNvbXByZXNzIiwgImJ6aXAyIiwgb3IgTm9uZS4KLSAgICBCb3RoICJ0YXIiIGFuZCB0aGUgY29tcHJlc3Npb24gdXRpbGl0eSBuYW1lZCBieSAnY29tcHJlc3MnIG11c3QgYmUgb24KLSAgICB0aGUgZGVmYXVsdCBwcm9ncmFtIHNlYXJjaCBwYXRoLCBzbyB0aGlzIGlzIHByb2JhYmx5IFVuaXgtc3BlY2lmaWMuCisgICAgKGNvbXByZXNzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yKQorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gb3duZXIgYW5kIGEgZ3JvdXAgZm9yIHRoZQorICAgIGFyY2hpdmUgdGhhdCBpcyBiZWluZyBidWlsdC4gSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAKKyAgICB3aWxsIGJlIHVzZWQuCisKICAgICBUaGUgb3V0cHV0IHRhciBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfZGlyJyArICAiLnRhciIsIHBvc3NpYmx5IHBsdXMKICAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6IiwgIi5iejIiIG9yICIuWiIpLgorCiAgICAgUmV0dXJucyB0aGUgb3V0cHV0IGZpbGVuYW1lLgogICAgICIiIgogICAgIHRhcl9jb21wcmVzc2lvbiA9IHsnZ3ppcCc6ICdneicsICdiemlwMic6ICdiejInLCBOb25lOiAnJywgJ2NvbXByZXNzJzogJyd9CkBAIC00OCwxMCArODgsMjMgQEAKICAgICBpbXBvcnQgdGFyZmlsZSAgIyBsYXRlIGltcG9ydCBzbyBQeXRob24gYnVpbGQgaXRzZWxmIGRvZXNuJ3QgYnJlYWsKIAogICAgIGxvZy5pbmZvKCdDcmVhdGluZyB0YXIgYXJjaGl2ZScpCisKKyAgICB1aWQgPSBfZ2V0X3VpZChvd25lcikKKyAgICBnaWQgPSBfZ2V0X2dpZChncm91cCkKKworICAgIGRlZiBfc2V0X3VpZF9naWQodGFyaW5mbyk6CisgICAgICAgIGlmIGdpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8uZ2lkID0gZ2lkCisgICAgICAgICAgICB0YXJpbmZvLmduYW1lID0gZ3JvdXAKKyAgICAgICAgaWYgdWlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby51aWQgPSB1aWQKKyAgICAgICAgICAgIHRhcmluZm8udW5hbWUgPSBvd25lcgorICAgICAgICByZXR1cm4gdGFyaW5mbworCiAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUsICd3fCVzJyAlIHRhcl9jb21wcmVzc2lvbltjb21wcmVzc10pCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIpCisgICAgICAgICAgICB0YXIuYWRkKGJhc2VfZGlyLCBmaWx0ZXI9X3NldF91aWRfZ2lkKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdGFyLmNsb3NlKCkKIApAQCAtMTQwLDcgKzE5Myw3IEBACiAgICAgcmV0dXJuIE5vbmUKIAogZGVmIG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgICBkcnlfcnVuPTApOgorICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICIiIkNyZWF0ZSBhbiBhcmNoaXZlIGZpbGUgKGVnLiB6aXAgb3IgdGFyKS4KIAogICAgICdiYXNlX25hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgbWludXMgYW55IGZvcm1hdC1zcGVjaWZpYwpAQCAtMTUzLDYgKzIwNiw5IEBACiAgICAgaWUuICdiYXNlX2Rpcicgd2lsbCBiZSB0aGUgY29tbW9uIHByZWZpeCBvZiBhbGwgZmlsZXMgYW5kCiAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIGFyY2hpdmUuICAncm9vdF9kaXInIGFuZCAnYmFzZV9kaXInIGJvdGggZGVmYXVsdAogICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgZmlsZS4KKworICAgICdvd25lcicgYW5kICdncm91cCcgYXJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBhcmNoaXZlLiBCeSBkZWZhdWx0LAorICAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgogICAgICIiIgogICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCkKICAgICBpZiByb290X2RpciBpcyBub3QgTm9uZToKQEAgLTE3NCw2ICsyMzAsMTEgQEAKICAgICBmdW5jID0gZm9ybWF0X2luZm9bMF0KICAgICBmb3IgYXJnLCB2YWwgaW4gZm9ybWF0X2luZm9bMV06CiAgICAgICAgIGt3YXJnc1thcmddID0gdmFsCisKKyAgICBpZiBmb3JtYXQgIT0gJ3ppcCc6CisgICAgICAgIGt3YXJnc1snb3duZXInXSA9IG93bmVyCisgICAgICAgIGt3YXJnc1snZ3JvdXAnXSA9IGdyb3VwCisKICAgICB0cnk6CiAgICAgICAgIGZpbGVuYW1lID0gZnVuYyhiYXNlX25hbWUsIGJhc2VfZGlyLCAqKmt3YXJncykKICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQppbmRleCBjNzk1Yzk1Li45MTFlODRkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQpAQCAtMzUxLDcgKzM1MSw3IEBACiAgICAgICAgIHJldHVybiBtYWNyb3MsIG9iamVjdHMsIGV4dHJhLCBwcF9vcHRzLCBidWlsZAogCiAgICAgZGVmIF9nZXRfY2NfYXJncyhzZWxmLCBwcF9vcHRzLCBkZWJ1ZywgYmVmb3JlKToKLSAgICAgICAgIyB3b3JrcyBmb3IgdW5peGNjb21waWxlciwgZW14Y2NvbXBpbGVyLCBjeWd3aW5jY29tcGlsZXIKKyAgICAgICAgIyB3b3JrcyBmb3IgdW5peGNjb21waWxlciwgY3lnd2luY2NvbXBpbGVyCiAgICAgICAgIGNjX2FyZ3MgPSBwcF9vcHRzICsgWyctYyddCiAgICAgICAgIGlmIGRlYnVnOgogICAgICAgICAgICAgY2NfYXJnc1s6MF0gPSBbJy1nJ10KQEAgLTkyNiw3ICs5MjYsNiBAQAogICAgICMgb24gYSBjeWd3aW4gYnVpbHQgcHl0aG9uIHdlIGNhbiB1c2UgZ2NjIGxpa2UgYW4gb3JkaW5hcnkgVU5JWGlzaAogICAgICMgY29tcGlsZXIKICAgICAoJ2N5Z3dpbi4qJywgJ3VuaXgnKSwKLSAgICAoJ29zMmVteCcsICdlbXgnKSwKIAogICAgICMgT1MgbmFtZSBtYXBwaW5ncwogICAgICgncG9zaXgnLCAndW5peCcpLApAQCAtOTY4LDggKzk2Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pbmd3MzIgcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgV2luMzIiKSwKICAgICAgICAgICAgICAgICAgICAnYmNwcCc6ICAgICgnYmNwcGNvbXBpbGVyJywgJ0JDUFBDb21waWxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJvcmxhbmQgQysrIENvbXBpbGVyIiksCi0gICAgICAgICAgICAgICAgICAgJ2VteCc6ICAgICAoJ2VteGNjb21waWxlcicsICdFTVhDQ29tcGlsZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTVggcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgT1MvMiIpLAogICAgICAgICAgICAgICAgICB9CiAKIGRlZiBzaG93X2NvbXBpbGVycygpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jbWQucHkgYi9MaWIvZGlzdHV0aWxzL2NtZC5weQppbmRleCAzZWEwODEwLi5jODlkNWVmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NtZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NtZC5weQpAQCAtMzY1LDkgKzM2NSwxMSBAQAogICAgICAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KICAgICAgICAgc3Bhd24oY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLSAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lKToKKyAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CiAgICAgICAgIHJldHVybiBhcmNoaXZlX3V0aWwubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2RpciwgYmFzZV9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49c2VsZi5kcnlfcnVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPXNlbGYuZHJ5X3J1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQogCiAgICAgZGVmIG1ha2VfZmlsZShzZWxmLCBpbmZpbGVzLCBvdXRmaWxlLCBmdW5jLCBhcmdzLAogICAgICAgICAgICAgICAgICAgZXhlY19tc2c9Tm9uZSwgc2tpcF9tc2c9Tm9uZSwgbGV2ZWw9MSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKaW5kZXggYzUxODhlYi4uNjgxNGExYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQpAQCAtMzcsNiArMzcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICJbZGVmYXVsdDogZGlzdF0iKSwKICAgICAgICAgICAgICAgICAgICAgKCdza2lwLWJ1aWxkJywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJza2lwIHJlYnVpbGRpbmcgZXZlcnl0aGluZyAoZm9yIHRlc3RpbmcvZGVidWdnaW5nKSIpLAorICAgICAgICAgICAgICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICAgICAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAgICAgICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICAgICAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCBncm91cF0iKSwKICAgICAgICAgICAgICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3NraXAtYnVpbGQnXQpAQCAtNTIsOCArNTgsNyBAQAogICAgICMgVGhpcyB3b24ndCBkbyBpbiByZWFsaXR5OiB3aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2ggUlBNLWlzaCBMaW51eCwKICAgICAjIERlYmlhbi1pc2ggTGludXgsIFNvbGFyaXMsIEZyZWVCU0QsIC4uLiwgV2luZG93cywgTWFjIE9TLgogICAgIGRlZmF1bHRfZm9ybWF0ID0geydwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ29zMic6ICd6aXAnfQorICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnfQogCiAgICAgIyBFc3RhYmxpc2ggdGhlIHByZWZlcnJlZCBvcmRlciAoZm9yIHRoZSAtLWhlbHAtZm9ybWF0cyBvcHRpb24pLgogICAgIGZvcm1hdF9jb21tYW5kcyA9IFsncnBtJywgJ2d6dGFyJywgJ2J6dGFyJywgJ3p0YXInLCAndGFyJywKQEAgLTc4LDYgKzgzLDggQEAKICAgICAgICAgc2VsZi5mb3JtYXRzID0gTm9uZQogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSAwCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBoYXZlIHRvIGZpbmFsaXplICdwbGF0X25hbWUnIGJlZm9yZSAnYmRpc3RfYmFzZScKQEAgLTEyMyw2ICsxMzAsMTEgQEAKICAgICAgICAgICAgIGlmIGNtZF9uYW1lIG5vdCBpbiBzZWxmLm5vX2Zvcm1hdF9vcHRpb246CiAgICAgICAgICAgICAgICAgc3ViX2NtZC5mb3JtYXQgPSBzZWxmLmZvcm1hdHNbaV0KIAorICAgICAgICAgICAgIyBwYXNzaW5nIHRoZSBvd25lciBhbmQgZ3JvdXAgbmFtZXMgZm9yIHRhciBhcmNoaXZpbmcKKyAgICAgICAgICAgIGlmIGNtZF9uYW1lID09ICdiZGlzdF9kdW1iJzoKKyAgICAgICAgICAgICAgICBzdWJfY21kLm93bmVyID0gc2VsZi5vd25lcgorICAgICAgICAgICAgICAgIHN1Yl9jbWQuZ3JvdXAgPSBzZWxmLmdyb3VwCisKICAgICAgICAgICAgICMgSWYgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGFnYWluLCB0ZWxsIGl0IHRvCiAgICAgICAgICAgICAjIGtlZXAgaXRzIHRlbXBvcmFyeSBmaWxlcyBhcm91bmQgc28gc3Vic2VxdWVudCBydW5zIGdvIGZhc3Rlci4KICAgICAgICAgICAgIGlmIGNtZF9uYW1lIGluIGNvbW1hbmRzW2krMTpdOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQppbmRleCAxYWIwOWQxLi40NDA1ZDEyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQpAQCAtMzMsMTMgKzMzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICgncmVsYXRpdmUnLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgImJ1aWxkIHRoZSBhcmNoaXZlIHVzaW5nIHJlbGF0aXZlIHBhdGhzIgogICAgICAgICAgICAgICAgICAgICAgIihkZWZhdWx0OiBmYWxzZSkiKSwKKyAgICAgICAgICAgICAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAgICAgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgdXNlcl0iKSwKKyAgICAgICAgICAgICAgICAgICAgKCdncm91cD0nLCAnZycsCisgICAgICAgICAgICAgICAgICAgICAiR3JvdXAgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgICAgICAgICAgICAgXQogCiAgICAgYm9vbGVhbl9vcHRpb25zID0gWydrZWVwLXRlbXAnLCAnc2tpcC1idWlsZCcsICdyZWxhdGl2ZSddCiAKICAgICBkZWZhdWx0X2Zvcm1hdCA9IHsgJ3Bvc2l4JzogJ2d6dGFyJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICdvczInOiAnemlwJyB9CisgICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnIH0KIAogICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYmRpc3RfZGlyID0gTm9uZQpAQCAtNDksNiArNTQsOCBAQAogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSBOb25lCiAgICAgICAgIHNlbGYucmVsYXRpdmUgPSAwCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5iZGlzdF9kaXIgaXMgTm9uZToKQEAgLTg1LDExICs5Miw2IEBACiAgICAgICAgIGFyY2hpdmVfYmFzZW5hbWUgPSAiJXMuJXMiICUgKHNlbGYuZGlzdHJpYnV0aW9uLmdldF9mdWxsbmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYXRfbmFtZSkKIAotICAgICAgICAjIE9TLzIgb2JqZWN0cyB0byBhbnkgIjoiIGNoYXJhY3RlcnMgaW4gYSBmaWxlbmFtZSAoc3VjaCBhcyB3aGVuCi0gICAgICAgICMgYSB0aW1lc3RhbXAgaXMgdXNlZCBpbiBhIHZlcnNpb24pIHNvIGNoYW5nZSB0aGVtIHRvIGh5cGhlbnMuCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICBhcmNoaXZlX2Jhc2VuYW1lID0gYXJjaGl2ZV9iYXNlbmFtZS5yZXBsYWNlKCI6IiwgIi0iKQotCiAgICAgICAgIHBzZXVkb2luc3RhbGxfcm9vdCA9IG9zLnBhdGguam9pbihzZWxmLmRpc3RfZGlyLCBhcmNoaXZlX2Jhc2VuYW1lKQogICAgICAgICBpZiBub3Qgc2VsZi5yZWxhdGl2ZToKICAgICAgICAgICAgIGFyY2hpdmVfcm9vdCA9IHNlbGYuYmRpc3RfZGlyCkBAIC0xMDcsNyArMTA5LDggQEAKIAogICAgICAgICAjIE1ha2UgdGhlIGFyY2hpdmUKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm1ha2VfYXJjaGl2ZShwc2V1ZG9pbnN0YWxsX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQsIHJvb3RfZGlyPWFyY2hpdmVfcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCwgcm9vdF9kaXI9YXJjaGl2ZV9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsIGdyb3VwPXNlbGYuZ3JvdXApCiAgICAgICAgIGlmIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpOgogICAgICAgICAgICAgcHl2ZXJzaW9uID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CmluZGV4IGJjNmEyM2YuLjNhYjJkMDQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQpAQCAtMTQsMTMgKzE0LDcgQEAKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCi0jIHRoaXMga2VlcHMgY29tcGF0aWJpbGl0eSBmcm9tIDIuMyB0byAyLjUKLWlmIHN5cy52ZXJzaW9uIDwgIjIuNiI6Ci0gICAgVVNFUl9CQVNFID0gTm9uZQotICAgIEhBU19VU0VSX1NJVEUgPSBGYWxzZQotZWxzZToKLSAgICBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQotICAgIEhBU19VU0VSX1NJVEUgPSBUcnVlCitmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQogCiBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgZnJvbSBkaXN0dXRpbHMubXN2Y2NvbXBpbGVyIGltcG9ydCBnZXRfYnVpbGRfdmVyc2lvbgpAQCAtOTcsMTQgKzkxLDExIEBACiAgICAgICAgICAibGlzdCBvZiBTV0lHIGNvbW1hbmQgbGluZSBvcHRpb25zIiksCiAgICAgICAgICgnc3dpZz0nLCBOb25lLAogICAgICAgICAgInBhdGggdG8gdGhlIFNXSUcgZXhlY3V0YWJsZSIpLAorICAgICAgICAoJ3VzZXInLCBOb25lLAorICAgICAgICAgImFkZCB1c2VyIGluY2x1ZGUsIGxpYnJhcnkgYW5kIHJwYXRoIikKICAgICAgICAgXQogCi0gICAgYm9vbGVhbl9vcHRpb25zID0gWydpbnBsYWNlJywgJ2RlYnVnJywgJ2ZvcmNlJywgJ3N3aWctY3BwJ10KLQotICAgIGlmIEhBU19VU0VSX1NJVEU6Ci0gICAgICAgIHVzZXJfb3B0aW9ucy5hcHBlbmQoKCd1c2VyJywgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZCB1c2VyIGluY2x1ZGUsIGxpYnJhcnkgYW5kIHJwYXRoIikpCi0gICAgICAgIGJvb2xlYW5fb3B0aW9ucy5hcHBlbmQoJ3VzZXInKQorICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnaW5wbGFjZScsICdkZWJ1ZycsICdmb3JjZScsICdzd2lnLWNwcCcsICd1c2VyJ10KIAogICAgIGhlbHBfb3B0aW9ucyA9IFsKICAgICAgICAgKCdoZWxwLWNvbXBpbGVyJywgTm9uZSwKQEAgLTIzMCwxMSArMjIxLDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJywgJ1ZDNicpKQogCi0gICAgICAgICMgT1MvMiAoRU1YKSBkb2Vzbid0IHN1cHBvcnQgRGVidWcgdnMgUmVsZWFzZSBidWlsZHMsIGJ1dCBoYXMgdGhlCi0gICAgICAgICMgaW1wb3J0IGxpYnJhcmllcyBpbiBpdHMgIkNvbmZpZyIgc3ViZGlyZWN0b3J5Ci0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgJ0NvbmZpZycpKQotCiAgICAgICAgICMgZm9yIGV4dGVuc2lvbnMgdW5kZXIgQ3lnd2luIGFuZCBBdGhlT1MgUHl0aG9uJ3MgbGlicmFyeSBkaXJlY3RvcnkgbXVzdCBiZQogICAgICAgICAjIGFwcGVuZGVkIHRvIGxpYnJhcnlfZGlycwogICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjZdID09ICdjeWd3aW4nIG9yIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gJ2F0aGVvcyc6CkBAIC02MTksOSArNjA1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiAic3dpZy5leGUiCi0gICAgICAgIGVsaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgICAgICMgYXNzdW1lIHN3aWcgYXZhaWxhYmxlIGluIHRoZSBQQVRILgotICAgICAgICAgICAgcmV0dXJuICJzd2lnLmV4ZSIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiSSBkb24ndCBrbm93IGhvdyB0byBmaW5kIChtdWNoIGxlc3MgcnVuKSBTV0lHICIKQEAgLTY3Miw5ICs2NTUsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBnZXRfY29uZmlnX3ZhcgogICAgICAgICBleHRfcGF0aCA9IGV4dF9uYW1lLnNwbGl0KCcuJykKLSAgICAgICAgIyBPUy8yIGhhcyBhbiA4IGNoYXJhY3RlciBtb2R1bGUgKGV4dGVuc2lvbikgbGltaXQgOi0oCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICBleHRfcGF0aFtsZW4oZXh0X3BhdGgpIC0gMV0gPSBleHRfcGF0aFtsZW4oZXh0X3BhdGgpIC0gMV1bOjhdCiAgICAgICAgICMgZXh0ZW5zaW9ucyBpbiBkZWJ1Z19tb2RlIGFyZSBuYW1lZCAnbW9kdWxlX2QucHlkJyB1bmRlciB3aW5kb3dzCiAgICAgICAgIGV4dF9zdWZmaXggPSBnZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JyBhbmQgc2VsZi5kZWJ1ZzoKQEAgLTY5NSw3ICs2NzUsNyBAQAogICAgIGRlZiBnZXRfbGlicmFyaWVzKHNlbGYsIGV4dCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgdG8gbGluayBhZ2FpbnN0IHdoZW4gYnVpbGRpbmcgYQogICAgICAgICBzaGFyZWQgZXh0ZW5zaW9uLiAgT24gbW9zdCBwbGF0Zm9ybXMsIHRoaXMgaXMganVzdCAnZXh0LmxpYnJhcmllcyc7Ci0gICAgICAgIG9uIFdpbmRvd3MgYW5kIE9TLzIsIHdlIGFkZCB0aGUgUHl0aG9uIGxpYnJhcnkgKGVnLiBweXRob24yMC5kbGwpLgorICAgICAgICBvbiBXaW5kb3dzLCB3ZSBhZGQgdGhlIFB5dGhvbiBsaWJyYXJ5IChlZy4gcHl0aG9uMjAuZGxsKS4KICAgICAgICAgIiIiCiAgICAgICAgICMgVGhlIHB5dGhvbiBsaWJyYXJ5IGlzIGFsd2F5cyBuZWVkZWQgb24gV2luZG93cy4gIEZvciBNU1ZDLCB0aGlzCiAgICAgICAgICMgaXMgcmVkdW5kYW50LCBzaW5jZSB0aGUgbGlicmFyeSBpcyBtZW50aW9uZWQgaW4gYSBwcmFnbWEgaW4KQEAgLTcxNSwxOSArNjk1LDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZXh0LmxpYnJhcmllcyArIFtweXRob25saWJdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzCi0gICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJvczJlbXgiOgotICAgICAgICAgICAgIyBFTVgvR0NDIHJlcXVpcmVzIHRoZSBweXRob24gbGlicmFyeSBleHBsaWNpdGx5LCBhbmQgSQotICAgICAgICAgICAgIyBiZWxpZXZlIFZBQ1BQIGRvZXMgYXMgd2VsbCAodGhvdWdoIG5vdCBjb25maXJtZWQpIC0gQUlNIEFwcjAxCi0gICAgICAgICAgICB0ZW1wbGF0ZSA9ICJweXRob24lZCVkIgotICAgICAgICAgICAgIyBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGUgbWFpbiBETEwgYXJlbid0IHN1cHBvcnRlZCwgYXQgbGVhc3QKLSAgICAgICAgICAgICMgbm90IGF0IHRoaXMgdGltZSAtIEFJTSBBcHIwMQotICAgICAgICAgICAgI2lmIHNlbGYuZGVidWc6Ci0gICAgICAgICAgICAjICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgKyAnX2QnCi0gICAgICAgICAgICBweXRob25saWIgPSAodGVtcGxhdGUgJQotICAgICAgICAgICAgICAgICAgIChzeXMuaGV4dmVyc2lvbiA+PiAyNCwgKHN5cy5oZXh2ZXJzaW9uID4+IDE2KSAmIDB4ZmYpKQotICAgICAgICAgICAgIyBkb24ndCBleHRlbmQgZXh0LmxpYnJhcmllcywgaXQgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyCi0gICAgICAgICAgICAjIGV4dGVuc2lvbnMsIGl0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBsaXN0Ci0gICAgICAgICAgICByZXR1cm4gZXh0LmxpYnJhcmllcyArIFtweXRob25saWJdCiAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAiY3lnd2luIjoKICAgICAgICAgICAgIHRlbXBsYXRlID0gInB5dGhvbiVkLiVkIgogICAgICAgICAgICAgcHl0aG9ubGliID0gKHRlbXBsYXRlICUKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQppbmRleCBkNDhlYjY5Li45MTAwYjk2IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CkBAIC0zLDcgKzMsNyBAQAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdidWlsZF9weScgY29tbWFuZC4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgogCkBAIC0zMTMsMTEgKzMxMywxMSBAQAogICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoZmlsZW5hbWUpCiAgICAgICAgICAgICBpZiBpbmNsdWRlX2J5dGVjb2RlOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZToKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGRlYnVnX292ZXJyaWRlPVRydWUpKQogICAgICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemUgPiAwOgotICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKIAogICAgICAgICBvdXRwdXRzICs9IFsKICAgICAgICAgICAgIG9zLnBhdGguam9pbihidWlsZF9kaXIsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQppbmRleCA0YjViMjJlLi45MGE4MzgwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgIyBzY3JpcHQuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2NyaXB0LCAicmIiKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcnlfcnVuOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGYgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CmluZGV4IDNjNjc1ZDEuLmQ3NjhkYzUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CkBAIC0xNSwzMiArMTUsMTcgQEAKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNPcHRpb25FcnJvcgogCi0jIHRoaXMga2VlcHMgY29tcGF0aWJpbGl0eSBmcm9tIDIuMyB0byAyLjUKLWlmIHN5cy52ZXJzaW9uIDwgIjIuNiI6Ci0gICAgVVNFUl9CQVNFID0gTm9uZQotICAgIFVTRVJfU0lURSA9IE5vbmUKLSAgICBIQVNfVVNFUl9TSVRFID0gRmFsc2UKLWVsc2U6Ci0gICAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKLSAgICBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQotICAgIEhBU19VU0VSX1NJVEUgPSBUcnVlCitmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQorZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKK0hBU19VU0VSX1NJVEUgPSBUcnVlCiAKLWlmIHN5cy52ZXJzaW9uIDwgIjIuMiI6Ci0gICAgV0lORE9XU19TQ0hFTUUgPSB7Ci0gICAgICAgICdwdXJlbGliJzogJyRiYXNlJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJGJhc2UnLAotICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAotICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9TY3JpcHRzJywKLSAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAotICAgIH0KLWVsc2U6Ci0gICAgV0lORE9XU19TQ0hFTUUgPSB7Ci0gICAgICAgICdwdXJlbGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAotICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9TY3JpcHRzJywKLSAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAotICAgIH0KK1dJTkRPV1NfU0NIRU1FID0geworICAgICdwdXJlbGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgJ2hlYWRlcnMnOiAnJGJhc2UvSW5jbHVkZS8kZGlzdF9uYW1lJywKKyAgICAnc2NyaXB0cyc6ICckYmFzZS9TY3JpcHRzJywKKyAgICAnZGF0YScgICA6ICckYmFzZScsCit9CiAKIElOU1RBTExfU0NIRU1FUyA9IHsKICAgICAndW5peF9wcmVmaXgnOiB7CkBAIC01OCwxMyArNDMsNiBAQAogICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCiAgICAgICAgIH0sCiAgICAgJ250JzogV0lORE9XU19TQ0hFTUUsCi0gICAgJ29zMic6IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi0gICAgICAgIH0sCiAgICAgfQogCiAjIHVzZXIgc2l0ZSBzY2hlbWVzCkBAIC04NiwxNCArNjQsNiBAQAogICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAogICAgICAgICB9CiAKLSAgICBJTlNUQUxMX1NDSEVNRVNbJ29zMl9ob21lJ10gPSB7Ci0gICAgICAgICdwdXJlbGliJzogJyR1c2Vyc2l0ZScsCi0gICAgICAgICdwbGF0bGliJzogJyR1c2Vyc2l0ZScsCi0gICAgICAgICdoZWFkZXJzJzogJyR1c2VyYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0LyRkaXN0X25hbWUnLAotICAgICAgICAnc2NyaXB0cyc6ICckdXNlcmJhc2UvYmluJywKLSAgICAgICAgJ2RhdGEnICAgOiAnJHVzZXJiYXNlJywKLSAgICAgICAgfQotCiAjIFRoZSBrZXlzIHRvIGFuIGluc3RhbGxhdGlvbiBzY2hlbWU7IGlmIGFueSBuZXcgdHlwZXMgb2YgZmlsZXMgYXJlIHRvIGJlCiAjIGluc3RhbGxlZCwgYmUgc3VyZSB0byBhZGQgYW4gZW50cnkgdG8gZXZlcnkgaW5zdGFsbGF0aW9uIHNjaGVtZSBhYm92ZSwKICMgYW5kIHRvIFNDSEVNRV9LRVlTIGhlcmUuCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKaW5kZXggMTVjMDhmMS4uMjE1ODEzYiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQpAQCAtNCw3ICs0LDcgQEAKIChpbnN0YWxsIGFsbCBQeXRob24gbW9kdWxlcykuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiAKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKQEAgLTE2NSwxMCArMTY1LDEwIEBACiAgICAgICAgICAgICBpZiBleHQgIT0gUFlUSE9OX1NPVVJDRV9FWFRFTlNJT046CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZToKLSAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlcy5hcHBlbmQoaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgcHlfZmlsZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCiAgICAgICAgICAgICBpZiBzZWxmLm9wdGltaXplID4gMDoKLSAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlcy5hcHBlbmQoaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgcHlfZmlsZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQogCiAgICAgICAgIHJldHVybiBieXRlY29kZV9maWxlcwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CmluZGV4IDExNmY2N2UuLjdlYTNkNWYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKQEAgLTc0LDYgKzc0LDEwIEBACiAgICAgICAgICgnbWV0YWRhdGEtY2hlY2snLCBOb25lLAogICAgICAgICAgIkVuc3VyZSB0aGF0IGFsbCByZXF1aXJlZCBlbGVtZW50cyBvZiBtZXRhLWRhdGEgIgogICAgICAgICAgImFyZSBzdXBwbGllZC4gV2FybiBpZiBhbnkgbWlzc2luZy4gW2RlZmF1bHRdIiksCisgICAgICAgICgnb3duZXI9JywgJ3UnLAorICAgICAgICAgIk93bmVyIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUgW2RlZmF1bHQ6IGN1cnJlbnQgdXNlcl0iKSwKKyAgICAgICAgKCdncm91cD0nLCAnZycsCisgICAgICAgICAiR3JvdXAgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSBbZGVmYXVsdDogY3VycmVudCBncm91cF0iKSwKICAgICAgICAgXQogCiAgICAgYm9vbGVhbl9vcHRpb25zID0gWyd1c2UtZGVmYXVsdHMnLCAncHJ1bmUnLApAQCAtMTEzLDYgKzExNyw4IEBACiAKICAgICAgICAgc2VsZi5hcmNoaXZlX2ZpbGVzID0gTm9uZQogICAgICAgICBzZWxmLm1ldGFkYXRhX2NoZWNrID0gMQorICAgICAgICBzZWxmLm93bmVyID0gTm9uZQorICAgICAgICBzZWxmLmdyb3VwID0gTm9uZQogCiAgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYubWFuaWZlc3QgaXMgTm9uZToKQEAgLTQ0NCw3ICs0NTAsOCBAQAogICAgICAgICAgICAgc2VsZi5mb3JtYXRzLmFwcGVuZChzZWxmLmZvcm1hdHMucG9wKHNlbGYuZm9ybWF0cy5pbmRleCgndGFyJykpKQogCiAgICAgICAgIGZvciBmbXQgaW4gc2VsZi5mb3JtYXRzOgotICAgICAgICAgICAgZmlsZSA9IHNlbGYubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm10LCBiYXNlX2Rpcj1iYXNlX2RpcikKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLm1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZtdCwgYmFzZV9kaXI9YmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9c2VsZi5vd25lciwgZ3JvdXA9c2VsZi5ncm91cCkKICAgICAgICAgICAgIGFyY2hpdmVfZmlsZXMuYXBwZW5kKGZpbGUpCiAgICAgICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbi5kaXN0X2ZpbGVzLmFwcGVuZCgoJ3NkaXN0JywgJycsIGZpbGUpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQppbmRleCBlMzBjMTg5Li4xODBiZTdjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKQEAgLTIsMTAgKzIsNiBAQAogCiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ3VwbG9hZCcgc3ViY29tbWFuZCAodXBsb2FkIHBhY2thZ2UgdG8gUHlQSSkuIiIiCiAKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgUHlQSVJDQ29tbWFuZAotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MsIGlvCiBpbXBvcnQgc29ja2V0CkBAIC0xMyw2ICs5LDEwIEBACiBmcm9tIGJhc2U2NCBpbXBvcnQgc3RhbmRhcmRfYjY0ZW5jb2RlCiBmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuLCBSZXF1ZXN0LCBIVFRQRXJyb3IKIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFcnJvciwgRGlzdHV0aWxzT3B0aW9uRXJyb3IKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IFB5UElSQ0NvbW1hbmQKK2Zyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgorZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCiAjIHRoaXMga2VlcHMgY29tcGF0aWJpbGl0eSBmb3IgMi4zIGFuZCAyLjQKIGlmIHN5cy52ZXJzaW9uIDwgIjIuNSI6CkBAIC0xODIsOSArMTgyLDkgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHVybG9wZW4ocmVxdWVzdCkKICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3VsdC5nZXRjb2RlKCkKICAgICAgICAgICAgIHJlYXNvbiA9IHJlc3VsdC5tc2cKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShzdHIoZSksIGxvZy5FUlJPUikKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEhUVFBFcnJvciBhcyBlOgogICAgICAgICAgICAgc3RhdHVzID0gZS5jb2RlCiAgICAgICAgICAgICByZWFzb24gPSBlLm1zZwpAQCAtMTkzLDggKzE5Myw5IEBACiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnICUgKHN0YXR1cywgcmVhc29uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLklORk8pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFubm91bmNlKCdVcGxvYWQgZmFpbGVkICglcyk6ICVzJyAlIChzdGF0dXMsIHJlYXNvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5FUlJPUikKKyAgICAgICAgICAgIG1zZyA9ICdVcGxvYWQgZmFpbGVkICglcyk6ICVzJyAlIChzdGF0dXMsIHJlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UobXNnLCBsb2cuRVJST1IpCisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFcnJvcihtc2cpCiAgICAgICAgIGlmIHNlbGYuc2hvd19yZXNwb25zZToKICAgICAgICAgICAgIHRleHQgPSBzZWxmLl9yZWFkX3B5cGlfcmVzcG9uc2UocmVzdWx0KQogICAgICAgICAgICAgbXNnID0gJ1xuJy5qb2luKCgnLScgKiA3NSwgdGV4dCwgJy0nICogNzUpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQppbmRleCAxMDZlMTQ2Li4zODJhY2E4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQpAQCAtODMsNiArODMsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSBjb25maWcuZ2V0KHNlcnZlciwga2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSBkZWZhdWx0CisKKyAgICAgICAgICAgICAgICAgICAgIyB3b3JrIGFyb3VuZCBwZW9wbGUgaGF2aW5nICJyZXBvc2l0b3J5IiBmb3IgdGhlICJweXBpIgorICAgICAgICAgICAgICAgICAgICAjIHNlY3Rpb24gb2YgdGhlaXIgY29uZmlnIHNldCB0byB0aGUgSFRUUCAocmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgIyBIVFRQUykgVVJMCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXIgPT0gJ3B5cGknIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbiAoc2VsZi5ERUZBVUxUX1JFUE9TSVRPUlksICdweXBpJykpOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFsncmVwb3NpdG9yeSddID0gc2VsZi5ERUZBVUxUX1JFUE9TSVRPUlkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50CisKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbJ3NlcnZlciddID09IHJlcG9zaXRvcnkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbJ3JlcG9zaXRvcnknXSA9PSByZXBvc2l0b3J5KToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkgYi9MaWIvZGlzdHV0aWxzL2NvcmUucHkKaW5kZXggMjVkOTFiYS4uMmJmZTY2YSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb3JlLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQpAQCAtMTI3LDggKzEyNyw5IEBACiAgICAgaWYgX3NldHVwX3N0b3BfYWZ0ZXIgPT0gImNvbmZpZyI6CiAgICAgICAgIHJldHVybiBkaXN0CiAKLSAgICAjIFBhcnNlIHRoZSBjb21tYW5kIGxpbmU7IGFueSBjb21tYW5kLWxpbmUgZXJyb3JzIGFyZSB0aGUgZW5kIHVzZXIncwotICAgICMgZmF1bHQsIHNvIHR1cm4gdGhlbSBpbnRvIFN5c3RlbUV4aXQgdG8gc3VwcHJlc3MgdHJhY2ViYWNrcy4KKyAgICAjIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYW5kIG92ZXJyaWRlIGNvbmZpZyBmaWxlczsgYW55CisgICAgIyBjb21tYW5kLWxpbmUgZXJyb3JzIGFyZSB0aGUgZW5kIHVzZXIncyBmYXVsdCwgc28gdHVybiB0aGVtIGludG8KKyAgICAjIFN5c3RlbUV4aXQgdG8gc3VwcHJlc3MgdHJhY2ViYWNrcy4KICAgICB0cnk6CiAgICAgICAgIG9rID0gZGlzdC5wYXJzZV9jb21tYW5kX2xpbmUoKQogICAgIGV4Y2VwdCBEaXN0dXRpbHNBcmdFcnJvciBhcyBtc2c6CkBAIC0xNDcsNyArMTQ4LDcgQEAKICAgICAgICAgICAgIGRpc3QucnVuX2NvbW1hbmRzKCkKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiaW50ZXJydXB0ZWQiKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSBhcyBleGM6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgICAgIGlmIERFQlVHOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImVycm9yOiAlc1xuIiAlIChleGMsKSkKICAgICAgICAgICAgICAgICByYWlzZQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQppbmRleCBlMDA3NGExLi5kMjhiMWIzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQpAQCAtNTQsNyArNTQsOCBAQAogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgaW1wb3J0IFVuaXhDQ29tcGlsZXIKIGZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgd3JpdGVfZmlsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIENvbXBpbGVFcnJvciwgVW5rbm93bkZpbGVFcnJvcgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzRXhlY0Vycm9yLCBDQ29tcGlsZXJFcnJvciwKKyAgICAgICAgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yKQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCkBAIC0yOTQsMTggKzI5NSwxNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZW50cnlfcG9pbnQgPSAnJwogCi0gICAgICAgIGlmIHNlbGYuZ2NjX3ZlcnNpb24gPCAnNCcgb3IgaXNfY3lnd2luZ2NjKCk6Ci0gICAgICAgICAgICBub19jeWd3aW4gPSAnIC1tbm8tY3lnd2luJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm9fY3lnd2luID0gJycKKyAgICAgICAgaWYgaXNfY3lnd2luZ2NjKCk6CisgICAgICAgICAgICByYWlzZSBDQ29tcGlsZXJFcnJvcigKKyAgICAgICAgICAgICAgICAnQ3lnd2luIGdjYyBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY29tcGlsZXI9bWluZ3czMicpCiAKLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyVzIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyVzIC1tZGxsIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKyslcyAtTyAtV2FsbCcgJSBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYyVzJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX3NvPSclcyVzICVzICVzJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5saW5rZXJfZGxsLCBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfb3B0aW9uLCBlbnRyeV9wb2ludCkpCisgICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGVzKGNvbXBpbGVyPSdnY2MgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjIC1tZGxsIC1PIC1XYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKysgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfZXhlPSdnY2MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289JyVzICVzICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYubGlua2VyX2RsbCwgc2hhcmVkX29wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9wb2ludCkpCiAgICAgICAgICMgTWF5YmUgd2Ugc2hvdWxkIGFsc28gYXBwZW5kIC1tdGhyZWFkcywgYnV0IHRoZW4gdGhlIGZpbmlzaGVkCiAgICAgICAgICMgZGxscyBuZWVkIGFub3RoZXIgZGxsIChtaW5nd20xMC5kbGwgc2VlIE1pbmd3MzIgZG9jcykKICAgICAgICAgIyAoLW10aHJlYWRzOiBTdXBwb3J0IHRocmVhZC1zYWZlIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiBgTWluZ3czMicpCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gQ09ORklHX0hfTk9UT0ssICInJXMnIGRvZXMgbm90IG1lbnRpb24gJ19fR05VQ19fJyIgJSBmbgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29uZmlnX2guY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgIHJldHVybiAoQ09ORklHX0hfVU5DRVJUQUlOLAogICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZWFkICclcyc6ICVzIiAlIChmbiwgZXhjLnN0cmVycm9yKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKaW5kZXggNmE3MmJkZC4uMDkyNGM5YiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CkBAIC0xMjQsMTMgKzEyNCwxMiBAQAogICAgICAgICAgICAgICAiY2Fubm90IGNvcHkgdHJlZSAnJXMnOiBub3QgYSBkaXJlY3RvcnkiICUgc3JjKQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNyYykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKLSAgICAgICAgKGVycm5vLCBlcnJzdHIpID0gZQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIGlmIGRyeV9ydW46CiAgICAgICAgICAgICBuYW1lcyA9IFtdCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiZXJyb3IgbGlzdGluZyBmaWxlcyBpbiAnJXMnOiAlcyIgJSAoc3JjLCBlcnJzdHIpKQorICAgICAgICAgICAgICAgICAgImVycm9yIGxpc3RpbmcgZmlsZXMgaW4gJyVzJzogJXMiICUgKHNyYywgZS5zdHJlcnJvcikpCiAKICAgICBpZiBub3QgZHJ5X3J1bjoKICAgICAgICAgbWtwYXRoKGRzdCwgdmVyYm9zZT12ZXJib3NlKQpAQCAtMTk3LDcgKzE5Niw3IEBACiAgICAgICAgICAgICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKGNtZFsxXSkKICAgICAgICAgICAgIGlmIGFic3BhdGggaW4gX3BhdGhfY3JlYXRlZDoKICAgICAgICAgICAgICAgICBkZWwgX3BhdGhfY3JlYXRlZFthYnNwYXRoXQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgbG9nLndhcm4oImVycm9yIHJlbW92aW5nICVzOiAlcyIsIGRpcmVjdG9yeSwgZXhjKQogCiBkZWYgZW5zdXJlX3JlbGF0aXZlKHBhdGgpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9kaXN0LnB5CmluZGV4IDExYTIxMDIuLjdlYjA0YmMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKQEAgLTUyLDcgKzUyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAoJ3F1aWV0JywgJ3EnLCAicnVuIHF1aWV0bHkgKHR1cm5zIHZlcmJvc2l0eSBvZmYpIiksCiAgICAgICAgICAgICAgICAgICAgICAgKCdkcnktcnVuJywgJ24nLCAiZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmciKSwKICAgICAgICAgICAgICAgICAgICAgICAoJ2hlbHAnLCAnaCcsICJzaG93IGRldGFpbGVkIGhlbHAgbWVzc2FnZSIpLAotICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICgnbm8tdXNlci1jZmcnLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAnaWdub3JlIHB5ZGlzdHV0aWxzLmNmZyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5JyksCisgICAgXQogCiAgICAgIyAnY29tbW9uX3VzYWdlJyBpcyBhIHNob3J0ICgyLTMgbGluZSkgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNvbW1vbgogICAgICMgdXNhZ2Ugb2YgdGhlIHNldHVwIHNjcmlwdC4KQEAgLTI1OSw2ICsyNjEsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUobXNnICsgIlxuIikKIAorICAgICAgICAjIG5vLXVzZXItY2ZnIGlzIGhhbmRsZWQgYmVmb3JlIG90aGVyIGNvbW1hbmQgbGluZSBhcmdzCisgICAgICAgICMgYmVjYXVzZSBvdGhlciBhcmdzIG92ZXJyaWRlIHRoZSBjb25maWcgZmlsZXMsIGFuZCB0aGlzCisgICAgICAgICMgb25lIGlzIG5lZWRlZCBiZWZvcmUgd2UgY2FuIGxvYWQgdGhlIGNvbmZpZyBmaWxlcy4KKyAgICAgICAgIyBJZiBhdHRyc1snc2NyaXB0X2FyZ3MnXSB3YXNuJ3QgcGFzc2VkLCBhc3N1bWUgZmFsc2UuCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIGFsc28gbWFrZSBzdXJlIHdlIGp1c3QgbG9vayBhdCB0aGUgZ2xvYmFsIG9wdGlvbnMKKyAgICAgICAgc2VsZi53YW50X3VzZXJfY2ZnID0gVHJ1ZQorCisgICAgICAgIGlmIHNlbGYuc2NyaXB0X2FyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgYXJnIGluIHNlbGYuc2NyaXB0X2FyZ3M6CisgICAgICAgICAgICAgICAgaWYgbm90IGFyZy5zdGFydHN3aXRoKCctJyk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgYXJnID09ICctLW5vLXVzZXItY2ZnJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53YW50X3VzZXJfY2ZnID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICBzZWxmLmZpbmFsaXplX29wdGlvbnMoKQogCiAgICAgZGVmIGdldF9vcHRpb25fZGljdChzZWxmLCBjb21tYW5kKToKQEAgLTMxMCw3ICszMjgsMTAgQEAKICAgICAgICAgRGlzdHV0aWxzIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgKGllLiB3aGVyZSB0aGUgdG9wLWxldmVsCiAgICAgICAgIERpc3R1dGlscyBfX2luc3RfXy5weSBmaWxlIGxpdmVzKSwgYSBmaWxlIGluIHRoZSB1c2VyJ3MgaG9tZQogICAgICAgICBkaXJlY3RvcnkgbmFtZWQgLnB5ZGlzdHV0aWxzLmNmZyBvbiBVbml4IGFuZCBweWRpc3R1dGlscy5jZmcKLSAgICAgICAgb24gV2luZG93cy9NYWMsIGFuZCBzZXR1cC5jZmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICBvbiBXaW5kb3dzL01hYzsgYW5kIHNldHVwLmNmZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgICAgICAgVGhlIGZpbGUgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUKKyAgICAgICAgLS1uby11c2VyLWNmZyBvcHRpb24uCiAgICAgICAgICIiIgogICAgICAgICBmaWxlcyA9IFtdCiAgICAgICAgIGNoZWNrX2Vudmlyb24oKQpAQCAtMzMwLDE1ICszNTEsMTkgQEAKICAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSAicHlkaXN0dXRpbHMuY2ZnIgogCiAgICAgICAgICMgQW5kIGxvb2sgZm9yIHRoZSB1c2VyIGNvbmZpZyBmaWxlCi0gICAgICAgIHVzZXJfZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwgdXNlcl9maWxlbmFtZSkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodXNlcl9maWxlKToKLSAgICAgICAgICAgIGZpbGVzLmFwcGVuZCh1c2VyX2ZpbGUpCisgICAgICAgIGlmIHNlbGYud2FudF91c2VyX2NmZzoKKyAgICAgICAgICAgIHVzZXJfZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwgdXNlcl9maWxlbmFtZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHVzZXJfZmlsZSk6CisgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHVzZXJfZmlsZSkKIAogICAgICAgICAjIEFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBsb2NhbCBzZXR1cC5jZmcKICAgICAgICAgbG9jYWxfZmlsZSA9ICJzZXR1cC5jZmciCiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGxvY2FsX2ZpbGUpOgogICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGxvY2FsX2ZpbGUpCiAKKyAgICAgICAgaWYgREVCVUc6CisgICAgICAgICAgICBzZWxmLmFubm91bmNlKCJ1c2luZyBjb25maWcgZmlsZXM6ICVzIiAlICcsICcuam9pbihmaWxlcykpCisKICAgICAgICAgcmV0dXJuIGZpbGVzCiAKICAgICBkZWYgcGFyc2VfY29uZmlnX2ZpbGVzKHNlbGYsIGZpbGVuYW1lcz1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9lbXhjY29tcGlsZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NzVmOGQuLjAwMDAwMDAKLS0tIGEvTGliL2Rpc3R1dGlscy9lbXhjY29tcGlsZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMTUgKzAsMCBAQAotIiIiZGlzdHV0aWxzLmVteGNjb21waWxlcgotCi1Qcm92aWRlcyB0aGUgRU1YQ0NvbXBpbGVyIGNsYXNzLCBhIHN1YmNsYXNzIG9mIFVuaXhDQ29tcGlsZXIgdGhhdAotaGFuZGxlcyB0aGUgRU1YIHBvcnQgb2YgdGhlIEdOVSBDIGNvbXBpbGVyIHRvIE9TLzIuCi0iIiIKLQotIyBpc3N1ZXM6Ci0jCi0jICogT1MvMiBpbnNpc3RzIHRoYXQgRExMcyBjYW4gaGF2ZSBuYW1lcyBubyBsb25nZXIgdGhhbiA4IGNoYXJhY3RlcnMKLSMgICBXZSBwdXQgZXhwb3J0X3N5bWJvbHMgaW4gYSBkZWYtZmlsZSwgYXMgdGhvdWdoIHRoZSBETEwgY2FuIGhhdmUKLSMgICBhbiBhcmJpdHJhcnkgbGVuZ3RoIG5hbWUsIGJ1dCB0cnVuY2F0ZSB0aGUgb3V0cHV0IGZpbGVuYW1lLgotIwotIyAqIG9ubHkgdXNlIE9NRiBvYmplY3RzIGFuZCB1c2UgTElOSzM4NiBhcyB0aGUgbGlua2VyICgtWm9tZikKLSMKLSMgKiBhbHdheXMgYnVpbGQgZm9yIG11bHRpdGhyZWFkaW5nICgtWm10KSBhcyB0aGUgYWNjb21wYW55aW5nIE9TLzIgcG9ydAotIyAgIG9mIFB5dGhvbiBpcyBvbmx5IGRpc3RyaWJ1dGVkIHdpdGggdGhyZWFkcyBlbmFibGVkLgotIwotIyB0ZXN0ZWQgY29uZmlndXJhdGlvbnM6Ci0jCi0jICogRU1YIGdjYyAyLjgxL0VNWCAwLjlkIGZpeDAzCi0KLWltcG9ydCBvcyxzeXMsY29weQotZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKLWZyb20gZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgaW1wb3J0IFVuaXhDQ29tcGlsZXIKLWZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgd3JpdGVfZmlsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIENvbXBpbGVFcnJvciwgVW5rbm93bkZpbGVFcnJvcgotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwotCi1jbGFzcyBFTVhDQ29tcGlsZXIgKFVuaXhDQ29tcGlsZXIpOgotCi0gICAgY29tcGlsZXJfdHlwZSA9ICdlbXgnCi0gICAgb2JqX2V4dGVuc2lvbiA9ICIub2JqIgotICAgIHN0YXRpY19saWJfZXh0ZW5zaW9uID0gIi5saWIiCi0gICAgc2hhcmVkX2xpYl9leHRlbnNpb24gPSAiLmRsbCIKLSAgICBzdGF0aWNfbGliX2Zvcm1hdCA9ICIlcyVzIgotICAgIHNoYXJlZF9saWJfZm9ybWF0ID0gIiVzJXMiCi0gICAgcmVzX2V4dGVuc2lvbiA9ICIucmVzIiAgICAgICMgY29tcGlsZWQgcmVzb3VyY2UgZmlsZQotICAgIGV4ZV9leHRlbnNpb24gPSAiLmV4ZSIKLQotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwKLSAgICAgICAgICAgICAgICAgIGZvcmNlPTApOgotCi0gICAgICAgIFVuaXhDQ29tcGlsZXIuX19pbml0X18gKHNlbGYsIHZlcmJvc2UsIGRyeV9ydW4sIGZvcmNlKQotCi0gICAgICAgIChzdGF0dXMsIGRldGFpbHMpID0gY2hlY2tfY29uZmlnX2goKQotICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJQeXRob24ncyBHQ0Mgc3RhdHVzOiAlcyAoZGV0YWlsczogJXMpIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXR1cywgZGV0YWlscykpCi0gICAgICAgIGlmIHN0YXR1cyBpcyBub3QgQ09ORklHX0hfT0s6Ci0gICAgICAgICAgICBzZWxmLndhcm4oCi0gICAgICAgICAgICAgICAgIlB5dGhvbidzIHB5Y29uZmlnLmggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgeW91ciBjb21waWxlci4gICIgKwotICAgICAgICAgICAgICAgICgiUmVhc29uOiAlcy4iICUgZGV0YWlscykgKwotICAgICAgICAgICAgICAgICJDb21waWxpbmcgbWF5IGZhaWwgYmVjYXVzZSBvZiB1bmRlZmluZWQgcHJlcHJvY2Vzc29yIG1hY3Jvcy4iKQotCi0gICAgICAgIChzZWxmLmdjY192ZXJzaW9uLCBzZWxmLmxkX3ZlcnNpb24pID0gXAotICAgICAgICAgICAgZ2V0X3ZlcnNpb25zKCkKLSAgICAgICAgc2VsZi5kZWJ1Z19wcmludChzZWxmLmNvbXBpbGVyX3R5cGUgKyAiOiBnY2MgJXMsIGxkICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5nY2NfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sZF92ZXJzaW9uKSApCi0KLSAgICAgICAgIyBIYXJkLWNvZGUgR0NDIGJlY2F1c2UgdGhhdCdzIHdoYXQgdGhpcyBpcyBhbGwgYWJvdXQuCi0gICAgICAgICMgWFhYIG9wdGltaXphdGlvbiwgd2FybmluZ3MgZXRjLiBzaG91bGQgYmUgY3VzdG9taXphYmxlLgotICAgICAgICBzZWxmLnNldF9leGVjdXRhYmxlcyhjb21waWxlcj0nZ2NjIC1ab21mIC1abXQgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tcHJvYmUgLVdhbGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjIC1ab21mIC1abXQgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tcHJvYmUgLVdhbGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfZXhlPSdnY2MgLVpvbWYgLVptdCAtWmNydGRsbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9zbz0nZ2NjIC1ab21mIC1abXQgLVpjcnRkbGwgLVpkbGwnKQotCi0gICAgICAgICMgd2FudCB0aGUgZ2NjIGxpYnJhcnkgc3RhdGljYWxseSBsaW5rZWQgKHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZQotICAgICAgICAjIHRvIGRpc3RyaWJ1dGUgYSB2ZXJzaW9uIGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIgd2UgaGF2ZSkKLSAgICAgICAgc2VsZi5kbGxfbGlicmFyaWVzPVsiZ2NjIl0KLQotICAgICMgX19pbml0X18gKCkKLQotICAgIGRlZiBfY29tcGlsZShzZWxmLCBvYmosIHNyYywgZXh0LCBjY19hcmdzLCBleHRyYV9wb3N0YXJncywgcHBfb3B0cyk6Ci0gICAgICAgIGlmIGV4dCA9PSAnLnJjJzoKLSAgICAgICAgICAgICMgZ2NjIHJlcXVpcmVzICcucmMnIGNvbXBpbGVkIHRvIGJpbmFyeSAoJy5yZXMnKSBmaWxlcyAhISEKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnNwYXduKFsicmMiLCAiLXIiLCBzcmNdKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKLSAgICAgICAgZWxzZTogIyBmb3Igb3RoZXIgZmlsZXMgdXNlIHRoZSBDLWNvbXBpbGVyCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zcGF3bihzZWxmLmNvbXBpbGVyX3NvICsgY2NfYXJncyArIFtzcmMsICctbycsIG9ial0gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IobXNnKQotCi0gICAgZGVmIGxpbmsgKHNlbGYsCi0gICAgICAgICAgICAgIHRhcmdldF9kZXNjLAotICAgICAgICAgICAgICBvYmplY3RzLAotICAgICAgICAgICAgICBvdXRwdXRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgIG91dHB1dF9kaXI9Tm9uZSwKLSAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsCi0gICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICBleHBvcnRfc3ltYm9scz1Ob25lLAotICAgICAgICAgICAgICBkZWJ1Zz0wLAotICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzPU5vbmUsCi0gICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCi0gICAgICAgICAgICAgIGJ1aWxkX3RlbXA9Tm9uZSwKLSAgICAgICAgICAgICAgdGFyZ2V0X2xhbmc9Tm9uZSk6Ci0KLSAgICAgICAgIyB1c2Ugc2VwYXJhdGUgY29waWVzLCBzbyB3ZSBjYW4gbW9kaWZ5IHRoZSBsaXN0cwotICAgICAgICBleHRyYV9wcmVhcmdzID0gY29weS5jb3B5KGV4dHJhX3ByZWFyZ3Mgb3IgW10pCi0gICAgICAgIGxpYnJhcmllcyA9IGNvcHkuY29weShsaWJyYXJpZXMgb3IgW10pCi0gICAgICAgIG9iamVjdHMgPSBjb3B5LmNvcHkob2JqZWN0cyBvciBbXSkKLQotICAgICAgICAjIEFkZGl0aW9uYWwgbGlicmFyaWVzCi0gICAgICAgIGxpYnJhcmllcy5leHRlbmQoc2VsZi5kbGxfbGlicmFyaWVzKQotCi0gICAgICAgICMgaGFuZGxlIGV4cG9ydCBzeW1ib2xzIGJ5IGNyZWF0aW5nIGEgZGVmLWZpbGUKLSAgICAgICAgIyB3aXRoIGV4ZWN1dGFibGVzIHRoaXMgb25seSB3b3JrcyB3aXRoIGdjYy9sZCBhcyBsaW5rZXIKLSAgICAgICAgaWYgKChleHBvcnRfc3ltYm9scyBpcyBub3QgTm9uZSkgYW5kCi0gICAgICAgICAgICAodGFyZ2V0X2Rlc2MgIT0gc2VsZi5FWEVDVVRBQkxFKSk6Ci0gICAgICAgICAgICAjIChUaGUgbGlua2VyIGRvZXNuJ3QgZG8gYW55dGhpbmcgaWYgb3V0cHV0IGlzIHVwLXRvLWRhdGUuCi0gICAgICAgICAgICAjIFNvIGl0IHdvdWxkIHByb2JhYmx5IGJldHRlciB0byBjaGVjayBpZiB3ZSByZWFsbHkgbmVlZCB0aGlzLAotICAgICAgICAgICAgIyBidXQgZm9yIHRoaXMgd2UgaGFkIHRvIGluc2VydCBzb21lIHVuY2hhbmdlZCBwYXJ0cyBvZgotICAgICAgICAgICAgIyBVbml4Q0NvbXBpbGVyLCBhbmQgdGhpcyBpcyBub3Qgd2hhdCB3ZSB3YW50LikKLQotICAgICAgICAgICAgIyB3ZSB3YW50IHRvIHB1dCBzb21lIGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKLSAgICAgICAgICAgICMgb2JqZWN0IGZpbGVzIGFyZSwgYnVpbGRfdGVtcCBkb2Vzbid0IGhlbHAgbXVjaAotICAgICAgICAgICAgIyB3aGVyZSBhcmUgdGhlIG9iamVjdCBmaWxlcwotICAgICAgICAgICAgdGVtcF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob2JqZWN0c1swXSkKLSAgICAgICAgICAgICMgbmFtZSBvZiBkbGwgdG8gZ2l2ZSB0aGUgaGVscGVyIGZpbGVzIHRoZSBzYW1lIGJhc2UgbmFtZQotICAgICAgICAgICAgKGRsbF9uYW1lLCBkbGxfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoCi0gICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShvdXRwdXRfZmlsZW5hbWUpKQotCi0gICAgICAgICAgICAjIGdlbmVyYXRlIHRoZSBmaWxlbmFtZXMgZm9yIHRoZXNlIGZpbGVzCi0gICAgICAgICAgICBkZWZfZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wX2RpciwgZGxsX25hbWUgKyAiLmRlZiIpCi0KLSAgICAgICAgICAgICMgR2VuZXJhdGUgLmRlZiBmaWxlCi0gICAgICAgICAgICBjb250ZW50cyA9IFsKLSAgICAgICAgICAgICAgICAiTElCUkFSWSAlcyBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiAlIFwKLSAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUob3V0cHV0X2ZpbGVuYW1lKSlbMF0sCi0gICAgICAgICAgICAgICAgIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiwKLSAgICAgICAgICAgICAgICAiRVhQT1JUUyJdCi0gICAgICAgICAgICBmb3Igc3ltIGluIGV4cG9ydF9zeW1ib2xzOgotICAgICAgICAgICAgICAgIGNvbnRlbnRzLmFwcGVuZCgnICAiJXMiJyAlIHN5bSkKLSAgICAgICAgICAgIHNlbGYuZXhlY3V0ZSh3cml0ZV9maWxlLCAoZGVmX2ZpbGUsIGNvbnRlbnRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGluZyAlcyIgJSBkZWZfZmlsZSkKLQotICAgICAgICAgICAgIyBuZXh0IGFkZCBvcHRpb25zIGZvciBkZWYtZmlsZSBhbmQgdG8gY3JlYXRpbmcgaW1wb3J0IGxpYnJhcmllcwotICAgICAgICAgICAgIyBmb3IgZ2NjL2xkIHRoZSBkZWYtZmlsZSBpcyBzcGVjaWZpZWQgYXMgYW55IG90aGVyIG9iamVjdCBmaWxlcwotICAgICAgICAgICAgb2JqZWN0cy5hcHBlbmQoZGVmX2ZpbGUpCi0KLSAgICAgICAgI2VuZDogaWYgKChleHBvcnRfc3ltYm9scyBpcyBub3QgTm9uZSkgYW5kCi0gICAgICAgICMgICAgICAgICh0YXJnZXRfZGVzYyAhPSBzZWxmLkVYRUNVVEFCTEUgb3Igc2VsZi5saW5rZXJfZGxsID09ICJnY2MiKSk6Ci0KLSAgICAgICAgIyB3aG8gd2FudHMgc3ltYm9scyBhbmQgYSBtYW55IHRpbWVzIGxhcmdlciBvdXRwdXQgZmlsZQotICAgICAgICAjIHNob3VsZCBleHBsaWNpdGx5IHN3aXRjaCB0aGUgZGVidWcgbW9kZSBvbgotICAgICAgICAjIG90aGVyd2lzZSB3ZSBsZXQgZGxsd3JhcC9sZCBzdHJpcCB0aGUgb3V0cHV0IGZpbGUKLSAgICAgICAgIyAoT24gbXkgbWFjaGluZTogMTBLQiA8IHN0cmlwcGVkX2ZpbGUgPCA/PzEwMEtCCi0gICAgICAgICMgICB1bnN0cmlwcGVkX2ZpbGUgPSBzdHJpcHBlZF9maWxlICsgWFhYIEtCCi0gICAgICAgICMgICggWFhYPTI1NCBmb3IgYSB0eXBpY2FsIHB5dGhvbiBleHRlbnNpb24pKQotICAgICAgICBpZiBub3QgZGVidWc6Ci0gICAgICAgICAgICBleHRyYV9wcmVhcmdzLmFwcGVuZCgiLXMiKQotCi0gICAgICAgIFVuaXhDQ29tcGlsZXIubGluayhzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2Rlc2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgIyBleHBvcnRfc3ltYm9scywgd2UgZG8gdGhpcyBpbiBvdXIgZGVmLWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfdGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9sYW5nKQotCi0gICAgIyBsaW5rICgpCi0KLSAgICAjIC0tIE1pc2NlbGxhbmVvdXMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgIyBvdmVycmlkZSB0aGUgb2JqZWN0X2ZpbGVuYW1lcyBtZXRob2QgZnJvbSBDQ29tcGlsZXIgdG8KLSAgICAjIHN1cHBvcnQgcmMgYW5kIHJlcy1maWxlcwotICAgIGRlZiBvYmplY3RfZmlsZW5hbWVzIChzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfZmlsZW5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcF9kaXI9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Rpcj0nJyk6Ci0gICAgICAgIGlmIG91dHB1dF9kaXIgaXMgTm9uZTogb3V0cHV0X2RpciA9ICcnCi0gICAgICAgIG9ial9uYW1lcyA9IFtdCi0gICAgICAgIGZvciBzcmNfbmFtZSBpbiBzb3VyY2VfZmlsZW5hbWVzOgotICAgICAgICAgICAgIyB1c2Ugbm9ybWNhc2UgdG8gbWFrZSBzdXJlICcucmMnIGlzIHJlYWxseSAnLnJjJyBhbmQgbm90ICcuUkMnCi0gICAgICAgICAgICAoYmFzZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQgKG9zLnBhdGgubm9ybWNhc2Uoc3JjX25hbWUpKQotICAgICAgICAgICAgaWYgZXh0IG5vdCBpbiAoc2VsZi5zcmNfZXh0ZW5zaW9ucyArIFsnLnJjJ10pOgotICAgICAgICAgICAgICAgIHJhaXNlIFVua25vd25GaWxlRXJyb3IoInVua25vd24gZmlsZSB0eXBlICclcycgKGZyb20gJyVzJykiICUgXAotICAgICAgICAgICAgICAgICAgICAgIChleHQsIHNyY19uYW1lKSkKLSAgICAgICAgICAgIGlmIHN0cmlwX2RpcjoKLSAgICAgICAgICAgICAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZSAoYmFzZSkKLSAgICAgICAgICAgIGlmIGV4dCA9PSAnLnJjJzoKLSAgICAgICAgICAgICAgICAjIHRoZXNlIG5lZWQgdG8gYmUgY29tcGlsZWQgdG8gb2JqZWN0IGZpbGVzCi0gICAgICAgICAgICAgICAgb2JqX25hbWVzLmFwcGVuZCAob3MucGF0aC5qb2luIChvdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICsgc2VsZi5yZXNfZXh0ZW5zaW9uKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb2JqX25hbWVzLmFwcGVuZCAob3MucGF0aC5qb2luIChvdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICsgc2VsZi5vYmpfZXh0ZW5zaW9uKSkKLSAgICAgICAgcmV0dXJuIG9ial9uYW1lcwotCi0gICAgIyBvYmplY3RfZmlsZW5hbWVzICgpCi0KLSAgICAjIG92ZXJyaWRlIHRoZSBmaW5kX2xpYnJhcnlfZmlsZSBtZXRob2QgZnJvbSBVbml4Q0NvbXBpbGVyCi0gICAgIyB0byBkZWFsIHdpdGggZmlsZSBuYW1pbmcvc2VhcmNoaW5nIGRpZmZlcmVuY2VzCi0gICAgZGVmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsIGRpcnMsIGxpYiwgZGVidWc9MCk6Ci0gICAgICAgIHNob3J0bGliID0gJyVzLmxpYicgJSBsaWIKLSAgICAgICAgbG9uZ2xpYiA9ICdsaWIlcy5saWInICUgbGliICAgICMgdGhpcyBmb3JtIHZlcnkgcmFyZQotCi0gICAgICAgICMgZ2V0IEVNWCdzIGRlZmF1bHQgbGlicmFyeSBkaXJlY3Rvcnkgc2VhcmNoIHBhdGgKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZW14X2RpcnMgPSBvcy5lbnZpcm9uWydMSUJSQVJZX1BBVEgnXS5zcGxpdCgnOycpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGVteF9kaXJzID0gW10KLQotICAgICAgICBmb3IgZGlyIGluIGRpcnMgKyBlbXhfZGlyczoKLSAgICAgICAgICAgIHNob3J0bGlicCA9IG9zLnBhdGguam9pbihkaXIsIHNob3J0bGliKQotICAgICAgICAgICAgbG9uZ2xpYnAgPSBvcy5wYXRoLmpvaW4oZGlyLCBsb25nbGliKQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2hvcnRsaWJwKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2hvcnRsaWJwCi0gICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGxvbmdsaWJwKToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9uZ2xpYnAKLQotICAgICAgICAjIE9vcHMsIGRpZG4ndCBmaW5kIGl0IGluICphbnkqIG9mICdkaXJzJwotICAgICAgICByZXR1cm4gTm9uZQotCi0jIGNsYXNzIEVNWENDb21waWxlcgotCi0KLSMgQmVjYXVzZSB0aGVzZSBjb21waWxlcnMgYXJlbid0IGNvbmZpZ3VyZWQgaW4gUHl0aG9uJ3MgcHljb25maWcuaCBmaWxlIGJ5Ci0jIGRlZmF1bHQsIHdlIHNob3VsZCBhdCBsZWFzdCB3YXJuIHRoZSB1c2VyIGlmIGhlIGlzIHVzaW5nIGEgdW5tb2RpZmllZAotIyB2ZXJzaW9uLgotCi1DT05GSUdfSF9PSyA9ICJvayIKLUNPTkZJR19IX05PVE9LID0gIm5vdCBvayIKLUNPTkZJR19IX1VOQ0VSVEFJTiA9ICJ1bmNlcnRhaW4iCi0KLWRlZiBjaGVja19jb25maWdfaCgpOgotCi0gICAgIiIiQ2hlY2sgaWYgdGhlIGN1cnJlbnQgUHl0aG9uIGluc3RhbGxhdGlvbiAoc3BlY2lmaWNhbGx5LCBweWNvbmZpZy5oKQotICAgIGFwcGVhcnMgYW1lbmFibGUgdG8gYnVpbGRpbmcgZXh0ZW5zaW9ucyB3aXRoIEdDQy4gIFJldHVybnMgYSB0dXBsZQotICAgIChzdGF0dXMsIGRldGFpbHMpLCB3aGVyZSAnc3RhdHVzJyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6Ci0gICAgICBDT05GSUdfSF9PSwotICAgICAgICBhbGwgaXMgd2VsbCwgZ28gYWhlYWQgYW5kIGNvbXBpbGUKLSAgICAgIENPTkZJR19IX05PVE9LCi0gICAgICAgIGRvZXNuJ3QgbG9vayBnb29kCi0gICAgICBDT05GSUdfSF9VTkNFUlRBSU4KLSAgICAgICAgbm90IHN1cmUgLS0gdW5hYmxlIHRvIHJlYWQgcHljb25maWcuaAotICAgICdkZXRhaWxzJyBpcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBleHBsYWluaW5nIHRoZSBzaXR1YXRpb24uCi0KLSAgICBOb3RlIHRoZXJlIGFyZSB0d28gd2F5cyB0byBjb25jbHVkZSAiT0siOiBlaXRoZXIgJ3N5cy52ZXJzaW9uJyBjb250YWlucwotICAgIHRoZSBzdHJpbmcgIkdDQyIgKGltcGx5aW5nIHRoYXQgdGhpcyBQeXRob24gd2FzIGJ1aWx0IHdpdGggR0NDKSwgb3IgdGhlCi0gICAgaW5zdGFsbGVkICJweWNvbmZpZy5oIiBjb250YWlucyB0aGUgc3RyaW5nICJfX0dOVUNfXyIuCi0gICAgIiIiCi0KLSAgICAjIFhYWCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFsc28gY2hlY2tzIHN5cy52ZXJzaW9uLCBpdCdzIG5vdCBzdHJpY3RseSBhCi0gICAgIyAicHljb25maWcuaCIgY2hlY2sgLS0gc2hvdWxkIHByb2JhYmx5IGJlIHJlbmFtZWQuLi4KLQotICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKLSAgICAjIGlmIHN5cy52ZXJzaW9uIGNvbnRhaW5zIEdDQyB0aGVuIHB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aAotICAgICMgR0NDLCBhbmQgdGhlIHB5Y29uZmlnLmggZmlsZSBzaG91bGQgYmUgT0sKLSAgICBpZiBzeXMudmVyc2lvbi5maW5kKCJHQ0MiKSA+PSAwOgotICAgICAgICByZXR1cm4gKENPTkZJR19IX09LLCAic3lzLnZlcnNpb24gbWVudGlvbnMgJ0dDQyciKQotCi0gICAgZm4gPSBzeXNjb25maWcuZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKLSAgICB0cnk6Ci0gICAgICAgICMgSXQgd291bGQgcHJvYmFibHkgYmV0dGVyIHRvIHJlYWQgc2luZ2xlIGxpbmVzIHRvIHNlYXJjaC4KLSAgICAgICAgIyBCdXQgd2UgZG8gdGhpcyBvbmx5IG9uY2UsIGFuZCBpdCBpcyBmYXN0IGVub3VnaAotICAgICAgICBmID0gb3BlbihmbikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcyA9IGYucmVhZCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKLSAgICAgICAgIyBpZiB3ZSBjYW4ndCByZWFkIHRoaXMgZmlsZSwgd2UgY2Fubm90IHNheSBpdCBpcyB3cm9uZwotICAgICAgICAjIHRoZSBjb21waWxlciB3aWxsIGNvbXBsYWluIGxhdGVyIGFib3V0IHRoaXMgZmlsZSBhcyBtaXNzaW5nCi0gICAgICAgIHJldHVybiAoQ09ORklHX0hfVU5DRVJUQUlOLAotICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZWFkICclcyc6ICVzIiAlIChmbiwgZXhjLnN0cmVycm9yKSkKLQotICAgIGVsc2U6Ci0gICAgICAgICMgInB5Y29uZmlnLmgiIGNvbnRhaW5zIGFuICIjaWZkZWYgX19HTlVDX18iIG9yIHNvbWV0aGluZyBzaW1pbGFyCi0gICAgICAgIGlmIHMuZmluZCgiX19HTlVDX18iKSA+PSAwOgotICAgICAgICAgICAgcmV0dXJuIChDT05GSUdfSF9PSywgIiclcycgbWVudGlvbnMgJ19fR05VQ19fJyIgJSBmbikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAoQ09ORklHX0hfTk9UT0ssICInJXMnIGRvZXMgbm90IG1lbnRpb24gJ19fR05VQ19fJyIgJSBmbikKLQotCi1kZWYgZ2V0X3ZlcnNpb25zKCk6Ci0gICAgIiIiIFRyeSB0byBmaW5kIG91dCB0aGUgdmVyc2lvbnMgb2YgZ2NjIGFuZCBsZC4KLSAgICAgICAgSWYgbm90IHBvc3NpYmxlIGl0IHJldHVybnMgTm9uZSBmb3IgaXQuCi0gICAgIiIiCi0gICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgU3RyaWN0VmVyc2lvbgotICAgIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKLSAgICBpbXBvcnQgcmUKLQotICAgIGdjY19leGUgPSBmaW5kX2V4ZWN1dGFibGUoJ2djYycpCi0gICAgaWYgZ2NjX2V4ZToKLSAgICAgICAgb3V0ID0gb3MucG9wZW4oZ2NjX2V4ZSArICcgLWR1bXB2ZXJzaW9uJywncicpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dF9zdHJpbmcgPSBvdXQucmVhZCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvdXQuY2xvc2UoKQotICAgICAgICByZXN1bHQgPSByZS5zZWFyY2goJyhcZCtcLlxkK1wuXGQrKScsIG91dF9zdHJpbmcsIHJlLkFTQ0lJKQotICAgICAgICBpZiByZXN1bHQ6Ci0gICAgICAgICAgICBnY2NfdmVyc2lvbiA9IFN0cmljdFZlcnNpb24ocmVzdWx0Lmdyb3VwKDEpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZ2NjX3ZlcnNpb24gPSBOb25lCi0gICAgZWxzZToKLSAgICAgICAgZ2NjX3ZlcnNpb24gPSBOb25lCi0gICAgIyBFTVggbGQgaGFzIG5vIHdheSBvZiByZXBvcnRpbmcgdmVyc2lvbiBudW1iZXIsIGFuZCB3ZSB1c2UgR0NDCi0gICAgIyBhbnl3YXkgLSBzbyB3ZSBjYW4gbGluayBPTUYgRExMcwotICAgIGxkX3ZlcnNpb24gPSBOb25lCi0gICAgcmV0dXJuIChnY2NfdmVyc2lvbiwgbGRfdmVyc2lvbikKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5IGIvTGliL2Rpc3R1dGlscy9lcnJvcnMucHkKaW5kZXggZWIxM2M5OC4uOGI5MzA1OSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9lcnJvcnMucHkKKysrIGIvTGliL2Rpc3R1dGlscy9lcnJvcnMucHkKQEAgLTM1LDggKzM1LDggQEAKIAogY2xhc3MgRGlzdHV0aWxzRmlsZUVycm9yIChEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiQW55IHByb2JsZW1zIGluIHRoZSBmaWxlc3lzdGVtOiBleHBlY3RlZCBmaWxlIG5vdCBmb3VuZCwgZXRjLgotICAgIFR5cGljYWxseSB0aGlzIGlzIGZvciBwcm9ibGVtcyB0aGF0IHdlIGRldGVjdCBiZWZvcmUgSU9FcnJvciBvcgotICAgIE9TRXJyb3IgY291bGQgYmUgcmFpc2VkLiIiIgorICAgIFR5cGljYWxseSB0aGlzIGlzIGZvciBwcm9ibGVtcyB0aGF0IHdlIGRldGVjdCBiZWZvcmUgT1NFcnJvcgorICAgIGNvdWxkIGJlIHJhaXNlZC4iIiIKICAgICBwYXNzCiAKIGNsYXNzIERpc3R1dGlsc09wdGlvbkVycm9yIChEaXN0dXRpbHNFcnJvcik6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5CmluZGV4IDliZGQxNGUuLjdiMTRlZmIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5CkBAIC0yNywyNiArMjcsMjYgQEAKICAgICB0cnk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZzcmMgPSBvcGVuKHNyYywgJ3JiJykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoImNvdWxkIG5vdCBvcGVuICclcyc6ICVzIiAlIChzcmMsIGUuc3RyZXJyb3IpKQogCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRzdCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBkZWxldGUgJyVzJzogJXMiICUgKGRzdCwgZS5zdHJlcnJvcikpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmRzdCA9IG9wZW4oZHN0LCAnd2InKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYnVmID0gZnNyYy5yZWFkKGJ1ZmZlcl9zaXplKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHJlYWQgZnJvbSAnJXMnOiAlcyIgJSAoc3JjLCBlLnN0cmVycm9yKSkKIApAQCAtNTUsNyArNTUsNyBAQAogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmRzdC53cml0ZShidWYpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJzogJXMiICUgKGRzdCwgZS5zdHJlcnJvcikpCiAgICAgZmluYWxseToKQEAgLTE5Myw4ICsxOTMsOCBAQAogICAgIGNvcHlfaXQgPSBGYWxzZQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKHNyYywgZHN0KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgotICAgICAgICAobnVtLCBtc2cpID0gZQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIChudW0sIG1zZykgPSBlLmFyZ3MKICAgICAgICAgaWYgbnVtID09IGVycm5vLkVYREVWOgogICAgICAgICAgICAgY29weV9pdCA9IFRydWUKICAgICAgICAgZWxzZToKQEAgLTIwNSwxMSArMjA1LDExIEBACiAgICAgICAgIGNvcHlfZmlsZShzcmMsIGRzdCwgdmVyYm9zZT12ZXJib3NlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIChudW0sIG1zZykgPSBlCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAobnVtLCBtc2cpID0gZS5hcmdzCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRzdCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBtb3ZlICclcycgdG8gJyVzJyBieSBjb3B5L2RlbGV0ZTogIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CmluZGV4IGIzZjZjZTEuLjk2ODhmMjAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKQEAgLTcyOSw3ICs3MjksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBtYW5pZmVzdF9maWxlCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIG1hbmlmZXN0X2YuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAjIC0tIE1pc2NlbGxhbmVvdXMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zcGF3bi5weSBiL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKaW5kZXggZjY2ZmY5My4uMjJlODdlOCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9zcGF3bi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CkBAIC0zNiw4ICszNiw2IEBACiAgICAgICAgIF9zcGF3bl9wb3NpeChjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPWRyeV9ydW4pCiAgICAgZWxpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgIF9zcGF3bl9udChjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPWRyeV9ydW4pCi0gICAgZWxpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICBfc3Bhd25fb3MyKGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgICAiZG9uJ3Qga25vdyBob3cgdG8gc3Bhd24gcHJvZ3JhbXMgb24gcGxhdGZvcm0gJyVzJyIgJSBvcy5uYW1lKQpAQCAtODIsMzAgKzgwLDYgQEAKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvcigKICAgICAgICAgICAgICAgICAgICJjb21tYW5kICVyIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWQsIHJjKSkKIAotZGVmIF9zcGF3bl9vczIoY21kLCBzZWFyY2hfcGF0aD0xLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Ci0gICAgZXhlY3V0YWJsZSA9IGNtZFswXQotICAgIGlmIHNlYXJjaF9wYXRoOgotICAgICAgICAjIGVpdGhlciB3ZSBmaW5kIG9uZSBvciBpdCBzdGF5cyB0aGUgc2FtZQotICAgICAgICBleGVjdXRhYmxlID0gZmluZF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpIG9yIGV4ZWN1dGFibGUKLSAgICBsb2cuaW5mbygnICcuam9pbihbZXhlY3V0YWJsZV0gKyBjbWRbMTpdKSkKLSAgICBpZiBub3QgZHJ5X3J1bjoKLSAgICAgICAgIyBzcGF3bnYgZm9yIE9TLzIgRU1YIHJlcXVpcmVzIGEgZnVsbCBwYXRoIHRvIHRoZSAuZXhlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJjID0gb3Muc3Bhd252KG9zLlBfV0FJVCwgZXhlY3V0YWJsZSwgY21kKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAjIHRoaXMgc2VlbXMgdG8gaGFwcGVuIHdoZW4gdGhlIGNvbW1hbmQgaXNuJ3QgZm91bmQKLSAgICAgICAgICAgIGlmIG5vdCBERUJVRzoKLSAgICAgICAgICAgICAgICBjbWQgPSBleGVjdXRhYmxlCi0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiY29tbWFuZCAlciBmYWlsZWQ6ICVzIiAlIChjbWQsIGV4Yy5hcmdzWy0xXSkpCi0gICAgICAgIGlmIHJjICE9IDA6Ci0gICAgICAgICAgICAjIGFuZCB0aGlzIHJlZmxlY3RzIHRoZSBjb21tYW5kIHJ1bm5pbmcgYnV0IGZhaWxpbmcKLSAgICAgICAgICAgIGlmIG5vdCBERUJVRzoKLSAgICAgICAgICAgICAgICBjbWQgPSBleGVjdXRhYmxlCi0gICAgICAgICAgICBsb2cuZGVidWcoImNvbW1hbmQgJXIgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZCwgcmMpKQotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAotICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJXIgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZCwgcmMpKQotCiBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogICAgIF9jZmdfdGFyZ2V0ID0gTm9uZQpAQCAtMjA3LDcgKzE4MSw3IEBACiAgICAgcGF0aHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCiAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChleGVjdXRhYmxlKQogCi0gICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIG9zLm5hbWUgPT0gJ29zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CisgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgogICAgICAgICBleGVjdXRhYmxlID0gZXhlY3V0YWJsZSArICcuZXhlJwogCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGV4ZWN1dGFibGUpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQppbmRleCBiOTQ3OTg4Li5hMTQ1MmZlIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQpAQCAtMTE0LDggKzExNCw2IEBACiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiaW5jbHVkZSIsIHB5dGhvbl9kaXIpCiAgICAgZWxpZiBvcy5uYW1lID09ICJudCI6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiaW5jbHVkZSIpCi0gICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkluY2x1ZGUiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAiSSBkb24ndCBrbm93IHdoZXJlIFB5dGhvbiBpbnN0YWxscyBpdHMgQyBoZWFkZXIgZmlsZXMgIgpAQCAtMTUzLDE0ICsxNTEsNiBAQAogICAgICAgICBpZiBzdGFuZGFyZF9saWI6CiAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBnZXRfcHl0aG9uX3ZlcnNpb24oKSA8ICIyLjIiOgotICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXgKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpCi0gICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICBpZiBzdGFuZGFyZF9saWI6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIpCi0gICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKApAQCAtMTg2LDcgKzE3Niw4IEBACiAgICAgICAgICAgICAjIHZlcnNpb24gYW5kIGJ1aWxkIHRvb2xzIG1heSBub3Qgc3VwcG9ydCB0aGUgc2FtZSBzZXQKICAgICAgICAgICAgICMgb2YgQ1BVIGFyY2hpdGVjdHVyZXMgZm9yIHVuaXZlcnNhbCBidWlsZHMuCiAgICAgICAgICAgICBnbG9iYWwgX2NvbmZpZ192YXJzCi0gICAgICAgICAgICBpZiBub3QgX2NvbmZpZ192YXJzLmdldCgnQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInLCAnJyk6CisgICAgICAgICAgICAjIFVzZSBnZXRfY29uZmlnX3ZhcigpIHRvIGVuc3VyZSBfY29uZmlnX3ZhcnMgaXMgaW5pdGlhbGl6ZWQuCisgICAgICAgICAgICBpZiBub3QgZ2V0X2NvbmZpZ192YXIoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJyk6CiAgICAgICAgICAgICAgICAgaW1wb3J0IF9vc3hfc3VwcG9ydAogICAgICAgICAgICAgICAgIF9vc3hfc3VwcG9ydC5jdXN0b21pemVfY29tcGlsZXIoX2NvbmZpZ192YXJzKQogICAgICAgICAgICAgICAgIF9jb25maWdfdmFyc1snQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInXSA9ICdUcnVlJwpAQCAtMjUwLDEyICsyNDEsOCBAQAogICAgICAgICAgICAgaW5jX2RpciA9IF9zeXNfaG9tZSBvciBwcm9qZWN0X2Jhc2UKICAgICBlbHNlOgogICAgICAgICBpbmNfZGlyID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0xKQotICAgIGlmIGdldF9weXRob25fdmVyc2lvbigpIDwgJzIuMic6Ci0gICAgICAgIGNvbmZpZ19oID0gJ2NvbmZpZy5oJwotICAgIGVsc2U6Ci0gICAgICAgICMgVGhlIG5hbWUgb2YgdGhlIGNvbmZpZy5oIGZpbGUgY2hhbmdlZCBpbiAyLjIKLSAgICAgICAgY29uZmlnX2ggPSAncHljb25maWcuaCcKLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKQorCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCAncHljb25maWcuaCcpCiAKIAogZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgpAQCAtNDQyLDcgKzQyOSw3IEBACiAgICAgdHJ5OgogICAgICAgICBmaWxlbmFtZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCiAgICAgICAgIHBhcnNlX21ha2VmaWxlKGZpbGVuYW1lLCBnKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCiAgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKQEAgLTQ1NCw3ICs0NDEsNyBAQAogICAgICAgICBmaWxlbmFtZSA9IGdldF9jb25maWdfaF9maWxlbmFtZSgpCiAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZmlsZToKICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGZpbGUsIGcpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKICAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgpAQCAtNDY3LDE3ICs0NTQsNiBAQAogICAgIGlmIHB5dGhvbl9idWlsZDoKICAgICAgICAgZ1snTERTSEFSRUQnXSA9IGdbJ0JMRFNIQVJFRCddCiAKLSAgICBlbGlmIGdldF9weXRob25fdmVyc2lvbigpIDwgJzIuMSc6Ci0gICAgICAgICMgVGhlIGZvbGxvd2luZyB0d28gYnJhbmNoZXMgYXJlIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5LgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2FpeDQnOiAgICAgICAgICAjIHdoYXQgYWJvdXQgQUlYIDMueCA/Ci0gICAgICAgICAgICAjIExpbmtlciBzY3JpcHQgaXMgaW4gdGhlIGNvbmZpZyBkaXJlY3RvcnksIG5vdCBpbiBNb2R1bGVzIGFzIHRoZQotICAgICAgICAgICAgIyBNYWtlZmlsZSBzYXlzLgotICAgICAgICAgICAgcHl0aG9uX2xpYiA9IGdldF9weXRob25fbGliKHN0YW5kYXJkX2xpYj0xKQotICAgICAgICAgICAgbGRfc29fYWl4ID0gb3MucGF0aC5qb2luKHB5dGhvbl9saWIsICdjb25maWcnLCAnbGRfc29fYWl4JykKLSAgICAgICAgICAgIHB5dGhvbl9leHAgPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsICdweXRob24uZXhwJykKLQotICAgICAgICAgICAgZ1snTERTSEFSRUQnXSA9ICIlcyAlcyAtYkk6JXMiICUgKGxkX3NvX2FpeCwgZ1snQ0MnXSwgcHl0aG9uX2V4cCkKLQogICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKICAgICBfY29uZmlnX3ZhcnMgPSBnCiAKQEAgLTQ5Miw3ICs0NjgsNiBAQAogICAgICMgWFhYIGhtbW0uLiBhIG5vcm1hbCBpbnN0YWxsIHB1dHMgaW5jbHVkZSBmaWxlcyBoZXJlCiAgICAgZ1snSU5DTFVERVBZJ10gPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTApCiAKLSAgICBnWydTTyddID0gJy5weWQnCiAgICAgZ1snRVhUX1NVRkZJWCddID0gJy5weWQnCiAgICAgZ1snRVhFJ10gPSAiLmV4ZSIKICAgICBnWydWRVJTSU9OJ10gPSBnZXRfcHl0aG9uX3ZlcnNpb24oKS5yZXBsYWNlKCIuIiwgIiIpCkBAIC01MDIsMjQgKzQ3Nyw2IEBACiAgICAgX2NvbmZpZ192YXJzID0gZwogCiAKLWRlZiBfaW5pdF9vczIoKToKLSAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIE9TLzIiIiIKLSAgICBnID0ge30KLSAgICAjIHNldCBiYXNpYyBpbnN0YWxsIGRpcmVjdG9yaWVzCi0gICAgZ1snTElCREVTVCddID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuZGFyZF9saWI9MSkKLSAgICBnWydCSU5MSUJERVNUJ10gPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTEsIHN0YW5kYXJkX2xpYj0xKQotCi0gICAgIyBYWFggaG1tbS4uIGEgbm9ybWFsIGluc3RhbGwgcHV0cyBpbmNsdWRlIGZpbGVzIGhlcmUKLSAgICBnWydJTkNMVURFUFknXSA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MCkKLQotICAgIGdbJ1NPJ10gPSAnLnB5ZCcKLSAgICBnWydFWFRfU1VGRklYJ10gPSAnLnB5ZCcKLSAgICBnWydFWEUnXSA9ICIuZXhlIgotCi0gICAgZ2xvYmFsIF9jb25maWdfdmFycwotICAgIF9jb25maWdfdmFycyA9IGcKLQotCiBkZWYgZ2V0X2NvbmZpZ192YXJzKCphcmdzKToKICAgICAiIiJXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuIGEgZGljdGlvbmFyeSBvZiBhbGwgY29uZmlndXJhdGlvbgogICAgIHZhcmlhYmxlcyByZWxldmFudCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uICBHZW5lcmFsbHkgdGhpcyBpbmNsdWRlcwpAQCAtNTQ0LDYgKzUwMSwxMSBAQAogICAgICAgICBfY29uZmlnX3ZhcnNbJ3ByZWZpeCddID0gUFJFRklYCiAgICAgICAgIF9jb25maWdfdmFyc1snZXhlY19wcmVmaXgnXSA9IEVYRUNfUFJFRklYCiAKKyAgICAgICAgIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgc2VlIGlzc3VlMTk1NTUKKyAgICAgICAgU08gPSBfY29uZmlnX3ZhcnMuZ2V0KCdFWFRfU1VGRklYJykKKyAgICAgICAgaWYgU08gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfY29uZmlnX3ZhcnNbJ1NPJ10gPSBTTworCiAgICAgICAgICMgQWx3YXlzIGNvbnZlcnQgc3JjZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKICAgICAgICAgc3JjZGlyID0gX2NvbmZpZ192YXJzLmdldCgnc3JjZGlyJywgcHJvamVjdF9iYXNlKQogICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CkBAIC01OTQsNCArNTU2LDcgQEAKICAgICByZXR1cm5lZCBieSAnZ2V0X2NvbmZpZ192YXJzKCknLiAgRXF1aXZhbGVudCB0bwogICAgIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQogICAgICIiIgorICAgIGlmIG5hbWUgPT0gJ1NPJzoKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1NPIGlzIGRlcHJlY2F0ZWQsIHVzZSBFWFRfU1VGRklYJywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgIHJldHVybiBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CmluZGV4IGQzZmIyNGEuLjJkNzJhZjQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQpAQCAtMTYsNiArMTYsMTMgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0LCBwYXRjaAogCiB0cnk6CisgICAgaW1wb3J0IGdycAorICAgIGltcG9ydCBwd2QKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVUlEX0dJRF9TVVBQT1JUID0gRmFsc2UKKwordHJ5OgogICAgIGltcG9ydCB6aXBmaWxlCiAgICAgWklQX1NVUFBPUlQgPSBUcnVlCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC03Nyw3ICs4NCw3IEBACiAKICAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCiAgICAgICAgIHVuaXR0ZXN0LnNraXBVbmxlc3Moc3BsaXRkcml2ZSh0bXBkaXIpWzBdID09IHNwbGl0ZHJpdmUodG1wZGlyMilbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvdXJjZSBhbmQgdGFyZ2V0IHNob3VsZCBiZSBvbiBzYW1lIGRyaXZlIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIGFuZCB0YXJnZXQgc2hvdWxkIGJlIG9uIHNhbWUgZHJpdmUiKQogCiAgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCB0YXJnZXRfbmFtZSkKIApAQCAtMjc1LDYgKzI4Miw1OCBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIEFSQ0hJVkVfRk9STUFUU1sneHh4J10KIAorICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV9vd25lcl9ncm91cChzZWxmKToKKyAgICAgICAgIyB0ZXN0aW5nIG1ha2VfYXJjaGl2ZSB3aXRoIG93bmVyIGFuZCBncm91cCwgd2l0aCB2YXJpb3VzIGNvbWJpbmF0aW9ucworICAgICAgICAjIHRoaXMgd29ya3MgZXZlbiBpZiB0aGVyZSdzIG5vdCBnaWQvdWlkIHN1cHBvcnQKKyAgICAgICAgaWYgVUlEX0dJRF9TVVBQT1JUOgorICAgICAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBncm91cCA9IG93bmVyID0gJ3Jvb3QnCisKKyAgICAgICAgYmFzZV9kaXIsIHJvb3RfZGlyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpICwgJ2FyY2hpdmUnKQorICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyLCBvd25lcj1vd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPWdyb3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9J2tqaGtqaGtqZycsIGdyb3VwPSdvaWhvaG9oJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaTElCX1NVUFBPUlQsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF90YXJmaWxlX3Jvb3Rfb3duZXIoc2VsZik6CisgICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSA9IG1ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYXJjaGl2ZV9uYW1lKSkKKworICAgICAgICAjIG5vdyBjaGVja3MgdGhlIHJpZ2h0cworICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIuZ2lkLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShBcmNoaXZlVXRpbFRlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5CmluZGV4IDBhZDMyZDQuLmM4Y2NkYzIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5CkBAIC0xLDcgKzEsNiBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X2R1bWIuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IHppcGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtNzUsOCArNzQsNiBAQAogICAgICAgICAjIHNlZSB3aGF0IHdlIGhhdmUKICAgICAgICAgZGlzdF9jcmVhdGVkID0gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Rpc3QnKSkKICAgICAgICAgYmFzZSA9ICIlcy4lcy56aXAiICUgKGRpc3QuZ2V0X2Z1bGxuYW1lKCksIGNtZC5wbGF0X25hbWUpCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKCc6JywgJy0nKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdF9jcmVhdGVkLCBbYmFzZV0pCiAKQEAgLTkwLDcgKzg3LDcgQEAKICAgICAgICAgY29udGVudHMgPSBzb3J0ZWQob3MucGF0aC5iYXNlbmFtZShmbikgZm9yIGZuIGluIGNvbnRlbnRzKQogICAgICAgICB3YW50ZWQgPSBbJ2Zvby0wLjEtcHklcy4lcy5lZ2ctaW5mbycgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwgJ2Zvby5weSddCiAgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKLSAgICAgICAgICAgIHdhbnRlZC5hcHBlbmQoJ2Zvby4lcy5weWMnICUgaW1wLmdldF90YWcoKSkKKyAgICAgICAgICAgIHdhbnRlZC5hcHBlbmQoJ2Zvby4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgc29ydGVkKHdhbnRlZCkpCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQppbmRleCA5ODUzYWJkLi5iOWY0MDdmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkKQEAgLTMxLDEyICszMSwxMSBAQAogICAgICAgICBzZWxmLnRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGgsIHN5cy5wYXRoWzpdCiAgICAgICAgIHN5cy5wYXRoLmFwcGVuZChzZWxmLnRtcF9kaXIpCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uID4gIjIuNiI6Ci0gICAgICAgICAgICBpbXBvcnQgc2l0ZQotICAgICAgICAgICAgc2VsZi5vbGRfdXNlcl9iYXNlID0gc2l0ZS5VU0VSX0JBU0UKLSAgICAgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IGJ1aWxkX2V4dAotICAgICAgICAgICAgYnVpbGRfZXh0LlVTRVJfQkFTRSA9IHNpdGUuVVNFUl9CQVNFCisgICAgICAgIGltcG9ydCBzaXRlCisgICAgICAgIHNlbGYub2xkX3VzZXJfYmFzZSA9IHNpdGUuVVNFUl9CQVNFCisgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgYnVpbGRfZXh0CisgICAgICAgIGJ1aWxkX2V4dC5VU0VSX0JBU0UgPSBzaXRlLlVTRVJfQkFTRQogCiAgICAgZGVmIHRlc3RfYnVpbGRfZXh0KHNlbGYpOgogICAgICAgICBnbG9iYWwgQUxSRUFEWV9URVNURUQKQEAgLTg0LDExICs4MywxMCBAQAogICAgICAgICBzdXBwb3J0LnVubG9hZCgneHgnKQogICAgICAgICBzeXMucGF0aCA9IHNlbGYuc3lzX3BhdGhbMF0KICAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoWzFdCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uID4gIjIuNiI6Ci0gICAgICAgICAgICBpbXBvcnQgc2l0ZQotICAgICAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBzZWxmLm9sZF91c2VyX2Jhc2UKLSAgICAgICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IGJ1aWxkX2V4dAotICAgICAgICAgICAgYnVpbGRfZXh0LlVTRVJfQkFTRSA9IHNlbGYub2xkX3VzZXJfYmFzZQorICAgICAgICBpbXBvcnQgc2l0ZQorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IHNlbGYub2xkX3VzZXJfYmFzZQorICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCBidWlsZF9leHQKKyAgICAgICAgYnVpbGRfZXh0LlVTRVJfQkFTRSA9IHNlbGYub2xkX3VzZXJfYmFzZQogICAgICAgICBzdXBlcihCdWlsZEV4dFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCiAKICAgICBkZWYgdGVzdF9zb2xhcmlzX2VuYWJsZV9zaGFyZWQoc2VsZik6CkBAIC00NDQsOCArNDQyLDE2IEBACiAKICAgICAgICAgIyBnZXQgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IHRoYXQgdGhlIGludGVycHJldGVyIHdhcyBidWlsdCB3aXRoCiAgICAgICAgIHRhcmdldCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJykKLSAgICAgICAgdGFyZ2V0ID0gdHVwbGUobWFwKGludCwgdGFyZ2V0LnNwbGl0KCcuJykpKQotICAgICAgICB0YXJnZXQgPSAnJTAyZCUwMWQwJyAlIHRhcmdldAorICAgICAgICB0YXJnZXQgPSB0dXBsZShtYXAoaW50LCB0YXJnZXQuc3BsaXQoJy4nKVswOjJdKSkKKyAgICAgICAgIyBmb3JtYXQgdGhlIHRhcmdldCB2YWx1ZSBhcyBkZWZpbmVkIGluIHRoZSBBcHBsZQorICAgICAgICAjIEF2YWlsYWJpbGl0eSBNYWNyb3MuICBXZSBjYW4ndCB1c2UgdGhlIG1hY3JvIG5hbWVzIHNpbmNlCisgICAgICAgICMgYXQgbGVhc3Qgb25lIHZhbHVlIHdlIHRlc3Qgd2l0aCB3aWxsIG5vdCBleGlzdCB5ZXQuCisgICAgICAgIGlmIHRhcmdldFsxXSA8IDEwOgorICAgICAgICAgICAgIyBmb3IgMTAuMSB0aHJvdWdoIDEwLjkueCAtPiAiMTBuMCIKKyAgICAgICAgICAgIHRhcmdldCA9ICclMDJkJTAxZDAnICUgdGFyZ2V0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGZvciAxMC4xMCBhbmQgYmV5b25kIC0+ICIxMG5uMDAiCisgICAgICAgICAgICB0YXJnZXQgPSAnJTAyZCUwMmQwMCcgJSB0YXJnZXQKICAgICAgICAgZGVwdGFyZ2V0X2V4dCA9IEV4dGVuc2lvbigKICAgICAgICAgICAgICdkZXB0YXJnZXQnLAogICAgICAgICAgICAgW2RlcHRhcmdldF9jXSwKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQppbmRleCAyY2U5ZDQ0Li5jOGY2Yjg5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CkBAIC0yLDcgKzIsNiBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weQpAQCAtNjMsNyArNjIsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhweWNhY2hlX2RpcikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBweWNfZmlsZXMgPSBvcy5saXN0ZGlyKHB5Y2FjaGVfZGlyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX19pbml0X18uJXMucHljIiAlIGltcC5nZXRfdGFnKCksIHB5Y19maWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLiVzLnB5YyIgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBweWNfZmlsZXMpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9wYWNrYWdlX2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgYnVncyAjMTY2ODU5Ni8jMTcyMDg5NwpAQCAtMTAyLDcgKzEwMiw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBbJ2JvaWxlZGVnZ3MuJXMucHljJyAlIGltcC5nZXRfdGFnKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYm9pbGVkZWdncy4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ10pCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAnYnl0ZS1jb21waWxlIGRpc2FibGVkJykKICAgICBkZWYgdGVzdF9ieXRlX2NvbXBpbGVfb3B0aW1pemVkKHNlbGYpOgpAQCAtMTE5LDcgKzEyMCw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnYm9pbGVkZWdncy4lcy5weW8nICUgaW1wLmdldF90YWcoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZvdW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQogCiAgICAgZGVmIHRlc3RfZGlyX2luX3BhY2thZ2VfZGF0YShzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlyX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlyX3V0aWwucHkKaW5kZXggMTU4OWYxMi4uZDI2OTZiOCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXJfdXRpbC5weQpAQCAtMiw5ICsyLDEwIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBvcwogaW1wb3J0IHN0YXQKLWltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKIAorZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGRpcl91dGlsLCBlcnJvcnMKIGZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCAobWtwYXRoLCByZW1vdmVfdHJlZSwgY3JlYXRlX3RyZWUsIGNvcHlfdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlX3JlbGF0aXZlKQogCkBAIC0xMiw2ICsxMyw3IEBACiBmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCisKIGNsYXNzIERpclV0aWxUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgX2xvZyhzZWxmLCBtc2csICphcmdzKToKQEAgLTUyLDcgKzU0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIHRlc3QgaXMgb25seSBhcHByb3ByaWF0ZSBmb3IgUE9TSVgtbGlrZSBzeXN0ZW1zLiIpCisgICAgICAgICJUaGlzIHRlc3QgaXMgb25seSBhcHByb3ByaWF0ZSBmb3IgUE9TSVgtbGlrZSBzeXN0ZW1zLiIpCiAgICAgZGVmIHRlc3RfbWtwYXRoX3dpdGhfY3VzdG9tX21vZGUoc2VsZik6CiAgICAgICAgICMgR2V0IGFuZCBzZXQgdGhlIGN1cnJlbnQgdW1hc2sgdmFsdWUgZm9yIHRlc3RpbmcgbW9kZSBiaXRzLgogICAgICAgICB1bWFzayA9IG9zLnVtYXNrKDBvMDAyKQpAQCAtMTIwLDYgKzEyMiwxNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnN1cmVfcmVsYXRpdmUoJ2M6XFxob21lXFxmb28nKSwgJ2M6aG9tZVxcZm9vJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5zdXJlX3JlbGF0aXZlKCdob21lXFxmb28nKSwgJ2hvbWVcXGZvbycpCiAKKyAgICBAcGF0Y2goJ29zLmxpc3RkaXInLCBzaWRlX2VmZmVjdD1PU0Vycm9yKCkpCisgICAgZGVmIHRlc3RfY29weV90cmVlX2V4Y2VwdGlvbl9pbl9saXN0ZGlyKHNlbGYsIGxpc3RkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQW4gZXhjZXB0aW9uIGluIGxpc3RkaXIgc2hvdWxkIHJhaXNlIGEgRGlzdHV0aWxzRmlsZUVycm9yCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5EaXN0dXRpbHNGaWxlRXJyb3IpOgorICAgICAgICAgICAgc3JjID0gc2VsZi50ZW1wZGlyc1stMV0KKyAgICAgICAgICAgIGRpcl91dGlsLmNvcHlfdHJlZShzcmMsIE5vbmUpCisKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKERpclV0aWxUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQppbmRleCA2MWFjNTdkLi5iN2ZkM2ZiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQpAQCAtMzksNiArMzksNyBAQAogCiAKIGNsYXNzIERpc3RyaWJ1dGlvblRlc3RDYXNlKHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuRW52aXJvbkd1YXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMTMsNiArMjE0LDM0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRpc3QuYW5ub3VuY2UsIGFyZ3MsIGt3YXJncykKIAogCisgICAgZGVmIHRlc3RfZmluZF9jb25maWdfZmlsZXNfZGlzYWJsZShzZWxmKToKKyAgICAgICAgIyBUaWNrZXQgIzExODA6IEFsbG93IHVzZXIgdG8gZGlzYWJsZSB0aGVpciBob21lIGNvbmZpZyBmaWxlLgorICAgICAgICB0ZW1wX2hvbWUgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfaG9tZSwgIi5weWRpc3R1dGlscy5jZmciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2hvbWUsICJweWRpc3R1dGlscy5jZmciKQorCisgICAgICAgIHdpdGggb3Blbih1c2VyX2ZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdbZGlzdHV0aWxzXVxuJykKKworICAgICAgICBkZWYgX2V4cGFuZGVyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIHRlbXBfaG9tZQorCisgICAgICAgIG9sZF9leHBhbmRlciA9IG9zLnBhdGguZXhwYW5kdXNlcgorICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBfZXhwYW5kZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZCA9IERpc3RyaWJ1dGlvbigpCisgICAgICAgICAgICBhbGxfZmlsZXMgPSBkLmZpbmRfY29uZmlnX2ZpbGVzKCkKKworICAgICAgICAgICAgZCA9IERpc3RyaWJ1dGlvbihhdHRycz17J3NjcmlwdF9hcmdzJzogWyctLW5vLXVzZXItY2ZnJ119KQorICAgICAgICAgICAgZmlsZXMgPSBkLmZpbmRfY29uZmlnX2ZpbGVzKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlciA9IG9sZF9leHBhbmRlcgorCisgICAgICAgICMgbWFrZSBzdXJlIC0tbm8tdXNlci1jZmcgZGlzYWJsZXMgdGhlIHVzZXIgY2ZnIGZpbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsX2ZpbGVzKS0xLCBsZW4oZmlsZXMpKQorCiBjbGFzcyBNZXRhZGF0YVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHN1cHBvcnQuRW52aXJvbkd1YXJkLAogICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5CmluZGV4IDNjM2UzZGMuLjI3MGY4MWUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVfdXRpbC5weQpAQCAtMiwxMCArMiwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBlcnJubworZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAogCiBmcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IG1vdmVfZmlsZQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRmlsZUVycm9yCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGNsYXNzIEZpbGVVdGlsVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNTgsNiArNjEsMjMgQEAKICAgICAgICAgd2FudGVkID0gWydtb3ZpbmcgJXMgLT4gJXMnICUgKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldF9kaXIpXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKIAorICAgIEBwYXRjaCgnb3MucmVuYW1lJywgc2lkZV9lZmZlY3Q9T1NFcnJvcignd3JvbmcnLCAxKSkKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfZXhjZXB0aW9uX3VucGFja2luZ19yZW5hbWUoc2VsZiwgXyk6CisgICAgICAgICMgc2VlIGlzc3VlIDIyMTgyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzRmlsZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZSwgJ3cnKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIGZvYmoud3JpdGUoJ3NwYW0gZWdncycpCisgICAgICAgICAgICBtb3ZlX2ZpbGUoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0LCB2ZXJib3NlPTApCisKKyAgICBAcGF0Y2goJ29zLnJlbmFtZScsIHNpZGVfZWZmZWN0PU9TRXJyb3IoZXJybm8uRVhERVYsICd3cm9uZycpKQorICAgIEBwYXRjaCgnb3MudW5saW5rJywgc2lkZV9lZmZlY3Q9T1NFcnJvcignd3JvbmcnLCAxKSkKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfZXhjZXB0aW9uX3VucGFja2luZ191bmxpbmsoc2VsZiwgcmVuYW1lLCB1bmxpbmspOgorICAgICAgICAjIHNlZSBpc3N1ZSAyMjE4MgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc0ZpbGVFcnJvcik6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2UsICd3JykgYXMgZm9iajoKKyAgICAgICAgICAgICAgICBmb2JqLndyaXRlKCdzcGFtIGVnZ3MnKQorICAgICAgICAgICAgbW92ZV9maWxlKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldCwgdmVyYm9zZT0wKQorCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShGaWxlVXRpbFRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQppbmRleCBlZGU4OGU1Li4xOGUxZTU3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQpAQCAtMSw3ICsxLDYgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHNpdGUKQEAgLTk0LDcgKzkzLDcgQEAKIAogICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKIAotICAgICAgICBmb3Iga2V5IGluICgnbnRfdXNlcicsICd1bml4X3VzZXInLCAnb3MyX2hvbWUnKToKKyAgICAgICAgZm9yIGtleSBpbiAoJ250X3VzZXInLCAndW5peF91c2VyJyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgSU5TVEFMTF9TQ0hFTUVTKQogCiAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ3h4J30pCkBAIC0xOTMsNyArMTkyLDggQEAKICAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgIGZvdW5kID0gW29zLnBhdGguYmFzZW5hbWUobGluZSkgZm9yIGxpbmUgaW4gY29udGVudC5zcGxpdGxpbmVzKCldCi0gICAgICAgIGV4cGVjdGVkID0gWydoZWxsby5weScsICdoZWxsby4lcy5weWMnICUgaW1wLmdldF90YWcoKSwgJ3NheWhpJywKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2hlbGxvLnB5JywgJ2hlbGxvLiVzLnB5YycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLAorICAgICAgICAgICAgICAgICAgICAnc2F5aGknLAogICAgICAgICAgICAgICAgICAgICAnVU5LTk9XTi0wLjAuMC1weSVzLiVzLmVnZy1pbmZvJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBleHBlY3RlZCkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CmluZGV4IGQwZGZjYTAuLjQwZGQxYTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKQEAgLTEsNyArMSw3IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9kYXRhLiIiIgogaW1wb3J0IHN5cwogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliIGltcG9ydCBpbnN0YWxsX2xpYgpAQCAtNDQsOCArNDQsMTAgQEAKICAgICAgICAgZiA9IG9zLnBhdGguam9pbihwcm9qZWN0X2RpciwgJ2Zvby5weScpCiAgICAgICAgIHNlbGYud3JpdGVfZmlsZShmLCAnIyBweXRob24gZmlsZScpCiAgICAgICAgIGNtZC5ieXRlX2NvbXBpbGUoW2ZdKQotICAgICAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkKLSAgICAgICAgcHlvX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsIGRlYnVnX292ZXJyaWRlPUZhbHNlKQorICAgICAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPVRydWUpCisgICAgICAgIHB5b19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhweWNfZmlsZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhweW9fZmlsZSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQppbmRleCBjOTUyNDA2Li41YTA0ZTBkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CkBAIC0xNCw2ICsxNCwxMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIFpMSUJfU1VQUE9SVCA9IEZhbHNlCiAKK3RyeToKKyAgICBpbXBvcnQgZ3JwCisgICAgaW1wb3J0IHB3ZAorICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLnNkaXN0IGltcG9ydCBzZGlzdCwgc2hvd19mb3JtYXRzCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KQEAgLTQyMyw2ICs0MjksNTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZmlsZW5hbWVzKSwgWydmYWtlLTEuMCcsICdmYWtlLTEuMC9QS0ctSU5GTycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFrZS0xLjAvUkVBRE1FLm1hbnVhbCddKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWkxJQl9TVVBQT1JULCAicmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVUlEX0dJRF9TVVBQT1JULCAiUmVxdWlyZXMgZ3JwIGFuZCBwd2Qgc3VwcG9ydCIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHRhciBjb21tYW5kIGlzIG5vdCBmb3VuZCIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBnemlwIGNvbW1hbmQgaXMgbm90IGZvdW5kIikKKyAgICBkZWYgdGVzdF9tYWtlX2Rpc3RyaWJ1dGlvbl9vd25lcl9ncm91cChzZWxmKToKKyAgICAgICAgIyBub3cgYnVpbGRpbmcgYSBzZGlzdAorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorCisgICAgICAgICMgY3JlYXRpbmcgYSBnenRhciBhbmQgc3BlY2lmeWluZyB0aGUgb3duZXIrZ3JvdXAKKyAgICAgICAgY21kLmZvcm1hdHMgPSBbJ2d6dGFyJ10KKyAgICAgICAgY21kLm93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIGNtZC5ncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgZ29vZCByaWdodHMKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JywgJ2Zha2UtMS4wLnRhci5neicpCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKworICAgICAgICAjIGJ1aWxkaW5nIGEgc2Rpc3QgYWdhaW4KKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKworICAgICAgICAjIGNyZWF0aW5nIGEgZ3p0YXIKKyAgICAgICAgY21kLmZvcm1hdHMgPSBbJ2d6dGFyJ10KKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIG1ha2luZyBzdXJlIHdlIGhhdmUgdGhlIGdvb2QgcmlnaHRzCisgICAgICAgIGFyY2hpdmVfbmFtZSA9IGpvaW4oc2VsZi50bXBfZGlyLCAnZGlzdCcsICdmYWtlLTEuMC50YXIuZ3onKQorICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKworICAgICAgICAjIG5vdGUgdGhhdCB3ZSBhcmUgbm90IHRlc3RpbmcgdGhlIGdyb3VwIG93bmVyc2hpcCBoZXJlCisgICAgICAgICMgYmVjYXVzZSwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybXMgYW5kIHRoZSBjb250YWluZXIKKyAgICAgICAgIyByaWdodHMgKHNlZSAjNzQwOCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIG9zLmdldHVpZCgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShTRGlzdFRlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQppbmRleCBhMWNiNDdkLi5mYzRkMWRlIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKQEAgLTEsMTYgKzEsMTcgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuc3lzY29uZmlnLiIiIgogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCi1pbXBvcnQgdGVzdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKIGZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgZ2V0X2RlZmF1bHRfY29tcGlsZXIKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MKIAotY2xhc3MgU3lzY29uZmlnVGVzdENhc2Uoc3VwcG9ydC5FbnZpcm9uR3VhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTeXNjb25maWdUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoU3lzY29uZmlnVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKICAgICAgICAgc2VsZi5tYWtlZmlsZSA9IE5vbmUKQEAgLTMyLDcgKzMzLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNvbmZpZ19oKSwgY29uZmlnX2gpCiAKICAgICBkZWYgdGVzdF9nZXRfcHl0aG9uX2xpYihzZWxmKToKLSAgICAgICAgbGliX2RpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigpCiAgICAgICAgICMgWFhYIGRvZXNuJ3Qgd29yayBvbiBMaW51eCB3aGVuIFB5dGhvbiB3YXMgbmV2ZXIgaW5zdGFsbGVkIGJlZm9yZQogICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIobGliX2RpciksIGxpYl9kaXIpCiAgICAgICAgICMgdGVzdCBmb3IgcHl0aG9ueHgubGliPwpAQCAtNjcsOCArNjcsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKFB5dGhvbl9oKSwgUHl0aG9uX2gpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3lzY29uZmlnLl9pc19weXRob25fc291cmNlX2RpcihzcmNkaXIpKQogICAgICAgICBlbGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5kaXJuYW1lKHN5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShzeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgICAgIHNyY2RpcikKIAogICAgIGRlZiB0ZXN0X3NyY2Rpcl9pbmRlcGVuZGVudF9vZl9jd2Qoc2VsZik6CiAgICAgICAgICMgc3JjZGlyIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQpAQCAtMTI2LDEwICsxMjcsMTMgQEAKIAogICAgIGRlZiB0ZXN0X3N5c2NvbmZpZ19tb2R1bGUoc2VsZik6CiAgICAgICAgIGltcG9ydCBzeXNjb25maWcgYXMgZ2xvYmFsX3N5c2NvbmZpZwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJykpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInKSwnY29tcGlsZXIgZmxhZ3MgY3VzdG9taXplZCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJyksCisgICAgICAgICAgICAgICAgICAgICAnY29tcGlsZXIgZmxhZ3MgY3VzdG9taXplZCcpCiAgICAgZGVmIHRlc3Rfc3lzY29uZmlnX2NvbXBpbGVyX3ZhcnMoc2VsZik6CiAgICAgICAgICMgT24gT1MgWCwgYmluYXJ5IGluc3RhbGxlcnMgc3VwcG9ydCBleHRlbnNpb24gbW9kdWxlIGJ1aWxkaW5nIG9uCiAgICAgICAgICMgdmFyaW91cyBsZXZlbHMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2l0aCBkaWZmZXJpbmcgWGNvZGUKQEAgLTE0OCw5ICsxNTIsNDkgQEAKICAgICAgICAgaW1wb3J0IHN5c2NvbmZpZyBhcyBnbG9iYWxfc3lzY29uZmlnCiAgICAgICAgIGlmIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2NvbXBpbGVyIGZsYWdzIGN1c3RvbWl6ZWQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJykpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT19kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyLCAnU08nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09fdmFsdWUoc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2luX3ZhcnMoc2VsZik6CisgICAgICAgIHZhcnMgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodmFyc1snU08nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzWydTTyddLCB2YXJzWydFWFRfU1VGRklYJ10pCisKKyAgICBkZWYgdGVzdF9jdXN0b21pemVfY29tcGlsZXJfYmVmb3JlX2dldF9jb25maWdfdmFycyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjE5MjM6IHRlc3QgdGhhdCBhIERpc3RyaWJ1dGlvbiBjb21waWxlcgorICAgICAgICAjIGluc3RhbmNlIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCBjYWxsIHRvCisgICAgICAgICMgZ2V0X2NvbmZpZ192YXJzKCkuCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGVsaW5lcyh0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgICAgIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgIGNvbmZpZyA9IERpc3RyaWJ1dGlvbigpLmdldF9jb21tYW5kX29iaignY29uZmlnJykKKyAgICAgICAgICAgICAgICAjIHRyeV9jb21waWxlIG1heSBwYXNzIG9yIGl0IG1heSBmYWlsIGlmIG5vIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgIyBpcyBmb3VuZCBidXQgaXQgc2hvdWxkIG5vdCByYWlzZSBhbiBleGNlcHRpb24uCisgICAgICAgICAgICAgICAgcmMgPSBjb25maWcudHJ5X2NvbXBpbGUoJ2ludCB4OycpCisgICAgICAgICAgICAgICAgJycnKSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N0cihzeXMuZXhlY3V0YWJsZSksIFRFU1RGTl0sCisgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgIG91dHMsIGVycnMgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwLnJldHVybmNvZGUsICJTdWJwcm9jZXNzIGZhaWxlZDogIiArIG91dHMpCiAKIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CmluZGV4IDg1MzIzNjkuLjAzODBmOTcgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQpAQCAtNiw2ICs2LDcgQEAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IHVwbG9hZCBhcyB1cGxvYWRfbW9kCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLnVwbG9hZCBpbXBvcnQgdXBsb2FkCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXJyb3IKIGZyb20gZGlzdHV0aWxzLmxvZyBpbXBvcnQgSU5GTwogCiBmcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgUFlQSVJDLCBQeVBJUkNDb21tYW5kVGVzdENhc2UKQEAgLTQxLDEzICs0MiwxNCBAQAogCiBjbGFzcyBGYWtlT3BlbihvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgbXNnPU5vbmUsIGNvZGU9Tm9uZSk6CiAgICAgICAgIHNlbGYudXJsID0gdXJsCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHVybCwgc3RyKToKICAgICAgICAgICAgIHNlbGYucmVxID0gdXJsCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnJlcSA9IE5vbmUKLSAgICAgICAgc2VsZi5tc2cgPSAnT0snCisgICAgICAgIHNlbGYubXNnID0gbXNnIG9yICdPSycKKyAgICAgICAgc2VsZi5jb2RlID0gY29kZSBvciAyMDAKIAogICAgIGRlZiBnZXRoZWFkZXIoc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKICAgICAgICAgcmV0dXJuIHsKQEAgLTU4LDcgKzYwLDcgQEAKICAgICAgICAgcmV0dXJuIGIneHl6enknCiAKICAgICBkZWYgZ2V0Y29kZShzZWxmKToKLSAgICAgICAgcmV0dXJuIDIwMAorICAgICAgICByZXR1cm4gc2VsZi5jb2RlCiAKIAogY2xhc3MgdXBsb2FkVGVzdENhc2UoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKQEAgLTY4LDEzICs3MCwxNSBAQAogICAgICAgICBzZWxmLm9sZF9vcGVuID0gdXBsb2FkX21vZC51cmxvcGVuCiAgICAgICAgIHVwbG9hZF9tb2QudXJsb3BlbiA9IHNlbGYuX3VybG9wZW4KICAgICAgICAgc2VsZi5sYXN0X29wZW4gPSBOb25lCisgICAgICAgIHNlbGYubmV4dF9tc2cgPSBOb25lCisgICAgICAgIHNlbGYubmV4dF9jb2RlID0gTm9uZQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB1cGxvYWRfbW9kLnVybG9wZW4gPSBzZWxmLm9sZF9vcGVuCiAgICAgICAgIHN1cGVyKHVwbG9hZFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCiAKICAgICBkZWYgX3VybG9wZW4oc2VsZiwgdXJsKToKLSAgICAgICAgc2VsZi5sYXN0X29wZW4gPSBGYWtlT3Blbih1cmwpCisgICAgICAgIHNlbGYubGFzdF9vcGVuID0gRmFrZU9wZW4odXJsLCBtc2c9c2VsZi5uZXh0X21zZywgY29kZT1zZWxmLm5leHRfY29kZSkKICAgICAgICAgcmV0dXJuIHNlbGYubGFzdF9vcGVuCiAKICAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgpAQCAtMTI0LDE2ICsxMjgsMjEgQEAKICAgICAgICAgIyB3aGF0IGRpZCB3ZSBzZW5kID8KICAgICAgICAgaGVhZGVycyA9IGRpY3Qoc2VsZi5sYXN0X29wZW4ucmVxLmhlYWRlcnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZGVyc1snQ29udGVudC1sZW5ndGgnXSwgJzIwODcnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGVhZGVyc1snQ29udGVudC10eXBlJ10uc3RhcnRzd2l0aCgnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKQorICAgICAgICBjb250ZW50X3R5cGUgPSBoZWFkZXJzWydDb250ZW50LXR5cGUnXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGVudF90eXBlLnN0YXJ0c3dpdGgoJ211bHRpcGFydC9mb3JtLWRhdGEnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X21ldGhvZCgpLCAnUE9TVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3h4eCcsIHNlbGYubGFzdF9vcGVuLnJlcS5kYXRhKQorICAgICAgICBleHBlY3RlZF91cmwgPSAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X2Z1bGxfdXJsKCksIGV4cGVjdGVkX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIneHh4JyBpbiBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKIAogICAgICAgICAjIFRoZSBQeVBJIHJlc3BvbnNlIGJvZHkgd2FzIGVjaG9lZAogICAgICAgICByZXN1bHRzID0gc2VsZi5nZXRfbG9ncyhJTkZPKQogICAgICAgICBzZWxmLmFzc2VydEluKCd4eXp6eVxuJywgcmVzdWx0c1stMV0pCiAKKyAgICBkZWYgdGVzdF91cGxvYWRfZmFpbHMoc2VsZik6CisgICAgICAgIHNlbGYubmV4dF9tc2cgPSAiTm90IEZvdW5kIgorICAgICAgICBzZWxmLm5leHRfY29kZSA9IDQwNAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNFcnJvciwgc2VsZi50ZXN0X3VwbG9hZCkKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKHVwbG9hZFRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQppbmRleCBhMWFiZjhmLi40ZTlkNzliIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQpAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9yb290LCAnYzpcXHJvb3QnLCAnaXRzXFxoZXJlJykKIAotICAgICAgICAjIFhYWCBwbGF0Zm9ybXMgdG8gYmUgY292ZXJlZDogb3MyLCBtYWMKKyAgICAgICAgIyBYWFggcGxhdGZvcm1zIHRvIGJlIGNvdmVyZWQ6IG1hYwogCiAgICAgZGVmIHRlc3RfY2hlY2tfZW52aXJvbihzZWxmKToKICAgICAgICAgdXRpbC5fZW52aXJvbl9jaGVja2VkID0gMApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CmluZGV4IGI1NTg5NTcuLjVhZGNhYzUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKQEAgLTYsNyArNiw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHJlCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdHJpbmcKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgpAQCAtMTU0LDEyICsxNTQsNiBAQAogICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCiAKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgIChkcml2ZSwgcGF0aCkgPSBvcy5wYXRoLnNwbGl0ZHJpdmUocGF0aG5hbWUpCi0gICAgICAgIGlmIHBhdGhbMF0gPT0gb3Muc2VwOgotICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCi0KICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKCJub3RoaW5nIGtub3duIGFib3V0IHBsYXRmb3JtICclcyciICUgb3MubmFtZSkKIApAQCAtNDQ0LDkgKzQzOCwxMCBAQAogICAgICAgICAgICAgIyAgIGNmaWxlIC0gYnl0ZS1jb21waWxlZCBmaWxlCiAgICAgICAgICAgICAjICAgZGZpbGUgLSBwdXJwb3J0ZWQgc291cmNlIGZpbGVuYW1lIChzYW1lIGFzICdmaWxlJyBieSBkZWZhdWx0KQogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQorICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKICAgICAgICAgICAgIGRmaWxlID0gZmlsZQogICAgICAgICAgICAgaWYgcHJlZml4OgogICAgICAgICAgICAgICAgIGlmIGZpbGVbOmxlbihwcmVmaXgpXSAhPSBwcmVmaXg6CmRpZmYgLS1naXQgYS9MaWIvZG9jdGVzdC5weSBiL0xpYi9kb2N0ZXN0LnB5CmluZGV4IDNmMGQ5ZDkuLmQyMTJhZDYgMTAwNjQ0Ci0tLSBhL0xpYi9kb2N0ZXN0LnB5CisrKyBiL0xpYi9kb2N0ZXN0LnB5CkBAIC02Miw2ICs2Miw3IEBACiAgICAgJ1JFUE9SVF9ORElGRicsCiAgICAgJ1JFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUnLAogICAgICdSRVBPUlRJTkdfRkxBR1MnLAorICAgICdGQUlMX0ZBU1QnLAogICAgICMgMS4gVXRpbGl0eSBGdW5jdGlvbnMKICAgICAjIDIuIEV4YW1wbGUgJiBEb2NUZXN0CiAgICAgJ0V4YW1wbGUnLApAQCAtOTIsNiArOTMsNyBAQAogXQogCiBpbXBvcnQgX19mdXR1cmVfXworaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBsaW5lY2FjaGUKQEAgLTE1MCwxMSArMTUyLDEzIEBACiBSRVBPUlRfQ0RJRkYgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfQ0RJRkYnKQogUkVQT1JUX05ESUZGID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX05ESUZGJykKIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFJykKK0ZBSUxfRkFTVCA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ0ZBSUxfRkFTVCcpCiAKIFJFUE9SVElOR19GTEFHUyA9IChSRVBPUlRfVURJRkYgfAogICAgICAgICAgICAgICAgICAgIFJFUE9SVF9DRElGRiB8CiAgICAgICAgICAgICAgICAgICAgUkVQT1JUX05ESUZGIHwKLSAgICAgICAgICAgICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFKQorICAgICAgICAgICAgICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgfAorICAgICAgICAgICAgICAgICAgIEZBSUxfRkFTVCkKIAogIyBTcGVjaWFsIHN0cmluZyBtYXJrZXJzIGZvciB1c2UgaW4gYHdhbnRgIHN0cmluZ3M6CiBCTEFOS0xJTkVfTUFSS0VSID0gJzxCTEFOS0xJTkU+JwpAQCAtMjEyLDcgKzIxNiw3IEBACiAgICAgaWYgbW9kdWxlX3JlbGF0aXZlOgogICAgICAgICBwYWNrYWdlID0gX25vcm1hbGl6ZV9tb2R1bGUocGFja2FnZSwgMykKICAgICAgICAgZmlsZW5hbWUgPSBfbW9kdWxlX3JlbGF0aXZlX3BhdGgocGFja2FnZSwgZmlsZW5hbWUpCi0gICAgICAgIGlmIGhhc2F0dHIocGFja2FnZSwgJ19fbG9hZGVyX18nKToKKyAgICAgICAgaWYgZ2V0YXR0cihwYWNrYWdlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdnZXRfZGF0YScpOgogICAgICAgICAgICAgICAgIGZpbGVfY29udGVudHMgPSBwYWNrYWdlLl9fbG9hZGVyX18uZ2V0X2RhdGEoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50cyA9IGZpbGVfY29udGVudHMuZGVjb2RlKGVuY29kaW5nKQpAQCAtOTQwLDYgKzk0NCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIG1vZHVsZSBpcyBpbnNwZWN0LmdldG1vZHVsZShvYmplY3QpCiAgICAgICAgIGVsaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fZGljdF9fIGlzIG9iamVjdC5fX2dsb2JhbHNfXworICAgICAgICBlbGlmIGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yKG9iamVjdCk6CisgICAgICAgICAgICBpZiBoYXNhdHRyKG9iamVjdCwgJ19fb2JqY2xhc3NfXycpOgorICAgICAgICAgICAgICAgIG9ial9tb2QgPSBvYmplY3QuX19vYmpjbGFzc19fLl9fbW9kdWxlX18KKyAgICAgICAgICAgIGVsaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CisgICAgICAgICAgICAgICAgb2JqX21vZCA9IG9iamVjdC5fX21vZHVsZV9fCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlICMgW1hYXSBubyBlYXN5IHdheSB0byB0ZWxsIG90aGVyd2lzZQorICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5fX25hbWVfXyA9PSBvYmpfbW9kCiAgICAgICAgIGVsaWYgaW5zcGVjdC5pc2NsYXNzKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fbmFtZV9fID09IG9iamVjdC5fX21vZHVsZV9fCiAgICAgICAgIGVsaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CkBAIC05NzIsNyArOTg0LDcgQEAKICAgICAgICAgICAgIGZvciB2YWxuYW1lLCB2YWwgaW4gb2JqLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgdmFsbmFtZSA9ICclcy4lcycgJSAobmFtZSwgdmFsbmFtZSkKICAgICAgICAgICAgICAgICAjIFJlY3Vyc2UgdG8gZnVuY3Rpb25zICYgY2xhc3Nlcy4KLSAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpKSBhbmQKKyAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkpIGFuZAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcm9tX21vZHVsZShtb2R1bGUsIHZhbCkpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5kKHRlc3RzLCB2YWwsIHZhbG5hbWUsIG1vZHVsZSwgc291cmNlX2xpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JzLCBzZWVuKQpAQCAtOTg0LDkgKzk5Niw4IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvY1Rlc3RGaW5kZXIuZmluZDogX190ZXN0X18ga2V5cyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3RyaW5nczogJXIiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSh2YWxuYW1lKSwpKQotICAgICAgICAgICAgICAgIGlmIG5vdCAoaW5zcGVjdC5pc2Z1bmN0aW9uKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNtZXRob2QodmFsKSBvciBpbnNwZWN0LmlzbW9kdWxlKHZhbCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodmFsLCBzdHIpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNtb2R1bGUodmFsKSBvciBpc2luc3RhbmNlKHZhbCwgc3RyKSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvY1Rlc3RGaW5kZXIuZmluZDogX190ZXN0X18gdmFsdWVzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzdHJpbmdzLCBmdW5jdGlvbnMsIG1ldGhvZHMsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3Nlcywgb3IgbW9kdWxlczogJXIiICUKQEAgLTEwMDUsNyArMTAxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGdldGF0dHIob2JqLCB2YWxuYW1lKS5fX2Z1bmNfXwogCiAgICAgICAgICAgICAgICAgIyBSZWN1cnNlIHRvIG1ldGhvZHMsIHByb3BlcnRpZXMsIGFuZCBuZXN0ZWQgY2xhc3Nlcy4KLSAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCisgICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0Lmlzcm91dGluZSh2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCiAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh2YWwsIHByb3BlcnR5KSkgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnJvbV9tb2R1bGUobW9kdWxlLCB2YWwpKToKICAgICAgICAgICAgICAgICAgICAgdmFsbmFtZSA9ICclcy4lcycgJSAobmFtZSwgdmFsbmFtZSkKQEAgLTEzNjcsNiArMTM3OCw5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgKCJ1bmtub3duIG91dGNvbWUiLCBvdXRjb21lKQogCisgICAgICAgICAgICBpZiBmYWlsdXJlcyBhbmQgc2VsZi5vcHRpb25mbGFncyAmIEZBSUxfRkFTVDoKKyAgICAgICAgICAgICAgICBicmVhaworCiAgICAgICAgICMgUmVzdG9yZSB0aGUgb3B0aW9uIGZsYWdzIChpbiBjYXNlIHRoZXkgd2VyZSBtb2RpZmllZCkKICAgICAgICAgc2VsZi5vcHRpb25mbGFncyA9IG9yaWdpbmFsX29wdGlvbmZsYWdzCiAKQEAgLTIzMDgsNiArMjMyMiwxMiBAQAogICAgIF9fc3RyX18gPSBzaG9ydERlc2NyaXB0aW9uCiAKIAorY2xhc3MgX0RvY1Rlc3RTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorCisgICAgZGVmIF9yZW1vdmVUZXN0QXRJbmRleChzZWxmLCBpbmRleCk6CisgICAgICAgIHBhc3MKKworCiBkZWYgRG9jVGVzdFN1aXRlKG1vZHVsZT1Ob25lLCBnbG9icz1Ob25lLCBleHRyYWdsb2JzPU5vbmUsIHRlc3RfZmluZGVyPU5vbmUsCiAgICAgICAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgIiIiCkBAIC0yMzUzLDcgKzIzNzMsNyBAQAogCiAgICAgaWYgbm90IHRlc3RzIGFuZCBzeXMuZmxhZ3Mub3B0aW1pemUgPj0yOgogICAgICAgICAjIFNraXAgZG9jdGVzdHMgd2hlbiBydW5uaW5nIHdpdGggLU8yCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKICAgICAgICAgc3VpdGUuYWRkVGVzdChTa2lwRG9jVGVzdENhc2UobW9kdWxlKSkKICAgICAgICAgcmV0dXJuIHN1aXRlCiAgICAgZWxpZiBub3QgdGVzdHM6CkBAIC0yMzY3LDcgKzIzODcsNyBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1vZHVsZSwgImhhcyBubyBkb2NzdHJpbmdzIikKIAogICAgIHRlc3RzLnNvcnQoKQotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogCiAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CiAgICAgICAgIGlmIGxlbih0ZXN0LmV4YW1wbGVzKSA9PSAwOgpAQCAtMjQ3Nyw3ICsyNDk3LDcgQEAKICAgICBlbmNvZGluZwogICAgICAgQW4gZW5jb2RpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29udmVydCB0aGUgZmlsZXMgdG8gdW5pY29kZS4KICAgICAiIiIKLSAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKIAogICAgICMgV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgX25vcm1hbGl6ZV9tb2R1bGUgaXMgY2FsbGVkIGF0IHRoZSByaWdodAogICAgICMgbGV2ZWwuICBJZiBpdCB3ZXJlIGNhbGxlZCBpbiBEb2NGaWxlVGVzdCwgdGhlbiB0aGlzIGZ1bmN0aW9uCkBAIC0yNzI3LDEzICsyNzQ3LDMwIEBACiAKIAogZGVmIF90ZXN0KCk6Ci0gICAgdGVzdGZpbGVzID0gW2FyZyBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XSBpZiBhcmcgYW5kIGFyZ1swXSAhPSAnLSddCi0gICAgaWYgbm90IHRlc3RmaWxlczoKLSAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCi0gICAgICAgIGlmICdfX2xvYWRlcl9fJyBpbiBnbG9iYWxzKCk6ICAgICAgICAgICMgcHl0aG9uIC1tCi0gICAgICAgICAgICBuYW1lLCBfID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQotICAgICAgICBwcmludCgidXNhZ2U6IHswfSBbLXZdIGZpbGUgLi4uIi5mb3JtYXQobmFtZSkpCi0gICAgICAgIHJldHVybiAyCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ImRvY3Rlc3QgcnVubmVyIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdmVyeSB2ZXJib3NlIG91dHB1dCBmb3IgYWxsIHRlc3RzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW9wdGlvbicsIGFjdGlvbj0nYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9T1BUSU9ORkxBR1NfQllfTkFNRS5rZXlzKCksIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnc3BlY2lmeSBhIGRvY3Rlc3Qgb3B0aW9uIGZsYWcgdG8gYXBwbHknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHRvIHRoZSB0ZXN0IHJ1bjsgbWF5IGJlIHNwZWNpZmllZCBtb3JlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB0aGFuIG9uY2UgdG8gYXBwbHkgbXVsdGlwbGUgb3B0aW9ucycpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbC1mYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdzdG9wIHJ1bm5pbmcgdGVzdHMgYWZ0ZXIgZmlyc3QgZmFpbHVyZSAodGhpcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaXMgYSBzaG9ydGhhbmQgZm9yIC1vIEZBSUxfRkFTVCwgYW5kIGlzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgLW8gb3B0aW9ucyknKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0cyB0byBydW4nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgdGVzdGZpbGVzID0gYXJncy5maWxlCisgICAgIyBWZXJib3NlIHVzZWQgdG8gYmUgaGFuZGxlZCBieSB0aGUgImluc3BlY3QgYXJndiIgbWFnaWMgaW4gRG9jVGVzdFJ1bm5lciwKKyAgICAjIGJ1dCBzaW5jZSB3ZSBhcmUgdXNpbmcgYXJncGFyc2Ugd2UgYXJlIHBhc3NpbmcgaXQgbWFudWFsbHkgbm93LgorICAgIHZlcmJvc2UgPSBhcmdzLnZlcmJvc2UKKyAgICBvcHRpb25zID0gMAorICAgIGZvciBvcHRpb24gaW4gYXJncy5vcHRpb246CisgICAgICAgIG9wdGlvbnMgfD0gT1BUSU9ORkxBR1NfQllfTkFNRVtvcHRpb25dCisgICAgaWYgYXJncy5mYWlsX2Zhc3Q6CisgICAgICAgIG9wdGlvbnMgfD0gRkFJTF9GQVNUCiAgICAgZm9yIGZpbGVuYW1lIGluIHRlc3RmaWxlczoKICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOgogICAgICAgICAgICAgIyBJdCBpcyBhIG1vZHVsZSAtLSBpbnNlcnQgaXRzIGRpciBpbnRvIHN5cy5wYXRoIGFuZCB0cnkgdG8KQEAgLTI3NDMsOSArMjc4MCwxMCBAQAogICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcm5hbWUpCiAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhmaWxlbmFtZVs6LTNdKQogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3Rtb2QobSkKKyAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdG1vZChtLCB2ZXJib3NlPXZlcmJvc2UsIG9wdGlvbmZsYWdzPW9wdGlvbnMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCisgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT12ZXJib3NlLCBvcHRpb25mbGFncz1vcHRpb25zKQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weSBiL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQppbmRleCAwMzY5ZTAxLi4xODA2Y2FjIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CkBAIC03MCw3ICs3MCw3IEBACiBpbXBvcnQgcmUKIGltcG9ydCB1cmxsaWIgICAjIEZvciB1cmxsaWIucGFyc2UudW5xdW90ZQogZnJvbSBzdHJpbmcgaW1wb3J0IGhleGRpZ2l0cwotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgT3JkZXJlZERpY3QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiBmcm9tIGVtYWlsIGltcG9ydCBfZW5jb2RlZF93b3JkcyBhcyBfZXcKIGZyb20gZW1haWwgaW1wb3J0IGVycm9ycwogZnJvbSBlbWFpbCBpbXBvcnQgdXRpbHMKQEAgLTM2OCw4ICszNjgsNyBAQAogICAgICAgICAgICAgICAgIHlpZWxkIChpbmRlbnQgKyAnICAgICEhIGludmFsaWQgZWxlbWVudCBpbiB0b2tlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpc3Q6IHshcn0nLmZvcm1hdCh0b2tlbikpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHRva2VuLl9wcChpbmRlbnQrJyAgICAnKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gdG9rZW4uX3BwKGluZGVudCsnICAgICcpCiAgICAgICAgIGlmIHNlbGYuZGVmZWN0czoKICAgICAgICAgICAgIGV4dHJhID0gJyBEZWZlY3RzOiB7fScuZm9ybWF0KHNlbGYuZGVmZWN0cykKICAgICAgICAgZWxzZToKQEAgLTEzMTUsMjQgKzEzMTQsMjIgQEAKICMgUGFyc2VyCiAjCiAKLSIiIlBhcnNlIHN0cmluZ3MgYWNjb3JkaW5nIHRvIFJGQzgyMi8yMDQ3LzI4MjIvNTMyMiBydWxlcy4KLQotVGhpcyBpcyBhIHN0YXRlbGVzcyBwYXJzZXIuICBFYWNoIGdldF9YWFggZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBhbmQKLXJldHVybnMgZWl0aGVyIGEgVGVybWluYWwgb3IgYSBUb2tlbkxpc3QgcmVwcmVzZW50aW5nIHRoZSBSRkMgb2JqZWN0IG5hbWVkCi1ieSB0aGUgbWV0aG9kIGFuZCBhIHN0cmluZyBjb250YWluaW5nIHRoZSByZW1haW5pbmcgdW5wYXJzZWQgY2hhcmFjdGVycwotZnJvbSB0aGUgaW5wdXQuICBUaHVzIGEgcGFyc2VyIG1ldGhvZCBjb25zdW1lcyB0aGUgbmV4dCBzeW50YWN0aWMgY29uc3RydWN0Ci1vZiBhIGdpdmVuIHR5cGUgYW5kIHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGNvbnN0cnVjdCBwbHVzIHRoZQotdW5wYXJzZWQgcmVtYWluZGVyIG9mIHRoZSBpbnB1dCBzdHJpbmcuCi0KLUZvciBleGFtcGxlLCBpZiB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN0cnVjdHVyZWQgaGVhZGVyIGlzIGEgJ3BocmFzZScsCi10aGVuOgotCi0gICAgcGhyYXNlLCB2YWx1ZSA9IGdldF9waHJhc2UodmFsdWUpCi0KLXJldHVybnMgdGhlIGNvbXBsZXRlIHBocmFzZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHZhbHVlLCBwbHVzIGFueQotY2hhcmFjdGVycyBsZWZ0IGluIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIHBocmFzZSBpcyByZW1vdmVkLgotCi0iIiIKKyMgUGFyc2Ugc3RyaW5ncyBhY2NvcmRpbmcgdG8gUkZDODIyLzIwNDcvMjgyMi81MzIyIHJ1bGVzLgorIworIyBUaGlzIGlzIGEgc3RhdGVsZXNzIHBhcnNlci4gIEVhY2ggZ2V0X1hYWCBmdW5jdGlvbiBhY2NlcHRzIGEgc3RyaW5nIGFuZAorIyByZXR1cm5zIGVpdGhlciBhIFRlcm1pbmFsIG9yIGEgVG9rZW5MaXN0IHJlcHJlc2VudGluZyB0aGUgUkZDIG9iamVjdCBuYW1lZAorIyBieSB0aGUgbWV0aG9kIGFuZCBhIHN0cmluZyBjb250YWluaW5nIHRoZSByZW1haW5pbmcgdW5wYXJzZWQgY2hhcmFjdGVycworIyBmcm9tIHRoZSBpbnB1dC4gIFRodXMgYSBwYXJzZXIgbWV0aG9kIGNvbnN1bWVzIHRoZSBuZXh0IHN5bnRhY3RpYyBjb25zdHJ1Y3QKKyMgb2YgYSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjb25zdHJ1Y3QgcGx1cyB0aGUKKyMgdW5wYXJzZWQgcmVtYWluZGVyIG9mIHRoZSBpbnB1dCBzdHJpbmcuCisjCisjIEZvciBleGFtcGxlLCBpZiB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN0cnVjdHVyZWQgaGVhZGVyIGlzIGEgJ3BocmFzZScsCisjIHRoZW46CisjCisjICAgICBwaHJhc2UsIHZhbHVlID0gZ2V0X3BocmFzZSh2YWx1ZSkKKyMKKyMgcmV0dXJucyB0aGUgY29tcGxldGUgcGhyYXNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgdmFsdWUsIHBsdXMgYW55CisjIGNoYXJhY3RlcnMgbGVmdCBpbiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBwaHJhc2UgaXMgcmVtb3ZlZC4KIAogX3dzcF9zcGxpdHRlciA9IHJlLmNvbXBpbGUocicoW3t9XSspJy5mb3JtYXQoJycuam9pbihXU1ApKSkuc3BsaXQKIF9ub25fYXRvbV9lbmRfbWF0Y2hlciA9IHJlLmNvbXBpbGUociJbXnt9XSsiLmZvcm1hdCgKQEAgLTI5MDAsNyArMjg5Nyw3IEBACiAgICAgdHJ5OgogICAgICAgICB0b2tlbiwgdmFsdWUgPSBnZXRfdG9rZW4odmFsdWUpCiAgICAgZXhjZXB0IGVycm9ycy5IZWFkZXJQYXJzZUVycm9yOgotICAgICAgICBjdHlwZS5kZWZlY3RzLmFwcGVuZChlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdCgKKyAgICAgICAgZGlzcF9oZWFkZXIuZGVmZWN0cy5hcHBlbmQoZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3QoCiAgICAgICAgICAgICAiRXhwZWN0ZWQgY29udGVudCBkaXNwb3NpdGlvbiBidXQgZm91bmQgeyFyfSIuZm9ybWF0KHZhbHVlKSkpCiAgICAgICAgIF9maW5kX21pbWVfcGFyYW1ldGVycyhkaXNwX2hlYWRlciwgdmFsdWUpCiAgICAgICAgIHJldHVybiBkaXNwX2hlYWRlcgpAQCAtMjkzMSw4ICsyOTI4LDggQEAKICAgICB0cnk6CiAgICAgICAgIHRva2VuLCB2YWx1ZSA9IGdldF90b2tlbih2YWx1ZSkKICAgICBleGNlcHQgZXJyb3JzLkhlYWRlclBhcnNlRXJyb3I6Ci0gICAgICAgIGN0eXBlLmRlZmVjdHMuYXBwZW5kKGVycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0KAotICAgICAgICAgICAgIkV4cGVjdGVkIGNvbnRlbnQgdHJuYXNmZXIgZW5jb2RpbmcgYnV0IGZvdW5kIHshcn0iLmZvcm1hdCh2YWx1ZSkpKQorICAgICAgICBjdGVfaGVhZGVyLmRlZmVjdHMuYXBwZW5kKGVycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0KAorICAgICAgICAgICAgIkV4cGVjdGVkIGNvbnRlbnQgdHJhbnNmZXIgZW5jb2RpbmcgYnV0IGZvdW5kIHshcn0iLmZvcm1hdCh2YWx1ZSkpKQogICAgIGVsc2U6CiAgICAgICAgIGN0ZV9oZWFkZXIuYXBwZW5kKHRva2VuKQogICAgICAgICBjdGVfaGVhZGVyLmN0ZSA9IHRva2VuLnZhbHVlLnN0cmlwKCkubG93ZXIoKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2NvbnRlbnRtYW5hZ2VyLnB5IGIvTGliL2VtYWlsL2NvbnRlbnRtYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNjM2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkKQEAgLTAsMCArMSwyNDkgQEAKK2ltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGVtYWlsLmNoYXJzZXQKK2ltcG9ydCBlbWFpbC5tZXNzYWdlCitpbXBvcnQgZW1haWwuZXJyb3JzCitmcm9tIGVtYWlsIGltcG9ydCBxdW9wcmltaW1lCisKK2NsYXNzIENvbnRlbnRNYW5hZ2VyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9oYW5kbGVycyA9IHt9CisgICAgICAgIHNlbGYuc2V0X2hhbmRsZXJzID0ge30KKworICAgIGRlZiBhZGRfZ2V0X2hhbmRsZXIoc2VsZiwga2V5LCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi5nZXRfaGFuZGxlcnNba2V5XSA9IGhhbmRsZXIKKworICAgIGRlZiBnZXRfY29udGVudChzZWxmLCBtc2csICphcmdzLCAqKmt3KToKKyAgICAgICAgY29udGVudF90eXBlID0gbXNnLmdldF9jb250ZW50X3R5cGUoKQorICAgICAgICBpZiBjb250ZW50X3R5cGUgaW4gc2VsZi5nZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaGFuZGxlcnNbY29udGVudF90eXBlXShtc2csICphcmdzLCAqKmt3KQorICAgICAgICBtYWludHlwZSA9IG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpCisgICAgICAgIGlmIG1haW50eXBlIGluIHNlbGYuZ2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hhbmRsZXJzW21haW50eXBlXShtc2csICphcmdzLCAqKmt3KQorICAgICAgICBpZiAnJyBpbiBzZWxmLmdldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oYW5kbGVyc1snJ10obXNnLCAqYXJncywgKiprdykKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoY29udGVudF90eXBlKQorCisgICAgZGVmIGFkZF9zZXRfaGFuZGxlcihzZWxmLCB0eXBla2V5LCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi5zZXRfaGFuZGxlcnNbdHlwZWtleV0gPSBoYW5kbGVyCisKKyAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBvYmosICphcmdzLCAqKmt3KToKKyAgICAgICAgaWYgbXNnLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICAjIFhYWDogaXMgdGhpcyBlcnJvciBhIGdvb2QgaWRlYSBvciBub3Q/ICBXZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLAorICAgICAgICAgICAgIyBidXQgd2UgY2FuJ3QgYWRkIGl0IGxhdGVyLCBzbyBkbyBpdCBmb3Igbm93LgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzZXRfY29udGVudCBub3QgdmFsaWQgb24gbXVsdGlwYXJ0IikKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuX2ZpbmRfc2V0X2hhbmRsZXIobXNnLCBvYmopCisgICAgICAgIG1zZy5jbGVhcl9jb250ZW50KCkKKyAgICAgICAgaGFuZGxlcihtc2csIG9iaiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgX2ZpbmRfc2V0X2hhbmRsZXIoc2VsZiwgbXNnLCBvYmopOgorICAgICAgICBmdWxsX3BhdGhfZm9yX2Vycm9yID0gTm9uZQorICAgICAgICBmb3IgdHlwIGluIHR5cGUob2JqKS5fX21yb19fOgorICAgICAgICAgICAgaWYgdHlwIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1t0eXBdCisgICAgICAgICAgICBxbmFtZSA9IHR5cC5fX3F1YWxuYW1lX18KKyAgICAgICAgICAgIG1vZG5hbWUgPSBnZXRhdHRyKHR5cCwgJ19fbW9kdWxlX18nLCAnJykKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9ICcuJy5qb2luKChtb2RuYW1lLCBxbmFtZSkpIGlmIG1vZG5hbWUgZWxzZSBxbmFtZQorICAgICAgICAgICAgaWYgZnVsbF9wYXRoX2Zvcl9lcnJvciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aF9mb3JfZXJyb3IgPSBmdWxsX3BhdGgKKyAgICAgICAgICAgIGlmIGZ1bGxfcGF0aCBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbZnVsbF9wYXRoXQorICAgICAgICAgICAgaWYgcW5hbWUgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW3FuYW1lXQorICAgICAgICAgICAgbmFtZSA9IHR5cC5fX25hbWVfXworICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbbmFtZV0KKyAgICAgICAgaWYgTm9uZSBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tOb25lXQorICAgICAgICByYWlzZSBLZXlFcnJvcihmdWxsX3BhdGhfZm9yX2Vycm9yKQorCisKK3Jhd19kYXRhX21hbmFnZXIgPSBDb250ZW50TWFuYWdlcigpCisKKworZGVmIGdldF90ZXh0X2NvbnRlbnQobXNnLCBlcnJvcnM9J3JlcGxhY2UnKToKKyAgICBjb250ZW50ID0gbXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKQorICAgIGNoYXJzZXQgPSBtc2cuZ2V0X3BhcmFtKCdjaGFyc2V0JywgJ0FTQ0lJJykKKyAgICByZXR1cm4gY29udGVudC5kZWNvZGUoY2hhcnNldCwgZXJyb3JzPWVycm9ycykKK3Jhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKCd0ZXh0JywgZ2V0X3RleHRfY29udGVudCkKKworCitkZWYgZ2V0X25vbl90ZXh0X2NvbnRlbnQobXNnKToKKyAgICByZXR1cm4gbXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKQorZm9yIG1haW50eXBlIGluICdhdWRpbyBpbWFnZSB2aWRlbyBhcHBsaWNhdGlvbicuc3BsaXQoKToKKyAgICByYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcihtYWludHlwZSwgZ2V0X25vbl90ZXh0X2NvbnRlbnQpCisKKworZGVmIGdldF9tZXNzYWdlX2NvbnRlbnQobXNnKToKKyAgICByZXR1cm4gbXNnLmdldF9wYXlsb2FkKDApCitmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ21lc3NhZ2UvJytzdWJ0eXBlLCBnZXRfbWVzc2FnZV9jb250ZW50KQorCisKK2RlZiBnZXRfYW5kX2ZpeHVwX3Vua25vd25fbWVzc2FnZV9jb250ZW50KG1zZyk6CisgICAgIyBJZiB3ZSBkb24ndCB1bmRlcnN0YW5kIGEgbWVzc2FnZSBzdWJ0eXBlLCB3ZSBhcmUgc3VwcG9zZWQgdG8gdHJlYXQgaXQgYXMKKyAgICAjIGlmIGl0IHdlcmUgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLCBwZXIKKyAgICAjIHRvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi40LiAgRmVlZHBhcnNlciBkb2Vzbid0IGRvIHRoYXQsCisgICAgIyBzbyBkbyBvdXIgYmVzdCB0byBmaXggdGhpbmdzIHVwLiAgTm90ZSB0aGF0IGl0IGlzICpub3QqIGFwcHJvcHJpYXRlIHRvCisgICAgIyBtb2RlbCBtZXNzYWdlL3BhcnRpYWwgY29udGVudCBhcyBNZXNzYWdlIG9iamVjdHMsIHNvIHRoZXkgYXJlIGhhbmRsZWQKKyAgICAjIGhlcmUgYXMgd2VsbC4gIChIb3cgdG8gcmVhc3NlbWJsZSB0aGVtIGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcyBjb21tZW50IDopCisgICAgcmV0dXJuIGJ5dGVzKG1zZy5nZXRfcGF5bG9hZCgwKSkKK3Jhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKCdtZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9hbmRfZml4dXBfdW5rbm93bl9tZXNzYWdlX2NvbnRlbnQpCisKKworZGVmIF9wcmVwYXJlX3NldChtc2csIG1haW50eXBlLCBzdWJ0eXBlLCBoZWFkZXJzKToKKyAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJy8nLmpvaW4oKG1haW50eXBlLCBzdWJ0eXBlKSkKKyAgICBpZiBoZWFkZXJzOgorICAgICAgICBpZiBub3QgaGFzYXR0cihoZWFkZXJzWzBdLCAnbmFtZScpOgorICAgICAgICAgICAgbXAgPSBtc2cucG9saWN5CisgICAgICAgICAgICBoZWFkZXJzID0gW21wLmhlYWRlcl9mYWN0b3J5KCptcC5oZWFkZXJfc291cmNlX3BhcnNlKFtoZWFkZXJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIGhlYWRlciBpbiBoZWFkZXJzXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaGVhZGVyIGluIGhlYWRlcnM6CisgICAgICAgICAgICAgICAgaWYgaGVhZGVyLmRlZmVjdHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGhlYWRlci5kZWZlY3RzWzBdCisgICAgICAgICAgICAgICAgbXNnW2hlYWRlci5uYW1lXSA9IGhlYWRlcgorICAgICAgICBleGNlcHQgZW1haWwuZXJyb3JzLkhlYWRlckRlZmVjdCBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGhlYWRlcjoge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmZvbGQocG9saWN5PW1zZy5wb2xpY3kpKSkgZnJvbSBleGMKKworCitkZWYgX2ZpbmFsaXplX3NldChtc2csIGRpc3Bvc2l0aW9uLCBmaWxlbmFtZSwgY2lkLCBwYXJhbXMpOgorICAgIGlmIGRpc3Bvc2l0aW9uIGlzIE5vbmUgYW5kIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBkaXNwb3NpdGlvbiA9ICdhdHRhY2htZW50JworICAgIGlmIGRpc3Bvc2l0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICBtc2dbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9IGRpc3Bvc2l0aW9uCisgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIG1zZy5zZXRfcGFyYW0oJ2ZpbGVuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI9J0NvbnRlbnQtRGlzcG9zaXRpb24nLAorICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2U9VHJ1ZSkKKyAgICBpZiBjaWQgaXMgbm90IE5vbmU6CisgICAgICAgIG1zZ1snQ29udGVudC1JRCddID0gY2lkCisgICAgaWYgcGFyYW1zIGlzIG5vdCBOb25lOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBwYXJhbXMuaXRlbXMoKToKKyAgICAgICAgICAgIG1zZy5zZXRfcGFyYW0oa2V5LCB2YWx1ZSkKKworCisjIFhYWDogVGhpcyBpcyBhIGNsZWFuZWQtdXAgdmVyc2lvbiBvZiBiYXNlNjRtaW1lLmJvZHlfZW5jb2RlLiAgSXQgd291bGQKKyMgYmUgbmljZSB0byBkcm9wIGJvdGggdGhpcyBhbmQgcXVvcHJpbWltZS5ib2R5X2VuY29kZSBpbiBmYXZvciBvZgorIyBlbmhhbmNlZCBiaW5hc2NpaSByb3V0aW5lcyB0aGF0IGFjY2VwdGVkIGEgbWF4X2xpbmVfbGVuZ3RoIHBhcmFtZXRlci4KK2RlZiBfZW5jb2RlX2Jhc2U2NChkYXRhLCBtYXhfbGluZV9sZW5ndGgpOgorICAgIGVuY29kZWRfbGluZXMgPSBbXQorICAgIHVuZW5jb2RlZF9ieXRlc19wZXJfbGluZSA9IG1heF9saW5lX2xlbmd0aCAqIDMgLy8gNAorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgdW5lbmNvZGVkX2J5dGVzX3Blcl9saW5lKToKKyAgICAgICAgdGhpc2xpbmUgPSBkYXRhW2k6aSt1bmVuY29kZWRfYnl0ZXNfcGVyX2xpbmVdCisgICAgICAgIGVuY29kZWRfbGluZXMuYXBwZW5kKGJpbmFzY2lpLmIyYV9iYXNlNjQodGhpc2xpbmUpLmRlY29kZSgnYXNjaWknKSkKKyAgICByZXR1cm4gJycuam9pbihlbmNvZGVkX2xpbmVzKQorCisKK2RlZiBfZW5jb2RlX3RleHQoc3RyaW5nLCBjaGFyc2V0LCBjdGUsIHBvbGljeSk6CisgICAgbGluZXMgPSBzdHJpbmcuZW5jb2RlKGNoYXJzZXQpLnNwbGl0bGluZXMoKQorICAgIGxpbmVzZXAgPSBwb2xpY3kubGluZXNlcC5lbmNvZGUoJ2FzY2lpJykKKyAgICBkZWYgZW1iZWRlZF9ib2R5KGxpbmVzKTogcmV0dXJuIGxpbmVzZXAuam9pbihsaW5lcykgKyBsaW5lc2VwCisgICAgZGVmIG5vcm1hbF9ib2R5KGxpbmVzKTogcmV0dXJuIGInXG4nLmpvaW4obGluZXMpICsgYidcbicKKyAgICBpZiBjdGU9PU5vbmU6CisgICAgICAgICMgVXNlIGhldXJpc3RpY3MgdG8gZGVjaWRlIG9uIHRoZSAiYmVzdCIgZW5jb2RpbmcuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiAnN2JpdCcsIG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgKHBvbGljeS5jdGVfdHlwZSA9PSAnOGJpdCcgYW5kCisgICAgICAgICAgICAgICAgbWF4KGxlbih4KSBmb3IgeCBpbiBsaW5lcykgPD0gcG9saWN5Lm1heF9saW5lX2xlbmd0aCk6CisgICAgICAgICAgICByZXR1cm4gJzhiaXQnLCBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICBzbmlmZiA9IGVtYmVkZWRfYm9keShsaW5lc1s6MTBdKQorICAgICAgICBzbmlmZl9xcCA9IHF1b3ByaW1pbWUuYm9keV9lbmNvZGUoc25pZmYuZGVjb2RlKCdsYXRpbi0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKQorICAgICAgICBzbmlmZl9iYXNlNjQgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KHNuaWZmKQorICAgICAgICAjIFRoaXMgaXMgYSBsaXR0bGUgdW5mYWlyIHRvIHFwOyBpdCBpbmNsdWRlcyBsaW5lc2VwcywgYmFzZTY0IGRvZXNuJ3QuCisgICAgICAgIGlmIGxlbihzbmlmZl9xcCkgPiBsZW4oc25pZmZfYmFzZTY0KToKKyAgICAgICAgICAgIGN0ZSA9ICdiYXNlNjQnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjdGUgPSAncXVvdGVkLXByaW50YWJsZScKKyAgICAgICAgICAgIGlmIGxlbihsaW5lcykgPD0gMTA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGN0ZSwgc25pZmZfcXAKKyAgICBpZiBjdGUgPT0gJzdiaXQnOgorICAgICAgICBkYXRhID0gbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknKQorICAgIGVsaWYgY3RlID09ICc4Yml0JzoKKyAgICAgICAgZGF0YSA9IG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgZWxpZiBjdGUgPT0gJ3F1b3RlZC1wcmludGFibGUnOgorICAgICAgICBkYXRhID0gcXVvcHJpbWltZS5ib2R5X2VuY29kZShub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdsYXRpbi0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgZWxpZiBjdGUgPT0gJ2Jhc2U2NCc6CisgICAgICAgIGRhdGEgPSBfZW5jb2RlX2Jhc2U2NChlbWJlZGVkX2JvZHkobGluZXMpLCBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gY29udGVudCB0cmFuc2ZlciBlbmNvZGluZyB7fSIuZm9ybWF0KGN0ZSkpCisgICAgcmV0dXJuIGN0ZSwgZGF0YQorCisKK2RlZiBzZXRfdGV4dF9jb250ZW50KG1zZywgc3RyaW5nLCBzdWJ0eXBlPSJwbGFpbiIsIGNoYXJzZXQ9J3V0Zi04JywgY3RlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIF9wcmVwYXJlX3NldChtc2csICd0ZXh0Jywgc3VidHlwZSwgaGVhZGVycykKKyAgICBjdGUsIHBheWxvYWQgPSBfZW5jb2RlX3RleHQoc3RyaW5nLCBjaGFyc2V0LCBjdGUsIG1zZy5wb2xpY3kpCisgICAgbXNnLnNldF9wYXlsb2FkKHBheWxvYWQpCisgICAgbXNnLnNldF9wYXJhbSgnY2hhcnNldCcsCisgICAgICAgICAgICAgICAgICBlbWFpbC5jaGFyc2V0LkFMSUFTRVMuZ2V0KGNoYXJzZXQsIGNoYXJzZXQpLAorICAgICAgICAgICAgICAgICAgcmVwbGFjZT1UcnVlKQorICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gY3RlCisgICAgX2ZpbmFsaXplX3NldChtc2csIGRpc3Bvc2l0aW9uLCBmaWxlbmFtZSwgY2lkLCBwYXJhbXMpCityYXdfZGF0YV9tYW5hZ2VyLmFkZF9zZXRfaGFuZGxlcihzdHIsIHNldF90ZXh0X2NvbnRlbnQpCisKKworZGVmIHNldF9tZXNzYWdlX2NvbnRlbnQobXNnLCBtZXNzYWdlLCBzdWJ0eXBlPSJyZmM4MjIiLCBjdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIGlmIHN1YnR5cGUgPT0gJ3BhcnRpYWwnOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtZXNzYWdlL3BhcnRpYWwgaXMgbm90IHN1cHBvcnRlZCBmb3IgTWVzc2FnZSBvYmplY3RzIikKKyAgICBpZiBzdWJ0eXBlID09ICdyZmM4MjInOgorICAgICAgICBpZiBjdGUgbm90IGluIChOb25lLCAnN2JpdCcsICc4Yml0JywgJ2JpbmFyeScpOgorICAgICAgICAgICAgIyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjEgbWFuZGF0ZS4KKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIm1lc3NhZ2UvcmZjODIyIHBhcnRzIGRvIG5vdCBzdXBwb3J0IGN0ZT17fSIuZm9ybWF0KGN0ZSkpCisgICAgICAgICMgOGJpdCB3aWxsIGdldCBjb2VyY2VkIG9uIHNlcmlhbGl6YXRpb24gaWYgcG9saWN5LmN0ZV90eXBlPSc3Yml0Jy4gIFdlCisgICAgICAgICMgbWF5IGVuZCB1cCBjbGFpbWluZyA4Yml0IHdoZW4gaXQgaXNuJ3QgbmVlZGVkLCBidXQgdGhlIG9ubHkgbmVnYXRpdmUKKyAgICAgICAgIyByZXN1bHQgb2YgdGhhdCBzaG91bGQgYmUgYSBnYXRld2F5IHRoYXQgbmVlZHMgdG8gY29lcmNlIHRvIDdiaXQKKyAgICAgICAgIyBoYXZpbmcgdG8gbG9vayB0aHJvdWdoIHRoZSB3aG9sZSBlbWJlZGRlZCBtZXNzYWdlIHRvIGRpc2NvdmVyIHdoZXRoZXIKKyAgICAgICAgIyBvciBub3QgaXQgYWN0dWFsbHkgaGFzIHRvIGRvIGFueXRoaW5nLgorICAgICAgICBjdGUgPSAnOGJpdCcgaWYgY3RlIGlzIE5vbmUgZWxzZSBjdGUKKyAgICBlbGlmIHN1YnR5cGUgPT0gJ2V4dGVybmFsLWJvZHknOgorICAgICAgICBpZiBjdGUgbm90IGluIChOb25lLCAnN2JpdCcpOgorICAgICAgICAgICAgIyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjMgbWFuZGF0ZS4KKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIm1lc3NhZ2UvZXh0ZXJuYWwtYm9keSBwYXJ0cyBkbyBub3Qgc3VwcG9ydCBjdGU9e30iLmZvcm1hdChjdGUpKQorICAgICAgICBjdGUgPSAnN2JpdCcKKyAgICBlbGlmIGN0ZSBpcyBOb25lOgorICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuNCBzYXlzIGFsbCBmdXR1cmUKKyAgICAgICAgIyBzdWJ0eXBlcyBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byA3Yml0LCBzbyBhc3N1bWUgdGhhdC4KKyAgICAgICAgY3RlID0gJzdiaXQnCisgICAgX3ByZXBhcmVfc2V0KG1zZywgJ21lc3NhZ2UnLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIG1zZy5zZXRfcGF5bG9hZChbbWVzc2FnZV0pCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK3Jhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgc2V0X21lc3NhZ2VfY29udGVudCkKKworCitkZWYgc2V0X2J5dGVzX2NvbnRlbnQobXNnLCBkYXRhLCBtYWludHlwZSwgc3VidHlwZSwgY3RlPSdiYXNlNjQnLAorICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICBfcHJlcGFyZV9zZXQobXNnLCBtYWludHlwZSwgc3VidHlwZSwgaGVhZGVycykKKyAgICBpZiBjdGUgPT0gJ2Jhc2U2NCc6CisgICAgICAgIGRhdGEgPSBfZW5jb2RlX2Jhc2U2NChkYXRhLCBtYXhfbGluZV9sZW5ndGg9bXNnLnBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgZWxpZiBjdGUgPT0gJ3F1b3RlZC1wcmludGFibGUnOgorICAgICAgICAjIFhYWDogcXVvcHJpbWltZS5ib2R5X2VuY29kZSB3b24ndCBlbmNvZGUgbmV3bGluZSBjaGFyYWN0ZXJzIGluIGRhdGEsCisgICAgICAgICMgc28gd2UgY2FuJ3QgdXNlIGl0LiAgVGhpcyBtZWFucyBtYXhfbGluZV9sZW5ndGggaXMgaWdub3JlZC4gIEFub3RoZXIKKyAgICAgICAgIyBidWcgdG8gZml4IGxhdGVyLiAgKE5vdGU6IGVuY29kZXJzLnF1b3ByaSBpcyBicm9rZW4gb24gbGluZSBlbmRzLikKKyAgICAgICAgZGF0YSA9IGJpbmFzY2lpLmIyYV9xcChkYXRhLCBpc3RleHQ9RmFsc2UsIGhlYWRlcj1GYWxzZSwgcXVvdGV0YWJzPVRydWUpCisgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgnYXNjaWknKQorICAgIGVsaWYgY3RlID09ICc3Yml0JzoKKyAgICAgICAgIyBNYWtlIHN1cmUgaXQgcmVhbGx5IGlzIG9ubHkgQVNDSUkuICBUaGUgZWFybHkgd2FybmluZyBoZXJlIHNlZW1zCisgICAgICAgICMgd29ydGggdGhlIG92ZXJoZWFkLi4uaWYgeW91IGNhcmUgd3JpdGUgeW91ciBvd24gY29udGVudCBtYW5hZ2VyIDopLgorICAgICAgICBkYXRhLmVuY29kZSgnYXNjaWknKQorICAgIGVsaWYgY3RlIGluICgnOGJpdCcsICdiaW5hcnknKToKKyAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgIG1zZy5zZXRfcGF5bG9hZChkYXRhKQorICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gY3RlCisgICAgX2ZpbmFsaXplX3NldChtc2csIGRpc3Bvc2l0aW9uLCBmaWxlbmFtZSwgY2lkLCBwYXJhbXMpCitmb3IgdHlwIGluIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KToKKyAgICByYXdfZGF0YV9tYW5hZ2VyLmFkZF9zZXRfaGFuZGxlcih0eXAsIHNldF9ieXRlc19jb250ZW50KQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2VuY29kZXJzLnB5IGIvTGliL2VtYWlsL2VuY29kZXJzLnB5CmluZGV4IGY5NjU3ZjAuLjBhNjZhY2IgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9lbmNvZGVycy5weQorKysgYi9MaWIvZW1haWwvZW5jb2RlcnMucHkKQEAgLTU0LDIxICs1NCwxMiBAQAogICAgICAgICAjIFRoZXJlJ3Mgbm8gcGF5bG9hZC4gIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSB1c2UgN2JpdAogICAgICAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9ICc3Yml0JwogICAgICAgICByZXR1cm4KLSAgICAjIFdlIHBsYXkgYSB0cmljayB0byBtYWtlIHRoaXMgZ28gZmFzdC4gIElmIGVuY29kaW5nL2RlY29kZSB0byBBU0NJSQotICAgICMgc3VjY2VlZHMsIHdlIGtub3cgdGhlIGRhdGEgbXVzdCBiZSA3Yml0LCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgOGJpdC4KKyAgICAjIFdlIHBsYXkgYSB0cmljayB0byBtYWtlIHRoaXMgZ28gZmFzdC4gIElmIGRlY29kaW5nIGZyb20gQVNDSUkgc3VjY2VlZHMsCisgICAgIyB3ZSBrbm93IHRoZSBkYXRhIG11c3QgYmUgN2JpdCwgb3RoZXJ3aXNlIHRyZWF0IGl0IGFzIDhiaXQuCiAgICAgdHJ5OgotICAgICAgICBpZiBpc2luc3RhbmNlKG9yaWcsIHN0cik6Ci0gICAgICAgICAgICBvcmlnLmVuY29kZSgnYXNjaWknKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb3JpZy5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgb3JpZy5kZWNvZGUoJ2FzY2lpJykKICAgICBleGNlcHQgVW5pY29kZUVycm9yOgotICAgICAgICBjaGFyc2V0ID0gbXNnLmdldF9jaGFyc2V0KCkKLSAgICAgICAgb3V0cHV0X2NzZXQgPSBjaGFyc2V0IGFuZCBjaGFyc2V0Lm91dHB1dF9jaGFyc2V0Ci0gICAgICAgICMgaXNvLTIwMjItKiBpcyBub24tQVNDSUkgYnV0IGVuY29kZXMgdG8gYSA3LWJpdCByZXByZXNlbnRhdGlvbgotICAgICAgICBpZiBvdXRwdXRfY3NldCBhbmQgb3V0cHV0X2NzZXQubG93ZXIoKS5zdGFydHN3aXRoKCdpc28tMjAyMi0nKToKLSAgICAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzdiaXQnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9ICc4Yml0JworICAgICAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9ICc4Yml0JwogICAgIGVsc2U6CiAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzdiaXQnCiAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5IGIvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkKaW5kZXggZWE0MWU5NS4uMGMzYjU3MiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkKQEAgLTUwLDggKzUwLDggQEAKICAgICBzaW1wbGUgYWJzdHJhY3Rpb24gLS0gaXQgcGFyc2VzIHVudGlsIEVPRiBjbG9zZXMgdGhlIGN1cnJlbnQgbWVzc2FnZS4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICMgVGhlIGxhc3QgcGFydGlhbCBsaW5lIHB1c2hlZCBpbnRvIHRoaXMgb2JqZWN0LgotICAgICAgICBzZWxmLl9wYXJ0aWFsID0gJycKKyAgICAgICAgIyBDaHVua3Mgb2YgdGhlIGxhc3QgcGFydGlhbCBsaW5lIHB1c2hlZCBpbnRvIHRoaXMgb2JqZWN0LgorICAgICAgICBzZWxmLl9wYXJ0aWFsID0gW10KICAgICAgICAgIyBUaGUgbGlzdCBvZiBmdWxsLCBwdXNoZWQgbGluZXMsIGluIHJldmVyc2Ugb3JkZXIKICAgICAgICAgc2VsZi5fbGluZXMgPSBbXQogICAgICAgICAjIFRoZSBzdGFjayBvZiBmYWxzZS1FT0YgY2hlY2tpbmcgcHJlZGljYXRlcy4KQEAgLTY3LDggKzY3LDggQEAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIyBEb24ndCBmb3JnZXQgYW55IHRyYWlsaW5nIHBhcnRpYWwgbGluZS4KLSAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kKHNlbGYuX3BhcnRpYWwpCi0gICAgICAgIHNlbGYuX3BhcnRpYWwgPSAnJworICAgICAgICBzZWxmLnB1c2hsaW5lcygnJy5qb2luKHNlbGYuX3BhcnRpYWwpLnNwbGl0bGluZXMoVHJ1ZSkpCisgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBbXQogICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCiAKICAgICBkZWYgcmVhZGxpbmUoc2VsZik6CkBAIC05NiwyNiArOTYsMjcgQEAKIAogICAgIGRlZiBwdXNoKHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJQdXNoIHNvbWUgbmV3IGRhdGEgaW50byB0aGlzIG9iamVjdC4iIiIKLSAgICAgICAgIyBIYW5kbGUgYW55IHByZXZpb3VzIGxlZnRvdmVycwotICAgICAgICBkYXRhLCBzZWxmLl9wYXJ0aWFsID0gc2VsZi5fcGFydGlhbCArIGRhdGEsICcnCi0gICAgICAgICMgQ3JhY2sgaW50byBsaW5lcywgYnV0IHByZXNlcnZlIHRoZSBuZXdsaW5lcyBvbiB0aGUgZW5kIG9mIGVhY2gKLSAgICAgICAgcGFydHMgPSBOTENSRV9jcmFjay5zcGxpdChkYXRhKQotICAgICAgICAjIFRoZSAqYWhlbSogaW50ZXJlc3RpbmcgYmVoYXZpb3VyIG9mIHJlLnNwbGl0IHdoZW4gc3VwcGxpZWQgZ3JvdXBpbmcKLSAgICAgICAgIyBwYXJlbnRoZXNlcyBpcyB0aGF0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHJlc3VsdGluZyBsaXN0IGlzIHRoZQotICAgICAgICAjIGRhdGEgYWZ0ZXIgdGhlIGZpbmFsIFJFLiAgSW4gdGhlIGNhc2Ugb2YgYSBOTC9DUiB0ZXJtaW5hdGVkIHN0cmluZywKLSAgICAgICAgIyB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuCi0gICAgICAgIHNlbGYuX3BhcnRpYWwgPSBwYXJ0cy5wb3AoKQotICAgICAgICAjR0FOIDI5TWFyMDkgIGJ1Z3MgMTU1NTU3MCwgMTcyMTg2MiAgQ29uZnVzaW9uIGF0IDhLIGJvdW5kYXJ5IGVuZGluZyB3aXRoIFxyOgotICAgICAgICAjIGlzIHRoZXJlIGEgXG4gdG8gZm9sbG93IGxhdGVyPwotICAgICAgICBpZiBub3Qgc2VsZi5fcGFydGlhbCBhbmQgcGFydHMgYW5kIHBhcnRzWy0xXS5lbmRzd2l0aCgnXHInKToKLSAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBwYXJ0cy5wb3AoLTIpK3BhcnRzLnBvcCgpCi0gICAgICAgICMgcGFydHMgaXMgYSBsaXN0IG9mIHN0cmluZ3MsIGFsdGVybmF0aW5nIGJldHdlZW4gdGhlIGxpbmUgY29udGVudHMKLSAgICAgICAgIyBhbmQgdGhlIGVvbCBjaGFyYWN0ZXIocykuICBHYXRoZXIgdXAgYSBsaXN0IG9mIGxpbmVzIGFmdGVyCi0gICAgICAgICMgcmUtYXR0YWNoaW5nIHRoZSBuZXdsaW5lcy4KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocGFydHMpIC8vIDIpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHBhcnRzW2kqMl0gKyBwYXJ0c1tpKjIrMV0pCi0gICAgICAgIHNlbGYucHVzaGxpbmVzKGxpbmVzKQorICAgICAgICAjIENyYWNrIGludG8gbGluZXMsIGJ1dCBwcmVzZXJ2ZSB0aGUgbGluZXNlcCBjaGFyYWN0ZXJzIG9uIHRoZSBlbmQgb2YgZWFjaAorICAgICAgICBwYXJ0cyA9IGRhdGEuc3BsaXRsaW5lcyhUcnVlKQorCisgICAgICAgIGlmIG5vdCBwYXJ0cyBvciBub3QgcGFydHNbMF0uZW5kc3dpdGgoKCdcbicsICdccicpKToKKyAgICAgICAgICAgICMgTm8gbmV3IGNvbXBsZXRlIGxpbmVzLCBzbyBqdXN0IGFjY3VtdWxhdGUgcGFydGlhbHMKKyAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwgKz0gcGFydHMKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX3BhcnRpYWw6CisgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBwcmV2aW91cyBsZWZ0b3ZlcnMsIGNvbXBsZXRlIHRoZW0gbm93CisgICAgICAgICAgICBzZWxmLl9wYXJ0aWFsLmFwcGVuZChwYXJ0c1swXSkKKyAgICAgICAgICAgIHBhcnRzWzA6MV0gPSAnJy5qb2luKHNlbGYuX3BhcnRpYWwpLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgIGRlbCBzZWxmLl9wYXJ0aWFsWzpdCisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsaXN0IGRvZXMgbm90IGVuZCBpbiBhIG5ld2xpbmUsIHRoZW4gdHJlYXQKKyAgICAgICAgIyBpdCBhcyBhIHBhcnRpYWwgbGluZS4gIFdlIG9ubHkgY2hlY2sgZm9yICdcbicgaGVyZSBiZWNhdXNlIGEgbGluZQorICAgICAgICAjIGVuZGluZyB3aXRoICdccicgbWlnaHQgYmUgYSBsaW5lIHRoYXQgd2FzIHNwbGl0IGluIHRoZSBtaWRkbGUgb2YgYQorICAgICAgICAjICdcclxuJyBzZXF1ZW5jZSAoc2VlIGJ1Z3MgMTU1NTU3MCBhbmQgMTcyMTg2MikuCisgICAgICAgIGlmIG5vdCBwYXJ0c1stMV0uZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICBzZWxmLl9wYXJ0aWFsID0gW3BhcnRzLnBvcCgpXQorICAgICAgICBzZWxmLnB1c2hsaW5lcyhwYXJ0cykKIAogICAgIGRlZiBwdXNobGluZXMoc2VsZiwgbGluZXMpOgogICAgICAgICAjIFJldmVyc2UgYW5kIGluc2VydCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpbmVzLgpAQCAtMTM1LDcgKzEzNiw3IEBACiBjbGFzcyBGZWVkUGFyc2VyOgogICAgICIiIkEgZmVlZC1zdHlsZSBwYXJzZXIgb2YgZW1haWwuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgX2ZhY3Rvcnk9bWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfZmFjdG9yeT1Ob25lLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgogICAgICAgICAiIiJfZmFjdG9yeSBpcyBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgdG8gY3JlYXRlIGEgbmV3IG1lc3NhZ2Ugb2JqCiAKICAgICAgICAgVGhlIHBvbGljeSBrZXl3b3JkIHNwZWNpZmllcyBhIHBvbGljeSBvYmplY3QgdGhhdCBjb250cm9scyBhIG51bWJlciBvZgpAQCAtMTQzLDE0ICsxNDQsMjMgQEAKICAgICAgICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fZmFjdG9yeSA9IF9mYWN0b3J5CiAgICAgICAgIHNlbGYucG9saWN5ID0gcG9saWN5Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9mYWN0b3J5KHBvbGljeT1zZWxmLnBvbGljeSkKLSAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYTogeydwb2xpY3knOiBzZWxmLnBvbGljeX0KLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICMgQXNzdW1lIHRoaXMgaXMgYW4gb2xkLXN0eWxlIGZhY3RvcnkKLSAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYToge30KKyAgICAgICAgc2VsZi5fZmFjdG9yeV9rd2RzID0gbGFtYmRhOiB7J3BvbGljeSc6IHNlbGYucG9saWN5fQorICAgICAgICBpZiBfZmFjdG9yeSBpcyBOb25lOgorICAgICAgICAgICAgIyBXaGF0IHRoaXMgc2hvdWxkIGJlOgorICAgICAgICAgICAgI3NlbGYuX2ZhY3RvcnkgPSBwb2xpY3kuZGVmYXVsdF9tZXNzYWdlX2ZhY3RvcnkKKyAgICAgICAgICAgICMgYnV0LCBiZWNhdXNlIHdlIGFyZSBwb3N0IDMuNCBmZWF0dXJlIGZyZWV6ZSwgZml4IHdpdGggdGVtcCBoYWNrOgorICAgICAgICAgICAgaWYgc2VsZi5wb2xpY3kgaXMgY29tcGF0MzI6CisgICAgICAgICAgICAgICAgc2VsZi5fZmFjdG9yeSA9IG1lc3NhZ2UuTWVzc2FnZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9mYWN0b3J5ID0gbWVzc2FnZS5FbWFpbE1lc3NhZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBfZmFjdG9yeQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9mYWN0b3J5KHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBBc3N1bWUgdGhpcyBpcyBhbiBvbGQtc3R5bGUgZmFjdG9yeQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYToge30KICAgICAgICAgc2VsZi5faW5wdXQgPSBCdWZmZXJlZFN1YkZpbGUoKQogICAgICAgICBzZWxmLl9tc2dzdGFjayA9IFtdCiAgICAgICAgIHNlbGYuX3BhcnNlID0gc2VsZi5fcGFyc2VnZW4oKS5fX25leHRfXwpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2dlbmVyYXRvci5weSBiL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkKaW5kZXggZTRhODZkNC4uNDczNTcyMSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2dlbmVyYXRvci5weQorKysgYi9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5CkBAIC0xMCwxNCArMTAsMTAgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgcmFuZG9tCi1pbXBvcnQgd2FybmluZ3MKIAogZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIEJ5dGVzSU8KLWZyb20gZW1haWwuX3BvbGljeWJhc2UgaW1wb3J0IGNvbXBhdDMyCi1mcm9tIGVtYWlsLmhlYWRlciBpbXBvcnQgSGVhZGVyCiBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBfaGFzX3N1cnJvZ2F0ZXMKLWltcG9ydCBlbWFpbC5jaGFyc2V0IGFzIF9jaGFyc2V0CiAKIFVOREVSU0NPUkUgPSAnXycKIE5MID0gJ1xuJyAgIyBYWFg6IG5vIGxvbmdlciB1c2VkIGJ5IHRoZSBjb2RlIGJlbG93LgpAQCAtNTUsOCArNTEsOSBAQAogICAgICAgICBieSBSRkMgMjgyMi4KIAogICAgICAgICBUaGUgcG9saWN5IGtleXdvcmQgc3BlY2lmaWVzIGEgcG9saWN5IG9iamVjdCB0aGF0IGNvbnRyb2xzIGEgbnVtYmVyIG9mCi0gICAgICAgIGFzcGVjdHMgb2YgdGhlIGdlbmVyYXRvcidzIG9wZXJhdGlvbi4gIFRoZSBkZWZhdWx0IHBvbGljeSBtYWludGFpbnMKLSAgICAgICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgYXNwZWN0cyBvZiB0aGUgZ2VuZXJhdG9yJ3Mgb3BlcmF0aW9uLiAgSWYgbm8gcG9saWN5IGlzIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhlIE1lc3NhZ2Ugb2JqZWN0IHBhc3NlZCB0byB0aGUKKyAgICAgICAgZmxhdHRlbiBtZXRob2QgaXMgdXNlZC4KIAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZnAgPSBvdXRmcApAQCAtODAsNyArNzcsOSBAQAogICAgICAgICBOb3RlIHRoYXQgZm9yIHN1Ym9iamVjdHMsIG5vIEZyb21fIGxpbmUgaXMgcHJpbnRlZC4KIAogICAgICAgICBsaW5lc2VwIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW4KLSAgICAgICAgdGhlIG91dHB1dC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGRldGVybWluZWQgYnkgdGhlIHBvbGljeS4KKyAgICAgICAgdGhlIG91dHB1dC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGRldGVybWluZWQgYnkgdGhlIHBvbGljeSBzcGVjaWZpZWQKKyAgICAgICAgd2hlbiB0aGUgR2VuZXJhdG9yIGluc3RhbmNlIHdhcyBjcmVhdGVkIG9yLCBpZiBub25lIHdhcyBzcGVjaWZpZWQsCisgICAgICAgIGZyb20gdGhlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhlIG1zZy4KIAogICAgICAgICAiIiIKICAgICAgICAgIyBXZSB1c2UgdGhlIF9YWFggY29uc3RhbnRzIGZvciBvcGVyYXRpbmcgb24gZGF0YSB0aGF0IGNvbWVzIGRpcmVjdGx5CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvaGVhZGVyLnB5IGIvTGliL2VtYWlsL2hlYWRlci5weQppbmRleCA1YmQwNjM4Li45Yzg5NTg5IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvaGVhZGVyLnB5CisrKyBiL0xpYi9lbWFpbC9oZWFkZXIucHkKQEAgLTEwMCw3ICsxMDAsNiBAQAogICAgICAgICAgICAgICAgIHdvcmRzLmFwcGVuZCgoZW5jb2RlZCwgZW5jb2RpbmcsIGNoYXJzZXQpKQogICAgICMgTm93IGxvb3Agb3ZlciB3b3JkcyBhbmQgcmVtb3ZlIHdvcmRzIHRoYXQgY29uc2lzdCBvZiB3aGl0ZXNwYWNlCiAgICAgIyBiZXR3ZWVuIHR3byBlbmNvZGVkIHN0cmluZ3MuCi0gICAgaW1wb3J0IHN5cwogICAgIGRyb3BsaXN0ID0gW10KICAgICBmb3IgbiwgdyBpbiBlbnVtZXJhdGUod29yZHMpOgogICAgICAgICBpZiBuPjEgYW5kIHdbMV0gYW5kIHdvcmRzW24tMl1bMV0gYW5kIHdvcmRzW24tMV1bMF0uaXNzcGFjZSgpOgpAQCAtMzYyLDcgKzM2MSw2IEBACiAgICAgICAgIGZvciBzdHJpbmcsIGNoYXJzZXQgaW4gc2VsZi5fY2h1bmtzOgogICAgICAgICAgICAgaWYgaGFzc3BhY2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgaGFzc3BhY2UgPSBzdHJpbmcgYW5kIHNlbGYuX25vbmN0ZXh0KHN0cmluZ1swXSkKLSAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICAgICAgaWYgbGFzdGNzIG5vdCBpbiAoTm9uZSwgJ3VzLWFzY2lpJyk6CiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNzcGFjZSBvciBjaGFyc2V0IG5vdCBpbiAoTm9uZSwgJ3VzLWFzY2lpJyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWRkX3RyYW5zaXRpb24oKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2l0ZXJhdG9ycy5weSBiL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkKaW5kZXggM2FkYzRhMC4uYjU1MDJlZSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2l0ZXJhdG9ycy5weQorKysgYi9MaWIvZW1haWwvaXRlcmF0b3JzLnB5CkBAIC0yNiw4ICsyNiw3IEBACiAgICAgeWllbGQgc2VsZgogICAgIGlmIHNlbGYuaXNfbXVsdGlwYXJ0KCk6CiAgICAgICAgIGZvciBzdWJwYXJ0IGluIHNlbGYuZ2V0X3BheWxvYWQoKToKLSAgICAgICAgICAgIGZvciBzdWJzdWJwYXJ0IGluIHN1YnBhcnQud2FsaygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHN1YnN1YnBhcnQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3VicGFydC53YWxrKCkKIAogCiAMCkBAIC00MCw4ICszOSw3IEBACiAgICAgZm9yIHN1YnBhcnQgaW4gbXNnLndhbGsoKToKICAgICAgICAgcGF5bG9hZCA9IHN1YnBhcnQuZ2V0X3BheWxvYWQoZGVjb2RlPWRlY29kZSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXlsb2FkLCBzdHIpOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gU3RyaW5nSU8ocGF5bG9hZCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBTdHJpbmdJTyhwYXlsb2FkKQogCiAKIGRlZiB0eXBlZF9zdWJwYXJ0X2l0ZXJhdG9yKG1zZywgbWFpbnR5cGU9J3RleHQnLCBzdWJ0eXBlPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL21lc3NhZ2UucHkgYi9MaWIvZW1haWwvbWVzc2FnZS5weQppbmRleCBhZmUzNTBjLi5hYTQ2ZGViIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvbWVzc2FnZS5weQorKysgYi9MaWIvZW1haWwvbWVzc2FnZS5weQpAQCAtOCw4ICs4LDcgQEAKIAogaW1wb3J0IHJlCiBpbXBvcnQgdXUKLWltcG9ydCBiYXNlNjQKLWltcG9ydCBiaW5hc2NpaQoraW1wb3J0IHF1b3ByaQogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8KIAogIyBJbnRyYXBhY2thZ2UgaW1wb3J0cwpAQCAtMTMyLDIyICsxMzEsNTAgQEAKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIHN0cmluZy4KLSAgICAgICAgVGhpcyBpbmNsdWRlcyB0aGUgaGVhZGVycywgYm9keSwgYW5kIGVudmVsb3BlIGhlYWRlci4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmFzX3N0cmluZygpCiAKLSAgICBkZWYgYXNfc3RyaW5nKHNlbGYsIHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCk6CisgICAgZGVmIGFzX3N0cmluZyhzZWxmLCB1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTAsIHBvbGljeT1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCi0gICAgICAgIE9wdGlvbmFsIGB1bml4ZnJvbScgd2hlbiBUcnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCi0gICAgICAgIGhlYWRlci4KIAotICAgICAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIGFuZCBtYXkgbm90IGdlbmVyYXRlIHRoZSBtZXNzYWdlIGV4YWN0bHkKLSAgICAgICAgYXMgeW91IGludGVuZC4gIEZvciBtb3JlIGZsZXhpYmlsaXR5LCB1c2UgdGhlIGZsYXR0ZW4oKSBtZXRob2Qgb2YgYQotICAgICAgICBHZW5lcmF0b3IgaW5zdGFuY2UuCisgICAgICAgIE9wdGlvbmFsICd1bml4ZnJvbScsIHdoZW4gdHJ1ZSwgbWVhbnMgaW5jbHVkZSB0aGUgVW5peCBGcm9tXyBlbnZlbG9wZQorICAgICAgICBoZWFkZXIuICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zLCBpZiBtYXhoZWFkZXJsZW4gaXMKKyAgICAgICAgbm90IHNwZWNpZmllZCBpdCBkZWZhdWx0cyB0byAwLCBzbyB5b3UgbXVzdCBvdmVycmlkZSBpdCBleHBsaWNpdGx5CisgICAgICAgIGlmIHlvdSB3YW50IGEgZGlmZmVyZW50IG1heGhlYWRlcmxlbi4gICdwb2xpY3knIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgR2VuZXJhdG9yIGluc3RhbmNlIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBtZXNhc2dlOyBpZiBpdCBpcyBub3QKKyAgICAgICAgc3BlY2lmaWVkIHRoZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlIGluc3RhbmNlIGlzIHVzZWQuCisKKyAgICAgICAgSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5zIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90IGVuY29kZWQKKyAgICAgICAgYWNjb3JkaW5nIHRvIFJGQyBzdGFuZGFyZHMsIHRoZSBub24tY29tcGxpYW50IGRhdGEgd2lsbCBiZSByZXBsYWNlZCBieQorICAgICAgICB1bmljb2RlICJ1bmtub3duIGNoYXJhY3RlciIgY29kZSBwb2ludHMuCiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5IGlmIHBvbGljeSBpcyBOb25lIGVsc2UgcG9saWN5CiAgICAgICAgIGZwID0gU3RyaW5nSU8oKQotICAgICAgICBnID0gR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89RmFsc2UsIG1heGhlYWRlcmxlbj1tYXhoZWFkZXJsZW4pCisgICAgICAgIGcgPSBHZW5lcmF0b3IoZnAsCisgICAgICAgICAgICAgICAgICAgICAgbWFuZ2xlX2Zyb21fPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIG1heGhlYWRlcmxlbj1tYXhoZWFkZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeSkKKyAgICAgICAgZy5mbGF0dGVuKHNlbGYsIHVuaXhmcm9tPXVuaXhmcm9tKQorICAgICAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQorCisgICAgZGVmIF9fYnl0ZXNfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5hc19ieXRlcygpCisKKyAgICBkZWYgYXNfYnl0ZXMoc2VsZiwgdW5peGZyb209RmFsc2UsIHBvbGljeT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBieXRlcyBvYmplY3QuCisKKyAgICAgICAgT3B0aW9uYWwgJ3VuaXhmcm9tJywgd2hlbiB0cnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCisgICAgICAgIGhlYWRlci4gICdwb2xpY3knIGlzIHBhc3NlZCB0byB0aGUgQnl0ZXNHZW5lcmF0b3IgaW5zdGFuY2UgdXNlZCB0bworICAgICAgICBzZXJpYWxpemUgdGhlIG1lc3NhZ2U7IGlmIG5vdCBzcGVjaWZpZWQgdGhlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgdGhlIG1lc3NhZ2UgaW5zdGFuY2UgaXMgdXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZyb20gZW1haWwuZ2VuZXJhdG9yIGltcG9ydCBCeXRlc0dlbmVyYXRvcgorICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeSBpZiBwb2xpY3kgaXMgTm9uZSBlbHNlIHBvbGljeQorICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1GYWxzZSwgcG9saWN5PXBvbGljeSkKICAgICAgICAgZy5mbGF0dGVuKHNlbGYsIHVuaXhmcm9tPXVuaXhmcm9tKQogICAgICAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQogCkBAIC0xNzcsNyArMjA0LDExIEBACiAgICAgICAgIGlmIHNlbGYuX3BheWxvYWQgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3BheWxvYWQgPSBbcGF5bG9hZF0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3BheWxvYWQuYXBwZW5kKHBheWxvYWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcGF5bG9hZC5hcHBlbmQocGF5bG9hZCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkF0dGFjaCBpcyBub3QgdmFsaWQgb24gYSBtZXNzYWdlIHdpdGggYSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBub24tbXVsdGlwYXJ0IHBheWxvYWQiKQogCiAgICAgZGVmIGdldF9wYXlsb2FkKHNlbGYsIGk9Tm9uZSwgZGVjb2RlPUZhbHNlKToKICAgICAgICAgIiIiUmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXlsb2FkLgpAQCAtMjQ4LDcgKzI3OSw3IEBACiAgICAgICAgIGlmIG5vdCBkZWNvZGU6CiAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZAogICAgICAgICBpZiBjdGUgPT0gJ3F1b3RlZC1wcmludGFibGUnOgotICAgICAgICAgICAgcmV0dXJuIHV0aWxzLl9xZGVjb2RlKGJwYXlsb2FkKQorICAgICAgICAgICAgcmV0dXJuIHF1b3ByaS5kZWNvZGVzdHJpbmcoYnBheWxvYWQpCiAgICAgICAgIGVsaWYgY3RlID09ICdiYXNlNjQnOgogICAgICAgICAgICAgIyBYWFg6IHRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrOyBkZWNvZGVfYiBzaG91bGQgcHJvYmFibHkgYmUgZmFjdG9yZWQKICAgICAgICAgICAgICMgb3V0IHNvbWV3aGVyZSwgYnV0IEkgaGF2ZW4ndCBmaWd1cmVkIG91dCB3aGVyZSB5ZXQuCkBAIC02NjgsNyArNjk5LDcgQEAKICAgICAgICAgcmV0dXJuIGZhaWxvYmoKIAogICAgIGRlZiBzZXRfcGFyYW0oc2VsZiwgcGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycpOgorICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJywgcmVwbGFjZT1GYWxzZSk6CiAgICAgICAgICIiIlNldCBhIHBhcmFtZXRlciBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KIAogICAgICAgICBJZiB0aGUgcGFyYW1ldGVyIGFscmVhZHkgZXhpc3RzIGluIHRoZSBoZWFkZXIsIGl0cyB2YWx1ZSB3aWxsIGJlCkBAIC03MTIsOCArNzQzLDExIEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY3R5cGUgPSBTRU1JU1BBQ0Uuam9pbihbY3R5cGUsIGFwcGVuZF9wYXJhbV0pCiAgICAgICAgIGlmIGN0eXBlICE9IHNlbGYuZ2V0KGhlYWRlcik6Ci0gICAgICAgICAgICBkZWwgc2VsZltoZWFkZXJdCi0gICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSBjdHlwZQorICAgICAgICAgICAgaWYgcmVwbGFjZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlcGxhY2VfaGVhZGVyKGhlYWRlciwgY3R5cGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmW2hlYWRlcl0KKyAgICAgICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSBjdHlwZQogCiAgICAgZGVmIGRlbF9wYXJhbShzZWxmLCBwYXJhbSwgaGVhZGVyPSdjb250ZW50LXR5cGUnLCByZXF1b3RlPVRydWUpOgogICAgICAgICAiIiJSZW1vdmUgdGhlIGdpdmVuIHBhcmFtZXRlciBjb21wbGV0ZWx5IGZyb20gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuCkBAIC04OTQsMyArOTI4LDIwOCBAQAogCiAgICAgIyBJLmUuIGRlZiB3YWxrKHNlbGYpOiAuLi4KICAgICBmcm9tIGVtYWlsLml0ZXJhdG9ycyBpbXBvcnQgd2FsaworCisKK2NsYXNzIE1JTUVQYXJ0KE1lc3NhZ2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvbGljeT1Ob25lKToKKyAgICAgICAgaWYgcG9saWN5IGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIGVtYWlsLnBvbGljeSBpbXBvcnQgZGVmYXVsdAorICAgICAgICAgICAgcG9saWN5ID0gZGVmYXVsdAorICAgICAgICBNZXNzYWdlLl9faW5pdF9fKHNlbGYsIHBvbGljeSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBjX2QgPSBzZWxmLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpCisgICAgICAgIGlmIGNfZCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBjX2QubG93ZXIoKSA9PSAnYXR0YWNobWVudCcKKworICAgIGRlZiBfZmluZF9ib2R5KHNlbGYsIHBhcnQsIHByZWZlcmVuY2VsaXN0KToKKyAgICAgICAgaWYgcGFydC5pc19hdHRhY2htZW50OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gcGFydC5nZXRfY29udGVudF90eXBlKCkuc3BsaXQoJy8nKQorICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6CisgICAgICAgICAgICBpZiBzdWJ0eXBlIGluIHByZWZlcmVuY2VsaXN0OgorICAgICAgICAgICAgICAgIHlpZWxkIChwcmVmZXJlbmNlbGlzdC5pbmRleChzdWJ0eXBlKSwgcGFydCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYWludHlwZSAhPSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzdWJ0eXBlICE9ICdyZWxhdGVkJzoKKyAgICAgICAgICAgIGZvciBzdWJwYXJ0IGluIHBhcnQuaXRlcl9wYXJ0cygpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF9ib2R5KHN1YnBhcnQsIHByZWZlcmVuY2VsaXN0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmICdyZWxhdGVkJyBpbiBwcmVmZXJlbmNlbGlzdDoKKyAgICAgICAgICAgIHlpZWxkIChwcmVmZXJlbmNlbGlzdC5pbmRleCgncmVsYXRlZCcpLCBwYXJ0KQorICAgICAgICBjYW5kaWRhdGUgPSBOb25lCisgICAgICAgIHN0YXJ0ID0gcGFydC5nZXRfcGFyYW0oJ3N0YXJ0JykKKyAgICAgICAgaWYgc3RhcnQ6CisgICAgICAgICAgICBmb3Igc3VicGFydCBpbiBwYXJ0Lml0ZXJfcGFydHMoKToKKyAgICAgICAgICAgICAgICBpZiBzdWJwYXJ0Wydjb250ZW50LWlkJ10gPT0gc3RhcnQ6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHN1YnBhcnQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICBzdWJwYXJ0cyA9IHBhcnQuZ2V0X3BheWxvYWQoKQorICAgICAgICAgICAgY2FuZGlkYXRlID0gc3VicGFydHNbMF0gaWYgc3VicGFydHMgZWxzZSBOb25lCisgICAgICAgIGlmIGNhbmRpZGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF9ib2R5KGNhbmRpZGF0ZSwgcHJlZmVyZW5jZWxpc3QpCisKKyAgICBkZWYgZ2V0X2JvZHkoc2VsZiwgcHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSk6CisgICAgICAgICIiIlJldHVybiBiZXN0IGNhbmRpZGF0ZSBtaW1lIHBhcnQgZm9yIGRpc3BsYXkgYXMgJ2JvZHknIG9mIG1lc3NhZ2UuCisKKyAgICAgICAgRG8gYSBkZXB0aCBmaXJzdCBzZWFyY2gsIHN0YXJ0aW5nIHdpdGggc2VsZiwgbG9va2luZyBmb3IgdGhlIGZpcnN0IHBhcnQKKyAgICAgICAgbWF0Y2hpbmcgZWFjaCBvZiB0aGUgaXRlbXMgaW4gcHJlZmVyZW5jZWxpc3QsIGFuZCByZXR1cm4gdGhlIHBhcnQKKyAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgaXRlbSB0aGF0IGhhcyBhIG1hdGNoLCBvciBOb25lIGlmIG5vIGl0ZW1zCisgICAgICAgIGhhdmUgYSBtYXRjaC4gIElmICdyZWxhdGVkJyBpcyBub3QgaW5jbHVkZWQgaW4gcHJlZmVyZW5jZWxpc3QsIGNvbnNpZGVyCisgICAgICAgIHRoZSByb290IHBhcnQgb2YgYW55IG11bHRpcGFydC9yZWxhdGVkIGVuY291bnRlcmVkIGFzIGEgY2FuZGlkYXRlCisgICAgICAgIG1hdGNoLiAgSWdub3JlIHBhcnRzIHdpdGggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQnLgorICAgICAgICAiIiIKKyAgICAgICAgYmVzdF9wcmlvID0gbGVuKHByZWZlcmVuY2VsaXN0KQorICAgICAgICBib2R5ID0gTm9uZQorICAgICAgICBmb3IgcHJpbywgcGFydCBpbiBzZWxmLl9maW5kX2JvZHkoc2VsZiwgcHJlZmVyZW5jZWxpc3QpOgorICAgICAgICAgICAgaWYgcHJpbyA8IGJlc3RfcHJpbzoKKyAgICAgICAgICAgICAgICBiZXN0X3ByaW8gPSBwcmlvCisgICAgICAgICAgICAgICAgYm9keSA9IHBhcnQKKyAgICAgICAgICAgICAgICBpZiBwcmlvID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBib2R5CisKKyAgICBfYm9keV90eXBlcyA9IHsoJ3RleHQnLCAncGxhaW4nKSwKKyAgICAgICAgICAgICAgICAgICAoJ3RleHQnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICgnbXVsdGlwYXJ0JywgJ3JlbGF0ZWQnKSwKKyAgICAgICAgICAgICAgICAgICAoJ211bHRpcGFydCcsICdhbHRlcm5hdGl2ZScpfQorICAgIGRlZiBpdGVyX2F0dGFjaG1lbnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgbm9uLW1haW4gcGFydHMgb2YgYSBtdWx0aXBhcnQuCisKKyAgICAgICAgU2tpcCB0aGUgZmlyc3Qgb2YgZWFjaCBvY2N1cnJlbmNlIG9mIHRleHQvcGxhaW4sIHRleHQvaHRtbCwKKyAgICAgICAgbXVsdGlwYXJ0L3JlbGF0ZWQsIG9yIG11bHRpcGFydC9hbHRlcm5hdGl2ZSBpbiB0aGUgbXVsdGlwYXJ0ICh1bmxlc3MKKyAgICAgICAgdGhleSBoYXZlIGEgJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQnIGhlYWRlcikgYW5kIGluY2x1ZGUgYWxsCisgICAgICAgIHJlbWFpbmluZyBzdWJwYXJ0cyBpbiB0aGUgcmV0dXJuZWQgaXRlcmF0b3IuICBXaGVuIGFwcGxpZWQgdG8gYQorICAgICAgICBtdWx0aXBhcnQvcmVsYXRlZCwgcmV0dXJuIGFsbCBwYXJ0cyBleGNlcHQgdGhlIHJvb3QgcGFydC4gIFJldHVybiBhbgorICAgICAgICBlbXB0eSBpdGVyYXRvciB3aGVuIGFwcGxpZWQgdG8gYSBtdWx0aXBhcnQvYWx0ZXJuYXRpdmUgb3IgYQorICAgICAgICBub24tbXVsdGlwYXJ0LgorICAgICAgICAiIiIKKyAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBzZWxmLmdldF9jb250ZW50X3R5cGUoKS5zcGxpdCgnLycpCisgICAgICAgIGlmIG1haW50eXBlICE9ICdtdWx0aXBhcnQnIG9yIHN1YnR5cGUgPT0gJ2FsdGVybmF0aXZlJzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXJ0cyA9IHNlbGYuZ2V0X3BheWxvYWQoKQorICAgICAgICBpZiBtYWludHlwZSA9PSAnbXVsdGlwYXJ0JyBhbmQgc3VidHlwZSA9PSAncmVsYXRlZCc6CisgICAgICAgICAgICAjIEZvciByZWxhdGVkLCB3ZSB0cmVhdCBldmVyeXRoaW5nIGJ1dCB0aGUgcm9vdCBhcyBhbiBhdHRhY2htZW50LgorICAgICAgICAgICAgIyBUaGUgcm9vdCBtYXkgYmUgaW5kaWNhdGVkIGJ5ICdzdGFydCc7IGlmIHRoZXJlJ3Mgbm8gc3RhcnQgb3Igd2UKKyAgICAgICAgICAgICMgY2FuJ3QgZmluZCB0aGUgbmFtZWQgc3RhcnQsIHRyZWF0IHRoZSBmaXJzdCBzdWJwYXJ0IGFzIHRoZSByb290LgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLmdldF9wYXJhbSgnc3RhcnQnKQorICAgICAgICAgICAgaWYgc3RhcnQ6CisgICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFydC5nZXQoJ2NvbnRlbnQtaWQnKSA9PSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKHBhcnQpCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYXR0YWNobWVudHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYXJ0cy5wb3AoMCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcGFydHMKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIE90aGVyd2lzZSB3ZSBtb3JlIG9yIGxlc3MgaW52ZXJ0IHRoZSByZW1haW5pbmcgbG9naWMgaW4gZ2V0X2JvZHkuCisgICAgICAgICMgVGhpcyBvbmx5IHJlYWxseSB3b3JrcyBpbiBlZGdlIGNhc2VzIChleDogbm9uLXRleHQgcmVsYXRlZHMgb3IKKyAgICAgICAgIyBhbHRlcm5hdGl2ZXMpIGlmIHRoZSBzZW5kaW5nIGFnZW50IHNldHMgY29udGVudC1kaXNwb3NpdGlvbi4KKyAgICAgICAgc2VlbiA9IFtdICAgIyBPbmx5IHNraXAgdGhlIGZpcnN0IGV4YW1wbGUgb2YgZWFjaCBjYW5kaWRhdGUgdHlwZS4KKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLnNwbGl0KCcvJykKKyAgICAgICAgICAgIGlmICgobWFpbnR5cGUsIHN1YnR5cGUpIGluIHNlbGYuX2JvZHlfdHlwZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBwYXJ0LmlzX2F0dGFjaG1lbnQgYW5kIHN1YnR5cGUgbm90IGluIHNlZW4pOgorICAgICAgICAgICAgICAgIHNlZW4uYXBwZW5kKHN1YnR5cGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIHBhcnQKKworICAgIGRlZiBpdGVyX3BhcnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBhbGwgaW1tZWRpYXRlIHN1YnBhcnRzIG9mIGEgbXVsdGlwYXJ0LgorCisgICAgICAgIFJldHVybiBhbiBlbXB0eSBpdGVyYXRvciBmb3IgYSBub24tbXVsdGlwYXJ0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5nZXRfY29udGVudF9tYWludHlwZSgpID09ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmdldF9wYXlsb2FkKCkKKworICAgIGRlZiBnZXRfY29udGVudChzZWxmLCAqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpOgorICAgICAgICBpZiBjb250ZW50X21hbmFnZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciA9IHNlbGYucG9saWN5LmNvbnRlbnRfbWFuYWdlcgorICAgICAgICByZXR1cm4gY29udGVudF9tYW5hZ2VyLmdldF9jb250ZW50KHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIHNldF9jb250ZW50KHNlbGYsICphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIGNvbnRlbnRfbWFuYWdlciBpcyBOb25lOgorICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyID0gc2VsZi5wb2xpY3kuY29udGVudF9tYW5hZ2VyCisgICAgICAgIGNvbnRlbnRfbWFuYWdlci5zZXRfY29udGVudChzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiBfbWFrZV9tdWx0aXBhcnQoc2VsZiwgc3VidHlwZSwgZGlzYWxsb3dlZF9zdWJ0eXBlcywgYm91bmRhcnkpOgorICAgICAgICBpZiBzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICBleGlzdGluZ19zdWJ0eXBlID0gc2VsZi5nZXRfY29udGVudF9zdWJ0eXBlKCkKKyAgICAgICAgICAgIGRpc2FsbG93ZWRfc3VidHlwZXMgPSBkaXNhbGxvd2VkX3N1YnR5cGVzICsgKHN1YnR5cGUsKQorICAgICAgICAgICAgaWYgZXhpc3Rpbmdfc3VidHlwZSBpbiBkaXNhbGxvd2VkX3N1YnR5cGVzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHt9IHRvIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nX3N1YnR5cGUsIHN1YnR5cGUpKQorICAgICAgICBrZWVwX2hlYWRlcnMgPSBbXQorICAgICAgICBwYXJ0X2hlYWRlcnMgPSBbXQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc2VsZi5faGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHBhcnRfaGVhZGVycy5hcHBlbmQoKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2VlcF9oZWFkZXJzLmFwcGVuZCgobmFtZSwgdmFsdWUpKQorICAgICAgICBpZiBwYXJ0X2hlYWRlcnM6CisgICAgICAgICAgICAjIFRoZXJlIGlzIGV4aXN0aW5nIGNvbnRlbnQsIG1vdmUgaXQgdG8gdGhlIGZpcnN0IHN1YnBhcnQuCisgICAgICAgICAgICBwYXJ0ID0gdHlwZShzZWxmKShwb2xpY3k9c2VsZi5wb2xpY3kpCisgICAgICAgICAgICBwYXJ0Ll9oZWFkZXJzID0gcGFydF9oZWFkZXJzCisgICAgICAgICAgICBwYXJ0Ll9wYXlsb2FkID0gc2VsZi5fcGF5bG9hZAorICAgICAgICAgICAgc2VsZi5fcGF5bG9hZCA9IFtwYXJ0XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcGF5bG9hZCA9IFtdCisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBrZWVwX2hlYWRlcnMKKyAgICAgICAgc2VsZlsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0LycgKyBzdWJ0eXBlCisgICAgICAgIGlmIGJvdW5kYXJ5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zZXRfcGFyYW0oJ2JvdW5kYXJ5JywgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9yZWxhdGVkKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgncmVsYXRlZCcsICgnYWx0ZXJuYXRpdmUnLCAnbWl4ZWQnKSwgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9hbHRlcm5hdGl2ZShzZWxmLCBib3VuZGFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5fbWFrZV9tdWx0aXBhcnQoJ2FsdGVybmF0aXZlJywgKCdtaXhlZCcsKSwgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9taXhlZChzZWxmLCBib3VuZGFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5fbWFrZV9tdWx0aXBhcnQoJ21peGVkJywgKCksIGJvdW5kYXJ5KQorCisgICAgZGVmIF9hZGRfbXVsdGlwYXJ0KHNlbGYsIF9zdWJ0eXBlLCAqYXJncywgX2Rpc3A9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIChzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgIT0gJ211bHRpcGFydCcgb3IKKyAgICAgICAgICAgICAgICBzZWxmLmdldF9jb250ZW50X3N1YnR5cGUoKSAhPSBfc3VidHlwZSk6CisgICAgICAgICAgICBnZXRhdHRyKHNlbGYsICdtYWtlXycgKyBfc3VidHlwZSkoKQorICAgICAgICBwYXJ0ID0gdHlwZShzZWxmKShwb2xpY3k9c2VsZi5wb2xpY3kpCisgICAgICAgIHBhcnQuc2V0X2NvbnRlbnQoKmFyZ3MsICoqa3cpCisgICAgICAgIGlmIF9kaXNwIGFuZCAnY29udGVudC1kaXNwb3NpdGlvbicgbm90IGluIHBhcnQ6CisgICAgICAgICAgICBwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSBfZGlzcAorICAgICAgICBzZWxmLmF0dGFjaChwYXJ0KQorCisgICAgZGVmIGFkZF9yZWxhdGVkKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fYWRkX211bHRpcGFydCgncmVsYXRlZCcsICphcmdzLCBfZGlzcD0naW5saW5lJywgKiprdykKKworICAgIGRlZiBhZGRfYWx0ZXJuYXRpdmUoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdhbHRlcm5hdGl2ZScsICphcmdzLCAqKmt3KQorCisgICAgZGVmIGFkZF9hdHRhY2htZW50KHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fYWRkX211bHRpcGFydCgnbWl4ZWQnLCAqYXJncywgX2Rpc3A9J2F0dGFjaG1lbnQnLCAqKmt3KQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9oZWFkZXJzID0gW10KKyAgICAgICAgc2VsZi5fcGF5bG9hZCA9IE5vbmUKKworICAgIGRlZiBjbGVhcl9jb250ZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9oZWFkZXJzID0gWyhuLCB2KSBmb3IgbiwgdiBpbiBzZWxmLl9oZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG4ubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpXQorICAgICAgICBzZWxmLl9wYXlsb2FkID0gTm9uZQorCisKK2NsYXNzIEVtYWlsTWVzc2FnZShNSU1FUGFydCk6CisKKyAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzdXBlcigpLnNldF9jb250ZW50KCphcmdzLCAqKmt3KQorICAgICAgICBpZiAnTUlNRS1WZXJzaW9uJyBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHNlbGZbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9taW1lL3RleHQucHkgYi9MaWIvZW1haWwvbWltZS90ZXh0LnB5CmluZGV4IDNiNWIwOWYuLmVjMThiODUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9taW1lL3RleHQucHkKKysrIGIvTGliL2VtYWlsL21pbWUvdGV4dC5weQpAQCAtNiw3ICs2LDYgQEAKIAogX19hbGxfXyA9IFsnTUlNRVRleHQnXQogCi1mcm9tIGVtYWlsLmVuY29kZXJzIGltcG9ydCBlbmNvZGVfN29yOGJpdAogZnJvbSBlbWFpbC5taW1lLm5vbm11bHRpcGFydCBpbXBvcnQgTUlNRU5vbk11bHRpcGFydAogCiAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9wYXJzZXIucHkgYi9MaWIvZW1haWwvcGFyc2VyLnB5CmluZGV4IDc1MmJmMzUuLjhjOWJjOWUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL3BhcnNlci5weQpAQCAtNCwxOSArNCwxOCBAQAogCiAiIiJBIHBhcnNlciBvZiBSRkMgMjgyMiBhbmQgTUlNRSBlbWFpbCBtZXNzYWdlcy4iIiIKIAotX19hbGxfXyA9IFsnUGFyc2VyJywgJ0hlYWRlclBhcnNlcicsICdCeXRlc1BhcnNlcicsICdCeXRlc0hlYWRlclBhcnNlciddCitfX2FsbF9fID0gWydQYXJzZXInLCAnSGVhZGVyUGFyc2VyJywgJ0J5dGVzUGFyc2VyJywgJ0J5dGVzSGVhZGVyUGFyc2VyJywKKyAgICAgICAgICAgJ0ZlZWRQYXJzZXInLCAnQnl0ZXNGZWVkUGFyc2VyJ10KIAotaW1wb3J0IHdhcm5pbmdzCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTywgVGV4dElPV3JhcHBlcgogCiBmcm9tIGVtYWlsLmZlZWRwYXJzZXIgaW1wb3J0IEZlZWRQYXJzZXIsIEJ5dGVzRmVlZFBhcnNlcgotZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBjb21wYXQzMgogCiAKIAwKIGNsYXNzIFBhcnNlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgX2NsYXNzPU1lc3NhZ2UsICosIHBvbGljeT1jb21wYXQzMik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIF9jbGFzcz1Ob25lLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgogICAgICAgICAiIiJQYXJzZXIgb2YgUkZDIDI4MjIgYW5kIE1JTUUgZW1haWwgbWVzc2FnZXMuCiAKICAgICAgICAgQ3JlYXRlcyBhbiBpbi1tZW1vcnkgb2JqZWN0IHRyZWUgcmVwcmVzZW50aW5nIHRoZSBlbWFpbCBtZXNzYWdlLCB3aGljaApAQCAtMTA3LDggKzEwNiwxMCBAQAogICAgICAgICBtZWFuaW5nIGl0IHBhcnNlcyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgogICAgICAgICAiIiIKICAgICAgICAgZnAgPSBUZXh0SU9XcmFwcGVyKGZwLCBlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpCi0gICAgICAgIHdpdGggZnA6CisgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlci5wYXJzZShmcCwgaGVhZGVyc29ubHkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5kZXRhY2goKQogCiAKICAgICBkZWYgcGFyc2VieXRlcyhzZWxmLCB0ZXh0LCBoZWFkZXJzb25seT1GYWxzZSk6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcG9saWN5LnB5IGIvTGliL2VtYWlsL3BvbGljeS5weQppbmRleCAzOGU4OGFmLi5mMGIyMGY0IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcG9saWN5LnB5CisrKyBiL0xpYi9lbWFpbC9wb2xpY3kucHkKQEAgLTUsNiArNSw3IEBACiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBQb2xpY3ksIENvbXBhdDMyLCBjb21wYXQzMiwgX2V4dGVuZF9kb2NzdHJpbmdzCiBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBfaGFzX3N1cnJvZ2F0ZXMKIGZyb20gZW1haWwuaGVhZGVycmVnaXN0cnkgaW1wb3J0IEhlYWRlclJlZ2lzdHJ5IGFzIEhlYWRlclJlZ2lzdHJ5Citmcm9tIGVtYWlsLmNvbnRlbnRtYW5hZ2VyIGltcG9ydCByYXdfZGF0YV9tYW5hZ2VyCiAKIF9fYWxsX18gPSBbCiAgICAgJ0NvbXBhdDMyJywKQEAgLTU4LDEwICs1OSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCB0cmVhdG1lbnQsIHdoaWxlIGFsbCBvdGhlciBmaWVsZHMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVhdGVkIGFzIHVuc3RydWN0dXJlZC4gIFRoaXMgbGlzdCB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgYmVmb3JlIHRoZSBleHRlbnNpb24gaXMgbWFya2VkIHN0YWJsZS4pCisKKyAgICBjb250ZW50X21hbmFnZXIgICAgIC0tIGFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IHR3byBtZXRob2RzOiBnZXRfY29udGVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNldF9jb250ZW50LiAgV2hlbiB0aGUgZ2V0X2NvbnRlbnQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9jb250ZW50IG1ldGhvZCBvZiBhIE1lc3NhZ2Ugb2JqZWN0IGlzIGNhbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNhbGxzIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBvZiB0aGlzIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgaXQgdGhlIG1lc3NhZ2Ugb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbnkgYXJndW1lbnRzIG9yIGtleXdvcmRzIHRoYXQgd2VyZSBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGE6YH5lbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VyYC4KKwogICAgICIiIgogCiAgICAgcmVmb2xkX3NvdXJjZSA9ICdsb25nJwogICAgIGhlYWRlcl9mYWN0b3J5ID0gSGVhZGVyUmVnaXN0cnkoKQorICAgIGNvbnRlbnRfbWFuYWdlciA9IHJhd19kYXRhX21hbmFnZXIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKICAgICAgICAgIyBFbnN1cmUgdGhhdCBlYWNoIG5ldyBpbnN0YW5jZSBnZXRzIGEgdW5pcXVlIGhlYWRlciBmYWN0b3J5CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcXVvcHJpbWltZS5weSBiL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CmluZGV4IDMwYmY5MTYuLmMxZmUyYjQgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CisrKyBiL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CkBAIC00MCw3ICs0MCw2IEBACiAgICAgXQogCiBpbXBvcnQgcmUKLWltcG9ydCBpbwogCiBmcm9tIHN0cmluZyBpbXBvcnQgYXNjaWlfbGV0dGVycywgZGlnaXRzLCBoZXhkaWdpdHMKIApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3V0aWxzLnB5IGIvTGliL2VtYWlsL3V0aWxzLnB5CmluZGV4IGY3NmMyMWUuLmNhY2I5YjEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC91dGlscy5weQorKysgYi9MaWIvZW1haWwvdXRpbHMucHkKQEAgLTI1LDEzICsyNSwxMCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCB0aW1lCi1pbXBvcnQgYmFzZTY0CiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCB1cmxsaWIucGFyc2UKLWltcG9ydCB3YXJuaW5ncwotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAogZnJvbSBlbWFpbC5fcGFyc2VhZGRyIGltcG9ydCBxdW90ZQogZnJvbSBlbWFpbC5fcGFyc2VhZGRyIGltcG9ydCBBZGRyZXNzTGlzdCBhcyBfQWRkcmVzc0xpc3QKQEAgLTM5LDEwICszNiw3IEBACiAKIGZyb20gZW1haWwuX3BhcnNlYWRkciBpbXBvcnQgcGFyc2VkYXRlLCBwYXJzZWRhdGVfdHosIF9wYXJzZWRhdGVfdHoKIAotZnJvbSBxdW9wcmkgaW1wb3J0IGRlY29kZXN0cmluZyBhcyBfcWRlY29kZQotCiAjIEludHJhcGFja2FnZSBpbXBvcnRzCi1mcm9tIGVtYWlsLmVuY29kZXJzIGltcG9ydCBfYmVuY29kZSwgX3FlbmNvZGUKIGZyb20gZW1haWwuY2hhcnNldCBpbXBvcnQgQ2hhcnNldAogCiBDT01NQVNQQUNFID0gJywgJwpAQCAtNTQsMTcgKzQ4LDI3IEBACiBzcGVjaWFsc3JlID0gcmUuY29tcGlsZShyJ1tdW1xcKCk8PkAsOjsiLl0nKQogZXNjYXBlc3JlID0gcmUuY29tcGlsZShyJ1tcXCJdJykKIAotIyBIb3cgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBzdHJpbmdzIHRoYXQgY29tZSBmcm9tIGEgYnl0ZQotIyBzb3VyY2Ugd2l0aCB1bmRlY29kYWJsZSBjaGFyYWN0ZXJzLgotX2hhc19zdXJyb2dhdGVzID0gcmUuY29tcGlsZSgKLSAgICAnKFteXHVkODAwLVx1ZGJmZl18XEEpW1x1ZGMwMC1cdWRmZmZdKFteXHVkYzAwLVx1ZGZmZl18XFopJykuc2VhcmNoCitkZWYgX2hhc19zdXJyb2dhdGVzKHMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHMgY29udGFpbnMgc3Vycm9nYXRlLWVzY2FwZWQgYmluYXJ5IGRhdGEuIiIiCisgICAgIyBUaGlzIGNoZWNrIGlzIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgdW5sZXNzIHRoZXJlIGFyZSBzdXJyb2dhdGVzLCB1dGY4CisgICAgIyAoUHl0aG9uJ3MgZGVmYXVsdCBlbmNvZGluZykgY2FuIGVuY29kZSBhbnkgc3RyaW5nLiAgVGhpcyBpcyB0aGUgZmFzdGVzdAorICAgICMgd2F5IHRvIGNoZWNrIGZvciBzdXJyb2dhdGVzLCBzZWUgaXNzdWUgMTE0NTQgZm9yIHRpbWluZ3MuCisgICAgdHJ5OgorICAgICAgICBzLmVuY29kZSgpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgIHJldHVybiBUcnVlCiAKICMgSG93IHRvIGRlYWwgd2l0aCBhIHN0cmluZyBjb250YWluaW5nIGJ5dGVzIGJlZm9yZSBoYW5kaW5nIGl0IHRvIHRoZQogIyBhcHBsaWNhdGlvbiB0aHJvdWdoIHRoZSAnbm9ybWFsJyBpbnRlcmZhY2UuCiBkZWYgX3Nhbml0aXplKHN0cmluZyk6Ci0gICAgIyBUdXJuIGFueSBlc2NhcGVkIGJ5dGVzIGludG8gdW5pY29kZSAndW5rbm93bicgY2hhci4KLSAgICBvcmlnaW5hbF9ieXRlcyA9IHN0cmluZy5lbmNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCi0gICAgcmV0dXJuIG9yaWdpbmFsX2J5dGVzLmRlY29kZSgnYXNjaWknLCAncmVwbGFjZScpCisgICAgIyBUdXJuIGFueSBlc2NhcGVkIGJ5dGVzIGludG8gdW5pY29kZSAndW5rbm93bicgY2hhci4gIElmIHRoZSBlc2NhcGVkCisgICAgIyBieXRlcyBoYXBwZW4gdG8gYmUgdXRmLTggdGhleSB3aWxsIGluc3RlYWQgZ2V0IGRlY29kZWQsIGV2ZW4gaWYgdGhleQorICAgICMgd2VyZSBpbnZhbGlkIGluIHRoZSBjaGFyc2V0IHRoZSBzb3VyY2Ugd2FzIHN1cHBvc2VkIHRvIGJlIGluLiAgVGhpcworICAgICMgc2VlbXMgbGlrZSBpdCBpcyBub3QgYSBiYWQgdGhpbmc7IGEgZGVmZWN0IHdhcyBzdGlsbCByZWdpc3RlcmVkLgorICAgIG9yaWdpbmFsX2J5dGVzID0gc3RyaW5nLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICByZXR1cm4gb3JpZ2luYWxfYnl0ZXMuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykKKwogCiAKICMgSGVscGVycwpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5IGIvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CmluZGV4IDIzNWRlYjUuLjRjYmFhZGUgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKQEAgLTMzLDkgKzMzLDkgQEAKICAgICAndXMnICAgICAgICAgICAgICAgICA6ICdhc2NpaScsCiAgICAgJ3VzX2FzY2lpJyAgICAgICAgICAgOiAnYXNjaWknLAogCi0gICAgIyMgYmFzZTY0X2NvZGVjIGNvZGVjCi0gICAgIydiYXNlNjQnICAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCi0gICAgIydiYXNlXzY0JyAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCisgICAgIyBiYXNlNjRfY29kZWMgY29kZWMKKyAgICAnYmFzZTY0JyAgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAorICAgICdiYXNlXzY0JyAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCiAKICAgICAjIGJpZzUgY29kZWMKICAgICAnYmlnNV90dycgICAgICAgICAgICA6ICdiaWc1JywKQEAgLTQ1LDggKzQ1LDggQEAKICAgICAnYmlnNV9oa3NjcycgICAgICAgICA6ICdiaWc1aGtzY3MnLAogICAgICdoa3NjcycgICAgICAgICAgICAgIDogJ2JpZzVoa3NjcycsCiAKLSAgICAjIyBiejJfY29kZWMgY29kZWMKLSAgICAjJ2J6MicgICAgICAgICAgICAgICAgOiAnYnoyX2NvZGVjJywKKyAgICAjIGJ6Ml9jb2RlYyBjb2RlYworICAgICdiejInICAgICAgICAgICAgICAgIDogJ2J6Ml9jb2RlYycsCiAKICAgICAjIGNwMDM3IGNvZGVjCiAgICAgJzAzNycgICAgICAgICAgICAgICAgOiAnY3AwMzcnLApAQCAtNjMsNiArNjMsMTIgQEAKICAgICAnY3NpYm0xMDI2JyAgICAgICAgICA6ICdjcDEwMjYnLAogICAgICdpYm0xMDI2JyAgICAgICAgICAgIDogJ2NwMTAyNicsCiAKKyAgICAjIGNwMTEyNSBjb2RlYworICAgICcxMTI1JyAgICAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdpYm0xMTI1JyAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdjcDg2NnUnICAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdydXNjaWknICAgICAgICAgICAgICA6ICdjcDExMjUnLAorCiAgICAgIyBjcDExNDAgY29kZWMKICAgICAnMTE0MCcgICAgICAgICAgICAgICA6ICdjcDExNDAnLAogICAgICdpYm0xMTQwJyAgICAgICAgICAgIDogJ2NwMTE0MCcsCkBAIC0xMDMsNiArMTA5LDExIEBACiAgICAgJzEyNTgnICAgICAgICAgICAgICAgOiAnY3AxMjU4JywKICAgICAnd2luZG93c18xMjU4JyAgICAgICA6ICdjcDEyNTgnLAogCisgICAgIyBjcDI3MyBjb2RlYworICAgICcyNzMnICAgICAgICAgICAgICAgIDogJ2NwMjczJywKKyAgICAnaWJtMjczJyAgICAgICAgICAgICA6ICdjcDI3MycsCisgICAgJ2NzaWJtMjczJyAgICAgICAgICAgOiAnY3AyNzMnLAorCiAgICAgIyBjcDQyNCBjb2RlYwogICAgICc0MjQnICAgICAgICAgICAgICAgIDogJ2NwNDI0JywKICAgICAnY3NpYm00MjQnICAgICAgICAgICA6ICdjcDQyNCcsCkBAIC0yNDgsOCArMjU5LDggQEAKICAgICAnY3A5MzYnICAgICAgICAgICAgICA6ICdnYmsnLAogICAgICdtczkzNicgICAgICAgICAgICAgIDogJ2diaycsCiAKLSAgICAjIyBoZXhfY29kZWMgY29kZWMKLSAgICAjJ2hleCcgICAgICAgICAgICAgICAgOiAnaGV4X2NvZGVjJywKKyAgICAjIGhleF9jb2RlYyBjb2RlYworICAgICdoZXgnICAgICAgICAgICAgICAgIDogJ2hleF9jb2RlYycsCiAKICAgICAjIGhwX3JvbWFuOCBjb2RlYwogICAgICdyb21hbjgnICAgICAgICAgICAgIDogJ2hwX3JvbWFuOCcsCkBAIC00NTAsMTMgKzQ2MSwxMyBAQAogICAgICdjcDE1NCcgICAgICAgICAgICAgIDogJ3B0Y3AxNTQnLAogICAgICdjeXJpbGxpY19hc2lhbicgICAgIDogJ3B0Y3AxNTQnLAogCi0gICAgIyMgcXVvcHJpX2NvZGVjIGNvZGVjCi0gICAgIydxdW9wcmknICAgICAgICAgICAgIDogJ3F1b3ByaV9jb2RlYycsCi0gICAgIydxdW90ZWRfcHJpbnRhYmxlJyAgIDogJ3F1b3ByaV9jb2RlYycsCi0gICAgIydxdW90ZWRwcmludGFibGUnICAgIDogJ3F1b3ByaV9jb2RlYycsCisgICAgIyBxdW9wcmlfY29kZWMgY29kZWMKKyAgICAncXVvcHJpJyAgICAgICAgICAgICA6ICdxdW9wcmlfY29kZWMnLAorICAgICdxdW90ZWRfcHJpbnRhYmxlJyAgIDogJ3F1b3ByaV9jb2RlYycsCisgICAgJ3F1b3RlZHByaW50YWJsZScgICAgOiAncXVvcHJpX2NvZGVjJywKIAotICAgICMjIHJvdF8xMyBjb2RlYwotICAgICMncm90MTMnICAgICAgICAgICAgICA6ICdyb3RfMTMnLAorICAgICMgcm90XzEzIGNvZGVjCisgICAgJ3JvdDEzJyAgICAgICAgICAgICAgOiAncm90XzEzJywKIAogICAgICMgc2hpZnRfamlzIGNvZGVjCiAgICAgJ2Nzc2hpZnRqaXMnICAgICAgICAgOiAnc2hpZnRfamlzJywKQEAgLTUxOCwxMiArNTI5LDEyIEBACiAgICAgJ3V0ZjhfdWNzMicgICAgICAgICAgOiAndXRmXzgnLAogICAgICd1dGY4X3VjczQnICAgICAgICAgIDogJ3V0Zl84JywKIAotICAgICMjIHV1X2NvZGVjIGNvZGVjCi0gICAgIyd1dScgICAgICAgICAgICAgICAgIDogJ3V1X2NvZGVjJywKKyAgICAjIHV1X2NvZGVjIGNvZGVjCisgICAgJ3V1JyAgICAgICAgICAgICAgICAgOiAndXVfY29kZWMnLAogCi0gICAgIyMgemxpYl9jb2RlYyBjb2RlYwotICAgICMnemlwJyAgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKLSAgICAjJ3psaWInICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCisgICAgIyB6bGliX2NvZGVjIGNvZGVjCisgICAgJ3ppcCcgICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCisgICAgJ3psaWInICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCiAKICAgICAjIHRlbXBvcmFyeSBtYWMgQ0pLIGFsaWFzZXMsIHdpbGwgYmUgcmVwbGFjZWQgYnkgcHJvcGVyIGNvZGVjcyBpbiAzLjEKICAgICAneF9tYWNfamFwYW5lc2UnICAgICAgOiAnc2hpZnRfamlzJywKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkgYi9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5CmluZGV4IGJmZTJjMWUuLjRlZGQ3MDggMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkKKysrIGIvTGliL2VuY29kaW5ncy9jcDAzNy5weQpAQCAtMzAxLDcgKzMwMSw2IEBACiAgICAgJ1x4ZDknICAgICAjICAweEZEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQogICAgICdceGRhJyAgICAgIyAgMHhGRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKICAgICAnXHg5ZicgICAgICMgIDB4RkYgLT4gQ09OVFJPTAotICAgICdcdWZmZmUnICAgIyMgV2lkZW4gdG8gVUNTMiBmb3Igb3B0aW1pemF0aW9uCiApCiAKICMjIyBFbmNvZGluZyB0YWJsZQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDExMjUucHkgYi9MaWIvZW5jb2RpbmdzL2NwMTEyNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZkNjlkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9jcDExMjUucHkKQEAgLTAsMCArMSw2OTggQEAKKyIiIiBQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgZm9yIENQMTEyNQorCisiIiIjIgorCitpbXBvcnQgY29kZWNzCisKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisKKyAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfbWFwKQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nX3RhYmxlKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LHNlbGYuZXJyb3JzLGVuY29kaW5nX21hcClbMF0KKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxzZWxmLmVycm9ycyxkZWNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIHBhc3MKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSdjcDExMjUnLAorICAgICAgICBlbmNvZGU9Q29kZWMoKS5lbmNvZGUsCisgICAgICAgIGRlY29kZT1Db2RlYygpLmRlY29kZSwKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPUluY3JlbWVudGFsRW5jb2RlciwKKyAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKKyAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICApCisKKyMjIyBEZWNvZGluZyBNYXAKKworZGVjb2RpbmdfbWFwID0gY29kZWNzLm1ha2VfaWRlbnRpdHlfZGljdChyYW5nZSgyNTYpKQorZGVjb2RpbmdfbWFwLnVwZGF0ZSh7CisgICAgMHgwMDgwOiAweDA0MTAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCisgICAgMHgwMDgxOiAweDA0MTEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCRQorICAgIDB4MDA4MjogMHgwNDEyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVkUKKyAgICAweDAwODM6IDB4MDQxMywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorICAgIDB4MDA4NDogMHgwNDE0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgREUKKyAgICAweDAwODU6IDB4MDQxNSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIElFCisgICAgMHgwMDg2OiAweDA0MTYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyAgICAweDAwODc6IDB4MDQxNywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCisgICAgMHgwMDg4OiAweDA0MTgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCisgICAgMHgwMDg5OiAweDA0MTksICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCisgICAgMHgwMDhhOiAweDA0MWEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorICAgIDB4MDA4YjogMHgwNDFiLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUwKKyAgICAweDAwOGM6IDB4MDQxYywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCisgICAgMHgwMDhkOiAweDA0MWQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTgorICAgIDB4MDA4ZTogMHgwNDFlLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTworICAgIDB4MDA4ZjogMHgwNDFmLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKKyAgICAweDAwOTA6IDB4MDQyMCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVSCisgICAgMHgwMDkxOiAweDA0MjEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUworICAgIDB4MDA5MjogMHgwNDIyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKKyAgICAweDAwOTM6IDB4MDQyMywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFUKKyAgICAweDAwOTQ6IDB4MDQyNCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVGCisgICAgMHgwMDk1OiAweDA0MjUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQQorICAgIDB4MDA5NjogMHgwNDI2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVFNFCisgICAgMHgwMDk3OiAweDA0MjcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBDSEUKKyAgICAweDAwOTg6IDB4MDQyOCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQQorICAgIDB4MDA5OTogMHgwNDI5LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKyAgICAweDAwOWE6IDB4MDQyYSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBUkQgU0lHTgorICAgIDB4MDA5YjogMHgwNDJiLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorICAgIDB4MDA5YzogMHgwNDJjLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOCisgICAgMHgwMDlkOiAweDA0MmQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFCisgICAgMHgwMDllOiAweDA0MmUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorICAgIDB4MDA5ZjogMHgwNDJmLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKKyAgICAweDAwYTA6IDB4MDQzMCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBBCisgICAgMHgwMGExOiAweDA0MzEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQkUKKyAgICAweDAwYTI6IDB4MDQzMiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBWRQorICAgIDB4MDBhMzogMHgwNDMzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRQorICAgIDB4MDBhNDogMHgwNDM0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERFCisgICAgMHgwMGE1OiAweDA0MzUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKyAgICAweDAwYTY6IDB4MDQzNiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKKyAgICAweDAwYTc6IDB4MDQzNywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBaRQorICAgIDB4MDBhODogMHgwNDM4LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKKyAgICAweDAwYTk6IDB4MDQzOSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCisgICAgMHgwMGFhOiAweDA0M2EsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EKKyAgICAweDAwYWI6IDB4MDQzYiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTAorICAgIDB4MDBhYzogMHgwNDNjLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVNCisgICAgMHgwMGFkOiAweDA0M2QsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4KKyAgICAweDAwYWU6IDB4MDQzZSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBPCisgICAgMHgwMGFmOiAweDA0M2YsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKKyAgICAweDAwYjA6IDB4MjU5MSwgICAgICMgIExJR0hUIFNIQURFCisgICAgMHgwMGIxOiAweDI1OTIsICAgICAjICBNRURJVU0gU0hBREUKKyAgICAweDAwYjI6IDB4MjU5MywgICAgICMgIERBUksgU0hBREUKKyAgICAweDAwYjM6IDB4MjUwMiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgIDB4MDBiNDogMHgyNTI0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgwMGI1OiAweDI1NjEsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MDBiNjogMHgyNTYyLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDAwYjc6IDB4MjU1NiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDAwYjg6IDB4MjU1NSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDAwYjk6IDB4MjU2MywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDAwYmE6IDB4MjU1MSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAweDAwYmI6IDB4MjU1NywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgIDB4MDBiYzogMHgyNTVkLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgIDB4MDBiZDogMHgyNTVjLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDAwYmU6IDB4MjU1YiwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgwMGJmOiAweDI1MTAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgIDB4MDBjMDogMHgyNTE0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorICAgIDB4MDBjMTogMHgyNTM0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGMyOiAweDI1MmMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjMzogMHgyNTFjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MDBjNDogMHgyNTAwLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAweDAwYzU6IDB4MjUzYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjNjogMHgyNTVlLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgwMGM3OiAweDI1NWYsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDAwYzg6IDB4MjU1YSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgMHgwMGM5OiAweDI1NTQsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgMHgwMGNhOiAweDI1NjksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNiOiAweDI1NjYsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2M6IDB4MjU2MCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgwMGNkOiAweDI1NTAsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAweDAwY2U6IDB4MjU2YywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2Y6IDB4MjU2NywgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgwMGQwOiAweDI1NjgsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MDBkMTogMHgyNTY0LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MDBkMjogMHgyNTY1LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MDBkMzogMHgyNTU5LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgwMGQ0OiAweDI1NTgsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDAwZDU6IDB4MjU1MiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgwMGQ2OiAweDI1NTMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MDBkNzogMHgyNTZiLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDAwZDg6IDB4MjU2YSwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgwMGQ5OiAweDI1MTgsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAweDAwZGE6IDB4MjUwYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgIDB4MDBkYjogMHgyNTg4LCAgICAgIyAgRlVMTCBCTE9DSworICAgIDB4MDBkYzogMHgyNTg0LCAgICAgIyAgTE9XRVIgSEFMRiBCTE9DSworICAgIDB4MDBkZDogMHgyNThjLCAgICAgIyAgTEVGVCBIQUxGIEJMT0NLCisgICAgMHgwMGRlOiAweDI1OTAsICAgICAjICBSSUdIVCBIQUxGIEJMT0NLCisgICAgMHgwMGRmOiAweDI1ODAsICAgICAjICBVUFBFUiBIQUxGIEJMT0NLCisgICAgMHgwMGUwOiAweDA0NDAsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKKyAgICAweDAwZTE6IDB4MDQ0MSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFUworICAgIDB4MDBlMjogMHgwNDQyLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFCisgICAgMHgwMGUzOiAweDA0NDMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorICAgIDB4MDBlNDogMHgwNDQ0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCisgICAgMHgwMGU1OiAweDA0NDUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEKKyAgICAweDAwZTY6IDB4MDQ0NiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKKyAgICAweDAwZTc6IDB4MDQ0NywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKKyAgICAweDAwZTg6IDB4MDQ0OCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKKyAgICAweDAwZTk6IDB4MDQ0OSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorICAgIDB4MDBlYTogMHgwNDRhLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBUkQgU0lHTgorICAgIDB4MDBlYjogMHgwNDRiLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUKKyAgICAweDAwZWM6IDB4MDQ0YywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAweDAwZWQ6IDB4MDQ0ZCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFCisgICAgMHgwMGVlOiAweDA0NGUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWVUKKyAgICAweDAwZWY6IDB4MDQ0ZiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZQQorICAgIDB4MDBmMDogMHgwNDAxLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KKyAgICAweDAwZjE6IDB4MDQ1MSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJTworICAgIDB4MDBmMjogMHgwNDkwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgMHgwMGYzOiAweDA0OTEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgMHgwMGY0OiAweDA0MDQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAweDAwZjU6IDB4MDQ1NCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAweDAwZjY6IDB4MDQwNiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgIDB4MDBmNzogMHgwNDU2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgIDB4MDBmODogMHgwNDA3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUkKKyAgICAweDAwZjk6IDB4MDQ1NywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZSQorICAgIDB4MDBmYTogMHgwMGI3LCAgICAgIyAgTUlERExFIERPVAorICAgIDB4MDBmYjogMHgyMjFhLCAgICAgIyAgU1FVQVJFIFJPT1QKKyAgICAweDAwZmM6IDB4MjExNiwgICAgICMgIE5VTUVSTyBTSUdOCisgICAgMHgwMGZkOiAweDAwYTQsICAgICAjICBDVVJSRU5DWSBTSUdOCisgICAgMHgwMGZlOiAweDI1YTAsICAgICAjICBCTEFDSyBTUVVBUkUKKyAgICAweDAwZmY6IDB4MDBhMCwgICAgICMgIE5PLUJSRUFLIFNQQUNFCit9KQorCisjIyMgRGVjb2RpbmcgVGFibGUKKworZGVjb2RpbmdfdGFibGUgPSAoCisgICAgJ1x4MDAnICAgICAjICAweDAwMDAgLT4gTlVMTAorICAgICdceDAxJyAgICAgIyAgMHgwMDAxIC0+IFNUQVJUIE9GIEhFQURJTkcKKyAgICAnXHgwMicgICAgICMgIDB4MDAwMiAtPiBTVEFSVCBPRiBURVhUCisgICAgJ1x4MDMnICAgICAjICAweDAwMDMgLT4gRU5EIE9GIFRFWFQKKyAgICAnXHgwNCcgICAgICMgIDB4MDAwNCAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OCisgICAgJ1x4MDUnICAgICAjICAweDAwMDUgLT4gRU5RVUlSWQorICAgICdceDA2JyAgICAgIyAgMHgwMDA2IC0+IEFDS05PV0xFREdFCisgICAgJ1x4MDcnICAgICAjICAweDAwMDcgLT4gQkVMTAorICAgICdceDA4JyAgICAgIyAgMHgwMDA4IC0+IEJBQ0tTUEFDRQorICAgICdcdCcgICAgICAgIyAgMHgwMDA5IC0+IEhPUklaT05UQUwgVEFCVUxBVElPTgorICAgICdcbicgICAgICAgIyAgMHgwMDBhIC0+IExJTkUgRkVFRAorICAgICdceDBiJyAgICAgIyAgMHgwMDBiIC0+IFZFUlRJQ0FMIFRBQlVMQVRJT04KKyAgICAnXHgwYycgICAgICMgIDB4MDAwYyAtPiBGT1JNIEZFRUQKKyAgICAnXHInICAgICAgICMgIDB4MDAwZCAtPiBDQVJSSUFHRSBSRVRVUk4KKyAgICAnXHgwZScgICAgICMgIDB4MDAwZSAtPiBTSElGVCBPVVQKKyAgICAnXHgwZicgICAgICMgIDB4MDAwZiAtPiBTSElGVCBJTgorICAgICdceDEwJyAgICAgIyAgMHgwMDEwIC0+IERBVEEgTElOSyBFU0NBUEUKKyAgICAnXHgxMScgICAgICMgIDB4MDAxMSAtPiBERVZJQ0UgQ09OVFJPTCBPTkUKKyAgICAnXHgxMicgICAgICMgIDB4MDAxMiAtPiBERVZJQ0UgQ09OVFJPTCBUV08KKyAgICAnXHgxMycgICAgICMgIDB4MDAxMyAtPiBERVZJQ0UgQ09OVFJPTCBUSFJFRQorICAgICdceDE0JyAgICAgIyAgMHgwMDE0IC0+IERFVklDRSBDT05UUk9MIEZPVVIKKyAgICAnXHgxNScgICAgICMgIDB4MDAxNSAtPiBORUdBVElWRSBBQ0tOT1dMRURHRQorICAgICdceDE2JyAgICAgIyAgMHgwMDE2IC0+IFNZTkNIUk9OT1VTIElETEUKKyAgICAnXHgxNycgICAgICMgIDB4MDAxNyAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLCisgICAgJ1x4MTgnICAgICAjICAweDAwMTggLT4gQ0FOQ0VMCisgICAgJ1x4MTknICAgICAjICAweDAwMTkgLT4gRU5EIE9GIE1FRElVTQorICAgICdceDFhJyAgICAgIyAgMHgwMDFhIC0+IFNVQlNUSVRVVEUKKyAgICAnXHgxYicgICAgICMgIDB4MDAxYiAtPiBFU0NBUEUKKyAgICAnXHgxYycgICAgICMgIDB4MDAxYyAtPiBGSUxFIFNFUEFSQVRPUgorICAgICdceDFkJyAgICAgIyAgMHgwMDFkIC0+IEdST1VQIFNFUEFSQVRPUgorICAgICdceDFlJyAgICAgIyAgMHgwMDFlIC0+IFJFQ09SRCBTRVBBUkFUT1IKKyAgICAnXHgxZicgICAgICMgIDB4MDAxZiAtPiBVTklUIFNFUEFSQVRPUgorICAgICcgJyAgICAgICAgIyAgMHgwMDIwIC0+IFNQQUNFCisgICAgJyEnICAgICAgICAjICAweDAwMjEgLT4gRVhDTEFNQVRJT04gTUFSSworICAgICciJyAgICAgICAgIyAgMHgwMDIyIC0+IFFVT1RBVElPTiBNQVJLCisgICAgJyMnICAgICAgICAjICAweDAwMjMgLT4gTlVNQkVSIFNJR04KKyAgICAnJCcgICAgICAgICMgIDB4MDAyNCAtPiBET0xMQVIgU0lHTgorICAgICclJyAgICAgICAgIyAgMHgwMDI1IC0+IFBFUkNFTlQgU0lHTgorICAgICcmJyAgICAgICAgIyAgMHgwMDI2IC0+IEFNUEVSU0FORAorICAgICInIiAgICAgICAgIyAgMHgwMDI3IC0+IEFQT1NUUk9QSEUKKyAgICAnKCcgICAgICAgICMgIDB4MDAyOCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgJyknICAgICAgICAjICAweDAwMjkgLT4gUklHSFQgUEFSRU5USEVTSVMKKyAgICAnKicgICAgICAgICMgIDB4MDAyYSAtPiBBU1RFUklTSworICAgICcrJyAgICAgICAgIyAgMHgwMDJiIC0+IFBMVVMgU0lHTgorICAgICcsJyAgICAgICAgIyAgMHgwMDJjIC0+IENPTU1BCisgICAgJy0nICAgICAgICAjICAweDAwMmQgLT4gSFlQSEVOLU1JTlVTCisgICAgJy4nICAgICAgICAjICAweDAwMmUgLT4gRlVMTCBTVE9QCisgICAgJy8nICAgICAgICAjICAweDAwMmYgLT4gU09MSURVUworICAgICcwJyAgICAgICAgIyAgMHgwMDMwIC0+IERJR0lUIFpFUk8KKyAgICAnMScgICAgICAgICMgIDB4MDAzMSAtPiBESUdJVCBPTkUKKyAgICAnMicgICAgICAgICMgIDB4MDAzMiAtPiBESUdJVCBUV08KKyAgICAnMycgICAgICAgICMgIDB4MDAzMyAtPiBESUdJVCBUSFJFRQorICAgICc0JyAgICAgICAgIyAgMHgwMDM0IC0+IERJR0lUIEZPVVIKKyAgICAnNScgICAgICAgICMgIDB4MDAzNSAtPiBESUdJVCBGSVZFCisgICAgJzYnICAgICAgICAjICAweDAwMzYgLT4gRElHSVQgU0lYCisgICAgJzcnICAgICAgICAjICAweDAwMzcgLT4gRElHSVQgU0VWRU4KKyAgICAnOCcgICAgICAgICMgIDB4MDAzOCAtPiBESUdJVCBFSUdIVAorICAgICc5JyAgICAgICAgIyAgMHgwMDM5IC0+IERJR0lUIE5JTkUKKyAgICAnOicgICAgICAgICMgIDB4MDAzYSAtPiBDT0xPTgorICAgICc7JyAgICAgICAgIyAgMHgwMDNiIC0+IFNFTUlDT0xPTgorICAgICc8JyAgICAgICAgIyAgMHgwMDNjIC0+IExFU1MtVEhBTiBTSUdOCisgICAgJz0nICAgICAgICAjICAweDAwM2QgLT4gRVFVQUxTIFNJR04KKyAgICAnPicgICAgICAgICMgIDB4MDAzZSAtPiBHUkVBVEVSLVRIQU4gU0lHTgorICAgICc/JyAgICAgICAgIyAgMHgwMDNmIC0+IFFVRVNUSU9OIE1BUksKKyAgICAnQCcgICAgICAgICMgIDB4MDA0MCAtPiBDT01NRVJDSUFMIEFUCisgICAgJ0EnICAgICAgICAjICAweDAwNDEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorICAgICdCJyAgICAgICAgIyAgMHgwMDQyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEIKKyAgICAnQycgICAgICAgICMgIDB4MDA0MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgJ0QnICAgICAgICAjICAweDAwNDQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorICAgICdFJyAgICAgICAgIyAgMHgwMDQ1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUKKyAgICAnRicgICAgICAgICMgIDB4MDA0NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgJ0cnICAgICAgICAjICAweDAwNDcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworICAgICdIJyAgICAgICAgIyAgMHgwMDQ4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEgKKyAgICAnSScgICAgICAgICMgIDB4MDA0OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgJ0onICAgICAgICAjICAweDAwNGEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorICAgICdLJyAgICAgICAgIyAgMHgwMDRiIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEsKKyAgICAnTCcgICAgICAgICMgIDB4MDA0YyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgJ00nICAgICAgICAjICAweDAwNGQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorICAgICdOJyAgICAgICAgIyAgMHgwMDRlIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4KKyAgICAnTycgICAgICAgICMgIDB4MDA0ZiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1AnICAgICAgICAjICAweDAwNTAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorICAgICdRJyAgICAgICAgIyAgMHgwMDUxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFEKKyAgICAnUicgICAgICAgICMgIDB4MDA1MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgJ1MnICAgICAgICAjICAweDAwNTMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworICAgICdUJyAgICAgICAgIyAgMHgwMDU0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFQKKyAgICAnVScgICAgICAgICMgIDB4MDA1NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1YnICAgICAgICAjICAweDAwNTYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorICAgICdXJyAgICAgICAgIyAgMHgwMDU3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFcKKyAgICAnWCcgICAgICAgICMgIDB4MDA1OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgJ1knICAgICAgICAjICAweDAwNTkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorICAgICdaJyAgICAgICAgIyAgMHgwMDVhIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFoKKyAgICAnWycgICAgICAgICMgIDB4MDA1YiAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1xcJyAgICAgICAjICAweDAwNWMgLT4gUkVWRVJTRSBTT0xJRFVTCisgICAgJ10nICAgICAgICAjICAweDAwNWQgLT4gUklHSFQgU1FVQVJFIEJSQUNLRVQKKyAgICAnXicgICAgICAgICMgIDB4MDA1ZSAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgICdfJyAgICAgICAgIyAgMHgwMDVmIC0+IExPVyBMSU5FCisgICAgJ2AnICAgICAgICAjICAweDAwNjAgLT4gR1JBVkUgQUNDRU5UCisgICAgJ2EnICAgICAgICAjICAweDAwNjEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAnYicgICAgICAgICMgIDB4MDA2MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQgorICAgICdjJyAgICAgICAgIyAgMHgwMDYzIC0+IExBVElOIFNNQUxMIExFVFRFUiBDCisgICAgJ2QnICAgICAgICAjICAweDAwNjQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAnZScgICAgICAgICMgIDB4MDA2NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRQorICAgICdmJyAgICAgICAgIyAgMHgwMDY2IC0+IExBVElOIFNNQUxMIExFVFRFUiBGCisgICAgJ2cnICAgICAgICAjICAweDAwNjcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAnaCcgICAgICAgICMgIDB4MDA2OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSAorICAgICdpJyAgICAgICAgIyAgMHgwMDY5IC0+IExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgJ2onICAgICAgICAjICAweDAwNmEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAnaycgICAgICAgICMgIDB4MDA2YiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSworICAgICdsJyAgICAgICAgIyAgMHgwMDZjIC0+IExBVElOIFNNQUxMIExFVFRFUiBMCisgICAgJ20nICAgICAgICAjICAweDAwNmQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAnbicgICAgICAgICMgIDB4MDA2ZSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgICdvJyAgICAgICAgIyAgMHgwMDZmIC0+IExBVElOIFNNQUxMIExFVFRFUiBPCisgICAgJ3AnICAgICAgICAjICAweDAwNzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAncScgICAgICAgICMgIDB4MDA3MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUQorICAgICdyJyAgICAgICAgIyAgMHgwMDcyIC0+IExBVElOIFNNQUxMIExFVFRFUiBSCisgICAgJ3MnICAgICAgICAjICAweDAwNzMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAndCcgICAgICAgICMgIDB4MDA3NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVAorICAgICd1JyAgICAgICAgIyAgMHgwMDc1IC0+IExBVElOIFNNQUxMIExFVFRFUiBVCisgICAgJ3YnICAgICAgICAjICAweDAwNzYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAndycgICAgICAgICMgIDB4MDA3NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVworICAgICd4JyAgICAgICAgIyAgMHgwMDc4IC0+IExBVElOIFNNQUxMIExFVFRFUiBYCisgICAgJ3knICAgICAgICAjICAweDAwNzkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAneicgICAgICAgICMgIDB4MDA3YSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWgorICAgICd7JyAgICAgICAgIyAgMHgwMDdiIC0+IExFRlQgQ1VSTFkgQlJBQ0tFVAorICAgICd8JyAgICAgICAgIyAgMHgwMDdjIC0+IFZFUlRJQ0FMIExJTkUKKyAgICAnfScgICAgICAgICMgIDB4MDA3ZCAtPiBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgJ34nICAgICAgICAjICAweDAwN2UgLT4gVElMREUKKyAgICAnXHg3ZicgICAgICMgIDB4MDA3ZiAtPiBERUxFVEUKKyAgICAnXHUwNDEwJyAgICMgIDB4MDA4MCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCisgICAgJ1x1MDQxMScgICAjICAweDAwODEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkUKKyAgICAnXHUwNDEyJyAgICMgIDB4MDA4MiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorICAgICdcdTA0MTMnICAgIyAgMHgwMDgzIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorICAgICdcdTA0MTQnICAgIyAgMHgwMDg0IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIERFCisgICAgJ1x1MDQxNScgICAjICAweDAwODUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyAgICAnXHUwNDE2JyAgICMgIDB4MDA4NiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyAgICAnXHUwNDE3JyAgICMgIDB4MDA4NyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRQorICAgICdcdTA0MTgnICAgIyAgMHgwMDg4IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEkKKyAgICAnXHUwNDE5JyAgICMgIDB4MDA4OSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCisgICAgJ1x1MDQxYScgICAjICAweDAwOGEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EKKyAgICAnXHUwNDFiJyAgICMgIDB4MDA4YiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorICAgICdcdTA0MWMnICAgIyAgMHgwMDhjIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCisgICAgJ1x1MDQxZCcgICAjICAweDAwOGQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KKyAgICAnXHUwNDFlJyAgICMgIDB4MDA4ZSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1x1MDQxZicgICAjICAweDAwOGYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKKyAgICAnXHUwNDIwJyAgICMgIDB4MDA5MCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUgorICAgICdcdTA0MjEnICAgIyAgMHgwMDkxIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCisgICAgJ1x1MDQyMicgICAjICAweDAwOTIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKKyAgICAnXHUwNDIzJyAgICMgIDB4MDA5MyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1x1MDQyNCcgICAjICAweDAwOTQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUYKKyAgICAnXHUwNDI1JyAgICMgIDB4MDA5NSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQQorICAgICdcdTA0MjYnICAgIyAgMHgwMDk2IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFRTRQorICAgICdcdTA0MjcnICAgIyAgMHgwMDk3IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorICAgICdcdTA0MjgnICAgIyAgMHgwMDk4IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQQorICAgICdcdTA0MjknICAgIyAgMHgwMDk5IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQ0hBCisgICAgJ1x1MDQyYScgICAjICAweDAwOWEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCisgICAgJ1x1MDQyYicgICAjICAweDAwOWIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorICAgICdcdTA0MmMnICAgIyAgMHgwMDljIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNPRlQgU0lHTgorICAgICdcdTA0MmQnICAgIyAgMHgwMDlkIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKyAgICAnXHUwNDJlJyAgICMgIDB4MDA5ZSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorICAgICdcdTA0MmYnICAgIyAgMHgwMDlmIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlBCisgICAgJ1x1MDQzMCcgICAjICAweDAwYTAgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKyAgICAnXHUwNDMxJyAgICMgIDB4MDBhMSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQkUKKyAgICAnXHUwNDMyJyAgICMgIDB4MDBhMiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVkUKKyAgICAnXHUwNDMzJyAgICMgIDB4MDBhMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCisgICAgJ1x1MDQzNCcgICAjICAweDAwYTQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERFCisgICAgJ1x1MDQzNScgICAjICAweDAwYTUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFCisgICAgJ1x1MDQzNicgICAjICAweDAwYTYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorICAgICdcdTA0MzcnICAgIyAgMHgwMGE3IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBaRQorICAgICdcdTA0MzgnICAgIyAgMHgwMGE4IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBJCisgICAgJ1x1MDQzOScgICAjICAweDAwYTkgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKKyAgICAnXHUwNDNhJyAgICMgIDB4MDBhYSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EKKyAgICAnXHUwNDNiJyAgICMgIDB4MDBhYiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUwKKyAgICAnXHUwNDNjJyAgICMgIDB4MDBhYyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KKyAgICAnXHUwNDNkJyAgICMgIDB4MDBhZCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4KKyAgICAnXHUwNDNlJyAgICMgIDB4MDBhZSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgTworICAgICdcdTA0M2YnICAgIyAgMHgwMGFmIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBQRQorICAgICdcdTI1OTEnICAgIyAgMHgwMGIwIC0+IExJR0hUIFNIQURFCisgICAgJ1x1MjU5MicgICAjICAweDAwYjEgLT4gTUVESVVNIFNIQURFCisgICAgJ1x1MjU5MycgICAjICAweDAwYjIgLT4gREFSSyBTSEFERQorICAgICdcdTI1MDInICAgIyAgMHgwMGIzIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgICdcdTI1MjQnICAgIyAgMHgwMGI0IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgICdcdTI1NjEnICAgIyAgMHgwMGI1IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgJ1x1MjU2MicgICAjICAweDAwYjYgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTU2JyAgICMgIDB4MDBiNyAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgJ1x1MjU1NScgICAjICAweDAwYjggLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgICdcdTI1NjMnICAgIyAgMHgwMGI5IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAnXHUyNTUxJyAgICMgIDB4MDBiYSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgJ1x1MjU1NycgICAjICAweDAwYmIgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgJ1x1MjU1ZCcgICAjICAweDAwYmMgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgICdcdTI1NWMnICAgIyAgMHgwMGJkIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgJ1x1MjU1YicgICAjICAweDAwYmUgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAnXHUyNTEwJyAgICMgIDB4MDBiZiAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgICdcdTI1MTQnICAgIyAgMHgwMGMwIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICAnXHUyNTM0JyAgICMgIDB4MDBjMSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTJjJyAgICMgIDB4MDBjMiAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1MWMnICAgIyAgMHgwMGMzIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAnXHUyNTAwJyAgICMgIDB4MDBjNCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgICdcdTI1M2MnICAgIyAgMHgwMGM1IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NWUnICAgIyAgMHgwMGM2IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgICdcdTI1NWYnICAgIyAgMHgwMGM3IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgICdcdTI1NWEnICAgIyAgMHgwMGM4IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgJ1x1MjU1NCcgICAjICAweDAwYzkgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgICdcdTI1NjknICAgIyAgMHgwMGNhIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTY2JyAgICMgIDB4MDBjYiAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTYwJyAgICMgIDB4MDBjYyAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgICdcdTI1NTAnICAgIyAgMHgwMGNkIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgICdcdTI1NmMnICAgIyAgMHgwMGNlIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTY3JyAgICMgIDB4MDBjZiAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgICdcdTI1NjgnICAgIyAgMHgwMGQwIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgJ1x1MjU2NCcgICAjICAweDAwZDEgLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgICdcdTI1NjUnICAgIyAgMHgwMGQyIC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAnXHUyNTU5JyAgICMgIDB4MDBkMyAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAnXHUyNTU4JyAgICMgIDB4MDBkNCAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAnXHUyNTUyJyAgICMgIDB4MDBkNSAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgICdcdTI1NTMnICAgIyAgMHgwMGQ2IC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgJ1x1MjU2YicgICAjICAweDAwZDcgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAnXHUyNTZhJyAgICMgIDB4MDBkOCAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgICdcdTI1MTgnICAgIyAgMHgwMGQ5IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgICdcdTI1MGMnICAgIyAgMHgwMGRhIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgICdcdTI1ODgnICAgIyAgMHgwMGRiIC0+IEZVTEwgQkxPQ0sKKyAgICAnXHUyNTg0JyAgICMgIDB4MDBkYyAtPiBMT1dFUiBIQUxGIEJMT0NLCisgICAgJ1x1MjU4YycgICAjICAweDAwZGQgLT4gTEVGVCBIQUxGIEJMT0NLCisgICAgJ1x1MjU5MCcgICAjICAweDAwZGUgLT4gUklHSFQgSEFMRiBCTE9DSworICAgICdcdTI1ODAnICAgIyAgMHgwMGRmIC0+IFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAnXHUwNDQwJyAgICMgIDB4MDBlMCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKKyAgICAnXHUwNDQxJyAgICMgIDB4MDBlMSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKKyAgICAnXHUwNDQyJyAgICMgIDB4MDBlMiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUKKyAgICAnXHUwNDQzJyAgICMgIDB4MDBlMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorICAgICdcdTA0NDQnICAgIyAgMHgwMGU0IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFRgorICAgICdcdTA0NDUnICAgIyAgMHgwMGU1IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBIQQorICAgICdcdTA0NDYnICAgIyAgMHgwMGU2IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKKyAgICAnXHUwNDQ3JyAgICMgIDB4MDBlNyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCisgICAgJ1x1MDQ0OCcgICAjICAweDAwZTggLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQQorICAgICdcdTA0NDknICAgIyAgMHgwMGU5IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorICAgICdcdTA0NGEnICAgIyAgMHgwMGVhIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KKyAgICAnXHUwNDRiJyAgICMgIDB4MDBlYiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQorICAgICdcdTA0NGMnICAgIyAgMHgwMGVjIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAnXHUwNDRkJyAgICMgIDB4MDBlZCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorICAgICdcdTA0NGUnICAgIyAgMHgwMGVlIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZVQorICAgICdcdTA0NGYnICAgIyAgMHgwMGVmIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZQQorICAgICdcdTA0MDEnICAgIyAgMHgwMGYwIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIElPCisgICAgJ1x1MDQ1MScgICAjICAweDAwZjEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPCisgICAgJ1x1MDQ5MCcgICAjICAweDAwZjIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgJ1x1MDQ5MScgICAjICAweDAwZjMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgICdcdTA0MDQnICAgIyAgMHgwMGY0IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgICdcdTA0NTQnICAgIyAgMHgwMGY1IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAnXHUwNDA2JyAgICMgIDB4MDBmNiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAnXHUwNDU2JyAgICMgIDB4MDBmNyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgJ1x1MDQwNycgICAjICAweDAwZjggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUkKKyAgICAnXHUwNDU3JyAgICMgIDB4MDBmOSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUkKKyAgICAnXHhiNycgICAgICMgIDB4MDBmYSAtPiBNSURETEUgRE9UCisgICAgJ1x1MjIxYScgICAjICAweDAwZmIgLT4gU1FVQVJFIFJPT1QKKyAgICAnXHUyMTE2JyAgICMgIDB4MDBmYyAtPiBOVU1FUk8gU0lHTgorICAgICdceGE0JyAgICAgIyAgMHgwMGZkIC0+IENVUlJFTkNZIFNJR04KKyAgICAnXHUyNWEwJyAgICMgIDB4MDBmZSAtPiBCTEFDSyBTUVVBUkUKKyAgICAnXHhhMCcgICAgICMgIDB4MDBmZiAtPiBOTy1CUkVBSyBTUEFDRQorKQorCisjIyMgRW5jb2RpbmcgTWFwCisKK2VuY29kaW5nX21hcCA9IHsKKyAgICAweDAwMDA6IDB4MDAwMCwgICAgICMgIE5VTEwKKyAgICAweDAwMDE6IDB4MDAwMSwgICAgICMgIFNUQVJUIE9GIEhFQURJTkcKKyAgICAweDAwMDI6IDB4MDAwMiwgICAgICMgIFNUQVJUIE9GIFRFWFQKKyAgICAweDAwMDM6IDB4MDAwMywgICAgICMgIEVORCBPRiBURVhUCisgICAgMHgwMDA0OiAweDAwMDQsICAgICAjICBFTkQgT0YgVFJBTlNNSVNTSU9OCisgICAgMHgwMDA1OiAweDAwMDUsICAgICAjICBFTlFVSVJZCisgICAgMHgwMDA2OiAweDAwMDYsICAgICAjICBBQ0tOT1dMRURHRQorICAgIDB4MDAwNzogMHgwMDA3LCAgICAgIyAgQkVMTAorICAgIDB4MDAwODogMHgwMDA4LCAgICAgIyAgQkFDS1NQQUNFCisgICAgMHgwMDA5OiAweDAwMDksICAgICAjICBIT1JJWk9OVEFMIFRBQlVMQVRJT04KKyAgICAweDAwMGE6IDB4MDAwYSwgICAgICMgIExJTkUgRkVFRAorICAgIDB4MDAwYjogMHgwMDBiLCAgICAgIyAgVkVSVElDQUwgVEFCVUxBVElPTgorICAgIDB4MDAwYzogMHgwMDBjLCAgICAgIyAgRk9STSBGRUVECisgICAgMHgwMDBkOiAweDAwMGQsICAgICAjICBDQVJSSUFHRSBSRVRVUk4KKyAgICAweDAwMGU6IDB4MDAwZSwgICAgICMgIFNISUZUIE9VVAorICAgIDB4MDAwZjogMHgwMDBmLCAgICAgIyAgU0hJRlQgSU4KKyAgICAweDAwMTA6IDB4MDAxMCwgICAgICMgIERBVEEgTElOSyBFU0NBUEUKKyAgICAweDAwMTE6IDB4MDAxMSwgICAgICMgIERFVklDRSBDT05UUk9MIE9ORQorICAgIDB4MDAxMjogMHgwMDEyLCAgICAgIyAgREVWSUNFIENPTlRST0wgVFdPCisgICAgMHgwMDEzOiAweDAwMTMsICAgICAjICBERVZJQ0UgQ09OVFJPTCBUSFJFRQorICAgIDB4MDAxNDogMHgwMDE0LCAgICAgIyAgREVWSUNFIENPTlRST0wgRk9VUgorICAgIDB4MDAxNTogMHgwMDE1LCAgICAgIyAgTkVHQVRJVkUgQUNLTk9XTEVER0UKKyAgICAweDAwMTY6IDB4MDAxNiwgICAgICMgIFNZTkNIUk9OT1VTIElETEUKKyAgICAweDAwMTc6IDB4MDAxNywgICAgICMgIEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sKKyAgICAweDAwMTg6IDB4MDAxOCwgICAgICMgIENBTkNFTAorICAgIDB4MDAxOTogMHgwMDE5LCAgICAgIyAgRU5EIE9GIE1FRElVTQorICAgIDB4MDAxYTogMHgwMDFhLCAgICAgIyAgU1VCU1RJVFVURQorICAgIDB4MDAxYjogMHgwMDFiLCAgICAgIyAgRVNDQVBFCisgICAgMHgwMDFjOiAweDAwMWMsICAgICAjICBGSUxFIFNFUEFSQVRPUgorICAgIDB4MDAxZDogMHgwMDFkLCAgICAgIyAgR1JPVVAgU0VQQVJBVE9SCisgICAgMHgwMDFlOiAweDAwMWUsICAgICAjICBSRUNPUkQgU0VQQVJBVE9SCisgICAgMHgwMDFmOiAweDAwMWYsICAgICAjICBVTklUIFNFUEFSQVRPUgorICAgIDB4MDAyMDogMHgwMDIwLCAgICAgIyAgU1BBQ0UKKyAgICAweDAwMjE6IDB4MDAyMSwgICAgICMgIEVYQ0xBTUFUSU9OIE1BUksKKyAgICAweDAwMjI6IDB4MDAyMiwgICAgICMgIFFVT1RBVElPTiBNQVJLCisgICAgMHgwMDIzOiAweDAwMjMsICAgICAjICBOVU1CRVIgU0lHTgorICAgIDB4MDAyNDogMHgwMDI0LCAgICAgIyAgRE9MTEFSIFNJR04KKyAgICAweDAwMjU6IDB4MDAyNSwgICAgICMgIFBFUkNFTlQgU0lHTgorICAgIDB4MDAyNjogMHgwMDI2LCAgICAgIyAgQU1QRVJTQU5ECisgICAgMHgwMDI3OiAweDAwMjcsICAgICAjICBBUE9TVFJPUEhFCisgICAgMHgwMDI4OiAweDAwMjgsICAgICAjICBMRUZUIFBBUkVOVEhFU0lTCisgICAgMHgwMDI5OiAweDAwMjksICAgICAjICBSSUdIVCBQQVJFTlRIRVNJUworICAgIDB4MDAyYTogMHgwMDJhLCAgICAgIyAgQVNURVJJU0sKKyAgICAweDAwMmI6IDB4MDAyYiwgICAgICMgIFBMVVMgU0lHTgorICAgIDB4MDAyYzogMHgwMDJjLCAgICAgIyAgQ09NTUEKKyAgICAweDAwMmQ6IDB4MDAyZCwgICAgICMgIEhZUEhFTi1NSU5VUworICAgIDB4MDAyZTogMHgwMDJlLCAgICAgIyAgRlVMTCBTVE9QCisgICAgMHgwMDJmOiAweDAwMmYsICAgICAjICBTT0xJRFVTCisgICAgMHgwMDMwOiAweDAwMzAsICAgICAjICBESUdJVCBaRVJPCisgICAgMHgwMDMxOiAweDAwMzEsICAgICAjICBESUdJVCBPTkUKKyAgICAweDAwMzI6IDB4MDAzMiwgICAgICMgIERJR0lUIFRXTworICAgIDB4MDAzMzogMHgwMDMzLCAgICAgIyAgRElHSVQgVEhSRUUKKyAgICAweDAwMzQ6IDB4MDAzNCwgICAgICMgIERJR0lUIEZPVVIKKyAgICAweDAwMzU6IDB4MDAzNSwgICAgICMgIERJR0lUIEZJVkUKKyAgICAweDAwMzY6IDB4MDAzNiwgICAgICMgIERJR0lUIFNJWAorICAgIDB4MDAzNzogMHgwMDM3LCAgICAgIyAgRElHSVQgU0VWRU4KKyAgICAweDAwMzg6IDB4MDAzOCwgICAgICMgIERJR0lUIEVJR0hUCisgICAgMHgwMDM5OiAweDAwMzksICAgICAjICBESUdJVCBOSU5FCisgICAgMHgwMDNhOiAweDAwM2EsICAgICAjICBDT0xPTgorICAgIDB4MDAzYjogMHgwMDNiLCAgICAgIyAgU0VNSUNPTE9OCisgICAgMHgwMDNjOiAweDAwM2MsICAgICAjICBMRVNTLVRIQU4gU0lHTgorICAgIDB4MDAzZDogMHgwMDNkLCAgICAgIyAgRVFVQUxTIFNJR04KKyAgICAweDAwM2U6IDB4MDAzZSwgICAgICMgIEdSRUFURVItVEhBTiBTSUdOCisgICAgMHgwMDNmOiAweDAwM2YsICAgICAjICBRVUVTVElPTiBNQVJLCisgICAgMHgwMDQwOiAweDAwNDAsICAgICAjICBDT01NRVJDSUFMIEFUCisgICAgMHgwMDQxOiAweDAwNDEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgMHgwMDQyOiAweDAwNDIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgMHgwMDQzOiAweDAwNDMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgMHgwMDQ0OiAweDAwNDQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgMHgwMDQ1OiAweDAwNDUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgMHgwMDQ2OiAweDAwNDYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgMHgwMDQ3OiAweDAwNDcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgMHgwMDQ4OiAweDAwNDgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgMHgwMDQ5OiAweDAwNDksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgMHgwMDRhOiAweDAwNGEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgMHgwMDRiOiAweDAwNGIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgMHgwMDRjOiAweDAwNGMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgMHgwMDRkOiAweDAwNGQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgMHgwMDRlOiAweDAwNGUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgMHgwMDRmOiAweDAwNGYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgMHgwMDUwOiAweDAwNTAsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgMHgwMDUxOiAweDAwNTEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgMHgwMDUyOiAweDAwNTIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgMHgwMDUzOiAweDAwNTMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgMHgwMDU0OiAweDAwNTQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgMHgwMDU1OiAweDAwNTUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgMHgwMDU2OiAweDAwNTYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgMHgwMDU3OiAweDAwNTcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgMHgwMDU4OiAweDAwNTgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgMHgwMDU5OiAweDAwNTksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgMHgwMDVhOiAweDAwNWEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgMHgwMDViOiAweDAwNWIsICAgICAjICBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgMHgwMDVjOiAweDAwNWMsICAgICAjICBSRVZFUlNFIFNPTElEVVMKKyAgICAweDAwNWQ6IDB4MDA1ZCwgICAgICMgIFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgMHgwMDVlOiAweDAwNWUsICAgICAjICBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIDB4MDA1ZjogMHgwMDVmLCAgICAgIyAgTE9XIExJTkUKKyAgICAweDAwNjA6IDB4MDA2MCwgICAgICMgIEdSQVZFIEFDQ0VOVAorICAgIDB4MDA2MTogMHgwMDYxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAweDAwNjI6IDB4MDA2MiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgMHgwMDYzOiAweDAwNjMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgIDB4MDA2NDogMHgwMDY0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAweDAwNjU6IDB4MDA2NSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgMHgwMDY2OiAweDAwNjYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgIDB4MDA2NzogMHgwMDY3LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAweDAwNjg6IDB4MDA2OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBICisgICAgMHgwMDY5OiAweDAwNjksICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgIDB4MDA2YTogMHgwMDZhLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAweDAwNmI6IDB4MDA2YiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgMHgwMDZjOiAweDAwNmMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgIDB4MDA2ZDogMHgwMDZkLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAweDAwNmU6IDB4MDA2ZSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgMHgwMDZmOiAweDAwNmYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgIDB4MDA3MDogMHgwMDcwLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAweDAwNzE6IDB4MDA3MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgMHgwMDcyOiAweDAwNzIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgIDB4MDA3MzogMHgwMDczLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAweDAwNzQ6IDB4MDA3NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgMHgwMDc1OiAweDAwNzUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgIDB4MDA3NjogMHgwMDc2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAweDAwNzc6IDB4MDA3NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgMHgwMDc4OiAweDAwNzgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgIDB4MDA3OTogMHgwMDc5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAweDAwN2E6IDB4MDA3YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgMHgwMDdiOiAweDAwN2IsICAgICAjICBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAweDAwN2M6IDB4MDA3YywgICAgICMgIFZFUlRJQ0FMIExJTkUKKyAgICAweDAwN2Q6IDB4MDA3ZCwgICAgICMgIFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAweDAwN2U6IDB4MDA3ZSwgICAgICMgIFRJTERFCisgICAgMHgwMDdmOiAweDAwN2YsICAgICAjICBERUxFVEUKKyAgICAweDAwYTA6IDB4MDBmZiwgICAgICMgIE5PLUJSRUFLIFNQQUNFCisgICAgMHgwMGE0OiAweDAwZmQsICAgICAjICBDVVJSRU5DWSBTSUdOCisgICAgMHgwMGI3OiAweDAwZmEsICAgICAjICBNSURETEUgRE9UCisgICAgMHgwNDAxOiAweDAwZjAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJTworICAgIDB4MDQwNDogMHgwMGY0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgMHgwNDA2OiAweDAwZjYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAweDA0MDc6IDB4MDBmOCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlJCisgICAgMHgwNDEwOiAweDAwODAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCisgICAgMHgwNDExOiAweDAwODEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCRQorICAgIDB4MDQxMjogMHgwMDgyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVkUKKyAgICAweDA0MTM6IDB4MDA4MywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorICAgIDB4MDQxNDogMHgwMDg0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgREUKKyAgICAweDA0MTU6IDB4MDA4NSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIElFCisgICAgMHgwNDE2OiAweDAwODYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyAgICAweDA0MTc6IDB4MDA4NywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCisgICAgMHgwNDE4OiAweDAwODgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCisgICAgMHgwNDE5OiAweDAwODksICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCisgICAgMHgwNDFhOiAweDAwOGEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorICAgIDB4MDQxYjogMHgwMDhiLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUwKKyAgICAweDA0MWM6IDB4MDA4YywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCisgICAgMHgwNDFkOiAweDAwOGQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTgorICAgIDB4MDQxZTogMHgwMDhlLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTworICAgIDB4MDQxZjogMHgwMDhmLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKKyAgICAweDA0MjA6IDB4MDA5MCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVSCisgICAgMHgwNDIxOiAweDAwOTEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUworICAgIDB4MDQyMjogMHgwMDkyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKKyAgICAweDA0MjM6IDB4MDA5MywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFUKKyAgICAweDA0MjQ6IDB4MDA5NCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVGCisgICAgMHgwNDI1OiAweDAwOTUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQQorICAgIDB4MDQyNjogMHgwMDk2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVFNFCisgICAgMHgwNDI3OiAweDAwOTcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBDSEUKKyAgICAweDA0Mjg6IDB4MDA5OCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQQorICAgIDB4MDQyOTogMHgwMDk5LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKyAgICAweDA0MmE6IDB4MDA5YSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBUkQgU0lHTgorICAgIDB4MDQyYjogMHgwMDliLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorICAgIDB4MDQyYzogMHgwMDljLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOCisgICAgMHgwNDJkOiAweDAwOWQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFCisgICAgMHgwNDJlOiAweDAwOWUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorICAgIDB4MDQyZjogMHgwMDlmLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKKyAgICAweDA0MzA6IDB4MDBhMCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBBCisgICAgMHgwNDMxOiAweDAwYTEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQkUKKyAgICAweDA0MzI6IDB4MDBhMiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBWRQorICAgIDB4MDQzMzogMHgwMGEzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRQorICAgIDB4MDQzNDogMHgwMGE0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERFCisgICAgMHgwNDM1OiAweDAwYTUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKyAgICAweDA0MzY6IDB4MDBhNiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKKyAgICAweDA0Mzc6IDB4MDBhNywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBaRQorICAgIDB4MDQzODogMHgwMGE4LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKKyAgICAweDA0Mzk6IDB4MDBhOSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCisgICAgMHgwNDNhOiAweDAwYWEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EKKyAgICAweDA0M2I6IDB4MDBhYiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTAorICAgIDB4MDQzYzogMHgwMGFjLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVNCisgICAgMHgwNDNkOiAweDAwYWQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4KKyAgICAweDA0M2U6IDB4MDBhZSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBPCisgICAgMHgwNDNmOiAweDAwYWYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKKyAgICAweDA0NDA6IDB4MDBlMCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFUgorICAgIDB4MDQ0MTogMHgwMGUxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCisgICAgMHgwNDQyOiAweDAwZTIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUKKyAgICAweDA0NDM6IDB4MDBlMywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBVCisgICAgMHgwNDQ0OiAweDAwZTQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKKyAgICAweDA0NDU6IDB4MDBlNSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBIQQorICAgIDB4MDQ0NjogMHgwMGU2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRQorICAgIDB4MDQ0NzogMHgwMGU3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQorICAgIDB4MDQ0ODogMHgwMGU4LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQQorICAgIDB4MDQ0OTogMHgwMGU5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBCisgICAgMHgwNDRhOiAweDAwZWEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFSRCBTSUdOCisgICAgMHgwNDRiOiAweDAwZWIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQorICAgIDB4MDQ0YzogMHgwMGVjLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTgorICAgIDB4MDQ0ZDogMHgwMGVkLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKyAgICAweDA0NGU6IDB4MDBlZSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZVQorICAgIDB4MDQ0ZjogMHgwMGVmLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCisgICAgMHgwNDUxOiAweDAwZjEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKyAgICAweDA0NTQ6IDB4MDBmNSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAweDA0NTY6IDB4MDBmNywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAweDA0NTc6IDB4MDBmOSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZSQorICAgIDB4MDQ5MDogMHgwMGYyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgMHgwNDkxOiAweDAwZjMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgMHgyMTE2OiAweDAwZmMsICAgICAjICBOVU1FUk8gU0lHTgorICAgIDB4MjIxYTogMHgwMGZiLCAgICAgIyAgU1FVQVJFIFJPT1QKKyAgICAweDI1MDA6IDB4MDBjNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgMHgyNTAyOiAweDAwYjMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICAweDI1MGM6IDB4MDBkYSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgIDB4MjUxMDogMHgwMGJmLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAweDI1MTQ6IDB4MDBjMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICAweDI1MTg6IDB4MDBkOSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgIDB4MjUxYzogMHgwMGMzLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MjUyNDogMHgwMGI0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgyNTJjOiAweDAwYzIsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjUzNDogMHgwMGMxLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTNjOiAweDAwYzUsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDI1NTA6IDB4MDBjZCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgIDB4MjU1MTogMHgwMGJhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgIDB4MjU1MjogMHgwMGQ1LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDI1NTM6IDB4MDBkNiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgyNTU0OiAweDAwYzksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgMHgyNTU1OiAweDAwYjgsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgyNTU2OiAweDAwYjcsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgyNTU3OiAweDAwYmIsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlQKKyAgICAweDI1NTg6IDB4MDBkNCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MjU1OTogMHgwMGQzLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgyNTVhOiAweDAwYzgsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgIDB4MjU1YjogMHgwMGJlLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDI1NWM6IDB4MDBiZCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgyNTVkOiAweDAwYmMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgMHgyNTVlOiAweDAwYzYsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDI1NWY6IDB4MDBjNywgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MjU2MDogMHgwMGNjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDI1NjE6IDB4MDBiNSwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgyNTYyOiAweDAwYjYsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MjU2MzogMHgwMGI5LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MjU2NDogMHgwMGQxLCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MjU2NTogMHgwMGQyLCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MjU2NjogMHgwMGNiLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTY3OiAweDAwY2YsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MjU2ODogMHgwMGQwLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDI1Njk6IDB4MDBjYSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDI1NmE6IDB4MDBkOCwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgyNTZiOiAweDAwZDcsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MjU2YzogMHgwMGNlLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU4MDogMHgwMGRmLCAgICAgIyAgVVBQRVIgSEFMRiBCTE9DSworICAgIDB4MjU4NDogMHgwMGRjLCAgICAgIyAgTE9XRVIgSEFMRiBCTE9DSworICAgIDB4MjU4ODogMHgwMGRiLCAgICAgIyAgRlVMTCBCTE9DSworICAgIDB4MjU4YzogMHgwMGRkLCAgICAgIyAgTEVGVCBIQUxGIEJMT0NLCisgICAgMHgyNTkwOiAweDAwZGUsICAgICAjICBSSUdIVCBIQUxGIEJMT0NLCisgICAgMHgyNTkxOiAweDAwYjAsICAgICAjICBMSUdIVCBTSEFERQorICAgIDB4MjU5MjogMHgwMGIxLCAgICAgIyAgTUVESVVNIFNIQURFCisgICAgMHgyNTkzOiAweDAwYjIsICAgICAjICBEQVJLIFNIQURFCisgICAgMHgyNWEwOiAweDAwZmUsICAgICAjICBCTEFDSyBTUVVBUkUKK30KZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3AyNzMucHkgYi9MaWIvZW5jb2RpbmdzL2NwMjczLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzZkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL2NwMjczLnB5CkBAIC0wLDAgKzEsMzA3IEBACisiIiIgUHl0aG9uIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIGNwMjczIGdlbmVyYXRlZCBmcm9tICdweXRob24tbWFwcGluZ3MvQ1AyNzMuVFhUJyB3aXRoIGdlbmNvZGVjLnB5LgorCisiIiIjIgorCitpbXBvcnQgY29kZWNzCisKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisKKyAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfdGFibGUpCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxlcnJvcnMsZGVjb2RpbmdfdGFibGUpCisKK2NsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZW5jb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZGVjb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBwYXNzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0nY3AyNzMnLAorICAgICAgICBlbmNvZGU9Q29kZWMoKS5lbmNvZGUsCisgICAgICAgIGRlY29kZT1Db2RlYygpLmRlY29kZSwKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPUluY3JlbWVudGFsRW5jb2RlciwKKyAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKKyAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICApCisKKworIyMjIERlY29kaW5nIFRhYmxlCisKK2RlY29kaW5nX3RhYmxlID0gKAorICAgICdceDAwJyAgICAgICMgIDB4MDAgLT4gTlVMTCAoTlVMKQorICAgICdceDAxJyAgICAgICMgIDB4MDEgLT4gU1RBUlQgT0YgSEVBRElORyAoU09IKQorICAgICdceDAyJyAgICAgICMgIDB4MDIgLT4gU1RBUlQgT0YgVEVYVCAoU1RYKQorICAgICdceDAzJyAgICAgICMgIDB4MDMgLT4gRU5EIE9GIFRFWFQgKEVUWCkKKyAgICAnXHg5YycgICAgICAjICAweDA0IC0+IFNUUklORyBURVJNSU5BVE9SIChTVCkKKyAgICAnXHQnICAgICAgICAjICAweDA1IC0+IENIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkKKyAgICAnXHg4NicgICAgICAjICAweDA2IC0+IFNUQVJUIE9GIFNFTEVDVEVEIEFSRUEgKFNTQSkKKyAgICAnXHg3ZicgICAgICAjICAweDA3IC0+IERFTEVURSAoREVMKQorICAgICdceDk3JyAgICAgICMgIDB4MDggLT4gRU5EIE9GIEdVQVJERUQgQVJFQSAoRVBBKQorICAgICdceDhkJyAgICAgICMgIDB4MDkgLT4gUkVWRVJTRSBMSU5FIEZFRUQgKFJJKQorICAgICdceDhlJyAgICAgICMgIDB4MEEgLT4gU0lOR0xFLVNISUZUIFRXTyAoU1MyKQorICAgICdceDBiJyAgICAgICMgIDB4MEIgLT4gTElORSBUQUJVTEFUSU9OIChWVCkKKyAgICAnXHgwYycgICAgICAjICAweDBDIC0+IEZPUk0gRkVFRCAoRkYpCisgICAgJ1xyJyAgICAgICAgIyAgMHgwRCAtPiBDQVJSSUFHRSBSRVRVUk4gKENSKQorICAgICdceDBlJyAgICAgICMgIDB4MEUgLT4gU0hJRlQgT1VUIChTTykKKyAgICAnXHgwZicgICAgICAjICAweDBGIC0+IFNISUZUIElOIChTSSkKKyAgICAnXHgxMCcgICAgICAjICAweDEwIC0+IERBVEFMSU5LIEVTQ0FQRSAoRExFKQorICAgICdceDExJyAgICAgICMgIDB4MTEgLT4gREVWSUNFIENPTlRST0wgT05FIChEQzEpCisgICAgJ1x4MTInICAgICAgIyAgMHgxMiAtPiBERVZJQ0UgQ09OVFJPTCBUV08gKERDMikKKyAgICAnXHgxMycgICAgICAjICAweDEzIC0+IERFVklDRSBDT05UUk9MIFRIUkVFIChEQzMpCisgICAgJ1x4OWQnICAgICAgIyAgMHgxNCAtPiBPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkQgKE9TQykKKyAgICAnXHg4NScgICAgICAjICAweDE1IC0+IE5FWFQgTElORSAoTkVMKQorICAgICdceDA4JyAgICAgICMgIDB4MTYgLT4gQkFDS1NQQUNFIChCUykKKyAgICAnXHg4NycgICAgICAjICAweDE3IC0+IEVORCBPRiBTRUxFQ1RFRCBBUkVBIChFU0EpCisgICAgJ1x4MTgnICAgICAgIyAgMHgxOCAtPiBDQU5DRUwgKENBTikKKyAgICAnXHgxOScgICAgICAjICAweDE5IC0+IEVORCBPRiBNRURJVU0gKEVNKQorICAgICdceDkyJyAgICAgICMgIDB4MUEgLT4gUFJJVkFURSBVU0UgVFdPIChQVTIpCisgICAgJ1x4OGYnICAgICAgIyAgMHgxQiAtPiBTSU5HTEUtU0hJRlQgVEhSRUUgKFNTMykKKyAgICAnXHgxYycgICAgICAjICAweDFDIC0+IEZJTEUgU0VQQVJBVE9SIChJUzQpCisgICAgJ1x4MWQnICAgICAgIyAgMHgxRCAtPiBHUk9VUCBTRVBBUkFUT1IgKElTMykKKyAgICAnXHgxZScgICAgICAjICAweDFFIC0+IFJFQ09SRCBTRVBBUkFUT1IgKElTMikKKyAgICAnXHgxZicgICAgICAjICAweDFGIC0+IFVOSVQgU0VQQVJBVE9SIChJUzEpCisgICAgJ1x4ODAnICAgICAgIyAgMHgyMCAtPiBQQURESU5HIENIQVJBQ1RFUiAoUEFEKQorICAgICdceDgxJyAgICAgICMgIDB4MjEgLT4gSElHSCBPQ1RFVCBQUkVTRVQgKEhPUCkKKyAgICAnXHg4MicgICAgICAjICAweDIyIC0+IEJSRUFLIFBFUk1JVFRFRCBIRVJFIChCUEgpCisgICAgJ1x4ODMnICAgICAgIyAgMHgyMyAtPiBOTyBCUkVBSyBIRVJFIChOQkgpCisgICAgJ1x4ODQnICAgICAgIyAgMHgyNCAtPiBJTkRFWCAoSU5EKQorICAgICdcbicgICAgICAgICMgIDB4MjUgLT4gTElORSBGRUVEIChMRikKKyAgICAnXHgxNycgICAgICAjICAweDI2IC0+IEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sgKEVUQikKKyAgICAnXHgxYicgICAgICAjICAweDI3IC0+IEVTQ0FQRSAoRVNDKQorICAgICdceDg4JyAgICAgICMgIDB4MjggLT4gQ0hBUkFDVEVSIFRBQlVMQVRJT04gU0VUIChIVFMpCisgICAgJ1x4ODknICAgICAgIyAgMHgyOSAtPiBDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT04gKEhUSikKKyAgICAnXHg4YScgICAgICAjICAweDJBIC0+IExJTkUgVEFCVUxBVElPTiBTRVQgKFZUUykKKyAgICAnXHg4YicgICAgICAjICAweDJCIC0+IFBBUlRJQUwgTElORSBGT1JXQVJEIChQTEQpCisgICAgJ1x4OGMnICAgICAgIyAgMHgyQyAtPiBQQVJUSUFMIExJTkUgQkFDS1dBUkQgKFBMVSkKKyAgICAnXHgwNScgICAgICAjICAweDJEIC0+IEVOUVVJUlkgKEVOUSkKKyAgICAnXHgwNicgICAgICAjICAweDJFIC0+IEFDS05PV0xFREdFIChBQ0spCisgICAgJ1x4MDcnICAgICAgIyAgMHgyRiAtPiBCRUxMIChCRUwpCisgICAgJ1x4OTAnICAgICAgIyAgMHgzMCAtPiBERVZJQ0UgQ09OVFJPTCBTVFJJTkcgKERDUykKKyAgICAnXHg5MScgICAgICAjICAweDMxIC0+IFBSSVZBVEUgVVNFIE9ORSAoUFUxKQorICAgICdceDE2JyAgICAgICMgIDB4MzIgLT4gU1lOQ0hST05PVVMgSURMRSAoU1lOKQorICAgICdceDkzJyAgICAgICMgIDB4MzMgLT4gU0VUIFRSQU5TTUlUIFNUQVRFIChTVFMpCisgICAgJ1x4OTQnICAgICAgIyAgMHgzNCAtPiBDQU5DRUwgQ0hBUkFDVEVSIChDQ0gpCisgICAgJ1x4OTUnICAgICAgIyAgMHgzNSAtPiBNRVNTQUdFIFdBSVRJTkcgKE1XKQorICAgICdceDk2JyAgICAgICMgIDB4MzYgLT4gU1RBUlQgT0YgR1VBUkRFRCBBUkVBIChTUEEpCisgICAgJ1x4MDQnICAgICAgIyAgMHgzNyAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OIChFT1QpCisgICAgJ1x4OTgnICAgICAgIyAgMHgzOCAtPiBTVEFSVCBPRiBTVFJJTkcgKFNPUykKKyAgICAnXHg5OScgICAgICAjICAweDM5IC0+IFNJTkdMRSBHUkFQSElDIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTR0NJKQorICAgICdceDlhJyAgICAgICMgIDB4M0EgLT4gU0lOR0xFIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTQ0kpCisgICAgJ1x4OWInICAgICAgIyAgMHgzQiAtPiBDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVIgKENTSSkKKyAgICAnXHgxNCcgICAgICAjICAweDNDIC0+IERFVklDRSBDT05UUk9MIEZPVVIgKERDNCkKKyAgICAnXHgxNScgICAgICAjICAweDNEIC0+IE5FR0FUSVZFIEFDS05PV0xFREdFIChOQUspCisgICAgJ1x4OWUnICAgICAgIyAgMHgzRSAtPiBQUklWQUNZIE1FU1NBR0UgKFBNKQorICAgICdceDFhJyAgICAgICMgIDB4M0YgLT4gU1VCU1RJVFVURSAoU1VCKQorICAgICcgJyAgICAgICAgICMgIDB4NDAgLT4gU1BBQ0UKKyAgICAnXHhhMCcgICAgICAjICAweDQxIC0+IE5PLUJSRUFLIFNQQUNFCisgICAgJ1x4ZTInICAgICAgIyAgMHg0MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAneycgICAgICAgICAjICAweDQzIC0+IExFRlQgQ1VSTFkgQlJBQ0tFVAorICAgICdceGUwJyAgICAgICMgIDB4NDQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgICdceGUxJyAgICAgICMgIDB4NDUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgICdceGUzJyAgICAgICMgIDB4NDYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgICdceGU1JyAgICAgICMgIDB4NDcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisgICAgJ1x4ZTcnICAgICAgIyAgMHg0OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAnXHhmMScgICAgICAjICAweDQ5IC0+IExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAnXHhjNCcgICAgICAjICAweDRBIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICAnLicgICAgICAgICAjICAweDRCIC0+IEZVTEwgU1RPUAorICAgICc8JyAgICAgICAgICMgIDB4NEMgLT4gTEVTUy1USEFOIFNJR04KKyAgICAnKCcgICAgICAgICAjICAweDREIC0+IExFRlQgUEFSRU5USEVTSVMKKyAgICAnKycgICAgICAgICAjICAweDRFIC0+IFBMVVMgU0lHTgorICAgICchJyAgICAgICAgICMgIDB4NEYgLT4gRVhDTEFNQVRJT04gTUFSSworICAgICcmJyAgICAgICAgICMgIDB4NTAgLT4gQU1QRVJTQU5ECisgICAgJ1x4ZTknICAgICAgIyAgMHg1MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgJ1x4ZWEnICAgICAgIyAgMHg1MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhlYicgICAgICAjICAweDUzIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZTgnICAgICAgIyAgMHg1NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgJ1x4ZWQnICAgICAgIyAgMHg1NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgJ1x4ZWUnICAgICAgIyAgMHg1NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhlZicgICAgICAjICAweDU3IC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZWMnICAgICAgIyAgMHg1OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgJ34nICAgICAgICAgIyAgMHg1OSAtPiBUSUxERQorICAgICdceGRjJyAgICAgICMgIDB4NUEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworICAgICckJyAgICAgICAgICMgIDB4NUIgLT4gRE9MTEFSIFNJR04KKyAgICAnKicgICAgICAgICAjICAweDVDIC0+IEFTVEVSSVNLCisgICAgJyknICAgICAgICAgIyAgMHg1RCAtPiBSSUdIVCBQQVJFTlRIRVNJUworICAgICc7JyAgICAgICAgICMgIDB4NUUgLT4gU0VNSUNPTE9OCisgICAgJ14nICAgICAgICAgIyAgMHg1RiAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgICctJyAgICAgICAgICMgIDB4NjAgLT4gSFlQSEVOLU1JTlVTCisgICAgJy8nICAgICAgICAgIyAgMHg2MSAtPiBTT0xJRFVTCisgICAgJ1x4YzInICAgICAgIyAgMHg2MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgICdbJyAgICAgICAgICMgIDB4NjMgLT4gTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgICdceGMwJyAgICAgICMgIDB4NjQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgJ1x4YzEnICAgICAgIyAgMHg2NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUKKyAgICAnXHhjMycgICAgICAjICAweDY2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgICdceGM1JyAgICAgICMgIDB4NjcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAnXHhjNycgICAgICAjICAweDY4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgJ1x4ZDEnICAgICAgIyAgMHg2OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAnXHhmNicgICAgICAjICAweDZBIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgJywnICAgICAgICAgIyAgMHg2QiAtPiBDT01NQQorICAgICclJyAgICAgICAgICMgIDB4NkMgLT4gUEVSQ0VOVCBTSUdOCisgICAgJ18nICAgICAgICAgIyAgMHg2RCAtPiBMT1cgTElORQorICAgICc+JyAgICAgICAgICMgIDB4NkUgLT4gR1JFQVRFUi1USEFOIFNJR04KKyAgICAnPycgICAgICAgICAjICAweDZGIC0+IFFVRVNUSU9OIE1BUksKKyAgICAnXHhmOCcgICAgICAjICAweDcwIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgJ1x4YzknICAgICAgIyAgMHg3MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICAnXHhjYScgICAgICAjICAweDcyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4Y2InICAgICAgIyAgMHg3MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgJ1x4YzgnICAgICAgIyAgMHg3NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAnXHhjZCcgICAgICAjICAweDc1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgICdceGNlJyAgICAgICMgIDB4NzYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhjZicgICAgICAjICAweDc3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhjYycgICAgICAjICAweDc4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgICdgJyAgICAgICAgICMgIDB4NzkgLT4gR1JBVkUgQUNDRU5UCisgICAgJzonICAgICAgICAgIyAgMHg3QSAtPiBDT0xPTgorICAgICcjJyAgICAgICAgICMgIDB4N0IgLT4gTlVNQkVSIFNJR04KKyAgICAnXHhhNycgICAgICAjICAweDdDIC0+IFNFQ1RJT04gU0lHTgorICAgICInIiAgICAgICAgICMgIDB4N0QgLT4gQVBPU1RST1BIRQorICAgICc9JyAgICAgICAgICMgIDB4N0UgLT4gRVFVQUxTIFNJR04KKyAgICAnIicgICAgICAgICAjICAweDdGIC0+IFFVT1RBVElPTiBNQVJLCisgICAgJ1x4ZDgnICAgICAgIyAgMHg4MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgJ2EnICAgICAgICAgIyAgMHg4MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQQorICAgICdiJyAgICAgICAgICMgIDB4ODIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICAnYycgICAgICAgICAjICAweDgzIC0+IExBVElOIFNNQUxMIExFVFRFUiBDCisgICAgJ2QnICAgICAgICAgIyAgMHg4NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRAorICAgICdlJyAgICAgICAgICMgIDB4ODUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICAnZicgICAgICAgICAjICAweDg2IC0+IExBVElOIFNNQUxMIExFVFRFUiBGCisgICAgJ2cnICAgICAgICAgIyAgMHg4NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRworICAgICdoJyAgICAgICAgICMgIDB4ODggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICAnaScgICAgICAgICAjICAweDg5IC0+IExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgJ1x4YWInICAgICAgIyAgMHg4QSAtPiBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgICdceGJiJyAgICAgICMgIDB4OEIgLT4gUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x4ZjAnICAgICAgIyAgMHg4QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisgICAgJ1x4ZmQnICAgICAgIyAgMHg4RCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgJ1x4ZmUnICAgICAgIyAgMHg4RSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKyAgICAnXHhiMScgICAgICAjICAweDhGIC0+IFBMVVMtTUlOVVMgU0lHTgorICAgICdceGIwJyAgICAgICMgIDB4OTAgLT4gREVHUkVFIFNJR04KKyAgICAnaicgICAgICAgICAjICAweDkxIC0+IExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgJ2snICAgICAgICAgIyAgMHg5MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSworICAgICdsJyAgICAgICAgICMgIDB4OTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAnbScgICAgICAgICAjICAweDk0IC0+IExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgJ24nICAgICAgICAgIyAgMHg5NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgICdvJyAgICAgICAgICMgIDB4OTYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAncCcgICAgICAgICAjICAweDk3IC0+IExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgJ3EnICAgICAgICAgIyAgMHg5OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUQorICAgICdyJyAgICAgICAgICMgIDB4OTkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAnXHhhYScgICAgICAjICAweDlBIC0+IEZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgJ1x4YmEnICAgICAgIyAgMHg5QiAtPiBNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyAgICAnXHhlNicgICAgICAjICAweDlDIC0+IExBVElOIFNNQUxMIExFVFRFUiBBRQorICAgICdceGI4JyAgICAgICMgIDB4OUQgLT4gQ0VESUxMQQorICAgICdceGM2JyAgICAgICMgIDB4OUUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUUKKyAgICAnXHhhNCcgICAgICAjICAweDlGIC0+IENVUlJFTkNZIFNJR04KKyAgICAnXHhiNScgICAgICAjICAweEEwIC0+IE1JQ1JPIFNJR04KKyAgICAnXHhkZicgICAgICAjICAweEExIC0+IExBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTIChHZXJtYW4pCisgICAgJ3MnICAgICAgICAgIyAgMHhBMiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUworICAgICd0JyAgICAgICAgICMgIDB4QTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICAndScgICAgICAgICAjICAweEE0IC0+IExBVElOIFNNQUxMIExFVFRFUiBVCisgICAgJ3YnICAgICAgICAgIyAgMHhBNSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVgorICAgICd3JyAgICAgICAgICMgIDB4QTYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICAneCcgICAgICAgICAjICAweEE3IC0+IExBVElOIFNNQUxMIExFVFRFUiBYCisgICAgJ3knICAgICAgICAgIyAgMHhBOCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWQorICAgICd6JyAgICAgICAgICMgIDB4QTkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICAnXHhhMScgICAgICAjICAweEFBIC0+IElOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKKyAgICAnXHhiZicgICAgICAjICAweEFCIC0+IElOVkVSVEVEIFFVRVNUSU9OIE1BUksKKyAgICAnXHhkMCcgICAgICAjICAweEFDIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEVUSCAoSWNlbGFuZGljKQorICAgICdceGRkJyAgICAgICMgIDB4QUQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgJ1x4ZGUnICAgICAgIyAgMHhBRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorICAgICdceGFlJyAgICAgICMgIDB4QUYgLT4gUkVHSVNURVJFRCBTSUdOCisgICAgJ1x4YTInICAgICAgIyAgMHhCMCAtPiBDRU5UIFNJR04KKyAgICAnXHhhMycgICAgICAjICAweEIxIC0+IFBPVU5EIFNJR04KKyAgICAnXHhhNScgICAgICAjICAweEIyIC0+IFlFTiBTSUdOCisgICAgJ1x4YjcnICAgICAgIyAgMHhCMyAtPiBNSURETEUgRE9UCisgICAgJ1x4YTknICAgICAgIyAgMHhCNCAtPiBDT1BZUklHSFQgU0lHTgorICAgICdAJyAgICAgICAgICMgIDB4QjUgLT4gQ09NTUVSQ0lBTCBBVAorICAgICdceGI2JyAgICAgICMgIDB4QjYgLT4gUElMQ1JPVyBTSUdOCisgICAgJ1x4YmMnICAgICAgIyAgMHhCNyAtPiBWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKKyAgICAnXHhiZCcgICAgICAjICAweEI4IC0+IFZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRgorICAgICdceGJlJyAgICAgICMgIDB4QjkgLT4gVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisgICAgJ1x4YWMnICAgICAgIyAgMHhCQSAtPiBOT1QgU0lHTgorICAgICd8JyAgICAgICAgICMgIDB4QkIgLT4gVkVSVElDQUwgTElORQorICAgICdcdTIwM2UnICAgICMgIDB4QkMgLT4gT1ZFUkxJTkUKKyAgICAnXHhhOCcgICAgICAjICAweEJEIC0+IERJQUVSRVNJUworICAgICdceGI0JyAgICAgICMgIDB4QkUgLT4gQUNVVEUgQUNDRU5UCisgICAgJ1x4ZDcnICAgICAgIyAgMHhCRiAtPiBNVUxUSVBMSUNBVElPTiBTSUdOCisgICAgJ1x4ZTQnICAgICAgIyAgMHhDMCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworICAgICdBJyAgICAgICAgICMgIDB4QzEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorICAgICdCJyAgICAgICAgICMgIDB4QzIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgICdDJyAgICAgICAgICMgIDB4QzMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgICdEJyAgICAgICAgICMgIDB4QzQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorICAgICdFJyAgICAgICAgICMgIDB4QzUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgICdGJyAgICAgICAgICMgIDB4QzYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgICdHJyAgICAgICAgICMgIDB4QzcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworICAgICdIJyAgICAgICAgICMgIDB4QzggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgICdJJyAgICAgICAgICMgIDB4QzkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgICdceGFkJyAgICAgICMgIDB4Q0EgLT4gU09GVCBIWVBIRU4KKyAgICAnXHhmNCcgICAgICAjICAweENCIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGE2JyAgICAgICMgIDB4Q0MgLT4gQlJPS0VOIEJBUgorICAgICdceGYyJyAgICAgICMgIDB4Q0QgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgICdceGYzJyAgICAgICMgIDB4Q0UgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgICdceGY1JyAgICAgICMgIDB4Q0YgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgICdceGZjJyAgICAgICMgIDB4RDAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAnSicgICAgICAgICAjICAweEQxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAnSycgICAgICAgICAjICAweEQyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEsKKyAgICAnTCcgICAgICAgICAjICAweEQzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEwKKyAgICAnTScgICAgICAgICAjICAweEQ0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICAnTicgICAgICAgICAjICAweEQ1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4KKyAgICAnTycgICAgICAgICAjICAweEQ2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8KKyAgICAnUCcgICAgICAgICAjICAweEQ3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICAnUScgICAgICAgICAjICAweEQ4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFEKKyAgICAnUicgICAgICAgICAjICAweEQ5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFIKKyAgICAnXHhiOScgICAgICAjICAweERBIC0+IFNVUEVSU0NSSVBUIE9ORQorICAgICdceGZiJyAgICAgICMgIDB4REIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ30nICAgICAgICAgIyAgMHhEQyAtPiBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgJ1x4ZjknICAgICAgIyAgMHhERCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgJ1x4ZmEnICAgICAgIyAgMHhERSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgJ1x4ZmYnICAgICAgIyAgMHhERiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworICAgICdceGQ2JyAgICAgICMgIDB4RTAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgICdceGY3JyAgICAgICMgIDB4RTEgLT4gRElWSVNJT04gU0lHTgorICAgICdTJyAgICAgICAgICMgIDB4RTIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworICAgICdUJyAgICAgICAgICMgIDB4RTMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgICdVJyAgICAgICAgICMgIDB4RTQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgICdWJyAgICAgICAgICMgIDB4RTUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorICAgICdXJyAgICAgICAgICMgIDB4RTYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgICdYJyAgICAgICAgICMgIDB4RTcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgICdZJyAgICAgICAgICMgIDB4RTggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorICAgICdaJyAgICAgICAgICMgIDB4RTkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgICdceGIyJyAgICAgICMgIDB4RUEgLT4gU1VQRVJTQ1JJUFQgVFdPCisgICAgJ1x4ZDQnICAgICAgIyAgMHhFQiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgICdcXCcgICAgICAgICMgIDB4RUMgLT4gUkVWRVJTRSBTT0xJRFVTCisgICAgJ1x4ZDInICAgICAgIyAgMHhFRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAnXHhkMycgICAgICAjICAweEVFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgICdceGQ1JyAgICAgICMgIDB4RUYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgJzAnICAgICAgICAgIyAgMHhGMCAtPiBESUdJVCBaRVJPCisgICAgJzEnICAgICAgICAgIyAgMHhGMSAtPiBESUdJVCBPTkUKKyAgICAnMicgICAgICAgICAjICAweEYyIC0+IERJR0lUIFRXTworICAgICczJyAgICAgICAgICMgIDB4RjMgLT4gRElHSVQgVEhSRUUKKyAgICAnNCcgICAgICAgICAjICAweEY0IC0+IERJR0lUIEZPVVIKKyAgICAnNScgICAgICAgICAjICAweEY1IC0+IERJR0lUIEZJVkUKKyAgICAnNicgICAgICAgICAjICAweEY2IC0+IERJR0lUIFNJWAorICAgICc3JyAgICAgICAgICMgIDB4RjcgLT4gRElHSVQgU0VWRU4KKyAgICAnOCcgICAgICAgICAjICAweEY4IC0+IERJR0lUIEVJR0hUCisgICAgJzknICAgICAgICAgIyAgMHhGOSAtPiBESUdJVCBOSU5FCisgICAgJ1x4YjMnICAgICAgIyAgMHhGQSAtPiBTVVBFUlNDUklQVCBUSFJFRQorICAgICdceGRiJyAgICAgICMgIDB4RkIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXScgICAgICAgICAjICAweEZDIC0+IFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1x4ZDknICAgICAgIyAgMHhGRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAnXHhkYScgICAgICAjICAweEZFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgICdceDlmJyAgICAgICMgIDB4RkYgLT4gQVBQTElDQVRJT04gUFJPR1JBTSBDT01NQU5EIChBUEMpCispCisKKyMjIyBFbmNvZGluZyB0YWJsZQorZW5jb2RpbmdfdGFibGU9Y29kZWNzLmNoYXJtYXBfYnVpbGQoZGVjb2RpbmdfdGFibGUpCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5IGIvTGliL2VuY29kaW5ncy9jcDUwMC5weQppbmRleCBhOTc1YmU3Li41ZjYxNTM1IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkKQEAgLTMwMSw3ICszMDEsNiBAQAogICAgICdceGQ5JyAgICAgIyAgMHhGRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKICAgICAnXHhkYScgICAgICMgIDB4RkUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCiAgICAgJ1x4OWYnICAgICAjICAweEZGIC0+IENPTlRST0wKLSAgICAnXHVmZmZlJyAgICMjIFdpZGVuIHRvIFVDUzIgZm9yIG9wdGltaXphdGlvbgogKQogCiAjIyMgRW5jb2RpbmcgdGFibGUKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5IGIvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKaW5kZXggZDljYzUxNi4uOGNmYzAxZiAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKKysrIGIvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKQEAgLTMwMSw3ICszMDEsNiBAQAogICAgICdceGZkJyAgICAgIyAgMHhGRCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCiAgICAgJ1x4ZmUnICAgICAjICAweEZFIC0+IExBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQogICAgICdceGZmJyAgICAgIyAgMHhGRiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUwotICAgICdcdWZmZmUnICAgIyMgV2lkZW4gdG8gVUNTMiBmb3Igb3B0aW1pemF0aW9uCiApCiAKICMjIyBFbmNvZGluZyB0YWJsZQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9yb3RfMTMucHkgYi9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weQppbmRleCAxZjJmNDdiLi5mMGI0MTg2IDEwMDc1NQotLS0gYS9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weQpAQCAtMTA2LDcgKzEwNiw3IEBACiAjIyMgRmlsdGVyIEFQSQogCiBkZWYgcm90MTMoaW5maWxlLCBvdXRmaWxlKToKLSAgICBvdXRmaWxlLndyaXRlKGluZmlsZS5yZWFkKCkuZW5jb2RlKCdyb3QtMTMnKSkKKyAgICBvdXRmaWxlLndyaXRlKGNvZGVjcy5lbmNvZGUoaW5maWxlLnJlYWQoKSwgJ3JvdC0xMycpKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX19pbml0X18ucHkgYi9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YzIxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjEwIEBACitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcGtndXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCisKKworX19hbGxfXyA9IFsidmVyc2lvbiIsICJib290c3RyYXAiXQorCisKK19TRVRVUFRPT0xTX1ZFUlNJT04gPSAiMi4xIgorCitfUElQX1ZFUlNJT04gPSAiMS41LjYiCisKKyMgcGlwIGN1cnJlbnRseSByZXF1aXJlcyBzc2wgc3VwcG9ydCwgc28gd2UgdHJ5IHRvIHByb3ZpZGUgYSBuaWNlcgorIyBlcnJvciBtZXNzYWdlIHdoZW4gdGhhdCBpcyBtaXNzaW5nIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCitfTUlTU0lOR19TU0xfTUVTU0FHRSA9ICgicGlwIHt9IHJlcXVpcmVzIFNTTC9UTFMiLmZvcm1hdChfUElQX1ZFUlNJT04pKQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisgICAgZGVmIF9yZXF1aXJlX3NzbF9mb3JfcGlwKCk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihfTUlTU0lOR19TU0xfTUVTU0FHRSkKK2Vsc2U6CisgICAgZGVmIF9yZXF1aXJlX3NzbF9mb3JfcGlwKCk6CisgICAgICAgIHBhc3MKKworX1BST0pFQ1RTID0gWworICAgICgic2V0dXB0b29scyIsIF9TRVRVUFRPT0xTX1ZFUlNJT04pLAorICAgICgicGlwIiwgX1BJUF9WRVJTSU9OKSwKK10KKworCitkZWYgX3J1bl9waXAoYXJncywgYWRkaXRpb25hbF9wYXRocz1Ob25lKToKKyAgICAjIEFkZCBvdXIgYnVuZGxlZCBzb2Z0d2FyZSB0byB0aGUgc3lzLnBhdGggc28gd2UgY2FuIGltcG9ydCBpdAorICAgIGlmIGFkZGl0aW9uYWxfcGF0aHMgaXMgbm90IE5vbmU6CisgICAgICAgIHN5cy5wYXRoID0gYWRkaXRpb25hbF9wYXRocyArIHN5cy5wYXRoCisKKyAgICAjIEluc3RhbGwgdGhlIGJ1bmRsZWQgc29mdHdhcmUKKyAgICBpbXBvcnQgcGlwCisgICAgcGlwLm1haW4oYXJncykKKworCitkZWYgdmVyc2lvbigpOgorICAgICIiIgorICAgIFJldHVybnMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIHBpcC4KKyAgICAiIiIKKyAgICByZXR1cm4gX1BJUF9WRVJTSU9OCisKK2RlZiBfZGlzYWJsZV9waXBfY29uZmlndXJhdGlvbl9zZXR0aW5ncygpOgorICAgICMgV2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSBhbGwgcGlwIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICMgd2hlbiBpbnZva2luZyBwaXAKKyAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MzQgZm9yIGRldGFpbHMKKyAgICBrZXlzX3RvX3JlbW92ZSA9IFtrIGZvciBrIGluIG9zLmVudmlyb24gaWYgay5zdGFydHN3aXRoKCJQSVBfIildCisgICAgZm9yIGsgaW4ga2V5c190b19yZW1vdmU6CisgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tdCisgICAgIyBXZSBhbHNvIGlnbm9yZSB0aGUgc2V0dGluZ3MgaW4gdGhlIGRlZmF1bHQgcGlwIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDA1MyBmb3IgZGV0YWlscworICAgIG9zLmVudmlyb25bJ1BJUF9DT05GSUdfRklMRSddID0gb3MuZGV2bnVsbAorCisKK2RlZiBib290c3RyYXAoKiwgcm9vdD1Ob25lLCB1cGdyYWRlPUZhbHNlLCB1c2VyPUZhbHNlLAorICAgICAgICAgICAgICBhbHRpbnN0YWxsPUZhbHNlLCBkZWZhdWx0X3BpcD1GYWxzZSwKKyAgICAgICAgICAgICAgdmVyYm9zaXR5PTApOgorICAgICIiIgorICAgIEJvb3RzdHJhcCBwaXAgaW50byB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uIChvciB0aGUgZ2l2ZW4gcm9vdAorICAgIGRpcmVjdG9yeSkuCisKKyAgICBOb3RlIHRoYXQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgYm90aCBzeXMucGF0aCBhbmQgb3MuZW52aXJvbi4KKyAgICAiIiIKKyAgICBpZiBhbHRpbnN0YWxsIGFuZCBkZWZhdWx0X3BpcDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IHVzZSBhbHRpbnN0YWxsIGFuZCBkZWZhdWx0X3BpcCB0b2dldGhlciIpCisKKyAgICBfcmVxdWlyZV9zc2xfZm9yX3BpcCgpCisgICAgX2Rpc2FibGVfcGlwX2NvbmZpZ3VyYXRpb25fc2V0dGluZ3MoKQorCisgICAgIyBCeSBkZWZhdWx0LCBpbnN0YWxsaW5nIHBpcCBhbmQgc2V0dXB0b29scyBpbnN0YWxscyBhbGwgb2YgdGhlCisgICAgIyBmb2xsb3dpbmcgc2NyaXB0cyAoWC5ZID09IHJ1bm5pbmcgUHl0aG9uIHZlcnNpb24pOgorICAgICMKKyAgICAjICAgcGlwLCBwaXBYLCBwaXBYLlksIGVhc3lfaW5zdGFsbCwgZWFzeV9pbnN0YWxsLVguWQorICAgICMKKyAgICAjIHBpcCAxLjUrIGFsbG93cyBlbnN1cmVwaXAgdG8gcmVxdWVzdCB0aGF0IHNvbWUgb2YgdGhvc2UgYmUgbGVmdCBvdXQKKyAgICBpZiBhbHRpbnN0YWxsOgorICAgICAgICAjIG9taXQgcGlwLCBwaXBYIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJhbHRpbnN0YWxsIgorICAgIGVsaWYgbm90IGRlZmF1bHRfcGlwOgorICAgICAgICAjIG9taXQgcGlwIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJpbnN0YWxsIgorCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICMgUHV0IG91ciBidW5kbGVkIHdoZWVscyBpbnRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgY29uc3RydWN0IHRoZQorICAgICAgICAjIGFkZGl0aW9uYWwgcGF0aHMgdGhhdCBuZWVkIGFkZGVkIHRvIHN5cy5wYXRoCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBbXQorICAgICAgICBmb3IgcHJvamVjdCwgdmVyc2lvbiBpbiBfUFJPSkVDVFM6CisgICAgICAgICAgICB3aGVlbF9uYW1lID0gInt9LXt9LXB5Mi5weTMtbm9uZS1hbnkud2hsIi5mb3JtYXQocHJvamVjdCwgdmVyc2lvbikKKyAgICAgICAgICAgIHdobCA9IHBrZ3V0aWwuZ2V0X2RhdGEoCisgICAgICAgICAgICAgICAgImVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgIl9idW5kbGVkL3t9Ii5mb3JtYXQod2hlZWxfbmFtZSksCisgICAgICAgICAgICApCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSksICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKHdobCkKKworICAgICAgICAgICAgYWRkaXRpb25hbF9wYXRocy5hcHBlbmQob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSkpCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHBpcCBjb21tYW5kCisgICAgICAgIGFyZ3MgPSBbImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLCB0bXBkaXJdCisgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICBhcmdzICs9IFsiLS1yb290Iiwgcm9vdF0KKyAgICAgICAgaWYgdXBncmFkZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLXVwZ3JhZGUiXQorICAgICAgICBpZiB1c2VyOgorICAgICAgICAgICAgYXJncyArPSBbIi0tdXNlciJdCisgICAgICAgIGlmIHZlcmJvc2l0eToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItIiArICJ2IiAqIHZlcmJvc2l0eV0KKworICAgICAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gX1BST0pFQ1RTXSwgYWRkaXRpb25hbF9wYXRocykKKworZGVmIF91bmluc3RhbGxfaGVscGVyKCosIHZlcmJvc2l0eT0wKToKKyAgICAiIiJIZWxwZXIgdG8gc3VwcG9ydCBhIGNsZWFuIGRlZmF1bHQgdW5pbnN0YWxsIHByb2Nlc3Mgb24gV2luZG93cworCisgICAgTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBtYXkgYWx0ZXIgb3MuZW52aXJvbi4KKyAgICAiIiIKKyAgICAjIE5vdGhpbmcgdG8gZG8gaWYgcGlwIHdhcyBuZXZlciBpbnN0YWxsZWQsIG9yIGhhcyBiZWVuIHJlbW92ZWQKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBwaXAKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZiB0aGUgcGlwIHZlcnNpb24gZG9lc24ndCBtYXRjaCB0aGUgYnVuZGxlZCBvbmUsIGxlYXZlIGl0IGFsb25lCisgICAgaWYgcGlwLl9fdmVyc2lvbl9fICE9IF9QSVBfVkVSU0lPTjoKKyAgICAgICAgbXNnID0gKCJlbnN1cmVwaXAgd2lsbCBvbmx5IHVuaW5zdGFsbCBhIG1hdGNoaW5nIHZlcnNpb24gIgorICAgICAgICAgICAgICAgIih7IXJ9IGluc3RhbGxlZCwgeyFyfSBidW5kbGVkKSIpCisgICAgICAgIHByaW50KG1zZy5mb3JtYXQocGlwLl9fdmVyc2lvbl9fLCBfUElQX1ZFUlNJT04pLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybgorCisgICAgX3JlcXVpcmVfc3NsX2Zvcl9waXAoKQorICAgIF9kaXNhYmxlX3BpcF9jb25maWd1cmF0aW9uX3NldHRpbmdzKCkKKworICAgICMgQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBwaXAgY29tbWFuZAorICAgIGFyZ3MgPSBbInVuaW5zdGFsbCIsICIteSJdCisgICAgaWYgdmVyYm9zaXR5OgorICAgICAgICBhcmdzICs9IFsiLSIgKyAidiIgKiB2ZXJib3NpdHldCisKKyAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gcmV2ZXJzZWQoX1BST0pFQ1RTKV0pCisKKworZGVmIF9tYWluKGFyZ3Y9Tm9uZSk6CisgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgIHByaW50KCJJZ25vcmluZyBlbnN1cmVwaXAgZmFpbHVyZToge30iLmZvcm1hdChfTUlTU0lOR19TU0xfTUVTU0FHRSksCisgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSJweXRob24gLW0gZW5zdXJlcGlwIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS12ZXJzaW9uIiwKKyAgICAgICAgYWN0aW9uPSJ2ZXJzaW9uIiwKKyAgICAgICAgdmVyc2lvbj0icGlwIHt9Ii5mb3JtYXQodmVyc2lvbigpKSwKKyAgICAgICAgaGVscD0iU2hvdyB0aGUgdmVyc2lvbiBvZiBwaXAgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBQeXRob24uIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi12IiwgIi0tdmVyYm9zZSIsCisgICAgICAgIGFjdGlvbj0iY291bnQiLAorICAgICAgICBkZWZhdWx0PTAsCisgICAgICAgIGRlc3Q9InZlcmJvc2l0eSIsCisgICAgICAgIGhlbHA9KCJHaXZlIG1vcmUgb3V0cHV0LiBPcHRpb24gaXMgYWRkaXRpdmUsIGFuZCBjYW4gYmUgdXNlZCB1cCB0byAzICIKKyAgICAgICAgICAgICAgInRpbWVzLiIpLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLVUiLCAiLS11cGdyYWRlIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0iVXBncmFkZSBwaXAgYW5kIGRlcGVuZGVuY2llcywgZXZlbiBpZiBhbHJlYWR5IGluc3RhbGxlZC4iLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS11c2VyIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0iSW5zdGFsbCB1c2luZyB0aGUgdXNlciBzY2hlbWUuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tcm9vdCIsCisgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgaGVscD0iSW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5LiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLWFsdGluc3RhbGwiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgiTWFrZSBhbiBhbHRlcm5hdGUgaW5zdGFsbCwgaW5zdGFsbGluZyBvbmx5IHRoZSBYLlkgdmVyc2lvbmVkIgorICAgICAgICAgICAgICAic2NyaXB0cyAoRGVmYXVsdDogcGlwWCwgcGlwWC5ZLCBlYXN5X2luc3RhbGwtWC5ZKSIpLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1kZWZhdWx0LXBpcCIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KCJNYWtlIGEgZGVmYXVsdCBwaXAgaW5zdGFsbCwgaW5zdGFsbGluZyB0aGUgdW5xdWFsaWZpZWQgcGlwICIKKyAgICAgICAgICAgICAgImFuZCBlYXN5X2luc3RhbGwgaW4gYWRkaXRpb24gdG8gdGhlIHZlcnNpb25lZCBzY3JpcHRzIiksCisgICAgKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICBib290c3RyYXAoCisgICAgICAgIHJvb3Q9YXJncy5yb290LAorICAgICAgICB1cGdyYWRlPWFyZ3MudXBncmFkZSwKKyAgICAgICAgdXNlcj1hcmdzLnVzZXIsCisgICAgICAgIHZlcmJvc2l0eT1hcmdzLnZlcmJvc2l0eSwKKyAgICAgICAgYWx0aW5zdGFsbD1hcmdzLmFsdGluc3RhbGwsCisgICAgICAgIGRlZmF1bHRfcGlwPWFyZ3MuZGVmYXVsdF9waXAsCisgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2Vuc3VyZXBpcC9fX21haW5fXy5weSBiL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1MjdkNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgZW5zdXJlcGlwCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgZW5zdXJlcGlwLl9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTEuNS42LXB5Mi5weTMtbm9uZS1hbnkud2hsIGIvTGliL2Vuc3VyZXBpcC9fYnVuZGxlZC9waXAtMS41LjYtcHkyLnB5My1ub25lLWFueS53aGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3YWI0MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTEuNS42LXB5Mi5weTMtbm9uZS1hbnkud2hsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvc2V0dXB0b29scy0yLjEtcHkyLnB5My1ub25lLWFueS53aGwgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMi4xLXB5Mi5weTMtbm9uZS1hbnkud2hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNzdiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMi4xLXB5Mi5weTMtbm9uZS1hbnkud2hsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX3VuaW5zdGFsbC5weSBiL0xpYi9lbnN1cmVwaXAvX3VuaW5zdGFsbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTAzNjVlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Vuc3VyZXBpcC9fdW5pbnN0YWxsLnB5CkBAIC0wLDAgKzEsMzAgQEAKKyIiIkJhc2ljIHBpcCB1bmluc3RhbGxhdGlvbiBzdXBwb3J0LCBoZWxwZXIgZm9yIHRoZSBXaW5kb3dzIHVuaW5zdGFsbGVyIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGVuc3VyZXBpcAorCisKK2RlZiBfbWFpbihhcmd2PU5vbmUpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9InB5dGhvbiAtbSBlbnN1cmVwaXAuX3VuaW5zdGFsbCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdmVyc2lvbiIsCisgICAgICAgIGFjdGlvbj0idmVyc2lvbiIsCisgICAgICAgIHZlcnNpb249InBpcCB7fSIuZm9ybWF0KGVuc3VyZXBpcC52ZXJzaW9uKCkpLAorICAgICAgICBoZWxwPSJTaG93IHRoZSB2ZXJzaW9uIG9mIHBpcCB0aGlzIHdpbGwgYXR0ZW1wdCB0byB1bmluc3RhbGwuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi12IiwgIi0tdmVyYm9zZSIsCisgICAgICAgIGFjdGlvbj0iY291bnQiLAorICAgICAgICBkZWZhdWx0PTAsCisgICAgICAgIGRlc3Q9InZlcmJvc2l0eSIsCisgICAgICAgIGhlbHA9KCJHaXZlIG1vcmUgb3V0cHV0LiBPcHRpb24gaXMgYWRkaXRpdmUsIGFuZCBjYW4gYmUgdXNlZCB1cCB0byAzICIKKyAgICAgICAgICAgICAgInRpbWVzLiIpLAorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKHZlcmJvc2l0eT1hcmdzLnZlcmJvc2l0eSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9lbnVtLnB5IGIvTGliL2VudW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmYTIwZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnVtLnB5CkBAIC0wLDAgKzEsNTI1IEBACitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSB0eXBlcyBpbXBvcnQgTWFwcGluZ1Byb3h5VHlwZSwgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK19fYWxsX18gPSBbJ0VudW0nLCAnSW50RW51bScsICd1bmlxdWUnXQorCisKK2RlZiBfaXNfZGVzY3JpcHRvcihvYmopOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBvYmogaXMgYSBkZXNjcmlwdG9yLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuICgKKyAgICAgICAgICAgIGhhc2F0dHIob2JqLCAnX19nZXRfXycpIG9yCisgICAgICAgICAgICBoYXNhdHRyKG9iaiwgJ19fc2V0X18nKSBvcgorICAgICAgICAgICAgaGFzYXR0cihvYmosICdfX2RlbGV0ZV9fJykpCisKKworZGVmIF9pc19kdW5kZXIobmFtZSk6CisgICAgIiIiUmV0dXJucyBUcnVlIGlmIGEgX19kdW5kZXJfXyBuYW1lLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuIChuYW1lWzoyXSA9PSBuYW1lWy0yOl0gPT0gJ19fJyBhbmQKKyAgICAgICAgICAgIG5hbWVbMjozXSAhPSAnXycgYW5kCisgICAgICAgICAgICBuYW1lWy0zOi0yXSAhPSAnXycgYW5kCisgICAgICAgICAgICBsZW4obmFtZSkgPiA0KQorCisKK2RlZiBfaXNfc3VuZGVyKG5hbWUpOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBhIF9zdW5kZXJfIG5hbWUsIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICByZXR1cm4gKG5hbWVbMF0gPT0gbmFtZVstMV0gPT0gJ18nIGFuZAorICAgICAgICAgICAgbmFtZVsxOjJdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIG5hbWVbLTI6LTFdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIGxlbihuYW1lKSA+IDIpCisKKworZGVmIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGNscyk6CisgICAgIiIiTWFrZSB0aGUgZ2l2ZW4gY2xhc3MgdW4tcGlja2xhYmxlLiIiIgorICAgIGRlZiBfYnJlYWtfb25fY2FsbF9yZWR1Y2Uoc2VsZiwgcHJvdG8pOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVyIGNhbm5vdCBiZSBwaWNrbGVkJyAlIHNlbGYpCisgICAgY2xzLl9fcmVkdWNlX2V4X18gPSBfYnJlYWtfb25fY2FsbF9yZWR1Y2UKKyAgICBjbHMuX19tb2R1bGVfXyA9ICc8dW5rbm93bj4nCisKKworY2xhc3MgX0VudW1EaWN0KGRpY3QpOgorICAgICIiIlRyYWNrIGVudW0gbWVtYmVyIG9yZGVyIGFuZCBlbnN1cmUgbWVtYmVyIG5hbWVzIGFyZSBub3QgcmV1c2VkLgorCisgICAgRW51bU1ldGEgd2lsbCB1c2UgdGhlIG5hbWVzIGZvdW5kIGluIHNlbGYuX21lbWJlcl9uYW1lcyBhcyB0aGUKKyAgICBlbnVtZXJhdGlvbiBtZW1iZXIgbmFtZXMuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXMgPSBbXQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAiIiJDaGFuZ2VzIGFueXRoaW5nIG5vdCBkdW5kZXJlZCBvciBub3QgYSBkZXNjcmlwdG9yLgorCisgICAgICAgIElmIGFuIGVudW0gbWVtYmVyIG5hbWUgaXMgdXNlZCB0d2ljZSwgYW4gZXJyb3IgaXMgcmFpc2VkOyBkdXBsaWNhdGUKKyAgICAgICAgdmFsdWVzIGFyZSBub3QgY2hlY2tlZCBmb3IuCisKKyAgICAgICAgU2luZ2xlIHVuZGVyc2NvcmUgKHN1bmRlcikgbmFtZXMgYXJlIHJlc2VydmVkLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBfaXNfc3VuZGVyKGtleSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdfbmFtZXNfIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIEVudW0gdXNlJykKKyAgICAgICAgZWxpZiBfaXNfZHVuZGVyKGtleSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsaWYga2V5IGluIHNlbGYuX21lbWJlcl9uYW1lczoKKyAgICAgICAgICAgICMgZGVzY3JpcHRvciBvdmVyd3JpdGluZyBhbiBlbnVtPworICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBdHRlbXB0ZWQgdG8gcmV1c2Uga2V5OiAlcicgJSBrZXkpCisgICAgICAgIGVsaWYgbm90IF9pc19kZXNjcmlwdG9yKHZhbHVlKToKKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgICAgICMgZW51bSBvdmVyd3JpdGluZyBhIGRlc2NyaXB0b3I/CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdLZXkgYWxyZWFkeSBkZWZpbmVkIGFzOiAlcicgJSBzZWxmW2tleV0pCisgICAgICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXMuYXBwZW5kKGtleSkKKyAgICAgICAgc3VwZXIoKS5fX3NldGl0ZW1fXyhrZXksIHZhbHVlKQorCisKKworIyBEdW1teSB2YWx1ZSBmb3IgRW51bSBhcyBFbnVtTWV0YSBleHBsaWNpdGx5IGNoZWNrcyBmb3IgaXQsIGJ1dCBvZiBjb3Vyc2UKKyMgdW50aWwgRW51bU1ldGEgZmluaXNoZXMgcnVubmluZyB0aGUgZmlyc3QgdGltZSB0aGUgRW51bSBjbGFzcyBkb2Vzbid0IGV4aXN0LgorIyBUaGlzIGlzIGFsc28gd2h5IHRoZXJlIGFyZSBjaGVja3MgaW4gRW51bU1ldGEgbGlrZSBgaWYgRW51bSBpcyBub3QgTm9uZWAKK0VudW0gPSBOb25lCisKKworY2xhc3MgRW51bU1ldGEodHlwZSk6CisgICAgIiIiTWV0YWNsYXNzIGZvciBFbnVtIiIiCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIGNscywgYmFzZXMpOgorICAgICAgICByZXR1cm4gX0VudW1EaWN0KCkKKworICAgIGRlZiBfX25ld19fKG1ldGFjbHMsIGNscywgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgICMgYW4gRW51bSBjbGFzcyBpcyBmaW5hbCBvbmNlIGVudW1lcmF0aW9uIGl0ZW1zIGhhdmUgYmVlbiBkZWZpbmVkOyBpdAorICAgICAgICAjIGNhbm5vdCBiZSBtaXhlZCB3aXRoIG90aGVyIHR5cGVzIChpbnQsIGZsb2F0LCBldGMuKSBpZiBpdCBoYXMgYW4KKyAgICAgICAgIyBpbmhlcml0ZWQgX19uZXdfXyB1bmxlc3MgYSBuZXcgX19uZXdfXyBpcyBkZWZpbmVkIChvciB0aGUgcmVzdWx0aW5nCisgICAgICAgICMgY2xhc3Mgd2lsbCBmYWlsKS4KKyAgICAgICAgbWVtYmVyX3R5cGUsIGZpcnN0X2VudW0gPSBtZXRhY2xzLl9nZXRfbWl4aW5zXyhiYXNlcykKKyAgICAgICAgX19uZXdfXywgc2F2ZV9uZXcsIHVzZV9hcmdzID0gbWV0YWNscy5fZmluZF9uZXdfKGNsYXNzZGljdCwgbWVtYmVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2VudW0pCisKKyAgICAgICAgIyBzYXZlIGVudW0gaXRlbXMgaW50byBzZXBhcmF0ZSBtYXBwaW5nIHNvIHRoZXkgZG9uJ3QgZ2V0IGJha2VkIGludG8KKyAgICAgICAgIyB0aGUgbmV3IGNsYXNzCisgICAgICAgIG1lbWJlcnMgPSB7azogY2xhc3NkaWN0W2tdIGZvciBrIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzfQorICAgICAgICBmb3IgbmFtZSBpbiBjbGFzc2RpY3QuX21lbWJlcl9uYW1lczoKKyAgICAgICAgICAgIGRlbCBjbGFzc2RpY3RbbmFtZV0KKworICAgICAgICAjIGNoZWNrIGZvciBpbGxlZ2FsIGVudW0gbmFtZXMgKGFueSBvdGhlcnM/KQorICAgICAgICBpbnZhbGlkX25hbWVzID0gc2V0KG1lbWJlcnMpICYgeydtcm8nLCB9CisgICAgICAgIGlmIGludmFsaWRfbmFtZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGVudW0gbWVtYmVyIG5hbWU6IHswfScuZm9ybWF0KAorICAgICAgICAgICAgICAgICcsJy5qb2luKGludmFsaWRfbmFtZXMpKSkKKworICAgICAgICAjIGNyZWF0ZSBvdXIgbmV3IEVudW0gdHlwZQorICAgICAgICBlbnVtX2NsYXNzID0gc3VwZXIoKS5fX25ld19fKG1ldGFjbHMsIGNscywgYmFzZXMsIGNsYXNzZGljdCkKKyAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX25hbWVzXyA9IFtdICAgICAgICAgICAgICAgIyBuYW1lcyBpbiBkZWZpbml0aW9uIG9yZGVyCisgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9tYXBfID0gT3JkZXJlZERpY3QoKSAgICAgICMgbmFtZS0+dmFsdWUgbWFwCisgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl90eXBlXyA9IG1lbWJlcl90eXBlCisKKyAgICAgICAgIyBSZXZlcnNlIHZhbHVlLT5uYW1lIG1hcCBmb3IgaGFzaGFibGUgdmFsdWVzLgorICAgICAgICBlbnVtX2NsYXNzLl92YWx1ZTJtZW1iZXJfbWFwXyA9IHt9CisKKyAgICAgICAgIyBJZiBhIGN1c3RvbSB0eXBlIGlzIG1peGVkIGludG8gdGhlIEVudW0sIGFuZCBpdCBkb2VzIG5vdCBrbm93IGhvdworICAgICAgICAjIHRvIHBpY2tsZSBpdHNlbGYsIHBpY2tsZS5kdW1wcyB3aWxsIHN1Y2NlZWQgYnV0IHBpY2tsZS5sb2FkcyB3aWxsCisgICAgICAgICMgZmFpbC4gIFJhdGhlciB0aGFuIGhhdmUgdGhlIGVycm9yIHNob3cgdXAgbGF0ZXIgYW5kIHBvc3NpYmx5IGZhcgorICAgICAgICAjIGZyb20gdGhlIHNvdXJjZSwgc2Fib3RhZ2UgdGhlIHBpY2tsZSBwcm90b2NvbCBmb3IgdGhpcyBjbGFzcyBzbworICAgICAgICAjIHRoYXQgcGlja2xlLmR1bXBzIGFsc28gZmFpbHMuCisgICAgICAgICMKKyAgICAgICAgIyBIb3dldmVyLCBpZiB0aGUgbmV3IGNsYXNzIGltcGxlbWVudHMgaXRzIG93biBfX3JlZHVjZV9leF9fLCBkbyBub3QKKyAgICAgICAgIyBzYWJvdGFnZSAtLSBpdCdzIG9uIHRoZW0gdG8gbWFrZSBzdXJlIGl0IHdvcmtzIGNvcnJlY3RseS4gIFdlIHVzZQorICAgICAgICAjIF9fcmVkdWNlX2V4X18gaW5zdGVhZCBvZiBhbnkgb2YgdGhlIG90aGVycyBhcyBpdCBpcyBwcmVmZXJyZWQgYnkKKyAgICAgICAgIyBwaWNrbGUgb3ZlciBfX3JlZHVjZV9fLCBhbmQgaXQgaGFuZGxlcyBhbGwgcGlja2xlIHByb3RvY29scy4KKyAgICAgICAgaWYgJ19fcmVkdWNlX2V4X18nIG5vdCBpbiBjbGFzc2RpY3Q6CisgICAgICAgICAgICBpZiBtZW1iZXJfdHlwZSBpcyBub3Qgb2JqZWN0OgorICAgICAgICAgICAgICAgIG1ldGhvZHMgPSAoJ19fZ2V0bmV3YXJnc19leF9fJywgJ19fZ2V0bmV3YXJnc19fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdfX3JlZHVjZV9leF9fJywgJ19fcmVkdWNlX18nKQorICAgICAgICAgICAgICAgIGlmIG5vdCBhbnkobSBpbiBtZW1iZXJfdHlwZS5fX2RpY3RfXyBmb3IgbSBpbiBtZXRob2RzKToKKyAgICAgICAgICAgICAgICAgICAgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoZW51bV9jbGFzcykKKworICAgICAgICAjIGluc3RhbnRpYXRlIHRoZW0sIGNoZWNraW5nIGZvciBkdXBsaWNhdGVzIGFzIHdlIGdvCisgICAgICAgICMgd2UgaW5zdGFudGlhdGUgZmlyc3QgaW5zdGVhZCBvZiBjaGVja2luZyBmb3IgZHVwbGljYXRlcyBmaXJzdCBpbiBjYXNlCisgICAgICAgICMgYSBjdXN0b20gX19uZXdfXyBpcyBkb2luZyBzb21ldGhpbmcgZnVua3kgd2l0aCB0aGUgdmFsdWVzIC0tIHN1Y2ggYXMKKyAgICAgICAgIyBhdXRvLW51bWJlcmluZyA7KQorICAgICAgICBmb3IgbWVtYmVyX25hbWUgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICB2YWx1ZSA9IG1lbWJlcnNbbWVtYmVyX25hbWVdCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpOgorICAgICAgICAgICAgICAgIGFyZ3MgPSAodmFsdWUsICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXJncyA9IHZhbHVlCisgICAgICAgICAgICBpZiBtZW1iZXJfdHlwZSBpcyB0dXBsZTogICAjIHNwZWNpYWwgY2FzZSBmb3IgdHVwbGUgZW51bXMKKyAgICAgICAgICAgICAgICBhcmdzID0gKGFyZ3MsICkgICAgICMgd3JhcCBpdCBvbmUgbW9yZSB0aW1lCisgICAgICAgICAgICBpZiBub3QgdXNlX2FyZ3M6CisgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBfX25ld19fKGVudW1fY2xhc3MpCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZW51bV9tZW1iZXIsICdfdmFsdWVfJyk6CisgICAgICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnVtX21lbWJlciA9IF9fbmV3X18oZW51bV9jbGFzcywgKmFyZ3MpCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZW51bV9tZW1iZXIsICdfdmFsdWVfJyk6CisgICAgICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyLl92YWx1ZV8gPSBtZW1iZXJfdHlwZSgqYXJncykKKyAgICAgICAgICAgIHZhbHVlID0gZW51bV9tZW1iZXIuX3ZhbHVlXworICAgICAgICAgICAgZW51bV9tZW1iZXIuX25hbWVfID0gbWVtYmVyX25hbWUKKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9fb2JqY2xhc3NfXyA9IGVudW1fY2xhc3MKKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9faW5pdF9fKCphcmdzKQorICAgICAgICAgICAgIyBJZiBhbm90aGVyIG1lbWJlciB3aXRoIHRoZSBzYW1lIHZhbHVlIHdhcyBhbHJlYWR5IGRlZmluZWQsIHRoZQorICAgICAgICAgICAgIyBuZXcgbWVtYmVyIGJlY29tZXMgYW4gYWxpYXMgdG8gdGhlIGV4aXN0aW5nIG9uZS4KKyAgICAgICAgICAgIGZvciBuYW1lLCBjYW5vbmljYWxfbWVtYmVyIGluIGVudW1fY2xhc3MuX21lbWJlcl9tYXBfLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgY2Fub25pY2FsX21lbWJlci5fdmFsdWVfID09IGVudW1fbWVtYmVyLl92YWx1ZV86CisgICAgICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyID0gY2Fub25pY2FsX21lbWJlcgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEFsaWFzZXMgZG9uJ3QgYXBwZWFyIGluIG1lbWJlciBuYW1lcyAob25seSBpbiBfX21lbWJlcnNfXykuCisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX25hbWVzXy5hcHBlbmQobWVtYmVyX25hbWUpCisgICAgICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwX1ttZW1iZXJfbmFtZV0gPSBlbnVtX21lbWJlcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgVGhpcyBtYXkgZmFpbCBpZiB2YWx1ZSBpcyBub3QgaGFzaGFibGUuIFdlIGNhbid0IGFkZCB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAjIHRvIHRoZSBtYXAsIGFuZCBieS12YWx1ZSBsb29rdXBzIGZvciB0aGlzIHZhbHVlIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAjIGxpbmVhci4KKyAgICAgICAgICAgICAgICBlbnVtX2NsYXNzLl92YWx1ZTJtZW1iZXJfbWFwX1t2YWx1ZV0gPSBlbnVtX21lbWJlcgorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBkb3VibGUgY2hlY2sgdGhhdCByZXByIGFuZCBmcmllbmRzIGFyZSBub3QgdGhlIG1peGluJ3Mgb3IgdmFyaW91cworICAgICAgICAjIHRoaW5ncyBicmVhayAoc3VjaCBhcyBwaWNrbGUpCisgICAgICAgIGZvciBuYW1lIGluICgnX19yZXByX18nLCAnX19zdHJfXycsICdfX2Zvcm1hdF9fJywgJ19fcmVkdWNlX2V4X18nKToKKyAgICAgICAgICAgIGNsYXNzX21ldGhvZCA9IGdldGF0dHIoZW51bV9jbGFzcywgbmFtZSkKKyAgICAgICAgICAgIG9ial9tZXRob2QgPSBnZXRhdHRyKG1lbWJlcl90eXBlLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgZW51bV9tZXRob2QgPSBnZXRhdHRyKGZpcnN0X2VudW0sIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBpZiBvYmpfbWV0aG9kIGlzIG5vdCBOb25lIGFuZCBvYmpfbWV0aG9kIGlzIGNsYXNzX21ldGhvZDoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKGVudW1fY2xhc3MsIG5hbWUsIGVudW1fbWV0aG9kKQorCisgICAgICAgICMgcmVwbGFjZSBhbnkgb3RoZXIgX19uZXdfXyB3aXRoIG91ciBvd24gKGFzIGxvbmcgYXMgRW51bSBpcyBub3QgTm9uZSwKKyAgICAgICAgIyBhbnl3YXkpIC0tIGFnYWluLCB0aGlzIGlzIHRvIHN1cHBvcnQgcGlja2xlCisgICAgICAgIGlmIEVudW0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGlmIHRoZSB1c2VyIGRlZmluZWQgdGhlaXIgb3duIF9fbmV3X18sIHNhdmUgaXQgYmVmb3JlIGl0IGdldHMKKyAgICAgICAgICAgICMgY2xvYmJlcmVkIGluIGNhc2UgdGhleSBzdWJjbGFzcyBsYXRlcgorICAgICAgICAgICAgaWYgc2F2ZV9uZXc6CisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fX25ld19tZW1iZXJfXyA9IF9fbmV3X18KKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19uZXdfXyA9IEVudW0uX19uZXdfXworICAgICAgICByZXR1cm4gZW51bV9jbGFzcworCisgICAgZGVmIF9fY2FsbF9fKGNscywgdmFsdWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCBxdWFsbmFtZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJFaXRoZXIgcmV0dXJucyBhbiBleGlzdGluZyBtZW1iZXIsIG9yIGNyZWF0ZXMgYSBuZXcgZW51bSBjbGFzcy4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJvdGggd2hlbiBhbiBlbnVtIGNsYXNzIGlzIGdpdmVuIGEgdmFsdWUgdG8gbWF0Y2gKKyAgICAgICAgdG8gYW4gZW51bWVyYXRpb24gbWVtYmVyIChpLmUuIENvbG9yKDMpKSBhbmQgZm9yIHRoZSBmdW5jdGlvbmFsIEFQSQorICAgICAgICAoaS5lLiBDb2xvciA9IEVudW0oJ0NvbG9yJywgbmFtZXM9J3JlZCBncmVlbiBibHVlJykpLgorCisgICAgICAgIFdoZW4gdXNlZCBmb3IgdGhlIGZ1bmN0aW9uYWwgQVBJOgorCisgICAgICAgIGB2YWx1ZWAgd2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgbmV3IGNsYXNzLgorCisgICAgICAgIGBuYW1lc2Agc2hvdWxkIGJlIGVpdGhlciBhIHN0cmluZyBvZiB3aGl0ZS1zcGFjZS9jb21tYSBkZWxpbWl0ZWQgbmFtZXMKKyAgICAgICAgKHZhbHVlcyB3aWxsIHN0YXJ0IGF0IDEpLCBvciBhbiBpdGVyYXRvci9tYXBwaW5nIG9mIG5hbWUsIHZhbHVlIHBhaXJzLgorCisgICAgICAgIGBtb2R1bGVgIHNob3VsZCBiZSBzZXQgdG8gdGhlIG1vZHVsZSB0aGlzIGNsYXNzIGlzIGJlaW5nIGNyZWF0ZWQgaW47CisgICAgICAgIGlmIGl0IGlzIG5vdCBzZXQsIGFuIGF0dGVtcHQgdG8gZmluZCB0aGF0IG1vZHVsZSB3aWxsIGJlIG1hZGUsIGJ1dCBpZgorICAgICAgICBpdCBmYWlscyB0aGUgY2xhc3Mgd2lsbCBub3QgYmUgcGlja2xhYmxlLgorCisgICAgICAgIGBxdWFsbmFtZWAgc2hvdWxkIGJlIHNldCB0byB0aGUgYWN0dWFsIGxvY2F0aW9uIHRoaXMgY2xhc3MgY2FuIGJlIGZvdW5kCisgICAgICAgIGF0IGluIGl0cyBtb2R1bGU7IGJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIHRoZSBnbG9iYWwgc2NvcGUuICBJZiB0aGlzIGlzCisgICAgICAgIG5vdCBjb3JyZWN0LCB1bnBpY2tsaW5nIHdpbGwgZmFpbCBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCisKKyAgICAgICAgYHR5cGVgLCBpZiBzZXQsIHdpbGwgYmUgbWl4ZWQgaW4gYXMgdGhlIGZpcnN0IGJhc2UgY2xhc3MuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5hbWVzIGlzIE5vbmU6ICAjIHNpbXBsZSB2YWx1ZSBsb29rdXAKKyAgICAgICAgICAgIHJldHVybiBjbHMuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICAjIG90aGVyd2lzZSwgZnVuY3Rpb25hbCBBUEk6IHdlJ3JlIGNyZWF0aW5nIGEgbmV3IEVudW0gdHlwZQorICAgICAgICByZXR1cm4gY2xzLl9jcmVhdGVfKHZhbHVlLCBuYW1lcywgbW9kdWxlPW1vZHVsZSwgcXVhbG5hbWU9cXVhbG5hbWUsIHR5cGU9dHlwZSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oY2xzLCBtZW1iZXIpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShtZW1iZXIsIGNscykgYW5kIG1lbWJlci5fbmFtZV8gaW4gY2xzLl9tZW1iZXJfbWFwXworCisgICAgZGVmIF9fZGVsYXR0cl9fKGNscywgYXR0cik6CisgICAgICAgICMgbmljZXIgZXJyb3IgbWVzc2FnZSB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gZGVsZXRlIGFuIGF0dHJpYnV0ZQorICAgICAgICAjIChzZWUgaXNzdWUxOTAyNSkuCisgICAgICAgIGlmIGF0dHIgaW4gY2xzLl9tZW1iZXJfbWFwXzoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAiJXM6IGNhbm5vdCBkZWxldGUgRW51bSBtZW1iZXIuIiAlIGNscy5fX25hbWVfXykKKyAgICAgICAgc3VwZXIoKS5fX2RlbGF0dHJfXyhhdHRyKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJ10gKworICAgICAgICAgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lc18pCisKKyAgICBkZWYgX19nZXRhdHRyX18oY2xzLCBuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnVtIG1lbWJlciBtYXRjaGluZyBgbmFtZWAKKworICAgICAgICBXZSB1c2UgX19nZXRhdHRyX18gaW5zdGVhZCBvZiBkZXNjcmlwdG9ycyBvciBpbnNlcnRpbmcgaW50byB0aGUgZW51bQorICAgICAgICBjbGFzcycgX19kaWN0X18gaW4gb3JkZXIgdG8gc3VwcG9ydCBgbmFtZWAgYW5kIGB2YWx1ZWAgYmVpbmcgYm90aAorICAgICAgICBwcm9wZXJ0aWVzIGZvciBlbnVtIG1lbWJlcnMgKHdoaWNoIGxpdmUgaW4gdGhlIGNsYXNzJyBfX2RpY3RfXykgYW5kCisgICAgICAgIGVudW0gbWVtYmVycyB0aGVtc2VsdmVzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBfaXNfZHVuZGVyKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGNscy5fbWVtYmVyX21hcF9bbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkgZnJvbSBOb25lCisKKyAgICBkZWYgX19nZXRpdGVtX18oY2xzLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIGNscy5fbWVtYmVyX21hcF9bbmFtZV0KKworICAgIGRlZiBfX2l0ZXJfXyhjbHMpOgorICAgICAgICByZXR1cm4gKGNscy5fbWVtYmVyX21hcF9bbmFtZV0gZm9yIG5hbWUgaW4gY2xzLl9tZW1iZXJfbmFtZXNfKQorCisgICAgZGVmIF9fbGVuX18oY2xzKToKKyAgICAgICAgcmV0dXJuIGxlbihjbHMuX21lbWJlcl9uYW1lc18pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19tZW1iZXJzX18oY2xzKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUtPnZhbHVlLgorCisgICAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIE1hcHBpbmdQcm94eVR5cGUoY2xzLl9tZW1iZXJfbWFwXykKKworICAgIGRlZiBfX3JlcHJfXyhjbHMpOgorICAgICAgICByZXR1cm4gIjxlbnVtICVyPiIgJSBjbHMuX19uYW1lX18KKworICAgIGRlZiBfX3JldmVyc2VkX18oY2xzKToKKyAgICAgICAgcmV0dXJuIChjbHMuX21lbWJlcl9tYXBfW25hbWVdIGZvciBuYW1lIGluIHJldmVyc2VkKGNscy5fbWVtYmVyX25hbWVzXykpCisKKyAgICBkZWYgX19zZXRhdHRyX18oY2xzLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIkJsb2NrIGF0dGVtcHRzIHRvIHJlYXNzaWduIEVudW0gbWVtYmVycy4KKworICAgICAgICBBIHNpbXBsZSBhc3NpZ25tZW50IHRvIHRoZSBjbGFzcyBuYW1lc3BhY2Ugb25seSBjaGFuZ2VzIG9uZSBvZiB0aGUKKyAgICAgICAgc2V2ZXJhbCBwb3NzaWJsZSB3YXlzIHRvIGdldCBhbiBFbnVtIG1lbWJlciBmcm9tIHRoZSBFbnVtIGNsYXNzLAorICAgICAgICByZXN1bHRpbmcgaW4gYW4gaW5jb25zaXN0ZW50IEVudW1lcmF0aW9uLgorCisgICAgICAgICIiIgorICAgICAgICBtZW1iZXJfbWFwID0gY2xzLl9fZGljdF9fLmdldCgnX21lbWJlcl9tYXBfJywge30pCisgICAgICAgIGlmIG5hbWUgaW4gbWVtYmVyX21hcDoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdDYW5ub3QgcmVhc3NpZ24gbWVtYmVycy4nKQorICAgICAgICBzdXBlcigpLl9fc2V0YXR0cl9fKG5hbWUsIHZhbHVlKQorCisgICAgZGVmIF9jcmVhdGVfKGNscywgY2xhc3NfbmFtZSwgbmFtZXM9Tm9uZSwgKiwgbW9kdWxlPU5vbmUsIHF1YWxuYW1lPU5vbmUsIHR5cGU9Tm9uZSk6CisgICAgICAgICIiIkNvbnZlbmllbmNlIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgRW51bSBjbGFzcy4KKworICAgICAgICBgbmFtZXNgIGNhbiBiZToKKworICAgICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgbWVtYmVyIG5hbWVzLCBzZXBhcmF0ZWQgZWl0aGVyIHdpdGggc3BhY2VzIG9yCisgICAgICAgICAgY29tbWFzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiBtZW1iZXIgbmFtZXMuICBWYWx1ZXMgYXJlIGF1dG8tbnVtYmVyZWQgZnJvbSAxLgorICAgICAgICAqIEFuIGl0ZXJhYmxlIG9mIChtZW1iZXIgbmFtZSwgdmFsdWUpIHBhaXJzLgorICAgICAgICAqIEEgbWFwcGluZyBvZiBtZW1iZXIgbmFtZSAtPiB2YWx1ZS4KKworICAgICAgICAiIiIKKyAgICAgICAgbWV0YWNscyA9IGNscy5fX2NsYXNzX18KKyAgICAgICAgYmFzZXMgPSAoY2xzLCApIGlmIHR5cGUgaXMgTm9uZSBlbHNlICh0eXBlLCBjbHMpCisgICAgICAgIGNsYXNzZGljdCA9IG1ldGFjbHMuX19wcmVwYXJlX18oY2xhc3NfbmFtZSwgYmFzZXMpCisKKyAgICAgICAgIyBzcGVjaWFsIHByb2Nlc3NpbmcgbmVlZGVkIGZvciBuYW1lcz8KKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgc3RyKToKKyAgICAgICAgICAgIG5hbWVzID0gbmFtZXMucmVwbGFjZSgnLCcsICcgJykuc3BsaXQoKQorICAgICAgICBpZiBpc2luc3RhbmNlKG5hbWVzLCAodHVwbGUsIGxpc3QpKSBhbmQgaXNpbnN0YW5jZShuYW1lc1swXSwgc3RyKToKKyAgICAgICAgICAgIG5hbWVzID0gWyhlLCBpKSBmb3IgKGksIGUpIGluIGVudW1lcmF0ZShuYW1lcywgMSldCisKKyAgICAgICAgIyBIZXJlLCBuYW1lcyBpcyBlaXRoZXIgYW4gaXRlcmFibGUgb2YgKG5hbWUsIHZhbHVlKSBvciBhIG1hcHBpbmcuCisgICAgICAgIGZvciBpdGVtIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBzdHIpOgorICAgICAgICAgICAgICAgIG1lbWJlcl9uYW1lLCBtZW1iZXJfdmFsdWUgPSBpdGVtLCBuYW1lc1tpdGVtXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSwgbWVtYmVyX3ZhbHVlID0gaXRlbQorICAgICAgICAgICAgY2xhc3NkaWN0W21lbWJlcl9uYW1lXSA9IG1lbWJlcl92YWx1ZQorICAgICAgICBlbnVtX2NsYXNzID0gbWV0YWNscy5fX25ld19fKG1ldGFjbHMsIGNsYXNzX25hbWUsIGJhc2VzLCBjbGFzc2RpY3QpCisKKyAgICAgICAgIyBUT0RPOiByZXBsYWNlIHRoZSBmcmFtZSBoYWNrIGlmIGEgYmxlc3NlZCB3YXkgdG8ga25vdyB0aGUgY2FsbGluZworICAgICAgICAjIG1vZHVsZSBpcyBldmVyIGRldmVsb3BlZAorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzeXMuX2dldGZyYW1lKDIpLmZfZ2xvYmFsc1snX19uYW1lX18nXQorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcikgYXMgZXhjOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBfbWFrZV9jbGFzc191bnBpY2tsYWJsZShlbnVtX2NsYXNzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW51bV9jbGFzcy5fX21vZHVsZV9fID0gbW9kdWxlCisgICAgICAgIGlmIHF1YWxuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW51bV9jbGFzcy5fX3F1YWxuYW1lX18gPSBxdWFsbmFtZQorCisgICAgICAgIHJldHVybiBlbnVtX2NsYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfbWl4aW5zXyhiYXNlcyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHR5cGUgZm9yIGNyZWF0aW5nIGVudW0gbWVtYmVycywgYW5kIHRoZSBmaXJzdCBpbmhlcml0ZWQKKyAgICAgICAgZW51bSBjbGFzcy4KKworICAgICAgICBiYXNlczogdGhlIHR1cGxlIG9mIGJhc2VzIHRoYXQgd2FzIGdpdmVuIHRvIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJhc2VzOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdCwgRW51bQorCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgd2UgYXJlIG5vdCBzdWJjbGFzc2luZyBhIGNsYXNzIHdpdGggZXhpc3RpbmcKKyAgICAgICAgIyBlbnVtZXJhdGlvbiBtZW1iZXJzOyB3aGlsZSB3ZSdyZSBhdCBpdCwgc2VlIGlmIGFueSBvdGhlciBkYXRhCisgICAgICAgICMgdHlwZSBoYXMgYmVlbiBtaXhlZCBpbiBzbyB3ZSBjYW4gdXNlIHRoZSBjb3JyZWN0IF9fbmV3X18KKyAgICAgICAgbWVtYmVyX3R5cGUgPSBmaXJzdF9lbnVtID0gTm9uZQorICAgICAgICBmb3IgYmFzZSBpbiBiYXNlczoKKyAgICAgICAgICAgIGlmICAoYmFzZSBpcyBub3QgRW51bSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYmFzZS5fbWVtYmVyX25hbWVzXyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgZXh0ZW5kIGVudW1lcmF0aW9ucyIpCisgICAgICAgICMgYmFzZSBpcyBub3cgdGhlIGxhc3QgYmFzZSBpbiBiYXNlcworICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmV3IGVudW1lcmF0aW9ucyBtdXN0IGJlIGNyZWF0ZWQgYXMgIgorICAgICAgICAgICAgICAgICAgICAiYENsYXNzTmFtZShbbWl4aW5fdHlwZSxdIGVudW1fdHlwZSlgIikKKworICAgICAgICAjIGdldCBjb3JyZWN0IG1peC1pbiB0eXBlIChlaXRoZXIgbWl4LWluIHR5cGUgb2YgRW51bSBzdWJjbGFzcywgb3IKKyAgICAgICAgIyBmaXJzdCBiYXNlIGlmIGxhc3QgYmFzZSBpcyBFbnVtKQorICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlc1swXSwgRW51bSk6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2VzWzBdICAgICAjIGZpcnN0IGRhdGEgdHlwZQorICAgICAgICAgICAgZmlyc3RfZW51bSA9IGJhc2VzWy0xXSAgIyBlbnVtIHR5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBiYXNlIGluIGJhc2VzWzBdLl9fbXJvX186CisgICAgICAgICAgICAgICAgIyBtb3N0IGNvbW1vbjogKEludEVudW0sIGludCwgRW51bSwgb2JqZWN0KQorICAgICAgICAgICAgICAgICMgcG9zc2libGU6ICAgICg8RW51bSAnQXV0b0ludEVudW0nPiwgPEVudW0gJ0ludEVudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdpbnQnPiwgPEVudW0gJ0VudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdvYmplY3QnPikKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEVudW0pOgorICAgICAgICAgICAgICAgICAgICBpZiBmaXJzdF9lbnVtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbnVtID0gYmFzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG1lbWJlcl90eXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2UKKworICAgICAgICByZXR1cm4gbWVtYmVyX3R5cGUsIGZpcnN0X2VudW0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2ZpbmRfbmV3XyhjbGFzc2RpY3QsIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgX19uZXdfXyB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgZW51bSBtZW1iZXJzLgorCisgICAgICAgIGNsYXNzZGljdDogdGhlIGNsYXNzIGRpY3Rpb25hcnkgZ2l2ZW4gdG8gX19uZXdfXworICAgICAgICBtZW1iZXJfdHlwZTogdGhlIGRhdGEgdHlwZSB3aG9zZSBfX25ld19fIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0CisgICAgICAgIGZpcnN0X2VudW06IGVudW1lcmF0aW9uIHRvIGNoZWNrIGZvciBhbiBvdmVycmlkaW5nIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgIyBub3cgZmluZCB0aGUgY29ycmVjdCBfX25ld19fLCBjaGVja2luZyB0byBzZWUgb2Ygb25lIHdhcyBkZWZpbmVkCisgICAgICAgICMgYnkgdGhlIHVzZXI7IGFsc28gY2hlY2sgZWFybGllciBlbnVtIGNsYXNzZXMgaW4gY2FzZSBhIF9fbmV3X18gd2FzCisgICAgICAgICMgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18KKyAgICAgICAgX19uZXdfXyA9IGNsYXNzZGljdC5nZXQoJ19fbmV3X18nLCBOb25lKQorCisgICAgICAgICMgc2hvdWxkIF9fbmV3X18gYmUgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18gbGF0ZXI/CisgICAgICAgIHNhdmVfbmV3ID0gX19uZXdfXyBpcyBub3QgTm9uZQorCisgICAgICAgIGlmIF9fbmV3X18gaXMgTm9uZToKKyAgICAgICAgICAgICMgY2hlY2sgYWxsIHBvc3NpYmxlcyBmb3IgX19uZXdfbWVtYmVyX18gYmVmb3JlIGZhbGxpbmcgYmFjayB0bworICAgICAgICAgICAgIyBfX25ld19fCisgICAgICAgICAgICBmb3IgbWV0aG9kIGluICgnX19uZXdfbWVtYmVyX18nLCAnX19uZXdfXycpOgorICAgICAgICAgICAgICAgIGZvciBwb3NzaWJsZSBpbiAobWVtYmVyX3R5cGUsIGZpcnN0X2VudW0pOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBnZXRhdHRyKHBvc3NpYmxlLCBtZXRob2QsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldCBub3QgaW4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZS5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW0uX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OgorICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfXyA9IHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBfX25ld19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfX25ld19fID0gb2JqZWN0Ll9fbmV3X18KKworICAgICAgICAjIGlmIGEgbm9uLW9iamVjdC5fX25ld19fIGlzIHVzZWQgdGhlbiB3aGF0ZXZlciB2YWx1ZS90dXBsZSB3YXMKKyAgICAgICAgIyBhc3NpZ25lZCB0byB0aGUgZW51bSBtZW1iZXIgbmFtZSB3aWxsIGJlIHBhc3NlZCB0byBfX25ld19fIGFuZCB0byB0aGUKKyAgICAgICAgIyBuZXcgZW51bSBtZW1iZXIncyBfX2luaXRfXworICAgICAgICBpZiBfX25ld19fIGlzIG9iamVjdC5fX25ld19fOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIF9fbmV3X18sIHNhdmVfbmV3LCB1c2VfYXJncworCisKK2NsYXNzIEVudW0obWV0YWNsYXNzPUVudW1NZXRhKToKKyAgICAiIiJHZW5lcmljIGVudW1lcmF0aW9uLgorCisgICAgRGVyaXZlIGZyb20gdGhpcyBjbGFzcyB0byBkZWZpbmUgbmV3IGVudW1lcmF0aW9ucy4KKworICAgICIiIgorICAgIGRlZiBfX25ld19fKGNscywgdmFsdWUpOgorICAgICAgICAjIGFsbCBlbnVtIGluc3RhbmNlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZCBkdXJpbmcgY2xhc3MgY29uc3RydWN0aW9uCisgICAgICAgICMgd2l0aG91dCBjYWxsaW5nIHRoaXMgbWV0aG9kOyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIG1ldGFjbGFzcycKKyAgICAgICAgIyBfX2NhbGxfXyAoaS5lLiBDb2xvcigzKSApLCBhbmQgYnkgcGlja2xlCisgICAgICAgIGlmIHR5cGUodmFsdWUpIGlzIGNsczoKKyAgICAgICAgICAgICMgRm9yIGxvb2t1cHMgbGlrZSBDb2xvcihDb2xvci5yZWQpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgIyBieS12YWx1ZSBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcgZW51bSBtZW1iZXIKKyAgICAgICAgIyBzZWUgaWYgaXQncyBpbiB0aGUgcmV2ZXJzZSBtYXBwaW5nIChmb3IgaGFzaGFibGUgdmFsdWVzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfW3ZhbHVlXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBub3QgdGhlcmUsIG5vdyBkbyBsb25nIHNlYXJjaCAtLSBPKG4pIGJlaGF2aW9yCisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGNscy5fbWVtYmVyX21hcF8udmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLl92YWx1ZV8gPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1iZXIKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXIgaXMgbm90IGEgdmFsaWQgJXMiICUgKHZhbHVlLCBjbHMuX19uYW1lX18pKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcy4lczogJXI+IiAlICgKKyAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fbmFtZV8sIHNlbGYuX3ZhbHVlXykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzLiVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fbmFtZV8pCisKKyAgICBkZWYgX19kaXJfXyhzZWxmKToKKyAgICAgICAgYWRkZWRfYmVoYXZpb3IgPSBbbSBmb3IgbSBpbiBzZWxmLl9fY2xhc3NfXy5fX2RpY3RfXyBpZiBtWzBdICE9ICdfJ10KKyAgICAgICAgcmV0dXJuIChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLCAnbmFtZScsICd2YWx1ZSddICsKKyAgICAgICAgICAgICAgICBhZGRlZF9iZWhhdmlvcikKKworICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgIyBtaXhlZC1pbiBFbnVtcyBzaG91bGQgdXNlIHRoZSBtaXhlZC1pbiB0eXBlJ3MgX19mb3JtYXRfXywgb3RoZXJ3aXNlCisgICAgICAgICMgd2UgY2FuIGdldCBzdHJhbmdlIHJlc3VsdHMgd2l0aCB0aGUgRW51bSBuYW1lIHNob3dpbmcgdXAgaW5zdGVhZCBvZgorICAgICAgICAjIHRoZSB2YWx1ZQorCisgICAgICAgICMgcHVyZSBFbnVtIGJyYW5jaAorICAgICAgICBpZiBzZWxmLl9tZW1iZXJfdHlwZV8gaXMgb2JqZWN0OgorICAgICAgICAgICAgY2xzID0gc3RyCisgICAgICAgICAgICB2YWwgPSBzdHIoc2VsZikKKyAgICAgICAgIyBtaXgtaW4gYnJhbmNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbHMgPSBzZWxmLl9tZW1iZXJfdHlwZV8KKyAgICAgICAgICAgIHZhbCA9IHNlbGYuX3ZhbHVlXworICAgICAgICByZXR1cm4gY2xzLl9fZm9ybWF0X18odmFsLCBmb3JtYXRfc3BlYykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fbmFtZV8pCisKKyAgICBkZWYgX19yZWR1Y2VfZXhfXyhzZWxmLCBwcm90byk6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKHNlbGYuX3ZhbHVlXywgKQorCisgICAgIyBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgaXMgdXNlZCB0byBwcm92aWRlIGFjY2VzcyB0byB0aGUgYG5hbWVgIGFuZAorICAgICMgYHZhbHVlYCBwcm9wZXJ0aWVzIG9mIGVudW0gbWVtYmVycyB3aGlsZSBrZWVwaW5nIHNvbWUgbWVhc3VyZSBvZgorICAgICMgcHJvdGVjdGlvbiBmcm9tIG1vZGlmaWNhdGlvbiwgd2hpbGUgc3RpbGwgYWxsb3dpbmcgZm9yIGFuIGVudW1lcmF0aW9uCisgICAgIyB0byBoYXZlIG1lbWJlcnMgbmFtZWQgYG5hbWVgIGFuZCBgdmFsdWVgLiAgVGhpcyB3b3JrcyBiZWNhdXNlIGVudW1lcmF0aW9uCisgICAgIyBtZW1iZXJzIGFyZSBub3Qgc2V0IGRpcmVjdGx5IG9uIHRoZSBlbnVtIGNsYXNzIC0tIF9fZ2V0YXR0cl9fIGlzCisgICAgIyB1c2VkIHRvIGxvb2sgdGhlbSB1cC4KKworICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgIiIiVGhlIG5hbWUgb2YgdGhlIEVudW0gbWVtYmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZV8KKworICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgdmFsdWUoc2VsZik6CisgICAgICAgICIiIlRoZSB2YWx1ZSBvZiB0aGUgRW51bSBtZW1iZXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8KKworCitjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgIiIiRW51bSB3aGVyZSBtZW1iZXJzIGFyZSBhbHNvIChhbmQgbXVzdCBiZSkgaW50cyIiIgorCisKK2RlZiB1bmlxdWUoZW51bWVyYXRpb24pOgorICAgICIiIkNsYXNzIGRlY29yYXRvciBmb3IgZW51bWVyYXRpb25zIGVuc3VyaW5nIHVuaXF1ZSBtZW1iZXIgdmFsdWVzLiIiIgorICAgIGR1cGxpY2F0ZXMgPSBbXQorICAgIGZvciBuYW1lLCBtZW1iZXIgaW4gZW51bWVyYXRpb24uX19tZW1iZXJzX18uaXRlbXMoKToKKyAgICAgICAgaWYgbmFtZSAhPSBtZW1iZXIubmFtZToKKyAgICAgICAgICAgIGR1cGxpY2F0ZXMuYXBwZW5kKChuYW1lLCBtZW1iZXIubmFtZSkpCisgICAgaWYgZHVwbGljYXRlczoKKyAgICAgICAgYWxpYXNfZGV0YWlscyA9ICcsICcuam9pbigKKyAgICAgICAgICAgICAgICBbIiVzIC0+ICVzIiAlIChhbGlhcywgbmFtZSkgZm9yIChhbGlhcywgbmFtZSkgaW4gZHVwbGljYXRlc10pCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2R1cGxpY2F0ZSB2YWx1ZXMgZm91bmQgaW4gJXI6ICVzJyAlCisgICAgICAgICAgICAgICAgKGVudW1lcmF0aW9uLCBhbGlhc19kZXRhaWxzKSkKKyAgICByZXR1cm4gZW51bWVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi9maWxlY21wLnB5IGIvTGliL2ZpbGVjbXAucHkKaW5kZXggZjVjZWExZC4uZTVhZDgzOSAxMDA2NDQKLS0tIGEvTGliL2ZpbGVjbXAucHkKKysrIGIvTGliL2ZpbGVjbXAucHkKQEAgLTYsNiArNiw3IEBACiBGdW5jdGlvbnM6CiAgICAgY21wKGYxLCBmMiwgc2hhbGxvdz1UcnVlKSAtPiBpbnQKICAgICBjbXBmaWxlcyhhLCBiLCBjb21tb24pIC0+IChbXSwgW10sIFtdKQorICAgIGNsZWFyX2NhY2hlKCkKIAogIiIiCiAKQEAgLTEzLDExICsxNCwxOCBAQAogaW1wb3J0IHN0YXQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCBmaWx0ZXJmYWxzZQogCi1fX2FsbF9fID0gWyJjbXAiLCAiZGlyY21wIiwgImNtcGZpbGVzIl0KK19fYWxsX18gPSBbJ2NsZWFyX2NhY2hlJywgJ2NtcCcsICdkaXJjbXAnLCAnY21wZmlsZXMnLCAnREVGQVVMVF9JR05PUkVTJ10KIAogX2NhY2hlID0ge30KIEJVRlNJWkUgPSA4KjEwMjQKIAorREVGQVVMVF9JR05PUkVTID0gWworICAgICdSQ1MnLCAnQ1ZTJywgJ3RhZ3MnLCAnLmdpdCcsICcuaGcnLCAnLmJ6cicsICdfZGFyY3MnLCAnX19weWNhY2hlX18nXQorCitkZWYgY2xlYXJfY2FjaGUoKToKKyAgICAiIiJDbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4iIiIKKyAgICBfY2FjaGUuY2xlYXIoKQorCiBkZWYgY21wKGYxLCBmMiwgc2hhbGxvdz1UcnVlKToKICAgICAiIiJDb21wYXJlIHR3byBmaWxlcy4KIApAQCAtMjgsMTQgKzM2LDE1IEBACiAgICAgZjIgLS0gU2Vjb25kIGZpbGUgbmFtZQogCiAgICAgc2hhbGxvdyAtLSBKdXN0IGNoZWNrIHN0YXQgc2lnbmF0dXJlIChkbyBub3QgcmVhZCB0aGUgZmlsZXMpLgotICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gMS4KKyAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIFRydWUuCiAKICAgICBSZXR1cm4gdmFsdWU6CiAKICAgICBUcnVlIGlmIHRoZSBmaWxlcyBhcmUgdGhlIHNhbWUsIEZhbHNlIG90aGVyd2lzZS4KIAogICAgIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGNhY2hlIGZvciBwYXN0IGNvbXBhcmlzb25zIGFuZCB0aGUgcmVzdWx0cywKLSAgICB3aXRoIGEgY2FjaGUgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSByZWx5aW5nIG9uIHN0YWxlIHNpZ25hdHVyZXMuCisgICAgd2l0aCBjYWNoZSBlbnRyaWVzIGludmFsaWRhdGVkIGlmIHRoZWlyIHN0YXQgaW5mb3JtYXRpb24KKyAgICBjaGFuZ2VzLiAgVGhlIGNhY2hlIG1heSBiZSBjbGVhcmVkIGJ5IGNhbGxpbmcgY2xlYXJfY2FjaGUoKS4KIAogICAgICIiIgogCkBAIC01Miw3ICs2MSw3IEBACiAgICAgaWYgb3V0Y29tZSBpcyBOb25lOgogICAgICAgICBvdXRjb21lID0gX2RvX2NtcChmMSwgZjIpCiAgICAgICAgIGlmIGxlbihfY2FjaGUpID4gMTAwOiAgICAgICMgbGltaXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY2FjaGUKLSAgICAgICAgICAgIF9jYWNoZS5jbGVhcigpCisgICAgICAgICAgICBjbGVhcl9jYWNoZSgpCiAgICAgICAgIF9jYWNoZVtmMSwgZjIsIHMxLCBzMl0gPSBvdXRjb21lCiAgICAgcmV0dXJuIG91dGNvbWUKIApAQCAtODAsNyArODksNyBAQAogICAgIGRpcmNtcChhLCBiLCBpZ25vcmU9Tm9uZSwgaGlkZT1Ob25lKQogICAgICAgQSBhbmQgQiBhcmUgZGlyZWN0b3JpZXMuCiAgICAgICBJR05PUkUgaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGlnbm9yZSwKLSAgICAgICAgZGVmYXVsdHMgdG8gWydSQ1MnLCAnQ1ZTJywgJ3RhZ3MnXS4KKyAgICAgICAgZGVmYXVsdHMgdG8gREVGQVVMVF9JR05PUkVTLgogICAgICAgSElERSBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwKICAgICAgICAgZGVmYXVsdHMgdG8gW29zLmN1cmRpciwgb3MucGFyZGlyXS4KIApAQCAtMTE2LDcgKzEyNSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmhpZGUgPSBoaWRlCiAgICAgICAgIGlmIGlnbm9yZSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBbJ1JDUycsICdDVlMnLCAndGFncyddICMgTmFtZXMgaWdub3JlZCBpbiBjb21wYXJpc29uCisgICAgICAgICAgICBzZWxmLmlnbm9yZSA9IERFRkFVTFRfSUdOT1JFUwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBpZ25vcmUKIApAQCAtMTQ3LDEyICsxNTYsMTIgQEAKICAgICAgICAgICAgIG9rID0gMQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFfc3RhdCA9IG9zLnN0YXQoYV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICAgICAjIHByaW50KCdDYW5cJ3Qgc3RhdCcsIGFfcGF0aCwgJzonLCB3aHkuYXJnc1sxXSkKICAgICAgICAgICAgICAgICBvayA9IDAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBiX3N0YXQgPSBvcy5zdGF0KGJfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgIyBwcmludCgnQ2FuXCd0IHN0YXQnLCBiX3BhdGgsICc6Jywgd2h5LmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgb2sgPSAwCiAKQEAgLTI2OCw3ICsyNzcsNyBAQAogZGVmIF9jbXAoYSwgYiwgc2gsIGFicz1hYnMsIGNtcD1jbXApOgogICAgIHRyeToKICAgICAgICAgcmV0dXJuIG5vdCBhYnMoY21wKGEsIGIsIHNoKSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiAyCiAKIApkaWZmIC0tZ2l0IGEvTGliL2ZpbGVpbnB1dC5weSBiL0xpYi9maWxlaW5wdXQucHkKaW5kZXggODc5YTBmZC4uODc3NThhZCAxMDA2NDQKLS0tIGEvTGliL2ZpbGVpbnB1dC5weQorKysgYi9MaWIvZmlsZWlucHV0LnB5CkBAIC0zMCw3ICszMCw3IEBACiAKIEFsbCBmaWxlcyBhcmUgb3BlbmVkIGluIHRleHQgbW9kZSBieSBkZWZhdWx0LCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkKIHNldHRpbmcgdGhlIG1vZGUgcGFyYW1ldGVyIHRvIGlucHV0KCkgb3IgRmlsZUlucHV0Ll9faW5pdF9fKCkuCi1JZiBhbiBJL08gZXJyb3Igb2NjdXJzIGR1cmluZyBvcGVuaW5nIG9yIHJlYWRpbmcgYSBmaWxlLCB0aGUgSU9FcnJvcgorSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwgdGhlIE9TRXJyb3IKIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIElmIHN5cy5zdGRpbiBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlLCB0aGUgc2Vjb25kIGFuZCBmdXJ0aGVyIHVzZSB3aWxsCkBAIC0yMjIsNiArMjIyLDEwIEBACiAgICAgICAgIGlmIG1vZGUgbm90IGluICgncicsICdyVScsICdVJywgJ3JiJyk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGaWxlSW5wdXQgb3BlbmluZyBtb2RlIG11c3QgYmUgb25lIG9mICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidyJywgJ3JVJywgJ1UnIGFuZCAncmInIikKKyAgICAgICAgaWYgJ1UnIGluIG1vZGU6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHNlbGYuX21vZGUgPSBtb2RlCiAgICAgICAgIGlmIG9wZW5ob29rOgogICAgICAgICAgICAgaWYgaW5wbGFjZToKQEAgLTMxNiwxNSArMzIwLDIwIEBACiAgICAgICAgICAgICBzZWxmLl9iYWNrdXBmaWxlbmFtZSA9IDAKICAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVuYW1lID09ICctJzoKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSA9ICc8c3RkaW4+JwotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBzeXMuc3RkaW4KKyAgICAgICAgICAgICAgICBpZiAnYicgaW4gc2VsZi5fbW9kZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHN5cy5zdGRpbi5idWZmZXIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gc3lzLnN0ZGluCiAgICAgICAgICAgICAgICAgc2VsZi5faXNzdGRpbiA9IFRydWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wbGFjZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSArIChzZWxmLl9iYWNrdXAgb3IgIi5iYWsiKSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjogcGFzcwotICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgT1NFcnJvcgogICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX2JhY2t1cGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9iYWNrdXBmaWxlbmFtZSwgc2VsZi5fbW9kZSkKICAgICAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMzQ2LDcgKzM1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vdXRwdXQKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1heSByYWlzZSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wZW5ob29rOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHNlbGYuX29wZW5ob29rKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2Zvcm1hdHRlci5weSBiL0xpYi9mb3JtYXR0ZXIucHkKaW5kZXggNjBlNjBmMS4uZDhjY2E1MiAxMDA2NDQKLS0tIGEvTGliL2Zvcm1hdHRlci5weQorKysgYi9MaWIvZm9ybWF0dGVyLnB5CkBAIC0xOSw2ICsxOSw5IEBACiAiIiIKIAogaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy53YXJuKCd0aGUgZm9ybWF0dGVyIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJworICAgICAgICAgICAgICAnUHl0aG9uIDMuNicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKIAogQVNfSVMgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvZnJhY3Rpb25zLnB5IGIvTGliL2ZyYWN0aW9ucy5weQppbmRleCA4YmU1MmQyLi43OWU4M2ZmIDEwMDY0NAotLS0gYS9MaWIvZnJhY3Rpb25zLnB5CisrKyBiL0xpYi9mcmFjdGlvbnMucHkKQEAgLTE4Miw4ICsxODIsMTAgQEAKICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShmLCBmbG9hdCk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzLmZyb21fZmxvYXQoKSBvbmx5IHRha2VzIGZsb2F0cywgbm90ICVyICglcykiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xzLl9fbmFtZV9fLCBmLCB0eXBlKGYpLl9fbmFtZV9fKSkKLSAgICAgICAgaWYgbWF0aC5pc25hbihmKSBvciBtYXRoLmlzaW5mKGYpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIG1hdGguaXNuYW4oZik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIG1hdGguaXNpbmYoZik6CisgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCiAgICAgICAgIHJldHVybiBjbHMoKmYuYXNfaW50ZWdlcl9yYXRpbygpKQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0xOTYsOSArMTk4LDExIEBACiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgIiVzLmZyb21fZGVjaW1hbCgpIG9ubHkgdGFrZXMgRGVjaW1hbHMsIG5vdCAlciAoJXMpIiAlCiAgICAgICAgICAgICAgICAgKGNscy5fX25hbWVfXywgZGVjLCB0eXBlKGRlYykuX19uYW1lX18pKQotICAgICAgICBpZiBub3QgZGVjLmlzX2Zpbml0ZSgpOgotICAgICAgICAgICAgIyBDYXRjaGVzIGluZmluaXRpZXMgYW5kIG5hbnMuCi0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQorICAgICAgICBpZiBkZWMuaXNfaW5maW5pdGUoKToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoCisgICAgICAgICAgICAgICAgIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQorICAgICAgICBpZiBkZWMuaXNfbmFuKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCAlcyB0byAlcy4iICUgKGRlYywgY2xzLl9fbmFtZV9fKSkKICAgICAgICAgc2lnbiwgZGlnaXRzLCBleHAgPSBkZWMuYXNfdHVwbGUoKQogICAgICAgICBkaWdpdHMgPSBpbnQoJycuam9pbihtYXAoc3RyLCBkaWdpdHMpKSkKICAgICAgICAgaWYgc2lnbjoKZGlmZiAtLWdpdCBhL0xpYi9mdHBsaWIucHkgYi9MaWIvZnRwbGliLnB5CmluZGV4IDVlNzVlNmQuLmM4M2JlMmIgMTAwNjQ0Ci0tLSBhL0xpYi9mdHBsaWIucHkKKysrIGIvTGliL2Z0cGxpYi5weQpAQCAtMzksOSArMzksMTAgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHNvY2tldAoraW1wb3J0IHdhcm5pbmdzCiBmcm9tIHNvY2tldCBpbXBvcnQgX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKIAotX19hbGxfXyA9IFsiRlRQIiwiTmV0cmMiXQorX19hbGxfXyA9IFsiRlRQIiwgIk5ldHJjIl0KIAogIyBNYWdpYyBudW1iZXIgZnJvbSA8c29ja2V0Lmg+CiBNU0dfT09CID0gMHgxICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm9jZXNzIGRhdGEgb3V0IG9mIGJhbmQKQEAgLTYzLDcgKzY0LDcgQEAKIAogIyBBbGwgZXhjZXB0aW9ucyAoaG9wZWZ1bGx5KSB0aGF0IG1heSBiZSByYWlzZWQgaGVyZSBhbmQgdGhhdCBhcmVuJ3QKICMgKGFsd2F5cykgcHJvZ3JhbW1pbmcgZXJyb3JzIG9uIG91ciBzaWRlCi1hbGxfZXJyb3JzID0gKEVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvcikKK2FsbF9lcnJvcnMgPSAoRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogCiAKICMgTGluZSB0ZXJtaW5hdG9ycyAod2UgYWx3YXlzIG91dHB1dCBDUkxGLCBidXQgYWNjZXB0IGFueSBvZiBDUkxGLCBDUiwgTEYpCkBAIC0xMjYsNyArMTI3LDcgQEAKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucXVpdCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6CkBAIC0xMzYsNiArMTM3LDcgQEAKICAgICAgICAgJycnQ29ubmVjdCB0byBob3N0LiAgQXJndW1lbnRzIGFyZToKICAgICAgICAgIC0gaG9zdDogaG9zdG5hbWUgdG8gY29ubmVjdCB0byAoc3RyaW5nLCBkZWZhdWx0IHByZXZpb3VzIGhvc3QpCiAgICAgICAgICAtIHBvcnQ6IHBvcnQgdG8gY29ubmVjdCB0byAoaW50ZWdlciwgZGVmYXVsdCBwcmV2aW91cyBwb3J0KQorICAgICAgICAgLSB0aW1lb3V0OiB0aGUgdGltZW91dCB0byBzZXQgYWdhaW5zdCB0aGUgZnRwIHNvY2tldChzKQogICAgICAgICAgLSBzb3VyY2VfYWRkcmVzczogYSAyLXR1cGxlIChob3N0LCBwb3J0KSBmb3IgdGhlIHNvY2tldCB0byBiaW5kCiAgICAgICAgICAgIHRvIGFzIGl0cyBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdGluZy4KICAgICAgICAgJycnCkBAIC0xODYsNyArMTg4LDggQEAKICAgICAjIEludGVybmFsOiBzZW5kIG9uZSBsaW5lIHRvIHRoZSBzZXJ2ZXIsIGFwcGVuZGluZyBDUkxGCiAgICAgZGVmIHB1dGxpbmUoc2VsZiwgbGluZSk6CiAgICAgICAgIGxpbmUgPSBsaW5lICsgQ1JMRgotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0KicsIHNlbGYuc2FuaXRpemUobGluZSkpCisgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMToKKyAgICAgICAgICAgIHByaW50KCcqcHV0KicsIHNlbGYuc2FuaXRpemUobGluZSkpCiAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQogCiAgICAgIyBJbnRlcm5hbDogc2VuZCBvbmUgY29tbWFuZCB0byB0aGUgc2VydmVyICh0aHJvdWdoIHB1dGxpbmUoKSkKQEAgLTIwMiw5ICsyMDUsMTIgQEAKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgogICAgICAgICAgICAgcHJpbnQoJypnZXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKLSAgICAgICAgaWYgbm90IGxpbmU6IHJhaXNlIEVPRkVycm9yCi0gICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOiBsaW5lID0gbGluZVs6LTJdCi0gICAgICAgIGVsaWYgbGluZVstMTpdIGluIENSTEY6IGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgorICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KKyAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KICAgICAgICAgcmV0dXJuIGxpbmUKIAogICAgICMgSW50ZXJuYWw6IGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciwgd2hpY2ggbWF5IHBvc3NpYmx5CkBAIC0yMjcsNyArMjMzLDggQEAKICAgICAjIFJhaXNlIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgYW4gZXJyb3IKICAgICBkZWYgZ2V0cmVzcChzZWxmKToKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmc6IHByaW50KCcqcmVzcConLCBzZWxmLnNhbml0aXplKHJlc3ApKQorICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzoKKyAgICAgICAgICAgIHByaW50KCcqcmVzcConLCBzZWxmLnNhbml0aXplKHJlc3ApKQogICAgICAgICBzZWxmLmxhc3RyZXNwID0gcmVzcFs6M10KICAgICAgICAgYyA9IHJlc3BbOjFdCiAgICAgICAgIGlmIGMgaW4geycxJywgJzInLCAnMyd9OgpAQCAtMjUxLDcgKzI1OCw4IEBACiAgICAgICAgIElQIGFuZCBTeW5jaDsgdGhhdCBkb2Vzbid0IHNlZW0gdG8gd29yayB3aXRoIHRoZSBzZXJ2ZXJzIEkndmUKICAgICAgICAgdHJpZWQuICBJbnN0ZWFkLCBqdXN0IHNlbmQgdGhlIEFCT1IgY29tbWFuZCBhcyBPT0IgZGF0YS4nJycKICAgICAgICAgbGluZSA9IGInQUJPUicgKyBCX0NSTEYKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOiBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgorICAgICAgICAgICAgcHJpbnQoJypwdXQgdXJnZW50KicsIHNlbGYuc2FuaXRpemUobGluZSkpCiAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUsIE1TR19PT0IpCiAgICAgICAgIHJlc3AgPSBzZWxmLmdldG11bHRpbGluZSgpCiAgICAgICAgIGlmIHJlc3BbOjNdIG5vdCBpbiB7JzQyNicsICcyMjUnLCAnMjI2J306CkBAIC0zMDAsNyArMzA4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgXzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIF86CiAgICAgICAgICAgICAgICAgZXJyID0gXwogICAgICAgICAgICAgICAgIGlmIHNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQpAQCAtMzExLDggKzMxOSw3IEBACiAgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihtc2cpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKICAgICAgICAgc29jay5saXN0ZW4oMSkKICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXSAjIEdldCBwcm9wZXIgcG9ydAogICAgICAgICBob3N0ID0gc2VsZi5zb2NrLmdldHNvY2tuYW1lKClbMF0gIyBHZXQgcHJvcGVyIGhvc3QKQEAgLTM5Miw5ICszOTksMTIgQEAKIAogICAgIGRlZiBsb2dpbihzZWxmLCB1c2VyID0gJycsIHBhc3N3ZCA9ICcnLCBhY2N0ID0gJycpOgogICAgICAgICAnJydMb2dpbiwgZGVmYXVsdCBhbm9ueW1vdXMuJycnCi0gICAgICAgIGlmIG5vdCB1c2VyOiB1c2VyID0gJ2Fub255bW91cycKLSAgICAgICAgaWYgbm90IHBhc3N3ZDogcGFzc3dkID0gJycKLSAgICAgICAgaWYgbm90IGFjY3Q6IGFjY3QgPSAnJworICAgICAgICBpZiBub3QgdXNlcjoKKyAgICAgICAgICAgIHVzZXIgPSAnYW5vbnltb3VzJworICAgICAgICBpZiBub3QgcGFzc3dkOgorICAgICAgICAgICAgcGFzc3dkID0gJycKKyAgICAgICAgaWYgbm90IGFjY3Q6CisgICAgICAgICAgICBhY2N0ID0gJycKICAgICAgICAgaWYgdXNlciA9PSAnYW5vbnltb3VzJyBhbmQgcGFzc3dkIGluIHsnJywgJy0nfToKICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gYW5vbnltb3VzIGZ0cCBwYXNzd29yZCBzcGVjaWZpZWQKICAgICAgICAgICAgICMgdGhlbiB3ZSdsbCBqdXN0IHVzZSBhbm9ueW1vdXNACkBAIC00MDUsOCArNDE1LDEwIEBACiAgICAgICAgICAgICAjICAgaG9zdCBvciBjb3VudHJ5LgogICAgICAgICAgICAgcGFzc3dkID0gcGFzc3dkICsgJ2Fub255bW91c0AnCiAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1VTRVIgJyArIHVzZXIpCi0gICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOiByZXNwID0gc2VsZi5zZW5kY21kKCdQQVNTICcgKyBwYXNzd2QpCi0gICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOiByZXNwID0gc2VsZi5zZW5kY21kKCdBQ0NUICcgKyBhY2N0KQorICAgICAgICBpZiByZXNwWzBdID09ICczJzoKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1BBU1MgJyArIHBhc3N3ZCkKKyAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6CisgICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdBQ0NUICcgKyBhY2N0KQogICAgICAgICBpZiByZXNwWzBdICE9ICcyJzoKICAgICAgICAgICAgIHJhaXNlIGVycm9yX3JlcGx5KHJlc3ApCiAgICAgICAgIHJldHVybiByZXNwCkBAIC00MzIsNiArNDQ0LDkgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgcmV0cmxpbmVzKHNlbGYsIGNtZCwgY2FsbGJhY2sgPSBOb25lKToKQEAgLTQ0Niw3ICs0NjEsOCBAQAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIFRoZSByZXNwb25zZSBjb2RlLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZTogY2FsbGJhY2sgPSBwcmludF9saW5lCisgICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6CisgICAgICAgICAgICBjYWxsYmFjayA9IHByaW50X2xpbmUKICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVFlQRSBBJykKICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubiwgXAogICAgICAgICAgICAgICAgICBjb25uLm1ha2VmaWxlKCdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykgYXMgZnA6CkBAIC00NTQsNyArNDcwLDggQEAKICAgICAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKICAgICAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBzZWxmLm1heGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6IHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJypyZXRyKicsIHJlcHIobGluZSkpCiAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6CkBAIC00NjIsNiArNDc5LDkgQEAKICAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAnXG4nOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobGluZSkKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHN0b3JiaW5hcnkoc2VsZiwgY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSk6CkBAIC00ODMsOSArNTAzLDE0IEBACiAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpIGFzIGNvbm46CiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHN0b3JsaW5lcyhzZWxmLCBjbWQsIGZwLCBjYWxsYmFjaz1Ob25lKToKQEAgLTUwNiwxMiArNTMxLDE3IEBACiAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKICAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKSA+IHNlbGYubWF4bGluZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBidWZbLTI6XSAhPSBCX0NSTEY6CiAgICAgICAgICAgICAgICAgICAgIGlmIGJ1ZlstMV0gaW4gQl9DUkxGOiBidWYgPSBidWZbOi0xXQogICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIGFjY3Qoc2VsZiwgcGFzc3dvcmQpOgpAQCAtNjQ2LDggKzY3NiwxMCBAQAogdHJ5OgogICAgIGltcG9ydCBzc2wKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCisgICAgX1NTTFNvY2tldCA9IE5vbmUKIGVsc2U6CisgICAgX1NTTFNvY2tldCA9IHNzbC5TU0xTb2NrZXQKKwogICAgIGNsYXNzIEZUUF9UTFMoRlRQKToKICAgICAgICAgJycnQSBGVFAgc3ViY2xhc3Mgd2hpY2ggYWRkcyBUTFMgc3VwcG9ydCB0byBGVFAgYXMgZGVzY3JpYmVkCiAgICAgICAgIGluIFJGQy00MjE3LgpAQCAtNjk0LDYgKzcyNiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc2VsZi5zc2xfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIHNlbGYuX3Byb3RfcCA9IEZhbHNlCiAgICAgICAgICAgICBGVFAuX19pbml0X18oc2VsZiwgaG9zdCwgdXNlciwgcGFzc3dkLCBhY2N0LCB0aW1lb3V0LCBzb3VyY2VfYWRkcmVzcykKQEAgLTcxMSwxMiArNzQ3LDkgQEAKICAgICAgICAgICAgICAgICByZXNwID0gc2VsZi52b2lkY21kKCdBVVRIIFRMUycpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ0FVVEggU1NMJykKLSAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrLCBzZWxmLmtleWZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNlbGYuc3NsX3ZlcnNpb24pCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUobW9kZT0ncicsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpCiAgICAgICAgICAgICByZXR1cm4gcmVzcAogCkBAIC03NTUsODAgKzc4OCwxMSBAQAogICAgICAgICBkZWYgbnRyYW5zZmVyY21kKHNlbGYsIGNtZCwgcmVzdD1Ob25lKToKICAgICAgICAgICAgIGNvbm4sIHNpemUgPSBGVFAubnRyYW5zZmVyY21kKHNlbGYsIGNtZCwgcmVzdCkKICAgICAgICAgICAgIGlmIHNlbGYuX3Byb3RfcDoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoY29ubikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBjb25uID0gc3NsLndyYXBfc29ja2V0KGNvbm4sIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNzbF92ZXJzaW9uKQorICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgICAgICAgICBjb25uID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KGNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQogICAgICAgICAgICAgcmV0dXJuIGNvbm4sIHNpemUKIAotICAgICAgICBkZWYgcmV0cmJpbmFyeShzZWxmLCBjbWQsIGNhbGxiYWNrLCBibG9ja3NpemU9ODE5MiwgcmVzdD1Ob25lKToKLSAgICAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBJJykKLSAgICAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpIGFzIGNvbm46Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm4ucmVjdihibG9ja3NpemUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSkKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQotICAgICAgICBkZWYgcmV0cmxpbmVzKHNlbGYsIGNtZCwgY2FsbGJhY2sgPSBOb25lKToKLSAgICAgICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6IGNhbGxiYWNrID0gcHJpbnRfbGluZQotICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVFlQRSBBJykKLSAgICAgICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCkKLSAgICAgICAgICAgIGZwID0gY29ubi5tYWtlZmlsZSgncicsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpCi0gICAgICAgICAgICB3aXRoIGZwLCBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBzZWxmLm1heGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjogcHJpbnQoJypyZXRyKicsIHJlcHIobGluZSkpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTJdCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZVstMTpdID09ICdcbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGxpbmUpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KLSAgICAgICAgZGVmIHN0b3JiaW5hcnkoc2VsZiwgY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgSScpCi0gICAgICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KSBhcyBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhawotICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCi0gICAgICAgIGRlZiBzdG9ybGluZXMoc2VsZiwgY21kLCBmcCwgY2FsbGJhY2s9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgQScpCi0gICAgICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kKSBhcyBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWRsaW5lKHNlbGYubWF4bGluZSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbihidWYpID4gc2VsZi5tYXhsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhawotICAgICAgICAgICAgICAgICAgICBpZiBidWZbLTI6XSAhPSBCX0NSTEY6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBidWZbLTFdIGluIEJfQ1JMRjogYnVmID0gYnVmWzotMV0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZiArIEJfQ1JMRgotICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCiAgICAgICAgIGRlZiBhYm9ydChzZWxmKToKICAgICAgICAgICAgICMgb3ZlcnJpZGRlbiBhcyB3ZSBjYW4ndCBwYXNzIE1TR19PT0IgZmxhZyB0byBzZW5kYWxsKCkKICAgICAgICAgICAgIGxpbmUgPSBiJ0FCT1InICsgQl9DUkxGCkBAIC04MzksNyArODAzLDcgQEAKICAgICAgICAgICAgIHJldHVybiByZXNwCiAKICAgICBfX2FsbF9fLmFwcGVuZCgnRlRQX1RMUycpCi0gICAgYWxsX2Vycm9ycyA9IChFcnJvciwgSU9FcnJvciwgRU9GRXJyb3IsIHNzbC5TU0xFcnJvcikKKyAgICBhbGxfZXJyb3JzID0gKEVycm9yLCBPU0Vycm9yLCBFT0ZFcnJvciwgc3NsLlNTTEVycm9yKQogCiAKIF8xNTBfcmUgPSBOb25lCkBAIC05MzYsNyArOTAwLDggQEAKIAogZGVmIGZ0cGNwKHNvdXJjZSwgc291cmNlbmFtZSwgdGFyZ2V0LCB0YXJnZXRuYW1lID0gJycsIHR5cGUgPSAnSScpOgogICAgICcnJ0NvcHkgZmlsZSBmcm9tIG9uZSBGVFAtaW5zdGFuY2UgdG8gYW5vdGhlci4nJycKLSAgICBpZiBub3QgdGFyZ2V0bmFtZTogdGFyZ2V0bmFtZSA9IHNvdXJjZW5hbWUKKyAgICBpZiBub3QgdGFyZ2V0bmFtZToKKyAgICAgICAgdGFyZ2V0bmFtZSA9IHNvdXJjZW5hbWUKICAgICB0eXBlID0gJ1RZUEUgJyArIHR5cGUKICAgICBzb3VyY2Uudm9pZGNtZCh0eXBlKQogICAgIHRhcmdldC52b2lkY21kKHR5cGUpCkBAIC05NDYsOSArOTExLDExIEBACiAgICAgIyB0cmFuc2ZlciByZXF1ZXN0LgogICAgICMgU286IFNUT1IgYmVmb3JlIFJFVFIsIGJlY2F1c2UgaGVyZSB0aGUgdGFyZ2V0IGlzIGEgInVzZXIiLgogICAgIHRyZXBseSA9IHRhcmdldC5zZW5kY21kKCdTVE9SICcgKyB0YXJnZXRuYW1lKQotICAgIGlmIHRyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OiByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CisgICAgaWYgdHJlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306CisgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKICAgICBzcmVwbHkgPSBzb3VyY2Uuc2VuZGNtZCgnUkVUUiAnICsgc291cmNlbmFtZSkKLSAgICBpZiBzcmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfTogcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQorICAgIGlmIHNyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OgorICAgICAgICByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CiAgICAgc291cmNlLnZvaWRyZXNwKCkKICAgICB0YXJnZXQudm9pZHJlc3AoKQogCkBAIC05NjYsMTkgKzkzMywyMiBAQAogICAgIF9fZGVmYWNjdCA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT1Ob25lKToKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIG5ldHJjIG1vZHVsZSBpbnN0ZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBpZiAiSE9NRSIgaW4gb3MuZW52aXJvbjoKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWyJIT01FIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5uZXRyYyIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInNwZWNpZnkgZmlsZSB0byBsb2FkIG9yIHNldCAkSE9NRSIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic3BlY2lmeSBmaWxlIHRvIGxvYWQgb3Igc2V0ICRIT01FIikKICAgICAgICAgc2VsZi5fX2hvc3RzID0ge30KICAgICAgICAgc2VsZi5fX21hY3JvcyA9IHt9CiAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInIiKQogICAgICAgICBpbl9tYWNybyA9IDAKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBpZiBpbl9tYWNybyBhbmQgbGluZS5zdHJpcCgpOgogICAgICAgICAgICAgICAgIG1hY3JvX2xpbmVzLmFwcGVuZChsaW5lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0xMDg3LDcgKzEwNTcsNyBAQAogICAgIHVzZXJpZCA9IHBhc3N3ZCA9IGFjY3QgPSAnJwogICAgIHRyeToKICAgICAgICAgbmV0cmMgPSBOZXRyYyhyY2ZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIHJjZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNvdWxkIG5vdCBvcGVuIGFjY291bnQgZmlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtLSB1c2luZyBhbm9ueW1vdXMgbG9naW4uIikKZGlmZiAtLWdpdCBhL0xpYi9mdW5jdG9vbHMucHkgYi9MaWIvZnVuY3Rvb2xzLnB5CmluZGV4IDA1M2U0NGUuLjI0ZmRiMTYgMTAwNjQ0Ci0tLSBhL0xpYi9mdW5jdG9vbHMucHkKKysrIGIvTGliL2Z1bmN0b29scy5weQpAQCAtMywxNiArMywyNCBAQAogIyBQeXRob24gbW9kdWxlIHdyYXBwZXIgZm9yIF9mdW5jdG9vbHMgQyBtb2R1bGUKICMgdG8gYWxsb3cgdXRpbGl0aWVzIHdyaXR0ZW4gaW4gUHl0aG9uIHRvIGJlIGFkZGVkCiAjIHRvIHRoZSBmdW5jdG9vbHMgbW9kdWxlLgotIyBXcml0dGVuIGJ5IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW4gYXQgZ21haWwuY29tPgotIyBhbmQgUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPgotIyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIyBXcml0dGVuIGJ5IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW4gYXQgZ21haWwuY29tPiwKKyMgUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPiwKKyMgYW5kIMWBdWthc3ogTGFuZ2EgPGx1a2FzeiBhdCBsYW5nYS5wbD4uCisjICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAjIFNlZSBDIHNvdXJjZSBjb2RlIGZvciBfZnVuY3Rvb2xzIGNyZWRpdHMvY29weXJpZ2h0CiAKIF9fYWxsX18gPSBbJ3VwZGF0ZV93cmFwcGVyJywgJ3dyYXBzJywgJ1dSQVBQRVJfQVNTSUdOTUVOVFMnLCAnV1JBUFBFUl9VUERBVEVTJywKLSAgICAgICAgICAgJ3RvdGFsX29yZGVyaW5nJywgJ2NtcF90b19rZXknLCAnbHJ1X2NhY2hlJywgJ3JlZHVjZScsICdwYXJ0aWFsJ10KKyAgICAgICAgICAgJ3RvdGFsX29yZGVyaW5nJywgJ2NtcF90b19rZXknLCAnbHJ1X2NhY2hlJywgJ3JlZHVjZScsICdwYXJ0aWFsJywKKyAgICAgICAgICAgJ3BhcnRpYWxtZXRob2QnLCAnc2luZ2xlZGlzcGF0Y2gnXQogCi1mcm9tIF9mdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwsIHJlZHVjZQordHJ5OgorICAgIGZyb20gX2Z1bmN0b29scyBpbXBvcnQgcmVkdWNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZnJvbSBhYmMgaW1wb3J0IGdldF9jYWNoZV90b2tlbgogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSB0eXBlcyBpbXBvcnQgTWFwcGluZ1Byb3h5VHlwZQorZnJvbSB3ZWFrcmVmIGltcG9ydCBXZWFrS2V5RGljdGlvbmFyeQogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgUkxvY2sKIGV4Y2VwdDoKQEAgLTQ3LDcgKzU1LDYgQEAKICAgICAgICBhcmUgdXBkYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBmcm9tIHRoZSB3cmFwcGVkCiAgICAgICAgZnVuY3Rpb24gKGRlZmF1bHRzIHRvIGZ1bmN0b29scy5XUkFQUEVSX1VQREFURVMpCiAgICAgIiIiCi0gICAgd3JhcHBlci5fX3dyYXBwZWRfXyA9IHdyYXBwZWQKICAgICBmb3IgYXR0ciBpbiBhc3NpZ25lZDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKHdyYXBwZWQsIGF0dHIpCkBAIC01Nyw2ICs2NCw5IEBACiAgICAgICAgICAgICBzZXRhdHRyKHdyYXBwZXIsIGF0dHIsIHZhbHVlKQogICAgIGZvciBhdHRyIGluIHVwZGF0ZWQ6CiAgICAgICAgIGdldGF0dHIod3JhcHBlciwgYXR0cikudXBkYXRlKGdldGF0dHIod3JhcHBlZCwgYXR0ciwge30pKQorICAgICMgSXNzdWUgIzE3NDgyOiBzZXQgX193cmFwcGVkX18gbGFzdCBzbyB3ZSBkb24ndCBpbmFkdmVydGVudGx5IGNvcHkgaXQKKyAgICAjIGZyb20gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2hlbiB1cGRhdGluZyBfX2RpY3RfXworICAgIHdyYXBwZXIuX193cmFwcGVkX18gPSB3cmFwcGVkCiAgICAgIyBSZXR1cm4gdGhlIHdyYXBwZXIgc28gdGhpcyBjYW4gYmUgdXNlZCBhcyBhIGRlY29yYXRvciB2aWEgcGFydGlhbCgpCiAgICAgcmV0dXJuIHdyYXBwZXIKIApAQCAtNzksMjEgKzg5LDkxIEBACiAjIyMgdG90YWxfb3JkZXJpbmcgY2xhc3MgZGVjb3JhdG9yCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCisjIFRoZSBjb3JyZWN0IHdheSB0byBpbmRpY2F0ZSB0aGF0IGEgY29tcGFyaXNvbiBvcGVyYXRpb24gZG9lc24ndAorIyByZWNvZ25pc2UgdGhlIG90aGVyIHR5cGUgaXMgdG8gcmV0dXJuIE5vdEltcGxlbWVudGVkIGFuZCBsZXQgdGhlCisjIGludGVycHJldGVyIGhhbmRsZSByYWlzaW5nIFR5cGVFcnJvciBpZiBib3RoIG9wZXJhbmRzIHJldHVybgorIyBOb3RJbXBsZW1lbnRlZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgY29tcGFyaXNvbiBtZXRob2RzCisjCisjIFRoaXMgbWFrZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRvdGFsX29yZGVyaW5nIG1vcmUgY29tcGxpY2F0ZWQsIHNpbmNlCisjIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJpZ2dlciBpbmZpbml0ZSByZWN1cnNpb24gd2hlbiB0d28KKyMgZGlmZmVyZW50IHR5cGVzIHRoYXQgYm90aCB1c2UgdGhpcyBkZWNvcmF0b3IgZW5jb3VudGVyIGVhY2ggb3RoZXIuCisjCisjIEZvciBleGFtcGxlLCBpZiBhIHR5cGUgaW1wbGVtZW50cyBfX2x0X18sIGl0J3MgbmF0dXJhbCB0byBkZWZpbmUKKyMgX19ndF9fIGFzIHNvbWV0aGluZyBsaWtlOgorIworIyAgICBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDwgb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyCisjCisjIEhvd2V2ZXIsIHVzaW5nIHRoZSBvcGVyYXRvciBzeW50YXggbGlrZSB0aGF0IGVuZHMgdXAgaW52b2tpbmcgdGhlIGZ1bGwKKyMgdHlwZSBjaGVja2luZyBtYWNoaW5lcnkgYWdhaW4gYW5kIG1lYW5zIHdlIGNhbiBlbmQgdXAgYm91bmNpbmcgYmFjayBhbmQKKyMgZm9ydGggYmV0d2VlbiB0aGUgdHdvIG9wZXJhbmRzIHVudGlsIHdlIHJ1biBvdXQgb2Ygc3RhY2sgc3BhY2UuCisjCisjIFRoZSBzb2x1dGlvbiBpcyB0byBkZWZpbmUgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGludm9rZSB0aGUgYXBwcm9wcmlhdGUKKyMgbWFnaWMgbWV0aG9kcyBkaXJlY3RseSwgZW5zdXJpbmcgd2Ugb25seSB0cnkgZWFjaCBvcGVyYW5kIG9uY2UsIGFuZAorIyByZXR1cm4gTm90SW1wbGVtZW50ZWQgaW1tZWRpYXRlbHkgaWYgaXQgaXMgcmV0dXJuZWQgZnJvbSB0aGUKKyMgdW5kZXJseWluZyB1c2VyIHByb3ZpZGVkIG1ldGhvZC4gVXNpbmcgdGhpcyBzY2hlbWUsIHRoZSBfX2d0X18gZGVyaXZlZAorIyBmcm9tIGEgdXNlciBwcm92aWRlZCBfX2x0X18gYmVjb21lczoKKyMKKyMgICAgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX2FuZF9ub3RfZXEoc2VsZi5fX2x0X18sIHNlbGYsIG90aGVyKSkKKworZGVmIF9ub3Rfb3Aob3AsIG90aGVyKToKKyAgICAjICJub3QgYSA8IGIiIGhhbmRsZXMgImEgPj0gYiIKKyAgICAjICJub3QgYSA8PSBiIiBoYW5kbGVzICJhID4gYiIKKyAgICAjICJub3QgYSA+PSBiIiBoYW5kbGVzICJhIDwgYiIKKyAgICAjICJub3QgYSA+IGIiIGhhbmRsZXMgImEgPD0gYiIKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0CisKK2RlZiBfb3Bfb3JfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJhIDwgYiBvciBhID09IGIiIGhhbmRsZXMgImEgPD0gYiIKKyAgICAjICJhID4gYiBvciBhID09IGIiIGhhbmRsZXMgImEgPj0gYiIKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgorCitkZWYgX25vdF9vcF9hbmRfbm90X2VxKG9wLCBzZWxmLCBvdGhlcik6CisgICAgIyAibm90IChhIDwgYiBvciBhID09IGIpIiBoYW5kbGVzICJhID4gYiIKKyAgICAjICJub3QgYSA8IGIgYW5kIGEgIT0gYiIgaXMgZXF1aXZhbGVudAorICAgICMgIm5vdCAoYSA+IGIgb3IgYSA9PSBiKSIgaGFuZGxlcyAiYSA8IGIiCisgICAgIyAibm90IGEgPiBiIGFuZCBhICE9IGIiIGlzIGVxdWl2YWxlbnQKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCisKK2RlZiBfbm90X29wX29yX2VxKG9wLCBzZWxmLCBvdGhlcik6CisgICAgIyAibm90IGEgPD0gYiBvciBhID09IGIiIGhhbmRsZXMgImEgPj0gYiIKKyAgICAjICJub3QgYSA+PSBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA8PSBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgorCitkZWYgX29wX2FuZF9ub3RfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJhIDw9IGIgYW5kIG5vdCBhID09IGIiIGhhbmRsZXMgImEgPCBiIgorICAgICMgImEgPj0gYiBhbmQgbm90IGEgPT0gYiIgaGFuZGxlcyAiYSA+IGIiCisgICAgb3BfcmVzdWx0ID0gb3Aob3RoZXIpCisgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICByZXR1cm4gb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCisKIGRlZiB0b3RhbF9vcmRlcmluZyhjbHMpOgogICAgICIiIkNsYXNzIGRlY29yYXRvciB0aGF0IGZpbGxzIGluIG1pc3Npbmcgb3JkZXJpbmcgbWV0aG9kcyIiIgogICAgIGNvbnZlcnQgPSB7Ci0gICAgICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCAoc2VsZiA8IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA8IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA8IG90aGVyKV0sCi0gICAgICAgICdfX2xlX18nOiBbKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDw9IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmIDw9IG90aGVyIGFuZCBub3Qgc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDw9IG90aGVyKV0sCi0gICAgICAgICdfX2d0X18nOiBbKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCAoc2VsZiA+IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA+IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+IG90aGVyKV0sCi0gICAgICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IChub3Qgc2VsZiA+PSBvdGhlcikgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPj0gb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPj0gb3RoZXIpXQorICAgICAgICAnX19sdF9fJzogWygnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX2FuZF9ub3RfZXEoc2VsZi5fX2x0X18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9vcl9lcShzZWxmLl9fbHRfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcChzZWxmLl9fbHRfXywgb3RoZXIpKV0sCisgICAgICAgICdfX2xlX18nOiBbKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Bfb3JfZXEoc2VsZi5fX2xlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9hbmRfbm90X2VxKHNlbGYuX19sZV9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19sZV9fLCBvdGhlcikpXSwKKyAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcF9hbmRfbm90X2VxKHNlbGYuX19ndF9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfb3Bfb3JfZXEoc2VsZi5fX2d0X18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Aoc2VsZi5fX2d0X18sIG90aGVyKSldLAorICAgICAgICAnX19nZV9fJzogWygnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX29yX2VxKHNlbGYuX19nZV9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfb3BfYW5kX25vdF9lcShzZWxmLl9fZ2VfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcChzZWxmLl9fZ2VfXywgb3RoZXIpKV0KICAgICB9CiAgICAgIyBGaW5kIHVzZXItZGVmaW5lZCBjb21wYXJpc29ucyAobm90IHRob3NlIGluaGVyaXRlZCBmcm9tIG9iamVjdCkuCiAgICAgcm9vdHMgPSBbb3AgZm9yIG9wIGluIGNvbnZlcnQgaWYgZ2V0YXR0cihjbHMsIG9wLCBOb25lKSBpcyBub3QgZ2V0YXR0cihvYmplY3QsIG9wLCBOb25lKV0KQEAgLTE0MCw2ICsyMjAsMTA0IEBACiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBwYXJ0aWFsKCkgYXJndW1lbnQgYXBwbGljYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUHVyZWx5IGZ1bmN0aW9uYWwsIG5vIGRlc2NyaXB0b3IgYmVoYXZpb3VyCitkZWYgcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3Jkcyk6CisgICAgIiIiTmV3IGZ1bmN0aW9uIHdpdGggcGFydGlhbCBhcHBsaWNhdGlvbiBvZiB0aGUgZ2l2ZW4gYXJndW1lbnRzCisgICAgYW5kIGtleXdvcmRzLgorICAgICIiIgorICAgIGRlZiBuZXdmdW5jKCpmYXJncywgKipma2V5d29yZHMpOgorICAgICAgICBuZXdrZXl3b3JkcyA9IGtleXdvcmRzLmNvcHkoKQorICAgICAgICBuZXdrZXl3b3Jkcy51cGRhdGUoZmtleXdvcmRzKQorICAgICAgICByZXR1cm4gZnVuYygqKGFyZ3MgKyBmYXJncyksICoqbmV3a2V5d29yZHMpCisgICAgbmV3ZnVuYy5mdW5jID0gZnVuYworICAgIG5ld2Z1bmMuYXJncyA9IGFyZ3MKKyAgICBuZXdmdW5jLmtleXdvcmRzID0ga2V5d29yZHMKKyAgICByZXR1cm4gbmV3ZnVuYworCit0cnk6CisgICAgZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCisjIERlc2NyaXB0b3IgdmVyc2lvbgorY2xhc3MgcGFydGlhbG1ldGhvZChvYmplY3QpOgorICAgICIiIk1ldGhvZCBkZXNjcmlwdG9yIHdpdGggcGFydGlhbCBhcHBsaWNhdGlvbiBvZiB0aGUgZ2l2ZW4gYXJndW1lbnRzCisgICAgYW5kIGtleXdvcmRzLgorCisgICAgU3VwcG9ydHMgd3JhcHBpbmcgZXhpc3RpbmcgZGVzY3JpcHRvcnMgYW5kIGhhbmRsZXMgbm9uLWRlc2NyaXB0b3IKKyAgICBjYWxsYWJsZXMgYXMgaW5zdGFuY2UgbWV0aG9kcy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprZXl3b3Jkcyk6CisgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmdW5jKSBhbmQgbm90IGhhc2F0dHIoZnVuYywgIl9fZ2V0X18iKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigieyFyfSBpcyBub3QgY2FsbGFibGUgb3IgYSBkZXNjcmlwdG9yIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmdW5jKSkKKworICAgICAgICAjIGZ1bmMgY291bGQgYmUgYSBkZXNjcmlwdG9yIGxpa2UgY2xhc3NtZXRob2Qgd2hpY2ggaXNuJ3QgY2FsbGFibGUsCisgICAgICAgICMgc28gd2UgY2FuJ3QgaW5oZXJpdCBmcm9tIHBhcnRpYWwgKGl0IHZlcmlmaWVzIGZ1bmMgaXMgY2FsbGFibGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgcGFydGlhbG1ldGhvZCk6CisgICAgICAgICAgICAjIGZsYXR0ZW5pbmcgaXMgbWFuZGF0b3J5IGluIG9yZGVyIHRvIHBsYWNlIGNscy9zZWxmIGJlZm9yZSBhbGwKKyAgICAgICAgICAgICMgb3RoZXIgYXJndW1lbnRzCisgICAgICAgICAgICAjIGl0J3MgYWxzbyBtb3JlIGVmZmljaWVudCBzaW5jZSBvbmx5IG9uZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAorICAgICAgICAgICAgc2VsZi5mdW5jID0gZnVuYy5mdW5jCisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBmdW5jLmFyZ3MgKyBhcmdzCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzID0gZnVuYy5rZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMudXBkYXRlKGtleXdvcmRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICAgICAgc2VsZi5hcmdzID0gYXJncworICAgICAgICAgICAgc2VsZi5rZXl3b3JkcyA9IGtleXdvcmRzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSAiLCAiLmpvaW4obWFwKHJlcHIsIHNlbGYuYXJncykpCisgICAgICAgIGtleXdvcmRzID0gIiwgIi5qb2luKCJ7fT17IXJ9Ii5mb3JtYXQoaywgdikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYua2V5d29yZHMuaXRlbXMoKSkKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICJ7bW9kdWxlfS57Y2xzfSh7ZnVuY30sIHthcmdzfSwge2tleXdvcmRzfSkiCisgICAgICAgIHJldHVybiBmb3JtYXRfc3RyaW5nLmZvcm1hdChtb2R1bGU9c2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1zZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmM9c2VsZi5mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz1hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHM9a2V5d29yZHMpCisKKyAgICBkZWYgX21ha2VfdW5ib3VuZF9tZXRob2Qoc2VsZik6CisgICAgICAgIGRlZiBfbWV0aG9kKCphcmdzLCAqKmtleXdvcmRzKToKKyAgICAgICAgICAgIGNhbGxfa2V5d29yZHMgPSBzZWxmLmtleXdvcmRzLmNvcHkoKQorICAgICAgICAgICAgY2FsbF9rZXl3b3Jkcy51cGRhdGUoa2V5d29yZHMpCisgICAgICAgICAgICBjbHNfb3Jfc2VsZiwgKnJlc3QgPSBhcmdzCisgICAgICAgICAgICBjYWxsX2FyZ3MgPSAoY2xzX29yX3NlbGYsKSArIHNlbGYuYXJncyArIHR1cGxlKHJlc3QpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5mdW5jKCpjYWxsX2FyZ3MsICoqY2FsbF9rZXl3b3JkcykKKyAgICAgICAgX21ldGhvZC5fX2lzYWJzdHJhY3RtZXRob2RfXyA9IHNlbGYuX19pc2Fic3RyYWN0bWV0aG9kX18KKyAgICAgICAgX21ldGhvZC5fcGFydGlhbG1ldGhvZCA9IHNlbGYKKyAgICAgICAgcmV0dXJuIF9tZXRob2QKKworICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgY2xzKToKKyAgICAgICAgZ2V0ID0gZ2V0YXR0cihzZWxmLmZ1bmMsICJfX2dldF9fIiwgTm9uZSkKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgICAgICBpZiBnZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBuZXdfZnVuYyA9IGdldChvYmosIGNscykKKyAgICAgICAgICAgIGlmIG5ld19mdW5jIGlzIG5vdCBzZWxmLmZ1bmM6CisgICAgICAgICAgICAgICAgIyBBc3N1bWUgX19nZXRfXyByZXR1cm5pbmcgc29tZXRoaW5nIG5ldyBpbmRpY2F0ZXMgdGhlCisgICAgICAgICAgICAgICAgIyBjcmVhdGlvbiBvZiBhbiBhcHByb3ByaWF0ZSBjYWxsYWJsZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnRpYWwobmV3X2Z1bmMsICpzZWxmLmFyZ3MsICoqc2VsZi5rZXl3b3JkcykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5fX3NlbGZfXyA9IG5ld19mdW5jLl9fc2VsZl9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgIyBJZiB0aGUgdW5kZXJseWluZyBkZXNjcmlwdG9yIGRpZG4ndCBkbyBhbnl0aGluZywgdHJlYXQgdGhpcworICAgICAgICAgICAgIyBsaWtlIGFuIGluc3RhbmNlIG1ldGhvZAorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fbWFrZV91bmJvdW5kX21ldGhvZCgpLl9fZ2V0X18ob2JqLCBjbHMpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfX2lzYWJzdHJhY3RtZXRob2RfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5mdW5jLCAiX19pc2Fic3RyYWN0bWV0aG9kX18iLCBGYWxzZSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIExSVSBDYWNoZSBmdW5jdGlvbiBkZWNvcmF0b3IKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTIxNCwxMyArMzkyLDE4IEBACiAgICAgIyBUaGUgaW50ZXJuYWxzIG9mIHRoZSBscnVfY2FjaGUgYXJlIGVuY2Fwc3VsYXRlZCBmb3IgdGhyZWFkIHNhZmV0eSBhbmQKICAgICAjIHRvIGFsbG93IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjaGFuZ2UgKGluY2x1ZGluZyBhIHBvc3NpYmxlIEMgdmVyc2lvbikuCiAKKyAgICAjIEVhcmx5IGRldGVjdGlvbiBvZiBhbiBlcnJvbmVvdXMgY2FsbCB0byBAbHJ1X2NhY2hlIHdpdGhvdXQgYW55IGFyZ3VtZW50cworICAgICMgcmVzdWx0aW5nIGluIHRoZSBpbm5lciBmdW5jdGlvbiBiZWluZyBwYXNzZWQgdG8gbWF4c2l6ZSBpbnN0ZWFkIG9mIGFuCisgICAgIyBpbnRlZ2VyIG9yIE5vbmUuCisgICAgaWYgbWF4c2l6ZSBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UobWF4c2l6ZSwgaW50KToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdFeHBlY3RlZCBtYXhzaXplIHRvIGJlIGFuIGludGVnZXIgb3IgTm9uZScpCisKICAgICAjIENvbnN0YW50cyBzaGFyZWQgYnkgYWxsIGxydSBjYWNoZSBpbnN0YW5jZXM6CiAgICAgc2VudGluZWwgPSBvYmplY3QoKSAgICAgICAgICAjIHVuaXF1ZSBvYmplY3QgdXNlZCB0byBzaWduYWwgY2FjaGUgbWlzc2VzCiAgICAgbWFrZV9rZXkgPSBfbWFrZV9rZXkgICAgICAgICAjIGJ1aWxkIGEga2V5IGZyb20gdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cwogICAgIFBSRVYsIE5FWFQsIEtFWSwgUkVTVUxUID0gMCwgMSwgMiwgMyAgICMgbmFtZXMgZm9yIHRoZSBsaW5rIGZpZWxkcwogCiAgICAgZGVmIGRlY29yYXRpbmdfZnVuY3Rpb24odXNlcl9mdW5jdGlvbik6Ci0KICAgICAgICAgY2FjaGUgPSB7fQogICAgICAgICBoaXRzID0gbWlzc2VzID0gMAogICAgICAgICBmdWxsID0gRmFsc2UKQEAgLTMyOSwzICs1MTIsMjEwIEBACiAgICAgICAgIHJldHVybiB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCB1c2VyX2Z1bmN0aW9uKQogCiAgICAgcmV0dXJuIGRlY29yYXRpbmdfZnVuY3Rpb24KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIHNpbmdsZWRpc3BhdGNoKCkgLSBzaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbiBkZWNvcmF0b3IKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBfYzNfbWVyZ2Uoc2VxdWVuY2VzKToKKyAgICAiIiJNZXJnZXMgTVJPcyBpbiAqc2VxdWVuY2VzKiB0byBhIHNpbmdsZSBNUk8gdXNpbmcgdGhlIEMzIGFsZ29yaXRobS4KKworICAgIEFkYXB0ZWQgZnJvbSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uCisKKyAgICAiIiIKKyAgICByZXN1bHQgPSBbXQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHNlcXVlbmNlcyA9IFtzIGZvciBzIGluIHNlcXVlbmNlcyBpZiBzXSAgICMgcHVyZ2UgZW1wdHkgc2VxdWVuY2VzCisgICAgICAgIGlmIG5vdCBzZXF1ZW5jZXM6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIGZvciBzMSBpbiBzZXF1ZW5jZXM6ICAgIyBmaW5kIG1lcmdlIGNhbmRpZGF0ZXMgYW1vbmcgc2VxIGhlYWRzCisgICAgICAgICAgICBjYW5kaWRhdGUgPSBzMVswXQorICAgICAgICAgICAgZm9yIHMyIGluIHNlcXVlbmNlczoKKyAgICAgICAgICAgICAgICBpZiBjYW5kaWRhdGUgaW4gczJbMTpdOgorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGJyZWFrICAgICAgIyByZWplY3QgdGhlIGN1cnJlbnQgaGVhZCwgaXQgYXBwZWFycyBsYXRlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgY2FuZGlkYXRlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJJbmNvbnNpc3RlbnQgaGllcmFyY2h5IikKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjYW5kaWRhdGUpCisgICAgICAgICMgcmVtb3ZlIHRoZSBjaG9zZW4gY2FuZGlkYXRlCisgICAgICAgIGZvciBzZXEgaW4gc2VxdWVuY2VzOgorICAgICAgICAgICAgaWYgc2VxWzBdID09IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICBkZWwgc2VxWzBdCisKK2RlZiBfYzNfbXJvKGNscywgYWJjcz1Ob25lKToKKyAgICAiIiJDb21wdXRlcyB0aGUgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgdXNpbmcgZXh0ZW5kZWQgQzMgbGluZWFyaXphdGlvbi4KKworICAgIElmIG5vICphYmNzKiBhcmUgZ2l2ZW4sIHRoZSBhbGdvcml0aG0gd29ya3MgZXhhY3RseSBsaWtlIHRoZSBidWlsdC1pbiBDMworICAgIGxpbmVhcml6YXRpb24gdXNlZCBmb3IgbWV0aG9kIHJlc29sdXRpb24uCisKKyAgICBJZiBnaXZlbiwgKmFiY3MqIGlzIGEgbGlzdCBvZiBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgdGhhdCBzaG91bGQgYmUgaW5zZXJ0ZWQKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgTVJPLiBVbnJlbGF0ZWQgQUJDcyBhcmUgaWdub3JlZCBhbmQgZG9uJ3QgZW5kIHVwIGluIHRoZQorICAgIHJlc3VsdC4gVGhlIGFsZ29yaXRobSBpbnNlcnRzIEFCQ3Mgd2hlcmUgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBpbnRyb2R1Y2VkLAorICAgIGkuZS4gaXNzdWJjbGFzcyhjbHMsIGFiYykgcmV0dXJucyBUcnVlIGZvciB0aGUgY2xhc3MgaXRzZWxmIGJ1dCByZXR1cm5zCisgICAgRmFsc2UgZm9yIGFsbCBpdHMgZGlyZWN0IGJhc2UgY2xhc3Nlcy4gSW1wbGljaXQgQUJDcyBmb3IgYSBnaXZlbiBjbGFzcworICAgIChlaXRoZXIgcmVnaXN0ZXJlZCBvciBpbmZlcnJlZCBmcm9tIHRoZSBwcmVzZW5jZSBvZiBhIHNwZWNpYWwgbWV0aG9kIGxpa2UKKyAgICBfX2xlbl9fKSBhcmUgaW5zZXJ0ZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIGxhc3QgQUJDIGV4cGxpY2l0bHkgbGlzdGVkIGluIHRoZQorICAgIE1STyBvZiBzYWlkIGNsYXNzLiBJZiB0d28gaW1wbGljaXQgQUJDcyBlbmQgdXAgbmV4dCB0byBlYWNoIG90aGVyIGluIHRoZQorICAgIHJlc3VsdGluZyBNUk8sIHRoZWlyIG9yZGVyaW5nIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHR5cGVzIGluICphYmNzKi4KKworICAgICIiIgorICAgIGZvciBpLCBiYXNlIGluIGVudW1lcmF0ZShyZXZlcnNlZChjbHMuX19iYXNlc19fKSk6CisgICAgICAgIGlmIGhhc2F0dHIoYmFzZSwgJ19fYWJzdHJhY3RtZXRob2RzX18nKToKKyAgICAgICAgICAgIGJvdW5kYXJ5ID0gbGVuKGNscy5fX2Jhc2VzX18pIC0gaQorICAgICAgICAgICAgYnJlYWsgICAjIEJhc2VzIHVwIHRvIHRoZSBsYXN0IGV4cGxpY2l0IEFCQyBhcmUgY29uc2lkZXJlZCBmaXJzdC4KKyAgICBlbHNlOgorICAgICAgICBib3VuZGFyeSA9IDAKKyAgICBhYmNzID0gbGlzdChhYmNzKSBpZiBhYmNzIGVsc2UgW10KKyAgICBleHBsaWNpdF9iYXNlcyA9IGxpc3QoY2xzLl9fYmFzZXNfX1s6Ym91bmRhcnldKQorICAgIGFic3RyYWN0X2Jhc2VzID0gW10KKyAgICBvdGhlcl9iYXNlcyA9IGxpc3QoY2xzLl9fYmFzZXNfX1tib3VuZGFyeTpdKQorICAgIGZvciBiYXNlIGluIGFiY3M6CisgICAgICAgIGlmIGlzc3ViY2xhc3MoY2xzLCBiYXNlKSBhbmQgbm90IGFueSgKKyAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGIsIGJhc2UpIGZvciBiIGluIGNscy5fX2Jhc2VzX18KKyAgICAgICAgICAgICk6CisgICAgICAgICAgICAjIElmICpjbHMqIGlzIHRoZSBjbGFzcyB0aGF0IGludHJvZHVjZXMgYmVoYXZpb3VyIGRlc2NyaWJlZCBieQorICAgICAgICAgICAgIyBhbiBBQkMgKmJhc2UqLCBpbnNlcnQgc2FpZCBBQkMgdG8gaXRzIE1STy4KKyAgICAgICAgICAgIGFic3RyYWN0X2Jhc2VzLmFwcGVuZChiYXNlKQorICAgIGZvciBiYXNlIGluIGFic3RyYWN0X2Jhc2VzOgorICAgICAgICBhYmNzLnJlbW92ZShiYXNlKQorICAgIGV4cGxpY2l0X2MzX21yb3MgPSBbX2MzX21ybyhiYXNlLCBhYmNzPWFiY3MpIGZvciBiYXNlIGluIGV4cGxpY2l0X2Jhc2VzXQorICAgIGFic3RyYWN0X2MzX21yb3MgPSBbX2MzX21ybyhiYXNlLCBhYmNzPWFiY3MpIGZvciBiYXNlIGluIGFic3RyYWN0X2Jhc2VzXQorICAgIG90aGVyX2MzX21yb3MgPSBbX2MzX21ybyhiYXNlLCBhYmNzPWFiY3MpIGZvciBiYXNlIGluIG90aGVyX2Jhc2VzXQorICAgIHJldHVybiBfYzNfbWVyZ2UoCisgICAgICAgIFtbY2xzXV0gKworICAgICAgICBleHBsaWNpdF9jM19tcm9zICsgYWJzdHJhY3RfYzNfbXJvcyArIG90aGVyX2MzX21yb3MgKworICAgICAgICBbZXhwbGljaXRfYmFzZXNdICsgW2Fic3RyYWN0X2Jhc2VzXSArIFtvdGhlcl9iYXNlc10KKyAgICApCisKK2RlZiBfY29tcG9zZV9tcm8oY2xzLCB0eXBlcyk6CisgICAgIiIiQ2FsY3VsYXRlcyB0aGUgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGEgZ2l2ZW4gY2xhc3MgKmNscyouCisKKyAgICBJbmNsdWRlcyByZWxldmFudCBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgKHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBiYXNlcykgZnJvbQorICAgIHRoZSAqdHlwZXMqIGl0ZXJhYmxlLiBVc2VzIGEgbW9kaWZpZWQgQzMgbGluZWFyaXphdGlvbiBhbGdvcml0aG0uCisKKyAgICAiIiIKKyAgICBiYXNlcyA9IHNldChjbHMuX19tcm9fXykKKyAgICAjIFJlbW92ZSBlbnRyaWVzIHdoaWNoIGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIF9fbXJvX18gb3IgdW5yZWxhdGVkLgorICAgIGRlZiBpc19yZWxhdGVkKHR5cCk6CisgICAgICAgIHJldHVybiAodHlwIG5vdCBpbiBiYXNlcyBhbmQgaGFzYXR0cih0eXAsICdfX21yb19fJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpc3N1YmNsYXNzKGNscywgdHlwKSkKKyAgICB0eXBlcyA9IFtuIGZvciBuIGluIHR5cGVzIGlmIGlzX3JlbGF0ZWQobildCisgICAgIyBSZW1vdmUgZW50cmllcyB3aGljaCBhcmUgc3RyaWN0IGJhc2VzIG9mIG90aGVyIGVudHJpZXMgKHRoZXkgd2lsbCBlbmQgdXAKKyAgICAjIGluIHRoZSBNUk8gYW55d2F5LgorICAgIGRlZiBpc19zdHJpY3RfYmFzZSh0eXApOgorICAgICAgICBmb3Igb3RoZXIgaW4gdHlwZXM6CisgICAgICAgICAgICBpZiB0eXAgIT0gb3RoZXIgYW5kIHR5cCBpbiBvdGhlci5fX21yb19fOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHR5cGVzID0gW24gZm9yIG4gaW4gdHlwZXMgaWYgbm90IGlzX3N0cmljdF9iYXNlKG4pXQorICAgICMgU3ViY2xhc3NlcyBvZiB0aGUgQUJDcyBpbiAqdHlwZXMqIHdoaWNoIGFyZSBhbHNvIGltcGxlbWVudGVkIGJ5CisgICAgIyAqY2xzKiBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgQUJDIG9yZGVyaW5nLgorICAgIHR5cGVfc2V0ID0gc2V0KHR5cGVzKQorICAgIG1ybyA9IFtdCisgICAgZm9yIHR5cCBpbiB0eXBlczoKKyAgICAgICAgZm91bmQgPSBbXQorICAgICAgICBmb3Igc3ViIGluIHR5cC5fX3N1YmNsYXNzZXNfXygpOgorICAgICAgICAgICAgaWYgc3ViIG5vdCBpbiBiYXNlcyBhbmQgaXNzdWJjbGFzcyhjbHMsIHN1Yik6CisgICAgICAgICAgICAgICAgZm91bmQuYXBwZW5kKFtzIGZvciBzIGluIHN1Yi5fX21yb19fIGlmIHMgaW4gdHlwZV9zZXRdKQorICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICBtcm8uYXBwZW5kKHR5cCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgRmF2b3Igc3ViY2xhc3NlcyB3aXRoIHRoZSBiaWdnZXN0IG51bWJlciBvZiB1c2VmdWwgYmFzZXMKKyAgICAgICAgZm91bmQuc29ydChrZXk9bGVuLCByZXZlcnNlPVRydWUpCisgICAgICAgIGZvciBzdWIgaW4gZm91bmQ6CisgICAgICAgICAgICBmb3Igc3ViY2xzIGluIHN1YjoKKyAgICAgICAgICAgICAgICBpZiBzdWJjbHMgbm90IGluIG1ybzoKKyAgICAgICAgICAgICAgICAgICAgbXJvLmFwcGVuZChzdWJjbHMpCisgICAgcmV0dXJuIF9jM19tcm8oY2xzLCBhYmNzPW1ybykKKworZGVmIF9maW5kX2ltcGwoY2xzLCByZWdpc3RyeSk6CisgICAgIiIiUmV0dXJucyB0aGUgYmVzdCBtYXRjaGluZyBpbXBsZW1lbnRhdGlvbiBmcm9tICpyZWdpc3RyeSogZm9yIHR5cGUgKmNscyouCisKKyAgICBXaGVyZSB0aGVyZSBpcyBubyByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIHR5cGUsIGl0cyBtZXRob2QKKyAgICByZXNvbHV0aW9uIG9yZGVyIGlzIHVzZWQgdG8gZmluZCBhIG1vcmUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4KKworICAgIE5vdGU6IGlmICpyZWdpc3RyeSogZG9lcyBub3QgY29udGFpbiBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGJhc2UKKyAgICAqb2JqZWN0KiB0eXBlLCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gTm9uZS4KKworICAgICIiIgorICAgIG1ybyA9IF9jb21wb3NlX21ybyhjbHMsIHJlZ2lzdHJ5LmtleXMoKSkKKyAgICBtYXRjaCA9IE5vbmUKKyAgICBmb3IgdCBpbiBtcm86CisgICAgICAgIGlmIG1hdGNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBJZiAqbWF0Y2gqIGlzIGFuIGltcGxpY2l0IEFCQyBidXQgdGhlcmUgaXMgYW5vdGhlciB1bnJlbGF0ZWQsCisgICAgICAgICAgICAjIGVxdWFsbHkgbWF0Y2hpbmcgaW1wbGljaXQgQUJDLCByZWZ1c2UgdGhlIHRlbXB0YXRpb24gdG8gZ3Vlc3MuCisgICAgICAgICAgICBpZiAodCBpbiByZWdpc3RyeSBhbmQgdCBub3QgaW4gY2xzLl9fbXJvX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtYXRjaCBub3QgaW4gY2xzLl9fbXJvX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgaXNzdWJjbGFzcyhtYXRjaCwgdCkpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQW1iaWd1b3VzIGRpc3BhdGNoOiB7fSBvciB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBtYXRjaCwgdCkpCisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiB0IGluIHJlZ2lzdHJ5OgorICAgICAgICAgICAgbWF0Y2ggPSB0CisgICAgcmV0dXJuIHJlZ2lzdHJ5LmdldChtYXRjaCkKKworZGVmIHNpbmdsZWRpc3BhdGNoKGZ1bmMpOgorICAgICIiIlNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIGRlY29yYXRvci4KKworICAgIFRyYW5zZm9ybXMgYSBmdW5jdGlvbiBpbnRvIGEgZ2VuZXJpYyBmdW5jdGlvbiwgd2hpY2ggY2FuIGhhdmUgZGlmZmVyZW50CisgICAgYmVoYXZpb3VycyBkZXBlbmRpbmcgdXBvbiB0aGUgdHlwZSBvZiBpdHMgZmlyc3QgYXJndW1lbnQuIFRoZSBkZWNvcmF0ZWQKKyAgICBmdW5jdGlvbiBhY3RzIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBhbmQgYWRkaXRpb25hbAorICAgIGltcGxlbWVudGF0aW9ucyBjYW4gYmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgcmVnaXN0ZXIoKSBhdHRyaWJ1dGUgb2YgdGhlCisgICAgZ2VuZXJpYyBmdW5jdGlvbi4KKworICAgICIiIgorICAgIHJlZ2lzdHJ5ID0ge30KKyAgICBkaXNwYXRjaF9jYWNoZSA9IFdlYWtLZXlEaWN0aW9uYXJ5KCkKKyAgICBjYWNoZV90b2tlbiA9IE5vbmUKKworICAgIGRlZiBkaXNwYXRjaChjbHMpOgorICAgICAgICAiIiJnZW5lcmljX2Z1bmMuZGlzcGF0Y2goY2xzKSAtPiA8ZnVuY3Rpb24gaW1wbGVtZW50YXRpb24+CisKKyAgICAgICAgUnVucyB0aGUgZGlzcGF0Y2ggYWxnb3JpdGhtIHRvIHJldHVybiB0aGUgYmVzdCBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgZm9yIHRoZSBnaXZlbiAqY2xzKiByZWdpc3RlcmVkIG9uICpnZW5lcmljX2Z1bmMqLgorCisgICAgICAgICIiIgorICAgICAgICBub25sb2NhbCBjYWNoZV90b2tlbgorICAgICAgICBpZiBjYWNoZV90b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGN1cnJlbnRfdG9rZW4gPSBnZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICAgICAgaWYgY2FjaGVfdG9rZW4gIT0gY3VycmVudF90b2tlbjoKKyAgICAgICAgICAgICAgICBkaXNwYXRjaF9jYWNoZS5jbGVhcigpCisgICAgICAgICAgICAgICAgY2FjaGVfdG9rZW4gPSBjdXJyZW50X3Rva2VuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcGwgPSBkaXNwYXRjaF9jYWNoZVtjbHNdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBsID0gcmVnaXN0cnlbY2xzXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIGltcGwgPSBfZmluZF9pbXBsKGNscywgcmVnaXN0cnkpCisgICAgICAgICAgICBkaXNwYXRjaF9jYWNoZVtjbHNdID0gaW1wbAorICAgICAgICByZXR1cm4gaW1wbAorCisgICAgZGVmIHJlZ2lzdGVyKGNscywgZnVuYz1Ob25lKToKKyAgICAgICAgIiIiZ2VuZXJpY19mdW5jLnJlZ2lzdGVyKGNscywgZnVuYykgLT4gZnVuYworCisgICAgICAgIFJlZ2lzdGVycyBhIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdpdmVuICpjbHMqIG9uIGEgKmdlbmVyaWNfZnVuYyouCisKKyAgICAgICAgIiIiCisgICAgICAgIG5vbmxvY2FsIGNhY2hlX3Rva2VuCisgICAgICAgIGlmIGZ1bmMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZjogcmVnaXN0ZXIoY2xzLCBmKQorICAgICAgICByZWdpc3RyeVtjbHNdID0gZnVuYworICAgICAgICBpZiBjYWNoZV90b2tlbiBpcyBOb25lIGFuZCBoYXNhdHRyKGNscywgJ19fYWJzdHJhY3RtZXRob2RzX18nKToKKyAgICAgICAgICAgIGNhY2hlX3Rva2VuID0gZ2V0X2NhY2hlX3Rva2VuKCkKKyAgICAgICAgZGlzcGF0Y2hfY2FjaGUuY2xlYXIoKQorICAgICAgICByZXR1cm4gZnVuYworCisgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3cpOgorICAgICAgICByZXR1cm4gZGlzcGF0Y2goYXJnc1swXS5fX2NsYXNzX18pKCphcmdzLCAqKmt3KQorCisgICAgcmVnaXN0cnlbb2JqZWN0XSA9IGZ1bmMKKyAgICB3cmFwcGVyLnJlZ2lzdGVyID0gcmVnaXN0ZXIKKyAgICB3cmFwcGVyLmRpc3BhdGNoID0gZGlzcGF0Y2gKKyAgICB3cmFwcGVyLnJlZ2lzdHJ5ID0gTWFwcGluZ1Byb3h5VHlwZShyZWdpc3RyeSkKKyAgICB3cmFwcGVyLl9jbGVhcl9jYWNoZSA9IGRpc3BhdGNoX2NhY2hlLmNsZWFyCisgICAgdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZnVuYykKKyAgICByZXR1cm4gd3JhcHBlcgpkaWZmIC0tZ2l0IGEvTGliL2dlbmVyaWNwYXRoLnB5IGIvTGliL2dlbmVyaWNwYXRoLnB5CmluZGV4IDM0MGMwMDQuLmNhNGE1MTAgMTAwNjQ0Ci0tLSBhL0xpYi9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvZ2VuZXJpY3BhdGgucHkKQEAgLTcsNyArNyw4IEBACiBpbXBvcnQgc3RhdAogCiBfX2FsbF9fID0gWydjb21tb25wcmVmaXgnLCAnZXhpc3RzJywgJ2dldGF0aW1lJywgJ2dldGN0aW1lJywgJ2dldG10aW1lJywKLSAgICAgICAgICAgJ2dldHNpemUnLCAnaXNkaXInLCAnaXNmaWxlJ10KKyAgICAgICAgICAgJ2dldHNpemUnLCAnaXNkaXInLCAnaXNmaWxlJywgJ3NhbWVmaWxlJywgJ3NhbWVvcGVuZmlsZScsCisgICAgICAgICAgICdzYW1lc3RhdCddCiAKIAogIyBEb2VzIGEgcGF0aCBleGlzdD8KQEAgLTE2LDcgKzE3LDcgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgRmFsc2UgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgogICAgIHRyeToKICAgICAgICAgb3Muc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIApAQCAtMjcsNyArMjgsNyBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSByZWd1bGFyIGZpbGUiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3Muc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU1JFRyhzdC5zdF9tb2RlKQogCkBAIC0zOSw3ICs0MCw3IEBACiAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIHBhdGhuYW1lIHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnkuIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLnN0YXQocykKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNESVIoc3Quc3RfbW9kZSkKIApAQCAtNzUsNiArNzYsMzEgQEAKICAgICAgICAgICAgIHJldHVybiBzMVs6aV0KICAgICByZXR1cm4gczEKIAorIyBBcmUgdHdvIHN0YXQgYnVmZmVycyAob2J0YWluZWQgZnJvbSBzdGF0LCBmc3RhdCBvciBsc3RhdCkKKyMgZGVzY3JpYmluZyB0aGUgc2FtZSBmaWxlPworZGVmIHNhbWVzdGF0KHMxLCBzMik6CisgICAgIiIiVGVzdCB3aGV0aGVyIHR3byBzdGF0IGJ1ZmZlcnMgcmVmZXJlbmNlIHRoZSBzYW1lIGZpbGUiIiIKKyAgICByZXR1cm4gKHMxLnN0X2lubyA9PSBzMi5zdF9pbm8gYW5kCisgICAgICAgICAgICBzMS5zdF9kZXYgPT0gczIuc3RfZGV2KQorCisKKyMgQXJlIHR3byBmaWxlbmFtZXMgcmVhbGx5IHBvaW50aW5nIHRvIHRoZSBzYW1lIGZpbGU/CitkZWYgc2FtZWZpbGUoZjEsIGYyKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiIiIKKyAgICBzMSA9IG9zLnN0YXQoZjEpCisgICAgczIgPSBvcy5zdGF0KGYyKQorICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCisKKworIyBBcmUgdHdvIG9wZW4gZmlsZXMgcmVhbGx5IHJlZmVyZW5jaW5nIHRoZSBzYW1lIGZpbGU/CisjIChOb3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yISkKK2RlZiBzYW1lb3BlbmZpbGUoZnAxLCBmcDIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gb3BlbiBmaWxlIG9iamVjdHMgcmVmZXJlbmNlIHRoZSBzYW1lIGZpbGUiIiIKKyAgICBzMSA9IG9zLmZzdGF0KGZwMSkKKyAgICBzMiA9IG9zLmZzdGF0KGZwMikKKyAgICByZXR1cm4gc2FtZXN0YXQoczEsIHMyKQorCisKICMgU3BsaXQgYSBwYXRoIGluIHJvb3QgYW5kIGV4dGVuc2lvbi4KICMgVGhlIGV4dGVuc2lvbiBpcyBldmVyeXRoaW5nIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGRvdCBpbiB0aGUgbGFzdAogIyBwYXRobmFtZSBjb21wb25lbnQ7IHRoZSByb290IGlzIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoYXQuCmRpZmYgLS1naXQgYS9MaWIvZ2V0cGFzcy5weSBiL0xpYi9nZXRwYXNzLnB5CmluZGV4IDUzYzM4YjguLjdjNGU5NzYgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRwYXNzLnB5CisrKyBiL0xpYi9nZXRwYXNzLnB5CkBAIC0xMzUsNyArMTM1LDEzIEBACiAgICAgICAgIGlucHV0ID0gc3lzLnN0ZGluCiAgICAgcHJvbXB0ID0gc3RyKHByb21wdCkKICAgICBpZiBwcm9tcHQ6Ci0gICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAjIFVzZSByZXBsYWNlIGVycm9yIGhhbmRsZXIgdG8gZ2V0IGFzIG11Y2ggYXMgcG9zc2libGUgcHJpbnRlZC4KKyAgICAgICAgICAgIHByb21wdCA9IHByb21wdC5lbmNvZGUoc3RyZWFtLmVuY29kaW5nLCAncmVwbGFjZScpCisgICAgICAgICAgICBwcm9tcHQgPSBwcm9tcHQuZGVjb2RlKHN0cmVhbS5lbmNvZGluZykKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCiAgICAgICAgIHN0cmVhbS5mbHVzaCgpCiAgICAgIyBOT1RFOiBUaGUgUHl0aG9uIEMgQVBJIGNhbGxzIGZsb2NrZmlsZSgpIChhbmQgdW5sb2NrKSBkdXJpbmcgcmVhZGxpbmUuCiAgICAgbGluZSA9IGlucHV0LnJlYWRsaW5lKCkKZGlmZiAtLWdpdCBhL0xpYi9nZXR0ZXh0LnB5IGIvTGliL2dldHRleHQucHkKaW5kZXggZTQzZjA0NC4uMDVkOWMxZSAxMDA2NDQKLS0tIGEvTGliL2dldHRleHQucHkKKysrIGIvTGliL2dldHRleHQucHkKQEAgLTI0NCw3ICsyNDQsNyBAQAogICAgICAgICAgICAgdmVyc2lvbiwgbXNnY291bnQsIG1hc3RlcmlkeCwgdHJhbnNpZHggPSB1bnBhY2soJz40SScsIGJ1Zls0OjIwXSkKICAgICAgICAgICAgIGlpID0gJz5JSScKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoMCwgJ0JhZCBtYWdpYyBudW1iZXInLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoMCwgJ0JhZCBtYWdpYyBudW1iZXInLCBmaWxlbmFtZSkKICAgICAgICAgIyBOb3cgcHV0IGFsbCBtZXNzYWdlcyBmcm9tIHRoZSAubW8gZmlsZSBidWZmZXIgaW50byB0aGUgY2F0YWxvZwogICAgICAgICAjIGRpY3Rpb25hcnkuCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIG1zZ2NvdW50KToKQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICAgICAgICAgIG1zZyA9IGJ1Zlttb2ZmOm1lbmRdCiAgICAgICAgICAgICAgICAgdG1zZyA9IGJ1Zlt0b2ZmOnRlbmRdCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoMCwgJ0ZpbGUgaXMgY29ycnVwdCcsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoMCwgJ0ZpbGUgaXMgY29ycnVwdCcsIGZpbGVuYW1lKQogICAgICAgICAgICAgIyBTZWUgaWYgd2UncmUgbG9va2luZyBhdCBHTlUgLm1vIGNvbnZlbnRpb25zIGZvciBtZXRhZGF0YQogICAgICAgICAgICAgaWYgbWxlbiA9PSAwOgogICAgICAgICAgICAgICAgICMgQ2F0YWxvZyBkZXNjcmlwdGlvbgpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgaWYgbm90IG1vZmlsZXM6CiAgICAgICAgIGlmIGZhbGxiYWNrOgogICAgICAgICAgICAgcmV0dXJuIE51bGxUcmFuc2xhdGlvbnMoKQotICAgICAgICByYWlzZSBJT0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKKyAgICAgICAgcmFpc2UgT1NFcnJvcihFTk9FTlQsICdObyB0cmFuc2xhdGlvbiBmaWxlIGZvdW5kIGZvciBkb21haW4nLCBkb21haW4pCiAgICAgIyBBdm9pZCBvcGVuaW5nLCByZWFkaW5nLCBhbmQgcGFyc2luZyB0aGUgLm1vIGZpbGUgYWZ0ZXIgaXQncyBiZWVuIGRvbmUKICAgICAjIG9uY2UuCiAgICAgcmVzdWx0ID0gTm9uZQpAQCAtNDYwLDcgKzQ2MCw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gbWVzc2FnZQogICAgIHJldHVybiB0LmdldHRleHQobWVzc2FnZSkKIApAQCAtNDY4LDcgKzQ2OCw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gbWVzc2FnZQogICAgIHJldHVybiB0LmxnZXR0ZXh0KG1lc3NhZ2UpCiAKQEAgLTQ3Niw3ICs0NzYsNyBAQAogICAgIHRyeToKICAgICAgICAgdCA9IHRyYW5zbGF0aW9uKGRvbWFpbiwgX2xvY2FsZWRpcnMuZ2V0KGRvbWFpbiwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc2V0PV9sb2NhbGVjb2Rlc2V0cy5nZXQoZG9tYWluKSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgbiA9PSAxOgogICAgICAgICAgICAgcmV0dXJuIG1zZ2lkMQogICAgICAgICBlbHNlOgpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiBuID09IDE6CiAgICAgICAgICAgICByZXR1cm4gbXNnaWQxCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvZ2xvYi5weSBiL0xpYi9nbG9iLnB5CmluZGV4IDFmNjAyNjUuLmQ2ZWNhMjQgMTAwNjQ0Ci0tLSBhL0xpYi9nbG9iLnB5CisrKyBiL0xpYi9nbG9iLnB5CkBAIC0yNiwxNCArMjYsMTggQEAKICAgICBwYXR0ZXJucy4KIAogICAgICIiIgotICAgIGlmIG5vdCBoYXNfbWFnaWMocGF0aG5hbWUpOgotICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMocGF0aG5hbWUpOgotICAgICAgICAgICAgeWllbGQgcGF0aG5hbWUKLSAgICAgICAgcmV0dXJuCiAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQorICAgIGlmIG5vdCBoYXNfbWFnaWMocGF0aG5hbWUpOgorICAgICAgICBpZiBiYXNlbmFtZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhwYXRobmFtZSk6CisgICAgICAgICAgICAgICAgeWllbGQgcGF0aG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUGF0dGVybnMgZW5kaW5nIHdpdGggYSBzbGFzaCBzaG91bGQgbWF0Y2ggb25seSBkaXJlY3RvcmllcworICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihkaXJuYW1lKToKKyAgICAgICAgICAgICAgICB5aWVsZCBwYXRobmFtZQorICAgICAgICByZXR1cm4KICAgICBpZiBub3QgZGlybmFtZToKLSAgICAgICAgZm9yIG5hbWUgaW4gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpOgotICAgICAgICAgICAgeWllbGQgbmFtZQorICAgICAgICB5aWVsZCBmcm9tIGdsb2IxKE5vbmUsIGJhc2VuYW1lKQogICAgICAgICByZXR1cm4KICAgICAjIGBvcy5wYXRoLnNwbGl0KClgIHJldHVybnMgdGhlIGFyZ3VtZW50IGl0c2VsZiBhcyBhIGRpcm5hbWUgaWYgaXQgaXMgYQogICAgICMgZHJpdmUgb3IgVU5DIHBhdGguICBQcmV2ZW50IGFuIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIGRyaXZlIG9yIFVOQyBwYXRoCkBAIC02Miw3ICs2Niw3IEBACiAgICAgICAgICAgICBkaXJuYW1lID0gb3MuY3VyZGlyCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBbXQogICAgIGlmIG5vdCBfaXNoaWRkZW4ocGF0dGVybik6CiAgICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gbmFtZXMgaWYgbm90IF9pc2hpZGRlbih4KV0KQEAgLTgwLDggKzg0LDggQEAKICAgICByZXR1cm4gW10KIAogCi1tYWdpY19jaGVjayA9IHJlLmNvbXBpbGUoJ1sqP1tdJykKLW1hZ2ljX2NoZWNrX2J5dGVzID0gcmUuY29tcGlsZShiJ1sqP1tdJykKK21hZ2ljX2NoZWNrID0gcmUuY29tcGlsZSgnKFsqP1tdKScpCittYWdpY19jaGVja19ieXRlcyA9IHJlLmNvbXBpbGUoYicoWyo/W10pJykKIAogZGVmIGhhc19tYWdpYyhzKToKICAgICBpZiBpc2luc3RhbmNlKHMsIGJ5dGVzKToKQEAgLTkyLDMgKzk2LDE1IEBACiAKIGRlZiBfaXNoaWRkZW4ocGF0aCk6CiAgICAgcmV0dXJuIHBhdGhbMF0gaW4gKCcuJywgYicuJ1swXSkKKworZGVmIGVzY2FwZShwYXRobmFtZSk6CisgICAgIiIiRXNjYXBlIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICAgIiIiCisgICAgIyBFc2NhcGluZyBpcyBkb25lIGJ5IHdyYXBwaW5nIGFueSBvZiAiKj9bIiBiZXR3ZWVuIHNxdWFyZSBicmFja2V0cy4KKyAgICAjIE1ldGFjaGFyYWN0ZXJzIGRvIG5vdCB3b3JrIGluIHRoZSBkcml2ZSBwYXJ0IGFuZCBzaG91bGRuJ3QgYmUgZXNjYXBlZC4KKyAgICBkcml2ZSwgcGF0aG5hbWUgPSBvcy5wYXRoLnNwbGl0ZHJpdmUocGF0aG5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShwYXRobmFtZSwgYnl0ZXMpOgorICAgICAgICBwYXRobmFtZSA9IG1hZ2ljX2NoZWNrX2J5dGVzLnN1YihicidbXDFdJywgcGF0aG5hbWUpCisgICAgZWxzZToKKyAgICAgICAgcGF0aG5hbWUgPSBtYWdpY19jaGVjay5zdWIocidbXDFdJywgcGF0aG5hbWUpCisgICAgcmV0dXJuIGRyaXZlICsgcGF0aG5hbWUKZGlmZiAtLWdpdCBhL0xpYi9nemlwLnB5IGIvTGliL2d6aXAucHkKaW5kZXggNGZmOTgyMC4uZjkzNGQ0ZiAxMDA2NDQKLS0tIGEvTGliL2d6aXAucHkKKysrIGIvTGliL2d6aXAucHkKQEAgLTIzLDkgKzIzLDkgQEAKICAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwgb3IKICAgICBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJhIiBvciAiYWIiIGZvciBiaW5hcnkgbW9kZSwKLSAgICBvciAicnQiLCAid3QiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlCi0gICAgZGVmYXVsdCBjb21wcmVzc2xldmVsIGlzIDkuCisgICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAieCIsICJ4YiIsICJhIiBvciAiYWIiIGZvcgorICAgIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiLCAieHQiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgbW9kZSBpcworICAgICJyYiIsIGFuZCB0aGUgZGVmYXVsdCBjb21wcmVzc2xldmVsIGlzIDkuCiAKICAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgR3ppcEZpbGUgY29uc3RydWN0b3I6CiAgICAgR3ppcEZpbGUoZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzbGV2ZWwpLiBJbiB0aGlzIGNhc2UsIHRoZSBlbmNvZGluZywgZXJyb3JzCkBAIC02NSw5ICs2NSw2IEBACiAgICAgIyBvciB1bnNpZ25lZC4KICAgICBvdXRwdXQud3JpdGUoc3RydWN0LnBhY2soIjxMIiwgdmFsdWUpKQogCi1kZWYgcmVhZDMyKGlucHV0KToKLSAgICByZXR1cm4gc3RydWN0LnVucGFjaygiPEkiLCBpbnB1dC5yZWFkKDQpKVswXQotCiBjbGFzcyBfUGFkZGVkRmlsZToKICAgICAiIiJNaW5pbWFsIHJlYWQtb25seSBmaWxlIG9iamVjdCB0aGF0IHByZXBlbmRzIGEgc3RyaW5nIHRvIHRoZSBjb250ZW50cwogICAgIG9mIGFuIGFjdHVhbCBmaWxlLiBTaG91bGRuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIGd6aXAucHksIGFzIGl0IGxhY2tzCkBAIC0xNTQsMTEgKzE1MSwxMSBAQAogICAgICAgICBmaWxlb2JqLCBpZiBkaXNjZXJuaWJsZTsgb3RoZXJ3aXNlLCBpdCBkZWZhdWx0cyB0byB0aGUgZW1wdHkgc3RyaW5nLAogICAgICAgICBhbmQgaW4gdGhpcyBjYXNlIHRoZSBvcmlnaW5hbCBmaWxlbmFtZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGhlYWRlci4KIAotICAgICAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgYW55IG9mICdyJywgJ3JiJywgJ2EnLCAnYWInLCAndycsIG9yICd3YicsCi0gICAgICAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaWxlIHdpbGwgYmUgcmVhZCBvciB3cml0dGVuLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlIGFueSBvZiAncicsICdyYicsICdhJywgJ2FiJywgJ3cnLCAnd2InLCAneCcsIG9yCisgICAgICAgICd4YicgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAogICAgICAgICBpcyB0aGUgbW9kZSBvZiBmaWxlb2JqIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzICdyYicuCiAgICAgICAgIEEgbW9kZSBvZiAncicgaXMgZXF1aXZhbGVudCB0byBvbmUgb2YgJ3JiJywgYW5kIHNpbWlsYXJseSBmb3IgJ3cnIGFuZAotICAgICAgICAnd2InLCBhbmQgJ2EnIGFuZCAnYWInLgorICAgICAgICAnd2InLCAnYScgYW5kICdhYicsIGFuZCAneCcgYW5kICd4YicuCiAKICAgICAgICAgVGhlIGNvbXByZXNzbGV2ZWwgYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDAgdG8gOSBjb250cm9sbGluZyB0aGUKICAgICAgICAgbGV2ZWwgb2YgY29tcHJlc3Npb247IDEgaXMgZmFzdGVzdCBhbmQgcHJvZHVjZXMgdGhlIGxlYXN0IGNvbXByZXNzaW9uLApAQCAtMjA0LDcgKzIwMSw3IEBACiAgICAgICAgICAgICBzZWxmLm1pbl9yZWFkc2l6ZSA9IDEwMAogICAgICAgICAgICAgZmlsZW9iaiA9IF9QYWRkZWRGaWxlKGZpbGVvYmopCiAKLSAgICAgICAgZWxpZiBtb2RlLnN0YXJ0c3dpdGgoKCd3JywgJ2EnKSk6CisgICAgICAgIGVsaWYgbW9kZS5zdGFydHN3aXRoKCgndycsICdhJywgJ3gnKSk6CiAgICAgICAgICAgICBzZWxmLm1vZGUgPSBXUklURQogICAgICAgICAgICAgc2VsZi5faW5pdF93cml0ZShmaWxlbmFtZSkKICAgICAgICAgICAgIHNlbGYuY29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKGNvbXByZXNzbGV2ZWwsCkBAIC0yODEsMjggKzI3OCwzMiBAQAogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoYiIiKSAmIDB4ZmZmZmZmZmYKICAgICAgICAgc2VsZi5zaXplID0gMAogCisgICAgZGVmIF9yZWFkX2V4YWN0KHNlbGYsIG4pOgorICAgICAgICBkYXRhID0gc2VsZi5maWxlb2JqLnJlYWQobikKKyAgICAgICAgd2hpbGUgbGVuKGRhdGEpIDwgbjoKKyAgICAgICAgICAgIGIgPSBzZWxmLmZpbGVvYmoucmVhZChuIC0gbGVuKGRhdGEpKQorICAgICAgICAgICAgaWYgbm90IGI6CisgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIkNvbXByZXNzZWQgZmlsZSBlbmRlZCBiZWZvcmUgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kLW9mLXN0cmVhbSBtYXJrZXIgd2FzIHJlYWNoZWQiKQorICAgICAgICAgICAgZGF0YSArPSBiCisgICAgICAgIHJldHVybiBkYXRhCisKICAgICBkZWYgX3JlYWRfZ3ppcF9oZWFkZXIoc2VsZik6CiAgICAgICAgIG1hZ2ljID0gc2VsZi5maWxlb2JqLnJlYWQoMikKICAgICAgICAgaWYgbWFnaWMgPT0gYicnOgotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIlJlYWNoZWQgRU9GIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIGlmIG1hZ2ljICE9IGInXDAzN1wyMTMnOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ05vdCBhIGd6aXBwZWQgZmlsZScpCiAKLSAgICAgICAgbWV0aG9kID0gb3JkKCBzZWxmLmZpbGVvYmoucmVhZCgxKSApCisgICAgICAgIG1ldGhvZCwgZmxhZywgc2VsZi5tdGltZSA9IHN0cnVjdC51bnBhY2soIjxCQkl4eCIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCiAgICAgICAgIGlmIG1ldGhvZCAhPSA4OgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnKQotICAgICAgICBmbGFnID0gb3JkKCBzZWxmLmZpbGVvYmoucmVhZCgxKSApCi0gICAgICAgIHNlbGYubXRpbWUgPSByZWFkMzIoc2VsZi5maWxlb2JqKQotICAgICAgICAjIGV4dHJhZmxhZyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgICMgb3MgPSBzZWxmLmZpbGVvYmoucmVhZCgxKQotICAgICAgICBzZWxmLmZpbGVvYmoucmVhZCgyKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnKQogCiAgICAgICAgIGlmIGZsYWcgJiBGRVhUUkE6CiAgICAgICAgICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSBleHRyYSBmaWVsZCwgaWYgcHJlc2VudAotICAgICAgICAgICAgeGxlbiA9IG9yZChzZWxmLmZpbGVvYmoucmVhZCgxKSkKLSAgICAgICAgICAgIHhsZW4gPSB4bGVuICsgMjU2Km9yZChzZWxmLmZpbGVvYmoucmVhZCgxKSkKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKHhsZW4pCisgICAgICAgICAgICBleHRyYV9sZW4sID0gc3RydWN0LnVucGFjaygiPEgiLCBzZWxmLl9yZWFkX2V4YWN0KDIpKQorICAgICAgICAgICAgc2VsZi5fcmVhZF9leGFjdChleHRyYV9sZW4pCiAgICAgICAgIGlmIGZsYWcgJiBGTkFNRToKICAgICAgICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgIHdoaWxlIFRydWU6CkBAIC0zMTYsMTggKzMxNywxOSBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBzIG9yIHM9PWInXDAwMCc6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIGZsYWcgJiBGSENSQzoKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSAxNi1iaXQgaGVhZGVyIENSQworICAgICAgICAgICAgc2VsZi5fcmVhZF9leGFjdCgyKSAgICAgIyBSZWFkICYgZGlzY2FyZCB0aGUgMTYtYml0IGhlYWRlciBDUkMKIAogICAgICAgICB1bnVzZWQgPSBzZWxmLmZpbGVvYmoudW51c2VkKCkKICAgICAgICAgaWYgdW51c2VkOgogICAgICAgICAgICAgdW5jb21wcmVzcyA9IHNlbGYuZGVjb21wcmVzcy5kZWNvbXByZXNzKHVudXNlZCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEodW5jb21wcmVzcykKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiB3cml0ZShzZWxmLGRhdGEpOgogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gV1JJVEU6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJ3cml0ZSgpIG9uIHJlYWQtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cml0ZSgpIG9uIGNsb3NlZCBHemlwRmlsZSBvYmplY3QiKQpAQCAtMzQ4LDI3ICszNTAsMjMgQEAKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJyZWFkKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gYicnCiAKICAgICAgICAgcmVhZHNpemUgPSAxMDI0CiAgICAgICAgIGlmIHNpemUgPCAwOiAgICAgICAgIyBnZXQgdGhlIHdob2xlIHRoaW5nCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChyZWFkc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIHNpemUgPSBzZWxmLmV4dHJhc2l6ZQorICAgICAgICAgICAgd2hpbGUgc2VsZi5fcmVhZChyZWFkc2l6ZSk6CisgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQorICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCiAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgIyBqdXN0IGdldCBzb21lIG1vcmUgb2YgaXQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aGlsZSBzaXplID4gc2VsZi5leHRyYXNpemU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQocmVhZHNpemUpCi0gICAgICAgICAgICAgICAgICAgIHJlYWRzaXplID0gbWluKHNlbGYubWF4X3JlYWRfY2h1bmssIHJlYWRzaXplICogMikKLSAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBzaXplID4gc2VsZi5leHRyYXNpemU6Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBzZWxmLmV4dHJhc2l6ZQorICAgICAgICAgICAgd2hpbGUgc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFkKHJlYWRzaXplKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQogCiAgICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0CiAgICAgICAgIGNodW5rID0gc2VsZi5leHRyYWJ1ZltvZmZzZXQ6IG9mZnNldCArIHNpemVdCkBAIC0zODEsMTcgKzM3OSwxNCBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQxKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInJlYWQxKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQogCiAgICAgICAgIGlmIHNlbGYuZXh0cmFzaXplIDw9IDAgYW5kIHNlbGYuZmlsZW9iaiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIGInJwogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgRm9yIGNlcnRhaW4gaW5wdXQgZGF0YSwgYSBzaW5nbGUgY2FsbCB0byBfcmVhZCgpIG1heSBub3QgcmV0dXJuCi0gICAgICAgICAgICAjIGFueSBkYXRhLiBJbiB0aGlzIGNhc2UsIHJldHJ5IHVudGlsIHdlIGdldCBzb21lIGRhdGEgb3IgcmVhY2ggRU9GLgotICAgICAgICAgICAgd2hpbGUgc2VsZi5leHRyYXNpemUgPD0gMDoKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKCkKLSAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAjIEZvciBjZXJ0YWluIGlucHV0IGRhdGEsIGEgc2luZ2xlIGNhbGwgdG8gX3JlYWQoKSBtYXkgbm90IHJldHVybgorICAgICAgICAjIGFueSBkYXRhLiBJbiB0aGlzIGNhc2UsIHJldHJ5IHVudGlsIHdlIGdldCBzb21lIGRhdGEgb3IgcmVhY2ggRU9GLgorICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLl9yZWFkKCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIHNpemUgPCAwIG9yIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKICAgICAgICAgICAgIHNpemUgPSBzZWxmLmV4dHJhc2l6ZQpAQCAtNDA1LDcgKzQwMCw3IEBACiAgICAgZGVmIHBlZWsoc2VsZiwgbik6CiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicGVlaygpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUJBREYsICJwZWVrKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQogCiAgICAgICAgICMgRG8gbm90IHJldHVybiByaWRpY3Vsb3VzbHkgc21hbGwgYnVmZmVycywgZm9yIG9uZSBjb21tb24gaWRpb20KICAgICAgICAgIyBpcyB0byBjYWxsIHBlZWsoMSkgYW5kIGV4cGVjdCBtb3JlIGJ5dGVzIGluIHJldHVybi4KQEAgLTQxNCwxMiArNDA5LDkgQEAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPT0gMDoKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW9iaiBpcyBOb25lOgogICAgICAgICAgICAgICAgIHJldHVybiBiJycKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGRvbid0IHJldHVybiBiIiIgaWYgd2UgaGF2ZW4ndCByZWFjaGVkIEVPRi4KLSAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA9PSAwOgotICAgICAgICAgICAgICAgICAgICAjIDEwMjQgaXMgdGhlIHNhbWUgYnVmZmVyaW5nIGhldXJpc3RpYyB1c2VkIGluIHJlYWQoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKG1heChuLCAxMDI0KSkKLSAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGIiIiBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgRU9GLgorICAgICAgICAgICAgIyAxMDI0IGlzIHRoZSBzYW1lIGJ1ZmZlcmluZyBoZXVyaXN0aWMgdXNlZCBpbiByZWFkKCkKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplID09IDAgYW5kIHNlbGYuX3JlYWQobWF4KG4sIDEwMjQpKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0CiAgICAgICAgIHJlbWFpbmluZyA9IHNlbGYuZXh0cmFzaXplCkBAIC00MzIsMTMgKzQyNCwxNCBAQAogCiAgICAgZGVmIF9yZWFkKHNlbGYsIHNpemU9MTAyNCk6CiAgICAgICAgIGlmIHNlbGYuZmlsZW9iaiBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIlJlYWNoZWQgRU9GIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIGlmIHNlbGYuX25ld19tZW1iZXI6CiAgICAgICAgICAgICAjIElmIHRoZSBfbmV3X21lbWJlciBmbGFnIGlzIHNldCwgd2UgaGF2ZSB0bwogICAgICAgICAgICAgIyBqdW1wIHRvIHRoZSBuZXh0IG1lbWJlciwgaWYgdGhlcmUgaXMgb25lLgogICAgICAgICAgICAgc2VsZi5faW5pdF9yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfZ3ppcF9oZWFkZXIoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWRfZ3ppcF9oZWFkZXIoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHNlbGYuZGVjb21wcmVzcyA9IHpsaWIuZGVjb21wcmVzc29iaigtemxpYi5NQVhfV0JJVFMpCiAgICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gRmFsc2UKIApAQCAtNDU1LDcgKzQ0OCw3IEBACiAgICAgICAgICAgICBzZWxmLmZpbGVvYmoucHJlcGVuZChzZWxmLmRlY29tcHJlc3MudW51c2VkX2RhdGEsIFRydWUpCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCiAgICAgICAgICAgICBzZWxmLl9hZGRfcmVhZF9kYXRhKCB1bmNvbXByZXNzICkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCdSZWFjaGVkIEVPRicpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3MoYnVmKQogICAgICAgICBzZWxmLl9hZGRfcmVhZF9kYXRhKCB1bmNvbXByZXNzICkKQEAgLTQ3MSw2ICs0NjQsNyBAQAogICAgICAgICAgICAgIyBhIG5ldyBtZW1iZXIgb24gdGhlIG5leHQgY2FsbAogICAgICAgICAgICAgc2VsZi5fcmVhZF9lb2YoKQogICAgICAgICAgICAgc2VsZi5fbmV3X21lbWJlciA9IFRydWUKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBfYWRkX3JlYWRfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGRhdGEsIHNlbGYuY3JjKSAmIDB4ZmZmZmZmZmYKQEAgLTQ4NSwxMyArNDc5LDEyIEBACiAgICAgICAgICMgV2UgY2hlY2sgdGhlIHRoYXQgdGhlIGNvbXB1dGVkIENSQyBhbmQgc2l6ZSBvZiB0aGUKICAgICAgICAgIyB1bmNvbXByZXNzZWQgZGF0YSBtYXRjaGVzIHRoZSBzdG9yZWQgdmFsdWVzLiAgTm90ZSB0aGF0IHRoZSBzaXplCiAgICAgICAgICMgc3RvcmVkIGlzIHRoZSB0cnVlIGZpbGUgc2l6ZSBtb2QgMioqMzIuCi0gICAgICAgIGNyYzMyID0gcmVhZDMyKHNlbGYuZmlsZW9iaikKLSAgICAgICAgaXNpemUgPSByZWFkMzIoc2VsZi5maWxlb2JqKSAgIyBtYXkgZXhjZWVkIDJHQgorICAgICAgICBjcmMzMiwgaXNpemUgPSBzdHJ1Y3QudW5wYWNrKCI8SUkiLCBzZWxmLl9yZWFkX2V4YWN0KDgpKQogICAgICAgICBpZiBjcmMzMiAhPSBzZWxmLmNyYzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkNSQyBjaGVjayBmYWlsZWQgJXMgIT0gJXMiICUgKGhleChjcmMzMiksCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDUkMgY2hlY2sgZmFpbGVkICVzICE9ICVzIiAlIChoZXgoY3JjMzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4KHNlbGYuY3JjKSkpCiAgICAgICAgIGVsaWYgaXNpemUgIT0gKHNlbGYuc2l6ZSAmIDB4ZmZmZmZmZmYpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkluY29ycmVjdCBsZW5ndGggb2YgZGF0YSBwcm9kdWNlZCIpCiAKICAgICAgICAgIyBHemlwIGZpbGVzIGNhbiBiZSBwYWRkZWQgd2l0aCB6ZXJvZXMgYW5kIHN0aWxsIGhhdmUgYXJjaGl2ZXMuCiAgICAgICAgICMgQ29uc3VtZSBhbGwgemVybyBieXRlcyBhbmQgc2V0IHRoZSBmaWxlIHBvc2l0aW9uIHRvIHRoZSBmaXJzdApAQCAtNTQwLDcgKzUzMyw3IEBACiAgICAgICAgICcnJ1JldHVybiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGljYXRvciB0byB0aGUKICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlJycnCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQogICAgICAgICBzZWxmLmZpbGVvYmouc2VlaygwKQogICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQogICAgICAgICBzZWxmLmV4dHJhYnVmID0gYiIiCkBAIC01NjUsNyArNTU4LDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZWVrIGZyb20gZW5kIG5vdCBzdXBwb3J0ZWQnKQogICAgICAgICBpZiBzZWxmLm1vZGUgPT0gV1JJVEU6CiAgICAgICAgICAgICBpZiBvZmZzZXQgPCBzZWxmLm9mZnNldDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOZWdhdGl2ZSBzZWVrIGluIHdyaXRlIG1vZGUnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ05lZ2F0aXZlIHNlZWsgaW4gd3JpdGUgbW9kZScpCiAgICAgICAgICAgICBjb3VudCA9IG9mZnNldCAtIHNlbGYub2Zmc2V0CiAgICAgICAgICAgICBjaHVuayA9IGJ5dGVzKDEwMjQpCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShjb3VudCAvLyAxMDI0KToKZGlmZiAtLWdpdCBhL0xpYi9oYXNobGliLnB5IGIvTGliL2hhc2hsaWIucHkKaW5kZXggMjE0NTRjNy4uZTY1MmZjNiAxMDA2NDQKLS0tIGEvTGliL2hhc2hsaWIucHkKKysrIGIvTGliL2hhc2hsaWIucHkKQEAgLTEsNCArMSw0IEBACi0jICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKKyMuICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKICMgIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIApAQCAtNjAsMzQgKzYwLDM4IEBACiBhbGdvcml0aG1zX2F2YWlsYWJsZSA9IHNldChfX2Fsd2F5c19zdXBwb3J0ZWQpCiAKIF9fYWxsX18gPSBfX2Fsd2F5c19zdXBwb3J0ZWQgKyAoJ25ldycsICdhbGdvcml0aG1zX2d1YXJhbnRlZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxnb3JpdGhtc19hdmFpbGFibGUnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxnb3JpdGhtc19hdmFpbGFibGUnLCAncGJrZGYyX2htYWMnKQogCiAKK19fYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZSA9IHt9CisKIGRlZiBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKG5hbWUpOgorICAgIGNhY2hlID0gX19idWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlCisgICAgY29uc3RydWN0b3IgPSBjYWNoZS5nZXQobmFtZSkKKyAgICBpZiBjb25zdHJ1Y3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yCiAgICAgdHJ5OgogICAgICAgICBpZiBuYW1lIGluICgnU0hBMScsICdzaGExJyk6CiAgICAgICAgICAgICBpbXBvcnQgX3NoYTEKLSAgICAgICAgICAgIHJldHVybiBfc2hhMS5zaGExCisgICAgICAgICAgICBjYWNoZVsnU0hBMSddID0gY2FjaGVbJ3NoYTEnXSA9IF9zaGExLnNoYTEKICAgICAgICAgZWxpZiBuYW1lIGluICgnTUQ1JywgJ21kNScpOgogICAgICAgICAgICAgaW1wb3J0IF9tZDUKLSAgICAgICAgICAgIHJldHVybiBfbWQ1Lm1kNQorICAgICAgICAgICAgY2FjaGVbJ01ENSddID0gY2FjaGVbJ21kNSddID0gX21kNS5tZDUKICAgICAgICAgZWxpZiBuYW1lIGluICgnU0hBMjU2JywgJ3NoYTI1NicsICdTSEEyMjQnLCAnc2hhMjI0Jyk6CiAgICAgICAgICAgICBpbXBvcnQgX3NoYTI1NgotICAgICAgICAgICAgYnMgPSBuYW1lWzM6XQotICAgICAgICAgICAgaWYgYnMgPT0gJzI1Nic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGEyNTYuc2hhMjU2Ci0gICAgICAgICAgICBlbGlmIGJzID09ICcyMjQnOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhMjU2LnNoYTIyNAorICAgICAgICAgICAgY2FjaGVbJ1NIQTIyNCddID0gY2FjaGVbJ3NoYTIyNCddID0gX3NoYTI1Ni5zaGEyMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEyNTYnXSA9IGNhY2hlWydzaGEyNTYnXSA9IF9zaGEyNTYuc2hhMjU2CiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ1NIQTUxMicsICdzaGE1MTInLCAnU0hBMzg0JywgJ3NoYTM4NCcpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGE1MTIKLSAgICAgICAgICAgIGJzID0gbmFtZVszOl0KLSAgICAgICAgICAgIGlmIGJzID09ICc1MTInOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhNTEyLnNoYTUxMgotICAgICAgICAgICAgZWxpZiBicyA9PSAnMzg0JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTUxMi5zaGEzODQKKyAgICAgICAgICAgIGNhY2hlWydTSEEzODQnXSA9IGNhY2hlWydzaGEzODQnXSA9IF9zaGE1MTIuc2hhMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBNTEyJ10gPSBjYWNoZVsnc2hhNTEyJ10gPSBfc2hhNTEyLnNoYTUxMgogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgcGFzcyAgIyBubyBleHRlbnNpb24gbW9kdWxlLCB0aGlzIGhhc2ggaXMgdW5zdXBwb3J0ZWQuCiAKKyAgICBjb25zdHJ1Y3RvciA9IGNhY2hlLmdldChuYW1lKQorICAgIGlmIGNvbnN0cnVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gY29uc3RydWN0b3IKKwogICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vuc3VwcG9ydGVkIGhhc2ggdHlwZSAnICsgbmFtZSkKIAogCkBAIC0xMzQsNiArMTM4LDcxIEBACiAgICAgbmV3ID0gX19weV9uZXcKICAgICBfX2dldF9oYXNoID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcgogCit0cnk6CisgICAgIyBPcGVuU1NMJ3MgUEtDUzVfUEJLREYyX0hNQUMgcmVxdWlyZXMgT3BlblNTTCAxLjArIHdpdGggSE1BQyBhbmQgU0hBCisgICAgZnJvbSBfaGFzaGxpYiBpbXBvcnQgcGJrZGYyX2htYWMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdHJhbnNfNUMgPSBieXRlcygoeCBeIDB4NUMpIGZvciB4IGluIHJhbmdlKDI1NikpCisgICAgX3RyYW5zXzM2ID0gYnl0ZXMoKHggXiAweDM2KSBmb3IgeCBpbiByYW5nZSgyNTYpKQorCisgICAgZGVmIHBia2RmMl9obWFjKGhhc2hfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGRrbGVuPU5vbmUpOgorICAgICAgICAiIiJQYXNzd29yZCBiYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyIChQS0NTICM1IHYyLjApCisKKyAgICAgICAgVGhpcyBQeXRob24gaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHRoZSBobWFjIG1vZHVsZSBhYm91dCBhcyBmYXN0CisgICAgICAgIGFzIE9wZW5TU0wncyBQS0NTNV9QQktERjJfSE1BQyBmb3Igc2hvcnQgcGFzc3dvcmRzIGFuZCBtdWNoIGZhc3RlcgorICAgICAgICBmb3IgbG9uZyBwYXNzd29yZHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShoYXNoX25hbWUsIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoaGFzaF9uYW1lKQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhc3N3b3JkLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgcGFzc3dvcmQgPSBieXRlcyhtZW1vcnl2aWV3KHBhc3N3b3JkKSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2FsdCwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHNhbHQgPSBieXRlcyhtZW1vcnl2aWV3KHNhbHQpKQorCisgICAgICAgICMgRmFzdCBpbmxpbmUgSE1BQyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBpbm5lciA9IG5ldyhoYXNoX25hbWUpCisgICAgICAgIG91dGVyID0gbmV3KGhhc2hfbmFtZSkKKyAgICAgICAgYmxvY2tzaXplID0gZ2V0YXR0cihpbm5lciwgJ2Jsb2NrX3NpemUnLCA2NCkKKyAgICAgICAgaWYgbGVuKHBhc3N3b3JkKSA+IGJsb2Nrc2l6ZToKKyAgICAgICAgICAgIHBhc3N3b3JkID0gbmV3KGhhc2hfbmFtZSwgcGFzc3dvcmQpLmRpZ2VzdCgpCisgICAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQgKyBiJ1x4MDAnICogKGJsb2Nrc2l6ZSAtIGxlbihwYXNzd29yZCkpCisgICAgICAgIGlubmVyLnVwZGF0ZShwYXNzd29yZC50cmFuc2xhdGUoX3RyYW5zXzM2KSkKKyAgICAgICAgb3V0ZXIudXBkYXRlKHBhc3N3b3JkLnRyYW5zbGF0ZShfdHJhbnNfNUMpKQorCisgICAgICAgIGRlZiBwcmYobXNnLCBpbm5lcj1pbm5lciwgb3V0ZXI9b3V0ZXIpOgorICAgICAgICAgICAgIyBQQktERjJfSE1BQyB1c2VzIHRoZSBwYXNzd29yZCBhcyBrZXkuIFdlIGNhbiByZS11c2UgdGhlIHNhbWUKKyAgICAgICAgICAgICMgZGlnZXN0IG9iamVjdHMgYW5kIGFuZCBqdXN0IHVwZGF0ZSBjb3BpZXMgdG8gc2tpcCBpbml0aWFsaXphdGlvbi4KKyAgICAgICAgICAgIGljcHkgPSBpbm5lci5jb3B5KCkKKyAgICAgICAgICAgIG9jcHkgPSBvdXRlci5jb3B5KCkKKyAgICAgICAgICAgIGljcHkudXBkYXRlKG1zZykKKyAgICAgICAgICAgIG9jcHkudXBkYXRlKGljcHkuZGlnZXN0KCkpCisgICAgICAgICAgICByZXR1cm4gb2NweS5kaWdlc3QoKQorCisgICAgICAgIGlmIGl0ZXJhdGlvbnMgPCAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihpdGVyYXRpb25zKQorICAgICAgICBpZiBka2xlbiBpcyBOb25lOgorICAgICAgICAgICAgZGtsZW4gPSBvdXRlci5kaWdlc3Rfc2l6ZQorICAgICAgICBpZiBka2xlbiA8IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGRrbGVuKQorCisgICAgICAgIGRrZXkgPSBiJycKKyAgICAgICAgbG9vcCA9IDEKKyAgICAgICAgZnJvbV9ieXRlcyA9IGludC5mcm9tX2J5dGVzCisgICAgICAgIHdoaWxlIGxlbihka2V5KSA8IGRrbGVuOgorICAgICAgICAgICAgcHJldiA9IHByZihzYWx0ICsgbG9vcC50b19ieXRlcyg0LCAnYmlnJykpCisgICAgICAgICAgICAjIGVuZGlhbmVzcyBkb2Vzbid0IG1hdHRlciBoZXJlIGFzIGxvbmcgdG8gLyBmcm9tIHVzZSB0aGUgc2FtZQorICAgICAgICAgICAgcmtleSA9IGludC5mcm9tX2J5dGVzKHByZXYsICdiaWcnKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyAtIDEpOgorICAgICAgICAgICAgICAgIHByZXYgPSBwcmYocHJldikKKyAgICAgICAgICAgICAgICAjIHJrZXkgPSBya2V5IF4gcHJldgorICAgICAgICAgICAgICAgIHJrZXkgXj0gZnJvbV9ieXRlcyhwcmV2LCAnYmlnJykKKyAgICAgICAgICAgIGxvb3AgKz0gMQorICAgICAgICAgICAgZGtleSArPSBya2V5LnRvX2J5dGVzKGlubmVyLmRpZ2VzdF9zaXplLCAnYmlnJykKKworICAgICAgICByZXR1cm4gZGtleVs6ZGtsZW5dCisKKwogZm9yIF9fZnVuY19uYW1lIGluIF9fYWx3YXlzX3N1cHBvcnRlZDoKICAgICAjIHRyeSB0aGVtIGFsbCwgc29tZSBtYXkgbm90IHdvcmsgZHVlIHRvIHRoZSBPcGVuU1NMCiAgICAgIyB2ZXJzaW9uIG5vdCBzdXBwb3J0aW5nIHRoYXQgYWxnb3JpdGhtLgpkaWZmIC0tZ2l0IGEvTGliL2htYWMucHkgYi9MaWIvaG1hYy5weQppbmRleCA0Mjk3YTcxLi43Nzc4NWEyIDEwMDY0NAotLS0gYS9MaWIvaG1hYy5weQorKysgYi9MaWIvaG1hYy5weQpAQCAtNCw3ICs0LDggQEAKICIiIgogCiBpbXBvcnQgd2FybmluZ3MgYXMgX3dhcm5pbmdzCi1mcm9tIG9wZXJhdG9yIGltcG9ydCBfY29tcGFyZV9kaWdlc3QgYXMgY29tcGFyZV9kaWdlc3QKK2Zyb20gX29wZXJhdG9yIGltcG9ydCBfY29tcGFyZV9kaWdlc3QgYXMgY29tcGFyZV9kaWdlc3QKK2ltcG9ydCBoYXNobGliIGFzIF9oYXNobGliCiAKIHRyYW5zXzVDID0gYnl0ZXMoKHggXiAweDVDKSBmb3IgeCBpbiByYW5nZSgyNTYpKQogdHJhbnNfMzYgPSBieXRlcygoeCBeIDB4MzYpIGZvciB4IGluIHJhbmdlKDI1NikpCkBAIC0yOCwyMSArMjksMjcgQEAKICAgICAgICAga2V5OiAgICAgICBrZXkgZm9yIHRoZSBrZXllZCBoYXNoIG9iamVjdC4KICAgICAgICAgbXNnOiAgICAgICBJbml0aWFsIGlucHV0IGZvciB0aGUgaGFzaCwgaWYgcHJvdmlkZWQuCiAgICAgICAgIGRpZ2VzdG1vZDogQSBtb2R1bGUgc3VwcG9ydGluZyBQRVAgMjQ3LiAgKk9SKgotICAgICAgICAgICAgICAgICAgIEEgaGFzaGxpYiBjb25zdHJ1Y3RvciByZXR1cm5pbmcgYSBuZXcgaGFzaCBvYmplY3QuCisgICAgICAgICAgICAgICAgICAgQSBoYXNobGliIGNvbnN0cnVjdG9yIHJldHVybmluZyBhIG5ldyBoYXNoIG9iamVjdC4gKk9SKgorICAgICAgICAgICAgICAgICAgIEEgaGFzaCBuYW1lIHN1aXRhYmxlIGZvciBoYXNobGliLm5ldygpLgogICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGhhc2hsaWIubWQ1LgorICAgICAgICAgICAgICAgICAgIEltcGxpY2l0IGRlZmF1bHQgdG8gaGFzaGxpYi5tZDUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgaW4gUHl0aG9uIDMuNi4KIAotICAgICAgICBOb3RlOiBrZXkgYW5kIG1zZyBtdXN0IGJlIGJ5dGVzIG9iamVjdHMuCisgICAgICAgIE5vdGU6IGtleSBhbmQgbXNnIG11c3QgYmUgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0cy4KICAgICAgICAgIiIiCiAKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoa2V5LCBieXRlcyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleTogZXhwZWN0ZWQgYnl0ZXMsIGJ1dCBnb3QgJXIiICUgdHlwZShrZXkpLl9fbmFtZV9fKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleTogZXhwZWN0ZWQgYnl0ZXMgb3IgYnl0ZWFycmF5LCBidXQgZ290ICVyIiAlIHR5cGUoa2V5KS5fX25hbWVfXykKIAogICAgICAgICBpZiBkaWdlc3Rtb2QgaXMgTm9uZToKLSAgICAgICAgICAgIGltcG9ydCBoYXNobGliCi0gICAgICAgICAgICBkaWdlc3Rtb2QgPSBoYXNobGliLm1kNQorICAgICAgICAgICAgX3dhcm5pbmdzLndhcm4oIkhNQUMoKSB3aXRob3V0IGFuIGV4cGxpY2l0IGRpZ2VzdG1vZCBhcmd1bWVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXMgZGVwcmVjYXRlZC4iLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICAgICAgZGlnZXN0bW9kID0gX2hhc2hsaWIubWQ1CiAKICAgICAgICAgaWYgY2FsbGFibGUoZGlnZXN0bW9kKToKICAgICAgICAgICAgIHNlbGYuZGlnZXN0X2NvbnMgPSBkaWdlc3Rtb2QKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRpZ2VzdG1vZCwgc3RyKToKKyAgICAgICAgICAgIHNlbGYuZGlnZXN0X2NvbnMgPSBsYW1iZGEgZD1iJyc6IF9oYXNobGliLm5ldyhkaWdlc3Rtb2QsIGQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmRpZ2VzdF9jb25zID0gbGFtYmRhIGQ9YicnOiBkaWdlc3Rtb2QubmV3KGQpCiAKQEAgLTYzLDYgKzcwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZywgMikKICAgICAgICAgICAgIGJsb2Nrc2l6ZSA9IHNlbGYuYmxvY2tzaXplCiAKKyAgICAgICAgIyBzZWxmLmJsb2Nrc2l6ZSBpcyB0aGUgZGVmYXVsdCBibG9ja3NpemUuIHNlbGYuYmxvY2tfc2l6ZSBpcworICAgICAgICAjIGVmZmVjdGl2ZSBibG9jayBzaXplIGFzIHdlbGwgYXMgdGhlIHB1YmxpYyBBUEkgYXR0cmlidXRlLgorICAgICAgICBzZWxmLmJsb2NrX3NpemUgPSBibG9ja3NpemUKKwogICAgICAgICBpZiBsZW4oa2V5KSA+IGJsb2Nrc2l6ZToKICAgICAgICAgICAgIGtleSA9IHNlbGYuZGlnZXN0X2NvbnMoa2V5KS5kaWdlc3QoKQogCkBAIC03MiwxMSArODMsMTMgQEAKICAgICAgICAgaWYgbXNnIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi51cGRhdGUobXNnKQogCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiaG1hYy0iICsgc2VsZi5pbm5lci5uYW1lCisKICAgICBkZWYgdXBkYXRlKHNlbGYsIG1zZyk6CiAgICAgICAgICIiIlVwZGF0ZSB0aGlzIGhhc2hpbmcgb2JqZWN0IHdpdGggdGhlIHN0cmluZyBtc2cuCiAgICAgICAgICIiIgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtc2csIGJ5dGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIGJ1dCBnb3QgJXIiICUgdHlwZShtc2cpLl9fbmFtZV9fKQogICAgICAgICBzZWxmLmlubmVyLnVwZGF0ZShtc2cpCiAKICAgICBkZWYgY29weShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9odG1sL19faW5pdF9fLnB5IGIvTGliL2h0bWwvX19pbml0X18ucHkKaW5kZXggMDI2NTJlZi4uZGEwYTBhMyAxMDA2NDQKLS0tIGEvTGliL2h0bWwvX19pbml0X18ucHkKKysrIGIvTGliL2h0bWwvX19pbml0X18ucHkKQEAgLTIsMTIgKzIsMTIgQEAKIEdlbmVyYWwgZnVuY3Rpb25zIGZvciBIVE1MIG1hbmlwdWxhdGlvbi4KICIiIgogCitpbXBvcnQgcmUgYXMgX3JlCitmcm9tIGh0bWwuZW50aXRpZXMgaW1wb3J0IGh0bWw1IGFzIF9odG1sNQogCi1fZXNjYXBlX21hcCA9IHtvcmQoJyYnKTogJyZhbXA7Jywgb3JkKCc8Jyk6ICcmbHQ7Jywgb3JkKCc+Jyk6ICcmZ3Q7J30KLV9lc2NhcGVfbWFwX2Z1bGwgPSB7b3JkKCcmJyk6ICcmYW1wOycsIG9yZCgnPCcpOiAnJmx0OycsIG9yZCgnPicpOiAnJmd0OycsCi0gICAgICAgICAgICAgICAgICAgIG9yZCgnIicpOiAnJnF1b3Q7Jywgb3JkKCdcJycpOiAnJiN4Mjc7J30KIAotIyBOQjogdGhpcyBpcyBhIGNhbmRpZGF0ZSBmb3IgYSBieXRlcy9zdHJpbmcgcG9seW1vcnBoaWMgaW50ZXJmYWNlCitfX2FsbF9fID0gWydlc2NhcGUnLCAndW5lc2NhcGUnXQorCiAKIGRlZiBlc2NhcGUocywgcXVvdGU9VHJ1ZSk6CiAgICAgIiIiCkBAIC0xNiw2ICsxNiwxMTcgQEAKICAgICBjaGFyYWN0ZXJzLCBib3RoIGRvdWJsZSBxdW90ZSAoIikgYW5kIHNpbmdsZSBxdW90ZSAoJykgY2hhcmFjdGVycyBhcmUgYWxzbwogICAgIHRyYW5zbGF0ZWQuCiAgICAgIiIiCisgICAgcyA9IHMucmVwbGFjZSgiJiIsICImYW1wOyIpICMgTXVzdCBiZSBkb25lIGZpcnN0IQorICAgIHMgPSBzLnJlcGxhY2UoIjwiLCAiJmx0OyIpCisgICAgcyA9IHMucmVwbGFjZSgiPiIsICImZ3Q7IikKICAgICBpZiBxdW90ZToKLSAgICAgICAgcmV0dXJuIHMudHJhbnNsYXRlKF9lc2NhcGVfbWFwX2Z1bGwpCi0gICAgcmV0dXJuIHMudHJhbnNsYXRlKF9lc2NhcGVfbWFwKQorICAgICAgICBzID0gcy5yZXBsYWNlKCciJywgIiZxdW90OyIpCisgICAgICAgIHMgPSBzLnJlcGxhY2UoJ1wnJywgIiYjeDI3OyIpCisgICAgcmV0dXJuIHMKKworCisjIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zeW50YXguaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzCisKK19pbnZhbGlkX2NoYXJyZWZzID0geworICAgIDB4MDA6ICdcdWZmZmQnLCAgIyBSRVBMQUNFTUVOVCBDSEFSQUNURVIKKyAgICAweDBkOiAnXHInLCAgICAgICMgQ0FSUklBR0UgUkVUVVJOCisgICAgMHg4MDogJ1x1MjBhYycsICAjIEVVUk8gU0lHTgorICAgIDB4ODE6ICdceDgxJywgICAgIyA8Y29udHJvbD4KKyAgICAweDgyOiAnXHUyMDFhJywgICMgU0lOR0xFIExPVy05IFFVT1RBVElPTiBNQVJLCisgICAgMHg4MzogJ1x1MDE5MicsICAjIExBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PSworICAgIDB4ODQ6ICdcdTIwMWUnLCAgIyBET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKKyAgICAweDg1OiAnXHUyMDI2JywgICMgSE9SSVpPTlRBTCBFTExJUFNJUworICAgIDB4ODY6ICdcdTIwMjAnLCAgIyBEQUdHRVIKKyAgICAweDg3OiAnXHUyMDIxJywgICMgRE9VQkxFIERBR0dFUgorICAgIDB4ODg6ICdcdTAyYzYnLCAgIyBNT0RJRklFUiBMRVRURVIgQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAweDg5OiAnXHUyMDMwJywgICMgUEVSIE1JTExFIFNJR04KKyAgICAweDhhOiAnXHUwMTYwJywgICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENBUk9OCisgICAgMHg4YjogJ1x1MjAzOScsICAjIFNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHg4YzogJ1x1MDE1MicsICAjIExBVElOIENBUElUQUwgTElHQVRVUkUgT0UKKyAgICAweDhkOiAnXHg4ZCcsICAgICMgPGNvbnRyb2w+CisgICAgMHg4ZTogJ1x1MDE3ZCcsICAjIExBVElOIENBUElUQUwgTEVUVEVSIFogV0lUSCBDQVJPTgorICAgIDB4OGY6ICdceDhmJywgICAgIyA8Y29udHJvbD4KKyAgICAweDkwOiAnXHg5MCcsICAgICMgPGNvbnRyb2w+CisgICAgMHg5MTogJ1x1MjAxOCcsICAjIExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5MjogJ1x1MjAxOScsICAjIFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OTM6ICdcdTIwMWMnLCAgIyBMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OTQ6ICdcdTIwMWQnLCAgIyBSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDk1OiAnXHUyMDIyJywgICMgQlVMTEVUCisgICAgMHg5NjogJ1x1MjAxMycsICAjIEVOIERBU0gKKyAgICAweDk3OiAnXHUyMDE0JywgICMgRU0gREFTSAorICAgIDB4OTg6ICdcdTAyZGMnLCAgIyBTTUFMTCBUSUxERQorICAgIDB4OTk6ICdcdTIxMjInLCAgIyBUUkFERSBNQVJLIFNJR04KKyAgICAweDlhOiAnXHUwMTYxJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBDQVJPTgorICAgIDB4OWI6ICdcdTIwM2EnLCAgIyBTSU5HTEUgUklHSFQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDljOiAnXHUwMTUzJywgICMgTEFUSU4gU01BTEwgTElHQVRVUkUgT0UKKyAgICAweDlkOiAnXHg5ZCcsICAgICMgPGNvbnRyb2w+CisgICAgMHg5ZTogJ1x1MDE3ZScsICAjIExBVElOIFNNQUxMIExFVFRFUiBaIFdJVEggQ0FST04KKyAgICAweDlmOiAnXHUwMTc4JywgICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworfQorCitfaW52YWxpZF9jb2RlcG9pbnRzID0geworICAgICMgMHgwMDAxIHRvIDB4MDAwOAorICAgIDB4MSwgMHgyLCAweDMsIDB4NCwgMHg1LCAweDYsIDB4NywgMHg4LAorICAgICMgMHgwMDBFIHRvIDB4MDAxRgorICAgIDB4ZSwgMHhmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LAorICAgIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsCisgICAgIyAweDAwN0YgdG8gMHgwMDlGCisgICAgMHg3ZiwgMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwgMHg4YSwKKyAgICAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLCAweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LAorICAgIDB4OTcsIDB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCisgICAgIyAweEZERDAgdG8gMHhGREVGCisgICAgMHhmZGQwLCAweGZkZDEsIDB4ZmRkMiwgMHhmZGQzLCAweGZkZDQsIDB4ZmRkNSwgMHhmZGQ2LCAweGZkZDcsIDB4ZmRkOCwKKyAgICAweGZkZDksIDB4ZmRkYSwgMHhmZGRiLCAweGZkZGMsIDB4ZmRkZCwgMHhmZGRlLCAweGZkZGYsIDB4ZmRlMCwgMHhmZGUxLAorICAgIDB4ZmRlMiwgMHhmZGUzLCAweGZkZTQsIDB4ZmRlNSwgMHhmZGU2LCAweGZkZTcsIDB4ZmRlOCwgMHhmZGU5LCAweGZkZWEsCisgICAgMHhmZGViLCAweGZkZWMsIDB4ZmRlZCwgMHhmZGVlLCAweGZkZWYsCisgICAgIyBvdGhlcnMKKyAgICAweGIsIDB4ZmZmZSwgMHhmZmZmLCAweDFmZmZlLCAweDFmZmZmLCAweDJmZmZlLCAweDJmZmZmLCAweDNmZmZlLCAweDNmZmZmLAorICAgIDB4NGZmZmUsIDB4NGZmZmYsIDB4NWZmZmUsIDB4NWZmZmYsIDB4NmZmZmUsIDB4NmZmZmYsIDB4N2ZmZmUsIDB4N2ZmZmYsCisgICAgMHg4ZmZmZSwgMHg4ZmZmZiwgMHg5ZmZmZSwgMHg5ZmZmZiwgMHhhZmZmZSwgMHhhZmZmZiwgMHhiZmZmZSwgMHhiZmZmZiwKKyAgICAweGNmZmZlLCAweGNmZmZmLCAweGRmZmZlLCAweGRmZmZmLCAweGVmZmZlLCAweGVmZmZmLCAweGZmZmZlLCAweGZmZmZmLAorICAgIDB4MTBmZmZlLCAweDEwZmZmZgorfQorCisKK2RlZiBfcmVwbGFjZV9jaGFycmVmKHMpOgorICAgIHMgPSBzLmdyb3VwKDEpCisgICAgaWYgc1swXSA9PSAnIyc6CisgICAgICAgICMgbnVtZXJpYyBjaGFycmVmCisgICAgICAgIGlmIHNbMV0gaW4gJ3hYJzoKKyAgICAgICAgICAgIG51bSA9IGludChzWzI6XS5yc3RyaXAoJzsnKSwgMTYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBudW0gPSBpbnQoc1sxOl0ucnN0cmlwKCc7JykpCisgICAgICAgIGlmIG51bSBpbiBfaW52YWxpZF9jaGFycmVmczoKKyAgICAgICAgICAgIHJldHVybiBfaW52YWxpZF9jaGFycmVmc1tudW1dCisgICAgICAgIGlmIDB4RDgwMCA8PSBudW0gPD0gMHhERkZGIG9yIG51bSA+IDB4MTBGRkZGOgorICAgICAgICAgICAgcmV0dXJuICdcdUZGRkQnCisgICAgICAgIGlmIG51bSBpbiBfaW52YWxpZF9jb2RlcG9pbnRzOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIHJldHVybiBjaHIobnVtKQorICAgIGVsc2U6CisgICAgICAgICMgbmFtZWQgY2hhcnJlZgorICAgICAgICBpZiBzIGluIF9odG1sNToKKyAgICAgICAgICAgIHJldHVybiBfaHRtbDVbc10KKyAgICAgICAgIyBmaW5kIHRoZSBsb25nZXN0IG1hdGNoaW5nIG5hbWUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkKQorICAgICAgICBmb3IgeCBpbiByYW5nZShsZW4ocyktMSwgMSwgLTEpOgorICAgICAgICAgICAgaWYgc1s6eF0gaW4gX2h0bWw1OgorICAgICAgICAgICAgICAgIHJldHVybiBfaHRtbDVbc1s6eF1dICsgc1t4Ol0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJicgKyBzCisKKworX2NoYXJyZWYgPSBfcmUuY29tcGlsZShyJyYoI1swLTldKzs/JworICAgICAgICAgICAgICAgICAgICAgICByJ3wjW3hYXVswLTlhLWZBLUZdKzs/JworICAgICAgICAgICAgICAgICAgICAgICByJ3xbXlx0XG5cZiA8JiM7XXsxLDMyfTs/KScpCisKK2RlZiB1bmVzY2FwZShzKToKKyAgICAiIiIKKyAgICBDb252ZXJ0IGFsbCBuYW1lZCBhbmQgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyAoZS5nLiAmZ3Q7LCAmIzYyOywKKyAgICAmeDNlOykgaW4gdGhlIHN0cmluZyBzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHVuaWNvZGUgY2hhcmFjdGVycy4KKyAgICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHJ1bGVzIGRlZmluZWQgYnkgdGhlIEhUTUwgNSBzdGFuZGFyZAorICAgIGZvciBib3RoIHZhbGlkIGFuZCBpbnZhbGlkIGNoYXJhY3RlciByZWZlcmVuY2VzLCBhbmQgdGhlIGxpc3Qgb2YKKyAgICBIVE1MIDUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgZGVmaW5lZCBpbiBodG1sLmVudGl0aWVzLmh0bWw1LgorICAgICIiIgorICAgIGlmICcmJyBub3QgaW4gczoKKyAgICAgICAgcmV0dXJuIHMKKyAgICByZXR1cm4gX2NoYXJyZWYuc3ViKF9yZXBsYWNlX2NoYXJyZWYsIHMpCmRpZmYgLS1naXQgYS9MaWIvaHRtbC9wYXJzZXIucHkgYi9MaWIvaHRtbC9wYXJzZXIucHkKaW5kZXggNjNmZTc3NC4uYTY1MGQ1ZSAxMDA2NDQKLS0tIGEvTGliL2h0bWwvcGFyc2VyLnB5CisrKyBiL0xpYi9odG1sL3BhcnNlci5weQpAQCAtOCw5ICs4LDE0IEBACiAjIGFuZCBDREFUQSAoY2hhcmFjdGVyIGRhdGEgLS0gb25seSBlbmQgdGFncyBhcmUgc3BlY2lhbCkuCiAKIAotaW1wb3J0IF9tYXJrdXBiYXNlCiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncworaW1wb3J0IF9tYXJrdXBiYXNlCisKK2Zyb20gaHRtbCBpbXBvcnQgdW5lc2NhcGUKKworCitfX2FsbF9fID0gWydIVE1MUGFyc2VyJ10KIAogIyBSZWd1bGFyIGV4cHJlc3Npb25zIHVzZWQgZm9yIHBhcnNpbmcKIApAQCAtOTIsNiArOTcsOCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKIAorX2RlZmF1bHRfc2VudGluZWwgPSBvYmplY3QoKQorCiBjbGFzcyBIVE1MUGFyc2VyKF9tYXJrdXBiYXNlLlBhcnNlckJhc2UpOgogICAgICIiIkZpbmQgdGFncyBhbmQgb3RoZXIgbWFya3VwIGFuZCBjYWxsIGhhbmRsZXIgZnVuY3Rpb25zLgogCkBAIC0xMDUsMjYgKzExMiwzOSBAQAogICAgIHNlbGYuaGFuZGxlX3N0YXJ0ZW5kdGFnKCk7IGVuZCB0YWdzIGJ5IHNlbGYuaGFuZGxlX2VuZHRhZygpLiAgVGhlCiAgICAgZGF0YSBiZXR3ZWVuIHRhZ3MgaXMgcGFzc2VkIGZyb20gdGhlIHBhcnNlciB0byB0aGUgZGVyaXZlZCBjbGFzcwogICAgIGJ5IGNhbGxpbmcgc2VsZi5oYW5kbGVfZGF0YSgpIHdpdGggdGhlIGRhdGEgYXMgYXJndW1lbnQgKHRoZSBkYXRhCi0gICAgbWF5IGJlIHNwbGl0IHVwIGluIGFyYml0cmFyeSBjaHVua3MpLiAgRW50aXR5IHJlZmVyZW5jZXMgYXJlCi0gICAgcGFzc2VkIGJ5IGNhbGxpbmcgc2VsZi5oYW5kbGVfZW50aXR5cmVmKCkgd2l0aCB0aGUgZW50aXR5Ci0gICAgcmVmZXJlbmNlIGFzIHRoZSBhcmd1bWVudC4gIE51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgYXJlCi0gICAgcGFzc2VkIHRvIHNlbGYuaGFuZGxlX2NoYXJyZWYoKSB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUKLSAgICByZWZlcmVuY2UgYXMgdGhlIGFyZ3VtZW50LgorICAgIG1heSBiZSBzcGxpdCB1cCBpbiBhcmJpdHJhcnkgY2h1bmtzKS4gIElmIGNvbnZlcnRfY2hhcnJlZnMgaXMKKyAgICBUcnVlIHRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBhcmUgY29udmVydGVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlCisgICAgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlciAoYW5kIHNlbGYuaGFuZGxlX2RhdGEoKSBpcyBubworICAgIGxvbmdlciBzcGxpdCBpbiBjaHVua3MpLCBvdGhlcndpc2UgdGhleSBhcmUgcGFzc2VkIGJ5IGNhbGxpbmcKKyAgICBzZWxmLmhhbmRsZV9lbnRpdHlyZWYoKSBvciBzZWxmLmhhbmRsZV9jaGFycmVmKCkgd2l0aCB0aGUgc3RyaW5nCisgICAgY29udGFpbmluZyByZXNwZWN0aXZlbHkgdGhlIG5hbWVkIG9yIG51bWVyaWMgcmVmZXJlbmNlIGFzIHRoZQorICAgIGFyZ3VtZW50LgogICAgICIiIgogCiAgICAgQ0RBVEFfQ09OVEVOVF9FTEVNRU5UUyA9ICgic2NyaXB0IiwgInN0eWxlIikKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJpY3Q9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJpY3Q9X2RlZmF1bHRfc2VudGluZWwsICosCisgICAgICAgICAgICAgICAgIGNvbnZlcnRfY2hhcnJlZnM9X2RlZmF1bHRfc2VudGluZWwpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFuZCByZXNldCB0aGlzIGluc3RhbmNlLgogCisgICAgICAgIElmIGNvbnZlcnRfY2hhcnJlZnMgaXMgVHJ1ZSAoZGVmYXVsdDogRmFsc2UpLCBhbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMKKyAgICAgICAgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KICAgICAgICAgSWYgc3RyaWN0IGlzIHNldCB0byBGYWxzZSAodGhlIGRlZmF1bHQpIHRoZSBwYXJzZXIgd2lsbCBwYXJzZSBpbnZhbGlkCiAgICAgICAgIG1hcmt1cCwgb3RoZXJ3aXNlIGl0IHdpbGwgcmFpc2UgYW4gZXJyb3IuICBOb3RlIHRoYXQgdGhlIHN0cmljdCBtb2RlCi0gICAgICAgIGlzIGRlcHJlY2F0ZWQuCisgICAgICAgIGFuZCBhcmd1bWVudCBhcmUgZGVwcmVjYXRlZC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIHN0cmljdDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSBzdHJpY3QgbW9kZSBpcyBkZXByZWNhdGVkLiIsCisgICAgICAgIGlmIHN0cmljdCBpcyBub3QgX2RlZmF1bHRfc2VudGluZWw6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgc3RyaWN0IGFyZ3VtZW50IGFuZCBtb2RlIGFyZSBkZXByZWNhdGVkLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyaWN0ID0gRmFsc2UgICMgZGVmYXVsdAogICAgICAgICBzZWxmLnN0cmljdCA9IHN0cmljdAorICAgICAgICBpZiBjb252ZXJ0X2NoYXJyZWZzIGlzIF9kZWZhdWx0X3NlbnRpbmVsOgorICAgICAgICAgICAgY29udmVydF9jaGFycmVmcyA9IEZhbHNlICAjIGRlZmF1bHQKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSB2YWx1ZSBvZiBjb252ZXJ0X2NoYXJyZWZzIHdpbGwgYmVjb21lIFRydWUgaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiMy41LiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc2V0IHRoZSB2YWx1ZSBleHBsaWNpdGx5LiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgPSBjb252ZXJ0X2NoYXJyZWZzCiAgICAgICAgIHNlbGYucmVzZXQoKQogCiAgICAgZGVmIHJlc2V0KHNlbGYpOgpAQCAtMTQ5LDYgKzE2OSw4IEBACiAgICAgICAgIHNlbGYuZ29haGVhZCgxKQogCiAgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgJ2Vycm9yJyBtZXRob2QgaXMgZGVwcmVjYXRlZC4iLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgICAgICByYWlzZSBIVE1MUGFyc2VFcnJvcihtZXNzYWdlLCBzZWxmLmdldHBvcygpKQogCiAgICAgX19zdGFydHRhZ190ZXh0ID0gTm9uZQpAQCAtMTczLDE0ICsxOTUsMjUgQEAKICAgICAgICAgaSA9IDAKICAgICAgICAgbiA9IGxlbihyYXdkYXRhKQogICAgICAgICB3aGlsZSBpIDwgbjoKLSAgICAgICAgICAgIG1hdGNoID0gc2VsZi5pbnRlcmVzdGluZy5zZWFyY2gocmF3ZGF0YSwgaSkgIyA8IG9yICYKLSAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgIGogPSBtYXRjaC5zdGFydCgpCisgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgYW5kIG5vdCBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgaiA9IHJhd2RhdGEuZmluZCgnPCcsIGkpCisgICAgICAgICAgICAgICAgaWYgaiA8IDA6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayAgIyB3YWl0IHRpbGwgd2UgZ2V0IGFsbCB0aGUgdGV4dAorICAgICAgICAgICAgICAgICAgICBqID0gbgogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmNkYXRhX2VsZW06Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaiA9IG4KLSAgICAgICAgICAgIGlmIGkgPCBqOiBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTpqXSkKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuaW50ZXJlc3Rpbmcuc2VhcmNoKHJhd2RhdGEsIGkpICAjIDwgb3IgJgorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICBqID0gbWF0Y2guc3RhcnQoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGogPSBuCisgICAgICAgICAgICBpZiBpIDwgajoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgYW5kIG5vdCBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOmpdKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTpqXSkKICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBqKQogICAgICAgICAgICAgaWYgaSA9PSBuOiBicmVhawogICAgICAgICAgICAgc3RhcnRzd2l0aCA9IHJhd2RhdGEuc3RhcnRzd2l0aApAQCAtMjE1LDcgKzI0OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBpICsgMQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgayArPSAxCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmtdKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgYW5kIG5vdCBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHVuZXNjYXBlKHJhd2RhdGFbaTprXSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTprXSkKICAgICAgICAgICAgICAgICBpID0gc2VsZi51cGRhdGVwb3MoaSwgaykKICAgICAgICAgICAgIGVsaWYgc3RhcnRzd2l0aCgiJiMiLCBpKToKICAgICAgICAgICAgICAgICBtYXRjaCA9IGNoYXJyZWYubWF0Y2gocmF3ZGF0YSwgaSkKQEAgLTI2Niw3ICszMDIsMTAgQEAKICAgICAgICAgICAgICAgICBhc3NlcnQgMCwgImludGVyZXN0aW5nLnNlYXJjaCgpIGxpZWQiCiAgICAgICAgICMgZW5kIHdoaWxlCiAgICAgICAgIGlmIGVuZCBhbmQgaSA8IG4gYW5kIG5vdCBzZWxmLmNkYXRhX2VsZW06Ci0gICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTpuXSkKKyAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHVuZXNjYXBlKHJhd2RhdGFbaTpuXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOm5dKQogICAgICAgICAgICAgaSA9IHNlbGYudXBkYXRlcG9zKGksIG4pCiAgICAgICAgIHNlbGYucmF3ZGF0YSA9IHJhd2RhdGFbaTpdCiAKQEAgLTM0OSw3ICszODgsNyBAQAogICAgICAgICAgICAgICAgICBhdHRydmFsdWVbOjFdID09ICciJyA9PSBhdHRydmFsdWVbLTE6XToKICAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSBhdHRydmFsdWVbMTotMV0KICAgICAgICAgICAgIGlmIGF0dHJ2YWx1ZToKLSAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSBzZWxmLnVuZXNjYXBlKGF0dHJ2YWx1ZSkKKyAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSB1bmVzY2FwZShhdHRydmFsdWUpCiAgICAgICAgICAgICBhdHRycy5hcHBlbmQoKGF0dHJuYW1lLmxvd2VyKCksIGF0dHJ2YWx1ZSkpCiAgICAgICAgICAgICBrID0gbS5lbmQoKQogCkBAIC01MDUsMzEgKzU0NCw3IEBACiAKICAgICAjIEludGVybmFsIC0tIGhlbHBlciB0byByZW1vdmUgc3BlY2lhbCBjaGFyYWN0ZXIgcXVvdGluZwogICAgIGRlZiB1bmVzY2FwZShzZWxmLCBzKToKLSAgICAgICAgaWYgJyYnIG5vdCBpbiBzOgotICAgICAgICAgICAgcmV0dXJuIHMKLSAgICAgICAgZGVmIHJlcGxhY2VFbnRpdGllcyhzKToKLSAgICAgICAgICAgIHMgPSBzLmdyb3VwcygpWzBdCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgc1swXSA9PSAiIyI6Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBzWzE6XQotICAgICAgICAgICAgICAgICAgICBpZiBzWzBdIGluIFsneCcsJ1gnXToKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBpbnQoc1sxOl0ucnN0cmlwKCc7JyksIDE2KQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGludChzLnJzdHJpcCgnOycpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hyKGMpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJyYjJyArIHMKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZnJvbSBodG1sLmVudGl0aWVzIGltcG9ydCBodG1sNQotICAgICAgICAgICAgICAgIGlmIHMgaW4gaHRtbDU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sNVtzXQotICAgICAgICAgICAgICAgIGVsaWYgcy5lbmRzd2l0aCgnOycpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnICsgcwotICAgICAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKDIsIGxlbihzKSk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNbOnhdIGluIGh0bWw1OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw1W3NbOnhdXSArIHNbeDpdCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJyArIHMKLQotICAgICAgICByZXR1cm4gcmUuc3ViKHIiJigjP1t4WF0/KD86WzAtOWEtZkEtRl0rO3xcd3sxLDMyfTs/KSkiLAotICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VFbnRpdGllcywgcywgZmxhZ3M9cmUuQVNDSUkpCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1RoZSB1bmVzY2FwZSBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkICcKKyAgICAgICAgICAgICAgICAgICAgICAnaW4gMy41LCB1c2UgaHRtbC51bmVzY2FwZSgpIGluc3RlYWQuJywKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgcmV0dXJuIHVuZXNjYXBlKHMpCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9jbGllbnQucHkgYi9MaWIvaHR0cC9jbGllbnQucHkKaW5kZXggZTA1Yzg0ZC4uZDIwMTNmMiAxMDA2NDQKLS0tIGEvTGliL2h0dHAvY2xpZW50LnB5CisrKyBiL0xpYi9odHRwL2NsaWVudC5weQpAQCAtNzMsNyArNzMsNiBAQAogaW1wb3J0IHNvY2tldAogaW1wb3J0IGNvbGxlY3Rpb25zCiBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJsc3BsaXQKLWltcG9ydCB3YXJuaW5ncwogCiBfX2FsbF9fID0gWyJIVFRQUmVzcG9uc2UiLCAiSFRUUENvbm5lY3Rpb24iLAogICAgICAgICAgICAiSFRUUEV4Y2VwdGlvbiIsICJOb3RDb25uZWN0ZWQiLCAiVW5rbm93blByb3RvY29sIiwKQEAgLTI3MSw4ICsyNzAsNiBAQAogICAgIHJldHVybiBlbWFpbC5wYXJzZXIuUGFyc2VyKF9jbGFzcz1fY2xhc3MpLnBhcnNlc3RyKGhzdHJpbmcpCiAKIAotX3N0cmljdF9zZW50aW5lbCA9IG9iamVjdCgpCi0KIGNsYXNzIEhUVFBSZXNwb25zZShpby5SYXdJT0Jhc2UpOgogCiAgICAgIyBTZWUgUkZDIDI2MTYgc2VjIDE5LjYgYW5kIFJGQyAxOTQ1IHNlYyA2IGZvciBkZXRhaWxzLgpAQCAtMjgyLDcgKzI3OSw3IEBACiAgICAgIyB0ZXh0IGZvbGxvd2luZyBSRkMgMjA0Ny4gIFRoZSBiYXNpYyBzdGF0dXMgbGluZSBwYXJzaW5nIG9ubHkKICAgICAjIGFjY2VwdHMgaXNvLTg4NTktMS4KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSk6CiAgICAgICAgICMgSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgY29udGVudC1sZW5ndGggaGVhZGVyLCB3ZSBuZWVkIHRvCiAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIGNsaWVudCBkb2Vzbid0IHJlYWQgbW9yZSB0aGFuIHRoZQogICAgICAgICAjIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuICBJZiBpdCBkb2VzLCBpdCB3aWxsIGJsb2NrIHVudGlsCkBAIC0yOTIsMTAgKzI4OSw2IEBACiAgICAgICAgICMgY2xpZW50cyB1bmxlc3MgdGhleSBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcuCiAgICAgICAgIHNlbGYuZnAgPSBzb2NrLm1ha2VmaWxlKCJyYiIpCiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGRlYnVnbGV2ZWwKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfc3RyaWN0X3NlbnRpbmVsOgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigidGhlICdzdHJpY3QnIGFyZ3VtZW50IGlzbid0IHN1cHBvcnRlZCBhbnltb3JlOyAiCi0gICAgICAgICAgICAgICAgImh0dHAuY2xpZW50IG5vdyBhbHdheXMgYXNzdW1lcyBIVFRQLzEueCBjb21wbGlhbnQgc2VydmVycy4iLAotICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZi5fbWV0aG9kID0gbWV0aG9kCiAKICAgICAgICAgIyBUaGUgSFRUUFJlc3BvbnNlIG9iamVjdCBpcyByZXR1cm5lZCB2aWEgdXJsbGliLiAgVGhlIGNsaWVudHMKQEAgLTczMiwxMyArNzI1LDE3IEBACiAgICAgZGVmYXVsdF9wb3J0ID0gSFRUUF9QT1JUCiAgICAgYXV0b19vcGVuID0gMQogICAgIGRlYnVnbGV2ZWwgPSAwCisgICAgIyBUQ1AgTWF4aW11bSBTZWdtZW50IFNpemUgKE1TUykgaXMgZGV0ZXJtaW5lZCBieSB0aGUgVENQIHN0YWNrIG9uCisgICAgIyBhIHBlci1jb25uZWN0aW9uIGJhc2lzLiAgVGhlcmUgaXMgbm8gc2ltcGxlIGFuZCBlZmZpY2llbnQKKyAgICAjIHBsYXRmb3JtIGluZGVwZW5kZW50IG1lY2hhbmlzbSBmb3IgZGV0ZXJtaW5pbmcgdGhlIE1TUywgc28KKyAgICAjIGluc3RlYWQgYSByZWFzb25hYmxlIGVzdGltYXRlIGlzIGNob3Nlbi4gIFRoZSBnZXRzb2Nrb3B0KCkKKyAgICAjIGludGVyZmFjZSB1c2luZyB0aGUgVENQX01BWFNFRyBwYXJhbWV0ZXIgbWF5IGJlIGEgc3VpdGFibGUKKyAgICAjIGFwcHJvYWNoIG9uIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMuIEEgdmFsdWUgb2YgMTZLaUIgaXMgY2hvc2VuCisgICAgIyBhcyBhIHJlYXNvbmFibGUgZXN0aW1hdGUgb2YgdGhlIG1heGltdW0gTVNTLgorICAgIG1zcyA9IDE2Mzg0CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBzdHJpY3Q9X3N0cmljdF9zZW50aW5lbCwKLSAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgotICAgICAgICBpZiBzdHJpY3QgaXMgbm90IF9zdHJpY3Rfc2VudGluZWw6Ci0gICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ0aGUgJ3N0cmljdCcgYXJndW1lbnQgaXNuJ3Qgc3VwcG9ydGVkIGFueW1vcmU7ICIKLSAgICAgICAgICAgICAgICAiaHR0cC5jbGllbnQgbm93IGFsd2F5cyBhc3N1bWVzIEhUVFAvMS54IGNvbXBsaWFudCBzZXJ2ZXJzLiIsCi0gICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKToKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLnNvdXJjZV9hZGRyZXNzID0gc291cmNlX2FkZHJlc3MKICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQpAQCAtNzUwLDE0ICs3NDcsMzAgQEAKICAgICAgICAgc2VsZi5fdHVubmVsX3BvcnQgPSBOb25lCiAgICAgICAgIHNlbGYuX3R1bm5lbF9oZWFkZXJzID0ge30KIAotICAgICAgICBzZWxmLl9zZXRfaG9zdHBvcnQoaG9zdCwgcG9ydCkKKyAgICAgICAgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSA9IHNlbGYuX2dldF9ob3N0cG9ydChob3N0LCBwb3J0KQorCisgICAgICAgICMgVGhpcyBpcyBzdG9yZWQgYXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgdG8gYWxsb3cgdW5pdAorICAgICAgICAjIHRlc3RzIHRvIHJlcGxhY2UgaXQgd2l0aCBhIHN1aXRhYmxlIG1vY2t1cAorICAgICAgICBzZWxmLl9jcmVhdGVfY29ubmVjdGlvbiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbgogCiAgICAgZGVmIHNldF90dW5uZWwoc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpOgotICAgICAgICAiIiIgU2V0cyB1cCB0aGUgaG9zdCBhbmQgdGhlIHBvcnQgZm9yIHRoZSBIVFRQIENPTk5FQ1QgVHVubmVsbGluZy4KKyAgICAgICAgIiIiU2V0IHVwIGhvc3QgYW5kIHBvcnQgZm9yIEhUVFAgQ09OTkVDVCB0dW5uZWxsaW5nLgogCi0gICAgICAgIFRoZSBoZWFkZXJzIGFyZ3VtZW50IHNob3VsZCBiZSBhIG1hcHBpbmcgb2YgZXh0cmEgSFRUUCBoZWFkZXJzCi0gICAgICAgIHRvIHNlbmQgd2l0aCB0aGUgQ09OTkVDVCByZXF1ZXN0LgorICAgICAgICBJbiBhIGNvbm5lY3Rpb24gdGhhdCB1c2VzIEhUVFAgQ09OTkVDVCB0dW5uZWxpbmcsIHRoZSBob3N0IHBhc3NlZCB0byB0aGUKKyAgICAgICAgY29uc3RydWN0b3IgaXMgdXNlZCBhcyBhIHByb3h5IHNlcnZlciB0aGF0IHJlbGF5cyBhbGwgY29tbXVuaWNhdGlvbiB0bworICAgICAgICB0aGUgZW5kcG9pbnQgcGFzc2VkIHRvIGBzZXRfdHVubmVsYC4gVGhpcyBkb25lIGJ5IHNlbmRpbmcgYW4gSFRUUAorICAgICAgICBDT05ORUNUIHJlcXVlc3QgdG8gdGhlIHByb3h5IHNlcnZlciB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLgorCisgICAgICAgIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgSFRNTCBjb25uZWN0aW9uIGhhcyBiZWVuCisgICAgICAgIGVzdGFibGlzaGVkLgorCisgICAgICAgIFRoZSBoZWFkZXJzIGFyZ3VtZW50IHNob3VsZCBiZSBhIG1hcHBpbmcgb2YgZXh0cmEgSFRUUCBoZWFkZXJzIHRvIHNlbmQKKyAgICAgICAgd2l0aCB0aGUgQ09OTkVDVCByZXF1ZXN0LgogICAgICAgICAiIiIKKworICAgICAgICBpZiBzZWxmLnNvY2s6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IHNldCB1cCB0dW5uZWwgZm9yIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24iKQorCiAgICAgICAgIHNlbGYuX3R1bm5lbF9ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLl90dW5uZWxfcG9ydCA9IHBvcnQKICAgICAgICAgaWYgaGVhZGVyczoKQEAgLTc2NSw3ICs3NzgsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMuY2xlYXIoKQogCi0gICAgZGVmIF9zZXRfaG9zdHBvcnQoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgZGVmIF9nZXRfaG9zdHBvcnQoc2VsZiwgaG9zdCwgcG9ydCk6CiAgICAgICAgIGlmIHBvcnQgaXMgTm9uZToKICAgICAgICAgICAgIGkgPSBob3N0LnJmaW5kKCc6JykKICAgICAgICAgICAgIGogPSBob3N0LnJmaW5kKCddJykgICAgICAgICAjIGlwdjYgYWRkcmVzc2VzIGhhdmUgWy4uLl0KQEAgLTc4MiwxNSArNzk1LDE2IEBACiAgICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYuZGVmYXVsdF9wb3J0CiAgICAgICAgICAgICBpZiBob3N0IGFuZCBob3N0WzBdID09ICdbJyBhbmQgaG9zdFstMV0gPT0gJ10nOgogICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0WzE6LTFdCi0gICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorCisgICAgICAgIHJldHVybiAoaG9zdCwgcG9ydCkKIAogICAgIGRlZiBzZXRfZGVidWdsZXZlbChzZWxmLCBsZXZlbCk6CiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGxldmVsCiAKICAgICBkZWYgX3R1bm5lbChzZWxmKToKLSAgICAgICAgc2VsZi5fc2V0X2hvc3Rwb3J0KHNlbGYuX3R1bm5lbF9ob3N0LCBzZWxmLl90dW5uZWxfcG9ydCkKLSAgICAgICAgY29ubmVjdF9zdHIgPSAiQ09OTkVDVCAlczolZCBIVFRQLzEuMFxyXG4iICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorICAgICAgICAoaG9zdCwgcG9ydCkgPSBzZWxmLl9nZXRfaG9zdHBvcnQoc2VsZi5fdHVubmVsX2hvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90dW5uZWxfcG9ydCkKKyAgICAgICAgY29ubmVjdF9zdHIgPSAiQ09OTkVDVCAlczolZCBIVFRQLzEuMFxyXG4iICUgKGhvc3QsIHBvcnQpCiAgICAgICAgIGNvbm5lY3RfYnl0ZXMgPSBjb25uZWN0X3N0ci5lbmNvZGUoImFzY2lpIikKICAgICAgICAgc2VsZi5zZW5kKGNvbm5lY3RfYnl0ZXMpCiAgICAgICAgIGZvciBoZWFkZXIsIHZhbHVlIGluIHNlbGYuX3R1bm5lbF9oZWFkZXJzLml0ZW1zKCk6CkBAIC04MDQsOCArODE4LDggQEAKIAogICAgICAgICBpZiBjb2RlICE9IDIwMDoKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJUdW5uZWwgY29ubmVjdGlvbiBmYWlsZWQ6ICVkICVzIiAlIChjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0cmlwKCkpKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiVHVubmVsIGNvbm5lY3Rpb24gZmFpbGVkOiAlZCAlcyIgJSAoY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaXAoKSkpCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBsaW5lID0gcmVzcG9uc2UuZnAucmVhZGxpbmUoX01BWExJTkUgKyAxKQogICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gX01BWExJTkU6CkBAIC04MTgsOCArODMyLDkgQEAKIAogICAgIGRlZiBjb25uZWN0KHNlbGYpOgogICAgICAgICAiIiJDb25uZWN0IHRvIHRoZSBob3N0IGFuZCBwb3J0IHNwZWNpZmllZCBpbiBfX2luaXRfXy4iIiIKLSAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChzZWxmLmhvc3Qsc2VsZi5wb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCwgc2VsZi5zb3VyY2VfYWRkcmVzcykKKyAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5fY3JlYXRlX2Nvbm5lY3Rpb24oKHNlbGYuaG9zdCxzZWxmLnBvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQsIHNlbGYuc291cmNlX2FkZHJlc3MpCisKICAgICAgICAgaWYgc2VsZi5fdHVubmVsX2hvc3Q6CiAgICAgICAgICAgICBzZWxmLl90dW5uZWwoKQogCkBAIC04OTksOCArOTE0LDExIEBACiAgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbOl0KICAgICAgICAgIyBJZiBtc2cgYW5kIG1lc3NhZ2VfYm9keSBhcmUgc2VudCBpbiBhIHNpbmdsZSBzZW5kKCkgY2FsbCwKICAgICAgICAgIyBpdCB3aWxsIGF2b2lkIHBlcmZvcm1hbmNlIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgaW50ZXJhY3Rpb24KLSAgICAgICAgIyBiZXR3ZWVuIGRlbGF5ZWQgYWNrIGFuZCB0aGUgTmFnbGUgYWxnb3JpdGhtLgotICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2VfYm9keSwgYnl0ZXMpOgorICAgICAgICAjIGJldHdlZW4gZGVsYXllZCBhY2sgYW5kIHRoZSBOYWdsZSBhbGdvcml0aG0uIEhvd2V2ZXIsCisgICAgICAgICMgdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgZ2FpbiBpZiB0aGUgbWVzc2FnZSBpcyBsYXJnZXIKKyAgICAgICAgIyB0aGFuIE1TUyAoYW5kIHRoZXJlIGlzIGEgbWVtb3J5IHBlbmFsdHkgZm9yIHRoZSBtZXNzYWdlCisgICAgICAgICMgY29weSkuCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZV9ib2R5LCBieXRlcykgYW5kIGxlbihtZXNzYWdlX2JvZHkpIDwgc2VsZi5tc3M6CiAgICAgICAgICAgICBtc2cgKz0gbWVzc2FnZV9ib2R5CiAgICAgICAgICAgICBtZXNzYWdlX2JvZHkgPSBOb25lCiAgICAgICAgIHNlbGYuc2VuZChtc2cpCkBAIC05ODUsMjIgKzEwMDMsMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGxvY19lbmMgPSBuZXRsb2MuZW5jb2RlKCJpZG5hIikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5wdXRoZWFkZXIoJ0hvc3QnLCBuZXRsb2NfZW5jKQogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHNlbGYuX3R1bm5lbF9ob3N0CisgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gc2VsZi5fdHVubmVsX3BvcnQKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QgPSBzZWxmLmhvc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBzZWxmLnBvcnQKKwogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBob3N0X2VuYyA9IHNlbGYuaG9zdC5lbmNvZGUoImFzY2lpIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gaG9zdC5lbmNvZGUoImFzY2lpIikKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gc2VsZi5ob3N0LmVuY29kZSgiaWRuYSIpCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0X2VuYyA9IGhvc3QuZW5jb2RlKCJpZG5hIikKIAogICAgICAgICAgICAgICAgICAgICAjIEFzIHBlciBSRkMgMjczLCBJUHY2IGFkZHJlc3Mgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aCBbXQogICAgICAgICAgICAgICAgICAgICAjIHdoZW4gdXNlZCBhcyBIb3N0IGhlYWRlcgogCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaG9zdC5maW5kKCc6JykgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgaWYgaG9zdC5maW5kKCc6JykgPj0gMDoKICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gYidbJyArIGhvc3RfZW5jICsgYiddJwogCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucG9ydCA9PSBzZWxmLmRlZmF1bHRfcG9ydDoKKyAgICAgICAgICAgICAgICAgICAgaWYgcG9ydCA9PSBzZWxmLmRlZmF1bHRfcG9ydDoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHV0aGVhZGVyKCdIb3N0JywgaG9zdF9lbmMpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBob3N0X2VuYyA9IGhvc3RfZW5jLmRlY29kZSgiYXNjaWkiKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wdXRoZWFkZXIoJ0hvc3QnLCAiJXM6JXMiICUgKGhvc3RfZW5jLCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wdXRoZWFkZXIoJ0hvc3QnLCAiJXM6JXMiICUgKGhvc3RfZW5jLCBwb3J0KSkKIAogICAgICAgICAgICAgIyBub3RlOiB3ZSBhcmUgYXNzdW1pbmcgdGhhdCBjbGllbnRzIHdpbGwgbm90IGF0dGVtcHQgdG8gc2V0IHRoZXNlCiAgICAgICAgICAgICAjICAgICAgIGhlYWRlcnMgc2luY2UgKnRoaXMqIGxpYnJhcnkgbXVzdCBkZWFsIHdpdGggdGhlCkBAIC0xMTcwLDE2ICsxMTk1LDE1IEBACiAgICAgICAgICMgWFhYIFNob3VsZCBrZXlfZmlsZSBhbmQgY2VydF9maWxlIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGNvbnRleHQ/CiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwga2V5X2ZpbGU9Tm9uZSwgY2VydF9maWxlPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9X3N0cmljdF9zZW50aW5lbCwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCi0gICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lLCAqLCBjb250ZXh0PU5vbmUsIGNoZWNrX2hvc3RuYW1lPU5vbmUpOgotICAgICAgICAgICAgc3VwZXIoSFRUUFNDb25uZWN0aW9uLCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0LCBzdHJpY3QsIHRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICAgICAgc3VwZXIoSFRUUFNDb25uZWN0aW9uLCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0LCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcykKICAgICAgICAgICAgIHNlbGYua2V5X2ZpbGUgPSBrZXlfZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0X2ZpbGUgPSBjZXJ0X2ZpbGUKICAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAjIFNvbWUgcmVhc29uYWJsZSBkZWZhdWx0cwotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICAgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQogICAgICAgICAgICAgd2lsbF92ZXJpZnkgPSBjb250ZXh0LnZlcmlmeV9tb2RlICE9IHNzbC5DRVJUX05PTkUKICAgICAgICAgICAgIGlmIGNoZWNrX2hvc3RuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWUgPSB3aWxsX3ZlcmlmeQpAQCAtMTE5NCwyMyArMTIxOCwyMyBAQAogICAgICAgICBkZWYgY29ubmVjdChzZWxmKToKICAgICAgICAgICAgICJDb25uZWN0IHRvIGEgaG9zdCBvbiBhIGdpdmVuIChTU0wpIHBvcnQuIgogCi0gICAgICAgICAgICBzb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChzZWxmLmhvc3QsIHNlbGYucG9ydCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCwgc2VsZi5zb3VyY2VfYWRkcmVzcykKKyAgICAgICAgICAgIHN1cGVyKCkuY29ubmVjdCgpCiAKICAgICAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKLSAgICAgICAgICAgICAgICBzZWxmLl90dW5uZWwoKQorICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuX3R1bm5lbF9ob3N0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdAorICAgICAgICAgICAgc25pX2hvc3RuYW1lID0gc2VydmVyX2hvc3RuYW1lIGlmIHNzbC5IQVNfU05JIGVsc2UgTm9uZQogCi0gICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCi0gICAgICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY2hlY2tfaG9zdG5hbWU6Ci0gICAgICAgICAgICAgICAgICAgIHNzbC5tYXRjaF9ob3N0bmFtZShzZWxmLnNvY2suZ2V0cGVlcmNlcnQoKSwgc2VsZi5ob3N0KQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNuaV9ob3N0bmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZWxmLl9jaGVja19ob3N0bmFtZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNzbC5tYXRjaF9ob3N0bmFtZShzZWxmLnNvY2suZ2V0cGVlcmNlcnQoKSwgc2VydmVyX2hvc3RuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgX19hbGxfXy5hcHBlbmQoIkhUVFBTQ29ubmVjdGlvbiIpCiAKZGlmZiAtLWdpdCBhL0xpYi9odHRwL2Nvb2tpZWphci5weSBiL0xpYi9odHRwL2Nvb2tpZWphci5weQppbmRleCA5ZmNkNGM2Li4yZGRkNTIzIDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jb29raWVqYXIucHkKKysrIGIvTGliL2h0dHAvY29va2llamFyLnB5CkBAIC0xMTkzLDggKzExOTMsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbWFwcGluZyA9IFRydWUKLSAgICAgICAgICAgIGZvciBzdWJvYmogaW4gZGVlcHZhbHVlcyhvYmopOgotICAgICAgICAgICAgICAgIHlpZWxkIHN1Ym9iagorICAgICAgICAgICAgeWllbGQgZnJvbSBkZWVwdmFsdWVzKG9iaikKICAgICAgICAgaWYgbm90IG1hcHBpbmc6CiAgICAgICAgICAgICB5aWVsZCBvYmoKIApAQCAtMTcyMywxNiArMTcyMiwxNiBAQAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgciA9IFtdCiAgICAgICAgIGZvciBjb29raWUgaW4gc2VsZjogci5hcHBlbmQocmVwcihjb29raWUpKQotICAgICAgICByZXR1cm4gIjwlc1slc10+IiAlIChzZWxmLl9fY2xhc3NfXywgIiwgIi5qb2luKHIpKQorICAgICAgICByZXR1cm4gIjwlc1slc10+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgIiwgIi5qb2luKHIpKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHIgPSBbXQogICAgICAgICBmb3IgY29va2llIGluIHNlbGY6IHIuYXBwZW5kKHN0cihjb29raWUpKQotICAgICAgICByZXR1cm4gIjwlc1slc10+IiAlIChzZWxmLl9fY2xhc3NfXywgIiwgIi5qb2luKHIpKQorICAgICAgICByZXR1cm4gIjwlc1slc10+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgIiwgIi5qb2luKHIpKQogCiAKLSMgZGVyaXZlcyBmcm9tIElPRXJyb3IgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNC4wCi1jbGFzcyBMb2FkRXJyb3IoSU9FcnJvcik6IHBhc3MKKyMgZGVyaXZlcyBmcm9tIE9TRXJyb3IgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNC4wCitjbGFzcyBMb2FkRXJyb3IoT1NFcnJvcik6IHBhc3MKIAogY2xhc3MgRmlsZUNvb2tpZUphcihDb29raWVKYXIpOgogICAgICIiIkNvb2tpZUphciB0aGF0IGNhbiBiZSBsb2FkZWQgZnJvbSBhbmQgc2F2ZWQgdG8gYSBmaWxlLiIiIgpAQCAtMTc2MiwxNyArMTc2MSwxNCBAQAogICAgICAgICAgICAgaWYgc2VsZi5maWxlbmFtZSBpcyBub3QgTm9uZTogZmlsZW5hbWUgPSBzZWxmLmZpbGVuYW1lCiAgICAgICAgICAgICBlbHNlOiByYWlzZSBWYWx1ZUVycm9yKE1JU1NJTkdfRklMRU5BTUVfVEVYVCkKIAotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLl9yZWFsbHlfbG9hZChmLCBmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgcmV2ZXJ0KHNlbGYsIGZpbGVuYW1lPU5vbmUsCiAgICAgICAgICAgICAgICBpZ25vcmVfZGlzY2FyZD1GYWxzZSwgaWdub3JlX2V4cGlyZXM9RmFsc2UpOgogICAgICAgICAiIiJDbGVhciBhbGwgY29va2llcyBhbmQgcmVsb2FkIGNvb2tpZXMgZnJvbSBhIHNhdmVkIGZpbGUuCiAKLSAgICAgICAgUmFpc2VzIExvYWRFcnJvciAob3IgSU9FcnJvcikgaWYgcmV2ZXJzaW9uIGlzIG5vdCBzdWNjZXNzZnVsOyB0aGUKKyAgICAgICAgUmFpc2VzIExvYWRFcnJvciAob3IgT1NFcnJvcikgaWYgcmV2ZXJzaW9uIGlzIG5vdCBzdWNjZXNzZnVsOyB0aGUKICAgICAgICAgb2JqZWN0J3Mgc3RhdGUgd2lsbCBub3QgYmUgYWx0ZXJlZCBpZiB0aGlzIGhhcHBlbnMuCiAKICAgICAgICAgIiIiCkBAIC0xNzg3LDcgKzE3ODMsNyBAQAogICAgICAgICAgICAgc2VsZi5fY29va2llcyA9IHt9CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2FkKGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpCi0gICAgICAgICAgICBleGNlcHQgKExvYWRFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLl9jb29raWVzID0gb2xkX3N0YXRlCiAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtMTg1NywxNSArMTg1MywxMiBAQAogICAgICAgICAgICAgaWYgc2VsZi5maWxlbmFtZSBpcyBub3QgTm9uZTogZmlsZW5hbWUgPSBzZWxmLmZpbGVuYW1lCiAgICAgICAgICAgICBlbHNlOiByYWlzZSBWYWx1ZUVycm9yKE1JU1NJTkdfRklMRU5BTUVfVEVYVCkKIAotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgogICAgICAgICAgICAgIyBUaGVyZSByZWFsbHkgaXNuJ3QgYW4gTFdQIENvb2tpZXMgMi4wIGZvcm1hdCwgYnV0IHRoaXMgaW5kaWNhdGVzCiAgICAgICAgICAgICAjIHRoYXQgdGhlcmUgaXMgZXh0cmEgaW5mb3JtYXRpb24gaW4gaGVyZSAoZG9tYWluX2RvdCBhbmQKICAgICAgICAgICAgICMgcG9ydF9zcGVjKSB3aGlsZSBzdGlsbCBiZWluZyBjb21wYXRpYmxlIHdpdGggbGlid3d3LXBlcmwsIEkgaG9wZS4KICAgICAgICAgICAgIGYud3JpdGUoIiNMV1AtQ29va2llcy0yLjBcbiIpCiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXNfbHdwX3N0cihpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgX3JlYWxseV9sb2FkKHNlbGYsIGYsIGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpOgogICAgICAgICBtYWdpYyA9IGYucmVhZGxpbmUoKQpAQCAtMTkzOCw4ICsxOTMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlnbm9yZV9leHBpcmVzIGFuZCBjLmlzX2V4cGlyZWQobm93KToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0X2Nvb2tpZShjKQotCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBfd2Fybl91bmhhbmRsZWRfZXhjZXB0aW9uKCkKQEAgLTIwNDUsNyArMjAzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgc2VsZi5zZXRfY29va2llKGMpCiAKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIF93YXJuX3VuaGFuZGxlZF9leGNlcHRpb24oKQpAQCAtMjA1Nyw4ICsyMDQ5LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5oZWFkZXIpCiAgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgZm9yIGNvb2tpZSBpbiBzZWxmOgpAQCAtMjA4Nyw1ICsyMDc4LDMgQEAKICAgICAgICAgICAgICAgICAgICAgIlx0Ii5qb2luKFtjb29raWUuZG9tYWluLCBpbml0aWFsX2RvdCwgY29va2llLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJlLCBleHBpcmVzLCBuYW1lLCB2YWx1ZV0pKwogICAgICAgICAgICAgICAgICAgICAiXG4iKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9zZXJ2ZXIucHkgYi9MaWIvaHR0cC9zZXJ2ZXIucHkKaW5kZXggN2QzYjUwNi4uZjkxNmZkZCAxMDA2NDQKLS0tIGEvTGliL2h0dHAvc2VydmVyLnB5CisrKyBiL0xpYi9odHRwL3NlcnZlci5weQpAQCAtODUsOCArODUsNiBAQAogX19hbGxfXyA9IFsiSFRUUFNlcnZlciIsICJCYXNlSFRUUFJlcXVlc3RIYW5kbGVyIl0KIAogaW1wb3J0IGh0bWwKLWltcG9ydCBlbWFpbC5tZXNzYWdlCi1pbXBvcnQgZW1haWwucGFyc2VyCiBpbXBvcnQgaHR0cC5jbGllbnQKIGltcG9ydCBpbwogaW1wb3J0IG1pbWV0eXBlcwpAQCAtNDAxLDEyICszOTksMTcgQEAKICAgICAgICAgd2hpbGUgbm90IHNlbGYuY2xvc2VfY29ubmVjdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX29uZV9yZXF1ZXN0KCkKIAotICAgIGRlZiBzZW5kX2Vycm9yKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSk6CisgICAgZGVmIHNlbmRfZXJyb3Ioc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lLCBleHBsYWluPU5vbmUpOgogICAgICAgICAiIiJTZW5kIGFuZCBsb2cgYW4gZXJyb3IgcmVwbHkuCiAKLSAgICAgICAgQXJndW1lbnRzIGFyZSB0aGUgZXJyb3IgY29kZSwgYW5kIGEgZGV0YWlsZWQgbWVzc2FnZS4KLSAgICAgICAgVGhlIGRldGFpbGVkIG1lc3NhZ2UgZGVmYXVsdHMgdG8gdGhlIHNob3J0IGVudHJ5IG1hdGNoaW5nIHRoZQotICAgICAgICByZXNwb25zZSBjb2RlLgorICAgICAgICBBcmd1bWVudHMgYXJlCisgICAgICAgICogY29kZTogICAgYW4gSFRUUCBlcnJvciBjb2RlCisgICAgICAgICAgICAgICAgICAgMyBkaWdpdHMKKyAgICAgICAgKiBtZXNzYWdlOiBhIHNpbXBsZSBvcHRpb25hbCAxIGxpbmUgcmVhc29uIHBocmFzZS4KKyAgICAgICAgICAgICAgICAgICAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvICV4ODAtRkYgKQorICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHNob3J0IGVudHJ5IG1hdGNoaW5nIHRoZSByZXNwb25zZSBjb2RlCisgICAgICAgICogZXhwbGFpbjogYSBkZXRhaWxlZCBtZXNzYWdlIGRlZmF1bHRzIHRvIHRoZSBsb25nIGVudHJ5CisgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgdGhlIHJlc3BvbnNlIGNvZGUuCiAKICAgICAgICAgVGhpcyBzZW5kcyBhbiBlcnJvciByZXNwb25zZSAoc28gaXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueQogICAgICAgICBvdXRwdXQgaGFzIGJlZW4gZ2VuZXJhdGVkKSwgbG9ncyB0aGUgZXJyb3IsIGFuZCBmaW5hbGx5IHNlbmRzCkBAIC00MjAsMTcgKzQyMywyMCBAQAogICAgICAgICAgICAgc2hvcnRtc2csIGxvbmdtc2cgPSAnPz8/JywgJz8/PycKICAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgogICAgICAgICAgICAgbWVzc2FnZSA9IHNob3J0bXNnCi0gICAgICAgIGV4cGxhaW4gPSBsb25nbXNnCisgICAgICAgIGlmIGV4cGxhaW4gaXMgTm9uZToKKyAgICAgICAgICAgIGV4cGxhaW4gPSBsb25nbXNnCiAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJjb2RlICVkLCBtZXNzYWdlICVzIiwgY29kZSwgbWVzc2FnZSkKICAgICAgICAgIyB1c2luZyBfcXVvdGVfaHRtbCB0byBwcmV2ZW50IENyb3NzIFNpdGUgU2NyaXB0aW5nIGF0dGFja3MgKHNlZSBidWcgIzExMDAyMDEpCiAgICAgICAgIGNvbnRlbnQgPSAoc2VsZi5lcnJvcl9tZXNzYWdlX2Zvcm1hdCAlCi0gICAgICAgICAgICAgICAgICAgeydjb2RlJzogY29kZSwgJ21lc3NhZ2UnOiBfcXVvdGVfaHRtbChtZXNzYWdlKSwgJ2V4cGxhaW4nOiBleHBsYWlufSkKKyAgICAgICAgICAgICAgICAgICB7J2NvZGUnOiBjb2RlLCAnbWVzc2FnZSc6IF9xdW90ZV9odG1sKG1lc3NhZ2UpLCAnZXhwbGFpbic6IF9xdW90ZV9odG1sKGV4cGxhaW4pfSkKKyAgICAgICAgYm9keSA9IGNvbnRlbnQuZW5jb2RlKCdVVEYtOCcsICdyZXBsYWNlJykKICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKGNvZGUsIG1lc3NhZ2UpCiAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtVHlwZSIsIHNlbGYuZXJyb3JfY29udGVudF90eXBlKQogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb25uZWN0aW9uJywgJ2Nsb3NlJykKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1MZW5ndGgnLCBpbnQobGVuKGJvZHkpKSkKICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgIGlmIHNlbGYuY29tbWFuZCAhPSAnSEVBRCcgYW5kIGNvZGUgPj0gMjAwIGFuZCBjb2RlIG5vdCBpbiAoMjA0LCAzMDQpOgotICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KQogCiAgICAgZGVmIHNlbmRfcmVzcG9uc2Uoc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lKToKICAgICAgICAgIiIiQWRkIHRoZSByZXNwb25zZSBoZWFkZXIgdG8gdGhlIGhlYWRlcnMgYnVmZmVyIGFuZCBsb2cgdGhlCkBAIC03MTEsNyArNzE3LDcgQEAKICAgICAgICAgY3R5cGUgPSBzZWxmLmd1ZXNzX3R5cGUocGF0aCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIkZpbGUgbm90IGZvdW5kIikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHRyeToKQEAgLTczNiwxMiArNzQyLDE3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaXN0ID0gb3MubGlzdGRpcihwYXRoKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIk5vIHBlcm1pc3Npb24gdG8gbGlzdCBkaXJlY3RvcnkiKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgbGlzdC5zb3J0KGtleT1sYW1iZGEgYTogYS5sb3dlcigpKQogICAgICAgICByID0gW10KLSAgICAgICAgZGlzcGxheXBhdGggPSBodG1sLmVzY2FwZSh1cmxsaWIucGFyc2UudW5xdW90ZShzZWxmLnBhdGgpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkaXNwbGF5cGF0aCA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdzdXJyb2dhdGVwYXNzJykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIGRpc3BsYXlwYXRoID0gdXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkKKyAgICAgICAgZGlzcGxheXBhdGggPSBodG1sLmVzY2FwZShkaXNwbGF5cGF0aCkKICAgICAgICAgZW5jID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCiAgICAgICAgIHRpdGxlID0gJ0RpcmVjdG9yeSBsaXN0aW5nIGZvciAlcycgJSBkaXNwbGF5cGF0aAogICAgICAgICByLmFwcGVuZCgnPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAnCkBAIC03NjMsOSArNzc0LDExIEBACiAgICAgICAgICAgICAgICAgZGlzcGxheW5hbWUgPSBuYW1lICsgIkAiCiAgICAgICAgICAgICAgICAgIyBOb3RlOiBhIGxpbmsgdG8gYSBkaXJlY3RvcnkgZGlzcGxheXMgd2l0aCBAIGFuZCBsaW5rcyB3aXRoIC8KICAgICAgICAgICAgIHIuYXBwZW5kKCc8bGk+PGEgaHJlZj0iJXMiPiVzPC9hPjwvbGk+JwotICAgICAgICAgICAgICAgICAgICAlICh1cmxsaWIucGFyc2UucXVvdGUobGlua25hbWUpLCBodG1sLmVzY2FwZShkaXNwbGF5bmFtZSkpKQorICAgICAgICAgICAgICAgICAgICAlICh1cmxsaWIucGFyc2UucXVvdGUobGlua25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9J3N1cnJvZ2F0ZXBhc3MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5lc2NhcGUoZGlzcGxheW5hbWUpKSkKICAgICAgICAgci5hcHBlbmQoJzwvdWw+XG48aHI+XG48L2JvZHk+XG48L2h0bWw+XG4nKQotICAgICAgICBlbmNvZGVkID0gJ1xuJy5qb2luKHIpLmVuY29kZShlbmMpCisgICAgICAgIGVuY29kZWQgPSAnXG4nLmpvaW4ocikuZW5jb2RlKGVuYywgJ3N1cnJvZ2F0ZWVzY2FwZScpCiAgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKICAgICAgICAgZi53cml0ZShlbmNvZGVkKQogICAgICAgICBmLnNlZWsoMCkKQEAgLTc4OCw3ICs4MDEsMTEgQEAKICAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQoJyMnLDEpWzBdCiAgICAgICAgICMgRG9uJ3QgZm9yZ2V0IGV4cGxpY2l0IHRyYWlsaW5nIHNsYXNoIHdoZW4gbm9ybWFsaXppbmcuIElzc3VlMTczMjQKICAgICAgICAgdHJhaWxpbmdfc2xhc2ggPSBwYXRoLnJzdHJpcCgpLmVuZHN3aXRoKCcvJykKLSAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5ub3JtcGF0aCh1cmxsaWIucGFyc2UudW5xdW90ZShwYXRoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0aCA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHBhdGgsIGVycm9ycz0nc3Vycm9nYXRlcGFzcycpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICBwYXRoID0gdXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkKKyAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5ub3JtcGF0aChwYXRoKQogICAgICAgICB3b3JkcyA9IHBhdGguc3BsaXQoJy8nKQogICAgICAgICB3b3JkcyA9IGZpbHRlcihOb25lLCB3b3JkcykKICAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCkBAIC0xMTMwLDcgKzExNDcsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYucmZpbGUuZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICAgb3MuZHVwMihzZWxmLndmaWxlLmZpbGVubygpLCAxKQpAQCAtMTE4MywxNSArMTIwMCwxNSBAQAogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNHSSBzY3JpcHQgZXhpdGVkIE9LIikKIAogCi1kZWYgdGVzdChIYW5kbGVyQ2xhc3MgPSBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgU2VydmVyQ2xhc3MgPSBIVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDApOgorZGVmIHRlc3QoSGFuZGxlckNsYXNzPUJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICBTZXJ2ZXJDbGFzcz1IVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDAsIGJpbmQ9IiIpOgogICAgICIiIlRlc3QgdGhlIEhUVFAgcmVxdWVzdCBoYW5kbGVyIGNsYXNzLgogCiAgICAgVGhpcyBydW5zIGFuIEhUVFAgc2VydmVyIG9uIHBvcnQgODAwMCAob3IgdGhlIGZpcnN0IGNvbW1hbmQgbGluZQogICAgIGFyZ3VtZW50KS4KIAogICAgICIiIgotICAgIHNlcnZlcl9hZGRyZXNzID0gKCcnLCBwb3J0KQorICAgIHNlcnZlcl9hZGRyZXNzID0gKGJpbmQsIHBvcnQpCiAKICAgICBIYW5kbGVyQ2xhc3MucHJvdG9jb2xfdmVyc2lvbiA9IHByb3RvY29sCiAgICAgaHR0cGQgPSBTZXJ2ZXJDbGFzcyhzZXJ2ZXJfYWRkcmVzcywgSGFuZGxlckNsYXNzKQpAQCAtMTIwOSwxMiArMTIyNiwxNiBAQAogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNnaScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBhcyBDR0kgU2VydmVyJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJpbmQnLCAnLWInLCBkZWZhdWx0PScnLCBtZXRhdmFyPSdBRERSRVNTJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZnkgYWx0ZXJuYXRlIGJpbmQgYWRkcmVzcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbZGVmYXVsdDogYWxsIGludGVyZmFjZXNdJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3J0JywgYWN0aW9uPSdzdG9yZScsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTgwMDAsIHR5cGU9aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9Jz8nLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmeSBhbHRlcm5hdGUgcG9ydCBbZGVmYXVsdDogODAwMF0nKQogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICAgaWYgYXJncy5jZ2k6Ci0gICAgICAgIHRlc3QoSGFuZGxlckNsYXNzPUNHSUhUVFBSZXF1ZXN0SGFuZGxlciwgcG9ydD1hcmdzLnBvcnQpCisgICAgICAgIGhhbmRsZXJfY2xhc3MgPSBDR0lIVFRQUmVxdWVzdEhhbmRsZXIKICAgICBlbHNlOgotICAgICAgICB0ZXN0KEhhbmRsZXJDbGFzcz1TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIsIHBvcnQ9YXJncy5wb3J0KQorICAgICAgICBoYW5kbGVyX2NsYXNzID0gU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCisgICAgdGVzdChIYW5kbGVyQ2xhc3M9aGFuZGxlcl9jbGFzcywgcG9ydD1hcmdzLnBvcnQsIGJpbmQ9YXJncy5iaW5kKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlLnB5IGIvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlLnB5CmluZGV4IGYzNjYwMzAuLmIyMDUxMmQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0F1dG9Db21wbGV0ZS5weQorKysgYi9MaWIvaWRsZWxpYi9BdXRvQ29tcGxldGUucHkKQEAgLTIyNiwzICsyMjYsOCBAQAogICAgICAgICBuYW1lc3BhY2UgPSBzeXMubW9kdWxlcy5jb3B5KCkKICAgICAgICAgbmFtZXNwYWNlLnVwZGF0ZShfX21haW5fXy5fX2RpY3RfXykKICAgICAgICAgcmV0dXJuIGV2YWwobmFtZSwgbmFtZXNwYWNlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgbWFpbgorICAgIG1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfYXV0b2NvbXBsZXRlJywgdmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9BdXRvRXhwYW5kLnB5IGIvTGliL2lkbGVsaWIvQXV0b0V4cGFuZC5weQppbmRleCA5ZTkzZDU3Li43MDU5MDU0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9BdXRvRXhwYW5kLnB5CisrKyBiL0xpYi9pZGxlbGliL0F1dG9FeHBhbmQucHkKQEAgLTEsMyArMSwxNyBAQAorJycnQ29tcGxldGUgdGhlIGN1cnJlbnQgd29yZCBiZWZvcmUgdGhlIGN1cnNvciB3aXRoIHdvcmRzIGluIHRoZSBlZGl0b3IuCisKK0VhY2ggbWVudSBzZWxlY3Rpb24gb3Igc2hvcnRjdXQga2V5IHNlbGVjdGlvbiByZXBsYWNlcyB0aGUgd29yZCB3aXRoIGEKK2RpZmZlcmVudCB3b3JkIHdpdGggdGhlIHNhbWUgcHJlZml4LiBUaGUgc2VhcmNoIGZvciBtYXRjaGVzIGJlZ2lucworYmVmb3JlIHRoZSB0YXJnZXQgYW5kIG1vdmVzIHRvd2FyZCB0aGUgdG9wIG9mIHRoZSBlZGl0b3IuIEl0IHRoZW4gc3RhcnRzCithZnRlciB0aGUgY3Vyc29yIGFuZCBtb3ZlcyBkb3duLiBJdCB0aGVuIHJldHVybnMgdG8gdGhlIG9yaWdpbmFsIHdvcmQgYW5kCit0aGUgY3ljbGUgc3RhcnRzIGFnYWluLgorCitDaGFuZ2luZyB0aGUgY3VycmVudCB0ZXh0IGxpbmUgb3IgbGVhdmluZyB0aGUgY3Vyc29yIGluIGEgZGlmZmVyZW50CitwbGFjZSBiZWZvcmUgcmVxdWVzdGluZyB0aGUgbmV4dCBzZWxlY3Rpb24gY2F1c2VzIEF1dG9FeHBhbmQgdG8gcmVzZXQKK2l0cyBzdGF0ZS4KKworVGhpcyBpcyBhbiBleHRlbnNpb24gZmlsZSBhbmQgdGhlcmUgaXMgb25seSBvbmUgaW5zdGFuY2Ugb2YgQXV0b0V4cGFuZC4KKycnJwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHJlCiAKQEAgLTIwLDYgKzM0LDcgQEAKICAgICAgICAgc2VsZi5zdGF0ZSA9IE5vbmUKIAogICAgIGRlZiBleHBhbmRfd29yZF9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgICJSZXBsYWNlIHRoZSBjdXJyZW50IHdvcmQgd2l0aCB0aGUgbmV4dCBleHBhbnNpb24uIgogICAgICAgICBjdXJpbnNlcnQgPSBzZWxmLnRleHQuaW5kZXgoImluc2VydCIpCiAgICAgICAgIGN1cmxpbmUgPSBzZWxmLnRleHQuZ2V0KCJpbnNlcnQgbGluZXN0YXJ0IiwgImluc2VydCBsaW5lZW5kIikKICAgICAgICAgaWYgbm90IHNlbGYuc3RhdGU6CkBAIC00Niw2ICs2MSw3IEBACiAgICAgICAgIHJldHVybiAiYnJlYWsiCiAKICAgICBkZWYgZ2V0d29yZHMoc2VsZik6CisgICAgICAgICJSZXR1cm4gYSBsaXN0IG9mIHdvcmRzIHRoYXQgbWF0Y2ggdGhlIHByZWZpeCBiZWZvcmUgdGhlIGN1cnNvci4iCiAgICAgICAgIHdvcmQgPSBzZWxmLmdldHByZXZ3b3JkKCkKICAgICAgICAgaWYgbm90IHdvcmQ6CiAgICAgICAgICAgICByZXR1cm4gW10KQEAgLTc2LDggKzkyLDEzIEBACiAgICAgICAgIHJldHVybiB3b3JkcwogCiAgICAgZGVmIGdldHByZXZ3b3JkKHNlbGYpOgorICAgICAgICAiUmV0dXJuIHRoZSB3b3JkIHByZWZpeCBiZWZvcmUgdGhlIGN1cnNvci4iCiAgICAgICAgIGxpbmUgPSBzZWxmLnRleHQuZ2V0KCJpbnNlcnQgbGluZXN0YXJ0IiwgImluc2VydCIpCiAgICAgICAgIGkgPSBsZW4obGluZSkKICAgICAgICAgd2hpbGUgaSA+IDAgYW5kIGxpbmVbaS0xXSBpbiBzZWxmLndvcmRjaGFyczoKICAgICAgICAgICAgIGkgPSBpLTEKICAgICAgICAgcmV0dXJuIGxpbmVbaTpdCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9hdXRvZXhwYW5kJywgdmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9CaW5kaW5ncy5weSBiL0xpYi9pZGxlbGliL0JpbmRpbmdzLnB5CmluZGV4IDY1YzAzMTcuLmM5YmVmMjEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0JpbmRpbmdzLnB5CisrKyBiL0xpYi9pZGxlbGliL0JpbmRpbmdzLnB5CkBAIC04LDkgKzgsMTYgQEAKIHdpbmRvd3MuCiAKICIiIgotaW1wb3J0IHN5cworZnJvbSBpbXBvcnRsaWIudXRpbCBpbXBvcnQgZmluZF9zcGVjCisKIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0CisKKyMgICBXYXJuaW5nOiBtZW51ZGVmcyBpcyBhbHRlcmVkIGluIG1hY29zeFN1cHBvcnQub3ZlcnJpZGVSb290TWVudSgpCisjICAgYWZ0ZXIgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IGFuIE9TIFggQXF1YSBUayBpcyBpbiB1c2UsCisjICAgd2hpY2ggY2Fubm90IGJlIGRvbmUgdW50aWwgYWZ0ZXIgVGsoKSBpcyBmaXJzdCBjYWxsZWQuCisjICAgRG8gbm90IGFsdGVyIHRoZSAnZmlsZScsICdvcHRpb25zJywgb3IgJ2hlbHAnIGNhc2NhZGVzIGhlcmUKKyMgICB3aXRob3V0IGFsdGVyaW5nIG92ZXJyaWRlUm9vdE1lbnUoKSBhcyB3ZWxsLgorIyAgICAgICBUT0RPOiBNYWtlIHRoaXMgbW9yZSByb2J1c3QKIAogbWVudWRlZnMgPSBbCiAgIyB1bmRlcnNjb3JlIHByZWZpeGVzIGNoYXJhY3RlciB0byB1bmRlcnNjb3JlCkBAIC04MSwyNyArODgsNyBAQAogICAgXSksCiBdCiAKLWlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6Ci0gICAgIyBSdW5uaW5nIGFzIGEgcHJvcGVyIE1hY09TIGFwcGxpY2F0aW9uIGJ1bmRsZS4gVGhpcyBibG9jayByZXN0cnVjdHVyZXMKLSAgICAjIHRoZSBtZW51cyBhIGxpdHRsZSB0byBtYWtlIHRoZW0gY29uZm9ybSBiZXR0ZXIgdG8gdGhlIEhJRy4KLQotICAgIHF1aXRJdGVtID0gbWVudWRlZnNbMF1bMV1bLTFdCi0gICAgY2xvc2VJdGVtID0gbWVudWRlZnNbMF1bMV1bLTJdCi0KLSAgICAjIFJlbW92ZSB0aGUgbGFzdCAzIGl0ZW1zIG9mIHRoZSBmaWxlIG1lbnU6IGEgc2VwYXJhdG9yLCBjbG9zZSB3aW5kb3cgYW5kCi0gICAgIyBxdWl0LiBDbG9zZSB3aW5kb3cgd2lsbCBiZSByZWluc2VydGVkIGp1c3QgYWJvdmUgdGhlIHNhdmUgaXRlbSwgd2hlcmUKLSAgICAjIGl0IHNob3VsZCBiZSBhY2NvcmRpbmcgdG8gdGhlIEhJRy4gUXVpdCBpcyBpbiB0aGUgYXBwbGljYXRpb24gbWVudS4KLSAgICBkZWwgbWVudWRlZnNbMF1bMV1bLTM6XQotICAgIG1lbnVkZWZzWzBdWzFdLmluc2VydCg2LCBjbG9zZUl0ZW0pCi0KLSAgICAjIFJlbW92ZSB0aGUgJ0Fib3V0JyBlbnRyeSBmcm9tIHRoZSBoZWxwIG1lbnUsIGl0IGlzIGluIHRoZSBhcHBsaWNhdGlvbgotICAgICMgbWVudQotICAgIGRlbCBtZW51ZGVmc1stMV1bMV1bMDoyXQotCi0gICAgIyBSZW1vdmUgdGhlICdDb25maWd1cmUnIGVudHJ5IGZyb20gdGhlIG9wdGlvbnMgbWVudSwgaXQgaXMgaW4gdGhlCi0gICAgIyBhcHBsaWNhdGlvbiBtZW51IGFzICdQcmVmZXJlbmNlcycKLSAgICBkZWwgbWVudWRlZnNbLTJdWzFdWzA6Ml0KK2lmIGZpbmRfc3BlYygndHVydGxlZGVtbycpOgorICAgIG1lbnVkZWZzWy0xXVsxXS5hcHBlbmQoKCdUdXJ0bGUgRGVtbycsICc8PG9wZW4tdHVydGxlLWRlbW8+PicpKQogCiBkZWZhdWx0X2tleWRlZnMgPSBpZGxlQ29uZi5HZXRDdXJyZW50S2V5U2V0KCkKLQotZGVsIHN5cwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQ2FsbFRpcFdpbmRvdy5weSBiL0xpYi9pZGxlbGliL0NhbGxUaXBXaW5kb3cucHkKaW5kZXggOGUyOWRhYi4uODRkMjJmZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvQ2FsbFRpcFdpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9DYWxsVGlwV2luZG93LnB5CkBAIC0yLDkgKzIsOCBAQAogCiBBZnRlciBUb29sVGlwLnB5LCB3aGljaCB1c2VzIGlkZWFzIGdsZWFuZWQgZnJvbSBQeVNvbAogVXNlZCBieSB0aGUgQ2FsbFRpcHMgSURMRSBleHRlbnNpb24uCi0KICIiIgotZnJvbSB0a2ludGVyIGltcG9ydCAqCitmcm9tIHRraW50ZXIgaW1wb3J0IFRvcGxldmVsLCBMYWJlbCwgTEVGVCwgU09MSUQsIFRjbEVycm9yCiAKIEhJREVfVklSVFVBTF9FVkVOVF9OQU1FID0gIjw8Y2FsbHRpcHdpbmRvdy1oaWRlPj4iCiBISURFX1NFUVVFTkNFUyA9ICgiPEtleS1Fc2NhcGU+IiwgIjxGb2N1c091dD4iKQpAQCAtMTMzLDM3ICsxMzIsMzkgQEAKICAgICAgICAgcmV0dXJuIGJvb2woc2VsZi50aXB3aW5kb3cpCiAKIAorZGVmIF9jYWxsdGlwX3dpbmRvdyhwYXJlbnQpOiAgIyBodGVzdCAjCisgICAgaW1wb3J0IHJlCisgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVGV4dCwgTEVGVCwgQk9USAogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIFRlc3QgQ29kZQotIwotY2xhc3MgY29udGFpbmVyOiAjIENvbmNlcHR1YWxseSBhbiBlZGl0b3Jfd2luZG93Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICByb290ID0gVGsoKQotICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0ID0gVGV4dChyb290KQotICAgICAgICB0ZXh0LnBhY2soc2lkZT1MRUZULCBmaWxsPUJPVEgsIGV4cGFuZD0xKQotICAgICAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwgInN0cmluZy5zcGxpdCIpCi0gICAgICAgIHJvb3QudXBkYXRlKCkKLSAgICAgICAgc2VsZi5jYWxsdGlwID0gQ2FsbFRpcCh0ZXh0KQorICAgIHJvb3QgPSBUaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBjYWxsdGlwcyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogCi0gICAgICAgIHRleHQuZXZlbnRfYWRkKCI8PGNhbGx0aXAtc2hvdz4+IiwgIigiKQotICAgICAgICB0ZXh0LmV2ZW50X2FkZCgiPDxjYWxsdGlwLWhpZGU+PiIsICIpIikKLSAgICAgICAgdGV4dC5iaW5kKCI8PGNhbGx0aXAtc2hvdz4+Iiwgc2VsZi5jYWxsdGlwX3Nob3cpCi0gICAgICAgIHRleHQuYmluZCgiPDxjYWxsdGlwLWhpZGU+PiIsIHNlbGYuY2FsbHRpcF9oaWRlKQorICAgIGNsYXNzIE15RWRpdFdpbjogIyBjb25jZXB0dWFsbHkgYW4gZWRpdG9yX3dpbmRvdworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0ID0gVGV4dChyb290KQorICAgICAgICAgICAgdGV4dC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKKyAgICAgICAgICAgIHRleHQuaW5zZXJ0KCJpbnNlcnQiLCAic3RyaW5nLnNwbGl0IikKKyAgICAgICAgICAgIHJvb3QudXBkYXRlKCkKKyAgICAgICAgICAgIHNlbGYuY2FsbHRpcCA9IENhbGxUaXAodGV4dCkKIAotICAgICAgICB0ZXh0LmZvY3VzX3NldCgpCi0gICAgICAgIHJvb3QubWFpbmxvb3AoKQorICAgICAgICAgICAgdGV4dC5ldmVudF9hZGQoIjw8Y2FsbHRpcC1zaG93Pj4iLCAiKCIpCisgICAgICAgICAgICB0ZXh0LmV2ZW50X2FkZCgiPDxjYWxsdGlwLWhpZGU+PiIsICIpIikKKyAgICAgICAgICAgIHRleHQuYmluZCgiPDxjYWxsdGlwLXNob3c+PiIsIHNlbGYuY2FsbHRpcF9zaG93KQorICAgICAgICAgICAgdGV4dC5iaW5kKCI8PGNhbGx0aXAtaGlkZT4+Iiwgc2VsZi5jYWxsdGlwX2hpZGUpCiAKLSAgICBkZWYgY2FsbHRpcF9zaG93KHNlbGYsIGV2ZW50KToKLSAgICAgICAgc2VsZi5jYWxsdGlwLnNob3d0aXAoIkhlbGxvIHdvcmxkIikKKyAgICAgICAgICAgIHRleHQuZm9jdXNfc2V0KCkKKyAgICAgICAgICAgIHJvb3QubWFpbmxvb3AoKQogCi0gICAgZGVmIGNhbGx0aXBfaGlkZShzZWxmLCBldmVudCk6Ci0gICAgICAgIHNlbGYuY2FsbHRpcC5oaWRldGlwKCkKKyAgICAgICAgZGVmIGNhbGx0aXBfc2hvdyhzZWxmLCBldmVudCk6CisgICAgICAgICAgICBzZWxmLmNhbGx0aXAuc2hvd3RpcCgiSGVsbG8gd29ybGQiLCAiaW5zZXJ0IiwgImVuZCIpCiAKLWRlZiBtYWluKCk6Ci0gICAgIyBUZXN0IGNvZGUKLSAgICBjPWNvbnRhaW5lcigpCisgICAgICAgIGRlZiBjYWxsdGlwX2hpZGUoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgc2VsZi5jYWxsdGlwLmhpZGV0aXAoKQorCisgICAgTXlFZGl0V2luKCkKIAogaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9jYWxsdGlwX3dpbmRvdykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0NsYXNzQnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL0NsYXNzQnJvd3Nlci5weQppbmRleCA3MTE3NmNkLi5hMGU3ODJlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9DbGFzc0Jyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvQ2xhc3NCcm93c2VyLnB5CkBAIC0yMSwxMSArMjEsMTUgQEAKIAogY2xhc3MgQ2xhc3NCcm93c2VyOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZsaXN0LCBuYW1lLCBwYXRoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmxpc3QsIG5hbWUsIHBhdGgsIF9odGVzdD1GYWxzZSk6CiAgICAgICAgICMgWFhYIFRoaXMgQVBJIHNob3VsZCBjaGFuZ2UsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZW5kIGluICIucHkiCiAgICAgICAgICMgWFhYIHRoZSBjb2RlIGhlcmUgaXMgYm9ndXMhCisgICAgICAgICIiIgorICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IHdoZW4gbG9jYXRpb24gcnVubmluZyBodGVzdC4KKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi5maWxlID0gb3MucGF0aC5qb2luKHBhdGhbMF0sIHNlbGYubmFtZSArICIucHkiKQorICAgICAgICBzZWxmLl9odGVzdCA9IF9odGVzdAogICAgICAgICBzZWxmLmluaXQoZmxpc3QpCiAKICAgICBkZWYgY2xvc2Uoc2VsZiwgZXZlbnQ9Tm9uZSk6CkBAIC00MCw2ICs0NCw5IEBACiAgICAgICAgIHNlbGYudG9wID0gdG9wID0gTGlzdGVkVG9wbGV2ZWwoZmxpc3Qucm9vdCkKICAgICAgICAgdG9wLnByb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgc2VsZi5jbG9zZSkKICAgICAgICAgdG9wLmJpbmQoIjxFc2NhcGU+Iiwgc2VsZi5jbG9zZSkKKyAgICAgICAgaWYgc2VsZi5faHRlc3Q6ICMgcGxhY2UgZGlhbG9nIGJlbG93IHBhcmVudCBpZiBydW5uaW5nIGh0ZXN0CisgICAgICAgICAgICB0b3AuZ2VvbWV0cnkoIislZCslZCIgJQorICAgICAgICAgICAgICAgIChmbGlzdC5yb290LndpbmZvX3Jvb3R4KCksIGZsaXN0LnJvb3Qud2luZm9fcm9vdHkoKSArIDIwMCkpCiAgICAgICAgIHNlbGYuc2V0dGl0bGUoKQogICAgICAgICB0b3AuZm9jdXNfc2V0KCkKICAgICAgICAgIyBjcmVhdGUgc2Nyb2xsZWQgY2FudmFzCkBAIC05NCw3ICsxMDEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRpY3QgPSBweWNsYnIucmVhZG1vZHVsZV9leChuYW1lLCBbZGlyXSArIHN5cy5wYXRoKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgaXRlbXMgPSBbXQogICAgICAgICBzZWxmLmNsYXNzZXMgPSB7fQpAQCAtMjAyLDcgKzIwOSw3IEBACiAgICAgICAgIGVkaXQgPSBQeVNoZWxsLmZsaXN0Lm9wZW4oc2VsZi5maWxlKQogICAgICAgICBlZGl0LmdvdG9saW5lKHNlbGYuY2wubWV0aG9kc1tzZWxmLm5hbWVdKQogCi1kZWYgbWFpbigpOgorZGVmIF9jbGFzc19icm93c2VyKHBhcmVudCk6ICNXcmFwcGVyIGZvciBodGVzdAogICAgIHRyeToKICAgICAgICAgZmlsZSA9IF9fZmlsZV9fCiAgICAgZXhjZXB0IE5hbWVFcnJvcjoKQEAgLTIxMyw5ICsyMjAsMTAgQEAKICAgICAgICAgICAgIGZpbGUgPSBzeXMuYXJndlswXQogICAgIGRpciwgZmlsZSA9IG9zLnBhdGguc3BsaXQoZmlsZSkKICAgICBuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlKVswXQotICAgIENsYXNzQnJvd3NlcihQeVNoZWxsLmZsaXN0LCBuYW1lLCBbZGlyXSkKLSAgICBpZiBzeXMuc3RkaW4gaXMgc3lzLl9fc3RkaW5fXzoKLSAgICAgICAgbWFpbmxvb3AoKQorICAgIGZsaXN0ID0gUHlTaGVsbC5QeVNoZWxsRmlsZUxpc3QocGFyZW50KQorICAgIENsYXNzQnJvd3NlcihmbGlzdCwgbmFtZSwgW2Rpcl0sIF9odGVzdD1UcnVlKQorICAgIHBhcmVudC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9jbGFzc19icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQ29sb3JEZWxlZ2F0b3IucHkgYi9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQppbmRleCA2MWUyYmU0Li4yMmJiMjJmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQorKysgYi9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQpAQCAtMzIsNyArMzIsNiBAQAogCiBwcm9nID0gcmUuY29tcGlsZShtYWtlX3BhdCgpLCByZS5TKQogaWRwcm9nID0gcmUuY29tcGlsZShyIlxzKyhcdyspIiwgcmUuUykKLWFzcHJvZyA9IHJlLmNvbXBpbGUociIuKj9cYihhcylcYiIpCiAKIGNsYXNzIENvbG9yRGVsZWdhdG9yKERlbGVnYXRvcik6CiAKQEAgLTQwLDcgKzM5LDYgQEAKICAgICAgICAgRGVsZWdhdG9yLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYucHJvZyA9IHByb2cKICAgICAgICAgc2VsZi5pZHByb2cgPSBpZHByb2cKLSAgICAgICAgc2VsZi5hc3Byb2cgPSBhc3Byb2cKICAgICAgICAgc2VsZi5Mb2FkVGFnRGVmcygpCiAKICAgICBkZWYgc2V0ZGVsZWdhdGUoc2VsZiwgZGVsZWdhdGUpOgpAQCAtNzIsNyArNzAsNiBAQAogICAgICAgICAgICAgIkRFRklOSVRJT04iOiBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICJkZWZpbml0aW9uIiksCiAgICAgICAgICAgICAiU1lOQyI6IHsnYmFja2dyb3VuZCc6Tm9uZSwnZm9yZWdyb3VuZCc6Tm9uZX0sCiAgICAgICAgICAgICAiVE9ETyI6IHsnYmFja2dyb3VuZCc6Tm9uZSwnZm9yZWdyb3VuZCc6Tm9uZX0sCi0gICAgICAgICAgICAiQlJFQUsiOiBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICJicmVhayIpLAogICAgICAgICAgICAgIkVSUk9SIjogaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAiZXJyb3IiKSwKICAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyBpcyB1c2VkIGJ5IFJlcGxhY2VEaWFsb2c6CiAgICAgICAgICAgICAiaGl0IjogaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAiaGl0IiksCkBAIC0yMTQsMjIgKzIxMSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhZ19hZGQoIkRFRklOSVRJT04iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgKyAiKyVkYyIgJSBhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgKyAiKyVkYyIgJSBiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgdmFsdWUgPT0gImltcG9ydCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29sb3IgYWxsIHRoZSAiYXMiIHdvcmRzIG9uIHNhbWUgbGluZSwgZXhjZXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgaW4gYSBjb21tZW50OyBjaGVhcCBhcHByb3hpbWF0aW9uIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRydXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICcjJyBpbiBjaGFyczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IGNoYXJzLmluZGV4KCcjJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IGxlbihjaGFycykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0xID0gc2VsZi5hc3Byb2cubWF0Y2goY2hhcnMsIGIsIGVuZHBvcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBtMToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSwgYiA9IG0xLnNwYW4oMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFnX2FkZCgiS0VZV09SRCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCArICIrJWRjIiAlIGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCArICIrJWRjIiAlIGIpCiAgICAgICAgICAgICAgICAgICAgIG0gPSBzZWxmLnByb2cuc2VhcmNoKGNoYXJzLCBtLmVuZCgpKQogICAgICAgICAgICAgICAgIGlmICJTWU5DIiBpbiBzZWxmLnRhZ19uYW1lcyhuZXh0ICsgIi0xYyIpOgogICAgICAgICAgICAgICAgICAgICBoZWFkID0gbmV4dApAQCAtMjUzLDE3ICsyMzQsMjEgQEAKICAgICAgICAgZm9yIHRhZyBpbiBzZWxmLnRhZ2RlZnM6CiAgICAgICAgICAgICBzZWxmLnRhZ19yZW1vdmUodGFnLCAiMS4wIiwgImVuZCIpCiAKLWRlZiBtYWluKCk6CitkZWYgX2NvbG9yX2RlbGVnYXRvcihwYXJlbnQpOgogICAgIGZyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCiAgICAgcm9vdCA9IFRrKCkKLSAgICByb290LndtX3Byb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgcm9vdC5xdWl0KQotICAgIHRleHQgPSBUZXh0KGJhY2tncm91bmQ9IndoaXRlIikKKyAgICByb290LnRpdGxlKCJUZXN0IENvbG9yRGVsZWdhdG9yIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisgICAgc291cmNlID0gImlmIHNvbWVuYW1lOiB4ID0gJ2FiYycgIyBjb21tZW50XG5wcmludCIKKyAgICB0ZXh0ID0gVGV4dChyb290LCBiYWNrZ3JvdW5kPSJ3aGl0ZSIpCisgICAgdGV4dC5pbnNlcnQoImluc2VydCIsIHNvdXJjZSkKICAgICB0ZXh0LnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQotICAgIHRleHQuZm9jdXNfc2V0KCkKICAgICBwID0gUGVyY29sYXRvcih0ZXh0KQogICAgIGQgPSBDb2xvckRlbGVnYXRvcigpCiAgICAgcC5pbnNlcnRmaWx0ZXIoZCkKICAgICByb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX2NvbG9yX2RlbGVnYXRvcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0RlYnVnZ2VyLnB5IGIvTGliL2lkbGVsaWIvRGVidWdnZXIucHkKaW5kZXggZDQ4NzJlZC4uNjg3NTE5NyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRGVidWdnZXIucHkKKysrIGIvTGliL2lkbGVsaWIvRGVidWdnZXIucHkKQEAgLTEsNiArMSw1IEBACiBpbXBvcnQgb3MKIGltcG9ydCBiZGIKLWltcG9ydCB0eXBlcwogZnJvbSB0a2ludGVyIGltcG9ydCAqCiBmcm9tIGlkbGVsaWIuV2luZG93TGlzdCBpbXBvcnQgTGlzdGVkVG9wbGV2ZWwKIGZyb20gaWRsZWxpYi5TY3JvbGxlZExpc3QgaW1wb3J0IFNjcm9sbGVkTGlzdApAQCAtMzIyLDcgKzMyMSw3IEBACiBjbGFzcyBTdGFja1ZpZXdlcihTY3JvbGxlZExpc3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3RlciwgZmxpc3QsIGd1aSk6Ci0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKICAgICAgICAgICAgICMgQXQgbGVhc3Qgb24gd2l0aCB0aGUgc3RvY2sgQXF1YVRrIHZlcnNpb24gb24gT1NYIDEwLjQgeW91J2xsCiAgICAgICAgICAgICAjIGdldCBhbiBzaGFraW5nIEdVSSB0aGF0IGV2ZW50dWFsbHkga2lsbHMgSURMRSBpZiB0aGUgd2lkdGgKICAgICAgICAgICAgICMgYXJndW1lbnQgaXMgc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5IGIvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CmluZGV4IDRiZjExMTEuLjI4NTUzNDcgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKQEAgLTEsNyArMSw4IEBACiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgaW1wb3J0bGliLmFiYworaW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKLWZyb20gcGxhdGZvcm0gaW1wb3J0IHB5dGhvbl92ZXJzaW9uCitpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCByZQogaW1wb3J0IHN0cmluZwogaW1wb3J0IHN5cwpAQCAtMjUsNiArMjYsOCBAQAogIyBUaGUgZGVmYXVsdCB0YWIgc2V0dGluZyBmb3IgYSBUZXh0IHdpZGdldCwgaW4gYXZlcmFnZS13aWR0aCBjaGFyYWN0ZXJzLgogVEtfVEFCV0lEVEhfREVGQVVMVCA9IDgKIAorX3B5X3ZlcnNpb24gPSAnICglcyknICUgcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKQorCiBkZWYgX3NwaGlueF92ZXJzaW9uKCk6CiAgICAgIkZvcm1hdCBzeXMudmVyc2lvbl9pbmZvIHRvIHByb2R1Y2UgdGhlIFNwaGlueCB2ZXJzaW9uIHN0cmluZyB1c2VkIHRvIGluc3RhbGwgdGhlIGNobSBkb2NzIgogICAgIG1ham9yLCBtaW5vciwgbWljcm8sIGxldmVsLCBzZXJpYWwgPSBzeXMudmVyc2lvbl9pbmZvCkBAIC03OCw2ICs4MSw4IEBACiAgICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQogCiBoZWxwRGlhbG9nID0gSGVscERpYWxvZygpICAjIHNpbmdsZXRvbiBpbnN0YW5jZQorZGVmIF9oZWxwX2RpYWxvZyhwYXJlbnQpOiAgIyB3cmFwcGVyIGZvciBodGVzdAorICAgIGhlbHBEaWFsb2cuc2hvd19kaWFsb2cocGFyZW50KQogCiAKIGNsYXNzIEVkaXRvcldpbmRvdyhvYmplY3QpOgpAQCAtMTA4LDggKzExMyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHl0aG9uJXMuY2htJyAlIF9zcGhpbnhfdmVyc2lvbigpKQogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNobWZpbGUpOgogICAgICAgICAgICAgICAgICAgICBkb2Nob21lID0gY2htZmlsZQotICAgICAgICAgICAgZWxpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICAgICAgICAgICAgICMgZG9jdW1lbnRhdGlvbiBpcyBzdG9yZWQgaW5zaWRlIHRoZSBweXRob24gZnJhbWV3b3JrCisgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIGRvY3VtZW50YXRpb24gbWF5IGJlIHN0b3JlZCBpbnNpZGUgYSBweXRob24gZnJhbWV3b3JrCiAgICAgICAgICAgICAgICAgZG9jaG9tZSA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9pbmRleC5odG1sJykKICAgICAgICAgICAgIGRvY2hvbWUgPSBvcy5wYXRoLm5vcm1wYXRoKGRvY2hvbWUpCkBAIC0xNjUsNyArMTcwLDcgQEAKIAogICAgICAgICBzZWxmLnRvcC5wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIHNlbGYuY2xvc2UpCiAgICAgICAgIHNlbGYudG9wLmJpbmQoIjw8Y2xvc2Utd2luZG93Pj4iLCBzZWxmLmNsb3NlX2V2ZW50KQotICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgorICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LmlzQXF1YVRrKCk6CiAgICAgICAgICAgICAjIENvbW1hbmQtVyBvbiBlZGl0b3J3aW5kb3dzIGRvZXNuJ3Qgd29yayB3aXRob3V0IHRoaXMuCiAgICAgICAgICAgICB0ZXh0LmJpbmQoJzw8Y2xvc2Utd2luZG93Pj4nLCBzZWxmLmNsb3NlX2V2ZW50KQogICAgICAgICAgICAgIyBTb21lIE9TIFggc3lzdGVtcyBoYXZlIG9ubHkgb25lIG1vdXNlIGJ1dHRvbiwKQEAgLTIxOSw2ICsyMjQsNyBAQAogICAgICAgICAgICAgdGV4dC5iaW5kKCI8PGNsb3NlLWFsbC13aW5kb3dzPj4iLCBzZWxmLmZsaXN0LmNsb3NlX2FsbF9jYWxsYmFjaykKICAgICAgICAgICAgIHRleHQuYmluZCgiPDxvcGVuLWNsYXNzLWJyb3dzZXI+PiIsIHNlbGYub3Blbl9jbGFzc19icm93c2VyKQogICAgICAgICAgICAgdGV4dC5iaW5kKCI8PG9wZW4tcGF0aC1icm93c2VyPj4iLCBzZWxmLm9wZW5fcGF0aF9icm93c2VyKQorICAgICAgICAgICAgdGV4dC5iaW5kKCI8PG9wZW4tdHVydGxlLWRlbW8+PiIsIHNlbGYub3Blbl90dXJ0bGVfZGVtbykKIAogICAgICAgICBzZWxmLnNldF9zdGF0dXNfYmFyKCkKICAgICAgICAgdmJhclsnY29tbWFuZCddID0gdGV4dC55dmlldwpAQCAtNDA4LDcgKzQxNCw3IEBACiAKICAgICBkZWYgc2V0X3N0YXR1c19iYXIoc2VsZik6CiAgICAgICAgIHNlbGYuc3RhdHVzX2JhciA9IHNlbGYuTXVsdGlTdGF0dXNCYXIoc2VsZi50b3ApCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICAgICAgICAgICMgSW5zZXJ0IHNvbWUgcGFkZGluZyB0byBhdm9pZCBvYnNjdXJpbmcgc29tZSBvZiB0aGUgc3RhdHVzYmFyCiAgICAgICAgICAgICAjIGJ5IHRoZSByZXNpemUgd2lkZ2V0LgogICAgICAgICAgICAgc2VsZi5zdGF0dXNfYmFyLnNldF9sYWJlbCgnX3BhZGRpbmcxJywgJyAgICAnLCBzaWRlPVJJR0hUKQpAQCAtNDM1LDcgKzQ0MSw3IEBACiAgICAgICAgICgiaGVscCIsICJfSGVscCIpLAogICAgIF0KIAotICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgogICAgICAgICBtZW51X3NwZWNzWy0yXSA9ICgid2luZG93cyIsICJfV2luZG93IikKIAogCkBAIC00NDYsNyArNDUyLDcgQEAKICAgICAgICAgICAgIHVuZGVybGluZSwgbGFiZWwgPSBwcmVwc3RyKGxhYmVsKQogICAgICAgICAgICAgbWVudWRpY3RbbmFtZV0gPSBtZW51ID0gTWVudShtYmFyLCBuYW1lPW5hbWUpCiAgICAgICAgICAgICBtYmFyLmFkZF9jYXNjYWRlKGxhYmVsPWxhYmVsLCBtZW51PW1lbnUsIHVuZGVybGluZT11bmRlcmxpbmUpCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNDYXJib25BcXVhVGsoc2VsZi5yb290KToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NhcmJvblRrKCk6CiAgICAgICAgICAgICAjIEluc2VydCB0aGUgYXBwbGljYXRpb24gbWVudQogICAgICAgICAgICAgbWVudWRpY3RbJ2FwcGxpY2F0aW9uJ10gPSBtZW51ID0gTWVudShtYmFyLCBuYW1lPSdhcHBsZScpCiAgICAgICAgICAgICBtYmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQpAQCAtNTQ5LDcgKzU1NSw3IEBACiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3Muc3RhcnRmaWxlKHNlbGYuaGVscF91cmwpCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdEb2N1bWVudCBTdGFydCBGYWlsdXJlJywKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgZWxzZToKQEAgLTY2MCwyMCArNjY2LDIwIEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyBYWFggT3VnaHQgdG8gaW5zZXJ0IGN1cnJlbnQgZmlsZSdzIGRpcmVjdG9yeSBpbiBmcm9udCBvZiBwYXRoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKQorICAgICAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYyhuYW1lKQogICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEltcG9ydEVycm9yKSBhcyBtc2c6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJbXBvcnQgZXJyb3IiLCBzdHIobXNnKSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgaWYgc3BlYyBpcyBOb25lOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSW1wb3J0IGVycm9yIiwgIm1vZHVsZSBub3QgZm91bmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGxvYWRlciwgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzcGVjLmxvYWRlciwgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIpOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSW1wb3J0IGVycm9yIiwgIm5vdCBhIHNvdXJjZS1iYXNlZCBtb2R1bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZpbGVfcGF0aCA9IGxvYWRlci5nZXRfZmlsZW5hbWUobmFtZSkKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IHNwZWMubG9hZGVyLmdldF9maWxlbmFtZShuYW1lKQogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJbXBvcnQgZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgZ2V0X2ZpbGVuYW1lIiwKQEAgLTcwMiw2ICs3MDgsMTQgQEAKICAgICAgICAgZnJvbSBpZGxlbGliIGltcG9ydCBQYXRoQnJvd3NlcgogICAgICAgICBQYXRoQnJvd3Nlci5QYXRoQnJvd3NlcihzZWxmLmZsaXN0KQogCisgICAgZGVmIG9wZW5fdHVydGxlX2RlbW8oc2VsZiwgZXZlbnQgPSBOb25lKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAnLWMnLAorICAgICAgICAgICAgICAgJ2Zyb20gdHVydGxlZGVtby5fX21haW5fXyBpbXBvcnQgbWFpbjsgbWFpbigpJ10KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1GYWxzZSkKKwogICAgIGRlZiBnb3RvbGluZShzZWxmLCBsaW5lbm8pOgogICAgICAgICBpZiBsaW5lbm8gaXMgbm90IE5vbmUgYW5kIGxpbmVubyA+IDA6CiAgICAgICAgICAgICBzZWxmLnRleHQubWFya19zZXQoImluc2VydCIsICIlZC4wIiAlIGxpbmVubykKQEAgLTg3Miw3ICs4ODYsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShoZWxwZmlsZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIGVsc2U6CkBAIC05MzIsNyArOTQ2LDcgQEAKICAgICAgICAgc2hvcnQgPSBzZWxmLnNob3J0X3RpdGxlKCkKICAgICAgICAgbG9uZyA9IHNlbGYubG9uZ190aXRsZSgpCiAgICAgICAgIGlmIHNob3J0IGFuZCBsb25nOgotICAgICAgICAgICAgdGl0bGUgPSBzaG9ydCArICIgLSAiICsgbG9uZworICAgICAgICAgICAgdGl0bGUgPSBzaG9ydCArICIgLSAiICsgbG9uZyArIF9weV92ZXJzaW9uCiAgICAgICAgIGVsaWYgc2hvcnQ6CiAgICAgICAgICAgICB0aXRsZSA9IHNob3J0CiAgICAgICAgIGVsaWYgbG9uZzoKQEAgLTk1NiwxNCArOTcwLDEzIEBACiAgICAgICAgIHNlbGYudW5kby5yZXNldF91bmRvKCkKIAogICAgIGRlZiBzaG9ydF90aXRsZShzZWxmKToKLSAgICAgICAgcHl2ZXJzaW9uID0gIlB5dGhvbiAiICsgcHl0aG9uX3ZlcnNpb24oKSArICI6ICIKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmlvLmZpbGVuYW1lCiAgICAgICAgIGlmIGZpbGVuYW1lOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZmlsZW5hbWUgPSAiVW50aXRsZWQiCiAgICAgICAgICMgcmV0dXJuIHVuaWNvZGUgc3RyaW5nIHRvIGRpc3BsYXkgbm9uLUFTQ0lJIGNoYXJzIGNvcnJlY3RseQotICAgICAgICByZXR1cm4gcHl2ZXJzaW9uICsgc2VsZi5fZmlsZW5hbWVfdG9fdW5pY29kZShmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVuYW1lX3RvX3VuaWNvZGUoZmlsZW5hbWUpCiAKICAgICBkZWYgbG9uZ190aXRsZShzZWxmKToKICAgICAgICAgIyByZXR1cm4gdW5pY29kZSBzdHJpbmcgdG8gZGlzcGxheSBub24tQVNDSUkgY2hhcnMgY29ycmVjdGx5CkBAIC0xMDYzLDcgKzEwNzYsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJy4nICsgbmFtZSwgcGFja2FnZT1fX3BhY2thZ2VfXykKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcHJpbnQoIlxuRmFpbGVkIHRvIGltcG9ydCBleHRlbnNpb246ICIsIG5hbWUpCkBAIC0xNjcyLDcgKzE2ODUsNyBAQAogICAgIGtleWxpc3QgPSBrZXlkZWZzLmdldChldmVudG5hbWUpCiAgICAgIyBpc3N1ZTEwOTQwOiB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBwcmV2ZW50IGhhbmcgd2l0aCBPUyBYIENvY29hIFRrIDguNQogICAgICMgaWYgbm90IGtleWxpc3Q6Ci0gICAgaWYgKG5vdCBrZXlsaXN0KSBvciAobWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKSBhbmQgZXZlbnRuYW1lIGluIHsKKyAgICBpZiAobm90IGtleWxpc3QpIG9yIChtYWNvc3hTdXBwb3J0LmlzQ29jb2FUaygpIGFuZCBldmVudG5hbWUgaW4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PG9wZW4tbW9kdWxlPj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PGdvdG8tbGluZT4+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPDxjaGFuZ2UtaW5kZW50d2lkdGg+PiJ9KToKQEAgLTE2OTksMTkgKzE3MTIsMTggQEAKICAgICB0ay5jYWxsKCdzZXQnLCAndGNsX25vbndvcmRjaGFycycsICdbXmEtekEtWjAtOV9dJykKIAogCi1kZWYgdGVzdCgpOgotICAgIHJvb3QgPSBUaygpCitkZWYgX2VkaXRvcl93aW5kb3cocGFyZW50KToKKyAgICByb290ID0gcGFyZW50CiAgICAgZml4d29yZGJyZWFrcyhyb290KQotICAgIHJvb3Qud2l0aGRyYXcoKQogICAgIGlmIHN5cy5hcmd2WzE6XToKICAgICAgICAgZmlsZW5hbWUgPSBzeXMuYXJndlsxXQogICAgIGVsc2U6CiAgICAgICAgIGZpbGVuYW1lID0gTm9uZQorICAgIG1hY29zeFN1cHBvcnQuc2V0dXBBcHAocm9vdCwgTm9uZSkKICAgICBlZGl0ID0gRWRpdG9yV2luZG93KHJvb3Q9cm9vdCwgZmlsZW5hbWU9ZmlsZW5hbWUpCi0gICAgZWRpdC5zZXRfY2xvc2VfaG9vayhyb290LnF1aXQpCiAgICAgZWRpdC50ZXh0LmJpbmQoIjw8Y2xvc2UtYWxsLXdpbmRvd3M+PiIsIGVkaXQuY2xvc2VfZXZlbnQpCi0gICAgcm9vdC5tYWlubG9vcCgpCi0gICAgcm9vdC5kZXN0cm95KCkKKyAgICBwYXJlbnQubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfaGVscF9kaWFsb2csIF9lZGl0b3Jfd2luZG93KQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkgYi9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQppbmRleCAzN2EzMzdlLi5hOTk4OWE4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQorKysgYi9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGVuYW1lKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwd2QsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRm9ybWF0UGFyYWdyYXBoLnB5IGIvTGliL2lkbGVsaWIvRm9ybWF0UGFyYWdyYXBoLnB5CmluZGV4IGFlNGU2ZTcuLjliMTBjMGEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0Zvcm1hdFBhcmFncmFwaC5weQorKysgYi9MaWIvaWRsZWxpYi9Gb3JtYXRQYXJhZ3JhcGgucHkKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuZWRpdHdpbiA9IE5vbmUKIAotICAgIGRlZiBmb3JtYXRfcGFyYWdyYXBoX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICBkZWYgZm9ybWF0X3BhcmFncmFwaF9ldmVudChzZWxmLCBldmVudCwgbGltaXQ9Tm9uZSk6CiAgICAgICAgICIiIkZvcm1hdHMgcGFyYWdyYXBoIHRvIGEgbWF4IHdpZHRoIHNwZWNpZmllZCBpbiBpZGxlQ29uZi4KIAogICAgICAgICBJZiB0ZXh0IGlzIHNlbGVjdGVkLCBmb3JtYXRfcGFyYWdyYXBoX2V2ZW50IHdpbGwgc3RhcnQgYnJlYWtpbmcgbGluZXMKQEAgLTQxLDkgKzQxLDEyIEBACiAgICAgICAgIElmIG5vIHRleHQgaXMgc2VsZWN0ZWQsIGZvcm1hdF9wYXJhZ3JhcGhfZXZlbnQgdXNlcyB0aGUgY3VycmVudAogICAgICAgICBjdXJzb3IgbG9jYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBwYXJhZ3JhcGggKGxpbmVzIG9mIHRleHQgc3Vycm91bmRlZAogICAgICAgICBieSBibGFuayBsaW5lcykgYW5kIGZvcm1hdHMgaXQuCisKKyAgICAgICAgVGhlIGxlbmd0aCBsaW1pdCBwYXJhbWV0ZXIgaXMgZm9yIHRlc3Rpbmcgd2l0aCBhIGtub3duIHZhbHVlLgogICAgICAgICAiIiIKLSAgICAgICAgbWF4Zm9ybWF0d2lkdGggPSBpZGxlQ29uZi5HZXRPcHRpb24oCi0gICAgICAgICAgICAgICAgJ21haW4nLCAnRm9ybWF0UGFyYWdyYXBoJywgJ3BhcmFncmFwaCcsIHR5cGU9J2ludCcpCisgICAgICAgIGlmIGxpbWl0ID09IE5vbmU6CisgICAgICAgICAgICBsaW1pdCA9IGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAgICAgJ21haW4nLCAnRm9ybWF0UGFyYWdyYXBoJywgJ3BhcmFncmFwaCcsIHR5cGU9J2ludCcpCiAgICAgICAgIHRleHQgPSBzZWxmLmVkaXR3aW4udGV4dAogICAgICAgICBmaXJzdCwgbGFzdCA9IHNlbGYuZWRpdHdpbi5nZXRfc2VsZWN0aW9uX2luZGljZXMoKQogICAgICAgICBpZiBmaXJzdCBhbmQgbGFzdDoKQEAgLTUzLDkgKzU2LDkgQEAKICAgICAgICAgICAgIGZpcnN0LCBsYXN0LCBjb21tZW50X2hlYWRlciwgZGF0YSA9IFwKICAgICAgICAgICAgICAgICAgICAgZmluZF9wYXJhZ3JhcGgodGV4dCwgdGV4dC5pbmRleCgiaW5zZXJ0IikpCiAgICAgICAgIGlmIGNvbW1lbnRfaGVhZGVyOgotICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X2NvbW1lbnQoZGF0YSwgbWF4Zm9ybWF0d2lkdGgsIGNvbW1lbnRfaGVhZGVyKQorICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X2NvbW1lbnQoZGF0YSwgbGltaXQsIGNvbW1lbnRfaGVhZGVyKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X3BhcmFncmFwaChkYXRhLCBtYXhmb3JtYXR3aWR0aCkKKyAgICAgICAgICAgIG5ld2RhdGEgPSByZWZvcm1hdF9wYXJhZ3JhcGgoZGF0YSwgbGltaXQpCiAgICAgICAgIHRleHQudGFnX3JlbW92ZSgic2VsIiwgIjEuMCIsICJlbmQiKQogCiAgICAgICAgIGlmIG5ld2RhdGEgIT0gZGF0YToKQEAgLTE4NSw3ICsxODgsNiBAQAogICAgIHJldHVybiBtLmdyb3VwKDEpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0OyBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9mb3JtYXRwYXJhZ3JhcGgnLAogICAgICAgICAgICAgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQppbmRleCBjMzU5MDc0Li41ZDIyYTllIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKQEAgLTEsOSArMSwxNCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHJlICAjIGZvciBodGVzdAogaW1wb3J0IHN5cwotZnJvbSB0a2ludGVyIGltcG9ydCAqCitmcm9tIHRraW50ZXIgaW1wb3J0IFN0cmluZ1ZhciwgQm9vbGVhblZhciwgQ2hlY2tidXR0b24gICMgZm9yIEdyZXBEaWFsb2cKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRleHQsIEJ1dHRvbiwgU0VMLCBFTkQgICMgZm9yIGh0ZXN0CiBmcm9tIGlkbGVsaWIgaW1wb3J0IFNlYXJjaEVuZ2luZQoraW1wb3J0IGl0ZXJ0b29scwogZnJvbSBpZGxlbGliLlNlYXJjaERpYWxvZ0Jhc2UgaW1wb3J0IFNlYXJjaERpYWxvZ0Jhc2UKKyMgSW1wb3J0aW5nIE91dHB1dFdpbmRvdyBmYWlscyBkdWUgdG8gaW1wb3J0IGxvb3AKKyMgRWRpdG9yV2luZG93IC0+IEdyZXBEaWFsb3AgLT4gT3V0cHV0V2luZG93IC0+IEVkaXRvcldpbmRvdwogCiBkZWYgZ3JlcCh0ZXh0LCBpbz1Ob25lLCBmbGlzdD1Ob25lKToKICAgICByb290ID0gdGV4dC5fcm9vdCgpCkBAIC00MCwxMCArNDUsMTAgQEAKIAogICAgIGRlZiBjcmVhdGVfZW50cmllcyhzZWxmKToKICAgICAgICAgU2VhcmNoRGlhbG9nQmFzZS5jcmVhdGVfZW50cmllcyhzZWxmKQotICAgICAgICBzZWxmLmdsb2JlbnQgPSBzZWxmLm1ha2VfZW50cnkoIkluIGZpbGVzOiIsIHNlbGYuZ2xvYnZhcikKKyAgICAgICAgc2VsZi5nbG9iZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJJbiBmaWxlczoiLCBzZWxmLmdsb2J2YXIpWzBdCiAKICAgICBkZWYgY3JlYXRlX290aGVyX2J1dHRvbnMoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLm1ha2VfZnJhbWUoKQorICAgICAgICBmID0gc2VsZi5tYWtlX2ZyYW1lKClbMF0KIAogICAgICAgICBidG4gPSBDaGVja2J1dHRvbihmLCBhbmNob3I9InciLAogICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYucmVjdmFyLApAQCAtNjMsNyArNjgsNyBAQAogICAgICAgICBpZiBub3QgcGF0aDoKICAgICAgICAgICAgIHNlbGYudG9wLmJlbGwoKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZyb20gaWRsZWxpYi5PdXRwdXRXaW5kb3cgaW1wb3J0IE91dHB1dFdpbmRvdworICAgICAgICBmcm9tIGlkbGVsaWIuT3V0cHV0V2luZG93IGltcG9ydCBPdXRwdXRXaW5kb3cgICMgbGVhdmUgaGVyZSEKICAgICAgICAgc2F2ZSA9IHN5cy5zdGRvdXQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3lzLnN0ZG91dCA9IE91dHB1dFdpbmRvdyhzZWxmLmZsaXN0KQpAQCAtNzksMjEgKzg0LDI2IEBACiAgICAgICAgIHBhdCA9IHNlbGYuZW5naW5lLmdldHBhdCgpCiAgICAgICAgIHByaW50KCJTZWFyY2hpbmcgJXIgaW4gJXMgLi4uIiAlIChwYXQsIHBhdGgpKQogICAgICAgICBoaXRzID0gMAotICAgICAgICBmb3IgZm4gaW4gbGlzdDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sIGVycm9ycz0ncmVwbGFjZScpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGYsIDEpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZVstMTpdID09ICdcbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvZy5zZWFyY2gobGluZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiJXM6ICVzOiAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm4sIGxpbmVubywgbGluZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0cyArPSAxCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICBwcmludCgoIkhpdHMgZm91bmQ6ICVzXG4iCi0gICAgICAgICAgICAgICIoSGludDogcmlnaHQtY2xpY2sgdG8gb3BlbiBsb2NhdGlvbnMuKSIKLSAgICAgICAgICAgICAgJSBoaXRzKSBpZiBoaXRzIGVsc2UgIk5vIGhpdHMuIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGZuIGluIGxpc3Q6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sIGVycm9ycz0ncmVwbGFjZScpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShmLCAxKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb2cuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIlczogJXM6ICVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm4sIGxpbmVubywgbGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdHMgKz0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorICAgICAgICAgICAgcHJpbnQoKCJIaXRzIGZvdW5kOiAlc1xuIgorICAgICAgICAgICAgICAgICAgIihIaW50OiByaWdodC1jbGljayB0byBvcGVuIGxvY2F0aW9ucy4pIgorICAgICAgICAgICAgICAgICAgJSBoaXRzKSBpZiBoaXRzIGVsc2UgIk5vIGhpdHMuIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBUayB3aW5kb3cgaGFzIGJlZW4gY2xvc2VkLCBPdXRwdXRXaW5kb3cudGV4dCA9IE5vbmUsCisgICAgICAgICAgICAjIHNvIGluIE9XLndyaXRlLCBPVy50ZXh0Lmluc2VydCBmYWlscy4KKyAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBmaW5kZmlsZXMoc2VsZiwgZGlyLCBiYXNlLCByZWMpOgogICAgICAgICB0cnk6CkBAIC0xMjAsOSArMTMwLDMwIEBACiAgICAgICAgICAgICBzZWxmLnRvcC5ncmFiX3JlbGVhc2UoKQogICAgICAgICAgICAgc2VsZi50b3Aud2l0aGRyYXcoKQogCisKK2RlZiBfZ3JlcF9kaWFsb2cocGFyZW50KTogICMgZm9yIGh0ZXN0CisgICAgZnJvbSBpZGxlbGliLlB5U2hlbGwgaW1wb3J0IFB5U2hlbGxGaWxlTGlzdAorICAgIHJvb3QgPSBUaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBHcmVwRGlhbG9nIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisKKyAgICBmbGlzdCA9IFB5U2hlbGxGaWxlTGlzdChyb290KQorICAgIHRleHQgPSBUZXh0KHJvb3QsIGhlaWdodD01KQorICAgIHRleHQucGFjaygpCisKKyAgICBkZWYgc2hvd19ncmVwX2RpYWxvZygpOgorICAgICAgICB0ZXh0LnRhZ19hZGQoU0VMLCAiMS4wIiwgRU5EKQorICAgICAgICBncmVwKHRleHQsIGZsaXN0PWZsaXN0KQorICAgICAgICB0ZXh0LnRhZ19yZW1vdmUoU0VMLCAiMS4wIiwgRU5EKQorCisgICAgYnV0dG9uID0gQnV0dG9uKHJvb3QsIHRleHQ9IlNob3cgR3JlcERpYWxvZyIsIGNvbW1hbmQ9c2hvd19ncmVwX2RpYWxvZykKKyAgICBidXR0b24ucGFjaygpCisgICAgcm9vdC5tYWlubG9vcCgpCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgIyBBIGh1bWFuIHRlc3QgaXMgYSBiaXQgdHJpY2t5IHNpbmNlIEVkaXRvcldpbmRvdygpIGltcG9ydHMgdGhpcyBtb2R1bGUuCi0gICAgIyBIZW5jZSBJZGxlIG11c3QgYmUgcmVzdGFydGVkIGFmdGVyIGVkaXRpbmcgdGhpcyBmaWxlIGZvciBhIGxpdmUgdGVzdC4KICAgICBpbXBvcnQgdW5pdHRlc3QKICAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2dyZXAnLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKIAorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfZ3JlcF9kaWFsb2cpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9IeXBlclBhcnNlci5weSBiL0xpYi9pZGxlbGliL0h5cGVyUGFyc2VyLnB5CmluZGV4IDRhZjRiMDguLjc3Y2IwNTcgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0h5cGVyUGFyc2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL0h5cGVyUGFyc2VyLnB5CkBAIC0xLDIzICsxLDMxIEBACi0iIiIKLUh5cGVyUGFyc2VyCi09PT09PT09PT09PQotVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgSHlwZXJQYXJzZXIgY2xhc3MsIHdoaWNoIHByb3ZpZGVzIGFkdmFuY2VkIHBhcnNpbmcKLWFiaWxpdGllcyBmb3IgdGhlIFBhcmVuTWF0Y2ggYW5kIG90aGVyIGV4dGVuc2lvbnMuCi1UaGUgSHlwZXJQYXJzZXIgdXNlcyBQeVBhcnNlci4gUHlQYXJzZXIgaXMgaW50ZW5kZWQgbW9zdGx5IHRvIGdpdmUgaW5mb3JtYXRpb24KLW9uIHRoZSBwcm9wZXIgaW5kZW50YXRpb24gb2YgY29kZS4gSHlwZXJQYXJzZXIgZ2l2ZXMgc29tZSBpbmZvcm1hdGlvbiBvbiB0aGUKLXN0cnVjdHVyZSBvZiBjb2RlLCB1c2VkIGJ5IGV4dGVuc2lvbnMgdG8gaGVscCB0aGUgdXNlci4KKyIiIlByb3ZpZGUgYWR2YW5jZWQgcGFyc2luZyBhYmlsaXRpZXMgZm9yIFBhcmVuTWF0Y2ggYW5kIG90aGVyIGV4dGVuc2lvbnMuCisKK0h5cGVyUGFyc2VyIHVzZXMgUHlQYXJzZXIuICBQeVBhcnNlciBtb3N0bHkgZ2l2ZXMgaW5mb3JtYXRpb24gb24gdGhlCitwcm9wZXIgaW5kZW50YXRpb24gb2YgY29kZS4gIEh5cGVyUGFyc2VyIGdpdmVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24KK3RoZSBzdHJ1Y3R1cmUgb2YgY29kZS4KICIiIgogCiBpbXBvcnQgc3RyaW5nCi1pbXBvcnQga2V5d29yZAorZnJvbSBrZXl3b3JkIGltcG9ydCBpc2tleXdvcmQKIGZyb20gaWRsZWxpYiBpbXBvcnQgUHlQYXJzZQogCi1jbGFzcyBIeXBlclBhcnNlcjoKIAorIyBhbGwgQVNDSUkgY2hhcnMgdGhhdCBtYXkgYmUgaW4gYW4gaWRlbnRpZmllcgorX0FTQ0lJX0lEX0NIQVJTID0gZnJvemVuc2V0KHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICJfIikKKyMgYWxsIEFTQ0lJIGNoYXJzIHRoYXQgbWF5IGJlIHRoZSBmaXJzdCBjaGFyIG9mIGFuIGlkZW50aWZpZXIKK19BU0NJSV9JRF9GSVJTVF9DSEFSUyA9IGZyb3plbnNldChzdHJpbmcuYXNjaWlfbGV0dGVycyArICJfIikKKworIyBsb29rdXAgdGFibGUgZm9yIHdoZXRoZXIgNy1iaXQgQVNDSUkgY2hhcnMgYXJlIHZhbGlkIGluIGEgUHl0aG9uIGlkZW50aWZpZXIKK19JU19BU0NJSV9JRF9DSEFSID0gWyhjaHIoeCkgaW4gX0FTQ0lJX0lEX0NIQVJTKSBmb3IgeCBpbiByYW5nZSgxMjgpXQorIyBsb29rdXAgdGFibGUgZm9yIHdoZXRoZXIgNy1iaXQgQVNDSUkgY2hhcnMgYXJlIHZhbGlkIGFzIHRoZSBmaXJzdAorIyBjaGFyIGluIGEgUHl0aG9uIGlkZW50aWZpZXIKK19JU19BU0NJSV9JRF9GSVJTVF9DSEFSID0gXAorICAgIFsoY2hyKHgpIGluIF9BU0NJSV9JRF9GSVJTVF9DSEFSUykgZm9yIHggaW4gcmFuZ2UoMTI4KV0KKworCitjbGFzcyBIeXBlclBhcnNlcjoKICAgICBkZWYgX19pbml0X18oc2VsZiwgZWRpdHdpbiwgaW5kZXgpOgotICAgICAgICAiIiJJbml0aWFsaXplIHRoZSBIeXBlclBhcnNlciB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZ3Mgb2YgdGhlIGdpdmVuCi0gICAgICAgIGluZGV4LgotICAgICAgICAiIiIKKyAgICAgICAgIlRvIGluaXRpYWxpemUsIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5ncyBvZiB0aGUgZ2l2ZW4gaW5kZXguIgogCiAgICAgICAgIHNlbGYuZWRpdHdpbiA9IGVkaXR3aW4KICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dCA9IGVkaXR3aW4udGV4dApAQCAtMzMsOSArNDEsMTAgQEAKICAgICAgICAgICAgICAgICBzdGFydGF0ID0gbWF4KGxubyAtIGNvbnRleHQsIDEpCiAgICAgICAgICAgICAgICAgc3RhcnRhdGluZGV4ID0gcmVwcihzdGFydGF0KSArICIuMCIKICAgICAgICAgICAgICAgICBzdG9wYXRpbmRleCA9ICIlZC5lbmQiICUgbG5vCi0gICAgICAgICAgICAgICAgIyBXZSBhZGQgdGhlIG5ld2xpbmUgYmVjYXVzZSBQeVBhcnNlIHJlcXVpcmVzIGEgbmV3bGluZSBhdCBlbmQuCi0gICAgICAgICAgICAgICAgIyBXZSBhZGQgYSBzcGFjZSBzbyB0aGF0IGluZGV4IHdvbid0IGJlIGF0IGVuZCBvZiBsaW5lLCBzbyB0aGF0Ci0gICAgICAgICAgICAgICAgIyBpdHMgc3RhdHVzIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGNoYXIgYmVmb3JlIGl0LCBpZiBzaG91bGQuCisgICAgICAgICAgICAgICAgIyBXZSBhZGQgdGhlIG5ld2xpbmUgYmVjYXVzZSBQeVBhcnNlIHJlcXVpcmVzIGEgbmV3bGluZQorICAgICAgICAgICAgICAgICMgYXQgZW5kLiBXZSBhZGQgYSBzcGFjZSBzbyB0aGF0IGluZGV4IHdvbid0IGJlIGF0IGVuZAorICAgICAgICAgICAgICAgICMgb2YgbGluZSwgc28gdGhhdCBpdHMgc3RhdHVzIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgIyBjaGFyIGJlZm9yZSBpdCwgaWYgc2hvdWxkLgogICAgICAgICAgICAgICAgIHBhcnNlci5zZXRfc3RyKHRleHQuZ2V0KHN0YXJ0YXRpbmRleCwgc3RvcGF0aW5kZXgpKycgXG4nKQogICAgICAgICAgICAgICAgIGJvZCA9IHBhcnNlci5maW5kX2dvb2RfcGFyc2Vfc3RhcnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXR3aW4uX2J1aWxkX2NoYXJfaW5fc3RyaW5nX2Z1bmMoc3RhcnRhdGluZGV4KSkKQEAgLTQ5LDEyMiArNTgsMTc1IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHN0YXJ0YXRpbmRleCA9ICIxLjAiCiAgICAgICAgICAgICBzdG9wYXRpbmRleCA9ICIlZC5lbmQiICUgbG5vCi0gICAgICAgICAgICAjIFdlIGFkZCB0aGUgbmV3bGluZSBiZWNhdXNlIFB5UGFyc2UgcmVxdWlyZXMgYSBuZXdsaW5lIGF0IGVuZC4KLSAgICAgICAgICAgICMgV2UgYWRkIGEgc3BhY2Ugc28gdGhhdCBpbmRleCB3b24ndCBiZSBhdCBlbmQgb2YgbGluZSwgc28gdGhhdAotICAgICAgICAgICAgIyBpdHMgc3RhdHVzIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGNoYXIgYmVmb3JlIGl0LCBpZiBzaG91bGQuCisgICAgICAgICAgICAjIFdlIGFkZCB0aGUgbmV3bGluZSBiZWNhdXNlIFB5UGFyc2UgcmVxdWlyZXMgaXQuIFdlIGFkZCBhCisgICAgICAgICAgICAjIHNwYWNlIHNvIHRoYXQgaW5kZXggd29uJ3QgYmUgYXQgZW5kIG9mIGxpbmUsIHNvIHRoYXQgaXRzCisgICAgICAgICAgICAjIHN0YXR1cyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBjaGFyIGJlZm9yZSBpdCwgaWYgc2hvdWxkLgogICAgICAgICAgICAgcGFyc2VyLnNldF9zdHIodGV4dC5nZXQoc3RhcnRhdGluZGV4LCBzdG9wYXRpbmRleCkrJyBcbicpCiAgICAgICAgICAgICBwYXJzZXIuc2V0X2xvKDApCiAKLSAgICAgICAgIyBXZSB3YW50IHdoYXQgdGhlIHBhcnNlciBoYXMsIGV4Y2VwdCBmb3IgdGhlIGxhc3QgbmV3bGluZSBhbmQgc3BhY2UuCisgICAgICAgICMgV2Ugd2FudCB3aGF0IHRoZSBwYXJzZXIgaGFzLCBtaW51cyB0aGUgbGFzdCBuZXdsaW5lIGFuZCBzcGFjZS4KICAgICAgICAgc2VsZi5yYXd0ZXh0ID0gcGFyc2VyLnN0cls6LTJdCi0gICAgICAgICMgQXMgZmFyIGFzIEkgY2FuIHNlZSwgcGFyc2VyLnN0ciBwcmVzZXJ2ZXMgdGhlIHN0YXRlbWVudCB3ZSBhcmUgaW4sCi0gICAgICAgICMgc28gdGhhdCBzdG9wYXRpbmRleCBjYW4gYmUgdXNlZCB0byBzeW5jaHJvbml6ZSB0aGUgc3RyaW5nIHdpdGggdGhlCi0gICAgICAgICMgdGV4dCBib3ggaW5kaWNlcy4KKyAgICAgICAgIyBQYXJzZXIuc3RyIGFwcGFyZW50bHkgcHJlc2VydmVzIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIGluLCBzbworICAgICAgICAjIHRoYXQgc3RvcGF0aW5kZXggY2FuIGJlIHVzZWQgdG8gc3luY2hyb25pemUgdGhlIHN0cmluZyB3aXRoCisgICAgICAgICMgdGhlIHRleHQgYm94IGluZGljZXMuCiAgICAgICAgIHNlbGYuc3RvcGF0aW5kZXggPSBzdG9wYXRpbmRleAogICAgICAgICBzZWxmLmJyYWNrZXRpbmcgPSBwYXJzZXIuZ2V0X2xhc3Rfc3RtdF9icmFja2V0aW5nKCkKLSAgICAgICAgIyBmaW5kIHdoaWNoIHBhaXJzIG9mIGJyYWNrZXRpbmcgYXJlIG9wZW5lcnMuIFRoZXNlIGFsd2F5cyBjb3JyZXNwb25kCi0gICAgICAgICMgdG8gYSBjaGFyYWN0ZXIgb2YgcmF3dGV4dC4KLSAgICAgICAgc2VsZi5pc29wZW5lciA9IFtpPjAgYW5kIHNlbGYuYnJhY2tldGluZ1tpXVsxXSA+IHNlbGYuYnJhY2tldGluZ1tpLTFdWzFdCisgICAgICAgICMgZmluZCB3aGljaCBwYWlycyBvZiBicmFja2V0aW5nIGFyZSBvcGVuZXJzLiBUaGVzZSBhbHdheXMKKyAgICAgICAgIyBjb3JyZXNwb25kIHRvIGEgY2hhcmFjdGVyIG9mIHJhd3RleHQuCisgICAgICAgIHNlbGYuaXNvcGVuZXIgPSBbaT4wIGFuZCBzZWxmLmJyYWNrZXRpbmdbaV1bMV0gPgorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tpLTFdWzFdCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYuYnJhY2tldGluZykpXQogCiAgICAgICAgIHNlbGYuc2V0X2luZGV4KGluZGV4KQogCiAgICAgZGVmIHNldF9pbmRleChzZWxmLCBpbmRleCk6Ci0gICAgICAgICIiIlNldCB0aGUgaW5kZXggdG8gd2hpY2ggdGhlIGZ1bmN0aW9ucyByZWxhdGUuIE5vdGUgdGhhdCBpdCBtdXN0IGJlCi0gICAgICAgIGluIHRoZSBzYW1lIHN0YXRlbWVudC4KKyAgICAgICAgIiIiU2V0IHRoZSBpbmRleCB0byB3aGljaCB0aGUgZnVuY3Rpb25zIHJlbGF0ZS4KKworICAgICAgICBUaGUgaW5kZXggbXVzdCBiZSBpbiB0aGUgc2FtZSBzdGF0ZW1lbnQuCiAgICAgICAgICIiIgotICAgICAgICBpbmRleGlucmF3dGV4dCA9IFwKLSAgICAgICAgICAgIGxlbihzZWxmLnJhd3RleHQpIC0gbGVuKHNlbGYudGV4dC5nZXQoaW5kZXgsIHNlbGYuc3RvcGF0aW5kZXgpKQorICAgICAgICBpbmRleGlucmF3dGV4dCA9IChsZW4oc2VsZi5yYXd0ZXh0KSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLnRleHQuZ2V0KGluZGV4LCBzZWxmLnN0b3BhdGluZGV4KSkpCiAgICAgICAgIGlmIGluZGV4aW5yYXd0ZXh0IDwgMDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRoZSBpbmRleCBnaXZlbiBpcyBiZWZvcmUgdGhlIGFuYWx5emVkIHN0YXRlbWVudCIpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbmRleCAlcyBwcmVjZWRlcyB0aGUgYW5hbHl6ZWQgc3RhdGVtZW50IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGluZGV4KQogICAgICAgICBzZWxmLmluZGV4aW5yYXd0ZXh0ID0gaW5kZXhpbnJhd3RleHQKICAgICAgICAgIyBmaW5kIHRoZSByaWdodG1vc3QgYnJhY2tldCB0byB3aGljaCBpbmRleCBiZWxvbmdzCiAgICAgICAgIHNlbGYuaW5kZXhicmFja2V0ID0gMAotICAgICAgICB3aGlsZSBzZWxmLmluZGV4YnJhY2tldCA8IGxlbihzZWxmLmJyYWNrZXRpbmcpLTEgYW5kIFwKLSAgICAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0KzFdWzBdIDwgc2VsZi5pbmRleGlucmF3dGV4dDoKKyAgICAgICAgd2hpbGUgKHNlbGYuaW5kZXhicmFja2V0IDwgbGVuKHNlbGYuYnJhY2tldGluZyktMSBhbmQKKyAgICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldCsxXVswXSA8IHNlbGYuaW5kZXhpbnJhd3RleHQpOgogICAgICAgICAgICAgc2VsZi5pbmRleGJyYWNrZXQgKz0gMQotICAgICAgICBpZiBzZWxmLmluZGV4YnJhY2tldCA8IGxlbihzZWxmLmJyYWNrZXRpbmcpLTEgYW5kIFwKLSAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0KzFdWzBdID09IHNlbGYuaW5kZXhpbnJhd3RleHQgYW5kIFwKLSAgICAgICAgICAgbm90IHNlbGYuaXNvcGVuZXJbc2VsZi5pbmRleGJyYWNrZXQrMV06CisgICAgICAgIGlmIChzZWxmLmluZGV4YnJhY2tldCA8IGxlbihzZWxmLmJyYWNrZXRpbmcpLTEgYW5kCisgICAgICAgICAgICBzZWxmLmJyYWNrZXRpbmdbc2VsZi5pbmRleGJyYWNrZXQrMV1bMF0gPT0gc2VsZi5pbmRleGlucmF3dGV4dCBhbmQKKyAgICAgICAgICAgbm90IHNlbGYuaXNvcGVuZXJbc2VsZi5pbmRleGJyYWNrZXQrMV0pOgogICAgICAgICAgICAgc2VsZi5pbmRleGJyYWNrZXQgKz0gMQogCiAgICAgZGVmIGlzX2luX3N0cmluZyhzZWxmKToKLSAgICAgICAgIiIiSXMgdGhlIGluZGV4IGdpdmVuIHRvIHRoZSBIeXBlclBhcnNlciBpcyBpbiBhIHN0cmluZz8iIiIKKyAgICAgICAgIiIiSXMgdGhlIGluZGV4IGdpdmVuIHRvIHRoZSBIeXBlclBhcnNlciBpbiBhIHN0cmluZz8iIiIKICAgICAgICAgIyBUaGUgYnJhY2tldCB0byB3aGljaCB3ZSBiZWxvbmcgc2hvdWxkIGJlIGFuIG9wZW5lci4KICAgICAgICAgIyBJZiBpdCdzIGFuIG9wZW5lciwgaXQgaGFzIHRvIGhhdmUgYSBjaGFyYWN0ZXIuCi0gICAgICAgIHJldHVybiBzZWxmLmlzb3BlbmVyW3NlbGYuaW5kZXhicmFja2V0XSBhbmQgXAotICAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldF1bMF1dIGluICgnIicsICInIikKKyAgICAgICAgcmV0dXJuIChzZWxmLmlzb3BlbmVyW3NlbGYuaW5kZXhicmFja2V0XSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLnJhd3RleHRbc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0XVswXV0KKyAgICAgICAgICAgICAgICBpbiAoJyInLCAiJyIpKQogCiAgICAgZGVmIGlzX2luX2NvZGUoc2VsZik6Ci0gICAgICAgICIiIklzIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaXMgaW4gYSBub3JtYWwgY29kZT8iIiIKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzb3BlbmVyW3NlbGYuaW5kZXhicmFja2V0XSBvciBcCi0gICAgICAgICAgICAgICBzZWxmLnJhd3RleHRbc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0XVswXV0gbm90IGluIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJyMnLCAnIicsICInIikKKyAgICAgICAgIiIiSXMgdGhlIGluZGV4IGdpdmVuIHRvIHRoZSBIeXBlclBhcnNlciBpbiBub3JtYWwgY29kZT8iIiIKKyAgICAgICAgcmV0dXJuIChub3Qgc2VsZi5pc29wZW5lcltzZWxmLmluZGV4YnJhY2tldF0gb3IKKyAgICAgICAgICAgICAgICBzZWxmLnJhd3RleHRbc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0XVswXV0KKyAgICAgICAgICAgICAgICBub3QgaW4gKCcjJywgJyInLCAiJyIpKQogCiAgICAgZGVmIGdldF9zdXJyb3VuZGluZ19icmFja2V0cyhzZWxmLCBvcGVuZXJzPScoW3snLCBtdXN0Y2xvc2U9RmFsc2UpOgotICAgICAgICAiIiJJZiB0aGUgaW5kZXggZ2l2ZW4gdG8gdGhlIEh5cGVyUGFyc2VyIGlzIHN1cnJvdW5kZWQgYnkgYSBicmFja2V0Ci0gICAgICAgIGRlZmluZWQgaW4gb3BlbmVycyAob3IgYXQgbGVhc3QgaGFzIG9uZSBiZWZvcmUgaXQpLCByZXR1cm4gdGhlCi0gICAgICAgIGluZGljZXMgb2YgdGhlIG9wZW5pbmcgYnJhY2tldCBhbmQgdGhlIGNsb3NpbmcgYnJhY2tldCAob3IgdGhlCi0gICAgICAgIGVuZCBvZiBsaW5lLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QpLgotICAgICAgICBJZiBpdCBpcyBub3Qgc3Vycm91bmRlZCBieSBicmFja2V0cywgb3IgdGhlIGVuZCBvZiBsaW5lIGNvbWVzIGJlZm9yZQotICAgICAgICB0aGUgY2xvc2luZyBicmFja2V0IGFuZCBtdXN0Y2xvc2UgaXMgVHJ1ZSwgcmV0dXJucyBOb25lLgorICAgICAgICAiIiJSZXR1cm4gYnJhY2tldCBpbmRleGVzIG9yIE5vbmUuCisKKyAgICAgICAgSWYgdGhlIGluZGV4IGdpdmVuIHRvIHRoZSBIeXBlclBhcnNlciBpcyBzdXJyb3VuZGVkIGJ5IGEKKyAgICAgICAgYnJhY2tldCBkZWZpbmVkIGluIG9wZW5lcnMgKG9yIGF0IGxlYXN0IGhhcyBvbmUgYmVmb3JlIGl0KSwKKyAgICAgICAgcmV0dXJuIHRoZSBpbmRpY2VzIG9mIHRoZSBvcGVuaW5nIGJyYWNrZXQgYW5kIHRoZSBjbG9zaW5nCisgICAgICAgIGJyYWNrZXQgKG9yIHRoZSBlbmQgb2YgbGluZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0KS4KKworICAgICAgICBJZiBpdCBpcyBub3Qgc3Vycm91bmRlZCBieSBicmFja2V0cywgb3IgdGhlIGVuZCBvZiBsaW5lIGNvbWVzCisgICAgICAgIGJlZm9yZSB0aGUgY2xvc2luZyBicmFja2V0IGFuZCBtdXN0Y2xvc2UgaXMgVHJ1ZSwgcmV0dXJucyBOb25lLgogICAgICAgICAiIiIKKwogICAgICAgICBicmFja2V0aW5nbGV2ZWwgPSBzZWxmLmJyYWNrZXRpbmdbc2VsZi5pbmRleGJyYWNrZXRdWzFdCiAgICAgICAgIGJlZm9yZSA9IHNlbGYuaW5kZXhicmFja2V0Ci0gICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzb3BlbmVyW2JlZm9yZV0gb3IgXAotICAgICAgICAgICAgICBzZWxmLnJhd3RleHRbc2VsZi5icmFja2V0aW5nW2JlZm9yZV1bMF1dIG5vdCBpbiBvcGVuZXJzIG9yIFwKLSAgICAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW2JlZm9yZV1bMV0gPiBicmFja2V0aW5nbGV2ZWw6CisgICAgICAgIHdoaWxlIChub3Qgc2VsZi5pc29wZW5lcltiZWZvcmVdIG9yCisgICAgICAgICAgICAgIHNlbGYucmF3dGV4dFtzZWxmLmJyYWNrZXRpbmdbYmVmb3JlXVswXV0gbm90IGluIG9wZW5lcnMgb3IKKyAgICAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW2JlZm9yZV1bMV0gPiBicmFja2V0aW5nbGV2ZWwpOgogICAgICAgICAgICAgYmVmb3JlIC09IDEKICAgICAgICAgICAgIGlmIGJlZm9yZSA8IDA6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGJyYWNrZXRpbmdsZXZlbCA9IG1pbihicmFja2V0aW5nbGV2ZWwsIHNlbGYuYnJhY2tldGluZ1tiZWZvcmVdWzFdKQogICAgICAgICBhZnRlciA9IHNlbGYuaW5kZXhicmFja2V0ICsgMQotICAgICAgICB3aGlsZSBhZnRlciA8IGxlbihzZWxmLmJyYWNrZXRpbmcpIGFuZCBcCi0gICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1thZnRlcl1bMV0gPj0gYnJhY2tldGluZ2xldmVsOgorICAgICAgICB3aGlsZSAoYWZ0ZXIgPCBsZW4oc2VsZi5icmFja2V0aW5nKSBhbmQKKyAgICAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW2FmdGVyXVsxXSA+PSBicmFja2V0aW5nbGV2ZWwpOgogICAgICAgICAgICAgYWZ0ZXIgKz0gMQogCiAgICAgICAgIGJlZm9yZWluZGV4ID0gc2VsZi50ZXh0LmluZGV4KCIlcy0lZGMiICUKICAgICAgICAgICAgIChzZWxmLnN0b3BhdGluZGV4LCBsZW4oc2VsZi5yYXd0ZXh0KS1zZWxmLmJyYWNrZXRpbmdbYmVmb3JlXVswXSkpCi0gICAgICAgIGlmIGFmdGVyID49IGxlbihzZWxmLmJyYWNrZXRpbmcpIG9yIFwKLSAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW2FmdGVyXVswXSA+IGxlbihzZWxmLnJhd3RleHQpOgorICAgICAgICBpZiAoYWZ0ZXIgPj0gbGVuKHNlbGYuYnJhY2tldGluZykgb3IKKyAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW2FmdGVyXVswXSA+IGxlbihzZWxmLnJhd3RleHQpKToKICAgICAgICAgICAgIGlmIG11c3RjbG9zZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgYWZ0ZXJpbmRleCA9IHNlbGYuc3RvcGF0aW5kZXgKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgV2UgYXJlIGFmdGVyIGEgcmVhbCBjaGFyLCBzbyBpdCBpcyBhICcpJyBhbmQgd2UgZ2l2ZSB0aGUgaW5kZXgKLSAgICAgICAgICAgICMgYmVmb3JlIGl0LgotICAgICAgICAgICAgYWZ0ZXJpbmRleCA9IHNlbGYudGV4dC5pbmRleCgiJXMtJWRjIiAlCi0gICAgICAgICAgICAgICAgKHNlbGYuc3RvcGF0aW5kZXgsCisgICAgICAgICAgICAjIFdlIGFyZSBhZnRlciBhIHJlYWwgY2hhciwgc28gaXQgaXMgYSAnKScgYW5kIHdlIGdpdmUgdGhlCisgICAgICAgICAgICAjIGluZGV4IGJlZm9yZSBpdC4KKyAgICAgICAgICAgIGFmdGVyaW5kZXggPSBzZWxmLnRleHQuaW5kZXgoCisgICAgICAgICAgICAgICAgIiVzLSVkYyIgJSAoc2VsZi5zdG9wYXRpbmRleCwKICAgICAgICAgICAgICAgICAgbGVuKHNlbGYucmF3dGV4dCktKHNlbGYuYnJhY2tldGluZ1thZnRlcl1bMF0tMSkpKQogCiAgICAgICAgIHJldHVybiBiZWZvcmVpbmRleCwgYWZ0ZXJpbmRleAogCi0gICAgIyBUaGlzIHN0cmluZyBpbmNsdWRlcyBhbGwgY2hhcnMgdGhhdCBtYXkgYmUgaW4gYSB3aGl0ZSBzcGFjZQotICAgIF93aGl0ZXNwYWNlX2NoYXJzID0gIiBcdFxuXFwiCi0gICAgIyBUaGlzIHN0cmluZyBpbmNsdWRlcyBhbGwgY2hhcnMgdGhhdCBtYXkgYmUgaW4gYW4gaWRlbnRpZmllcgotICAgIF9pZF9jaGFycyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICJfIgotICAgICMgVGhpcyBzdHJpbmcgaW5jbHVkZXMgYWxsIGNoYXJzIHRoYXQgbWF5IGJlIHRoZSBmaXJzdCBjaGFyIG9mIGFuIGlkZW50aWZpZXIKLSAgICBfaWRfZmlyc3RfY2hhcnMgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArICJfIgorICAgICMgdGhlIHNldCBvZiBidWlsdC1pbiBpZGVudGlmaWVycyB3aGljaCBhcmUgYWxzbyBrZXl3b3JkcywKKyAgICAjIGkuZS4ga2V5d29yZC5pc2tleXdvcmQoKSByZXR1cm5zIFRydWUgZm9yIHRoZW0KKyAgICBfSURfS0VZV09SRFMgPSBmcm96ZW5zZXQoeyJUcnVlIiwgIkZhbHNlIiwgIk5vbmUifSkKIAotICAgICMgR2l2ZW4gYSBzdHJpbmcgYW5kIHBvcywgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcnMgaW4gdGhlIGlkZW50aWZpZXIKLSAgICAjIHdoaWNoIGVuZHMgYXQgcG9zLCBvciAwIGlmIHRoZXJlIGlzIG5vIHN1Y2ggb25lLiBTYXZlZCB3b3JkcyBhcmUgbm90Ci0gICAgIyBpZGVudGlmaWVycy4KLSAgICBkZWYgX2VhdF9pZGVudGlmaWVyKHNlbGYsIHN0ciwgbGltaXQsIHBvcyk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9lYXRfaWRlbnRpZmllcihjbHMsIHN0ciwgbGltaXQsIHBvcyk6CisgICAgICAgICIiIkdpdmVuIGEgc3RyaW5nIGFuZCBwb3MsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJzIGluIHRoZQorICAgICAgICBpZGVudGlmaWVyIHdoaWNoIGVuZHMgYXQgcG9zLCBvciAwIGlmIHRoZXJlIGlzIG5vIHN1Y2ggb25lLgorCisgICAgICAgIFRoaXMgaWdub3JlcyBub24taWRlbnRpZmllciBleXdvcmRzIGFyZSBub3QgaWRlbnRpZmllcnMuCisgICAgICAgICIiIgorICAgICAgICBpc19hc2NpaV9pZF9jaGFyID0gX0lTX0FTQ0lJX0lEX0NIQVIKKworICAgICAgICAjIFN0YXJ0IGF0IHRoZSBlbmQgKHBvcykgYW5kIHdvcmsgYmFja3dhcmRzLgogICAgICAgICBpID0gcG9zCi0gICAgICAgIHdoaWxlIGkgPiBsaW1pdCBhbmQgc3RyW2ktMV0gaW4gc2VsZi5faWRfY2hhcnM6CisKKyAgICAgICAgIyBHbyBiYWNrd2FyZHMgYXMgbG9uZyBhcyB0aGUgY2hhcmFjdGVycyBhcmUgdmFsaWQgQVNDSUkKKyAgICAgICAgIyBpZGVudGlmaWVyIGNoYXJhY3RlcnMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCBzaW5jZSBpdAorICAgICAgICAjIGlzIGZhc3RlciBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgbW9zdCBvZiB0aGUgY2hhcmFjdGVycworICAgICAgICAjIGFyZSBBU0NJSS4KKyAgICAgICAgd2hpbGUgaSA+IGxpbWl0IGFuZCAoCisgICAgICAgICAgICAgICAgb3JkKHN0cltpIC0gMV0pIDwgMTI4IGFuZAorICAgICAgICAgICAgICAgIGlzX2FzY2lpX2lkX2NoYXJbb3JkKHN0cltpIC0gMV0pXQorICAgICAgICApOgogICAgICAgICAgICAgaSAtPSAxCi0gICAgICAgIGlmIGkgPCBwb3MgYW5kIChzdHJbaV0gbm90IGluIHNlbGYuX2lkX2ZpcnN0X2NoYXJzIG9yIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQuaXNrZXl3b3JkKHN0cltpOnBvc10pKToKLSAgICAgICAgICAgIGkgPSBwb3MKKworICAgICAgICAjIElmIHRoZSBhYm92ZSBsb29wIGVuZGVkIGR1ZSB0byByZWFjaGluZyBhIG5vbi1BU0NJSQorICAgICAgICAjIGNoYXJhY3RlciwgY29udGludWUgZ29pbmcgYmFja3dhcmRzIHVzaW5nIHRoZSBtb3N0IGdlbmVyaWMKKyAgICAgICAgIyB0ZXN0IGZvciB3aGV0aGVyIGEgc3RyaW5nIGNvbnRhaW5zIG9ubHkgdmFsaWQgaWRlbnRpZmllcgorICAgICAgICAjIGNoYXJhY3RlcnMuCisgICAgICAgIGlmIGkgPiBsaW1pdCBhbmQgb3JkKHN0cltpIC0gMV0pID49IDEyODoKKyAgICAgICAgICAgIHdoaWxlIGkgLSA0ID49IGxpbWl0IGFuZCAoJ2EnICsgc3RyW2kgLSA0OnBvc10pLmlzaWRlbnRpZmllcigpOgorICAgICAgICAgICAgICAgIGkgLT0gNAorICAgICAgICAgICAgaWYgaSAtIDIgPj0gbGltaXQgYW5kICgnYScgKyBzdHJbaSAtIDI6cG9zXSkuaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICAgICAgaSAtPSAyCisgICAgICAgICAgICBpZiBpIC0gMSA+PSBsaW1pdCBhbmQgKCdhJyArIHN0cltpIC0gMTpwb3NdKS5pc2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgICAgICBpIC09IDEKKworICAgICAgICAgICAgIyBUaGUgaWRlbnRpZmllciBjYW5kaWRhdGUgc3RhcnRzIGhlcmUuIElmIGl0IGlzbid0IGEgdmFsaWQKKyAgICAgICAgICAgICMgaWRlbnRpZmllciwgZG9uJ3QgZWF0IGFueXRoaW5nLiBBdCB0aGlzIHBvaW50IHRoYXQgaXMgb25seQorICAgICAgICAgICAgIyBwb3NzaWJsZSBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzbid0IGEgdmFsaWQgZmlyc3QKKyAgICAgICAgICAgICMgY2hhcmFjdGVyIGZvciBhbiBpZGVudGlmaWVyLgorICAgICAgICAgICAgaWYgbm90IHN0cltpOnBvc10uaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxpZiBpIDwgcG9zOgorICAgICAgICAgICAgIyBBbGwgY2hhcmFjdGVycyBpbiBzdHJbaTpwb3NdIGFyZSB2YWxpZCBBU0NJSSBpZGVudGlmaWVyCisgICAgICAgICAgICAjIGNoYXJhY3RlcnMsIHNvIGl0IGlzIGVub3VnaCB0byBjaGVjayB0aGF0IHRoZSBmaXJzdCBpcworICAgICAgICAgICAgIyB2YWxpZCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGFuIGlkZW50aWZpZXIuCisgICAgICAgICAgICBpZiBub3QgX0lTX0FTQ0lJX0lEX0ZJUlNUX0NIQVJbb3JkKHN0cltpXSldOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgIyBBbGwga2V5d29yZHMgYXJlIHZhbGlkIGlkZW50aWZpZXJzLCBidXQgc2hvdWxkIG5vdCBiZQorICAgICAgICAjIGNvbnNpZGVyZWQgaWRlbnRpZmllcnMgaGVyZSwgZXhjZXB0IGZvciBUcnVlLCBGYWxzZSBhbmQgTm9uZS4KKyAgICAgICAgaWYgaSA8IHBvcyBhbmQgKAorICAgICAgICAgICAgICAgIGlza2V5d29yZChzdHJbaTpwb3NdKSBhbmQKKyAgICAgICAgICAgICAgICBzdHJbaTpwb3NdIG5vdCBpbiBjbHMuX0lEX0tFWVdPUkRTCisgICAgICAgICk6CisgICAgICAgICAgICByZXR1cm4gMAorCiAgICAgICAgIHJldHVybiBwb3MgLSBpCiAKKyAgICAjIFRoaXMgc3RyaW5nIGluY2x1ZGVzIGFsbCBjaGFycyB0aGF0IG1heSBiZSBpbiBhIHdoaXRlIHNwYWNlCisgICAgX3doaXRlc3BhY2VfY2hhcnMgPSAiIFx0XG5cXCIKKwogICAgIGRlZiBnZXRfZXhwcmVzc2lvbihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIFB5dGhvbiBleHByZXNzaW9uIHdoaWNoIGVuZHMgYXQgdGhlIGdpdmVuCi0gICAgICAgIGluZGV4LCB3aGljaCBpcyBlbXB0eSBpZiB0aGVyZSBpcyBubyByZWFsIG9uZS4KKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIFB5dGhvbiBleHByZXNzaW9uIHdoaWNoIGVuZHMgYXQgdGhlCisgICAgICAgIGdpdmVuIGluZGV4LCB3aGljaCBpcyBlbXB0eSBpZiB0aGVyZSBpcyBubyByZWFsIG9uZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2luX2NvZGUoKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImdldF9leHByZXNzaW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBpbmRleCAiXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXMgaW5zaWRlIGEgY29kZS4iKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZ2V0X2V4cHJlc3Npb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWYgaW5kZXggaXMgaW5zaWRlIGEgY29kZS4iKQogCiAgICAgICAgIHJhd3RleHQgPSBzZWxmLnJhd3RleHQKICAgICAgICAgYnJhY2tldGluZyA9IHNlbGYuYnJhY2tldGluZwpAQCAtMTc3LDIwICsyMzksMjAgQEAKICAgICAgICAgcG9zdGRvdF9waGFzZSA9IFRydWUKIAogICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgIyBFYXQgd2hpdGVzcGFjZXMsIGNvbW1lbnRzLCBhbmQgaWYgcG9zdGRvdF9waGFzZSBpcyBGYWxzZSAtIG9uZSBkb3QKKyAgICAgICAgICAgICMgRWF0IHdoaXRlc3BhY2VzLCBjb21tZW50cywgYW5kIGlmIHBvc3Rkb3RfcGhhc2UgaXMgRmFsc2UgLSBhIGRvdAogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICBpZiBwb3M+YnJja19saW1pdCBhbmQgcmF3dGV4dFtwb3MtMV0gaW4gc2VsZi5fd2hpdGVzcGFjZV9jaGFyczoKICAgICAgICAgICAgICAgICAgICAgIyBFYXQgYSB3aGl0ZXNwYWNlCiAgICAgICAgICAgICAgICAgICAgIHBvcyAtPSAxCi0gICAgICAgICAgICAgICAgZWxpZiBub3QgcG9zdGRvdF9waGFzZSBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgcG9zID4gYnJja19saW1pdCBhbmQgcmF3dGV4dFtwb3MtMV0gPT0gJy4nOgorICAgICAgICAgICAgICAgIGVsaWYgKG5vdCBwb3N0ZG90X3BoYXNlIGFuZAorICAgICAgICAgICAgICAgICAgICAgIHBvcyA+IGJyY2tfbGltaXQgYW5kIHJhd3RleHRbcG9zLTFdID09ICcuJyk6CiAgICAgICAgICAgICAgICAgICAgICMgRWF0IGEgZG90CiAgICAgICAgICAgICAgICAgICAgIHBvcyAtPSAxCiAgICAgICAgICAgICAgICAgICAgIHBvc3Rkb3RfcGhhc2UgPSBUcnVlCi0gICAgICAgICAgICAgICAgIyBUaGUgbmV4dCBsaW5lIHdpbGwgZmFpbCBpZiB3ZSBhcmUgKmluc2lkZSogYSBjb21tZW50LCBidXQgd2UKLSAgICAgICAgICAgICAgICAjIHNob3VsZG4ndCBiZS4KLSAgICAgICAgICAgICAgICBlbGlmIHBvcyA9PSBicmNrX2xpbWl0IGFuZCBicmNrX2luZGV4ID4gMCBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgcmF3dGV4dFticmFja2V0aW5nW2JyY2tfaW5kZXgtMV1bMF1dID09ICcjJzoKKyAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGxpbmUgd2lsbCBmYWlsIGlmIHdlIGFyZSAqaW5zaWRlKiBhIGNvbW1lbnQsCisgICAgICAgICAgICAgICAgIyBidXQgd2Ugc2hvdWxkbid0IGJlLgorICAgICAgICAgICAgICAgIGVsaWYgKHBvcyA9PSBicmNrX2xpbWl0IGFuZCBicmNrX2luZGV4ID4gMCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICByYXd0ZXh0W2JyYWNrZXRpbmdbYnJja19pbmRleC0xXVswXV0gPT0gJyMnKToKICAgICAgICAgICAgICAgICAgICAgIyBFYXQgYSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgIGJyY2tfaW5kZXggLT0gMgogICAgICAgICAgICAgICAgICAgICBicmNrX2xpbWl0ID0gYnJhY2tldGluZ1ticmNrX2luZGV4XVswXQpAQCAtMjAwLDggKzI2Miw4IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgIGlmIG5vdCBwb3N0ZG90X3BoYXNlOgotICAgICAgICAgICAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBkb3QsIHNvIHRoZSBleHByZXNzaW9uIGVuZCBhdCB0aGUgbGFzdAotICAgICAgICAgICAgICAgICMgaWRlbnRpZmllciBwb3MuCisgICAgICAgICAgICAgICAgIyBXZSBkaWRuJ3QgZmluZCBhIGRvdCwgc28gdGhlIGV4cHJlc3Npb24gZW5kIGF0IHRoZQorICAgICAgICAgICAgICAgICMgbGFzdCBpZGVudGlmaWVyIHBvcy4KICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICByZXQgPSBzZWxmLl9lYXRfaWRlbnRpZmllcihyYXd0ZXh0LCBicmNrX2xpbWl0LCBwb3MpCkBAIC0yMDksMTMgKzI3MSwxMyBAQAogICAgICAgICAgICAgICAgICMgVGhlcmUgaXMgYW4gaWRlbnRpZmllciB0byBlYXQKICAgICAgICAgICAgICAgICBwb3MgPSBwb3MgLSByZXQKICAgICAgICAgICAgICAgICBsYXN0X2lkZW50aWZpZXJfcG9zID0gcG9zCi0gICAgICAgICAgICAgICAgIyBOb3csIGluIG9yZGVyIHRvIGNvbnRpbnVlIHRoZSBzZWFyY2gsIHdlIG11c3QgZmluZCBhIGRvdC4KKyAgICAgICAgICAgICAgICAjIE5vdywgdG8gY29udGludWUgdGhlIHNlYXJjaCwgd2UgbXVzdCBmaW5kIGEgZG90LgogICAgICAgICAgICAgICAgIHBvc3Rkb3RfcGhhc2UgPSBGYWxzZQogICAgICAgICAgICAgICAgICMgKHRoZSBsb29wIGNvbnRpbnVlcyBub3cpCiAKICAgICAgICAgICAgIGVsaWYgcG9zID09IGJyY2tfbGltaXQ6Ci0gICAgICAgICAgICAgICAgIyBXZSBhcmUgYXQgYSBicmFja2V0aW5nIGxpbWl0LiBJZiBpdCBpcyBhIGNsb3NpbmcgYnJhY2tldCwKLSAgICAgICAgICAgICAgICAjIGVhdCB0aGUgYnJhY2tldCwgb3RoZXJ3aXNlLCBzdG9wIHRoZSBzZWFyY2guCisgICAgICAgICAgICAgICAgIyBXZSBhcmUgYXQgYSBicmFja2V0aW5nIGxpbWl0LiBJZiBpdCBpcyBhIGNsb3NpbmcKKyAgICAgICAgICAgICAgICAjIGJyYWNrZXQsIGVhdCB0aGUgYnJhY2tldCwgb3RoZXJ3aXNlLCBzdG9wIHRoZSBzZWFyY2guCiAgICAgICAgICAgICAgICAgbGV2ZWwgPSBicmFja2V0aW5nW2JyY2tfaW5kZXhdWzFdCiAgICAgICAgICAgICAgICAgd2hpbGUgYnJja19pbmRleCA+IDAgYW5kIGJyYWNrZXRpbmdbYnJja19pbmRleC0xXVsxXSA+IGxldmVsOgogICAgICAgICAgICAgICAgICAgICBicmNrX2luZGV4IC09IDEKQEAgLTI0NCwzICszMDYsOCBAQAogICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgcmV0dXJuIHJhd3RleHRbbGFzdF9pZGVudGlmaWVyX3BvczpzZWxmLmluZGV4aW5yYXd0ZXh0XQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9oeXBlcnBhcnNlcicsIHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5IGIvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CmluZGV4IGYwMDhiNDYuLjg0MWEzMDggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQorKysgYi9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKQEAgLTUwNiw3ICs1MDYsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwd2QgPSAiIgogICAgICAgICAgICAgcmV0dXJuIHB3ZCwgIiIKIApAQCAtNTI1LDE2ICs1MjUsMTcgQEAKICAgICAgICAgaWYgc2VsZi5lZGl0d2luLmZsaXN0OgogICAgICAgICAgICAgc2VsZi5lZGl0d2luLnVwZGF0ZV9yZWNlbnRfZmlsZXNfbGlzdChmaWxlbmFtZSkKIAotZGVmIHRlc3QoKToKK2RlZiBfaW9fYmluZGluZyhwYXJlbnQpOgogICAgIHJvb3QgPSBUaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBJT0JpbmRpbmciKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKICAgICBjbGFzcyBNeUVkaXRXaW46CiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKICAgICAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKICAgICAgICAgICAgIHNlbGYuZmxpc3QgPSBOb25lCiAgICAgICAgICAgICBzZWxmLnRleHQuYmluZCgiPENvbnRyb2wtbz4iLCBzZWxmLm9wZW4pCiAgICAgICAgICAgICBzZWxmLnRleHQuYmluZCgiPENvbnRyb2wtcz4iLCBzZWxmLnNhdmUpCi0gICAgICAgICAgICBzZWxmLnRleHQuYmluZCgiPEFsdC1zPiIsIHNlbGYuc2F2ZV9hcykKLSAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCI8QWx0LXo+Iiwgc2VsZi5zYXZlX2FfY29weSkKICAgICAgICAgZGVmIGdldF9zYXZlZChzZWxmKTogcmV0dXJuIDAKICAgICAgICAgZGVmIHNldF9zYXZlZChzZWxmLCBmbGFnKTogcGFzcwogICAgICAgICBkZWYgcmVzZXRfdW5kbyhzZWxmKTogcGFzcwpAQCAtNTQyLDE2ICs1NDMsMTMgQEAKICAgICAgICAgICAgIHNlbGYudGV4dC5ldmVudF9nZW5lcmF0ZSgiPDxvcGVuLXdpbmRvdy1mcm9tLWZpbGU+PiIpCiAgICAgICAgIGRlZiBzYXZlKHNlbGYsIGV2ZW50KToKICAgICAgICAgICAgIHNlbGYudGV4dC5ldmVudF9nZW5lcmF0ZSgiPDxzYXZlLXdpbmRvdz4+IikKLSAgICAgICAgZGVmIHNhdmVfYXMoc2VsZiwgZXZlbnQpOgotICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PHNhdmUtd2luZG93LWFzLWZpbGU+PiIpCi0gICAgICAgIGRlZiBzYXZlX2FfY29weShzZWxmLCBldmVudCk6Ci0gICAgICAgICAgICBzZWxmLnRleHQuZXZlbnRfZ2VuZXJhdGUoIjw8c2F2ZS1jb3B5LW9mLXdpbmRvdy1hcy1maWxlPj4iKQorCiAgICAgdGV4dCA9IFRleHQocm9vdCkKICAgICB0ZXh0LnBhY2soKQogICAgIHRleHQuZm9jdXNfc2V0KCkKICAgICBlZGl0d2luID0gTXlFZGl0V2luKHRleHQpCiAgICAgaW8gPSBJT0JpbmRpbmcoZWRpdHdpbikKLSAgICByb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0KCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX2lvX2JpbmRpbmcpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9JZGxlSGlzdG9yeS5weSBiL0xpYi9pZGxlbGliL0lkbGVIaXN0b3J5LnB5CmluZGV4IGQ2Y2IxNjIuLjA3OGFmMjkgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0lkbGVIaXN0b3J5LnB5CisrKyBiL0xpYi9pZGxlbGliL0lkbGVIaXN0b3J5LnB5CkBAIC0xMDAsNyArMTAwLDUgQEAKICAgICAgICAgc2VsZi5wcmVmaXggPSBOb25lCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0gICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXQogICAgIGZyb20gdW5pdHRlc3QgaW1wb3J0IG1haW4KICAgICBtYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2lkbGVoaXN0b3J5JywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkgYi9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkKaW5kZXggNjQ3MjllYS4uZWUzMWYzMCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvTXVsdGlDYWxsLnB5CisrKyBiL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weQpAQCAtMzIsNyArMzIsNiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHJlCiBpbXBvcnQgdGtpbnRlcgotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0CiAKICMgdGhlIGV2ZW50IHR5cGUgY29uc3RhbnRzLCB3aGljaCBkZWZpbmUgdGhlIG1lYW5pbmcgb2YgbWNfdHlwZQogTUNfS0VZUFJFU1M9MDsgTUNfS0VZUkVMRUFTRT0xOyBNQ19CVVRUT05QUkVTUz0yOyBNQ19CVVRUT05SRUxFQVNFPTM7CkBAIC00NSw3ICs0NCw3IEBACiBNQ19PUFRJT04gPSAxPDw2OyBNQ19DT01NQU5EID0gMTw8NwogCiAjIGRlZmluZSB0aGUgbGlzdCBvZiBtb2RpZmllcnMsIHRvIGJlIHVzZWQgaW4gY29tcGxleCBldmVudCB0eXBlcy4KLWlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CitpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CiAgICAgX21vZGlmaWVycyA9ICgoIlNoaWZ0IiwpLCAoIkNvbnRyb2wiLCksICgiT3B0aW9uIiwpLCAoIkNvbW1hbmQiLCkpCiAgICAgX21vZGlmaWVyX21hc2tzID0gKE1DX1NISUZULCBNQ19DT05UUk9MLCBNQ19PUFRJT04sIE1DX0NPTU1BTkQpCiBlbHNlOgpAQCAtNTcsNiArNTYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbnVtYmVyIGluIHJhbmdlKGxlbihfbW9kaWZpZXJzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBfbW9kaWZpZXJzW251bWJlcl1dKQogCisjIEluIDMuNCwgaWYgbm8gc2hlbGwgd2luZG93IGlzIGV2ZXIgb3BlbiwgdGhlIHVuZGVybHlpbmcgVGsgd2lkZ2V0IGlzCisjIGRlc3Ryb3llZCBiZWZvcmUgLl9fZGVsX18gbWV0aG9kcyBoZXJlIGFyZSBjYWxsZWQuICBUaGUgZm9sbG93aW5nCisjIGlzIHVzZWQgdG8gc2VsZWN0aXZlbHkgaWdub3JlIHNodXRkb3duIGV4Y2VwdGlvbnMgdG8gYXZvaWQKKyMgJ0V4Y2VwdGlvbiBpZ25vcmVkJyBtZXNzYWdlcy4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAxNjcKK0FQUExJQ0FUSU9OX0dPTkUgPSAnJydcCitjYW4ndCBpbnZva2UgImJpbmQiIGNvbW1hbmQ6ICBhcHBsaWNhdGlvbiBoYXMgYmVlbiBkZXN0cm95ZWQnJycKKwogIyBBIGJpbmRlciBpcyBhIGNsYXNzIHdoaWNoIGJpbmRzIGZ1bmN0aW9ucyB0byBvbmUgdHlwZSBvZiBldmVudC4gSXQgaGFzIHR3bwogIyBtZXRob2RzOiBiaW5kIGFuZCB1bmJpbmQsIHdoaWNoIGdldCBhIGZ1bmN0aW9uIGFuZCBhIHBhcnNlZCBzZXF1ZW5jZSwgYXMKICMgcmV0dXJuZWQgYnkgX3BhcnNlX3NlcXVlbmNlKCkuIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgYmluZGVyczoKQEAgLTk4LDcgKzEwNCwxNCBAQAogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIGlmIHNlbGYuaGFuZGxlcmlkOgotICAgICAgICAgICAgc2VsZi53aWRnZXQudW5iaW5kKHNlbGYud2lkZ2V0aW5zdCwgc2VsZi5zZXF1ZW5jZSwgc2VsZi5oYW5kbGVyaWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi53aWRnZXQudW5iaW5kKHNlbGYud2lkZ2V0aW5zdCwgc2VsZi5zZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlcmlkKQorICAgICAgICAgICAgZXhjZXB0IHRraW50ZXIuVGNsRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gQVBQTElDQVRJT05fR09ORToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICMgQW4gaW50IGluIHJhbmdlKDEgPDwgbGVuKF9tb2RpZmllcnMpKSByZXByZXNlbnRzIGEgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzCiAjIChpZiB0aGUgbGVhc3Qgc2lnbmlmaWNlbnQgYml0IGlzIG9uLCBfbW9kaWZpZXJzWzBdIGlzIG9uLCBhbmQgc28gb24pLgpAQCAtMjI3LDcgKzI0MCwxMyBAQAogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIGZvciBzZXEsIGlkIGluIHNlbGYuaGFuZGxlcmlkczoKLSAgICAgICAgICAgIHNlbGYud2lkZ2V0LnVuYmluZChzZWxmLndpZGdldGluc3QsIHNlcSwgaWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi53aWRnZXQudW5iaW5kKHNlbGYud2lkZ2V0aW5zdCwgc2VxLCBpZCkKKyAgICAgICAgICAgIGV4Y2VwdCB0a2ludGVyLlRjbEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IEFQUExJQ0FUSU9OX0dPTkU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogIyBkZWZpbmUgdGhlIGxpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgaGFuZGxlZCBieSBNdWx0aUV2ZW50LiB0aGUgb3JkZXIgaXMKICMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIGV2ZW50IHR5cGUgY29uc3RhbnRzLgpAQCAtMzkwLDE1ICs0MDksMjMgQEAKICAgICAgICAgICAgICAgICBmdW5jLCB0cmlwbGV0cyA9IHNlbGYuX19ldmVudGluZm9bdmlydHVhbF0KICAgICAgICAgICAgICAgICBpZiBmdW5jOgogICAgICAgICAgICAgICAgICAgICBmb3IgdHJpcGxldCBpbiB0cmlwbGV0czoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19iaW5kZXJzW3RyaXBsZXRbMV1dLnVuYmluZCh0cmlwbGV0LCBmdW5jKQotCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2JpbmRlcnNbdHJpcGxldFsxXV0udW5iaW5kKHRyaXBsZXQsIGZ1bmMpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgdGtpbnRlci5UY2xFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBBUFBMSUNBVElPTl9HT05FOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBfbXVsdGljYWxsX2RpY3Rbd2lkZ2V0XSA9IE11bHRpQ2FsbAogICAgIHJldHVybiBNdWx0aUNhbGwKIAotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICAjIFRlc3QKKworZGVmIF9tdWx0aV9jYWxsKHBhcmVudCk6CiAgICAgcm9vdCA9IHRraW50ZXIuVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgTXVsdGlDYWxsIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCiAgICAgdGV4dCA9IE11bHRpQ2FsbENyZWF0b3IodGtpbnRlci5UZXh0KShyb290KQogICAgIHRleHQucGFjaygpCiAgICAgZGVmIGJpbmRzZXEoc2VxLCBuPVswXSk6CkBAIC00MTQsOCArNDQxLDEzIEBACiAgICAgYmluZHNlcSgiPEFsdC1Db250cm9sLUtleS1hPiIpCiAgICAgYmluZHNlcSgiPEtleS1iPiIpCiAgICAgYmluZHNlcSgiPENvbnRyb2wtQnV0dG9uLTE+IikKKyAgICBiaW5kc2VxKCI8QnV0dG9uLTI+IikKICAgICBiaW5kc2VxKCI8QWx0LUJ1dHRvbi0xPiIpCiAgICAgYmluZHNlcSgiPEZvY3VzT3V0PiIpCiAgICAgYmluZHNlcSgiPEVudGVyPiIpCiAgICAgYmluZHNlcSgiPExlYXZlPiIpCiAgICAgcm9vdC5tYWlubG9vcCgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9tdWx0aV9jYWxsKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTXVsdGlTdGF0dXNCYXIucHkgYi9MaWIvaWRsZWxpYi9NdWx0aVN0YXR1c0Jhci5weQppbmRleCA0ZmM4ZGNmLi5mNDRiNmE4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9NdWx0aVN0YXR1c0Jhci5weQorKysgYi9MaWIvaWRsZWxpYi9NdWx0aVN0YXR1c0Jhci5weQpAQCAtMTcsMTYgKzE3LDI5IEBACiAgICAgICAgICAgICBsYWJlbCA9IHNlbGYubGFiZWxzW25hbWVdCiAgICAgICAgIGxhYmVsLmNvbmZpZyh0ZXh0PXRleHQpCiAKLWRlZiBfdGVzdCgpOgotICAgIGIgPSBGcmFtZSgpCi0gICAgYyA9IFRleHQoYikKLSAgICBjLnBhY2soc2lkZT1UT1ApCi0gICAgYSA9IE11bHRpU3RhdHVzQmFyKGIpCi0gICAgYS5zZXRfbGFiZWwoIm9uZSIsICJoZWxsbyIpCi0gICAgYS5zZXRfbGFiZWwoInR3byIsICJ3b3JsZCIpCi0gICAgYS5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPVgpCi0gICAgYi5wYWNrKCkKLSAgICBiLm1haW5sb29wKCkKK2RlZiBfbXVsdGlzdGF0dXNfYmFyKHBhcmVudCk6CisgICAgcm9vdCA9IFRrKCkKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiAlKHgsIHkgKyAxNTApKQorICAgIHJvb3QudGl0bGUoIlRlc3QgbXVsdGlzdGF0dXMgYmFyIikKKyAgICBmcmFtZSA9IEZyYW1lKHJvb3QpCisgICAgdGV4dCA9IFRleHQoZnJhbWUpCisgICAgdGV4dC5wYWNrKCkKKyAgICBtc2IgPSBNdWx0aVN0YXR1c0JhcihmcmFtZSkKKyAgICBtc2Iuc2V0X2xhYmVsKCJvbmUiLCAiaGVsbG8iKQorICAgIG1zYi5zZXRfbGFiZWwoInR3byIsICJ3b3JsZCIpCisgICAgbXNiLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKKworICAgIGRlZiBjaGFuZ2UoKToKKyAgICAgICAgbXNiLnNldF9sYWJlbCgib25lIiwgImZvbyIpCisgICAgICAgIG1zYi5zZXRfbGFiZWwoInR3byIsICJiYXIiKQorCisgICAgYnV0dG9uID0gQnV0dG9uKHJvb3QsIHRleHQ9IlVwZGF0ZSBzdGF0dXMiLCBjb21tYW5kPWNoYW5nZSkKKyAgICBidXR0b24ucGFjayhzaWRlPUJPVFRPTSkKKyAgICBmcmFtZS5wYWNrKCkKKyAgICBmcmFtZS5tYWlubG9vcCgpCisgICAgcm9vdC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgX3Rlc3QoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfbXVsdGlzdGF0dXNfYmFyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTkVXUy50eHQgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dAppbmRleCA2Mzg4ZDBkLi45NTNhMzhkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ORVdTLnR4dAorKysgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dApAQCAtMSw3NCArMSwxMCBAQAotV2hhdCdzIE5ldyBpbiBJRExFIDMuMy40PwotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tIElzc3VlICMxNzM5MDogQWRkIFB5dGhvbiB2ZXJzaW9uIHRvIElkbGUgZWRpdG9yIHdpbmRvdyB0aXRsZSBiYXIuCi0gIE9yaWdpbmFsIHBhdGNoZXMgYnkgRWRtb25kIEJ1cm5ldHQgYW5kIEtlbnQgSm9obnNvbi4KLQotLSBJc3N1ZSAjMTg5NjA6IElETEUgbm93IGlnbm9yZXMgdGhlIHNvdXJjZSBlbmNvZGluZyBkZWNsYXJhdGlvbiBvbiB0aGUgc2Vjb25kCi0gIGxpbmUgaWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW55dGhpbmcgZXhjZXB0IGEgY29tbWVudC4KLQotLSBJc3N1ZSAjMjAwNTg6IHN5cy5zdGRpbi5yZWFkbGluZSgpIGluIElETEUgbm93IGFsd2F5cyByZXR1cm5zIG9ubHkgb25lIGxpbmUuCi0KLS0gSXNzdWUgIzE5NDgxOiBwcmludCgpIG9mIHN0cmluZyBzdWJjbGFzcyBpbnN0YW5jZSBpbiBJRExFIG5vIGxvbmdlciBoYW5ncy4KLQotLSBJc3N1ZSAjMTgyNzA6IFByZXZlbnQgcG9zc2libGUgSURMRSBBdHRyaWJ1dGVFcnJvciBvbiBPUyBYIHdoZW4gbm8gaW5pdGlhbAotICBzaGVsbCB3aW5kb3cgaXMgcHJlc2VudC4KLQotCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjM/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKLSAgbGluZXMuCi0KLS0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCi0KLS0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgotCi0tIElzc3VlICMxODQyOTogRm9ybWF0IC8gRm9ybWF0IFBhcmFncmFwaCwgbm93IHdvcmtzIHdoZW4gY29tbWVudCBibG9ja3MKLSAgYXJlIHNlbGVjdGVkLiBBcyB3aXRoIHRleHQgYmxvY2tzLCB0aGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgc2VsZWN0aW9uCi0gIG9ubHkgaW5jbHVkZXMgY29tcGxldGUgbGluZXMuCi0KLS0gSXNzdWUgIzE4MjI2OiBBZGQgZG9jc3RyaW5ncyBhbmQgdW5pdHRlc3RzIGZvciBGb3JtYXRQYXJhZ3JhcGgucHkuCi0gIE9yaWdpbmFsIHBhdGNoZXMgYnkgVG9kZCBSb3ZpdG8gYW5kIFBoaWwgV2Vic3Rlci4KLQotLSBJc3N1ZSAjMTgyNzk6IEZvcm1hdCAtIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2Ugbm8gbG9uZ2VyIG1hcmtzIGEgZmlsZSBhcwotICBjaGFuZ2VkIHdoZW4gaXQgaGFzIG5vdCBiZWVuIGNoYW5nZWQuIFRoaXMgZml4IGZvbGxvd2VkIHRoZSBhZGRpdGlvbiBvZiBhCi0gIHRlc3QgZmlsZSBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGhpbCBXZWJzdGVyICh0aGUgaXNzdWUncyBtYWluIGdvYWwpLgotCi0tIElzc3VlICM3MTM2OiBJbiB0aGUgSWRsZSBGaWxlIG1lbnUsICJOZXcgV2luZG93IiBpcyByZW5hbWVkICJOZXcgRmlsZSIuCi0gIFBhdGNoIGJ5IFRhbCBFaW5hdCwgUm9nZXQgU2Vyd3ksIGFuZCBUb2RkIFJvdml0by4KLQotLSBSZW1vdmUgZGVhZCBpbXBvcnRzIG9mIGltcC4KLQotLSBJc3N1ZSAjMTgxOTY6IEF2b2lkIGRpc3BsYXlpbmcgc3B1cmlvdXMgU3lzdGVtRXhpdCB0cmFjZWJhY2tzLgotCi0tIElzc3VlICM1NDkyOiBBdm9pZCB0cmFjZWJhY2sgd2hlbiBleGl0aW5nIElETEUgY2F1c2VkIGJ5IGEgcmFjZSBjb25kaXRpb24uCi0KLS0gSXNzdWUgIzE3NTExOiBLZWVwIElETEUgZmluZCBkaWFsb2cgb3BlbiBhZnRlciBjbGlja2luZyAiRmluZCBOZXh0Ii4KLSAgT3JpZ2luYWwgcGF0Y2ggYnkgU2FyYWggSy4KLQotLSBJc3N1ZSAjMTgwNTU6IE1vdmUgSURMRSBvZmYgb2YgaW1wIGFuZCBvbiB0byBpbXBvcnRsaWIuCi0KLS0gSXNzdWUgIzE1MzkyOiBDcmVhdGUgYSB1bml0dGVzdCBmcmFtZXdvcmsgZm9yIElETEUuCi0gIEluaXRpYWwgcGF0Y2ggYnkgUmFqYWdvcGFsYXNhcm1hIEpheWFrcmlzaG5hbi4KLSAgU2VlIExpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0IGZvciBob3cgdG8gcnVuIElkbGUgdGVzdHMuCi0KLS0gSXNzdWUgIzE0MTQ2OiBIaWdobGlnaHQgc291cmNlIGxpbmUgd2hpbGUgZGVidWdnaW5nIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE3NTMyOiBBbHdheXMgaW5jbHVkZSBPcHRpb25zIG1lbnUgZm9yIElETEUgb24gT1MgWC4KLSAgUGF0Y2ggYnkgR3VpbGhlcm1lIFNpbcO1ZXMuCi0KLQotV2hhdCdzIE5ldyBpbiBJRExFIDMuMy4yPworV2hhdCdzIE5ldyBpbiBJRExFIDMuNC4wPwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCiAtIElzc3VlICMxNzM5MDogRGlzcGxheSBQeXRob24gdmVyc2lvbiBvbiBJZGxlIHRpdGxlIGJhci4KICAgSW5pdGlhbCBwYXRjaCBieSBFZG1vbmQgQnVybmV0dC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICM1MDY2OiBVcGRhdGUgSURMRSBkb2NzLiBQYXRjaCBieSBUb2RkIFJvdml0by4KIAogLSBJc3N1ZSAjMTc2MjU6IENsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvT2JqZWN0QnJvd3Nlci5weQppbmRleCBiMzU5ZWZjLi43YjU3YWE0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL09iamVjdEJyb3dzZXIucHkKQEAgLTksNiArOSw4IEBACiAjIFhYWCBUTyBETzoKICMgLSBmb3IgY2xhc3Nlcy9tb2R1bGVzLCBhZGQgIm9wZW4gc291cmNlIiB0byBvYmplY3QgYnJvd3NlcgogCitpbXBvcnQgcmUKKwogZnJvbSBpZGxlbGliLlRyZWVXaWRnZXQgaW1wb3J0IFRyZWVJdGVtLCBUcmVlTm9kZSwgU2Nyb2xsZWRDYW52YXMKIAogZnJvbSByZXBybGliIGltcG9ydCBSZXByCkBAIC0xMTksMTIgKzEyMSwxNCBAQAogICAgICAgICBjID0gT2JqZWN0VHJlZUl0ZW0KICAgICByZXR1cm4gYyhsYWJlbHRleHQsIG9iamVjdCwgc2V0ZnVuY3Rpb24pCiAKLSMgVGVzdCBzY3JpcHQKIAotZGVmIF90ZXN0KCk6CitkZWYgX29iamVjdF9icm93c2VyKHBhcmVudCk6CiAgICAgaW1wb3J0IHN5cwogICAgIGZyb20gdGtpbnRlciBpbXBvcnQgVGsKICAgICByb290ID0gVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgT2JqZWN0QnJvd3NlciIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogICAgIHJvb3QuY29uZmlndXJlKGJkPTAsIGJnPSJ5ZWxsb3ciKQogICAgIHJvb3QuZm9jdXNfc2V0KCkKICAgICBzYyA9IFNjcm9sbGVkQ2FudmFzKHJvb3QsIGJnPSJ3aGl0ZSIsIGhpZ2hsaWdodHRoaWNrbmVzcz0wLCB0YWtlZm9jdXM9MSkKQEAgLTEzNSw0ICsxMzksNSBAQAogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIF90ZXN0KCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX29iamVjdF9icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUGFyZW5NYXRjaC5weSBiL0xpYi9pZGxlbGliL1BhcmVuTWF0Y2gucHkKaW5kZXggNmQ5MWIzOS4uMTliYWQ4YyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGFyZW5NYXRjaC5weQorKysgYi9MaWIvaWRsZWxpYi9QYXJlbk1hdGNoLnB5CkBAIC05MCw3ICs5MCw4IEBACiAgICAgICAgICAgICBzZWxmLnNldF90aW1lb3V0ID0gc2VsZi5zZXRfdGltZW91dF9ub25lCiAKICAgICBkZWYgZmxhc2hfcGFyZW5fZXZlbnQoc2VsZiwgZXZlbnQpOgotICAgICAgICBpbmRpY2VzID0gSHlwZXJQYXJzZXIoc2VsZi5lZGl0d2luLCAiaW5zZXJ0IikuZ2V0X3N1cnJvdW5kaW5nX2JyYWNrZXRzKCkKKyAgICAgICAgaW5kaWNlcyA9IChIeXBlclBhcnNlcihzZWxmLmVkaXR3aW4sICJpbnNlcnQiKQorICAgICAgICAgICAgICAgICAgIC5nZXRfc3Vycm91bmRpbmdfYnJhY2tldHMoKSkKICAgICAgICAgaWYgaW5kaWNlcyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi53YXJuX21pc21hdGNoZWQoKQogICAgICAgICAgICAgcmV0dXJuCkBAIC0xNjcsNiArMTY4LDExIEBACiAgICAgICAgICMgYXNzb2NpYXRlIGEgY291bnRlciB3aXRoIGFuIGV2ZW50OyBvbmx5IGRpc2FibGUgdGhlICJwYXJlbiIKICAgICAgICAgIyB0YWcgaWYgdGhlIGV2ZW50IGlzIGZvciB0aGUgbW9zdCByZWNlbnQgdGltZXIuCiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCi0gICAgICAgIHNlbGYuZWRpdHdpbi50ZXh0X2ZyYW1lLmFmdGVyKHNlbGYuRkxBU0hfREVMQVksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBzZWxmPXNlbGYsIGM9c2VsZi5jb3VudGVyOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3Jlc3RvcmVfdGltZXIoYykpCisgICAgICAgIHNlbGYuZWRpdHdpbi50ZXh0X2ZyYW1lLmFmdGVyKAorICAgICAgICAgICAgc2VsZi5GTEFTSF9ERUxBWSwKKyAgICAgICAgICAgIGxhbWJkYSBzZWxmPXNlbGYsIGM9c2VsZi5jb3VudGVyOiBzZWxmLmhhbmRsZV9yZXN0b3JlX3RpbWVyKGMpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9wYXJlbm1hdGNoJywgdmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QYXRoQnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CmluZGV4IGJhNDA3MTkuLjU4ZmY4MzAgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CkBAIC00LDEwICs0LDE2IEBACiAKIGZyb20gaWRsZWxpYi5UcmVlV2lkZ2V0IGltcG9ydCBUcmVlSXRlbQogZnJvbSBpZGxlbGliLkNsYXNzQnJvd3NlciBpbXBvcnQgQ2xhc3NCcm93c2VyLCBNb2R1bGVCcm93c2VyVHJlZUl0ZW0KK2Zyb20gaWRsZWxpYi5QeVNoZWxsIGltcG9ydCBQeVNoZWxsRmlsZUxpc3QKKwogCiBjbGFzcyBQYXRoQnJvd3NlcihDbGFzc0Jyb3dzZXIpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZsaXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmxpc3QsIF9odGVzdD1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faHRlc3QgPSBfaHRlc3QKICAgICAgICAgc2VsZi5pbml0KGZsaXN0KQogCiAgICAgZGVmIHNldHRpdGxlKHNlbGYpOgpAQCAtNDQsNyArNTAsNyBAQAogICAgIGRlZiBHZXRTdWJMaXN0KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc2VsZi5kaXIgb3Igb3MuY3VyZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIHBhY2thZ2VzID0gW10KICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkBAIC04NywxMiArOTMsMTQgQEAKICAgICAgICAgc29ydGVkLnNvcnQoKQogICAgICAgICByZXR1cm4gc29ydGVkCiAKLWRlZiBtYWluKCk6Ci0gICAgZnJvbSBpZGxlbGliIGltcG9ydCBQeVNoZWxsCi0gICAgUGF0aEJyb3dzZXIoUHlTaGVsbC5mbGlzdCkKLSAgICBpZiBzeXMuc3RkaW4gaXMgc3lzLl9fc3RkaW5fXzoKLSAgICAgICAgbWFpbmxvb3AoKQorZGVmIF9wYXRoX2Jyb3dzZXIocGFyZW50KToKKyAgICBmbGlzdCA9IFB5U2hlbGxGaWxlTGlzdChwYXJlbnQpCisgICAgUGF0aEJyb3dzZXIoZmxpc3QsIF9odGVzdD1UcnVlKQorICAgIHBhcmVudC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgbWFpbgogICAgIG1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfcGF0aGJyb3dzZXInLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKKworICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfcGF0aF9icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUGVyY29sYXRvci5weSBiL0xpYi9pZGxlbGliL1BlcmNvbGF0b3IucHkKaW5kZXggYzkxZGUzOC4uOWU5MzMxOSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGVyY29sYXRvci5weQorKysgYi9MaWIvaWRsZWxpYi9QZXJjb2xhdG9yLnB5CkBAIC01MSw4ICs1MSw5IEBACiAgICAgICAgICAgICBmLnNldGRlbGVnYXRlKGZpbHRlci5kZWxlZ2F0ZSkKICAgICAgICAgICAgIGZpbHRlci5zZXRkZWxlZ2F0ZShOb25lKQogCi1kZWYgbWFpbigpOgotICAgIGltcG9ydCB0a2ludGVyIGFzIFRrCitkZWYgX3BlcmNvbGF0b3IocGFyZW50KToKKyAgICBpbXBvcnQgdGtpbnRlciBhcyB0aworICAgIGltcG9ydCByZQogICAgIGNsYXNzIFRyYWNlcihEZWxlZ2F0b3IpOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCkBAIC02MywyMiArNjQsNDEgQEAKICAgICAgICAgZGVmIGRlbGV0ZShzZWxmLCAqYXJncyk6CiAgICAgICAgICAgICBwcmludChzZWxmLm5hbWUsICI6IGRlbGV0ZSIsIGFyZ3MpCiAgICAgICAgICAgICBzZWxmLmRlbGVnYXRlLmRlbGV0ZSgqYXJncykKLSAgICByb290ID0gVGsuVGsoKQotICAgIHJvb3Qud21fcHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCByb290LnF1aXQpCi0gICAgdGV4dCA9IFRrLlRleHQoKQotICAgIHRleHQucGFjaygpCi0gICAgdGV4dC5mb2N1c19zZXQoKQorICAgIHJvb3QgPSB0ay5UaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBQZXJjb2xhdG9yIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisgICAgdGV4dCA9IHRrLlRleHQocm9vdCkKICAgICBwID0gUGVyY29sYXRvcih0ZXh0KQogICAgIHQxID0gVHJhY2VyKCJ0MSIpCiAgICAgdDIgPSBUcmFjZXIoInQyIikKLSAgICBwLmluc2VydGZpbHRlcih0MSkKLSAgICBwLmluc2VydGZpbHRlcih0MikKLSAgICByb290Lm1haW5sb29wKCkgIyBjbGljayBjbG9zZSB3aWRnZXQgdG8gY29udGludWUuLi4KLSAgICBwLnJlbW92ZWZpbHRlcih0MikKLSAgICByb290Lm1haW5sb29wKCkKLSAgICBwLmluc2VydGZpbHRlcih0MikKLSAgICBwLnJlbW92ZWZpbHRlcih0MSkKKworICAgIGRlZiB0b2dnbGUxKCk6CisgICAgICAgIGlmIHZhcjEuZ2V0KCkgPT0gMDoKKyAgICAgICAgICAgIHZhcjEuc2V0KDEpCisgICAgICAgICAgICBwLmluc2VydGZpbHRlcih0MSkKKyAgICAgICAgZWxpZiB2YXIxLmdldCgpID09IDE6CisgICAgICAgICAgICB2YXIxLnNldCgwKQorICAgICAgICAgICAgcC5yZW1vdmVmaWx0ZXIodDEpCisKKyAgICBkZWYgdG9nZ2xlMigpOgorICAgICAgICBpZiB2YXIyLmdldCgpID09IDA6CisgICAgICAgICAgICB2YXIyLnNldCgxKQorICAgICAgICAgICAgcC5pbnNlcnRmaWx0ZXIodDIpCisgICAgICAgIGVsaWYgdmFyMi5nZXQoKSA9PSAxOgorICAgICAgICAgICAgdmFyMi5zZXQoMCkKKyAgICAgICAgICAgIHAucmVtb3ZlZmlsdGVyKHQyKQorCisgICAgdGV4dC5wYWNrKCkKKyAgICB2YXIxID0gdGsuSW50VmFyKCkKKyAgICBjYjEgPSB0ay5DaGVja2J1dHRvbihyb290LCB0ZXh0PSJUcmFjZXIxIiwgY29tbWFuZD10b2dnbGUxLCB2YXJpYWJsZT12YXIxKQorICAgIGNiMS5wYWNrKCkKKyAgICB2YXIyID0gdGsuSW50VmFyKCkKKyAgICBjYjIgPSB0ay5DaGVja2J1dHRvbihyb290LCB0ZXh0PSJUcmFjZXIyIiwgY29tbWFuZD10b2dnbGUyLCB2YXJpYWJsZT12YXIyKQorICAgIGNiMi5wYWNrKCkKKwogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfcGVyY29sYXRvcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1B5UGFyc2UucHkgYi9MaWIvaWRsZWxpYi9QeVBhcnNlLnB5CmluZGV4IDYxYTAwMDMuLjNlNTAxY2EgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1B5UGFyc2UucHkKKysrIGIvTGliL2lkbGVsaWIvUHlQYXJzZS5weQpAQCAtMSw1ICsxLDcgQEAKIGltcG9ydCByZQogaW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTWFwcGluZworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKIAogIyBSZWFzb24gbGFzdCBzdG10IGlzIGNvbnRpbnVlZCAob3IgQ19OT05FIGlmIGl0J3Mgbm90KS4KIChDX05PTkUsIENfQkFDS1NMQVNILCBDX1NUUklOR19GSVJTVF9MSU5FLApAQCAtOTEsMTkgKzkzLDQ4IEBACiAgICAgW15bXF0oKXt9IyciXFxdKwogIiIiLCByZS5WRVJCT1NFKS5tYXRjaAogCi0jIEJ1aWxkIHRyYW5zbGF0aW9uIHRhYmxlIHRvIG1hcCB1bmludGVyZXN0aW5nIGNoYXJzIHRvICJ4Iiwgb3BlbgotIyBicmFja2V0cyB0byAiKCIsIGFuZCBjbG9zZSBicmFja2V0cyB0byAiKSIuCiAKLV90cmFuID0ge30KLWZvciBpIGluIHJhbmdlKDI1Nik6Ci0gICAgX3RyYW5baV0gPSAneCcKLWZvciBjaCBpbiAiKHtbIjoKLSAgICBfdHJhbltvcmQoY2gpXSA9ICcoJwotZm9yIGNoIGluICIpfV0iOgotICAgIF90cmFuW29yZChjaCldID0gJyknCi1mb3IgY2ggaW4gIlwiJ1xcXG4jIjoKLSAgICBfdHJhbltvcmQoY2gpXSA9IGNoCi1kZWwgaSwgY2gKK2NsYXNzIFN0cmluZ1RyYW5zbGF0ZVBzZXVkb01hcHBpbmcoTWFwcGluZyk6CisgICAgciIiIlV0aWxpdHkgY2xhc3MgdG8gYmUgdXNlZCB3aXRoIHN0ci50cmFuc2xhdGUoKQorCisgICAgVGhpcyBNYXBwaW5nIGNsYXNzIHdyYXBzIGEgZ2l2ZW4gZGljdC4gV2hlbiBhIHZhbHVlIGZvciBhIGtleSBpcworICAgIHJlcXVlc3RlZCB2aWEgX19nZXRpdGVtX18oKSBvciBnZXQoKSwgdGhlIGtleSBpcyBsb29rZWQgdXAgaW4gdGhlCisgICAgZ2l2ZW4gZGljdC4gSWYgZm91bmQgdGhlcmUsIHRoZSB2YWx1ZSBmcm9tIHRoZSBkaWN0IGlzIHJldHVybmVkLgorICAgIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgdmFsdWUgZ2l2ZW4gdXBvbiBpbml0aWFsaXphdGlvbiBpcyByZXR1cm5lZC4KKworICAgIFRoaXMgYWxsb3dzIHVzaW5nIHN0ci50cmFuc2xhdGUoKSB0byBtYWtlIHNvbWUgcmVwbGFjZW1lbnRzLCBhbmQgdG8KKyAgICByZXBsYWNlIGFsbCBjaGFyYWN0ZXJzIGZvciB3aGljaCBubyByZXBsYWNlbWVudCB3YXMgc3BlY2lmaWVkIHdpdGgKKyAgICBhIGdpdmVuIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlbSBhcy1pcy4KKworICAgIEZvciBleGFtcGxlLCB0byByZXBsYWNlIGV2ZXJ5dGhpbmcgZXhjZXB0IHdoaXRlc3BhY2Ugd2l0aCAneCc6CisKKyAgICA+Pj4gd2hpdGVzcGFjZV9jaGFycyA9ICcgXHRcblxyJworICAgID4+PiBwcmVzZXJ2ZV9kaWN0ID0ge29yZChjKTogb3JkKGMpIGZvciBjIGluIHdoaXRlc3BhY2VfY2hhcnN9CisgICAgPj4+IG1hcHBpbmcgPSBTdHJpbmdUcmFuc2xhdGVQc2V1ZG9NYXBwaW5nKHByZXNlcnZlX2RpY3QsIG9yZCgneCcpKQorICAgID4+PiB0ZXh0ID0gImEgKyBiXHRjXG5kIgorICAgID4+PiB0ZXh0LnRyYW5zbGF0ZShtYXBwaW5nKQorICAgICd4IHggeFx0eFxueCcKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9uX2RlZmF1bHRzLCBkZWZhdWx0X3ZhbHVlKToKKyAgICAgICAgc2VsZi5fbm9uX2RlZmF1bHRzID0gbm9uX2RlZmF1bHRzCisgICAgICAgIHNlbGYuX2RlZmF1bHRfdmFsdWUgPSBkZWZhdWx0X3ZhbHVlCisKKyAgICAgICAgZGVmIF9nZXQoa2V5LCBfZ2V0PW5vbl9kZWZhdWx0cy5nZXQsIF9kZWZhdWx0PWRlZmF1bHRfdmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIF9nZXQoa2V5LCBfZGVmYXVsdCkKKyAgICAgICAgc2VsZi5fZ2V0ID0gX2dldAorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pOgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KGl0ZW0pCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9ub25fZGVmYXVsdHMpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX25vbl9kZWZhdWx0cykKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KGtleSkKKwogCiBjbGFzcyBQYXJzZXI6CiAKQEAgLTExMywxOSArMTQ0LDYgQEAKIAogICAgIGRlZiBzZXRfc3RyKHNlbGYsIHMpOgogICAgICAgICBhc3NlcnQgbGVuKHMpID09IDAgb3Igc1stMV0gPT0gJ1xuJwotICAgICAgICBpZiBpc2luc3RhbmNlKHMsIHN0cik6Ci0gICAgICAgICAgICAjIFRoZSBwYXJzZSBmdW5jdGlvbnMgaGF2ZSBubyBpZGVhIHdoYXQgdG8gZG8gd2l0aCBVbmljb2RlLCBzbwotICAgICAgICAgICAgIyByZXBsYWNlIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aCAieCIuICBUaGlzIGlzICJzYWZlIgotICAgICAgICAgICAgIyBzbyBsb25nIGFzIHRoZSBvbmx5IGNoYXJhY3RlcnMgZ2VybWFuZSB0byBwYXJzaW5nIHRoZSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICMgb2YgUHl0aG9uIGFyZSA3LWJpdCBBU0NJSS4gIEl0J3MgKm5lY2Vzc2FyeSogYmVjYXVzZSBVbmljb2RlCi0gICAgICAgICAgICAjIHN0cmluZ3MgZG9uJ3QgaGF2ZSBhIC50cmFuc2xhdGUoKSBtZXRob2QgdGhhdCBzdXBwb3J0cwotICAgICAgICAgICAgIyBkZWxldGVjaGFycy4KLSAgICAgICAgICAgIHVuaXBob29leSA9IHMKLSAgICAgICAgICAgIHMgPSBbXQotICAgICAgICAgICAgcHVzaCA9IHMuYXBwZW5kCi0gICAgICAgICAgICBmb3IgcmF3IGluIG1hcChvcmQsIHVuaXBob29leSk6Ci0gICAgICAgICAgICAgICAgcHVzaChyYXcgPCAxMjcgYW5kIGNocihyYXcpIG9yICJ4IikKLSAgICAgICAgICAgIHMgPSAiIi5qb2luKHMpCiAgICAgICAgIHNlbGYuc3RyID0gcwogICAgICAgICBzZWxmLnN0dWR5X2xldmVsID0gMAogCkBAIC0xOTcsNiArMjE1LDE2IEBACiAgICAgICAgIGlmIGxvID4gMDoKICAgICAgICAgICAgIHNlbGYuc3RyID0gc2VsZi5zdHJbbG86XQogCisgICAgIyBCdWlsZCBhIHRyYW5zbGF0aW9uIHRhYmxlIHRvIG1hcCB1bmludGVyZXN0aW5nIGNoYXJzIHRvICd4Jywgb3BlbgorICAgICMgYnJhY2tldHMgdG8gJygnLCBjbG9zZSBicmFja2V0cyB0byAnKScgd2hpbGUgcHJlc2VydmluZyBxdW90ZXMsCisgICAgIyBiYWNrc2xhc2hlcywgbmV3bGluZXMgYW5kIGhhc2hlcy4gVGhpcyBpcyB0byBiZSBwYXNzZWQgdG8KKyAgICAjIHN0ci50cmFuc2xhdGUoKSBpbiBfc3R1ZHkxKCkuCisgICAgX3RyYW4gPSB7fQorICAgIF90cmFuLnVwZGF0ZSgob3JkKGMpLCBvcmQoJygnKSkgZm9yIGMgaW4gIih7WyIpCisgICAgX3RyYW4udXBkYXRlKChvcmQoYyksIG9yZCgnKScpKSBmb3IgYyBpbiAiKX1dIikKKyAgICBfdHJhbi51cGRhdGUoKG9yZChjKSwgb3JkKGMpKSBmb3IgYyBpbiAiXCInXFxcbiMiKQorICAgIF90cmFuID0gU3RyaW5nVHJhbnNsYXRlUHNldWRvTWFwcGluZyhfdHJhbiwgZGVmYXVsdF92YWx1ZT1vcmQoJ3gnKSkKKwogICAgICMgQXMgcXVpY2tseSBhcyBodW1hbmx5IHBvc3NpYmxlIDx3aW5rPiwgZmluZCB0aGUgbGluZSBudW1iZXJzICgwLQogICAgICMgYmFzZWQpIG9mIHRoZSBub24tY29udGludWF0aW9uIGxpbmVzLgogICAgICMgQ3JlYXRlcyBzZWxmLntnb29kbGluZXMsIGNvbnRpbnVhdGlvbn0uCkBAIC0yMTEsNyArMjM5LDcgQEAKICAgICAgICAgIyB1bmludGVyZXN0aW5nIGNoYXJhY3RlcnMuICBUaGlzIGNhbiBjdXQgdGhlIG51bWJlciBvZiBjaGFycwogICAgICAgICAjIGJ5IGEgZmFjdG9yIG9mIDEwLTQwLCBhbmQgc28gZ3JlYXRseSBzcGVlZCB0aGUgZm9sbG93aW5nIGxvb3AuCiAgICAgICAgIHN0ciA9IHNlbGYuc3RyCi0gICAgICAgIHN0ciA9IHN0ci50cmFuc2xhdGUoX3RyYW4pCisgICAgICAgIHN0ciA9IHN0ci50cmFuc2xhdGUoc2VsZi5fdHJhbikKICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJ3h4eHh4eHh4JywgJ3gnKQogICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgneHh4eCcsICd4JykKICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJ3h4JywgJ3gnKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUHlTaGVsbC5weSBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKaW5kZXggMmU1ZWJiMi4uODY1NjkyNyAxMDA3NTUKLS0tIGEvTGliL2lkbGVsaWIvUHlTaGVsbC5weQorKysgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CkBAIC0xMzgsNiArMTM4LDcgQEAKICAgICAgICAgc2VsZi5pby5zZXRfZmlsZW5hbWVfY2hhbmdlX2hvb2soZmlsZW5hbWVfY2hhbmdlZF9ob29rKQogICAgICAgICBpZiBzZWxmLmlvLmZpbGVuYW1lOgogICAgICAgICAgICAgc2VsZi5yZXN0b3JlX2ZpbGVfYnJlYWtzKCkKKyAgICAgICAgc2VsZi5jb2xvcl9icmVha3BvaW50X3RleHQoKQogCiAgICAgcm1lbnVfc3BlY3MgPSBbCiAgICAgICAgICgiQ3V0IiwgIjw8Y3V0Pj4iLCAicm1lbnVfY2hlY2tfY3V0IiksCkBAIC0xNDgsNiArMTQ5LDE1IEBACiAgICAgICAgICgiQ2xlYXIgQnJlYWtwb2ludCIsICI8PGNsZWFyLWJyZWFrcG9pbnQtaGVyZT4+IiwgTm9uZSkKICAgICBdCiAKKyAgICBkZWYgY29sb3JfYnJlYWtwb2ludF90ZXh0KHNlbGYsIGNvbG9yPVRydWUpOgorICAgICAgICAiVHVybiBjb2xvcml6aW5nIG9mIGJyZWFrcG9pbnQgdGV4dCBvbiBvciBvZmYiCisgICAgICAgIGlmIGNvbG9yOgorICAgICAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ25hbWUnKQorICAgICAgICAgICAgY2ZnID0gaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAiYnJlYWsiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2ZnID0geydmb3JlZ3JvdW5kJzogJycsICdiYWNrZ3JvdW5kJzogJyd9CisgICAgICAgIHNlbGYudGV4dC50YWdfY29uZmlnKCdCUkVBSycsIGNmZykKKwogICAgIGRlZiBzZXRfYnJlYWtwb2ludChzZWxmLCBsaW5lbm8pOgogICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CiAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5pby5maWxlbmFtZQpAQCAtNDE5LDcgKzQyOSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5ycGNjbHQgPSBNeVJQQ0NsaWVudChhZGRyKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmRpc3BsYXlfcG9ydF9iaW5kaW5nX2Vycm9yKCkKQEAgLTg0NCw3ICs4NTQsNyBAQAogICAgICAgICAoImhlbHAiLCAiX0hlbHAiKSwKICAgICBdCiAKLSAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICAgICAgbWVudV9zcGVjc1stMl0gPSAoIndpbmRvd3MiLCAiX1dpbmRvdyIpCiAKIApAQCAtMTAzNCw3ICsxMDQ0LDEwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBub3N1YiA9ICI9PT09IE5vIFN1YnByb2Nlc3MgPT09PSIKKyAgICAgICAgICAgIG5vc3ViID0gKCI9PT09IE5vIFN1YnByb2Nlc3MgPT09PVxuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IFJ1bm5pbmcgSURMRSB3aXRob3V0IGEgU3VicHJvY2VzcyBpcyBkZXByZWNhdGVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBsYXRlciB2ZXJzaW9uLiBTZWUgSGVscC9JRExFIEhlbHBcbiIgKworICAgICAgICAgICAgICAgICAgICAiZm9yIGRldGFpbHMuXG5cbiIpCiAgICAgICAgICAgICBzeXMuZGlzcGxheWhvb2sgPSBycGMuZGlzcGxheWhvb2sKIAogICAgICAgICBzZWxmLndyaXRlKCJQeXRob24gJXMgb24gJXNcbiVzXG4lcyIgJQpAQCAtMTM5OCw3ICsxNDExLDggQEAKICAgICAgICBpZGxlICBbLWRuc10gWy10IHRpdGxlXSAtIFthcmddKgogCiAgIC1oICAgICAgICAgcHJpbnQgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLSAgLW4gICAgICAgICBydW4gSURMRSB3aXRob3V0IGEgc3VicHJvY2VzcyAoc2VlIEhlbHAvSURMRSBIZWxwIGZvciBkZXRhaWxzKQorICAtbiAgICAgICAgIHJ1biBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIChERVBSRUNBVEVELAorICAgICAgICAgICAgIHNlZSBIZWxwL0lETEUgSGVscCBmb3IgZGV0YWlscykKIAogVGhlIGZvbGxvd2luZyBvcHRpb25zIHdpbGwgb3ZlcnJpZGUgdGhlIElETEUgJ3NldHRpbmdzJyBjb25maWd1cmF0aW9uOgogCkBAIC0xNDc2LDYgKzE0OTAsOCBAQAogICAgICAgICBpZiBvID09ICctaSc6CiAgICAgICAgICAgICBlbmFibGVfc2hlbGwgPSBUcnVlCiAgICAgICAgIGlmIG8gPT0gJy1uJzoKKyAgICAgICAgICAgIHByaW50KCIgV2FybmluZzogcnVubmluZyBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHVzZV9zdWJwcm9jZXNzID0gRmFsc2UKICAgICAgICAgaWYgbyA9PSAnLXInOgogICAgICAgICAgICAgc2NyaXB0ID0gYQpAQCAtMTU1NCw3ICsxNTcwLDcgQEAKICAgICAgICAgc2hlbGwgPSBmbGlzdC5vcGVuX3NoZWxsKCkKICAgICAgICAgaWYgbm90IHNoZWxsOgogICAgICAgICAgICAgcmV0dXJuICMgY291bGRuJ3Qgb3BlbiBzaGVsbAotICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpIGFuZCBmbGlzdC5kaWN0OgorICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LmlzQXF1YVRrKCkgYW5kIGZsaXN0LmRpY3Q6CiAgICAgICAgICAgICAjIE9uIE9TWDogd2hlbiB0aGUgdXNlciBoYXMgZG91YmxlLWNsaWNrZWQgb24gYSBmaWxlIHRoYXQgY2F1c2VzCiAgICAgICAgICAgICAjIElETEUgdG8gYmUgbGF1bmNoZWQgdGhlIHNoZWxsIHdpbmRvdyB3aWxsIG9wZW4ganVzdCBpbiBmcm9udCBvZgogICAgICAgICAgICAgIyB0aGUgZmlsZSBzaGUgd2FudHMgdG8gc2VlLiBMb3dlciB0aGUgaW50ZXJwcmV0ZXIgd2luZG93IHdoZW4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1JlcGxhY2VEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9SZXBsYWNlRGlhbG9nLnB5CmluZGV4IGU3M2YyYzUuLmZjOGI4MGYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1JlcGxhY2VEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvUmVwbGFjZURpYWxvZy5weQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgZGVmIGNyZWF0ZV9lbnRyaWVzKHNlbGYpOgogICAgICAgICBTZWFyY2hEaWFsb2dCYXNlLmNyZWF0ZV9lbnRyaWVzKHNlbGYpCi0gICAgICAgIHNlbGYucmVwbGVudCA9IHNlbGYubWFrZV9lbnRyeSgiUmVwbGFjZSB3aXRoOiIsIHNlbGYucmVwbHZhcikKKyAgICAgICAgc2VsZi5yZXBsZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJSZXBsYWNlIHdpdGg6Iiwgc2VsZi5yZXBsdmFyKVswXQogCiAgICAgZGVmIGNyZWF0ZV9jb21tYW5kX2J1dHRvbnMoc2VsZik6CiAgICAgICAgIFNlYXJjaERpYWxvZ0Jhc2UuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucyhzZWxmKQpAQCAtMTg4LDMgKzE4OCwzNCBAQAogICAgIGRlZiBjbG9zZShzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAgU2VhcmNoRGlhbG9nQmFzZS5jbG9zZShzZWxmLCBldmVudCkKICAgICAgICAgc2VsZi50ZXh0LnRhZ19yZW1vdmUoImhpdCIsICIxLjAiLCAiZW5kIikKKworZGVmIF9yZXBsYWNlX2RpYWxvZyhwYXJlbnQpOgorICAgIHJvb3QgPSBUaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBSZXBsYWNlRGlhbG9nIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisKKyAgICAjIG1vY2sgdW5kbyBkZWxlZ2F0b3IgbWV0aG9kcworICAgIGRlZiB1bmRvX2Jsb2NrX3N0YXJ0KCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB1bmRvX2Jsb2NrX3N0b3AoKToKKyAgICAgICAgcGFzcworCisgICAgdGV4dCA9IFRleHQocm9vdCkKKyAgICB0ZXh0LnVuZG9fYmxvY2tfc3RhcnQgPSB1bmRvX2Jsb2NrX3N0YXJ0CisgICAgdGV4dC51bmRvX2Jsb2NrX3N0b3AgPSB1bmRvX2Jsb2NrX3N0b3AKKyAgICB0ZXh0LnBhY2soKQorICAgIHRleHQuaW5zZXJ0KCJpbnNlcnQiLCJUaGlzIGlzIGEgc2FtcGxlIHN0cmluZy5cbiIqMTApCisKKyAgICBkZWYgc2hvd19yZXBsYWNlKCk6CisgICAgICAgIHRleHQudGFnX2FkZChTRUwsICIxLjAiLCBFTkQpCisgICAgICAgIHJlcGxhY2UodGV4dCkKKyAgICAgICAgdGV4dC50YWdfcmVtb3ZlKFNFTCwgIjEuMCIsIEVORCkKKworICAgIGJ1dHRvbiA9IEJ1dHRvbihyb290LCB0ZXh0PSJSZXBsYWNlIiwgY29tbWFuZD1zaG93X3JlcGxhY2UpCisgICAgYnV0dG9uLnBhY2soKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfcmVwbGFjZV9kaWFsb2cpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TY3JpcHRCaW5kaW5nLnB5IGIvTGliL2lkbGVsaWIvU2NyaXB0QmluZGluZy5weQppbmRleCA2YmZlMTI4Li5iNzgzNjM3IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9TY3JpcHRCaW5kaW5nLnB5CisrKyBiL0xpYi9pZGxlbGliL1NjcmlwdEJpbmRpbmcucHkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgc2VsZi5mbGlzdCA9IHNlbGYuZWRpdHdpbi5mbGlzdAogICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLmVkaXR3aW4ucm9vdAogCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNDb2NvYVRrKCk6CiAgICAgICAgICAgICBzZWxmLmVkaXR3aW4udGV4dF9mcmFtZS5iaW5kKCc8PHJ1bi1tb2R1bGUtZXZlbnQtMj4+Jywgc2VsZi5fcnVuX21vZHVsZV9ldmVudCkKIAogICAgIGRlZiBjaGVja19tb2R1bGVfZXZlbnQoc2VsZiwgZXZlbnQpOgpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICBzaGVsbC5zZXRfd2FybmluZ19zdHJlYW0oc2F2ZWRfc3RyZWFtKQogCiAgICAgZGVmIHJ1bl9tb2R1bGVfZXZlbnQoc2VsZiwgZXZlbnQpOgotICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgorICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LmlzQ29jb2FUaygpOgogICAgICAgICAgICAgIyBUay1Db2NvYSBpbiBNYWNPU1ggaXMgYnJva2VuIHVudGlsIGF0IGxlYXN0CiAgICAgICAgICAgICAjIFRrIDguNS45LCBhbmQgd2l0aG91dCB0aGlzIHJhdGhlcgogICAgICAgICAgICAgIyBjcnVkZSB3b3JrYXJvdW5kIElETEUgd291bGQgaGFuZyB3aGVuIGEgdXNlcgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU2Nyb2xsZWRMaXN0LnB5IGIvTGliL2lkbGVsaWIvU2Nyb2xsZWRMaXN0LnB5CmluZGV4IDAyNTVhMGEuLjcxZWM1NDcgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1Njcm9sbGVkTGlzdC5weQorKysgYi9MaWIvaWRsZWxpYi9TY3JvbGxlZExpc3QucHkKQEAgLTExOSwyMSArMTE5LDIyIEBACiAgICAgICAgIHBhc3MKIAogCi1kZWYgdGVzdCgpOgorZGVmIF9zY3JvbGxlZF9saXN0KHBhcmVudCk6CiAgICAgcm9vdCA9IFRrKCkKLSAgICByb290LnByb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgcm9vdC5kZXN0cm95KQorICAgIHJvb3QudGl0bGUoIlRlc3QgU2Nyb2xsZWRMaXN0IikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCiAgICAgY2xhc3MgTXlTY3JvbGxlZExpc3QoU2Nyb2xsZWRMaXN0KToKLSAgICAgICAgZGVmIGZpbGxfbWVudShzZWxmKTogc2VsZi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSJwYXNzIikKKyAgICAgICAgZGVmIGZpbGxfbWVudShzZWxmKTogc2VsZi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSJyaWdodCBjbGljayIpCiAgICAgICAgIGRlZiBvbl9zZWxlY3Qoc2VsZiwgaW5kZXgpOiBwcmludCgic2VsZWN0Iiwgc2VsZi5nZXQoaW5kZXgpKQogICAgICAgICBkZWYgb25fZG91YmxlKHNlbGYsIGluZGV4KTogcHJpbnQoImRvdWJsZSIsIHNlbGYuZ2V0KGluZGV4KSkKLSAgICBzID0gTXlTY3JvbGxlZExpc3Qocm9vdCkKLSAgICBmb3IgaSBpbiByYW5nZSgzMCk6Ci0gICAgICAgIHMuYXBwZW5kKCJpdGVtICUwMmQiICUgaSkKLSAgICByZXR1cm4gcm9vdAogCi1kZWYgbWFpbigpOgotICAgIHJvb3QgPSB0ZXN0KCkKKyAgICBzY3JvbGxlZF9saXN0ID0gTXlTY3JvbGxlZExpc3Qocm9vdCkKKyAgICBmb3IgaSBpbiByYW5nZSgzMCk6CisgICAgICAgIHNjcm9sbGVkX2xpc3QuYXBwZW5kKCJJdGVtICUwMmQiICUgaSkKKwogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfc2Nyb2xsZWRfbGlzdCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1NlYXJjaERpYWxvZy5weSBiL0xpYi9pZGxlbGliL1NlYXJjaERpYWxvZy5weQppbmRleCBiZjc2YzQxLi4zODQwOGI4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nLnB5CkBAIC02NSwzICs2NSwyNSBAQAogICAgICAgICBpZiBwYXQ6CiAgICAgICAgICAgICBzZWxmLmVuZ2luZS5zZXRjb29rZWRwYXQocGF0KQogICAgICAgICByZXR1cm4gc2VsZi5maW5kX2FnYWluKHRleHQpCisKK2RlZiBfc2VhcmNoX2RpYWxvZyhwYXJlbnQpOgorICAgIHJvb3QgPSBUaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBTZWFyY2hEaWFsb2ciKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKyAgICB0ZXh0ID0gVGV4dChyb290KQorICAgIHRleHQucGFjaygpCisgICAgdGV4dC5pbnNlcnQoImluc2VydCIsIlRoaXMgaXMgYSBzYW1wbGUgc3RyaW5nLlxuIioxMCkKKworICAgIGRlZiBzaG93X2ZpbmQoKToKKyAgICAgICAgdGV4dC50YWdfYWRkKFNFTCwgIjEuMCIsIEVORCkKKyAgICAgICAgcyA9IF9zZXR1cCh0ZXh0KQorICAgICAgICBzLm9wZW4odGV4dCkKKyAgICAgICAgdGV4dC50YWdfcmVtb3ZlKFNFTCwgIjEuMCIsIEVORCkKKworICAgIGJ1dHRvbiA9IEJ1dHRvbihyb290LCB0ZXh0PSJTZWFyY2giLCBjb21tYW5kPXNob3dfZmluZCkKKyAgICBidXR0b24ucGFjaygpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9zZWFyY2hfZGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nQmFzZS5weSBiL0xpYi9pZGxlbGliL1NlYXJjaERpYWxvZ0Jhc2UucHkKaW5kZXggYjhiNDliMi4uNWZhODRlMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nQmFzZS5weQorKysgYi9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2dCYXNlLnB5CkBAIC0xLDM0ICsxLDUxIEBACiAnJydEZWZpbmUgU2VhcmNoRGlhbG9nQmFzZSB1c2VkIGJ5IFNlYXJjaCwgUmVwbGFjZSwgYW5kIEdyZXAgZGlhbG9ncy4nJycKLWZyb20gdGtpbnRlciBpbXBvcnQgKgorCitmcm9tIHRraW50ZXIgaW1wb3J0IChUb3BsZXZlbCwgRnJhbWUsIEVudHJ5LCBMYWJlbCwgQnV0dG9uLAorICAgICAgICAgICAgICAgICAgICAgQ2hlY2tidXR0b24sIFJhZGlvYnV0dG9uKQogCiBjbGFzcyBTZWFyY2hEaWFsb2dCYXNlOgotICAgICcnJ0NyZWF0ZSBtb3N0IG9mIGEgbW9kYWwgc2VhcmNoIGRpYWxvZyAobWFrZV9mcmFtZSwgY3JlYXRlX3dpZGdldHMpLgorICAgICcnJ0NyZWF0ZSBtb3N0IG9mIGEgMyBvciA0IHJvdywgMyBjb2x1bW4gc2VhcmNoIGRpYWxvZy4KIAotICAgIFRoZSB3aWRlIGxlZnQgY29sdW1uIGNvbnRhaW5zOgotICAgIDEgb3IgMiB0ZXh0IGVudHJ5IGxpbmVzIChjcmVhdGVfZW50cmllcywgbWFrZV9lbnRyeSk7Ci0gICAgYSByb3cgb2Ygc3RhbmRhcmQgcmFkaW9idXR0b25zIChjcmVhdGVfb3B0aW9uX2J1dHRvbnMpOwotICAgIGEgcm93IG9mIGRpYWxvZyBzcGVjaWZpYyByYWRpb2J1dHRvbnMgKGNyZWF0ZV9vdGhlcl9idXR0b25zKS4KKyAgICBUaGUgbGVmdCBhbmQgd2lkZSBtaWRkbGUgY29sdW1uIGNvbnRhaW46CisgICAgMSBvciAyIGxhYmVsZWQgdGV4dCBlbnRyeSBsaW5lcyAobWFrZV9lbnRyeSwgY3JlYXRlX2VudHJpZXMpOworICAgIGEgcm93IG9mIHN0YW5kYXJkIENoZWNrYnV0dG9ucyAobWFrZV9mcmFtZSwgY3JlYXRlX29wdGlvbl9idXR0b25zKSwKKyAgICBlYWNoIG9mIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgc2VhcmNoIGVuZ2luZSBWYXJpYWJsZTsKKyAgICBhIHJvdyBvZiBkaWFsb2ctc3BlY2lmaWMgQ2hlY2svUmFkaW9idXR0b25zIChjcmVhdGVfb3RoZXJfYnV0dG9ucykuCiAKICAgICBUaGUgbmFycm93IHJpZ2h0IGNvbHVtbiBjb250YWlucyBjb21tYW5kIGJ1dHRvbnMKLSAgICAoY3JlYXRlX2NvbW1hbmRfYnV0dG9ucywgbWFrZV9idXR0b24pLgorICAgIChtYWtlX2J1dHRvbiwgY3JlYXRlX2NvbW1hbmRfYnV0dG9ucykuCiAgICAgVGhlc2UgYXJlIGJvdW5kIHRvIGZ1bmN0aW9ucyB0aGF0IGV4ZWN1dGUgdGhlIGNvbW1hbmQuCiAKLSAgICBFeGNlcHQgZm9yIGNvbW1hbmQgYnV0dG9ucywgdGhpcyBiYXNlIGNsYXNzIGlzIG5vdCBsaW1pdGVkIHRvCi0gICAgaXRlbXMgY29tbW9uIHRvIGFsbCB0aHJlZSBzdWJjbGFzc2VzLiAgUmF0aGVyLCBpdCBpcyB0aGUgRmluZCBkaWFsb2cKLSAgICBtaW51cyB0aGUgIkZpbmQgTmV4dCIgY29tbWFuZCBhbmQgaXRzIGV4ZWN1dGlvbiBmdW5jdGlvbi4KLSAgICBUaGUgb3RoZXIgZGlhbG9ncyBvdmVycmlkZSBtZXRob2RzIHRvIHJlcGxhY2UgYW5kIGFkZCB3aWRnZXRzLgorICAgIEV4Y2VwdCBmb3IgY29tbWFuZCBidXR0b25zLCB0aGlzIGJhc2UgY2xhc3MgaXMgbm90IGxpbWl0ZWQgdG8gaXRlbXMKKyAgICBjb21tb24gdG8gYWxsIHRocmVlIHN1YmNsYXNzZXMuICBSYXRoZXIsIGl0IGlzIHRoZSBGaW5kIGRpYWxvZyBtaW51cworICAgIHRoZSAiRmluZCBOZXh0IiBjb21tYW5kLCBpdHMgZXhlY3V0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlCisgICAgZGVmYXVsdF9jb21tYW5kIGF0dHJpYnV0ZSBuZWVkZWQgaW4gY3JlYXRlX3dpZGdldHMuIFRoZSBvdGhlcgorICAgIGRpYWxvZ3Mgb3ZlcnJpZGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcywgdGhlIGxhdHRlciB0byByZXBsYWNlIGFuZAorICAgIGFkZCB3aWRnZXRzLgogICAgICcnJwogCi0gICAgdGl0bGUgPSAiU2VhcmNoIERpYWxvZyIKKyAgICB0aXRsZSA9ICJTZWFyY2ggRGlhbG9nIiAgIyByZXBsYWNlIGluIHN1YmNsYXNzZXMKICAgICBpY29uID0gIlNlYXJjaCIKLSAgICBuZWVkd3JhcGJ1dHRvbiA9IDEKKyAgICBuZWVkd3JhcGJ1dHRvbiA9IDEgICMgbm90IGluIEZpbmQgaW4gRmlsZXMKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290LCBlbmdpbmUpOgorICAgICAgICAnJydJbml0aWFsaXplIHJvb3QsIGVuZ2luZSwgYW5kIHRvcCBhdHRyaWJ1dGVzLgorCisgICAgICAgIHRvcCAobGV2ZWwgd2lkZ2V0KTogc2V0IGluIGNyZWF0ZV93aWRnZXRzKCkgY2FsbGVkIGZyb20gb3BlbigpLgorICAgICAgICB0ZXh0IChUZXh0IHNlYXJjaGVkKTogc2V0IGluIG9wZW4oKSwgb25seSB1c2VkIGluIHN1YmNsYXNzZXMoKS4KKyAgICAgICAgZW50IChyeSk6IGNyZWF0ZWQgaW4gbWFrZV9lbnRyeSgpIGNhbGxlZCBmcm9tIGNyZWF0ZV9lbnRyeSgpLgorICAgICAgICByb3cgKG9mIGdyaWQpOiAwIGluIGNyZWF0ZV93aWRnZXRzKCksICsxIGluIG1ha2VfZW50cnkvZnJhbWUoKS4KKyAgICAgICAgZGVmYXVsdF9jb21tYW5kOiBzZXQgaW4gc3ViY2xhc3NlcywgdXNlZCBpbiBjcmVhdGVfd2lkZ2VycygpLgorCisgICAgICAgIHRpdGxlIChvZiBkaWFsb2cpOiBjbGFzcyBhdHRyaWJ1dGUsIG92ZXJyaWRlIGluIHN1YmNsYXNzZXMuCisgICAgICAgIGljb24gKG9mIGRpYWxvZyk6IGRpdHRvLCB1c2UgdW5jbGVhciBpZiBjYW5ub3QgbWluaW1pemUgZGlhbG9nLgorICAgICAgICAnJycKICAgICAgICAgc2VsZi5yb290ID0gcm9vdAogICAgICAgICBzZWxmLmVuZ2luZSA9IGVuZ2luZQogICAgICAgICBzZWxmLnRvcCA9IE5vbmUKIAogICAgIGRlZiBvcGVuKHNlbGYsIHRleHQsIHNlYXJjaHBocmFzZT1Ob25lKToKKyAgICAgICAgIk1ha2UgZGlhbG9nIHZpc2libGUgb24gdG9wIG9mIG90aGVycyBhbmQgcmVhZHkgdG8gdXNlLiIKICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAogICAgICAgICBpZiBub3Qgc2VsZi50b3A6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZV93aWRnZXRzKCkKQEAgLTQ0LDExICs2MSwxNyBAQAogICAgICAgICBzZWxmLnRvcC5ncmFiX3NldCgpCiAKICAgICBkZWYgY2xvc2Uoc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgICJQdXQgZGlhbG9nIGF3YXkgZm9yIGxhdGVyIHVzZS4iCiAgICAgICAgIGlmIHNlbGYudG9wOgogICAgICAgICAgICAgc2VsZi50b3AuZ3JhYl9yZWxlYXNlKCkKICAgICAgICAgICAgIHNlbGYudG9wLndpdGhkcmF3KCkKIAogICAgIGRlZiBjcmVhdGVfd2lkZ2V0cyhzZWxmKToKKyAgICAgICAgJycnQ3JlYXRlIGJhc2ljIDMgcm93IHggMyBjb2wgc2VhcmNoIChmaW5kKSBkaWFsb2cuCisKKyAgICAgICAgT3RoZXIgZGlhbG9ncyBvdmVycmlkZSBzdWJzaWRpYXJ5IGNyZWF0ZV94IG1ldGhvZHMgYXMgbmVlZGVkLgorICAgICAgICBSZXBsYWNlIGFuZCBGaW5kLWluLUZpbGVzIGFkZCBhbm90aGVyIGVudHJ5IHJvdy4KKyAgICAgICAgJycnCiAgICAgICAgIHRvcCA9IFRvcGxldmVsKHNlbGYucm9vdCkKICAgICAgICAgdG9wLmJpbmQoIjxSZXR1cm4+Iiwgc2VsZi5kZWZhdWx0X2NvbW1hbmQpCiAgICAgICAgIHRvcC5iaW5kKCI8RXNjYXBlPiIsIHNlbGYuY2xvc2UpCkBAIC02MSwyOSArODQsODQgQEAKICAgICAgICAgc2VsZi50b3AuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgcGFkPTIsIHdlaWdodD0wKQogICAgICAgICBzZWxmLnRvcC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgxLCBwYWQ9MiwgbWluc2l6ZT0xMDAsIHdlaWdodD0xMDApCiAKLSAgICAgICAgc2VsZi5jcmVhdGVfZW50cmllcygpCi0gICAgICAgIHNlbGYuY3JlYXRlX29wdGlvbl9idXR0b25zKCkKLSAgICAgICAgc2VsZi5jcmVhdGVfb3RoZXJfYnV0dG9ucygpCi0gICAgICAgIHJldHVybiBzZWxmLmNyZWF0ZV9jb21tYW5kX2J1dHRvbnMoKQorICAgICAgICBzZWxmLmNyZWF0ZV9lbnRyaWVzKCkgICMgcm93IDAgKGFuZCBtYXliZSAxKSwgY29scyAwLCAxCisgICAgICAgIHNlbGYuY3JlYXRlX29wdGlvbl9idXR0b25zKCkgICMgbmV4dCByb3csIGNvbHMgMCwgMQorICAgICAgICBzZWxmLmNyZWF0ZV9vdGhlcl9idXR0b25zKCkgICMgbmV4dCByb3csIGNvbHMgMCwgMQorICAgICAgICBzZWxmLmNyZWF0ZV9jb21tYW5kX2J1dHRvbnMoKSAgIyBjb2wgMiwgYWxsIHJvd3MKIAotICAgIGRlZiBtYWtlX2VudHJ5KHNlbGYsIGxhYmVsLCB2YXIpOgotICAgICAgICBsID0gTGFiZWwoc2VsZi50b3AsIHRleHQ9bGFiZWwpCi0gICAgICAgIGwuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0wLCBzdGlja3k9Im53IikKLSAgICAgICAgZSA9IEVudHJ5KHNlbGYudG9wLCB0ZXh0dmFyaWFibGU9dmFyLCBleHBvcnRzZWxlY3Rpb249MCkKLSAgICAgICAgZS5ncmlkKHJvdz1zZWxmLnJvdywgY29sdW1uPTEsIHN0aWNreT0ibndlIikKKyAgICBkZWYgbWFrZV9lbnRyeShzZWxmLCBsYWJlbF90ZXh0LCB2YXIpOgorICAgICAgICAnJydSZXR1cm4gKGVudHJ5LCBsYWJlbCksIC4KKworICAgICAgICBlbnRyeSAtIGdyaWRkZWQgbGFiZWxlZCBFbnRyeSBmb3IgdGV4dCBlbnRyeS4KKyAgICAgICAgbGFiZWwgLSBMYWJlbCB3aWRnZXQsIHJldHVybmVkIGZvciB0ZXN0aW5nLgorICAgICAgICAnJycKKyAgICAgICAgbGFiZWwgPSBMYWJlbChzZWxmLnRvcCwgdGV4dD1sYWJlbF90ZXh0KQorICAgICAgICBsYWJlbC5ncmlkKHJvdz1zZWxmLnJvdywgY29sdW1uPTAsIHN0aWNreT0ibnciKQorICAgICAgICBlbnRyeSA9IEVudHJ5KHNlbGYudG9wLCB0ZXh0dmFyaWFibGU9dmFyLCBleHBvcnRzZWxlY3Rpb249MCkKKyAgICAgICAgZW50cnkuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0xLCBzdGlja3k9Im53ZSIpCiAgICAgICAgIHNlbGYucm93ID0gc2VsZi5yb3cgKyAxCi0gICAgICAgIHJldHVybiBlCisgICAgICAgIHJldHVybiBlbnRyeSwgbGFiZWwKKworICAgIGRlZiBjcmVhdGVfZW50cmllcyhzZWxmKToKKyAgICAgICAgIkNyZWF0ZSBvbmUgb3IgbW9yZSBlbnRyeSBsaW5lcyB3aXRoIG1ha2VfZW50cnkuIgorICAgICAgICBzZWxmLmVudCA9IHNlbGYubWFrZV9lbnRyeSgiRmluZDoiLCBzZWxmLmVuZ2luZS5wYXR2YXIpWzBdCiAKICAgICBkZWYgbWFrZV9mcmFtZShzZWxmLGxhYmVsdGV4dD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJuIChmcmFtZSwgbGFiZWwpLgorCisgICAgICAgIGZyYW1lIC0gZ3JpZGRlZCBsYWJlbGVkIEZyYW1lIGZvciBvcHRpb24gb3Igb3RoZXIgYnV0dG9ucy4KKyAgICAgICAgbGFiZWwgLSBMYWJlbCB3aWRnZXQsIHJldHVybmVkIGZvciB0ZXN0aW5nLgorICAgICAgICAnJycKICAgICAgICAgaWYgbGFiZWx0ZXh0OgotICAgICAgICAgICAgbCA9IExhYmVsKHNlbGYudG9wLCB0ZXh0PWxhYmVsdGV4dCkKLSAgICAgICAgICAgIGwuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0wLCBzdGlja3k9Im53IikKLSAgICAgICAgZiA9IEZyYW1lKHNlbGYudG9wKQotICAgICAgICBmLmdyaWQocm93PXNlbGYucm93LCBjb2x1bW49MSwgY29sdW1uc3Bhbj0xLCBzdGlja3k9Im53ZSIpCisgICAgICAgICAgICBsYWJlbCA9IExhYmVsKHNlbGYudG9wLCB0ZXh0PWxhYmVsdGV4dCkKKyAgICAgICAgICAgIGxhYmVsLmdyaWQocm93PXNlbGYucm93LCBjb2x1bW49MCwgc3RpY2t5PSJudyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYWJlbCA9ICcnCisgICAgICAgIGZyYW1lID0gRnJhbWUoc2VsZi50b3ApCisgICAgICAgIGZyYW1lLmdyaWQocm93PXNlbGYucm93LCBjb2x1bW49MSwgY29sdW1uc3Bhbj0xLCBzdGlja3k9Im53ZSIpCiAgICAgICAgIHNlbGYucm93ID0gc2VsZi5yb3cgKyAxCi0gICAgICAgIHJldHVybiBmCisgICAgICAgIHJldHVybiBmcmFtZSwgbGFiZWwKKworICAgIGRlZiBjcmVhdGVfb3B0aW9uX2J1dHRvbnMoc2VsZik6CisgICAgICAgICcnJ1JldHVybiAoZmlsbGVkIGZyYW1lLCBvcHRpb25zKSBmb3IgdGVzdGluZy4KKworICAgICAgICBPcHRpb25zIGlzIGEgbGlzdCBvZiBTZWFyY2hFbmdpbmUgYm9vbGVhbnZhciwgbGFiZWwgcGFpcnMuCisgICAgICAgIEEgZ3JpZGRlZCBmcmFtZSBmcm9tIG1ha2VfZnJhbWUgaXMgZmlsbGVkIHdpdGggYSBDaGVja2J1dHRvbgorICAgICAgICBmb3IgZWFjaCBwYWlyLCBib3VuZCB0byB0aGUgdmFyLCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGxhYmVsLgorICAgICAgICAnJycKKyAgICAgICAgZnJhbWUgPSBzZWxmLm1ha2VfZnJhbWUoIk9wdGlvbnMiKVswXQorICAgICAgICBlbmdpbmUgPSBzZWxmLmVuZ2luZQorICAgICAgICBvcHRpb25zID0gWyhlbmdpbmUucmV2YXIsICJSZWd1bGFyIGV4cHJlc3Npb24iKSwKKyAgICAgICAgICAgICAgICAgICAoZW5naW5lLmNhc2V2YXIsICJNYXRjaCBjYXNlIiksCisgICAgICAgICAgICAgICAgICAgKGVuZ2luZS53b3JkdmFyLCAiV2hvbGUgd29yZCIpXQorICAgICAgICBpZiBzZWxmLm5lZWR3cmFwYnV0dG9uOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoKGVuZ2luZS53cmFwdmFyLCAiV3JhcCBhcm91bmQiKSkKKyAgICAgICAgZm9yIHZhciwgbGFiZWwgaW4gb3B0aW9uczoKKyAgICAgICAgICAgIGJ0biA9IENoZWNrYnV0dG9uKGZyYW1lLCBhbmNob3I9InciLCB2YXJpYWJsZT12YXIsIHRleHQ9bGFiZWwpCisgICAgICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCisgICAgICAgICAgICBpZiB2YXIuZ2V0KCk6CisgICAgICAgICAgICAgICAgYnRuLnNlbGVjdCgpCisgICAgICAgIHJldHVybiBmcmFtZSwgb3B0aW9ucworCisgICAgZGVmIGNyZWF0ZV9vdGhlcl9idXR0b25zKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gKGZyYW1lLCBvdGhlcnMpIGZvciB0ZXN0aW5nLgorCisgICAgICAgIE90aGVycyBpcyBhIGxpc3Qgb2YgdmFsdWUsIGxhYmVsIHBhaXJzLgorICAgICAgICBBIGdyaWRkZWQgZnJhbWUgZnJvbSBtYWtlX2ZyYW1lIGlzIGZpbGxlZCB3aXRoIHJhZGlvIGJ1dHRvbnMuCisgICAgICAgICcnJworICAgICAgICBmcmFtZSA9IHNlbGYubWFrZV9mcmFtZSgiRGlyZWN0aW9uIilbMF0KKyAgICAgICAgdmFyID0gc2VsZi5lbmdpbmUuYmFja3ZhcgorICAgICAgICBvdGhlcnMgPSBbKDEsICdVcCcpLCAoMCwgJ0Rvd24nKV0KKyAgICAgICAgZm9yIHZhbCwgbGFiZWwgaW4gb3RoZXJzOgorICAgICAgICAgICAgYnRuID0gUmFkaW9idXR0b24oZnJhbWUsIGFuY2hvcj0idyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT12YXIsIHZhbHVlPXZhbCwgdGV4dD1sYWJlbCkKKyAgICAgICAgICAgIGJ0bi5wYWNrKHNpZGU9ImxlZnQiLCBmaWxsPSJib3RoIikKKyAgICAgICAgICAgIGlmIHZhci5nZXQoKSA9PSB2YWw6CisgICAgICAgICAgICAgICAgYnRuLnNlbGVjdCgpCisgICAgICAgIHJldHVybiBmcmFtZSwgb3RoZXJzCiAKICAgICBkZWYgbWFrZV9idXR0b24oc2VsZiwgbGFiZWwsIGNvbW1hbmQsIGlzZGVmPTApOgorICAgICAgICAiUmV0dXJuIGNvbW1hbmQgYnV0dG9uIGdyaWRkZWQgaW4gY29tbWFuZCBmcmFtZS4iCiAgICAgICAgIGIgPSBCdXR0b24oc2VsZi5idXR0b25mcmFtZSwKICAgICAgICAgICAgICAgICAgICB0ZXh0PWxhYmVsLCBjb21tYW5kPWNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1pc2RlZiBhbmQgImFjdGl2ZSIgb3IgIm5vcm1hbCIpCkBAIC05Miw2NiArMTcwLDE1IEBACiAgICAgICAgIHNlbGYuYnV0dG9uZnJhbWUuZ3JpZChyb3dzcGFuPXJvd3MrMSkKICAgICAgICAgcmV0dXJuIGIKIAotICAgIGRlZiBjcmVhdGVfZW50cmllcyhzZWxmKToKLSAgICAgICAgc2VsZi5lbnQgPSBzZWxmLm1ha2VfZW50cnkoIkZpbmQ6Iiwgc2VsZi5lbmdpbmUucGF0dmFyKQotCi0gICAgZGVmIGNyZWF0ZV9vcHRpb25fYnV0dG9ucyhzZWxmKToKLSAgICAgICAgZiA9IHNlbGYubWFrZV9mcmFtZSgiT3B0aW9ucyIpCi0KLSAgICAgICAgYnRuID0gQ2hlY2tidXR0b24oZiwgYW5jaG9yPSJ3IiwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS5yZXZhciwKLSAgICAgICAgICAgICAgICB0ZXh0PSJSZWd1bGFyIGV4cHJlc3Npb24iKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIHNlbGYuZW5naW5lLmlzcmUoKToKLSAgICAgICAgICAgIGJ0bi5zZWxlY3QoKQotCi0gICAgICAgIGJ0biA9IENoZWNrYnV0dG9uKGYsIGFuY2hvcj0idyIsCi0gICAgICAgICAgICAgICAgdmFyaWFibGU9c2VsZi5lbmdpbmUuY2FzZXZhciwKLSAgICAgICAgICAgICAgICB0ZXh0PSJNYXRjaCBjYXNlIikKLSAgICAgICAgYnRuLnBhY2soc2lkZT0ibGVmdCIsIGZpbGw9ImJvdGgiKQotICAgICAgICBpZiBzZWxmLmVuZ2luZS5pc2Nhc2UoKToKLSAgICAgICAgICAgIGJ0bi5zZWxlY3QoKQotCi0gICAgICAgIGJ0biA9IENoZWNrYnV0dG9uKGYsIGFuY2hvcj0idyIsCi0gICAgICAgICAgICAgICAgdmFyaWFibGU9c2VsZi5lbmdpbmUud29yZHZhciwKLSAgICAgICAgICAgICAgICB0ZXh0PSJXaG9sZSB3b3JkIikKLSAgICAgICAgYnRuLnBhY2soc2lkZT0ibGVmdCIsIGZpbGw9ImJvdGgiKQotICAgICAgICBpZiBzZWxmLmVuZ2luZS5pc3dvcmQoKToKLSAgICAgICAgICAgIGJ0bi5zZWxlY3QoKQotCi0gICAgICAgIGlmIHNlbGYubmVlZHdyYXBidXR0b246Ci0gICAgICAgICAgICBidG4gPSBDaGVja2J1dHRvbihmLCBhbmNob3I9InciLAotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS53cmFwdmFyLAotICAgICAgICAgICAgICAgICAgICB0ZXh0PSJXcmFwIGFyb3VuZCIpCi0gICAgICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgICAgICBpZiBzZWxmLmVuZ2luZS5pc3dyYXAoKToKLSAgICAgICAgICAgICAgICBidG4uc2VsZWN0KCkKLQotICAgIGRlZiBjcmVhdGVfb3RoZXJfYnV0dG9ucyhzZWxmKToKLSAgICAgICAgZiA9IHNlbGYubWFrZV9mcmFtZSgiRGlyZWN0aW9uIikKLQotICAgICAgICAjbGJsID0gTGFiZWwoZiwgdGV4dD0iRGlyZWN0aW9uOiAiKQotICAgICAgICAjbGJsLnBhY2soc2lkZT0ibGVmdCIpCi0KLSAgICAgICAgYnRuID0gUmFkaW9idXR0b24oZiwgYW5jaG9yPSJ3IiwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS5iYWNrdmFyLCB2YWx1ZT0xLAotICAgICAgICAgICAgICAgIHRleHQ9IlVwIikKLSAgICAgICAgYnRuLnBhY2soc2lkZT0ibGVmdCIsIGZpbGw9ImJvdGgiKQotICAgICAgICBpZiBzZWxmLmVuZ2luZS5pc2JhY2soKToKLSAgICAgICAgICAgIGJ0bi5zZWxlY3QoKQotCi0gICAgICAgIGJ0biA9IFJhZGlvYnV0dG9uKGYsIGFuY2hvcj0idyIsCi0gICAgICAgICAgICAgICAgdmFyaWFibGU9c2VsZi5lbmdpbmUuYmFja3ZhciwgdmFsdWU9MCwKLSAgICAgICAgICAgICAgICB0ZXh0PSJEb3duIikKLSAgICAgICAgYnRuLnBhY2soc2lkZT0ibGVmdCIsIGZpbGw9ImJvdGgiKQotICAgICAgICBpZiBub3Qgc2VsZi5lbmdpbmUuaXNiYWNrKCk6Ci0gICAgICAgICAgICBidG4uc2VsZWN0KCkKLQogICAgIGRlZiBjcmVhdGVfY29tbWFuZF9idXR0b25zKHNlbGYpOgotICAgICAgICAjCi0gICAgICAgICMgcGxhY2UgYnV0dG9uIGZyYW1lIG9uIHRoZSByaWdodAorICAgICAgICAiUGxhY2UgYnV0dG9ucyBpbiB2ZXJ0aWNhbCBjb21tYW5kIGZyYW1lIGdyaWRkZWQgb24gcmlnaHQuIgogICAgICAgICBmID0gc2VsZi5idXR0b25mcmFtZSA9IEZyYW1lKHNlbGYudG9wKQogICAgICAgICBmLmdyaWQocm93PTAsY29sdW1uPTIscGFkeD0yLHBhZHk9MixpcGFkeD0yLGlwYWR5PTIpCiAKICAgICAgICAgYiA9IHNlbGYubWFrZV9idXR0b24oImNsb3NlIiwgc2VsZi5jbG9zZSkKICAgICAgICAgYi5sb3dlcigpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbigKKyAgICAgICAgJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3Rfc2VhcmNoZGlhbG9nYmFzZScsIHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU2VhcmNoRW5naW5lLnB5IGIvTGliL2lkbGVsaWIvU2VhcmNoRW5naW5lLnB5CmluZGV4IDlkM2M0Y2IuLjA5OWNiMDkgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1NlYXJjaEVuZ2luZS5weQorKysgYi9MaWIvaWRsZWxpYi9TZWFyY2hFbmdpbmUucHkKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgZXhjZXB0IHJlLmVycm9yIGFzIHdoYXQ6CiAgICAgICAgICAgICBhcmdzID0gd2hhdC5hcmdzCiAgICAgICAgICAgICBtc2cgPSBhcmdzWzBdCi0gICAgICAgICAgICBjb2wgPSBhcmdbMV0gaWYgbGVuKGFyZ3MpID49IDIgZWxzZSAtMQorICAgICAgICAgICAgY29sID0gYXJnc1sxXSBpZiBsZW4oYXJncykgPj0gMiBlbHNlIC0xCiAgICAgICAgICAgICBzZWxmLnJlcG9ydF9lcnJvcihwYXQsIG1zZywgY29sKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuIHByb2cKQEAgLTIyOSw2ICsyMjksNSBAQAogICAgIHJldHVybiBsaW5lLCBjb2wKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQ7IHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10KICAgICBpbXBvcnQgdW5pdHRlc3QKICAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3NlYXJjaGVuZ2luZScsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU3RhY2tWaWV3ZXIucHkgYi9MaWIvaWRsZWxpYi9TdGFja1ZpZXdlci5weQppbmRleCA0ZWYyZDMxLi5iMWU1ZTI2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9TdGFja1ZpZXdlci5weQorKysgYi9MaWIvaWRsZWxpYi9TdGFja1ZpZXdlci5weQpAQCAtMSw5ICsxLDEyIEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCByZQoraW1wb3J0IHRraW50ZXIgYXMgdGsKIAogZnJvbSBpZGxlbGliLlRyZWVXaWRnZXQgaW1wb3J0IFRyZWVOb2RlLCBUcmVlSXRlbSwgU2Nyb2xsZWRDYW52YXMKIGZyb20gaWRsZWxpYi5PYmplY3RCcm93c2VyIGltcG9ydCBPYmplY3RUcmVlSXRlbSwgbWFrZV9vYmplY3R0cmVlaXRlbQorZnJvbSBpZGxlbGliLlB5U2hlbGwgaW1wb3J0IFB5U2hlbGxGaWxlTGlzdAogCiBkZWYgU3RhY2tCcm93c2VyKHJvb3QsIGZsaXN0PU5vbmUsIHRiPU5vbmUsIHRvcD1Ob25lKToKICAgICBpZiB0b3AgaXMgTm9uZToKQEAgLTEyMCwzICsxMjMsMzAgQEAKICAgICAgICAgICAgIGl0ZW0gPSBtYWtlX29iamVjdHRyZWVpdGVtKGtleSArICIgPSIsIHZhbHVlLCBzZXRmdW5jdGlvbikKICAgICAgICAgICAgIHN1Ymxpc3QuYXBwZW5kKGl0ZW0pCiAgICAgICAgIHJldHVybiBzdWJsaXN0CisKK2RlZiBfc3RhY2tfdmlld2VyKHBhcmVudCk6CisgICAgcm9vdCA9IHRrLlRrKCkKKyAgICByb290LnRpdGxlKCJUZXN0IFN0YWNrVmlld2VyIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisgICAgZmxpc3QgPSBQeVNoZWxsRmlsZUxpc3Qocm9vdCkKKyAgICB0cnk6ICMgdG8gb2J0YWluIGEgdHJhY2ViYWNrIG9iamVjdAorICAgICAgICBpbnRlbnRpb25hbF9uYW1lX2Vycm9yCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgZXhjX3R5cGUsIGV4Y192YWx1ZSwgZXhjX3RiID0gc3lzLmV4Y19pbmZvKCkKKworICAgICMgaW5qZWN0IHN0YWNrIHRyYWNlIHRvIHN5cworICAgIHN5cy5sYXN0X3R5cGUgPSBleGNfdHlwZQorICAgIHN5cy5sYXN0X3ZhbHVlID0gZXhjX3ZhbHVlCisgICAgc3lzLmxhc3RfdHJhY2ViYWNrID0gZXhjX3RiCisKKyAgICBTdGFja0Jyb3dzZXIocm9vdCwgZmxpc3Q9Zmxpc3QsIHRvcD1yb290LCB0Yj1leGNfdGIpCisKKyAgICAjIHJlc3RvcmUgc3lzIHRvIG9yaWdpbmFsIHN0YXRlCisgICAgZGVsIHN5cy5sYXN0X3R5cGUKKyAgICBkZWwgc3lzLmxhc3RfdmFsdWUKKyAgICBkZWwgc3lzLmxhc3RfdHJhY2ViYWNrCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9zdGFja192aWV3ZXIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9Ub29sVGlwLnB5IGIvTGliL2lkbGVsaWIvVG9vbFRpcC5weQppbmRleCBiMTc4ODAzLi45NjQxMDdlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9Ub29sVGlwLnB5CisrKyBiL0xpYi9pZGxlbGliL1Rvb2xUaXAucHkKQEAgLTc2LDE0ICs3NiwyMiBAQAogICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLml0ZW1zOgogICAgICAgICAgICAgbGlzdGJveC5pbnNlcnQoRU5ELCBpdGVtKQogCi1kZWYgbWFpbigpOgotICAgICMgVGVzdCBjb2RlCitkZWYgX3Rvb2x0aXAocGFyZW50KToKICAgICByb290ID0gVGsoKQotICAgIGIgPSBCdXR0b24ocm9vdCwgdGV4dD0iSGVsbG8iLCBjb21tYW5kPXJvb3QuZGVzdHJveSkKLSAgICBiLnBhY2soKQotICAgIHJvb3QudXBkYXRlKCkKLSAgICB0aXAgPSBMaXN0Ym94VG9vbFRpcChiLCBbIkhlbGxvIiwgIndvcmxkIl0pCisgICAgcm9vdC50aXRsZSgiVGVzdCB0b29sdGlwIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisgICAgbGFiZWwgPSBMYWJlbChyb290LCB0ZXh0PSJQbGFjZSB5b3VyIG1vdXNlIG92ZXIgYnV0dG9ucyIpCisgICAgbGFiZWwucGFjaygpCisgICAgYnV0dG9uMSA9IEJ1dHRvbihyb290LCB0ZXh0PSJCdXR0b24gMSIpCisgICAgYnV0dG9uMiA9IEJ1dHRvbihyb290LCB0ZXh0PSJCdXR0b24gMiIpCisgICAgYnV0dG9uMS5wYWNrKCkKKyAgICBidXR0b24yLnBhY2soKQorICAgIFRvb2xUaXAoYnV0dG9uMSwgIlRoaXMgaXMgdG9vbHRpcCB0ZXh0IGZvciBidXR0b24xLiIpCisgICAgTGlzdGJveFRvb2xUaXAoYnV0dG9uMiwgWyJUaGlzIGlzIiwibXVsdGlwbGUgbGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvb2x0aXAgdGV4dCIsImZvciBidXR0b24yIl0pCiAgICAgcm9vdC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF90b29sdGlwKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weSBiL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKaW5kZXggMjViYWU0OC4uZjA1MDExZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQorKysgYi9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CkBAIC0zODEsNyArMzgxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKHNlbGYucGF0aCwgbmV3cGF0aCkKICAgICAgICAgICAgIHNlbGYucGF0aCA9IG5ld3BhdGgKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBHZXRJY29uTmFtZShzZWxmKToKQEAgLTM5NCw3ICszOTQsNyBAQAogICAgIGRlZiBHZXRTdWJMaXN0KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc2VsZi5wYXRoKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIG5hbWVzLnNvcnQoa2V5ID0gb3MucGF0aC5ub3JtY2FzZSkKICAgICAgICAgc3VibGlzdCA9IFtdCkBAIC00NDgsMjkgKzQ0OCwxOCBAQAogICAgICAgICByZXR1cm4gImJyZWFrIgogCiAKLSMgVGVzdGluZyBmdW5jdGlvbnMKLQotZGVmIHRlc3QoKToKLSAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IFB5U2hlbGwKLSAgICByb290ID0gVG9wbGV2ZWwoUHlTaGVsbC5yb290KQotICAgIHJvb3QuY29uZmlndXJlKGJkPTAsIGJnPSJ5ZWxsb3ciKQotICAgIHJvb3QuZm9jdXNfc2V0KCkKK2RlZiBfdHJlZV93aWRnZXQocGFyZW50KToKKyAgICByb290ID0gVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgVHJlZVdpZGdldCIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogICAgIHNjID0gU2Nyb2xsZWRDYW52YXMocm9vdCwgYmc9IndoaXRlIiwgaGlnaGxpZ2h0dGhpY2tuZXNzPTAsIHRha2Vmb2N1cz0xKQotICAgIHNjLmZyYW1lLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQotICAgIGl0ZW0gPSBGaWxlVHJlZUl0ZW0oIkM6L3dpbmRvd3MvZGVza3RvcCIpCisgICAgc2MuZnJhbWUucGFjayhleHBhbmQ9MSwgZmlsbD0iYm90aCIsIHNpZGU9TEVGVCkKKyAgICBpdGVtID0gRmlsZVRyZWVJdGVtKG9zLmdldGN3ZCgpKQogICAgIG5vZGUgPSBUcmVlTm9kZShzYy5jYW52YXMsIE5vbmUsIGl0ZW0pCiAgICAgbm9kZS5leHBhbmQoKQotCi1kZWYgdGVzdDIoKToKLSAgICAjIHRlc3Qgdy9vIHNjcm9sbGluZyBjYW52YXMKLSAgICByb290ID0gVGsoKQotICAgIHJvb3QuY29uZmlndXJlKGJkPTApCi0gICAgY2FudmFzID0gQ2FudmFzKHJvb3QsIGJnPSJ3aGl0ZSIsIGhpZ2hsaWdodHRoaWNrbmVzcz0wKQotICAgIGNhbnZhcy5wYWNrKGV4cGFuZD0xLCBmaWxsPSJib3RoIikKLSAgICBpdGVtID0gRmlsZVRyZWVJdGVtKG9zLmN1cmRpcikKLSAgICBub2RlID0gVHJlZU5vZGUoY2FudmFzLCBOb25lLCBpdGVtKQotICAgIG5vZGUudXBkYXRlKCkKLSAgICBjYW52YXMuZm9jdXNfc2V0KCkKKyAgICByb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0KCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3RyZWVfd2lkZ2V0KQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvVW5kb0RlbGVnYXRvci5weSBiL0xpYi9pZGxlbGliL1VuZG9EZWxlZ2F0b3IucHkKaW5kZXggZDJlZjYzOC4uMDRjMWNmNSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvVW5kb0RlbGVnYXRvci5weQorKysgYi9MaWIvaWRsZWxpYi9VbmRvRGVsZWdhdG9yLnB5CkBAIC0zMzYsMTcgKzMzNiwzMCBAQAogICAgICAgICBzZWxmLmRlcHRoID0gc2VsZi5kZXB0aCArIGluY3IKICAgICAgICAgcmV0dXJuIHNlbGYuZGVwdGgKIAotZGVmIG1haW4oKToKK2RlZiBfdW5kb19kZWxlZ2F0b3IocGFyZW50KToKICAgICBmcm9tIGlkbGVsaWIuUGVyY29sYXRvciBpbXBvcnQgUGVyY29sYXRvcgogICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIHJvb3QucXVpdCkKLSAgICB0ZXh0ID0gVGV4dCgpCisgICAgcm9vdC50aXRsZSgiVGVzdCBVbmRvRGVsZWdhdG9yIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisKKyAgICB0ZXh0ID0gVGV4dChyb290KQorICAgIHRleHQuY29uZmlnKGhlaWdodD0xMCkKICAgICB0ZXh0LnBhY2soKQogICAgIHRleHQuZm9jdXNfc2V0KCkKICAgICBwID0gUGVyY29sYXRvcih0ZXh0KQogICAgIGQgPSBVbmRvRGVsZWdhdG9yKCkKICAgICBwLmluc2VydGZpbHRlcihkKQorCisgICAgdW5kbyA9IEJ1dHRvbihyb290LCB0ZXh0PSJVbmRvIiwgY29tbWFuZD1sYW1iZGE6ZC51bmRvX2V2ZW50KE5vbmUpKQorICAgIHVuZG8ucGFjayhzaWRlPSdsZWZ0JykKKyAgICByZWRvID0gQnV0dG9uKHJvb3QsIHRleHQ9IlJlZG8iLCBjb21tYW5kPWxhbWJkYTpkLnJlZG9fZXZlbnQoTm9uZSkpCisgICAgcmVkby5wYWNrKHNpZGU9J2xlZnQnKQorICAgIGR1bXAgPSBCdXR0b24ocm9vdCwgdGV4dD0iRHVtcCIsIGNvbW1hbmQ9bGFtYmRhOmQuZHVtcF9ldmVudChOb25lKSkKKyAgICBkdW1wLnBhY2soc2lkZT0nbGVmdCcpCisKICAgICByb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3VuZG9fZGVsZWdhdG9yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvV2lkZ2V0UmVkaXJlY3Rvci5weSBiL0xpYi9pZGxlbGliL1dpZGdldFJlZGlyZWN0b3IucHkKaW5kZXggYmE1MjUxZi4uYjNkN2JmYSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvV2lkZ2V0UmVkaXJlY3Rvci5weQorKysgYi9MaWIvaWRsZWxpYi9XaWRnZXRSZWRpcmVjdG9yLnB5CkBAIC0xLDI5ICsxLDQwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGNsRXJyb3IKIAogY2xhc3MgV2lkZ2V0UmVkaXJlY3RvcjoKLQogICAgICIiIlN1cHBvcnQgZm9yIHJlZGlyZWN0aW5nIGFyYml0cmFyeSB3aWRnZXQgc3ViY29tbWFuZHMuCiAKLSAgICBTb21lIFRrIG9wZXJhdGlvbnMgZG9uJ3Qgbm9ybWFsbHkgcGFzcyB0aHJvdWdoIFRraW50ZXIuICBGb3IgZXhhbXBsZSwgaWYgYQorICAgIFNvbWUgVGsgb3BlcmF0aW9ucyBkb24ndCBub3JtYWxseSBwYXNzIHRocm91Z2ggdGtpbnRlci4gIEZvciBleGFtcGxlLCBpZiBhCiAgICAgY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gYSBUZXh0IHdpZGdldCBieSBwcmVzc2luZyBhIGtleSwgYSBkZWZhdWx0IFRrCiAgICAgYmluZGluZyB0byB0aGUgd2lkZ2V0J3MgJ2luc2VydCcgb3BlcmF0aW9uIGlzIGFjdGl2YXRlZCwgYW5kIHRoZSBUayBsaWJyYXJ5Ci0gICAgcHJvY2Vzc2VzIHRoZSBpbnNlcnQgd2l0aG91dCBjYWxsaW5nIGJhY2sgaW50byBUa2ludGVyLgorICAgIHByb2Nlc3NlcyB0aGUgaW5zZXJ0IHdpdGhvdXQgY2FsbGluZyBiYWNrIGludG8gdGtpbnRlci4KIAotICAgIEFsdGhvdWdoIGEgYmluZGluZyB0byA8S2V5PiBjb3VsZCBiZSBtYWRlIHZpYSBUa2ludGVyLCB3aGF0IHdlIHJlYWxseSB3YW50Ci0gICAgdG8gZG8gaXMgdG8gaG9vayB0aGUgVGsgJ2luc2VydCcgb3BlcmF0aW9uIGl0c2VsZi4KKyAgICBBbHRob3VnaCBhIGJpbmRpbmcgdG8gPEtleT4gY291bGQgYmUgbWFkZSB2aWEgdGtpbnRlciwgd2hhdCB3ZSByZWFsbHkgd2FudAorICAgIHRvIGRvIGlzIHRvIGhvb2sgdGhlIFRrICdpbnNlcnQnIG9wZXJhdGlvbiBpdHNlbGYuICBGb3Igb25lIHRoaW5nLCB3ZSB3YW50CisgICAgYSB0ZXh0Lmluc2VydCBjYWxsIGluIGlkbGUgY29kZSB0byBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyBhIGtleSBwcmVzcy4KIAogICAgIFdoZW4gYSB3aWRnZXQgaXMgaW5zdGFudGlhdGVkLCBhIFRjbCBjb21tYW5kIGlzIGNyZWF0ZWQgd2hvc2UgbmFtZSBpcyB0aGUKICAgICBzYW1lIGFzIHRoZSBwYXRobmFtZSB3aWRnZXQuX3cuICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBpbnZva2UgdGhlIHZhcmlvdXMKICAgICB3aWRnZXQgb3BlcmF0aW9ucywgZS5nLiBpbnNlcnQgKGZvciBhIFRleHQgd2lkZ2V0KS4gV2UgYXJlIGdvaW5nIHRvIGhvb2sKICAgICB0aGlzIGNvbW1hbmQgYW5kIHByb3ZpZGUgYSBmYWNpbGl0eSAoJ3JlZ2lzdGVyJykgdG8gaW50ZXJjZXB0IHRoZSB3aWRnZXQKLSAgICBvcGVyYXRpb24uCisgICAgb3BlcmF0aW9uLiAgV2Ugd2lsbCBhbHNvIGludGVyY2VwdCBtZXRob2QgY2FsbHMgb24gdGhlIHRraW50ZXIgY2xhc3MKKyAgICBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgdGhlIHRrIHdpZGdldC4KIAotICAgIEluIElETEUsIHRoZSBmdW5jdGlvbiBiZWluZyByZWdpc3RlcmVkIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdG9wIG9mIGEKLSAgICBQZXJjb2xhdG9yIGNoYWluLiAgQXQgdGhlIGJvdHRvbSBvZiB0aGUgY2hhaW4gaXMgYSBjYWxsIHRvIHRoZSBvcmlnaW5hbAotICAgIFRrIHdpZGdldCBvcGVyYXRpb24uCi0KKyAgICBJbiBJRExFLCBXaWRnZXRSZWRpcmVjdG9yIGlzIHVzZWQgaW4gUGVyY29sYXRvciB0byBpbnRlcmNlcHQgVGV4dAorICAgIGNvbW1hbmRzLiAgVGhlIGZ1bmN0aW9uIGJlaW5nIHJlZ2lzdGVyZWQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSB0b3AKKyAgICBvZiBhIFBlcmNvbGF0b3IgY2hhaW4uICBBdCB0aGUgYm90dG9tIG9mIHRoZSBjaGFpbiBpcyBhIGNhbGwgdG8gdGhlCisgICAgb3JpZ2luYWwgVGsgd2lkZ2V0IG9wZXJhdGlvbi4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgd2lkZ2V0KToKKyAgICAgICAgJycnSW5pdGlhbGl6ZSBhdHRyaWJ1dGVzIGFuZCBzZXR1cCByZWRpcmVjdGlvbi4KKworICAgICAgICBfb3BlcmF0aW9uczogZGljdCBtYXBwaW5nIG9wZXJhdGlvbiBuYW1lIHRvIG5ldyBmdW5jdGlvbi4KKyAgICAgICAgd2lkZ2V0OiB0aGUgd2lkZ2V0IHdob3NlIHRjbCBjb21tYW5kIGlzIHRvIGJlIGludGVyY2VwdGVkLgorICAgICAgICB0azogd2lkZ2V0LnRrLCBhIGNvbnZlbmllbmNlIGF0dHJpYnV0ZSwgcHJvYmFibHkgbm90IG5lZWRlZC4KKyAgICAgICAgb3JpZzogbmV3IG5hbWUgb2YgdGhlIG9yaWdpbmFsIHRjbCBjb21tYW5kLgorCisgICAgICAgIFNpbmNlIHJlbmFtaW5nIHRvIG9yaWcgZmFpbHMgd2l0aCBUY2xFcnJvciB3aGVuIG9yaWcgYWxyZWFkeQorICAgICAgICBleGlzdHMsIG9ubHkgb25lIFdpZGdldERpcmVjdG9yIGNhbiBleGlzdCBmb3IgYSBnaXZlbiB3aWRnZXQuCisgICAgICAgICcnJwogICAgICAgICBzZWxmLl9vcGVyYXRpb25zID0ge30KICAgICAgICAgc2VsZi53aWRnZXQgPSB3aWRnZXQgICAgICAgICAgICAjIHdpZGdldCBpbnN0YW5jZQogICAgICAgICBzZWxmLnRrID0gdGsgPSB3aWRnZXQudGsgICAgICAgICMgd2lkZ2V0J3Mgcm9vdApAQCAtNDAsMjcgKzUxLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndpZGdldC5fdykKIAogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIlVucmVnaXN0ZXIgb3BlcmF0aW9ucyBhbmQgcmV2ZXJ0IHJlZGlyZWN0aW9uIGNyZWF0ZWQgYnkgLl9faW5pdF9fLiIKICAgICAgICAgZm9yIG9wZXJhdGlvbiBpbiBsaXN0KHNlbGYuX29wZXJhdGlvbnMpOgogICAgICAgICAgICAgc2VsZi51bnJlZ2lzdGVyKG9wZXJhdGlvbikKLSAgICAgICAgd2lkZ2V0ID0gc2VsZi53aWRnZXQ7IGRlbCBzZWxmLndpZGdldAotICAgICAgICBvcmlnID0gc2VsZi5vcmlnOyBkZWwgc2VsZi5vcmlnCisgICAgICAgIHdpZGdldCA9IHNlbGYud2lkZ2V0CiAgICAgICAgIHRrID0gd2lkZ2V0LnRrCiAgICAgICAgIHcgPSB3aWRnZXQuX3cKKyAgICAgICAgIyBSZXN0b3JlIHRoZSBvcmlnaW5hbCB3aWRnZXQgVGNsIGNvbW1hbmQuCiAgICAgICAgIHRrLmRlbGV0ZWNvbW1hbmQodykKLSAgICAgICAgIyByZXN0b3JlIHRoZSBvcmlnaW5hbCB3aWRnZXQgVGNsIGNvbW1hbmQ6Ci0gICAgICAgIHRrLmNhbGwoInJlbmFtZSIsIG9yaWcsIHcpCisgICAgICAgIHRrLmNhbGwoInJlbmFtZSIsIHNlbGYub3JpZywgdykKKyAgICAgICAgZGVsIHNlbGYud2lkZ2V0LCBzZWxmLnRrICAjIFNob3VsZCBub3QgYmUgbmVlZGVkCisgICAgICAgICMgaWYgaW5zdGFuY2UgaXMgZGVsZXRlZCBhZnRlciBjbG9zZSwgYXMgaW4gUGVyY29sYXRvci4KIAogICAgIGRlZiByZWdpc3RlcihzZWxmLCBvcGVyYXRpb24sIGZ1bmN0aW9uKToKKyAgICAgICAgJycnUmV0dXJuIE9yaWdpbmFsQ29tbWFuZChvcGVyYXRpb24pIGFmdGVyIHJlZ2lzdGVyaW5nIGZ1bmN0aW9uLgorCisgICAgICAgIFJlZ2lzdHJhdGlvbiBhZGRzIGFuIG9wZXJhdGlvbjogZnVuY3Rpb24gcGFpciB0byAuX29wZXJhdGlvbnMuCisgICAgICAgIEl0IGFsc28gYWRkcyBhbiB3aWRnZXQgZnVuY3Rpb24gYXR0cmlidXRlIHRoYXQgbWFza3MgdGhlIHRraW50ZXIKKyAgICAgICAgY2xhc3MgaW5zdGFuY2UgbWV0aG9kLiAgTWV0aG9kIG1hc2tpbmcgb3BlcmF0ZXMgaW5kZXBlbmRlbnRseQorICAgICAgICBmcm9tIGNvbW1hbmQgZGlzcGF0Y2guCisKKyAgICAgICAgSWYgYSBzZWNvbmQgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIHNhbWUgb3BlcmF0aW9uLCB0aGUKKyAgICAgICAgZmlyc3QgZnVuY3Rpb24gaXMgcmVwbGFjZWQgaW4gYm90aCBwbGFjZXMuCisgICAgICAgICcnJwogICAgICAgICBzZWxmLl9vcGVyYXRpb25zW29wZXJhdGlvbl0gPSBmdW5jdGlvbgogICAgICAgICBzZXRhdHRyKHNlbGYud2lkZ2V0LCBvcGVyYXRpb24sIGZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gT3JpZ2luYWxDb21tYW5kKHNlbGYsIG9wZXJhdGlvbikKIAogICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIG9wZXJhdGlvbik6CisgICAgICAgICcnJ1JldHVybiB0aGUgZnVuY3Rpb24gZm9yIHRoZSBvcGVyYXRpb24sIG9yIE5vbmUuCisKKyAgICAgICAgRGVsZXRpbmcgdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSB1bm1hc2tzIHRoZSBjbGFzcyBhdHRyaWJ1dGUuCisgICAgICAgICcnJwogICAgICAgICBpZiBvcGVyYXRpb24gaW4gc2VsZi5fb3BlcmF0aW9uczoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5fb3BlcmF0aW9uc1tvcGVyYXRpb25dCiAgICAgICAgICAgICBkZWwgc2VsZi5fb3BlcmF0aW9uc1tvcGVyYXRpb25dCi0gICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYud2lkZ2V0LCBvcGVyYXRpb24pOgorICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGRlbGF0dHIoc2VsZi53aWRnZXQsIG9wZXJhdGlvbikKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC04OCwxNCArMTE3LDI5IEBACiAKIAogY2xhc3MgT3JpZ2luYWxDb21tYW5kOgorICAgICcnJ0NhbGxhYmxlIGZvciBvcmlnaW5hbCB0ayBjb21tYW5kIHRoYXQgaGFzIGJlZW4gcmVkaXJlY3RlZC4KKworICAgIFJldHVybmVkIGJ5IC5yZWdpc3RlcjsgY2FuIGJlIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIHJlZ2lzdGVyZWQuCisgICAgcmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHRleHQpCisgICAgZGVmIG15X2luc2VydCgqYXJncyk6CisgICAgICAgIHByaW50KCJpbnNlcnQiLCBhcmdzKQorICAgICAgICBvcmlnaW5hbF9pbnNlcnQoKmFyZ3MpCisgICAgb3JpZ2luYWxfaW5zZXJ0ID0gcmVkaXIucmVnaXN0ZXIoImluc2VydCIsIG15X2luc2VydCkKKyAgICAnJycKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWRpciwgb3BlcmF0aW9uKToKKyAgICAgICAgJycnQ3JlYXRlIC50a19jYWxsIGFuZCAub3JpZ19hbmRfb3BlcmF0aW9uIGZvciAuX19jYWxsX18gbWV0aG9kLgorCisgICAgICAgIC5yZWRpciBhbmQgLm9wZXJhdGlvbiBzdG9yZSB0aGUgaW5wdXQgYXJncyBmb3IgX19yZXByX18uCisgICAgICAgIC50ayBhbmQgLm9yaWcgY29weSBhdHRyaWJ1dGVzIG9mIC5yZWRpciAocHJvYmFibHkgbm90IG5lZWRlZCkuCisgICAgICAgICcnJwogICAgICAgICBzZWxmLnJlZGlyID0gcmVkaXIKICAgICAgICAgc2VsZi5vcGVyYXRpb24gPSBvcGVyYXRpb24KLSAgICAgICAgc2VsZi50ayA9IHJlZGlyLnRrCi0gICAgICAgIHNlbGYub3JpZyA9IHJlZGlyLm9yaWcKLSAgICAgICAgc2VsZi50a19jYWxsID0gc2VsZi50ay5jYWxsCi0gICAgICAgIHNlbGYub3JpZ19hbmRfb3BlcmF0aW9uID0gKHNlbGYub3JpZywgc2VsZi5vcGVyYXRpb24pCisgICAgICAgIHNlbGYudGsgPSByZWRpci50ayAgIyByZWR1bmRhbnQgd2l0aCBzZWxmLnJlZGlyCisgICAgICAgIHNlbGYub3JpZyA9IHJlZGlyLm9yaWcgICMgcmVkdW5kYW50IHdpdGggc2VsZi5yZWRpcgorICAgICAgICAjIFRoZXNlIHR3byBjb3VsZCBiZSBkZWxldGVkIGFmdGVyIGNoZWNraW5nIHJlY2lwaWVudCBjb2RlLgorICAgICAgICBzZWxmLnRrX2NhbGwgPSByZWRpci50ay5jYWxsCisgICAgICAgIHNlbGYub3JpZ19hbmRfb3BlcmF0aW9uID0gKHJlZGlyLm9yaWcsIG9wZXJhdGlvbikKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICJPcmlnaW5hbENvbW1hbmQoJXIsICVyKSIgJSAoc2VsZi5yZWRpciwgc2VsZi5vcGVyYXRpb24pCkBAIC0xMDQsMjMgKzE0OCwyNyBAQAogICAgICAgICByZXR1cm4gc2VsZi50a19jYWxsKHNlbGYub3JpZ19hbmRfb3BlcmF0aW9uICsgYXJncykKIAogCi1kZWYgbWFpbigpOgorZGVmIF93aWRnZXRfcmVkaXJlY3RvcihwYXJlbnQpOiAgIyBodGVzdCAjCisgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVGV4dAorICAgIGltcG9ydCByZQorCiAgICAgcm9vdCA9IFRrKCkKLSAgICByb290LndtX3Byb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgcm9vdC5xdWl0KQotICAgIHRleHQgPSBUZXh0KCkKKyAgICByb290LnRpdGxlKCJUZXN0IFdpZGdldFJlZGlyZWN0b3IiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKyAgICB0ZXh0ID0gVGV4dChyb290KQogICAgIHRleHQucGFjaygpCiAgICAgdGV4dC5mb2N1c19zZXQoKQogICAgIHJlZGlyID0gV2lkZ2V0UmVkaXJlY3Rvcih0ZXh0KQotICAgIGdsb2JhbCBwcmV2aW91c190Y2xfZmNuCiAgICAgZGVmIG15X2luc2VydCgqYXJncyk6CiAgICAgICAgIHByaW50KCJpbnNlcnQiLCBhcmdzKQotICAgICAgICBwcmV2aW91c190Y2xfZmNuKCphcmdzKQotICAgIHByZXZpb3VzX3RjbF9mY24gPSByZWRpci5yZWdpc3RlcigiaW5zZXJ0IiwgbXlfaW5zZXJ0KQorICAgICAgICBvcmlnaW5hbF9pbnNlcnQoKmFyZ3MpCisgICAgb3JpZ2luYWxfaW5zZXJ0ID0gcmVkaXIucmVnaXN0ZXIoImluc2VydCIsIG15X2luc2VydCkKICAgICByb290Lm1haW5sb29wKCkKLSAgICByZWRpci51bnJlZ2lzdGVyKCJpbnNlcnQiKSAgIyBydW5zIGFmdGVyIGZpcnN0ICdjbG9zZSB3aW5kb3cnCi0gICAgcmVkaXIuY2xvc2UoKQotICAgIHJvb3QubWFpbmxvb3AoKQotICAgIHJvb3QuZGVzdHJveSgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF93aWRnZXRyZWRpcicsCisgICAgICAgICAgICAgICAgICB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3dpZGdldF9yZWRpcmVjdG9yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvWm9vbUhlaWdodC5weSBiL0xpYi9pZGxlbGliL1pvb21IZWlnaHQucHkKaW5kZXggZThkMTcxMC4uYTVkNjc5ZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvWm9vbUhlaWdodC5weQorKysgYi9MaWIvaWRsZWxpYi9ab29tSGVpZ2h0LnB5CkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIG5ld3kgPSAwCiAgICAgICAgIG5ld2hlaWdodCA9IG5ld2hlaWdodCAtIDcyCiAKLSAgICBlbGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgZWxpZiBtYWNvc3hTdXBwb3J0LmlzQXF1YVRrKCk6CiAgICAgICAgICMgVGhlICc4OCcgYmVsb3cgaXMgYSBtYWdpYyBudW1iZXIgdGhhdCBhdm9pZHMgcGxhY2luZyB0aGUgYm90dG9tCiAgICAgICAgICMgb2YgdGhlIHdpbmRvdyBiZWxvdyB0aGUgcGFuZWwgb24gbXkgbWFjaGluZS4gSSBkb24ndCBrbm93IGhvdwogICAgICAgICAjIHRvIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgdGhpcyB3aXRoIHRraW50ZXIuCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9hYm91dERpYWxvZy5weSBiL0xpYi9pZGxlbGliL2Fib3V0RGlhbG9nLnB5CmluZGV4IDdmZTFhYjguLmUyNjQyOTUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2Fib3V0RGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL2Fib3V0RGlhbG9nLnB5CkBAIC0xMiwxMSArMTIsMTYgQEAKICAgICAiIiJNb2RhbCBhYm91dCBkaWFsb2cgZm9yIGlkbGUKIAogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLHBhcmVudCx0aXRsZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgdGl0bGUsIF9odGVzdD1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdAorICAgICAgICAiIiIKICAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQogICAgICAgICBzZWxmLmNvbmZpZ3VyZShib3JkZXJ3aWR0aD01KQotICAgICAgICBzZWxmLmdlb21ldHJ5KCIrJWQrJWQiICUgKHBhcmVudC53aW5mb19yb290eCgpKzMwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpKzMwKSkKKyAgICAgICAgIyBwbGFjZSBkaWFsb2cgYmVsb3cgcGFyZW50IGlmIHJ1bm5pbmcgaHRlc3QKKyAgICAgICAgc2VsZi5nZW9tZXRyeSgiKyVkKyVkIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eCgpKzMwLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkrKDMwIGlmIG5vdCBfaHRlc3QgZWxzZSAxMDApKSkKICAgICAgICAgc2VsZi5iZyA9ICIjNzA3MDcwIgogICAgICAgICBzZWxmLmZnID0gIiNmZmZmZmYiCiAgICAgICAgIHNlbGYuQ3JlYXRlV2lkZ2V0cygpCkBAIC0xMzYsMTAgKzE0MSw1IEBACiAgICAgICAgIHNlbGYuZGVzdHJveSgpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgIyB0ZXN0IHRoZSBkaWFsb2cKLSAgICByb290ID0gVGsoKQotICAgIGRlZiBydW4oKToKLSAgICAgICAgZnJvbSBpZGxlbGliIGltcG9ydCBhYm91dERpYWxvZwotICAgICAgICBhYm91dERpYWxvZy5BYm91dERpYWxvZyhyb290LCAnQWJvdXQnKQotICAgIEJ1dHRvbihyb290LCB0ZXh0PSdEaWFsb2cnLCBjb21tYW5kPXJ1bikucGFjaygpCi0gICAgcm9vdC5tYWlubG9vcCgpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKEFib3V0RGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnLWtleXMuZGVmIGIvTGliL2lkbGVsaWIvY29uZmlnLWtleXMuZGVmCmluZGV4IGZkYzM1YmEuLjNiZmNiNjkgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZy1rZXlzLmRlZgorKysgYi9MaWIvaWRsZWxpYi9jb25maWcta2V5cy5kZWYKQEAgLTEzLDM3ICsxMywzNyBAQAogcGFzdGU9PENvbnRyb2wtS2V5LXY+IDxDb250cm9sLUtleS1WPgogYmVnaW5uaW5nLW9mLWxpbmU9IDxLZXktSG9tZT4KIGNlbnRlci1pbnNlcnQ9PENvbnRyb2wtS2V5LWw+IDxDb250cm9sLUtleS1MPgotY2xvc2UtYWxsLXdpbmRvd3M9PENvbnRyb2wtS2V5LXE+CitjbG9zZS1hbGwtd2luZG93cz08Q29udHJvbC1LZXktcT4gPENvbnRyb2wtS2V5LVE+CiBjbG9zZS13aW5kb3c9PEFsdC1LZXktRjQ+IDxNZXRhLUtleS1GND4KIGRvLW5vdGhpbmc9PENvbnRyb2wtS2V5LUYxMj4KIGVuZC1vZi1maWxlPTxDb250cm9sLUtleS1kPiA8Q29udHJvbC1LZXktRD4KIHB5dGhvbi1kb2NzPTxLZXktRjE+CiBweXRob24tY29udGV4dC1oZWxwPTxTaGlmdC1LZXktRjE+Ci1oaXN0b3J5LW5leHQ9PEFsdC1LZXktbj4gPE1ldGEtS2V5LW4+Ci1oaXN0b3J5LXByZXZpb3VzPTxBbHQtS2V5LXA+IDxNZXRhLUtleS1wPgoraGlzdG9yeS1uZXh0PTxBbHQtS2V5LW4+IDxNZXRhLUtleS1uPiA8QWx0LUtleS1OPiA8TWV0YS1LZXktTj4KK2hpc3RvcnktcHJldmlvdXM9PEFsdC1LZXktcD4gPE1ldGEtS2V5LXA+IDxBbHQtS2V5LVA+IDxNZXRhLUtleS1QPgogaW50ZXJydXB0LWV4ZWN1dGlvbj08Q29udHJvbC1LZXktYz4gPENvbnRyb2wtS2V5LUM+CiB2aWV3LXJlc3RhcnQ9PEtleS1GNj4KIHJlc3RhcnQtc2hlbGw9PENvbnRyb2wtS2V5LUY2Pgotb3Blbi1jbGFzcy1icm93c2VyPTxBbHQtS2V5LWM+IDxNZXRhLUtleS1jPiA8QWx0LUtleS1DPgotb3Blbi1tb2R1bGU9PEFsdC1LZXktbT4gPE1ldGEtS2V5LW0+IDxBbHQtS2V5LU0+CitvcGVuLWNsYXNzLWJyb3dzZXI9PEFsdC1LZXktYz4gPE1ldGEtS2V5LWM+IDxBbHQtS2V5LUM+IDxNZXRhLUtleS1DPgorb3Blbi1tb2R1bGU9PEFsdC1LZXktbT4gPE1ldGEtS2V5LW0+IDxBbHQtS2V5LU0+IDxNZXRhLUtleS1NPgogb3Blbi1uZXctd2luZG93PTxDb250cm9sLUtleS1uPiA8Q29udHJvbC1LZXktTj4KIG9wZW4td2luZG93LWZyb20tZmlsZT08Q29udHJvbC1LZXktbz4gPENvbnRyb2wtS2V5LU8+CiBwbGFpbi1uZXdsaW5lLWFuZC1pbmRlbnQ9PENvbnRyb2wtS2V5LWo+IDxDb250cm9sLUtleS1KPgogcHJpbnQtd2luZG93PTxDb250cm9sLUtleS1wPiA8Q29udHJvbC1LZXktUD4KLXJlZG89PENvbnRyb2wtU2hpZnQtS2V5LVo+CityZWRvPTxDb250cm9sLVNoaWZ0LUtleS1aPiA8Q29udHJvbC1TaGlmdC1LZXktej4KIHJlbW92ZS1zZWxlY3Rpb249PEtleS1Fc2NhcGU+Ci1zYXZlLWNvcHktb2Ytd2luZG93LWFzLWZpbGU9PEFsdC1TaGlmdC1LZXktUz4KLXNhdmUtd2luZG93LWFzLWZpbGU9PENvbnRyb2wtU2hpZnQtS2V5LVM+Ci1zYXZlLXdpbmRvdz08Q29udHJvbC1LZXktcz4KLXNlbGVjdC1hbGw9PENvbnRyb2wtS2V5LWE+CitzYXZlLWNvcHktb2Ytd2luZG93LWFzLWZpbGU9PEFsdC1TaGlmdC1LZXktUz4gPEFsdC1TaGlmdC1LZXktcz4KK3NhdmUtd2luZG93LWFzLWZpbGU9PENvbnRyb2wtU2hpZnQtS2V5LVM+IDxDb250cm9sLVNoaWZ0LUtleS1zPgorc2F2ZS13aW5kb3c9PENvbnRyb2wtS2V5LXM+IDxDb250cm9sLUtleS1TPgorc2VsZWN0LWFsbD08Q29udHJvbC1LZXktYT4gPENvbnRyb2wtS2V5LUE+CiB0b2dnbGUtYXV0by1jb2xvcmluZz08Q29udHJvbC1LZXktc2xhc2g+CiB1bmRvPTxDb250cm9sLUtleS16PiA8Q29udHJvbC1LZXktWj4KIGZpbmQ9PENvbnRyb2wtS2V5LWY+IDxDb250cm9sLUtleS1GPgotZmluZC1hZ2Fpbj08Q29udHJvbC1LZXktZz4gPEtleS1GMz4KK2ZpbmQtYWdhaW49PENvbnRyb2wtS2V5LWc+IDxLZXktRjM+IDxDb250cm9sLUtleS1HPgogZmluZC1pbi1maWxlcz08QWx0LUtleS1GMz4gPE1ldGEtS2V5LUYzPgogZmluZC1zZWxlY3Rpb249PENvbnRyb2wtS2V5LUYzPgogcmVwbGFjZT08Q29udHJvbC1LZXktaD4gPENvbnRyb2wtS2V5LUg+Ci1nb3RvLWxpbmU9PEFsdC1LZXktZz4gPE1ldGEtS2V5LWc+Citnb3RvLWxpbmU9PEFsdC1LZXktZz4gPE1ldGEtS2V5LWc+IDxBbHQtS2V5LUc+IDxNZXRhLUtleS1HPgogc21hcnQtYmFja3NwYWNlPTxLZXktQmFja1NwYWNlPgogbmV3bGluZS1hbmQtaW5kZW50PTxLZXktUmV0dXJuPiA8S2V5LUtQX0VudGVyPgogc21hcnQtaW5kZW50PTxLZXktVGFiPgpAQCAtNTMsOCArNTMsOCBAQAogdW5jb21tZW50LXJlZ2lvbj08QWx0LUtleS00PiA8TWV0YS1LZXktND4KIHRhYmlmeS1yZWdpb249PEFsdC1LZXktNT4gPE1ldGEtS2V5LTU+CiB1bnRhYmlmeS1yZWdpb249PEFsdC1LZXktNj4gPE1ldGEtS2V5LTY+Ci10b2dnbGUtdGFicz08QWx0LUtleS10PiA8TWV0YS1LZXktdD4gPEFsdC1LZXktVD4KLWNoYW5nZS1pbmRlbnR3aWR0aD08QWx0LUtleS11PiA8TWV0YS1LZXktdT4gPEFsdC1LZXktVT4KK3RvZ2dsZS10YWJzPTxBbHQtS2V5LXQ+IDxNZXRhLUtleS10PiA8QWx0LUtleS1UPiA8TWV0YS1LZXktVD4KK2NoYW5nZS1pbmRlbnR3aWR0aD08QWx0LUtleS11PiA8TWV0YS1LZXktdT4gPEFsdC1LZXktVT4gPE1ldGEtS2V5LVU+CiBkZWwtd29yZC1sZWZ0PTxDb250cm9sLUtleS1CYWNrU3BhY2U+CiBkZWwtd29yZC1yaWdodD08Q29udHJvbC1LZXktRGVsZXRlPgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWctbWFpbi5kZWYgYi9MaWIvaWRsZWxpYi9jb25maWctbWFpbi5kZWYKaW5kZXggOTU0NmUyYi4uOGYwZmU3NiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnLW1haW4uZGVmCisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZy1tYWluLmRlZgpAQCAtNTksNyArNTksNyBAQAogZW5jb2Rpbmc9IG5vbmUKIAogW0Zvcm1hdFBhcmFncmFwaF0KLXBhcmFncmFwaD03MAorcGFyYWdyYXBoPTcyCiAKIFtJbmRlbnRdCiB1c2Utc3BhY2VzPSAxCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkKaW5kZXggZWZlNWM0My4uNzBiMGIzYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weQpAQCAtMTMsNyArMTMsNiBAQAogaW1wb3J0IHRraW50ZXIubWVzc2FnZWJveCBhcyB0a01lc3NhZ2VCb3gKIGltcG9ydCB0a2ludGVyLmNvbG9yY2hvb3NlciBhcyB0a0NvbG9yQ2hvb3NlcgogaW1wb3J0IHRraW50ZXIuZm9udCBhcyB0a0ZvbnQKLWltcG9ydCBjb3B5CiAKIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgogZnJvbSBpZGxlbGliLmR5bk9wdGlvbk1lbnVXaWRnZXQgaW1wb3J0IER5bk9wdGlvbk1lbnUKQEAgLTI1LDUyMiArMjQsNTcxIEBACiAKIGNsYXNzIENvbmZpZ0RpYWxvZyhUb3BsZXZlbCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZixwYXJlbnQsdGl0bGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBfaHRlc3Q9RmFsc2UsIF91dGVzdD1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdAorICAgICAgICBfdXRlc3QgLSBib29sLCBkb24ndCB3YWl0X3dpbmRvdyB3aGVuIHJ1bm5pbmcgdW5pdHRlc3QKKyAgICAgICAgIiIiCiAgICAgICAgIFRvcGxldmVsLl9faW5pdF9fKHNlbGYsIHBhcmVudCkKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKKyAgICAgICAgaWYgX2h0ZXN0OgorICAgICAgICAgICAgcGFyZW50Lmluc3RhbmNlX2RpY3QgPSB7fQogICAgICAgICBzZWxmLndtX3dpdGhkcmF3KCkKIAogICAgICAgICBzZWxmLmNvbmZpZ3VyZShib3JkZXJ3aWR0aD01KQogICAgICAgICBzZWxmLnRpdGxlKCdJRExFIFByZWZlcmVuY2VzJykKLSAgICAgICAgc2VsZi5nZW9tZXRyeSgiKyVkKyVkIiAlIChwYXJlbnQud2luZm9fcm9vdHgoKSsyMCwKLSAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSszMCkpCisgICAgICAgIHNlbGYuZ2VvbWV0cnkoCisgICAgICAgICAgICAgICAgIislZCslZCIgJSAocGFyZW50LndpbmZvX3Jvb3R4KCkgKyAyMCwKKyAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArICgzMCBpZiBub3QgX2h0ZXN0IGVsc2UgMTUwKSkpCiAgICAgICAgICNUaGVtZSBFbGVtZW50cy4gRWFjaCB0aGVtZSBlbGVtZW50IGtleSBpcyBpdHMgZGlzcGxheSBuYW1lLgogICAgICAgICAjVGhlIGZpcnN0IHZhbHVlIG9mIHRoZSB0dXBsZSBpcyB0aGUgc2FtcGxlIGFyZWEgdGFnIG5hbWUuCiAgICAgICAgICNUaGUgc2Vjb25kIHZhbHVlIGlzIHRoZSBkaXNwbGF5IG5hbWUgbGlzdCBzb3J0IGluZGV4LgotICAgICAgICBzZWxmLnRoZW1lRWxlbWVudHM9eydOb3JtYWwgVGV4dCc6KCdub3JtYWwnLCcwMCcpLAotICAgICAgICAgICAgJ1B5dGhvbiBLZXl3b3Jkcyc6KCdrZXl3b3JkJywnMDEnKSwKLSAgICAgICAgICAgICdQeXRob24gRGVmaW5pdGlvbnMnOignZGVmaW5pdGlvbicsJzAyJyksCisgICAgICAgIHNlbGYudGhlbWVFbGVtZW50cz17CisgICAgICAgICAgICAnTm9ybWFsIFRleHQnOignbm9ybWFsJywgJzAwJyksCisgICAgICAgICAgICAnUHl0aG9uIEtleXdvcmRzJzooJ2tleXdvcmQnLCAnMDEnKSwKKyAgICAgICAgICAgICdQeXRob24gRGVmaW5pdGlvbnMnOignZGVmaW5pdGlvbicsICcwMicpLAogICAgICAgICAgICAgJ1B5dGhvbiBCdWlsdGlucyc6KCdidWlsdGluJywgJzAzJyksCi0gICAgICAgICAgICAnUHl0aG9uIENvbW1lbnRzJzooJ2NvbW1lbnQnLCcwNCcpLAotICAgICAgICAgICAgJ1B5dGhvbiBTdHJpbmdzJzooJ3N0cmluZycsJzA1JyksCi0gICAgICAgICAgICAnU2VsZWN0ZWQgVGV4dCc6KCdoaWxpdGUnLCcwNicpLAotICAgICAgICAgICAgJ0ZvdW5kIFRleHQnOignaGl0JywnMDcnKSwKLSAgICAgICAgICAgICdDdXJzb3InOignY3Vyc29yJywnMDgnKSwKLSAgICAgICAgICAgICdFcnJvciBUZXh0JzooJ2Vycm9yJywnMDknKSwKLSAgICAgICAgICAgICdTaGVsbCBOb3JtYWwgVGV4dCc6KCdjb25zb2xlJywnMTAnKSwKLSAgICAgICAgICAgICdTaGVsbCBTdGRvdXQgVGV4dCc6KCdzdGRvdXQnLCcxMScpLAotICAgICAgICAgICAgJ1NoZWxsIFN0ZGVyciBUZXh0JzooJ3N0ZGVycicsJzEyJyksCisgICAgICAgICAgICAnUHl0aG9uIENvbW1lbnRzJzooJ2NvbW1lbnQnLCAnMDQnKSwKKyAgICAgICAgICAgICdQeXRob24gU3RyaW5ncyc6KCdzdHJpbmcnLCAnMDUnKSwKKyAgICAgICAgICAgICdTZWxlY3RlZCBUZXh0JzooJ2hpbGl0ZScsICcwNicpLAorICAgICAgICAgICAgJ0ZvdW5kIFRleHQnOignaGl0JywgJzA3JyksCisgICAgICAgICAgICAnQ3Vyc29yJzooJ2N1cnNvcicsICcwOCcpLAorICAgICAgICAgICAgJ0Vycm9yIFRleHQnOignZXJyb3InLCAnMDknKSwKKyAgICAgICAgICAgICdTaGVsbCBOb3JtYWwgVGV4dCc6KCdjb25zb2xlJywgJzEwJyksCisgICAgICAgICAgICAnU2hlbGwgU3Rkb3V0IFRleHQnOignc3Rkb3V0JywgJzExJyksCisgICAgICAgICAgICAnU2hlbGwgU3RkZXJyIFRleHQnOignc3RkZXJyJywgJzEyJyksCiAgICAgICAgICAgICB9CiAgICAgICAgIHNlbGYuUmVzZXRDaGFuZ2VkSXRlbXMoKSAjbG9hZCBpbml0aWFsIHZhbHVlcyBpbiBjaGFuZ2VkIGl0ZW1zIGRpY3QKICAgICAgICAgc2VsZi5DcmVhdGVXaWRnZXRzKCkKLSAgICAgICAgc2VsZi5yZXNpemFibGUoaGVpZ2h0PUZBTFNFLHdpZHRoPUZBTFNFKQorICAgICAgICBzZWxmLnJlc2l6YWJsZShoZWlnaHQ9RkFMU0UsIHdpZHRoPUZBTFNFKQogICAgICAgICBzZWxmLnRyYW5zaWVudChwYXJlbnQpCiAgICAgICAgIHNlbGYuZ3JhYl9zZXQoKQogICAgICAgICBzZWxmLnByb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgc2VsZi5DYW5jZWwpCi0gICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CiAgICAgICAgIHNlbGYudGFiUGFnZXMuZm9jdXNfc2V0KCkKICAgICAgICAgI2tleSBiaW5kaW5ncyBmb3IgdGhpcyBkaWFsb2cKLSAgICAgICAgI3NlbGYuYmluZCgnPEVzY2FwZT4nLHNlbGYuQ2FuY2VsKSAjZGlzbWlzcyBkaWFsb2csIG5vIHNhdmUKLSAgICAgICAgI3NlbGYuYmluZCgnPEFsdC1hPicsc2VsZi5BcHBseSkgI2FwcGx5IGNoYW5nZXMsIHNhdmUKLSAgICAgICAgI3NlbGYuYmluZCgnPEYxPicsc2VsZi5IZWxwKSAjY29udGV4dCBoZWxwCisgICAgICAgICNzZWxmLmJpbmQoJzxFc2NhcGU+Jywgc2VsZi5DYW5jZWwpICNkaXNtaXNzIGRpYWxvZywgbm8gc2F2ZQorICAgICAgICAjc2VsZi5iaW5kKCc8QWx0LWE+Jywgc2VsZi5BcHBseSkgI2FwcGx5IGNoYW5nZXMsIHNhdmUKKyAgICAgICAgI3NlbGYuYmluZCgnPEYxPicsIHNlbGYuSGVscCkgI2NvbnRleHQgaGVscAogICAgICAgICBzZWxmLkxvYWRDb25maWdzKCkKICAgICAgICAgc2VsZi5BdHRhY2hWYXJDYWxsYmFja3MoKSAjYXZvaWQgY2FsbGJhY2tzIGR1cmluZyBMb2FkQ29uZmlncwogCi0gICAgICAgIHNlbGYud21fZGVpY29uaWZ5KCkKLSAgICAgICAgc2VsZi53YWl0X3dpbmRvdygpCisgICAgICAgIGlmIG5vdCBfdXRlc3Q6CisgICAgICAgICAgICBzZWxmLndtX2RlaWNvbmlmeSgpCisgICAgICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIAogICAgIGRlZiBDcmVhdGVXaWRnZXRzKHNlbGYpOgogICAgICAgICBzZWxmLnRhYlBhZ2VzID0gVGFiYmVkUGFnZVNldChzZWxmLAotICAgICAgICAgICAgICAgIHBhZ2VfbmFtZXM9WydGb250cy9UYWJzJywnSGlnaGxpZ2h0aW5nJywnS2V5cycsJ0dlbmVyYWwnXSkKLSAgICAgICAgZnJhbWVBY3Rpb25CdXR0b25zID0gRnJhbWUoc2VsZixwYWR5PTIpCisgICAgICAgICAgICAgICAgcGFnZV9uYW1lcz1bJ0ZvbnRzL1RhYnMnLCAnSGlnaGxpZ2h0aW5nJywgJ0tleXMnLCAnR2VuZXJhbCddKQorICAgICAgICBmcmFtZUFjdGlvbkJ1dHRvbnMgPSBGcmFtZShzZWxmLCBwYWR5PTIpCiAgICAgICAgICNhY3Rpb24gYnV0dG9ucwotCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6Ci0gICAgICAgICAgICAjIFN1cnByZXNzIHRoZSBwYWR4IGFuZCBwYWR5IGFyZ3VtZW50cyB3aGVuCi0gICAgICAgICAgICAjIHJ1bm5pbmcgYXMgSURMRS5hcHAsIG90aGVyd2lzZSB0aGUgdGV4dAotICAgICAgICAgICAgIyBvbiB0aGVzZSBidXR0b25zIHdpbGwgbm90IGJlIHJlYWRhYmxlLgotICAgICAgICAgICAgZXh0cmFLd2RzPXt9CisgICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKKyAgICAgICAgICAgICMgQ2hhbmdpbmcgdGhlIGRlZmF1bHQgcGFkZGluZyBvbiBPU1ggcmVzdWx0cyBpbiB1bnJlYWRhYmxlCisgICAgICAgICAgICAjIHRleHQgaW4gdGhlIGJ1dHRvbnMKKyAgICAgICAgICAgIHBhZGRpbmdBcmdzID0ge30KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4dHJhS3dkcz1kaWN0KHBhZHg9NiwgcGFkeT0zKQorICAgICAgICAgICAgcGFkZGluZ0FyZ3MgPSB7J3BhZHgnOjYsICdwYWR5JzozfQogCiAjIENvbW1lbnQgb3V0IGJ1dHRvbiBjcmVhdGlvbiBhbmQgcGFja2luZyB1bnRpbCBpbXBsZW1lbnQgc2VsZi5IZWxwCi0jIyAgICAgICAgc2VsZi5idXR0b25IZWxwID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdIZWxwJywKLSMjICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5IZWxwLHRha2Vmb2N1cz1GQUxTRSwKLSMjICAgICAgICAgICAgICAgICoqZXh0cmFLd2RzKQotICAgICAgICBzZWxmLmJ1dHRvbk9rID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdPaycsCi0gICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLk9rLHRha2Vmb2N1cz1GQUxTRSwKLSAgICAgICAgICAgICAgICAqKmV4dHJhS3dkcykKLSAgICAgICAgc2VsZi5idXR0b25BcHBseSA9IEJ1dHRvbihmcmFtZUFjdGlvbkJ1dHRvbnMsdGV4dD0nQXBwbHknLAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5BcHBseSx0YWtlZm9jdXM9RkFMU0UsCi0gICAgICAgICAgICAgICAgKipleHRyYUt3ZHMpCi0gICAgICAgIHNlbGYuYnV0dG9uQ2FuY2VsID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdDYW5jZWwnLAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5DYW5jZWwsdGFrZWZvY3VzPUZBTFNFLAotICAgICAgICAgICAgICAgICoqZXh0cmFLd2RzKQorIyMgICAgICAgIHNlbGYuYnV0dG9uSGVscCA9IEJ1dHRvbihmcmFtZUFjdGlvbkJ1dHRvbnMsIHRleHQ9J0hlbHAnLAorIyMgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLkhlbHAsIHRha2Vmb2N1cz1GQUxTRSwKKyMjICAgICAgICAgICAgICAgICoqcGFkZGluZ0FyZ3MpCisgICAgICAgIHNlbGYuYnV0dG9uT2sgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVBY3Rpb25CdXR0b25zLCB0ZXh0PSdPaycsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLk9rLCB0YWtlZm9jdXM9RkFMU0UsICoqcGFkZGluZ0FyZ3MpCisgICAgICAgIHNlbGYuYnV0dG9uQXBwbHkgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVBY3Rpb25CdXR0b25zLCB0ZXh0PSdBcHBseScsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLkFwcGx5LCB0YWtlZm9jdXM9RkFMU0UsICoqcGFkZGluZ0FyZ3MpCisgICAgICAgIHNlbGYuYnV0dG9uQ2FuY2VsID0gQnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lQWN0aW9uQnV0dG9ucywgdGV4dD0nQ2FuY2VsJywKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuQ2FuY2VsLCB0YWtlZm9jdXM9RkFMU0UsICoqcGFkZGluZ0FyZ3MpCiAgICAgICAgIHNlbGYuQ3JlYXRlUGFnZUZvbnRUYWIoKQogICAgICAgICBzZWxmLkNyZWF0ZVBhZ2VIaWdobGlnaHQoKQogICAgICAgICBzZWxmLkNyZWF0ZVBhZ2VLZXlzKCkKICAgICAgICAgc2VsZi5DcmVhdGVQYWdlR2VuZXJhbCgpCi0jIyAgICAgICAgc2VsZi5idXR0b25IZWxwLnBhY2soc2lkZT1SSUdIVCxwYWR4PTUpCi0gICAgICAgIHNlbGYuYnV0dG9uT2sucGFjayhzaWRlPUxFRlQscGFkeD01KQotICAgICAgICBzZWxmLmJ1dHRvbkFwcGx5LnBhY2soc2lkZT1MRUZULHBhZHg9NSkKLSAgICAgICAgc2VsZi5idXR0b25DYW5jZWwucGFjayhzaWRlPUxFRlQscGFkeD01KQorIyMgICAgICAgIHNlbGYuYnV0dG9uSGVscC5wYWNrKHNpZGU9UklHSFQsIHBhZHg9NSkKKyAgICAgICAgc2VsZi5idXR0b25Pay5wYWNrKHNpZGU9TEVGVCwgcGFkeD01KQorICAgICAgICBzZWxmLmJ1dHRvbkFwcGx5LnBhY2soc2lkZT1MRUZULCBwYWR4PTUpCisgICAgICAgIHNlbGYuYnV0dG9uQ2FuY2VsLnBhY2soc2lkZT1MRUZULCBwYWR4PTUpCiAgICAgICAgIGZyYW1lQWN0aW9uQnV0dG9ucy5wYWNrKHNpZGU9Qk9UVE9NKQogICAgICAgICBGcmFtZShzZWxmLCBoZWlnaHQ9MiwgYm9yZGVyd2lkdGg9MCkucGFjayhzaWRlPUJPVFRPTSkKLSAgICAgICAgc2VsZi50YWJQYWdlcy5wYWNrKHNpZGU9VE9QLGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgc2VsZi50YWJQYWdlcy5wYWNrKHNpZGU9VE9QLCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQogCiAgICAgZGVmIENyZWF0ZVBhZ2VGb250VGFiKHNlbGYpOgotICAgICAgICAjdGtWYXJzCi0gICAgICAgIHNlbGYuZm9udFNpemU9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYuZm9udEJvbGQ9Qm9vbGVhblZhcihzZWxmKQotICAgICAgICBzZWxmLmZvbnROYW1lPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnNwYWNlTnVtPUludFZhcihzZWxmKQotICAgICAgICBzZWxmLmVkaXRGb250PXRrRm9udC5Gb250KHNlbGYsKCdjb3VyaWVyJywxMCwnbm9ybWFsJykpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYuZm9udFNpemUgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmZvbnRCb2xkID0gQm9vbGVhblZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuZm9udE5hbWUgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLnNwYWNlTnVtID0gSW50VmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5lZGl0Rm9udCA9IHRrRm9udC5Gb250KHBhcmVudCwgKCdjb3VyaWVyJywgMTAsICdub3JtYWwnKSkKKwogICAgICAgICAjI3dpZGdldCBjcmVhdGlvbgogICAgICAgICAjYm9keSBmcmFtZQotICAgICAgICBmcmFtZT1zZWxmLnRhYlBhZ2VzLnBhZ2VzWydGb250cy9UYWJzJ10uZnJhbWUKKyAgICAgICAgZnJhbWUgPSBzZWxmLnRhYlBhZ2VzLnBhZ2VzWydGb250cy9UYWJzJ10uZnJhbWUKICAgICAgICAgI2JvZHkgc2VjdGlvbiBmcmFtZXMKLSAgICAgICAgZnJhbWVGb250PUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgQmFzZSBFZGl0b3IgRm9udCAnKQotICAgICAgICBmcmFtZUluZGVudD1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgSW5kZW50YXRpb24gV2lkdGggJykKKyAgICAgICAgZnJhbWVGb250ID0gTGFiZWxGcmFtZSgKKyAgICAgICAgICAgICAgICBmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwgdGV4dD0nIEJhc2UgRWRpdG9yIEZvbnQgJykKKyAgICAgICAgZnJhbWVJbmRlbnQgPSBMYWJlbEZyYW1lKAorICAgICAgICAgICAgICAgIGZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9R1JPT1ZFLCB0ZXh0PScgSW5kZW50YXRpb24gV2lkdGggJykKICAgICAgICAgI2ZyYW1lRm9udAotICAgICAgICBmcmFtZUZvbnROYW1lPUZyYW1lKGZyYW1lRm9udCkKLSAgICAgICAgZnJhbWVGb250UGFyYW09RnJhbWUoZnJhbWVGb250KQotICAgICAgICBsYWJlbEZvbnROYW1lVGl0bGU9TGFiZWwoZnJhbWVGb250TmFtZSxqdXN0aWZ5PUxFRlQsCi0gICAgICAgICAgICAgICAgdGV4dD0nRm9udCBGYWNlIDonKQotICAgICAgICBzZWxmLmxpc3RGb250TmFtZT1MaXN0Ym94KGZyYW1lRm9udE5hbWUsaGVpZ2h0PTUsdGFrZWZvY3VzPUZBTFNFLAotICAgICAgICAgICAgICAgIGV4cG9ydHNlbGVjdGlvbj1GQUxTRSkKLSAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUuYmluZCgnPEJ1dHRvblJlbGVhc2UtMT4nLHNlbGYuT25MaXN0Rm9udEJ1dHRvblJlbGVhc2UpCi0gICAgICAgIHNjcm9sbEZvbnQ9U2Nyb2xsYmFyKGZyYW1lRm9udE5hbWUpCisgICAgICAgIGZyYW1lRm9udE5hbWUgPSBGcmFtZShmcmFtZUZvbnQpCisgICAgICAgIGZyYW1lRm9udFBhcmFtID0gRnJhbWUoZnJhbWVGb250KQorICAgICAgICBsYWJlbEZvbnROYW1lVGl0bGUgPSBMYWJlbCgKKyAgICAgICAgICAgICAgICBmcmFtZUZvbnROYW1lLCBqdXN0aWZ5PUxFRlQsIHRleHQ9J0ZvbnQgRmFjZSA6JykKKyAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUgPSBMaXN0Ym94KAorICAgICAgICAgICAgICAgIGZyYW1lRm9udE5hbWUsIGhlaWdodD01LCB0YWtlZm9jdXM9RkFMU0UsIGV4cG9ydHNlbGVjdGlvbj1GQUxTRSkKKyAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUuYmluZCgKKyAgICAgICAgICAgICAgICAnPEJ1dHRvblJlbGVhc2UtMT4nLCBzZWxmLk9uTGlzdEZvbnRCdXR0b25SZWxlYXNlKQorICAgICAgICBzY3JvbGxGb250ID0gU2Nyb2xsYmFyKGZyYW1lRm9udE5hbWUpCiAgICAgICAgIHNjcm9sbEZvbnQuY29uZmlnKGNvbW1hbmQ9c2VsZi5saXN0Rm9udE5hbWUueXZpZXcpCiAgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLmNvbmZpZyh5c2Nyb2xsY29tbWFuZD1zY3JvbGxGb250LnNldCkKLSAgICAgICAgbGFiZWxGb250U2l6ZVRpdGxlPUxhYmVsKGZyYW1lRm9udFBhcmFtLHRleHQ9J1NpemUgOicpCi0gICAgICAgIHNlbGYub3B0TWVudUZvbnRTaXplPUR5bk9wdGlvbk1lbnUoZnJhbWVGb250UGFyYW0sc2VsZi5mb250U2l6ZSxOb25lLAotICAgICAgICAgICAgY29tbWFuZD1zZWxmLlNldEZvbnRTYW1wbGUpCi0gICAgICAgIGNoZWNrRm9udEJvbGQ9Q2hlY2tidXR0b24oZnJhbWVGb250UGFyYW0sdmFyaWFibGU9c2VsZi5mb250Qm9sZCwKLSAgICAgICAgICAgIG9udmFsdWU9MSxvZmZ2YWx1ZT0wLHRleHQ9J0JvbGQnLGNvbW1hbmQ9c2VsZi5TZXRGb250U2FtcGxlKQotICAgICAgICBmcmFtZUZvbnRTYW1wbGU9RnJhbWUoZnJhbWVGb250LHJlbGllZj1TT0xJRCxib3JkZXJ3aWR0aD0xKQotICAgICAgICBzZWxmLmxhYmVsRm9udFNhbXBsZT1MYWJlbChmcmFtZUZvbnRTYW1wbGUsCi0gICAgICAgICAgICAgICAgdGV4dD0nQWFCYkNjRGRFZVxuRmZHZ0hoSWlKaktcbjEyMzQ1Njc4OTBcbiM6Kz0oKXt9W10nLAotICAgICAgICAgICAgICAgIGp1c3RpZnk9TEVGVCxmb250PXNlbGYuZWRpdEZvbnQpCisgICAgICAgIGxhYmVsRm9udFNpemVUaXRsZSA9IExhYmVsKGZyYW1lRm9udFBhcmFtLCB0ZXh0PSdTaXplIDonKQorICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZSA9IER5bk9wdGlvbk1lbnUoCisgICAgICAgICAgICAgICAgZnJhbWVGb250UGFyYW0sIHNlbGYuZm9udFNpemUsIE5vbmUsIGNvbW1hbmQ9c2VsZi5TZXRGb250U2FtcGxlKQorICAgICAgICBjaGVja0ZvbnRCb2xkID0gQ2hlY2tidXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVGb250UGFyYW0sIHZhcmlhYmxlPXNlbGYuZm9udEJvbGQsIG9udmFsdWU9MSwKKyAgICAgICAgICAgICAgICBvZmZ2YWx1ZT0wLCB0ZXh0PSdCb2xkJywgY29tbWFuZD1zZWxmLlNldEZvbnRTYW1wbGUpCisgICAgICAgIGZyYW1lRm9udFNhbXBsZSA9IEZyYW1lKGZyYW1lRm9udCwgcmVsaWVmPVNPTElELCBib3JkZXJ3aWR0aD0xKQorICAgICAgICBzZWxmLmxhYmVsRm9udFNhbXBsZSA9IExhYmVsKAorICAgICAgICAgICAgICAgIGZyYW1lRm9udFNhbXBsZSwganVzdGlmeT1MRUZULCBmb250PXNlbGYuZWRpdEZvbnQsCisgICAgICAgICAgICAgICAgdGV4dD0nQWFCYkNjRGRFZVxuRmZHZ0hoSWlKaktcbjEyMzQ1Njc4OTBcbiM6Kz0oKXt9W10nKQogICAgICAgICAjZnJhbWVJbmRlbnQKLSAgICAgICAgZnJhbWVJbmRlbnRTaXplPUZyYW1lKGZyYW1lSW5kZW50KQotICAgICAgICBsYWJlbFNwYWNlTnVtVGl0bGU9TGFiZWwoZnJhbWVJbmRlbnRTaXplLCBqdXN0aWZ5PUxFRlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PSdQeXRob24gU3RhbmRhcmQ6IDQgU3BhY2VzIScpCi0gICAgICAgIHNlbGYuc2NhbGVTcGFjZU51bT1TY2FsZShmcmFtZUluZGVudFNpemUsIHZhcmlhYmxlPXNlbGYuc3BhY2VOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9J2hvcml6b250YWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2ludGVydmFsPTIsIGZyb21fPTIsIHRvPTE2KQorICAgICAgICBmcmFtZUluZGVudFNpemUgPSBGcmFtZShmcmFtZUluZGVudCkKKyAgICAgICAgbGFiZWxTcGFjZU51bVRpdGxlID0gTGFiZWwoCisgICAgICAgICAgICAgICAgZnJhbWVJbmRlbnRTaXplLCBqdXN0aWZ5PUxFRlQsCisgICAgICAgICAgICAgICAgdGV4dD0nUHl0aG9uIFN0YW5kYXJkOiA0IFNwYWNlcyEnKQorICAgICAgICBzZWxmLnNjYWxlU3BhY2VOdW0gPSBTY2FsZSgKKyAgICAgICAgICAgICAgICBmcmFtZUluZGVudFNpemUsIHZhcmlhYmxlPXNlbGYuc3BhY2VOdW0sCisgICAgICAgICAgICAgICAgb3JpZW50PSdob3Jpem9udGFsJywgdGlja2ludGVydmFsPTIsIGZyb21fPTIsIHRvPTE2KQorCiAgICAgICAgICN3aWRnZXQgcGFja2luZwogICAgICAgICAjYm9keQotICAgICAgICBmcmFtZUZvbnQucGFjayhzaWRlPUxFRlQscGFkeD01LHBhZHk9NSxleHBhbmQ9VFJVRSxmaWxsPUJPVEgpCi0gICAgICAgIGZyYW1lSW5kZW50LnBhY2soc2lkZT1MRUZULHBhZHg9NSxwYWR5PTUsZmlsbD1ZKQorICAgICAgICBmcmFtZUZvbnQucGFjayhzaWRlPUxFRlQsIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQorICAgICAgICBmcmFtZUluZGVudC5wYWNrKHNpZGU9TEVGVCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WSkKICAgICAgICAgI2ZyYW1lRm9udAotICAgICAgICBmcmFtZUZvbnROYW1lLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxmaWxsPVgpCi0gICAgICAgIGZyYW1lRm9udFBhcmFtLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxmaWxsPVgpCi0gICAgICAgIGxhYmVsRm9udE5hbWVUaXRsZS5wYWNrKHNpZGU9VE9QLGFuY2hvcj1XKQotICAgICAgICBzZWxmLmxpc3RGb250TmFtZS5wYWNrKHNpZGU9TEVGVCxleHBhbmQ9VFJVRSxmaWxsPVgpCi0gICAgICAgIHNjcm9sbEZvbnQucGFjayhzaWRlPUxFRlQsZmlsbD1ZKQotICAgICAgICBsYWJlbEZvbnRTaXplVGl0bGUucGFjayhzaWRlPUxFRlQsYW5jaG9yPVcpCi0gICAgICAgIHNlbGYub3B0TWVudUZvbnRTaXplLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XKQotICAgICAgICBjaGVja0ZvbnRCb2xkLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9MjApCi0gICAgICAgIGZyYW1lRm9udFNhbXBsZS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZXhwYW5kPVRSVUUsZmlsbD1CT1RIKQotICAgICAgICBzZWxmLmxhYmVsRm9udFNhbXBsZS5wYWNrKGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgZnJhbWVGb250TmFtZS5wYWNrKHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZmlsbD1YKQorICAgICAgICBmcmFtZUZvbnRQYXJhbS5wYWNrKHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZmlsbD1YKQorICAgICAgICBsYWJlbEZvbnROYW1lVGl0bGUucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcpCisgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLnBhY2soc2lkZT1MRUZULCBleHBhbmQ9VFJVRSwgZmlsbD1YKQorICAgICAgICBzY3JvbGxGb250LnBhY2soc2lkZT1MRUZULCBmaWxsPVkpCisgICAgICAgIGxhYmVsRm9udFNpemVUaXRsZS5wYWNrKHNpZGU9TEVGVCwgYW5jaG9yPVcpCisgICAgICAgIHNlbGYub3B0TWVudUZvbnRTaXplLnBhY2soc2lkZT1MRUZULCBhbmNob3I9VykKKyAgICAgICAgY2hlY2tGb250Qm9sZC5wYWNrKHNpZGU9TEVGVCwgYW5jaG9yPVcsIHBhZHg9MjApCisgICAgICAgIGZyYW1lRm9udFNhbXBsZS5wYWNrKHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKKyAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGUucGFjayhleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQogICAgICAgICAjZnJhbWVJbmRlbnQKLSAgICAgICAgZnJhbWVJbmRlbnRTaXplLnBhY2soc2lkZT1UT1AsZmlsbD1YKQotICAgICAgICBsYWJlbFNwYWNlTnVtVGl0bGUucGFjayhzaWRlPVRPUCxhbmNob3I9VyxwYWR4PTUpCi0gICAgICAgIHNlbGYuc2NhbGVTcGFjZU51bS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxmaWxsPVgpCisgICAgICAgIGZyYW1lSW5kZW50U2l6ZS5wYWNrKHNpZGU9VE9QLCBmaWxsPVgpCisgICAgICAgIGxhYmVsU3BhY2VOdW1UaXRsZS5wYWNrKHNpZGU9VE9QLCBhbmNob3I9VywgcGFkeD01KQorICAgICAgICBzZWxmLnNjYWxlU3BhY2VOdW0ucGFjayhzaWRlPVRPUCwgcGFkeD01LCBmaWxsPVgpCiAgICAgICAgIHJldHVybiBmcmFtZQogCiAgICAgZGVmIENyZWF0ZVBhZ2VIaWdobGlnaHQoc2VsZik6Ci0gICAgICAgIHNlbGYuYnVpbHRpblRoZW1lPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmN1c3RvbVRoZW1lPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmZnSGlsaXRlPUJvb2xlYW5WYXIoc2VsZikKLSAgICAgICAgc2VsZi5jb2xvdXI9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYuZm9udE5hbWU9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYudGhlbWVJc0J1aWx0aW49Qm9vbGVhblZhcihzZWxmKQotICAgICAgICBzZWxmLmhpZ2hsaWdodFRhcmdldD1TdHJpbmdWYXIoc2VsZikKKyAgICAgICAgcGFyZW50ID0gc2VsZi5wYXJlbnQKKyAgICAgICAgc2VsZi5idWlsdGluVGhlbWUgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmN1c3RvbVRoZW1lID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5mZ0hpbGl0ZSA9IEJvb2xlYW5WYXIocGFyZW50KQorICAgICAgICBzZWxmLmNvbG91ciA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuZm9udE5hbWUgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluID0gQm9vbGVhblZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuaGlnaGxpZ2h0VGFyZ2V0ID0gU3RyaW5nVmFyKHBhcmVudCkKKwogICAgICAgICAjI3dpZGdldCBjcmVhdGlvbgogICAgICAgICAjYm9keSBmcmFtZQotICAgICAgICBmcmFtZT1zZWxmLnRhYlBhZ2VzLnBhZ2VzWydIaWdobGlnaHRpbmcnXS5mcmFtZQorICAgICAgICBmcmFtZSA9IHNlbGYudGFiUGFnZXMucGFnZXNbJ0hpZ2hsaWdodGluZyddLmZyYW1lCiAgICAgICAgICNib2R5IHNlY3Rpb24gZnJhbWVzCi0gICAgICAgIGZyYW1lQ3VzdG9tPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBDdXN0b20gSGlnaGxpZ2h0aW5nICcpCi0gICAgICAgIGZyYW1lVGhlbWU9TGFiZWxGcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgSGlnaGxpZ2h0aW5nIFRoZW1lICcpCisgICAgICAgIGZyYW1lQ3VzdG9tID0gTGFiZWxGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBDdXN0b20gSGlnaGxpZ2h0aW5nICcpCisgICAgICAgIGZyYW1lVGhlbWUgPSBMYWJlbEZyYW1lKGZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9R1JPT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgSGlnaGxpZ2h0aW5nIFRoZW1lICcpCiAgICAgICAgICNmcmFtZUN1c3RvbQotICAgICAgICBzZWxmLnRleHRIaWdobGlnaHRTYW1wbGU9VGV4dChmcmFtZUN1c3RvbSxyZWxpZWY9U09MSUQsYm9yZGVyd2lkdGg9MSwKLSAgICAgICAgICAgIGZvbnQ9KCdjb3VyaWVyJywxMiwnJyksY3Vyc29yPSdoYW5kMicsd2lkdGg9MjEsaGVpZ2h0PTExLAotICAgICAgICAgICAgdGFrZWZvY3VzPUZBTFNFLGhpZ2hsaWdodHRoaWNrbmVzcz0wLHdyYXA9Tk9ORSkKKyAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlPVRleHQoCisgICAgICAgICAgICAgICAgZnJhbWVDdXN0b20sIHJlbGllZj1TT0xJRCwgYm9yZGVyd2lkdGg9MSwKKyAgICAgICAgICAgICAgICBmb250PSgnY291cmllcicsIDEyLCAnJyksIGN1cnNvcj0naGFuZDInLCB3aWR0aD0yMSwgaGVpZ2h0PTExLAorICAgICAgICAgICAgICAgIHRha2Vmb2N1cz1GQUxTRSwgaGlnaGxpZ2h0dGhpY2tuZXNzPTAsIHdyYXA9Tk9ORSkKICAgICAgICAgdGV4dD1zZWxmLnRleHRIaWdobGlnaHRTYW1wbGUKLSAgICAgICAgdGV4dC5iaW5kKCc8RG91YmxlLUJ1dHRvbi0xPicsbGFtYmRhIGU6ICdicmVhaycpCi0gICAgICAgIHRleHQuYmluZCgnPEIxLU1vdGlvbj4nLGxhbWJkYSBlOiAnYnJlYWsnKQotICAgICAgICB0ZXh0QW5kVGFncz0oKCcjeW91IGNhbiBjbGljayBoZXJlJywnY29tbWVudCcpLCgnXG4nLCdub3JtYWwnKSwKLSAgICAgICAgICAgICgnI3RvIGNob29zZSBpdGVtcycsJ2NvbW1lbnQnKSwoJ1xuJywnbm9ybWFsJyksKCdkZWYnLCdrZXl3b3JkJyksCi0gICAgICAgICAgICAoJyAnLCdub3JtYWwnKSwoJ2Z1bmMnLCdkZWZpbml0aW9uJyksKCcocGFyYW0pOicsJ25vcm1hbCcpLAotICAgICAgICAgICAgKCdcbiAgJywnbm9ybWFsJyksKCciIiJzdHJpbmciIiInLCdzdHJpbmcnKSwoJ1xuICB2YXIwID0gJywnbm9ybWFsJyksCi0gICAgICAgICAgICAoIidzdHJpbmcnIiwnc3RyaW5nJyksKCdcbiAgdmFyMSA9ICcsJ25vcm1hbCcpLCgiJ3NlbGVjdGVkJyIsJ2hpbGl0ZScpLAotICAgICAgICAgICAgKCdcbiAgdmFyMiA9ICcsJ25vcm1hbCcpLCgiJ2ZvdW5kJyIsJ2hpdCcpLAotICAgICAgICAgICAgKCdcbiAgdmFyMyA9ICcsJ25vcm1hbCcpLCgnbGlzdCcsICdidWlsdGluJyksICgnKCcsJ25vcm1hbCcpLAotICAgICAgICAgICAgKCdOb25lJywgJ2tleXdvcmQnKSwoJylcblxuJywnbm9ybWFsJyksCi0gICAgICAgICAgICAoJyBlcnJvciAnLCdlcnJvcicpLCgnICcsJ25vcm1hbCcpLCgnY3Vyc29yIHwnLCdjdXJzb3InKSwKLSAgICAgICAgICAgICgnXG4gJywnbm9ybWFsJyksKCdzaGVsbCcsJ2NvbnNvbGUnKSwoJyAnLCdub3JtYWwnKSwoJ3N0ZG91dCcsJ3N0ZG91dCcpLAotICAgICAgICAgICAgKCcgJywnbm9ybWFsJyksKCdzdGRlcnInLCdzdGRlcnInKSwoJ1xuJywnbm9ybWFsJykpCisgICAgICAgIHRleHQuYmluZCgnPERvdWJsZS1CdXR0b24tMT4nLCBsYW1iZGEgZTogJ2JyZWFrJykKKyAgICAgICAgdGV4dC5iaW5kKCc8QjEtTW90aW9uPicsIGxhbWJkYSBlOiAnYnJlYWsnKQorICAgICAgICB0ZXh0QW5kVGFncz0oCisgICAgICAgICAgICAoJyN5b3UgY2FuIGNsaWNrIGhlcmUnLCAnY29tbWVudCcpLCAoJ1xuJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCcjdG8gY2hvb3NlIGl0ZW1zJywgJ2NvbW1lbnQnKSwgKCdcbicsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnZGVmJywgJ2tleXdvcmQnKSwgKCcgJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCdmdW5jJywgJ2RlZmluaXRpb24nKSwgKCcocGFyYW0pOlxuICAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJyIiInN0cmluZyIiIicsICdzdHJpbmcnKSwgKCdcbiAgdmFyMCA9ICcsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgiJ3N0cmluZyciLCAnc3RyaW5nJyksICgnXG4gIHZhcjEgPSAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoIidzZWxlY3RlZCciLCAnaGlsaXRlJyksICgnXG4gIHZhcjIgPSAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoIidmb3VuZCciLCAnaGl0JyksICgnXG4gIHZhcjMgPSAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ2xpc3QnLCAnYnVpbHRpbicpLCAoJygnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ05vbmUnLCAna2V5d29yZCcpLCAoJylcblxuJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCcgZXJyb3IgJywgJ2Vycm9yJyksICgnICcsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnY3Vyc29yIHwnLCAnY3Vyc29yJyksICgnXG4gJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCdzaGVsbCcsICdjb25zb2xlJyksICgnICcsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnc3Rkb3V0JywgJ3N0ZG91dCcpLCAoJyAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ3N0ZGVycicsICdzdGRlcnInKSwgKCdcbicsICdub3JtYWwnKSkKICAgICAgICAgZm9yIHR4VGEgaW4gdGV4dEFuZFRhZ3M6Ci0gICAgICAgICAgICB0ZXh0Lmluc2VydChFTkQsdHhUYVswXSx0eFRhWzFdKQorICAgICAgICAgICAgdGV4dC5pbnNlcnQoRU5ELCB0eFRhWzBdLCB0eFRhWzFdKQogICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxmLnRoZW1lRWxlbWVudHM6Ci0gICAgICAgICAgICB0ZXh0LnRhZ19iaW5kKHNlbGYudGhlbWVFbGVtZW50c1tlbGVtZW50XVswXSwnPEJ1dHRvblByZXNzLTE+JywKLSAgICAgICAgICAgICAgICBsYW1iZGEgZXZlbnQsZWxlbT1lbGVtZW50OiBldmVudC53aWRnZXQud2luZm9fdG9wbGV2ZWwoKQotICAgICAgICAgICAgICAgIC5oaWdobGlnaHRUYXJnZXQuc2V0KGVsZW0pKQorICAgICAgICAgICAgZGVmIHRlbShldmVudCwgZWxlbT1lbGVtZW50KToKKyAgICAgICAgICAgICAgICBldmVudC53aWRnZXQud2luZm9fdG9wbGV2ZWwoKS5oaWdobGlnaHRUYXJnZXQuc2V0KGVsZW0pCisgICAgICAgICAgICB0ZXh0LnRhZ19iaW5kKAorICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZW1lRWxlbWVudHNbZWxlbWVudF1bMF0sICc8QnV0dG9uUHJlc3MtMT4nLCB0ZW0pCiAgICAgICAgIHRleHQuY29uZmlnKHN0YXRlPURJU0FCTEVEKQotICAgICAgICBzZWxmLmZyYW1lQ29sb3VyU2V0PUZyYW1lKGZyYW1lQ3VzdG9tLHJlbGllZj1TT0xJRCxib3JkZXJ3aWR0aD0xKQotICAgICAgICBmcmFtZUZnQmc9RnJhbWUoZnJhbWVDdXN0b20pCi0gICAgICAgIGJ1dHRvblNldENvbG91cj1CdXR0b24oc2VsZi5mcmFtZUNvbG91clNldCx0ZXh0PSdDaG9vc2UgQ29sb3VyIGZvciA6JywKLSAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5HZXRDb2xvdXIsaGlnaGxpZ2h0dGhpY2tuZXNzPTApCi0gICAgICAgIHNlbGYub3B0TWVudUhpZ2hsaWdodFRhcmdldD1EeW5PcHRpb25NZW51KHNlbGYuZnJhbWVDb2xvdXJTZXQsCi0gICAgICAgICAgICBzZWxmLmhpZ2hsaWdodFRhcmdldCxOb25lLGhpZ2hsaWdodHRoaWNrbmVzcz0wKSMsY29tbWFuZD1zZWxmLlNldEhpZ2hsaWdodFRhcmdldEJpbmRpbmcKLSAgICAgICAgc2VsZi5yYWRpb0ZnPVJhZGlvYnV0dG9uKGZyYW1lRmdCZyx2YXJpYWJsZT1zZWxmLmZnSGlsaXRlLAotICAgICAgICAgICAgdmFsdWU9MSx0ZXh0PSdGb3JlZ3JvdW5kJyxjb21tYW5kPXNlbGYuU2V0Q29sb3VyU2FtcGxlQmluZGluZykKLSAgICAgICAgc2VsZi5yYWRpb0JnPVJhZGlvYnV0dG9uKGZyYW1lRmdCZyx2YXJpYWJsZT1zZWxmLmZnSGlsaXRlLAotICAgICAgICAgICAgdmFsdWU9MCx0ZXh0PSdCYWNrZ3JvdW5kJyxjb21tYW5kPXNlbGYuU2V0Q29sb3VyU2FtcGxlQmluZGluZykKKyAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldCA9IEZyYW1lKGZyYW1lQ3VzdG9tLCByZWxpZWY9U09MSUQsIGJvcmRlcndpZHRoPTEpCisgICAgICAgIGZyYW1lRmdCZyA9IEZyYW1lKGZyYW1lQ3VzdG9tKQorICAgICAgICBidXR0b25TZXRDb2xvdXIgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldCwgdGV4dD0nQ2hvb3NlIENvbG91ciBmb3IgOicsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLkdldENvbG91ciwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApCisgICAgICAgIHNlbGYub3B0TWVudUhpZ2hsaWdodFRhcmdldCA9IER5bk9wdGlvbk1lbnUoCisgICAgICAgICAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldCwgc2VsZi5oaWdobGlnaHRUYXJnZXQsIE5vbmUsCisgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTApICMsIGNvbW1hbmQ9c2VsZi5TZXRIaWdobGlnaHRUYXJnZXRCaW5kaW5nCisgICAgICAgIHNlbGYucmFkaW9GZyA9IFJhZGlvYnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lRmdCZywgdmFyaWFibGU9c2VsZi5mZ0hpbGl0ZSwgdmFsdWU9MSwKKyAgICAgICAgICAgICAgICB0ZXh0PSdGb3JlZ3JvdW5kJywgY29tbWFuZD1zZWxmLlNldENvbG91clNhbXBsZUJpbmRpbmcpCisgICAgICAgIHNlbGYucmFkaW9CZz1SYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUZnQmcsIHZhcmlhYmxlPXNlbGYuZmdIaWxpdGUsIHZhbHVlPTAsCisgICAgICAgICAgICAgICAgdGV4dD0nQmFja2dyb3VuZCcsIGNvbW1hbmQ9c2VsZi5TZXRDb2xvdXJTYW1wbGVCaW5kaW5nKQogICAgICAgICBzZWxmLmZnSGlsaXRlLnNldCgxKQotICAgICAgICBidXR0b25TYXZlQ3VzdG9tVGhlbWU9QnV0dG9uKGZyYW1lQ3VzdG9tLAotICAgICAgICAgICAgdGV4dD0nU2F2ZSBhcyBOZXcgQ3VzdG9tIFRoZW1lJyxjb21tYW5kPXNlbGYuU2F2ZUFzTmV3VGhlbWUpCisgICAgICAgIGJ1dHRvblNhdmVDdXN0b21UaGVtZSA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUN1c3RvbSwgdGV4dD0nU2F2ZSBhcyBOZXcgQ3VzdG9tIFRoZW1lJywKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2F2ZUFzTmV3VGhlbWUpCiAgICAgICAgICNmcmFtZVRoZW1lCi0gICAgICAgIGxhYmVsVHlwZVRpdGxlPUxhYmVsKGZyYW1lVGhlbWUsdGV4dD0nU2VsZWN0IDogJykKLSAgICAgICAgc2VsZi5yYWRpb1RoZW1lQnVpbHRpbj1SYWRpb2J1dHRvbihmcmFtZVRoZW1lLHZhcmlhYmxlPXNlbGYudGhlbWVJc0J1aWx0aW4sCi0gICAgICAgICAgICB2YWx1ZT0xLGNvbW1hbmQ9c2VsZi5TZXRUaGVtZVR5cGUsdGV4dD0nYSBCdWlsdC1pbiBUaGVtZScpCi0gICAgICAgIHNlbGYucmFkaW9UaGVtZUN1c3RvbT1SYWRpb2J1dHRvbihmcmFtZVRoZW1lLHZhcmlhYmxlPXNlbGYudGhlbWVJc0J1aWx0aW4sCi0gICAgICAgICAgICB2YWx1ZT0wLGNvbW1hbmQ9c2VsZi5TZXRUaGVtZVR5cGUsdGV4dD0nYSBDdXN0b20gVGhlbWUnKQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW49RHluT3B0aW9uTWVudShmcmFtZVRoZW1lLAotICAgICAgICAgICAgc2VsZi5idWlsdGluVGhlbWUsTm9uZSxjb21tYW5kPU5vbmUpCi0gICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tPUR5bk9wdGlvbk1lbnUoZnJhbWVUaGVtZSwKLSAgICAgICAgICAgIHNlbGYuY3VzdG9tVGhlbWUsTm9uZSxjb21tYW5kPU5vbmUpCi0gICAgICAgIHNlbGYuYnV0dG9uRGVsZXRlQ3VzdG9tVGhlbWU9QnV0dG9uKGZyYW1lVGhlbWUsdGV4dD0nRGVsZXRlIEN1c3RvbSBUaGVtZScsCisgICAgICAgIGxhYmVsVHlwZVRpdGxlID0gTGFiZWwoZnJhbWVUaGVtZSwgdGV4dD0nU2VsZWN0IDogJykKKyAgICAgICAgc2VsZi5yYWRpb1RoZW1lQnVpbHRpbiA9IFJhZGlvYnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lVGhlbWUsIHZhcmlhYmxlPXNlbGYudGhlbWVJc0J1aWx0aW4sIHZhbHVlPTEsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLlNldFRoZW1lVHlwZSwgdGV4dD0nYSBCdWlsdC1pbiBUaGVtZScpCisgICAgICAgIHNlbGYucmFkaW9UaGVtZUN1c3RvbSA9IFJhZGlvYnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lVGhlbWUsIHZhcmlhYmxlPXNlbGYudGhlbWVJc0J1aWx0aW4sIHZhbHVlPTAsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLlNldFRoZW1lVHlwZSwgdGV4dD0nYSBDdXN0b20gVGhlbWUnKQorICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4gPSBEeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIGZyYW1lVGhlbWUsIHNlbGYuYnVpbHRpblRoZW1lLCBOb25lLCBjb21tYW5kPU5vbmUpCisgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tPUR5bk9wdGlvbk1lbnUoCisgICAgICAgICAgICAgICAgZnJhbWVUaGVtZSwgc2VsZi5jdXN0b21UaGVtZSwgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbVRoZW1lPUJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZVRoZW1lLCB0ZXh0PSdEZWxldGUgQ3VzdG9tIFRoZW1lJywKICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuRGVsZXRlQ3VzdG9tVGhlbWUpCisKICAgICAgICAgIyN3aWRnZXQgcGFja2luZwogICAgICAgICAjYm9keQotICAgICAgICBmcmFtZUN1c3RvbS5wYWNrKHNpZGU9TEVGVCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKLSAgICAgICAgZnJhbWVUaGVtZS5wYWNrKHNpZGU9TEVGVCxwYWR4PTUscGFkeT01LGZpbGw9WSkKKyAgICAgICAgZnJhbWVDdXN0b20ucGFjayhzaWRlPUxFRlQsIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQorICAgICAgICBmcmFtZVRoZW1lLnBhY2soc2lkZT1MRUZULCBwYWR4PTUsIHBhZHk9NSwgZmlsbD1ZKQogICAgICAgICAjZnJhbWVDdXN0b20KLSAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldC5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZXhwYW5kPVRSVUUsZmlsbD1YKQotICAgICAgICBmcmFtZUZnQmcucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT0wKQotICAgICAgICBzZWxmLnRleHRIaWdobGlnaHRTYW1wbGUucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLAotICAgICAgICAgICAgZmlsbD1CT1RIKQotICAgICAgICBidXR0b25TZXRDb2xvdXIucGFjayhzaWRlPVRPUCxleHBhbmQ9VFJVRSxmaWxsPVgscGFkeD04LHBhZHk9NCkKLSAgICAgICAgc2VsZi5vcHRNZW51SGlnaGxpZ2h0VGFyZ2V0LnBhY2soc2lkZT1UT1AsZXhwYW5kPVRSVUUsZmlsbD1YLHBhZHg9OCxwYWR5PTMpCi0gICAgICAgIHNlbGYucmFkaW9GZy5wYWNrKHNpZGU9TEVGVCxhbmNob3I9RSkKLSAgICAgICAgc2VsZi5yYWRpb0JnLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VykKLSAgICAgICAgYnV0dG9uU2F2ZUN1c3RvbVRoZW1lLnBhY2soc2lkZT1CT1RUT00sZmlsbD1YLHBhZHg9NSxwYWR5PTUpCisgICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGV4cGFuZD1UUlVFLCBmaWxsPVgpCisgICAgICAgIGZyYW1lRmdCZy5wYWNrKHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9MCkKKyAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlLnBhY2soCisgICAgICAgICAgICAgICAgc2lkZT1UT1AsIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQorICAgICAgICBidXR0b25TZXRDb2xvdXIucGFjayhzaWRlPVRPUCwgZXhwYW5kPVRSVUUsIGZpbGw9WCwgcGFkeD04LCBwYWR5PTQpCisgICAgICAgIHNlbGYub3B0TWVudUhpZ2hsaWdodFRhcmdldC5wYWNrKAorICAgICAgICAgICAgICAgIHNpZGU9VE9QLCBleHBhbmQ9VFJVRSwgZmlsbD1YLCBwYWR4PTgsIHBhZHk9MykKKyAgICAgICAgc2VsZi5yYWRpb0ZnLnBhY2soc2lkZT1MRUZULCBhbmNob3I9RSkKKyAgICAgICAgc2VsZi5yYWRpb0JnLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcpCisgICAgICAgIGJ1dHRvblNhdmVDdXN0b21UaGVtZS5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPVgsIHBhZHg9NSwgcGFkeT01KQogICAgICAgICAjZnJhbWVUaGVtZQotICAgICAgICBsYWJlbFR5cGVUaXRsZS5wYWNrKHNpZGU9VE9QLGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHNlbGYucmFkaW9UaGVtZUJ1aWx0aW4ucGFjayhzaWRlPVRPUCxhbmNob3I9VyxwYWR4PTUpCi0gICAgICAgIHNlbGYucmFkaW9UaGVtZUN1c3RvbS5wYWNrKHNpZGU9VE9QLGFuY2hvcj1XLHBhZHg9NSxwYWR5PTIpCi0gICAgICAgIHNlbGYub3B0TWVudVRoZW1lQnVpbHRpbi5wYWNrKHNpZGU9VE9QLGZpbGw9WCxwYWR4PTUscGFkeT01KQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5wYWNrKHNpZGU9VE9QLGZpbGw9WCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQotICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbVRoZW1lLnBhY2soc2lkZT1UT1AsZmlsbD1YLHBhZHg9NSxwYWR5PTUpCisgICAgICAgIGxhYmVsVHlwZVRpdGxlLnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgc2VsZi5yYWRpb1RoZW1lQnVpbHRpbi5wYWNrKHNpZGU9VE9QLCBhbmNob3I9VywgcGFkeD01KQorICAgICAgICBzZWxmLnJhZGlvVGhlbWVDdXN0b20ucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT0yKQorICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4ucGFjayhzaWRlPVRPUCwgZmlsbD1YLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20ucGFjayhzaWRlPVRPUCwgZmlsbD1YLCBhbmNob3I9VywgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHNlbGYuYnV0dG9uRGVsZXRlQ3VzdG9tVGhlbWUucGFjayhzaWRlPVRPUCwgZmlsbD1YLCBwYWR4PTUsIHBhZHk9NSkKICAgICAgICAgcmV0dXJuIGZyYW1lCiAKICAgICBkZWYgQ3JlYXRlUGFnZUtleXMoc2VsZik6Ci0gICAgICAgICN0a1ZhcnMKLSAgICAgICAgc2VsZi5iaW5kaW5nVGFyZ2V0PVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmJ1aWx0aW5LZXlzPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmN1c3RvbUtleXM9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW49Qm9vbGVhblZhcihzZWxmKQotICAgICAgICBzZWxmLmtleUJpbmRpbmc9U3RyaW5nVmFyKHNlbGYpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYuYmluZGluZ1RhcmdldCA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuYnVpbHRpbktleXMgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmN1c3RvbUtleXMgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmtleXNBcmVCdWlsdGluID0gQm9vbGVhblZhcihwYXJlbnQpCisgICAgICAgIHNlbGYua2V5QmluZGluZyA9IFN0cmluZ1ZhcihwYXJlbnQpCisKICAgICAgICAgIyN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkgZnJhbWUKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snS2V5cyddLmZyYW1lCisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snS2V5cyddLmZyYW1lCiAgICAgICAgICNib2R5IHNlY3Rpb24gZnJhbWVzCi0gICAgICAgIGZyYW1lQ3VzdG9tPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBDdXN0b20gS2V5IEJpbmRpbmdzICcpCi0gICAgICAgIGZyYW1lS2V5U2V0cz1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBLZXkgU2V0ICcpCisgICAgICAgIGZyYW1lQ3VzdG9tID0gTGFiZWxGcmFtZSgKKyAgICAgICAgICAgICAgICBmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICB0ZXh0PScgQ3VzdG9tIEtleSBCaW5kaW5ncyAnKQorICAgICAgICBmcmFtZUtleVNldHMgPSBMYWJlbEZyYW1lKAorICAgICAgICAgICAgICAgIGZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9R1JPT1ZFLCB0ZXh0PScgS2V5IFNldCAnKQogICAgICAgICAjZnJhbWVDdXN0b20KLSAgICAgICAgZnJhbWVUYXJnZXQ9RnJhbWUoZnJhbWVDdXN0b20pCi0gICAgICAgIGxhYmVsVGFyZ2V0VGl0bGU9TGFiZWwoZnJhbWVUYXJnZXQsdGV4dD0nQWN0aW9uIC0gS2V5KHMpJykKLSAgICAgICAgc2Nyb2xsVGFyZ2V0WT1TY3JvbGxiYXIoZnJhbWVUYXJnZXQpCi0gICAgICAgIHNjcm9sbFRhcmdldFg9U2Nyb2xsYmFyKGZyYW1lVGFyZ2V0LG9yaWVudD1IT1JJWk9OVEFMKQotICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncz1MaXN0Ym94KGZyYW1lVGFyZ2V0LHRha2Vmb2N1cz1GQUxTRSwKLSAgICAgICAgICAgICAgICBleHBvcnRzZWxlY3Rpb249RkFMU0UpCi0gICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+JyxzZWxmLktleUJpbmRpbmdTZWxlY3RlZCkKKyAgICAgICAgZnJhbWVUYXJnZXQgPSBGcmFtZShmcmFtZUN1c3RvbSkKKyAgICAgICAgbGFiZWxUYXJnZXRUaXRsZSA9IExhYmVsKGZyYW1lVGFyZ2V0LCB0ZXh0PSdBY3Rpb24gLSBLZXkocyknKQorICAgICAgICBzY3JvbGxUYXJnZXRZID0gU2Nyb2xsYmFyKGZyYW1lVGFyZ2V0KQorICAgICAgICBzY3JvbGxUYXJnZXRYID0gU2Nyb2xsYmFyKGZyYW1lVGFyZ2V0LCBvcmllbnQ9SE9SSVpPTlRBTCkKKyAgICAgICAgc2VsZi5saXN0QmluZGluZ3MgPSBMaXN0Ym94KAorICAgICAgICAgICAgICAgIGZyYW1lVGFyZ2V0LCB0YWtlZm9jdXM9RkFMU0UsIGV4cG9ydHNlbGVjdGlvbj1GQUxTRSkKKyAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuYmluZCgnPEJ1dHRvblJlbGVhc2UtMT4nLCBzZWxmLktleUJpbmRpbmdTZWxlY3RlZCkKICAgICAgICAgc2Nyb2xsVGFyZ2V0WS5jb25maWcoY29tbWFuZD1zZWxmLmxpc3RCaW5kaW5ncy55dmlldykKICAgICAgICAgc2Nyb2xsVGFyZ2V0WC5jb25maWcoY29tbWFuZD1zZWxmLmxpc3RCaW5kaW5ncy54dmlldykKICAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuY29uZmlnKHlzY3JvbGxjb21tYW5kPXNjcm9sbFRhcmdldFkuc2V0KQogICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5jb25maWcoeHNjcm9sbGNvbW1hbmQ9c2Nyb2xsVGFyZ2V0WC5zZXQpCi0gICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cz1CdXR0b24oZnJhbWVDdXN0b20sdGV4dD0nR2V0IE5ldyBLZXlzIGZvciBTZWxlY3Rpb24nLAotICAgICAgICAgICAgY29tbWFuZD1zZWxmLkdldE5ld0tleXMsc3RhdGU9RElTQUJMRUQpCisgICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cyA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUN1c3RvbSwgdGV4dD0nR2V0IE5ldyBLZXlzIGZvciBTZWxlY3Rpb24nLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5HZXROZXdLZXlzLCBzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgI2ZyYW1lS2V5U2V0cwogICAgICAgICBmcmFtZXMgPSBbRnJhbWUoZnJhbWVLZXlTZXRzLCBwYWR4PTIsIHBhZHk9MiwgYm9yZGVyd2lkdGg9MCkKICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDIpXQotICAgICAgICBzZWxmLnJhZGlvS2V5c0J1aWx0aW49UmFkaW9idXR0b24oZnJhbWVzWzBdLHZhcmlhYmxlPXNlbGYua2V5c0FyZUJ1aWx0aW4sCi0gICAgICAgICAgICB2YWx1ZT0xLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSdVc2UgYSBCdWlsdC1pbiBLZXkgU2V0JykKLSAgICAgICAgc2VsZi5yYWRpb0tleXNDdXN0b209UmFkaW9idXR0b24oZnJhbWVzWzBdLHZhcmlhYmxlPXNlbGYua2V5c0FyZUJ1aWx0aW4sCi0gICAgICAgICAgICB2YWx1ZT0wLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSdVc2UgYSBDdXN0b20gS2V5IFNldCcpCi0gICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluPUR5bk9wdGlvbk1lbnUoZnJhbWVzWzBdLAotICAgICAgICAgICAgc2VsZi5idWlsdGluS2V5cyxOb25lLGNvbW1hbmQ9Tm9uZSkKLSAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbT1EeW5PcHRpb25NZW51KGZyYW1lc1swXSwKLSAgICAgICAgICAgIHNlbGYuY3VzdG9tS2V5cyxOb25lLGNvbW1hbmQ9Tm9uZSkKLSAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21LZXlzPUJ1dHRvbihmcmFtZXNbMV0sdGV4dD0nRGVsZXRlIEN1c3RvbSBLZXkgU2V0JywKKyAgICAgICAgc2VsZi5yYWRpb0tleXNCdWlsdGluID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzBdLCB2YXJpYWJsZT1zZWxmLmtleXNBcmVCdWlsdGluLCB2YWx1ZT0xLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSwgdGV4dD0nVXNlIGEgQnVpbHQtaW4gS2V5IFNldCcpCisgICAgICAgIHNlbGYucmFkaW9LZXlzQ3VzdG9tID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzBdLCB2YXJpYWJsZT1zZWxmLmtleXNBcmVCdWlsdGluLCAgdmFsdWU9MCwKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsIHRleHQ9J1VzZSBhIEN1c3RvbSBLZXkgU2V0JykKKyAgICAgICAgc2VsZi5vcHRNZW51S2V5c0J1aWx0aW4gPSBEeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIGZyYW1lc1swXSwgc2VsZi5idWlsdGluS2V5cywgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tID0gRHluT3B0aW9uTWVudSgKKyAgICAgICAgICAgICAgICBmcmFtZXNbMF0sIHNlbGYuY3VzdG9tS2V5cywgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbUtleXMgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzFdLCB0ZXh0PSdEZWxldGUgQ3VzdG9tIEtleSBTZXQnLAogICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5EZWxldGVDdXN0b21LZXlzKQotICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cz1CdXR0b24oZnJhbWVzWzFdLAotICAgICAgICAgICAgICAgIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBLZXkgU2V0Jyxjb21tYW5kPXNlbGYuU2F2ZUFzTmV3S2V5U2V0KQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cyA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZXNbMV0sIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBLZXkgU2V0JywKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2F2ZUFzTmV3S2V5U2V0KQorCiAgICAgICAgICMjd2lkZ2V0IHBhY2tpbmcKICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWVDdXN0b20ucGFjayhzaWRlPUJPVFRPTSxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKLSAgICAgICAgZnJhbWVLZXlTZXRzLnBhY2soc2lkZT1CT1RUT00scGFkeD01LHBhZHk9NSxmaWxsPUJPVEgpCisgICAgICAgIGZyYW1lQ3VzdG9tLnBhY2soc2lkZT1CT1RUT00sIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQorICAgICAgICBmcmFtZUtleVNldHMucGFjayhzaWRlPUJPVFRPTSwgcGFkeD01LCBwYWR5PTUsIGZpbGw9Qk9USCkKICAgICAgICAgI2ZyYW1lQ3VzdG9tCi0gICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cy5wYWNrKHNpZGU9Qk9UVE9NLGZpbGw9WCxwYWR4PTUscGFkeT01KQotICAgICAgICBmcmFtZVRhcmdldC5wYWNrKHNpZGU9TEVGVCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgc2VsZi5idXR0b25OZXdLZXlzLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCwgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIGZyYW1lVGFyZ2V0LnBhY2soc2lkZT1MRUZULCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKICAgICAgICAgI2ZyYW1lIHRhcmdldAotICAgICAgICBmcmFtZVRhcmdldC5jb2x1bW5jb25maWd1cmUoMCx3ZWlnaHQ9MSkKLSAgICAgICAgZnJhbWVUYXJnZXQucm93Y29uZmlndXJlKDEsd2VpZ2h0PTEpCi0gICAgICAgIGxhYmVsVGFyZ2V0VGl0bGUuZ3JpZChyb3c9MCxjb2x1bW49MCxjb2x1bW5zcGFuPTIsc3RpY2t5PVcpCi0gICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmdyaWQocm93PTEsY29sdW1uPTAsc3RpY2t5PU5TRVcpCi0gICAgICAgIHNjcm9sbFRhcmdldFkuZ3JpZChyb3c9MSxjb2x1bW49MSxzdGlja3k9TlMpCi0gICAgICAgIHNjcm9sbFRhcmdldFguZ3JpZChyb3c9Mixjb2x1bW49MCxzdGlja3k9RVcpCisgICAgICAgIGZyYW1lVGFyZ2V0LmNvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKKyAgICAgICAgZnJhbWVUYXJnZXQucm93Y29uZmlndXJlKDEsIHdlaWdodD0xKQorICAgICAgICBsYWJlbFRhcmdldFRpdGxlLmdyaWQocm93PTAsIGNvbHVtbj0wLCBjb2x1bW5zcGFuPTIsIHN0aWNreT1XKQorICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5ncmlkKHJvdz0xLCBjb2x1bW49MCwgc3RpY2t5PU5TRVcpCisgICAgICAgIHNjcm9sbFRhcmdldFkuZ3JpZChyb3c9MSwgY29sdW1uPTEsIHN0aWNreT1OUykKKyAgICAgICAgc2Nyb2xsVGFyZ2V0WC5ncmlkKHJvdz0yLCBjb2x1bW49MCwgc3RpY2t5PUVXKQogICAgICAgICAjZnJhbWVLZXlTZXRzCiAgICAgICAgIHNlbGYucmFkaW9LZXlzQnVpbHRpbi5ncmlkKHJvdz0wLCBjb2x1bW49MCwgc3RpY2t5PVcrTlMpCiAgICAgICAgIHNlbGYucmFkaW9LZXlzQ3VzdG9tLmdyaWQocm93PTEsIGNvbHVtbj0wLCBzdGlja3k9VytOUykKICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0J1aWx0aW4uZ3JpZChyb3c9MCwgY29sdW1uPTEsIHN0aWNreT1OU0VXKQogICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLmdyaWQocm93PTEsIGNvbHVtbj0xLCBzdGlja3k9TlNFVykKLSAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21LZXlzLnBhY2soc2lkZT1MRUZULGZpbGw9WCxleHBhbmQ9VHJ1ZSxwYWR4PTIpCi0gICAgICAgIGJ1dHRvblNhdmVDdXN0b21LZXlzLnBhY2soc2lkZT1MRUZULGZpbGw9WCxleHBhbmQ9VHJ1ZSxwYWR4PTIpCisgICAgICAgIHNlbGYuYnV0dG9uRGVsZXRlQ3VzdG9tS2V5cy5wYWNrKHNpZGU9TEVGVCwgZmlsbD1YLCBleHBhbmQ9VHJ1ZSwgcGFkeD0yKQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cy5wYWNrKHNpZGU9TEVGVCwgZmlsbD1YLCBleHBhbmQ9VHJ1ZSwgcGFkeD0yKQogICAgICAgICBmcmFtZXNbMF0ucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9VHJ1ZSkKICAgICAgICAgZnJhbWVzWzFdLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgZXhwYW5kPVRydWUsIHBhZHk9MikKICAgICAgICAgcmV0dXJuIGZyYW1lCiAKICAgICBkZWYgQ3JlYXRlUGFnZUdlbmVyYWwoc2VsZik6Ci0gICAgICAgICN0a1ZhcnMKLSAgICAgICAgc2VsZi53aW5XaWR0aD1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi53aW5IZWlnaHQ9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYucGFyYVdpZHRoPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0PUludFZhcihzZWxmKQotICAgICAgICBzZWxmLmF1dG9TYXZlPUludFZhcihzZWxmKQotICAgICAgICBzZWxmLmVuY29kaW5nPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnVzZXJIZWxwQnJvd3Nlcj1Cb29sZWFuVmFyKHNlbGYpCi0gICAgICAgIHNlbGYuaGVscEJyb3dzZXI9U3RyaW5nVmFyKHNlbGYpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYud2luV2lkdGggPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLndpbkhlaWdodCA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYucGFyYVdpZHRoID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5zdGFydHVwRWRpdCA9IEludFZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuYXV0b1NhdmUgPSBJbnRWYXIocGFyZW50KQorICAgICAgICBzZWxmLmVuY29kaW5nID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi51c2VySGVscEJyb3dzZXIgPSBCb29sZWFuVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5oZWxwQnJvd3NlciA9IFN0cmluZ1ZhcihwYXJlbnQpCisKICAgICAgICAgI3dpZGdldCBjcmVhdGlvbgogICAgICAgICAjYm9keQotICAgICAgICBmcmFtZT1zZWxmLnRhYlBhZ2VzLnBhZ2VzWydHZW5lcmFsJ10uZnJhbWUKKyAgICAgICAgZnJhbWUgPSBzZWxmLnRhYlBhZ2VzLnBhZ2VzWydHZW5lcmFsJ10uZnJhbWUKICAgICAgICAgI2JvZHkgc2VjdGlvbiBmcmFtZXMKLSAgICAgICAgZnJhbWVSdW49TGFiZWxGcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIFN0YXJ0dXAgUHJlZmVyZW5jZXMgJykKLSAgICAgICAgZnJhbWVTYXZlPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgQXV0b3NhdmUgUHJlZmVyZW5jZXMgJykKLSAgICAgICAgZnJhbWVXaW5TaXplPUZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSkKLSAgICAgICAgZnJhbWVQYXJhU2l6ZT1GcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUpCi0gICAgICAgIGZyYW1lSGVscD1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzICcpCisgICAgICAgIGZyYW1lUnVuID0gTGFiZWxGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBTdGFydHVwIFByZWZlcmVuY2VzICcpCisgICAgICAgIGZyYW1lU2F2ZSA9IExhYmVsRnJhbWUoZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEF1dG9zYXZlIFByZWZlcmVuY2VzICcpCisgICAgICAgIGZyYW1lV2luU2l6ZSA9IEZyYW1lKGZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9R1JPT1ZFKQorICAgICAgICBmcmFtZVBhcmFTaXplID0gRnJhbWUoZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUpCisgICAgICAgIGZyYW1lSGVscCA9IExhYmVsRnJhbWUoZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzICcpCiAgICAgICAgICNmcmFtZVJ1bgotICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlPUxhYmVsKGZyYW1lUnVuLHRleHQ9J0F0IFN0YXJ0dXAnKQotICAgICAgICByYWRpb1N0YXJ0dXBFZGl0PVJhZGlvYnV0dG9uKGZyYW1lUnVuLHZhcmlhYmxlPXNlbGYuc3RhcnR1cEVkaXQsCi0gICAgICAgICAgICB2YWx1ZT0xLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSJPcGVuIEVkaXQgV2luZG93IikKLSAgICAgICAgcmFkaW9TdGFydHVwU2hlbGw9UmFkaW9idXR0b24oZnJhbWVSdW4sdmFyaWFibGU9c2VsZi5zdGFydHVwRWRpdCwKLSAgICAgICAgICAgIHZhbHVlPTAsY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLHRleHQ9J09wZW4gU2hlbGwgV2luZG93JykKKyAgICAgICAgbGFiZWxSdW5DaG9pY2VUaXRsZSA9IExhYmVsKGZyYW1lUnVuLCB0ZXh0PSdBdCBTdGFydHVwJykKKyAgICAgICAgcmFkaW9TdGFydHVwRWRpdCA9IFJhZGlvYnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lUnVuLCB2YXJpYWJsZT1zZWxmLnN0YXJ0dXBFZGl0LCB2YWx1ZT0xLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSwgdGV4dD0iT3BlbiBFZGl0IFdpbmRvdyIpCisgICAgICAgIHJhZGlvU3RhcnR1cFNoZWxsID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVSdW4sIHZhcmlhYmxlPXNlbGYuc3RhcnR1cEVkaXQsIHZhbHVlPTAsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLCB0ZXh0PSdPcGVuIFNoZWxsIFdpbmRvdycpCiAgICAgICAgICNmcmFtZVNhdmUKLSAgICAgICAgbGFiZWxSdW5TYXZlVGl0bGU9TGFiZWwoZnJhbWVTYXZlLHRleHQ9J0F0IFN0YXJ0IG9mIFJ1biAoRjUpICAnKQotICAgICAgICByYWRpb1NhdmVBc2s9UmFkaW9idXR0b24oZnJhbWVTYXZlLHZhcmlhYmxlPXNlbGYuYXV0b1NhdmUsCi0gICAgICAgICAgICB2YWx1ZT0wLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSJQcm9tcHQgdG8gU2F2ZSIpCi0gICAgICAgIHJhZGlvU2F2ZUF1dG89UmFkaW9idXR0b24oZnJhbWVTYXZlLHZhcmlhYmxlPXNlbGYuYXV0b1NhdmUsCi0gICAgICAgICAgICB2YWx1ZT0xLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSdObyBQcm9tcHQnKQorICAgICAgICBsYWJlbFJ1blNhdmVUaXRsZSA9IExhYmVsKGZyYW1lU2F2ZSwgdGV4dD0nQXQgU3RhcnQgb2YgUnVuIChGNSkgICcpCisgICAgICAgIHJhZGlvU2F2ZUFzayA9IFJhZGlvYnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lU2F2ZSwgdmFyaWFibGU9c2VsZi5hdXRvU2F2ZSwgdmFsdWU9MCwKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsIHRleHQ9IlByb21wdCB0byBTYXZlIikKKyAgICAgICAgcmFkaW9TYXZlQXV0byA9IFJhZGlvYnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lU2F2ZSwgdmFyaWFibGU9c2VsZi5hdXRvU2F2ZSwgdmFsdWU9MSwKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsIHRleHQ9J05vIFByb21wdCcpCiAgICAgICAgICNmcmFtZVdpblNpemUKLSAgICAgICAgbGFiZWxXaW5TaXplVGl0bGU9TGFiZWwoZnJhbWVXaW5TaXplLHRleHQ9J0luaXRpYWwgV2luZG93IFNpemUnKwotICAgICAgICAgICAgICAgICcgIChpbiBjaGFyYWN0ZXJzKScpCi0gICAgICAgIGxhYmVsV2luV2lkdGhUaXRsZT1MYWJlbChmcmFtZVdpblNpemUsdGV4dD0nV2lkdGgnKQotICAgICAgICBlbnRyeVdpbldpZHRoPUVudHJ5KGZyYW1lV2luU2l6ZSx0ZXh0dmFyaWFibGU9c2VsZi53aW5XaWR0aCwKLSAgICAgICAgICAgICAgICB3aWR0aD0zKQotICAgICAgICBsYWJlbFdpbkhlaWdodFRpdGxlPUxhYmVsKGZyYW1lV2luU2l6ZSx0ZXh0PSdIZWlnaHQnKQotICAgICAgICBlbnRyeVdpbkhlaWdodD1FbnRyeShmcmFtZVdpblNpemUsdGV4dHZhcmlhYmxlPXNlbGYud2luSGVpZ2h0LAotICAgICAgICAgICAgICAgIHdpZHRoPTMpCisgICAgICAgIGxhYmVsV2luU2l6ZVRpdGxlID0gTGFiZWwoCisgICAgICAgICAgICAgICAgZnJhbWVXaW5TaXplLCB0ZXh0PSdJbml0aWFsIFdpbmRvdyBTaXplICAoaW4gY2hhcmFjdGVycyknKQorICAgICAgICBsYWJlbFdpbldpZHRoVGl0bGUgPSBMYWJlbChmcmFtZVdpblNpemUsIHRleHQ9J1dpZHRoJykKKyAgICAgICAgZW50cnlXaW5XaWR0aCA9IEVudHJ5KAorICAgICAgICAgICAgICAgIGZyYW1lV2luU2l6ZSwgdGV4dHZhcmlhYmxlPXNlbGYud2luV2lkdGgsIHdpZHRoPTMpCisgICAgICAgIGxhYmVsV2luSGVpZ2h0VGl0bGUgPSBMYWJlbChmcmFtZVdpblNpemUsIHRleHQ9J0hlaWdodCcpCisgICAgICAgIGVudHJ5V2luSGVpZ2h0ID0gRW50cnkoCisgICAgICAgICAgICAgICAgZnJhbWVXaW5TaXplLCB0ZXh0dmFyaWFibGU9c2VsZi53aW5IZWlnaHQsIHdpZHRoPTMpCiAgICAgICAgICNwYXJhZ3JhcGhGb3JtYXRXaWR0aAotICAgICAgICBsYWJlbFBhcmFXaWR0aFRpdGxlPUxhYmVsKGZyYW1lUGFyYVNpemUsdGV4dD0nUGFyYWdyYXBoIHJlZm9ybWF0JysKLSAgICAgICAgICAgICAgICAnIHdpZHRoIChpbiBjaGFyYWN0ZXJzKScpCi0gICAgICAgIGVudHJ5UGFyYVdpZHRoPUVudHJ5KGZyYW1lUGFyYVNpemUsdGV4dHZhcmlhYmxlPXNlbGYucGFyYVdpZHRoLAotICAgICAgICAgICAgICAgIHdpZHRoPTMpCisgICAgICAgIGxhYmVsUGFyYVdpZHRoVGl0bGUgPSBMYWJlbCgKKyAgICAgICAgICAgICAgICBmcmFtZVBhcmFTaXplLCB0ZXh0PSdQYXJhZ3JhcGggcmVmb3JtYXQgd2lkdGggKGluIGNoYXJhY3RlcnMpJykKKyAgICAgICAgZW50cnlQYXJhV2lkdGggPSBFbnRyeSgKKyAgICAgICAgICAgICAgICBmcmFtZVBhcmFTaXplLCB0ZXh0dmFyaWFibGU9c2VsZi5wYXJhV2lkdGgsIHdpZHRoPTMpCiAgICAgICAgICNmcmFtZUhlbHAKLSAgICAgICAgZnJhbWVIZWxwTGlzdD1GcmFtZShmcmFtZUhlbHApCi0gICAgICAgIGZyYW1lSGVscExpc3RCdXR0b25zPUZyYW1lKGZyYW1lSGVscExpc3QpCi0gICAgICAgIHNjcm9sbEhlbHBMaXN0PVNjcm9sbGJhcihmcmFtZUhlbHBMaXN0KQotICAgICAgICBzZWxmLmxpc3RIZWxwPUxpc3Rib3goZnJhbWVIZWxwTGlzdCxoZWlnaHQ9NSx0YWtlZm9jdXM9RkFMU0UsCisgICAgICAgIGZyYW1lSGVscExpc3QgPSBGcmFtZShmcmFtZUhlbHApCisgICAgICAgIGZyYW1lSGVscExpc3RCdXR0b25zID0gRnJhbWUoZnJhbWVIZWxwTGlzdCkKKyAgICAgICAgc2Nyb2xsSGVscExpc3QgPSBTY3JvbGxiYXIoZnJhbWVIZWxwTGlzdCkKKyAgICAgICAgc2VsZi5saXN0SGVscCA9IExpc3Rib3goCisgICAgICAgICAgICAgICAgZnJhbWVIZWxwTGlzdCwgaGVpZ2h0PTUsIHRha2Vmb2N1cz1GQUxTRSwKICAgICAgICAgICAgICAgICBleHBvcnRzZWxlY3Rpb249RkFMU0UpCiAgICAgICAgIHNjcm9sbEhlbHBMaXN0LmNvbmZpZyhjb21tYW5kPXNlbGYubGlzdEhlbHAueXZpZXcpCiAgICAgICAgIHNlbGYubGlzdEhlbHAuY29uZmlnKHlzY3JvbGxjb21tYW5kPXNjcm9sbEhlbHBMaXN0LnNldCkKLSAgICAgICAgc2VsZi5saXN0SGVscC5iaW5kKCc8QnV0dG9uUmVsZWFzZS0xPicsc2VsZi5IZWxwU291cmNlU2VsZWN0ZWQpCi0gICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RFZGl0PUJ1dHRvbihmcmFtZUhlbHBMaXN0QnV0dG9ucyx0ZXh0PSdFZGl0JywKLSAgICAgICAgICAgICAgICBzdGF0ZT1ESVNBQkxFRCx3aWR0aD04LGNvbW1hbmQ9c2VsZi5IZWxwTGlzdEl0ZW1FZGl0KQotICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0QWRkPUJ1dHRvbihmcmFtZUhlbHBMaXN0QnV0dG9ucyx0ZXh0PSdBZGQnLAotICAgICAgICAgICAgICAgIHdpZHRoPTgsY29tbWFuZD1zZWxmLkhlbHBMaXN0SXRlbUFkZCkKLSAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdFJlbW92ZT1CdXR0b24oZnJhbWVIZWxwTGlzdEJ1dHRvbnMsdGV4dD0nUmVtb3ZlJywKLSAgICAgICAgICAgICAgICBzdGF0ZT1ESVNBQkxFRCx3aWR0aD04LGNvbW1hbmQ9c2VsZi5IZWxwTGlzdEl0ZW1SZW1vdmUpCisgICAgICAgIHNlbGYubGlzdEhlbHAuYmluZCgnPEJ1dHRvblJlbGVhc2UtMT4nLCBzZWxmLkhlbHBTb3VyY2VTZWxlY3RlZCkKKyAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEVkaXQgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnMsIHRleHQ9J0VkaXQnLCBzdGF0ZT1ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICB3aWR0aD04LCBjb21tYW5kPXNlbGYuSGVscExpc3RJdGVtRWRpdCkKKyAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEFkZCA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUhlbHBMaXN0QnV0dG9ucywgdGV4dD0nQWRkJywKKyAgICAgICAgICAgICAgICB3aWR0aD04LCBjb21tYW5kPXNlbGYuSGVscExpc3RJdGVtQWRkKQorICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0UmVtb3ZlID0gQnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lSGVscExpc3RCdXR0b25zLCB0ZXh0PSdSZW1vdmUnLCBzdGF0ZT1ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICB3aWR0aD04LCBjb21tYW5kPXNlbGYuSGVscExpc3RJdGVtUmVtb3ZlKQorCiAgICAgICAgICN3aWRnZXQgcGFja2luZwogICAgICAgICAjYm9keQotICAgICAgICBmcmFtZVJ1bi5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBmcmFtZVNhdmUucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGZpbGw9WCkKLSAgICAgICAgZnJhbWVXaW5TaXplLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxmaWxsPVgpCi0gICAgICAgIGZyYW1lUGFyYVNpemUucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGZpbGw9WCkKLSAgICAgICAgZnJhbWVIZWxwLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxleHBhbmQ9VFJVRSxmaWxsPUJPVEgpCisgICAgICAgIGZyYW1lUnVuLnBhY2soc2lkZT1UT1AsIHBhZHg9NSwgcGFkeT01LCBmaWxsPVgpCisgICAgICAgIGZyYW1lU2F2ZS5wYWNrKHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZmlsbD1YKQorICAgICAgICBmcmFtZVdpblNpemUucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WCkKKyAgICAgICAgZnJhbWVQYXJhU2l6ZS5wYWNrKHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZmlsbD1YKQorICAgICAgICBmcmFtZUhlbHAucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCiAgICAgICAgICNmcmFtZVJ1bgotICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU3RhcnR1cFNoZWxsLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQotICAgICAgICByYWRpb1N0YXJ0dXBFZGl0LnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQorICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlLnBhY2soc2lkZT1MRUZULCBhbmNob3I9VywgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHJhZGlvU3RhcnR1cFNoZWxsLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQorICAgICAgICByYWRpb1N0YXJ0dXBFZGl0LnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQogICAgICAgICAjZnJhbWVTYXZlCi0gICAgICAgIGxhYmVsUnVuU2F2ZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU2F2ZUF1dG8ucGFjayhzaWRlPVJJR0hULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU2F2ZUFzay5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPVcscGFkeD01LHBhZHk9NSkKKyAgICAgICAgbGFiZWxSdW5TYXZlVGl0bGUucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgcmFkaW9TYXZlQXV0by5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgcmFkaW9TYXZlQXNrLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQogICAgICAgICAjZnJhbWVXaW5TaXplCi0gICAgICAgIGxhYmVsV2luU2l6ZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIGVudHJ5V2luSGVpZ2h0LnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR4PTEwLHBhZHk9NSkKLSAgICAgICAgbGFiZWxXaW5IZWlnaHRUaXRsZS5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPUUscGFkeT01KQotICAgICAgICBlbnRyeVdpbldpZHRoLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR4PTEwLHBhZHk9NSkKLSAgICAgICAgbGFiZWxXaW5XaWR0aFRpdGxlLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR5PTUpCisgICAgICAgIGxhYmVsV2luU2l6ZVRpdGxlLnBhY2soc2lkZT1MRUZULCBhbmNob3I9VywgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIGVudHJ5V2luSGVpZ2h0LnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPUUsIHBhZHg9MTAsIHBhZHk9NSkKKyAgICAgICAgbGFiZWxXaW5IZWlnaHRUaXRsZS5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1FLCBwYWR5PTUpCisgICAgICAgIGVudHJ5V2luV2lkdGgucGFjayhzaWRlPVJJR0hULCBhbmNob3I9RSwgcGFkeD0xMCwgcGFkeT01KQorICAgICAgICBsYWJlbFdpbldpZHRoVGl0bGUucGFjayhzaWRlPVJJR0hULCBhbmNob3I9RSwgcGFkeT01KQogICAgICAgICAjcGFyYWdyYXBoRm9ybWF0V2lkdGgKLSAgICAgICAgbGFiZWxQYXJhV2lkdGhUaXRsZS5wYWNrKHNpZGU9TEVGVCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQotICAgICAgICBlbnRyeVBhcmFXaWR0aC5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPUUscGFkeD0xMCxwYWR5PTUpCisgICAgICAgIGxhYmVsUGFyYVdpZHRoVGl0bGUucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgZW50cnlQYXJhV2lkdGgucGFjayhzaWRlPVJJR0hULCBhbmNob3I9RSwgcGFkeD0xMCwgcGFkeT01KQogICAgICAgICAjZnJhbWVIZWxwCi0gICAgICAgIGZyYW1lSGVscExpc3RCdXR0b25zLnBhY2soc2lkZT1SSUdIVCxwYWR4PTUscGFkeT01LGZpbGw9WSkKLSAgICAgICAgZnJhbWVIZWxwTGlzdC5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZXhwYW5kPVRSVUUsZmlsbD1CT1RIKQotICAgICAgICBzY3JvbGxIZWxwTGlzdC5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPVcsZmlsbD1ZKQotICAgICAgICBzZWxmLmxpc3RIZWxwLnBhY2soc2lkZT1MRUZULGFuY2hvcj1FLGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKLSAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEVkaXQucGFjayhzaWRlPVRPUCxhbmNob3I9VyxwYWR5PTUpCi0gICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RBZGQucGFjayhzaWRlPVRPUCxhbmNob3I9VykKLSAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdFJlbW92ZS5wYWNrKHNpZGU9VE9QLGFuY2hvcj1XLHBhZHk9NSkKKyAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnMucGFjayhzaWRlPVJJR0hULCBwYWR4PTUsIHBhZHk9NSwgZmlsbD1ZKQorICAgICAgICBmcmFtZUhlbHBMaXN0LnBhY2soc2lkZT1UT1AsIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQorICAgICAgICBzY3JvbGxIZWxwTGlzdC5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1XLCBmaWxsPVkpCisgICAgICAgIHNlbGYubGlzdEhlbHAucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1FLCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQorICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0RWRpdC5wYWNrKHNpZGU9VE9QLCBhbmNob3I9VywgcGFkeT01KQorICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0QWRkLnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XKQorICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0UmVtb3ZlLnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XLCBwYWR5PTUpCiAgICAgICAgIHJldHVybiBmcmFtZQogCiAgICAgZGVmIEF0dGFjaFZhckNhbGxiYWNrcyhzZWxmKToKLSAgICAgICAgc2VsZi5mb250U2l6ZS50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2ZvbnRTaXplKQotICAgICAgICBzZWxmLmZvbnROYW1lLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfZm9udE5hbWUpCi0gICAgICAgIHNlbGYuZm9udEJvbGQudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9mb250Qm9sZCkKLSAgICAgICAgc2VsZi5zcGFjZU51bS50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX3NwYWNlTnVtKQotICAgICAgICBzZWxmLmNvbG91ci50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2NvbG91cikKLSAgICAgICAgc2VsZi5idWlsdGluVGhlbWUudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9idWlsdGluVGhlbWUpCi0gICAgICAgIHNlbGYuY3VzdG9tVGhlbWUudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9jdXN0b21UaGVtZSkKLSAgICAgICAgc2VsZi50aGVtZUlzQnVpbHRpbi50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX3RoZW1lSXNCdWlsdGluKQotICAgICAgICBzZWxmLmhpZ2hsaWdodFRhcmdldC50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2hpZ2hsaWdodFRhcmdldCkKLSAgICAgICAgc2VsZi5rZXlCaW5kaW5nLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfa2V5QmluZGluZykKLSAgICAgICAgc2VsZi5idWlsdGluS2V5cy50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2J1aWx0aW5LZXlzKQotICAgICAgICBzZWxmLmN1c3RvbUtleXMudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9jdXN0b21LZXlzKQotICAgICAgICBzZWxmLmtleXNBcmVCdWlsdGluLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfa2V5c0FyZUJ1aWx0aW4pCi0gICAgICAgIHNlbGYud2luV2lkdGgudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF93aW5XaWR0aCkKLSAgICAgICAgc2VsZi53aW5IZWlnaHQudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF93aW5IZWlnaHQpCi0gICAgICAgIHNlbGYucGFyYVdpZHRoLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfcGFyYVdpZHRoKQotICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0LnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfc3RhcnR1cEVkaXQpCi0gICAgICAgIHNlbGYuYXV0b1NhdmUudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9hdXRvU2F2ZSkKLSAgICAgICAgc2VsZi5lbmNvZGluZy50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2VuY29kaW5nKQorICAgICAgICBzZWxmLmZvbnRTaXplLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2ZvbnRTaXplKQorICAgICAgICBzZWxmLmZvbnROYW1lLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2ZvbnROYW1lKQorICAgICAgICBzZWxmLmZvbnRCb2xkLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2ZvbnRCb2xkKQorICAgICAgICBzZWxmLnNwYWNlTnVtLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX3NwYWNlTnVtKQorICAgICAgICBzZWxmLmNvbG91ci50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9jb2xvdXIpCisgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2J1aWx0aW5UaGVtZSkKKyAgICAgICAgc2VsZi5jdXN0b21UaGVtZS50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9jdXN0b21UaGVtZSkKKyAgICAgICAgc2VsZi50aGVtZUlzQnVpbHRpbi50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF90aGVtZUlzQnVpbHRpbikKKyAgICAgICAgc2VsZi5oaWdobGlnaHRUYXJnZXQudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfaGlnaGxpZ2h0VGFyZ2V0KQorICAgICAgICBzZWxmLmtleUJpbmRpbmcudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfa2V5QmluZGluZykKKyAgICAgICAgc2VsZi5idWlsdGluS2V5cy50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9idWlsdGluS2V5cykKKyAgICAgICAgc2VsZi5jdXN0b21LZXlzLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbUtleXMpCisgICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW4udHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfa2V5c0FyZUJ1aWx0aW4pCisgICAgICAgIHNlbGYud2luV2lkdGgudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfd2luV2lkdGgpCisgICAgICAgIHNlbGYud2luSGVpZ2h0LnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX3dpbkhlaWdodCkKKyAgICAgICAgc2VsZi5wYXJhV2lkdGgudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfcGFyYVdpZHRoKQorICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0LnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX3N0YXJ0dXBFZGl0KQorICAgICAgICBzZWxmLmF1dG9TYXZlLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2F1dG9TYXZlKQorICAgICAgICBzZWxmLmVuY29kaW5nLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2VuY29kaW5nKQogCi0gICAgZGVmIFZhckNoYW5nZWRfZm9udFNpemUoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5mb250U2l6ZS5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udC1zaXplJyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF9mb250U2l6ZShzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmZvbnRTaXplLmdldCgpCisgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnRWRpdG9yV2luZG93JywgJ2ZvbnQtc2l6ZScsIHZhbHVlKQogCi0gICAgZGVmIFZhckNoYW5nZWRfZm9udE5hbWUoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5mb250TmFtZS5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfZm9udE5hbWUoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5mb250TmFtZS5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250JywgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9mb250Qm9sZChzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmZvbnRCb2xkLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdmb250LWJvbGQnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX2ZvbnRCb2xkKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuZm9udEJvbGQuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnZm9udC1ib2xkJywgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9zcGFjZU51bShzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLnNwYWNlTnVtLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdJbmRlbnQnLCdudW0tc3BhY2VzJyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF9zcGFjZU51bShzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLnNwYWNlTnVtLmdldCgpCisgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnSW5kZW50JywgJ251bS1zcGFjZXMnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2NvbG91cihzZWxmLCpwYXJhbXMpOgorICAgIGRlZiBWYXJDaGFuZ2VkX2NvbG91cihzZWxmLCAqcGFyYW1zKToKICAgICAgICAgc2VsZi5Pbk5ld0NvbG91clNldCgpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9idWlsdGluVGhlbWUoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ1RoZW1lJywnbmFtZScsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfYnVpbHRpblRoZW1lKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuYnVpbHRpblRoZW1lLmdldCgpCisgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnVGhlbWUnLCAnbmFtZScsIHZhbHVlKQogICAgICAgICBzZWxmLlBhaW50VGhlbWVTYW1wbGUoKQogCi0gICAgZGVmIFZhckNoYW5nZWRfY3VzdG9tVGhlbWUoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5jdXN0b21UaGVtZS5nZXQoKQorICAgIGRlZiBWYXJDaGFuZ2VkX2N1c3RvbVRoZW1lKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKICAgICAgICAgaWYgdmFsdWUgIT0gJy0gbm8gY3VzdG9tIHRoZW1lcyAtJzoKLSAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdUaGVtZScsJ25hbWUnLHZhbHVlKQorICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdUaGVtZScsICduYW1lJywgdmFsdWUpCiAgICAgICAgICAgICBzZWxmLlBhaW50VGhlbWVTYW1wbGUoKQogCi0gICAgZGVmIFZhckNoYW5nZWRfdGhlbWVJc0J1aWx0aW4oc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnVGhlbWUnLCdkZWZhdWx0Jyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF90aGVtZUlzQnVpbHRpbihzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLnRoZW1lSXNCdWlsdGluLmdldCgpCisgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnVGhlbWUnLCAnZGVmYXVsdCcsIHZhbHVlKQogICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgIHNlbGYuVmFyQ2hhbmdlZF9idWlsdGluVGhlbWUoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbVRoZW1lKCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2hpZ2hsaWdodFRhcmdldChzZWxmLCpwYXJhbXMpOgorICAgIGRlZiBWYXJDaGFuZ2VkX2hpZ2hsaWdodFRhcmdldChzZWxmLCAqcGFyYW1zKToKICAgICAgICAgc2VsZi5TZXRIaWdobGlnaHRUYXJnZXQoKQogCi0gICAgZGVmIFZhckNoYW5nZWRfa2V5QmluZGluZyhzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmtleUJpbmRpbmcuZ2V0KCkKLSAgICAgICAga2V5U2V0PXNlbGYuY3VzdG9tS2V5cy5nZXQoKQotICAgICAgICBldmVudD1zZWxmLmxpc3RCaW5kaW5ncy5nZXQoQU5DSE9SKS5zcGxpdCgpWzBdCisgICAgZGVmIFZhckNoYW5nZWRfa2V5QmluZGluZyhzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmtleUJpbmRpbmcuZ2V0KCkKKyAgICAgICAga2V5U2V0ID0gc2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgICAgIGV2ZW50ID0gc2VsZi5saXN0QmluZGluZ3MuZ2V0KEFOQ0hPUikuc3BsaXQoKVswXQogICAgICAgICBpZiBpZGxlQ29uZi5Jc0NvcmVCaW5kaW5nKGV2ZW50KToKICAgICAgICAgICAgICN0aGlzIGlzIGEgY29yZSBrZXliaW5kaW5nCi0gICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdrZXlzJyxrZXlTZXQsZXZlbnQsdmFsdWUpCisgICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdrZXlzJywga2V5U2V0LCBldmVudCwgdmFsdWUpCiAgICAgICAgIGVsc2U6ICN0aGlzIGlzIGFuIGV4dGVuc2lvbiBrZXkgYmluZGluZwotICAgICAgICAgICAgZXh0TmFtZT1pZGxlQ29uZi5HZXRFeHRuTmFtZUZvckV2ZW50KGV2ZW50KQotICAgICAgICAgICAgZXh0S2V5YmluZFNlY3Rpb249ZXh0TmFtZSsnX2NmZ0JpbmRpbmdzJwotICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnZXh0ZW5zaW9ucycsZXh0S2V5YmluZFNlY3Rpb24sZXZlbnQsdmFsdWUpCisgICAgICAgICAgICBleHROYW1lID0gaWRsZUNvbmYuR2V0RXh0bk5hbWVGb3JFdmVudChldmVudCkKKyAgICAgICAgICAgIGV4dEtleWJpbmRTZWN0aW9uID0gZXh0TmFtZSArICdfY2ZnQmluZGluZ3MnCisgICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdleHRlbnNpb25zJywgZXh0S2V5YmluZFNlY3Rpb24sIGV2ZW50LCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2J1aWx0aW5LZXlzKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuYnVpbHRpbktleXMuZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0tleXMnLCduYW1lJyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF9idWlsdGluS2V5cyhzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmJ1aWx0aW5LZXlzLmdldCgpCisgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnS2V5cycsICduYW1lJywgdmFsdWUpCiAgICAgICAgIHNlbGYuTG9hZEtleXNMaXN0KHZhbHVlKQogCi0gICAgZGVmIFZhckNoYW5nZWRfY3VzdG9tS2V5cyhzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmN1c3RvbUtleXMuZ2V0KCkKKyAgICBkZWYgVmFyQ2hhbmdlZF9jdXN0b21LZXlzKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuY3VzdG9tS2V5cy5nZXQoKQogICAgICAgICBpZiB2YWx1ZSAhPSAnLSBubyBjdXN0b20ga2V5cyAtJzoKLSAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdLZXlzJywnbmFtZScsdmFsdWUpCisgICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0tleXMnLCAnbmFtZScsIHZhbHVlKQogICAgICAgICAgICAgc2VsZi5Mb2FkS2V5c0xpc3QodmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9rZXlzQXJlQnVpbHRpbihzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmtleXNBcmVCdWlsdGluLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdLZXlzJywnZGVmYXVsdCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfa2V5c0FyZUJ1aWx0aW4oc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5rZXlzQXJlQnVpbHRpbi5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0tleXMnLCAnZGVmYXVsdCcsIHZhbHVlKQogICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgIHNlbGYuVmFyQ2hhbmdlZF9idWlsdGluS2V5cygpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLlZhckNoYW5nZWRfY3VzdG9tS2V5cygpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF93aW5XaWR0aChzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLndpbldpZHRoLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCd3aWR0aCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfd2luV2lkdGgoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi53aW5XaWR0aC5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICd3aWR0aCcsIHZhbHVlKQogCi0gICAgZGVmIFZhckNoYW5nZWRfd2luSGVpZ2h0KHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYud2luSGVpZ2h0LmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdoZWlnaHQnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX3dpbkhlaWdodChzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLndpbkhlaWdodC5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdoZWlnaHQnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX3BhcmFXaWR0aChzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLnBhcmFXaWR0aC5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRm9ybWF0UGFyYWdyYXBoJywncGFyYWdyYXBoJyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF9wYXJhV2lkdGgoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5wYXJhV2lkdGguZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdGb3JtYXRQYXJhZ3JhcGgnLCAncGFyYWdyYXBoJywgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9zdGFydHVwRWRpdChzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLnN0YXJ0dXBFZGl0LmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdHZW5lcmFsJywnZWRpdG9yLW9uLXN0YXJ0dXAnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX3N0YXJ0dXBFZGl0KHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuc3RhcnR1cEVkaXQuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdHZW5lcmFsJywgJ2VkaXRvci1vbi1zdGFydHVwJywgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9hdXRvU2F2ZShzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmF1dG9TYXZlLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdHZW5lcmFsJywnYXV0b3NhdmUnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX2F1dG9TYXZlKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuYXV0b1NhdmUuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdHZW5lcmFsJywgJ2F1dG9zYXZlJywgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9lbmNvZGluZyhzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmVuY29kaW5nLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdlbmNvZGluZycsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfZW5jb2Rpbmcoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5lbmNvZGluZy5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdlbmNvZGluZycsIHZhbHVlKQogCiAgICAgZGVmIFJlc2V0Q2hhbmdlZEl0ZW1zKHNlbGYpOgogICAgICAgICAjV2hlbiBhbnkgY29uZmlnIGl0ZW0gaXMgY2hhbmdlZCBpbiB0aGlzIGRpYWxvZywgYW4gZW50cnkKQEAgLTU0OCwyNCArNTk2LDI1IEBACiAgICAgICAgICNkaWN0aW9uYXJ5LiBUaGUga2V5IHNob3VsZCBiZSB0aGUgY29uZmlnIGZpbGUgc2VjdGlvbiBuYW1lIGFuZCB0aGUKICAgICAgICAgI3ZhbHVlIGEgZGljdGlvbmFyeSwgd2hvc2Uga2V5OnZhbHVlIHBhaXJzIGFyZSBpdGVtPXZhbHVlIHBhaXJzIGZvcgogICAgICAgICAjdGhhdCBjb25maWcgZmlsZSBzZWN0aW9uLgotICAgICAgICBzZWxmLmNoYW5nZWRJdGVtcz17J21haW4nOnt9LCdoaWdobGlnaHQnOnt9LCdrZXlzJzp7fSwnZXh0ZW5zaW9ucyc6e319CisgICAgICAgIHNlbGYuY2hhbmdlZEl0ZW1zID0geydtYWluJzp7fSwgJ2hpZ2hsaWdodCc6e30sICdrZXlzJzp7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dGVuc2lvbnMnOnt9fQogCi0gICAgZGVmIEFkZENoYW5nZWRJdGVtKHNlbGYsdHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgotICAgICAgICB2YWx1ZT1zdHIodmFsdWUpICNtYWtlIHN1cmUgd2UgdXNlIGEgc3RyaW5nCi0gICAgICAgIGlmIHNlY3Rpb24gbm90IGluIHNlbGYuY2hhbmdlZEl0ZW1zW3R5cGVdOgotICAgICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV1bc2VjdGlvbl09e30KLSAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV1bc2VjdGlvbl1baXRlbV09dmFsdWUKKyAgICBkZWYgQWRkQ2hhbmdlZEl0ZW0oc2VsZiwgdHlwLCBzZWN0aW9uLCBpdGVtLCB2YWx1ZSk6CisgICAgICAgIHZhbHVlID0gc3RyKHZhbHVlKSAjbWFrZSBzdXJlIHdlIHVzZSBhIHN0cmluZworICAgICAgICBpZiBzZWN0aW9uIG5vdCBpbiBzZWxmLmNoYW5nZWRJdGVtc1t0eXBdOgorICAgICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwXVtzZWN0aW9uXSA9IHt9CisgICAgICAgIHNlbGYuY2hhbmdlZEl0ZW1zW3R5cF1bc2VjdGlvbl1baXRlbV0gPSB2YWx1ZQogCiAgICAgZGVmIEdldERlZmF1bHRJdGVtcyhzZWxmKToKLSAgICAgICAgZEl0ZW1zPXsnbWFpbic6e30sJ2hpZ2hsaWdodCc6e30sJ2tleXMnOnt9LCdleHRlbnNpb25zJzp7fX0KKyAgICAgICAgZEl0ZW1zPXsnbWFpbic6e30sICdoaWdobGlnaHQnOnt9LCAna2V5cyc6e30sICdleHRlbnNpb25zJzp7fX0KICAgICAgICAgZm9yIGNvbmZpZ1R5cGUgaW4gZEl0ZW1zOgotICAgICAgICAgICAgc2VjdGlvbnM9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLGNvbmZpZ1R5cGUpCisgICAgICAgICAgICBzZWN0aW9ucyA9IGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywgY29uZmlnVHlwZSkKICAgICAgICAgICAgIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zOgotICAgICAgICAgICAgICAgIGRJdGVtc1tjb25maWdUeXBlXVtzZWN0aW9uXT17fQotICAgICAgICAgICAgICAgIG9wdGlvbnM9aWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXRPcHRpb25MaXN0KHNlY3Rpb24pCisgICAgICAgICAgICAgICAgZEl0ZW1zW2NvbmZpZ1R5cGVdW3NlY3Rpb25dID0ge30KKyAgICAgICAgICAgICAgICBvcHRpb25zID0gaWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXRPcHRpb25MaXN0KHNlY3Rpb24pCiAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgotICAgICAgICAgICAgICAgICAgICBkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1bb3B0aW9uXT0oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXQoc2VjdGlvbixvcHRpb24pKQorICAgICAgICAgICAgICAgICAgICBkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1bb3B0aW9uXSA9ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLkdldChzZWN0aW9uLCBvcHRpb24pKQogICAgICAgICByZXR1cm4gZEl0ZW1zCiAKICAgICBkZWYgU2V0VGhlbWVUeXBlKHNlbGYpOgpAQCAtNTkxLDI2ICs2NDAsMjYgQEAKICAgICAgICAgICAgIHNlbGYuYnV0dG9uRGVsZXRlQ3VzdG9tS2V5cy5jb25maWcoc3RhdGU9Tk9STUFMKQogCiAgICAgZGVmIEdldE5ld0tleXMoc2VsZik6Ci0gICAgICAgIGxpc3RJbmRleD1zZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCi0gICAgICAgIGJpbmRpbmc9c2VsZi5saXN0QmluZGluZ3MuZ2V0KGxpc3RJbmRleCkKLSAgICAgICAgYmluZE5hbWU9YmluZGluZy5zcGxpdCgpWzBdICNmaXJzdCBwYXJ0LCB1cCB0byBmaXJzdCBzcGFjZQorICAgICAgICBsaXN0SW5kZXggPSBzZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCisgICAgICAgIGJpbmRpbmcgPSBzZWxmLmxpc3RCaW5kaW5ncy5nZXQobGlzdEluZGV4KQorICAgICAgICBiaW5kTmFtZSA9IGJpbmRpbmcuc3BsaXQoKVswXSAjZmlyc3QgcGFydCwgdXAgdG8gZmlyc3Qgc3BhY2UKICAgICAgICAgaWYgc2VsZi5rZXlzQXJlQnVpbHRpbi5nZXQoKToKLSAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lPXNlbGYuYnVpbHRpbktleXMuZ2V0KCkKKyAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lID0gc2VsZi5idWlsdGluS2V5cy5nZXQoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgY3VycmVudEtleVNldE5hbWU9c2VsZi5jdXN0b21LZXlzLmdldCgpCi0gICAgICAgIGN1cnJlbnRCaW5kaW5ncz1pZGxlQ29uZi5HZXRDdXJyZW50S2V5U2V0KCkKKyAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lID0gc2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgICAgIGN1cnJlbnRCaW5kaW5ncyA9IGlkbGVDb25mLkdldEN1cnJlbnRLZXlTZXQoKQogICAgICAgICBpZiBjdXJyZW50S2V5U2V0TmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddOiAjdW5zYXZlZCBjaGFuZ2VzCi0gICAgICAgICAgICBrZXlTZXRDaGFuZ2VzPXNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11bY3VycmVudEtleVNldE5hbWVdCisgICAgICAgICAgICBrZXlTZXRDaGFuZ2VzID0gc2VsZi5jaGFuZ2VkSXRlbXNbJ2tleXMnXVtjdXJyZW50S2V5U2V0TmFtZV0KICAgICAgICAgICAgIGZvciBldmVudCBpbiBrZXlTZXRDaGFuZ2VzOgotICAgICAgICAgICAgICAgIGN1cnJlbnRCaW5kaW5nc1tldmVudF09a2V5U2V0Q2hhbmdlc1tldmVudF0uc3BsaXQoKQorICAgICAgICAgICAgICAgIGN1cnJlbnRCaW5kaW5nc1tldmVudF0gPSBrZXlTZXRDaGFuZ2VzW2V2ZW50XS5zcGxpdCgpCiAgICAgICAgIGN1cnJlbnRLZXlTZXF1ZW5jZXMgPSBsaXN0KGN1cnJlbnRCaW5kaW5ncy52YWx1ZXMoKSkKLSAgICAgICAgbmV3S2V5cz1HZXRLZXlzRGlhbG9nKHNlbGYsJ0dldCBOZXcgS2V5cycsYmluZE5hbWUsCisgICAgICAgIG5ld0tleXMgPSBHZXRLZXlzRGlhbG9nKHNlbGYsICdHZXQgTmV3IEtleXMnLCBiaW5kTmFtZSwKICAgICAgICAgICAgICAgICBjdXJyZW50S2V5U2VxdWVuY2VzKS5yZXN1bHQKICAgICAgICAgaWYgbmV3S2V5czogI25ldyBrZXlzIHdlcmUgc3BlY2lmaWVkCiAgICAgICAgICAgICBpZiBzZWxmLmtleXNBcmVCdWlsdGluLmdldCgpOiAjY3VycmVudCBrZXkgc2V0IGlzIGEgYnVpbHQtaW4KLSAgICAgICAgICAgICAgICBtZXNzYWdlPSgnWW91ciBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgQ3VzdG9tIEtleSBTZXQuICcrCi0gICAgICAgICAgICAgICAgICAgICAgICAnRW50ZXIgYSBuYW1lIGZvciB5b3VyIG5ldyBDdXN0b20gS2V5IFNldCBiZWxvdy4nKQotICAgICAgICAgICAgICAgIG5ld0tleVNldD1zZWxmLkdldE5ld0tleXNOYW1lKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICgnWW91ciBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgQ3VzdG9tIEtleSBTZXQuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBFbnRlciBhIG5hbWUgZm9yIHlvdXIgbmV3IEN1c3RvbSBLZXkgU2V0IGJlbG93LicpCisgICAgICAgICAgICAgICAgbmV3S2V5U2V0ID0gc2VsZi5HZXROZXdLZXlzTmFtZShtZXNzYWdlKQogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdLZXlTZXQ6ICN1c2VyIGNhbmNlbGxlZCBjdXN0b20ga2V5IHNldCBjcmVhdGlvbgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3Rfc2V0KGxpc3RJbmRleCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3Muc2VsZWN0X2FuY2hvcihsaXN0SW5kZXgpCkBAIC02MTgsNyArNjY3LDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOiAjY3JlYXRlIG5ldyBjdXN0b20ga2V5IHNldCBiYXNlZCBvbiBwcmV2aW91c2x5IGFjdGl2ZSBrZXkgc2V0CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ3JlYXRlTmV3S2V5U2V0KG5ld0tleVNldCkKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmRlbGV0ZShsaXN0SW5kZXgpCi0gICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5pbnNlcnQobGlzdEluZGV4LGJpbmROYW1lKycgLSAnK25ld0tleXMpCisgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5pbnNlcnQobGlzdEluZGV4LCBiaW5kTmFtZSsnIC0gJytuZXdLZXlzKQogICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3Muc2VsZWN0X3NldChsaXN0SW5kZXgpCiAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3RfYW5jaG9yKGxpc3RJbmRleCkKICAgICAgICAgICAgIHNlbGYua2V5QmluZGluZy5zZXQobmV3S2V5cykKQEAgLTYyNiw2NSArNjc1LDY1IEBACiAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3Rfc2V0KGxpc3RJbmRleCkKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLnNlbGVjdF9hbmNob3IobGlzdEluZGV4KQogCi0gICAgZGVmIEdldE5ld0tleXNOYW1lKHNlbGYsbWVzc2FnZSk6Ci0gICAgICAgIHVzZWROYW1lcz0oaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdrZXlzJykrCi0gICAgICAgICAgICAgICAgaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdrZXlzJykpCi0gICAgICAgIG5ld0tleVNldD1HZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhzZWxmLCdOZXcgQ3VzdG9tIEtleSBTZXQnLAotICAgICAgICAgICAgICAgIG1lc3NhZ2UsdXNlZE5hbWVzKS5yZXN1bHQKKyAgICBkZWYgR2V0TmV3S2V5c05hbWUoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHVzZWROYW1lcyA9IChpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdrZXlzJykgKworICAgICAgICAgICAgICAgIGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywgJ2tleXMnKSkKKyAgICAgICAgbmV3S2V5U2V0ID0gR2V0Q2ZnU2VjdGlvbk5hbWVEaWFsb2coCisgICAgICAgICAgICAgICAgc2VsZiwgJ05ldyBDdXN0b20gS2V5IFNldCcsIG1lc3NhZ2UsIHVzZWROYW1lcykucmVzdWx0CiAgICAgICAgIHJldHVybiBuZXdLZXlTZXQKIAogICAgIGRlZiBTYXZlQXNOZXdLZXlTZXQoc2VsZik6Ci0gICAgICAgIG5ld0tleXNOYW1lPXNlbGYuR2V0TmV3S2V5c05hbWUoJ05ldyBLZXkgU2V0IE5hbWU6JykKKyAgICAgICAgbmV3S2V5c05hbWUgPSBzZWxmLkdldE5ld0tleXNOYW1lKCdOZXcgS2V5IFNldCBOYW1lOicpCiAgICAgICAgIGlmIG5ld0tleXNOYW1lOgogICAgICAgICAgICAgc2VsZi5DcmVhdGVOZXdLZXlTZXQobmV3S2V5c05hbWUpCiAKLSAgICBkZWYgS2V5QmluZGluZ1NlbGVjdGVkKHNlbGYsZXZlbnQpOgorICAgIGRlZiBLZXlCaW5kaW5nU2VsZWN0ZWQoc2VsZiwgZXZlbnQpOgogICAgICAgICBzZWxmLmJ1dHRvbk5ld0tleXMuY29uZmlnKHN0YXRlPU5PUk1BTCkKIAotICAgIGRlZiBDcmVhdGVOZXdLZXlTZXQoc2VsZixuZXdLZXlTZXROYW1lKToKKyAgICBkZWYgQ3JlYXRlTmV3S2V5U2V0KHNlbGYsIG5ld0tleVNldE5hbWUpOgogICAgICAgICAjY3JlYXRlcyBuZXcgY3VzdG9tIGtleSBzZXQgYmFzZWQgb24gdGhlIHByZXZpb3VzbHkgYWN0aXZlIGtleSBzZXQsCiAgICAgICAgICNhbmQgbWFrZXMgdGhlIG5ldyBrZXkgc2V0IGFjdGl2ZQogICAgICAgICBpZiBzZWxmLmtleXNBcmVCdWlsdGluLmdldCgpOgotICAgICAgICAgICAgcHJldktleVNldE5hbWU9c2VsZi5idWlsdGluS2V5cy5nZXQoKQorICAgICAgICAgICAgcHJldktleVNldE5hbWUgPSBzZWxmLmJ1aWx0aW5LZXlzLmdldCgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmV2S2V5U2V0TmFtZT1zZWxmLmN1c3RvbUtleXMuZ2V0KCkKLSAgICAgICAgcHJldktleXM9aWRsZUNvbmYuR2V0Q29yZUtleXMocHJldktleVNldE5hbWUpCi0gICAgICAgIG5ld0tleXM9e30KKyAgICAgICAgICAgIHByZXZLZXlTZXROYW1lID0gc2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgICAgIHByZXZLZXlzID0gaWRsZUNvbmYuR2V0Q29yZUtleXMocHJldktleVNldE5hbWUpCisgICAgICAgIG5ld0tleXMgPSB7fQogICAgICAgICBmb3IgZXZlbnQgaW4gcHJldktleXM6ICNhZGQga2V5IHNldCB0byBjaGFuZ2VkIGl0ZW1zCi0gICAgICAgICAgICBldmVudE5hbWU9ZXZlbnRbMjotMl0gI3RyaW0gb2ZmIHRoZSBhbmdsZSBicmFja2V0cwotICAgICAgICAgICAgYmluZGluZz0nICcuam9pbihwcmV2S2V5c1tldmVudF0pCi0gICAgICAgICAgICBuZXdLZXlzW2V2ZW50TmFtZV09YmluZGluZworICAgICAgICAgICAgZXZlbnROYW1lID0gZXZlbnRbMjotMl0gI3RyaW0gb2ZmIHRoZSBhbmdsZSBicmFja2V0cworICAgICAgICAgICAgYmluZGluZyA9ICcgJy5qb2luKHByZXZLZXlzW2V2ZW50XSkKKyAgICAgICAgICAgIG5ld0tleXNbZXZlbnROYW1lXSA9IGJpbmRpbmcKICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHByZXYga2V5IHNldAogICAgICAgICBpZiBwcmV2S2V5U2V0TmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddOgotICAgICAgICAgICAga2V5U2V0Q2hhbmdlcz1zZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW3ByZXZLZXlTZXROYW1lXQorICAgICAgICAgICAga2V5U2V0Q2hhbmdlcyA9IHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11bcHJldktleVNldE5hbWVdCiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4ga2V5U2V0Q2hhbmdlczoKLSAgICAgICAgICAgICAgICBuZXdLZXlzW2V2ZW50XT1rZXlTZXRDaGFuZ2VzW2V2ZW50XQorICAgICAgICAgICAgICAgIG5ld0tleXNbZXZlbnRdID0ga2V5U2V0Q2hhbmdlc1tldmVudF0KICAgICAgICAgI3NhdmUgdGhlIG5ldyB0aGVtZQotICAgICAgICBzZWxmLlNhdmVOZXdLZXlTZXQobmV3S2V5U2V0TmFtZSxuZXdLZXlzKQorICAgICAgICBzZWxmLlNhdmVOZXdLZXlTZXQobmV3S2V5U2V0TmFtZSwgbmV3S2V5cykKICAgICAgICAgI2NoYW5nZSBndWkgb3ZlciB0byB0aGUgbmV3IGtleSBzZXQKLSAgICAgICAgY3VzdG9tS2V5TGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsJ2tleXMnKQorICAgICAgICBjdXN0b21LZXlMaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAna2V5cycpCiAgICAgICAgIGN1c3RvbUtleUxpc3Quc29ydCgpCi0gICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShjdXN0b21LZXlMaXN0LG5ld0tleVNldE5hbWUpCisgICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShjdXN0b21LZXlMaXN0LCBuZXdLZXlTZXROYW1lKQogICAgICAgICBzZWxmLmtleXNBcmVCdWlsdGluLnNldCgwKQogICAgICAgICBzZWxmLlNldEtleXNUeXBlKCkKIAotICAgIGRlZiBMb2FkS2V5c0xpc3Qoc2VsZixrZXlTZXROYW1lKToKLSAgICAgICAgcmVzZWxlY3Q9MAotICAgICAgICBuZXdLZXlTZXQ9MAorICAgIGRlZiBMb2FkS2V5c0xpc3Qoc2VsZiwga2V5U2V0TmFtZSk6CisgICAgICAgIHJlc2VsZWN0ID0gMAorICAgICAgICBuZXdLZXlTZXQgPSAwCiAgICAgICAgIGlmIHNlbGYubGlzdEJpbmRpbmdzLmN1cnNlbGVjdGlvbigpOgotICAgICAgICAgICAgcmVzZWxlY3Q9MQotICAgICAgICAgICAgbGlzdEluZGV4PXNlbGYubGlzdEJpbmRpbmdzLmluZGV4KEFOQ0hPUikKLSAgICAgICAga2V5U2V0PWlkbGVDb25mLkdldEtleVNldChrZXlTZXROYW1lKQorICAgICAgICAgICAgcmVzZWxlY3QgPSAxCisgICAgICAgICAgICBsaXN0SW5kZXggPSBzZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCisgICAgICAgIGtleVNldCA9IGlkbGVDb25mLkdldEtleVNldChrZXlTZXROYW1lKQogICAgICAgICBiaW5kTmFtZXMgPSBsaXN0KGtleVNldC5rZXlzKCkpCiAgICAgICAgIGJpbmROYW1lcy5zb3J0KCkKLSAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuZGVsZXRlKDAsRU5EKQorICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5kZWxldGUoMCwgRU5EKQogICAgICAgICBmb3IgYmluZE5hbWUgaW4gYmluZE5hbWVzOgotICAgICAgICAgICAga2V5PScgJy5qb2luKGtleVNldFtiaW5kTmFtZV0pICNtYWtlIGtleShzKSBpbnRvIGEgc3RyaW5nCi0gICAgICAgICAgICBiaW5kTmFtZT1iaW5kTmFtZVsyOi0yXSAjdHJpbSBvZmYgdGhlIGFuZ2xlIGJyYWNrZXRzCisgICAgICAgICAgICBrZXkgPSAnICcuam9pbihrZXlTZXRbYmluZE5hbWVdKSAjbWFrZSBrZXkocykgaW50byBhIHN0cmluZworICAgICAgICAgICAgYmluZE5hbWUgPSBiaW5kTmFtZVsyOi0yXSAjdHJpbSBvZmYgdGhlIGFuZ2xlIGJyYWNrZXRzCiAgICAgICAgICAgICBpZiBrZXlTZXROYW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ106CiAgICAgICAgICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMga2V5IHNldAogICAgICAgICAgICAgICAgIGlmIGJpbmROYW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11ba2V5U2V0TmFtZV06Ci0gICAgICAgICAgICAgICAgICAgIGtleT1zZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW2tleVNldE5hbWVdW2JpbmROYW1lXQorICAgICAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW2tleVNldE5hbWVdW2JpbmROYW1lXQogICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuaW5zZXJ0KEVORCwgYmluZE5hbWUrJyAtICcra2V5KQogICAgICAgICBpZiByZXNlbGVjdDoKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLnNlZShsaXN0SW5kZXgpCkBAIC02OTMsOSArNzQyLDkgQEAKIAogICAgIGRlZiBEZWxldGVDdXN0b21LZXlzKHNlbGYpOgogICAgICAgICBrZXlTZXROYW1lPXNlbGYuY3VzdG9tS2V5cy5nZXQoKQotICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKCdEZWxldGUgS2V5IFNldCcsJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lzaCAnKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBkZWxldGUgdGhlIGtleSBzZXQgJXIgPycgJSAoa2V5U2V0TmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYpOgorICAgICAgICBkZWxtc2cgPSAnQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGRlbGV0ZSB0aGUga2V5IHNldCAlciA/JworICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKAorICAgICAgICAgICAgICAgICdEZWxldGUgS2V5IFNldCcsICBkZWxtc2cgJSBrZXlTZXROYW1lLCBwYXJlbnQ9c2VsZik6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgI3JlbW92ZSBrZXkgc2V0IGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2tleXMnXS5yZW1vdmVfc2VjdGlvbihrZXlTZXROYW1lKQpAQCAtNzA0LDI1ICs3NTMsMjUgQEAKICAgICAgICAgI3dyaXRlIGNoYW5nZXMKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1sna2V5cyddLlNhdmUoKQogICAgICAgICAjcmVsb2FkIHVzZXIga2V5IHNldCBsaXN0Ci0gICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywna2V5cycpCisgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAna2V5cycpCiAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQogICAgICAgICBpZiBub3QgaXRlbUxpc3Q6CiAgICAgICAgICAgICBzZWxmLnJhZGlvS2V5c0N1c3RvbS5jb25maWcoc3RhdGU9RElTQUJMRUQpCi0gICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsJy0gbm8gY3VzdG9tIGtleXMgLScpCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsICctIG5vIGN1c3RvbSBrZXlzIC0nKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGl0ZW1MaXN0WzBdKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgI3JldmVydCB0byBkZWZhdWx0IGtleSBzZXQKLSAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsJ2RlZmF1bHQnKSkKLSAgICAgICAgc2VsZi5idWlsdGluS2V5cy5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsJ25hbWUnKSkKKyAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsICdkZWZhdWx0JykpCisgICAgICAgIHNlbGYuYnVpbHRpbktleXMuc2V0KGlkbGVDb25mLmRlZmF1bHRDZmdbJ21haW4nXS5HZXQoJ0tleXMnLCAnbmFtZScpKQogICAgICAgICAjdXNlciBjYW4ndCBiYWNrIG91dCBvZiB0aGVzZSBjaGFuZ2VzLCB0aGV5IG11c3QgYmUgYXBwbGllZCBub3cKICAgICAgICAgc2VsZi5BcHBseSgpCiAgICAgICAgIHNlbGYuU2V0S2V5c1R5cGUoKQogCiAgICAgZGVmIERlbGV0ZUN1c3RvbVRoZW1lKHNlbGYpOgotICAgICAgICB0aGVtZU5hbWU9c2VsZi5jdXN0b21UaGVtZS5nZXQoKQotICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKCdEZWxldGUgVGhlbWUnLCdBcmUgeW91IHN1cmUgeW91IHdpc2ggJysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gZGVsZXRlIHRoZSB0aGVtZSAlciA/JyAlICh0aGVtZU5hbWUsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZik6CisgICAgICAgIHRoZW1lTmFtZSA9IHNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKKyAgICAgICAgZGVsbXNnID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBkZWxldGUgdGhlIHRoZW1lICVyID8nCisgICAgICAgIGlmIG5vdCB0a01lc3NhZ2VCb3guYXNreWVzbm8oCisgICAgICAgICAgICAgICAgJ0RlbGV0ZSBUaGVtZScsICBkZWxtc2cgJSB0aGVtZU5hbWUsIHBhcmVudD1zZWxmKToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjcmVtb3ZlIHRoZW1lIGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLnJlbW92ZV9zZWN0aW9uKHRoZW1lTmFtZSkKQEAgLTczMSwxNTMgKzc4MCwxNDkgQEAKICAgICAgICAgI3dyaXRlIGNoYW5nZXMKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2F2ZSgpCiAgICAgICAgICNyZWxvYWQgdXNlciB0aGVtZSBsaXN0Ci0gICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdoaWdobGlnaHQnKQogICAgICAgICBpdGVtTGlzdC5zb3J0KCkKICAgICAgICAgaWYgbm90IGl0ZW1MaXN0OgogICAgICAgICAgICAgc2VsZi5yYWRpb1RoZW1lQ3VzdG9tLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsJy0gbm8gY3VzdG9tIHRoZW1lcyAtJykKKyAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsICctIG5vIGN1c3RvbSB0aGVtZXMgLScpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGl0ZW1MaXN0WzBdKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCwgaXRlbUxpc3RbMF0pCiAgICAgICAgICNyZXZlcnQgdG8gZGVmYXVsdCB0aGVtZQotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsJ2RlZmF1bHQnKSkKLSAgICAgICAgc2VsZi5idWlsdGluVGhlbWUuc2V0KGlkbGVDb25mLmRlZmF1bHRDZmdbJ21haW4nXS5HZXQoJ1RoZW1lJywnbmFtZScpKQorICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICdkZWZhdWx0JykpCisgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICduYW1lJykpCiAgICAgICAgICN1c2VyIGNhbid0IGJhY2sgb3V0IG9mIHRoZXNlIGNoYW5nZXMsIHRoZXkgbXVzdCBiZSBhcHBsaWVkIG5vdwogICAgICAgICBzZWxmLkFwcGx5KCkKICAgICAgICAgc2VsZi5TZXRUaGVtZVR5cGUoKQogCiAgICAgZGVmIEdldENvbG91cihzZWxmKToKLSAgICAgICAgdGFyZ2V0PXNlbGYuaGlnaGxpZ2h0VGFyZ2V0LmdldCgpCi0gICAgICAgIHByZXZDb2xvdXI9c2VsZi5mcmFtZUNvbG91clNldC5jZ2V0KCdiZycpCi0gICAgICAgIHJnYlR1cGxldCwgY29sb3VyU3RyaW5nID0gdGtDb2xvckNob29zZXIuYXNrY29sb3IocGFyZW50PXNlbGYsCi0gICAgICAgICAgICB0aXRsZT0nUGljayBuZXcgY29sb3VyIGZvciA6ICcrdGFyZ2V0LGluaXRpYWxjb2xvcj1wcmV2Q29sb3VyKQotICAgICAgICBpZiBjb2xvdXJTdHJpbmcgYW5kIChjb2xvdXJTdHJpbmchPXByZXZDb2xvdXIpOgorICAgICAgICB0YXJnZXQgPSBzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKQorICAgICAgICBwcmV2Q29sb3VyID0gc2VsZi5mcmFtZUNvbG91clNldC5jZ2V0KCdiZycpCisgICAgICAgIHJnYlR1cGxldCwgY29sb3VyU3RyaW5nID0gdGtDb2xvckNob29zZXIuYXNrY29sb3IoCisgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYsIHRpdGxlPSdQaWNrIG5ldyBjb2xvdXIgZm9yIDogJyt0YXJnZXQsCisgICAgICAgICAgICAgICAgaW5pdGlhbGNvbG9yPXByZXZDb2xvdXIpCisgICAgICAgIGlmIGNvbG91clN0cmluZyBhbmQgKGNvbG91clN0cmluZyAhPSBwcmV2Q29sb3VyKToKICAgICAgICAgICAgICN1c2VyIGRpZG4ndCBjYW5jZWwsIGFuZCB0aGV5IGNob3NlIGEgbmV3IGNvbG91cgotICAgICAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogI2N1cnJlbnQgdGhlbWUgaXMgYSBidWlsdC1pbgotICAgICAgICAgICAgICAgIG1lc3NhZ2U9KCdZb3VyIGNoYW5nZXMgd2lsbCBiZSBzYXZlZCBhcyBhIG5ldyBDdXN0b20gVGhlbWUuICcrCi0gICAgICAgICAgICAgICAgICAgICAgICAnRW50ZXIgYSBuYW1lIGZvciB5b3VyIG5ldyBDdXN0b20gVGhlbWUgYmVsb3cuJykKLSAgICAgICAgICAgICAgICBuZXdUaGVtZT1zZWxmLkdldE5ld1RoZW1lTmFtZShtZXNzYWdlKQotICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdUaGVtZTogI3VzZXIgY2FuY2VsbGVkIGN1c3RvbSB0aGVtZSBjcmVhdGlvbgorICAgICAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogICNjdXJyZW50IHRoZW1lIGlzIGEgYnVpbHQtaW4KKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gKCdZb3VyIGNoYW5nZXMgd2lsbCBiZSBzYXZlZCBhcyBhIG5ldyBDdXN0b20gVGhlbWUuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdFbnRlciBhIG5hbWUgZm9yIHlvdXIgbmV3IEN1c3RvbSBUaGVtZSBiZWxvdy4nKQorICAgICAgICAgICAgICAgIG5ld1RoZW1lID0gc2VsZi5HZXROZXdUaGVtZU5hbWUobWVzc2FnZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3VGhlbWU6ICAjdXNlciBjYW5jZWxsZWQgY3VzdG9tIHRoZW1lIGNyZWF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGVsc2U6ICNjcmVhdGUgbmV3IGN1c3RvbSB0aGVtZSBiYXNlZCBvbiBwcmV2aW91c2x5IGFjdGl2ZSB0aGVtZQorICAgICAgICAgICAgICAgIGVsc2U6ICAjY3JlYXRlIG5ldyBjdXN0b20gdGhlbWUgYmFzZWQgb24gcHJldmlvdXNseSBhY3RpdmUgdGhlbWUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5DcmVhdGVOZXdUaGVtZShuZXdUaGVtZSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xvdXIuc2V0KGNvbG91clN0cmluZykKLSAgICAgICAgICAgIGVsc2U6ICNjdXJyZW50IHRoZW1lIGlzIHVzZXIgZGVmaW5lZAorICAgICAgICAgICAgZWxzZTogICNjdXJyZW50IHRoZW1lIGlzIHVzZXIgZGVmaW5lZAogICAgICAgICAgICAgICAgIHNlbGYuY29sb3VyLnNldChjb2xvdXJTdHJpbmcpCiAKICAgICBkZWYgT25OZXdDb2xvdXJTZXQoc2VsZik6CiAgICAgICAgIG5ld0NvbG91cj1zZWxmLmNvbG91ci5nZXQoKQotICAgICAgICBzZWxmLmZyYW1lQ29sb3VyU2V0LmNvbmZpZyhiZz1uZXdDb2xvdXIpI3NldCBzYW1wbGUKLSAgICAgICAgaWYgc2VsZi5mZ0hpbGl0ZS5nZXQoKTogcGxhbmU9J2ZvcmVncm91bmQnCi0gICAgICAgIGVsc2U6IHBsYW5lPSdiYWNrZ3JvdW5kJwotICAgICAgICBzYW1wbGVFbGVtZW50PXNlbGYudGhlbWVFbGVtZW50c1tzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKV1bMF0KKyAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldC5jb25maWcoYmc9bmV3Q29sb3VyKSAgI3NldCBzYW1wbGUKKyAgICAgICAgcGxhbmUgPSdmb3JlZ3JvdW5kJyBpZiBzZWxmLmZnSGlsaXRlLmdldCgpIGVsc2UgJ2JhY2tncm91bmQnCisgICAgICAgIHNhbXBsZUVsZW1lbnQgPSBzZWxmLnRoZW1lRWxlbWVudHNbc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCldWzBdCiAgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY29uZmlnKHNhbXBsZUVsZW1lbnQsICoqe3BsYW5lOm5ld0NvbG91cn0pCi0gICAgICAgIHRoZW1lPXNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKLSAgICAgICAgdGhlbWVFbGVtZW50PXNhbXBsZUVsZW1lbnQrJy0nK3BsYW5lCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ2hpZ2hsaWdodCcsdGhlbWUsdGhlbWVFbGVtZW50LG5ld0NvbG91cikKKyAgICAgICAgdGhlbWUgPSBzZWxmLmN1c3RvbVRoZW1lLmdldCgpCisgICAgICAgIHRoZW1lRWxlbWVudCA9IHNhbXBsZUVsZW1lbnQgKyAnLScgKyBwbGFuZQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdoaWdobGlnaHQnLCB0aGVtZSwgdGhlbWVFbGVtZW50LCBuZXdDb2xvdXIpCiAKLSAgICBkZWYgR2V0TmV3VGhlbWVOYW1lKHNlbGYsbWVzc2FnZSk6Ci0gICAgICAgIHVzZWROYW1lcz0oaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdoaWdobGlnaHQnKSsKLSAgICAgICAgICAgICAgICBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2hpZ2hsaWdodCcpKQotICAgICAgICBuZXdUaGVtZT1HZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhzZWxmLCdOZXcgQ3VzdG9tIFRoZW1lJywKLSAgICAgICAgICAgICAgICBtZXNzYWdlLHVzZWROYW1lcykucmVzdWx0CisgICAgZGVmIEdldE5ld1RoZW1lTmFtZShzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgdXNlZE5hbWVzID0gKGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywgJ2hpZ2hsaWdodCcpICsKKyAgICAgICAgICAgICAgICBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsICdoaWdobGlnaHQnKSkKKyAgICAgICAgbmV3VGhlbWUgPSBHZXRDZmdTZWN0aW9uTmFtZURpYWxvZygKKyAgICAgICAgICAgICAgICBzZWxmLCAnTmV3IEN1c3RvbSBUaGVtZScsIG1lc3NhZ2UsIHVzZWROYW1lcykucmVzdWx0CiAgICAgICAgIHJldHVybiBuZXdUaGVtZQogCiAgICAgZGVmIFNhdmVBc05ld1RoZW1lKHNlbGYpOgotICAgICAgICBuZXdUaGVtZU5hbWU9c2VsZi5HZXROZXdUaGVtZU5hbWUoJ05ldyBUaGVtZSBOYW1lOicpCisgICAgICAgIG5ld1RoZW1lTmFtZSA9IHNlbGYuR2V0TmV3VGhlbWVOYW1lKCdOZXcgVGhlbWUgTmFtZTonKQogICAgICAgICBpZiBuZXdUaGVtZU5hbWU6CiAgICAgICAgICAgICBzZWxmLkNyZWF0ZU5ld1RoZW1lKG5ld1RoZW1lTmFtZSkKIAotICAgIGRlZiBDcmVhdGVOZXdUaGVtZShzZWxmLG5ld1RoZW1lTmFtZSk6CisgICAgZGVmIENyZWF0ZU5ld1RoZW1lKHNlbGYsIG5ld1RoZW1lTmFtZSk6CiAgICAgICAgICNjcmVhdGVzIG5ldyBjdXN0b20gdGhlbWUgYmFzZWQgb24gdGhlIHByZXZpb3VzbHkgYWN0aXZlIHRoZW1lLAogICAgICAgICAjYW5kIG1ha2VzIHRoZSBuZXcgdGhlbWUgYWN0aXZlCiAgICAgICAgIGlmIHNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCk6Ci0gICAgICAgICAgICB0aGVtZVR5cGU9J2RlZmF1bHQnCi0gICAgICAgICAgICB0aGVtZU5hbWU9c2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKKyAgICAgICAgICAgIHRoZW1lVHlwZSA9ICdkZWZhdWx0JworICAgICAgICAgICAgdGhlbWVOYW1lID0gc2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRoZW1lVHlwZT0ndXNlcicKLSAgICAgICAgICAgIHRoZW1lTmFtZT1zZWxmLmN1c3RvbVRoZW1lLmdldCgpCi0gICAgICAgIG5ld1RoZW1lPWlkbGVDb25mLkdldFRoZW1lRGljdCh0aGVtZVR5cGUsdGhlbWVOYW1lKQorICAgICAgICAgICAgdGhlbWVUeXBlID0gJ3VzZXInCisgICAgICAgICAgICB0aGVtZU5hbWUgPSBzZWxmLmN1c3RvbVRoZW1lLmdldCgpCisgICAgICAgIG5ld1RoZW1lID0gaWRsZUNvbmYuR2V0VGhlbWVEaWN0KHRoZW1lVHlwZSwgdGhlbWVOYW1lKQogICAgICAgICAjYXBwbHkgYW55IG9mIHRoZSBvbGQgdGhlbWUncyB1bnNhdmVkIGNoYW5nZXMgdG8gdGhlIG5ldyB0aGVtZQogICAgICAgICBpZiB0aGVtZU5hbWUgaW4gc2VsZi5jaGFuZ2VkSXRlbXNbJ2hpZ2hsaWdodCddOgotICAgICAgICAgICAgdGhlbWVDaGFuZ2VzPXNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXVt0aGVtZU5hbWVdCisgICAgICAgICAgICB0aGVtZUNoYW5nZXMgPSBzZWxmLmNoYW5nZWRJdGVtc1snaGlnaGxpZ2h0J11bdGhlbWVOYW1lXQogICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdGhlbWVDaGFuZ2VzOgotICAgICAgICAgICAgICAgIG5ld1RoZW1lW2VsZW1lbnRdPXRoZW1lQ2hhbmdlc1tlbGVtZW50XQorICAgICAgICAgICAgICAgIG5ld1RoZW1lW2VsZW1lbnRdID0gdGhlbWVDaGFuZ2VzW2VsZW1lbnRdCiAgICAgICAgICNzYXZlIHRoZSBuZXcgdGhlbWUKLSAgICAgICAgc2VsZi5TYXZlTmV3VGhlbWUobmV3VGhlbWVOYW1lLG5ld1RoZW1lKQorICAgICAgICBzZWxmLlNhdmVOZXdUaGVtZShuZXdUaGVtZU5hbWUsIG5ld1RoZW1lKQogICAgICAgICAjY2hhbmdlIGd1aSBvdmVyIHRvIHRoZSBuZXcgdGhlbWUKLSAgICAgICAgY3VzdG9tVGhlbWVMaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgY3VzdG9tVGhlbWVMaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnaGlnaGxpZ2h0JykKICAgICAgICAgY3VzdG9tVGhlbWVMaXN0LnNvcnQoKQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGN1c3RvbVRoZW1lTGlzdCxuZXdUaGVtZU5hbWUpCisgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoY3VzdG9tVGhlbWVMaXN0LCBuZXdUaGVtZU5hbWUpCiAgICAgICAgIHNlbGYudGhlbWVJc0J1aWx0aW4uc2V0KDApCiAgICAgICAgIHNlbGYuU2V0VGhlbWVUeXBlKCkKIAotICAgIGRlZiBPbkxpc3RGb250QnV0dG9uUmVsZWFzZShzZWxmLGV2ZW50KToKKyAgICBkZWYgT25MaXN0Rm9udEJ1dHRvblJlbGVhc2Uoc2VsZiwgZXZlbnQpOgogICAgICAgICBmb250ID0gc2VsZi5saXN0Rm9udE5hbWUuZ2V0KEFOQ0hPUikKICAgICAgICAgc2VsZi5mb250TmFtZS5zZXQoZm9udC5sb3dlcigpKQogICAgICAgICBzZWxmLlNldEZvbnRTYW1wbGUoKQogCi0gICAgZGVmIFNldEZvbnRTYW1wbGUoc2VsZixldmVudD1Ob25lKToKLSAgICAgICAgZm9udE5hbWU9c2VsZi5mb250TmFtZS5nZXQoKQotICAgICAgICBpZiBzZWxmLmZvbnRCb2xkLmdldCgpOgotICAgICAgICAgICAgZm9udFdlaWdodD10a0ZvbnQuQk9MRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9udFdlaWdodD10a0ZvbnQuTk9STUFMCisgICAgZGVmIFNldEZvbnRTYW1wbGUoc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgIGZvbnROYW1lID0gc2VsZi5mb250TmFtZS5nZXQoKQorICAgICAgICBmb250V2VpZ2h0ID0gdGtGb250LkJPTEQgaWYgc2VsZi5mb250Qm9sZC5nZXQoKSBlbHNlIHRrRm9udC5OT1JNQUwKICAgICAgICAgbmV3Rm9udCA9IChmb250TmFtZSwgc2VsZi5mb250U2l6ZS5nZXQoKSwgZm9udFdlaWdodCkKICAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGUuY29uZmlnKGZvbnQ9bmV3Rm9udCkKICAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlLmNvbmZpZ3VyZShmb250PW5ld0ZvbnQpCiAKICAgICBkZWYgU2V0SGlnaGxpZ2h0VGFyZ2V0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKT09J0N1cnNvcic6ICNiZyBub3QgcG9zc2libGUKKyAgICAgICAgaWYgc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCkgPT0gJ0N1cnNvcic6ICAjYmcgbm90IHBvc3NpYmxlCiAgICAgICAgICAgICBzZWxmLnJhZGlvRmcuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogICAgICAgICAgICAgc2VsZi5yYWRpb0JnLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgICAgIHNlbGYuZmdIaWxpdGUuc2V0KDEpCi0gICAgICAgIGVsc2U6ICNib3RoIGZnIGFuZCBiZyBjYW4gYmUgc2V0CisgICAgICAgIGVsc2U6ICAjYm90aCBmZyBhbmQgYmcgY2FuIGJlIHNldAogICAgICAgICAgICAgc2VsZi5yYWRpb0ZnLmNvbmZpZyhzdGF0ZT1OT1JNQUwpCiAgICAgICAgICAgICBzZWxmLnJhZGlvQmcuY29uZmlnKHN0YXRlPU5PUk1BTCkKICAgICAgICAgICAgIHNlbGYuZmdIaWxpdGUuc2V0KDEpCiAgICAgICAgIHNlbGYuU2V0Q29sb3VyU2FtcGxlKCkKIAotICAgIGRlZiBTZXRDb2xvdXJTYW1wbGVCaW5kaW5nKHNlbGYsKmFyZ3MpOgorICAgIGRlZiBTZXRDb2xvdXJTYW1wbGVCaW5kaW5nKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5TZXRDb2xvdXJTYW1wbGUoKQogCiAgICAgZGVmIFNldENvbG91clNhbXBsZShzZWxmKToKICAgICAgICAgI3NldCB0aGUgY29sb3VyIHNtYXBsZSBhcmVhCi0gICAgICAgIHRhZz1zZWxmLnRoZW1lRWxlbWVudHNbc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCldWzBdCi0gICAgICAgIGlmIHNlbGYuZmdIaWxpdGUuZ2V0KCk6IHBsYW5lPSdmb3JlZ3JvdW5kJwotICAgICAgICBlbHNlOiBwbGFuZT0nYmFja2dyb3VuZCcKLSAgICAgICAgY29sb3VyPXNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY2dldCh0YWcscGxhbmUpCisgICAgICAgIHRhZyA9IHNlbGYudGhlbWVFbGVtZW50c1tzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKV1bMF0KKyAgICAgICAgcGxhbmUgPSAnZm9yZWdyb3VuZCcgaWYgc2VsZi5mZ0hpbGl0ZS5nZXQoKSBlbHNlICdiYWNrZ3JvdW5kJworICAgICAgICBjb2xvdXIgPSBzZWxmLnRleHRIaWdobGlnaHRTYW1wbGUudGFnX2NnZXQodGFnLCBwbGFuZSkKICAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldC5jb25maWcoYmc9Y29sb3VyKQogCiAgICAgZGVmIFBhaW50VGhlbWVTYW1wbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCk6ICNhIGRlZmF1bHQgdGhlbWUKLSAgICAgICAgICAgIHRoZW1lPXNlbGYuYnVpbHRpblRoZW1lLmdldCgpCi0gICAgICAgIGVsc2U6ICNhIHVzZXIgdGhlbWUKLSAgICAgICAgICAgIHRoZW1lPXNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKKyAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogICNhIGRlZmF1bHQgdGhlbWUKKyAgICAgICAgICAgIHRoZW1lID0gc2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKKyAgICAgICAgZWxzZTogICNhIHVzZXIgdGhlbWUKKyAgICAgICAgICAgIHRoZW1lID0gc2VsZi5jdXN0b21UaGVtZS5nZXQoKQogICAgICAgICBmb3IgZWxlbWVudFRpdGxlIGluIHNlbGYudGhlbWVFbGVtZW50czoKLSAgICAgICAgICAgIGVsZW1lbnQ9c2VsZi50aGVtZUVsZW1lbnRzW2VsZW1lbnRUaXRsZV1bMF0KLSAgICAgICAgICAgIGNvbG91cnM9aWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLGVsZW1lbnQpCi0gICAgICAgICAgICBpZiBlbGVtZW50PT0nY3Vyc29yJzogI2N1cnNvciBzYW1wbGUgbmVlZHMgc3BlY2lhbCBwYWludGluZwotICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXT1pZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAnbm9ybWFsJywgZmdCZz0nYmcnKQorICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYudGhlbWVFbGVtZW50c1tlbGVtZW50VGl0bGVdWzBdCisgICAgICAgICAgICBjb2xvdXJzID0gaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCBlbGVtZW50KQorICAgICAgICAgICAgaWYgZWxlbWVudCA9PSAnY3Vyc29yJzogI2N1cnNvciBzYW1wbGUgbmVlZHMgc3BlY2lhbCBwYWludGluZworICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXSA9IGlkbGVDb25mLkdldEhpZ2hsaWdodCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lLCAnbm9ybWFsJywgZmdCZz0nYmcnKQogICAgICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgdGhlbWUKICAgICAgICAgICAgIGlmIHRoZW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXToKLSAgICAgICAgICAgICAgICB0aGVtZURpY3Q9c2VsZi5jaGFuZ2VkSXRlbXNbJ2hpZ2hsaWdodCddW3RoZW1lXQotICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQrJy1mb3JlZ3JvdW5kJyBpbiB0aGVtZURpY3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2ZvcmVncm91bmQnXT10aGVtZURpY3RbZWxlbWVudCsnLWZvcmVncm91bmQnXQotICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQrJy1iYWNrZ3JvdW5kJyBpbiB0aGVtZURpY3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXT10aGVtZURpY3RbZWxlbWVudCsnLWJhY2tncm91bmQnXQorICAgICAgICAgICAgICAgIHRoZW1lRGljdCA9IHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXVt0aGVtZV0KKyAgICAgICAgICAgICAgICBpZiBlbGVtZW50ICsgJy1mb3JlZ3JvdW5kJyBpbiB0aGVtZURpY3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2ZvcmVncm91bmQnXSA9IHRoZW1lRGljdFtlbGVtZW50ICsgJy1mb3JlZ3JvdW5kJ10KKyAgICAgICAgICAgICAgICBpZiBlbGVtZW50ICsgJy1iYWNrZ3JvdW5kJyBpbiB0aGVtZURpY3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXSA9IHRoZW1lRGljdFtlbGVtZW50ICsgJy1iYWNrZ3JvdW5kJ10KICAgICAgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY29uZmlnKGVsZW1lbnQsICoqY29sb3VycykKICAgICAgICAgc2VsZi5TZXRDb2xvdXJTYW1wbGUoKQogCi0gICAgZGVmIEhlbHBTb3VyY2VTZWxlY3RlZChzZWxmLGV2ZW50KToKKyAgICBkZWYgSGVscFNvdXJjZVNlbGVjdGVkKHNlbGYsIGV2ZW50KToKICAgICAgICAgc2VsZi5TZXRIZWxwTGlzdEJ1dHRvblN0YXRlcygpCiAKICAgICBkZWYgU2V0SGVscExpc3RCdXR0b25TdGF0ZXMoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYubGlzdEhlbHAuc2l6ZSgpPDE6ICNubyBlbnRyaWVzIGluIGxpc3QKKyAgICAgICAgaWYgc2VsZi5saXN0SGVscC5zaXplKCkgPCAxOiAgI25vIGVudHJpZXMgaW4gbGlzdAogICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEVkaXQuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdFJlbW92ZS5jb25maWcoc3RhdGU9RElTQUJMRUQpCiAgICAgICAgIGVsc2U6ICN0aGVyZSBhcmUgc29tZSBlbnRyaWVzCi0gICAgICAgICAgICBpZiBzZWxmLmxpc3RIZWxwLmN1cnNlbGVjdGlvbigpOiAjdGhlcmUgY3VycmVudGx5IGlzIGEgc2VsZWN0aW9uCisgICAgICAgICAgICBpZiBzZWxmLmxpc3RIZWxwLmN1cnNlbGVjdGlvbigpOiAgI3RoZXJlIGN1cnJlbnRseSBpcyBhIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RFZGl0LmNvbmZpZyhzdGF0ZT1OT1JNQUwpCiAgICAgICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdFJlbW92ZS5jb25maWcoc3RhdGU9Tk9STUFMKQogICAgICAgICAgICAgZWxzZTogICN0aGVyZSBjdXJyZW50bHkgaXMgbm90IGEgc2VsZWN0aW9uCkBAIC04ODUsMjggKzkzMCwyOSBAQAogICAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RSZW1vdmUuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogCiAgICAgZGVmIEhlbHBMaXN0SXRlbUFkZChzZWxmKToKLSAgICAgICAgaGVscFNvdXJjZT1HZXRIZWxwU291cmNlRGlhbG9nKHNlbGYsJ05ldyBIZWxwIFNvdXJjZScpLnJlc3VsdAorICAgICAgICBoZWxwU291cmNlID0gR2V0SGVscFNvdXJjZURpYWxvZyhzZWxmLCAnTmV3IEhlbHAgU291cmNlJykucmVzdWx0CiAgICAgICAgIGlmIGhlbHBTb3VyY2U6Ci0gICAgICAgICAgICBzZWxmLnVzZXJIZWxwTGlzdC5hcHBlbmQoIChoZWxwU291cmNlWzBdLGhlbHBTb3VyY2VbMV0pICkKLSAgICAgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KEVORCxoZWxwU291cmNlWzBdKQorICAgICAgICAgICAgc2VsZi51c2VySGVscExpc3QuYXBwZW5kKChoZWxwU291cmNlWzBdLCBoZWxwU291cmNlWzFdKSkKKyAgICAgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KEVORCwgaGVscFNvdXJjZVswXSkKICAgICAgICAgICAgIHNlbGYuVXBkYXRlVXNlckhlbHBDaGFuZ2VkSXRlbXMoKQogICAgICAgICBzZWxmLlNldEhlbHBMaXN0QnV0dG9uU3RhdGVzKCkKIAogICAgIGRlZiBIZWxwTGlzdEl0ZW1FZGl0KHNlbGYpOgotICAgICAgICBpdGVtSW5kZXg9c2VsZi5saXN0SGVscC5pbmRleChBTkNIT1IpCi0gICAgICAgIGhlbHBTb3VyY2U9c2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XQotICAgICAgICBuZXdIZWxwU291cmNlPUdldEhlbHBTb3VyY2VEaWFsb2coc2VsZiwnRWRpdCBIZWxwIFNvdXJjZScsCi0gICAgICAgICAgICAgICAgbWVudUl0ZW09aGVscFNvdXJjZVswXSxmaWxlUGF0aD1oZWxwU291cmNlWzFdKS5yZXN1bHQKLSAgICAgICAgaWYgKG5vdCBuZXdIZWxwU291cmNlKSBvciAobmV3SGVscFNvdXJjZT09aGVscFNvdXJjZSk6CisgICAgICAgIGl0ZW1JbmRleCA9IHNlbGYubGlzdEhlbHAuaW5kZXgoQU5DSE9SKQorICAgICAgICBoZWxwU291cmNlID0gc2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XQorICAgICAgICBuZXdIZWxwU291cmNlID0gR2V0SGVscFNvdXJjZURpYWxvZygKKyAgICAgICAgICAgICAgICBzZWxmLCAnRWRpdCBIZWxwIFNvdXJjZScsIG1lbnVJdGVtPWhlbHBTb3VyY2VbMF0sCisgICAgICAgICAgICAgICAgZmlsZVBhdGg9aGVscFNvdXJjZVsxXSkucmVzdWx0CisgICAgICAgIGlmIChub3QgbmV3SGVscFNvdXJjZSkgb3IgKG5ld0hlbHBTb3VyY2UgPT0gaGVscFNvdXJjZSk6CiAgICAgICAgICAgICByZXR1cm4gI25vIGNoYW5nZXMKLSAgICAgICAgc2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XT1uZXdIZWxwU291cmNlCisgICAgICAgIHNlbGYudXNlckhlbHBMaXN0W2l0ZW1JbmRleF0gPSBuZXdIZWxwU291cmNlCiAgICAgICAgIHNlbGYubGlzdEhlbHAuZGVsZXRlKGl0ZW1JbmRleCkKLSAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoaXRlbUluZGV4LG5ld0hlbHBTb3VyY2VbMF0pCisgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KGl0ZW1JbmRleCwgbmV3SGVscFNvdXJjZVswXSkKICAgICAgICAgc2VsZi5VcGRhdGVVc2VySGVscENoYW5nZWRJdGVtcygpCiAgICAgICAgIHNlbGYuU2V0SGVscExpc3RCdXR0b25TdGF0ZXMoKQogCiAgICAgZGVmIEhlbHBMaXN0SXRlbVJlbW92ZShzZWxmKToKLSAgICAgICAgaXRlbUluZGV4PXNlbGYubGlzdEhlbHAuaW5kZXgoQU5DSE9SKQorICAgICAgICBpdGVtSW5kZXggPSBzZWxmLmxpc3RIZWxwLmluZGV4KEFOQ0hPUikKICAgICAgICAgZGVsKHNlbGYudXNlckhlbHBMaXN0W2l0ZW1JbmRleF0pCiAgICAgICAgIHNlbGYubGlzdEhlbHAuZGVsZXRlKGl0ZW1JbmRleCkKICAgICAgICAgc2VsZi5VcGRhdGVVc2VySGVscENoYW5nZWRJdGVtcygpCkBAIC05MTUsMTggKzk2MSwxOSBAQAogICAgIGRlZiBVcGRhdGVVc2VySGVscENoYW5nZWRJdGVtcyhzZWxmKToKICAgICAgICAgIkNsZWFyIGFuZCByZWJ1aWxkIHRoZSBIZWxwRmlsZXMgc2VjdGlvbiBpbiBzZWxmLmNoYW5nZWRJdGVtcyIKICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbJ21haW4nXVsnSGVscEZpbGVzJ10gPSB7fQotICAgICAgICBmb3IgbnVtIGluIHJhbmdlKDEsbGVuKHNlbGYudXNlckhlbHBMaXN0KSsxKToKLSAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdIZWxwRmlsZXMnLHN0cihudW0pLAorICAgICAgICBmb3IgbnVtIGluIHJhbmdlKDEsIGxlbihzZWxmLnVzZXJIZWxwTGlzdCkgKyAxKToKKyAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oCisgICAgICAgICAgICAgICAgICAgICdtYWluJywgJ0hlbHBGaWxlcycsIHN0cihudW0pLAogICAgICAgICAgICAgICAgICAgICAnOycuam9pbihzZWxmLnVzZXJIZWxwTGlzdFtudW0tMV1bOjJdKSkKIAogICAgIGRlZiBMb2FkRm9udENmZyhzZWxmKToKICAgICAgICAgIyNiYXNlIGVkaXRvciBmb250IHNlbGVjdGlvbiBsaXN0Ci0gICAgICAgIGZvbnRzPWxpc3QodGtGb250LmZhbWlsaWVzKHNlbGYpKQorICAgICAgICBmb250cyA9IGxpc3QodGtGb250LmZhbWlsaWVzKHNlbGYpKQogICAgICAgICBmb250cy5zb3J0KCkKICAgICAgICAgZm9yIGZvbnQgaW4gZm9udHM6Ci0gICAgICAgICAgICBzZWxmLmxpc3RGb250TmFtZS5pbnNlcnQoRU5ELGZvbnQpCi0gICAgICAgIGNvbmZpZ3VyZWRGb250PWlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ0VkaXRvcldpbmRvdycsJ2ZvbnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nY291cmllcicpCisgICAgICAgICAgICBzZWxmLmxpc3RGb250TmFtZS5pbnNlcnQoRU5ELCBmb250KQorICAgICAgICBjb25maWd1cmVkRm9udCA9IGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnZm9udCcsIGRlZmF1bHQ9J2NvdXJpZXInKQogICAgICAgICBsY19jb25maWd1cmVkRm9udCA9IGNvbmZpZ3VyZWRGb250Lmxvd2VyKCkKICAgICAgICAgc2VsZi5mb250TmFtZS5zZXQobGNfY29uZmlndXJlZEZvbnQpCiAgICAgICAgIGxjX2ZvbnRzID0gW3MubG93ZXIoKSBmb3IgcyBpbiBmb250c10KQEAgLTkzNiwxMDcgKzk4MywxMDcgQEAKICAgICAgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLnNlbGVjdF9zZXQoY3VycmVudEZvbnRJbmRleCkKICAgICAgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLnNlbGVjdF9hbmNob3IoY3VycmVudEZvbnRJbmRleCkKICAgICAgICAgIyNmb250IHNpemUgZHJvcGRvd24KLSAgICAgICAgZm9udFNpemU9aWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LXNpemUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50JywgZGVmYXVsdD0nMTAnKQotICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZS5TZXRNZW51KCgnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJywnMTMnLCcxNCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxNicsJzE4JywnMjAnLCcyMicpLCBmb250U2l6ZSApCisgICAgICAgIGZvbnRTaXplID0gaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LXNpemUnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PScxMCcpCisgICAgICAgIHNlbGYub3B0TWVudUZvbnRTaXplLlNldE1lbnUoKCc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMicsICcxMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxNCcsICcxNicsICcxOCcsICcyMCcsICcyMicpLCBmb250U2l6ZSApCiAgICAgICAgICMjZm9udFdlaWdodAotICAgICAgICBzZWxmLmZvbnRCb2xkLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtYm9sZCcsZGVmYXVsdD0wLHR5cGU9J2Jvb2wnKSkKKyAgICAgICAgc2VsZi5mb250Qm9sZC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LWJvbGQnLCBkZWZhdWx0PTAsIHR5cGU9J2Jvb2wnKSkKICAgICAgICAgIyNmb250IHNhbXBsZQogICAgICAgICBzZWxmLlNldEZvbnRTYW1wbGUoKQogCiAgICAgZGVmIExvYWRUYWJDZmcoc2VsZik6CiAgICAgICAgICMjaW5kZW50IHNpemVzCi0gICAgICAgIHNwYWNlTnVtPWlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ0luZGVudCcsJ251bS1zcGFjZXMnLAotICAgICAgICAgICAgICAgIGRlZmF1bHQ9NCx0eXBlPSdpbnQnKQorICAgICAgICBzcGFjZU51bSA9IGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICdtYWluJywgJ0luZGVudCcsICdudW0tc3BhY2VzJywgZGVmYXVsdD00LCB0eXBlPSdpbnQnKQogICAgICAgICBzZWxmLnNwYWNlTnVtLnNldChzcGFjZU51bSkKIAogICAgIGRlZiBMb2FkVGhlbWVDZmcoc2VsZik6CiAgICAgICAgICMjY3VycmVudCB0aGVtZSB0eXBlIHJhZGlvYnV0dG9uCi0gICAgICAgIHNlbGYudGhlbWVJc0J1aWx0aW4uc2V0KGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ1RoZW1lJywnZGVmYXVsdCcsCi0gICAgICAgICAgICB0eXBlPSdib29sJyxkZWZhdWx0PTEpKQorICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5HZXRPcHRpb24oCisgICAgICAgICAgICAgICAgJ21haW4nLCAnVGhlbWUnLCAnZGVmYXVsdCcsIHR5cGU9J2Jvb2wnLCBkZWZhdWx0PTEpKQogICAgICAgICAjI2N1cnJlbnRseSBzZXQgdGhlbWUKLSAgICAgICAgY3VycmVudE9wdGlvbj1pZGxlQ29uZi5DdXJyZW50VGhlbWUoKQorICAgICAgICBjdXJyZW50T3B0aW9uID0gaWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKICAgICAgICAgIyNsb2FkIGF2YWlsYWJsZSB0aGVtZSBvcHRpb24gbWVudXMKICAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogI2RlZmF1bHQgdGhlbWUgc2VsZWN0ZWQKLSAgICAgICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywnaGlnaGxpZ2h0JykKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCAnaGlnaGxpZ2h0JykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsY3VycmVudE9wdGlvbikKLSAgICAgICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQnVpbHRpbi5TZXRNZW51KGl0ZW1MaXN0LCBjdXJyZW50T3B0aW9uKQorICAgICAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdoaWdobGlnaHQnKQogICAgICAgICAgICAgaXRlbUxpc3Quc29ydCgpCiAgICAgICAgICAgICBpZiBub3QgaXRlbUxpc3Q6CiAgICAgICAgICAgICAgICAgc2VsZi5yYWRpb1RoZW1lQ3VzdG9tLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgICAgICAgICBzZWxmLmN1c3RvbVRoZW1lLnNldCgnLSBubyBjdXN0b20gdGhlbWVzIC0nKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGl0ZW1MaXN0WzBdKQorICAgICAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsIGl0ZW1MaXN0WzBdKQogICAgICAgICBlbHNlOiAjdXNlciB0aGVtZSBzZWxlY3RlZAotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdoaWdobGlnaHQnKQorICAgICAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdoaWdobGlnaHQnKQogICAgICAgICAgICAgaXRlbUxpc3Quc29ydCgpCi0gICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGN1cnJlbnRPcHRpb24pCi0gICAgICAgICAgICBpdGVtTGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2hpZ2hsaWdodCcpCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBjdXJyZW50T3B0aW9uKQorICAgICAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsICdoaWdobGlnaHQnKQogICAgICAgICAgICAgaXRlbUxpc3Quc29ydCgpCi0gICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4uU2V0TWVudShpdGVtTGlzdCxpdGVtTGlzdFswXSkKKyAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQnVpbHRpbi5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgc2VsZi5TZXRUaGVtZVR5cGUoKQogICAgICAgICAjI2xvYWQgdGhlbWUgZWxlbWVudCBvcHRpb24gbWVudQogICAgICAgICB0aGVtZU5hbWVzID0gbGlzdChzZWxmLnRoZW1lRWxlbWVudHMua2V5cygpKQogICAgICAgICB0aGVtZU5hbWVzLnNvcnQoa2V5PWxhbWJkYSB4OiBzZWxmLnRoZW1lRWxlbWVudHNbeF1bMV0pCi0gICAgICAgIHNlbGYub3B0TWVudUhpZ2hsaWdodFRhcmdldC5TZXRNZW51KHRoZW1lTmFtZXMsdGhlbWVOYW1lc1swXSkKKyAgICAgICAgc2VsZi5vcHRNZW51SGlnaGxpZ2h0VGFyZ2V0LlNldE1lbnUodGhlbWVOYW1lcywgdGhlbWVOYW1lc1swXSkKICAgICAgICAgc2VsZi5QYWludFRoZW1lU2FtcGxlKCkKICAgICAgICAgc2VsZi5TZXRIaWdobGlnaHRUYXJnZXQoKQogCiAgICAgZGVmIExvYWRLZXlDZmcoc2VsZik6CiAgICAgICAgICMjY3VycmVudCBrZXlzIHR5cGUgcmFkaW9idXR0b24KLSAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnS2V5cycsJ2RlZmF1bHQnLAotICAgICAgICAgICAgdHlwZT0nYm9vbCcsZGVmYXVsdD0xKSkKKyAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0tleXMnLCAnZGVmYXVsdCcsIHR5cGU9J2Jvb2wnLCBkZWZhdWx0PTEpKQogICAgICAgICAjI2N1cnJlbnRseSBzZXQga2V5cwotICAgICAgICBjdXJyZW50T3B0aW9uPWlkbGVDb25mLkN1cnJlbnRLZXlzKCkKKyAgICAgICAgY3VycmVudE9wdGlvbiA9IGlkbGVDb25mLkN1cnJlbnRLZXlzKCkKICAgICAgICAgIyNsb2FkIGF2YWlsYWJsZSBrZXlzZXQgb3B0aW9uIG1lbnVzCiAgICAgICAgIGlmIHNlbGYua2V5c0FyZUJ1aWx0aW4uZ2V0KCk6ICNkZWZhdWx0IHRoZW1lIHNlbGVjdGVkCi0gICAgICAgICAgICBpdGVtTGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2tleXMnKQorICAgICAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsICdrZXlzJykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0J1aWx0aW4uU2V0TWVudShpdGVtTGlzdCxjdXJyZW50T3B0aW9uKQotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdrZXlzJykKKyAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsIGN1cnJlbnRPcHRpb24pCisgICAgICAgICAgICBpdGVtTGlzdCA9IGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywgJ2tleXMnKQogICAgICAgICAgICAgaXRlbUxpc3Quc29ydCgpCiAgICAgICAgICAgICBpZiBub3QgaXRlbUxpc3Q6CiAgICAgICAgICAgICAgICAgc2VsZi5yYWRpb0tleXNDdXN0b20uY29uZmlnKHN0YXRlPURJU0FCTEVEKQogICAgICAgICAgICAgICAgIHNlbGYuY3VzdG9tS2V5cy5zZXQoJy0gbm8gY3VzdG9tIGtleXMgLScpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShpdGVtTGlzdCxpdGVtTGlzdFswXSkKKyAgICAgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsIGl0ZW1MaXN0WzBdKQogICAgICAgICBlbHNlOiAjdXNlciBrZXkgc2V0IHNlbGVjdGVkCi0gICAgICAgICAgICBpdGVtTGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsJ2tleXMnKQorICAgICAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdrZXlzJykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGN1cnJlbnRPcHRpb24pCi0gICAgICAgICAgICBpdGVtTGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2tleXMnKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBjdXJyZW50T3B0aW9uKQorICAgICAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsICdrZXlzJykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0J1aWx0aW4uU2V0TWVudShpdGVtTGlzdCxpdGVtTGlzdFswXSkKKyAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsIGl0ZW1MaXN0WzBdKQogICAgICAgICBzZWxmLlNldEtleXNUeXBlKCkKICAgICAgICAgIyNsb2FkIGtleXNldCBlbGVtZW50IGxpc3QKLSAgICAgICAga2V5U2V0TmFtZT1pZGxlQ29uZi5DdXJyZW50S2V5cygpCisgICAgICAgIGtleVNldE5hbWUgPSBpZGxlQ29uZi5DdXJyZW50S2V5cygpCiAgICAgICAgIHNlbGYuTG9hZEtleXNMaXN0KGtleVNldE5hbWUpCiAKICAgICBkZWYgTG9hZEdlbmVyYWxDZmcoc2VsZik6CiAgICAgICAgICNzdGFydHVwIHN0YXRlCi0gICAgICAgIHNlbGYuc3RhcnR1cEVkaXQuc2V0KGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ0dlbmVyYWwnLAotICAgICAgICAgICAgICAgICdlZGl0b3Itb24tc3RhcnR1cCcsZGVmYXVsdD0xLHR5cGU9J2Jvb2wnKSkKKyAgICAgICAgc2VsZi5zdGFydHVwRWRpdC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0dlbmVyYWwnLCAnZWRpdG9yLW9uLXN0YXJ0dXAnLCBkZWZhdWx0PTEsIHR5cGU9J2Jvb2wnKSkKICAgICAgICAgI2F1dG9zYXZlIHN0YXRlCi0gICAgICAgIHNlbGYuYXV0b1NhdmUuc2V0KGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsICdHZW5lcmFsJywgJ2F1dG9zYXZlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9MCwgdHlwZT0nYm9vbCcpKQorICAgICAgICBzZWxmLmF1dG9TYXZlLnNldChpZGxlQ29uZi5HZXRPcHRpb24oCisgICAgICAgICAgICAgICAgJ21haW4nLCAnR2VuZXJhbCcsICdhdXRvc2F2ZScsIGRlZmF1bHQ9MCwgdHlwZT0nYm9vbCcpKQogICAgICAgICAjaW5pdGlhbCB3aW5kb3cgc2l6ZQotICAgICAgICBzZWxmLndpbldpZHRoLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCd3aWR0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnKSkKLSAgICAgICAgc2VsZi53aW5IZWlnaHQuc2V0KGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ0VkaXRvcldpbmRvdycsJ2hlaWdodCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50JykpCisgICAgICAgIHNlbGYud2luV2lkdGguc2V0KGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnd2lkdGgnLCB0eXBlPSdpbnQnKSkKKyAgICAgICAgc2VsZi53aW5IZWlnaHQuc2V0KGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnaGVpZ2h0JywgdHlwZT0naW50JykpCiAgICAgICAgICNpbml0aWFsIHBhcmFncmFwaCByZWZvcm1hdCBzaXplCi0gICAgICAgIHNlbGYucGFyYVdpZHRoLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdGb3JtYXRQYXJhZ3JhcGgnLCdwYXJhZ3JhcGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2ludCcpKQorICAgICAgICBzZWxmLnBhcmFXaWR0aC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0Zvcm1hdFBhcmFncmFwaCcsICdwYXJhZ3JhcGgnLCB0eXBlPSdpbnQnKSkKICAgICAgICAgIyBkZWZhdWx0IHNvdXJjZSBlbmNvZGluZwotICAgICAgICBzZWxmLmVuY29kaW5nLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnRWRpdG9yV2luZG93JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmNvZGluZycsIGRlZmF1bHQ9J25vbmUnKSkKKyAgICAgICAgc2VsZi5lbmNvZGluZy5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICdlbmNvZGluZycsIGRlZmF1bHQ9J25vbmUnKSkKICAgICAgICAgIyBhZGRpdGlvbmFsIGhlbHAgc291cmNlcwogICAgICAgICBzZWxmLnVzZXJIZWxwTGlzdCA9IGlkbGVDb25mLkdldEFsbEV4dHJhSGVscFNvdXJjZXNMaXN0KCkKICAgICAgICAgZm9yIGhlbHBJdGVtIGluIHNlbGYudXNlckhlbHBMaXN0OgotICAgICAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoRU5ELGhlbHBJdGVtWzBdKQorICAgICAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoRU5ELCBoZWxwSXRlbVswXSkKICAgICAgICAgc2VsZi5TZXRIZWxwTGlzdEJ1dHRvblN0YXRlcygpCiAKICAgICBkZWYgTG9hZENvbmZpZ3Moc2VsZik6CkBAIC0xMDU0LDcgKzExMDEsNyBAQAogICAgICAgICAjIyMgZ2VuZXJhbCBwYWdlCiAgICAgICAgIHNlbGYuTG9hZEdlbmVyYWxDZmcoKQogCi0gICAgZGVmIFNhdmVOZXdLZXlTZXQoc2VsZixrZXlTZXROYW1lLGtleVNldCk6CisgICAgZGVmIFNhdmVOZXdLZXlTZXQoc2VsZiwga2V5U2V0TmFtZSwga2V5U2V0KToKICAgICAgICAgIiIiCiAgICAgICAgIHNhdmUgYSBuZXdseSBjcmVhdGVkIGNvcmUga2V5IHNldC4KICAgICAgICAga2V5U2V0TmFtZSAtIHN0cmluZywgdGhlIG5hbWUgb2YgdGhlIG5ldyBrZXkgc2V0CkBAIC0xMDYzLDEwICsxMTEwLDEwIEBACiAgICAgICAgIGlmIG5vdCBpZGxlQ29uZi51c2VyQ2ZnWydrZXlzJ10uaGFzX3NlY3Rpb24oa2V5U2V0TmFtZSk6CiAgICAgICAgICAgICBpZGxlQ29uZi51c2VyQ2ZnWydrZXlzJ10uYWRkX3NlY3Rpb24oa2V5U2V0TmFtZSkKICAgICAgICAgZm9yIGV2ZW50IGluIGtleVNldDoKLSAgICAgICAgICAgIHZhbHVlPWtleVNldFtldmVudF0KLSAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2tleXMnXS5TZXRPcHRpb24oa2V5U2V0TmFtZSxldmVudCx2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlID0ga2V5U2V0W2V2ZW50XQorICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1sna2V5cyddLlNldE9wdGlvbihrZXlTZXROYW1lLCBldmVudCwgdmFsdWUpCiAKLSAgICBkZWYgU2F2ZU5ld1RoZW1lKHNlbGYsdGhlbWVOYW1lLHRoZW1lKToKKyAgICBkZWYgU2F2ZU5ld1RoZW1lKHNlbGYsIHRoZW1lTmFtZSwgdGhlbWUpOgogICAgICAgICAiIiIKICAgICAgICAgc2F2ZSBhIG5ld2x5IGNyZWF0ZWQgdGhlbWUuCiAgICAgICAgIHRoZW1lTmFtZSAtIHN0cmluZywgdGhlIG5hbWUgb2YgdGhlIG5ldyB0aGVtZQpAQCAtMTA3NSwxNiArMTEyMiwxNiBAQAogICAgICAgICBpZiBub3QgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uaGFzX3NlY3Rpb24odGhlbWVOYW1lKToKICAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLmFkZF9zZWN0aW9uKHRoZW1lTmFtZSkKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdGhlbWU6Ci0gICAgICAgICAgICB2YWx1ZT10aGVtZVtlbGVtZW50XQotICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2V0T3B0aW9uKHRoZW1lTmFtZSxlbGVtZW50LHZhbHVlKQorICAgICAgICAgICAgdmFsdWUgPSB0aGVtZVtlbGVtZW50XQorICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2V0T3B0aW9uKHRoZW1lTmFtZSwgZWxlbWVudCwgdmFsdWUpCiAKLSAgICBkZWYgU2V0VXNlclZhbHVlKHNlbGYsY29uZmlnVHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgotICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLmhhc19vcHRpb24oc2VjdGlvbixpdGVtKToKLSAgICAgICAgICAgIGlmIGlkbGVDb25mLmRlZmF1bHRDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24saXRlbSk9PXZhbHVlOgorICAgIGRlZiBTZXRVc2VyVmFsdWUoc2VsZiwgY29uZmlnVHlwZSwgc2VjdGlvbiwgaXRlbSwgdmFsdWUpOgorICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLmhhc19vcHRpb24oc2VjdGlvbiwgaXRlbSk6CisgICAgICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLkdldChzZWN0aW9uLCBpdGVtKSA9PSB2YWx1ZToKICAgICAgICAgICAgICAgICAjdGhlIHNldHRpbmcgZXF1YWxzIGEgZGVmYXVsdCBzZXR0aW5nLCByZW1vdmUgaXQgZnJvbSB1c2VyIGNmZwotICAgICAgICAgICAgICAgIHJldHVybiBpZGxlQ29uZi51c2VyQ2ZnW2NvbmZpZ1R5cGVdLlJlbW92ZU9wdGlvbihzZWN0aW9uLGl0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGlkbGVDb25mLnVzZXJDZmdbY29uZmlnVHlwZV0uUmVtb3ZlT3B0aW9uKHNlY3Rpb24sIGl0ZW0pCiAgICAgICAgICNpZiB3ZSBnb3QgaGVyZSBzZXQgdGhlIG9wdGlvbgotICAgICAgICByZXR1cm4gaWRsZUNvbmYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbixpdGVtLHZhbHVlKQorICAgICAgICByZXR1cm4gaWRsZUNvbmYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbiwgaXRlbSwgdmFsdWUpCiAKICAgICBkZWYgU2F2ZUFsbENoYW5nZWRDb25maWdzKHNlbGYpOgogICAgICAgICAiU2F2ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGhlIHVzZXIgY29uZmlnIGZpbGUuIgpAQCAtMTA5OCw3ICsxMTQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY2ZnVHlwZUhhc0NoYW5nZXMgPSBUcnVlCiAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jaGFuZ2VkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl06CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5jaGFuZ2VkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1baXRlbV0KLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5TZXRVc2VyVmFsdWUoY29uZmlnVHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLlNldFVzZXJWYWx1ZShjb25maWdUeXBlLCBzZWN0aW9uLCBpdGVtLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjZmdUeXBlSGFzQ2hhbmdlcyA9IFRydWUKICAgICAgICAgICAgIGlmIGNmZ1R5cGVIYXNDaGFuZ2VzOgogICAgICAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbY29uZmlnVHlwZV0uU2F2ZSgpCkBAIC0xMTQwLDkgKzExODcsOSBAQAogICAgICAgICBwYXNzCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgI3Rlc3QgdGhlIGRpYWxvZwotICAgIHJvb3Q9VGsoKQotICAgIEJ1dHRvbihyb290LHRleHQ9J0RpYWxvZycsCi0gICAgICAgICAgICBjb21tYW5kPWxhbWJkYTpDb25maWdEaWFsb2cocm9vdCwnU2V0dGluZ3MnKSkucGFjaygpCi0gICAgcm9vdC5pbnN0YW5jZV9kaWN0PXt9Ci0gICAgcm9vdC5tYWlubG9vcCgpCisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9jb25maWdkaWFsb2cnLAorICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCisKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oQ29uZmlnRGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weSBiL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKaW5kZXggYTk3NGQ1NC4uNzQ1ZDU1MCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQorKysgYi9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CkBAIC0yMCw4ICsyMCw3IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIAotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0Ci1mcm9tIGNvbmZpZ3BhcnNlciBpbXBvcnQgQ29uZmlnUGFyc2VyLCBOb09wdGlvbkVycm9yLCBOb1NlY3Rpb25FcnJvcgorZnJvbSBjb25maWdwYXJzZXIgaW1wb3J0IENvbmZpZ1BhcnNlcgogCiBjbGFzcyBJbnZhbGlkQ29uZmlnVHlwZShFeGNlcHRpb24pOiBwYXNzCiBjbGFzcyBJbnZhbGlkQ29uZmlnU2V0KEV4Y2VwdGlvbik6IHBhc3MKQEAgLTI3MSw4ICsyNzAsMTAgQEAKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKwogICAgIGRlZiBTZXRPcHRpb24oc2VsZiwgY29uZmlnVHlwZSwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CiAgICAgICAgICIiIkluIHVzZXIncyBjb25maWcgZmlsZSwgc2V0IHNlY3Rpb24ncyBvcHRpb24gdG8gdmFsdWUuCisKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKIApAQCAtNTI1LDEwICs1MjYsMTMgQEAKICAgICBkZWYgR2V0Q3VycmVudEtleVNldChzZWxmKToKICAgICAgICAgcmVzdWx0ID0gc2VsZi5HZXRLZXlTZXQoc2VsZi5DdXJyZW50S2V5cygpKQogCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6Ci0gICAgICAgICAgICAjIFdlJ3JlIHVzaW5nIEFxdWFUaywgcmVwbGFjZSBhbGwga2V5YmluZ2luZ3MgdGhhdCB1c2UgdGhlCi0gICAgICAgICAgICAjIEFsdCBrZXkgYnkgb25lcyB0aGF0IHVzZSB0aGUgT3B0aW9uIGtleSBiZWNhdXNlIHRoZSBmb3JtZXIKLSAgICAgICAgICAgICMgZG9uJ3Qgd29yayByZWxpYWJseS4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgIyBPUyBYIFRrIHZhcmlhbnRzIGRvIG5vdCBzdXBwb3J0IHRoZSAiQWx0IiBrZXlib2FyZCBtb2RpZmllci4KKyAgICAgICAgICAgICMgU28gcmVwbGFjZSBhbGwga2V5YmluZ2luZ3MgdGhhdCB1c2UgIkFsdCIgd2l0aCBvbmVzIHRoYXQKKyAgICAgICAgICAgICMgdXNlIHRoZSAiT3B0aW9uIiBrZXlib2FyZCBtb2RpZmllci4KKyAgICAgICAgICAgICMgVE8gRE86IHRoZSAiT3B0aW9uIiBtb2RpZmllciBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IGZvcgorICAgICAgICAgICAgIyAgICAgICAgQ29jb2EgVGsgYW5kIFhRdWFydHogVGsgc28gd2Ugc2hvdWxkIG5vdCB1c2UgaXQKKyAgICAgICAgICAgICMgICAgICAgIGluIGRlZmF1bHQgT1MgWCBLZXlTZXRzLgogICAgICAgICAgICAgZm9yIGssIHYgaW4gcmVzdWx0Lml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgdjIgPSBbIHgucmVwbGFjZSgnPEFsdC0nLCAnPE9wdGlvbi0nKSBmb3IgeCBpbiB2IF0KICAgICAgICAgICAgICAgICBpZiB2ICE9IHYyOgpAQCAtNjM4LDggKzY0MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGtleUJpbmRpbmdzCisKICAgICBkZWYgR2V0RXh0cmFIZWxwU291cmNlTGlzdChzZWxmLGNvbmZpZ1NldCk6CiAgICAgICAgICIiIkZldGNoIGxpc3Qgb2YgZXh0cmEgaGVscCBzb3VyY2VzIGZyb20gYSBnaXZlbiBjb25maWdTZXQuCisKICAgICAgICAgVmFsaWQgY29uZmlnU2V0cyBhcmUgJ3VzZXInIG9yICdkZWZhdWx0Jy4gIFJldHVybiBhIGxpc3Qgb2YgdHVwbGVzIG9mCiAgICAgICAgIHRoZSBmb3JtIChtZW51X2l0ZW0gLCBwYXRoX3RvX2hlbHBfZmlsZSAsIG9wdGlvbiksIG9yIHJldHVybiB0aGUgZW1wdHkKICAgICAgICAgbGlzdC4gICdvcHRpb24nIGlzIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGhlbHAgcmVzb3VyY2UuICAnb3B0aW9uJwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkgYi9MaWIvaWRsZWxpYi9jb25maWdIZWxwU291cmNlRWRpdC5weQppbmRleCAyY2NiNDAwLi4yNDJiMDhkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWdIZWxwU291cmNlRWRpdC5weQorKysgYi9MaWIvaWRsZWxpYi9jb25maWdIZWxwU291cmNlRWRpdC5weQpAQCAtOCwxMyArOCwxNCBAQAogaW1wb3J0IHRraW50ZXIuZmlsZWRpYWxvZyBhcyB0a0ZpbGVEaWFsb2cKIAogY2xhc3MgR2V0SGVscFNvdXJjZURpYWxvZyhUb3BsZXZlbCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgdGl0bGUsIG1lbnVJdGVtPScnLCBmaWxlUGF0aD0nJyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgdGl0bGUsIG1lbnVJdGVtPScnLCBmaWxlUGF0aD0nJywgX2h0ZXN0PUZhbHNlKToKICAgICAgICAgIiIiR2V0IG1lbnUgZW50cnkgYW5kIHVybC8gbG9jYWwgZmlsZSBsb2NhdGlvbiBmb3IgQWRkaXRpb25hbCBIZWxwCiAKICAgICAgICAgVXNlciBzZWxlY3RzIGEgbmFtZSBmb3IgdGhlIEhlbHAgcmVzb3VyY2UgYW5kIHByb3ZpZGVzIGEgd2ViIHVybAogICAgICAgICBvciBhIGxvY2FsIGZpbGUgYXMgaXRzIHNvdXJjZS4gIFRoZSB1c2VyIGNhbiBlbnRlciBhIHVybCBvciBicm93c2UKICAgICAgICAgZm9yIHRoZSBmaWxlLgogCisgICAgICAgIF9odGVzdCAtIGJvb2wsIGNoYW5nZSBib3ggbG9jYXRpb24gd2hlbiBydW5uaW5nIGh0ZXN0CiAgICAgICAgICIiIgogICAgICAgICBUb3BsZXZlbC5fX2luaXRfXyhzZWxmLCBwYXJlbnQpCiAgICAgICAgIHNlbGYuY29uZmlndXJlKGJvcmRlcndpZHRoPTUpCkBAIC0zMSwxMiArMzIsMTQgQEAKICAgICAgICAgc2VsZi53aXRoZHJhdygpICNoaWRlIHdoaWxlIHNldHRpbmcgZ2VvbWV0cnkKICAgICAgICAgI25lZWRzIHRvIGJlIGRvbmUgaGVyZSBzbyB0aGF0IHRoZSB3aW5mb19yZXF3aWR0aCBpcyB2YWxpZAogICAgICAgICBzZWxmLnVwZGF0ZV9pZGxldGFza3MoKQotICAgICAgICAjY2VudHJlIGRpYWxvZyBvdmVyIHBhcmVudDoKLSAgICAgICAgc2VsZi5nZW9tZXRyeSgiKyVkKyVkIiAlCi0gICAgICAgICAgICAgICAgICAgICAgKChwYXJlbnQud2luZm9fcm9vdHgoKSArICgocGFyZW50LndpbmZvX3dpZHRoKCkvMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oc2VsZi53aW5mb19yZXF3aWR0aCgpLzIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgKChwYXJlbnQud2luZm9faGVpZ2h0KCkvMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oc2VsZi53aW5mb19yZXFoZWlnaHQoKS8yKSkpKSkKKyAgICAgICAgI2NlbnRyZSBkaWFsb2cgb3ZlciBwYXJlbnQuIGJlbG93IHBhcmVudCBpZiBydW5uaW5nIGh0ZXN0LgorICAgICAgICBzZWxmLmdlb21ldHJ5KAorICAgICAgICAgICAgICAgICIrJWQrJWQiICUgKAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSArCisgICAgICAgICAgICAgICAgICAgIChwYXJlbnQud2luZm9fd2lkdGgoKS8yIC0gc2VsZi53aW5mb19yZXF3aWR0aCgpLzIpLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArCisgICAgICAgICAgICAgICAgICAgICgocGFyZW50LndpbmZvX2hlaWdodCgpLzIgLSBzZWxmLndpbmZvX3JlcWhlaWdodCgpLzIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfaHRlc3QgZWxzZSAxNTApKSkKICAgICAgICAgc2VsZi5kZWljb25pZnkoKSAjZ2VvbWV0cnkgc2V0LCB1bmhpZGUKICAgICAgICAgc2VsZi5iaW5kKCc8UmV0dXJuPicsIHNlbGYuT2spCiAgICAgICAgIHNlbGYud2FpdF93aW5kb3coKQpAQCAtMTU5LDExICsxNjIsNSBAQAogICAgICAgICBzZWxmLmRlc3Ryb3koKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICN0ZXN0IHRoZSBkaWFsb2cKLSAgICByb290ID0gVGsoKQotICAgIGRlZiBydW4oKToKLSAgICAgICAga2V5U2VxID0gJycKLSAgICAgICAgZGxnID0gR2V0SGVscFNvdXJjZURpYWxvZyhyb290LCAnR2V0IEhlbHAgU291cmNlJykKLSAgICAgICAgcHJpbnQoZGxnLnJlc3VsdCkKLSAgICBCdXR0b24ocm9vdCx0ZXh0PSdEaWFsb2cnLCBjb21tYW5kPXJ1bikucGFjaygpCi0gICAgcm9vdC5tYWlubG9vcCgpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKEdldEhlbHBTb3VyY2VEaWFsb2cpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWdTZWN0aW9uTmFtZURpYWxvZy5weSBiL0xpYi9pZGxlbGliL2NvbmZpZ1NlY3Rpb25OYW1lRGlhbG9nLnB5CmluZGV4IGIwNWUzOGUuLjUxMzc4MzYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZ1NlY3Rpb25OYW1lRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZ1NlY3Rpb25OYW1lRGlhbG9nLnB5CkBAIC04LDEwICs4LDExIEBACiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAogCiBjbGFzcyBHZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhUb3BsZXZlbCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgdGl0bGUsIG1lc3NhZ2UsIHVzZWRfbmFtZXMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBtZXNzYWdlLCB1c2VkX25hbWVzLCBfaHRlc3Q9RmFsc2UpOgogICAgICAgICAiIiIKICAgICAgICAgbWVzc2FnZSAtIHN0cmluZywgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHRvIGRpc3BsYXkKICAgICAgICAgdXNlZF9uYW1lcyAtIHN0cmluZyBjb2xsZWN0aW9uLCBuYW1lcyBhbHJlYWR5IGluIHVzZSBmb3IgdmFsaWRpdHkgY2hlY2sKKyAgICAgICAgX2h0ZXN0IC0gYm9vbCwgY2hhbmdlIGJveCBsb2NhdGlvbiB3aGVuIHJ1bm5pbmcgaHRlc3QKICAgICAgICAgIiIiCiAgICAgICAgIFRvcGxldmVsLl9faW5pdF9fKHNlbGYsIHBhcmVudCkKICAgICAgICAgc2VsZi5jb25maWd1cmUoYm9yZGVyd2lkdGg9NSkKQEAgLTMwLDExICszMSwxMiBAQAogICAgICAgICBzZWxmLm1lc3NhZ2VJbmZvLmNvbmZpZyh3aWR0aD1zZWxmLmZyYW1lTWFpbi53aW5mb19yZXF3aWR0aCgpKQogICAgICAgICBzZWxmLmdlb21ldHJ5KAogICAgICAgICAgICAgICAgICIrJWQrJWQiICUgKAotICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eCgpICsKLSAgICAgICAgICAgICAgICAocGFyZW50LndpbmZvX3dpZHRoKCkvMiAtIHNlbGYud2luZm9fcmVxd2lkdGgoKS8yKSwKLSAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArCi0gICAgICAgICAgICAgICAgKHBhcmVudC53aW5mb19oZWlnaHQoKS8yIC0gc2VsZi53aW5mb19yZXFoZWlnaHQoKS8yKQotICAgICAgICAgICAgICAgICkgKSAgI2NlbnRyZSBkaWFsb2cgb3ZlciBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R4KCkgKworICAgICAgICAgICAgICAgICAgICAocGFyZW50LndpbmZvX3dpZHRoKCkvMiAtIHNlbGYud2luZm9fcmVxd2lkdGgoKS8yKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKworICAgICAgICAgICAgICAgICAgICAoKHBhcmVudC53aW5mb19oZWlnaHQoKS8yIC0gc2VsZi53aW5mb19yZXFoZWlnaHQoKS8yKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgX2h0ZXN0IGVsc2UgMTAwKQorICAgICAgICAgICAgICAgICkgKSAgI2NlbnRyZSBkaWFsb2cgb3ZlciBwYXJlbnQgKG9yIGJlbG93IGh0ZXN0IGJveCkKICAgICAgICAgc2VsZi5kZWljb25pZnkoKSAgI2dlb21ldHJ5IHNldCwgdW5oaWRlCiAgICAgICAgIHNlbGYud2FpdF93aW5kb3coKQogCkBAIC05MiwxNSArOTQsNSBAQAogICAgIGltcG9ydCB1bml0dGVzdAogICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfY29uZmlnX25hbWUnLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKIAotICAgICMgYWxzbyBodW1hbiB0ZXN0IHRoZSBkaWFsb2cKLSAgICByb290ID0gVGsoKQotICAgIGRlZiBydW4oKToKLSAgICAgICAgZGxnPUdldENmZ1NlY3Rpb25OYW1lRGlhbG9nKHJvb3QsJ0dldCBOYW1lJywKLSAgICAgICAgICAgICAgICAiQWZ0ZXIgdGhlIHRleHQgZW50ZXJlZCB3aXRoIFtPa10gaXMgc3RyaXBwZWQsIDxub3RoaW5nPiwgIgotICAgICAgICAgICAgICAgICInYWJjJywgb3IgbW9yZSB0aGF0IDMwIGNoYXJzIGFyZSBlcnJvcnMuICIKLSAgICAgICAgICAgICAgICAiQ2xvc2Ugd2l0aCBhIHZhbGlkIGVudHJ5IChwcmludGVkKSwgW0NhbmNlbF0sIG9yIFtYXSIsCi0gICAgICAgICAgICAgICAgeydhYmMnfSkKLSAgICAgICAgcHJpbnQoZGxnLnJlc3VsdCkKLSAgICBNZXNzYWdlKHJvb3QsIHRleHQ9JycpLnBhY2soKSAgIyB3aWxsIGJlIG5lZWRlZCBmb3Igb2hlciBkaWFsb2cgdGVzdHMKLSAgICBCdXR0b24ocm9vdCwgdGV4dD0nQ2xpY2sgdG8gYmVnaW4gZGlhbG9nIHRlc3QnLCBjb21tYW5kPXJ1bikucGFjaygpCi0gICAgcm9vdC5tYWlubG9vcCgpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKEdldENmZ1NlY3Rpb25OYW1lRGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvZHluT3B0aW9uTWVudVdpZGdldC5weSBiL0xpYi9pZGxlbGliL2R5bk9wdGlvbk1lbnVXaWRnZXQucHkKaW5kZXggOTIyZGU5Ni4uODc3Y2ExYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvZHluT3B0aW9uTWVudVdpZGdldC5weQorKysgYi9MaWIvaWRsZWxpYi9keW5PcHRpb25NZW51V2lkZ2V0LnB5CkBAIC0yLDkgKzIsMTAgQEAKIE9wdGlvbk1lbnUgd2lkZ2V0IG1vZGlmaWVkIHRvIGFsbG93IGR5bmFtaWMgbWVudSByZWNvbmZpZ3VyYXRpb24KIGFuZCBzZXR0aW5nIG9mIGhpZ2hsaWdodHRoaWNrbmVzcwogIiIiCi1mcm9tIHRraW50ZXIgaW1wb3J0IE9wdGlvbk1lbnUKLWZyb20gdGtpbnRlciBpbXBvcnQgX3NldGl0Citmcm9tIHRraW50ZXIgaW1wb3J0IE9wdGlvbk1lbnUsIF9zZXRpdCwgVGssIFN0cmluZ1ZhciwgQnV0dG9uCisKIGltcG9ydCBjb3B5CitpbXBvcnQgcmUKIAogY2xhc3MgRHluT3B0aW9uTWVudShPcHRpb25NZW51KToKICAgICAiIiIKQEAgLTMzLDMgKzM0LDI0IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9X3NldGl0KHNlbGYudmFyaWFibGUsaXRlbSxzZWxmLmNvbW1hbmQpKQogICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgIHNlbGYudmFyaWFibGUuc2V0KHZhbHVlKQorCitkZWYgX2R5bl9vcHRpb25fbWVudShwYXJlbnQpOgorICAgIHJvb3QgPSBUaygpCisgICAgcm9vdC50aXRsZSgiVGV0cyBkeW5hbWljIG9wdGlvbiBtZW51IikKKyAgICB2YXIgPSBTdHJpbmdWYXIocm9vdCkKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisgICAgdmFyLnNldCgiT2xkIG9wdGlvbiBzZXQiKSAjU2V0IHRoZSBkZWZhdWx0IHZhbHVlCisgICAgZHluID0gRHluT3B0aW9uTWVudShyb290LHZhciwgIm9sZDEiLCJvbGQyIiwib2xkMyIsIm9sZDQiKQorICAgIGR5bi5wYWNrKCkKKworICAgIGRlZiB1cGRhdGUoKToKKyAgICAgICAgZHluLlNldE1lbnUoWyJuZXcxIiwibmV3MiIsIm5ldzMiLCJuZXc0Il0sdmFsdWU9Im5ldyBvcHRpb24gc2V0IikKKworICAgIGJ1dHRvbiA9IEJ1dHRvbihyb290LCB0ZXh0PSJDaGFuZ2Ugb3B0aW9uIHNldCIsIGNvbW1hbmQ9dXBkYXRlKQorICAgIGJ1dHRvbi5wYWNrKCkKKyAgICByb290Lm1haW5sb29wKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX2R5bl9vcHRpb25fbWVudSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2hlbHAudHh0IGIvTGliL2lkbGVsaWIvaGVscC50eHQKaW5kZXggZmY3ODZjNS4uNjM3OGEyZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaGVscC50eHQKKysrIGIvTGliL2lkbGVsaWIvaGVscC50eHQKQEAgLTEsMTQyICsxLDE4NSBAQAogW1NlZSB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgKiogVElQUyAqKiBvbiB1c2luZyBJRExFICEhXQogCi1DbGljayBvbiB0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYQotc2VwYXJhdGUgd2luZG93IGNvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZC4KK0lETEUgaXMgdGhlIFB5dGhvbiBJREUgYnVpbHQgd2l0aCB0aGUgdGtpbnRlciBHVUkgdG9vbGtpdC4KIAotRmlsZSBNZW51OgorSURMRSBoYXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKy1jb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgdGtpbnRlciBHVUkgdG9vbGtpdAorLWNyb3NzLXBsYXRmb3JtOiB3b3JrcyBvbiBXaW5kb3dzLCBVbml4LCBhbmQgT1MgWAorLW11bHRpLXdpbmRvdyB0ZXh0IGVkaXRvciB3aXRoIG11bHRpcGxlIHVuZG8sIFB5dGhvbiBjb2xvcml6aW5nLCBzbWFydCBpbmRlbnQsCitjYWxsIHRpcHMsIGFuZCBtYW55IG90aGVyIGZlYXR1cmVzCistUHl0aG9uIHNoZWxsIHdpbmRvdyAoYS5rLmEgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIpCistZGVidWdnZXIgKG5vdCBjb21wbGV0ZSwgYnV0IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzLCB2aWV3IGFuZCBzdGVwKQogCi0JTmV3IEZpbGUgICAgICAgICAtLSBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdwotCU9wZW4uLi4gICAgICAgICAgLS0gT3BlbiBhbiBleGlzdGluZyBmaWxlCi0JUmVjZW50IEZpbGVzLi4uICAtLSBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKLQlPcGVuIE1vZHVsZS4uLiAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKLQlDbGFzcyBCcm93c2VyICAgIC0tIFNob3cgY2xhc3NlcyBhbmQgbWV0aG9kcyBpbiBjdXJyZW50IGZpbGUKLQlQYXRoIEJyb3dzZXIgICAgIC0tIFNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMKK01lbnVzOgorCitJRExFIGhhcyB0d28gd2luZG93IHR5cGVzIHRoZSBTaGVsbCB3aW5kb3cgYW5kIHRoZSBFZGl0b3Igd2luZG93LiBJdCBpcworcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlZGl0b3Igd2luZG93cyBzaW11bHRhbmVvdXNseS4gSURMRSdzCittZW51cyBkeW5hbWljYWxseSBjaGFuZ2UgYmFzZWQgb24gd2hpY2ggd2luZG93IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gRWFjaCBtZW51Citkb2N1bWVudGVkIGJlbG93IGluZGljYXRlcyB3aGljaCB3aW5kb3cgdHlwZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIENsaWNrIG9uCit0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYSBzZXBhcmF0ZSB3aW5kb3cKK2NvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZCAoZm9yIFVuaXggYW5kIFdpbmRvd3Mgb25seSkuCisKK0ZpbGUgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgTmV3IEZpbGUgICAgICAgICAtLSBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdworICAgICAgICBPcGVuLi4uICAgICAgICAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgZmlsZQorICAgICAgICBPcGVuIE1vZHVsZS4uLiAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKyAgICAgICAgUmVjZW50IEZpbGVzLi4uICAtLSBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKKyAgICAgICAgQ2xhc3MgQnJvd3NlciAgICAtLSBTaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCisgICAgICAgIFBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWV0aG9kcwotCS0tLQotCVNhdmUgICAgICAgICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkCi0JCSAgICAgICAgICAgIHdpbmRvd3MgaGF2ZSBhICogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgICAgICAtLS0KKyAgICAgICAgU2F2ZSAgICAgICAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzIGhhdmUgYSAqIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKIAotCVNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcwotCQkgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBmaWxlCi0JU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCi0JCSAgICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQotCS0tLQotCVByaW50IFdpbmRvdyAgICAgLS0gUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCi0JRXhpdCAgICAgICAgICAgICAtLSBDbG9zZSBhbGwgd2luZG93cywgcXVpdCAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIFNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgICAgICAgU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICAgICAgIC0tLQorICAgICAgICBQcmludCBXaW5kb3cgICAgIC0tIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIEV4aXQgICAgICAgICAgICAgLS0gQ2xvc2UgYWxsIHdpbmRvd3MsIHF1aXQgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCi1FZGl0IE1lbnU6CitFZGl0IE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgogCi0JVW5kbyAgICAgICAgICAgICAtLSBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEEgbWF4aW11bSBvZiAxMDAwIGNoYW5nZXMgbWF5IGJlIHVuZG9uZSkKLQlSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBVbmRvICAgICAgICAgICAgIC0tIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkgYmUgdW5kb25lKQorICAgICAgICBSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgotCS0tLQotCUZpbmQuLi4gICAgICAgICAgLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IHdpdGggbWFueSBvcHRpb25zCi0JRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKLQlGaW5kIFNlbGVjdGlvbiAgIC0tIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCi0JRmluZCBpbiBGaWxlcy4uLiAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggZm9yIHNlYXJjaGluZyBmaWxlcwotCVJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94Ci0JR28gdG8gTGluZSAgICAgICAtLSBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCi0JU2hvdyBDYWxsdGlwICAgICAtLSBPcGVuIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW0gaGludHMKLQlTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcwotCQkJICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKLQlTaG93IFBhcmVucwkgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcwotCUV4cGFuZCBXb3JkICAgICAgLS0gRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIKLQkJICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICBTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgorICAgICAgICAtLS0KKyAgICAgICAgRmluZC4uLiAgICAgICAgICAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggd2l0aCBtYW55IG9wdGlvbnMKKyAgICAgICAgRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKKyAgICAgICAgRmluZCBTZWxlY3Rpb24gICAtLSBTZWFyY2ggZm9yIHRoZSBzdHJpbmcgaW4gdGhlIHNlbGVjdGlvbgorICAgICAgICBGaW5kIGluIEZpbGVzLi4uIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCBmb3Igc2VhcmNoaW5nIGZpbGVzCisgICAgICAgIFJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94CisgICAgICAgIEdvIHRvIExpbmUgICAgICAgLS0gQXNrIGZvciBhIGxpbmUgbnVtYmVyIGFuZCBzaG93IHRoYXQgbGluZQorICAgICAgICBFeHBhbmQgV29yZCAgICAgIC0tIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBleHBhbnNpb24KKyAgICAgICAgU2hvdyBDYWxsdGlwICAgICAtLSBBZnRlciBhbiB1bmNsb3NlZCBwYXJlbnRoZXNpcyBmb3IgYSBmdW5jdGlvbiwgb3BlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzCisgICAgICAgIFNob3cgUGFyZW5zICAgICAgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcworICAgICAgICBTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKIAotRm9ybWF0IE1lbnUgKG9ubHkgaW4gRWRpdCB3aW5kb3cpOgorRm9ybWF0IE1lbnUgKEVkaXRvciB3aW5kb3cgb25seSk6CiAKLQlJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IDQgc3BhY2VzCi0JRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IDQgc3BhY2VzCi0JQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKLQlVbmNvbW1lbnQgUmVnaW9uICAgIC0tIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcwotCVRhYmlmeSBSZWdpb24gICAgICAgLS0gVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzCi0JCShOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKLQlVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSByaWdodCBudW1iZXIgb2Ygc3BhY2VzCi0JTmV3IEluZGVudCBXaWR0aC4uLiAtLSBPcGVuIGRpYWxvZyB0byBjaGFuZ2UgaW5kZW50IHdpZHRoCi0JRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaAorICAgICAgICBJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVW5jb21tZW50IFJlZ2lvbiAgICAtLSBSZW1vdmUgbGVhZGluZyAjIG9yICMjIGZyb20gc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVGFiaWZ5IFJlZ2lvbiAgICAgICAtLSBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMuCisgICAgICAgICAgICAgICAgKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZyA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQorICAgICAgICBVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSBjb3JyZW50IG51bWJlciBvZiBzcGFjZXMKKyAgICAgICAgVG9nZ2xlIHRhYnMgICAgICAgICAtLSBPcGVuIGEgZGlhbG9nIHRvIHN3aXRjaCBiZXR3ZWVuIGluZGVudGluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzIGFuZCB0YWJzLgorICAgICAgICBOZXcgSW5kZW50IFdpZHRoLi4uIC0tIE9wZW4gYSBkaWFsb2cgdG8gY2hhbmdlIGluZGVudCB3aWR0aC4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIGRlZmF1bHQgYnkgdGhlIFB5dGhvbiBjb21tdW5pdHkgaXMgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcy4KKyAgICAgICAgRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC4gQWxsIGxpbmVzIGluIHRoZSBwYXJhZ3JhcGggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZCB0byBsZXNzIHRoYW4gODAgY29sdW1ucy4KKyAgICAgICAgLS0tCisgICAgICAgIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgLS0gUmVtb3ZlZCBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGxhc3Qgbm9uLXNwYWNlIGNoYXJhY3RlcgogCi1SdW4gTWVudSAob25seSBpbiBFZGl0IHdpbmRvdyk6CitSdW4gTWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KToKIAotCVB5dGhvbiBTaGVsbCAtLSBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBzaGVsbCB3aW5kb3cKLQktLS0KLQlDaGVjayBNb2R1bGUgLS0gUnVuIGEgc3ludGF4IGNoZWNrIG9uIHRoZSBtb2R1bGUKLQlSdW4gTW9kdWxlICAgLS0gRXhlY3V0ZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKKyAgICAgICAgUHl0aG9uIFNoZWxsIC0tIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIHNoZWxsIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2hlY2sgTW9kdWxlIC0tIENoZWNrIHRoZSBzeW50YXggb2YgdGhlIG1vZHVsZSBjdXJyZW50bHkgb3BlbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvciB3aW5kb3cuICBJZiB0aGUgbW9kdWxlIGhhcyBub3QgYmVlbiBzYXZlZCBJRExFCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZSBjb2RlLgorICAgICAgICBSdW4gTW9kdWxlICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlIHRoZSBjdXJyZW50bHkgb3BlbiBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBzYXZlZCBJRExFIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLgogCi1TaGVsbCBNZW51IChvbmx5IGluIFNoZWxsIHdpbmRvdyk6CitTaGVsbCBNZW51IChTaGVsbCB3aW5kb3cgb25seSk6CiAKLQlWaWV3IExhc3QgUmVzdGFydCAtLSBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCByZXN0YXJ0Ci0JUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBhIGZyZXNoIGVudmlyb25tZW50CisgICAgICAgIFZpZXcgTGFzdCBSZXN0YXJ0IC0tIFNjcm9sbCB0aGUgc2hlbGwgd2luZG93IHRvIHRoZSBsYXN0IFNoZWxsIHJlc3RhcnQKKyAgICAgICAgUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50CiAKLURlYnVnIE1lbnUgKG9ubHkgaW4gU2hlbGwgd2luZG93KToKK0RlYnVnIE1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KToKIAotCUdvIHRvIEZpbGUvTGluZSAgIC0tIGxvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUKLQkJICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUKLQlEZWJ1Z2dlciAodG9nZ2xlKSAtLSBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlcgotCVN0YWNrIFZpZXdlciAgICAgIC0tIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KLQlBdXRvLW9wZW4gU3RhY2sgVmlld2VyICh0b2dnbGUpIC0tIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjaworICAgICAgICBHbyB0byBGaWxlL0xpbmUgICAtLSBMb29rIGFyb3VuZCB0aGUgaW5zZXJ0IHBvaW50IGZvciBhIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCB0byB2aWV3IHRoZSBzb3VyY2UgbGluZXMgcmVmZXJlbmNlZCBpbiBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24gdHJhY2ViYWNrLiAgQXZhaWxhYmxlIGluIHRoZSBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgb2YgdGhlIFNoZWxsIHdpbmRvdy4KKyAgICAgICAgRGVidWdnZXIgKHRvZ2dsZSkgLS0gVGhpcyBmZWF0dXJlIGlzIG5vdCBjb21wbGV0ZSBhbmQgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlcmltZW50YWwuIFJ1biBjb21tYW5kcyBpbiB0aGUgc2hlbGwgdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyLgorICAgICAgICBTdGFjayBWaWV3ZXIgICAgICAtLSBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCisgICAgICAgIEF1dG8tb3BlbiBTdGFjayBWaWV3ZXIgKHRvZ2dsZSkgLS0gVG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayB2aWV3ZXIgb24gdW5oYW5kbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uCiAKLU9wdGlvbnMgTWVudToKK09wdGlvbnMgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CiAKLQlDb25maWd1cmUgSURMRSAtLSBPcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cuICBGb250cywgaW5kZW50YXRpb24sCisgICAgICAgIENvbmZpZ3VyZSBJRExFIC0tIE9wZW4gYSBjb25maWd1cmF0aW9uIGRpYWxvZy4gIEZvbnRzLCBpbmRlbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5YmluZGluZ3MsIGFuZCBjb2xvciB0aGVtZXMgbWF5IGJlIGFsdGVyZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIEFkZGl0aW9uYWwgSGVscAotICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCi0JCQkgIAotCQkJICBPbiBPUyBYIHRoaXMgbWVudSBpcyBub3QgcHJlc2VudCwgdXNlCi0JCQkgIG1lbnUgJ0lETEUgLT4gUHJlZmVyZW5jZXMuLi4nIGluc3RlYWQuCi0JLS0tCi0JQ29kZSBDb250ZXh0IC0tCSAgT3BlbiBhIHBhbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdCB3aW5kb3cgd2hpY2gKLQkJCSAgc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24gb2YgY29kZQotCQkJICB3aGljaCBpcyBzY3JvbGxpbmcgb2ZmIHRoZSB0b3Agb3IgdGhlIHdpbmRvdy4KLQkJCSAgKE5vdCBwcmVzZW50IGluIFNoZWxsIHdpbmRvdy4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIGFkZGl0aW9uYWwgSGVscAorICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCiAKLVdpbmRvd3MgTWVudToKKyAgICAgICAgLS0tCisgICAgICAgIENvZGUgQ29udGV4dCAodG9nZ2xlKSAtLSBPcGVuIGEgcGFuZSBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0IHdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNvZGUgd2hpY2ggaXMgc2Nyb2xsaW5nIG9mZiB0aGUgdG9wIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiBUaGlzIGlzIG5vdCBwcmVzZW50IGluIHRoZSBTaGVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93IG9ubHkgdGhlIEVkaXRvciB3aW5kb3cuCiAKLQlab29tIEhlaWdodCAtLSB0b2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBjb25maWd1cmVkIHNpemUKLQlhbmQgbWF4aW11bSBoZWlnaHQuCi0JLS0tCi0JVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOwotCXNlbGVjdCBvbmUgdG8gYnJpbmcgaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZgotCW5lY2Vzc2FyeSkuCitXaW5kb3dzIE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgorCisgICAgICAgIFpvb20gSGVpZ2h0IC0tIFRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG5vcm1hbCBzaXplICg0MHg4MCBpbml0aWFsCisgICAgICAgIHNldHRpbmcpIGFuZCBtYXhpbXVtIGhlaWdodC4gIFRoZSBpbml0aWFsIHNpemUgaXMgaW4gdGhlIENvbmZpZ3VyZQorICAgICAgICBJRExFIGRpYWxvZyB1bmRlciB0aGUgZ2VuZXJhbCB0YWIuCisgICAgICAgIC0tLQorICAgICAgICBUaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7CisgICAgICAgIHNlbGVjdCBvbmUgdG8gYnJpbmcgaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZgorICAgICAgICBuZWNlc3NhcnkpLgogCiBIZWxwIE1lbnU6CiAKLQlBYm91dCBJRExFICAtLSBWZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMKLQlJRExFIFJlYWRtZSAtLSBCYWNrZ3JvdW5kIGRpc2N1c3Npb24gYW5kIGNoYW5nZSBkZXRhaWxzCi0JLS0tCi0JSURMRSBIZWxwICAgLS0gRGlzcGxheSB0aGlzIGZpbGUKLQlQeXRob24gRG9jcyAtLSBBY2Nlc3MgbG9jYWwgUHl0aG9uIGRvY3VtZW50YXRpb24sIGlmCi0JCSAgICAgICBpbnN0YWxsZWQuICBPdGhlcndpc2UsIGFjY2VzcyB3d3cucHl0aG9uLm9yZy4KLQktLS0KLQkoQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUpCisgICAgICAgIEFib3V0IElETEUgIC0tIFZlcnNpb24sIGNvcHlyaWdodCwgbGljZW5zZSwgY3JlZGl0cworICAgICAgICAtLS0KKyAgICAgICAgSURMRSBIZWxwICAgLS0gRGlzcGxheSB0aGlzIGZpbGUgd2hpY2ggaXMgYSBoZWxwIGZpbGUgZm9yIElETEUKKyAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsaW5nIHRoZSBtZW51IG9wdGlvbnMsIGJhc2ljIGVkaXRpbmcgYW5kIG5hdmlnYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciB0aXBzLgorICAgICAgICBQeXRob24gRG9jcyAtLSBBY2Nlc3MgbG9jYWwgUHl0aG9uIGRvY3VtZW50YXRpb24sIGlmCisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4gIE9yIHdpbGwgc3RhcnQgYSB3ZWIgYnJvd3NlciBhbmQgb3BlbgorICAgICAgICAgICAgICAgICAgICAgICBkb2NzLnB5dGhvbi5vcmcgc2hvd2luZyB0aGUgbGF0ZXN0IFB5dGhvbiBkb2N1bWVudGF0aW9uLgorICAgICAgICAtLS0KKyAgICAgICAgQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUgd2l0aCB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nIHVuZGVyIHRoZSBHZW5lcmFsIHRhYi4KIAotRWRpdCBjb250ZXh0IG1lbnUgKFJpZ2h0LWNsaWNrIC8gQ29udHJvbC1jbGljayBvbiBPUyBYIGluIEVkaXQgd2luZG93KToKK0VkaXRvciBjb250ZXh0IG1lbnUgKFJpZ2h0LWNsaWNrIC8gQ29udHJvbC1jbGljayBvbiBPUyBYIGluIEVkaXQgd2luZG93KToKIAotCUN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKKyAgICAgICAgQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KLQlDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCi0JUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93Ci0JU2V0IEJyZWFrcG9pbnQgICAtLSBTZXRzIGEgYnJlYWtwb2ludCAod2hlbiBkZWJ1Z2dlciBvcGVuKQotCUNsZWFyIEJyZWFrcG9pbnQgLS0gQ2xlYXJzIHRoZSBicmVha3BvaW50IG9uIHRoYXQgbGluZQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICBTZXQgQnJlYWtwb2ludCAgIC0tIFNldHMgYSBicmVha3BvaW50LiBCcmVha3BvaW50cyBhcmUgb25seSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgZGVidWdnZXIgaXMgb3Blbi4KKyAgICAgICAgQ2xlYXIgQnJlYWtwb2ludCAtLSBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lCiAKIFNoZWxsIGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gU2hlbGwgd2luZG93KToKIAotCUN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKKyAgICAgICAgQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KLQlDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCi0JUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93Ci0JLS0tCi0JR28gdG8gZmlsZS9saW5lICAtLSBTYW1lIGFzIGluIERlYnVnIG1lbnUKKyAgICAgICAgQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgICAgICBQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKKyAgICAgICAgLS0tCisgICAgICAgIEdvIHRvIGZpbGUvbGluZSAgLS0gU2FtZSBhcyBpbiBEZWJ1ZyBtZW51CiAKIAogKiogVElQUyAqKgpAQCAtMTQ0LDE1OSArMTg3LDE4MiBAQAogCiBBZGRpdGlvbmFsIEhlbHAgU291cmNlczoKIAotCVdpbmRvd3MgdXNlcnMgY2FuIEdvb2dsZSBvbiB6b3Blc2hlbGYuY2htIHRvIGFjY2VzcyBab3BlIGhlbHAgZmlsZXMgaW4KLQl0aGUgV2luZG93cyBoZWxwIGZvcm1hdC4gIFRoZSBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBmZWF0dXJlIG9mIHRoZQotCWNvbmZpZ3VyYXRpb24gR1VJIHN1cHBvcnRzIC5jaG0sIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGV0eXBlcwotCXN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuICBTdXBwbHkgYSBNZW51IEl0ZW0gdGl0bGUsIGFuZCBlbnRlciB0aGUKLQlsb2NhdGlvbiBpbiB0aGUgSGVscCBGaWxlIFBhdGggc2xvdCBvZiB0aGUgTmV3IEhlbHAgU291cmNlIGRpYWxvZy4gIFVzZQotCWh0dHA6Ly8gYW5kL29yIHd3dy4gdG8gaWRlbnRpZnkgZXh0ZXJuYWwgVVJMcywgb3IgZG93bmxvYWQgdGhlIGZpbGUgYW5kCi0JYnJvd3NlIGZvciBpdHMgcGF0aCBvbiB5b3VyIG1hY2hpbmUgdXNpbmcgdGhlIEJyb3dzZSBidXR0b24uCisgICAgICAgIFdpbmRvd3MgdXNlcnMgY2FuIEdvb2dsZSBvbiB6b3Blc2hlbGYuY2htIHRvIGFjY2VzcyBab3BlIGhlbHAgZmlsZXMgaW4KKyAgICAgICAgdGhlIFdpbmRvd3MgaGVscCBmb3JtYXQuICBUaGUgQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgZmVhdHVyZSBvZiB0aGUKKyAgICAgICAgY29uZmlndXJhdGlvbiBHVUkgc3VwcG9ydHMgLmNobSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXR5cGVzCisgICAgICAgIHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuICBTdXBwbHkgYSBNZW51IEl0ZW0gdGl0bGUsIGFuZCBlbnRlciB0aGUKKyAgICAgICAgbG9jYXRpb24gaW4gdGhlIEhlbHAgRmlsZSBQYXRoIHNsb3Qgb2YgdGhlIE5ldyBIZWxwIFNvdXJjZSBkaWFsb2cuICBVc2UKKyAgICAgICAgaHR0cDovLyBhbmQvb3Igd3d3LiB0byBpZGVudGlmeSBleHRlcm5hbCBVUkxzLCBvciBkb3dubG9hZCB0aGUgZmlsZSBhbmQKKyAgICAgICAgYnJvd3NlIGZvciBpdHMgcGF0aCBvbiB5b3VyIG1hY2hpbmUgdXNpbmcgdGhlIEJyb3dzZSBidXR0b24uCiAKLQlBbGwgdXNlcnMgY2FuIGFjY2VzcyB0aGUgZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nCi0JdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgd3d3LnB5dGhvbi5vcmcvZG9jLiAgU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQKLQlvciByZW1vdmVkIGZyb20gdGhlIEhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyBDb25maWd1cmUgSURMRS4KKyAgICAgICAgQWxsIHVzZXJzIGNhbiBhY2Nlc3MgdGhlIGV4dGVuc2l2ZSBzb3VyY2VzIG9mIGhlbHAsIGluY2x1ZGluZworICAgICAgICB0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCBkb2NzLnB5dGhvbi5vcmcuICBTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZAorICAgICAgICBvciByZW1vdmVkIGZyb20gdGhlIEhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyBDb25maWd1cmUgSURMRS4KIAogQmFzaWMgZWRpdGluZyBhbmQgbmF2aWdhdGlvbjoKIAotCUJhY2tzcGFjZSBkZWxldGVzIGNoYXIgdG8gdGhlIGxlZnQ7IERFTCBkZWxldGVzIGNoYXIgdG8gdGhlIHJpZ2h0LgotCUNvbnRyb2wtYmFja3NwYWNlIGRlbGV0ZXMgd29yZCBsZWZ0LCBDb250cm9sLURFTCBkZWxldGVzIHdvcmQgcmlnaHQuCi0JQXJyb3cga2V5cyBhbmQgUGFnZSBVcC9Eb3duIG1vdmUgYXJvdW5kLgotCUNvbnRyb2wtbGVmdC9yaWdodCBBcnJvdyBtb3ZlcyBieSB3b3JkcyBpbiBhIHN0cmFuZ2UgYnV0IHVzZWZ1bCB3YXkuCi0JSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmUuCi0JQ29udHJvbC1Ib21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgZmlsZS4KLQlTb21lIHVzZWZ1bCBFbWFjcyBiaW5kaW5ncyBhcmUgaW5oZXJpdGVkIGZyb20gVGNsL1RrOgotCQlDb250cm9sLWEgICAgIGJlZ2lubmluZyBvZiBsaW5lCi0JCUNvbnRyb2wtZSAgICAgZW5kIG9mIGxpbmUKLQkJQ29udHJvbC1rICAgICBraWxsIGxpbmUgKGJ1dCBkb2Vzbid0IHB1dCBpdCBpbiBjbGlwYm9hcmQpCi0JCUNvbnRyb2wtbCAgICAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAotCVN0YW5kYXJkIFdpbmRvd3MgYmluZGluZ3MgbWF5IHdvcmsgb24gdGhhdCBwbGF0Zm9ybS4KLQlLZXliaW5kaW5ncyBhcmUgc2VsZWN0ZWQgaW4gdGhlIFNldHRpbmdzIERpYWxvZywgbG9vayB0aGVyZS4KKyAgICAgICAgQmFja3NwYWNlIGRlbGV0ZXMgY2hhciB0byB0aGUgbGVmdDsgREVMIGRlbGV0ZXMgY2hhciB0byB0aGUgcmlnaHQuCisgICAgICAgIENvbnRyb2wtYmFja3NwYWNlIGRlbGV0ZXMgd29yZCBsZWZ0LCBDb250cm9sLURFTCBkZWxldGVzIHdvcmQgcmlnaHQuCisgICAgICAgIEFycm93IGtleXMgYW5kIFBhZ2UgVXAvRG93biBtb3ZlIGFyb3VuZC4KKyAgICAgICAgQ29udHJvbC1sZWZ0L3JpZ2h0IEFycm93IG1vdmVzIGJ5IHdvcmRzIGluIGEgc3RyYW5nZSBidXQgdXNlZnVsIHdheS4KKyAgICAgICAgSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmUuCisgICAgICAgIENvbnRyb2wtSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGZpbGUuCisgICAgICAgIFNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6CisgICAgICAgICAgICAgICAgQ29udHJvbC1hICAgICBiZWdpbm5pbmcgb2YgbGluZQorICAgICAgICAgICAgICAgIENvbnRyb2wtZSAgICAgZW5kIG9mIGxpbmUKKyAgICAgICAgICAgICAgICBDb250cm9sLWsgICAgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKKyAgICAgICAgICAgICAgICBDb250cm9sLWwgICAgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKKyAgICAgICAgU3RhbmRhcmQga2V5YmluZGluZ3MgKGxpa2UgQ29udHJvbC1jIHRvIGNvcHkgYW5kIENvbnRyb2wtdiB0bworICAgICAgICBwYXN0ZSkgbWF5IHdvcmsuICBLZXliaW5kaW5ncyBhcmUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ3VyZSBJRExFCisgICAgICAgIGRpYWxvZy4KIAogQXV0b21hdGljIGluZGVudGF0aW9uOgogCi0JQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcwotCShpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMKLQkoYnJlYWssIHJldHVybiBldGMuKSB0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZwotCWluZGVudGF0aW9uLCBCYWNrc3BhY2UgZGVsZXRlcyB1cCB0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gIFRhYgotCWluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24KLQlJbmRlbnQgV2lkdGguICAoTi5CLiBDdXJyZW50bHkgdGFicyBhcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUKLQl0byBUY2wvVGsgaXNzdWVzLikKKyAgICAgICAgQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcworICAgICAgICAoaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgYnkgb25lIHRhYikuICBBZnRlciBjZXJ0YWluIGtleXdvcmRzCisgICAgICAgIChicmVhaywgcmV0dXJuIGV0Yy4pIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nCisgICAgICAgIGluZGVudGF0aW9uLCBCYWNrc3BhY2UgZGVsZXRlcyB1cCB0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gIFRhYgorICAgICAgICBpbnNlcnRzIHNwYWNlcyAoaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgb25lIHRhYiksIG51bWJlciBkZXBlbmRzIG9uCisgICAgICAgIEluZGVudCBXaWR0aC4gQ3VycmVudGx5IHRhYnMgYXJlIHJlc3RyaWN0ZWQgdG8gZm91ciBzcGFjZXMgZHVlCisgICAgICAgIHRvIFRjbC9UayBsaW1pdGF0aW9ucy4KIAogICAgICAgICBTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQgbWVudS4KIAogQ29tcGxldGlvbnM6CiAKLQlDb21wbGV0aW9ucyBhcmUgc3VwcGxpZWQgZm9yIGZ1bmN0aW9ucywgY2xhc3NlcywgYW5kIGF0dHJpYnV0ZXMgb2YKLQljbGFzc2VzLCBib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuICBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZAotCWZvciBmaWxlbmFtZXMuCisgICAgICAgIENvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZgorICAgICAgICBjbGFzc2VzLCBib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuICBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZAorICAgICAgICBmb3IgZmlsZW5hbWVzLgogCi0JVGhlIEF1dG9Db21wbGV0ZVdpbmRvdyAoQUNXKSB3aWxsIG9wZW4gYWZ0ZXIgYSBwcmVkZWZpbmVkIGRlbGF5Ci0JKGRlZmF1bHQgaXMgdHdvIHNlY29uZHMpIGFmdGVyIGEgJy4nIG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzCi0JdHlwZWQuICBJZiBhZnRlciBvbmUgb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIKLQljaGFyYWN0ZXJzKSB5b3UgdHlwZSBhIFRhYiB0aGUgQUNXIHdpbGwgb3BlbiBpbW1lZGlhdGVseSBpZiBhIHBvc3NpYmxlCi0JY29udGludWF0aW9uIGlzIGZvdW5kLgorICAgICAgICBUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkKKyAgICAgICAgKGRlZmF1bHQgaXMgdHdvIHNlY29uZHMpIGFmdGVyIGEgJy4nIG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzCisgICAgICAgIHR5cGVkLiAgSWYgYWZ0ZXIgb25lIG9mIHRob3NlIGNoYXJhY3RlcnMgKHBsdXMgemVybyBvciBtb3JlIG90aGVyCisgICAgICAgIGNoYXJhY3RlcnMpIGEgdGFiIGlzIHR5cGVkIHRoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUKKyAgICAgICAgY29udGludWF0aW9uIGlzIGZvdW5kLgogCi0JSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQotCVRhYiB3aWxsIHN1cHBseSB0aGF0IGNvbXBsZXRpb24gd2l0aG91dCBvcGVuaW5nIHRoZSBBQ1cuCisgICAgICAgIElmIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIGNvbXBsZXRpb24gZm9yIHRoZSBjaGFyYWN0ZXJzIGVudGVyZWQsIGEKKyAgICAgICAgdGFiIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KIAotCSdTaG93IENvbXBsZXRpb25zJyB3aWxsIGZvcmNlIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3cuICBJbiBhbiBlbXB0eQotCXN0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9uIGEKLQlibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAotCWNsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuICBJZiBzb21lCi0JY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KKyAgICAgICAgJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdywgYnkgZGVmYXVsdCB0aGUKKyAgICAgICAgQ29udHJvbC1zcGFjZSBrZXlzIHdpbGwgb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gIEluIGFuIGVtcHR5CisgICAgICAgIHN0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9uIGEKKyAgICAgICAgYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKKyAgICAgICAgY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gIElmIHNvbWUKKyAgICAgICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KIAotCUlmIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGlzIHR5cGVkLCB0aGUgQUNXIHNlbGVjdGlvbiB3aWxsIGp1bXAgdG8gdGhlCi0JZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuIEVudGVyaW5nIGEgVGFiIHdpbGwgY2F1c2UKLQl0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXQgd2luZG93IG9yCi0JU2hlbGwuICBUd28gVGFicyBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcwotCXdpbGwgUmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2UKLQlzZWxlY3Rpb24sIGFuZCB0aGUgc2Nyb2xsd2hlZWwgYWxsIG9wZXJhdGUgb24gdGhlIEFDVy4KKyAgICAgICAgSWYgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKKyAgICAgICAgZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuIEVudGVyaW5nIGEgdGFiIHdpbGwgY2F1c2UKKyAgICAgICAgdGhlIGxvbmdlc3Qgbm9uLWFtYmlndW91cyBtYXRjaCB0byBiZSBlbnRlcmVkIGluIHRoZSBFZGl0IHdpbmRvdyBvcgorICAgICAgICBTaGVsbC4gIFR3byB0YWJzIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCisgICAgICAgIHdpbGwgcmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2UKKyAgICAgICAgc2VsZWN0aW9uLCBhbmQgdGhlIHNjcm9sbCB3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgogCi0JJ0hpZGRlbicgYXR0cmlidXRlcyBjYW4gYmUgYWNjZXNzZWQgYnkgdHlwaW5nIHRoZSBiZWdpbm5pbmcgb2YgaGlkZGVuCi0JbmFtZSBhZnRlciBhICcuJy4gIGUuZy4gJ18nLiAgVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAotCSdfX2FsbF9fJyBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy4KKyAgICAgICAgIkhpZGRlbiIgYXR0cmlidXRlcyBjYW4gYmUgYWNjZXNzZWQgYnkgdHlwaW5nIHRoZSBiZWdpbm5pbmcgb2YgaGlkZGVuCisgICAgICAgIG5hbWUgYWZ0ZXIgYSAnLicsICBlLmcuICdfJy4gIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKKyAgICAgICAgJ19fYWxsX18nIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgogCi0JQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKKyAgICAgICAgQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKIAotCUNvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gIE5hbWVzIGluCi0JYW4gRWRpdCB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgX19tYWluX18gb3Igc3lzLm1vZHVsZXMgd2lsbCBub3QgYmUKLQlmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzCi0Jc2l0dWF0aW9uLiAgTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluCi0Jc3lzLm1vZHVsZXMsIHNvIG11Y2ggY2FuIGJlIGZvdW5kIGJ5IGRlZmF1bHQsIGUuZy4gdGhlIHJlIG1vZHVsZS4KKyAgICAgICAgQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiAgTmFtZXMgaW4KKyAgICAgICAgYW4gRWRpdG9yIHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBfX21haW5fXyBvciBzeXMubW9kdWxlcyB3aWxsIG5vdCBiZQorICAgICAgICBmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzCisgICAgICAgIHNpdHVhdGlvbi4gIE5vdGUgdGhhdCBJRExFIGl0c2VsZiBwbGFjZXMgcXVpdGUgYSBmZXcgbW9kdWxlcyBpbgorICAgICAgICBzeXMubW9kdWxlcywgc28gbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgogCi0JSWYgeW91IGRvbid0IGxpa2UgdGhlIEFDVyBwb3BwaW5nIHVwIHVuYmlkZGVuLCBzaW1wbHkgbWFrZSB0aGUgZGVsYXkKLQlsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT1RPSCwgeW91IGNvdWxkIG1ha2UgdGhlIGRlbGF5IHplcm8uCi0KLQlZb3UgY291bGQgYWxzbyBzd2l0Y2ggb2ZmIHRoZSBDYWxsVGlwcyBleHRlbnNpb24uICAoV2Ugd2lsbCBiZSBhZGRpbmcKLQlhIGRlbGF5IHRvIHRoZSBjYWxsIHRpcCB3aW5kb3cuKQorICAgICAgICBJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQorICAgICAgICBsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT3IgYW5vdGhlciBvcHRpb24gaXMgdGhlIGRlbGF5IGNvdWxkCisgICAgICAgIGJlIHNldCB0byB6ZXJvLiBBbm90aGVyIGFsdGVybmF0aXZlIHRvIHByZXZlbnRpbmcgQUNXIHBvcHVwcyBpcyB0bworICAgICAgICBkaXNhYmxlIHRoZSBjYWxsIHRpcHMgZXh0ZW5zaW9uLgogCiBQeXRob24gU2hlbGwgd2luZG93OgogCi0JQ29udHJvbC1jIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQuCi0JQ29udHJvbC1kIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0ID4+PiBwcm9tcHQuCisgICAgICAgIENvbnRyb2wtYyBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kLgorICAgICAgICBDb250cm9sLWQgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgPj4+IHByb21wdC4KKyAgICAgICAgQWx0LS8gZXhwYW5kIHdvcmQgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZy4KIAogICAgIENvbW1hbmQgaGlzdG9yeToKIAotCUFsdC1wIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuCi0JQWx0LW4gcmV0cmlldmVzIG5leHQuCi0JICAgICAgKFRoZXNlIGFyZSBDb250cm9sLXAsIENvbnRyb2wtbiBvbiBPUyBYKQotCVJldHVybiB3aGlsZSBjdXJzb3IgaXMgb24gYSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQuCi0JRXhwYW5kIHdvcmQgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZy4KKyAgICAgICAgQWx0LXAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4gT24gT1MgWAorICAgICAgICB1c2UgQ29udHJvbC1wLgorICAgICAgICBBbHQtbiByZXRyaWV2ZXMgbmV4dC4gT24gT1MgWCB1c2UgQ29udHJvbC1uLgorICAgICAgICBSZXR1cm4gd2hpbGUgY3Vyc29yIGlzIG9uIGEgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kLgogCiAgICAgU3ludGF4IGNvbG9yczoKIAotCVRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkIiwgc28geW91IG1heQotCW9jY2FzaW9uYWxseSBzZWUgdW5jb2xvcml6ZWQgdGV4dC4gIFRvIGNoYW5nZSB0aGUgY29sb3IKLQlzY2hlbWUsIHVzZSB0aGUgQ29uZmlndXJlIElETEUgLyBIaWdobGlnaHRpbmcgZGlhbG9nLgorICAgICAgICBUaGUgY29sb3JpbmcgaXMgYXBwbGllZCBpbiBhIGJhY2tncm91bmQgInRocmVhZCIsIHNvIHlvdSBtYXkKKyAgICAgICAgb2NjYXNpb25hbGx5IHNlZSB1bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvcgorICAgICAgICBzY2hlbWUsIHVzZSB0aGUgQ29uZmlndXJlIElETEUgLyBIaWdobGlnaHRpbmcgZGlhbG9nLgogCiAgICAgUHl0aG9uIGRlZmF1bHQgc3ludGF4IGNvbG9yczoKIAotCUtleXdvcmRzCW9yYW5nZQotCUJ1aWx0aW5zCXJveWFsIHB1cnBsZQotCVN0cmluZ3MJCWdyZWVuCi0JQ29tbWVudHMJcmVkCi0JRGVmaW5pdGlvbnMJYmx1ZQorICAgICAgICBLZXl3b3JkcyAgICAgICAgb3JhbmdlCisgICAgICAgIEJ1aWx0aW5zICAgICAgICByb3lhbCBwdXJwbGUKKyAgICAgICAgU3RyaW5ncyAgICAgICAgIGdyZWVuCisgICAgICAgIENvbW1lbnRzICAgICAgICByZWQKKyAgICAgICAgRGVmaW5pdGlvbnMgICAgIGJsdWUKIAogICAgIFNoZWxsIGRlZmF1bHQgY29sb3JzOgogCi0JQ29uc29sZSBvdXRwdXQJYnJvd24KLQlzdGRvdXQJCWJsdWUKLQlzdGRlcnIJCXJlZAotCXN0ZGluCQlibGFjaworICAgICAgICBDb25zb2xlIG91dHB1dCAgYnJvd24KKyAgICAgICAgc3Rkb3V0ICAgICAgICAgIGJsdWUKKyAgICAgICAgc3RkZXJyICAgICAgICAgIHJlZAorICAgICAgICBzdGRpbiAgICAgICAgICAgYmxhY2sKIAogT3RoZXIgcHJlZmVyZW5jZXM6CiAKLQlUaGUgZm9udCBwcmVmZXJlbmNlcywga2V5YmluZGluZywgYW5kIHN0YXJ0dXAgcHJlZmVyZW5jZXMgY2FuCi0JYmUgY2hhbmdlZCB1c2luZyB0aGUgU2V0dGluZ3MgZGlhbG9nLgorICAgICAgICBUaGUgZm9udCBwcmVmZXJlbmNlcywgaGlnaGxpZ2h0aW5nLCBrZXlzLCBhbmQgZ2VuZXJhbCBwcmVmZXJlbmNlcyBjYW4KKyAgICAgICAgYmUgY2hhbmdlZCB2aWEgdGhlIENvbmZpZ3VyZSBJRExFIG1lbnUgb3B0aW9uLiAgQmUgc3VyZSB0byBub3RlIHRoYXQKKyAgICAgICAga2V5cyBjYW4gYmUgdXNlciBkZWZpbmVkLCBJRExFIHNoaXBzIHdpdGggZm91ciBidWlsdCBpbiBrZXkgc2V0cy4gSW4KKyAgICAgICAgYWRkaXRpb24gYSB1c2VyIGNhbiBjcmVhdGUgYSBjdXN0b20ga2V5IHNldCBpbiB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nIHVuZGVyIHRoZSBrZXlzIHRhYi4KIAogQ29tbWFuZCBsaW5lIHVzYWdlOgogCi0JRW50ZXIgaWRsZSAtaCBhdCB0aGUgY29tbWFuZCBwcm9tcHQgdG8gZ2V0IGEgdXNhZ2UgbWVzc2FnZS4KKyAgICAgICAgRW50ZXIgaWRsZSAtaCBhdCB0aGUgY29tbWFuZCBwcm9tcHQgdG8gZ2V0IGEgdXNhZ2UgbWVzc2FnZS4KIAotUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzczoKKyAgICAgICAgaWRsZS5weSBbLWMgY29tbWFuZF0gWy1kXSBbLWVdIFstc10gWy10IHRpdGxlXSBbYXJnXSAuLi4KIAotCUlmIElETEUgaXMgc3RhcnRlZCB3aXRoIHRoZSAtbiBjb21tYW5kIGxpbmUgc3dpdGNoIGl0IHdpbGwgcnVuIGluIGEKLQlzaW5nbGUgcHJvY2VzcyBhbmQgd2lsbCBub3QgY3JlYXRlIHRoZSBzdWJwcm9jZXNzIHdoaWNoIHJ1bnMgdGhlIFJQQwotCVB5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCi0JdGhlIHN1YnByb2Nlc3Mgb3IgdGhlIFJQQyBzb2NrZXQgaW50ZXJmYWNlIG9uIHlvdXIgcGxhdGZvcm0uICBIb3dldmVyLAotCWluIHRoaXMgbW9kZSB1c2VyIGNvZGUgaXMgbm90IGlzb2xhdGVkIGZyb20gSURMRSBpdHNlbGYuICBBbHNvLCB0aGUKLQllbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCi0JeW91ciBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLCB5b3UgbXVzdCByZWxvYWQoKSB0aGUgYWZmZWN0ZWQgbW9kdWxlcyBhbmQKLQlyZS1pbXBvcnQgYW55IHNwZWNpZmljIGl0ZW1zIChlLmcuIGZyb20gZm9vIGltcG9ydCBiYXopIGlmIHRoZSBjaGFuZ2VzCi0JYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKLQl3aXRoIHRoZSBkZWZhdWx0IHN1YnByb2Nlc3MgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICAtYyBjb21tYW5kICBydW4gdGhpcyBjb21tYW5kCisgICAgICAgIC1kICAgICAgICAgIGVuYWJsZSBkZWJ1Z2dlcgorICAgICAgICAtZSAgICAgICAgICBlZGl0IG1vZGU7IGFyZ3VtZW50cyBhcmUgZmlsZXMgdG8gYmUgZWRpdGVkCisgICAgICAgIC1zICAgICAgICAgIHJ1biAkSURMRVNUQVJUVVAgb3IgJFBZVEhPTlNUQVJUVVAgZmlyc3QKKyAgICAgICAgLXQgdGl0bGUgICAgc2V0IHRpdGxlIG9mIHNoZWxsIHdpbmRvdworCisgICAgICAgIElmIHRoZXJlIGFyZSBhcmd1bWVudHM6CisgICAgICAgIDEuIElmIC1lIGlzIHVzZWQsIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3BlbmVkIGZvciBlZGl0aW5nIGFuZCBzeXMuYXJndgorICAgICAgICAgICByZWZsZWN0cyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBJRExFIGl0c2VsZi4KKyAgICAgICAgMi4gT3RoZXJ3aXNlLCBpZiAtYyBpcyB1c2VkLCBhbGwgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4KKyAgICAgICAgICAgc3lzLmFyZ3ZbMTouLi5dLCB3aXRoIHN5cy5hcmd2WzBdIHNldCB0byAtYy4KKyAgICAgICAgMy4gT3RoZXJ3aXNlLCBpZiBuZWl0aGVyIC1lIG5vciAtYyBpcyB1c2VkLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYQorICAgICAgICAgICBzY3JpcHQgd2hpY2ggaXMgZXhlY3V0ZWQgd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBpbgorICAgICAgICAgICBzeXMuYXJndlsxOi4uLl0gIGFuZCBzeXMuYXJndlswXSBzZXQgdG8gdGhlIHNjcmlwdCBuYW1lLiAgSWYgdGhlCisgICAgICAgICAgIHNjcmlwdCBuYW1lIGlzIC0sIG5vIHNjcmlwdCBpcyBleGVjdXRlZCBidXQgYW4gaW50ZXJhY3RpdmUgUHl0aG9uCisgICAgICAgICAgIHNlc3Npb24gaXMgc3RhcnRlZDsgdGhlIGFyZ3VtZW50cyBhcmUgc3RpbGwgYXZhaWxhYmxlIGluIHN5cy5hcmd2LgorCitSdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzOiAoREVQUkVDQVRFRCBpbiBQeXRob24gMy40IHNlZSBJc3N1ZSAxNjEyMykKKworICAgICAgICBJZiBJRExFIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgLW4gY29tbWFuZCBsaW5lIHN3aXRjaCBpdCB3aWxsIHJ1biBpbiBhCisgICAgICAgIHNpbmdsZSBwcm9jZXNzIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlIHN1YnByb2Nlc3Mgd2hpY2ggcnVucyB0aGUgUlBDCisgICAgICAgIFB5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCisgICAgICAgIHRoZSBzdWJwcm9jZXNzIG9yIHRoZSBSUEMgc29ja2V0IGludGVyZmFjZSBvbiB5b3VyIHBsYXRmb3JtLiAgSG93ZXZlciwKKyAgICAgICAgaW4gdGhpcyBtb2RlIHVzZXIgY29kZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSBJRExFIGl0c2VsZi4gIEFsc28sIHRoZQorICAgICAgICBlbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCisgICAgICAgIHlvdXIgY29kZSBoYXMgYmVlbiBtb2RpZmllZCwgeW91IG11c3QgcmVsb2FkKCkgdGhlIGFmZmVjdGVkIG1vZHVsZXMgYW5kCisgICAgICAgIHJlLWltcG9ydCBhbnkgc3BlY2lmaWMgaXRlbXMgKGUuZy4gZnJvbSBmb28gaW1wb3J0IGJheikgaWYgdGhlIGNoYW5nZXMKKyAgICAgICAgYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKKyAgICAgICAgd2l0aCB0aGUgZGVmYXVsdCBzdWJwcm9jZXNzIGlmIGF0IGFsbCBwb3NzaWJsZS4KIAogRXh0ZW5zaW9uczoKIAotCUlETEUgY29udGFpbnMgYW4gZXh0ZW5zaW9uIGZhY2lsaXR5LiAgU2VlIHRoZSBiZWdpbm5pbmcgb2YKLQljb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgotCVRoZSBkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKKyAgICAgICAgSURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBTZWUgdGhlIGJlZ2lubmluZyBvZgorICAgICAgICBjb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorICAgICAgICBUaGUgZGVmYXVsdCBleHRlbnNpb25zIGFyZSBjdXJyZW50bHk6CiAKLQkJRm9ybWF0UGFyYWdyYXBoCi0JCUF1dG9FeHBhbmQKLQkJWm9vbUhlaWdodAotCQlTY3JpcHRCaW5kaW5nCi0JCUNhbGxUaXBzCi0JCVBhcmVuTWF0Y2gKLQkJQXV0b0NvbXBsZXRlCi0JCUNvZGVDb250ZXh0CisgICAgICAgICAgICAgICAgRm9ybWF0UGFyYWdyYXBoCisgICAgICAgICAgICAgICAgQXV0b0V4cGFuZAorICAgICAgICAgICAgICAgIFpvb21IZWlnaHQKKyAgICAgICAgICAgICAgICBTY3JpcHRCaW5kaW5nCisgICAgICAgICAgICAgICAgQ2FsbFRpcHMKKyAgICAgICAgICAgICAgICBQYXJlbk1hdGNoCisgICAgICAgICAgICAgICAgQXV0b0NvbXBsZXRlCisgICAgICAgICAgICAgICAgQ29kZUNvbnRleHQKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L1JFQURNRS50eHQKaW5kZXggNmI5MjQ4My4uZjZiNmEyMSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L1JFQURNRS50eHQKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L1JFQURNRS50eHQKQEAgLTI2LDcgKzI2LDYgQEAKIHdpdGggeHl6IChsb3dlcmNhc2VkKSBhZGRlZCBhZnRlciAndGVzdF8nLgogLS0tCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydDsgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXQogICAgIGltcG9ydCB1bml0dGVzdAogICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfJywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCiAtLS0KQEAgLTM0LDEyICszMywxMiBAQAogCiAyLiBHdWkgVGVzdHMKIAotR3VpIHRlc3RzIG5lZWQgJ3JlcXVpcmVzJyBhbmQgJ3VzZV9yZXNvdXJjZXMnIGZyb20gdGVzdC5zdXBwb3J0Ci0odGVzdC50ZXN0X3N1cHBvcnQgaW4gMi43KS4gQSB0ZXN0IGlzIGEgZ3VpIHRlc3QgaWYgaXQgY3JlYXRlcyBhIFRrIHJvb3Qgb3IKLW1hc3RlciBvYmplY3QgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgaW5zdGFudGlhdGluZyBhIHRraW50ZXIgb3IKLWlkbGUgY2xhc3MuIEZvciB0aGUgYmVuZWZpdCBvZiBidWlsZGJvdCBtYWNoaW5lcyB0aGF0IGRvIG5vdCBoYXZlIGEgZ3JhcGhpY3MKLXNjcmVlbiwgZ3VpIHRlc3RzIG11c3QgYmUgJ2d1YXJkZWQnIGJ5ICJyZXF1aXJlcygnZ3VpJykiIGluIGEgc2V0VXAKLWZ1bmN0aW9uIG9yIG1ldGhvZC4gVGhpcyB3aWxsIHR5cGljYWxseSBiZSBzZXRVcENsYXNzLgorR3VpIHRlc3RzIG5lZWQgJ3JlcXVpcmVzJyBmcm9tIHRlc3Quc3VwcG9ydCAodGVzdC50ZXN0X3N1cHBvcnQgaW4gMi43KS4gQQordGVzdCBpcyBhIGd1aSB0ZXN0IGlmIGl0IGNyZWF0ZXMgYSBUayByb290IG9yIG1hc3RlciBvYmplY3QgZWl0aGVyIGRpcmVjdGx5CitvciBpbmRpcmVjdGx5IGJ5IGluc3RhbnRpYXRpbmcgYSB0a2ludGVyIG9yIGlkbGUgY2xhc3MuIEZvciB0aGUgYmVuZWZpdCBvZgordGVzdCBwcm9jZXNzZXMgdGhhdCBlaXRoZXIgaGF2ZSBubyBncmFwaGljYWwgZW52aXJvbm1lbnQgYXZhaWxhYmxlIG9yIGFyZSBub3QKK2FsbG93ZWQgdG8gdXNlIGl0LCBndWkgdGVzdHMgbXVzdCBiZSAnZ3VhcmRlZCcgYnkgInJlcXVpcmVzKCdndWknKSIgaW4gYQorc2V0VXAgZnVuY3Rpb24gb3IgbWV0aG9kLiBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHNldFVwQ2xhc3MuCiAKIFRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIgZ3VpIHRlc3RzLCBhbGwgZ3VpIG9iamVjdHMgbXVzdCBiZSBkZXN0cm95ZWQKIGFuZCBkZWxldGVkIGJ5IHRoZSBlbmQgb2YgdGhlIHRlc3QuICBJZiBhIHdpZGdldCwgc3VjaCBhcyBhIFRrIHJvb3QsIGlzIGNyZWF0ZWQKQEAgLTU3LDExICs1NiwxNyBAQAogICAgICAgICBkZWwgY2xzLnJvb3QKIC0tLQogCi1TdXBwb3J0LnJlcXVpcmVzKCdndWknKSByZXR1cm5zIHRydWUgaWYgaXQgaXMgZWl0aGVyIGNhbGxlZCBpbiBhIG1haW4gbW9kdWxlCi0od2hpY2ggbmV2ZXIgaGFwcGVucyBvbiBidWlsZGJvdHMpIG9yIGlmIHVzZV9yZXNvdXJjZXMgY29udGFpbnMgJ2d1aScuCi1Vc2VfcmVzb3VyY2VzIGlzIHNldCBieSB0ZXN0LnJlZ3J0ZXN0IGJ1dCBub3QgYnkgdW5pdHRlc3QuIFNvIHdoZW4gcnVubmluZwotdGVzdHMgaW4gYW5vdGhlciBtb2R1bGUgd2l0aCB1bml0dGVzdCwgd2Ugc2V0IGl0IG91cnNlbHZlcywgYXMgaW4gdGhlIHh5ei5weQotdGVtcGxhdGUgYWJvdmUuCitTdXBwb3J0LnJlcXVpcmVzKCdndWknKSBjYXVzZXMgdGhlIHRlc3QocykgaXQgZ3VhcmRzIHRvIGJlIHNraXBwZWQgaWYgYW55IG9mCithIGZldyBjb25kaXRpb25zIGFyZSBtZXQ6CisgLSBUaGUgdGVzdHMgYXJlIGJlaW5nIHJ1biBieSByZWdydGVzdC5weSwgYW5kIGl0IHdhcyBzdGFydGVkIHdpdGhvdXQKKyAgIGVuYWJsaW5nIHRoZSAiZ3VpIiByZXNvdXJjZSB3aXRoIHRoZSAiLXUiIGNvbW1hbmQgbGluZSBvcHRpb24uCisgLSBUaGUgdGVzdHMgYXJlIGJlaW5nIHJ1biBvbiBXaW5kb3dzIGJ5IGEgc2VydmljZSB0aGF0IGlzIG5vdCBhbGxvd2VkIHRvCisgICBpbnRlcmFjdCB3aXRoIHRoZSBncmFwaGljYWwgZW52aXJvbm1lbnQuCisgLSBUaGUgdGVzdHMgYXJlIGJlaW5nIHJ1biBvbiBNYWMgT1NYIGluIGEgcHJvY2VzcyB0aGF0IGNhbm5vdCBtYWtlIGEgd2luZG93CisgICBtYW5hZ2VyIGNvbm5lY3Rpb24uCisgLSB0a2ludGVyLlRrIGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgaW5zdGFudGlhdGVkIGZvciBzb21lIHJlYXNvbi4KKyAtIHRlc3Quc3VwcG9ydC51c2VfcmVzb3VyY2VzIGhhcyBiZWVuIHNldCBieSBzb21ldGhpbmcgb3RoZXIgdGhhbgorICAgcmVncnRlc3QucHkgYW5kIGRvZXMgbm90IGNvbnRhaW4gImd1aSIuCiAKIFNpbmNlIG5vbi1ndWkgdGVzdHMgYWx3YXlzIHJ1biwgYnV0IGd1aSB0ZXN0cyBvbmx5IHNvbWV0aW1lcywgdGVzdHMgb2Ygbm9uLWd1aQogb3BlcmF0aW9ucyBzaG91bGQgYmVzdCBhdm9pZCBuZWVkaW5nIGEgZ3VpLiBNZXRob2RzIHRoYXQgbWFrZSBpbmNpZGVudGFsIHVzZSBvZgpAQCAtODgsOCArOTMsOCBAQAogCiBUbyBydW4gYWxsIGlkbGVfdGVzdC90ZXN0XyoucHkgdGVzdHMsIGVpdGhlciBpbnRlcmFjdGl2ZWx5CiAoJz4+PicsIHdpdGggdW5pdHRlc3QgaW1wb3J0ZWQpIG9yIGZyb20gYSBjb21tYW5kIGxpbmUsIHVzZSBvbmUgb2YgdGhlCi1mb2xsb3dpbmcuIChOb3RlczogdW5pdHRlc3QgZG9lcyBub3QgcnVuIGd1aSB0ZXN0czsgaW4gMi43LCAndGVzdCAnICh3aXRoIHRoZQotc3BhY2UpIGlzICd0ZXN0LnJlZ3J0ZXN0ICc7IHdoZXJlIHByZXNlbnQsIC12IGFuZCAtdWd1aSBjYW4gYmUgb21pdHRlZC4pCitmb2xsb3dpbmcuIChOb3RlczogaW4gMi43LCAndGVzdCAnICh3aXRoIHRoZSBzcGFjZSkgaXMgJ3Rlc3QucmVncnRlc3QgJzsKK3doZXJlIHByZXNlbnQsIC12IGFuZCAtdWd1aSBjYW4gYmUgb21pdHRlZC4pCiAKID4+PiB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdCcsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQogcHl0aG9uIC1tIHVuaXR0ZXN0IC12IGlkbGVsaWIuaWRsZV90ZXN0CkBAIC05OCwxMyArMTAzLDEzIEBACiAKIFRoZSBpZGxlIHRlc3RzIGFyZSAnZGlzY292ZXJlZCcgYnkgaWRsZWxpYi5pZGxlX3Rlc3QuX19pbml0X18ubG9hZF90ZXN0cywKIHdoaWNoIGlzIGFsc28gaW1wb3J0ZWQgaW50byB0ZXN0LnRlc3RfaWRsZS4gTm9ybWFsbHksIG5laXRoZXIgZmlsZSBzaG91bGQgYmUKLWNoYW5nZWQgd2hlbiB3b3JraW5nIG9uIGluZGl2aWR1YWwgdGVzdCBtb2R1bGVzLiBUaGUgdGhpcmQgY29tbWFuZCBydW5zIHJ1bnMKK2NoYW5nZWQgd2hlbiB3b3JraW5nIG9uIGluZGl2aWR1YWwgdGVzdCBtb2R1bGVzLiBUaGUgdGhpcmQgY29tbWFuZCBydW5zCiB1bml0dGVzdCBpbmRpcmVjdGx5IHRocm91Z2ggcmVncnRlc3QuIFRoZSBzYW1lIGhhcHBlbnMgd2hlbiB0aGUgZW50aXJlIHRlc3QKIHN1aXRlIGlzIHJ1biB3aXRoICdweXRob24gLW0gdGVzdCcuIFNvIHRoYXQgY29tbWFuZCBtdXN0IHdvcmsgZm9yIGJ1aWxkYm90cwogdG8gc3RheSBncmVlbi4gSWRsZSB0ZXN0cyBtdXN0IG5vdCBkaXN0dXJiIHRoZSBlbnZpcm9ubWVudCBpbiBhIHdheSB0aGF0CiBtYWtlcyBvdGhlciB0ZXN0cyBmYWlsIChpc3N1ZSAxODA4MSkuCiAKIFRvIHJ1biBhbiBpbmRpdmlkdWFsIFRlc3RjYXNlIG9yIHRlc3QgbWV0aG9kLCBleHRlbmQgdGhlIGRvdHRlZCBuYW1lIGdpdmVuIHRvCi11bml0dGVzdCBvbiB0aGUgY29tbWFuZCBsaW5lLiAoQnV0IGd1aSB0ZXN0cyB3aWxsIG5vdCB0aGlzIHdheS4pCit1bml0dGVzdCBvbiB0aGUgY29tbWFuZCBsaW5lLgogCiBweXRob24gLW0gdW5pdHRlc3QgLXYgaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF94eXouVGVzdF9jYXNlLnRlc3RfbWV0aApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZmFmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvaHRlc3QucHkKQEAgLTAsMCArMSwzNjkgQEAKKycnJ1J1biBodW1hbiB0ZXN0cyBvZiBJZGxlJ3Mgd2luZG93LCBkaWFsb2csIGFuZCBwb3B1cCB3aWRnZXRzLgorCitydW4oKnRlc3RzKQorUnVuIGVhY2ggY2FsbGFibGUgaW4gdGVzdHMgYWZ0ZXIgZmluZGluZyB0aGUgbWF0Y2hpbmcgdGVzdCBzcGVjIGluIHRoaXMgZmlsZS4KK0lmIHRoZXJlIGFyZSBub25lLCBydW4gYW4gaHRlc3QgZm9yIGVhY2ggc3BlYyBkaWN0IGluIHRoaXMgZmlsZSBhZnRlciBmaW5kaW5nCit0aGUgbWF0Y2hpbmcgY2FsbGFibGUgaW4gdGhlIG1vZHVsZSBuYW1lZCBpbiB0aGUgc3BlYy4KKworSW4gYSB0ZXN0ZWQgbW9kdWxlLCBsZXQgWCBiZSBhIGdsb2JhbCBuYW1lIGJvdW5kIHRvIGEgd2lkZ2V0IGNhbGxhYmxlLgorRW5kIHRoZSBtb2R1bGUgd2l0aAorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIDx1bml0dGVzdCwgaWYgdGhlcmUgaXMgb25lPgorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihYKQorCitUaGUgWCBvYmplY3QgbXVzdCBoYXZlIGEgLl9fbmFtZV9fIGF0dHJpYnV0ZSBhbmQgYSAncGFyZW50JyBwYXJhbWV0ZXIuCitYIHdpbGwgb2Z0ZW4gYmUgYSB3aWRnZXQgY2xhc3MsIGJ1dCBhIGNhbGxhYmxlIGluc3RhbmNlIHdpdGggLl9fbmFtZV9fCitvciBhIHdyYXBwZXIgZnVuY3Rpb24gYWxzbyB3b3JrLiBUaGUgbmFtZSBvZiB3cmFwcGVyIGZ1bmN0aW9ucywgbGlrZQorJ19lZGl0b3Jfd2luZG93Jywgc2hvdWxkIHN0YXJ0IHdpdGggJ18nLgorCitUaGlzIGZpbGUgbXVzdCBjb250YWluIGEgbWF0Y2hpbmcgaW5zdGFuY2Ugb2YgdGhlIGZvbGxvd2luZyB0ZW1wbGF0ZSwKK3dpdGggWC5fX25hbWVfXyBwcmVwZW5kZWQsIGFzIGluICdfZWRpdG9yX3dpbmRvd19zcGVjIC4uLicuCisKK19zcGVjID0geworICAgICdmaWxlJzogJycsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzogJyd9LAorICAgICdtc2cnOiAiIgorICAgIH0KKworZmlsZSAobm8gLnB5KTogdXNlZCBpbiBydW4oKSB0byBpbXBvcnQgdGhlIGZpbGUgYW5kIGdldCBYLgora3dkczogcGFzc2VkIHRvIFggKCoqa3dkcyksIGFmdGVyICdwYXJlbnQnIGlzIGFkZGVkLCB0byBpbml0aWFsaXplIFguCit0aXRsZTogYW4gZXhhbXBsZTsgdXNlZCBmb3Igc29tZSB3aWRnZXRzLCBkZWxldGUgaWYgbm90LgorbXNnOiBkaXNwbGF5ZWQgaW4gYSBtYXN0ZXIgd2luZG93LiBIaW50cyBhcyB0byBob3cgdGhlIHVzZXIgbWlnaHQKKyAgdGVzdCB0aGUgd2lkZ2V0LiBDbG9zZSB0aGUgd2luZG93IHRvIHNraXAgb3IgZW5kIHRoZSB0ZXN0LgorCitNb2R1bGVzIG5vdCBiZWluZyB0ZXN0ZWQgYXQgdGhlIG1vbWVudDoKK1B5U2hlbGwuUHlTaGVsbEVkaXRvcldpbmRvdworRGVidWdnZXIuRGVidWdnZXIKK0F1dG9Db21wbGV0ZVdpbmRvdy5BdXRvQ29tcGxldGVXaW5kb3cKK091dHB1dFdpbmRvdy5PdXRwdXRXaW5kb3cgKGluZGlyZWN0bHkgYmVpbmcgdGVzdGVkIHdpdGggZ3JlcCB0ZXN0KQorJycnCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQorZnJvbSBpZGxlbGliLm1hY29zeFN1cHBvcnQgaW1wb3J0IF9pbml0aWFsaXplVGtWYXJpYW50VGVzdHMKK2ltcG9ydCB0a2ludGVyIGFzIHRrCisKK0Fib3V0RGlhbG9nX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnYWJvdXREaWFsb2cnLAorICAgICdrd2RzJzogeyd0aXRsZSc6ICdhYm91dERpYWxvZyB0ZXN0JywKKyAgICAgICAgICAgICAnX2h0ZXN0JzogVHJ1ZSwKKyAgICAgICAgICAgICB9LAorICAgICdtc2cnOiAiVGVzdCBldmVyeSBidXR0b24uIEVuc3VyZSBQeXRob24sIFRLIGFuZCBJRExFIHZlcnNpb25zICIKKyAgICAgICAgICAgImFyZSBjb3JyZWN0bHkgZGlzcGxheWVkLlxuIFtDbG9zZV0gdG8gZXhpdC4iLAorICAgIH0KKworX2NhbGx0aXBfd2luZG93X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnQ2FsbFRpcFdpbmRvdycsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlR5cGluZyAnKCcgc2hvdWxkIGRpc3BsYXkgYSBjYWxsdGlwLlxuIgorICAgICAgICAgICAiVHlwaW5nICcpIHNob3VsZCBoaWRlIHRoZSBjYWxsdGlwLlxuIgorICAgIH0KKworX2NsYXNzX2Jyb3dzZXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdDbGFzc0Jyb3dzZXInLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJJbnNwZWN0IG5hbWVzIG9mIG1vZHVsZSwgY2xhc3Mod2l0aCBzdXBlcmNsYXNzIGlmICIKKyAgICAgICAgICAgImFwcGxpY2FibGUpLCBtZXRob2RzIGFuZCBmdW5jdGlvbnMuXG5Ub2dnbGUgbmVzdGVkIGl0ZW1zLlxuIgorICAgICAgICAgICAiRG91YmxlIGNsaWNraW5nIG9uIGl0ZW1zIHByaW50cyBhIHRyYWNlYmFjayBmb3IgYW4gZXhjZXB0aW9uICIKKyAgICAgICAgICAgInRoYXQgaXMgaWdub3JlZC4iCisgICAgfQorCitfY29sb3JfZGVsZWdhdG9yX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnQ29sb3JEZWxlZ2F0b3InLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJUaGUgdGV4dCBpcyBzYW1wbGUgUHl0aG9uIGNvZGUuXG4iCisgICAgICAgICAgICJFbnN1cmUgY29tcG9uZW50cyBsaWtlIGNvbW1lbnRzLCBrZXl3b3JkcywgYnVpbHRpbnMsXG4iCisgICAgICAgICAgICJzdHJpbmcsIGRlZmluaXRpb25zLCBhbmQgYnJlYWsgYXJlIGNvcnJlY3RseSBjb2xvcmVkLlxuIgorICAgICAgICAgICAiVGhlIGRlZmF1bHQgY29sb3Igc2NoZW1lIGlzIGluIGlkbGVsaWIvY29uZmlnLWhpZ2hsaWdodC5kZWYiCisgICAgfQorCitDb25maWdEaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdjb25maWdEaWFsb2cnLAorICAgICdrd2RzJzogeyd0aXRsZSc6ICdTZXR0aW5ncycsCisgICAgICAgICAgICAgJ19odGVzdCc6IFRydWUsfSwKKyAgICAnbXNnJzogIklETEUgcHJlZmVyZW5jZXMgZGlhbG9nLlxuIgorICAgICAgICAgICAiSW4gdGhlICdGb250cy9UYWJzJyB0YWIsIGNoYW5naW5nIGZvbnQgZmFjZSwgc2hvdWxkIHVwZGF0ZSB0aGUgIgorICAgICAgICAgICAiZm9udCBmYWNlIG9mIHRoZSB0ZXh0IGluIHRoZSBhcmVhIGJlbG93IGl0LlxuSW4gdGhlICIKKyAgICAgICAgICAgIidIaWdobGlnaHRpbmcnIHRhYiwgdHJ5IGRpZmZlcmVudCBjb2xvciBzY2hlbWVzLiBDbGlja2luZyAiCisgICAgICAgICAgICJpdGVtcyBpbiB0aGUgc2FtcGxlIHByb2dyYW0gc2hvdWxkIHVwZGF0ZSB0aGUgY2hvaWNlcyBhYm92ZSBpdC4iCisgICAgICAgICAgICJcbkluIHRoZSAnS2V5cycgYW5kICdHZW5lcmFsJyB0YWIsIHRlc3Qgc2V0dGluZ3Mgb2YgaW50ZXJlc3QuIgorICAgICAgICAgICAiXG5bT2tdIHRvIGNsb3NlIHRoZSBkaWFsb2cuW0FwcGx5XSB0byBhcHBseSB0aGUgc2V0dGluZ3MgYW5kICIKKyAgICAgICAgICAgImFuZCBbQ2FuY2VsXSB0byByZXZlcnQgYWxsIGNoYW5nZXMuXG5SZS1ydW4gdGhlIHRlc3QgdG8gZW5zdXJlICIKKyAgICAgICAgICAgImNoYW5nZXMgbWFkZSBoYXZlIHBlcnNpc3RlZC4iCisgICAgfQorCitfZHluX29wdGlvbl9tZW51X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnZHluT3B0aW9uTWVudVdpZGdldCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlNlbGVjdCBvbmUgb2YgdGhlIG1hbnkgb3B0aW9ucyBpbiB0aGUgJ29sZCBvcHRpb24gc2V0Jy5cbiIKKyAgICAgICAgICAgIkNsaWNrIHRoZSBidXR0b24gdG8gY2hhbmdlIHRoZSBvcHRpb24gc2V0LlxuIgorICAgICAgICAgICAiU2VsZWN0IG9uZSBvZiB0aGUgbWFueSBvcHRpb25zIGluIHRoZSAnbmV3IG9wdGlvbiBzZXQnLiIKKyAgICB9CisKK19lZGl0b3Jfd2luZG93X3NwZWMgPSB7CisgICAnZmlsZSc6ICdFZGl0b3JXaW5kb3cnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJUZXN0IGVkaXRvciBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIgorICAgIH0KKworR2V0Q2ZnU2VjdGlvbk5hbWVEaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdjb25maWdTZWN0aW9uTmFtZURpYWxvZycsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzonR2V0IE5hbWUnLAorICAgICAgICAgICAgICdtZXNzYWdlJzonRW50ZXIgc29tZXRoaW5nJywKKyAgICAgICAgICAgICAndXNlZF9uYW1lcyc6IHsnYWJjJ30sCisgICAgICAgICAgICAgJ19odGVzdCc6IFRydWV9LAorICAgICdtc2cnOiAiQWZ0ZXIgdGhlIHRleHQgZW50ZXJlZCB3aXRoIFtPa10gaXMgc3RyaXBwZWQsIDxub3RoaW5nPiwgIgorICAgICAgICAgICAiJ2FiYycsIG9yIG1vcmUgdGhhdCAzMCBjaGFycyBhcmUgZXJyb3JzLlxuIgorICAgICAgICAgICAiQ2xvc2UgJ0dldCBOYW1lJyB3aXRoIGEgdmFsaWQgZW50cnkgKHByaW50ZWQgdG8gU2hlbGwpLCAiCisgICAgICAgICAgICJbQ2FuY2VsXSwgb3IgW1hdIiwKKyAgICB9CisKK0dldEhlbHBTb3VyY2VEaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdjb25maWdIZWxwU291cmNlRWRpdCcsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzogJ0dldCBoZWxwc291cmNlJywKKyAgICAgICAgICAgICAnX2h0ZXN0JzogVHJ1ZX0sCisgICAgJ21zZyc6ICJFbnRlciBtZW51IGl0ZW0gbmFtZSBhbmQgaGVscCBmaWxlIHBhdGhcbiAiCisgICAgICAgICAgICI8bm90aGluZz4gYW5kIG1vcmUgdGhhbiAzMCBjaGFycyBhcmUgaW52YWxpZCBtZW51IGl0ZW0gbmFtZXMuXG4iCisgICAgICAgICAgICI8bm90aGluZz4sIGZpbGUgZG9lcyBub3QgZXhpc3QgYXJlIGludmFsaWQgcGF0aCBpdGVtcy5cbiIKKyAgICAgICAgICAgIlRlc3QgZm9yIGluY29tcGxldGUgd2ViIGFkZHJlc3MgZm9yIGhlbHAgZmlsZSBwYXRoLlxuIgorICAgICAgICAgICAiQSB2YWxpZCBlbnRyeSB3aWxsIGJlIHByaW50ZWQgdG8gc2hlbGwgd2l0aCBbMGtdLlxuIgorICAgICAgICAgICAiW0NhbmNlbF0gd2lsbCBwcmludCBOb25lIHRvIHNoZWxsIiwKKyAgICB9CisKKyMgVXBkYXRlIG9uY2UgaXNzdWUyMTUxOSBpcyByZXNvbHZlZC4KK0dldEtleXNEaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdrZXliaW5kaW5nRGlhbG9nJywKKyAgICAna3dkcyc6IHsndGl0bGUnOiAnVGVzdCBrZXliaW5kaW5ncycsCisgICAgICAgICAgICAgJ2FjdGlvbic6ICdmaW5kLWFnYWluJywKKyAgICAgICAgICAgICAnY3VycmVudEtleVNlcXVlbmNlcyc6IFsnJ10gLAorICAgICAgICAgICAgICdfaHRlc3QnOiBUcnVlLAorICAgICAgICAgICAgIH0sCisgICAgJ21zZyc6ICJUZXN0IGZvciBkaWZmZXJlbnQga2V5IG1vZGlmaWVyIHNlcXVlbmNlcy5cbiIKKyAgICAgICAgICAgIjxub3RoaW5nPiBpcyBpbnZhbGlkLlxuIgorICAgICAgICAgICAiTm8gbW9kaWZpZXIga2V5IGlzIGludmFsaWQuXG4iCisgICAgICAgICAgICJTaGlmdCBrZXkgd2l0aCBbYS16XSxbMC05XSwgZnVuY3Rpb24ga2V5LCBtb3ZlIGtleSwgdGFiLCBzcGFjZSIKKyAgICAgICAgICAgImlzIGludmFsaWQuXG5ObyB2YWxpZGl0aXR5IGNoZWNraW5nIGlmIGFkdmFuY2VkIGtleSBiaW5kaW5nICIKKyAgICAgICAgICAgImVudHJ5IGlzIHVzZWQuIgorICAgIH0KKworX2dyZXBfZGlhbG9nX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnR3JlcERpYWxvZycsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkNsaWNrIHRoZSAnU2hvdyBHcmVwRGlhbG9nJyBidXR0b24uXG4iCisgICAgICAgICAgICJUZXN0IHRoZSB2YXJpb3VzICdGaW5kLWluLWZpbGVzJyBmdW5jdGlvbnMuXG4iCisgICAgICAgICAgICJUaGUgcmVzdWx0cyBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgbmV3ICcqT3V0cHV0Kicgd2luZG93LlxuIgorICAgICAgICAgICAiJ1JpZ2h0LWNsaWNrJy0+J0dvdG8gZmlsZS9saW5lJyBhbnl3aGVyZSBpbiB0aGUgc2VhcmNoIHJlc3VsdHMgIgorICAgICAgICAgICAic2hvdWxkIG9wZW4gdGhhdCBmaWxlIFxuaW4gYSBuZXcgRWRpdG9yV2luZG93LiIKKyAgICB9CisKK19oZWxwX2RpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ0VkaXRvcldpbmRvdycsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIklmIHRoZSBoZWxwIHRleHQgZGlzcGxheXMsIHRoaXMgd29ya3MuXG4iCisgICAgICAgICAgICJUZXh0IGlzIHNlbGVjdGFibGUuIFdpbmRvdyBpcyBzY3JvbGxhYmxlLiIKKyAgICB9CisKK19pb19iaW5kaW5nX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnSU9CaW5kaW5nJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVGVzdCB0aGUgZm9sbG93aW5nIGJpbmRpbmdzXG4iCisgICAgICAgICAgICI8Q29udHJvbC1vPiB0byBkaXNwbGF5IG9wZW4gd2luZG93IGZyb20gZmlsZSBkaWFsb2cuXG4iCisgICAgICAgICAgICI8Q29udHJvbC1zPiB0byBzYXZlIHRoZSBmaWxlXG4iCisgICAgfQorCitfbXVsdGlfY2FsbF9zcGVjID0geworICAgICdmaWxlJzogJ011bHRpQ2FsbCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRoZSBmb2xsb3dpbmcgYWN0aW9ucyBzaG91bGQgdHJpZ2dlciBhIHByaW50IHRvIGNvbnNvbGUgb3IgSURMRSIKKyAgICAgICAgICAgIiBTaGVsbC5cbkVudGVyaW5nIGFuZCBsZWF2aW5nIHRoZSB0ZXh0IGFyZWEsIGtleSBlbnRyeSwgIgorICAgICAgICAgICAiPENvbnRyb2wtS2V5PixcbjxBbHQtS2V5LWE+LCA8Q29udHJvbC1LZXktYT4sICIKKyAgICAgICAgICAgIjxBbHQtQ29udHJvbC1LZXktYT4sIFxuPENvbnRyb2wtQnV0dG9uLTE+LCA8QWx0LUJ1dHRvbi0xPiBhbmQgIgorICAgICAgICAgICAiZm9jdXNpbmcgb3V0IG9mIHRoZSB3aW5kb3dcbmFyZSBzZXF1ZW5jZXMgdG8gYmUgdGVzdGVkLiIKKyAgICB9CisKK19tdWx0aXN0YXR1c19iYXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdNdWx0aVN0YXR1c0JhcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkVuc3VyZSBwcmVzZW5jZSBvZiBtdWx0aS1zdGF0dXMgYmFyIGJlbG93IHRleHQgYXJlYS5cbiIKKyAgICAgICAgICAgIkNsaWNrICdVcGRhdGUgU3RhdHVzJyB0byBjaGFuZ2UgdGhlIG11bHRpLXN0YXR1cyB0ZXh0IgorICAgIH0KKworX29iamVjdF9icm93c2VyX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnT2JqZWN0QnJvd3NlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkRvdWJsZSBjbGljayBvbiBpdGVtcyB1cHRvIHRoZSBsb3dlc3QgbGV2ZWwuXG4iCisgICAgICAgICAgICJBdHRyaWJ1dGVzIG9mIHRoZSBvYmplY3RzIGFuZCByZWxhdGVkIGluZm9ybWF0aW9uICIKKyAgICAgICAgICAgIndpbGwgYmUgZGlzcGxheWVkIHNpZGUtYnktc2lkZSBhdCBlYWNoIGxldmVsLiIKKyAgICB9CisKK19wYXRoX2Jyb3dzZXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdQYXRoQnJvd3NlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRlc3QgZm9yIGNvcnJlY3QgZGlzcGxheSBvZiBhbGwgcGF0aHMgaW4gc3lzLnBhdGguXG4iCisgICAgICAgICAgICJUb2dnbGUgbmVzdGVkIGl0ZW1zIHVwdG8gdGhlIGxvd2VzdCBsZXZlbC5cbiIKKyAgICAgICAgICAgIkRvdWJsZSBjbGlja2luZyBvbiBhbiBpdGVtIHByaW50cyBhIHRyYWNlYmFja1xuIgorICAgICAgICAgICAiZm9yIGFuIGV4Y2VwdGlvbiB0aGF0IGlzIGlnbm9yZWQuIgorICAgIH0KKworX3BlcmNvbGF0b3Jfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdQZXJjb2xhdG9yJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVGhlcmUgYXJlIHR3byB0cmFjZXJzIHdoaWNoIGNhbiBiZSB0b2dnbGVkIHVzaW5nIGEgY2hlY2tib3guXG4iCisgICAgICAgICAgICJUb2dnbGluZyBhIHRyYWNlciAnb24nIGJ5IGNoZWNraW5nIGl0IHNob3VsZCBwcmludCB0cmFjZXIiCisgICAgICAgICAgICJvdXRwdXQgdG8gdGhlIGNvbnNvbGUgb3IgdG8gdGhlIElETEUgc2hlbGwuXG4iCisgICAgICAgICAgICJJZiBib3RoIHRoZSB0cmFjZXJzIGFyZSAnb24nLCB0aGUgb3V0cHV0IGZyb20gdGhlIHRyYWNlciB3aGljaCAiCisgICAgICAgICAgICJ3YXMgc3dpdGNoZWQgJ29uJyBsYXRlciwgc2hvdWxkIGJlIHByaW50ZWQgZmlyc3RcbiIKKyAgICAgICAgICAgIlRlc3QgZm9yIGFjdGlvbnMgbGlrZSB0ZXh0IGVudHJ5LCBhbmQgcmVtb3ZhbC4iCisgICAgfQorCitfcmVwbGFjZV9kaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdSZXBsYWNlRGlhbG9nJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiQ2xpY2sgdGhlICdSZXBsYWNlJyBidXR0b24uXG4iCisgICAgICAgICAgICJUZXN0IHZhcmlvdXMgcmVwbGFjZSBvcHRpb25zIGluIHRoZSAnUmVwbGFjZSBkaWFsb2cnLlxuIgorICAgICAgICAgICAiQ2xpY2sgW0Nsb3NlXSBvciBbWF0gdG8gY2xvc2UgdGhlICdSZXBsYWNlIERpYWxvZycuIgorICAgIH0KKworX3NlYXJjaF9kaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdTZWFyY2hEaWFsb2cnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJDbGljayB0aGUgJ1NlYXJjaCcgYnV0dG9uLlxuIgorICAgICAgICAgICAiVGVzdCB2YXJpb3VzIHNlYXJjaCBvcHRpb25zIGluIHRoZSAnU2VhcmNoIGRpYWxvZycuXG4iCisgICAgICAgICAgICJDbGljayBbQ2xvc2VdIG9yIFtYXSB0byBjbG9zZSB0aGUgJ1NlYXJjaCBEaWFsb2cnLiIKKyAgICB9CisKK19zY3JvbGxlZF9saXN0X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnU2Nyb2xsZWRMaXN0JywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiWW91IHNob3VsZCBzZWUgYSBzY3JvbGxhYmxlIGxpc3Qgb2YgaXRlbXNcbiIKKyAgICAgICAgICAgIlNlbGVjdGluZyAoY2xpY2tpbmcpIG9yIGRvdWJsZSBjbGlja2luZyBhbiBpdGVtICIKKyAgICAgICAgICAgInByaW50cyB0aGUgbmFtZSB0byB0aGUgY29uc29sZSBvciBJZGxlIHNoZWxsLlxuIgorICAgICAgICAgICAiUmlnaHQgY2xpY2tpbmcgYW4gaXRlbSB3aWxsIGRpc3BsYXkgYSBwb3B1cC4iCisgICAgfQorCitfc3RhY2tfdmlld2VyX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnU3RhY2tWaWV3ZXInLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJBIHN0YWNrdHJhY2UgZm9yIGEgTmFtZUVycm9yIGV4Y2VwdGlvbi5cbiIKKyAgICAgICAgICAgIkV4cGFuZCAnaWRsZWxpYiAuLi4nIGFuZCAnPGxvY2Fscz4nLlxuIgorICAgICAgICAgICAiQ2hlY2sgdGhhdCBleGNfdmFsdWUsIGV4Y190YiwgYW5kIGV4Y190eXBlIGFyZSBjb3JyZWN0LlxuIgorICAgIH0KKworX3RhYmJlZF9wYWdlc19zcGVjID0geworICAgICdmaWxlJzogJ3RhYmJlZHBhZ2VzJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVG9nZ2xlIGJldHdlZW4gdGhlIHR3byB0YWJzICdmb28nIGFuZCAnYmFyJ1xuIgorICAgICAgICAgICAiQWRkIGEgdGFiIGJ5IGVudGVyaW5nIGEgc3VpdGFibGUgbmFtZSBmb3IgaXQuXG4iCisgICAgICAgICAgICJSZW1vdmUgYW4gZXhpc3RpbmcgdGFiIGJ5IGVudGVyaW5nIGl0cyBuYW1lLlxuIgorICAgICAgICAgICAiUmVtb3ZlIGFsbCBleGlzdGluZyB0YWJzLlxuIgorICAgICAgICAgICAiPG5vdGhpbmc+IGlzIGFuIGludmFsaWQgYWRkIHBhZ2UgYW5kIHJlbW92ZSBwYWdlIG5hbWUuXG4iCisgICAgfQorCitUZXh0Vmlld2VyX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAndGV4dFZpZXcnLAorICAgICdrd2RzJzogeyd0aXRsZSc6ICdUZXN0IHRleHRWaWV3JywKKyAgICAgICAgICAgICAndGV4dCc6J1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXG4nKjM1LAorICAgICAgICAgICAgICdfaHRlc3QnOiBUcnVlfSwKKyAgICAnbXNnJzogIlRlc3QgZm9yIHJlYWQtb25seSBwcm9wZXJ0eSBvZiB0ZXh0LlxuIgorICAgICAgICAgICAiVGV4dCBpcyBzZWxlY3RhYmxlLiBXaW5kb3cgaXMgc2Nyb2xsYWJsZS4iLAorICAgICB9CisKK190b29sdGlwX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnVG9vbFRpcCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlBsYWNlIG1vdXNlIGN1cnNvciBvdmVyIGJvdGggdGhlIGJ1dHRvbnNcbiIKKyAgICAgICAgICAgIkEgdG9vbHRpcCBzaG91bGQgYXBwZWFyIHdpdGggc29tZSB0ZXh0LiIKKyAgICB9CisKK190cmVlX3dpZGdldF9zcGVjID0geworICAgICdmaWxlJzogJ1RyZWVXaWRnZXQnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJUaGUgY2FudmFzIGlzIHNjcm9sbGFibGUuXG4iCisgICAgICAgICAgICJDbGljayBvbiBmb2xkZXJzIHVwdG8gdG8gdGhlIGxvd2VzdCBsZXZlbC4iCisgICAgfQorCitfdW5kb19kZWxlZ2F0b3Jfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdVbmRvRGVsZWdhdG9yJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiQ2xpY2sgW1VuZG9dIHRvIHVuZG8gYW55IGFjdGlvbi5cbiIKKyAgICAgICAgICAgIkNsaWNrIFtSZWRvXSB0byByZWRvIGFueSBhY3Rpb24uXG4iCisgICAgICAgICAgICJDbGljayBbRHVtcF0gdG8gZHVtcCB0aGUgY3VycmVudCBzdGF0ZSAiCisgICAgICAgICAgICJieSBwcmludGluZyB0byB0aGUgY29uc29sZSBvciB0aGUgSURMRSBzaGVsbC5cbiIKKyAgICB9CisKK193aWRnZXRfcmVkaXJlY3Rvcl9zcGVjID0geworICAgICdmaWxlJzogJ1dpZGdldFJlZGlyZWN0b3InLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJFdmVyeSB0ZXh0IGluc2VydCBzaG91bGQgYmUgcHJpbnRlZCB0byB0aGUgY29uc29sZS4iCisgICAgICAgICAgICJvciB0aGUgSURMRSBzaGVsbC4iCisgICAgfQorCitkZWYgcnVuKCp0ZXN0cyk6CisgICAgcm9vdCA9IHRrLlRrKCkKKyAgICByb290LnRpdGxlKCdJRExFIGh0ZXN0JykKKyAgICByb290LnJlc2l6YWJsZSgwLCAwKQorICAgIF9pbml0aWFsaXplVGtWYXJpYW50VGVzdHMocm9vdCkKKworICAgICMgYSBzY3JvbGxhYmxlIExhYmVsIGxpa2UgY29uc3RhbnQgd2lkdGggdGV4dCB3aWRnZXQuCisgICAgZnJhbWVMYWJlbCA9IHRrLkZyYW1lKHJvb3QsIHBhZHg9MTApCisgICAgZnJhbWVMYWJlbC5wYWNrKCkKKyAgICB0ZXh0ID0gdGsuVGV4dChmcmFtZUxhYmVsLCB3cmFwPSd3b3JkJykKKyAgICB0ZXh0LmNvbmZpZ3VyZShiZz1yb290LmNnZXQoJ2JnJyksIHJlbGllZj0nZmxhdCcsIGhlaWdodD00LCB3aWR0aD03MCkKKyAgICBzY3JvbGxiYXIgPSB0ay5TY3JvbGxiYXIoZnJhbWVMYWJlbCwgY29tbWFuZD10ZXh0Lnl2aWV3KQorICAgIHRleHQuY29uZmlnKHlzY3JvbGxjb21tYW5kPXNjcm9sbGJhci5zZXQpCisgICAgc2Nyb2xsYmFyLnBhY2soc2lkZT0ncmlnaHQnLCBmaWxsPSd5JywgZXhwYW5kPUZhbHNlKQorICAgIHRleHQucGFjayhzaWRlPSdsZWZ0JywgZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlKQorCisgICAgdGVzdF9saXN0ID0gW10gIyBMaXN0IG9mIHR1cGxlcyBvZiB0aGUgZm9ybSAoc3BlYywgY2FsbGFibGUgd2lkZ2V0KQorICAgIGlmIHRlc3RzOgorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHRlc3Rfc3BlYyA9IGdsb2JhbHMoKVt0ZXN0Ll9fbmFtZV9fICsgJ19zcGVjJ10KKyAgICAgICAgICAgIHRlc3Rfc3BlY1snbmFtZSddID0gdGVzdC5fX25hbWVfXworICAgICAgICAgICAgdGVzdF9saXN0LmFwcGVuZCgodGVzdF9zcGVjLCAgdGVzdCkpCisgICAgZWxzZToKKyAgICAgICAgZm9yIGssIGQgaW4gZ2xvYmFscygpLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrLmVuZHN3aXRoKCdfc3BlYycpOgorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IGtbOi01XQorICAgICAgICAgICAgICAgIHRlc3Rfc3BlYyA9IGQKKyAgICAgICAgICAgICAgICB0ZXN0X3NwZWNbJ25hbWUnXSA9IHRlc3RfbmFtZQorICAgICAgICAgICAgICAgIG1vZCA9IGltcG9ydF9tb2R1bGUoJ2lkbGVsaWIuJyArIHRlc3Rfc3BlY1snZmlsZSddKQorICAgICAgICAgICAgICAgIHRlc3QgPSBnZXRhdHRyKG1vZCwgdGVzdF9uYW1lKQorICAgICAgICAgICAgICAgIHRlc3RfbGlzdC5hcHBlbmQoKHRlc3Rfc3BlYywgdGVzdCkpCisKKyAgICB0ZXN0X25hbWUgPSB0ay5TdHJpbmdWYXIoJycpCisgICAgY2FsbGFibGVfb2JqZWN0ID0gTm9uZQorICAgIHRlc3Rfa3dkcyA9IE5vbmUKKworICAgIGRlZiBuZXh0KCk6CisKKyAgICAgICAgbm9ubG9jYWwgdGVzdF9uYW1lLCBjYWxsYWJsZV9vYmplY3QsIHRlc3Rfa3dkcworICAgICAgICBpZiBsZW4odGVzdF9saXN0KSA9PSAxOgorICAgICAgICAgICAgbmV4dF9idXR0b24ucGFja19mb3JnZXQoKQorICAgICAgICB0ZXN0X3NwZWMsIGNhbGxhYmxlX29iamVjdCA9IHRlc3RfbGlzdC5wb3AoKQorICAgICAgICB0ZXN0X2t3ZHMgPSB0ZXN0X3NwZWNbJ2t3ZHMnXQorICAgICAgICB0ZXN0X2t3ZHNbJ3BhcmVudCddID0gcm9vdAorICAgICAgICB0ZXN0X25hbWUuc2V0KCdUZXN0ICcgKyB0ZXN0X3NwZWNbJ25hbWUnXSkKKworICAgICAgICB0ZXh0LmNvbmZpZ3VyZShzdGF0ZT0nbm9ybWFsJykgIyBlbmFibGUgdGV4dCBlZGl0aW5nCisgICAgICAgIHRleHQuZGVsZXRlKCcxLjAnLCdlbmQnKQorICAgICAgICB0ZXh0Lmluc2VydCgiMS4wIix0ZXN0X3NwZWNbJ21zZyddKQorICAgICAgICB0ZXh0LmNvbmZpZ3VyZShzdGF0ZT0nZGlzYWJsZWQnKSAjIHByZXNlcnZlIHJlYWQtb25seSBwcm9wZXJ0eQorCisgICAgZGVmIHJ1bl90ZXN0KCk6CisgICAgICAgIHdpZGdldCA9IGNhbGxhYmxlX29iamVjdCgqKnRlc3Rfa3dkcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQod2lkZ2V0LnJlc3VsdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgYnV0dG9uID0gdGsuQnV0dG9uKHJvb3QsIHRleHR2YXJpYWJsZT10ZXN0X25hbWUsIGNvbW1hbmQ9cnVuX3Rlc3QpCisgICAgYnV0dG9uLnBhY2soKQorICAgIG5leHRfYnV0dG9uID0gdGsuQnV0dG9uKHJvb3QsIHRleHQ9Ik5leHQiLCBjb21tYW5kPW5leHQpCisgICAgbmV4dF9idXR0b24ucGFjaygpCisKKyAgICBuZXh0KCkKKworICAgIHJvb3QubWFpbmxvb3AoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bigpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja19pZGxlLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfaWRsZS5weQppbmRleCBjMzY0YTI0Li4xNjcyYTM0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja19pZGxlLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9tb2NrX2lkbGUucHkKQEAgLTUsNiArNSwzMyBAQAogCiBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfdGsgaW1wb3J0IFRleHQKIAorY2xhc3MgRnVuYzoKKyAgICAnJydNb2NrIGZ1bmN0aW9uIGNhcHR1cmVzIGFyZ3MgYW5kIHJldHVybnMgcmVzdWx0IHNldCBieSB0ZXN0LgorCisgICAgQXR0cmlidXRlczoKKyAgICBzZWxmLmNhbGxlZCAtIHJlY29yZHMgY2FsbCBldmVuIGlmIG5vIGFyZ3MsIGt3ZHMgcGFzc2VkLgorICAgIHNlbGYucmVzdWx0IC0gc2V0IGJ5IGluaXQsIHJldHVybmVkIGJ5IGNhbGwuCisgICAgc2VsZi5hcmdzIC0gY2FwdHVyZXMgcG9zaXRpb25hbCBhcmd1bWVudHMuCisgICAgc2VsZi5rd2RzIC0gY2FwdHVyZXMga2V5d29yZCBhcmd1bWVudHMuCisKKyAgICBNb3N0IGNvbW1vbiB1c2Ugd2lsbCBwcm9iYWJseSBiZSB0byBtb2NrIG1ldGhvZHMuCisgICAgTW9ja190ay5WYXIgYW5kIE1ib3hfZnVuYyBhcmUgc3BlY2lhbCB2YXJpYW50cyBvZiB0aGlzLgorICAgICcnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXN1bHQ9Tm9uZSk6CisgICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5yZXN1bHQgPSByZXN1bHQKKyAgICAgICAgc2VsZi5hcmdzID0gTm9uZQorICAgICAgICBzZWxmLmt3ZHMgPSBOb25lCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworICAgICAgICBzZWxmLmt3ZHMgPSBrd2RzCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5yZXN1bHQsIEJhc2VFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5yZXN1bHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorCisKIGNsYXNzIEVkaXRvcjoKICAgICAnJydNaW5pbWFsbHkgaW1pdGF0ZSBFZGl0b3JXaW5kb3cuRWRpdG9yV2luZG93IGNsYXNzLgogICAgICcnJwpAQCAtMTcsNiArNDQsNyBAQAogICAgICAgICBsYXN0ID0gc2VsZi50ZXh0LmluZGV4KCdlbmQnKQogICAgICAgICByZXR1cm4gZmlyc3QsIGxhc3QKIAorCiBjbGFzcyBVbmRvRGVsZWdhdG9yOgogICAgICcnJ01pbmltYWxseSBpbWl0YXRlIFVuZG9EZWxlZ2F0b3IsVW5kb0RlbGVnYXRvciBjbGFzcy4KICAgICAnJycKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9tb2NrX3RrLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfdGsucHkKaW5kZXggNzYyYmJjOS4uYjlmZDUyMSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfdGsucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfdGsucHkKQEAgLTEsOSArMSwyNyBAQAogIiIiQ2xhc3NlcyB0aGF0IHJlcGxhY2UgdGtpbnRlciBndWkgb2JqZWN0cyB1c2VkIGJ5IGFuIG9iamVjdCBiZWluZyB0ZXN0ZWQuCiAKLUEgZ3VpIG9iamVjdCBpcyBhbnl0aGluZyB3aXRoIGEgbWFzdGVyIG9yIHBhcmVudCBwYXJhbWVudGVyLCB3aGljaCBpcyB0eXBpY2FsbHkKLXJlcXVpcmVkIGluIHNwaXRlIG9mIHdoYXQgdGhlIGRvYyBzdHJpbmdzIHNheS4KK0EgZ3VpIG9iamVjdCBpcyBhbnl0aGluZyB3aXRoIGEgbWFzdGVyIG9yIHBhcmVudCBwYXJhbWVudGVyLCB3aGljaCBpcwordHlwaWNhbGx5IHJlcXVpcmVkIGluIHNwaXRlIG9mIHdoYXQgdGhlIGRvYyBzdHJpbmdzIHNheS4KICIiIgogCitjbGFzcyBFdmVudDoKKyAgICAnJydNaW5pbWFsIG1vY2sgd2l0aCBhdHRyaWJ1dGVzIGZvciB0ZXN0aW5nIGV2ZW50IGhhbmRsZXJzLgorCisgICAgVGhpcyBpcyBub3QgYSBndWkgb2JqZWN0LCBidXQgaXMgdXNlZCBhcyBhbiBhcmd1bWVudCBmb3IgY2FsbGJhY2tzCisgICAgdGhhdCBhY2Nlc3MgYXR0cmlidXRlcyBvZiB0aGUgZXZlbnQgcGFzc2VkLiBJZiBhIGNhbGxiYWNrIGlnbm9yZXMKKyAgICB0aGUgZXZlbnQsIG90aGVyIHRoYW4gdGhlIGZhY3QgdGhhdCBpcyBoYXBwZW5lZCwgcGFzcyAnZXZlbnQnLgorCisgICAgS2V5Ym9hcmQsIG1vdXNlLCB3aW5kb3csIGFuZCBvdGhlciBzb3VyY2VzIGdlbmVyYXRlIEV2ZW50IGluc3RhbmNlcy4KKyAgICBFdmVudCBpbnN0YW5jZXMgaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6IHNlcmlhbCAobnVtYmVyIG9mCisgICAgZXZlbnQpLCB0aW1lIChvZiBldmVudCksIHR5cGUgKG9mIGV2ZW50IGFzIG51bWJlciksIHdpZGdldCAoaW4gd2hpY2gKKyAgICBldmVudCBvY2N1cnJlZCksIGFuZCB4LHkgKHBvc2l0aW9uIG9mIG1vdXNlKS4gVGhlcmUgYXJlIG90aGVyCisgICAgYXR0cmlidXRlcyBmb3Igc3BlY2lmaWMgZXZlbnRzLCBzdWNoIGFzIGtleWNvZGUgZm9yIGtleSBldmVudHMuCisgICAgdGtpbnRlci5FdmVudC5fX2RvY19fIGhhcyBtb3JlIGJ1dCBpcyBzdGlsbCBub3QgY29tcGxldGUuCisgICAgJycnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dkcyk6CisgICAgICAgICJDcmVhdGUgZXZlbnQgd2l0aCBhdHRyaWJ1dGVzIG5lZWRlZCBmb3IgdGVzdCIKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoa3dkcykKKwogY2xhc3MgVmFyOgogICAgICJVc2UgZm9yIFN0cmluZy9JbnQvQm9vbGVhblZhcjogaW5jb21wbGV0ZSIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIHZhbHVlPU5vbmUsIG5hbWU9Tm9uZSk6CkBAIC0yMCw5ICszOCwxMCBAQAogCiAgICAgSW5zdGVhZCBvZiBkaXNwbGF5aW5nIGEgbWVzc2FnZSBib3gsIHRoZSBtb2NrJ3MgY2FsbCBtZXRob2Qgc2F2ZXMgdGhlCiAgICAgYXJndW1lbnRzIGFzIGluc3RhbmNlIGF0dHJpYnV0ZXMsIHdoaWNoIHRlc3QgZnVuY3Rpb25zIGNhbiB0aGVuIGV4YW1pbWUuCisgICAgVGhlIHRlc3QgY2FuIHNldCB0aGUgcmVzdWx0IHJldHVybmVkIHRvIGFzayBmdW5jdGlvbgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5yZXN1bHQgPSBOb25lICAjIFRoZSByZXR1cm4gZm9yIGFsbCBzaG93IGZ1bmNzCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3VsdD1Ob25lKToKKyAgICAgICAgc2VsZi5yZXN1bHQgPSByZXN1bHQgICMgUmV0dXJuIE5vbmUgZm9yIGFsbCBzaG93IGZ1bmNzCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHRpdGxlLCBtZXNzYWdlLCAqYXJncywgKiprd2RzKToKICAgICAgICAgIyBTYXZlIGFsbCBhcmdzIGZvciBwb3NzaWJsZSBleGFtaW5hdGlvbiBieSB0ZXN0ZXIKICAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9hdXRvY29tcGxldGUucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9hdXRvY29tcGxldGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjODUzYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2F1dG9jb21wbGV0ZS5weQpAQCAtMCwwICsxLDE0MyBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRleHQsIFRjbEVycm9yCisKK2ltcG9ydCBpZGxlbGliLkF1dG9Db21wbGV0ZSBhcyBhYworaW1wb3J0IGlkbGVsaWIuQXV0b0NvbXBsZXRlV2luZG93IGFzIGFjdworaW1wb3J0IGlkbGVsaWIubWFjb3N4U3VwcG9ydCBhcyBtYWMKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja19pZGxlIGltcG9ydCBGdW5jCitmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfdGsgaW1wb3J0IEV2ZW50CisKK2NsYXNzIEF1dG9Db21wbGV0ZVdpbmRvdzoKKyAgICBkZWYgY29tcGxldGUoKToKKyAgICAgICAgcmV0dXJuCisKK2NsYXNzIER1bW15RWRpdHdpbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgdGV4dCk6CisgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorICAgICAgICBzZWxmLmluZGVudHdpZHRoID0gOAorICAgICAgICBzZWxmLnRhYndpZHRoID0gOAorICAgICAgICBzZWxmLmNvbnRleHRfdXNlX3BzMSA9IFRydWUKKworCitjbGFzcyBBdXRvQ29tcGxldGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgbWFjLnNldHVwQXBwKGNscy5yb290LCBOb25lKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnJvb3QpCisgICAgICAgIGNscy5lZGl0b3IgPSBEdW1teUVkaXR3aW4oY2xzLnJvb3QsIGNscy50ZXh0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCisgICAgICAgIGRlbCBjbHMudGV4dAorICAgICAgICBkZWwgY2xzLmVkaXRvcgorICAgICAgICBkZWwgY2xzLnJvb3QKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5lZGl0b3IudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICBzZWxmLmF1dG9jb21wbGV0ZSA9IGFjLkF1dG9Db21wbGV0ZShzZWxmLmVkaXRvcikKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hdXRvY29tcGxldGUuZWRpdHdpbiwgc2VsZi5lZGl0b3IpCisKKyAgICBkZWYgdGVzdF9tYWtlX2F1dG9jb21wbGV0ZV93aW5kb3coc2VsZik6CisgICAgICAgIHRlc3R3aW4gPSBzZWxmLmF1dG9jb21wbGV0ZS5fbWFrZV9hdXRvY29tcGxldGVfd2luZG93KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3R3aW4sIGFjdy5BdXRvQ29tcGxldGVXaW5kb3cpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfYXV0b2NvbXBsZXRlX3dpbmRvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuYXV0b2NvbXBsZXRld2luZG93ID0gKAorICAgICAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuX21ha2VfYXV0b2NvbXBsZXRlX3dpbmRvdygpKQorICAgICAgICBzZWxmLmF1dG9jb21wbGV0ZS5fcmVtb3ZlX2F1dG9jb21wbGV0ZV93aW5kb3coKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGV3aW5kb3cpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmb3JjZV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50IGNhbGxzIF9vcGVuX2NvbXBsZXRpb25zCisgICAgICAgIG9fY3MgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUub3Blbl9jb21wbGV0aW9ucyA9IG9fY3MKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuZm9yY2Vfb3Blbl9jb21wbGV0aW9uc19ldmVudCgnZXZlbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9fY3MuYXJncywgKFRydWUsIEZhbHNlLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X3RyeV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50KHNlbGYpOgorICAgICAgICBFcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYXV0b2NvbXBsZXRlID0gc2VsZi5hdXRvY29tcGxldGUKKyAgICAgICAgdHJ5Y29tcGxldGlvbnMgPSBzZWxmLmF1dG9jb21wbGV0ZS50cnlfb3Blbl9jb21wbGV0aW9uc19ldmVudAorICAgICAgICBvX2NfbCA9IEZ1bmMoKQorICAgICAgICBhdXRvY29tcGxldGUuX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgPSBvX2NfbAorCisgICAgICAgICMgX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBubyB0ZXh0IGluIGVkaXRvcgorICAgICAgICB0cnljb21wbGV0aW9ucygnZXZlbnQnKQorICAgICAgICBFcXVhbChvX2NfbC5hcmdzLCBOb25lKQorCisgICAgICAgICMgX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIENPTVBMRVRFX0FUVFJJQlVURVMgKDEpCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJzEuMCcsICdyZS4nKQorICAgICAgICB0cnljb21wbGV0aW9ucygnZXZlbnQnKQorICAgICAgICBFcXVhbChvX2NfbC5hcmdzLCAoRmFsc2UsIEZhbHNlLCBGYWxzZSwgMSkpCisKKyAgICAgICAgIyBfb3Blbl9jb21wbGV0aW9uc19sYXRlciBzaG91bGQgYmUgY2FsbGVkIHdpdGggQ09NUExFVEVfRklMRVMgKDIpCisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCcxLjAnLCAnIi4vTGliLycpCisgICAgICAgIHRyeWNvbXBsZXRpb25zKCdldmVudCcpCisgICAgICAgIEVxdWFsKG9fY19sLmFyZ3MsIChGYWxzZSwgRmFsc2UsIEZhbHNlLCAyKSkKKworICAgIGRlZiB0ZXN0X2F1dG9jb21wbGV0ZV9ldmVudChzZWxmKToKKyAgICAgICAgRXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGF1dG9jb21wbGV0ZSA9IHNlbGYuYXV0b2NvbXBsZXRlCisKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGF1dG9jb21wbGV0ZSBldmVudCBpcyBpZ25vcmVkIGlmIHVzZXIgaXMgcHJlc3NpbmcgYQorICAgICAgICAjIG1vZGlmaWVyIGtleSBpbiBhZGRpdGlvbiB0byB0aGUgdGFiIGtleQorICAgICAgICBldiA9IEV2ZW50KG1jX3N0YXRlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGVfZXZlbnQoZXYpKQorICAgICAgICBkZWwgZXYubWNfc3RhdGUKKworICAgICAgICAjIElmIGF1dG9jb21wbGV0ZSB3aW5kb3cgaXMgb3BlbiwgY29tcGxldGUoKSBtZXRob2QgaXMgY2FsbGVkCisgICAgICAgIHRlc3R3aW4gPSBzZWxmLmF1dG9jb21wbGV0ZS5fbWFrZV9hdXRvY29tcGxldGVfd2luZG93KCkKKyAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnMS4wJywgJ3JlLicpCisgICAgICAgIEVxdWFsKHNlbGYuYXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZV9ldmVudChldiksICdicmVhaycpCisKKyAgICAgICAgIyBJZiBhdXRvY29tcGxldGUgd2luZG93IGlzIG5vdCBhY3RpdmUgb3IgZG9lcyBub3QgZXhpc3QsCisgICAgICAgICMgb3Blbl9jb21wbGV0aW9ucyBpcyBjYWxsZWQuIFJldHVybiBkZXBlbmRzIG9uIGl0cyByZXR1cm4uCisgICAgICAgIGF1dG9jb21wbGV0ZS5fcmVtb3ZlX2F1dG9jb21wbGV0ZV93aW5kb3coKQorICAgICAgICBvX2NzID0gRnVuYygpICAjIC5yZXN1bHQgPSBOb25lCisgICAgICAgIGF1dG9jb21wbGV0ZS5vcGVuX2NvbXBsZXRpb25zID0gb19jcworICAgICAgICBFcXVhbChzZWxmLmF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGVfZXZlbnQoZXYpLCBOb25lKQorICAgICAgICBFcXVhbChvX2NzLmFyZ3MsIChGYWxzZSwgVHJ1ZSwgVHJ1ZSkpCisgICAgICAgIG9fY3MucmVzdWx0ID0gVHJ1ZQorICAgICAgICBFcXVhbChzZWxmLmF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGVfZXZlbnQoZXYpLCAnYnJlYWsnKQorICAgICAgICBFcXVhbChvX2NzLmFyZ3MsIChGYWxzZSwgVHJ1ZSwgVHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9vcGVuX2NvbXBsZXRpb25zX2xhdGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhdXRvY29tcGxldGUuX2RlbGF5ZWRfY29tcGxldGlvbl9pZCBpcyBzZXQKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZGVsYXllZF9vcGVuX2NvbXBsZXRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhdXRvY29tcGxldGUuX2RlbGF5ZWRfY29tcGxldGlvbl9pZCBzZXQgdG8gTm9uZSBhbmQgdGhhdAorICAgICAgICAjIG9wZW5fY29tcGxldGlvbnMgb25seSBjYWxsZWQgaWYgaW5zZXJ0aW9uIGluZGV4IGlzIHRoZSBzYW1lIGFzCisgICAgICAgICMgX2RlbGF5ZWRfY29tcGxldGlvbl9pbmRleAorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9vcGVuX2NvbXBsZXRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgY29tcGxldGlvbnMgb2YgZmlsZXMgYW5kIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyBub24tY29tcGxldGlvbgorICAgICAgICAjIG9mIGVycm9ycworICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9mZXRjaF9jb21wbGV0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZmV0Y2hfY29tcGxldGlvbnMgcmV0dXJucyAyIGxpc3RzOgorICAgICAgICAjIEZvciBhdHRyaWJ1dGUgY29tcGxldGlvbiwgYSBsYXJnZSBsaXN0IGNvbnRhaW5pbmcgYWxsIHZhcmlhYmxlcywgYW5kCisgICAgICAgICMgYSBzbWFsbCBsaXN0IGNvbnRhaW5pbmcgbm9uLXByaXZhdGUgdmFyaWFibGVzLgorICAgICAgICAjIEZvciBmaWxlIGNvbXBsZXRpb24sIGEgbGFyZ2UgbGlzdCBjb250YWluaW5nIGFsbCBmaWxlcyBpbiB0aGUgcGF0aCwKKyAgICAgICAgIyBhbmQgYSBzbWFsbCBsaXN0IGNvbnRhaW5pbmcgZmlsZXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCAnLicKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZ2V0X2VudGl0eShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYSBuYW1lIGlzIGluIHRoZSBuYW1lc3BhY2Ugb2Ygc3lzLm1vZHVsZXMgYW5kCisgICAgICAgICMgX19tYWluX18uX19kaWN0X18KKyAgICAgICAgcGFzcworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2F1dG9leHBhbmQucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9hdXRvZXhwYW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMTEyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9hdXRvZXhwYW5kLnB5CkBAIC0wLDAgKzEsMTQxIEBACisiIiJVbml0IHRlc3RzIGZvciBpZGxlbGliLkF1dG9FeHBhbmQiIiIKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitmcm9tIHRraW50ZXIgaW1wb3J0IFRleHQsIFRrCisjZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX3RrIGltcG9ydCBUZXh0Citmcm9tIGlkbGVsaWIuQXV0b0V4cGFuZCBpbXBvcnQgQXV0b0V4cGFuZAorCisKK2NsYXNzIER1bW15X0VkaXR3aW46CisgICAgIyBBdXRvRXhwYW5kLl9faW5pdF9fIG9ubHkgbmVlZHMgLnRleHQKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCk6CisgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKworY2xhc3MgQXV0b0V4cGFuZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgaWYgJ3RraW50ZXInIGluIHN0cihUZXh0KToKKyAgICAgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICAgICAgY2xzLnRrID0gVGsoKQorICAgICAgICAgICAgY2xzLnRleHQgPSBUZXh0KGNscy50aykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNscy50ZXh0ID0gVGV4dCgpCisgICAgICAgIGNscy5hdXRvX2V4cGFuZCA9IEF1dG9FeHBhbmQoRHVtbXlfRWRpdHdpbihjbHMudGV4dCkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBpZiBoYXNhdHRyKGNscywgJ3RrJyk6CisgICAgICAgICAgICBjbHMudGsuZGVzdHJveSgpCisgICAgICAgICAgICBkZWwgY2xzLnRrCisgICAgICAgIGRlbCBjbHMudGV4dCwgY2xzLmF1dG9fZXhwYW5kCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorCisgICAgZGVmIHRlc3RfZ2V0X3ByZXZ3b3JkKHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIHByZXZpb3VzID0gc2VsZi5hdXRvX2V4cGFuZC5nZXRwcmV2d29yZAorICAgICAgICBlcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ3QnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAndCcpCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdoaXMnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAndGhpcycpCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICcgJykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJycpCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdpcycpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdpcycpCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdcbnNhbXBsZVxuc3RyaW5nJykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ3N0cmluZycpCisKKyAgICAgICAgdGV4dC5kZWxldGUoJzMuMCcsICdpbnNlcnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnJykKKworICAgICAgICB0ZXh0LmRlbGV0ZSgnMS4wJywgJ2VuZCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICcnKQorCisgICAgZGVmIHRlc3RfYmVmb3JlX29ubHkoc2VsZik6CisgICAgICAgIHByZXZpb3VzID0gc2VsZi5hdXRvX2V4cGFuZC5nZXRwcmV2d29yZAorICAgICAgICBleHBhbmQgPSBzZWxmLmF1dG9fZXhwYW5kLmV4cGFuZF93b3JkX2V2ZW50CisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2luc2VydCcsICdhYiBhYyBieCBhZCBhYiBhJykKKyAgICAgICAgZXF1YWwoc2VsZi5hdXRvX2V4cGFuZC5nZXR3b3JkcygpLCBbJ2FiJywgJ2FkJywgJ2FjJywgJ2EnXSkKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhYicpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWQnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2FjJykKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhJykKKworICAgIGRlZiB0ZXN0X2FmdGVyX29ubHkoc2VsZik6CisgICAgICAgICMgQWxzbyBhZGQgcHVuY3R1YXRpb24gJ25vaXNlJyB0aGF0IHNob3VkIGJlIGlnbm9yZWQuCisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhLCBbYWJdIGFjOiAoKSBieCIiIGNkIGFjPSBhZCB5YScpCisgICAgICAgIHRleHQubWFya19zZXQoJ2luc2VydCcsICcxLjEnKQorICAgICAgICBlcXVhbChzZWxmLmF1dG9fZXhwYW5kLmdldHdvcmRzKCksIFsnYWInLCAnYWMnLCAnYWQnLCAnYSddKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2FiJykKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhYycpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWQnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2EnKQorCisgICAgZGVmIHRlc3RfYm90aF9iZWZvcmVfYWZ0ZXIoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhYiB4eSB5elxuJykKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhIGFjIGJ5IGFjJykKKworICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMi4xJykKKyAgICAgICAgZXF1YWwoc2VsZi5hdXRvX2V4cGFuZC5nZXR3b3JkcygpLCBbJ2FiJywgJ2FjJywgJ2EnXSkKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhYicpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWMnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2EnKQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhwYW5kX2Nhc2VzKHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgIyBubyBleHBhbnNpb24gY2FuZGlkYXRlIGZvdW5kCisgICAgICAgIGVxdWFsKHNlbGYuYXV0b19leHBhbmQuZ2V0d29yZHMoKSwgW10pCisgICAgICAgIGVxdWFsKGV4cGFuZCgnZXZlbnQnKSwgJ2JyZWFrJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2J4IGN5IGR6IGEnKQorICAgICAgICBlcXVhbChzZWxmLmF1dG9fZXhwYW5kLmdldHdvcmRzKCksIFtdKQorCisgICAgICAgICMgcmVzZXQgc3RhdGUgYnkgc3VjY2Vzc2Z1bGx5IGV4cGFuZGluZyBvbmNlCisgICAgICAgICMgbW92ZSBjdXJzb3IgdG8gYW5vdGhlciBwb3NpdGlvbiBhbmQgZXhwYW5kIGFnYWluCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnYWMgeHkgYSBhYyBhZCBhJykKKyAgICAgICAgdGV4dC5tYXJrX3NldCgnaW5zZXJ0JywgJzEuNycpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBpbml0aWFsX3N0YXRlID0gc2VsZi5hdXRvX2V4cGFuZC5zdGF0ZQorICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMS5lbmQnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgbmV3X3N0YXRlID0gc2VsZi5hdXRvX2V4cGFuZC5zdGF0ZQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluaXRpYWxfc3RhdGUsIG5ld19zdGF0ZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY2FsbHRpcHMucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQppbmRleCBmMzYzNzY0Li40ZWUxNWFlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQpAQCAtNTQsOSArNTQsOSBAQAogCiAgICAgICAgIGd0ZXN0KExpc3QsIExpc3QuX19kb2NfXykKICAgICAgICAgZ3Rlc3QobGlzdC5fX25ld19fLAotICAgICAgICAgICAgICAgJ1QuX19uZXdfXyhTLCAuLi4pIC0+IGEgbmV3IG9iamVjdCB3aXRoIHR5cGUgUywgYSBzdWJ0eXBlIG9mIFQnKQorICAgICAgICAgICAgICAgJ0NyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IG9iamVjdC4gIFNlZSBoZWxwKHR5cGUpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuJykKICAgICAgICAgZ3Rlc3QobGlzdC5fX2luaXRfXywKLSAgICAgICAgICAgICAgICd4Ll9faW5pdF9fKC4uLikgaW5pdGlhbGl6ZXMgeDsgc2VlIGhlbHAodHlwZSh4KSkgZm9yIHNpZ25hdHVyZScpCisgICAgICAgICAgICAgICAnSW5pdGlhbGl6ZSBzZWxmLiAgU2VlIGhlbHAodHlwZShzZWxmKSkgZm9yIGFjY3VyYXRlIHNpZ25hdHVyZS4nKQogICAgICAgICBhcHBlbmRfZG9jID0gICJMLmFwcGVuZChvYmplY3QpIC0+IE5vbmUgLS0gYXBwZW5kIG9iamVjdCB0byBlbmQiCiAgICAgICAgIGd0ZXN0KGxpc3QuYXBwZW5kLCBhcHBlbmRfZG9jKQogICAgICAgICBndGVzdChbXS5hcHBlbmQsIGFwcGVuZF9kb2MpCkBAIC02OSw3ICs2OSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKHRleHR3cmFwLlRleHRXcmFwcGVyKSwgJycnXAogKHdpZHRoPTcwLCBpbml0aWFsX2luZGVudD0nJywgc3Vic2VxdWVudF9pbmRlbnQ9JycsIGV4cGFuZF90YWJzPVRydWUsCiAgICAgcmVwbGFjZV93aGl0ZXNwYWNlPVRydWUsIGZpeF9zZW50ZW5jZV9lbmRpbmdzPUZhbHNlLCBicmVha19sb25nX3dvcmRzPVRydWUsCi0gICAgZHJvcF93aGl0ZXNwYWNlPVRydWUsIGJyZWFrX29uX2h5cGhlbnM9VHJ1ZSwgdGFic2l6ZT04KScnJykKKyAgICBkcm9wX3doaXRlc3BhY2U9VHJ1ZSwgYnJlYWtfb25faHlwaGVucz1UcnVlLCB0YWJzaXplPTgsICosIG1heF9saW5lcz1Ob25lLAorICAgIHBsYWNlaG9sZGVyPScgWy4uLl0nKScnJykKIAogICAgIGRlZiB0ZXN0X2RvY2xpbmVfdHJ1bmNhdGlvbihzZWxmKToKICAgICAgICAgZGVmIGYoKTogcGFzcwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY29uZmlnZGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY29uZmlnZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ODMxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jb25maWdkaWFsb2cucHkKQEAgLTAsMCArMSwzMiBAQAorJycnVW5pdHRlc3RzIGZvciBpZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKKworQ292ZXJhZ2U6IDQ2JSBqdXN0IGJ5IGNyZWF0aW5nIGRpYWxvZy4gVGhlIG90aGVyIGhhbGYgaXMgY2hhbmdlIGNvZGUuCisKKycnJworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGsKK2Zyb20gaWRsZWxpYi5jb25maWdEaWFsb2cgaW1wb3J0IENvbmZpZ0RpYWxvZworZnJvbSBpZGxlbGliLm1hY29zeFN1cHBvcnQgaW1wb3J0IF9pbml0aWFsaXplVGtWYXJpYW50VGVzdHMKKworCitjbGFzcyBDb25maWdEaWFsb2dUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhjbHMucm9vdCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGNscy5yb290LmRlc3Ryb3koKQorICAgICAgICBkZWwgY2xzLnJvb3QKKworICAgIGRlZiB0ZXN0X2RpYWxvZyhzZWxmKToKKyAgICAgICAgZD1Db25maWdEaWFsb2coc2VsZi5yb290LCAnVGVzdCcsIF91dGVzdD1UcnVlKQorICAgICAgICBkLmRlc3Ryb3koKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2Zvcm1hdHBhcmFncmFwaC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2Zvcm1hdHBhcmFncmFwaC5weQppbmRleCBmNGE3YzJkLi42OTBjOTM2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9mb3JtYXRwYXJhZ3JhcGgucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfZm9ybWF0cGFyYWdyYXBoLnB5CkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAgICAgIyBTZXQgY3Vyc29yICgnaW5zZXJ0JyBtYXJrKSB0byAnMS4wJywgd2l0aGluIHRleHQuCiAgICAgICAgIHRleHQuaW5zZXJ0KCcxLjAnLCBzZWxmLnRlc3Rfc3RyaW5nKQogICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMS4wJykKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJykKKyAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJywgbGltaXQ9NzApCiAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0KCcxLjAnLCAnaW5zZXJ0JykKICAgICAgICAgIyBmaW5kIGZ1bmN0aW9uIGluY2x1ZGVzIFxuCiAgICAgICAgIGV4cGVjdGVkID0gKApAQCAtMzA1LDcgKzMwNSw3IEBACiAgICAgICAgICMgU2VsZWN0IGZyb20gMS4xMSB0byBsaW5lIGVuZC4KICAgICAgICAgdGV4dC5pbnNlcnQoJzEuMCcsIHNlbGYudGVzdF9zdHJpbmcpCiAgICAgICAgIHRleHQudGFnX2FkZCgnc2VsJywgJzEuMTEnLCAnMS5lbmQnKQotICAgICAgICBzZWxmLmZvcm1hdHRlcignUGFyYW1ldGVyRG9lc05vdGhpbmcnKQorICAgICAgICBzZWxmLmZvcm1hdHRlcignUGFyYW1ldGVyRG9lc05vdGhpbmcnLCBsaW1pdD03MCkKICAgICAgICAgcmVzdWx0ID0gdGV4dC5nZXQoJzEuMCcsICdpbnNlcnQnKQogICAgICAgICAjIHNlbGVjdGlvbiBleGNsdWRlcyBcbgogICAgICAgICBleHBlY3RlZCA9ICgKQEAgLTMxOSw3ICszMTksNyBAQAogICAgICAgICAjICBTZWxlY3QgMiBsb25nIGxpbmVzLgogICAgICAgICB0ZXh0Lmluc2VydCgnMS4wJywgc2VsZi5tdWx0aWxpbmVfdGVzdF9zdHJpbmcpCiAgICAgICAgIHRleHQudGFnX2FkZCgnc2VsJywgJzIuMCcsICc0LjAnKQotICAgICAgICBzZWxmLmZvcm1hdHRlcignUGFyYW1ldGVyRG9lc05vdGhpbmcnKQorICAgICAgICBzZWxmLmZvcm1hdHRlcignUGFyYW1ldGVyRG9lc05vdGhpbmcnLCBsaW1pdD03MCkKICAgICAgICAgcmVzdWx0ID0gdGV4dC5nZXQoJzIuMCcsICdpbnNlcnQnKQogICAgICAgICBleHBlY3RlZCA9ICgKICIgICAgVGhlIHNlY29uZCBsaW5lJ3MgbGVuZ3RoIGlzIHdheSBvdmVyIHRoZSBtYXggd2lkdGguIEl0IGdvZXMgb24gYW5kXG4iCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogICAgICAgICAjIFNldCBjdXJzb3IgKCdpbnNlcnQnKSB0byAnMS4wJywgd2l0aGluIGJsb2NrLgogICAgICAgICB0ZXh0Lmluc2VydCgnMS4wJywgc2VsZi5tdWx0aWxpbmVfdGVzdF9jb21tZW50KQotICAgICAgICBzZWxmLmZvcm1hdHRlcignUGFyYW1ldGVyRG9lc05vdGhpbmcnKQorICAgICAgICBzZWxmLmZvcm1hdHRlcignUGFyYW1ldGVyRG9lc05vdGhpbmcnLCBsaW1pdD03MCkKICAgICAgICAgcmVzdWx0ID0gdGV4dC5nZXQoJzEuMCcsICdpbnNlcnQnKQogICAgICAgICBleHBlY3RlZCA9ICgKICIjIFRoZSBmaXJzdCBsaW5lIGlzIHVuZGVyIHRoZSBtYXggd2lkdGguIFRoZSBzZWNvbmQgbGluZSdzIGxlbmd0aCBpc1xuIgpAQCAtMzQ4LDcgKzM0OCw3IEBACiAgICAgICAgICMgU2VsZWN0IGxpbmUgMiwgdmVyaWZ5IGxpbmUgMSB1bmFmZmVjdGVkLgogICAgICAgICB0ZXh0Lmluc2VydCgnMS4wJywgc2VsZi5tdWx0aWxpbmVfdGVzdF9jb21tZW50KQogICAgICAgICB0ZXh0LnRhZ19hZGQoJ3NlbCcsICcyLjAnLCAnMy4wJykKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJykKKyAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJywgbGltaXQ9NzApCiAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0KCcxLjAnLCAnaW5zZXJ0JykKICAgICAgICAgZXhwZWN0ZWQgPSAoCiAiIyBUaGUgZmlyc3QgbGluZSBpcyB1bmRlciB0aGUgbWF4IHdpZHRoLlxuIgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaHlwZXJwYXJzZXIucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9oeXBlcnBhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZjNzgzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaHlwZXJwYXJzZXIucHkKQEAgLTAsMCArMSwyNzMgQEAKKyIiIlVuaXR0ZXN0IGZvciBpZGxlbGliLkh5cGVyUGFyc2VyIiIiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVGV4dAorZnJvbSBpZGxlbGliLkVkaXRvcldpbmRvdyBpbXBvcnQgRWRpdG9yV2luZG93Citmcm9tIGlkbGVsaWIuSHlwZXJQYXJzZXIgaW1wb3J0IEh5cGVyUGFyc2VyCisKK2NsYXNzIER1bW15RWRpdHdpbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCk6CisgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKyAgICAgICAgc2VsZi5pbmRlbnR3aWR0aCA9IDgKKyAgICAgICAgc2VsZi50YWJ3aWR0aCA9IDgKKyAgICAgICAgc2VsZi5jb250ZXh0X3VzZV9wczEgPSBUcnVlCisgICAgICAgIHNlbGYubnVtX2NvbnRleHRfbGluZXMgPSA1MCwgNTAwLCAxMDAwCisKKyAgICBfYnVpbGRfY2hhcl9pbl9zdHJpbmdfZnVuYyA9IEVkaXRvcldpbmRvdy5fYnVpbGRfY2hhcl9pbl9zdHJpbmdfZnVuYworICAgIGlzX2NoYXJfaW5fc3RyaW5nID0gRWRpdG9yV2luZG93LmlzX2NoYXJfaW5fc3RyaW5nCisKKworY2xhc3MgSHlwZXJQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjb2RlID0gKAorICAgICAgICAgICAgJyIiIlRoaXMgaXMgYSBtb2R1bGUgZG9jc3RyaW5nIiIiXG4nCisgICAgICAgICAgICAnIyB0aGlzIGxpbmUgaXMgYSBjb21tZW50XG4nCisgICAgICAgICAgICAneCA9ICJ0aGlzIGlzIGEgc3RyaW5nIlxuJworICAgICAgICAgICAgInkgPSAndGhpcyBpcyBhbHNvIGEgc3RyaW5nJ1xuIgorICAgICAgICAgICAgJ2wgPSBbaSBmb3IgaSBpbiByYW5nZSgxMCldXG4nCisgICAgICAgICAgICAnbSA9IFtweSpweSBmb3IgIyBjb21tZW50XG4nCisgICAgICAgICAgICAnICAgICAgIHB5IGluIGxdXG4nCisgICAgICAgICAgICAneC5fX2xlbl9fXG4nCisgICAgICAgICAgICAieiA9ICgocidhc2RmJykrKCdhJykpKVxuIgorICAgICAgICAgICAgJ1t4IGZvciB4IGluXG4nCisgICAgICAgICAgICAnZm9yID0gRmFsc2VcbicKKyAgICAgICAgICAgICdjbGljaMOpID0gInRoaXMgaXMgYSBzdHJpbmcgd2l0aCB1bmljb2RlLCB3aGF0IGEgY2xpY2jDqSInCisgICAgICAgICAgICApCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICByZXF1aXJlcygnZ3VpJykKKyAgICAgICAgY2xzLnJvb3QgPSBUaygpCisgICAgICAgIGNscy50ZXh0ID0gVGV4dChjbHMucm9vdCkKKyAgICAgICAgY2xzLmVkaXR3aW4gPSBEdW1teUVkaXR3aW4oY2xzLnRleHQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBkZWwgY2xzLnRleHQsIGNscy5lZGl0d2luCisgICAgICAgIGNscy5yb290LmRlc3Ryb3koKQorICAgICAgICBkZWwgY2xzLnJvb3QKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnaW5zZXJ0Jywgc2VsZi5jb2RlKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRleHQuZGVsZXRlKCcxLjAnLCAnZW5kJykKKyAgICAgICAgc2VsZi5lZGl0d2luLmNvbnRleHRfdXNlX3BzMSA9IFRydWUKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIGluZGV4KToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHBhcnNlciBvYmplY3Qgd2l0aCBpbmRleCBhdCAnaW5kZXgnCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gSHlwZXJQYXJzZXIoc2VsZi5lZGl0d2luLCBpbmRleCkKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0IGNvcm5lciBjYXNlcyBpbiB0aGUgaW5pdCBtZXRob2QKKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgdmU6CisgICAgICAgICAgICBzZWxmLnRleHQudGFnX2FkZCgnY29uc29sZScsICcxLjAnLCAnMS5lbmQnKQorICAgICAgICAgICAgcCA9IHNlbGYuZ2V0X3BhcnNlcignMS41JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncHJlY2VkZXMnLCBzdHIodmUuZXhjZXB0aW9uKSkKKworICAgICAgICAjIHRlc3Qgd2l0aG91dCBwczEKKyAgICAgICAgc2VsZi5lZGl0d2luLmNvbnRleHRfdXNlX3BzMSA9IEZhbHNlCisKKyAgICAgICAgIyBudW1iZXIgb2YgbGluZXMgbGVzc2VyIHRoYW4gNTAKKyAgICAgICAgcCA9IHNlbGYuZ2V0X3BhcnNlcignZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJhd3RleHQsIHNlbGYudGV4dC5nZXQoJzEuMCcsICdlbmQnKSkKKworICAgICAgICAjIG51bWJlciBvZiBsaW5lcyBncmVhdGVyIHRoYW4gNTAKKyAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnZW5kJywgc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpKjQpCisgICAgICAgIHAgPSBzZWxmLmdldF9wYXJzZXIoJzU0LjUnKQorCisgICAgZGVmIHRlc3RfaXNfaW5fc3RyaW5nKHNlbGYpOgorICAgICAgICBnZXQgPSBzZWxmLmdldF9wYXJzZXIKKworICAgICAgICBwID0gZ2V0KCcxLjAnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fc3RyaW5nKCkpCisgICAgICAgIHAgPSBnZXQoJzEuNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2luX3N0cmluZygpKQorICAgICAgICBwID0gZ2V0KCcyLjMnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fc3RyaW5nKCkpCisgICAgICAgIHAgPSBnZXQoJzMuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5pc19pbl9zdHJpbmcoKSkKKyAgICAgICAgcCA9IGdldCgnMy43JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfaW5fc3RyaW5nKCkpCisgICAgICAgIHAgPSBnZXQoJzQuNicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2luX3N0cmluZygpKQorICAgICAgICBwID0gZ2V0KCcxMi41NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2luX3N0cmluZygpKQorCisgICAgZGVmIHRlc3RfaXNfaW5fY29kZShzZWxmKToKKyAgICAgICAgZ2V0ID0gc2VsZi5nZXRfcGFyc2VyCisKKyAgICAgICAgcCA9IGdldCgnMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfaW5fY29kZSgpKQorICAgICAgICBwID0gZ2V0KCcxLjEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fY29kZSgpKQorICAgICAgICBwID0gZ2V0KCcyLjUnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fY29kZSgpKQorICAgICAgICBwID0gZ2V0KCczLjQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19pbl9jb2RlKCkpCisgICAgICAgIHAgPSBnZXQoJzMuNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5pc19pbl9jb2RlKCkpCisgICAgICAgIHAgPSBnZXQoJzQuMTQnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fY29kZSgpKQorCisgICAgZGVmIHRlc3RfZ2V0X3N1cnJvdW5kaW5nX2JyYWNrZXQoc2VsZik6CisgICAgICAgIGdldCA9IHNlbGYuZ2V0X3BhcnNlcgorCisgICAgICAgIGRlZiB3aXRob3V0X211c3RjbG9zZShwYXJzZXIpOgorICAgICAgICAgICAgIyBhIHV0aWxpdHkgZnVuY3Rpb24gdG8gZ2V0IHN1cnJvdW5kaW5nIGJyYWNrZXQKKyAgICAgICAgICAgICMgd2l0aCBtdXN0Y2xvc2U9RmFsc2UKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIuZ2V0X3N1cnJvdW5kaW5nX2JyYWNrZXRzKG11c3RjbG9zZT1GYWxzZSkKKworICAgICAgICBkZWYgd2l0aF9tdXN0Y2xvc2UocGFyc2VyKToKKyAgICAgICAgICAgICMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBzdXJyb3VuZGluZyBicmFja2V0CisgICAgICAgICAgICAjIHdpdGggbXVzdGNsb3NlPVRydWUKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIuZ2V0X3N1cnJvdW5kaW5nX2JyYWNrZXRzKG11c3RjbG9zZT1UcnVlKQorCisgICAgICAgIHAgPSBnZXQoJzMuMicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdpdGhfbXVzdGNsb3NlKHApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aXRob3V0X211c3RjbG9zZShwKSkKKworICAgICAgICBwID0gZ2V0KCc1LjYnKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwod2l0aG91dF9tdXN0Y2xvc2UocCksICgnNS40JywgJzUuMjUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHdpdGhvdXRfbXVzdGNsb3NlKHApLCB3aXRoX211c3RjbG9zZShwKSkKKworICAgICAgICBwID0gZ2V0KCc1LjIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHdpdGhvdXRfbXVzdGNsb3NlKHApLCAoJzUuMjEnLCAnNS4yNCcpKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwod2l0aG91dF9tdXN0Y2xvc2UocCksIHdpdGhfbXVzdGNsb3NlKHApKQorCisgICAgICAgIHAgPSBnZXQoJzYuMTUnKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwod2l0aG91dF9tdXN0Y2xvc2UocCksICgnNi40JywgJzYuZW5kJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdpdGhfbXVzdGNsb3NlKHApKQorCisgICAgICAgIHAgPSBnZXQoJzkuZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2l0aF9tdXN0Y2xvc2UocCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdpdGhvdXRfbXVzdGNsb3NlKHApKQorCisgICAgZGVmIHRlc3RfZ2V0X2V4cHJlc3Npb24oc2VsZik6CisgICAgICAgIGdldCA9IHNlbGYuZ2V0X3BhcnNlcgorCisgICAgICAgIHAgPSBnZXQoJzQuMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAneSAnKQorCisgICAgICAgIHAgPSBnZXQoJzQuNycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgdmU6CisgICAgICAgICAgICBwLmdldF9leHByZXNzaW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaXMgaW5zaWRlIGEgY29kZScsIHN0cih2ZS5leGNlcHRpb24pKQorCisgICAgICAgIHAgPSBnZXQoJzUuMjUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJ3JhbmdlKDEwKScpCisKKyAgICAgICAgcCA9IGdldCgnNi43JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICdweScpCisKKyAgICAgICAgcCA9IGdldCgnNi44JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICcnKQorCisgICAgICAgIHAgPSBnZXQoJzcuOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAncHknKQorCisgICAgICAgIHAgPSBnZXQoJzguZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICd4Ll9fbGVuX18nKQorCisgICAgICAgIHAgPSBnZXQoJzkuMTMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgInInYXNkZiciKQorCisgICAgICAgIHAgPSBnZXQoJzkuMTcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIHZlOgorICAgICAgICAgICAgcC5nZXRfZXhwcmVzc2lvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGluc2lkZSBhIGNvZGUnLCBzdHIodmUuZXhjZXB0aW9uKSkKKworICAgICAgICBwID0gZ2V0KCcxMC4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICcnKQorCisgICAgICAgIHAgPSBnZXQoJzEwLjYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJycpCisKKyAgICAgICAgcCA9IGdldCgnMTAuMTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJycpCisKKyAgICAgICAgcCA9IGdldCgnMTEuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAnJykKKworICAgICAgICBwID0gZ2V0KCcxMS4xMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAnRmFsc2UnKQorCisgICAgICAgIHAgPSBnZXQoJzEyLjYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJ2NsaWNow6knKQorCisgICAgZGVmIHRlc3RfZWF0X2lkZW50aWZpZXIoc2VsZik6CisgICAgICAgIGRlZiBpc192YWxpZF9pZChjYW5kaWRhdGUpOgorICAgICAgICAgICAgcmVzdWx0ID0gSHlwZXJQYXJzZXIuX2VhdF9pZGVudGlmaWVyKGNhbmRpZGF0ZSwgMCwgbGVuKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICBpZiByZXN1bHQgPT0gbGVuKGNhbmRpZGF0ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVycl9tc2cgPSAiVW5leHBlY3RlZCByZXN1bHQ6IHt9IChleHBlY3RlZCAwIG9yIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgbGVuKGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGVycl9tc2cpCisKKyAgICAgICAgIyBpbnZhbGlkIGZpcnN0IGNoYXJhY3RlciB3aGljaCBpcyB2YWxpZCBlbHNld2hlcmUgaW4gYW4gaWRlbnRpZmllcgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCcybm90aWQnKSkKKworICAgICAgICAjIEFTQ0lJLW9ubHkgdmFsaWQgaWRlbnRpZmllcnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCd2YWxpZF9pZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ192YWxpZF9pZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ3ZhbGlkX2lkXycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ18ydmFsaWRfaWQnKSkKKworICAgICAgICAjIGtleXdvcmRzIHdoaWNoIHNob3VsZCBiZSAiZWF0ZW4iCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc192YWxpZF9pZCgnVHJ1ZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ0ZhbHNlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc192YWxpZF9pZCgnTm9uZScpKQorCisgICAgICAgICMga2V5d29yZHMgd2hpY2ggc2hvdWxkIG5vdCBiZSAiZWF0ZW4iCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJ2ZvcicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCdpbXBvcnQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgncmV0dXJuJykpCisKKyAgICAgICAgIyB2YWxpZCB1bmljb2RlIGlkZW50aWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc192YWxpZF9pZCgnY2xpY2hlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc192YWxpZF9pZCgnY2xpY2jDqScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ2HZoicpKQorCisgICAgICAgICMgaW52YWxpZCB1bmljb2RlIGlkZW50aWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJzJhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJ9miYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCdhwrInKSkKKworICAgICAgICAjIHZhbGlkIGlkZW50aWZpZXIgYWZ0ZXIgInB1bmN0dWF0aW9uIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEh5cGVyUGFyc2VyLl9lYXRfaWRlbnRpZmllcignKyB2YXInLCAwLCA1KSwgbGVuKCd2YXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIeXBlclBhcnNlci5fZWF0X2lkZW50aWZpZXIoJyt2YXInLCAwLCA0KSwgbGVuKCd2YXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIeXBlclBhcnNlci5fZWF0X2lkZW50aWZpZXIoJy52YXInLCAwLCA0KSwgbGVuKCd2YXInKSkKKworICAgICAgICAjIGludmFsaWQgaWRlbnRpZmllcnMKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnKycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCcgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJzonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnPycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCdeJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJ1xcJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJyInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnImEgc3RyaW5nIicpKQorCisgICAgZGVmIHRlc3RfZWF0X2lkZW50aWZpZXJfdmFyaW91c19sZW5ndGhzKHNlbGYpOgorICAgICAgICBlYXRfaWQgPSBIeXBlclBhcnNlci5fZWF0X2lkZW50aWZpZXIKKworICAgICAgICBmb3IgbGVuZ3RoIGluIHJhbmdlKDEsIDIxKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF0X2lkKCdhJyAqIGxlbmd0aCwgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJ8OpJyAqIGxlbmd0aCwgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJ2EnICsgJzInICogKGxlbmd0aCAtIDEpLCAwLCBsZW5ndGgpLCBsZW5ndGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdF9pZCgnw6knICsgJzInICogKGxlbmd0aCAtIDEpLCAwLCBsZW5ndGgpLCBsZW5ndGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdF9pZCgnw6knICsgJ2EnICogKGxlbmd0aCAtIDEpLCAwLCBsZW5ndGgpLCBsZW5ndGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdF9pZCgnw6knICogKGxlbmd0aCAtIDEpICsgJ2EnLCAwLCBsZW5ndGgpLCBsZW5ndGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdF9pZCgnKycgKiBsZW5ndGgsIDAsIGxlbmd0aCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdF9pZCgnMicgKyAnYScgKiAobGVuZ3RoIC0gMSksIDAsIGxlbmd0aCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdF9pZCgnMicgKyAnw6knICogKGxlbmd0aCAtIDEpLCAwLCBsZW5ndGgpLCAwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9wYXJlbm1hdGNoLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGFyZW5tYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWJhNGJlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGFyZW5tYXRjaC5weQpAQCAtMCwwICsxLDEwOSBAQAorIiIiVGVzdCBpZGxlbGliLlBhcmVuTWF0Y2guIiIiCisjIFRoaXMgbXVzdCBjdXJyZW50bHkgYmUgYSBndWkgdGVzdCBiZWNhdXNlIFBhcmVuTWF0Y2ggbWV0aG9kcyB1c2UKKyMgc2V2ZXJhbCB0ZXh0IG1ldGhvZHMgbm90IGRlZmluZWQgb24gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ay5UZXh0LgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0Citmcm9tIGlkbGVsaWIuUGFyZW5NYXRjaCBpbXBvcnQgUGFyZW5NYXRjaAorCitjbGFzcyBEdW1teUVkaXR3aW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisgICAgICAgIHNlbGYuaW5kZW50d2lkdGggPSA4CisgICAgICAgIHNlbGYudGFid2lkdGggPSA4CisgICAgICAgIHNlbGYuY29udGV4dF91c2VfcHMxID0gVHJ1ZQorCisKK2NsYXNzIFBhcmVuTWF0Y2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgY2xzLnRleHQgPSBUZXh0KGNscy5yb290KQorICAgICAgICBjbHMuZWRpdHdpbiA9IER1bW15RWRpdHdpbihjbHMudGV4dCkKKyAgICAgICAgY2xzLmVkaXR3aW4udGV4dF9mcmFtZSA9IE1vY2soKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuZWRpdHdpbgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorCisgICAgZGVmIHRlc3RfcGFyZW5fZXhwcmVzc2lvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgUGFyZW5NYXRjaCB3aXRoICdleHByZXNzaW9uJyBzdHlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcG0gPSBQYXJlbk1hdGNoKHNlbGYuZWRpdHdpbikKKyAgICAgICAgcG0uc2V0X3N0eWxlKCdleHByZXNzaW9uJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2RlZiBmb29iYXIoYSwgYicpCisgICAgICAgIHBtLmZsYXNoX3BhcmVuX2V2ZW50KCdldmVudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzw8cGFyZW5tYXRjaC1jaGVjay1yZXN0b3JlPj4nLCB0ZXh0LmV2ZW50X2luZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHRleHQudGFnX3ByZXZyYW5nZSgncGFyZW4nLCAnZW5kJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnMS4xMCcsICcxLjE1JykpCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnKScpCisgICAgICAgIHBtLnJlc3RvcmVfZXZlbnQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCc8PHBhcmVubWF0Y2gtY2hlY2stcmVzdG9yZT4+JywgdGV4dC5ldmVudF9pbmZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwgKCkpCisKKyAgICAgICAgIyBwYXJlbl9jbG9zZWRfZXZlbnQgY2FuIG9ubHkgYmUgdGVzdGVkIGFzIGJlbG93CisgICAgICAgIHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnMS4xMCcsICcxLjE2JykpCisKKyAgICBkZWYgdGVzdF9wYXJlbl9kZWZhdWx0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBQYXJlbk1hdGNoIHdpdGggJ2RlZmF1bHQnIHN0eWxlLgorICAgICAgICAiIiIKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorICAgICAgICBwbS5zZXRfc3R5bGUoJ2RlZmF1bHQnKQorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZGVmIGZvb2JhcihhLCBiJykKKyAgICAgICAgcG0uZmxhc2hfcGFyZW5fZXZlbnQoJ2V2ZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignPDxwYXJlbm1hdGNoLWNoZWNrLXJlc3RvcmU+PicsIHRleHQuZXZlbnRfaW5mbygpKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcxLjEwJywgJzEuMTEnKSkKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICcpJykKKyAgICAgICAgcG0ucmVzdG9yZV9ldmVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJzw8cGFyZW5tYXRjaC1jaGVjay1yZXN0b3JlPj4nLCB0ZXh0LmV2ZW50X2luZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnRhZ19wcmV2cmFuZ2UoJ3BhcmVuJywgJ2VuZCcpLCAoKSkKKworICAgIGRlZiB0ZXN0X3BhcmVuX2Nvcm5lcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgY29ybmVyIGNhc2VzIGluIGZsYXNoX3BhcmVuX2V2ZW50IGFuZCBwYXJlbl9jbG9zZWRfZXZlbnQuCisKKyAgICAgICAgVGhlc2UgY2FzZXMgZm9yY2UgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhbmQgYWx0ZXJuYXRlIHBhdGhzLgorICAgICAgICAiIiIKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnIyB0aGlzIGlzIGEgY29tbWVuKScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ1xuZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG0uZmxhc2hfcGFyZW5fZXZlbnQoJ2V2ZW50JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJyBhLCAqYXJnKScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9yZXN0b3JlX3RpbWVyKHNlbGYpOgorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorICAgICAgICBwbS5yZXN0b3JlX2V2ZW50ID0gTW9jaygpCisgICAgICAgIHBtLmhhbmRsZV9yZXN0b3JlX3RpbWVyKDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbS5yZXN0b3JlX2V2ZW50LmNhbGxlZCkKKyAgICAgICAgcG0ucmVzdG9yZV9ldmVudC5yZXNldF9tb2NrKCkKKyAgICAgICAgcG0uaGFuZGxlX3Jlc3RvcmVfdGltZXIoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwbS5yZXN0b3JlX2V2ZW50LmNhbGxlZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9zZWFyY2hkaWFsb2diYXNlLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfc2VhcmNoZGlhbG9nYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2NkZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfc2VhcmNoZGlhbG9nYmFzZS5weQpAQCAtMCwwICsxLDE2NSBAQAorJycnVW5pdHRlc3RzIGZvciBpZGxlbGliL1NlYXJjaERpYWxvZ0Jhc2UucHkKKworQ292ZXJhZ2U6IDk5JS4gVGhlIG9ubHkgdGhpbmcgbm90IGNvdmVyZWQgaXMgaW5jb25zZXF1ZW50aWFsIC0tCit0ZXN0aW5nIHNraXBwaW5nIG9mIHN1aXRlIHdoZW4gc2VsZi5uZWVkd3JhcGJ1dHRvbiBpcyBmYWxzZS4KKworJycnCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVG9wbGV2ZWwsIEZyYW1lLCBMYWJlbCwgQm9vbGVhblZhciwgU3RyaW5nVmFyCitmcm9tIGlkbGVsaWIgaW1wb3J0IFNlYXJjaEVuZ2luZSBhcyBzZQorZnJvbSBpZGxlbGliIGltcG9ydCBTZWFyY2hEaWFsb2dCYXNlIGFzIHNkYgorZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX2lkbGUgaW1wb3J0IEZ1bmMKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ayBpbXBvcnQgVmFyLCBNYm94CisKKyMgVGhlIGZvbGxvd2luZyBjb3VsZCBoZWxwIG1ha2Ugc29tZSB0ZXN0cyBndWktZnJlZS4KKyMgSG93ZXZlciwgdGhleSBjdXJyZW50bHkgbWFrZSByYWRpb2J1dHRvbiB0ZXN0cyBmYWlsLgorIyNkZWYgc2V0VXBNb2R1bGUoKToKKyMjICAgICMgUmVwbGFjZSB0ayBvYmplY3RzIHVzZWQgdG8gaW5pdGlhbGl6ZSBzZS5TZWFyY2hFbmdpbmUuCisjIyAgICBzZS5Cb29sZWFuVmFyID0gVmFyCisjIyAgICBzZS5TdHJpbmdWYXIgPSBWYXIKKyMjCisjI2RlZiB0ZWFyRG93bk1vZHVsZSgpOgorIyMgICAgc2UuQm9vbGVhblZhciA9IEJvb2xlYW5WYXIKKyMjICAgIHNlLlN0cmluZ1ZhciA9IFN0cmluZ1ZhcgorCitjbGFzcyBTZWFyY2hEaWFsb2dCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICByZXF1aXJlcygnZ3VpJykKKyAgICAgICAgY2xzLnJvb3QgPSBUaygpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZW5naW5lID0gc2UuU2VhcmNoRW5naW5lKHNlbGYucm9vdCkgICMgTm9uZSBhbHNvIHNlZW1zIHRvIHdvcmsKKyAgICAgICAgc2VsZi5kaWFsb2cgPSBzZGIuU2VhcmNoRGlhbG9nQmFzZShyb290PXNlbGYucm9vdCwgZW5naW5lPXNlbGYuZW5naW5lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9vcGVuX2FuZF9jbG9zZShzZWxmKToKKyAgICAgICAgIyBvcGVuIGNhbGxzIGNyZWF0ZV93aWRnZXRzLCB3aGljaCBuZWVkcyBkZWZhdWx0X2NvbW1hbmQKKyAgICAgICAgc2VsZi5kaWFsb2cuZGVmYXVsdF9jb21tYW5kID0gTm9uZQorCisgICAgICAgICMgU2luY2UgdGV4dCBwYXJhbWV0ZXIgb2YgLm9wZW4gaXMgbm90IHVzZWQgaW4gYmFzZSBjbGFzcywKKyAgICAgICAgIyBwYXNzIGR1bW15ICd0ZXh0JyBpbnN0ZWFkIG9mIHRrLlRleHQoKS4KKyAgICAgICAgc2VsZi5kaWFsb2cub3BlbigndGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kaWFsb2cudG9wLnN0YXRlKCksICdub3JtYWwnKQorICAgICAgICBzZWxmLmRpYWxvZy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kaWFsb2cudG9wLnN0YXRlKCksICd3aXRoZHJhd24nKQorCisgICAgICAgIHNlbGYuZGlhbG9nLm9wZW4oJ3RleHQnLCBzZWFyY2hwaHJhc2U9ImhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRpYWxvZy5lbnQuZ2V0KCksICdoZWxsbycpCisgICAgICAgIHNlbGYuZGlhbG9nLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV93aWRnZXRzKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5jcmVhdGVfZW50cmllcyA9IEZ1bmMoKQorICAgICAgICBzZWxmLmRpYWxvZy5jcmVhdGVfb3B0aW9uX2J1dHRvbnMgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX290aGVyX2J1dHRvbnMgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucyA9IEZ1bmMoKQorCisgICAgICAgIHNlbGYuZGlhbG9nLmRlZmF1bHRfY29tbWFuZCA9IE5vbmUKKyAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX3dpZGdldHMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRpYWxvZy5jcmVhdGVfZW50cmllcy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRpYWxvZy5jcmVhdGVfb3B0aW9uX2J1dHRvbnMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuY3JlYXRlX290aGVyX2J1dHRvbnMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9tYWtlX2VudHJ5KHNlbGYpOgorICAgICAgICBlcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgc2VsZi5kaWFsb2cucm93ID0gMAorICAgICAgICBzZWxmLmRpYWxvZy50b3AgPSBUb3BsZXZlbChzZWxmLnJvb3QpCisgICAgICAgIGVudHJ5LCBsYWJlbCA9IHNlbGYuZGlhbG9nLm1ha2VfZW50cnkoIlRlc3Q6IiwgJ2hlbGxvJykKKyAgICAgICAgZXF1YWwobGFiZWxbJ3RleHQnXSwgJ1Rlc3Q6JykKKworICAgICAgICBzZWxmLmFzc2VydEluKGVudHJ5LmdldCgpLCAnaGVsbG8nKQorICAgICAgICBlZ2kgPSBlbnRyeS5ncmlkX2luZm8oKQorICAgICAgICBlcXVhbChpbnQoZWdpWydyb3cnXSksIDApCisgICAgICAgIGVxdWFsKGludChlZ2lbJ2NvbHVtbiddKSwgMSkKKyAgICAgICAgZXF1YWwoaW50KGVnaVsncm93c3BhbiddKSwgMSkKKyAgICAgICAgZXF1YWwoaW50KGVnaVsnY29sdW1uc3BhbiddKSwgMSkKKyAgICAgICAgZXF1YWwoc2VsZi5kaWFsb2cucm93LCAxKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2VudHJpZXMoc2VsZik6CisgICAgICAgIHNlbGYuZGlhbG9nLnJvdyA9IDAKKyAgICAgICAgc2VsZi5lbmdpbmUuc2V0cGF0KCdoZWxsbycpCisgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV9lbnRyaWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmRpYWxvZy5lbnQuZ2V0KCksICdoZWxsbycpCisKKyAgICBkZWYgdGVzdF9tYWtlX2ZyYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5yb3cgPSAwCisgICAgICAgIHNlbGYuZGlhbG9nLnRvcCA9IFRvcGxldmVsKHNlbGYucm9vdCkKKyAgICAgICAgZnJhbWUsIGxhYmVsID0gc2VsZi5kaWFsb2cubWFrZV9mcmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGFiZWwsICcnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnJhbWUsIEZyYW1lKQorCisgICAgICAgIGZyYW1lLCBsYWJlbCA9IHNlbGYuZGlhbG9nLm1ha2VfZnJhbWUoJ3Rlc3RsYWJlbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGFiZWxbJ3RleHQnXSwgJ3Rlc3RsYWJlbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmcmFtZSwgRnJhbWUpCisKKyAgICBkZWYgYnRuX3Rlc3Rfc2V0dXAoc2VsZiwgbWV0aCk6CisgICAgICAgIHNlbGYuZGlhbG9nLnRvcCA9IFRvcGxldmVsKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5kaWFsb2cucm93ID0gMAorICAgICAgICByZXR1cm4gbWV0aCgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfb3B0aW9uX2J1dHRvbnMoc2VsZik6CisgICAgICAgIGUgPSBzZWxmLmVuZ2luZQorICAgICAgICBmb3Igc3RhdGUgaW4gKDAsIDEpOgorICAgICAgICAgICAgZm9yIHZhciBpbiAoZS5yZXZhciwgZS5jYXNldmFyLCBlLndvcmR2YXIsIGUud3JhcHZhcik6CisgICAgICAgICAgICAgICAgdmFyLnNldChzdGF0ZSkKKyAgICAgICAgICAgIGZyYW1lLCBvcHRpb25zID0gc2VsZi5idG5fdGVzdF9zZXR1cCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX29wdGlvbl9idXR0b25zKQorICAgICAgICAgICAgZm9yIHNwZWMsIGJ1dHRvbiBpbiB6aXAgKG9wdGlvbnMsIGZyYW1lLnBhY2tfc2xhdmVzKCkpOgorICAgICAgICAgICAgICAgIHZhciwgbGFiZWwgPSBzcGVjCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidXR0b25bJ3RleHQnXSwgbGFiZWwpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXIuZ2V0KCksIHN0YXRlKQorICAgICAgICAgICAgICAgIGlmIHN0YXRlID09IDE6CisgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kZXNlbGVjdCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXIuZ2V0KCksIDEgLSBzdGF0ZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9vdGhlcl9idXR0b25zKHNlbGYpOgorICAgICAgICBmb3Igc3RhdGUgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgIHZhciA9IHNlbGYuZW5naW5lLmJhY2t2YXIKKyAgICAgICAgICAgIHZhci5zZXQoc3RhdGUpCisgICAgICAgICAgICBmcmFtZSwgb3RoZXJzID0gc2VsZi5idG5fdGVzdF9zZXR1cCgKKyAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy5jcmVhdGVfb3RoZXJfYnV0dG9ucykKKyAgICAgICAgICAgIGJ1dHRvbnMgPSBmcmFtZS5wYWNrX3NsYXZlcygpCisgICAgICAgICAgICBmb3Igc3BlYywgYnV0dG9uIGluIHppcChvdGhlcnMsIGJ1dHRvbnMpOgorICAgICAgICAgICAgICAgIHZhbCwgbGFiZWwgPSBzcGVjCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidXR0b25bJ3RleHQnXSwgbGFiZWwpCisgICAgICAgICAgICAgICAgaWYgdmFsID09IHN0YXRlOgorICAgICAgICAgICAgICAgICAgICAjIGhpdCBvdGhlciBidXR0b24sIHRoZW4gdGhpcyBvbmUKKyAgICAgICAgICAgICAgICAgICAgIyBpbmRleGVzIGRlcGVuZCBvbiBidXR0b24gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXIuZ2V0KCksIHN0YXRlKQorICAgICAgICAgICAgICAgICAgICBidXR0b25zW3ZhbF0uc2VsZWN0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXIuZ2V0KCksIDEgLSBzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnV0dG9uc1sxLXZhbF0uc2VsZWN0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXIuZ2V0KCksIHN0YXRlKQorCisgICAgZGVmIHRlc3RfbWFrZV9idXR0b24oc2VsZik6CisgICAgICAgIHNlbGYuZGlhbG9nLnRvcCA9IFRvcGxldmVsKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5kaWFsb2cuYnV0dG9uZnJhbWUgPSBGcmFtZShzZWxmLmRpYWxvZy50b3ApCisgICAgICAgIGJ0biA9IHNlbGYuZGlhbG9nLm1ha2VfYnV0dG9uKCdUZXN0Jywgc2VsZi5kaWFsb2cuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnRuWyd0ZXh0J10sICdUZXN0JykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb21tYW5kX2J1dHRvbnMoc2VsZik6CisgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV9jb21tYW5kX2J1dHRvbnMoKQorICAgICAgICAjIExvb2sgZm9yIGNsb3NlIGJ1dHRvbiBjb21tYW5kIGluIGJ1dHRvbmZyYW1lCisgICAgICAgIGNsb3NlYnV0dG9uY29tbWFuZCA9ICcnCisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmRpYWxvZy5idXR0b25mcmFtZS53aW5mb19jaGlsZHJlbigpOgorICAgICAgICAgICAgaWYgY2hpbGRbJ3RleHQnXSA9PSAnY2xvc2UnOgorICAgICAgICAgICAgICAgIGNsb3NlYnV0dG9uY29tbWFuZCA9IGNoaWxkWydjb21tYW5kJ10KKyAgICAgICAgc2VsZi5hc3NlcnRJbignY2xvc2UnLCBjbG9zZWJ1dHRvbmNvbW1hbmQpCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIsIGV4aXQ9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3RleHR2aWV3LnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdGV4dHZpZXcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlNWI4MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3RleHR2aWV3LnB5CkBAIC0wLDAgKzEsOTcgQEAKKycnJ1Rlc3QgdGhlIGZ1bmN0aW9ucyBhbmQgbWFpbiBjbGFzcyBtZXRob2Qgb2YgdGV4dFZpZXcucHkuCisKK1NpbmNlIGFsbCBtZXRob2RzIGFuZCBmdW5jdGlvbnMgY3JlYXRlIChvciBkZXN0cm95KSBhIFRleHRWaWV3ZXIsIHdoaWNoCitpcyBhIHdpZGdldCBjb250YWluaW5nIG11bHRpcGxlIHdpZGdldHMsIGFsbCB0ZXN0cyBtdXN0IGJlIGd1aSB0ZXN0cy4KK1VzaW5nIG1vY2sgVGV4dCB3b3VsZCBub3QgY2hhbmdlIHRoaXMuICBPdGhlciBtb2NrcyBhcmUgdXNlZCB0byByZXRyaWV2ZQoraW5mb3JtYXRpb24gYWJvdXQgY2FsbHMuCisKK1RoZSBjb3ZlcmFnZSBpcyBlc3NlbnRpYWxseSAxMDAlLgorJycnCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK3JlcXVpcmVzKCdndWknKQorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSB0a2ludGVyIGltcG9ydCBUaworZnJvbSBpZGxlbGliIGltcG9ydCB0ZXh0VmlldyBhcyB0dgorZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX2lkbGUgaW1wb3J0IEZ1bmMKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ayBpbXBvcnQgTWJveAorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBnbG9iYWwgcm9vdAorICAgIHJvb3QgPSBUaygpCisKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgIGdsb2JhbCByb290CisgICAgcm9vdC5kZXN0cm95KCkgICMgcHlmbGFrZXMgZmFsc2VseSBzZWVzIHJvb3QgYXMgdW5kZWZpbmVkCisgICAgZGVsIHJvb3QKKworCitjbGFzcyBUVih0di5UZXh0Vmlld2VyKTogICMgdXNlZCBieSBUZXh0Vmlld1Rlc3QKKyAgICB0cmFuc2llbnQgPSBGdW5jKCkKKyAgICBncmFiX3NldCA9IEZ1bmMoKQorICAgIHdhaXRfd2luZG93ID0gRnVuYygpCisKK2NsYXNzIFRleHRWaWV3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIFRWLnRyYW5zaWVudC5fX2luaXRfXygpCisgICAgICAgIFRWLmdyYWJfc2V0Ll9faW5pdF9fKCkKKyAgICAgICAgVFYud2FpdF93aW5kb3cuX19pbml0X18oKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2RhbChzZWxmKToKKyAgICAgICAgdmlldyA9IFRWKHJvb3QsICdUaXRsZScsICd0ZXN0IHRleHQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVFYudHJhbnNpZW50LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFRWLmdyYWJfc2V0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFRWLndhaXRfd2luZG93LmNhbGxlZCkKKyAgICAgICAgdmlldy5PaygpCisKKyAgICBkZWYgdGVzdF9pbml0X25vbm1vZGFsKHNlbGYpOgorICAgICAgICB2aWV3ID0gVFYocm9vdCwgJ1RpdGxlJywgJ3Rlc3QgdGV4dCcsIG1vZGFsPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRWLnRyYW5zaWVudC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVFYuZ3JhYl9zZXQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRWLndhaXRfd2luZG93LmNhbGxlZCkKKyAgICAgICAgdmlldy5PaygpCisKKyAgICBkZWYgdGVzdF9vayhzZWxmKToKKyAgICAgICAgdmlldyA9IFRWKHJvb3QsICdUaXRsZScsICd0ZXN0IHRleHQnLCBtb2RhbD1GYWxzZSkKKyAgICAgICAgdmlldy5kZXN0cm95ID0gRnVuYygpCisgICAgICAgIHZpZXcuT2soKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodmlldy5kZXN0cm95LmNhbGxlZCkKKyAgICAgICAgZGVsIHZpZXcuZGVzdHJveSAgIyB1bm1hc2sgcmVhbCBmdW5jdGlvbgorICAgICAgICB2aWV3LmRlc3Ryb3kKKworCitjbGFzcyB0ZXh0dmlld1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLm9yaWdfbWJveCA9IHR2LnRrTWVzc2FnZUJveAorICAgICAgICB0di50a01lc3NhZ2VCb3ggPSBNYm94CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICB0di50a01lc3NhZ2VCb3ggPSBjbHMub3JpZ19tYm94CisgICAgICAgIGRlbCBjbHMub3JpZ19tYm94CisKKyAgICBkZWYgdGVzdF92aWV3X3RleHQoc2VsZik6CisgICAgICAgICMgSWYgbW9kYWwgVHJ1ZSwgdGtpbnRlciB3aWxsIGVycm9yIHdpdGggJ2Nhbid0IGludm9rZSAiZXZlbnQiIGNvbW1hbmQnCisgICAgICAgIHZpZXcgPSB0di52aWV3X3RleHQocm9vdCwgJ1RpdGxlJywgJ3Rlc3QgdGV4dCcsIG1vZGFsPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlldywgdHYuVGV4dFZpZXdlcikKKworICAgIGRlZiB0ZXN0X3ZpZXdfZmlsZShzZWxmKToKKyAgICAgICAgdGVzdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgIHRlc3RmaWxlID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAndGVzdF90ZXh0dmlldy5weScpCisgICAgICAgIHZpZXcgPSB0di52aWV3X2ZpbGUocm9vdCwgJ1RpdGxlJywgdGVzdGZpbGUsIG1vZGFsPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlldywgdHYuVGV4dFZpZXdlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignVGVzdCcsIHZpZXcudGV4dFZpZXcuZ2V0KCcxLjAnLCAnMS5lbmQnKSkKKyAgICAgICAgdmlldy5PaygpCisKKyAgICAgICAgIyBNb2NrIG1lc3NhZ2Vib3ggd2lsbCBiZSB1c2VkIGFuZCB2aWV3X2ZpbGUgd2lsbCBub3QgcmV0dXJuIGFueXRoaW5nCisgICAgICAgIHRlc3RmaWxlID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAnLi4vbm90dGhlcmUucHknKQorICAgICAgICB2aWV3ID0gdHYudmlld19maWxlKHJvb3QsICdUaXRsZScsIHRlc3RmaWxlLCBtb2RhbD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodmlldykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF93aWRnZXRyZWRpci5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dpZGdldHJlZGlyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDA1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF93aWRnZXRyZWRpci5weQpAQCAtMCwwICsxLDEyMiBAQAorIiIiVW5pdHRlc3QgZm9yIGlkbGVsaWIuV2lkZ2V0UmVkaXJlY3RvcgorCisxMDAlIGNvdmVyYWdlCisiIiIKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfaWRsZSBpbXBvcnQgRnVuYworZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVGV4dCwgVGNsRXJyb3IKK2Zyb20gaWRsZWxpYi5XaWRnZXRSZWRpcmVjdG9yIGltcG9ydCBXaWRnZXRSZWRpcmVjdG9yCisKKworY2xhc3MgSW5pdENsb3NlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICByZXF1aXJlcygnZ3VpJykKKyAgICAgICAgY2xzLnRrID0gVGsoKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnRrKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnRleHQuZGVzdHJveSgpCisgICAgICAgIGNscy50ay5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMudGsKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHJlZGlyID0gV2lkZ2V0UmVkaXJlY3RvcihzZWxmLnRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkaXIud2lkZ2V0LCBzZWxmLnRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkaXIudGssIHNlbGYudGV4dC50aykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIFdpZGdldFJlZGlyZWN0b3IsIHNlbGYudGV4dCkKKyAgICAgICAgcmVkaXIuY2xvc2UoKSAgIyByZXN0b3JlIHNlbGYudGssIHNlbGYudGV4dAorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHJlZGlyID0gV2lkZ2V0UmVkaXJlY3RvcihzZWxmLnRleHQpCisgICAgICAgIHJlZGlyLnJlZ2lzdGVyKCdpbnNlcnQnLCBGdW5jKQorICAgICAgICByZWRpci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkaXIuX29wZXJhdGlvbnMsIHt9KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoc2VsZi50ZXh0LCAnd2lkZ2V0JykpCisKKworY2xhc3MgV2lkZ2V0UmVkaXJlY3RvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgcmVxdWlyZXMoJ2d1aScpCisgICAgICAgIGNscy50ayA9IFRrKCkKKyAgICAgICAgY2xzLnRleHQgPSBUZXh0KGNscy50aykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGNscy50ZXh0LmRlc3Ryb3koKQorICAgICAgICBjbHMudGsuZGVzdHJveSgpCisgICAgICAgIGRlbCBjbHMudGV4dCwgY2xzLnRrCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHNlbGYudGV4dCkKKyAgICAgICAgc2VsZi5mdW5jID0gRnVuYygpCisgICAgICAgIHNlbGYub3JpZ19pbnNlcnQgPSBzZWxmLnJlZGlyLnJlZ2lzdGVyKCdpbnNlcnQnLCBzZWxmLmZ1bmMpCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2luc2VydCcsICdhc2RmJykgICMgbGVhdmVzIHNlbGYudGV4dCBlbXB0eQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRleHQuZGVsZXRlKCcxLjAnLCAnZW5kJykKKyAgICAgICAgc2VsZi5yZWRpci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOiAgIyBwYXJ0bHkgZm9yIDEwMCUgY292ZXJhZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUmVkaXJlY3RvcicsIHJlcHIoc2VsZi5yZWRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ09yaWdpbmFsJywgcmVwcihzZWxmLm9yaWdfaW5zZXJ0KSkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dC5nZXQoJzEuMCcsICdlbmQnKSwgJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMuYXJncywgKCdpbnNlcnQnLCAnYXNkZicpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbnNlcnQnLCBzZWxmLnJlZGlyLl9vcGVyYXRpb25zKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbnNlcnQnLCBzZWxmLnRleHQuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0Lmluc2VydCwgc2VsZi5mdW5jKQorCisgICAgZGVmIHRlc3Rfb3JpZ2luYWxfY29tbWFuZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9yaWdfaW5zZXJ0Lm9wZXJhdGlvbiwgJ2luc2VydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vcmlnX2luc2VydC50a19jYWxsLCBzZWxmLnRleHQudGsuY2FsbCkKKyAgICAgICAgc2VsZi5vcmlnX2luc2VydCgnaW5zZXJ0JywgJ2FzZGYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dC5nZXQoJzEuMCcsICdlbmQnKSwgJ2FzZGZcbicpCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLnJlZGlyLnVucmVnaXN0ZXIoJ2ludmFsaWQgb3BlcmF0aW9uIG5hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZGlyLnVucmVnaXN0ZXIoJ2luc2VydCcpLCBzZWxmLmZ1bmMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2luc2VydCcsIHNlbGYucmVkaXIuX29wZXJhdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2luc2VydCcsIHNlbGYudGV4dC5fX2RpY3RfXykKKworICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXJfbm9fYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi50ZXh0Lmluc2VydAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVkaXIudW5yZWdpc3RlcignaW5zZXJ0JyksIHNlbGYuZnVuYykKKworICAgIGRlZiB0ZXN0X2Rpc3BhdGNoX2ludGVyY2VwdChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jLl9faW5pdF9fKFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnJlZGlyLmRpc3BhdGNoKCdpbnNlcnQnLCBGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5mdW5jLmFyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9kaXNwYXRjaF9ieXBhc3Moc2VsZik6CisgICAgICAgIHNlbGYub3JpZ19pbnNlcnQoJ2luc2VydCcsICdhc2RmJykKKyAgICAgICAgIyB0ay5jYWxsIHJldHVybnMgJycgd2hlcmUgUHl0aG9uIHdvdWxkIHJldHVybiBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWRpci5kaXNwYXRjaCgnZGVsZXRlJywgJzEuMCcsICdlbmQnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCAnXG4nKQorCisgICAgZGVmIHRlc3RfZGlzcGF0Y2hfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuZnVuYy5fX2luaXRfXyhUY2xFcnJvcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVkaXIuZGlzcGF0Y2goJ2luc2VydCcsIEZhbHNlKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWRpci5kaXNwYXRjaCgnaW52YWxpZCcpLCAnJykKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfZGlzcGF0Y2goc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IC5fX2luaXRfXyBjYXVzZXMgcmVkaXJlY3Rpb24gb2YgdGsgY2FsbHMKKyAgICAgICAgIyB0aHJvdWdoIHJlZGlyLmRpc3BhdGNoCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLnRleHQuX3csICdpbnNlcnQnLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYy5hcmdzLCAoJ2hlbGxvJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dC5nZXQoJzEuMCcsICdlbmQnKSwgJ1xuJykKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBjYWxsZWQgdGhyb3VnaCByZWRpciAuZGlzcGF0Y2ggYW5kIG5vdCB0aHJvdWdoCisgICAgICAgICMgc2VsZi50ZXh0Lmluc2VydCBieSBoYXZpbmcgbW9jayByYWlzZSBUY2xFcnJvci4KKyAgICAgICAgc2VsZi5mdW5jLl9faW5pdF9fKFRjbEVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ay5jYWxsKHNlbGYudGV4dC5fdywgJ2luc2VydCcsICdib28nKSwgJycpCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxldmVyLnB5IGIvTGliL2lkbGVsaWIvaWRsZXZlci5weQppbmRleCAwNDRiZWY5Li4yMmFjYjQxIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKQEAgLTEgKzEgQEAKLUlETEVfVkVSU0lPTiA9ICIzLjMuNSIKK0lETEVfVkVSU0lPTiA9ICIzLjQuMSIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2tleWJpbmRpbmdEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9rZXliaW5kaW5nRGlhbG9nLnB5CmluZGV4IDBmMGRhOGMuLmU2NDM4YmYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2tleWJpbmRpbmdEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIva2V5YmluZGluZ0RpYWxvZy5weQpAQCAtNCwxNSArNCwxNiBAQAogZnJvbSB0a2ludGVyIGltcG9ydCAqCiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAogaW1wb3J0IHN0cmluZwotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0CitpbXBvcnQgc3lzCiAKIGNsYXNzIEdldEtleXNEaWFsb2coVG9wbGV2ZWwpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLHBhcmVudCx0aXRsZSxhY3Rpb24sY3VycmVudEtleVNlcXVlbmNlcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50LHRpdGxlLGFjdGlvbixjdXJyZW50S2V5U2VxdWVuY2VzLF9odGVzdD1GYWxzZSk6CiAgICAgICAgICIiIgogICAgICAgICBhY3Rpb24gLSBzdHJpbmcsIHRoZSBuYW1lIG9mIHRoZSB2aXJ0dWFsIGV2ZW50IHRoZXNlIGtleXMgd2lsbCBiZQogICAgICAgICAgICAgICAgICBtYXBwZWQgdG8KICAgICAgICAgY3VycmVudEtleXMgLSBsaXN0LCBhIGxpc3Qgb2YgYWxsIGtleSBzZXF1ZW5jZSBsaXN0cyBjdXJyZW50bHkgbWFwcGVkCiAgICAgICAgICAgICAgICAgIHRvIHZpcnR1YWwgZXZlbnRzLCBmb3Igb3ZlcmxhcCBjaGVja2luZworICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdAogICAgICAgICAiIiIKICAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQogICAgICAgICBzZWxmLmNvbmZpZ3VyZShib3JkZXJ3aWR0aD01KQpAQCAtMzgsMTEgKzM5LDE0IEBACiAgICAgICAgIHNlbGYuTG9hZEZpbmFsS2V5TGlzdCgpCiAgICAgICAgIHNlbGYud2l0aGRyYXcoKSAjaGlkZSB3aGlsZSBzZXR0aW5nIGdlb21ldHJ5CiAgICAgICAgIHNlbGYudXBkYXRlX2lkbGV0YXNrcygpCi0gICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJQotICAgICAgICAgICAgKChwYXJlbnQud2luZm9fcm9vdHgoKSsoKHBhcmVudC53aW5mb193aWR0aCgpLzIpCi0gICAgICAgICAgICAgICAgLShzZWxmLndpbmZvX3JlcXdpZHRoKCkvMikpLAotICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSsoKHBhcmVudC53aW5mb19oZWlnaHQoKS8yKQotICAgICAgICAgICAgICAgIC0oc2VsZi53aW5mb19yZXFoZWlnaHQoKS8yKSkgKSkgKSAjY2VudHJlIGRpYWxvZyBvdmVyIHBhcmVudAorICAgICAgICBzZWxmLmdlb21ldHJ5KAorICAgICAgICAgICAgICAgICIrJWQrJWQiICUgKAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSArCisgICAgICAgICAgICAgICAgICAgIChwYXJlbnQud2luZm9fd2lkdGgoKS8yIC0gc2VsZi53aW5mb19yZXF3aWR0aCgpLzIpLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArCisgICAgICAgICAgICAgICAgICAgICgocGFyZW50LndpbmZvX2hlaWdodCgpLzIgLSBzZWxmLndpbmZvX3JlcWhlaWdodCgpLzIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfaHRlc3QgZWxzZSAxNTApCisgICAgICAgICAgICAgICAgKSApICAjY2VudHJlIGRpYWxvZyBvdmVyIHBhcmVudCAob3IgYmVsb3cgaHRlc3QgYm94KQogICAgICAgICBzZWxmLmRlaWNvbmlmeSgpICNnZW9tZXRyeSBzZXQsIHVuaGlkZQogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIApAQCAtMTMzLDggKzEzNyw3IEBACiAgICAgICAgIG9yZGVyIGlzIGFsc28gaW1wb3J0YW50OiBrZXkgYmluZGluZyBlcXVhbGl0eSBkZXBlbmRzIG9uIGl0LCBzbwogICAgICAgICBjb25maWcta2V5cy5kZWYgbXVzdCB1c2UgdGhlIHNhbWUgb3JkZXJpbmcuCiAgICAgICAgICIiIgotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICAgICAgICAgIHNlbGYubW9kaWZpZXJzID0gWydTaGlmdCcsICdDb250cm9sJywgJ09wdGlvbicsICdDb21tYW5kJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYubW9kaWZpZXJzID0gWydDb250cm9sJywgJ0FsdCcsICdTaGlmdCddCkBAIC0yNTksMTEgKzI2Miw1IEBACiAgICAgICAgIHJldHVybiBrZXlzT0sKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdD1UaygpCi0gICAgZGVmIHJ1bigpOgotICAgICAgICBrZXlTZXE9JycKLSAgICAgICAgZGxnPUdldEtleXNEaWFsb2cocm9vdCwnR2V0IEtleXMnLCdmaW5kLWFnYWluJyxbXSkKLSAgICAgICAgcHJpbnQoZGxnLnJlc3VsdCkKLSAgICBCdXR0b24ocm9vdCx0ZXh0PSdEaWFsb2cnLGNvbW1hbmQ9cnVuKS5wYWNrKCkKLSAgICByb290Lm1haW5sb29wKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oR2V0S2V5c0RpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkgYi9MaWIvaWRsZWxpYi9tYWNvc3hTdXBwb3J0LnB5CmluZGV4IDY3MDY5ZmEuLmI2NDg4ZjggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkKKysrIGIvTGliL2lkbGVsaWIvbWFjb3N4U3VwcG9ydC5weQpAQCAtMSw0OCArMSw3MCBAQAogIiIiCi1BIG51bWJlciBvZiBmdW5jdGlvbiB0aGF0IGVuaGFuY2UgSURMRSBvbiBNYWNPU1ggd2hlbiBpdCB1c2VkIGFzIGEgbm9ybWFsCi1HVUkgYXBwbGljYXRpb24gKGFzIG9wcG9zZWQgdG8gYW4gWDExIGFwcGxpY2F0aW9uKS4KK0EgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IGVuaGFuY2UgSURMRSBvbiBNYWMgT1NYLgogIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGtpbnRlcgogZnJvbSBvcyBpbXBvcnQgcGF0aAotCi0KLV9hcHBidW5kbGUgPSBOb25lCitpbXBvcnQgd2FybmluZ3MKIAogZGVmIHJ1bm5pbmdBc09TWEFwcCgpOgotICAgICIiIgotICAgIFJldHVybnMgVHJ1ZSBpZiBQeXRob24gaXMgcnVubmluZyBmcm9tIHdpdGhpbiBhbiBhcHAgb24gT1NYLgotICAgIElmIHNvLCB0aGUgdmFyaW91cyBPUyBYIGN1c3RvbWl6YXRpb25zIHdpbGwgYmUgdHJpZ2dlcmVkIGxhdGVyIChtZW51Ci0gICAgZml4dXAsIGV0IGFsKS4gIChPcmlnaW5hbGx5LCB0aGlzIHRlc3Qgd2FzIHN1cHBvc2VkIHRvIGNvbmRpdGlvbgotICAgIGJlaGF2aW9yIG9uIHdoZXRoZXIgSURMRSB3YXMgcnVubmluZyB1bmRlciBBcXVhIFRrIHJhdGhlciB0aGFuCi0gICAgdW5kZXIgWDExIFRrIGJ1dCB0aGF0IGRvZXMgbm90IHdvcmsgc2luY2UgYSBmcmFtZXdvcmsgYnVpbGQKLSAgICBjb3VsZCBiZSBsaW5rZWQgd2l0aCBYMTEuICBGb3Igc2V2ZXJhbCByZWxlYXNlcywgdGhpcyB0ZXN0IGFjdHVhbGx5Ci0gICAgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB3aGV0aGVyIElETEUgaXMgcnVubmluZyBmcm9tIGEgZnJhbWV3b3JrIG9yCi0gICAgbm90LiAgQXMgYSBmdXR1cmUgZW5oYW5jZW1lbnQsIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZXRoZXIgdGhlcmUKLSAgICBzaG91bGQgYmUgYSBkaWZmZXJlbmNlIGJhc2VkIG9uIGZyYW1ld29yayBhbmQgYW55IG5lZWRlZCBYMTEgYWRhcHRpb25zCi0gICAgc2hvdWxkIGJlIG1hZGUgZGVwZW5kZW50IG9uIGEgbmV3IGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgdGVzdHMgZm9yIFgxMS4pCi0gICAgIiIiCi0gICAgZ2xvYmFsIF9hcHBidW5kbGUKLSAgICBpZiBfYXBwYnVuZGxlIGlzIE5vbmU6Ci0gICAgICAgIF9hcHBidW5kbGUgPSBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKLSAgICAgICAgaWYgX2FwcGJ1bmRsZToKLSAgICAgICAgICAgIGltcG9ydCBzeXNjb25maWcKLSAgICAgICAgICAgIF9hcHBidW5kbGUgPSBib29sKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJykpCi0gICAgcmV0dXJuIF9hcHBidW5kbGUKLQotX2NhcmJvbmFxdWF0ayA9IE5vbmUKKyAgICB3YXJuaW5ncy53YXJuKCJydW5uaW5nQXNPU1hBcHAoKSBpcyBkZXByZWNhdGVkLCB1c2UgaXNBcXVhVGsoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICByZXR1cm4gaXNBcXVhVGsoKQogCiBkZWYgaXNDYXJib25BcXVhVGsocm9vdCk6CisgICAgd2FybmluZ3Mud2FybigiaXNDYXJib25BcXVhVGsocm9vdCkgaXMgZGVwcmVjYXRlZCwgdXNlIGlzQ2FyYm9uVGsoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICByZXR1cm4gaXNDYXJib25UaygpCisKK190a190eXBlID0gTm9uZQorCitkZWYgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhyb290KToKKyAgICAiIiIKKyAgICBJbml0aWFsaXplcyBPUyBYIFRrIHZhcmlhbnQgdmFsdWVzIGZvcgorICAgIGlzQXF1YVRrKCksIGlzQ2FyYm9uVGsoKSwgaXNDb2NvYVRrKCksIGFuZCBpc1hRdWFydHooKS4KKyAgICAiIiIKKyAgICBnbG9iYWwgX3RrX3R5cGUKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgIHdzID0gcm9vdC50ay5jYWxsKCd0aycsICd3aW5kb3dpbmdzeXN0ZW0nKQorICAgICAgICBpZiAneDExJyBpbiB3czoKKyAgICAgICAgICAgIF90a190eXBlID0gInhxdWFydHoiCisgICAgICAgIGVsaWYgJ2FxdWEnIG5vdCBpbiB3czoKKyAgICAgICAgICAgIF90a190eXBlID0gIm90aGVyIgorICAgICAgICBlbGlmICdBcHBLaXQnIGluIHJvb3QudGsuY2FsbCgnd2luZm8nLCAnc2VydmVyJywgJy4nKToKKyAgICAgICAgICAgIF90a190eXBlID0gImNvY29hIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX3RrX3R5cGUgPSAiY2FyYm9uIgorICAgIGVsc2U6CisgICAgICAgIF90a190eXBlID0gIm90aGVyIgorCitkZWYgaXNBcXVhVGsoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYgSURMRSBpcyB1c2luZyBhIG5hdGl2ZSBPUyBYIFRrIChDb2NvYSBvciBDYXJib24pLgorICAgICIiIgorICAgIGFzc2VydCBfdGtfdHlwZSBpcyBub3QgTm9uZQorICAgIHJldHVybiBfdGtfdHlwZSA9PSAiY29jb2EiIG9yIF90a190eXBlID09ICJjYXJib24iCisKK2RlZiBpc0NhcmJvblRrKCk6CiAgICAgIiIiCiAgICAgUmV0dXJucyBUcnVlIGlmIElETEUgaXMgdXNpbmcgYSBDYXJib24gQXF1YSBUayAoaW5zdGVhZCBvZiB0aGUKICAgICBuZXdlciBDb2NvYSBBcXVhIFRrKS4KICAgICAiIiIKLSAgICBnbG9iYWwgX2NhcmJvbmFxdWF0awotICAgIGlmIF9jYXJib25hcXVhdGsgaXMgTm9uZToKLSAgICAgICAgX2NhcmJvbmFxdWF0ayA9IChydW5uaW5nQXNPU1hBcHAoKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAnYXF1YScgaW4gcm9vdC50ay5jYWxsKCd0aycsICd3aW5kb3dpbmdzeXN0ZW0nKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAnQXBwS2l0JyBub3QgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKQotICAgIHJldHVybiBfY2FyYm9uYXF1YXRrCisgICAgYXNzZXJ0IF90a190eXBlIGlzIG5vdCBOb25lCisgICAgcmV0dXJuIF90a190eXBlID09ICJjYXJib24iCisKK2RlZiBpc0NvY29hVGsoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYgSURMRSBpcyB1c2luZyBhIENvY29hIEFxdWEgVGsuCisgICAgIiIiCisgICAgYXNzZXJ0IF90a190eXBlIGlzIG5vdCBOb25lCisgICAgcmV0dXJuIF90a190eXBlID09ICJjb2NvYSIKKworZGVmIGlzWFF1YXJ0eigpOgorICAgICIiIgorICAgIFJldHVybnMgVHJ1ZSBpZiBJRExFIGlzIHVzaW5nIGFuIE9TIFggWDExIFRrLgorICAgICIiIgorICAgIGFzc2VydCBfdGtfdHlwZSBpcyBub3QgTm9uZQorICAgIHJldHVybiBfdGtfdHlwZSA9PSAieHF1YXJ0eiIKIAogZGVmIHRrVmVyc2lvbldhcm5pbmcocm9vdCk6CiAgICAgIiIiCkBAIC01Myw4ICs3NSw3IEBACiAgICAgICAgIGNhbiBzdGlsbCBjcmFzaCB1bmV4cGVjdGVkbHkuCiAgICAgIiIiCiAKLSAgICBpZiAocnVubmluZ0FzT1NYQXBwKCkgYW5kCi0gICAgICAgICAgICAoJ0FwcEtpdCcgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKSApOgorICAgIGlmIGlzQ29jb2FUaygpOgogICAgICAgICBwYXRjaGxldmVsID0gcm9vdC50ay5jYWxsKCdpbmZvJywgJ3BhdGNobGV2ZWwnKQogICAgICAgICBpZiBwYXRjaGxldmVsIG5vdCBpbiAoJzguNS43JywgJzguNS45Jyk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTg4LDggKzEwOSw4IEBACiAKIGRlZiBvdmVycmlkZVJvb3RNZW51KHJvb3QsIGZsaXN0KToKICAgICAiIiIKLSAgICBSZXBsYWNlIHRoZSBUayByb290IG1lbnUgYnkgc29tZXRoaW5nIHRoYXQncyBtb3JlIGFwcHJvcHJpYXRlIGZvcgotICAgIElETEUuCisgICAgUmVwbGFjZSB0aGUgVGsgcm9vdCBtZW51IGJ5IHNvbWV0aGluZyB0aGF0IGlzIG1vcmUgYXBwcm9wcmlhdGUgZm9yCisgICAgSURMRSB3aXRoIGFuIEFxdWEgVGsuCiAgICAgIiIiCiAgICAgIyBUaGUgbWVudSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoZSBUayByb290ICgiLiIpIGlzIGFsc28gdXNlZCBieSBBcXVhVGsgZm9yCiAgICAgIyBhbGwgd2luZG93cyB0aGF0IGRvbid0IHNwZWNpZnkgYSBtZW51IG9mIHRoZWlyIG93bi4gVGhlIGRlZmF1bHQgbWVudWJhcgpAQCAtMTA4LDYgKzEyOSwyMiBAQAogICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgV2luZG93TGlzdAogICAgIGZyb20gaWRsZWxpYi5NdWx0aUNhbGwgaW1wb3J0IE11bHRpQ2FsbENyZWF0b3IKIAorICAgIGNsb3NlSXRlbSA9IEJpbmRpbmdzLm1lbnVkZWZzWzBdWzFdWy0yXQorCisgICAgIyBSZW1vdmUgdGhlIGxhc3QgMyBpdGVtcyBvZiB0aGUgZmlsZSBtZW51OiBhIHNlcGFyYXRvciwgY2xvc2Ugd2luZG93IGFuZAorICAgICMgcXVpdC4gQ2xvc2Ugd2luZG93IHdpbGwgYmUgcmVpbnNlcnRlZCBqdXN0IGFib3ZlIHRoZSBzYXZlIGl0ZW0sIHdoZXJlCisgICAgIyBpdCBzaG91bGQgYmUgYWNjb3JkaW5nIHRvIHRoZSBISUcuIFF1aXQgaXMgaW4gdGhlIGFwcGxpY2F0aW9uIG1lbnUuCisgICAgZGVsIEJpbmRpbmdzLm1lbnVkZWZzWzBdWzFdWy0zOl0KKyAgICBCaW5kaW5ncy5tZW51ZGVmc1swXVsxXS5pbnNlcnQoNiwgY2xvc2VJdGVtKQorCisgICAgIyBSZW1vdmUgdGhlICdBYm91dCcgZW50cnkgZnJvbSB0aGUgaGVscCBtZW51LCBpdCBpcyBpbiB0aGUgYXBwbGljYXRpb24KKyAgICAjIG1lbnUKKyAgICBkZWwgQmluZGluZ3MubWVudWRlZnNbLTFdWzFdWzA6Ml0KKworICAgICMgUmVtb3ZlIHRoZSAnQ29uZmlndXJlJyBlbnRyeSBmcm9tIHRoZSBvcHRpb25zIG1lbnUsIGl0IGlzIGluIHRoZQorICAgICMgYXBwbGljYXRpb24gbWVudSBhcyAnUHJlZmVyZW5jZXMnCisgICAgZGVsIEJpbmRpbmdzLm1lbnVkZWZzWy0yXVsxXVswOjJdCisKICAgICBtZW51YmFyID0gTWVudShyb290KQogICAgIHJvb3QuY29uZmlndXJlKG1lbnU9bWVudWJhcikKICAgICBtZW51ZGljdCA9IHt9CkBAIC0xNTYsNyArMTkzLDcgQEAKICAgICAgICAgIyByaWdodCB0aGluZyBmb3Igbm93LgogICAgICAgICByb290LmNyZWF0ZWNvbW1hbmQoJ2V4aXQnLCBmbGlzdC5jbG9zZV9hbGxfY2FsbGJhY2spCiAKLSAgICBpZiBpc0NhcmJvbkFxdWFUayhyb290KToKKyAgICBpZiBpc0NhcmJvblRrKCk6CiAgICAgICAgICMgZm9yIENhcmJvbiBBcXVhVGssIHJlcGxhY2UgdGhlIGRlZmF1bHQgVGsgYXBwbGUgbWVudQogICAgICAgICBtZW51ZGljdFsnYXBwbGljYXRpb24nXSA9IG1lbnUgPSBNZW51KG1lbnViYXIsIG5hbWU9J2FwcGxlJykKICAgICAgICAgbWVudWJhci5hZGRfY2FzY2FkZShsYWJlbD0nSURMRScsIG1lbnU9bWVudSkKQEAgLTE3MSw4ICsyMDgsNyBAQAogICAgICAgICAgICAgQmluZGluZ3MubWVudWRlZnNbMF1bMV0uYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAoJ19QcmVmZXJlbmNlcy4uLi4nLCAnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicpLAogICAgICAgICAgICAgICAgICkKLSAgICBlbHNlOgotICAgICAgICAjIGFzc3VtZSBDb2NvYSBBcXVhVGsKKyAgICBpZiBpc0NvY29hVGsoKToKICAgICAgICAgIyByZXBsYWNlIGRlZmF1bHQgQWJvdXQgZGlhbG9nIHdpdGggQWJvdXQgSURMRSBvbmUKICAgICAgICAgcm9vdC5jcmVhdGVjb21tYW5kKCd0a0Fib3V0RGlhbG9nJywgYWJvdXRfZGlhbG9nKQogICAgICAgICAjIHJlcGxhY2UgZGVmYXVsdCAiSGVscCIgaXRlbSBpbiBIZWxwIG1lbnUKQEAgLTE4MiwxMCArMjE4LDIyIEBACiAKIGRlZiBzZXR1cEFwcChyb290LCBmbGlzdCk6CiAgICAgIiIiCi0gICAgUGVyZm9ybSBzZXR1cCBmb3IgdGhlIE9TWCBhcHBsaWNhdGlvbiBidW5kbGUuCi0gICAgIiIiCi0gICAgaWYgbm90IHJ1bm5pbmdBc09TWEFwcCgpOiByZXR1cm4KKyAgICBQZXJmb3JtIGluaXRpYWwgT1MgWCBjdXN0b21pemF0aW9ucyBpZiBuZWVkZWQuCisgICAgQ2FsbGVkIGZyb20gUHlTaGVsbC5tYWluKCkgYWZ0ZXIgaW5pdGlhbCBjYWxscyB0byBUaygpCiAKLSAgICBoaWRlVGtDb25zb2xlKHJvb3QpCi0gICAgb3ZlcnJpZGVSb290TWVudShyb290LCBmbGlzdCkKLSAgICBhZGRPcGVuRXZlbnRTdXBwb3J0KHJvb3QsIGZsaXN0KQorICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdGhyZWUgbWFqb3IgdmVyc2lvbnMgb2YgVGsgaW4gdXNlIG9uIE9TIFg6CisgICAgICAgIDEuIEFxdWEgQ29jb2EgVGsgKG5hdGl2ZSBkZWZhdWx0IHNpbmNlIE9TIFggMTAuNikKKyAgICAgICAgMi4gQXF1YSBDYXJib24gVGsgKG9yaWdpbmFsIG5hdGl2ZSwgMzItYml0IG9ubHksIGRlcHJlY2F0ZWQpCisgICAgICAgIDMuIFgxMSAoc3VwcG9ydGVkIGJ5IHNvbWUgdGhpcmQtcGFydHkgZGlzdHJpYnV0b3JzLCBkZXByZWNhdGVkKQorICAgIFRoZXJlIGFyZSB2YXJpb3VzIGRpZmZlcmVuY2VzIGFtb25nIHRoZSB0aHJlZSB0aGF0IGFmZmVjdCBJRExFCisgICAgYmVoYXZpb3IsIHByaW1hcmlseSB3aXRoIG1lbnVzLCBtb3VzZSBrZXkgZXZlbnRzLCBhbmQgYWNjZWxlcmF0b3JzLgorICAgIFNvbWUgb25lLXRpbWUgY3VzdG9taXphdGlvbnMgYXJlIHBlcmZvcm1lZCBoZXJlLgorICAgIE90aGVycyBhcmUgZHluYW1pY2FsbHkgdGVzdGVkIHRocm91Z2hvdXQgaWRsZWxpYiBieSBjYWxscyB0byB0aGUKKyAgICBpc0FxdWFUaygpLCBpc0NhcmJvblRrKCksIGlzQ29jb2FUaygpLCBpc1hRdWFydHooKSBmdW5jdGlvbnMgd2hpY2gKKyAgICBhcmUgaW5pdGlhbGl6ZWQgaGVyZSBhcyB3ZWxsLgorICAgICIiIgorICAgIF9pbml0aWFsaXplVGtWYXJpYW50VGVzdHMocm9vdCkKKyAgICBpZiBpc0FxdWFUaygpOgorICAgICAgICBoaWRlVGtDb25zb2xlKHJvb3QpCisgICAgICAgIG92ZXJyaWRlUm9vdE1lbnUocm9vdCwgZmxpc3QpCisgICAgICAgIGFkZE9wZW5FdmVudFN1cHBvcnQocm9vdCwgZmxpc3QpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ycGMucHkgYi9MaWIvaWRsZWxpYi9ycGMucHkKaW5kZXggZGRjZTZlOS4uOWM1MWI4ZiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvcnBjLnB5CisrKyBiL0xpYi9pZGxlbGliL3JwYy5weQpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgICByZXR1cm4gKCJDQUxMRVhDIiwgZXgpCkBAIC0zNDAsNyArMzQwLDcgQEAKICAgICAgICAgICAgICAgICBuID0gc2VsZi5zb2NrLnNlbmQoc1s6QlVGU0laRV0pCiAgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInNvY2tldCBubyBsb25nZXIgZXhpc3RzIikKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzID0gc1tuOl0KQEAgLTM1Nyw3ICszNTcsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuc29jay5yZWN2KEJVRlNJWkUpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKICAgICAgICAgICAgIGlmIGxlbihzKSA9PSAwOgogICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCkBAIC01MzcsNyArNTM3LDcgQEAKICAgICAgICAgICAgIFNvY2tldElPLl9faW5pdF9fKHNlbGYsIHdvcmtpbmdfc29jaykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHByaW50KCIqKiBJbnZhbGlkIGhvc3Q6ICIsIGFkZHJlc3MsIGZpbGU9c3lzLl9fc3RkZXJyX18pCi0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKIAogICAgIGRlZiBnZXRfcmVtb3RlX3Byb3h5KHNlbGYsIG9pZCk6CiAgICAgICAgIHJldHVybiBSUENQcm94eShzZWxmLCBvaWQpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ydW4ucHkgYi9MaWIvaWRsZWxpYi9ydW4ucHkKaW5kZXggYzE4NTliNi4uMTNjZWM2MiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvcnVuLnB5CisrKyBiL0xpYi9pZGxlbGliL3J1bi5weQpAQCAtMTUwLDggKzE1MCw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlcnZlciA9IE15UlBDU2VydmVyKGFkZHJlc3MsIE15SGFuZGxlcikKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgcHJpbnQoIklETEUgU3VicHJvY2Vzczogc29ja2V0IGVycm9yOiAiICsgZXJyLmFyZ3NbMV0gKworICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBwcmludCgiSURMRSBTdWJwcm9jZXNzOiBPU0Vycm9yOiAiICsgZXJyLmFyZ3NbMV0gKwogICAgICAgICAgICAgICAgICAgIiwgcmV0cnlpbmcuLi4uIiwgZmlsZT1zeXMuX19zdGRlcnJfXykKICAgICAgICAgICAgIHNvY2tldF9lcnJvciA9IGVycgogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi90YWJiZWRwYWdlcy5weSBiL0xpYi9pZGxlbGliL3RhYmJlZHBhZ2VzLnB5CmluZGV4IDI1NTc3MzIuLjk2NWY5ZjggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3RhYmJlZHBhZ2VzLnB5CisrKyBiL0xpYi9pZGxlbGliL3RhYmJlZHBhZ2VzLnB5CkBAIC00NjcsOSArNDY3LDEyIEBACiAKICAgICAgICAgc2VsZi5fdGFiX3NldC5zZXRfc2VsZWN0ZWRfdGFiKHBhZ2VfbmFtZSkKIAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKK2RlZiBfdGFiYmVkX3BhZ2VzKHBhcmVudCk6CiAgICAgIyB0ZXN0IGRpYWxvZwogICAgIHJvb3Q9VGsoKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTc1KSkKKyAgICByb290LnRpdGxlKCJUZXN0IHRhYmJlZCBwYWdlcyIpCiAgICAgdGFiUGFnZT1UYWJiZWRQYWdlU2V0KHJvb3QsIHBhZ2VfbmFtZXM9WydGb29iYXInLCdCYXonXSwgbl9yb3dzPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZF90YWJzPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICApCkBAIC00ODgsMyArNDkxLDggQEAKICAgICBsYWJlbFBnTmFtZS5wYWNrKHBhZHg9NSkKICAgICBlbnRyeVBnTmFtZS5wYWNrKHBhZHg9NSkKICAgICByb290Lm1haW5sb29wKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfdGFiYmVkX3BhZ2VzKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvdGV4dFZpZXcucHkgYi9MaWIvaWRsZWxpYi90ZXh0Vmlldy5weQppbmRleCBkZDUwNTQ0Li40MjU3ZWVhIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi90ZXh0Vmlldy5weQorKysgYi9MaWIvaWRsZWxpYi90ZXh0Vmlldy5weQpAQCAtOSwxNSArOSwyMSBAQAogICAgICIiIkEgc2ltcGxlIHRleHQgdmlld2VyIGRpYWxvZyBmb3IgSURMRQogCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgdGl0bGUsIHRleHQsIG1vZGFsPVRydWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCB0ZXh0LCBtb2RhbD1UcnVlLCBfaHRlc3Q9RmFsc2UpOgogICAgICAgICAiIiJTaG93IHRoZSBnaXZlbiB0ZXh0IGluIGEgc2Nyb2xsYWJsZSB3aW5kb3cgd2l0aCBhICdjbG9zZScgYnV0dG9uCiAKKyAgICAgICAgSWYgbW9kYWwgb3B0aW9uIHNldCB0byBGYWxzZSwgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCBvdGhlciB3aW5kb3dzLAorICAgICAgICBvdGhlcndpc2UgdGhleSB3aWxsIGJlIHVuYWJsZSB0byBpbnRlcmFjdCB3aXRoIG90aGVyIHdpbmRvd3MgdW50aWwKKyAgICAgICAgdGhlIHRleHR2aWV3IHdpbmRvdyBpcyBjbG9zZWQuCisKKyAgICAgICAgX2h0ZXN0IC0gYm9vbDsgY2hhbmdlIGJveCBsb2NhdGlvbiB3aGVuIHJ1bm5pbmcgaHRlc3QuCiAgICAgICAgICIiIgogICAgICAgICBUb3BsZXZlbC5fX2luaXRfXyhzZWxmLCBwYXJlbnQpCiAgICAgICAgIHNlbGYuY29uZmlndXJlKGJvcmRlcndpZHRoPTUpCisgICAgICAgICMgcGxhY2UgZGlhbG9nIGJlbG93IHBhcmVudCBpZiBydW5uaW5nIGh0ZXN0CiAgICAgICAgIHNlbGYuZ2VvbWV0cnkoIj0lZHglZCslZCslZCIgJSAoNjI1LCA1MDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R4KCkgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArIDEwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eCgpICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArICgxMCBpZiBub3QgX2h0ZXN0IGVsc2UgMTAwKSkpCiAgICAgICAgICNlbGd1YXZhcyAtIGNvbmZpZyBwbGFjZWhvbGRlcnMgdGlsIGNvbmZpZyBzdHVmZiBjb21wbGV0ZWQKICAgICAgICAgc2VsZi5iZyA9ICcjZmZmZmZmJwogICAgICAgICBzZWxmLmZnID0gJyMwMDAwMDAnCkBAIC02NiwzMiArNzIsMTUgQEAKICAgICB0cnk6CiAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZmlsZToKICAgICAgICAgICAgIGNvbnRlbnRzID0gZmlsZS5yZWFkKCkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgaW1wb3J0IHRraW50ZXIubWVzc2FnZWJveCBhcyB0a01lc3NhZ2VCb3gKKyAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZT0nRmlsZSBMb2FkIEVycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdVbmFibGUgdG8gbG9hZCBmaWxlICVyIC4nICUgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXBhcmVudCkKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gdmlld190ZXh0KHBhcmVudCwgdGl0bGUsIGNvbnRlbnRzLCBtb2RhbCkKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICN0ZXN0IHRoZSBkaWFsb2cKLSAgICByb290PVRrKCkKLSAgICByb290LnRpdGxlKCd0ZXh0VmlldyB0ZXN0JykKLSAgICBmaWxlbmFtZSA9ICcuL3RleHRWaWV3LnB5JwotICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmOgotICAgICAgICB0ZXh0ID0gZi5yZWFkKCkKLSAgICBidG4xID0gQnV0dG9uKHJvb3QsIHRleHQ9J3ZpZXdfdGV4dCcsCi0gICAgICAgICAgICAgICAgICBjb21tYW5kPWxhbWJkYTp2aWV3X3RleHQocm9vdCwgJ3ZpZXdfdGV4dCcsIHRleHQpKQotICAgIGJ0bjEucGFjayhzaWRlPUxFRlQpCi0gICAgYnRuMiA9IEJ1dHRvbihyb290LCB0ZXh0PSd2aWV3X2ZpbGUnLAotICAgICAgICAgICAgICAgICAgY29tbWFuZD1sYW1iZGE6dmlld19maWxlKHJvb3QsICd2aWV3X2ZpbGUnLCBmaWxlbmFtZSkpCi0gICAgYnRuMi5wYWNrKHNpZGU9TEVGVCkKLSAgICBidG4zID0gQnV0dG9uKHJvb3QsIHRleHQ9J25vbm1vZGFsIHZpZXdfdGV4dCcsCi0gICAgICAgICAgICAgICAgICBjb21tYW5kPWxhbWJkYTp2aWV3X3RleHQocm9vdCwgJ25vbm1vZGFsIHZpZXdfdGV4dCcsIHRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWw9RmFsc2UpKQotICAgIGJ0bjMucGFjayhzaWRlPUxFRlQpCi0gICAgY2xvc2UgPSBCdXR0b24ocm9vdCwgdGV4dD0nQ2xvc2UnLCBjb21tYW5kPXJvb3QuZGVzdHJveSkKLSAgICBjbG9zZS5wYWNrKHNpZGU9UklHSFQpCi0gICAgcm9vdC5tYWlubG9vcCgpCisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF90ZXh0dmlldycsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihUZXh0Vmlld2VyKQpkaWZmIC0tZ2l0IGEvTGliL2ltYXBsaWIucHkgYi9MaWIvaW1hcGxpYi5weQppbmRleCBhZDVmNGU5Li5hZDEwNGZlIDEwMDY0NAotLS0gYS9MaWIvaW1hcGxpYi5weQorKysgYi9MaWIvaW1hcGxpYi5weQpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zaHV0ZG93bigpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmFpc2UKIApAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFRoZSBzZXJ2ZXIgbWlnaHQgYWxyZWFkeSBoYXZlIGNsb3NlZCB0aGUgY29ubmVjdGlvbgogICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtNTU0LDcgKzU1NCw3IEBACiAgICAgICAgIGltcG9ydCBobWFjCiAgICAgICAgIHB3ZCA9IChzZWxmLnBhc3N3b3JkLmVuY29kZSgnQVNDSUknKSBpZiBpc2luc3RhbmNlKHNlbGYucGFzc3dvcmQsIHN0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5wYXNzd29yZCkKLSAgICAgICAgcmV0dXJuIHNlbGYudXNlciArICIgIiArIGhtYWMuSE1BQyhwd2QsIGNoYWxsZW5nZSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlciArICIgIiArIGhtYWMuSE1BQyhwd2QsIGNoYWxsZW5nZSwgJ21kNScpLmhleGRpZ2VzdCgpCiAKIAogICAgIGRlZiBsb2dvdXQoc2VsZik6CkBAIC03NDIsMTIgKzc0MiwxMiBAQAogICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnVExTIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKICAgICAgICAgIyBHZW5lcmF0ZSBhIGRlZmF1bHQgU1NMIGNvbnRleHQgaWYgbm9uZSB3YXMgcGFzc2VkLgogICAgICAgICBpZiBzc2xfY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICAgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCi0gICAgICAgICAgICBzc2xfY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCiAgICAgICAgIHR5cCwgZGF0ID0gc2VsZi5fc2ltcGxlX2NvbW1hbmQobmFtZSkKICAgICAgICAgaWYgdHlwID09ICdPSyc6Ci0gICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2xfY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2xfY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQogICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCiAgICAgICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9nZXRfY2FwYWJpbGl0aWVzKCkKQEAgLTkxNSw3ICs5MTUsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2VuZChkYXRhICsgQ1JMRikKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIE9TRXJyb3IpIGFzIHZhbDoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiAlcycgJSB2YWwpCiAKICAgICAgICAgaWYgbGl0ZXJhbCBpcyBOb25lOgpAQCAtOTQwLDcgKzk0MCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKGxpdGVyYWwpCiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKENSTEYpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgT1NFcnJvcikgYXMgdmFsOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogJXMnICUgdmFsKQogCiAgICAgICAgICAgICBpZiBub3QgbGl0ZXJhdG9yOgpAQCAtMTA5MCw3ICsxMDkwLDcgQEAKIAogICAgICAgICAjIFByb3RvY29sIG1hbmRhdGVzIGFsbCBsaW5lcyB0ZXJtaW5hdGVkIGJ5IENSTEYKICAgICAgICAgaWYgbm90IGxpbmUuZW5kc3dpdGgoYidcclxuJyk6Ci0gICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6IHVudGVybWluYXRlZCBsaW5lJykKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogdW50ZXJtaW5hdGVkIGxpbmU6ICVyJyAlIGxpbmUpCiAKICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQogICAgICAgICBpZiBfX2RlYnVnX186CkBAIC0xMjE1LDE1ICsxMjE1LDE3IEBACiAKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgaWYgc3NsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQogICAgICAgICAgICAgc2VsZi5zc2xfY29udGV4dCA9IHNzbF9jb250ZXh0CiAgICAgICAgICAgICBJTUFQNC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0KQogCiAgICAgICAgIGRlZiBfY3JlYXRlX3NvY2tldChzZWxmKToKICAgICAgICAgICAgIHNvY2sgPSBJTUFQNC5fY3JlYXRlX3NvY2tldChzZWxmKQotICAgICAgICAgICAgaWYgc2VsZi5zc2xfY29udGV4dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zc2xfY29udGV4dC53cmFwX3NvY2tldChzb2NrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQogCiAgICAgICAgIGRlZiBvcGVuKHNlbGYsIGhvc3Q9JycsIHBvcnQ9SU1BUDRfU1NMX1BPUlQpOgogICAgICAgICAgICAgIiIiU2V0dXAgY29ubmVjdGlvbiB0byByZW1vdGUgc2VydmVyIG9uICJob3N0OnBvcnQiLgpkaWZmIC0tZ2l0IGEvTGliL2ltZ2hkci5weSBiL0xpYi9pbWdoZHIucHkKaW5kZXggYmRkNDdlZS4uYWRkMmVhOCAxMDA2NDQKLS0tIGEvTGliL2ltZ2hkci5weQorKysgYi9MaWIvaW1naGRyLnB5CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByaW50KHdoYXQoZmlsZW5hbWUpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwcmludCgnKioqIG5vdCBmb3VuZCAqKionKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL2ltcC5weSBiL0xpYi9pbXAucHkKaW5kZXggNDA4ODM4My4uYzg0NDljNiAxMDA2NDQKLS0tIGEvTGliL2ltcC5weQorKysgYi9MaWIvaW1wLnB5CkBAIC0xNiwxOCArMTYsMjAgQEAKICAgICAjIFBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcuCiAgICAgbG9hZF9keW5hbWljID0gTm9uZQogCi0jIERpcmVjdGx5IGV4cG9zZWQgYnkgdGhpcyBtb2R1bGUKLWZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IG5ld19tb2R1bGUKLWZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlLCBzb3VyY2VfZnJvbV9jYWNoZQorZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgU291cmNlbGVzc0ZpbGVMb2FkZXIsIF9FUlJfTVNHLCBfU3BlY01ldGhvZHMKIAotCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKK2ltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRva2VuaXplCitpbXBvcnQgdHlwZXMKIGltcG9ydCB3YXJuaW5ncwogCit3YXJuaW5ncy53YXJuKCJ0aGUgaW1wIG1vZHVsZSBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBpbXBvcnRsaWI7ICIKKyAgICAgICAgICAgICAgInNlZSB0aGUgbW9kdWxlJ3MgZG9jdW1lbnRhdGlvbiBmb3IgYWx0ZXJuYXRpdmUgdXNlcyIsCisgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKICMgREVQUkVDQVRFRAogU0VBUkNIX0VSUk9SID0gMApAQCAtNDIsOSArNDQsMjMgQEAKIElNUF9IT09LID0gOQogCiAKK2RlZiBuZXdfbW9kdWxlKG5hbWUpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBDcmVhdGUgYSBuZXcgbW9kdWxlLgorCisgICAgVGhlIG1vZHVsZSBpcyBub3QgZW50ZXJlZCBpbnRvIHN5cy5tb2R1bGVzLgorCisgICAgIiIiCisgICAgcmV0dXJuIHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKworCiBkZWYgZ2V0X21hZ2ljKCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgb3IgLnB5byBmaWxlcy4iIiIKLSAgICByZXR1cm4gX2Jvb3RzdHJhcC5fTUFHSUNfQllURVMKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgb3IgLnB5byBmaWxlcy4KKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5NQUdJQ19OVU1CRVIKIAogCiBkZWYgZ2V0X3RhZygpOgpAQCAtNTIsMTIgKzY4LDQyIEBACiAgICAgcmV0dXJuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKIAogCitkZWYgY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGU9Tm9uZSk6CisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5Yy8ucHlvIGZpbGUuCisKKyAgICBUaGUgLnB5IGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdDsgdGhpcyBzaW1wbHkgcmV0dXJucyB0aGUgcGF0aCB0byB0aGUKKyAgICAucHljLy5weW8gZmlsZSBjYWxjdWxhdGVkIGFzIGlmIHRoZSAucHkgZmlsZSB3ZXJlIGltcG9ydGVkLiAgVGhlIGV4dGVuc2lvbgorICAgIHdpbGwgYmUgLnB5YyB1bmxlc3Mgc3lzLmZsYWdzLm9wdGltaXplIGlzIG5vbi16ZXJvLCB0aGVuIGl0IHdpbGwgYmUgLnB5by4KKworICAgIElmIGRlYnVnX292ZXJyaWRlIGlzIG5vdCBOb25lLCB0aGVuIGl0IG11c3QgYmUgYSBib29sZWFuIGFuZCBpcyB1c2VkIGluCisgICAgcGxhY2Ugb2Ygc3lzLmZsYWdzLm9wdGltaXplLgorCisgICAgSWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCisKKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZSkKKworCitkZWYgc291cmNlX2Zyb21fY2FjaGUocGF0aCk6CisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5Yy4vLnB5byBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weSBmaWxlLgorCisgICAgVGhlIC5weWMvLnB5byBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8KKyAgICB0aGUgLnB5IGZpbGUgY2FsY3VsYXRlZCB0byBjb3JyZXNwb25kIHRvIHRoZSAucHljLy5weW8gZmlsZS4gIElmIHBhdGggZG9lcworICAgIG5vdCBjb25mb3JtIHRvIFBFUCAzMTQ3IGZvcm1hdCwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4gSWYKKyAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUgdGhlbiBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZC4KKworICAgICIiIgorICAgIHJldHVybiB1dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKwogZGVmIGdldF9zdWZmaXhlcygpOgotICAgIHdhcm5pbmdzLndhcm4oJ2ltcC5nZXRfc3VmZml4ZXMoKSBpcyBkZXByZWNhdGVkOyB1c2UgdGhlIGNvbnN0YW50cyAnCi0gICAgICAgICAgICAgICAgICAnZGVmaW5lZCBvbiBpbXBvcnRsaWIubWFjaGluZXJ5IGluc3RlYWQnLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgZXh0ZW5zaW9ucyA9IFsocywgJ3JiJywgQ19FWFRFTlNJT04pIGZvciBzIGluIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVNdCi0gICAgc291cmNlID0gWyhzLCAnVScsIFBZX1NPVVJDRSkgZm9yIHMgaW4gbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU10KKyAgICBzb3VyY2UgPSBbKHMsICdyJywgUFlfU09VUkNFKSBmb3IgcyBpbiBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTXQogICAgIGJ5dGVjb2RlID0gWyhzLCAncmInLCBQWV9DT01QSUxFRCkgZm9yIHMgaW4gbWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTXQogCiAgICAgcmV0dXJuIGV4dGVuc2lvbnMgKyBzb3VyY2UgKyBieXRlY29kZQpAQCAtNjUsNyArMTExLDExIEBACiAKIGNsYXNzIE51bGxJbXBvcnRlcjoKIAotICAgICIiIk51bGwgaW1wb3J0IG9iamVjdC4iIiIKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgTnVsbCBpbXBvcnQgb2JqZWN0LgorCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CiAgICAgICAgIGlmIHBhdGggPT0gJyc6CkBAIC0xMDYsNDggKzE1Niw0OSBAQAogICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKIAogCi1jbGFzcyBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoX0hhY2tlZEdldERhdGEsIF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcik6CitjbGFzcyBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoX0hhY2tlZEdldERhdGEsIG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKToKIAogICAgICIiIkNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgaW1wbGVtZW50aW5nIGxvYWRfc291cmNlKCkuIiIiCiAKIAogZGVmIGxvYWRfc291cmNlKG5hbWUsIHBhdGhuYW1lLCBmaWxlPU5vbmUpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfc291cmNlKCkgaXMgZGVwcmVjYXRlZDsgdXNlICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkubG9hZF9tb2R1bGUoKScKLSAgICAgICAgICAgJyBpbnN0ZWFkJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgIF9Mb2FkU291cmNlQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkubG9hZF9tb2R1bGUobmFtZSkKLSAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgIGxvYWRlciA9IF9Mb2FkU291cmNlQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRobmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMubG9hZCgpCiAgICAgIyBUbyBhbGxvdyByZWxvYWRpbmcgdG8gcG90ZW50aWFsbHkgd29yaywgdXNlIGEgbm9uLWhhY2tlZCBsb2FkZXIgd2hpY2gKICAgICAjIHdvbid0IHJlbHkgb24gYSBub3ctY2xvc2VkIGZpbGUgb2JqZWN0LgotICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fc3BlY19fLmxvYWRlciA9IG1vZHVsZS5fX2xvYWRlcl9fCiAgICAgcmV0dXJuIG1vZHVsZQogCiAKLWNsYXNzIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLAotICAgICAgICBfYm9vdHN0cmFwLlNvdXJjZWxlc3NGaWxlTG9hZGVyKToKK2NsYXNzIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBTb3VyY2VsZXNzRmlsZUxvYWRlcik6CiAKICAgICAiIiJDb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBsb2FkX2NvbXBpbGVkKCkuIiIiCiAKIAogZGVmIGxvYWRfY29tcGlsZWQobmFtZSwgcGF0aG5hbWUsIGZpbGU9Tm9uZSk6Ci0gICAgbXNnID0gKCdpbXAubG9hZF9jb21waWxlZCgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCi0gICAgICAgICAgICdpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKS4nCi0gICAgICAgICAgICdsb2FkX21vZHVsZSgpIGluc3RlYWQgJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KG5hbWUsIHBhdGhuYW1lLCBmaWxlKS5sb2FkX21vZHVsZShuYW1lKQotICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgIiIiKipERVBSRUNBVEVEKioiIiIKKyAgICBsb2FkZXIgPSBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRobmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMubG9hZCgpCiAgICAgIyBUbyBhbGxvdyByZWxvYWRpbmcgdG8gcG90ZW50aWFsbHkgd29yaywgdXNlIGEgbm9uLWhhY2tlZCBsb2FkZXIgd2hpY2gKICAgICAjIHdvbid0IHJlbHkgb24gYSBub3ctY2xvc2VkIGZpbGUgb2JqZWN0LgotICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gX2Jvb3RzdHJhcC5Tb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19sb2FkZXJfXyA9IFNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXwogICAgIHJldHVybiBtb2R1bGUKIAogCiBkZWYgbG9hZF9wYWNrYWdlKG5hbWUsIHBhdGgpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfcGFja2FnZSgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBlaXRoZXIgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCkgb3IgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcigpIGluc3RlYWQnKQotICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgIiIiKipERVBSRUNBVEVEKioiIiIKICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICBleHRlbnNpb25zID0gKG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVNbOl0gKwogICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU1s6XSkKQEAgLTE1Nyw3ICsyMDgsMTMgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneyFyfSBpcyBub3QgYSBwYWNrYWdlJy5mb3JtYXQocGF0aCkpCi0gICAgcmV0dXJuIF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKS5sb2FkX21vZHVsZShuYW1lKQorICAgIHNwZWMgPSB1dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIHJldHVybiBtZXRob2RzLmV4ZWMoc3lzLm1vZHVsZXNbbmFtZV0pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG1ldGhvZHMubG9hZCgpCiAKIAogZGVmIGxvYWRfbW9kdWxlKG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBkZXRhaWxzKToKQEAgLTE2OSwzMiArMjI2LDMwIEBACiAKICAgICAiIiIKICAgICBzdWZmaXgsIG1vZGUsIHR5cGVfID0gZGV0YWlscwotICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICBpZiBtb2RlIGFuZCAobm90IG1vZGUuc3RhcnRzd2l0aCgoJ3InLCAnVScpKSBvciAnKycgaW4gbW9kZSk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgb3BlbiBtb2RlIHshcn0nLmZvcm1hdChtb2RlKSkKLSAgICAgICAgZWxpZiBmaWxlIGlzIE5vbmUgYW5kIHR5cGVfIGluIHtQWV9TT1VSQ0UsIFBZX0NPTVBJTEVEfToKLSAgICAgICAgICAgIG1zZyA9ICdmaWxlIG9iamVjdCByZXF1aXJlZCBmb3IgaW1wb3J0ICh0eXBlIGNvZGUge30pJy5mb3JtYXQodHlwZV8pCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQWV9TT1VSQ0U6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9zb3VyY2UobmFtZSwgZmlsZW5hbWUsIGZpbGUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfQ09NUElMRUQ6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9jb21waWxlZChuYW1lLCBmaWxlbmFtZSwgZmlsZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBDX0VYVEVOU0lPTiBhbmQgbG9hZF9keW5hbWljIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgb3BlbmVkX2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIG9wZW5lZF9maWxlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQotICAgICAgICBlbGlmIHR5cGVfID09IFBLR19ESVJFQ1RPUlk6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlKG5hbWUsIGZpbGVuYW1lKQotICAgICAgICBlbGlmIHR5cGVfID09IENfQlVJTFRJTjoKLSAgICAgICAgICAgIHJldHVybiBpbml0X2J1aWx0aW4obmFtZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQWV9GUk9aRU46Ci0gICAgICAgICAgICByZXR1cm4gaW5pdF9mcm96ZW4obmFtZSkKKyAgICBpZiBtb2RlIGFuZCAobm90IG1vZGUuc3RhcnRzd2l0aCgoJ3InLCAnVScpKSBvciAnKycgaW4gbW9kZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgZmlsZSBvcGVuIG1vZGUgeyFyfScuZm9ybWF0KG1vZGUpKQorICAgIGVsaWYgZmlsZSBpcyBOb25lIGFuZCB0eXBlXyBpbiB7UFlfU09VUkNFLCBQWV9DT01QSUxFRH06CisgICAgICAgIG1zZyA9ICdmaWxlIG9iamVjdCByZXF1aXJlZCBmb3IgaW1wb3J0ICh0eXBlIGNvZGUge30pJy5mb3JtYXQodHlwZV8pCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQorICAgIGVsaWYgdHlwZV8gPT0gUFlfU09VUkNFOgorICAgICAgICByZXR1cm4gbG9hZF9zb3VyY2UobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBQWV9DT01QSUxFRDoKKyAgICAgICAgcmV0dXJuIGxvYWRfY29tcGlsZWQobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBDX0VYVEVOU0lPTiBhbmQgbG9hZF9keW5hbWljIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIG9wZW5lZF9maWxlOgorICAgICAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIG9wZW5lZF9maWxlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnID0gICJEb24ndCBrbm93IGhvdyB0byBpbXBvcnQge30gKHR5cGUgY29kZSB7fSkiLmZvcm1hdChuYW1lLCB0eXBlXykKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxvYWRfZHluYW1pYyhuYW1lLCBmaWxlbmFtZSwgZmlsZSkKKyAgICBlbGlmIHR5cGVfID09IFBLR19ESVJFQ1RPUlk6CisgICAgICAgIHJldHVybiBsb2FkX3BhY2thZ2UobmFtZSwgZmlsZW5hbWUpCisgICAgZWxpZiB0eXBlXyA9PSBDX0JVSUxUSU46CisgICAgICAgIHJldHVybiBpbml0X2J1aWx0aW4obmFtZSkKKyAgICBlbGlmIHR5cGVfID09IFBZX0ZST1pFTjoKKyAgICAgICAgcmV0dXJuIGluaXRfZnJvemVuKG5hbWUpCisgICAgZWxzZToKKyAgICAgICAgbXNnID0gICJEb24ndCBrbm93IGhvdyB0byBpbXBvcnQge30gKHR5cGUgY29kZSB7fSkiLmZvcm1hdChuYW1lLCB0eXBlXykKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPW5hbWUpCiAKIAogZGVmIGZpbmRfbW9kdWxlKG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC0yMzAsNTQgKzI4NSwzMSBAQAogICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHBhY2thZ2VfZGlyZWN0b3J5LCBwYWNrYWdlX2ZpbGVfbmFtZSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIHBhY2thZ2VfZGlyZWN0b3J5LCAoJycsICcnLCBQS0dfRElSRUNUT1JZKQotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScpCi0gICAgICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCB0eXBlXyBpbiBnZXRfc3VmZml4ZXMoKToKLSAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBuYW1lICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGVudHJ5LCBmaWxlX25hbWUpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGJyZWFrICAjIEJyZWFrIG91dCBvZiBvdXRlciBsb29wIHdoZW4gYnJlYWtpbmcgb3V0IG9mIGlubmVyIGxvb3AuCisgICAgICAgIGZvciBzdWZmaXgsIG1vZGUsIHR5cGVfIGluIGdldF9zdWZmaXhlcygpOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gbmFtZSArIHN1ZmZpeAorICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGVudHJ5LCBmaWxlX25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBicmVhayAgIyBCcmVhayBvdXQgb2Ygb3V0ZXIgbG9vcCB3aGVuIGJyZWFraW5nIG91dCBvZiBpbm5lciBsb29wLgogICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9ib290c3RyYXAuX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQogCiAgICAgZW5jb2RpbmcgPSBOb25lCi0gICAgaWYgbW9kZSA9PSAnVSc6CisgICAgaWYgJ2InIG5vdCBpbiBtb2RlOgogICAgICAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcoZmlsZS5yZWFkbGluZSlbMF0KICAgICBmaWxlID0gb3BlbihmaWxlX3BhdGgsIG1vZGUsIGVuY29kaW5nPWVuY29kaW5nKQogICAgIHJldHVybiBmaWxlLCBmaWxlX3BhdGgsIChzdWZmaXgsIG1vZGUsIHR5cGVfKQogCiAKLV9SRUxPQURJTkcgPSB7fQotCiBkZWYgcmVsb2FkKG1vZHVsZSk6Ci0gICAgIiIiUmVsb2FkIHRoZSBtb2R1bGUgYW5kIHJldHVybiBpdC4KKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgUmVsb2FkIHRoZSBtb2R1bGUgYW5kIHJldHVybiBpdC4KIAogICAgIFRoZSBtb2R1bGUgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGltcG9ydGVkIGJlZm9yZS4KIAogICAgICIiIgotICAgIGlmIG5vdCBtb2R1bGUgb3IgdHlwZShtb2R1bGUpICE9IHR5cGUoc3lzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJyZWxvYWQoKSBhcmd1bWVudCBtdXN0IGJlIG1vZHVsZSIpCi0gICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgIGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICBtc2cgPSAibW9kdWxlIHt9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQotICAgIGlmIG5hbWUgaW4gX1JFTE9BRElORzoKLSAgICAgICAgcmV0dXJuIF9SRUxPQURJTkdbbmFtZV0KLSAgICBfUkVMT0FESU5HW25hbWVdID0gbW9kdWxlCi0gICAgdHJ5OgotICAgICAgICBwYXJlbnRfbmFtZSA9IG5hbWUucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIGlmIHBhcmVudF9uYW1lIGFuZCBwYXJlbnRfbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBtc2cgPSAicGFyZW50IHshcn0gbm90IGluIHN5cy5tb2R1bGVzIgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChwYXJlbnRfbmFtZSksIG5hbWU9cGFyZW50X25hbWUpCi0gICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICMgVGhlIG1vZHVsZSBtYXkgaGF2ZSByZXBsYWNlZCBpdHNlbGYgaW4gc3lzLm1vZHVsZXMhCi0gICAgICAgIHJldHVybiBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dCi0gICAgZmluYWxseToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVsIF9SRUxPQURJTkdbbmFtZV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBpbXBvcnRsaWIucmVsb2FkKG1vZHVsZSkKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkgYi9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CmluZGV4IDIyYzkwZjIuLjFiYzk5NDcgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKKysrIGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQpAQCAtMSw1ICsxLDUgQEAKICIiIkEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgaW1wb3J0LiIiIgotX19hbGxfXyA9IFsnX19pbXBvcnRfXycsICdpbXBvcnRfbW9kdWxlJywgJ2ludmFsaWRhdGVfY2FjaGVzJ10KK19fYWxsX18gPSBbJ19faW1wb3J0X18nLCAnaW1wb3J0X21vZHVsZScsICdpbnZhbGlkYXRlX2NhY2hlcycsICdyZWxvYWQnXQogCiAjIEJvb3RzdHJhcCBoZWxwICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTIyLDcgKzIyLDEyIEBACiAgICAgIyBhIHNlY29uZCBjb3B5IG9mIHRoZSBtb2R1bGUuCiAgICAgX2Jvb3RzdHJhcC5fX25hbWVfXyA9ICdpbXBvcnRsaWIuX2Jvb3RzdHJhcCcKICAgICBfYm9vdHN0cmFwLl9fcGFja2FnZV9fID0gJ2ltcG9ydGxpYicKLSAgICBfYm9vdHN0cmFwLl9fZmlsZV9fID0gX19maWxlX18ucmVwbGFjZSgnX19pbml0X18ucHknLCAnX2Jvb3RzdHJhcC5weScpCisgICAgdHJ5OgorICAgICAgICBfYm9vdHN0cmFwLl9fZmlsZV9fID0gX19maWxlX18ucmVwbGFjZSgnX19pbml0X18ucHknLCAnX2Jvb3RzdHJhcC5weScpCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgIyBfX2ZpbGVfXyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBkZWZpbmVkLCBlLmcuIGlmIHRoaXMgY29kZSBnZXRzCisgICAgICAgICMgZnJvemVuIGJ5IGEgdG9vbCBsaWtlIGN4X0ZyZWV6ZS4KKyAgICAgICAgcGFzcwogICAgIHN5cy5tb2R1bGVzWydpbXBvcnRsaWIuX2Jvb3RzdHJhcCddID0gX2Jvb3RzdHJhcAogCiAjIFRvIHNpbXBsaWZ5IGltcG9ydHMgaW4gdGVzdCBjb2RlCkBAIC0zMiw2ICszNywxMCBAQAogIyBGdWxseSBib290c3RyYXBwZWQgYXQgdGhpcyBwb2ludCwgaW1wb3J0IHdoYXRldmVyIHlvdSBsaWtlLCBjaXJjdWxhcgogIyBkZXBlbmRlbmNpZXMgYW5kIHN0YXJ0dXAgb3ZlcmhlYWQgbWluaW1pc2F0aW9uIHBlcm1pdHRpbmcgOikKIAoraW1wb3J0IHR5cGVzCitpbXBvcnQgd2FybmluZ3MKKworCiAjIFB1YmxpYyBBUEkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IF9faW1wb3J0X18KQEAgLTQ2LDIwICs1NSwxNSBAQAogCiAKIGRlZiBmaW5kX2xvYWRlcihuYW1lLCBwYXRoPU5vbmUpOgotICAgICIiIkZpbmQgdGhlIGxvYWRlciBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuCisgICAgIiIiUmV0dXJuIHRoZSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgogCi0gICAgRmlyc3QsIHN5cy5tb2R1bGVzIGlzIGNoZWNrZWQgdG8gc2VlIGlmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkgaW1wb3J0ZWQuIElmCi0gICAgc28sIHRoZW4gc3lzLm1vZHVsZXNbbmFtZV0uX19sb2FkZXJfXyBpcyByZXR1cm5lZC4gSWYgdGhhdCBoYXBwZW5zIHRvIGJlCi0gICAgc2V0IHRvIE5vbmUsIHRoZW4gVmFsdWVFcnJvciBpcyByYWlzZWQuIElmIHRoZSBtb2R1bGUgaXMgbm90IGluCi0gICAgc3lzLm1vZHVsZXMsIHRoZW4gc3lzLm1ldGFfcGF0aCBpcyBzZWFyY2hlZCBmb3IgYSBzdWl0YWJsZSBsb2FkZXIgd2l0aCB0aGUKLSAgICB2YWx1ZSBvZiAncGF0aCcgZ2l2ZW4gdG8gdGhlIGZpbmRlcnMuIE5vbmUgaXMgcmV0dXJuZWQgaWYgbm8gbG9hZGVyIGNvdWxkCi0gICAgYmUgZm91bmQuCisgICAgVGhpcyBpcyBhIGJhY2t3YXJkLWNvbXBhdGlibGUgd3JhcHBlciBhcm91bmQgZmluZF9zcGVjKCkuCiAKLSAgICBEb3R0ZWQgbmFtZXMgZG8gbm90IGhhdmUgdGhlaXIgcGFyZW50IHBhY2thZ2VzIGltcGxpY2l0bHkgaW1wb3J0ZWQuIFlvdSB3aWxsCi0gICAgbW9zdCBsaWtlbHkgbmVlZCB0byBleHBsaWNpdGx5IGltcG9ydCBhbGwgcGFyZW50IHBhY2thZ2VzIGluIHRoZSBwcm9wZXIKLSAgICBvcmRlciBmb3IgYSBzdWJtb2R1bGUgdG8gZ2V0IHRoZSBjb3JyZWN0IGxvYWRlci4KKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjKCkuCiAKICAgICAiIiIKKyAgICB3YXJuaW5ncy53YXJuKCdVc2UgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjKCkgaW5zdGVhZC4nLAorICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAgICAgdHJ5OgogICAgICAgICBsb2FkZXIgPSBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fCiAgICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgpAQCAtNjgsNyArNzIsMjAgQEAKICAgICAgICAgICAgIHJldHVybiBsb2FkZXIKICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgIHBhc3MKLSAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fbG9hZGVyX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorCisgICAgc3BlYyA9IF9ib290c3RyYXAuX2ZpbmRfc3BlYyhuYW1lLCBwYXRoKQorICAgICMgV2Ugd29uJ3Qgd29ycnkgYWJvdXQgbWFsZm9ybWVkIHNwZWNzIChtaXNzaW5nIGF0dHJpYnV0ZXMpLgorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc3BlYyBmb3Ige30gbWlzc2luZyBsb2FkZXInLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ25hbWVzcGFjZSBwYWNrYWdlcyBkbyBub3QgaGF2ZSBsb2FkZXJzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lKQorICAgIHJldHVybiBzcGVjLmxvYWRlcgogCiAKIGRlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIHBhY2thZ2U9Tm9uZSk6CkBAIC04Miw5ICs5OSw1OCBAQAogICAgIGxldmVsID0gMAogICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnLicpOgogICAgICAgICBpZiBub3QgcGFja2FnZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsYXRpdmUgaW1wb3J0cyByZXF1aXJlIHRoZSAncGFja2FnZScgYXJndW1lbnQiKQorICAgICAgICAgICAgbXNnID0gKCJ0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHRvIHBlcmZvcm0gYSByZWxhdGl2ZSAiCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBmb3IgeyFyfSIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnLmZvcm1hdChuYW1lKSkKICAgICAgICAgZm9yIGNoYXJhY3RlciBpbiBuYW1lOgogICAgICAgICAgICAgaWYgY2hhcmFjdGVyICE9ICcuJzoKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgbGV2ZWwgKz0gMQogICAgIHJldHVybiBfYm9vdHN0cmFwLl9nY2RfaW1wb3J0KG5hbWVbbGV2ZWw6XSwgcGFja2FnZSwgbGV2ZWwpCisKKworX1JFTE9BRElORyA9IHt9CisKKworZGVmIHJlbG9hZChtb2R1bGUpOgorICAgICIiIlJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCisKKyAgICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuCisKKyAgICAiIiIKKyAgICBpZiBub3QgbW9kdWxlIG9yIG5vdCBpc2luc3RhbmNlKG1vZHVsZSwgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsb2FkKCkgYXJndW1lbnQgbXVzdCBiZSBtb2R1bGUiKQorICAgIHRyeToKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX3NwZWNfXy5uYW1lCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisKKyAgICBpZiBzeXMubW9kdWxlcy5nZXQobmFtZSkgaXMgbm90IG1vZHVsZToKKyAgICAgICAgbXNnID0gIm1vZHVsZSB7fSBub3QgaW4gc3lzLm1vZHVsZXMiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKKyAgICBpZiBuYW1lIGluIF9SRUxPQURJTkc6CisgICAgICAgIHJldHVybiBfUkVMT0FESU5HW25hbWVdCisgICAgX1JFTE9BRElOR1tuYW1lXSA9IG1vZHVsZQorICAgIHRyeToKKyAgICAgICAgcGFyZW50X25hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICBpZiBwYXJlbnRfbmFtZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBzeXMubW9kdWxlc1twYXJlbnRfbmFtZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBtc2cgPSAicGFyZW50IHshcn0gbm90IGluIHN5cy5tb2R1bGVzIgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQocGFyZW50X25hbWUpLCBuYW1lPXBhcmVudF9uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dwYXRoID0gcGFyZW50Ll9fcGF0aF9fCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dwYXRoID0gTm9uZQorICAgICAgICB0YXJnZXQgPSBtb2R1bGUKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXyA9IF9ib290c3RyYXAuX2ZpbmRfc3BlYyhuYW1lLCBwa2dwYXRoLCB0YXJnZXQpCisgICAgICAgIG1ldGhvZHMgPSBfYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQorICAgICAgICBtZXRob2RzLmV4ZWMobW9kdWxlKQorICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBmaW5hbGx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgX1JFTE9BRElOR1tuYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKaW5kZXggZTQwZWM5Mi4uYjg4MzZjMSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQpAQCAtOSw3ICs5LDcgQEAKICMKICMgSU1QT1JUQU5UOiBXaGVuZXZlciBtYWtpbmcgY2hhbmdlcyB0byB0aGlzIG1vZHVsZSwgYmUgc3VyZSB0byBydW4KICMgYSB0b3AtbGV2ZWwgbWFrZSBpbiBvcmRlciB0byBnZXQgdGhlIGZyb3plbiB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUKLSMgdXBkYXRlLiBOb3QgZG9pbmcgc28sIHdpbGwgcmVzdWx0IGluIHRoZSBNYWtlZmlsZSB0byBmYWlsIGZvcgorIyB1cGRhdGUuIE5vdCBkb2luZyBzbyB3aWxsIHJlc3VsdCBpbiB0aGUgTWFrZWZpbGUgdG8gZmFpbCBmb3IKICMgYWxsIG90aGVycyB3aG8gZG9uJ3QgaGF2ZSBhIC4vcHl0aG9uIGFyb3VuZCB0byBmcmVlemUgdGhlIG1vZHVsZQogIyBpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIGNvbXBpbGF0aW9uLgogIwpAQCAtMjAsMTAgKzIwLDYgQEAKICMgcmVmZXJlbmNlIGFueSBpbmplY3RlZCBvYmplY3RzISBUaGlzIGluY2x1ZGVzIG5vdCBvbmx5IGdsb2JhbCBjb2RlIGJ1dCBhbHNvCiAjIGFueXRoaW5nIHNwZWNpZmllZCBhdCB0aGUgY2xhc3MgbGV2ZWwuCiAKLSMgWFhYIE1ha2Ugc3VyZSBhbGwgcHVibGljIG5hbWVzIGhhdmUgbm8gc2luZ2xlIGxlYWRpbmcgdW5kZXJzY29yZSBhbmQgYWxsCi0jICAgICBvdGhlcnMgZG8uCi0KLQogIyBCb290c3RyYXAtcmVsYXRlZCBjb2RlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVMgPSAnd2luJywgJ2N5Z3dpbicsICdkYXJ3aW4nCkBAIC00MSw3NiArMzcsNTggQEAKICAgICByZXR1cm4gX3JlbGF4X2Nhc2UKIAogCi0jIFRPRE86IEV4cG9zZSBmcm9tIG1hcnNoYWwKIGRlZiBfd19sb25nKHgpOgotICAgICIiIkNvbnZlcnQgYSAzMi1iaXQgaW50ZWdlciB0byBsaXR0bGUtZW5kaWFuLgotCi0gICAgWFhYIFRlbXBvcmFyeSB1bnRpbCBtYXJzaGFsJ3MgbG9uZyBmdW5jdGlvbnMgYXJlIGV4cG9zZWQuCi0KLSAgICAiIiIKLSAgICB4ID0gaW50KHgpCi0gICAgaW50X2J5dGVzID0gW10KLSAgICBpbnRfYnl0ZXMuYXBwZW5kKHggJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gOCkgJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gMTYpICYgMHhGRikKLSAgICBpbnRfYnl0ZXMuYXBwZW5kKCh4ID4+IDI0KSAmIDB4RkYpCi0gICAgcmV0dXJuIGJ5dGVhcnJheShpbnRfYnl0ZXMpCisgICAgIiIiQ29udmVydCBhIDMyLWJpdCBpbnRlZ2VyIHRvIGxpdHRsZS1lbmRpYW4uIiIiCisgICAgcmV0dXJuIChpbnQoeCkgJiAweEZGRkZGRkZGKS50b19ieXRlcyg0LCAnbGl0dGxlJykKIAogCi0jIFRPRE86IEV4cG9zZSBmcm9tIG1hcnNoYWwKIGRlZiBfcl9sb25nKGludF9ieXRlcyk6Ci0gICAgIiIiQ29udmVydCA0IGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gdG8gYW4gaW50ZWdlci4KLQotICAgIFhYWCBUZW1wb3JhcnkgdW50aWwgbWFyc2hhbCdzIGxvbmcgZnVuY3Rpb24gYXJlIGV4cG9zZWQuCi0KLSAgICAiIiIKLSAgICB4ID0gaW50X2J5dGVzWzBdCi0gICAgeCB8PSBpbnRfYnl0ZXNbMV0gPDwgOAotICAgIHggfD0gaW50X2J5dGVzWzJdIDw8IDE2Ci0gICAgeCB8PSBpbnRfYnl0ZXNbM10gPDwgMjQKLSAgICByZXR1cm4geAorICAgICIiIkNvbnZlcnQgNCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIHRvIGFuIGludGVnZXIuIiIiCisgICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKGludF9ieXRlcywgJ2xpdHRsZScpCiAKIAogZGVmIF9wYXRoX2pvaW4oKnBhdGhfcGFydHMpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmpvaW4oKS4iIiIKLSAgICBuZXdfcGFydHMgPSBbXQotICAgIGZvciBwYXJ0IGluIHBhdGhfcGFydHM6Ci0gICAgICAgIGlmIG5vdCBwYXJ0OgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbmV3X3BhcnRzLmFwcGVuZChwYXJ0KQotICAgICAgICBpZiBwYXJ0Wy0xXSBub3QgaW4gcGF0aF9zZXBhcmF0b3JzOgotICAgICAgICAgICAgbmV3X3BhcnRzLmFwcGVuZChwYXRoX3NlcCkKLSAgICByZXR1cm4gJycuam9pbihuZXdfcGFydHNbOi0xXSkgICMgRHJvcCBzdXBlcmZsdW91cyBwYXRoIHNlcGFyYXRvci4KKyAgICByZXR1cm4gcGF0aF9zZXAuam9pbihbcGFydC5yc3RyaXAocGF0aF9zZXBhcmF0b3JzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXRoX3BhcnRzIGlmIHBhcnRdKQogCiAKIGRlZiBfcGF0aF9zcGxpdChwYXRoKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5zcGxpdCgpLiIiIgorICAgIGlmIGxlbihwYXRoX3NlcGFyYXRvcnMpID09IDE6CisgICAgICAgIGZyb250LCBfLCB0YWlsID0gcGF0aC5ycGFydGl0aW9uKHBhdGhfc2VwKQorICAgICAgICByZXR1cm4gZnJvbnQsIHRhaWwKICAgICBmb3IgeCBpbiByZXZlcnNlZChwYXRoKToKICAgICAgICAgaWYgeCBpbiBwYXRoX3NlcGFyYXRvcnM6Ci0gICAgICAgICAgICBzZXAgPSB4Ci0gICAgICAgICAgICBicmVhawotICAgIGVsc2U6Ci0gICAgICAgIHNlcCA9IHBhdGhfc2VwCi0gICAgZnJvbnQsIF8sIHRhaWwgPSBwYXRoLnJwYXJ0aXRpb24oc2VwKQotICAgIHJldHVybiBmcm9udCwgdGFpbAorICAgICAgICAgICAgZnJvbnQsIHRhaWwgPSBwYXRoLnJzcGxpdCh4LCBtYXhzcGxpdD0xKQorICAgICAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCisgICAgcmV0dXJuICcnLCBwYXRoCisKKworZGVmIF9wYXRoX3N0YXQocGF0aCk6CisgICAgIiIiU3RhdCB0aGUgcGF0aC4KKworICAgIE1hZGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBtYWtlIGl0IGVhc2llciB0byBvdmVycmlkZSBpbiBleHBlcmltZW50cworICAgIChlLmcuIGNhY2hlIHN0YXQgcmVzdWx0cykuCisKKyAgICAiIiIKKyAgICByZXR1cm4gX29zLnN0YXQocGF0aCkKIAogCiBkZWYgX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIG1vZGUpOgogICAgICIiIlRlc3Qgd2hldGhlciB0aGUgcGF0aCBpcyB0aGUgc3BlY2lmaWVkIG1vZGUgdHlwZS4iIiIKICAgICB0cnk6Ci0gICAgICAgIHN0YXRfaW5mbyA9IF9vcy5zdGF0KHBhdGgpCisgICAgICAgIHN0YXRfaW5mbyA9IF9wYXRoX3N0YXQocGF0aCkKICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIChzdGF0X2luZm8uc3RfbW9kZSAmIDBvMTcwMDAwKSA9PSBtb2RlCiAKIAotIyBYWFggQ291bGQgYWxzbyBleHBvc2UgTW9kdWxlcy9nZXRwYXRoLmM6aXNmaWxlKCkKIGRlZiBfcGF0aF9pc2ZpbGUocGF0aCk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguaXNmaWxlLiIiIgogICAgIHJldHVybiBfcGF0aF9pc19tb2RlX3R5cGUocGF0aCwgMG8xMDAwMDApCiAKIAotIyBYWFggQ291bGQgYWxzbyBleHBvc2UgTW9kdWxlcy9nZXRwYXRoLmM6aXNkaXIoKQogZGVmIF9wYXRoX2lzZGlyKHBhdGgpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmlzZGlyLiIiIgogICAgIGlmIG5vdCBwYXRoOgpAQCAtMTQ4LDE3ICsxMjYsMzAgQEAKICAgICBuZXcuX19kaWN0X18udXBkYXRlKG9sZC5fX2RpY3RfXykKIAogCitkZWYgX25ld19tb2R1bGUobmFtZSk6CisgICAgcmV0dXJuIHR5cGUoc3lzKShuYW1lKQorCisKIF9jb2RlX3R5cGUgPSB0eXBlKF93cmFwLl9fY29kZV9fKQogCiAKLWRlZiBuZXdfbW9kdWxlKG5hbWUpOgotICAgICIiIkNyZWF0ZSBhIG5ldyBtb2R1bGUuCiAKLSAgICBUaGUgbW9kdWxlIGlzIG5vdCBlbnRlcmVkIGludG8gc3lzLm1vZHVsZXMuCitjbGFzcyBfTWFuYWdlUmVsb2FkOgogCi0gICAgIiIiCi0gICAgcmV0dXJuIHR5cGUoX2lvKShuYW1lKQorICAgICIiIk1hbmFnZXMgdGhlIHBvc3NpYmxlIGNsZWFuLXVwIG9mIHN5cy5tb2R1bGVzIGZvciBsb2FkX21vZHVsZSgpLiIiIgogCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5faXNfcmVsb2FkID0gc2VsZi5fbmFtZSBpbiBzeXMubW9kdWxlcworCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgaWYgYW55KGFyZyBpcyBub3QgTm9uZSBmb3IgYXJnIGluIGFyZ3MpIGFuZCBub3Qgc2VsZi5faXNfcmVsb2FkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tzZWxmLl9uYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAogIyBNb2R1bGUtbGV2ZWwgbG9ja2luZyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yMTQsNyArMjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQgKz0gMQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5oYXNfZGVhZGxvY2soKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9EZWFkbG9ja0Vycm9yKCJkZWFkbG9jayBkZXRlY3RlZCBieSAlciIgJSBzZWxmKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgX0RlYWRsb2NrRXJyb3IoJ2RlYWRsb2NrIGRldGVjdGVkIGJ5ICVyJyAlIHNlbGYpCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FrZXVwLmFjcXVpcmUoRmFsc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53YWl0ZXJzICs9IDEKICAgICAgICAgICAgICAgICAjIFdhaXQgZm9yIGEgcmVsZWFzZSgpIGNhbGwKQEAgLTIyNyw3ICsyMTgsNyBAQAogICAgICAgICB0aWQgPSBfdGhyZWFkLmdldF9pZGVudCgpCiAgICAgICAgIHdpdGggc2VsZi5sb2NrOgogICAgICAgICAgICAgaWYgc2VsZi5vd25lciAhPSB0aWQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrIikKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2Nhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2snKQogICAgICAgICAgICAgYXNzZXJ0IHNlbGYuY291bnQgPiAwCiAgICAgICAgICAgICBzZWxmLmNvdW50IC09IDEKICAgICAgICAgICAgIGlmIHNlbGYuY291bnQgPT0gMDoKQEAgLTIzNyw3ICsyMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLndha2V1cC5yZWxlYXNlKCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJfTW9kdWxlTG9jayglcikgYXQgJWQiICUgKHNlbGYubmFtZSwgaWQoc2VsZikpCisgICAgICAgIHJldHVybiAnX01vZHVsZUxvY2soeyFyfSkgYXQge30nLmZvcm1hdChzZWxmLm5hbWUsIGlkKHNlbGYpKQogCiAKIGNsYXNzIF9EdW1teU1vZHVsZUxvY2s6CkBAIC0yNTQsMTEgKzI0NSwyOCBAQAogCiAgICAgZGVmIHJlbGVhc2Uoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuY291bnQgPT0gMDoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jayIpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2Nhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2snKQogICAgICAgICBzZWxmLmNvdW50IC09IDEKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJfRHVtbXlNb2R1bGVMb2NrKCVyKSBhdCAlZCIgJSAoc2VsZi5uYW1lLCBpZChzZWxmKSkKKyAgICAgICAgcmV0dXJuICdfRHVtbXlNb2R1bGVMb2NrKHshcn0pIGF0IHt9Jy5mb3JtYXQoc2VsZi5uYW1lLCBpZChzZWxmKSkKKworCitjbGFzcyBfTW9kdWxlTG9ja01hbmFnZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2xvY2sgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gX2dldF9tb2R1bGVfbG9jayhzZWxmLl9uYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX2ltcC5yZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxmLl9sb2NrLmFjcXVpcmUoKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX2xvY2sucmVsZWFzZSgpCiAKIAogIyBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIGZvciBjb25zdW1wdGlvbiBieSBQeXRob24vaW1wb3J0LmMuCkBAIC0zMTUsOTUgKzMyMywxMDkgQEAKIAogIyBGaW5kZXIvbG9hZGVyIHV0aWxpdHkgY29kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0iIiJNYWdpYyB3b3JkIHRvIHJlamVjdCAucHljIGZpbGVzIGdlbmVyYXRlZCBieSBvdGhlciBQeXRob24gdmVyc2lvbnMuCi1JdCBzaG91bGQgY2hhbmdlIGZvciBlYWNoIGluY29tcGF0aWJsZSBjaGFuZ2UgdG8gdGhlIGJ5dGVjb2RlLgorIyBNYWdpYyB3b3JkIHRvIHJlamVjdCAucHljIGZpbGVzIGdlbmVyYXRlZCBieSBvdGhlciBQeXRob24gdmVyc2lvbnMuCisjIEl0IHNob3VsZCBjaGFuZ2UgZm9yIGVhY2ggaW5jb21wYXRpYmxlIGNoYW5nZSB0byB0aGUgYnl0ZWNvZGUuCisjCisjIFRoZSB2YWx1ZSBvZiBDUiBhbmQgTEYgaXMgaW5jb3Jwb3JhdGVkIHNvIGlmIHlvdSBldmVyIHJlYWQgb3Igd3JpdGUKKyMgYSAucHljIGZpbGUgaW4gdGV4dCBtb2RlIHRoZSBtYWdpYyBudW1iZXIgd2lsbCBiZSB3cm9uZzsgYWxzbywgdGhlCisjIEFwcGxlIE1QVyBjb21waWxlciBzd2FwcyB0aGVpciB2YWx1ZXMsIGJvdGNoaW5nIHN0cmluZyBjb25zdGFudHMuCisjCisjIFRoZSBtYWdpYyBudW1iZXJzIG11c3QgYmUgc3BhY2VkIGFwYXJ0IGF0IGxlYXN0IDIgdmFsdWVzLCBhcyB0aGUKKyMgLVUgaW50ZXJwZXRlciBmbGFnIHdpbGwgY2F1c2UgTUFHSUMrMSBiZWluZyB1c2VkLiBUaGV5IGhhdmUgYmVlbgorIyBvZGQgbnVtYmVycyBmb3Igc29tZSB0aW1lIG5vdy4KKyMKKyMgVGhlcmUgd2VyZSBhIHZhcmlldHkgb2Ygb2xkIHNjaGVtZXMgZm9yIHNldHRpbmcgdGhlIG1hZ2ljIG51bWJlci4KKyMgVGhlIGN1cnJlbnQgd29ya2luZyBzY2hlbWUgaXMgdG8gaW5jcmVtZW50IHRoZSBwcmV2aW91cyB2YWx1ZSBieQorIyAxMC4KKyMKKyMgU3RhcnRpbmcgd2l0aCB0aGUgYWRvcHRpb24gb2YgUEVQIDMxNDcgaW4gUHl0aG9uIDMuMiwgZXZlcnkgYnVtcCBpbiBtYWdpYworIyBudW1iZXIgYWxzbyBpbmNsdWRlcyBhIG5ldyAibWFnaWMgdGFnIiwgaS5lLiBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB1c2VkCisjIHRvIHJlcHJlc2VudCB0aGUgbWFnaWMgbnVtYmVyIGluIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLiAgV2hlbiB5b3UgY2hhbmdlCisjIHRoZSBtYWdpYyBudW1iZXIsIHlvdSBtdXN0IGFsc28gc2V0IGEgbmV3IHVuaXF1ZSBtYWdpYyB0YWcuICBHZW5lcmFsbHkgdGhpcworIyBjYW4gYmUgbmFtZWQgYWZ0ZXIgdGhlIFB5dGhvbiBtYWpvciB2ZXJzaW9uIG9mIHRoZSBtYWdpYyBudW1iZXIgYnVtcCwgYnV0CisjIGl0IGNhbiByZWFsbHkgYmUgYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBkaWZmZXJlbnQgdGhhbiBhbnl0aGluZyBlbHNlCisjIHRoYXQncyBjb21lIGJlZm9yZS4gIFRoZSB0YWdzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLCBzdGFydGluZworIyB3aXRoIFB5dGhvbiAzLjJhMC4KKyMKKyMgS25vd24gdmFsdWVzOgorIyAgUHl0aG9uIDEuNTogICAyMDEyMQorIyAgUHl0aG9uIDEuNS4xOiAyMDEyMQorIyAgICAgUHl0aG9uIDEuNS4yOiAyMDEyMQorIyAgICAgUHl0aG9uIDEuNjogICA1MDQyOAorIyAgICAgUHl0aG9uIDIuMDogICA1MDgyMworIyAgICAgUHl0aG9uIDIuMC4xOiA1MDgyMworIyAgICAgUHl0aG9uIDIuMTogICA2MDIwMgorIyAgICAgUHl0aG9uIDIuMS4xOiA2MDIwMgorIyAgICAgUHl0aG9uIDIuMS4yOiA2MDIwMgorIyAgICAgUHl0aG9uIDIuMjogICA2MDcxNworIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAxMQorIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAyMQorIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAxMSAoISkKKyMgICAgIFB5dGhvbiAyLjRhMDogNjIwNDEKKyMgICAgIFB5dGhvbiAyLjRhMzogNjIwNTEKKyMgICAgIFB5dGhvbiAyLjRiMTogNjIwNjEKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwNzEKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwODEgKGFzdC1icmFuY2gpCisjICAgICBQeXRob24gMi41YTA6IDYyMDkxICh3aXRoKQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA5MiAoY2hhbmdlZCBXSVRIX0NMRUFOVVAgb3Bjb2RlKQorIyAgICAgUHl0aG9uIDIuNWIzOiA2MjEwMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4pCisjICAgICBQeXRob24gMi41YjM6IDYyMTExIChmaXggd3JvbmcgY29kZTogeCArPSB5aWVsZCkKKyMgICAgIFB5dGhvbiAyLjVjMTogNjIxMjEgKGZpeCB3cm9uZyBsbm90YWIgd2l0aCBmb3IgbG9vcHMgYW5kCisjICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yaW5nIGNvbnN0YW50cyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCkKKyMgICAgIFB5dGhvbiAyLjVjMjogNjIxMzEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uIGluIGxpc3Rjb21wL2dlbmV4cCkKKyMgICAgIFB5dGhvbiAyLjZhMDogNjIxNTEgKHBlZXBob2xlIG9wdGltaXphdGlvbnMgYW5kIFNUT1JFX01BUCBvcGNvZGUpCisjICAgICBQeXRob24gMi42YTE6IDYyMTYxIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKQorIyAgICAgUHl0aG9uIDIuN2EwOiA2MjE3MSAob3B0aW1pemUgbGlzdCBjb21wcmVoZW5zaW9ucy9jaGFuZ2UgTElTVF9BUFBFTkQpCisjICAgICBQeXRob24gMi43YTA6IDYyMTgxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKKyMgICAgIFB5dGhvbiAyLjdhMCAgNjIxOTEgKGludHJvZHVjZSBTRVRVUF9XSVRIKQorIyAgICAgUHl0aG9uIDIuN2EwICA2MjIwMSAoaW50cm9kdWNlIEJVSUxEX1NFVCkKKyMgICAgIFB5dGhvbiAyLjdhMCAgNjIyMTEgKGludHJvZHVjZSBNQVBfQUREIGFuZCBTRVRfQUREKQorIyAgICAgUHl0aG9uIDMwMDA6ICAgMzAwMAorIyAgICAgICAgICAgICAgICAgICAgMzAxMCAocmVtb3ZlZCBVTkFSWV9DT05WRVJUKQorIyAgICAgICAgICAgICAgICAgICAgMzAyMCAoYWRkZWQgQlVJTERfU0VUKQorIyAgICAgICAgICAgICAgICAgICAgMzAzMCAoYWRkZWQga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMpCisjICAgICAgICAgICAgICAgICAgICAzMDQwIChhZGRlZCBzaWduYXR1cmUgYW5ub3RhdGlvbnMpCisjICAgICAgICAgICAgICAgICAgICAzMDUwIChwcmludCBiZWNvbWVzIGEgZnVuY3Rpb24pCisjICAgICAgICAgICAgICAgICAgICAzMDYwIChQRVAgMzExNSBtZXRhY2xhc3Mgc3ludGF4KQorIyAgICAgICAgICAgICAgICAgICAgMzA2MSAoc3RyaW5nIGxpdGVyYWxzIGJlY29tZSB1bmljb2RlKQorIyAgICAgICAgICAgICAgICAgICAgMzA3MSAoUEVQIDMxMDkgcmFpc2UgY2hhbmdlcykKKyMgICAgICAgICAgICAgICAgICAgIDMwODEgKFBFUCAzMTM3IG1ha2UgX19maWxlX18gYW5kIF9fbmFtZV9fIHVuaWNvZGUpCisjICAgICAgICAgICAgICAgICAgICAzMDkxIChraWxsIHN0cjggaW50ZXJuaW5nKQorIyAgICAgICAgICAgICAgICAgICAgMzEwMSAobWVyZ2UgZnJvbSAyLjZhMCwgc2VlIDYyMTUxKQorIyAgICAgICAgICAgICAgICAgICAgMzEwMyAoX19maWxlX18gcG9pbnRzIHRvIHNvdXJjZSBmaWxlKQorIyAgICAgUHl0aG9uIDMuMGE0OiAzMTExIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKS4KKyMgICAgIFB5dGhvbiAzLjBhNTogMzEzMSAobGV4aWNhbCBleGNlcHRpb24gc3RhY2tpbmcsIGluY2x1ZGluZyBQT1BfRVhDRVBUKQorIyAgICAgUHl0aG9uIDMuMWEwOiAzMTQxIChvcHRpbWl6ZSBsaXN0LCBzZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnM6CisjICAgICAgICAgICAgIGNoYW5nZSBMSVNUX0FQUEVORCBhbmQgU0VUX0FERCwgYWRkIE1BUF9BREQpCisjICAgICBQeXRob24gMy4xYTA6IDMxNTEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgorIyAgICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCisjICAgICBQeXRob24gMy4yYTA6IDMxNjAgKGFkZCBTRVRVUF9XSVRIKQorIyAgICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKKyMgICAgIFB5dGhvbiAzLjJhMTogMzE3MCAoYWRkIERVUF9UT1BfVFdPLCByZW1vdmUgRFVQX1RPUFggYW5kIFJPVF9GT1VSKQorIyAgICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKKyMgICAgIFB5dGhvbiAzLjJhMiAgMzE4MCAoYWRkIERFTEVURV9ERVJFRikKKyMgICAgIFB5dGhvbiAzLjNhMCAgMzE5MCBfX2NsYXNzX18gc3VwZXIgY2xvc3VyZSBjaGFuZ2VkCisjICAgICBQeXRob24gMy4zYTAgIDMyMDAgKF9fcXVhbG5hbWVfXyBhZGRlZCkKKyMgICAgICAgICAgICAgICAgICAgICAgMzIxMCAoYWRkZWQgc2l6ZSBtb2R1bG8gMioqMzIgdG8gdGhlIHB5YyBoZWFkZXIpCisjICAgICBQeXRob24gMy4zYTEgIDMyMjAgKGNoYW5nZWQgUEVQIDM4MCBpbXBsZW1lbnRhdGlvbikKKyMgICAgIFB5dGhvbiAzLjNhNCAgMzIzMCAocmV2ZXJ0IGNoYW5nZXMgdG8gaW1wbGljaXQgX19jbGFzc19fIGNsb3N1cmUpCisjICAgICBQeXRob24gMy40YTEgIDMyNTAgKGV2YWx1YXRlIHBvc2l0aW9uYWwgZGVmYXVsdCBhcmd1bWVudHMgYmVmb3JlCisjICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZC1vbmx5IGRlZmF1bHRzKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjYwIChhZGQgTE9BRF9DTEFTU0RFUkVGOyBhbGxvdyBsb2NhbHMgb2YgY2xhc3MgdG8gb3ZlcnJpZGUKKyMgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIHZhcnMpCisjICAgICBQeXRob24gMy40YTEgIDMyNzAgKHZhcmlvdXMgdHdlYWtzIHRvIHRoZSBfX2NsYXNzX18gY2xvc3VyZSkKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI4MCAocmVtb3ZlIGltcGxpY2l0IGNsYXNzIGFyZ3VtZW50KQorIyAgICAgUHl0aG9uIDMuNGE0ICAzMjkwIChjaGFuZ2VzIHRvIF9fcXVhbG5hbWVfXyBjb21wdXRhdGlvbikKKyMgICAgIFB5dGhvbiAzLjRhNCAgMzMwMCAobW9yZSBjaGFuZ2VzIHRvIF9fcXVhbG5hbWVfXyBjb21wdXRhdGlvbikKKyMgICAgIFB5dGhvbiAzLjRyYzIgMzMxMCAoYWx0ZXIgX19xdWFsbmFtZV9fIGNvbXB1dGF0aW9uKQorIworIyBNQUdJQyBtdXN0IGNoYW5nZSB3aGVuZXZlciB0aGUgYnl0ZWNvZGUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgbWF5IG5vCisjIGxvbmdlciBiZSB1bmRlcnN0b29kIGJ5IG9sZGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXZhbCBsb29wICh1c3VhbGx5CisjIGR1ZSB0byB0aGUgYWRkaXRpb24gb2YgbmV3IG9wY29kZXMpLgogCi1UaGUgdmFsdWUgb2YgQ1IgYW5kIExGIGlzIGluY29ycG9yYXRlZCBzbyBpZiB5b3UgZXZlciByZWFkIG9yIHdyaXRlCi1hIC5weWMgZmlsZSBpbiB0ZXh0IG1vZGUgdGhlIG1hZ2ljIG51bWJlciB3aWxsIGJlIHdyb25nOyBhbHNvLCB0aGUKLUFwcGxlIE1QVyBjb21waWxlciBzd2FwcyB0aGVpciB2YWx1ZXMsIGJvdGNoaW5nIHN0cmluZyBjb25zdGFudHMuCi0KLVRoZSBtYWdpYyBudW1iZXJzIG11c3QgYmUgc3BhY2VkIGFwYXJ0IGF0IGxlYXN0IDIgdmFsdWVzLCBhcyB0aGUKLS1VIGludGVycGV0ZXIgZmxhZyB3aWxsIGNhdXNlIE1BR0lDKzEgYmVpbmcgdXNlZC4gVGhleSBoYXZlIGJlZW4KLW9kZCBudW1iZXJzIGZvciBzb21lIHRpbWUgbm93LgotCi1UaGVyZSB3ZXJlIGEgdmFyaWV0eSBvZiBvbGQgc2NoZW1lcyBmb3Igc2V0dGluZyB0aGUgbWFnaWMgbnVtYmVyLgotVGhlIGN1cnJlbnQgd29ya2luZyBzY2hlbWUgaXMgdG8gaW5jcmVtZW50IHRoZSBwcmV2aW91cyB2YWx1ZSBieQotMTAuCi0KLVN0YXJ0aW5nIHdpdGggdGhlIGFkb3B0aW9uIG9mIFBFUCAzMTQ3IGluIFB5dGhvbiAzLjIsIGV2ZXJ5IGJ1bXAgaW4gbWFnaWMKLW51bWJlciBhbHNvIGluY2x1ZGVzIGEgbmV3ICJtYWdpYyB0YWciLCBpLmUuIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHVzZWQKLXRvIHJlcHJlc2VudCB0aGUgbWFnaWMgbnVtYmVyIGluIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLiAgV2hlbiB5b3UgY2hhbmdlCi10aGUgbWFnaWMgbnVtYmVyLCB5b3UgbXVzdCBhbHNvIHNldCBhIG5ldyB1bmlxdWUgbWFnaWMgdGFnLiAgR2VuZXJhbGx5IHRoaXMKLWNhbiBiZSBuYW1lZCBhZnRlciB0aGUgUHl0aG9uIG1ham9yIHZlcnNpb24gb2YgdGhlIG1hZ2ljIG51bWJlciBidW1wLCBidXQKLWl0IGNhbiByZWFsbHkgYmUgYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBkaWZmZXJlbnQgdGhhbiBhbnl0aGluZyBlbHNlCi10aGF0J3MgY29tZSBiZWZvcmUuICBUaGUgdGFncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgc3RhcnRpbmcKLXdpdGggUHl0aG9uIDMuMmEwLgotCi1Lbm93biB2YWx1ZXM6Ci0gUHl0aG9uIDEuNTogICAyMDEyMQotIFB5dGhvbiAxLjUuMTogMjAxMjEKLSAgICBQeXRob24gMS41LjI6IDIwMTIxCi0gICAgUHl0aG9uIDEuNjogICA1MDQyOAotICAgIFB5dGhvbiAyLjA6ICAgNTA4MjMKLSAgICBQeXRob24gMi4wLjE6IDUwODIzCi0gICAgUHl0aG9uIDIuMTogICA2MDIwMgotICAgIFB5dGhvbiAyLjEuMTogNjAyMDIKLSAgICBQeXRob24gMi4xLjI6IDYwMjAyCi0gICAgUHl0aG9uIDIuMjogICA2MDcxNwotICAgIFB5dGhvbiAyLjNhMDogNjIwMTEKLSAgICBQeXRob24gMi4zYTA6IDYyMDIxCi0gICAgUHl0aG9uIDIuM2EwOiA2MjAxMSAoISkKLSAgICBQeXRob24gMi40YTA6IDYyMDQxCi0gICAgUHl0aG9uIDIuNGEzOiA2MjA1MQotICAgIFB5dGhvbiAyLjRiMTogNjIwNjEKLSAgICBQeXRob24gMi41YTA6IDYyMDcxCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA4MSAoYXN0LWJyYW5jaCkKLSAgICBQeXRob24gMi41YTA6IDYyMDkxICh3aXRoKQotICAgIFB5dGhvbiAyLjVhMDogNjIwOTIgKGNoYW5nZWQgV0lUSF9DTEVBTlVQIG9wY29kZSkKLSAgICBQeXRob24gMi41YjM6IDYyMTAxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLikKLSAgICBQeXRob24gMi41YjM6IDYyMTExIChmaXggd3JvbmcgY29kZTogeCArPSB5aWVsZCkKLSAgICBQeXRob24gMi41YzE6IDYyMTIxIChmaXggd3JvbmcgbG5vdGFiIHdpdGggZm9yIGxvb3BzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JpbmcgY29uc3RhbnRzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkKQotICAgIFB5dGhvbiAyLjVjMjogNjIxMzEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uIGluIGxpc3Rjb21wL2dlbmV4cCkKLSAgICBQeXRob24gMi42YTA6IDYyMTUxIChwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGFuZCBTVE9SRV9NQVAgb3Bjb2RlKQotICAgIFB5dGhvbiAyLjZhMTogNjIxNjEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pCi0gICAgUHl0aG9uIDMwMDA6ICAgMzAwMAotICAgICAgICAgICAgICAgICAgIDMwMTAgKHJlbW92ZWQgVU5BUllfQ09OVkVSVCkKLSAgICAgICAgICAgICAgICAgICAzMDIwIChhZGRlZCBCVUlMRF9TRVQpCi0gICAgICAgICAgICAgICAgICAgMzAzMCAoYWRkZWQga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMpCi0gICAgICAgICAgICAgICAgICAgMzA0MCAoYWRkZWQgc2lnbmF0dXJlIGFubm90YXRpb25zKQotICAgICAgICAgICAgICAgICAgIDMwNTAgKHByaW50IGJlY29tZXMgYSBmdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAzMDYwIChQRVAgMzExNSBtZXRhY2xhc3Mgc3ludGF4KQotICAgICAgICAgICAgICAgICAgIDMwNjEgKHN0cmluZyBsaXRlcmFscyBiZWNvbWUgdW5pY29kZSkKLSAgICAgICAgICAgICAgICAgICAzMDcxIChQRVAgMzEwOSByYWlzZSBjaGFuZ2VzKQotICAgICAgICAgICAgICAgICAgIDMwODEgKFBFUCAzMTM3IG1ha2UgX19maWxlX18gYW5kIF9fbmFtZV9fIHVuaWNvZGUpCi0gICAgICAgICAgICAgICAgICAgMzA5MSAoa2lsbCBzdHI4IGludGVybmluZykKLSAgICAgICAgICAgICAgICAgICAzMTAxIChtZXJnZSBmcm9tIDIuNmEwLCBzZWUgNjIxNTEpCi0gICAgICAgICAgICAgICAgICAgMzEwMyAoX19maWxlX18gcG9pbnRzIHRvIHNvdXJjZSBmaWxlKQotICAgIFB5dGhvbiAzLjBhNDogMzExMSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikuCi0gICAgUHl0aG9uIDMuMGE1OiAzMTMxIChsZXhpY2FsIGV4Y2VwdGlvbiBzdGFja2luZywgaW5jbHVkaW5nIFBPUF9FWENFUFQpCi0gICAgUHl0aG9uIDMuMWEwOiAzMTQxIChvcHRpbWl6ZSBsaXN0LCBzZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnM6Ci0gICAgICAgICAgICBjaGFuZ2UgTElTVF9BUFBFTkQgYW5kIFNFVF9BREQsIGFkZCBNQVBfQUREKQotICAgIFB5dGhvbiAzLjFhMDogMzE1MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6Ci0gICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCi0gICAgUHl0aG9uIDMuMmEwOiAzMTYwIChhZGQgU0VUVVBfV0lUSCkKLSAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgotICAgIFB5dGhvbiAzLjJhMTogMzE3MCAoYWRkIERVUF9UT1BfVFdPLCByZW1vdmUgRFVQX1RPUFggYW5kIFJPVF9GT1VSKQotICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCi0gICAgUHl0aG9uIDMuMmEyICAzMTgwIChhZGQgREVMRVRFX0RFUkVGKQotICAgIFB5dGhvbiAzLjNhMCAgMzE5MCBfX2NsYXNzX18gc3VwZXIgY2xvc3VyZSBjaGFuZ2VkCi0gICAgUHl0aG9uIDMuM2EwICAzMjAwIChfX3F1YWxuYW1lX18gYWRkZWQpCi0gICAgICAgICAgICAgICAgICAgICAzMjEwIChhZGRlZCBzaXplIG1vZHVsbyAyKiozMiB0byB0aGUgcHljIGhlYWRlcikKLSAgICBQeXRob24gMy4zYTEgIDMyMjAgKGNoYW5nZWQgUEVQIDM4MCBpbXBsZW1lbnRhdGlvbikKLSAgICBQeXRob24gMy4zYTQgIDMyMzAgKHJldmVydCBjaGFuZ2VzIHRvIGltcGxpY2l0IF9fY2xhc3NfXyBjbG9zdXJlKQotCi1NQUdJQyBtdXN0IGNoYW5nZSB3aGVuZXZlciB0aGUgYnl0ZWNvZGUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgbWF5IG5vCi1sb25nZXIgYmUgdW5kZXJzdG9vZCBieSBvbGRlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGV2YWwgbG9vcCAodXN1YWxseQotZHVlIHRvIHRoZSBhZGRpdGlvbiBvZiBuZXcgb3Bjb2RlcykuCi0KLSIiIgotX1JBV19NQUdJQ19OVU1CRVIgPSAzMjMwIHwgb3JkKCdccicpIDw8IDE2IHwgb3JkKCdcbicpIDw8IDI0Ci1fTUFHSUNfQllURVMgPSBieXRlcyhfUkFXX01BR0lDX05VTUJFUiA+PiBuICYgMHhmZiBmb3IgbiBpbiByYW5nZSgwLCAyNSwgOCkpCitNQUdJQ19OVU1CRVIgPSAoMzMxMCkudG9fYnl0ZXMoMiwgJ2xpdHRsZScpICsgYidcclxuJworX1JBV19NQUdJQ19OVU1CRVIgPSBpbnQuZnJvbV9ieXRlcyhNQUdJQ19OVU1CRVIsICdsaXR0bGUnKSAgIyBGb3IgaW1wb3J0LmMKIAogX1BZQ0FDSEUgPSAnX19weWNhY2hlX18nCiAKQEAgLTQ4MSw2ICs1MDMsMTggQEAKICAgICByZXR1cm4gc291cmNlX3BhdGggaWYgX3BhdGhfaXNmaWxlKHNvdXJjZV9wYXRoKSBlbHNlIGJ5dGVjb2RlX3BhdGgKIAogCitkZWYgX2NhbGNfbW9kZShwYXRoKToKKyAgICAiIiJDYWxjdWxhdGUgdGhlIG1vZGUgcGVybWlzc2lvbnMgZm9yIGEgYnl0ZWNvZGUgZmlsZS4iIiIKKyAgICB0cnk6CisgICAgICAgIG1vZGUgPSBfcGF0aF9zdGF0KHBhdGgpLnN0X21vZGUKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgbW9kZSA9IDBvNjY2CisgICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcworICAgICMgbGF0ZXIgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZXMgYXJlIHJlYWQtb25seSBvbiBXaW5kb3dzICgjNjA3NCkKKyAgICBtb2RlIHw9IDBvMjAwCisgICAgcmV0dXJuIG1vZGUKKworCiBkZWYgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlLCAqYXJncywgdmVyYm9zaXR5PTEpOgogICAgICIiIlByaW50IHRoZSBtZXNzYWdlIHRvIHN0ZGVyciBpZiAtdi9QWVRIT05WRVJCT1NFIGlzIHR1cm5lZCBvbi4iIiIKICAgICBpZiBzeXMuZmxhZ3MudmVyYm9zZSA+PSB2ZXJib3NpdHk6CkBAIC00ODksODUgKzUyMyw2IEBACiAgICAgICAgIHByaW50KG1lc3NhZ2UuZm9ybWF0KCphcmdzKSwgZmlsZT1zeXMuc3RkZXJyKQogCiAKLWRlZiBzZXRfcGFja2FnZShmeG4pOgotICAgICIiIlNldCBfX3BhY2thZ2VfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiIiIgotICAgIGRlZiBzZXRfcGFja2FnZV93cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG1vZHVsZSA9IGZ4bigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgotICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgcmV0dXJuIG1vZHVsZQotICAgIF93cmFwKHNldF9wYWNrYWdlX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gc2V0X3BhY2thZ2Vfd3JhcHBlcgotCi0KLWRlZiBzZXRfbG9hZGVyKGZ4bik6Ci0gICAgIiIiU2V0IF9fbG9hZGVyX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4iIiIKLSAgICBkZWYgc2V0X2xvYWRlcl93cmFwcGVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG1vZHVsZSA9IGZ4bihzZWxmLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKToKLSAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICByZXR1cm4gbW9kdWxlCi0gICAgX3dyYXAoc2V0X2xvYWRlcl93cmFwcGVyLCBmeG4pCi0gICAgcmV0dXJuIHNldF9sb2FkZXJfd3JhcHBlcgotCi0KLWRlZiBtb2R1bGVfZm9yX2xvYWRlcihmeG4pOgotICAgICIiIkRlY29yYXRvciB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIgbW9kdWxlIGZvciBsb2FkZXJzLgotCi0gICAgVGhlIGRlY29yYXRlZCBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIG1vZHVsZSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgbW9kdWxlCi0gICAgbmFtZS4gVGhlIG1vZHVsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uIGlzIGVpdGhlciBmcm9tIHN5cy5tb2R1bGVzIGlmCi0gICAgaXQgYWxyZWFkeSBleGlzdHMgb3IgaXMgYSBuZXcgbW9kdWxlLiBJZiB0aGUgbW9kdWxlIGlzIG5ldywgdGhlbiBfX25hbWVfXwotICAgIGlzIHNldCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIG1ldGhvZCwgX19sb2FkZXJfXyBpcyBzZXQgdG8gc2VsZiwgYW5kCi0gICAgX19wYWNrYWdlX18gaXMgc2V0IGFjY29yZGluZ2x5IChpZiBzZWxmLmlzX3BhY2thZ2UoKSBpcyBkZWZpbmVkKSB3aWxsIGJlIHNldAotICAgIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gdGhlIGRlY29yYXRlZCBmdW5jdGlvbiAoaWYgc2VsZi5pc19wYWNrYWdlKCkgZG9lcwotICAgIG5vdCB3b3JrIGZvciB0aGUgbW9kdWxlIGl0IHdpbGwgYmUgc2V0IHBvc3QtbG9hZCkuCi0KLSAgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGFuZCB0aGUgZGVjb3JhdG9yIGNyZWF0ZWQgdGhlIG1vZHVsZSBpdCBpcwotICAgIHN1YnNlcXVlbnRseSByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMuCi0KLSAgICBUaGUgZGVjb3JhdG9yIGFzc3VtZXMgdGhhdCB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIHRha2VzIHRoZSBtb2R1bGUgbmFtZSBhcwotICAgIHRoZSBzZWNvbmQgYXJndW1lbnQuCi0KLSAgICAiIiIKLSAgICBkZWYgbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcihzZWxmLCBmdWxsbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXMuZ2V0KGZ1bGxuYW1lKQotICAgICAgICBpc19yZWxvYWQgPSBtb2R1bGUgaXMgbm90IE5vbmUKLSAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKLSAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBjYWxsZWQgYXMgdGhlICdpbycgbW9kdWxlCi0gICAgICAgICAgICAjIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlIHRyaWdnZXIgYW4KLSAgICAgICAgICAgICMgaW5maW5pdGUgbG9vcC4KLSAgICAgICAgICAgIG1vZHVsZSA9IG5ld19tb2R1bGUoZnVsbG5hbWUpCi0gICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBwdXR0aW5nIHRoZSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgICAgICMgKG90aGVyd2lzZSBhbiBvcHRpbWl6YXRpb24gc2hvcnRjdXQgaW4gaW1wb3J0LmMgYmVjb21lcyB3cm9uZykKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQotICAgICAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIElmIF9fcGFja2FnZV9fIHdhcyBub3Qgc2V0IGFib3ZlLCBfX2ltcG9ydF9fKCkgd2lsbCBkbyBpdCBsYXRlci4KLSAgICAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgbW9kdWxlLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQ6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gRmFsc2UKLSAgICBfd3JhcChtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyLCBmeG4pCi0gICAgcmV0dXJuIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIKLQotCiBkZWYgX2NoZWNrX25hbWUobWV0aG9kKToKICAgICAiIiJEZWNvcmF0b3IgdG8gdmVyaWZ5IHRoYXQgdGhlIG1vZHVsZSBiZWluZyByZXF1ZXN0ZWQgbWF0Y2hlcyB0aGUgb25lIHRoZQogICAgIGxvYWRlciBjYW4gaGFuZGxlLgpAQCAtNTgwLDcgKzUzNSw3IEBACiAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKICAgICAgICAgZWxpZiBzZWxmLm5hbWUgIT0gbmFtZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJsb2FkZXIgY2Fubm90IGhhbmRsZSAlcyIgJSBuYW1lLCBuYW1lPW5hbWUpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbG9hZGVyIGNhbm5vdCBoYW5kbGUgJXMnICUgbmFtZSwgbmFtZT1uYW1lKQogICAgICAgICByZXR1cm4gbWV0aG9kKHNlbGYsIG5hbWUsICphcmdzLCAqKmt3YXJncykKICAgICBfd3JhcChfY2hlY2tfbmFtZV93cmFwcGVyLCBtZXRob2QpCiAgICAgcmV0dXJuIF9jaGVja19uYW1lX3dyYXBwZXIKQEAgLTU5MCw3ICs1NDUsNyBAQAogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhlIG5hbWVkIG1vZHVsZSBpcyBidWlsdC1pbi4iIiIKICAgICBkZWYgX3JlcXVpcmVzX2J1aWx0aW5fd3JhcHBlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigie30gaXMgbm90IGEgYnVpbHQtaW4gbW9kdWxlIi5mb3JtYXQoZnVsbG5hbWUpLAorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3shcn0gaXMgbm90IGEgYnVpbHQtaW4gbW9kdWxlJy5mb3JtYXQoZnVsbG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBmdWxsbmFtZSkKICAgICBfd3JhcChfcmVxdWlyZXNfYnVpbHRpbl93cmFwcGVyLCBmeG4pCkBAIC02MDEsNyArNTU2LDcgQEAKICAgICAiIiJEZWNvcmF0b3IgdG8gdmVyaWZ5IHRoZSBuYW1lZCBtb2R1bGUgaXMgZnJvemVuLiIiIgogICAgIGRlZiBfcmVxdWlyZXNfZnJvemVuX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBpZiBub3QgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoInt9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUiLmZvcm1hdChmdWxsbmFtZSksCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBmcm96ZW4gbW9kdWxlJy5mb3JtYXQoZnVsbG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBmdWxsbmFtZSkKICAgICBfd3JhcChfcmVxdWlyZXNfZnJvemVuX3dyYXBwZXIsIGZ4bikKQEAgLTYxMCwxNyArNTY1LDY4MiBAQAogCiBkZWYgX2ZpbmRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpOgogICAgICIiIlRyeSB0byBmaW5kIGEgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSBieSBkZWxlZ2F0aW5nIHRvCi0gICAgc2VsZi5maW5kX2xvYWRlcigpLiIiIgorICAgIHNlbGYuZmluZF9sb2FkZXIoKS4KKworICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgZmluZGVyLmZpbmRfc3BlYygpLgorCisgICAgIiIiCiAgICAgIyBDYWxsIGZpbmRfbG9hZGVyKCkuIElmIGl0IHJldHVybnMgYSBzdHJpbmcgKGluZGljYXRpbmcgdGhpcwogICAgICMgaXMgYSBuYW1lc3BhY2UgcGFja2FnZSBwb3J0aW9uKSwgZ2VuZXJhdGUgYSB3YXJuaW5nIGFuZAogICAgICMgcmV0dXJuIE5vbmUuCiAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IHNlbGYuZmluZF9sb2FkZXIoZnVsbG5hbWUpCiAgICAgaWYgbG9hZGVyIGlzIE5vbmUgYW5kIGxlbihwb3J0aW9ucyk6Ci0gICAgICAgIG1zZyA9ICJOb3QgaW1wb3J0aW5nIGRpcmVjdG9yeSB7fTogbWlzc2luZyBfX2luaXRfXyIKKyAgICAgICAgbXNnID0gJ05vdCBpbXBvcnRpbmcgZGlyZWN0b3J5IHt9OiBtaXNzaW5nIF9faW5pdF9fJwogICAgICAgICBfd2FybmluZ3Mud2Fybihtc2cuZm9ybWF0KHBvcnRpb25zWzBdKSwgSW1wb3J0V2FybmluZykKICAgICByZXR1cm4gbG9hZGVyCiAKIAorZGVmIF9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAiIiJMb2FkIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGludG8gc3lzLm1vZHVsZXMgYW5kIHJldHVybiBpdC4KKworICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgbG9hZGVyLmV4ZWNfbW9kdWxlIGluc3RlYWQuCisKKyAgICAiIiIKKyAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgc2VsZikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICBtZXRob2RzLmV4ZWMobW9kdWxlKQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG1ldGhvZHMubG9hZCgpCisKKworZGVmIF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwgc291cmNlX3N0YXRzPU5vbmUsIG5hbWU9Tm9uZSwgcGF0aD1Ob25lKToKKyAgICAiIiJWYWxpZGF0ZSB0aGUgaGVhZGVyIG9mIHRoZSBwYXNzZWQtaW4gYnl0ZWNvZGUgYWdhaW5zdCBzb3VyY2Vfc3RhdHMgKGlmCisgICAgZ2l2ZW4pIGFuZCByZXR1cm5pbmcgdGhlIGJ5dGVjb2RlIHRoYXQgY2FuIGJlIGNvbXBpbGVkIGJ5IGNvbXBpbGUoKS4KKworICAgIEFsbCBvdGhlciBhcmd1bWVudHMgYXJlIHVzZWQgdG8gZW5oYW5jZSBlcnJvciByZXBvcnRpbmcuCisKKyAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgbWFnaWMgbnVtYmVyIGlzIGluY29ycmVjdCBvciB0aGUgYnl0ZWNvZGUgaXMKKyAgICBmb3VuZCB0byBiZSBzdGFsZS4gRU9GRXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlIGRhdGEgaXMgZm91bmQgdG8gYmUKKyAgICB0cnVuY2F0ZWQuCisKKyAgICAiIiIKKyAgICBleGNfZGV0YWlscyA9IHt9CisgICAgaWYgbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgZXhjX2RldGFpbHNbJ25hbWUnXSA9IG5hbWUKKyAgICBlbHNlOgorICAgICAgICAjIFRvIHByZXZlbnQgaGF2aW5nIHRvIG1ha2UgYWxsIG1lc3NhZ2VzIGhhdmUgYSBjb25kaXRpb25hbCBuYW1lLgorICAgICAgICBuYW1lID0gJzxieXRlY29kZT4nCisgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgZXhjX2RldGFpbHNbJ3BhdGgnXSA9IHBhdGgKKyAgICBtYWdpYyA9IGRhdGFbOjRdCisgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQorICAgIHJhd19zaXplID0gZGF0YVs4OjEyXQorICAgIGlmIG1hZ2ljICE9IE1BR0lDX05VTUJFUjoKKyAgICAgICAgbWVzc2FnZSA9ICdiYWQgbWFnaWMgbnVtYmVyIGluIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBtYWdpYykKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCAqKmV4Y19kZXRhaWxzKQorICAgIGVsaWYgbGVuKHJhd190aW1lc3RhbXApICE9IDQ6CisgICAgICAgIG1lc3NhZ2UgPSAncmVhY2hlZCBFT0Ygd2hpbGUgcmVhZGluZyB0aW1lc3RhbXAgaW4geyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKKyAgICBlbGlmIGxlbihyYXdfc2l6ZSkgIT0gNDoKKyAgICAgICAgbWVzc2FnZSA9ICdyZWFjaGVkIEVPRiB3aGlsZSByZWFkaW5nIHNpemUgb2Ygc291cmNlIGluIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCisgICAgaWYgc291cmNlX3N0YXRzIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc291cmNlX3N0YXRzWydtdGltZSddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBfcl9sb25nKHJhd190aW1lc3RhbXApICE9IHNvdXJjZV9tdGltZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ2J5dGVjb2RlIGlzIHN0YWxlIGZvciB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgKipleGNfZGV0YWlscykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc291cmNlX3NpemUgPSBzb3VyY2Vfc3RhdHNbJ3NpemUnXSAmIDB4RkZGRkZGRkYKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfc2l6ZSkgIT0gc291cmNlX3NpemU6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2J5dGVjb2RlIGlzIHN0YWxlIGZvciB7IXJ9Jy5mb3JtYXQobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipleGNfZGV0YWlscykKKyAgICByZXR1cm4gZGF0YVsxMjpdCisKKworZGVmIF9jb21waWxlX2J5dGVjb2RlKGRhdGEsIG5hbWU9Tm9uZSwgYnl0ZWNvZGVfcGF0aD1Ob25lLCBzb3VyY2VfcGF0aD1Ob25lKToKKyAgICAiIiJDb21waWxlIGJ5dGVjb2RlIGFzIHJldHVybmVkIGJ5IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoKS4iIiIKKyAgICBjb2RlID0gbWFyc2hhbC5sb2FkcyhkYXRhKQorICAgIGlmIGlzaW5zdGFuY2UoY29kZSwgX2NvZGVfdHlwZSk6CisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20geyFyfScsIGJ5dGVjb2RlX3BhdGgpCisgICAgICAgIGlmIHNvdXJjZV9wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2ltcC5fZml4X2NvX2ZpbGVuYW1lKGNvZGUsIHNvdXJjZV9wYXRoKQorICAgICAgICByZXR1cm4gY29kZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdOb24tY29kZSBvYmplY3QgaW4geyFyfScuZm9ybWF0KGJ5dGVjb2RlX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKKworZGVmIF9jb2RlX3RvX2J5dGVjb2RlKGNvZGUsIG10aW1lPTAsIHNvdXJjZV9zaXplPTApOgorICAgICIiIkNvbXBpbGUgYSBjb2RlIG9iamVjdCBpbnRvIGJ5dGVjb2RlIGZvciB3cml0aW5nIG91dCB0byBhIGJ5dGUtY29tcGlsZWQKKyAgICBmaWxlLiIiIgorICAgIGRhdGEgPSBieXRlYXJyYXkoTUFHSUNfTlVNQkVSKQorICAgIGRhdGEuZXh0ZW5kKF93X2xvbmcobXRpbWUpKQorICAgIGRhdGEuZXh0ZW5kKF93X2xvbmcoc291cmNlX3NpemUpKQorICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZSkpCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpOgorICAgICIiIkRlY29kZSBieXRlcyByZXByZXNlbnRpbmcgc291cmNlIGNvZGUgYW5kIHJldHVybiB0aGUgc3RyaW5nLgorCisgICAgVW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCBpcyB1c2VkIGluIHRoZSBkZWNvZGluZy4KKyAgICAiIiIKKyAgICBpbXBvcnQgdG9rZW5pemUgICMgVG8gYXZvaWQgYm9vdHN0cmFwIGlzc3Vlcy4KKyAgICBzb3VyY2VfYnl0ZXNfcmVhZGxpbmUgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCisgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2Rpbmcoc291cmNlX2J5dGVzX3JlYWRsaW5lKQorICAgIG5ld2xpbmVfZGVjb2RlciA9IF9pby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpCisgICAgcmV0dXJuIG5ld2xpbmVfZGVjb2Rlci5kZWNvZGUoc291cmNlX2J5dGVzLmRlY29kZShlbmNvZGluZ1swXSkpCisKKworIyBNb2R1bGUgc3BlY2lmaWNhdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgX21vZHVsZV9yZXByKG1vZHVsZSk6CisgICAgIyBUaGUgaW1wbGVtZW50YXRpb24gb2YgTW9kdWxlVHlwZV9fcmVwcl9fKCkuCisgICAgbG9hZGVyID0gZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkKKyAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ21vZHVsZV9yZXByJyk6CisgICAgICAgICMgQXMgc29vbiBhcyBCdWlsdGluSW1wb3J0ZXIsIEZyb3plbkltcG9ydGVyLCBhbmQgTmFtZXNwYWNlTG9hZGVyCisgICAgICAgICMgZHJvcCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgZm9yIG1vZHVsZV9yZXByLiB3ZSBjYW4gYWRkIGEKKyAgICAgICAgIyBkZXByZWNhdGlvbiB3YXJuaW5nIGhlcmUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBsb2FkZXIubW9kdWxlX3JlcHIobW9kdWxlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgIHRyeToKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gX1NwZWNNZXRob2RzKHNwZWMpLm1vZHVsZV9yZXByKCkKKworICAgICMgV2UgY291bGQgdXNlIG1vZHVsZS5fX2NsYXNzX18uX19uYW1lX18gaW5zdGVhZCBvZiAnbW9kdWxlJyBpbiB0aGUKKyAgICAjIHZhcmlvdXMgcmVwciBwZXJtdXRhdGlvbnMuCisgICAgdHJ5OgorICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBuYW1lID0gJz8nCisgICAgdHJ5OgorICAgICAgICBmaWxlbmFtZSA9IG1vZHVsZS5fX2ZpbGVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfT4nLmZvcm1hdChuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHshcn0pPicuZm9ybWF0KG5hbWUsIGxvYWRlcikKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQobmFtZSwgZmlsZW5hbWUpCisKKworY2xhc3MgX2luc3RhbGxlZF9zYWZlbHk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kdWxlKToKKyAgICAgICAgc2VsZi5fbW9kdWxlID0gbW9kdWxlCisgICAgICAgIHNlbGYuX3NwZWMgPSBtb2R1bGUuX19zcGVjX18KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcworICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMKKyAgICAgICAgIyB3cm9uZykKKyAgICAgICAgc2VsZi5fc3BlYy5faW5pdGlhbGl6aW5nID0gVHJ1ZQorICAgICAgICBzeXMubW9kdWxlc1tzZWxmLl9zcGVjLm5hbWVdID0gc2VsZi5fbW9kdWxlCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5fc3BlYworICAgICAgICAgICAgaWYgYW55KGFyZyBpcyBub3QgTm9uZSBmb3IgYXJnIGluIGFyZ3MpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnaW1wb3J0IHshcn0gIyB7IXJ9Jywgc3BlYy5uYW1lLCBzcGVjLmxvYWRlcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3NwZWMuX2luaXRpYWxpemluZyA9IEZhbHNlCisKKworY2xhc3MgTW9kdWxlU3BlYzoKKyAgICAiIiJUaGUgc3BlY2lmaWNhdGlvbiBmb3IgYSBtb2R1bGUsIHVzZWQgZm9yIGxvYWRpbmcuCisKKyAgICBBIG1vZHVsZSdzIHNwZWMgaXMgdGhlIHNvdXJjZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZHVsZS4gIEZvcgorICAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2R1bGUsIGluY2x1ZGluZyBzb3VyY2UsIHVzZSB0aGUgc3BlYydzCisgICAgbG9hZGVyLgorCisgICAgYG5hbWVgIGlzIHRoZSBhYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUuICBgbG9hZGVyYCBpcyB0aGUgbG9hZGVyCisgICAgdG8gdXNlIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgYHBhcmVudGAgaXMgdGhlIG5hbWUgb2YgdGhlCisgICAgcGFja2FnZSB0aGUgbW9kdWxlIGlzIGluLiAgVGhlIHBhcmVudCBpcyBkZXJpdmVkIGZyb20gdGhlIG5hbWUuCisKKyAgICBgaXNfcGFja2FnZWAgZGV0ZXJtaW5lcyBpZiB0aGUgbW9kdWxlIGlzIGNvbnNpZGVyZWQgYSBwYWNrYWdlIG9yCisgICAgbm90LiAgT24gbW9kdWxlcyB0aGlzIGlzIHJlZmxlY3RlZCBieSB0aGUgYF9fcGF0aF9fYCBhdHRyaWJ1dGUuCisKKyAgICBgb3JpZ2luYCBpcyB0aGUgc3BlY2lmaWMgbG9jYXRpb24gdXNlZCBieSB0aGUgbG9hZGVyIGZyb20gd2hpY2ggdG8KKyAgICBsb2FkIHRoZSBtb2R1bGUsIGlmIHRoYXQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiAgV2hlbiBmaWxlbmFtZSBpcworICAgIHNldCwgb3JpZ2luIHdpbGwgbWF0Y2guCisKKyAgICBgaGFzX2xvY2F0aW9uYCBpbmRpY2F0ZXMgdGhhdCBhIHNwZWMncyAib3JpZ2luIiByZWZsZWN0cyBhIGxvY2F0aW9uLgorICAgIFdoZW4gdGhpcyBpcyBUcnVlLCBgX19maWxlX19gIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlIGlzIHNldC4KKworICAgIGBjYWNoZWRgIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FjaGVkIGJ5dGVjb2RlIGZpbGUsIGlmIGFueS4gIEl0CisgICAgY29ycmVzcG9uZHMgdG8gdGhlIGBfX2NhY2hlZF9fYCBhdHRyaWJ1dGUuCisKKyAgICBgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnNgIGlzIHRoZSBzZXF1ZW5jZSBvZiBwYXRoIGVudHJpZXMgdG8KKyAgICBzZWFyY2ggd2hlbiBpbXBvcnRpbmcgc3VibW9kdWxlcy4gIElmIHNldCwgaXNfcGFja2FnZSBzaG91bGQgYmUKKyAgICBUcnVlLS1hbmQgRmFsc2Ugb3RoZXJ3aXNlLgorCisgICAgUGFja2FnZXMgYXJlIHNpbXBseSBtb2R1bGVzIHRoYXQgKG1heSkgaGF2ZSBzdWJtb2R1bGVzLiAgSWYgYSBzcGVjCisgICAgaGFzIGEgbm9uLU5vbmUgdmFsdWUgaW4gYHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zYCwgdGhlIGltcG9ydAorICAgIHN5c3RlbSB3aWxsIGNvbnNpZGVyIG1vZHVsZXMgbG9hZGVkIGZyb20gdGhlIHNwZWMgYXMgcGFja2FnZXMuCisKKyAgICBPbmx5IGZpbmRlcnMgKHNlZSBpbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyIGFuZAorICAgIGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyKSBzaG91bGQgbW9kaWZ5IE1vZHVsZVNwZWMgaW5zdGFuY2VzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgbG9hZGVyX3N0YXRlPU5vbmUsCisgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKKyAgICAgICAgc2VsZi5vcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgc2VsZi5sb2FkZXJfc3RhdGUgPSBsb2FkZXJfc3RhdGUKKyAgICAgICAgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtdIGlmIGlzX3BhY2thZ2UgZWxzZSBOb25lCisKKyAgICAgICAgIyBmaWxlLWxvY2F0aW9uIGF0dHJpYnV0ZXMKKyAgICAgICAgc2VsZi5fc2V0X2ZpbGVhdHRyID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY2FjaGVkID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBhcmdzID0gWyduYW1lPXshcn0nLmZvcm1hdChzZWxmLm5hbWUpLAorICAgICAgICAgICAgICAgICdsb2FkZXI9eyFyfScuZm9ybWF0KHNlbGYubG9hZGVyKV0KKyAgICAgICAgaWYgc2VsZi5vcmlnaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnb3JpZ2luPXshcn0nLmZvcm1hdChzZWxmLm9yaWdpbikpCisgICAgICAgIGlmIHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9e30nCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMpKQorICAgICAgICByZXR1cm4gJ3t9KHt9KScuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnLCAnLmpvaW4oYXJncykpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc21zbCA9IHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkZXIgPT0gb3RoZXIubG9hZGVyIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLm9yaWdpbiA9PSBvdGhlci5vcmlnaW4gYW5kCisgICAgICAgICAgICAgICAgICAgIHNtc2wgPT0gb3RoZXIuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVkID09IG90aGVyLmNhY2hlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYXNfbG9jYXRpb24gPT0gb3RoZXIuaGFzX2xvY2F0aW9uKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjYWNoZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2NhY2hlZCBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5vcmlnaW4gaXMgbm90IE5vbmUgYW5kIHNlbGYuX3NldF9maWxlYXR0cjoKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYub3JpZ2luCisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoU09VUkNFX1NVRkZJWEVTKSk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZCA9IGNhY2hlX2Zyb21fc291cmNlKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbGlmIGZpbGVuYW1lLmVuZHN3aXRoKHR1cGxlKEJZVEVDT0RFX1NVRkZJWEVTKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZCA9IGZpbGVuYW1lCisgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWQKKworICAgIEBjYWNoZWQuc2V0dGVyCisgICAgZGVmIGNhY2hlZChzZWxmLCBjYWNoZWQpOgorICAgICAgICBzZWxmLl9jYWNoZWQgPSBjYWNoZWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnQoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSBtb2R1bGUncyBwYXJlbnQuIiIiCisgICAgICAgIGlmIHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGFzX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2V0X2ZpbGVhdHRyCisKKyAgICBAaGFzX2xvY2F0aW9uLnNldHRlcgorICAgIGRlZiBoYXNfbG9jYXRpb24oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9zZXRfZmlsZWF0dHIgPSBib29sKHZhbHVlKQorCisKK2RlZiBzcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHNwZWMgYmFzZWQgb24gdmFyaW91cyBsb2FkZXIgbWV0aG9kcy4iIiIKKyAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2dldF9maWxlbmFtZScpOgorICAgICAgICBpZiBpc19wYWNrYWdlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICAgICAgc2VhcmNoID0gW10gaWYgaXNfcGFja2FnZSBlbHNlIE5vbmUKKyAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvYWRlcj1sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1zZWFyY2gpCisKKyAgICBpZiBpc19wYWNrYWdlIGlzIE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnaXNfcGFja2FnZScpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBsb2FkZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBOb25lICAjIGFrYSwgdW5kZWZpbmVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBpc19wYWNrYWdlID0gRmFsc2UKKworICAgIHJldHVybiBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgb3JpZ2luPW9yaWdpbiwgaXNfcGFja2FnZT1pc19wYWNrYWdlKQorCisKK19QT1BVTEFURSA9IG9iamVjdCgpCisKKworZGVmIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvY2F0aW9uPU5vbmUsICosIGxvYWRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPV9QT1BVTEFURSk6CisgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHNwZWMgYmFzZWQgb24gYSBmaWxlIGxvY2F0aW9uLgorCisgICAgVG8gaW5kaWNhdGUgdGhhdCB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgc2V0CisgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgdG8gYSBsaXN0IG9mIGRpcmVjdG9yeSBwYXRocy4gIEFuCisgICAgZW1wdHkgbGlzdCBpcyBzdWZmaWNpZW50LCB0aG91Z2ggaXRzIG5vdCBvdGhlcndpc2UgdXNlZnVsIHRvIHRoZQorICAgIGltcG9ydCBzeXN0ZW0uCisKKyAgICBUaGUgbG9hZGVyIG11c3QgdGFrZSBhIHNwZWMgYXMgaXRzIG9ubHkgX19pbml0X18oKSBhcmcuCisKKyAgICAiIiIKKyAgICBpZiBsb2NhdGlvbiBpcyBOb25lOgorICAgICAgICAjIFRoZSBjYWxsZXIgbWF5IHNpbXBseSB3YW50IGEgcGFydGlhbGx5IHBvcHVsYXRlZCBsb2NhdGlvbi0KKyAgICAgICAgIyBvcmllbnRlZCBzcGVjLiAgU28gd2Ugc2V0IHRoZSBsb2NhdGlvbiB0byBhIGJvZ3VzIHZhbHVlIGFuZAorICAgICAgICAjIGZpbGwgaW4gYXMgbXVjaCBhcyB3ZSBjYW4uCisgICAgICAgIGxvY2F0aW9uID0gJzx1bmtub3duPicKKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdnZXRfZmlsZW5hbWUnKToKKyAgICAgICAgICAgICMgRXhlY3V0aW9uTG9hZGVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBsb2FkZXIuZ2V0X2ZpbGVuYW1lKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBJZiB0aGUgbG9jYXRpb24gaXMgb24gdGhlIGZpbGVzeXN0ZW0sIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LAorICAgICMgd2UgY291bGQgcmV0dXJuIE5vbmUgaGVyZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBsb2NhdGlvbiBpcyBub3QKKyAgICAjIHZhbGlkLiAgSG93ZXZlciwgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IG9mIHRlc3Rpbmcgc2luY2UgYW4KKyAgICAjIGluZGlyZWN0IGxvY2F0aW9uIChlLmcuIGEgemlwIGZpbGUgb3IgVVJMKSB3aWxsIGxvb2sgbGlrZSBhCisgICAgIyBub24tZXhpc3RlbnQgZmlsZSByZWxhdGl2ZSB0byB0aGUgZmlsZXN5c3RlbS4KKworICAgIHNwZWMgPSBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgb3JpZ2luPWxvY2F0aW9uKQorICAgIHNwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKworICAgICMgUGljayBhIGxvYWRlciBpZiBvbmUgd2Fzbid0IHByb3ZpZGVkLgorICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICBmb3IgbG9hZGVyX2NsYXNzLCBzdWZmaXhlcyBpbiBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKToKKyAgICAgICAgICAgIGlmIGxvY2F0aW9uLmVuZHN3aXRoKHR1cGxlKHN1ZmZpeGVzKSk6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NsYXNzKG5hbWUsIGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIHNwZWMubG9hZGVyID0gbG9hZGVyCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIFNldCBzdWJtb2R1bGVfc2VhcmNoX3BhdGhzIGFwcHJvcHJpYXRlbHkuCisgICAgaWYgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgX1BPUFVMQVRFOgorICAgICAgICAjIENoZWNrIHRoZSBsb2FkZXIuCisgICAgICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnaXNfcGFja2FnZScpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBsb2FkZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtdCisgICAgZWxzZToKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9PSBbXToKKyAgICAgICAgaWYgbG9jYXRpb246CisgICAgICAgICAgICBkaXJuYW1lID0gX3BhdGhfc3BsaXQobG9jYXRpb24pWzBdCisgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLmFwcGVuZChkaXJuYW1lKQorCisgICAgcmV0dXJuIHNwZWMKKworCitkZWYgX3NwZWNfZnJvbV9tb2R1bGUobW9kdWxlLCBsb2FkZXI9Tm9uZSwgb3JpZ2luPU5vbmUpOgorICAgICMgVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgdXNlIGluIF9zZXR1cCgpLgorICAgIHRyeToKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIGxvYWRlciB3aWxsIHN0YXkgTm9uZS4KKyAgICAgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIGxvY2F0aW9uID0gbW9kdWxlLl9fZmlsZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBsb2NhdGlvbiA9IE5vbmUKKyAgICBpZiBvcmlnaW4gaXMgTm9uZToKKyAgICAgICAgaWYgbG9jYXRpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcmlnaW4gPSBsb2FkZXIuX09SSUdJTgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIG9yaWdpbiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9yaWdpbiA9IGxvY2F0aW9uCisgICAgdHJ5OgorICAgICAgICBjYWNoZWQgPSBtb2R1bGUuX19jYWNoZWRfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgY2FjaGVkID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBsaXN0KG1vZHVsZS5fX3BhdGhfXykKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gTm9uZQorCisgICAgc3BlYyA9IE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49b3JpZ2luKQorICAgIHNwZWMuX3NldF9maWxlYXR0ciA9IEZhbHNlIGlmIGxvY2F0aW9uIGlzIE5vbmUgZWxzZSBUcnVlCisgICAgc3BlYy5jYWNoZWQgPSBjYWNoZWQKKyAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICByZXR1cm4gc3BlYworCisKK2NsYXNzIF9TcGVjTWV0aG9kczoKKworICAgICIiIkNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHNwZWMgb2JqZWN0cyB0byBwcm92aWRlIHNwZWMtc3BlY2lmaWMKKyAgICBtZXRob2RzLiIiIgorCisgICAgIyBUaGUgdmFyaW91cyBzcGVjX2Zyb21fKiBmdW5jdGlvbnMgY291bGQgYmUgbWFkZSBmYWN0b3J5IG1ldGhvZHMgaGVyZS4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgc2VsZi5zcGVjID0gc3BlYworCisgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlcHIgdG8gdXNlIGZvciB0aGUgbW9kdWxlLiIiIgorICAgICAgICAjIFdlIG1vc3RseSByZXBsaWNhdGUgX21vZHVsZV9yZXByKCkgdXNpbmcgdGhlIHNwZWMgYXR0cmlidXRlcy4KKyAgICAgICAgc3BlYyA9IHNlbGYuc3BlYworICAgICAgICBuYW1lID0gJz8nIGlmIHNwZWMubmFtZSBpcyBOb25lIGVsc2Ugc3BlYy5uYW1lCisgICAgICAgIGlmIHNwZWMub3JpZ2luIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9ICh7IXJ9KT4nLmZvcm1hdChuYW1lLCBzcGVjLmxvYWRlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdChuYW1lLCBzcGVjLm9yaWdpbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHt9KT4nLmZvcm1hdChzcGVjLm5hbWUsIHNwZWMub3JpZ2luKQorCisgICAgZGVmIGluaXRfbW9kdWxlX2F0dHJzKHNlbGYsIG1vZHVsZSwgKiwgX292ZXJyaWRlPUZhbHNlLCBfZm9yY2VfbmFtZT1UcnVlKToKKyAgICAgICAgIiIiU2V0IHRoZSBtb2R1bGUncyBhdHRyaWJ1dGVzLgorCisgICAgICAgIEFsbCBtaXNzaW5nIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIHdpbGwgYmUgc2V0LiAgSGVyZQorICAgICAgICBpcyBob3cgdGhlIHNwZWMgYXR0cmlidXRlcyBtYXAgb250byB0aGUgbW9kdWxlOgorCisgICAgICAgIHNwZWMubmFtZSAtPiBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgc3BlYy5sb2FkZXIgLT4gbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgc3BlYy5wYXJlbnQgLT4gbW9kdWxlLl9fcGFja2FnZV9fCisgICAgICAgIHNwZWMgLT4gbW9kdWxlLl9fc3BlY19fCisKKyAgICAgICAgT3B0aW9uYWw6CisgICAgICAgIHNwZWMub3JpZ2luIC0+IG1vZHVsZS5fX2ZpbGVfXyAoaWYgc3BlYy5zZXRfZmlsZWF0dHIgaXMgdHJ1ZSkKKyAgICAgICAgc3BlYy5jYWNoZWQgLT4gbW9kdWxlLl9fY2FjaGVkX18gKGlmIF9fZmlsZV9fIGFsc28gc2V0KQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIC0+IG1vZHVsZS5fX3BhdGhfXyAoaWYgc2V0KQorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisKKyAgICAgICAgIyBUaGUgcGFzc2VkIGluIG1vZHVsZSBtYXkgYmUgbm90IHN1cHBvcnQgYXR0cmlidXRlIGFzc2lnbm1lbnQsCisgICAgICAgICMgaW4gd2hpY2ggY2FzZSB3ZSBzaW1wbHkgZG9uJ3Qgc2V0IHRoZSBhdHRyaWJ1dGVzLgorCisgICAgICAgICMgX19uYW1lX18KKyAgICAgICAgaWYgKF9vdmVycmlkZSBvciBfZm9yY2VfbmFtZSBvcgorICAgICAgICAgICAgZ2V0YXR0cihtb2R1bGUsICdfX25hbWVfXycsIE5vbmUpIGlzIE5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX25hbWVfXyA9IHNwZWMubmFtZQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIF9fbG9hZGVyX18KKyAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBBIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaGFjay4KKyAgICAgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBfTmFtZXNwYWNlTG9hZGVyLl9fbmV3X18oX05hbWVzcGFjZUxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyLl9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19wYWNrYWdlX18KKyAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNwZWMucGFyZW50CisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19zcGVjX18KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3BhdGhfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX3BhdGhfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgorICAgICAgICAgICAgIyBfX2ZpbGVfXworICAgICAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19maWxlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc3BlYy5vcmlnaW4KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBfX2NhY2hlZF9fCisgICAgICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzcGVjLmNhY2hlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzcGVjLmNhY2hlZAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgbW9kdWxlIHRvIGJlIGxvYWRlZC4KKworICAgICAgICBUaGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgYXJlIGFsc28gc2V0IHdpdGggdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIHZhbHVlcyBmcm9tIHRoZSBzcGVjLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgICMgVHlwaWNhbGx5IGxvYWRlcnMgd2lsbCBub3QgaW1wbGVtZW50IGNyZWF0ZV9tb2R1bGUoKS4KKyAgICAgICAgaWYgaGFzYXR0cihzcGVjLmxvYWRlciwgJ2NyZWF0ZV9tb2R1bGUnKToKKyAgICAgICAgICAgICMgSWYgY3JlYXRlX21vZHVsZSgpIHJldHVybnMgYE5vbmVgIGl0IG1lYW5zIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAjIG1vZHVsZSBjcmVhdGlvbiBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNwZWMubG9hZGVyLmNyZWF0ZV9tb2R1bGUoc3BlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZHVsZSA9IE5vbmUKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBvcGVuKCkgaXMgZXZlciBjYWxsZWQgYXMgdGhlICdpbycKKyAgICAgICAgICAgICMgbW9kdWxlIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlCisgICAgICAgICAgICAjIHRyaWdnZXIgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgICAgIG1vZHVsZSA9IF9uZXdfbW9kdWxlKHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIHJldHVybiBtb2R1bGUKKworICAgIGRlZiBfZXhlYyhzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJEbyBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byBleGVjdXRlIHRoZSBtb2R1bGUuCisKKyAgICAgICAgVGhlIG5hbWVzcGFjZSBvZiBgbW9kdWxlYCBpcyB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgZXhlY3V0aW9uLgorICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHRoZSBsb2FkZXIncyBgZXhlY19tb2R1bGUoKWAgbWV0aG9kLgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKworICAgICMgVXNlZCBieSBpbXBvcnRsaWIucmVsb2FkKCkgYW5kIF9sb2FkX21vZHVsZV9zaGltKCkuCisgICAgZGVmIGV4ZWMoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgc3BlYyBpbiBhbiBleGlzdGluZyBtb2R1bGUncyBuYW1lc3BhY2UuIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLnNwZWMubmFtZQorICAgICAgICBfaW1wLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKG5hbWUpOgorICAgICAgICAgICAgaWYgc3lzLm1vZHVsZXMuZ2V0KG5hbWUpIGlzIG5vdCBtb2R1bGU6CisgICAgICAgICAgICAgICAgbXNnID0gJ21vZHVsZSB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcycuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPW5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdtaXNzaW5nIGxvYWRlcicsIG5hbWU9c2VsZi5zcGVjLm5hbWUpCisgICAgICAgICAgICAgICAgIyBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlLCBfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgICAgICBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSwgX292ZXJyaWRlPVRydWUpCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgICAgICAjIChpc3N1ZTE5NzEzKSBPbmNlIEJ1aWx0aW5JbXBvcnRlciBhbmQgRXh0ZW5zaW9uRmlsZUxvYWRlcgorICAgICAgICAgICAgICAgICMgaGF2ZSBleGVjX21vZHVsZSgpIGltcGxlbWVudGVkLCB3ZSBjYW4gYWRkIGEgZGVwcmVjYXRpb24KKyAgICAgICAgICAgICAgICAjIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgICAgICAgICBzZWxmLnNwZWMubG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWMobW9kdWxlKQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKworICAgIGRlZiBfbG9hZF9iYWNrd2FyZF9jb21wYXRpYmxlKHNlbGYpOgorICAgICAgICAjIChpc3N1ZTE5NzEzKSBPbmNlIEJ1aWx0aW5JbXBvcnRlciBhbmQgRXh0ZW5zaW9uRmlsZUxvYWRlcgorICAgICAgICAjIGhhdmUgZXhlY19tb2R1bGUoKSBpbXBsZW1lbnRlZCwgd2UgY2FuIGFkZCBhIGRlcHJlY2F0aW9uCisgICAgICAgICMgd2FybmluZyBoZXJlLgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgIHNwZWMubG9hZGVyLmxvYWRfbW9kdWxlKHNwZWMubmFtZSkKKyAgICAgICAgIyBUaGUgbW9kdWxlIG11c3QgYmUgaW4gc3lzLm1vZHVsZXMgYXQgdGhpcyBwb2ludCEKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc3BlYy5sb2FkZXIKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgU2luY2UgbW9kdWxlLl9fcGF0aF9fIG1heSBub3QgbGluZSB1cCB3aXRoCisgICAgICAgICAgICAgICAgIyBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfcGF0aHMsIHdlIGNhbid0IG5lY2Vzc2FyaWx5IHJlbHkKKyAgICAgICAgICAgICAgICAjIG9uIHNwZWMucGFyZW50IGhlcmUuCisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc3BlYy5uYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3NwZWNfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIF9sb2FkX3VubG9ja2VkKHNlbGYpOgorICAgICAgICAjIEEgaGVscGVyIGZvciBkaXJlY3QgdXNlIGJ5IHRoZSBpbXBvcnQgc3lzdGVtLgorICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBub3QgYSBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5zcGVjLmxvYWRlciwgJ2V4ZWNfbW9kdWxlJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfYmFja3dhcmRfY29tcGF0aWJsZSgpCisKKyAgICAgICAgbW9kdWxlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB3aXRoIF9pbnN0YWxsZWRfc2FmZWx5KG1vZHVsZSk6CisgICAgICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdtaXNzaW5nIGxvYWRlcicsIG5hbWU9c2VsZi5zcGVjLm5hbWUpCisgICAgICAgICAgICAgICAgIyBBIG5hbWVzcGFjZSBwYWNrYWdlIHNvIGRvIG5vdGhpbmcuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWMobW9kdWxlKQorCisgICAgICAgICMgV2UgZG9uJ3QgZW5zdXJlIHRoYXQgdGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIGdldAorICAgICAgICAjIHNldCBpbiB0aGUgc3lzLm1vZHVsZXMgcmVwbGFjZW1lbnQgY2FzZS4gIFN1Y2ggbW9kdWxlcyBhcmUgb24KKyAgICAgICAgIyB0aGVpciBvd24uCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICMgQSBtZXRob2QgdXNlZCBkdXJpbmcgdGVzdGluZyBvZiBfbG9hZF91bmxvY2tlZCgpIGFuZCBieQorICAgICMgX2xvYWRfbW9kdWxlX3NoaW0oKS4KKyAgICBkZWYgbG9hZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IG1vZHVsZSBvYmplY3QsIGxvYWRlZCBieSB0aGUgc3BlYydzIGxvYWRlci4KKworICAgICAgICBUaGUgbW9kdWxlIGlzIG5vdCBhZGRlZCB0byBpdHMgcGFyZW50LgorCisgICAgICAgIElmIGEgbW9kdWxlIGlzIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMsIHRoYXQgZXhpc3RpbmcgbW9kdWxlIGdldHMKKyAgICAgICAgY2xvYmJlcmVkLgorCisgICAgICAgICIiIgorICAgICAgICBfaW1wLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9sb2FkX3VubG9ja2VkKCkKKworCitkZWYgX2ZpeF91cF9tb2R1bGUobnMsIG5hbWUsIHBhdGhuYW1lLCBjcGF0aG5hbWU9Tm9uZSk6CisgICAgIyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoKS4KKyAgICBsb2FkZXIgPSBucy5nZXQoJ19fbG9hZGVyX18nKQorICAgIHNwZWMgPSBucy5nZXQoJ19fc3BlY19fJykKKyAgICBpZiBub3QgbG9hZGVyOgorICAgICAgICBpZiBzcGVjOgorICAgICAgICAgICAgbG9hZGVyID0gc3BlYy5sb2FkZXIKKyAgICAgICAgZWxpZiBwYXRobmFtZSA9PSBjcGF0aG5hbWU6CisgICAgICAgICAgICBsb2FkZXIgPSBTb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvYWRlciA9IFNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgaWYgbm90IHNwZWM6CisgICAgICAgIHNwZWMgPSBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRobmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICB0cnk6CisgICAgICAgIG5zWydfX3NwZWNfXyddID0gc3BlYworICAgICAgICBuc1snX19sb2FkZXJfXyddID0gbG9hZGVyCisgICAgICAgIG5zWydfX2ZpbGVfXyddID0gcGF0aG5hbWUKKyAgICAgICAgbnNbJ19fY2FjaGVkX18nXSA9IGNwYXRobmFtZQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICMgTm90IGltcG9ydGFudCBlbm91Z2ggdG8gcmVwb3J0LgorICAgICAgICBwYXNzCiAKIAogIyBMb2FkZXJzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNjM0LDkgKzEyNTQsMjMgQEAKIAogICAgICIiIgogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtb2R1bGVfcmVwcihtb2R1bGUpOgorICAgICAgICAiIiJSZXR1cm4gcmVwciBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBUaGUgaW1wb3J0IG1hY2hpbmVyeSBkb2VzIHRoZSBqb2IgaXRzZWxmLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoYnVpbHQtaW4pPicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKwogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChidWlsdC1pbik+Ii5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBfaW1wLmlzX2J1aWx0aW4oZnVsbG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGNscywgb3JpZ2luPSdidWlsdC1pbicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC02NDQsMjQgKzEyNzgsMjMgQEAKIAogICAgICAgICBJZiAncGF0aCcgaXMgZXZlciBzcGVjaWZpZWQgdGhlbiB0aGUgc2VhcmNoIGlzIGNvbnNpZGVyZWQgYSBmYWlsdXJlLgogCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZmluZF9zcGVjKCkgaW5zdGVhZC4KKwogICAgICAgICAiIiIKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBjbHMgaWYgX2ltcC5pc19idWlsdGluKGZ1bGxuYW1lKSBlbHNlIE5vbmUKKyAgICAgICAgc3BlYyA9IGNscy5maW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIHJldHVybiBzcGVjLmxvYWRlciBpZiBzcGVjIGlzIG5vdCBOb25lIGVsc2UgTm9uZQogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgQHNldF9wYWNrYWdlCi0gICAgQHNldF9sb2FkZXIKICAgICBAX3JlcXVpcmVzX2J1aWx0aW4KICAgICBkZWYgbG9hZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkxvYWQgYSBidWlsdC1pbiBtb2R1bGUuIiIiCi0gICAgICAgIGlzX3JlbG9hZCA9IGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAuaW5pdF9idWlsdGluLCBmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgIyBPbmNlIGFuIGV4ZWNfbW9kdWxlKCkgaW1wbGVtZW50YXRpb24gaXMgYWRkZWQgd2UgY2FuIGFsc28KKyAgICAgICAgIyBhZGQgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGhlcmUuCisgICAgICAgIHdpdGggX01hbmFnZVJlbG9hZChmdWxsbmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAuaW5pdF9idWlsdGluLCBmdWxsbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBjbHMKKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gJycKKyAgICAgICAgcmV0dXJuIG1vZHVsZQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgQF9yZXF1aXJlc19idWlsdGluCkBAIC02OTEsMzEgKzEzMjQsNDggQEAKIAogICAgICIiIgogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtb2R1bGVfcmVwcihtKToKKyAgICAgICAgIiIiUmV0dXJuIHJlcHIgZm9yIHRoZSBtb2R1bGUuCisKKyAgICAgICAgVGhlIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVGhlIGltcG9ydCBtYWNoaW5lcnkgZG9lcyB0aGUgam9iIGl0c2VsZi4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKGZyb3plbik+Jy5mb3JtYXQobS5fX25hbWVfXykKKwogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG0pOgotICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAoZnJvemVuKT4iLmZvcm1hdChtLl9fbmFtZV9fKQorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGlmIF9pbXAuaXNfZnJvemVuKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBjbHMsIG9yaWdpbj0nZnJvemVuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgIiIiRmluZCBhIGZyb3plbiBtb2R1bGUuIiIiCisgICAgICAgICIiIkZpbmQgYSBmcm96ZW4gbW9kdWxlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZmluZF9zcGVjKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIGNscyBpZiBfaW1wLmlzX2Zyb3plbihmdWxsbmFtZSkgZWxzZSBOb25lCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4ZWNfbW9kdWxlKG1vZHVsZSk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19zcGVjX18ubmFtZQorICAgICAgICBpZiBub3QgX2ltcC5pc19mcm96ZW4obmFtZSk6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBmcm96ZW4gbW9kdWxlJy5mb3JtYXQobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUpCisgICAgICAgIGNvZGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAuZ2V0X2Zyb3plbl9vYmplY3QsIG5hbWUpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgQHNldF9wYWNrYWdlCi0gICAgQHNldF9sb2FkZXIKLSAgICBAX3JlcXVpcmVzX2Zyb3plbgogICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiTG9hZCBhIGZyb3plbiBtb2R1bGUuIiIiCi0gICAgICAgIGlzX3JlbG9hZCA9IGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG0gPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAuaW5pdF9mcm96ZW4sIGZ1bGxuYW1lKQotICAgICAgICAgICAgIyBMZXQgb3VyIG93biBtb2R1bGVfcmVwcigpIG1ldGhvZCBwcm9kdWNlIGEgc3VpdGFibGUgcmVwci4KLSAgICAgICAgICAgIGRlbCBtLl9fZmlsZV9fCi0gICAgICAgICAgICByZXR1cm4gbQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQorICAgICAgICAiIiJMb2FkIGEgZnJvemVuIG1vZHVsZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGV4ZWNfbW9kdWxlKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9sb2FkX21vZHVsZV9zaGltKGNscywgZnVsbG5hbWUpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAX3JlcXVpcmVzX2Zyb3plbgpAQCAtNzM4LDIyICsxMzg4LDIxIEBACiAKIGNsYXNzIFdpbmRvd3NSZWdpc3RyeUZpbmRlcjoKIAotICAgICIiIk1ldGEgcGF0aCBmaW5kZXIgZm9yIG1vZHVsZXMgZGVjbGFyZWQgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkuCi0gICAgIiIiCisgICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4iIiIKIAogICAgIFJFR0lTVFJZX0tFWSA9ICgKLSAgICAgICAgIlNvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXHtzeXNfdmVyc2lvbn0iCi0gICAgICAgICJcXE1vZHVsZXNcXHtmdWxsbmFtZX0iKQorICAgICAgICAnU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufScKKyAgICAgICAgJ1xcTW9kdWxlc1xce2Z1bGxuYW1lfScpCiAgICAgUkVHSVNUUllfS0VZX0RFQlVHID0gKAotICAgICAgICAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufSIKLSAgICAgICAgIlxcTW9kdWxlc1xce2Z1bGxuYW1lfVxcRGVidWciKQorICAgICAgICAnU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufScKKyAgICAgICAgJ1xcTW9kdWxlc1xce2Z1bGxuYW1lfVxcRGVidWcnKQogICAgIERFQlVHX0JVSUxEID0gRmFsc2UgICMgQ2hhbmdlZCBpbiBfc2V0dXAoKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9vcGVuX3JlZ2lzdHJ5KGNscywga2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSLCBrZXkpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfTE9DQUxfTUFDSElORSwga2V5KQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC03NjYsMjQgKzE0MTUsMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfdmVyc2lvbj1zeXMudmVyc2lvbls6M10pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggY2xzLl9vcGVuX3JlZ2lzdHJ5KGtleSkgYXMgaGtleToKLSAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IF93aW5yZWcuUXVlcnlWYWx1ZShoa2V5LCAiIikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IF93aW5yZWcuUXVlcnlWYWx1ZShoa2V5LCAnJykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gZmlsZXBhdGgKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIG1vZHVsZSBuYW1lZCBpbiB0aGUgcmVnaXN0cnkuIiIiCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKICAgICAgICAgZmlsZXBhdGggPSBjbHMuX3NlYXJjaF9yZWdpc3RyeShmdWxsbmFtZSkKICAgICAgICAgaWYgZmlsZXBhdGggaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9vcy5zdGF0KGZpbGVwYXRoKQorICAgICAgICAgICAgX3BhdGhfc3RhdChmaWxlcGF0aCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBmb3IgbG9hZGVyLCBzdWZmaXhlcyBpbiBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKToKICAgICAgICAgICAgIGlmIGZpbGVwYXRoLmVuZHN3aXRoKHR1cGxlKHN1ZmZpeGVzKSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlcihmdWxsbmFtZSwgZmlsZXBhdGgpCisgICAgICAgICAgICAgICAgc3BlYyA9IHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGxvYWRlcihmdWxsbmFtZSwgZmlsZXBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1maWxlcGF0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgbW9kdWxlIG5hbWVkIGluIHRoZSByZWdpc3RyeS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGV4ZWNfbW9kdWxlKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgc3BlYyA9IGNscy5maW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKIAogY2xhc3MgX0xvYWRlckJhc2ljczoKQEAgLTc5OSw3NCArMTQ2MiwxNSBAQAogICAgICAgICB0YWlsX25hbWUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMl0KICAgICAgICAgcmV0dXJuIGZpbGVuYW1lX2Jhc2UgPT0gJ19faW5pdF9fJyBhbmQgdGFpbF9uYW1lICE9ICdfX2luaXRfXycKIAotICAgIGRlZiBfYnl0ZXNfZnJvbV9ieXRlY29kZShzZWxmLCBmdWxsbmFtZSwgZGF0YSwgYnl0ZWNvZGVfcGF0aCwgc291cmNlX3N0YXRzKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBtYXJzaGFsbGVkIGJ5dGVzIGZyb20gYnl0ZWNvZGUsIHZlcmlmeWluZyB0aGUgbWFnaWMKLSAgICAgICAgbnVtYmVyLCB0aW1lc3RhbXAgYW5kIHNvdXJjZSBzaXplIGFsb25nIHRoZSB3YXkuCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIkV4ZWN1dGUgdGhlIG1vZHVsZS4iIiIKKyAgICAgICAgY29kZSA9IHNlbGYuZ2V0X2NvZGUobW9kdWxlLl9fbmFtZV9fKQorICAgICAgICBpZiBjb2RlIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignY2Fubm90IGxvYWQgbW9kdWxlIHshcn0gd2hlbiBnZXRfY29kZSgpICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5zIE5vbmUnLmZvcm1hdChtb2R1bGUuX19uYW1lX18pKQorICAgICAgICBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKGV4ZWMsIGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKIAotICAgICAgICBJZiBzb3VyY2Vfc3RhdHMgaXMgTm9uZSB0aGVuIHNraXAgdGhlIHRpbWVzdGFtcCBjaGVjay4KLQotICAgICAgICAiIiIKLSAgICAgICAgbWFnaWMgPSBkYXRhWzo0XQotICAgICAgICByYXdfdGltZXN0YW1wID0gZGF0YVs0OjhdCi0gICAgICAgIHJhd19zaXplID0gZGF0YVs4OjEyXQotICAgICAgICBpZiBtYWdpYyAhPSBfTUFHSUNfQllURVM6Ci0gICAgICAgICAgICBtc2cgPSAnYmFkIG1hZ2ljIG51bWJlciBpbiB7IXJ9OiB7IXJ9Jy5mb3JtYXQoZnVsbG5hbWUsIG1hZ2ljKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtc2cpCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9ZnVsbG5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgZWxpZiBsZW4ocmF3X3RpbWVzdGFtcCkgIT0gNDoKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAnYmFkIHRpbWVzdGFtcCBpbiB7fScuZm9ybWF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKLSAgICAgICAgZWxpZiBsZW4ocmF3X3NpemUpICE9IDQ6Ci0gICAgICAgICAgICBtZXNzYWdlID0gJ2JhZCBzaXplIGluIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQotICAgICAgICBpZiBzb3VyY2Vfc3RhdHMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc291cmNlX210aW1lID0gaW50KHNvdXJjZV9zdGF0c1snbXRpbWUnXSkKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3RpbWVzdGFtcCkgIT0gc291cmNlX210aW1lOgotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ2J5dGVjb2RlIGlzIHN0YWxlIGZvciB7fScuZm9ybWF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsIG5hbWU9ZnVsbG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb3VyY2Vfc2l6ZSA9IHNvdXJjZV9zdGF0c1snc2l6ZSddICYgMHhGRkZGRkZGRgotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfc2l6ZSkgIT0gc291cmNlX3NpemU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVjb2RlIGlzIHN0YWxlIGZvciB7fSIuZm9ybWF0KGZ1bGxuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgIyBDYW4ndCByZXR1cm4gdGhlIGNvZGUgb2JqZWN0IGFzIGVycm9ycyBmcm9tIG1hcnNoYWwgbG9hZGluZyBuZWVkIHRvCi0gICAgICAgICMgcHJvcGFnYXRlIGV2ZW4gd2hlbiBzb3VyY2UgaXMgYXZhaWxhYmxlLgotICAgICAgICByZXR1cm4gZGF0YVsxMjpdCi0KLSAgICBAbW9kdWxlX2Zvcl9sb2FkZXIKLSAgICBkZWYgX2xvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSwgKiwgc291cmNlbGVzcz1GYWxzZSk6Ci0gICAgICAgICIiIkhlbHBlciBmb3IgbG9hZF9tb2R1bGUgYWJsZSB0byBoYW5kbGUgZWl0aGVyIHNvdXJjZSBvciBzb3VyY2VsZXNzCi0gICAgICAgIGxvYWRpbmcuIiIiCi0gICAgICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmdldF9jb2RlKG5hbWUpCi0gICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYuZ2V0X2ZpbGVuYW1lKG5hbWUpCi0gICAgICAgIGlmIG5vdCBzb3VyY2VsZXNzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gY2FjaGVfZnJvbV9zb3VyY2UobW9kdWxlLl9fZmlsZV9fKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBtb2R1bGUuX19maWxlX18KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gbW9kdWxlLl9fZmlsZV9fCi0gICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG5hbWUKLSAgICAgICAgaWYgc2VsZi5pc19wYWNrYWdlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KG1vZHVsZS5fX2ZpbGVfXylbMF1dCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKGV4ZWMsIGNvZGVfb2JqZWN0LCBtb2R1bGUuX19kaWN0X18pCi0gICAgICAgIHJldHVybiBtb2R1bGUKKyAgICBsb2FkX21vZHVsZSA9IF9sb2FkX21vZHVsZV9zaGltCiAKIAogY2xhc3MgU291cmNlTG9hZGVyKF9Mb2FkZXJCYXNpY3MpOgpAQCAtODc0LDggKzE0NzgsMTAgQEAKICAgICBkZWYgcGF0aF9tdGltZShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiT3B0aW9uYWwgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgKGFuIGludCkgZm9yIHRoZQogICAgICAgICBzcGVjaWZpZWQgcGF0aCwgd2hlcmUgcGF0aCBpcyBhIHN0ci4KKworICAgICAgICBSYWlzZXMgSU9FcnJvciB3aGVuIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByYWlzZSBJT0Vycm9yCiAKICAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKICAgICAgICAgIiIiT3B0aW9uYWwgbWV0aG9kIHJldHVybmluZyBhIG1ldGFkYXRhIGRpY3QgZm9yIHRoZSBzcGVjaWZpZWQgcGF0aApAQCAtODg2LDYgKzE0OTIsNyBAQAogICAgICAgICAtICdzaXplJyAob3B0aW9uYWwpIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KIAogICAgICAgICBJbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QgYWxsb3dzIHRoZSBsb2FkZXIgdG8gcmVhZCBieXRlY29kZSBmaWxlcy4KKyAgICAgICAgUmFpc2VzIElPRXJyb3Igd2hlbiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5wYXRoX210aW1lKHBhdGgpfQogCkBAIC05MDMsMzIgKzE1MTAsMjYgQEAKICAgICAgICAgIiIiT3B0aW9uYWwgbWV0aG9kIHdoaWNoIHdyaXRlcyBkYXRhIChieXRlcykgdG8gYSBmaWxlIHBhdGggKGEgc3RyKS4KIAogICAgICAgICBJbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QgYWxsb3dzIGZvciB0aGUgd3JpdGluZyBvZiBieXRlY29kZSBmaWxlcy4KLQogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZS4iIiIKLSAgICAgICAgaW1wb3J0IHRva2VuaXplCiAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc291cmNlX2J5dGVzID0gc2VsZi5nZXRfZGF0YShwYXRoKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigic291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpIiwKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3NvdXJjZSBub3QgYXZhaWxhYmxlIHRocm91Z2ggZ2V0X2RhdGEoKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YwotICAgICAgICByZWFkc291cmNlID0gX2lvLkJ5dGVzSU8oc291cmNlX2J5dGVzKS5yZWFkbGluZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlbmNvZGluZyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhyZWFkc291cmNlKQotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkZhaWxlZCB0byBkZXRlY3QgZW5jb2RpbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkgZnJvbSBleGMKLSAgICAgICAgbmV3bGluZV9kZWNvZGVyID0gX2lvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIG5ld2xpbmVfZGVjb2Rlci5kZWNvZGUoc291cmNlX2J5dGVzLmRlY29kZShlbmNvZGluZ1swXSkpCi0gICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkZhaWxlZCB0byBkZWNvZGUgc291cmNlIGZpbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkgZnJvbSBleGMKKyAgICAgICAgcmV0dXJuIGRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKQorCisgICAgZGVmIHNvdXJjZV90b19jb2RlKHNlbGYsIGRhdGEsIHBhdGgsICosIF9vcHRpbWl6ZT0tMSk6CisgICAgICAgICIiIlJldHVybiB0aGUgY29kZSBvYmplY3QgY29tcGlsZWQgZnJvbSBzb3VyY2UuCisKKyAgICAgICAgVGhlICdkYXRhJyBhcmd1bWVudCBjYW4gYmUgYW55IG9iamVjdCB0eXBlIHRoYXQgY29tcGlsZSgpIHN1cHBvcnRzLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoY29tcGlsZSwgZGF0YSwgcGF0aCwgJ2V4ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlLCBvcHRpbWl6ZT1fb3B0aW1pemUpCiAKICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0TG9hZGVyLmdldF9jb2RlLgpAQCAtOTQ2LDQ1ICsxNTQ3LDM0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3QgPSBzZWxmLnBhdGhfc3RhdHMoc291cmNlX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc291cmNlX210aW1lID0gaW50KHN0WydtdGltZSddKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2RhdGEgPSBzZWxmLl9ieXRlc19mcm9tX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0KQorICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3N0YXRzPXN0LCBuYW1lPWZ1bGxuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPWJ5dGVjb2RlX3BhdGgpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9IG1hdGNoZXMge30nLCBieXRlY29kZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9wYXRoKQotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJzaGFsLmxvYWRzKGJ5dGVzX2RhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZvdW5kLCBfY29kZV90eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW1wLl9maXhfY29fZmlsZW5hbWUoZm91bmQsIHNvdXJjZV9wYXRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20ge30nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZAotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAiTm9uLWNvZGUgb2JqZWN0IGluIHt9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQoYnl0ZWNvZGVfcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb21waWxlX2J5dGVjb2RlKGJ5dGVzX2RhdGEsIG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aD1ieXRlY29kZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9wYXRoPXNvdXJjZV9wYXRoKQogICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHNvdXJjZV9wYXRoKQotICAgICAgICBjb2RlX29iamVjdCA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoY29tcGlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2J5dGVzLCBzb3VyY2VfcGF0aCwgJ2V4ZWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkb250X2luaGVyaXQ9VHJ1ZSkKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLnNvdXJjZV90b19jb2RlKHNvdXJjZV9ieXRlcywgc291cmNlX3BhdGgpCiAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20ge30nLCBzb3VyY2VfcGF0aCkKICAgICAgICAgaWYgKG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBhbmQgYnl0ZWNvZGVfcGF0aCBpcyBub3QgTm9uZSBhbmQKLSAgICAgICAgICAgIHNvdXJjZV9tdGltZSBpcyBub3QgTm9uZSk6Ci0gICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KF9NQUdJQ19CWVRFUykKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKF93X2xvbmcoc291cmNlX210aW1lKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKF93X2xvbmcobGVuKHNvdXJjZV9ieXRlcykpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgICAgICAgICAgc291cmNlX210aW1lIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgIGRhdGEgPSBfY29kZV90b19ieXRlY29kZShjb2RlX29iamVjdCwgc291cmNlX210aW1lLAorICAgICAgICAgICAgICAgICAgICBsZW4oc291cmNlX2J5dGVzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9ieXRlY29kZShzb3VyY2VfcGF0aCwgYnl0ZWNvZGVfcGF0aCwgZGF0YSkKICAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd3cm90ZSB7IXJ9JywgYnl0ZWNvZGVfcGF0aCkKQEAgLTk5MiwxNiArMTU4Miw2IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKIAotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIExvYWRlci5sb2FkX21vZHVsZS4KLQotICAgICAgICBSZXF1aXJlcyBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lIGFuZCBSZXNvdXJjZUxvYWRlci5nZXRfZGF0YSB0byBiZQotICAgICAgICBpbXBsZW1lbnRlZCB0byBsb2FkIHNvdXJjZSBjb2RlLiBVc2Ugb2YgYnl0ZWNvZGUgaXMgZGljdGF0ZWQgYnkgd2hldGhlcgotICAgICAgICBnZXRfY29kZSB1c2VzL3dyaXRlcyBieXRlY29kZS4KLQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfbW9kdWxlKGZ1bGxuYW1lKQotCiAKIGNsYXNzIEZpbGVMb2FkZXI6CiAKQEAgLTEwMTQsMTAgKzE1OTQsMjIgQEAKICAgICAgICAgc2VsZi5uYW1lID0gZnVsbG5hbWUKICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFzc19fIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18pCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYubmFtZSkgXiBoYXNoKHNlbGYucGF0aCkKKwogICAgIEBfY2hlY2tfbmFtZQogICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkxvYWQgYSBtb2R1bGUgZnJvbSBhIGZpbGUuIiIiCi0gICAgICAgICMgSXNzdWUgIzE0ODU3OiBBdm9pZCB0aGUgemVyby1hcmd1bWVudCBmb3JtIHNvIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAiIiJMb2FkIGEgbW9kdWxlIGZyb20gYSBmaWxlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICAjIFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhpcyBtZXRob2QgaXMgZm9yIHRoZSBuYW1lIGNoZWNrLgorICAgICAgICAjIElzc3VlICMxNDg1NzogQXZvaWQgdGhlIHplcm8tYXJndW1lbnQgZm9ybSBvZiBzdXBlciBzbyB0aGUgaW1wbGVtZW50YXRpb24KICAgICAgICAgIyBvZiB0aGF0IGZvcm0gY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCBicmVha2luZyB0aGUgZnJvemVuIG1vZHVsZQogICAgICAgICByZXR1cm4gc3VwZXIoRmlsZUxvYWRlciwgc2VsZikubG9hZF9tb2R1bGUoZnVsbG5hbWUpCiAKQEAgLTEwMzgsMTggKzE2MzAsMTIgQEAKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG1ldGFkYXRhIGZvciB0aGUgcGF0aC4iIiIKLSAgICAgICAgc3QgPSBfb3Muc3RhdChwYXRoKQorICAgICAgICBzdCA9IF9wYXRoX3N0YXQocGF0aCkKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzdC5zdF9tdGltZSwgJ3NpemUnOiBzdC5zdF9zaXplfQogCiAgICAgZGVmIF9jYWNoZV9ieXRlY29kZShzZWxmLCBzb3VyY2VfcGF0aCwgYnl0ZWNvZGVfcGF0aCwgZGF0YSk6CiAgICAgICAgICMgQWRhcHQgYmV0d2VlbiB0aGUgdHdvIEFQSXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kZSA9IF9vcy5zdGF0KHNvdXJjZV9wYXRoKS5zdF9tb2RlCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgbW9kZSA9IDBvNjY2Ci0gICAgICAgICMgV2UgYWx3YXlzIGVuc3VyZSB3cml0ZSBhY2Nlc3Mgc28gd2UgY2FuIHVwZGF0ZSBjYWNoZWQgZmlsZXMKLSAgICAgICAgIyBsYXRlciBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MgKCM2MDc0KQotICAgICAgICBtb2RlIHw9IDBvMjAwCisgICAgICAgIG1vZGUgPSBfY2FsY19tb2RlKHNvdXJjZV9wYXRoKQogICAgICAgICByZXR1cm4gc2VsZi5zZXRfZGF0YShieXRlY29kZV9wYXRoLCBkYXRhLCBfbW9kZT1tb2RlKQogCiAgICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEsICosIF9tb2RlPTBvNjY2KToKQEAgLTEwODUsMjAgKzE2NzEsMTEgQEAKIAogICAgICIiIkxvYWRlciB3aGljaCBoYW5kbGVzIHNvdXJjZWxlc3MgZmlsZSBpbXBvcnRzLiIiIgogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfbW9kdWxlKGZ1bGxuYW1lLCBzb3VyY2VsZXNzPVRydWUpCi0KICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBwYXRoID0gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCiAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGJ5dGVzX2RhdGEgPSBzZWxmLl9ieXRlc19mcm9tX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhLCBwYXRoLCBOb25lKQotICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShmb3VuZCwgX2NvZGVfdHlwZSk6Ci0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjb2RlIG9iamVjdCBmcm9tIHshcn0nLCBwYXRoKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm9uLWNvZGUgb2JqZWN0IGluIHt9Ii5mb3JtYXQocGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPXBhdGgpCisgICAgICAgIGJ5dGVzX2RhdGEgPSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgcmV0dXJuIF9jb21waWxlX2J5dGVjb2RlKGJ5dGVzX2RhdGEsIG5hbWU9ZnVsbG5hbWUsIGJ5dGVjb2RlX3BhdGg9cGF0aCkKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuIiIiCkBAIC0xMTIxLDIzICsxNjk4LDMwIEBACiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFzc19fIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18pCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYubmFtZSkgXiBoYXNoKHNlbGYucGF0aCkKKwogICAgIEBfY2hlY2tfbmFtZQotICAgIEBzZXRfcGFja2FnZQotICAgIEBzZXRfbG9hZGVyCiAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhbiBleHRlbnNpb24gbW9kdWxlLiIiIgotICAgICAgICBpc19yZWxvYWQgPSBmdWxsbmFtZSBpbiBzeXMubW9kdWxlcwotICAgICAgICB0cnk6CisgICAgICAgICMgT25jZSBhbiBleGVjX21vZHVsZSgpIGltcGxlbWVudGF0aW9uIGlzIGFkZGVkIHdlIGNhbiBhbHNvCisgICAgICAgICMgYWRkIGEgZGVwcmVjYXRpb24gd2FybmluZyBoZXJlLgorICAgICAgICB3aXRoIF9NYW5hZ2VSZWxvYWQoZnVsbG5hbWUpOgogICAgICAgICAgICAgbW9kdWxlID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmxvYWRfZHluYW1pYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUsIHNlbGYucGF0aCkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2V4dGVuc2lvbiBtb2R1bGUgbG9hZGVkIGZyb20geyFyfScsIHNlbGYucGF0aCkKLSAgICAgICAgICAgIGlmIHNlbGYuaXNfcGFja2FnZShmdWxsbmFtZSkgYW5kIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KHNlbGYucGF0aClbMF1dCi0gICAgICAgICAgICByZXR1cm4gbW9kdWxlCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2V4dGVuc2lvbiBtb2R1bGUgbG9hZGVkIGZyb20geyFyfScsIHNlbGYucGF0aCkKKyAgICAgICAgaXNfcGFja2FnZSA9IHNlbGYuaXNfcGFja2FnZShmdWxsbmFtZSkKKyAgICAgICAgaWYgaXNfcGFja2FnZSBhbmQgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtfcGF0aF9zcGxpdChzZWxmLnBhdGgpWzBdXQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBpc19wYWNrYWdlOgorICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICByZXR1cm4gbW9kdWxlCiAKICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBleHRlbnNpb24gbW9kdWxlIGlzIGEgcGFja2FnZS4iIiIKQEAgLTExNTMsNiArMTczNywxMSBAQAogICAgICAgICAiIiJSZXR1cm4gTm9uZSBhcyBleHRlbnNpb24gbW9kdWxlcyBoYXZlIG5vIHNvdXJjZSBjb2RlLiIiIgogICAgICAgICByZXR1cm4gTm9uZQogCisgICAgQF9jaGVja19uYW1lCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUgYXMgZm91bmQgYnkgdGhlIGZpbmRlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aAorCiAKIGNsYXNzIF9OYW1lc3BhY2VQYXRoOgogICAgICIiIlJlcHJlc2VudHMgYSBuYW1lc3BhY2UgcGFja2FnZSdzIHBhdGguICBJdCB1c2VzIHRoZSBtb2R1bGUgbmFtZQpAQCAtMTE4NSwxMSArMTc3NCwxMiBAQAogICAgICAgICAjIElmIHRoZSBwYXJlbnQncyBwYXRoIGhhcyBjaGFuZ2VkLCByZWNhbGN1bGF0ZSBfcGF0aAogICAgICAgICBwYXJlbnRfcGF0aCA9IHR1cGxlKHNlbGYuX2dldF9wYXJlbnRfcGF0aCgpKSAjIE1ha2UgYSBjb3B5CiAgICAgICAgIGlmIHBhcmVudF9wYXRoICE9IHNlbGYuX2xhc3RfcGFyZW50X3BhdGg6Ci0gICAgICAgICAgICBsb2FkZXIsIG5ld19wYXRoID0gc2VsZi5fcGF0aF9maW5kZXIoc2VsZi5fbmFtZSwgcGFyZW50X3BhdGgpCisgICAgICAgICAgICBzcGVjID0gc2VsZi5fcGF0aF9maW5kZXIoc2VsZi5fbmFtZSwgcGFyZW50X3BhdGgpCiAgICAgICAgICAgICAjIE5vdGUgdGhhdCBubyBjaGFuZ2VzIGFyZSBtYWRlIGlmIGEgbG9hZGVyIGlzIHJldHVybmVkLCBidXQgd2UKICAgICAgICAgICAgICMgIGRvIHJlbWVtYmVyIHRoZSBuZXcgcGFyZW50IHBhdGgKLSAgICAgICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX3BhdGggPSBuZXdfcGF0aAorICAgICAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZSBhbmQgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucwogICAgICAgICAgICAgc2VsZi5fbGFzdF9wYXJlbnRfcGF0aCA9IHBhcmVudF9wYXRoICAgICAjIFNhdmUgdGhlIGNvcHkKICAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKIApAQCAtMTIwMCw3ICsxNzkwLDcgQEAKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9yZWNhbGN1bGF0ZSgpKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIl9OYW1lc3BhY2VQYXRoKHshcn0pIi5mb3JtYXQoc2VsZi5fcGF0aCkKKyAgICAgICAgcmV0dXJuICdfTmFtZXNwYWNlUGF0aCh7IXJ9KScuZm9ybWF0KHNlbGYuX3BhdGgpCiAKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgogICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLl9yZWNhbGN1bGF0ZSgpCkBAIC0xMjA5LDIwICsxNzk5LDQxIEBACiAgICAgICAgIHNlbGYuX3BhdGguYXBwZW5kKGl0ZW0pCiAKIAotY2xhc3MgTmFtZXNwYWNlTG9hZGVyOgorIyBXZSB1c2UgdGhpcyBleGNsdXNpdmVseSBpbiBpbml0X21vZHVsZV9hdHRycygpIGZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LgorY2xhc3MgX05hbWVzcGFjZUxvYWRlcjoKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGF0aCwgcGF0aF9maW5kZXIpOgogICAgICAgICBzZWxmLl9wYXRoID0gX05hbWVzcGFjZVBhdGgobmFtZSwgcGF0aCwgcGF0aF9maW5kZXIpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgbW9kdWxlX3JlcHIoY2xzLCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAobmFtZXNwYWNlKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgICAgICIiIlJldHVybiByZXByIGZvciB0aGUgbW9kdWxlLgogCi0gICAgQG1vZHVsZV9mb3JfbG9hZGVyCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICIiIkxvYWQgYSBuYW1lc3BhY2UgbW9kdWxlLiIiIgorICAgICAgICBUaGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBUaGUgaW1wb3J0IG1hY2hpbmVyeSBkb2VzIHRoZSBqb2IgaXRzZWxmLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAobmFtZXNwYWNlKT4nLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUoJycsICc8c3RyaW5nPicsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiTG9hZCBhIG5hbWVzcGFjZSBtb2R1bGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBleGVjX21vZHVsZSgpIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIGltcG9ydCBzeXN0ZW0gbmV2ZXIgY2FsbHMgdGhpcyBtZXRob2QuCiAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ25hbWVzcGFjZSBtb2R1bGUgbG9hZGVkIHdpdGggcGF0aCB7IXJ9Jywgc2VsZi5fcGF0aCkKLSAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gc2VsZi5fcGF0aAotICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHJldHVybiBfbG9hZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSkKIAogCiAjIEZpbmRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMjY1LDcgKzE4NzYsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICBpZiBwYXRoID09ICcnOgotICAgICAgICAgICAgcGF0aCA9ICcuJworICAgICAgICAgICAgcGF0aCA9IF9vcy5nZXRjd2QoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmaW5kZXIgPSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtwYXRoXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CkBAIC0xMjc0LDcgKzE4ODUsMjIgQEAKICAgICAgICAgcmV0dXJuIGZpbmRlcgogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9nZXRfbG9hZGVyKGNscywgZnVsbG5hbWUsIHBhdGgpOgorICAgIGRlZiBfbGVnYWN5X2dldF9zcGVjKGNscywgZnVsbG5hbWUsIGZpbmRlcik6CisgICAgICAgICMgVGhpcyB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgZm9yIGEgRGVwcmVjYXRpb25XYXJuaW5nIGlmCisgICAgICAgICMgd2UgZW5kZWQgdXAgZ29pbmcgdGhhdCByb3V0ZS4KKyAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX2xvYWRlcicpOgorICAgICAgICAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihmdWxsbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShmdWxsbmFtZSkKKyAgICAgICAgICAgIHBvcnRpb25zID0gW10KKyAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGxvYWRlcikKKyAgICAgICAgc3BlYyA9IE1vZHVsZVNwZWMoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBwb3J0aW9ucworICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9nZXRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoLCB0YXJnZXQ9Tm9uZSk6CiAgICAgICAgICIiIkZpbmQgdGhlIGxvYWRlciBvciBuYW1lc3BhY2VfcGF0aCBmb3IgdGhpcyBtb2R1bGUvcGFja2FnZSBuYW1lLiIiIgogICAgICAgICAjIElmIHRoaXMgZW5kcyB1cCBiZWluZyBhIG5hbWVzcGFjZSBwYWNrYWdlLCBuYW1lc3BhY2VfcGF0aCBpcwogICAgICAgICAjICB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdpbGwgYmVjb21lIGl0cyBfX3BhdGhfXwpAQCAtMTI4NCwzOCArMTkxMCw2MSBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBmaW5kZXIgPSBjbHMuX3BhdGhfaW1wb3J0ZXJfY2FjaGUoZW50cnkpCiAgICAgICAgICAgICBpZiBmaW5kZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX2xvYWRlcicpOgotICAgICAgICAgICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBmaW5kZXIuZmluZF9zcGVjKGZ1bGxuYW1lLCB0YXJnZXQpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IFtdCi0gICAgICAgICAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAjIFdlIGZvdW5kIGEgbG9hZGVyOiByZXR1cm4gaXQgaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIsIG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBjbHMuX2xlZ2FjeV9nZXRfc3BlYyhmdWxsbmFtZSwgZmluZGVyKQorICAgICAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBzcGVjLmxvYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgICAgICAgICBpZiBwb3J0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc3BlYyBtaXNzaW5nIGxvYWRlcicpCiAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHBvc3NpYmx5IHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4KICAgICAgICAgICAgICAgICAjICBSZW1lbWJlciB0aGVzZSBwYXRoIGVudHJpZXMgKGlmIGFueSkgZm9yIHdoZW4gd2UKICAgICAgICAgICAgICAgICAjICBjcmVhdGUgYSBuYW1lc3BhY2UgcGFja2FnZSwgYW5kIGNvbnRpbnVlIGl0ZXJhdGluZwogICAgICAgICAgICAgICAgICMgIG9uIHBhdGguCiAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3BhdGguZXh0ZW5kKHBvcnRpb25zKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUsIG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBuYW1lc3BhY2VfcGF0aAorICAgICAgICAgICAgcmV0dXJuIHNwZWMKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIHRoZSBtb2R1bGUgb24gc3lzLnBhdGggb3IgJ3BhdGgnIGJhc2VkIG9uIHN5cy5wYXRoX2hvb2tzIGFuZAorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICIiImZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCiAgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLiIiIgogICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICBwYXRoID0gc3lzLnBhdGgKLSAgICAgICAgbG9hZGVyLCBuYW1lc3BhY2VfcGF0aCA9IGNscy5fZ2V0X2xvYWRlcihmdWxsbmFtZSwgcGF0aCkKLSAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgotICAgICAgICBlbHNlOgorICAgICAgICBzcGVjID0gY2xzLl9nZXRfc3BlYyhmdWxsbmFtZSwgcGF0aCwgdGFyZ2V0KQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICBuYW1lc3BhY2VfcGF0aCA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKICAgICAgICAgICAgIGlmIG5hbWVzcGFjZV9wYXRoOgogICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYXQgbGVhc3Qgb25lIG5hbWVzcGFjZSBwYXRoLiAgUmV0dXJuIGEKLSAgICAgICAgICAgICAgICAjICBsb2FkZXIgd2hpY2ggY2FuIGNyZWF0ZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVzcGFjZUxvYWRlcihmdWxsbmFtZSwgbmFtZXNwYWNlX3BhdGgsIGNscy5fZ2V0X2xvYWRlcikKKyAgICAgICAgICAgICAgICAjICBzcGVjIHdoaWNoIGNhbiBjcmVhdGUgdGhlIG5hbWVzcGFjZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIHNwZWMub3JpZ2luID0gJ25hbWVzcGFjZScKKyAgICAgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gX05hbWVzcGFjZVBhdGgoZnVsbG5hbWUsIG5hbWVzcGFjZV9wYXRoLCBjbHMuX2dldF9zcGVjKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiImZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZmluZF9zcGVjKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgc3BlYyA9IGNscy5maW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgogCiAKIGNsYXNzIEZpbGVGaW5kZXI6CkBAIC0xMzQ5LDExICsxOTk4LDI4IEBACiAKICAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJUcnkgdG8gZmluZCBhIGxvYWRlciBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUsIG9yIHRoZSBuYW1lc3BhY2UKKyAgICAgICAgcGFja2FnZSBwb3J0aW9ucy4gUmV0dXJucyAobG9hZGVyLCBsaXN0LW9mLXBvcnRpb25zKS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGZpbmRfc3BlYygpIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIFtdCisgICAgICAgIHJldHVybiBzcGVjLmxvYWRlciwgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBvciBbXQorCisgICAgZGVmIF9nZXRfc3BlYyhzZWxmLCBsb2FkZXJfY2xhc3MsIGZ1bGxuYW1lLCBwYXRoLCBzbXNsLCB0YXJnZXQpOgorICAgICAgICBsb2FkZXIgPSBsb2FkZXJfY2xhc3MoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihmdWxsbmFtZSwgcGF0aCwgbG9hZGVyPWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPXNtc2wpCisKKyAgICBkZWYgZmluZF9zcGVjKHNlbGYsIGZ1bGxuYW1lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICIiIlRyeSB0byBmaW5kIGEgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSwgb3IgdGhlIG5hbWVzcGFjZQogICAgICAgICBwYWNrYWdlIHBvcnRpb25zLiBSZXR1cm5zIChsb2FkZXIsIGxpc3Qtb2YtcG9ydGlvbnMpLiIiIgogICAgICAgICBpc19uYW1lc3BhY2UgPSBGYWxzZQogICAgICAgICB0YWlsX21vZHVsZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtdGltZSA9IF9vcy5zdGF0KHNlbGYucGF0aCkuc3RfbXRpbWUKKyAgICAgICAgICAgIG10aW1lID0gX3BhdGhfc3RhdChzZWxmLnBhdGggb3IgX29zLmdldGN3ZCgpKS5zdF9tdGltZQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG10aW1lID0gLTEKICAgICAgICAgaWYgbXRpbWUgIT0gc2VsZi5fcGF0aF9tdGltZToKQEAgLTEzNjksMzMgKzIwMzUsMzQgQEAKICAgICAgICAgIyBDaGVjayBpZiB0aGUgbW9kdWxlIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IChhbmQgdGh1cyBhIHBhY2thZ2UpLgogICAgICAgICBpZiBjYWNoZV9tb2R1bGUgaW4gY2FjaGU6CiAgICAgICAgICAgICBiYXNlX3BhdGggPSBfcGF0aF9qb2luKHNlbGYucGF0aCwgdGFpbF9tb2R1bGUpCi0gICAgICAgICAgICBpZiBfcGF0aF9pc2RpcihiYXNlX3BhdGgpOgotICAgICAgICAgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlciBpbiBzZWxmLl9sb2FkZXJzOgotICAgICAgICAgICAgICAgICAgICBpbml0X2ZpbGVuYW1lID0gJ19faW5pdF9fJyArIHN1ZmZpeAotICAgICAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKGJhc2VfcGF0aCwgaW5pdF9maWxlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGxvYWRlcihmdWxsbmFtZSwgZnVsbF9wYXRoKSwgW2Jhc2VfcGF0aF0pCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBBIG5hbWVzcGFjZSBwYWNrYWdlLCByZXR1cm4gdGhlIHBhdGggaWYgd2UgZG9uJ3QgYWxzbwotICAgICAgICAgICAgICAgICAgICAjICBmaW5kIGEgbW9kdWxlIGluIHRoZSBuZXh0IHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGlzX25hbWVzcGFjZSA9IFRydWUKKyAgICAgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlcl9jbGFzcyBpbiBzZWxmLl9sb2FkZXJzOgorICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgc3VmZml4CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihiYXNlX3BhdGgsIGluaXRfZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfc3BlYyhsb2FkZXJfY2xhc3MsIGZ1bGxuYW1lLCBmdWxsX3BhdGgsIFtiYXNlX3BhdGhdLCB0YXJnZXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSWYgYSBuYW1lc3BhY2UgcGFja2FnZSwgcmV0dXJuIHRoZSBwYXRoIGlmIHdlIGRvbid0CisgICAgICAgICAgICAgICAgIyAgZmluZCBhIG1vZHVsZSBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICAgICAgICAgIGlzX25hbWVzcGFjZSA9IF9wYXRoX2lzZGlyKGJhc2VfcGF0aCkKICAgICAgICAgIyBDaGVjayBmb3IgYSBmaWxlIHcvIGEgcHJvcGVyIHN1ZmZpeCBleGlzdHMuCi0gICAgICAgIGZvciBzdWZmaXgsIGxvYWRlciBpbiBzZWxmLl9sb2FkZXJzOgorICAgICAgICBmb3Igc3VmZml4LCBsb2FkZXJfY2xhc3MgaW4gc2VsZi5fbG9hZGVyczoKICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oc2VsZi5wYXRoLCB0YWlsX21vZHVsZSArIHN1ZmZpeCkKICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3RyeWluZyB7fScuZm9ybWF0KGZ1bGxfcGF0aCksIHZlcmJvc2l0eT0yKQogICAgICAgICAgICAgaWYgY2FjaGVfbW9kdWxlICsgc3VmZml4IGluIGNhY2hlOgogICAgICAgICAgICAgICAgIGlmIF9wYXRoX2lzZmlsZShmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGxvYWRlcihmdWxsbmFtZSwgZnVsbF9wYXRoKSwgW10pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfc3BlYyhsb2FkZXJfY2xhc3MsIGZ1bGxuYW1lLCBmdWxsX3BhdGgsIE5vbmUsIHRhcmdldCkKICAgICAgICAgaWYgaXNfbmFtZXNwYWNlOgogICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgncG9zc2libGUgbmFtZXNwYWNlIGZvciB7fScuZm9ybWF0KGJhc2VfcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gKE5vbmUsIFtiYXNlX3BhdGhdKQotICAgICAgICByZXR1cm4gKE5vbmUsIFtdKQorICAgICAgICAgICAgc3BlYyA9IE1vZHVsZVNwZWMoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW2Jhc2VfcGF0aF0KKyAgICAgICAgICAgIHJldHVybiBzcGVjCisgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgX2ZpbGxfY2FjaGUoc2VsZik6CiAgICAgICAgICIiIkZpbGwgdGhlIGNhY2hlIG9mIHBvdGVudGlhbCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBmb3IgdGhpcyBkaXJlY3RvcnkuIiIiCiAgICAgICAgIHBhdGggPSBzZWxmLnBhdGgKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29udGVudHMgPSBfb3MubGlzdGRpcihwYXRoKQorICAgICAgICAgICAgY29udGVudHMgPSBfb3MubGlzdGRpcihwYXRoIG9yIF9vcy5nZXRjd2QoKSkKICAgICAgICAgZXhjZXB0IChGaWxlTm90Rm91bmRFcnJvciwgUGVybWlzc2lvbkVycm9yLCBOb3RBRGlyZWN0b3J5RXJyb3IpOgogICAgICAgICAgICAgIyBEaXJlY3RvcnkgaGFzIGVpdGhlciBiZWVuIHJlbW92ZWQsIHR1cm5lZCBpbnRvIGEgZmlsZSwgb3IgbWFkZQogICAgICAgICAgICAgIyB1bnJlYWRhYmxlLgpAQCAtMTQyMCw3ICsyMDg3LDcgQEAKICAgICAgICAgICAgICAgICBsb3dlcl9zdWZmaXhfY29udGVudHMuYWRkKG5ld19uYW1lKQogICAgICAgICAgICAgc2VsZi5fcGF0aF9jYWNoZSA9IGxvd2VyX3N1ZmZpeF9jb250ZW50cwogICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVMpOgotICAgICAgICAgICAgc2VsZi5fcmVsYXhlZF9wYXRoX2NhY2hlID0gc2V0KGZuLmxvd2VyKCkgZm9yIGZuIGluIGNvbnRlbnRzKQorICAgICAgICAgICAgc2VsZi5fcmVsYXhlZF9wYXRoX2NhY2hlID0ge2ZuLmxvd2VyKCkgZm9yIGZuIGluIGNvbnRlbnRzfQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHBhdGhfaG9vayhjbHMsICpsb2FkZXJfZGV0YWlscyk6CkBAIC0xNDM1LDEzICsyMTAyLDEzIEBACiAgICAgICAgIGRlZiBwYXRoX2hvb2tfZm9yX0ZpbGVGaW5kZXIocGF0aCk6CiAgICAgICAgICAgICAiIiJQYXRoIGhvb2sgZm9yIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci4iIiIKICAgICAgICAgICAgIGlmIG5vdCBfcGF0aF9pc2RpcihwYXRoKToKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigib25seSBkaXJlY3RvcmllcyBhcmUgc3VwcG9ydGVkIiwgcGF0aD1wYXRoKQorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdvbmx5IGRpcmVjdG9yaWVzIGFyZSBzdXBwb3J0ZWQnLCBwYXRoPXBhdGgpCiAgICAgICAgICAgICByZXR1cm4gY2xzKHBhdGgsICpsb2FkZXJfZGV0YWlscykKIAogICAgICAgICByZXR1cm4gcGF0aF9ob29rX2Zvcl9GaWxlRmluZGVyCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiRmlsZUZpbmRlciglcikiICUgKHNlbGYucGF0aCwpCisgICAgICAgIHJldHVybiAnRmlsZUZpbmRlcih7IXJ9KScuZm9ybWF0KHNlbGYucGF0aCkKIAogCiAjIEltcG9ydCBpdHNlbGYgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xNDY4LDE5ICsyMTM1LDUxIEBACiAgICAgcmV0dXJuICd7fS57fScuZm9ybWF0KGJhc2UsIG5hbWUpIGlmIG5hbWUgZWxzZSBiYXNlCiAKIAotZGVmIF9maW5kX21vZHVsZShuYW1lLCBwYXRoKToKK2RlZiBfZmluZF9zcGVjX2xlZ2FjeShmaW5kZXIsIG5hbWUsIHBhdGgpOgorICAgICMgVGhpcyB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgZm9yIGEgRGVwcmVjYXRpb25XYXJuaW5nIGlmCisgICAgIyB3ZSBlbmRlZCB1cCBnb2luZyB0aGF0IHJvdXRlLgorICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShuYW1lLCBwYXRoKQorICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBzcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlcikKKworCitkZWYgX2ZpbmRfc3BlYyhuYW1lLCBwYXRoLCB0YXJnZXQ9Tm9uZSk6CiAgICAgIiIiRmluZCBhIG1vZHVsZSdzIGxvYWRlci4iIiIKICAgICBpZiBub3Qgc3lzLm1ldGFfcGF0aDoKICAgICAgICAgX3dhcm5pbmdzLndhcm4oJ3N5cy5tZXRhX3BhdGggaXMgZW1wdHknLCBJbXBvcnRXYXJuaW5nKQorICAgICMgV2UgY2hlY2sgc3lzLm1vZHVsZXMgaGVyZSBmb3IgdGhlIHJlbG9hZCBjYXNlLiAgV2hpbGUgYSBwYXNzZWQtaW4KKyAgICAjIHRhcmdldCB3aWxsIHVzdWFsbHkgaW5kaWNhdGUgYSByZWxvYWQgdGhlcmUgaXMgbm8gZ3VhcmFudGVlLCB3aGVyZWFzCisgICAgIyBzeXMubW9kdWxlcyBwcm92aWRlcyBvbmUuCisgICAgaXNfcmVsb2FkID0gbmFtZSBpbiBzeXMubW9kdWxlcwogICAgIGZvciBmaW5kZXIgaW4gc3lzLm1ldGFfcGF0aDoKICAgICAgICAgd2l0aCBfSW1wb3J0TG9ja0NvbnRleHQoKToKLSAgICAgICAgICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShuYW1lLCBwYXRoKQotICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAjIFRoZSBwYXJlbnQgaW1wb3J0IG1heSBoYXZlIGFscmVhZHkgaW1wb3J0ZWQgdGhpcyBtb2R1bGUuCi0gICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmluZF9zcGVjID0gZmluZGVyLmZpbmRfc3BlYworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHNwZWMgPSBfZmluZF9zcGVjX2xlZ2FjeShmaW5kZXIsIG5hbWUsIHBhdGgpCisgICAgICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0uX19sb2FkZXJfXworICAgICAgICAgICAgICAgIHNwZWMgPSBmaW5kX3NwZWMobmFtZSwgcGF0aCwgdGFyZ2V0KQorICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgorICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgX19zcGVjX18gPSBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgV2UgdXNlIHRoZSBmb3VuZCBzcGVjIHNpbmNlIHRoYXQgaXMgdGhlIG9uZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICMgd2Ugd291bGQgaGF2ZSB1c2VkIGlmIHRoZSBwYXJlbnQgbW9kdWxlIGhhZG4ndAorICAgICAgICAgICAgICAgICAgICAjIGJlYXRlbiB1cyB0byB0aGUgcHVuY2guCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgX19zcGVjX18gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19zcGVjX18KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gTm9uZQogCkBAIC0xNDg4LDIxICsyMTg3LDIyIEBACiBkZWYgX3Nhbml0eV9jaGVjayhuYW1lLCBwYWNrYWdlLCBsZXZlbCk6CiAgICAgIiIiVmVyaWZ5IGFyZ3VtZW50cyBhcmUgInNhbmUiLiIiIgogICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIHN0cik6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigibW9kdWxlIG5hbWUgbXVzdCBiZSBzdHIsIG5vdCB7fSIuZm9ybWF0KHR5cGUobmFtZSkpKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21vZHVsZSBuYW1lIG11c3QgYmUgc3RyLCBub3Qge30nLmZvcm1hdCh0eXBlKG5hbWUpKSkKICAgICBpZiBsZXZlbCA8IDA6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2xldmVsIG11c3QgYmUgPj0gMCcpCiAgICAgaWYgcGFja2FnZToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGFja2FnZSwgc3RyKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiX19wYWNrYWdlX18gbm90IHNldCB0byBhIHN0cmluZyIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ19fcGFja2FnZV9fIG5vdCBzZXQgdG8gYSBzdHJpbmcnKQogICAgICAgICBlbGlmIHBhY2thZ2Ugbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgbXNnID0gKCJQYXJlbnQgbW9kdWxlIHshcn0gbm90IGxvYWRlZCwgY2Fubm90IHBlcmZvcm0gcmVsYXRpdmUgIgotICAgICAgICAgICAgICAgICAgICJpbXBvcnQiKQorICAgICAgICAgICAgbXNnID0gKCdQYXJlbnQgbW9kdWxlIHshcn0gbm90IGxvYWRlZCwgY2Fubm90IHBlcmZvcm0gcmVsYXRpdmUgJworICAgICAgICAgICAgICAgICAgICdpbXBvcnQnKQogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXJyb3IobXNnLmZvcm1hdChwYWNrYWdlKSkKICAgICBpZiBub3QgbmFtZSBhbmQgbGV2ZWwgPT0gMDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRW1wdHkgbW9kdWxlIG5hbWUiKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFbXB0eSBtb2R1bGUgbmFtZScpCiAKIAotX0VSUl9NU0cgPSAnTm8gbW9kdWxlIG5hbWVkIHshcn0nCitfRVJSX01TR19QUkVGSVggPSAnTm8gbW9kdWxlIG5hbWVkICcKK19FUlJfTVNHID0gX0VSUl9NU0dfUFJFRklYICsgJ3shcn0nCiAKIGRlZiBfZmluZF9hbmRfbG9hZF91bmxvY2tlZChuYW1lLCBpbXBvcnRfKToKICAgICBwYXRoID0gTm9uZQpAQCAtMTUxMyw1OCArMjIxMywyOCBAQAogICAgICAgICAjIENyYXp5IHNpZGUtZWZmZWN0cyEKICAgICAgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKICAgICAgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQotICAgICAgICAjIEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5OyBiZSBuaWNlciB0byBza2lwIHRoZSBkaWN0IGxvb2t1cC4KICAgICAgICAgcGFyZW50X21vZHVsZSA9IHN5cy5tb2R1bGVzW3BhcmVudF0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGF0aCA9IHBhcmVudF9tb2R1bGUuX19wYXRoX18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgbXNnID0gKF9FUlJfTVNHICsgJzsge30gaXMgbm90IGEgcGFja2FnZScpLmZvcm1hdChuYW1lLCBwYXJlbnQpCisgICAgICAgICAgICBtc2cgPSAoX0VSUl9NU0cgKyAnOyB7IXJ9IGlzIG5vdCBhIHBhY2thZ2UnKS5mb3JtYXQobmFtZSwgcGFyZW50KQogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPW5hbWUpCi0gICAgbG9hZGVyID0gX2ZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCi0gICAgaWYgbG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgIGV4YyA9IEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQotICAgICAgICAjIFRPRE8oYnJldHQpOiBzd2l0Y2ggdG8gYSBwcm9wZXIgTW9kdWxlTm90Rm91bmQgZXhjZXB0aW9uIGluIFB5dGhvbgotICAgICAgICAjIDMuNC4KLSAgICAgICAgZXhjLl9ub3RfZm91bmQgPSBUcnVlCi0gICAgICAgIHJhaXNlIGV4YwotICAgIGVsaWYgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICMgVGhlIHBhcmVudCBpbXBvcnQgbWF5IGhhdmUgYWxyZWFkeSBpbXBvcnRlZCB0aGlzIG1vZHVsZS4KLSAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2ltcG9ydCB7IXJ9ICMgeyFyfScsIG5hbWUsIGxvYWRlcikKLSAgICAjIEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5OyBiZSBuaWNlciB0byBza2lwIHRoZSBkaWN0IGxvb2t1cC4KLSAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgIHNwZWMgPSBfZmluZF9zcGVjKG5hbWUsIHBhdGgpCisgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfRVJSX01TRy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBfU3BlY01ldGhvZHMoc3BlYykuX2xvYWRfdW5sb2NrZWQoKQogICAgIGlmIHBhcmVudDoKICAgICAgICAgIyBTZXQgdGhlIG1vZHVsZSBhcyBhbiBhdHRyaWJ1dGUgb24gaXRzIHBhcmVudC4KICAgICAgICAgcGFyZW50X21vZHVsZSA9IHN5cy5tb2R1bGVzW3BhcmVudF0KICAgICAgICAgc2V0YXR0cihwYXJlbnRfbW9kdWxlLCBuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXSwgbW9kdWxlKQotICAgICMgU2V0IF9fcGFja2FnZV9fIGlmIHRoZSBsb2FkZXIgZGlkIG5vdC4KLSAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJywgTm9uZSkgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgotICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICMgU2V0IGxvYWRlciBpZiBuZWVkIGJlLgotICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwogICAgIHJldHVybiBtb2R1bGUKIAogCiBkZWYgX2ZpbmRfYW5kX2xvYWQobmFtZSwgaW1wb3J0Xyk6CiAgICAgIiIiRmluZCBhbmQgbG9hZCB0aGUgbW9kdWxlLCBhbmQgcmVsZWFzZSB0aGUgaW1wb3J0IGxvY2suIiIiCi0gICAgdHJ5OgotICAgICAgICBsb2NrID0gX2dldF9tb2R1bGVfbG9jayhuYW1lKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIF9pbXAucmVsZWFzZV9sb2NrKCkKLSAgICBsb2NrLmFjcXVpcmUoKQotICAgIHRyeToKKyAgICB3aXRoIF9Nb2R1bGVMb2NrTWFuYWdlcihuYW1lKToKICAgICAgICAgcmV0dXJuIF9maW5kX2FuZF9sb2FkX3VubG9ja2VkKG5hbWUsIGltcG9ydF8pCi0gICAgZmluYWxseToKLSAgICAgICAgbG9jay5yZWxlYXNlKCkKIAogCiBkZWYgX2djZF9pbXBvcnQobmFtZSwgcGFja2FnZT1Ob25lLCBsZXZlbD0wKToKQEAgLTE1ODUsOCArMjI1NSw4IEBACiAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KICAgICBpZiBtb2R1bGUgaXMgTm9uZToKICAgICAgICAgX2ltcC5yZWxlYXNlX2xvY2soKQotICAgICAgICBtZXNzYWdlID0gKCJpbXBvcnQgb2Yge30gaGFsdGVkOyAiCi0gICAgICAgICAgICAgICAgICAgICJOb25lIGluIHN5cy5tb2R1bGVzIi5mb3JtYXQobmFtZSkpCisgICAgICAgIG1lc3NhZ2UgPSAoJ2ltcG9ydCBvZiB7fSBoYWx0ZWQ7ICcKKyAgICAgICAgICAgICAgICAgICAnTm9uZSBpbiBzeXMubW9kdWxlcycuZm9ybWF0KG5hbWUpKQogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCBuYW1lPW5hbWUpCiAgICAgX2xvY2tfdW5sb2NrX21vZHVsZShuYW1lKQogICAgIHJldHVybiBtb2R1bGUKQEAgLTE2MTYsOSArMjI4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZGljdGF0ZXMgd2UgaWdub3JlIGZhaWxlZAogICAgICAgICAgICAgICAgICAgICAjIGltcG9ydHMgdHJpZ2dlcmVkIGJ5IGZyb21saXN0IGZvciBtb2R1bGVzIHRoYXQgZG9uJ3QKICAgICAgICAgICAgICAgICAgICAgIyBleGlzdC4KLSAgICAgICAgICAgICAgICAgICAgIyBUT0RPKGJyZXR0KTogSW4gUHl0aG9uIDMuNCwgaGF2ZSBpbXBvcnQgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgIyAgIE1vZHVsZU5vdEZvdW5kIGFuZCBjYXRjaCB0aGF0LgotICAgICAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKGV4YywgJ19ub3RfZm91bmQnLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIHN0cihleGMpLnN0YXJ0c3dpdGgoX0VSUl9NU0dfUFJFRklYKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4Yy5uYW1lID09IGZyb21fbmFtZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMTY4Niw2ICsyMzU0LDEzIEBACiAgICAgICAgIHJldHVybiBfaGFuZGxlX2Zyb21saXN0KG1vZHVsZSwgZnJvbWxpc3QsIF9nY2RfaW1wb3J0KQogCiAKK2RlZiBfYnVpbHRpbl9mcm9tX25hbWUobmFtZSk6CisgICAgc3BlYyA9IEJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMobmFtZSkKKyAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdubyBidWlsdC1pbiBtb2R1bGUgbmFtZWQgJyArIG5hbWUpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIHJldHVybiBtZXRob2RzLl9sb2FkX3VubG9ja2VkKCkKKwogCiBkZWYgX3NldHVwKHN5c19tb2R1bGUsIF9pbXBfbW9kdWxlKToKICAgICAiIiJTZXR1cCBpbXBvcnRsaWIgYnkgaW1wb3J0aW5nIG5lZWRlZCBidWlsdC1pbiBtb2R1bGVzIGFuZCBpbmplY3RpbmcgdGhlbQpAQCAtMTcwNCwyNCArMjM3OSwzMSBAQAogICAgIGVsc2U6CiAgICAgICAgIEJZVEVDT0RFX1NVRkZJWEVTID0gREVCVUdfQllURUNPREVfU1VGRklYRVMKIAorICAgICMgU2V0IHVwIHRoZSBzcGVjIGZvciBleGlzdGluZyBidWlsdGluL2Zyb3plbiBtb2R1bGVzLgogICAgIG1vZHVsZV90eXBlID0gdHlwZShzeXMpCiAgICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgogICAgICAgICBpZiBpc2luc3RhbmNlKG1vZHVsZSwgbW9kdWxlX3R5cGUpOgotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgotICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IEJ1aWx0aW5JbXBvcnRlcgotICAgICAgICAgICAgICAgIGVsaWYgX2ltcC5pc19mcm96ZW4obmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gRnJvemVuSW1wb3J0ZXIKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IEJ1aWx0aW5JbXBvcnRlcgorICAgICAgICAgICAgZWxpZiBfaW1wLmlzX2Zyb3plbihuYW1lKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBGcm96ZW5JbXBvcnRlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3BlYyA9IF9zcGVjX2Zyb21fbW9kdWxlKG1vZHVsZSwgbG9hZGVyKQorICAgICAgICAgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgICAgICAgICAgbWV0aG9kcy5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCiAKKyAgICAjIERpcmVjdGx5IGxvYWQgYnVpbHQtaW4gbW9kdWxlcyBuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcC4KICAgICBzZWxmX21vZHVsZSA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXQogICAgIGZvciBidWlsdGluX25hbWUgaW4gKCdfaW8nLCAnX3dhcm5pbmdzJywgJ2J1aWx0aW5zJywgJ21hcnNoYWwnKToKICAgICAgICAgaWYgYnVpbHRpbl9uYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIGJ1aWx0aW5fbW9kdWxlID0gQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKGJ1aWx0aW5fbmFtZSkKKyAgICAgICAgICAgIGJ1aWx0aW5fbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKGJ1aWx0aW5fbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJ1aWx0aW5fbW9kdWxlID0gc3lzLm1vZHVsZXNbYnVpbHRpbl9uYW1lXQogICAgICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCBidWlsdGluX25hbWUsIGJ1aWx0aW5fbW9kdWxlKQogCi0gICAgb3NfZGV0YWlscyA9ICgncG9zaXgnLCBbJy8nXSksICgnbnQnLCBbJ1xcJywgJy8nXSksICgnb3MyJywgWydcXCcsICcvJ10pCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSBvcyBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KKyAgICBvc19kZXRhaWxzID0gKCdwb3NpeCcsIFsnLyddKSwgKCdudCcsIFsnXFwnLCAnLyddKQogICAgIGZvciBidWlsdGluX29zLCBwYXRoX3NlcGFyYXRvcnMgaW4gb3NfZGV0YWlsczoKICAgICAgICAgIyBBc3N1bXB0aW9uIG1hZGUgaW4gX3BhdGhfam9pbigpCiAgICAgICAgIGFzc2VydCBhbGwobGVuKHNlcCkgPT0gMSBmb3Igc2VwIGluIHBhdGhfc2VwYXJhdG9ycykKQEAgLTE3MzEsMzIgKzI0MTMsMzMgQEAKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3NfbW9kdWxlID0gQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKGJ1aWx0aW5fb3MpCi0gICAgICAgICAgICAgICAgIyBUT0RPOiByaXAgb3V0IG9zMiBjb2RlIGFmdGVyIDMuMyBpcyByZWxlYXNlZCBhcyBwZXIgUEVQIDExCi0gICAgICAgICAgICAgICAgaWYgYnVpbHRpbl9vcyA9PSAnb3MyJyBhbmQgJ0VNWCBHQ0MnIGluIHN5cy52ZXJzaW9uOgotICAgICAgICAgICAgICAgICAgICBwYXRoX3NlcCA9IHBhdGhfc2VwYXJhdG9yc1sxXQorICAgICAgICAgICAgICAgIG9zX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZShidWlsdGluX29zKQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICBlbHNlOgogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignaW1wb3J0bGliIHJlcXVpcmVzIHBvc2l4IG9yIG50JykKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX29zJywgb3NfbW9kdWxlKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdwYXRoX3NlcCcsIHBhdGhfc2VwKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdwYXRoX3NlcGFyYXRvcnMnLCAnJy5qb2luKHBhdGhfc2VwYXJhdG9ycykpCiAKKyAgICAjIERpcmVjdGx5IGxvYWQgdGhlIF90aHJlYWQgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCiAgICAgdHJ5OgotICAgICAgICB0aHJlYWRfbW9kdWxlID0gQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfdGhyZWFkJykKKyAgICAgICAgdGhyZWFkX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZSgnX3RocmVhZCcpCiAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAjIFB5dGhvbiB3YXMgYnVpbHQgd2l0aG91dCB0aHJlYWRzCiAgICAgICAgIHRocmVhZF9tb2R1bGUgPSBOb25lCi0gICAgd2Vha3JlZl9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ193ZWFrcmVmJykKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3RocmVhZCcsIHRocmVhZF9tb2R1bGUpCiAKKyAgICAjIERpcmVjdGx5IGxvYWQgdGhlIF93ZWFrcmVmIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgorICAgIHdlYWtyZWZfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCdfd2Vha3JlZicpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193ZWFrcmVmJywgd2Vha3JlZl9tb2R1bGUpCisKKyAgICAjIERpcmVjdGx5IGxvYWQgdGhlIHdpbnJlZyBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KICAgICBpZiBidWlsdGluX29zID09ICdudCc6Ci0gICAgICAgIHdpbnJlZ19tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ3dpbnJlZycpCisgICAgICAgIHdpbnJlZ19tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoJ3dpbnJlZycpCiAgICAgICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfd2lucmVnJywgd2lucmVnX21vZHVsZSkKIAotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfb3MnLCBvc19tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ190aHJlYWQnLCB0aHJlYWRfbW9kdWxlKQotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfd2Vha3JlZicsIHdlYWtyZWZfbW9kdWxlKQotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdwYXRoX3NlcCcsIHBhdGhfc2VwKQotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdwYXRoX3NlcGFyYXRvcnMnLCBzZXQocGF0aF9zZXBhcmF0b3JzKSkKICAgICAjIENvbnN0YW50cwogICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfcmVsYXhfY2FzZScsIF9tYWtlX3JlbGF4X2Nhc2UoKSkKICAgICBFWFRFTlNJT05fU1VGRklYRVMuZXh0ZW5kKF9pbXAuZXh0ZW5zaW9uX3N1ZmZpeGVzKCkpCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL2FiYy5weSBiL0xpYi9pbXBvcnRsaWIvYWJjLnB5CmluZGV4IDM4NzU2N2EuLjU1OGFiZDMgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvYWJjLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvYWJjLnB5CkBAIC04LDExICs4LDYgQEAKICAgICAgICAgcmFpc2UKICAgICBfZnJvemVuX2ltcG9ydGxpYiA9IE5vbmUKIGltcG9ydCBhYmMKLWltcG9ydCBpbXAKLWltcG9ydCBtYXJzaGFsCi1pbXBvcnQgc3lzCi1pbXBvcnQgdG9rZW5pemUKLWltcG9ydCB3YXJuaW5ncwogCiAKIGRlZiBfcmVnaXN0ZXIoYWJzdHJhY3RfY2xzLCAqY2xhc3Nlcyk6CkBAIC0zNywyOCArMzIsMzcgQEAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CiAgICAgICAgICIiIkFuIGFic3RyYWN0IG1ldGhvZCB0aGF0IHNob3VsZCBmaW5kIGEgbW9kdWxlLgogICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIgYW5kIHRoZSBvcHRpb25hbCBwYXRoIGlzIGEgc3RyIG9yIE5vbmUuCi0gICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0LgorICAgICAgICBSZXR1cm5zIGEgTG9hZGVyIG9iamVjdCBvciBOb25lLgogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKIGNsYXNzIE1ldGFQYXRoRmluZGVyKEZpbmRlcik6CiAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBpbXBvcnQgZmluZGVycyBvbiBzeXMubWV0YV9wYXRoLiIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICMgV2UgZG9uJ3QgZGVmaW5lIGZpbmRfc3BlYygpIGhlcmUgc2luY2UgdGhhdCB3b3VsZCBicmVhaworICAgICMgaGFzYXR0ciBjaGVja3Mgd2UgZG8gdG8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoLCB3aGVuIGltcGxlbWVudGVkLCBzaG91bGQgZmluZCBhIG1vZHVsZS4KLSAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyIGFuZCB0aGUgcGF0aCBpcyBhIHN0ciBvciBOb25lLgotICAgICAgICBSZXR1cm5zIGEgTG9hZGVyIG9iamVjdC4KKyAgICAgICAgIiIiUmV0dXJuIGEgbG9hZGVyIGZvciB0aGUgbW9kdWxlLgorCisgICAgICAgIElmIG5vIG1vZHVsZSBpcyBmb3VuZCwgcmV0dXJuIE5vbmUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIgYW5kCisgICAgICAgIHRoZSBwYXRoIGlzIGEgbGlzdCBvZiBzdHJpbmdzIG9yIE5vbmUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBmaW5kZXIuZmluZF9zcGVjKCkuIElmIGZpbmRfc3BlYygpCisgICAgICAgIGV4aXN0cyB0aGVuIGJhY2t3YXJkcy1jb21wYXRpYmxlIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQgZm9yIHRoaXMKKyAgICAgICAgbWV0aG9kLgorCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdmaW5kX3NwZWMnKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZvdW5kID0gc2VsZi5maW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIHJldHVybiBmb3VuZC5sb2FkZXIgaWYgZm91bmQgaXMgbm90IE5vbmUgZWxzZSBOb25lCiAKICAgICBkZWYgaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CiAgICAgICAgICIiIkFuIG9wdGlvbmFsIG1ldGhvZCBmb3IgY2xlYXJpbmcgdGhlIGZpbmRlcidzIGNhY2hlLCBpZiBhbnkuCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogX3JlZ2lzdGVyKE1ldGFQYXRoRmluZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgbWFjaGluZXJ5LlBhdGhGaW5kZXIsIG1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXIpCkBAIC02OCwxNSArNzIsMzUgQEAKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHBhdGggZW50cnkgZmluZGVycyB1c2VkIGJ5IFBhdGhGaW5kZXIuIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZmluZF9zcGVjKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKICAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2gsIHdoZW4gaW1wbGVtZW50ZWQsIHJldHVybnMgYSBtb2R1bGUgbG9hZGVyLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgMi10dXBsZSBvZiAoTG9hZGVyLCBwb3J0aW9uKSB3aGVyZQotICAgICAgICBwb3J0aW9uIGlzIGEgc2VxdWVuY2Ugb2YgZmlsZSBzeXN0ZW0gbG9jYXRpb25zIGNvbnRyaWJ1dGluZyB0byBwYXJ0IG9mCi0gICAgICAgIGEgbmFtZXNwYWNlIHBhY2thZ2UuICBUaGUgc2VxdWVuY2UgbWF5IGJlIGVtcHR5IGFuZCB0aGUgbG9hZGVyIG1heSBiZQotICAgICAgICBOb25lLgorICAgICAgICAiIiJSZXR1cm4gKGxvYWRlciwgbmFtZXNwYWNlIHBvcnRpb24pIGZvciB0aGUgcGF0aCBlbnRyeS4KKworICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBUaGUgbmFtZXNwYWNlIHBvcnRpb24gaXMgYSBzZXF1ZW5jZSBvZgorICAgICAgICBwYXRoIGVudHJpZXMgY29udHJpYnV0aW5nIHRvIHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4gVGhlCisgICAgICAgIHNlcXVlbmNlIG1heSBiZSBlbXB0eS4gIElmIGxvYWRlciBpcyBub3QgTm9uZSwgdGhlIHBvcnRpb24gd2lsbAorICAgICAgICBiZSBpZ25vcmVkLgorCisgICAgICAgIFRoZSBwb3J0aW9uIHdpbGwgYmUgZGlzY2FyZGVkIGlmIGFub3RoZXIgcGF0aCBlbnRyeSBmaW5kZXIKKyAgICAgICAgbG9jYXRlcyB0aGUgbW9kdWxlIGFzIGEgbm9ybWFsIG1vZHVsZSBvciBwYWNrYWdlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgZmluZGVyLmZpbmRfc3BlYygpLiBJZiBmaW5kX3NwZWMoKQorICAgICAgICBpcyBwcm92aWRlZCB0aGFuIGJhY2t3YXJkcy1jb21wYXRpYmxlIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQuCisKICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2ZpbmRfc3BlYycpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIFtdCisgICAgICAgIGZvdW5kID0gc2VsZi5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgIGlmIGZvdW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbm90IGZvdW5kLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zOgorICAgICAgICAgICAgICAgIHBvcnRpb25zID0gW10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG9ydGlvbnMgPSBmb3VuZC5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmxvYWRlciwgcG9ydGlvbnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBbXQogCiAgICAgZmluZF9tb2R1bGUgPSBfYm9vdHN0cmFwLl9maW5kX21vZHVsZV9zaGltCiAKQEAgLTg0LDcgKzEwOCw2IEBACiAgICAgICAgICIiIkFuIG9wdGlvbmFsIG1ldGhvZCBmb3IgY2xlYXJpbmcgdGhlIGZpbmRlcidzIGNhY2hlLCBpZiBhbnkuCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgUGF0aEZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKIF9yZWdpc3RlcihQYXRoRW50cnlGaW5kZXIsIG1hY2hpbmVyeS5GaWxlRmluZGVyKQogCkBAIC05MywxNiArMTE2LDQ5IEBACiAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBpbXBvcnQgbG9hZGVycy4iIiIKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgbG9hZCBhIG1vZHVsZS4KLSAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgICIiIlJldHVybiBhIG1vZHVsZSB0byBpbml0aWFsaXplIGFuZCBpbnRvIHdoaWNoIHRvIGxvYWQuCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCByYWlzZSBJbXBvcnRFcnJvciBpZiBhbnl0aGluZyBwcmV2ZW50cyBpdAorICAgICAgICBmcm9tIGNyZWF0aW5nIGEgbmV3IG1vZHVsZS4gIEl0IG1heSByZXR1cm4gTm9uZSB0byBpbmRpY2F0ZQorICAgICAgICB0aGF0IHRoZSBzcGVjIHNob3VsZCBjcmVhdGUgdGhlIG5ldyBtb2R1bGUuCisKKyAgICAgICAgY3JlYXRlX21vZHVsZSgpIGlzIG9wdGlvbmFsLgorCisgICAgICAgICIiIgorICAgICAgICAjIEJ5IGRlZmF1bHQsIGRlZmVyIHRvIF9TcGVjTWV0aG9kcy5jcmVhdGUoKSBmb3IgdGhlIG5ldyBtb2R1bGUuCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIFdlIGRvbid0IGRlZmluZSBleGVjX21vZHVsZSgpIGhlcmUgc2luY2UgdGhhdCB3b3VsZCBicmVhaworICAgICMgaGFzYXR0ciBjaGVja3Mgd2UgZG8gdG8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBsb2FkZWQgbW9kdWxlLgorCisgICAgICAgIFRoZSBtb2R1bGUgbXVzdCBiZSBhZGRlZCB0byBzeXMubW9kdWxlcyBhbmQgaGF2ZSBpbXBvcnQtcmVsYXRlZAorICAgICAgICBhdHRyaWJ1dGVzIHNldCBwcm9wZXJseS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4KKworICAgICAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgb24gZmFpbHVyZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGxvYWRlci5leGVjX21vZHVsZSgpLiBJZgorICAgICAgICBleGVjX21vZHVsZSgpIGV4aXN0cyB0aGVuIGl0IGlzIHVzZWQgdG8gcHJvdmlkZSBhIGJhY2t3YXJkcy1jb21wYXRpYmxlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIHJldHVybiBfYm9vdHN0cmFwLl9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKQorCiAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlCi0gICAgICAgIGdpdmVuIG1vZHVsZSdzIHJlcHIuIiIiCisgICAgICAgICIiIlJldHVybiBhIG1vZHVsZSdzIHJlcHIuCisKKyAgICAgICAgVXNlZCBieSB0aGUgbW9kdWxlIHR5cGUgd2hlbiB0aGUgbWV0aG9kIGRvZXMgbm90IHJhaXNlCisgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgZXhjZXB0aW9uIHdpbGwgY2F1c2UgTW9kdWxlVHlwZS5fX3JlcHJfXyB0byBpZ25vcmUgdGhpcyBtZXRob2QuCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCkBAIC0xMTksNyArMTc1LDcgQEAKICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gdGhlIGJ5dGVzIGZvcgogICAgICAgICB0aGUgc3BlY2lmaWVkIHBhdGguICBUaGUgcGF0aCBtdXN0IGJlIGEgc3RyLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IKIAogCiBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlcik6CkBAIC0xMzEsMjYgKzE4Nyw0NyBAQAogCiAgICAgIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHdoZXRoZXIgdGhlCi0gICAgICAgIG1vZHVsZSBpcyBhIHBhY2thZ2UuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgYm9vbC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHdoZXRoZXIgdGhlCisgICAgICAgIG1vZHVsZSBpcyBhIHBhY2thZ2UuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgYm9vbC4KIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKwogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gdGhlIGNvZGUgb2JqZWN0Ci0gICAgICAgIGZvciB0aGUgbW9kdWxlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHR5cGVzLkNvZGVUeXBlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICIiIk1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBjb2RlIG9iamVjdCBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgdHlwZXMuQ29kZVR5cGUgaWYgcG9zc2libGUsIGVsc2UKKyAgICAgICAgcmV0dXJucyBOb25lIGlmIGEgY29kZSBvYmplY3QgZG9lcyBub3QgbWFrZSBzZW5zZQorICAgICAgICAoZS5nLiBidWlsdC1pbiBtb2R1bGUpLiBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUKKyAgICAgICAgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlKQogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUKLSAgICAgICAgbW9kdWxlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHN0ci4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgc3RyLgogCi1fcmVnaXN0ZXIoSW5zcGVjdExvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aD0nPHN0cmluZz4nKToKKyAgICAgICAgIiIiQ29tcGlsZSAnZGF0YScgaW50byBhIGNvZGUgb2JqZWN0LgorCisgICAgICAgIFRoZSAnZGF0YScgYXJndW1lbnQgY2FuIGJlIGFueXRoaW5nIHRoYXQgY29tcGlsZSgpIGNhbiBoYW5kbGUuIFRoZSdwYXRoJworICAgICAgICBhcmd1bWVudCBzaG91bGQgYmUgd2hlcmUgdGhlIGRhdGEgd2FzIHJldHJpZXZlZCAod2hlbiBhcHBsaWNhYmxlKS4iIiIKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUoZGF0YSwgcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKKworICAgIGV4ZWNfbW9kdWxlID0gX2Jvb3RzdHJhcC5fTG9hZGVyQmFzaWNzLmV4ZWNfbW9kdWxlCisgICAgbG9hZF9tb2R1bGUgPSBfYm9vdHN0cmFwLl9Mb2FkZXJCYXNpY3MubG9hZF9tb2R1bGUKKworX3JlZ2lzdGVyKEluc3BlY3RMb2FkZXIsIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcikKIAogCiBjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5zcGVjdExvYWRlcik6CkBAIC0xNjUsOCArMjQyLDI5IEBACiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgdGhhdCBfX2ZpbGVfXyBpcyB0byBiZQotICAgICAgICBzZXQgdG8uIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc2V0IHRvLgorCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJNZXRob2QgdG8gcmV0dXJuIHRoZSBjb2RlIG9iamVjdCBmb3IgZnVsbG5hbWUuCisKKyAgICAgICAgU2hvdWxkIHJldHVybiBOb25lIGlmIG5vdCBhcHBsaWNhYmxlIChlLmcuIGJ1aWx0LWluIG1vZHVsZSkuCisgICAgICAgIFJhaXNlIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgc291cmNlID0gc2VsZi5nZXRfc291cmNlKGZ1bGxuYW1lKQorICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlLCBwYXRoKQorCitfcmVnaXN0ZXIoRXhlY3V0aW9uTG9hZGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogCiBjbGFzcyBGaWxlTG9hZGVyKF9ib290c3RyYXAuRmlsZUxvYWRlciwgUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlcik6CkBAIC0xOTgsNyArMjk2LDcgQEAKICAgICBkZWYgcGF0aF9tdGltZShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSAoaW50KSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHBhdGggKHN0cikuIiIiCiAgICAgICAgIGlmIHNlbGYucGF0aF9zdGF0cy5fX2Z1bmNfXyBpcyBTb3VyY2VMb2FkZXIucGF0aF9zdGF0czoKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgcmV0dXJuIGludChzZWxmLnBhdGhfc3RhdHMocGF0aClbJ210aW1lJ10pCiAKICAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKQEAgLTIwOSw3ICszMDcsNyBAQAogICAgICAgICAtICdzaXplJyAob3B0aW9uYWwpIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYucGF0aF9tdGltZS5fX2Z1bmNfXyBpcyBTb3VyY2VMb2FkZXIucGF0aF9tdGltZToKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CkBAIC0yMjAsMTg1ICszMTgsNiBAQAogICAgICAgICBBbnkgbmVlZGVkIGludGVybWVkaWFyeSBkaXJlY3RvcmllcyBhcmUgdG8gYmUgY3JlYXRlZC4gSWYgZm9yIHNvbWUKICAgICAgICAgcmVhc29uIHRoZSBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMsIGZhaWwKICAgICAgICAgc2lsZW50bHkuCi0KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogX3JlZ2lzdGVyKFNvdXJjZUxvYWRlciwgbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCi0KLWNsYXNzIFB5TG9hZGVyKFNvdXJjZUxvYWRlcik6Ci0KLSAgICAiIiJJbXBsZW1lbnQgdGhlIGRlcHJlY2F0ZWQgUHlMb2FkZXIgQUJDIGluIHRlcm1zIG9mIFNvdXJjZUxvYWRlci4KLQotICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgSXQgaXMgc2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQuCi0gICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgbm90IG5lZWRlZCB0aGVuIGltcGxlbWVudCB0aGUKLSAgICBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQgb2YgdGhpcyBjbGFzcy4gSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzCi0gICAgbmVlZGVkLCB0aGVuIHVzZSB0aGUgZm9sbG93aW5nIGlkaW9tIHRvIGhhdmUgYSBzaW5nbGUgY2xhc3MgdGhhdCBpcwotICAgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHM6OgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCi0KLQotICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICMgSW1wbGVtZW50IC4uLgotCi0gICAgICAgICAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICcnJ0ltcGxlbWVudCBzb3VyY2VfcGF0aCBpbiB0ZXJtcyBvZiBnZXRfZmlsZW5hbWUuJycnCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwotCi0gICAgIiIiCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiAgQWNjZXB0cyBhIHN0ciBtb2R1bGUgbmFtZSBhbmQgcmV0dXJucyB0aGUgcGF0aCB0bwotICAgICAgICB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJJbXBsZW1lbnQgZ2V0X2ZpbGVuYW1lIGluIHRlcm1zIG9mIHNvdXJjZV9wYXRoLgotCi0gICAgICAgIEFzIGdldF9maWxlbmFtZSBzaG91bGQgb25seSByZXR1cm4gYSBzb3VyY2UgZmlsZSBwYXRoIHRoZXJlIGlzIG5vCi0gICAgICAgIGNoYW5jZSBvZiB0aGUgcGF0aCBub3QgZXhpc3RpbmcgYnV0IGxvYWRpbmcgc3RpbGwgYmVpbmcgcG9zc2libGUsIHNvCi0gICAgICAgIEltcG9ydEVycm9yIHNob3VsZCBwcm9wYWdhdGUgaW5zdGVhZCBvZiBiZWluZyB0dXJuZWQgaW50byByZXR1cm5pbmcKLSAgICAgICAgTm9uZS4KLQotICAgICAgICAiIiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeUxvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40OyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBTb3VyY2VMb2FkZXIgaW5zdGVhZC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgdGhlIGltcG9ydGxpYiBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBiZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG5hbWU9ZnVsbG5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aAotCi0KLWNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyKToKLQotICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdG8gYXNzaXN0IGluIGxvYWRpbmcgc291cmNlIGFuZCBieXRlY29kZSBieQotICAgIHJlcXVpcmluZyBvbmx5IGJhY2stZW5kIHN0b3JhZ2UgbWV0aG9kcyB0byBiZSBpbXBsZW1lbnRlZC4KLQotICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgUmVtb3ZhbCBpcyBzbGF0ZWQgZm9yIFB5dGhvbiAzLjQuIEltcGxlbWVudAotICAgIHRoZSBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQuIElmIFB5dGhvbiAzLjEgY29tcGF0aWJpbGl0eSBpcyBuZWVkZWQsIHNlZQotICAgIFB5TG9hZGVyLgotCi0gICAgVGhlIG1ldGhvZHMgZ2V0X2NvZGUsIGdldF9zb3VyY2UsIGFuZCBsb2FkX21vZHVsZSBhcmUgaW1wbGVtZW50ZWQgZm9yIHRoZQotICAgIHVzZXIuCi0KLSAgICAiIiIKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHNvdXJjZSBvciBieXRlY29kZSBmaWxlIHBhdGguIiIiCi0gICAgICAgIHBhdGggPSBzZWxmLnNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJubyBzb3VyY2Ugb3IgYnl0ZWNvZGUgcGF0aCBhdmFpbGFibGUgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiezAhcn0iLmZvcm1hdChmdWxsbmFtZSksIG5hbWU9ZnVsbG5hbWUpCi0KLSAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJHZXQgYSBjb2RlIG9iamVjdCBmcm9tIHNvdXJjZSBvciBieXRlY29kZS4iIiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBzbGF0ZWQgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZhbCBpbiBQeXRob24gMy40OyB1c2UgU291cmNlTG9hZGVyIGluc3RlYWQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkLCBzZWUgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF0ZXN0IGRvY3VtZW50YXRpb24gZm9yIFB5TG9hZGVyLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBzZWxmLnNvdXJjZV9tdGltZShmdWxsbmFtZSkKLSAgICAgICAgIyBUcnkgdG8gdXNlIGJ5dGVjb2RlIGlmIGl0IGlzIGF2YWlsYWJsZS4KLSAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWFnaWMgPSBkYXRhWzo0XQotICAgICAgICAgICAgICAgIGlmIGxlbihtYWdpYykgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbWFnaWMgbnVtYmVyIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgICAgICAgICBpZiBsZW4ocmF3X3RpbWVzdGFtcCkgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiYmFkIHRpbWVzdGFtcCBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICBweWNfdGltZXN0YW1wID0gX2Jvb3RzdHJhcC5fcl9sb25nKHJhd190aW1lc3RhbXApCi0gICAgICAgICAgICAgICAgcmF3X3NvdXJjZV9zaXplID0gZGF0YVs4OjEyXQotICAgICAgICAgICAgICAgIGlmIGxlbihyYXdfc291cmNlX3NpemUpICE9IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJiYWQgZmlsZSBzaXplIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgICMgU291cmNlIHNpemUgaXMgdW51c2VkIGFzIHRoZSBBQkMgZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0bwotICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzaXplIG9mIHRoZSBzb3VyY2UgYWhlYWQgb2YgcmVhZGluZyBpdC4KLSAgICAgICAgICAgICAgICBieXRlY29kZSA9IGRhdGFbMTI6XQotICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIG1hZ2ljIG51bWJlciBpcyB2YWxpZC4KLSAgICAgICAgICAgICAgICBpZiBpbXAuZ2V0X21hZ2ljKCkgIT0gbWFnaWM6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgYnl0ZWNvZGUgaXMgbm90IHN0YWxlIChvbmx5IG1hdHRlcnMgd2hlbgotICAgICAgICAgICAgICAgICMgdGhlcmUgaXMgc291cmNlIHRvIGZhbGwgYmFjayBvbi4KLSAgICAgICAgICAgICAgICBpZiBzb3VyY2VfdGltZXN0YW1wOgotICAgICAgICAgICAgICAgICAgICBpZiBweWNfdGltZXN0YW1wIDwgc291cmNlX3RpbWVzdGFtcDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJieXRlY29kZSBpcyBzdGFsZSIsIG5hbWU9ZnVsbG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgIyBJZiBzb3VyY2UgaXMgYXZhaWxhYmxlIGdpdmUgaXQgYSBzaG90LgotICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIEJ5dGVjb2RlIHNlZW1zIGZpbmUsIHNvIHRyeSB0byB1c2UgaXQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWwubG9hZHMoYnl0ZWNvZGUpCi0gICAgICAgIGVsaWYgc291cmNlX3RpbWVzdGFtcCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIHNvdXJjZSBvciBieXRlY29kZSBhdmFpbGFibGUgdG8gY3JlYXRlIGNvZGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBmb3IgezAhcn0iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQotICAgICAgICAjIFVzZSB0aGUgc291cmNlLgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHNvdXJjZV9wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImEgc291cmNlIHBhdGggbXVzdCBleGlzdCB0byBsb2FkIHswfSIuZm9ybWF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSkKLSAgICAgICAgc291cmNlID0gc2VsZi5nZXRfZGF0YShzb3VyY2VfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNvdXJjZSwgc291cmNlX3BhdGgsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgICMgR2VuZXJhdGUgYnl0ZWNvZGUgYW5kIHdyaXRlIGl0IG91dC4KLSAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfYm9vdHN0cmFwLl93X2xvbmcoc291cmNlX3RpbWVzdGFtcCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfYm9vdHN0cmFwLl93X2xvbmcobGVuKHNvdXJjZSkgJiAweEZGRkZGRkZGKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICAgICAgc2VsZi53cml0ZV9ieXRlY29kZShmdWxsbmFtZSwgZGF0YSkKLSAgICAgICAgcmV0dXJuIGNvZGVfb2JqZWN0Ci0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHNvdXJjZV9tdGltZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgcmV0dXJucyBhbiBpbnQKLSAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBzb3VyY2Ugb2YgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiBBY2NlcHRzIGEgc3RyIGZpbGVuYW1lIGFuZCByZXR1cm5zIHRoZSBzdHIgcGF0aG5hbWUKLSAgICAgICAgdG8gdGhlIGJ5dGVjb2RlIGZvciB0aGUgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHdyaXRlX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIGJ5dGVzIG9iamVjdAotICAgICAgICByZXByZXNlbnRpbmcgdGhlIGJ5dGVjb2RlIGZvciB0aGUgbW9kdWxlLiAgUmV0dXJucyBhIGJvb2xlYW4KLSAgICAgICAgcmVwcmVzZW50aW5nIHdoZXRoZXIgdGhlIGJ5dGVjb2RlIHdhcyB3cml0dGVuIG9yIG5vdC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkgYi9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQppbmRleCBmZjgyNmU0Li4yZTFiMmQ3IDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQorKysgYi9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQpAQCAtNSw2ICs1LDcgQEAKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IChTT1VSQ0VfU1VGRklYRVMsIERFQlVHX0JZVEVDT0RFX1NVRkZJWEVTLAogICAgICAgICAgICAgICAgICAgICAgICAgIE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUywgQllURUNPREVfU1VGRklYRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRVhURU5TSU9OX1NVRkZJWEVTKQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgTW9kdWxlU3BlYwogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgQnVpbHRpbkltcG9ydGVyCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBGcm96ZW5JbXBvcnRlcgogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgV2luZG93c1JlZ2lzdHJ5RmluZGVyCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3V0aWwucHkgYi9MaWIvaW1wb3J0bGliL3V0aWwucHkKaW5kZXggMTMxNjQzNy4uNmQ3M2IxZCAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi91dGlsLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdXRpbC5weQpAQCAtMSw5ICsxLDE4IEBACiAiIiJVdGlsaXR5IGNvZGUgZm9yIGNvbnN0cnVjdGluZyBpbXBvcnRlcnMsIGV0Yy4iIiIKIAotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgbW9kdWxlX2Zvcl9sb2FkZXIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IHNldF9sb2FkZXIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IHNldF9wYWNrYWdlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBNQUdJQ19OVU1CRVIKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBkZWNvZGVfc291cmNlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc3BlY19mcm9tX2xvYWRlcgorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24KIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IF9yZXNvbHZlX25hbWUKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IF9maW5kX3NwZWMKKworZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCiAKIAogZGVmIHJlc29sdmVfbmFtZShuYW1lLCBwYWNrYWdlKToKQEAgLTE5LDMgKzI4LDE3NSBAQAogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgbGV2ZWwgKz0gMQogICAgIHJldHVybiBfcmVzb2x2ZV9uYW1lKG5hbWVbbGV2ZWw6XSwgcGFja2FnZSwgbGV2ZWwpCisKKworZGVmIF9maW5kX3NwZWNfZnJvbV9wYXRoKG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzcGVjIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KKworICAgIEZpcnN0LCBzeXMubW9kdWxlcyBpcyBjaGVja2VkIHRvIHNlZSBpZiB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5IGltcG9ydGVkLiBJZgorICAgIHNvLCB0aGVuIHN5cy5tb2R1bGVzW25hbWVdLl9fc3BlY19fIGlzIHJldHVybmVkLiBJZiB0aGF0IGhhcHBlbnMgdG8gYmUKKyAgICBzZXQgdG8gTm9uZSwgdGhlbiBWYWx1ZUVycm9yIGlzIHJhaXNlZC4gSWYgdGhlIG1vZHVsZSBpcyBub3QgaW4KKyAgICBzeXMubW9kdWxlcywgdGhlbiBzeXMubWV0YV9wYXRoIGlzIHNlYXJjaGVkIGZvciBhIHN1aXRhYmxlIHNwZWMgd2l0aCB0aGUKKyAgICB2YWx1ZSBvZiAncGF0aCcgZ2l2ZW4gdG8gdGhlIGZpbmRlcnMuIE5vbmUgaXMgcmV0dXJuZWQgaWYgbm8gc3BlYyBjb3VsZAorICAgIGJlIGZvdW5kLgorCisgICAgRG90dGVkIG5hbWVzIGRvIG5vdCBoYXZlIHRoZWlyIHBhcmVudCBwYWNrYWdlcyBpbXBsaWNpdGx5IGltcG9ydGVkLiBZb3Ugd2lsbAorICAgIG1vc3QgbGlrZWx5IG5lZWQgdG8gZXhwbGljaXRseSBpbXBvcnQgYWxsIHBhcmVudCBwYWNrYWdlcyBpbiB0aGUgcHJvcGVyCisgICAgb3JkZXIgZm9yIGEgc3VibW9kdWxlIHRvIGdldCB0aGUgY29ycmVjdCBzcGVjLgorCisgICAgIiIiCisgICAgaWYgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIHJldHVybiBfZmluZF9zcGVjKG5hbWUsIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fc3BlY19fIGlzIG5vdCBzZXQnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBOb25lJy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gc3BlYworCisKK2RlZiBmaW5kX3NwZWMobmFtZSwgcGFja2FnZT1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNwZWMgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgorCisgICAgRmlyc3QsIHN5cy5tb2R1bGVzIGlzIGNoZWNrZWQgdG8gc2VlIGlmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkgaW1wb3J0ZWQuIElmCisgICAgc28sIHRoZW4gc3lzLm1vZHVsZXNbbmFtZV0uX19zcGVjX18gaXMgcmV0dXJuZWQuIElmIHRoYXQgaGFwcGVucyB0byBiZQorICAgIHNldCB0byBOb25lLCB0aGVuIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBpbgorICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgc3BlYyB3aXRoIHRoZQorICAgIHZhbHVlIG9mICdwYXRoJyBnaXZlbiB0byB0aGUgZmluZGVycy4gTm9uZSBpcyByZXR1cm5lZCBpZiBubyBzcGVjIGNvdWxkCisgICAgYmUgZm91bmQuCisKKyAgICBJZiB0aGUgbmFtZSBpcyBmb3Igc3VibW9kdWxlIChjb250YWlucyBhIGRvdCksIHRoZSBwYXJlbnQgbW9kdWxlIGlzCisgICAgYXV0b21hdGljYWxseSBpbXBvcnRlZC4KKworICAgIFRoZSBuYW1lIGFuZCBwYWNrYWdlIGFyZ3VtZW50cyB3b3JrIHRoZSBzYW1lIGFzIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkuCisgICAgSW4gb3RoZXIgd29yZHMsIHJlbGF0aXZlIG1vZHVsZSBuYW1lcyAod2l0aCBsZWFkaW5nIGRvdHMpIHdvcmsuCisKKyAgICAiIiIKKyAgICBmdWxsbmFtZSA9IHJlc29sdmVfbmFtZShuYW1lLCBwYWNrYWdlKSBpZiBuYW1lLnN0YXJ0c3dpdGgoJy4nKSBlbHNlIG5hbWUKKyAgICBpZiBmdWxsbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIHBhcmVudF9uYW1lID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIGlmIHBhcmVudF9uYW1lOgorICAgICAgICAgICAgIyBVc2UgYnVpbHRpbnMuX19pbXBvcnRfXygpIGluIGNhc2Ugc29tZW9uZSByZXBsYWNlZCBpdC4KKyAgICAgICAgICAgIHBhcmVudCA9IF9faW1wb3J0X18ocGFyZW50X25hbWUsIGZyb21saXN0PVsnX19wYXRoX18nXSkKKyAgICAgICAgICAgIHJldHVybiBfZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXJlbnQuX19wYXRoX18pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gX2ZpbmRfc3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tmdWxsbmFtZV0KKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fc3BlY19fIGlzIG5vdCBzZXQnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBOb25lJy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gc3BlYworCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIF9tb2R1bGVfdG9fbG9hZChuYW1lKToKKyAgICBpc19yZWxvYWQgPSBuYW1lIGluIHN5cy5tb2R1bGVzCisKKyAgICBtb2R1bGUgPSBzeXMubW9kdWxlcy5nZXQobmFtZSkKKyAgICBpZiBub3QgaXNfcmVsb2FkOgorICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBvcGVuKCkgaXMgY2FsbGVkIGFzIHRoZSAnaW8nIG1vZHVsZQorICAgICAgICAjIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlIHRyaWdnZXIgYW4KKyAgICAgICAgIyBpbmZpbml0ZSBsb29wLgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykobmFtZSkKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcHV0dGluZyB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzCisgICAgICAgICMgKG90aGVyd2lzZSBhbiBvcHRpbWl6YXRpb24gc2hvcnRjdXQgaW4gaW1wb3J0LmMgYmVjb21lcyB3cm9uZykKKyAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBUcnVlCisgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBtb2R1bGUKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBpZiBub3QgaXNfcmVsb2FkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IEZhbHNlCisKKworZGVmIHNldF9wYWNrYWdlKGZ4bik6CisgICAgIiIiU2V0IF9fcGFja2FnZV9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQuCisKKyAgICAiIiIKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKKyAgICBkZWYgc2V0X3BhY2thZ2Vfd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCdUaGUgaW1wb3J0IHN5c3RlbSBub3cgdGFrZXMgY2FyZSBvZiB0aGlzIGF1dG9tYXRpY2FsbHkuJywKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgbW9kdWxlID0gZnhuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgcmV0dXJuIHNldF9wYWNrYWdlX3dyYXBwZXIKKworCitkZWYgc2V0X2xvYWRlcihmeG4pOgorICAgICIiIlNldCBfX2xvYWRlcl9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQuCisKKyAgICAiIiIKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKKyAgICBkZWYgc2V0X2xvYWRlcl93cmFwcGVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1RoZSBpbXBvcnQgc3lzdGVtIG5vdyB0YWtlcyBjYXJlIG9mIHRoaXMgYXV0b21hdGljYWxseS4nLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBtb2R1bGUgPSBmeG4oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCisgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICByZXR1cm4gc2V0X2xvYWRlcl93cmFwcGVyCisKKworZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGZ4bik6CisgICAgIiIiRGVjb3JhdG9yIHRvIGhhbmRsZSBzZWxlY3RpbmcgdGhlIHByb3BlciBtb2R1bGUgZm9yIGxvYWRlcnMuCisKKyAgICBUaGUgZGVjb3JhdGVkIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgbW9kdWxlIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBtb2R1bGUKKyAgICBuYW1lLiBUaGUgbW9kdWxlIHBhc3NlZCBpbiB0byB0aGUgZnVuY3Rpb24gaXMgZWl0aGVyIGZyb20gc3lzLm1vZHVsZXMgaWYKKyAgICBpdCBhbHJlYWR5IGV4aXN0cyBvciBpcyBhIG5ldyBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaXMgbmV3LCB0aGVuIF9fbmFtZV9fCisgICAgaXMgc2V0IHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgbWV0aG9kLCBfX2xvYWRlcl9fIGlzIHNldCB0byBzZWxmLCBhbmQKKyAgICBfX3BhY2thZ2VfXyBpcyBzZXQgYWNjb3JkaW5nbHkgKGlmIHNlbGYuaXNfcGFja2FnZSgpIGlzIGRlZmluZWQpIHdpbGwgYmUgc2V0CisgICAgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIChpZiBzZWxmLmlzX3BhY2thZ2UoKSBkb2VzCisgICAgbm90IHdvcmsgZm9yIHRoZSBtb2R1bGUgaXQgd2lsbCBiZSBzZXQgcG9zdC1sb2FkKS4KKworICAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZSBkZWNvcmF0b3IgY3JlYXRlZCB0aGUgbW9kdWxlIGl0IGlzCisgICAgc3Vic2VxdWVudGx5IHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcy4KKworICAgIFRoZSBkZWNvcmF0b3IgYXNzdW1lcyB0aGF0IHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gdGFrZXMgdGhlIG1vZHVsZSBuYW1lIGFzCisgICAgdGhlIHNlY29uZCBhcmd1bWVudC4KKworICAgICIiIgorICAgIHdhcm5pbmdzLndhcm4oJ1RoZSBpbXBvcnQgc3lzdGVtIG5vdyB0YWtlcyBjYXJlIG9mIHRoaXMgYXV0b21hdGljYWxseS4nLAorICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgQGZ1bmN0b29scy53cmFwcyhmeG4pCisgICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggX21vZHVsZV90b19sb2FkKGZ1bGxuYW1lKSBhcyBtb2R1bGU6CisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQorICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgICAgICMgSWYgX19wYWNrYWdlX18gd2FzIG5vdCBzZXQgYWJvdmUsIF9faW1wb3J0X18oKSB3aWxsIGRvIGl0IGxhdGVyLgorICAgICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBtb2R1bGUsICphcmdzLCAqKmt3YXJncykKKworICAgIHJldHVybiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvaW5zcGVjdC5weSBiL0xpYi9pbnNwZWN0LnB5CmluZGV4IDY4MDYyM2QuLmY2ZTFiNDcgMTAwNjQ0Ci0tLSBhL0xpYi9pbnNwZWN0LnB5CisrKyBiL0xpYi9pbnNwZWN0LnB5CkBAIC0zMSw3ICszMSw3IEBACiBfX2F1dGhvcl9fID0gKCdLYS1QaW5nIFllZSA8cGluZ0BsZncub3JnPicsCiAgICAgICAgICAgICAgICdZdXJ5IFNlbGl2YW5vdiA8eXNlbGl2YW5vdkBzcHJ5bWl4LmNvbT4nKQogCi1pbXBvcnQgaW1wCitpbXBvcnQgYXN0CiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IGxpbmVjYWNoZQpAQCAtMzksNiArMzksNyBAQAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdG9rZW5pemUKK2ltcG9ydCB0b2tlbgogaW1wb3J0IHR5cGVzCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBmdW5jdG9vbHMKQEAgLTI2OCwyMSArMjY5LDQwIEBACiAgICAgZWxzZToKICAgICAgICAgbXJvID0gKCkKICAgICByZXN1bHRzID0gW10KLSAgICBmb3Iga2V5IGluIGRpcihvYmplY3QpOgotICAgICAgICAjIEZpcnN0IHRyeSB0byBnZXQgdGhlIHZhbHVlIHZpYSBfX2RpY3RfXy4gU29tZSBkZXNjcmlwdG9ycyBkb24ndAotICAgICAgICAjIGxpa2UgY2FsbGluZyB0aGVpciBfX2dldF9fIChzZWUgYnVnICMxNzg1KS4KLSAgICAgICAgZm9yIGJhc2UgaW4gbXJvOgotICAgICAgICAgICAgaWYga2V5IGluIGJhc2UuX19kaWN0X186Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBiYXNlLl9fZGljdF9fW2tleV0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvYmplY3QsIGtleSkKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBwcm9jZXNzZWQgPSBzZXQoKQorICAgIG5hbWVzID0gZGlyKG9iamVjdCkKKyAgICAjIDpkZCBhbnkgRHluYW1pY0NsYXNzQXR0cmlidXRlcyB0byB0aGUgbGlzdCBvZiBuYW1lcyBpZiBvYmplY3QgaXMgYSBjbGFzczsKKyAgICAjIHRoaXMgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZW50cmllcyBpZiwgZm9yIGV4YW1wbGUsIGEgdmlydHVhbAorICAgICMgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBleGlzdHMKKyAgICB0cnk6CisgICAgICAgIGZvciBiYXNlIGluIG9iamVjdC5fX2Jhc2VzX186CisgICAgICAgICAgICBmb3IgaywgdiBpbiBiYXNlLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaykKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBmb3Iga2V5IGluIG5hbWVzOgorICAgICAgICAjIEZpcnN0IHRyeSB0byBnZXQgdGhlIHZhbHVlIHZpYSBnZXRhdHRyLiAgU29tZSBkZXNjcmlwdG9ycyBkb24ndAorICAgICAgICAjIGxpa2UgY2FsbGluZyB0aGVpciBfX2dldF9fIChzZWUgYnVnICMxNzg1KSwgc28gZmFsbCBiYWNrIHRvCisgICAgICAgICMgbG9va2luZyBpbiB0aGUgX19kaWN0X18uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvYmplY3QsIGtleSkKKyAgICAgICAgICAgICMgaGFuZGxlIHRoZSBkdXBsaWNhdGUga2V5CisgICAgICAgICAgICBpZiBrZXkgaW4gcHJvY2Vzc2VkOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGZvciBiYXNlIGluIG1ybzoKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gYmFzZS5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBiYXNlLl9fZGljdF9fW2tleV0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBjb3VsZCBiZSBhIChjdXJyZW50bHkpIG1pc3Npbmcgc2xvdCBtZW1iZXIsIG9yIGEgYnVnZ3kKKyAgICAgICAgICAgICAgICAjIF9fZGlyX187IGRpc2NhcmQgYW5kIG1vdmUgb24KICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBub3QgcHJlZGljYXRlIG9yIHByZWRpY2F0ZSh2YWx1ZSk6CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCi0gICAgcmVzdWx0cy5zb3J0KCkKKyAgICAgICAgcHJvY2Vzc2VkLmFkZChrZXkpCisgICAgcmVzdWx0cy5zb3J0KGtleT1sYW1iZGEgcGFpcjogcGFpclswXSkKICAgICByZXR1cm4gcmVzdWx0cwogCiBBdHRyaWJ1dGUgPSBuYW1lZHR1cGxlKCdBdHRyaWJ1dGUnLCAnbmFtZSBraW5kIGRlZmluaW5nX2NsYXNzIG9iamVjdCcpCkBAIC0yOTksNjAgKzMxOSwxMDYgQEAKICAgICAgICAgICAgICAgICdjbGFzcyBtZXRob2QnICAgIGNyZWF0ZWQgdmlhIGNsYXNzbWV0aG9kKCkKICAgICAgICAgICAgICAgICdzdGF0aWMgbWV0aG9kJyAgIGNyZWF0ZWQgdmlhIHN0YXRpY21ldGhvZCgpCiAgICAgICAgICAgICAgICAncHJvcGVydHknICAgICAgICBjcmVhdGVkIHZpYSBwcm9wZXJ0eSgpCi0gICAgICAgICAgICAgICAnbWV0aG9kJyAgICAgICAgICBhbnkgb3RoZXIgZmxhdm9yIG9mIG1ldGhvZAorICAgICAgICAgICAgICAgJ21ldGhvZCcgICAgICAgICAgYW55IG90aGVyIGZsYXZvciBvZiBtZXRob2Qgb3IgZGVzY3JpcHRvcgogICAgICAgICAgICAgICAgJ2RhdGEnICAgICAgICAgICAgbm90IGEgbWV0aG9kCiAKICAgICAgICAgMi4gVGhlIGNsYXNzIHdoaWNoIGRlZmluZWQgdGhpcyBhdHRyaWJ1dGUgKGEgY2xhc3MpLgogCi0gICAgICAgIDMuIFRoZSBvYmplY3QgYXMgb2J0YWluZWQgZGlyZWN0bHkgZnJvbSB0aGUgZGVmaW5pbmcgY2xhc3MncwotICAgICAgICAgICBfX2RpY3RfXywgbm90IHZpYSBnZXRhdHRyLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IKLSAgICAgICAgICAgZGF0YSBhdHRyaWJ1dGVzOiAgQy5kYXRhIGlzIGp1c3QgYSBkYXRhIG9iamVjdCwgYnV0Ci0gICAgICAgICAgIEMuX19kaWN0X19bJ2RhdGEnXSBtYXkgYmUgYSBkYXRhIGRlc2NyaXB0b3Igd2l0aCBhZGRpdGlvbmFsCi0gICAgICAgICAgIGluZm8sIGxpa2UgYSBfX2RvY19fIHN0cmluZy4KKyAgICAgICAgMy4gVGhlIG9iamVjdCBhcyBvYnRhaW5lZCBieSBjYWxsaW5nIGdldGF0dHI7IGlmIHRoaXMgZmFpbHMsIG9yIGlmIHRoZQorICAgICAgICAgICByZXN1bHRpbmcgb2JqZWN0IGRvZXMgbm90IGxpdmUgYW55d2hlcmUgaW4gdGhlIGNsYXNzJyBtcm8gKGluY2x1ZGluZworICAgICAgICAgICBtZXRhY2xhc3NlcykgdGhlbiB0aGUgb2JqZWN0IGlzIGxvb2tlZCB1cCBpbiB0aGUgZGVmaW5pbmcgY2xhc3MncworICAgICAgICAgICBkaWN0IChmb3VuZCBieSB3YWxraW5nIHRoZSBtcm8pLgorCisgICAgSWYgb25lIG9mIHRoZSBpdGVtcyBpbiBkaXIoY2xzKSBpcyBzdG9yZWQgaW4gdGhlIG1ldGFjbGFzcyBpdCB3aWxsIG5vdworICAgIGJlIGRpc2NvdmVyZWQgYW5kIG5vdCBoYXZlIE5vbmUgYmUgbGlzdGVkIGFzIHRoZSBjbGFzcyBpbiB3aGljaCBpdCB3YXMKKyAgICBkZWZpbmVkLiAgQW55IGl0ZW1zIHdob3NlIGhvbWUgY2xhc3MgY2Fubm90IGJlIGRpc2NvdmVyZWQgYXJlIHNraXBwZWQuCiAgICAgIiIiCiAKICAgICBtcm8gPSBnZXRtcm8oY2xzKQorICAgIG1ldGFtcm8gPSBnZXRtcm8odHlwZShjbHMpKSAjIGZvciBhdHRyaWJ1dGVzIHN0b3JlZCBpbiB0aGUgbWV0YWNsYXNzCisgICAgbWV0YW1ybyA9IHR1cGxlKFtjbHMgZm9yIGNscyBpbiBtZXRhbXJvIGlmIGNscyBub3QgaW4gKHR5cGUsIG9iamVjdCldKQorICAgIGNsYXNzX2Jhc2VzID0gKGNscywpICsgbXJvCisgICAgYWxsX2Jhc2VzID0gY2xhc3NfYmFzZXMgKyBtZXRhbXJvCiAgICAgbmFtZXMgPSBkaXIoY2xzKQorICAgICMgOmRkIGFueSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGVzIHRvIHRoZSBsaXN0IG9mIG5hbWVzOworICAgICMgdGhpcyBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZSBlbnRyaWVzIGlmLCBmb3IgZXhhbXBsZSwgYSB2aXJ0dWFsCisgICAgIyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgRHluYW1pY0NsYXNzQXR0cmlidXRlIGV4aXN0cy4KKyAgICBmb3IgYmFzZSBpbiBtcm86CisgICAgICAgIGZvciBrLCB2IGluIGJhc2UuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaykKICAgICByZXN1bHQgPSBbXQorICAgIHByb2Nlc3NlZCA9IHNldCgpCisKICAgICBmb3IgbmFtZSBpbiBuYW1lczoKICAgICAgICAgIyBHZXQgdGhlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWUsIGFuZCB3aGVyZSBpdCB3YXMgZGVmaW5lZC4KKyAgICAgICAgIyBOb3JtYWwgb2JqZWN0cyB3aWxsIGJlIGxvb2tlZCB1cCB3aXRoIGJvdGggZ2V0YXR0ciBhbmQgZGlyZWN0bHkgaW4KKyAgICAgICAgIyBpdHMgY2xhc3MnIGRpY3QgKGluIGNhc2UgZ2V0YXR0ciBmYWlscyBbYnVnICMxNzg1XSwgYW5kIGFsc28gdG8gbG9vaworICAgICAgICAjIGZvciBhIGRvY3N0cmluZykuCisgICAgICAgICMgRm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZXMgb24gdGhlIHNlY29uZCBwYXNzIHdlIG9ubHkgbG9vayBpbiB0aGUKKyAgICAgICAgIyBjbGFzcydzIGRpY3QuCisgICAgICAgICMKICAgICAgICAgIyBHZXR0aW5nIGFuIG9iaiBmcm9tIHRoZSBfX2RpY3RfXyBzb21ldGltZXMgcmV2ZWFscyBtb3JlIHRoYW4KICAgICAgICAgIyB1c2luZyBnZXRhdHRyLiAgU3RhdGljIGFuZCBjbGFzcyBtZXRob2RzIGFyZSBkcmFtYXRpYyBleGFtcGxlcy4KLSAgICAgICAgIyBGdXJ0aGVybW9yZSwgc29tZSBvYmplY3RzIG1heSByYWlzZSBhbiBFeGNlcHRpb24gd2hlbiBmZXRjaGVkIHdpdGgKLSAgICAgICAgIyBnZXRhdHRyKCkuIFRoaXMgaXMgdGhlIGNhc2Ugd2l0aCBzb21lIGRlc2NyaXB0b3JzIChidWcgIzE3ODUpLgotICAgICAgICAjIFRodXMsIHdlIG9ubHkgdXNlIGdldGF0dHIoKSBhcyBhIGxhc3QgcmVzb3J0LgogICAgICAgICBob21lY2xzID0gTm9uZQotICAgICAgICBmb3IgYmFzZSBpbiAoY2xzLCkgKyBtcm86Ci0gICAgICAgICAgICBpZiBuYW1lIGluIGJhc2UuX19kaWN0X186Ci0gICAgICAgICAgICAgICAgb2JqID0gYmFzZS5fX2RpY3RfX1tuYW1lXQotICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBiYXNlCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoY2xzLCBuYW1lKQotICAgICAgICAgICAgaG9tZWNscyA9IGdldGF0dHIob2JqLCAiX19vYmpjbGFzc19fIiwgaG9tZWNscykKLQotICAgICAgICAjIENsYXNzaWZ5IHRoZSBvYmplY3QuCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdGF0aWNtZXRob2QpOgotICAgICAgICAgICAga2luZCA9ICJzdGF0aWMgbWV0aG9kIgotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBjbGFzc21ldGhvZCk6Ci0gICAgICAgICAgICBraW5kID0gImNsYXNzIG1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgcHJvcGVydHkpOgotICAgICAgICAgICAga2luZCA9ICJwcm9wZXJ0eSIKLSAgICAgICAgZWxpZiBpc21ldGhvZGRlc2NyaXB0b3Iob2JqKToKLSAgICAgICAgICAgIGtpbmQgPSAibWV0aG9kIgotICAgICAgICBlbGlmIGlzZGF0YWRlc2NyaXB0b3Iob2JqKToKLSAgICAgICAgICAgIGtpbmQgPSAiZGF0YSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9ial92aWFfZ2V0YXR0ciA9IGdldGF0dHIoY2xzLCBuYW1lKQotICAgICAgICAgICAgaWYgKGlzZnVuY3Rpb24ob2JqX3ZpYV9nZXRhdHRyKSBvcgotICAgICAgICAgICAgICAgIGlzbWV0aG9kZGVzY3JpcHRvcihvYmpfdmlhX2dldGF0dHIpKToKLSAgICAgICAgICAgICAgICBraW5kID0gIm1ldGhvZCIKKyAgICAgICAgZ2V0X29iaiA9IE5vbmUKKyAgICAgICAgZGljdF9vYmogPSBOb25lCisgICAgICAgIGlmIG5hbWUgbm90IGluIHByb2Nlc3NlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdfX2RpY3RfXyc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiX19kaWN0X18gaXMgc3BlY2lhbCwgZG9uJ3Qgd2FudCB0aGUgcHJveHkiKQorICAgICAgICAgICAgICAgIGdldF9vYmogPSBnZXRhdHRyKGNscywgbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAga2luZCA9ICJkYXRhIgotICAgICAgICAgICAgb2JqID0gb2JqX3ZpYV9nZXRhdHRyCi0KKyAgICAgICAgICAgICAgICBob21lY2xzID0gZ2V0YXR0cihnZXRfb2JqLCAiX19vYmpjbGFzc19fIiwgaG9tZWNscykKKyAgICAgICAgICAgICAgICBpZiBob21lY2xzIG5vdCBpbiBjbGFzc19iYXNlczoKKyAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgcmVzdWx0aW5nIG9iamVjdCBkb2VzIG5vdCBsaXZlIHNvbWV3aGVyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBtcm8sIGRyb3AgaXQgYW5kIHNlYXJjaCB0aGUgbXJvIG1hbnVhbGx5CisgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGxhc3RfY2xzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IGxvb2sgaW4gdGhlIGNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNyY2hfY2xzIGluIGNsYXNzX2Jhc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjaF9vYmogPSBnZXRhdHRyKHNyY2hfY2xzLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3JjaF9vYmogPT0gZ2V0X29iajoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NscyA9IHNyY2hfY2xzCisgICAgICAgICAgICAgICAgICAgICMgdGhlbiBjaGVjayB0aGUgbWV0YWNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNyY2hfY2xzIGluIG1ldGFtcm86CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjaF9vYmogPSBzcmNoX2Nscy5fX2dldGF0dHJfXyhjbHMsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNyY2hfb2JqID09IGdldF9vYmo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jbHMgPSBzcmNoX2NscworICAgICAgICAgICAgICAgICAgICBpZiBsYXN0X2NscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBsYXN0X2NscworICAgICAgICBmb3IgYmFzZSBpbiBhbGxfYmFzZXM6CisgICAgICAgICAgICBpZiBuYW1lIGluIGJhc2UuX19kaWN0X186CisgICAgICAgICAgICAgICAgZGljdF9vYmogPSBiYXNlLl9fZGljdF9fW25hbWVdCisgICAgICAgICAgICAgICAgaWYgaG9tZWNscyBub3QgaW4gbWV0YW1ybzoKKyAgICAgICAgICAgICAgICAgICAgaG9tZWNscyA9IGJhc2UKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBob21lY2xzIGlzIE5vbmU6CisgICAgICAgICAgICAjIHVuYWJsZSB0byBsb2NhdGUgdGhlIGF0dHJpYnV0ZSBhbnl3aGVyZSwgbW9zdCBsaWtlbHkgZHVlIHRvCisgICAgICAgICAgICAjIGJ1Z2d5IGN1c3RvbSBfX2Rpcl9fOyBkaXNjYXJkIGFuZCBtb3ZlIG9uCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBvYmogPSBnZXRfb2JqIG9yIGRpY3Rfb2JqCisgICAgICAgICMgQ2xhc3NpZnkgdGhlIG9iamVjdCBvciBpdHMgZGVzY3JpcHRvci4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShkaWN0X29iaiwgc3RhdGljbWV0aG9kKToKKyAgICAgICAgICAgIGtpbmQgPSAic3RhdGljIG1ldGhvZCIKKyAgICAgICAgICAgIG9iaiA9IGRpY3Rfb2JqCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkaWN0X29iaiwgY2xhc3NtZXRob2QpOgorICAgICAgICAgICAga2luZCA9ICJjbGFzcyBtZXRob2QiCisgICAgICAgICAgICBvYmogPSBkaWN0X29iagorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIHByb3BlcnR5KToKKyAgICAgICAgICAgIGtpbmQgPSAicHJvcGVydHkiCisgICAgICAgICAgICBvYmogPSBkaWN0X29iagorICAgICAgICBlbGlmIGlzcm91dGluZShvYmopOgorICAgICAgICAgICAga2luZCA9ICJtZXRob2QiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBraW5kID0gImRhdGEiCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoQXR0cmlidXRlKG5hbWUsIGtpbmQsIGhvbWVjbHMsIG9iaikpCi0KKyAgICAgICAgcHJvY2Vzc2VkLmFkZChuYW1lKQogICAgIHJldHVybiByZXN1bHQKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbGFzcyBoZWxwZXJzCkBAIC0zNjEsNiArNDI3LDQwIEBACiAgICAgIlJldHVybiB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgKGluY2x1ZGluZyBjbHMpIGluIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyLiIKICAgICByZXR1cm4gY2xzLl9fbXJvX18KIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmdW5jdGlvbiBoZWxwZXJzCisKK2RlZiB1bndyYXAoZnVuYywgKiwgc3RvcD1Ob25lKToKKyAgICAiIiJHZXQgdGhlIG9iamVjdCB3cmFwcGVkIGJ5ICpmdW5jKi4KKworICAgRm9sbG93cyB0aGUgY2hhaW4gb2YgOmF0dHI6YF9fd3JhcHBlZF9fYCBhdHRyaWJ1dGVzIHJldHVybmluZyB0aGUgbGFzdAorICAgb2JqZWN0IGluIHRoZSBjaGFpbi4KKworICAgKnN0b3AqIGlzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGFjY2VwdGluZyBhbiBvYmplY3QgaW4gdGhlIHdyYXBwZXIgY2hhaW4KKyAgIGFzIGl0cyBzb2xlIGFyZ3VtZW50IHRoYXQgYWxsb3dzIHRoZSB1bndyYXBwaW5nIHRvIGJlIHRlcm1pbmF0ZWQgZWFybHkgaWYKKyAgIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgdHJ1ZSB2YWx1ZS4gSWYgdGhlIGNhbGxiYWNrIG5ldmVyIHJldHVybnMgYSB0cnVlCisgICB2YWx1ZSwgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBjaGFpbiBpcyByZXR1cm5lZCBhcyB1c3VhbC4gRm9yIGV4YW1wbGUsCisgICA6ZnVuYzpgc2lnbmF0dXJlYCB1c2VzIHRoaXMgdG8gc3RvcCB1bndyYXBwaW5nIGlmIGFueSBvYmplY3QgaW4gdGhlCisgICBjaGFpbiBoYXMgYSBgYF9fc2lnbmF0dXJlX19gYCBhdHRyaWJ1dGUgZGVmaW5lZC4KKworICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIGEgY3ljbGUgaXMgZW5jb3VudGVyZWQuCisKKyAgICAiIiIKKyAgICBpZiBzdG9wIGlzIE5vbmU6CisgICAgICAgIGRlZiBfaXNfd3JhcHBlcihmKToKKyAgICAgICAgICAgIHJldHVybiBoYXNhdHRyKGYsICdfX3dyYXBwZWRfXycpCisgICAgZWxzZToKKyAgICAgICAgZGVmIF9pc193cmFwcGVyKGYpOgorICAgICAgICAgICAgcmV0dXJuIGhhc2F0dHIoZiwgJ19fd3JhcHBlZF9fJykgYW5kIG5vdCBzdG9wKGYpCisgICAgZiA9IGZ1bmMgICMgcmVtZW1iZXIgdGhlIG9yaWdpbmFsIGZ1bmMgZm9yIGVycm9yIHJlcG9ydGluZworICAgIG1lbW8gPSB7aWQoZil9ICMgTWVtb2lzZSBieSBpZCB0byB0b2xlcmF0ZSBub24taGFzaGFibGUgb2JqZWN0cworICAgIHdoaWxlIF9pc193cmFwcGVyKGZ1bmMpOgorICAgICAgICBmdW5jID0gZnVuYy5fX3dyYXBwZWRfXworICAgICAgICBpZF9mdW5jID0gaWQoZnVuYykKKyAgICAgICAgaWYgaWRfZnVuYyBpbiBtZW1vOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignd3JhcHBlciBsb29wIHdoZW4gdW53cmFwcGluZyB7IXJ9Jy5mb3JtYXQoZikpCisgICAgICAgIG1lbW8uYWRkKGlkX2Z1bmMpCisgICAgcmV0dXJuIGZ1bmMKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzb3VyY2UgY29kZSBleHRyYWN0aW9uCiBkZWYgaW5kZW50c2l6ZShsaW5lKToKICAgICAiIiJSZXR1cm4gdGhlIGluZGVudCBzaXplLCBpbiBzcGFjZXMsIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgb2YgdGV4dC4iIiIKQEAgLTQxNyw5ICs1MTcsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19maWxlX18KICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIGEgYnVpbHQtaW4gbW9kdWxlJy5mb3JtYXQob2JqZWN0KSkKICAgICBpZiBpc2NsYXNzKG9iamVjdCk6Ci0gICAgICAgIG9iamVjdCA9IHN5cy5tb2R1bGVzLmdldChvYmplY3QuX19tb2R1bGVfXykKLSAgICAgICAgaWYgaGFzYXR0cihvYmplY3QsICdfX2ZpbGVfXycpOgotICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2ZpbGVfXworICAgICAgICBpZiBoYXNhdHRyKG9iamVjdCwgJ19fbW9kdWxlX18nKToKKyAgICAgICAgICAgIG9iamVjdCA9IHN5cy5tb2R1bGVzLmdldChvYmplY3QuX19tb2R1bGVfXykKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqZWN0LCAnX19maWxlX18nKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZmlsZV9fCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBhIGJ1aWx0LWluIGNsYXNzJy5mb3JtYXQob2JqZWN0KSkKICAgICBpZiBpc21ldGhvZChvYmplY3QpOgogICAgICAgICBvYmplY3QgPSBvYmplY3QuX19mdW5jX18KQEAgLTQ0MCw2ICs1NDEsOSBAQAogICAgICIiIkdldCB0aGUgbW9kdWxlIG5hbWUsIHN1ZmZpeCwgbW9kZSwgYW5kIG1vZHVsZSB0eXBlIGZvciBhIGdpdmVuIGZpbGUuIiIiCiAgICAgd2FybmluZ3Mud2FybignaW5zcGVjdC5nZXRtb2R1bGVpbmZvKCkgaXMgZGVwcmVjYXRlZCcsIERlcHJlY2F0aW9uV2FybmluZywKICAgICAgICAgICAgICAgICAgIDIpCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIGltcG9ydCBpbXAKICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKICAgICBzdWZmaXhlcyA9IFsoLWxlbihzdWZmaXgpLCBzdWZmaXgsIG1vZGUsIG10eXBlKQogICAgICAgICAgICAgICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCBtdHlwZSBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCldCkBAIC00NzYsNyArNTgwLDcgQEAKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CiAgICAgICAgIHJldHVybiBmaWxlbmFtZQogICAgICMgb25seSByZXR1cm4gYSBub24tZXhpc3RlbnQgZmlsZW5hbWUgaWYgdGhlIG1vZHVsZSBoYXMgYSBQRVAgMzAyIGxvYWRlcgotICAgIGlmIGhhc2F0dHIoZ2V0bW9kdWxlKG9iamVjdCwgZmlsZW5hbWUpLCAnX19sb2FkZXJfXycpOgorICAgIGlmIGdldGF0dHIoZ2V0bW9kdWxlKG9iamVjdCwgZmlsZW5hbWUpLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICByZXR1cm4gZmlsZW5hbWUKICAgICAjIG9yIGl0IGlzIGluIHRoZSBsaW5lY2FjaGUKICAgICBpZiBmaWxlbmFtZSBpbiBsaW5lY2FjaGUuY2FjaGU6CkBAIC01NDUsMTMgKzY0OSwxMyBAQAogCiAgICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsCiAgICAgb3IgY29kZSBvYmplY3QuICBUaGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBsaXN0IG9mIGFsbCB0aGUgbGluZXMKLSAgICBpbiB0aGUgZmlsZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGV4ZXMgYSBsaW5lIGluIHRoYXQgbGlzdC4gIEFuIElPRXJyb3IKKyAgICBpbiB0aGUgZmlsZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGV4ZXMgYSBsaW5lIGluIHRoYXQgbGlzdC4gIEFuIE9TRXJyb3IKICAgICBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAKICAgICBmaWxlID0gZ2V0ZmlsZShvYmplY3QpCiAgICAgc291cmNlZmlsZSA9IGdldHNvdXJjZWZpbGUob2JqZWN0KQogICAgIGlmIG5vdCBzb3VyY2VmaWxlIGFuZCBmaWxlWzoxXSArIGZpbGVbLTE6XSAhPSAnPD4nOgotICAgICAgICByYWlzZSBJT0Vycm9yKCdzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlJykKKyAgICAgICAgcmFpc2UgT1NFcnJvcignc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZScpCiAgICAgZmlsZSA9IHNvdXJjZWZpbGUgaWYgc291cmNlZmlsZSBlbHNlIGZpbGUKIAogICAgIG1vZHVsZSA9IGdldG1vZHVsZShvYmplY3QsIGZpbGUpCkBAIC01NjAsNyArNjY0LDcgQEAKICAgICBlbHNlOgogICAgICAgICBsaW5lcyA9IGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlKQogICAgIGlmIG5vdCBsaW5lczoKLSAgICAgICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGdldCBzb3VyY2UgY29kZScpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBnZXQgc291cmNlIGNvZGUnKQogCiAgICAgaWYgaXNtb2R1bGUob2JqZWN0KToKICAgICAgICAgcmV0dXJuIGxpbmVzLCAwCkBAIC01ODYsNyArNjkwLDcgQEAKICAgICAgICAgICAgIGNhbmRpZGF0ZXMuc29ydCgpCiAgICAgICAgICAgICByZXR1cm4gbGluZXMsIGNhbmRpZGF0ZXNbMF1bMV0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNsYXNzIGRlZmluaXRpb24nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgY2xhc3MgZGVmaW5pdGlvbicpCiAKICAgICBpZiBpc21ldGhvZChvYmplY3QpOgogICAgICAgICBvYmplY3QgPSBvYmplY3QuX19mdW5jX18KQEAgLTU5OCwxNCArNzAyLDE0IEBACiAgICAgICAgIG9iamVjdCA9IG9iamVjdC5mX2NvZGUKICAgICBpZiBpc2NvZGUob2JqZWN0KToKICAgICAgICAgaWYgbm90IGhhc2F0dHIob2JqZWN0LCAnY29fZmlyc3RsaW5lbm8nKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uIGRlZmluaXRpb24nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgZnVuY3Rpb24gZGVmaW5pdGlvbicpCiAgICAgICAgIGxudW0gPSBvYmplY3QuY29fZmlyc3RsaW5lbm8gLSAxCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUocideKFxzKmRlZlxzKXwoLiooPzwhXHcpbGFtYmRhKDp8XHMpKXxeKFxzKkApJykKICAgICAgICAgd2hpbGUgbG51bSA+IDA6CiAgICAgICAgICAgICBpZiBwYXQubWF0Y2gobGluZXNbbG51bV0pOiBicmVhawogICAgICAgICAgICAgbG51bSA9IGxudW0gLSAxCiAgICAgICAgIHJldHVybiBsaW5lcywgbG51bQotICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNvZGUgb2JqZWN0JykKKyAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZmluZCBjb2RlIG9iamVjdCcpCiAKIGRlZiBnZXRjb21tZW50cyhvYmplY3QpOgogICAgICIiIkdldCBsaW5lcyBvZiBjb21tZW50cyBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYW4gb2JqZWN0J3Mgc291cmNlIGNvZGUuCkBAIC02MTQsNyArNzE4LDcgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGxpbmVzLCBsbnVtID0gZmluZHNvdXJjZShvYmplY3QpCi0gICAgZXhjZXB0IChJT0Vycm9yLCBUeXBlRXJyb3IpOgorICAgIGV4Y2VwdCAoT1NFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGlmIGlzbW9kdWxlKG9iamVjdCk6CkBAIC03MTAsNyArODE0LDcgQEAKICAgICBUaGUgYXJndW1lbnQgbWF5IGJlIGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCBmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIGxpc3Qgb2YgdGhlIGxpbmVzCiAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgb2JqZWN0IGFuZCB0aGUgbGluZSBudW1iZXIgaW5kaWNhdGVzIHdoZXJlIGluIHRoZQotICAgIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoZSBmaXJzdCBsaW5lIG9mIGNvZGUgd2FzIGZvdW5kLiAgQW4gSU9FcnJvciBpcworICAgIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoZSBmaXJzdCBsaW5lIG9mIGNvZGUgd2FzIGZvdW5kLiAgQW4gT1NFcnJvciBpcwogICAgIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2Uob2JqZWN0KQogCkBAIC03MjIsNyArODI2LDcgQEAKIAogICAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc2luZ2xlIHN0cmluZy4gIEFuCi0gICAgSU9FcnJvciBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCisgICAgT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAgICAgbGluZXMsIGxudW0gPSBnZXRzb3VyY2VsaW5lcyhvYmplY3QpCiAgICAgcmV0dXJuICcnLmpvaW4obGluZXMpCiAKQEAgLTgzMSw3ICs5MzUsNyBAQAogICAgICdhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3b25seWRlZmF1bHRzLCBhbm5vdGF0aW9ucycpCiAKIGRlZiBnZXRmdWxsYXJnc3BlYyhmdW5jKToKLSAgICAiIiJHZXQgdGhlIG5hbWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBvZiBhIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLgorICAgICIiIkdldCB0aGUgbmFtZXMgYW5kIGRlZmF1bHQgdmFsdWVzIG9mIGEgY2FsbGFibGUgb2JqZWN0J3MgYXJndW1lbnRzLgogCiAgICAgQSB0dXBsZSBvZiBzZXZlbiB0aGluZ3MgaXMgcmV0dXJuZWQ6CiAgICAgKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywga3dvbmx5YXJncywga3dvbmx5ZGVmYXVsdHMgYW5ub3RhdGlvbnMpLgpAQCAtODQ1LDEzICs5NDksNzggQEAKICAgICBUaGUgZmlyc3QgZm91ciBpdGVtcyBpbiB0aGUgdHVwbGUgY29ycmVzcG9uZCB0byBnZXRhcmdzcGVjKCkuCiAgICAgIiIiCiAKLSAgICBpZiBpc21ldGhvZChmdW5jKToKLSAgICAgICAgZnVuYyA9IGZ1bmMuX19mdW5jX18KLSAgICBpZiBub3QgaXNmdW5jdGlvbihmdW5jKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicuZm9ybWF0KGZ1bmMpKQotICAgIGFyZ3MsIHZhcmFyZ3MsIGt3b25seWFyZ3MsIHZhcmt3ID0gX2dldGZ1bGxhcmdzKGZ1bmMuX19jb2RlX18pCi0gICAgcmV0dXJuIEZ1bGxBcmdTcGVjKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBmdW5jLl9fZGVmYXVsdHNfXywKLSAgICAgICAgICAgIGt3b25seWFyZ3MsIGZ1bmMuX19rd2RlZmF1bHRzX18sIGZ1bmMuX19hbm5vdGF0aW9uc19fKQorICAgIHRyeToKKyAgICAgICAgIyBSZTogYHNraXBfYm91bmRfYXJnPUZhbHNlYAorICAgICAgICAjCisgICAgICAgICMgVGhlcmUgaXMgYSBub3RhYmxlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3VyIGJldHdlZW4gZ2V0ZnVsbGFyZ3NwZWMKKyAgICAgICAgIyBhbmQgU2lnbmF0dXJlOiB0aGUgZm9ybWVyIGFsd2F5cyByZXR1cm5zICdzZWxmJyBwYXJhbWV0ZXIgZm9yIGJvdW5kCisgICAgICAgICMgbWV0aG9kcywgd2hlcmVhcyB0aGUgU2lnbmF0dXJlIGFsd2F5cyBzaG93cyB0aGUgYWN0dWFsIGNhbGxpbmcKKyAgICAgICAgIyBzaWduYXR1cmUgb2YgdGhlIHBhc3NlZCBvYmplY3QuCisgICAgICAgICMKKyAgICAgICAgIyBUbyBzaW11bGF0ZSB0aGlzIGJlaGF2aW91ciwgd2UgInVuYmluZCIgYm91bmQgbWV0aG9kcywgdG8gdHJpY2sKKyAgICAgICAgIyBpbnNwZWN0LnNpZ25hdHVyZSB0byBhbHdheXMgcmV0dXJuIHRoZWlyIGZpcnN0IHBhcmFtZXRlciAoInNlbGYiLAorICAgICAgICAjIHVzdWFsbHkpCisKKyAgICAgICAgIyBSZTogYGZvbGxvd193cmFwcGVyX2NoYWlucz1GYWxzZWAKKyAgICAgICAgIworICAgICAgICAjIGdldGZ1bGxhcmdzcGVjKCkgaGlzdG9yaWNhbGx5IGlnbm9yZWQgX193cmFwcGVkX18gYXR0cmlidXRlcywKKyAgICAgICAgIyBzbyB3ZSBlbnN1cmUgdGhhdCByZW1haW5zIHRoZSBjYXNlIGluIDMuMysKKworICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2ludGVybmFsKGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYm91bmRfYXJnPUZhbHNlKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CisgICAgICAgICMgTW9zdCBvZiB0aGUgdGltZXMgJ3NpZ25hdHVyZScgd2lsbCByYWlzZSBWYWx1ZUVycm9yLgorICAgICAgICAjIEJ1dCwgaXQgY2FuIGFsc28gcmFpc2UgQXR0cmlidXRlRXJyb3IsIGFuZCwgbWF5YmUgc29tZXRoaW5nCisgICAgICAgICMgZWxzZS4gU28gdG8gYmUgZnVsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUsIHdlIGNhdGNoIGFsbAorICAgICAgICAjIHBvc3NpYmxlIGV4Y2VwdGlvbnMgaGVyZSwgYW5kIHJlcmFpc2UgYSBUeXBlRXJyb3IuCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigndW5zdXBwb3J0ZWQgY2FsbGFibGUnKSBmcm9tIGV4CisKKyAgICBhcmdzID0gW10KKyAgICB2YXJhcmdzID0gTm9uZQorICAgIHZhcmt3ID0gTm9uZQorICAgIGt3b25seWFyZ3MgPSBbXQorICAgIGRlZmF1bHRzID0gKCkKKyAgICBhbm5vdGF0aW9ucyA9IHt9CisgICAgZGVmYXVsdHMgPSAoKQorICAgIGt3ZGVmYXVsdHMgPSB7fQorCisgICAgaWYgc2lnLnJldHVybl9hbm5vdGF0aW9uIGlzIG5vdCBzaWcuZW1wdHk6CisgICAgICAgIGFubm90YXRpb25zWydyZXR1cm4nXSA9IHNpZy5yZXR1cm5fYW5ub3RhdGlvbgorCisgICAgZm9yIHBhcmFtIGluIHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICBraW5kID0gcGFyYW0ua2luZAorICAgICAgICBuYW1lID0gcGFyYW0ubmFtZQorCisgICAgICAgIGlmIGtpbmQgaXMgX1BPU0lUSU9OQUxfT05MWToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG5hbWUpCisgICAgICAgIGVsaWYga2luZCBpcyBfUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgYXJncy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGlmIHBhcmFtLmRlZmF1bHQgaXMgbm90IHBhcmFtLmVtcHR5OgorICAgICAgICAgICAgICAgIGRlZmF1bHRzICs9IChwYXJhbS5kZWZhdWx0LCkKKyAgICAgICAgZWxpZiBraW5kIGlzIF9WQVJfUE9TSVRJT05BTDoKKyAgICAgICAgICAgIHZhcmFyZ3MgPSBuYW1lCisgICAgICAgIGVsaWYga2luZCBpcyBfS0VZV09SRF9PTkxZOgorICAgICAgICAgICAga3dvbmx5YXJncy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGlmIHBhcmFtLmRlZmF1bHQgaXMgbm90IHBhcmFtLmVtcHR5OgorICAgICAgICAgICAgICAgIGt3ZGVmYXVsdHNbbmFtZV0gPSBwYXJhbS5kZWZhdWx0CisgICAgICAgIGVsaWYga2luZCBpcyBfVkFSX0tFWVdPUkQ6CisgICAgICAgICAgICB2YXJrdyA9IG5hbWUKKworICAgICAgICBpZiBwYXJhbS5hbm5vdGF0aW9uIGlzIG5vdCBwYXJhbS5lbXB0eToKKyAgICAgICAgICAgIGFubm90YXRpb25zW25hbWVdID0gcGFyYW0uYW5ub3RhdGlvbgorCisgICAgaWYgbm90IGt3ZGVmYXVsdHM6CisgICAgICAgICMgY29tcGF0aWJpbGl0eSB3aXRoICdmdW5jLl9fa3dkZWZhdWx0c19fJworICAgICAgICBrd2RlZmF1bHRzID0gTm9uZQorCisgICAgaWYgbm90IGRlZmF1bHRzOgorICAgICAgICAjIGNvbXBhdGliaWxpdHkgd2l0aCAnZnVuYy5fX2RlZmF1bHRzX18nCisgICAgICAgIGRlZmF1bHRzID0gTm9uZQorCisgICAgcmV0dXJuIEZ1bGxBcmdTcGVjKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncywga3dkZWZhdWx0cywgYW5ub3RhdGlvbnMpCisKIAogQXJnSW5mbyA9IG5hbWVkdHVwbGUoJ0FyZ0luZm8nLCAnYXJncyB2YXJhcmdzIGtleXdvcmRzIGxvY2FscycpCiAKQEAgLTk1Niw3ICsxMTI1LDcgQEAKICAgICBlbGlmIG1pc3NpbmcgPT0gMjoKICAgICAgICAgcyA9ICJ7fSBhbmQge30iLmZvcm1hdCgqbmFtZXMpCiAgICAgZWxzZToKLSAgICAgICAgdGFpbCA9ICIsIHt9IGFuZCB7fSIuZm9ybWF0KG5hbWVzWy0yOl0pCisgICAgICAgIHRhaWwgPSAiLCB7fSBhbmQge30iLmZvcm1hdCgqbmFtZXNbLTI6XSkKICAgICAgICAgZGVsIG5hbWVzWy0yOl0KICAgICAgICAgcyA9ICIsICIuam9pbihuYW1lcykgKyB0YWlsCiAgICAgcmFpc2UgVHlwZUVycm9yKCIlcygpIG1pc3NpbmcgJWkgcmVxdWlyZWQgJXMgYXJndW1lbnQlczogJXMiICUKQEAgLTEwMzksNyArMTIwOCw3IEBACiAgICAgbWlzc2luZyA9IDAKICAgICBmb3Iga3dhcmcgaW4ga3dvbmx5YXJnczoKICAgICAgICAgaWYga3dhcmcgbm90IGluIGFyZzJ2YWx1ZToKLSAgICAgICAgICAgIGlmIGt3YXJnIGluIGt3b25seWRlZmF1bHRzOgorICAgICAgICAgICAgaWYga3dvbmx5ZGVmYXVsdHMgYW5kIGt3YXJnIGluIGt3b25seWRlZmF1bHRzOgogICAgICAgICAgICAgICAgIGFyZzJ2YWx1ZVtrd2FyZ10gPSBrd29ubHlkZWZhdWx0c1trd2FyZ10KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbWlzc2luZyArPSAxCkBAIC0xMTI1LDcgKzEyOTQsNyBAQAogICAgICAgICBzdGFydCA9IGxpbmVubyAtIDEgLSBjb250ZXh0Ly8yCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpbmVzLCBsbnVtID0gZmluZHNvdXJjZShmcmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbGluZXMgPSBpbmRleCA9IE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN0YXJ0ID0gbWF4KHN0YXJ0LCAxKQpAQCAtMTMxNywxMyArMTQ4NiwxNSBAQAogCiBfV3JhcHBlckRlc2NyaXB0b3IgPSB0eXBlKHR5cGUuX19jYWxsX18pCiBfTWV0aG9kV3JhcHBlciA9IHR5cGUoYWxsLl9fY2FsbF9fKQorX0NsYXNzTWV0aG9kV3JhcHBlciA9IHR5cGUoaW50Ll9fZGljdF9fWydmcm9tX2J5dGVzJ10pCiAKIF9Ob25Vc2VyRGVmaW5lZENhbGxhYmxlcyA9IChfV3JhcHBlckRlc2NyaXB0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01ldGhvZFdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NsYXNzTWV0aG9kV3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5CdWlsdGluRnVuY3Rpb25UeXBlKQogCiAKLWRlZiBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QoY2xzLCBtZXRob2RfbmFtZSk6CitkZWYgX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZChjbHMsIG1ldGhvZF9uYW1lKToKICAgICB0cnk6CiAgICAgICAgIG1ldGggPSBnZXRhdHRyKGNscywgbWV0aG9kX25hbWUpCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgpAQCAtMTMzNSw4ICsxNTA2LDM4NyBAQAogICAgICAgICAgICAgcmV0dXJuIG1ldGgKIAogCi1kZWYgc2lnbmF0dXJlKG9iaik6Ci0gICAgJycnR2V0IGEgc2lnbmF0dXJlIG9iamVjdCBmb3IgdGhlIHBhc3NlZCBjYWxsYWJsZS4nJycKK2RlZiBfc2lnbmF0dXJlX2dldF9wYXJ0aWFsKHdyYXBwZWRfc2lnLCBwYXJ0aWFsLCBleHRyYV9hcmdzPSgpKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byBjYWxjdWxhdGUgaG93ICd3cmFwcGVkX3NpZycgc2lnbmF0dXJlIHdpbGwKKyAgICAjIGxvb2sgbGlrZSBhZnRlciBhcHBseWluZyBhICdmdW5jdG9vbHMucGFydGlhbCcgb2JqZWN0IChvciBhbGlrZSkKKyAgICAjIG9uIGl0LgorCisgICAgb2xkX3BhcmFtcyA9IHdyYXBwZWRfc2lnLnBhcmFtZXRlcnMKKyAgICBuZXdfcGFyYW1zID0gT3JkZXJlZERpY3Qob2xkX3BhcmFtcy5pdGVtcygpKQorCisgICAgcGFydGlhbF9hcmdzID0gcGFydGlhbC5hcmdzIG9yICgpCisgICAgcGFydGlhbF9rZXl3b3JkcyA9IHBhcnRpYWwua2V5d29yZHMgb3Ige30KKworICAgIGlmIGV4dHJhX2FyZ3M6CisgICAgICAgIHBhcnRpYWxfYXJncyA9IGV4dHJhX2FyZ3MgKyBwYXJ0aWFsX2FyZ3MKKworICAgIHRyeToKKyAgICAgICAgYmEgPSB3cmFwcGVkX3NpZy5iaW5kX3BhcnRpYWwoKnBhcnRpYWxfYXJncywgKipwYXJ0aWFsX2tleXdvcmRzKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXg6CisgICAgICAgIG1zZyA9ICdwYXJ0aWFsIG9iamVjdCB7IXJ9IGhhcyBpbmNvcnJlY3QgYXJndW1lbnRzJy5mb3JtYXQocGFydGlhbCkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpIGZyb20gZXgKKworCisgICAgdHJhbnNmb3JtX3RvX2t3b25seSA9IEZhbHNlCisgICAgZm9yIHBhcmFtX25hbWUsIHBhcmFtIGluIG9sZF9wYXJhbXMuaXRlbXMoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXJnX3ZhbHVlID0gYmEuYXJndW1lbnRzW3BhcmFtX25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgaXMgX1BPU0lUSU9OQUxfT05MWToKKyAgICAgICAgICAgICAgICAjIElmIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXIgaXMgYm91bmQgYnkgcGFydGlhbCwKKyAgICAgICAgICAgICAgICAjIGl0IGVmZmVjdGl2ZWx5IGRpc2FwcGVhcnMgZnJvbSB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAgICAgbmV3X3BhcmFtcy5wb3AocGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBwYXJhbS5raW5kIGlzIF9QT1NJVElPTkFMX09SX0tFWVdPUkQ6CisgICAgICAgICAgICAgICAgaWYgcGFyYW1fbmFtZSBpbiBwYXJ0aWFsX2tleXdvcmRzOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWVhbnMgdGhhdCB0aGlzIHBhcmFtZXRlciwgYW5kIGFsbCBwYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgICAgICMgYWZ0ZXIgaXQgc2hvdWxkIGJlIGtleXdvcmQtb25seSAoYW5kIHZhci1wb3NpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICMgc2hvdWxkIGJlIHJlbW92ZWQpLiBIZXJlJ3Mgd2h5LiBDb25zaWRlciB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICMgZnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgICMgICAgIGZvbyhhLCBiLCAqYXJncywgYyk6CisgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgIyAicGFydGlhbChmb28sIGE9J3NwYW0nKSIgd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgIyBzaWduYXR1cmU6ICIoKiwgYT0nc3BhbScsIGIsIGMpIi4gQmVjYXVzZSBhdHRlbXB0aW5nCisgICAgICAgICAgICAgICAgICAgICMgdG8gY2FsbCB0aGF0IHBhcnRpYWwgd2l0aCAiKDEwLCAyMCkiIGFyZ3VtZW50cyB3aWxsCisgICAgICAgICAgICAgICAgICAgICMgcmFpc2UgYSBUeXBlRXJyb3IsIHNheWluZyB0aGF0ICJhIiBhcmd1bWVudCByZWNlaXZlZAorICAgICAgICAgICAgICAgICAgICAjIG11bHRpcGxlIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RvX2t3b25seSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgIyBTZXQgdGhlIG5ldyBkZWZhdWx0IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIG5ld19wYXJhbXNbcGFyYW1fbmFtZV0gPSBwYXJhbS5yZXBsYWNlKGRlZmF1bHQ9YXJnX3ZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgd2FzIHBhc3NlZCBhcyBhIHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgbmV3X3BhcmFtcy5wb3AocGFyYW0ubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgcGFyYW0ua2luZCBpcyBfS0VZV09SRF9PTkxZOgorICAgICAgICAgICAgICAgICMgU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgIG5ld19wYXJhbXNbcGFyYW1fbmFtZV0gPSBwYXJhbS5yZXBsYWNlKGRlZmF1bHQ9YXJnX3ZhbHVlKQorCisgICAgICAgIGlmIHRyYW5zZm9ybV90b19rd29ubHk6CisgICAgICAgICAgICBhc3NlcnQgcGFyYW0ua2luZCBpcyBub3QgX1BPU0lUSU9OQUxfT05MWQorCisgICAgICAgICAgICBpZiBwYXJhbS5raW5kIGlzIF9QT1NJVElPTkFMX09SX0tFWVdPUkQ6CisgICAgICAgICAgICAgICAgbmV3X3BhcmFtID0gbmV3X3BhcmFtc1twYXJhbV9uYW1lXS5yZXBsYWNlKGtpbmQ9X0tFWVdPUkRfT05MWSkKKyAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW3BhcmFtX25hbWVdID0gbmV3X3BhcmFtCisgICAgICAgICAgICAgICAgbmV3X3BhcmFtcy5tb3ZlX3RvX2VuZChwYXJhbV9uYW1lKQorICAgICAgICAgICAgZWxpZiBwYXJhbS5raW5kIGluIChfS0VZV09SRF9PTkxZLCBfVkFSX0tFWVdPUkQpOgorICAgICAgICAgICAgICAgIG5ld19wYXJhbXMubW92ZV90b19lbmQocGFyYW1fbmFtZSkKKyAgICAgICAgICAgIGVsaWYgcGFyYW0ua2luZCBpcyBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICAgICAgbmV3X3BhcmFtcy5wb3AocGFyYW0ubmFtZSkKKworICAgIHJldHVybiB3cmFwcGVkX3NpZy5yZXBsYWNlKHBhcmFtZXRlcnM9bmV3X3BhcmFtcy52YWx1ZXMoKSkKKworCitkZWYgX3NpZ25hdHVyZV9ib3VuZF9tZXRob2Qoc2lnKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byB0cmFuc2Zvcm0gc2lnbmF0dXJlcyBmb3IgdW5ib3VuZAorICAgICMgZnVuY3Rpb25zIHRvIGJvdW5kIG1ldGhvZHMKKworICAgIHBhcmFtcyA9IHR1cGxlKHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKQorCisgICAgaWYgbm90IHBhcmFtcyBvciBwYXJhbXNbMF0ua2luZCBpbiAoX1ZBUl9LRVlXT1JELCBfS0VZV09SRF9PTkxZKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlJykKKworICAgIGtpbmQgPSBwYXJhbXNbMF0ua2luZAorICAgIGlmIGtpbmQgaW4gKF9QT1NJVElPTkFMX09SX0tFWVdPUkQsIF9QT1NJVElPTkFMX09OTFkpOgorICAgICAgICAjIERyb3AgZmlyc3QgcGFyYW1ldGVyOgorICAgICAgICAjICcocDEsIHAyWywgLi4uXSknIC0+ICcocDJbLCAuLi5dKScKKyAgICAgICAgcGFyYW1zID0gcGFyYW1zWzE6XQorICAgIGVsc2U6CisgICAgICAgIGlmIGtpbmQgaXMgbm90IF9WQVJfUE9TSVRJT05BTDoKKyAgICAgICAgICAgICMgVW5sZXNzIHdlIGFkZCBhIG5ldyBwYXJhbWV0ZXIgdHlwZSB3ZSBuZXZlcgorICAgICAgICAgICAgIyBnZXQgaGVyZQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBhcmd1bWVudCB0eXBlJykKKyAgICAgICAgIyBJdCdzIGEgdmFyLXBvc2l0aW9uYWwgcGFyYW1ldGVyLgorICAgICAgICAjIERvIG5vdGhpbmcuICcoKmFyZ3NbLCAuLi5dKScgLT4gJygqYXJnc1ssIC4uLl0pJworCisgICAgcmV0dXJuIHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9cGFyYW1zKQorCisKK2RlZiBfc2lnbmF0dXJlX2lzX2J1aWx0aW4ob2JqKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byB0ZXN0IGlmIGBvYmpgIGlzIGEgY2FsbGFibGUgdGhhdCBtaWdodAorICAgICMgc3VwcG9ydCBBcmd1bWVudCBDbGluaWMncyBfX3RleHRfc2lnbmF0dXJlX18gcHJvdG9jb2wuCisgICAgcmV0dXJuIChpc2J1aWx0aW4ob2JqKSBvcgorICAgICAgICAgICAgaXNtZXRob2RkZXNjcmlwdG9yKG9iaikgb3IKKyAgICAgICAgICAgIGlzaW5zdGFuY2Uob2JqLCBfTm9uVXNlckRlZmluZWRDYWxsYWJsZXMpIG9yCisgICAgICAgICAgICAjIENhbid0IHRlc3QgJ2lzaW5zdGFuY2UodHlwZSknIGhlcmUsIGFzIGl0IHdvdWxkCisgICAgICAgICAgICAjIGFsc28gYmUgVHJ1ZSBmb3IgcmVndWxhciBweXRob24gY2xhc3NlcworICAgICAgICAgICAgb2JqIGluICh0eXBlLCBvYmplY3QpKQorCisKK2RlZiBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShvYmopOgorICAgICMgSW50ZXJuYWwgaGVscGVyIHRvIHRlc3QgaWYgYG9iamAgaXMgYSBkdWNrIHR5cGUgb2YgRnVuY3Rpb25UeXBlLgorICAgICMgQSBnb29kIGV4YW1wbGUgb2Ygc3VjaCBvYmplY3RzIGFyZSBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aAorICAgICMgQ3l0aG9uLCB3aGljaCBoYXZlIGFsbCBhdHRyaWJ1dGVzIHRoYXQgYSBwdXJlIFB5dGhvbiBmdW5jdGlvbgorICAgICMgd291bGQgaGF2ZSwgYnV0IGhhdmUgdGhlaXIgY29kZSBzdGF0aWNhbGx5IGNvbXBpbGVkLgorCisgICAgaWYgbm90IGNhbGxhYmxlKG9iaikgb3IgaXNjbGFzcyhvYmopOgorICAgICAgICAjIEFsbCBmdW5jdGlvbi1saWtlIG9iamVjdHMgYXJlIG9idmlvdXNseSBjYWxsYWJsZXMsCisgICAgICAgICMgYW5kIG5vdCBjbGFzc2VzLgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIG5hbWUgPSBnZXRhdHRyKG9iaiwgJ19fbmFtZV9fJywgTm9uZSkKKyAgICBjb2RlID0gZ2V0YXR0cihvYmosICdfX2NvZGVfXycsIE5vbmUpCisgICAgZGVmYXVsdHMgPSBnZXRhdHRyKG9iaiwgJ19fZGVmYXVsdHNfXycsIF92b2lkKSAjIEltcG9ydGFudCB0byB1c2UgX3ZvaWQgLi4uCisgICAga3dkZWZhdWx0cyA9IGdldGF0dHIob2JqLCAnX19rd2RlZmF1bHRzX18nLCBfdm9pZCkgIyAuLi4gYW5kIG5vdCBOb25lIGhlcmUKKyAgICBhbm5vdGF0aW9ucyA9IGdldGF0dHIob2JqLCAnX19hbm5vdGF0aW9uc19fJywgTm9uZSkKKworICAgIHJldHVybiAoaXNpbnN0YW5jZShjb2RlLCB0eXBlcy5Db2RlVHlwZSkgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKG5hbWUsIHN0cikgYW5kCisgICAgICAgICAgICAoZGVmYXVsdHMgaXMgTm9uZSBvciBpc2luc3RhbmNlKGRlZmF1bHRzLCB0dXBsZSkpIGFuZAorICAgICAgICAgICAgKGt3ZGVmYXVsdHMgaXMgTm9uZSBvciBpc2luc3RhbmNlKGt3ZGVmYXVsdHMsIGRpY3QpKSBhbmQKKyAgICAgICAgICAgIGlzaW5zdGFuY2UoYW5ub3RhdGlvbnMsIGRpY3QpKQorCisKK2RlZiBfc2lnbmF0dXJlX2dldF9ib3VuZF9wYXJhbShzcGVjKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byBnZXQgZmlyc3QgcGFyYW1ldGVyIG5hbWUgZnJvbSBhCisgICAgIyBfX3RleHRfc2lnbmF0dXJlX18gb2YgYSBidWlsdGluIG1ldGhvZCwgd2hpY2ggc2hvdWxkCisgICAgIyBiZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDogJygkcGFyYW0xLCAuLi4pJy4KKyAgICAjIEFzc3VtcHRpb25zIGFyZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCB3b24ndCBoYXZlCisgICAgIyBhIGRlZmF1bHQgdmFsdWUgb3IgYW4gYW5ub3RhdGlvbi4KKworICAgIGFzc2VydCBzcGVjLnN0YXJ0c3dpdGgoJygkJykKKworICAgIHBvcyA9IHNwZWMuZmluZCgnLCcpCisgICAgaWYgcG9zID09IC0xOgorICAgICAgICBwb3MgPSBzcGVjLmZpbmQoJyknKQorCisgICAgY3BvcyA9IHNwZWMuZmluZCgnOicpCisgICAgYXNzZXJ0IGNwb3MgPT0gLTEgb3IgY3BvcyA+IHBvcworCisgICAgY3BvcyA9IHNwZWMuZmluZCgnPScpCisgICAgYXNzZXJ0IGNwb3MgPT0gLTEgb3IgY3BvcyA+IHBvcworCisgICAgcmV0dXJuIHNwZWNbMjpwb3NdCisKKworZGVmIF9zaWduYXR1cmVfc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoc2lnbmF0dXJlKToKKyAgICAiIiIKKyAgICBUYWtlcyBhIHNpZ25hdHVyZSBpbiBBcmd1bWVudCBDbGluaWMncyBleHRlbmRlZCBzaWduYXR1cmUgZm9ybWF0LgorICAgIFJldHVybnMgYSB0dXBsZSBvZiB0aHJlZSB0aGluZ3M6CisgICAgICAqIHRoYXQgc2lnbmF0dXJlIHJlLXJlbmRlcmVkIGluIHN0YW5kYXJkIFB5dGhvbiBzeW50YXgsCisgICAgICAqIHRoZSBpbmRleCBvZiB0aGUgInNlbGYiIHBhcmFtZXRlciAoZ2VuZXJhbGx5IDApLCBvciBOb25lIGlmCisgICAgICAgIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlIGEgInNlbGYiIHBhcmFtZXRlciwgYW5kCisgICAgICAqIHRoZSBpbmRleCBvZiB0aGUgbGFzdCAicG9zaXRpb25hbCBvbmx5IiBwYXJhbWV0ZXIsCisgICAgICAgIG9yIE5vbmUgaWYgdGhlIHNpZ25hdHVyZSBoYXMgbm8gcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMuCisgICAgIiIiCisKKyAgICBpZiBub3Qgc2lnbmF0dXJlOgorICAgICAgICByZXR1cm4gc2lnbmF0dXJlLCBOb25lLCBOb25lCisKKyAgICBzZWxmX3BhcmFtZXRlciA9IE5vbmUKKyAgICBsYXN0X3Bvc2l0aW9uYWxfb25seSA9IE5vbmUKKworICAgIGxpbmVzID0gW2wuZW5jb2RlKCdhc2NpaScpIGZvciBsIGluIHNpZ25hdHVyZS5zcGxpdCgnXG4nKV0KKyAgICBnZW5lcmF0b3IgPSBpdGVyKGxpbmVzKS5fX25leHRfXworICAgIHRva2VuX3N0cmVhbSA9IHRva2VuaXplLnRva2VuaXplKGdlbmVyYXRvcikKKworICAgIGRlbGF5ZWRfY29tbWEgPSBGYWxzZQorICAgIHNraXBfbmV4dF9jb21tYSA9IEZhbHNlCisgICAgdGV4dCA9IFtdCisgICAgYWRkID0gdGV4dC5hcHBlbmQKKworICAgIGN1cnJlbnRfcGFyYW1ldGVyID0gMAorICAgIE9QID0gdG9rZW4uT1AKKyAgICBFUlJPUlRPS0VOID0gdG9rZW4uRVJST1JUT0tFTgorCisgICAgIyB0b2tlbiBzdHJlYW0gYWx3YXlzIHN0YXJ0cyB3aXRoIEVOQ09ESU5HIHRva2VuLCBza2lwIGl0CisgICAgdCA9IG5leHQodG9rZW5fc3RyZWFtKQorICAgIGFzc2VydCB0LnR5cGUgPT0gdG9rZW5pemUuRU5DT0RJTkcKKworICAgIGZvciB0IGluIHRva2VuX3N0cmVhbToKKyAgICAgICAgdHlwZSwgc3RyaW5nID0gdC50eXBlLCB0LnN0cmluZworCisgICAgICAgIGlmIHR5cGUgPT0gT1A6CisgICAgICAgICAgICBpZiBzdHJpbmcgPT0gJywnOgorICAgICAgICAgICAgICAgIGlmIHNraXBfbmV4dF9jb21tYToKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9uZXh0X2NvbW1hID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGRlbGF5ZWRfY29tbWEKKyAgICAgICAgICAgICAgICAgICAgZGVsYXllZF9jb21tYSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbWV0ZXIgKz0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHN0cmluZyA9PSAnLyc6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBza2lwX25leHRfY29tbWEKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGFzdF9wb3NpdGlvbmFsX29ubHkgaXMgTm9uZQorICAgICAgICAgICAgICAgIHNraXBfbmV4dF9jb21tYSA9IFRydWUKKyAgICAgICAgICAgICAgICBsYXN0X3Bvc2l0aW9uYWxfb25seSA9IGN1cnJlbnRfcGFyYW1ldGVyIC0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgKHR5cGUgPT0gRVJST1JUT0tFTikgYW5kIChzdHJpbmcgPT0gJyQnKToKKyAgICAgICAgICAgIGFzc2VydCBzZWxmX3BhcmFtZXRlciBpcyBOb25lCisgICAgICAgICAgICBzZWxmX3BhcmFtZXRlciA9IGN1cnJlbnRfcGFyYW1ldGVyCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIGRlbGF5ZWRfY29tbWE6CisgICAgICAgICAgICBkZWxheWVkX2NvbW1hID0gRmFsc2UKKyAgICAgICAgICAgIGlmIG5vdCAoKHR5cGUgPT0gT1ApIGFuZCAoc3RyaW5nID09ICcpJykpOgorICAgICAgICAgICAgICAgIGFkZCgnLCAnKQorICAgICAgICBhZGQoc3RyaW5nKQorICAgICAgICBpZiAoc3RyaW5nID09ICcsJyk6CisgICAgICAgICAgICBhZGQoJyAnKQorICAgIGNsZWFuX3NpZ25hdHVyZSA9ICcnLmpvaW4odGV4dCkKKyAgICByZXR1cm4gY2xlYW5fc2lnbmF0dXJlLCBzZWxmX3BhcmFtZXRlciwgbGFzdF9wb3NpdGlvbmFsX29ubHkKKworCitkZWYgX3NpZ25hdHVyZV9mcm9tc3RyKGNscywgb2JqLCBzLCBza2lwX2JvdW5kX2FyZz1UcnVlKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byBwYXJzZSBjb250ZW50IG9mICdfX3RleHRfc2lnbmF0dXJlX18nCisgICAgIyBhbmQgcmV0dXJuIGEgU2lnbmF0dXJlIGJhc2VkIG9uIGl0CisgICAgUGFyYW1ldGVyID0gY2xzLl9wYXJhbWV0ZXJfY2xzCisKKyAgICBjbGVhbl9zaWduYXR1cmUsIHNlbGZfcGFyYW1ldGVyLCBsYXN0X3Bvc2l0aW9uYWxfb25seSA9IFwKKyAgICAgICAgX3NpZ25hdHVyZV9zdHJpcF9ub25fcHl0aG9uX3N5bnRheChzKQorCisgICAgcHJvZ3JhbSA9ICJkZWYgZm9vIiArIGNsZWFuX3NpZ25hdHVyZSArICI6IHBhc3MiCisKKyAgICB0cnk6CisgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShwcm9ncmFtKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgbW9kdWxlID0gTm9uZQorCisgICAgaWYgbm90IGlzaW5zdGFuY2UobW9kdWxlLCBhc3QuTW9kdWxlKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigieyFyfSBidWlsdGluIGhhcyBpbnZhbGlkIHNpZ25hdHVyZSIuZm9ybWF0KG9iaikpCisKKyAgICBmID0gbW9kdWxlLmJvZHlbMF0KKworICAgIHBhcmFtZXRlcnMgPSBbXQorICAgIGVtcHR5ID0gUGFyYW1ldGVyLmVtcHR5CisgICAgaW52YWxpZCA9IG9iamVjdCgpCisKKyAgICBtb2R1bGUgPSBOb25lCisgICAgbW9kdWxlX2RpY3QgPSB7fQorICAgIG1vZHVsZV9uYW1lID0gZ2V0YXR0cihvYmosICdfX21vZHVsZV9fJywgTm9uZSkKKyAgICBpZiBtb2R1bGVfbmFtZToKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXMuZ2V0KG1vZHVsZV9uYW1lLCBOb25lKQorICAgICAgICBpZiBtb2R1bGU6CisgICAgICAgICAgICBtb2R1bGVfZGljdCA9IG1vZHVsZS5fX2RpY3RfXworICAgIHN5c19tb2R1bGVfZGljdCA9IHN5cy5tb2R1bGVzCisKKyAgICBkZWYgcGFyc2VfbmFtZShub2RlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uobm9kZSwgYXN0LmFyZykKKyAgICAgICAgaWYgbm9kZS5hbm5vdGF0aW9uICE9IE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJBbm5vdGF0aW9ucyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiKQorICAgICAgICByZXR1cm4gbm9kZS5hcmcKKworICAgIGRlZiB3cmFwX3ZhbHVlKHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGV2YWwocywgbW9kdWxlX2RpY3QpCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBldmFsKHMsIHN5c19tb2R1bGVfZGljdCkKKyAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgcmV0dXJuIGFzdC5TdHIodmFsdWUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGZsb2F0KSk6CisgICAgICAgICAgICByZXR1cm4gYXN0Lk51bSh2YWx1ZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYnl0ZXMpOgorICAgICAgICAgICAgcmV0dXJuIGFzdC5CeXRlcyh2YWx1ZSkKKyAgICAgICAgaWYgdmFsdWUgaW4gKFRydWUsIEZhbHNlLCBOb25lKToKKyAgICAgICAgICAgIHJldHVybiBhc3QuTmFtZUNvbnN0YW50KHZhbHVlKQorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQorCisgICAgY2xhc3MgUmV3cml0ZVN5bWJvbGljcyhhc3QuTm9kZVRyYW5zZm9ybWVyKToKKyAgICAgICAgZGVmIHZpc2l0X0F0dHJpYnV0ZShzZWxmLCBub2RlKToKKyAgICAgICAgICAgIGEgPSBbXQorICAgICAgICAgICAgbiA9IG5vZGUKKyAgICAgICAgICAgIHdoaWxlIGlzaW5zdGFuY2UobiwgYXN0LkF0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgYS5hcHBlbmQobi5hdHRyKQorICAgICAgICAgICAgICAgIG4gPSBuLnZhbHVlCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuLCBhc3QuTmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgICAgIGEuYXBwZW5kKG4uaWQpCisgICAgICAgICAgICB2YWx1ZSA9ICIuIi5qb2luKHJldmVyc2VkKGEpKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBfdmFsdWUodmFsdWUpCisKKyAgICAgICAgZGVmIHZpc2l0X05hbWUoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShub2RlLmN0eCwgYXN0LkxvYWQpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBfdmFsdWUobm9kZS5pZCkKKworICAgIGRlZiBwKG5hbWVfbm9kZSwgZGVmYXVsdF9ub2RlLCBkZWZhdWx0PWVtcHR5KToKKyAgICAgICAgbmFtZSA9IHBhcnNlX25hbWUobmFtZV9ub2RlKQorICAgICAgICBpZiBuYW1lIGlzIGludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBkZWZhdWx0X25vZGUgYW5kIGRlZmF1bHRfbm9kZSBpcyBub3QgX2VtcHR5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlZmF1bHRfbm9kZSA9IFJld3JpdGVTeW1ib2xpY3MoKS52aXNpdChkZWZhdWx0X25vZGUpCisgICAgICAgICAgICAgICAgbyA9IGFzdC5saXRlcmFsX2V2YWwoZGVmYXVsdF9ub2RlKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgbyA9IGludmFsaWQKKyAgICAgICAgICAgIGlmIG8gaXMgaW52YWxpZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZGVmYXVsdCA9IG8gaWYgbyBpcyBub3QgaW52YWxpZCBlbHNlIGRlZmF1bHQKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoUGFyYW1ldGVyKG5hbWUsIGtpbmQsIGRlZmF1bHQ9ZGVmYXVsdCwgYW5ub3RhdGlvbj1lbXB0eSkpCisKKyAgICAjIG5vbi1rZXl3b3JkLW9ubHkgcGFyYW1ldGVycworICAgIGFyZ3MgPSByZXZlcnNlZChmLmFyZ3MuYXJncykKKyAgICBkZWZhdWx0cyA9IHJldmVyc2VkKGYuYXJncy5kZWZhdWx0cykKKyAgICBpdGVyID0gaXRlcnRvb2xzLnppcF9sb25nZXN0KGFyZ3MsIGRlZmF1bHRzLCBmaWxsdmFsdWU9Tm9uZSkKKyAgICBpZiBsYXN0X3Bvc2l0aW9uYWxfb25seSBpcyBub3QgTm9uZToKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkKKyAgICBlbHNlOgorICAgICAgICBraW5kID0gUGFyYW1ldGVyLlBPU0lUSU9OQUxfT1JfS0VZV09SRAorICAgIGZvciBpLCAobmFtZSwgZGVmYXVsdCkgaW4gZW51bWVyYXRlKHJldmVyc2VkKGxpc3QoaXRlcikpKToKKyAgICAgICAgcChuYW1lLCBkZWZhdWx0KQorICAgICAgICBpZiBpID09IGxhc3RfcG9zaXRpb25hbF9vbmx5OgorICAgICAgICAgICAga2luZCA9IFBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQKKworICAgICMgKmFyZ3MKKyAgICBpZiBmLmFyZ3MudmFyYXJnOgorICAgICAgICBraW5kID0gUGFyYW1ldGVyLlZBUl9QT1NJVElPTkFMCisgICAgICAgIHAoZi5hcmdzLnZhcmFyZywgZW1wdHkpCisKKyAgICAjIGtleXdvcmQtb25seSBhcmd1bWVudHMKKyAgICBraW5kID0gUGFyYW1ldGVyLktFWVdPUkRfT05MWQorICAgIGZvciBuYW1lLCBkZWZhdWx0IGluIHppcChmLmFyZ3Mua3dvbmx5YXJncywgZi5hcmdzLmt3X2RlZmF1bHRzKToKKyAgICAgICAgcChuYW1lLCBkZWZhdWx0KQorCisgICAgIyAqKmt3YXJncworICAgIGlmIGYuYXJncy5rd2FyZzoKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5WQVJfS0VZV09SRAorICAgICAgICBwKGYuYXJncy5rd2FyZywgZW1wdHkpCisKKyAgICBpZiBzZWxmX3BhcmFtZXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgIyBQb3NzaWJseSBzdHJpcCB0aGUgYm91bmQgYXJndW1lbnQ6CisgICAgICAgICMgICAgLSBXZSAqYWx3YXlzKiBzdHJpcCBmaXJzdCBib3VuZCBhcmd1bWVudCBpZgorICAgICAgICAjICAgICAgaXQgaXMgYSBtb2R1bGUuCisgICAgICAgICMgICAgLSBXZSBkb24ndCBzdHJpcCBmaXJzdCBib3VuZCBhcmd1bWVudCBpZgorICAgICAgICAjICAgICAgc2tpcF9ib3VuZF9hcmcgaXMgRmFsc2UuCisgICAgICAgIGFzc2VydCBwYXJhbWV0ZXJzCisgICAgICAgIF9zZWxmID0gZ2V0YXR0cihvYmosICdfX3NlbGZfXycsIE5vbmUpCisgICAgICAgIHNlbGZfaXNib3VuZCA9IF9zZWxmIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGZfaXNtb2R1bGUgPSBpc21vZHVsZShfc2VsZikKKyAgICAgICAgaWYgc2VsZl9pc2JvdW5kIGFuZCAoc2VsZl9pc21vZHVsZSBvciBza2lwX2JvdW5kX2FyZyk6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnBvcCgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBmb3IgYnVpbHRpbnMsIHNlbGYgcGFyYW1ldGVyIGlzIGFsd2F5cyBwb3NpdGlvbmFsLW9ubHkhCisgICAgICAgICAgICBwID0gcGFyYW1ldGVyc1swXS5yZXBsYWNlKGtpbmQ9UGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnNbMF0gPSBwCisKKyAgICByZXR1cm4gY2xzKHBhcmFtZXRlcnMsIHJldHVybl9hbm5vdGF0aW9uPWNscy5lbXB0eSkKKworCitkZWYgX3NpZ25hdHVyZV9mcm9tX2J1aWx0aW4oY2xzLCBmdW5jLCBza2lwX2JvdW5kX2FyZz1UcnVlKToKKyAgICAjIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgc2lnbmF0dXJlIGZvcgorICAgICMgYnVpbHRpbiBjYWxsYWJsZXMKKyAgICBpZiBub3QgX3NpZ25hdHVyZV9pc19idWlsdGluKGZ1bmMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInshcn0gaXMgbm90IGEgUHl0aG9uIGJ1aWx0aW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uIi5mb3JtYXQoZnVuYykpCisKKyAgICBzID0gZ2V0YXR0cihmdW5jLCAiX190ZXh0X3NpZ25hdHVyZV9fIiwgTm9uZSkKKyAgICBpZiBub3QgczoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gc2lnbmF0dXJlIGZvdW5kIGZvciBidWlsdGluIHshcn0iLmZvcm1hdChmdW5jKSkKKworICAgIHJldHVybiBfc2lnbmF0dXJlX2Zyb21zdHIoY2xzLCBmdW5jLCBzLCBza2lwX2JvdW5kX2FyZykKKworCitkZWYgX3NpZ25hdHVyZV9pbnRlcm5hbChvYmosIGZvbGxvd193cmFwcGVyX2NoYWlucz1UcnVlLCBza2lwX2JvdW5kX2FyZz1UcnVlKToKIAogICAgIGlmIG5vdCBjYWxsYWJsZShvYmopOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3shcn0gaXMgbm90IGEgY2FsbGFibGUgb2JqZWN0Jy5mb3JtYXQob2JqKSkKQEAgLTEzNDQsOCArMTg5NCwxNyBAQAogICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5NZXRob2RUeXBlKToKICAgICAgICAgIyBJbiB0aGlzIGNhc2Ugd2Ugc2tpcCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgICMgZnVuY3Rpb24gKHVzdWFsbHkgYHNlbGZgIG9yIGBjbHNgKS4KLSAgICAgICAgc2lnID0gc2lnbmF0dXJlKG9iai5fX2Z1bmNfXykKLSAgICAgICAgcmV0dXJuIHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9dHVwbGUoc2lnLnBhcmFtZXRlcnMudmFsdWVzKCkpWzE6XSkKKyAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChvYmouX19mdW5jX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYm91bmRfYXJnKQorICAgICAgICBpZiBza2lwX2JvdW5kX2FyZzoKKyAgICAgICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2JvdW5kX21ldGhvZChzaWcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2lnCisKKyAgICAjIFdhcyB0aGlzIGZ1bmN0aW9uIHdyYXBwZWQgYnkgYSBkZWNvcmF0b3I/CisgICAgaWYgZm9sbG93X3dyYXBwZXJfY2hhaW5zOgorICAgICAgICBvYmogPSB1bndyYXAob2JqLCBzdG9wPShsYW1iZGEgZjogaGFzYXR0cihmLCAiX19zaWduYXR1cmVfXyIpKSkKIAogICAgIHRyeToKICAgICAgICAgc2lnID0gb2JqLl9fc2lnbmF0dXJlX18KQEAgLTEzNTMsNjAgKzE5MTIsNDkgQEAKICAgICAgICAgcGFzcwogICAgIGVsc2U6CiAgICAgICAgIGlmIHNpZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNpZywgU2lnbmF0dXJlKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICd1bmV4cGVjdGVkIG9iamVjdCB7IXJ9IGluIF9fc2lnbmF0dXJlX18gJworICAgICAgICAgICAgICAgICAgICAnYXR0cmlidXRlJy5mb3JtYXQoc2lnKSkKICAgICAgICAgICAgIHJldHVybiBzaWcKIAogICAgIHRyeToKLSAgICAgICAgIyBXYXMgdGhpcyBmdW5jdGlvbiB3cmFwcGVkIGJ5IGEgZGVjb3JhdG9yPwotICAgICAgICB3cmFwcGVkID0gb2JqLl9fd3JhcHBlZF9fCisgICAgICAgIHBhcnRpYWxtZXRob2QgPSBvYmouX3BhcnRpYWxtZXRob2QKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gc2lnbmF0dXJlKHdyYXBwZWQpCisgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydGlhbG1ldGhvZCwgZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QpOgorICAgICAgICAgICAgIyBVbmJvdW5kIHBhcnRpYWxtZXRob2QgKHNlZSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZCkKKyAgICAgICAgICAgICMgVGhpcyBtZWFucywgdGhhdCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAjIGFzIGlmIGl0J3MgYSByZWd1bGFyIHBhcnRpYWwgb2JqZWN0LCBidXQgdGFraW5nIGludG8KKyAgICAgICAgICAgICMgYWNjb3VudCB0aGF0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50CisgICAgICAgICAgICAjICh1c3VhbGx5IGBzZWxmYCwgb3IgYGNsc2ApIHdpbGwgbm90IGJlIHBhc3NlZAorICAgICAgICAgICAgIyBhdXRvbWF0aWNhbGx5IChhcyBmb3IgYm91bmRtZXRob2RzKQogCi0gICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICB3cmFwcGVkX3NpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwocGFydGlhbG1ldGhvZC5mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfZ2V0X3BhcnRpYWwod3JhcHBlZF9zaWcsIHBhcnRpYWxtZXRob2QsIChOb25lLCkpCisKKyAgICAgICAgICAgIGZpcnN0X3dyYXBwZWRfcGFyYW0gPSB0dXBsZSh3cmFwcGVkX3NpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVswXQorICAgICAgICAgICAgbmV3X3BhcmFtcyA9IChmaXJzdF93cmFwcGVkX3BhcmFtLCkgKyB0dXBsZShzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKKworICAgICAgICAgICAgcmV0dXJuIHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9bmV3X3BhcmFtcykKKworICAgIGlmIGlzZnVuY3Rpb24ob2JqKSBvciBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShvYmopOgorICAgICAgICAjIElmIGl0J3MgYSBwdXJlIFB5dGhvbiBmdW5jdGlvbiwgb3IgYW4gb2JqZWN0IHRoYXQgaXMgZHVjayB0eXBlCisgICAgICAgICMgb2YgYSBQeXRob24gZnVuY3Rpb24gKEN5dGhvbiBmdW5jdGlvbnMsIGZvciBpbnN0YW5jZSksIHRoZW46CiAgICAgICAgIHJldHVybiBTaWduYXR1cmUuZnJvbV9mdW5jdGlvbihvYmopCiAKKyAgICBpZiBfc2lnbmF0dXJlX2lzX2J1aWx0aW4ob2JqKToKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbV9idWlsdGluKFNpZ25hdHVyZSwgb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmc9c2tpcF9ib3VuZF9hcmcpCisKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZnVuY3Rvb2xzLnBhcnRpYWwpOgotICAgICAgICBzaWcgPSBzaWduYXR1cmUob2JqLmZ1bmMpCi0KLSAgICAgICAgbmV3X3BhcmFtcyA9IE9yZGVyZWREaWN0KHNpZy5wYXJhbWV0ZXJzLml0ZW1zKCkpCi0KLSAgICAgICAgcGFydGlhbF9hcmdzID0gb2JqLmFyZ3Mgb3IgKCkKLSAgICAgICAgcGFydGlhbF9rZXl3b3JkcyA9IG9iai5rZXl3b3JkcyBvciB7fQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBiYSA9IHNpZy5iaW5kX3BhcnRpYWwoKnBhcnRpYWxfYXJncywgKipwYXJ0aWFsX2tleXdvcmRzKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4OgotICAgICAgICAgICAgbXNnID0gJ3BhcnRpYWwgb2JqZWN0IHshcn0gaGFzIGluY29ycmVjdCBhcmd1bWVudHMnLmZvcm1hdChvYmopCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykgZnJvbSBleAotCi0gICAgICAgIGZvciBhcmdfbmFtZSwgYXJnX3ZhbHVlIGluIGJhLmFyZ3VtZW50cy5pdGVtcygpOgotICAgICAgICAgICAgcGFyYW0gPSBuZXdfcGFyYW1zW2FyZ19uYW1lXQotICAgICAgICAgICAgaWYgYXJnX25hbWUgaW4gcGFydGlhbF9rZXl3b3JkczoKLSAgICAgICAgICAgICAgICAjIFdlIHNldCBhIG5ldyBkZWZhdWx0IHZhbHVlLCBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgY29kZQotICAgICAgICAgICAgICAgICMgaXMgY29ycmVjdDoKLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyAgID4+PiBkZWYgZm9vKGEpOiBwcmludChhKQotICAgICAgICAgICAgICAgICMgICA+Pj4gcHJpbnQocGFydGlhbChwYXJ0aWFsKGZvbywgYT0xMCksIGE9MjApKCkpCi0gICAgICAgICAgICAgICAgIyAgIDIwCi0gICAgICAgICAgICAgICAgIyAgID4+PiBwcmludChwYXJ0aWFsKHBhcnRpYWwoZm9vLCBhPTEwKSwgYT0yMCkoYT0zMCkpCi0gICAgICAgICAgICAgICAgIyAgIDMwCi0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgU28sIHdpdGggJ3BhcnRpYWwnIG9iamVjdHMsIHBhc3NpbmcgYSBrZXl3b3JkIGFyZ3VtZW50IGlzCi0gICAgICAgICAgICAgICAgIyBsaWtlIHNldHRpbmcgYSBuZXcgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgICAjIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIFdlIGFsc28gbWFyayB0aGlzIHBhcmFtZXRlciB3aXRoICdfcGFydGlhbF9rd2FyZycKLSAgICAgICAgICAgICAgICAjIGZsYWcuICBMYXRlciwgaW4gJ19iaW5kJywgdGhlICdkZWZhdWx0JyB2YWx1ZSBvZiB0aGlzCi0gICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXIgd2lsbCBiZSBhZGRlZCB0byAna3dhcmdzJywgdG8gc2ltdWxhdGUKLSAgICAgICAgICAgICAgICAjIHRoZSAnZnVuY3Rvb2xzLnBhcnRpYWwnIHJlYWwgY2FsbC4KLSAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW2FyZ19uYW1lXSA9IHBhcmFtLnJlcGxhY2UoZGVmYXVsdD1hcmdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJ0aWFsX2t3YXJnPVRydWUpCi0KLSAgICAgICAgICAgIGVsaWYgKHBhcmFtLmtpbmQgbm90IGluIChfVkFSX0tFWVdPUkQsIF9WQVJfUE9TSVRJT05BTCkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBhcmFtLl9wYXJ0aWFsX2t3YXJnKToKLSAgICAgICAgICAgICAgICBuZXdfcGFyYW1zLnBvcChhcmdfbmFtZSkKLQotICAgICAgICByZXR1cm4gc2lnLnJlcGxhY2UocGFyYW1ldGVycz1uZXdfcGFyYW1zLnZhbHVlcygpKQorICAgICAgICB3cmFwcGVkX3NpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwob2JqLmZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZ2V0X3BhcnRpYWwod3JhcHBlZF9zaWcsIG9iaikKIAogICAgIHNpZyA9IE5vbmUKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSk6CkBAIC0xNDE0LDMyICsxOTYyLDgwIEBACiAKICAgICAgICAgIyBGaXJzdCwgbGV0J3Mgc2VlIGlmIGl0IGhhcyBhbiBvdmVybG9hZGVkIF9fY2FsbF9fIGRlZmluZWQKICAgICAgICAgIyBpbiBpdHMgbWV0YWNsYXNzCi0gICAgICAgIGNhbGwgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QodHlwZShvYmopLCAnX19jYWxsX18nKQorICAgICAgICBjYWxsID0gX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZCh0eXBlKG9iaiksICdfX2NhbGxfXycpCiAgICAgICAgIGlmIGNhbGwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzaWcgPSBzaWduYXR1cmUoY2FsbCkKKyAgICAgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwoY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgTm93IHdlIGNoZWNrIGlmIHRoZSAnb2JqJyBjbGFzcyBoYXMgYSAnX19uZXdfXycgbWV0aG9kCi0gICAgICAgICAgICBuZXcgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2Qob2JqLCAnX19uZXdfXycpCisgICAgICAgICAgICBuZXcgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19fbmV3X18nKQogICAgICAgICAgICAgaWYgbmV3IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShuZXcpCisgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChuZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBGaW5hbGx5LCB3ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBfX2luaXRfXyBpbXBsZW1lbnRlZAotICAgICAgICAgICAgICAgIGluaXQgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2Qob2JqLCAnX19pbml0X18nKQorICAgICAgICAgICAgICAgIGluaXQgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19faW5pdF9fJykKICAgICAgICAgICAgICAgICBpZiBpbml0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzaWcgPSBzaWduYXR1cmUoaW5pdCkKKyAgICAgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChpbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKworICAgICAgICBpZiBzaWcgaXMgTm9uZToKKyAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCB3ZSBrbm93LCB0aGF0IGBvYmpgIGlzIGEgY2xhc3MsIHdpdGggbm8gdXNlci0KKyAgICAgICAgICAgICMgZGVmaW5lZCAnX19pbml0X18nLCAnX19uZXdfXycsIG9yIGNsYXNzLWxldmVsICdfX2NhbGxfXycKKworICAgICAgICAgICAgZm9yIGJhc2UgaW4gb2JqLl9fbXJvX19bOi0xXToKKyAgICAgICAgICAgICAgICAjIFNpbmNlICdfX3RleHRfc2lnbmF0dXJlX18nIGlzIGltcGxlbWVudGVkIGFzIGEKKyAgICAgICAgICAgICAgICAjIGRlc2NyaXB0b3IgdGhhdCBleHRyYWN0cyB0ZXh0IHNpZ25hdHVyZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICMgY2xhc3MgZG9jc3RyaW5nLCBpZiAnb2JqJyBpcyBkZXJpdmVkIGZyb20gYSBidWlsdGluCisgICAgICAgICAgICAgICAgIyBjbGFzcywgaXRzIG93biAnX190ZXh0X3NpZ25hdHVyZV9fJyBtYXkgYmUgJ05vbmUnLgorICAgICAgICAgICAgICAgICMgVGhlcmVmb3JlLCB3ZSBnbyB0aHJvdWdoIHRoZSBNUk8gKGV4Y2VwdCB0aGUgbGFzdAorICAgICAgICAgICAgICAgICMgY2xhc3MgaW4gdGhlcmUsIHdoaWNoIGlzICdvYmplY3QnKSB0byBmaW5kIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICMgY2xhc3Mgd2l0aCBub24tZW1wdHkgdGV4dCBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXh0X3NpZyA9IGJhc2UuX190ZXh0X3NpZ25hdHVyZV9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGV4dF9zaWc6CisgICAgICAgICAgICAgICAgICAgICAgICAjIElmICdvYmonIGNsYXNzIGhhcyBhIF9fdGV4dF9zaWduYXR1cmVfXyBhdHRyaWJ1dGU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybiBhIHNpZ25hdHVyZSBiYXNlZCBvbiBpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbXN0cihTaWduYXR1cmUsIG9iaiwgdGV4dF9zaWcpCisKKyAgICAgICAgICAgICMgTm8gJ19fdGV4dF9zaWduYXR1cmVfXycgd2FzIGZvdW5kIGZvciB0aGUgJ29iaicgY2xhc3MuCisgICAgICAgICAgICAjIExhc3Qgb3B0aW9uIGlzIHRvIGNoZWNrIGlmIGl0cyAnX19pbml0X18nIGlzCisgICAgICAgICAgICAjIG9iamVjdC5fX2luaXRfXyBvciB0eXBlLl9faW5pdF9fLgorICAgICAgICAgICAgaWYgdHlwZSBub3QgaW4gb2JqLl9fbXJvX186CisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgY2xhc3MgKG5vdCBtZXRhY2xhc3MpLCBidXQgbm8gdXNlci1kZWZpbmVkCisgICAgICAgICAgICAgICAgIyBfX2luaXRfXyBvciBfX25ld19fIGZvciBpdAorICAgICAgICAgICAgICAgIGlmIG9iai5fX2luaXRfXyBpcyBvYmplY3QuX19pbml0X186CisgICAgICAgICAgICAgICAgICAgICMgUmV0dXJuIGEgc2lnbmF0dXJlIG9mICdvYmplY3QnIGJ1aWx0aW4uCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWduYXR1cmUob2JqZWN0KQorCiAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShvYmosIF9Ob25Vc2VyRGVmaW5lZENhbGxhYmxlcyk6CiAgICAgICAgICMgQW4gb2JqZWN0IHdpdGggX19jYWxsX18KICAgICAgICAgIyBXZSBhbHNvIGNoZWNrIHRoYXQgdGhlICdvYmonIGlzIG5vdCBhbiBpbnN0YW5jZSBvZgogICAgICAgICAjIF9XcmFwcGVyRGVzY3JpcHRvciBvciBfTWV0aG9kV3JhcHBlciB0byBhdm9pZAogICAgICAgICAjIGluZmluaXRlIHJlY3Vyc2lvbiAoYW5kIGV2ZW4gcG90ZW50aWFsIHNlZ2ZhdWx0KQotICAgICAgICBjYWxsID0gX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKHR5cGUob2JqKSwgJ19fY2FsbF9fJykKKyAgICAgICAgY2FsbCA9IF9zaWduYXR1cmVfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QodHlwZShvYmopLCAnX19jYWxsX18nKQogICAgICAgICBpZiBjYWxsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2lnID0gc2lnbmF0dXJlKGNhbGwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleDoKKyAgICAgICAgICAgICAgICBtc2cgPSAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciB7IXJ9Jy5mb3JtYXQob2JqKQorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKSBmcm9tIGV4CiAKICAgICBpZiBzaWcgaXMgbm90IE5vbmU6CiAgICAgICAgICMgRm9yIGNsYXNzZXMgYW5kIG9iamVjdHMgd2Ugc2tpcCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZWlyCiAgICAgICAgICMgX19jYWxsX18sIF9fbmV3X18sIG9yIF9faW5pdF9fIG1ldGhvZHMKLSAgICAgICAgcmV0dXJuIHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9dHVwbGUoc2lnLnBhcmFtZXRlcnMudmFsdWVzKCkpWzE6XSkKKyAgICAgICAgaWYgc2tpcF9ib3VuZF9hcmc6CisgICAgICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9ib3VuZF9tZXRob2Qoc2lnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNpZwogCiAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUpOgogICAgICAgICAjIFJhaXNlIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3IgYnVpbHRpbnMKQEAgLTE0NDgsNiArMjA0NCwxMCBAQAogCiAgICAgcmFpc2UgVmFsdWVFcnJvcignY2FsbGFibGUgeyFyfSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScuZm9ybWF0KG9iaikpCiAKK2RlZiBzaWduYXR1cmUob2JqKToKKyAgICAnJydHZXQgYSBzaWduYXR1cmUgb2JqZWN0IGZvciB0aGUgcGFzc2VkIGNhbGxhYmxlLicnJworICAgIHJldHVybiBfc2lnbmF0dXJlX2ludGVybmFsKG9iaikKKwogCiBjbGFzcyBfdm9pZDoKICAgICAnJydBIHByaXZhdGUgbWFya2VyIC0gdXNlZCBpbiBQYXJhbWV0ZXIgJiBTaWduYXR1cmUnJycKQEAgLTE0ODYsMTAgKzIwODYsMTIgQEAKICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBhcyBhIHN0cmluZy4KICAgICAqIGRlZmF1bHQgOiBvYmplY3QKICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgaWYgc3BlY2lmaWVkLiAgSWYgdGhlCi0gICAgICAgIHBhcmFtZXRlciBoYXMgbm8gZGVmYXVsdCB2YWx1ZSwgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldC4KKyAgICAgICAgcGFyYW1ldGVyIGhhcyBubyBkZWZhdWx0IHZhbHVlLCB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8KKyAgICAgICAgYFBhcmFtZXRlci5lbXB0eWAuCiAgICAgKiBhbm5vdGF0aW9uCiAgICAgICAgIFRoZSBhbm5vdGF0aW9uIGZvciB0aGUgcGFyYW1ldGVyIGlmIHNwZWNpZmllZC4gIElmIHRoZQotICAgICAgICBwYXJhbWV0ZXIgaGFzIG5vIGFubm90YXRpb24sIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQuCisgICAgICAgIHBhcmFtZXRlciBoYXMgbm8gYW5ub3RhdGlvbiwgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvCisgICAgICAgIGBQYXJhbWV0ZXIuZW1wdHlgLgogICAgICoga2luZCA6IHN0cgogICAgICAgICBEZXNjcmliZXMgaG93IGFyZ3VtZW50IHZhbHVlcyBhcmUgYm91bmQgdG8gdGhlIHBhcmFtZXRlci4KICAgICAgICAgUG9zc2libGUgdmFsdWVzOiBgUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWWAsCkBAIC0xNDk3LDcgKzIwOTksNyBAQAogICAgICAgICBgUGFyYW1ldGVyLktFWVdPUkRfT05MWWAsIGBQYXJhbWV0ZXIuVkFSX0tFWVdPUkRgLgogICAgICcnJwogCi0gICAgX19zbG90c19fID0gKCdfbmFtZScsICdfa2luZCcsICdfZGVmYXVsdCcsICdfYW5ub3RhdGlvbicsICdfcGFydGlhbF9rd2FyZycpCisgICAgX19zbG90c19fID0gKCdfbmFtZScsICdfa2luZCcsICdfZGVmYXVsdCcsICdfYW5ub3RhdGlvbicpCiAKICAgICBQT1NJVElPTkFMX09OTFkgICAgICAgICA9IF9QT1NJVElPTkFMX09OTFkKICAgICBQT1NJVElPTkFMX09SX0tFWVdPUkQgICA9IF9QT1NJVElPTkFMX09SX0tFWVdPUkQKQEAgLTE1MDcsOCArMjEwOSw3IEBACiAKICAgICBlbXB0eSA9IF9lbXB0eQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGtpbmQsICosIGRlZmF1bHQ9X2VtcHR5LCBhbm5vdGF0aW9uPV9lbXB0eSwKLSAgICAgICAgICAgICAgICAgX3BhcnRpYWxfa3dhcmc9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBraW5kLCAqLCBkZWZhdWx0PV9lbXB0eSwgYW5ub3RhdGlvbj1fZW1wdHkpOgogCiAgICAgICAgIGlmIGtpbmQgbm90IGluIChfUE9TSVRJT05BTF9PTkxZLCBfUE9TSVRJT05BTF9PUl9LRVlXT1JELAogICAgICAgICAgICAgICAgICAgICAgICAgX1ZBUl9QT1NJVElPTkFMLCBfS0VZV09SRF9PTkxZLCBfVkFSX0tFWVdPUkQpOgpAQCAtMTUyMiwxOSArMjEyMywxNiBAQAogICAgICAgICBzZWxmLl9kZWZhdWx0ID0gZGVmYXVsdAogICAgICAgICBzZWxmLl9hbm5vdGF0aW9uID0gYW5ub3RhdGlvbgogCi0gICAgICAgIGlmIG5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIGtpbmQgIT0gX1BPU0lUSU9OQUxfT05MWToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOb25lIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1wb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVyIikKLSAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuYW1lID0gc3RyKG5hbWUpCi0gICAgICAgICAgICBpZiBraW5kICE9IF9QT1NJVElPTkFMX09OTFkgYW5kIG5vdCBuYW1lLmlzaWRlbnRpZmllcigpOgotICAgICAgICAgICAgICAgIG1zZyA9ICd7IXJ9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJy5mb3JtYXQobmFtZSkKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKLSAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIGlmIG5hbWUgaXMgX2VtcHR5OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbmFtZSBpcyBhIHJlcXVpcmVkIGF0dHJpYnV0ZSBmb3IgUGFyYW1ldGVyJykKIAotICAgICAgICBzZWxmLl9wYXJ0aWFsX2t3YXJnID0gX3BhcnRpYWxfa3dhcmcKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBtdXN0IGJlIGEgc3RyLCBub3QgYSB7IXJ9Ii5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgaWYgbm90IG5hbWUuaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7IXJ9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJy5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBuYW1lKHNlbGYpOgpAQCAtMTU1Miw4ICsyMTUwLDggQEAKICAgICBkZWYga2luZChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2tpbmQKIAotICAgIGRlZiByZXBsYWNlKHNlbGYsICosIG5hbWU9X3ZvaWQsIGtpbmQ9X3ZvaWQsIGFubm90YXRpb249X3ZvaWQsCi0gICAgICAgICAgICAgICAgZGVmYXVsdD1fdm9pZCwgX3BhcnRpYWxfa3dhcmc9X3ZvaWQpOgorICAgIGRlZiByZXBsYWNlKHNlbGYsICosIG5hbWU9X3ZvaWQsIGtpbmQ9X3ZvaWQsCisgICAgICAgICAgICAgICAgYW5ub3RhdGlvbj1fdm9pZCwgZGVmYXVsdD1fdm9pZCk6CiAgICAgICAgICcnJ0NyZWF0ZXMgYSBjdXN0b21pemVkIGNvcHkgb2YgdGhlIFBhcmFtZXRlci4nJycKIAogICAgICAgICBpZiBuYW1lIGlzIF92b2lkOgpAQCAtMTU2OCwyMCArMjE2NiwxMSBAQAogICAgICAgICBpZiBkZWZhdWx0IGlzIF92b2lkOgogICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYuX2RlZmF1bHQKIAotICAgICAgICBpZiBfcGFydGlhbF9rd2FyZyBpcyBfdm9pZDoKLSAgICAgICAgICAgIF9wYXJ0aWFsX2t3YXJnID0gc2VsZi5fcGFydGlhbF9rd2FyZwotCi0gICAgICAgIHJldHVybiB0eXBlKHNlbGYpKG5hbWUsIGtpbmQsIGRlZmF1bHQ9ZGVmYXVsdCwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfcGFydGlhbF9rd2FyZz1fcGFydGlhbF9rd2FyZykKKyAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikobmFtZSwga2luZCwgZGVmYXVsdD1kZWZhdWx0LCBhbm5vdGF0aW9uPWFubm90YXRpb24pCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAga2luZCA9IHNlbGYua2luZAotCiAgICAgICAgIGZvcm1hdHRlZCA9IHNlbGYuX25hbWUKLSAgICAgICAgaWYga2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgotICAgICAgICAgICAgaWYgZm9ybWF0dGVkIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVkID0gJycKLSAgICAgICAgICAgIGZvcm1hdHRlZCA9ICc8e30+Jy5mb3JtYXQoZm9ybWF0dGVkKQogCiAgICAgICAgICMgQWRkIGFubm90YXRpb24gYW5kIGRlZmF1bHQgdmFsdWUKICAgICAgICAgaWYgc2VsZi5fYW5ub3RhdGlvbiBpcyBub3QgX2VtcHR5OgpAQCAtMTY0MiwxMiArMjIzMSw3IEBACiAgICAgZGVmIGFyZ3Moc2VsZik6CiAgICAgICAgIGFyZ3MgPSBbXQogICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW0gaW4gc2VsZi5fc2lnbmF0dXJlLnBhcmFtZXRlcnMuaXRlbXMoKToKLSAgICAgICAgICAgIGlmIChwYXJhbS5raW5kIGluIChfVkFSX0tFWVdPUkQsIF9LRVlXT1JEX09OTFkpIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uX3BhcnRpYWxfa3dhcmcpOgotICAgICAgICAgICAgICAgICMgS2V5d29yZCBhcmd1bWVudHMgbWFwcGVkIGJ5ICdmdW5jdG9vbHMucGFydGlhbCcKLSAgICAgICAgICAgICAgICAjIChQYXJhbWV0ZXIuX3BhcnRpYWxfa3dhcmcgaXMgVHJ1ZSkgYXJlIG1hcHBlZAotICAgICAgICAgICAgICAgICMgaW4gJ0JvdW5kQXJndW1lbnRzLmt3YXJncycsIGFsb25nIHdpdGggVkFSX0tFWVdPUkQgJgotICAgICAgICAgICAgICAgICMgS0VZV09SRF9PTkxZCisgICAgICAgICAgICBpZiBwYXJhbS5raW5kIGluIChfVkFSX0tFWVdPUkQsIF9LRVlXT1JEX09OTFkpOgogICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgIHRyeToKQEAgLTE2NzIsOCArMjI1Niw3IEBACiAgICAgICAgIGt3YXJnc19zdGFydGVkID0gRmFsc2UKICAgICAgICAgZm9yIHBhcmFtX25hbWUsIHBhcmFtIGluIHNlbGYuX3NpZ25hdHVyZS5wYXJhbWV0ZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBub3Qga3dhcmdzX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLl9wYXJ0aWFsX2t3YXJnKToKKyAgICAgICAgICAgICAgICBpZiBwYXJhbS5raW5kIGluIChfVkFSX0tFWVdPUkQsIF9LRVlXT1JEX09OTFkpOgogICAgICAgICAgICAgICAgICAgICBrd2FyZ3Nfc3RhcnRlZCA9IFRydWUKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbV9uYW1lIG5vdCBpbiBzZWxmLmFyZ3VtZW50czoKQEAgLTE3MjAsNyArMjMwMyw3IEBACiAgICAgKiByZXR1cm5fYW5ub3RhdGlvbiA6IG9iamVjdAogICAgICAgICBUaGUgYW5ub3RhdGlvbiBmb3IgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiBpZiBzcGVjaWZpZWQuCiAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBoYXMgbm8gYW5ub3RhdGlvbiBmb3IgaXRzIHJldHVybiB0eXBlLCB0aGlzCi0gICAgICAgIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LgorICAgICAgICBhdHRyaWJ1dGUgaXMgc2V0IHRvIGBTaWduYXR1cmUuZW1wdHlgLgogICAgICogYmluZCgqYXJncywgKiprd2FyZ3MpIC0+IEJvdW5kQXJndW1lbnRzCiAgICAgICAgIENyZWF0ZXMgYSBtYXBwaW5nIGZyb20gcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMgdG8KICAgICAgICAgcGFyYW1ldGVycy4KQEAgLTE3NDgsMjQgKzIzMzEsMzcgQEAKICAgICAgICAgICAgIGlmIF9fdmFsaWRhdGVfcGFyYW1ldGVyc19fOgogICAgICAgICAgICAgICAgIHBhcmFtcyA9IE9yZGVyZWREaWN0KCkKICAgICAgICAgICAgICAgICB0b3Bfa2luZCA9IF9QT1NJVElPTkFMX09OTFkKKyAgICAgICAgICAgICAgICBraW5kX2RlZmF1bHRzID0gRmFsc2UKIAogICAgICAgICAgICAgICAgIGZvciBpZHgsIHBhcmFtIGluIGVudW1lcmF0ZShwYXJhbWV0ZXJzKToKICAgICAgICAgICAgICAgICAgICAga2luZCA9IHBhcmFtLmtpbmQKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBhcmFtLm5hbWUKKwogICAgICAgICAgICAgICAgICAgICBpZiBraW5kIDwgdG9wX2tpbmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAnd3JvbmcgcGFyYW1ldGVyIG9yZGVyOiB7fSBiZWZvcmUge30nCi0gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cuZm9ybWF0KHRvcF9raW5kLCBwYXJhbS5raW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gJ3dyb25nIHBhcmFtZXRlciBvcmRlcjogeyFyfSBiZWZvcmUgeyFyfScKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1zZy5mb3JtYXQodG9wX2tpbmQsIGtpbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBraW5kID4gdG9wX2tpbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBraW5kX2RlZmF1bHRzID0gRmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9raW5kID0ga2luZAogCi0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwYXJhbS5uYW1lCi0gICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzdHIoaWR4KQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5yZXBsYWNlKG5hbWU9bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYga2luZCBpbiAoX1BPU0lUSU9OQUxfT05MWSwgX1BPU0lUSU9OQUxfT1JfS0VZV09SRCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbS5kZWZhdWx0IGlzIF9lbXB0eToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBraW5kX2RlZmF1bHRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIGRlZmF1bHQgZm9yIHRoaXMgcGFyYW1ldGVyLCBidXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJldmlvdXMgcGFyYW1ldGVyIG9mIHRoZSBzYW1lIGtpbmQgaGFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICdub24tZGVmYXVsdCBhcmd1bWVudCBmb2xsb3dzIGRlZmF1bHQgJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmd1bWVudCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlcmUgaXMgYSBkZWZhdWx0IGZvciB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kX2RlZmF1bHRzID0gVHJ1ZQogCiAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gcGFyYW1zOgogICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gJ2R1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZTogeyFyfScuZm9ybWF0KG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKwogICAgICAgICAgICAgICAgICAgICBwYXJhbXNbbmFtZV0gPSBwYXJhbQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYXJhbXMgPSBPcmRlcmVkRGljdCgoKHBhcmFtLm5hbWUsIHBhcmFtKQpAQCAtMTc3OCw4ICsyMzc0LDE0IEBACiAgICAgZGVmIGZyb21fZnVuY3Rpb24oY2xzLCBmdW5jKToKICAgICAgICAgJycnQ29uc3RydWN0cyBTaWduYXR1cmUgZm9yIHRoZSBnaXZlbiBweXRob24gZnVuY3Rpb24nJycKIAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmdW5jLCB0eXBlcy5GdW5jdGlvblR5cGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicuZm9ybWF0KGZ1bmMpKQorICAgICAgICBpc19kdWNrX2Z1bmN0aW9uID0gRmFsc2UKKyAgICAgICAgaWYgbm90IGlzZnVuY3Rpb24oZnVuYyk6CisgICAgICAgICAgICBpZiBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShmdW5jKToKKyAgICAgICAgICAgICAgICBpc19kdWNrX2Z1bmN0aW9uID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIElmIGl0J3Mgbm90IGEgcHVyZSBQeXRob24gZnVuY3Rpb24sIGFuZCBub3QgYSBkdWNrIHR5cGUKKyAgICAgICAgICAgICAgICAjIG9mIHB1cmUgZnVuY3Rpb246CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicuZm9ybWF0KGZ1bmMpKQogCiAgICAgICAgIFBhcmFtZXRlciA9IGNscy5fcGFyYW1ldGVyX2NscwogCkBAIC0xODE2LDcgKzI0MTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdHNbb2Zmc2V0XSkpCiAKICAgICAgICAgIyAqYXJncwotICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiAweDA0OgorICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJBUkdTOgogICAgICAgICAgICAgbmFtZSA9IGFyZ19uYW1lc1twb3NfY291bnQgKyBrZXl3b3JkX29ubHlfY291bnRdCiAgICAgICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZ2V0KG5hbWUsIF9lbXB0eSkKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBhbm5vdGF0aW9uPWFubm90YXRpb24sCkBAIC0xODMzLDkgKzI0MzUsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9X0tFWVdPUkRfT05MWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQpKQogICAgICAgICAjICoqa3dhcmdzCi0gICAgICAgIGlmIGZ1bmNfY29kZS5jb19mbGFncyAmIDB4MDg6CisgICAgICAgIGlmIGZ1bmNfY29kZS5jb19mbGFncyAmIENPX1ZBUktFWVdPUkRTOgogICAgICAgICAgICAgaW5kZXggPSBwb3NfY291bnQgKyBrZXl3b3JkX29ubHlfY291bnQKLSAgICAgICAgICAgIGlmIGZ1bmNfY29kZS5jb19mbGFncyAmIDB4MDQ6CisgICAgICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJBUkdTOgogICAgICAgICAgICAgICAgIGluZGV4ICs9IDEKIAogICAgICAgICAgICAgbmFtZSA9IGFyZ19uYW1lc1tpbmRleF0KQEAgLTE4NDMsOSArMjQ0NSwxNSBAQAogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoUGFyYW1ldGVyKG5hbWUsIGFubm90YXRpb249YW5ub3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kPV9WQVJfS0VZV09SRCkpCiAKKyAgICAgICAgIyBJcyAnZnVuYycgaXMgYSBwdXJlIFB5dGhvbiBmdW5jdGlvbiAtIGRvbid0IHZhbGlkYXRlIHRoZQorICAgICAgICAjIHBhcmFtZXRlcnMgbGlzdCAoZm9yIGNvcnJlY3Qgb3JkZXIgYW5kIGRlZmF1bHRzKSwgaXQgc2hvdWxkIGJlIE9LLgogICAgICAgICByZXR1cm4gY2xzKHBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2Fubm90YXRpb249YW5ub3RhdGlvbnMuZ2V0KCdyZXR1cm4nLCBfZW1wdHkpLAotICAgICAgICAgICAgICAgICAgIF9fdmFsaWRhdGVfcGFyYW1ldGVyc19fPUZhbHNlKQorICAgICAgICAgICAgICAgICAgIF9fdmFsaWRhdGVfcGFyYW1ldGVyc19fPWlzX2R1Y2tfZnVuY3Rpb24pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9idWlsdGluKGNscywgZnVuYyk6CisgICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2Zyb21fYnVpbHRpbihjbHMsIGZ1bmMpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgcGFyYW1ldGVycyhzZWxmKToKQEAgLTE5MTIsMTUgKzI1MjAsNiBAQAogICAgICAgICBwYXJhbWV0ZXJzX2V4ID0gKCkKICAgICAgICAgYXJnX3ZhbHMgPSBpdGVyKGFyZ3MpCiAKLSAgICAgICAgaWYgcGFydGlhbDoKLSAgICAgICAgICAgICMgU3VwcG9ydCBmb3IgYmluZGluZyBhcmd1bWVudHMgdG8gJ2Z1bmN0b29scy5wYXJ0aWFsJyBvYmplY3RzLgotICAgICAgICAgICAgIyBTZWUgJ2Z1bmN0b29scy5wYXJ0aWFsJyBjYXNlIGluICdzaWduYXR1cmUoKScgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgICMgZm9yIGRldGFpbHMuCi0gICAgICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW0gaW4gc2VsZi5wYXJhbWV0ZXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtLl9wYXJ0aWFsX2t3YXJnIGFuZCBwYXJhbV9uYW1lIG5vdCBpbiBrd2FyZ3MpOgotICAgICAgICAgICAgICAgICAgICAjIFNpbXVsYXRpbmcgJ2Z1bmN0b29scy5wYXJ0aWFsJyBiZWhhdmlvcgotICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbcGFyYW1fbmFtZV0gPSBwYXJhbS5kZWZhdWx0Ci0KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICMgTGV0J3MgaXRlcmF0ZSB0aHJvdWdoIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhbmQgY29ycmVzcG9uZGluZwogICAgICAgICAgICAgIyBwYXJhbWV0ZXJzCkBAIC0xOTU1LDYgKzI1NTQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc19leCA9IChwYXJhbSwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBObyBkZWZhdWx0LCBub3QgVkFSX0tFWVdPUkQsIG5vdCBWQVJfUE9TSVRJT05BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbm90IGluIGBrd2FyZ3NgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0aWFsOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNfZXggPSAocGFyYW0sKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xOTkzLDE5ICsyNTk0LDE3IEBACiAgICAgICAgICMga2V5d29yZCBhcmd1bWVudHMKICAgICAgICAga3dhcmdzX3BhcmFtID0gTm9uZQogICAgICAgICBmb3IgcGFyYW0gaW4gaXRlcnRvb2xzLmNoYWluKHBhcmFtZXRlcnNfZXgsIHBhcmFtZXRlcnMpOgotICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgotICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIGNhc2Ugb2YgYSBwcm9wZXJseSBidWlsdAotICAgICAgICAgICAgICAgICMgU2lnbmF0dXJlIG9iamVjdCAoYnV0IGxldCdzIGhhdmUgdGhpcyBjaGVjayBoZXJlCi0gICAgICAgICAgICAgICAgIyB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvdXIganVzdCBpbiBjYXNlKQotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigne2FyZyFyfSBwYXJhbWV0ZXIgaXMgcG9zaXRpb25hbCBvbmx5LCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgd2FzIHBhc3NlZCBhcyBhIGtleXdvcmQnLiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChhcmc9cGFyYW0ubmFtZSkpCi0KICAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgPT0gX1ZBUl9LRVlXT1JEOgogICAgICAgICAgICAgICAgICMgTWVtb3JpemUgdGhhdCB3ZSBoYXZlIGEgJyoqa3dhcmdzJy1saWtlIHBhcmFtZXRlcgogICAgICAgICAgICAgICAgIGt3YXJnc19wYXJhbSA9IHBhcmFtCiAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICAgICAgIyBOYW1lZCBhcmd1bWVudHMgZG9uJ3QgcmVmZXIgdG8gJyphcmdzJy1saWtlIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgIyBXZSBvbmx5IGFycml2ZSBoZXJlIGlmIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBlbmRlZAorICAgICAgICAgICAgICAgICMgYmVmb3JlIHJlYWNoaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBiZWZvcmUgKmFyZ3MuCisgICAgICAgICAgICAgICAgY29udGludWUKKwogICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtLm5hbWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhcmdfdmFsID0ga3dhcmdzLnBvcChwYXJhbV9uYW1lKQpAQCAtMjAyMCw2ICsyNjE5LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoYXJnPXBhcmFtX25hbWUpKSBmcm9tIE5vbmUKIAogICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwYXJhbS5raW5kID09IF9QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIGNhc2Ugb2YgYSBwcm9wZXJseSBidWlsdAorICAgICAgICAgICAgICAgICAgICAjIFNpZ25hdHVyZSBvYmplY3QgKGJ1dCBsZXQncyBoYXZlIHRoaXMgY2hlY2sgaGVyZQorICAgICAgICAgICAgICAgICAgICAjIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBqdXN0IGluIGNhc2UpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigne2FyZyFyfSBwYXJhbWV0ZXIgaXMgcG9zaXRpb25hbCBvbmx5LCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IHdhcyBwYXNzZWQgYXMgYSBrZXl3b3JkJy4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KGFyZz1wYXJhbS5uYW1lKSkKKwogICAgICAgICAgICAgICAgIGFyZ3VtZW50c1twYXJhbV9uYW1lXSA9IGFyZ192YWwKIAogICAgICAgICBpZiBrd2FyZ3M6CkBAIC0yMDMxLDI3ICsyNjM4LDM3IEBACiAKICAgICAgICAgcmV0dXJuIHNlbGYuX2JvdW5kX2FyZ3VtZW50c19jbHMoc2VsZiwgYXJndW1lbnRzKQogCi0gICAgZGVmIGJpbmQoX19iaW5kX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgZGVmIGJpbmQoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgJycnR2V0IGEgQm91bmRBcmd1bWVudHMgb2JqZWN0LCB0aGF0IG1hcHMgdGhlIHBhc3NlZCBgYXJnc2AKICAgICAgICAgYW5kIGBrd2FyZ3NgIHRvIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZS4gIFJhaXNlcyBgVHlwZUVycm9yYAogICAgICAgICBpZiB0aGUgcGFzc2VkIGFyZ3VtZW50cyBjYW4gbm90IGJlIGJvdW5kLgogICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIF9fYmluZF9zZWxmLl9iaW5kKGFyZ3MsIGt3YXJncykKKyAgICAgICAgcmV0dXJuIGFyZ3NbMF0uX2JpbmQoYXJnc1sxOl0sIGt3YXJncykKIAotICAgIGRlZiBiaW5kX3BhcnRpYWwoX19iaW5kX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgZGVmIGJpbmRfcGFydGlhbCgqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAnJydHZXQgYSBCb3VuZEFyZ3VtZW50cyBvYmplY3QsIHRoYXQgcGFydGlhbGx5IG1hcHMgdGhlCiAgICAgICAgIHBhc3NlZCBgYXJnc2AgYW5kIGBrd2FyZ3NgIHRvIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZS4KICAgICAgICAgUmFpc2VzIGBUeXBlRXJyb3JgIGlmIHRoZSBwYXNzZWQgYXJndW1lbnRzIGNhbiBub3QgYmUgYm91bmQuCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gX19iaW5kX3NlbGYuX2JpbmQoYXJncywga3dhcmdzLCBwYXJ0aWFsPVRydWUpCisgICAgICAgIHJldHVybiBhcmdzWzBdLl9iaW5kKGFyZ3NbMTpdLCBrd2FyZ3MsIHBhcnRpYWw9VHJ1ZSkKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICByZW5kZXJfcG9zX29ubHlfc2VwYXJhdG9yID0gRmFsc2UKICAgICAgICAgcmVuZGVyX2t3X29ubHlfc2VwYXJhdG9yID0gVHJ1ZQotICAgICAgICBmb3IgaWR4LCBwYXJhbSBpbiBlbnVtZXJhdGUoc2VsZi5wYXJhbWV0ZXJzLnZhbHVlcygpKToKKyAgICAgICAgZm9yIHBhcmFtIGluIHNlbGYucGFyYW1ldGVycy52YWx1ZXMoKToKICAgICAgICAgICAgIGZvcm1hdHRlZCA9IHN0cihwYXJhbSkKIAogICAgICAgICAgICAga2luZCA9IHBhcmFtLmtpbmQKKworICAgICAgICAgICAgaWYga2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgorICAgICAgICAgICAgICAgIHJlbmRlcl9wb3Nfb25seV9zZXBhcmF0b3IgPSBUcnVlCisgICAgICAgICAgICBlbGlmIHJlbmRlcl9wb3Nfb25seV9zZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgIyBJdCdzIG5vdCBhIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXIsIGFuZCB0aGUgZmxhZworICAgICAgICAgICAgICAgICMgaXMgc2V0IHRvICdUcnVlJyAodGhlcmUgd2VyZSBwb3Mtb25seSBwYXJhbXMgYmVmb3JlLikKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcvJykKKyAgICAgICAgICAgICAgICByZW5kZXJfcG9zX29ubHlfc2VwYXJhdG9yID0gRmFsc2UKKwogICAgICAgICAgICAgaWYga2luZCA9PSBfVkFSX1BPU0lUSU9OQUw6CiAgICAgICAgICAgICAgICAgIyBPSywgd2UgaGF2ZSBhbiAnKmFyZ3MnLWxpa2UgcGFyYW1ldGVyLCBzbyB3ZSB3b24ndCBuZWVkCiAgICAgICAgICAgICAgICAgIyBhICcqJyB0byBzZXBhcmF0ZSBrZXl3b3JkLW9ubHkgYXJndW1lbnRzCkBAIC0yMDY3LDYgKzI2ODQsMTEgQEAKIAogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmb3JtYXR0ZWQpCiAKKyAgICAgICAgaWYgcmVuZGVyX3Bvc19vbmx5X3NlcGFyYXRvcjoKKyAgICAgICAgICAgICMgVGhlcmUgd2VyZSBvbmx5IHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCBoZW5jZSB0aGUKKyAgICAgICAgICAgICMgZmxhZyB3YXMgbm90IHJlc2V0IHRvICdGYWxzZScKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKQorCiAgICAgICAgIHJlbmRlcmVkID0gJyh7fSknLmZvcm1hdCgnLCAnLmpvaW4ocmVzdWx0KSkKIAogICAgICAgICBpZiBzZWxmLnJldHVybl9hbm5vdGF0aW9uIGlzIG5vdCBfZW1wdHk6CkBAIC0yMDc0LDMgKzI2OTYsNjQgQEAKICAgICAgICAgICAgIHJlbmRlcmVkICs9ICcgLT4ge30nLmZvcm1hdChhbm5vKQogCiAgICAgICAgIHJldHVybiByZW5kZXJlZAorCitkZWYgX21haW4oKToKKyAgICAiIiIgTG9naWMgZm9yIGluc3BlY3RpbmcgYW4gb2JqZWN0IGdpdmVuIGF0IGNvbW1hbmQgbGluZSAiIiIKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBpbXBvcnQgaW1wb3J0bGliCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJ29iamVjdCcsCisgICAgICAgICBoZWxwPSJUaGUgb2JqZWN0IHRvIGJlIGFuYWx5c2VkLiAiCisgICAgICAgICAgICAgICJJdCBzdXBwb3J0cyB0aGUgJ21vZHVsZTpxdWFsbmFtZScgc3ludGF4IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnLWQnLCAnLS1kZXRhaWxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgaGVscD0nRGlzcGxheSBpbmZvIGFib3V0IHRoZSBtb2R1bGUgcmF0aGVyIHRoYW4gaXRzIHNvdXJjZSBjb2RlJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICB0YXJnZXQgPSBhcmdzLm9iamVjdAorICAgIG1vZF9uYW1lLCBoYXNfYXR0cnMsIGF0dHJzID0gdGFyZ2V0LnBhcnRpdGlvbigiOiIpCisgICAgdHJ5OgorICAgICAgICBvYmogPSBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2RfbmFtZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgbXNnID0gIkZhaWxlZCB0byBpbXBvcnQge30gKHt9OiB7fSkiLmZvcm1hdChtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGV4YykuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjKQorICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZXhpdCgyKQorCisgICAgaWYgaGFzX2F0dHJzOgorICAgICAgICBwYXJ0cyA9IGF0dHJzLnNwbGl0KCIuIikKKyAgICAgICAgb2JqID0gbW9kdWxlCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHBhcnQpCisKKyAgICBpZiBtb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICBwcmludCgiQ2FuJ3QgZ2V0IGluZm8gZm9yIGJ1aWx0aW4gbW9kdWxlcy4iLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGV4aXQoMSkKKworICAgIGlmIGFyZ3MuZGV0YWlsczoKKyAgICAgICAgcHJpbnQoJ1RhcmdldDoge30nLmZvcm1hdCh0YXJnZXQpKQorICAgICAgICBwcmludCgnT3JpZ2luOiB7fScuZm9ybWF0KGdldHNvdXJjZWZpbGUobW9kdWxlKSkpCisgICAgICAgIHByaW50KCdDYWNoZWQ6IHt9Jy5mb3JtYXQobW9kdWxlLl9fY2FjaGVkX18pKQorICAgICAgICBpZiBvYmogaXMgbW9kdWxlOgorICAgICAgICAgICAgcHJpbnQoJ0xvYWRlcjoge30nLmZvcm1hdChyZXByKG1vZHVsZS5fX2xvYWRlcl9fKSkpCisgICAgICAgICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1N1Ym1vZHVsZSBzZWFyY2ggcGF0aDoge30nLmZvcm1hdChtb2R1bGUuX19wYXRoX18pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9fLCBsaW5lbm8gPSBmaW5kc291cmNlKG9iaikKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgnTGluZToge30nLmZvcm1hdChsaW5lbm8pKQorCisgICAgICAgIHByaW50KCdcbicpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoZ2V0c291cmNlKG9iaikpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaW8ucHkgYi9MaWIvaW8ucHkKaW5kZXggYmRhNGRlZi4uOGQ2OGYxZSAxMDA2NDQKLS0tIGEvTGliL2lvLnB5CisrKyBiL0xpYi9pby5weQpAQCAtNCw3ICs0LDcgQEAKIEF0IHRoZSB0b3Agb2YgdGhlIEkvTyBoaWVyYXJjaHkgaXMgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgSU9CYXNlLiBJdAogZGVmaW5lcyB0aGUgYmFzaWMgaW50ZXJmYWNlIHRvIGEgc3RyZWFtLiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZXJlIGlzIG5vCiBzZXBhcmF0aW9uIGJldHdlZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBzdHJlYW1zOyBpbXBsZW1lbnRhdGlvbnMgYXJlCi1hbGxvd2VkIHRvIHJhaXNlIGFuIElPRXJyb3IgaWYgdGhleSBkbyBub3Qgc3VwcG9ydCBhIGdpdmVuIG9wZXJhdGlvbi4KK2FsbG93ZWQgdG8gcmFpc2UgYW4gT1NFcnJvciBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLgogCiBFeHRlbmRpbmcgSU9CYXNlIGlzIFJhd0lPQmFzZSB3aGljaCBkZWFscyBzaW1wbHkgd2l0aCB0aGUgcmVhZGluZyBhbmQKIHdyaXRpbmcgb2YgcmF3IGJ5dGVzIHRvIGEgc3RyZWFtLiBGaWxlSU8gc3ViY2xhc3NlcyBSYXdJT0Jhc2UgdG8gcHJvdmlkZQpAQCAtNzAsMTYgKzcwLDE2IEBACiAjIE1ldGhvZCBkZXNjcmlwdGlvbnMgYW5kIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgQwogIyB2ZXJzaW9uIGhvd2V2ZXIuCiBjbGFzcyBJT0Jhc2UoX2lvLl9JT0Jhc2UsIG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6Ci0gICAgcGFzcworICAgIF9fZG9jX18gPSBfaW8uX0lPQmFzZS5fX2RvY19fCiAKIGNsYXNzIFJhd0lPQmFzZShfaW8uX1Jhd0lPQmFzZSwgSU9CYXNlKToKLSAgICBwYXNzCisgICAgX19kb2NfXyA9IF9pby5fUmF3SU9CYXNlLl9fZG9jX18KIAogY2xhc3MgQnVmZmVyZWRJT0Jhc2UoX2lvLl9CdWZmZXJlZElPQmFzZSwgSU9CYXNlKToKLSAgICBwYXNzCisgICAgX19kb2NfXyA9IF9pby5fQnVmZmVyZWRJT0Jhc2UuX19kb2NfXwogCiBjbGFzcyBUZXh0SU9CYXNlKF9pby5fVGV4dElPQmFzZSwgSU9CYXNlKToKLSAgICBwYXNzCisgICAgX19kb2NfXyA9IF9pby5fVGV4dElPQmFzZS5fX2RvY19fCiAKIFJhd0lPQmFzZS5yZWdpc3RlcihGaWxlSU8pCiAKZGlmZiAtLWdpdCBhL0xpYi9pcGFkZHJlc3MucHkgYi9MaWIvaXBhZGRyZXNzLnB5CmluZGV4IGVjZjNmNDQuLjU0ZGYzOWEgMTAwNjQ0Ci0tLSBhL0xpYi9pcGFkZHJlc3MucHkKKysrIGIvTGliL2lwYWRkcmVzcy5weQpAQCAtMTAzMCwxMyArMTAzMCwyNSBAQAogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQxOTMuCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIChzZWxmLm5ldHdvcmtfYWRkcmVzcy5pc19wcml2YXRlIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MuaXNfcHJpdmF0ZSkKIAogICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbm90IHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5pc19wcml2YXRlCisKKyAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfdW5zcGVjaWZpZWQoc2VsZik6CiAgICAgICAgICIiIlRlc3QgaWYgdGhlIGFkZHJlc3MgaXMgdW5zcGVjaWZpZWQuCiAKQEAgLTEyNzYsMTkgKzEyODgsMzAgQEAKICAgICAgICAgcmV0dXJuIHNlbGYgaW4gcmVzZXJ2ZWRfbmV0d29yawogCiAgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQogICAgIGRlZiBpc19wcml2YXRlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDE5MTguCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcHJpdmF0ZV8xMCA9IElQdjROZXR3b3JrKCcxMC4wLjAuMC84JykKLSAgICAgICAgcHJpdmF0ZV8xNzIgPSBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpCi0gICAgICAgIHByaXZhdGVfMTkyID0gSVB2NE5ldHdvcmsoJzE5Mi4xNjguMC4wLzE2JykKLSAgICAgICAgcmV0dXJuIChzZWxmIGluIHByaXZhdGVfMTAgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIHByaXZhdGVfMTcyIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBwcml2YXRlXzE5MikKKyAgICAgICAgcmV0dXJuIChzZWxmIGluIElQdjROZXR3b3JrKCcwLjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEwLjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEyNy4wLjAuMC84Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxNjkuMjU0LjAuMC8xNicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMC4wLzI5Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4wLjE3MC8zMScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMi4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMTY4LjAuMC8xNicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTk4LjE4LjAuMC8xNScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTk4LjUxLjEwMC4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyMDMuMC4xMTMuMC8yNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjQwLjAuMC4wLzQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzI1NS4yNTUuMjU1LjI1NS8zMicpKQorCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfbXVsdGljYXN0KHNlbGYpOgpAQCAtMTUwNCw2ICsxNTI3LDIxIEBACiAgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSAoc2VsZi5fbWF4X3ByZWZpeGxlbiAtIDEpOgogICAgICAgICAgICAgc2VsZi5ob3N0cyA9IHNlbGYuX19pdGVyX18KIAorICAgIEBwcm9wZXJ0eQorICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gKG5vdCAoc2VsZi5uZXR3b3JrX2FkZHJlc3MgaW4gSVB2NE5ldHdvcmsoJzEwMC42NC4wLjAvMTAnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5icm9hZGNhc3RfYWRkcmVzcyBpbiBJUHY0TmV0d29yaygnMTAwLjY0LjAuMC8xMCcpKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5pc19wcml2YXRlKQorCisKIAogY2xhc3MgX0Jhc2VWNjoKIApAQCAtMTg2MCwxNSArMTg5OCwzNiBAQAogICAgICAgICByZXR1cm4gc2VsZiBpbiBzaXRlbG9jYWxfbmV0d29yawogCiAgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQogICAgIGRlZiBpc19wcml2YXRlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQxOTMuCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcHJpdmF0ZV9uZXR3b3JrID0gSVB2Nk5ldHdvcmsoJ2ZjMDA6Oi83JykKLSAgICAgICAgcmV0dXJuIHNlbGYgaW4gcHJpdmF0ZV9uZXR3b3JrCisgICAgICAgIHJldHVybiAoc2VsZiBpbiBJUHY2TmV0d29yaygnOjoxLzEyOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnOjovMTI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCc6OmZmZmY6MDowLzk2Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcxMDA6Oi82NCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMTo6LzIzJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjI6Oi80OCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMTpkYjg6Oi8zMicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMToxMDo6LzI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCdmYzAwOjovNycpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnZmU4MDo6LzEwJykpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCB0cnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuaXNfcHJpdmF0ZQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX3Vuc3BlY2lmaWVkKHNlbGYpOgpAQCAtMjA5Niw2ICsyMTU1LDE4IEBACiAgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSAoc2VsZi5fbWF4X3ByZWZpeGxlbiAtIDEpOgogICAgICAgICAgICAgc2VsZi5ob3N0cyA9IHNlbGYuX19pdGVyX18KIAorICAgIGRlZiBob3N0cyhzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgSXRlcmF0b3Igb3ZlciB1c2FibGUgaG9zdHMgaW4gYSBuZXR3b3JrLgorCisgICAgICAgICAgVGhpcyBpcyBsaWtlIF9faXRlcl9fIGV4Y2VwdCBpdCBkb2Vzbid0IHJldHVybiB0aGUKKyAgICAgICAgICBTdWJuZXQtUm91dGVyIGFueWNhc3QgYWRkcmVzcy4KKworICAgICAgICAiIiIKKyAgICAgICAgbmV0d29yayA9IGludChzZWxmLm5ldHdvcmtfYWRkcmVzcykKKyAgICAgICAgYnJvYWRjYXN0ID0gaW50KHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MpCisgICAgICAgIGZvciB4IGluIHJhbmdlKG5ldHdvcmsgKyAxLCBicm9hZGNhc3QgKyAxKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX2FkZHJlc3NfY2xhc3MoeCkKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19zaXRlX2xvY2FsKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIGZvciBzaXRlLWxvY2FsLgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vX19pbml0X18ucHkgYi9MaWIvanNvbi9fX2luaXRfXy5weQppbmRleCA2ZDliMzBkLi45NGY3ZDhjIDEwMDY0NAotLS0gYS9MaWIvanNvbi9fX2luaXRfXy5weQorKysgYi9MaWIvanNvbi9fX2luaXRfXy5weQpAQCAtMzYsOCArMzYsNyBAQAogUHJldHR5IHByaW50aW5nOjoKIAogICAgID4+PiBpbXBvcnQganNvbgotICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLAotICAgIC4uLiAgICAgICAgICAgICAgICAgIGluZGVudD00LCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKSkKKyAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpKQogICAgIHsKICAgICAgICAgIjQiOiA1LAogICAgICAgICAiNiI6IDcKQEAgLTE0MywxMyArMTQyLDEyIEBACiAgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kCiAgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQKICAgICBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QKLSAgICByZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlCi0gICAgb3V0cHV0IG1pZ2h0IGluY2x1ZGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuIGBgaW5kZW50YGAgaXMgc3BlY2lmaWVkLgotICAgIFlvdSBjYW4gdXNlIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCisgICAgcmVwcmVzZW50YXRpb24uCiAKLSAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcsICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCisgICAgSWYgc3BlY2lmaWVkLCBgYHNlcGFyYXRvcnNgYCBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCiAgICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCiAgICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVFcnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCkBAIC0yMDYsMTMgKzIwNCwxMiBAQAogICAgIElmIGBgaW5kZW50YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZAogICAgIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZlbC4gQW4gaW5kZW50CiAgICAgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0Ci0gICAgcmVwcmVzZW50YXRpb24uICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZQotICAgIG91dHB1dCBtaWdodCBpbmNsdWRlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hlbiBgYGluZGVudGBgIGlzIHNwZWNpZmllZC4KLSAgICBZb3UgY2FuIHVzZSBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgorICAgIHJlcHJlc2VudGF0aW9uLgogCi0gICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlCi0gICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCi0gICAgYGAoJywnLCAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorICAgIElmIHNwZWNpZmllZCwgYGBzZXBhcmF0b3JzYGAgc2hvdWxkIGJlIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKWBgCisgICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAogICAgIGBgZGVmYXVsdChvYmopYGAgaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYSBzZXJpYWxpemFibGUgdmVyc2lvbgogICAgIG9mIG9iaiBvciByYWlzZSBUeXBlRXJyb3IuIFRoZSBkZWZhdWx0IHNpbXBseSByYWlzZXMgVHlwZUVycm9yLgpAQCAtMzEwLDYgKzMwNywxMSBAQAogICAgIFRoZSBgYGVuY29kaW5nYGAgYXJndW1lbnQgaXMgaWdub3JlZCBhbmQgZGVwcmVjYXRlZC4KIAogICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIHN0cik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyLCBub3QgeyFyfScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICBpZiBzLnN0YXJ0c3dpdGgodSdcdWZlZmYnKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5leHBlY3RlZCBVVEYtOCBCT00gKGRlY29kZSB1c2luZyB1dGYtOC1zaWcpIikKICAgICBpZiAoY2xzIGlzIE5vbmUgYW5kIG9iamVjdF9ob29rIGlzIE5vbmUgYW5kCiAgICAgICAgICAgICBwYXJzZV9pbnQgaXMgTm9uZSBhbmQgcGFyc2VfZmxvYXQgaXMgTm9uZSBhbmQKICAgICAgICAgICAgIHBhcnNlX2NvbnN0YW50IGlzIE5vbmUgYW5kIG9iamVjdF9wYWlyc19ob29rIGlzIE5vbmUgYW5kIG5vdCBrdyk6CmRpZmYgLS1naXQgYS9MaWIvanNvbi9kZWNvZGVyLnB5IGIvTGliL2pzb24vZGVjb2Rlci5weQppbmRleCA4MGQzNDIwLi41OWU1ZjQxIDEwMDY0NAotLS0gYS9MaWIvanNvbi9kZWNvZGVyLnB5CisrKyBiL0xpYi9qc29uL2RlY29kZXIucHkKQEAgLTEsOSArMSw2IEBACiAiIiJJbXBsZW1lbnRhdGlvbiBvZiBKU09ORGVjb2RlcgogIiIiCi1pbXBvcnQgYmluYXNjaWkKIGltcG9ydCByZQotaW1wb3J0IHN5cwotaW1wb3J0IHN0cnVjdAogCiBmcm9tIGpzb24gaW1wb3J0IHNjYW5uZXIKIHRyeToKQEAgLTE1LDE0ICsxMiw5IEBACiAKIEZMQUdTID0gcmUuVkVSQk9TRSB8IHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTAogCi1kZWYgX2Zsb2F0Y29uc3RhbnRzKCk6Ci0gICAgX0JZVEVTID0gYmluYXNjaWkudW5oZXhsaWZ5KGInN0ZGODAwMDAwMDAwMDAwMDdGRjAwMDAwMDAwMDAwMDAnKQotICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIF9CWVRFUyA9IF9CWVRFU1s6OF1bOjotMV0gKyBfQllURVNbODpdWzo6LTFdCi0gICAgbmFuLCBpbmYgPSBzdHJ1Y3QudW5wYWNrKCdkZCcsIF9CWVRFUykKLSAgICByZXR1cm4gbmFuLCBpbmYsIC1pbmYKLQotTmFOLCBQb3NJbmYsIE5lZ0luZiA9IF9mbG9hdGNvbnN0YW50cygpCitOYU4gPSBmbG9hdCgnbmFuJykKK1Bvc0luZiA9IGZsb2F0KCdpbmYnKQorTmVnSW5mID0gZmxvYXQoJy1pbmYnKQogCiAKIGRlZiBsaW5lY29sKGRvYywgcG9zKToKQEAgLTE5NSw4ICsxODcsOCBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBzY2FuX29uY2UocywgZW5kKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICBwYWlyc19hcHBlbmQoKGtleSwgdmFsdWUpKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5kXQpAQCAtMjM5LDggKzIzMSw4IEBACiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSkgZnJvbSBOb25lCiAgICAgICAgIF9hcHBlbmQodmFsdWUpCiAgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KICAgICAgICAgaWYgbmV4dGNoYXIgaW4gX3dzOgpAQCAtMjUwLDcgKzI0Miw3IEBACiAgICAgICAgIGlmIG5leHRjaGFyID09ICddJzoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJywnOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcywgZW5kKSkKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHMsIGVuZCAtIDEpKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzW2VuZF0gaW4gX3dzOgogICAgICAgICAgICAgICAgIGVuZCArPSAxCkBAIC0zNjUsNiArMzU3LDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9iaiwgZW5kID0gc2VsZi5zY2FuX29uY2UocywgaWR4KQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIEpTT04gb2JqZWN0IGNvdWxkIGJlIGRlY29kZWQiKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSkgZnJvbSBOb25lCiAgICAgICAgIHJldHVybiBvYmosIGVuZApkaWZmIC0tZ2l0IGEvTGliL2pzb24vZW5jb2Rlci5weSBiL0xpYi9qc29uL2VuY29kZXIucHkKaW5kZXggMWQ4YjIwYy4uMDUxMzgzOCAxMDA2NDQKLS0tIGEvTGliL2pzb24vZW5jb2Rlci5weQorKysgYi9MaWIvanNvbi9lbmNvZGVyLnB5CkBAIC0xMjUsMTQgKzEyNSwxMiBAQAogICAgICAgICBJZiBpbmRlbnQgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5CiAgICAgICAgIGVsZW1lbnRzIGFuZCBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdAogICAgICAgICBpbmRlbnQgbGV2ZWwuICBBbiBpbmRlbnQgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLgotICAgICAgICBOb25lIGlzIHRoZSBtb3N0IGNvbXBhY3QgcmVwcmVzZW50YXRpb24uICBTaW5jZSB0aGUgZGVmYXVsdAotICAgICAgICBpdGVtIHNlcGFyYXRvciBpcyAnLCAnLCAgdGhlIG91dHB1dCBtaWdodCBpbmNsdWRlIHRyYWlsaW5nCi0gICAgICAgIHdoaXRlc3BhY2Ugd2hlbiBpbmRlbnQgaXMgc3BlY2lmaWVkLiAgWW91IGNhbiB1c2UKLSAgICAgICAgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSB0byBhdm9pZCB0aGlzLgorICAgICAgICBOb25lIGlzIHRoZSBtb3N0IGNvbXBhY3QgcmVwcmVzZW50YXRpb24uCiAKLSAgICAgICAgSWYgc3BlY2lmaWVkLCBzZXBhcmF0b3JzIHNob3VsZCBiZSBhIChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcikKLSAgICAgICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyAoJywgJywgJzogJykuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OCi0gICAgICAgIHJlcHJlc2VudGF0aW9uIHlvdSBzaG91bGQgc3BlY2lmeSAoJywnLCAnOicpIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorICAgICAgICBJZiBzcGVjaWZpZWQsIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGFuIChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcikKKyAgICAgICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyAoJywgJywgJzogJykgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICAgICAgICgnLCcsICc6ICcpIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICAgICAgIHlvdSBzaG91bGQgc3BlY2lmeSAoJywnLCAnOicpIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCiAgICAgICAgIElmIHNwZWNpZmllZCwgZGVmYXVsdCBpcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIG9iamVjdHMKICAgICAgICAgdGhhdCBjYW4ndCBvdGhlcndpc2UgYmUgc2VyaWFsaXplZC4gIEl0IHNob3VsZCByZXR1cm4gYSBKU09OIGVuY29kYWJsZQpAQCAtMTQ4LDYgKzE0Niw4IEBACiAgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CiAgICAgICAgIGlmIHNlcGFyYXRvcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJhdG9yLCBzZWxmLmtleV9zZXBhcmF0b3IgPSBzZXBhcmF0b3JzCisgICAgICAgIGVsaWYgaW5kZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFyYXRvciA9ICcsJwogICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5kZWZhdWx0ID0gZGVmYXVsdAogCkBAIC0xNzUsNiArMTc1LDcgQEAKICAgICBkZWYgZW5jb2RlKHNlbGYsIG8pOgogICAgICAgICAiIiJSZXR1cm4gYSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBkYXRhIHN0cnVjdHVyZS4KIAorICAgICAgICA+Pj4gZnJvbSBqc29uLmVuY29kZXIgaW1wb3J0IEpTT05FbmNvZGVyCiAgICAgICAgID4+PiBKU09ORW5jb2RlcigpLmVuY29kZSh7ImZvbyI6IFsiYmFyIiwgImJheiJdfSkKICAgICAgICAgJ3siZm9vIjogWyJiYXIiLCAiYmF6Il19JwogCkBAIC0yOTgsOSArMjk5LDEzIEBACiAgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArICdmYWxzZScKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBTdWJjbGFzc2VzIG9mIGludC9mbG9hdCBtYXkgb3ZlcnJpZGUgX19zdHJfXywgYnV0IHdlIHN0aWxsCisgICAgICAgICAgICAgICAgIyB3YW50IHRvIGVuY29kZSB0aGVtIGFzIGludGVnZXJzL2Zsb2F0cyBpbiBKU09OLiBPbmUgZXhhbXBsZQorICAgICAgICAgICAgICAgICMgd2l0aGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGlzIEludEVudW0uCisgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgc3RyKGludCh2YWx1ZSkpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBfZmxvYXRzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm92ZSBmb3IgaW50CisgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2Zsb2F0c3RyKGZsb2F0KHZhbHVlKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgeWllbGQgYnVmCiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CkBAIC0zMDksOCArMzE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfZGljdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlKHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGNodW5rcwogICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCiAgICAgICAgICAgICB5aWVsZCAnXG4nICsgX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbApAQCAtMzQ3LDcgKzM1MSw4IEBACiAgICAgICAgICAgICAjIEphdmFTY3JpcHQgaXMgd2Vha2x5IHR5cGVkIGZvciB0aGVzZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8KICAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtLiAgTWFueSBlbmNvZGVycyBzZWVtIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gX2Zsb2F0c3RyKGtleSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIGtleSA9IF9mbG9hdHN0cihmbG9hdChrZXkpKQogICAgICAgICAgICAgZWxpZiBrZXkgaXMgVHJ1ZToKICAgICAgICAgICAgICAgICBrZXkgPSAndHJ1ZScKICAgICAgICAgICAgIGVsaWYga2V5IGlzIEZhbHNlOgpAQCAtMzU1LDcgKzM2MCw4IEBACiAgICAgICAgICAgICBlbGlmIGtleSBpcyBOb25lOgogICAgICAgICAgICAgICAgIGtleSA9ICdudWxsJwogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgaW50KToKLSAgICAgICAgICAgICAgICBrZXkgPSBzdHIoa2V5KQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAga2V5ID0gc3RyKGludChrZXkpKQogICAgICAgICAgICAgZWxpZiBfc2tpcGtleXM6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNzUsOSArMzgxLDExIEBACiAgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkICdmYWxzZScKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICB5aWVsZCBzdHIoaW50KHZhbHVlKSkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cih2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cihmbG9hdCh2YWx1ZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9saXN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCkBAIC0zODUsOCArMzkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfZGljdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlKHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGNodW5rcwogICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCiAgICAgICAgICAgICB5aWVsZCAnXG4nICsgX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbApAQCAtNDA0LDE1ICs0MTEsMTUgQEAKICAgICAgICAgZWxpZiBvIGlzIEZhbHNlOgogICAgICAgICAgICAgeWllbGQgJ2ZhbHNlJwogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgaW50KToKLSAgICAgICAgICAgIHlpZWxkIHN0cihvKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgIHlpZWxkIHN0cihpbnQobykpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBmbG9hdCk6Ci0gICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIobykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIoZmxvYXQobykpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZV9saXN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBkaWN0KToKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZV9kaWN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGVfZGljdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobykKQEAgLTQyMCw4ICs0MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQogICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFya2VyaWRdID0gbwogICAgICAgICAgICAgbyA9IF9kZWZhdWx0KG8pCi0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgeWllbGQgZnJvbSBfaXRlcmVuY29kZShvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQogICAgIHJldHVybiBfaXRlcmVuY29kZQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vc2Nhbm5lci5weSBiL0xpYi9qc29uL3NjYW5uZXIucHkKaW5kZXggMjNlZWY2MS4uODY0MjZjZCAxMDA2NDQKLS0tIGEvTGliL2pzb24vc2Nhbm5lci5weQorKysgYi9MaWIvanNvbi9zY2FubmVyLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5leHRjaGFyID0gc3RyaW5nW2lkeF0KICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKGlkeCkKIAogICAgICAgICBpZiBuZXh0Y2hhciA9PSAnIic6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2Vfc3RyaW5nKHN0cmluZywgaWR4ICsgMSwgc3RyaWN0KQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBlbGlmIG5leHRjaGFyID09ICctJyBhbmQgc3RyaW5nW2lkeDppZHggKyA5XSA9PSAnLUluZmluaXR5JzoKICAgICAgICAgICAgIHJldHVybiBwYXJzZV9jb25zdGFudCgnLUluZmluaXR5JyksIGlkeCArIDkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oaWR4KQogCiAgICAgZGVmIHNjYW5fb25jZShzdHJpbmcsIGlkeCk6CiAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rvb2wucHkgYi9MaWIvanNvbi90b29sLnB5CmluZGV4IGVjZjljNDcuLjdkYjQ1MjggMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rvb2wucHkKKysrIGIvTGliL2pzb24vdG9vbC5weQpAQCAtMzEsOCArMzEsNyBAQAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChlKQogICAgIHdpdGggb3V0ZmlsZToKLSAgICAgICAganNvbi5kdW1wKG9iaiwgb3V0ZmlsZSwgc29ydF9rZXlzPVRydWUsCi0gICAgICAgICAgICAgICAgICBpbmRlbnQ9NCwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkKKyAgICAgICAganNvbi5kdW1wKG9iaiwgb3V0ZmlsZSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KQogICAgICAgICBvdXRmaWxlLndyaXRlKCdcbicpCiAKIApkaWZmIC0tZ2l0IGEvTGliL2tleXdvcmQucHkgYi9MaWIva2V5d29yZC5weQppbmRleCBkYWQzOWNjLi42ZTFlODgyIDEwMDc1NQotLS0gYS9MaWIva2V5d29yZC5weQorKysgYi9MaWIva2V5d29yZC5weQpAQCAtNjAsNiArNjAsMTIgQEAKICAgICBpZiBsZW4oYXJncykgPiAxOiBvcHRmaWxlID0gYXJnc1sxXQogICAgIGVsc2U6IG9wdGZpbGUgPSAiTGliL2tleXdvcmQucHkiCiAKKyAgICAjIGxvYWQgdGhlIG91dHB1dCBza2VsZXRvbiBmcm9tIHRoZSB0YXJnZXQsIHRha2luZyBjYXJlIHRvIHByZXNlcnZlIGl0cworICAgICMgbmV3bGluZSBjb252ZW50aW9uLgorICAgIHdpdGggb3BlbihvcHRmaWxlLCBuZXdsaW5lPScnKSBhcyBmcDoKKyAgICAgICAgZm9ybWF0ID0gZnAucmVhZGxpbmVzKCkKKyAgICBubCA9IGZvcm1hdFswXVtsZW4oZm9ybWF0WzBdLnN0cmlwKCkpOl0gaWYgZm9ybWF0IGVsc2UgJ1xuJworCiAgICAgIyBzY2FuIHRoZSBzb3VyY2UgZmlsZSBmb3Iga2V5d29yZHMKICAgICB3aXRoIG9wZW4oaXB0ZmlsZSkgYXMgZnA6CiAgICAgICAgIHN0cnByb2cgPSByZS5jb21waWxlKCciKFteIl0rKSInKQpAQCAtNjgsMjYgKzc0LDIxIEBACiAgICAgICAgICAgICBpZiAnezEsICInIGluIGxpbmU6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBzdHJwcm9nLnNlYXJjaChsaW5lKQogICAgICAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICAgICAgJyIgKyBtYXRjaC5ncm91cCgxKSArICInLFxuIikKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgICAgICciICsgbWF0Y2guZ3JvdXAoMSkgKyAiJywiICsgbmwpCiAgICAgbGluZXMuc29ydCgpCiAKLSAgICAjIGxvYWQgdGhlIG91dHB1dCBza2VsZXRvbiBmcm9tIHRoZSB0YXJnZXQKLSAgICB3aXRoIG9wZW4ob3B0ZmlsZSkgYXMgZnA6Ci0gICAgICAgIGZvcm1hdCA9IGZwLnJlYWRsaW5lcygpCi0KLSAgICAjIGluc2VydCB0aGUgbGluZXMgb2Yga2V5d29yZHMKKyAgICAjIGluc2VydCB0aGUgbGluZXMgb2Yga2V5d29yZHMgaW50byB0aGUgc2tlbGV0b24KICAgICB0cnk6Ci0gICAgICAgIHN0YXJ0ID0gZm9ybWF0LmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tXG4iKSArIDEKLSAgICAgICAgZW5kID0gZm9ybWF0LmluZGV4KCIjLS1lbmQga2V5d29yZHMtLVxuIikKKyAgICAgICAgc3RhcnQgPSBmb3JtYXQuaW5kZXgoIiMtLXN0YXJ0IGtleXdvcmRzLS0iICsgbmwpICsgMQorICAgICAgICBlbmQgPSBmb3JtYXQuaW5kZXgoIiMtLWVuZCBrZXl3b3Jkcy0tIiArIG5sKQogICAgICAgICBmb3JtYXRbc3RhcnQ6ZW5kXSA9IGxpbmVzCiAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInRhcmdldCBkb2VzIG5vdCBjb250YWluIGZvcm1hdCBtYXJrZXJzXG4iKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgIyB3cml0ZSB0aGUgb3V0cHV0IGZpbGUKLSAgICBmcCA9IG9wZW4ob3B0ZmlsZSwgJ3cnKQotICAgIGZwLndyaXRlKCcnLmpvaW4oZm9ybWF0KSkKLSAgICBmcC5jbG9zZSgpCisgICAgd2l0aCBvcGVuKG9wdGZpbGUsICd3JywgbmV3bGluZT0nJykgYXMgZnA6CisgICAgICAgIGZwLndyaXRlbGluZXMoZm9ybWF0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQgYi9MaWIvbGliMnRvMy9HcmFtbWFyLnR4dAppbmRleCAxZTFmMjRjLi5lNjY3YmNkIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9HcmFtbWFyLnR4dAorKysgYi9MaWIvbGliMnRvMy9HcmFtbWFyLnR4dApAQCAtNTYsNyArNTYsNyBAQAogZXhwcl9zdG10OiB0ZXN0bGlzdF9zdGFyX2V4cHIgKGF1Z2Fzc2lnbiAoeWllbGRfZXhwcnx0ZXN0bGlzdCkgfAogICAgICAgICAgICAgICAgICAgICAgKCc9JyAoeWllbGRfZXhwcnx0ZXN0bGlzdF9zdGFyX2V4cHIpKSopCiB0ZXN0bGlzdF9zdGFyX2V4cHI6ICh0ZXN0fHN0YXJfZXhwcikgKCcsJyAodGVzdHxzdGFyX2V4cHIpKSogWycsJ10KLWF1Z2Fzc2lnbjogKCcrPScgfCAnLT0nIHwgJyo9JyB8ICcvPScgfCAnJT0nIHwgJyY9JyB8ICd8PScgfCAnXj0nIHwKK2F1Z2Fzc2lnbjogKCcrPScgfCAnLT0nIHwgJyo9JyB8ICdAPScgfCAnLz0nIHwgJyU9JyB8ICcmPScgfCAnfD0nIHwgJ149JyB8CiAgICAgICAgICAgICAnPDw9JyB8ICc+Pj0nIHwgJyoqPScgfCAnLy89JykKICMgRm9yIG5vcm1hbCBhc3NpZ25tZW50cywgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgZW5mb3JjZWQgYnkgdGhlIGludGVycHJldGVyCiBwcmludF9zdG10OiAncHJpbnQnICggWyB0ZXN0ICgnLCcgdGVzdCkqIFsnLCddIF0gfApAQCAtMTE5LDcgKzExOSw3IEBACiBhbmRfZXhwcjogc2hpZnRfZXhwciAoJyYnIHNoaWZ0X2V4cHIpKgogc2hpZnRfZXhwcjogYXJpdGhfZXhwciAoKCc8PCd8Jz4+JykgYXJpdGhfZXhwcikqCiBhcml0aF9leHByOiB0ZXJtICgoJysnfCctJykgdGVybSkqCi10ZXJtOiBmYWN0b3IgKCgnKid8Jy8nfCclJ3wnLy8nKSBmYWN0b3IpKgordGVybTogZmFjdG9yICgoJyonfCdAJ3wnLyd8JyUnfCcvLycpIGZhY3RvcikqCiBmYWN0b3I6ICgnKyd8Jy0nfCd+JykgZmFjdG9yIHwgcG93ZXIKIHBvd2VyOiBhdG9tIHRyYWlsZXIqIFsnKionIGZhY3Rvcl0KIGF0b206ICgnKCcgW3lpZWxkX2V4cHJ8dGVzdGxpc3RfZ2V4cF0gJyknIHwKQEAgLTE1NSw0ICsxNTUsNSBAQAogIyBub3QgdXNlZCBpbiBncmFtbWFyLCBidXQgbWF5IGFwcGVhciBpbiAibm9kZSIgcGFzc2VkIGZyb20gUGFyc2VyIHRvIENvbXBpbGVyCiBlbmNvZGluZ19kZWNsOiBOQU1FCiAKLXlpZWxkX2V4cHI6ICd5aWVsZCcgW3Rlc3RsaXN0XQoreWllbGRfZXhwcjogJ3lpZWxkJyBbeWllbGRfYXJnXQoreWllbGRfYXJnOiAnZnJvbScgdGVzdCB8IHRlc3RsaXN0CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkgYi9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKaW5kZXggMjI3NmRjOS4uMzM5NzUwZSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CisrKyBiL0xpYi9saWIydG8zL2J0bV91dGlscy5weQpAQCAtOTYsOCArOTYsNyBAQAogICAgIGRlZiBsZWF2ZXMoc2VsZik6CiAgICAgICAgICJHZW5lcmF0b3IgdGhhdCByZXR1cm5zIHRoZSBsZWF2ZXMgb2YgdGhlIHRyZWUiCiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIHggaW4gY2hpbGQubGVhdmVzKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5sZWF2ZXMoKQogICAgICAgICBpZiBub3Qgc2VsZi5jaGlsZHJlbjoKICAgICAgICAgICAgIHlpZWxkIHNlbGYKIApAQCAtMjc3LDcgKzI3Niw2IEBACiAgICAgc3ViLWl0ZXJhYmxlcyIiIgogICAgIGZvciB4IGluIHNlcXVlbmNlOgogICAgICAgICBpZiBpc2luc3RhbmNlKHgsIChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgZm9yIHkgaW4gcmVjX3Rlc3QoeCwgdGVzdF9mdW5jKToKLSAgICAgICAgICAgICAgICB5aWVsZCB5CisgICAgICAgICAgICB5aWVsZCBmcm9tIHJlY190ZXN0KHgsIHRlc3RfZnVuYykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHlpZWxkIHRlc3RfZnVuYyh4KQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weSBiL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKaW5kZXggNjBkMjE5Zi4uNmUyNTljNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CkBAIC0xMjksNiArMTI5LDI5IEBACiAgICAgaW1wID0gTm9kZShzeW1zLmltcG9ydF9mcm9tLCBjaGlsZHJlbikKICAgICByZXR1cm4gaW1wCiAKK2RlZiBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKToKKyAgICAiIiJSZXR1cm5zIGFuIGltcG9ydCBzdGF0ZW1lbnQgYW5kIGNhbGxzIGEgbWV0aG9kCisgICAgb2YgdGhlIG1vZHVsZToKKworICAgIGltcG9ydCBtb2R1bGUKKyAgICBtb2R1bGUubmFtZSgpIiIiCisgICAgb2JqID0gcmVzdWx0c1sib2JqIl0uY2xvbmUoKQorICAgIGlmIG9iai50eXBlID09IHN5bXMuYXJnbGlzdDoKKyAgICAgICAgbmV3YXJnbGlzdCA9IG9iai5jbG9uZSgpCisgICAgZWxzZToKKyAgICAgICAgbmV3YXJnbGlzdCA9IE5vZGUoc3ltcy5hcmdsaXN0LCBbb2JqLmNsb25lKCldKQorICAgIGFmdGVyID0gcmVzdWx0c1siYWZ0ZXIiXQorICAgIGlmIGFmdGVyOgorICAgICAgICBhZnRlciA9IFtuLmNsb25lKCkgZm9yIG4gaW4gYWZ0ZXJdCisgICAgbmV3ID0gTm9kZShzeW1zLnBvd2VyLAorICAgICAgICAgICAgICAgQXR0cihOYW1lKG5hbWVzWzBdKSwgTmFtZShuYW1lc1sxXSkpICsKKyAgICAgICAgICAgICAgIFtOb2RlKHN5bXMudHJhaWxlciwKKyAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHRzWyJscGFyIl0uY2xvbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICBuZXdhcmdsaXN0LAorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbInJwYXIiXS5jbG9uZSgpXSldICsgYWZ0ZXIpCisgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CisgICAgcmV0dXJuIG5ldworCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgRGV0ZXJtaW5lIHdoZXRoZXIgYSBub2RlIHJlcHJlc2VudHMgYSBnaXZlbiBsaXRlcmFsCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYXNzZXJ0cy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hc3NlcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViY2VjODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfYXNzZXJ0cy5weQpAQCAtMCwwICsxLDM0IEBACisiIiJGaXhlciB0aGF0IHJlcGxhY2VzIGRlcHJlY2F0ZWQgdW5pdHRlc3QgbWV0aG9kIG5hbWVzLiIiIgorCisjIEF1dGhvcjogRXppbyBNZWxvdHRpCisKK2Zyb20gLi5maXhlcl9iYXNlIGltcG9ydCBCYXNlRml4Citmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZQorCitOQU1FUyA9IGRpY3QoCisgICAgYXNzZXJ0Xz0iYXNzZXJ0VHJ1ZSIsCisgICAgYXNzZXJ0RXF1YWxzPSJhc3NlcnRFcXVhbCIsCisgICAgYXNzZXJ0Tm90RXF1YWxzPSJhc3NlcnROb3RFcXVhbCIsCisgICAgYXNzZXJ0QWxtb3N0RXF1YWxzPSJhc3NlcnRBbG1vc3RFcXVhbCIsCisgICAgYXNzZXJ0Tm90QWxtb3N0RXF1YWxzPSJhc3NlcnROb3RBbG1vc3RFcXVhbCIsCisgICAgYXNzZXJ0UmVnZXhwTWF0Y2hlcz0iYXNzZXJ0UmVnZXgiLAorICAgIGFzc2VydFJhaXNlc1JlZ2V4cD0iYXNzZXJ0UmFpc2VzUmVnZXgiLAorICAgIGZhaWxVbmxlc3NFcXVhbD0iYXNzZXJ0RXF1YWwiLAorICAgIGZhaWxJZkVxdWFsPSJhc3NlcnROb3RFcXVhbCIsCisgICAgZmFpbFVubGVzc0FsbW9zdEVxdWFsPSJhc3NlcnRBbG1vc3RFcXVhbCIsCisgICAgZmFpbElmQWxtb3N0RXF1YWw9ImFzc2VydE5vdEFsbW9zdEVxdWFsIiwKKyAgICBmYWlsVW5sZXNzPSJhc3NlcnRUcnVlIiwKKyAgICBmYWlsVW5sZXNzUmFpc2VzPSJhc3NlcnRSYWlzZXMiLAorICAgIGZhaWxJZj0iYXNzZXJ0RmFsc2UiLAorKQorCisKK2NsYXNzIEZpeEFzc2VydHMoQmFzZUZpeCk6CisKKyAgICBQQVRURVJOID0gIiIiCisgICAgICAgICAgICAgIHBvd2VyPCBhbnkrIHRyYWlsZXI8ICcuJyBtZXRoPSglcyk+IGFueSogPgorICAgICAgICAgICAgICAiIiIgJSAnfCcuam9pbihtYXAocmVwciwgTkFNRVMpKQorCisgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgbmFtZSA9IHJlc3VsdHNbIm1ldGgiXVswXQorICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZShOQU1FU1tzdHIobmFtZSldLCBwcmVmaXg9bmFtZS5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKaW5kZXggNmJlMTFjZC4uZmIyOTczYyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CkBAIC02LDkgKzYsOCBAQAogaW50ZXJuKHMpIC0+IHN5cy5pbnRlcm4ocykiIiIKIAogIyBMb2NhbCBpbXBvcnRzCi1mcm9tIC4uIGltcG9ydCBweXRyZWUKIGZyb20gLi4gaW1wb3J0IGZpeGVyX2Jhc2UKLWZyb20gLi5maXhlcl91dGlsIGltcG9ydCBOYW1lLCBBdHRyLCB0b3VjaF9pbXBvcnQKK2Zyb20gLi5maXhlcl91dGlsIGltcG9ydCBJbXBvcnRBbmRDYWxsLCB0b3VjaF9pbXBvcnQKIAogCiBjbGFzcyBGaXhJbnRlcm4oZml4ZXJfYmFzZS5CYXNlRml4KToKQEAgLTI2LDIxICsyNSw3IEBACiAgICAgIiIiCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgotICAgICAgICBzeW1zID0gc2VsZi5zeW1zCi0gICAgICAgIG9iaiA9IHJlc3VsdHNbIm9iaiJdLmNsb25lKCkKLSAgICAgICAgaWYgb2JqLnR5cGUgPT0gc3ltcy5hcmdsaXN0OgotICAgICAgICAgICAgbmV3YXJnbGlzdCA9IG9iai5jbG9uZSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuZXdhcmdsaXN0ID0gcHl0cmVlLk5vZGUoc3ltcy5hcmdsaXN0LCBbb2JqLmNsb25lKCldKQotICAgICAgICBhZnRlciA9IHJlc3VsdHNbImFmdGVyIl0KLSAgICAgICAgaWYgYWZ0ZXI6Ci0gICAgICAgICAgICBhZnRlciA9IFtuLmNsb25lKCkgZm9yIG4gaW4gYWZ0ZXJdCi0gICAgICAgIG5ldyA9IHB5dHJlZS5Ob2RlKHN5bXMucG93ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIoTmFtZSgic3lzIiksIE5hbWUoImludGVybiIpKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFtweXRyZWUuTm9kZShzeW1zLnRyYWlsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0c1sibHBhciJdLmNsb25lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXJnbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJycGFyIl0uY2xvbmUoKV0pXSArIGFmdGVyKQotICAgICAgICBuZXcucHJlZml4ID0gbm9kZS5wcmVmaXgKKyAgICAgICAgbmFtZXMgPSAoJ3N5cycsICdpbnRlcm4nKQorICAgICAgICBuZXcgPSBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKQogICAgICAgICB0b3VjaF9pbXBvcnQoTm9uZSwgJ3N5cycsIG5vZGUpCiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5CkBAIC0wLDAgKzEsMjggQEAKKyIiIkZpeGVyIGZvciByZWxvYWQoKS4KKworcmVsb2FkKHMpIC0+IGltcC5yZWxvYWQocykiIiIKKworIyBMb2NhbCBpbXBvcnRzCitmcm9tIC4uIGltcG9ydCBmaXhlcl9iYXNlCitmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgSW1wb3J0QW5kQ2FsbCwgdG91Y2hfaW1wb3J0CisKKworY2xhc3MgRml4UmVsb2FkKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBvcmRlciA9ICJwcmUiCisKKyAgICBQQVRURVJOID0gIiIiCisgICAgcG93ZXI8ICdyZWxvYWQnCisgICAgICAgICAgIHRyYWlsZXI8IGxwYXI9JygnCisgICAgICAgICAgICAgICAgICAgICggbm90KGFyZ2xpc3QgfCBhcmd1bWVudDxhbnkgJz0nIGFueT4pIG9iaj1hbnkKKyAgICAgICAgICAgICAgICAgICAgICB8IG9iaj1hcmdsaXN0PChub3QgYXJndW1lbnQ8YW55ICc9JyBhbnk+KSBhbnkgJywnPiApCisgICAgICAgICAgICAgICAgICAgIHJwYXI9JyknID4KKyAgICAgICAgICAgYWZ0ZXI9YW55KgorICAgID4KKyAgICAiIiIKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG5hbWVzID0gKCdpbXAnLCAncmVsb2FkJykKKyAgICAgICAgbmV3ID0gSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcykKKyAgICAgICAgdG91Y2hfaW1wb3J0KE5vbmUsICdpbXAnLCBub2RlKQorICAgICAgICByZXR1cm4gbmV3CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9tYWluLnB5IGIvTGliL2xpYjJ0bzMvbWFpbi5weQppbmRleCBmOWNjMThiLi45M2JhZTkwIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9tYWluLnB5CisrKyBiL0xpYi9saWIydG8zL21haW4ucHkKQEAgLTkwLDExICs5MCwxMSBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGJhY2t1cCk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoYmFja3VwKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDYW4ndCByZW1vdmUgYmFja3VwICVzIiwgYmFja3VwKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgYmFja3VwKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDYW4ndCByZW5hbWUgJXMgdG8gJXMiLCBmaWxlbmFtZSwgYmFja3VwKQogICAgICAgICAjIEFjdHVhbGx5IHdyaXRlIHRoZSBuZXcgZmlsZQogICAgICAgICB3cml0ZSA9IHN1cGVyKFN0ZG91dFJlZmFjdG9yaW5nVG9vbCwgc2VsZikud3JpdGVfZmlsZQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weSBiL0xpYi9saWIydG8zL3BnZW4yL2NvbnYucHkKaW5kZXggYmY0OTc2Mi4uZWQwY2FjNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgb3BlbiAlczogJXMiICUgKGZpbGVuYW1lLCBlcnIpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHNlbGYuc3ltYm9sMm51bWJlciA9IHt9CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCBvcGVuICVzOiAlcyIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBUaGUgY29kZSBiZWxvdyBlc3NlbnRpYWxseSB1c2VzIGYncyBpdGVyYXRvci1uZXNzIQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CmluZGV4IDRjNjExYzYuLjNjY2M2OWQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldyaXRpbmcgZ3JhbW1hciB0YWJsZXMgdG8gJXMiLCBncCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBnLmR1bXAoZ3ApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiV3JpdGluZyBmYWlsZWQ6IitzdHIoZSkpCiAgICAgZWxzZToKICAgICAgICAgZyA9IGdyYW1tYXIuR3JhbW1hcigpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZ3JhbW1hci5weQppbmRleCAxNGM1ZjcwLi5iNDQ4MWQxIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkKQEAgLTg2LDE1ICs4NiwxMyBAQAogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJEdW1wIHRoZSBncmFtbWFyIHRhYmxlcyB0byBhIHBpY2tsZSBmaWxlLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgIndiIikKLSAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5fX2RpY3RfXywgZiwgMikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYuX19kaWN0X18sIGYsIDIpCiAKICAgICBkZWYgbG9hZChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkxvYWQgdGhlIGdyYW1tYXIgdGFibGVzIGZyb20gYSBwaWNrbGUgZmlsZS4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgICAgIGQgPSBwaWNrbGUubG9hZChmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5sb2FkKGYpCiAgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGQpCiAKICAgICBkZWYgY29weShzZWxmKToKQEAgLTE1MSw2ICsxNDksNyBAQAogeyBMQlJBQ0UKIH0gUkJSQUNFCiBAIEFUCitAPSBBVEVRVUFMCiA9PSBFUUVRVUFMCiAhPSBOT1RFUVVBTAogPD4gTk9URVFVQUwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKaW5kZXggNmE2ZDBiNi4uNzU5OTM5NiAxMDA3NTUKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKKysrIGIvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKQEAgLTU3LDEyICs1NywxMyBAQAogRE9VQkxFU0xBU0ggPSA0OAogRE9VQkxFU0xBU0hFUVVBTCA9IDQ5CiBBVCA9IDUwCi1PUCA9IDUxCi1DT01NRU5UID0gNTIKLU5MID0gNTMKLVJBUlJPVyA9IDU0Ci1FUlJPUlRPS0VOID0gNTUKLU5fVE9LRU5TID0gNTYKK0FURVFVQUwgPSA1MQorT1AgPSA1MgorQ09NTUVOVCA9IDUzCitOTCA9IDU0CitSQVJST1cgPSA1NQorRVJST1JUT0tFTiA9IDU2CitOX1RPS0VOUyA9IDU3CiBOVF9PRkZTRVQgPSAyNTYKICMtLWVuZCBjb25zdGFudHMtLQogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbml6ZS5weSBiL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CmluZGV4IDFiYjkzMWUuLjNkZDFlZTkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CkBAIC04NCw3ICs4NCw3IEBACiAjIHJlY29nbml6ZWQgYXMgdHdvIGluc3RhbmNlcyBvZiA9KS4KIE9wZXJhdG9yID0gZ3JvdXAociJcKlwqPT8iLCByIj4+PT8iLCByIjw8PT8iLCByIjw+IiwgciIhPSIsCiAgICAgICAgICAgICAgICAgIHIiLy89PyIsIHIiLT4iLAotICAgICAgICAgICAgICAgICByIlsrXC0qLyUmfF49PD5dPT8iLAorICAgICAgICAgICAgICAgICByIlsrXC0qLyUmQHxePTw+XT0/IiwKICAgICAgICAgICAgICAgICAgciJ+IikKIAogQnJhY2tldCA9ICdbXVsoKXt9XScKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3B5dHJlZS5weQppbmRleCAxN2NiZjBhLi5jNGExYmUzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9weXRyZWUucHkKKysrIGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CkBAIC0xOTQsOCArMTk0LDcgQEAKIAogICAgIGRlZiBsZWF2ZXMoc2VsZik6CiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIHggaW4gY2hpbGQubGVhdmVzKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5sZWF2ZXMoKQogCiAgICAgZGVmIGRlcHRoKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBOb25lOgpAQCAtMjc0LDE2ICsyNzMsMTQgQEAKICAgICBkZWYgcG9zdF9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcG9zdC1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIG5vZGUgaW4gY2hpbGQucG9zdF9vcmRlcigpOgotICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQucG9zdF9vcmRlcigpCiAgICAgICAgIHlpZWxkIHNlbGYKIAogICAgIGRlZiBwcmVfb3JkZXIoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHByZS1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIHlpZWxkIHNlbGYKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wcmVfb3JkZXIoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBub2RlCisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLnByZV9vcmRlcigpCiAKICAgICBkZWYgX3ByZWZpeF9nZXR0ZXIoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQppbmRleCAyMDFlMTkzLi44MTAwMzE3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQorKysgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlczogJXMiLCBmaWxlbmFtZSwgZXJyKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAgICAgICAgdHJ5OgpAQCAtNTM0LDEyICs1MzQsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfb3Blbl93aXRoX2VuY29kaW5nKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3QgY3JlYXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShfdG9fc3lzdGVtX25ld2xpbmVzKG5ld190ZXh0KSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IHdyaXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQppbmRleCBhMDJiYmZlLi43MzFjNDAzIDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CkBAIC01Myw3ICs1Myw3IEBACiAgICAgZm9yIGRpciBpbiBzeXMucGF0aDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHByaW50KCJTY2FubmluZyIsIGRpciwgIi4uLiIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CmluZGV4IDJmMDhmOTMuLjA2YjAwMzMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CkBAIC0yODIsNiArMjgyLDY1IEBACiAgICAgICAgIGIgPSAiIiJmKCphcmdzLCAqKmt3ZHMpIiIiCiAgICAgICAgIHNlbGYuY2hlY2soYSwgYikKIAorY2xhc3MgVGVzdF9yZWxvYWQoRml4ZXJUZXN0Q2FzZSk6CisgICAgZml4ZXIgPSAicmVsb2FkIgorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoYSkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoYSkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfY29tbWVudChzZWxmKToKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSApICMgY29tbWVudCIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApICMgY29tbWVudCIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgIyBQRVAgOCBjb21tZW50cworICAgICAgICBiID0gIiIicmVsb2FkKCBhICkgICMgY29tbWVudCIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApICAjIGNvbW1lbnQiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3Rfc3BhY2Uoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEgKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIiIicmVsb2FkKCBhKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAiIiJyZWxvYWQoYSApIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKGEgKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CisgICAgICAgIHMgPSAiIiJyZWxvYWQoYT0xKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgZykiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICpoKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgKmgsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCpoLCAqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgqaCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKwogY2xhc3MgVGVzdF9pbnRlcm4oRml4ZXJUZXN0Q2FzZSk6CiAgICAgZml4ZXIgPSAiaW50ZXJuIgogCkBAIC00NTc2LDMgKzQ2MzUsNTMgQEAKICAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CiAgICAgICAgIHMgPSAiIiJmKHN5cy5leGl0ZnVuYykiIiIKICAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworCitjbGFzcyBUZXN0X2Fzc2VydHMoRml4ZXJUZXN0Q2FzZSk6CisKKyAgICBmaXhlciA9ICJhc3NlcnRzIgorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9uYW1lcyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0XyhUcnVlKScsICdzZWxmLmFzc2VydFRydWUoVHJ1ZSknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnRFcXVhbHMoMiwgMiknLCAnc2VsZi5hc3NlcnRFcXVhbCgyLCAyKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydE5vdEVxdWFscygyLCAzKScsICdzZWxmLmFzc2VydE5vdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0QWxtb3N0RXF1YWxzKDIsIDMpJywgJ3NlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbHMoMiwgOCknLCAnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgyLCA4KScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3NFcXVhbCgyLCAyKScsICdzZWxmLmFzc2VydEVxdWFsKDIsIDIpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbElmRXF1YWwoMiwgMyknLCAnc2VsZi5hc3NlcnROb3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCgyLCAzKScsICdzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbElmQWxtb3N0RXF1YWwoMiwgOCknLCAnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgyLCA4KScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3MoVHJ1ZSknLCAnc2VsZi5hc3NlcnRUcnVlKFRydWUpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzc1JhaXNlcyhmb28pJywgJ3NlbGYuYXNzZXJ0UmFpc2VzKGZvbyknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsSWYoRmFsc2UpJywgJ3NlbGYuYXNzZXJ0RmFsc2UoRmFsc2UpJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGIsIGEgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF92YXJpYW50cyhzZWxmKToKKyAgICAgICAgYiA9ICdlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzJworICAgICAgICBhID0gJ2VxID0gc2VsZi5hc3NlcnRFcXVhbCcKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3NlbGYuYXNzZXJ0RXF1YWxzKDIsIDMsIG1zZz0iZmFpbCIpJworICAgICAgICBhID0gJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMywgbXNnPSJmYWlsIiknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICdzZWxmLmFzc2VydEVxdWFscygyLCAzLCBtc2c9ImZhaWwiKSAjIGZvbycKKyAgICAgICAgYSA9ICdzZWxmLmFzc2VydEVxdWFsKDIsIDMsIG1zZz0iZmFpbCIpICMgZm9vJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnc2VsZi5hc3NlcnRFcXVhbHMgKDIsIDMpJworICAgICAgICBhID0gJ3NlbGYuYXNzZXJ0RXF1YWwgKDIsIDMpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnICBzZWxmLmFzc2VydEVxdWFscyAoMiwgMyknCisgICAgICAgIGEgPSAnICBzZWxmLmFzc2VydEVxdWFsICgyLCAzKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3dpdGggc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEV4cGxvc2lvbik6IGV4cGxvZGUoKScKKyAgICAgICAgYSA9ICd3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGxvc2lvbik6IGV4cGxvZGUoKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3dpdGggc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEV4cGxvc2lvbikgYXMgY206IGV4cGxvZGUoKScKKyAgICAgICAgYSA9ICd3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGxvc2lvbikgYXMgY206IGV4cGxvZGUoKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgorICAgICAgICBzZWxmLnVuY2hhbmdlZCgnc2VsZi5hc3NlcnRFcXVhbHNPblNhdHVyZGF5JykKKyAgICAgICAgc2VsZi51bmNoYW5nZWQoJ3NlbGYuYXNzZXJ0RXF1YWxzT25TYXR1cmRheSgzLCA1KScpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcGFyc2VyLnB5CmluZGV4IGEzODNhMTQuLmI2NDQ2OWMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcGFyc2VyLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcGFyc2VyLnB5CkBAIC00OCw2ICs0OCwxOSBAQAogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlN5bnRheCBzaG91bGRuJ3QgaGF2ZSBiZWVuIHZhbGlkIikKIAogCitjbGFzcyBUZXN0TWF0cml4TXVsdGlwbGljYXRpb24oR3JhbW1hclRlc3QpOgorICAgIGRlZiB0ZXN0X21hdHJpeF9tdWx0aXBsaWNhdGlvbl9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiYSBAIGIiKQorICAgICAgICBzZWxmLnZhbGlkYXRlKCJhIEA9IGIiKQorCisKK2NsYXNzIFRlc3RZaWVsZEZyb20oR3JhbW1hclRlc3QpOgorICAgIGRlZiB0ZXN0X21hdHJpeF9tdWx0aXBsaWNhdGlvbl9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgieWllbGQgZnJvbSB4IikKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiKHlpZWxkIGZyb20geCkgKyB5IikKKyAgICAgICAgc2VsZi5pbnZhbGlkX3N5bnRheCgieWllbGQgZnJvbSIpCisKKwogY2xhc3MgVGVzdFJhaXNlQ2hhbmdlcyhHcmFtbWFyVGVzdCk6CiAgICAgZGVmIHRlc3RfMnhfc3R5bGVfMShzZWxmKToKICAgICAgICAgc2VsZi52YWxpZGF0ZSgicmFpc2UiKQpkaWZmIC0tZ2l0IGEvTGliL2xpbmVjYWNoZS5weSBiL0xpYi9saW5lY2FjaGUucHkKaW5kZXggYzNmMmMzZi4uMDJhOWViNSAxMDA2NDQKLS0tIGEvTGliL2xpbmVjYWNoZS5weQorKysgYi9MaWIvbGluZWNhY2hlLnB5CkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgICAgICBjb250aW51ZSAgICMgbm8tb3AgZm9yIGZpbGVzIGxvYWRlZCB2aWEgYSBfX2xvYWRlcl9fCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0YXQgPSBvcy5zdGF0KGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgZGVsIGNhY2hlW2ZpbGVuYW1lXQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgc2l6ZSAhPSBzdGF0LnN0X3NpemUgb3IgbXRpbWUgIT0gc3RhdC5zdF9tdGltZToKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgIGlmIG5hbWUgYW5kIGdldF9zb3VyY2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgpAQCAtMTE4LDE0ICsxMTgsMTQgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdGF0ID0gb3Muc3RhdChmdWxsbmFtZSkKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgdHJ5OgogICAgICAgICB3aXRoIHRva2VuaXplLm9wZW4oZnVsbG5hbWUpIGFzIGZwOgogICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gW10KICAgICBpZiBsaW5lcyBhbmQgbm90IGxpbmVzWy0xXS5lbmRzd2l0aCgnXG4nKToKICAgICAgICAgbGluZXNbLTFdICs9ICdcbicKZGlmZiAtLWdpdCBhL0xpYi9sb2NhbGUucHkgYi9MaWIvbG9jYWxlLnB5CmluZGV4IDdjZmVhNjEuLmZhMjQ4MjkgMTAwNjQ0Ci0tLSBhL0xpYi9sb2NhbGUucHkKKysrIGIvTGliL2xvY2FsZS5weQpAQCAtMzQ0LDE0ICszNDQsMzIgQEAKICAgICAjIENvbnZlcnQgdGhlIGVuY29kaW5nIHRvIGEgQyBsaWIgY29tcGF0aWJsZSBlbmNvZGluZyBzdHJpbmcKICAgICBub3JtX2VuY29kaW5nID0gZW5jb2RpbmdzLm5vcm1hbGl6ZV9lbmNvZGluZyhlbmNvZGluZykKICAgICAjcHJpbnQoJ25vcm0gZW5jb2Rpbmc6ICVyJyAlIG5vcm1fZW5jb2RpbmcpCi0gICAgbm9ybV9lbmNvZGluZyA9IGVuY29kaW5ncy5hbGlhc2VzLmFsaWFzZXMuZ2V0KG5vcm1fZW5jb2RpbmcsCisgICAgbm9ybV9lbmNvZGluZyA9IGVuY29kaW5ncy5hbGlhc2VzLmFsaWFzZXMuZ2V0KG5vcm1fZW5jb2RpbmcubG93ZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybV9lbmNvZGluZykKICAgICAjcHJpbnQoJ2FsaWFzZWQgZW5jb2Rpbmc6ICVyJyAlIG5vcm1fZW5jb2RpbmcpCi0gICAgZW5jb2RpbmcgPSBsb2NhbGVfZW5jb2RpbmdfYWxpYXMuZ2V0KG5vcm1fZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1fZW5jb2RpbmcpCisgICAgZW5jb2RpbmcgPSBub3JtX2VuY29kaW5nCisgICAgbm9ybV9lbmNvZGluZyA9IG5vcm1fZW5jb2RpbmcubG93ZXIoKQorICAgIGlmIG5vcm1fZW5jb2RpbmcgaW4gbG9jYWxlX2VuY29kaW5nX2FsaWFzOgorICAgICAgICBlbmNvZGluZyA9IGxvY2FsZV9lbmNvZGluZ19hbGlhc1tub3JtX2VuY29kaW5nXQorICAgIGVsc2U6CisgICAgICAgIG5vcm1fZW5jb2RpbmcgPSBub3JtX2VuY29kaW5nLnJlcGxhY2UoJ18nLCAnJykKKyAgICAgICAgbm9ybV9lbmNvZGluZyA9IG5vcm1fZW5jb2RpbmcucmVwbGFjZSgnLScsICcnKQorICAgICAgICBpZiBub3JtX2VuY29kaW5nIGluIGxvY2FsZV9lbmNvZGluZ19hbGlhczoKKyAgICAgICAgICAgIGVuY29kaW5nID0gbG9jYWxlX2VuY29kaW5nX2FsaWFzW25vcm1fZW5jb2RpbmddCiAgICAgI3ByaW50KCdmb3VuZCBlbmNvZGluZyAlcicgJSBlbmNvZGluZykKICAgICByZXR1cm4gbGFuZ25hbWUgKyAnLicgKyBlbmNvZGluZwogCitkZWYgX2FwcGVuZF9tb2RpZmllcihjb2RlLCBtb2RpZmllcik6CisgICAgaWYgbW9kaWZpZXIgPT0gJ2V1cm8nOgorICAgICAgICBpZiAnLicgbm90IGluIGNvZGU6CisgICAgICAgICAgICByZXR1cm4gY29kZSArICcuSVNPODg1OS0xNScKKyAgICAgICAgXywgXywgZW5jb2RpbmcgPSBjb2RlLnBhcnRpdGlvbignLicpCisgICAgICAgIGlmIGVuY29kaW5nIGluICgnSVNPODg1OS0xNScsICdVVEYtOCcpOgorICAgICAgICAgICAgcmV0dXJuIGNvZGUKKyAgICAgICAgaWYgZW5jb2RpbmcgPT0gJ0lTTzg4NTktMSc6CisgICAgICAgICAgICByZXR1cm4gX3JlcGxhY2VfZW5jb2RpbmcoY29kZSwgJ0lTTzg4NTktMTUnKQorICAgIHJldHVybiBjb2RlICsgJ0AnICsgbW9kaWZpZXIKKwogZGVmIG5vcm1hbGl6ZShsb2NhbGVuYW1lKToKIAogICAgICIiIiBSZXR1cm5zIGEgbm9ybWFsaXplZCBsb2NhbGUgY29kZSBmb3IgdGhlIGdpdmVuIGxvY2FsZQpAQCAtNDAzLDcgKzQyMSw3IEBACiAgICAgICAgIGlmIGNvZGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAjcHJpbnQoJ2xvb2t1cCB3aXRob3V0IG1vZGlmaWVyIHN1Y2NlZWRlZCcpCiAgICAgICAgICAgICBpZiAnQCcgbm90IGluIGNvZGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgKyAnQCcgKyBtb2RpZmllcgorICAgICAgICAgICAgICAgIHJldHVybiBfYXBwZW5kX21vZGlmaWVyKGNvZGUsIG1vZGlmaWVyKQogICAgICAgICAgICAgaWYgY29kZS5zcGxpdCgnQCcsIDEpWzFdLmxvd2VyKCkgPT0gbW9kaWZpZXI6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUKICAgICAgICAgI3ByaW50KCdzZWNvbmQgbG9va3VwIGZhaWxlZCcpCkBAIC00MjcsNyArNDQ1LDggQEAKICAgICAgICAgICAgIGlmIGNvZGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgI3ByaW50KCdsb29rdXAgd2l0aG91dCBtb2RpZmllciBhbmQgZW5jb2Rpbmcgc3VjY2VlZGVkJykKICAgICAgICAgICAgICAgICBpZiAnQCcgbm90IGluIGNvZGU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVwbGFjZV9lbmNvZGluZyhjb2RlLCBlbmNvZGluZykgKyAnQCcgKyBtb2RpZmllcgorICAgICAgICAgICAgICAgICAgICBjb2RlID0gX3JlcGxhY2VfZW5jb2RpbmcoY29kZSwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYXBwZW5kX21vZGlmaWVyKGNvZGUsIG1vZGlmaWVyKQogICAgICAgICAgICAgICAgIGNvZGUsIGRlZm1vZCA9IGNvZGUuc3BsaXQoJ0AnLCAxKQogICAgICAgICAgICAgICAgIGlmIGRlZm1vZC5sb3dlcigpID09IG1vZGlmaWVyOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlcGxhY2VfZW5jb2RpbmcoY29kZSwgZW5jb2RpbmcpICsgJ0AnICsgZGVmbW9kCkBAIC01ODYsOCArNjA1LDggQEAKICAgICAjIE9uIFdpbjMyLCB0aGlzIHdpbGwgcmV0dXJuIHRoZSBBTlNJIGNvZGUgcGFnZQogICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjaGFyc2V0IHRoYXQgdGhlIHVzZXIgaXMgbGlrZWx5IHVzaW5nLiIiIgotICAgICAgICBpbXBvcnQgX2xvY2FsZQotICAgICAgICByZXR1cm4gX2xvY2FsZS5fZ2V0ZGVmYXVsdGxvY2FsZSgpWzFdCisgICAgICAgIGltcG9ydCBfYm9vdGxvY2FsZQorICAgICAgICByZXR1cm4gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCiBlbHNlOgogICAgICMgT24gVW5peCwgaWYgQ09ERVNFVCBpcyBhdmFpbGFibGUsIHVzZSB0aGF0LgogICAgIHRyeToKQEAgLTYwNiwyNyArNjI1LDE2IEBACiAgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgICAgICIiIlJldHVybiB0aGUgY2hhcnNldCB0aGF0IHRoZSB1c2VyIGlzIGxpa2VseSB1c2luZywKICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIiIiCisgICAgICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKICAgICAgICAgICAgIGlmIGRvX3NldGxvY2FsZToKICAgICAgICAgICAgICAgICBvbGRsb2MgPSBzZXRsb2NhbGUoTENfQ1RZUEUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfQ1RZUEUsICIiKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5sX2xhbmdpbmZvKENPREVTRVQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICAgICAjIG5sX2xhbmdpbmZvIGNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICMgd2hlbiB0aGUgc2V0dGluZyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgIyBEZWZhdWx0IHRvIFVURi04IGluIHRoYXQgY2FzZSBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgICMgVVRGLTggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBvbiBPU1ggYW5kCi0gICAgICAgICAgICAgICAgICAgICMgcmV0dXJuaW5nIG5vdGhpbmcgd2lsbCBjcmFzaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBpbnRlcnByZXRlci4KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JworICAgICAgICAgICAgcmVzdWx0ID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCisgICAgICAgICAgICBpZiBkb19zZXRsb2NhbGU6CiAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX0NUWVBFLCBvbGRsb2MpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5sX2xhbmdpbmZvKENPREVTRVQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICAgICAjIFNlZSBhYm92ZSBmb3IgZXhwbGFuYXRpb24KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKQEAgLTY1NCw2ICs2NjIsMTQgQEAKICAgICAnamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICdKSVM3JywKICAgICAnamlzNyc6ICAgICAgICAgICAgICAgICAgICAgICAgICdKSVM3JywKICAgICAnYWplYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICdldWNKUCcsCisgICAgJ2tvaThjJzogICAgICAgICAgICAgICAgICAgICAgICAnS09JOC1DJywKKyAgICAnbWljcm9zb2Z0Y3AxMjUxJzogICAgICAgICAgICAgICdDUDEyNTEnLAorICAgICdtaWNyb3NvZnRjcDEyNTUnOiAgICAgICAgICAgICAgJ0NQMTI1NScsCisgICAgJ21pY3Jvc29mdGNwMTI1Nic6ICAgICAgICAgICAgICAnQ1AxMjU2JywKKyAgICAnODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICdJU084ODU5LTEnLAorICAgICc4ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktMicsCisgICAgJzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS01JywKKyAgICAnODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICdJU084ODU5LTE1JywKIAogICAgICMgTWFwcGluZ3MgZnJvbSBQeXRob24gY29kZWMgbmFtZXMgdG8gQyBsaWIgZW5jb2RpbmcgbmFtZXMKICAgICAnYXNjaWknOiAgICAgICAgICAgICAgICAgICAgICAgICdJU084ODU5LTEnLApAQCAtNjgxLDEwICs2OTcsMTggQEAKICAgICAndXRmXzgnOiAgICAgICAgICAgICAgICAgICAgICAgICdVVEYtOCcsCiAgICAgJ2tvaThfcic6ICAgICAgICAgICAgICAgICAgICAgICAnS09JOC1SJywKICAgICAna29pOF91JzogICAgICAgICAgICAgICAgICAgICAgICdLT0k4LVUnLAorICAgICdjcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ0NQMTI1MScsCisgICAgJ2NwMTI1NSc6ICAgICAgICAgICAgICAgICAgICAgICAnQ1AxMjU1JywKKyAgICAnY3AxMjU2JzogICAgICAgICAgICAgICAgICAgICAgICdDUDEyNTYnLAorCiAgICAgIyBYWFggVGhpcyBsaXN0IGlzIHN0aWxsIGluY29tcGxldGUuIElmIHlvdSBrbm93IG1vcmUKICAgICAjIG1hcHBpbmdzLCBwbGVhc2UgZmlsZSBhIGJ1ZyByZXBvcnQuIFRoYW5rcy4KIH0KIAorZm9yIGssIHYgaW4gc29ydGVkKGxvY2FsZV9lbmNvZGluZ19hbGlhcy5pdGVtcygpKToKKyAgICBrID0gay5yZXBsYWNlKCdfJywgJycpCisgICAgbG9jYWxlX2VuY29kaW5nX2FsaWFzLnNldGRlZmF1bHQoaywgdikKKwogIwogIyBUaGUgbG9jYWxlX2FsaWFzIHRhYmxlIG1hcHMgbG93ZXJjYXNlIGFsaWFzIG5hbWVzIHRvIEMgbG9jYWxlIG5hbWVzCiAjIChjYXNlLXNlbnNpdGl2ZSkuIEVuY29kaW5ncyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBmcm9tIHRoZSBsb2NhbGUKQEAgLTc5Nyw1NSArODIxLDMzIEBACiBsb2NhbGVfYWxpYXMgPSB7CiAgICAgJ2EzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5LT0k4LUMnLAogICAgICdhM19heic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouS09JOC1DJywKLSAgICAnYTNfYXoua29pOGMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLktPSTgtQycsCiAgICAgJ2EzX2F6LmtvaWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5LT0k4LUMnLAogICAgICdhZic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWZfWkEuSVNPODg1OS0xJywKICAgICAnYWZfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FmX1pBLklTTzg4NTktMScsCi0gICAgJ2FmX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdhZl9aQS5JU084ODU5LTEnLAogICAgICdhbSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW1fRVQuVVRGLTgnLAogICAgICdhbV9ldCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW1fRVQuVVRGLTgnLAogICAgICdhbWVyaWNhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnYW1lcmljYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2FyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAogICAgICdhcl9hYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKLSAgICAnYXJfYWEuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0FBLklTTzg4NTktNicsCiAgICAgJ2FyX2FlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9BRS5JU084ODU5LTYnLAotICAgICdhcl9hZS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfQUUuSVNPODg1OS02JywKICAgICAnYXJfYmgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0JILklTTzg4NTktNicsCi0gICAgJ2FyX2JoLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9CSC5JU084ODU5LTYnLAogICAgICdhcl9keic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfRFouSVNPODg1OS02JywKLSAgICAnYXJfZHouaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0RaLklTTzg4NTktNicsCiAgICAgJ2FyX2VnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9FRy5JU084ODU5LTYnLAotICAgICdhcl9lZy5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfRUcuSVNPODg1OS02JywKICAgICAnYXJfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0lOLlVURi04JywKICAgICAnYXJfaXEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0lRLklTTzg4NTktNicsCi0gICAgJ2FyX2lxLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9JUS5JU084ODU5LTYnLAogICAgICdhcl9qbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfSk8uSVNPODg1OS02JywKLSAgICAnYXJfam8uaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0pPLklTTzg4NTktNicsCiAgICAgJ2FyX2t3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9LVy5JU084ODU5LTYnLAotICAgICdhcl9rdy5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfS1cuSVNPODg1OS02JywKICAgICAnYXJfbGInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0xCLklTTzg4NTktNicsCi0gICAgJ2FyX2xiLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9MQi5JU084ODU5LTYnLAogICAgICdhcl9seSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfTFkuSVNPODg1OS02JywKLSAgICAnYXJfbHkuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0xZLklTTzg4NTktNicsCiAgICAgJ2FyX21hJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9NQS5JU084ODU5LTYnLAotICAgICdhcl9tYS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfTUEuSVNPODg1OS02JywKICAgICAnYXJfb20nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX09NLklTTzg4NTktNicsCi0gICAgJ2FyX29tLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9PTS5JU084ODU5LTYnLAogICAgICdhcl9xYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfUUEuSVNPODg1OS02JywKLSAgICAnYXJfcWEuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1FBLklTTzg4NTktNicsCiAgICAgJ2FyX3NhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9TQS5JU084ODU5LTYnLAotICAgICdhcl9zYS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfU0EuSVNPODg1OS02JywKICAgICAnYXJfc2QnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1NELklTTzg4NTktNicsCi0gICAgJ2FyX3NkLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9TRC5JU084ODU5LTYnLAogICAgICdhcl9zeSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfU1kuSVNPODg1OS02JywKLSAgICAnYXJfc3kuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1NZLklTTzg4NTktNicsCiAgICAgJ2FyX3RuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9UTi5JU084ODU5LTYnLAotICAgICdhcl90bi5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfVE4uSVNPODg1OS02JywKICAgICAnYXJfeWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1lFLklTTzg4NTktNicsCi0gICAgJ2FyX3llLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9ZRS5JU084ODU5LTYnLAogICAgICdhcmFiaWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKLSAgICAnYXJhYmljLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgJ2FyX0FBLklTTzg4NTktNicsCiAgICAgJ2FzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc19JTi5VVEYtOCcsCiAgICAgJ2FzX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc19JTi5VVEYtOCcsCiAgICAgJ2F6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5JU084ODU5LTlFJywKQEAgLTg1NCwzNSArODU2LDIwIEBACiAgICAgJ2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAogICAgICdiZUBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAogICAgICdiZV9ieSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuQ1AxMjUxJywKLSAgICAnYmVfYnkuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCi0gICAgJ2JlX2J5Lm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAotICAgICdiZV9ieS51dGY4QGxhdGluJzogICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAogICAgICdiZV9ieUBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAogICAgICdiZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKICAgICAnYmdfYmcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLkNQMTI1MScsCi0gICAgJ2JnX2JnLmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAotICAgICdiZ19iZy5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuSVNPODg1OS01JywKLSAgICAnYmdfYmcua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLktPSTgtUicsCi0gICAgJ2JnX2JnLm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAogICAgICdibl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm5fSU4uVVRGLTgnLAogICAgICdib19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9fSU4uVVRGLTgnLAogICAgICdib2ttYWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xJywKICAgICAnYm9rbVx4ZTVsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCiAgICAgJ2JyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTEnLAogICAgICdicl9mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xJywKLSAgICAnYnJfZnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2JyX0ZSLklTTzg4NTktMScsCi0gICAgJ2JyX2ZyLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTE0JywKLSAgICAnYnJfZnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2JyX0ZSLklTTzg4NTktMTUnLAotICAgICdicl9mci5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xNScsCi0gICAgJ2JyX2ZyLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5VVEYtOCcsCi0gICAgJ2JyX2ZyQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTE1JywKICAgICAnYnMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JzX0JBLklTTzg4NTktMicsCiAgICAgJ2JzX2JhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdic19CQS5JU084ODU5LTInLAotICAgICdic19iYS5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnYnNfQkEuSVNPODg1OS0yJywKICAgICAnYnVsZ2FyaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLkNQMTI1MScsCiAgICAgJ2MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnYy1mcmVuY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMScsCi0gICAgJ2MtZnJlbmNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTEnLAogICAgICdjLmFzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2MuZW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnYy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCkBAIC04OTAsMzQzICs4NzcsMTMxIEBACiAgICAgJ2NfYy5jJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCiAgICAgJ2NhX2FkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTEnLAotICAgICdjYV9hZC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xJywKLSAgICAnY2FfYWQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMTUnLAotICAgICdjYV9hZC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xNScsCi0gICAgJ2NhX2FkLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5VVEYtOCcsCi0gICAgJ2NhX2FkQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTE1JywKICAgICAnY2FfZXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCi0gICAgJ2NhX2VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAotICAgICdjYV9lcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xNScsCi0gICAgJ2NhX2VzLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1JywKLSAgICAnY2FfZXMudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLlVURi04JywKLSAgICAnY2FfZXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMTUnLAogICAgICdjYV9mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xJywKLSAgICAnY2FfZnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMScsCi0gICAgJ2NhX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTE1JywKLSAgICAnY2FfZnIuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMTUnLAotICAgICdjYV9mci51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuVVRGLTgnLAotICAgICdjYV9mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xNScsCiAgICAgJ2NhX2l0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTEnLAotICAgICdjYV9pdC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xJywKLSAgICAnY2FfaXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMTUnLAotICAgICdjYV9pdC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xNScsCi0gICAgJ2NhX2l0LnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5VVEYtOCcsCi0gICAgJ2NhX2l0QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTE1JywKICAgICAnY2F0YWxhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCiAgICAgJ2NleHRlbmQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAotICAgICdjZXh0ZW5kLmVuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnY2hpbmVzZS1zJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0NOLmV1Y0NOJywKICAgICAnY2hpbmVzZS10JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmV1Y1RXJywKICAgICAnY3JvYXRpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ2NzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAogICAgICdjc19jcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKLSAgICAnY3NfY3MuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2NzX2N6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAotICAgICdjc19jei5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnY3knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N5X0dCLklTTzg4NTktMScsCiAgICAgJ2N5X2diJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjeV9HQi5JU084ODU5LTEnLAotICAgICdjeV9nYi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY3lfR0IuSVNPODg1OS0xJywKLSAgICAnY3lfZ2IuaXNvODg1OTE0JzogICAgICAgICAgICAgICAgICAgICAgJ2N5X0dCLklTTzg4NTktMTQnLAotICAgICdjeV9nYi5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY3lfR0IuSVNPODg1OS0xNScsCi0gICAgJ2N5X2diQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjeV9HQi5JU084ODU5LTE1JywKICAgICAnY3onOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2N6X2N6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAogICAgICdjemVjaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnZGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTE1JywKICAgICAnZGFfZGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhX2RrLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYV9kay44ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCi0gICAgJ2RhX2RrLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYV9kay5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCi0gICAgJ2RhX2RrQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTE1JywKICAgICAnZGFuaXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhbmlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAogICAgICdkYW5zayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCi0gICAgJ2RlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKICAgICAnZGVfYXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMScsCi0gICAgJ2RlX2F0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTEnLAotICAgICdkZV9hdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQVQuSVNPODg1OS0xNScsCi0gICAgJ2RlX2F0Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTE1JywKLSAgICAnZGVfYXQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULlVURi04JywKLSAgICAnZGVfYXRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMTUnLAogICAgICdkZV9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuSVNPODg1OS0xJywKLSAgICAnZGVfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0JFLklTTzg4NTktMScsCi0gICAgJ2RlX2JlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9CRS5JU084ODU5LTE1JywKLSAgICAnZGVfYmUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2RlX0JFLklTTzg4NTktMTUnLAotICAgICdkZV9iZS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuVVRGLTgnLAotICAgICdkZV9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuSVNPODg1OS0xNScsCiAgICAgJ2RlX2NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9DSC5JU084ODU5LTEnLAotICAgICdkZV9jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfQ0guSVNPODg1OS0xJywKLSAgICAnZGVfY2guaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0NILklTTzg4NTktMTUnLAotICAgICdkZV9jaEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQ0guSVNPODg1OS0xNScsCiAgICAgJ2RlX2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdkZV9kZS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZGVfZGUuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMTUnLAotICAgICdkZV9kZS44ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2RlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdkZV9kZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2RlLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKLSAgICAnZGVfZGUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLlVURi04JywKLSAgICAnZGVfZGVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMTUnLAogICAgICdkZV9sdSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuSVNPODg1OS0xJywKLSAgICAnZGVfbHUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0xVLklTTzg4NTktMScsCi0gICAgJ2RlX2x1Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9MVS5JU084ODU5LTE1JywKLSAgICAnZGVfbHUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2RlX0xVLklTTzg4NTktMTUnLAotICAgICdkZV9sdS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuVVRGLTgnLAotICAgICdkZV9sdUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuSVNPODg1OS0xNScsCiAgICAgJ2RldXRzY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAogICAgICdkdXRjaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xJywKICAgICAnZHV0Y2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMScsCiAgICAgJ2VlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZV9FRS5JU084ODU5LTQnLAogICAgICdlZV9lZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWVfRUUuSVNPODg1OS00JywKLSAgICAnZWVfZWUuaXNvODg1OTQnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VlX0VFLklTTzg4NTktNCcsCiAgICAgJ2Vlc3RpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTEnLAogICAgICdlbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxfR1IuSVNPODg1OS03JywKICAgICAnZWxfZ3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCi0gICAgJ2VsX2dyLmlzbzg4NTk3JzogICAgICAgICAgICAgICAgICAgICAgICdlbF9HUi5JU084ODU5LTcnLAogICAgICdlbF9nckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxfR1IuSVNPODg1OS0xNScsCiAgICAgJ2VuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAotICAgICdlbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnZW5fYXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0FVLklTTzg4NTktMScsCi0gICAgJ2VuX2F1Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9BVS5JU084ODU5LTEnLAogICAgICdlbl9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQkUuSVNPODg1OS0xJywKLSAgICAnZW5fYmVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0JFLklTTzg4NTktMTUnLAogICAgICdlbl9idyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQlcuSVNPODg1OS0xJywKLSAgICAnZW5fYncuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0JXLklTTzg4NTktMScsCiAgICAgJ2VuX2NhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9DQS5JU084ODU5LTEnLAotICAgICdlbl9jYS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fQ0EuSVNPODg1OS0xJywKICAgICAnZW5fZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCi0gICAgJ2VuX2diLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAotICAgICdlbl9nYi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xJywKLSAgICAnZW5fZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMTUnLAotICAgICdlbl9nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xNScsCiAgICAgJ2VuX2hrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9ISy5JU084ODU5LTEnLAotICAgICdlbl9oay5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fSEsuSVNPODg1OS0xJywKICAgICAnZW5faWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLklTTzg4NTktMScsCi0gICAgJ2VuX2llLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9JRS5JU084ODU5LTEnLAotICAgICdlbl9pZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZW5fSUUuSVNPODg1OS0xNScsCi0gICAgJ2VuX2llLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdlbl9JRS5JU084ODU5LTE1JywKLSAgICAnZW5faWUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLlVURi04JywKLSAgICAnZW5faWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLklTTzg4NTktMTUnLAogICAgICdlbl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fSU4uSVNPODg1OS0xJywKICAgICAnZW5fbnonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX05aLklTTzg4NTktMScsCi0gICAgJ2VuX256Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9OWi5JU084ODU5LTEnLAogICAgICdlbl9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fUEguSVNPODg1OS0xJywKLSAgICAnZW5fcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1BILklTTzg4NTktMScsCiAgICAgJ2VuX3NnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9TRy5JU084ODU5LTEnLAotICAgICdlbl9zZy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fU0cuSVNPODg1OS0xJywKICAgICAnZW5fdWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCiAgICAgJ2VuX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAotICAgICdlbl91cy44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5fdXMuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAotICAgICdlbl91cy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5fdXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAotICAgICdlbl91cy5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xNScsCi0gICAgJ2VuX3VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKICAgICAnZW5fdXNAZXVyb0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAogICAgICdlbl96YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fWkEuSVNPODg1OS0xJywKLSAgICAnZW5femEuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pBLklTTzg4NTktMScsCi0gICAgJ2VuX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9aQS5JU084ODU5LTEnLAotICAgICdlbl96YS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZW5fWkEuSVNPODg1OS0xNScsCi0gICAgJ2VuX3phQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9aQS5JU084ODU5LTE1JywKICAgICAnZW5fencnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pXLklTTzg4NTktMScsCi0gICAgJ2VuX3p3Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9aVy5JU084ODU5LTEnLAogICAgICdlbmdfZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xJywKLSAgICAnZW5nX2diLjg4NTknOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCiAgICAgJ2VuZ2xpc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9FTi5JU084ODU5LTEnLAotICAgICdlbmdsaXNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAnZW5fRU4uSVNPODg1OS0xJywKICAgICAnZW5nbGlzaF91ayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCi0gICAgJ2VuZ2xpc2hfdWsuODg1OSc6ICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAogICAgICdlbmdsaXNoX3VuaXRlZC1zdGF0ZXMnOiAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnZW5nbGlzaF91bml0ZWQtc3RhdGVzLjQzNyc6ICAgICAgICAgICAgJ0MnLAogICAgICdlbmdsaXNoX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5nbGlzaF91cy44ODU5JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2VuZ2xpc2hfdXMuYXNjaWknOiAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdlbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW9fWFguSVNPODg1OS0zJywKICAgICAnZW9fZW8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VvX0VPLklTTzg4NTktMycsCi0gICAgJ2VvX2VvLmlzbzg4NTkzJzogICAgICAgICAgICAgICAgICAgICAgICdlb19FTy5JU084ODU5LTMnLAogICAgICdlb194eCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW9fWFguSVNPODg1OS0zJywKLSAgICAnZW9feHguaXNvODg1OTMnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VvX1hYLklTTzg4NTktMycsCiAgICAgJ2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAogICAgICdlc19hcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfQVIuSVNPODg1OS0xJywKLSAgICAnZXNfYXIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0FSLklTTzg4NTktMScsCiAgICAgJ2VzX2JvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19CTy5JU084ODU5LTEnLAotICAgICdlc19iby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfQk8uSVNPODg1OS0xJywKICAgICAnZXNfY2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NMLklTTzg4NTktMScsCi0gICAgJ2VzX2NsLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19DTC5JU084ODU5LTEnLAogICAgICdlc19jbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfQ08uSVNPODg1OS0xJywKLSAgICAnZXNfY28uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NPLklTTzg4NTktMScsCiAgICAgJ2VzX2NyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19DUi5JU084ODU5LTEnLAotICAgICdlc19jci5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfQ1IuSVNPODg1OS0xJywKICAgICAnZXNfZG8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0RPLklTTzg4NTktMScsCi0gICAgJ2VzX2RvLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19ETy5JU084ODU5LTEnLAogICAgICdlc19lYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRUMuSVNPODg1OS0xJywKLSAgICAnZXNfZWMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VDLklTTzg4NTktMScsCiAgICAgJ2VzX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAotICAgICdlc19lcy44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKLSAgICAnZXNfZXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCi0gICAgJ2VzX2VzLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTE1JywKLSAgICAnZXNfZXMuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMTUnLAotICAgICdlc19lcy51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuVVRGLTgnLAotICAgICdlc19lc0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xNScsCiAgICAgJ2VzX2d0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19HVC5JU084ODU5LTEnLAotICAgICdlc19ndC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfR1QuSVNPODg1OS0xJywKICAgICAnZXNfaG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0hOLklTTzg4NTktMScsCi0gICAgJ2VzX2huLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19ITi5JU084ODU5LTEnLAogICAgICdlc19teCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfTVguSVNPODg1OS0xJywKLSAgICAnZXNfbXguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX01YLklTTzg4NTktMScsCiAgICAgJ2VzX25pJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19OSS5JU084ODU5LTEnLAotICAgICdlc19uaS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfTkkuSVNPODg1OS0xJywKICAgICAnZXNfcGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BBLklTTzg4NTktMScsCi0gICAgJ2VzX3BhLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QQS5JU084ODU5LTEnLAotICAgICdlc19wYS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfUEEuSVNPODg1OS0xNScsCi0gICAgJ2VzX3BhQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QQS5JU084ODU5LTE1JywKICAgICAnZXNfcGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BFLklTTzg4NTktMScsCi0gICAgJ2VzX3BlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QRS5JU084ODU5LTEnLAotICAgICdlc19wZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfUEUuSVNPODg1OS0xNScsCi0gICAgJ2VzX3BlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QRS5JU084ODU5LTE1JywKICAgICAnZXNfcHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BSLklTTzg4NTktMScsCi0gICAgJ2VzX3ByLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QUi5JU084ODU5LTEnLAogICAgICdlc19weSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfUFkuSVNPODg1OS0xJywKLSAgICAnZXNfcHkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BZLklTTzg4NTktMScsCi0gICAgJ2VzX3B5Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19QWS5JU084ODU5LTE1JywKLSAgICAnZXNfcHlAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BZLklTTzg4NTktMTUnLAogICAgICdlc19zdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfU1YuSVNPODg1OS0xJywKLSAgICAnZXNfc3YuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1NWLklTTzg4NTktMScsCi0gICAgJ2VzX3N2Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19TVi5JU084ODU5LTE1JywKLSAgICAnZXNfc3ZAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1NWLklTTzg4NTktMTUnLAogICAgICdlc191cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVMuSVNPODg1OS0xJywKLSAgICAnZXNfdXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1VTLklTTzg4NTktMScsCiAgICAgJ2VzX3V5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19VWS5JU084ODU5LTEnLAotICAgICdlc191eS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVkuSVNPODg1OS0xJywKLSAgICAnZXNfdXkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VzX1VZLklTTzg4NTktMTUnLAotICAgICdlc191eUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVkuSVNPODg1OS0xNScsCiAgICAgJ2VzX3ZlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19WRS5JU084ODU5LTEnLAotICAgICdlc192ZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfVkUuSVNPODg1OS0xJywKLSAgICAnZXNfdmUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VzX1ZFLklTTzg4NTktMTUnLAotICAgICdlc192ZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVkUuSVNPODg1OS0xNScsCiAgICAgJ2VzdG9uaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTEnLAogICAgICdldCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xNScsCiAgICAgJ2V0X2VlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTE1JywKLSAgICAnZXRfZWUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMScsCi0gICAgJ2V0X2VlLmlzbzg4NTkxMyc6ICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTEzJywKLSAgICAnZXRfZWUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMTUnLAotICAgICdldF9lZS5pc284ODU5NCc6ICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS00JywKLSAgICAnZXRfZWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMTUnLAogICAgICdldSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXVfRVMuSVNPODg1OS0xJywKICAgICAnZXVfZXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLklTTzg4NTktMScsCi0gICAgJ2V1X2VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdldV9FUy5JU084ODU5LTEnLAotICAgICdldV9lcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXVfRVMuSVNPODg1OS0xNScsCi0gICAgJ2V1X2VzLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdldV9FUy5JU084ODU5LTE1JywKLSAgICAnZXVfZXMudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLlVURi04JywKLSAgICAnZXVfZXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLklTTzg4NTktMTUnLAogICAgICdmYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFfSVIuVVRGLTgnLAogICAgICdmYV9pcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFfSVIuVVRGLTgnLAogICAgICdmYV9pci5pc2lyaTMzNDInOiAgICAgICAgICAgICAgICAgICAgICAnZmFfSVIuSVNJUkktMzM0MicsCiAgICAgJ2ZpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKLSAgICAnZmkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAogICAgICdmaV9maSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCi0gICAgJ2ZpX2ZpLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTEnLAotICAgICdmaV9maS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKLSAgICAnZmlfZmkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAotICAgICdmaV9maS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCi0gICAgJ2ZpX2ZpLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5VVEYtOCcsCi0gICAgJ2ZpX2ZpQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKICAgICAnZmlubmlzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMScsCi0gICAgJ2Zpbm5pc2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTEnLAogICAgICdmbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9fRk8uSVNPODg1OS0xJywKICAgICAnZm9fZm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMScsCi0gICAgJ2ZvX2ZvLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTEnLAotICAgICdmb19mby5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZm9fRk8uSVNPODg1OS0xNScsCi0gICAgJ2ZvX2ZvQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTE1JywKICAgICAnZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCi0gICAgJ2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTE1JywKICAgICAnZnJfYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMScsCi0gICAgJ2ZyX2JlLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTEnLAotICAgICdmcl9iZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xJywKLSAgICAnZnJfYmUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMTUnLAotICAgICdmcl9iZS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2JlLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5VVEYtOCcsCi0gICAgJ2ZyX2JlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTE1JywKICAgICAnZnJfY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMScsCi0gICAgJ2ZyX2NhLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTEnLAotICAgICdmcl9jYS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0EuSVNPODg1OS0xJywKLSAgICAnZnJfY2EuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMTUnLAotICAgICdmcl9jYUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0EuSVNPODg1OS0xNScsCiAgICAgJ2ZyX2NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DSC5JU084ODU5LTEnLAotICAgICdmcl9jaC44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xJywKLSAgICAnZnJfY2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NILklTTzg4NTktMScsCi0gICAgJ2ZyX2NoLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9DSC5JU084ODU5LTE1JywKLSAgICAnZnJfY2hAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NILklTTzg4NTktMTUnLAogICAgICdmcl9mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnJfZnIuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCi0gICAgJ2ZyX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAotICAgICdmcl9mci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2ZyLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTE1JywKLSAgICAnZnJfZnIudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLlVURi04JywKLSAgICAnZnJfZnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMTUnLAogICAgICdmcl9sdSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuSVNPODg1OS0xJywKLSAgICAnZnJfbHUuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0xVLklTTzg4NTktMScsCi0gICAgJ2ZyX2x1Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmcl9MVS5JU084ODU5LTEnLAotICAgICdmcl9sdS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2x1Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdmcl9MVS5JU084ODU5LTE1JywKLSAgICAnZnJfbHUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0xVLlVURi04JywKLSAgICAnZnJfbHVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0xVLklTTzg4NTktMTUnLAogICAgICdmcmFuXHhlN2Fpcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKICAgICAnZnJlX2ZyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCi0gICAgJ2ZyZV9mci44ODU5JzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAogICAgICdmcmVuY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKICAgICAnZnJlbmNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NILklTTzg4NTktMScsCiAgICAgJ2ZyZW5jaF9mcmFuY2UnOiAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAotICAgICdmcmVuY2hfZnJhbmNlLjg4NTknOiAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKICAgICAnZ2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMScsCiAgICAgJ2dhX2llJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTEnLAotICAgICdnYV9pZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZ2FfSUUuSVNPODg1OS0xJywKLSAgICAnZ2FfaWUuaXNvODg1OTE0JzogICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMTQnLAotICAgICdnYV9pZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZ2FfSUUuSVNPODg1OS0xNScsCi0gICAgJ2dhX2llLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTE1JywKLSAgICAnZ2FfaWUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLlVURi04JywKLSAgICAnZ2FfaWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMTUnLAogICAgICdnYWxlZ28nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xJywKICAgICAnZ2FsaWNpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMScsCiAgICAgJ2dkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZF9HQi5JU084ODU5LTEnLAogICAgICdnZF9nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2RfR0IuSVNPODg1OS0xJywKLSAgICAnZ2RfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2dkX0dCLklTTzg4NTktMScsCi0gICAgJ2dkX2diLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdnZF9HQi5JU084ODU5LTE0JywKLSAgICAnZ2RfZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2dkX0dCLklTTzg4NTktMTUnLAotICAgICdnZF9nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2RfR0IuSVNPODg1OS0xNScsCiAgICAgJ2dlcl9kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdnZXJfZGUuODg1OSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKICAgICAnZ2VybWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCiAgICAgJ2dlcm1hbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9DSC5JU084ODU5LTEnLAogICAgICdnZXJtYW5fZ2VybWFueSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZ2VybWFuX2dlcm1hbnkuODg1OSc6ICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCiAgICAgJ2dsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTEnLAogICAgICdnbF9lcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xJywKLSAgICAnZ2xfZXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMScsCi0gICAgJ2dsX2VzLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTE1JywKLSAgICAnZ2xfZXMuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMTUnLAotICAgICdnbF9lcy51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuVVRGLTgnLAotICAgICdnbF9lc0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xNScsCiAgICAgJ2dyZWVrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbF9HUi5JU084ODU5LTcnLAotICAgICdncmVlay5pc284ODU5Nyc6ICAgICAgICAgICAgICAgICAgICAgICAnZWxfR1IuSVNPODg1OS03JywKICAgICAnZ3VfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2d1X0lOLlVURi04JywKICAgICAnZ3YnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2d2X0dCLklTTzg4NTktMScsCiAgICAgJ2d2X2diJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdndl9HQi5JU084ODU5LTEnLAotICAgICdndl9nYi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZ3ZfR0IuSVNPODg1OS0xJywKLSAgICAnZ3ZfZ2IuaXNvODg1OTE0JzogICAgICAgICAgICAgICAgICAgICAgJ2d2X0dCLklTTzg4NTktMTQnLAotICAgICdndl9nYi5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZ3ZfR0IuSVNPODg1OS0xNScsCi0gICAgJ2d2X2diQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdndl9HQi5JU084ODU5LTE1JywKICAgICAnaGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCiAgICAgJ2hlX2lsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAotICAgICdoZV9pbC5jcDEyNTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuQ1AxMjU1JywKLSAgICAnaGVfaWwuaXNvODg1OTgnOiAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCi0gICAgJ2hlX2lsLm1pY3Jvc29mdGNwMTI1NSc6ICAgICAgICAgICAgICAgICdoZV9JTC5DUDEyNTUnLAogICAgICdoZWJyZXcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKLSAgICAnaGVicmV3Lmlzbzg4NTk4JzogICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCiAgICAgJ2hpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaV9JTi5JU0NJSS1ERVYnLAogICAgICdoaV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlfSU4uSVNDSUktREVWJywKICAgICAnaGlfaW4uaXNjaWlkZXYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2hpX0lOLklTQ0lJLURFVicsCkBAIC0xMjM0LDIzICsxMDA5LDE3IEBACiAgICAgJ2huZV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdobmVfSU4uVVRGLTgnLAogICAgICdocic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKICAgICAnaHJfaHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCi0gICAgJ2hyX2hyLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAogICAgICdocnZhdHNraSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKICAgICAnaHUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h1X0hVLklTTzg4NTktMicsCiAgICAgJ2h1X2h1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodV9IVS5JU084ODU5LTInLAotICAgICdodV9odS5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnaHVfSFUuSVNPODg1OS0yJywKICAgICAnaHVuZ2FyaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h1X0hVLklTTzg4NTktMicsCiAgICAgJ2ljZWxhbmRpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTEnLAotICAgICdpY2VsYW5kaWMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xJywKICAgICAnaWQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkX0lELklTTzg4NTktMScsCiAgICAgJ2lkX2lkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZF9JRC5JU084ODU5LTEnLAogICAgICdpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRfSUQuSVNPODg1OS0xJywKICAgICAnaW5faWQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkX0lELklTTzg4NTktMScsCiAgICAgJ2lzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTEnLAogICAgICdpc19pcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xJywKLSAgICAnaXNfaXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMScsCi0gICAgJ2lzX2lzLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTE1JywKLSAgICAnaXNfaXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMTUnLAogICAgICdpc28tODg1OS0xJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnaXNvLTg4NTktMTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAogICAgICdpc284ODU5LTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKQEAgLTEyNTgsNDYgKzEwMjcsMjMgQEAKICAgICAnaXNvXzg4NTlfMSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2lzb184ODU5XzE1JzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKICAgICAnaXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCi0gICAgJ2l0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTE1JywKICAgICAnaXRfY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMScsCi0gICAgJ2l0X2NoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdpdF9DSC5JU084ODU5LTEnLAotICAgICdpdF9jaC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnaXRfQ0guSVNPODg1OS0xNScsCi0gICAgJ2l0X2NoQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9DSC5JU084ODU5LTE1JywKICAgICAnaXRfaXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCi0gICAgJ2l0X2l0Ljg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTEnLAotICAgICdpdF9pdC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKLSAgICAnaXRfaXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMTUnLAotICAgICdpdF9pdC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xNScsCi0gICAgJ2l0X2l0LnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5VVEYtOCcsCi0gICAgJ2l0X2l0QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTE1JywKICAgICAnaXRhbGlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCi0gICAgJ2l0YWxpYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTEnLAogICAgICdpdSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXVfQ0EuTlVOQUNPTS04JywKICAgICAnaXVfY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l1X0NBLk5VTkFDT00tOCcsCiAgICAgJ2l1X2NhLm51bmFjb204JzogICAgICAgICAgICAgICAgICAgICAgICdpdV9DQS5OVU5BQ09NLTgnLAogICAgICdpdyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKICAgICAnaXdfaWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCi0gICAgJ2l3X2lsLmlzbzg4NTk4JzogICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAogICAgICdqYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAotICAgICdqYS5qaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCi0gICAgJ2phLnNqaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKICAgICAnamFfanAnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKLSAgICAnamFfanAuYWplYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKICAgICAnamFfanAuZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKLSAgICAnamFfanAuZXVjanAnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKLSAgICAnamFfanAuaXNvLTIwMjItanAnOiAgICAgICAgICAgICAgICAgICAgJ2phX0pQLkpJUzcnLAotICAgICdqYV9qcC5pc28yMDIyanAnOiAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCi0gICAgJ2phX2pwLmppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKLSAgICAnamFfanAuamlzNyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLkpJUzcnLAogICAgICdqYV9qcC5tc2NvZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCiAgICAgJ2phX2pwLnBjayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKLSAgICAnamFfanAuc2ppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAotICAgICdqYV9qcC51amlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAogICAgICdqYXBhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAogICAgICdqYXBhbmVzZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAogICAgICdqYXBhbmVzZS1ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAogICAgICdqYXBhbmVzZS5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAotICAgICdqYXBhbmVzZS5zamlzJzogICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCiAgICAgJ2pwX2pwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2thJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrYV9HRS5HRU9SR0lBTi1BQ0FERU1ZJywKICAgICAna2FfZ2UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2thX0dFLkdFT1JHSUFOLUFDQURFTVknLApAQCAtMTMwNiwyNyArMTA1MiwxOCBAQAogICAgICdrYV9nZS5nZW9yZ2lhbnJzJzogICAgICAgICAgICAgICAgICAgICAna2FfR0UuR0VPUkdJQU4tQUNBREVNWScsCiAgICAgJ2tsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbF9HTC5JU084ODU5LTEnLAogICAgICdrbF9nbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xJywKLSAgICAna2xfZ2wuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMScsCi0gICAgJ2tsX2dsLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdrbF9HTC5JU084ODU5LTE1JywKLSAgICAna2xfZ2xAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMTUnLAogICAgICdrbV9raCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna21fS0guVVRGLTgnLAogICAgICdrbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna25fSU4uVVRGLTgnLAogICAgICdrbl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna25fSU4uVVRGLTgnLAogICAgICdrbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb19rcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb19rci5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAotICAgICdrb19rci5ldWNrcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb3JlYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb3JlYW4uZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLTgnLAogICAgICdrc19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLTgnLAotICAgICdrc19pbkBkZXZhbmFnYXJpJzogICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLThAZGV2YW5hZ2FyaScsCiAgICAgJ2t3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTEnLAogICAgICdrd19nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xJywKLSAgICAna3dfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMScsCi0gICAgJ2t3X2diLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTE0JywKLSAgICAna3dfZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMTUnLAotICAgICdrd19nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xNScsCiAgICAgJ2t5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdreV9LRy5VVEYtOCcsCiAgICAgJ2t5X2tnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdreV9LRy5VVEYtOCcsCiAgICAgJ2xpdGh1YW5pYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdF9MVC5JU084ODU5LTEzJywKQEAgLTEzMzcsMTU3ICsxMDc0LDc4IEBACiAgICAgJ2xvX2xhLm11bGVsYW8xJzogICAgICAgICAgICAgICAgICAgICAgICdsb19MQS5NVUxFTEFPLTEnLAogICAgICdsdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHRfTFQuSVNPODg1OS0xMycsCiAgICAgJ2x0X2x0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdF9MVC5JU084ODU5LTEzJywKLSAgICAnbHRfbHQuaXNvODg1OTEzJzogICAgICAgICAgICAgICAgICAgICAgJ2x0X0xULklTTzg4NTktMTMnLAotICAgICdsdF9sdC5pc284ODU5NCc6ICAgICAgICAgICAgICAgICAgICAgICAnbHRfTFQuSVNPODg1OS00JywKICAgICAnbHYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktMTMnLAogICAgICdsdl9sdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHZfTFYuSVNPODg1OS0xMycsCi0gICAgJ2x2X2x2Lmlzbzg4NTkxMyc6ICAgICAgICAgICAgICAgICAgICAgICdsdl9MVi5JU084ODU5LTEzJywKLSAgICAnbHZfbHYuaXNvODg1OTQnOiAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktNCcsCiAgICAgJ21haSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWlfSU4uVVRGLTgnLAogICAgICdtYWlfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFpX0lOLlVURi04JywKICAgICAnbWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pX05aLklTTzg4NTktMScsCiAgICAgJ21pX256JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaV9OWi5JU084ODU5LTEnLAotICAgICdtaV9uei5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbWlfTlouSVNPODg1OS0xJywKICAgICAnbWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21rX01LLklTTzg4NTktNScsCiAgICAgJ21rX21rJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdta19NSy5JU084ODU5LTUnLAotICAgICdta19tay5jcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAnbWtfTUsuQ1AxMjUxJywKLSAgICAnbWtfbWsuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ21rX01LLklTTzg4NTktNScsCi0gICAgJ21rX21rLm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdta19NSy5DUDEyNTEnLAogICAgICdtbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWxfSU4uVVRGLTgnLAogICAgICdtbF9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWxfSU4uVVRGLTgnLAogICAgICdtcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXJfSU4uVVRGLTgnLAogICAgICdtcl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXJfSU4uVVRGLTgnLAogICAgICdtcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXNfTVkuSVNPODg1OS0xJywKICAgICAnbXNfbXknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zX01ZLklTTzg4NTktMScsCi0gICAgJ21zX215Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdtc19NWS5JU084ODU5LTEnLAogICAgICdtdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXRfTVQuSVNPODg1OS0zJywKICAgICAnbXRfbXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ210X01ULklTTzg4NTktMycsCi0gICAgJ210X210Lmlzbzg4NTkzJzogICAgICAgICAgICAgICAgICAgICAgICdtdF9NVC5JU084ODU5LTMnLAogICAgICduYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xJywKICAgICAnbmJfbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCi0gICAgJ25iX25vLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTEnLAotICAgICduYl9uby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xJywKLSAgICAnbmJfbm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMTUnLAotICAgICduYl9ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xNScsCiAgICAgJ25lX25wJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZV9OUC5VVEYtOCcsCiAgICAgJ25sJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTEnLAotICAgICdubC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xNScsCiAgICAgJ25sX2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAotICAgICdubF9iZS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xJywKLSAgICAnbmxfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMScsCi0gICAgJ25sX2JlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTE1JywKLSAgICAnbmxfYmUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMTUnLAotICAgICdubF9iZS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuVVRGLTgnLAotICAgICdubF9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xNScsCiAgICAgJ25sX25sJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTEnLAotICAgICdubF9ubC44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xJywKLSAgICAnbmxfbmwuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCi0gICAgJ25sX25sLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTE1JywKLSAgICAnbmxfbmwuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMTUnLAotICAgICdubF9ubC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuVVRGLTgnLAotICAgICdubF9ubEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xNScsCiAgICAgJ25uJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTEnLAogICAgICdubl9ubyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xJywKLSAgICAnbm5fbm8uODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMScsCi0gICAgJ25uX25vLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTEnLAotICAgICdubl9uby5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xNScsCi0gICAgJ25uX25vQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTE1JywKICAgICAnbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCiAgICAgJ25vQG55bm9yc2snOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTEnLAogICAgICdub19ubyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKLSAgICAnbm9fbm8uODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCi0gICAgJ25vX25vLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAotICAgICdub19uby5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xNScsCiAgICAgJ25vX25vLmlzbzg4NTkxQGJva21hbCc6ICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAogICAgICdub19uby5pc284ODU5MUBueW5vcnNrJzogICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKLSAgICAnbm9fbm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMTUnLAogICAgICdub3J3ZWdpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKLSAgICAnbm9yd2VnaWFuLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCiAgICAgJ25yJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICducl9aQS5JU084ODU5LTEnLAogICAgICducl96YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnJfWkEuSVNPODg1OS0xJywKLSAgICAnbnJfemEuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25yX1pBLklTTzg4NTktMScsCiAgICAgJ25zbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduc29fWkEuSVNPODg1OS0xNScsCiAgICAgJ25zb196YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduc29fWkEuSVNPODg1OS0xNScsCi0gICAgJ25zb196YS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICduc29fWkEuSVNPODg1OS0xNScsCiAgICAgJ255JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTEnLAogICAgICdueV9ubyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnlfTk8uSVNPODg1OS0xJywKLSAgICAnbnlfbm8uODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMScsCi0gICAgJ255X25vLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTEnLAotICAgICdueV9uby5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnbnlfTk8uSVNPODg1OS0xNScsCi0gICAgJ255X25vQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTE1JywKICAgICAnbnlub3Jzayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMScsCiAgICAgJ29jJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTEnLAogICAgICdvY19mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xJywKLSAgICAnb2NfZnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMScsCi0gICAgJ29jX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTE1JywKLSAgICAnb2NfZnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMTUnLAogICAgICdvcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JfSU4uVVRGLTgnLAogICAgICdvcl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JfSU4uVVRGLTgnLAogICAgICdwYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfSU4uVVRGLTgnLAogICAgICdwYV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfSU4uVVRGLTgnLAogICAgICdwZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xJywKICAgICAncGRfZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BkX0RFLklTTzg4NTktMScsCi0gICAgJ3BkX2RlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdwZF9ERS5JU084ODU5LTEnLAotICAgICdwZF9kZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAncGRfREUuSVNPODg1OS0xNScsCi0gICAgJ3BkX2RlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9ERS5JU084ODU5LTE1JywKICAgICAncGRfdXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BkX1VTLklTTzg4NTktMScsCi0gICAgJ3BkX3VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdwZF9VUy5JU084ODU5LTEnLAotICAgICdwZF91cy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xNScsCi0gICAgJ3BkX3VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9VUy5JU084ODU5LTE1JywKICAgICAncGgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BoX1BILklTTzg4NTktMScsCiAgICAgJ3BoX3BoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaF9QSC5JU084ODU5LTEnLAotICAgICdwaF9waC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncGhfUEguSVNPODg1OS0xJywKICAgICAncGwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsX1BMLklTTzg4NTktMicsCiAgICAgJ3BsX3BsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbF9QTC5JU084ODU5LTInLAotICAgICdwbF9wbC5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAncGxfUEwuSVNPODg1OS0yJywKICAgICAncG9saXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsX1BMLklTTzg4NTktMicsCiAgICAgJ3BvcnR1Z3Vlc2UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAotICAgICdwb3J0dWd1ZXNlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKICAgICAncG9ydHVndWVzZV9icmF6aWwnOiAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMScsCi0gICAgJ3BvcnR1Z3Vlc2VfYnJhemlsLjg4NTknOiAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAogICAgICdwb3NpeCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ3Bvc2l4LXV0ZjInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAncHAnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BwX0FOLklTTzg4NTktMScsCiAgICAgJ3BwX2FuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcF9BTi5JU084ODU5LTEnLAotICAgICdwcF9hbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncHBfQU4uSVNPODg1OS0xJywKICAgICAncHQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCi0gICAgJ3B0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTE1JywKICAgICAncHRfYnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMScsCi0gICAgJ3B0X2JyLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAotICAgICdwdF9ici5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKLSAgICAncHRfYnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMTUnLAotICAgICdwdF9ickBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xNScsCiAgICAgJ3B0X3B0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAotICAgICdwdF9wdC44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKLSAgICAncHRfcHQuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCi0gICAgJ3B0X3B0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTE1JywKLSAgICAncHRfcHQuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMTUnLAotICAgICdwdF9wdC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuVVRGLTgnLAotICAgICdwdF9wdEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xNScsCiAgICAgJ3JvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb19STy5JU084ODU5LTInLAogICAgICdyb19ybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKLSAgICAncm9fcm8uaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCiAgICAgJ3JvbWFuaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb19STy5JU084ODU5LTInLAogICAgICdydSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuVVRGLTgnLAotICAgICdydS5rb2k4cic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuS09JOC1SJywKICAgICAncnVfcnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLlVURi04JywKLSAgICAncnVfcnUuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLkNQMTI1MScsCi0gICAgJ3J1X3J1Lmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5JU084ODU5LTUnLAotICAgICdydV9ydS5rb2k4cic6ICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuS09JOC1SJywKLSAgICAncnVfcnUubWljcm9zb2Z0Y3AxMjUxJzogICAgICAgICAgICAgICAgJ3J1X1JVLkNQMTI1MScsCiAgICAgJ3J1X3VhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9VQS5LT0k4LVUnLAotICAgICdydV91YS5jcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAncnVfVUEuQ1AxMjUxJywKLSAgICAncnVfdWEua29pOHUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1VBLktPSTgtVScsCi0gICAgJ3J1X3VhLm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdydV9VQS5DUDEyNTEnLAogICAgICdydW1hbmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncnVzc2lhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLklTTzg4NTktNScsCiAgICAgJ3J3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyd19SVy5JU084ODU5LTEnLAogICAgICdyd19ydyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncndfUlcuSVNPODg1OS0xJywKLSAgICAncndfcncuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3J3X1JXLklTTzg4NTktMScsCiAgICAgJ3NkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZF9JTi5VVEYtOCcsCi0gICAgJ3NkQGRldmFuYWdhcmknOiAgICAgICAgICAgICAgICAgICAgICAgICdzZF9JTi5VVEYtOEBkZXZhbmFnYXJpJywKICAgICAnc2RfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NkX0lOLlVURi04JywKLSAgICAnc2RfaW5AZGV2YW5hZ2FyaSc6ICAgICAgICAgICAgICAgICAgICAgJ3NkX0lOLlVURi04QGRldmFuYWdhcmknLAogICAgICdzZV9ubyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VfTk8uVVRGLTgnLAogICAgICdzZXJib2Nyb2F0aWFuJzogICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLApAQCAtMTUwMSwzNyArMTE1OSwyNiBAQAogICAgICdzaW5oYWxhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2lfTEsuVVRGLTgnLAogICAgICdzayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tfU0suSVNPODg1OS0yJywKICAgICAnc2tfc2snOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NrX1NLLklTTzg4NTktMicsCi0gICAgJ3NrX3NrLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdza19TSy5JU084ODU5LTInLAogICAgICdzbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2xfU0kuSVNPODg1OS0yJywKICAgICAnc2xfY3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NsX0NTLklTTzg4NTktMicsCiAgICAgJ3NsX3NpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzbF9TSS5JU084ODU5LTInLAotICAgICdzbF9zaS5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnc2xfU0kuSVNPODg1OS0yJywKICAgICAnc2xvdmFrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NrX1NLLklTTzg4NTktMicsCiAgICAgJ3Nsb3ZlbmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzbF9TSS5JU084ODU5LTInLAogICAgICdzbG92ZW5pYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2xfU0kuSVNPODg1OS0yJywKICAgICAnc3AnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCiAgICAgJ3NwX3l1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAogICAgICdzcGFuaXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKLSAgICAnc3BhbmlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCiAgICAgJ3NwYW5pc2hfc3BhaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAotICAgICdzcGFuaXNoX3NwYWluLjg4NTknOiAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKICAgICAnc3EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxX0FMLklTTzg4NTktMicsCiAgICAgJ3NxX2FsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcV9BTC5JU084ODU5LTInLAotICAgICdzcV9hbC5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnc3FfQUwuSVNPODg1OS0yJywKICAgICAnc3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3JAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKLSAgICAnc3JAbGF0aW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc3JAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLlVURi04QGxhdGluJywKICAgICAnc3JfY3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLlVURi04JywKLSAgICAnc3JfY3MuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCiAgICAgJ3NyX2NzLmlzbzg4NTkyQGxhdG4nOiAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAotICAgICdzcl9jcy5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKLSAgICAnc3JfY3MudXRmOEBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLlVURi04QGxhdGluJywKICAgICAnc3JfY3NAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLlVURi04QGxhdGluJywKICAgICAnc3JfbWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX01FLlVURi04JywKICAgICAnc3JfcnMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKLSAgICAnc3JfcnMudXRmOEBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKLSAgICAnc3JfcnNAbGF0aW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc3JfcnNAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc3Jfc3AnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCiAgICAgJ3NyX3l1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCkBAIC0xNTQwLDI5ICsxMTg3LDE1IEBACiAgICAgJ3NyX3l1Lmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAogICAgICdzcl95dS5pc284ODU5NUBjeXJpbGxpYyc6ICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKICAgICAnc3JfeXUubWljcm9zb2Z0Y3AxMjUxQGN5cmlsbGljJzogICAgICAgJ3NyX0NTLkNQMTI1MScsCi0gICAgJ3NyX3l1LnV0ZjhAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCiAgICAgJ3NyX3l1QGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCiAgICAgJ3NzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc19aQS5JU084ODU5LTEnLAogICAgICdzc196YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NfWkEuSVNPODg1OS0xJywKLSAgICAnc3NfemEuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NzX1pBLklTTzg4NTktMScsCiAgICAgJ3N0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdF9aQS5JU084ODU5LTEnLAogICAgICdzdF96YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RfWkEuSVNPODg1OS0xJywKLSAgICAnc3RfemEuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3N0X1pBLklTTzg4NTktMScsCiAgICAgJ3N2JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAotICAgICdzdi5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xNScsCiAgICAgJ3N2X2ZpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTEnLAotICAgICdzdl9maS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xJywKLSAgICAnc3ZfZmkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMTUnLAotICAgICdzdl9maS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xNScsCi0gICAgJ3N2X2ZpLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5VVEYtOCcsCi0gICAgJ3N2X2ZpQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTE1JywKICAgICAnc3Zfc2UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCi0gICAgJ3N2X3NlLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAotICAgICdzdl9zZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xJywKLSAgICAnc3Zfc2UuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMTUnLAotICAgICdzdl9zZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xNScsCiAgICAgJ3N3ZWRpc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAotICAgICdzd2VkaXNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xJywKICAgICAndGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAogICAgICd0YV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGFfSU4uVFNDSUktMCcsCiAgICAgJ3RhX2luLnRzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0YV9JTi5UU0NJSS0wJywKQEAgLTE1NzAsNDkgKzEyMDMsMzMgQEAKICAgICAndGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlX0lOLlVURi04JywKICAgICAndGcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RnX1RKLktPSTgtQycsCiAgICAgJ3RnX3RqJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0Z19USi5LT0k4LUMnLAotICAgICd0Z190ai5rb2k4Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAndGdfVEouS09JOC1DJywKICAgICAndGgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoX1RILklTTzg4NTktMTEnLAogICAgICd0aF90aCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhfVEguSVNPODg1OS0xMScsCi0gICAgJ3RoX3RoLmlzbzg4NTkxMSc6ICAgICAgICAgICAgICAgICAgICAgICd0aF9USC5JU084ODU5LTExJywKICAgICAndGhfdGgudGFjdGlzJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3RoX1RILlRJUzYyMCcsCiAgICAgJ3RoX3RoLnRpczYyMCc6ICAgICAgICAgICAgICAgICAgICAgICAgICd0aF9USC5USVM2MjAnLAogICAgICd0aGFpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhfVEguSVNPODg1OS0xMScsCiAgICAgJ3RsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0bF9QSC5JU084ODU5LTEnLAogICAgICd0bF9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGxfUEguSVNPODg1OS0xJywKLSAgICAndGxfcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3RsX1BILklTTzg4NTktMScsCiAgICAgJ3RuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0bl9aQS5JU084ODU5LTE1JywKICAgICAndG5femEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RuX1pBLklTTzg4NTktMTUnLAotICAgICd0bl96YS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAndG5fWkEuSVNPODg1OS0xNScsCiAgICAgJ3RyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cl9UUi5JU084ODU5LTknLAogICAgICd0cl90cic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJfVFIuSVNPODg1OS05JywKLSAgICAndHJfdHIuaXNvODg1OTknOiAgICAgICAgICAgICAgICAgICAgICAgJ3RyX1RSLklTTzg4NTktOScsCiAgICAgJ3RzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0c19aQS5JU084ODU5LTEnLAogICAgICd0c196YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHNfWkEuSVNPODg1OS0xJywKLSAgICAndHNfemEuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3RzX1pBLklTTzg4NTktMScsCiAgICAgJ3R0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0dF9SVS5UQVRBUi1DWVInLAogICAgICd0dF9ydSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHRfUlUuVEFUQVItQ1lSJywKLSAgICAndHRfcnUua29pOGMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R0X1JVLktPSTgtQycsCiAgICAgJ3R0X3J1LnRhdGFyY3lyJzogICAgICAgICAgICAgICAgICAgICAgICd0dF9SVS5UQVRBUi1DWVInLAogICAgICd0dXJraXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJfVFIuSVNPODg1OS05JywKLSAgICAndHVya2lzaC5pc284ODU5OSc6ICAgICAgICAgICAgICAgICAgICAgJ3RyX1RSLklTTzg4NTktOScsCiAgICAgJ3VrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1a19VQS5LT0k4LVUnLAogICAgICd1a191YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndWtfVUEuS09JOC1VJywKLSAgICAndWtfdWEuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3VrX1VBLkNQMTI1MScsCi0gICAgJ3VrX3VhLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICd1a19VQS5JU084ODU5LTUnLAotICAgICd1a191YS5rb2k4dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAndWtfVUEuS09JOC1VJywKLSAgICAndWtfdWEubWljcm9zb2Z0Y3AxMjUxJzogICAgICAgICAgICAgICAgJ3VrX1VBLkNQMTI1MScsCiAgICAgJ3VuaXYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy51dGYnLAogICAgICd1bml2ZXJzYWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMudXRmJywKICAgICAndW5pdmVyc2FsLnV0ZjhAdWNzNCc6ICAgICAgICAgICAgICAgICAgJ2VuX1VTLlVURi04JywKICAgICAndXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VyX1BLLkNQMTI1NicsCiAgICAgJ3VyX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cl9JTi5VVEYtOCcsCiAgICAgJ3VyX3BrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cl9QSy5DUDEyNTYnLAotICAgICd1cl9way5jcDEyNTYnOiAgICAgICAgICAgICAgICAgICAgICAgICAndXJfUEsuQ1AxMjU2JywKLSAgICAndXJfcGsubWljcm9zb2Z0Y3AxMjU2JzogICAgICAgICAgICAgICAgJ3VyX1BLLkNQMTI1NicsCiAgICAgJ3V6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1el9VWi5VVEYtOCcsCiAgICAgJ3V6X3V6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1el9VWi5VVEYtOCcsCi0gICAgJ3V6X3V6Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICd1el9VWi5JU084ODU5LTEnLAotICAgICd1el91ei51dGY4QGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAndXpfVVouVVRGLTgnLAogICAgICd1el91ekBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouVVRGLTgnLAogICAgICd2ZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVfWkEuVVRGLTgnLAogICAgICd2ZV96YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVfWkEuVVRGLTgnLApAQCAtMTYyNCwzNSArMTI0MSwyMSBAQAogICAgICd2aV92bi52aXNjaWkxMTEnOiAgICAgICAgICAgICAgICAgICAgICAndmlfVk4uVklTQ0lJJywKICAgICAnd2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dhX0JFLklTTzg4NTktMScsCiAgICAgJ3dhX2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YV9CRS5JU084ODU5LTEnLAotICAgICd3YV9iZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnd2FfQkUuSVNPODg1OS0xJywKLSAgICAnd2FfYmUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3dhX0JFLklTTzg4NTktMTUnLAotICAgICd3YV9iZS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnd2FfQkUuSVNPODg1OS0xNScsCi0gICAgJ3dhX2JlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YV9CRS5JU084ODU5LTE1JywKICAgICAneGgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3hoX1pBLklTTzg4NTktMScsCiAgICAgJ3hoX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4aF9aQS5JU084ODU5LTEnLAotICAgICd4aF96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAneGhfWkEuSVNPODg1OS0xJywKICAgICAneWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3lpX1VTLkNQMTI1NScsCiAgICAgJ3lpX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5aV9VUy5DUDEyNTUnLAotICAgICd5aV91cy5jcDEyNTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAneWlfVVMuQ1AxMjU1JywKLSAgICAneWlfdXMubWljcm9zb2Z0Y3AxMjU1JzogICAgICAgICAgICAgICAgJ3lpX1VTLkNQMTI1NScsCiAgICAgJ3poJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5ldWNDTicsCiAgICAgJ3poX2NuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5nYjIzMTInLAogICAgICd6aF9jbi5iaWc1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuYmlnNScsCiAgICAgJ3poX2NuLmV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5ldWNDTicsCi0gICAgJ3poX2NuLmdiMTgwMzAnOiAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5nYjE4MDMwJywKLSAgICAnemhfY24uZ2IyMzEyJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0NOLmdiMjMxMicsCi0gICAgJ3poX2NuLmdiayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5nYmsnLAogICAgICd6aF9oayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfSEsuYmlnNWhrc2NzJywKLSAgICAnemhfaGsuYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzUnLAogICAgICd6aF9oay5iaWc1aGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAnemhfSEsuYmlnNWhrc2NzJywKLSAgICAnemhfaGsuYmlnNWhrc2NzJzogICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCiAgICAgJ3poX3R3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5iaWc1JywKLSAgICAnemhfdHcuYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmJpZzUnLAogICAgICd6aF90dy5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuZXVjVFcnLAogICAgICd6aF90dy5ldWN0dyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuZXVjVFcnLAogICAgICd6dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnenVfWkEuSVNPODg1OS0xJywKICAgICAnenVfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3p1X1pBLklTTzg4NTktMScsCi0gICAgJ3p1X3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICd6dV9aQS5JU084ODU5LTEnLAogfQogCiAjCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weSBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CmluZGV4IDlmNDM2ZjMuLjdmYjNhMzUgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAwMS0yMDEzIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDE0IGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMTgsMTIgKzE4LDEzIEBACiBMb2dnaW5nIHBhY2thZ2UgZm9yIFB5dGhvbi4gQmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbgogY29tcC5sYW5nLnB5dGhvbi4KIAotQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIAogVG8gdXNlLCBzaW1wbHkgJ2ltcG9ydCBsb2dnaW5nJyBhbmQgbG9nIGF3YXkhCiAiIiIKIAotaW1wb3J0IHN5cywgb3MsIHRpbWUsIGlvLCB0cmFjZWJhY2ssIHdhcm5pbmdzLCB3ZWFrcmVmCitpbXBvcnQgc3lzLCBvcywgdGltZSwgaW8sIHRyYWNlYmFjaywgd2FybmluZ3MsIHdlYWtyZWYsIGNvbGxlY3Rpb25zCisKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiBfX2FsbF9fID0gWydCQVNJQ19GT1JNQVQnLCAnQnVmZmVyaW5nRm9ybWF0dGVyJywgJ0NSSVRJQ0FMJywgJ0RFQlVHJywgJ0VSUk9SJywKQEAgLTQyLDYgKzQzLDcgQEAKIAogX19hdXRob3JfXyAgPSAiVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4iCiBfX3N0YXR1c19fICA9ICJwcm9kdWN0aW9uIgorIyBUaGUgZm9sbG93aW5nIG1vZHVsZSBhdHRyaWJ1dGVzIGFyZSBubyBsb25nZXIgdXBkYXRlZC4KIF9fdmVyc2lvbl9fID0gIjAuNS4xLjIiCiBfX2RhdGVfXyAgICA9ICIwNyBGZWJydWFyeSAyMDEwIgogCkBAIC01MCwzNCArNTIsNiBAQAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjCi0jIF9zcmNmaWxlIGlzIHVzZWQgd2hlbiB3YWxraW5nIHRoZSBzdGFjayB0byBjaGVjayB3aGVuIHdlJ3ZlIGdvdCB0aGUgZmlyc3QKLSMgY2FsbGVyIHN0YWNrIGZyYW1lLgotIwotaWYgaGFzYXR0cihzeXMsICdmcm96ZW4nKTogI3N1cHBvcnQgZm9yIHB5MmV4ZQotICAgIF9zcmNmaWxlID0gImxvZ2dpbmclc19faW5pdF9fJXMiICUgKG9zLnNlcCwgX19maWxlX19bLTQ6XSkKLWVsc2U6Ci0gICAgX3NyY2ZpbGUgPSBfX2ZpbGVfXwotX3NyY2ZpbGUgPSBvcy5wYXRoLm5vcm1jYXNlKF9zcmNmaWxlKQotCi0KLWlmIGhhc2F0dHIoc3lzLCAnX2dldGZyYW1lJyk6Ci0gICAgY3VycmVudGZyYW1lID0gbGFtYmRhOiBzeXMuX2dldGZyYW1lKDMpCi1lbHNlOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgIGRlZiBjdXJyZW50ZnJhbWUoKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBmcmFtZSBvYmplY3QgZm9yIHRoZSBjYWxsZXIncyBzdGFjayBmcmFtZS4iIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLQotIyBfc3JjZmlsZSBpcyBvbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzeXMuX2dldGZyYW1lKCkuCi0jIFRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFB5dGhvbiwgc2V0IF9zcmNmaWxlCi0jIHRvIE5vbmUgaWYgX2dldGZyYW1lKCkgaXMgbm90IGF2YWlsYWJsZTsgdGhpcyB2YWx1ZSB3aWxsIHByZXZlbnQKLSMgZmluZENhbGxlcigpIGZyb20gYmVpbmcgY2FsbGVkLgotI2lmIG5vdCBoYXNhdHRyKHN5cywgIl9nZXRmcmFtZSIpOgotIyAgICBfc3JjZmlsZSA9IE5vbmUKLQotIwogI19zdGFydFRpbWUgaXMgdXNlZCBhcyB0aGUgYmFzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSByZWxhdGl2ZSB0aW1lIG9mIGV2ZW50cwogIwogX3N0YXJ0VGltZSA9IHRpbWUudGltZSgpCkBAIC0xMjMsMjAgKzk3LDIyIEBACiBERUJVRyA9IDEwCiBOT1RTRVQgPSAwCiAKLV9sZXZlbE5hbWVzID0gewotICAgIENSSVRJQ0FMIDogJ0NSSVRJQ0FMJywKLSAgICBFUlJPUiA6ICdFUlJPUicsCi0gICAgV0FSTklORyA6ICdXQVJOSU5HJywKLSAgICBJTkZPIDogJ0lORk8nLAotICAgIERFQlVHIDogJ0RFQlVHJywKLSAgICBOT1RTRVQgOiAnTk9UU0VUJywKLSAgICAnQ1JJVElDQUwnIDogQ1JJVElDQUwsCi0gICAgJ0VSUk9SJyA6IEVSUk9SLAotICAgICdXQVJOJyA6IFdBUk5JTkcsCi0gICAgJ1dBUk5JTkcnIDogV0FSTklORywKLSAgICAnSU5GTycgOiBJTkZPLAotICAgICdERUJVRycgOiBERUJVRywKLSAgICAnTk9UU0VUJyA6IE5PVFNFVCwKK19sZXZlbFRvTmFtZSA9IHsKKyAgICBDUklUSUNBTDogJ0NSSVRJQ0FMJywKKyAgICBFUlJPUjogJ0VSUk9SJywKKyAgICBXQVJOSU5HOiAnV0FSTklORycsCisgICAgSU5GTzogJ0lORk8nLAorICAgIERFQlVHOiAnREVCVUcnLAorICAgIE5PVFNFVDogJ05PVFNFVCcsCit9CitfbmFtZVRvTGV2ZWwgPSB7CisgICAgJ0NSSVRJQ0FMJzogQ1JJVElDQUwsCisgICAgJ0VSUk9SJzogRVJST1IsCisgICAgJ1dBUk4nOiBXQVJOSU5HLAorICAgICdXQVJOSU5HJzogV0FSTklORywKKyAgICAnSU5GTyc6IElORk8sCisgICAgJ0RFQlVHJzogREVCVUcsCisgICAgJ05PVFNFVCc6IE5PVFNFVCwKIH0KIAogZGVmIGdldExldmVsTmFtZShsZXZlbCk6CkBAIC0xNTMsNyArMTI5LDggQEAKIAogICAgIE90aGVyd2lzZSwgdGhlIHN0cmluZyAiTGV2ZWwgJXMiICUgbGV2ZWwgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgcmV0dXJuIF9sZXZlbE5hbWVzLmdldChsZXZlbCwgKCJMZXZlbCAlcyIgJSBsZXZlbCkpCisgICAgIyBTZWUgSXNzdWUgIzIyMzg2IGZvciB0aGUgcmVhc29uIGZvciB0aGlzIGNvbnZvbHV0ZWQgZXhwcmVzc2lvbgorICAgIHJldHVybiBfbGV2ZWxUb05hbWUuZ2V0KGxldmVsLCBfbmFtZVRvTGV2ZWwuZ2V0KGxldmVsLCAoIkxldmVsICVzIiAlIGxldmVsKSkpCiAKIGRlZiBhZGRMZXZlbE5hbWUobGV2ZWwsIGxldmVsTmFtZSk6CiAgICAgIiIiCkBAIC0xNjMsMTggKzE0MCw1MiBAQAogICAgICIiIgogICAgIF9hY3F1aXJlTG9jaygpCiAgICAgdHJ5OiAgICAjdW5saWtlbHkgdG8gY2F1c2UgYW4gZXhjZXB0aW9uLCBidXQgeW91IG5ldmVyIGtub3cuLi4KLSAgICAgICAgX2xldmVsTmFtZXNbbGV2ZWxdID0gbGV2ZWxOYW1lCi0gICAgICAgIF9sZXZlbE5hbWVzW2xldmVsTmFtZV0gPSBsZXZlbAorICAgICAgICBfbGV2ZWxUb05hbWVbbGV2ZWxdID0gbGV2ZWxOYW1lCisgICAgICAgIF9uYW1lVG9MZXZlbFtsZXZlbE5hbWVdID0gbGV2ZWwKICAgICBmaW5hbGx5OgogICAgICAgICBfcmVsZWFzZUxvY2soKQogCitpZiBoYXNhdHRyKHN5cywgJ19nZXRmcmFtZScpOgorICAgIGN1cnJlbnRmcmFtZSA9IGxhbWJkYTogc3lzLl9nZXRmcmFtZSgzKQorZWxzZTogI3ByYWdtYTogbm8gY292ZXIKKyAgICBkZWYgY3VycmVudGZyYW1lKCk6CisgICAgICAgICIiIlJldHVybiB0aGUgZnJhbWUgb2JqZWN0IGZvciB0aGUgY2FsbGVyJ3Mgc3RhY2sgZnJhbWUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjaworCisjCisjIF9zcmNmaWxlIGlzIHVzZWQgd2hlbiB3YWxraW5nIHRoZSBzdGFjayB0byBjaGVjayB3aGVuIHdlJ3ZlIGdvdCB0aGUgZmlyc3QKKyMgY2FsbGVyIHN0YWNrIGZyYW1lLCBieSBza2lwcGluZyBmcmFtZXMgd2hvc2UgZmlsZW5hbWUgaXMgdGhhdCBvZiB0aGlzCisjIG1vZHVsZSdzIHNvdXJjZS4gSXQgdGhlcmVmb3JlIHNob3VsZCBjb250YWluIHRoZSBmaWxlbmFtZSBvZiB0aGlzIG1vZHVsZSdzCisjIHNvdXJjZSBmaWxlLgorIworIyBPcmRpbmFyaWx5IHdlIHdvdWxkIHVzZSBfX2ZpbGVfXyBmb3IgdGhpcywgYnV0IGZyb3plbiBtb2R1bGVzIGRvbid0IGFsd2F5cworIyBoYXZlIF9fZmlsZV9fIHNldCwgZm9yIHNvbWUgcmVhc29uIChzZWUgSXNzdWUgIzIxNzM2KS4gVGh1cywgd2UgZ2V0IHRoZQorIyBmaWxlbmFtZSBmcm9tIGEgaGFuZHkgY29kZSBvYmplY3QgZnJvbSBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuCisjIChUaGVyZSdzIG5vIHBhcnRpY3VsYXIgcmVhc29uIGZvciBwaWNraW5nIGFkZExldmVsTmFtZS4pCisjCisKK19zcmNmaWxlID0gb3MucGF0aC5ub3JtY2FzZShhZGRMZXZlbE5hbWUuX19jb2RlX18uY29fZmlsZW5hbWUpCisKKyMgX3NyY2ZpbGUgaXMgb25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggc3lzLl9nZXRmcmFtZSgpLgorIyBUbyBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHNldCBfc3JjZmlsZQorIyB0byBOb25lIGlmIF9nZXRmcmFtZSgpIGlzIG5vdCBhdmFpbGFibGU7IHRoaXMgdmFsdWUgd2lsbCBwcmV2ZW50CisjIGZpbmRDYWxsZXIoKSBmcm9tIGJlaW5nIGNhbGxlZC4gWW91IGNhbiBhbHNvIGRvIHRoaXMgaWYgeW91IHdhbnQgdG8gYXZvaWQKKyMgdGhlIG92ZXJoZWFkIG9mIGZldGNoaW5nIGNhbGxlciBpbmZvcm1hdGlvbiwgZXZlbiB3aGVuIF9nZXRmcmFtZSgpIGlzCisjIGF2YWlsYWJsZS4KKyNpZiBub3QgaGFzYXR0cihzeXMsICdfZ2V0ZnJhbWUnKToKKyMgICAgX3NyY2ZpbGUgPSBOb25lCisKKwogZGVmIF9jaGVja0xldmVsKGxldmVsKToKICAgICBpZiBpc2luc3RhbmNlKGxldmVsLCBpbnQpOgogICAgICAgICBydiA9IGxldmVsCiAgICAgZWxpZiBzdHIobGV2ZWwpID09IGxldmVsOgotICAgICAgICBpZiBsZXZlbCBub3QgaW4gX2xldmVsTmFtZXM6CisgICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbmFtZVRvTGV2ZWw6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGxldmVsOiAlciIgJSBsZXZlbCkKLSAgICAgICAgcnYgPSBfbGV2ZWxOYW1lc1tsZXZlbF0KKyAgICAgICAgcnYgPSBfbmFtZVRvTGV2ZWxbbGV2ZWxdCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJMZXZlbCBub3QgYW4gaW50ZWdlciBvciBhIHZhbGlkIHN0cmluZzogJXIiICUgbGV2ZWwpCiAgICAgcmV0dXJuIHJ2CkBAIC0yNTAsNyArMjYxLDEzIEBACiAgICAgICAgICMgJ1ZhbHVlIGlzICVkJyBpbnN0ZWFkIG9mICdWYWx1ZSBpcyAwJy4KICAgICAgICAgIyBGb3IgdGhlIHVzZSBjYXNlIG9mIHBhc3NpbmcgYSBkaWN0aW9uYXJ5LCB0aGlzIHNob3VsZCBub3QgYmUgYQogICAgICAgICAjIHByb2JsZW0uCi0gICAgICAgIGlmIGFyZ3MgYW5kIGxlbihhcmdzKSA9PSAxIGFuZCBpc2luc3RhbmNlKGFyZ3NbMF0sIGRpY3QpIGFuZCBhcmdzWzBdOgorICAgICAgICAjIElzc3VlICMyMTE3MjogYSByZXF1ZXN0IHdhcyBtYWRlIHRvIHJlbGF4IHRoZSBpc2luc3RhbmNlIGNoZWNrCisgICAgICAgICMgdG8gaGFzYXR0cihhcmdzWzBdLCAnX19nZXRpdGVtX18nKS4gSG93ZXZlciwgdGhlIGRvY3Mgb24gc3RyaW5nCisgICAgICAgICMgZm9ybWF0dGluZyBzdGlsbCBzZWVtIHRvIHN1Z2dlc3QgYSBtYXBwaW5nIG9iamVjdCBpcyByZXF1aXJlZC4KKyAgICAgICAgIyBUaHVzLCB3aGlsZSBub3QgcmVtb3ZpbmcgdGhlIGlzaW5zdGFuY2UgY2hlY2ssIGl0IGRvZXMgbm93IGxvb2sKKyAgICAgICAgIyBmb3IgY29sbGVjdGlvbnMuTWFwcGluZyByYXRoZXIgdGhhbiwgYXMgYmVmb3JlLCBkaWN0LgorICAgICAgICBpZiAoYXJncyBhbmQgbGVuKGFyZ3MpID09IDEgYW5kIGlzaW5zdGFuY2UoYXJnc1swXSwgY29sbGVjdGlvbnMuTWFwcGluZykKKyAgICAgICAgICAgIGFuZCBhcmdzWzBdKToKICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdCiAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICAgc2VsZi5sZXZlbG5hbWUgPSBnZXRMZXZlbE5hbWUobGV2ZWwpCkBAIC03MDgsMTYgKzcyNSwxNyBAQAogICAgIFJlbW92ZSBhIGhhbmRsZXIgcmVmZXJlbmNlIGZyb20gdGhlIGludGVybmFsIGNsZWFudXAgbGlzdC4KICAgICAiIiIKICAgICAjIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBkdXJpbmcgbW9kdWxlIHRlYXJkb3duLCB3aGVuIGdsb2JhbHMgYXJlCi0gICAgIyBzZXQgdG8gTm9uZS4gSWYgX2FjcXVpcmVMb2NrIGlzIE5vbmUsIGFzc3VtZSB0aGlzIGlzIHRoZSBjYXNlIGFuZCBkbwotICAgICMgbm90aGluZy4KLSAgICBpZiAoX2FjcXVpcmVMb2NrIGlzIG5vdCBOb25lIGFuZCBfaGFuZGxlckxpc3QgaXMgbm90IE5vbmUgYW5kCi0gICAgICAgIF9yZWxlYXNlTG9jayBpcyBub3QgTm9uZSk6Ci0gICAgICAgIF9hY3F1aXJlTG9jaygpCisgICAgIyBzZXQgdG8gTm9uZS4gSXQgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuIFNvIHdlIG5lZWQgdG8KKyAgICAjIHByZS1lbXB0aXZlbHkgZ3JhYiB0aGUgbmVjZXNzYXJ5IGdsb2JhbHMgYW5kIGNoZWNrIGlmIHRoZXkncmUgTm9uZSwKKyAgICAjIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBmYWlsdXJlcyBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgICAgYWNxdWlyZSwgcmVsZWFzZSwgaGFuZGxlcnMgPSBfYWNxdWlyZUxvY2ssIF9yZWxlYXNlTG9jaywgX2hhbmRsZXJMaXN0CisgICAgaWYgYWNxdWlyZSBhbmQgcmVsZWFzZSBhbmQgaGFuZGxlcnM6CisgICAgICAgIGFjcXVpcmUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB3ciBpbiBfaGFuZGxlckxpc3Q6Ci0gICAgICAgICAgICAgICAgX2hhbmRsZXJMaXN0LnJlbW92ZSh3cikKKyAgICAgICAgICAgIGlmIHdyIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSh3cikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIF9yZWxlYXNlTG9jaygpCisgICAgICAgICAgICByZWxlYXNlKCkKIAogZGVmIF9hZGRIYW5kbGVyUmVmKGhhbmRsZXIpOgogICAgICIiIgpAQCAtODgyLDE2ICs5MDAsMzcgQEAKICAgICAgICAgVGhlIHJlY29yZCB3aGljaCB3YXMgYmVpbmcgcHJvY2Vzc2VkIGlzIHBhc3NlZCBpbiB0byB0aGlzIG1ldGhvZC4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9ucyBhbmQgc3lzLnN0ZGVycjogICMgc2VlIGlzc3VlIDEzODA3Ci0gICAgICAgICAgICBlaSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICB0LCB2LCB0YiA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbihlaVswXSwgZWlbMV0sIGVpWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgc3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdMb2dnZWQgZnJvbSBmaWxlICVzLCBsaW5lICVzXG4nICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmZpbGVuYW1lLCByZWNvcmQubGluZW5vKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBMb2dnaW5nIGVycm9yIC0tLVxuJykKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKHQsIHYsIHRiLCBOb25lLCBzeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0NhbGwgc3RhY2s6XG4nKQorICAgICAgICAgICAgICAgICMgV2FsayB0aGUgc3RhY2sgZnJhbWUgdXAgdW50aWwgd2UncmUgb3V0IG9mIGxvZ2dpbmcsCisgICAgICAgICAgICAgICAgIyBzbyBhcyB0byBwcmludCB0aGUgY2FsbGluZyBjb250ZXh0LgorICAgICAgICAgICAgICAgIGZyYW1lID0gdGIudGJfZnJhbWUKKyAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWUgYW5kIG9zLnBhdGguZGlybmFtZShmcmFtZS5mX2NvZGUuY29fZmlsZW5hbWUpID09CisgICAgICAgICAgICAgICAgICAgICAgIF9fcGF0aF9fWzBdKToKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgICAgICAgICBpZiBmcmFtZToKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X3N0YWNrKGZyYW1lLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBjb3VsZG4ndCBmaW5kIHRoZSByaWdodCBzdGFjayBmcmFtZSwgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0xvZ2dlZCBmcm9tIGZpbGUgJXMsIGxpbmUgJXNcbicgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmZpbGVuYW1lLCByZWNvcmQubGluZW5vKSkKKyAgICAgICAgICAgICAgICAjIElzc3VlIDE4NjcxOiBvdXRwdXQgbG9nZ2luZyBtZXNzYWdlIGFuZCBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ01lc3NhZ2U6ICVyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyZ3VtZW50czogJXNcbicgJSAocmVjb3JkLm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuYXJncykpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnVW5hYmxlIHRvIHByaW50IHRoZSBtZXNzYWdlIGFuZCBhcmd1bWVudHMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtIHBvc3NpYmxlIGZvcm1hdHRpbmcgZXJyb3IuXG5Vc2UgdGhlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdHJhY2ViYWNrIGFib3ZlIHRvIGhlbHAgZmluZCB0aGUgZXJyb3IuXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBwYXNzICAgICMgc2VlIGlzc3VlIDU5NzEKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZGVsIGVpCisgICAgICAgICAgICAgICAgZGVsIHQsIHYsIHRiCiAKIGNsYXNzIFN0cmVhbUhhbmRsZXIoSGFuZGxlcik6CiAgICAgIiIiCkBAIC05NDEsOSArOTgwLDcgQEAKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShtc2cpCiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoc2VsZi50ZXJtaW5hdG9yKQogICAgICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEZpbGVIYW5kbGVyKFN0cmVhbUhhbmRsZXIpOgpAQCAtMTgzNiw3ICsxODczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaC5hY3F1aXJlKCkKICAgICAgICAgICAgICAgICAgICAgaC5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzIHdoaWNoIG1pZ2h0IGJlIGNhdXNlZAogICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaGFuZGxlcnMgaGF2ZSBiZWVuIGNsb3NlZCBidXQKICAgICAgICAgICAgICAgICAgICAgIyByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIHN0aWxsIGFyb3VuZCBhdApAQCAtMTg0NCw3ICsxODgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIGgucmVsZWFzZSgpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0OiAjIGlnbm9yZSBldmVyeXRoaW5nLCBhcyB3ZSdyZSBzaHV0dGluZyBkb3duCiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICNlbHNlLCBzd2FsbG93CmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggMTg4MDYxNC4uODk1ZmIyNiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAxMyBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxNCBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTE5LDEzICsxOSwxOSBAQAogaXMgYmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbiBjb21wLmxhbmcucHl0aG9uLCBhbmQgaW5mbHVlbmNlZAogYnkgQXBhY2hlJ3MgbG9nNGogc3lzdGVtLgogCi1Db3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoQykgMjAwMS0yMDE0IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogCiBUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEKICIiIgogCi1pbXBvcnQgc3lzLCBsb2dnaW5nLCBsb2dnaW5nLmhhbmRsZXJzLCBzb2NrZXQsIHN0cnVjdCwgdHJhY2ViYWNrLCByZQoraW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbG9nZ2luZy5oYW5kbGVycworaW1wb3J0IHJlCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZCBhcyB0aHJlYWQKQEAgLTM4LDEwICs0NCw3IEBACiAKIERFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCA9IDkwMzAKIAotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgUkVTRVRfRVJST1IgPSAxMDA1NCAgICNXU0FFQ09OTlJFU0VUCi1lbHNlOgotICAgIFJFU0VUX0VSUk9SID0gMTA0ICAgICAjRUNPTk5SRVNFVAorUkVTRVRfRVJST1IgPSBlcnJuby5FQ09OTlJFU0VUCiAKICMKICMgICBUaGUgZm9sbG93aW5nIGNvZGUgaW1wbGVtZW50cyBhIHNvY2tldCBsaXN0ZW5lciBmb3Igb24tdGhlLWZseQpAQCAtNjEsMTEgKzY0LDE0IEBACiAgICAgIiIiCiAgICAgaW1wb3J0IGNvbmZpZ3BhcnNlcgogCi0gICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKGRlZmF1bHRzKQotICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgotICAgICAgICBjcC5yZWFkX2ZpbGUoZm5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShmbmFtZSwgY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcik6CisgICAgICAgIGNwID0gZm5hbWUKICAgICBlbHNlOgotICAgICAgICBjcC5yZWFkKGZuYW1lKQorICAgICAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCisgICAgICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgorICAgICAgICAgICAgY3AucmVhZF9maWxlKGZuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3AucmVhZChmbmFtZSkKIAogICAgIGZvcm1hdHRlcnMgPSBfY3JlYXRlX2Zvcm1hdHRlcnMoY3ApCiAKQEAgLTE0MSw3ICsxNDcsNyBAQAogICAgICAgICBoID0ga2xhc3MoKmFyZ3MpCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgaC5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgICAgIGguc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgIGlmIGxlbihmbXQpOgogICAgICAgICAgICAgaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyc1tmbXRdKQogICAgICAgICBpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIpOgpAQCAtMTg4LDcgKzE5NCw3IEBACiAgICAgbG9nID0gcm9vdAogICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgbG9nLnNldExldmVsKGxldmVsKQogICAgIGZvciBoIGluIHJvb3QuaGFuZGxlcnNbOl06CiAgICAgICAgIHJvb3QucmVtb3ZlSGFuZGxlcihoKQogICAgIGhsaXN0ID0gc2VjdGlvblsiaGFuZGxlcnMiXQpAQCAtMjM0LDcgKzI0MCw3IEBACiAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmUocW4pCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsKQogICAgICAgICBmb3IgaCBpbiBsb2dnZXIuaGFuZGxlcnNbOl06CiAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQogICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gcHJvcGFnYXRlCkBAIC0yNzEsNiArMjc3LDMwIEBACiAgICAgcmV0dXJuIFRydWUKIAogCitjbGFzcyBDb252ZXJ0aW5nTWl4aW4ob2JqZWN0KToKKyAgICAiIiJGb3IgQ29udmVydGluZ1hYWCdzLCB0aGlzIG1peGluIGNsYXNzIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbnMiIiIKKworICAgIGRlZiBjb252ZXJ0X3dpdGhfa2V5KHNlbGYsIGtleSwgdmFsdWUsIHJlcGxhY2U9VHJ1ZSk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCisgICAgICAgICNJZiB0aGUgY29udmVydGVkIHZhbHVlIGlzIGRpZmZlcmVudCwgc2F2ZSBmb3IgbmV4dCB0aW1lCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGNvbnZlcnQoc2VsZiwgdmFsdWUpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICByZXR1cm4gcmVzdWx0CisKKwogIyBUaGUgQ29udmVydGluZ1hYWCBjbGFzc2VzIGFyZSB3cmFwcGVycyBhcm91bmQgc3RhbmRhcmQgUHl0aG9uIGNvbnRhaW5lcnMsCiAjIGFuZCB0aGV5IHNlcnZlIHRvIGNvbnZlcnQgYW55IHN1aXRhYmxlIHZhbHVlcyBpbiB0aGUgY29udGFpbmVyLiBUaGUKICMgY29udmVyc2lvbiBjb252ZXJ0cyBiYXNlIGRpY3RzLCBsaXN0cyBhbmQgdHVwbGVzIHRvIHRoZWlyIHdyYXBwZWQKQEAgLTI4MCw3NyArMzEwLDM3IEBACiAjIEVhY2ggd3JhcHBlciBzaG91bGQgaGF2ZSBhIGNvbmZpZ3VyYXRvciBhdHRyaWJ1dGUgaG9sZGluZyB0aGUgYWN0dWFsCiAjIGNvbmZpZ3VyYXRvciB0byB1c2UgZm9yIGNvbnZlcnNpb24uCiAKLWNsYXNzIENvbnZlcnRpbmdEaWN0KGRpY3QpOgorY2xhc3MgQ29udmVydGluZ0RpY3QoZGljdCwgQ29udmVydGluZ01peGluKToKICAgICAiIiJBIGNvbnZlcnRpbmcgZGljdGlvbmFyeSB3cmFwcGVyLiIiIgogCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgIHZhbHVlID0gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCi0gICAgICAgICNJZiB0aGUgY29udmVydGVkIHZhbHVlIGlzIGRpZmZlcmVudCwgc2F2ZSBmb3IgbmV4dCB0aW1lCi0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSByZXN1bHQKLSAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCi0gICAgICAgICAgICAgICAgcmVzdWx0LmtleSA9IGtleQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfd2l0aF9rZXkoa2V5LCB2YWx1ZSkKIAogICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgogICAgICAgICB2YWx1ZSA9IGRpY3QuZ2V0KHNlbGYsIGtleSwgZGVmYXVsdCkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlKQogCiAgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIHZhbHVlID0gZGljdC5wb3Aoc2VsZiwga2V5LCBkZWZhdWx0KQotICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQotICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlLCByZXBsYWNlPUZhbHNlKQogCi1jbGFzcyBDb252ZXJ0aW5nTGlzdChsaXN0KToKK2NsYXNzIENvbnZlcnRpbmdMaXN0KGxpc3QsIENvbnZlcnRpbmdNaXhpbik6CiAgICAgIiIiQSBjb252ZXJ0aW5nIGxpc3Qgd3JhcHBlci4iIiIKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgdmFsdWUgPSBsaXN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlKQogCiAgICAgZGVmIHBvcChzZWxmLCBpZHg9LTEpOgogICAgICAgICB2YWx1ZSA9IGxpc3QucG9wKHNlbGYsIGlkeCkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCi0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydCh2YWx1ZSkKIAotY2xhc3MgQ29udmVydGluZ1R1cGxlKHR1cGxlKToKK2NsYXNzIENvbnZlcnRpbmdUdXBsZSh0dXBsZSwgQ29udmVydGluZ01peGluKToKICAgICAiIiJBIGNvbnZlcnRpbmcgdHVwbGUgd3JhcHBlci4iIiIKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgdmFsdWUgPSB0dXBsZS5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCi0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKLSAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgotICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAjIENhbid0IHJlcGxhY2UgYSB0dXBsZSBlbnRyeS4KKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlLCByZXBsYWNlPUZhbHNlKQogCiBjbGFzcyBCYXNlQ29uZmlndXJhdG9yKG9iamVjdCk6CiAgICAgIiIiCkBAIC03MjksNiArNzE5LDcgQEAKICAgICAgICAgICAgICAgICAnYWRkcmVzcycgaW4gY29uZmlnOgogICAgICAgICAgICAgICAgIGNvbmZpZ1snYWRkcmVzcyddID0gc2VsZi5hc190dXBsZShjb25maWdbJ2FkZHJlc3MnXSkKICAgICAgICAgICAgIGZhY3RvcnkgPSBrbGFzcworICAgICAgICBwcm9wcyA9IGNvbmZpZy5wb3AoJy4nLCBOb25lKQogICAgICAgICBrd2FyZ3MgPSBkaWN0KFsoaywgY29uZmlnW2tdKSBmb3IgayBpbiBjb25maWcgaWYgdmFsaWRfaWRlbnQoayldKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQpAQCAtNzQ3LDYgKzczOCw5IEBACiAgICAgICAgICAgICByZXN1bHQuc2V0TGV2ZWwobG9nZ2luZy5fY2hlY2tMZXZlbChsZXZlbCkpCiAgICAgICAgIGlmIGZpbHRlcnM6CiAgICAgICAgICAgICBzZWxmLmFkZF9maWx0ZXJzKHJlc3VsdCwgZmlsdGVycykKKyAgICAgICAgaWYgcHJvcHM6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwgbmFtZSwgdmFsdWUpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBhZGRfaGFuZGxlcnMoc2VsZiwgbG9nZ2VyLCBoYW5kbGVycyk6CkBAIC03OTUsNyArNzg5LDcgQEAKICAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQogCiAKLWRlZiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpOgorZGVmIGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpOgogICAgICIiIgogICAgIFN0YXJ0IHVwIGEgc29ja2V0IHNlcnZlciBvbiB0aGUgc3BlY2lmaWVkIHBvcnQsIGFuZCBsaXN0ZW4gZm9yIG5ldwogICAgIGNvbmZpZ3VyYXRpb25zLgpAQCAtODA0LDYgKzc5OCwxNSBAQAogICAgIFJldHVybnMgYSBUaHJlYWQgb2JqZWN0IG9uIHdoaWNoIHlvdSBjYW4gY2FsbCBzdGFydCgpIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIsCiAgICAgYW5kIHdoaWNoIHlvdSBjYW4gam9pbigpIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwgY2FsbAogICAgIHN0b3BMaXN0ZW5pbmcoKS4KKworICAgIFVzZSB0aGUgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byB2ZXJpZnkgYW55IGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgd2lyZQorICAgIGZyb20gYSBjbGllbnQuIElmIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVjZWl2ZXMgYQorICAgIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBieXRlcyBvZiBjb25maWd1cmF0aW9uIGRhdGEgcmVjZWl2ZWQgYWNyb3NzIHRoZQorICAgIG5ldHdvcmsgLSBhbmQgaXQgc2hvdWxkIHJldHVybiBlaXRoZXIgYGBOb25lYGAsIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgcGFzc2VkIGluIGJ5dGVzIGNvdWxkIG5vdCBiZSB2ZXJpZmllZCBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgb3IgYQorICAgIGJ5dGUgc3RyaW5nIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIG1hY2hpbmVyeSBhcworICAgIG5vcm1hbC4gTm90ZSB0aGF0IHlvdSBjYW4gcmV0dXJuIHRyYW5zZm9ybWVkIGJ5dGVzLCBlLmcuIGJ5IGRlY3J5cHRpbmcKKyAgICB0aGUgYnl0ZXMgcGFzc2VkIGluLgogICAgICIiIgogICAgIGlmIG5vdCB0aHJlYWQ6ICNwcmFnbWE6IG5vIGNvdmVyCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrIikKQEAgLTgzMSwzMSArODM0LDI4IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbikKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rICsgY29ubi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLmRlY29kZSgidXRmLTgiKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9anNvbi5sb2FkcyhjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGQsIGRpY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci52ZXJpZnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuc2VydmVyLnZlcmlmeShjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgaWYgY2h1bmsgaXMgbm90IE5vbmU6ICAgIyB2ZXJpZmllZCwgY2FuIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPWpzb24ubG9hZHMoY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIucmVhZHk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS5zZXQoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUuYXJncywgdHVwbGUpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IFJFU0VUX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGVycmNvZGUgPSBlLmFyZ3NbMF0KLSAgICAgICAgICAgICAgICAgICAgaWYgZXJyY29kZSAhPSBSRVNFVF9FUlJPUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBjbGFzcyBDb25maWdTb2NrZXRSZWNlaXZlcihUaHJlYWRpbmdUQ1BTZXJ2ZXIpOgogICAgICAgICAiIiIKQEAgLTg2NSwxMyArODY1LDE0IEBACiAgICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSAxCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JULAotICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Ob25lLCByZWFkeT1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9Tm9uZSwgcmVhZHk9Tm9uZSwgdmVyaWZ5PU5vbmUpOgogICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIChob3N0LCBwb3J0KSwgaGFuZGxlcikKICAgICAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgICAgIHNlbGYuYWJvcnQgPSAwCiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAgICAgICAgICAgICBzZWxmLnRpbWVvdXQgPSAxCiAgICAgICAgICAgICBzZWxmLnJlYWR5ID0gcmVhZHkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CiAKICAgICAgICAgZGVmIHNlcnZlX3VudGlsX3N0b3BwZWQoc2VsZik6CiAgICAgICAgICAgICBpbXBvcnQgc2VsZWN0CkBAIC04ODksMTYgKzg5MCwxOCBAQAogCiAgICAgY2xhc3MgU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgogCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByY3ZyLCBoZGxyLCBwb3J0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJjdnIsIGhkbHIsIHBvcnQsIHZlcmlmeSk6CiAgICAgICAgICAgICBzdXBlcihTZXJ2ZXIsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICAgICAgIHNlbGYucmN2ciA9IHJjdnIKICAgICAgICAgICAgIHNlbGYuaGRsciA9IGhkbHIKICAgICAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CiAgICAgICAgICAgICBzZWxmLnJlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKIAogICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAgICAgc2VydmVyID0gc2VsZi5yY3ZyKHBvcnQ9c2VsZi5wb3J0LCBoYW5kbGVyPXNlbGYuaGRsciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeT1zZWxmLnJlYWR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5PXNlbGYucmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5PXNlbGYudmVyaWZ5KQogICAgICAgICAgICAgaWYgc2VsZi5wb3J0ID09IDA6CiAgICAgICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VydmVyLnNlcnZlcl9hZGRyZXNzWzFdCiAgICAgICAgICAgICBzZWxmLnJlYWR5LnNldCgpCkBAIC05MDgsNyArOTExLDcgQEAKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKICAgICAgICAgICAgIHNlcnZlci5zZXJ2ZV91bnRpbF9zdG9wcGVkKCkKIAotICAgIHJldHVybiBTZXJ2ZXIoQ29uZmlnU29ja2V0UmVjZWl2ZXIsIENvbmZpZ1N0cmVhbUhhbmRsZXIsIHBvcnQpCisgICAgcmV0dXJuIFNlcnZlcihDb25maWdTb2NrZXRSZWNlaXZlciwgQ29uZmlnU3RyZWFtSGFuZGxlciwgcG9ydCwgdmVyaWZ5KQogCiBkZWYgc3RvcExpc3RlbmluZygpOgogICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQppbmRleCBkZGVjN2RkLi4wZTU4ZGJlIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQorKysgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQpAQCAtMjMsOCArMjMsNyBAQAogVG8gdXNlLCBzaW1wbHkgJ2ltcG9ydCBsb2dnaW5nLmhhbmRsZXJzJyBhbmQgbG9nIGF3YXkhCiAiIiIKIAotaW1wb3J0IGVycm5vLCBsb2dnaW5nLCBzb2NrZXQsIG9zLCBwaWNrbGUsIHN0cnVjdCwgdGltZSwgcmUKLWZyb20gY29kZWNzIGltcG9ydCBCT01fVVRGOAoraW1wb3J0IGxvZ2dpbmcsIHNvY2tldCwgb3MsIHBpY2tsZSwgc3RydWN0LCB0aW1lLCByZQogZnJvbSBzdGF0IGltcG9ydCBTVF9ERVYsIFNUX0lOTywgU1RfTVRJTUUKIGltcG9ydCBxdWV1ZQogdHJ5OgpAQCAtNzIsOSArNzEsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRSb2xsb3ZlcihyZWNvcmQpOgogICAgICAgICAgICAgICAgIHNlbGYuZG9Sb2xsb3ZlcigpCiAgICAgICAgICAgICBsb2dnaW5nLkZpbGVIYW5kbGVyLmVtaXQoc2VsZiwgcmVjb3JkKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiAgICAgZGVmIHJvdGF0aW9uX2ZpbGVuYW1lKHNlbGYsIGRlZmF1bHRfbmFtZSk6CkBAIC0yMDEsMTEgKzE5OCwxMiBAQAogICAgIElmIGJhY2t1cENvdW50IGlzID4gMCwgd2hlbiByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwQ291bnQKICAgICBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZC4KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHdoZW49J2gnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCBlbmNvZGluZz1Ob25lLCBkZWxheT1GYWxzZSwgdXRjPUZhbHNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHdoZW49J2gnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCBlbmNvZGluZz1Ob25lLCBkZWxheT1GYWxzZSwgdXRjPUZhbHNlLCBhdFRpbWU9Tm9uZSk6CiAgICAgICAgIEJhc2VSb3RhdGluZ0hhbmRsZXIuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsICdhJywgZW5jb2RpbmcsIGRlbGF5KQogICAgICAgICBzZWxmLndoZW4gPSB3aGVuLnVwcGVyKCkKICAgICAgICAgc2VsZi5iYWNrdXBDb3VudCA9IGJhY2t1cENvdW50CiAgICAgICAgIHNlbGYudXRjID0gdXRjCisgICAgICAgIHNlbGYuYXRUaW1lID0gYXRUaW1lCiAgICAgICAgICMgQ2FsY3VsYXRlIHRoZSByZWFsIHJvbGxvdmVyIGludGVydmFsLCB3aGljaCBpcyBqdXN0IHRoZSBudW1iZXIgb2YKICAgICAgICAgIyBzZWNvbmRzIGJldHdlZW4gcm9sbG92ZXJzLiAgQWxzbyBzZXQgdGhlIGZpbGVuYW1lIHN1ZmZpeCB1c2VkIHdoZW4KICAgICAgICAgIyBhIHJvbGxvdmVyIG9jY3Vycy4gIEN1cnJlbnQgJ3doZW4nIGV2ZW50cyBzdXBwb3J0ZWQ6CkBAIC0yNzUsOSArMjczLDIyIEBACiAgICAgICAgICAgICBjdXJyZW50SG91ciA9IHRbM10KICAgICAgICAgICAgIGN1cnJlbnRNaW51dGUgPSB0WzRdCiAgICAgICAgICAgICBjdXJyZW50U2Vjb25kID0gdFs1XQotICAgICAgICAgICAgIyByIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsZWZ0IGJldHdlZW4gbm93IGFuZCBtaWRuaWdodAotICAgICAgICAgICAgciA9IF9NSUROSUdIVCAtICgoY3VycmVudEhvdXIgKiA2MCArIGN1cnJlbnRNaW51dGUpICogNjAgKwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vjb25kKQorICAgICAgICAgICAgY3VycmVudERheSA9IHRbNl0KKyAgICAgICAgICAgICMgciBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgbGVmdCBiZXR3ZWVuIG5vdyBhbmQgdGhlIG5leHQgcm90YXRpb24KKyAgICAgICAgICAgIGlmIHNlbGYuYXRUaW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcm90YXRlX3RzID0gX01JRE5JR0hUCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJvdGF0ZV90cyA9ICgoc2VsZi5hdFRpbWUuaG91ciAqIDYwICsgc2VsZi5hdFRpbWUubWludXRlKSo2MCArCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXRUaW1lLnNlY29uZCkKKworICAgICAgICAgICAgciA9IHJvdGF0ZV90cyAtICgoY3VycmVudEhvdXIgKiA2MCArIGN1cnJlbnRNaW51dGUpICogNjAgKworICAgICAgICAgICAgICAgIGN1cnJlbnRTZWNvbmQpCisgICAgICAgICAgICBpZiByIDwgMDoKKyAgICAgICAgICAgICAgICAjIFJvdGF0ZSB0aW1lIGlzIGJlZm9yZSB0aGUgY3VycmVudCB0aW1lIChmb3IgZXhhbXBsZSB3aGVuCisgICAgICAgICAgICAgICAgIyBzZWxmLnJvdGF0ZUF0IGlzIDEzOjQ1IGFuZCBpdCBub3cgMTQ6MTUpLCByb3RhdGlvbiBpcworICAgICAgICAgICAgICAgICMgdG9tb3Jyb3cuCisgICAgICAgICAgICAgICAgciArPSBfTUlETklHSFQKKyAgICAgICAgICAgICAgICBjdXJyZW50RGF5ID0gKGN1cnJlbnREYXkgKyAxKSAlIDcKICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnRUaW1lICsgcgogICAgICAgICAgICAgIyBJZiB3ZSBhcmUgcm9sbGluZyBvdmVyIG9uIGEgY2VydGFpbiBkYXksIGFkZCBpbiB0aGUgbnVtYmVyIG9mIGRheXMgdW50aWwKICAgICAgICAgICAgICMgdGhlIG5leHQgcm9sbG92ZXIsIGJ1dCBvZmZzZXQgYnkgMSBzaW5jZSB3ZSBqdXN0IGNhbGN1bGF0ZWQgdGhlIHRpbWUKQEAgLTI5NSw3ICszMDYsNyBAQAogICAgICAgICAgICAgIyBUaGlzIGlzIGJlY2F1c2UgdGhlIGFib3ZlIHRpbWUgY2FsY3VsYXRpb24gdGFrZXMgdXMgdG8gbWlkbmlnaHQgb24gdGhpcwogICAgICAgICAgICAgIyBkYXksIGkuZS4gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGRheS4KICAgICAgICAgICAgIGlmIHNlbGYud2hlbi5zdGFydHN3aXRoKCdXJyk6Ci0gICAgICAgICAgICAgICAgZGF5ID0gdFs2XSAjIDAgaXMgTW9uZGF5CisgICAgICAgICAgICAgICAgZGF5ID0gY3VycmVudERheSAjIDAgaXMgTW9uZGF5CiAgICAgICAgICAgICAgICAgaWYgZGF5ICE9IHNlbGYuZGF5T2ZXZWVrOgogICAgICAgICAgICAgICAgICAgICBpZiBkYXkgPCBzZWxmLmRheU9mV2VlazoKICAgICAgICAgICAgICAgICAgICAgICAgIGRheXNUb1dhaXQgPSBzZWxmLmRheU9mV2VlayAtIGRheQpAQCAtNDQ0LDE3ICs0NTUsMTUgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBzdGF0IHRoZSBmaWxlIGJ5IHBhdGgsIGNoZWNraW5nIGZvciBleGlzdGVuY2UKICAgICAgICAgICAgIHNyZXMgPSBvcy5zdGF0KHNlbGYuYmFzZUZpbGVuYW1lKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIHNyZXMgPSBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgIHNyZXMgPSBOb25lCiAgICAgICAgICMgY29tcGFyZSBmaWxlIHN5c3RlbSBzdGF0IHdpdGggdGhhdCBvZiBvdXIgc3RyZWFtIGZpbGUgaGFuZGxlCiAgICAgICAgIGlmIG5vdCBzcmVzIG9yIHNyZXNbU1RfREVWXSAhPSBzZWxmLmRldiBvciBzcmVzW1NUX0lOT10gIT0gc2VsZi5pbm86CiAgICAgICAgICAgICBpZiBzZWxmLnN0cmVhbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAjIHdlIGhhdmUgYW4gb3BlbiBmaWxlIGhhbmRsZSwgY2xlYW4gaXQgdXAKICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCiAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0uY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gTm9uZSAgIyBTZWUgSXNzdWUgIzIxNzQyOiBfb3BlbiAoKSBtaWdodCBmYWlsLgogICAgICAgICAgICAgICAgICMgb3BlbiBhIG5ldyBmaWxlIGhhbmRsZSBhbmQgZ2V0IG5ldyBzdGF0IGluZm8gZnJvbSB0aGF0IGZkCiAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBzZWxmLl9vcGVuKCkKICAgICAgICAgICAgICAgICBzZWxmLl9zdGF0c3RyZWFtKCkKQEAgLTQ4NSw2ICs0OTQsMTAgQEAKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBpZiBwb3J0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSBob3N0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSAoaG9zdCwgcG9ydCkKICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQogICAgICAgICBzZWxmLmNsb3NlT25FcnJvciA9IEZhbHNlCiAgICAgICAgIHNlbGYucmV0cnlUaW1lID0gTm9uZQpAQCAtNTAwLDE1ICs1MTMsMTcgQEAKICAgICAgICAgQSBmYWN0b3J5IG1ldGhvZCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NlcyB0byBkZWZpbmUgdGhlIHByZWNpc2UKICAgICAgICAgdHlwZSBvZiBzb2NrZXQgdGhleSB3YW50LgogICAgICAgICAiIiIKLSAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgaWYgaGFzYXR0cihzLCAnc2V0dGltZW91dCcpOgotICAgICAgICAgICAgcy5zZXR0aW1lb3V0KHRpbWVvdXQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMuY29ubmVjdCgoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQotICAgICAgICAgICAgcmV0dXJuIHMKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgIHMuY2xvc2UoKQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgc2VsZi5wb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzdWx0ID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKHNlbGYuYWRkcmVzcywgdGltZW91dD10aW1lb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgcmVzdWx0LnNldHRpbWVvdXQodGltZW91dCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQuY29ubmVjdChzZWxmLmFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByZXN1bHQuY2xvc2UoKSAgIyBJc3N1ZSAxOTE4MgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBjcmVhdGVTb2NrZXQoc2VsZik6CiAgICAgICAgICIiIgpAQCAtNTI4LDcgKzU0Myw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5tYWtlU29ja2V0KCkKICAgICAgICAgICAgICAgICBzZWxmLnJldHJ5VGltZSA9IE5vbmUgIyBuZXh0IHRpbWUsIG5vIGRlbGF5IGJlZm9yZSB0cnlpbmcKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjQ3JlYXRpb24gZmFpbGVkLCBzbyBzZXQgdGhlIHJldHJ5IHRpbWUgYW5kIHJldHVybi4KICAgICAgICAgICAgICAgICBpZiBzZWxmLnJldHJ5VGltZSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHJ5UGVyaW9kID0gc2VsZi5yZXRyeVN0YXJ0CkBAIC01NTIsMTYgKzU2Nyw4IEBACiAgICAgICAgICNidXQgYXJlIHN0aWxsIHVuYWJsZSB0byBjb25uZWN0LgogICAgICAgICBpZiBzZWxmLnNvY2s6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLnNvY2ssICJzZW5kYWxsIik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCi0gICAgICAgICAgICAgICAgZWxzZTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgc2VudHNvZmFyID0gMAotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVuKHMpCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIGxlZnQgPiAwOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VudCA9IHNlbGYuc29jay5zZW5kKHNbc2VudHNvZmFyOl0pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZW50c29mYXIgPSBzZW50c29mYXIgKyBzZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCAtIHNlbnQKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6ICNwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwocykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gTm9uZSAgIyBzbyB3ZSBjYW4gY2FsbCBjcmVhdGVTb2NrZXQgbmV4dCB0aW1lCiAKQEAgLTYxMSw5ICs2MTgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzID0gc2VsZi5tYWtlUGlja2xlKHJlY29yZCkKICAgICAgICAgICAgIHNlbGYuc2VuZChzKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtNjUyLDcgKzY1NywxMSBAQAogICAgICAgICBUaGUgZmFjdG9yeSBtZXRob2Qgb2YgU29ja2V0SGFuZGxlciBpcyBoZXJlIG92ZXJyaWRkZW4gdG8gY3JlYXRlCiAgICAgICAgIGEgVURQIHNvY2tldCAoU09DS19ER1JBTSkuCiAgICAgICAgICIiIgotICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgIGlmIHNlbGYucG9ydCBpcyBOb25lOgorICAgICAgICAgICAgZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhbWlseSA9IHNvY2tldC5BRl9JTkVUCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgc29ja2V0LlNPQ0tfREdSQU0pCiAgICAgICAgIHJldHVybiBzCiAKICAgICBkZWYgc2VuZChzZWxmLCBzKToKQEAgLTY2NSw3ICs2NzQsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZVNvY2tldCgpCi0gICAgICAgIHNlbGYuc29jay5zZW5kdG8ocywgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0byhzLCBzZWxmLmFkZHJlc3MpCiAKIGNsYXNzIFN5c0xvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICAiIiIKQEAgLTc3Nyw3ICs3ODYsMTEgQEAKIAogICAgICAgICBJZiBhZGRyZXNzIGlzIHNwZWNpZmllZCBhcyBhIHN0cmluZywgYSBVTklYIHNvY2tldCBpcyB1c2VkLiBUbyBsb2cgdG8gYQogICAgICAgICBsb2NhbCBzeXNsb2dkLCAiU3lzTG9nSGFuZGxlcihhZGRyZXNzPSIvZGV2L2xvZyIpIiBjYW4gYmUgdXNlZC4KLSAgICAgICAgSWYgZmFjaWxpdHkgaXMgbm90IHNwZWNpZmllZCwgTE9HX1VTRVIgaXMgdXNlZC4KKyAgICAgICAgSWYgZmFjaWxpdHkgaXMgbm90IHNwZWNpZmllZCwgTE9HX1VTRVIgaXMgdXNlZC4gSWYgc29ja3R5cGUgaXMKKyAgICAgICAgc3BlY2lmaWVkIGFzIHNvY2tldC5TT0NLX0RHUkFNIG9yIHNvY2tldC5TT0NLX1NUUkVBTSwgdGhhdCBzcGVjaWZpYworICAgICAgICBzb2NrZXQgdHlwZSB3aWxsIGJlIHVzZWQuIEZvciBVbml4IHNvY2tldHMsIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEKKyAgICAgICAgc29ja3R5cGUgb2YgTm9uZSwgaW4gd2hpY2ggY2FzZSBzb2NrZXQuU09DS19ER1JBTSB3aWxsIGJlIHVzZWQsIGZhbGxpbmcKKyAgICAgICAgYmFjayB0byBzb2NrZXQuU09DS19TVFJFQU0uCiAgICAgICAgICIiIgogICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKIApAQCAtODA3LDcgKzgyMCw3IEBACiAgICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KGFkZHJlc3MpCiAgICAgICAgICAgICAjIGl0IHdvcmtlZCwgc28gc2V0IHNlbGYuc29ja3R5cGUgdG8gdGhlIHVzZWQgdHlwZQogICAgICAgICAgICAgc2VsZi5zb2NrdHlwZSA9IHVzZV9zb2NrdHlwZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgIGlmIHNlbGYuc29ja3R5cGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyB1c2VyIGRpZG4ndCBzcGVjaWZ5IGZhbGxpbmcgYmFjaywgc28gZmFpbApAQCAtODE4LDcgKzgzMSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY29ubmVjdChhZGRyZXNzKQogICAgICAgICAgICAgICAgICMgaXQgd29ya2VkLCBzbyBzZXQgc2VsZi5zb2NrdHlwZSB0byB0aGUgdXNlZCB0eXBlCiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrdHlwZSA9IHVzZV9zb2NrdHlwZQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC04NzEsMTAgKzg4NCw5IEBACiAgICAgICAgICAgICBtc2cgPSBzZWxmLmlkZW50ICsgbXNnCiAgICAgICAgIGlmIHNlbGYuYXBwZW5kX251bDoKICAgICAgICAgICAgIG1zZyArPSAnXDAwMCcKLSAgICAgICAgIiIiCi0gICAgICAgIFdlIG5lZWQgdG8gY29udmVydCByZWNvcmQgbGV2ZWwgdG8gbG93ZXJjYXNlLCBtYXliZSB0aGlzIHdpbGwKLSAgICAgICAgY2hhbmdlIGluIHRoZSBmdXR1cmUuCi0gICAgICAgICIiIgorCisgICAgICAgICMgV2UgbmVlZCB0byBjb252ZXJ0IHJlY29yZCBsZXZlbCB0byBsb3dlcmNhc2UsIG1heWJlIHRoaXMgd2lsbAorICAgICAgICAjIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgogICAgICAgICBwcmlvID0gJzwlZD4nICUgc2VsZi5lbmNvZGVQcmlvcml0eShzZWxmLmZhY2lsaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcFByaW9yaXR5KHJlY29yZC5sZXZlbG5hbWUpKQogICAgICAgICBwcmlvID0gcHJpby5lbmNvZGUoJ3V0Zi04JykKQEAgLTg4NSw3ICs4OTcsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi51bml4c29ja2V0OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0X3VuaXhzb2NrZXQoc2VsZi5hZGRyZXNzKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKG1zZykKQEAgLTg5Myw5ICs5MDUsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmR0byhtc2csIHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZGFsbChtc2cpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIFNNVFBIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC05NzMsOSArOTgzLDcgQEAKICAgICAgICAgICAgICAgICBzbXRwLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCiAgICAgICAgICAgICBzbXRwLnNlbmRtYWlsKHNlbGYuZnJvbWFkZHIsIHNlbGYudG9hZGRycywgbXNnKQogICAgICAgICAgICAgc210cC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgTlRFdmVudExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKQEAgLTEwNjAsOSArMTA2OCw3IEBACiAgICAgICAgICAgICAgICAgdHlwZSA9IHNlbGYuZ2V0RXZlbnRUeXBlKHJlY29yZCkKICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCiAgICAgICAgICAgICAgICAgc2VsZi5fd2VsdS5SZXBvcnRFdmVudChzZWxmLmFwcG5hbWUsIGlkLCBjYXQsIHR5cGUsIFttc2ddKQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CkBAIC0xMTQ3LDkgKzExNTMsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi5tZXRob2QgPT0gIlBPU1QiOgogICAgICAgICAgICAgICAgIGguc2VuZChkYXRhLmVuY29kZSgndXRmLTgnKSkKICAgICAgICAgICAgIGguZ2V0cmVzcG9uc2UoKSAgICAjY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0Ci0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEJ1ZmZlcmluZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKQEAgLTEzMjksOSArMTMzMyw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmVucXVldWUoc2VsZi5wcmVwYXJlKHJlY29yZCkpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGlmIHRocmVhZGluZzoKZGlmZiAtLWdpdCBhL0xpYi9sem1hLnB5IGIvTGliL2x6bWEucHkKaW5kZXggMWE4OTg4Ny4uZjFkMzk1OCAxMDA2NDQKLS0tIGEvTGliL2x6bWEucHkKKysrIGIvTGliL2x6bWEucHkKQEAgLTU0LDkgKzU0LDkgQEAKICAgICAgICAgYnl0ZXMgb2JqZWN0KSwgaW4gd2hpY2ggY2FzZSB0aGUgbmFtZWQgZmlsZSBpcyBvcGVuZWQsIG9yIGl0IGNhbgogICAgICAgICBiZSBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICAgICAgbW9kZSBjYW4gYmUgInIiIGZvciByZWFkaW5nIChkZWZhdWx0KSwgInciIGZvciAob3Zlcil3cml0aW5nLCBvcgotICAgICAgICAiYSIgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyAicmIiLCAid2IiLAotICAgICAgICBhbmQgImFiIiByZXNwZWN0aXZlbHkuCisgICAgICAgIG1vZGUgY2FuIGJlICJyIiBmb3IgcmVhZGluZyAoZGVmYXVsdCksICJ3IiBmb3IgKG92ZXIpd3JpdGluZywKKyAgICAgICAgIngiIGZvciBjcmVhdGluZyBleGNsdXNpdmVseSwgb3IgImEiIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbgorICAgICAgICBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgInJiIiwgIndiIiwgInhiIiBhbmQgImFiIiByZXNwZWN0aXZlbHkuCiAKICAgICAgICAgZm9ybWF0IHNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCB0byB1c2UgZm9yIHRoZSBmaWxlLgogICAgICAgICBJZiBtb2RlIGlzICJyIiwgdGhpcyBkZWZhdWx0cyB0byBGT1JNQVRfQVVUTy4gT3RoZXJ3aXNlLCB0aGUKQEAgLTExMCw4ICsxMTAsOSBAQAogICAgICAgICAgICAgIyBzdHJlYW0gd2lsbCBuZWVkIGEgc2VwYXJhdGUgZGVjb21wcmVzc29yIG9iamVjdC4KICAgICAgICAgICAgIHNlbGYuX2luaXRfYXJncyA9IHsiZm9ybWF0Ijpmb3JtYXQsICJmaWx0ZXJzIjpmaWx0ZXJzfQogICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKLSAgICAgICAgZWxpZiBtb2RlIGluICgidyIsICJ3YiIsICJhIiwgImFiIik6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisgICAgICAgIGVsaWYgbW9kZSBpbiAoInciLCAid2IiLCAiYSIsICJhYiIsICJ4IiwgInhiIik6CiAgICAgICAgICAgICBpZiBmb3JtYXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGT1JNQVRfWFoKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCkBAIC0xNDMsNyArMTQ0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fbW9kZSBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgogICAgICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCiAgICAgICAgICAgICBlbGlmIHNlbGYuX21vZGUgPT0gX01PREVfV1JJVEU6CiAgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc2VsZi5fY29tcHJlc3Nvci5mbHVzaCgpKQogICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBOb25lCkBAIC0xODcsMTUgKzE4OCwxOCBAQAogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpCiAKICAgICBkZWYgX2NoZWNrX2Nhbl9yZWFkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5yZWFkYWJsZSgpOgorICAgICAgICBpZiBzZWxmLl9tb2RlIG5vdCBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCiAgICAgICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbigiRmlsZSBub3Qgb3BlbiBmb3IgcmVhZGluZyIpCiAKICAgICBkZWYgX2NoZWNrX2Nhbl93cml0ZShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYud3JpdGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSAhPSBfTU9ERV9XUklURToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHdyaXRpbmciKQogCiAgICAgZGVmIF9jaGVja19jYW5fc2VlayhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIlNlZWtpbmcgaXMgb25seSBzdXBwb3J0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIGZpbGVzIG9wZW4gZm9yIHJlYWRpbmciKQogICAgICAgICBpZiBub3Qgc2VsZi5fZnAuc2Vla2FibGUoKToKQEAgLTIwNCwxNiArMjA4LDEzIEBACiAKICAgICAjIEZpbGwgdGhlIHJlYWRhaGVhZCBidWZmZXIgaWYgaXQgaXMgZW1wdHkuIFJldHVybnMgRmFsc2Ugb24gRU9GLgogICAgIGRlZiBfZmlsbF9idWZmZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Y6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBEZXBlbmRpbmcgb24gdGhlIGlucHV0IGRhdGEsIG91ciBjYWxsIHRvIHRoZSBkZWNvbXByZXNzb3IgbWF5IG5vdAogICAgICAgICAjIHJldHVybiBhbnkgZGF0YS4gSW4gdGhpcyBjYXNlLCB0cnkgYWdhaW4gYWZ0ZXIgcmVhZGluZyBhbm90aGVyIGJsb2NrLgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YToKLSAgICAgICAgICAgICAgICByYXdibG9jayA9IHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYXdibG9jayA9IHNlbGYuX2ZwLnJlYWQoX0JVRkZFUl9TSVpFKQorICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXJfb2Zmc2V0ID09IGxlbihzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgcmF3YmxvY2sgPSAoc2VsZi5fZGVjb21wcmVzc29yLnVudXNlZF9kYXRhIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcC5yZWFkKF9CVUZGRVJfU0laRSkpCiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgpAQCAtMjM2LDMwICsyMzcsNDggQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICMgUmVhZCBkYXRhIHVudGlsIEVPRi4KICAgICAjIElmIHJldHVybl9kYXRhIGlzIGZhbHNlLCBjb25zdW1lIHRoZSBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGl0LgogICAgIGRlZiBfcmVhZF9hbGwoc2VsZiwgcmV0dXJuX2RhdGE9VHJ1ZSk6CisgICAgICAgICMgVGhlIGxvb3AgYXNzdW1lcyB0aGF0IF9idWZmZXJfb2Zmc2V0IGlzIDAuIEVuc3VyZSB0aGF0IHRoaXMgaXMgdHJ1ZS4KKyAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQorICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorCiAgICAgICAgIGJsb2NrcyA9IFtdCiAgICAgICAgIHdoaWxlIHNlbGYuX2ZpbGxfYnVmZmVyKCk6CiAgICAgICAgICAgICBpZiByZXR1cm5fZGF0YToKICAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKHNlbGYuX2J1ZmZlcikKICAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oc2VsZi5fYnVmZmVyKQotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCiAgICAgICAgIGlmIHJldHVybl9kYXRhOgogICAgICAgICAgICAgcmV0dXJuIGIiIi5qb2luKGJsb2NrcykKIAogICAgICMgUmVhZCBhIGJsb2NrIG9mIHVwIHRvIG4gYnl0ZXMuCiAgICAgIyBJZiByZXR1cm5fZGF0YSBpcyBmYWxzZSwgY29uc3VtZSB0aGUgZGF0YSB3aXRob3V0IHJldHVybmluZyBpdC4KICAgICBkZWYgX3JlYWRfYmxvY2soc2VsZiwgbiwgcmV0dXJuX2RhdGE9VHJ1ZSk6CisgICAgICAgICMgSWYgd2UgaGF2ZSBlbm91Z2ggZGF0YSBidWZmZXJlZCwgcmV0dXJuIGltbWVkaWF0ZWx5LgorICAgICAgICBlbmQgPSBzZWxmLl9idWZmZXJfb2Zmc2V0ICsgbgorICAgICAgICBpZiBlbmQgPD0gbGVuKHNlbGYuX2J1ZmZlcik6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQgOiBlbmRdCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gZW5kCisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gZGF0YSBpZiByZXR1cm5fZGF0YSBlbHNlIE5vbmUKKworICAgICAgICAjIFRoZSBsb29wIGFzc3VtZXMgdGhhdCBfYnVmZmVyX29mZnNldCBpcyAwLiBFbnN1cmUgdGhhdCB0aGlzIGlzIHRydWUuCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKwogICAgICAgICBibG9ja3MgPSBbXQogICAgICAgICB3aGlsZSBuID4gMCBhbmQgc2VsZi5fZmlsbF9idWZmZXIoKToKICAgICAgICAgICAgIGlmIG4gPCBsZW4oc2VsZi5fYnVmZmVyKToKICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyWzpuXQotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltuOl0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gbgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICAgICAgaWYgcmV0dXJuX2RhdGE6CiAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChkYXRhKQogICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQpAQCAtMjc0LDkgKzI5Myw5IEBACiAgICAgICAgIFRoZSBleGFjdCBudW1iZXIgb2YgYnl0ZXMgcmV0dXJuZWQgaXMgdW5zcGVjaWZpZWQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Ygb3Igbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpOgogICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyCisgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCiAKICAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKICAgICAgICAgIiIiUmVhZCB1cCB0byBzaXplIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBmaWxlLgpAQCAtMjg1LDcgKzMwNCw3IEBACiAgICAgICAgIFJldHVybnMgYiIiIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgYXQgRU9GLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GIG9yIHNpemUgPT0gMDoKKyAgICAgICAgaWYgc2l6ZSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIGIiIgogICAgICAgICBlbGlmIHNpemUgPCAwOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfYWxsKCkKQEAgLTMwMiwxOCArMzIxLDQwIEBACiAgICAgICAgICMgdGhpcyBkb2VzIG5vdCBnaXZlIGVub3VnaCBkYXRhIGZvciB0aGUgZGVjb21wcmVzc29yIHRvIG1ha2UgcHJvZ3Jlc3MuCiAgICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIG1ha2UgbXVsdGlwbGUgcmVhZHMsIHRvIGF2b2lkIHJldHVybmluZyBiIiIuCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgKHNpemUgPT0gMCBvciBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GIG9yCi0gICAgICAgICAgICBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKSk6CisgICAgICAgIGlmIChzaXplID09IDAgb3IKKyAgICAgICAgICAgICMgT25seSBjYWxsIF9maWxsX2J1ZmZlcigpIGlmIHRoZSBidWZmZXIgaXMgYWN0dWFsbHkgZW1wdHkuCisgICAgICAgICAgICAjIFRoaXMgZ2l2ZXMgYSBzaWduaWZpY2FudCBzcGVlZHVwIGlmICpzaXplKiBpcyBzbWFsbC4KKyAgICAgICAgICAgIChzZWxmLl9idWZmZXJfb2Zmc2V0ID09IGxlbihzZWxmLl9idWZmZXIpIGFuZCBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKSkpOgogICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICBpZiAwIDwgc2l6ZSA8IGxlbihzZWxmLl9idWZmZXIpOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcls6c2l6ZV0KLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzaXplOl0KKyAgICAgICAgaWYgc2l6ZSA+IDA6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ICsgc2l6ZV0KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgKz0gbGVuKGRhdGEpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAogICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGRhdGEpCiAgICAgICAgIHJldHVybiBkYXRhCiAKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYSBsaW5lIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBmaWxlLgorCisgICAgICAgIFRoZSB0ZXJtaW5hdGluZyBuZXdsaW5lIChpZiBwcmVzZW50KSBpcyByZXRhaW5lZC4gSWYgc2l6ZSBpcworICAgICAgICBub24tbmVnYXRpdmUsIG5vIG1vcmUgdGhhbiBzaXplIGJ5dGVzIHdpbGwgYmUgcmVhZCAoaW4gd2hpY2gKKyAgICAgICAgY2FzZSB0aGUgbGluZSBtYXkgYmUgaW5jb21wbGV0ZSkuIFJldHVybnMgYicnIGlmIGFscmVhZHkgYXQgRU9GLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQorICAgICAgICAjIFNob3J0Y3V0IGZvciB0aGUgY29tbW9uIGNhc2UgLSB0aGUgd2hvbGUgbGluZSBpcyBpbiB0aGUgYnVmZmVyLgorICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgIGVuZCA9IHNlbGYuX2J1ZmZlci5maW5kKGIiXG4iLCBzZWxmLl9idWZmZXJfb2Zmc2V0KSArIDEKKyAgICAgICAgICAgIGlmIGVuZCA+IDA6CisgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDogZW5kXQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBlbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGxpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgcmV0dXJuIGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRsaW5lKHNlbGYsIHNpemUpCisKICAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CiAgICAgICAgICIiIldyaXRlIGEgYnl0ZXMgb2JqZWN0IHRvIHRoZSBmaWxlLgogCkBAIC0zMzMsNyArMzc0LDggQEAKICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQUQKICAgICAgICAgc2VsZi5fcG9zID0gMAogICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBMWk1BRGVjb21wcmVzc29yKCoqc2VsZi5faW5pdF9hcmdzKQotICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgorICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAogCiAgICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9MCk6CiAgICAgICAgICIiIkNoYW5nZSB0aGUgZmlsZSBwb3NpdGlvbi4KQEAgLTM3Miw4ICs0MTQsNyBAQAogICAgICAgICAgICAgb2Zmc2V0IC09IHNlbGYuX3BvcwogCiAgICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZCBkYXRhIHVudGlsIHdlIHJlYWNoIHRoZSBkZXNpcmVkIHBvc2l0aW9uLgotICAgICAgICBpZiBzZWxmLl9tb2RlICE9IF9NT0RFX1JFQURfRU9GOgotICAgICAgICAgICAgc2VsZi5fcmVhZF9ibG9jayhvZmZzZXQsIHJldHVybl9kYXRhPUZhbHNlKQorICAgICAgICBzZWxmLl9yZWFkX2Jsb2NrKG9mZnNldCwgcmV0dXJuX2RhdGE9RmFsc2UpCiAKICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcwogCkBAIC0zODgsMjMgKzQyOSwyNSBAQAogICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSk6CiAgICAgIiIiT3BlbiBhbiBMWk1BLWNvbXByZXNzZWQgZmlsZSBpbiBiaW5hcnkgb3IgdGV4dCBtb2RlLgogCi0gICAgZmlsZW5hbWUgY2FuIGJlIGVpdGhlciBhbiBhY3R1YWwgZmlsZSBuYW1lIChnaXZlbiBhcyBhIHN0ciBvciBieXRlcyBvYmplY3QpLAotICAgIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QKLSAgICB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCisgICAgZmlsZW5hbWUgY2FuIGJlIGVpdGhlciBhbiBhY3R1YWwgZmlsZSBuYW1lIChnaXZlbiBhcyBhIHN0ciBvciBieXRlcworICAgIG9iamVjdCksIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4KKyAgICBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiIChkZWZhdWx0KSwgInciLCAid2IiLCAiYSIsIG9yICJhYiIgZm9yCi0gICAgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLgorICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIgKGRlZmF1bHQpLCAidyIsICJ3YiIsICJ4IiwgInhiIiwKKyAgICAiYSIsIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiLCAieHQiLCBvciAiYXQiIGZvciB0ZXh0CisgICAgbW9kZS4KIAotICAgIFRoZSBmb3JtYXQsIGNoZWNrLCBwcmVzZXQgYW5kIGZpbHRlcnMgYXJndW1lbnRzIHNwZWNpZnkgdGhlIGNvbXByZXNzaW9uCi0gICAgc2V0dGluZ3MsIGFzIGZvciBMWk1BQ29tcHJlc3NvciwgTFpNQURlY29tcHJlc3NvciBhbmQgTFpNQUZpbGUuCisgICAgVGhlIGZvcm1hdCwgY2hlY2ssIHByZXNldCBhbmQgZmlsdGVycyBhcmd1bWVudHMgc3BlY2lmeSB0aGUKKyAgICBjb21wcmVzc2lvbiBzZXR0aW5ncywgYXMgZm9yIExaTUFDb21wcmVzc29yLCBMWk1BRGVjb21wcmVzc29yIGFuZAorICAgIExaTUFGaWxlLgogCi0gICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIExaTUFGaWxlIGNvbnN0cnVjdG9yOgotICAgIExaTUFGaWxlKGZpbGVuYW1lLCBtb2RlLCAuLi4pLiBJbiB0aGlzIGNhc2UsIHRoZSBlbmNvZGluZywgZXJyb3JzIGFuZAotICAgIG5ld2xpbmUgYXJndW1lbnRzIG11c3Qgbm90IGJlIHByb3ZpZGVkLgorICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBMWk1BRmlsZQorICAgIGNvbnN0cnVjdG9yOiBMWk1BRmlsZShmaWxlbmFtZSwgbW9kZSwgLi4uKS4gSW4gdGhpcyBjYXNlLCB0aGUKKyAgICBlbmNvZGluZywgZXJyb3JzIGFuZCBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KIAogICAgIEZvciB0ZXh0IG1vZGUsIGEgTFpNQUZpbGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCB3cmFwcGVkIGluIGFuCi0gICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yIGhhbmRsaW5nCi0gICAgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KKyAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IKKyAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCiAgICAgIiIiCiAgICAgaWYgInQiIGluIG1vZGU6CkBAIC00MzQsNyArNDc3LDcgQEAKICAgICBSZWZlciB0byBMWk1BQ29tcHJlc3NvcidzIGRvY3N0cmluZyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKICAgICBvcHRpb25hbCBhcmd1bWVudHMgKmZvcm1hdCosICpjaGVjayosICpwcmVzZXQqIGFuZCAqZmlsdGVycyouCiAKLSAgICBGb3IgaW5jcmVtZW50YWwgY29tcHJlc3Npb24sIHVzZSBhbiBMWk1BQ29tcHJlc3NvciBvYmplY3QgaW5zdGVhZC4KKyAgICBGb3IgaW5jcmVtZW50YWwgY29tcHJlc3Npb24sIHVzZSBhbiBMWk1BQ29tcHJlc3NvciBpbnN0ZWFkLgogICAgICIiIgogICAgIGNvbXAgPSBMWk1BQ29tcHJlc3Nvcihmb3JtYXQsIGNoZWNrLCBwcmVzZXQsIGZpbHRlcnMpCiAgICAgcmV0dXJuIGNvbXAuY29tcHJlc3MoZGF0YSkgKyBjb21wLmZsdXNoKCkKQEAgLTQ0Niw3ICs0ODksNyBAQAogICAgIFJlZmVyIHRvIExaTUFEZWNvbXByZXNzb3IncyBkb2NzdHJpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCiAgICAgb3B0aW9uYWwgYXJndW1lbnRzICpmb3JtYXQqLCAqY2hlY2sqIGFuZCAqZmlsdGVycyouCiAKLSAgICBGb3IgaW5jcmVtZW50YWwgZGVjb21wcmVzc2lvbiwgdXNlIGEgTFpNQURlY29tcHJlc3NvciBvYmplY3QgaW5zdGVhZC4KKyAgICBGb3IgaW5jcmVtZW50YWwgZGVjb21wcmVzc2lvbiwgdXNlIGFuIExaTUFEZWNvbXByZXNzb3IgaW5zdGVhZC4KICAgICAiIiIKICAgICByZXN1bHRzID0gW10KICAgICB3aGlsZSBUcnVlOgpkaWZmIC0tZ2l0IGEvTGliL21hY3BhdGgucHkgYi9MaWIvbWFjcGF0aC5weQppbmRleCAxNjE1ZDkxLi5kMzRmOWU5NCAxMDA2NDQKLS0tIGEvTGliL21hY3BhdGgucHkKKysrIGIvTGliL21hY3BhdGgucHkKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvbWFpbGJveC5weSBiL0xpYi9tYWlsYm94LnB5CmluZGV4IDNiNjRjMmUuLjJlZWU3NmMgMTAwNjQ0Ci0tLSBhL0xpYi9tYWlsYm94LnB5CisrKyBiL0xpYi9tYWlsYm94LnB5CkBAIC02LDcgKzYsNiBAQAogIyBvciByZXR1cm5pbmcgZnJvbSBhIGZsdXNoKCkgbWV0aG9kLiAgU2VlIGZ1bmN0aW9ucyBfc3luY19mbHVzaCgpIGFuZAogIyBfc3luY19jbG9zZSgpLgogCi1pbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCB0aW1lCiBpbXBvcnQgY2FsZW5kYXIKQEAgLTIwLDkgKzE5LDYgQEAKIGltcG9ydCBpbwogaW1wb3J0IGNvbnRleHRsaWIKIHRyeToKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ29zMmVteCc6Ci0gICAgICAgICMgT1MvMiBFTVggZmNudGwoKSBub3QgYWRlcXVhdGUKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKICAgICBpbXBvcnQgZmNudGwKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmY250bCA9IE5vbmUKQEAgLTEwNyw3ICsxMDMsNyBAQAogCiAgICAgZGVmIGl0ZXJ2YWx1ZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBtZXNzYWdlcy4iIiIKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLmtleXMoKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLml0ZXJrZXlzKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEyMyw3ICsxMTksNyBAQAogCiAgICAgZGVmIGl0ZXJpdGVtcyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgKGtleSwgbWVzc2FnZSkgdHVwbGVzLiIiIgotICAgICAgICBmb3Iga2V5IGluIHNlbGYua2V5cygpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuaXRlcmtleXMoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgpAQCAtMTU4LDcgKzE1NCw3IEBACiAKICAgICBkZWYgcG9waXRlbShzZWxmKToKICAgICAgICAgIiIiRGVsZXRlIGFuIGFyYml0cmFyeSAoa2V5LCBtZXNzYWdlKSBwYWlyIGFuZCByZXR1cm4gaXQuIiIiCi0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5rZXlzKCk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5pdGVya2V5cygpOgogICAgICAgICAgICAgcmV0dXJuIChrZXksIHNlbGYucG9wKGtleSkpICAgICAjIFRoaXMgaXMgb25seSBydW4gb25jZS4KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlcyBpbiBtYWlsYm94JykKQEAgLTE2Niw3ICsxNjIsNyBAQAogICAgIGRlZiB1cGRhdGUoc2VsZiwgYXJnPU5vbmUpOgogICAgICAgICAiIiJDaGFuZ2UgdGhlIG1lc3NhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byBjZXJ0YWluIGtleXMuIiIiCiAgICAgICAgIGlmIGhhc2F0dHIoYXJnLCAnaXRlcml0ZW1zJyk6Ci0gICAgICAgICAgICBzb3VyY2UgPSBhcmcuaXRlbXMoKQorICAgICAgICAgICAgc291cmNlID0gYXJnLml0ZXJpdGVtcygpCiAgICAgICAgIGVsaWYgaGFzYXR0cihhcmcsICdpdGVtcycpOgogICAgICAgICAgICAgc291cmNlID0gYXJnLml0ZW1zKCkKICAgICAgICAgZWxzZToKQEAgLTMzOSwxMSArMzM1LDggQEAKICAgICAgICAgIyBUaGlzIG92ZXJyaWRlcyBhbiBpbmFwcGxpY2FibGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIHN1cGVyY2xhc3MuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGtleSkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBleGNlcHQgKEtleUVycm9yLCBGaWxlTm90Rm91bmRFcnJvcik6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgbWVzc2FnZSk6CiAgICAgICAgICIiIlJlcGxhY2UgdGhlIGtleWVkIG1lc3NhZ2U7IHJhaXNlIEtleUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuIiIiCkBAIC0zNzUsMTQgKzM2OCwxMSBAQAogICAgIGRlZiBnZXRfbWVzc2FnZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBNZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHN1YnBhdGggPSBzZWxmLl9sb29rdXAoa2V5KQotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3VicGF0aCksICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJwYXRoKSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIGlmIHNlbGYuX2ZhY3Rvcnk6CiAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeShmKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBtc2cgPSBNYWlsZGlyTWVzc2FnZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHN1YmRpciwgbmFtZSA9IG9zLnBhdGguc3BsaXQoc3VicGF0aCkKICAgICAgICAgbXNnLnNldF9zdWJkaXIoc3ViZGlyKQogICAgICAgICBpZiBzZWxmLmNvbG9uIGluIG5hbWU6CkBAIC0zOTIsMTEgKzM4Miw4IEBACiAKICAgICBkZWYgZ2V0X2J5dGVzKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCi0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9sb29rdXAoa2V5KSksICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9sb29rdXAoa2V5KSksICdyYicpIGFzIGY6CiAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkucmVwbGFjZShsaW5lc2VwLCBiJ1xuJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgpAQCAtNTA4LDE2ICs0OTUsMTIgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAndG1wJywgdW5pcSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Muc3RhdChwYXRoKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICAgICAgTWFpbGRpci5fY291bnQgKz0gMQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVfY2FyZWZ1bGx5KHBhdGgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBNYWlsZGlyLl9jb3VudCArPSAxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVfY2FyZWZ1bGx5KHBhdGgpCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAjIEZhbGwgdGhyb3VnaCB0byBoZXJlIGlmIHN0YXQgc3VjY2VlZGVkIG9yIG9wZW4gcmFpc2VkIEVFWElTVC4KICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdOYW1lIGNsYXNoIHByZXZlbnRlZCBmaWxlIGNyZWF0aW9uOiAlcycgJQpAQCAtNTc2LDcgKzU1OSw3IEBACiAgICAgZGVmIG5leHQoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgbmV4dCBtZXNzYWdlIGluIGEgb25lLXRpbWUgaXRlcmF0aW9uLiIiIgogICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnX29uZXRpbWVfa2V5cycpOgotICAgICAgICAgICAgc2VsZi5fb25ldGltZV9rZXlzID0gaXRlcihzZWxmLmtleXMoKSkKKyAgICAgICAgICAgIHNlbGYuX29uZXRpbWVfa2V5cyA9IHNlbGYuaXRlcmtleXMoKQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmW25leHQoc2VsZi5fb25ldGltZV9rZXlzKV0KQEAgLTU5NCw3ICs1NzcsNyBAQAogICAgICAgICBNYWlsYm94Ll9faW5pdF9fKHNlbGYsIHBhdGgsIGZhY3RvcnksIGNyZWF0ZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICBpZiBjcmVhdGU6CiAgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICd3YisnKQpAQCAtNjM3LDggKzYyMCw3IEBACiAgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBrZXlzLiIiIgogICAgICAgICBzZWxmLl9sb29rdXAoKQotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX3RvYy5rZXlzKCk6Ci0gICAgICAgICAgICB5aWVsZCBrZXkKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl90b2Mua2V5cygpCiAKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBrZXllZCBtZXNzYWdlIGV4aXN0cywgRmFsc2Ugb3RoZXJ3aXNlLiIiIgpAQCAtNzE2LDEzICs2OTgsOSBAQAogICAgICAgICBvcy5jaG1vZChuZXdfZmlsZS5uYW1lLCBtb2RlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUubmFtZSwgc2VsZi5fcGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUVYSVNUIG9yIFwKLSAgICAgICAgICAgICAgKG9zLm5hbWUgPT0gJ29zMicgYW5kIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTKToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5fcGF0aCkKLSAgICAgICAgICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUubmFtZSwgc2VsZi5fcGF0aCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLl9wYXRoKQorICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBvcGVuKHNlbGYuX3BhdGgsICdyYisnKQogICAgICAgICBzZWxmLl90b2MgPSBuZXdfdG9jCiAgICAgICAgIHNlbGYuX3BlbmRpbmcgPSBGYWxzZQpAQCAtOTk5LDcgKzk3Nyw3IEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDEzLDcgKzk5MSw3IEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDM5LDEyICsxMDE3LDEyIEBACiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiKycpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggZjoKICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICBfbG9ja19maWxlKGYpCiAgICAgICAgICAgICB0cnk6CkBAIC0xMDUyLDggKzEwMzAsNiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZvciBuYW1lLCBrZXlfbGlzdCBpbiBzZWxmLmdldF9zZXF1ZW5jZXMoKS5pdGVtcygpOgogICAgICAgICAgICAgaWYga2V5IGluIGtleV9saXN0OgogICAgICAgICAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UobmFtZSkKQEAgLTEwNjYsMTIgKzEwNDIsMTIgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmIrJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKQEAgLTEwNzksMTQgKzEwNTUsMTIgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMTA0LDcgKzEwNzgsNyBAQAogCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGNvdW50IG9mIG1lc3NhZ2VzIGluIHRoZSBtYWlsYm94LiIiIgotICAgICAgICByZXR1cm4gbGVuKGxpc3Qoc2VsZi5rZXlzKCkpKQorICAgICAgICByZXR1cm4gbGVuKGxpc3Qoc2VsZi5pdGVya2V5cygpKSkKIAogICAgIGRlZiBsb2NrKHNlbGYpOgogICAgICAgICAiIiJMb2NrIHRoZSBtYWlsYm94LiIiIgpAQCAtMTIxOCw3ICsxMTkyLDcgQEAKICAgICAgICAgc2VxdWVuY2VzID0gc2VsZi5nZXRfc2VxdWVuY2VzKCkKICAgICAgICAgcHJldiA9IDAKICAgICAgICAgY2hhbmdlcyA9IFtdCi0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5rZXlzKCk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5pdGVya2V5cygpOgogICAgICAgICAgICAgaWYga2V5IC0gMSAhPSBwcmV2OgogICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKChrZXksIHByZXYgKyAxKSkKICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAnbGluaycpOgpAQCAtMjAwNiw3ICsxOTgwLDcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHN1cHBvcnQuIiIiCisgICAgICAgICIiIkNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCBzdXBwb3J0LiIiIgogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGMpOgpAQCAtMjA3OSw3ICsyMDUzLDcgQEAKICAgICAgICAgaWYgZmNudGw6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUdBSU4sIGVycm5vLkVBQ0NFUywgZXJybm8uRVJPRlMpOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ2xvY2tmOiBsb2NrIHVuYXZhaWxhYmxlOiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5uYW1lKQpAQCAtMjA4OSw3ICsyMDYzLDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwcmVfbG9jayA9IF9jcmVhdGVfdGVtcG9yYXJ5KGYubmFtZSArICcubG9jaycpCiAgICAgICAgICAgICAgICAgcHJlX2xvY2suY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgIyBXaXRob3V0IHdyaXRlIGFjY2VzcywganVzdCBza2lwIGRvdGxvY2tpbmcuCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTIxMDIsMTQgKzIwNzYsMTAgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUocHJlX2xvY2submFtZSwgZi5uYW1lICsgJy5sb2NrJykKICAgICAgICAgICAgICAgICAgICAgZG90bG9ja19kb25lID0gVHJ1ZQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVFWElTVCBvciBcCi0gICAgICAgICAgICAgICAgICAob3MubmFtZSA9PSAnb3MyJyBhbmQgZS5lcnJubyA9PSBlcnJuby5FQUNDRVMpOgotICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocHJlX2xvY2submFtZSkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdkb3QgbG9jayB1bmF2YWlsYWJsZTogJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUocHJlX2xvY2submFtZSkKKyAgICAgICAgICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ2RvdCBsb2NrIHVuYXZhaWxhYmxlOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCiAgICAgZXhjZXB0OgogICAgICAgICBpZiBmY250bDoKICAgICAgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfVU4pCmRpZmYgLS1naXQgYS9MaWIvbWFpbGNhcC5weSBiL0xpYi9tYWlsY2FwLnB5CmluZGV4IDBjMGIxOWMuLjk3ZTMwMzUgMTAwNjQ0Ci0tLSBhL0xpYi9tYWlsY2FwLnB5CisrKyBiL0xpYi9tYWlsY2FwLnB5CkBAIC0yMCw3ICsyMCw3IEBACiAgICAgZm9yIG1haWxjYXAgaW4gbGlzdG1haWxjYXBmaWxlcygpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcCA9IG9wZW4obWFpbGNhcCwgJ3InKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICB3aXRoIGZwOgogICAgICAgICAgICAgbW9yZWNhcHMgPSByZWFkbWFpbGNhcGZpbGUoZnApCmRpZmYgLS1naXQgYS9MaWIvbWltZXR5cGVzLnB5IGIvTGliL21pbWV0eXBlcy5weQppbmRleCBjZGViZjdhLi5iOThjODc0IDEwMDY0NAotLS0gYS9MaWIvbWltZXR5cGVzLnB5CisrKyBiL0xpYi9taW1ldHlwZXMucHkKQEAgLTM2MSw3ICszNjEsNyBAQAogZGVmIHJlYWRfbWltZV90eXBlcyhmaWxlKToKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgd2l0aCBmOgogICAgICAgICBkYiA9IE1pbWVUeXBlcygpCmRpZmYgLS1naXQgYS9MaWIvbW9kdWxlZmluZGVyLnB5IGIvTGliL21vZHVsZWZpbmRlci5weQppbmRleCAyNjRiMGYwLi5iNzc4ZTYwIDEwMDY0NAotLS0gYS9MaWIvbW9kdWxlZmluZGVyLnB5CisrKyBiL0xpYi9tb2R1bGVmaW5kZXIucHkKQEAgLTEsMTMgKzEsMTcgQEAKICIiIkZpbmQgbW9kdWxlcyB1c2VkIGJ5IGEgc2NyaXB0LCB1c2luZyBpbnRyb3NwZWN0aW9uLiIiIgogCiBpbXBvcnQgZGlzCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKIGltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB3YXJuaW5ncword2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICBpbXBvcnQgaW1wCiAKICMgWFhYIENsZWFuIHVwIG9uY2Ugc3RyOCdzIGNzdG9yIG1hdGNoZXMgYnl0ZXMuCiBMT0FEX0NPTlNUID0gYnl0ZXMoW2Rpcy5vcG5hbWUuaW5kZXgoJ0xPQURfQ09OU1QnKV0pCkBAIC0yMjksNyArMjMzLDcgQEAKICAgICAgICAgZm9yIGRpciBpbiBtLl9fcGF0aF9fOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLm1zZygyLCAiY2FuJ3QgbGlzdCBkaXJlY3RvcnkiLCBkaXIpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpAQCAtMjg0LDExICsyODgsMTIgQEAKICAgICAgICAgaWYgdHlwZSA9PSBpbXAuUFlfU09VUkNFOgogICAgICAgICAgICAgY28gPSBjb21waWxlKGZwLnJlYWQoKSsnXG4nLCBwYXRobmFtZSwgJ2V4ZWMnKQogICAgICAgICBlbGlmIHR5cGUgPT0gaW1wLlBZX0NPTVBJTEVEOgotICAgICAgICAgICAgaWYgZnAucmVhZCg0KSAhPSBpbXAuZ2V0X21hZ2ljKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5tc2dvdXQoMiwgInJhaXNlIEltcG9ydEVycm9yOiBCYWQgbWFnaWMgbnVtYmVyIiwgcGF0aG5hbWUpCi0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkJhZCBtYWdpYyBudW1iZXIgaW4gJXMiICUgcGF0aG5hbWUpCi0gICAgICAgICAgICBmcC5yZWFkKDgpICAjIFNraXAgbXRpbWUgYW5kIHNpemUuCi0gICAgICAgICAgICBjbyA9IG1hcnNoYWwubG9hZChmcCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYXJzaGFsX2RhdGEgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGZwLnJlYWQoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5tc2dvdXQoMiwgInJhaXNlIEltcG9ydEVycm9yOiAiICsgc3RyKGV4YyksIHBhdGhuYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBjbyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbF9kYXRhKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY28gPSBOb25lCiAgICAgICAgIG0gPSBzZWxmLmFkZF9tb2R1bGUoZnFuYW1lKQpAQCAtNTYzLDExICs1NjgsMTIgQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29uc3RzW2ldLCB0eXBlKGNvKSk6CiAgICAgICAgICAgICAgICAgY29uc3RzW2ldID0gc2VsZi5yZXBsYWNlX3BhdGhzX2luX2NvZGUoY29uc3RzW2ldKQogCi0gICAgICAgIHJldHVybiB0eXBlcy5Db2RlVHlwZShjby5jb19hcmdjb3VudCwgY28uY29fbmxvY2FscywgY28uY29fc3RhY2tzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2ZsYWdzLCBjby5jb19jb2RlLCB0dXBsZShjb25zdHMpLCBjby5jb19uYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb192YXJuYW1lcywgbmV3X2ZpbGVuYW1lLCBjby5jb19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2ZpcnN0bGluZW5vLCBjby5jb19sbm90YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fZnJlZXZhcnMsIGNvLmNvX2NlbGx2YXJzKQorICAgICAgICByZXR1cm4gdHlwZXMuQ29kZVR5cGUoY28uY29fYXJnY291bnQsIGNvLmNvX2t3b25seWFyZ2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fbmxvY2FscywgY28uY29fc3RhY2tzaXplLCBjby5jb19mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvZGUsIHR1cGxlKGNvbnN0cyksIGNvLmNvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fdmFybmFtZXMsIG5ld19maWxlbmFtZSwgY28uY29fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2ZpcnN0bGluZW5vLCBjby5jb19sbm90YWIsIGNvLmNvX2ZyZWV2YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY2VsbHZhcnMpCiAKIAogZGVmIHRlc3QoKToKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CmluZGV4IDFmM2U2N2MuLjg2ZGY2MzggMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQpAQCAtOCwyNjAgKzgsMzEgQEAKICMgc3VicGFja2FnZSAnbXVsdGlwcm9jZXNzaW5nLmR1bW15JyBoYXMgdGhlIHNhbWUgQVBJIGJ1dCBpcyBhIHNpbXBsZQogIyB3cmFwcGVyIGZvciAndGhyZWFkaW5nJy4KICMKLSMgVHJ5IGNhbGxpbmcgYG11bHRpcHJvY2Vzc2luZy5kb2MubWFpbigpYCB0byByZWFkIHRoZSBodG1sCi0jIGRvY3VtZW50YXRpb24gaW4gYSB3ZWJicm93c2VyLgotIwotIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX192ZXJzaW9uX18gPSAnMC43MGExJwotCi1fX2FsbF9fID0gWwotICAgICdQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nLCAnZnJlZXplX3N1cHBvcnQnLAotICAgICdNYW5hZ2VyJywgJ1BpcGUnLCAnY3B1X2NvdW50JywgJ2xvZ190b19zdGRlcnInLCAnZ2V0X2xvZ2dlcicsCi0gICAgJ2FsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcnLCAnQnVmZmVyVG9vU2hvcnQnLCAnVGltZW91dEVycm9yJywKLSAgICAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsICdDb25kaXRpb24nLAotICAgICdFdmVudCcsICdCYXJyaWVyJywgJ1F1ZXVlJywgJ1NpbXBsZVF1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLCAnUG9vbCcsCi0gICAgJ1ZhbHVlJywgJ0FycmF5JywgJ1Jhd1ZhbHVlJywgJ1Jhd0FycmF5JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAotICAgIF0KLQotX19hdXRob3JfXyA9ICdSLiBPdWRrZXJrIChyLm0ub3Vka2Vya0BnbWFpbC5jb20pJwotCi0jCi0jIEltcG9ydHMKLSMKLQotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBTVUJERUJVRywgU1VCV0FSTklORworZnJvbSAuIGltcG9ydCBjb250ZXh0CiAKICMKLSMgRXhjZXB0aW9ucworIyBDb3B5IHN0dWZmIGZyb20gZGVmYXVsdCBjb250ZXh0CiAjCiAKLWNsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWNsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKK2dsb2JhbHMoKS51cGRhdGUoKG5hbWUsIGdldGF0dHIoY29udGV4dC5fZGVmYXVsdF9jb250ZXh0LCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18pCitfX2FsbF9fID0gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18KIAogIwotIyBEZWZpbml0aW9ucyBub3QgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIFhYWCBUaGVzZSBzaG91bGQgbm90IHJlYWxseSBiZSBkb2N1bWVudGVkIG9yIHB1YmxpYy4KICMKIAotZGVmIE1hbmFnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgbWFuYWdlciBhc3NvY2lhdGVkIHdpdGggYSBydW5uaW5nIHNlcnZlciBwcm9jZXNzCi0KLSAgICBUaGUgbWFuYWdlcnMgbWV0aG9kcyBzdWNoIGFzIGBMb2NrKClgLCBgQ29uZGl0aW9uKClgIGFuZCBgUXVldWUoKWAKLSAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMgaW1wb3J0IFN5bmNNYW5hZ2VyCi0gICAgbSA9IFN5bmNNYW5hZ2VyKCkKLSAgICBtLnN0YXJ0KCkKLSAgICByZXR1cm4gbQotCi1kZWYgUGlwZShkdXBsZXg9VHJ1ZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyB0d28gY29ubmVjdGlvbiBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZQotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKLSAgICByZXR1cm4gUGlwZShkdXBsZXgpCi0KLWRlZiBjcHVfY291bnQoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtCi0gICAgJycnCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IGludChvcy5lbnZpcm9uWydOVU1CRVJfT0ZfUFJPQ0VTU09SUyddKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEtleUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLSAgICBlbGlmICdic2QnIGluIHN5cy5wbGF0Zm9ybSBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgIGNvbW0gPSAnL3NiaW4vc3lzY3RsIC1uIGh3Lm5jcHUnCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgIGNvbW0gPSAnL3VzcicgKyBjb21tCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggb3MucG9wZW4oY29tbSkgYXMgcDoKLSAgICAgICAgICAgICAgICBudW0gPSBpbnQocC5yZWFkKCkpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgbnVtID0gMAotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IG9zLnN5c2NvbmYoJ1NDX05QUk9DRVNTT1JTX09OTE4nKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLQotICAgIGlmIG51bSA+PSAxOgotICAgICAgICByZXR1cm4gbnVtCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCi0KLWRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICcnJwotICAgIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGZha2UgZm9ya2VkIHByb2Nlc3MgaW4gYSBmcm96ZW4gZXhlY3V0YWJsZS4KLSAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KLSAgICAnJycKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGZyZWV6ZV9zdXBwb3J0Ci0gICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLQotZGVmIGdldF9sb2dnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm4gcGFja2FnZSBsb2dnZXIgLS0gaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGVuIGl0IGlzIGNyZWF0ZWQKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBnZXRfbG9nZ2VyCi0gICAgcmV0dXJuIGdldF9sb2dnZXIoKQotCi1kZWYgbG9nX3RvX3N0ZGVycihsZXZlbD1Ob25lKToKLSAgICAnJycKLSAgICBUdXJuIG9uIGxvZ2dpbmcgYW5kIGFkZCBhIGhhbmRsZXIgd2hpY2ggcHJpbnRzIHRvIHN0ZGVycgotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKLSAgICByZXR1cm4gbG9nX3RvX3N0ZGVycihsZXZlbCkKLQotZGVmIGFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoKToKLSAgICAnJycKLSAgICBJbnN0YWxsIHN1cHBvcnQgZm9yIHNlbmRpbmcgY29ubmVjdGlvbnMgYW5kIHNvY2tldHMgYmV0d2VlbiBwcm9jZXNzZXMKLSAgICAnJycKLSAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCi0gICAgIyBpdHMgb25seSBlZmZlY3Qgd2FzIHRvIG1ha2Ugc29ja2V0IG9iamVjdHMgaW5oZXJpdGFibGUgb24gV2luZG93cy4KLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KK1NVQkRFQlVHID0gNQorU1VCV0FSTklORyA9IDI1CiAKICMKLSMgRGVmaW5pdGlvbnMgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIEFsaWFzIGZvciBtYWluIG1vZHVsZSAtLSB3aWxsIGJlIHJlc2V0IGJ5IGJvb3RzdHJhcHBpbmcgY2hpbGQgcHJvY2Vzc2VzCiAjCiAKLWRlZiBMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jawotICAgIHJldHVybiBMb2NrKCkKLQotZGVmIFJMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHJlY3Vyc2l2ZSBsb2NrIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBSTG9jawotICAgIHJldHVybiBSTG9jaygpCi0KLWRlZiBDb25kaXRpb24obG9jaz1Ob25lKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBDb25kaXRpb24KLSAgICByZXR1cm4gQ29uZGl0aW9uKGxvY2spCi0KLWRlZiBTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHNlbWFwaG9yZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgU2VtYXBob3JlCi0gICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSkKLQotZGVmIEJvdW5kZWRTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCi0gICAgcmV0dXJuIEJvdW5kZWRTZW1hcGhvcmUodmFsdWUpCi0KLWRlZiBFdmVudCgpOgotICAgICcnJwotICAgIFJldHVybnMgYW4gZXZlbnQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEV2ZW50Ci0gICAgcmV0dXJuIEV2ZW50KCkKLQotZGVmIEJhcnJpZXIocGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEJhcnJpZXIKLSAgICByZXR1cm4gQmFycmllcihwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQpCi0KLWRlZiBRdWV1ZShtYXhzaXplPTApOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFF1ZXVlCi0gICAgcmV0dXJuIFF1ZXVlKG1heHNpemUpCi0KLWRlZiBKb2luYWJsZVF1ZXVlKG1heHNpemU9MCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHF1ZXVlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQotICAgIHJldHVybiBKb2luYWJsZVF1ZXVlKG1heHNpemUpCi0KLWRlZiBTaW1wbGVRdWV1ZSgpOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgcmV0dXJuIFNpbXBsZVF1ZXVlKCkKLQotZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgUG9vbAotICAgIHJldHVybiBQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzLCBtYXh0YXNrc3BlcmNoaWxkKQotCi1kZWYgUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdWYWx1ZQotICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKLQotZGVmIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgYXJyYXkKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5Ci0gICAgcmV0dXJuIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpCi0KLWRlZiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFZhbHVlCi0gICAgcmV0dXJuIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPWxvY2spCi0KLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIGFycmF5Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQotICAgIHJldHVybiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCBsb2NrPWxvY2spCi0KLSMKLSMKLSMKLQotaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0KLSAgICBkZWYgc2V0X2V4ZWN1dGFibGUoZXhlY3V0YWJsZSk6Ci0gICAgICAgICcnJwotICAgICAgICBTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KLSAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgaW5zdGVhZCBvZiBzeXMuZXhlY3V0YWJsZS4KLSAgICAgICAgVXNlZnVsIGZvciBwZW9wbGUgZW1iZWRkaW5nIFB5dGhvbi4KLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IHNldF9leGVjdXRhYmxlCi0gICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCi0KLSAgICBfX2FsbF9fICs9IFsnc2V0X2V4ZWN1dGFibGUnXQoraWYgJ19fbWFpbl9fJyBpbiBzeXMubW9kdWxlczoKKyAgICBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKaW5kZXggMjI1ODlkMC4uM2JjNzE2ZiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQpAQCAtMTIsMjIgKzEyLDIzIEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IHBpY2tsZQotaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAotaW1wb3J0IGVycm5vCiBpbXBvcnQgdGltZQogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgaXRlcnRvb2xzCiAKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzLCBBdXRoZW50aWNhdGlvbkVycm9yLCBCdWZmZXJUb29TaG9ydAotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgZ2V0X3RlbXBfZGlyLCBGaW5hbGl6ZSwgc3ViX2RlYnVnLCBkZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKKworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm9tIC4gaW1wb3J0IEF1dGhlbnRpY2F0aW9uRXJyb3IsIEJ1ZmZlclRvb1Nob3J0Citmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IEZvcmtpbmdQaWNrbGVyCisKIHRyeToKICAgICBpbXBvcnQgX3dpbmFwaQotICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgV0FJVF9PQkpFQ1RfMCwgV0FJVF9USU1FT1VULCBJTkZJTklURQorICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgV0FJVF9PQkpFQ1RfMCwgV0FJVF9BQkFORE9ORURfMCwgV0FJVF9USU1FT1VULCBJTkZJTklURQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICByYWlzZQpAQCAtNzIsMTAgKzczLDEwIEBACiAgICAgaWYgZmFtaWx5ID09ICdBRl9JTkVUJzoKICAgICAgICAgcmV0dXJuICgnbG9jYWxob3N0JywgMCkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfVU5JWCc6Ci0gICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9Z2V0X3RlbXBfZGlyKCkpCisgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfUElQRSc6CiAgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PXInXFwuXHBpcGVccHljLSVkLSVkLScgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5nZXRwaWQoKSwgbmV4dChfbW1hcF9jb3VudGVyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldHBpZCgpLCBuZXh0KF9tbWFwX2NvdW50ZXIpKSwgZGlyPSIiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VucmVjb2duaXplZCBmYW1pbHknKQogCkBAIC0xMzIsMjIgKzEzMywyMiBAQAogCiAgICAgZGVmIF9jaGVja19jbG9zZWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiaGFuZGxlIGlzIGNsb3NlZCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJoYW5kbGUgaXMgY2xvc2VkIikKIAogICAgIGRlZiBfY2hlY2tfcmVhZGFibGUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFkYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNvbm5lY3Rpb24gaXMgd3JpdGUtb25seSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjb25uZWN0aW9uIGlzIHdyaXRlLW9ubHkiKQogCiAgICAgZGVmIF9jaGVja193cml0YWJsZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX3dyaXRhYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQogCiAgICAgZGVmIF9iYWRfbWVzc2FnZV9sZW5ndGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3dyaXRhYmxlOgogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgY2xvc2VkKHNlbGYpOgpAQCAtMjAyLDkgKzIwMyw3IEBACiAgICAgICAgICIiIlNlbmQgYSAocGlja2xhYmxlKSBvYmplY3QiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tfd3JpdGFibGUoKQotICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIoYnVmLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkuZHVtcChvYmopCi0gICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICBzZWxmLl9zZW5kX2J5dGVzKEZvcmtpbmdQaWNrbGVyLmR1bXBzKG9iaikpCiAKICAgICBkZWYgcmVjdl9ieXRlcyhzZWxmLCBtYXhsZW5ndGg9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtMjQ5LDcgKzI0OCw3IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIHNlbGYuX2NoZWNrX3JlYWRhYmxlKCkKICAgICAgICAgYnVmID0gc2VsZi5fcmVjdl9ieXRlcygpCi0gICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICByZXR1cm4gRm9ya2luZ1BpY2tsZXIubG9hZHMoYnVmLmdldGJ1ZmZlcigpKQogCiAgICAgZGVmIHBvbGwoc2VsZiwgdGltZW91dD0wLjApOgogICAgICAgICAiIiJXaGV0aGVyIHRoZXJlIGlzIGFueSBpbnB1dCBhdmFpbGFibGUgdG8gYmUgcmVhZCIiIgpAQCAtMzE3LDcgKzMxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYKICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgZXJyID09IF93aW5hcGkuRVJST1JfTU9SRV9EQVRBOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfbW9yZV9kYXRhKG92LCBtYXhzaXplKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSBfd2luYXBpLkVSUk9SX0JST0tFTl9QSVBFOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTM4OSw3ICszODgsNyBAQAogICAgICAgICAgICAgICAgIGlmIHJlbWFpbmluZyA9PSBzaXplOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImdvdCBlbmQgb2YgZmlsZSBkdXJpbmcgbWVzc2FnZSIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImdvdCBlbmQgb2YgZmlsZSBkdXJpbmcgbWVzc2FnZSIpCiAgICAgICAgICAgICBidWYud3JpdGUoY2h1bmspCiAgICAgICAgICAgICByZW1haW5pbmcgLT0gbgogICAgICAgICByZXR1cm4gYnVmCkBAIC00NTksNyArNDU4LDcgQEAKICAgICAgICAgUmV0dXJucyBhIGBDb25uZWN0aW9uYCBvYmplY3QuCiAgICAgICAgICcnJwogICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignbGlzdGVuZXIgaXMgY2xvc2VkJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2xpc3RlbmVyIGlzIGNsb3NlZCcpCiAgICAgICAgIGMgPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQogICAgICAgICBpZiBzZWxmLl9hdXRoa2V5OgogICAgICAgICAgICAgZGVsaXZlcl9jaGFsbGVuZ2UoYywgc2VsZi5fYXV0aGtleSkKQEAgLTU0NSw3ICs1NDQsOSBAQAogICAgICAgICAgICAgX3dpbmFwaS5GSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSwKICAgICAgICAgICAgIF93aW5hcGkuUElQRV9UWVBFX01FU1NBR0UgfCBfd2luYXBpLlBJUEVfUkVBRE1PREVfTUVTU0FHRSB8CiAgICAgICAgICAgICBfd2luYXBpLlBJUEVfV0FJVCwKLSAgICAgICAgICAgIDEsIG9ic2l6ZSwgaWJzaXplLCBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLCBfd2luYXBpLk5VTEwKKyAgICAgICAgICAgIDEsIG9ic2l6ZSwgaWJzaXplLCBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLAorICAgICAgICAgICAgIyBkZWZhdWx0IHNlY3VyaXR5IGRlc2NyaXB0b3I6IHRoZSBoYW5kbGUgY2Fubm90IGJlIGluaGVyaXRlZAorICAgICAgICAgICAgX3dpbmFwaS5OVUxMCiAgICAgICAgICAgICApCiAgICAgICAgIGgyID0gX3dpbmFwaS5DcmVhdGVGaWxlKAogICAgICAgICAgICAgYWRkcmVzcywgYWNjZXNzLCAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKQEAgLTU5MCw3ICs1OTEsNyBAQAogICAgICAgICBzZWxmLl9sYXN0X2FjY2VwdGVkID0gTm9uZQogCiAgICAgICAgIGlmIGZhbWlseSA9PSAnQUZfVU5JWCc6Ci0gICAgICAgICAgICBzZWxmLl91bmxpbmsgPSBGaW5hbGl6ZSgKKyAgICAgICAgICAgIHNlbGYuX3VubGluayA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICAgICAgc2VsZiwgb3MudW5saW5rLCBhcmdzPShhZGRyZXNzLCksIGV4aXRwcmlvcml0eT0wCiAgICAgICAgICAgICAgICAgKQogICAgICAgICBlbHNlOgpAQCAtNjM4LDggKzYzOSw4IEBACiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcXVldWUgPSBbc2VsZi5fbmV3X2hhbmRsZShmaXJzdD1UcnVlKV0KIAogICAgICAgICAgICAgc2VsZi5fbGFzdF9hY2NlcHRlZCA9IE5vbmUKLSAgICAgICAgICAgIHN1Yl9kZWJ1ZygnbGlzdGVuZXIgY3JlYXRlZCB3aXRoIGFkZHJlc3M9JXInLCBzZWxmLl9hZGRyZXNzKQotICAgICAgICAgICAgc2VsZi5jbG9zZSA9IEZpbmFsaXplKAorICAgICAgICAgICAgdXRpbC5zdWJfZGVidWcoJ2xpc3RlbmVyIGNyZWF0ZWQgd2l0aCBhZGRyZXNzPSVyJywgc2VsZi5fYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UgPSB1dGlsLkZpbmFsaXplKAogICAgICAgICAgICAgICAgIHNlbGYsIFBpcGVMaXN0ZW5lci5fZmluYWxpemVfcGlwZV9saXN0ZW5lciwKICAgICAgICAgICAgICAgICBhcmdzPShzZWxmLl9oYW5kbGVfcXVldWUsIHNlbGYuX2FkZHJlc3MpLCBleGl0cHJpb3JpdHk9MAogICAgICAgICAgICAgICAgICkKQEAgLTY4MSw3ICs2ODIsNyBAQAogCiAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgZGVmIF9maW5hbGl6ZV9waXBlX2xpc3RlbmVyKHF1ZXVlLCBhZGRyZXNzKToKLSAgICAgICAgICAgIHN1Yl9kZWJ1ZygnY2xvc2luZyBsaXN0ZW5lciB3aXRoIGFkZHJlc3M9JXInLCBhZGRyZXNzKQorICAgICAgICAgICAgdXRpbC5zdWJfZGVidWcoJ2Nsb3NpbmcgbGlzdGVuZXIgd2l0aCBhZGRyZXNzPSVyJywgYWRkcmVzcykKICAgICAgICAgICAgIGZvciBoYW5kbGUgaW4gcXVldWU6CiAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoYW5kbGUpCiAKQEAgLTY5OCw3ICs2OTksNyBAQAogICAgICAgICAgICAgICAgICAgICAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKICAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgX3dpbmFwaS5OVUxMCiAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciBub3QgaW4gKF93aW5hcGkuRVJST1JfU0VNX1RJTUVPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuRVJST1JfUElQRV9CVVNZKSBvciBfY2hlY2tfdGltZW91dCh0KToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTcyNyw3ICs3MjgsNyBAQAogICAgIGFzc2VydCBpc2luc3RhbmNlKGF1dGhrZXksIGJ5dGVzKQogICAgIG1lc3NhZ2UgPSBvcy51cmFuZG9tKE1FU1NBR0VfTEVOR1RIKQogICAgIGNvbm5lY3Rpb24uc2VuZF9ieXRlcyhDSEFMTEVOR0UgKyBtZXNzYWdlKQotICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UpLmRpZ2VzdCgpCisgICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSwgJ21kNScpLmRpZ2VzdCgpCiAgICAgcmVzcG9uc2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgIyByZWplY3QgbGFyZ2UgbWVzc2FnZQogICAgIGlmIHJlc3BvbnNlID09IGRpZ2VzdDoKICAgICAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKFdFTENPTUUpCkBAIC03NDEsNyArNzQyLDcgQEAKICAgICBtZXNzYWdlID0gY29ubmVjdGlvbi5yZWN2X2J5dGVzKDI1NikgICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgYXNzZXJ0IG1lc3NhZ2VbOmxlbihDSEFMTEVOR0UpXSA9PSBDSEFMTEVOR0UsICdtZXNzYWdlID0gJXInICUgbWVzc2FnZQogICAgIG1lc3NhZ2UgPSBtZXNzYWdlW2xlbihDSEFMTEVOR0UpOl0KLSAgICBkaWdlc3QgPSBobWFjLm5ldyhhdXRoa2V5LCBtZXNzYWdlKS5kaWdlc3QoKQorICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UsICdtZDUnKS5kaWdlc3QoKQogICAgIGNvbm5lY3Rpb24uc2VuZF9ieXRlcyhkaWdlc3QpCiAgICAgcmVzcG9uc2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgIyByZWplY3QgbGFyZ2UgbWVzc2FnZQogICAgIGlmIHJlc3BvbnNlICE9IFdFTENPTUU6CkBAIC04ODQsMjggKzg4NSwxNSBAQAogCiBlbHNlOgogCi0gICAgaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6Ci0gICAgICAgIGRlZiBfcG9sbChmZHMsIHRpbWVvdXQpOgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gaW50KHRpbWVvdXQgKiAxMDAwKSAgIyB0aW1lb3V0IGlzIGluIG1pbGxpc2Vjb25kcwotICAgICAgICAgICAgZmRfbWFwID0ge30KLSAgICAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKLSAgICAgICAgICAgICAgICBwb2xsc3Rlci5yZWdpc3RlcihmZCwgc2VsZWN0LlBPTExJTikKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZkLCAnZmlsZW5vJyk6Ci0gICAgICAgICAgICAgICAgICAgIGZkX21hcFtmZC5maWxlbm8oKV0gPSBmZAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZkX21hcFtmZF0gPSBmZAotICAgICAgICAgICAgbHMgPSBbXQotICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBwb2xsc3Rlci5wb2xsKHRpbWVvdXQpOgotICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgc2VsZWN0LlBPTExOVkFMOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciAlaScgJSBmZCkKLSAgICAgICAgICAgICAgICBscy5hcHBlbmQoZmRfbWFwW2ZkXSkKLSAgICAgICAgICAgIHJldHVybiBscwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiBfcG9sbChmZHMsIHRpbWVvdXQpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGVjdC5zZWxlY3QoZmRzLCBbXSwgW10sIHRpbWVvdXQpWzBdCisgICAgaW1wb3J0IHNlbGVjdG9ycwogCisgICAgIyBwb2xsL3NlbGVjdCBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHJlcXVpcmluZyBhbnkgZXh0cmEgZmlsZQorICAgICMgZGVzY3JpcHRvciwgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZQorICAgICMgc3lzY2FsbCkuCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgX1dhaXRTZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBfV2FpdFNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCiAKICAgICBkZWYgd2FpdChvYmplY3RfbGlzdCwgdGltZW91dD1Ob25lKToKICAgICAgICAgJycnCkBAIC05MTMsMzQgKzkwMSw1NCBAQAogCiAgICAgICAgIFJldHVybnMgbGlzdCBvZiB0aG9zZSBvYmplY3RzIGluIG9iamVjdF9saXN0IHdoaWNoIGFyZSByZWFkeS9yZWFkYWJsZS4KICAgICAgICAgJycnCi0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9wb2xsKG9iamVjdF9saXN0LCAwKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBfcG9sbChvYmplY3RfbGlzdCwgdGltZW91dCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgd2l0aCBfV2FpdFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBmb3Igb2JqIGluIG9iamVjdF9saXN0OgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKG9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgaWYgcmVhZHk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBba2V5LmZpbGVvYmogZm9yIChrZXksIGV2ZW50cykgaW4gcmVhZHldCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKIAogIwogIyBNYWtlIGNvbm5lY3Rpb24gYW5kIHNvY2tldCBvYmplY3RzIHNoYXJhYmxlIGlmIHBvc3NpYmxlCiAjCiAKIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgcmVkdWN0aW9uLnJlZHVjZV9zb2NrZXQpCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWN0aW9uLnJlZHVjZV9jb25uZWN0aW9uKQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKFBpcGVDb25uZWN0aW9uLCByZWR1Y3Rpb24ucmVkdWNlX3BpcGVfY29ubmVjdGlvbikKKyAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGhhbmRsZSA9IGNvbm4uZmlsZW5vKCkKKyAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGhhbmRsZSwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCisgICAgICAgICAgICBkcyA9IHJlc291cmNlX3NoYXJlci5EdXBTb2NrZXQocykKKyAgICAgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkcywgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRzLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y2VfY29ubmVjdGlvbikKKworICAgIGRlZiByZWR1Y2VfcGlwZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBhY2Nlc3MgPSAoKF93aW5hcGkuRklMRV9HRU5FUklDX1JFQUQgaWYgY29ubi5yZWFkYWJsZSBlbHNlIDApIHwKKyAgICAgICAgICAgICAgICAgIChfd2luYXBpLkZJTEVfR0VORVJJQ19XUklURSBpZiBjb25uLndyaXRhYmxlIGVsc2UgMCkpCisgICAgICAgIGRoID0gcmVkdWN0aW9uLkR1cEhhbmRsZShjb25uLmZpbGVubygpLCBhY2Nlc3MpCisgICAgICAgIHJldHVybiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbiwgKGRoLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQorICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihQaXBlQ29ubmVjdGlvbiwgcmVkdWNlX3BpcGVfY29ubmVjdGlvbikKKwogZWxzZToKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgcmVkdWN0aW9uLnJlZHVjZV9zb2NrZXQpCi0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjdGlvbi5yZWR1Y2VfY29ubmVjdGlvbikKKyAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGRmID0gcmVkdWN0aW9uLkR1cEZkKGNvbm4uZmlsZW5vKCkpCisgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRmLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBmZCA9IGRmLmRldGFjaCgpCisgICAgICAgIHJldHVybiBDb25uZWN0aW9uKGZkLCByZWFkYWJsZSwgd3JpdGFibGUpCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjZV9jb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODQ5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2NvbnRleHQucHkKQEAgLTAsMCArMSwzNDggQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKKworX19hbGxfXyA9IFtdICAgICAgICAgICAgIyB0aGluZ3MgYXJlIGNvcGllZCBmcm9tIGhlcmUgdG8gX19pbml0X18ucHkKKworIworIyBFeGNlcHRpb25zCisjCisKK2NsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworIworIyBCYXNlIHR5cGUgZm9yIGNvbnRleHRzCisjCisKK2NsYXNzIEJhc2VDb250ZXh0KG9iamVjdCk6CisKKyAgICBQcm9jZXNzRXJyb3IgPSBQcm9jZXNzRXJyb3IKKyAgICBCdWZmZXJUb29TaG9ydCA9IEJ1ZmZlclRvb1Nob3J0CisgICAgVGltZW91dEVycm9yID0gVGltZW91dEVycm9yCisgICAgQXV0aGVudGljYXRpb25FcnJvciA9IEF1dGhlbnRpY2F0aW9uRXJyb3IKKworICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcykKKyAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QocHJvY2Vzcy5hY3RpdmVfY2hpbGRyZW4pCisKKyAgICBkZWYgY3B1X2NvdW50KHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtJycnCisgICAgICAgIG51bSA9IG9zLmNwdV9jb3VudCgpCisgICAgICAgIGlmIG51bSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbnVtCisKKyAgICBkZWYgTWFuYWdlcihzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoIGEgcnVubmluZyBzZXJ2ZXIgcHJvY2VzcworCisgICAgICAgIFRoZSBtYW5hZ2VycyBtZXRob2RzIHN1Y2ggYXMgYExvY2soKWAsIGBDb25kaXRpb24oKWAgYW5kIGBRdWV1ZSgpYAorICAgICAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC5tYW5hZ2VycyBpbXBvcnQgU3luY01hbmFnZXIKKyAgICAgICAgbSA9IFN5bmNNYW5hZ2VyKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisgICAgICAgIG0uc3RhcnQoKQorICAgICAgICByZXR1cm4gbQorCisgICAgZGVmIFBpcGUoc2VsZiwgZHVwbGV4PVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIHR3byBjb25uZWN0aW9uIG9iamVjdCBjb25uZWN0ZWQgYnkgYSBwaXBlJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKKyAgICAgICAgcmV0dXJuIFBpcGUoZHVwbGV4KQorCisgICAgZGVmIExvY2soc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSBub24tcmVjdXJzaXZlIGxvY2sgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBMb2NrCisgICAgICAgIHJldHVybiBMb2NrKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUkxvY2soc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSByZWN1cnNpdmUgbG9jayBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IFJMb2NrCisgICAgICAgIHJldHVybiBSTG9jayhjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIENvbmRpdGlvbihzZWxmLCBsb2NrPU5vbmUpOgorICAgICAgICAnJydSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQ29uZGl0aW9uCisgICAgICAgIHJldHVybiBDb25kaXRpb24obG9jaywgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBTZW1hcGhvcmUoc2VsZiwgdmFsdWU9MSk6CisgICAgICAgICcnJ1JldHVybnMgYSBzZW1hcGhvcmUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBTZW1hcGhvcmUKKyAgICAgICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBCb3VuZGVkU2VtYXBob3JlKHNlbGYsIHZhbHVlPTEpOgorICAgICAgICAnJydSZXR1cm5zIGEgYm91bmRlZCBzZW1hcGhvcmUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCisgICAgICAgIHJldHVybiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEV2ZW50KHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGFuIGV2ZW50IG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgRXZlbnQKKyAgICAgICAgcmV0dXJuIEV2ZW50KGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQmFycmllcihzZWxmLCBwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBCYXJyaWVyCisgICAgICAgIHJldHVybiBCYXJyaWVyKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBRdWV1ZShzZWxmLCBtYXhzaXplPTApOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgUXVldWUKKyAgICAgICAgcmV0dXJuIFF1ZXVlKG1heHNpemUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgSm9pbmFibGVRdWV1ZShzZWxmLCBtYXhzaXplPTApOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQorICAgICAgICByZXR1cm4gSm9pbmFibGVRdWV1ZShtYXhzaXplLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFNpbXBsZVF1ZXVlKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUKKyAgICAgICAgcmV0dXJuIFNpbXBsZVF1ZXVlKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUG9vbChzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksCisgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIHByb2Nlc3MgcG9vbCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAucG9vbCBpbXBvcnQgUG9vbAorICAgICAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncywgbWF4dGFza3NwZXJjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUmF3VmFsdWUoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgorICAgICAgICAnJydSZXR1cm5zIGEgc2hhcmVkIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd1ZhbHVlCisgICAgICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKKworICAgIGRlZiBSYXdBcnJheShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKToKKyAgICAgICAgJycnUmV0dXJucyBhIHNoYXJlZCBhcnJheScnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5CisgICAgICAgIHJldHVybiBSYXdBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKQorCisgICAgZGVmIFZhbHVlKHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBWYWx1ZQorICAgICAgICByZXR1cm4gVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9bG9jaywKKyAgICAgICAgICAgICAgICAgICAgIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQXJyYXkoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgYXJyYXknJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQorICAgICAgICByZXR1cm4gQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgbG9jaz1sb2NrLAorICAgICAgICAgICAgICAgICAgICAgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBmcmVlemVfc3VwcG9ydChzZWxmKToKKyAgICAgICAgJycnQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgZmFrZSBmb3JrZWQgcHJvY2VzcyBpbiBhIGZyb3plbiBleGVjdXRhYmxlLgorICAgICAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKKyAgICAgICAgICAgIGZyb20gLnNwYXduIGltcG9ydCBmcmVlemVfc3VwcG9ydAorICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQorCisgICAgZGVmIGdldF9sb2dnZXIoc2VsZik6CisgICAgICAgICcnJ1JldHVybiBwYWNrYWdlIGxvZ2dlciAtLSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IHRoZW4KKyAgICAgICAgaXQgaXMgY3JlYXRlZC4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGdldF9sb2dnZXIKKyAgICAgICAgcmV0dXJuIGdldF9sb2dnZXIoKQorCisgICAgZGVmIGxvZ190b19zdGRlcnIoc2VsZiwgbGV2ZWw9Tm9uZSk6CisgICAgICAgICcnJ1R1cm4gb24gbG9nZ2luZyBhbmQgYWRkIGEgaGFuZGxlciB3aGljaCBwcmludHMgdG8gc3RkZXJyJycnCisgICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKKyAgICAgICAgcmV0dXJuIGxvZ190b19zdGRlcnIobGV2ZWwpCisKKyAgICBkZWYgYWxsb3dfY29ubmVjdGlvbl9waWNrbGluZyhzZWxmKToKKyAgICAgICAgJycnSW5zdGFsbCBzdXBwb3J0IGZvciBzZW5kaW5nIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzCisgICAgICAgIGJldHdlZW4gcHJvY2Vzc2VzCisgICAgICAgICcnJworICAgICAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICMgaXRzIG9ubHkgZWZmZWN0IHdhcyB0byBtYWtlIHNvY2tldCBvYmplY3RzIGluaGVyaXRhYmxlIG9uIFdpbmRvd3MuCisgICAgICAgIGZyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorCisgICAgZGVmIHNldF9leGVjdXRhYmxlKHNlbGYsIGV4ZWN1dGFibGUpOgorICAgICAgICAnJydTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KKyAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIGluc3RlYWQgb2Ygc3lzLmV4ZWN1dGFibGUgd2hlbiB1c2luZyB0aGUgJ3NwYXduJworICAgICAgICBzdGFydCBtZXRob2QuICBVc2VmdWwgZm9yIHBlb3BsZSBlbWJlZGRpbmcgUHl0aG9uLgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAuc3Bhd24gaW1wb3J0IHNldF9leGVjdXRhYmxlCisgICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCisKKyAgICBkZWYgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChzZWxmLCBtb2R1bGVfbmFtZXMpOgorICAgICAgICAnJydTZXQgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdG8gdHJ5IHRvIGxvYWQgaW4gZm9ya3NlcnZlciBwcm9jZXNzLgorICAgICAgICBUaGlzIGlzIHJlYWxseSBqdXN0IGEgaGludC4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLmZvcmtzZXJ2ZXIgaW1wb3J0IHNldF9mb3Jrc2VydmVyX3ByZWxvYWQKKyAgICAgICAgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChtb2R1bGVfbmFtZXMpCisKKyAgICBkZWYgZ2V0X2NvbnRleHQoc2VsZiwgbWV0aG9kPU5vbmUpOgorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN0eCA9IF9jb25jcmV0ZV9jb250ZXh0c1ttZXRob2RdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBmaW5kIGNvbnRleHQgZm9yICVyJyAlIG1ldGhvZCkKKyAgICAgICAgY3R4Ll9jaGVja19hdmFpbGFibGUoKQorICAgICAgICByZXR1cm4gY3R4CisKKyAgICBkZWYgZ2V0X3N0YXJ0X21ldGhvZChzZWxmLCBhbGxvd19ub25lPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBzZXRfc3RhcnRfbWV0aG9kKHNlbGYsIG1ldGhvZD1Ob25lKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2Fubm90IHNldCBzdGFydCBtZXRob2Qgb2YgY29uY3JldGUgY29udGV4dCcpCisKKyAgICBkZWYgX2NoZWNrX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgcGFzcworCisjCisjIFR5cGUgb2YgZGVmYXVsdCBjb250ZXh0IC0tIHVuZGVybHlpbmcgY29udGV4dCBjYW4gYmUgc2V0IGF0IG1vc3Qgb25jZQorIworCitjbGFzcyBQcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgIF9zdGFydF9tZXRob2QgPSBOb25lCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICByZXR1cm4gX2RlZmF1bHRfY29udGV4dC5nZXRfY29udGV4dCgpLlByb2Nlc3MuX1BvcGVuKHByb2Nlc3Nfb2JqKQorCitjbGFzcyBEZWZhdWx0Q29udGV4dChCYXNlQ29udGV4dCk6CisgICAgUHJvY2VzcyA9IFByb2Nlc3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0KToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9jb250ZXh0ID0gY29udGV4dAorICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IE5vbmUKKworICAgIGRlZiBnZXRfY29udGV4dChzZWxmLCBtZXRob2Q9Tm9uZSk6CisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuX2RlZmF1bHRfY29udGV4dAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FjdHVhbF9jb250ZXh0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfY29udGV4dChtZXRob2QpCisKKyAgICBkZWYgc2V0X3N0YXJ0X21ldGhvZChzZWxmLCBtZXRob2QsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgbm90IE5vbmUgYW5kIG5vdCBmb3JjZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY29udGV4dCBoYXMgYWxyZWFkeSBiZWVuIHNldCcpCisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lIGFuZCBmb3JjZToKKyAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5nZXRfY29udGV4dChtZXRob2QpCisKKyAgICBkZWYgZ2V0X3N0YXJ0X21ldGhvZChzZWxmLCBhbGxvd19ub25lPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGFsbG93X25vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5fZGVmYXVsdF9jb250ZXh0CisgICAgICAgIHJldHVybiBzZWxmLl9hY3R1YWxfY29udGV4dC5fbmFtZQorCisgICAgZGVmIGdldF9hbGxfc3RhcnRfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICByZXR1cm4gWydzcGF3biddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorICAgICAgICAgICAgaWYgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnZm9yaycsICdzcGF3biddCisKK0RlZmF1bHRDb250ZXh0Ll9fYWxsX18gPSBsaXN0KHggZm9yIHggaW4gZGlyKERlZmF1bHRDb250ZXh0KSBpZiB4WzBdICE9ICdfJykKKworIworIyBDb250ZXh0IHR5cGVzIGZvciBmaXhlZCBzdGFydCBtZXRob2QKKyMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisKKyAgICBjbGFzcyBGb3JrUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdmb3JrJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fZm9yayBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIFNwYXduUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdzcGF3bicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX3NwYXduX3Bvc2l4IGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgRm9ya1NlcnZlclByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX2ZvcmtzZXJ2ZXIgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBGb3JrQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ2ZvcmsnCisgICAgICAgIFByb2Nlc3MgPSBGb3JrUHJvY2VzcworCisgICAgY2xhc3MgU3Bhd25Db250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnc3Bhd24nCisgICAgICAgIFByb2Nlc3MgPSBTcGF3blByb2Nlc3MKKworICAgIGNsYXNzIEZvcmtTZXJ2ZXJDb250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnZm9ya3NlcnZlcicKKyAgICAgICAgUHJvY2VzcyA9IEZvcmtTZXJ2ZXJQcm9jZXNzCisgICAgICAgIGRlZiBfY2hlY2tfYXZhaWxhYmxlKHNlbGYpOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KKyAgICAgICAgICAgIGlmIG5vdCByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdmb3Jrc2VydmVyIHN0YXJ0IG1ldGhvZCBub3QgYXZhaWxhYmxlJykKKworICAgIF9jb25jcmV0ZV9jb250ZXh0cyA9IHsKKyAgICAgICAgJ2ZvcmsnOiBGb3JrQ29udGV4dCgpLAorICAgICAgICAnc3Bhd24nOiBTcGF3bkNvbnRleHQoKSwKKyAgICAgICAgJ2ZvcmtzZXJ2ZXInOiBGb3JrU2VydmVyQ29udGV4dCgpLAorICAgIH0KKyAgICBfZGVmYXVsdF9jb250ZXh0ID0gRGVmYXVsdENvbnRleHQoX2NvbmNyZXRlX2NvbnRleHRzWydmb3JrJ10pCisKK2Vsc2U6CisKKyAgICBjbGFzcyBTcGF3blByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnc3Bhd24nCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9zcGF3bl93aW4zMiBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIFNwYXduQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ3NwYXduJworICAgICAgICBQcm9jZXNzID0gU3Bhd25Qcm9jZXNzCisKKyAgICBfY29uY3JldGVfY29udGV4dHMgPSB7CisgICAgICAgICdzcGF3bic6IFNwYXduQ29udGV4dCgpLAorICAgIH0KKyAgICBfZGVmYXVsdF9jb250ZXh0ID0gRGVmYXVsdENvbnRleHQoX2NvbmNyZXRlX2NvbnRleHRzWydzcGF3biddKQorCisjCisjIEZvcmNlIHRoZSBzdGFydCBtZXRob2QKKyMKKworZGVmIF9mb3JjZV9zdGFydF9tZXRob2QobWV0aG9kKToKKyAgICBfZGVmYXVsdF9jb250ZXh0Ll9hY3R1YWxfY29udGV4dCA9IF9jb25jcmV0ZV9jb250ZXh0c1ttZXRob2RdCisKKyMKKyMgQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgaXMgc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCisjCisKK190bHMgPSB0aHJlYWRpbmcubG9jYWwoKQorCitkZWYgZ2V0X3NwYXduaW5nX3BvcGVuKCk6CisgICAgcmV0dXJuIGdldGF0dHIoX3RscywgJ3NwYXduaW5nX3BvcGVuJywgTm9uZSkKKworZGVmIHNldF9zcGF3bmluZ19wb3Blbihwb3Blbik6CisgICAgX3Rscy5zcGF3bmluZ19wb3BlbiA9IHBvcGVuCisKK2RlZiBhc3NlcnRfc3Bhd25pbmcob2JqKToKKyAgICBpZiBnZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBOb25lOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAnJXMgb2JqZWN0cyBzaG91bGQgb25seSBiZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMnCisgICAgICAgICAgICAnIHRocm91Z2ggaW5oZXJpdGFuY2UnICUgdHlwZShvYmopLl9fbmFtZV9fCisgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQppbmRleCBlMzFmYzYxLi4xMzVkYjdmIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKICMKICMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jCi0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCi0jICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0jICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0jIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0jIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotIyBTVUNIIERBTUFHRS4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCiBfX2FsbF9fID0gWwpAQCAtNDcsNyArMjIsNyBAQAogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBhcnJheQogCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uIGltcG9ydCBQaXBlCitmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBQaXBlCiBmcm9tIHRocmVhZGluZyBpbXBvcnQgTG9jaywgUkxvY2ssIFNlbWFwaG9yZSwgQm91bmRlZFNlbWFwaG9yZQogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IEV2ZW50LCBDb25kaXRpb24sIEJhcnJpZXIKIGZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCkBAIC0xMjksNyArMTA0LDcgQEAKICAgICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZQogICAgIHZhbHVlID0gcHJvcGVydHkoX2dldCwgX3NldCkKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnPCVyKCVyLCAlcik+JyUodHlwZShzZWxmKS5fX25hbWVfXyxzZWxmLl90eXBlY29kZSxzZWxmLl92YWx1ZSkKKyAgICAgICAgcmV0dXJuICc8JXMoJXIsICVyKT4nJSh0eXBlKHNlbGYpLl9fbmFtZV9fLHNlbGYuX3R5cGVjb2RlLHNlbGYuX3ZhbHVlKQogCiBkZWYgTWFuYWdlcigpOgogICAgIHJldHVybiBzeXMubW9kdWxlc1tfX25hbWVfX10KQEAgLTEzOCw3ICsxMTMsNyBAQAogICAgIHBhc3MKIAogZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBUaHJlYWRQb29sCisgICAgZnJvbSAuLnBvb2wgaW1wb3J0IFRocmVhZFBvb2wKICAgICByZXR1cm4gVGhyZWFkUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncykKIAogSm9pbmFibGVRdWV1ZSA9IFF1ZXVlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKaW5kZXggODc0ZWM4ZS4uNjk0ZWY5NiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQpAQCAtNCwzMiArNCw3IEBACiAjIG11bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CiAjCiAjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIwotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQotIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSMgU1VDSCBEQU1BR0UuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAogX19hbGxfXyA9IFsgJ0NsaWVudCcsICdMaXN0ZW5lcicsICdQaXBlJyBdCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OTk3OGEuLjAwMDAwMDAKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDc0ICswLDAgQEAKLSMKLSMgTW9kdWxlIGZvciBzdGFydGluZyBhIHByb2Nlc3Mgb2JqZWN0IHVzaW5nIG9zLmZvcmsoKSBvciBDcmVhdGVQcm9jZXNzKCkKLSMKLSMgbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0jCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHNpZ25hbAotaW1wb3J0IGVycm5vCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCB1dGlsLCBwcm9jZXNzCi0KLV9fYWxsX18gPSBbJ1BvcGVuJywgJ2Fzc2VydF9zcGF3bmluZycsICdkdXBsaWNhdGUnLCAnY2xvc2UnLCAnRm9ya2luZ1BpY2tsZXInXQotCi0jCi0jIENoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcwotIwotCi1kZWYgYXNzZXJ0X3NwYXduaW5nKHNlbGYpOgotICAgIGlmIG5vdCBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgJyVzIG9iamVjdHMgc2hvdWxkIG9ubHkgYmUgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzJwotICAgICAgICAgICAgJyB0aHJvdWdoIGluaGVyaXRhbmNlJyAlIHR5cGUoc2VsZikuX19uYW1lX18KLSAgICAgICAgICAgICkKLQotIwotIyBUcnkgbWFraW5nIHNvbWUgY2FsbGFibGUgdHlwZXMgcGlja2xhYmxlCi0jCi0KLWZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVyCi1mcm9tIGNvcHlyZWcgaW1wb3J0IGRpc3BhdGNoX3RhYmxlCi0KLWNsYXNzIEZvcmtpbmdQaWNrbGVyKFBpY2tsZXIpOgotICAgIF9leHRyYV9yZWR1Y2VycyA9IHt9Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgUGlja2xlci5fX2luaXRfXyhzZWxmLCAqYXJncykKLSAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZSA9IGRpc3BhdGNoX3RhYmxlLmNvcHkoKQotICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlLnVwZGF0ZShzZWxmLl9leHRyYV9yZWR1Y2VycykKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcmVnaXN0ZXIoY2xzLCB0eXBlLCByZWR1Y2UpOgotICAgICAgICBjbHMuX2V4dHJhX3JlZHVjZXJzW3R5cGVdID0gcmVkdWNlCi0KLWRlZiBfcmVkdWNlX21ldGhvZChtKToKLSAgICBpZiBtLl9fc2VsZl9fIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX2NsYXNzX18sIG0uX19mdW5jX18uX19uYW1lX18pCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fc2VsZl9fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQotY2xhc3MgX0M6Ci0gICAgZGVmIGYoc2VsZik6Ci0gICAgICAgIHBhc3MKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUoX0MoKS5mKSwgX3JlZHVjZV9tZXRob2QpCi0KLQotZGVmIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IobSk6Ci0gICAgcmV0dXJuIGdldGF0dHIsIChtLl9fb2JqY2xhc3NfXywgbS5fX25hbWVfXykKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUobGlzdC5hcHBlbmQpLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQotRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIodHlwZShpbnQuX19hZGRfXyksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCi0KLXRyeToKLSAgICBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgZGVmIF9yZWR1Y2VfcGFydGlhbChwKToKLSAgICAgICAgcmV0dXJuIF9yZWJ1aWxkX3BhcnRpYWwsIChwLmZ1bmMsIHAuYXJncywgcC5rZXl3b3JkcyBvciB7fSkKLSAgICBkZWYgX3JlYnVpbGRfcGFydGlhbChmdW5jLCBhcmdzLCBrZXl3b3Jkcyk6Ci0gICAgICAgIHJldHVybiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHBhcnRpYWwsIF9yZWR1Y2VfcGFydGlhbCkKLQotIwotIyBVbml4Ci0jCi0KLWlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgotICAgIGR1cGxpY2F0ZSA9IG9zLmR1cAotICAgIGNsb3NlID0gb3MuY2xvc2UKLQotICAgICMKLSAgICAjIFdlIGRlZmluZSBhIFBvcGVuIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmcm9tIHN1YnByb2Nlc3MsIGJ1dAotICAgICMgd2hvc2UgY29uc3RydWN0b3IgdGFrZXMgYSBwcm9jZXNzIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuCi0gICAgIwotCi0gICAgY2xhc3MgUG9wZW4ob2JqZWN0KToKLQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKLQotICAgICAgICAgICAgciwgdyA9IG9zLnBpcGUoKQotICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IHIKLQotICAgICAgICAgICAgc2VsZi5waWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgIGlmIHNlbGYucGlkID09IDA6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UocikKLSAgICAgICAgICAgICAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQotICAgICAgICAgICAgICAgICAgICByYW5kb20uc2VlZCgpCi0gICAgICAgICAgICAgICAgY29kZSA9IHByb2Nlc3Nfb2JqLl9ib290c3RyYXAoKQotICAgICAgICAgICAgICAgIG9zLl9leGl0KGNvZGUpCi0KLSAgICAgICAgICAgICMgYHdgIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGNoaWxkIGV4aXRzLCBhdCB3aGljaCBwb2ludCBgcmAKLSAgICAgICAgICAgICMgd2lsbCBiZWNvbWUgcmVhZHkgZm9yIHJlYWRpbmcgKHVzaW5nIGUuZy4gc2VsZWN0KCkpLgotICAgICAgICAgICAgb3MuY2xvc2UodykKLSAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChyLCkpCi0KLSAgICAgICAgZGVmIHBvbGwoc2VsZiwgZmxhZz1vcy5XTk9IQU5HKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgc3RzID0gb3Mud2FpdHBpZChzZWxmLnBpZCwgZmxhZykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgbm90IHlldCBjcmVhdGVkLiBTZWUgIzE3MzE3MTcKLSAgICAgICAgICAgICAgICAgICAgICAgICMgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQgPT0gMTAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKLSAgICAgICAgICAgICAgICAgICAgaWYgb3MuV0lGU0lHTkFMRUQoc3RzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IC1vcy5XVEVSTVNJRyhzdHMpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MuV0lGRVhJVEVEKHN0cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IG9zLldFWElUU1RBVFVTKHN0cykKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgd2FpdChbc2VsZi5zZW50aW5lbF0sIHRpbWVvdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb2NrIGlmIHdhaXQoKSByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucG9sbChvcy5XTk9IQU5HIGlmIHRpbWVvdXQgPT0gMC4wIGVsc2UgMCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYucGlkLCBzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi53YWl0KHRpbWVvdXQ9MC4xKSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiB0aHJlYWRfaXNfc3Bhd25pbmcoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0jCi0jIFdpbmRvd3MKLSMKLQotZWxzZToKLSAgICBpbXBvcnQgX3RocmVhZAotICAgIGltcG9ydCBtc3ZjcnQKLSAgICBpbXBvcnQgX3dpbmFwaQotCi0gICAgZnJvbSBwaWNrbGUgaW1wb3J0IGxvYWQsIEhJR0hFU1RfUFJPVE9DT0wKLQotICAgIGRlZiBkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSk6Ci0gICAgICAgIEZvcmtpbmdQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iaikKLQotICAgICMKLSAgICAjCi0gICAgIwotCi0gICAgVEVSTUlOQVRFID0gMHgxMDAwMAotICAgIFdJTkVYRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSkpCi0gICAgV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKLQotICAgIGNsb3NlID0gX3dpbmFwaS5DbG9zZUhhbmRsZQotCi0gICAgIwotICAgICMgX3B5dGhvbl9leGUgaXMgdGhlIGFzc3VtZWQgcGF0aCB0byB0aGUgcHl0aG9uIGV4ZWN1dGFibGUuCi0gICAgIyBQZW9wbGUgZW1iZWRkaW5nIFB5dGhvbiB3YW50IHRvIG1vZGlmeSBpdC4KLSAgICAjCi0KLSAgICBpZiBXSU5TRVJWSUNFOgotICAgICAgICBfcHl0aG9uX2V4ZSA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdweXRob24uZXhlJykKLSAgICBlbHNlOgotICAgICAgICBfcHl0aG9uX2V4ZSA9IHN5cy5leGVjdXRhYmxlCi0KLSAgICBkZWYgc2V0X2V4ZWN1dGFibGUoZXhlKToKLSAgICAgICAgZ2xvYmFsIF9weXRob25fZXhlCi0gICAgICAgIF9weXRob25fZXhlID0gZXhlCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIGRlZiBkdXBsaWNhdGUoaGFuZGxlLCB0YXJnZXRfcHJvY2Vzcz1Ob25lLCBpbmhlcml0YWJsZT1GYWxzZSk6Ci0gICAgICAgIGlmIHRhcmdldF9wcm9jZXNzIGlzIE5vbmU6Ci0gICAgICAgICAgICB0YXJnZXRfcHJvY2VzcyA9IF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKQotICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCi0gICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3MsCi0gICAgICAgICAgICAwLCBpbmhlcml0YWJsZSwgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MKLSAgICAgICAgICAgICkKLQotICAgICMKLSAgICAjIFdlIGRlZmluZSBhIFBvcGVuIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmcm9tIHN1YnByb2Nlc3MsIGJ1dAotICAgICMgd2hvc2UgY29uc3RydWN0b3IgdGFrZXMgYSBwcm9jZXNzIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuCi0gICAgIwotCi0gICAgY2xhc3MgUG9wZW4ob2JqZWN0KToKLSAgICAgICAgJycnCi0gICAgICAgIFN0YXJ0IGEgc3VicHJvY2VzcyB0byBydW4gdGhlIGNvZGUgb2YgYSBwcm9jZXNzIG9iamVjdAotICAgICAgICAnJycKLSAgICAgICAgX3RscyA9IF90aHJlYWQuX2xvY2FsKCkKLQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgotICAgICAgICAgICAgY21kID0gJyAnLmpvaW4oJyIlcyInICUgeCBmb3IgeCBpbiBnZXRfY29tbWFuZF9saW5lKCkpCi0gICAgICAgICAgICBwcmVwX2RhdGEgPSBnZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKLQotICAgICAgICAgICAgIyBjcmVhdGUgcGlwZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGNoaWxkCi0gICAgICAgICAgICByZmQsIHdmZCA9IG9zLnBpcGUoKQotCi0gICAgICAgICAgICAjIGdldCBoYW5kbGUgZm9yIHJlYWQgZW5kIG9mIHRoZSBwaXBlIGFuZCBtYWtlIGl0IGluaGVyaXRhYmxlCi0gICAgICAgICAgICByaGFuZGxlID0gZHVwbGljYXRlKG1zdmNydC5nZXRfb3NmaGFuZGxlKHJmZCksIGluaGVyaXRhYmxlPVRydWUpCi0gICAgICAgICAgICBvcy5jbG9zZShyZmQpCi0KLSAgICAgICAgICAgIHdpdGggb3Blbih3ZmQsICd3YicsIGNsb3NlZmQ9VHJ1ZSkgYXMgdG9fY2hpbGQ6Ci0gICAgICAgICAgICAgICAgIyBzdGFydCBwcm9jZXNzCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBocCwgaHQsIHBpZCwgdGlkID0gX3dpbmFwaS5DcmVhdGVQcm9jZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgX3B5dGhvbl9leGUsIGNtZCArICgnICVzJyAlIHJoYW5kbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgMSwgMCwgTm9uZSwgTm9uZSwgTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGh0KQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlKHJoYW5kbGUpCi0KLSAgICAgICAgICAgICAgICAjIHNldCBhdHRyaWJ1dGVzIG9mIHNlbGYKLSAgICAgICAgICAgICAgICBzZWxmLnBpZCA9IHBpZAotICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSBocAotICAgICAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBpbnQoaHApCi0gICAgICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBfd2luYXBpLkNsb3NlSGFuZGxlLCAoc2VsZi5zZW50aW5lbCwpKQotCi0gICAgICAgICAgICAgICAgIyBzZW5kIGluZm9ybWF0aW9uIHRvIGNoaWxkCi0gICAgICAgICAgICAgICAgUG9wZW4uX3Rscy5wcm9jZXNzX2hhbmRsZSA9IGludChocCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGR1bXAocHJlcF9kYXRhLCB0b19jaGlsZCwgSElHSEVTVF9QUk9UT0NPTCkKLSAgICAgICAgICAgICAgICAgICAgZHVtcChwcm9jZXNzX29iaiwgdG9fY2hpbGQsIEhJR0hFU1RfUFJPVE9DT0wpCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgZGVsIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiB0aHJlYWRfaXNfc3Bhd25pbmcoKToKLSAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKFBvcGVuLl90bHMsICdwcm9jZXNzX2hhbmRsZScsIE5vbmUpIGlzIG5vdCBOb25lCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZHVwbGljYXRlX2Zvcl9jaGlsZChoYW5kbGUpOgotICAgICAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZShoYW5kbGUsIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUpCi0KLSAgICAgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbXNlY3MgPSBfd2luYXBpLklORklOSVRFCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbXNlY3MgPSBtYXgoMCwgaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KSkKLQotICAgICAgICAgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChpbnQoc2VsZi5faGFuZGxlKSwgbXNlY3MpCi0gICAgICAgICAgICAgICAgaWYgcmVzID09IF93aW5hcGkuV0FJVF9PQkpFQ1RfMDoKLSAgICAgICAgICAgICAgICAgICAgY29kZSA9IF93aW5hcGkuR2V0RXhpdENvZGVQcm9jZXNzKHNlbGYuX2hhbmRsZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgY29kZSA9PSBURVJNSU5BVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gLXNpZ25hbC5TSUdURVJNCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IGNvZGUKLQotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQotCi0gICAgICAgIGRlZiBwb2xsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYud2FpdCh0aW1lb3V0PTApCi0KLSAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5UZXJtaW5hdGVQcm9jZXNzKGludChzZWxmLl9oYW5kbGUpLCBURVJNSU5BVEUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTEuMCkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIGRlZiBpc19mb3JraW5nKGFyZ3YpOgotICAgICAgICAnJycKLSAgICAgICAgUmV0dXJuIHdoZXRoZXIgY29tbWFuZGxpbmUgaW5kaWNhdGVzIHdlIGFyZSBmb3JraW5nCi0gICAgICAgICcnJwotICAgICAgICBpZiBsZW4oYXJndikgPj0gMiBhbmQgYXJndlsxXSA9PSAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayc6Ci0gICAgICAgICAgICBhc3NlcnQgbGVuKGFyZ3YpID09IDMKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotCi0gICAgZGVmIGZyZWV6ZV9zdXBwb3J0KCk6Ci0gICAgICAgICcnJwotICAgICAgICBSdW4gY29kZSBmb3IgcHJvY2VzcyBvYmplY3QgaWYgdGhpcyBpbiBub3QgdGhlIG1haW4gcHJvY2VzcwotICAgICAgICAnJycKLSAgICAgICAgaWYgaXNfZm9ya2luZyhzeXMuYXJndik6Ci0gICAgICAgICAgICBtYWluKCkKLSAgICAgICAgICAgIHN5cy5leGl0KCkKLQotCi0gICAgZGVmIGdldF9jb21tYW5kX2xpbmUoKToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybnMgcHJlZml4IG9mIGNvbW1hbmQgbGluZSB1c2VkIGZvciBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCcnJwotICAgICAgICAgICAgQXR0ZW1wdCB0byBzdGFydCBhIG5ldyBwcm9jZXNzIGJlZm9yZSB0aGUgY3VycmVudCBwcm9jZXNzCi0gICAgICAgICAgICBoYXMgZmluaXNoZWQgaXRzIGJvb3RzdHJhcHBpbmcgcGhhc2UuCi0KLSAgICAgICAgICAgIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB5b3UgYXJlIG9uIFdpbmRvd3MgYW5kIHlvdSBoYXZlCi0gICAgICAgICAgICBmb3Jnb3R0ZW4gdG8gdXNlIHRoZSBwcm9wZXIgaWRpb20gaW4gdGhlIG1haW4gbW9kdWxlOgotCi0gICAgICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICAgICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQotICAgICAgICAgICAgICAgICAgICAuLi4KLQotICAgICAgICAgICAgVGhlICJmcmVlemVfc3VwcG9ydCgpIiBsaW5lIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBwcm9ncmFtCi0gICAgICAgICAgICBpcyBub3QgZ29pbmcgdG8gYmUgZnJvemVuIHRvIHByb2R1Y2UgYSBXaW5kb3dzIGV4ZWN1dGFibGUuJycnKQotCi0gICAgICAgIGlmIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgotICAgICAgICAgICAgcmV0dXJuIFtzeXMuZXhlY3V0YWJsZSwgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJvZyA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBtYWluOyBtYWluKCknCi0gICAgICAgICAgICBvcHRzID0gdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKLSAgICAgICAgICAgIHJldHVybiBbX3B5dGhvbl9leGVdICsgb3B0cyArIFsnLWMnLCBwcm9nLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCi0KLQotICAgIGRlZiBtYWluKCk6Ci0gICAgICAgICcnJwotICAgICAgICBSdW4gY29kZSBzcGVjaWZpZWQgYnkgZGF0YSByZWNlaXZlZCBvdmVyIHBpcGUKLSAgICAgICAgJycnCi0gICAgICAgIGFzc2VydCBpc19mb3JraW5nKHN5cy5hcmd2KQotCi0gICAgICAgIGhhbmRsZSA9IGludChzeXMuYXJndlstMV0pCi0gICAgICAgIGZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKGhhbmRsZSwgb3MuT19SRE9OTFkpCi0gICAgICAgIGZyb21fcGFyZW50ID0gb3MuZmRvcGVuKGZkLCAncmInKQotCi0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBUcnVlCi0gICAgICAgIHByZXBhcmF0aW9uX2RhdGEgPSBsb2FkKGZyb21fcGFyZW50KQotICAgICAgICBwcmVwYXJlKHByZXBhcmF0aW9uX2RhdGEpCi0gICAgICAgIHNlbGYgPSBsb2FkKGZyb21fcGFyZW50KQotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gRmFsc2UKLQotICAgICAgICBmcm9tX3BhcmVudC5jbG9zZSgpCi0KLSAgICAgICAgZXhpdGNvZGUgPSBzZWxmLl9ib290c3RyYXAoKQotICAgICAgICBzeXMuZXhpdChleGl0Y29kZSkKLQotCi0gICAgZGVmIGdldF9wcmVwYXJhdGlvbl9kYXRhKG5hbWUpOgotICAgICAgICAnJycKLSAgICAgICAgUmV0dXJuIGluZm8gYWJvdXQgcGFyZW50IG5lZWRlZCBieSBjaGlsZCB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAotICAgICAgICAnJycKLSAgICAgICAgZnJvbSAudXRpbCBpbXBvcnQgX2xvZ2dlciwgX2xvZ190b19zdGRlcnIKLQotICAgICAgICBkID0gZGljdCgKLSAgICAgICAgICAgIG5hbWU9bmFtZSwKLSAgICAgICAgICAgIHN5c19wYXRoPXN5cy5wYXRoLAotICAgICAgICAgICAgc3lzX2FyZ3Y9c3lzLmFyZ3YsCi0gICAgICAgICAgICBsb2dfdG9fc3RkZXJyPV9sb2dfdG9fc3RkZXJyLAotICAgICAgICAgICAgb3JpZ19kaXI9cHJvY2Vzcy5PUklHSU5BTF9ESVIsCi0gICAgICAgICAgICBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSwKLSAgICAgICAgICAgICkKLQotICAgICAgICBpZiBfbG9nZ2VyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZFsnbG9nX2xldmVsJ10gPSBfbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKLQotICAgICAgICBpZiBub3QgV0lORVhFIGFuZCBub3QgV0lOU0VSVklDRToKLSAgICAgICAgICAgIG1haW5fcGF0aCA9IGdldGF0dHIoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10sICdfX2ZpbGVfXycsIE5vbmUpCi0gICAgICAgICAgICBpZiBub3QgbWFpbl9wYXRoIGFuZCBzeXMuYXJndlswXSBub3QgaW4gKCcnLCAnLWMnKToKLSAgICAgICAgICAgICAgICBtYWluX3BhdGggPSBzeXMuYXJndlswXQotICAgICAgICAgICAgaWYgbWFpbl9wYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKG1haW5fcGF0aCkgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBtYWluX3BhdGggPSBvcy5wYXRoLmpvaW4ocHJvY2Vzcy5PUklHSU5BTF9ESVIsIG1haW5fcGF0aCkKLSAgICAgICAgICAgICAgICBkWydtYWluX3BhdGgnXSA9IG9zLnBhdGgubm9ybXBhdGgobWFpbl9wYXRoKQotCi0gICAgICAgIHJldHVybiBkCi0KLSMKLSMgUHJlcGFyZSBjdXJyZW50IHByb2Nlc3MKLSMKLQotb2xkX21haW5fbW9kdWxlcyA9IFtdCi0KLWRlZiBwcmVwYXJlKGRhdGEpOgotICAgICcnJwotICAgIFRyeSB0byBnZXQgY3VycmVudCBwcm9jZXNzIHJlYWR5IHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0Ci0gICAgJycnCi0gICAgb2xkX21haW5fbW9kdWxlcy5hcHBlbmQoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10pCi0KLSAgICBpZiAnbmFtZScgaW4gZGF0YToKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lID0gZGF0YVsnbmFtZSddCi0KLSAgICBpZiAnYXV0aGtleScgaW4gZGF0YToKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fYXV0aGtleSA9IGRhdGFbJ2F1dGhrZXknXQotCi0gICAgaWYgJ2xvZ190b19zdGRlcnInIGluIGRhdGEgYW5kIGRhdGFbJ2xvZ190b19zdGRlcnInXToKLSAgICAgICAgdXRpbC5sb2dfdG9fc3RkZXJyKCkKLQotICAgIGlmICdsb2dfbGV2ZWwnIGluIGRhdGE6Ci0gICAgICAgIHV0aWwuZ2V0X2xvZ2dlcigpLnNldExldmVsKGRhdGFbJ2xvZ19sZXZlbCddKQotCi0gICAgaWYgJ3N5c19wYXRoJyBpbiBkYXRhOgotICAgICAgICBzeXMucGF0aCA9IGRhdGFbJ3N5c19wYXRoJ10KLQotICAgIGlmICdzeXNfYXJndicgaW4gZGF0YToKLSAgICAgICAgc3lzLmFyZ3YgPSBkYXRhWydzeXNfYXJndiddCi0KLSAgICBpZiAnZGlyJyBpbiBkYXRhOgotICAgICAgICBvcy5jaGRpcihkYXRhWydkaXInXSkKLQotICAgIGlmICdvcmlnX2RpcicgaW4gZGF0YToKLSAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgPSBkYXRhWydvcmlnX2RpciddCi0KLSAgICBpZiAnbWFpbl9wYXRoJyBpbiBkYXRhOgotICAgICAgICAjIFhYWCAobmNvZ2hsYW4pOiBUaGUgZm9sbG93aW5nIGNvZGUgbWFrZXMgc2V2ZXJhbCBib2d1cwotICAgICAgICAjIGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gX19maWxlX18KLSAgICAgICAgIyBhbmQgYSBtb2R1bGUncyByZWFsIG5hbWUuIFNlZSBQRVAgMzAyIGFuZCBpc3N1ZSAjMTA4NDUKLSAgICAgICAgbWFpbl9wYXRoID0gZGF0YVsnbWFpbl9wYXRoJ10KLSAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkpWzBdCi0gICAgICAgIGlmIG1haW5fbmFtZSA9PSAnX19pbml0X18nOgotICAgICAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSkKLQotICAgICAgICBpZiBtYWluX25hbWUgPT0gJ19fbWFpbl9fJzoKLSAgICAgICAgICAgIG1haW5fbW9kdWxlID0gc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10KLSAgICAgICAgICAgIG1haW5fbW9kdWxlLl9fZmlsZV9fID0gbWFpbl9wYXRoCi0gICAgICAgIGVsaWYgbWFpbl9uYW1lICE9ICdpcHl0aG9uJzoKLSAgICAgICAgICAgICMgTWFpbiBtb2R1bGVzIG5vdCBhY3R1YWxseSBjYWxsZWQgX19tYWluX18ucHkgbWF5Ci0gICAgICAgICAgICAjIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHRoYXQgc2hvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkCi0gICAgICAgICAgICBpbXBvcnQgaW1wCi0KLSAgICAgICAgICAgIGlmIG1haW5fcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRpcnMgPSBOb25lCi0gICAgICAgICAgICBlbGlmIG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKS5zdGFydHN3aXRoKCdfX2luaXRfXy5weScpOgotICAgICAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShtYWluX3BhdGgpKV0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKV0KLQotICAgICAgICAgICAgYXNzZXJ0IG1haW5fbmFtZSBub3QgaW4gc3lzLm1vZHVsZXMsIG1haW5fbmFtZQotICAgICAgICAgICAgZmlsZSwgcGF0aF9uYW1lLCBldGMgPSBpbXAuZmluZF9tb2R1bGUobWFpbl9uYW1lLCBkaXJzKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgV2Ugd291bGQgbGlrZSB0byBkbyAiaW1wLmxvYWRfbW9kdWxlKCdfX21haW5fXycsIC4uLikiCi0gICAgICAgICAgICAgICAgIyBoZXJlLiAgSG93ZXZlciwgdGhhdCB3b3VsZCBjYXVzZSAnaWYgX19uYW1lX18gPT0KLSAgICAgICAgICAgICAgICAjICJfX21haW5fXyInIGNsYXVzZXMgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICAgICAgICAgICAgbWFpbl9tb2R1bGUgPSBpbXAubG9hZF9tb2R1bGUoCi0gICAgICAgICAgICAgICAgICAgICdfX3BhcmVudHNfbWFpbl9fJywgZmlsZSwgcGF0aF9uYW1lLCBldGMKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBpZiBmaWxlOgotICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKLQotICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gPSBtYWluX21vZHVsZQotICAgICAgICAgICAgbWFpbl9tb2R1bGUuX19uYW1lX18gPSAnX19tYWluX18nCi0KLSAgICAgICAgICAgICMgVHJ5IHRvIG1ha2UgdGhlIHBvdGVudGlhbGx5IHBpY2tsYWJsZSBvYmplY3RzIGluCi0gICAgICAgICAgICAjIHN5cy5tb2R1bGVzWydfX21haW5fXyddIHJlYWxpemUgdGhleSBhcmUgaW4gdGhlIG1haW4KLSAgICAgICAgICAgICMgbW9kdWxlIC0tIHNvbWV3aGF0IHVnbHkuCi0gICAgICAgICAgICBmb3Igb2JqIGluIGxpc3QobWFpbl9tb2R1bGUuX19kaWN0X18udmFsdWVzKCkpOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaWYgb2JqLl9fbW9kdWxlX18gPT0gJ19fcGFyZW50c19tYWluX18nOgotICAgICAgICAgICAgICAgICAgICAgICAgb2JqLl9fbW9kdWxlX18gPSAnX19tYWluX18nCi0gICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzUxN2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtzZXJ2ZXIucHkKQEAgLTAsMCArMSwyNjcgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc2VsZWN0b3JzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCBzZW1hcGhvcmVfdHJhY2tlcgorZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ2Vuc3VyZV9ydW5uaW5nJywgJ2dldF9pbmhlcml0ZWRfZmRzJywgJ2Nvbm5lY3RfdG9fbmV3X3Byb2Nlc3MnLAorICAgICAgICAgICAnc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZCddCisKKyMKKyMKKyMKKworTUFYRkRTX1RPX1NFTkQgPSAyNTYKK1VOU0lHTkVEX1NUUlVDVCA9IHN0cnVjdC5TdHJ1Y3QoJ1EnKSAgICAgIyBsYXJnZSBlbm91Z2ggZm9yIHBpZF90CisKKyMKKyMgRm9ya3NlcnZlciBjbGFzcworIworCitjbGFzcyBGb3JrU2VydmVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hbGl2ZV9mZCA9IE5vbmUKKyAgICAgICAgc2VsZi5faW5oZXJpdGVkX2ZkcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fcHJlbG9hZF9tb2R1bGVzID0gWydfX21haW5fXyddCisKKyAgICBkZWYgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChzZWxmLCBtb2R1bGVzX25hbWVzKToKKyAgICAgICAgJycnU2V0IGxpc3Qgb2YgbW9kdWxlIG5hbWVzIHRvIHRyeSB0byBsb2FkIGluIGZvcmtzZXJ2ZXIgcHJvY2Vzcy4nJycKKyAgICAgICAgaWYgbm90IGFsbCh0eXBlKG1vZCkgaXMgc3RyIGZvciBtb2QgaW4gc2VsZi5fcHJlbG9hZF9tb2R1bGVzKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbW9kdWxlX25hbWVzIG11c3QgYmUgYSBsaXN0IG9mIHN0cmluZ3MnKQorICAgICAgICBzZWxmLl9wcmVsb2FkX21vZHVsZXMgPSBtb2R1bGVzX25hbWVzCisKKyAgICBkZWYgZ2V0X2luaGVyaXRlZF9mZHMoc2VsZik6CisgICAgICAgICcnJ1JldHVybiBsaXN0IG9mIGZkcyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgcHJvY2Vzcy4KKworICAgICAgICBUaGlzIHJldHVybnMgTm9uZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIHdhcyBub3Qgc3RhcnRlZCBieSBmb3JrCisgICAgICAgIHNlcnZlci4KKyAgICAgICAgJycnCisgICAgICAgIHJldHVybiBzZWxmLl9pbmhlcml0ZWRfZmRzCisKKyAgICBkZWYgY29ubmVjdF90b19uZXdfcHJvY2VzcyhzZWxmLCBmZHMpOgorICAgICAgICAnJydSZXF1ZXN0IGZvcmtzZXJ2ZXIgdG8gY3JlYXRlIGEgY2hpbGQgcHJvY2Vzcy4KKworICAgICAgICBSZXR1cm5zIGEgcGFpciBvZiBmZHMgKHN0YXR1c19yLCBkYXRhX3cpLiAgVGhlIGNhbGxpbmcgcHJvY2VzcyBjYW4gcmVhZAorICAgICAgICB0aGUgY2hpbGQgcHJvY2VzcydzIHBpZCBhbmQgKGV2ZW50dWFsbHkpIGl0cyByZXR1cm5jb2RlIGZyb20gc3RhdHVzX3IuCisgICAgICAgIFRoZSBjYWxsaW5nIHByb2Nlc3Mgc2hvdWxkIHdyaXRlIHRvIGRhdGFfdyB0aGUgcGlja2xlZCBwcmVwYXJhdGlvbiBhbmQKKyAgICAgICAgcHJvY2VzcyBkYXRhLgorICAgICAgICAnJycKKyAgICAgICAgc2VsZi5lbnN1cmVfcnVubmluZygpCisgICAgICAgIGlmIGxlbihmZHMpICsgNCA+PSBNQVhGRFNfVE9fU0VORDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3RvbyBtYW55IGZkcycpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCkgYXMgY2xpZW50OgorICAgICAgICAgICAgY2xpZW50LmNvbm5lY3Qoc2VsZi5fZm9ya3NlcnZlcl9hZGRyZXNzKQorICAgICAgICAgICAgcGFyZW50X3IsIGNoaWxkX3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIGNoaWxkX3IsIHBhcmVudF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBhbGxmZHMgPSBbY2hpbGRfciwgY2hpbGRfdywgc2VsZi5fZm9ya3NlcnZlcl9hbGl2ZV9mZCwKKyAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5nZXRmZCgpXQorICAgICAgICAgICAgYWxsZmRzICs9IGZkcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kZmRzKGNsaWVudCwgYWxsZmRzKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRfciwgcGFyZW50X3cKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShwYXJlbnRfcikKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShwYXJlbnRfdykKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF9yKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGNoaWxkX3cpCisKKyAgICBkZWYgZW5zdXJlX3J1bm5pbmcoc2VsZik6CisgICAgICAgICcnJ01ha2Ugc3VyZSB0aGF0IGEgZm9yayBzZXJ2ZXIgaXMgcnVubmluZy4KKworICAgICAgICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgcHJvY2Vzcy4gIE5vdGUgdGhhdCB1c3VhbGx5IGEgY2hpbGQKKyAgICAgICAgcHJvY2VzcyB3aWxsIGp1c3QgcmV1c2UgdGhlIGZvcmtzZXJ2ZXIgc3RhcnRlZCBieSBpdHMgcGFyZW50LCBzbworICAgICAgICBlbnN1cmVfcnVubmluZygpIHdpbGwgZG8gbm90aGluZy4KKyAgICAgICAgJycnCisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbWFwaG9yZV90cmFja2VyLmVuc3VyZV9ydW5uaW5nKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGNtZCA9ICgnZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya3NlcnZlciBpbXBvcnQgbWFpbjsgJyArCisgICAgICAgICAgICAgICAgICAgJ21haW4oJWQsICVkLCAlciwgKiolciknKQorCisgICAgICAgICAgICBpZiBzZWxmLl9wcmVsb2FkX21vZHVsZXM6CisgICAgICAgICAgICAgICAgZGVzaXJlZF9rZXlzID0geydtYWluX3BhdGgnLCAnc3lzX3BhdGgnfQorICAgICAgICAgICAgICAgIGRhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YSgnaWdub3JlJykKKyAgICAgICAgICAgICAgICBkYXRhID0gZGljdCgoeCx5KSBmb3IgKHgseSkgaW4gZGF0YS5pdGVtcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeCBpbiBkZXNpcmVkX2tleXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSB7fQorCisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpIGFzIGxpc3RlbmVyOgorICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBjb25uZWN0aW9uLmFyYml0cmFyeV9hZGRyZXNzKCdBRl9VTklYJykKKyAgICAgICAgICAgICAgICBsaXN0ZW5lci5iaW5kKGFkZHJlc3MpCisgICAgICAgICAgICAgICAgb3MuY2htb2QoYWRkcmVzcywgMG82MDApCisgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuKDEwMCkKKworICAgICAgICAgICAgICAgICMgYWxsIGNsaWVudCBwcm9jZXNzZXMgb3duIHRoZSB3cml0ZSBlbmQgb2YgdGhlICJhbGl2ZSIgcGlwZTsKKyAgICAgICAgICAgICAgICAjIHdoZW4gdGhleSBhbGwgdGVybWluYXRlIHRoZSByZWFkIGVuZCBiZWNvbWVzIHJlYWR5LgorICAgICAgICAgICAgICAgIGFsaXZlX3IsIGFsaXZlX3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZkc190b19wYXNzID0gW2xpc3RlbmVyLmZpbGVubygpLCBhbGl2ZV9yXQorICAgICAgICAgICAgICAgICAgICBjbWQgJT0gKGxpc3RlbmVyLmZpbGVubygpLCBhbGl2ZV9yLCBzZWxmLl9wcmVsb2FkX21vZHVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgZXhlID0gc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKQorICAgICAgICAgICAgICAgICAgICBhcmdzID0gW2V4ZV0gKyB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICAgICAgICAgICAgICBhcmdzICs9IFsnLWMnLCBjbWRdCisgICAgICAgICAgICAgICAgICAgIHBpZCA9IHV0aWwuc3Bhd252X3Bhc3NmZHMoZXhlLCBhcmdzLCBmZHNfdG9fcGFzcykKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGFsaXZlX3cpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoYWxpdmVfcikKKyAgICAgICAgICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBhZGRyZXNzCisgICAgICAgICAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hbGl2ZV9mZCA9IGFsaXZlX3cKKworIworIworIworCitkZWYgbWFpbihsaXN0ZW5lcl9mZCwgYWxpdmVfciwgcHJlbG9hZCwgbWFpbl9wYXRoPU5vbmUsIHN5c19wYXRoPU5vbmUpOgorICAgICcnJ1J1biBmb3Jrc2VydmVyLicnJworICAgIGlmIHByZWxvYWQ6CisgICAgICAgIGlmICdfX21haW5fXycgaW4gcHJlbG9hZCBhbmQgbWFpbl9wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzcGF3bi5pbXBvcnRfbWFpbl9wYXRoKG1haW5fcGF0aCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZGVsIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcKKyAgICAgICAgZm9yIG1vZG5hbWUgaW4gcHJlbG9hZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBjbG9zZSBzeXMuc3RkaW4KKyAgICBpZiBzeXMuc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICBzeXMuc3RkaW4gPSBvcGVuKG9zLmRldm51bGwpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAjIGlnbm9yaW5nIFNJR0NITEQgbWVhbnMgbm8gbmVlZCB0byByZWFwIHpvbWJpZSBwcm9jZXNzZXMKKyAgICBoYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQ0hMRCwgc2lnbmFsLlNJR19JR04pCisgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBmaWxlbm89bGlzdGVuZXJfZmQpIGFzIGxpc3RlbmVyLCBcCisgICAgICAgICBzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgIF9mb3Jrc2VydmVyLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBsaXN0ZW5lci5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIobGlzdGVuZXIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihhbGl2ZV9yLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJmZHMgPSBba2V5LmZpbGVvYmogZm9yIChrZXksIGV2ZW50cykgaW4gc2VsZWN0b3Iuc2VsZWN0KCldCisgICAgICAgICAgICAgICAgICAgIGlmIHJmZHM6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgaWYgYWxpdmVfciBpbiByZmRzOgorICAgICAgICAgICAgICAgICAgICAjIEVPRiBiZWNhdXNlIG5vIG1vcmUgY2xpZW50IHByb2Nlc3NlcyBsZWZ0CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBvcy5yZWFkKGFsaXZlX3IsIDEpID09IGInJworICAgICAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGlzdGVuZXIgaW4gcmZkcworICAgICAgICAgICAgICAgIHdpdGggbGlzdGVuZXIuYWNjZXB0KClbMF0gYXMgczoKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MuZm9yaygpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlcnZlX29uZShzLCBsaXN0ZW5lciwgYWxpdmVfciwgaGFuZGxlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQorCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUNPTk5BQk9SVEVEOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCitkZWYgX3NlcnZlX29uZShzLCBsaXN0ZW5lciwgYWxpdmVfciwgaGFuZGxlcik6CisgICAgIyBjbG9zZSB1bm5lY2Vzc2FyeSBzdHVmZiBhbmQgcmVzZXQgU0lHQ0hMRCBoYW5kbGVyCisgICAgbGlzdGVuZXIuY2xvc2UoKQorICAgIG9zLmNsb3NlKGFsaXZlX3IpCisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQ0hMRCwgaGFuZGxlcikKKworICAgICMgcmVjZWl2ZSBmZHMgZnJvbSBwYXJlbnQgcHJvY2VzcworICAgIGZkcyA9IHJlZHVjdGlvbi5yZWN2ZmRzKHMsIE1BWEZEU19UT19TRU5EICsgMSkKKyAgICBzLmNsb3NlKCkKKyAgICBhc3NlcnQgbGVuKGZkcykgPD0gTUFYRkRTX1RPX1NFTkQKKyAgICAoY2hpbGRfciwgY2hpbGRfdywgX2ZvcmtzZXJ2ZXIuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQsCisgICAgIHN0ZmQsICpfZm9ya3NlcnZlci5faW5oZXJpdGVkX2ZkcykgPSBmZHMKKyAgICBzZW1hcGhvcmVfdHJhY2tlci5fc2VtYXBob3JlX3RyYWNrZXIuX2ZkID0gc3RmZAorCisgICAgIyBzZW5kIHBpZCB0byBjbGllbnQgcHJvY2Vzc2VzCisgICAgd3JpdGVfdW5zaWduZWQoY2hpbGRfdywgb3MuZ2V0cGlkKCkpCisKKyAgICAjIHJlc2VlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgIGlmICdyYW5kb20nIGluIHN5cy5tb2R1bGVzOgorICAgICAgICBpbXBvcnQgcmFuZG9tCisgICAgICAgIHJhbmRvbS5zZWVkKCkKKworICAgICMgcnVuIHByb2Nlc3Mgb2JqZWN0IHJlY2VpdmVkIG92ZXIgcGlwZQorICAgIGNvZGUgPSBzcGF3bi5fbWFpbihjaGlsZF9yKQorCisgICAgIyB3cml0ZSB0aGUgZXhpdCBjb2RlIHRvIHRoZSBwaXBlCisgICAgd3JpdGVfdW5zaWduZWQoY2hpbGRfdywgY29kZSkKKworIworIyBSZWFkIGFuZCB3cml0ZSB1bnNpZ25lZCBudW1iZXJzCisjCisKK2RlZiByZWFkX3Vuc2lnbmVkKGZkKToKKyAgICBkYXRhID0gYicnCisgICAgbGVuZ3RoID0gVU5TSUdORURfU1RSVUNULnNpemUKKyAgICB3aGlsZSBsZW4oZGF0YSkgPCBsZW5ndGg6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IG9zLnJlYWQoZmQsIGxlbmd0aCAtIGxlbihkYXRhKSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigndW5leHBlY3RlZCBFT0YnKQorICAgICAgICBkYXRhICs9IHMKKyAgICByZXR1cm4gVU5TSUdORURfU1RSVUNULnVucGFjayhkYXRhKVswXQorCitkZWYgd3JpdGVfdW5zaWduZWQoZmQsIG4pOgorICAgIG1zZyA9IFVOU0lHTkVEX1NUUlVDVC5wYWNrKG4pCisgICAgd2hpbGUgbXNnOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5ieXRlcyA9IG9zLndyaXRlKGZkLCBtc2cpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5ieXRlcyA9PSAwOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaG91bGQgbm90IGdldCBoZXJlJykKKyAgICAgICAgbXNnID0gbXNnW25ieXRlczpdCisKKyMKKyMKKyMKKworX2ZvcmtzZXJ2ZXIgPSBGb3JrU2VydmVyKCkKK2Vuc3VyZV9ydW5uaW5nID0gX2ZvcmtzZXJ2ZXIuZW5zdXJlX3J1bm5pbmcKK2dldF9pbmhlcml0ZWRfZmRzID0gX2ZvcmtzZXJ2ZXIuZ2V0X2luaGVyaXRlZF9mZHMKK2Nvbm5lY3RfdG9fbmV3X3Byb2Nlc3MgPSBfZm9ya3NlcnZlci5jb25uZWN0X3RvX25ld19wcm9jZXNzCitzZXRfZm9ya3NlcnZlcl9wcmVsb2FkID0gX2ZvcmtzZXJ2ZXIuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CmluZGV4IGU2M2ZkYjguLjM0NGE0NWYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKQEAgLTExLDEyICsxMSwxMiBAQAogaW1wb3J0IG1tYXAKIGltcG9ydCBvcwogaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgaXRlcnRvb2xzCiAKLWltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBGaW5hbGl6ZSwgaW5mbwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKIAogX19hbGxfXyA9IFsnQnVmZmVyV3JhcHBlciddCiAKQEAgLTMwLDE3ICszMCwyNSBAQAogCiAgICAgY2xhc3MgQXJlbmEob2JqZWN0KToKIAotICAgICAgICBfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisgICAgICAgIF9yYW5kID0gdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSgpCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgogICAgICAgICAgICAgc2VsZi5zaXplID0gc2l6ZQotICAgICAgICAgICAgc2VsZi5uYW1lID0gJ3B5bS0lZC0lZCcgJSAob3MuZ2V0cGlkKCksIG5leHQoQXJlbmEuX2NvdW50ZXIpKQotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoLTEsIHNlbGYuc2l6ZSwgdGFnbmFtZT1zZWxmLm5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgX3dpbmFwaS5HZXRMYXN0RXJyb3IoKSA9PSAwLCAndGFnbmFtZSBhbHJlYWR5IGluIHVzZScKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgbmFtZSA9ICdweW0tJWQtJXMnICUgKG9zLmdldHBpZCgpLCBuZXh0KHNlbGYuX3JhbmQpKQorICAgICAgICAgICAgICAgIGJ1ZiA9IG1tYXAubW1hcCgtMSwgc2l6ZSwgdGFnbmFtZT1uYW1lKQorICAgICAgICAgICAgICAgIGlmIF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgcmVvcGVuZWQgYSBwcmVleGlzdGluZyBtbWFwLgorICAgICAgICAgICAgICAgIGJ1Zi5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcignQ2Fubm90IGZpbmQgbmFtZSBmb3IgbmV3IG1tYXAnKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBidWYKICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gKHNlbGYuc2l6ZSwgc2VsZi5uYW1lKQogCiAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgICAgIGNvbnRleHQuYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUKIAogICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKQEAgLTUyLDEwICs2MCwyOCBAQAogCiAgICAgY2xhc3MgQXJlbmEob2JqZWN0KToKIAotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSk6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcCgtMSwgc2l6ZSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIGZkPS0xKToKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICAgICAgaWYgZmQgPT0gLTE6CisgICAgICAgICAgICAgICAgc2VsZi5mZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoCisgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9J3B5bS0lZC0nJW9zLmdldHBpZCgpLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKyAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAoc2VsZi5mZCwpKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZkLCAnd2InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGInXDAnKnNpemUpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcChzZWxmLmZkLCBzZWxmLnNpemUpCisKKyAgICBkZWYgcmVkdWNlX2FyZW5hKGEpOgorICAgICAgICBpZiBhLmZkID09IC0xOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXJlbmEgaXMgdW5waWNrbGFibGUgYmVjYXVzZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JraW5nIHdhcyBlbmFibGVkIHdoZW4gaXQgd2FzIGNyZWF0ZWQnKQorICAgICAgICByZXR1cm4gcmVidWlsZF9hcmVuYSwgKGEuc2l6ZSwgcmVkdWN0aW9uLkR1cEZkKGEuZmQpKQorCisgICAgZGVmIHJlYnVpbGRfYXJlbmEoc2l6ZSwgZHVwZmQpOgorICAgICAgICByZXR1cm4gQXJlbmEoc2l6ZSwgZHVwZmQuZGV0YWNoKCkpCisKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoQXJlbmEsIHJlZHVjZV9hcmVuYSkKIAogIwogIyBDbGFzcyBhbGxvd2luZyBhbGxvY2F0aW9uIG9mIGNodW5rcyBvZiBtZW1vcnkgZnJvbSBhcmVuYXMKQEAgLTkwLDcgKzExNiw3IEBACiAgICAgICAgIGlmIGkgPT0gbGVuKHNlbGYuX2xlbmd0aHMpOgogICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5fcm91bmR1cChtYXgoc2VsZi5fc2l6ZSwgc2l6ZSksIG1tYXAuUEFHRVNJWkUpCiAgICAgICAgICAgICBzZWxmLl9zaXplICo9IDIKLSAgICAgICAgICAgIGluZm8oJ2FsbG9jYXRpbmcgYSBuZXcgbW1hcCBvZiBsZW5ndGggJWQnLCBsZW5ndGgpCisgICAgICAgICAgICB1dGlsLmluZm8oJ2FsbG9jYXRpbmcgYSBuZXcgbW1hcCBvZiBsZW5ndGggJWQnLCBsZW5ndGgpCiAgICAgICAgICAgICBhcmVuYSA9IEFyZW5hKGxlbmd0aCkKICAgICAgICAgICAgIHNlbGYuX2FyZW5hcy5hcHBlbmQoYXJlbmEpCiAgICAgICAgICAgICByZXR1cm4gKGFyZW5hLCAwLCBsZW5ndGgpCkBAIC0yMTYsNyArMjQyLDcgQEAKICAgICAgICAgYXNzZXJ0IDAgPD0gc2l6ZSA8IHN5cy5tYXhzaXplCiAgICAgICAgIGJsb2NrID0gQnVmZmVyV3JhcHBlci5faGVhcC5tYWxsb2Moc2l6ZSkKICAgICAgICAgc2VsZi5fc3RhdGUgPSAoYmxvY2ssIHNpemUpCi0gICAgICAgIEZpbmFsaXplKHNlbGYsIEJ1ZmZlcldyYXBwZXIuX2hlYXAuZnJlZSwgYXJncz0oYmxvY2ssKSkKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBCdWZmZXJXcmFwcGVyLl9oZWFwLmZyZWUsIGFyZ3M9KGJsb2NrLCkpCiAKICAgICBkZWYgY3JlYXRlX21lbW9yeXZpZXcoc2VsZik6CiAgICAgICAgIChhcmVuYSwgc3RhcnQsIHN0b3ApLCBzaXplID0gc2VsZi5fc3RhdGUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CmluZGV4IDk2MDU2YjAuLjY2ZDQ2ZmMgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQpAQCAtMTksMTEgKzE5LDE2IEBACiBpbXBvcnQgYXJyYXkKIGltcG9ydCBxdWV1ZQogCi1mcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YwotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuLCBQb29sLCB1dGlsLCBjb25uZWN0aW9uCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBBdXRoZW50aWNhdGlvblN0cmluZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgUG9wZW4sIEZvcmtpbmdQaWNrbGVyCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKK2Zyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHBvb2wKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAogCiAjCiAjIFJlZ2lzdGVyIHNvbWUgdGhpbmdzIGZvciBwaWNrbGluZwpAQCAtMzEsMTYgKzM2LDE0IEBACiAKIGRlZiByZWR1Y2VfYXJyYXkoYSk6CiAgICAgcmV0dXJuIGFycmF5LmFycmF5LCAoYS50eXBlY29kZSwgYS50b2J5dGVzKCkpCi1Gb3JraW5nUGlja2xlci5yZWdpc3RlcihhcnJheS5hcnJheSwgcmVkdWNlX2FycmF5KQorcmVkdWN0aW9uLnJlZ2lzdGVyKGFycmF5LmFycmF5LCByZWR1Y2VfYXJyYXkpCiAKIHZpZXdfdHlwZXMgPSBbdHlwZShnZXRhdHRyKHt9LCBuYW1lKSgpKSBmb3IgbmFtZSBpbiAoJ2l0ZW1zJywna2V5cycsJ3ZhbHVlcycpXQogaWYgdmlld190eXBlc1swXSBpcyBub3QgbGlzdDogICAgICAgIyBvbmx5IG5lZWRlZCBpbiBQeTMuMAogICAgIGRlZiByZWJ1aWxkX2FzX2xpc3Qob2JqKToKICAgICAgICAgcmV0dXJuIGxpc3QsIChsaXN0KG9iaiksKQogICAgIGZvciB2aWV3X3R5cGUgaW4gdmlld190eXBlczoKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCi0gICAgICAgIGltcG9ydCBjb3B5cmVnCi0gICAgICAgIGNvcHlyZWcucGlja2xlKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQorICAgICAgICByZWR1Y3Rpb24ucmVnaXN0ZXIodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCiAKICMKICMgVHlwZSBmb3IgaWRlbnRpZnlpbmcgc2hhcmVkIG9iamVjdHMKQEAgLTEzMCw3ICsxMzMsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWdpc3RyeSwgYWRkcmVzcywgYXV0aGtleSwgc2VyaWFsaXplcik6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGF1dGhrZXksIGJ5dGVzKQogICAgICAgICBzZWxmLnJlZ2lzdHJ5ID0gcmVnaXN0cnkKLSAgICAgICAgc2VsZi5hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5hdXRoa2V5ID0gcHJvY2Vzcy5BdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQogICAgICAgICBMaXN0ZW5lciwgQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdCiAKICAgICAgICAgIyBkbyBhdXRoZW50aWNhdGlvbiBsYXRlcgpAQCAtMTQ2LDcgKzE0OSw3IEBACiAgICAgICAgIFJ1biB0aGUgc2VydmVyIGZvcmV2ZXIKICAgICAgICAgJycnCiAgICAgICAgIHNlbGYuc3RvcF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCi0gICAgICAgIGN1cnJlbnRfcHJvY2VzcygpLl9tYW5hZ2VyX3NlcnZlciA9IHNlbGYKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fbWFuYWdlcl9zZXJ2ZXIgPSBzZWxmCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGFjY2VwdGVyID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5hY2NlcHRlcikKICAgICAgICAgICAgIGFjY2VwdGVyLmRhZW1vbiA9IFRydWUKQEAgLTE2Nyw3ICsxNzAsNyBAQAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGMgPSBzZWxmLmxpc3RlbmVyLmFjY2VwdCgpCi0gICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLmhhbmRsZV9yZXF1ZXN0LCBhcmdzPShjLCkpCiAgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKQEAgLTQzNiwxNSArNDM5LDE3IEBACiAgICAgX3JlZ2lzdHJ5ID0ge30KICAgICBfU2VydmVyID0gU2VydmVyCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcz1Ob25lLCBhdXRoa2V5PU5vbmUsIHNlcmlhbGl6ZXI9J3BpY2tsZScpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPU5vbmUsIGF1dGhrZXk9Tm9uZSwgc2VyaWFsaXplcj0ncGlja2xlJywKKyAgICAgICAgICAgICAgICAgY3R4PU5vbmUpOgogICAgICAgICBpZiBhdXRoa2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICBhdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICAgICAgYXV0aGtleSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQogICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcyAgICAgIyBYWFggbm90IGZpbmFsIGFkZHJlc3MgaWYgZWcgKCcnLCAwKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgc2VsZi5fc3RhdGUgPSBTdGF0ZSgpCiAgICAgICAgIHNlbGYuX3N0YXRlLnZhbHVlID0gU3RhdGUuSU5JVElBTAogICAgICAgICBzZWxmLl9zZXJpYWxpemVyID0gc2VyaWFsaXplcgogICAgICAgICBzZWxmLl9MaXN0ZW5lciwgc2VsZi5fQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdCisgICAgICAgIHNlbGYuX2N0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCiAKICAgICBkZWYgZ2V0X3NlcnZlcihzZWxmKToKICAgICAgICAgJycnCkBAIC00NzYsNyArNDgxLDcgQEAKICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQogCiAgICAgICAgICMgc3Bhd24gcHJvY2VzcyB3aGljaCBydW5zIGEgc2VydmVyCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBQcm9jZXNzKAorICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fY3R4LlByb2Nlc3MoCiAgICAgICAgICAgICB0YXJnZXQ9dHlwZShzZWxmKS5fcnVuX3NlcnZlciwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3JlZ2lzdHJ5LCBzZWxmLl9hZGRyZXNzLCBzZWxmLl9hdXRoa2V5LAogICAgICAgICAgICAgICAgICAgc2VsZi5fc2VyaWFsaXplciwgd3JpdGVyLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpLApAQCAtNjkxLDExICs2OTYsMTEgQEAKICAgICAgICAgc2VsZi5fQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdWzFdCiAKICAgICAgICAgaWYgYXV0aGtleSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgZWxpZiBzZWxmLl9tYW5hZ2VyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHNlbGYuX21hbmFnZXIuX2F1dGhrZXkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CiAKICAgICAgICAgaWYgaW5jcmVmOgogICAgICAgICAgICAgc2VsZi5faW5jcmVmKCkKQEAgLTcwNCw3ICs3MDksNyBAQAogCiAgICAgZGVmIF9jb25uZWN0KHNlbGYpOgogICAgICAgICB1dGlsLmRlYnVnKCdtYWtpbmcgY29ubmVjdGlvbiB0byBtYW5hZ2VyJykKLSAgICAgICAgbmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgIG5hbWUgKz0gJ3wnICsgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZQogICAgICAgICBjb25uID0gc2VsZi5fQ2xpZW50KHNlbGYuX3Rva2VuLmFkZHJlc3MsIGF1dGhrZXk9c2VsZi5fYXV0aGtleSkKQEAgLTc5OCw3ICs4MDMsNyBAQAogCiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAgICAgIGt3ZHMgPSB7fQotICAgICAgICBpZiBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKKyAgICAgICAgaWYgY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3ZHNbJ2F1dGhrZXknXSA9IHNlbGYuX2F1dGhrZXkKIAogICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfaXNhdXRvJywgRmFsc2UpOgpAQCAtODM1LDE0ICs4NDAsMTQgQEAKIAogICAgIElmIHBvc3NpYmxlIHRoZSBzaGFyZWQgb2JqZWN0IGlzIHJldHVybmVkLCBvciBvdGhlcndpc2UgYSBwcm94eSBmb3IgaXQuCiAgICAgJycnCi0gICAgc2VydmVyID0gZ2V0YXR0cihjdXJyZW50X3Byb2Nlc3MoKSwgJ19tYW5hZ2VyX3NlcnZlcicsIE5vbmUpCisgICAgc2VydmVyID0gZ2V0YXR0cihwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLCAnX21hbmFnZXJfc2VydmVyJywgTm9uZSkKIAogICAgIGlmIHNlcnZlciBhbmQgc2VydmVyLmFkZHJlc3MgPT0gdG9rZW4uYWRkcmVzczoKICAgICAgICAgcmV0dXJuIHNlcnZlci5pZF90b19vYmpbdG9rZW4uaWRdWzBdCiAgICAgZWxzZToKICAgICAgICAgaW5jcmVmID0gKAogICAgICAgICAgICAga3dkcy5wb3AoJ2luY3JlZicsIFRydWUpIGFuZAotICAgICAgICAgICAgbm90IGdldGF0dHIoY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKQorICAgICAgICAgICAgbm90IGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpCiAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBmdW5jKHRva2VuLCBzZXJpYWxpemVyLCBpbmNyZWY9aW5jcmVmLCAqKmt3ZHMpCiAKQEAgLTg4OSw3ICs4OTQsNyBAQAogICAgIGlmIGF1dGhrZXkgaXMgTm9uZSBhbmQgbWFuYWdlciBpcyBub3QgTm9uZToKICAgICAgICAgYXV0aGtleSA9IG1hbmFnZXIuX2F1dGhrZXkKICAgICBpZiBhdXRoa2V5IGlzIE5vbmU6Ci0gICAgICAgIGF1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgIGF1dGhrZXkgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKIAogICAgIFByb3h5VHlwZSA9IE1ha2VQcm94eVR5cGUoJ0F1dG9Qcm94eVslc10nICUgdG9rZW4udHlwZWlkLCBleHBvc2VkKQogICAgIHByb3h5ID0gUHJveHlUeXBlKHRva2VuLCBzZXJpYWxpemVyLCBtYW5hZ2VyPW1hbmFnZXIsIGF1dGhrZXk9YXV0aGtleSwKQEAgLTEwNzIsMTcgKzEwNzcsMjIgQEAKICAgICApKQogCiAKLVBvb2xQcm94eSA9IE1ha2VQcm94eVR5cGUoJ1Bvb2xQcm94eScsICgKK0Jhc2VQb29sUHJveHkgPSBNYWtlUHJveHlUeXBlKCdQb29sUHJveHknLCAoCiAgICAgJ2FwcGx5JywgJ2FwcGx5X2FzeW5jJywgJ2Nsb3NlJywgJ2ltYXAnLCAnaW1hcF91bm9yZGVyZWQnLCAnam9pbicsCi0gICAgJ21hcCcsICdtYXBfYXN5bmMnLCAnc3Rhcm1hcCcsICdzdGFybWFwX2FzeW5jJywgJ3Rlcm1pbmF0ZScKKyAgICAnbWFwJywgJ21hcF9hc3luYycsICdzdGFybWFwJywgJ3N0YXJtYXBfYXN5bmMnLCAndGVybWluYXRlJywKICAgICApKQotUG9vbFByb3h5Ll9tZXRob2RfdG9fdHlwZWlkXyA9IHsKK0Jhc2VQb29sUHJveHkuX21ldGhvZF90b190eXBlaWRfID0gewogICAgICdhcHBseV9hc3luYyc6ICdBc3luY1Jlc3VsdCcsCiAgICAgJ21hcF9hc3luYyc6ICdBc3luY1Jlc3VsdCcsCiAgICAgJ3N0YXJtYXBfYXN5bmMnOiAnQXN5bmNSZXN1bHQnLAogICAgICdpbWFwJzogJ0l0ZXJhdG9yJywKICAgICAnaW1hcF91bm9yZGVyZWQnOiAnSXRlcmF0b3InCiAgICAgfQorY2xhc3MgUG9vbFByb3h5KEJhc2VQb29sUHJveHkpOgorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgorICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCiAKICMKICMgRGVmaW5pdGlvbiBvZiBTeW5jTWFuYWdlcgpAQCAtMTEwOSw3ICsxMTE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIEFjcXVpcmVyUHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignQ29uZGl0aW9uJywgdGhyZWFkaW5nLkNvbmRpdGlvbiwgQ29uZGl0aW9uUHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignQmFycmllcicsIHRocmVhZGluZy5CYXJyaWVyLCBCYXJyaWVyUHJveHkpCi1TeW5jTWFuYWdlci5yZWdpc3RlcignUG9vbCcsIFBvb2wsIFBvb2xQcm94eSkKK1N5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdQb29sJywgcG9vbC5Qb29sLCBQb29sUHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignbGlzdCcsIGxpc3QsIExpc3RQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdkaWN0JywgZGljdCwgRGljdFByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ1ZhbHVlJywgVmFsdWUsIFZhbHVlUHJveHkpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKaW5kZXggMGYyZGFiNC4uODgzMmE1YyAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQpAQCAtNyw3ICs3LDcgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydQb29sJ10KK19fYWxsX18gPSBbJ1Bvb2wnLCAnVGhyZWFkUG9vbCddCiAKICMKICMgSW1wb3J0cwpAQCAtMTcsMTAgKzE3LDE0IEBACiBpbXBvcnQgcXVldWUKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IG9zCiBpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjawogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgY3B1X2NvdW50LCBUaW1lb3V0RXJyb3IKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IEZpbmFsaXplLCBkZWJ1ZworIyBJZiB0aHJlYWRpbmcgaXMgYXZhaWxhYmxlIHRoZW4gVGhyZWFkUG9vbCBzaG91bGQgYmUgcHJvdmlkZWQuICBUaGVyZWZvcmUKKyMgd2UgYXZvaWQgdG9wLWxldmVsIGltcG9ydHMgd2hpY2ggYXJlIGxpYWJsZSB0byBmYWlsIG9uIHNvbWUgc3lzdGVtcy4KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dCwgVGltZW91dEVycm9yCiAKICMKICMgQ29uc3RhbnRzIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgYSBwb29sCkBAIC00Myw2ICs0NywyOSBAQAogICAgIHJldHVybiBsaXN0KGl0ZXJ0b29scy5zdGFybWFwKGFyZ3NbMF0sIGFyZ3NbMV0pKQogCiAjCisjIEhhY2sgdG8gZW1iZWQgc3RyaW5naWZpY2F0aW9uIG9mIHJlbW90ZSB0cmFjZWJhY2sgaW4gbG9jYWwgdHJhY2ViYWNrCisjCisKK2NsYXNzIFJlbW90ZVRyYWNlYmFjayhFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0Yik6CisgICAgICAgIHNlbGYudGIgPSB0YgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50YgorCitjbGFzcyBFeGNlcHRpb25XaXRoVHJhY2ViYWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGMsIHRiKToKKyAgICAgICAgdGIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbih0eXBlKGV4YyksIGV4YywgdGIpCisgICAgICAgIHRiID0gJycuam9pbih0YikKKyAgICAgICAgc2VsZi5leGMgPSBleGMKKyAgICAgICAgc2VsZi50YiA9ICdcbiIiIlxuJXMiIiInICUgdGIKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfZXhjLCAoc2VsZi5leGMsIHNlbGYudGIpCisKK2RlZiByZWJ1aWxkX2V4YyhleGMsIHRiKToKKyAgICBleGMuX19jYXVzZV9fID0gUmVtb3RlVHJhY2ViYWNrKHRiKQorICAgIHJldHVybiBleGMKKworIwogIyBDb2RlIHJ1biBieSB3b3JrZXIgcHJvY2Vzc2VzCiAjCiAKQEAgLTYzLDcgKzkwLDggQEAKICAgICAgICAgcmV0dXJuICI8TWF5YmVFbmNvZGluZ0Vycm9yOiAlcz4iICUgc3RyKHNlbGYpCiAKIAotZGVmIHdvcmtlcihpbnF1ZXVlLCBvdXRxdWV1ZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksIG1heHRhc2tzPU5vbmUpOgorZGVmIHdvcmtlcihpbnF1ZXVlLCBvdXRxdWV1ZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksIG1heHRhc2tzPU5vbmUsCisgICAgICAgICAgIHdyYXBfZXhjZXB0aW9uPUZhbHNlKToKICAgICBhc3NlcnQgbWF4dGFza3MgaXMgTm9uZSBvciAodHlwZShtYXh0YXNrcykgPT0gaW50IGFuZCBtYXh0YXNrcyA+IDApCiAgICAgcHV0ID0gb3V0cXVldWUucHV0CiAgICAgZ2V0ID0gaW5xdWV1ZS5nZXQKQEAgLTc4LDI4ICsxMDYsMzAgQEAKICAgICB3aGlsZSBtYXh0YXNrcyBpcyBOb25lIG9yIChtYXh0YXNrcyBhbmQgY29tcGxldGVkIDwgbWF4dGFza3MpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKLSAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgSU9FcnJvcik6Ci0gICAgICAgICAgICBkZWJ1Zygnd29ya2VyIGdvdCBFT0ZFcnJvciBvciBJT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3dvcmtlciBnb3QgRU9GRXJyb3Igb3IgT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgZGVidWcoJ3dvcmtlciBnb3Qgc2VudGluZWwgLS0gZXhpdGluZycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZ290IHNlbnRpbmVsIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBqb2IsIGksIGZ1bmMsIGFyZ3MsIGt3ZHMgPSB0YXNrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IChUcnVlLCBmdW5jKCphcmdzLCAqKmt3ZHMpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBpZiB3cmFwX2V4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBlID0gRXhjZXB0aW9uV2l0aFRyYWNlYmFjayhlLCBlLl9fdHJhY2ViYWNrX18pCiAgICAgICAgICAgICByZXN1bHQgPSAoRmFsc2UsIGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHB1dCgoam9iLCBpLCByZXN1bHQpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICB3cmFwcGVkID0gTWF5YmVFbmNvZGluZ0Vycm9yKGUsIHJlc3VsdFsxXSkKLSAgICAgICAgICAgIGRlYnVnKCJQb3NzaWJsZSBlbmNvZGluZyBlcnJvciB3aGlsZSBzZW5kaW5nIHJlc3VsdDogJXMiICUgKAorICAgICAgICAgICAgdXRpbC5kZWJ1ZygiUG9zc2libGUgZW5jb2RpbmcgZXJyb3Igd2hpbGUgc2VuZGluZyByZXN1bHQ6ICVzIiAlICgKICAgICAgICAgICAgICAgICB3cmFwcGVkKSkKICAgICAgICAgICAgIHB1dCgoam9iLCBpLCAoRmFsc2UsIHdyYXBwZWQpKSkKICAgICAgICAgY29tcGxldGVkICs9IDEKLSAgICBkZWJ1Zygnd29ya2VyIGV4aXRpbmcgYWZ0ZXIgJWQgdGFza3MnICUgY29tcGxldGVkKQorICAgIHV0aWwuZGVidWcoJ3dvcmtlciBleGl0aW5nIGFmdGVyICVkIHRhc2tzJyAlIGNvbXBsZXRlZCkKIAogIwogIyBDbGFzcyByZXByZXNlbnRpbmcgYSBwcm9jZXNzIHBvb2wKQEAgLTEwOSwxMCArMTM5LDE0IEBACiAgICAgJycnCiAgICAgQ2xhc3Mgd2hpY2ggc3VwcG9ydHMgYW4gYXN5bmMgdmVyc2lvbiBvZiBhcHBseWluZyBmdW5jdGlvbnMgdG8gYXJndW1lbnRzLgogICAgICcnJwotICAgIFByb2Nlc3MgPSBQcm9jZXNzCisgICAgX3dyYXBfZXhjZXB0aW9uID0gVHJ1ZQorCisgICAgZGVmIFByb2Nlc3Moc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9jdHguUHJvY2VzcygqYXJncywgKiprd2RzKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwKLSAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKKyAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBzZWxmLl9jdHggPSBjb250ZXh0IG9yIGdldF9jb250ZXh0KCkKICAgICAgICAgc2VsZi5fc2V0dXBfcXVldWVzKCkKICAgICAgICAgc2VsZi5fdGFza3F1ZXVlID0gcXVldWUuUXVldWUoKQogICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CkBAIC0xMjIsMTAgKzE1Niw3IEBACiAgICAgICAgIHNlbGYuX2luaXRhcmdzID0gaW5pdGFyZ3MKIAogICAgICAgICBpZiBwcm9jZXNzZXMgaXMgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwcm9jZXNzZXMgPSBjcHVfY291bnQoKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gMQorICAgICAgICAgICAgcHJvY2Vzc2VzID0gb3MuY3B1X2NvdW50KCkgb3IgMQogICAgICAgICBpZiBwcm9jZXNzZXMgPCAxOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTnVtYmVyIG9mIHByb2Nlc3NlcyBtdXN0IGJlIGF0IGxlYXN0IDEiKQogCkBAIC0xNjIsNyArMTkzLDcgQEAKICAgICAgICAgc2VsZi5fcmVzdWx0X2hhbmRsZXIuX3N0YXRlID0gUlVOCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLnN0YXJ0KCkKIAotICAgICAgICBzZWxmLl90ZXJtaW5hdGUgPSBGaW5hbGl6ZSgKKyAgICAgICAgc2VsZi5fdGVybWluYXRlID0gdXRpbC5GaW5hbGl6ZSgKICAgICAgICAgICAgIHNlbGYsIHNlbGYuX3Rlcm1pbmF0ZV9wb29sLAogICAgICAgICAgICAgYXJncz0oc2VsZi5fdGFza3F1ZXVlLCBzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwgc2VsZi5fcG9vbCwKICAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLCBzZWxmLl90YXNrX2hhbmRsZXIsCkBAIC0xNzksNyArMjEwLDcgQEAKICAgICAgICAgICAgIHdvcmtlciA9IHNlbGYuX3Bvb2xbaV0KICAgICAgICAgICAgIGlmIHdvcmtlci5leGl0Y29kZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAjIHdvcmtlciBleGl0ZWQKLSAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIGkpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIGkpCiAgICAgICAgICAgICAgICAgd29ya2VyLmpvaW4oKQogICAgICAgICAgICAgICAgIGNsZWFuZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX3Bvb2xbaV0KQEAgLTE5MywxMyArMjI0LDE0IEBACiAgICAgICAgICAgICB3ID0gc2VsZi5Qcm9jZXNzKHRhcmdldD13b3JrZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2lucXVldWUsIHNlbGYuX291dHF1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbml0aWFsaXplciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5pdGFyZ3MsIHNlbGYuX21heHRhc2tzcGVyY2hpbGQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luaXRhcmdzLCBzZWxmLl9tYXh0YXNrc3BlcmNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cmFwX2V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICBzZWxmLl9wb29sLmFwcGVuZCh3KQogICAgICAgICAgICAgdy5uYW1lID0gdy5uYW1lLnJlcGxhY2UoJ1Byb2Nlc3MnLCAnUG9vbFdvcmtlcicpCiAgICAgICAgICAgICB3LmRhZW1vbiA9IFRydWUKICAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgZGVidWcoJ2FkZGVkIHdvcmtlcicpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdhZGRlZCB3b3JrZXInKQogCiAgICAgZGVmIF9tYWludGFpbl9wb29sKHNlbGYpOgogICAgICAgICAiIiJDbGVhbiB1cCBhbnkgZXhpdGVkIHdvcmtlcnMgYW5kIHN0YXJ0IHJlcGxhY2VtZW50cyBmb3IgdGhlbS4KQEAgLTIwOCw5ICsyNDAsOCBAQAogICAgICAgICAgICAgc2VsZi5fcmVwb3B1bGF0ZV9wb29sKCkKIAogICAgIGRlZiBfc2V0dXBfcXVldWVzKHNlbGYpOgotICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgICAgIHNlbGYuX2lucXVldWUgPSBTaW1wbGVRdWV1ZSgpCi0gICAgICAgIHNlbGYuX291dHF1ZXVlID0gU2ltcGxlUXVldWUoKQorICAgICAgICBzZWxmLl9pbnF1ZXVlID0gc2VsZi5fY3R4LlNpbXBsZVF1ZXVlKCkKKyAgICAgICAgc2VsZi5fb3V0cXVldWUgPSBzZWxmLl9jdHguU2ltcGxlUXVldWUoKQogICAgICAgICBzZWxmLl9xdWlja19wdXQgPSBzZWxmLl9pbnF1ZXVlLl93cml0ZXIuc2VuZAogICAgICAgICBzZWxmLl9xdWlja19nZXQgPSBzZWxmLl9vdXRxdWV1ZS5fcmVhZGVyLnJlY3YKIApAQCAtMzM2LDcgKzM2Nyw3IEBACiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICAgICAgIyBzZW5kIHNlbnRpbmVsIHRvIHN0b3Agd29ya2VycwogICAgICAgICBwb29sLl90YXNrcXVldWUucHV0KE5vbmUpCi0gICAgICAgIGRlYnVnKCd3b3JrZXIgaGFuZGxlciBleGl0aW5nJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfdGFza3ModGFza3F1ZXVlLCBwdXQsIG91dHF1ZXVlLCBwb29sLCBjYWNoZSk6CkBAIC0zNDYsNyArMzc3LDcgQEAKICAgICAgICAgICAgIGkgPSAtMQogICAgICAgICAgICAgZm9yIGksIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzZXEpOgogICAgICAgICAgICAgICAgIGlmIHRocmVhZC5fc3RhdGU6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZSAhPSBSVU4nKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZSAhPSBSVU4nKQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcHV0KHRhc2spCkBAIC0zNTgsMjcgKzM4OSwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBzZXRfbGVuZ3RoOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKKyAgICAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKICAgICAgICAgICAgICAgICAgICAgc2V0X2xlbmd0aChpKzEpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IHNlbnRpbmVsJykKIAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdGVsbCByZXN1bHQgaGFuZGxlciB0byBmaW5pc2ggd2hlbiBjYWNoZSBpcyBlbXB0eQotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHJlc3VsdCBoYW5kbGVyJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHJlc3VsdCBoYW5kbGVyJykKICAgICAgICAgICAgIG91dHF1ZXVlLnB1dChOb25lKQogCiAgICAgICAgICAgICAjIHRlbGwgd29ya2VycyB0aGVyZSBpcyBubyBtb3JlIHdvcmsKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgc2VuZGluZyBzZW50aW5lbCB0byB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBwdXQoTm9uZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBJT0Vycm9yIHdoZW4gc2VuZGluZyBzZW50aW5lbHMnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3QgT1NFcnJvciB3aGVuIHNlbmRpbmcgc2VudGluZWxzJykKIAotICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGV4aXRpbmcnKQorICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfcmVzdWx0cyhvdXRxdWV1ZSwgZ2V0LCBjYWNoZSk6CkBAIC0zODcsMTcgKzQxOCwxNyBAQAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRhc2sgPSBnZXQoKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9JT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL09TRXJyb3IgLS0gZXhpdGluZycpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgICAgIGlmIHRocmVhZC5fc3RhdGU6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IHRocmVhZC5fc3RhdGUgPT0gVEVSTUlOQVRFCi0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGU9VEVSTUlOQVRFJykKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlPVRFUk1JTkFURScpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3Qgc2VudGluZWwnKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgam9iLCBpLCBvYmogPSB0YXNrCkBAIC00MDksMTIgKzQ0MCwxMiBAQAogICAgICAgICB3aGlsZSBjYWNoZSBhbmQgdGhyZWFkLl9zdGF0ZSAhPSBURVJNSU5BVEU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL0lPRXJyb3IgLS0gZXhpdGluZycpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBpZ25vcmluZyBleHRyYSBzZW50aW5lbCcpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgaWdub3JpbmcgZXh0cmEgc2VudGluZWwnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBqb2IsIGksIG9iaiA9IHRhc2sKICAgICAgICAgICAgIHRyeToKQEAgLTQyMyw3ICs0NTQsNyBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBpZiBoYXNhdHRyKG91dHF1ZXVlLCAnX3JlYWRlcicpOgotICAgICAgICAgICAgZGVidWcoJ2Vuc3VyaW5nIHRoYXQgb3V0cXVldWUgaXMgbm90IGZ1bGwnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZW5zdXJpbmcgdGhhdCBvdXRxdWV1ZSBpcyBub3QgZnVsbCcpCiAgICAgICAgICAgICAjIElmIHdlIGRvbid0IG1ha2Ugcm9vbSBhdmFpbGFibGUgaW4gb3V0cXVldWUgdGhlbgogICAgICAgICAgICAgIyBhdHRlbXB0cyB0byBhZGQgdGhlIHNlbnRpbmVsIChOb25lKSB0byBvdXRxdWV1ZSBtYXkKICAgICAgICAgICAgICMgYmxvY2suICBUaGVyZSBpcyBndWFyYW50ZWVkIHRvIGJlIG5vIG1vcmUgdGhhbiAyIHNlbnRpbmVscy4KQEAgLTQzMiwxMCArNDYzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRxdWV1ZS5fcmVhZGVyLnBvbGwoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZXhpdGluZzogbGVuKGNhY2hlKT0lcywgdGhyZWFkLl9zdGF0ZT0lcycsCisgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGV4aXRpbmc6IGxlbihjYWNoZSk9JXMsIHRocmVhZC5fc3RhdGU9JXMnLAogICAgICAgICAgICAgICBsZW4oY2FjaGUpLCB0aHJlYWQuX3N0YXRlKQogCiAgICAgQHN0YXRpY21ldGhvZApAQCAtNDUzLDE5ICs0ODQsMTkgQEAKICAgICAgICAgICAgICAgKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBkZWJ1ZygnY2xvc2luZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygnY2xvc2luZyBwb29sJykKICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gUlVOOgogICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSBDTE9TRQogICAgICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gQ0xPU0UKIAogICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygndGVybWluYXRpbmcgcG9vbCcpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBzZWxmLl90ZXJtaW5hdGUoKQogCiAgICAgZGVmIGpvaW4oc2VsZik6Ci0gICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHBvb2wnKQogICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUgaW4gKENMT1NFLCBURVJNSU5BVEUpCiAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLmpvaW4oKQogICAgICAgICBzZWxmLl90YXNrX2hhbmRsZXIuam9pbigpCkBAIC00NzYsNyArNTA3LDcgQEAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oZWxwX3N0dWZmX2ZpbmlzaChpbnF1ZXVlLCB0YXNrX2hhbmRsZXIsIHNpemUpOgogICAgICAgICAjIHRhc2tfaGFuZGxlciBtYXkgYmUgYmxvY2tlZCB0cnlpbmcgdG8gcHV0IGl0ZW1zIG9uIGlucXVldWUKLSAgICAgICAgZGVidWcoJ3JlbW92aW5nIHRhc2tzIGZyb20gaW5xdWV1ZSB1bnRpbCB0YXNrIGhhbmRsZXIgZmluaXNoZWQnKQorICAgICAgICB1dGlsLmRlYnVnKCdyZW1vdmluZyB0YXNrcyBmcm9tIGlucXVldWUgdW50aWwgdGFzayBoYW5kbGVyIGZpbmlzaGVkJykKICAgICAgICAgaW5xdWV1ZS5fcmxvY2suYWNxdWlyZSgpCiAgICAgICAgIHdoaWxlIHRhc2tfaGFuZGxlci5pc19hbGl2ZSgpIGFuZCBpbnF1ZXVlLl9yZWFkZXIucG9sbCgpOgogICAgICAgICAgICAgaW5xdWV1ZS5fcmVhZGVyLnJlY3YoKQpAQCAtNDg2LDEyICs1MTcsMTIgQEAKICAgICBkZWYgX3Rlcm1pbmF0ZV9wb29sKGNscywgdGFza3F1ZXVlLCBpbnF1ZXVlLCBvdXRxdWV1ZSwgcG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLCB0YXNrX2hhbmRsZXIsIHJlc3VsdF9oYW5kbGVyLCBjYWNoZSk6CiAgICAgICAgICMgdGhpcyBpcyBndWFyYW50ZWVkIHRvIG9ubHkgYmUgY2FsbGVkIG9uY2UKLSAgICAgICAgZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCiAKICAgICAgICAgd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHRhc2tfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKIAotICAgICAgICBkZWJ1ZygnaGVscGluZyB0YXNrIGhhbmRsZXIvd29ya2VycyB0byBmaW5pc2gnKQorICAgICAgICB1dGlsLmRlYnVnKCdoZWxwaW5nIHRhc2sgaGFuZGxlci93b3JrZXJzIHRvIGZpbmlzaCcpCiAgICAgICAgIGNscy5faGVscF9zdHVmZl9maW5pc2goaW5xdWV1ZSwgdGFza19oYW5kbGVyLCBsZW4ocG9vbCkpCiAKICAgICAgICAgYXNzZXJ0IHJlc3VsdF9oYW5kbGVyLmlzX2FsaXZlKCkgb3IgbGVuKGNhY2hlKSA9PSAwCkBAIC01MDEsMzEgKzUzMiwzMSBAQAogCiAgICAgICAgICMgV2UgbXVzdCB3YWl0IGZvciB0aGUgd29ya2VyIGhhbmRsZXIgdG8gZXhpdCBiZWZvcmUgdGVybWluYXRpbmcKICAgICAgICAgIyB3b3JrZXJzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB3b3JrZXJzIHRvIGJlIHJlc3RhcnRlZCBiZWhpbmQgb3VyIGJhY2suCi0gICAgICAgIGRlYnVnKCdqb2luaW5nIHdvcmtlciBoYW5kbGVyJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyB3b3JrZXIgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCB3b3JrZXJfaGFuZGxlcjoKICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLmpvaW4oKQogCiAgICAgICAgICMgVGVybWluYXRlIHdvcmtlcnMgd2hpY2ggaGF2ZW4ndCBhbHJlYWR5IGZpbmlzaGVkLgogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKLSAgICAgICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rlcm1pbmF0aW5nIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBpZiBwLmV4aXRjb2RlIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHAudGVybWluYXRlKCkKIAotICAgICAgICBkZWJ1Zygnam9pbmluZyB0YXNrIGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHRhc2sgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCB0YXNrX2hhbmRsZXI6CiAgICAgICAgICAgICB0YXNrX2hhbmRsZXIuam9pbigpCiAKLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgcmVzdWx0IGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHJlc3VsdCBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHJlc3VsdF9oYW5kbGVyOgogICAgICAgICAgICAgcmVzdWx0X2hhbmRsZXIuam9pbigpCiAKICAgICAgICAgaWYgcG9vbCBhbmQgaGFzYXR0cihwb29sWzBdLCAndGVybWluYXRlJyk6Ci0gICAgICAgICAgICBkZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBpZiBwLmlzX2FsaXZlKCk6CiAgICAgICAgICAgICAgICAgICAgICMgd29ya2VyIGhhcyBub3QgeWV0IGV4aXRlZAotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIHAucGlkKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgcC5waWQpCiAgICAgICAgICAgICAgICAgICAgIHAuam9pbigpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgpAQCAtNzEwLDggKzc0MSwxMiBAQAogIwogCiBjbGFzcyBUaHJlYWRQb29sKFBvb2wpOgorICAgIF93cmFwX2V4Y2VwdGlvbiA9IEZhbHNlCiAKLSAgICBmcm9tIC5kdW1teSBpbXBvcnQgUHJvY2VzcworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgUHJvY2VzcygqYXJncywgKiprd2RzKToKKyAgICAgICAgZnJvbSAuZHVtbXkgaW1wb3J0IFByb2Nlc3MKKyAgICAgICAgcmV0dXJuIFByb2Nlc3MoKmFyZ3MsICoqa3dkcykKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCkpOgogICAgICAgICBQb29sLl9faW5pdF9fKHNlbGYsIHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2N2U3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkKQEAgLTAsMCArMSw4MyBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgZXJybm8KKworZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworIworIyBTdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIGZvcmsKKyMKKworY2xhc3MgUG9wZW4ob2JqZWN0KToKKyAgICBtZXRob2QgPSAnZm9yaycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICBzZWxmLl9sYXVuY2gocHJvY2Vzc19vYmopCisKKyAgICBkZWYgZHVwbGljYXRlX2Zvcl9jaGlsZChzZWxmLCBmZCk6CisgICAgICAgIHJldHVybiBmZAorCisgICAgZGVmIHBvbGwoc2VsZiwgZmxhZz1vcy5XTk9IQU5HKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBvcy53YWl0cGlkKHNlbGYucGlkLCBmbGFnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgbm90IHlldCBjcmVhdGVkLiBTZWUgIzE3MzE3MTcKKyAgICAgICAgICAgICAgICAgICAgIyBlLmVycm5vID09IGVycm5vLkVDSElMRCA9PSAxMAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6CisgICAgICAgICAgICAgICAgaWYgb3MuV0lGU0lHTkFMRUQoc3RzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gLW9zLldURVJNU0lHKHN0cykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MuV0lGRVhJVEVEKHN0cykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gb3MuV0VYSVRTVEFUVVMoc3RzKQorICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAorICAgICAgICAgICAgICAgIGlmIG5vdCB3YWl0KFtzZWxmLnNlbnRpbmVsXSwgdGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb2NrIGlmIHdhaXQoKSByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wb2xsKG9zLldOT0hBTkcgaWYgdGltZW91dCA9PSAwLjAgZWxzZSAwKQorICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYucGlkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9jZXNzTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi53YWl0KHRpbWVvdXQ9MC4xKSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9sYXVuY2goc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBjb2RlID0gMQorICAgICAgICBwYXJlbnRfciwgY2hpbGRfdyA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLnBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBzZWxmLnBpZCA9PSAwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHBhcmVudF9yKQorICAgICAgICAgICAgICAgIGlmICdyYW5kb20nIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgcmFuZG9tCisgICAgICAgICAgICAgICAgICAgIHJhbmRvbS5zZWVkKCkKKyAgICAgICAgICAgICAgICBjb2RlID0gcHJvY2Vzc19vYmouX2Jvb3RzdHJhcCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLl9leGl0KGNvZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF93KQorICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHBhcmVudF9yLCkpCisgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gcGFyZW50X3IKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9ya3NlcnZlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzkyMTk0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsNjkgQEAKK2ltcG9ydCBpbworaW1wb3J0IG9zCisKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitpZiBub3QgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ05vIHN1cHBvcnQgZm9yIHNlbmRpbmcgZmRzIGJldHdlZW4gcHJvY2Vzc2VzJykKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBmb3Jrc2VydmVyCitmcm9tIC4gaW1wb3J0IHBvcGVuX2ZvcmsKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworIworIyBXcmFwcGVyIGZvciBhbiBmZCB1c2VkIHdoaWxlIGxhdW5jaGluZyBhIHByb2Nlc3MKKyMKKworY2xhc3MgX0R1cEZkKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZCk6CisgICAgICAgIHNlbGYuaW5kID0gaW5kCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgcmV0dXJuIGZvcmtzZXJ2ZXIuZ2V0X2luaGVyaXRlZF9mZHMoKVtzZWxmLmluZF0KKworIworIyBTdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIGEgc2VydmVyIHByb2Nlc3MKKyMKKworY2xhc3MgUG9wZW4ocG9wZW5fZm9yay5Qb3Blbik6CisgICAgbWV0aG9kID0gJ2ZvcmtzZXJ2ZXInCisgICAgRHVwRmQgPSBfRHVwRmQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHNlbGYuX2ZkcyA9IFtdCisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocHJvY2Vzc19vYmopCisKKyAgICBkZWYgZHVwbGljYXRlX2Zvcl9jaGlsZChzZWxmLCBmZCk6CisgICAgICAgIHNlbGYuX2Zkcy5hcHBlbmQoZmQpCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZmRzKSAtIDEKKworICAgIGRlZiBfbGF1bmNoKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcHJlcF9kYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCisgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIGJ1ZikKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCBidWYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihOb25lKQorCisgICAgICAgIHNlbGYuc2VudGluZWwsIHcgPSBmb3Jrc2VydmVyLmNvbm5lY3RfdG9fbmV3X3Byb2Nlc3Moc2VsZi5fZmRzKQorICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAoc2VsZi5zZW50aW5lbCwpKQorICAgICAgICB3aXRoIG9wZW4odywgJ3diJywgY2xvc2VmZD1UcnVlKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShidWYuZ2V0YnVmZmVyKCkpCisgICAgICAgIHNlbGYucGlkID0gZm9ya3NlcnZlci5yZWFkX3Vuc2lnbmVkKHNlbGYuc2VudGluZWwpCisKKyAgICBkZWYgcG9sbChzZWxmLCBmbGFnPW9zLldOT0hBTkcpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwIGlmIGZsYWcgPT0gb3MuV05PSEFORyBlbHNlIE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0KFtzZWxmLnNlbnRpbmVsXSwgdGltZW91dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBmb3Jrc2VydmVyLnJlYWRfdW5zaWduZWQoc2VsZi5zZW50aW5lbCkKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgICMgVGhlIHByb2Nlc3MgZW5kZWQgYWJub3JtYWxseSBwZXJoYXBzIGJlY2F1c2Ugb2YgYSBzaWduYWwKKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAyNTUKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl9wb3NpeC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fcG9zaXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwYThkNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fcG9zaXgucHkKQEAgLTAsMCArMSw2OSBAQAoraW1wb3J0IGlvCitpbXBvcnQgb3MKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHBvcGVuX2ZvcmsKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisKKyMKKyMgV3JhcHBlciBmb3IgYW4gZmQgdXNlZCB3aGlsZSBsYXVuY2hpbmcgYSBwcm9jZXNzCisjCisKK2NsYXNzIF9EdXBGZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZkCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBhIGZyZXNoIGludGVycHJldGVyCisjCisKK2NsYXNzIFBvcGVuKHBvcGVuX2ZvcmsuUG9wZW4pOgorICAgIG1ldGhvZCA9ICdzcGF3bicKKyAgICBEdXBGZCA9IF9EdXBGZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc2VsZi5fZmRzID0gW10KKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZChmZCkKKyAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgdHJhY2tlcl9mZCA9IHNlbWFwaG9yZV90cmFja2VyLmdldGZkKCkKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZCh0cmFja2VyX2ZkKQorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKyAgICAgICAgZnAgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJlcF9kYXRhLCBmcCkKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCBmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKE5vbmUpCisKKyAgICAgICAgcGFyZW50X3IgPSBjaGlsZF93ID0gY2hpbGRfciA9IHBhcmVudF93ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJlbnRfciwgY2hpbGRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgY2hpbGRfciwgcGFyZW50X3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIGNtZCA9IHNwYXduLmdldF9jb21tYW5kX2xpbmUodHJhY2tlcl9mZD10cmFja2VyX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX2hhbmRsZT1jaGlsZF9yKQorICAgICAgICAgICAgc2VsZi5fZmRzLmV4dGVuZChbY2hpbGRfciwgY2hpbGRfd10pCisgICAgICAgICAgICBzZWxmLnBpZCA9IHV0aWwuc3Bhd252X3Bhc3NmZHMoc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQsIHNlbGYuX2ZkcykKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBwYXJlbnRfcgorICAgICAgICAgICAgd2l0aCBvcGVuKHBhcmVudF93LCAnd2InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZnAuZ2V0YnVmZmVyKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBwYXJlbnRfciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAocGFyZW50X3IsKSkKKyAgICAgICAgICAgIGZvciBmZCBpbiAoY2hpbGRfciwgY2hpbGRfdywgcGFyZW50X3cpOgorICAgICAgICAgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTMwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5CkBAIC0wLDAgKzEsOTkgQEAKK2ltcG9ydCBvcworaW1wb3J0IG1zdmNydAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IF93aW5hcGkKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworIworIworIworCitURVJNSU5BVEUgPSAweDEwMDAwCitXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQorV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKKworIworIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKKyMgd2hvc2UgY29uc3RydWN0b3IgdGFrZXMgYSBwcm9jZXNzIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuCisjCisKK2NsYXNzIFBvcGVuKG9iamVjdCk6CisgICAgJycnCisgICAgU3RhcnQgYSBzdWJwcm9jZXNzIHRvIHJ1biB0aGUgY29kZSBvZiBhIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgbWV0aG9kID0gJ3NwYXduJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcHJlcF9kYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCisKKyAgICAgICAgIyByZWFkIGVuZCBvZiBwaXBlIHdpbGwgYmUgInN0b2xlbiIgYnkgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAgICAgIyAtLSBzZWUgc3Bhd25fbWFpbigpIGluIHNwYXduLnB5LgorICAgICAgICByaGFuZGxlLCB3aGFuZGxlID0gX3dpbmFwaS5DcmVhdGVQaXBlKE5vbmUsIDApCisgICAgICAgIHdmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZSh3aGFuZGxlLCAwKQorICAgICAgICBjbWQgPSBzcGF3bi5nZXRfY29tbWFuZF9saW5lKHBhcmVudF9waWQ9b3MuZ2V0cGlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9oYW5kbGU9cmhhbmRsZSkKKyAgICAgICAgY21kID0gJyAnLmpvaW4oJyIlcyInICUgeCBmb3IgeCBpbiBjbWQpCisKKyAgICAgICAgd2l0aCBvcGVuKHdmZCwgJ3diJywgY2xvc2VmZD1UcnVlKSBhcyB0b19jaGlsZDoKKyAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGhwLCBodCwgcGlkLCB0aWQgPSBfd2luYXBpLkNyZWF0ZVByb2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIHNwYXduLmdldF9leGVjdXRhYmxlKCksIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgRmFsc2UsIDAsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHJoYW5kbGUpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCisgICAgICAgICAgICBzZWxmLnBpZCA9IHBpZAorICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBpbnQoaHApCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIF93aW5hcGkuQ2xvc2VIYW5kbGUsIChzZWxmLnNlbnRpbmVsLCkpCisKKyAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIHRvX2NoaWxkKQorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCB0b19jaGlsZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGhhbmRsZSk6CisgICAgICAgIGFzc2VydCBzZWxmIGlzIGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkKKyAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5kdXBsaWNhdGUoaGFuZGxlLCBzZWxmLnNlbnRpbmVsKQorCisgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbXNlY3MgPSBfd2luYXBpLklORklOSVRFCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCisKKyAgICAgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChpbnQoc2VsZi5faGFuZGxlKSwgbXNlY3MpCisgICAgICAgICAgICBpZiByZXMgPT0gX3dpbmFwaS5XQUlUX09CSkVDVF8wOgorICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCisgICAgICAgICAgICAgICAgaWYgY29kZSA9PSBURVJNSU5BVEU6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAtc2lnbmFsLlNJR1RFUk0KKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX3dpbmFwaS5UZXJtaW5hdGVQcm9jZXNzKGludChzZWxmLl9oYW5kbGUpLCBURVJNSU5BVEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKaW5kZXggM2QzMmFkZC4uNjg5NTliZiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQpAQCAtNyw3ICs3LDcgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nXQorX19hbGxfXyA9IFsnQmFzZVByb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbiddCiAKICMKICMgSW1wb3J0cwpAQCAtNDMsNyArNDMsNyBAQAogICAgIFJldHVybiBsaXN0IG9mIHByb2Nlc3Mgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIGxpdmUgY2hpbGQgcHJvY2Vzc2VzCiAgICAgJycnCiAgICAgX2NsZWFudXAoKQotICAgIHJldHVybiBsaXN0KF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuKQorICAgIHJldHVybiBsaXN0KF9jaGlsZHJlbikKIAogIwogIwpAQCAtNTEsMzMgKzUxLDI5IEBACiAKIGRlZiBfY2xlYW51cCgpOgogICAgICMgY2hlY2sgZm9yIHByb2Nlc3NlcyB3aGljaCBoYXZlIGZpbmlzaGVkCi0gICAgZm9yIHAgaW4gbGlzdChfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbik6CisgICAgZm9yIHAgaW4gbGlzdChfY2hpbGRyZW4pOgogICAgICAgICBpZiBwLl9wb3Blbi5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5kaXNjYXJkKHApCisgICAgICAgICAgICBfY2hpbGRyZW4uZGlzY2FyZChwKQogCiAjCiAjIFRoZSBgUHJvY2Vzc2AgY2xhc3MKICMKIAotY2xhc3MgUHJvY2VzcyhvYmplY3QpOgorY2xhc3MgQmFzZVByb2Nlc3Mob2JqZWN0KToKICAgICAnJycKICAgICBQcm9jZXNzIG9iamVjdHMgcmVwcmVzZW50IGFjdGl2aXR5IHRoYXQgaXMgcnVuIGluIGEgc2VwYXJhdGUgcHJvY2VzcwogCi0gICAgVGhlIGNsYXNzIGlzIGFuYWxhZ291cyB0byBgdGhyZWFkaW5nLlRocmVhZGAKKyAgICBUaGUgY2xhc3MgaXMgYW5hbG9nb3VzIHRvIGB0aHJlYWRpbmcuVGhyZWFkYAogICAgICcnJwotICAgIF9Qb3BlbiA9IE5vbmUKKyAgICBkZWYgX1BvcGVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZ3JvdXA9Tm9uZSwgdGFyZ2V0PU5vbmUsIG5hbWU9Tm9uZSwgYXJncz0oKSwga3dhcmdzPXt9LAogICAgICAgICAgICAgICAgICAqLCBkYWVtb249Tm9uZSk6CiAgICAgICAgIGFzc2VydCBncm91cCBpcyBOb25lLCAnZ3JvdXAgYXJndW1lbnQgbXVzdCBiZSBOb25lIGZvciBub3cnCi0gICAgICAgIGNvdW50ID0gbmV4dChfY3VycmVudF9wcm9jZXNzLl9jb3VudGVyKQorICAgICAgICBjb3VudCA9IG5leHQoX3Byb2Nlc3NfY291bnRlcikKICAgICAgICAgc2VsZi5faWRlbnRpdHkgPSBfY3VycmVudF9wcm9jZXNzLl9pZGVudGl0eSArIChjb3VudCwpCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBfY3VycmVudF9wcm9jZXNzLl9hdXRoa2V5Ci0gICAgICAgIGlmIGRhZW1vbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gZGFlbW9uCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9kYWVtb25pYyA9IF9jdXJyZW50X3Byb2Nlc3MuX2RhZW1vbmljCi0gICAgICAgIHNlbGYuX3RlbXBkaXIgPSBfY3VycmVudF9wcm9jZXNzLl90ZW1wZGlyCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IF9jdXJyZW50X3Byb2Nlc3MuX2NvbmZpZy5jb3B5KCkKICAgICAgICAgc2VsZi5fcGFyZW50X3BpZCA9IG9zLmdldHBpZCgpCiAgICAgICAgIHNlbGYuX3BvcGVuID0gTm9uZQogICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKQEAgLTg1LDYgKzgxLDggQEAKICAgICAgICAgc2VsZi5fa3dhcmdzID0gZGljdChrd2FyZ3MpCiAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lIG9yIHR5cGUoc2VsZikuX19uYW1lX18gKyAnLScgKyBcCiAgICAgICAgICAgICAgICAgICAgICAnOicuam9pbihzdHIoaSkgZm9yIGkgaW4gc2VsZi5faWRlbnRpdHkpCisgICAgICAgIGlmIGRhZW1vbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gZGFlbW9uCiAgICAgICAgIF9kYW5nbGluZy5hZGQoc2VsZikKIAogICAgIGRlZiBydW4oc2VsZik6CkBAIC0xMDEsMTYgKzk5LDEyIEBACiAgICAgICAgIGFzc2VydCBzZWxmLl9wb3BlbiBpcyBOb25lLCAnY2Fubm90IHN0YXJ0IGEgcHJvY2VzcyB0d2ljZScKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BhcmVudF9waWQgPT0gb3MuZ2V0cGlkKCksIFwKICAgICAgICAgICAgICAgICdjYW4gb25seSBzdGFydCBhIHByb2Nlc3Mgb2JqZWN0IGNyZWF0ZWQgYnkgY3VycmVudCBwcm9jZXNzJwotICAgICAgICBhc3NlcnQgbm90IF9jdXJyZW50X3Byb2Nlc3MuX2RhZW1vbmljLCBcCisgICAgICAgIGFzc2VydCBub3QgX2N1cnJlbnRfcHJvY2Vzcy5fY29uZmlnLmdldCgnZGFlbW9uJyksIFwKICAgICAgICAgICAgICAgICdkYWVtb25pYyBwcm9jZXNzZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgY2hpbGRyZW4nCiAgICAgICAgIF9jbGVhbnVwKCkKLSAgICAgICAgaWYgc2VsZi5fUG9wZW4gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBQb3BlbiA9IHNlbGYuX1BvcGVuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmcm9tIC5mb3JraW5nIGltcG9ydCBQb3BlbgotICAgICAgICBzZWxmLl9wb3BlbiA9IFBvcGVuKHNlbGYpCisgICAgICAgIHNlbGYuX3BvcGVuID0gc2VsZi5fUG9wZW4oc2VsZikKICAgICAgICAgc2VsZi5fc2VudGluZWwgPSBzZWxmLl9wb3Blbi5zZW50aW5lbAotICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5hZGQoc2VsZikKKyAgICAgICAgX2NoaWxkcmVuLmFkZChzZWxmKQogCiAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKICAgICAgICAgJycnCkBAIC0xMjYsNyArMTIwLDcgQEAKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BvcGVuIGlzIG5vdCBOb25lLCAnY2FuIG9ubHkgam9pbiBhIHN0YXJ0ZWQgcHJvY2VzcycKICAgICAgICAgcmVzID0gc2VsZi5fcG9wZW4ud2FpdCh0aW1lb3V0KQogICAgICAgICBpZiByZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5kaXNjYXJkKHNlbGYpCisgICAgICAgICAgICBfY2hpbGRyZW4uZGlzY2FyZChzZWxmKQogCiAgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgogICAgICAgICAnJycKQEAgLTE1NCw3ICsxNDgsNyBAQAogICAgICAgICAnJycKICAgICAgICAgUmV0dXJuIHdoZXRoZXIgcHJvY2VzcyBpcyBhIGRhZW1vbgogICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RhZW1vbmljCisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWcuZ2V0KCdkYWVtb24nLCBGYWxzZSkKIAogICAgIEBkYWVtb24uc2V0dGVyCiAgICAgZGVmIGRhZW1vbihzZWxmLCBkYWVtb25pYyk6CkBAIC0xNjIsMTggKzE1NiwxOCBAQAogICAgICAgICBTZXQgd2hldGhlciBwcm9jZXNzIGlzIGEgZGFlbW9uCiAgICAgICAgICcnJwogICAgICAgICBhc3NlcnQgc2VsZi5fcG9wZW4gaXMgTm9uZSwgJ3Byb2Nlc3MgaGFzIGFscmVhZHkgc3RhcnRlZCcKLSAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb25pYworICAgICAgICBzZWxmLl9jb25maWdbJ2RhZW1vbiddID0gZGFlbW9uaWMKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBhdXRoa2V5KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYXV0aGtleQorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnWydhdXRoa2V5J10KIAogICAgIEBhdXRoa2V5LnNldHRlcgogICAgIGRlZiBhdXRoa2V5KHNlbGYsIGF1dGhrZXkpOgogICAgICAgICAnJycKICAgICAgICAgU2V0IGF1dGhvcml6YXRpb24ga2V5IG9mIHByb2Nlc3MKICAgICAgICAgJycnCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICBzZWxmLl9jb25maWdbJ2F1dGhrZXknXSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgZXhpdGNvZGUoc2VsZik6CkBAIC0yMjcsMTcgKzIyMSwxOSBAQAogICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdzdG9wcGVkWyVzXScgJSBfZXhpdGNvZGVfdG9fbmFtZS5nZXQoc3RhdHVzLCBzdGF0dXMpCiAKICAgICAgICAgcmV0dXJuICc8JXMoJXMsICVzJXMpPicgJSAodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxmLl9kYWVtb25pYyBhbmQgJyBkYWVtb24nIG9yICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHNlbGYuZGFlbW9uIGFuZCAnIGRhZW1vbicgb3IgJycpCiAKICAgICAjIwogCiAgICAgZGVmIF9ib290c3RyYXAoc2VsZik6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgdXRpbAotICAgICAgICBnbG9iYWwgX2N1cnJlbnRfcHJvY2VzcworICAgICAgICBmcm9tIC4gaW1wb3J0IHV0aWwsIGNvbnRleHQKKyAgICAgICAgZ2xvYmFsIF9jdXJyZW50X3Byb2Nlc3MsIF9wcm9jZXNzX2NvdW50ZXIsIF9jaGlsZHJlbgogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gc2V0KCkKLSAgICAgICAgICAgIHNlbGYuX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXJ0X21ldGhvZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9mb3JjZV9zdGFydF9tZXRob2Qoc2VsZi5fc3RhcnRfbWV0aG9kKQorICAgICAgICAgICAgX3Byb2Nlc3NfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQorICAgICAgICAgICAgX2NoaWxkcmVuID0gc2V0KCkKICAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCkBAIC0yODUsOCArMjgxLDggQEAKIAogY2xhc3MgQXV0aGVudGljYXRpb25TdHJpbmcoYnl0ZXMpOgogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgotICAgICAgICBmcm9tIC5mb3JraW5nIGltcG9ydCBQb3BlbgotICAgICAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6CisgICAgICAgIGZyb20gLmNvbnRleHQgaW1wb3J0IGdldF9zcGF3bmluZ19wb3BlbgorICAgICAgICBpZiBnZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgICdQaWNrbGluZyBhbiBBdXRoZW50aWNhdGlvblN0cmluZyBvYmplY3QgaXMgJwogICAgICAgICAgICAgICAgICdkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zJwpAQCAtMjk3LDIwICsyOTMsMjkgQEAKICMgQ3JlYXRlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG1haW4gcHJvY2VzcwogIwogCi1jbGFzcyBfTWFpblByb2Nlc3MoUHJvY2Vzcyk6CitjbGFzcyBfTWFpblByb2Nlc3MoQmFzZVByb2Nlc3MpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLl9pZGVudGl0eSA9ICgpCi0gICAgICAgIHNlbGYuX2RhZW1vbmljID0gRmFsc2UKICAgICAgICAgc2VsZi5fbmFtZSA9ICdNYWluUHJvY2VzcycKICAgICAgICAgc2VsZi5fcGFyZW50X3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5fcG9wZW4gPSBOb25lCi0gICAgICAgIHNlbGYuX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBzZXQoKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcob3MudXJhbmRvbSgzMikpCi0gICAgICAgIHNlbGYuX3RlbXBkaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IHsnYXV0aGtleSc6IEF1dGhlbnRpY2F0aW9uU3RyaW5nKG9zLnVyYW5kb20oMzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZW1wcmVmaXgnOiAnL21wJ30KKyAgICAgICAgIyBOb3RlIHRoYXQgc29tZSB2ZXJzaW9ucyBvZiBGcmVlQlNEIG9ubHkgYWxsb3cgbmFtZWQKKyAgICAgICAgIyBzZW1hcGhvcmVzIHRvIGhhdmUgbmFtZXMgb2YgdXAgdG8gMTQgY2hhcmFjdGVycy4gIFRoZXJlZm9yZQorICAgICAgICAjIHdlIGNob29zZSBhIHNob3J0IHByZWZpeC4KKyAgICAgICAgIworICAgICAgICAjIE9uIE1hY09TWCBpbiBhIHNhbmRib3ggaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB1c2UgYQorICAgICAgICAjIGRpZmZlcmVudCBwcmVmaXggLS0gc2VlICMxOTQ3OC4KKyAgICAgICAgIworICAgICAgICAjIEV2ZXJ5dGhpbmcgaW4gc2VsZi5fY29uZmlnIHdpbGwgYmUgaW5oZXJpdGVkIGJ5IGRlc2NlbmRhbnQKKyAgICAgICAgIyBwcm9jZXNzZXMuCisKIAogX2N1cnJlbnRfcHJvY2VzcyA9IF9NYWluUHJvY2VzcygpCitfcHJvY2Vzc19jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCitfY2hpbGRyZW4gPSBzZXQoKQogZGVsIF9NYWluUHJvY2VzcwogCiAjCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CmluZGV4IDM3MjcxZmIuLmY2NTA3NzEgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CkBAIC0xOCwxMSArMTgsMTQgQEAKIGltcG9ydCBlcnJubwogCiBmcm9tIHF1ZXVlIGltcG9ydCBFbXB0eSwgRnVsbAorCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQotZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IExvY2ssIEJvdW5kZWRTZW1hcGhvcmUsIFNlbWFwaG9yZSwgQ29uZGl0aW9uCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBkZWJ1ZywgaW5mbywgRmluYWxpemUsIHJlZ2lzdGVyX2FmdGVyX2ZvcmsKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgY29udGV4dAorCitmcm9tIC51dGlsIGltcG9ydCBkZWJ1ZywgaW5mbywgRmluYWxpemUsIHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGlzX2V4aXRpbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogIwogIyBRdWV1ZSB0eXBlIHVzaW5nIGEgcGlwZSwgYnVmZmVyIGFuZCB0aHJlYWQKQEAgLTMwLDE4ICszMywxOCBAQAogCiBjbGFzcyBRdWV1ZShvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgY3R4KToKICAgICAgICAgaWYgbWF4c2l6ZSA8PSAwOgogICAgICAgICAgICAgbWF4c2l6ZSA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jay5TRU1fVkFMVUVfTUFYCiAgICAgICAgIHNlbGYuX21heHNpemUgPSBtYXhzaXplCi0gICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gUGlwZShkdXBsZXg9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Jsb2NrID0gTG9jaygpCisgICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmxvY2sgPSBjdHguTG9jaygpCiAgICAgICAgIHNlbGYuX29waWQgPSBvcy5nZXRwaWQoKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTm9uZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBMb2NrKCkKLSAgICAgICAgc2VsZi5fc2VtID0gQm91bmRlZFNlbWFwaG9yZShtYXhzaXplKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCisgICAgICAgIHNlbGYuX3NlbSA9IGN0eC5Cb3VuZGVkU2VtYXBob3JlKG1heHNpemUpCiAgICAgICAgICMgRm9yIHVzZSBieSBjb25jdXJyZW50LmZ1dHVyZXMKICAgICAgICAgc2VsZi5faWdub3JlX2VwaXBlID0gRmFsc2UKIApAQCAtNTEsNyArNTQsNyBAQAogICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBRdWV1ZS5fYWZ0ZXJfZm9yaykKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2lnbm9yZV9lcGlwZSwgc2VsZi5fbWF4c2l6ZSwgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrLCBzZWxmLl9zZW0sIHNlbGYuX29waWQpCiAKQEAgLTY5LDggKzcyLDggQEAKICAgICAgICAgc2VsZi5fam9pbmNhbmNlbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlID0gTm9uZQotICAgICAgICBzZWxmLl9zZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgc2VsZi5fcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2CisgICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMgPSBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcworICAgICAgICBzZWxmLl9yZWN2X2J5dGVzID0gc2VsZi5fcmVhZGVyLnJlY3ZfYnl0ZXMKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAKICAgICBkZWYgcHV0KHNlbGYsIG9iaiwgYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKToKQEAgLTg5LDE0ICs5Miw5IEBACiAKICAgICBkZWYgZ2V0KHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGlmIGJsb2NrIGFuZCB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9ybG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2KCkKLSAgICAgICAgICAgICAgICBzZWxmLl9zZW0ucmVsZWFzZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLl9ybG9jay5yZWxlYXNlKCkKLQorICAgICAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbS5yZWxlYXNlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CkBAIC0xMDksMTEgKzEwNywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRW1wdHkKICAgICAgICAgICAgICAgICBlbGlmIG5vdCBzZWxmLl9wb2xsKCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVtcHR5Ci0gICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdigpCisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdl9ieXRlcygpCiAgICAgICAgICAgICAgICAgc2VsZi5fc2VtLnJlbGVhc2UoKQotICAgICAgICAgICAgICAgIHJldHVybiByZXMKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2sucmVsZWFzZSgpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKICAgICBkZWYgcXNpemUoc2VsZik6CiAgICAgICAgICMgUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3Igb24gTWFjIE9TWCBiZWNhdXNlIG9mIGJyb2tlbiBzZW1fZ2V0dmFsdWUoKQpAQCAtMTU4LDcgKzE1Nyw3IEBACiAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCiAgICAgICAgIHNlbGYuX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCiAgICAgICAgICAgICB0YXJnZXQ9UXVldWUuX2ZlZWQsCi0gICAgICAgICAgICBhcmdzPShzZWxmLl9idWZmZXIsIHNlbGYuX25vdGVtcHR5LCBzZWxmLl9zZW5kLAorICAgICAgICAgICAgYXJncz0oc2VsZi5fYnVmZmVyLCBzZWxmLl9ub3RlbXB0eSwgc2VsZi5fc2VuZF9ieXRlcywKICAgICAgICAgICAgICAgICAgIHNlbGYuX3dsb2NrLCBzZWxmLl93cml0ZXIuY2xvc2UsIHNlbGYuX2lnbm9yZV9lcGlwZSksCiAgICAgICAgICAgICBuYW1lPSdRdWV1ZUZlZWRlclRocmVhZCcKICAgICAgICAgICAgICkKQEAgLTIxMCwxMCArMjA5LDggQEAKICAgICAgICAgICAgIG5vdGVtcHR5LnJlbGVhc2UoKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZmVlZChidWZmZXIsIG5vdGVtcHR5LCBzZW5kLCB3cml0ZWxvY2ssIGNsb3NlLCBpZ25vcmVfZXBpcGUpOgorICAgIGRlZiBfZmVlZChidWZmZXIsIG5vdGVtcHR5LCBzZW5kX2J5dGVzLCB3cml0ZWxvY2ssIGNsb3NlLCBpZ25vcmVfZXBpcGUpOgogICAgICAgICBkZWJ1Zygnc3RhcnRpbmcgdGhyZWFkIHRvIGZlZWQgZGF0YSB0byBwaXBlJykKLSAgICAgICAgZnJvbSAudXRpbCBpbXBvcnQgaXNfZXhpdGluZwotCiAgICAgICAgIG5hY3F1aXJlID0gbm90ZW1wdHkuYWNxdWlyZQogICAgICAgICBucmVsZWFzZSA9IG5vdGVtcHR5LnJlbGVhc2UKICAgICAgICAgbndhaXQgPSBub3RlbXB0eS53YWl0CkBAIC0yNDEsMTIgKzIzOCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXJpYWxpemUgdGhlIGRhdGEgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgd2FjcXVpcmUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kKG9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX2J5dGVzKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FjcXVpcmUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnl0ZXMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyZWxlYXNlKCkKICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKQEAgLTI3OSwxMCArMjc4LDEwIEBACiAKIGNsYXNzIEpvaW5hYmxlUXVldWUoUXVldWUpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCk6Ci0gICAgICAgIFF1ZXVlLl9faW5pdF9fKHNlbGYsIG1heHNpemUpCi0gICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPSBTZW1hcGhvcmUoMCkKLSAgICAgICAgc2VsZi5fY29uZCA9IENvbmRpdGlvbigpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgY3R4KToKKyAgICAgICAgUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSwgY3R4PWN0eCkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IGN0eC5TZW1hcGhvcmUoMCkKKyAgICAgICAgc2VsZi5fY29uZCA9IGN0eC5Db25kaXRpb24oKQogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIFF1ZXVlLl9fZ2V0c3RhdGVfXyhzZWxmKSArIChzZWxmLl9jb25kLCBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzKQpAQCAtMzMyLDQ4ICszMzEsMzcgQEAKIAogY2xhc3MgU2ltcGxlUXVldWUob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBQaXBlKGR1cGxleD1GYWxzZSkKLSAgICAgICAgc2VsZi5fcmxvY2sgPSBMb2NrKCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBzZWxmLl9ybG9jayA9IGN0eC5Mb2NrKCkKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBOb25lCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl93bG9jayA9IExvY2soKQotICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCiAKICAgICBkZWYgZW1wdHkoc2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5fcG9sbCgpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgcmV0dXJuIChzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrKQogCiAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CiAgICAgICAgIChzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrKSA9IHN0YXRlCi0gICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKLSAgICBkZWYgX21ha2VfbWV0aG9kcyhzZWxmKToKLSAgICAgICAgcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2Ci0gICAgICAgIHJhY3F1aXJlLCBycmVsZWFzZSA9IHNlbGYuX3Jsb2NrLmFjcXVpcmUsIHNlbGYuX3Jsb2NrLnJlbGVhc2UKLSAgICAgICAgZGVmIGdldCgpOgotICAgICAgICAgICAgcmFjcXVpcmUoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiByZWN2KCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcnJlbGVhc2UoKQotICAgICAgICBzZWxmLmdldCA9IGdldAorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5fcmxvY2s6CisgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWFkZXIucmVjdl9ieXRlcygpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKKyAgICBkZWYgcHV0KHNlbGYsIG9iaik6CisgICAgICAgICMgc2VyaWFsaXplIHRoZSBkYXRhIGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2sKKyAgICAgICAgb2JqID0gRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKQogICAgICAgICBpZiBzZWxmLl93bG9jayBpcyBOb25lOgogICAgICAgICAgICAgIyB3cml0ZXMgdG8gYSBtZXNzYWdlIG9yaWVudGVkIHdpbjMyIHBpcGUgYXJlIGF0b21pYwotICAgICAgICAgICAgc2VsZi5wdXQgPSBzZWxmLl93cml0ZXIuc2VuZAorICAgICAgICAgICAgc2VsZi5fd3JpdGVyLnNlbmRfYnl0ZXMob2JqKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VuZCA9IHNlbGYuX3dyaXRlci5zZW5kCi0gICAgICAgICAgICB3YWNxdWlyZSwgd3JlbGVhc2UgPSBzZWxmLl93bG9jay5hY3F1aXJlLCBzZWxmLl93bG9jay5yZWxlYXNlCi0gICAgICAgICAgICBkZWYgcHV0KG9iaik6Ci0gICAgICAgICAgICAgICAgd2FjcXVpcmUoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbmQob2JqKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHdyZWxlYXNlKCkKLSAgICAgICAgICAgIHNlbGYucHV0ID0gcHV0CisgICAgICAgICAgICB3aXRoIHNlbGYuX3dsb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlci5zZW5kX2J5dGVzKG9iaikKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKaW5kZXggNjU2ZmE4Zi4uOGYyMDliNCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKQEAgLTEsNiArMSw1IEBACiAjCi0jIE1vZHVsZSB0byBhbGxvdyBjb25uZWN0aW9uIGFuZCBzb2NrZXQgb2JqZWN0cyB0byBiZSB0cmFuc2ZlcnJlZAotIyBiZXR3ZWVuIHByb2Nlc3NlcworIyBNb2R1bGUgd2hpY2ggZGVhbHMgd2l0aCBwaWNrbGluZyBvZiBvYmplY3RzLgogIwogIyBtdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CiAjCkBAIC04LDI3ICs3LDU2IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsncmVkdWNlX3NvY2tldCcsICdyZWR1Y2VfY29ubmVjdGlvbicsICdzZW5kX2hhbmRsZScsICdyZWN2X2hhbmRsZSddCi0KK2ltcG9ydCBjb3B5cmVnCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KIGltcG9ydCBvcwotaW1wb3J0IHN5cworaW1wb3J0IHBpY2tsZQogaW1wb3J0IHNvY2tldAotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHN0cnVjdAotaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cwogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCByZWdpc3Rlcl9hZnRlcl9mb3JrLCBkZWJ1Zywgc3ViX2RlYnVnCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBpc19leGl0aW5nLCBzdWJfd2FybmluZworZnJvbSAuIGltcG9ydCBjb250ZXh0CiAKK19fYWxsX18gPSBbJ3NlbmRfaGFuZGxlJywgJ3JlY3ZfaGFuZGxlJywgJ0ZvcmtpbmdQaWNrbGVyJywgJ3JlZ2lzdGVyJywgJ2R1bXAnXQorCisKK0hBVkVfU0VORF9IQU5ETEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IKKyAgICAgICAgICAgICAgICAgICAgKGhhc2F0dHIoc29ja2V0LCAnQ01TR19MRU4nKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoc29ja2V0LCAnU0NNX1JJR0hUUycpIGFuZAorICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihzb2NrZXQuc29ja2V0LCAnc2VuZG1zZycpKSkKIAogIwotIworIyBQaWNrbGVyIHN1YmNsYXNzCiAjCiAKLWlmIG5vdChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciAoaGFzYXR0cihzb2NrZXQsICdDTVNHX0xFTicpIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKHNvY2tldCwgJ1NDTV9SSUdIVFMnKSkpOgotICAgIHJhaXNlIEltcG9ydEVycm9yKCdwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkJykKK2NsYXNzIEZvcmtpbmdQaWNrbGVyKHBpY2tsZS5QaWNrbGVyKToKKyAgICAnJydQaWNrbGVyIHN1YmNsYXNzIHVzZWQgYnkgbXVsdGlwcm9jZXNzaW5nLicnJworICAgIF9leHRyYV9yZWR1Y2VycyA9IHt9CisgICAgX2NvcHlyZWdfZGlzcGF0Y2hfdGFibGUgPSBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzKQorICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlID0gc2VsZi5fY29weXJlZ19kaXNwYXRjaF90YWJsZS5jb3B5KCkKKyAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZS51cGRhdGUoc2VsZi5fZXh0cmFfcmVkdWNlcnMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcmVnaXN0ZXIoY2xzLCB0eXBlLCByZWR1Y2UpOgorICAgICAgICAnJydSZWdpc3RlciBhIHJlZHVjZSBmdW5jdGlvbiBmb3IgYSB0eXBlLicnJworICAgICAgICBjbHMuX2V4dHJhX3JlZHVjZXJzW3R5cGVdID0gcmVkdWNlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZHVtcHMoY2xzLCBvYmosIHByb3RvY29sPU5vbmUpOgorICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY2xzKGJ1ZiwgcHJvdG9jb2wpLmR1bXAob2JqKQorICAgICAgICByZXR1cm4gYnVmLmdldGJ1ZmZlcigpCisKKyAgICBsb2FkcyA9IHBpY2tsZS5sb2FkcworCityZWdpc3RlciA9IEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyCisKK2RlZiBkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSk6CisgICAgJycnUmVwbGFjZW1lbnQgZm9yIHBpY2tsZS5kdW1wKCkgdXNpbmcgRm9ya2luZ1BpY2tsZXIuJycnCisgICAgRm9ya2luZ1BpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKQogCiAjCiAjIFBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCkBAIC0zNiwyMCArNjQsNDQgQEAKIAogaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgIyBXaW5kb3dzCi0gICAgX19hbGxfXyArPSBbJ3JlZHVjZV9waXBlX2Nvbm5lY3Rpb24nXQorICAgIF9fYWxsX18gKz0gWydEdXBIYW5kbGUnLCAnZHVwbGljYXRlJywgJ3N0ZWFsX2hhbmRsZSddCiAgICAgaW1wb3J0IF93aW5hcGkKIAorICAgIGRlZiBkdXBsaWNhdGUoaGFuZGxlLCB0YXJnZXRfcHJvY2Vzcz1Ob25lLCBpbmhlcml0YWJsZT1GYWxzZSk6CisgICAgICAgICcnJ0R1cGxpY2F0ZSBhIGhhbmRsZS4gICh0YXJnZXRfcHJvY2VzcyBpcyBhIGhhbmRsZSBub3QgYSBwaWQhKScnJworICAgICAgICBpZiB0YXJnZXRfcHJvY2VzcyBpcyBOb25lOgorICAgICAgICAgICAgdGFyZ2V0X3Byb2Nlc3MgPSBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCkKKyAgICAgICAgcmV0dXJuIF93aW5hcGkuRHVwbGljYXRlSGFuZGxlKAorICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCBoYW5kbGUsIHRhcmdldF9wcm9jZXNzLAorICAgICAgICAgICAgMCwgaW5oZXJpdGFibGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTKQorCisgICAgZGVmIHN0ZWFsX2hhbmRsZShzb3VyY2VfcGlkLCBoYW5kbGUpOgorICAgICAgICAnJydTdGVhbCBhIGhhbmRsZSBmcm9tIHByb2Nlc3MgaWRlbnRpZmllZCBieSBzb3VyY2VfcGlkLicnJworICAgICAgICBzb3VyY2VfcHJvY2Vzc19oYW5kbGUgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKAorICAgICAgICAgICAgX3dpbmFwaS5QUk9DRVNTX0RVUF9IQU5ETEUsIEZhbHNlLCBzb3VyY2VfcGlkKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCisgICAgICAgICAgICAgICAgc291cmNlX3Byb2Nlc3NfaGFuZGxlLCBoYW5kbGUsCisgICAgICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCAwLCBGYWxzZSwKKyAgICAgICAgICAgICAgICBfd2luYXBpLkRVUExJQ0FURV9TQU1FX0FDQ0VTUyB8IF93aW5hcGkuRFVQTElDQVRFX0NMT1NFX1NPVVJDRSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoc291cmNlX3Byb2Nlc3NfaGFuZGxlKQorCiAgICAgZGVmIHNlbmRfaGFuZGxlKGNvbm4sIGhhbmRsZSwgZGVzdGluYXRpb25fcGlkKToKKyAgICAgICAgJycnU2VuZCBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKICAgICAgICAgZGggPSBEdXBIYW5kbGUoaGFuZGxlLCBfd2luYXBpLkRVUExJQ0FURV9TQU1FX0FDQ0VTUywgZGVzdGluYXRpb25fcGlkKQogICAgICAgICBjb25uLnNlbmQoZGgpCiAKICAgICBkZWYgcmVjdl9oYW5kbGUoY29ubik6CisgICAgICAgICcnJ1JlY2VpdmUgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCiAgICAgICAgIHJldHVybiBjb25uLnJlY3YoKS5kZXRhY2goKQogCiAgICAgY2xhc3MgRHVwSGFuZGxlKG9iamVjdCk6CisgICAgICAgICcnJ1BpY2tsYWJsZSB3cmFwcGVyIGZvciBhIGhhbmRsZS4nJycKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZSwgYWNjZXNzLCBwaWQ9Tm9uZSk6Ci0gICAgICAgICAgICAjIGR1cGxpY2F0ZSBoYW5kbGUgZm9yIHByb2Nlc3Mgd2l0aCBnaXZlbiBwaWQKICAgICAgICAgICAgIGlmIHBpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgV2UganVzdCBkdXBsaWNhdGUgdGhlIGhhbmRsZSBpbiB0aGUgY3VycmVudCBwcm9jZXNzIGFuZAorICAgICAgICAgICAgICAgICMgbGV0IHRoZSByZWNlaXZpbmcgcHJvY2VzcyBzdGVhbCB0aGUgaGFuZGxlLgogICAgICAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCiAgICAgICAgICAgICBwcm9jID0gX3dpbmFwaS5PcGVuUHJvY2Vzcyhfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsIHBpZCkKICAgICAgICAgICAgIHRyeToKQEAgLTYyLDkgKzExNCwxMiBAQAogICAgICAgICAgICAgc2VsZi5fcGlkID0gcGlkCiAKICAgICAgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgICAgICcnJ0dldCB0aGUgaGFuZGxlLiAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZS4nJycKICAgICAgICAgICAgICMgcmV0cmlldmUgaGFuZGxlIGZyb20gcHJvY2VzcyB3aGljaCBjdXJyZW50bHkgb3ducyBpdAogICAgICAgICAgICAgaWYgc2VsZi5fcGlkID09IG9zLmdldHBpZCgpOgorICAgICAgICAgICAgICAgICMgVGhlIGhhbmRsZSBoYXMgYWxyZWFkeSBiZWVuIGR1cGxpY2F0ZWQgZm9yIHRoaXMgcHJvY2Vzcy4KICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlCisgICAgICAgICAgICAjIFdlIG11c3Qgc3RlYWwgdGhlIGhhbmRsZSBmcm9tIHRoZSBwcm9jZXNzIHdob3NlIHBpZCBpcyBzZWxmLl9waWQuCiAgICAgICAgICAgICBwcm9jID0gX3dpbmFwaS5PcGVuUHJvY2Vzcyhfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9waWQpCiAgICAgICAgICAgICB0cnk6CkBAIC03NCwyMDcgKzEyOSwxMTIgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShwcm9jKQogCi0gICAgY2xhc3MgRHVwU29ja2V0KG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrKToKLSAgICAgICAgICAgIG5ld19zb2NrID0gc29jay5kdXAoKQotICAgICAgICAgICAgZGVmIHNlbmQoY29ubiwgcGlkKToKLSAgICAgICAgICAgICAgICBzaGFyZSA9IG5ld19zb2NrLnNoYXJlKHBpZCkKLSAgICAgICAgICAgICAgICBjb25uLnNlbmRfYnl0ZXMoc2hhcmUpCi0gICAgICAgICAgICBzZWxmLl9pZCA9IHJlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBuZXdfc29jay5jbG9zZSkKLQotICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgotICAgICAgICAgICAgY29ubiA9IHJlc291cmNlX3NoYXJlci5nZXRfY29ubmVjdGlvbihzZWxmLl9pZCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzaGFyZSA9IGNvbm4ucmVjdl9ieXRlcygpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5mcm9tc2hhcmUoc2hhcmUpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQotCi0gICAgZGVmIHJlZHVjZV9zb2NrZXQocyk6Ci0gICAgICAgIHJldHVybiByZWJ1aWxkX3NvY2tldCwgKER1cFNvY2tldChzKSwpCi0KLSAgICBkZWYgcmVidWlsZF9zb2NrZXQoZHMpOgotICAgICAgICByZXR1cm4gZHMuZGV0YWNoKCkKLQotICAgIGRlZiByZWR1Y2VfY29ubmVjdGlvbihjb25uKToKLSAgICAgICAgaGFuZGxlID0gY29ubi5maWxlbm8oKQotICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoaGFuZGxlLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgZHMgPSBEdXBTb2NrZXQocykKLSAgICAgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkcywgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZHMsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENvbm5lY3Rpb24KLSAgICAgICAgc29jayA9IGRzLmRldGFjaCgpCi0gICAgICAgIHJldHVybiBDb25uZWN0aW9uKHNvY2suZGV0YWNoKCksIHJlYWRhYmxlLCB3cml0YWJsZSkKLQotICAgIGRlZiByZWR1Y2VfcGlwZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBhY2Nlc3MgPSAoKF93aW5hcGkuRklMRV9HRU5FUklDX1JFQUQgaWYgY29ubi5yZWFkYWJsZSBlbHNlIDApIHwKLSAgICAgICAgICAgICAgICAgIChfd2luYXBpLkZJTEVfR0VORVJJQ19XUklURSBpZiBjb25uLndyaXRhYmxlIGVsc2UgMCkpCi0gICAgICAgIGRoID0gRHVwSGFuZGxlKGNvbm4uZmlsZW5vKCksIGFjY2VzcykKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfcGlwZV9jb25uZWN0aW9uLCAoZGgsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCi0KLSAgICBkZWYgcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24oZGgsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGVDb25uZWN0aW9uCi0gICAgICAgIGhhbmRsZSA9IGRoLmRldGFjaCgpCi0gICAgICAgIHJldHVybiBQaXBlQ29ubmVjdGlvbihoYW5kbGUsIHJlYWRhYmxlLCB3cml0YWJsZSkKLQogZWxzZToKICAgICAjIFVuaXgKKyAgICBfX2FsbF9fICs9IFsnRHVwRmQnLCAnc2VuZGZkcycsICdyZWN2ZmRzJ10KKyAgICBpbXBvcnQgYXJyYXkKIAogICAgICMgT24gTWFjT1NYIHdlIHNob3VsZCBhY2tub3dsZWRnZSByZWNlaXB0IG9mIGZkcyAtLSBzZWUgSXNzdWUxNDY2OQogICAgIEFDS05PV0xFREdFID0gc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nCiAKLSAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgotICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIHMuc2VuZG1zZyhbYid4J10sIFsoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TQ01fUklHSFRTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiQGkiLCBoYW5kbGUpKV0pCi0gICAgICAgIGlmIEFDS05PV0xFREdFIGFuZCBjb25uLnJlY3ZfYnl0ZXMoKSAhPSBiJ0FDSyc6CisgICAgZGVmIHNlbmRmZHMoc29jaywgZmRzKToKKyAgICAgICAgJycnU2VuZCBhbiBhcnJheSBvZiBmZHMgb3ZlciBhbiBBRl9VTklYIHNvY2tldC4nJycKKyAgICAgICAgZmRzID0gYXJyYXkuYXJyYXkoJ2knLCBmZHMpCisgICAgICAgIG1zZyA9IGJ5dGVzKFtsZW4oZmRzKSAlIDI1Nl0pCisgICAgICAgIHNvY2suc2VuZG1zZyhbbXNnXSwgWyhzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNDTV9SSUdIVFMsIGZkcyldKQorICAgICAgICBpZiBBQ0tOT1dMRURHRSBhbmQgc29jay5yZWN2KDEpICE9IGInQSc6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2RpZCBub3QgcmVjZWl2ZSBhY2tub3dsZWRnZW1lbnQgb2YgZmQnKQogCi0gICAgZGVmIHJlY3ZfaGFuZGxlKGNvbm4pOgotICAgICAgICBzaXplID0gc3RydWN0LmNhbGNzaXplKCJAaSIpCisgICAgZGVmIHJlY3ZmZHMoc29jaywgc2l6ZSk6CisgICAgICAgICcnJ1JlY2VpdmUgYW4gYXJyYXkgb2YgZmRzIG92ZXIgYW4gQUZfVU5JWCBzb2NrZXQuJycnCisgICAgICAgIGEgPSBhcnJheS5hcnJheSgnaScpCisgICAgICAgIGJ5dGVzX3NpemUgPSBhLml0ZW1zaXplICogc2l6ZQorICAgICAgICBtc2csIGFuY2RhdGEsIGZsYWdzLCBhZGRyID0gc29jay5yZWN2bXNnKDEsIHNvY2tldC5DTVNHX0xFTihieXRlc19zaXplKSkKKyAgICAgICAgaWYgbm90IG1zZyBhbmQgbm90IGFuY2RhdGE6CisgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBBQ0tOT1dMRURHRToKKyAgICAgICAgICAgICAgICBzb2NrLnNlbmQoYidBJykKKyAgICAgICAgICAgIGlmIGxlbihhbmNkYXRhKSAhPSAxOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmVjZWl2ZWQgJWQgaXRlbXMgb2YgYW5jZGF0YScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oYW5jZGF0YSkpCisgICAgICAgICAgICBjbXNnX2xldmVsLCBjbXNnX3R5cGUsIGNtc2dfZGF0YSA9IGFuY2RhdGFbMF0KKyAgICAgICAgICAgIGlmIChjbXNnX2xldmVsID09IHNvY2tldC5TT0xfU09DS0VUIGFuZAorICAgICAgICAgICAgICAgIGNtc2dfdHlwZSA9PSBzb2NrZXQuU0NNX1JJR0hUUyk6CisgICAgICAgICAgICAgICAgaWYgbGVuKGNtc2dfZGF0YSkgJSBhLml0ZW1zaXplICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgICAgICBhLmZyb21ieXRlcyhjbXNnX2RhdGEpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihhKSAlIDI1NiA9PSBtc2dbMF0KKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdChhKQorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0ludmFsaWQgZGF0YSByZWNlaXZlZCcpCisKKyAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgorICAgICAgICAnJydTZW5kIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJwogICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIG1zZywgYW5jZGF0YSwgZmxhZ3MsIGFkZHIgPSBzLnJlY3Ztc2coMSwgc29ja2V0LkNNU0dfTEVOKHNpemUpKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIEFDS05PV0xFREdFOgotICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRfYnl0ZXMoYidBQ0snKQotICAgICAgICAgICAgICAgIGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhID0gYW5jZGF0YVswXQotICAgICAgICAgICAgICAgIGlmIChjbXNnX2xldmVsID09IHNvY2tldC5TT0xfU09DS0VUIGFuZAotICAgICAgICAgICAgICAgICAgICBjbXNnX3R5cGUgPT0gc29ja2V0LlNDTV9SSUdIVFMpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygiQGkiLCBjbXNnX2RhdGFbOnNpemVdKVswXQotICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yLCBzdHJ1Y3QuZXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCBkYXRhIHJlY2VpdmVkJykKKyAgICAgICAgICAgIHNlbmRmZHMocywgW2hhbmRsZV0pCiAKLSAgICBjbGFzcyBEdXBGZChvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmQpOgotICAgICAgICAgICAgbmV3X2ZkID0gb3MuZHVwKGZkKQotICAgICAgICAgICAgZGVmIHNlbmQoY29ubiwgcGlkKToKLSAgICAgICAgICAgICAgICBzZW5kX2hhbmRsZShjb25uLCBuZXdfZmQsIHBpZCkKLSAgICAgICAgICAgIGRlZiBjbG9zZSgpOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKG5ld19mZCkKLSAgICAgICAgICAgIHNlbGYuX2lkID0gcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIGNsb3NlKQorICAgIGRlZiByZWN2X2hhbmRsZShjb25uKToKKyAgICAgICAgJycnUmVjZWl2ZSBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKKyAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGNvbm4uZmlsZW5vKCksIHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICByZXR1cm4gcmVjdmZkcyhzLCAxKVswXQogCi0gICAgICAgIGRlZiBkZXRhY2goc2VsZik6Ci0gICAgICAgICAgICBjb25uID0gcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiByZWN2X2hhbmRsZShjb25uKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICBkZWYgRHVwRmQoZmQpOgorICAgICAgICAnJydSZXR1cm4gYSB3cmFwcGVyIGZvciBhbiBmZC4nJycKKyAgICAgICAgcG9wZW5fb2JqID0gY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKQorICAgICAgICBpZiBwb3Blbl9vYmogaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gcG9wZW5fb2JqLkR1cEZkKHBvcGVuX29iai5kdXBsaWNhdGVfZm9yX2NoaWxkKGZkKSkKKyAgICAgICAgZWxpZiBIQVZFX1NFTkRfSEFORExFOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZXNvdXJjZV9zaGFyZXIKKyAgICAgICAgICAgIHJldHVybiByZXNvdXJjZV9zaGFyZXIuRHVwRmQoZmQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTQ01fUklHSFRTIGFwcGVhcnMgbm90IHRvIGJlIGF2YWlsYWJsZScpCiAKLSAgICBkZWYgcmVkdWNlX3NvY2tldChzKToKKyMKKyMgVHJ5IG1ha2luZyBzb21lIGNhbGxhYmxlIHR5cGVzIHBpY2tsYWJsZQorIworCitkZWYgX3JlZHVjZV9tZXRob2QobSk6CisgICAgaWYgbS5fX3NlbGZfXyBpcyBOb25lOgorICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19jbGFzc19fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX3NlbGZfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKK2NsYXNzIF9DOgorICAgIGRlZiBmKHNlbGYpOgorICAgICAgICBwYXNzCityZWdpc3Rlcih0eXBlKF9DKCkuZiksIF9yZWR1Y2VfbWV0aG9kKQorCisKK2RlZiBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKG0pOgorICAgIHJldHVybiBnZXRhdHRyLCAobS5fX29iamNsYXNzX18sIG0uX19uYW1lX18pCityZWdpc3Rlcih0eXBlKGxpc3QuYXBwZW5kKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKK3JlZ2lzdGVyKHR5cGUoaW50Ll9fYWRkX18pLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQorCisKK2RlZiBfcmVkdWNlX3BhcnRpYWwocCk6CisgICAgcmV0dXJuIF9yZWJ1aWxkX3BhcnRpYWwsIChwLmZ1bmMsIHAuYXJncywgcC5rZXl3b3JkcyBvciB7fSkKK2RlZiBfcmVidWlsZF9wYXJ0aWFsKGZ1bmMsIGFyZ3MsIGtleXdvcmRzKToKKyAgICByZXR1cm4gZnVuY3Rvb2xzLnBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpCityZWdpc3RlcihmdW5jdG9vbHMucGFydGlhbCwgX3JlZHVjZV9wYXJ0aWFsKQorCisjCisjIE1ha2Ugc29ja2V0cyBwaWNrbGFibGUKKyMKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgZGVmIF9yZWR1Y2Vfc29ja2V0KHMpOgorICAgICAgICBmcm9tIC5yZXNvdXJjZV9zaGFyZXIgaW1wb3J0IER1cFNvY2tldAorICAgICAgICByZXR1cm4gX3JlYnVpbGRfc29ja2V0LCAoRHVwU29ja2V0KHMpLCkKKyAgICBkZWYgX3JlYnVpbGRfc29ja2V0KGRzKToKKyAgICAgICAgcmV0dXJuIGRzLmRldGFjaCgpCisgICAgcmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgX3JlZHVjZV9zb2NrZXQpCisKK2Vsc2U6CisgICAgZGVmIF9yZWR1Y2Vfc29ja2V0KHMpOgogICAgICAgICBkZiA9IER1cEZkKHMuZmlsZW5vKCkpCi0gICAgICAgIHJldHVybiByZWJ1aWxkX3NvY2tldCwgKGRmLCBzLmZhbWlseSwgcy50eXBlLCBzLnByb3RvKQotCi0gICAgZGVmIHJlYnVpbGRfc29ja2V0KGRmLCBmYW1pbHksIHR5cGUsIHByb3RvKToKKyAgICAgICAgcmV0dXJuIF9yZWJ1aWxkX3NvY2tldCwgKGRmLCBzLmZhbWlseSwgcy50eXBlLCBzLnByb3RvKQorICAgIGRlZiBfcmVidWlsZF9zb2NrZXQoZGYsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgogICAgICAgICBmZCA9IGRmLmRldGFjaCgpCi0gICAgICAgIHMgPSBzb2NrZXQuZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvKQotICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgcmV0dXJuIHMKLQotICAgIGRlZiByZWR1Y2VfY29ubmVjdGlvbihjb25uKToKLSAgICAgICAgZGYgPSBEdXBGZChjb25uLmZpbGVubygpKQotICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZGYsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCi0KLSAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRmLCByZWFkYWJsZSwgd3JpdGFibGUpOgotICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDb25uZWN0aW9uCi0gICAgICAgIGZkID0gZGYuZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oZmQsIHJlYWRhYmxlLCB3cml0YWJsZSkKLQotIwotIyBTZXJ2ZXIgd2hpY2ggc2hhcmVzIHJlZ2lzdGVyZWQgcmVzb3VyY2VzIHdpdGggY2xpZW50cwotIwotCi1jbGFzcyBSZXNvdXJjZVNoYXJlcihvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fa2V5ID0gMAotICAgICAgICBzZWxmLl9jYWNoZSA9IHt9Ci0gICAgICAgIHNlbGYuX29sZF9sb2NrcyA9IFtdCi0gICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQotICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCi0gICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgUmVzb3VyY2VTaGFyZXIuX2FmdGVyZm9yaykKLQotICAgIGRlZiByZWdpc3RlcihzZWxmLCBzZW5kLCBjbG9zZSk6Ci0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0gICAgICAgICAgICBzZWxmLl9rZXkgKz0gMQotICAgICAgICAgICAgc2VsZi5fY2FjaGVbc2VsZi5fa2V5XSA9IChzZW5kLCBjbG9zZSkKLSAgICAgICAgICAgIHJldHVybiAoc2VsZi5fYWRkcmVzcywgc2VsZi5fa2V5KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBnZXRfY29ubmVjdGlvbihpZGVudCk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAotICAgICAgICBhZGRyZXNzLCBrZXkgPSBpZGVudAotICAgICAgICBjID0gQ2xpZW50KGFkZHJlc3MsIGF1dGhrZXk9Y3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKLSAgICAgICAgYy5zZW5kKChrZXksIG9zLmdldHBpZCgpKSkKLSAgICAgICAgcmV0dXJuIGMKLQotICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAotICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGMgPSBDbGllbnQoc2VsZi5fYWRkcmVzcywgYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICAgICAgICAgIGMuc2VuZChOb25lKQotICAgICAgICAgICAgICAgIGMuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZC5qb2luKHRpbWVvdXQpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fdGhyZWFkLmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgIHN1Yl93YXJuKCdSZXNvdXJjZVNoYXJlciB0aHJlYWQgZGlkIG5vdCBzdG9wIHdoZW4gYXNrZWQnKQotICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKLSAgICAgICAgICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCi0KLSAgICBkZWYgX2FmdGVyZm9yayhzZWxmKToKLSAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgotICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCi0gICAgICAgICMgSWYgc2VsZi5fbG9jayB3YXMgbG9ja2VkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLCBpdCBtYXkgYmUgYnJva2VuCi0gICAgICAgICMgLS0gc2VlIGlzc3VlIDY3MjEuICBSZXBsYWNlIGl0IHdpdGhvdXQgbGV0dGluZyBpdCBiZSBnYydlZC4KLSAgICAgICAgc2VsZi5fb2xkX2xvY2tzLmFwcGVuZChzZWxmLl9sb2NrKQotICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLQotICAgIGRlZiBfc3RhcnQoc2VsZik6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IExpc3RlbmVyCi0gICAgICAgIGFzc2VydCBzZWxmLl9saXN0ZW5lciBpcyBOb25lCi0gICAgICAgIGRlYnVnKCdzdGFydGluZyBsaXN0ZW5lciBhbmQgdGhyZWFkIGZvciBzZW5kaW5nIGhhbmRsZXMnKQotICAgICAgICBzZWxmLl9saXN0ZW5lciA9IExpc3RlbmVyKGF1dGhrZXk9Y3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKLSAgICAgICAgc2VsZi5fYWRkcmVzcyA9IHNlbGYuX2xpc3RlbmVyLmFkZHJlc3MKLSAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3NlcnZlKQotICAgICAgICB0LmRhZW1vbiA9IFRydWUKLSAgICAgICAgdC5zdGFydCgpCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IHQKLQotICAgIGRlZiBfc2VydmUoc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIoc2lnbmFsLCAncHRocmVhZF9zaWdtYXNrJyk6Ci0gICAgICAgICAgICBzaWduYWwucHRocmVhZF9zaWdtYXNrKHNpZ25hbC5TSUdfQkxPQ0ssIHJhbmdlKDEsIHNpZ25hbC5OU0lHKSkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjb25uID0gc2VsZi5fbGlzdGVuZXIuYWNjZXB0KCkKLSAgICAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YoKQotICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGtleSwgZGVzdGluYXRpb25fcGlkID0gbXNnCi0gICAgICAgICAgICAgICAgc2VuZCwgY2xvc2UgPSBzZWxmLl9jYWNoZS5wb3Aoa2V5KQotICAgICAgICAgICAgICAgIHNlbmQoY29ubiwgZGVzdGluYXRpb25fcGlkKQotICAgICAgICAgICAgICAgIGNsb3NlKCkKLSAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNfZXhpdGluZygpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCi0gICAgICAgICAgICAgICAgICAgIHN1Yl93YXJuaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgJ3RocmVhZCBmb3Igc2hhcmluZyBoYW5kbGVzIHJhaXNlZCBleGNlcHRpb24gOlxuJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAnLScqNzkgKyAnXG4nICsgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSArICctJyo3OQotICAgICAgICAgICAgICAgICAgICAgICAgKQotCi1yZXNvdXJjZV9zaGFyZXIgPSBSZXNvdXJjZVNoYXJlcigpCisgICAgICAgIHJldHVybiBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8sIGZpbGVubz1mZCkKKyAgICByZWdpc3Rlcihzb2NrZXQuc29ja2V0LCBfcmVkdWNlX3NvY2tldCkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVzb3VyY2Vfc2hhcmVyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0NmZjNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVzb3VyY2Vfc2hhcmVyLnB5CkBAIC0wLDAgKzEsMTU4IEBACisjCisjIFdlIHVzZSBhIGJhY2tncm91bmQgdGhyZWFkIGZvciBzaGFyaW5nIGZkcyBvbiBVbml4LCBhbmQgZm9yIHNoYXJpbmcgc29ja2V0cyBvbgorIyBXaW5kb3dzLgorIworIyBBIGNsaWVudCB3aGljaCB3YW50cyB0byBwaWNrbGUgYSByZXNvdXJjZSByZWdpc3RlcnMgaXQgd2l0aCB0aGUgcmVzb3VyY2UKKyMgc2hhcmVyIGFuZCBnZXRzIGFuIGlkZW50aWZpZXIgaW4gcmV0dXJuLiAgVGhlIHVucGlja2xpbmcgcHJvY2VzcyB3aWxsIGNvbm5lY3QKKyMgdG8gdGhlIHJlc291cmNlIHNoYXJlciwgc2VuZHMgdGhlIGlkZW50aWZpZXIgYW5kIGl0cyBwaWQsIGFuZCB0aGVuIHJlY2VpdmVzCisjIHRoZSByZXNvdXJjZS4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCisKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydzdG9wJ10KKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICBfX2FsbF9fICs9IFsnRHVwU29ja2V0J10KKworICAgIGNsYXNzIER1cFNvY2tldChvYmplY3QpOgorICAgICAgICAnJydQaWNrbGFibGUgd3JhcHBlciBmb3IgYSBzb2NrZXQuJycnCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrKToKKyAgICAgICAgICAgIG5ld19zb2NrID0gc29jay5kdXAoKQorICAgICAgICAgICAgZGVmIHNlbmQoY29ubiwgcGlkKToKKyAgICAgICAgICAgICAgICBzaGFyZSA9IG5ld19zb2NrLnNoYXJlKHBpZCkKKyAgICAgICAgICAgICAgICBjb25uLnNlbmRfYnl0ZXMoc2hhcmUpCisgICAgICAgICAgICBzZWxmLl9pZCA9IF9yZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgbmV3X3NvY2suY2xvc2UpCisKKyAgICAgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgICAgICcnJ0dldCB0aGUgc29ja2V0LiAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZS4nJycKKyAgICAgICAgICAgIHdpdGggX3Jlc291cmNlX3NoYXJlci5nZXRfY29ubmVjdGlvbihzZWxmLl9pZCkgYXMgY29ubjoKKyAgICAgICAgICAgICAgICBzaGFyZSA9IGNvbm4ucmVjdl9ieXRlcygpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5mcm9tc2hhcmUoc2hhcmUpCisKK2Vsc2U6CisgICAgX19hbGxfXyArPSBbJ0R1cEZkJ10KKworICAgIGNsYXNzIER1cEZkKG9iamVjdCk6CisgICAgICAgICcnJ1dyYXBwZXIgZm9yIGZkIHdoaWNoIGNhbiBiZSB1c2VkIGF0IGFueSB0aW1lLicnJworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmQpOgorICAgICAgICAgICAgbmV3X2ZkID0gb3MuZHVwKGZkKQorICAgICAgICAgICAgZGVmIHNlbmQoY29ubiwgcGlkKToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uc2VuZF9oYW5kbGUoY29ubiwgbmV3X2ZkLCBwaWQpCisgICAgICAgICAgICBkZWYgY2xvc2UoKToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShuZXdfZmQpCisgICAgICAgICAgICBzZWxmLl9pZCA9IF9yZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgY2xvc2UpCisKKyAgICAgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgICAgICcnJ0dldCB0aGUgZmQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJworICAgICAgICAgICAgd2l0aCBfcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKSBhcyBjb25uOgorICAgICAgICAgICAgICAgIHJldHVybiByZWR1Y3Rpb24ucmVjdl9oYW5kbGUoY29ubikKKworCitjbGFzcyBfUmVzb3VyY2VTaGFyZXIob2JqZWN0KToKKyAgICAnJydNYW5hZ2VyIGZvciByZXNvdWNlcyB1c2luZyBiYWNrZ3JvdW5kIHRocmVhZC4nJycKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2tleSA9IDAKKyAgICAgICAgc2VsZi5fY2FjaGUgPSB7fQorICAgICAgICBzZWxmLl9vbGRfbG9ja3MgPSBbXQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQorICAgICAgICB1dGlsLnJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgX1Jlc291cmNlU2hhcmVyLl9hZnRlcmZvcmspCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgc2VuZCwgY2xvc2UpOgorICAgICAgICAnJydSZWdpc3RlciByZXNvdXJjZSwgcmV0dXJuaW5nIGFuIGlkZW50aWZpZXIuJycnCisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCisgICAgICAgICAgICBzZWxmLl9rZXkgKz0gMQorICAgICAgICAgICAgc2VsZi5fY2FjaGVbc2VsZi5fa2V5XSA9IChzZW5kLCBjbG9zZSkKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5fYWRkcmVzcywgc2VsZi5fa2V5KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRfY29ubmVjdGlvbihpZGVudCk6CisgICAgICAgICcnJ1JldHVybiBjb25uZWN0aW9uIGZyb20gd2hpY2ggdG8gcmVjZWl2ZSBpZGVudGlmaWVkIHJlc291cmNlLicnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKKyAgICAgICAgYWRkcmVzcywga2V5ID0gaWRlbnQKKyAgICAgICAgYyA9IENsaWVudChhZGRyZXNzLCBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKKyAgICAgICAgYy5zZW5kKChrZXksIG9zLmdldHBpZCgpKSkKKyAgICAgICAgcmV0dXJuIGMKKworICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICcnJ1N0b3AgdGhlIGJhY2tncm91bmQgdGhyZWFkIGFuZCBjbGVhciByZWdpc3RlcmVkIHJlc291cmNlcy4nJycKKyAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYyA9IENsaWVudChzZWxmLl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCisgICAgICAgICAgICAgICAgYy5zZW5kKE5vbmUpCisgICAgICAgICAgICAgICAgYy5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkLmpvaW4odGltZW91dCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90aHJlYWQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgdXRpbC5zdWJfd2FybmluZygnX1Jlc291cmNlU2hhcmVyIHRocmVhZCBkaWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3Qgc3RvcCB3aGVuIGFza2VkJykKKyAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lci5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGUuY2xlYXIoKQorCisgICAgZGVmIF9hZnRlcmZvcmsoc2VsZik6CisgICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKKyAgICAgICAgICAgIGNsb3NlKCkKKyAgICAgICAgc2VsZi5fY2FjaGUuY2xlYXIoKQorICAgICAgICAjIElmIHNlbGYuX2xvY2sgd2FzIGxvY2tlZCBhdCB0aGUgdGltZSBvZiB0aGUgZm9yaywgaXQgbWF5IGJlIGJyb2tlbgorICAgICAgICAjIC0tIHNlZSBpc3N1ZSA2NzIxLiAgUmVwbGFjZSBpdCB3aXRob3V0IGxldHRpbmcgaXQgYmUgZ2MnZWQuCisgICAgICAgIHNlbGYuX29sZF9sb2Nrcy5hcHBlbmQoc2VsZi5fbG9jaykKKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgaWYgc2VsZi5fbGlzdGVuZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9saXN0ZW5lci5jbG9zZSgpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBMaXN0ZW5lcgorICAgICAgICBhc3NlcnQgc2VsZi5fbGlzdGVuZXIgaXMgTm9uZQorICAgICAgICB1dGlsLmRlYnVnKCdzdGFydGluZyBsaXN0ZW5lciBhbmQgdGhyZWFkIGZvciBzZW5kaW5nIGhhbmRsZXMnKQorICAgICAgICBzZWxmLl9saXN0ZW5lciA9IExpc3RlbmVyKGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gc2VsZi5fbGlzdGVuZXIuYWRkcmVzcworICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fc2VydmUpCisgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gdAorCisgICAgZGVmIF9zZXJ2ZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdwdGhyZWFkX3NpZ21hc2snKToKKyAgICAgICAgICAgIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19CTE9DSywgcmFuZ2UoMSwgc2lnbmFsLk5TSUcpKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5fbGlzdGVuZXIuYWNjZXB0KCkgYXMgY29ubjoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gY29ubi5yZWN2KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBrZXksIGRlc3RpbmF0aW9uX3BpZCA9IG1zZworICAgICAgICAgICAgICAgICAgICBzZW5kLCBjbG9zZSA9IHNlbGYuX2NhY2hlLnBvcChrZXkpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoY29ubiwgZGVzdGluYXRpb25fcGlkKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGlmIG5vdCB1dGlsLmlzX2V4aXRpbmcoKToKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorCisKK19yZXNvdXJjZV9zaGFyZXIgPSBfUmVzb3VyY2VTaGFyZXIoKQorc3RvcCA9IF9yZXNvdXJjZV9zaGFyZXIuc3RvcApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlX3RyYWNrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3NzM4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlX3RyYWNrZXIucHkKQEAgLTAsMCArMSwxNDMgQEAKKyMKKyMgT24gVW5peCB3ZSBydW4gYSBzZXJ2ZXIgcHJvY2VzcyB3aGljaCBrZWVwcyB0cmFjayBvZiB1bmxpbmtlZAorIyBzZW1hcGhvcmVzLiBUaGUgc2VydmVyIGlnbm9yZXMgU0lHSU5UIGFuZCBTSUdURVJNIGFuZCByZWFkcyBmcm9tIGEKKyMgcGlwZS4gIEV2ZXJ5IG90aGVyIHByb2Nlc3Mgb2YgdGhlIHByb2dyYW0gaGFzIGEgY29weSBvZiB0aGUgd3JpdGFibGUKKyMgZW5kIG9mIHRoZSBwaXBlLCBzbyB3ZSBnZXQgRU9GIHdoZW4gYWxsIG90aGVyIHByb2Nlc3NlcyBoYXZlIGV4aXRlZC4KKyMgVGhlbiB0aGUgc2VydmVyIHByb2Nlc3MgdW5saW5rcyBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZSBuYW1lcy4KKyMKKyMgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgc3lzdGVtIG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIG51bWJlcgorIyBvZiBuYW1lZCBzZW1hcGhvcmVzLCBhbmQgdGhleSB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdGlsbAorIyB0aGUgbmV4dCByZWJvb3QuICBXaXRob3V0IHRoaXMgc2VtYXBob3JlIHRyYWNrZXIgcHJvY2VzcywgImtpbGxhbGwKKyMgcHl0aG9uIiB3b3VsZCBwcm9iYWJseSBsZWF2ZSB1bmxpbmtlZCBzZW1hcGhvcmVzLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKKworZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ2Vuc3VyZV9ydW5uaW5nJywgJ3JlZ2lzdGVyJywgJ3VucmVnaXN0ZXInXQorCisKK2NsYXNzIFNlbWFwaG9yZVRyYWNrZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fZmQgPSBOb25lCisKKyAgICBkZWYgZ2V0ZmQoc2VsZik6CisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICByZXR1cm4gc2VsZi5fZmQKKworICAgIGRlZiBlbnN1cmVfcnVubmluZyhzZWxmKToKKyAgICAgICAgJycnTWFrZSBzdXJlIHRoYXQgc2VtYXBob3JlIHRyYWNrZXIgcHJvY2VzcyBpcyBydW5uaW5nLgorCisgICAgICAgIFRoaXMgY2FuIGJlIHJ1biBmcm9tIGFueSBwcm9jZXNzLiAgVXN1YWxseSBhIGNoaWxkIHByb2Nlc3Mgd2lsbCB1c2UKKyAgICAgICAgdGhlIHNlbWFwaG9yZSBjcmVhdGVkIGJ5IGl0cyBwYXJlbnQuJycnCisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZmRzX3RvX3Bhc3MgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkc190b19wYXNzLmFwcGVuZChzeXMuc3RkZXJyLmZpbGVubygpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjbWQgPSAnZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2VtYXBob3JlX3RyYWNrZXIgaW1wb3J0IG1haW47bWFpbiglZCknCisgICAgICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRzX3RvX3Bhc3MuYXBwZW5kKHIpCisgICAgICAgICAgICAgICAgIyBwcm9jZXNzIHdpbGwgb3V0IGxpdmUgdXMsIHNvIG5vIG5lZWQgdG8gd2FpdCBvbiBwaWQKKyAgICAgICAgICAgICAgICBleGUgPSBzcGF3bi5nZXRfZXhlY3V0YWJsZSgpCisgICAgICAgICAgICAgICAgYXJncyA9IFtleGVdICsgdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgICAgICAgICBhcmdzICs9IFsnLWMnLCBjbWQgJSByXQorICAgICAgICAgICAgICAgIHV0aWwuc3Bhd252X3Bhc3NmZHMoZXhlLCBhcmdzLCBmZHNfdG9fcGFzcykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZkID0gdworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShyKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIG5hbWUpOgorICAgICAgICAnJydSZWdpc3RlciBuYW1lIG9mIHNlbWFwaG9yZSB3aXRoIHNlbWFwaG9yZSB0cmFja2VyLicnJworICAgICAgICBzZWxmLl9zZW5kKCdSRUdJU1RFUicsIG5hbWUpCisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBuYW1lKToKKyAgICAgICAgJycnVW5yZWdpc3RlciBuYW1lIG9mIHNlbWFwaG9yZSB3aXRoIHNlbWFwaG9yZSB0cmFja2VyLicnJworICAgICAgICBzZWxmLl9zZW5kKCdVTlJFR0lTVEVSJywgbmFtZSkKKworICAgIGRlZiBfc2VuZChzZWxmLCBjbWQsIG5hbWUpOgorICAgICAgICBzZWxmLmVuc3VyZV9ydW5uaW5nKCkKKyAgICAgICAgbXNnID0gJ3swfTp7MX1cbicuZm9ybWF0KGNtZCwgbmFtZSkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgIGlmIGxlbihuYW1lKSA+IDUxMjoKKyAgICAgICAgICAgICMgcG9zaXggZ3VhcmFudGVlcyB0aGF0IHdyaXRlcyB0byBhIHBpcGUgb2YgbGVzcyB0aGFuIFBJUEVfQlVGCisgICAgICAgICAgICAjIGJ5dGVzIGFyZSBhdG9taWMsIGFuZCB0aGF0IFBJUEVfQlVGID49IDUxMgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbmFtZSB0b28gbG9uZycpCisgICAgICAgIG5ieXRlcyA9IG9zLndyaXRlKHNlbGYuX2ZkLCBtc2cpCisgICAgICAgIGFzc2VydCBuYnl0ZXMgPT0gbGVuKG1zZykKKworCitfc2VtYXBob3JlX3RyYWNrZXIgPSBTZW1hcGhvcmVUcmFja2VyKCkKK2Vuc3VyZV9ydW5uaW5nID0gX3NlbWFwaG9yZV90cmFja2VyLmVuc3VyZV9ydW5uaW5nCityZWdpc3RlciA9IF9zZW1hcGhvcmVfdHJhY2tlci5yZWdpc3RlcgordW5yZWdpc3RlciA9IF9zZW1hcGhvcmVfdHJhY2tlci51bnJlZ2lzdGVyCitnZXRmZCA9IF9zZW1hcGhvcmVfdHJhY2tlci5nZXRmZAorCisKK2RlZiBtYWluKGZkKToKKyAgICAnJydSdW4gc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgIyBwcm90ZWN0IHRoZSBwcm9jZXNzIGZyb20gXkMgYW5kICJraWxsYWxsIHB5dGhvbiIgZXRjCisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0lHTikKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0lHTikKKworICAgIGZvciBmIGluIChzeXMuc3RkaW4sIHN5cy5zdGRvdXQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGNhY2hlID0gc2V0KCkKKyAgICB0cnk6CisgICAgICAgICMga2VlcCB0cmFjayBvZiByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBzZW1hcGhvcmVzCisgICAgICAgIHdpdGggb3BlbihmZCwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjbWQsIG5hbWUgPSBsaW5lLnN0cmlwKCkuc3BsaXQoYic6JykKKyAgICAgICAgICAgICAgICAgICAgaWYgY21kID09IGInUkVHSVNURVInOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuYWRkKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgY21kID09IGInVU5SRUdJU1RFUic6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5yZW1vdmUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigndW5yZWNvZ25pemVkIGNvbW1hbmQgJXInICUgY21kKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgICMgYWxsIHByb2Nlc3NlcyBoYXZlIHRlcm1pbmF0ZWQ7IGNsZWFudXAgYW55IHJlbWFpbmluZyBzZW1hcGhvcmVzCisgICAgICAgIGlmIGNhY2hlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ3NlbWFwaG9yZV90cmFja2VyOiBUaGVyZSBhcHBlYXIgdG8gYmUgJWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlYWtlZCBzZW1hcGhvcmVzIHRvIGNsZWFuIHVwIGF0IHNodXRkb3duJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oY2FjaGUpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBuYW1lIGluIGNhY2hlOgorICAgICAgICAgICAgIyBGb3Igc29tZSByZWFzb24gdGhlIHByb2Nlc3Mgd2hpY2ggY3JlYXRlZCBhbmQgcmVnaXN0ZXJlZCB0aGlzCisgICAgICAgICAgICAjIHNlbWFwaG9yZSBoYXMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgaXQuIFByZXN1bWFibHkgaXQgaGFzIGRpZWQuCisgICAgICAgICAgICAjIFdlIHRoZXJlZm9yZSB1bmxpbmsgaXQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfbXVsdGlwcm9jZXNzaW5nLnNlbV91bmxpbmsobmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ3NlbWFwaG9yZV90cmFja2VyOiAlcjogJXMnICUgKG5hbWUsIGUpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CmluZGV4IGEzNThlZDQuLjBjMTc4MjUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CkBAIC0xMCw4ICsxMCwxMSBAQAogaW1wb3J0IGN0eXBlcwogaW1wb3J0IHdlYWtyZWYKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGhlYXAsIFJMb2NrCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBhc3NlcnRfc3Bhd25pbmcsIEZvcmtpbmdQaWNrbGVyCitmcm9tIC4gaW1wb3J0IGhlYXAKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQKKworZnJvbSAuY29udGV4dCBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nCitmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IEZvcmtpbmdQaWNrbGVyCiAKIF9fYWxsX18gPSBbJ1Jhd1ZhbHVlJywgJ1Jhd0FycmF5JywgJ1ZhbHVlJywgJ0FycmF5JywgJ2NvcHknLCAnc3luY2hyb25pemVkJ10KIApAQCAtNjMsNyArNjYsNyBAQAogICAgICAgICByZXN1bHQuX19pbml0X18oKnNpemVfb3JfaW5pdGlhbGl6ZXIpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAotZGVmIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUpOgorZGVmIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUsIGN0eD1Ob25lKToKICAgICAnJycKICAgICBSZXR1cm4gYSBzeW5jaHJvbml6YXRpb24gd3JhcHBlciBmb3IgYSBWYWx1ZQogICAgICcnJwpAQCAtNzEsMTIgKzc0LDEzIEBACiAgICAgaWYgbG9jayBpcyBGYWxzZToKICAgICAgICAgcmV0dXJuIG9iagogICAgIGlmIGxvY2sgaW4gKFRydWUsIE5vbmUpOgotICAgICAgICBsb2NrID0gUkxvY2soKQorICAgICAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQorICAgICAgICBsb2NrID0gY3R4LlJMb2NrKCkKICAgICBpZiBub3QgaGFzYXR0cihsb2NrLCAnYWNxdWlyZScpOgogICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJyVyJyBoYXMgbm8gbWV0aG9kICdhY3F1aXJlJyIgJSBsb2NrKQotICAgIHJldHVybiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrKQorICAgIHJldHVybiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHg9Y3R4KQogCi1kZWYgQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlKToKK2RlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUsIGN0eD1Ob25lKToKICAgICAnJycKICAgICBSZXR1cm4gYSBzeW5jaHJvbml6YXRpb24gd3JhcHBlciBmb3IgYSBSYXdBcnJheQogICAgICcnJwpAQCAtODQsMjUgKzg4LDI3IEBACiAgICAgaWYgbG9jayBpcyBGYWxzZToKICAgICAgICAgcmV0dXJuIG9iagogICAgIGlmIGxvY2sgaW4gKFRydWUsIE5vbmUpOgotICAgICAgICBsb2NrID0gUkxvY2soKQorICAgICAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQorICAgICAgICBsb2NrID0gY3R4LlJMb2NrKCkKICAgICBpZiBub3QgaGFzYXR0cihsb2NrLCAnYWNxdWlyZScpOgogICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJyVyJyBoYXMgbm8gbWV0aG9kICdhY3F1aXJlJyIgJSBsb2NrKQotICAgIHJldHVybiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrKQorICAgIHJldHVybiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHg9Y3R4KQogCiBkZWYgY29weShvYmopOgogICAgIG5ld19vYmogPSBfbmV3X3ZhbHVlKHR5cGUob2JqKSkKICAgICBjdHlwZXMucG9pbnRlcihuZXdfb2JqKVswXSA9IG9iagogICAgIHJldHVybiBuZXdfb2JqCiAKLWRlZiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrPU5vbmUpOgorZGVmIHN5bmNocm9uaXplZChvYmosIGxvY2s9Tm9uZSwgY3R4PU5vbmUpOgogICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShvYmosIFN5bmNocm9uaXplZEJhc2UpLCAnb2JqZWN0IGFscmVhZHkgc3luY2hyb25pemVkJworICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCiAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgY3R5cGVzLl9TaW1wbGVDRGF0YSk6Ci0gICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWQob2JqLCBsb2NrKQorICAgICAgICByZXR1cm4gU3luY2hyb25pemVkKG9iaiwgbG9jaywgY3R4KQogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGN0eXBlcy5BcnJheSk6CiAgICAgICAgIGlmIG9iai5fdHlwZV8gaXMgY3R5cGVzLmNfY2hhcjoKLSAgICAgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRTdHJpbmcob2JqLCBsb2NrKQotICAgICAgICByZXR1cm4gU3luY2hyb25pemVkQXJyYXkob2JqLCBsb2NrKQorICAgICAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZFN0cmluZyhvYmosIGxvY2ssIGN0eCkKKyAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZEFycmF5KG9iaiwgbG9jaywgY3R4KQogICAgIGVsc2U6CiAgICAgICAgIGNscyA9IHR5cGUob2JqKQogICAgICAgICB0cnk6CkBAIC0xMTIsNyArMTE4LDcgQEAKICAgICAgICAgICAgIGQgPSBkaWN0KChuYW1lLCBtYWtlX3Byb3BlcnR5KG5hbWUpKSBmb3IgbmFtZSBpbiBuYW1lcykKICAgICAgICAgICAgIGNsYXNzbmFtZSA9ICdTeW5jaHJvbml6ZWQnICsgY2xzLl9fbmFtZV9fCiAgICAgICAgICAgICBzY2xzID0gY2xhc3NfY2FjaGVbY2xzXSA9IHR5cGUoY2xhc3NuYW1lLCAoU3luY2hyb25pemVkQmFzZSwpLCBkKQotICAgICAgICByZXR1cm4gc2NscyhvYmosIGxvY2spCisgICAgICAgIHJldHVybiBzY2xzKG9iaiwgbG9jaywgY3R4KQogCiAjCiAjIEZ1bmN0aW9ucyBmb3IgcGlja2xpbmcvdW5waWNrbGluZwpAQCAtMTcyLDkgKzE3OCwxMyBAQAogCiBjbGFzcyBTeW5jaHJvbml6ZWRCYXNlKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCBsb2NrPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGxvY2s9Tm9uZSwgY3R4PU5vbmUpOgogICAgICAgICBzZWxmLl9vYmogPSBvYmoKLSAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgUkxvY2soKQorICAgICAgICBpZiBsb2NrOgorICAgICAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dChmb3JjZT1UcnVlKQorICAgICAgICAgICAgc2VsZi5fbG9jayA9IGN0eC5STG9jaygpCiAgICAgICAgIHNlbGYuYWNxdWlyZSA9IHNlbGYuX2xvY2suYWNxdWlyZQogICAgICAgICBzZWxmLnJlbGVhc2UgPSBzZWxmLl9sb2NrLnJlbGVhc2UKIApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3Bhd24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2ZTQ3OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3Bhd24ucHkKQEAgLTAsMCArMSwyODcgQEAKKyMKKyMgQ29kZSB1c2VkIHRvIHN0YXJ0IHByb2Nlc3NlcyB3aGVuIHVzaW5nIHRoZSBzcGF3biBvciBmb3Jrc2VydmVyCisjIHN0YXJ0IG1ldGhvZHMuCisjCisjIG11bHRpcHJvY2Vzc2luZy9zcGF3bi5weQorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3lzCitpbXBvcnQgcnVucHkKK2ltcG9ydCB0eXBlcworCitmcm9tIC4gaW1wb3J0IGdldF9zdGFydF9tZXRob2QsIHNldF9zdGFydF9tZXRob2QKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ19tYWluJywgJ2ZyZWV6ZV9zdXBwb3J0JywgJ3NldF9leGVjdXRhYmxlJywgJ2dldF9leGVjdXRhYmxlJywKKyAgICAgICAgICAgJ2dldF9wcmVwYXJhdGlvbl9kYXRhJywgJ2dldF9jb21tYW5kX2xpbmUnLCAnaW1wb3J0X21haW5fcGF0aCddCisKKyMKKyMgX3B5dGhvbl9leGUgaXMgdGhlIGFzc3VtZWQgcGF0aCB0byB0aGUgcHl0aG9uIGV4ZWN1dGFibGUuCisjIFBlb3BsZSBlbWJlZGRpbmcgUHl0aG9uIHdhbnQgdG8gbW9kaWZ5IGl0LgorIworCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICBXSU5FWEUgPSBGYWxzZQorICAgIFdJTlNFUlZJQ0UgPSBGYWxzZQorZWxzZToKKyAgICBXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQorICAgIFdJTlNFUlZJQ0UgPSBzeXMuZXhlY3V0YWJsZS5sb3dlcigpLmVuZHN3aXRoKCJweXRob25zZXJ2aWNlLmV4ZSIpCisKK2lmIFdJTlNFUlZJQ0U6CisgICAgX3B5dGhvbl9leGUgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9uLmV4ZScpCitlbHNlOgorICAgIF9weXRob25fZXhlID0gc3lzLmV4ZWN1dGFibGUKKworZGVmIHNldF9leGVjdXRhYmxlKGV4ZSk6CisgICAgZ2xvYmFsIF9weXRob25fZXhlCisgICAgX3B5dGhvbl9leGUgPSBleGUKKworZGVmIGdldF9leGVjdXRhYmxlKCk6CisgICAgcmV0dXJuIF9weXRob25fZXhlCisKKyMKKyMKKyMKKworZGVmIGlzX2ZvcmtpbmcoYXJndik6CisgICAgJycnCisgICAgUmV0dXJuIHdoZXRoZXIgY29tbWFuZGxpbmUgaW5kaWNhdGVzIHdlIGFyZSBmb3JraW5nCisgICAgJycnCisgICAgaWYgbGVuKGFyZ3YpID49IDIgYW5kIGFyZ3ZbMV0gPT0gJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiBmcmVlemVfc3VwcG9ydCgpOgorICAgICcnJworICAgIFJ1biBjb2RlIGZvciBwcm9jZXNzIG9iamVjdCBpZiB0aGlzIGluIG5vdCB0aGUgbWFpbiBwcm9jZXNzCisgICAgJycnCisgICAgaWYgaXNfZm9ya2luZyhzeXMuYXJndik6CisgICAgICAgIGt3ZHMgPSB7fQorICAgICAgICBmb3IgYXJnIGluIHN5cy5hcmd2WzI6XToKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gYXJnLnNwbGl0KCc9JykKKyAgICAgICAgICAgIGlmIHZhbHVlID09ICdOb25lJzoKKyAgICAgICAgICAgICAgICBrd2RzW25hbWVdID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrd2RzW25hbWVdID0gaW50KHZhbHVlKQorICAgICAgICBzcGF3bl9tYWluKCoqa3dkcykKKyAgICAgICAgc3lzLmV4aXQoKQorCisKK2RlZiBnZXRfY29tbWFuZF9saW5lKCoqa3dkcyk6CisgICAgJycnCisgICAgUmV0dXJucyBwcmVmaXggb2YgY29tbWFuZCBsaW5lIHVzZWQgZm9yIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcworICAgICcnJworICAgIGlmIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gKFtzeXMuZXhlY3V0YWJsZSwgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXSArCisgICAgICAgICAgICAgICAgWyclcz0lcicgJSBpdGVtIGZvciBpdGVtIGluIGt3ZHMuaXRlbXMoKV0pCisgICAgZWxzZToKKyAgICAgICAgcHJvZyA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zcGF3biBpbXBvcnQgc3Bhd25fbWFpbjsgc3Bhd25fbWFpbiglcyknCisgICAgICAgIHByb2cgJT0gJywgJy5qb2luKCclcz0lcicgJSBpdGVtIGZvciBpdGVtIGluIGt3ZHMuaXRlbXMoKSkKKyAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgIHJldHVybiBbX3B5dGhvbl9leGVdICsgb3B0cyArIFsnLWMnLCBwcm9nLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisKKworZGVmIHNwYXduX21haW4ocGlwZV9oYW5kbGUsIHBhcmVudF9waWQ9Tm9uZSwgdHJhY2tlcl9mZD1Ob25lKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBzcGVjaWZlZCBieSBkYXRhIHJlY2VpdmVkIG92ZXIgcGlwZQorICAgICcnJworICAgIGFzc2VydCBpc19mb3JraW5nKHN5cy5hcmd2KQorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIGZyb20gLnJlZHVjdGlvbiBpbXBvcnQgc3RlYWxfaGFuZGxlCisgICAgICAgIG5ld19oYW5kbGUgPSBzdGVhbF9oYW5kbGUocGFyZW50X3BpZCwgcGlwZV9oYW5kbGUpCisgICAgICAgIGZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKG5ld19oYW5kbGUsIG9zLk9fUkRPTkxZKQorICAgIGVsc2U6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHRyYWNrZXJfZmQKKyAgICAgICAgZmQgPSBwaXBlX2hhbmRsZQorICAgIGV4aXRjb2RlID0gX21haW4oZmQpCisgICAgc3lzLmV4aXQoZXhpdGNvZGUpCisKKworZGVmIF9tYWluKGZkKToKKyAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3JiJywgY2xvc2VmZD1UcnVlKSBhcyBmcm9tX3BhcmVudDoKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJlcGFyYXRpb25fZGF0YSA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQorICAgICAgICAgICAgc2VsZiA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcKKyAgICByZXR1cm4gc2VsZi5fYm9vdHN0cmFwKCkKKworCitkZWYgX2NoZWNrX25vdF9pbXBvcnRpbmdfbWFpbigpOgorICAgIGlmIGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJycnCisgICAgICAgIEFuIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBzdGFydCBhIG5ldyBwcm9jZXNzIGJlZm9yZSB0aGUKKyAgICAgICAgY3VycmVudCBwcm9jZXNzIGhhcyBmaW5pc2hlZCBpdHMgYm9vdHN0cmFwcGluZyBwaGFzZS4KKworICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBub3QgdXNpbmcgZm9yayB0byBzdGFydCB5b3VyCisgICAgICAgIGNoaWxkIHByb2Nlc3NlcyBhbmQgeW91IGhhdmUgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tCisgICAgICAgIGluIHRoZSBtYWluIG1vZHVsZToKKworICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgICAgICBmcmVlemVfc3VwcG9ydCgpCisgICAgICAgICAgICAgICAgLi4uCisKKyAgICAgICAgVGhlICJmcmVlemVfc3VwcG9ydCgpIiBsaW5lIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBwcm9ncmFtCisgICAgICAgIGlzIG5vdCBnb2luZyB0byBiZSBmcm96ZW4gdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLicnJykKKworCitkZWYgZ2V0X3ByZXBhcmF0aW9uX2RhdGEobmFtZSk6CisgICAgJycnCisgICAgUmV0dXJuIGluZm8gYWJvdXQgcGFyZW50IG5lZWRlZCBieSBjaGlsZCB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAorICAgICcnJworICAgIF9jaGVja19ub3RfaW1wb3J0aW5nX21haW4oKQorICAgIGQgPSBkaWN0KAorICAgICAgICBsb2dfdG9fc3RkZXJyPXV0aWwuX2xvZ190b19zdGRlcnIsCisgICAgICAgIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5LAorICAgICAgICApCisKKyAgICBpZiB1dGlsLl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gdXRpbC5fbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKKworICAgIHN5c19wYXRoPXN5cy5wYXRoLmNvcHkoKQorICAgIHRyeToKKyAgICAgICAgaSA9IHN5c19wYXRoLmluZGV4KCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgc3lzX3BhdGhbaV0gPSBwcm9jZXNzLk9SSUdJTkFMX0RJUgorCisgICAgZC51cGRhdGUoCisgICAgICAgIG5hbWU9bmFtZSwKKyAgICAgICAgc3lzX3BhdGg9c3lzX3BhdGgsCisgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAorICAgICAgICBvcmlnX2Rpcj1wcm9jZXNzLk9SSUdJTkFMX0RJUiwKKyAgICAgICAgZGlyPW9zLmdldGN3ZCgpLAorICAgICAgICBzdGFydF9tZXRob2Q9Z2V0X3N0YXJ0X21ldGhvZCgpLAorICAgICAgICApCisKKyAgICAjIEZpZ3VyZSBvdXQgd2hldGhlciB0byBpbml0aWFsaXNlIG1haW4gaW4gdGhlIHN1YnByb2Nlc3MgYXMgYSBtb2R1bGUKKyAgICAjIG9yIHRocm91Z2ggZGlyZWN0IGV4ZWN1dGlvbiAob3IgdG8gbGVhdmUgaXQgYWxvbmUgZW50aXJlbHkpCisgICAgbWFpbl9tb2R1bGUgPSBzeXMubW9kdWxlc1snX19tYWluX18nXQorICAgIG1haW5fbW9kX25hbWUgPSBnZXRhdHRyKG1haW5fbW9kdWxlLl9fc3BlY19fLCAibmFtZSIsIE5vbmUpCisgICAgaWYgbWFpbl9tb2RfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgZFsnaW5pdF9tYWluX2Zyb21fbmFtZSddID0gbWFpbl9tb2RfbmFtZQorICAgIGVsaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMicgb3IgKG5vdCBXSU5FWEUgYW5kIG5vdCBXSU5TRVJWSUNFKToKKyAgICAgICAgbWFpbl9wYXRoID0gZ2V0YXR0cihtYWluX21vZHVsZSwgJ19fZmlsZV9fJywgTm9uZSkKKyAgICAgICAgaWYgbWFpbl9wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmlzYWJzKG1haW5fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gb3MucGF0aC5qb2luKHByb2Nlc3MuT1JJR0lOQUxfRElSLCBtYWluX3BhdGgpCisgICAgICAgICAgICBkWydpbml0X21haW5fZnJvbV9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKKworICAgIHJldHVybiBkCisKKyMKKyMgUHJlcGFyZSBjdXJyZW50IHByb2Nlc3MKKyMKKworb2xkX21haW5fbW9kdWxlcyA9IFtdCisKK2RlZiBwcmVwYXJlKGRhdGEpOgorICAgICcnJworICAgIFRyeSB0byBnZXQgY3VycmVudCBwcm9jZXNzIHJlYWR5IHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgaWYgJ25hbWUnIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQorCisgICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSA9IGRhdGFbJ2F1dGhrZXknXQorCisgICAgaWYgJ2xvZ190b19zdGRlcnInIGluIGRhdGEgYW5kIGRhdGFbJ2xvZ190b19zdGRlcnInXToKKyAgICAgICAgdXRpbC5sb2dfdG9fc3RkZXJyKCkKKworICAgIGlmICdsb2dfbGV2ZWwnIGluIGRhdGE6CisgICAgICAgIHV0aWwuZ2V0X2xvZ2dlcigpLnNldExldmVsKGRhdGFbJ2xvZ19sZXZlbCddKQorCisgICAgaWYgJ3N5c19wYXRoJyBpbiBkYXRhOgorICAgICAgICBzeXMucGF0aCA9IGRhdGFbJ3N5c19wYXRoJ10KKworICAgIGlmICdzeXNfYXJndicgaW4gZGF0YToKKyAgICAgICAgc3lzLmFyZ3YgPSBkYXRhWydzeXNfYXJndiddCisKKyAgICBpZiAnZGlyJyBpbiBkYXRhOgorICAgICAgICBvcy5jaGRpcihkYXRhWydkaXInXSkKKworICAgIGlmICdvcmlnX2RpcicgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgPSBkYXRhWydvcmlnX2RpciddCisKKyAgICBpZiAnc3RhcnRfbWV0aG9kJyBpbiBkYXRhOgorICAgICAgICBzZXRfc3RhcnRfbWV0aG9kKGRhdGFbJ3N0YXJ0X21ldGhvZCddKQorCisgICAgaWYgJ2luaXRfbWFpbl9mcm9tX25hbWUnIGluIGRhdGE6CisgICAgICAgIF9maXh1cF9tYWluX2Zyb21fbmFtZShkYXRhWydpbml0X21haW5fZnJvbV9uYW1lJ10pCisgICAgZWxpZiAnaW5pdF9tYWluX2Zyb21fcGF0aCcgaW4gZGF0YToKKyAgICAgICAgX2ZpeHVwX21haW5fZnJvbV9wYXRoKGRhdGFbJ2luaXRfbWFpbl9mcm9tX3BhdGgnXSkKKworIyBNdWx0aXByb2Nlc3NpbmcgbW9kdWxlIGhlbHBlcnMgdG8gZml4IHVwIHRoZSBtYWluIG1vZHVsZSBpbgorIyBzcGF3bmVkIHN1YnByb2Nlc3NlcworZGVmIF9maXh1cF9tYWluX2Zyb21fbmFtZShtb2RfbmFtZSk6CisgICAgIyBfX21haW5fXy5weSBmaWxlcyBmb3IgcGFja2FnZXMsIGRpcmVjdG9yaWVzLCB6aXAgYXJjaGl2ZXMsIGV0YywgcnVuCisgICAgIyB0aGVpciAibWFpbiBvbmx5IiBjb2RlIHVuY29uZGl0aW9uYWxseSwgc28gd2UgZG9uJ3QgZXZlbiB0cnkgdG8KKyAgICAjIHBvcHVsYXRlIGFueXRoaW5nIGluIF9fbWFpbl9fLCBub3IgZG8gd2UgbWFrZSBhbnkgY2hhbmdlcyB0bworICAgICMgX19tYWluX18gYXR0cmlidXRlcworICAgIGN1cnJlbnRfbWFpbiA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisgICAgaWYgbW9kX25hbWUgPT0gIl9fbWFpbl9fIiBvciBtb2RfbmFtZS5lbmRzd2l0aCgiLl9fbWFpbl9fIik6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZiB0aGlzIHByb2Nlc3Mgd2FzIGZvcmtlZCwgX19tYWluX18gbWF5IGFscmVhZHkgYmUgcG9wdWxhdGVkCisgICAgaWYgZ2V0YXR0cihjdXJyZW50X21haW4uX19zcGVjX18sICJuYW1lIiwgTm9uZSkgPT0gbW9kX25hbWU6CisgICAgICAgIHJldHVybgorCisgICAgIyBPdGhlcndpc2UsIF9fbWFpbl9fIG1heSBjb250YWluIHNvbWUgbm9uLW1haW4gY29kZSB3aGVyZSB3ZSBuZWVkIHRvCisgICAgIyBzdXBwb3J0IHVucGlja2xpbmcgaXQgcHJvcGVybHkuIFdlIHJlcnVuIGl0IGFzIF9fbXBfbWFpbl9fIGFuZCBtYWtlCisgICAgIyB0aGUgbm9ybWFsIF9fbWFpbl9fIGFuIGFsaWFzIHRvIHRoYXQKKyAgICBvbGRfbWFpbl9tb2R1bGVzLmFwcGVuZChjdXJyZW50X21haW4pCisgICAgbWFpbl9tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCJfX21wX21haW5fXyIpCisgICAgbWFpbl9jb250ZW50ID0gcnVucHkucnVuX21vZHVsZShtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9uYW1lPSJfX21wX21haW5fXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcl9zeXM9VHJ1ZSkKKyAgICBtYWluX21vZHVsZS5fX2RpY3RfXy51cGRhdGUobWFpbl9jb250ZW50KQorICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gc3lzLm1vZHVsZXNbJ19fbXBfbWFpbl9fJ10gPSBtYWluX21vZHVsZQorCisKK2RlZiBfZml4dXBfbWFpbl9mcm9tX3BhdGgobWFpbl9wYXRoKToKKyAgICAjIElmIHRoaXMgcHJvY2VzcyB3YXMgZm9ya2VkLCBfX21haW5fXyBtYXkgYWxyZWFkeSBiZSBwb3B1bGF0ZWQKKyAgICBjdXJyZW50X21haW4gPSBzeXMubW9kdWxlc1snX19tYWluX18nXQorCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGUgbWFpbiBpcHl0aG9uIGxhdW5jaCBzY3JpcHQgaGlzdG9yaWNhbGx5IGhhZCBubworICAgICMgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyciIGd1YXJkLCBzbyB3ZSB3b3JrIGFyb3VuZCB0aGF0CisgICAgIyBieSB0cmVhdGluZyBpdCBsaWtlIGEgX19tYWluX18ucHkgZmlsZQorICAgICMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pcHl0aG9uL2lweXRob24vaXNzdWVzLzQ2OTgKKyAgICBtYWluX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKSlbMF0KKyAgICBpZiBtYWluX25hbWUgPT0gJ2lweXRob24nOgorICAgICAgICByZXR1cm4KKworICAgICMgT3RoZXJ3aXNlLCBpZiBfX2ZpbGVfXyBhbHJlYWR5IGhhcyB0aGUgc2V0dGluZyB3ZSBleHBlY3QsCisgICAgIyB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkbworICAgIGlmIGdldGF0dHIoY3VycmVudF9tYWluLCAnX19maWxlX18nLCBOb25lKSA9PSBtYWluX3BhdGg6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZiB0aGUgcGFyZW50IHByb2Nlc3MgaGFzIHNlbnQgYSBwYXRoIHRocm91Z2ggcmF0aGVyIHRoYW4gYSBtb2R1bGUKKyAgICAjIG5hbWUgd2UgYXNzdW1lIGl0IGlzIGFuIGV4ZWN1dGFibGUgc2NyaXB0IHRoYXQgbWF5IGNvbnRhaW4KKyAgICAjIG5vbi1tYWluIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZAorICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKGN1cnJlbnRfbWFpbikKKyAgICBtYWluX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoIl9fbXBfbWFpbl9fIikKKyAgICBtYWluX2NvbnRlbnQgPSBydW5weS5ydW5fcGF0aChtYWluX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX25hbWU9Il9fbXBfbWFpbl9fIikKKyAgICBtYWluX21vZHVsZS5fX2RpY3RfXy51cGRhdGUobWFpbl9jb250ZW50KQorICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gc3lzLm1vZHVsZXNbJ19fbXBfbWFpbl9fJ10gPSBtYWluX21vZHVsZQorCisKK2RlZiBpbXBvcnRfbWFpbl9wYXRoKG1haW5fcGF0aCk6CisgICAgJycnCisgICAgU2V0IHN5cy5tb2R1bGVzWydfX21haW5fXyddIHRvIG1vZHVsZSBhdCBtYWluX3BhdGgKKyAgICAnJycKKyAgICBfZml4dXBfbWFpbl9mcm9tX3BhdGgobWFpbl9wYXRoKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKaW5kZXggMGZhY2E3OC4uZGVhMWNiZCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CkBAIC0xMywxOCArMTMsMjAgQEAKIAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHN5cwotCitpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGRlYnVnCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBhc3NlcnRfc3Bhd25pbmcsIFBvcGVuCisKIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyBfdGltZQogCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCB1dGlsCisKICMgVHJ5IHRvIGltcG9ydCB0aGUgbXAuc3luY2hyb25pemUgbW9kdWxlIGNsZWFubHksIGlmIGl0IGZhaWxzCiAjIHJhaXNlIEltcG9ydEVycm9yIGZvciBwbGF0Zm9ybXMgbGFja2luZyBhIHdvcmtpbmcgc2VtX29wZW4gaW1wbGVtZW50YXRpb24uCiAjIFNlZSBpc3N1ZSAzNzcwCiB0cnk6Ci0gICAgZnJvbSBfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBTZW1Mb2NrCisgICAgZnJvbSBfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBTZW1Mb2NrLCBzZW1fdW5saW5rCiBleGNlcHQgKEltcG9ydEVycm9yKToKICAgICByYWlzZSBJbXBvcnRFcnJvcigiVGhpcyBwbGF0Zm9ybSBsYWNrcyBhIGZ1bmN0aW9uaW5nIHNlbV9vcGVuIiArCiAgICAgICAgICAgICAgICAgICAgICAgIiBpbXBsZW1lbnRhdGlvbiwgdGhlcmVmb3JlLCB0aGUgcmVxdWlyZWQiICsKQEAgLTQ0LDE1ICs0Niw0NyBAQAogCiBjbGFzcyBTZW1Mb2NrKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwga2luZCwgdmFsdWUsIG1heHZhbHVlKToKLSAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrKGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSkKLSAgICAgICAgZGVidWcoJ2NyZWF0ZWQgc2VtbG9jayB3aXRoIGhhbmRsZSAlcycgJSBzbC5oYW5kbGUpCisgICAgX3JhbmQgPSB0ZW1wZmlsZS5fUmFuZG9tTmFtZVNlcXVlbmNlKCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBraW5kLCB2YWx1ZSwgbWF4dmFsdWUsICosIGN0eCk6CisgICAgICAgIGlmIGN0eCBpcyBOb25lOgorICAgICAgICAgICAgY3R4ID0gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0LmdldF9jb250ZXh0KCkKKyAgICAgICAgbmFtZSA9IGN0eC5nZXRfc3RhcnRfbWV0aG9kKCkKKyAgICAgICAgdW5saW5rX25vdyA9IHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIG5hbWUgPT0gJ2ZvcmsnCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrKAorICAgICAgICAgICAgICAgICAgICBraW5kLCB2YWx1ZSwgbWF4dmFsdWUsIHNlbGYuX21ha2VfbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICB1bmxpbmtfbm93KQorICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IoJ2Nhbm5vdCBmaW5kIG5hbWUgZm9yIHNlbWFwaG9yZScpCisKKyAgICAgICAgdXRpbC5kZWJ1ZygnY3JlYXRlZCBzZW1sb2NrIHdpdGggaGFuZGxlICVzJyAlIHNsLmhhbmRsZSkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGRlZiBfYWZ0ZXJfZm9yayhvYmopOgogICAgICAgICAgICAgICAgIG9iai5fc2VtbG9jay5fYWZ0ZXJfZm9yaygpCi0gICAgICAgICAgICByZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIF9hZnRlcl9mb3JrKQorICAgICAgICAgICAgdXRpbC5yZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIF9hZnRlcl9mb3JrKQorCisgICAgICAgIGlmIHNlbGYuX3NlbWxvY2submFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2Ugb25seSBnZXQgaGVyZSBpZiB3ZSBhcmUgb24gVW5peCB3aXRoIGZvcmtpbmcKKyAgICAgICAgICAgICMgZGlzYWJsZWQuICBXaGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgb3IgdGhlCisgICAgICAgICAgICAjIHByb2Nlc3Mgc2h1dHMgZG93biB3ZSB1bmxpbmsgdGhlIHNlbWFwaG9yZSBuYW1lCisgICAgICAgICAgICBmcm9tIC5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgcmVnaXN0ZXIKKyAgICAgICAgICAgIHJlZ2lzdGVyKHNlbGYuX3NlbWxvY2submFtZSkKKyAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgU2VtTG9jay5fY2xlYW51cCwgKHNlbGYuX3NlbWxvY2submFtZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0cHJpb3JpdHk9MCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2NsZWFudXAobmFtZSk6CisgICAgICAgIGZyb20gLnNlbWFwaG9yZV90cmFja2VyIGltcG9ydCB1bnJlZ2lzdGVyCisgICAgICAgIHNlbV91bmxpbmsobmFtZSkKKyAgICAgICAgdW5yZWdpc3RlcihuYW1lKQogCiAgICAgZGVmIF9tYWtlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHNlbGYuYWNxdWlyZSA9IHNlbGYuX3NlbWxvY2suYWNxdWlyZQpAQCAtNjUsMjMgKzk5LDMyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9zZW1sb2NrLl9fZXhpdF9fKCphcmdzKQogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgYXNzZXJ0X3NwYXduaW5nKHNlbGYpCisgICAgICAgIGNvbnRleHQuYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgIHNsID0gc2VsZi5fc2VtbG9jawotICAgICAgICByZXR1cm4gKFBvcGVuLmR1cGxpY2F0ZV9mb3JfY2hpbGQoc2wuaGFuZGxlKSwgc2wua2luZCwgc2wubWF4dmFsdWUpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgaCA9IGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkuZHVwbGljYXRlX2Zvcl9jaGlsZChzbC5oYW5kbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoID0gc2wuaGFuZGxlCisgICAgICAgIHJldHVybiAoaCwgc2wua2luZCwgc2wubWF4dmFsdWUsIHNsLm5hbWUpCiAKICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKICAgICAgICAgc2VsZi5fc2VtbG9jayA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jay5fcmVidWlsZCgqc3RhdGUpCi0gICAgICAgIGRlYnVnKCdyZWNyZWF0ZWQgYmxvY2tlciB3aXRoIGhhbmRsZSAlcicgJSBzdGF0ZVswXSkKKyAgICAgICAgdXRpbC5kZWJ1ZygncmVjcmVhdGVkIGJsb2NrZXIgd2l0aCBoYW5kbGUgJXInICUgc3RhdGVbMF0pCiAgICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9tYWtlX25hbWUoKToKKyAgICAgICAgcmV0dXJuICclcy0lcycgJSAocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fY29uZmlnWydzZW1wcmVmaXgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChTZW1Mb2NrLl9yYW5kKSkKKwogIwogIyBTZW1hcGhvcmUKICMKIAogY2xhc3MgU2VtYXBob3JlKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIFNFTV9WQUxVRV9NQVgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgU0VNX1ZBTFVFX01BWCwgY3R4PWN0eCkKIAogICAgIGRlZiBnZXRfdmFsdWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9zZW1sb2NrLl9nZXRfdmFsdWUoKQpAQCAtOTksOCArMTQyLDggQEAKIAogY2xhc3MgQm91bmRlZFNlbWFwaG9yZShTZW1hcGhvcmUpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIHZhbHVlKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBjdHgpOgorICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIHZhbHVlLCBjdHg9Y3R4KQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0xMTYsMTMgKzE1OSwxMyBAQAogCiBjbGFzcyBMb2NrKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgMSwgMSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBTRU1BUEhPUkUsIDEsIDEsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX3NlbWxvY2suX2lzX21pbmUoKToKLSAgICAgICAgICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgICAgICBlbGlmIHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpID09IDE6CkBAIC0xNDEsMTMgKzE4NCwxMyBAQAogCiBjbGFzcyBSTG9jayhTZW1Mb2NrKToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBSRUNVUlNJVkVfTVVURVgsIDEsIDEpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgUkVDVVJTSVZFX01VVEVYLCAxLCAxLCBjdHg9Y3R4KQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzZWxmLl9zZW1sb2NrLl9pc19taW5lKCk6Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgICAgICAgICBuYW1lID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lCiAgICAgICAgICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSAhPSAnTWFpblRocmVhZCc6CiAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gJ3wnICsgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZQogICAgICAgICAgICAgICAgIGNvdW50ID0gc2VsZi5fc2VtbG9jay5fY291bnQoKQpAQCAtMTY3LDE1ICsyMTAsMTUgQEAKIAogY2xhc3MgQ29uZGl0aW9uKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jaz1Ob25lKToKLSAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgUkxvY2soKQotICAgICAgICBzZWxmLl9zbGVlcGluZ19jb3VudCA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl93b2tlbl9jb3VudCA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl93YWl0X3NlbWFwaG9yZSA9IFNlbWFwaG9yZSgwKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUsICosIGN0eCk6CisgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrIG9yIGN0eC5STG9jaygpCisgICAgICAgIHNlbGYuX3NsZWVwaW5nX2NvdW50ID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl93b2tlbl9jb3VudCA9IGN0eC5TZW1hcGhvcmUoMCkKKyAgICAgICAgc2VsZi5fd2FpdF9zZW1hcGhvcmUgPSBjdHguU2VtYXBob3JlKDApCiAgICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgcmV0dXJuIChzZWxmLl9sb2NrLCBzZWxmLl9zbGVlcGluZ19jb3VudCwKICAgICAgICAgICAgICAgICBzZWxmLl93b2tlbl9jb3VudCwgc2VsZi5fd2FpdF9zZW1hcGhvcmUpCiAKQEAgLTI4OSw5ICszMzIsOSBAQAogCiBjbGFzcyBFdmVudChvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9jb25kID0gQ29uZGl0aW9uKExvY2soKSkKLSAgICAgICAgc2VsZi5fZmxhZyA9IFNlbWFwaG9yZSgwKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBzZWxmLl9jb25kID0gY3R4LkNvbmRpdGlvbihjdHguTG9jaygpKQorICAgICAgICBzZWxmLl9mbGFnID0gY3R4LlNlbWFwaG9yZSgwKQogCiAgICAgZGVmIGlzX3NldChzZWxmKToKICAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKQEAgLTM0MCwxMSArMzgzLDExIEBACiAKIGNsYXNzIEJhcnJpZXIodGhyZWFkaW5nLkJhcnJpZXIpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lLCAqLCBjdHgpOgogICAgICAgICBpbXBvcnQgc3RydWN0Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmhlYXAgaW1wb3J0IEJ1ZmZlcldyYXBwZXIKKyAgICAgICAgZnJvbSAuaGVhcCBpbXBvcnQgQnVmZmVyV3JhcHBlcgogICAgICAgICB3cmFwcGVyID0gQnVmZmVyV3JhcHBlcihzdHJ1Y3QuY2FsY3NpemUoJ2knKSAqIDIpCi0gICAgICAgIGNvbmQgPSBDb25kaXRpb24oKQorICAgICAgICBjb25kID0gY3R4LkNvbmRpdGlvbigpCiAgICAgICAgIHNlbGYuX19zZXRzdGF0ZV9fKChwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQsIGNvbmQsIHdyYXBwZXIpKQogICAgICAgICBzZWxmLl9zdGF0ZSA9IDAKICAgICAgICAgc2VsZi5fY291bnQgPSAwCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKaW5kZXggZjU4NjJiNC4uMGI2OTVlNCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQpAQCAtNyw4ICs3LDYgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1pbXBvcnQgc3lzCi1pbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgb3MKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCB3ZWFrcmVmCkBAIC0xNywxMyArMTUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYW51cCBmdW5jdGlvbiBiZWZvcmUgbXVsdGlwcm9jZXNzaW5nIGRvZXMKIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncwogCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbgorZnJvbSAuIGltcG9ydCBwcm9jZXNzCiAKIF9fYWxsX18gPSBbCiAgICAgJ3N1Yl9kZWJ1ZycsICdkZWJ1ZycsICdpbmZvJywgJ3N1Yl93YXJuaW5nJywgJ2dldF9sb2dnZXInLAogICAgICdsb2dfdG9fc3RkZXJyJywgJ2dldF90ZW1wX2RpcicsICdyZWdpc3Rlcl9hZnRlcl9mb3JrJywKICAgICAnaXNfZXhpdGluZycsICdGaW5hbGl6ZScsICdGb3JrQXdhcmVUaHJlYWRMb2NrJywgJ0ZvcmtBd2FyZUxvY2FsJywKLSAgICAnU1VCREVCVUcnLCAnU1VCV0FSTklORycsCisgICAgJ2Nsb3NlX2FsbF9mZHNfZXhjZXB0JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAogICAgIF0KIAogIwpAQCAtNzEsOCArNjksNiBAQAogCiAgICAgICAgICAgICBfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoTE9HR0VSX05BTUUpCiAgICAgICAgICAgICBfbG9nZ2VyLnByb3BhZ2F0ZSA9IDAKLSAgICAgICAgICAgIGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKFNVQkRFQlVHLCAnU1VCREVCVUcnKQotICAgICAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoU1VCV0FSTklORywgJ1NVQldBUk5JTkcnKQogCiAgICAgICAgICAgICAjIFhYWCBtdWx0aXByb2Nlc3Npbmcgc2hvdWxkIGNsZWFudXAgYmVmb3JlIGxvZ2dpbmcKICAgICAgICAgICAgIGlmIGhhc2F0dHIoYXRleGl0LCAndW5yZWdpc3RlcicpOgpAQCAtMTExLDEzICsxMDcsMTQgQEAKIAogZGVmIGdldF90ZW1wX2RpcigpOgogICAgICMgZ2V0IG5hbWUgb2YgYSB0ZW1wIGRpcmVjdG9yeSB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cAotICAgIGlmIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyIGlzIE5vbmU6CisgICAgdGVtcGRpciA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2NvbmZpZy5nZXQoJ3RlbXBkaXInKQorICAgIGlmIHRlbXBkaXIgaXMgTm9uZToKICAgICAgICAgaW1wb3J0IHNodXRpbCwgdGVtcGZpbGUKICAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdweW1wLScpCiAgICAgICAgIGluZm8oJ2NyZWF0ZWQgdGVtcCBkaXJlY3RvcnkgJXMnLCB0ZW1wZGlyKQogICAgICAgICBGaW5hbGl6ZShOb25lLCBzaHV0aWwucm10cmVlLCBhcmdzPVt0ZW1wZGlyXSwgZXhpdHByaW9yaXR5PS0xMDApCi0gICAgICAgIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyID0gdGVtcGRpcgotICAgIHJldHVybiBjdXJyZW50X3Byb2Nlc3MoKS5fdGVtcGRpcgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3RlbXBkaXInXSA9IHRlbXBkaXIKKyAgICByZXR1cm4gdGVtcGRpcgogCiAjCiAjIFN1cHBvcnQgZm9yIHJlaW5pdGlhbGl6YXRpb24gb2Ygb2JqZWN0cyB3aGVuIGJvb3RzdHJhcHBpbmcgYSBjaGlsZCBwcm9jZXNzCkBAIC0yNzMsOCArMjcwLDggQEAKIF9leGl0aW5nID0gRmFsc2UKIAogZGVmIF9leGl0X2Z1bmN0aW9uKGluZm89aW5mbywgZGVidWc9ZGVidWcsIF9ydW5fZmluYWxpemVycz1fcnVuX2ZpbmFsaXplcnMsCi0gICAgICAgICAgICAgICAgICAgYWN0aXZlX2NoaWxkcmVuPWFjdGl2ZV9jaGlsZHJlbiwKLSAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Byb2Nlc3M9Y3VycmVudF9wcm9jZXNzKToKKyAgICAgICAgICAgICAgICAgICBhY3RpdmVfY2hpbGRyZW49cHJvY2Vzcy5hY3RpdmVfY2hpbGRyZW4sCisgICAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9jZXNzPXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKToKICAgICAjIFdlIGhvbGQgb24gdG8gcmVmZXJlbmNlcyB0byBmdW5jdGlvbnMgaW4gdGhlIGFyZ2xpc3QgZHVlIHRvIHRoZQogICAgICMgc2l0dWF0aW9uIGRlc2NyaWJlZCBiZWxvdywgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhpcwogICAgICMgbW9kdWxlJ3MgZ2xvYmFscyBhcmUgZGVzdHJveWVkLgpAQCAtMzAzLDcgKzMwMCw3IEBACiAgICAgICAgICAgICAjICM5MjA3LgogCiAgICAgICAgICAgICBmb3IgcCBpbiBhY3RpdmVfY2hpbGRyZW4oKToKLSAgICAgICAgICAgICAgICBpZiBwLl9kYWVtb25pYzoKKyAgICAgICAgICAgICAgICBpZiBwLmRhZW1vbjoKICAgICAgICAgICAgICAgICAgICAgaW5mbygnY2FsbGluZyB0ZXJtaW5hdGUoKSBmb3IgZGFlbW9uICVzJywgcC5uYW1lKQogICAgICAgICAgICAgICAgICAgICBwLl9wb3Blbi50ZXJtaW5hdGUoKQogCkBAIC0zMzUsMyArMzMyLDM2IEBACiAgICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgbGFtYmRhIG9iaiA6IG9iai5fX2RpY3RfXy5jbGVhcigpKQogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gdHlwZShzZWxmKSwgKCkKKworIworIyBDbG9zZSBmZHMgZXhjZXB0IHRob3NlIHNwZWNpZmllZAorIworCit0cnk6CisgICAgTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCitleGNlcHQgRXhjZXB0aW9uOgorICAgIE1BWEZEID0gMjU2CisKK2RlZiBjbG9zZV9hbGxfZmRzX2V4Y2VwdChmZHMpOgorICAgIGZkcyA9IGxpc3QoZmRzKSArIFstMSwgTUFYRkRdCisgICAgZmRzLnNvcnQoKQorICAgIGFzc2VydCBmZHNbLTFdID09IE1BWEZELCAnZmQgdG9vIGxhcmdlJworICAgIGZvciBpIGluIHJhbmdlKGxlbihmZHMpIC0gMSk6CisgICAgICAgIG9zLmNsb3NlcmFuZ2UoZmRzW2ldKzEsIGZkc1tpKzFdKQorCisjCisjIFN0YXJ0IGEgcHJvZ3JhbSB3aXRoIG9ubHkgc3BlY2lmaWVkIGZkcyBrZXB0IG9wZW4KKyMKKworZGVmIHNwYXdudl9wYXNzZmRzKHBhdGgsIGFyZ3MsIHBhc3NmZHMpOgorICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCisgICAgcGFzc2ZkcyA9IHNvcnRlZChwYXNzZmRzKQorICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IG9zLnBpcGUoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjKAorICAgICAgICAgICAgYXJncywgW29zLmZzZW5jb2RlKHBhdGgpXSwgVHJ1ZSwgcGFzc2ZkcywgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSwKKyAgICAgICAgICAgIEZhbHNlLCBGYWxzZSwgTm9uZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jbG9zZShlcnJwaXBlX3JlYWQpCisgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfd3JpdGUpCmRpZmYgLS1naXQgYS9MaWIvbmV0cmMucHkgYi9MaWIvbmV0cmMucHkKaW5kZXggMmFhNDhmMy4uYmJiM2QyMyAxMDA2NDQKLS0tIGEvTGliL25ldHJjLnB5CisrKyBiL0xpYi9uZXRyYy5weQpAQCAtMyw4ICszLDYgQEAKICMgTW9kdWxlIGFuZCBkb2N1bWVudGF0aW9uIGJ5IEVyaWMgUy4gUmF5bW9uZCwgMjEgRGVjIDE5OTgKIAogaW1wb3J0IG9zLCBzaGxleCwgc3RhdAotaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgIGltcG9ydCBwd2QKIAogX19hbGxfXyA9IFsibmV0cmMiLCAiTmV0cmNQYXJzZUVycm9yIl0KIApAQCAtMjgsNyArMjYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnSE9NRSddLCAiLm5ldHJjIikKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDb3VsZCBub3QgZmluZCAubmV0cmM6ICRIT01FIGlzIG5vdCBzZXQiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNvdWxkIG5vdCBmaW5kIC5uZXRyYzogJEhPTUUgaXMgbm90IHNldCIpCiAgICAgICAgIHNlbGYuaG9zdHMgPSB7fQogICAgICAgICBzZWxmLm1hY3JvcyA9IHt9CiAgICAgICAgIHdpdGggb3BlbihmaWxlKSBhcyBmcDoKQEAgLTkyLDYgKzkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnIGFuZCBkZWZhdWx0X25ldHJjOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IG9zLmZzdGF0KGZwLmZpbGVubygpKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5zdF91aWQgIT0gb3MuZ2V0dWlkKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHB3ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm93bmVyID0gcHdkLmdldHB3dWlkKHByb3Auc3RfdWlkKVswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9ubnRwbGliLnB5IGIvTGliL25udHBsaWIucHkKaW5kZXggMDJjYzM3Yy4uNGRlZDc4YSAxMDA2NDQKLS0tIGEvTGliL25udHBsaWIucHkKKysrIGIvTGliL25udHBsaWIucHkKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgXQogCiAjIG1heGltYWwgbGluZSBsZW5ndGggd2hlbiBjYWxsaW5nIHJlYWRsaW5lKCkuIFRoaXMgaXMgdG8gcHJldmVudAotIyByZWFkaW5nIGFyYml0cmFyeSBsZW5naHQgbGluZXMuIFJGQyAzOTc3IGxpbWl0cyBOTlRQIGxpbmUgbGVuZ3RoIHRvCisjIHJlYWRpbmcgYXJiaXRyYXJ5IGxlbmd0aCBsaW5lcy4gUkZDIDM5NzcgbGltaXRzIE5OVFAgbGluZSBsZW5ndGggdG8KICMgNTEyIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBDUkxGLiBXZSBoYXZlIHNlbGVjdGVkIDIwNDgganVzdCB0byBiZSBvbgogIyB0aGUgc2FmZSBzaWRlLgogX01BWExJTkUgPSAyMDQ4CkBAIC0yNzksNyArMjc5LDcgQEAKIAogaWYgX2hhdmVfc3NsOgogCi0gICAgZGVmIF9lbmNyeXB0X29uKHNvY2ssIGNvbnRleHQpOgorICAgIGRlZiBfZW5jcnlwdF9vbihzb2NrLCBjb250ZXh0LCBob3N0bmFtZSk6CiAgICAgICAgICIiIldyYXAgYSBzb2NrZXQgaW4gU1NML1RMUy4gQXJndW1lbnRzOgogICAgICAgICAtIHNvY2s6IFNvY2tldCB0byB3cmFwCiAgICAgICAgIC0gY29udGV4dDogU1NMIGNvbnRleHQgdG8gdXNlIGZvciB0aGUgZW5jcnlwdGVkIGNvbm5lY3Rpb24KQEAgLTI4OCwxMCArMjg4LDkgQEAKICAgICAgICAgIiIiCiAgICAgICAgICMgR2VuZXJhdGUgYSBkZWZhdWx0IFNTTCBjb250ZXh0IGlmIG5vbmUgd2FzIHBhc3NlZC4KICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgICAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KLSAgICAgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKLSAgICAgICAgcmV0dXJuIGNvbnRleHQud3JhcF9zb2NrZXQoc29jaykKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCisgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IGhvc3RuYW1lIGlmIHNzbC5IQVNfU05JIGVsc2UgTm9uZQorICAgICAgICByZXR1cm4gY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQogCiAKICMgVGhlIGNsYXNzZXMgdGhlbXNlbHZlcwpAQCAtMzY2LDcgKzM2NSw3IEBACiAgICAgICAgIGlmIGlzX2Nvbm5lY3RlZCgpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucXVpdCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBpc19jb25uZWN0ZWQoKToKQEAgLTk1Niw3ICs5NTUsNyBAQAogICAgICAgICAgICAgICAgIGlmIGF1dGg6CiAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBhdXRoWzBdCiAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gYXV0aFsyXQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgUGVyZm9ybSBOTlRQIGF1dGhlbnRpY2F0aW9uIGlmIG5lZWRlZC4KICAgICAgICAgaWYgbm90IHVzZXI6CkBAIC0xMDA3LDcgKzEwMDYsNyBAQAogICAgICAgICAgICAgcmVzcCA9IHNlbGYuX3Nob3J0Y21kKCdTVEFSVFRMUycpCiAgICAgICAgICAgICBpZiByZXNwLnN0YXJ0c3dpdGgoJzM4MicpOgogICAgICAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBjb250ZXh0KQorICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IF9lbmNyeXB0X29uKHNlbGYuc29jaywgY29udGV4dCwgc2VsZi5ob3N0KQogICAgICAgICAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgicndiIikKICAgICAgICAgICAgICAgICBzZWxmLnRsc19vbiA9IFRydWUKICAgICAgICAgICAgICAgICAjIENhcGFiaWxpdGllcyBtYXkgY2hhbmdlIGFmdGVyIFRMUyBzdGFydHMgdXAsIHNvIGFzayBmb3IgdGhlbQpAQCAtMTA2Nyw3ICsxMDY2LDcgQEAKICAgICAgICAgICAgIGluIGRlZmF1bHQgcG9ydCBhbmQgdGhlIGBzc2xfY29udGV4dGAgYXJndW1lbnQgZm9yIFNTTCBjb25uZWN0aW9ucy4KICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dCkKLSAgICAgICAgICAgIHNlbGYuc29jayA9IF9lbmNyeXB0X29uKHNlbGYuc29jaywgc3NsX2NvbnRleHQpCisgICAgICAgICAgICBzZWxmLnNvY2sgPSBfZW5jcnlwdF9vbihzZWxmLnNvY2ssIHNzbF9jb250ZXh0LCBob3N0KQogICAgICAgICAgICAgZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgicndiIikKICAgICAgICAgICAgIF9OTlRQQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGU9cmVhZGVybW9kZSwgdGltZW91dD10aW1lb3V0KQpAQCAtMTA4Niw3ICsxMDg1LDYgQEAKICMgVGVzdCByZXRyaWV2YWwgd2hlbiBydW4gYXMgYSBzY3JpcHQuCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGltcG9ydCBhcmdwYXJzZQotICAgIGZyb20gZW1haWwudXRpbHMgaW1wb3J0IHBhcnNlZGF0ZQogCiAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IiIiXAogICAgICAgICBubnRwbGliIGJ1aWx0LWluIGRlbW8gLSBkaXNwbGF5IHRoZSBsYXRlc3QgYXJ0aWNsZXMgaW4gYSBuZXdzZ3JvdXAiIiIpCmRpZmYgLS1naXQgYS9MaWIvbnRwYXRoLnB5IGIvTGliL250cGF0aC5weQppbmRleCAzMDNlNTg2Li5hZjNmYjg3IDEwMDY0NAotLS0gYS9MaWIvbnRwYXRoLnB5CisrKyBiL0xpYi9udHBhdGgucHkKQEAgLTE3LDcgKzE3LDcgQEAKICAgICAgICAgICAgImlzbW91bnQiLCAiZXhwYW5kdXNlciIsImV4cGFuZHZhcnMiLCJub3JtcGF0aCIsImFic3BhdGgiLAogICAgICAgICAgICAic3BsaXR1bmMiLCJjdXJkaXIiLCJwYXJkaXIiLCJzZXAiLCJwYXRoc2VwIiwiZGVmcGF0aCIsImFsdHNlcCIsCiAgICAgICAgICAgICJleHRzZXAiLCJkZXZudWxsIiwicmVhbHBhdGgiLCJzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyIsInJlbHBhdGgiLAotICAgICAgICAgICAic2FtZWZpbGUiLCAic2FtZW9wZW5maWxlIixdCisgICAgICAgICAgICJzYW1lZmlsZSIsICJzYW1lb3BlbmZpbGUiLCAic2FtZXN0YXQiLF0KIAogIyBzdHJpbmdzIHJlcHJlc2VudGluZyB2YXJpb3VzIHBhdGgtcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMKICMgVGhlc2UgYXJlIHByaW1hcmlseSBmb3IgZXhwb3J0OyBpbnRlcm5hbGx5LCB0aGV5IGFyZSBoYXJkY29kZWQuCkBAIC0zMCw5ICszMCw2IEBACiBkZWZwYXRoID0gJy47QzpcXGJpbicKIGlmICdjZScgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgogICAgIGRlZnBhdGggPSAnXFxXaW5kb3dzJwotZWxpZiAnb3MyJyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgIyBPUy8yIHcvIFZBQ1BQCi0gICAgYWx0c2VwID0gJy8nCiBkZXZudWxsID0gJ251bCcKIAogZGVmIF9nZXRfZW1wdHkocGF0aCk6CkBAIC0yNjAsMTIgKzI1NywxMSBAQAogCiBkZWYgaXNsaW5rKHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLgotICAgIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBXaW5kb3dzIHByaW9yIHRvIDYuMAotICAgIGFuZCBmb3IgT1MvMi4KKyAgICBUaGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgV2luZG93cyBwcmlvciB0byA2LjAuCiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTTE5LKHN0LnN0X21vZGUpCiAKQEAgLTI3NSwyMCArMjcxLDM5IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIFRydWUgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIFdpbmRvd3NFcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKLSMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/ICBFaXRoZXIgYSByb290ICh3aXRoIG9yIHdpdGhvdXQgZHJpdmUgbGV0dGVyKQotIyBvciBhbiBVTkMgcGF0aCB3aXRoIGF0IG1vc3QgYSAvIG9yIFwgYWZ0ZXIgdGhlIG1vdW50IHBvaW50LgotCisjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PworIyBBbnkgZHJpdmUgbGV0dGVyIHJvb3QgKGVnIGM6XCkKKyMgQW55IHNoYXJlIFVOQyAoZWcgXFxzZXJ2ZXJcc2hhcmUpCisjIEFueSB2b2x1bWUgbW91bnRlZCBvbiBhIGZpbGVzeXN0ZW0gZm9sZGVyCisjCisjIE5vIG9uZSBtZXRob2QgZGV0ZWN0cyBhbGwgdGhyZWUgc2l0dWF0aW9ucy4gSGlzdG9yaWNhbGx5IHdlJ3ZlIGxleGljYWxseQorIyBkZXRlY3RlZCBkcml2ZSBsZXR0ZXIgcm9vdHMgYW5kIHNoYXJlIFVOQ3MuIFRoZSBjYW5vbmljYWwgYXBwcm9hY2ggdG8KKyMgZGV0ZWN0aW5nIG1vdW50ZWQgdm9sdW1lcyAocXVlcnlpbmcgdGhlIHJlcGFyc2UgdGFnKSBmYWlscyBmb3IgdGhlIG1vc3QKKyMgY29tbW9uIGNhc2U6IGRyaXZlIGxldHRlciByb290cy4gVGhlIGFsdGVybmF0aXZlIHdoaWNoIHVzZXMgR2V0Vm9sdW1lUGF0aE5hbWUKKyMgZmFpbHMgaWYgdGhlIGRyaXZlIGxldHRlciBpcyB0aGUgcmVzdWx0IG9mIGEgU1VCU1QuCit0cnk6CisgICAgZnJvbSBudCBpbXBvcnQgX2dldHZvbHVtZXBhdGhuYW1lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX2dldHZvbHVtZXBhdGhuYW1lID0gTm9uZQogZGVmIGlzbW91bnQocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChkZWZpbmVkIGFzIHJvb3Qgb2YgZHJpdmUpIiIiCisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChhIGRyaXZlIHJvb3QsIHRoZSByb290IG9mIGEKKyAgICBzaGFyZSwgb3IgYSBtb3VudGVkIHZvbHVtZSkiIiIKICAgICBzZXBzID0gX2dldF9ib3Roc2VwcyhwYXRoKQorICAgIHBhdGggPSBhYnNwYXRoKHBhdGgpCiAgICAgcm9vdCwgcmVzdCA9IHNwbGl0ZHJpdmUocGF0aCkKICAgICBpZiByb290IGFuZCByb290WzBdIGluIHNlcHM6CiAgICAgICAgIHJldHVybiAobm90IHJlc3QpIG9yIChyZXN0IGluIHNlcHMpCi0gICAgcmV0dXJuIHJlc3QgaW4gc2VwcworICAgIGlmIHJlc3QgaW4gc2VwczoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIF9nZXR2b2x1bWVwYXRobmFtZToKKyAgICAgICAgcmV0dXJuIHBhdGgucnN0cmlwKHNlcHMpID09IF9nZXR2b2x1bWVwYXRobmFtZShwYXRoKS5yc3RyaXAoc2VwcykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKIAogCiAjIEV4cGFuZCBwYXRocyBiZWdpbm5pbmcgd2l0aCAnficgb3IgJ351c2VyJy4KQEAgLTUzMCw3ICs1NDUsNyBAQAogICAgICAgICBpZiBwYXRoOiAjIEVtcHR5IHBhdGggbXVzdCByZXR1cm4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwYXRoID0gX2dldGZ1bGxwYXRobmFtZShwYXRoKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MgIyBCYWQgcGF0aCAtIHJldHVybiB1bmNoYW5nZWQuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6CiAgICAgICAgICAgICBwYXRoID0gb3MuZ2V0Y3dkYigpCkBAIC01OTgsMjMgKzYxMyw2IEBACiAgICAgZGVmIF9nZXRmaW5hbHBhdGhuYW1lKGYpOgogICAgICAgICByZXR1cm4gbm9ybWNhc2UoYWJzcGF0aChmKSkKIAotZGVmIHNhbWVmaWxlKGYxLCBmMik6Ci0gICAgIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIKLSAgICByZXR1cm4gX2dldGZpbmFscGF0aG5hbWUoZjEpID09IF9nZXRmaW5hbHBhdGhuYW1lKGYyKQotCi0KLXRyeToKLSAgICBmcm9tIG50IGltcG9ydCBfZ2V0ZmlsZWluZm9ybWF0aW9uCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBPbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcywganVzdCByZXR1cm4gdGhlIGZkIGFuZCBzZWUgdGhhdAotICAgICMgaXQgY29tcGFyZXMgZXF1YWwgaW4gc2FtZW9wZW5maWxlLgotICAgIGRlZiBfZ2V0ZmlsZWluZm9ybWF0aW9uKGZkKToKLSAgICAgICAgcmV0dXJuIGZkCi0KLWRlZiBzYW1lb3BlbmZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBfZ2V0ZmlsZWluZm9ybWF0aW9uKGYxKSA9PSBfZ2V0ZmlsZWluZm9ybWF0aW9uKGYyKQotCiAKIHRyeToKICAgICAjIFRoZSBnZW5lcmljcGF0aC5pc2RpciBpbXBsZW1lbnRhdGlvbiB1c2VzIG9zLnN0YXQgYW5kIGNoZWNrcyB0aGUgbW9kZQpkaWZmIC0tZ2l0IGEvTGliL250dXJsMnBhdGgucHkgYi9MaWIvbnR1cmwycGF0aC5weQppbmRleCA1MTFkY2VjLi41YTZkNDRhIDEwMDY0NAotLS0gYS9MaWIvbnR1cmwycGF0aC5weQorKysgYi9MaWIvbnR1cmwycGF0aC5weQpAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbXAgPSB1cmwuc3BsaXQoJ3wnKQogICAgIGlmIGxlbihjb21wKSAhPSAyIG9yIGNvbXBbMF1bLTFdIG5vdCBpbiBzdHJpbmcuYXNjaWlfbGV0dGVyczoKICAgICAgICAgZXJyb3IgPSAnQmFkIFVSTDogJyArIHVybAotICAgICAgICByYWlzZSBJT0Vycm9yKGVycm9yKQorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm9yKQogICAgIGRyaXZlID0gY29tcFswXVstMV0udXBwZXIoKQogICAgIGNvbXBvbmVudHMgPSBjb21wWzFdLnNwbGl0KCcvJykKICAgICBwYXRoID0gZHJpdmUgKyAnOicKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBjb21wID0gcC5zcGxpdCgnOicpCiAgICAgaWYgbGVuKGNvbXApICE9IDIgb3IgbGVuKGNvbXBbMF0pID4gMToKICAgICAgICAgZXJyb3IgPSAnQmFkIHBhdGg6ICcgKyBwCi0gICAgICAgIHJhaXNlIElPRXJyb3IoZXJyb3IpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3IpCiAKICAgICBkcml2ZSA9IHVybGxpYi5wYXJzZS5xdW90ZShjb21wWzBdLnVwcGVyKCkpCiAgICAgY29tcG9uZW50cyA9IGNvbXBbMV0uc3BsaXQoJ1xcJykKZGlmZiAtLWdpdCBhL0xpYi9vcGNvZGUucHkgYi9MaWIvb3Bjb2RlLnB5CmluZGV4IGE2MzlmZTMuLjBiZDFlZTYgMTAwNjQ0Ci0tLSBhL0xpYi9vcGNvZGUucHkKKysrIGIvTGliL29wY29kZS5weQpAQCAtOCw2ICs4LDE5IEBACiAgICAgICAgICAgICJoYXNsb2NhbCIsICJoYXNjb21wYXJlIiwgImhhc2ZyZWUiLCAib3BuYW1lIiwgIm9wbWFwIiwKICAgICAgICAgICAgIkhBVkVfQVJHVU1FTlQiLCAiRVhURU5ERURfQVJHIiwgImhhc25hcmdzIl0KIAorIyBJdCdzIGEgY2hpY2tlbi1hbmQtZWdnIEknbSBhZnJhaWQ6CisjIFdlJ3JlIGltcG9ydGVkIGJlZm9yZSBfb3Bjb2RlJ3MgbWFkZS4KKyMgV2l0aCBleGNlcHRpb24gdW5oZWVkZWQKKyMgKHN0YWNrX2VmZmVjdCBpcyBub3QgbmVlZGVkKQorIyBCb3RoIG91ciBjaGlja2VucyBhbmQgZWdncyBhcmUgYWxsYXllZC4KKyMgICAgIC0tTGFycnkgSGFzdGluZ3MsIDIwMTMvMTEvMjMKKwordHJ5OgorICAgIGZyb20gX29wY29kZSBpbXBvcnQgc3RhY2tfZWZmZWN0CisgICAgX19hbGxfXy5hcHBlbmQoJ3N0YWNrX2VmZmVjdCcpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCiBjbXBfb3AgPSAoJzwnLCAnPD0nLCAnPT0nLCAnIT0nLCAnPicsICc+PScsICdpbicsICdub3QgaW4nLCAnaXMnLAogICAgICAgICAnaXMgbm90JywgJ2V4Y2VwdGlvbiBtYXRjaCcsICdCQUQnKQogCkBAIC04NCw3ICs5Nyw2IEBACiBkZWZfb3AoJ0JJTkFSWV9PUicsIDY2KQogZGVmX29wKCdJTlBMQUNFX1BPV0VSJywgNjcpCiBkZWZfb3AoJ0dFVF9JVEVSJywgNjgpCi1kZWZfb3AoJ1NUT1JFX0xPQ0FMUycsIDY5KQogCiBkZWZfb3AoJ1BSSU5UX0VYUFInLCA3MCkKIGRlZl9vcCgnTE9BRF9CVUlMRF9DTEFTUycsIDcxKQpAQCAtMTc5LDYgKzE5MSw5IEBACiBkZWZfb3AoJ1NFVF9BREQnLCAxNDYpCiBkZWZfb3AoJ01BUF9BREQnLCAxNDcpCiAKK2RlZl9vcCgnTE9BRF9DTEFTU0RFUkVGJywgMTQ4KQoraGFzZnJlZS5hcHBlbmQoMTQ4KQorCiBkZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0NCkKIEVYVEVOREVEX0FSRyA9IDE0NAogCmRpZmYgLS1naXQgYS9MaWIvb3BlcmF0b3IucHkgYi9MaWIvb3BlcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwMzQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9vcGVyYXRvci5weQpAQCAtMCwwICsxLDQxMSBAQAorIiIiCitPcGVyYXRvciBJbnRlcmZhY2UKKworVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50cmluc2ljCitvcGVyYXRvcnMgb2YgUHl0aG9uLiAgRm9yIGV4YW1wbGUsIG9wZXJhdG9yLmFkZCh4LCB5KSBpcyBlcXVpdmFsZW50Cit0byB0aGUgZXhwcmVzc2lvbiB4K3kuICBUaGUgZnVuY3Rpb24gbmFtZXMgYXJlIHRob3NlIHVzZWQgZm9yIHNwZWNpYWwKK21ldGhvZHM7IHZhcmlhbnRzIHdpdGhvdXQgbGVhZGluZyBhbmQgdHJhaWxpbmcgJ19fJyBhcmUgYWxzbyBwcm92aWRlZAorZm9yIGNvbnZlbmllbmNlLgorCitUaGlzIGlzIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlLgorIiIiCisKK19fYWxsX18gPSBbJ2FicycsICdhZGQnLCAnYW5kXycsICdhdHRyZ2V0dGVyJywgJ2NvbmNhdCcsICdjb250YWlucycsICdjb3VudE9mJywKKyAgICAgICAgICAgJ2RlbGl0ZW0nLCAnZXEnLCAnZmxvb3JkaXYnLCAnZ2UnLCAnZ2V0aXRlbScsICdndCcsICdpYWRkJywgJ2lhbmQnLAorICAgICAgICAgICAnaWNvbmNhdCcsICdpZmxvb3JkaXYnLCAnaWxzaGlmdCcsICdpbW9kJywgJ2ltdWwnLCAnaW5kZXgnLAorICAgICAgICAgICAnaW5kZXhPZicsICdpbnYnLCAnaW52ZXJ0JywgJ2lvcicsICdpcG93JywgJ2lyc2hpZnQnLCAnaXNfJywKKyAgICAgICAgICAgJ2lzX25vdCcsICdpc3ViJywgJ2l0ZW1nZXR0ZXInLCAnaXRydWVkaXYnLCAnaXhvcicsICdsZScsCisgICAgICAgICAgICdsZW5ndGhfaGludCcsICdsc2hpZnQnLCAnbHQnLCAnbWV0aG9kY2FsbGVyJywgJ21vZCcsICdtdWwnLCAnbmUnLAorICAgICAgICAgICAnbmVnJywgJ25vdF8nLCAnb3JfJywgJ3BvcycsICdwb3cnLCAncnNoaWZ0JywgJ3NldGl0ZW0nLCAnc3ViJywKKyAgICAgICAgICAgJ3RydWVkaXYnLCAndHJ1dGgnLCAneG9yJ10KKworZnJvbSBidWlsdGlucyBpbXBvcnQgYWJzIGFzIF9hYnMKKworCisjIENvbXBhcmlzb24gT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgbHQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8IGIuIgorICAgIHJldHVybiBhIDwgYgorCitkZWYgbGUoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PSBiLiIKKyAgICByZXR1cm4gYSA8PSBiCisKK2RlZiBlcShhLCBiKToKKyAgICAiU2FtZSBhcyBhID09IGIuIgorICAgIHJldHVybiBhID09IGIKKworZGVmIG5lKGEsIGIpOgorICAgICJTYW1lIGFzIGEgIT0gYi4iCisgICAgcmV0dXJuIGEgIT0gYgorCitkZWYgZ2UoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+PSBiLiIKKyAgICByZXR1cm4gYSA+PSBiCisKK2RlZiBndChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4gYi4iCisgICAgcmV0dXJuIGEgPiBiCisKKyMgTG9naWNhbCBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBub3RfKGEpOgorICAgICJTYW1lIGFzIG5vdCBhLiIKKyAgICByZXR1cm4gbm90IGEKKworZGVmIHRydXRoKGEpOgorICAgICJSZXR1cm4gVHJ1ZSBpZiBhIGlzIHRydWUsIEZhbHNlIG90aGVyd2lzZS4iCisgICAgcmV0dXJuIFRydWUgaWYgYSBlbHNlIEZhbHNlCisKK2RlZiBpc18oYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBiLiIKKyAgICByZXR1cm4gYSBpcyBiCisKK2RlZiBpc19ub3QoYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBub3QgYi4iCisgICAgcmV0dXJuIGEgaXMgbm90IGIKKworIyBNYXRoZW1hdGljYWwvQml0d2lzZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGFicyhhKToKKyAgICAiU2FtZSBhcyBhYnMoYSkuIgorICAgIHJldHVybiBfYWJzKGEpCisKK2RlZiBhZGQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIuIgorICAgIHJldHVybiBhICsgYgorCitkZWYgYW5kXyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICYgYi4iCisgICAgcmV0dXJuIGEgJiBiCisKK2RlZiBmbG9vcmRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8vIGIuIgorICAgIHJldHVybiBhIC8vIGIKKworZGVmIGluZGV4KGEpOgorICAgICJTYW1lIGFzIGEuX19pbmRleF9fKCkuIgorICAgIHJldHVybiBhLl9faW5kZXhfXygpCisKK2RlZiBpbnYoYSk6CisgICAgIlNhbWUgYXMgfmEuIgorICAgIHJldHVybiB+YQoraW52ZXJ0ID0gaW52CisKK2RlZiBsc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PCBiLiIKKyAgICByZXR1cm4gYSA8PCBiCisKK2RlZiBtb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlIGIuIgorICAgIHJldHVybiBhICUgYgorCitkZWYgbXVsKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKiBiLiIKKyAgICByZXR1cm4gYSAqIGIKKworZGVmIG5lZyhhKToKKyAgICAiU2FtZSBhcyAtYS4iCisgICAgcmV0dXJuIC1hCisKK2RlZiBvcl8oYSwgYik6CisgICAgIlNhbWUgYXMgYSB8IGIuIgorICAgIHJldHVybiBhIHwgYgorCitkZWYgcG9zKGEpOgorICAgICJTYW1lIGFzICthLiIKKyAgICByZXR1cm4gK2EKKworZGVmIHBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqIGIuIgorICAgIHJldHVybiBhICoqIGIKKworZGVmIHJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+IGIuIgorICAgIHJldHVybiBhID4+IGIKKworZGVmIHN1YihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC0gYi4iCisgICAgcmV0dXJuIGEgLSBiCisKK2RlZiB0cnVlZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLyBiLiIKKyAgICByZXR1cm4gYSAvIGIKKworZGVmIHhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF4gYi4iCisgICAgcmV0dXJuIGEgXiBiCisKKyMgU2VxdWVuY2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBjb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iCisgICAgaWYgbm90IGhhc2F0dHIoYSwgJ19fZ2V0aXRlbV9fJyk6CisgICAgICAgIG1zZyA9ICInJXMnIG9iamVjdCBjYW4ndCBiZSBjb25jYXRlbmF0ZWQiICUgdHlwZShhKS5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIHJldHVybiBhICsgYgorCitkZWYgY29udGFpbnMoYSwgYik6CisgICAgIlNhbWUgYXMgYiBpbiBhIChub3RlIHJldmVyc2VkIG9wZXJhbmRzKS4iCisgICAgcmV0dXJuIGIgaW4gYQorCitkZWYgY291bnRPZihhLCBiKToKKyAgICAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgYiBvY2N1cnMgaW4gYS4iCisgICAgY291bnQgPSAwCisgICAgZm9yIGkgaW4gYToKKyAgICAgICAgaWYgaSA9PSBiOgorICAgICAgICAgICAgY291bnQgKz0gMQorICAgIHJldHVybiBjb3VudAorCitkZWYgZGVsaXRlbShhLCBiKToKKyAgICAiU2FtZSBhcyBkZWwgYVtiXS4iCisgICAgZGVsIGFbYl0KKworZGVmIGdldGl0ZW0oYSwgYik6CisgICAgIlNhbWUgYXMgYVtiXS4iCisgICAgcmV0dXJuIGFbYl0KKworZGVmIGluZGV4T2YoYSwgYik6CisgICAgIlJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIKKyAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoYSk6CisgICAgICAgIGlmIGogPT0gYjoKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2VxdWVuY2UuaW5kZXgoeCk6IHggbm90IGluIHNlcXVlbmNlJykKKworZGVmIHNldGl0ZW0oYSwgYiwgYyk6CisgICAgIlNhbWUgYXMgYVtiXSA9IGMuIgorICAgIGFbYl0gPSBjCisKK2RlZiBsZW5ndGhfaGludChvYmosIGRlZmF1bHQ9MCk6CisgICAgIiIiCisgICAgUmV0dXJuIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gb2JqLgorICAgIFRoaXMgaXMgdXNlZnVsIGZvciBwcmVzaXppbmcgY29udGFpbmVycyB3aGVuIGJ1aWxkaW5nIGZyb20gYW4gaXRlcmFibGUuCisKKyAgICBJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIGxlbigpLCB0aGUgcmVzdWx0IHdpbGwgYmUgZXhhY3QuIE90aGVyd2lzZSwgaXQgbWF5CisgICAgb3Zlci0gb3IgdW5kZXItZXN0aW1hdGUgYnkgYW4gYXJiaXRyYXJ5IGFtb3VudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGFuCisgICAgaW50ZWdlciA+PSAwLgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKGRlZmF1bHQsIGludCk6CisgICAgICAgIG1zZyA9ICgiJyVzJyBvYmplY3QgY2Fubm90IGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIiICUKKyAgICAgICAgICAgICAgIHR5cGUoZGVmYXVsdCkuX19uYW1lX18pCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBsZW4ob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIHRyeToKKyAgICAgICAgaGludCA9IHR5cGUob2JqKS5fX2xlbmd0aF9oaW50X18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICB0cnk6CisgICAgICAgIHZhbCA9IGhpbnQob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYgdmFsIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgaW50KToKKyAgICAgICAgbXNnID0gKCdfX2xlbmd0aF9oaW50X18gbXVzdCBiZSBpbnRlZ2VyLCBub3QgJXMnICUKKyAgICAgICAgICAgICAgIHR5cGUodmFsKS5fX25hbWVfXykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiB2YWwgPCAwOgorICAgICAgICBtc2cgPSAnX19sZW5ndGhfaGludF9fKCkgc2hvdWxkIHJldHVybiA+PSAwJworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICByZXR1cm4gdmFsCisKKyMgR2VuZXJhbGl6ZWQgTG9va3VwIE9iamVjdHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2NsYXNzIGF0dHJnZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gYXR0cmlidXRlKHMpIGZyb20gaXRzIG9wZXJhbmQuCisgICAgQWZ0ZXIgZiA9IGF0dHJnZXR0ZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZS4KKyAgICBBZnRlciBnID0gYXR0cmdldHRlcignbmFtZScsICdkYXRlJyksIHRoZSBjYWxsIGcocikgcmV0dXJucyAoci5uYW1lLCByLmRhdGUpLgorICAgIEFmdGVyIGggPSBhdHRyZ2V0dGVyKCduYW1lLmZpcnN0JywgJ25hbWUubGFzdCcpLCB0aGUgY2FsbCBoKHIpIHJldHVybnMKKyAgICAoci5uYW1lLmZpcnN0LCByLm5hbWUubGFzdCkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHIsICphdHRycyk6CisgICAgICAgIGlmIG5vdCBhdHRyczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHIsIHN0cik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJykKKyAgICAgICAgICAgIG5hbWVzID0gYXR0ci5zcGxpdCgnLicpCisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ2V0dGVycyA9IHR1cGxlKG1hcChhdHRyZ2V0dGVyLCAoYXR0ciwpICsgYXR0cnMpKQorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUoZ2V0dGVyKG9iaikgZm9yIGdldHRlciBpbiBnZXR0ZXJzKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIGl0ZW1nZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gaXRlbShzKSBmcm9tIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBpdGVtZ2V0dGVyKDIpLCB0aGUgY2FsbCBmKHIpIHJldHVybnMgclsyXS4KKyAgICBBZnRlciBnID0gaXRlbWdldHRlcigyLCA1LCAzKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zIChyWzJdLCByWzVdLCByWzNdKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtLCAqaXRlbXMpOgorICAgICAgICBpZiBub3QgaXRlbXM6CisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmpbaXRlbV0KKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpdGVtcyA9IChpdGVtLCkgKyBpdGVtcworICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUob2JqW2ldIGZvciBpIGluIGl0ZW1zKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIG1ldGhvZGNhbGxlcjoKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBjYWxscyB0aGUgZ2l2ZW4gbWV0aG9kIG9uIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBtZXRob2RjYWxsZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZSgpLgorICAgIEFmdGVyIGcgPSBtZXRob2RjYWxsZXIoJ25hbWUnLCAnZGF0ZScsIGZvbz0xKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zCisgICAgci5uYW1lKCdkYXRlJywgZm9vPTEpLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgICAgICBtc2cgPSAibWV0aG9kY2FsbGVyIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgdGhlIG1ldGhvZCBuYW1lIgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgc2VsZi5fbmFtZSA9IGFyZ3NbMV0KKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3NbMjpdCisgICAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwgc2VsZi5fbmFtZSkoKnNlbGYuX2FyZ3MsICoqc2VsZi5fa3dhcmdzKQorCisjIEluLXBsYWNlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgaWFkZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICs9IGIuIgorICAgIGEgKz0gYgorICAgIHJldHVybiBhCisKK2RlZiBpYW5kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJj0gYi4iCisgICAgYSAmPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGljb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIgorICAgIGlmIG5vdCBoYXNhdHRyKGEsICdfX2dldGl0ZW1fXycpOgorICAgICAgICBtc2cgPSAiJyVzJyBvYmplY3QgY2FuJ3QgYmUgY29uY2F0ZW5hdGVkIiAlIHR5cGUoYSkuX19uYW1lX18KKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBhICs9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWZsb29yZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLy89IGIuIgorICAgIGEgLy89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWxzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhIDw8PSBiLiIKKyAgICBhIDw8PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGltb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlPSBiLiIKKyAgICBhICU9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaW11bChhLCBiKToKKyAgICAiU2FtZSBhcyBhICo9IGIuIgorICAgIGEgKj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpb3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSB8PSBiLiIKKyAgICBhIHw9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqPSBiLiIKKyAgICBhICoqPWIKKyAgICByZXR1cm4gYQorCitkZWYgaXJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+PSBiLiIKKyAgICBhID4+PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlzdWIoYSwgYik6CisgICAgIlNhbWUgYXMgYSAtPSBiLiIKKyAgICBhIC09IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXRydWVkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvPSBiLiIKKyAgICBhIC89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF49IGIuIgorICAgIGEgXj0gYgorICAgIHJldHVybiBhCisKKwordHJ5OgorICAgIGZyb20gX29wZXJhdG9yIGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBmcm9tIF9vcGVyYXRvciBpbXBvcnQgX19kb2NfXworCisjIEFsbCBvZiB0aGVzZSAiX19mdW5jX18gPSBmdW5jIiBhc3NpZ25tZW50cyBoYXZlIHRvIGhhcHBlbiBhZnRlciBpbXBvcnRpbmcKKyMgZnJvbSBfb3BlcmF0b3IgdG8gbWFrZSBzdXJlIHRoZXkncmUgc2V0IHRvIHRoZSByaWdodCBmdW5jdGlvbgorX19sdF9fID0gbHQKK19fbGVfXyA9IGxlCitfX2VxX18gPSBlcQorX19uZV9fID0gbmUKK19fZ2VfXyA9IGdlCitfX2d0X18gPSBndAorX19ub3RfXyA9IG5vdF8KK19fYWJzX18gPSBhYnMKK19fYWRkX18gPSBhZGQKK19fYW5kX18gPSBhbmRfCitfX2Zsb29yZGl2X18gPSBmbG9vcmRpdgorX19pbmRleF9fID0gaW5kZXgKK19faW52X18gPSBpbnYKK19faW52ZXJ0X18gPSBpbnZlcnQKK19fbHNoaWZ0X18gPSBsc2hpZnQKK19fbW9kX18gPSBtb2QKK19fbXVsX18gPSBtdWwKK19fbmVnX18gPSBuZWcKK19fb3JfXyA9IG9yXworX19wb3NfXyA9IHBvcworX19wb3dfXyA9IHBvdworX19yc2hpZnRfXyA9IHJzaGlmdAorX19zdWJfXyA9IHN1YgorX190cnVlZGl2X18gPSB0cnVlZGl2CitfX3hvcl9fID0geG9yCitfX2NvbmNhdF9fID0gY29uY2F0CitfX2NvbnRhaW5zX18gPSBjb250YWlucworX19kZWxpdGVtX18gPSBkZWxpdGVtCitfX2dldGl0ZW1fXyA9IGdldGl0ZW0KK19fc2V0aXRlbV9fID0gc2V0aXRlbQorX19pYWRkX18gPSBpYWRkCitfX2lhbmRfXyA9IGlhbmQKK19faWNvbmNhdF9fID0gaWNvbmNhdAorX19pZmxvb3JkaXZfXyA9IGlmbG9vcmRpdgorX19pbHNoaWZ0X18gPSBpbHNoaWZ0CitfX2ltb2RfXyA9IGltb2QKK19faW11bF9fID0gaW11bAorX19pb3JfXyA9IGlvcgorX19pcG93X18gPSBpcG93CitfX2lyc2hpZnRfXyA9IGlyc2hpZnQKK19faXN1Yl9fID0gaXN1YgorX19pdHJ1ZWRpdl9fID0gaXRydWVkaXYKK19faXhvcl9fID0gaXhvcgpkaWZmIC0tZ2l0IGEvTGliL29zLnB5IGIvTGliL29zLnB5CmluZGV4IGI0MmNjYmEuLjU1NmY1OTIgMTAwNjQ0Ci0tLSBhL0xpYi9vcy5weQorKysgYi9MaWIvb3MucHkKQEAgLTEsOSArMSw5IEBACi1yIiIiT1Mgcm91dGluZXMgZm9yIE1hYywgTlQsIG9yIFBvc2l4IGRlcGVuZGluZyBvbiB3aGF0IHN5c3RlbSB3ZSdyZSBvbi4KK3IiIiJPUyByb3V0aW5lcyBmb3IgTlQgb3IgUG9zaXggZGVwZW5kaW5nIG9uIHdoYXQgc3lzdGVtIHdlJ3JlIG9uLgogCiBUaGlzIGV4cG9ydHM6Ci0gIC0gYWxsIGZ1bmN0aW9ucyBmcm9tIHBvc2l4LCBudCwgb3MyLCBvciBjZSwgZS5nLiB1bmxpbmssIHN0YXQsIGV0Yy4KKyAgLSBhbGwgZnVuY3Rpb25zIGZyb20gcG9zaXgsIG50IG9yIGNlLCBlLmcuIHVubGluaywgc3RhdCwgZXRjLgogICAtIG9zLnBhdGggaXMgZWl0aGVyIHBvc2l4cGF0aCBvciBudHBhdGgKLSAgLSBvcy5uYW1lIGlzIGVpdGhlciAncG9zaXgnLCAnbnQnLCAnb3MyJyBvciAnY2UnLgorICAtIG9zLm5hbWUgaXMgZWl0aGVyICdwb3NpeCcsICdudCcgb3IgJ2NlJy4KICAgLSBvcy5jdXJkaXIgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAoJy4nIG9yICc6JykKICAgLSBvcy5wYXJkaXIgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwYXJlbnQgZGlyZWN0b3J5ICgnLi4nIG9yICc6OicpCiAgIC0gb3Muc2VwIGlzIHRoZSAob3IgYSBtb3N0IGNvbW1vbikgcGF0aG5hbWUgc2VwYXJhdG9yICgnLycgb3IgJzonIG9yICdcXCcpCkBAIC04MSwzMCArODEsNiBAQAogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgcGFzcwogCi1lbGlmICdvczInIGluIF9uYW1lczoKLSAgICBuYW1lID0gJ29zMicKLSAgICBsaW5lc2VwID0gJ1xyXG4nCi0gICAgZnJvbSBvczIgaW1wb3J0ICoKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gb3MyIGltcG9ydCBfZXhpdAotICAgICAgICBfX2FsbF9fLmFwcGVuZCgnX2V4aXQnKQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGlmIHN5cy52ZXJzaW9uLmZpbmQoJ0VNWCBHQ0MnKSA9PSAtMToKLSAgICAgICAgaW1wb3J0IG50cGF0aCBhcyBwYXRoCi0gICAgZWxzZToKLSAgICAgICAgaW1wb3J0IG9zMmVteHBhdGggYXMgcGF0aAotICAgICAgICBmcm9tIF9lbXhfbGluayBpbXBvcnQgbGluawotCi0gICAgaW1wb3J0IG9zMgotICAgIF9fYWxsX18uZXh0ZW5kKF9nZXRfZXhwb3J0c19saXN0KG9zMikpCi0gICAgZGVsIG9zMgotCi0gICAgdHJ5OgotICAgICAgICBmcm9tIG9zMiBpbXBvcnQgX2hhdmVfZnVuY3Rpb25zCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0KIGVsaWYgJ2NlJyBpbiBfbmFtZXM6CiAgICAgbmFtZSA9ICdjZScKICAgICBsaW5lc2VwID0gJ1xyXG4nCkBAIC0yMzQsNyArMjEwLDcgQEAKICMgKEluc3BpcmVkIGJ5IEVyaWMgUmF5bW9uZDsgdGhlIGRvYyBzdHJpbmdzIGFyZSBtb3N0bHkgaGlzKQogCiBkZWYgbWFrZWRpcnMobmFtZSwgbW9kZT0wbzc3NywgZXhpc3Rfb2s9RmFsc2UpOgotICAgICIiIm1ha2VkaXJzKHBhdGggWywgbW9kZT0wbzc3N11bLCBleGlzdF9vaz1GYWxzZV0pCisgICAgIiIibWFrZWRpcnMobmFtZSBbLCBtb2RlPTBvNzc3XVssIGV4aXN0X29rPUZhbHNlXSkKIAogICAgIFN1cGVyLW1rZGlyOyBjcmVhdGUgYSBsZWFmIGRpcmVjdG9yeSBhbmQgYWxsIGludGVybWVkaWF0ZSBvbmVzLiAgV29ya3MgbGlrZQogICAgIG1rZGlyLCBleGNlcHQgdGhhdCBhbnkgaW50ZXJtZWRpYXRlIHBhdGggc2VnbWVudCAobm90IGp1c3QgdGhlIHJpZ2h0bW9zdCkKQEAgLTI0OSwxMCArMjI1LDkgQEAKICAgICBpZiBoZWFkIGFuZCB0YWlsIGFuZCBub3QgcGF0aC5leGlzdHMoaGVhZCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VkaXJzKGhlYWQsIG1vZGUsIGV4aXN0X29rKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgogICAgICAgICAgICAgIyBiZSBoYXBweSBpZiBzb21lb25lIGFscmVhZHkgY3JlYXRlZCB0aGUgcGF0aAotICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgY2RpciA9IGN1cmRpcgogICAgICAgICBpZiBpc2luc3RhbmNlKHRhaWwsIGJ5dGVzKToKICAgICAgICAgICAgIGNkaXIgPSBieXRlcyhjdXJkaXIsICdBU0NJSScpCkBAIC0yNjUsNyArMjQwLDcgQEAKICAgICAgICAgICAgIHJhaXNlCiAKIGRlZiByZW1vdmVkaXJzKG5hbWUpOgotICAgICIiInJlbW92ZWRpcnMocGF0aCkKKyAgICAiIiJyZW1vdmVkaXJzKG5hbWUpCiAKICAgICBTdXBlci1ybWRpcjsgcmVtb3ZlIGEgbGVhZiBkaXJlY3RvcnkgYW5kIGFsbCBlbXB0eSBpbnRlcm1lZGlhdGUKICAgICBvbmVzLiAgV29ya3MgbGlrZSBybWRpciBleGNlcHQgdGhhdCwgaWYgdGhlIGxlYWYgZGlyZWN0b3J5IGlzCkBAIC0yODIsNyArMjU3LDcgQEAKICAgICB3aGlsZSBoZWFkIGFuZCB0YWlsOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBybWRpcihoZWFkKQotICAgICAgICBleGNlcHQgZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaGVhZCwgdGFpbCA9IHBhdGguc3BsaXQoaGVhZCkKIApAQCAtMzA5LDcgKzI4NCw3IEBACiAgICAgaWYgaGVhZCBhbmQgdGFpbDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVtb3ZlZGlycyhoZWFkKQotICAgICAgICBleGNlcHQgZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiBfX2FsbF9fLmV4dGVuZChbIm1ha2VkaXJzIiwgInJlbW92ZWRpcnMiLCAicmVuYW1lcyJdKQpAQCAtMzM3LDE1ICszMTIsMTYgQEAKIAogICAgIFdoZW4gdG9wZG93biBpcyB0cnVlLCB0aGUgY2FsbGVyIGNhbiBtb2RpZnkgdGhlIGRpcm5hbWVzIGxpc3QgaW4tcGxhY2UKICAgICAoZS5nLiwgdmlhIGRlbCBvciBzbGljZSBhc3NpZ25tZW50KSwgYW5kIHdhbGsgd2lsbCBvbmx5IHJlY3Vyc2UgaW50byB0aGUKLSAgICBzdWJkaXJlY3RvcmllcyB3aG9zZSBuYW1lcyByZW1haW4gaW4gZGlybmFtZXM7IHRoaXMgY2FuIGJlIHVzZWQgdG8gcHJ1bmUKLSAgICB0aGUgc2VhcmNoLCBvciB0byBpbXBvc2UgYSBzcGVjaWZpYyBvcmRlciBvZiB2aXNpdGluZy4gIE1vZGlmeWluZwotICAgIGRpcm5hbWVzIHdoZW4gdG9wZG93biBpcyBmYWxzZSBpcyBpbmVmZmVjdGl2ZSwgc2luY2UgdGhlIGRpcmVjdG9yaWVzIGluCi0gICAgZGlybmFtZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkIGJ5IHRoZSB0aW1lIGRpcm5hbWVzIGl0c2VsZiBpcwotICAgIGdlbmVyYXRlZC4KKyAgICBzdWJkaXJlY3RvcmllcyB3aG9zZSBuYW1lcyByZW1haW4gaW4gZGlybmFtZXM7IHRoaXMgY2FuIGJlIHVzZWQgdG8gcHJ1bmUgdGhlCisgICAgc2VhcmNoLCBvciB0byBpbXBvc2UgYSBzcGVjaWZpYyBvcmRlciBvZiB2aXNpdGluZy4gIE1vZGlmeWluZyBkaXJuYW1lcyB3aGVuCisgICAgdG9wZG93biBpcyBmYWxzZSBpcyBpbmVmZmVjdGl2ZSwgc2luY2UgdGhlIGRpcmVjdG9yaWVzIGluIGRpcm5hbWVzIGhhdmUKKyAgICBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkIGJ5IHRoZSB0aW1lIGRpcm5hbWVzIGl0c2VsZiBpcyBnZW5lcmF0ZWQuIE5vIG1hdHRlcgorICAgIHRoZSB2YWx1ZSBvZiB0b3Bkb3duLCB0aGUgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyBpcyByZXRyaWV2ZWQgYmVmb3JlIHRoZQorICAgIHR1cGxlcyBmb3IgdGhlIGRpcmVjdG9yeSBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzIGFyZSBnZW5lcmF0ZWQuCiAKICAgICBCeSBkZWZhdWx0IGVycm9ycyBmcm9tIHRoZSBvcy5saXN0ZGlyKCkgY2FsbCBhcmUgaWdub3JlZC4gIElmCiAgICAgb3B0aW9uYWwgYXJnICdvbmVycm9yJyBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uOyBpdAotICAgIHdpbGwgYmUgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50LCBhbiBvcy5lcnJvciBpbnN0YW5jZS4gIEl0IGNhbgorICAgIHdpbGwgYmUgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50LCBhbiBPU0Vycm9yIGluc3RhbmNlLiAgSXQgY2FuCiAgICAgcmVwb3J0IHRoZSBlcnJvciB0byBjb250aW51ZSB3aXRoIHRoZSB3YWxrLCBvciByYWlzZSB0aGUgZXhjZXB0aW9uCiAgICAgdG8gYWJvcnQgdGhlIHdhbGsuICBOb3RlIHRoYXQgdGhlIGZpbGVuYW1lIGlzIGF2YWlsYWJsZSBhcyB0aGUKICAgICBmaWxlbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGV4Y2VwdGlvbiBvYmplY3QuCkBAIC0zNjksNiArMzQ1LDcgQEAKICAgICAgICAgcHJpbnQoImJ5dGVzIGluIiwgbGVuKGZpbGVzKSwgIm5vbi1kaXJlY3RvcnkgZmlsZXMiKQogICAgICAgICBpZiAnQ1ZTJyBpbiBkaXJzOgogICAgICAgICAgICAgZGlycy5yZW1vdmUoJ0NWUycpICAjIGRvbid0IHZpc2l0IENWUyBkaXJlY3RvcmllcworCiAgICAgIiIiCiAKICAgICBpc2xpbmssIGpvaW4sIGlzZGlyID0gcGF0aC5pc2xpbmssIHBhdGguam9pbiwgcGF0aC5pc2RpcgpAQCAtMzc5LDEwICszNTYsMTAgQEAKICAgICAjIG1pbm9yIHJlYXNvbiB3aGVuIChzYXkpIGEgdGhvdXNhbmQgcmVhZGFibGUgZGlyZWN0b3JpZXMgYXJlIHN0aWxsCiAgICAgIyBsZWZ0IHRvIHZpc2l0LiAgVGhhdCBsb2dpYyBpcyBjb3BpZWQgaGVyZS4KICAgICB0cnk6Ci0gICAgICAgICMgTm90ZSB0aGF0IGxpc3RkaXIgYW5kIGVycm9yIGFyZSBnbG9iYWxzIGluIHRoaXMgbW9kdWxlIGR1ZQorICAgICAgICAjIE5vdGUgdGhhdCBsaXN0ZGlyIGlzIGdsb2JhbCBpbiB0aGlzIG1vZHVsZSBkdWUKICAgICAgICAgIyB0byBlYXJsaWVyIGltcG9ydC0qLgogICAgICAgICBuYW1lcyA9IGxpc3RkaXIodG9wKQotICAgIGV4Y2VwdCBlcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBpZiBvbmVycm9yIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgb25lcnJvcihlcnIpCiAgICAgICAgIHJldHVybgpAQCAtNDg0LDcgKzQ2MSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3JpZ19zdCA9IHN0YXQobmFtZSwgZGlyX2ZkPXRvcGZkLCBmb2xsb3dfc3ltbGlua3M9Zm9sbG93X3N5bWxpbmtzKQogICAgICAgICAgICAgICAgIGRpcmZkID0gb3BlbihuYW1lLCBPX1JET05MWSwgZGlyX2ZkPXRvcGZkKQotICAgICAgICAgICAgZXhjZXB0IGVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBvbmVycm9yIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBvbmVycm9yKGVycikKICAgICAgICAgICAgICAgICByZXR1cm4KQEAgLTU3OSw3ICs1NTYsNyBAQAogICAgICAgICBmdWxsbmFtZSA9IHBhdGguam9pbihkaXIsIGZpbGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGV4ZWNfZnVuYyhmdWxsbmFtZSwgKmFyZ3Jlc3QpCi0gICAgICAgIGV4Y2VwdCBlcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgbGFzdF9leGMgPSBlCiAgICAgICAgICAgICB0YiA9IHN5cy5leGNfaW5mbygpWzJdCiAgICAgICAgICAgICBpZiAoZS5lcnJubyAhPSBlcnJuby5FTk9FTlQgYW5kIGUuZXJybm8gIT0gZXJybm8uRU5PVERJUgpAQCAtNjM2LDcgKzYxMyw3IEBACiAKIAogIyBDaGFuZ2UgZW52aXJvbiB0byBhdXRvbWF0aWNhbGx5IGNhbGwgcHV0ZW52KCksIHVuc2V0ZW52IGlmIHRoZXkgZXhpc3QuCi1mcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKIAogY2xhc3MgX0Vudmlyb24oTXV0YWJsZU1hcHBpbmcpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhLCBlbmNvZGVrZXksIGRlY29kZWtleSwgZW5jb2RldmFsdWUsIGRlY29kZXZhbHVlLCBwdXRlbnYsIHVuc2V0ZW52KToKQEAgLTY5NiwxNyArNjczLDE5IEBACiBleGNlcHQgTmFtZUVycm9yOgogICAgIF9wdXRlbnYgPSBsYW1iZGEga2V5LCB2YWx1ZTogTm9uZQogZWxzZToKLSAgICBfX2FsbF9fLmFwcGVuZCgicHV0ZW52IikKKyAgICBpZiAicHV0ZW52IiBub3QgaW4gX19hbGxfXzoKKyAgICAgICAgX19hbGxfXy5hcHBlbmQoInB1dGVudiIpCiAKIHRyeToKICAgICBfdW5zZXRlbnYgPSB1bnNldGVudgogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBfdW5zZXRlbnYgPSBsYW1iZGEga2V5OiBfcHV0ZW52KGtleSwgIiIpCiBlbHNlOgotICAgIF9fYWxsX18uYXBwZW5kKCJ1bnNldGVudiIpCisgICAgaWYgInVuc2V0ZW52IiBub3QgaW4gX19hbGxfXzoKKyAgICAgICAgX19hbGxfXy5hcHBlbmQoInVuc2V0ZW52IikKIAogZGVmIF9jcmVhdGVlbnZpcm9uKCk6Ci0gICAgaWYgbmFtZSBpbiAoJ29zMicsICdudCcpOgorICAgIGlmIG5hbWUgPT0gJ250JzoKICAgICAgICAgIyBXaGVyZSBFbnYgVmFyIE5hbWVzIE11c3QgQmUgVVBQRVJDQVNFCiAgICAgICAgIGRlZiBjaGVja19zdHIodmFsdWUpOgogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CkBAIC03NDYsNyArNzI1LDcgQEAKICAgICBrZXksIGRlZmF1bHQgYW5kIHRoZSByZXN1bHQgYXJlIHN0ci4iIiIKICAgICByZXR1cm4gZW52aXJvbi5nZXQoa2V5LCBkZWZhdWx0KQogCi1zdXBwb3J0c19ieXRlc19lbnZpcm9uID0gbmFtZSBub3QgaW4gKCdvczInLCAnbnQnKQorc3VwcG9ydHNfYnl0ZXNfZW52aXJvbiA9IChuYW1lICE9ICdudCcpCiBfX2FsbF9fLmV4dGVuZCgoImdldGVudiIsICJzdXBwb3J0c19ieXRlc19lbnZpcm9uIikpCiAKIGlmIHN1cHBvcnRzX2J5dGVzX2Vudmlyb246CkBAIC04NDUsNyArODI0LDcgQEAKICAgICAgICAgICAgICAgICBlbGlmIFdJRkVYSVRFRChzdHMpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gV0VYSVRTVEFUVVMoc3RzKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJOb3Qgc3RvcHBlZCwgc2lnbmFsZWQgb3IgZXhpdGVkPz8/IikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiTm90IHN0b3BwZWQsIHNpZ25hbGVkIG9yIGV4aXRlZD8/PyIpCiAKICAgICBkZWYgc3Bhd252KG1vZGUsIGZpbGUsIGFyZ3MpOgogICAgICAgICAiIiJzcGF3bnYobW9kZSwgZmlsZSwgYXJncykgLT4gaW50ZWdlcgpAQCAtODg4LDYgKzg2NywxMCBAQAogb3RoZXJ3aXNlIHJldHVybiAtU0lHLCB3aGVyZSBTSUcgaXMgdGhlIHNpZ25hbCB0aGF0IGtpbGxlZCBpdC4gIiIiCiAgICAgICAgIHJldHVybiBfc3Bhd252ZWYobW9kZSwgZmlsZSwgYXJncywgZW52LCBleGVjdnBlKQogCisKKyAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdudiIsICJzcGF3bnZlIiwgInNwYXdudnAiLCAic3Bhd252cGUiXSkKKworCiBpZiBfZXhpc3RzKCJzcGF3bnYiKToKICAgICAjIFRoZXNlIGFyZW4ndCBzdXBwbGllZCBieSB0aGUgYmFzaWMgV2luZG93cyBjb2RlCiAgICAgIyBidXQgY2FuIGJlIGVhc2lseSBpbXBsZW1lbnRlZCBpbiBQeXRob24KQEAgLTkxMyw3ICs4OTYsNyBAQAogICAgICAgICByZXR1cm4gc3Bhd252ZShtb2RlLCBmaWxlLCBhcmdzWzotMV0sIGVudikKIAogCi0gICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bnYiLCAic3Bhd252ZSIsICJzcGF3bmwiLCAic3Bhd25sZSIsXSkKKyAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdubCIsICJzcGF3bmxlIl0pCiAKIAogaWYgX2V4aXN0cygic3Bhd252cCIpOgpAQCAtOTQxLDM0ICs5MjQsOCBAQAogICAgICAgICByZXR1cm4gc3Bhd252cGUobW9kZSwgZmlsZSwgYXJnc1s6LTFdLCBlbnYpCiAKIAotICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd252cCIsICJzcGF3bnZwZSIsICJzcGF3bmxwIiwgInNwYXdubHBlIixdKQorICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd25scCIsICJzcGF3bmxwZSJdKQogCi1pbXBvcnQgY29weXJlZyBhcyBfY29weXJlZwotCi1kZWYgX21ha2Vfc3RhdF9yZXN1bHQodHVwLCBkaWN0KToKLSAgICByZXR1cm4gc3RhdF9yZXN1bHQodHVwLCBkaWN0KQotCi1kZWYgX3BpY2tsZV9zdGF0X3Jlc3VsdChzcik6Ci0gICAgKHR5cGUsIGFyZ3MpID0gc3IuX19yZWR1Y2VfXygpCi0gICAgcmV0dXJuIChfbWFrZV9zdGF0X3Jlc3VsdCwgYXJncykKLQotdHJ5OgotICAgIF9jb3B5cmVnLnBpY2tsZShzdGF0X3Jlc3VsdCwgX3BpY2tsZV9zdGF0X3Jlc3VsdCwgX21ha2Vfc3RhdF9yZXN1bHQpCi1leGNlcHQgTmFtZUVycm9yOiAjIHN0YXRfcmVzdWx0IG1heSBub3QgZXhpc3QKLSAgICBwYXNzCi0KLWRlZiBfbWFrZV9zdGF0dmZzX3Jlc3VsdCh0dXAsIGRpY3QpOgotICAgIHJldHVybiBzdGF0dmZzX3Jlc3VsdCh0dXAsIGRpY3QpCi0KLWRlZiBfcGlja2xlX3N0YXR2ZnNfcmVzdWx0KHNyKToKLSAgICAodHlwZSwgYXJncykgPSBzci5fX3JlZHVjZV9fKCkKLSAgICByZXR1cm4gKF9tYWtlX3N0YXR2ZnNfcmVzdWx0LCBhcmdzKQotCi10cnk6Ci0gICAgX2NvcHlyZWcucGlja2xlKHN0YXR2ZnNfcmVzdWx0LCBfcGlja2xlX3N0YXR2ZnNfcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgX21ha2Vfc3RhdHZmc19yZXN1bHQpCi1leGNlcHQgTmFtZUVycm9yOiAjIHN0YXR2ZnNfcmVzdWx0IG1heSBub3QgZXhpc3QKLSAgICBwYXNzCiAKICMgU3VwcGx5IG9zLnBvcGVuKCkKIGRlZiBwb3BlbihjbWQsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEpOgpkaWZmIC0tZ2l0IGEvTGliL29zMmVteHBhdGgucHkgYi9MaWIvb3MyZW14cGF0aC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjYmY4YS4uMDAwMDAwMAotLS0gYS9MaWIvb3MyZW14cGF0aC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0jIE1vZHVsZSAnb3MyZW14cGF0aCcgLS0gY29tbW9uIG9wZXJhdGlvbnMgb24gT1MvMiBwYXRobmFtZXMKLSIiIkNvbW1vbiBwYXRobmFtZSBtYW5pcHVsYXRpb25zLCBPUy8yIEVNWCB2ZXJzaW9uLgotCi1JbnN0ZWFkIG9mIGltcG9ydGluZyB0aGlzIG1vZHVsZSBkaXJlY3RseSwgaW1wb3J0IG9zIGFuZCByZWZlciB0byB0aGlzCi1tb2R1bGUgYXMgb3MucGF0aC4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzdGF0Ci1mcm9tIGdlbmVyaWNwYXRoIGltcG9ydCAqCi1mcm9tIG50cGF0aCBpbXBvcnQgKGV4cGFuZHVzZXIsIGV4cGFuZHZhcnMsIGlzYWJzLCBpc2xpbmssIHNwbGl0ZHJpdmUsCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ZXh0LCBzcGxpdCkKLQotX19hbGxfXyA9IFsibm9ybWNhc2UiLCJpc2FicyIsImpvaW4iLCJzcGxpdGRyaXZlIiwic3BsaXQiLCJzcGxpdGV4dCIsCi0gICAgICAgICAgICJiYXNlbmFtZSIsImRpcm5hbWUiLCJjb21tb25wcmVmaXgiLCJnZXRzaXplIiwiZ2V0bXRpbWUiLAotICAgICAgICAgICAiZ2V0YXRpbWUiLCJnZXRjdGltZSIsICJpc2xpbmsiLCJleGlzdHMiLCJsZXhpc3RzIiwiaXNkaXIiLCJpc2ZpbGUiLAotICAgICAgICAgICAiaXNtb3VudCIsImV4cGFuZHVzZXIiLCJleHBhbmR2YXJzIiwibm9ybXBhdGgiLCJhYnNwYXRoIiwKLSAgICAgICAgICAgInNwbGl0dW5jIiwiY3VyZGlyIiwicGFyZGlyIiwic2VwIiwicGF0aHNlcCIsImRlZnBhdGgiLCJhbHRzZXAiLAotICAgICAgICAgICAiZXh0c2VwIiwiZGV2bnVsbCIsInJlYWxwYXRoIiwic3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMiXQotCi0jIHN0cmluZ3MgcmVwcmVzZW50aW5nIHZhcmlvdXMgcGF0aC1yZWxhdGVkIGJpdHMgYW5kIHBpZWNlcwotY3VyZGlyID0gJy4nCi1wYXJkaXIgPSAnLi4nCi1leHRzZXAgPSAnLicKLXNlcCA9ICcvJwotYWx0c2VwID0gJ1xcJwotcGF0aHNlcCA9ICc7JwotZGVmcGF0aCA9ICcuO0M6XFxiaW4nCi1kZXZudWxsID0gJ251bCcKLQotIyBOb3JtYWxpemUgdGhlIGNhc2Ugb2YgYSBwYXRobmFtZSBhbmQgbWFwIHNsYXNoZXMgdG8gYmFja3NsYXNoZXMuCi0jIE90aGVyIG5vcm1hbGl6YXRpb25zIChzdWNoIGFzIG9wdGltaXppbmcgJy4uLycgYXdheSkgYXJlIG5vdCBkb25lCi0jICh0aGlzIGlzIGRvbmUgYnkgbm9ybXBhdGgpLgotCi1kZWYgbm9ybWNhc2Uocyk6Ci0gICAgIiIiTm9ybWFsaXplIGNhc2Ugb2YgcGF0aG5hbWUuCi0KLSAgICBNYWtlcyBhbGwgY2hhcmFjdGVycyBsb3dlcmNhc2UgYW5kIGFsbCBhbHRzZXBzIGludG8gc2Vwcy4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCAoYnl0ZXMsIHN0cikpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vcm1jYXNlKCkgYXJndW1lbnQgbXVzdCBiZSBzdHIgb3IgYnl0ZXMsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJ3t9JyIuZm9ybWF0KHMuX19jbGFzc19fLl9fbmFtZV9fKSkKLSAgICByZXR1cm4gcy5yZXBsYWNlKCdcXCcsICcvJykubG93ZXIoKQotCi0KLSMgSm9pbiB0d28gKG9yIG1vcmUpIHBhdGhzLgotCi1kZWYgam9pbihhLCAqcCk6Ci0gICAgIiIiSm9pbiB0d28gb3IgbW9yZSBwYXRobmFtZSBjb21wb25lbnRzLCBpbnNlcnRpbmcgc2VwIGFzIG5lZWRlZCIiIgotICAgIHBhdGggPSBhCi0gICAgZm9yIGIgaW4gcDoKLSAgICAgICAgaWYgaXNhYnMoYik6Ci0gICAgICAgICAgICBwYXRoID0gYgotICAgICAgICBlbGlmIHBhdGggPT0gJycgb3IgcGF0aFstMTpdIGluICcvXFw6JzoKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgYgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGF0aCA9IHBhdGggKyAnLycgKyBiCi0gICAgcmV0dXJuIHBhdGgKLQotCi0jIFBhcnNlIFVOQyBwYXRocwotZGVmIHNwbGl0dW5jKHApOgotICAgICIiIlNwbGl0IGEgcGF0aG5hbWUgaW50byBVTkMgbW91bnQgcG9pbnQgYW5kIHJlbGF0aXZlIHBhdGggc3BlY2lmaWVycy4KLQotICAgIFJldHVybiBhIDItdHVwbGUgKHVuYywgcmVzdCk7IGVpdGhlciBwYXJ0IG1heSBiZSBlbXB0eS4KLSAgICBJZiB1bmMgaXMgbm90IGVtcHR5LCBpdCBoYXMgdGhlIGZvcm0gJy8vaG9zdC9tb3VudCcgKG9yIHNpbWlsYXIKLSAgICB1c2luZyBiYWNrc2xhc2hlcykuICB1bmMrcmVzdCBpcyBhbHdheXMgdGhlIGlucHV0IHBhdGguCi0gICAgUGF0aHMgY29udGFpbmluZyBkcml2ZSBsZXR0ZXJzIG5ldmVyIGhhdmUgYW4gVU5DIHBhcnQuCi0gICAgIiIiCi0gICAgaWYgcFsxOjJdID09ICc6JzoKLSAgICAgICAgcmV0dXJuICcnLCBwICMgRHJpdmUgbGV0dGVyIHByZXNlbnQKLSAgICBmaXJzdFR3byA9IHBbMDoyXQotICAgIGlmIGZpcnN0VHdvID09ICcvJyAqIDIgb3IgZmlyc3RUd28gPT0gJ1xcJyAqIDI6Ci0gICAgICAgICMgaXMgYSBVTkMgcGF0aDoKLSAgICAgICAgIyB2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2diBlcXVpdmFsZW50IHRvIGRyaXZlIGxldHRlcgotICAgICAgICAjIFxcbWFjaGluZVxtb3VudHBvaW50XGRpcmVjdG9yaWVzLi4uCi0gICAgICAgICMgICAgICAgICAgIGRpcmVjdG9yeSBeXl5eXl5eXl5eXl5eXl4KLSAgICAgICAgbm9ybXAgPSBub3JtY2FzZShwKQotICAgICAgICBpbmRleCA9IG5vcm1wLmZpbmQoJy8nLCAyKQotICAgICAgICBpZiBpbmRleCA9PSAtMToKLSAgICAgICAgICAgICMjcmFpc2UgUnVudGltZUVycm9yLCAnaWxsZWdhbCBVTkMgcGF0aDogIicgKyBwICsgJyInCi0gICAgICAgICAgICByZXR1cm4gKCIiLCBwKQotICAgICAgICBpbmRleCA9IG5vcm1wLmZpbmQoJy8nLCBpbmRleCArIDEpCi0gICAgICAgIGlmIGluZGV4ID09IC0xOgotICAgICAgICAgICAgaW5kZXggPSBsZW4ocCkKLSAgICAgICAgcmV0dXJuIHBbOmluZGV4XSwgcFtpbmRleDpdCi0gICAgcmV0dXJuICcnLCBwCi0KLQotIyBSZXR1cm4gdGhlIHRhaWwgKGJhc2VuYW1lKSBwYXJ0IG9mIGEgcGF0aC4KLQotZGVmIGJhc2VuYW1lKHApOgotICAgICIiIlJldHVybnMgdGhlIGZpbmFsIGNvbXBvbmVudCBvZiBhIHBhdGhuYW1lIiIiCi0gICAgcmV0dXJuIHNwbGl0KHApWzFdCi0KLQotIyBSZXR1cm4gdGhlIGhlYWQgKGRpcm5hbWUpIHBhcnQgb2YgYSBwYXRoLgotCi1kZWYgZGlybmFtZShwKToKLSAgICAiIiJSZXR1cm5zIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IG9mIGEgcGF0aG5hbWUiIiIKLSAgICByZXR1cm4gc3BsaXQocClbMF0KLQotCi0jIGFsaWFzIGV4aXN0cyB0byBsZXhpc3RzCi1sZXhpc3RzID0gZXhpc3RzCi0KLQotIyBJcyBhIHBhdGggYSBkaXJlY3Rvcnk/Ci0KLSMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/ICBFaXRoZXIgYSByb290ICh3aXRoIG9yIHdpdGhvdXQgZHJpdmUgbGV0dGVyKQotIyBvciBhbiBVTkMgcGF0aCB3aXRoIGF0IG1vc3QgYSAvIG9yIFwgYWZ0ZXIgdGhlIG1vdW50IHBvaW50LgotCi1kZWYgaXNtb3VudChwYXRoKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgbW91bnQgcG9pbnQgKGRlZmluZWQgYXMgcm9vdCBvZiBkcml2ZSkiIiIKLSAgICB1bmMsIHJlc3QgPSBzcGxpdHVuYyhwYXRoKQotICAgIGlmIHVuYzoKLSAgICAgICAgcmV0dXJuIHJlc3QgaW4gKCIiLCAiLyIsICJcXCIpCi0gICAgcCA9IHNwbGl0ZHJpdmUocGF0aClbMV0KLSAgICByZXR1cm4gbGVuKHApID09IDEgYW5kIHBbMF0gaW4gJy9cXCcKLQotCi0jIE5vcm1hbGl6ZSBhIHBhdGgsIGUuZy4gQS8vQiwgQS8uL0IgYW5kIEEvZm9vLy4uL0IgYWxsIGJlY29tZSBBL0IuCi0KLWRlZiBub3JtcGF0aChwYXRoKToKLSAgICAiIiJOb3JtYWxpemUgcGF0aCwgZWxpbWluYXRpbmcgZG91YmxlIHNsYXNoZXMsIGV0Yy4iIiIKLSAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKLSAgICBwcmVmaXgsIHBhdGggPSBzcGxpdGRyaXZlKHBhdGgpCi0gICAgd2hpbGUgcGF0aFs6MV0gPT0gJy8nOgotICAgICAgICBwcmVmaXggPSBwcmVmaXggKyAnLycKLSAgICAgICAgcGF0aCA9IHBhdGhbMTpdCi0gICAgY29tcHMgPSBwYXRoLnNwbGl0KCcvJykKLSAgICBpID0gMAotICAgIHdoaWxlIGkgPCBsZW4oY29tcHMpOgotICAgICAgICBpZiBjb21wc1tpXSA9PSAnLic6Ci0gICAgICAgICAgICBkZWwgY29tcHNbaV0KLSAgICAgICAgZWxpZiBjb21wc1tpXSA9PSAnLi4nIGFuZCBpID4gMCBhbmQgY29tcHNbaS0xXSBub3QgaW4gKCcnLCAnLi4nKToKLSAgICAgICAgICAgIGRlbCBjb21wc1tpLTE6aSsxXQotICAgICAgICAgICAgaSA9IGkgLSAxCi0gICAgICAgIGVsaWYgY29tcHNbaV0gPT0gJycgYW5kIGkgPiAwIGFuZCBjb21wc1tpLTFdICE9ICcnOgotICAgICAgICAgICAgZGVsIGNvbXBzW2ldCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpID0gaSArIDEKLSAgICAjIElmIHRoZSBwYXRoIGlzIG5vdyBlbXB0eSwgc3Vic3RpdHV0ZSAnLicKLSAgICBpZiBub3QgcHJlZml4IGFuZCBub3QgY29tcHM6Ci0gICAgICAgIGNvbXBzLmFwcGVuZCgnLicpCi0gICAgcmV0dXJuIHByZWZpeCArICcvJy5qb2luKGNvbXBzKQotCi0KLSMgUmV0dXJuIGFuIGFic29sdXRlIHBhdGguCi1kZWYgYWJzcGF0aChwYXRoKToKLSAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHZlcnNpb24gb2YgYSBwYXRoIiIiCi0gICAgaWYgbm90IGlzYWJzKHBhdGgpOgotICAgICAgICBwYXRoID0gam9pbihvcy5nZXRjd2QoKSwgcGF0aCkKLSAgICByZXR1cm4gbm9ybXBhdGgocGF0aCkKLQotIyByZWFscGF0aCBpcyBhIG5vLW9wIG9uIHN5c3RlbXMgd2l0aG91dCBpc2xpbmsgc3VwcG9ydAotcmVhbHBhdGggPSBhYnNwYXRoCi0KLXN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gRmFsc2UKZGlmZiAtLWdpdCBhL0xpYi9wYXRobGliLnB5IGIvTGliL3BhdGhsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiNzAzMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9wYXRobGliLnB5CkBAIC0wLDAgKzEsMTI5MSBAQAoraW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbworaW1wb3J0IG50cGF0aAoraW1wb3J0IG9zCitpbXBvcnQgcG9zaXhwYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNlcXVlbmNlCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCitmcm9tIGVycm5vIGltcG9ydCBFSU5WQUwsIEVOT0VOVAorZnJvbSBvcGVyYXRvciBpbXBvcnQgYXR0cmdldHRlcgorZnJvbSBzdGF0IGltcG9ydCBTX0lTRElSLCBTX0lTTE5LLCBTX0lTUkVHLCBTX0lTU09DSywgU19JU0JMSywgU19JU0NIUiwgU19JU0ZJRk8KK2Zyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZV9mcm9tX2J5dGVzIGFzIHVybHF1b3RlX2Zyb21fYnl0ZXMKKworCitzdXBwb3J0c19zeW1saW5rcyA9IFRydWUKK3RyeToKKyAgICBpbXBvcnQgbnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBudCA9IE5vbmUKK2Vsc2U6CisgICAgaWYgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClbOjJdID49ICg2LCAwKToKKyAgICAgICAgZnJvbSBudCBpbXBvcnQgX2dldGZpbmFscGF0aG5hbWUKKyAgICBlbHNlOgorICAgICAgICBzdXBwb3J0c19zeW1saW5rcyA9IEZhbHNlCisgICAgICAgIF9nZXRmaW5hbHBhdGhuYW1lID0gTm9uZQorCisKK19fYWxsX18gPSBbCisgICAgIlB1cmVQYXRoIiwgIlB1cmVQb3NpeFBhdGgiLCAiUHVyZVdpbmRvd3NQYXRoIiwKKyAgICAiUGF0aCIsICJQb3NpeFBhdGgiLCAiV2luZG93c1BhdGgiLAorICAgIF0KKworIworIyBJbnRlcm5hbHMKKyMKKworZGVmIF9pc193aWxkY2FyZF9wYXR0ZXJuKHBhdCk6CisgICAgIyBXaGV0aGVyIHRoaXMgcGF0dGVybiBuZWVkcyBhY3R1YWwgbWF0Y2hpbmcgdXNpbmcgZm5tYXRjaCwgb3IgY2FuCisgICAgIyBiZSBsb29rZWQgdXAgZGlyZWN0bHkgYXMgYSBmaWxlLgorICAgIHJldHVybiAiKiIgaW4gcGF0IG9yICI/IiBpbiBwYXQgb3IgIlsiIGluIHBhdAorCisKK2NsYXNzIF9GbGF2b3VyKG9iamVjdCk6CisgICAgIiIiQSBmbGF2b3VyIGltcGxlbWVudHMgYSBwYXJ0aWN1bGFyIChwbGF0Zm9ybS1zcGVjaWZpYykgc2V0IG9mIHBhdGgKKyAgICBzZW1hbnRpY3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuam9pbiA9IHNlbGYuc2VwLmpvaW4KKworICAgIGRlZiBwYXJzZV9wYXJ0cyhzZWxmLCBwYXJ0cyk6CisgICAgICAgIHBhcnNlZCA9IFtdCisgICAgICAgIHNlcCA9IHNlbGYuc2VwCisgICAgICAgIGFsdHNlcCA9IHNlbGYuYWx0c2VwCisgICAgICAgIGRydiA9IHJvb3QgPSAnJworICAgICAgICBpdCA9IHJldmVyc2VkKHBhcnRzKQorICAgICAgICBmb3IgcGFydCBpbiBpdDoKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBhbHRzZXA6CisgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQucmVwbGFjZShhbHRzZXAsIHNlcCkKKyAgICAgICAgICAgIGRydiwgcm9vdCwgcmVsID0gc2VsZi5zcGxpdHJvb3QocGFydCkKKyAgICAgICAgICAgIGlmIHNlcCBpbiByZWw6CisgICAgICAgICAgICAgICAgZm9yIHggaW4gcmV2ZXJzZWQocmVsLnNwbGl0KHNlcCkpOgorICAgICAgICAgICAgICAgICAgICBpZiB4IGFuZCB4ICE9ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5hcHBlbmQoc3lzLmludGVybih4KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcmVsIGFuZCByZWwgIT0gJy4nOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWQuYXBwZW5kKHN5cy5pbnRlcm4ocmVsKSkKKyAgICAgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgICAgIGlmIG5vdCBkcnY6CisgICAgICAgICAgICAgICAgICAgICMgSWYgbm8gZHJpdmUgaXMgcHJlc2VudCwgdHJ5IHRvIGZpbmQgb25lIGluIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAjIHBhcnRzLiBUaGlzIG1ha2VzIHRoZSByZXN1bHQgb2YgcGFyc2luZyBlLmcuCisgICAgICAgICAgICAgICAgICAgICMgKCJDOiIsICIvIiwgImEiKSByZWFzb25hYmx5IGludHVpdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBzZWxmLnNwbGl0cm9vdChwYXJ0KVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZHJ2OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICBwYXJzZWQuYXBwZW5kKGRydiArIHJvb3QpCisgICAgICAgIHBhcnNlZC5yZXZlcnNlKCkKKyAgICAgICAgcmV0dXJuIGRydiwgcm9vdCwgcGFyc2VkCisKKyAgICBkZWYgam9pbl9wYXJzZWRfcGFydHMoc2VsZiwgZHJ2LCByb290LCBwYXJ0cywgZHJ2Miwgcm9vdDIsIHBhcnRzMik6CisgICAgICAgICIiIgorICAgICAgICBKb2luIHRoZSB0d28gcGF0aHMgcmVwcmVzZW50ZWQgYnkgdGhlIHJlc3BlY3RpdmUKKyAgICAgICAgKGRyaXZlLCByb290LCBwYXJ0cykgdHVwbGVzLiAgUmV0dXJuIGEgbmV3IChkcml2ZSwgcm9vdCwgcGFydHMpIHR1cGxlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcm9vdDI6CisgICAgICAgICAgICBpZiBub3QgZHJ2MiBhbmQgZHJ2OgorICAgICAgICAgICAgICAgIHJldHVybiBkcnYsIHJvb3QyLCBbZHJ2ICsgcm9vdDJdICsgcGFydHMyWzE6XQorICAgICAgICBlbGlmIGRydjI6CisgICAgICAgICAgICBpZiBkcnYyID09IGRydiBvciBzZWxmLmNhc2Vmb2xkKGRydjIpID09IHNlbGYuY2FzZWZvbGQoZHJ2KToKKyAgICAgICAgICAgICAgICAjIFNhbWUgZHJpdmUgPT4gc2Vjb25kIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgcmV0dXJuIGRydiwgcm9vdCwgcGFydHMgKyBwYXJ0czJbMTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFNlY29uZCBwYXRoIGlzIG5vbi1hbmNob3JlZCAoY29tbW9uIGNhc2UpCisgICAgICAgICAgICByZXR1cm4gZHJ2LCByb290LCBwYXJ0cyArIHBhcnRzMgorICAgICAgICByZXR1cm4gZHJ2Miwgcm9vdDIsIHBhcnRzMgorCisKK2NsYXNzIF9XaW5kb3dzRmxhdm91cihfRmxhdm91cik6CisgICAgIyBSZWZlcmVuY2UgZm9yIFdpbmRvd3MgcGF0aHMgY2FuIGJlIGZvdW5kIGF0CisgICAgIyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzNjUyNDclMjh2PXZzLjg1JTI5LmFzcHgKKworICAgIHNlcCA9ICdcXCcKKyAgICBhbHRzZXAgPSAnLycKKyAgICBoYXNfZHJ2ID0gVHJ1ZQorICAgIHBhdGhtb2QgPSBudHBhdGgKKworICAgIGlzX3N1cHBvcnRlZCA9IChudCBpcyBub3QgTm9uZSkKKworICAgIGRyaXZlX2xldHRlcnMgPSAoCisgICAgICAgIHNldChjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpICsgMSkpIHwKKyAgICAgICAgc2V0KGNocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ0EnKSwgb3JkKCdaJykgKyAxKSkKKyAgICApCisgICAgZXh0X25hbWVzcGFjZV9wcmVmaXggPSAnXFxcXD9cXCcKKworICAgIHJlc2VydmVkX25hbWVzID0gKAorICAgICAgICB7J0NPTicsICdQUk4nLCAnQVVYJywgJ05VTCd9IHwKKyAgICAgICAgeydDT00lZCcgJSBpIGZvciBpIGluIHJhbmdlKDEsIDEwKX0gfAorICAgICAgICB7J0xQVCVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoMSwgMTApfQorICAgICAgICApCisKKyAgICAjIEludGVyZXN0aW5nIGZpbmRpbmdzIGFib3V0IGV4dGVuZGVkIHBhdGhzOgorICAgICMgLSAnXFw/XGM6XGEnLCAnLy8/L2M6XGEnIGFuZCAnLy8/L2M6L2EnIGFyZSBhbGwgc3VwcG9ydGVkCisgICAgIyAgIGJ1dCAnXFw/XGM6L2EnIGlzIG5vdAorICAgICMgLSBleHRlbmRlZCBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlOyAicmVsYXRpdmUiIGV4dGVuZGVkIHBhdGhzIHdpbGwKKyAgICAjICAgZmFpbC4KKworICAgIGRlZiBzcGxpdHJvb3Qoc2VsZiwgcGFydCwgc2VwPXNlcCk6CisgICAgICAgIGZpcnN0ID0gcGFydFswOjFdCisgICAgICAgIHNlY29uZCA9IHBhcnRbMToyXQorICAgICAgICBpZiAoc2Vjb25kID09IHNlcCBhbmQgZmlyc3QgPT0gc2VwKToKKyAgICAgICAgICAgICMgWFhYIGV4dGVuZGVkIHBhdGhzIHNob3VsZCBhbHNvIGRpc2FibGUgdGhlIGNvbGxhcHNpbmcgb2YgIi4iCisgICAgICAgICAgICAjIGNvbXBvbmVudHMgKGFjY29yZGluZyB0byBNU0ROIGRvY3MpLgorICAgICAgICAgICAgcHJlZml4LCBwYXJ0ID0gc2VsZi5fc3BsaXRfZXh0ZW5kZWRfcGF0aChwYXJ0KQorICAgICAgICAgICAgZmlyc3QgPSBwYXJ0WzA6MV0KKyAgICAgICAgICAgIHNlY29uZCA9IHBhcnRbMToyXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgdGhpcmQgPSBwYXJ0WzI6M10KKyAgICAgICAgaWYgKHNlY29uZCA9PSBzZXAgYW5kIGZpcnN0ID09IHNlcCBhbmQgdGhpcmQgIT0gc2VwKToKKyAgICAgICAgICAgICMgaXMgYSBVTkMgcGF0aDoKKyAgICAgICAgICAgICMgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2IHJvb3QKKyAgICAgICAgICAgICMgXFxtYWNoaW5lXG1vdW50cG9pbnRcZGlyZWN0b3J5XGV0Y1wuLi4KKyAgICAgICAgICAgICMgICAgICAgICAgICBkaXJlY3RvcnkgXl5eXl5eXl5eXl5eXl4KKyAgICAgICAgICAgIGluZGV4ID0gcGFydC5maW5kKHNlcCwgMikKKyAgICAgICAgICAgIGlmIGluZGV4ICE9IC0xOgorICAgICAgICAgICAgICAgIGluZGV4MiA9IHBhcnQuZmluZChzZXAsIGluZGV4ICsgMSkKKyAgICAgICAgICAgICAgICAjIGEgVU5DIHBhdGggY2FuJ3QgaGF2ZSB0d28gc2xhc2hlcyBpbiBhIHJvdworICAgICAgICAgICAgICAgICMgKGFmdGVyIHRoZSBpbml0aWFsIHR3bykKKyAgICAgICAgICAgICAgICBpZiBpbmRleDIgIT0gaW5kZXggKyAxOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmRleDIgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDIgPSBsZW4ocGFydCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIHBhcnRbMTppbmRleDJdLCBzZXAsIHBhcnRbaW5kZXgyKzE6XQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRbOmluZGV4Ml0sIHNlcCwgcGFydFtpbmRleDIrMTpdCisgICAgICAgIGRydiA9IHJvb3QgPSAnJworICAgICAgICBpZiBzZWNvbmQgPT0gJzonIGFuZCBmaXJzdCBpbiBzZWxmLmRyaXZlX2xldHRlcnM6CisgICAgICAgICAgICBkcnYgPSBwYXJ0WzoyXQorICAgICAgICAgICAgcGFydCA9IHBhcnRbMjpdCisgICAgICAgICAgICBmaXJzdCA9IHRoaXJkCisgICAgICAgIGlmIGZpcnN0ID09IHNlcDoKKyAgICAgICAgICAgIHJvb3QgPSBmaXJzdAorICAgICAgICAgICAgcGFydCA9IHBhcnQubHN0cmlwKHNlcCkKKyAgICAgICAgcmV0dXJuIHByZWZpeCArIGRydiwgcm9vdCwgcGFydAorCisgICAgZGVmIGNhc2Vmb2xkKHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gcy5sb3dlcigpCisKKyAgICBkZWYgY2FzZWZvbGRfcGFydHMoc2VsZiwgcGFydHMpOgorICAgICAgICByZXR1cm4gW3AubG93ZXIoKSBmb3IgcCBpbiBwYXJ0c10KKworICAgIGRlZiByZXNvbHZlKHNlbGYsIHBhdGgpOgorICAgICAgICBzID0gc3RyKHBhdGgpCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldGN3ZCgpCisgICAgICAgIGlmIF9nZXRmaW5hbHBhdGhuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4dF90b19ub3JtYWwoX2dldGZpbmFscGF0aG5hbWUocykpCisgICAgICAgICMgTWVhbnMgZmFsbGJhY2sgb24gYWJzb2x1dGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfc3BsaXRfZXh0ZW5kZWRfcGF0aChzZWxmLCBzLCBleHRfcHJlZml4PWV4dF9uYW1lc3BhY2VfcHJlZml4KToKKyAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgaWYgcy5zdGFydHN3aXRoKGV4dF9wcmVmaXgpOgorICAgICAgICAgICAgcHJlZml4ID0gc1s6NF0KKyAgICAgICAgICAgIHMgPSBzWzQ6XQorICAgICAgICAgICAgaWYgcy5zdGFydHN3aXRoKCdVTkNcXCcpOgorICAgICAgICAgICAgICAgIHByZWZpeCArPSBzWzozXQorICAgICAgICAgICAgICAgIHMgPSAnXFwnICsgc1szOl0KKyAgICAgICAgcmV0dXJuIHByZWZpeCwgcworCisgICAgZGVmIF9leHRfdG9fbm9ybWFsKHNlbGYsIHMpOgorICAgICAgICAjIFR1cm4gYmFjayBhbiBleHRlbmRlZCBwYXRoIGludG8gYSBub3JtYWwgRE9TLWxpa2UgcGF0aAorICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXRfZXh0ZW5kZWRfcGF0aChzKVsxXQorCisgICAgZGVmIGlzX3Jlc2VydmVkKHNlbGYsIHBhcnRzKToKKyAgICAgICAgIyBOT1RFOiB0aGUgcnVsZXMgZm9yIHJlc2VydmVkIG5hbWVzIHNlZW0gc29tZXdoYXQgY29tcGxpY2F0ZWQKKyAgICAgICAgIyAoZS5nLiByIi4uXE5VTCIgaXMgcmVzZXJ2ZWQgYnV0IG5vdCByImZvb1xOVUwiKS4KKyAgICAgICAgIyBXZSBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiBhbmQgcmV0dXJuIFRydWUgZm9yIHBhdGhzIHdoaWNoIGFyZQorICAgICAgICAjIG5vdCBjb25zaWRlcmVkIHJlc2VydmVkIGJ5IFdpbmRvd3MuCisgICAgICAgIGlmIG5vdCBwYXJ0czoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBwYXJ0c1swXS5zdGFydHN3aXRoKCdcXFxcJyk6CisgICAgICAgICAgICAjIFVOQyBwYXRocyBhcmUgbmV2ZXIgcmVzZXJ2ZWQKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gcGFydHNbLTFdLnBhcnRpdGlvbignLicpWzBdLnVwcGVyKCkgaW4gc2VsZi5yZXNlcnZlZF9uYW1lcworCisgICAgZGVmIG1ha2VfdXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAjIFVuZGVyIFdpbmRvd3MsIGZpbGUgVVJJcyB1c2UgdGhlIFVURi04IGVuY29kaW5nLgorICAgICAgICBkcml2ZSA9IHBhdGguZHJpdmUKKyAgICAgICAgaWYgbGVuKGRyaXZlKSA9PSAyIGFuZCBkcml2ZVsxXSA9PSAnOic6CisgICAgICAgICAgICAjIEl0J3MgYSBwYXRoIG9uIGEgbG9jYWwgZHJpdmUgPT4gJ2ZpbGU6Ly8vYzovYS9iJworICAgICAgICAgICAgcmVzdCA9IHBhdGguYXNfcG9zaXgoKVsyOl0ubHN0cmlwKCcvJykKKyAgICAgICAgICAgIHJldHVybiAnZmlsZTovLy8lcy8lcycgJSAoCisgICAgICAgICAgICAgICAgZHJpdmUsIHVybHF1b3RlX2Zyb21fYnl0ZXMocmVzdC5lbmNvZGUoJ3V0Zi04JykpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJdCdzIGEgcGF0aCBvbiBhIG5ldHdvcmsgZHJpdmUgPT4gJ2ZpbGU6Ly9ob3N0L3NoYXJlL2EvYicKKyAgICAgICAgICAgIHJldHVybiAnZmlsZTonICsgdXJscXVvdGVfZnJvbV9ieXRlcyhwYXRoLmFzX3Bvc2l4KCkuZW5jb2RlKCd1dGYtOCcpKQorCisKK2NsYXNzIF9Qb3NpeEZsYXZvdXIoX0ZsYXZvdXIpOgorICAgIHNlcCA9ICcvJworICAgIGFsdHNlcCA9ICcnCisgICAgaGFzX2RydiA9IEZhbHNlCisgICAgcGF0aG1vZCA9IHBvc2l4cGF0aAorCisgICAgaXNfc3VwcG9ydGVkID0gKG9zLm5hbWUgIT0gJ250JykKKworICAgIGRlZiBzcGxpdHJvb3Qoc2VsZiwgcGFydCwgc2VwPXNlcCk6CisgICAgICAgIGlmIHBhcnQgYW5kIHBhcnRbMF0gPT0gc2VwOgorICAgICAgICAgICAgc3RyaXBwZWRfcGFydCA9IHBhcnQubHN0cmlwKHNlcCkKKyAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIFBPU0lYIHBhdGggcmVzb2x1dGlvbjoKKyAgICAgICAgICAgICMgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9iYXNlZGVmcy94YmRfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCisgICAgICAgICAgICAjICJBIHBhdGhuYW1lIHRoYXQgYmVnaW5zIHdpdGggdHdvIHN1Y2Nlc3NpdmUgc2xhc2hlcyBtYXkgYmUKKyAgICAgICAgICAgICMgaW50ZXJwcmV0ZWQgaW4gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBtYW5uZXIsIGFsdGhvdWdoIG1vcmUKKyAgICAgICAgICAgICMgdGhhbiB0d28gbGVhZGluZyBzbGFzaGVzIHNoYWxsIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUgc2xhc2giLgorICAgICAgICAgICAgaWYgbGVuKHBhcnQpIC0gbGVuKHN0cmlwcGVkX3BhcnQpID09IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnLCBzZXAgKiAyLCBzdHJpcHBlZF9wYXJ0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnJywgc2VwLCBzdHJpcHBlZF9wYXJ0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycsICcnLCBwYXJ0CisKKyAgICBkZWYgY2FzZWZvbGQoc2VsZiwgcyk6CisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgY2FzZWZvbGRfcGFydHMoc2VsZiwgcGFydHMpOgorICAgICAgICByZXR1cm4gcGFydHMKKworICAgIGRlZiByZXNvbHZlKHNlbGYsIHBhdGgpOgorICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBhY2Nlc3NvciA9IHBhdGguX2FjY2Vzc29yCisgICAgICAgIHNlZW4gPSB7fQorICAgICAgICBkZWYgX3Jlc29sdmUocGF0aCwgcmVzdCk6CisgICAgICAgICAgICBpZiByZXN0LnN0YXJ0c3dpdGgoc2VwKToKKyAgICAgICAgICAgICAgICBwYXRoID0gJycKKworICAgICAgICAgICAgZm9yIG5hbWUgaW4gcmVzdC5zcGxpdChzZXApOgorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lIG9yIG5hbWUgPT0gJy4nOgorICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgZGlyCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnLi4nOgorICAgICAgICAgICAgICAgICAgICAjIHBhcmVudCBkaXIKKyAgICAgICAgICAgICAgICAgICAgcGF0aCwgXywgXyA9IHBhdGgucnBhcnRpdGlvbihzZXApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmV3cGF0aCA9IHBhdGggKyBzZXAgKyBuYW1lCisgICAgICAgICAgICAgICAgaWYgbmV3cGF0aCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICAjIEFscmVhZHkgc2VlbiB0aGlzIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHNlZW5bbmV3cGF0aF0KKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdXNlIGNhY2hlZCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgc3ltbGluayBpcyBub3QgcmVzb2x2ZWQsIHNvIHdlIG11c3QgaGF2ZSBhIHN5bWxpbmsgbG9vcC4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTeW1saW5rIGxvb3AgZnJvbSAlciIgJSBuZXdwYXRoKQorICAgICAgICAgICAgICAgICMgUmVzb2x2ZSB0aGUgc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYWNjZXNzb3IucmVhZGxpbmsobmV3cGF0aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVJTlZBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICMgTm90IGEgc3ltbGluaworICAgICAgICAgICAgICAgICAgICBwYXRoID0gbmV3cGF0aAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlZW5bbmV3cGF0aF0gPSBOb25lICMgbm90IHJlc29sdmVkIHN5bWxpbmsKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IF9yZXNvbHZlKHBhdGgsIHRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgc2VlbltuZXdwYXRoXSA9IHBhdGggIyByZXNvbHZlZCBzeW1saW5rCisKKyAgICAgICAgICAgIHJldHVybiBwYXRoCisgICAgICAgICMgTk9URTogYWNjb3JkaW5nIHRvIFBPU0lYLCBnZXRjd2QoKSBjYW5ub3QgY29udGFpbiBwYXRoIGNvbXBvbmVudHMKKyAgICAgICAgIyB3aGljaCBhcmUgc3ltbGlua3MuCisgICAgICAgIGJhc2UgPSAnJyBpZiBwYXRoLmlzX2Fic29sdXRlKCkgZWxzZSBvcy5nZXRjd2QoKQorICAgICAgICByZXR1cm4gX3Jlc29sdmUoYmFzZSwgc3RyKHBhdGgpKSBvciBzZXAKKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmLCBwYXJ0cyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG1ha2VfdXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAjIFdlIHJlcHJlc2VudCB0aGUgcGF0aCB1c2luZyB0aGUgbG9jYWwgZmlsZXN5c3RlbSBlbmNvZGluZywKKyAgICAgICAgIyBmb3IgcG9ydGFiaWxpdHkgdG8gb3RoZXIgYXBwbGljYXRpb25zLgorICAgICAgICBicGF0aCA9IGJ5dGVzKHBhdGgpCisgICAgICAgIHJldHVybiAnZmlsZTovLycgKyB1cmxxdW90ZV9mcm9tX2J5dGVzKGJwYXRoKQorCisKK193aW5kb3dzX2ZsYXZvdXIgPSBfV2luZG93c0ZsYXZvdXIoKQorX3Bvc2l4X2ZsYXZvdXIgPSBfUG9zaXhGbGF2b3VyKCkKKworCitjbGFzcyBfQWNjZXNzb3I6CisgICAgIiIiQW4gYWNjZXNzb3IgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgKHN5c3RlbS1zcGVjaWZpYyBvciBub3QpIHdheSBvZgorICAgIGFjY2Vzc2luZyBwYXRocyBvbiB0aGUgZmlsZXN5c3RlbS4iIiIKKworCitjbGFzcyBfTm9ybWFsQWNjZXNzb3IoX0FjY2Vzc29yKToKKworICAgIGRlZiBfd3JhcF9zdHJmdW5jKHN0cmZ1bmMpOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHN0cmZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVkKHBhdGhvYmosICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJmdW5jKHN0cihwYXRob2JqKSwgKmFyZ3MpCisgICAgICAgIHJldHVybiBzdGF0aWNtZXRob2Qod3JhcHBlZCkKKworICAgIGRlZiBfd3JhcF9iaW5hcnlfc3RyZnVuYyhzdHJmdW5jKToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhzdHJmdW5jKQorICAgICAgICBkZWYgd3JhcHBlZChwYXRob2JqQSwgcGF0aG9iakIsICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJmdW5jKHN0cihwYXRob2JqQSksIHN0cihwYXRob2JqQiksICphcmdzKQorICAgICAgICByZXR1cm4gc3RhdGljbWV0aG9kKHdyYXBwZWQpCisKKyAgICBzdGF0ID0gX3dyYXBfc3RyZnVuYyhvcy5zdGF0KQorCisgICAgbHN0YXQgPSBfd3JhcF9zdHJmdW5jKG9zLmxzdGF0KQorCisgICAgb3BlbiA9IF93cmFwX3N0cmZ1bmMob3Mub3BlbikKKworICAgIGxpc3RkaXIgPSBfd3JhcF9zdHJmdW5jKG9zLmxpc3RkaXIpCisKKyAgICBjaG1vZCA9IF93cmFwX3N0cmZ1bmMob3MuY2htb2QpCisKKyAgICBpZiBoYXNhdHRyKG9zLCAibGNobW9kIik6CisgICAgICAgIGxjaG1vZCA9IF93cmFwX3N0cmZ1bmMob3MubGNobW9kKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBsY2htb2Qoc2VsZiwgcGF0aG9iaiwgbW9kZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJsY2htb2QoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKworICAgIG1rZGlyID0gX3dyYXBfc3RyZnVuYyhvcy5ta2RpcikKKworICAgIHVubGluayA9IF93cmFwX3N0cmZ1bmMob3MudW5saW5rKQorCisgICAgcm1kaXIgPSBfd3JhcF9zdHJmdW5jKG9zLnJtZGlyKQorCisgICAgcmVuYW1lID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3MucmVuYW1lKQorCisgICAgcmVwbGFjZSA9IF93cmFwX2JpbmFyeV9zdHJmdW5jKG9zLnJlcGxhY2UpCisKKyAgICBpZiBudDoKKyAgICAgICAgaWYgc3VwcG9ydHNfc3ltbGlua3M6CisgICAgICAgICAgICBzeW1saW5rID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3Muc3ltbGluaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBzeW1saW5rKGEsIGIsIHRhcmdldF9pc19kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN5bWxpbmsoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKyAgICBlbHNlOgorICAgICAgICAjIFVuZGVyIFBPU0lYLCBvcy5zeW1saW5rKCkgdGFrZXMgdHdvIGFyZ3MKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgc3ltbGluayhhLCBiLCB0YXJnZXRfaXNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldHVybiBvcy5zeW1saW5rKHN0cihhKSwgc3RyKGIpKQorCisgICAgdXRpbWUgPSBfd3JhcF9zdHJmdW5jKG9zLnV0aW1lKQorCisgICAgIyBIZWxwZXIgZm9yIHJlc29sdmUoKQorICAgIGRlZiByZWFkbGluayhzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIG9zLnJlYWRsaW5rKHBhdGgpCisKKworX25vcm1hbF9hY2Nlc3NvciA9IF9Ob3JtYWxBY2Nlc3NvcigpCisKKworIworIyBHbG9iYmluZyBoZWxwZXJzCisjCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIF9jYWNoZWQoZnVuYyk6CisgICAgdHJ5OgorICAgICAgICBmdW5jLl9fY2FjaGVkX18KKyAgICAgICAgeWllbGQgZnVuYworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgY2FjaGUgPSB7fQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlW2FyZ3NdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWNoZVthcmdzXSA9IGZ1bmMoKmFyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIHdyYXBwZXIuX19jYWNoZWRfXyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgd3JhcHBlcgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY2FjaGUuY2xlYXIoKQorCitkZWYgX21ha2Vfc2VsZWN0b3IocGF0dGVybl9wYXJ0cyk6CisgICAgcGF0ID0gcGF0dGVybl9wYXJ0c1swXQorICAgIGNoaWxkX3BhcnRzID0gcGF0dGVybl9wYXJ0c1sxOl0KKyAgICBpZiBwYXQgPT0gJyoqJzoKKyAgICAgICAgY2xzID0gX1JlY3Vyc2l2ZVdpbGRjYXJkU2VsZWN0b3IKKyAgICBlbGlmICcqKicgaW4gcGF0OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHBhdHRlcm46ICcqKicgY2FuIG9ubHkgYmUgYW4gZW50aXJlIHBhdGggY29tcG9uZW50IikKKyAgICBlbGlmIF9pc193aWxkY2FyZF9wYXR0ZXJuKHBhdCk6CisgICAgICAgIGNscyA9IF9XaWxkY2FyZFNlbGVjdG9yCisgICAgZWxzZToKKyAgICAgICAgY2xzID0gX1ByZWNpc2VTZWxlY3RvcgorICAgIHJldHVybiBjbHMocGF0LCBjaGlsZF9wYXJ0cykKKworaWYgaGFzYXR0cihmdW5jdG9vbHMsICJscnVfY2FjaGUiKToKKyAgICBfbWFrZV9zZWxlY3RvciA9IGZ1bmN0b29scy5scnVfY2FjaGUoKShfbWFrZV9zZWxlY3RvcikKKworCitjbGFzcyBfU2VsZWN0b3I6CisgICAgIiIiQSBzZWxlY3RvciBtYXRjaGVzIGEgc3BlY2lmaWMgZ2xvYiBwYXR0ZXJuIHBhcnQgYWdhaW5zdCB0aGUgY2hpbGRyZW4KKyAgICBvZiBhIGdpdmVuIHBhdGguIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLmNoaWxkX3BhcnRzID0gY2hpbGRfcGFydHMKKyAgICAgICAgaWYgY2hpbGRfcGFydHM6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3NvciA9IF9tYWtlX3NlbGVjdG9yKGNoaWxkX3BhcnRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdWNjZXNzb3IgPSBfVGVybWluYXRpbmdTZWxlY3RvcigpCisKKyAgICBkZWYgc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgYWxsIGNoaWxkIHBhdGhzIG9mIGBwYXJlbnRfcGF0aGAgbWF0Y2hlZCBieSB0aGlzCisgICAgICAgIHNlbGVjdG9yLiAgVGhpcyBjYW4gY29udGFpbiBwYXJlbnRfcGF0aCBpdHNlbGYuIiIiCisgICAgICAgIHBhdGhfY2xzID0gdHlwZShwYXJlbnRfcGF0aCkKKyAgICAgICAgaXNfZGlyID0gcGF0aF9jbHMuaXNfZGlyCisgICAgICAgIGV4aXN0cyA9IHBhdGhfY2xzLmV4aXN0cworICAgICAgICBsaXN0ZGlyID0gcGFyZW50X3BhdGguX2FjY2Vzc29yLmxpc3RkaXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlbGVjdF9mcm9tKHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcikKKworCitjbGFzcyBfVGVybWluYXRpbmdTZWxlY3RvcjoKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgeWllbGQgcGFyZW50X3BhdGgKKworCitjbGFzcyBfUHJlY2lzZVNlbGVjdG9yKF9TZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIF9TZWxlY3Rvci5fX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cykKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcGF0aCA9IHBhcmVudF9wYXRoLl9tYWtlX2NoaWxkX3JlbHBhdGgoc2VsZi5uYW1lKQorICAgICAgICBpZiBleGlzdHMocGF0aCk6CisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLnN1Y2Nlc3Nvci5fc2VsZWN0X2Zyb20ocGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICAgICAgICAgIHlpZWxkIHAKKworCitjbGFzcyBfV2lsZGNhcmRTZWxlY3RvcihfU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdCwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLnBhdCA9IHJlLmNvbXBpbGUoZm5tYXRjaC50cmFuc2xhdGUocGF0KSkKKyAgICAgICAgX1NlbGVjdG9yLl9faW5pdF9fKHNlbGYsIGNoaWxkX3BhcnRzKQorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICBpZiBub3QgaXNfZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjZiA9IHBhcmVudF9wYXRoLl9mbGF2b3VyLmNhc2Vmb2xkCisgICAgICAgIGZvciBuYW1lIGluIGxpc3RkaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgY2FzZWZvbGRlZCA9IGNmKG5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLnBhdC5tYXRjaChjYXNlZm9sZGVkKToKKyAgICAgICAgICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChuYW1lKQorICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuc3VjY2Vzc29yLl9zZWxlY3RfZnJvbShwYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAKKworCitjbGFzcyBfUmVjdXJzaXZlV2lsZGNhcmRTZWxlY3RvcihfU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdCwgY2hpbGRfcGFydHMpOgorICAgICAgICBfU2VsZWN0b3IuX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpCisKKyAgICBkZWYgX2l0ZXJhdGVfZGlyZWN0b3JpZXMoc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgIHlpZWxkIHBhcmVudF9wYXRoCisgICAgICAgIGZvciBuYW1lIGluIGxpc3RkaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgcGF0aCA9IHBhcmVudF9wYXRoLl9tYWtlX2NoaWxkX3JlbHBhdGgobmFtZSkKKyAgICAgICAgICAgIGlmIGlzX2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLl9pdGVyYXRlX2RpcmVjdG9yaWVzKHBhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCBfY2FjaGVkKGxpc3RkaXIpIGFzIGxpc3RkaXI6CisgICAgICAgICAgICB5aWVsZGVkID0gc2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3Jfc2VsZWN0ID0gc2VsZi5zdWNjZXNzb3IuX3NlbGVjdF9mcm9tCisgICAgICAgICAgICAgICAgZm9yIHN0YXJ0aW5nX3BvaW50IGluIHNlbGYuX2l0ZXJhdGVfZGlyZWN0b3JpZXMocGFyZW50X3BhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHN1Y2Nlc3Nvcl9zZWxlY3Qoc3RhcnRpbmdfcG9pbnQsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHlpZWxkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkZWQuYWRkKHApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHlpZWxkZWQuY2xlYXIoKQorCisKKyMKKyMgUHVibGljIEFQSQorIworCitjbGFzcyBfUGF0aFBhcmVudHMoU2VxdWVuY2UpOgorICAgICIiIlRoaXMgb2JqZWN0IHByb3ZpZGVzIHNlcXVlbmNlLWxpa2UgYWNjZXNzIHRvIHRoZSBsb2dpY2FsIGFuY2VzdG9ycworICAgIG9mIGEgcGF0aC4gIERvbid0IHRyeSB0byBjb25zdHJ1Y3QgaXQgeW91cnNlbGYuIiIiCisgICAgX19zbG90c19fID0gKCdfcGF0aGNscycsICdfZHJ2JywgJ19yb290JywgJ19wYXJ0cycpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgICMgV2UgZG9uJ3Qgc3RvcmUgdGhlIGluc3RhbmNlIHRvIGF2b2lkIHJlZmVyZW5jZSBjeWNsZXMKKyAgICAgICAgc2VsZi5fcGF0aGNscyA9IHR5cGUocGF0aCkKKyAgICAgICAgc2VsZi5fZHJ2ID0gcGF0aC5fZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXRoLl9yb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGF0aC5fcGFydHMKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kcnYgb3Igc2VsZi5fcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcGFydHMpIC0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9wYXJ0cykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpZHgpOgorICAgICAgICBpZiBpZHggPCAwIG9yIGlkeCA+PSBsZW4oc2VsZik6CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKGlkeCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGhjbHMuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzWzotaWR4IC0gMV0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPHt9LnBhcmVudHM+Ii5mb3JtYXQoc2VsZi5fcGF0aGNscy5fX25hbWVfXykKKworCitjbGFzcyBQdXJlUGF0aChvYmplY3QpOgorICAgICIiIlB1cmVQYXRoIHJlcHJlc2VudHMgYSBmaWxlc3lzdGVtIHBhdGggYW5kIG9mZmVycyBvcGVyYXRpb25zIHdoaWNoCisgICAgZG9uJ3QgaW1wbHkgYW55IGFjdHVhbCBmaWxlc3lzdGVtIEkvTy4gIERlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSwKKyAgICBpbnN0YW50aWF0aW5nIGEgUHVyZVBhdGggd2lsbCByZXR1cm4gZWl0aGVyIGEgUHVyZVBvc2l4UGF0aCBvciBhCisgICAgUHVyZVdpbmRvd3NQYXRoIG9iamVjdC4gIFlvdSBjYW4gYWxzbyBpbnN0YW50aWF0ZSBlaXRoZXIgb2YgdGhlc2UgY2xhc3NlcworICAgIGRpcmVjdGx5LCByZWdhcmRsZXNzIG9mIHlvdXIgc3lzdGVtLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgKKyAgICAgICAgJ19kcnYnLCAnX3Jvb3QnLCAnX3BhcnRzJywKKyAgICAgICAgJ19zdHInLCAnX2hhc2gnLCAnX3BwYXJ0cycsICdfY2FjaGVkX2NwYXJ0cycsCisgICAgKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFB1cmVQYXRoIGZyb20gb25lIG9yIHNldmVyYWwgc3RyaW5ncyBhbmQgb3IgZXhpc3RpbmcKKyAgICAgICAgUHVyZVBhdGggb2JqZWN0cy4gIFRoZSBzdHJpbmdzIGFuZCBwYXRoIG9iamVjdHMgYXJlIGNvbWJpbmVkIHNvIGFzCisgICAgICAgIHRvIHlpZWxkIGEgY2Fub25pY2FsaXplZCBwYXRoLCB3aGljaCBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUKKyAgICAgICAgbmV3IFB1cmVQYXRoIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNscyBpcyBQdXJlUGF0aDoKKyAgICAgICAgICAgIGNscyA9IFB1cmVXaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBQdXJlUG9zaXhQYXRoCisgICAgICAgIHJldHVybiBjbHMuX2Zyb21fcGFydHMoYXJncykKKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAjIFVzaW5nIHRoZSBwYXJ0cyB0dXBsZSBoZWxwcyBzaGFyZSBpbnRlcm5lZCBwYXRoIHBhcnRzCisgICAgICAgICMgd2hlbiBwaWNrbGluZyByZWxhdGVkIHBhdGhzLgorICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCB0dXBsZShzZWxmLl9wYXJ0cykpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3BhcnNlX2FyZ3MoY2xzLCBhcmdzKToKKyAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBkb24ndCB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSwganVzdAorICAgICAgICAjIGNhbm9uaWNhbGl6ZSBzb21lIGNvbnN0cnVjdG9yIGFyZ3VtZW50cy4KKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBmb3IgYSBpbiBhcmdzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhLCBQdXJlUGF0aCk6CisgICAgICAgICAgICAgICAgcGFydHMgKz0gYS5fcGFydHMKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhLCBzdHIpOgorICAgICAgICAgICAgICAgICMgRm9yY2UtY2FzdCBzdHIgc3ViY2xhc3NlcyB0byBzdHIgKGlzc3VlICMyMTEyNykKKyAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoc3RyKGEpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgYSBwYXRoIG9yIHN0ciBvYmplY3QsIG5vdCAlciIKKyAgICAgICAgICAgICAgICAgICAgJSB0eXBlKGEpKQorICAgICAgICByZXR1cm4gY2xzLl9mbGF2b3VyLnBhcnNlX3BhcnRzKHBhcnRzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX3BhcnRzKGNscywgYXJncywgaW5pdD1UcnVlKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIGNhbGwgX3BhcnNlX2FyZ3Mgb24gdGhlIGluc3RhbmNlLCBzbyBhcyB0byBnZXQgdGhlCisgICAgICAgICMgcmlnaHQgZmxhdm91ci4KKyAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi5fZHJ2ID0gZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGFydHMKKyAgICAgICAgaWYgaW5pdDoKKyAgICAgICAgICAgIHNlbGYuX2luaXQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX3BhcnNlZF9wYXJ0cyhjbHMsIGRydiwgcm9vdCwgcGFydHMsIGluaXQ9VHJ1ZSk6CisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuX2RydiA9IGRydgorICAgICAgICBzZWxmLl9yb290ID0gcm9vdAorICAgICAgICBzZWxmLl9wYXJ0cyA9IHBhcnRzCisgICAgICAgIGlmIGluaXQ6CisgICAgICAgICAgICBzZWxmLl9pbml0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZm9ybWF0X3BhcnNlZF9wYXJ0cyhjbHMsIGRydiwgcm9vdCwgcGFydHMpOgorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBkcnYgKyByb290ICsgY2xzLl9mbGF2b3VyLmpvaW4ocGFydHNbMTpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGNscy5fZmxhdm91ci5qb2luKHBhcnRzKQorCisgICAgZGVmIF9pbml0KHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlbiBpbiBjb25jcmV0ZSBQYXRoCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfbWFrZV9jaGlsZChzZWxmLCBhcmdzKToKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX2ZsYXZvdXIuam9pbl9wYXJzZWRfcGFydHMoCisgICAgICAgICAgICBzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsIHNlbGYuX3BhcnRzLCBkcnYsIHJvb3QsIHBhcnRzKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoZHJ2LCByb290LCBwYXJ0cykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aCwgc3VpdGFibGUgZm9yCisgICAgICAgIHBhc3NpbmcgdG8gc3lzdGVtIGNhbGxzLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3N0ciA9IHNlbGYuX2Zvcm1hdF9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0cykgb3IgJy4nCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisKKyAgICBkZWYgYXNfcG9zaXgoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoIHdpdGggZm9yd2FyZCAoLykKKyAgICAgICAgc2xhc2hlcy4iIiIKKyAgICAgICAgZiA9IHNlbGYuX2ZsYXZvdXIKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKS5yZXBsYWNlKGYuc2VwLCAnLycpCisKKyAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoLiAgVGhpcyBpcyBvbmx5CisgICAgICAgIHJlY29tbWVuZGVkIHRvIHVzZSB1bmRlciBVbml4LiIiIgorICAgICAgICByZXR1cm4gb3MuZnNlbmNvZGUoc3RyKHNlbGYpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9KHshcn0pIi5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuYXNfcG9zaXgoKSkKKworICAgIGRlZiBhc191cmkoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCBhcyBhICdmaWxlJyBVUkkuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWxhdGl2ZSBwYXRoIGNhbid0IGJlIGV4cHJlc3NlZCBhcyBhIGZpbGUgVVJJIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZsYXZvdXIubWFrZV91cmkoc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfY3BhcnRzKHNlbGYpOgorICAgICAgICAjIENhY2hlZCBjYXNlZm9sZGVkIHBhcnRzLCBmb3IgaGFzaGluZyBhbmQgY29tcGFyaXNvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX2NwYXJ0cworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9jYWNoZWRfY3BhcnRzID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZF9wYXJ0cyhzZWxmLl9wYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfY3BhcnRzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID09IG90aGVyLl9jcGFydHMgYW5kIHNlbGYuX2ZsYXZvdXIgaXMgb3RoZXIuX2ZsYXZvdXIKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2gKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5faGFzaCA9IGhhc2godHVwbGUoc2VsZi5fY3BhcnRzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYXNoCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzIDwgb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA8PSBvdGhlci5fY3BhcnRzCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID4gb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA+PSBvdGhlci5fY3BhcnRzCisKKyAgICBkcml2ZSA9IHByb3BlcnR5KGF0dHJnZXR0ZXIoJ19kcnYnKSwKKyAgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJUaGUgZHJpdmUgcHJlZml4IChsZXR0ZXIgb3IgVU5DIHBhdGgpLCBpZiBhbnkuIiIiKQorCisgICAgcm9vdCA9IHByb3BlcnR5KGF0dHJnZXR0ZXIoJ19yb290JyksCisgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJUaGUgcm9vdCBvZiB0aGUgcGF0aCwgaWYgYW55LiIiIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhbmNob3Ioc2VsZik6CisgICAgICAgICIiIlRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBkcml2ZSBhbmQgcm9vdCwgb3IgJycuIiIiCisgICAgICAgIGFuY2hvciA9IHNlbGYuX2RydiArIHNlbGYuX3Jvb3QKKyAgICAgICAgcmV0dXJuIGFuY2hvcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCwgaWYgYW55LiIiIgorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gKDEgaWYgKHNlbGYuX2RydiBvciBzZWxmLl9yb290KSBlbHNlIDApOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIHJldHVybiBwYXJ0c1stMV0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWZmaXgoc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBjb21wb25lbnQncyBsYXN0IHN1ZmZpeCwgaWYgYW55LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGkgPSBuYW1lLnJmaW5kKCcuJykKKyAgICAgICAgaWYgMCA8IGkgPCBsZW4obmFtZSkgLSAxOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVbaTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWZmaXhlcyhzZWxmKToKKyAgICAgICAgIiIiQSBsaXN0IG9mIHRoZSBmaW5hbCBjb21wb25lbnQncyBzdWZmaXhlcywgaWYgYW55LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy4nKToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBuYW1lID0gbmFtZS5sc3RyaXAoJy4nKQorICAgICAgICByZXR1cm4gWycuJyArIHN1ZmZpeCBmb3Igc3VmZml4IGluIG5hbWUuc3BsaXQoJy4nKVsxOl1dCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RlbShzZWxmKToKKyAgICAgICAgIiIiVGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBtaW51cyBpdHMgbGFzdCBzdWZmaXguIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaSA9IG5hbWUucmZpbmQoJy4nKQorICAgICAgICBpZiAwIDwgaSA8IGxlbihuYW1lKSAtIDE6CisgICAgICAgICAgICByZXR1cm4gbmFtZVs6aV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgd2l0aF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcGF0aCB3aXRoIHRoZSBmaWxlIG5hbWUgY2hhbmdlZC4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYubmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGhhcyBhbiBlbXB0eSBuYW1lIiAlIChzZWxmLCkpCisgICAgICAgIGRydiwgcm9vdCwgcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChuYW1lLCkpCisgICAgICAgIGlmIChub3QgbmFtZSBvciBuYW1lWy0xXSBpbiBbc2VsZi5fZmxhdm91ci5zZXAsIHNlbGYuX2ZsYXZvdXIuYWx0c2VwXQorICAgICAgICAgICAgb3IgZHJ2IG9yIHJvb3Qgb3IgbGVuKHBhcnRzKSAhPSAxKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbmFtZSAlciIgJSAobmFtZSkpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0c1s6LTFdICsgW25hbWVdKQorCisgICAgZGVmIHdpdGhfc3VmZml4KHNlbGYsIHN1ZmZpeCk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHdpdGggdGhlIGZpbGUgc3VmZml4IGNoYW5nZWQgKG9yIGFkZGVkLCBpZiBub25lKS4iIiIKKyAgICAgICAgIyBYWFggaWYgc3VmZml4IGlzIE5vbmUsIHNob3VsZCB0aGUgY3VycmVudCBzdWZmaXggYmUgcmVtb3ZlZD8KKyAgICAgICAgZiA9IHNlbGYuX2ZsYXZvdXIKKyAgICAgICAgaWYgZi5zZXAgaW4gc3VmZml4IG9yIGYuYWx0c2VwIGFuZCBmLmFsdHNlcCBpbiBzdWZmaXg6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHN1ZmZpeCAlciIgJSAoc3VmZml4KSkKKyAgICAgICAgaWYgc3VmZml4IGFuZCBub3Qgc3VmZml4LnN0YXJ0c3dpdGgoJy4nKSBvciBzdWZmaXggPT0gJy4nOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBzdWZmaXggJXIiICUgKHN1ZmZpeCkpCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciBoYXMgYW4gZW1wdHkgbmFtZSIgJSAoc2VsZiwpKQorICAgICAgICBvbGRfc3VmZml4ID0gc2VsZi5zdWZmaXgKKyAgICAgICAgaWYgbm90IG9sZF9zdWZmaXg6CisgICAgICAgICAgICBuYW1lID0gbmFtZSArIHN1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4ob2xkX3N1ZmZpeCldICsgc3VmZml4CisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0c1s6LTFdICsgW25hbWVdKQorCisgICAgZGVmIHJlbGF0aXZlX3RvKHNlbGYsICpvdGhlcik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCB0byBhbm90aGVyIHBhdGggaWRlbnRpZmllZCBieSB0aGUgcGFzc2VkCisgICAgICAgIGFyZ3VtZW50cy4gIElmIHRoZSBvcGVyYXRpb24gaXMgbm90IHBvc3NpYmxlIChiZWNhdXNlIHRoaXMgaXMgbm90CisgICAgICAgIGEgc3VicGF0aCBvZiB0aGUgb3RoZXIgcGF0aCksIHJhaXNlIFZhbHVlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICAjIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCwgZHJpdmUgYW5kIHJvb3QgYXJlIGNvbnNpZGVyZWQKKyAgICAgICAgIyBzZXBhcmF0ZSBwYXJ0cywgaS5lLjoKKyAgICAgICAgIyAgIFBhdGgoJ2M6LycpLnJlbGF0aXZlX3RvKCdjOicpICBnaXZlcyBQYXRoKCcvJykKKyAgICAgICAgIyAgIFBhdGgoJ2M6LycpLnJlbGF0aXZlX3RvKCcvJykgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGlmIG5vdCBvdGhlcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKQorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGRydiA9IHNlbGYuX2RydgorICAgICAgICByb290ID0gc2VsZi5fcm9vdAorICAgICAgICBpZiByb290OgorICAgICAgICAgICAgYWJzX3BhcnRzID0gW2Rydiwgcm9vdF0gKyBwYXJ0c1sxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFic19wYXJ0cyA9IHBhcnRzCisgICAgICAgIHRvX2RydiwgdG9fcm9vdCwgdG9fcGFydHMgPSBzZWxmLl9wYXJzZV9hcmdzKG90aGVyKQorICAgICAgICBpZiB0b19yb290OgorICAgICAgICAgICAgdG9fYWJzX3BhcnRzID0gW3RvX2RydiwgdG9fcm9vdF0gKyB0b19wYXJ0c1sxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRvX2Fic19wYXJ0cyA9IHRvX3BhcnRzCisgICAgICAgIG4gPSBsZW4odG9fYWJzX3BhcnRzKQorICAgICAgICBjZiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGRfcGFydHMKKyAgICAgICAgaWYgKHJvb3Qgb3IgZHJ2KSBpZiBuID09IDAgZWxzZSBjZihhYnNfcGFydHNbOm5dKSAhPSBjZih0b19hYnNfcGFydHMpOgorICAgICAgICAgICAgZm9ybWF0dGVkID0gc2VsZi5fZm9ybWF0X3BhcnNlZF9wYXJ0cyh0b19kcnYsIHRvX3Jvb3QsIHRvX3BhcnRzKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigieyFyfSBkb2VzIG5vdCBzdGFydCB3aXRoIHshcn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc3RyKHNlbGYpLCBzdHIoZm9ybWF0dGVkKSkpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cygnJywgcm9vdCBpZiBuID09IDEgZWxzZSAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wYXJ0c1tuOl0pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFydHMoc2VsZik6CisgICAgICAgICIiIkFuIG9iamVjdCBwcm92aWRpbmcgc2VxdWVuY2UtbGlrZSBhY2Nlc3MgdG8gdGhlCisgICAgICAgIGNvbXBvbmVudHMgaW4gdGhlIGZpbGVzeXN0ZW0gcGF0aC4iIiIKKyAgICAgICAgIyBXZSBjYWNoZSB0aGUgdHVwbGUgdG8gYXZvaWQgYnVpbGRpbmcgYSBuZXcgb25lIGVhY2ggdGltZSAucGFydHMKKyAgICAgICAgIyBpcyBhY2Nlc3NlZC4gIFhYWCBpcyB0aGlzIG5lY2Vzc2FyeT8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BwYXJ0cworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9wcGFydHMgPSB0dXBsZShzZWxmLl9wYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcGFydHMKKworICAgIGRlZiBqb2lucGF0aChzZWxmLCAqYXJncyk6CisgICAgICAgICIiIkNvbWJpbmUgdGhpcyBwYXRoIHdpdGggb25lIG9yIHNldmVyYWwgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGEKKyAgICAgICAgbmV3IHBhdGggcmVwcmVzZW50aW5nIGVpdGhlciBhIHN1YnBhdGggKGlmIGFsbCBhcmd1bWVudHMgYXJlIHJlbGF0aXZlCisgICAgICAgIHBhdGhzKSBvciBhIHRvdGFsbHkgZGlmZmVyZW50IHBhdGggKGlmIG9uZSBvZiB0aGUgYXJndW1lbnRzIGlzCisgICAgICAgIGFuY2hvcmVkKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYWtlX2NoaWxkKGFyZ3MpCisKKyAgICBkZWYgX190cnVlZGl2X18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VfY2hpbGQoKGtleSwpKQorCisgICAgZGVmIF9fcnRydWVkaXZfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJ0cyhba2V5XSArIHNlbGYuX3BhcnRzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudChzZWxmKToKKyAgICAgICAgIiIiVGhlIGxvZ2ljYWwgcGFyZW50IG9mIHRoZSBwYXRoLiIiIgorICAgICAgICBkcnYgPSBzZWxmLl9kcnYKKyAgICAgICAgcm9vdCA9IHNlbGYuX3Jvb3QKKyAgICAgICAgcGFydHMgPSBzZWxmLl9wYXJ0cworICAgICAgICBpZiBsZW4ocGFydHMpID09IDEgYW5kIChkcnYgb3Igcm9vdCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoZHJ2LCByb290LCBwYXJ0c1s6LTFdKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudHMoc2VsZik6CisgICAgICAgICIiIkEgc2VxdWVuY2Ugb2YgdGhpcyBwYXRoJ3MgbG9naWNhbCBwYXJlbnRzLiIiIgorICAgICAgICByZXR1cm4gX1BhdGhQYXJlbnRzKHNlbGYpCisKKyAgICBkZWYgaXNfYWJzb2x1dGUoc2VsZik6CisgICAgICAgICIiIlRydWUgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUgKGhhcyBib3RoIGEgcm9vdCBhbmQsIGlmIGFwcGxpY2FibGUsCisgICAgICAgIGEgZHJpdmUpLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2ZsYXZvdXIuaGFzX2RydiBvciBib29sKHNlbGYuX2RydikKKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggY29udGFpbnMgb25lIG9mIHRoZSBzcGVjaWFsIG5hbWVzIHJlc2VydmVkCisgICAgICAgIGJ5IHRoZSBzeXN0ZW0sIGlmIGFueS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZsYXZvdXIuaXNfcmVzZXJ2ZWQoc2VsZi5fcGFydHMpCisKKyAgICBkZWYgbWF0Y2goc2VsZiwgcGF0aF9wYXR0ZXJuKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVlIGlmIHRoaXMgcGF0aCBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLgorICAgICAgICAiIiIKKyAgICAgICAgY2YgPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkCisgICAgICAgIHBhdGhfcGF0dGVybiA9IGNmKHBhdGhfcGF0dGVybikKKyAgICAgICAgZHJ2LCByb290LCBwYXRfcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChwYXRoX3BhdHRlcm4sKSkKKyAgICAgICAgaWYgbm90IHBhdF9wYXJ0czoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImVtcHR5IHBhdHRlcm4iKQorICAgICAgICBpZiBkcnYgYW5kIGRydiAhPSBjZihzZWxmLl9kcnYpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHJvb3QgYW5kIHJvb3QgIT0gY2Yoc2VsZi5fcm9vdCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcGFydHMgPSBzZWxmLl9jcGFydHMKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICBpZiBsZW4ocGF0X3BhcnRzKSAhPSBsZW4ocGFydHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcGF0X3BhcnRzID0gcGF0X3BhcnRzWzE6XQorICAgICAgICBlbGlmIGxlbihwYXRfcGFydHMpID4gbGVuKHBhcnRzKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgcGFydCwgcGF0IGluIHppcChyZXZlcnNlZChwYXJ0cyksIHJldmVyc2VkKHBhdF9wYXJ0cykpOgorICAgICAgICAgICAgaWYgbm90IGZubWF0Y2guZm5tYXRjaGNhc2UocGFydCwgcGF0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBQdXJlUG9zaXhQYXRoKFB1cmVQYXRoKToKKyAgICBfZmxhdm91ciA9IF9wb3NpeF9mbGF2b3VyCisgICAgX19zbG90c19fID0gKCkKKworCitjbGFzcyBQdXJlV2luZG93c1BhdGgoUHVyZVBhdGgpOgorICAgIF9mbGF2b3VyID0gX3dpbmRvd3NfZmxhdm91cgorICAgIF9fc2xvdHNfXyA9ICgpCisKKworIyBGaWxlc3lzdGVtLWFjY2Vzc2luZyBjbGFzc2VzCisKKworY2xhc3MgUGF0aChQdXJlUGF0aCk6CisgICAgX19zbG90c19fID0gKAorICAgICAgICAnX2FjY2Vzc29yJywKKyAgICAgICAgJ19jbG9zZWQnLAorICAgICkKKworICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgY2xzIGlzIFBhdGg6CisgICAgICAgICAgICBjbHMgPSBXaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBQb3NpeFBhdGgKKyAgICAgICAgc2VsZiA9IGNscy5fZnJvbV9wYXJ0cyhhcmdzLCBpbml0PUZhbHNlKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmxhdm91ci5pc19zdXBwb3J0ZWQ6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJjYW5ub3QgaW5zdGFudGlhdGUgJXIgb24geW91ciBzeXN0ZW0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNscy5fX25hbWVfXywpKQorICAgICAgICBzZWxmLl9pbml0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfaW5pdChzZWxmLAorICAgICAgICAgICAgICAjIFByaXZhdGUgbm9uLWNvbnN0cnVjdG9yIGFyZ3VtZW50cworICAgICAgICAgICAgICB0ZW1wbGF0ZT1Ob25lLAorICAgICAgICAgICAgICApOgorICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQorICAgICAgICBpZiB0ZW1wbGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yID0gdGVtcGxhdGUuX2FjY2Vzc29yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9hY2Nlc3NvciA9IF9ub3JtYWxfYWNjZXNzb3IKKworICAgIGRlZiBfbWFrZV9jaGlsZF9yZWxwYXRoKHNlbGYsIHBhcnQpOgorICAgICAgICAjIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHVzZWQgZm9yIGRpciB3YWxraW5nLiAgYHBhcnRgIG11c3QgYmUKKyAgICAgICAgIyBhIHNpbmdsZSBwYXJ0IHJlbGF0aXZlIHRvIHRoaXMgcGF0aC4KKyAgICAgICAgcGFydHMgPSBzZWxmLl9wYXJ0cyArIFtwYXJ0XQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LCBwYXJ0cykKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgorICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCisKKyAgICBkZWYgX3JhaXNlX2Nsb3NlZChzZWxmKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgcGF0aCIpCisKKyAgICBkZWYgX29wZW5lcihzZWxmLCBuYW1lLCBmbGFncywgbW9kZT0wbzY2Nik6CisgICAgICAgICMgQSBzdHViIGZvciB0aGUgb3BlbmVyIGFyZ3VtZW50IHRvIGJ1aWx0LWluIG9wZW4oKQorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3Iub3BlbihzZWxmLCBmbGFncywgbW9kZSkKKworICAgIGRlZiBfcmF3X29wZW4oc2VsZiwgZmxhZ3MsIG1vZGU9MG83NzcpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIGJ5IHRoaXMgcGF0aCBhbmQgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yLAorICAgICAgICBhcyBvcy5vcGVuKCkgZG9lcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmLl9hY2Nlc3Nvci5vcGVuKHNlbGYsIGZsYWdzLCBtb2RlKQorCisgICAgIyBQdWJsaWMgQVBJCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY3dkKGNscyk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgIChhcyByZXR1cm5lZCBieSBvcy5nZXRjd2QoKSkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gY2xzKG9zLmdldGN3ZCgpKQorCisgICAgZGVmIGl0ZXJkaXIoc2VsZik6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuICBEb2VzIG5vdCB5aWVsZCBhbnkKKyAgICAgICAgcmVzdWx0IGZvciB0aGUgc3BlY2lhbCBwYXRocyAnLicgYW5kICcuLicuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLl9hY2Nlc3Nvci5saXN0ZGlyKHNlbGYpOgorICAgICAgICAgICAgaWYgbmFtZSBpbiB7Jy4nLCAnLi4nfToKKyAgICAgICAgICAgICAgICAjIFlpZWxkaW5nIGEgcGF0aCBvYmplY3QgZm9yIHRoZXNlIG1ha2VzIGxpdHRsZSBzZW5zZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYWtlX2NoaWxkX3JlbHBhdGgobmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorCisgICAgZGVmIGdsb2Ioc2VsZiwgcGF0dGVybik6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciB0aGlzIHN1YnRyZWUgYW5kIHlpZWxkIGFsbCBleGlzdGluZyBmaWxlcyAob2YgYW55CisgICAgICAgIGtpbmQsIGluY2x1ZGluZyBkaXJlY3RvcmllcykgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4uCisgICAgICAgICIiIgorICAgICAgICBwYXR0ZXJuID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZChwYXR0ZXJuKQorICAgICAgICBkcnYsIHJvb3QsIHBhdHRlcm5fcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChwYXR0ZXJuLCkpCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiTm9uLXJlbGF0aXZlIHBhdHRlcm5zIGFyZSB1bnN1cHBvcnRlZCIpCisgICAgICAgIHNlbGVjdG9yID0gX21ha2Vfc2VsZWN0b3IodHVwbGUocGF0dGVybl9wYXJ0cykpCisgICAgICAgIGZvciBwIGluIHNlbGVjdG9yLnNlbGVjdF9mcm9tKHNlbGYpOgorICAgICAgICAgICAgeWllbGQgcAorCisgICAgZGVmIHJnbG9iKHNlbGYsIHBhdHRlcm4pOgorICAgICAgICAiIiJSZWN1cnNpdmVseSB5aWVsZCBhbGwgZXhpc3RpbmcgZmlsZXMgKG9mIGFueSBraW5kLCBpbmNsdWRpbmcKKyAgICAgICAgZGlyZWN0b3JpZXMpIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLCBhbnl3aGVyZSBpbiB0aGlzIHN1YnRyZWUuCisgICAgICAgICIiIgorICAgICAgICBwYXR0ZXJuID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZChwYXR0ZXJuKQorICAgICAgICBkcnYsIHJvb3QsIHBhdHRlcm5fcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChwYXR0ZXJuLCkpCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiTm9uLXJlbGF0aXZlIHBhdHRlcm5zIGFyZSB1bnN1cHBvcnRlZCIpCisgICAgICAgIHNlbGVjdG9yID0gX21ha2Vfc2VsZWN0b3IoKCIqKiIsKSArIHR1cGxlKHBhdHRlcm5fcGFydHMpKQorICAgICAgICBmb3IgcCBpbiBzZWxlY3Rvci5zZWxlY3RfZnJvbShzZWxmKToKKyAgICAgICAgICAgIHlpZWxkIHAKKworICAgIGRlZiBhYnNvbHV0ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGFuIGFic29sdXRlIHZlcnNpb24gb2YgdGhpcyBwYXRoLiAgVGhpcyBmdW5jdGlvbiB3b3JrcworICAgICAgICBldmVuIGlmIHRoZSBwYXRoIGRvZXNuJ3QgcG9pbnQgdG8gYW55dGhpbmcuCisKKyAgICAgICAgTm8gbm9ybWFsaXphdGlvbiBpcyBkb25lLCBpLmUuIGFsbCAnLicgYW5kICcuLicgd2lsbCBiZSBrZXB0IGFsb25nLgorICAgICAgICBVc2UgcmVzb2x2ZSgpIHRvIGdldCB0aGUgY2Fub25pY2FsIHBhdGggdG8gYSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgIyBYWFggdW50ZXN0ZWQgeWV0IQorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBpZiBzZWxmLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAjIEZJWE1FIHRoaXMgbXVzdCBkZWZlciB0byB0aGUgc3BlY2lmaWMgZmxhdm91ciAoYW5kLCB1bmRlciBXaW5kb3dzLAorICAgICAgICAjIHVzZSBudC5fZ2V0ZnVsbHBhdGhuYW1lKCkpCisgICAgICAgIG9iaiA9IHNlbGYuX2Zyb21fcGFydHMoW29zLmdldGN3ZCgpXSArIHNlbGYuX3BhcnRzLCBpbml0PUZhbHNlKQorICAgICAgICBvYmouX2luaXQodGVtcGxhdGU9c2VsZikKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHJlc29sdmUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIHRoZSBwYXRoIGFic29sdXRlLCByZXNvbHZpbmcgYWxsIHN5bWxpbmtzIG9uIHRoZSB3YXkgYW5kIGFsc28KKyAgICAgICAgbm9ybWFsaXppbmcgaXQgKGZvciBleGFtcGxlIHR1cm5pbmcgc2xhc2hlcyBpbnRvIGJhY2tzbGFzaGVzIHVuZGVyCisgICAgICAgIFdpbmRvd3MpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcyA9IHNlbGYuX2ZsYXZvdXIucmVzb2x2ZShzZWxmKQorICAgICAgICBpZiBzIGlzIE5vbmU6CisgICAgICAgICAgICAjIE5vIHN5bWxpbmsgcmVzb2x1dGlvbiA9PiBmb3IgY29uc2lzdGVuY3ksIHJhaXNlIGFuIGVycm9yIGlmCisgICAgICAgICAgICAjIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgZm9yYmlkZGVuCisgICAgICAgICAgICBzZWxmLnN0YXQoKQorICAgICAgICAgICAgcyA9IHN0cihzZWxmLmFic29sdXRlKCkpCisgICAgICAgICMgTm93IHdlIGhhdmUgbm8gc3ltbGlua3MgaW4gdGhlIHBhdGgsIGl0J3Mgc2FmZSB0byBub3JtYWxpemUgaXQuCisgICAgICAgIG5vcm1lZCA9IHNlbGYuX2ZsYXZvdXIucGF0aG1vZC5ub3JtcGF0aChzKQorICAgICAgICBvYmogPSBzZWxmLl9mcm9tX3BhcnRzKChub3JtZWQsKSwgaW5pdD1GYWxzZSkKKyAgICAgICAgb2JqLl9pbml0KHRlbXBsYXRlPXNlbGYpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBzdGF0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIHN0YXQoKSBzeXN0ZW0gY2FsbCBvbiB0aGlzIHBhdGgsIGxpa2UKKyAgICAgICAgb3Muc3RhdCgpIGRvZXMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3Iuc3RhdChzZWxmKQorCisgICAgZGVmIG93bmVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsb2dpbiBuYW1lIG9mIHRoZSBmaWxlIG93bmVyLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHB3ZAorICAgICAgICByZXR1cm4gcHdkLmdldHB3dWlkKHNlbGYuc3RhdCgpLnN0X3VpZCkucHdfbmFtZQorCisgICAgZGVmIGdyb3VwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBncm91cCBuYW1lIG9mIHRoZSBmaWxlIGdpZC4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBncnAKKyAgICAgICAgcmV0dXJuIGdycC5nZXRncmdpZChzZWxmLnN0YXQoKS5zdF9naWQpLmdyX25hbWUKKworICAgIGRlZiBvcGVuKHNlbGYsIG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsCisgICAgICAgICAgICAgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBPcGVuIHRoZSBmaWxlIHBvaW50ZWQgYnkgdGhpcyBwYXRoIGFuZCByZXR1cm4gYSBmaWxlIG9iamVjdCwgYXMKKyAgICAgICAgdGhlIGJ1aWx0LWluIG9wZW4oKSBmdW5jdGlvbiBkb2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIGlvLm9wZW4oc3RyKHNlbGYpLCBtb2RlLCBidWZmZXJpbmcsIGVuY29kaW5nLCBlcnJvcnMsIG5ld2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lcj1zZWxmLl9vcGVuZXIpCisKKyAgICBkZWYgdG91Y2goc2VsZiwgbW9kZT0wbzY2NiwgZXhpc3Rfb2s9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgdGhpcyBmaWxlIHdpdGggdGhlIGdpdmVuIGFjY2VzcyBtb2RlLCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgaWYgZXhpc3Rfb2s6CisgICAgICAgICAgICAjIEZpcnN0IHRyeSB0byBidW1wIG1vZGlmaWNhdGlvbiB0aW1lCisgICAgICAgICAgICAjIEltcGxlbWVudGF0aW9uIG5vdGU6IEdOVSB0b3VjaCB1c2VzIHRoZSBVVElNRV9OT1cgb3B0aW9uIG9mCisgICAgICAgICAgICAjIHRoZSB1dGltZW5zYXQoKSAvIGZ1dGltZW5zKCkgZnVuY3Rpb25zLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLnV0aW1lKHNlbGYsIE5vbmUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIEF2b2lkIGV4Y2VwdGlvbiBjaGFpbmluZworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZsYWdzID0gb3MuT19DUkVBVCB8IG9zLk9fV1JPTkxZCisgICAgICAgIGlmIG5vdCBleGlzdF9vazoKKyAgICAgICAgICAgIGZsYWdzIHw9IG9zLk9fRVhDTAorICAgICAgICBmZCA9IHNlbGYuX3Jhd19vcGVuKGZsYWdzLCBtb2RlKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgIGRlZiBta2RpcihzZWxmLCBtb2RlPTBvNzc3LCBwYXJlbnRzPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgaWYgbm90IHBhcmVudHM6CisgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLm1rZGlyKHNlbGYsIG1vZGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHNlbGYucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorCisgICAgZGVmIGNobW9kKHNlbGYsIG1vZGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgcGF0aCwgbGlrZSBvcy5jaG1vZCgpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IuY2htb2Qoc2VsZiwgbW9kZSkKKworICAgIGRlZiBsY2htb2Qoc2VsZiwgbW9kZSk6CisgICAgICAgICIiIgorICAgICAgICBMaWtlIGNobW9kKCksIGV4Y2VwdCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCB0aGUgc3ltbGluaydzCisgICAgICAgIHBlcm1pc3Npb25zIGFyZSBjaGFuZ2VkLCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5sY2htb2Qoc2VsZiwgbW9kZSkKKworICAgIGRlZiB1bmxpbmsoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgdGhpcyBmaWxlIG9yIGxpbmsuCisgICAgICAgIElmIHRoZSBwYXRoIGlzIGEgZGlyZWN0b3J5LCB1c2Ugcm1kaXIoKSBpbnN0ZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IudW5saW5rKHNlbGYpCisKKyAgICBkZWYgcm1kaXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgdGhpcyBkaXJlY3RvcnkuICBUaGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ybWRpcihzZWxmKQorCisgICAgZGVmIGxzdGF0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTGlrZSBzdGF0KCksIGV4Y2VwdCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCB0aGUgc3ltbGluaydzCisgICAgICAgIHN0YXR1cyBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCwgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLmxzdGF0KHNlbGYpCisKKyAgICBkZWYgcmVuYW1lKHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBSZW5hbWUgdGhpcyBwYXRoIHRvIHRoZSBnaXZlbiBwYXRoLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IucmVuYW1lKHNlbGYsIHRhcmdldCkKKworICAgIGRlZiByZXBsYWNlKHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBSZW5hbWUgdGhpcyBwYXRoIHRvIHRoZSBnaXZlbiBwYXRoLCBjbG9iYmVyaW5nIHRoZSBleGlzdGluZworICAgICAgICBkZXN0aW5hdGlvbiBpZiBpdCBleGlzdHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5yZXBsYWNlKHNlbGYsIHRhcmdldCkKKworICAgIGRlZiBzeW1saW5rX3RvKHNlbGYsIHRhcmdldCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIHRoaXMgcGF0aCBhIHN5bWxpbmsgcG9pbnRpbmcgdG8gdGhlIGdpdmVuIHBhdGguCisgICAgICAgIE5vdGUgdGhlIG9yZGVyIG9mIGFyZ3VtZW50cyAoc2VsZiwgdGFyZ2V0KSBpcyB0aGUgcmV2ZXJzZSBvZiBvcy5zeW1saW5rJ3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5zeW1saW5rKHRhcmdldCwgc2VsZiwgdGFyZ2V0X2lzX2RpcmVjdG9yeSkKKworICAgICMgQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBxdWVyeWluZyB0aGUgc3RhdCByZXN1bHRzCisKKyAgICBkZWYgZXhpc3RzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggZXhpc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zdGF0KCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBpc19kaXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTRElSKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19maWxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSByZWd1bGFyIGZpbGUgKGFsc28gVHJ1ZSBmb3Igc3ltbGlua3MgcG9pbnRpbmcKKyAgICAgICAgdG8gcmVndWxhciBmaWxlcykuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU1JFRyhzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfc3ltbGluayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgc3ltYm9saWMgbGluay4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTTE5LKHNlbGYubHN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19ibG9ja19kZXZpY2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIGJsb2NrIGRldmljZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTQkxLKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19jaGFyX2RldmljZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgY2hhcmFjdGVyIGRldmljZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTQ0hSKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19maWZvKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBGSUZPLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNGSUZPKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19zb2NrZXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIHNvY2tldC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTU09DSyhzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgUG9zaXhQYXRoKFBhdGgsIFB1cmVQb3NpeFBhdGgpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIFdpbmRvd3NQYXRoKFBhdGgsIFB1cmVXaW5kb3dzUGF0aCk6CisgICAgX19zbG90c19fID0gKCkKZGlmZiAtLWdpdCBhL0xpYi9wZGIucHkgYi9MaWIvcGRiLnB5CmluZGV4IDgwY2JhOWQuLjQyZTYwNWUgMTAwNzU1Ci0tLSBhL0xpYi9wZGIucHkKKysrIGIvTGliL3BkYi5weQpAQCAtOTIsMjEgKzkyLDE0IEBACiAgICAgY3JlID0gcmUuY29tcGlsZShyJ2RlZlxzKyVzXHMqWyhdJyAlIHJlLmVzY2FwZShmdW5jbmFtZSkpCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgIyBjb25zdW1lciBvZiB0aGlzIGluZm8gZXhwZWN0cyB0aGUgZmlyc3QgbGluZSB0byBiZSAxCi0gICAgbGluZW5vID0gMQotICAgIGFuc3dlciA9IE5vbmUKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICBpZiBsaW5lID09ICcnOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgY3JlLm1hdGNoKGxpbmUpOgotICAgICAgICAgICAgYW5zd2VyID0gZnVuY25hbWUsIGZpbGVuYW1lLCBsaW5lbm8KLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGxpbmVubyArPSAxCi0gICAgZnAuY2xvc2UoKQotICAgIHJldHVybiBhbnN3ZXIKKyAgICB3aXRoIGZwOgorICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShmcCwgc3RhcnQ9MSk6CisgICAgICAgICAgICBpZiBjcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmNuYW1lLCBmaWxlbmFtZSwgbGluZW5vCisgICAgcmV0dXJuIE5vbmUKIAogZGVmIGdldHNvdXJjZWxpbmVzKG9iaik6CiAgICAgbGluZXMsIGxpbmVubyA9IGluc3BlY3QuZmluZHNvdXJjZShvYmopCkBAIC0xNzAsMTIgKzE2MywxMiBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZW52SG9tZSwgIi5wZGJyYyIpKSBhcyByY0ZpbGU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYucmNMaW5lcy5leHRlbmQocmNGaWxlKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggb3BlbigiLnBkYnJjIikgYXMgcmNGaWxlOgogICAgICAgICAgICAgICAgIHNlbGYucmNMaW5lcy5leHRlbmQocmNGaWxlKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgc2VsZi5jb21tYW5kcyA9IHt9ICMgYXNzb2NpYXRlcyBhIGNvbW1hbmQgbGlzdCB0byBicmVha3BvaW50IG51bWJlcnMKQEAgLTMwNCw4ICsyOTcsMTYgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdHJhY2ViYWNrID0gZXhjX2luZm8KICAgICAgICAgZnJhbWUuZl9sb2NhbHNbJ19fZXhjZXB0aW9uX18nXSA9IGV4Y190eXBlLCBleGNfdmFsdWUKLSAgICAgICAgc2VsZi5tZXNzYWdlKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y192YWx1ZSlbLTFdLnN0cmlwKCkpCisKKyAgICAgICAgIyBBbiAnSW50ZXJuYWwgU3RvcEl0ZXJhdGlvbicgZXhjZXB0aW9uIGlzIGFuIGV4Y2VwdGlvbiBkZWJ1ZyBldmVudAorICAgICAgICAjIGlzc3VlZCBieSB0aGUgaW50ZXJwcmV0ZXIgd2hlbiBoYW5kbGluZyBhIHN1YmdlbmVyYXRvciBydW4gd2l0aAorICAgICAgICAjICd5aWVsZCBmcm9tJyBvciBhIGdlbmVyYXRvciBjb250cm9sZWQgYnkgYSBmb3IgbG9vcC4gTm8gZXhjZXB0aW9uIGhhcworICAgICAgICAjIGFjdHVhbGx5IG9jY3VyZWQgaW4gdGhpcyBjYXNlLiBUaGUgZGVidWdnZXIgdXNlcyB0aGlzIGRlYnVnIGV2ZW50IHRvCisgICAgICAgICMgc3RvcCB3aGVuIHRoZSBkZWJ1Z2dlZSBpcyByZXR1cm5pbmcgZnJvbSBzdWNoIGdlbmVyYXRvcnMuCisgICAgICAgIHByZWZpeCA9ICdJbnRlcm5hbCAnIGlmIChub3QgZXhjX3RyYWNlYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV4Y190eXBlIGlzIFN0b3BJdGVyYXRpb24pIGVsc2UgJycKKyAgICAgICAgc2VsZi5tZXNzYWdlKCclcyVzJyAlIChwcmVmaXgsCisgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV4Y190eXBlLCBleGNfdmFsdWUpWy0xXS5zdHJpcCgpKSkKICAgICAgICAgc2VsZi5pbnRlcmFjdGlvbihmcmFtZSwgZXhjX3RyYWNlYmFjaykKIAogICAgICMgR2VuZXJhbCBpbnRlcmFjdGlvbiBmdW5jdGlvbgpAQCAtNjcyLDcgKzY3Myw3IEBACiAgICAgICAgICAgICAjIG5vdyBzZXQgdGhlIGJyZWFrIHBvaW50CiAgICAgICAgICAgICBlcnIgPSBzZWxmLnNldF9icmVhayhmaWxlbmFtZSwgbGluZSwgdGVtcG9yYXJ5LCBjb25kLCBmdW5jbmFtZSkKICAgICAgICAgICAgIGlmIGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLmVycm9yKGVyciwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYnAgPSBzZWxmLmdldF9icmVha3MoZmlsZW5hbWUsIGxpbmUpWy0xXQogICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiQnJlYWtwb2ludCAlZCBhdCAlczolZCIgJQpAQCAtMTE2MywxNSArMTE2NCwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIF9yc3RyKCcqKiByYWlzZWQgJXMgKionICUgZXJyKQogCiAgICAgZGVmIGRvX3Aoc2VsZiwgYXJnKToKLSAgICAgICAgIiIicChyaW50KSBleHByZXNzaW9uCisgICAgICAgICIiInAgZXhwcmVzc2lvbgogICAgICAgICBQcmludCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uCiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UocmVwcihzZWxmLl9nZXR2YWwoYXJnKSkpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKLSAgICAjIG1ha2UgInByaW50IiBhbiBhbGlhcyBvZiAicCIgc2luY2UgcHJpbnQgaXNuJ3QgYSBQeXRob24gc3RhdGVtZW50IGFueW1vcmUKLSAgICBkb19wcmludCA9IGRvX3AKIAogICAgIGRlZiBkb19wcChzZWxmLCBhcmcpOgogICAgICAgICAiIiJwcCBleHByZXNzaW9uCkBAIC0xMjQ1LDcgKzEyNDQsNyBAQAogICAgICAgICBicmVha2xpc3QgPSBzZWxmLmdldF9maWxlX2JyZWFrcyhmaWxlbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGluZXMsIGxpbmVubyA9IGdldHNvdXJjZWxpbmVzKHNlbGYuY3VyZnJhbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5fcHJpbnRfbGluZXMobGluZXMsIGxpbmVubywgYnJlYWtsaXN0LCBzZWxmLmN1cmZyYW1lKQpAQCAtMTI2MSw3ICsxMjYwLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbGluZW5vID0gZ2V0c291cmNlbGluZXMob2JqKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIFR5cGVFcnJvcikgYXMgZXJyOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFR5cGVFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5fcHJpbnRfbGluZXMobGluZXMsIGxpbmVubykKQEAgLTEzOTIsNyArMTM5MSw3IEBACiAgICAgICAgIHBsYWNlZCBpbiB0aGUgLnBkYnJjIGZpbGUpOgogCiAgICAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IikKLSAgICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCAiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXQorICAgICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKQogICAgICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmCiAgICAgICAgIGFsaWFzIHBzIHBpIHNlbGYKICAgICAgICAgIiIiCkBAIC0xNTUwLDcgKzE1NDksNyBAQAogICAgICAgICAnaGVscCcsICd3aGVyZScsICdkb3duJywgJ3VwJywgJ2JyZWFrJywgJ3RicmVhaycsICdjbGVhcicsICdkaXNhYmxlJywKICAgICAgICAgJ2VuYWJsZScsICdpZ25vcmUnLCAnY29uZGl0aW9uJywgJ2NvbW1hbmRzJywgJ3N0ZXAnLCAnbmV4dCcsICd1bnRpbCcsCiAgICAgICAgICdqdW1wJywgJ3JldHVybicsICdyZXR2YWwnLCAncnVuJywgJ2NvbnRpbnVlJywgJ2xpc3QnLCAnbG9uZ2xpc3QnLAotICAgICAgICAnYXJncycsICdwcmludCcsICdwcCcsICd3aGF0aXMnLCAnc291cmNlJywgJ2Rpc3BsYXknLCAndW5kaXNwbGF5JywKKyAgICAgICAgJ2FyZ3MnLCAncCcsICdwcCcsICd3aGF0aXMnLCAnc291cmNlJywgJ2Rpc3BsYXknLCAndW5kaXNwbGF5JywKICAgICAgICAgJ2ludGVyYWN0JywgJ2FsaWFzJywgJ3VuYWxpYXMnLCAnZGVidWcnLCAncXVpdCcsCiAgICAgXQogCmRpZmYgLS1naXQgYS9MaWIvcGlja2xlLnB5IGIvTGliL3BpY2tsZS5weQppbmRleCAzODZmZmJhLi4zZmMyNTk2IDEwMDY0NAotLS0gYS9MaWIvcGlja2xlLnB5CisrKyBiL0xpYi9waWNrbGUucHkKQEAgLTIzLDEyICsyMywxMyBAQAogCiAiIiIKIAotZnJvbSB0eXBlcyBpbXBvcnQgRnVuY3Rpb25UeXBlLCBCdWlsdGluRnVuY3Rpb25UeXBlCitmcm9tIHR5cGVzIGltcG9ydCBGdW5jdGlvblR5cGUKIGZyb20gY29weXJlZyBpbXBvcnQgZGlzcGF0Y2hfdGFibGUKIGZyb20gY29weXJlZyBpbXBvcnQgX2V4dGVuc2lvbl9yZWdpc3RyeSwgX2ludmVydGVkX3JlZ2lzdHJ5LCBfZXh0ZW5zaW9uX2NhY2hlCi1pbXBvcnQgbWFyc2hhbAorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZQogaW1wb3J0IHN5cwotaW1wb3J0IHN0cnVjdAorZnJvbSBzeXMgaW1wb3J0IG1heHNpemUKK2Zyb20gc3RydWN0IGltcG9ydCBwYWNrLCB1bnBhY2sKIGltcG9ydCByZQogaW1wb3J0IGlvCiBpbXBvcnQgY29kZWNzCkBAIC00MSwyOCArNDIsMjQgQEAKIGJ5dGVzX3R5cGVzID0gKGJ5dGVzLCBieXRlYXJyYXkpCiAKICMgVGhlc2UgYXJlIHB1cmVseSBpbmZvcm1hdGlvbmFsOyBubyBjb2RlIHVzZXMgdGhlc2UuCi1mb3JtYXRfdmVyc2lvbiA9ICIzLjAiICAgICAgICAgICAgICAgICAgIyBGaWxlIGZvcm1hdCB2ZXJzaW9uIHdlIHdyaXRlCitmb3JtYXRfdmVyc2lvbiA9ICI0LjAiICAgICAgICAgICAgICAgICAgIyBGaWxlIGZvcm1hdCB2ZXJzaW9uIHdlIHdyaXRlCiBjb21wYXRpYmxlX2Zvcm1hdHMgPSBbIjEuMCIsICAgICAgICAgICAgIyBPcmlnaW5hbCBwcm90b2NvbCAwCiAgICAgICAgICAgICAgICAgICAgICAgIjEuMSIsICAgICAgICAgICAgIyBQcm90b2NvbCAwIHdpdGggSU5TVCBhZGRlZAogICAgICAgICAgICAgICAgICAgICAgICIxLjIiLCAgICAgICAgICAgICMgT3JpZ2luYWwgcHJvdG9jb2wgMQogICAgICAgICAgICAgICAgICAgICAgICIxLjMiLCAgICAgICAgICAgICMgUHJvdG9jb2wgMSB3aXRoIEJJTkZMT0FUIGFkZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIjIuMCIsICAgICAgICAgICAgIyBQcm90b2NvbCAyCiAgICAgICAgICAgICAgICAgICAgICAgIjMuMCIsICAgICAgICAgICAgIyBQcm90b2NvbCAzCisgICAgICAgICAgICAgICAgICAgICAgIjQuMCIsICAgICAgICAgICAgIyBQcm90b2NvbCA0CiAgICAgICAgICAgICAgICAgICAgICAgXSAgICAgICAgICAgICAgICAgIyBPbGQgZm9ybWF0IHZlcnNpb25zIHdlIGNhbiByZWFkCiAKICMgVGhpcyBpcyB0aGUgaGlnaGVzdCBwcm90b2NvbCBudW1iZXIgd2Uga25vdyBob3cgdG8gcmVhZC4KLUhJR0hFU1RfUFJPVE9DT0wgPSAzCitISUdIRVNUX1BST1RPQ09MID0gNAogCiAjIFRoZSBwcm90b2NvbCB3ZSB3cml0ZSBieSBkZWZhdWx0LiAgTWF5IGJlIGxlc3MgdGhhbiBISUdIRVNUX1BST1RPQ09MLgogIyBXZSBpbnRlbnRpb25hbGx5IHdyaXRlIGEgcHJvdG9jb2wgdGhhdCBQeXRob24gMi54IGNhbm5vdCByZWFkOwogIyB0aGVyZSBhcmUgdG9vIG1hbnkgaXNzdWVzIHdpdGggdGhhdC4KIERFRkFVTFRfUFJPVE9DT0wgPSAzCiAKLSMgV2h5IHVzZSBzdHJ1Y3QucGFjaygpIGZvciBwaWNrbGluZyBidXQgbWFyc2hhbC5sb2FkcygpIGZvcgotIyB1bnBpY2tsaW5nPyAgc3RydWN0LnBhY2soKSBpcyA0MCUgZmFzdGVyIHRoYW4gbWFyc2hhbC5kdW1wcygpLCBidXQKLSMgbWFyc2hhbC5sb2FkcygpIGlzIHR3aWNlIGFzIGZhc3QgYXMgc3RydWN0LnVucGFjaygpIQotbWxvYWRzID0gbWFyc2hhbC5sb2FkcwotCiBjbGFzcyBQaWNrbGVFcnJvcihFeGNlcHRpb24pOgogICAgICIiIkEgY29tbW9uIGJhc2UgY2xhc3MgZm9yIHRoZSBvdGhlciBwaWNrbGluZyBleGNlcHRpb25zLiIiIgogICAgIHBhc3MKQEAgLTE2OCw3ICsxNjUsMTgxIEBACiBCSU5CWVRFUyAgICAgICA9IGInQicgICAjIHB1c2ggYnl0ZXM7IGNvdW50ZWQgYmluYXJ5IHN0cmluZyBhcmd1bWVudAogU0hPUlRfQklOQllURVMgPSBiJ0MnICAgIyAgIiAgICAgIiAgIDsgICAgIiAgICAgICIgICAgICAgIiAgICAgICIgPCAyNTYgYnl0ZXMKIAotX19hbGxfXy5leHRlbmQoW3ggZm9yIHggaW4gZGlyKCkgaWYgcmUubWF0Y2goIltBLVpdW0EtWjAtOV9dKyQiLHgpXSkKKyMgUHJvdG9jb2wgNAorU0hPUlRfQklOVU5JQ09ERSA9IGInXHg4YycgICMgcHVzaCBzaG9ydCBzdHJpbmc7IFVURi04IGxlbmd0aCA8IDI1NiBieXRlcworQklOVU5JQ09ERTggICAgICA9IGInXHg4ZCcgICMgcHVzaCB2ZXJ5IGxvbmcgc3RyaW5nCitCSU5CWVRFUzggICAgICAgID0gYidceDhlJyAgIyBwdXNoIHZlcnkgbG9uZyBieXRlcyBzdHJpbmcKK0VNUFRZX1NFVCAgICAgICAgPSBiJ1x4OGYnICAjIHB1c2ggZW1wdHkgc2V0IG9uIHRoZSBzdGFjaworQURESVRFTVMgICAgICAgICA9IGInXHg5MCcgICMgbW9kaWZ5IHNldCBieSBhZGRpbmcgdG9wbW9zdCBzdGFjayBpdGVtcworRlJPWkVOU0VUICAgICAgICA9IGInXHg5MScgICMgYnVpbGQgZnJvemVuc2V0IGZyb20gdG9wbW9zdCBzdGFjayBpdGVtcworTkVXT0JKX0VYICAgICAgICA9IGInXHg5MicgICMgbGlrZSBORVdPQkogYnV0IHdvcmsgd2l0aCBrZXl3b3JkIG9ubHkgYXJndW1lbnRzCitTVEFDS19HTE9CQUwgICAgID0gYidceDkzJyAgIyBzYW1lIGFzIEdMT0JBTCBidXQgdXNpbmcgbmFtZXMgb24gdGhlIHN0YWNrcworTUVNT0laRSAgICAgICAgICA9IGInXHg5NCcgICMgc3RvcmUgdG9wIG9mIHRoZSBzdGFjayBpbiBtZW1vCitGUkFNRSAgICAgICAgICAgID0gYidceDk1JyAgIyBpbmRpY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZyYW1lCisKK19fYWxsX18uZXh0ZW5kKFt4IGZvciB4IGluIGRpcigpIGlmIHJlLm1hdGNoKCJbQS1aXVtBLVowLTlfXSskIiwgeCldKQorCisKK2NsYXNzIF9GcmFtZXI6CisKKyAgICBfRlJBTUVfU0laRV9UQVJHRVQgPSA2NCAqIDEwMjQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3dyaXRlKToKKyAgICAgICAgc2VsZi5maWxlX3dyaXRlID0gZmlsZV93cml0ZQorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisKKyAgICBkZWYgc3RhcnRfZnJhbWluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gaW8uQnl0ZXNJTygpCisKKyAgICBkZWYgZW5kX2ZyYW1pbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZSBhbmQgc2VsZi5jdXJyZW50X2ZyYW1lLnRlbGwoKSA+IDA6CisgICAgICAgICAgICBzZWxmLmNvbW1pdF9mcmFtZShmb3JjZT1UcnVlKQorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorCisgICAgZGVmIGNvbW1pdF9mcmFtZShzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIGYgPSBzZWxmLmN1cnJlbnRfZnJhbWUKKyAgICAgICAgICAgIGlmIGYudGVsbCgpID49IHNlbGYuX0ZSQU1FX1NJWkVfVEFSR0VUIG9yIGZvcmNlOgorICAgICAgICAgICAgICAgIHdpdGggZi5nZXRidWZmZXIoKSBhcyBkYXRhOgorICAgICAgICAgICAgICAgICAgICBuID0gbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gc2VsZi5maWxlX3dyaXRlCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKEZSQU1FKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShwYWNrKCI8USIsIG4pKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIGYudHJ1bmNhdGUoKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jdXJyZW50X2ZyYW1lLndyaXRlKGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3dyaXRlKGRhdGEpCisKKworY2xhc3MgX1VuZnJhbWVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfcmVhZCwgZmlsZV9yZWFkbGluZSwgZmlsZV90ZWxsPU5vbmUpOgorICAgICAgICBzZWxmLmZpbGVfcmVhZCA9IGZpbGVfcmVhZAorICAgICAgICBzZWxmLmZpbGVfcmVhZGxpbmUgPSBmaWxlX3JlYWRsaW5lCisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKworICAgIGRlZiByZWFkKHNlbGYsIG4pOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5jdXJyZW50X2ZyYW1lLnJlYWQobikKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhIGFuZCBuICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZChuKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpIDwgbjoKKyAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgZXhoYXVzdGVkIGJlZm9yZSBlbmQgb2YgZnJhbWUiKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZChuKQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5jdXJyZW50X2ZyYW1lLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGRhdGFbLTFdICE9IGInXG4nOgorICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIGVuZCBvZiBmcmFtZSIpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkbGluZSgpCisKKyAgICBkZWYgbG9hZF9mcmFtZShzZWxmLCBmcmFtZV9zaXplKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lIGFuZCBzZWxmLmN1cnJlbnRfZnJhbWUucmVhZCgpICE9IGInJzoKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigKKyAgICAgICAgICAgICAgICAiYmVnaW5uaW5nIG9mIGEgbmV3IGZyYW1lIGJlZm9yZSBlbmQgb2YgY3VycmVudCBmcmFtZSIpCisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IGlvLkJ5dGVzSU8oc2VsZi5maWxlX3JlYWQoZnJhbWVfc2l6ZSkpCisKKworIyBUb29scyB1c2VkIGZvciBwaWNrbGluZy4KKworZGVmIF9nZXRhdHRyaWJ1dGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1GYWxzZSk6CisgICAgZG90dGVkX3BhdGggPSBuYW1lLnNwbGl0KCIuIikKKyAgICBpZiBub3QgYWxsb3dfcXVhbG5hbWUgYW5kIGxlbihkb3R0ZWRfcGF0aCkgPiAxOgorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ2FuJ3QgZ2V0IHF1YWxpZmllZCBhdHRyaWJ1dGUgeyFyfSBvbiB7IXJ9OyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBwcm90b2NvbHMgPj0gNCB0byBlbmFibGUgc3VwcG9ydCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCBvYmopKQorICAgIGZvciBzdWJwYXRoIGluIGRvdHRlZF9wYXRoOgorICAgICAgICBpZiBzdWJwYXRoID09ICc8bG9jYWxzPic6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ2FuJ3QgZ2V0IGxvY2FsIGF0dHJpYnV0ZSB7IXJ9IG9uIHshcn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIG9iaikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIob2JqLCBzdWJwYXRoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ2FuJ3QgZ2V0IGF0dHJpYnV0ZSB7IXJ9IG9uIHshcn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIG9iaikpCisgICAgcmV0dXJuIG9iagorCitkZWYgd2hpY2htb2R1bGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1GYWxzZSk6CisgICAgIiIiRmluZCB0aGUgbW9kdWxlIGFuIG9iamVjdCBiZWxvbmcgdG8uIiIiCisgICAgbW9kdWxlX25hbWUgPSBnZXRhdHRyKG9iaiwgJ19fbW9kdWxlX18nLCBOb25lKQorICAgIGlmIG1vZHVsZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gbW9kdWxlX25hbWUKKyAgICBmb3IgbW9kdWxlX25hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgorICAgICAgICBpZiBtb2R1bGVfbmFtZSA9PSAnX19tYWluX18nIG9yIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgX2dldGF0dHJpYnV0ZShtb2R1bGUsIG5hbWUsIGFsbG93X3F1YWxuYW1lKSBpcyBvYmo6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gJ19fbWFpbl9fJworCitkZWYgZW5jb2RlX2xvbmcoeCk6CisgICAgciIiIkVuY29kZSBhIGxvbmcgdG8gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KKyAgICBOb3RlIHRoYXQgMCBpcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuaW5nIGFuIGVtcHR5IHN0cmluZywgdG8gc2F2ZSBhCisgICAgYnl0ZSBpbiB0aGUgTE9ORzEgcGlja2xpbmcgY29udGV4dC4KKworICAgID4+PiBlbmNvZGVfbG9uZygwKQorICAgIGInJworICAgID4+PiBlbmNvZGVfbG9uZygyNTUpCisgICAgYidceGZmXHgwMCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoMzI3NjcpCisgICAgYidceGZmXHg3ZicKKyAgICA+Pj4gZW5jb2RlX2xvbmcoLTI1NikKKyAgICBiJ1x4MDBceGZmJworICAgID4+PiBlbmNvZGVfbG9uZygtMzI3NjgpCisgICAgYidceDAwXHg4MCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoLTEyOCkKKyAgICBiJ1x4ODAnCisgICAgPj4+IGVuY29kZV9sb25nKDEyNykKKyAgICBiJ1x4N2YnCisgICAgPj4+CisgICAgIiIiCisgICAgaWYgeCA9PSAwOgorICAgICAgICByZXR1cm4gYicnCisgICAgbmJ5dGVzID0gKHguYml0X2xlbmd0aCgpID4+IDMpICsgMQorICAgIHJlc3VsdCA9IHgudG9fYnl0ZXMobmJ5dGVzLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQorICAgIGlmIHggPCAwIGFuZCBuYnl0ZXMgPiAxOgorICAgICAgICBpZiByZXN1bHRbLTFdID09IDB4ZmYgYW5kIChyZXN1bHRbLTJdICYgMHg4MCkgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LTFdCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgZGVjb2RlX2xvbmcoZGF0YSk6CisgICAgciIiIkRlY29kZSBhIGxvbmcgZnJvbSBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgorCisgICAgPj4+IGRlY29kZV9sb25nKGInJykKKyAgICAwCisgICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4MDAiKQorICAgIDI1NQorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDdmIikKKyAgICAzMjc2NworICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceGZmIikKKyAgICAtMjU2CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ODAiKQorICAgIC0zMjc2OAorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ODAiKQorICAgIC0xMjgKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDdmIikKKyAgICAxMjcKKyAgICAiIiIKKyAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoZGF0YSwgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKKwogCiAjIFBpY2tsaW5nIG1hY2hpbmVyeQogCkBAIC0xNzcsMjQgKzM0OCwyNSBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKToKICAgICAgICAgIiIiVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgogCi0gICAgICAgIFRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlCi0gICAgICAgIGdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQKLSAgICAgICAgcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yCi0gICAgICAgIFB5dGhvbiAzLjAuCisgICAgICAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUKKyAgICAgICAgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUKKyAgICAgICAgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZAorICAgICAgICBmb3IgUHl0aG9uIDMuCiAKICAgICAgICAgU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdAogICAgICAgICBwcm90b2NvbCB2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZQogICAgICAgICBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZQogICAgICAgICBwcm9kdWNlZC4KIAotICAgICAgICBUaGUgZmlsZSBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUKLSAgICAgICAgYnl0ZXMgYXJndW1lbnQuIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkKLSAgICAgICAgd3JpdGluZywgYSBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0Ci0gICAgICAgIG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorICAgICAgICBUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhCisgICAgICAgIHNpbmdsZSBieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yCisgICAgICAgIGJpbmFyeSB3cml0aW5nLCBhIGlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20KKyAgICAgICAgb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKLSAgICAgICAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0bwotICAgICAgICBtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uCi0gICAgICAgIDIueCwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KKyAgICAgICAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUKKyAgICAgICAgd2lsbCB0cnkgdG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMKKyAgICAgICAgdXNlZCBpbiBQeXRob24gMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlCisgICAgICAgIHdpdGggUHl0aG9uIDIuCiAgICAgICAgICIiIgogICAgICAgICBpZiBwcm90b2NvbCBpcyBOb25lOgogICAgICAgICAgICAgcHJvdG9jb2wgPSBERUZBVUxUX1BST1RPQ09MCkBAIC0yMDMsOSArMzc1LDExIEBACiAgICAgICAgIGVsaWYgbm90IDAgPD0gcHJvdG9jb2wgPD0gSElHSEVTVF9QUk9UT0NPTDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBpY2tsZSBwcm90b2NvbCBtdXN0IGJlIDw9ICVkIiAlIEhJR0hFU1RfUFJPVE9DT0wpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYud3JpdGUgPSBmaWxlLndyaXRlCisgICAgICAgICAgICBzZWxmLl9maWxlX3dyaXRlID0gZmlsZS53cml0ZQogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImZpbGUgbXVzdCBoYXZlIGEgJ3dyaXRlJyBhdHRyaWJ1dGUiKQorICAgICAgICBzZWxmLmZyYW1lciA9IF9GcmFtZXIoc2VsZi5fZmlsZV93cml0ZSkKKyAgICAgICAgc2VsZi53cml0ZSA9IHNlbGYuZnJhbWVyLndyaXRlCiAgICAgICAgIHNlbGYubWVtbyA9IHt9CiAgICAgICAgIHNlbGYucHJvdG8gPSBpbnQocHJvdG9jb2wpCiAgICAgICAgIHNlbGYuYmluID0gcHJvdG9jb2wgPj0gMQpAQCAtMjE2LDEwICszOTAsOSBAQAogICAgICAgICAiIiJDbGVhcnMgdGhlIHBpY2tsZXIncyAibWVtbyIuCiAKICAgICAgICAgVGhlIG1lbW8gaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIHdoaWNoIG9iamVjdHMgdGhlCi0gICAgICAgIHBpY2tsZXIgaGFzIGFscmVhZHkgc2Vlbiwgc28gdGhhdCBzaGFyZWQgb3IgcmVjdXJzaXZlIG9iamVjdHMgYXJlCi0gICAgICAgIHBpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbgotICAgICAgICByZS11c2luZyBwaWNrbGVycy4KLQorICAgICAgICBwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzCisgICAgICAgIGFyZSBwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZnVsIHdoZW4gcmUtdXNpbmcgcGlja2xlcnMuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLm1lbW8uY2xlYXIoKQogCkBAIC0yMjcsMTMgKzQwMCwxNiBAQAogICAgICAgICAiIiJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuIiIiCiAgICAgICAgICMgQ2hlY2sgd2hldGhlciBQaWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoaXMgaXMKICAgICAgICAgIyBvbmx5IG5lZWRlZCB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgX3BpY2tsZS5QaWNrbGVyLmR1bXAoKS4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIndyaXRlIik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfZmlsZV93cml0ZSIpOgogICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiUGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLl9faW5pdF9fKCkiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkpCiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoUFJPVE8gKyBieXRlcyhbc2VsZi5wcm90b10pKQorICAgICAgICAgICAgc2VsZi53cml0ZShQUk9UTyArIHBhY2soIjxCIiwgc2VsZi5wcm90bykpCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHNlbGYuZnJhbWVyLnN0YXJ0X2ZyYW1pbmcoKQogICAgICAgICBzZWxmLnNhdmUob2JqKQogICAgICAgICBzZWxmLndyaXRlKFNUT1ApCisgICAgICAgIHNlbGYuZnJhbWVyLmVuZF9mcmFtaW5nKCkKIAogICAgIGRlZiBtZW1vaXplKHNlbGYsIG9iaik6CiAgICAgICAgICIiIlN0b3JlIGFuIG9iamVjdCBpbiB0aGUgbWVtby4iIiIKQEAgLTI1MywzMSArNDI5LDM1IEBACiAgICAgICAgIGlmIHNlbGYuZmFzdDoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBhc3NlcnQgaWQob2JqKSBub3QgaW4gc2VsZi5tZW1vCi0gICAgICAgIG1lbW9fbGVuID0gbGVuKHNlbGYubWVtbykKLSAgICAgICAgc2VsZi53cml0ZShzZWxmLnB1dChtZW1vX2xlbikpCi0gICAgICAgIHNlbGYubWVtb1tpZChvYmopXSA9IG1lbW9fbGVuLCBvYmoKKyAgICAgICAgaWR4ID0gbGVuKHNlbGYubWVtbykKKyAgICAgICAgc2VsZi53cml0ZShzZWxmLnB1dChpZHgpKQorICAgICAgICBzZWxmLm1lbW9baWQob2JqKV0gPSBpZHgsIG9iagogCiAgICAgIyBSZXR1cm4gYSBQVVQgKEJJTlBVVCwgTE9OR19CSU5QVVQpIG9wY29kZSBzdHJpbmcsIHdpdGggYXJndW1lbnQgaS4KLSAgICBkZWYgcHV0KHNlbGYsIGksIHBhY2s9c3RydWN0LnBhY2spOgotICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIGlmIGkgPCAyNTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJJTlBVVCArIGJ5dGVzKFtpXSkKKyAgICBkZWYgcHV0KHNlbGYsIGlkeCk6CisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHJldHVybiBNRU1PSVpFCisgICAgICAgIGVsaWYgc2VsZi5iaW46CisgICAgICAgICAgICBpZiBpZHggPCAyNTY6CisgICAgICAgICAgICAgICAgcmV0dXJuIEJJTlBVVCArIHBhY2soIjxCIiwgaWR4KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5QVVQgKyBwYWNrKCI8SSIsIGkpCi0KLSAgICAgICAgcmV0dXJuIFBVVCArIHJlcHIoaSkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKKyAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5QVVQgKyBwYWNrKCI8SSIsIGlkeCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBQVVQgKyByZXByKGlkeCkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKIAogICAgICMgUmV0dXJuIGEgR0VUIChCSU5HRVQsIExPTkdfQklOR0VUKSBvcGNvZGUgc3RyaW5nLCB3aXRoIGFyZ3VtZW50IGkuCi0gICAgZGVmIGdldChzZWxmLCBpLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgZ2V0KHNlbGYsIGkpOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgIGlmIGkgPCAyNTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJJTkdFVCArIGJ5dGVzKFtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQklOR0VUICsgcGFjaygiPEIiLCBpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5HRVQgKyBwYWNrKCI8SSIsIGkpCiAKICAgICAgICAgcmV0dXJuIEdFVCArIHJlcHIoaSkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKIAogICAgIGRlZiBzYXZlKHNlbGYsIG9iaiwgc2F2ZV9wZXJzaXN0ZW50X2lkPVRydWUpOgorICAgICAgICBzZWxmLmZyYW1lci5jb21taXRfZnJhbWUoKQorCiAgICAgICAgICMgQ2hlY2sgZm9yIHBlcnNpc3RlbnQgaWQgKGRlZmluZWQgYnkgYSBzdWJjbGFzcykKICAgICAgICAgcGlkID0gc2VsZi5wZXJzaXN0ZW50X2lkKG9iaikKICAgICAgICAgaWYgcGlkIGlzIG5vdCBOb25lIGFuZCBzYXZlX3BlcnNpc3RlbnRfaWQ6CkBAIC0yODYsMjAgKzQ2NiwyMCBAQAogCiAgICAgICAgICMgQ2hlY2sgdGhlIG1lbW8KICAgICAgICAgeCA9IHNlbGYubWVtby5nZXQoaWQob2JqKSkKLSAgICAgICAgaWYgeDoKKyAgICAgICAgaWYgeCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoc2VsZi5nZXQoeFswXSkpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIENoZWNrIHRoZSB0eXBlIGRpc3BhdGNoIHRhYmxlCiAgICAgICAgIHQgPSB0eXBlKG9iaikKICAgICAgICAgZiA9IHNlbGYuZGlzcGF0Y2guZ2V0KHQpCi0gICAgICAgIGlmIGY6CisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmKHNlbGYsIG9iaikgIyBDYWxsIHVuYm91bmQgbWV0aG9kIHdpdGggZXhwbGljaXQgc2VsZgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBDaGVjayBwcml2YXRlIGRpc3BhdGNoIHRhYmxlIGlmIGFueSwgb3IgZWxzZSBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlCiAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIoc2VsZiwgJ2Rpc3BhdGNoX3RhYmxlJywgZGlzcGF0Y2hfdGFibGUpLmdldCh0KQotICAgICAgICBpZiByZWR1Y2U6CisgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKG9iaikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgY2xhc3Mgd2l0aCBhIGN1c3RvbSBtZXRhY2xhc3M7IHRyZWF0IGFzIHJlZ3VsYXIgY2xhc3MKQEAgLTMxMywxMSArNDkzLDExIEBACiAKICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgX19yZWR1Y2VfZXhfXyBtZXRob2QsIGZhbGwgYmFjayB0byBfX3JlZHVjZV9fCiAgICAgICAgICAgICByZWR1Y2UgPSBnZXRhdHRyKG9iaiwgIl9fcmVkdWNlX2V4X18iLCBOb25lKQotICAgICAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICAgICAgaWYgcmVkdWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKHNlbGYucHJvdG8pCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIob2JqLCAiX19yZWR1Y2VfXyIsIE5vbmUpCi0gICAgICAgICAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICAgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcnYgPSByZWR1Y2UoKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoIkNhbid0IHBpY2tsZSAlciBvYmplY3Q6ICVyIiAlCkBAIC0zNTMsMjQgKzUzMywzMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi53cml0ZShQRVJTSUQgKyBzdHIocGlkKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJykKIAotICAgIGRlZiBzYXZlX3JlZHVjZShzZWxmLCBmdW5jLCBhcmdzLCBzdGF0ZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICBsaXN0aXRlbXM9Tm9uZSwgZGljdGl0ZW1zPU5vbmUsIG9iaj1Ob25lKToKKyAgICBkZWYgc2F2ZV9yZWR1Y2Uoc2VsZiwgZnVuYywgYXJncywgc3RhdGU9Tm9uZSwgbGlzdGl0ZW1zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGRpY3RpdGVtcz1Ob25lLCBvYmo9Tm9uZSk6CiAgICAgICAgICMgVGhpcyBBUEkgaXMgY2FsbGVkIGJ5IHNvbWUgc3ViY2xhc3NlcwogCi0gICAgICAgICMgQXNzZXJ0IHRoYXQgYXJncyBpcyBhIHR1cGxlCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZ3MsIHR1cGxlKToKLSAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3MgZnJvbSBzYXZlX3JlZHVjZSgpIHNob3VsZCBiZSBhIHR1cGxlIikKLQotICAgICAgICAjIEFzc2VydCB0aGF0IGZ1bmMgaXMgY2FsbGFibGUKKyAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3MgZnJvbSBzYXZlX3JlZHVjZSgpIG11c3QgYmUgYSB0dXBsZSIpCiAgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmdW5jKToKLSAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImZ1bmMgZnJvbSBzYXZlX3JlZHVjZSgpIHNob3VsZCBiZSBjYWxsYWJsZSIpCisgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJmdW5jIGZyb20gc2F2ZV9yZWR1Y2UoKSBtdXN0IGJlIGNhbGxhYmxlIikKIAogICAgICAgICBzYXZlID0gc2VsZi5zYXZlCiAgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQogCi0gICAgICAgICMgUHJvdG9jb2wgMiBzcGVjaWFsIGNhc2U6IGlmIGZ1bmMncyBuYW1lIGlzIF9fbmV3b2JqX18sIHVzZSBORVdPQkoKLSAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyIGFuZCBnZXRhdHRyKGZ1bmMsICJfX25hbWVfXyIsICIiKSA9PSAiX19uZXdvYmpfXyI6Ci0gICAgICAgICAgICAjIEEgX19yZWR1Y2VfXyBpbXBsZW1lbnRhdGlvbiBjYW4gZGlyZWN0IHByb3RvY29sIDIgdG8KKyAgICAgICAgZnVuY19uYW1lID0gZ2V0YXR0cihmdW5jLCAiX19uYW1lX18iLCAiIikKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0IGFuZCBmdW5jX25hbWUgPT0gIl9fbmV3b2JqX2V4X18iOgorICAgICAgICAgICAgY2xzLCBhcmdzLCBrd2FyZ3MgPSBhcmdzCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjbHMsICJfX25ld19fIik6CisgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJnc1swXSBmcm9tIHt9IGFyZ3MgaGFzIG5vIF9fbmV3X18iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZ1bmNfbmFtZSkpCisgICAgICAgICAgICBpZiBvYmogaXMgbm90IE5vbmUgYW5kIGNscyBpcyBub3Qgb2JqLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzWzBdIGZyb20ge30gYXJncyBoYXMgdGhlIHdyb25nIGNsYXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmdW5jX25hbWUpKQorICAgICAgICAgICAgc2F2ZShjbHMpCisgICAgICAgICAgICBzYXZlKGFyZ3MpCisgICAgICAgICAgICBzYXZlKGt3YXJncykKKyAgICAgICAgICAgIHdyaXRlKE5FV09CSl9FWCkKKyAgICAgICAgZWxpZiBzZWxmLnByb3RvID49IDIgYW5kIGZ1bmNfbmFtZSA9PSAiX19uZXdvYmpfXyI6CisgICAgICAgICAgICAjIEEgX19yZWR1Y2VfXyBpbXBsZW1lbnRhdGlvbiBjYW4gZGlyZWN0IHByb3RvY29sIDIgb3IgbmV3ZXIgdG8KICAgICAgICAgICAgICMgdXNlIHRoZSBtb3JlIGVmZmljaWVudCBORVdPQkogb3Bjb2RlLCB3aGlsZSBzdGlsbAogICAgICAgICAgICAgIyBhbGxvd2luZyBwcm90b2NvbCAwIGFuZCAxIHRvIHdvcmsgbm9ybWFsbHkuICBGb3IgdGhpcyB0bwogICAgICAgICAgICAgIyB3b3JrLCB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBzaG91bGQgYmUKQEAgLTQxMyw3ICs2MDIsMTMgQEAKICAgICAgICAgICAgIHdyaXRlKFJFRFVDRSkKIAogICAgICAgICBpZiBvYmogaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQorICAgICAgICAgICAgIyBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1lbW8sIHRoaXMgbWVhbnMgaXQgaXMKKyAgICAgICAgICAgICMgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgICAgICAjIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uCisgICAgICAgICAgICBpZiBpZChvYmopIGluIHNlbGYubWVtbzoKKyAgICAgICAgICAgICAgICB3cml0ZShQT1AgKyBzZWxmLmdldChzZWxmLm1lbW9baWQob2JqKV1bMF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogCiAgICAgICAgICMgTW9yZSBuZXcgc3BlY2lhbCBjYXNlcyAodGhhdCB3b3JrIHdpdGggb2xkZXIgcHJvdG9jb2xzIGFzCiAgICAgICAgICMgd2VsbCk6IHdoZW4gX19yZWR1Y2VfXyByZXR1cm5zIGEgdHVwbGUgd2l0aCA0IG9yIDUgaXRlbXMsCkBAIC00MzgsMjIgKzYzMywxNCBAQAogICAgICAgICBzZWxmLndyaXRlKE5PTkUpCiAgICAgZGlzcGF0Y2hbdHlwZShOb25lKV0gPSBzYXZlX25vbmUKIAotICAgIGRlZiBzYXZlX2VsbGlwc2lzKHNlbGYsIG9iaik6Ci0gICAgICAgIHNlbGYuc2F2ZV9nbG9iYWwoRWxsaXBzaXMsICdFbGxpcHNpcycpCi0gICAgZGlzcGF0Y2hbdHlwZShFbGxpcHNpcyldID0gc2F2ZV9lbGxpcHNpcwotCi0gICAgZGVmIHNhdmVfbm90aW1wbGVtZW50ZWQoc2VsZiwgb2JqKToKLSAgICAgICAgc2VsZi5zYXZlX2dsb2JhbChOb3RJbXBsZW1lbnRlZCwgJ05vdEltcGxlbWVudGVkJykKLSAgICBkaXNwYXRjaFt0eXBlKE5vdEltcGxlbWVudGVkKV0gPSBzYXZlX25vdGltcGxlbWVudGVkCi0KICAgICBkZWYgc2F2ZV9ib29sKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUob2JqIGFuZCBORVdUUlVFIG9yIE5FV0ZBTFNFKQorICAgICAgICAgICAgc2VsZi53cml0ZShORVdUUlVFIGlmIG9iaiBlbHNlIE5FV0ZBTFNFKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZShvYmogYW5kIFRSVUUgb3IgRkFMU0UpCisgICAgICAgICAgICBzZWxmLndyaXRlKFRSVUUgaWYgb2JqIGVsc2UgRkFMU0UpCiAgICAgZGlzcGF0Y2hbYm9vbF0gPSBzYXZlX2Jvb2wKIAotICAgIGRlZiBzYXZlX2xvbmcoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9sb25nKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgIyBJZiB0aGUgaW50IGlzIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaWduZWQgNC1ieXRlIDIncy1jb21wCiAgICAgICAgICAgICAjIGZvcm1hdCwgd2UgY2FuIHN0b3JlIGl0IG1vcmUgZWZmaWNpZW50bHkgdGhhbiB0aGUgZ2VuZXJhbApAQCAtNDYxLDkzICs2NDgsOTUgQEAKICAgICAgICAgICAgICMgRmlyc3Qgb25lLSBhbmQgdHdvLWJ5dGUgdW5zaWduZWQgaW50czoKICAgICAgICAgICAgIGlmIG9iaiA+PSAwOgogICAgICAgICAgICAgICAgIGlmIG9iaiA8PSAweGZmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDEgKyBieXRlcyhbb2JqXSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMSArIHBhY2soIjxCIiwgb2JqKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgaWYgb2JqIDw9IDB4ZmZmZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQyICsgYnl0ZXMoW29iaiYweGZmLCBvYmo+PjhdKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQyICsgcGFjaygiPEgiLCBvYmopKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICMgTmV4dCBjaGVjayBmb3IgNC1ieXRlIHNpZ25lZCBpbnRzOgotICAgICAgICAgICAgaGlnaF9iaXRzID0gb2JqID4+IDMxICAjIG5vdGUgdGhhdCBQeXRob24gc2hpZnQgc2lnbi1leHRlbmRzCi0gICAgICAgICAgICBpZiBoaWdoX2JpdHMgPT0gMCBvciBoaWdoX2JpdHMgPT0gLTE6Ci0gICAgICAgICAgICAgICAgIyBBbGwgaGlnaCBiaXRzIGFyZSBjb3BpZXMgb2YgYml0IDIqKjMxLCBzbyB0aGUgdmFsdWUKLSAgICAgICAgICAgICAgICAjIGZpdHMgaW4gYSA0LWJ5dGUgc2lnbmVkIGludC4KKyAgICAgICAgICAgIGlmIC0weDgwMDAwMDAwIDw9IG9iaiA8PSAweDdmZmZmZmZmOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UICsgcGFjaygiPGkiLCBvYmopKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6CiAgICAgICAgICAgICBlbmNvZGVkID0gZW5jb2RlX2xvbmcob2JqKQogICAgICAgICAgICAgbiA9IGxlbihlbmNvZGVkKQogICAgICAgICAgICAgaWYgbiA8IDI1NjoKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKExPTkcxICsgYnl0ZXMoW25dKSArIGVuY29kZWQpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HMSArIHBhY2soIjxCIiwgbikgKyBlbmNvZGVkKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKExPTkc0ICsgcGFjaygiPGkiLCBuKSArIGVuY29kZWQpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi53cml0ZShMT05HICsgcmVwcihvYmopLmVuY29kZSgiYXNjaWkiKSArIGInTFxuJykKICAgICBkaXNwYXRjaFtpbnRdID0gc2F2ZV9sb25nCiAKLSAgICBkZWYgc2F2ZV9mbG9hdChzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX2Zsb2F0KHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgc2VsZi53cml0ZShCSU5GTE9BVCArIHBhY2soJz5kJywgb2JqKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoRkxPQVQgKyByZXByKG9iaikuZW5jb2RlKCJhc2NpaSIpICsgYidcbicpCiAgICAgZGlzcGF0Y2hbZmxvYXRdID0gc2F2ZV9mbG9hdAogCi0gICAgZGVmIHNhdmVfYnl0ZXMoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9ieXRlcyhzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLnByb3RvIDwgMzoKLSAgICAgICAgICAgIGlmIGxlbihvYmopID09IDA6CisgICAgICAgICAgICBpZiBub3Qgb2JqOiAjIGJ5dGVzIG9iamVjdCBpcyBlbXB0eQogICAgICAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2UoYnl0ZXMsICgpLCBvYmo9b2JqKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGNvZGVjcy5lbmNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKG9iaiwgJ2xhdGluMScpLCAnbGF0aW4xJyksIG9iaj1vYmopCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgbiA9IGxlbihvYmopCi0gICAgICAgIGlmIG4gPCAyNTY6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKFNIT1JUX0JJTkJZVEVTICsgYnl0ZXMoW25dKSArIGJ5dGVzKG9iaikpCisgICAgICAgIGlmIG4gPD0gMHhmZjoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOQllURVMgKyBwYWNrKCI8QiIsIG4pICsgb2JqKQorICAgICAgICBlbGlmIG4gPiAweGZmZmZmZmZmIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTOCArIHBhY2soIjxRIiwgbikgKyBvYmopCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTICsgcGFjaygiPEkiLCBuKSArIGJ5dGVzKG9iaikpCisgICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTICsgcGFjaygiPEkiLCBuKSArIG9iaikKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICBkaXNwYXRjaFtieXRlc10gPSBzYXZlX2J5dGVzCiAKLSAgICBkZWYgc2F2ZV9zdHIoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9zdHIoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBlbmNvZGVkID0gb2JqLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpCiAgICAgICAgICAgICBuID0gbGVuKGVuY29kZWQpCi0gICAgICAgICAgICBzZWxmLndyaXRlKEJJTlVOSUNPREUgKyBwYWNrKCI8SSIsIG4pICsgZW5jb2RlZCkKKyAgICAgICAgICAgIGlmIG4gPD0gMHhmZiBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOVU5JQ09ERSArIHBhY2soIjxCIiwgbikgKyBlbmNvZGVkKQorICAgICAgICAgICAgZWxpZiBuID4gMHhmZmZmZmZmZiBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOVU5JQ09ERTggKyBwYWNrKCI8USIsIG4pICsgZW5jb2RlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5VTklDT0RFICsgcGFjaygiPEkiLCBuKSArIGVuY29kZWQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZSgiXFwiLCAiXFx1MDA1YyIpCiAgICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZSgiXG4iLCAiXFx1MDAwYSIpCi0gICAgICAgICAgICBzZWxmLndyaXRlKFVOSUNPREUgKyBieXRlcyhvYmouZW5jb2RlKCdyYXctdW5pY29kZS1lc2NhcGUnKSkgKworICAgICAgICAgICAgc2VsZi53cml0ZShVTklDT0RFICsgb2JqLmVuY29kZSgncmF3LXVuaWNvZGUtZXNjYXBlJykgKwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuJykKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICBkaXNwYXRjaFtzdHJdID0gc2F2ZV9zdHIKIAogICAgIGRlZiBzYXZlX3R1cGxlKHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotICAgICAgICBwcm90byA9IHNlbGYucHJvdG8KLQotICAgICAgICBuID0gbGVuKG9iaikKLSAgICAgICAgaWYgbiA9PSAwOgotICAgICAgICAgICAgaWYgcHJvdG86Ci0gICAgICAgICAgICAgICAgd3JpdGUoRU1QVFlfVFVQTEUpCisgICAgICAgIGlmIG5vdCBvYmo6ICMgdHVwbGUgaXMgZW1wdHkKKyAgICAgICAgICAgIGlmIHNlbGYuYmluOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfVFVQTEUpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKE1BUksgKyBUVVBMRSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKE1BUksgKyBUVVBMRSkKICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgIG4gPSBsZW4ob2JqKQogICAgICAgICBzYXZlID0gc2VsZi5zYXZlCiAgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KLSAgICAgICAgaWYgbiA8PSAzIGFuZCBwcm90byA+PSAyOgorICAgICAgICBpZiBuIDw9IDMgYW5kIHNlbGYucHJvdG8gPj0gMjoKICAgICAgICAgICAgIGZvciBlbGVtZW50IGluIG9iajoKICAgICAgICAgICAgICAgICBzYXZlKGVsZW1lbnQpCiAgICAgICAgICAgICAjIFN1YnRsZS4gIFNhbWUgYXMgaW4gdGhlIGJpZyBjb21tZW50IGJlbG93LgogICAgICAgICAgICAgaWYgaWQob2JqKSBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGdldCA9IHNlbGYuZ2V0KG1lbW9baWQob2JqKV1bMF0pCi0gICAgICAgICAgICAgICAgd3JpdGUoUE9QICogbiArIGdldCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKFBPUCAqIG4gKyBnZXQpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKF90dXBsZXNpemUyY29kZVtuXSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKF90dXBsZXNpemUyY29kZVtuXSkKICAgICAgICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBwcm90byAwIG9yIHByb3RvIDEgYW5kIHR1cGxlIGlzbid0IGVtcHR5LCBvciBwcm90byA+IDEgYW5kIHR1cGxlCiAgICAgICAgICMgaGFzIG1vcmUgdGhhbiAzIGVsZW1lbnRzLgorICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKICAgICAgICAgd3JpdGUoTUFSSykKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gb2JqOgogICAgICAgICAgICAgc2F2ZShlbGVtZW50KQpAQCAtNTYxLDI1ICs3NTAsMjMgQEAKICAgICAgICAgICAgICMgY291bGQgaGF2ZSBiZWVuIGRvbmUgaW4gdGhlICJmb3IgZWxlbWVudCIgbG9vcCBpbnN0ZWFkLCBidXQKICAgICAgICAgICAgICMgcmVjdXJzaXZlIHR1cGxlcyBhcmUgYSByYXJlIHRoaW5nLgogICAgICAgICAgICAgZ2V0ID0gc2VsZi5nZXQobWVtb1tpZChvYmopXVswXSkKLSAgICAgICAgICAgIGlmIHByb3RvOgorICAgICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICAgICAgd3JpdGUoUE9QX01BUksgKyBnZXQpCiAgICAgICAgICAgICBlbHNlOiAgICMgcHJvdG8gMCAtLSBQT1BfTUFSSyBub3QgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgd3JpdGUoUE9QICogKG4rMSkgKyBnZXQpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIE5vIHJlY3Vyc2lvbi4KLSAgICAgICAgc2VsZi53cml0ZShUVVBMRSkKKyAgICAgICAgd3JpdGUoVFVQTEUpCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAKICAgICBkaXNwYXRjaFt0dXBsZV0gPSBzYXZlX3R1cGxlCiAKICAgICBkZWYgc2F2ZV9saXN0KHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotCiAgICAgICAgIGlmIHNlbGYuYmluOgotICAgICAgICAgICAgd3JpdGUoRU1QVFlfTElTVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfTElTVCkKICAgICAgICAgZWxzZTogICAjIHByb3RvIDAgLS0gY2FuJ3QgdXNlIEVNUFRZX0xJU1QKLSAgICAgICAgICAgIHdyaXRlKE1BUksgKyBMSVNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShNQVJLICsgTElTVCkKIAogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICBzZWxmLl9iYXRjaF9hcHBlbmRzKG9iaikKQEAgLTU5OSwxNyArNzg2LDkgQEAKICAgICAgICAgICAgICAgICB3cml0ZShBUFBFTkQpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpdGVtcyA9IGl0ZXIoaXRlbXMpCi0gICAgICAgIHIgPSByYW5nZShzZWxmLl9CQVRDSFNJWkUpCi0gICAgICAgIHdoaWxlIGl0ZW1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdG1wID0gW10KLSAgICAgICAgICAgIGZvciBpIGluIHI6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB4ID0gbmV4dChpdGVtcykKLSAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZCh4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaXQgPSBpdGVyKGl0ZW1zKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdG1wID0gbGlzdChpc2xpY2UoaXQsIHNlbGYuX0JBVENIU0laRSkpCiAgICAgICAgICAgICBuID0gbGVuKHRtcCkKICAgICAgICAgICAgIGlmIG4gPiAxOgogICAgICAgICAgICAgICAgIHdyaXRlKE1BUkspCkBAIC02MjAsMTQgKzc5OSwxNCBAQAogICAgICAgICAgICAgICAgIHNhdmUodG1wWzBdKQogICAgICAgICAgICAgICAgIHdyaXRlKEFQUEVORCkKICAgICAgICAgICAgICMgZWxzZSB0bXAgaXMgZW1wdHksIGFuZCB3ZSdyZSBkb25lCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgZGVmIHNhdmVfZGljdChzZWxmLCBvYmopOgotICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKLQogICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIHdyaXRlKEVNUFRZX0RJQ1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKEVNUFRZX0RJQ1QpCiAgICAgICAgIGVsc2U6ICAgIyBwcm90byAwIC0tIGNhbid0IHVzZSBFTVBUWV9ESUNUCi0gICAgICAgICAgICB3cml0ZShNQVJLICsgRElDVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTUFSSyArIERJQ1QpCiAKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICAgICAgc2VsZi5fYmF0Y2hfc2V0aXRlbXMob2JqLml0ZW1zKCkpCkBAIC02NDgsMTYgKzgyNyw5IEBACiAgICAgICAgICAgICAgICAgd3JpdGUoU0VUSVRFTSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGl0ZW1zID0gaXRlcihpdGVtcykKLSAgICAgICAgciA9IHJhbmdlKHNlbGYuX0JBVENIU0laRSkKLSAgICAgICAgd2hpbGUgaXRlbXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0bXAgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4gcjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQobmV4dChpdGVtcykpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpdCA9IGl0ZXIoaXRlbXMpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0bXAgPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKICAgICAgICAgICAgIG4gPSBsZW4odG1wKQogICAgICAgICAgICAgaWYgbiA+IDE6CiAgICAgICAgICAgICAgICAgd3JpdGUoTUFSSykKQEAgLTY3MSw1NSArODQzLDEwOSBAQAogICAgICAgICAgICAgICAgIHNhdmUodikKICAgICAgICAgICAgICAgICB3cml0ZShTRVRJVEVNKQogICAgICAgICAgICAgIyBlbHNlIHRtcCBpcyBlbXB0eSwgYW5kIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgIGlmIG4gPCBzZWxmLl9CQVRDSFNJWkU6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICBkZWYgc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBuYW1lPU5vbmUsIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX3NldChzZWxmLCBvYmopOgorICAgICAgICBzYXZlID0gc2VsZi5zYXZlCisgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQorCisgICAgICAgIGlmIHNlbGYucHJvdG8gPCA0OgorICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShzZXQsIChsaXN0KG9iaiksKSwgb2JqPW9iaikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKEVNUFRZX1NFVCkKKyAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKKworICAgICAgICBpdCA9IGl0ZXIob2JqKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYmF0Y2ggPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKKyAgICAgICAgICAgIG4gPSBsZW4oYmF0Y2gpCisgICAgICAgICAgICBpZiBuID4gMDoKKyAgICAgICAgICAgICAgICB3cml0ZShNQVJLKQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJhdGNoOgorICAgICAgICAgICAgICAgICAgICBzYXZlKGl0ZW0pCisgICAgICAgICAgICAgICAgd3JpdGUoQURESVRFTVMpCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgIGRpc3BhdGNoW3NldF0gPSBzYXZlX3NldAorCisgICAgZGVmIHNhdmVfZnJvemVuc2V0KHNlbGYsIG9iaik6CisgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKKyAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCisKKyAgICAgICAgaWYgc2VsZi5wcm90byA8IDQ6CisgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGZyb3plbnNldCwgKGxpc3Qob2JqKSwpLCBvYmo9b2JqKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoTUFSSykKKyAgICAgICAgZm9yIGl0ZW0gaW4gb2JqOgorICAgICAgICAgICAgc2F2ZShpdGVtKQorCisgICAgICAgIGlmIGlkKG9iaikgaW4gc2VsZi5tZW1vOgorICAgICAgICAgICAgIyBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1lbW8sIHRoaXMgbWVhbnMgaXQgaXMKKyAgICAgICAgICAgICMgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgICAgICAjIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uCisgICAgICAgICAgICB3cml0ZShQT1BfTUFSSyArIHNlbGYuZ2V0KHNlbGYubWVtb1tpZChvYmopXVswXSkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShGUk9aRU5TRVQpCisgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCisgICAgZGlzcGF0Y2hbZnJvemVuc2V0XSA9IHNhdmVfZnJvemVuc2V0CisKKyAgICBkZWYgc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBuYW1lPU5vbmUpOgogICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKICAgICAgICAgbWVtbyA9IHNlbGYubWVtbwogCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZSBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgbmFtZSA9IGdldGF0dHIob2JqLCAnX19xdWFsbmFtZV9fJywgTm9uZSkKICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgbmFtZSA9IG9iai5fX25hbWVfXwogCi0gICAgICAgIG1vZHVsZSA9IGdldGF0dHIob2JqLCAiX19tb2R1bGVfXyIsIE5vbmUpCi0gICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgbW9kdWxlID0gd2hpY2htb2R1bGUob2JqLCBuYW1lKQotCisgICAgICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlLCBsZXZlbD0wKQotICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kdWxlXQotICAgICAgICAgICAga2xhc3MgPSBnZXRhdHRyKG1vZCwgbmFtZSkKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlX25hbWUsIGxldmVsPTApCisgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKyAgICAgICAgICAgIG9iajIgPSBfZ2V0YXR0cmlidXRlKG1vZHVsZSwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9c2VsZi5wcm90byA+PSA0KQogICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBLZXlFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigKICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVyOiBpdCdzIG5vdCBmb3VuZCBhcyAlcy4lcyIgJQotICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZSwgbmFtZSkpCisgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlX25hbWUsIG5hbWUpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYga2xhc3MgaXMgbm90IG9iajoKKyAgICAgICAgICAgIGlmIG9iajIgaXMgbm90IG9iajoKICAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKAogICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVyOiBpdCdzIG5vdCB0aGUgc2FtZSBvYmplY3QgYXMgJXMuJXMiICUKLSAgICAgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlX25hbWUsIG5hbWUpKQogCiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIGNvZGUgPSBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LmdldCgobW9kdWxlLCBuYW1lKSkKKyAgICAgICAgICAgIGNvZGUgPSBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LmdldCgobW9kdWxlX25hbWUsIG5hbWUpKQogICAgICAgICAgICAgaWYgY29kZToKICAgICAgICAgICAgICAgICBhc3NlcnQgY29kZSA+IDAKICAgICAgICAgICAgICAgICBpZiBjb2RlIDw9IDB4ZmY6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDEgKyBieXRlcyhbY29kZV0pKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQxICsgcGFjaygiPEIiLCBjb2RlKSkKICAgICAgICAgICAgICAgICBlbGlmIGNvZGUgPD0gMHhmZmZmOgotICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQyICsgYnl0ZXMoW2NvZGUmMHhmZiwgY29kZT4+OF0pKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQyICsgcGFjaygiPEgiLCBjb2RlKSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQ0ICsgcGFjaygiPGkiLCBjb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyBOb24tQVNDSUkgaWRlbnRpZmllcnMgYXJlIHN1cHBvcnRlZCBvbmx5IHdpdGggcHJvdG9jb2xzID49IDMuCi0gICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMzoKLSAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZSwgInV0Zi04IikgKyBiJ1xuJyArCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHNlbGYuc2F2ZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuc2F2ZShuYW1lKQorICAgICAgICAgICAgd3JpdGUoU1RBQ0tfR0xPQkFMKQorICAgICAgICBlbGlmIHNlbGYucHJvdG8gPj0gMzoKKyAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZV9uYW1lLCAidXRmLTgiKSArIGInXG4nICsKICAgICAgICAgICAgICAgICAgIGJ5dGVzKG5hbWUsICJ1dGYtOCIpICsgYidcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBzZWxmLmZpeF9pbXBvcnRzOgotICAgICAgICAgICAgICAgIGlmIChtb2R1bGUsIG5hbWUpIGluIF9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIG5hbWUgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElOR1sobW9kdWxlLCBuYW1lKV0KLSAgICAgICAgICAgICAgICBpZiBtb2R1bGUgaW4gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORzoKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElOR1ttb2R1bGVdCisgICAgICAgICAgICAgICAgcl9uYW1lX21hcHBpbmcgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORworICAgICAgICAgICAgICAgIHJfaW1wb3J0X21hcHBpbmcgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HCisgICAgICAgICAgICAgICAgaWYgKG1vZHVsZV9uYW1lLCBuYW1lKSBpbiByX25hbWVfbWFwcGluZzoKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsIG5hbWUgPSByX25hbWVfbWFwcGluZ1sobW9kdWxlX25hbWUsIG5hbWUpXQorICAgICAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHJfaW1wb3J0X21hcHBpbmc6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gcl9pbXBvcnRfbWFwcGluZ1ttb2R1bGVfbmFtZV0KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3cml0ZShHTE9CQUwgKyBieXRlcyhtb2R1bGUsICJhc2NpaSIpICsgYidcbicgKworICAgICAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZV9uYW1lLCAiYXNjaWkiKSArIGInXG4nICsKICAgICAgICAgICAgICAgICAgICAgICBieXRlcyhuYW1lLCAiYXNjaWkiKSArIGInXG4nKQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKApAQCAtNzM4LDU4ICs5NjQsOCBAQAogICAgICAgICByZXR1cm4gc2VsZi5zYXZlX2dsb2JhbChvYmopCiAKICAgICBkaXNwYXRjaFtGdW5jdGlvblR5cGVdID0gc2F2ZV9nbG9iYWwKLSAgICBkaXNwYXRjaFtCdWlsdGluRnVuY3Rpb25UeXBlXSA9IHNhdmVfZ2xvYmFsCiAgICAgZGlzcGF0Y2hbdHlwZV0gPSBzYXZlX3R5cGUKIAotIyBQaWNrbGluZyBoZWxwZXJzCi0KLWRlZiBfa2VlcF9hbGl2ZSh4LCBtZW1vKToKLSAgICAiIiJLZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHggaW4gdGhlIG1lbW8uCi0KLSAgICBCZWNhdXNlIHdlIHJlbWVtYmVyIG9iamVjdHMgYnkgdGhlaXIgaWQsIHdlIGhhdmUKLSAgICB0byBhc3N1cmUgdGhhdCBwb3NzaWJseSB0ZW1wb3Jhcnkgb2JqZWN0cyBhcmUga2VwdAotICAgIGFsaXZlIGJ5IHJlZmVyZW5jaW5nIHRoZW0uCi0gICAgV2Ugc3RvcmUgYSByZWZlcmVuY2UgYXQgdGhlIGlkIG9mIHRoZSBtZW1vLCB3aGljaCBzaG91bGQKLSAgICBub3JtYWxseSBub3QgYmUgdXNlZCB1bmxlc3Mgc29tZW9uZSB0cmllcyB0byBkZWVwY29weQotICAgIHRoZSBtZW1vIGl0c2VsZi4uLgotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgbWVtb1tpZChtZW1vKV0uYXBwZW5kKHgpCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAjIGFoYSwgdGhpcyBpcyB0aGUgZmlyc3Qgb25lIDotKQotICAgICAgICBtZW1vW2lkKG1lbW8pXT1beF0KLQotCi0jIEEgY2FjaGUgZm9yIHdoaWNobW9kdWxlKCksIG1hcHBpbmcgYSBmdW5jdGlvbiBvYmplY3QgdG8gdGhlIG5hbWUgb2YKLSMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGZvdW5kLgotCi1jbGFzc21hcCA9IHt9ICMgY2FsbGVkIGNsYXNzbWFwIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotCi1kZWYgd2hpY2htb2R1bGUoZnVuYywgZnVuY25hbWUpOgotICAgICIiIkZpZ3VyZSBvdXQgdGhlIG1vZHVsZSBpbiB3aGljaCBhIGZ1bmN0aW9uIG9jY3Vycy4KLQotICAgIFNlYXJjaCBzeXMubW9kdWxlcyBmb3IgdGhlIG1vZHVsZS4KLSAgICBDYWNoZSBpbiBjbGFzc21hcC4KLSAgICBSZXR1cm4gYSBtb2R1bGUgbmFtZS4KLSAgICBJZiB0aGUgZnVuY3Rpb24gY2Fubm90IGJlIGZvdW5kLCByZXR1cm4gIl9fbWFpbl9fIi4KLSAgICAiIiIKLSAgICAjIFB5dGhvbiBmdW5jdGlvbnMgc2hvdWxkIGFsd2F5cyBnZXQgYW4gX19tb2R1bGVfXyBmcm9tIHRoZWlyIGdsb2JhbHMuCi0gICAgbW9kID0gZ2V0YXR0cihmdW5jLCAiX19tb2R1bGVfXyIsIE5vbmUpCi0gICAgaWYgbW9kIGlzIG5vdCBOb25lOgotICAgICAgICByZXR1cm4gbW9kCi0gICAgaWYgZnVuYyBpbiBjbGFzc21hcDoKLSAgICAgICAgcmV0dXJuIGNsYXNzbWFwW2Z1bmNdCi0KLSAgICBmb3IgbmFtZSwgbW9kdWxlIGluIGxpc3Qoc3lzLm1vZHVsZXMuaXRlbXMoKSk6Ci0gICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgY29udGludWUgIyBza2lwIGR1bW15IHBhY2thZ2UgZW50cmllcwotICAgICAgICBpZiBuYW1lICE9ICdfX21haW5fXycgYW5kIGdldGF0dHIobW9kdWxlLCBmdW5jbmFtZSwgTm9uZSkgaXMgZnVuYzoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgbmFtZSA9ICdfX21haW5fXycKLSAgICBjbGFzc21hcFtmdW5jXSA9IG5hbWUKLSAgICByZXR1cm4gbmFtZQotCiAKICMgVW5waWNrbGluZyBtYWNoaW5lcnkKIApAQCAtNzk5LDggKzk3NSwxNCBAQAogICAgICAgICAgICAgICAgICBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgogICAgICAgICAiIiJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKLSAgICAgICAgVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubwotICAgICAgICBwcm90byBhcmd1bWVudCBpcyBuZWVkZWQuCisgICAgICAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28KKyAgICAgICAgbm8gcHJvdG8gYXJndW1lbnQgaXMgbmVlZGVkLgorCisgICAgICAgIFRoZSBhcmd1bWVudCAqZmlsZSogbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdAorICAgICAgICB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzCisgICAgICAgIG5vIGFyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSoKKyAgICAgICAgY2FuIGJlIGEgYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgcmVhZGluZywgYSBpby5CeXRlc0lPCisgICAgICAgIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KIAogICAgICAgICBUaGUgZmlsZS1saWtlIG9iamVjdCBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZAogICAgICAgICB0aGF0IHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQKQEAgLTgwOSwxNiArOTkxLDE3IEBACiAgICAgICAgIHJlYWRpbmcsIGEgQnl0ZXNJTyBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQKICAgICAgICAgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKLSAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAotICAgICAgICB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCi0gICAgICAgIGdlbmVyYXRlZCBieSBQeXRob24gMi54LiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgICAgICAgbWFwIHRoZSBvbGQgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZQotICAgICAgICAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZwotICAgICAgICBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kCi0gICAgICAgICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuCisgICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZAorICAgICAgICAqZXJyb3JzKiwgd2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IKKyAgICAgICAgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsCisgICAgICAgIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzCisgICAgICAgIHVzZWQgaW4gUHl0aG9uIDMuICBUaGUgKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93CisgICAgICAgIHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlCisgICAgICAgIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4gKmVuY29kaW5nKiBjYW4gYmUKKyAgICAgICAgJ2J5dGVzJyB0byByZWFkIHRoZXNlcyA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLnJlYWRsaW5lID0gZmlsZS5yZWFkbGluZQotICAgICAgICBzZWxmLnJlYWQgPSBmaWxlLnJlYWQKKyAgICAgICAgc2VsZi5fZmlsZV9yZWFkbGluZSA9IGZpbGUucmVhZGxpbmUKKyAgICAgICAgc2VsZi5fZmlsZV9yZWFkID0gZmlsZS5yZWFkCiAgICAgICAgIHNlbGYubWVtbyA9IHt9CiAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZwogICAgICAgICBzZWxmLmVycm9ycyA9IGVycm9ycwpAQCAtODMyLDE2ICsxMDE1LDIwIEBACiAgICAgICAgICIiIgogICAgICAgICAjIENoZWNrIHdoZXRoZXIgVW5waWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoaXMgaXMKICAgICAgICAgIyBvbmx5IG5lZWRlZCB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgX3BpY2tsZS5VbnBpY2tsZXIuZHVtcCgpLgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAicmVhZCIpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX2ZpbGVfcmVhZCIpOgogICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJVbnBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLl9faW5pdF9fKCkiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkpCisgICAgICAgIHNlbGYuX3VuZnJhbWVyID0gX1VuZnJhbWVyKHNlbGYuX2ZpbGVfcmVhZCwgc2VsZi5fZmlsZV9yZWFkbGluZSkKKyAgICAgICAgc2VsZi5yZWFkID0gc2VsZi5fdW5mcmFtZXIucmVhZAorICAgICAgICBzZWxmLnJlYWRsaW5lID0gc2VsZi5fdW5mcmFtZXIucmVhZGxpbmUKICAgICAgICAgc2VsZi5tYXJrID0gb2JqZWN0KCkgIyBhbnkgbmV3IHVuaXF1ZSBvYmplY3QKICAgICAgICAgc2VsZi5zdGFjayA9IFtdCiAgICAgICAgIHNlbGYuYXBwZW5kID0gc2VsZi5zdGFjay5hcHBlbmQKKyAgICAgICAgc2VsZi5wcm90byA9IDAKICAgICAgICAgcmVhZCA9IHNlbGYucmVhZAogICAgICAgICBkaXNwYXRjaCA9IHNlbGYuZGlzcGF0Y2gKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gcmVhZCgxKQogICAgICAgICAgICAgICAgIGlmIG5vdCBrZXk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCkBAIC04NzEsMTIgKzEwNTgsMTkgQEAKICAgICBkaXNwYXRjaCA9IHt9CiAKICAgICBkZWYgbG9hZF9wcm90byhzZWxmKToKLSAgICAgICAgcHJvdG8gPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBwcm90byA9IHNlbGYucmVhZCgxKVswXQogICAgICAgICBpZiBub3QgMCA8PSBwcm90byA8PSBISUdIRVNUX1BST1RPQ09MOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sOiAlZCIgJSBwcm90bykKICAgICAgICAgc2VsZi5wcm90byA9IHByb3RvCiAgICAgZGlzcGF0Y2hbUFJPVE9bMF1dID0gbG9hZF9wcm90bwogCisgICAgZGVmIGxvYWRfZnJhbWUoc2VsZik6CisgICAgICAgIGZyYW1lX3NpemUsID0gdW5wYWNrKCc8UScsIHNlbGYucmVhZCg4KSkKKyAgICAgICAgaWYgZnJhbWVfc2l6ZSA+IHN5cy5tYXhzaXplOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZnJhbWUgc2l6ZSA+IHN5cy5tYXhzaXplOiAlZCIgJSBmcmFtZV9zaXplKQorICAgICAgICBzZWxmLl91bmZyYW1lci5sb2FkX2ZyYW1lKGZyYW1lX3NpemUpCisgICAgZGlzcGF0Y2hbRlJBTUVbMF1dID0gbG9hZF9mcmFtZQorCiAgICAgZGVmIGxvYWRfcGVyc2lkKHNlbGYpOgogICAgICAgICBwaWQgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoImFzY2lpIikKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5wZXJzaXN0ZW50X2xvYWQocGlkKSkKQEAgLTkwNiw0MyArMTEwMCw0MCBAQAogICAgICAgICBlbGlmIGRhdGEgPT0gVFJVRVsxOl06CiAgICAgICAgICAgICB2YWwgPSBUcnVlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmFsID0gaW50KGRhdGEsIDApCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICB2YWwgPSBpbnQoZGF0YSwgMCkKKyAgICAgICAgICAgIHZhbCA9IGludChkYXRhLCAwKQogICAgICAgICBzZWxmLmFwcGVuZCh2YWwpCiAgICAgZGlzcGF0Y2hbSU5UWzBdXSA9IGxvYWRfaW50CiAKICAgICBkZWYgbG9hZF9iaW5pbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXBwZW5kKG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKSkKKyAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSlbMF0pCiAgICAgZGlzcGF0Y2hbQklOSU5UWzBdXSA9IGxvYWRfYmluaW50CiAKICAgICBkZWYgbG9hZF9iaW5pbnQxKHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChvcmQoc2VsZi5yZWFkKDEpKSkKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKDEpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVDFbMF1dID0gbG9hZF9iaW5pbnQxCiAKICAgICBkZWYgbG9hZF9iaW5pbnQyKHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChtbG9hZHMoYidpJyArIHNlbGYucmVhZCgyKSArIGInXDAwMFwwMDAnKSkKKyAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc8SCcsIHNlbGYucmVhZCgyKSlbMF0pCiAgICAgZGlzcGF0Y2hbQklOSU5UMlswXV0gPSBsb2FkX2JpbmludDIKIAogICAgIGRlZiBsb2FkX2xvbmcoc2VsZik6Ci0gICAgICAgIHZhbCA9IHNlbGYucmVhZGxpbmUoKVs6LTFdLmRlY29kZSgiYXNjaWkiKQotICAgICAgICBpZiB2YWwgYW5kIHZhbFstMV0gPT0gJ0wnOgorICAgICAgICB2YWwgPSBzZWxmLnJlYWRsaW5lKClbOi0xXQorICAgICAgICBpZiB2YWwgYW5kIHZhbFstMV0gPT0gYidMJ1swXToKICAgICAgICAgICAgIHZhbCA9IHZhbFs6LTFdCiAgICAgICAgIHNlbGYuYXBwZW5kKGludCh2YWwsIDApKQogICAgIGRpc3BhdGNoW0xPTkdbMF1dID0gbG9hZF9sb25nCiAKICAgICBkZWYgbG9hZF9sb25nMShzZWxmKToKLSAgICAgICAgbiA9IG9yZChzZWxmLnJlYWQoMSkpCisgICAgICAgIG4gPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChuKQogICAgICAgICBzZWxmLmFwcGVuZChkZWNvZGVfbG9uZyhkYXRhKSkKICAgICBkaXNwYXRjaFtMT05HMVswXV0gPSBsb2FkX2xvbmcxCiAKICAgICBkZWYgbG9hZF9sb25nNChzZWxmKToKLSAgICAgICAgbiA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBuLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIG4gPCAwOgogICAgICAgICAgICAgIyBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlIC0tIHdlIG5ldmVyIHdyaXRlIG9uZSBsaWtlIHRoaXMKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKQogICAgICAgICBkYXRhID0gc2VsZi5yZWFkKG4pCiAgICAgICAgIHNlbGYuYXBwZW5kKGRlY29kZV9sb25nKGRhdGEpKQogICAgIGRpc3BhdGNoW0xPTkc0WzBdXSA9IGxvYWRfbG9uZzQKQEAgLTk1MSwzOSArMTE0Miw0MyBAQAogICAgICAgICBzZWxmLmFwcGVuZChmbG9hdChzZWxmLnJlYWRsaW5lKClbOi0xXSkpCiAgICAgZGlzcGF0Y2hbRkxPQVRbMF1dID0gbG9hZF9mbG9hdAogCi0gICAgZGVmIGxvYWRfYmluZmxvYXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2spOgorICAgIGRlZiBsb2FkX2JpbmZsb2F0KHNlbGYpOgogICAgICAgICBzZWxmLmFwcGVuZCh1bnBhY2soJz5kJywgc2VsZi5yZWFkKDgpKVswXSkKICAgICBkaXNwYXRjaFtCSU5GTE9BVFswXV0gPSBsb2FkX2JpbmZsb2F0CiAKLSAgICBkZWYgbG9hZF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIG9yaWcgPSBzZWxmLnJlYWRsaW5lKCkKLSAgICAgICAgcmVwID0gb3JpZ1s6LTFdCi0gICAgICAgIGZvciBxIGluIChiJyInLCBiIiciKTogIyBkb3VibGUgb3Igc2luZ2xlIHF1b3RlCi0gICAgICAgICAgICBpZiByZXAuc3RhcnRzd2l0aChxKToKLSAgICAgICAgICAgICAgICBpZiBsZW4ocmVwKSA8IDIgb3Igbm90IHJlcC5lbmRzd2l0aChxKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZSIpCi0gICAgICAgICAgICAgICAgcmVwID0gcmVwW2xlbihxKTotbGVuKHEpXQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgZGVmIF9kZWNvZGVfc3RyaW5nKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIyBVc2VkIHRvIGFsbG93IHN0cmluZ3MgZnJvbSBQeXRob24gMiB0byBiZSBkZWNvZGVkIGVpdGhlciBhcworICAgICAgICAjIGJ5dGVzIG9yIFVuaWNvZGUgc3RyaW5ncy4gIFRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSB3aXRoIHRoZQorICAgICAgICAjIFNUUklORywgQklOU1RSSU5HIGFuZCBTSE9SVF9CSU5TVFJJTkcgb3Bjb2Rlcy4KKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZyA9PSAiYnl0ZXMiOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnNlY3VyZSBzdHJpbmcgcGlja2xlOiAlciIgJSBvcmlnKQotICAgICAgICBzZWxmLmFwcGVuZChjb2RlY3MuZXNjYXBlX2RlY29kZShyZXApWzBdCi0gICAgICAgICAgICAgICAgICAgIC5kZWNvZGUoc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKKworICAgIGRlZiBsb2FkX3N0cmluZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYucmVhZGxpbmUoKVs6LTFdCisgICAgICAgICMgU3RyaXAgb3V0ZXJtb3N0IHF1b3RlcworICAgICAgICBpZiBsZW4oZGF0YSkgPj0gMiBhbmQgZGF0YVswXSA9PSBkYXRhWy0xXSBhbmQgZGF0YVswXSBpbiBiJyJcJyc6CisgICAgICAgICAgICBkYXRhID0gZGF0YVsxOi0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJ0aGUgU1RSSU5HIG9wY29kZSBhcmd1bWVudCBtdXN0IGJlIHF1b3RlZCIpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYuX2RlY29kZV9zdHJpbmcoY29kZWNzLmVzY2FwZV9kZWNvZGUoZGF0YSlbMF0pKQogICAgIGRpc3BhdGNoW1NUUklOR1swXV0gPSBsb2FkX3N0cmluZwogCiAgICAgZGVmIGxvYWRfYmluc3RyaW5nKHNlbGYpOgogICAgICAgICAjIERlcHJlY2F0ZWQgQklOU1RSSU5HIHVzZXMgc2lnbmVkIDMyLWJpdCBsZW5ndGgKLSAgICAgICAgbGVuID0gbWxvYWRzKGInaScgKyBzZWxmLnJlYWQoNCkpCisgICAgICAgIGxlbiwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBsZW4gPCAwOgotICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5TVFJJTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlNUUklORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKQogICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbikKLSAgICAgICAgdmFsdWUgPSBzdHIoZGF0YSwgc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCi0gICAgICAgIHNlbGYuYXBwZW5kKHZhbHVlKQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLl9kZWNvZGVfc3RyaW5nKGRhdGEpKQogICAgIGRpc3BhdGNoW0JJTlNUUklOR1swXV0gPSBsb2FkX2JpbnN0cmluZwogCi0gICAgZGVmIGxvYWRfYmluYnl0ZXMoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2JpbmJ5dGVzKHNlbGYpOgogICAgICAgICBsZW4sID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuID4gbWF4c2l6ZToKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOQllURVMgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSk7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTkJZVEVTIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSkKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKGxlbikpCiAgICAgZGlzcGF0Y2hbQklOQllURVNbMF1dID0gbG9hZF9iaW5ieXRlcwogCkBAIC05OTEsMjUgKzExODYsMzggQEAKICAgICAgICAgc2VsZi5hcHBlbmQoc3RyKHNlbGYucmVhZGxpbmUoKVs6LTFdLCAncmF3LXVuaWNvZGUtZXNjYXBlJykpCiAgICAgZGlzcGF0Y2hbVU5JQ09ERVswXV0gPSBsb2FkX3VuaWNvZGUKIAotICAgIGRlZiBsb2FkX2JpbnVuaWNvZGUoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2JpbnVuaWNvZGUoc2VsZik6CiAgICAgICAgIGxlbiwgPSB1bnBhY2soJzxJJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBsZW4gPiBtYXhzaXplOgotICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5VTklDT0RFIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICVkIGJ5dGVzIiAlIG1heHNpemUpOworICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5VTklDT0RFIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSkKICAgICAgICAgc2VsZi5hcHBlbmQoc3RyKHNlbGYucmVhZChsZW4pLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpKQogICAgIGRpc3BhdGNoW0JJTlVOSUNPREVbMF1dID0gbG9hZF9iaW51bmljb2RlCiAKKyAgICBkZWYgbG9hZF9iaW51bmljb2RlOChzZWxmKToKKyAgICAgICAgbGVuLCA9IHVucGFjaygnPFEnLCBzZWxmLnJlYWQoOCkpCisgICAgICAgIGlmIGxlbiA+IG1heHNpemU6CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlVOSUNPREU4IGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSkKKyAgICAgICAgc2VsZi5hcHBlbmQoc3RyKHNlbGYucmVhZChsZW4pLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpKQorICAgIGRpc3BhdGNoW0JJTlVOSUNPREU4WzBdXSA9IGxvYWRfYmludW5pY29kZTgKKwogICAgIGRlZiBsb2FkX3Nob3J0X2JpbnN0cmluZyhzZWxmKToKLSAgICAgICAgbGVuID0gb3JkKHNlbGYucmVhZCgxKSkKLSAgICAgICAgZGF0YSA9IGJ5dGVzKHNlbGYucmVhZChsZW4pKQotICAgICAgICB2YWx1ZSA9IHN0cihkYXRhLCBzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKLSAgICAgICAgc2VsZi5hcHBlbmQodmFsdWUpCisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbikKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5fZGVjb2RlX3N0cmluZyhkYXRhKSkKICAgICBkaXNwYXRjaFtTSE9SVF9CSU5TVFJJTkdbMF1dID0gbG9hZF9zaG9ydF9iaW5zdHJpbmcKIAogICAgIGRlZiBsb2FkX3Nob3J0X2JpbmJ5dGVzKHNlbGYpOgotICAgICAgICBsZW4gPSBvcmQoc2VsZi5yZWFkKDEpKQotICAgICAgICBzZWxmLmFwcGVuZChieXRlcyhzZWxmLnJlYWQobGVuKSkpCisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLnJlYWQobGVuKSkKICAgICBkaXNwYXRjaFtTSE9SVF9CSU5CWVRFU1swXV0gPSBsb2FkX3Nob3J0X2JpbmJ5dGVzCiAKKyAgICBkZWYgbG9hZF9zaG9ydF9iaW51bmljb2RlKHNlbGYpOgorICAgICAgICBsZW4gPSBzZWxmLnJlYWQoMSlbMF0KKyAgICAgICAgc2VsZi5hcHBlbmQoc3RyKHNlbGYucmVhZChsZW4pLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpKQorICAgIGRpc3BhdGNoW1NIT1JUX0JJTlVOSUNPREVbMF1dID0gbG9hZF9zaG9ydF9iaW51bmljb2RlCisKICAgICBkZWYgbG9hZF90dXBsZShzZWxmKToKICAgICAgICAgayA9IHNlbGYubWFya2VyKCkKICAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbdHVwbGUoc2VsZi5zdGFja1trKzE6XSldCkBAIC0xMDM5LDYgKzEyNDcsMTUgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoe30pCiAgICAgZGlzcGF0Y2hbRU1QVFlfRElDVFswXV0gPSBsb2FkX2VtcHR5X2RpY3Rpb25hcnkKIAorICAgIGRlZiBsb2FkX2VtcHR5X3NldChzZWxmKToKKyAgICAgICAgc2VsZi5hcHBlbmQoc2V0KCkpCisgICAgZGlzcGF0Y2hbRU1QVFlfU0VUWzBdXSA9IGxvYWRfZW1wdHlfc2V0CisKKyAgICBkZWYgbG9hZF9mcm96ZW5zZXQoc2VsZik6CisgICAgICAgIGsgPSBzZWxmLm1hcmtlcigpCisgICAgICAgIHNlbGYuc3RhY2tbazpdID0gW2Zyb3plbnNldChzZWxmLnN0YWNrW2srMTpdKV0KKyAgICBkaXNwYXRjaFtGUk9aRU5TRVRbMF1dID0gbG9hZF9mcm96ZW5zZXQKKwogICAgIGRlZiBsb2FkX2xpc3Qoc2VsZik6CiAgICAgICAgIGsgPSBzZWxmLm1hcmtlcigpCiAgICAgICAgIHNlbGYuc3RhY2tbazpdID0gW3NlbGYuc3RhY2tbaysxOl1dCkBAIC0xMDQ2LDEyICsxMjYzLDkgQEAKIAogICAgIGRlZiBsb2FkX2RpY3Qoc2VsZik6CiAgICAgICAgIGsgPSBzZWxmLm1hcmtlcigpCi0gICAgICAgIGQgPSB7fQogICAgICAgICBpdGVtcyA9IHNlbGYuc3RhY2tbaysxOl0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGl0ZW1zKSwgMik6Ci0gICAgICAgICAgICBrZXkgPSBpdGVtc1tpXQotICAgICAgICAgICAgdmFsdWUgPSBpdGVtc1tpKzFdCi0gICAgICAgICAgICBkW2tleV0gPSB2YWx1ZQorICAgICAgICBkID0ge2l0ZW1zW2ldOiBpdGVtc1tpKzFdCisgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGl0ZW1zKSwgMil9CiAgICAgICAgIHNlbGYuc3RhY2tbazpdID0gW2RdCiAgICAgZGlzcGF0Y2hbRElDVFswXV0gPSBsb2FkX2RpY3QKIApAQCAtMTA5MCwxMSArMTMwNCwxOSBAQAogCiAgICAgZGVmIGxvYWRfbmV3b2JqKHNlbGYpOgogICAgICAgICBhcmdzID0gc2VsZi5zdGFjay5wb3AoKQotICAgICAgICBjbHMgPSBzZWxmLnN0YWNrWy0xXQorICAgICAgICBjbHMgPSBzZWxmLnN0YWNrLnBvcCgpCiAgICAgICAgIG9iaiA9IGNscy5fX25ld19fKGNscywgKmFyZ3MpCi0gICAgICAgIHNlbGYuc3RhY2tbLTFdID0gb2JqCisgICAgICAgIHNlbGYuYXBwZW5kKG9iaikKICAgICBkaXNwYXRjaFtORVdPQkpbMF1dID0gbG9hZF9uZXdvYmoKIAorICAgIGRlZiBsb2FkX25ld29ial9leChzZWxmKToKKyAgICAgICAga3dhcmdzID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBhcmdzID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBjbHMgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIG9iaiA9IGNscy5fX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFwcGVuZChvYmopCisgICAgZGlzcGF0Y2hbTkVXT0JKX0VYWzBdXSA9IGxvYWRfbmV3b2JqX2V4CisKICAgICBkZWYgbG9hZF9nbG9iYWwoc2VsZik6CiAgICAgICAgIG1vZHVsZSA9IHNlbGYucmVhZGxpbmUoKVs6LTFdLmRlY29kZSgidXRmLTgiKQogICAgICAgICBuYW1lID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJ1dGYtOCIpCkBAIC0xMTAyLDE4ICsxMzI0LDI2IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKGtsYXNzKQogICAgIGRpc3BhdGNoW0dMT0JBTFswXV0gPSBsb2FkX2dsb2JhbAogCisgICAgZGVmIGxvYWRfc3RhY2tfZ2xvYmFsKHNlbGYpOgorICAgICAgICBuYW1lID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBtb2R1bGUgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIGlmIHR5cGUobmFtZSkgaXMgbm90IHN0ciBvciB0eXBlKG1vZHVsZSkgaXMgbm90IHN0cjoKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiU1RBQ0tfR0xPQkFMIHJlcXVpcmVzIHN0ciIpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYuZmluZF9jbGFzcyhtb2R1bGUsIG5hbWUpKQorICAgIGRpc3BhdGNoW1NUQUNLX0dMT0JBTFswXV0gPSBsb2FkX3N0YWNrX2dsb2JhbAorCiAgICAgZGVmIGxvYWRfZXh0MShzZWxmKToKLSAgICAgICAgY29kZSA9IG9yZChzZWxmLnJlYWQoMSkpCisgICAgICAgIGNvZGUgPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgc2VsZi5nZXRfZXh0ZW5zaW9uKGNvZGUpCiAgICAgZGlzcGF0Y2hbRVhUMVswXV0gPSBsb2FkX2V4dDEKIAogICAgIGRlZiBsb2FkX2V4dDIoc2VsZik6Ci0gICAgICAgIGNvZGUgPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCgyKSArIGInXDAwMFwwMDAnKQorICAgICAgICBjb2RlLCA9IHVucGFjaygnPEgnLCBzZWxmLnJlYWQoMikpCiAgICAgICAgIHNlbGYuZ2V0X2V4dGVuc2lvbihjb2RlKQogICAgIGRpc3BhdGNoW0VYVDJbMF1dID0gbG9hZF9leHQyCiAKICAgICBkZWYgbG9hZF9leHQ0KHNlbGYpOgotICAgICAgICBjb2RlID0gbWxvYWRzKGInaScgKyBzZWxmLnJlYWQoNCkpCisgICAgICAgIGNvZGUsID0gdW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgc2VsZi5nZXRfZXh0ZW5zaW9uKGNvZGUpCiAgICAgZGlzcGF0Y2hbRVhUNFswXV0gPSBsb2FkX2V4dDQKIApAQCAtMTEyNyw3ICsxMzU3LDcgQEAKICAgICAgICAgaWYgbm90IGtleToKICAgICAgICAgICAgIGlmIGNvZGUgPD0gMDogIyBub3RlIHRoYXQgMCBpcyBmb3JiaWRkZW4KICAgICAgICAgICAgICAgICAjIENvcnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUuCi0gICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpOworICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiRVhUIHNwZWNpZmllcyBjb2RlIDw9IDAiKQogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5yZWdpc3RlcmVkIGV4dGVuc2lvbiBjb2RlICVkIiAlIGNvZGUpCiAgICAgICAgIG9iaiA9IHNlbGYuZmluZF9jbGFzcygqa2V5KQogICAgICAgICBfZXh0ZW5zaW9uX2NhY2hlW2NvZGVdID0gb2JqCkBAIC0xMTQxLDkgKzEzNzEsOCBAQAogICAgICAgICAgICAgaWYgbW9kdWxlIGluIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HOgogICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HW21vZHVsZV0KICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGUsIGxldmVsPTApCi0gICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZHVsZV0KLSAgICAgICAga2xhc3MgPSBnZXRhdHRyKG1vZCwgbmFtZSkKLSAgICAgICAgcmV0dXJuIGtsYXNzCisgICAgICAgIHJldHVybiBfZ2V0YXR0cmlidXRlKHN5cy5tb2R1bGVzW21vZHVsZV0sIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3F1YWxuYW1lPXNlbGYucHJvdG8gPj0gNCkKIAogICAgIGRlZiBsb2FkX3JlZHVjZShzZWxmKToKICAgICAgICAgc3RhY2sgPSBzZWxmLnN0YWNrCkBAIC0xMTgxLDcgKzE0MTAsNyBAQAogICAgICAgICBzZWxmLmFwcGVuZChzZWxmLm1lbW9baV0pCiAgICAgZGlzcGF0Y2hbQklOR0VUWzBdXSA9IGxvYWRfYmluZ2V0CiAKLSAgICBkZWYgbG9hZF9sb25nX2JpbmdldChzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjayk6CisgICAgZGVmIGxvYWRfbG9uZ19iaW5nZXQoc2VsZik6CiAgICAgICAgIGksID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5tZW1vW2ldKQogICAgIGRpc3BhdGNoW0xPTkdfQklOR0VUWzBdXSA9IGxvYWRfbG9uZ19iaW5nZXQKQEAgLTEyMDAsMTMgKzE0MjksMTggQEAKICAgICAgICAgc2VsZi5tZW1vW2ldID0gc2VsZi5zdGFja1stMV0KICAgICBkaXNwYXRjaFtCSU5QVVRbMF1dID0gbG9hZF9iaW5wdXQKIAotICAgIGRlZiBsb2FkX2xvbmdfYmlucHV0KHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrLCBtYXhzaXplPXN5cy5tYXhzaXplKToKKyAgICBkZWYgbG9hZF9sb25nX2JpbnB1dChzZWxmKToKICAgICAgICAgaSwgPSB1bnBhY2soJzxJJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBpID4gbWF4c2l6ZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIExPTkdfQklOUFVUIGFyZ3VtZW50IikKICAgICAgICAgc2VsZi5tZW1vW2ldID0gc2VsZi5zdGFja1stMV0KICAgICBkaXNwYXRjaFtMT05HX0JJTlBVVFswXV0gPSBsb2FkX2xvbmdfYmlucHV0CiAKKyAgICBkZWYgbG9hZF9tZW1vaXplKHNlbGYpOgorICAgICAgICBtZW1vID0gc2VsZi5tZW1vCisgICAgICAgIG1lbW9bbGVuKG1lbW8pXSA9IHNlbGYuc3RhY2tbLTFdCisgICAgZGlzcGF0Y2hbTUVNT0laRVswXV0gPSBsb2FkX21lbW9pemUKKwogICAgIGRlZiBsb2FkX2FwcGVuZChzZWxmKToKICAgICAgICAgc3RhY2sgPSBzZWxmLnN0YWNrCiAgICAgICAgIHZhbHVlID0gc3RhY2sucG9wKCkKQEAgLTEyNDYsMTIgKzE0ODAsMjYgQEAKICAgICAgICAgZGVsIHN0YWNrW21hcms6XQogICAgIGRpc3BhdGNoW1NFVElURU1TWzBdXSA9IGxvYWRfc2V0aXRlbXMKIAorICAgIGRlZiBsb2FkX2FkZGl0ZW1zKHNlbGYpOgorICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKKyAgICAgICAgbWFyayA9IHNlbGYubWFya2VyKCkKKyAgICAgICAgc2V0X29iaiA9IHN0YWNrW21hcmsgLSAxXQorICAgICAgICBpdGVtcyA9IHN0YWNrW21hcmsgKyAxOl0KKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXRfb2JqLCBzZXQpOgorICAgICAgICAgICAgc2V0X29iai51cGRhdGUoaXRlbXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhZGQgPSBzZXRfb2JqLmFkZAorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgYWRkKGl0ZW0pCisgICAgICAgIGRlbCBzdGFja1ttYXJrOl0KKyAgICBkaXNwYXRjaFtBRERJVEVNU1swXV0gPSBsb2FkX2FkZGl0ZW1zCisKICAgICBkZWYgbG9hZF9idWlsZChzZWxmKToKICAgICAgICAgc3RhY2sgPSBzZWxmLnN0YWNrCiAgICAgICAgIHN0YXRlID0gc3RhY2sucG9wKCkKICAgICAgICAgaW5zdCA9IHN0YWNrWy0xXQogICAgICAgICBzZXRzdGF0ZSA9IGdldGF0dHIoaW5zdCwgIl9fc2V0c3RhdGVfXyIsIE5vbmUpCi0gICAgICAgIGlmIHNldHN0YXRlOgorICAgICAgICBpZiBzZXRzdGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNldHN0YXRlKHN0YXRlKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNsb3RzdGF0ZSA9IE5vbmUKQEAgLTEyNzksODYgKzE1MjcsNDYgQEAKICAgICAgICAgcmFpc2UgX1N0b3AodmFsdWUpCiAgICAgZGlzcGF0Y2hbU1RPUFswXV0gPSBsb2FkX3N0b3AKIAotIyBFbmNvZGUvZGVjb2RlIGludHMuCi0KLWRlZiBlbmNvZGVfbG9uZyh4KToKLSAgICByIiIiRW5jb2RlIGEgbG9uZyB0byBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgotICAgIE5vdGUgdGhhdCAwIGlzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm5pbmcgYW4gZW1wdHkgc3RyaW5nLCB0byBzYXZlIGEKLSAgICBieXRlIGluIHRoZSBMT05HMSBwaWNrbGluZyBjb250ZXh0LgotCi0gICAgPj4+IGVuY29kZV9sb25nKDApCi0gICAgYicnCi0gICAgPj4+IGVuY29kZV9sb25nKDI1NSkKLSAgICBiJ1x4ZmZceDAwJwotICAgID4+PiBlbmNvZGVfbG9uZygzMjc2NykKLSAgICBiJ1x4ZmZceDdmJwotICAgID4+PiBlbmNvZGVfbG9uZygtMjU2KQotICAgIGInXHgwMFx4ZmYnCi0gICAgPj4+IGVuY29kZV9sb25nKC0zMjc2OCkKLSAgICBiJ1x4MDBceDgwJwotICAgID4+PiBlbmNvZGVfbG9uZygtMTI4KQotICAgIGInXHg4MCcKLSAgICA+Pj4gZW5jb2RlX2xvbmcoMTI3KQotICAgIGInXHg3ZicKLSAgICA+Pj4KLSAgICAiIiIKLSAgICBpZiB4ID09IDA6Ci0gICAgICAgIHJldHVybiBiJycKLSAgICBuYnl0ZXMgPSAoeC5iaXRfbGVuZ3RoKCkgPj4gMykgKyAxCi0gICAgcmVzdWx0ID0geC50b19ieXRlcyhuYnl0ZXMsIGJ5dGVvcmRlcj0nbGl0dGxlJywgc2lnbmVkPVRydWUpCi0gICAgaWYgeCA8IDAgYW5kIG5ieXRlcyA+IDE6Ci0gICAgICAgIGlmIHJlc3VsdFstMV0gPT0gMHhmZiBhbmQgKHJlc3VsdFstMl0gJiAweDgwKSAhPSAwOgotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotMV0KLSAgICByZXR1cm4gcmVzdWx0Ci0KLWRlZiBkZWNvZGVfbG9uZyhkYXRhKToKLSAgICByIiIiRGVjb2RlIGFuIGludCBmcm9tIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCi0KLSAgICA+Pj4gZGVjb2RlX2xvbmcoYicnKQotICAgIDAKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceGZmXHgwMCIpCi0gICAgMjU1Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4N2YiKQotICAgIDMyNzY3Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ZmYiKQotICAgIC0yNTYKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDAwXHg4MCIpCi0gICAgLTMyNzY4Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHg4MCIpCi0gICAgLTEyOAotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4N2YiKQotICAgIDEyNwotICAgICIiIgotICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhkYXRhLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQogCiAjIFNob3J0aGFuZHMKIAotZGVmIGR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKToKLSAgICBQaWNrbGVyKGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cykuZHVtcChvYmopCitkZWYgX2R1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKToKKyAgICBfUGlja2xlcihmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMpLmR1bXAob2JqKQogCi1kZWYgZHVtcHMob2JqLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKToKK2RlZiBfZHVtcHMob2JqLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKToKICAgICBmID0gaW8uQnl0ZXNJTygpCi0gICAgUGlja2xlcihmLCBwcm90b2NvbCwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMpLmR1bXAob2JqKQorICAgIF9QaWNrbGVyKGYsIHByb3RvY29sLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cykuZHVtcChvYmopCiAgICAgcmVzID0gZi5nZXR2YWx1ZSgpCiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzLCBieXRlc190eXBlcykKICAgICByZXR1cm4gcmVzCiAKLWRlZiBsb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6Ci0gICAgcmV0dXJuIFVucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKK2RlZiBfbG9hZChmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgorICAgIHJldHVybiBfVW5waWNrbGVyKGZpbGUsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzLAogICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpLmxvYWQoKQogCi1kZWYgbG9hZHMocywgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKK2RlZiBfbG9hZHMocywgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKICAgICBpZiBpc2luc3RhbmNlKHMsIHN0cik6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2FuJ3QgbG9hZCBwaWNrbGUgZnJvbSB1bmljb2RlIHN0cmluZyIpCiAgICAgZmlsZSA9IGlvLkJ5dGVzSU8ocykKLSAgICByZXR1cm4gVW5waWNrbGVyKGZpbGUsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzLAotICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpLmxvYWQoKQorICAgIHJldHVybiBfVW5waWNrbGVyKGZpbGUsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzLAorICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKS5sb2FkKCkKIAogIyBVc2UgdGhlIGZhc3RlciBfcGlja2xlIGlmIHBvc3NpYmxlCiB0cnk6Ci0gICAgZnJvbSBfcGlja2xlIGltcG9ydCAqCisgICAgZnJvbSBfcGlja2xlIGltcG9ydCAoCisgICAgICAgIFBpY2tsZUVycm9yLAorICAgICAgICBQaWNrbGluZ0Vycm9yLAorICAgICAgICBVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZXIsCisgICAgICAgIFVucGlja2xlciwKKyAgICAgICAgZHVtcCwKKyAgICAgICAgZHVtcHMsCisgICAgICAgIGxvYWQsCisgICAgICAgIGxvYWRzCisgICAgKQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIFBpY2tsZXIsIFVucGlja2xlciA9IF9QaWNrbGVyLCBfVW5waWNrbGVyCisgICAgZHVtcCwgZHVtcHMsIGxvYWQsIGxvYWRzID0gX2R1bXAsIF9kdW1wcywgX2xvYWQsIF9sb2FkcwogCiAjIERvY3Rlc3QKIGRlZiBfdGVzdCgpOgpkaWZmIC0tZ2l0IGEvTGliL3BpY2tsZXRvb2xzLnB5IGIvTGliL3BpY2tsZXRvb2xzLnB5CmluZGV4IDYxMmZhOGYuLjcxYzJhYTEgMTAwNjQ0Ci0tLSBhL0xpYi9waWNrbGV0b29scy5weQorKysgYi9MaWIvcGlja2xldG9vbHMucHkKQEAgLTExLDYgKzExLDcgQEAKICcnJwogCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaW8KIGltcG9ydCBwaWNrbGUKIGltcG9ydCByZQogaW1wb3J0IHN5cwpAQCAtMzQsMTE5ICszNSwxMTggQEAKICMgICBieSBhIGxhdGVyIEdFVC4KIAogCi0iIiIKLSJBIHBpY2tsZSIgaXMgYSBwcm9ncmFtIGZvciBhIHZpcnR1YWwgcGlja2xlIG1hY2hpbmUgKFBNLCBidXQgbW9yZSBhY2N1cmF0ZWx5Ci1jYWxsZWQgYW4gdW5waWNrbGluZyBtYWNoaW5lKS4gIEl0J3MgYSBzZXF1ZW5jZSBvZiBvcGNvZGVzLCBpbnRlcnByZXRlZCBieSB0aGUKLVBNLCBidWlsZGluZyBhbiBhcmJpdHJhcmlseSBjb21wbGV4IFB5dGhvbiBvYmplY3QuCisjICJBIHBpY2tsZSIgaXMgYSBwcm9ncmFtIGZvciBhIHZpcnR1YWwgcGlja2xlIG1hY2hpbmUgKFBNLCBidXQgbW9yZSBhY2N1cmF0ZWx5CisjIGNhbGxlZCBhbiB1bnBpY2tsaW5nIG1hY2hpbmUpLiAgSXQncyBhIHNlcXVlbmNlIG9mIG9wY29kZXMsIGludGVycHJldGVkIGJ5IHRoZQorIyBQTSwgYnVpbGRpbmcgYW4gYXJiaXRyYXJpbHkgY29tcGxleCBQeXRob24gb2JqZWN0LgorIworIyBGb3IgdGhlIG1vc3QgcGFydCwgdGhlIFBNIGlzIHZlcnkgc2ltcGxlOiAgdGhlcmUgYXJlIG5vIGxvb3BpbmcsIHRlc3RpbmcsIG9yCisjIGNvbmRpdGlvbmFsIGluc3RydWN0aW9ucywgbm8gYXJpdGhtZXRpYyBhbmQgbm8gZnVuY3Rpb24gY2FsbHMuICBPcGNvZGVzIGFyZQorIyBleGVjdXRlZCBvbmNlIGVhY2gsIGZyb20gZmlyc3QgdG8gbGFzdCwgdW50aWwgYSBTVE9QIG9wY29kZSBpcyByZWFjaGVkLgorIworIyBUaGUgUE0gaGFzIHR3byBkYXRhIGFyZWFzLCAidGhlIHN0YWNrIiBhbmQgInRoZSBtZW1vIi4KKyMKKyMgTWFueSBvcGNvZGVzIHB1c2ggUHl0aG9uIG9iamVjdHMgb250byB0aGUgc3RhY2s7IGUuZy4sIElOVCBwdXNoZXMgYSBQeXRob24KKyMgaW50ZWdlciBvYmplY3Qgb24gdGhlIHN0YWNrLCB3aG9zZSB2YWx1ZSBpcyBnb3R0ZW4gZnJvbSBhIGRlY2ltYWwgc3RyaW5nCisjIGxpdGVyYWwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBJTlQgb3Bjb2RlIGluIHRoZSBwaWNrbGUgYnl0ZXN0cmVhbS4gIE90aGVyCisjIG9wY29kZXMgdGFrZSBQeXRob24gb2JqZWN0cyBvZmYgdGhlIHN0YWNrLiAgVGhlIHJlc3VsdCBvZiB1bnBpY2tsaW5nIGlzCisjIHdoYXRldmVyIG9iamVjdCBpcyBsZWZ0IG9uIHRoZSBzdGFjayB3aGVuIHRoZSBmaW5hbCBTVE9QIG9wY29kZSBpcyBleGVjdXRlZC4KKyMKKyMgVGhlIG1lbW8gaXMgc2ltcGx5IGFuIGFycmF5IG9mIG9iamVjdHMsIG9yIGl0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhIGRpY3QKKyMgbWFwcGluZyBsaXR0bGUgaW50ZWdlcnMgdG8gb2JqZWN0cy4gIFRoZSBtZW1vIHNlcnZlcyBhcyB0aGUgUE0ncyAibG9uZyB0ZXJtCisjIG1lbW9yeSIsIGFuZCB0aGUgbGl0dGxlIGludGVnZXJzIGluZGV4aW5nIHRoZSBtZW1vIGFyZSBha2luIHRvIHZhcmlhYmxlCisjIG5hbWVzLiAgU29tZSBvcGNvZGVzIHBvcCBhIHN0YWNrIG9iamVjdCBpbnRvIHRoZSBtZW1vIGF0IGEgZ2l2ZW4gaW5kZXgsCisjIGFuZCBvdGhlcnMgcHVzaCBhIG1lbW8gb2JqZWN0IGF0IGEgZ2l2ZW4gaW5kZXggb250byB0aGUgc3RhY2sgYWdhaW4uCisjCisjIEF0IGhlYXJ0LCB0aGF0J3MgYWxsIHRoZSBQTSBoYXMuICBTdWJ0bGV0aWVzIGFyaXNlIGZvciB0aGVzZSByZWFzb25zOgorIworIyArIE9iamVjdCBpZGVudGl0eS4gIE9iamVjdHMgY2FuIGJlIGFyYml0cmFyaWx5IGNvbXBsZXgsIGFuZCBzdWJvYmplY3RzCisjICAgbWF5IGJlIHNoYXJlZCAoZm9yIGV4YW1wbGUsIHRoZSBsaXN0IFthLCBhXSByZWZlcnMgdG8gdGhlIHNhbWUgb2JqZWN0IGEKKyMgICB0d2ljZSkuICBJdCBjYW4gYmUgdml0YWwgdGhhdCB1bnBpY2tsaW5nIHJlY3JlYXRlIGFuIGlzb21vcnBoaWMgb2JqZWN0CisjICAgZ3JhcGgsIGZhaXRoZnVsbHkgcmVwcm9kdWNpbmcgc2hhcmluZy4KKyMKKyMgKyBSZWN1cnNpdmUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBhZnRlciAiTCA9IFtdOyBMLmFwcGVuZChMKSIsIEwgaXMgYQorIyAgIGxpc3QsIGFuZCBMWzBdIGlzIHRoZSBzYW1lIGxpc3QuICBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIG9iamVjdCBpZGVudGl0eQorIyAgIHBvaW50LCBhbmQgc29tZSBzZXF1ZW5jZXMgb2YgcGlja2xlIG9wY29kZXMgYXJlIHN1YnRsZSBpbiBvcmRlciB0bworIyAgIGdldCB0aGUgcmlnaHQgcmVzdWx0IGluIGFsbCBjYXNlcy4KKyMKKyMgKyBUaGluZ3MgcGlja2xlIGRvZXNuJ3Qga25vdyBldmVyeXRoaW5nIGFib3V0LiAgRXhhbXBsZXMgb2YgdGhpbmdzIHBpY2tsZQorIyAgIGRvZXMga25vdyBldmVyeXRoaW5nIGFib3V0IGFyZSBQeXRob24ncyBidWlsdGluIHNjYWxhciBhbmQgY29udGFpbmVyCisjICAgdHlwZXMsIGxpa2UgaW50cyBhbmQgdHVwbGVzLiAgVGhleSBnZW5lcmFsbHkgaGF2ZSBvcGNvZGVzIGRlZGljYXRlZCB0bworIyAgIHRoZW0uICBGb3IgdGhpbmdzIGxpa2UgbW9kdWxlIHJlZmVyZW5jZXMgYW5kIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQKKyMgICBjbGFzc2VzLCBwaWNrbGUncyBrbm93bGVkZ2UgaXMgbGltaXRlZC4gIEhpc3RvcmljYWxseSwgbWFueSBlbmhhbmNlbWVudHMKKyMgICBoYXZlIGJlZW4gbWFkZSB0byB0aGUgcGlja2xlIHByb3RvY29sIGluIG9yZGVyIHRvIGRvIGEgYmV0dGVyIChmYXN0ZXIsCisjICAgYW5kL29yIG1vcmUgY29tcGFjdCkgam9iIG9uIHRob3NlLgorIworIyArIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIG1pY3JvLW9wdGltaXphdGlvbi4gIEFzIGV4cGxhaW5lZCBiZWxvdywKKyMgICBwaWNrbGUgb3Bjb2RlcyBuZXZlciBnbyBhd2F5LCBub3QgZXZlbiB3aGVuIGJldHRlciB3YXlzIHRvIGRvIGEgdGhpbmcKKyMgICBnZXQgaW52ZW50ZWQuICBUaGUgcmVwZXJ0b2lyZSBvZiB0aGUgUE0ganVzdCBrZWVwcyBncm93aW5nIG92ZXIgdGltZS4KKyMgICBGb3IgZXhhbXBsZSwgcHJvdG9jb2wgMCBoYWQgdHdvIG9wY29kZXMgZm9yIGJ1aWxkaW5nIFB5dGhvbiBpbnRlZ2VycyAoSU5UCisjICAgYW5kIExPTkcpLCBwcm90b2NvbCAxIGFkZGVkIHRocmVlIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mIHNob3J0CisjICAgaW50ZWdlcnMsIGFuZCBwcm90b2NvbCAyIGFkZGVkIHR3byBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZgorIyAgIGxvbmcgaW50ZWdlcnMgKGJlZm9yZSBwcm90b2NvbCAyLCB0aGUgb25seSB3YXlzIHRvIHBpY2tsZSBhIFB5dGhvbiBsb25nCisjICAgdG9vayB0aW1lIHF1YWRyYXRpYyBpbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cywgZm9yIGJvdGggcGlja2xpbmcgYW5kCisjICAgdW5waWNrbGluZykuICAiT3Bjb2RlIGJsb2F0IiBpc24ndCBzbyBtdWNoIGEgc3VidGxldHkgYXMgYSBzb3VyY2Ugb2YKKyMgICB3ZWFyeWluZyBjb21wbGljYXRpb24uCisjCisjCisjIFBpY2tsZSBwcm90b2NvbHM6CisjCisjIEZvciBjb21wYXRpYmlsaXR5LCB0aGUgbWVhbmluZyBvZiBhIHBpY2tsZSBvcGNvZGUgbmV2ZXIgY2hhbmdlcy4gIEluc3RlYWQgbmV3CisjIHBpY2tsZSBvcGNvZGVzIGdldCBhZGRlZCwgYW5kIGVhY2ggdmVyc2lvbidzIHVucGlja2xlciBjYW4gaGFuZGxlIGFsbCB0aGUKKyMgcGlja2xlIG9wY29kZXMgaW4gYWxsIHByb3RvY29sIHZlcnNpb25zIHRvIGRhdGUuICBTbyBvbGQgcGlja2xlcyBjb250aW51ZSB0bworIyBiZSByZWFkYWJsZSBmb3JldmVyLiAgVGhlIHBpY2tsZXIgY2FuIGdlbmVyYWxseSBiZSB0b2xkIHRvIHJlc3RyaWN0IGl0c2VsZiB0bworIyB0aGUgc3Vic2V0IG9mIG9wY29kZXMgYXZhaWxhYmxlIHVuZGVyIHByZXZpb3VzIHByb3RvY29sIHZlcnNpb25zIHRvbywgc28gdGhhdAorIyB1c2VycyBjYW4gY3JlYXRlIHBpY2tsZXMgdW5kZXIgdGhlIGN1cnJlbnQgdmVyc2lvbiByZWFkYWJsZSBieSBvbGRlcgorIyB2ZXJzaW9ucy4gIEhvd2V2ZXIsIGEgcGlja2xlIGRvZXMgbm90IGNvbnRhaW4gaXRzIHZlcnNpb24gbnVtYmVyIGVtYmVkZGVkCisjIHdpdGhpbiBpdC4gIElmIGFuIG9sZGVyIHVucGlja2xlciB0cmllcyB0byByZWFkIGEgcGlja2xlIHVzaW5nIGEgbGF0ZXIKKyMgcHJvdG9jb2wsIHRoZSByZXN1bHQgaXMgbW9zdCBsaWtlbHkgYW4gZXhjZXB0aW9uIGR1ZSB0byBzZWVpbmcgYW4gdW5rbm93biAoaW4KKyMgdGhlIG9sZGVyIHVucGlja2xlcikgb3Bjb2RlLgorIworIyBUaGUgb3JpZ2luYWwgcGlja2xlIHVzZWQgd2hhdCdzIG5vdyBjYWxsZWQgInByb3RvY29sIDAiLCBhbmQgd2hhdCB3YXMgY2FsbGVkCisjICJ0ZXh0IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhlIGVudGlyZSBwaWNrbGUgYnl0ZXN0cmVhbSBpcyBtYWRlIHVwIG9mCisjIHByaW50YWJsZSA3LWJpdCBBU0NJSSBjaGFyYWN0ZXJzLCBwbHVzIHRoZSBuZXdsaW5lIGNoYXJhY3RlciwgaW4gcHJvdG9jb2wgMC4KKyMgVGhhdCdzIHdoeSBpdCB3YXMgY2FsbGVkIHRleHQgbW9kZS4gIFByb3RvY29sIDAgaXMgc21hbGwgYW5kIGVsZWdhbnQsIGJ1dAorIyBzb21ldGltZXMgcGFpbmZ1bGx5IGluZWZmaWNpZW50LgorIworIyBUaGUgc2Vjb25kIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgaXMgbm93IGNhbGxlZCAicHJvdG9jb2wgMSIsIGFuZCB3YXMgY2FsbGVkCisjICJiaW5hcnkgbW9kZSIgYmVmb3JlIFB5dGhvbiAyLjMuICBUaGlzIGFkZGVkIG1hbnkgb3Bjb2RlcyB3aXRoIGFyZ3VtZW50cworIyBjb25zaXN0aW5nIG9mIGFyYml0cmFyeSBieXRlcywgaW5jbHVkaW5nIE5VTCBieXRlcyBhbmQgdW5wcmludGFibGUgImhpZ2ggYml0IgorIyBieXRlcy4gIEJpbmFyeSBtb2RlIHBpY2tsZXMgY2FuIGJlIHN1YnN0YW50aWFsbHkgc21hbGxlciB0aGFuIGVxdWl2YWxlbnQKKyMgdGV4dCBtb2RlIHBpY2tsZXMsIGFuZCBzb21ldGltZXMgZmFzdGVyIHRvbzsgZS5nLiwgQklOSU5UIHJlcHJlc2VudHMgYSA0LWJ5dGUKKyMgaW50IGFzIDQgYnl0ZXMgZm9sbG93aW5nIHRoZSBvcGNvZGUsIHdoaWNoIGlzIGNoZWFwZXIgdG8gdW5waWNrbGUgdGhhbiB0aGUKKyMgKHBlcmhhcHMpIDExLWNoYXJhY3RlciBkZWNpbWFsIHN0cmluZyBhdHRhY2hlZCB0byBJTlQuICBQcm90b2NvbCAxIGFsc28gYWRkZWQKKyMgYSBudW1iZXIgb2Ygb3Bjb2RlcyB0aGF0IG9wZXJhdGUgb24gbWFueSBzdGFjayBlbGVtZW50cyBhdCBvbmNlIChsaWtlIEFQUEVORFMKKyMgYW5kIFNFVElURU1TKSwgYW5kICJzaG9ydGN1dCIgb3Bjb2RlcyAobGlrZSBFTVBUWV9ESUNUIGFuZCBFTVBUWV9UVVBMRSkuCisjCisjIFRoZSB0aGlyZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGNhbWUgaW4gUHl0aG9uIDIuMywgYW5kIGlzIGNhbGxlZCAicHJvdG9jb2wKKyMgMiIuICBUaGlzIGFkZGVkOgorIworIyAtIEEgYmV0dGVyIHdheSB0byBwaWNrbGUgaW5zdGFuY2VzIG9mIG5ldy1zdHlsZSBjbGFzc2VzIChORVdPQkopLgorIworIyAtIEEgd2F5IGZvciBhIHBpY2tsZSB0byBpZGVudGlmeSBpdHMgcHJvdG9jb2wgKFBST1RPKS4KKyMKKyMgLSBUaW1lLSBhbmQgc3BhY2UtIGVmZmljaWVudCBwaWNrbGluZyBvZiBsb25nIGludHMgKExPTkd7MSw0fSkuCisjCisjIC0gU2hvcnRjdXRzIGZvciBzbWFsbCB0dXBsZXMgKFRVUExFezEsMiwzfX0uCisjCisjIC0gRGVkaWNhdGVkIG9wY29kZXMgZm9yIGJvb2xzIChORVdUUlVFLCBORVdGQUxTRSkuCisjCisjIC0gVGhlICJleHRlbnNpb24gcmVnaXN0cnkiLCBhIHZlY3RvciBvZiBwb3B1bGFyIG9iamVjdHMgdGhhdCBjYW4gYmUgcHVzaGVkCisjICAgZWZmaWNpZW50bHkgYnkgaW5kZXggKEVYVHsxLDIsNH0pLiAgVGhpcyBpcyBha2luIHRvIHRoZSBtZW1vIGFuZCBHRVQsIGJ1dAorIyAgIHRoZSByZWdpc3RyeSBjb250ZW50cyBhcmUgcHJlZGVmaW5lZCAodGhlcmUncyBub3RoaW5nIGFraW4gdG8gdGhlIG1lbW8ncworIyAgIFBVVCkuCisjCisjIEFub3RoZXIgaW5kZXBlbmRlbnQgY2hhbmdlIHdpdGggUHl0aG9uIDIuMyBpcyB0aGUgYWJhbmRvbm1lbnQgb2YgYW55CisjIHByZXRlbnNlIHRoYXQgaXQgbWlnaHQgYmUgc2FmZSB0byBsb2FkIHBpY2tsZXMgcmVjZWl2ZWQgZnJvbSB1bnRydXN0ZWQKKyMgcGFydGllcyAtLSBubyBzdWZmaWNpZW50IHNlY3VyaXR5IGFuYWx5c2lzIGhhcyBiZWVuIGRvbmUgdG8gZ3VhcmFudGVlCisjIHRoaXMgYW5kIHRoZXJlIGlzbid0IGEgdXNlIGNhc2UgdGhhdCB3YXJyYW50cyB0aGUgZXhwZW5zZSBvZiBzdWNoIGFuCisjIGFuYWx5c2lzLgorIworIyBUbyB0aGlzIGVuZCwgYWxsIHRlc3RzIGZvciBfX3NhZmVfZm9yX3VucGlja2xpbmdfXyBvciBmb3IKKyMgY29weXJlZy5zYWZlX2NvbnN0cnVjdG9ycyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB1bnBpY2tsaW5nIGNvZGUuCisjIFJlZmVyZW5jZXMgdG8gdGhlc2UgdmFyaWFibGVzIGluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3cgYXJlIHRvIGJlIHNlZW4KKyMgYXMgZGVzY3JpYmluZyB1bnBpY2tsaW5nIGluIFB5dGhvbiAyLjIgYW5kIGJlZm9yZS4KIAotRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBQTSBpcyB2ZXJ5IHNpbXBsZTogIHRoZXJlIGFyZSBubyBsb29waW5nLCB0ZXN0aW5nLCBvcgotY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zLCBubyBhcml0aG1ldGljIGFuZCBubyBmdW5jdGlvbiBjYWxscy4gIE9wY29kZXMgYXJlCi1leGVjdXRlZCBvbmNlIGVhY2gsIGZyb20gZmlyc3QgdG8gbGFzdCwgdW50aWwgYSBTVE9QIG9wY29kZSBpcyByZWFjaGVkLgotCi1UaGUgUE0gaGFzIHR3byBkYXRhIGFyZWFzLCAidGhlIHN0YWNrIiBhbmQgInRoZSBtZW1vIi4KLQotTWFueSBvcGNvZGVzIHB1c2ggUHl0aG9uIG9iamVjdHMgb250byB0aGUgc3RhY2s7IGUuZy4sIElOVCBwdXNoZXMgYSBQeXRob24KLWludGVnZXIgb2JqZWN0IG9uIHRoZSBzdGFjaywgd2hvc2UgdmFsdWUgaXMgZ290dGVuIGZyb20gYSBkZWNpbWFsIHN0cmluZwotbGl0ZXJhbCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIElOVCBvcGNvZGUgaW4gdGhlIHBpY2tsZSBieXRlc3RyZWFtLiAgT3RoZXIKLW9wY29kZXMgdGFrZSBQeXRob24gb2JqZWN0cyBvZmYgdGhlIHN0YWNrLiAgVGhlIHJlc3VsdCBvZiB1bnBpY2tsaW5nIGlzCi13aGF0ZXZlciBvYmplY3QgaXMgbGVmdCBvbiB0aGUgc3RhY2sgd2hlbiB0aGUgZmluYWwgU1RPUCBvcGNvZGUgaXMgZXhlY3V0ZWQuCi0KLVRoZSBtZW1vIGlzIHNpbXBseSBhbiBhcnJheSBvZiBvYmplY3RzLCBvciBpdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBkaWN0Ci1tYXBwaW5nIGxpdHRsZSBpbnRlZ2VycyB0byBvYmplY3RzLiAgVGhlIG1lbW8gc2VydmVzIGFzIHRoZSBQTSdzICJsb25nIHRlcm0KLW1lbW9yeSIsIGFuZCB0aGUgbGl0dGxlIGludGVnZXJzIGluZGV4aW5nIHRoZSBtZW1vIGFyZSBha2luIHRvIHZhcmlhYmxlCi1uYW1lcy4gIFNvbWUgb3Bjb2RlcyBwb3AgYSBzdGFjayBvYmplY3QgaW50byB0aGUgbWVtbyBhdCBhIGdpdmVuIGluZGV4LAotYW5kIG90aGVycyBwdXNoIGEgbWVtbyBvYmplY3QgYXQgYSBnaXZlbiBpbmRleCBvbnRvIHRoZSBzdGFjayBhZ2Fpbi4KLQotQXQgaGVhcnQsIHRoYXQncyBhbGwgdGhlIFBNIGhhcy4gIFN1YnRsZXRpZXMgYXJpc2UgZm9yIHRoZXNlIHJlYXNvbnM6Ci0KLSsgT2JqZWN0IGlkZW50aXR5LiAgT2JqZWN0cyBjYW4gYmUgYXJiaXRyYXJpbHkgY29tcGxleCwgYW5kIHN1Ym9iamVjdHMKLSAgbWF5IGJlIHNoYXJlZCAoZm9yIGV4YW1wbGUsIHRoZSBsaXN0IFthLCBhXSByZWZlcnMgdG8gdGhlIHNhbWUgb2JqZWN0IGEKLSAgdHdpY2UpLiAgSXQgY2FuIGJlIHZpdGFsIHRoYXQgdW5waWNrbGluZyByZWNyZWF0ZSBhbiBpc29tb3JwaGljIG9iamVjdAotICBncmFwaCwgZmFpdGhmdWxseSByZXByb2R1Y2luZyBzaGFyaW5nLgotCi0rIFJlY3Vyc2l2ZSBvYmplY3RzLiAgRm9yIGV4YW1wbGUsIGFmdGVyICJMID0gW107IEwuYXBwZW5kKEwpIiwgTCBpcyBhCi0gIGxpc3QsIGFuZCBMWzBdIGlzIHRoZSBzYW1lIGxpc3QuICBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIG9iamVjdCBpZGVudGl0eQotICBwb2ludCwgYW5kIHNvbWUgc2VxdWVuY2VzIG9mIHBpY2tsZSBvcGNvZGVzIGFyZSBzdWJ0bGUgaW4gb3JkZXIgdG8KLSAgZ2V0IHRoZSByaWdodCByZXN1bHQgaW4gYWxsIGNhc2VzLgotCi0rIFRoaW5ncyBwaWNrbGUgZG9lc24ndCBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQuICBFeGFtcGxlcyBvZiB0aGluZ3MgcGlja2xlCi0gIGRvZXMga25vdyBldmVyeXRoaW5nIGFib3V0IGFyZSBQeXRob24ncyBidWlsdGluIHNjYWxhciBhbmQgY29udGFpbmVyCi0gIHR5cGVzLCBsaWtlIGludHMgYW5kIHR1cGxlcy4gIFRoZXkgZ2VuZXJhbGx5IGhhdmUgb3Bjb2RlcyBkZWRpY2F0ZWQgdG8KLSAgdGhlbS4gIEZvciB0aGluZ3MgbGlrZSBtb2R1bGUgcmVmZXJlbmNlcyBhbmQgaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZAotICBjbGFzc2VzLCBwaWNrbGUncyBrbm93bGVkZ2UgaXMgbGltaXRlZC4gIEhpc3RvcmljYWxseSwgbWFueSBlbmhhbmNlbWVudHMKLSAgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHBpY2tsZSBwcm90b2NvbCBpbiBvcmRlciB0byBkbyBhIGJldHRlciAoZmFzdGVyLAotICBhbmQvb3IgbW9yZSBjb21wYWN0KSBqb2Igb24gdGhvc2UuCi0KLSsgQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgbWljcm8tb3B0aW1pemF0aW9uLiAgQXMgZXhwbGFpbmVkIGJlbG93LAotICBwaWNrbGUgb3Bjb2RlcyBuZXZlciBnbyBhd2F5LCBub3QgZXZlbiB3aGVuIGJldHRlciB3YXlzIHRvIGRvIGEgdGhpbmcKLSAgZ2V0IGludmVudGVkLiAgVGhlIHJlcGVydG9pcmUgb2YgdGhlIFBNIGp1c3Qga2VlcHMgZ3Jvd2luZyBvdmVyIHRpbWUuCi0gIEZvciBleGFtcGxlLCBwcm90b2NvbCAwIGhhZCB0d28gb3Bjb2RlcyBmb3IgYnVpbGRpbmcgUHl0aG9uIGludGVnZXJzIChJTlQKLSAgYW5kIExPTkcpLCBwcm90b2NvbCAxIGFkZGVkIHRocmVlIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mIHNob3J0Ci0gIGludGVnZXJzLCBhbmQgcHJvdG9jb2wgMiBhZGRlZCB0d28gbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2YKLSAgbG9uZyBpbnRlZ2VycyAoYmVmb3JlIHByb3RvY29sIDIsIHRoZSBvbmx5IHdheXMgdG8gcGlja2xlIGEgUHl0aG9uIGxvbmcKLSAgdG9vayB0aW1lIHF1YWRyYXRpYyBpbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cywgZm9yIGJvdGggcGlja2xpbmcgYW5kCi0gIHVucGlja2xpbmcpLiAgIk9wY29kZSBibG9hdCIgaXNuJ3Qgc28gbXVjaCBhIHN1YnRsZXR5IGFzIGEgc291cmNlIG9mCi0gIHdlYXJ5aW5nIGNvbXBsaWNhdGlvbi4KLQotCi1QaWNrbGUgcHJvdG9jb2xzOgotCi1Gb3IgY29tcGF0aWJpbGl0eSwgdGhlIG1lYW5pbmcgb2YgYSBwaWNrbGUgb3Bjb2RlIG5ldmVyIGNoYW5nZXMuICBJbnN0ZWFkIG5ldwotcGlja2xlIG9wY29kZXMgZ2V0IGFkZGVkLCBhbmQgZWFjaCB2ZXJzaW9uJ3MgdW5waWNrbGVyIGNhbiBoYW5kbGUgYWxsIHRoZQotcGlja2xlIG9wY29kZXMgaW4gYWxsIHByb3RvY29sIHZlcnNpb25zIHRvIGRhdGUuICBTbyBvbGQgcGlja2xlcyBjb250aW51ZSB0bwotYmUgcmVhZGFibGUgZm9yZXZlci4gIFRoZSBwaWNrbGVyIGNhbiBnZW5lcmFsbHkgYmUgdG9sZCB0byByZXN0cmljdCBpdHNlbGYgdG8KLXRoZSBzdWJzZXQgb2Ygb3Bjb2RlcyBhdmFpbGFibGUgdW5kZXIgcHJldmlvdXMgcHJvdG9jb2wgdmVyc2lvbnMgdG9vLCBzbyB0aGF0Ci11c2VycyBjYW4gY3JlYXRlIHBpY2tsZXMgdW5kZXIgdGhlIGN1cnJlbnQgdmVyc2lvbiByZWFkYWJsZSBieSBvbGRlcgotdmVyc2lvbnMuICBIb3dldmVyLCBhIHBpY2tsZSBkb2VzIG5vdCBjb250YWluIGl0cyB2ZXJzaW9uIG51bWJlciBlbWJlZGRlZAotd2l0aGluIGl0LiAgSWYgYW4gb2xkZXIgdW5waWNrbGVyIHRyaWVzIHRvIHJlYWQgYSBwaWNrbGUgdXNpbmcgYSBsYXRlcgotcHJvdG9jb2wsIHRoZSByZXN1bHQgaXMgbW9zdCBsaWtlbHkgYW4gZXhjZXB0aW9uIGR1ZSB0byBzZWVpbmcgYW4gdW5rbm93biAoaW4KLXRoZSBvbGRlciB1bnBpY2tsZXIpIG9wY29kZS4KLQotVGhlIG9yaWdpbmFsIHBpY2tsZSB1c2VkIHdoYXQncyBub3cgY2FsbGVkICJwcm90b2NvbCAwIiwgYW5kIHdoYXQgd2FzIGNhbGxlZAotInRleHQgbW9kZSIgYmVmb3JlIFB5dGhvbiAyLjMuICBUaGUgZW50aXJlIHBpY2tsZSBieXRlc3RyZWFtIGlzIG1hZGUgdXAgb2YKLXByaW50YWJsZSA3LWJpdCBBU0NJSSBjaGFyYWN0ZXJzLCBwbHVzIHRoZSBuZXdsaW5lIGNoYXJhY3RlciwgaW4gcHJvdG9jb2wgMC4KLVRoYXQncyB3aHkgaXQgd2FzIGNhbGxlZCB0ZXh0IG1vZGUuICBQcm90b2NvbCAwIGlzIHNtYWxsIGFuZCBlbGVnYW50LCBidXQKLXNvbWV0aW1lcyBwYWluZnVsbHkgaW5lZmZpY2llbnQuCi0KLVRoZSBzZWNvbmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBpcyBub3cgY2FsbGVkICJwcm90b2NvbCAxIiwgYW5kIHdhcyBjYWxsZWQKLSJiaW5hcnkgbW9kZSIgYmVmb3JlIFB5dGhvbiAyLjMuICBUaGlzIGFkZGVkIG1hbnkgb3Bjb2RlcyB3aXRoIGFyZ3VtZW50cwotY29uc2lzdGluZyBvZiBhcmJpdHJhcnkgYnl0ZXMsIGluY2x1ZGluZyBOVUwgYnl0ZXMgYW5kIHVucHJpbnRhYmxlICJoaWdoIGJpdCIKLWJ5dGVzLiAgQmluYXJ5IG1vZGUgcGlja2xlcyBjYW4gYmUgc3Vic3RhbnRpYWxseSBzbWFsbGVyIHRoYW4gZXF1aXZhbGVudAotdGV4dCBtb2RlIHBpY2tsZXMsIGFuZCBzb21ldGltZXMgZmFzdGVyIHRvbzsgZS5nLiwgQklOSU5UIHJlcHJlc2VudHMgYSA0LWJ5dGUKLWludCBhcyA0IGJ5dGVzIGZvbGxvd2luZyB0aGUgb3Bjb2RlLCB3aGljaCBpcyBjaGVhcGVyIHRvIHVucGlja2xlIHRoYW4gdGhlCi0ocGVyaGFwcykgMTEtY2hhcmFjdGVyIGRlY2ltYWwgc3RyaW5nIGF0dGFjaGVkIHRvIElOVC4gIFByb3RvY29sIDEgYWxzbyBhZGRlZAotYSBudW1iZXIgb2Ygb3Bjb2RlcyB0aGF0IG9wZXJhdGUgb24gbWFueSBzdGFjayBlbGVtZW50cyBhdCBvbmNlIChsaWtlIEFQUEVORFMKLWFuZCBTRVRJVEVNUyksIGFuZCAic2hvcnRjdXQiIG9wY29kZXMgKGxpa2UgRU1QVFlfRElDVCBhbmQgRU1QVFlfVFVQTEUpLgotCi1UaGUgdGhpcmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBjYW1lIGluIFB5dGhvbiAyLjMsIGFuZCBpcyBjYWxsZWQgInByb3RvY29sCi0yIi4gIFRoaXMgYWRkZWQ6Ci0KLS0gQSBiZXR0ZXIgd2F5IHRvIHBpY2tsZSBpbnN0YW5jZXMgb2YgbmV3LXN0eWxlIGNsYXNzZXMgKE5FV09CSikuCi0KLS0gQSB3YXkgZm9yIGEgcGlja2xlIHRvIGlkZW50aWZ5IGl0cyBwcm90b2NvbCAoUFJPVE8pLgotCi0tIFRpbWUtIGFuZCBzcGFjZS0gZWZmaWNpZW50IHBpY2tsaW5nIG9mIGxvbmcgaW50cyAoTE9OR3sxLDR9KS4KLQotLSBTaG9ydGN1dHMgZm9yIHNtYWxsIHR1cGxlcyAoVFVQTEV7MSwyLDN9fS4KLQotLSBEZWRpY2F0ZWQgb3Bjb2RlcyBmb3IgYm9vbHMgKE5FV1RSVUUsIE5FV0ZBTFNFKS4KLQotLSBUaGUgImV4dGVuc2lvbiByZWdpc3RyeSIsIGEgdmVjdG9yIG9mIHBvcHVsYXIgb2JqZWN0cyB0aGF0IGNhbiBiZSBwdXNoZWQKLSAgZWZmaWNpZW50bHkgYnkgaW5kZXggKEVYVHsxLDIsNH0pLiAgVGhpcyBpcyBha2luIHRvIHRoZSBtZW1vIGFuZCBHRVQsIGJ1dAotICB0aGUgcmVnaXN0cnkgY29udGVudHMgYXJlIHByZWRlZmluZWQgKHRoZXJlJ3Mgbm90aGluZyBha2luIHRvIHRoZSBtZW1vJ3MKLSAgUFVUKS4KLQotQW5vdGhlciBpbmRlcGVuZGVudCBjaGFuZ2Ugd2l0aCBQeXRob24gMi4zIGlzIHRoZSBhYmFuZG9ubWVudCBvZiBhbnkKLXByZXRlbnNlIHRoYXQgaXQgbWlnaHQgYmUgc2FmZSB0byBsb2FkIHBpY2tsZXMgcmVjZWl2ZWQgZnJvbSB1bnRydXN0ZWQKLXBhcnRpZXMgLS0gbm8gc3VmZmljaWVudCBzZWN1cml0eSBhbmFseXNpcyBoYXMgYmVlbiBkb25lIHRvIGd1YXJhbnRlZQotdGhpcyBhbmQgdGhlcmUgaXNuJ3QgYSB1c2UgY2FzZSB0aGF0IHdhcnJhbnRzIHRoZSBleHBlbnNlIG9mIHN1Y2ggYW4KLWFuYWx5c2lzLgotCi1UbyB0aGlzIGVuZCwgYWxsIHRlc3RzIGZvciBfX3NhZmVfZm9yX3VucGlja2xpbmdfXyBvciBmb3IKLWNvcHlyZWcuc2FmZV9jb25zdHJ1Y3RvcnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdW5waWNrbGluZyBjb2RlLgotUmVmZXJlbmNlcyB0byB0aGVzZSB2YXJpYWJsZXMgaW4gdGhlIGRlc2NyaXB0aW9ucyBiZWxvdyBhcmUgdG8gYmUgc2VlbgotYXMgZGVzY3JpYmluZyB1bnBpY2tsaW5nIGluIFB5dGhvbiAyLjIgYW5kIGJlZm9yZS4KLSIiIgogCiAjIE1ldGEtcnVsZTogIERlc2NyaXB0aW9ucyBhcmUgc3RvcmVkIGluIGluc3RhbmNlcyBvZiBkZXNjcmlwdG9yIG9iamVjdHMsCiAjIHdpdGggcGxhaW4gY29uc3RydWN0b3JzLiAgTm8gbWV0YS1sYW5ndWFnZSBpcyBkZWZpbmVkIGZyb20gd2hpY2gKQEAgLTE2OSw2ICsxNjksNyBAQAogVEFLRU5fRlJPTV9BUkdVTUVOVDEgID0gLTIgICAjIG51bSBieXRlcyBpcyAxLWJ5dGUgdW5zaWduZWQgaW50CiBUQUtFTl9GUk9NX0FSR1VNRU5UNCAgPSAtMyAgICMgbnVtIGJ5dGVzIGlzIDQtYnl0ZSBzaWduZWQgbGl0dGxlLWVuZGlhbiBpbnQKIFRBS0VOX0ZST01fQVJHVU1FTlQ0VSA9IC00ICAgIyBudW0gYnl0ZXMgaXMgNC1ieXRlIHVuc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50CitUQUtFTl9GUk9NX0FSR1VNRU5UOFUgPSAtNSAgICMgbnVtIGJ5dGVzIGlzIDgtYnl0ZSB1bnNpZ25lZCBsaXR0bGUtZW5kaWFuIGludAogCiBjbGFzcyBBcmd1bWVudERlc2NyaXB0b3Iob2JqZWN0KToKICAgICBfX3Nsb3RzX18gPSAoCkBAIC0xNzYsNyArMTc3LDcgQEAKICAgICAgICAgJ25hbWUnLAogCiAgICAgICAgICMgbGVuZ3RoIG9mIGFyZ3VtZW50LCBpbiBieXRlczsgYW4gaW50OyBVUF9UT19ORVdMSU5FIGFuZAotICAgICAgICAjIFRBS0VOX0ZST01fQVJHVU1FTlR7MSw0fSBhcmUgbmVnYXRpdmUgdmFsdWVzIGZvciB2YXJpYWJsZS1sZW5ndGgKKyAgICAgICAgIyBUQUtFTl9GUk9NX0FSR1VNRU5UezEsNCw4fSBhcmUgbmVnYXRpdmUgdmFsdWVzIGZvciB2YXJpYWJsZS1sZW5ndGgKICAgICAgICAgIyBjYXNlcwogICAgICAgICAnbicsCiAKQEAgLTE5Nyw3ICsxOTgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiBpbiAoVVBfVE9fTkVXTElORSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UNFUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDRVLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDhVKSkKICAgICAgICAgc2VsZi5uID0gbgogCiAgICAgICAgIHNlbGYucmVhZGVyID0gcmVhZGVyCkBAIC0yODksNiArMjkxLDI3IEBACiAgICAgICAgICAgICBkb2M9IkZvdXItYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyLCBsaXR0bGUtZW5kaWFuLiIpCiAKIAorZGVmIHJlYWRfdWludDgoZik6CisgICAgciIiIgorICAgID4+PiBpbXBvcnQgaW8KKyAgICA+Pj4gcmVhZF91aW50OChpby5CeXRlc0lPKGInXHhmZlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnKSkKKyAgICAyNTUKKyAgICA+Pj4gcmVhZF91aW50OChpby5CeXRlc0lPKGInXHhmZicgKiA4KSkgPT0gMioqNjQtMQorICAgIFRydWUKKyAgICAiIiIKKworICAgIGRhdGEgPSBmLnJlYWQoOCkKKyAgICBpZiBsZW4oZGF0YSkgPT0gODoKKyAgICAgICAgcmV0dXJuIF91bnBhY2soIjxRIiwgZGF0YSlbMF0KKyAgICByYWlzZSBWYWx1ZUVycm9yKCJub3QgZW5vdWdoIGRhdGEgaW4gc3RyZWFtIHRvIHJlYWQgdWludDgiKQorCit1aW50OCA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgIG5hbWU9J3VpbnQ4JywKKyAgICAgICAgICAgIG49OCwKKyAgICAgICAgICAgIHJlYWRlcj1yZWFkX3VpbnQ4LAorICAgICAgICAgICAgZG9jPSJFaWdodC1ieXRlIHVuc2lnbmVkIGludGVnZXIsIGxpdHRsZS1lbmRpYW4uIikKKworCiBkZWYgcmVhZF9zdHJpbmdubChmLCBkZWNvZGU9VHJ1ZSwgc3RyaXBxdW90ZXM9VHJ1ZSk6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KQEAgLTM4Miw2ICs0MDUsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzaW5nbGUgYmxhbmsgc2VwYXJhdGluZyB0aGUgdHdvIHN0cmluZ3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIikKIAorCitkZWYgcmVhZF9zdHJpbmcxKGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvCisgICAgPj4+IHJlYWRfc3RyaW5nMShpby5CeXRlc0lPKGIiXHgwMCIpKQorICAgICcnCisgICAgPj4+IHJlYWRfc3RyaW5nMShpby5CeXRlc0lPKGIiXHgwM2FiY2RlZiIpKQorICAgICdhYmMnCisgICAgIiIiCisKKyAgICBuID0gcmVhZF91aW50MShmKQorICAgIGFzc2VydCBuID49IDAKKyAgICBkYXRhID0gZi5yZWFkKG4pCisgICAgaWYgbGVuKGRhdGEpID09IG46CisgICAgICAgIHJldHVybiBkYXRhLmRlY29kZSgibGF0aW4tMSIpCisgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSBzdHJpbmcxLCBidXQgb25seSAlZCByZW1haW4iICUKKyAgICAgICAgICAgICAgICAgICAgIChuLCBsZW4oZGF0YSkpKQorCitzdHJpbmcxID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICBuYW1lPSJzdHJpbmcxIiwKKyAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UMSwKKyAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfc3RyaW5nMSwKKyAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBzdHJpbmcuCisKKyAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgMS1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcgdGhlIG51bWJlcgorICAgICAgICAgICAgICBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGF0IG1hbnkKKyAgICAgICAgICAgICAgYnl0ZXMuCisgICAgICAgICAgICAgICIiIikKKworCiBkZWYgcmVhZF9zdHJpbmc0KGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC00MTYsMjggKzQ2OSwyOCBAQAogICAgICAgICAgICAgICAiIiIpCiAKIAotZGVmIHJlYWRfc3RyaW5nMShmKToKK2RlZiByZWFkX2J5dGVzMShmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwotICAgID4+PiByZWFkX3N0cmluZzEoaW8uQnl0ZXNJTyhiIlx4MDAiKSkKLSAgICAnJwotICAgID4+PiByZWFkX3N0cmluZzEoaW8uQnl0ZXNJTyhiIlx4MDNhYmNkZWYiKSkKLSAgICAnYWJjJworICAgID4+PiByZWFkX2J5dGVzMShpby5CeXRlc0lPKGIiXHgwMCIpKQorICAgIGInJworICAgID4+PiByZWFkX2J5dGVzMShpby5CeXRlc0lPKGIiXHgwM2FiY2RlZiIpKQorICAgIGInYWJjJwogICAgICIiIgogCiAgICAgbiA9IHJlYWRfdWludDEoZikKICAgICBhc3NlcnQgbiA+PSAwCiAgICAgZGF0YSA9IGYucmVhZChuKQogICAgIGlmIGxlbihkYXRhKSA9PSBuOgotICAgICAgICByZXR1cm4gZGF0YS5kZWNvZGUoImxhdGluLTEiKQotICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgc3RyaW5nMSwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCisgICAgICAgIHJldHVybiBkYXRhCisgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSBieXRlczEsIGJ1dCBvbmx5ICVkIHJlbWFpbiIgJQogICAgICAgICAgICAgICAgICAgICAgKG4sIGxlbihkYXRhKSkpCiAKLXN0cmluZzEgPSBBcmd1bWVudERlc2NyaXB0b3IoCi0gICAgICAgICAgICAgIG5hbWU9InN0cmluZzEiLAorYnl0ZXMxID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICBuYW1lPSJieXRlczEiLAogICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQxLAotICAgICAgICAgICAgICByZWFkZXI9cmVhZF9zdHJpbmcxLAotICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIHN0cmluZy4KKyAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfYnl0ZXMxLAorICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIGJ5dGVzIHN0cmluZy4KIAogICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSAxLWJ5dGUgdW5zaWduZWQgaW50IGdpdmluZyB0aGUgbnVtYmVyCiAgICAgICAgICAgICAgIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoYXQgbWFueQpAQCAtNDg3LDYgKzU0MCw3IEBACiAgICAgIiIiCiAKICAgICBuID0gcmVhZF91aW50NChmKQorICAgIGFzc2VydCBuID49IDAKICAgICBpZiBuID4gc3lzLm1heHNpemU6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ5dGVzNCBieXRlIGNvdW50ID4gc3lzLm1heHNpemU6ICVkIiAlIG4pCiAgICAgZGF0YSA9IGYucmVhZChuKQpAQCAtNTA2LDYgKzU2MCw0MCBAQAogICAgICAgICAgICAgICAiIiIpCiAKIAorZGVmIHJlYWRfYnl0ZXM4KGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvLCBzdHJ1Y3QsIHN5cworICAgID4+PiByZWFkX2J5dGVzOChpby5CeXRlc0lPKGIiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBhYmMiKSkKKyAgICBiJycKKyAgICA+Pj4gcmVhZF9ieXRlczgoaW8uQnl0ZXNJTyhiIlx4MDNceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwYWJjZGVmIikpCisgICAgYidhYmMnCisgICAgPj4+IGJpZ3NpemU4ID0gc3RydWN0LnBhY2soIjxRIiwgc3lzLm1heHNpemUvLzMpCisgICAgPj4+IHJlYWRfYnl0ZXM4KGlvLkJ5dGVzSU8oYmlnc2l6ZTggKyBiImFiY2RlZiIpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBleHBlY3RlZCAuLi4gYnl0ZXMgaW4gYSBieXRlczgsIGJ1dCBvbmx5IDYgcmVtYWluCisgICAgIiIiCisKKyAgICBuID0gcmVhZF91aW50OChmKQorICAgIGFzc2VydCBuID49IDAKKyAgICBpZiBuID4gc3lzLm1heHNpemU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ5dGVzOCBieXRlIGNvdW50ID4gc3lzLm1heHNpemU6ICVkIiAlIG4pCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gZGF0YQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgYnl0ZXM4LCBidXQgb25seSAlZCByZW1haW4iICUKKyAgICAgICAgICAgICAgICAgICAgIChuLCBsZW4oZGF0YSkpKQorCitieXRlczggPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICAgIG5hbWU9ImJ5dGVzOCIsCisgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDhVLAorICAgICAgICAgICAgICByZWFkZXI9cmVhZF9ieXRlczgsCisgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgYnl0ZXMgc3RyaW5nLgorCisgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDgtYnl0ZSBsaXR0bGUtZW5kaWFuIHVuc2lnbmVkIGludCBnaXZpbmcKKyAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBieXRlcywgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhhdCBtYW55IGJ5dGVzLgorICAgICAgICAgICAgICAiIiIpCisKIGRlZiByZWFkX3VuaWNvZGVzdHJpbmdubChmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtNTMxLDYgKzYxOSw0NiBAQAogICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIiIiKQogCisKK2RlZiByZWFkX3VuaWNvZGVzdHJpbmcxKGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvCisgICAgPj4+IHMgPSAnYWJjZFx1YWJjZCcKKyAgICA+Pj4gZW5jID0gcy5lbmNvZGUoJ3V0Zi04JykKKyAgICA+Pj4gZW5jCisgICAgYidhYmNkXHhlYVx4YWZceDhkJworICAgID4+PiBuID0gYnl0ZXMoW2xlbihlbmMpXSkgICMgbGl0dGxlLWVuZGlhbiAxLWJ5dGUgbGVuZ3RoCisgICAgPj4+IHQgPSByZWFkX3VuaWNvZGVzdHJpbmcxKGlvLkJ5dGVzSU8obiArIGVuYyArIGInanVuaycpKQorICAgID4+PiBzID09IHQKKyAgICBUcnVlCisKKyAgICA+Pj4gcmVhZF91bmljb2Rlc3RyaW5nMShpby5CeXRlc0lPKG4gKyBlbmNbOi0xXSkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGV4cGVjdGVkIDcgYnl0ZXMgaW4gYSB1bmljb2Rlc3RyaW5nMSwgYnV0IG9ubHkgNiByZW1haW4KKyAgICAiIiIKKworICAgIG4gPSByZWFkX3VpbnQxKGYpCisgICAgYXNzZXJ0IG4gPj0gMAorICAgIGRhdGEgPSBmLnJlYWQobikKKyAgICBpZiBsZW4oZGF0YSkgPT0gbjoKKyAgICAgICAgcmV0dXJuIHN0cihkYXRhLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpCisgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSB1bmljb2Rlc3RyaW5nMSwgYnV0IG9ubHkgJWQgIgorICAgICAgICAgICAgICAgICAgICAgInJlbWFpbiIgJSAobiwgbGVuKGRhdGEpKSkKKwordW5pY29kZXN0cmluZzEgPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICAgICAgICAgIG5hbWU9InVuaWNvZGVzdHJpbmcxIiwKKyAgICAgICAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UMSwKKyAgICAgICAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfdW5pY29kZXN0cmluZzEsCisgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgVW5pY29kZSBzdHJpbmcuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgMS1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgICAgICAgICAgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC0tIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcgLS0KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhhdCBtYW55IGJ5dGVzLgorICAgICAgICAgICAgICAgICAgICAiIiIpCisKKwogZGVmIHJlYWRfdW5pY29kZXN0cmluZzQoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KQEAgLTU1MCw2ICs2NzgsNyBAQAogICAgICIiIgogCiAgICAgbiA9IHJlYWRfdWludDQoZikKKyAgICBhc3NlcnQgbiA+PSAwCiAgICAgaWYgbiA+IHN5cy5tYXhzaXplOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmljb2Rlc3RyaW5nNCBieXRlIGNvdW50ID4gc3lzLm1heHNpemU6ICVkIiAlIG4pCiAgICAgZGF0YSA9IGYucmVhZChuKQpAQCAtNTcxLDYgKzcwMCw0NyBAQAogICAgICAgICAgICAgICAgICAgICAiIiIpCiAKIAorZGVmIHJlYWRfdW5pY29kZXN0cmluZzgoZik6CisgICAgciIiIgorICAgID4+PiBpbXBvcnQgaW8KKyAgICA+Pj4gcyA9ICdhYmNkXHVhYmNkJworICAgID4+PiBlbmMgPSBzLmVuY29kZSgndXRmLTgnKQorICAgID4+PiBlbmMKKyAgICBiJ2FiY2RceGVhXHhhZlx4OGQnCisgICAgPj4+IG4gPSBieXRlcyhbbGVuKGVuYyldKSArIGJ5dGVzKDcpICAjIGxpdHRsZS1lbmRpYW4gOC1ieXRlIGxlbmd0aAorICAgID4+PiB0ID0gcmVhZF91bmljb2Rlc3RyaW5nOChpby5CeXRlc0lPKG4gKyBlbmMgKyBiJ2p1bmsnKSkKKyAgICA+Pj4gcyA9PSB0CisgICAgVHJ1ZQorCisgICAgPj4+IHJlYWRfdW5pY29kZXN0cmluZzgoaW8uQnl0ZXNJTyhuICsgZW5jWzotMV0pKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBleHBlY3RlZCA3IGJ5dGVzIGluIGEgdW5pY29kZXN0cmluZzgsIGJ1dCBvbmx5IDYgcmVtYWluCisgICAgIiIiCisKKyAgICBuID0gcmVhZF91aW50OChmKQorICAgIGFzc2VydCBuID49IDAKKyAgICBpZiBuID4gc3lzLm1heHNpemU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuaWNvZGVzdHJpbmc4IGJ5dGUgY291bnQgPiBzeXMubWF4c2l6ZTogJWQiICUgbikKKyAgICBkYXRhID0gZi5yZWFkKG4pCisgICAgaWYgbGVuKGRhdGEpID09IG46CisgICAgICAgIHJldHVybiBzdHIoZGF0YSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgdW5pY29kZXN0cmluZzgsIGJ1dCBvbmx5ICVkICIKKyAgICAgICAgICAgICAgICAgICAgICJyZW1haW4iICUgKG4sIGxlbihkYXRhKSkpCisKK3VuaWNvZGVzdHJpbmc4ID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICAgICAgICBuYW1lPSJ1bmljb2Rlc3RyaW5nOCIsCisgICAgICAgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDhVLAorICAgICAgICAgICAgICAgICAgICByZWFkZXI9cmVhZF91bmljb2Rlc3RyaW5nOCwKKyAgICAgICAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBVbmljb2RlIHN0cmluZy4KKworICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSA4LWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50CisgICAgICAgICAgICAgICAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LS0gdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZyAtLQorICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGF0IG1hbnkgYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICIiIikKKworCiBkZWYgcmVhZF9kZWNpbWFsbmxfc2hvcnQoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KQEAgLTc5OSwxMDMgKzk2OSwxMDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQogCiAKLXB5aW50ID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICBuYW1lPSdpbnQnLAotICAgICAgICAgICAgb2J0eXBlPWludCwKLSAgICAgICAgICAgIGRvYz0iQSBzaG9ydCAoYXMgb3Bwb3NlZCB0byBsb25nKSBQeXRob24gaW50ZWdlciBvYmplY3QuIikKLQotcHlsb25nID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgbmFtZT0nbG9uZycsCi0gICAgICAgICAgICAgb2J0eXBlPWludCwKLSAgICAgICAgICAgICBkb2M9IkEgbG9uZyAoYXMgb3Bwb3NlZCB0byBzaG9ydCkgUHl0aG9uIGludGVnZXIgb2JqZWN0LiIpCitweWludCA9IHB5bG9uZyA9IFN0YWNrT2JqZWN0KAorICAgIG5hbWU9J2ludCcsCisgICAgb2J0eXBlPWludCwKKyAgICBkb2M9IkEgUHl0aG9uIGludGVnZXIgb2JqZWN0LiIpCiAKIHB5aW50ZWdlcl9vcl9ib29sID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSdpbnRfb3JfYm9vbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBvYnR5cGU9KGludCwgYm9vbCksCi0gICAgICAgICAgICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGludGVnZXIgb2JqZWN0IChzaG9ydCBvciBsb25nKSwgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIFB5dGhvbiBib29sLiIpCisgICAgbmFtZT0naW50X29yX2Jvb2wnLAorICAgIG9idHlwZT0oaW50LCBib29sKSwKKyAgICBkb2M9IkEgUHl0aG9uIGludGVnZXIgb3IgYm9vbGVhbiBvYmplY3QuIikKIAogcHlib29sID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgbmFtZT0nYm9vbCcsCi0gICAgICAgICAgICAgb2J0eXBlPShib29sLCksCi0gICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBib29sIG9iamVjdC4iKQorICAgIG5hbWU9J2Jvb2wnLAorICAgIG9idHlwZT1ib29sLAorICAgIGRvYz0iQSBQeXRob24gYm9vbGVhbiBvYmplY3QuIikKIAogcHlmbG9hdCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICBuYW1lPSdmbG9hdCcsCi0gICAgICAgICAgICAgIG9idHlwZT1mbG9hdCwKLSAgICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBmbG9hdCBvYmplY3QuIikKKyAgICBuYW1lPSdmbG9hdCcsCisgICAgb2J0eXBlPWZsb2F0LAorICAgIGRvYz0iQSBQeXRob24gZmxvYXQgb2JqZWN0LiIpCiAKLXB5c3RyaW5nID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgICBuYW1lPSdzdHJpbmcnLAotICAgICAgICAgICAgICAgb2J0eXBlPWJ5dGVzLAotICAgICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiAoOC1iaXQpIHN0cmluZyBvYmplY3QuIikKK3B5Ynl0ZXNfb3Jfc3RyID0gcHlzdHJpbmcgPSBTdGFja09iamVjdCgKKyAgICBuYW1lPSdieXRlc19vcl9zdHInLAorICAgIG9idHlwZT0oYnl0ZXMsIHN0ciksCisgICAgZG9jPSJBIFB5dGhvbiBieXRlcyBvciAoVW5pY29kZSkgc3RyaW5nIG9iamVjdC4iKQogCiBweWJ5dGVzID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgICBuYW1lPSdieXRlcycsCi0gICAgICAgICAgICAgICBvYnR5cGU9Ynl0ZXMsCi0gICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGJ5dGVzIG9iamVjdC4iKQorICAgIG5hbWU9J2J5dGVzJywKKyAgICBvYnR5cGU9Ynl0ZXMsCisgICAgZG9jPSJBIFB5dGhvbiBieXRlcyBvYmplY3QuIikKIAogcHl1bmljb2RlID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgICAgbmFtZT0nc3RyJywKLSAgICAgICAgICAgICAgICBvYnR5cGU9c3RyLAotICAgICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gKFVuaWNvZGUpIHN0cmluZyBvYmplY3QuIikKKyAgICBuYW1lPSdzdHInLAorICAgIG9idHlwZT1zdHIsCisgICAgZG9jPSJBIFB5dGhvbiAoVW5pY29kZSkgc3RyaW5nIG9iamVjdC4iKQogCiBweW5vbmUgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICBuYW1lPSJOb25lIiwKLSAgICAgICAgICAgICBvYnR5cGU9dHlwZShOb25lKSwKLSAgICAgICAgICAgICBkb2M9IlRoZSBQeXRob24gTm9uZSBvYmplY3QuIikKKyAgICBuYW1lPSJOb25lIiwKKyAgICBvYnR5cGU9dHlwZShOb25lKSwKKyAgICBkb2M9IlRoZSBQeXRob24gTm9uZSBvYmplY3QuIikKIAogcHl0dXBsZSA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICBuYW1lPSJ0dXBsZSIsCi0gICAgICAgICAgICAgIG9idHlwZT10dXBsZSwKLSAgICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiB0dXBsZSBvYmplY3QuIikKKyAgICBuYW1lPSJ0dXBsZSIsCisgICAgb2J0eXBlPXR1cGxlLAorICAgIGRvYz0iQSBQeXRob24gdHVwbGUgb2JqZWN0LiIpCiAKIHB5bGlzdCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgIG5hbWU9Imxpc3QiLAotICAgICAgICAgICAgIG9idHlwZT1saXN0LAotICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gbGlzdCBvYmplY3QuIikKKyAgICBuYW1lPSJsaXN0IiwKKyAgICBvYnR5cGU9bGlzdCwKKyAgICBkb2M9IkEgUHl0aG9uIGxpc3Qgb2JqZWN0LiIpCiAKIHB5ZGljdCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgIG5hbWU9ImRpY3QiLAotICAgICAgICAgICAgIG9idHlwZT1kaWN0LAotICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gZGljdCBvYmplY3QuIikKKyAgICBuYW1lPSJkaWN0IiwKKyAgICBvYnR5cGU9ZGljdCwKKyAgICBkb2M9IkEgUHl0aG9uIGRpY3Qgb2JqZWN0LiIpCisKK3B5c2V0ID0gU3RhY2tPYmplY3QoCisgICAgbmFtZT0ic2V0IiwKKyAgICBvYnR5cGU9c2V0LAorICAgIGRvYz0iQSBQeXRob24gc2V0IG9iamVjdC4iKQorCitweWZyb3plbnNldCA9IFN0YWNrT2JqZWN0KAorICAgIG5hbWU9ImZyb3plbnNldCIsCisgICAgb2J0eXBlPXNldCwKKyAgICBkb2M9IkEgUHl0aG9uIGZyb3plbnNldCBvYmplY3QuIikKIAogYW55b2JqZWN0ID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgICAgbmFtZT0nYW55JywKLSAgICAgICAgICAgICAgICBvYnR5cGU9b2JqZWN0LAotICAgICAgICAgICAgICAgIGRvYz0iQW55IGtpbmQgb2Ygb2JqZWN0IHdoYXRzb2V2ZXIuIikKKyAgICBuYW1lPSdhbnknLAorICAgIG9idHlwZT1vYmplY3QsCisgICAgZG9jPSJBbnkga2luZCBvZiBvYmplY3Qgd2hhdHNvZXZlci4iKQogCiBtYXJrb2JqZWN0ID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgICAgIG5hbWU9Im1hcmsiLAotICAgICAgICAgICAgICAgICBvYnR5cGU9U3RhY2tPYmplY3QsCi0gICAgICAgICAgICAgICAgIGRvYz0iIiInVGhlIG1hcmsnIGlzIGEgdW5pcXVlIG9iamVjdC4KKyAgICBuYW1lPSJtYXJrIiwKKyAgICBvYnR5cGU9U3RhY2tPYmplY3QsCisgICAgZG9jPSIiIidUaGUgbWFyaycgaXMgYSB1bmlxdWUgb2JqZWN0LgogCi0gICAgICAgICAgICAgICAgIE9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIGEgdmFyaWFibGUgbnVtYmVyIG9mIG9iamVjdHMKLSAgICAgICAgICAgICAgICAgZ2VuZXJhbGx5IGRvbid0IGVtYmVkIHRoZSBjb3VudCBvZiBvYmplY3RzIGluIHRoZSBvcGNvZGUsCi0gICAgICAgICAgICAgICAgIG9yIHB1bGwgaXQgb2ZmIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIE1BUksgb3Bjb2RlIGlzIHVzZWQKLSAgICAgICAgICAgICAgICAgdG8gcHVzaCBhIHNwZWNpYWwgbWFya2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIGFuZCB0aGVuCi0gICAgICAgICAgICAgICAgIHNvbWUgb3RoZXIgb3Bjb2RlcyBncmFiIGFsbCB0aGUgb2JqZWN0cyBmcm9tIHRoZSB0b3Agb2YKLSAgICAgICAgICAgICAgICAgdGhlIHN0YWNrIGRvd24gdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgdG9wbW9zdCBtYXJrZXIKLSAgICAgICAgICAgICAgICAgb2JqZWN0LgotICAgICAgICAgICAgICAgICAiIiIpCitPcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBhIHZhcmlhYmxlIG51bWJlciBvZiBvYmplY3RzCitnZW5lcmFsbHkgZG9uJ3QgZW1iZWQgdGhlIGNvdW50IG9mIG9iamVjdHMgaW4gdGhlIG9wY29kZSwKK29yIHB1bGwgaXQgb2ZmIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIE1BUksgb3Bjb2RlIGlzIHVzZWQKK3RvIHB1c2ggYSBzcGVjaWFsIG1hcmtlciBvYmplY3Qgb24gdGhlIHN0YWNrLCBhbmQgdGhlbgorc29tZSBvdGhlciBvcGNvZGVzIGdyYWIgYWxsIHRoZSBvYmplY3RzIGZyb20gdGhlIHRvcCBvZgordGhlIHN0YWNrIGRvd24gdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgdG9wbW9zdCBtYXJrZXIKK29iamVjdC4KKyIiIikKIAogc3RhY2tzbGljZSA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgICBuYW1lPSJzdGFja3NsaWNlIiwKLSAgICAgICAgICAgICAgICAgb2J0eXBlPVN0YWNrT2JqZWN0LAotICAgICAgICAgICAgICAgICBkb2M9IiIiQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbnRpZ3VvdXMgc2xpY2Ugb2YgdGhlIHN0YWNrLgorICAgIG5hbWU9InN0YWNrc2xpY2UiLAorICAgIG9idHlwZT1TdGFja09iamVjdCwKKyAgICBkb2M9IiIiQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbnRpZ3VvdXMgc2xpY2Ugb2YgdGhlIHN0YWNrLgogCi0gICAgICAgICAgICAgICAgIFRoaXMgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG1hcmtvYmplY3QsIHRvIHJlcHJlc2VudCBhbGwKLSAgICAgICAgICAgICAgICAgb2YgdGhlIHN0YWNrIGZvbGxvd2luZyB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0LiAgRm9yIGV4YW1wbGUsCi0gICAgICAgICAgICAgICAgIHRoZSBQT1BfTUFSSyBvcGNvZGUgY2hhbmdlcyB0aGUgc3RhY2sgZnJvbQorVGhpcyBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggbWFya29iamVjdCwgdG8gcmVwcmVzZW50IGFsbAorb2YgdGhlIHN0YWNrIGZvbGxvd2luZyB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0LiAgRm9yIGV4YW1wbGUsCit0aGUgUE9QX01BUksgb3Bjb2RlIGNoYW5nZXMgdGhlIHN0YWNrIGZyb20KIAotICAgICAgICAgICAgICAgICAgICAgWy4uLiwgbWFya29iamVjdCwgc3RhY2tzbGljZV0KLSAgICAgICAgICAgICAgICAgdG8KLSAgICAgICAgICAgICAgICAgICAgIFsuLi5dCisgICAgWy4uLiwgbWFya29iamVjdCwgc3RhY2tzbGljZV0KK3RvCisgICAgWy4uLl0KIAotICAgICAgICAgICAgICAgICBObyBtYXR0ZXIgaG93IG1hbnkgb2JqZWN0IGFyZSBvbiB0aGUgc3RhY2sgYWZ0ZXIgdGhlIHRvcG1vc3QKLSAgICAgICAgICAgICAgICAgbWFya29iamVjdCwgUE9QX01BUksgZ2V0cyByaWQgb2YgYWxsIG9mIHRoZW0gKGluY2x1ZGluZyB0aGUKLSAgICAgICAgICAgICAgICAgdG9wbW9zdCBtYXJrb2JqZWN0IHRvbykuCi0gICAgICAgICAgICAgICAgICIiIikKK05vIG1hdHRlciBob3cgbWFueSBvYmplY3QgYXJlIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgdG9wbW9zdAorbWFya29iamVjdCwgUE9QX01BUksgZ2V0cyByaWQgb2YgYWxsIG9mIHRoZW0gKGluY2x1ZGluZyB0aGUKK3RvcG1vc3QgbWFya29iamVjdCB0b28pLgorIiIiKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgRGVzY3JpcHRvcnMgZm9yIHBpY2tsZSBvcGNvZGVzLgpAQCAtMTAzMiw3ICsxMjA2LDcgQEAKICAgICAgIGNvZGU9J0wnLAogICAgICAgYXJnPWRlY2ltYWxubF9sb25nLAogICAgICAgc3RhY2tfYmVmb3JlPVtdLAotICAgICAgc3RhY2tfYWZ0ZXI9W3B5bG9uZ10sCisgICAgICBzdGFja19hZnRlcj1bcHlpbnRdLAogICAgICAgcHJvdG89MCwKICAgICAgIGRvYz0iIiJQdXNoIGEgbG9uZyBpbnRlZ2VyLgogCkBAIC0xMDUwLDcgKzEyMjQsNyBAQAogICAgICAgY29kZT0nXHg4YScsCiAgICAgICBhcmc9bG9uZzEsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlsb25nXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWludF0sCiAgICAgICBwcm90bz0yLAogICAgICAgZG9jPSIiIkxvbmcgaW50ZWdlciB1c2luZyBvbmUtYnl0ZSBsZW5ndGguCiAKQEAgLTEwNjEsNyArMTIzNSw3IEBACiAgICAgICBjb2RlPSdceDhiJywKICAgICAgIGFyZz1sb25nNCwKICAgICAgIHN0YWNrX2JlZm9yZT1bXSwKLSAgICAgIHN0YWNrX2FmdGVyPVtweWxvbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5aW50XSwKICAgICAgIHByb3RvPTIsCiAgICAgICBkb2M9IiIiTG9uZyBpbnRlZ2VyIHVzaW5nIGZvdW5kLWJ5dGUgbGVuZ3RoLgogCkBAIC0xMDc0LDQ1ICsxMjQ4LDUwIEBACiAgICAgICBjb2RlPSdTJywKICAgICAgIGFyZz1zdHJpbmdubCwKICAgICAgIHN0YWNrX2JlZm9yZT1bXSwKLSAgICAgIHN0YWNrX2FmdGVyPVtweXN0cmluZ10sCisgICAgICBzdGFja19hZnRlcj1bcHlieXRlc19vcl9zdHJdLAogICAgICAgcHJvdG89MCwKICAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIHN0cmluZyBvYmplY3QuCiAKICAgICAgIFRoZSBhcmd1bWVudCBpcyBhIHJlcHItc3R5bGUgc3RyaW5nLCB3aXRoIGJyYWNrZXRpbmcgcXVvdGUgY2hhcmFjdGVycywKICAgICAgIGFuZCBwZXJoYXBzIGVtYmVkZGVkIGVzY2FwZXMuICBUaGUgYXJndW1lbnQgZXh0ZW5kcyB1bnRpbCB0aGUgbmV4dAotICAgICAgbmV3bGluZSBjaGFyYWN0ZXIuICAoQWN0dWFsbHksIHRoZXkgYXJlIGRlY29kZWQgaW50byBhIHN0ciBpbnN0YW5jZQorICAgICAgbmV3bGluZSBjaGFyYWN0ZXIuICBUaGVzZSBhcmUgdXN1YWxseSBkZWNvZGVkIGludG8gYSBzdHIgaW5zdGFuY2UKICAgICAgIHVzaW5nIHRoZSBlbmNvZGluZyBnaXZlbiB0byB0aGUgVW5waWNrbGVyIGNvbnN0cnVjdG9yLiBvciB0aGUgZGVmYXVsdCwKLSAgICAgICdBU0NJSScuKQorICAgICAgJ0FTQ0lJJy4gIElmIHRoZSBlbmNvZGluZyBnaXZlbiB3YXMgJ2J5dGVzJyBob3dldmVyLCB0aGV5IHdpbGwgYmUKKyAgICAgIGRlY29kZWQgYXMgYnl0ZXMgb2JqZWN0IGluc3RlYWQuCiAgICAgICAiIiIpLAogCiAgICAgSShuYW1lPSdCSU5TVFJJTkcnLAogICAgICAgY29kZT0nVCcsCiAgICAgICBhcmc9c3RyaW5nNCwKICAgICAgIHN0YWNrX2JlZm9yZT1bXSwKLSAgICAgIHN0YWNrX2FmdGVyPVtweXN0cmluZ10sCisgICAgICBzdGFja19hZnRlcj1bcHlieXRlc19vcl9zdHJdLAogICAgICAgcHJvdG89MSwKICAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIHN0cmluZyBvYmplY3QuCiAKLSAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgNC1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAotICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgdGhhdCBtYW55Ci0gICAgICBieXRlcywgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuICAoQWN0dWFsbHksCi0gICAgICB0aGV5IGFyZSBkZWNvZGVkIGludG8gYSBzdHIgaW5zdGFuY2UgdXNpbmcgdGhlIGVuY29kaW5nIGdpdmVuIHRvIHRoZQotICAgICAgVW5waWNrbGVyIGNvbnN0cnVjdG9yLiBvciB0aGUgZGVmYXVsdCwgJ0FTQ0lJJy4pCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzIGEgNC1ieXRlIGxpdHRsZS1lbmRpYW4KKyAgICAgIHNpZ25lZCBpbnQgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZQorICAgICAgc2Vjb25kIGlzIHRoYXQgbWFueSBieXRlcywgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nCisgICAgICBjb250ZW50LiAgVGhlc2UgYXJlIHVzdWFsbHkgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlIHVzaW5nIHRoZQorICAgICAgZW5jb2RpbmcgZ2l2ZW4gdG8gdGhlIFVucGlja2xlciBjb25zdHJ1Y3Rvci4gb3IgdGhlIGRlZmF1bHQsCisgICAgICAnQVNDSUknLiAgSWYgdGhlIGVuY29kaW5nIGdpdmVuIHdhcyAnYnl0ZXMnIGhvd2V2ZXIsIHRoZXkgd2lsbCBiZQorICAgICAgZGVjb2RlZCBhcyBieXRlcyBvYmplY3QgaW5zdGVhZC4KICAgICAgICIiIiksCiAKICAgICBJKG5hbWU9J1NIT1JUX0JJTlNUUklORycsCiAgICAgICBjb2RlPSdVJywKICAgICAgIGFyZz1zdHJpbmcxLAogICAgICAgc3RhY2tfYmVmb3JlPVtdLAotICAgICAgc3RhY2tfYWZ0ZXI9W3B5c3RyaW5nXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWJ5dGVzX29yX3N0cl0sCiAgICAgICBwcm90bz0xLAogICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gc3RyaW5nIG9iamVjdC4KIAotICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSAxLWJ5dGUgdW5zaWduZWQgaW50IGdpdmluZwotICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBpcyB0aGF0IG1hbnkgYnl0ZXMsCi0gICAgICB3aGljaCBhcmUgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSBzdHJpbmcgY29udGVudC4gIChBY3R1YWxseSwgdGhleQotICAgICAgYXJlIGRlY29kZWQgaW50byBhIHN0ciBpbnN0YW5jZSB1c2luZyB0aGUgZW5jb2RpbmcgZ2l2ZW4gdG8gdGhlCi0gICAgICBVbnBpY2tsZXIgY29uc3RydWN0b3IuIG9yIHRoZSBkZWZhdWx0LCAnQVNDSUknLikKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiB0aGUgZmlyc3QgaXMgYSAxLWJ5dGUgdW5zaWduZWQgaW50IGdpdmluZworICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBpcyB0aGF0IG1hbnkKKyAgICAgIGJ5dGVzLCB3aGljaCBhcmUgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSBzdHJpbmcgY29udGVudC4gIFRoZXNlIGFyZQorICAgICAgdXN1YWxseSBkZWNvZGVkIGludG8gYSBzdHIgaW5zdGFuY2UgdXNpbmcgdGhlIGVuY29kaW5nIGdpdmVuIHRvCisgICAgICB0aGUgVW5waWNrbGVyIGNvbnN0cnVjdG9yLiBvciB0aGUgZGVmYXVsdCwgJ0FTQ0lJJy4gIElmIHRoZQorICAgICAgZW5jb2RpbmcgZ2l2ZW4gd2FzICdieXRlcycgaG93ZXZlciwgdGhleSB3aWxsIGJlIGRlY29kZWQgYXMgYnl0ZXMKKyAgICAgIG9iamVjdCBpbnN0ZWFkLgogICAgICAgIiIiKSwKIAogICAgICMgQnl0ZXMgKHByb3RvY29sIDMgb25seTsgb2xkZXIgcHJvdG9jb2xzIGRvbid0IHN1cHBvcnQgYnl0ZXMgYXQgYWxsKQpAQCAtMTE0Myw2ICsxMzIyLDE5IEBACiAgICAgICBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nQklOQllURVM4JywKKyAgICAgIGNvZGU9J1x4OGUnLAorICAgICAgYXJnPWJ5dGVzOCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWJ5dGVzXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBieXRlcyBvYmplY3QuCisKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgOC1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcKKyAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgdGhhdCBtYW55IGJ5dGVzLAorICAgICAgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIHNwZWxsIE5vbmUuCiAKICAgICBJKG5hbWU9J05PTkUnLApAQCAtMTE5MSw2ICsxMzgzLDE5IEBACiAgICAgICB1bnRpbCB0aGUgbmV4dCBuZXdsaW5lIGNoYXJhY3Rlci4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J1NIT1JUX0JJTlVOSUNPREUnLAorICAgICAgY29kZT0nXHg4YycsCisgICAgICBhcmc9dW5pY29kZXN0cmluZzEsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHl1bmljb2RlXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBVbmljb2RlIHN0cmluZyBvYmplY3QuCisKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgMS1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZy4gIFRoZSBzZWNvbmQgaXMgdGhhdCBtYW55CisgICAgICBieXRlcywgYW5kIGlzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcuCisgICAgICAiIiIpLAorCiAgICAgSShuYW1lPSdCSU5VTklDT0RFJywKICAgICAgIGNvZGU9J1gnLAogICAgICAgYXJnPXVuaWNvZGVzdHJpbmc0LApAQCAtMTIwNCw2ICsxNDA5LDE5IEBACiAgICAgICBieXRlcywgYW5kIGlzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdCSU5VTklDT0RFOCcsCisgICAgICBjb2RlPSdceDhkJywKKyAgICAgIGFyZz11bmljb2Rlc3RyaW5nOCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXVuaWNvZGVdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIFVuaWNvZGUgc3RyaW5nIG9iamVjdC4KKworICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSA4LWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50CisgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLiAgVGhlIHNlY29uZCBpcyB0aGF0IG1hbnkKKyAgICAgIGJ5dGVzLCBhbmQgaXMgdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZy4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gc3BlbGwgZmxvYXRzLgogCiAgICAgSShuYW1lPSdGTE9BVCcsCkBAIC0xNDI5LDYgKzE2NDcsNTQgQEAKICAgICAgIDEsIDIsIC4uLiwgbiwgYW5kIGluIHRoYXQgb3JkZXIuCiAgICAgICAiIiIpLAogCisgICAgIyBXYXlzIHRvIGJ1aWxkIHNldHMKKworICAgIEkobmFtZT0nRU1QVFlfU0VUJywKKyAgICAgIGNvZGU9J1x4OGYnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHlzZXRdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iUHVzaCBhbiBlbXB0eSBzZXQuIiksCisKKyAgICBJKG5hbWU9J0FERElURU1TJywKKyAgICAgIGNvZGU9J1x4OTAnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W3B5c2V0LCBtYXJrb2JqZWN0LCBzdGFja3NsaWNlXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXNldF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkFkZCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGl0ZW1zIHRvIGFuIGV4aXN0aW5nIHNldC4KKworICAgICAgVGhlIHNsaWNlIG9mIHRoZSBzdGFjayBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdCBpcyB0YWtlbiBhcworICAgICAgYSBzZXF1ZW5jZSBvZiBpdGVtcywgYWRkZWQgdG8gdGhlIHNldCBpbW1lZGlhdGVseSB1bmRlciB0aGUgdG9wbW9zdAorICAgICAgbWFya29iamVjdC4gIEV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QgaXMgcG9wcGVkLAorICAgICAgbGVhdmluZyB0aGUgbXV0YXRlZCBzZXQgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisKKyAgICAgIFN0YWNrIGJlZm9yZTogIC4uLiBweXNldCBtYXJrb2JqZWN0IGl0ZW1fMSAuLi4gaXRlbV9uCisgICAgICBTdGFjayBhZnRlcjogICAuLi4gcHlzZXQKKworICAgICAgd2hlcmUgcHlzZXQgaGFzIGJlZW4gbW9kaWZpZWQgdmlhIHB5c2V0LmFkZChpdGVtX2kpID0gaXRlbV9pIGZvciBpIGluCisgICAgICAxLCAyLCAuLi4sIG4sIGFuZCBpbiB0aGF0IG9yZGVyLgorICAgICAgIiIiKSwKKworICAgICMgV2F5IHRvIGJ1aWxkIGZyb3plbnNldHMKKworICAgIEkobmFtZT0nRlJPWkVOU0VUJywKKyAgICAgIGNvZGU9J1x4OTEnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W21hcmtvYmplY3QsIHN0YWNrc2xpY2VdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5ZnJvemVuc2V0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiQnVpbGQgYSBmcm96ZW5zZXQgb3V0IG9mIHRoZSB0b3Btb3N0IHNsaWNlLCBhZnRlciBtYXJrb2JqZWN0LgorCisgICAgICBBbGwgdGhlIHN0YWNrIGVudHJpZXMgZm9sbG93aW5nIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QgYXJlIHBsYWNlZCBpbnRvCisgICAgICBhIHNpbmdsZSBQeXRob24gZnJvemVuc2V0LCB3aGljaCBzaW5nbGUgZnJvemVuc2V0IG9iamVjdCByZXBsYWNlcyBhbGwKKyAgICAgIG9mIHRoZSBzdGFjayBmcm9tIHRoZSB0b3Btb3N0IG1hcmtvYmplY3Qgb253YXJkLiAgRm9yIGV4YW1wbGUsCisKKyAgICAgIFN0YWNrIGJlZm9yZTogLi4uIG1hcmtvYmplY3QgMSAyIDMKKyAgICAgIFN0YWNrIGFmdGVyOiAgLi4uIGZyb3plbnNldCh7MSwgMiwgM30pCisgICAgICAiIiIpLAorCiAgICAgIyBTdGFjayBtYW5pcHVsYXRpb24uCiAKICAgICBJKG5hbWU9J1BPUCcsCkBAIC0xNTUwLDYgKzE4MTYsMTggQEAKICAgICAgIHVuc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50ZWdlciBmb2xsb3dpbmcuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdNRU1PSVpFJywKKyAgICAgIGNvZGU9J1x4OTQnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W2FueW9iamVjdF0sCisgICAgICBzdGFja19hZnRlcj1bYW55b2JqZWN0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiU3RvcmUgdGhlIHN0YWNrIHRvcCBpbnRvIHRoZSBtZW1vLiAgVGhlIHN0YWNrIGlzIG5vdCBwb3BwZWQuCisKKyAgICAgIFRoZSBpbmRleCBvZiB0aGUgbWVtbyBsb2NhdGlvbiB0byB3cml0ZSBpcyB0aGUgbnVtYmVyIG9mCisgICAgICBlbGVtZW50cyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgbWVtby4KKyAgICAgICIiIiksCisKICAgICAjIEFjY2VzcyB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IChwcmVkZWZpbmVkIG9iamVjdHMpLiAgQWtpbiB0byB0aGUgR0VUCiAgICAgIyBmYW1pbHkuCiAKQEAgLTE2MTUsNiArMTg5MywxNSBAQAogICAgICAgc3RhY2ssIHNvIHVucGlja2xpbmcgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBmb3JtIG9mIGxvb2t1cC4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J1NUQUNLX0dMT0JBTCcsCisgICAgICBjb2RlPSdceDkzJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVtweXVuaWNvZGUsIHB5dW5pY29kZV0sCisgICAgICBzdGFja19hZnRlcj1bYW55b2JqZWN0XSwKKyAgICAgIHByb3RvPTAsCisgICAgICBkb2M9IiIiUHVzaCBhIGdsb2JhbCBvYmplY3QgKG1vZHVsZS5hdHRyKSBvbiB0aGUgc3RhY2suCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIGJ1aWxkIG9iamVjdHMgb2YgY2xhc3NlcyBwaWNrbGUgZG9lc24ndCBrbm93IGFib3V0IGRpcmVjdGx5CiAgICAgIyAodXNlci1kZWZpbmVkIGNsYXNzZXMpLiAgSSBkZXNwYWlyIG9mIGRvY3VtZW50aW5nIHRoaXMgYWNjdXJhdGVseQogICAgICMgYW5kIGNvbXByZWhlbnNpYmx5IC0tIHlvdSByZWFsbHkgaGF2ZSB0byByZWFkIHRoZSBwaWNrbGUgY29kZSB0bwpAQCAtMTc3MSw2ICsyMDU4LDIxIEBACiAgICAgICBvbnRvIHRoZSBzdGFjay4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J05FV09CSl9FWCcsCisgICAgICBjb2RlPSdceDkyJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVthbnlvYmplY3QsIGFueW9iamVjdCwgYW55b2JqZWN0XSwKKyAgICAgIHN0YWNrX2FmdGVyPVthbnlvYmplY3RdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJCdWlsZCBhbiBvYmplY3QgaW5zdGFuY2UuCisKKyAgICAgIFRoZSBzdGFjayBiZWZvcmUgc2hvdWxkIGJlIHRob3VnaHQgb2YgYXMgY29udGFpbmluZyBhIGNsYXNzCisgICAgICBvYmplY3QgZm9sbG93ZWQgYnkgYW4gYXJndW1lbnQgdHVwbGUgYW5kIGJ5IGEga2V5d29yZCBhcmd1bWVudCBkaWN0CisgICAgICAodGhlIGRpY3QgYmVpbmcgdGhlIHN0YWNrIHRvcCkuICBDYWxsIHRoZXNlIGNscyBhbmQgYXJncy4gIFRoZXkgYXJlCisgICAgICBwb3BwZWQgb2ZmIHRoZSBzdGFjaywgYW5kIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgICAgY2xzLl9fbmV3X18oY2xzLCAqYXJncywgKmt3YXJncykgaXMgIHB1c2hlZCBiYWNrICBvbnRvIHRoZSBzdGFjay4KKyAgICAgICIiIiksCisKICAgICAjIE1hY2hpbmUgY29udHJvbC4KIAogICAgIEkobmFtZT0nUFJPVE8nLApAQCAtMTc5OCw2ICsyMTAwLDIwIEBACiAgICAgICBlbXB0eSB0aGVuLgogICAgICAgIiIiKSwKIAorICAgICMgRnJhbWluZyBzdXBwb3J0LgorCisgICAgSShuYW1lPSdGUkFNRScsCisgICAgICBjb2RlPSdceDk1JywKKyAgICAgIGFyZz11aW50OCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJJbmRpY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZyYW1lLgorCisgICAgICBUaGUgdW5waWNrbGVyIG1heSB1c2UgdGhpcyBvcGNvZGUgdG8gc2FmZWx5IHByZWZldGNoIGRhdGEgZnJvbSBpdHMKKyAgICAgIHVuZGVybHlpbmcgc3RyZWFtLgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBkZWFsIHdpdGggcGVyc2lzdGVudCBJRHMuCiAKICAgICBJKG5hbWU9J1BFUlNJRCcsCkBAIC0xOTA0LDYgKzIyMjAsMzggQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBIHBpY2tsZSBvcGNvZGUgZ2VuZXJhdG9yLgogCitkZWYgX2dlbm9wcyhkYXRhLCB5aWVsZF9lbmRfcG9zPUZhbHNlKToKKyAgICBpZiBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzX3R5cGVzKToKKyAgICAgICAgZGF0YSA9IGlvLkJ5dGVzSU8oZGF0YSkKKworICAgIGlmIGhhc2F0dHIoZGF0YSwgInRlbGwiKToKKyAgICAgICAgZ2V0cG9zID0gZGF0YS50ZWxsCisgICAgZWxzZToKKyAgICAgICAgZ2V0cG9zID0gbGFtYmRhOiBOb25lCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwb3MgPSBnZXRwb3MoKQorICAgICAgICBjb2RlID0gZGF0YS5yZWFkKDEpCisgICAgICAgIG9wY29kZSA9IGNvZGUyb3AuZ2V0KGNvZGUuZGVjb2RlKCJsYXRpbi0xIikpCisgICAgICAgIGlmIG9wY29kZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgY29kZSA9PSBiIiI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgc2VlaW5nIFNUT1AiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhdCBwb3NpdGlvbiAlcywgb3Bjb2RlICVyIHVua25vd24iICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bmtub3duPiIgaWYgcG9zIGlzIE5vbmUgZWxzZSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlKSkKKyAgICAgICAgaWYgb3Bjb2RlLmFyZyBpcyBOb25lOgorICAgICAgICAgICAgYXJnID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJnID0gb3Bjb2RlLmFyZy5yZWFkZXIoZGF0YSkKKyAgICAgICAgaWYgeWllbGRfZW5kX3BvczoKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgYXJnLCBwb3MsIGdldHBvcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIGFyZywgcG9zCisgICAgICAgIGlmIGNvZGUgPT0gYicuJzoKKyAgICAgICAgICAgIGFzc2VydCBvcGNvZGUubmFtZSA9PSAnU1RPUCcKKyAgICAgICAgICAgIGJyZWFrCisKIGRlZiBnZW5vcHMocGlja2xlKToKICAgICAiIiJHZW5lcmF0ZSBhbGwgdGhlIG9wY29kZXMgaW4gYSBwaWNrbGUuCiAKQEAgLTE5MjcsNjIgKzIyNzUsNDggQEAKICAgICB1c2VkLiAgRWxzZSAodGhlIHBpY2tsZSBkb2Vzbid0IGhhdmUgYSB0ZWxsKCksIGFuZCBpdCdzIG5vdCBvYnZpb3VzIGhvdwogICAgIHRvIHF1ZXJ5IGl0cyBjdXJyZW50IHBvc2l0aW9uKSBwb3MgaXMgTm9uZS4KICAgICAiIiIKLQotICAgIGlmIGlzaW5zdGFuY2UocGlja2xlLCBieXRlc190eXBlcyk6Ci0gICAgICAgIGltcG9ydCBpbwotICAgICAgICBwaWNrbGUgPSBpby5CeXRlc0lPKHBpY2tsZSkKLQotICAgIGlmIGhhc2F0dHIocGlja2xlLCAidGVsbCIpOgotICAgICAgICBnZXRwb3MgPSBwaWNrbGUudGVsbAotICAgIGVsc2U6Ci0gICAgICAgIGdldHBvcyA9IGxhbWJkYTogTm9uZQotCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgcG9zID0gZ2V0cG9zKCkKLSAgICAgICAgY29kZSA9IHBpY2tsZS5yZWFkKDEpCi0gICAgICAgIG9wY29kZSA9IGNvZGUyb3AuZ2V0KGNvZGUuZGVjb2RlKCJsYXRpbi0xIikpCi0gICAgICAgIGlmIG9wY29kZSBpcyBOb25lOgotICAgICAgICAgICAgaWYgY29kZSA9PSBiIiI6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgc2VlaW5nIFNUT1AiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhdCBwb3NpdGlvbiAlcywgb3Bjb2RlICVyIHVua25vd24iICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zIGlzIE5vbmUgYW5kICI8dW5rbm93bj4iIG9yIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUpKQotICAgICAgICBpZiBvcGNvZGUuYXJnIGlzIE5vbmU6Ci0gICAgICAgICAgICBhcmcgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhcmcgPSBvcGNvZGUuYXJnLnJlYWRlcihwaWNrbGUpCi0gICAgICAgIHlpZWxkIG9wY29kZSwgYXJnLCBwb3MKLSAgICAgICAgaWYgY29kZSA9PSBiJy4nOgotICAgICAgICAgICAgYXNzZXJ0IG9wY29kZS5uYW1lID09ICdTVE9QJwotICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gX2dlbm9wcyhwaWNrbGUpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBIHBpY2tsZSBvcHRpbWl6ZXIuCiAKIGRlZiBvcHRpbWl6ZShwKToKICAgICAnT3B0aW1pemUgYSBwaWNrbGUgc3RyaW5nIGJ5IHJlbW92aW5nIHVudXNlZCBQVVQgb3Bjb2RlcycKLSAgICBnZXRzID0gc2V0KCkgICAgICAgICAgICAjIHNldCBvZiBhcmdzIHVzZWQgYnkgYSBHRVQgb3Bjb2RlCi0gICAgcHV0cyA9IFtdICAgICAgICAgICAgICAgIyAoYXJnLCBzdGFydHBvcywgc3RvcHBvcykgZm9yIHRoZSBQVVQgb3Bjb2RlcwotICAgIHByZXZwb3MgPSBOb25lICAgICAgICAgICMgc2V0IHRvIHBvcyBpZiBwcmV2aW91cyBvcGNvZGUgd2FzIGEgUFVUCi0gICAgZm9yIG9wY29kZSwgYXJnLCBwb3MgaW4gZ2Vub3BzKHApOgotICAgICAgICBpZiBwcmV2cG9zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHV0cy5hcHBlbmQoKHByZXZhcmcsIHByZXZwb3MsIHBvcykpCi0gICAgICAgICAgICBwcmV2cG9zID0gTm9uZQorICAgIG5vdF9hX3B1dCA9IG9iamVjdCgpCisgICAgZ2V0cyA9IHsgbm90X2FfcHV0IH0gICAgIyBzZXQgb2YgYXJncyB1c2VkIGJ5IGEgR0VUIG9wY29kZQorICAgIG9wY29kZXMgPSBbXSAgICAgICAgICAgICMgKHN0YXJ0cG9zLCBzdG9wcG9zLCBwdXRpZCkKKyAgICBwcm90byA9IDAKKyAgICBmb3Igb3Bjb2RlLCBhcmcsIHBvcywgZW5kX3BvcyBpbiBfZ2Vub3BzKHAsIHlpZWxkX2VuZF9wb3M9VHJ1ZSk6CiAgICAgICAgIGlmICdQVVQnIGluIG9wY29kZS5uYW1lOgotICAgICAgICAgICAgcHJldmFyZywgcHJldnBvcyA9IGFyZywgcG9zCi0gICAgICAgIGVsaWYgJ0dFVCcgaW4gb3Bjb2RlLm5hbWU6Ci0gICAgICAgICAgICBnZXRzLmFkZChhcmcpCisgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgocG9zLCBlbmRfcG9zLCBhcmcpKQorICAgICAgICBlbGlmICdGUkFNRScgaW4gb3Bjb2RlLm5hbWU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiAnR0VUJyBpbiBvcGNvZGUubmFtZToKKyAgICAgICAgICAgICAgICBnZXRzLmFkZChhcmcpCisgICAgICAgICAgICBlbGlmIG9wY29kZS5uYW1lID09ICdQUk9UTyc6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHBvcyA9PSAwLCBwb3MKKyAgICAgICAgICAgICAgICBwcm90byA9IGFyZworICAgICAgICAgICAgb3Bjb2Rlcy5hcHBlbmQoKHBvcywgZW5kX3Bvcywgbm90X2FfcHV0KSkKKyAgICAgICAgICAgIHByZXZwb3MsIHByZXZhcmcgPSBwb3MsIE5vbmUKIAotICAgICMgQ29weSB0aGUgcGlja2xlIHN0cmluZyBleGNlcHQgZm9yIFBVVFMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgR0VUCi0gICAgcyA9IFtdCi0gICAgaSA9IDAKLSAgICBmb3IgYXJnLCBzdGFydCwgc3RvcCBpbiBwdXRzOgotICAgICAgICBqID0gc3RvcCBpZiAoYXJnIGluIGdldHMpIGVsc2Ugc3RhcnQKLSAgICAgICAgcy5hcHBlbmQocFtpOmpdKQotICAgICAgICBpID0gc3RvcAotICAgIHMuYXBwZW5kKHBbaTpdKQotICAgIHJldHVybiBiJycuam9pbihzKQorICAgICMgQ29weSB0aGUgb3Bjb2RlcyBleGNlcHQgZm9yIFBVVFMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgR0VUCisgICAgb3V0ID0gaW8uQnl0ZXNJTygpCisgICAgb3Bjb2RlcyA9IGl0ZXIob3Bjb2RlcykKKyAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAjIFdyaXRlIHRoZSBQUk9UTyBoZWFkZXIgYmVmb3JlIGFueSBmcmFtaW5nCisgICAgICAgIHN0YXJ0LCBzdG9wLCBfID0gbmV4dChvcGNvZGVzKQorICAgICAgICBvdXQud3JpdGUocFtzdGFydDpzdG9wXSkKKyAgICBidWYgPSBwaWNrbGUuX0ZyYW1lcihvdXQud3JpdGUpCisgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgYnVmLnN0YXJ0X2ZyYW1pbmcoKQorICAgIGZvciBzdGFydCwgc3RvcCwgcHV0aWQgaW4gb3Bjb2RlczoKKyAgICAgICAgaWYgcHV0aWQgaW4gZ2V0czoKKyAgICAgICAgICAgIGJ1Zi5jb21taXRfZnJhbWUoKQorICAgICAgICAgICAgYnVmLndyaXRlKHBbc3RhcnQ6c3RvcF0pCisgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgYnVmLmVuZF9mcmFtaW5nKCkKKyAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgc3ltYm9saWMgcGlja2xlIGRpc2Fzc2VtYmxlci4KQEAgLTIwODIsMTcgKzI0MTYsMjAgQEAKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9IG1hcmttc2cgPSAibm8gTUFSSyBleGlzdHMgb24gc3RhY2siCiAKICAgICAgICAgIyBDaGVjayBmb3IgY29ycmVjdCBtZW1vIHVzYWdlLgotICAgICAgICBpZiBvcGNvZGUubmFtZSBpbiAoIlBVVCIsICJCSU5QVVQiLCAiTE9OR19CSU5QVVQiKToKLSAgICAgICAgICAgIGFzc2VydCBhcmcgaXMgbm90IE5vbmUKLSAgICAgICAgICAgIGlmIGFyZyBpbiBtZW1vOgorICAgICAgICBpZiBvcGNvZGUubmFtZSBpbiAoIlBVVCIsICJCSU5QVVQiLCAiTE9OR19CSU5QVVQiLCAiTUVNT0laRSIpOgorICAgICAgICAgICAgaWYgb3Bjb2RlLm5hbWUgPT0gIk1FTU9JWkUiOgorICAgICAgICAgICAgICAgIG1lbW9faWR4ID0gbGVuKG1lbW8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBhcmcgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICBtZW1vX2lkeCA9IGFyZworICAgICAgICAgICAgaWYgbWVtb19pZHggaW4gbWVtbzoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJtZW1vIGtleSAlciBhbHJlYWR5IGRlZmluZWQiICUgYXJnCiAgICAgICAgICAgICBlbGlmIG5vdCBzdGFjazoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJzdGFjayBpcyBlbXB0eSAtLSBjYW4ndCBzdG9yZSBpbnRvIG1lbW8iCiAgICAgICAgICAgICBlbGlmIHN0YWNrWy0xXSBpcyBtYXJrb2JqZWN0OgogICAgICAgICAgICAgICAgIGVycm9ybXNnID0gImNhbid0IHN0b3JlIG1hcmtvYmplY3QgaW4gdGhlIG1lbW8iCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1lbW9bYXJnXSA9IHN0YWNrWy0xXQotCisgICAgICAgICAgICAgICAgbWVtb1ttZW1vX2lkeF0gPSBzdGFja1stMV0KICAgICAgICAgZWxpZiBvcGNvZGUubmFtZSBpbiAoIkdFVCIsICJCSU5HRVQiLCAiTE9OR19CSU5HRVQiKToKICAgICAgICAgICAgIGlmIGFyZyBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4oYWZ0ZXIpID09IDEKZGlmZiAtLWdpdCBhL0xpYi9wa2d1dGlsLnB5IGIvTGliL3BrZ3V0aWwucHkKaW5kZXggMjBlNjQ5OC4uYTU0ZTk0NyAxMDA2NDQKLS0tIGEvTGliL3BrZ3V0aWwucHkKKysrIGIvTGliL3BrZ3V0aWwucHkKQEAgLTEsMTIgKzEsMTQgQEAKICIiIlV0aWxpdGllcyB0byBzdXBwb3J0IHBhY2thZ2VzLiIiIgogCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCBzaW5nbGVkaXNwYXRjaCBhcyBzaW1wbGVnZW5lcmljCiBpbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCi1mcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCitpbXBvcnQgc3lzCiBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCitpbXBvcnQgd2FybmluZ3MKIAogX19hbGxfXyA9IFsKICAgICAnZ2V0X2ltcG9ydGVyJywgJ2l0ZXJfaW1wb3J0ZXJzJywgJ2dldF9sb2FkZXInLCAnZmluZF9sb2FkZXInLApAQCAtMTQsNTkgKzE2LDM0IEBACiAgICAgJ0ltcEltcG9ydGVyJywgJ0ltcExvYWRlcicsICdyZWFkX2NvZGUnLCAnZXh0ZW5kX3BhdGgnLAogXQogCisKK2RlZiBfZ2V0X3NwZWMoZmluZGVyLCBuYW1lKToKKyAgICAiIiJSZXR1cm4gdGhlIGZpbmRlci1zcGVjaWZpYyBtb2R1bGUgc3BlYy4iIiIKKyAgICAjIFdvcmtzIHdpdGggbGVnYWN5IGZpbmRlcnMuCisgICAgdHJ5OgorICAgICAgICBmaW5kX3NwZWMgPSBmaW5kZXIuZmluZF9zcGVjCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSkKKyAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZpbmRfc3BlYyhuYW1lKQorCisKIGRlZiByZWFkX2NvZGUoc3RyZWFtKToKICAgICAjIFRoaXMgaGVscGVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgdGhlIFBFUCAzMDIgZW11bGF0aW9uIHRvCiAgICAgIyBjb3JyZWN0bHkgaGFuZGxlIGNvbXBpbGVkIGZpbGVzCiAgICAgaW1wb3J0IG1hcnNoYWwKIAogICAgIG1hZ2ljID0gc3RyZWFtLnJlYWQoNCkKLSAgICBpZiBtYWdpYyAhPSBpbXAuZ2V0X21hZ2ljKCk6CisgICAgaWYgbWFnaWMgIT0gaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgc3RyZWFtLnJlYWQoOCkgIyBTa2lwIHRpbWVzdGFtcCBhbmQgc2l6ZQogICAgIHJldHVybiBtYXJzaGFsLmxvYWQoc3RyZWFtKQogCiAKLWRlZiBzaW1wbGVnZW5lcmljKGZ1bmMpOgotICAgICIiIk1ha2UgYSB0cml2aWFsIHNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIiIiCi0gICAgcmVnaXN0cnkgPSB7fQotICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3KToKLSAgICAgICAgb2IgPSBhcmdzWzBdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNscyA9IG9iLl9fY2xhc3NfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBjbHMgPSB0eXBlKG9iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtcm8gPSBjbHMuX19tcm9fXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY2xhc3MgY2xzKGNscywgb2JqZWN0KToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIG1ybyA9IGNscy5fX21yb19fWzE6XQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBtcm8gPSBvYmplY3QsICAgIyBtdXN0IGJlIGFuIEV4dGVuc2lvbkNsYXNzIG9yIHNvbWUgc3VjaCAgOigKLSAgICAgICAgZm9yIHQgaW4gbXJvOgotICAgICAgICAgICAgaWYgdCBpbiByZWdpc3RyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cnlbdF0oKmFyZ3MsICoqa3cpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprdykKLSAgICB0cnk6Ci0gICAgICAgIHdyYXBwZXIuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCi0gICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgcGFzcyAgICAjIFB5dGhvbiAyLjMgZG9lc24ndCBhbGxvdyBmdW5jdGlvbnMgdG8gYmUgcmVuYW1lZAotCi0gICAgZGVmIHJlZ2lzdGVyKHR5cCwgZnVuYz1Ob25lKToKLSAgICAgICAgaWYgZnVuYyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3Rlcih0eXAsIGYpCi0gICAgICAgIHJlZ2lzdHJ5W3R5cF0gPSBmdW5jCi0gICAgICAgIHJldHVybiBmdW5jCi0KLSAgICB3cmFwcGVyLl9fZGljdF9fID0gZnVuYy5fX2RpY3RfXwotICAgIHdyYXBwZXIuX19kb2NfXyA9IGZ1bmMuX19kb2NfXwotICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgotICAgIHJldHVybiB3cmFwcGVyCi0KLQogZGVmIHdhbGtfcGFja2FnZXMocGF0aD1Ob25lLCBwcmVmaXg9JycsIG9uZXJyb3I9Tm9uZSk6CiAgICAgIiIiWWllbGRzIChtb2R1bGVfbG9hZGVyLCBuYW1lLCBpc3BrZykgZm9yIGFsbCBtb2R1bGVzIHJlY3Vyc2l2ZWx5CiAgICAgb24gcGF0aCwgb3IsIGlmIHBhdGggaXMgTm9uZSwgYWxsIGFjY2Vzc2libGUgbW9kdWxlcy4KQEAgLTEyMSw4ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgIyBkb24ndCB0cmF2ZXJzZSBwYXRoIGl0ZW1zIHdlJ3ZlIHNlZW4gYmVmb3JlCiAgICAgICAgICAgICAgICAgcGF0aCA9IFtwIGZvciBwIGluIHBhdGggaWYgbm90IHNlZW4ocCldCiAKLSAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB3YWxrX3BhY2thZ2VzKHBhdGgsIG5hbWUrJy4nLCBvbmVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgaXRlbQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2Fsa19wYWNrYWdlcyhwYXRoLCBuYW1lKycuJywgb25lcnJvcikKIAogCiBkZWYgaXRlcl9tb2R1bGVzKHBhdGg9Tm9uZSwgcHJlZml4PScnKToKQEAgLTE0OSwxMyArMTI1LDEyIEBACiAgICAgICAgICAgICAgICAgeWllbGQgaSwgbmFtZSwgaXNwa2cKIAogCi0jQHNpbXBsZWdlbmVyaWMKK0BzaW1wbGVnZW5lcmljCiBkZWYgaXRlcl9pbXBvcnRlcl9tb2R1bGVzKGltcG9ydGVyLCBwcmVmaXg9JycpOgogICAgIGlmIG5vdCBoYXNhdHRyKGltcG9ydGVyLCAnaXRlcl9tb2R1bGVzJyk6CiAgICAgICAgIHJldHVybiBbXQogICAgIHJldHVybiBpbXBvcnRlci5pdGVyX21vZHVsZXMocHJlZml4KQogCi1pdGVyX2ltcG9ydGVyX21vZHVsZXMgPSBzaW1wbGVnZW5lcmljKGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcykKIAogIyBJbXBsZW1lbnQgYSBmaWxlIHdhbGtlciBmb3IgdGhlIG5vcm1hbCBpbXBvcnRsaWIgcGF0aCBob29rCiBkZWYgX2l0ZXJfZmlsZV9maW5kZXJfbW9kdWxlcyhpbXBvcnRlciwgcHJlZml4PScnKToKQEAgLTIwMSw2ICsxNzYsMTMgQEAKIGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcy5yZWdpc3RlcigKICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIsIF9pdGVyX2ZpbGVfZmluZGVyX21vZHVsZXMpCiAKKworZGVmIF9pbXBvcnRfaW1wKCk6CisgICAgZ2xvYmFsIGltcAorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBpbXAgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnaW1wJykKKwogY2xhc3MgSW1wSW1wb3J0ZXI6CiAgICAgIiIiUEVQIDMwMiBJbXBvcnRlciB0aGF0IHdyYXBzIFB5dGhvbidzICJjbGFzc2ljIiBpbXBvcnQgYWxnb3JpdGhtCiAKQEAgLTIxMyw4ICsxOTUsMTAgQEAKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUpOgotICAgICAgICB3YXJuKCJUaGlzIGVtdWxhdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ2ltcG9ydGxpYicgaW5zdGVhZCIsCisgICAgICAgIGdsb2JhbCBpbXAKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAogICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgX2ltcG9ydF9pbXAoKQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC0yNzksOCArMjYzLDkgQEAKICAgICBjb2RlID0gc291cmNlID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bGxuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZXRjKToKLSAgICAgICAgd2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAotICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgX2ltcG9ydF9pbXAoKQogICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQogICAgICAgICBzZWxmLmZ1bGxuYW1lID0gZnVsbG5hbWUKQEAgLTM1MCwxNiArMzM1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCiAgICAgICAgICAgICBlbGlmIG1vZF90eXBlPT1pbXAuUFlfQ09NUElMRUQ6CiAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5maWxlbmFtZVs6LTFdKToKLSAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZVs6LTFdLCAncicpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlID0gZi5yZWFkKCkKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lWzotMV0sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlID0gZi5yZWFkKCkKICAgICAgICAgICAgIGVsaWYgbW9kX3R5cGU9PWltcC5QS0dfRElSRUNUT1JZOgogICAgICAgICAgICAgICAgIHNlbGYuc291cmNlID0gc2VsZi5fZ2V0X2RlbGVnYXRlKCkuZ2V0X3NvdXJjZSgpCiAgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQogCi0KICAgICBkZWYgX2dldF9kZWxlZ2F0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIEltcEltcG9ydGVyKHNlbGYuZmlsZW5hbWUpLmZpbmRfbW9kdWxlKCdfX2luaXRfXycpCisgICAgICAgIGZpbmRlciA9IEltcEltcG9ydGVyKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHNwZWMgPSBfZ2V0X3NwZWMoZmluZGVyLCAnX19pbml0X18nKQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKIAogICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWU9Tm9uZSk6CiAgICAgICAgIGZ1bGxuYW1lID0gc2VsZi5fZml4X25hbWUoZnVsbG5hbWUpCkBAIC00NTYsMTIgKzQ0MSwxMiBAQAogICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KICAgICBlbHNlOgotICAgICAgICBmb3IgaW1wb3J0ZXIgaW4gc3lzLm1ldGFfcGF0aDoKLSAgICAgICAgICAgIHlpZWxkIGltcG9ydGVyCisgICAgICAgIHlpZWxkIGZyb20gc3lzLm1ldGFfcGF0aAogICAgICAgICBwYXRoID0gc3lzLnBhdGgKICAgICBmb3IgaXRlbSBpbiBwYXRoOgogICAgICAgICB5aWVsZCBnZXRfaW1wb3J0ZXIoaXRlbSkKIAorCiBkZWYgZ2V0X2xvYWRlcihtb2R1bGVfb3JfbmFtZSk6CiAgICAgIiIiR2V0IGEgUEVQIDMwMiAibG9hZGVyIiBvYmplY3QgZm9yIG1vZHVsZV9vcl9uYW1lCiAKQEAgLTQ3MSwxMSArNDU2LDE1IEBACiAgICAgIiIiCiAgICAgaWYgbW9kdWxlX29yX25hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgIG1vZHVsZV9vcl9uYW1lID0gc3lzLm1vZHVsZXNbbW9kdWxlX29yX25hbWVdCisgICAgICAgIGlmIG1vZHVsZV9vcl9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlX29yX25hbWUsIE1vZHVsZVR5cGUpOgogICAgICAgICBtb2R1bGUgPSBtb2R1bGVfb3JfbmFtZQogICAgICAgICBsb2FkZXIgPSBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKQogICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gbG9hZGVyCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19zcGVjX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgZnVsbG5hbWUgPSBtb2R1bGUuX19uYW1lX18KICAgICBlbHNlOgogICAgICAgICBmdWxsbmFtZSA9IG1vZHVsZV9vcl9uYW1lCkBAIC00ODUsMjkgKzQ3NCwyMiBAQAogZGVmIGZpbmRfbG9hZGVyKGZ1bGxuYW1lKToKICAgICAiIiJGaW5kIGEgUEVQIDMwMiAibG9hZGVyIiBvYmplY3QgZm9yIGZ1bGxuYW1lCiAKLSAgICBUaGlzIGlzIHMgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgOmZ1bmM6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAgdGhhdAotICAgIHNldHMgdGhlICpwYXRoKiBhcmd1bWVudCBjb3JyZWN0bHkgd2hlbiBzZWFyY2hpbmcgZm9yIHN1Ym1vZHVsZXMsIGFuZAotICAgIGFsc28gZW5zdXJlcyBwYXJlbnQgcGFja2FnZXMgKGlmIGFueSkgYXJlIGltcG9ydGVkIGJlZm9yZSBzZWFyY2hpbmcgZm9yCi0gICAgc3VibW9kdWxlcy4KKyAgICBUaGlzIGlzIGEgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd3JhcHBlciBhcm91bmQKKyAgICBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMgdGhhdCBjb252ZXJ0cyBtb3N0IGZhaWx1cmVzIHRvIEltcG9ydEVycm9yCisgICAgYW5kIG9ubHkgcmV0dXJucyB0aGUgbG9hZGVyIHJhdGhlciB0aGFuIHRoZSBmdWxsIHNwZWMKICAgICAiIiIKICAgICBpZiBmdWxsbmFtZS5zdGFydHN3aXRoKCcuJyk6CiAgICAgICAgIG1zZyA9ICJSZWxhdGl2ZSBtb2R1bGUgbmFtZSB7IXJ9IG5vdCBzdXBwb3J0ZWQiLmZvcm1hdChmdWxsbmFtZSkKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnKQotICAgIHBhdGggPSBOb25lCi0gICAgcGtnX25hbWUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCIuIilbMF0KLSAgICBpZiBwa2dfbmFtZToKLSAgICAgICAgcGtnID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgIHBhdGggPSBnZXRhdHRyKHBrZywgIl9fcGF0aF9fIiwgTm9uZSkKLSAgICAgICAgaWYgcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBpbXBvcnRsaWIuZmluZF9sb2FkZXIoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCiAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvcikgYXMgZXg6CiAgICAgICAgICMgVGhpcyBoYWNrIGZpeGVzIGFuIGltcGVkYW5jZSBtaXNtYXRjaCBiZXR3ZWVuIHBrZ3V0aWwgYW5kCiAgICAgICAgICMgaW1wb3J0bGliLCB3aGVyZSB0aGUgbGF0dGVyIHJhaXNlcyBvdGhlciBlcnJvcnMgZm9yIGNhc2VzIHdoZXJlCiAgICAgICAgICMgcGtndXRpbCBwcmV2aW91c2x5IHJhaXNlZCBJbXBvcnRFcnJvcgogICAgICAgICBtc2cgPSAiRXJyb3Igd2hpbGUgZmluZGluZyBsb2FkZXIgZm9yIHshcn0gKHt9OiB7fSkiCiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQoZnVsbG5hbWUsIHR5cGUoZXgpLCBleCkpIGZyb20gZXgKKyAgICByZXR1cm4gc3BlYy5sb2FkZXIgaWYgc3BlYyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKIAogCiBkZWYgZXh0ZW5kX3BhdGgocGF0aCwgbmFtZSk6CkBAIC01NjksMTMgKzU1MSwxNCBAQAogCiAgICAgICAgIGZpbmRlciA9IGdldF9pbXBvcnRlcihkaXIpCiAgICAgICAgIGlmIGZpbmRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBvcnRpb25zID0gW10KKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMoZmluYWxfbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgb3IgW10KICAgICAgICAgICAgICMgSXMgdGhpcyBmaW5kZXIgUEVQIDQyMCBjb21wbGlhbnQ/Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6Ci0gICAgICAgICAgICAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihmaW5hbF9uYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIE5vLCBubyBuZWVkIHRvIGNhbGwgaXQKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBOb25lCi0gICAgICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6CisgICAgICAgICAgICAgICAgXywgcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIoZmluYWxfbmFtZSkKIAogICAgICAgICAgICAgZm9yIHBvcnRpb24gaW4gcG9ydGlvbnM6CiAgICAgICAgICAgICAgICAgIyBYWFggVGhpcyBtYXkgc3RpbGwgYWRkIGR1cGxpY2F0ZSBlbnRyaWVzIHRvIHBhdGggb24KQEAgLTU4OSwxOSArNTcyLDIwIEBACiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2ZpbGUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKHBrZ2ZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3Qgb3BlbiAlczogJXNcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZ2ZpbGUsIG1zZykpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHBhdGguYXBwZW5kKGxpbmUpICMgRG9uJ3QgY2hlY2sgZm9yIGV4aXN0ZW5jZSEKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZChsaW5lKSAjIERvbid0IGNoZWNrIGZvciBleGlzdGVuY2UhCiAKICAgICByZXR1cm4gcGF0aAogCisKIGRlZiBnZXRfZGF0YShwYWNrYWdlLCByZXNvdXJjZSk6CiAgICAgIiIiR2V0IGEgcmVzb3VyY2UgZnJvbSBhIHBhY2thZ2UuCiAKQEAgLTYyNCwxMCArNjA4LDE1IEBACiAgICAgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBnZXRfZGF0YSgpLCB0aGVuIE5vbmUgaXMgcmV0dXJuZWQuCiAgICAgIiIiCiAKLSAgICBsb2FkZXIgPSBnZXRfbG9hZGVyKHBhY2thZ2UpCisgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYyhwYWNrYWdlKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgogICAgIGlmIGxvYWRlciBpcyBOb25lIG9yIG5vdCBoYXNhdHRyKGxvYWRlciwgJ2dldF9kYXRhJyk6CiAgICAgICAgIHJldHVybiBOb25lCi0gICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yIGxvYWRlci5sb2FkX21vZHVsZShwYWNrYWdlKQorICAgICMgWFhYIG5lZWRzIHRlc3QKKyAgICBtb2QgPSAoc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yCisgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5sb2FkKCkpCiAgICAgaWYgbW9kIGlzIE5vbmUgb3Igbm90IGhhc2F0dHIobW9kLCAnX19maWxlX18nKToKICAgICAgICAgcmV0dXJuIE5vbmUKIApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L0lOLnB5IGIvTGliL3BsYXQtb3MyZW14L0lOLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNhZTI0Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9JTi5weQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9uZXRpbmV0L2luLmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy9wYXJhbS5oCi1QQUdFX1NJWkUgPSAweDEwMDAKLUhaID0gMTAwCi1NQVhOQU1MRU4gPSAyNjAKLU1BWFBBVEhMRU4gPSAyNjAKLWRlZiBodG9ubChYKTogcmV0dXJuIF9zd2FwbChYKQotCi1kZWYgbnRvaGwoWCk6IHJldHVybiBfc3dhcGwoWCkKLQotZGVmIGh0b25zKFgpOiByZXR1cm4gX3N3YXBzKFgpCi0KLWRlZiBudG9ocyhYKTogcmV0dXJuIF9zd2FwcyhYKQotCi1JUFBST1RPX0lQID0gMAotSVBQUk9UT19JQ01QID0gMQotSVBQUk9UT19JR01QID0gMgotSVBQUk9UT19HR1AgPSAzCi1JUFBST1RPX1RDUCA9IDYKLUlQUFJPVE9fRUdQID0gOAotSVBQUk9UT19QVVAgPSAxMgotSVBQUk9UT19VRFAgPSAxNwotSVBQUk9UT19JRFAgPSAyMgotSVBQUk9UT19UUCA9IDI5Ci1JUFBST1RPX0VPTiA9IDgwCi1JUFBST1RPX1JBVyA9IDI1NQotSVBQUk9UT19NQVggPSAyNTYKLUlQUE9SVF9SRVNFUlZFRCA9IDEwMjQKLUlQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCi1kZWYgSU5fQ0xBU1NBKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ODAwMDAwMDApID09IDApCi0KLUlOX0NMQVNTQV9ORVQgPSAweGZmMDAwMDAwCi1JTl9DTEFTU0FfTlNISUZUID0gMjQKLUlOX0NMQVNTQV9IT1NUID0gMHgwMGZmZmZmZgotSU5fQ0xBU1NBX01BWCA9IDEyOAotZGVmIElOX0NMQVNTQihpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQotCi1JTl9DTEFTU0JfTkVUID0gMHhmZmZmMDAwMAotSU5fQ0xBU1NCX05TSElGVCA9IDE2Ci1JTl9DTEFTU0JfSE9TVCA9IDB4MDAwMGZmZmYKLUlOX0NMQVNTQl9NQVggPSA2NTUzNgotZGVmIElOX0NMQVNTQyhpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGMwMDAwMDAwKQotCi1JTl9DTEFTU0NfTkVUID0gMHhmZmZmZmYwMAotSU5fQ0xBU1NDX05TSElGVCA9IDgKLUlOX0NMQVNTQ19IT1NUID0gMHgwMDAwMDBmZgotZGVmIElOX0NMQVNTRChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGYwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1JTl9DTEFTU0RfTkVUID0gMHhmMDAwMDAwMAotSU5fQ0xBU1NEX05TSElGVCA9IDI4Ci1JTl9DTEFTU0RfSE9TVCA9IDB4MGZmZmZmZmYKLWRlZiBJTl9NVUxUSUNBU1QoaSk6IHJldHVybiBJTl9DTEFTU0QoaSkKLQotZGVmIElOX0VYUEVSSU1FTlRBTChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1kZWYgSU5fQkFEQ0xBU1MoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKLQotSU5BRERSX0FOWSA9IDB4MDAwMDAwMDAKLUlOQUREUl9MT09QQkFDSyA9IDB4N2YwMDAwMDEKLUlOQUREUl9CUk9BRENBU1QgPSAweGZmZmZmZmZmCi1JTkFERFJfTk9ORSA9IDB4ZmZmZmZmZmYKLUlOQUREUl9VTlNQRUNfR1JPVVAgPSAweGUwMDAwMDAwCi1JTkFERFJfQUxMSE9TVFNfR1JPVVAgPSAweGUwMDAwMDAxCi1JTkFERFJfTUFYX0xPQ0FMX0dST1VQID0gMHhlMDAwMDBmZgotSU5fTE9PUEJBQ0tORVQgPSAxMjcKLUlQX09QVElPTlMgPSAxCi1JUF9NVUxUSUNBU1RfSUYgPSAyCi1JUF9NVUxUSUNBU1RfVFRMID0gMwotSVBfTVVMVElDQVNUX0xPT1AgPSA0Ci1JUF9BRERfTUVNQkVSU0hJUCA9IDUKLUlQX0RST1BfTUVNQkVSU0hJUCA9IDYKLUlQX0hEUklOQ0wgPSAyCi1JUF9UT1MgPSAzCi1JUF9UVEwgPSA0Ci1JUF9SRUNWT1BUUyA9IDUKLUlQX1JFQ1ZSRVRPUFRTID0gNgotSVBfUkVDVkRTVEFERFIgPSA3Ci1JUF9SRVRPUFRTID0gOAotSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMID0gMQotSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCA9IDEKLUlQX01BWF9NRU1CRVJTSElQUyA9IDIwCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5IGIvTGliL3BsYXQtb3MyZW14L1NPQ0tFVC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNTk0YS4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9zeXMvc29ja2V0LmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy90eXBlcy5oCi1GRF9TRVRTSVpFID0gMjU2Ci0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvdWlvLmgKLUZSRUFEID0gMQotRldSSVRFID0gMgotU09DS19TVFJFQU0gPSAxCi1TT0NLX0RHUkFNID0gMgotU09DS19SQVcgPSAzCi1TT0NLX1JETSA9IDQKLVNPQ0tfU0VRUEFDS0VUID0gNQotU09fREVCVUcgPSAweDAwMDEKLVNPX0FDQ0VQVENPTk4gPSAweDAwMDIKLVNPX1JFVVNFQUREUiA9IDB4MDAwNAotU09fS0VFUEFMSVZFID0gMHgwMDA4Ci1TT19ET05UUk9VVEUgPSAweDAwMTAKLVNPX0JST0FEQ0FTVCA9IDB4MDAyMAotU09fVVNFTE9PUEJBQ0sgPSAweDAwNDAKLVNPX0xJTkdFUiA9IDB4MDA4MAotU09fT09CSU5MSU5FID0gMHgwMTAwCi1TT19MX0JST0FEQ0FTVCA9IDB4MDIwMAotU09fUkNWX1NIVVRET1dOID0gMHgwNDAwCi1TT19TTkRfU0hVVERPV04gPSAweDA4MDAKLVNPX1NOREJVRiA9IDB4MTAwMQotU09fUkNWQlVGID0gMHgxMDAyCi1TT19TTkRMT1dBVCA9IDB4MTAwMwotU09fUkNWTE9XQVQgPSAweDEwMDQKLVNPX1NORFRJTUVPID0gMHgxMDA1Ci1TT19SQ1ZUSU1FTyA9IDB4MTAwNgotU09fRVJST1IgPSAweDEwMDcKLVNPX1RZUEUgPSAweDEwMDgKLVNPX09QVElPTlMgPSAweDEwMTAKLVNPTF9TT0NLRVQgPSAweGZmZmYKLUFGX1VOU1BFQyA9IDAKLUFGX1VOSVggPSAxCi1BRl9JTkVUID0gMgotQUZfSU1QTElOSyA9IDMKLUFGX1BVUCA9IDQKLUFGX0NIQU9TID0gNQotQUZfTlMgPSA2Ci1BRl9OQlMgPSA3Ci1BRl9JU08gPSA3Ci1BRl9PU0kgPSBBRl9JU08KLUFGX0VDTUEgPSA4Ci1BRl9EQVRBS0lUID0gOQotQUZfQ0NJVFQgPSAxMAotQUZfU05BID0gMTEKLUFGX0RFQ25ldCA9IDEyCi1BRl9ETEkgPSAxMwotQUZfTEFUID0gMTQKLUFGX0hZTElOSyA9IDE1Ci1BRl9BUFBMRVRBTEsgPSAxNgotQUZfTkIgPSAxNwotQUZfTkVUQklPUyA9IEFGX05CCi1BRl9PUzIgPSBBRl9VTklYCi1BRl9NQVggPSAxOAotUEZfVU5TUEVDID0gQUZfVU5TUEVDCi1QRl9VTklYID0gQUZfVU5JWAotUEZfSU5FVCA9IEFGX0lORVQKLVBGX0lNUExJTksgPSBBRl9JTVBMSU5LCi1QRl9QVVAgPSBBRl9QVVAKLVBGX0NIQU9TID0gQUZfQ0hBT1MKLVBGX05TID0gQUZfTlMKLVBGX05CUyA9IEFGX05CUwotUEZfSVNPID0gQUZfSVNPCi1QRl9PU0kgPSBBRl9JU08KLVBGX0VDTUEgPSBBRl9FQ01BCi1QRl9EQVRBS0lUID0gQUZfREFUQUtJVAotUEZfQ0NJVFQgPSBBRl9DQ0lUVAotUEZfU05BID0gQUZfU05BCi1QRl9ERUNuZXQgPSBBRl9ERUNuZXQKLVBGX0RMSSA9IEFGX0RMSQotUEZfTEFUID0gQUZfTEFUCi1QRl9IWUxJTksgPSBBRl9IWUxJTksKLVBGX0FQUExFVEFMSyA9IEFGX0FQUExFVEFMSwotUEZfTkIgPSBBRl9OQgotUEZfTkVUQklPUyA9IEFGX05CCi1QRl9PUzIgPSBBRl9VTklYCi1QRl9NQVggPSBBRl9NQVgKLVNPTUFYQ09OTiA9IDUKLU1TR19PT0IgPSAweDEKLU1TR19QRUVLID0gMHgyCi1NU0dfRE9OVFJPVVRFID0gMHg0Ci1NU0dfRU9SID0gMHg4Ci1NU0dfVFJVTkMgPSAweDEwCi1NU0dfQ1RSVU5DID0gMHgyMAotTVNHX1dBSVRBTEwgPSAweDQwCi1NU0dfTUFYSU9WTEVOID0gMTYKLVNDTV9SSUdIVFMgPSAweDAxCi1NVF9GUkVFID0gMAotTVRfREFUQSA9IDEKLU1UX0hFQURFUiA9IDIKLU1UX1NPQ0tFVCA9IDMKLU1UX1BDQiA9IDQKLU1UX1JUQUJMRSA9IDUKLU1UX0hUQUJMRSA9IDYKLU1UX0FUQUJMRSA9IDcKLU1UX1NPTkFNRSA9IDgKLU1UX1pPTUJJRSA9IDkKLU1UX1NPT1BUUyA9IDEwCi1NVF9GVEFCTEUgPSAxMQotTVRfUklHSFRTID0gMTIKLU1UX0lGQUREUiA9IDEzCi1NQVhTT0NLRVRTID0gMjA0OApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weSBiL0xpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTZiNTQuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSMgX2VteF9saW5rLnB5Ci0KLSMgV3JpdHRlbiBieSBBbmRyZXcgSSBNYWNJbnR5cmUsIERlY2VtYmVyIDIwMDIuCi0KLSIiIl9lbXhfbGluay5weSBpcyBhIHNpbXBsaXN0aWMgZW11bGF0aW9uIG9mIHRoZSBVbml4IGxpbmsoMikgbGlicmFyeSByb3V0aW5lCi1mb3IgY3JlYXRpbmcgc28tY2FsbGVkIGhhcmQgbGlua3MuICBJdCBpcyBpbnRlbmRlZCB0byBiZSBpbXBvcnRlZCBpbnRvCi10aGUgb3MgbW9kdWxlIGluIHBsYWNlIG9mIHRoZSB1bmltcGxlbWVudGVkIChvbiBPUy8yKSBQb3NpeCBsaW5rKCkKLWZ1bmN0aW9uIChvcy5saW5rKCkpLgotCi1XZSBkbyB0aGlzIG9uIE9TLzIgYnkgaW1wbGVtZW50aW5nIGEgZmlsZSBjb3B5LCB3aXRoIGxpbmsoMikgc2VtYW50aWNzOi0KLSAgLSB0aGUgdGFyZ2V0IGNhbm5vdCBhbHJlYWR5IGV4aXN0OwotICAtIHdlIGhvcGUgdGhhdCB0aGUgYWN0dWFsIGZpbGUgb3BlbiAoaWYgc3VjY2Vzc2Z1bCkgaXMgYWN0dWFsbHkKLSAgICBhdG9taWMuLi4KLQotTGltaXRhdGlvbnMgb2YgdGhpcyBhcHByb2FjaC9pbXBsZW1lbnRhdGlvbiBpbmNsdWRlOi0KLSAgLSBubyBzdXBwb3J0IGZvciBjb3JyZWN0IGxpbmsgY291bnRzIChFTVggc3RhdCh0YXJnZXQpLnN0X25saW5rCi0gICAgaXMgYWx3YXlzIDEpOwotICAtIHRocmVhZCBzYWZldHkgdW5kZWZpbmVkOwotICAtIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9ucyAocit3KSB1c2VkLCBjYW4ndCBiZSBvdmVyLXJpZGRlbjsKLSAgLSBpbXBsZW1lbnRlZCBpbiBQeXRob24gc28gY29tcGFyYXRpdmVseSBzbG93LCBlc3BlY2lhbGx5IGZvciBsYXJnZQotICAgIHNvdXJjZSBmaWxlczsKLSAgLSBuZWVkIHN1ZmZpY2llbnQgZnJlZSBkaXNrIHNwYWNlIHRvIHN0b3JlIHRoZSBjb3B5LgotCi1CZWhhdmlvdXI6LQotICAtIGFueSBleGNlcHRpb24gc2hvdWxkIHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyOwotICAtIHdhbnQgdGFyZ2V0IHRvIGJlIGFuIGV4YWN0IGNvcHkgb2YgdGhlIHNvdXJjZSwgc28gdXNlIGJpbmFyeSBtb2RlOwotICAtIHJldHVybnMgTm9uZSwgc2FtZSBhcyBvcy5saW5rKCkgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gcG9zaXhtb2R1bGUuYzsKLSAgLSB0YXJnZXQgcmVtb3ZlZCBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlIHdoZXJlIHBvc3NpYmxlOwotICAtIGdpdmVuIHRoZSBtb3RpdmF0aW9uIHRvIHdyaXRlIHRoaXMgZW11bGF0aW9uIGNhbWUgZnJvbSB0cnlpbmcgdG8KLSAgICBzdXBwb3J0IGEgVW5peCByZXNvdXJjZSBsb2NrIGltcGxlbWVudGF0aW9uLCB3aGVyZSBtaW5pbWFsIG92ZXJoZWFkCi0gICAgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSB0YXJnZXQgaXMgZGVzaXJhYmxlIGFuZCB0aGUgZmlsZXMgYXJlIHNtYWxsLAotICAgIHdlIHJlYWQgYSBzb3VyY2UgYmxvY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSB0YXJnZXQgc28gdGhhdAotICAgIHdlJ3JlIHJlYWR5IHRvIGltbWVkaWF0ZWx5IHdyaXRlIHNvbWUgZGF0YSBpbnRvIGl0LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi0KLV9fYWxsX18gPSBbJ2xpbmsnXQotCi1kZWYgbGluayhzb3VyY2UsIHRhcmdldCk6Ci0gICAgIiIibGluayhzb3VyY2UsIHRhcmdldCkgLT4gTm9uZQotCi0gICAgQXR0ZW1wdCB0byBoYXJkIGxpbmsgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSB0YXJnZXQgZmlsZSBuYW1lLgotICAgIE9uIE9TLzIsIHRoaXMgY3JlYXRlcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBmaWxlLgotICAgICIiIgotCi0gICAgcyA9IG9zLm9wZW4oc291cmNlLCBvcy5PX1JET05MWSB8IG9zLk9fQklOQVJZKQotICAgIGlmIG9zLmlzYXR0eShzKToKLSAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FWERFViwgJ0Nyb3NzLWRldmljZSBsaW5rJykKLSAgICBkYXRhID0gb3MucmVhZChzLCAxMDI0KQotCi0gICAgdHJ5OgotICAgICAgICB0ID0gb3Mub3Blbih0YXJnZXQsIG9zLk9fV1JPTkxZIHwgb3MuT19CSU5BUlkgfCBvcy5PX0NSRUFUIHwgb3MuT19FWENMKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBvcy5jbG9zZShzKQotICAgICAgICByYWlzZQotCi0gICAgdHJ5OgotICAgICAgICB3aGlsZSBkYXRhOgotICAgICAgICAgICAgb3Mud3JpdGUodCwgZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHMsIDEwMjQpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIG9zLmNsb3NlKHMpCi0gICAgICAgIG9zLmNsb3NlKHQpCi0gICAgICAgIG9zLnVubGluayh0YXJnZXQpCi0gICAgICAgIHJhaXNlCi0KLSAgICBvcy5jbG9zZShzKQotICAgIG9zLmNsb3NlKHQpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRyeToKLSAgICAgICAgbGluayhzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHByaW50KCdVc2FnZTogZW14X2xpbmsgPHNvdXJjZT4gPHRhcmdldD4nKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBwcmludCgnZW14X2xpbms6ICVzJyAlIHN0cihzeXMuZXhjX2luZm8oKVsxXSkpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5IGIvTGliL3BsYXQtb3MyZW14L2dycC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2M2VmOC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGdycCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCi0iIiJSZXBsYWNlbWVudCBmb3IgZ3JwIHN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUsIGludGVuZGVkIGZvciB1c2Ugb24KLU9TLzIgYW5kIHNpbWlsYXIgc3lzdGVtcyB3aGljaCBkb24ndCBub3JtYWxseSBoYXZlIGFuIC9ldGMvZ3JvdXAgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggZ3JvdXAgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNCBmaWVsZHMgcGVyCi1yZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSBncm91cCBuYW1lIChzdHJpbmcpCi0gIC0gZ3JvdXAgcGFzc3dvcmQgKG9wdGlvbmFsIGVuY3J5cHRlZCBzdHJpbmcpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgbWVtYmVycyAoY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgdXNlcmlkcywgd2l0aCBubyBzcGFjZXMpCi0KLU5vdGUgdGhhdCBtZW1iZXJzIGFyZSBvbmx5IGluY2x1ZGVkIGluIHRoZSBncm91cCBmaWxlIGZvciBncm91cHMgdGhhdAotYXJlbid0IHRoZWlyIHByaW1hcnkgZ3JvdXBzLgotKHNlZSB0aGUgc2VjdGlvbiA4LjIgb2YgdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSkKLQotVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIFVuaXggaW1wbGVtZW50YXRpb24gYnkKLWFsbG93aW5nIHVzZSBvZiB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyIC0gJzsnIG9uIE9TLzIsCi1ET1MgYW5kIE1TLVdpbmRvd3MgLSBhcyB0aGUgZmllbGQgc2VwYXJhdG9yIGluIGFkZGl0aW9uIHRvIHRoZSBVbml4Ci1zdGFuZGFyZCAiOiIuCi0KLVRoZSBtb2R1bGUgbG9va3MgZm9yIHRoZSBncm91cCBkYXRhYmFzZSBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9ucwotKGluIG9yZGVyIGZpcnN0IHRvIGxhc3QpOgotICAtICR7RVRDX0dST1VQfSAgICAgICAgICAgICAgKG9yICVFVENfR1JPVVAlKQotICAtICR7RVRDfS9ncm91cCAgICAgICAgICAgICAgKG9yICVFVEMlL2dyb3VwKQotICAtICR7UFlUSE9OSE9NRX0vRXRjL2dyb3VwICAgKG9yICVQWVRIT05IT01FJS9FdGMvZ3JvdXApCi0KLUNsYXNzZXMKLS0tLS0tLS0KLQotTm9uZQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1nZXRncmdpZChnaWQpIC0gIHJldHVybiB0aGUgcmVjb3JkIGZvciBncm91cC1pZCBnaWQgYXMgYSA0LXR1cGxlCi0KLWdldGdybmFtKG5hbWUpIC0gcmV0dXJuIHRoZSByZWNvcmQgZm9yIGdyb3VwICduYW1lJyBhcyBhIDQtdHVwbGUKLQotZ2V0Z3JhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDQtdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotZ3JvdXBfZmlsZSAtICAgICB0aGUgcGF0aCBvZiB0aGUgZ3JvdXAgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBncm91cCBmaWxlCi1fX2dyb3VwX3BhdGggPSBbXQotaWYgJ0VUQ19HUk9VUCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKG9zLmVudmlyb25bJ0VUQ19HUk9VUCddKQotaWYgJ0VUQycgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKCclcy9ncm91cCcgJSBvcy5lbnZpcm9uWydFVEMnXSkKLWlmICdQWVRIT05IT01FJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fZ3JvdXBfcGF0aC5hcHBlbmQoJyVzL0V0Yy9ncm91cCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLWdyb3VwX2ZpbGUgPSBOb25lCi1mb3IgX19pIGluIF9fZ3JvdXBfcGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIF9fZiA9IG9wZW4oX19pLCAncicpCi0gICAgICAgIF9fZi5jbG9zZSgpCi0gICAgICAgIGdyb3VwX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBkZWNpZGUgd2hhdCBmaWVsZCBzZXBhcmF0b3Igd2UgY2FuIHRyeSB0byB1c2UgLSBVbml4IHN0YW5kYXJkLCB3aXRoCi0jIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGFuIG9wdGlvbi4gIE5vIHNwZWNpYWwgZmllbGQgY29udmVyc2lvbgotIyBoYW5kbGVycyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBncm91cCBmaWxlLgotX19maWVsZF9zZXAgPSBbJzonXQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXAuYXBwZW5kKG9zLnBhdGhzZXApCi0KLSMgaGVscGVyIHJvdXRpbmUgdG8gaWRlbnRpZnkgd2hpY2ggc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBpbiB1c2UKLWRlZiBfX2dldF9maWVsZF9zZXAocmVjb3JkKToKLSAgICBmcyA9IE5vbmUKLSAgICBmb3IgYyBpbiBfX2ZpZWxkX3NlcDoKLSAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgMyBkZWxpbWl0ZXIgY2hhcmFjdGVycyAoZm9yIDQgZmllbGRzKQotICAgICAgICBpZiByZWNvcmQuY291bnQoYykgPT0gMzoKLSAgICAgICAgICAgIGZzID0gYwotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBmczoKLSAgICAgICAgcmV0dXJuIGZzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IGdyb3VwIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIEdyb3VwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXNzd2QsIGdpZCwgbWVtKToKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfbmFtZSddID0gbmFtZQotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9wYXNzd2QnXSA9IHBhc3N3ZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9naWQnXSA9IGdpZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9tZW0nXSA9IG1lbQotICAgICAgICBzZWxmLl9fZGljdF9fWydfcmVjb3JkJ10gPSAoc2VsZi5ncl9uYW1lLCBzZWxmLmdyX3Bhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JfZ2lkLCBzZWxmLmdyX21lbSkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gNAotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWNvcmRba2V5XQotCi0gICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2F0dHJpYnV0ZSByZWFkLW9ubHk6ICVzJyAlIG5hbWUpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZi5fcmVjb3JkKQotCi0gICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICB0aGlzID0gc3RyKHNlbGYuX3JlY29yZCkKLSAgICAgICAgaWYgdGhpcyA9PSBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGVsaWYgdGhpcyA8IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0KLSMgcmVhZCB0aGUgd2hvbGUgZmlsZSwgcGFyc2luZyBlYWNoIGVudHJ5IGludG8gdHVwbGUgZm9ybQotIyB3aXRoIGRpY3Rpb25hcmllcyB0byBzcGVlZCByZWNhbGwgYnkgR0lEIG9yIGdyb3VwIG5hbWUKLWRlZiBfX3JlYWRfZ3JvdXBfZmlsZSgpOgotICAgIGlmIGdyb3VwX2ZpbGU6Ci0gICAgICAgIGdyb3VwID0gb3Blbihncm91cF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIGdyb3VwIGRhdGFiYXNlIDw8JykKLSAgICBnaWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgMToKLSAgICAgICAgZW50cnkgPSBncm91cC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgbGVuKGVudHJ5KSA+IDM6Ci0gICAgICAgICAgICBpZiBzZXAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZXAgPSBfX2dldF9maWVsZF9zZXAoZW50cnkpCi0gICAgICAgICAgICBmaWVsZHMgPSBlbnRyeS5zcGxpdChzZXApCi0gICAgICAgICAgICBmaWVsZHNbMl0gPSBpbnQoZmllbGRzWzJdKQotICAgICAgICAgICAgZmllbGRzWzNdID0gW2Yuc3RyaXAoKSBmb3IgZiBpbiBmaWVsZHNbM10uc3BsaXQoJywnKV0KLSAgICAgICAgICAgIHJlY29yZCA9IEdyb3VwKCpmaWVsZHMpCi0gICAgICAgICAgICBpZiBmaWVsZHNbMl0gbm90IGluIGdpZHg6Ci0gICAgICAgICAgICAgICAgZ2lkeFtmaWVsZHNbMl1dID0gcmVjb3JkCi0gICAgICAgICAgICBpZiBmaWVsZHNbMF0gbm90IGluIG5hbXg6Ci0gICAgICAgICAgICAgICAgbmFteFtmaWVsZHNbMF1dID0gcmVjb3JkCi0gICAgICAgIGVsaWYgbGVuKGVudHJ5KSA+IDA6Ci0gICAgICAgICAgICBwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBlbXB0eSBvciBtYWxmb3JtZWQgcmVjb3JkcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBncm91cC5jbG9zZSgpCi0gICAgaWYgbGVuKGdpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuIChnaWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgYnkgR0lECi1kZWYgZ2V0Z3JnaWQoZ2lkKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBnW2dpZF0KLQotIyByZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGJ5IGdyb3VwIG5hbWUKLWRlZiBnZXRncm5hbShuYW1lKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBuW25hbWVdCi0KLSMgcmV0dXJuIGFsbCB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldGdyYWxsKCk6Ci0gICAgZywgbiA9IF9fcmVhZF9ncm91cF9maWxlKCkKLSAgICByZXR1cm4gZy52YWx1ZXMoKQotCi0jIHRlc3QgaGFybmVzcwotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBnZXRncmFsbCgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5IGIvTGliL3BsYXQtb3MyZW14L3B3ZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNiMDc3Zi4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIHB3ZCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgUGF0aCBjb252ZXJzaW9ucyBhcmUgYXJlIGFwcGxpZWQgd2hlbgotIyB0aGUgZGF0YWJhc2UgdXNlcyAiOiIgYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0KLSIiIlJlcGxhY2VtZW50IGZvciBwd2Qgc3RhbmRhcmQgZXh0ZW5zaW9uIG1vZHVsZSwgaW50ZW5kZWQgZm9yIHVzZSBvbgotT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zIHdoaWNoIGRvbid0IG5vcm1hbGx5IGhhdmUgYW4gL2V0Yy9wYXNzd2QgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggcGFzc3dvcmQgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNyBmaWVsZHMKLXBlciByZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSB1c2VyIG5hbWUgKHN0cmluZykKLSAgLSBwYXNzd29yZCAoZW5jcnlwdGVkIHN0cmluZywgb3IgIioiIG9yICIiKQotICAtIHVzZXIgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZGVzY3JpcHRpb24gKHVzdWFsbHkgdXNlcidzIG5hbWUpCi0gIC0gaG9tZSBkaXJlY3RvcnkgKHBhdGggdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5KQotICAtIHNoZWxsIChwYXRoIHRvIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwpCi0KLShzZWUgdGhlIHNlY3Rpb24gOC4xIG9mIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UpCi0KLVRoaXMgaW1wbGVtZW50YXRpb24gZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBVbml4IGltcGxlbWVudGF0aW9uIGJ5Ci1hbGxvd2luZyB1c2Ugb2YgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciAtICc7JyBvbiBPUy8yLAotRE9TIGFuZCBNUy1XaW5kb3dzIC0gYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBpbiBhZGRpdGlvbiB0byB0aGUgVW5peAotc3RhbmRhcmQgIjoiLiAgQWRkaXRpb25hbGx5LCB3aGVuICI6IiBpcyB0aGUgc2VwYXJhdG9yIHBhdGggY29udmVyc2lvbnMKLWFyZSBhcHBsaWVkIHRvIGRlYWwgd2l0aCBhbnkgbXVuZ2luZyBvZiB0aGUgZHJpdmUgbGV0dGVyIHJlZmVyZW5jZS4KLQotVGhlIG1vZHVsZSBsb29rcyBmb3IgdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zCi0oaW4gb3JkZXIgZmlyc3QgdG8gbGFzdCk6Ci0gIC0gJHtFVENfUEFTU1dEfSAgICAgICAgICAgICAob3IgJUVUQ19QQVNTV0QlKQotICAtICR7RVRDfS9wYXNzd2QgICAgICAgICAgICAgKG9yICVFVEMlL3Bhc3N3ZCkKLSAgLSAke1BZVEhPTkhPTUV9L0V0Yy9wYXNzd2QgIChvciAlUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLQotQ2xhc3NlcwotLS0tLS0tLQotCi1Ob25lCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWdldHB3dWlkKHVpZCkgLSAgcmV0dXJuIHRoZSByZWNvcmQgZm9yIHVzZXItaWQgdWlkIGFzIGEgNy10dXBsZQotCi1nZXRwd25hbShuYW1lKSAtIHJldHVybiB0aGUgcmVjb3JkIGZvciB1c2VyICduYW1lJyBhcyBhIDctdHVwbGUKLQotZ2V0cHdhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDctdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotcGFzc3dkX2ZpbGUgLSAgICB0aGUgcGF0aCBvZiB0aGUgcGFzc3dvcmQgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBwYXNzd2QgZmlsZQotX19wYXNzd2RfcGF0aCA9IFtdCi1pZiAnRVRDX1BBU1NXRCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydFVENfUEFTU1dEJ10pCi1pZiAnRVRDJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fcGFzc3dkX3BhdGguYXBwZW5kKCclcy9wYXNzd2QnICUgb3MuZW52aXJvblsnRVRDJ10pCi1pZiAnUFlUSE9OSE9NRScgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZCgnJXMvRXRjL3Bhc3N3ZCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLXBhc3N3ZF9maWxlID0gTm9uZQotZm9yIF9faSBpbiBfX3Bhc3N3ZF9wYXRoOgotICAgIHRyeToKLSAgICAgICAgX19mID0gb3BlbihfX2ksICdyJykKLSAgICAgICAgX19mLmNsb3NlKCkKLSAgICAgICAgcGFzc3dkX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBwYXRoIGNvbnZlcnNpb24gaGFuZGxlcnMKLWRlZiBfX251bGxwYXRoY29udihwYXRoKToKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQotCi1kZWYgX191bml4cGF0aGNvbnYocGF0aCk6Ci0gICAgIyB0d28ga25vd24gZHJpdmUgbGV0dGVyIHZhcmlhdGlvbnM6ICJ4OyIgYW5kICIkeCIKLSAgICBpZiBwYXRoWzBdID09ICckJzoKLSAgICAgICAgY29udiA9IHBhdGhbMV0gKyAnOicgKyBwYXRoWzI6XQotICAgIGVsaWYgcGF0aFsxXSA9PSAnOyc6Ci0gICAgICAgIGNvbnYgPSBwYXRoWzBdICsgJzonICsgcGF0aFsyOl0KLSAgICBlbHNlOgotICAgICAgICBjb252ID0gcGF0aAotICAgIHJldHVybiBjb252LnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCi0KLSMgZGVjaWRlIHdoYXQgZmllbGQgc2VwYXJhdG9yIHdlIGNhbiB0cnkgdG8gdXNlIC0gVW5peCBzdGFuZGFyZCwgd2l0aAotIyB0aGUgcGxhdGZvcm0ncyBwYXRoIHNlcGFyYXRvciBhcyBhbiBvcHRpb24uICBObyBzcGVjaWFsIGZpZWxkIGNvbnZlcnNpb24KLSMgaGFuZGxlciBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGZpZWxkCi0jIHNlcGFyYXRvciwgYnV0IGFyZSByZXF1aXJlZCBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IGFuZCBzaGVsbCBmaWVsZHMgd2hlbgotIyB1c2luZyB0aGUgc3RhbmRhcmQgVW5peCAoIjoiKSBmaWVsZCBzZXBhcmF0b3IuCi1fX2ZpZWxkX3NlcCA9IHsnOic6IF9fdW5peHBhdGhjb252fQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXBbb3MucGF0aHNlcF0gPSBfX251bGxwYXRoY29udgotCi0jIGhlbHBlciByb3V0aW5lIHRvIGlkZW50aWZ5IHdoaWNoIHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgaW4gdXNlCi1kZWYgX19nZXRfZmllbGRfc2VwKHJlY29yZCk6Ci0gICAgZnMgPSBOb25lCi0gICAgZm9yIGMgaW4gX19maWVsZF9zZXAua2V5cygpOgotICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSA2IGRlbGltaXRlciBjaGFyYWN0ZXJzIChmb3IgNyBmaWVsZHMpCi0gICAgICAgIGlmIHJlY29yZC5jb3VudChjKSA9PSA2OgotICAgICAgICAgICAgZnMgPSBjCi0gICAgICAgICAgICBicmVhawotICAgIGlmIGZzOgotICAgICAgICByZXR1cm4gZnMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gcGFzc3dkIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIFBhc3N3ZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFzc3dkLCB1aWQsIGdpZCwgZ2Vjb3MsIGRpciwgc2hlbGwpOgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19uYW1lJ10gPSBuYW1lCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3Bhc3N3ZCddID0gcGFzc3dkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3VpZCddID0gdWlkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dpZCddID0gZ2lkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dlY29zJ10gPSBnZWNvcwotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19kaXInXSA9IGRpcgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19zaGVsbCddID0gc2hlbGwKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snX3JlY29yZCddID0gKHNlbGYucHdfbmFtZSwgc2VsZi5wd19wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X3VpZCwgc2VsZi5wd19naWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X2dlY29zLCBzZWxmLnB3X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHdfc2hlbGwpCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDcKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVjb3JkW2tleV0KLQotICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdhdHRyaWJ1dGUgcmVhZC1vbmx5OiAlcycgJSBuYW1lKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYuX3JlY29yZCkKLQotICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgdGhpcyA9IHN0cihzZWxmLl9yZWNvcmQpCi0gICAgICAgIGlmIHRoaXMgPT0gb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbGlmIHRoaXMgPCBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi0jIHJlYWQgdGhlIHdob2xlIGZpbGUsIHBhcnNpbmcgZWFjaCBlbnRyeSBpbnRvIHR1cGxlIGZvcm0KLSMgd2l0aCBkaWN0aW9uYXJpZXMgdG8gc3BlZWQgcmVjYWxsIGJ5IFVJRCBvciBwYXNzd2QgbmFtZQotZGVmIF9fcmVhZF9wYXNzd2RfZmlsZSgpOgotICAgIGlmIHBhc3N3ZF9maWxlOgotICAgICAgICBwYXNzd2QgPSBvcGVuKHBhc3N3ZF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIHBhc3N3b3JkIGRhdGFiYXNlIDw8JykKLSAgICB1aWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgZW50cnkgPSBwYXNzd2QucmVhZGxpbmUoKS5zdHJpcCgpCi0gICAgICAgIGlmIGxlbihlbnRyeSkgPiA2OgotICAgICAgICAgICAgaWYgc2VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VwID0gX19nZXRfZmllbGRfc2VwKGVudHJ5KQotICAgICAgICAgICAgZmllbGRzID0gZW50cnkuc3BsaXQoc2VwKQotICAgICAgICAgICAgZm9yIGkgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgIGZpZWxkc1tpXSA9IGludChmaWVsZHNbaV0pCi0gICAgICAgICAgICBmb3IgaSBpbiAoNSwgNik6Ci0gICAgICAgICAgICAgICAgZmllbGRzW2ldID0gX19maWVsZF9zZXBbc2VwXShmaWVsZHNbaV0pCi0gICAgICAgICAgICByZWNvcmQgPSBQYXNzd2QoKmZpZWxkcykKLSAgICAgICAgICAgIGlmIGZpZWxkc1syXSBub3QgaW4gdWlkeDoKLSAgICAgICAgICAgICAgICB1aWR4W2ZpZWxkc1syXV0gPSByZWNvcmQKLSAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gbmFteDoKLSAgICAgICAgICAgICAgICBuYW14W2ZpZWxkc1swXV0gPSByZWNvcmQKLSAgICAgICAgZWxpZiBsZW4oZW50cnkpID4gMDoKLSAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGVtcHR5IG9yIG1hbGZvcm1lZCByZWNvcmRzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIHBhc3N3ZC5jbG9zZSgpCi0gICAgaWYgbGVuKHVpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuICh1aWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IFVJRAotZGVmIGdldHB3dWlkKHVpZCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIHVbdWlkXQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IHBhc3N3ZCBuYW1lCi1kZWYgZ2V0cHduYW0obmFtZSk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG5bbmFtZV0KLQotIyByZXR1cm4gYWxsIHRoZSBwYXNzd2QgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldHB3YWxsKCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG4udmFsdWVzKCkKLQotIyB0ZXN0IGhhcm5lc3MKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZ2V0cHdhbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L3JlZ2VuIGIvTGliL3BsYXQtb3MyZW14L3JlZ2VuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzZWNkMmE4Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyEgL2Jpbi9zaAotZXhwb3J0IElOQ0xVREU9JENfSU5DTFVERV9QQVRICi1zZXQgLXYKLXB5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5ICRDX0lOQ0xVREVfUEFUSC9mY250bC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvc3lzL3NvY2tldC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknICRDX0lOQ0xVREVfUEFUSC9uZXRpbmV0L2luLmgKLSNweXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvdGVybWlvcy5oCmRpZmYgLS1naXQgYS9MaWIvcGxhdGZvcm0ucHkgYi9MaWIvcGxhdGZvcm0ucHkKaW5kZXggMDMwZWYyYS4uYzRmZmU5NSAxMDA3NTUKLS0tIGEvTGliL3BsYXRmb3JtLnB5CisrKyBiL0xpYi9wbGF0Zm9ybS5weQpAQCAtMTIyLDcgKzEyMiw3IEBACiBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIyBvcy5kZXZudWxsIHdhcyBhZGRlZCBpbiBQeXRob24gMi40LCBzbyBlbXVsYXRlIGl0IGZvciBlYXJsaWVyCiAgICAgIyBQeXRob24gdmVyc2lvbnMKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywgJ3dpbjMyJywgJ3dpbjE2Jyk6CiAgICAgICAgICMgVXNlIHRoZSBvbGQgQ1AvTSBOVUwgYXMgZGV2aWNlIG5hbWUKICAgICAgICAgREVWX05VTEwgPSAnTlVMJwogICAgIGVsc2U6CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBicicobGliYyhfXHcrKT9cLnNvKD86XC4oXGRbMC05Ll0qKSk/KScsIHJlLkFTQ0lJKQogCi1kZWYgbGliY192ZXIoZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSxsaWI9JycsdmVyc2lvbj0nJywKK2RlZiBsaWJjX3ZlcihleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlLCBsaWI9JycsIHZlcnNpb249JycsCiAKICAgICAgICAgICAgICBjaHVua3NpemU9MTYzODQpOgogCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogICAgICAgICAjIGhlcmUgdG8gd29yayBhcm91bmQgcHJvYmxlbXMgd2l0aCBDeWd3aW4gbm90IGJlaW5nCiAgICAgICAgICMgYWJsZSB0byBvcGVuIHN5bWxpbmtzIGZvciByZWFkaW5nCiAgICAgICAgIGV4ZWN1dGFibGUgPSBvcy5wYXRoLnJlYWxwYXRoKGV4ZWN1dGFibGUpCi0gICAgZiA9IG9wZW4oZXhlY3V0YWJsZSwncmInKQorICAgIGYgPSBvcGVuKGV4ZWN1dGFibGUsICdyYicpCiAgICAgYmluYXJ5ID0gZi5yZWFkKGNodW5rc2l6ZSkKICAgICBwb3MgPSAwCiAgICAgd2hpbGUgMToKICAgICAgICAgaWYgYidsaWJjJyBpbiBiaW5hcnkgb3IgYidHTElCQycgaW4gYmluYXJ5OgotICAgICAgICAgICAgbSA9IF9saWJjX3NlYXJjaC5zZWFyY2goYmluYXJ5LHBvcykKKyAgICAgICAgICAgIG0gPSBfbGliY19zZWFyY2guc2VhcmNoKGJpbmFyeSwgcG9zKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbSA9IE5vbmUKICAgICAgICAgaWYgbm90IG06CkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgcG9zID0gMAogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbGliY2luaXQsZ2xpYmMsZ2xpYmN2ZXJzaW9uLHNvLHRocmVhZHMsc292ZXJzaW9uID0gWworICAgICAgICBsaWJjaW5pdCwgZ2xpYmMsIGdsaWJjdmVyc2lvbiwgc28sIHRocmVhZHMsIHNvdmVyc2lvbiA9IFsKICAgICAgICAgICAgIHMuZGVjb2RlKCdsYXRpbjEnKSBpZiBzIGlzIG5vdCBOb25lIGVsc2UgcwogICAgICAgICAgICAgZm9yIHMgaW4gbS5ncm91cHMoKV0KICAgICAgICAgaWYgbGliY2luaXQgYW5kIG5vdCBsaWI6CkBAIC0xOTcsOSArMTk3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24gKyB0aHJlYWRzCiAgICAgICAgIHBvcyA9IG0uZW5kKCkKICAgICBmLmNsb3NlKCkKLSAgICByZXR1cm4gbGliLHZlcnNpb24KKyAgICByZXR1cm4gbGliLCB2ZXJzaW9uCiAKLWRlZiBfZGlzdF90cnlfaGFyZGVyKGRpc3RuYW1lLHZlcnNpb24saWQpOgorZGVmIF9kaXN0X3RyeV9oYXJkZXIoZGlzdG5hbWUsIHZlcnNpb24sIGlkKToKIAogICAgICIiIiBUcmllcyBzb21lIHNwZWNpYWwgdHJpY2tzIHRvIGdldCB0aGUgZGlzdHJpYnV0aW9uCiAgICAgICAgIGluZm9ybWF0aW9uIGluIGNhc2UgdGhlIGRlZmF1bHQgbWV0aG9kIGZhaWxzLgpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgIGZvciBsaW5lIGluIG9wZW4oJy92YXIvYWRtL2luc3QtbG9nL2luZm8nKToKICAgICAgICAgICAgIHR2ID0gbGluZS5zcGxpdCgpCiAgICAgICAgICAgICBpZiBsZW4odHYpID09IDI6Ci0gICAgICAgICAgICAgICAgdGFnLHZhbHVlID0gdHYKKyAgICAgICAgICAgICAgICB0YWcsIHZhbHVlID0gdHYKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIHRhZyA9PSAnTUlOX0RJU1RfVkVSU0lPTic6CkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICAgICAgICAgIGVsaWYgdGFnID09ICdESVNUX0lERU5UJzoKICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZS5zcGxpdCgnLScpCiAgICAgICAgICAgICAgICAgaWQgPSB2YWx1ZXNbMl0KLSAgICAgICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKKyAgICAgICAgcmV0dXJuIGRpc3RuYW1lLCB2ZXJzaW9uLCBpZAogCiAgICAgaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvLmluc3RhbGxlZCcpOgogICAgICAgICAjIENhbGRlcmEgT3BlbkxpbnV4IGhhcyBzb21lIGluZm9zIGluIHRoYXQgZmlsZSAodGhhbmtzIHRvIENvbGluIEtvbmcpCkBAIC0yMzEsNyArMjMxLDcgQEAKICAgICAgICAgICAgIGlmIGxlbihwa2cpID49IDIgYW5kIHBrZ1swXSA9PSAnT3BlbkxpbnV4JzoKICAgICAgICAgICAgICAgICAjIFhYWCBkb2VzIENhbGRlcmEgc3VwcG9ydCBub24gSW50ZWwgcGxhdGZvcm1zID8gSWYgeWVzLAogICAgICAgICAgICAgICAgICMgICAgIHdoZXJlIGNhbiB3ZSBmaW5kIHRoZSBuZWVkZWQgaWQgPwotICAgICAgICAgICAgICAgIHJldHVybiAnT3BlbkxpbnV4Jyxwa2dbMV0saWQKKyAgICAgICAgICAgICAgICByZXR1cm4gJ09wZW5MaW51eCcsIHBrZ1sxXSwgaWQKIAogICAgIGlmIG9zLnBhdGguaXNkaXIoJy91c3IvbGliL3NldHVwJyk6CiAgICAgICAgICMgQ2hlY2sgZm9yIHNsYWNrd2FyZSB2ZXJzaW9uIHRhZyBmaWxlICh0aGFua3MgdG8gR3JlZyBBbmRydWspCkBAIC0yNDMsOSArMjQzLDkgQEAKICAgICAgICAgICAgIHZlcmZpbGVzLnNvcnQoKQogICAgICAgICAgICAgZGlzdG5hbWUgPSAnc2xhY2t3YXJlJwogICAgICAgICAgICAgdmVyc2lvbiA9IHZlcmZpbGVzWy0xXVsxNDpdCi0gICAgICAgICAgICByZXR1cm4gZGlzdG5hbWUsdmVyc2lvbixpZAorICAgICAgICAgICAgcmV0dXJuIGRpc3RuYW1lLCB2ZXJzaW9uLCBpZAogCi0gICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKKyAgICByZXR1cm4gZGlzdG5hbWUsIHZlcnNpb24sIGlkCiAKIF9yZWxlYXNlX2ZpbGVuYW1lID0gcmUuY29tcGlsZShyJyhcdyspWy1fXShyZWxlYXNlfHZlcnNpb24pJywgcmUuQVNDSUkpCiBfbHNiX3JlbGVhc2VfdmVyc2lvbiA9IHJlLmNvbXBpbGUocicoLispJwpAQCAtMzE0LDI1ICszMTQsMjUgQEAKICAgICAgICAgZGlzdHJpYnV0aW9uIHJlYWQgZnJvbSB0aGUgT1MgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgc2hvcnQKICAgICAgICAgbmFtZSB0YWtlbiBmcm9tIHN1cHBvcnRlZF9kaXN0cyBpcyB1c2VkLgogCi0gICAgICAgIFJldHVybnMgYSB0dXBsZSAoZGlzdG5hbWUsdmVyc2lvbixpZCkgd2hpY2ggZGVmYXVsdCB0byB0aGUKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIChkaXN0bmFtZSwgdmVyc2lvbiwgaWQpIHdoaWNoIGRlZmF1bHQgdG8gdGhlCiAgICAgICAgIGFyZ3MgZ2l2ZW4gYXMgcGFyYW1ldGVycy4KIAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgZXRjID0gb3MubGlzdGRpcihfVU5JWENPTkZESVIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIFByb2JhYmx5IG5vdCBhIFVuaXggc3lzdGVtCi0gICAgICAgIHJldHVybiBkaXN0bmFtZSx2ZXJzaW9uLGlkCisgICAgICAgIHJldHVybiBkaXN0bmFtZSwgdmVyc2lvbiwgaWQKICAgICBldGMuc29ydCgpCiAgICAgZm9yIGZpbGUgaW4gZXRjOgogICAgICAgICBtID0gX3JlbGVhc2VfZmlsZW5hbWUubWF0Y2goZmlsZSkKICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9kaXN0bmFtZSxkdW1teSA9IG0uZ3JvdXBzKCkKKyAgICAgICAgICAgIF9kaXN0bmFtZSwgZHVtbXkgPSBtLmdyb3VwcygpCiAgICAgICAgICAgICBpZiBfZGlzdG5hbWUgaW4gc3VwcG9ydGVkX2Rpc3RzOgogICAgICAgICAgICAgICAgIGRpc3RuYW1lID0gX2Rpc3RuYW1lCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gX2Rpc3RfdHJ5X2hhcmRlcihkaXN0bmFtZSx2ZXJzaW9uLGlkKQorICAgICAgICByZXR1cm4gX2Rpc3RfdHJ5X2hhcmRlcihkaXN0bmFtZSwgdmVyc2lvbiwgaWQpCiAKICAgICAjIFJlYWQgdGhlIGZpcnN0IGxpbmUKICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKF9VTklYQ09ORkRJUiwgZmlsZSksICdyJywKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAjIFRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgogCi1kZWYgZGlzdChkaXN0bmFtZT0nJyx2ZXJzaW9uPScnLGlkPScnLAorZGVmIGRpc3QoZGlzdG5hbWU9JycsIHZlcnNpb249JycsIGlkPScnLAogCiAgICAgICAgICBzdXBwb3J0ZWRfZGlzdHM9X3N1cHBvcnRlZF9kaXN0cyk6CiAKQEAgLTM2MCw3ICszNjAsNyBAQAogICAgICAgICAvZXRjIGFuZCB0aGVuIHJldmVydHMgdG8gX2Rpc3RfdHJ5X2hhcmRlcigpIGluIGNhc2Ugbm8KICAgICAgICAgc3VpdGFibGUgZmlsZXMgYXJlIGZvdW5kLgogCi0gICAgICAgIFJldHVybnMgYSB0dXBsZSAoZGlzdG5hbWUsdmVyc2lvbixpZCkgd2hpY2ggZGVmYXVsdCB0byB0aGUKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIChkaXN0bmFtZSwgdmVyc2lvbiwgaWQpIHdoaWNoIGRlZmF1bHQgdG8gdGhlCiAgICAgICAgIGFyZ3MgZ2l2ZW4gYXMgcGFyYW1ldGVycy4KIAogICAgICIiIgpAQCAtMzg1LDExICszODUsMTEgQEAKICAgICBpZiBidWlsZDoKICAgICAgICAgbC5hcHBlbmQoYnVpbGQpCiAgICAgdHJ5OgotICAgICAgICBpbnRzID0gbWFwKGludCxsKQorICAgICAgICBpbnRzID0gbWFwKGludCwgbCkKICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgc3RyaW5ncyA9IGwKICAgICBlbHNlOgotICAgICAgICBzdHJpbmdzID0gbGlzdChtYXAoc3RyLGludHMpKQorICAgICAgICBzdHJpbmdzID0gbGlzdChtYXAoc3RyLCBpbnRzKSkKICAgICB2ZXJzaW9uID0gJy4nLmpvaW4oc3RyaW5nc1s6M10pCiAgICAgcmV0dXJuIHZlcnNpb24KIApAQCAtNDA4LDQ2ICs0MDgsNDMgQEAKIAogZGVmIF9zeXNjbWRfdmVyKHN5c3RlbT0nJywgcmVsZWFzZT0nJywgdmVyc2lvbj0nJywKIAotICAgICAgICAgICAgICAgc3VwcG9ydGVkX3BsYXRmb3Jtcz0oJ3dpbjMyJywnd2luMTYnLCdkb3MnLCdvczInKSk6CisgICAgICAgICAgICAgICBzdXBwb3J0ZWRfcGxhdGZvcm1zPSgnd2luMzInLCAnd2luMTYnLCAnZG9zJykpOgogCiAgICAgIiIiIFRyaWVzIHRvIGZpZ3VyZSBvdXQgdGhlIE9TIHZlcnNpb24gdXNlZCBhbmQgcmV0dXJucwotICAgICAgICBhIHR1cGxlIChzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKS4KKyAgICAgICAgYSB0dXBsZSAoc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uKS4KIAogICAgICAgICBJdCB1c2VzIHRoZSAidmVyIiBzaGVsbCBjb21tYW5kIGZvciB0aGlzIHdoaWNoIGlzIGtub3duCi0gICAgICAgIHRvIGV4aXN0cyBvbiBXaW5kb3dzLCBET1MgYW5kIE9TLzIuIFhYWCBPdGhlcnMgdG9vID8KKyAgICAgICAgdG8gZXhpc3RzIG9uIFdpbmRvd3MsIERPUy4gWFhYIE90aGVycyB0b28gPwogCiAgICAgICAgIEluIGNhc2UgdGhpcyBmYWlscywgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYXJlIHVzZWQgYXMKICAgICAgICAgZGVmYXVsdHMuCiAKICAgICAiIiIKICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIHN1cHBvcnRlZF9wbGF0Zm9ybXM6Ci0gICAgICAgIHJldHVybiBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uCisgICAgICAgIHJldHVybiBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24KIAogICAgICMgVHJ5IHNvbWUgY29tbW9uIGNtZCBzdHJpbmdzCi0gICAgZm9yIGNtZCBpbiAoJ3ZlcicsJ2NvbW1hbmQgL2MgdmVyJywnY21kIC9jIHZlcicpOgorICAgIGZvciBjbWQgaW4gKCd2ZXInLCAnY29tbWFuZCAvYyB2ZXInLCAnY21kIC9jIHZlcicpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwaXBlID0gcG9wZW4oY21kKQogICAgICAgICAgICAgaW5mbyA9IHBpcGUucmVhZCgpCiAgICAgICAgICAgICBpZiBwaXBlLmNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgcmFpc2Ugb3MuZXJyb3IoJ2NvbW1hbmQgZmFpbGVkJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjb21tYW5kIGZhaWxlZCcpCiAgICAgICAgICAgICAjIFhYWCBIb3cgY2FuIEkgc3VwcHJlc3Mgc2hlbGwgZXJyb3JzIGZyb20gYmVpbmcgd3JpdHRlbgogICAgICAgICAgICAgIyAgICAgdG8gc3RkZXJyID8KLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIHdoeToKLSAgICAgICAgICAgICNwcmludCAnQ29tbWFuZCAlcyBmYWlsZWQ6ICVzJyAlIChjbWQsd2h5KQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgd2h5OgotICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCx3aHkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICNwcmludCAnQ29tbWFuZCAlcyBmYWlsZWQ6ICVzJyAlIChjbWQsIHdoeSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBicmVhawogICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uCisgICAgICAgIHJldHVybiBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24KIAogICAgICMgUGFyc2UgdGhlIG91dHB1dAogICAgIGluZm8gPSBpbmZvLnN0cmlwKCkKICAgICBtID0gX3Zlcl9vdXRwdXQubWF0Y2goaW5mbykKICAgICBpZiBtIGlzIG5vdCBOb25lOgotICAgICAgICBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uID0gbS5ncm91cHMoKQorICAgICAgICBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24gPSBtLmdyb3VwcygpCiAgICAgICAgICMgU3RyaXAgdHJhaWxpbmcgZG90cyBmcm9tIHZlcnNpb24gYW5kIHJlbGVhc2UKICAgICAgICAgaWYgcmVsZWFzZVstMV0gPT0gJy4nOgogICAgICAgICAgICAgcmVsZWFzZSA9IHJlbGVhc2VbOi0xXQpAQCAtNDU2LDkgKzQ1Myw5IEBACiAgICAgICAgICMgTm9ybWFsaXplIHRoZSB2ZXJzaW9uIGFuZCBidWlsZCBzdHJpbmdzIChlbGltaW5hdGluZyBhZGRpdGlvbmFsCiAgICAgICAgICMgemVyb3MpCiAgICAgICAgIHZlcnNpb24gPSBfbm9ybV92ZXJzaW9uKHZlcnNpb24pCi0gICAgcmV0dXJuIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24KKyAgICByZXR1cm4gc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uCiAKLWRlZiBfd2luMzJfZ2V0dmFsdWUoa2V5LG5hbWUsZGVmYXVsdD0nJyk6CitkZWYgX3dpbjMyX2dldHZhbHVlKGtleSwgbmFtZSwgZGVmYXVsdD0nJyk6CiAKICAgICAiIiIgUmVhZCBhIHZhbHVlIGZvciBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5IGtleS4KIApAQCAtNDczLDE0ICs0NzAsMTQgQEAKICAgICAgICAgaW1wb3J0IHdpbnJlZwogICAgICAgICBSZWdRdWVyeVZhbHVlRXggPSB3aW5yZWcuUXVlcnlWYWx1ZUV4CiAgICAgdHJ5OgotICAgICAgICByZXR1cm4gUmVnUXVlcnlWYWx1ZUV4KGtleSxuYW1lKQorICAgICAgICByZXR1cm4gUmVnUXVlcnlWYWx1ZUV4KGtleSwgbmFtZSkKICAgICBleGNlcHQ6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAKLWRlZiB3aW4zMl92ZXIocmVsZWFzZT0nJyx2ZXJzaW9uPScnLGNzZD0nJyxwdHlwZT0nJyk6CitkZWYgd2luMzJfdmVyKHJlbGVhc2U9JycsIHZlcnNpb249JycsIGNzZD0nJywgcHR5cGU9JycpOgogCiAgICAgIiIiIEdldCBhZGRpdGlvbmFsIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgV2luZG93cyBSZWdpc3RyeQotICAgICAgICBhbmQgcmV0dXJuIGEgdHVwbGUgKHZlcnNpb24sY3NkLHB0eXBlKSByZWZlcnJpbmcgdG8gdmVyc2lvbgorICAgICAgICBhbmQgcmV0dXJuIGEgdHVwbGUgKHZlcnNpb24sIGNzZCwgcHR5cGUpIHJlZmVycmluZyB0byB2ZXJzaW9uCiAgICAgICAgIG51bWJlciwgQ1NEIGxldmVsIChzZXJ2aWNlIHBhY2spLCBhbmQgT1MgdHlwZSAobXVsdGkvc2luZ2xlCiAgICAgICAgIHByb2Nlc3NvcikuCiAKQEAgLTUwNiw3ICs1MDMsNiBAQAogCiAgICAgIyBJbXBvcnQgdGhlIG5lZWRlZCBBUElzCiAgICAgdHJ5OgotICAgICAgICBpbXBvcnQgd2luMzJhcGkKICAgICAgICAgZnJvbSB3aW4zMmFwaSBpbXBvcnQgUmVnUXVlcnlWYWx1ZUV4LCBSZWdPcGVuS2V5RXgsIFwKICAgICAgICAgICAgICBSZWdDbG9zZUtleSwgR2V0VmVyc2lvbkV4CiAgICAgICAgIGZyb20gd2luMzJjb24gaW1wb3J0IEhLRVlfTE9DQUxfTUFDSElORSwgVkVSX1BMQVRGT1JNX1dJTjMyX05ULCBcCkBAIC01MTcsNyArNTEzLDcgQEAKICAgICAgICAgICAgIHN5cy5nZXR3aW5kb3dzdmVyc2lvbgogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICAjIE5vIGVtdWxhdGlvbiBwb3NzaWJsZSwgc28gcmV0dXJuIHRoZSBkZWZhdWx0cy4uLgotICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKKyAgICAgICAgICAgIHJldHVybiByZWxlYXNlLCB2ZXJzaW9uLCBjc2QsIHB0eXBlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIEVtdWxhdGlvbiB1c2luZyB3aW5yZWcgKGFkZGVkIGluIFB5dGhvbiAyLjApIGFuZAogICAgICAgICAgICAgIyBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKSAoYWRkZWQgaW4gUHl0aG9uIDIuMykKQEAgLTUzNSw4ICs1MzEsOCBAQAogCiAgICAgIyBGaW5kIG91dCB0aGUgcmVnaXN0cnkga2V5IGFuZCBzb21lIGdlbmVyYWwgdmVyc2lvbiBpbmZvcwogICAgIHdpbnZlciA9IEdldFZlcnNpb25FeCgpCi0gICAgbWFqLG1pbixidWlsZG5vLHBsYXQsY3NkID0gd2ludmVyCi0gICAgdmVyc2lvbiA9ICclaS4laS4laScgJSAobWFqLG1pbixidWlsZG5vICYgMHhGRkZGKQorICAgIG1haiwgbWluLCBidWlsZG5vLCBwbGF0LCBjc2QgPSB3aW52ZXIKKyAgICB2ZXJzaW9uID0gJyVpLiVpLiVpJyAlIChtYWosIG1pbiwgYnVpbGRubyAmIDB4RkZGRikKICAgICBpZiBoYXNhdHRyKHdpbnZlciwgInNlcnZpY2VfcGFjayIpOgogICAgICAgICBpZiB3aW52ZXIuc2VydmljZV9wYWNrICE9ICIiOgogICAgICAgICAgICAgY3NkID0gJ1NQJXMnICUgd2ludmVyLnNlcnZpY2VfcGFja19tYWpvcgpAQCAtNTg2LDcgKzU4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICMgRGlzY2FyZCBhbnkgdHlwZSB0aGF0IGlzbid0IFJFR19TWgogICAgICAgICAgICAgICAgICAgICBpZiB0eXBlID09IFJFR19TWiBhbmQgbmFtZS5maW5kKCJTZXJ2ZXIiKSAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfdHlwZSA9IFZFUl9OVF9TRVJWRVIKLSAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAjIFVzZSBkZWZhdWx0IG9mIFZFUl9OVF9XT1JLU1RBVElPTgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKQEAgLTYxMSw4ICs2MDcsOCBAQAogICAgIGVsc2U6CiAgICAgICAgIGlmIG5vdCByZWxlYXNlOgogICAgICAgICAgICAgIyBFLmcuIFdpbjMuMSB3aXRoIHdpbjMycwotICAgICAgICAgICAgcmVsZWFzZSA9ICclaS4laScgJSAobWFqLG1pbikKLSAgICAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKKyAgICAgICAgICAgIHJlbGVhc2UgPSAnJWkuJWknICUgKG1haiwgbWluKQorICAgICAgICByZXR1cm4gcmVsZWFzZSwgdmVyc2lvbiwgY3NkLCBwdHlwZQogCiAgICAgIyBPcGVuIHRoZSByZWdpc3RyeSBrZXkKICAgICB0cnk6CkBAIC02MjAsNyArNjE2LDcgQEAKICAgICAgICAgIyBHZXQgYSB2YWx1ZSB0byBtYWtlIHN1cmUgdGhlIGtleSBleGlzdHMuLi4KICAgICAgICAgUmVnUXVlcnlWYWx1ZUV4KGtleUN1clZlciwgJ1N5c3RlbVJvb3QnKQogICAgIGV4Y2VwdDoKLSAgICAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKKyAgICAgICAgcmV0dXJuIHJlbGVhc2UsIHZlcnNpb24sIGNzZCwgcHR5cGUKIAogICAgICMgUGFyc2UgdmFsdWVzCiAgICAgI3N1YnZlcnNpb24gPSBfd2luMzJfZ2V0dmFsdWUoa2V5Q3VyVmVyLApAQCAtNjMwLDczICs2MjYsMTcgQEAKICAgICAjICAgcmVsZWFzZSA9IHJlbGVhc2UgKyBzdWJ2ZXJzaW9uICMgOTVhLCA5NWIsIGV0Yy4KICAgICBidWlsZCA9IF93aW4zMl9nZXR2YWx1ZShrZXlDdXJWZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0N1cnJlbnRCdWlsZE51bWJlcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcnLDEpKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJywgMSkpWzBdCiAgICAgcHR5cGUgPSBfd2luMzJfZ2V0dmFsdWUoa2V5Q3VyVmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0N1cnJlbnRUeXBlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHlwZSwxKSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHlwZSwgMSkpWzBdCiAKICAgICAjIE5vcm1hbGl6ZSB2ZXJzaW9uCi0gICAgdmVyc2lvbiA9IF9ub3JtX3ZlcnNpb24odmVyc2lvbixidWlsZCkKKyAgICB2ZXJzaW9uID0gX25vcm1fdmVyc2lvbih2ZXJzaW9uLCBidWlsZCkKIAogICAgICMgQ2xvc2Uga2V5CiAgICAgUmVnQ2xvc2VLZXkoa2V5Q3VyVmVyKQotICAgIHJldHVybiByZWxlYXNlLHZlcnNpb24sY3NkLHB0eXBlCi0KLWRlZiBfbWFjX3Zlcl9sb29rdXAoc2VsZWN0b3JzLGRlZmF1bHQ9Tm9uZSk6Ci0KLSAgICBmcm9tIF9nZXN0YWx0IGltcG9ydCBnZXN0YWx0Ci0gICAgbCA9IFtdCi0gICAgYXBwZW5kID0gbC5hcHBlbmQKLSAgICBmb3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhcHBlbmQoZ2VzdGFsdChzZWxlY3RvcikpCi0gICAgICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBPU0Vycm9yKToKLSAgICAgICAgICAgIGFwcGVuZChkZWZhdWx0KQotICAgIHJldHVybiBsCi0KLWRlZiBfYmNkMnN0cihiY2QpOgotCi0gICAgcmV0dXJuIGhleChiY2QpWzI6XQotCi1kZWYgX21hY192ZXJfZ2VzdGFsdCgpOgotICAgICIiIgotICAgICAgICBUaGFua3MgdG8gTWFyayBSLiBMZXZpbnNvbiBmb3IgbWFpbGluZyBkb2N1bWVudGF0aW9uIGxpbmtzIGFuZAotICAgICAgICBjb2RlIGV4YW1wbGVzIGZvciB0aGlzIGZ1bmN0aW9uLiBEb2N1bWVudGF0aW9uIGZvciB0aGUKLSAgICAgICAgZ2VzdGFsdCgpIEFQSSBpcyBhdmFpbGFibGUgb25saW5lIGF0OgotCi0gICAgICAgICAgIGh0dHA6Ly93d3cucmdhcm9zLm5sL2dlc3RhbHQvCi0gICAgIiIiCi0gICAgIyBDaGVjayB3aGV0aGVyIHRoZSB2ZXJzaW9uIGluZm8gbW9kdWxlIGlzIGF2YWlsYWJsZQotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IF9nZXN0YWx0Ci0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICByZXR1cm4gTm9uZQotICAgICMgR2V0IHRoZSBpbmZvcwotICAgIHN5c3YsIHN5c2EgPSBfbWFjX3Zlcl9sb29rdXAoKCdzeXN2Jywnc3lzYScpKQotICAgICMgRGVjb2RlIHRoZSBpbmZvcwotICAgIGlmIHN5c3Y6Ci0gICAgICAgIG1ham9yID0gKHN5c3YgJiAweEZGMDApID4+IDgKLSAgICAgICAgbWlub3IgPSAoc3lzdiAmIDB4MDBGMCkgPj4gNAotICAgICAgICBwYXRjaCA9IChzeXN2ICYgMHgwMDBGKQotCi0gICAgICAgIGlmIChtYWpvciwgbWlub3IpID49ICgxMCwgNCk6Ci0gICAgICAgICAgICAjIHRoZSAnc3lzdicgZ2VzdGFsZCBjYW5ub3QgcmV0dXJuIHBhdGNobGV2ZWxzCi0gICAgICAgICAgICAjIGhpZ2hlciB0aGFuIDkuIEFwcGxlIGludHJvZHVjZWQgMyBuZXcKLSAgICAgICAgICAgICMgZ2VzdGFsdCBjb2RlcyBpbiAxMC40IHRvIGRlYWwgd2l0aCB0aGlzCi0gICAgICAgICAgICAjIGlzc3VlIChuZWVkZWQgYmVjYXVzZSBwYXRjaCBsZXZlbHMgY2FuCi0gICAgICAgICAgICAjIHJ1biBoaWdoZXIgdGhhbiA5LCBzdWNoIGFzIDEwLjQuMTEpCi0gICAgICAgICAgICBtYWpvcixtaW5vcixwYXRjaCA9IF9tYWNfdmVyX2xvb2t1cCgoJ3N5czEnLCdzeXMyJywnc3lzMycpKQotICAgICAgICAgICAgcmVsZWFzZSA9ICclaS4laS4laScgJShtYWpvciwgbWlub3IsIHBhdGNoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVsZWFzZSA9ICclcy4laS4laScgJSAoX2JjZDJzdHIobWFqb3IpLG1pbm9yLHBhdGNoKQotCi0gICAgaWYgc3lzYToKLSAgICAgICAgbWFjaGluZSA9IHsweDE6ICc2OGsnLAotICAgICAgICAgICAgICAgICAgIDB4MjogJ1Bvd2VyUEMnLAotICAgICAgICAgICAgICAgICAgIDB4YTogJ2kzODYnfS5nZXQoc3lzYSwnJykKLQotICAgIHZlcnNpb25pbmZvPSgnJywgJycsICcnKQotICAgIHJldHVybiByZWxlYXNlLHZlcnNpb25pbmZvLG1hY2hpbmUKKyAgICByZXR1cm4gcmVsZWFzZSwgdmVyc2lvbiwgY3NkLCBwdHlwZQogCiBkZWYgX21hY192ZXJfeG1sKCk6CiAgICAgZm4gPSAnL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JwpAQCAtNzA4LDE4ICs2NDgsMTkgQEAKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICBwbCA9IHBsaXN0bGliLnJlYWRQbGlzdChmbikKKyAgICB3aXRoIG9wZW4oZm4sICdyYicpIGFzIGY6CisgICAgICAgIHBsID0gcGxpc3RsaWIubG9hZChmKQogICAgIHJlbGVhc2UgPSBwbFsnUHJvZHVjdFZlcnNpb24nXQotICAgIHZlcnNpb25pbmZvPSgnJywgJycsICcnKQorICAgIHZlcnNpb25pbmZvID0gKCcnLCAnJywgJycpCiAgICAgbWFjaGluZSA9IG9zLnVuYW1lKCkubWFjaGluZQogICAgIGlmIG1hY2hpbmUgaW4gKCdwcGMnLCAnUG93ZXIgTWFjaW50b3NoJyk6Ci0gICAgICAgICMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZ2VzdGFsdCBiYXNlZCBjb2RlCisgICAgICAgICMgQ2Fub25pY2FsIG5hbWUKICAgICAgICAgbWFjaGluZSA9ICdQb3dlclBDJwogCi0gICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQorICAgIHJldHVybiByZWxlYXNlLCB2ZXJzaW9uaW5mbywgbWFjaGluZQogCiAKLWRlZiBtYWNfdmVyKHJlbGVhc2U9JycsdmVyc2lvbmluZm89KCcnLCcnLCcnKSxtYWNoaW5lPScnKToKK2RlZiBtYWNfdmVyKHJlbGVhc2U9JycsIHZlcnNpb25pbmZvPSgnJywgJycsICcnKSwgbWFjaGluZT0nJyk6CiAKICAgICAiIiIgR2V0IE1hY09TIHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIHJldHVybiBpdCBhcyB0dXBsZSAocmVsZWFzZSwKICAgICAgICAgdmVyc2lvbmluZm8sIG1hY2hpbmUpIHdpdGggdmVyc2lvbmluZm8gYmVpbmcgYSB0dXBsZSAodmVyc2lvbiwKQEAgLTczNSwxNiArNjc2LDEwIEBACiAgICAgaWYgaW5mbyBpcyBub3QgTm9uZToKICAgICAgICAgcmV0dXJuIGluZm8KIAotICAgICMgSWYgdGhhdCBkb2Vzbid0IHdvcmsgZm9yIHNvbWUgcmVhc29uIGZhbGwgYmFjayB0byByZWFkaW5nIHRoZQotICAgICMgaW5mb3JtYXRpb24gdXNpbmcgZ2VzdGFsdCBjYWxscy4KLSAgICBpbmZvID0gX21hY192ZXJfZ2VzdGFsdCgpCi0gICAgaWYgaW5mbyBpcyBub3QgTm9uZToKLSAgICAgICAgcmV0dXJuIGluZm8KLQogICAgICMgSWYgdGhhdCBhbHNvIGRvZXNuJ3Qgd29yayByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWVzCi0gICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQorICAgIHJldHVybiByZWxlYXNlLCB2ZXJzaW9uaW5mbywgbWFjaGluZQogCi1kZWYgX2phdmFfZ2V0cHJvcChuYW1lLGRlZmF1bHQpOgorZGVmIF9qYXZhX2dldHByb3AobmFtZSwgZGVmYXVsdCk6CiAKICAgICBmcm9tIGphdmEubGFuZyBpbXBvcnQgU3lzdGVtCiAgICAgdHJ5OgpAQCAtNzU1LDEzICs2OTAsMTMgQEAKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAKLWRlZiBqYXZhX3ZlcihyZWxlYXNlPScnLHZlbmRvcj0nJyx2bWluZm89KCcnLCcnLCcnKSxvc2luZm89KCcnLCcnLCcnKSk6CitkZWYgamF2YV92ZXIocmVsZWFzZT0nJywgdmVuZG9yPScnLCB2bWluZm89KCcnLCAnJywgJycpLCBvc2luZm89KCcnLCAnJywgJycpKToKIAogICAgICIiIiBWZXJzaW9uIGludGVyZmFjZSBmb3IgSnl0aG9uLgogCi0gICAgICAgIFJldHVybnMgYSB0dXBsZSAocmVsZWFzZSx2ZW5kb3Isdm1pbmZvLG9zaW5mbykgd2l0aCB2bWluZm8gYmVpbmcKLSAgICAgICAgYSB0dXBsZSAodm1fbmFtZSx2bV9yZWxlYXNlLHZtX3ZlbmRvcikgYW5kIG9zaW5mbyBiZWluZyBhCi0gICAgICAgIHR1cGxlIChvc19uYW1lLG9zX3ZlcnNpb24sb3NfYXJjaCkuCisgICAgICAgIFJldHVybnMgYSB0dXBsZSAocmVsZWFzZSwgdmVuZG9yLCB2bWluZm8sIG9zaW5mbykgd2l0aCB2bWluZm8gYmVpbmcKKyAgICAgICAgYSB0dXBsZSAodm1fbmFtZSwgdm1fcmVsZWFzZSwgdm1fdmVuZG9yKSBhbmQgb3NpbmZvIGJlaW5nIGEKKyAgICAgICAgdHVwbGUgKG9zX25hbWUsIG9zX3ZlcnNpb24sIG9zX2FyY2gpLgogCiAgICAgICAgIFZhbHVlcyB3aGljaCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhcmUgc2V0IHRvIHRoZSBkZWZhdWx0cwogICAgICAgICBnaXZlbiBhcyBwYXJhbWV0ZXJzICh3aGljaCBhbGwgZGVmYXVsdCB0byAnJykuCkBAIC03NzEsNyArNzA2LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGltcG9ydCBqYXZhLmxhbmcKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiByZWxlYXNlLHZlbmRvcix2bWluZm8sb3NpbmZvCisgICAgICAgIHJldHVybiByZWxlYXNlLCB2ZW5kb3IsIHZtaW5mbywgb3NpbmZvCiAKICAgICB2ZW5kb3IgPSBfamF2YV9nZXRwcm9wKCdqYXZhLnZlbmRvcicsIHZlbmRvcikKICAgICByZWxlYXNlID0gX2phdmFfZ2V0cHJvcCgnamF2YS52ZXJzaW9uJywgcmVsZWFzZSkKQEAgLTc5MCw5ICs3MjUsOSBAQAogCiAjIyMgU3lzdGVtIG5hbWUgYWxpYXNpbmcKIAotZGVmIHN5c3RlbV9hbGlhcyhzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKToKK2RlZiBzeXN0ZW1fYWxpYXMoc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uKToKIAotICAgICIiIiBSZXR1cm5zIChzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKSBhbGlhc2VkIHRvIGNvbW1vbgorICAgICIiIiBSZXR1cm5zIChzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24pIGFsaWFzZWQgdG8gY29tbW9uCiAgICAgICAgIG1hcmtldGluZyBuYW1lcyB1c2VkIGZvciBzb21lIHN5c3RlbXMuCiAKICAgICAgICAgSXQgYWxzbyBkb2VzIHNvbWUgcmVvcmRlcmluZyBvZiB0aGUgaW5mb3JtYXRpb24gaW4gc29tZSBjYXNlcwpAQCAtODAyLDEzICs3MzcsMTMgQEAKICAgICBpZiBzeXN0ZW0gPT0gJ1JoYXBzb2R5JzoKICAgICAgICAgIyBBcHBsZSdzIEJTRCBkZXJpdmF0aXZlCiAgICAgICAgICMgWFhYIEhvdyBjYW4gd2UgZGV0ZXJtaW5lIHRoZSBtYXJrZXRpbmcgcmVsZWFzZSBudW1iZXIgPwotICAgICAgICByZXR1cm4gJ01hY09TIFggU2VydmVyJyxzeXN0ZW0rcmVsZWFzZSx2ZXJzaW9uCisgICAgICAgIHJldHVybiAnTWFjT1MgWCBTZXJ2ZXInLCBzeXN0ZW0rcmVsZWFzZSwgdmVyc2lvbgogCiAgICAgZWxpZiBzeXN0ZW0gPT0gJ1N1bk9TJzoKICAgICAgICAgIyBTdW4ncyBPUwogICAgICAgICBpZiByZWxlYXNlIDwgJzUnOgogICAgICAgICAgICAgIyBUaGVzZSByZWxlYXNlcyB1c2UgdGhlIG9sZCBuYW1lIFN1bk9TCi0gICAgICAgICAgICByZXR1cm4gc3lzdGVtLHJlbGVhc2UsdmVyc2lvbgorICAgICAgICAgICAgcmV0dXJuIHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbgogICAgICAgICAjIE1vZGlmeSByZWxlYXNlIChtYXJrZXRpbmcgcmVsZWFzZSA9IFN1bk9TIHJlbGVhc2UgLSAzKQogICAgICAgICBsID0gcmVsZWFzZS5zcGxpdCgnLicpCiAgICAgICAgIGlmIGw6CkBAIC04MzYsMTEgKzc3MSwxMSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdmVyc2lvbiA9ICc2NGJpdCcKIAotICAgIGVsaWYgc3lzdGVtIGluICgnd2luMzInLCd3aW4xNicpOgorICAgIGVsaWYgc3lzdGVtIGluICgnd2luMzInLCAnd2luMTYnKToKICAgICAgICAgIyBJbiBjYXNlIG9uZSBvZiB0aGUgb3RoZXIgdHJpY2tzCiAgICAgICAgIHN5c3RlbSA9ICdXaW5kb3dzJwogCi0gICAgcmV0dXJuIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24KKyAgICByZXR1cm4gc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uCiAKICMjIyBWYXJpb3VzIGludGVybmFsIGhlbHBlcnMKIApAQCAtODUzLDIxICs3ODgsMjEgQEAKICAgICBwbGF0Zm9ybSA9ICctJy5qb2luKHguc3RyaXAoKSBmb3IgeCBpbiBmaWx0ZXIobGVuLCBhcmdzKSkKIAogICAgICMgQ2xlYW51cCBzb21lIHBvc3NpYmxlIGZpbGVuYW1lIG9ic3RhY2xlcy4uLgotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnICcsJ18nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnLycsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnXFwnLCctJykKLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJzonLCctJykKLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJzsnLCctJykKLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJyInLCctJykKLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJygnLCctJykKLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJyknLCctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJyAnLCAnXycpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcvJywgJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnXFwnLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCc6JywgJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnOycsICctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJyInLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcoJywgJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnKScsICctJykKIAogICAgICMgTm8gbmVlZCB0byByZXBvcnQgJ3Vua25vd24nIGluZm9ybWF0aW9uLi4uCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCd1bmtub3duJywnJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJ3Vua25vd24nLCAnJykKIAogICAgICMgRm9sZCAnLS0ncyBhbmQgcmVtb3ZlIHRyYWlsaW5nICctJwogICAgIHdoaWxlIDE6Ci0gICAgICAgIGNsZWFuZWQgPSBwbGF0Zm9ybS5yZXBsYWNlKCctLScsJy0nKQorICAgICAgICBjbGVhbmVkID0gcGxhdGZvcm0ucmVwbGFjZSgnLS0nLCAnLScpCiAgICAgICAgIGlmIGNsZWFuZWQgPT0gcGxhdGZvcm06CiAgICAgICAgICAgICBicmVhawogICAgICAgICBwbGF0Zm9ybSA9IGNsZWFuZWQKQEAgLTg4Nyw3ICs4MjIsNyBAQAogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIHRyeToKICAgICAgICAgcmV0dXJuIHNvY2tldC5nZXRob3N0bmFtZSgpCi0gICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBTdGlsbCBub3Qgd29ya2luZy4uLgogICAgICAgICByZXR1cm4gZGVmYXVsdAogCkBAIC04OTksMTkgKzgzNCwxOSBAQAogICAgIGZpbGVwYXRoID0gb3MucGF0aC5hYnNwYXRoKGZpbGVwYXRoKQogICAgIHdoaWxlIG9zLnBhdGguaXNsaW5rKGZpbGVwYXRoKToKICAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKAotICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmaWxlcGF0aCksb3MucmVhZGxpbmsoZmlsZXBhdGgpKSkKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoZmlsZXBhdGgpLCBvcy5yZWFkbGluayhmaWxlcGF0aCkpKQogICAgIHJldHVybiBmaWxlcGF0aAogCi1kZWYgX3N5c2NtZF91bmFtZShvcHRpb24sZGVmYXVsdD0nJyk6CitkZWYgX3N5c2NtZF91bmFtZShvcHRpb24sIGRlZmF1bHQ9JycpOgogCiAgICAgIiIiIEludGVyZmFjZSB0byB0aGUgc3lzdGVtJ3MgdW5hbWUgY29tbWFuZC4KICAgICAiIiIKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywgJ3dpbjMyJywgJ3dpbjE2Jyk6CiAgICAgICAgICMgWFhYIE90aGVycyB0b28gPwogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIHRyeToKICAgICAgICAgZiA9IG9zLnBvcGVuKCd1bmFtZSAlcyAyPiAlcycgJSAob3B0aW9uLCBERVZfTlVMTCkpCi0gICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvcixvcy5lcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgb3V0cHV0ID0gZi5yZWFkKCkuc3RyaXAoKQogICAgIHJjID0gZi5jbG9zZSgpCkBAIC05MjAsNyArODU1LDcgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gb3V0cHV0CiAKLWRlZiBfc3lzY21kX2ZpbGUodGFyZ2V0LGRlZmF1bHQ9JycpOgorZGVmIF9zeXNjbWRfZmlsZSh0YXJnZXQsIGRlZmF1bHQ9JycpOgogCiAgICAgIiIiIEludGVyZmFjZSB0byB0aGUgc3lzdGVtJ3MgZmlsZSBjb21tYW5kLgogCkBAIC05MjksNyArODY0LDcgQEAKICAgICAgICAgZGVmYXVsdCBpbiBjYXNlIHRoZSBjb21tYW5kIHNob3VsZCBmYWlsLgogCiAgICAgIiIiCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicsJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsICd3aW4zMicsICd3aW4xNicpOgogICAgICAgICAjIFhYWCBPdGhlcnMgdG9vID8KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0YXJnZXQgPSBfZm9sbG93X3N5bWxpbmtzKHRhcmdldCkKQEAgLTkzNyw3ICs4NzIsNyBAQAogICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2ZpbGUnLCB0YXJnZXRdLAogICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKIAotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3Isb3MuZXJyb3IpOgorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIG91dHB1dCA9IHByb2MuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoJ2xhdGluLTEnKQogICAgIHJjID0gcHJvYy53YWl0KCkKQEAgLTk1MSwxNyArODg2LDE3IEBACiAjIERlZmF1bHQgdmFsdWVzIGZvciBhcmNoaXRlY3R1cmU7IG5vbi1lbXB0eSBzdHJpbmdzIG92ZXJyaWRlIHRoZQogIyBkZWZhdWx0cyBnaXZlbiBhcyBwYXJhbWV0ZXJzCiBfZGVmYXVsdF9hcmNoaXRlY3R1cmUgPSB7Ci0gICAgJ3dpbjMyJzogKCcnLCdXaW5kb3dzUEUnKSwKLSAgICAnd2luMTYnOiAoJycsJ1dpbmRvd3MnKSwKLSAgICAnZG9zJzogKCcnLCdNU0RPUycpLAorICAgICd3aW4zMic6ICgnJywgJ1dpbmRvd3NQRScpLAorICAgICd3aW4xNic6ICgnJywgJ1dpbmRvd3MnKSwKKyAgICAnZG9zJzogKCcnLCAnTVNET1MnKSwKIH0KIAotZGVmIGFyY2hpdGVjdHVyZShleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlLGJpdHM9JycsbGlua2FnZT0nJyk6CitkZWYgYXJjaGl0ZWN0dXJlKGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsIGJpdHM9JycsIGxpbmthZ2U9JycpOgogCiAgICAgIiIiIFF1ZXJpZXMgdGhlIGdpdmVuIGV4ZWN1dGFibGUgKGRlZmF1bHRzIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIKICAgICAgICAgYmluYXJ5KSBmb3IgdmFyaW91cyBhcmNoaXRlY3R1cmUgaW5mb3JtYXRpb24uCiAKLSAgICAgICAgUmV0dXJucyBhIHR1cGxlIChiaXRzLGxpbmthZ2UpIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgIFJldHVybnMgYSB0dXBsZSAoYml0cywgbGlua2FnZSkgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKICAgICAgICAgdGhlIGJpdCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBsaW5rYWdlIGZvcm1hdCB1c2VkIGZvciB0aGUKICAgICAgICAgZXhlY3V0YWJsZS4gQm90aCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHN0cmluZ3MuCiAKQEAgLTk5OSwxNiArOTM0LDE2IEBACiAgICAgICAgICMgImZpbGUiIGNvbW1hbmQgZGlkIG5vdCByZXR1cm4gYW55dGhpbmc7IHdlJ2xsIHRyeSB0byBwcm92aWRlCiAgICAgICAgICMgc29tZSBzZW5zaWJsZSBkZWZhdWx0cyB0aGVuLi4uCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiBfZGVmYXVsdF9hcmNoaXRlY3R1cmU6Ci0gICAgICAgICAgICBiLGwgPSBfZGVmYXVsdF9hcmNoaXRlY3R1cmVbc3lzLnBsYXRmb3JtXQorICAgICAgICAgICAgYiwgbCA9IF9kZWZhdWx0X2FyY2hpdGVjdHVyZVtzeXMucGxhdGZvcm1dCiAgICAgICAgICAgICBpZiBiOgogICAgICAgICAgICAgICAgIGJpdHMgPSBiCiAgICAgICAgICAgICBpZiBsOgogICAgICAgICAgICAgICAgIGxpbmthZ2UgPSBsCi0gICAgICAgIHJldHVybiBiaXRzLGxpbmthZ2UKKyAgICAgICAgcmV0dXJuIGJpdHMsIGxpbmthZ2UKIAogICAgIGlmICdleGVjdXRhYmxlJyBub3QgaW4gZmlsZW91dDoKICAgICAgICAgIyBGb3JtYXQgbm90IHN1cHBvcnRlZAotICAgICAgICByZXR1cm4gYml0cyxsaW5rYWdlCisgICAgICAgIHJldHVybiBiaXRzLCBsaW5rYWdlCiAKICAgICAjIEJpdHMKICAgICBpZiAnMzItYml0JyBpbiBmaWxlb3V0OgpAQCAtMTAzNiw3ICs5NzEsNyBAQAogICAgICAgICAjIFhYWCB0aGUgQS5PVVQgZm9ybWF0IGFsc28gZmFsbHMgdW5kZXIgdGhpcyBjbGFzcy4uLgogICAgICAgICBwYXNzCiAKLSAgICByZXR1cm4gYml0cyxsaW5rYWdlCisgICAgcmV0dXJuIGJpdHMsIGxpbmthZ2UKIAogIyMjIFBvcnRhYmxlIHVuYW1lKCkgaW50ZXJmYWNlCiAKQEAgLTEwNDgsNyArOTgzLDcgQEAKIGRlZiB1bmFtZSgpOgogCiAgICAgIiIiIEZhaXJseSBwb3J0YWJsZSB1bmFtZSBpbnRlcmZhY2UuIFJldHVybnMgYSB0dXBsZQotICAgICAgICBvZiBzdHJpbmdzIChzeXN0ZW0sbm9kZSxyZWxlYXNlLHZlcnNpb24sbWFjaGluZSxwcm9jZXNzb3IpCisgICAgICAgIG9mIHN0cmluZ3MgKHN5c3RlbSwgbm9kZSwgcmVsZWFzZSwgdmVyc2lvbiwgbWFjaGluZSwgcHJvY2Vzc29yKQogICAgICAgICBpZGVudGlmeWluZyB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybS4KIAogICAgICAgICBOb3RlIHRoYXQgdW5saWtlIHRoZSBvcy51bmFtZSBmdW5jdGlvbiB0aGlzIGFsc28gcmV0dXJucwpAQCAtMTA2Nyw3ICsxMDAyLDcgQEAKIAogICAgICMgR2V0IHNvbWUgaW5mb3MgZnJvbSB0aGUgYnVpbHRpbiBvcy51bmFtZSBBUEkuLi4KICAgICB0cnk6Ci0gICAgICAgIHN5c3RlbSxub2RlLHJlbGVhc2UsdmVyc2lvbixtYWNoaW5lID0gb3MudW5hbWUoKQorICAgICAgICBzeXN0ZW0sIG5vZGUsIHJlbGVhc2UsIHZlcnNpb24sIG1hY2hpbmUgPSBvcy51bmFtZSgpCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICBub19vc191bmFtZSA9IDEKIApAQCAtMTA4NSw3ICsxMDIwLDcgQEAKIAogICAgICAgICAjIFRyeSB3aW4zMl92ZXIoKSBvbiB3aW4zMiBwbGF0Zm9ybXMKICAgICAgICAgaWYgc3lzdGVtID09ICd3aW4zMic6Ci0gICAgICAgICAgICByZWxlYXNlLHZlcnNpb24sY3NkLHB0eXBlID0gd2luMzJfdmVyKCkKKyAgICAgICAgICAgIHJlbGVhc2UsIHZlcnNpb24sIGNzZCwgcHR5cGUgPSB3aW4zMl92ZXIoKQogICAgICAgICAgICAgaWYgcmVsZWFzZSBhbmQgdmVyc2lvbjoKICAgICAgICAgICAgICAgICB1c2Vfc3lzY21kX3ZlciA9IDAKICAgICAgICAgICAgICMgVHJ5IHRvIHVzZSB0aGUgUFJPQ0VTU09SXyogZW52aXJvbm1lbnQgdmFyaWFibGVzCkBAIC0xMTA0LDcgKzEwMzksNyBAQAogICAgICAgICAjIFRyeSB0aGUgJ3Zlcicgc3lzdGVtIGNvbW1hbmQgYXZhaWxhYmxlIG9uIHNvbWUKICAgICAgICAgIyBwbGF0Zm9ybXMKICAgICAgICAgaWYgdXNlX3N5c2NtZF92ZXI6Ci0gICAgICAgICAgICBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uID0gX3N5c2NtZF92ZXIoc3lzdGVtKQorICAgICAgICAgICAgc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uID0gX3N5c2NtZF92ZXIoc3lzdGVtKQogICAgICAgICAgICAgIyBOb3JtYWxpemUgc3lzdGVtIHRvIHdoYXQgd2luMzJfdmVyKCkgbm9ybWFsbHkgcmV0dXJucwogICAgICAgICAgICAgIyAoX3N5c2NtZF92ZXIoKSB0ZW5kcyB0byByZXR1cm4gdGhlIHZlbmRvciBuYW1lIGFzIHdlbGwpCiAgICAgICAgICAgICBpZiBzeXN0ZW0gPT0gJ01pY3Jvc29mdCBXaW5kb3dzJzoKQEAgLTExMjIsNyArMTA1Nyw3IEBACiAKICAgICAgICAgIyBJbiBjYXNlIHdlIHN0aWxsIGRvbid0IGtub3cgYW55dGhpbmcgdXNlZnVsLCB3ZSdsbCB0cnkgdG8KICAgICAgICAgIyBoZWxwIG91cnNlbHZlcwotICAgICAgICBpZiBzeXN0ZW0gaW4gKCd3aW4zMicsJ3dpbjE2Jyk6CisgICAgICAgIGlmIHN5c3RlbSBpbiAoJ3dpbjMyJywgJ3dpbjE2Jyk6CiAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbjoKICAgICAgICAgICAgICAgICBpZiBzeXN0ZW0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9ICczMmJpdCcKQEAgLTExMzEsNyArMTA2Niw3IEBACiAgICAgICAgICAgICBzeXN0ZW0gPSAnV2luZG93cycKIAogICAgICAgICBlbGlmIHN5c3RlbVs6NF0gPT0gJ2phdmEnOgotICAgICAgICAgICAgcmVsZWFzZSx2ZW5kb3Isdm1pbmZvLG9zaW5mbyA9IGphdmFfdmVyKCkKKyAgICAgICAgICAgIHJlbGVhc2UsIHZlbmRvciwgdm1pbmZvLCBvc2luZm8gPSBqYXZhX3ZlcigpCiAgICAgICAgICAgICBzeXN0ZW0gPSAnSmF2YScKICAgICAgICAgICAgIHZlcnNpb24gPSAnLCAnLmpvaW4odm1pbmZvKQogICAgICAgICAgICAgaWYgbm90IHZlcnNpb246CkBAIC0xMTQ5LDE0ICsxMDg0LDE0IEBACiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNzaWQsIGNwdV9udW1iZXIgPSB2bXNfbGliLmdldHN5aSgnU1lJJF9DUFUnLDApCisgICAgICAgICAgICBjc2lkLCBjcHVfbnVtYmVyID0gdm1zX2xpYi5nZXRzeWkoJ1NZSSRfQ1BVJywgMCkKICAgICAgICAgICAgIGlmIChjcHVfbnVtYmVyID49IDEyOCk6CiAgICAgICAgICAgICAgICAgcHJvY2Vzc29yID0gJ0FscGhhJwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwcm9jZXNzb3IgPSAnVkFYJwogICAgIGlmIG5vdCBwcm9jZXNzb3I6CiAgICAgICAgICMgR2V0IHByb2Nlc3NvciBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1bmFtZSBzeXN0ZW0gY29tbWFuZAotICAgICAgICBwcm9jZXNzb3IgPSBfc3lzY21kX3VuYW1lKCctcCcsJycpCisgICAgICAgIHByb2Nlc3NvciA9IF9zeXNjbWRfdW5hbWUoJy1wJywgJycpCiAKICAgICAjSWYgYW55IHVua25vd25zIHN0aWxsIGV4aXN0LCByZXBsYWNlIHRoZW0gd2l0aCAnJ3MsIHdoaWNoIGFyZSBtb3JlIHBvcnRhYmxlCiAgICAgaWYgc3lzdGVtID09ICd1bmtub3duJzoKQEAgLTExNzcsNyArMTExMiw4IEBACiAgICAgICAgIHN5c3RlbSA9ICdXaW5kb3dzJwogICAgICAgICByZWxlYXNlID0gJ1Zpc3RhJwogCi0gICAgX3VuYW1lX2NhY2hlID0gdW5hbWVfcmVzdWx0KHN5c3RlbSxub2RlLHJlbGVhc2UsdmVyc2lvbixtYWNoaW5lLHByb2Nlc3NvcikKKyAgICBfdW5hbWVfY2FjaGUgPSB1bmFtZV9yZXN1bHQoc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCBwcm9jZXNzb3IpCiAgICAgcmV0dXJuIF91bmFtZV9jYWNoZQogCiAjIyMgRGlyZWN0IGludGVyZmFjZXMgdG8gc29tZSBvZiB0aGUgdW5hbWUoKSByZXR1cm4gdmFsdWVzCkBAIC0xNDc0LDU3ICsxNDEwLDU4IEBACiAKICAgICAjIEdldCB1bmFtZSBpbmZvcm1hdGlvbiBhbmQgdGhlbiBhcHBseSBwbGF0Zm9ybSBzcGVjaWZpYyBjb3NtZXRpY3MKICAgICAjIHRvIGl0Li4uCi0gICAgc3lzdGVtLG5vZGUscmVsZWFzZSx2ZXJzaW9uLG1hY2hpbmUscHJvY2Vzc29yID0gdW5hbWUoKQorICAgIHN5c3RlbSwgbm9kZSwgcmVsZWFzZSwgdmVyc2lvbiwgbWFjaGluZSwgcHJvY2Vzc29yID0gdW5hbWUoKQogICAgIGlmIG1hY2hpbmUgPT0gcHJvY2Vzc29yOgogICAgICAgICBwcm9jZXNzb3IgPSAnJwogICAgIGlmIGFsaWFzZWQ6Ci0gICAgICAgIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24gPSBzeXN0ZW1fYWxpYXMoc3lzdGVtLHJlbGVhc2UsdmVyc2lvbikKKyAgICAgICAgc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uID0gc3lzdGVtX2FsaWFzKHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbikKIAogICAgIGlmIHN5c3RlbSA9PSAnV2luZG93cyc6CiAgICAgICAgICMgTVMgcGxhdGZvcm1zCi0gICAgICAgIHJlbCx2ZXJzLGNzZCxwdHlwZSA9IHdpbjMyX3Zlcih2ZXJzaW9uKQorICAgICAgICByZWwsIHZlcnMsIGNzZCwgcHR5cGUgPSB3aW4zMl92ZXIodmVyc2lvbikKICAgICAgICAgaWYgdGVyc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSkKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24sY3NkKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uLCBjc2QpCiAKICAgICBlbGlmIHN5c3RlbSBpbiAoJ0xpbnV4JywpOgogICAgICAgICAjIExpbnV4IGJhc2VkIHN5c3RlbXMKLSAgICAgICAgZGlzdG5hbWUsZGlzdHZlcnNpb24sZGlzdGlkID0gZGlzdCgnJykKKyAgICAgICAgZGlzdG5hbWUsIGRpc3R2ZXJzaW9uLCBkaXN0aWQgPSBkaXN0KCcnKQogICAgICAgICBpZiBkaXN0bmFtZSBhbmQgbm90IHRlcnNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UsbWFjaGluZSxwcm9jZXNzb3IsCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIG1hY2hpbmUsIHByb2Nlc3NvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RuYW1lLGRpc3R2ZXJzaW9uLGRpc3RpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RuYW1lLCBkaXN0dmVyc2lvbiwgZGlzdGlkKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBJZiB0aGUgZGlzdHJpYnV0aW9uIG5hbWUgaXMgdW5rbm93biBjaGVjayBmb3IgbGliYyB2cy4gZ2xpYmMKLSAgICAgICAgICAgIGxpYmNuYW1lLGxpYmN2ZXJzaW9uID0gbGliY192ZXIoc3lzLmV4ZWN1dGFibGUpCi0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSxtYWNoaW5lLHByb2Nlc3NvciwKKyAgICAgICAgICAgIGxpYmNuYW1lLCBsaWJjdmVyc2lvbiA9IGxpYmNfdmVyKHN5cy5leGVjdXRhYmxlKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCBtYWNoaW5lLCBwcm9jZXNzb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJjbmFtZStsaWJjdmVyc2lvbikKICAgICBlbGlmIHN5c3RlbSA9PSAnSmF2YSc6CiAgICAgICAgICMgSmF2YSBwbGF0Zm9ybXMKLSAgICAgICAgcix2LHZtaW5mbywob3NfbmFtZSxvc192ZXJzaW9uLG9zX2FyY2gpID0gamF2YV92ZXIoKQorICAgICAgICByLCB2LCB2bWluZm8sIChvc19uYW1lLCBvc192ZXJzaW9uLCBvc19hcmNoKSA9IGphdmFfdmVyKCkKICAgICAgICAgaWYgdGVyc2Ugb3Igbm90IG9zX25hbWU6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UsdmVyc2lvbiwKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc19uYW1lLG9zX3ZlcnNpb24sb3NfYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zX25hbWUsIG9zX3ZlcnNpb24sIG9zX2FyY2gpCiAKICAgICBlbGlmIHN5c3RlbSA9PSAnTWFjT1MnOgogICAgICAgICAjIE1hY09TIHBsYXRmb3JtcwogICAgICAgICBpZiB0ZXJzZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UsbWFjaGluZSkKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgbWFjaGluZSkKIAogICAgIGVsc2U6CiAgICAgICAgICMgR2VuZXJpYyBoYW5kbGVyCiAgICAgICAgIGlmIHRlcnNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBiaXRzLGxpbmthZ2UgPSBhcmNoaXRlY3R1cmUoc3lzLmV4ZWN1dGFibGUpCi0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSxtYWNoaW5lLHByb2Nlc3NvcixiaXRzLGxpbmthZ2UpCisgICAgICAgICAgICBiaXRzLCBsaW5rYWdlID0gYXJjaGl0ZWN0dXJlKHN5cy5leGVjdXRhYmxlKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCBtYWNoaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yLCBiaXRzLCBsaW5rYWdlKQogCiAgICAgX3BsYXRmb3JtX2NhY2hlWyhhbGlhc2VkLCB0ZXJzZSldID0gcGxhdGZvcm0KICAgICByZXR1cm4gcGxhdGZvcm0KQEAgLTE1MzUsNSArMTQ3Miw1IEBACiAgICAgIyBEZWZhdWx0IGlzIHRvIHByaW50IHRoZSBhbGlhc2VkIHZlcmJvc2UgcGxhdGZvcm0gc3RyaW5nCiAgICAgdGVyc2UgPSAoJ3RlcnNlJyBpbiBzeXMuYXJndiBvciAnLS10ZXJzZScgaW4gc3lzLmFyZ3YpCiAgICAgYWxpYXNlZCA9IChub3QgJ25vbmFsaWFzZWQnIGluIHN5cy5hcmd2IGFuZCBub3QgJy0tbm9uYWxpYXNlZCcgaW4gc3lzLmFyZ3YpCi0gICAgcHJpbnQocGxhdGZvcm0oYWxpYXNlZCx0ZXJzZSkpCisgICAgcHJpbnQocGxhdGZvcm0oYWxpYXNlZCwgdGVyc2UpKQogICAgIHN5cy5leGl0KDApCmRpZmYgLS1naXQgYS9MaWIvcGxpc3RsaWIucHkgYi9MaWIvcGxpc3RsaWIucHkKaW5kZXggMmIwYjYzNC4uYjk5NDZmZCAxMDA2NDQKLS0tIGEvTGliL3BsaXN0bGliLnB5CisrKyBiL0xpYi9wbGlzdGxpYi5weQpAQCAtNCwyNSArNCwyMCBAQAogYmFzaWMgb2JqZWN0IHR5cGVzLCBsaWtlIGRpY3Rpb25hcmllcywgbGlzdHMsIG51bWJlcnMgYW5kIHN0cmluZ3MuCiBVc3VhbGx5IHRoZSB0b3AgbGV2ZWwgb2JqZWN0IGlzIGEgZGljdGlvbmFyeS4KIAotVG8gd3JpdGUgb3V0IGEgcGxpc3QgZmlsZSwgdXNlIHRoZSB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIHBhdGhPckZpbGUpCi1mdW5jdGlvbi4gJ3Jvb3RPYmplY3QnIGlzIHRoZSB0b3AgbGV2ZWwgb2JqZWN0LCAncGF0aE9yRmlsZScgaXMgYQotZmlsZW5hbWUgb3IgYSAod3JpdGFibGUpIGZpbGUgb2JqZWN0LgorVG8gd3JpdGUgb3V0IGEgcGxpc3QgZmlsZSwgdXNlIHRoZSBkdW1wKHZhbHVlLCBmaWxlKQorZnVuY3Rpb24uICd2YWx1ZScgaXMgdGhlIHRvcCBsZXZlbCBvYmplY3QsICdmaWxlJyBpcworYSAod3JpdGFibGUpIGZpbGUgb2JqZWN0LgogCi1UbyBwYXJzZSBhIHBsaXN0IGZyb20gYSBmaWxlLCB1c2UgdGhlIHJlYWRQbGlzdChwYXRoT3JGaWxlKSBmdW5jdGlvbiwKLXdpdGggYSBmaWxlIG5hbWUgb3IgYSAocmVhZGFibGUpIGZpbGUgb2JqZWN0IGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBJdAorVG8gcGFyc2UgYSBwbGlzdCBmcm9tIGEgZmlsZSwgdXNlIHRoZSBsb2FkKGZpbGUpIGZ1bmN0aW9uLAord2l0aCBhIChyZWFkYWJsZSkgZmlsZSBvYmplY3QgYXMgdGhlIG9ubHkgYXJndW1lbnQuIEl0CiByZXR1cm5zIHRoZSB0b3AgbGV2ZWwgb2JqZWN0IChhZ2FpbiwgdXN1YWxseSBhIGRpY3Rpb25hcnkpLgogCi1UbyB3b3JrIHdpdGggcGxpc3QgZGF0YSBpbiBieXRlcyBvYmplY3RzLCB5b3UgY2FuIHVzZSByZWFkUGxpc3RGcm9tQnl0ZXMoKQotYW5kIHdyaXRlUGxpc3RUb0J5dGVzKCkuCitUbyB3b3JrIHdpdGggcGxpc3QgZGF0YSBpbiBieXRlcyBvYmplY3RzLCB5b3UgY2FuIHVzZSBsb2FkcygpCithbmQgZHVtcHMoKS4KIAogVmFsdWVzIGNhbiBiZSBzdHJpbmdzLCBpbnRlZ2VycywgZmxvYXRzLCBib29sZWFucywgdHVwbGVzLCBsaXN0cywKLWRpY3Rpb25hcmllcyAoYnV0IG9ubHkgd2l0aCBzdHJpbmcga2V5cyksIERhdGEgb3IgZGF0ZXRpbWUuZGF0ZXRpbWUgb2JqZWN0cy4KLVN0cmluZyB2YWx1ZXMgKGluY2x1ZGluZyBkaWN0aW9uYXJ5IGtleXMpIGhhdmUgdG8gYmUgdW5pY29kZSBzdHJpbmdzIC0tIHRoZXkKLXdpbGwgYmUgd3JpdHRlbiBvdXQgYXMgVVRGLTguCi0KLVRoZSA8ZGF0YT4gcGxpc3QgdHlwZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgRGF0YSBjbGFzcy4gVGhpcyBpcyBhCi10aGluIHdyYXBwZXIgYXJvdW5kIGEgUHl0aG9uIGJ5dGVzIG9iamVjdC4gVXNlICdEYXRhJyBpZiB5b3VyIHN0cmluZ3MKLWNvbnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzLgorZGljdGlvbmFyaWVzIChidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgRGF0YSwgYnl0ZXMsIGJ5dGVhcnJheSwgb3IKK2RhdGV0aW1lLmRhdGV0aW1lIG9iamVjdHMuCiAKIEdlbmVyYXRlIFBsaXN0IGV4YW1wbGU6CiAKQEAgLTM3LDIyNiArMzIsNDggQEAKICAgICAgICAgICAgIGFUcnVlVmFsdWUgPSBUcnVlLAogICAgICAgICAgICAgYUZhbHNlVmFsdWUgPSBGYWxzZSwKICAgICAgICAgKSwKLSAgICAgICAgc29tZURhdGEgPSBEYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICBzb21lTW9yZURhdGEgPSBEYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwKSwKKyAgICAgICAgc29tZURhdGEgPSBiIjxiaW5hcnkgZ3Vuaz4iLAorICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPiIgKiAxMCwKICAgICAgICAgYURhdGUgPSBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKHRpbWUubWt0aW1lKHRpbWUuZ210aW1lKCkpKSwKICAgICApCi0gICAgd3JpdGVQbGlzdChwbCwgZmlsZU5hbWUpCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAnd2InKSBhcyBmcDoKKyAgICAgICAgZHVtcChwbCwgZnApCiAKIFBhcnNlIFBsaXN0IGV4YW1wbGU6CiAKLSAgICBwbCA9IHJlYWRQbGlzdChwYXRoT3JGaWxlKQotICAgIHByaW50IHBsWyJhS2V5Il0KKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICdyYicpIGFzIGZwOgorICAgICAgICBwbCA9IGxvYWQoZnApCisgICAgcHJpbnQocGxbImFLZXkiXSkKICIiIgotCi0KIF9fYWxsX18gPSBbCiAgICAgInJlYWRQbGlzdCIsICJ3cml0ZVBsaXN0IiwgInJlYWRQbGlzdEZyb21CeXRlcyIsICJ3cml0ZVBsaXN0VG9CeXRlcyIsCi0gICAgIlBsaXN0IiwgIkRhdGEiLCAiRGljdCIKKyAgICAiUGxpc3QiLCAiRGF0YSIsICJEaWN0IiwgIkZNVF9YTUwiLCAiRk1UX0JJTkFSWSIsCisgICAgImxvYWQiLCAiZHVtcCIsICJsb2FkcyIsICJkdW1wcyIKIF0KLSMgTm90ZTogdGhlIFBsaXN0IGFuZCBEaWN0IGNsYXNzZXMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuCiAKIGltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IGVudW0KIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgc3RydWN0Citmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCitmcm9tIHhtbC5wYXJzZXJzLmV4cGF0IGltcG9ydCBQYXJzZXJDcmVhdGUKIAogCi1kZWYgcmVhZFBsaXN0KHBhdGhPckZpbGUpOgotICAgICIiIlJlYWQgYSAucGxpc3QgZmlsZS4gJ3BhdGhPckZpbGUnIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUgb3IgYQotICAgIChyZWFkYWJsZSkgZmlsZSBvYmplY3QuIFJldHVybiB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoCi0gICAgdXN1YWxseSBpcyBhIGRpY3Rpb25hcnkpLgotICAgICIiIgotICAgIGRpZE9wZW4gPSBGYWxzZQotICAgIHRyeToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoT3JGaWxlLCBzdHIpOgotICAgICAgICAgICAgcGF0aE9yRmlsZSA9IG9wZW4ocGF0aE9yRmlsZSwgJ3JiJykKLSAgICAgICAgICAgIGRpZE9wZW4gPSBUcnVlCi0gICAgICAgIHAgPSBQbGlzdFBhcnNlcigpCi0gICAgICAgIHJvb3RPYmplY3QgPSBwLnBhcnNlKHBhdGhPckZpbGUpCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgZGlkT3BlbjoKLSAgICAgICAgICAgIHBhdGhPckZpbGUuY2xvc2UoKQotICAgIHJldHVybiByb290T2JqZWN0CitQbGlzdEZvcm1hdCA9IGVudW0uRW51bSgnUGxpc3RGb3JtYXQnLCAnRk1UX1hNTCBGTVRfQklOQVJZJywgbW9kdWxlPV9fbmFtZV9fKQorZ2xvYmFscygpLnVwZGF0ZShQbGlzdEZvcm1hdC5fX21lbWJlcnNfXykKIAogCi1kZWYgd3JpdGVQbGlzdChyb290T2JqZWN0LCBwYXRoT3JGaWxlKToKLSAgICAiIiJXcml0ZSAncm9vdE9iamVjdCcgdG8gYSAucGxpc3QgZmlsZS4gJ3BhdGhPckZpbGUnIG1heSBlaXRoZXIgYmUgYQotICAgIGZpbGUgbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCi0gICAgIiIiCi0gICAgZGlkT3BlbiA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6Ci0gICAgICAgICAgICBwYXRoT3JGaWxlID0gb3BlbihwYXRoT3JGaWxlLCAnd2InKQotICAgICAgICAgICAgZGlkT3BlbiA9IFRydWUKLSAgICAgICAgd3JpdGVyID0gUGxpc3RXcml0ZXIocGF0aE9yRmlsZSkKLSAgICAgICAgd3JpdGVyLndyaXRlbG4oIjxwbGlzdCB2ZXJzaW9uPVwiMS4wXCI+IikKLSAgICAgICAgd3JpdGVyLndyaXRlVmFsdWUocm9vdE9iamVjdCkKLSAgICAgICAgd3JpdGVyLndyaXRlbG4oIjwvcGxpc3Q+IikKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBkaWRPcGVuOgotICAgICAgICAgICAgcGF0aE9yRmlsZS5jbG9zZSgpCi0KLQotZGVmIHJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKToKLSAgICAiIiJSZWFkIGEgcGxpc3QgZGF0YSBmcm9tIGEgYnl0ZXMgb2JqZWN0LiBSZXR1cm4gdGhlIHJvb3Qgb2JqZWN0LgotICAgICIiIgotICAgIHJldHVybiByZWFkUGxpc3QoQnl0ZXNJTyhkYXRhKSkKLQotCi1kZWYgd3JpdGVQbGlzdFRvQnl0ZXMocm9vdE9iamVjdCk6Ci0gICAgIiIiUmV0dXJuICdyb290T2JqZWN0JyBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCi0gICAgIiIiCi0gICAgZiA9IEJ5dGVzSU8oKQotICAgIHdyaXRlUGxpc3Qocm9vdE9iamVjdCwgZikKLSAgICByZXR1cm4gZi5nZXR2YWx1ZSgpCi0KLQotY2xhc3MgRHVtYlhNTFdyaXRlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50TGV2ZWw9MCwgaW5kZW50PSJcdCIpOgotICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCi0gICAgICAgIHNlbGYuc3RhY2sgPSBbXQotICAgICAgICBzZWxmLmluZGVudExldmVsID0gaW5kZW50TGV2ZWwKLSAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKLQotICAgIGRlZiBiZWdpbkVsZW1lbnQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGVsZW1lbnQpCi0gICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiIgJSBlbGVtZW50KQotICAgICAgICBzZWxmLmluZGVudExldmVsICs9IDEKLQotICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIGVsZW1lbnQpOgotICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnRMZXZlbCA+IDAKLSAgICAgICAgYXNzZXJ0IHNlbGYuc3RhY2sucG9wKCkgPT0gZWxlbWVudAotICAgICAgICBzZWxmLmluZGVudExldmVsIC09IDEKLSAgICAgICAgc2VsZi53cml0ZWxuKCI8LyVzPiIgJSBlbGVtZW50KQotCi0gICAgZGVmIHNpbXBsZUVsZW1lbnQoc2VsZiwgZWxlbWVudCwgdmFsdWU9Tm9uZSk6Ci0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdmFsdWUgPSBfZXNjYXBlKHZhbHVlKQotICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+JXM8LyVzPiIgJSAoZWxlbWVudCwgdmFsdWUsIGVsZW1lbnQpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXMvPiIgJSBlbGVtZW50KQotCi0gICAgZGVmIHdyaXRlbG4oc2VsZiwgbGluZSk6Ci0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICAjIHBsaXN0IGhhcyBmaXhlZCBlbmNvZGluZyBvZiB1dGYtOAotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBzdHIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLmVuY29kZSgndXRmLTgnKQotICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKHNlbGYuaW5kZW50TGV2ZWwgKiBzZWxmLmluZGVudCkKLSAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShsaW5lKQotICAgICAgICBzZWxmLmZpbGUud3JpdGUoYidcbicpCi0KLQotIyBDb250ZW50cyBzaG91bGQgY29uZm9ybSB0byBhIHN1YnNldCBvZiBJU08gODYwMQotIyAoaW4gcGFydGljdWxhciwgWVlZWSAnLScgTU0gJy0nIEREICdUJyBISCAnOicgTU0gJzonIFNTICdaJy4gIFNtYWxsZXIgdW5pdHMgbWF5IGJlIG9taXR0ZWQgd2l0aAotIyAgYSBsb3NzIG9mIHByZWNpc2lvbikKLV9kYXRlUGFyc2VyID0gcmUuY29tcGlsZShyIig/UDx5ZWFyPlxkXGRcZFxkKSg/Oi0oP1A8bW9udGg+XGRcZCkoPzotKD9QPGRheT5cZFxkKSg/OlQoP1A8aG91cj5cZFxkKSg/OjooP1A8bWludXRlPlxkXGQpKD86Oig/UDxzZWNvbmQ+XGRcZCkpPyk/KT8pPyk/WiIsIHJlLkFTQ0lJKQotCi1kZWYgX2RhdGVGcm9tU3RyaW5nKHMpOgotICAgIG9yZGVyID0gKCd5ZWFyJywgJ21vbnRoJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnKQotICAgIGdkID0gX2RhdGVQYXJzZXIubWF0Y2gocykuZ3JvdXBkaWN0KCkKLSAgICBsc3QgPSBbXQotICAgIGZvciBrZXkgaW4gb3JkZXI6Ci0gICAgICAgIHZhbCA9IGdkW2tleV0KLSAgICAgICAgaWYgdmFsIGlzIE5vbmU6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBsc3QuYXBwZW5kKGludCh2YWwpKQotICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZSgqbHN0KQotCi1kZWYgX2RhdGVUb1N0cmluZyhkKToKLSAgICByZXR1cm4gJyUwNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkWicgJSAoCi0gICAgICAgIGQueWVhciwgZC5tb250aCwgZC5kYXksCi0gICAgICAgIGQuaG91ciwgZC5taW51dGUsIGQuc2Vjb25kCi0gICAgKQotCi0KLSMgUmVnZXggdG8gZmluZCBhbnkgY29udHJvbCBjaGFycywgZXhjZXB0IGZvciBcdCBcbiBhbmQgXHIKLV9jb250cm9sQ2hhclBhdCA9IHJlLmNvbXBpbGUoCi0gICAgciJbXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwYlx4MGNceDBlXHgwZiIKLSAgICByIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWZdIikKLQotZGVmIF9lc2NhcGUodGV4dCk6Ci0gICAgbSA9IF9jb250cm9sQ2hhclBhdC5zZWFyY2godGV4dCkKLSAgICBpZiBtIGlzIG5vdCBOb25lOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzdHJpbmdzIGNhbid0IGNvbnRhaW5zIGNvbnRyb2wgY2hhcmFjdGVyczsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgcGxpc3RsaWIuRGF0YSBpbnN0ZWFkIikKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcclxuIiwgIlxuIikgICAgICAgIyBjb252ZXJ0IERPUyBsaW5lIGVuZGluZ3MKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcciIsICJcbiIpICAgICAgICAgIyBjb252ZXJ0IE1hYyBsaW5lIGVuZGluZ3MKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikgICAgICAgIyBlc2NhcGUgJyYnCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPCIsICImbHQ7IikgICAgICAgICMgZXNjYXBlICc8JwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpICAgICAgICAjIGVzY2FwZSAnPicKLSAgICByZXR1cm4gdGV4dAotCi0KLVBMSVNUSEVBREVSID0gYiIiIlwKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLSIiIgotCi1jbGFzcyBQbGlzdFdyaXRlcihEdW1iWE1MV3JpdGVyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbD0wLCBpbmRlbnQ9YiJcdCIsIHdyaXRlSGVhZGVyPTEpOgotICAgICAgICBpZiB3cml0ZUhlYWRlcjoKLSAgICAgICAgICAgIGZpbGUud3JpdGUoUExJU1RIRUFERVIpCi0gICAgICAgIER1bWJYTUxXcml0ZXIuX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50TGV2ZWwsIGluZGVudCkKLQotICAgIGRlZiB3cml0ZVZhbHVlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgic3RyaW5nIiwgdmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6Ci0gICAgICAgICAgICAjIG11c3Qgc3dpdGNoIGZvciBib29sIGJlZm9yZSBpbnQsIGFzIGJvb2wgaXMgYQotICAgICAgICAgICAgIyBzdWJjbGFzcyBvZiBpbnQuLi4KLSAgICAgICAgICAgIGlmIHZhbHVlOgotICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgidHJ1ZSIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiZmFsc2UiKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImludGVnZXIiLCAiJWQiICUgdmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJyZWFsIiwgcmVwcih2YWx1ZSkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlRGljdCh2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKLSAgICAgICAgICAgIHNlbGYud3JpdGVEYXRhKHZhbHVlKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRhdGV0aW1lLmRhdGV0aW1lKToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiZGF0ZSIsIF9kYXRlVG9TdHJpbmcodmFsdWUpKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgc2VsZi53cml0ZUFycmF5KHZhbHVlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlOiAlcyIgJSB0eXBlKHZhbHVlKSkKLQotICAgIGRlZiB3cml0ZURhdGEoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYuYmVnaW5FbGVtZW50KCJkYXRhIikKLSAgICAgICAgc2VsZi5pbmRlbnRMZXZlbCAtPSAxCi0gICAgICAgIG1heGxpbmVsZW5ndGggPSBtYXgoMTYsIDc2IC0gbGVuKHNlbGYuaW5kZW50LnJlcGxhY2UoYiJcdCIsIGIiICIgKiA4KSAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluZGVudExldmVsKSkKLSAgICAgICAgZm9yIGxpbmUgaW4gZGF0YS5hc0Jhc2U2NChtYXhsaW5lbGVuZ3RoKS5zcGxpdChiIlxuIik6Ci0gICAgICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGVsbihsaW5lKQotICAgICAgICBzZWxmLmluZGVudExldmVsICs9IDEKLSAgICAgICAgc2VsZi5lbmRFbGVtZW50KCJkYXRhIikKLQotICAgIGRlZiB3cml0ZURpY3Qoc2VsZiwgZCk6Ci0gICAgICAgIGlmIGQ6Ci0gICAgICAgICAgICBzZWxmLmJlZ2luRWxlbWVudCgiZGljdCIpCi0gICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChkLml0ZW1zKCkpCi0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIHN0cik6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQotICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgia2V5Iiwga2V5KQotICAgICAgICAgICAgICAgIHNlbGYud3JpdGVWYWx1ZSh2YWx1ZSkKLSAgICAgICAgICAgIHNlbGYuZW5kRWxlbWVudCgiZGljdCIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImRpY3QiKQotCi0gICAgZGVmIHdyaXRlQXJyYXkoc2VsZiwgYXJyYXkpOgotICAgICAgICBpZiBhcnJheToKLSAgICAgICAgICAgIHNlbGYuYmVnaW5FbGVtZW50KCJhcnJheSIpCi0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gYXJyYXk6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZVZhbHVlKHZhbHVlKQotICAgICAgICAgICAgc2VsZi5lbmRFbGVtZW50KCJhcnJheSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImFycmF5IikKKyMKKyMKKyMgRGVwcmVjYXRlZCBmdW5jdGlvbmFsaXR5CisjCisjCiAKIAogY2xhc3MgX0ludGVybmFsRGljdChkaWN0KToKQEAgLTI2NCwxOSArODEsMTggQEAKICAgICAjIFRoaXMgY2xhc3MgaXMgbmVlZGVkIHdoaWxlIERpY3QgaXMgc2NoZWR1bGVkIGZvciBkZXByZWNhdGlvbjoKICAgICAjIHdlIG9ubHkgbmVlZCB0byB3YXJuIHdoZW4gYSAqdXNlciogaW5zdGFudGlhdGVzIERpY3Qgb3Igd2hlbgogICAgICMgdGhlICJhdHRyaWJ1dGUgbm90YXRpb24gZm9yIGRpY3Qga2V5cyIgaXMgdXNlZC4KKyAgICBfX3Nsb3RzX18gPSAoKQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZbYXR0cl0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoYXR0cikKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogICAgICAgICB3YXJuKCJBdHRyaWJ1dGUgYWNjZXNzIGZyb20gcGxpc3QgZGljdHMgaXMgZGVwcmVjYXRlZCwgdXNlIGRba2V5XSAiCiAgICAgICAgICAgICAgIm5vdGF0aW9uIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHJldHVybiB2YWx1ZQogCiAgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIGF0dHIsIHZhbHVlKToKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogICAgICAgICB3YXJuKCJBdHRyaWJ1dGUgYWNjZXNzIGZyb20gcGxpc3QgZGljdHMgaXMgZGVwcmVjYXRlZCwgdXNlIGRba2V5XSAiCiAgICAgICAgICAgICAgIm5vdGF0aW9uIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHNlbGZbYXR0cl0gPSB2YWx1ZQpAQCAtMjg2LDU2ICsxMDIsMTExIEBACiAgICAgICAgICAgICBkZWwgc2VsZlthdHRyXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihhdHRyKQotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKIAorCiBjbGFzcyBEaWN0KF9JbnRlcm5hbERpY3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogICAgICAgICB3YXJuKCJUaGUgcGxpc3RsaWIuRGljdCBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgYnVpbHRpbiBkaWN0IGluc3RlYWQiLAogICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqKmt3YXJncykKIAogCi1jbGFzcyBQbGlzdChfSW50ZXJuYWxEaWN0KToKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgX21heWJlX29wZW4ocGF0aE9yRmlsZSwgbW9kZSk6CisgICAgaWYgaXNpbnN0YW5jZShwYXRoT3JGaWxlLCBzdHIpOgorICAgICAgICB3aXRoIG9wZW4ocGF0aE9yRmlsZSwgbW9kZSkgYXMgZnA6CisgICAgICAgICAgICB5aWVsZCBmcAogCi0gICAgIiIiVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcmVhZFBsaXN0KCkgYW5kIHdyaXRlUGxpc3QoKQorICAgIGVsc2U6CisgICAgICAgIHlpZWxkIHBhdGhPckZpbGUKKworCitjbGFzcyBQbGlzdChfSW50ZXJuYWxEaWN0KToKKyAgICAiIiJUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBkdW1wKCkgYW5kIGxvYWQoKQogICAgIGZ1bmN0aW9ucyBpbnN0ZWFkLCB0b2dldGhlciB3aXRoIHJlZ3VsYXIgZGljdCBvYmplY3RzLgogICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgotICAgICAgICB3YXJuKCJUaGUgUGxpc3QgY2xhc3MgaXMgZGVwcmVjYXRlZCwgdXNlIHRoZSByZWFkUGxpc3QoKSBhbmQgIgotICAgICAgICAgICAgICJ3cml0ZVBsaXN0KCkgZnVuY3Rpb25zIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHdhcm4oIlRoZSBQbGlzdCBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIGxvYWQoKSBhbmQgIgorICAgICAgICAgICAgICJkdW1wKCkgZnVuY3Rpb25zIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKiprd2FyZ3MpCiAKKyAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZnJvbUZpbGUoY2xzLCBwYXRoT3JGaWxlKToKLSAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSByZWFkUGxpc3QoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgotICAgICAgICByb290T2JqZWN0ID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCisgICAgICAgICIiIkRlcHJlY2F0ZWQuIFVzZSB0aGUgbG9hZCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCisgICAgICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB2YWx1ZSA9IGxvYWQoZnApCiAgICAgICAgIHBsaXN0ID0gY2xzKCkKLSAgICAgICAgcGxpc3QudXBkYXRlKHJvb3RPYmplY3QpCisgICAgICAgIHBsaXN0LnVwZGF0ZSh2YWx1ZSkKICAgICAgICAgcmV0dXJuIHBsaXN0Ci0gICAgZnJvbUZpbGUgPSBjbGFzc21ldGhvZChmcm9tRmlsZSkKIAogICAgIGRlZiB3cml0ZShzZWxmLCBwYXRoT3JGaWxlKToKLSAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSB3cml0ZVBsaXN0KCkgZnVuY3Rpb24gaW5zdGVhZC4iIiIKLSAgICAgICAgd3JpdGVQbGlzdChzZWxmLCBwYXRoT3JGaWxlKQorICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIGR1bXAoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgorICAgICAgICB3aXRoIF9tYXliZV9vcGVuKHBhdGhPckZpbGUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZHVtcChzZWxmLCBmcCkKIAogCi1kZWYgX2VuY29kZUJhc2U2NChzLCBtYXhsaW5lbGVuZ3RoPTc2KToKLSAgICAjIGNvcGllZCBmcm9tIGJhc2U2NC5lbmNvZGVieXRlcygpLCB3aXRoIGFkZGVkIG1heGxpbmVsZW5ndGggYXJndW1lbnQKLSAgICBtYXhiaW5zaXplID0gKG1heGxpbmVsZW5ndGgvLzQpKjMKLSAgICBwaWVjZXMgPSBbXQotICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgbWF4Ymluc2l6ZSk6Ci0gICAgICAgIGNodW5rID0gc1tpIDogaSArIG1heGJpbnNpemVdCi0gICAgICAgIHBpZWNlcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NChjaHVuaykpCi0gICAgcmV0dXJuIGInJy5qb2luKHBpZWNlcykKK2RlZiByZWFkUGxpc3QocGF0aE9yRmlsZSk6CisgICAgIiIiCisgICAgUmVhZCBhIC5wbGlzdCBmcm9tIGEgcGF0aCBvciBmaWxlLiBwYXRoT3JGaWxlIHNob3VsZCBlaXRoZXIKKyAgICBiZSBhIGZpbGUgbmFtZSwgb3IgYSByZWFkYWJsZSBiaW5hcnkgZmlsZSBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHJlYWRQbGlzdCBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgbG9hZCgpIGluc3RlYWQiLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisKKyAgICB3aXRoIF9tYXliZV9vcGVuKHBhdGhPckZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICByZXR1cm4gbG9hZChmcCwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPUZhbHNlLAorICAgICAgICAgICAgZGljdF90eXBlPV9JbnRlcm5hbERpY3QpCisKK2RlZiB3cml0ZVBsaXN0KHZhbHVlLCBwYXRoT3JGaWxlKToKKyAgICAiIiIKKyAgICBXcml0ZSAndmFsdWUnIHRvIGEgLnBsaXN0IGZpbGUuICdwYXRoT3JGaWxlJyBtYXkgZWl0aGVyIGJlIGEKKyAgICBmaWxlIG5hbWUgb3IgYSAod3JpdGFibGUpIGZpbGUgb2JqZWN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcCBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSB3cml0ZVBsaXN0IGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICB3aXRoIF9tYXliZV9vcGVuKHBhdGhPckZpbGUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHZhbHVlLCBmcCwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSkKKworCitkZWYgcmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpOgorICAgICIiIgorICAgIFJlYWQgYSBwbGlzdCBkYXRhIGZyb20gYSBieXRlcyBvYmplY3QuIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkcyBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSByZWFkUGxpc3RGcm9tQnl0ZXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWRzKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICByZXR1cm4gbG9hZChCeXRlc0lPKGRhdGEpLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UsCisgICAgICAgIGRpY3RfdHlwZT1fSW50ZXJuYWxEaWN0KQorCisKK2RlZiB3cml0ZVBsaXN0VG9CeXRlcyh2YWx1ZSk6CisgICAgIiIiCisgICAgUmV0dXJuICd2YWx1ZScgYXMgYSBwbGlzdC1mb3JtYXR0ZWQgYnl0ZXMgb2JqZWN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcHMgaW5zdGVhZC4KKyAgICAiIiIKKyAgICB3YXJuKCJUaGUgd3JpdGVQbGlzdFRvQnl0ZXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGR1bXBzKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICBmID0gQnl0ZXNJTygpCisgICAgZHVtcCh2YWx1ZSwgZiwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSkKKyAgICByZXR1cm4gZi5nZXR2YWx1ZSgpCisKIAogY2xhc3MgRGF0YToKKyAgICAiIiIKKyAgICBXcmFwcGVyIGZvciBiaW5hcnkgZGF0YS4KIAotICAgICIiIldyYXBwZXIgZm9yIGJpbmFyeSBkYXRhLiIiIgorICAgIFRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCwgdXNlIGEgYnl0ZXMgb2JqZWN0IGluc3RlYWQuCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKToKQEAgLTM0NiwxMCArMjE3LDEwIEBACiAgICAgZGVmIGZyb21CYXNlNjQoY2xzLCBkYXRhKToKICAgICAgICAgIyBiYXNlNjQuZGVjb2RlYnl0ZXMganVzdCBjYWxscyBiaW5hc2NpaS5hMmJfYmFzZTY0OwogICAgICAgICAjIGl0IHNlZW1zIG92ZXJraWxsIHRvIHVzZSBib3RoIGJhc2U2NCBhbmQgYmluYXNjaWkuCi0gICAgICAgIHJldHVybiBjbHMoYmluYXNjaWkuYTJiX2Jhc2U2NChkYXRhKSkKKyAgICAgICAgcmV0dXJuIGNscyhfZGVjb2RlX2Jhc2U2NChkYXRhKSkKIAogICAgIGRlZiBhc0Jhc2U2NChzZWxmLCBtYXhsaW5lbGVuZ3RoPTc2KToKLSAgICAgICAgcmV0dXJuIF9lbmNvZGVCYXNlNjQoc2VsZi5kYXRhLCBtYXhsaW5lbGVuZ3RoKQorICAgICAgICByZXR1cm4gX2VuY29kZV9iYXNlNjQoc2VsZi5kYXRhLCBtYXhsaW5lbGVuZ3RoKQogCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKQEAgLTM2Miw0MyArMjMzLDExOSBAQAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICIlcyglcykiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCByZXByKHNlbGYuZGF0YSkpCiAKLWNsYXNzIFBsaXN0UGFyc2VyOgorIworIworIyBFbmQgb2YgZGVwcmVjYXRlZCBmdW5jdGlvbmFsaXR5CisjCisjCiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6CisKKyMKKyMgWE1MIHN1cHBvcnQKKyMKKworCisjIFhNTCAnaGVhZGVyJworUExJU1RIRUFERVIgPSBiIiIiXAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorIiIiCisKKworIyBSZWdleCB0byBmaW5kIGFueSBjb250cm9sIGNoYXJzLCBleGNlcHQgZm9yIFx0IFxuIGFuZCBccgorX2NvbnRyb2xDaGFyUGF0ID0gcmUuY29tcGlsZSgKKyAgICByIltceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDBiXHgwY1x4MGVceDBmIgorICAgIHIiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZl0iKQorCitkZWYgX2VuY29kZV9iYXNlNjQocywgbWF4bGluZWxlbmd0aD03Nik6CisgICAgIyBjb3BpZWQgZnJvbSBiYXNlNjQuZW5jb2RlYnl0ZXMoKSwgd2l0aCBhZGRlZCBtYXhsaW5lbGVuZ3RoIGFyZ3VtZW50CisgICAgbWF4Ymluc2l6ZSA9IChtYXhsaW5lbGVuZ3RoLy80KSozCisgICAgcGllY2VzID0gW10KKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIG1heGJpbnNpemUpOgorICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBtYXhiaW5zaXplXQorICAgICAgICBwaWVjZXMuYXBwZW5kKGJpbmFzY2lpLmIyYV9iYXNlNjQoY2h1bmspKQorICAgIHJldHVybiBiJycuam9pbihwaWVjZXMpCisKK2RlZiBfZGVjb2RlX2Jhc2U2NChzKToKKyAgICBpZiBpc2luc3RhbmNlKHMsIHN0cik6CisgICAgICAgIHJldHVybiBiaW5hc2NpaS5hMmJfYmFzZTY0KHMuZW5jb2RlKCJ1dGYtOCIpKQorCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGJpbmFzY2lpLmEyYl9iYXNlNjQocykKKworIyBDb250ZW50cyBzaG91bGQgY29uZm9ybSB0byBhIHN1YnNldCBvZiBJU08gODYwMQorIyAoaW4gcGFydGljdWxhciwgWVlZWSAnLScgTU0gJy0nIEREICdUJyBISCAnOicgTU0gJzonIFNTICdaJy4gIFNtYWxsZXIgdW5pdHMKKyMgbWF5IGJlIG9taXR0ZWQgd2l0aCAjICBhIGxvc3Mgb2YgcHJlY2lzaW9uKQorX2RhdGVQYXJzZXIgPSByZS5jb21waWxlKHIiKD9QPHllYXI+XGRcZFxkXGQpKD86LSg/UDxtb250aD5cZFxkKSg/Oi0oP1A8ZGF5PlxkXGQpKD86VCg/UDxob3VyPlxkXGQpKD86Oig/UDxtaW51dGU+XGRcZCkoPzo6KD9QPHNlY29uZD5cZFxkKSk/KT8pPyk/KT9aIiwgcmUuQVNDSUkpCisKKworZGVmIF9kYXRlX2Zyb21fc3RyaW5nKHMpOgorICAgIG9yZGVyID0gKCd5ZWFyJywgJ21vbnRoJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnKQorICAgIGdkID0gX2RhdGVQYXJzZXIubWF0Y2gocykuZ3JvdXBkaWN0KCkKKyAgICBsc3QgPSBbXQorICAgIGZvciBrZXkgaW4gb3JkZXI6CisgICAgICAgIHZhbCA9IGdkW2tleV0KKyAgICAgICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworICAgICAgICBsc3QuYXBwZW5kKGludCh2YWwpKQorICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZSgqbHN0KQorCisKK2RlZiBfZGF0ZV90b19zdHJpbmcoZCk6CisgICAgcmV0dXJuICclMDRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZFonICUgKAorICAgICAgICBkLnllYXIsIGQubW9udGgsIGQuZGF5LAorICAgICAgICBkLmhvdXIsIGQubWludXRlLCBkLnNlY29uZAorICAgICkKKworZGVmIF9lc2NhcGUodGV4dCk6CisgICAgbSA9IF9jb250cm9sQ2hhclBhdC5zZWFyY2godGV4dCkKKyAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzdHJpbmdzIGNhbid0IGNvbnRhaW5zIGNvbnRyb2wgY2hhcmFjdGVyczsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgYnl0ZXMgaW5zdGVhZCIpCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHJcbiIsICJcbiIpICAgICAgICMgY29udmVydCBET1MgbGluZSBlbmRpbmdzCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHIiLCAiXG4iKSAgICAgICAgICMgY29udmVydCBNYWMgbGluZSBlbmRpbmdzCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiJiIsICImYW1wOyIpICAgICAgICMgZXNjYXBlICcmJworICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIjwiLCAiJmx0OyIpICAgICAgICAjIGVzY2FwZSAnPCcKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI+IiwgIiZndDsiKSAgICAgICAgIyBlc2NhcGUgJz4nCisgICAgcmV0dXJuIHRleHQKKworY2xhc3MgX1BsaXN0UGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfYnVpbHRpbl90eXBlcywgZGljdF90eXBlKToKICAgICAgICAgc2VsZi5zdGFjayA9IFtdCi0gICAgICAgIHNlbGYuY3VycmVudEtleSA9IE5vbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2tleSA9IE5vbmUKICAgICAgICAgc2VsZi5yb290ID0gTm9uZQorICAgICAgICBzZWxmLl91c2VfYnVpbHRpbl90eXBlcyA9IHVzZV9idWlsdGluX3R5cGVzCisgICAgICAgIHNlbGYuX2RpY3RfdHlwZSA9IGRpY3RfdHlwZQogCiAgICAgZGVmIHBhcnNlKHNlbGYsIGZpbGVvYmopOgotICAgICAgICBmcm9tIHhtbC5wYXJzZXJzLmV4cGF0IGltcG9ydCBQYXJzZXJDcmVhdGUKICAgICAgICAgc2VsZi5wYXJzZXIgPSBQYXJzZXJDcmVhdGUoKQotICAgICAgICBzZWxmLnBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5oYW5kbGVCZWdpbkVsZW1lbnQKLSAgICAgICAgc2VsZi5wYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZUVuZEVsZW1lbnQKLSAgICAgICAgc2VsZi5wYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmhhbmRsZURhdGEKKyAgICAgICAgc2VsZi5wYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlX2JlZ2luX2VsZW1lbnQKKyAgICAgICAgc2VsZi5wYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZV9lbmRfZWxlbWVudAorICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuaGFuZGxlX2RhdGEKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2VGaWxlKGZpbGVvYmopCiAgICAgICAgIHJldHVybiBzZWxmLnJvb3QKIAotICAgIGRlZiBoYW5kbGVCZWdpbkVsZW1lbnQoc2VsZiwgZWxlbWVudCwgYXR0cnMpOgorICAgIGRlZiBoYW5kbGVfYmVnaW5fZWxlbWVudChzZWxmLCBlbGVtZW50LCBhdHRycyk6CiAgICAgICAgIHNlbGYuZGF0YSA9IFtdCiAgICAgICAgIGhhbmRsZXIgPSBnZXRhdHRyKHNlbGYsICJiZWdpbl8iICsgZWxlbWVudCwgTm9uZSkKICAgICAgICAgaWYgaGFuZGxlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGhhbmRsZXIoYXR0cnMpCiAKLSAgICBkZWYgaGFuZGxlRW5kRWxlbWVudChzZWxmLCBlbGVtZW50KToKKyAgICBkZWYgaGFuZGxlX2VuZF9lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgICAgICBoYW5kbGVyID0gZ2V0YXR0cihzZWxmLCAiZW5kXyIgKyBlbGVtZW50LCBOb25lKQogICAgICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaGFuZGxlcigpCiAKLSAgICBkZWYgaGFuZGxlRGF0YShzZWxmLCBkYXRhKToKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgIHNlbGYuZGF0YS5hcHBlbmQoZGF0YSkKIAotICAgIGRlZiBhZGRPYmplY3Qoc2VsZiwgdmFsdWUpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRLZXkgaXMgbm90IE5vbmU6CisgICAgZGVmIGFkZF9vYmplY3Qoc2VsZiwgdmFsdWUpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfa2V5IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5zdGFja1stMV0sIHR5cGUoe30pKToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmV4cGVjdGVkIGVsZW1lbnQgYXQgbGluZSAlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuQ3VycmVudExpbmVOdW1iZXIpCi0gICAgICAgICAgICBzZWxmLnN0YWNrWy0xXVtzZWxmLmN1cnJlbnRLZXldID0gdmFsdWUKLSAgICAgICAgICAgIHNlbGYuY3VycmVudEtleSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuc3RhY2tbLTFdW3NlbGYuY3VycmVudF9rZXldID0gdmFsdWUKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9rZXkgPSBOb25lCiAgICAgICAgIGVsaWYgbm90IHNlbGYuc3RhY2s6CiAgICAgICAgICAgICAjIHRoaXMgaXMgdGhlIHJvb3Qgb2JqZWN0CiAgICAgICAgICAgICBzZWxmLnJvb3QgPSB2YWx1ZQpAQCAtNDA4LDcgKzM1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikKICAgICAgICAgICAgIHNlbGYuc3RhY2tbLTFdLmFwcGVuZCh2YWx1ZSkKIAotICAgIGRlZiBnZXREYXRhKHNlbGYpOgorICAgIGRlZiBnZXRfZGF0YShzZWxmKToKICAgICAgICAgZGF0YSA9ICcnLmpvaW4oc2VsZi5kYXRhKQogICAgICAgICBzZWxmLmRhdGEgPSBbXQogICAgICAgICByZXR1cm4gZGF0YQpAQCAtNDE2LDM5ICszNjMsNjYzIEBACiAgICAgIyBlbGVtZW50IGhhbmRsZXJzCiAKICAgICBkZWYgYmVnaW5fZGljdChzZWxmLCBhdHRycyk6Ci0gICAgICAgIGQgPSBfSW50ZXJuYWxEaWN0KCkKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoZCkKKyAgICAgICAgZCA9IHNlbGYuX2RpY3RfdHlwZSgpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChkKQogICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZChkKQorCiAgICAgZGVmIGVuZF9kaWN0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRLZXk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9rZXk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtaXNzaW5nIHZhbHVlIGZvciBrZXkgJyVzJyBhdCBsaW5lICVkIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRLZXksc2VsZi5wYXJzZXIuQ3VycmVudExpbmVOdW1iZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50X2tleSxzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikpCiAgICAgICAgIHNlbGYuc3RhY2sucG9wKCkKIAogICAgIGRlZiBlbmRfa2V5KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRLZXkgb3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5zdGFja1stMV0sIHR5cGUoe30pKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2tleSBvciBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5leHBlY3RlZCBrZXkgYXQgbGluZSAlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikKLSAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gc2VsZi5nZXREYXRhKCkKKyAgICAgICAgc2VsZi5jdXJyZW50X2tleSA9IHNlbGYuZ2V0X2RhdGEoKQogCiAgICAgZGVmIGJlZ2luX2FycmF5KHNlbGYsIGF0dHJzKToKICAgICAgICAgYSA9IFtdCi0gICAgICAgIHNlbGYuYWRkT2JqZWN0KGEpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChhKQogICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZChhKQorCiAgICAgZGVmIGVuZF9hcnJheShzZWxmKToKICAgICAgICAgc2VsZi5zdGFjay5wb3AoKQogCiAgICAgZGVmIGVuZF90cnVlKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChUcnVlKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoVHJ1ZSkKKwogICAgIGRlZiBlbmRfZmFsc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KEZhbHNlKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoRmFsc2UpCisKICAgICBkZWYgZW5kX2ludGVnZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KGludChzZWxmLmdldERhdGEoKSkpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChpbnQoc2VsZi5nZXRfZGF0YSgpKSkKKwogICAgIGRlZiBlbmRfcmVhbChzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoZmxvYXQoc2VsZi5nZXREYXRhKCkpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoZmxvYXQoc2VsZi5nZXRfZGF0YSgpKSkKKwogICAgIGRlZiBlbmRfc3RyaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChzZWxmLmdldERhdGEoKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KHNlbGYuZ2V0X2RhdGEoKSkKKwogICAgIGRlZiBlbmRfZGF0YShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoRGF0YS5mcm9tQmFzZTY0KHNlbGYuZ2V0RGF0YSgpLmVuY29kZSgidXRmLTgiKSkpCisgICAgICAgIGlmIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzOgorICAgICAgICAgICAgc2VsZi5hZGRfb2JqZWN0KF9kZWNvZGVfYmFzZTY0KHNlbGYuZ2V0X2RhdGEoKSkpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYWRkX29iamVjdChEYXRhLmZyb21CYXNlNjQoc2VsZi5nZXRfZGF0YSgpKSkKKwogICAgIGRlZiBlbmRfZGF0ZShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoX2RhdGVGcm9tU3RyaW5nKHNlbGYuZ2V0RGF0YSgpKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KF9kYXRlX2Zyb21fc3RyaW5nKHNlbGYuZ2V0X2RhdGEoKSkpCisKKworY2xhc3MgX0R1bWJYTUxXcml0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudF9sZXZlbD0wLCBpbmRlbnQ9Ilx0Iik6CisgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKyAgICAgICAgc2VsZi5zdGFjayA9IFtdCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCA9IGluZGVudF9sZXZlbAorICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAorCisgICAgZGVmIGJlZ2luX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGVsZW1lbnQpCisgICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiIgJSBlbGVtZW50KQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgKz0gMQorCisgICAgZGVmIGVuZF9lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgorICAgICAgICBhc3NlcnQgc2VsZi5faW5kZW50X2xldmVsID4gMAorICAgICAgICBhc3NlcnQgc2VsZi5zdGFjay5wb3AoKSA9PSBlbGVtZW50CisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCAtPSAxCisgICAgICAgIHNlbGYud3JpdGVsbigiPC8lcz4iICUgZWxlbWVudCkKKworICAgIGRlZiBzaW1wbGVfZWxlbWVudChzZWxmLCBlbGVtZW50LCB2YWx1ZT1Ob25lKToKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWx1ZSA9IF9lc2NhcGUodmFsdWUpCisgICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcz4lczwvJXM+IiAlIChlbGVtZW50LCB2YWx1ZSwgZWxlbWVudCkpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud3JpdGVsbigiPCVzLz4iICUgZWxlbWVudCkKKworICAgIGRlZiB3cml0ZWxuKHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgIyBwbGlzdCBoYXMgZml4ZWQgZW5jb2Rpbmcgb2YgdXRmLTgKKworICAgICAgICAgICAgIyBYWFg6IGlzIHRoaXMgdGVzdCBuZWVkZWQ/CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHN0cik6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoc2VsZi5faW5kZW50X2xldmVsICogc2VsZi5pbmRlbnQpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUobGluZSkKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKGInXG4nKQorCisKK2NsYXNzIF9QbGlzdFdyaXRlcihfRHVtYlhNTFdyaXRlcik6CisgICAgZGVmIF9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwgZmlsZSwgaW5kZW50X2xldmVsPTAsIGluZGVudD1iIlx0Iiwgd3JpdGVIZWFkZXI9MSwKKyAgICAgICAgICAgIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSk6CisKKyAgICAgICAgaWYgd3JpdGVIZWFkZXI6CisgICAgICAgICAgICBmaWxlLndyaXRlKFBMSVNUSEVBREVSKQorICAgICAgICBfRHVtYlhNTFdyaXRlci5fX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRfbGV2ZWwsIGluZGVudCkKKyAgICAgICAgc2VsZi5fc29ydF9rZXlzID0gc29ydF9rZXlzCisgICAgICAgIHNlbGYuX3NraXBrZXlzID0gc2tpcGtleXMKKworICAgIGRlZiB3cml0ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYud3JpdGVsbigiPHBsaXN0IHZlcnNpb249XCIxLjBcIj4iKQorICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICBzZWxmLndyaXRlbG4oIjwvcGxpc3Q+IikKKworICAgIGRlZiB3cml0ZV92YWx1ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJzdHJpbmciLCB2YWx1ZSkKKworICAgICAgICBlbGlmIHZhbHVlIGlzIFRydWU6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJ0cnVlIikKKworICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiZmFsc2UiKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKyAgICAgICAgICAgIGlmIC0xIDw8IDYzIDw9IHZhbHVlIDwgMSA8PCA2NDoKKyAgICAgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJpbnRlZ2VyIiwgIiVkIiAlIHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgicmVhbCIsIHJlcHIodmFsdWUpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2RpY3QodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZGF0YSh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2J5dGVzKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiZGF0ZSIsIF9kYXRlX3RvX3N0cmluZyh2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfYXJyYXkodmFsdWUpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidW5zdXBwb3J0ZWQgdHlwZTogJXMiICUgdHlwZSh2YWx1ZSkpCisKKyAgICBkZWYgd3JpdGVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi53cml0ZV9ieXRlcyhkYXRhLmRhdGEpCisKKyAgICBkZWYgd3JpdGVfYnl0ZXMoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYmVnaW5fZWxlbWVudCgiZGF0YSIpCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCAtPSAxCisgICAgICAgIG1heGxpbmVsZW5ndGggPSBtYXgoCisgICAgICAgICAgICAxNiwKKyAgICAgICAgICAgIDc2IC0gbGVuKHNlbGYuaW5kZW50LnJlcGxhY2UoYiJcdCIsIGIiICIgKiA4KSAqIHNlbGYuX2luZGVudF9sZXZlbCkpCisKKyAgICAgICAgZm9yIGxpbmUgaW4gX2VuY29kZV9iYXNlNjQoZGF0YSwgbWF4bGluZWxlbmd0aCkuc3BsaXQoYiJcbiIpOgorICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlbG4obGluZSkKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsICs9IDEKKyAgICAgICAgc2VsZi5lbmRfZWxlbWVudCgiZGF0YSIpCisKKyAgICBkZWYgd3JpdGVfZGljdChzZWxmLCBkKToKKyAgICAgICAgaWYgZDoKKyAgICAgICAgICAgIHNlbGYuYmVnaW5fZWxlbWVudCgiZGljdCIpCisgICAgICAgICAgICBpZiBzZWxmLl9zb3J0X2tleXM6CisgICAgICAgICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoZC5pdGVtcygpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpdGVtcyA9IGQuaXRlbXMoKQorCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NraXBrZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgia2V5Iiwga2V5KQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUpCisgICAgICAgICAgICBzZWxmLmVuZF9lbGVtZW50KCJkaWN0IikKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiZGljdCIpCisKKyAgICBkZWYgd3JpdGVfYXJyYXkoc2VsZiwgYXJyYXkpOgorICAgICAgICBpZiBhcnJheToKKyAgICAgICAgICAgIHNlbGYuYmVnaW5fZWxlbWVudCgiYXJyYXkiKQorICAgICAgICAgICAgZm9yIHZhbHVlIGluIGFycmF5OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUpCisgICAgICAgICAgICBzZWxmLmVuZF9lbGVtZW50KCJhcnJheSIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImFycmF5IikKKworCitkZWYgX2lzX2ZtdF94bWwoaGVhZGVyKToKKyAgICBwcmVmaXhlcyA9IChiJzw/eG1sJywgYic8cGxpc3QnKQorCisgICAgZm9yIHBmeCBpbiBwcmVmaXhlczoKKyAgICAgICAgaWYgaGVhZGVyLnN0YXJ0c3dpdGgocGZ4KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIEFsc28gY2hlY2sgZm9yIGFsdGVybmF0aXZlIFhNTCBlbmNvZGluZ3MsIHRoaXMgaXMgc2xpZ2h0bHkKKyAgICAjIG92ZXJraWxsIGJlY2F1c2UgdGhlIEFwcGxlIHRvb2xzIChhbmQgcGxpc3RsaWIpIHdpbGwgbm90CisgICAgIyBnZW5lcmF0ZSBmaWxlcyB3aXRoIHRoZXNlIGVuY29kaW5ncy4KKyAgICBmb3IgYm9tLCBlbmNvZGluZyBpbiAoCisgICAgICAgICAgICAgICAgKGNvZGVjcy5CT01fVVRGOCwgInV0Zi04IiksCisgICAgICAgICAgICAgICAgKGNvZGVjcy5CT01fVVRGMTZfQkUsICJ1dGYtMTYtYmUiKSwKKyAgICAgICAgICAgICAgICAoY29kZWNzLkJPTV9VVEYxNl9MRSwgInV0Zi0xNi1sZSIpLAorICAgICAgICAgICAgICAgICMgZXhwYXQgZG9lcyBub3Qgc3VwcG9ydCB1dGYtMzIKKyAgICAgICAgICAgICAgICAjKGNvZGVjcy5CT01fVVRGMzJfQkUsICJ1dGYtMzItYmUiKSwKKyAgICAgICAgICAgICAgICAjKGNvZGVjcy5CT01fVVRGMzJfTEUsICJ1dGYtMzItbGUiKSwKKyAgICAgICAgICAgICk6CisgICAgICAgIGlmIG5vdCBoZWFkZXIuc3RhcnRzd2l0aChib20pOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBmb3Igc3RhcnQgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBwcmVmaXggPSBib20gKyBzdGFydC5kZWNvZGUoJ2FzY2lpJykuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgaWYgaGVhZGVyWzpsZW4ocHJlZml4KV0gPT0gcHJlZml4OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworIworIyBCaW5hcnkgUGxpc3QKKyMKKworCitjbGFzcyBJbnZhbGlkRmlsZUV4Y2VwdGlvbiAoVmFsdWVFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2U9IkludmFsaWQgZmlsZSIpOgorICAgICAgICBWYWx1ZUVycm9yLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpCisKK19CSU5BUllfRk9STUFUID0gezE6ICdCJywgMjogJ0gnLCA0OiAnTCcsIDg6ICdRJ30KKworY2xhc3MgX0JpbmFyeVBsaXN0UGFyc2VyOgorICAgICIiIgorICAgIFJlYWQgb3Igd3JpdGUgYSBiaW5hcnkgcGxpc3QgZmlsZSwgZm9sbG93aW5nIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYmluYXJ5CisgICAgZm9ybWF0LiAgUmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24gaW4gY2FzZSBvZiBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiB0aGUKKyAgICByb290IG9iamVjdC4KKworICAgIHNlZSBhbHNvOiBodHRwOi8vb3BlbnNvdXJjZS5hcHBsZS5jb20vc291cmNlL0NGL0NGLTc0NC4xOC9DRkJpbmFyeVBMaXN0LmMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlX2J1aWx0aW5fdHlwZXMsIGRpY3RfdHlwZSk6CisgICAgICAgIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzID0gdXNlX2J1aWx0aW5fdHlwZXMKKyAgICAgICAgc2VsZi5fZGljdF90eXBlID0gZGljdF90eXBlCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZnApOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFRoZSBiYXNpYyBmaWxlIGZvcm1hdDoKKyAgICAgICAgICAgICMgSEVBREVSCisgICAgICAgICAgICAjIG9iamVjdC4uLgorICAgICAgICAgICAgIyByZWZpZC0+b2Zmc2V0Li4uCisgICAgICAgICAgICAjIFRSQUlMRVIKKyAgICAgICAgICAgIHNlbGYuX2ZwID0gZnAKKyAgICAgICAgICAgIHNlbGYuX2ZwLnNlZWsoLTMyLCBvcy5TRUVLX0VORCkKKyAgICAgICAgICAgIHRyYWlsZXIgPSBzZWxmLl9mcC5yZWFkKDMyKQorICAgICAgICAgICAgaWYgbGVuKHRyYWlsZXIpICE9IDMyOgorICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICBvZmZzZXRfc2l6ZSwgc2VsZi5fcmVmX3NpemUsIG51bV9vYmplY3RzLCB0b3Bfb2JqZWN0LAorICAgICAgICAgICAgICAgIG9mZnNldF90YWJsZV9vZmZzZXQKKyAgICAgICAgICAgICkgPSBzdHJ1Y3QudW5wYWNrKCc+NnhCQlFRUScsIHRyYWlsZXIpCisgICAgICAgICAgICBzZWxmLl9mcC5zZWVrKG9mZnNldF90YWJsZV9vZmZzZXQpCisgICAgICAgICAgICBzZWxmLl9vYmplY3Rfb2Zmc2V0cyA9IHNlbGYuX3JlYWRfaW50cyhudW1fb2JqZWN0cywgb2Zmc2V0X3NpemUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNbdG9wX29iamVjdF0pCisKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJbmRleEVycm9yLCBzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorCisgICAgZGVmIF9nZXRfc2l6ZShzZWxmLCB0b2tlbkwpOgorICAgICAgICAiIiIgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBuZXh0IG9iamVjdC4iIiIKKyAgICAgICAgaWYgdG9rZW5MID09IDB4RjoKKyAgICAgICAgICAgIG0gPSBzZWxmLl9mcC5yZWFkKDEpWzBdICYgMHgzCisgICAgICAgICAgICBzID0gMSA8PCBtCisgICAgICAgICAgICBmID0gJz4nICsgX0JJTkFSWV9GT1JNQVRbc10KKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKGYsIHNlbGYuX2ZwLnJlYWQocykpWzBdCisKKyAgICAgICAgcmV0dXJuIHRva2VuTAorCisgICAgZGVmIF9yZWFkX2ludHMoc2VsZiwgbiwgc2l6ZSk6CisgICAgICAgIGRhdGEgPSBzZWxmLl9mcC5yZWFkKHNpemUgKiBuKQorICAgICAgICBpZiBzaXplIGluIF9CSU5BUllfRk9STUFUOgorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz4nICsgX0JJTkFSWV9GT1JNQVRbc2l6ZV0gKiBuLCBkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKGludC5mcm9tX2J5dGVzKGRhdGFbaTogaSArIHNpemVdLCAnYmlnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBzaXplICogbiwgc2l6ZSkpCisKKyAgICBkZWYgX3JlYWRfcmVmcyhzZWxmLCBuKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfaW50cyhuLCBzZWxmLl9yZWZfc2l6ZSkKKworICAgIGRlZiBfcmVhZF9vYmplY3Qoc2VsZiwgb2Zmc2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIHJlYWQgdGhlIG9iamVjdCBhdCBvZmZzZXQuCisKKyAgICAgICAgTWF5IHJlY3Vyc2l2ZWx5IHJlYWQgc3ViLW9iamVjdHMgKGNvbnRlbnQgb2YgYW4gYXJyYXkvZGljdC9zZXQpCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9mcC5zZWVrKG9mZnNldCkKKyAgICAgICAgdG9rZW4gPSBzZWxmLl9mcC5yZWFkKDEpWzBdCisgICAgICAgIHRva2VuSCwgdG9rZW5MID0gdG9rZW4gJiAweEYwLCB0b2tlbiAmIDB4MEYKKworICAgICAgICBpZiB0b2tlbiA9PSAweDAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBlbGlmIHRva2VuID09IDB4MDg6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRva2VuID09IDB4MDk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgVGhlIHJlZmVyZW5jZWQgc291cmNlIGNvZGUgYWxzbyBtZW50aW9ucyBVUkwgKDB4MGMsIDB4MGQpIGFuZAorICAgICAgICAjIFVVSUQgKDB4MGUpLCBidXQgbmVpdGhlciBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBDb2NvYSBsaWJyYXJpZXMuCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDBmOgorICAgICAgICAgICAgcmV0dXJuIGInJworCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4MTA6ICAjIGludAorICAgICAgICAgICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKHNlbGYuX2ZwLnJlYWQoMSA8PCB0b2tlbkwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaWcnLCBzaWduZWQ9dG9rZW5MID49IDMpCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDIyOiAjIHJlYWwKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+ZicsIHNlbGYuX2ZwLnJlYWQoNCkpWzBdCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDIzOiAjIHJlYWwKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+ZCcsIHNlbGYuX2ZwLnJlYWQoOCkpWzBdCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDMzOiAgIyBkYXRlCisgICAgICAgICAgICBmID0gc3RydWN0LnVucGFjaygnPmQnLCBzZWxmLl9mcC5yZWFkKDgpKVswXQorICAgICAgICAgICAgIyB0aW1lc3RhbXAgMCBvZiBiaW5hcnkgcGxpc3RzIGNvcnJlc3BvbmRzIHRvIDEvMS8yMDAxCisgICAgICAgICAgICAjICh5ZWFyIG9mIE1hYyBPUyBYIDEwLjApLCBpbnN0ZWFkIG9mIDEvMS8xOTcwLgorICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoZiArICgzMSAqIDM2NSArIDgpICogODY0MDApCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHg0MDogICMgZGF0YQorICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9mcC5yZWFkKHMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBEYXRhKHNlbGYuX2ZwLnJlYWQocykpCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHg1MDogICMgYXNjaWkgc3RyaW5nCisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgcmVzdWx0ID0gIHNlbGYuX2ZwLnJlYWQocykuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHg2MDogICMgdW5pY29kZSBzdHJpbmcKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZnAucmVhZChzICogMikuZGVjb2RlKCd1dGYtMTZiZScpCisKKyAgICAgICAgIyB0b2tlbkggPT0gMHg4MCBpcyBkb2N1bWVudGVkIGFzICdVSUQnIGFuZCBhcHBlYXJzIHRvIGJlIHVzZWQgZm9yCisgICAgICAgICMga2V5ZWQtYXJjaGl2aW5nLCBub3QgaW4gcGxpc3RzLgorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4QTA6ICAjIGFycmF5CisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgb2JqX3JlZnMgPSBzZWxmLl9yZWFkX3JlZnMocykKKyAgICAgICAgICAgIHJldHVybiBbc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNbeF0pCisgICAgICAgICAgICAgICAgZm9yIHggaW4gb2JqX3JlZnNdCisKKyAgICAgICAgIyB0b2tlbkggPT0gMHhCMCBpcyBkb2N1bWVudGVkIGFzICdvcmRzZXQnLCBidXQgaXMgbm90IGFjdHVhbGx5CisgICAgICAgICMgaW1wbGVtZW50ZWQgaW4gdGhlIEFwcGxlIHJlZmVyZW5jZSBjb2RlLgorCisgICAgICAgICMgdG9rZW5IID09IDB4QzAgaXMgZG9jdW1lbnRlZCBhcyAnc2V0JywgYnV0IHNldHMgY2Fubm90IGJlIHVzZWQgaW4KKyAgICAgICAgIyBwbGlzdHMuCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHhEMDogICMgZGljdAorICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIGtleV9yZWZzID0gc2VsZi5fcmVhZF9yZWZzKHMpCisgICAgICAgICAgICBvYmpfcmVmcyA9IHNlbGYuX3JlYWRfcmVmcyhzKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZGljdF90eXBlKCkKKyAgICAgICAgICAgIGZvciBrLCBvIGluIHppcChrZXlfcmVmcywgb2JqX3JlZnMpOgorICAgICAgICAgICAgICAgIHJlc3VsdFtzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1trXSkKKyAgICAgICAgICAgICAgICAgICAgXSA9IHNlbGYuX3JlYWRfb2JqZWN0KHNlbGYuX29iamVjdF9vZmZzZXRzW29dKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworZGVmIF9jb3VudF90b19zaXplKGNvdW50KToKKyAgICBpZiBjb3VudCA8IDEgPDwgODoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGVsaWYgY291bnQgPCAxIDw8IDE2OgorICAgICAgICByZXR1cm4gMgorCisgICAgZWxpZiBjb3VudCA8PCAxIDw8IDMyOgorICAgICAgICByZXR1cm4gNAorCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIDgKKworY2xhc3MgX0JpbmFyeVBsaXN0V3JpdGVyIChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcCwgc29ydF9rZXlzLCBza2lwa2V5cyk6CisgICAgICAgIHNlbGYuX2ZwID0gZnAKKyAgICAgICAgc2VsZi5fc29ydF9rZXlzID0gc29ydF9rZXlzCisgICAgICAgIHNlbGYuX3NraXBrZXlzID0gc2tpcGtleXMKKworICAgIGRlZiB3cml0ZShzZWxmLCB2YWx1ZSk6CisKKyAgICAgICAgIyBGbGF0dGVuZWQgb2JqZWN0IGxpc3Q6CisgICAgICAgIHNlbGYuX29iamxpc3QgPSBbXQorCisgICAgICAgICMgTWFwcGluZ3MgZnJvbSBvYmplY3QtPm9iamVjdGlkCisgICAgICAgICMgRmlyc3QgZGljdCBoYXMgKHR5cGUob2JqZWN0KSwgb2JqZWN0KSBhcyB0aGUga2V5LAorICAgICAgICAjIHNlY29uZCBkaWN0IGlzIHVzZWQgd2hlbiBvYmplY3QgaXMgbm90IGhhc2hhYmxlIGFuZAorICAgICAgICAjIGhhcyBpZChvYmplY3QpIGFzIHRoZSBrZXkuCisgICAgICAgIHNlbGYuX29ianRhYmxlID0ge30KKyAgICAgICAgc2VsZi5fb2JqaWR0YWJsZSA9IHt9CisKKyAgICAgICAgIyBDcmVhdGUgbGlzdCBvZiBhbGwgb2JqZWN0cyBpbiB0aGUgcGxpc3QKKyAgICAgICAgc2VsZi5fZmxhdHRlbih2YWx1ZSkKKworICAgICAgICAjIFNpemUgb2Ygb2JqZWN0IHJlZmVyZW5jZXMgaW4gc2VyaWFsaXplZCBjb250YWluZXJzCisgICAgICAgICMgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHBsaXN0LgorICAgICAgICBudW1fb2JqZWN0cyA9IGxlbihzZWxmLl9vYmpsaXN0KQorICAgICAgICBzZWxmLl9vYmplY3Rfb2Zmc2V0cyA9IFswXSpudW1fb2JqZWN0cworICAgICAgICBzZWxmLl9yZWZfc2l6ZSA9IF9jb3VudF90b19zaXplKG51bV9vYmplY3RzKQorCisgICAgICAgIHNlbGYuX3JlZl9mb3JtYXQgPSBfQklOQVJZX0ZPUk1BVFtzZWxmLl9yZWZfc2l6ZV0KKworICAgICAgICAjIFdyaXRlIGZpbGUgaGVhZGVyCisgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInYnBsaXN0MDAnKQorCisgICAgICAgICMgV3JpdGUgb2JqZWN0IGxpc3QKKyAgICAgICAgZm9yIG9iaiBpbiBzZWxmLl9vYmpsaXN0OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfb2JqZWN0KG9iaikKKworICAgICAgICAjIFdyaXRlIHJlZm51bS0+b2JqZWN0IG9mZnNldCB0YWJsZQorICAgICAgICB0b3Bfb2JqZWN0ID0gc2VsZi5fZ2V0cmVmbnVtKHZhbHVlKQorICAgICAgICBvZmZzZXRfdGFibGVfb2Zmc2V0ID0gc2VsZi5fZnAudGVsbCgpCisgICAgICAgIG9mZnNldF9zaXplID0gX2NvdW50X3RvX3NpemUob2Zmc2V0X3RhYmxlX29mZnNldCkKKyAgICAgICAgb2Zmc2V0X2Zvcm1hdCA9ICc+JyArIF9CSU5BUllfRk9STUFUW29mZnNldF9zaXplXSAqIG51bV9vYmplY3RzCisgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKG9mZnNldF9mb3JtYXQsICpzZWxmLl9vYmplY3Rfb2Zmc2V0cykpCisKKyAgICAgICAgIyBXcml0ZSB0cmFpbGVyCisgICAgICAgIHNvcnRfdmVyc2lvbiA9IDAKKyAgICAgICAgdHJhaWxlciA9ICgKKyAgICAgICAgICAgIHNvcnRfdmVyc2lvbiwgb2Zmc2V0X3NpemUsIHNlbGYuX3JlZl9zaXplLCBudW1fb2JqZWN0cywKKyAgICAgICAgICAgIHRvcF9vYmplY3QsIG9mZnNldF90YWJsZV9vZmZzZXQKKyAgICAgICAgKQorICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPjV4QkJCUVFRJywgKnRyYWlsZXIpKQorCisgICAgZGVmIF9mbGF0dGVuKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIyBGaXJzdCBjaGVjayBpZiB0aGUgb2JqZWN0IGlzIGluIHRoZSBvYmplY3QgdGFibGUsIG5vdCB1c2VkIGZvcgorICAgICAgICAjIGNvbnRhaW5lcnMgdG8gZW5zdXJlIHRoYXQgdHdvIHN1YmNvbnRhaW5lcnMgd2l0aCB0aGUgc2FtZSBjb250ZW50cworICAgICAgICAjIHdpbGwgYmUgc2VyaWFsaXplZCBhcyBkaXN0aW5jdCB2YWx1ZXMuCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsICgKKyAgICAgICAgICAgICAgICBzdHIsIGludCwgZmxvYXQsIGRhdGV0aW1lLmRhdGV0aW1lLCBieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBpZiAodHlwZSh2YWx1ZSksIHZhbHVlKSBpbiBzZWxmLl9vYmp0YWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgaWYgKHR5cGUodmFsdWUuZGF0YSksIHZhbHVlLmRhdGEpIGluIHNlbGYuX29ianRhYmxlOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQWRkIHRvIG9iamVjdHJlZmVyZW5jZSBtYXAKKyAgICAgICAgcmVmbnVtID0gbGVuKHNlbGYuX29iamxpc3QpCisgICAgICAgIHNlbGYuX29iamxpc3QuYXBwZW5kKHZhbHVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZS5kYXRhKSwgdmFsdWUuZGF0YSldID0gcmVmbnVtCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX29ianRhYmxlWyh0eXBlKHZhbHVlKSwgdmFsdWUpXSA9IHJlZm51bQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fb2JqaWR0YWJsZVtpZCh2YWx1ZSldID0gcmVmbnVtCisKKyAgICAgICAgIyBBbmQgZmluYWxseSByZWN1cnNlIGludG8gY29udGFpbmVycworICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIGtleXMgPSBbXQorICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgIGl0ZW1zID0gdmFsdWUuaXRlbXMoKQorICAgICAgICAgICAgaWYgc2VsZi5fc29ydF9rZXlzOgorICAgICAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGl0ZW1zKQorCisgICAgICAgICAgICBmb3IgaywgdiBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9za2lwa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGspCisgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2KQorCisgICAgICAgICAgICBmb3IgbyBpbiBpdGVydG9vbHMuY2hhaW4oa2V5cywgdmFsdWVzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9mbGF0dGVuKG8pCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIGZvciBvIGluIHZhbHVlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZsYXR0ZW4obykKKworICAgIGRlZiBfZ2V0cmVmbnVtKHNlbGYsIHZhbHVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29ianRhYmxlWyh0eXBlKHZhbHVlLmRhdGEpLCB2YWx1ZS5kYXRhKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29ianRhYmxlWyh0eXBlKHZhbHVlKSwgdmFsdWUpXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29iamlkdGFibGVbaWQodmFsdWUpXQorCisgICAgZGVmIF93cml0ZV9zaXplKHNlbGYsIHRva2VuLCBzaXplKToKKyAgICAgICAgaWYgc2l6ZSA8IDE1OgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CJywgdG9rZW4gfCBzaXplKSkKKworICAgICAgICBlbGlmIHNpemUgPCAxIDw8IDg6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCQicsIHRva2VuIHwgMHhGLCAweDEwLCBzaXplKSkKKworICAgICAgICBlbGlmIHNpemUgPCAxIDw8IDE2OgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQkgnLCB0b2tlbiB8IDB4RiwgMHgxMSwgc2l6ZSkpCisKKyAgICAgICAgZWxpZiBzaXplIDwgMSA8PCAzMjoKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJMJywgdG9rZW4gfCAweEYsIDB4MTIsIHNpemUpKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCUScsIHRva2VuIHwgMHhGLCAweDEzLCBzaXplKSkKKworICAgIGRlZiBfd3JpdGVfb2JqZWN0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgcmVmID0gc2VsZi5fZ2V0cmVmbnVtKHZhbHVlKQorICAgICAgICBzZWxmLl9vYmplY3Rfb2Zmc2V0c1tyZWZdID0gc2VsZi5fZnAudGVsbCgpCisgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShiJ1x4MDAnKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShiJ1x4MDgnKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInXHgwOScpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgaWYgdmFsdWUgPCAwOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CcScsIDB4MTMsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKHZhbHVlKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDg6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQicsIDB4MTAsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDE2OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkgnLCAweDExLCB2YWx1ZSkpCisgICAgICAgICAgICBlbGlmIHZhbHVlIDwgMSA8PCAzMjoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJMJywgMHgxMiwgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgNjM6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CUScsIDB4MTMsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDY0OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInXHgxNCcgKyB2YWx1ZS50b19ieXRlcygxNiwgJ2JpZycsIHNpZ25lZD1UcnVlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcih2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QmQnLCAweDIzLCB2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkYXRldGltZS5kYXRldGltZSk6CisgICAgICAgICAgICBmID0gKHZhbHVlIC0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMSwgMSwgMSkpLnRvdGFsX3NlY29uZHMoKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CZCcsIDB4MzMsIGYpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NDAsIGxlbih2YWx1ZS5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHZhbHVlLmRhdGEpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDQwLCBsZW4odmFsdWUpKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHQgPSB2YWx1ZS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NTAsIGxlbih2YWx1ZSkpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgIHQgPSB2YWx1ZS5lbmNvZGUoJ3V0Zi0xNmJlJykKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NjAsIGxlbih2YWx1ZSkpCisKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHQpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHJlZnMgPSBbc2VsZi5fZ2V0cmVmbnVtKG8pIGZvciBvIGluIHZhbHVlXQorICAgICAgICAgICAgcyA9IGxlbihyZWZzKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweEEwLCBzKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICpyZWZzKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAga2V5UmVmcywgdmFsUmVmcyA9IFtdLCBbXQorCisgICAgICAgICAgICBpZiBzZWxmLl9zb3J0X2tleXM6CisgICAgICAgICAgICAgICAgcm9vdEl0ZW1zID0gc29ydGVkKHZhbHVlLml0ZW1zKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJvb3RJdGVtcyA9IHZhbHVlLml0ZW1zKCkKKworICAgICAgICAgICAgZm9yIGssIHYgaW4gcm9vdEl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGssIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NraXBrZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAga2V5UmVmcy5hcHBlbmQoc2VsZi5fZ2V0cmVmbnVtKGspKQorICAgICAgICAgICAgICAgIHZhbFJlZnMuYXBwZW5kKHNlbGYuX2dldHJlZm51bSh2KSkKKworICAgICAgICAgICAgcyA9IGxlbihrZXlSZWZzKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweEQwLCBzKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICprZXlSZWZzKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+JyArIHNlbGYuX3JlZl9mb3JtYXQgKiBzLCAqdmFsUmVmcykpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcih2YWx1ZSkKKworCitkZWYgX2lzX2ZtdF9iaW5hcnkoaGVhZGVyKToKKyAgICByZXR1cm4gaGVhZGVyWzo4XSA9PSBiJ2JwbGlzdDAwJworCisKKyMKKyMgR2VuZXJpYyBiaXRzCisjCisKK19GT1JNQVRTPXsKKyAgICBGTVRfWE1MOiBkaWN0KAorICAgICAgICBkZXRlY3Q9X2lzX2ZtdF94bWwsCisgICAgICAgIHBhcnNlcj1fUGxpc3RQYXJzZXIsCisgICAgICAgIHdyaXRlcj1fUGxpc3RXcml0ZXIsCisgICAgKSwKKyAgICBGTVRfQklOQVJZOiBkaWN0KAorICAgICAgICBkZXRlY3Q9X2lzX2ZtdF9iaW5hcnksCisgICAgICAgIHBhcnNlcj1fQmluYXJ5UGxpc3RQYXJzZXIsCisgICAgICAgIHdyaXRlcj1fQmluYXJ5UGxpc3RXcml0ZXIsCisgICAgKQorfQorCisKK2RlZiBsb2FkKGZwLCAqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpOgorICAgICIiIlJlYWQgYSAucGxpc3QgZmlsZS4gJ2ZwJyBzaG91bGQgYmUgKHJlYWRhYmxlKSBmaWxlIG9iamVjdC4KKyAgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCisgICAgIiIiCisgICAgaWYgZm10IGlzIE5vbmU6CisgICAgICAgIGhlYWRlciA9IGZwLnJlYWQoMzIpCisgICAgICAgIGZwLnNlZWsoMCkKKyAgICAgICAgZm9yIGluZm8gaW4gX0ZPUk1BVFMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBpbmZvWydkZXRlY3QnXShoZWFkZXIpOgorICAgICAgICAgICAgICAgIFAgPSBpbmZvWydwYXJzZXInXQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworICAgIGVsc2U6CisgICAgICAgIFAgPSBfRk9STUFUU1tmbXRdWydwYXJzZXInXQorCisgICAgcCA9IFAodXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMsIGRpY3RfdHlwZT1kaWN0X3R5cGUpCisgICAgcmV0dXJuIHAucGFyc2UoZnApCisKKworZGVmIGxvYWRzKHZhbHVlLCAqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpOgorICAgICIiIlJlYWQgYSAucGxpc3QgZmlsZSBmcm9tIGEgYnl0ZXMgb2JqZWN0LgorICAgIFJldHVybiB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkgaXMgYSBkaWN0aW9uYXJ5KS4KKyAgICAiIiIKKyAgICBmcCA9IEJ5dGVzSU8odmFsdWUpCisgICAgcmV0dXJuIGxvYWQoCisgICAgICAgIGZwLCBmbXQ9Zm10LCB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcywgZGljdF90eXBlPWRpY3RfdHlwZSkKKworCitkZWYgZHVtcCh2YWx1ZSwgZnAsICosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpOgorICAgICIiIldyaXRlICd2YWx1ZScgdG8gYSAucGxpc3QgZmlsZS4gJ2ZwJyBzaG91bGQgYmUgYSAod3JpdGFibGUpCisgICAgZmlsZSBvYmplY3QuCisgICAgIiIiCisgICAgaWYgZm10IG5vdCBpbiBfRk9STUFUUzoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgZm9ybWF0OiAlciIlKGZtdCwpKQorCisgICAgd3JpdGVyID0gX0ZPUk1BVFNbZm10XVsid3JpdGVyIl0oZnAsIHNvcnRfa2V5cz1zb3J0X2tleXMsIHNraXBrZXlzPXNraXBrZXlzKQorICAgIHdyaXRlci53cml0ZSh2YWx1ZSkKKworCitkZWYgZHVtcHModmFsdWUsICosIGZtdD1GTVRfWE1MLCBza2lwa2V5cz1GYWxzZSwgc29ydF9rZXlzPVRydWUpOgorICAgICIiIlJldHVybiBhIGJ5dGVzIG9iamVjdCB3aXRoIHRoZSBjb250ZW50cyBmb3IgYSAucGxpc3QgZmlsZS4KKyAgICAiIiIKKyAgICBmcCA9IEJ5dGVzSU8oKQorICAgIGR1bXAodmFsdWUsIGZwLCBmbXQ9Zm10LCBza2lwa2V5cz1za2lwa2V5cywgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQpkaWZmIC0tZ2l0IGEvTGliL3BvcGxpYi5weSBiL0xpYi9wb3BsaWIucHkKaW5kZXggNDNmODMwNS4uMjNhMzUxNyAxMDA2NDQKLS0tIGEvTGliL3BvcGxpYi5weQorKysgYi9MaWIvcG9wbGliLnB5CkBAIC0xMyw3ICsxMywxNSBAQAogCiAjIEltcG9ydHMKIAotaW1wb3J0IHJlLCBzb2NrZXQKK2ltcG9ydCBlcnJubworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CisKK3RyeToKKyAgICBpbXBvcnQgc3NsCisgICAgSEFWRV9TU0wgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgSEFWRV9TU0wgPSBGYWxzZQogCiBfX2FsbF9fID0gWyJQT1AzIiwiZXJyb3JfcHJvdG8iXQogCkBAIC02MSw2ICs2OSw4IEBACiAgICAgICAgICAgICBBUE9QIG5hbWUgZGlnZXN0ICAgICAgICBhcG9wKG5hbWUsIGRpZ2VzdCkKICAgICAgICAgICAgIFRPUCBtc2cgbiAgICAgICAgICAgICAgIHRvcChtc2csIG4pCiAgICAgICAgICAgICBVSURMIFttc2ddICAgICAgICAgICAgICB1aWRsKG1zZyA9IE5vbmUpCisgICAgICAgICAgICBDQVBBICAgICAgICAgICAgICAgICAgICBjYXBhKCkKKyAgICAgICAgICAgIFNUTFMgICAgICAgICAgICAgICAgICAgIHN0bHMoKQogCiAgICAgUmFpc2VzIG9uZSBleGNlcHRpb246ICdlcnJvcl9wcm90bycuCiAKQEAgLTg3LDYgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgogICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fdGxzX2VzdGFibGlzaGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5fY3JlYXRlX3NvY2tldCh0aW1lb3V0KQogICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKICAgICAgICAgc2VsZi5fZGVidWdnaW5nID0gMApAQCAtMjY4LDcgKzI3OSwxNCBAQAogICAgICAgICBpZiBzZWxmLmZpbGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQogICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAjIFRoZSBzZXJ2ZXIgbWlnaHQgYWxyZWFkeSBoYXZlIGNsb3NlZCB0aGUgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jayA9IE5vbmUKIAogICAgICNfX2RlbF9fID0gcXVpdApAQCAtMzI0LDIxICszNDIsNzIgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zaG9ydGNtZCgnVUlETCAlcycgJSB3aGljaCkKICAgICAgICAgcmV0dXJuIHNlbGYuX2xvbmdjbWQoJ1VJREwnKQogCi10cnk6Ci0gICAgaW1wb3J0IHNzbAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLWVsc2U6CisKKyAgICBkZWYgY2FwYShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHNlcnZlciBjYXBhYmlsaXRpZXMgKFJGQyAyNDQ5KSBhcyBhIGRpY3Rpb25hcnkKKyAgICAgICAgPj4+IGM9cG9wbGliLlBPUDMoJ2xvY2FsaG9zdCcpCisgICAgICAgID4+PiBjLmNhcGEoKQorICAgICAgICB7J0lNUExFTUVOVEFUSU9OJzogWydDeXJ1cycsICdQT1AzJywgJ3NlcnZlcicsICd2Mi4yLjEyJ10sCisgICAgICAgICAnVE9QJzogW10sICdMT0dJTi1ERUxBWSc6IFsnMCddLCAnQVVUSC1SRVNQLUNPREUnOiBbXSwKKyAgICAgICAgICdFWFBJUkUnOiBbJ05FVkVSJ10sICdVU0VSJzogW10sICdTVExTJzogW10sICdQSVBFTElOSU5HJzogW10sCisgICAgICAgICAnVUlETCc6IFtdLCAnUkVTUC1DT0RFUyc6IFtdfQorICAgICAgICA+Pj4KKworICAgICAgICBSZWFsbHksIGFjY29yZGluZyB0byBSRkMgMjQ0OSwgdGhlIGN5cnVzIGZvbGtzIHNob3VsZCBhdm9pZAorICAgICAgICBoYXZpbmcgdGhlIGltcGxlbWVudGF0aW9uIHNwbGl0IGludG8gbXVsdGlwbGUgYXJndW1lbnRzLi4uCisgICAgICAgICIiIgorICAgICAgICBkZWYgX3BhcnNlY2FwKGxpbmUpOgorICAgICAgICAgICAgbHN0ID0gbGluZS5kZWNvZGUoJ2FzY2lpJykuc3BsaXQoKQorICAgICAgICAgICAgcmV0dXJuIGxzdFswXSwgbHN0WzE6XQorCisgICAgICAgIGNhcHMgPSB7fQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwID0gc2VsZi5fbG9uZ2NtZCgnQ0FQQScpCisgICAgICAgICAgICByYXdjYXBzID0gcmVzcFsxXQorICAgICAgICAgICAgZm9yIGNhcGxpbmUgaW4gcmF3Y2FwczoKKyAgICAgICAgICAgICAgICBjYXBubSwgY2FwYXJncyA9IF9wYXJzZWNhcChjYXBsaW5lKQorICAgICAgICAgICAgICAgIGNhcHNbY2Fwbm1dID0gY2FwYXJncworICAgICAgICBleGNlcHQgZXJyb3JfcHJvdG8gYXMgX2VycjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIENBUEEgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQorICAgICAgICByZXR1cm4gY2FwcworCisKKyAgICBkZWYgc3RscyhzZWxmLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJTdGFydCBhIFRMUyBzZXNzaW9uIG9uIHRoZSBhY3RpdmUgY29ubmVjdGlvbiBhcyBzcGVjaWZpZWQgaW4gUkZDIDI1OTUuCisKKyAgICAgICAgICAgICAgICBjb250ZXh0IC0gYSBzc2wuU1NMQ29udGV4dAorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IEhBVkVfU1NMOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgVExTIHN1cHBvcnQgbWlzc2luZycpCisgICAgICAgIGlmIHNlbGYuX3Rsc19lc3RhYmxpc2hlZDoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzZXNzaW9uIGFscmVhZHkgZXN0YWJsaXNoZWQnKQorICAgICAgICBjYXBzID0gc2VsZi5jYXBhKCkKKyAgICAgICAgaWYgbm90ICdTVExTJyBpbiBjYXBzOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgU1RMUyBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCisgICAgICAgIHJlc3AgPSBzZWxmLl9zaG9ydGNtZCgnU1RMUycpCisgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCisgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuIHJlc3AKKworCitpZiBIQVZFX1NTTDoKIAogICAgIGNsYXNzIFBPUDNfU1NMKFBPUDMpOgogICAgICAgICAiIiJQT1AzIGNsaWVudCBjbGFzcyBvdmVyIFNTTCBjb25uZWN0aW9uCiAKLSAgICAgICAgSW5zdGFudGlhdGUgd2l0aDogUE9QM19TU0woaG9zdG5hbWUsIHBvcnQ9OTk1LCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUpCisgICAgICAgIEluc3RhbnRpYXRlIHdpdGg6IFBPUDNfU1NMKGhvc3RuYW1lLCBwb3J0PTk5NSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PU5vbmUpCiAKICAgICAgICAgICAgICAgIGhvc3RuYW1lIC0gdGhlIGhvc3RuYW1lIG9mIHRoZSBwb3AzIG92ZXIgc3NsIHNlcnZlcgogICAgICAgICAgICAgICAgcG9ydCAtIHBvcnQgbnVtYmVyCiAgICAgICAgICAgICAgICBrZXlmaWxlIC0gUEVNIGZvcm1hdHRlZCBmaWxlIHRoYXQgY29udGFpbnMgeW91ciBwcml2YXRlIGtleQogICAgICAgICAgICAgICAgY2VydGZpbGUgLSBQRU0gZm9ybWF0dGVkIGNlcnRpZmljYXRlIGNoYWluIGZpbGUKKyAgICAgICAgICAgICAgIGNvbnRleHQgLSBhIHNzbC5TU0xDb250ZXh0CiAKICAgICAgICAgU2VlIHRoZSBtZXRob2RzIG9mIHRoZSBwYXJlbnQgY2xhc3MgUE9QMyBmb3IgbW9yZSBkb2N1bWVudGF0aW9uLgogICAgICAgICAiIiIKQEAgLTM1MywxNyArNDIyLDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQogICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAogICAgICAgICAgICAgUE9QMy5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCB0aW1lb3V0KQogCiAgICAgICAgIGRlZiBfY3JlYXRlX3NvY2tldChzZWxmLCB0aW1lb3V0KToKICAgICAgICAgICAgIHNvY2sgPSBQT1AzLl9jcmVhdGVfc29ja2V0KHNlbGYsIHRpbWVvdXQpCi0gICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzb2NrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzb2NrID0gc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgICAgIHNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgIHJldHVybiBzb2NrCiAKKyAgICAgICAgZGVmIHN0bHMoc2VsZiwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAgICAgIiIiVGhlIG1ldGhvZCB1bmNvbmRpdGlvbmFsbHkgcmFpc2VzIGFuIGV4Y2VwdGlvbiBzaW5jZSB0aGUKKyAgICAgICAgICAgIFNUTFMgY29tbWFuZCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIG9uIGFuIGFscmVhZHkgZXN0YWJsaXNoZWQKKyAgICAgICAgICAgIFNTTC9UTFMgc2Vzc2lvbi4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgVExTIHNlc3Npb24gYWxyZWFkeSBlc3RhYmxpc2hlZCcpCisKICAgICBfX2FsbF9fLmFwcGVuZCgiUE9QM19TU0wiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Bvc2l4cGF0aC5weSBiL0xpYi9wb3NpeHBhdGgucHkKaW5kZXggZmQ2M2Y5Ny4uMGFhNTNmZSAxMDA2NDQKLS0tIGEvTGliL3Bvc2l4cGF0aC5weQorKysgYi9MaWIvcG9zaXhwYXRoLnB5CkBAIC00OCw3ICs0OCw2IEBACiAKIGRlZiBub3JtY2FzZShzKToKICAgICAiIiJOb3JtYWxpemUgY2FzZSBvZiBwYXRobmFtZS4gIEhhcyBubyBlZmZlY3QgdW5kZXIgUG9zaXgiIiIKLSAgICAjIFRPRE86IG9uIE1hYyBPUyBYLCB0aGlzIHNob3VsZCByZWFsbHkgcmV0dXJuIHMubG93ZXIoKS4KICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCAoYnl0ZXMsIHN0cikpOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vcm1jYXNlKCkgYXJndW1lbnQgbXVzdCBiZSBzdHIgb3IgYnl0ZXMsICIKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJ3t9JyIuZm9ybWF0KHMuX19jbGFzc19fLl9fbmFtZV9fKSkKQEAgLTg0LDEyICs4MywxMCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYXRoICs9IHNlcCArIGIKICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICB2YWxpZF90eXBlcyA9IGFsbChpc2luc3RhbmNlKHMsIChzdHIsIGJ5dGVzLCBieXRlYXJyYXkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiAoYSwgKSArIHApCi0gICAgICAgIGlmIHZhbGlkX3R5cGVzOgorICAgICAgICBpZiBhbGwoaXNpbnN0YW5jZShzLCAoc3RyLCBieXRlcykpIGZvciBzIGluIChhLCkgKyBwKToKICAgICAgICAgICAgICMgTXVzdCBoYXZlIGEgbWl4dHVyZSBvZiB0ZXh0IGFuZCBiaW5hcnkgZGF0YQogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4ndCBtaXggc3RyaW5ncyBhbmQgYnl0ZXMgaW4gcGF0aCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBvbmVudHMuIikgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBvbmVudHMiKSBmcm9tIE5vbmUKICAgICAgICAgcmFpc2UKICAgICByZXR1cm4gcGF0aAogCkBAIC0xNjIsNyArMTU5LDcgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICBleGNlcHQgKE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0xOSyhzdC5zdF9tb2RlKQogCkBAIC0xNzIsNTYgKzE2OSwzNSBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBUcnVlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKICAgICB0cnk6CiAgICAgICAgIG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCiAKLSMgQXJlIHR3byBmaWxlbmFtZXMgcmVhbGx5IHBvaW50aW5nIHRvIHRoZSBzYW1lIGZpbGU/Ci0KLWRlZiBzYW1lZmlsZShmMSwgZjIpOgotICAgICIiIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIiIgotICAgIHMxID0gb3Muc3RhdChmMSkKLSAgICBzMiA9IG9zLnN0YXQoZjIpCi0gICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKLQotCi0jIEFyZSB0d28gb3BlbiBmaWxlcyByZWFsbHkgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZmlsZT8KLSMgKE5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IhKQotCi1kZWYgc2FtZW9wZW5maWxlKGZwMSwgZnAyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIG9wZW4gZmlsZSBvYmplY3RzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCi0gICAgczEgPSBvcy5mc3RhdChmcDEpCi0gICAgczIgPSBvcy5mc3RhdChmcDIpCi0gICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKLQotCi0jIEFyZSB0d28gc3RhdCBidWZmZXJzIChvYnRhaW5lZCBmcm9tIHN0YXQsIGZzdGF0IG9yIGxzdGF0KQotIyBkZXNjcmliaW5nIHRoZSBzYW1lIGZpbGU/Ci0KLWRlZiBzYW1lc3RhdChzMSwgczIpOgotICAgICIiIlRlc3Qgd2hldGhlciB0d28gc3RhdCBidWZmZXJzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCi0gICAgcmV0dXJuIHMxLnN0X2lubyA9PSBzMi5zdF9pbm8gYW5kIFwKLSAgICAgICAgICAgczEuc3RfZGV2ID09IHMyLnN0X2RldgotCi0KICMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/CiAjIChEb2VzIHRoaXMgd29yayBmb3IgYWxsIFVOSVhlcz8gIElzIGl0IGV2ZW4gZ3VhcmFudGVlZCB0byB3b3JrIGJ5IFBvc2l4PykKIAogZGVmIGlzbW91bnQocGF0aCk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IiIiCi0gICAgaWYgaXNsaW5rKHBhdGgpOgotICAgICAgICAjIEEgc3ltbGluayBjYW4gbmV2ZXIgYmUgYSBtb3VudCBwb2ludAotICAgICAgICByZXR1cm4gRmFsc2UKICAgICB0cnk6CiAgICAgICAgIHMxID0gb3MubHN0YXQocGF0aCkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6Ci0gICAgICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsIGInLi4nKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCAnLi4nKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAjIEl0IGRvZXNuJ3QgZXhpc3QgLS0gc28gbm90IGEgbW91bnQgcG9pbnQuIDotKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICAjIEEgc3ltbGluayBjYW4gbmV2ZXIgYmUgYSBtb3VudCBwb2ludAorICAgICAgICBpZiBzdGF0LlNfSVNMTksoczEuc3RfbW9kZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgorICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsIGInLi4nKQorICAgIGVsc2U6CisgICAgICAgIHBhcmVudCA9IGpvaW4ocGF0aCwgJy4uJykKKyAgICB0cnk6CiAgICAgICAgIHMyID0gb3MubHN0YXQocGFyZW50KQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlICMgSXQgZG9lc24ndCBleGlzdCAtLSBzbyBub3QgYSBtb3VudCBwb2ludCA6LSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICBkZXYxID0gczEuc3RfZGV2CiAgICAgZGV2MiA9IHMyLnN0X2RldgogICAgIGlmIGRldjEgIT0gZGV2MjoKZGlmZiAtLWdpdCBhL0xpYi9wcHJpbnQucHkgYi9MaWIvcHByaW50LnB5CmluZGV4IDIyYmUwYjRiLi4zYmU5YzM2IDEwMDY0NAotLS0gYS9MaWIvcHByaW50LnB5CisrKyBiL0xpYi9wcHJpbnQucHkKQEAgLTM0LDYgKzM0LDcgQEAKIAogIiIiCiAKK2ltcG9ydCByZQogaW1wb3J0IHN5cyBhcyBfc3lzCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCBhcyBfT3JkZXJlZERpY3QKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPIGFzIF9TdHJpbmdJTwpAQCAtNDEsMjIgKzQyLDE5IEBACiBfX2FsbF9fID0gWyJwcHJpbnQiLCJwZm9ybWF0IiwiaXNyZWFkYWJsZSIsImlzcmVjdXJzaXZlIiwic2FmZXJlcHIiLAogICAgICAgICAgICAiUHJldHR5UHJpbnRlciJdCiAKLSMgY2FjaGUgdGhlc2UgZm9yIGZhc3RlciBhY2Nlc3M6Ci1fY29tbWFqb2luID0gIiwgIi5qb2luCi1faWQgPSBpZAotX2xlbiA9IGxlbgotX3R5cGUgPSB0eXBlCiAKLQotZGVmIHBwcmludChvYmplY3QsIHN0cmVhbT1Ob25lLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpOgorZGVmIHBwcmludChvYmplY3QsIHN0cmVhbT1Ob25lLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosCisgICAgICAgICAgIGNvbXBhY3Q9RmFsc2UpOgogICAgICIiIlByZXR0eS1wcmludCBhIFB5dGhvbiBvYmplY3QgdG8gYSBzdHJlYW0gW2RlZmF1bHQgaXMgc3lzLnN0ZG91dF0uIiIiCiAgICAgcHJpbnRlciA9IFByZXR0eVByaW50ZXIoCi0gICAgICAgIHN0cmVhbT1zdHJlYW0sIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCkKKyAgICAgICAgc3RyZWFtPXN0cmVhbSwgaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoLAorICAgICAgICBjb21wYWN0PWNvbXBhY3QpCiAgICAgcHJpbnRlci5wcHJpbnQob2JqZWN0KQogCi1kZWYgcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSk6CitkZWYgcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSk6CiAgICAgIiIiRm9ybWF0IGEgUHl0aG9uIG9iamVjdCBpbnRvIGEgcHJldHR5LXByaW50ZWQgcmVwcmVzZW50YXRpb24uIiIiCi0gICAgcmV0dXJuIFByZXR0eVByaW50ZXIoaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoKS5wZm9ybWF0KG9iamVjdCkKKyAgICByZXR1cm4gUHJldHR5UHJpbnRlcihpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZGVwdGg9ZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1jb21wYWN0KS5wZm9ybWF0KG9iamVjdCkKIAogZGVmIHNhZmVyZXByKG9iamVjdCk6CiAgICAgIiIiVmVyc2lvbiBvZiByZXByKCkgd2hpY2ggY2FuIGhhbmRsZSByZWN1cnNpdmUgZGF0YSBzdHJ1Y3R1cmVzLiIiIgpAQCAtMTAxLDcgKzk5LDggQEAKICAgICByZXR1cm4gX3NhZmVfa2V5KHRbMF0pLCBfc2FmZV9rZXkodFsxXSkKIAogY2xhc3MgUHJldHR5UHJpbnRlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCBzdHJlYW09Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosCisgICAgICAgICAgICAgICAgIGNvbXBhY3Q9RmFsc2UpOgogICAgICAgICAiIiJIYW5kbGUgcHJldHR5IHByaW50aW5nIG9wZXJhdGlvbnMgb250byBhIHN0cmVhbSB1c2luZyBhIHNldCBvZgogICAgICAgICBjb25maWd1cmVkIHBhcmFtZXRlcnMuCiAKQEAgLTExOCw2ICsxMTcsOSBAQAogICAgICAgICAgICAgVGhlIGRlc2lyZWQgb3V0cHV0IHN0cmVhbS4gIElmIG9taXR0ZWQgKG9yIGZhbHNlKSwgdGhlIHN0YW5kYXJkCiAgICAgICAgICAgICBvdXRwdXQgc3RyZWFtIGF2YWlsYWJsZSBhdCBjb25zdHJ1Y3Rpb24gd2lsbCBiZSB1c2VkLgogCisgICAgICAgIGNvbXBhY3QKKyAgICAgICAgICAgIElmIHRydWUsIHNldmVyYWwgaXRlbXMgd2lsbCBiZSBjb21iaW5lZCBpbiBvbmUgbGluZS4KKwogICAgICAgICAiIiIKICAgICAgICAgaW5kZW50ID0gaW50KGluZGVudCkKICAgICAgICAgd2lkdGggPSBpbnQod2lkdGgpCkBAIC0xMzEsNiArMTMzLDcgQEAKICAgICAgICAgICAgIHNlbGYuX3N0cmVhbSA9IHN0cmVhbQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fc3RyZWFtID0gX3N5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fY29tcGFjdCA9IGJvb2woY29tcGFjdCkKIAogICAgIGRlZiBwcHJpbnQoc2VsZiwgb2JqZWN0KToKICAgICAgICAgc2VsZi5fZm9ybWF0KG9iamVjdCwgc2VsZi5fc3RyZWFtLCAwLCAwLCB7fSwgMCkKQEAgLTE1MCwyOCArMTUzLDI1IEBACiAKICAgICBkZWYgX2Zvcm1hdChzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKICAgICAgICAgbGV2ZWwgPSBsZXZlbCArIDEKLSAgICAgICAgb2JqaWQgPSBfaWQob2JqZWN0KQorICAgICAgICBvYmppZCA9IGlkKG9iamVjdCkKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShfcmVjdXJzaW9uKG9iamVjdCkpCiAgICAgICAgICAgICBzZWxmLl9yZWN1cnNpdmUgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9yZWFkYWJsZSA9IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihvYmplY3QsIGNvbnRleHQsIGxldmVsIC0gMSkKLSAgICAgICAgdHlwID0gX3R5cGUob2JqZWN0KQotICAgICAgICBzZXBMaW5lcyA9IF9sZW4ocmVwKSA+IChzZWxmLl93aWR0aCAtIDEgLSBpbmRlbnQgLSBhbGxvd2FuY2UpCisgICAgICAgIHR5cCA9IHR5cGUob2JqZWN0KQorICAgICAgICBtYXhfd2lkdGggPSBzZWxmLl93aWR0aCAtIDEgLSBpbmRlbnQgLSBhbGxvd2FuY2UKKyAgICAgICAgc2VwTGluZXMgPSBsZW4ocmVwKSA+IG1heF93aWR0aAogICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQogCi0gICAgICAgIGlmIHNlbGYuX2RlcHRoIGFuZCBsZXZlbCA+IHNlbGYuX2RlcHRoOgotICAgICAgICAgICAgd3JpdGUocmVwKQotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgaWYgc2VwTGluZXM6CiAgICAgICAgICAgICByID0gZ2V0YXR0cih0eXAsICJfX3JlcHJfXyIsIE5vbmUpCiAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgZGljdCk6CiAgICAgICAgICAgICAgICAgd3JpdGUoJ3snKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgPiAxOgogICAgICAgICAgICAgICAgICAgICB3cml0ZSgoc2VsZi5faW5kZW50X3Blcl9sZXZlbCAtIDEpICogJyAnKQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IF9sZW4ob2JqZWN0KQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxlbihvYmplY3QpCiAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoOgogICAgICAgICAgICAgICAgICAgICBjb250ZXh0W29iamlkXSA9IDEKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbApAQCAtMTgzLDEzICsxODMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihrZXksIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCc6ICcpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgX2xlbihyZXApICsgMiwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBlbnQgaW4gaXRlbXNbMTpdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLFxuJXMlczogJyAlICgnICcqaW5kZW50LCByZXApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgX2xlbihyZXApICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIGxlbihyZXApICsgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgLSBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCiAgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBzZXQpIGFuZCByIGlzIHNldC5fX3JlcHJfXykgb3IKICAgICAgICAgICAgICAgICAoaXNzdWJjbGFzcyh0eXAsIGZyb3plbnNldCkgYW5kIHIgaXMgZnJvemVuc2V0Ll9fcmVwcl9fKQogICAgICAgICAgICAgICAgKToKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBfbGVuKG9iamVjdCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBsaXN0KToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ1snKQogICAgICAgICAgICAgICAgICAgICBlbmRjaGFyID0gJ10nCkBAIC0yMjUsMjMgKzIyNSw3MSBAQAogICAgICAgICAgICAgICAgICAgICB3cml0ZSgoc2VsZi5faW5kZW50X3Blcl9sZXZlbCAtIDEpICogJyAnKQogICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KG9iamVjdFswXSwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnQgaW4gb2JqZWN0WzE6XToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLFxuJyArICcgJyppbmRlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXRfaXRlbXMob2JqZWN0LCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIGxlbmd0aCA9PSAxOgogICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLCcpCiAgICAgICAgICAgICAgICAgd3JpdGUoZW5kY2hhcikKICAgICAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIHN0cikgYW5kIGxlbihvYmplY3QpID4gMCBhbmQgciBpcyBzdHIuX19yZXByX186CisgICAgICAgICAgICAgICAgZGVmIF9zdHJfcGFydHMocyk6CisgICAgICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHN0cmluZyBsaXRlcmFscyBjb21wcmlzaW5nIHRoZSByZXByKCkKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGdpdmVuIHN0cmluZyB1c2luZyBsaXRlcmFsIGNvbmNhdGVuYXRpb24uCisgICAgICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IHMuc3BsaXRsaW5lcyhUcnVlKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwID0gcmVwcihsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHJlcCkgPD0gbWF4X3dpZHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlcAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEEgbGlzdCBvZiBhbHRlcm5hdGluZyAobm9uLXNwYWNlLCBzcGFjZSkgc3RyaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcmUuc3BsaXQocicoXHMrKScsIGxpbmUpICsgWycnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAnJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihwYXJ0cyksIDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydHNbaV0gKyBwYXJ0c1tpKzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGN1cnJlbnQgKyBwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXByKGNhbmRpZGF0ZSkpID4gbWF4X3dpZHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXByKGN1cnJlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlcHIoY3VycmVudCkKKyAgICAgICAgICAgICAgICBmb3IgaSwgcmVwIGluIGVudW1lcmF0ZShfc3RyX3BhcnRzKG9iamVjdCkpOgorICAgICAgICAgICAgICAgICAgICBpZiBpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdcbicgKyAnICcqaW5kZW50KQorICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHdyaXRlKHJlcCkKIAorICAgIGRlZiBfZm9ybWF0X2l0ZW1zKHNlbGYsIGl0ZW1zLCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CisgICAgICAgIHdyaXRlID0gc3RyZWFtLndyaXRlCisgICAgICAgIGRlbGltbmwgPSAnLFxuJyArICcgJyAqIGluZGVudAorICAgICAgICBkZWxpbSA9ICcnCisgICAgICAgIHdpZHRoID0gbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSBpbmRlbnQgLSBhbGxvd2FuY2UgKyAyCisgICAgICAgIGZvciBlbnQgaW4gaXRlbXM6CisgICAgICAgICAgICBpZiBzZWxmLl9jb21wYWN0OgorICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoZW50LCBjb250ZXh0LCBsZXZlbCkKKyAgICAgICAgICAgICAgICB3ID0gbGVuKHJlcCkgKyAyCisgICAgICAgICAgICAgICAgaWYgd2lkdGggPCB3OgorICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1heF93aWR0aAorICAgICAgICAgICAgICAgICAgICBpZiBkZWxpbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGltID0gZGVsaW1ubAorICAgICAgICAgICAgICAgIGlmIHdpZHRoID49IHc6CisgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHcKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoZGVsaW0pCisgICAgICAgICAgICAgICAgICAgIGRlbGltID0gJywgJworICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3cml0ZShkZWxpbSkKKyAgICAgICAgICAgIGRlbGltID0gZGVsaW1ubAorICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpCisKICAgICBkZWYgX3JlcHIoc2VsZiwgb2JqZWN0LCBjb250ZXh0LCBsZXZlbCk6CiAgICAgICAgIHJlcHIsIHJlYWRhYmxlLCByZWN1cnNpdmUgPSBzZWxmLmZvcm1hdChvYmplY3QsIGNvbnRleHQuY29weSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVwdGgsIGxldmVsKQpAQCAtMjYyLDcgKzMxMCw3IEBACiAjIFJldHVybiB0cmlwbGUgKHJlcHJfc3RyaW5nLCBpc3JlYWRhYmxlLCBpc3JlY3Vyc2l2ZSkuCiAKIGRlZiBfc2FmZV9yZXByKG9iamVjdCwgY29udGV4dCwgbWF4bGV2ZWxzLCBsZXZlbCk6Ci0gICAgdHlwID0gX3R5cGUob2JqZWN0KQorICAgIHR5cCA9IHR5cGUob2JqZWN0KQogICAgIGlmIHR5cCBpcyBzdHI6CiAgICAgICAgIGlmICdsb2NhbGUnIG5vdCBpbiBfc3lzLm1vZHVsZXM6CiAgICAgICAgICAgICByZXR1cm4gcmVwcihvYmplY3QpLCBUcnVlLCBGYWxzZQpAQCAtMjg2LDcgKzMzNCw3IEBACiAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpIGFuZCByIGlzIGRpY3QuX19yZXByX186CiAgICAgICAgIGlmIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICByZXR1cm4gInt9IiwgVHJ1ZSwgRmFsc2UKLSAgICAgICAgb2JqaWQgPSBfaWQob2JqZWN0KQorICAgICAgICBvYmppZCA9IGlkKG9iamVjdCkKICAgICAgICAgaWYgbWF4bGV2ZWxzIGFuZCBsZXZlbCA+PSBtYXhsZXZlbHM6CiAgICAgICAgICAgICByZXR1cm4gInsuLi59IiwgRmFsc2UsIG9iamlkIGluIGNvbnRleHQKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKQEAgLTMwNyw3ICszNTUsNyBAQAogICAgICAgICAgICAgaWYga3JlY3VyIG9yIHZyZWN1cjoKICAgICAgICAgICAgICAgICByZWN1cnNpdmUgPSBUcnVlCiAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQotICAgICAgICByZXR1cm4gInslc30iICUgX2NvbW1ham9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQorICAgICAgICByZXR1cm4gInslc30iICUgIiwgIi5qb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCiAKICAgICBpZiAoaXNzdWJjbGFzcyh0eXAsIGxpc3QpIGFuZCByIGlzIGxpc3QuX19yZXByX18pIG9yIFwKICAgICAgICAoaXNzdWJjbGFzcyh0eXAsIHR1cGxlKSBhbmQgciBpcyB0dXBsZS5fX3JlcHJfXyk6CkBAIC0zMTUsMTMgKzM2MywxMyBAQAogICAgICAgICAgICAgaWYgbm90IG9iamVjdDoKICAgICAgICAgICAgICAgICByZXR1cm4gIltdIiwgVHJ1ZSwgRmFsc2UKICAgICAgICAgICAgIGZvcm1hdCA9ICJbJXNdIgotICAgICAgICBlbGlmIF9sZW4ob2JqZWN0KSA9PSAxOgorICAgICAgICBlbGlmIGxlbihvYmplY3QpID09IDE6CiAgICAgICAgICAgICBmb3JtYXQgPSAiKCVzLCkiCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBub3Qgb2JqZWN0OgogICAgICAgICAgICAgICAgIHJldHVybiAiKCkiLCBUcnVlLCBGYWxzZQogICAgICAgICAgICAgZm9ybWF0ID0gIiglcykiCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG1heGxldmVscyBhbmQgbGV2ZWwgPj0gbWF4bGV2ZWxzOgogICAgICAgICAgICAgcmV0dXJuIGZvcm1hdCAlICIuLi4iLCBGYWxzZSwgb2JqaWQgaW4gY29udGV4dAogICAgICAgICBpZiBvYmppZCBpbiBjb250ZXh0OgpAQCAtMzQwLDcgKzM4OCw3IEBACiAgICAgICAgICAgICBpZiBvcmVjdXI6CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KLSAgICAgICAgcmV0dXJuIGZvcm1hdCAlIF9jb21tYWpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKKyAgICAgICAgcmV0dXJuIGZvcm1hdCAlICIsICIuam9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQogCiAgICAgcmVwID0gcmVwcihvYmplY3QpCiAgICAgcmV0dXJuIHJlcCwgKHJlcCBhbmQgbm90IHJlcC5zdGFydHN3aXRoKCc8JykpLCBGYWxzZQpAQCAtMzQ4LDcgKzM5Niw3IEBACiAKIGRlZiBfcmVjdXJzaW9uKG9iamVjdCk6CiAgICAgcmV0dXJuICgiPFJlY3Vyc2lvbiBvbiAlcyB3aXRoIGlkPSVzPiIKLSAgICAgICAgICAgICUgKF90eXBlKG9iamVjdCkuX19uYW1lX18sIF9pZChvYmplY3QpKSkKKyAgICAgICAgICAgICUgKHR5cGUob2JqZWN0KS5fX25hbWVfXywgaWQob2JqZWN0KSkpCiAKIAogZGVmIF9wZXJmY2hlY2sob2JqZWN0PU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL3Byb2ZpbGUucHkgYi9MaWIvcHJvZmlsZS5weQppbmRleCA3NDNlNzdkLi41ZDBlOTY4IDEwMDc1NQotLS0gYS9MaWIvcHJvZmlsZS5weQorKysgYi9MaWIvcHJvZmlsZS5weQpAQCAtNDAsNiArNDAsNDAgQEAKICMgICAgICAgcmV0dXJuIGlfY291bnQKICNpdGltZXMgPSBpbnRlZ2VyX3RpbWVyICMgcmVwbGFjZSB3aXRoIEMgY29kZWQgdGltZXIgcmV0dXJuaW5nIGludGVnZXJzCiAKK2NsYXNzIF9VdGlsczoKKyAgICAiIiJTdXBwb3J0IGNsYXNzIGZvciB1dGlsaXR5IGZ1bmN0aW9ucyB3aGljaCBhcmUgc2hhcmVkIGJ5CisgICAgcHJvZmlsZS5weSBhbmQgY1Byb2ZpbGUucHkgbW9kdWxlcy4KKyAgICBOb3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9maWxlcik6CisgICAgICAgIHNlbGYucHJvZmlsZXIgPSBwcm9maWxlcgorCisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KToKKyAgICAgICAgcHJvZiA9IHNlbGYucHJvZmlsZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9mLnJ1bihzdGF0ZW1lbnQpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc2hvdyhwcm9mLCBmaWxlbmFtZSwgc29ydCkKKworICAgIGRlZiBydW5jdHgoc2VsZiwgc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lLCBzb3J0KToKKyAgICAgICAgcHJvZiA9IHNlbGYucHJvZmlsZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9mLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscykKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zaG93KHByb2YsIGZpbGVuYW1lLCBzb3J0KQorCisgICAgZGVmIF9zaG93KHNlbGYsIHByb2YsIGZpbGVuYW1lLCBzb3J0KToKKyAgICAgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm9mLnByaW50X3N0YXRzKHNvcnQpCisKKwogIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAjIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyBmb3IgdGhlIHByb2ZpbGVyIGNsYXNzCiAjIE5vdGUgdGhhdCBhbiBpbnN0YW5jZSBvZiBQcm9maWxlKCkgaXMgKm5vdCogbmVlZGVkIHRvIGNhbGwgdGhlbS4KQEAgLTU2LDE1ICs5MCw3IEBACiAgICAgc3RhbmRhcmQgbmFtZSBzdHJpbmcgKGZpbGUvbGluZS9mdW5jdGlvbi1uYW1lKSB0aGF0IGlzIHByZXNlbnRlZCBpbgogICAgIGVhY2ggbGluZS4KICAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgdHJ5OgotICAgICAgICBwcm9mID0gcHJvZi5ydW4oc3RhdGVtZW50KQotICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICBwYXNzCi0gICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gcHJvZi5wcmludF9zdGF0cyhzb3J0KQorICAgIHJldHVybiBfVXRpbHMoUHJvZmlsZSkucnVuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvcnQpCiAKIGRlZiBydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lPU5vbmUsIHNvcnQ9LTEpOgogICAgICIiIlJ1biBzdGF0ZW1lbnQgdW5kZXIgcHJvZmlsZXIsIHN1cHBseWluZyB5b3VyIG93biBnbG9iYWxzIGFuZCBsb2NhbHMsCkBAIC03MiwxNiArOTgsOCBAQAogCiAgICAgc3RhdGVtZW50IGFuZCBmaWxlbmFtZSBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyBwcm9maWxlLnJ1bgogICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICB0cnk6Ci0gICAgICAgIHByb2YgPSBwcm9mLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscykKLSAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgcGFzcworICAgIHJldHVybiBfVXRpbHMoUHJvZmlsZSkucnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZSwgc29ydCkKIAotICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKIAogY2xhc3MgUHJvZmlsZToKICAgICAiIiJQcm9maWxlciBjbGFzcy4KQEAgLTM3MywxMCArMzkxLDkgQEAKICAgICAgICAgICAgICAgICAgIHByaW50X3N0YXRzKCkKIAogICAgIGRlZiBkdW1wX3N0YXRzKHNlbGYsIGZpbGUpOgotICAgICAgICBmID0gb3BlbihmaWxlLCAnd2InKQotICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0cygpCi0gICAgICAgIG1hcnNoYWwuZHVtcChzZWxmLnN0YXRzLCBmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0cygpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKIAogICAgIGRlZiBjcmVhdGVfc3RhdHMoc2VsZik6CiAgICAgICAgIHNlbGYuc2ltdWxhdGVfY21kX2NvbXBsZXRlKCkKZGlmZiAtLWdpdCBhL0xpYi9wc3RhdHMucHkgYi9MaWIvcHN0YXRzLnB5CmluZGV4IDZhNzc2MDUuLmUxZWMzNTUgMTAwNjQ0Ci0tLSBhL0xpYi9wc3RhdHMucHkKKysrIGIvTGliL3BzdGF0cy5weQpAQCAtOTMsOSArOTMsOCBAQAogICAgICAgICAgICAgc2VsZi5zdGF0cyA9IHt9CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGFyZywgc3RyKToKLSAgICAgICAgICAgIGYgPSBvcGVuKGFyZywgJ3JiJykKLSAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBtYXJzaGFsLmxvYWQoZikKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFyZywgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRzID0gbWFyc2hhbC5sb2FkKGYpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmlsZV9zdGF0cyA9IG9zLnN0YXQoYXJnKQogICAgICAgICAgICAgICAgIGFyZyA9IHRpbWUuY3RpbWUoZmlsZV9zdGF0cy5zdF9tdGltZSkgKyAiICAgICIgKyBhcmcKQEAgLTE0OSwxMSArMTQ4LDggQEAKIAogICAgIGRlZiBkdW1wX3N0YXRzKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiV3JpdGUgdGhlIHByb2ZpbGUgZGF0YSB0byBhIGZpbGUgd2Uga25vdyBob3cgdG8gbG9hZCBiYWNrLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3diJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CiAgICAgICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgIyBsaXN0IHRoZSB0dXBsZSBpbmRpY2VzIGFuZCBkaXJlY3Rpb25zIGZvciBzb3J0aW5nLAogICAgICMgYWxvbmcgd2l0aCBzb21lIHByaW50YWJsZSBkZXNjcmlwdGlvbgpAQCAtNjEyLDcgKzYwOCw3IEBACiAgICAgICAgICAgICBpZiBsaW5lOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IFN0YXRzKGxpbmUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZXJyLmFyZ3NbMV0sIGZpbGU9c2VsZi5zdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgpkaWZmIC0tZ2l0IGEvTGliL3B0eS5weSBiL0xpYi9wdHkucHkKaW5kZXggM2NjZjYxOS4uZTg0MWYxMiAxMDA2NDQKLS0tIGEvTGliL3B0eS5weQorKysgYi9MaWIvcHR5LnB5CkBAIC00NywyNyArNDcsMTYgQEAKICAgICByZXR1cm4gX29wZW5fdGVybWluYWwoKQogCiBkZWYgX29wZW5fdGVybWluYWwoKToKLSAgICAiIiJPcGVuIHB0eSBtYXN0ZXIgYW5kIHJldHVybiAobWFzdGVyX2ZkLCB0dHlfbmFtZSkuCi0gICAgU0dJIGFuZCBnZW5lcmljIEJTRCB2ZXJzaW9uLCBmb3Igd2hlbiBvcGVucHR5KCkgZmFpbHMuIiIiCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgc2dpCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdHR5X25hbWUsIG1hc3Rlcl9mZCA9IHNnaS5fZ2V0cHR5KG9zLk9fUkRXUiwgMG82NjYsIDApCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yKG1zZykKLSAgICAgICAgcmV0dXJuIG1hc3Rlcl9mZCwgdHR5X25hbWUKKyAgICAiIiJPcGVuIHB0eSBtYXN0ZXIgYW5kIHJldHVybiAobWFzdGVyX2ZkLCB0dHlfbmFtZSkuIiIiCiAgICAgZm9yIHggaW4gJ3BxcnN0dXZ3eHl6UFFSU1QnOgogICAgICAgICBmb3IgeSBpbiAnMDEyMzQ1Njc4OWFiY2RlZic6CiAgICAgICAgICAgICBwdHlfbmFtZSA9ICcvZGV2L3B0eScgKyB4ICsgeQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkID0gb3Mub3BlbihwdHlfbmFtZSwgb3MuT19SRFdSKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJldHVybiAoZmQsICcvZGV2L3R0eScgKyB4ICsgeSkKLSAgICByYWlzZSBvcy5lcnJvcignb3V0IG9mIHB0eSBkZXZpY2VzJykKKyAgICByYWlzZSBPU0Vycm9yKCdvdXQgb2YgcHR5IGRldmljZXMnKQogCiBkZWYgc2xhdmVfb3Blbih0dHlfbmFtZSk6CiAgICAgIiIic2xhdmVfb3Blbih0dHlfbmFtZSkgLT4gc2xhdmVfZmQKQEAgLTgzLDcgKzcyLDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlvY3RsKHJlc3VsdCwgSV9QVVNILCAicHRlbSIpCiAgICAgICAgIGlvY3RsKHJlc3VsdCwgSV9QVVNILCAibGR0ZXJtIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHJldHVybiByZXN1bHQKIApAQCAtMTczLDggKzE2Miw5IEBACiAgICAgICAgIHJlc3RvcmUgPSAwCiAgICAgdHJ5OgogICAgICAgICBfY29weShtYXN0ZXJfZmQsIG1hc3Rlcl9yZWFkLCBzdGRpbl9yZWFkKQotICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIHJlc3RvcmU6CiAgICAgICAgICAgICB0dHkudGNzZXRhdHRyKFNURElOX0ZJTEVOTywgdHR5LlRDU0FGTFVTSCwgbW9kZSkKIAogICAgIG9zLmNsb3NlKG1hc3Rlcl9mZCkKKyAgICByZXR1cm4gb3Mud2FpdHBpZChwaWQsIDApWzFdCmRpZmYgLS1naXQgYS9MaWIvcHlfY29tcGlsZS5weSBiL0xpYi9weV9jb21waWxlLnB5CmluZGV4IDYyZDY5YWQuLjEyNzdiOTMgMTAwNjQ0Ci0tLSBhL0xpYi9weV9jb21waWxlLnB5CisrKyBiL0xpYi9weV9jb21waWxlLnB5CkBAIC0zLDE3ICszLDE0IEBACiBUaGlzIG1vZHVsZSBoYXMgaW50aW1hdGUga25vd2xlZGdlIG9mIHRoZSBmb3JtYXQgb2YgLnB5YyBmaWxlcy4KICIiIgogCi1pbXBvcnQgYnVpbHRpbnMKLWltcG9ydCBlcnJubwotaW1wb3J0IGltcAotaW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAoraW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwotaW1wb3J0IHRva2VuaXplCiBpbXBvcnQgdHJhY2ViYWNrCiAKLU1BR0lDID0gaW1wLmdldF9tYWdpYygpCi0KIF9fYWxsX18gPSBbImNvbXBpbGUiLCAibWFpbiIsICJQeUNvbXBpbGVFcnJvciJdCiAKIApAQCAtNjUsMTMgKzYyLDYgQEAKICAgICAgICAgcmV0dXJuIHNlbGYubXNnCiAKIAotZGVmIHdyX2xvbmcoZiwgeCk6Ci0gICAgIiIiSW50ZXJuYWw7IHdyaXRlIGEgMzItYml0IGludCB0byBhIGZpbGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlci4iIiIKLSAgICBmLndyaXRlKGJ5dGVzKFt4ICAgICAgICAgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICh4ID4+IDgpICAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgKHggPj4gMTYpICYgMHhmZiwKLSAgICAgICAgICAgICAgICAgICAoeCA+PiAyNCkgJiAweGZmXSkpCi0KIGRlZiBjb21waWxlKGZpbGUsIGNmaWxlPU5vbmUsIGRmaWxlPU5vbmUsIGRvcmFpc2U9RmFsc2UsIG9wdGltaXplPS0xKToKICAgICAiIiJCeXRlLWNvbXBpbGUgb25lIFB5dGhvbiBzb3VyY2UgZmlsZSB0byBQeXRob24gYnl0ZWNvZGUuCiAKQEAgLTEwNywxOCArOTcsMzEgQEAKICAgICBTZWUgY29tcGlsZWFsbC5weSBmb3IgYSBzY3JpcHQvbW9kdWxlIHRoYXQgdXNlcyB0aGlzIG1vZHVsZSB0bwogICAgIGJ5dGUtY29tcGlsZSBhbGwgaW5zdGFsbGVkIGZpbGVzIChvciBhbGwgZmlsZXMgaW4gc2VsZWN0ZWQKICAgICBkaXJlY3RvcmllcykuCisKKyAgICBEbyBub3RlIHRoYXQgRmlsZUV4aXN0c0Vycm9yIGlzIHJhaXNlZCBpZiBjZmlsZSBlbmRzIHVwIHBvaW50aW5nIGF0IGEKKyAgICBub24tcmVndWxhciBmaWxlIG9yIHN5bWxpbmsuIEJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHVzZXMgYSBmaWxlIHJlbmFtaW5nLAorICAgIHRoZSByZXN1bHRpbmcgZmlsZSB3b3VsZCBiZSByZWd1bGFyIGFuZCB0aHVzIG5vdCB0aGUgc2FtZSB0eXBlIG9mIGZpbGUgYXMKKyAgICBpdCB3YXMgcHJldmlvdXNseS4KICAgICAiIiIKLSAgICB3aXRoIHRva2VuaXplLm9wZW4oZmlsZSkgYXMgZjoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3QgPSBvcy5mc3RhdChmLmZpbGVubygpKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZSkKLSAgICAgICAgdGltZXN0YW1wID0gaW50KHN0LnN0X210aW1lKQotICAgICAgICBzaXplID0gc3Quc3Rfc2l6ZSAmIDB4RkZGRkZGRkYKLSAgICAgICAgY29kZXN0cmluZyA9IGYucmVhZCgpCisgICAgaWYgY2ZpbGUgaXMgTm9uZToKKyAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKKyAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQorICAgIGlmIG9zLnBhdGguaXNsaW5rKGNmaWxlKToKKyAgICAgICAgbXNnID0gKCd7fSBpcyBhIHN5bWxpbmsgYW5kIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGEgcmVndWxhciBmaWxlIGlmICcKKyAgICAgICAgICAgICAgICdpbXBvcnQgd3JpdGVzIGEgYnl0ZS1jb21waWxlZCBmaWxlIHRvIGl0JykKKyAgICAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKG1zZy5mb3JtYXQoY2ZpbGUpKQorICAgIGVsaWYgb3MucGF0aC5leGlzdHMoY2ZpbGUpIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUoY2ZpbGUpOgorICAgICAgICBtc2cgPSAoJ3t9IGlzIGEgbm9uLXJlZ3VsYXIgZmlsZSBhbmQgd2lsbCBiZSBjaGFuZ2VkIGludG8gYSByZWd1bGFyICcKKyAgICAgICAgICAgICAgICdvbmUgaWYgaW1wb3J0IHdyaXRlcyBhIGJ5dGUtY29tcGlsZWQgZmlsZSB0byBpdCcpCisgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcihtc2cuZm9ybWF0KGNmaWxlKSkKKyAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJzxweV9jb21waWxlPicsIGZpbGUpCisgICAgc291cmNlX2J5dGVzID0gbG9hZGVyLmdldF9kYXRhKGZpbGUpCiAgICAgdHJ5OgotICAgICAgICBjb2Rlb2JqZWN0ID0gYnVpbHRpbnMuY29tcGlsZShjb2Rlc3RyaW5nLCBkZmlsZSBvciBmaWxlLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplPW9wdGltaXplKQorICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKHNvdXJjZV9ieXRlcywgZGZpbGUgb3IgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW1pemU9b3B0aW1pemUpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgIHB5X2V4YyA9IFB5Q29tcGlsZUVycm9yKGVyci5fX2NsYXNzX18sIGVyciwgZGZpbGUgb3IgZmlsZSkKICAgICAgICAgaWYgZG9yYWlzZToKQEAgLTEyNiwyOCArMTI5LDIwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHB5X2V4Yy5tc2cgKyAnXG4nKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgaWYgY2ZpbGUgaXMgTm9uZToKLSAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGUpCiAgICAgdHJ5OgogICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGNmaWxlKQogICAgICAgICBpZiBkaXJuYW1lOgogICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKLSAgICAgICAgaWYgZXJyb3IuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgcmFpc2UKLSAgICB3aXRoIG9wZW4oY2ZpbGUsICd3YicpIGFzIGZjOgotICAgICAgICBmYy53cml0ZShiJ1wwXDBcMFwwJykKLSAgICAgICAgd3JfbG9uZyhmYywgdGltZXN0YW1wKQotICAgICAgICB3cl9sb25nKGZjLCBzaXplKQotICAgICAgICBtYXJzaGFsLmR1bXAoY29kZW9iamVjdCwgZmMpCi0gICAgICAgIGZjLmZsdXNoKCkKLSAgICAgICAgZmMuc2VlaygwLCAwKQotICAgICAgICBmYy53cml0ZShNQUdJQykKKyAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICBwYXNzCisgICAgc291cmNlX3N0YXRzID0gbG9hZGVyLnBhdGhfc3RhdHMoZmlsZSkKKyAgICBieXRlY29kZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9jb2RlX3RvX2J5dGVjb2RlKAorICAgICAgICAgICAgY29kZSwgc291cmNlX3N0YXRzWydtdGltZSddLCBzb3VyY2Vfc3RhdHNbJ3NpemUnXSkKKyAgICBtb2RlID0gaW1wb3J0bGliLl9ib290c3RyYXAuX2NhbGNfbW9kZShmaWxlKQorICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl93cml0ZV9hdG9taWMoY2ZpbGUsIGJ5dGVjb2RlLCBtb2RlKQogICAgIHJldHVybiBjZmlsZQogCisKIGRlZiBtYWluKGFyZ3M9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KIApAQCAtMTczLDcgKzE2OCw3IEBACiAgICAgICAgICAgICBleGNlcHQgUHlDb21waWxlRXJyb3IgYXMgZXJyb3I6CiAgICAgICAgICAgICAgICAgcnYgPSAxCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXNcbiIgJSBlcnJvci5tc2cpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgogICAgICAgICAgICAgICAgIHJ2ID0gMQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IpCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9weWNsYnIucHkgYi9MaWIvcHljbGJyLnB5CmluZGV4IDllYzA1ZWUuLmRkNThhZGEgMTAwNjQ0Ci0tLSBhL0xpYi9weWNsYnIucHkKKysrIGIvTGliL3B5Y2xici5weQpAQCAtNDIsNyArNDIsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHRva2VuaXplCiBmcm9tIHRva2VuIGltcG9ydCBOQU1FLCBERURFTlQsIE9QCiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCkBAIC0xNDAsMTMgKzE0MCwxNCBAQAogICAgICAgICBzZWFyY2hfcGF0aCA9IHBhdGgKICAgICBlbHNlOgogICAgICAgICBzZWFyY2hfcGF0aCA9IHBhdGggKyBzeXMucGF0aAotICAgIGxvYWRlciA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihmdWxsbW9kdWxlLCBzZWFyY2hfcGF0aCkKLSAgICBmbmFtZSA9IGxvYWRlci5nZXRfZmlsZW5hbWUoZnVsbG1vZHVsZSkKKyAgICAjIFhYWCBUaGlzIHdpbGwgY2hhbmdlIG9uY2UgaXNzdWUxOTk0NCBsYW5kcy4KKyAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuX2ZpbmRfc3BlY19mcm9tX3BhdGgoZnVsbG1vZHVsZSwgc2VhcmNoX3BhdGgpCisgICAgZm5hbWUgPSBzcGVjLmxvYWRlci5nZXRfZmlsZW5hbWUoZnVsbG1vZHVsZSkKICAgICBfbW9kdWxlc1tmdWxsbW9kdWxlXSA9IGRpY3QKLSAgICBpZiBsb2FkZXIuaXNfcGFja2FnZShmdWxsbW9kdWxlKToKKyAgICBpZiBzcGVjLmxvYWRlci5pc19wYWNrYWdlKGZ1bGxtb2R1bGUpOgogICAgICAgICBkaWN0WydfX3BhdGhfXyddID0gW29zLnBhdGguZGlybmFtZShmbmFtZSldCiAgICAgdHJ5OgotICAgICAgICBzb3VyY2UgPSBsb2FkZXIuZ2V0X3NvdXJjZShmdWxsbW9kdWxlKQorICAgICAgICBzb3VyY2UgPSBzcGVjLmxvYWRlci5nZXRfc291cmNlKGZ1bGxtb2R1bGUpCiAgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIGRpY3QKICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBJbXBvcnRFcnJvcik6CmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggYzlkODQzNi4uNTM5MzQyNiAxMDA3NTUKLS0tIGEvTGliL3B5ZG9jLnB5CisrKyBiL0xpYi9weWRvYy5weQpAQCAtMSw4ICsxLDkgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIkdlbmVyYXRlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIEhUTUwgb3IgdGV4dCBmb3IgaW50ZXJhY3RpdmUgdXNlLgogCi1JbiB0aGUgUHl0aG9uIGludGVycHJldGVyLCBkbyAiZnJvbSBweWRvYyBpbXBvcnQgaGVscCIgdG8gcHJvdmlkZQotaGVscC4gIENhbGxpbmcgaGVscCh0aGluZykgb24gYSBQeXRob24gb2JqZWN0IGRvY3VtZW50cyB0aGUgb2JqZWN0LgorQXQgdGhlIFB5dGhvbiBpbnRlcmFjdGl2ZSBwcm9tcHQsIGNhbGxpbmcgaGVscCh0aGluZykgb24gYSBQeXRob24gb2JqZWN0Citkb2N1bWVudHMgdGhlIG9iamVjdCwgYW5kIGNhbGxpbmcgaGVscCgpIHN0YXJ0cyB1cCBhbiBpbnRlcmFjdGl2ZQoraGVscCBzZXNzaW9uLgogCiBPciwgYXQgdGhlIHNoZWxsIGNvbW1hbmQgbGluZSBvdXRzaWRlIG9mIFB5dGhvbjoKIApAQCAtNDQsMTYgKzQ1LDE2IEBACiAiIiIKIAogIyBLbm93biBidWdzIHRoYXQgY2FuJ3QgYmUgZml4ZWQgaGVyZToKLSMgICAtIGltcC5sb2FkX21vZHVsZSgpIGNhbm5vdCBiZSBwcmV2ZW50ZWQgZnJvbSBjbG9iYmVyaW5nIGV4aXN0aW5nCi0jICAgICBsb2FkZWQgbW9kdWxlcywgc28gY2FsbGluZyBzeW5vcHNpcygpIG9uIGEgYmluYXJ5IG1vZHVsZSBmaWxlCi0jICAgICBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBhbnkgZXhpc3RpbmcgbW9kdWxlIHdpdGggdGhlIHNhbWUgbmFtZS4KKyMgICAtIHN5bm9wc2lzKCkgY2Fubm90IGJlIHByZXZlbnRlZCBmcm9tIGNsb2JiZXJpbmcgZXhpc3RpbmcKKyMgICAgIGxvYWRlZCBtb2R1bGVzLgogIyAgIC0gSWYgdGhlIF9fZmlsZV9fIGF0dHJpYnV0ZSBvbiBhIG1vZHVsZSBpcyBhIHJlbGF0aXZlIHBhdGggYW5kCiAjICAgICB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgY2hhbmdlZCB3aXRoIG9zLmNoZGlyKCksIGFuIGluY29ycmVjdAogIyAgICAgcGF0aCB3aWxsIGJlIGRpc3BsYXllZC4KIAogaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgaW8KIGltcG9ydCBvcwpAQCAtNjMsMTAgKzY0LDExIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHRva2VuaXplCitpbXBvcnQgdXJsbGliLnBhcnNlCiBpbXBvcnQgd2FybmluZ3MKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiBmcm9tIHJlcHJsaWIgaW1wb3J0IFJlcHIKLWZyb20gdHJhY2ViYWNrIGltcG9ydCBleHRyYWN0X3RiLCBmb3JtYXRfZXhjZXB0aW9uX29ubHkKK2Zyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjZXB0aW9uX29ubHkKIAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21tb24gcm91dGluZXMKQEAgLTEzNyw2ICsxMzksMTkgQEAKICAgICAgICAgICAgIGluc3BlY3QuaXNidWlsdGluKG9iaikgb3IKICAgICAgICAgICAgIGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yKG9iaikpCiAKK2RlZiBfaXNfYm91bmRfbWV0aG9kKGZuKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYgZm4gaXMgYSBib3VuZCBtZXRob2QsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorICAgIGZuIHdhcyBpbXBsZW1lbnRlZCBpbiBQeXRob24gb3IgaW4gQy4KKyAgICAiIiIKKyAgICBpZiBpbnNwZWN0LmlzbWV0aG9kKGZuKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBpZiBpbnNwZWN0LmlzYnVpbHRpbihmbik6CisgICAgICAgIHNlbGYgPSBnZXRhdHRyKGZuLCAnX19zZWxmX18nLCBOb25lKQorICAgICAgICByZXR1cm4gbm90IChpbnNwZWN0LmlzbW9kdWxlKHNlbGYpIG9yIChzZWxmIGlzIE5vbmUpKQorICAgIHJldHVybiBGYWxzZQorCisKIGRlZiBhbGxtZXRob2RzKGNsKToKICAgICBtZXRob2RzID0ge30KICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpbnNwZWN0LmdldG1lbWJlcnMoY2wsIF9pc19zb21lX21ldGhvZCk6CkBAIC0xNjcsOCArMTgyLDkgQEAKIGRlZiB2aXNpYmxlbmFtZShuYW1lLCBhbGw9Tm9uZSwgb2JqPU5vbmUpOgogICAgICIiIkRlY2lkZSB3aGV0aGVyIHRvIHNob3cgZG9jdW1lbnRhdGlvbiBvbiBhIHZhcmlhYmxlLiIiIgogICAgICMgQ2VydGFpbiBzcGVjaWFsIG5hbWVzIGFyZSByZWR1bmRhbnQgb3IgaW50ZXJuYWwuCisgICAgIyBYWFggUmVtb3ZlIF9faW5pdGlhbGl6aW5nX18/CiAgICAgaWYgbmFtZSBpbiB7J19fYXV0aG9yX18nLCAnX19idWlsdGluc19fJywgJ19fY2FjaGVkX18nLCAnX19jcmVkaXRzX18nLAotICAgICAgICAgICAgICAgICdfX2RhdGVfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19faW5pdGlhbGl6aW5nX18nLAorICAgICAgICAgICAgICAgICdfX2RhdGVfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fc3BlY19fJywKICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywKICAgICAgICAgICAgICAgICAnX19wYXRoX18nLCAnX19xdWFsbmFtZV9fJywgJ19fc2xvdHNfXycsICdfX3ZlcnNpb25fXyd9OgogICAgICAgICByZXR1cm4gMApAQCAtMjI0LDM0ICsyNDAsMzggQEAKICAgICBtdGltZSA9IG9zLnN0YXQoZmlsZW5hbWUpLnN0X210aW1lCiAgICAgbGFzdHVwZGF0ZSwgcmVzdWx0ID0gY2FjaGUuZ2V0KGZpbGVuYW1lLCAoTm9uZSwgTm9uZSkpCiAgICAgaWYgbGFzdHVwZGF0ZSBpcyBOb25lIG9yIGxhc3R1cGRhdGUgPCBtdGltZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmlsZSA9IHRva2VuaXplLm9wZW4oZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgIyBtb2R1bGUgY2FuJ3QgYmUgb3BlbmVkLCBzbyBza2lwIGl0Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBiaW5hcnlfc3VmZml4ZXMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTWzpdCi0gICAgICAgIGJpbmFyeV9zdWZmaXhlcyArPSBpbXBvcnRsaWIubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFU1s6XQotICAgICAgICBpZiBhbnkoZmlsZW5hbWUuZW5kc3dpdGgoeCkgZm9yIHggaW4gYmluYXJ5X3N1ZmZpeGVzKToKLSAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsZXMgaGF2ZSB0byBiZSBpbXBvcnRlZAotICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICBpZiBhbnkoZmlsZW5hbWUuZW5kc3dpdGgoeCkgZm9yIHggaW4KLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUyk6Ci0gICAgICAgICAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcignX190ZW1wX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcignX190ZW1wX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkKKyAgICAgICAgIyBMb29rIGZvciBiaW5hcnkgc3VmZml4ZXMgZmlyc3QsIGZhbGxpbmcgYmFjayB0byBzb3VyY2UuCisgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKHR1cGxlKGltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpKToKKyAgICAgICAgICAgIGxvYWRlcl9jbHMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyCisgICAgICAgIGVsaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoaW1wb3J0bGliLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKToKKyAgICAgICAgICAgIGxvYWRlcl9jbHMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvYWRlcl9jbHMgPSBOb25lCisgICAgICAgICMgTm93IGhhbmRsZSB0aGUgY2hvaWNlLgorICAgICAgICBpZiBsb2FkZXJfY2xzIGlzIE5vbmU6CisgICAgICAgICAgICAjIE11c3QgYmUgYSBzb3VyY2UgZmlsZS4KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19fdGVtcF9fJykKKyAgICAgICAgICAgICAgICBmaWxlID0gdG9rZW5pemUub3BlbihmaWxlbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgbW9kdWxlIGNhbid0IGJlIG9wZW5lZCwgc28gc2tpcCBpdAorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIHRleHQgbW9kdWxlcyBjYW4gYmUgZGlyZWN0bHkgZXhhbWluZWQKKyAgICAgICAgICAgIHdpdGggZmlsZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzb3VyY2Vfc3lub3BzaXMoZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTXVzdCBiZSBhIGJpbmFyeSBtb2R1bGUsIHdoaWNoIGhhcyB0byBiZSBpbXBvcnRlZC4KKyAgICAgICAgICAgIGxvYWRlciA9IGxvYWRlcl9jbHMoJ19fdGVtcF9fJywgZmlsZW5hbWUpCisgICAgICAgICAgICAjIFhYWCBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHBhc3MgaW4gdGhlIGxvYWRlciBoZXJlLgorICAgICAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKCdfX3RlbXBfXycsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIpCisgICAgICAgICAgICBfc3BlYyA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9zcGVjLmxvYWQoKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByZXN1bHQgPSAobW9kdWxlLl9fZG9jX18gb3IgJycpLnNwbGl0bGluZXMoKVswXQogICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX3RlbXBfXyddCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIHRleHQgbW9kdWxlcyBjYW4gYmUgZGlyZWN0bHkgZXhhbWluZWQKLSAgICAgICAgICAgIHJlc3VsdCA9IHNvdXJjZV9zeW5vcHNpcyhmaWxlKQotICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KKyAgICAgICAgICAgIHJlc3VsdCA9IChtb2R1bGUuX19kb2NfXyBvciAnJykuc3BsaXRsaW5lcygpWzBdCisgICAgICAgICMgQ2FjaGUgdGhlIHJlc3VsdC4KICAgICAgICAgY2FjaGVbZmlsZW5hbWVdID0gKG10aW1lLCByZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdAogCkBAIC0yNjcsMjAgKzI4NywyMiBAQAogCiBkZWYgaW1wb3J0ZmlsZShwYXRoKToKICAgICAiIiJJbXBvcnQgYSBQeXRob24gc291cmNlIGZpbGUgb3IgY29tcGlsZWQgZmlsZSBnaXZlbiBpdHMgcGF0aC4iIiIKLSAgICBtYWdpYyA9IGltcC5nZXRfbWFnaWMoKQorICAgIG1hZ2ljID0gaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSCiAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZpbGU6Ci0gICAgICAgIGlmIGZpbGUucmVhZChsZW4obWFnaWMpKSA9PSBtYWdpYzoKLSAgICAgICAgICAgIGtpbmQgPSBpbXAuUFlfQ09NUElMRUQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGtpbmQgPSBpbXAuUFlfU09VUkNFCi0gICAgICAgIGZpbGUuc2VlaygwKQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKLSAgICAgICAgbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLmxvYWRfbW9kdWxlKG5hbWUsIGZpbGUsIHBhdGgsIChleHQsICdyJywga2luZCkpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJhaXNlIEVycm9yRHVyaW5nSW1wb3J0KHBhdGgsIHN5cy5leGNfaW5mbygpKQotICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgaXNfYnl0ZWNvZGUgPSBtYWdpYyA9PSBmaWxlLnJlYWQobGVuKG1hZ2ljKSkKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKKyAgICBuYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgIGlmIGlzX2J5dGVjb2RlOgorICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5Tb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRoKQorICAgIGVsc2U6CisgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aCkKKyAgICAjIFhYWCBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHBhc3MgaW4gdGhlIGxvYWRlciBoZXJlLgorICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRoLCBsb2FkZXI9bG9hZGVyKQorICAgIF9zcGVjID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gX3NwZWMubG9hZCgpCisgICAgZXhjZXB0OgorICAgICAgICByYWlzZSBFcnJvckR1cmluZ0ltcG9ydChwYXRoLCBzeXMuZXhjX2luZm8oKSkKIAogZGVmIHNhZmVpbXBvcnQocGF0aCwgZm9yY2Vsb2FkPTAsIGNhY2hlPXt9KToKICAgICAiIiJJbXBvcnQgYSBtb2R1bGU7IGhhbmRsZSBlcnJvcnM7IHJldHVybiBOb25lIGlmIHRoZSBtb2R1bGUgaXNuJ3QgZm91bmQuCkBAIC01NzQsMTAgKzU5NiwxNSBAQAogICAgICAgICAgICAgZWxpZiBwZXA6CiAgICAgICAgICAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtJTA0ZC8nICUgaW50KHBlcCkKICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnPGEgaHJlZj0iJXMiPiVzPC9hPicgJSAodXJsLCBlc2NhcGUoYWxsKSkpCisgICAgICAgICAgICBlbGlmIHNlbGZkb3Q6CisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYSBsaW5rIGZvciBtZXRob2RzIGxpa2UgJ3NlbGYubWV0aG9kKC4uLiknCisgICAgICAgICAgICAgICAgIyBhbmQgdXNlIDxzdHJvbmc+IGZvciBhdHRyaWJ1dGVzIGxpa2UgJ3NlbGYuYXR0cicKKyAgICAgICAgICAgICAgICBpZiB0ZXh0W2VuZDplbmQrMV0gPT0gJygnOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2VsZi4nICsgc2VsZi5uYW1lbGluayhuYW1lLCBtZXRob2RzKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2VsZi48c3Ryb25nPiVzPC9zdHJvbmc+JyAlIG5hbWUpCiAgICAgICAgICAgICBlbGlmIHRleHRbZW5kOmVuZCsxXSA9PSAnKCc6CiAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoc2VsZi5uYW1lbGluayhuYW1lLCBtZXRob2RzLCBmdW5jcywgY2xhc3NlcykpCi0gICAgICAgICAgICBlbGlmIHNlbGZkb3Q6Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3NlbGYuPHN0cm9uZz4lczwvc3Ryb25nPicgJSBuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzZWxmLm5hbWVsaW5rKG5hbWUsIGNsYXNzZXMpKQogICAgICAgICAgICAgaGVyZSA9IGVuZApAQCAtNjIyLDEwICs2NDksNyBAQAogICAgICAgICBoZWFkID0gJzxiaWc+PGJpZz48c3Ryb25nPiVzPC9zdHJvbmc+PC9iaWc+PC9iaWc+JyAlIGxpbmtlZG5hbWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGF0aCA9IGluc3BlY3QuZ2V0YWJzZmlsZShvYmplY3QpCi0gICAgICAgICAgICB1cmwgPSBwYXRoCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAotICAgICAgICAgICAgICAgIHVybCA9IG50dXJsMnBhdGgucGF0aG5hbWUydXJsKHBhdGgpCisgICAgICAgICAgICB1cmwgPSB1cmxsaWIucGFyc2UucXVvdGUocGF0aCkKICAgICAgICAgICAgIGZpbGVsaW5rID0gc2VsZi5maWxlbGluayh1cmwsIHBhdGgpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBmaWxlbGluayA9ICcoYnVpbHQtaW4pJwpAQCAtODkxLDcgKzkxNSw3IEBACiAgICAgICAgIGFuY2hvciA9IChjbCBhbmQgY2wuX19uYW1lX18gb3IgJycpICsgJy0nICsgbmFtZQogICAgICAgICBub3RlID0gJycKICAgICAgICAgc2tpcGRvY3MgPSAwCi0gICAgICAgIGlmIGluc3BlY3QuaXNtZXRob2Qob2JqZWN0KToKKyAgICAgICAgaWYgX2lzX2JvdW5kX21ldGhvZChvYmplY3QpOgogICAgICAgICAgICAgaW1jbGFzcyA9IG9iamVjdC5fX3NlbGZfXy5fX2NsYXNzX18KICAgICAgICAgICAgIGlmIGNsOgogICAgICAgICAgICAgICAgIGlmIGltY2xhc3MgaXMgbm90IGNsOgpAQCAtOTAyLDcgKzkyNiw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX19zZWxmX18uX19jbGFzc19fLCBtb2QpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgbm90ZSA9ICcgdW5ib3VuZCAlcyBtZXRob2QnICUgc2VsZi5jbGFzc2xpbmsoaW1jbGFzcyxtb2QpCi0gICAgICAgICAgICBvYmplY3QgPSBvYmplY3QuX19mdW5jX18KIAogICAgICAgICBpZiBuYW1lID09IHJlYWxuYW1lOgogICAgICAgICAgICAgdGl0bGUgPSAnPGEgbmFtZT0iJXMiPjxzdHJvbmc+JXM8L3N0cm9uZz48L2E+JyAlIChhbmNob3IsIHJlYWxuYW1lKQpAQCAtOTE2LDIwICs5MzksMjEgQEAKICAgICAgICAgICAgICAgICByZWFsbGluayA9IHJlYWxuYW1lCiAgICAgICAgICAgICB0aXRsZSA9ICc8YSBuYW1lPSIlcyI+PHN0cm9uZz4lczwvc3Ryb25nPjwvYT4gPSAlcycgJSAoCiAgICAgICAgICAgICAgICAgYW5jaG9yLCBuYW1lLCByZWFsbGluaykKLSAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCk6Ci0gICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCB2YXJrdywgZGVmYXVsdHMsIGFubiA9IFwKLSAgICAgICAgICAgICAgICBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG9iamVjdCkKLSAgICAgICAgICAgIGFyZ3NwZWMgPSBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoCi0gICAgICAgICAgICAgICAgYXJncywgdmFyYXJncywga3dvbmx5YXJncywga3dkZWZhdWx0cywgdmFya3csIGRlZmF1bHRzLCBhbm4sCi0gICAgICAgICAgICAgICAgZm9ybWF0dmFsdWU9c2VsZi5mb3JtYXR2YWx1ZSwKLSAgICAgICAgICAgICAgICBmb3JtYXRhbm5vdGF0aW9uPWluc3BlY3QuZm9ybWF0YW5ub3RhdGlvbnJlbGF0aXZldG8ob2JqZWN0KSkKLSAgICAgICAgICAgIGlmIHJlYWxuYW1lID09ICc8bGFtYmRhPic6Ci0gICAgICAgICAgICAgICAgdGl0bGUgPSAnPHN0cm9uZz4lczwvc3Ryb25nPiA8ZW0+bGFtYmRhPC9lbT4gJyAlIG5hbWUKLSAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KLSAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCi0gICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKLSAgICAgICAgZWxzZToKKyAgICAgICAgYXJnc3BlYyA9IE5vbmUKKyAgICAgICAgaWYgaW5zcGVjdC5pc3JvdXRpbmUob2JqZWN0KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBpbnNwZWN0LnNpZ25hdHVyZShvYmplY3QpCisgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gTm9uZQorICAgICAgICAgICAgaWYgc2lnbmF0dXJlOgorICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBzdHIoc2lnbmF0dXJlKQorICAgICAgICAgICAgICAgIGlmIHJlYWxuYW1lID09ICc8bGFtYmRhPic6CisgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gJzxzdHJvbmc+JXM8L3N0cm9uZz4gPGVtPmxhbWJkYTwvZW0+ICcgJSBuYW1lCisgICAgICAgICAgICAgICAgICAgICMgWFhYIGxhbWJkYSdzIHdvbid0IHVzdWFsbHkgaGF2ZSBmdW5jX2Fubm90YXRpb25zWydyZXR1cm4nXQorICAgICAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgIyBTbyByZW1vdmluZyBwYXJlbnRoZXNlcyBpc24ndCB0cnVseSBzYWZlLgorICAgICAgICAgICAgICAgICAgICBhcmdzcGVjID0gYXJnc3BlY1sxOi0xXSAjIHJlbW92ZSBwYXJlbnRoZXNlcworICAgICAgICBpZiBub3QgYXJnc3BlYzoKICAgICAgICAgICAgIGFyZ3NwZWMgPSAnKC4uLiknCiAKICAgICAgICAgZGVjbCA9IHRpdGxlICsgYXJnc3BlYyArIChub3RlIGFuZCBzZWxmLmdyZXkoCkBAIC0xMjM2LDggKzEyNjAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IGdldGRvYyh2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgcHVzaChzZWxmLmRvY290aGVyKGdldGF0dHIob2JqZWN0LCBuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG1vZCwgbWF4bGVuPTcwLCBkb2M9ZG9jKSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGdldGF0dHIob2JqZWN0LCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBob21lY2xzLl9fZGljdF9fW25hbWVdCisgICAgICAgICAgICAgICAgICAgIHB1c2goc2VsZi5kb2NvdGhlcihvYmosIG5hbWUsIG1vZCwgbWF4bGVuPTcwLCBkb2M9ZG9jKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJykKICAgICAgICAgICAgIHJldHVybiBhdHRycwogCiAgICAgICAgIGF0dHJzID0gWyhuYW1lLCBraW5kLCBjbHMsIHZhbHVlKQpAQCAtMTI1OSw3ICsxMjg3LDYgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGFnID0gImluaGVyaXRlZCBmcm9tICVzIiAlIGNsYXNzbmFtZSh0aGlzY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX19tb2R1bGVfXykKLQogICAgICAgICAgICAgIyBTb3J0IGF0dHJzIGJ5IG5hbWUuCiAgICAgICAgICAgICBhdHRycy5zb3J0KCkKIApAQCAtMTI3NCw2ICsxMzAxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgdDogdFsxXSA9PSAnZGF0YSBkZXNjcmlwdG9yJykKICAgICAgICAgICAgIGF0dHJzID0gc3BpbGxkYXRhKCJEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzICVzOlxuIiAlIHRhZywgYXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgdDogdFsxXSA9PSAnZGF0YScpCisKICAgICAgICAgICAgIGFzc2VydCBhdHRycyA9PSBbXQogICAgICAgICAgICAgYXR0cnMgPSBpbmhlcml0ZWQKIApAQCAtMTI5Miw3ICsxMzIwLDcgQEAKICAgICAgICAgbmFtZSA9IG5hbWUgb3IgcmVhbG5hbWUKICAgICAgICAgbm90ZSA9ICcnCiAgICAgICAgIHNraXBkb2NzID0gMAotICAgICAgICBpZiBpbnNwZWN0LmlzbWV0aG9kKG9iamVjdCk6CisgICAgICAgIGlmIF9pc19ib3VuZF9tZXRob2Qob2JqZWN0KToKICAgICAgICAgICAgIGltY2xhc3MgPSBvYmplY3QuX19zZWxmX18uX19jbGFzc19fCiAgICAgICAgICAgICBpZiBjbDoKICAgICAgICAgICAgICAgICBpZiBpbWNsYXNzIGlzIG5vdCBjbDoKQEAgLTEzMDMsNyArMTMzMSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX19zZWxmX18uX19jbGFzc19fLCBtb2QpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgbm90ZSA9ICcgdW5ib3VuZCAlcyBtZXRob2QnICUgY2xhc3NuYW1lKGltY2xhc3MsbW9kKQotICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fZnVuY19fCiAKICAgICAgICAgaWYgbmFtZSA9PSByZWFsbmFtZToKICAgICAgICAgICAgIHRpdGxlID0gc2VsZi5ib2xkKHJlYWxuYW1lKQpAQCAtMTMxMiwyMCArMTMzOSwyMiBAQAogICAgICAgICAgICAgICAgIGNsLl9fZGljdF9fW3JlYWxuYW1lXSBpcyBvYmplY3QpOgogICAgICAgICAgICAgICAgIHNraXBkb2NzID0gMQogICAgICAgICAgICAgdGl0bGUgPSBzZWxmLmJvbGQobmFtZSkgKyAnID0gJyArIHJlYWxuYW1lCi0gICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihvYmplY3QpOgotICAgICAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCBhbm4gPSBcCi0gICAgICAgICAgICAgIGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMob2JqZWN0KQotICAgICAgICAgICAgYXJnc3BlYyA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGFubiwKLSAgICAgICAgICAgICAgICBmb3JtYXR2YWx1ZT1zZWxmLmZvcm1hdHZhbHVlLAotICAgICAgICAgICAgICAgIGZvcm1hdGFubm90YXRpb249aW5zcGVjdC5mb3JtYXRhbm5vdGF0aW9ucmVsYXRpdmV0byhvYmplY3QpKQotICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKLSAgICAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgbGFtYmRhICcKLSAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KLSAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCi0gICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKLSAgICAgICAgZWxzZToKKyAgICAgICAgYXJnc3BlYyA9IE5vbmUKKworICAgICAgICBpZiBpbnNwZWN0Lmlzcm91dGluZShvYmplY3QpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9iamVjdCkKKyAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBOb25lCisgICAgICAgICAgICBpZiBzaWduYXR1cmU6CisgICAgICAgICAgICAgICAgYXJnc3BlYyA9IHN0cihzaWduYXR1cmUpCisgICAgICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBzZWxmLmJvbGQobmFtZSkgKyAnIGxhbWJkYSAnCisgICAgICAgICAgICAgICAgICAgICMgWFhYIGxhbWJkYSdzIHdvbid0IHVzdWFsbHkgaGF2ZSBmdW5jX2Fubm90YXRpb25zWydyZXR1cm4nXQorICAgICAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgIyBTbyByZW1vdmluZyBwYXJlbnRoZXNlcyBpc24ndCB0cnVseSBzYWZlLgorICAgICAgICAgICAgICAgICAgICBhcmdzcGVjID0gYXJnc3BlY1sxOi0xXSAjIHJlbW92ZSBwYXJlbnRoZXNlcworICAgICAgICBpZiBub3QgYXJnc3BlYzoKICAgICAgICAgICAgIGFyZ3NwZWMgPSAnKC4uLiknCiAgICAgICAgIGRlY2wgPSB0aXRsZSArIGFyZ3NwZWMgKyBub3RlCiAKQEAgLTEzNzgsMTEgKzE0MDcsMTYgQEAKIGRlZiBwYWdlcih0ZXh0KToKICAgICAiIiJUaGUgZmlyc3QgdGltZSB0aGlzIGlzIGNhbGxlZCwgZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBwYWdlciB0byB1c2UuIiIiCiAgICAgZ2xvYmFsIHBhZ2VyCisgICAgIyBFc2NhcGUgbm9uLWVuY29kYWJsZSBjaGFyYWN0ZXJzIHRvIGF2b2lkIGVuY29kaW5nIGVycm9ycyBsYXRlcgorICAgIGVuY29kaW5nID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCisgICAgdGV4dCA9IHRleHQuZW5jb2RlKGVuY29kaW5nLCAnYmFja3NsYXNocmVwbGFjZScpLmRlY29kZShlbmNvZGluZykKICAgICBwYWdlciA9IGdldHBhZ2VyKCkKICAgICBwYWdlcih0ZXh0KQogCiBkZWYgZ2V0cGFnZXIoKToKICAgICAiIiJEZWNpZGUgd2hhdCBtZXRob2QgdG8gdXNlIGZvciBwYWdpbmcgdGhyb3VnaCB0ZXh0LiIiIgorICAgIGlmIG5vdCBoYXNhdHRyKHN5cy5zdGRpbiwgImlzYXR0eSIpOgorICAgICAgICByZXR1cm4gcGxhaW5wYWdlcgogICAgIGlmIG5vdCBoYXNhdHRyKHN5cy5zdGRvdXQsICJpc2F0dHkiKToKICAgICAgICAgcmV0dXJuIHBsYWlucGFnZXIKICAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpIG9yIG5vdCBzeXMuc3Rkb3V0LmlzYXR0eSgpOgpAQCAtMTM5Niw3ICsxNDMwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogcGlwZXBhZ2VyKHRleHQsIG9zLmVudmlyb25bJ1BBR0VSJ10pCiAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ1RFUk0nKSBpbiAoJ2R1bWInLCAnZW1hY3MnKToKICAgICAgICAgcmV0dXJuIHBsYWlucGFnZXIKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogdGVtcGZpbGVwYWdlcihwbGFpbih0ZXh0KSwgJ21vcmUgPCcpCiAgICAgaWYgaGFzYXR0cihvcywgJ3N5c3RlbScpIGFuZCBvcy5zeXN0ZW0oJyhsZXNzKSAyPi9kZXYvbnVsbCcpID09IDA6CiAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogcGlwZXBhZ2VyKHRleHQsICdsZXNzJykKQEAgLTE0MjIsMTYgKzE0NTYsMTUgQEAKICAgICB0cnk6CiAgICAgICAgIHBpcGUud3JpdGUodGV4dCkKICAgICAgICAgcGlwZS5jbG9zZSgpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MgIyBJZ25vcmUgYnJva2VuIHBpcGVzIGNhdXNlZCBieSBxdWl0dGluZyB0aGUgcGFnZXIgcHJvZ3JhbS4KIAogZGVmIHRlbXBmaWxlcGFnZXIodGV4dCwgY21kKToKICAgICAiIiJQYWdlIHRocm91Z2ggdGV4dCBieSBpbnZva2luZyBhIHByb2dyYW0gb24gYSB0ZW1wb3JhcnkgZmlsZS4iIiIKICAgICBpbXBvcnQgdGVtcGZpbGUKICAgICBmaWxlbmFtZSA9IHRlbXBmaWxlLm1rdGVtcCgpCi0gICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAgICBmaWxlLndyaXRlKHRleHQpCi0gICAgZmlsZS5jbG9zZSgpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGZpbGU6CisgICAgICAgIGZpbGUud3JpdGUodGV4dCkKICAgICB0cnk6CiAgICAgICAgIG9zLnN5c3RlbShjbWQgKyAnICInICsgZmlsZW5hbWUgKyAnIicpCiAgICAgZmluYWxseToKQEAgLTE3MDUsNyArMTczOCw2IEBACiAgICAgICAgICdUUkFDRUJBQ0tTJzogJ1RZUEVTJywKICAgICAgICAgJ05PTkUnOiAoJ2JsdGluLW51bGwtb2JqZWN0JywgJycpLAogICAgICAgICAnRUxMSVBTSVMnOiAoJ2JsdGluLWVsbGlwc2lzLW9iamVjdCcsICdTTElDSU5HUycpLAotICAgICAgICAnRklMRVMnOiAoJ2JsdGluLWZpbGUtb2JqZWN0cycsICcnKSwKICAgICAgICAgJ1NQRUNJQUxBVFRSSUJVVEVTJzogKCdzcGVjaWFsYXR0cnMnLCAnJyksCiAgICAgICAgICdDTEFTU0VTJzogKCd0eXBlcycsICdjbGFzcyBTUEVDSUFMTUVUSE9EUyBQUklWQVRFTkFNRVMnKSwKICAgICAgICAgJ01PRFVMRVMnOiAoJ3R5cGVzbW9kdWxlcycsICdpbXBvcnQnKSwKQEAgLTE4NDEsNyArMTg3Myw3IEBACiAKICAgICBkZWYgaW50cm8oc2VsZik6CiAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwotV2VsY29tZSB0byBQeXRob24gJXMhICBUaGlzIGlzIHRoZSBpbnRlcmFjdGl2ZSBoZWxwIHV0aWxpdHkuCitXZWxjb21lIHRvIFB5dGhvbiAlcydzIGhlbHAgdXRpbGl0eSEKIAogSWYgdGhpcyBpcyB5b3VyIGZpcnN0IHRpbWUgdXNpbmcgUHl0aG9uLCB5b3Ugc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgb3V0CiB0aGUgdHV0b3JpYWwgb24gdGhlIEludGVybmV0IGF0IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvJXMvdHV0b3JpYWwvLgpAQCAtMTg1MCwxMCArMTg4MiwxMCBAQAogUHl0aG9uIHByb2dyYW1zIGFuZCB1c2luZyBQeXRob24gbW9kdWxlcy4gIFRvIHF1aXQgdGhpcyBoZWxwIHV0aWxpdHkgYW5kCiByZXR1cm4gdG8gdGhlIGludGVycHJldGVyLCBqdXN0IHR5cGUgInF1aXQiLgogCi1UbyBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVzLCBrZXl3b3Jkcywgb3IgdG9waWNzLCB0eXBlICJtb2R1bGVzIiwKLSJrZXl3b3JkcyIsIG9yICJ0b3BpY3MiLiAgRWFjaCBtb2R1bGUgYWxzbyBjb21lcyB3aXRoIGEgb25lLWxpbmUgc3VtbWFyeQotb2Ygd2hhdCBpdCBkb2VzOyB0byBsaXN0IHRoZSBtb2R1bGVzIHdob3NlIHN1bW1hcmllcyBjb250YWluIGEgZ2l2ZW4gd29yZAotc3VjaCBhcyAic3BhbSIsIHR5cGUgIm1vZHVsZXMgc3BhbSIuCitUbyBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVzLCBrZXl3b3Jkcywgc3ltYm9scywgb3IgdG9waWNzLCB0eXBlCisibW9kdWxlcyIsICJrZXl3b3JkcyIsICJzeW1ib2xzIiwgb3IgInRvcGljcyIuICBFYWNoIG1vZHVsZSBhbHNvIGNvbWVzCit3aXRoIGEgb25lLWxpbmUgc3VtbWFyeSBvZiB3aGF0IGl0IGRvZXM7IHRvIGxpc3QgdGhlIG1vZHVsZXMgd2hvc2UgbmFtZQorb3Igc3VtbWFyeSBjb250YWluIGEgZ2l2ZW4gc3RyaW5nIHN1Y2ggYXMgInNwYW0iLCB0eXBlICJtb2R1bGVzIHNwYW0iLgogJycnICUgdHVwbGUoW3N5cy52ZXJzaW9uWzozXV0qMikpCiAKICAgICBkZWYgbGlzdChzZWxmLCBpdGVtcywgY29sdW1ucz00LCB3aWR0aD04MCk6CkBAIC0xOTE3LDExICsxOTQ5LDEwIEBACiAgICAgICAgIGlmIG1vcmVfeHJlZnM6CiAgICAgICAgICAgICB4cmVmcyA9ICh4cmVmcyBvciAnJykgKyAnICcgKyBtb3JlX3hyZWZzCiAgICAgICAgIGlmIHhyZWZzOgotICAgICAgICAgICAgaW1wb3J0IGZvcm1hdHRlcgotICAgICAgICAgICAgYnVmZmVyID0gaW8uU3RyaW5nSU8oKQotICAgICAgICAgICAgZm9ybWF0dGVyLkR1bWJXcml0ZXIoYnVmZmVyKS5zZW5kX2Zsb3dpbmdfZGF0YSgKLSAgICAgICAgICAgICAgICAnUmVsYXRlZCBoZWxwIHRvcGljczogJyArICcsICcuam9pbih4cmVmcy5zcGxpdCgpKSArICdcbicpCi0gICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnXG4lc1xuJyAlIGJ1ZmZlci5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgaW1wb3J0IHRleHR3cmFwCisgICAgICAgICAgICB0ZXh0ID0gJ1JlbGF0ZWQgaGVscCB0b3BpY3M6ICcgKyAnLCAnLmpvaW4oeHJlZnMuc3BsaXQoKSkgKyAnXG4nCisgICAgICAgICAgICB3cmFwcGVkX3RleHQgPSB0ZXh0d3JhcC53cmFwKHRleHQsIDcyKQorICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJ1xuJXNcbicgJSAnJy5qb2luKHdyYXBwZWRfdGV4dCkpCiAKICAgICBkZWYgX2dldHRvcGljKHNlbGYsIHRvcGljLCBtb3JlX3hyZWZzPScnKToKICAgICAgICAgIiIiUmV0dXJuIHVuYnVmZmVyZWQgdHVwbGUgb2YgKHRvcGljLCB4cmVmcykuCkBAIC0xOTU4LDkgKzE5ODksMTAgQEAKICAgICBkZWYgbGlzdG1vZHVsZXMoc2VsZiwga2V5PScnKToKICAgICAgICAgaWYga2V5OgogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCi1IZXJlIGlzIGEgbGlzdCBvZiBtYXRjaGluZyBtb2R1bGVzLiAgRW50ZXIgYW55IG1vZHVsZSBuYW1lIHRvIGdldCBtb3JlIGhlbHAuCitIZXJlIGlzIGEgbGlzdCBvZiBtb2R1bGVzIHdob3NlIG5hbWUgb3Igc3VtbWFyeSBjb250YWlucyAne30nLgorSWYgdGhlcmUgYXJlIGFueSwgZW50ZXIgYSBtb2R1bGUgbmFtZSB0byBnZXQgbW9yZSBoZWxwLgogCi0nJycpCisnJycuZm9ybWF0KGtleSkpCiAgICAgICAgICAgICBhcHJvcG9zKGtleSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwpAQCAtMTk3OSwzNSArMjAxMSwxMSBAQAogICAgICAgICAgICAgc2VsZi5saXN0KG1vZHVsZXMua2V5cygpKQogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCiBFbnRlciBhbnkgbW9kdWxlIG5hbWUgdG8gZ2V0IG1vcmUgaGVscC4gIE9yLCB0eXBlICJtb2R1bGVzIHNwYW0iIHRvIHNlYXJjaAotZm9yIG1vZHVsZXMgd2hvc2UgZGVzY3JpcHRpb25zIGNvbnRhaW4gdGhlIHdvcmQgInNwYW0iLgorZm9yIG1vZHVsZXMgd2hvc2UgbmFtZSBvciBzdW1tYXJ5IGNvbnRhaW4gdGhlIHN0cmluZyAic3BhbSIuCiAnJycpCiAKIGhlbHAgPSBIZWxwZXIoKQogCi1jbGFzcyBTY2FubmVyOgotICAgICIiIkEgZ2VuZXJpYyB0cmVlIGl0ZXJhdG9yLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290cywgY2hpbGRyZW4sIGRlc2NlbmRwKToKLSAgICAgICAgc2VsZi5yb290cyA9IHJvb3RzWzpdCi0gICAgICAgIHNlbGYuc3RhdGUgPSBbXQotICAgICAgICBzZWxmLmNoaWxkcmVuID0gY2hpbGRyZW4KLSAgICAgICAgc2VsZi5kZXNjZW5kcCA9IGRlc2NlbmRwCi0KLSAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuc3RhdGU6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5yb290czoKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgcm9vdCA9IHNlbGYucm9vdHMucG9wKDApCi0gICAgICAgICAgICBzZWxmLnN0YXRlID0gWyhyb290LCBzZWxmLmNoaWxkcmVuKHJvb3QpKV0KLSAgICAgICAgbm9kZSwgY2hpbGRyZW4gPSBzZWxmLnN0YXRlWy0xXQotICAgICAgICBpZiBub3QgY2hpbGRyZW46Ci0gICAgICAgICAgICBzZWxmLnN0YXRlLnBvcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KCkKLSAgICAgICAgY2hpbGQgPSBjaGlsZHJlbi5wb3AoMCkKLSAgICAgICAgaWYgc2VsZi5kZXNjZW5kcChjaGlsZCk6Ci0gICAgICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgoY2hpbGQsIHNlbGYuY2hpbGRyZW4oY2hpbGQpKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkCi0KLQogY2xhc3MgTW9kdWxlU2Nhbm5lcjoKICAgICAiIiJBbiBpbnRlcnJ1cHRpYmxlIHNjYW5uZXIgdGhhdCBzZWFyY2hlcyBtb2R1bGUgc3lub3BzZXMuIiIiCiAKQEAgLTIwMzYsMTAgKzIwNDQsMTEgQEAKICAgICAgICAgICAgICAgICBjYWxsYmFjayhOb25lLCBtb2RuYW1lLCAnJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBpbXBvcnRlci5maW5kX21vZHVsZShtb2RuYW1lKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gcGtndXRpbC5fZ2V0X3NwZWMoaW1wb3J0ZXIsIG1vZG5hbWUpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgogICAgICAgICAgICAgICAgICAgICAjIHJhaXNlZCBieSB0ZXN0cyBmb3IgYmFkIGNvZGluZyBjb29raWVzIG9yIEJPTQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCiAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdnZXRfc291cmNlJyk6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGxvYWRlci5nZXRfc291cmNlKG1vZG5hbWUpCkBAIC0yMDUzLDggKzIwNjIsOSBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IE5vbmUKICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfc3BlYyA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobW9kbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9zcGVjLmxvYWQoKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvbmVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3IobW9kbmFtZSkKQEAgLTIzNDEsNyArMjM1MSw3IEBACiAKICAgICBkZWYgaHRtbF9nZXRmaWxlKHBhdGgpOgogICAgICAgICAiIiJHZXQgYW5kIGRpc3BsYXkgYSBzb3VyY2UgZmlsZSBsaXN0aW5nIHNhZmVseS4iIiIKLSAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnJTIwJywgJyAnKQorICAgICAgICBwYXRoID0gdXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkKICAgICAgICAgd2l0aCB0b2tlbml6ZS5vcGVuKHBhdGgpIGFzIGZwOgogICAgICAgICAgICAgbGluZXMgPSBodG1sLmVzY2FwZShmcC5yZWFkKCkpCiAgICAgICAgIGJvZHkgPSAnPHByZT4lczwvcHJlPicgJSBsaW5lcwpkaWZmIC0tZ2l0IGEvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5IGIvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CmluZGV4IGUyZmQzODAuLjBkMmQ4M2MgMTAwNjQ0Ci0tLSBhL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQorKysgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKQEAgLTEsMTAgKzEsMTAgQEAKICMgLSotIGNvZGluZzogdXRmLTggLSotCi0jIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIFN1biBGZWIgMjMgMDg6MTM6MjUgMjAxNAorIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBTYXQgTWF5IDE3IDIxOjQyOjA5IDIwMTQKIHRvcGljcyA9IHsnYXNzZXJ0JzogJ1xuVGhlICJhc3NlcnQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NlcnQgc3RhdGVtZW50cyBhcmUgYSBjb252ZW5pZW50IHdheSB0byBpbnNlcnQgZGVidWdnaW5nIGFzc2VydGlvbnNcbmludG8gYSBwcm9ncmFtOlxuXG4gICBhc3NlcnRfc3RtdCA6Oj0gImFzc2VydCIgZXhwcmVzc2lvbiBbIiwiIGV4cHJlc3Npb25dXG5cblRoZSBzaW1wbGUgZm9ybSwgImFzc2VydCBleHByZXNzaW9uIiwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjogcmFpc2UgQXNzZXJ0aW9uRXJyb3JcblxuVGhlIGV4dGVuZGVkIGZvcm0sICJhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yIiwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjE6IHJhaXNlIEFzc2VydGlvbkVycm9yKGV4cHJlc3Npb24yKVxuXG5UaGVzZSBlcXVpdmFsZW5jZXMgYXNzdW1lIHRoYXQgIl9fZGVidWdfXyIgYW5kICJBc3NlcnRpb25FcnJvciIgcmVmZXJcbnRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlICJfX2RlYnVnX18iIGlzICJUcnVlIiB1bmRlclxubm9ybWFsIGNpcmN1bXN0YW5jZXMsICJGYWxzZSIgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIChjb21tYW5kXG5saW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlIGZvciBhblxuYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZSB0aW1lLiAgTm90ZVxudGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGV4cHJlc3Npb25cbnRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZVxuc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvICJfX2RlYnVnX18iIGFyZSBpbGxlZ2FsLiAgVGhlIHZhbHVlIGZvciB0aGUgYnVpbHQtaW5cbnZhcmlhYmxlIGlzIGRldGVybWluZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc3RhcnRzLlxuJywKLSAnYXNzaWdubWVudCc6ICdcbkFzc2lnbm1lbnQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKioqXG5cbkFzc2lnbm1lbnQgc3RhdGVtZW50cyBhcmUgdXNlZCB0byAocmUpYmluZCBuYW1lcyB0byB2YWx1ZXMgYW5kIHRvXG5tb2RpZnkgYXR0cmlidXRlcyBvciBpdGVtcyBvZiBtdXRhYmxlIG9iamVjdHM6XG5cbiAgIGFzc2lnbm1lbnRfc3RtdCA6Oj0gKHRhcmdldF9saXN0ICI9IikrIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgdGFyZ2V0X2xpc3QgICAgIDo6PSB0YXJnZXQgKCIsIiB0YXJnZXQpKiBbIiwiXVxuICAgdGFyZ2V0ICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICAgICAgICAgIHwgIigiIHRhcmdldF9saXN0ICIpIlxuICAgICAgICAgICAgICB8ICJbIiB0YXJnZXRfbGlzdCAiXSJcbiAgICAgICAgICAgICAgfCBhdHRyaWJ1dGVyZWZcbiAgICAgICAgICAgICAgfCBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgfCBzbGljaW5nXG4gICAgICAgICAgICAgIHwgIioiIHRhcmdldFxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGxpc3QgKHJlbWVtYmVyIHRoYXRcbnRoaXMgY2FuIGJlIGEgc2luZ2xlIGV4cHJlc3Npb24gb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgdGhlIGxhdHRlclxueWllbGRpbmcgYSB0dXBsZSkgYW5kIGFzc2lnbnMgdGhlIHNpbmdsZSByZXN1bHRpbmcgb2JqZWN0IHRvIGVhY2ggb2ZcbnRoZSB0YXJnZXQgbGlzdHMsIGZyb20gbGVmdCB0byByaWdodC5cblxuQXNzaWdubWVudCBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGRlcGVuZGluZyBvbiB0aGUgZm9ybSBvZiB0aGUgdGFyZ2V0XG4obGlzdCkuIFdoZW4gYSB0YXJnZXQgaXMgcGFydCBvZiBhIG11dGFibGUgb2JqZWN0IChhbiBhdHRyaWJ1dGVcbnJlZmVyZW5jZSwgc3Vic2NyaXB0aW9uIG9yIHNsaWNpbmcpLCB0aGUgbXV0YWJsZSBvYmplY3QgbXVzdFxudWx0aW1hdGVseSBwZXJmb3JtIHRoZSBhc3NpZ25tZW50IGFuZCBkZWNpZGUgYWJvdXQgaXRzIHZhbGlkaXR5LCBhbmRcbm1heSByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGFzc2lnbm1lbnQgaXMgdW5hY2NlcHRhYmxlLiAgVGhlIHJ1bGVzXG5vYnNlcnZlZCBieSB2YXJpb3VzIHR5cGVzIGFuZCB0aGUgZXhjZXB0aW9ucyByYWlzZWQgYXJlIGdpdmVuIHdpdGggdGhlXG5kZWZpbml0aW9uIG9mIHRoZSBvYmplY3QgdHlwZXMgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZVxuaGllcmFyY2h5KikuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgdGFyZ2V0IGxpc3QsIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW5cbnBhcmVudGhlc2VzIG9yIHNxdWFyZSBicmFja2V0cywgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhcyBmb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIHNpbmdsZSB0YXJnZXQ6IFRoZSBvYmplY3QgaXMgYXNzaWduZWQgdG9cbiAgdGhhdCB0YXJnZXQuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGFyZ2V0czogVGhlXG4gIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIGFzIHRoZXJlXG4gIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmUgYXNzaWduZWQsIGZyb21cbiAgbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuICAqIElmIHRoZSB0YXJnZXQgbGlzdCBjb250YWlucyBvbmUgdGFyZ2V0IHByZWZpeGVkIHdpdGggYW5cbiAgICBhc3RlcmlzaywgY2FsbGVkIGEgInN0YXJyZWQiIHRhcmdldDogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2VcbiAgICB3aXRoIGF0IGxlYXN0IGFzIG1hbnkgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldFxuICAgIGxpc3QsIG1pbnVzIG9uZS4gIFRoZSBmaXJzdCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkLFxuICAgIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIHRhcmdldHMgYmVmb3JlIHRoZSBzdGFycmVkIHRhcmdldC4gIFRoZVxuICAgIGZpbmFsIGl0ZW1zIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQgdG8gdGhlIHRhcmdldHMgYWZ0ZXIgdGhlXG4gICAgc3RhcnJlZCB0YXJnZXQuICBBIGxpc3Qgb2YgdGhlIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgaXNcbiAgICB0aGVuIGFzc2lnbmVkIHRvIHRoZSBzdGFycmVkIHRhcmdldCAodGhlIGxpc3QgY2FuIGJlIGVtcHR5KS5cblxuICAqIEVsc2U6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mXG4gICAgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZVxuICAgIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgc2luZ2xlIHRhcmdldCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzXG5mb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gaWRlbnRpZmllciAobmFtZSk6XG5cbiAgKiBJZiB0aGUgbmFtZSBkb2VzIG5vdCBvY2N1ciBpbiBhICJnbG9iYWwiIG9yICJub25sb2NhbCIgc3RhdGVtZW50XG4gICAgaW4gdGhlIGN1cnJlbnQgY29kZSBibG9jazogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGVcbiAgICBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZS5cblxuICAqIE90aGVyd2lzZTogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGUgZ2xvYmFsXG4gICAgbmFtZXNwYWNlIG9yIHRoZSBvdXRlciBuYW1lc3BhY2UgZGV0ZXJtaW5lZCBieSAibm9ubG9jYWwiLFxuICAgIHJlc3BlY3RpdmVseS5cblxuICBUaGUgbmFtZSBpcyByZWJvdW5kIGlmIGl0IHdhcyBhbHJlYWR5IGJvdW5kLiAgVGhpcyBtYXkgY2F1c2UgdGhlXG4gIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoXG4gIHplcm8sIGNhdXNpbmcgdGhlIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0XG4gIGhhcyBvbmUpIHRvIGJlIGNhbGxlZC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW5cbiAgc3F1YXJlIGJyYWNrZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXJcbiAgb2YgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZVxuICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCAiVHlwZUVycm9yIiBpc1xuICByYWlzZWQuICBUaGF0IG9iamVjdCBpcyB0aGVuIGFza2VkIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvXG4gIHRoZSBnaXZlbiBhdHRyaWJ1dGU7IGlmIGl0IGNhbm5vdCBwZXJmb3JtIHRoZSBhc3NpZ25tZW50LCBpdCByYWlzZXNcbiAgYW4gZXhjZXB0aW9uICh1c3VhbGx5IGJ1dCBub3QgbmVjZXNzYXJpbHkgIkF0dHJpYnV0ZUVycm9yIikuXG5cbiAgTm90ZTogSWYgdGhlIG9iamVjdCBpcyBhIGNsYXNzIGluc3RhbmNlIGFuZCB0aGUgYXR0cmlidXRlIHJlZmVyZW5jZVxuICBvY2N1cnMgb24gYm90aCBzaWRlcyBvZiB0aGUgYXNzaWdubWVudCBvcGVyYXRvciwgdGhlIFJIUyBleHByZXNzaW9uLFxuICAiYS54IiBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgImEueCIgaXMgYWx3YXlzXG4gIHNldCBhcyBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS4gIFRodXMsIHRoZVxuICB0d28gb2NjdXJyZW5jZXMgb2YgImEueCIgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZSBzYW1lXG4gIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSwgdGhlXG4gIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCAicHJvcGVydHkoKSIuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHN1YnNjcmlwdGlvbjogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBlaXRoZXIgYSBtdXRhYmxlIHNlcXVlbmNlXG4gIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpIG9yIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KS5cbiAgTmV4dCwgdGhlIHN1YnNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGEgbGlzdCksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCB5aWVsZCBhbiBpbnRlZ2VyLiAgSWYgaXQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZVxuICBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLCBhbmQgdGhlIHNlcXVlbmNlIGlzIGFza2VkXG4gIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGl0cyBpdGVtIHdpdGggdGhhdCBpbmRleC4gIElmIHRoZVxuICBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsICJJbmRleEVycm9yIiBpcyByYWlzZWQgKGFzc2lnbm1lbnQgdG8gYVxuICBzdWJzY3JpcHRlZCBzZXF1ZW5jZSBjYW5ub3QgYWRkIG5ldyBpdGVtcyB0byBhIGxpc3QpLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IGhhdmUgYSB0eXBlIGNvbXBhdGlibGUgd2l0aCB0aGUgbWFwcGluZ1wncyBrZXkgdHlwZSxcbiAgYW5kIHRoZSBtYXBwaW5nIGlzIHRoZW4gYXNrZWQgdG8gY3JlYXRlIGEga2V5L2RhdHVtIHBhaXIgd2hpY2ggbWFwc1xuICB0aGUgc3Vic2NyaXB0IHRvIHRoZSBhc3NpZ25lZCBvYmplY3QuICBUaGlzIGNhbiBlaXRoZXIgcmVwbGFjZSBhblxuICBleGlzdGluZyBrZXkvdmFsdWUgcGFpciB3aXRoIHRoZSBzYW1lIGtleSB2YWx1ZSwgb3IgaW5zZXJ0IGEgbmV3XG4gIGtleS92YWx1ZSBwYWlyIChpZiBubyBrZXkgd2l0aCB0aGUgc2FtZSB2YWx1ZSBleGlzdGVkKS5cblxuICBGb3IgdXNlci1kZWZpbmVkIG9iamVjdHMsIHRoZSAiX19zZXRpdGVtX18oKSIgbWV0aG9kIGlzIGNhbGxlZCB3aXRoXG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2xpY2luZzogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0XG4gIChzdWNoIGFzIGEgbGlzdCkuICBUaGUgYXNzaWduZWQgb2JqZWN0IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9iamVjdFxuICBvZiB0aGUgc2FtZSB0eXBlLiAgTmV4dCwgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZCBleHByZXNzaW9ucyBhcmVcbiAgZXZhbHVhdGVkLCBpbnNvZmFyIHRoZXkgYXJlIHByZXNlbnQ7IGRlZmF1bHRzIGFyZSB6ZXJvIGFuZCB0aGVcbiAgc2VxdWVuY2VcJ3MgbGVuZ3RoLiAgVGhlIGJvdW5kcyBzaG91bGQgZXZhbHVhdGUgdG8gaW50ZWdlcnMuIElmXG4gIGVpdGhlciBib3VuZCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZVxuICByZXN1bHRpbmcgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGgsIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZVxuICB0aGUgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZlxuICB0aGUgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIG9iamVjdFxuICBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuV0FSTklORzogQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHNcbmJldHdlZW4gdGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NhZmVcJyAoZm9yXG5leGFtcGxlICJhLCBiID0gYiwgYSIgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZVxuY29sbGVjdGlvbiBvZiBhc3NpZ25lZC10byB2YXJpYWJsZXMgYXJlIG5vdCBzYWZlISAgRm9yIGluc3RhbmNlLCB0aGVcbmZvbGxvd2luZyBwcm9ncmFtIHByaW50cyAiWzAsIDJdIjpcblxuICAgeCA9IFswLCAxXVxuICAgaSA9IDBcbiAgIGksIHhbaV0gPSAxLCAyXG4gICBwcmludCh4KVxuXG5TZWUgYWxzbzogKipQRVAgMzEzMioqIC0gRXh0ZW5kZWQgSXRlcmFibGUgVW5wYWNraW5nXG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSAiKnRhcmdldCIgZmVhdHVyZS5cblxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgInggKz0gMSIgY2FuIGJlIHJld3JpdHRlbiBhc1xuInggPSB4ICsgMSIgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluIHRoZVxuYXVnbWVudGVkIHZlcnNpb24sICJ4IiBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuIHBvc3NpYmxlLFxudGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdCByYXRoZXIgdGhhblxuY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LCB0aGUgb2xkIG9iamVjdFxuaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuV2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFzc2lnbmluZyB0byB0dXBsZXMgYW5kIG11bHRpcGxlIHRhcmdldHMgaW4gYVxuc2luZ2xlIHN0YXRlbWVudCwgdGhlIGFzc2lnbm1lbnQgZG9uZSBieSBhdWdtZW50ZWQgYXNzaWdubWVudFxuc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgYXNzaWdubWVudHMuIFNpbWlsYXJseSxcbndpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUgKmluLXBsYWNlKiBiZWhhdmlvciwgdGhlIGJpbmFyeVxub3BlcmF0aW9uIHBlcmZvcm1lZCBieSBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsXG5iaW5hcnkgb3BlcmF0aW9ucy5cblxuRm9yIHRhcmdldHMgd2hpY2ggYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGUgc2FtZSAqY2F2ZWF0IGFib3V0XG5jbGFzcyBhbmQgaW5zdGFuY2UgYXR0cmlidXRlcyogYXBwbGllcyBhcyBmb3IgcmVndWxhciBhc3NpZ25tZW50cy5cbicsCisgJ2Fzc2lnbm1lbnQnOiAnXG5Bc3NpZ25tZW50IHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NpZ25tZW50IHN0YXRlbWVudHMgYXJlIHVzZWQgdG8gKHJlKWJpbmQgbmFtZXMgdG8gdmFsdWVzIGFuZCB0b1xubW9kaWZ5IGF0dHJpYnV0ZXMgb3IgaXRlbXMgb2YgbXV0YWJsZSBvYmplY3RzOlxuXG4gICBhc3NpZ25tZW50X3N0bXQgOjo9ICh0YXJnZXRfbGlzdCAiPSIpKyAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIHRhcmdldF9saXN0ICAgICA6Oj0gdGFyZ2V0ICgiLCIgdGFyZ2V0KSogWyIsIl1cbiAgIHRhcmdldCAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgICAgICAgICB8ICIoIiB0YXJnZXRfbGlzdCAiKSJcbiAgICAgICAgICAgICAgfCAiWyIgdGFyZ2V0X2xpc3QgIl0iXG4gICAgICAgICAgICAgIHwgYXR0cmlidXRlcmVmXG4gICAgICAgICAgICAgIHwgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgIHwgc2xpY2luZ1xuICAgICAgICAgICAgICB8ICIqIiB0YXJnZXRcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGFzc2lnbm1lbnQgc3RhdGVtZW50IGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBsaXN0IChyZW1lbWJlciB0aGF0XG50aGlzIGNhbiBiZSBhIHNpbmdsZSBleHByZXNzaW9uIG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHRoZSBsYXR0ZXJcbnlpZWxkaW5nIGEgdHVwbGUpIGFuZCBhc3NpZ25zIHRoZSBzaW5nbGUgcmVzdWx0aW5nIG9iamVjdCB0byBlYWNoIG9mXG50aGUgdGFyZ2V0IGxpc3RzLCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cbkFzc2lnbm1lbnQgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBkZXBlbmRpbmcgb24gdGhlIGZvcm0gb2YgdGhlIHRhcmdldFxuKGxpc3QpLiBXaGVuIGEgdGFyZ2V0IGlzIHBhcnQgb2YgYSBtdXRhYmxlIG9iamVjdCAoYW4gYXR0cmlidXRlXG5yZWZlcmVuY2UsIHN1YnNjcmlwdGlvbiBvciBzbGljaW5nKSwgdGhlIG11dGFibGUgb2JqZWN0IG11c3RcbnVsdGltYXRlbHkgcGVyZm9ybSB0aGUgYXNzaWdubWVudCBhbmQgZGVjaWRlIGFib3V0IGl0cyB2YWxpZGl0eSwgYW5kXG5tYXkgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBhc3NpZ25tZW50IGlzIHVuYWNjZXB0YWJsZS4gIFRoZSBydWxlc1xub2JzZXJ2ZWQgYnkgdmFyaW91cyB0eXBlcyBhbmQgdGhlIGV4Y2VwdGlvbnMgcmFpc2VkIGFyZSBnaXZlbiB3aXRoIHRoZVxuZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0IHR5cGVzIChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGVcbmhpZXJhcmNoeSopLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHRhcmdldCBsaXN0LCBvcHRpb25hbGx5IGVuY2xvc2VkIGluXG5wYXJlbnRoZXNlcyBvciBzcXVhcmUgYnJhY2tldHMsIGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXMgZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBzaW5nbGUgdGFyZ2V0OiBUaGUgb2JqZWN0IGlzIGFzc2lnbmVkIHRvXG4gIHRoYXQgdGFyZ2V0LlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRhcmdldHM6IFRoZSBvYmplY3RcbiAgbXVzdCBiZSBhbiBpdGVyYWJsZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtcyBhcyB0aGVyZSBhcmVcbiAgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG9cbiAgcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbiAgKiBJZiB0aGUgdGFyZ2V0IGxpc3QgY29udGFpbnMgb25lIHRhcmdldCBwcmVmaXhlZCB3aXRoIGFuIGFzdGVyaXNrLFxuICAgIGNhbGxlZCBhICJzdGFycmVkIiB0YXJnZXQ6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlIHdpdGggYXRcbiAgICBsZWFzdCBhcyBtYW55IGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgbWludXNcbiAgICBvbmUuICBUaGUgZmlyc3QgaXRlbXMgb2YgdGhlIHNlcXVlbmNlIGFyZSBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvXG4gICAgcmlnaHQsIHRvIHRoZSB0YXJnZXRzIGJlZm9yZSB0aGUgc3RhcnJlZCB0YXJnZXQuICBUaGUgZmluYWwgaXRlbXNcbiAgICBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXRzIGFmdGVyIHRoZSBzdGFycmVkXG4gICAgdGFyZ2V0LiAgQSBsaXN0IG9mIHRoZSByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHNlcXVlbmNlIGlzIHRoZW5cbiAgICBhc3NpZ25lZCB0byB0aGUgc3RhcnJlZCB0YXJnZXQgKHRoZSBsaXN0IGNhbiBiZSBlbXB0eSkuXG5cbiAgKiBFbHNlOiBUaGUgb2JqZWN0IG11c3QgYmUgYSBzZXF1ZW5jZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtc1xuICAgIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmVcbiAgICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHNpbmdsZSB0YXJnZXQgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhc1xuZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGlkZW50aWZpZXIgKG5hbWUpOlxuXG4gICogSWYgdGhlIG5hbWUgZG9lcyBub3Qgb2NjdXIgaW4gYSAiZ2xvYmFsIiBvciAibm9ubG9jYWwiIHN0YXRlbWVudFxuICAgIGluIHRoZSBjdXJyZW50IGNvZGUgYmxvY2s6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlXG4gICAgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UuXG5cbiAgKiBPdGhlcndpc2U6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2VcbiAgICBvciB0aGUgb3V0ZXIgbmFtZXNwYWNlIGRldGVybWluZWQgYnkgIm5vbmxvY2FsIiwgcmVzcGVjdGl2ZWx5LlxuXG4gIFRoZSBuYW1lIGlzIHJlYm91bmQgaWYgaXQgd2FzIGFscmVhZHkgYm91bmQuICBUaGlzIG1heSBjYXVzZSB0aGVcbiAgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUgb2JqZWN0IHByZXZpb3VzbHkgYm91bmQgdG8gdGhlIG5hbWUgdG8gcmVhY2hcbiAgemVybywgY2F1c2luZyB0aGUgb2JqZWN0IHRvIGJlIGRlYWxsb2NhdGVkIGFuZCBpdHMgZGVzdHJ1Y3RvciAoaWYgaXRcbiAgaGFzIG9uZSkgdG8gYmUgY2FsbGVkLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYSB0YXJnZXQgbGlzdCBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcyBvciBpbiBzcXVhcmVcbiAgYnJhY2tldHM6IFRoZSBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYWJsZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCBpdHMgaXRlbXMgYXJlXG4gIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhbiBhdHRyaWJ1dGUgcmVmZXJlbmNlOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluXG4gIHRoZSByZWZlcmVuY2UgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGFuIG9iamVjdCB3aXRoXG4gIGFzc2lnbmFibGUgYXR0cmlidXRlczsgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsICJUeXBlRXJyb3IiIGlzXG4gIHJhaXNlZC4gIFRoYXQgb2JqZWN0IGlzIHRoZW4gYXNrZWQgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG9cbiAgdGhlIGdpdmVuIGF0dHJpYnV0ZTsgaWYgaXQgY2Fubm90IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQsIGl0IHJhaXNlc1xuICBhbiBleGNlcHRpb24gKHVzdWFsbHkgYnV0IG5vdCBuZWNlc3NhcmlseSAiQXR0cmlidXRlRXJyb3IiKS5cblxuICBOb3RlOiBJZiB0aGUgb2JqZWN0IGlzIGEgY2xhc3MgaW5zdGFuY2UgYW5kIHRoZSBhdHRyaWJ1dGUgcmVmZXJlbmNlXG4gIG9jY3VycyBvbiBib3RoIHNpZGVzIG9mIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yLCB0aGUgUkhTIGV4cHJlc3Npb24sXG4gICJhLngiIGNhbiBhY2Nlc3MgZWl0aGVyIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBvciAoaWYgbm8gaW5zdGFuY2VcbiAgYXR0cmlidXRlIGV4aXN0cykgYSBjbGFzcyBhdHRyaWJ1dGUuICBUaGUgTEhTIHRhcmdldCAiYS54IiBpcyBhbHdheXNcbiAgc2V0IGFzIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LiAgVGh1cywgdGhlXG4gIHR3byBvY2N1cnJlbmNlcyBvZiAiYS54IiBkbyBub3QgbmVjZXNzYXJpbHkgcmVmZXIgdG8gdGhlIHNhbWVcbiAgYXR0cmlidXRlOiBpZiB0aGUgUkhTIGV4cHJlc3Npb24gcmVmZXJzIHRvIGEgY2xhc3MgYXR0cmlidXRlLCB0aGVcbiAgTEhTIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgYXR0cmlidXRlIGFzIHRoZSB0YXJnZXQgb2YgdGhlXG4gIGFzc2lnbm1lbnQ6XG5cbiAgICAgY2xhc3MgQ2xzOlxuICAgICAgICAgeCA9IDMgICAgICAgICAgICAgIyBjbGFzcyB2YXJpYWJsZVxuICAgICBpbnN0ID0gQ2xzKClcbiAgICAgaW5zdC54ID0gaW5zdC54ICsgMSAgICMgd3JpdGVzIGluc3QueCBhcyA0IGxlYXZpbmcgQ2xzLnggYXMgM1xuXG4gIFRoaXMgZGVzY3JpcHRpb24gZG9lcyBub3QgbmVjZXNzYXJpbHkgYXBwbHkgdG8gZGVzY3JpcHRvclxuICBhdHRyaWJ1dGVzLCBzdWNoIGFzIHByb3BlcnRpZXMgY3JlYXRlZCB3aXRoICJwcm9wZXJ0eSgpIi5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc3Vic2NyaXB0aW9uOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluIHRoZVxuICByZWZlcmVuY2UgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGVpdGhlciBhIG11dGFibGUgc2VxdWVuY2VcbiAgb2JqZWN0IChzdWNoIGFzIGEgbGlzdCkgb3IgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLlxuICBOZXh0LCB0aGUgc3Vic2NyaXB0IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbXV0YWJsZSBzZXF1ZW5jZSBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IHlpZWxkIGFuIGludGVnZXIuICBJZiBpdCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzXG4gIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlXG4gIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGgsIGFuZCB0aGUgc2VxdWVuY2UgaXMgYXNrZWRcbiAgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG8gaXRzIGl0ZW0gd2l0aCB0aGF0IGluZGV4LiAgSWYgdGhlXG4gIGluZGV4IGlzIG91dCBvZiByYW5nZSwgIkluZGV4RXJyb3IiIGlzIHJhaXNlZCAoYXNzaWdubWVudCB0byBhXG4gIHN1YnNjcmlwdGVkIHNlcXVlbmNlIGNhbm5vdCBhZGQgbmV3IGl0ZW1zIHRvIGEgbGlzdCkuXG5cbiAgSWYgdGhlIHByaW1hcnkgaXMgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLCB0aGVcbiAgc3Vic2NyaXB0IG11c3QgaGF2ZSBhIHR5cGUgY29tcGF0aWJsZSB3aXRoIHRoZSBtYXBwaW5nXCdzIGtleSB0eXBlLFxuICBhbmQgdGhlIG1hcHBpbmcgaXMgdGhlbiBhc2tlZCB0byBjcmVhdGUgYSBrZXkvZGF0dW0gcGFpciB3aGljaCBtYXBzXG4gIHRoZSBzdWJzY3JpcHQgdG8gdGhlIGFzc2lnbmVkIG9iamVjdC4gIFRoaXMgY2FuIGVpdGhlciByZXBsYWNlIGFuXG4gIGV4aXN0aW5nIGtleS92YWx1ZSBwYWlyIHdpdGggdGhlIHNhbWUga2V5IHZhbHVlLCBvciBpbnNlcnQgYSBuZXdcbiAga2V5L3ZhbHVlIHBhaXIgKGlmIG5vIGtleSB3aXRoIHRoZSBzYW1lIHZhbHVlIGV4aXN0ZWQpLlxuXG4gIEZvciB1c2VyLWRlZmluZWQgb2JqZWN0cywgdGhlICJfX3NldGl0ZW1fXygpIiBtZXRob2QgaXMgY2FsbGVkIHdpdGhcbiAgYXBwcm9wcmlhdGUgYXJndW1lbnRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYSBzbGljaW5nOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluIHRoZSByZWZlcmVuY2VcbiAgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGEgbXV0YWJsZSBzZXF1ZW5jZSBvYmplY3QgKHN1Y2ggYXMgYVxuICBsaXN0KS4gIFRoZSBhc3NpZ25lZCBvYmplY3Qgc2hvdWxkIGJlIGEgc2VxdWVuY2Ugb2JqZWN0IG9mIHRoZSBzYW1lXG4gIHR5cGUuICBOZXh0LCB0aGUgbG93ZXIgYW5kIHVwcGVyIGJvdW5kIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQsXG4gIGluc29mYXIgdGhleSBhcmUgcHJlc2VudDsgZGVmYXVsdHMgYXJlIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGguICBUaGUgYm91bmRzIHNob3VsZCBldmFsdWF0ZSB0byBpbnRlZ2Vycy4gSWYgZWl0aGVyIGJvdW5kIGlzXG4gIG5lZ2F0aXZlLCB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoIGlzIGFkZGVkIHRvIGl0LiAgVGhlIHJlc3VsdGluZ1xuICBib3VuZHMgYXJlIGNsaXBwZWQgdG8gbGllIGJldHdlZW4gemVybyBhbmQgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCxcbiAgaW5jbHVzaXZlLiAgRmluYWxseSwgdGhlIHNlcXVlbmNlIG9iamVjdCBpcyBhc2tlZCB0byByZXBsYWNlIHRoZVxuICBzbGljZSB3aXRoIHRoZSBpdGVtcyBvZiB0aGUgYXNzaWduZWQgc2VxdWVuY2UuICBUaGUgbGVuZ3RoIG9mIHRoZVxuICBzbGljZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIGxlbmd0aCBvZiB0aGUgYXNzaWduZWQgc2VxdWVuY2UsXG4gIHRodXMgY2hhbmdpbmcgdGhlIGxlbmd0aCBvZiB0aGUgdGFyZ2V0IHNlcXVlbmNlLCBpZiB0aGUgb2JqZWN0XG4gIGFsbG93cyBpdC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlXG5zeW50YXggZm9yIHRhcmdldHMgaXMgdGFrZW4gdG8gYmUgdGhlIHNhbWUgYXMgZm9yIGV4cHJlc3Npb25zLCBhbmRcbmludmFsaWQgc3ludGF4IGlzIHJlamVjdGVkIGR1cmluZyB0aGUgY29kZSBnZW5lcmF0aW9uIHBoYXNlLCBjYXVzaW5nXG5sZXNzIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzLlxuXG5XQVJOSU5HOiBBbHRob3VnaCB0aGUgZGVmaW5pdGlvbiBvZiBhc3NpZ25tZW50IGltcGxpZXMgdGhhdCBvdmVybGFwc1xuYmV0d2VlbiB0aGUgbGVmdC1oYW5kIHNpZGUgYW5kIHRoZSByaWdodC1oYW5kIHNpZGUgYXJlIFwnc2FmZVwnIChmb3JcbmV4YW1wbGUgImEsIGIgPSBiLCBhIiBzd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlXG5jb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvIHZhcmlhYmxlcyBhcmUgbm90IHNhZmUhICBGb3IgaW5zdGFuY2UsIHRoZVxuZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzICJbMCwgMl0iOlxuXG4gICB4ID0gWzAsIDFdXG4gICBpID0gMFxuICAgaSwgeFtpXSA9IDEsIDJcbiAgIHByaW50KHgpXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTMyKiogLSBFeHRlbmRlZCBJdGVyYWJsZSBVbnBhY2tpbmdcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgIip0YXJnZXQiIGZlYXR1cmUuXG5cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgY29tYmluYXRpb24sIGluIGEgc2luZ2xlIHN0YXRlbWVudCwgb2YgYVxuYmluYXJ5IG9wZXJhdGlvbiBhbmQgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQ6XG5cbiAgIGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXQgOjo9IGF1Z3RhcmdldCBhdWdvcCAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIGF1Z3RhcmdldCAgICAgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXIgfCBhdHRyaWJ1dGVyZWYgfCBzdWJzY3JpcHRpb24gfCBzbGljaW5nXG4gICBhdWdvcCAgICAgICAgICAgICAgICAgICAgIDo6PSAiKz0iIHwgIi09IiB8ICIqPSIgfCAiLz0iIHwgIi8vPSIgfCAiJT0iIHwgIioqPSJcbiAgICAgICAgICAgICB8ICI+Pj0iIHwgIjw8PSIgfCAiJj0iIHwgIl49IiB8ICJ8PSJcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV2YWx1YXRlcyB0aGUgdGFyZ2V0ICh3aGljaCwgdW5saWtlIG5vcm1hbFxuYXNzaWdubWVudCBzdGF0ZW1lbnRzLCBjYW5ub3QgYmUgYW4gdW5wYWNraW5nKSBhbmQgdGhlIGV4cHJlc3Npb25cbmxpc3QsIHBlcmZvcm1zIHRoZSBiaW5hcnkgb3BlcmF0aW9uIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIGFzc2lnbm1lbnRcbm9uIHRoZSB0d28gb3BlcmFuZHMsIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgdG8gdGhlIG9yaWdpbmFsIHRhcmdldC5cblRoZSB0YXJnZXQgaXMgb25seSBldmFsdWF0ZWQgb25jZS5cblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBsaWtlICJ4ICs9IDEiIGNhbiBiZSByZXdyaXR0ZW4gYXNcbiJ4ID0geCArIDEiIHRvIGFjaGlldmUgYSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgZWZmZWN0LiBJbiB0aGVcbmF1Z21lbnRlZCB2ZXJzaW9uLCAieCIgaXMgb25seSBldmFsdWF0ZWQgb25jZS4gQWxzbywgd2hlbiBwb3NzaWJsZSxcbnRoZSBhY3R1YWwgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCAqaW4tcGxhY2UqLCBtZWFuaW5nIHRoYXQgcmF0aGVyIHRoYW5cbmNyZWF0aW5nIGEgbmV3IG9iamVjdCBhbmQgYXNzaWduaW5nIHRoYXQgdG8gdGhlIHRhcmdldCwgdGhlIG9sZCBvYmplY3RcbmlzIG1vZGlmaWVkIGluc3RlYWQuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAogICdhdG9tLWlkZW50aWZpZXJzJzogJ1xuSWRlbnRpZmllcnMgKE5hbWVzKVxuKioqKioqKioqKioqKioqKioqKlxuXG5BbiBpZGVudGlmaWVyIG9jY3VycmluZyBhcyBhbiBhdG9tIGlzIGEgbmFtZS4gIFNlZSBzZWN0aW9uXG4qSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKiBmb3IgbGV4aWNhbCBkZWZpbml0aW9uIGFuZCBzZWN0aW9uICpOYW1pbmdcbmFuZCBiaW5kaW5nKiBmb3IgZG9jdW1lbnRhdGlvbiBvZiBuYW1pbmcgYW5kIGJpbmRpbmcuXG5cbldoZW4gdGhlIG5hbWUgaXMgYm91bmQgdG8gYW4gb2JqZWN0LCBldmFsdWF0aW9uIG9mIHRoZSBhdG9tIHlpZWxkc1xudGhhdCBvYmplY3QuIFdoZW4gYSBuYW1lIGlzIG5vdCBib3VuZCwgYW4gYXR0ZW1wdCB0byBldmFsdWF0ZSBpdFxucmFpc2VzIGEgIk5hbWVFcnJvciIgZXhjZXB0aW9uLlxuXG4qKlByaXZhdGUgbmFtZSBtYW5nbGluZzoqKiBXaGVuIGFuIGlkZW50aWZpZXIgdGhhdCB0ZXh0dWFsbHkgb2NjdXJzIGluXG5hIGNsYXNzIGRlZmluaXRpb24gYmVnaW5zIHdpdGggdHdvIG9yIG1vcmUgdW5kZXJzY29yZSBjaGFyYWN0ZXJzIGFuZFxuZG9lcyBub3QgZW5kIGluIHR3byBvciBtb3JlIHVuZGVyc2NvcmVzLCBpdCBpcyBjb25zaWRlcmVkIGEgKnByaXZhdGVcbm5hbWUqIG9mIHRoYXQgY2xhc3MuIFByaXZhdGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgbG9uZ2VyIGZvcm1cbmJlZm9yZSBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgdGhlbS4gIFRoZSB0cmFuc2Zvcm1hdGlvbiBpbnNlcnRzIHRoZVxuY2xhc3MgbmFtZSwgd2l0aCBsZWFkaW5nIHVuZGVyc2NvcmVzIHJlbW92ZWQgYW5kIGEgc2luZ2xlIHVuZGVyc2NvcmVcbmluc2VydGVkLCBpbiBmcm9udCBvZiB0aGUgbmFtZS4gIEZvciBleGFtcGxlLCB0aGUgaWRlbnRpZmllciAiX19zcGFtIlxub2NjdXJyaW5nIGluIGEgY2xhc3MgbmFtZWQgIkhhbSIgd2lsbCBiZSB0cmFuc2Zvcm1lZCB0byAiX0hhbV9fc3BhbSIuXG5UaGlzIHRyYW5zZm9ybWF0aW9uIGlzIGluZGVwZW5kZW50IG9mIHRoZSBzeW50YWN0aWNhbCBjb250ZXh0IGluIHdoaWNoXG50aGUgaWRlbnRpZmllciBpcyB1c2VkLiAgSWYgdGhlIHRyYW5zZm9ybWVkIG5hbWUgaXMgZXh0cmVtZWx5IGxvbmdcbihsb25nZXIgdGhhbiAyNTUgY2hhcmFjdGVycyksIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHJ1bmNhdGlvbiBtYXlcbmhhcHBlbi4gSWYgdGhlIGNsYXNzIG5hbWUgY29uc2lzdHMgb25seSBvZiB1bmRlcnNjb3Jlcywgbm9cbnRyYW5zZm9ybWF0aW9uIGlzIGRvbmUuXG4nLAogICdhdG9tLWxpdGVyYWxzJzogIlxuTGl0ZXJhbHNcbioqKioqKioqXG5cblB5dGhvbiBzdXBwb3J0cyBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIGFuZCB2YXJpb3VzIG51bWVyaWNcbmxpdGVyYWxzOlxuXG4gICBsaXRlcmFsIDo6PSBzdHJpbmdsaXRlcmFsIHwgYnl0ZXNsaXRlcmFsXG4gICAgICAgICAgICAgICB8IGludGVnZXIgfCBmbG9hdG51bWJlciB8IGltYWdudW1iZXJcblxuRXZhbHVhdGlvbiBvZiBhIGxpdGVyYWwgeWllbGRzIGFuIG9iamVjdCBvZiB0aGUgZ2l2ZW4gdHlwZSAoc3RyaW5nLFxuYnl0ZXMsIGludGVnZXIsIGZsb2F0aW5nIHBvaW50IG51bWJlciwgY29tcGxleCBudW1iZXIpIHdpdGggdGhlIGdpdmVuXG52YWx1ZS4gIFRoZSB2YWx1ZSBtYXkgYmUgYXBwcm94aW1hdGVkIGluIHRoZSBjYXNlIG9mIGZsb2F0aW5nIHBvaW50XG5hbmQgaW1hZ2luYXJ5IChjb21wbGV4KSBsaXRlcmFscy4gIFNlZSBzZWN0aW9uICpMaXRlcmFscyogZm9yIGRldGFpbHMuXG5cbkFsbCBsaXRlcmFscyBjb3JyZXNwb25kIHRvIGltbXV0YWJsZSBkYXRhIHR5cGVzLCBhbmQgaGVuY2UgdGhlXG5vYmplY3QncyBpZGVudGl0eSBpcyBsZXNzIGltcG9ydGFudCB0aGFuIGl0cyB2YWx1ZS4gIE11bHRpcGxlXG5ldmFsdWF0aW9ucyBvZiBsaXRlcmFscyB3aXRoIHRoZSBzYW1lIHZhbHVlIChlaXRoZXIgdGhlIHNhbWVcbm9jY3VycmVuY2UgaW4gdGhlIHByb2dyYW0gdGV4dCBvciBhIGRpZmZlcmVudCBvY2N1cnJlbmNlKSBtYXkgb2J0YWluXG50aGUgc2FtZSBvYmplY3Qgb3IgYSBkaWZmZXJlbnQgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUuXG4iLAotICdhdHRyaWJ1dGUtYWNjZXNzJzogJ1xuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mICJ4Lm5hbWUiKSBmb3JcbmNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgInNlbGYiKS4gICJuYW1lIiBpcyB0aGUgYXR0cmlidXRlIG5hbWUuIFRoaXNcbiAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICAiX19nZXRhdHRyX18oKSIgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiAiX19nZXRhdHRyX18oKSIgYW5kICJfX3NldGF0dHJfXygpIi4pIFRoaXMgaXMgZG9uZSBib3RoIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSAiX19nZXRhdHRyX18oKSIgd291bGQgaGF2ZVxuICAgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGUgdGhhdCBhdFxuICAgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnkgbm90XG4gICBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXMgIl9fZ2V0YXR0cl9fKCkiLFxuICAgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzICJfX2dldGF0dHJpYnV0ZV9fKCkiIGVpdGhlclxuICAgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW4gIkF0dHJpYnV0ZUVycm9yIi4gVGhpcyBtZXRob2RcbiAgIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi4gSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluXG4gICB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzc1xuICAgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0byBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvclxuICAgZXhhbXBsZSwgIm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpIi5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsXG4gICAgIG1ldGhvZHMgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXhcbiAgICAgb3IgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgIl9fc2V0YXR0cl9fKCkiIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgICJvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpIi5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgIl9fc2V0YXR0cl9fKCkiIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmICJkZWwgb2JqLm5hbWUiIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiAiZGlyKCkiIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiAiZGlyKCkiIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyAiX19kaWN0X18iLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgIk5vbmUiIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiAiQXR0cmlidXRlRXJyb3IiXG4gICBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiwgYW5kXG4iX19kZWxldGVfXygpIi4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCwgaXRcbmlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgImEueCIgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoICJhLl9fZGljdF9fW1wneFwnXSIsIHRoZW5cbiJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXSIsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuInR5cGUoYSkiIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgImEueCIuIEhvd1xudGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gImEiOlxuXG5EaXJlY3QgQ2FsbFxuICAgVGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb21tb24gY2FsbCBpcyB3aGVuIHVzZXIgY29kZSBkaXJlY3RseVxuICAgaW52b2tlcyBhIGRlc2NyaXB0b3IgbWV0aG9kOiAgICAieC5fX2dldF9fKGEpIi5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsICJhLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiAidHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKSIuXG5cbkNsYXNzIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBjbGFzcywgIkEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgICJBLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKE5vbmUsIEEpIi5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgImEiIGlzIGFuIGluc3RhbmNlIG9mICJzdXBlciIsIHRoZW4gdGhlIGJpbmRpbmcgInN1cGVyKEIsXG4gICBvYmopLm0oKSIgc2VhcmNoZXMgIm9iai5fX2NsYXNzX18uX19tcm9fXyIgZm9yIHRoZSBiYXNlIGNsYXNzICJBIlxuICAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nICJCIiBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yIHdpdGggdGhlXG4gICBjYWxsOiAiQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pIi5cblxuRm9yIGluc3RhbmNlIGJpbmRpbmdzLCB0aGUgcHJlY2VkZW5jZSBvZiBkZXNjcmlwdG9yIGludm9jYXRpb24gZGVwZW5kc1xub24gdGhlIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyBhcmUgZGVmaW5lZC4gIEEgZGVzY3JpcHRvciBjYW4gZGVmaW5lXG5hbnkgY29tYmluYXRpb24gb2YgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiIGFuZCAiX19kZWxldGVfXygpIi4gIElmIGl0XG5kb2VzIG5vdCBkZWZpbmUgIl9fZ2V0X18oKSIsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbCByZXR1cm5cbnRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlIG9iamVjdFwnc1xuaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgIl9fc2V0X18oKSIgYW5kL29yXG4iX19kZWxldGVfXygpIiwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXMgbmVpdGhlciwgaXQgaXNcbmEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzIGRlZmluZSBib3RoXG4iX19nZXRfXygpIiBhbmQgIl9fc2V0X18oKSIsIHdoaWxlIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGVcbiJfX2dldF9fKCkiIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aCAiX19zZXRfXygpIiBhbmQgIl9fZ2V0X18oKSJcbmRlZmluZWQgYWx3YXlzIG92ZXJyaWRlIGEgcmVkZWZpbml0aW9uIGluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJblxuY29udHJhc3QsIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyAic3RhdGljbWV0aG9kKCkiIGFuZCAiY2xhc3NtZXRob2QoKSIpIGFyZVxuaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSAicHJvcGVydHkoKSIgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbj09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBoYXZlIGEgZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlXG5zdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHMgaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlXG52YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZSBhY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlXG5udW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBjbGFzc1xuZGVmaW5pdGlvbi4gVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbnZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0byBob2xkIGFcbnZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzIG5vdFxuY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxub2JqZWN0Ll9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmRcbiAgIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3JcbiAgIGVhY2ggaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyAiQXR0cmlidXRlRXJyb3IiLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICAiXCdfX2RpY3RfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXNcbiAgZGVmaW5pbmcgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICBpbnN0YW5jZXMuIElmIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZFxuICAiXCdfX3dlYWtyZWZfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZVxuICBpbnN0YW5jZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlXG4gIChleGNlcHQgYnkgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS5cbiAgVGhpcyByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzICJpbnQiLCAiYnl0ZXMiIGFuZCAidHVwbGUiLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3NcbiAgbWF5IGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuJywKKyAnYXR0cmlidXRlLWFjY2Vzcyc6ICdcbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3NcbioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiAieC5uYW1lIikgZm9yXG5jbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yICJzZWxmIikuICAibmFtZSIgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLiBUaGlzXG4gICBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgIl9fZ2V0YXR0cl9fKCkiIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gIl9fZ2V0YXR0cl9fKCkiIGFuZCAiX19zZXRhdHRyX18oKSIuKSBUaGlzIGlzIGRvbmUgYm90aCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgIl9fZ2V0YXR0cl9fKCkiIHdvdWxkIGhhdmVcbiAgIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlIHRoYXQgYXRcbiAgIGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5IG5vdFxuICAgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgb3ZlciBhdHRyaWJ1dGUgYWNjZXNzLlxuXG5vYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgdW5jb25kaXRpb25hbGx5IHRvIGltcGxlbWVudCBhdHRyaWJ1dGUgYWNjZXNzZXMgZm9yXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLiBJZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzICJfX2dldGF0dHJfXygpIixcbiAgIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzcyAiX19nZXRhdHRyaWJ1dGVfXygpIiBlaXRoZXJcbiAgIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuICJBdHRyaWJ1dGVFcnJvciIuIFRoaXMgbWV0aG9kXG4gICBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uIEluIG9yZGVyIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpblxuICAgdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGJhc2UgY2xhc3NcbiAgIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gYWNjZXNzIGFueSBhdHRyaWJ1dGVzIGl0IG5lZWRzLCBmb3JcbiAgIGV4YW1wbGUsICJvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKSIuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzXG4gICAgIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4IG9yXG4gICAgIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmICJfX3NldGF0dHJfXygpIiB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICAib2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKSIuXG5cbm9iamVjdC5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBMaWtlICJfX3NldGF0dHJfXygpIiBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiAiZGVsIG9iai5uYW1lIiBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxub2JqZWN0Ll9fZGlyX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gImRpcigpIiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdC4gQSBzZXF1ZW5jZSBtdXN0IGJlXG4gICByZXR1cm5lZC4gImRpcigpIiBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG49PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgIl9fZGljdF9fIi5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yICJOb25lIiB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW4gIkF0dHJpYnV0ZUVycm9yIlxuICAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5UaGUgYXR0cmlidXRlICJfX29iamNsYXNzX18iIGlzIGludGVycHJldGVkIGJ5IHRoZSAiaW5zcGVjdCIgbW9kdWxlIGFzXG5zcGVjaWZ5aW5nIHRoZSBjbGFzcyB3aGVyZSB0aGlzIG9iamVjdCB3YXMgZGVmaW5lZCAoc2V0dGluZyB0aGlzXG5hcHByb3ByaWF0ZWx5IGNhbiBhc3Npc3QgaW4gcnVudGltZSBpbnRyb3NwZWN0aW9uIG9mIGR5bmFtaWMgY2xhc3NcbmF0dHJpYnV0ZXMpLiBGb3IgY2FsbGFibGVzLCBpdCBtYXkgaW5kaWNhdGUgdGhhdCBhbiBpbnN0YW5jZSBvZiB0aGVcbmdpdmVuIHR5cGUgKG9yIGEgc3ViY2xhc3MpIGlzIGV4cGVjdGVkIG9yIHJlcXVpcmVkIGFzIHRoZSBmaXJzdFxucG9zaXRpb25hbCBhcmd1bWVudCAoZm9yIGV4YW1wbGUsIENQeXRob24gc2V0cyB0aGlzIGF0dHJpYnV0ZSBmb3JcbnVuYm91bmQgbWV0aG9kcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBpbiBDKS5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuPT09PT09PT09PT09PT09PT09PT1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiLCBhbmRcbiJfX2RlbGV0ZV9fKCkiLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LCBpdFxuaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCAiYS54IiBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggImEuX19kaWN0X19bXCd4XCddIiwgdGhlblxuInR5cGUoYSkuX19kaWN0X19bXCd4XCddIiwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG4idHlwZShhKSIgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCAiYS54Ii4gSG93XG50aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiAiYSI6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgICJ4Ll9fZ2V0X18oYSkiLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgImEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6ICJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpIi5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCAiQS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgIkEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSkiLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiAiYSIgaXMgYW4gaW5zdGFuY2Ugb2YgInN1cGVyIiwgdGhlbiB0aGUgYmluZGluZyAic3VwZXIoQixcbiAgIG9iaikubSgpIiBzZWFyY2hlcyAib2JqLl9fY2xhc3NfXy5fX21yb19fIiBmb3IgdGhlIGJhc2UgY2xhc3MgIkEiXG4gICBpbW1lZGlhdGVseSBwcmVjZWRpbmcgIkIiIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3Igd2l0aCB0aGVcbiAgIGNhbGw6ICJBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXykiLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIgYW5kICJfX2RlbGV0ZV9fKCkiLiAgSWYgaXRcbmRvZXMgbm90IGRlZmluZSAiX19nZXRfXygpIiwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIHJldHVyblxudGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGUgb2JqZWN0XCdzXG5pbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyAiX19zZXRfXygpIiBhbmQvb3JcbiJfX2RlbGV0ZV9fKCkiLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lcyBuZWl0aGVyLCBpdCBpc1xuYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnMgZGVmaW5lIGJvdGhcbiJfX2dldF9fKCkiIGFuZCAiX19zZXRfXygpIiwgd2hpbGUgbm9uLWRhdGEgZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZVxuIl9fZ2V0X18oKSIgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoICJfX3NldF9fKCkiIGFuZCAiX19nZXRfXygpIlxuZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb24gaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluXG5jb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nICJzdGF0aWNtZXRob2QoKSIgYW5kICJjbGFzc21ldGhvZCgpIikgYXJlXG5pbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlICJwcm9wZXJ0eSgpIiBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuPT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzICJBdHRyaWJ1dGVFcnJvciIuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gICJcJ19fZGljdF9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3NlcyBkZWZpbmluZ1xuICAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGluc3RhbmNlcy4gSWYgd2Vha1xuICByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkICJcJ19fd2Vha3JlZl9fXCciIHRvIHRoZVxuICBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlIGluc3RhbmNlXG4gIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGUgKGV4Y2VwdCBieVxuICByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLiBUaGlzXG4gIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgImludCIsICJieXRlcyIgYW5kICJ0dXBsZSIuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5ncyBtYXlcbiAgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG4nLAogICdhdHRyaWJ1dGUtcmVmZXJlbmNlcyc6ICdcbkF0dHJpYnV0ZSByZWZlcmVuY2VzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BbiBhdHRyaWJ1dGUgcmVmZXJlbmNlIGlzIGEgcHJpbWFyeSBmb2xsb3dlZCBieSBhIHBlcmlvZCBhbmQgYSBuYW1lOlxuXG4gICBhdHRyaWJ1dGVyZWYgOjo9IHByaW1hcnkgIi4iIGlkZW50aWZpZXJcblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3Qgb2YgYSB0eXBlIHRoYXQgc3VwcG9ydHNcbmF0dHJpYnV0ZSByZWZlcmVuY2VzLCB3aGljaCBtb3N0IG9iamVjdHMgZG8uICBUaGlzIG9iamVjdCBpcyB0aGVuXG5hc2tlZCB0byBwcm9kdWNlIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpcyB0aGUgaWRlbnRpZmllciAod2hpY2ggY2FuXG5iZSBjdXN0b21pemVkIGJ5IG92ZXJyaWRpbmcgdGhlICJfX2dldGF0dHJfXygpIiBtZXRob2QpLiAgSWYgdGhpc1xuYXR0cmlidXRlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBleGNlcHRpb24gIkF0dHJpYnV0ZUVycm9yIiBpcyByYWlzZWQuXG5PdGhlcndpc2UsIHRoZSB0eXBlIGFuZCB2YWx1ZSBvZiB0aGUgb2JqZWN0IHByb2R1Y2VkIGlzIGRldGVybWluZWQgYnlcbnRoZSBvYmplY3QuICBNdWx0aXBsZSBldmFsdWF0aW9ucyBvZiB0aGUgc2FtZSBhdHRyaWJ1dGUgcmVmZXJlbmNlIG1heVxueWllbGQgZGlmZmVyZW50IG9iamVjdHMuXG4nLAogICdhdWdhc3NpZ24nOiAnXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgInggKz0gMSIgY2FuIGJlIHJld3JpdHRlbiBhc1xuInggPSB4ICsgMSIgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluIHRoZVxuYXVnbWVudGVkIHZlcnNpb24sICJ4IiBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuIHBvc3NpYmxlLFxudGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdCByYXRoZXIgdGhhblxuY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LCB0aGUgb2xkIG9iamVjdFxuaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuV2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFzc2lnbmluZyB0byB0dXBsZXMgYW5kIG11bHRpcGxlIHRhcmdldHMgaW4gYVxuc2luZ2xlIHN0YXRlbWVudCwgdGhlIGFzc2lnbm1lbnQgZG9uZSBieSBhdWdtZW50ZWQgYXNzaWdubWVudFxuc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgYXNzaWdubWVudHMuIFNpbWlsYXJseSxcbndpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUgKmluLXBsYWNlKiBiZWhhdmlvciwgdGhlIGJpbmFyeVxub3BlcmF0aW9uIHBlcmZvcm1lZCBieSBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsXG5iaW5hcnkgb3BlcmF0aW9ucy5cblxuRm9yIHRhcmdldHMgd2hpY2ggYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGUgc2FtZSAqY2F2ZWF0IGFib3V0XG5jbGFzcyBhbmQgaW5zdGFuY2UgYXR0cmlidXRlcyogYXBwbGllcyBhcyBmb3IgcmVndWxhciBhc3NpZ25tZW50cy5cbicsCiAgJ2JpbmFyeSc6ICdcbkJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgaGF2ZSB0aGUgY29udmVudGlvbmFsIHByaW9yaXR5XG5sZXZlbHMuICBOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBvcGVyYXRpb25zIGFsc28gYXBwbHkgdG8gY2VydGFpbiBub24tXG5udW1lcmljIHR5cGVzLiAgQXBhcnQgZnJvbSB0aGUgcG93ZXIgb3BlcmF0b3IsIHRoZXJlIGFyZSBvbmx5IHR3b1xubGV2ZWxzLCBvbmUgZm9yIG11bHRpcGxpY2F0aXZlIG9wZXJhdG9ycyBhbmQgb25lIGZvciBhZGRpdGl2ZVxub3BlcmF0b3JzOlxuXG4gICBtX2V4cHIgOjo9IHVfZXhwciB8IG1fZXhwciAiKiIgdV9leHByIHwgbV9leHByICIvLyIgdV9leHByIHwgbV9leHByICIvIiB1X2V4cHJcbiAgICAgICAgICAgICAgfCBtX2V4cHIgIiUiIHVfZXhwclxuICAgYV9leHByIDo6PSBtX2V4cHIgfCBhX2V4cHIgIisiIG1fZXhwciB8IGFfZXhwciAiLSIgbV9leHByXG5cblRoZSAiKiIgKG11bHRpcGxpY2F0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIHByb2R1Y3Qgb2YgaXRzIGFyZ3VtZW50cy5cblRoZSBhcmd1bWVudHMgbXVzdCBlaXRoZXIgYm90aCBiZSBudW1iZXJzLCBvciBvbmUgYXJndW1lbnQgbXVzdCBiZSBhblxuaW50ZWdlciBhbmQgdGhlIG90aGVyIG11c3QgYmUgYSBzZXF1ZW5jZS4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGVcbm51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlIGFuZCB0aGVuIG11bHRpcGxpZWQgdG9nZXRoZXIuXG5JbiB0aGUgbGF0dGVyIGNhc2UsIHNlcXVlbmNlIHJlcGV0aXRpb24gaXMgcGVyZm9ybWVkOyBhIG5lZ2F0aXZlXG5yZXBldGl0aW9uIGZhY3RvciB5aWVsZHMgYW4gZW1wdHkgc2VxdWVuY2UuXG5cblRoZSAiLyIgKGRpdmlzaW9uKSBhbmQgIi8vIiAoZmxvb3IgZGl2aXNpb24pIG9wZXJhdG9ycyB5aWVsZCB0aGVcbnF1b3RpZW50IG9mIHRoZWlyIGFyZ3VtZW50cy4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgZmlyc3RcbmNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiBEaXZpc2lvbiBvZiBpbnRlZ2VycyB5aWVsZHMgYSBmbG9hdCwgd2hpbGVcbmZsb29yIGRpdmlzaW9uIG9mIGludGVnZXJzIHJlc3VsdHMgaW4gYW4gaW50ZWdlcjsgdGhlIHJlc3VsdCBpcyB0aGF0XG5vZiBtYXRoZW1hdGljYWwgZGl2aXNpb24gd2l0aCB0aGUgXCdmbG9vclwnIGZ1bmN0aW9uIGFwcGxpZWQgdG8gdGhlXG5yZXN1bHQuICBEaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyB0aGUgIlplcm9EaXZpc2lvbkVycm9yIiBleGNlcHRpb24uXG5cblRoZSAiJSIgKG1vZHVsbykgb3BlcmF0b3IgeWllbGRzIHRoZSByZW1haW5kZXIgZnJvbSB0aGUgZGl2aXNpb24gb2ZcbnRoZSBmaXJzdCBhcmd1bWVudCBieSB0aGUgc2Vjb25kLiAgVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBmaXJzdFxuY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBBIHplcm8gcmlnaHQgYXJndW1lbnQgcmFpc2VzIHRoZVxuIlplcm9EaXZpc2lvbkVycm9yIiBleGNlcHRpb24uICBUaGUgYXJndW1lbnRzIG1heSBiZSBmbG9hdGluZyBwb2ludFxubnVtYmVycywgZS5nLiwgIjMuMTQlMC43IiBlcXVhbHMgIjAuMzQiIChzaW5jZSAiMy4xNCIgZXF1YWxzICI0KjAuNyArXG4wLjM0Ii4pICBUaGUgbW9kdWxvIG9wZXJhdG9yIGFsd2F5cyB5aWVsZHMgYSByZXN1bHQgd2l0aCB0aGUgc2FtZSBzaWduXG5hcyBpdHMgc2Vjb25kIG9wZXJhbmQgKG9yIHplcm8pOyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHJlc3VsdCBpc1xuc3RyaWN0bHkgc21hbGxlciB0aGFuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgWzFdLlxuXG5UaGUgZmxvb3IgZGl2aXNpb24gYW5kIG1vZHVsbyBvcGVyYXRvcnMgYXJlIGNvbm5lY3RlZCBieSB0aGUgZm9sbG93aW5nXG5pZGVudGl0eTogInggPT0gKHgvL3kpKnkgKyAoeCV5KSIuICBGbG9vciBkaXZpc2lvbiBhbmQgbW9kdWxvIGFyZSBhbHNvXG5jb25uZWN0ZWQgd2l0aCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImRpdm1vZCgpIjogImRpdm1vZCh4LCB5KSA9PVxuKHgvL3ksIHgleSkiLiBbMl0uXG5cbkluIGFkZGl0aW9uIHRvIHBlcmZvcm1pbmcgdGhlIG1vZHVsbyBvcGVyYXRpb24gb24gbnVtYmVycywgdGhlICIlIlxub3BlcmF0b3IgaXMgYWxzbyBvdmVybG9hZGVkIGJ5IHN0cmluZyBvYmplY3RzIHRvIHBlcmZvcm0gb2xkLXN0eWxlXG5zdHJpbmcgZm9ybWF0dGluZyAoYWxzbyBrbm93biBhcyBpbnRlcnBvbGF0aW9uKS4gIFRoZSBzeW50YXggZm9yXG5zdHJpbmcgZm9ybWF0dGluZyBpcyBkZXNjcmliZWQgaW4gdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSxcbnNlY3Rpb24gKnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyouXG5cblRoZSBmbG9vciBkaXZpc2lvbiBvcGVyYXRvciwgdGhlIG1vZHVsbyBvcGVyYXRvciwgYW5kIHRoZSAiZGl2bW9kKCkiXG5mdW5jdGlvbiBhcmUgbm90IGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycy4gIEluc3RlYWQsIGNvbnZlcnQgdG8gYVxuZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHVzaW5nIHRoZSAiYWJzKCkiIGZ1bmN0aW9uIGlmIGFwcHJvcHJpYXRlLlxuXG5UaGUgIisiIChhZGRpdGlvbikgb3BlcmF0b3IgeWllbGRzIHRoZSBzdW0gb2YgaXRzIGFyZ3VtZW50cy4gIFRoZVxuYXJndW1lbnRzIG11c3QgZWl0aGVyIGJvdGggYmUgbnVtYmVycyBvciBib3RoIHNlcXVlbmNlcyBvZiB0aGUgc2FtZVxudHlwZS4gIEluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlXG5hbmQgdGhlbiBhZGRlZCB0b2dldGhlci4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHNlcXVlbmNlcyBhcmVcbmNvbmNhdGVuYXRlZC5cblxuVGhlICItIiAoc3VidHJhY3Rpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgZGlmZmVyZW5jZSBvZiBpdHMgYXJndW1lbnRzLlxuVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBmaXJzdCBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS5cbicsCkBAIC0xNyw2MyArMTcsNjMgQEAKICAnYnJlYWsnOiAnXG5UaGUgImJyZWFrIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBicmVha19zdG10IDo6PSAiYnJlYWsiXG5cbiJicmVhayIgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSAiZm9yIiBvciAid2hpbGUiXG5sb29wLCBidXQgbm90IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIG9yIGNsYXNzIGRlZmluaXRpb24gd2l0aGluIHRoYXRcbmxvb3AuXG5cbkl0IHRlcm1pbmF0ZXMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxvb3AsIHNraXBwaW5nIHRoZSBvcHRpb25hbCAiZWxzZSJcbmNsYXVzZSBpZiB0aGUgbG9vcCBoYXMgb25lLlxuXG5JZiBhICJmb3IiIGxvb3AgaXMgdGVybWluYXRlZCBieSAiYnJlYWsiLCB0aGUgbG9vcCBjb250cm9sIHRhcmdldFxua2VlcHMgaXRzIGN1cnJlbnQgdmFsdWUuXG5cbldoZW4gImJyZWFrIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhICJmaW5hbGx5IlxuY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseSBsZWF2aW5nIHRoZVxubG9vcC5cbicsCiAgJ2NhbGxhYmxlLXR5cGVzJzogJ1xuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgIngoYXJnMSwgYXJnMiwgLi4uKSIgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICAieC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pIi5cbicsCiAgJ2NhbGxzJzogJ1xuQ2FsbHNcbioqKioqXG5cbkEgY2FsbCBjYWxscyBhIGNhbGxhYmxlIG9iamVjdCAoZS5nLiwgYSAqZnVuY3Rpb24qKSB3aXRoIGEgcG9zc2libHlcbmVtcHR5IHNlcmllcyBvZiAqYXJndW1lbnRzKjpcblxuICAgY2FsbCAgICAgICAgICAgICAgICAgOjo9IHByaW1hcnkgIigiIFthcmd1bWVudF9saXN0IFsiLCJdIHwgY29tcHJlaGVuc2lvbl0gIikiXG4gICBhcmd1bWVudF9saXN0ICAgICAgICA6Oj0gcG9zaXRpb25hbF9hcmd1bWVudHMgWyIsIiBrZXl3b3JkX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiAiKiIgZXhwcmVzc2lvbl0gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8IGtleXdvcmRfYXJndW1lbnRzIFsiLCIgIioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIga2V5d29yZF9hcmd1bWVudHNdIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCAiKiIgZXhwcmVzc2lvbiBbIiwiIGtleXdvcmRfYXJndW1lbnRzXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBleHByZXNzaW9uXG4gICBwb3NpdGlvbmFsX2FyZ3VtZW50cyA6Oj0gZXhwcmVzc2lvbiAoIiwiIGV4cHJlc3Npb24pKlxuICAga2V5d29yZF9hcmd1bWVudHMgICAgOjo9IGtleXdvcmRfaXRlbSAoIiwiIGtleXdvcmRfaXRlbSkqXG4gICBrZXl3b3JkX2l0ZW0gICAgICAgICA6Oj0gaWRlbnRpZmllciAiPSIgZXhwcmVzc2lvblxuXG5BIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkXG5hcmd1bWVudHMgYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgc2VtYW50aWNzLlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGEgY2FsbGFibGUgb2JqZWN0ICh1c2VyLWRlZmluZWRcbmZ1bmN0aW9ucywgYnVpbHQtaW4gZnVuY3Rpb25zLCBtZXRob2RzIG9mIGJ1aWx0LWluIG9iamVjdHMsIGNsYXNzXG5vYmplY3RzLCBtZXRob2RzIG9mIGNsYXNzIGluc3RhbmNlcywgYW5kIGFsbCBvYmplY3RzIGhhdmluZyBhXG4iX19jYWxsX18oKSIgbWV0aG9kIGFyZSBjYWxsYWJsZSkuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlXG5ldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsIGlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uXG4qRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIGZvcm1hbCAqcGFyYW1ldGVyKiBsaXN0cy5cblxuSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHByZXNlbnQsIHRoZXkgYXJlIGZpcnN0IGNvbnZlcnRlZCB0b1xucG9zaXRpb25hbCBhcmd1bWVudHMsIGFzIGZvbGxvd3MuICBGaXJzdCwgYSBsaXN0IG9mIHVuZmlsbGVkIHNsb3RzIGlzXG5jcmVhdGVkIGZvciB0aGUgZm9ybWFsIHBhcmFtZXRlcnMuICBJZiB0aGVyZSBhcmUgTiBwb3NpdGlvbmFsXG5hcmd1bWVudHMsIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgTiBzbG90cy4gIE5leHQsIGZvciBlYWNoXG5rZXl3b3JkIGFyZ3VtZW50LCB0aGUgaWRlbnRpZmllciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdCAoaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGZvcm1hbFxucGFyYW1ldGVyIG5hbWUsIHRoZSBmaXJzdCBzbG90IGlzIHVzZWQsIGFuZCBzbyBvbikuICBJZiB0aGUgc2xvdCBpc1xuYWxyZWFkeSBmaWxsZWQsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzICJOb25lIiwgaXQgZmlsbHMgdGhlIHNsb3QpLiAgV2hlbiBhbGwgYXJndW1lbnRzIGhhdmVcbmJlZW4gcHJvY2Vzc2VkLCB0aGUgc2xvdHMgdGhhdCBhcmUgc3RpbGwgdW5maWxsZWQgYXJlIGZpbGxlZCB3aXRoIHRoZVxuY29ycmVzcG9uZGluZyBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICAoRGVmYXVsdFxudmFsdWVzIGFyZSBjYWxjdWxhdGVkLCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkOyB0aHVzLCBhXG5tdXRhYmxlIG9iamVjdCBzdWNoIGFzIGEgbGlzdCBvciBkaWN0aW9uYXJ5IHVzZWQgYXMgZGVmYXVsdCB2YWx1ZSB3aWxsXG5iZSBzaGFyZWQgYnkgYWxsIGNhbGxzIHRoYXQgZG9uXCd0IHNwZWNpZnkgYW4gYXJndW1lbnQgdmFsdWUgZm9yIHRoZVxuY29ycmVzcG9uZGluZyBzbG90OyB0aGlzIHNob3VsZCB1c3VhbGx5IGJlIGF2b2lkZWQuKSAgSWYgdGhlcmUgYXJlIGFueVxudW5maWxsZWQgc2xvdHMgZm9yIHdoaWNoIG5vIGRlZmF1bHQgdmFsdWUgaXMgc3BlY2lmaWVkLCBhICJUeXBlRXJyb3IiXG5leGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBvZiBmaWxsZWQgc2xvdHMgaXMgdXNlZCBhc1xudGhlIGFyZ3VtZW50IGxpc3QgZm9yIHRoZSBjYWxsLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEFuIGltcGxlbWVudGF0aW9uIG1heSBwcm92aWRlXG5idWlsdC1pbiBmdW5jdGlvbnMgd2hvc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGRvIG5vdCBoYXZlIG5hbWVzLCBldmVuXG5pZiB0aGV5IGFyZSBcJ25hbWVkXCcgZm9yIHRoZSBwdXJwb3NlIG9mIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaFxudGhlcmVmb3JlIGNhbm5vdCBiZSBzdXBwbGllZCBieSBrZXl3b3JkLiAgSW4gQ1B5dGhvbiwgdGhpcyBpcyB0aGUgY2FzZVxuZm9yIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDIHRoYXQgdXNlICJQeUFyZ19QYXJzZVR1cGxlKCkiIHRvIHBhcnNlXG50aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIippZGVudGlmaWVyIiBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHNcbihvciBhbiBlbXB0eSB0dXBsZSBpZiB0aGVyZSB3ZXJlIG5vIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cykuXG5cbklmIGFueSBrZXl3b3JkIGFyZ3VtZW50IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmb3JtYWwgcGFyYW1ldGVyXG5uYW1lLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIioqaWRlbnRpZmllciIgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBleGNlc3Mga2V5d29yZFxuYXJndW1lbnRzICh1c2luZyB0aGUga2V5d29yZHMgYXMga2V5cyBhbmQgdGhlIGFyZ3VtZW50IHZhbHVlcyBhc1xuY29ycmVzcG9uZGluZyB2YWx1ZXMpLCBvciBhIChuZXcpIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlcmUgd2VyZSBub1xuZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLlxuXG5JZiB0aGUgc3ludGF4ICIqZXhwcmVzc2lvbiIgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCwgImV4cHJlc3Npb24iXG5tdXN0IGV2YWx1YXRlIHRvIGFuIGl0ZXJhYmxlLiAgRWxlbWVudHMgZnJvbSB0aGlzIGl0ZXJhYmxlIGFyZSB0cmVhdGVkXG5hcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50czsgaWYgdGhlcmUgYXJlXG5wb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosIGFuZCAiZXhwcmVzc2lvbiIgZXZhbHVhdGVzIHRvIGFcbnNlcXVlbmNlICp5MSosIC4uLiwgKnlNKiwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgY2FsbCB3aXRoIE0rTlxucG9zaXRpb25hbCBhcmd1bWVudHMgKngxKiwgLi4uLCAqeE4qLCAqeTEqLCAuLi4sICp5TSouXG5cbkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSAiKmV4cHJlc3Npb24iIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIHNvbWUga2V5d29yZCBhcmd1bWVudHMsIGl0IGlzIHByb2Nlc3NlZCAqYmVmb3JlKiB0aGVcbmtleXdvcmQgYXJndW1lbnRzIChhbmQgdGhlICIqKmV4cHJlc3Npb24iIGFyZ3VtZW50LCBpZiBhbnkgLS0gc2VlXG5iZWxvdykuICBTbzpcblxuICAgPj4+IGRlZiBmKGEsIGIpOlxuICAgLi4uICBwcmludChhLCBiKVxuICAgLi4uXG4gICA+Pj4gZihiPTEsICooMiwpKVxuICAgMiAxXG4gICA+Pj4gZihhPTEsICooMiwpKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50IFwnYVwnXG4gICA+Pj4gZigxLCAqKDIsKSlcbiAgIDEgMlxuXG5JdCBpcyB1bnVzdWFsIGZvciBib3RoIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGUgIipleHByZXNzaW9uIiBzeW50YXhcbnRvIGJlIHVzZWQgaW4gdGhlIHNhbWUgY2FsbCwgc28gaW4gcHJhY3RpY2UgdGhpcyBjb25mdXNpb24gZG9lcyBub3RcbmFyaXNlLlxuXG5JZiB0aGUgc3ludGF4ICIqKmV4cHJlc3Npb24iIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG4iZXhwcmVzc2lvbiIgbXVzdCBldmFsdWF0ZSB0byBhIG1hcHBpbmcsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmVcbnRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cy4gIEluIHRoZSBjYXNlIG9mIGEga2V5d29yZFxuYXBwZWFyaW5nIGluIGJvdGggImV4cHJlc3Npb24iIGFuZCBhcyBhbiBleHBsaWNpdCBrZXl3b3JkIGFyZ3VtZW50LCBhXG4iVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuXG5Gb3JtYWwgcGFyYW1ldGVycyB1c2luZyB0aGUgc3ludGF4ICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciJcbmNhbm5vdCBiZSB1c2VkIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc2xvdHMgb3IgYXMga2V5d29yZCBhcmd1bWVudFxubmFtZXMuXG5cbkEgY2FsbCBhbHdheXMgcmV0dXJucyBzb21lIHZhbHVlLCBwb3NzaWJseSAiTm9uZSIsIHVubGVzcyBpdCByYWlzZXMgYW5cbmV4Y2VwdGlvbi4gIEhvdyB0aGlzIHZhbHVlIGlzIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlXG5jYWxsYWJsZSBvYmplY3QuXG5cbklmIGl0IGlzLS0tXG5cbmEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uOlxuICAgVGhlIGNvZGUgYmxvY2sgZm9yIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCwgcGFzc2luZyBpdCB0aGVcbiAgIGFyZ3VtZW50IGxpc3QuICBUaGUgZmlyc3QgdGhpbmcgdGhlIGNvZGUgYmxvY2sgd2lsbCBkbyBpcyBiaW5kIHRoZVxuICAgZm9ybWFsIHBhcmFtZXRlcnMgdG8gdGhlIGFyZ3VtZW50czsgdGhpcyBpcyBkZXNjcmliZWQgaW4gc2VjdGlvblxuICAgKkZ1bmN0aW9uIGRlZmluaXRpb25zKi4gIFdoZW4gdGhlIGNvZGUgYmxvY2sgZXhlY3V0ZXMgYSAicmV0dXJuIlxuICAgc3RhdGVtZW50LCB0aGlzIHNwZWNpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5hIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZDpcbiAgIFRoZSByZXN1bHQgaXMgdXAgdG8gdGhlIGludGVycHJldGVyOyBzZWUgKkJ1aWx0LWluIEZ1bmN0aW9ucyogZm9yXG4gICB0aGUgZGVzY3JpcHRpb25zIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy5cblxuYSBjbGFzcyBvYmplY3Q6XG4gICBBIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLlxuXG5hIGNsYXNzIGluc3RhbmNlIG1ldGhvZDpcbiAgIFRoZSBjb3JyZXNwb25kaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdpdGggYW4gYXJndW1lbnRcbiAgIGxpc3QgdGhhdCBpcyBvbmUgbG9uZ2VyIHRoYW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGNhbGw6IHRoZVxuICAgaW5zdGFuY2UgYmVjb21lcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cbmEgY2xhc3MgaW5zdGFuY2U6XG4gICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgYSAiX19jYWxsX18oKSIgbWV0aG9kOyB0aGUgZWZmZWN0IGlzIHRoZW4gdGhlXG4gICBzYW1lIGFzIGlmIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQuXG4nLAotICdjbGFzcyc6ICdcbkNsYXNzIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKLSAnY29tcGFyaXNvbnMnOiAnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgImEgPCBiIDwgYyIgaGF2ZSB0aGVcbmludGVycHJldGF0aW9uIHRoYXQgaXMgY29udmVudGlvbmFsIGluIG1hdGhlbWF0aWNzOlxuXG4gICBjb21wYXJpc29uICAgIDo6PSBvcl9leHByICggY29tcF9vcGVyYXRvciBvcl9leHByICkqXG4gICBjb21wX29wZXJhdG9yIDo6PSAiPCIgfCAiPiIgfCAiPT0iIHwgIj49IiB8ICI8PSIgfCAiIT0iXG4gICAgICAgICAgICAgICAgICAgICB8ICJpcyIgWyJub3QiXSB8IFsibm90Il0gImluIlxuXG5Db21wYXJpc29ucyB5aWVsZCBib29sZWFuIHZhbHVlczogIlRydWUiIG9yICJGYWxzZSIuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCAieCA8IHkgPD0geiIgaXNcbmVxdWl2YWxlbnQgdG8gInggPCB5IGFuZCB5IDw9IHoiLCBleGNlcHQgdGhhdCAieSIgaXMgZXZhbHVhdGVkIG9ubHlcbm9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzICJ6IiBpcyBub3QgZXZhbHVhdGVkIGF0IGFsbCB3aGVuICJ4IDwgeSIgaXNcbmZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiAiYSBvcDEgYiBvcDIgYyAuLi4geVxub3BOIHoiIGlzIGVxdWl2YWxlbnQgdG8gImEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6IiwgZXhjZXB0XG50aGF0IGVhY2ggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYXQgbW9zdCBvbmNlLlxuXG5Ob3RlIHRoYXQgImEgb3AxIGIgb3AyIGMiIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb24gYmV0d2VlblxuKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sICJ4IDwgeSA+IHoiIGlzIHBlcmZlY3RseSBsZWdhbCAodGhvdWdoXG5wZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgb3BlcmF0b3JzICI8IiwgIj4iLCAiPT0iLCAiPj0iLCAiPD0iLCBhbmQgIiE9IiBjb21wYXJlIHRoZSB2YWx1ZXNcbm9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLiBJZiBib3RoIGFyZVxubnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsIHRoZSAiPT0iIGFuZFxuIiE9IiBvcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdG8gYmVcbnVuZXF1YWwsIHdoaWxlIHRoZSAiPCIsICI+IiwgIj49IiBhbmQgIjw9IiBvcGVyYXRvcnMgcmFpc2UgYVxuIlR5cGVFcnJvciIgd2hlbiBjb21wYXJpbmcgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdGhhdCBkbyBub3RcbmltcGxlbWVudCB0aGVzZSBvcGVyYXRvcnMgZm9yIHRoZSBnaXZlbiBwYWlyIG9mIHR5cGVzLiAgWW91IGNhblxuY29udHJvbCBjb21wYXJpc29uIGJlaGF2aW9yIG9mIG9iamVjdHMgb2Ygbm9uLWJ1aWx0LWluIHR5cGVzIGJ5XG5kZWZpbmluZyByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBsaWtlICJfX2d0X18oKSIsIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qQmFzaWMgY3VzdG9taXphdGlvbiouXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogVGhlIHZhbHVlcyAiZmxvYXQoXCdOYU5cJykiIGFuZCAiRGVjaW1hbChcJ05hTlwnKSIgYXJlIHNwZWNpYWwuIFRoZVxuICBhcmUgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMsICJ4IGlzIHgiIGJ1dCBhcmUgbm90IGVxdWFsIHRvXG4gIHRoZW1zZWx2ZXMsICJ4ICE9IHgiLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGFcbiAgbm90LWEtbnVtYmVyIHZhbHVlIHdpbGwgcmV0dXJuICJGYWxzZSIuICBGb3IgZXhhbXBsZSwgYm90aCAiMyA8XG4gIGZsb2F0KFwnTmFOXCcpIiBhbmQgImZsb2F0KFwnTmFOXCcpIDwgMyIgd2lsbCByZXR1cm4gIkZhbHNlIi5cblxuKiBCeXRlcyBvYmplY3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpY1xuICB2YWx1ZXMgb2YgdGhlaXIgZWxlbWVudHMuXG5cbiogU3RyaW5ncyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgZXF1aXZhbGVudHMgKHRoZSByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJvcmQoKSIpIG9mIHRoZWlyXG4gIGNoYXJhY3RlcnMuIFszXSBTdHJpbmcgYW5kIGJ5dGVzIG9iamVjdCBjYW5cJ3QgYmUgY29tcGFyZWQhXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvblxuICBvZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCAiWzEsMix4XSA8PSBbMSwyLHldIiBoYXMgdGhlIHNhbWVcbiAgdmFsdWUgYXMgInggPD0geSIuICBJZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVcbiAgc2hvcnRlciBzZXF1ZW5jZSBpcyBvcmRlcmVkIGZpcnN0IChmb3IgZXhhbXBsZSwgIlsxLDJdIDwgWzEsMiwzXSIpLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZVxuICBzYW1lICIoa2V5LCB2YWx1ZSkiIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyAiKFwnPFwnLCBcJzw9XCcsIFwnPj1cJyxcbiAgXCc+XCcpIiByYWlzZSAiVHlwZUVycm9yIi5cblxuKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmRcbiAgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZVxuICB0d28gc2V0cyAiezEsMn0iIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy5cbiAgRm9yIGV4YW1wbGUsICJtaW4oKSIsICJtYXgoKSIsIGFuZCAic29ydGVkKCkiIHByb2R1Y2UgdW5kZWZpbmVkXG4gIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzLlxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXlcbiAgYXJlIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZFxuICBzbWFsbGVyIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0XG4gIGNvbnNpc3RlbnRseSB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXJcbm9mIHRoZSB0eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdFxubnVtZXJpYyB0eXBlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlci4gIFdoZW4gY3Jvc3MtdHlwZVxuY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgY29tcGFyaXNvbiBtZXRob2QgcmV0dXJuc1xuIk5vdEltcGxlbWVudGVkIi5cblxuVGhlIG9wZXJhdG9ycyAiaW4iIGFuZCAibm90IGluIiB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgInggaW4gcyJcbmV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiAqcyosIGFuZCBmYWxzZSBvdGhlcndpc2UuICAieFxubm90IGluIHMiIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mICJ4IGluIHMiLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlc1xuYW5kIHNldCB0eXBlcyBzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggImluIiB0ZXN0c1xud2hldGhlciBhIHRoZSBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzXG5saXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGVcbmV4cHJlc3Npb24gInggaW4geSIgaXMgZXF1aXZhbGVudCB0byAiYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW5cbnkpIi5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBpc1xuYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzICJ5LmZpbmQoeCkgIT0gLTEiLiAgRW1wdHlcbnN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsXG5zbyAiIiIgaW4gImFiYyIiIHdpbGwgcmV0dXJuICJUcnVlIi5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgIl9fY29udGFpbnNfXygpIiBtZXRob2QsICJ4XG5pbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICJ5Ll9fY29udGFpbnNfXyh4KSIgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiBidXQgZG9cbmRlZmluZSAiX19pdGVyX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgc29tZSB2YWx1ZSAieiIgd2l0aCAieCA9PSB6IlxuaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgInkiLiAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZFxuZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbiJfX2dldGl0ZW1fXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCAieCA9PSB5W2ldIiwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSAiSW5kZXhFcnJvciIgZXhjZXB0aW9uLiAgKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCBpbiIgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbiJpbiIuXG5cblRoZSBvcGVyYXRvcnMgImlzIiBhbmQgImlzIG5vdCIgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiAieCBpcyB5IiBpc1xudHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgInggaXMgbm90IHkiXG55aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKLSAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgImlmIiwgIndoaWxlIiBhbmQgImZvciIgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWwgY29udHJvbFxuZmxvdyBjb25zdHJ1Y3RzLiAgInRyeSIgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cFxuY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgIndpdGgiIHN0YXRlbWVudCBhbGxvd3MgdGhlXG5leGVjdXRpb24gb2YgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBjb2RlIGFyb3VuZCBhIGJsb2NrIG9mXG5jb2RlLiAgRnVuY3Rpb24gYW5kIGNsYXNzIGRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHkgY29tcG91bmRcbnN0YXRlbWVudHMuXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2Ygc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kXG5zdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkblwndCBiZVxuY2xlYXIgdG8gd2hpY2ggImlmIiBjbGF1c2UgYSBmb2xsb3dpbmcgImVsc2UiIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG4icHJpbnQoKSIgY2FsbHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50KHgpOyBwcmludCh5KTsgcHJpbnQoeilcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgc3VpdGUgICAgICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBORVdMSU5FIElOREVOVCBzdGF0ZW1lbnQrIERFREVOVFxuICAgc3RhdGVtZW50ICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBjb21wb3VuZF9zdG10XG4gICBzdG10X2xpc3QgICAgIDo6PSBzaW1wbGVfc3RtdCAoIjsiIHNpbXBsZV9zdG10KSogWyI7Il1cblxuTm90ZSB0aGF0IHN0YXRlbWVudHMgYWx3YXlzIGVuZCBpbiBhICJORVdMSU5FIiBwb3NzaWJseSBmb2xsb3dlZCBieSBhXG4iREVERU5UIi4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5cyBiZWdpblxud2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgImVsc2UiXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkICJpZiIgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlICJpZiIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT1cblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSAid2hpbGUiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2hpbGUiIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBnb2VzIGJhY2tcbnRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlICJmb3IiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgImZvciIgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlXG4oc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbiJleHByZXNzaW9uX2xpc3QiLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgd2FzIG5vIG5leHRcbml0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGVcbiAgbG9vcCAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlICJ0cnkiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlICJmaW5hbGx5IiBjbGF1c2UuXG5cbldoZW4gYSAicmV0dXJuIiwgImJyZWFrIiBvciAiY29udGludWUiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpbiB0aGVcbiJ0cnkiIHN1aXRlIG9mIGEgInRyeSIuLi4iZmluYWxseSIgc3RhdGVtZW50LCB0aGUgImZpbmFsbHkiIGNsYXVzZSBpc1xuYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgaWxsZWdhbCBpblxudGhlICJmaW5hbGx5IiBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cblxuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiAiPSJcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICIiKiIiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpc1xuaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25cbmlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlICJOb25lIiBhcyB0aGUgZGVmYXVsdCxcbmFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iIippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmcgYW55XG5leGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmIHRoZVxuZm9ybSAiIioqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICIiKiIiIG9yICIiKmlkZW50aWZpZXIiIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiIjogZXhwcmVzc2lvbiIiIGZvbGxvd2luZ1xudGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uIGV2ZW4gdGhvc2Vcbm9mIHRoZSBmb3JtICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciIuICBGdW5jdGlvbnMgbWF5IGhhdmVcbiJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gIiItPiBleHByZXNzaW9uIiIgYWZ0ZXIgdGhlIHBhcmFtZXRlclxubGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gYW5kIGFyZVxuZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuICBBbm5vdGF0aW9ucyBtYXlcbmJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cblRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBhXG5mdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzIHZhbHVlcyBvZiBhXG5kaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlICJfX2Fubm90YXRpb25zX18iXG5hdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICIiZGVmIiIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiImRlZiIiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgIiJkZWYiIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG5cbiAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKLSAnY29udGV4dC1tYW5hZ2Vycyc6ICdcbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgIndpdGgiIHN0YXRlbWVudC4gVGhlIGNvbnRleHQgbWFuYWdlclxuaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWUgY29udGV4dFxuZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBub3JtYWxseVxuaW52b2tlZCB1c2luZyB0aGUgIndpdGgiIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb24gKlRoZSB3aXRoXG5zdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXIgbWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgIndpdGgiXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlICJhcyIgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgIk5vbmUiLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCAiX19leGl0X18oKSIgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cbicsCisgJ2NsYXNzJzogJ1xuQ2xhc3MgZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBkZWZpbmVzIGEgY2xhc3Mgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkXG50eXBlIGhpZXJhcmNoeSopOlxuXG4gICBjbGFzc2RlZiAgICA6Oj0gW2RlY29yYXRvcnNdICJjbGFzcyIgY2xhc3NuYW1lIFtpbmhlcml0YW5jZV0gIjoiIHN1aXRlXG4gICBpbmhlcml0YW5jZSA6Oj0gIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiXG4gICBjbGFzc25hbWUgICA6Oj0gaWRlbnRpZmllclxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBUaGUgaW5oZXJpdGFuY2UgbGlzdFxudXN1YWxseSBnaXZlcyBhIGxpc3Qgb2YgYmFzZSBjbGFzc2VzIChzZWUgKkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uKlxuZm9yIG1vcmUgYWR2YW5jZWQgdXNlcyksIHNvIGVhY2ggaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgZXZhbHVhdGUgdG8gYVxuY2xhc3Mgb2JqZWN0IHdoaWNoIGFsbG93cyBzdWJjbGFzc2luZy4gIENsYXNzZXMgd2l0aG91dCBhbiBpbmhlcml0YW5jZVxubGlzdCBpbmhlcml0LCBieSBkZWZhdWx0LCBmcm9tIHRoZSBiYXNlIGNsYXNzICJvYmplY3QiOyBoZW5jZSxcblxuICAgY2xhc3MgRm9vOlxuICAgICAgIHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb28ob2JqZWN0KTpcbiAgICAgICBwYXNzXG5cblRoZSBjbGFzc1wncyBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIGluIGEgbmV3IGV4ZWN1dGlvbiBmcmFtZSAoc2VlXG4qTmFtaW5nIGFuZCBiaW5kaW5nKiksIHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsb2NhbCBuYW1lc3BhY2UgYW5kIHRoZVxub3JpZ2luYWwgZ2xvYmFsIG5hbWVzcGFjZS4gKFVzdWFsbHksIHRoZSBzdWl0ZSBjb250YWlucyBtb3N0bHlcbmZ1bmN0aW9uIGRlZmluaXRpb25zLikgIFdoZW4gdGhlIGNsYXNzXCdzIHN1aXRlIGZpbmlzaGVzIGV4ZWN1dGlvbiwgaXRzXG5leGVjdXRpb24gZnJhbWUgaXMgZGlzY2FyZGVkIGJ1dCBpdHMgbG9jYWwgbmFtZXNwYWNlIGlzIHNhdmVkLiBbNF0gQVxuY2xhc3Mgb2JqZWN0IGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGUgaW5oZXJpdGFuY2UgbGlzdCBmb3IgdGhlIGJhc2VcbmNsYXNzZXMgYW5kIHRoZSBzYXZlZCBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeS5cblRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoaXMgY2xhc3Mgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBsb2NhbFxubmFtZXNwYWNlLlxuXG5DbGFzcyBjcmVhdGlvbiBjYW4gYmUgY3VzdG9taXplZCBoZWF2aWx5IHVzaW5nICptZXRhY2xhc3NlcyouXG5cbkNsYXNzZXMgY2FuIGFsc28gYmUgZGVjb3JhdGVkOiBqdXN0IGxpa2Ugd2hlbiBkZWNvcmF0aW5nIGZ1bmN0aW9ucyxcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgY2xhc3MgRm9vOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vOiBwYXNzXG4gICBGb28gPSBmMShhcmcpKGYyKEZvbykpXG5cblRoZSBldmFsdWF0aW9uIHJ1bGVzIGZvciB0aGUgZGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSB0aGUgc2FtZSBhcyBmb3JcbmZ1bmN0aW9uIGRlY29yYXRvcnMuICBUaGUgcmVzdWx0IG11c3QgYmUgYSBjbGFzcyBvYmplY3QsIHdoaWNoIGlzIHRoZW5cbmJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhcmVcbmNsYXNzIGF0dHJpYnV0ZXM7IHRoZXkgYXJlIHNoYXJlZCBieSBpbnN0YW5jZXMuICBJbnN0YW5jZSBhdHRyaWJ1dGVzXG5jYW4gYmUgc2V0IGluIGEgbWV0aG9kIHdpdGggInNlbGYubmFtZSA9IHZhbHVlIi4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uICIic2VsZi5uYW1lIiIsXG5hbmQgYW4gaW5zdGFuY2UgYXR0cmlidXRlIGhpZGVzIGEgY2xhc3MgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZVxud2hlbiBhY2Nlc3NlZCBpbiB0aGlzIHdheS4gIENsYXNzIGF0dHJpYnV0ZXMgY2FuIGJlIHVzZWQgYXMgZGVmYXVsdHNcbmZvciBpbnN0YW5jZSBhdHRyaWJ1dGVzLCBidXQgdXNpbmcgbXV0YWJsZSB2YWx1ZXMgdGhlcmUgY2FuIGxlYWQgdG9cbnVuZXhwZWN0ZWQgcmVzdWx0cy4gICpEZXNjcmlwdG9ycyogY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlXG52YXJpYWJsZXMgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzICoqUEVQIDMxMjkqKiAtIENsYXNzXG4gICBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzcyB0aGVyZVxuICAgIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXIgZXhjZXB0aW9uLlxuICAgIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhblxuICAgIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yICJicmVhayJcbiAgICBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBmdW5jdGlvblxuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKKyAnY29tcGFyaXNvbnMnOiAnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgImEgPCBiIDwgYyIgaGF2ZSB0aGVcbmludGVycHJldGF0aW9uIHRoYXQgaXMgY29udmVudGlvbmFsIGluIG1hdGhlbWF0aWNzOlxuXG4gICBjb21wYXJpc29uICAgIDo6PSBvcl9leHByICggY29tcF9vcGVyYXRvciBvcl9leHByICkqXG4gICBjb21wX29wZXJhdG9yIDo6PSAiPCIgfCAiPiIgfCAiPT0iIHwgIj49IiB8ICI8PSIgfCAiIT0iXG4gICAgICAgICAgICAgICAgICAgICB8ICJpcyIgWyJub3QiXSB8IFsibm90Il0gImluIlxuXG5Db21wYXJpc29ucyB5aWVsZCBib29sZWFuIHZhbHVlczogIlRydWUiIG9yICJGYWxzZSIuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCAieCA8IHkgPD0geiIgaXNcbmVxdWl2YWxlbnQgdG8gInggPCB5IGFuZCB5IDw9IHoiLCBleGNlcHQgdGhhdCAieSIgaXMgZXZhbHVhdGVkIG9ubHlcbm9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzICJ6IiBpcyBub3QgZXZhbHVhdGVkIGF0IGFsbCB3aGVuICJ4IDwgeSIgaXNcbmZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiAiYSBvcDEgYiBvcDIgYyAuLi4geVxub3BOIHoiIGlzIGVxdWl2YWxlbnQgdG8gImEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6IiwgZXhjZXB0XG50aGF0IGVhY2ggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYXQgbW9zdCBvbmNlLlxuXG5Ob3RlIHRoYXQgImEgb3AxIGIgb3AyIGMiIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb24gYmV0d2VlblxuKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sICJ4IDwgeSA+IHoiIGlzIHBlcmZlY3RseSBsZWdhbCAodGhvdWdoXG5wZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgb3BlcmF0b3JzICI8IiwgIj4iLCAiPT0iLCAiPj0iLCAiPD0iLCBhbmQgIiE9IiBjb21wYXJlIHRoZSB2YWx1ZXNcbm9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLiBJZiBib3RoIGFyZVxubnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsIHRoZSAiPT0iIGFuZFxuIiE9IiBvcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdG8gYmVcbnVuZXF1YWwsIHdoaWxlIHRoZSAiPCIsICI+IiwgIj49IiBhbmQgIjw9IiBvcGVyYXRvcnMgcmFpc2UgYVxuIlR5cGVFcnJvciIgd2hlbiBjb21wYXJpbmcgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdGhhdCBkbyBub3RcbmltcGxlbWVudCB0aGVzZSBvcGVyYXRvcnMgZm9yIHRoZSBnaXZlbiBwYWlyIG9mIHR5cGVzLiAgWW91IGNhblxuY29udHJvbCBjb21wYXJpc29uIGJlaGF2aW9yIG9mIG9iamVjdHMgb2Ygbm9uLWJ1aWx0LWluIHR5cGVzIGJ5XG5kZWZpbmluZyByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBsaWtlICJfX2d0X18oKSIsIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qQmFzaWMgY3VzdG9taXphdGlvbiouXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogVGhlIHZhbHVlcyAiZmxvYXQoXCdOYU5cJykiIGFuZCAiRGVjaW1hbChcJ05hTlwnKSIgYXJlIHNwZWNpYWwuIFRoZSBhcmVcbiAgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMsICJ4IGlzIHgiIGJ1dCBhcmUgbm90IGVxdWFsIHRvIHRoZW1zZWx2ZXMsXG4gICJ4ICE9IHgiLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGEgbm90LWEtbnVtYmVyIHZhbHVlXG4gIHdpbGwgcmV0dXJuICJGYWxzZSIuICBGb3IgZXhhbXBsZSwgYm90aCAiMyA8IGZsb2F0KFwnTmFOXCcpIiBhbmRcbiAgImZsb2F0KFwnTmFOXCcpIDwgMyIgd2lsbCByZXR1cm4gIkZhbHNlIi5cblxuKiBCeXRlcyBvYmplY3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpY1xuICB2YWx1ZXMgb2YgdGhlaXIgZWxlbWVudHMuXG5cbiogU3RyaW5ncyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWMgZXF1aXZhbGVudHNcbiAgKHRoZSByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJvcmQoKSIpIG9mIHRoZWlyIGNoYXJhY3RlcnMuXG4gIFszXSBTdHJpbmcgYW5kIGJ5dGVzIG9iamVjdCBjYW5cJ3QgYmUgY29tcGFyZWQhXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZlxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCAiWzEsMix4XSA8PSBbMSwyLHldIiBoYXMgdGhlIHNhbWVcbiAgdmFsdWUgYXMgInggPD0geSIuICBJZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVcbiAgc2hvcnRlciBzZXF1ZW5jZSBpcyBvcmRlcmVkIGZpcnN0IChmb3IgZXhhbXBsZSwgIlsxLDJdIDwgWzEsMiwzXSIpLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZVxuICBzYW1lICIoa2V5LCB2YWx1ZSkiIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyAiKFwnPFwnLCBcJzw9XCcsIFwnPj1cJyxcbiAgXCc+XCcpIiByYWlzZSAiVHlwZUVycm9yIi5cblxuKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmRcbiAgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZVxuICB0d28gc2V0cyAiezEsMn0iIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy5cbiAgRm9yIGV4YW1wbGUsICJtaW4oKSIsICJtYXgoKSIsIGFuZCAic29ydGVkKCkiIHByb2R1Y2UgdW5kZWZpbmVkXG4gIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzLlxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXkgYXJlXG4gIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZCBzbWFsbGVyXG4gIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0IGNvbnNpc3RlbnRseVxuICB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXJcbm9mIHRoZSB0eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdFxubnVtZXJpYyB0eXBlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlci4gIFdoZW4gY3Jvc3MtdHlwZVxuY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgY29tcGFyaXNvbiBtZXRob2QgcmV0dXJuc1xuIk5vdEltcGxlbWVudGVkIi5cblxuVGhlIG9wZXJhdG9ycyAiaW4iIGFuZCAibm90IGluIiB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgInggaW4gcyJcbmV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiAqcyosIGFuZCBmYWxzZSBvdGhlcndpc2UuICAieFxubm90IGluIHMiIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mICJ4IGluIHMiLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlc1xuYW5kIHNldCB0eXBlcyBzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggImluIiB0ZXN0c1xud2hldGhlciBhIHRoZSBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzXG5saXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGVcbmV4cHJlc3Npb24gInggaW4geSIgaXMgZXF1aXZhbGVudCB0byAiYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW5cbnkpIi5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBpc1xuYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzICJ5LmZpbmQoeCkgIT0gLTEiLiAgRW1wdHlcbnN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsXG5zbyAiIiIgaW4gImFiYyIiIHdpbGwgcmV0dXJuICJUcnVlIi5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgIl9fY29udGFpbnNfXygpIiBtZXRob2QsICJ4XG5pbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICJ5Ll9fY29udGFpbnNfXyh4KSIgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiBidXQgZG9cbmRlZmluZSAiX19pdGVyX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgc29tZSB2YWx1ZSAieiIgd2l0aCAieCA9PSB6IlxuaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgInkiLiAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZFxuZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbiJfX2dldGl0ZW1fXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCAieCA9PSB5W2ldIiwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSAiSW5kZXhFcnJvciIgZXhjZXB0aW9uLiAgKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCBpbiIgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbiJpbiIuXG5cblRoZSBvcGVyYXRvcnMgImlzIiBhbmQgImlzIG5vdCIgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiAieCBpcyB5IiBpc1xudHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgInggaXMgbm90IHkiXG55aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKKyAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgImlmIiwgIndoaWxlIiBhbmQgImZvciIgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWwgY29udHJvbFxuZmxvdyBjb25zdHJ1Y3RzLiAgInRyeSIgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cFxuY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgIndpdGgiIHN0YXRlbWVudCBhbGxvd3MgdGhlXG5leGVjdXRpb24gb2YgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBjb2RlIGFyb3VuZCBhIGJsb2NrIG9mXG5jb2RlLiAgRnVuY3Rpb24gYW5kIGNsYXNzIGRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHkgY29tcG91bmRcbnN0YXRlbWVudHMuXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2Ygc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kXG5zdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkblwndCBiZVxuY2xlYXIgdG8gd2hpY2ggImlmIiBjbGF1c2UgYSBmb2xsb3dpbmcgImVsc2UiIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG4icHJpbnQoKSIgY2FsbHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50KHgpOyBwcmludCh5KTsgcHJpbnQoeilcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgc3VpdGUgICAgICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBORVdMSU5FIElOREVOVCBzdGF0ZW1lbnQrIERFREVOVFxuICAgc3RhdGVtZW50ICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBjb21wb3VuZF9zdG10XG4gICBzdG10X2xpc3QgICAgIDo6PSBzaW1wbGVfc3RtdCAoIjsiIHNpbXBsZV9zdG10KSogWyI7Il1cblxuTm90ZSB0aGF0IHN0YXRlbWVudHMgYWx3YXlzIGVuZCBpbiBhICJORVdMSU5FIiBwb3NzaWJseSBmb2xsb3dlZCBieSBhXG4iREVERU5UIi4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5cyBiZWdpblxud2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgImVsc2UiXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkICJpZiIgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlICJpZiIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT1cblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSAid2hpbGUiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2hpbGUiIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBnb2VzIGJhY2tcbnRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlICJmb3IiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgImZvciIgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlXG4oc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbiJleHByZXNzaW9uX2xpc3QiLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgd2FzIG5vIG5leHRcbml0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlICJ0cnkiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgPj4+IGRlZiBmKCk6XG4gICAuLi4gICAgIHRyeTpcbiAgIC4uLiAgICAgICAgIDEvMFxuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIDQyXG4gICAuLi5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgImZpbmFsbHkiIGNsYXVzZS5cblxuV2hlbiBhICJyZXR1cm4iLCAiYnJlYWsiIG9yICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluIHRoZVxuInRyeSIgc3VpdGUgb2YgYSAidHJ5Ii4uLiJmaW5hbGx5IiBzdGF0ZW1lbnQsIHRoZSAiZmluYWxseSIgY2xhdXNlIGlzXG5hbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSAiY29udGludWUiIHN0YXRlbWVudCBpcyBpbGxlZ2FsIGluXG50aGUgImZpbmFsbHkiIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnRcbmltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cblRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsYXN0ICJyZXR1cm4iXG5zdGF0ZW1lbnQgZXhlY3V0ZWQuICBTaW5jZSB0aGUgImZpbmFsbHkiIGNsYXVzZSBhbHdheXMgZXhlY3V0ZXMsIGFcbiJyZXR1cm4iIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgImZpbmFsbHkiIGNsYXVzZSB3aWxsIGFsd2F5cyBiZSB0aGVcbmxhc3Qgb25lIGV4ZWN1dGVkOlxuXG4gICA+Pj4gZGVmIGZvbygpOlxuICAgLi4uICAgICB0cnk6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCd0cnlcJ1xuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnZmluYWxseVwnXG4gICAuLi5cbiAgID4+PiBmb28oKVxuICAgXCdmaW5hbGx5XCdcblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgInJhaXNlIiBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSAid2l0aCIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgIndpdGgiIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vbiAidHJ5Ii4uLiJleGNlcHQiLi4uImZpbmFsbHkiXG51c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWQgZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgIndpdGgiIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSAid2l0aF9pdGVtIikgaXNcbiAgIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2VudGVyX18oKSIgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgIndpdGgiIHN0YXRlbWVudCwgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSAiX19lbnRlcl9fKCkiIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgIndpdGgiIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlICJfX2VudGVyX18oKSIgbWV0aG9kXG4gICAgIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiAiX19leGl0X18oKSIgd2lsbCBhbHdheXMgYmVcbiAgICAgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byAiX19leGl0X18oKSIuIE90aGVyd2lzZSwgdGhyZWVcbiAgICJOb25lIiBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgIl9fZXhpdF9fKCkiIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXMgcmVyYWlzZWQuXG4gICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGFuZFxuICAgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSAid2l0aCJcbiAgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gIl9fZXhpdF9fKCkiIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSAid2l0aCIgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgIndpdGgiIHN0YXRlbWVudC5cblxuXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogIj0iXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiIioiIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tIHRoaXNcbmlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG4iTm9uZSIgYXMgdGhlIGRlZmF1bHQsIGFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZVxuZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuIiIqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nIGFueVxuZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZiB0aGVcbmZvcm0gIiIqKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiIioiIiBvciAiIippZGVudGlmaWVyIiIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gIiI6IGV4cHJlc3Npb24iIiBmb2xsb3dpbmdcbnRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvbiBldmVuIHRob3NlXG5vZiB0aGUgZm9ybSAiKmlkZW50aWZpZXIiIG9yICIqKmlkZW50aWZpZXIiLiAgRnVuY3Rpb25zIG1heSBoYXZlXG4icmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICIiLT4gZXhwcmVzc2lvbiIiIGFmdGVyIHRoZSBwYXJhbWV0ZXJcbmxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIGFuZCBhcmVcbmV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLiAgQW5ub3RhdGlvbnMgbWF5XG5iZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG5UaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgYVxuZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhcyB2YWx1ZXMgb2YgYVxuZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZSAiX19hbm5vdGF0aW9uc19fIlxuYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiImRlZiIiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgIiJkZWYiIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICIiZGVmIiJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuICAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLSBDbGFzc1xuICAgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3MgdGhlcmVcbiAgICBpcyBhICJmaW5hbGx5IiBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyIGV4Y2VwdGlvbi5cbiAgICBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhICJyZXR1cm4iLCAiY29udGludWUiLCBvciAiYnJlYWsiXG4gICAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzICJfX2RvY19fIiBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgIl9fZG9jX18iIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCisgJ2NvbnRleHQtbWFuYWdlcnMnOiAnXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhICJ3aXRoIiBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0IG1hbmFnZXJcbmhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lIGNvbnRleHRcbmZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmUgbm9ybWFsbHlcbmludm9rZWQgdXNpbmcgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uICpUaGUgd2l0aFxuc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyIG1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlICJ3aXRoIlxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSAiYXMiIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlICJOb25lIi5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgIl9fZXhpdF9fKCkiIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgICJ3aXRoIiBzdGF0ZW1lbnQuXG4nLAogICdjb250aW51ZSc6ICdcblRoZSAiY29udGludWUiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGNvbnRpbnVlX3N0bXQgOjo9ICJjb250aW51ZSJcblxuImNvbnRpbnVlIiBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhICJmb3IiIG9yICJ3aGlsZSJcbmxvb3AsIGJ1dCBub3QgbmVzdGVkIGluIGEgZnVuY3Rpb24gb3IgY2xhc3MgZGVmaW5pdGlvbiBvciAiZmluYWxseSJcbmNsYXVzZSB3aXRoaW4gdGhhdCBsb29wLiAgSXQgY29udGludWVzIHdpdGggdGhlIG5leHQgY3ljbGUgb2YgdGhlXG5uZWFyZXN0IGVuY2xvc2luZyBsb29wLlxuXG5XaGVuICJjb250aW51ZSIgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgInRyeSIgc3RhdGVtZW50IHdpdGggYVxuImZpbmFsbHkiIGNsYXVzZSwgdGhhdCAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHlcbnN0YXJ0aW5nIHRoZSBuZXh0IGxvb3AgY3ljbGUuXG4nLAotICdjb252ZXJzaW9ucyc6ICdcbkFyaXRobWV0aWMgY29udmVyc2lvbnNcbioqKioqKioqKioqKioqKioqKioqKipcblxuV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlXG4idGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoaXMgbWVhbnNcbnRoYXQgdGhlIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyB0aGF0IHdheTpcblxuKiBJZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBjb21wbGV4IG51bWJlciwgdGhlIG90aGVyIGlzIGNvbnZlcnRlZCB0b1xuICBjb21wbGV4O1xuXG4qIG90aGVyd2lzZSwgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB0aGVcbiAgb3RoZXIgaXMgY29udmVydGVkIHRvIGZsb2F0aW5nIHBvaW50O1xuXG4qIG90aGVyd2lzZSwgYm90aCBtdXN0IGJlIGludGVnZXJzIGFuZCBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS5cblxuU29tZSBhZGRpdGlvbmFsIHJ1bGVzIGFwcGx5IGZvciBjZXJ0YWluIG9wZXJhdG9ycyAoZS5nLiwgYSBzdHJpbmcgbGVmdFxuYXJndW1lbnQgdG8gdGhlIFwnJVwnIG9wZXJhdG9yKS4gIEV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgdGhlaXIgb3duXG5jb252ZXJzaW9uIGJlaGF2aW9yLlxuJywKLSAnY3VzdG9taXphdGlvbic6ICdcbkJhc2ljIGN1c3RvbWl6YXRpb25cbioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gICJfX25ld19fKCkiIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mICJfX25ld19fKCkiIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseSBhblxuICAgaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgdXNpbmdcbiAgICJzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKSIgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmICJfX25ld19fKCkiIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgIl9faW5pdF9fKHNlbGZbLCAuLi5dKSIsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvICJfX25ld19fKCkiLlxuXG4gICBJZiAiX19uZXdfXygpIiBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICAiX19uZXdfXygpIiBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICAiX19pbml0X18oKSIgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyAiX19pbml0X18oKSIgbWV0aG9kLCBpZlxuICAgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mIHRoZVxuICAgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICAiQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSkiLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnQgb25cbiAgIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgICJUeXBlRXJyb3IiIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhICJfX2RlbF9fKCkiIG1ldGhvZCwgdGhlXG4gICBkZXJpdmVkIGNsYXNzXCdzICJfX2RlbF9fKCkiIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdFxuICAgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZS5cbiAgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvciB0aGVcbiAgICJfX2RlbF9fKCkiIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6ICJkZWwgeCIgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCAieC5fX2RlbF9fKCkiIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgIngiIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXIgaXNcbiAgICAgb25seSBjYWxsZWQgd2hlbiAieCJcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWUgY29tbW9uXG4gICAgIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuIG9iamVjdCBmcm9tXG4gICAgIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuIG9iamVjdHMgKGUuZy4sXG4gICAgIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoIHBhcmVudCBhbmRcbiAgICAgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSBvZlxuICAgICBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5leGNfaW5mbygpWzJdIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvciBhIHJlZmVyZW5jZVxuICAgICB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhbiB1bmhhbmRsZWRcbiAgICAgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMubGFzdF90cmFjZWJhY2siIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyAiTm9uZSIgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZSBkZXRlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieVxuICAgICBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWQgdXAgaWYgdGhlcmUgYXJlIG5vIFB5dGhvbi1cbiAgICAgbGV2ZWwgIl9fZGVsX18oKSIgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb25cbiAgICAgZm9yIHRoZSAiZ2MiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGUgY3ljbGUgZGV0ZWN0b3IsIHBhcnRpY3VsYXJseSB0aGVcbiAgICAgZGVzY3JpcHRpb24gb2YgdGhlICJnYXJiYWdlIiB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2hcbiAgICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZ1xuICAgICB0aGVpciBleGVjdXRpb24gYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0b1xuICAgICAic3lzLnN0ZGVyciIgaW5zdGVhZC4gQWxzbywgd2hlbiAiX19kZWxfXygpIiBpcyBpbnZva2VkIGluXG4gICAgIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZVxuICAgICBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlciBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZ1xuICAgICB0b3JuIGRvd24gKGUuZy4gdGhlIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpc1xuICAgICByZWFzb24sICJfX2RlbF9fKCkiIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZFxuICAgICB0byBtYWludGFpbiBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSxcbiAgICAgUHl0aG9uIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgInJlcHIoKSIgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpc1xuICAgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0b1xuICAgcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgICI8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+IiBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgIl9fcmVwcl9fKCkiIGJ1dFxuICAgbm90ICJfX3N0cl9fKCkiLCB0aGVuICJfX3JlcHJfXygpIiBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJzdHIob2JqZWN0KSIgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImZvcm1hdCgpIiBhbmRcbiAgICJwcmludCgpIiB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGUgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSAqc3RyaW5nKlxuICAgb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gIm9iamVjdC5fX3JlcHJfXygpIiBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0ICJfX3N0cl9fKCkiIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSAib2JqZWN0IlxuICAgY2FsbHMgIm9iamVjdC5fX3JlcHJfXygpIi5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgImJ5dGVzKCkiIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSAiYnl0ZXMiIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgImZvcm1hdCgpIiBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICAic3RyLmZvcm1hdCgpIiBtZXRob2Qgb2YgY2xhc3MgInN0ciIpIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgYVxuICAgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgdXAgdG9cbiAgIHRoZSB0eXBlIGltcGxlbWVudGluZyAiX19mb3JtYXRfXygpIiwgaG93ZXZlciBtb3N0IGNsYXNzZXMgd2lsbFxuICAgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3IgdXNlIGFcbiAgIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiAieD09eSIgZG9lcyBub3QgaW1wbHkgdGhhdCAieCE9eSIgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyAiX19lcV9fKCkiLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICAiX19uZV9fKCkiIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZSB0aGVcbiAgIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nXG4gICAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZFxuICAgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3NcbiAgICAgY3VzdG9tICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzXG4gICAgIGlzIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0XG4gICAgIGJ1aWxkcy4gSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkc1xuICAgICBvZiBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGxcbiAgICAgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jXG4gICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUiKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZFxuICAgICBkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG4nLAotICdkZWJ1Z2dlcic6ICdcbiJwZGIiIC0tLSBUaGUgUHl0aG9uIERlYnVnZ2VyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlICJwZGIiIGRlZmluZXMgYW4gaW50ZXJhY3RpdmUgc291cmNlIGNvZGUgZGVidWdnZXIgZm9yXG5QeXRob24gcHJvZ3JhbXMuICBJdCBzdXBwb3J0cyBzZXR0aW5nIChjb25kaXRpb25hbCkgYnJlYWtwb2ludHMgYW5kXG5zaW5nbGUgc3RlcHBpbmcgYXQgdGhlIHNvdXJjZSBsaW5lIGxldmVsLCBpbnNwZWN0aW9uIG9mIHN0YWNrIGZyYW1lcyxcbnNvdXJjZSBjb2RlIGxpc3RpbmcsIGFuZCBldmFsdWF0aW9uIG9mIGFyYml0cmFyeSBQeXRob24gY29kZSBpbiB0aGVcbmNvbnRleHQgb2YgYW55IHN0YWNrIGZyYW1lLiAgSXQgYWxzbyBzdXBwb3J0cyBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmdcbmFuZCBjYW4gYmUgY2FsbGVkIHVuZGVyIHByb2dyYW0gY29udHJvbC5cblxuVGhlIGRlYnVnZ2VyIGlzIGV4dGVuc2libGUgLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3NcbiJQZGIiLiBUaGlzIGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgYnV0IGVhc2lseSB1bmRlcnN0b29kIGJ5IHJlYWRpbmdcbnRoZSBzb3VyY2UuICBUaGUgZXh0ZW5zaW9uIGludGVyZmFjZSB1c2VzIHRoZSBtb2R1bGVzICJiZGIiIGFuZCAiY21kIi5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyAiKFBkYikiLiBUeXBpY2FsIHVzYWdlIHRvIHJ1biBhIHByb2dyYW0gdW5kZXJcbmNvbnRyb2wgb2YgdGhlIGRlYnVnZ2VyIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IHBkYi5ydW4oXCdteW1vZHVsZS50ZXN0KClcJylcbiAgID4gPHN0cmluZz4oMCk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgTmFtZUVycm9yOiBcJ3NwYW1cJ1xuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogVGFiLWNvbXBsZXRpb24gdmlhIHRoZSAicmVhZGxpbmUiIG1vZHVsZSBpc1xuYXZhaWxhYmxlIGZvciBjb21tYW5kcyBhbmQgY29tbWFuZCBhcmd1bWVudHMsIGUuZy4gdGhlIGN1cnJlbnQgZ2xvYmFsXG5hbmQgbG9jYWwgbmFtZXMgYXJlIG9mZmVyZWQgYXMgYXJndW1lbnRzIG9mIHRoZSAicHJpbnQiIGNvbW1hbmQuXG5cbiJwZGIucHkiIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy4gIEZvclxuZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiAgQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMy4yOiAicGRiLnB5IiBub3cgYWNjZXB0cyBhICItYyIgb3B0aW9uIHRoYXQgZXhlY3V0ZXNcbmNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgIi5wZGJyYyIgZmlsZSwgc2VlICpEZWJ1Z2dlciBDb21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlICJjb250aW51ZSIgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50KHNwYW0pXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQoc3BhbSlcbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXJcbiAgIGRlYnVnZ2VyIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzXG4gICBleGVjdXRlZDsgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgImNvbnRpbnVlIiwgb3IgeW91IGNhblxuICAgc3RlcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgdXNpbmcgInN0ZXAiIG9yICJuZXh0IiAoYWxsIHRoZXNlXG4gICBjb21tYW5kcyBhcmUgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqXG4gICBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5XG4gICBkZWZhdWx0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgIl9fbWFpbl9fIiBpcyB1c2VkLiAgKFNlZSB0aGVcbiAgIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiAiZXhlYygpIiBvciAiZXZhbCgpIiBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gInJ1bmV2YWwoKSIgcmV0dXJucywgaXQgcmV0dXJucyB0aGVcbiAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0b1xuICAgInJ1bigpIi5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG5cbiAgIENhbGwgdGhlICpmdW5jdGlvbiogKGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdCwgbm90IGEgc3RyaW5nKVxuICAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiAgV2hlbiAicnVuY2FsbCgpIiByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG5UaGUgInJ1bioiIGZ1bmN0aW9ucyBhbmQgInNldF90cmFjZSgpIiBhcmUgYWxpYXNlcyBmb3IgaW5zdGFudGlhdGluZ1xudGhlICJQZGIiIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZS4gIElmIHlvdSB3YW50XG50byBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpcyB5b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgIlBkYiIgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nICJjbWQuQ21kIiBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnRcbiAgIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBDdHJsLUMgb24gdGhlIGNvbnNvbGUpIHdoZW4geW91IGdpdmUgYVxuICAgImNvbnRpbnVlIiBjb21tYW5kLiBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXJcbiAgIGFnYWluIGJ5IHByZXNzaW5nIEN0cmwtQy4gIElmIHlvdSB3YW50IFBkYiBub3QgdG8gdG91Y2ggdGhlIFNJR0lOVFxuICAgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjE6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICpub3NpZ2ludCogYXJndW1lbnQuICBQcmV2aW91c2x5LCBhIFNJR0lOVFxuICAgaGFuZGxlciB3YXMgbmV2ZXIgc2V0IGJ5IFBkYi5cblxuICAgcnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuXG5cbkRlYnVnZ2VyIENvbW1hbmRzXG49PT09PT09PT09PT09PT09PVxuXG5UaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBiZWxvdy4gIE1vc3RcbmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byBvbmUgb3IgdHdvIGxldHRlcnMgYXMgaW5kaWNhdGVkOyBlLmcuXG4iaChlbHApIiBtZWFucyB0aGF0IGVpdGhlciAiaCIgb3IgImhlbHAiIGNhbiBiZSB1c2VkIHRvIGVudGVyIHRoZSBoZWxwXG5jb21tYW5kIChidXQgbm90ICJoZSIgb3IgImhlbCIsIG5vciAiSCIgb3IgIkhlbHAiIG9yICJIRUxQIikuXG5Bcmd1bWVudHMgdG8gY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSAoc3BhY2VzIG9yXG50YWJzKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzICgiW10iKSBpblxudGhlIGNvbW1hbmQgc3ludGF4OyB0aGUgc3F1YXJlIGJyYWNrZXRzIG11c3Qgbm90IGJlIHR5cGVkLlxuQWx0ZXJuYXRpdmVzIGluIHRoZSBjb21tYW5kIHN5bnRheCBhcmUgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgYmFyXG4oInwiKS5cblxuRW50ZXJpbmcgYSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIGxhc3QgY29tbWFuZCBlbnRlcmVkLiAgRXhjZXB0aW9uOiBpZlxudGhlIGxhc3QgY29tbWFuZCB3YXMgYSAibGlzdCIgY29tbWFuZCwgdGhlIG5leHQgMTEgbGluZXMgYXJlIGxpc3RlZC5cblxuQ29tbWFuZHMgdGhhdCB0aGUgZGVidWdnZXIgZG9lc25cJ3QgcmVjb2duaXplIGFyZSBhc3N1bWVkIHRvIGJlIFB5dGhvblxuc3RhdGVtZW50cyBhbmQgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZC4gIFB5dGhvbiBzdGF0ZW1lbnRzIGNhbiBhbHNvIGJlIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb25cbnBvaW50ICgiISIpLiAgVGhpcyBpcyBhIHBvd2VyZnVsIHdheSB0byBpbnNwZWN0IHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZDsgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBjaGFuZ2UgYSB2YXJpYWJsZSBvciBjYWxsIGEgZnVuY3Rpb24uXG5XaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gc3VjaCBhIHN0YXRlbWVudCwgdGhlIGV4Y2VwdGlvbiBuYW1lIGlzXG5wcmludGVkIGJ1dCB0aGUgZGVidWdnZXJcJ3Mgc3RhdGUgaXMgbm90IGNoYW5nZWQuXG5cblRoZSBkZWJ1Z2dlciBzdXBwb3J0cyAqYWxpYXNlcyouICBBbGlhc2VzIGNhbiBoYXZlIHBhcmFtZXRlcnMgd2hpY2hcbmFsbG93cyBvbmUgYSBjZXJ0YWluIGxldmVsIG9mIGFkYXB0YWJpbGl0eSB0byB0aGUgY29udGV4dCB1bmRlclxuZXhhbWluYXRpb24uXG5cbk11bHRpcGxlIGNvbW1hbmRzIG1heSBiZSBlbnRlcmVkIG9uIGEgc2luZ2xlIGxpbmUsIHNlcGFyYXRlZCBieSAiOzsiLlxuKEEgc2luZ2xlICI7IiBpcyBub3QgdXNlZCBhcyBpdCBpcyB0aGUgc2VwYXJhdG9yIGZvciBtdWx0aXBsZSBjb21tYW5kc1xuaW4gYSBsaW5lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgIE5vIGludGVsbGlnZW5jZSBpc1xuYXBwbGllZCB0byBzZXBhcmF0aW5nIHRoZSBjb21tYW5kczsgdGhlIGlucHV0IGlzIHNwbGl0IGF0IHRoZSBmaXJzdFxuIjs7IiBwYWlyLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBxdW90ZWQgc3RyaW5nLlxuXG5JZiBhIGZpbGUgIi5wZGJyYyIgZXhpc3RzIGluIHRoZSB1c2VyXCdzIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZVxuY3VycmVudCBkaXJlY3RvcnksIGl0IGlzIHJlYWQgaW4gYW5kIGV4ZWN1dGVkIGFzIGlmIGl0IGhhZCBiZWVuIHR5cGVkXG5hdCB0aGUgZGVidWdnZXIgcHJvbXB0LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhbGlhc2VzLiAgSWZcbmJvdGggZmlsZXMgZXhpc3QsIHRoZSBvbmUgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGlzIHJlYWQgZmlyc3QgYW5kXG5hbGlhc2VzIGRlZmluZWQgdGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGxvY2FsIGZpbGUuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6ICIucGRicmMiIGNhbiBub3cgY29udGFpbiBjb21tYW5kcyB0aGF0XG5jb250aW51ZSBkZWJ1Z2dpbmcsIHN1Y2ggYXMgImNvbnRpbnVlIiBvciAibmV4dCIuICBQcmV2aW91c2x5LCB0aGVzZVxuY29tbWFuZHMgaGFkIG5vIGVmZmVjdC5cblxuaChlbHApIFtjb21tYW5kXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBwcmludCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaXRoIGFcbiAgICpjb21tYW5kKiBhcyBhcmd1bWVudCwgcHJpbnQgaGVscCBhYm91dCB0aGF0IGNvbW1hbmQuICAiaGVscCBwZGIiXG4gICBkaXNwbGF5cyB0aGUgZnVsbCBkb2N1bWVudGF0aW9uICh0aGUgZG9jc3RyaW5nIG9mIHRoZSAicGRiIlxuICAgbW9kdWxlKS4gIFNpbmNlIHRoZSAqY29tbWFuZCogYXJndW1lbnQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLCAiaGVscFxuICAgZXhlYyIgbXVzdCBiZSBlbnRlcmVkIHRvIGdldCBoZWxwIG9uIHRoZSAiISIgY29tbWFuZC5cblxudyhoZXJlKVxuXG4gICBQcmludCBhIHN0YWNrIHRyYWNlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBhdCB0aGUgYm90dG9tLiAgQW5cbiAgIGFycm93IGluZGljYXRlcyB0aGUgY3VycmVudCBmcmFtZSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgY29udGV4dCBvZlxuICAgbW9zdCBjb21tYW5kcy5cblxuZChvd24pIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIGRvd24gaW4gdGhlXG4gICBzdGFjayB0cmFjZSAodG8gYSBuZXdlciBmcmFtZSkuXG5cbnUocCkgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgdXAgaW4gdGhlIHN0YWNrXG4gICB0cmFjZSAodG8gYW4gb2xkZXIgZnJhbWUpLlxuXG5iKHJlYWspIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgV2l0aCBhICpsaW5lbm8qIGFyZ3VtZW50LCBzZXQgYSBicmVhayB0aGVyZSBpbiB0aGUgY3VycmVudCBmaWxlLlxuICAgV2l0aCBhICpmdW5jdGlvbiogYXJndW1lbnQsIHNldCBhIGJyZWFrIGF0IHRoZSBmaXJzdCBleGVjdXRhYmxlXG4gICBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBUaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkXG4gICB3aXRoIGEgZmlsZW5hbWUgYW5kIGEgY29sb24sIHRvIHNwZWNpZnkgYSBicmVha3BvaW50IGluIGFub3RoZXJcbiAgIGZpbGUgKHByb2JhYmx5IG9uZSB0aGF0IGhhc25cJ3QgYmVlbiBsb2FkZWQgeWV0KS4gIFRoZSBmaWxlIGlzXG4gICBzZWFyY2hlZCBvbiAic3lzLnBhdGgiLiAgTm90ZSB0aGF0IGVhY2ggYnJlYWtwb2ludCBpcyBhc3NpZ25lZCBhXG4gICBudW1iZXIgdG8gd2hpY2ggYWxsIHRoZSBvdGhlciBicmVha3BvaW50IGNvbW1hbmRzIHJlZmVyLlxuXG4gICBJZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50LCBpdCBpcyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGxpc3QgYWxsIGJyZWFrcywgaW5jbHVkaW5nIGZvciBlYWNoIGJyZWFrcG9pbnQsXG4gICB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYnJlYWtwb2ludCBoYXMgYmVlbiBoaXQsIHRoZSBjdXJyZW50XG4gICBpZ25vcmUgY291bnQsIGFuZCB0aGUgYXNzb2NpYXRlZCBjb25kaXRpb24gaWYgYW55LlxuXG50YnJlYWsgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBUZW1wb3JhcnkgYnJlYWtwb2ludCwgd2hpY2ggaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXNcbiAgIGZpcnN0IGhpdC4gVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yICJicmVhayIuXG5cbmNsKGVhcikgW2ZpbGVuYW1lOmxpbmVubyB8IGJwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBXaXRoIGEgKmZpbGVuYW1lOmxpbmVubyogYXJndW1lbnQsIGNsZWFyIGFsbCB0aGUgYnJlYWtwb2ludHMgYXRcbiAgIHRoaXMgbGluZS4gV2l0aCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJyZWFrcG9pbnQgbnVtYmVycywgY2xlYXJcbiAgIHRob3NlIGJyZWFrcG9pbnRzLiBXaXRob3V0IGFyZ3VtZW50LCBjbGVhciBhbGwgYnJlYWtzIChidXQgZmlyc3RcbiAgIGFzayBjb25maXJtYXRpb24pLlxuXG5kaXNhYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRGlzYWJsZSB0aGUgYnJlYWtwb2ludHMgZ2l2ZW4gYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZlxuICAgYnJlYWtwb2ludCBudW1iZXJzLiAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QgY2F1c2VcbiAgIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLCBidXQgdW5saWtlIGNsZWFyaW5nIGEgYnJlYWtwb2ludCwgaXRcbiAgIHJlbWFpbnMgaW4gdGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgYW5kIGNhbiBiZSAocmUtKWVuYWJsZWQuXG5cbmVuYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIEVuYWJsZSB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLlxuXG5pZ25vcmUgYnBudW1iZXIgW2NvdW50XVxuXG4gICBTZXQgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYgY291bnQgaXNcbiAgIG9taXR0ZWQsIHRoZSBpZ25vcmUgY291bnQgaXMgc2V0IHRvIDAuICBBIGJyZWFrcG9pbnQgYmVjb21lcyBhY3RpdmVcbiAgIHdoZW4gdGhlIGlnbm9yZSBjb3VudCBpcyB6ZXJvLiAgV2hlbiBub24temVybywgdGhlIGNvdW50IGlzXG4gICBkZWNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCBhbmQgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG5vdCBkaXNhYmxlZCBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5jb25kaXRpb24gYnBudW1iZXIgW2NvbmRpdGlvbl1cblxuICAgU2V0IGEgbmV3ICpjb25kaXRpb24qIGZvciB0aGUgYnJlYWtwb2ludCwgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLiAgSWYgKmNvbmRpdGlvbipcbiAgIGlzIGFic2VudCwgYW55IGV4aXN0aW5nIGNvbmRpdGlvbiBpcyByZW1vdmVkOyBpLmUuLCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbWFkZSB1bmNvbmRpdGlvbmFsLlxuXG5jb21tYW5kcyBbYnBudW1iZXJdXG5cbiAgIFNwZWNpZnkgYSBsaXN0IG9mIGNvbW1hbmRzIGZvciBicmVha3BvaW50IG51bWJlciAqYnBudW1iZXIqLiAgVGhlXG4gICBjb21tYW5kcyB0aGVtc2VsdmVzIGFwcGVhciBvbiB0aGUgZm9sbG93aW5nIGxpbmVzLiAgVHlwZSBhIGxpbmVcbiAgIGNvbnRhaW5pbmcganVzdCAiZW5kIiB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLiBBbiBleGFtcGxlOlxuXG4gICAgICAoUGRiKSBjb21tYW5kcyAxXG4gICAgICAoY29tKSBwcmludCBzb21lX3ZhcmlhYmxlXG4gICAgICAoY29tKSBlbmRcbiAgICAgIChQZGIpXG5cbiAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kIGZvbGxvd1xuICAgaXQgaW1tZWRpYXRlbHkgd2l0aCAiZW5kIjsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcblxuICAgRXhlY3V0ZSB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBvY2Nhc2lvblxuICAgKGVpdGhlciBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9yIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlXG4gICBjdXJyZW50IGZ1bmN0aW9uKS5cblxubihleHQpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzXG4gICByZWFjaGVkIG9yIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAibmV4dCIgYW5kICJzdGVwIlxuICAgaXMgdGhhdCAic3RlcCIgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZSAibmV4dCJcbiAgIGV4ZWN1dGVzIGNhbGxlZCBmdW5jdGlvbnMgYXQgKG5lYXJseSkgZnVsbCBzcGVlZCwgb25seSBzdG9wcGluZyBhdFxuICAgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4pXG5cbnVudChpbCkgW2xpbmVub11cblxuICAgV2l0aG91dCBhcmd1bWVudCwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBvbmUgaXMgcmVhY2hlZC5cblxuICAgV2l0aCBhIGxpbmUgbnVtYmVyLCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgYSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhhdCBpcyByZWFjaGVkLiAgSW4gYm90aCBjYXNlcywgYWxzbyBzdG9wIHdoZW5cbiAgIHRoZSBjdXJyZW50IGZyYW1lIHJldHVybnMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IEFsbG93IGdpdmluZyBhbiBleHBsaWNpdCBsaW5lIG51bWJlci5cblxucihldHVybilcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHJldHVybnMuXG5cbmMob250KGludWUpKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24sIG9ubHkgc3RvcCB3aGVuIGEgYnJlYWtwb2ludCBpcyBlbmNvdW50ZXJlZC5cblxuaih1bXApIGxpbmVub1xuXG4gICBTZXQgdGhlIG5leHQgbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuICBPbmx5IGF2YWlsYWJsZSBpbiB0aGVcbiAgIGJvdHRvbS1tb3N0IGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUgY29kZSBhZ2FpbixcbiAgIG9yIGp1bXAgZm9yd2FyZCB0byBza2lwIGNvZGUgdGhhdCB5b3UgZG9uXCd0IHdhbnQgdG8gcnVuLlxuXG4gICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIGp1bXBzIGFyZSBhbGxvd2VkIC0tIGZvciBpbnN0YW5jZVxuICAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIGEgImZvciIgbG9vcCBvciBvdXRcbiAgIG9mIGEgImZpbmFsbHkiIGNsYXVzZS5cblxubChpc3QpIFtmaXJzdFssIGxhc3RdXVxuXG4gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTFcbiAgIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLlxuICAgV2l0aCAiLiIgYXMgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUuICBXaXRoXG4gICBvbmUgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvXG4gICBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3NcbiAgIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LlxuXG4gICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSAiLT4iLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhlIGxpbmUgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNcbiAgIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5ICI+PiIsIGlmIGl0IGRpZmZlcnNcbiAgIGZyb20gdGhlIGN1cnJlbnQgbGluZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgIj4+IiBtYXJrZXIuXG5cbmxsIHwgbG9uZ2xpc3RcblxuICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLlxuICAgSW50ZXJlc3RpbmcgbGluZXMgYXJlIG1hcmtlZCBhcyBmb3IgImxpc3QiLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmEocmdzKVxuXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucChyaW50KSBleHByZXNzaW9uXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxucHAgZXhwcmVzc2lvblxuXG4gICBMaWtlIHRoZSAicHJpbnQiIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgIHByZXR0eS1wcmludGVkIHVzaW5nIHRoZSAicHByaW50IiBtb2R1bGUuXG5cbndoYXRpcyBleHByZXNzaW9uXG5cbiAgIFByaW50IHRoZSB0eXBlIG9mIHRoZSAqZXhwcmVzc2lvbiouXG5cbnNvdXJjZSBleHByZXNzaW9uXG5cbiAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lXG4gICBleGVjdXRpb24gc3RvcHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnVuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRG8gbm90IGRpc3BsYXkgdGhlIGV4cHJlc3Npb24gYW55IG1vcmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuaW50ZXJhY3RcblxuICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciAodXNpbmcgdGhlICJjb2RlIiBtb2R1bGUpIHdob3NlXG4gICBnbG9iYWwgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCB0aGUgKGdsb2JhbCBhbmQgbG9jYWwpIG5hbWVzIGZvdW5kIGluXG4gICB0aGUgY3VycmVudCBzY29wZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hbGlhcyBbbmFtZSBbY29tbWFuZF1dXG5cbiAgIENyZWF0ZSBhbiBhbGlhcyBjYWxsZWQgKm5hbWUqIHRoYXQgZXhlY3V0ZXMgKmNvbW1hbmQqLiAgVGhlIGNvbW1hbmRcbiAgIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVycyBjYW4gYmVcbiAgIGluZGljYXRlZCBieSAiJTEiLCAiJTIiLCBhbmQgc28gb24sIHdoaWxlICIlKiIgaXMgcmVwbGFjZWQgYnkgYWxsXG4gICB0aGUgcGFyYW1ldGVycy4gSWYgbm8gY29tbWFuZCBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgYWxpYXMgZm9yXG4gICAqbmFtZSogaXMgc2hvd24uIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGFsbCBhbGlhc2VzIGFyZSBsaXN0ZWQuXG5cbiAgIEFsaWFzZXMgbWF5IGJlIG5lc3RlZCBhbmQgY2FuIGNvbnRhaW4gYW55dGhpbmcgdGhhdCBjYW4gYmUgbGVnYWxseVxuICAgdHlwZWQgYXQgdGhlIHBkYiBwcm9tcHQuICBOb3RlIHRoYXQgaW50ZXJuYWwgcGRiIGNvbW1hbmRzICpjYW4qIGJlXG4gICBvdmVycmlkZGVuIGJ5IGFsaWFzZXMuICBTdWNoIGEgY29tbWFuZCBpcyB0aGVuIGhpZGRlbiB1bnRpbCB0aGVcbiAgIGFsaWFzIGlzIHJlbW92ZWQuICBBbGlhc2luZyBpcyByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgY29tbWFuZCBsaW5lOyBhbGwgb3RoZXIgd29yZHMgaW4gdGhlIGxpbmUgYXJlIGxlZnRcbiAgIGFsb25lLlxuXG4gICBBcyBhbiBleGFtcGxlLCBoZXJlIGFyZSB0d28gdXNlZnVsIGFsaWFzZXMgKGVzcGVjaWFsbHkgd2hlbiBwbGFjZWRcbiAgIGluIHRoZSAiLnBkYnJjIiBmaWxlKTpcblxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKVxuICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSlcbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGZcbiAgICAgIGFsaWFzIHBzIHBpIHNlbGZcblxudW5hbGlhcyBuYW1lXG5cbiAgIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGFsaWFzLlxuXG4hIHN0YXRlbWVudFxuXG4gICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50XG4gICBzdGFjayBmcmFtZS4gVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8gc2V0IGFcbiAgIGdsb2JhbCB2YXJpYWJsZSwgeW91IGNhbiBwcmVmaXggdGhlIGFzc2lnbm1lbnQgY29tbWFuZCB3aXRoIGFcbiAgICJnbG9iYWwiIHN0YXRlbWVudCBvbiB0aGUgc2FtZSBsaW5lLCBlLmcuOlxuXG4gICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbXCctbFwnXVxuICAgICAgKFBkYilcblxucnVuIFthcmdzIC4uLl1cbnJlc3RhcnQgW2FyZ3MgLi4uXVxuXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLFxuICAgaXQgaXMgc3BsaXQgd2l0aCAic2hsZXgiIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5ld1xuICAgInN5cy5hcmd2Ii4gSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMgYXJlXG4gICBwcmVzZXJ2ZWQuICJyZXN0YXJ0IiBpcyBhbiBhbGlhcyBmb3IgInJ1biIuXG5cbnEodWl0KVxuXG4gICBRdWl0IGZyb20gdGhlIGRlYnVnZ2VyLiAgVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgaXMgYWJvcnRlZC5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGV0aGVyIGEgZnJhbWUgaXMgY29uc2lkZXJlZCB0byBvcmlnaW5hdGUgaW4gYSBjZXJ0YWluIG1vZHVsZVxuICAgIGlzIGRldGVybWluZWQgYnkgdGhlICJfX25hbWVfXyIgaW4gdGhlIGZyYW1lIGdsb2JhbHMuXG4nLAorICdjb252ZXJzaW9ucyc6ICdcbkFyaXRobWV0aWMgY29udmVyc2lvbnNcbioqKioqKioqKioqKioqKioqKioqKipcblxuV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlXG4idGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoaXMgbWVhbnNcbnRoYXQgdGhlIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyB0aGF0IHdheTpcblxuKiBJZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBjb21wbGV4IG51bWJlciwgdGhlIG90aGVyIGlzIGNvbnZlcnRlZCB0b1xuICBjb21wbGV4O1xuXG4qIG90aGVyd2lzZSwgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB0aGUgb3RoZXJcbiAgaXMgY29udmVydGVkIHRvIGZsb2F0aW5nIHBvaW50O1xuXG4qIG90aGVyd2lzZSwgYm90aCBtdXN0IGJlIGludGVnZXJzIGFuZCBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS5cblxuU29tZSBhZGRpdGlvbmFsIHJ1bGVzIGFwcGx5IGZvciBjZXJ0YWluIG9wZXJhdG9ycyAoZS5nLiwgYSBzdHJpbmcgbGVmdFxuYXJndW1lbnQgdG8gdGhlIFwnJVwnIG9wZXJhdG9yKS4gIEV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgdGhlaXIgb3duXG5jb252ZXJzaW9uIGJlaGF2aW9yLlxuJywKKyAnY3VzdG9taXphdGlvbic6ICdcbkJhc2ljIGN1c3RvbWl6YXRpb25cbioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gICJfX25ld19fKCkiIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mICJfX25ld19fKCkiIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseSBhblxuICAgaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgdXNpbmdcbiAgICJzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKSIgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmICJfX25ld19fKCkiIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgIl9faW5pdF9fKHNlbGZbLCAuLi5dKSIsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvICJfX25ld19fKCkiLlxuXG4gICBJZiAiX19uZXdfXygpIiBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICAiX19uZXdfXygpIiBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICAiX19pbml0X18oKSIgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyAiX19pbml0X18oKSIgbWV0aG9kLCBpZlxuICAgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mIHRoZVxuICAgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICAiQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSkiLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnQgb25cbiAgIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgICJUeXBlRXJyb3IiIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhICJfX2RlbF9fKCkiIG1ldGhvZCwgdGhlXG4gICBkZXJpdmVkIGNsYXNzXCdzICJfX2RlbF9fKCkiIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdFxuICAgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZS5cbiAgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvciB0aGVcbiAgICJfX2RlbF9fKCkiIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6ICJkZWwgeCIgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCAieC5fX2RlbF9fKCkiIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgIngiIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXIgaXNcbiAgICAgb25seSBjYWxsZWQgd2hlbiAieCJcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWUgY29tbW9uXG4gICAgIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuIG9iamVjdCBmcm9tXG4gICAgIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuIG9iamVjdHMgKGUuZy4sXG4gICAgIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoIHBhcmVudCBhbmRcbiAgICAgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSBvZlxuICAgICBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5leGNfaW5mbygpWzJdIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvciBhIHJlZmVyZW5jZVxuICAgICB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhbiB1bmhhbmRsZWRcbiAgICAgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMubGFzdF90cmFjZWJhY2siIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyAiTm9uZSIgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIGFuZCBjbGVhbmVkIHVwIHdoZW4gdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3RvciBpc1xuICAgICBlbmFibGVkIChpdFwncyBvbiBieSBkZWZhdWx0KS4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICAiZ2MiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHRvcGljLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCAiX19kZWxfXygpIlxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvICJzeXMuc3RkZXJyIiBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuICJfX2RlbF9fKCkiIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSAiX19kZWxfXygpIiBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSAicmVwcigpIiBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSAib2ZmaWNpYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzXG4gICBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvXG4gICByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgIjwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj4iIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyAiX19yZXByX18oKSIgYnV0XG4gICBub3QgIl9fc3RyX18oKSIsIHRoZW4gIl9fcmVwcl9fKCkiIGlzIGFsc28gdXNlZCB3aGVuIGFuICJpbmZvcm1hbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpcyByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgInN0cihvYmplY3QpIiBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZm9ybWF0KCkiIGFuZFxuICAgInByaW50KCkiIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZSBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhICpzdHJpbmcqXG4gICBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSAib2JqZWN0Ll9fcmVwcl9fKCkiIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgIl9fc3RyX18oKSIgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlICJvYmplY3QiXG4gICBjYWxscyAib2JqZWN0Ll9fcmVwcl9fKCkiLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAiYnl0ZXMoKSIgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhICJieXRlcyIgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSAiZm9ybWF0KCkiIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBvZiBjbGFzcyAic3RyIikgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyBhXG4gICBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyB1cCB0b1xuICAgdGhlIHR5cGUgaW1wbGVtZW50aW5nICJfX2Zvcm1hdF9fKCkiLCBob3dldmVyIG1vc3QgY2xhc3NlcyB3aWxsXG4gICBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvciB1c2UgYVxuICAgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuNDogVGhlIF9fZm9ybWF0X18gbWV0aG9kIG9mICJvYmplY3QiIGl0c2VsZlxuICAgcmFpc2VzIGEgIlR5cGVFcnJvciIgaWYgcGFzc2VkIGFueSBub24tZW1wdHkgc3RyaW5nLlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6ICJ4PHkiIGNhbGxzICJ4Ll9fbHRfXyh5KSIsICJ4PD15IiBjYWxscyAieC5fX2xlX18oeSkiLFxuICAgIng9PXkiIGNhbGxzICJ4Ll9fZXFfXyh5KSIsICJ4IT15IiBjYWxscyAieC5fX25lX18oeSkiLCAieD55IiBjYWxsc1xuICAgInguX19ndF9fKHkpIiwgYW5kICJ4Pj15IiBjYWxscyAieC5fX2dlX18oeSkiLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uICJOb3RJbXBsZW1lbnRlZCJcbiAgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhIGdpdmVuIHBhaXIgb2ZcbiAgIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgIkZhbHNlIiBhbmQgIlRydWUiIGFyZSByZXR1cm5lZCBmb3IgYVxuICAgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhbiByZXR1cm4gYW55IHZhbHVlLFxuICAgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhIEJvb2xlYW4gY29udGV4dCAoZS5nLixcbiAgIGluIHRoZSBjb25kaXRpb24gb2YgYW4gImlmIiBzdGF0ZW1lbnQpLCBQeXRob24gd2lsbCBjYWxsICJib29sKCkiXG4gICBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHQgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgIng9PXkiIGRvZXMgbm90IGltcGx5IHRoYXQgInghPXkiIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgIl9fZXFfXygpIiwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgIl9fbmVfXygpIiBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWUgdGhlXG4gICBwYXJhZ3JhcGggb24gIl9faGFzaF9fKCkiIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvbiBjcmVhdGluZ1xuICAgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmRcbiAgIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCAiX19sdF9fKCkiIGFuZCAiX19ndF9fKCkiIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCAiX19sZV9fKCkiIGFuZCAiX19nZV9fKCkiIGFyZSBlYWNoIG90aGVyXCdzIHJlZmxlY3Rpb24sXG4gICBhbmQgIl9fZXFfXygpIiBhbmQgIl9fbmVfXygpIiBhcmUgdGhlaXIgb3duIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgImZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpIi5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiAiaGFzaCgpIiBhbmQgZm9yIG9wZXJhdGlvbnMgb24gbWVtYmVyc1xuICAgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyAic2V0IiwgImZyb3plbnNldCIsIGFuZCAiZGljdCIuXG4gICAiX19oYXNoX18oKSIgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHkgcmVxdWlyZWQgcHJvcGVydHlcbiAgIGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZTsgaXQgaXNcbiAgIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmcgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaFxuICAgdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXQgYWxzbyBwbGF5IGEgcGFydCBpblxuICAgY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBOb3RlOiAiaGFzaCgpIiB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICAiX19oYXNoX18oKSIgbWV0aG9kIHRvIHRoZSBzaXplIG9mIGEgIlB5X3NzaXplX3QiLiAgVGhpcyBpc1xuICAgICB0eXBpY2FsbHkgOCBieXRlcyBvbiA2NC1iaXQgYnVpbGRzIGFuZCA0IGJ5dGVzIG9uIDMyLWJpdCBidWlsZHMuXG4gICAgIElmIGFuIG9iamVjdFwncyAgICJfX2hhc2hfXygpIiBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggInB5dGhvbiAtYyAiaW1wb3J0IHN5cztcbiAgICAgcHJpbnQoc3lzLmhhc2hfaW5mby53aWR0aCkiIlxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiAiX19lcV9fKCkiIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSAiX19oYXNoX18oKSIgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lcyAiX19lcV9fKCkiXG4gICBidXQgbm90ICJfX2hhc2hfXygpIiwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZSB1c2FibGUgYXMgaXRlbXMgaW5cbiAgIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzIG11dGFibGUgb2JqZWN0cyBhbmRcbiAgIGltcGxlbWVudHMgYW4gIl9fZXFfXygpIiBtZXRob2QsIGl0IHNob3VsZCBub3QgaW1wbGVtZW50XG4gICAiX19oYXNoX18oKSIsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZSBjb2xsZWN0aW9uc1xuICAgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlIG9iamVjdFwncyBoYXNoXG4gICB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgIl9fZXFfXygpIiBhbmQgIl9faGFzaF9fKCkiIG1ldGhvZHMgYnlcbiAgIGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kICJ4Ll9faGFzaF9fKCkiIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCAieCA9PSB5IiBpbXBsaWVzIGJvdGggdGhhdCAieCBpcyB5IiBhbmQgImhhc2goeCkgPT0gaGFzaCh5KSIuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBhbmQgZG9lcyBub3QgZGVmaW5lICJfX2hhc2hfXygpIlxuICAgd2lsbCBoYXZlIGl0cyAiX19oYXNoX18oKSIgaW1wbGljaXRseSBzZXQgdG8gIk5vbmUiLiAgV2hlbiB0aGVcbiAgICJfX2hhc2hfXygpIiBtZXRob2Qgb2YgYSBjbGFzcyBpcyAiTm9uZSIsIGluc3RhbmNlcyBvZiB0aGUgY2xhc3NcbiAgIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgIlR5cGVFcnJvciIgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG9cbiAgIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlIikuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiAiX19oYXNoX18oKSIgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlIGludGVycHJldGVyXG4gICBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgIl9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX18iLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgIl9fZXFfXygpIiB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgIl9faGFzaF9fID0gTm9uZSIgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biAiX19oYXNoX18oKSIgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSAiVHlwZUVycm9yIiB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICBoYXNoYWJsZSBieSBhbiAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSIgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlICJfX2hhc2hfXygpIiB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmQgZGF0ZXRpbWVcbiAgICAgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyAiUFlUSE9OSEFTSFNFRUQiLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICAiYm9vbCgpIjsgc2hvdWxkIHJldHVybiAiRmFsc2UiIG9yICJUcnVlIi4gIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90XG4gICBkZWZpbmVkLCAiX19sZW5fXygpIiBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGUgb2JqZWN0IGlzXG4gICBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBuZWl0aGVyICJfX2xlbl9fKCkiIG5vciAiX19ib29sX18oKSIsIGFsbCBpdHMgaW5zdGFuY2VzIGFyZVxuICAgY29uc2lkZXJlZCB0cnVlLlxuJywKKyAnZGVidWdnZXInOiAnXG4icGRiIiAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG1vZHVsZSAicGRiIiBkZWZpbmVzIGFuIGludGVyYWN0aXZlIHNvdXJjZSBjb2RlIGRlYnVnZ2VyIGZvclxuUHl0aG9uIHByb2dyYW1zLiAgSXQgc3VwcG9ydHMgc2V0dGluZyAoY29uZGl0aW9uYWwpIGJyZWFrcG9pbnRzIGFuZFxuc2luZ2xlIHN0ZXBwaW5nIGF0IHRoZSBzb3VyY2UgbGluZSBsZXZlbCwgaW5zcGVjdGlvbiBvZiBzdGFjayBmcmFtZXMsXG5zb3VyY2UgY29kZSBsaXN0aW5nLCBhbmQgZXZhbHVhdGlvbiBvZiBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgaW4gdGhlXG5jb250ZXh0IG9mIGFueSBzdGFjayBmcmFtZS4gIEl0IGFsc28gc3VwcG9ydHMgcG9zdC1tb3J0ZW0gZGVidWdnaW5nXG5hbmQgY2FuIGJlIGNhbGxlZCB1bmRlciBwcm9ncmFtIGNvbnRyb2wuXG5cblRoZSBkZWJ1Z2dlciBpcyBleHRlbnNpYmxlIC0tIGl0IGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgdGhlIGNsYXNzXG4iUGRiIi4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieSByZWFkaW5nXG50aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyAiYmRiIiBhbmQgImNtZCIuXG5cblRoZSBkZWJ1Z2dlclwncyBwcm9tcHQgaXMgIihQZGIpIi4gVHlwaWNhbCB1c2FnZSB0byBydW4gYSBwcm9ncmFtIHVuZGVyXG5jb250cm9sIG9mIHRoZSBkZWJ1Z2dlciBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBwZGIucnVuKFwnbXltb2R1bGUudGVzdCgpXCcpXG4gICA+IDxzdHJpbmc+KDApPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgIE5hbWVFcnJvcjogXCdzcGFtXCdcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFRhYi1jb21wbGV0aW9uIHZpYSB0aGUgInJlYWRsaW5lIiBtb2R1bGUgaXNcbmF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kIGNvbW1hbmQgYXJndW1lbnRzLCBlLmcuIHRoZSBjdXJyZW50IGdsb2JhbFxuYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzIGFyZ3VtZW50cyBvZiB0aGUgInAiIGNvbW1hbmQuXG5cbiJwZGIucHkiIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy4gIEZvclxuZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiAgQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMy4yOiAicGRiLnB5IiBub3cgYWNjZXB0cyBhICItYyIgb3B0aW9uIHRoYXQgZXhlY3V0ZXNcbmNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgIi5wZGJyYyIgZmlsZSwgc2VlICpEZWJ1Z2dlciBDb21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlICJjb250aW51ZSIgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50KHNwYW0pXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQoc3BhbSlcbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXJcbiAgIGRlYnVnZ2VyIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzXG4gICBleGVjdXRlZDsgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgImNvbnRpbnVlIiwgb3IgeW91IGNhblxuICAgc3RlcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgdXNpbmcgInN0ZXAiIG9yICJuZXh0IiAoYWxsIHRoZXNlXG4gICBjb21tYW5kcyBhcmUgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqXG4gICBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5XG4gICBkZWZhdWx0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgIl9fbWFpbl9fIiBpcyB1c2VkLiAgKFNlZSB0aGVcbiAgIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiAiZXhlYygpIiBvciAiZXZhbCgpIiBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gInJ1bmV2YWwoKSIgcmV0dXJucywgaXQgcmV0dXJucyB0aGVcbiAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0b1xuICAgInJ1bigpIi5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG5cbiAgIENhbGwgdGhlICpmdW5jdGlvbiogKGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdCwgbm90IGEgc3RyaW5nKVxuICAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiAgV2hlbiAicnVuY2FsbCgpIiByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG5UaGUgInJ1bioiIGZ1bmN0aW9ucyBhbmQgInNldF90cmFjZSgpIiBhcmUgYWxpYXNlcyBmb3IgaW5zdGFudGlhdGluZ1xudGhlICJQZGIiIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZS4gIElmIHlvdSB3YW50XG50byBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpcyB5b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgIlBkYiIgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nICJjbWQuQ21kIiBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnRcbiAgIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBDdHJsLUMgb24gdGhlIGNvbnNvbGUpIHdoZW4geW91IGdpdmUgYVxuICAgImNvbnRpbnVlIiBjb21tYW5kLiBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXJcbiAgIGFnYWluIGJ5IHByZXNzaW5nIEN0cmwtQy4gIElmIHlvdSB3YW50IFBkYiBub3QgdG8gdG91Y2ggdGhlIFNJR0lOVFxuICAgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjE6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICpub3NpZ2ludCogYXJndW1lbnQuICBQcmV2aW91c2x5LCBhIFNJR0lOVFxuICAgaGFuZGxlciB3YXMgbmV2ZXIgc2V0IGJ5IFBkYi5cblxuICAgcnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuXG5cbkRlYnVnZ2VyIENvbW1hbmRzXG49PT09PT09PT09PT09PT09PVxuXG5UaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBiZWxvdy4gIE1vc3RcbmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byBvbmUgb3IgdHdvIGxldHRlcnMgYXMgaW5kaWNhdGVkOyBlLmcuXG4iaChlbHApIiBtZWFucyB0aGF0IGVpdGhlciAiaCIgb3IgImhlbHAiIGNhbiBiZSB1c2VkIHRvIGVudGVyIHRoZSBoZWxwXG5jb21tYW5kIChidXQgbm90ICJoZSIgb3IgImhlbCIsIG5vciAiSCIgb3IgIkhlbHAiIG9yICJIRUxQIikuXG5Bcmd1bWVudHMgdG8gY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSAoc3BhY2VzIG9yXG50YWJzKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzICgiW10iKSBpblxudGhlIGNvbW1hbmQgc3ludGF4OyB0aGUgc3F1YXJlIGJyYWNrZXRzIG11c3Qgbm90IGJlIHR5cGVkLlxuQWx0ZXJuYXRpdmVzIGluIHRoZSBjb21tYW5kIHN5bnRheCBhcmUgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgYmFyXG4oInwiKS5cblxuRW50ZXJpbmcgYSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIGxhc3QgY29tbWFuZCBlbnRlcmVkLiAgRXhjZXB0aW9uOiBpZlxudGhlIGxhc3QgY29tbWFuZCB3YXMgYSAibGlzdCIgY29tbWFuZCwgdGhlIG5leHQgMTEgbGluZXMgYXJlIGxpc3RlZC5cblxuQ29tbWFuZHMgdGhhdCB0aGUgZGVidWdnZXIgZG9lc25cJ3QgcmVjb2duaXplIGFyZSBhc3N1bWVkIHRvIGJlIFB5dGhvblxuc3RhdGVtZW50cyBhbmQgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZC4gIFB5dGhvbiBzdGF0ZW1lbnRzIGNhbiBhbHNvIGJlIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb25cbnBvaW50ICgiISIpLiAgVGhpcyBpcyBhIHBvd2VyZnVsIHdheSB0byBpbnNwZWN0IHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZDsgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBjaGFuZ2UgYSB2YXJpYWJsZSBvciBjYWxsIGEgZnVuY3Rpb24uXG5XaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gc3VjaCBhIHN0YXRlbWVudCwgdGhlIGV4Y2VwdGlvbiBuYW1lIGlzXG5wcmludGVkIGJ1dCB0aGUgZGVidWdnZXJcJ3Mgc3RhdGUgaXMgbm90IGNoYW5nZWQuXG5cblRoZSBkZWJ1Z2dlciBzdXBwb3J0cyAqYWxpYXNlcyouICBBbGlhc2VzIGNhbiBoYXZlIHBhcmFtZXRlcnMgd2hpY2hcbmFsbG93cyBvbmUgYSBjZXJ0YWluIGxldmVsIG9mIGFkYXB0YWJpbGl0eSB0byB0aGUgY29udGV4dCB1bmRlclxuZXhhbWluYXRpb24uXG5cbk11bHRpcGxlIGNvbW1hbmRzIG1heSBiZSBlbnRlcmVkIG9uIGEgc2luZ2xlIGxpbmUsIHNlcGFyYXRlZCBieSAiOzsiLlxuKEEgc2luZ2xlICI7IiBpcyBub3QgdXNlZCBhcyBpdCBpcyB0aGUgc2VwYXJhdG9yIGZvciBtdWx0aXBsZSBjb21tYW5kc1xuaW4gYSBsaW5lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgIE5vIGludGVsbGlnZW5jZSBpc1xuYXBwbGllZCB0byBzZXBhcmF0aW5nIHRoZSBjb21tYW5kczsgdGhlIGlucHV0IGlzIHNwbGl0IGF0IHRoZSBmaXJzdFxuIjs7IiBwYWlyLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBxdW90ZWQgc3RyaW5nLlxuXG5JZiBhIGZpbGUgIi5wZGJyYyIgZXhpc3RzIGluIHRoZSB1c2VyXCdzIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZVxuY3VycmVudCBkaXJlY3RvcnksIGl0IGlzIHJlYWQgaW4gYW5kIGV4ZWN1dGVkIGFzIGlmIGl0IGhhZCBiZWVuIHR5cGVkXG5hdCB0aGUgZGVidWdnZXIgcHJvbXB0LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhbGlhc2VzLiAgSWZcbmJvdGggZmlsZXMgZXhpc3QsIHRoZSBvbmUgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGlzIHJlYWQgZmlyc3QgYW5kXG5hbGlhc2VzIGRlZmluZWQgdGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGxvY2FsIGZpbGUuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6ICIucGRicmMiIGNhbiBub3cgY29udGFpbiBjb21tYW5kcyB0aGF0XG5jb250aW51ZSBkZWJ1Z2dpbmcsIHN1Y2ggYXMgImNvbnRpbnVlIiBvciAibmV4dCIuICBQcmV2aW91c2x5LCB0aGVzZVxuY29tbWFuZHMgaGFkIG5vIGVmZmVjdC5cblxuaChlbHApIFtjb21tYW5kXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBwcmludCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaXRoIGFcbiAgICpjb21tYW5kKiBhcyBhcmd1bWVudCwgcHJpbnQgaGVscCBhYm91dCB0aGF0IGNvbW1hbmQuICAiaGVscCBwZGIiXG4gICBkaXNwbGF5cyB0aGUgZnVsbCBkb2N1bWVudGF0aW9uICh0aGUgZG9jc3RyaW5nIG9mIHRoZSAicGRiIlxuICAgbW9kdWxlKS4gIFNpbmNlIHRoZSAqY29tbWFuZCogYXJndW1lbnQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLCAiaGVscFxuICAgZXhlYyIgbXVzdCBiZSBlbnRlcmVkIHRvIGdldCBoZWxwIG9uIHRoZSAiISIgY29tbWFuZC5cblxudyhoZXJlKVxuXG4gICBQcmludCBhIHN0YWNrIHRyYWNlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBhdCB0aGUgYm90dG9tLiAgQW5cbiAgIGFycm93IGluZGljYXRlcyB0aGUgY3VycmVudCBmcmFtZSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgY29udGV4dCBvZlxuICAgbW9zdCBjb21tYW5kcy5cblxuZChvd24pIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIGRvd24gaW4gdGhlXG4gICBzdGFjayB0cmFjZSAodG8gYSBuZXdlciBmcmFtZSkuXG5cbnUocCkgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgdXAgaW4gdGhlIHN0YWNrXG4gICB0cmFjZSAodG8gYW4gb2xkZXIgZnJhbWUpLlxuXG5iKHJlYWspIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgV2l0aCBhICpsaW5lbm8qIGFyZ3VtZW50LCBzZXQgYSBicmVhayB0aGVyZSBpbiB0aGUgY3VycmVudCBmaWxlLlxuICAgV2l0aCBhICpmdW5jdGlvbiogYXJndW1lbnQsIHNldCBhIGJyZWFrIGF0IHRoZSBmaXJzdCBleGVjdXRhYmxlXG4gICBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBUaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkXG4gICB3aXRoIGEgZmlsZW5hbWUgYW5kIGEgY29sb24sIHRvIHNwZWNpZnkgYSBicmVha3BvaW50IGluIGFub3RoZXJcbiAgIGZpbGUgKHByb2JhYmx5IG9uZSB0aGF0IGhhc25cJ3QgYmVlbiBsb2FkZWQgeWV0KS4gIFRoZSBmaWxlIGlzXG4gICBzZWFyY2hlZCBvbiAic3lzLnBhdGgiLiAgTm90ZSB0aGF0IGVhY2ggYnJlYWtwb2ludCBpcyBhc3NpZ25lZCBhXG4gICBudW1iZXIgdG8gd2hpY2ggYWxsIHRoZSBvdGhlciBicmVha3BvaW50IGNvbW1hbmRzIHJlZmVyLlxuXG4gICBJZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50LCBpdCBpcyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGxpc3QgYWxsIGJyZWFrcywgaW5jbHVkaW5nIGZvciBlYWNoIGJyZWFrcG9pbnQsXG4gICB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYnJlYWtwb2ludCBoYXMgYmVlbiBoaXQsIHRoZSBjdXJyZW50XG4gICBpZ25vcmUgY291bnQsIGFuZCB0aGUgYXNzb2NpYXRlZCBjb25kaXRpb24gaWYgYW55LlxuXG50YnJlYWsgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBUZW1wb3JhcnkgYnJlYWtwb2ludCwgd2hpY2ggaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXNcbiAgIGZpcnN0IGhpdC4gVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yICJicmVhayIuXG5cbmNsKGVhcikgW2ZpbGVuYW1lOmxpbmVubyB8IGJwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBXaXRoIGEgKmZpbGVuYW1lOmxpbmVubyogYXJndW1lbnQsIGNsZWFyIGFsbCB0aGUgYnJlYWtwb2ludHMgYXRcbiAgIHRoaXMgbGluZS4gV2l0aCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJyZWFrcG9pbnQgbnVtYmVycywgY2xlYXJcbiAgIHRob3NlIGJyZWFrcG9pbnRzLiBXaXRob3V0IGFyZ3VtZW50LCBjbGVhciBhbGwgYnJlYWtzIChidXQgZmlyc3RcbiAgIGFzayBjb25maXJtYXRpb24pLlxuXG5kaXNhYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRGlzYWJsZSB0aGUgYnJlYWtwb2ludHMgZ2l2ZW4gYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZlxuICAgYnJlYWtwb2ludCBudW1iZXJzLiAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QgY2F1c2VcbiAgIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLCBidXQgdW5saWtlIGNsZWFyaW5nIGEgYnJlYWtwb2ludCwgaXRcbiAgIHJlbWFpbnMgaW4gdGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgYW5kIGNhbiBiZSAocmUtKWVuYWJsZWQuXG5cbmVuYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIEVuYWJsZSB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLlxuXG5pZ25vcmUgYnBudW1iZXIgW2NvdW50XVxuXG4gICBTZXQgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYgY291bnQgaXNcbiAgIG9taXR0ZWQsIHRoZSBpZ25vcmUgY291bnQgaXMgc2V0IHRvIDAuICBBIGJyZWFrcG9pbnQgYmVjb21lcyBhY3RpdmVcbiAgIHdoZW4gdGhlIGlnbm9yZSBjb3VudCBpcyB6ZXJvLiAgV2hlbiBub24temVybywgdGhlIGNvdW50IGlzXG4gICBkZWNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCBhbmQgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG5vdCBkaXNhYmxlZCBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5jb25kaXRpb24gYnBudW1iZXIgW2NvbmRpdGlvbl1cblxuICAgU2V0IGEgbmV3ICpjb25kaXRpb24qIGZvciB0aGUgYnJlYWtwb2ludCwgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLiAgSWYgKmNvbmRpdGlvbipcbiAgIGlzIGFic2VudCwgYW55IGV4aXN0aW5nIGNvbmRpdGlvbiBpcyByZW1vdmVkOyBpLmUuLCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbWFkZSB1bmNvbmRpdGlvbmFsLlxuXG5jb21tYW5kcyBbYnBudW1iZXJdXG5cbiAgIFNwZWNpZnkgYSBsaXN0IG9mIGNvbW1hbmRzIGZvciBicmVha3BvaW50IG51bWJlciAqYnBudW1iZXIqLiAgVGhlXG4gICBjb21tYW5kcyB0aGVtc2VsdmVzIGFwcGVhciBvbiB0aGUgZm9sbG93aW5nIGxpbmVzLiAgVHlwZSBhIGxpbmVcbiAgIGNvbnRhaW5pbmcganVzdCAiZW5kIiB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLiBBbiBleGFtcGxlOlxuXG4gICAgICAoUGRiKSBjb21tYW5kcyAxXG4gICAgICAoY29tKSBwIHNvbWVfdmFyaWFibGVcbiAgICAgIChjb20pIGVuZFxuICAgICAgKFBkYilcblxuICAgVG8gcmVtb3ZlIGFsbCBjb21tYW5kcyBmcm9tIGEgYnJlYWtwb2ludCwgdHlwZSBjb21tYW5kcyBhbmQgZm9sbG93XG4gICBpdCBpbW1lZGlhdGVseSB3aXRoICJlbmQiOyB0aGF0IGlzLCBnaXZlIG5vIGNvbW1hbmRzLlxuXG4gICBXaXRoIG5vICpicG51bWJlciogYXJndW1lbnQsIGNvbW1hbmRzIHJlZmVycyB0byB0aGUgbGFzdCBicmVha3BvaW50XG4gICBzZXQuXG5cbiAgIFlvdSBjYW4gdXNlIGJyZWFrcG9pbnQgY29tbWFuZHMgdG8gc3RhcnQgeW91ciBwcm9ncmFtIHVwIGFnYWluLlxuICAgU2ltcGx5IHVzZSB0aGUgY29udGludWUgY29tbWFuZCwgb3Igc3RlcCwgb3IgYW55IG90aGVyIGNvbW1hbmQgdGhhdFxuICAgcmVzdW1lcyBleGVjdXRpb24uXG5cbiAgIFNwZWNpZnlpbmcgYW55IGNvbW1hbmQgcmVzdW1pbmcgZXhlY3V0aW9uIChjdXJyZW50bHkgY29udGludWUsXG4gICBzdGVwLCBuZXh0LCByZXR1cm4sIGp1bXAsIHF1aXQgYW5kIHRoZWlyIGFiYnJldmlhdGlvbnMpIHRlcm1pbmF0ZXNcbiAgIHRoZSBjb21tYW5kIGxpc3QgKGFzIGlmIHRoYXQgY29tbWFuZCB3YXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnlcbiAgIGVuZCkuIFRoaXMgaXMgYmVjYXVzZSBhbnkgdGltZSB5b3UgcmVzdW1lIGV4ZWN1dGlvbiAoZXZlbiB3aXRoIGFcbiAgIHNpbXBsZSBuZXh0IG9yIHN0ZXApLCB5b3UgbWF5IGVuY291bnRlciBhbm90aGVyIGJyZWFrcG9pbnQtLXdoaWNoXG4gICBjb3VsZCBoYXZlIGl0cyBvd24gY29tbWFuZCBsaXN0LCBsZWFkaW5nIHRvIGFtYmlndWl0aWVzIGFib3V0IHdoaWNoXG4gICBsaXN0IHRvIGV4ZWN1dGUuXG5cbiAgIElmIHlvdSB1c2UgdGhlIFwnc2lsZW50XCcgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0LCB0aGUgdXN1YWxcbiAgIG1lc3NhZ2UgYWJvdXQgc3RvcHBpbmcgYXQgYSBicmVha3BvaW50IGlzIG5vdCBwcmludGVkLiAgVGhpcyBtYXkgYmVcbiAgIGRlc2lyYWJsZSBmb3IgYnJlYWtwb2ludHMgdGhhdCBhcmUgdG8gcHJpbnQgYSBzcGVjaWZpYyBtZXNzYWdlIGFuZFxuICAgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyIGNvbW1hbmRzIHByaW50IGFueXRoaW5nLCB5b3VcbiAgIHNlZSBubyBzaWduIHRoYXQgdGhlIGJyZWFrcG9pbnQgd2FzIHJlYWNoZWQuXG5cbnModGVwKVxuXG4gICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uXG4gICAoZWl0aGVyIGluIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3Igb24gdGhlIG5leHQgbGluZSBpbiB0aGVcbiAgIGN1cnJlbnQgZnVuY3Rpb24pLlxuXG5uKGV4dClcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXNcbiAgIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuICJuZXh0IiBhbmQgInN0ZXAiXG4gICBpcyB0aGF0ICJzdGVwIiBzdG9wcyBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlICJuZXh0IlxuICAgZXhlY3V0ZXMgY2FsbGVkIGZ1bmN0aW9ucyBhdCAobmVhcmx5KSBmdWxsIHNwZWVkLCBvbmx5IHN0b3BwaW5nIGF0XG4gICB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLilcblxudW50KGlsKSBbbGluZW5vXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcyByZWFjaGVkLlxuXG4gICBXaXRoIGEgbGluZSBudW1iZXIsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBhIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGF0IGlzIHJlYWNoZWQuICBJbiBib3RoIGNhc2VzLCBhbHNvIHN0b3Agd2hlblxuICAgdGhlIGN1cnJlbnQgZnJhbWUgcmV0dXJucy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogQWxsb3cgZ2l2aW5nIGFuIGV4cGxpY2l0IGxpbmUgbnVtYmVyLlxuXG5yKGV0dXJuKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy5cblxuYyhvbnQoaW51ZSkpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLlxuXG5qKHVtcCkgbGluZW5vXG5cbiAgIFNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gIE9ubHkgYXZhaWxhYmxlIGluIHRoZVxuICAgYm90dG9tLW1vc3QgZnJhbWUuICBUaGlzIGxldHMgeW91IGp1bXAgYmFjayBhbmQgZXhlY3V0ZSBjb2RlIGFnYWluLFxuICAgb3IganVtcCBmb3J3YXJkIHRvIHNraXAgY29kZSB0aGF0IHlvdSBkb25cJ3Qgd2FudCB0byBydW4uXG5cbiAgIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IG5vdCBhbGwganVtcHMgYXJlIGFsbG93ZWQgLS0gZm9yIGluc3RhbmNlXG4gICBpdCBpcyBub3QgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSAiZm9yIiBsb29wIG9yIG91dFxuICAgb2YgYSAiZmluYWxseSIgY2xhdXNlLlxuXG5sKGlzdCkgW2ZpcnN0WywgbGFzdF1dXG5cbiAgIExpc3Qgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBXaXRob3V0IGFyZ3VtZW50cywgbGlzdCAxMVxuICAgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuXG4gICBXaXRoICIuIiBhcyBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZS4gIFdpdGhcbiAgIG9uZSBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgYXQgdGhhdCBsaW5lLiAgV2l0aCB0d29cbiAgIGFyZ3VtZW50cywgbGlzdCB0aGUgZ2l2ZW4gcmFuZ2U7IGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbGVzc1xuICAgdGhhbiB0aGUgZmlyc3QsIGl0IGlzIGludGVycHJldGVkIGFzIGEgY291bnQuXG5cbiAgIFRoZSBjdXJyZW50IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUgaXMgaW5kaWNhdGVkIGJ5ICItPiIuICBJZiBhblxuICAgZXhjZXB0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkLCB0aGUgbGluZSB3aGVyZSB0aGUgZXhjZXB0aW9uIHdhc1xuICAgb3JpZ2luYWxseSByYWlzZWQgb3IgcHJvcGFnYXRlZCBpcyBpbmRpY2F0ZWQgYnkgIj4+IiwgaWYgaXQgZGlmZmVyc1xuICAgZnJvbSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSAiPj4iIG1hcmtlci5cblxubGwgfCBsb25nbGlzdFxuXG4gICBMaXN0IGFsbCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb24gb3IgZnJhbWUuXG4gICBJbnRlcmVzdGluZyBsaW5lcyBhcmUgbWFya2VkIGFzIGZvciAibGlzdCIuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYShyZ3MpXG5cbiAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLlxuXG5wIGV4cHJlc3Npb25cblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHNcbiAgIHZhbHVlLlxuXG4gICBOb3RlOiAicHJpbnQoKSIgY2FuIGFsc28gYmUgdXNlZCwgYnV0IGlzIG5vdCBhIGRlYnVnZ2VyIGNvbW1hbmQgLS0tXG4gICAgIHRoaXMgZXhlY3V0ZXMgdGhlIFB5dGhvbiAicHJpbnQoKSIgZnVuY3Rpb24uXG5cbnBwIGV4cHJlc3Npb25cblxuICAgTGlrZSB0aGUgInAiIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgcHJldHR5LVxuICAgcHJpbnRlZCB1c2luZyB0aGUgInBwcmludCIgbW9kdWxlLlxuXG53aGF0aXMgZXhwcmVzc2lvblxuXG4gICBQcmludCB0aGUgdHlwZSBvZiB0aGUgKmV4cHJlc3Npb24qLlxuXG5zb3VyY2UgZXhwcmVzc2lvblxuXG4gICBUcnkgdG8gZ2V0IHNvdXJjZSBjb2RlIGZvciB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCBkaXNwbGF5IGl0LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmRpc3BsYXkgW2V4cHJlc3Npb25dXG5cbiAgIERpc3BsYXkgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlmIGl0IGNoYW5nZWQsIGVhY2ggdGltZVxuICAgZXhlY3V0aW9uIHN0b3BzIGluIHRoZSBjdXJyZW50IGZyYW1lLlxuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGxpc3QgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG51bmRpc3BsYXkgW2V4cHJlc3Npb25dXG5cbiAgIERvIG5vdCBkaXNwbGF5IHRoZSBleHByZXNzaW9uIGFueSBtb3JlIGluIHRoZSBjdXJyZW50IGZyYW1lLlxuICAgV2l0aG91dCBleHByZXNzaW9uLCBjbGVhciBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmludGVyYWN0XG5cbiAgIFN0YXJ0IGFuIGludGVyYXRpdmUgaW50ZXJwcmV0ZXIgKHVzaW5nIHRoZSAiY29kZSIgbW9kdWxlKSB3aG9zZVxuICAgZ2xvYmFsIG5hbWVzcGFjZSBjb250YWlucyBhbGwgdGhlIChnbG9iYWwgYW5kIGxvY2FsKSBuYW1lcyBmb3VuZCBpblxuICAgdGhlIGN1cnJlbnQgc2NvcGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYWxpYXMgW25hbWUgW2NvbW1hbmRdXVxuXG4gICBDcmVhdGUgYW4gYWxpYXMgY2FsbGVkICpuYW1lKiB0aGF0IGV4ZWN1dGVzICpjb21tYW5kKi4gIFRoZSBjb21tYW5kXG4gICBtdXN0ICpub3QqIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy4gIFJlcGxhY2VhYmxlIHBhcmFtZXRlcnMgY2FuIGJlXG4gICBpbmRpY2F0ZWQgYnkgIiUxIiwgIiUyIiwgYW5kIHNvIG9uLCB3aGlsZSAiJSoiIGlzIHJlcGxhY2VkIGJ5IGFsbFxuICAgdGhlIHBhcmFtZXRlcnMuIElmIG5vIGNvbW1hbmQgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGFsaWFzIGZvclxuICAgKm5hbWUqIGlzIHNob3duLiBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBhbGwgYWxpYXNlcyBhcmUgbGlzdGVkLlxuXG4gICBBbGlhc2VzIG1heSBiZSBuZXN0ZWQgYW5kIGNhbiBjb250YWluIGFueXRoaW5nIHRoYXQgY2FuIGJlIGxlZ2FsbHlcbiAgIHR5cGVkIGF0IHRoZSBwZGIgcHJvbXB0LiAgTm90ZSB0aGF0IGludGVybmFsIHBkYiBjb21tYW5kcyAqY2FuKiBiZVxuICAgb3ZlcnJpZGRlbiBieSBhbGlhc2VzLiAgU3VjaCBhIGNvbW1hbmQgaXMgdGhlbiBoaWRkZW4gdW50aWwgdGhlXG4gICBhbGlhcyBpcyByZW1vdmVkLiAgQWxpYXNpbmcgaXMgcmVjdXJzaXZlbHkgYXBwbGllZCB0byB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZTsgYWxsIG90aGVyIHdvcmRzIGluIHRoZSBsaW5lIGFyZSBsZWZ0XG4gICBhbG9uZS5cblxuICAgQXMgYW4gZXhhbXBsZSwgaGVyZSBhcmUgdHdvIHVzZWZ1bCBhbGlhc2VzIChlc3BlY2lhbGx5IHdoZW4gcGxhY2VkXG4gICBpbiB0aGUgIi5wZGJyYyIgZmlsZSk6XG5cbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IilcbiAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmXG4gICAgICBhbGlhcyBwcyBwaSBzZWxmXG5cbnVuYWxpYXMgbmFtZVxuXG4gICBEZWxldGUgdGhlIHNwZWNpZmllZCBhbGlhcy5cblxuISBzdGF0ZW1lbnRcblxuICAgRXhlY3V0ZSB0aGUgKG9uZS1saW5lKSAqc3RhdGVtZW50KiBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudFxuICAgc3RhY2sgZnJhbWUuIFRoZSBleGNsYW1hdGlvbiBwb2ludCBjYW4gYmUgb21pdHRlZCB1bmxlc3MgdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBzdGF0ZW1lbnQgcmVzZW1ibGVzIGEgZGVidWdnZXIgY29tbWFuZC4gIFRvIHNldCBhXG4gICBnbG9iYWwgdmFyaWFibGUsIHlvdSBjYW4gcHJlZml4IHRoZSBhc3NpZ25tZW50IGNvbW1hbmQgd2l0aCBhXG4gICAiZ2xvYmFsIiBzdGF0ZW1lbnQgb24gdGhlIHNhbWUgbGluZSwgZS5nLjpcblxuICAgICAgKFBkYikgZ2xvYmFsIGxpc3Rfb3B0aW9uczsgbGlzdF9vcHRpb25zID0gW1wnLWxcJ11cbiAgICAgIChQZGIpXG5cbnJ1biBbYXJncyAuLi5dXG5yZXN0YXJ0IFthcmdzIC4uLl1cblxuICAgUmVzdGFydCB0aGUgZGVidWdnZWQgUHl0aG9uIHByb2dyYW0uICBJZiBhbiBhcmd1bWVudCBpcyBzdXBwbGllZCxcbiAgIGl0IGlzIHNwbGl0IHdpdGggInNobGV4IiBhbmQgdGhlIHJlc3VsdCBpcyB1c2VkIGFzIHRoZSBuZXdcbiAgICJzeXMuYXJndiIuIEhpc3RvcnksIGJyZWFrcG9pbnRzLCBhY3Rpb25zIGFuZCBkZWJ1Z2dlciBvcHRpb25zIGFyZVxuICAgcHJlc2VydmVkLiAicmVzdGFydCIgaXMgYW4gYWxpYXMgZm9yICJydW4iLlxuXG5xKHVpdClcblxuICAgUXVpdCBmcm9tIHRoZSBkZWJ1Z2dlci4gIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gV2hldGhlciBhIGZyYW1lIGlzIGNvbnNpZGVyZWQgdG8gb3JpZ2luYXRlIGluIGEgY2VydGFpbiBtb2R1bGUgaXNcbiAgICBkZXRlcm1pbmVkIGJ5IHRoZSAiX19uYW1lX18iIGluIHRoZSBmcmFtZSBnbG9iYWxzLlxuJywKICAnZGVsJzogJ1xuVGhlICJkZWwiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKlxuXG4gICBkZWxfc3RtdCA6Oj0gImRlbCIgdGFyZ2V0X2xpc3RcblxuRGVsZXRpb24gaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSBhc3NpZ25tZW50IGlzXG5kZWZpbmVkLiBSYXRoZXIgdGhhbiBzcGVsbGluZyBpdCBvdXQgaW4gZnVsbCBkZXRhaWxzLCBoZXJlIGFyZSBzb21lXG5oaW50cy5cblxuRGVsZXRpb24gb2YgYSB0YXJnZXQgbGlzdCByZWN1cnNpdmVseSBkZWxldGVzIGVhY2ggdGFyZ2V0LCBmcm9tIGxlZnRcbnRvIHJpZ2h0LlxuXG5EZWxldGlvbiBvZiBhIG5hbWUgcmVtb3ZlcyB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgZnJvbSB0aGUgbG9jYWwgb3Jcbmdsb2JhbCBuYW1lc3BhY2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuYW1lIG9jY3VycyBpbiBhICJnbG9iYWwiXG5zdGF0ZW1lbnQgaW4gdGhlIHNhbWUgY29kZSBibG9jay4gIElmIHRoZSBuYW1lIGlzIHVuYm91bmQsIGFcbiJOYW1lRXJyb3IiIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC5cblxuRGVsZXRpb24gb2YgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHN1YnNjcmlwdGlvbnMgYW5kIHNsaWNpbmdzIGlzIHBhc3NlZFxudG8gdGhlIHByaW1hcnkgb2JqZWN0IGludm9sdmVkOyBkZWxldGlvbiBvZiBhIHNsaWNpbmcgaXMgaW4gZ2VuZXJhbFxuZXF1aXZhbGVudCB0byBhc3NpZ25tZW50IG9mIGFuIGVtcHR5IHNsaWNlIG9mIHRoZSByaWdodCB0eXBlIChidXQgZXZlblxudGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzbGljZWQgb2JqZWN0KS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogUHJldmlvdXNseSBpdCB3YXMgaWxsZWdhbCB0byBkZWxldGUgYSBuYW1lXG5mcm9tIHRoZSBsb2NhbCBuYW1lc3BhY2UgaWYgaXQgb2NjdXJzIGFzIGEgZnJlZSB2YXJpYWJsZSBpbiBhIG5lc3RlZFxuYmxvY2suXG4nLAogICdkaWN0JzogJ1xuRGljdGlvbmFyeSBkaXNwbGF5c1xuKioqKioqKioqKioqKioqKioqKlxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBrZXkvZGF0dW0gcGFpcnNcbmVuY2xvc2VkIGluIGN1cmx5IGJyYWNlczpcblxuICAgZGljdF9kaXNwbGF5ICAgICAgIDo6PSAieyIgW2tleV9kYXR1bV9saXN0IHwgZGljdF9jb21wcmVoZW5zaW9uXSAifSJcbiAgIGtleV9kYXR1bV9saXN0ICAgICA6Oj0ga2V5X2RhdHVtICgiLCIga2V5X2RhdHVtKSogWyIsIl1cbiAgIGtleV9kYXR1bSAgICAgICAgICA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvblxuICAgZGljdF9jb21wcmVoZW5zaW9uIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uIGNvbXBfZm9yXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IHlpZWxkcyBhIG5ldyBkaWN0aW9uYXJ5IG9iamVjdC5cblxuSWYgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Yga2V5L2RhdHVtIHBhaXJzIGlzIGdpdmVuLCB0aGV5IGFyZVxuZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB0byBkZWZpbmUgdGhlIGVudHJpZXMgb2YgdGhlIGRpY3Rpb25hcnk6XG5lYWNoIGtleSBvYmplY3QgaXMgdXNlZCBhcyBhIGtleSBpbnRvIHRoZSBkaWN0aW9uYXJ5IHRvIHN0b3JlIHRoZVxuY29ycmVzcG9uZGluZyBkYXR1bS4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNhbWUga2V5XG5tdWx0aXBsZSB0aW1lcyBpbiB0aGUga2V5L2RhdHVtIGxpc3QsIGFuZCB0aGUgZmluYWwgZGljdGlvbmFyeVwncyB2YWx1ZVxuZm9yIHRoYXQga2V5IHdpbGwgYmUgdGhlIGxhc3Qgb25lIGdpdmVuLlxuXG5BIGRpY3QgY29tcHJlaGVuc2lvbiwgaW4gY29udHJhc3QgdG8gbGlzdCBhbmQgc2V0IGNvbXByZWhlbnNpb25zLFxubmVlZHMgdHdvIGV4cHJlc3Npb25zIHNlcGFyYXRlZCB3aXRoIGEgY29sb24gZm9sbG93ZWQgYnkgdGhlIHVzdWFsXG4iZm9yIiBhbmQgImlmIiBjbGF1c2VzLiBXaGVuIHRoZSBjb21wcmVoZW5zaW9uIGlzIHJ1biwgdGhlIHJlc3VsdGluZ1xua2V5IGFuZCB2YWx1ZSBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5IGluIHRoZSBvcmRlclxudGhleSBhcmUgcHJvZHVjZWQuXG5cblJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZXMgb2YgdGhlIGtleSB2YWx1ZXMgYXJlIGxpc3RlZCBlYXJsaWVyIGluXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqLiAgKFRvIHN1bW1hcml6ZSwgdGhlIGtleSB0eXBlXG5zaG91bGQgYmUgKmhhc2hhYmxlKiwgd2hpY2ggZXhjbHVkZXMgYWxsIG11dGFibGUgb2JqZWN0cy4pICBDbGFzaGVzXG5iZXR3ZWVuIGR1cGxpY2F0ZSBrZXlzIGFyZSBub3QgZGV0ZWN0ZWQ7IHRoZSBsYXN0IGRhdHVtICh0ZXh0dWFsbHlcbnJpZ2h0bW9zdCBpbiB0aGUgZGlzcGxheSkgc3RvcmVkIGZvciBhIGdpdmVuIGtleSB2YWx1ZSBwcmV2YWlscy5cbicsCiAgJ2R5bmFtaWMtZmVhdHVyZXMnOiAnXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWRcbmluIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuXG5cbklmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG9cbmRlbGV0ZSB0aGUgbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLlxuXG5JZiB0aGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSAiaW1wb3J0ICoiIC0tLSBpcyB1c2VkIGluIGFcbmZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYSBuZXN0ZWQgYmxvY2sgd2l0aCBmcmVlXG52YXJpYWJsZXMsIHRoZSBjb21waWxlciB3aWxsIHJhaXNlIGEgIlN5bnRheEVycm9yIi5cblxuVGhlICJldmFsKCkiIGFuZCAiZXhlYygpIiBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSAiZXhlYygpIiBhbmQgImV2YWwoKSIgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cbicsCiAgJ2Vsc2UnOiAnXG5UaGUgImlmIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgImlmIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSAiaWYiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG4nLAotICdleGNlcHRpb25zJzogJ1xuRXhjZXB0aW9uc1xuKioqKioqKioqKlxuXG5FeGNlcHRpb25zIGFyZSBhIG1lYW5zIG9mIGJyZWFraW5nIG91dCBvZiB0aGUgbm9ybWFsIGZsb3cgb2YgY29udHJvbFxub2YgYSBjb2RlIGJsb2NrIGluIG9yZGVyIHRvIGhhbmRsZSBlcnJvcnMgb3Igb3RoZXIgZXhjZXB0aW9uYWxcbmNvbmRpdGlvbnMuICBBbiBleGNlcHRpb24gaXMgKnJhaXNlZCogYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBpc1xuZGV0ZWN0ZWQ7IGl0IG1heSBiZSAqaGFuZGxlZCogYnkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYmxvY2sgb3IgYnkgYW55XG5jb2RlIGJsb2NrIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnZva2VkIHRoZSBjb2RlIGJsb2NrIHdoZXJlXG50aGUgZXJyb3Igb2NjdXJyZWQuXG5cblRoZSBQeXRob24gaW50ZXJwcmV0ZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGVuIGl0IGRldGVjdHMgYSBydW4tdGltZVxuZXJyb3IgKHN1Y2ggYXMgZGl2aXNpb24gYnkgemVybykuICBBIFB5dGhvbiBwcm9ncmFtIGNhbiBhbHNvXG5leHBsaWNpdGx5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSAicmFpc2UiIHN0YXRlbWVudC4gRXhjZXB0aW9uXG5oYW5kbGVycyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlICJ0cnkiIC4uLiAiZXhjZXB0IiBzdGF0ZW1lbnQuICBUaGVcbiJmaW5hbGx5IiBjbGF1c2Ugb2Ygc3VjaCBhIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNsZWFudXBcbmNvZGUgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24sIGJ1dCBpcyBleGVjdXRlZCB3aGV0aGVyIGFuXG5leGNlcHRpb24gb2NjdXJyZWQgb3Igbm90IGluIHRoZSBwcmVjZWRpbmcgY29kZS5cblxuUHl0aG9uIHVzZXMgdGhlICJ0ZXJtaW5hdGlvbiIgbW9kZWwgb2YgZXJyb3IgaGFuZGxpbmc6IGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjYW4gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBhbmQgY29udGludWUgZXhlY3V0aW9uIGF0IGFuIG91dGVyXG5sZXZlbCwgYnV0IGl0IGNhbm5vdCByZXBhaXIgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBhbmQgcmV0cnkgdGhlXG5mYWlsaW5nIG9wZXJhdGlvbiAoZXhjZXB0IGJ5IHJlLWVudGVyaW5nIHRoZSBvZmZlbmRpbmcgcGllY2Ugb2YgY29kZVxuZnJvbSB0aGUgdG9wKS5cblxuV2hlbiBhbiBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgYXQgYWxsLCB0aGUgaW50ZXJwcmV0ZXIgdGVybWluYXRlc1xuZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciByZXR1cm5zIHRvIGl0cyBpbnRlcmFjdGl2ZSBtYWluIGxvb3AuICBJblxuZWl0aGVyIGNhc2UsIGl0IHByaW50cyBhIHN0YWNrIGJhY2t0cmFjZSwgZXhjZXB0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpc1xuIlN5c3RlbUV4aXQiLlxuXG5FeGNlcHRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGNsYXNzIGluc3RhbmNlcy4gIFRoZSAiZXhjZXB0IiBjbGF1c2UgaXNcbnNlbGVjdGVkIGRlcGVuZGluZyBvbiB0aGUgY2xhc3Mgb2YgdGhlIGluc3RhbmNlOiBpdCBtdXN0IHJlZmVyZW5jZSB0aGVcbmNsYXNzIG9mIHRoZSBpbnN0YW5jZSBvciBhIGJhc2UgY2xhc3MgdGhlcmVvZi4gIFRoZSBpbnN0YW5jZSBjYW4gYmVcbnJlY2VpdmVkIGJ5IHRoZSBoYW5kbGVyIGFuZCBjYW4gY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGVcbmV4Y2VwdGlvbmFsIGNvbmRpdGlvbi5cblxuTm90ZTogRXhjZXB0aW9uIG1lc3NhZ2VzIGFyZSBub3QgcGFydCBvZiB0aGUgUHl0aG9uIEFQSS4gIFRoZWlyXG4gIGNvbnRlbnRzIG1heSBjaGFuZ2UgZnJvbSBvbmUgdmVyc2lvbiBvZiBQeXRob24gdG8gdGhlIG5leHQgd2l0aG91dFxuICB3YXJuaW5nIGFuZCBzaG91bGQgbm90IGJlIHJlbGllZCBvbiBieSBjb2RlIHdoaWNoIHdpbGwgcnVuIHVuZGVyXG4gIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBpbnRlcnByZXRlci5cblxuU2VlIGFsc28gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSAidHJ5IiBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHRyeVxuc3RhdGVtZW50KiBhbmQgInJhaXNlIiBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhpcyBsaW1pdGF0aW9uIG9jY3VycyBiZWNhdXNlIHRoZSBjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgYnlcbiAgICB0aGVzZSBvcGVyYXRpb25zIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdGhlIG1vZHVsZSBpc1xuICAgIGNvbXBpbGVkLlxuJywKLSAnZXhlY21vZGVsJzogJ1xuRXhlY3V0aW9uIG1vZGVsXG4qKioqKioqKioqKioqKipcblxuXG5OYW1pbmcgYW5kIGJpbmRpbmdcbj09PT09PT09PT09PT09PT09PVxuXG4qTmFtZXMqIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuIEVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG9cbnRoZSAqYmluZGluZyogb2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGluIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24gYmxvY2tcbmNvbnRhaW5pbmcgdGhlIHVzZS5cblxuQSAqYmxvY2sqIGlzIGEgcGllY2Ugb2YgUHl0aG9uIHByb2dyYW0gdGV4dCB0aGF0IGlzIGV4ZWN1dGVkIGFzIGFcbnVuaXQuIFRoZSBmb2xsb3dpbmcgYXJlIGJsb2NrczogYSBtb2R1bGUsIGEgZnVuY3Rpb24gYm9keSwgYW5kIGEgY2xhc3NcbmRlZmluaXRpb24uIEVhY2ggY29tbWFuZCB0eXBlZCBpbnRlcmFjdGl2ZWx5IGlzIGEgYmxvY2suICBBIHNjcmlwdFxuZmlsZSAoYSBmaWxlIGdpdmVuIGFzIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbnRlcnByZXRlciBvciBzcGVjaWZpZWRcbm9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgdGhlIGZpcnN0IGFyZ3VtZW50KSBpcyBhIGNvZGUgYmxvY2suXG5BIHNjcmlwdCBjb21tYW5kIChhIGNvbW1hbmQgc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmVcbndpdGggdGhlIFwnKiotYyoqXCcgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nIGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgaXMgYSBjb2RlIGJsb2NrLlxuXG5BIGNvZGUgYmxvY2sgaXMgZXhlY3V0ZWQgaW4gYW4gKmV4ZWN1dGlvbiBmcmFtZSouICBBIGZyYW1lIGNvbnRhaW5zXG5zb21lIGFkbWluaXN0cmF0aXZlIGluZm9ybWF0aW9uICh1c2VkIGZvciBkZWJ1Z2dpbmcpIGFuZCBkZXRlcm1pbmVzXG53aGVyZSBhbmQgaG93IGV4ZWN1dGlvbiBjb250aW51ZXMgYWZ0ZXIgdGhlIGNvZGUgYmxvY2tcJ3MgZXhlY3V0aW9uIGhhc1xuY29tcGxldGVkLlxuXG5BICpzY29wZSogZGVmaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiBhIG5hbWUgd2l0aGluIGEgYmxvY2suICBJZiBhIGxvY2FsXG52YXJpYWJsZSBpcyBkZWZpbmVkIGluIGEgYmxvY2ssIGl0cyBzY29wZSBpbmNsdWRlcyB0aGF0IGJsb2NrLiAgSWYgdGhlXG5kZWZpbml0aW9uIG9jY3VycyBpbiBhIGZ1bmN0aW9uIGJsb2NrLCB0aGUgc2NvcGUgZXh0ZW5kcyB0byBhbnkgYmxvY2tzXG5jb250YWluZWQgd2l0aGluIHRoZSBkZWZpbmluZyBvbmUsIHVubGVzcyBhIGNvbnRhaW5lZCBibG9jayBpbnRyb2R1Y2VzXG5hIGRpZmZlcmVudCBiaW5kaW5nIGZvciB0aGUgbmFtZS4gIFRoZSBzY29wZSBvZiBuYW1lcyBkZWZpbmVkIGluIGFcbmNsYXNzIGJsb2NrIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzIGJsb2NrOyBpdCBkb2VzIG5vdCBleHRlbmQgdG8gdGhlXG5jb2RlIGJsb2NrcyBvZiBtZXRob2RzIC0tIHRoaXMgaW5jbHVkZXMgY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvclxuZXhwcmVzc2lvbnMgc2luY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSBmdW5jdGlvbiBzY29wZS4gIFRoaXNcbm1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyB3aWxsIGZhaWw6XG5cbiAgIGNsYXNzIEE6XG4gICAgICAgYSA9IDQyXG4gICAgICAgYiA9IGxpc3QoYSArIGkgZm9yIGkgaW4gcmFuZ2UoMTApKVxuXG5XaGVuIGEgbmFtZSBpcyB1c2VkIGluIGEgY29kZSBibG9jaywgaXQgaXMgcmVzb2x2ZWQgdXNpbmcgdGhlIG5lYXJlc3RcbmVuY2xvc2luZyBzY29wZS4gIFRoZSBzZXQgb2YgYWxsIHN1Y2ggc2NvcGVzIHZpc2libGUgdG8gYSBjb2RlIGJsb2NrXG5pcyBjYWxsZWQgdGhlIGJsb2NrXCdzICplbnZpcm9ubWVudCouXG5cbklmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssXG51bmxlc3MgZGVjbGFyZWQgYXMgIm5vbmxvY2FsIi4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGUgbW9kdWxlXG5sZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlIGNvZGVcbmJsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2tcbmJ1dCBub3QgZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSAqZnJlZSB2YXJpYWJsZSouXG5cbldoZW4gYSBuYW1lIGlzIG5vdCBmb3VuZCBhdCBhbGwsIGEgIk5hbWVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbklmIHRoZSBuYW1lIHJlZmVycyB0byBhIGxvY2FsIHZhcmlhYmxlIHRoYXQgaGFzIG5vdCBiZWVuIGJvdW5kLCBhXG4iVW5ib3VuZExvY2FsRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuICAiVW5ib3VuZExvY2FsRXJyb3IiIGlzIGFcbnN1YmNsYXNzIG9mICJOYW1lRXJyb3IiLlxuXG5UaGUgZm9sbG93aW5nIGNvbnN0cnVjdHMgYmluZCBuYW1lczogZm9ybWFsIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLFxuImltcG9ydCIgc3RhdGVtZW50cywgY2xhc3MgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zICh0aGVzZSBiaW5kIHRoZVxuY2xhc3Mgb3IgZnVuY3Rpb24gbmFtZSBpbiB0aGUgZGVmaW5pbmcgYmxvY2spLCBhbmQgdGFyZ2V0cyB0aGF0IGFyZVxuaWRlbnRpZmllcnMgaWYgb2NjdXJyaW5nIGluIGFuIGFzc2lnbm1lbnQsICJmb3IiIGxvb3AgaGVhZGVyLCBvciBhZnRlclxuImFzIiBpbiBhICJ3aXRoIiBzdGF0ZW1lbnQgb3IgImV4Y2VwdCIgY2xhdXNlLiBUaGUgImltcG9ydCIgc3RhdGVtZW50XG5vZiB0aGUgZm9ybSAiZnJvbSAuLi4gaW1wb3J0ICoiIGJpbmRzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZVxuaW1wb3J0ZWQgbW9kdWxlLCBleGNlcHQgdGhvc2UgYmVnaW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZS4gIFRoaXMgZm9ybVxubWF5IG9ubHkgYmUgdXNlZCBhdCB0aGUgbW9kdWxlIGxldmVsLlxuXG5BIHRhcmdldCBvY2N1cnJpbmcgaW4gYSAiZGVsIiBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvclxudGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuXG5cbkVhY2ggYXNzaWdubWVudCBvciBpbXBvcnQgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jayBkZWZpbmVkIGJ5IGFcbmNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgYXQgdGhlIG1vZHVsZSBsZXZlbCAodGhlIHRvcC1sZXZlbFxuY29kZSBibG9jaykuXG5cbklmIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbiBvY2N1cnMgYW55d2hlcmUgd2l0aGluIGEgY29kZSBibG9jaywgYWxsXG51c2VzIG9mIHRoZSBuYW1lIHdpdGhpbiB0aGUgYmxvY2sgYXJlIHRyZWF0ZWQgYXMgcmVmZXJlbmNlcyB0byB0aGVcbmN1cnJlbnQgYmxvY2suICBUaGlzIGNhbiBsZWFkIHRvIGVycm9ycyB3aGVuIGEgbmFtZSBpcyB1c2VkIHdpdGhpbiBhXG5ibG9jayBiZWZvcmUgaXQgaXMgYm91bmQuICBUaGlzIHJ1bGUgaXMgc3VidGxlLiAgUHl0aG9uIGxhY2tzXG5kZWNsYXJhdGlvbnMgYW5kIGFsbG93cyBuYW1lIGJpbmRpbmcgb3BlcmF0aW9ucyB0byBvY2N1ciBhbnl3aGVyZVxud2l0aGluIGEgY29kZSBibG9jay4gIFRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYSBjb2RlIGJsb2NrIGNhbiBiZVxuZGV0ZXJtaW5lZCBieSBzY2FubmluZyB0aGUgZW50aXJlIHRleHQgb2YgdGhlIGJsb2NrIGZvciBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuXG5cbklmIHRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrLCBhbGwgdXNlcyBvZiB0aGUgbmFtZVxuc3BlY2lmaWVkIGluIHRoZSBzdGF0ZW1lbnQgcmVmZXIgdG8gdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lIGluIHRoZVxudG9wLWxldmVsIG5hbWVzcGFjZS4gIE5hbWVzIGFyZSByZXNvbHZlZCBpbiB0aGUgdG9wLWxldmVsIG5hbWVzcGFjZSBieVxuc2VhcmNoaW5nIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBpLmUuIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZVxuY29udGFpbmluZyB0aGUgY29kZSBibG9jaywgYW5kIHRoZSBidWlsdGlucyBuYW1lc3BhY2UsIHRoZSBuYW1lc3BhY2Vcbm9mIHRoZSBtb2R1bGUgImJ1aWx0aW5zIi4gIFRoZSBnbG9iYWwgbmFtZXNwYWNlIGlzIHNlYXJjaGVkIGZpcnN0LiAgSWZcbnRoZSBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBpcyBzZWFyY2hlZC4gIFRoZVxuZ2xvYmFsIHN0YXRlbWVudCBtdXN0IHByZWNlZGUgYWxsIHVzZXMgb2YgdGhlIG5hbWUuXG5cblRoZSBidWlsdGlucyBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGVjdXRpb24gb2YgYSBjb2RlIGJsb2NrXG5pcyBhY3R1YWxseSBmb3VuZCBieSBsb29raW5nIHVwIHRoZSBuYW1lICJfX2J1aWx0aW5zX18iIGluIGl0cyBnbG9iYWxcbm5hbWVzcGFjZTsgdGhpcyBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5IG9yIGEgbW9kdWxlIChpbiB0aGUgbGF0dGVyIGNhc2VcbnRoZSBtb2R1bGVcJ3MgZGljdGlvbmFyeSBpcyB1c2VkKS4gIEJ5IGRlZmF1bHQsIHdoZW4gaW4gdGhlICJfX21haW5fXyJcbm1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgdGhlIGJ1aWx0LWluIG1vZHVsZSAiYnVpbHRpbnMiOyB3aGVuIGluIGFueVxub3RoZXIgbW9kdWxlLCAiX19idWlsdGluc19fIiBpcyBhbiBhbGlhcyBmb3IgdGhlIGRpY3Rpb25hcnkgb2YgdGhlXG4iYnVpbHRpbnMiIG1vZHVsZSBpdHNlbGYuICAiX19idWlsdGluc19fIiBjYW4gYmUgc2V0IHRvIGEgdXNlci1jcmVhdGVkXG5kaWN0aW9uYXJ5IHRvIGNyZWF0ZSBhIHdlYWsgZm9ybSBvZiByZXN0cmljdGVkIGV4ZWN1dGlvbi5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBVc2VycyBzaG91bGQgbm90IHRvdWNoXG4iX19idWlsdGluc19fIjsgaXQgaXMgc3RyaWN0bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgVXNlcnNcbndhbnRpbmcgdG8gb3ZlcnJpZGUgdmFsdWVzIGluIHRoZSBidWlsdGlucyBuYW1lc3BhY2Ugc2hvdWxkICJpbXBvcnQiXG50aGUgImJ1aWx0aW5zIiBtb2R1bGUgYW5kIG1vZGlmeSBpdHMgYXR0cmlidXRlcyBhcHByb3ByaWF0ZWx5LlxuXG5UaGUgbmFtZXNwYWNlIGZvciBhIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYVxubW9kdWxlIGlzIGltcG9ydGVkLiAgVGhlIG1haW4gbW9kdWxlIGZvciBhIHNjcmlwdCBpcyBhbHdheXMgY2FsbGVkXG4iX19tYWluX18iLlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb25cbmluIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGVcbmNvbnRhaW5zIGEgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lXG5uYW1lcy4gVGhlc2UgcmVmZXJlbmNlcyBmb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uLlxuVGhlIG5hbWVzcGFjZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBiZWNvbWVzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeVxub2YgdGhlIGNsYXNzLiAgTmFtZXMgZGVmaW5lZCBhdCB0aGUgY2xhc3Mgc2NvcGUgYXJlIG5vdCB2aXNpYmxlIGluXG5tZXRob2RzLlxuXG5cbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tICJpbXBvcnQgKiIgLS0tIGlzIHVzZWQgaW4gYVxuZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWVcbnZhcmlhYmxlcywgdGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYSAiU3ludGF4RXJyb3IiLlxuXG5UaGUgImV2YWwoKSIgYW5kICJleGVjKCkiIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlICJleGVjKCkiIGFuZCAiZXZhbCgpIiBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuXG5cbkV4Y2VwdGlvbnNcbj09PT09PT09PT1cblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgInJhaXNlIiBzdGF0ZW1lbnQuIEV4Y2VwdGlvblxuaGFuZGxlcnMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSAidHJ5IiAuLi4gImV4Y2VwdCIgc3RhdGVtZW50LiAgVGhlXG4iZmluYWxseSIgY2xhdXNlIG9mIHN1Y2ggYSBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjbGVhbnVwXG5jb2RlIHdoaWNoIGRvZXMgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLCBidXQgaXMgZXhlY3V0ZWQgd2hldGhlciBhblxuZXhjZXB0aW9uIG9jY3VycmVkIG9yIG5vdCBpbiB0aGUgcHJlY2VkaW5nIGNvZGUuXG5cblB5dGhvbiB1c2VzIHRoZSAidGVybWluYXRpb24iIG1vZGVsIG9mIGVycm9yIGhhbmRsaW5nOiBhbiBleGNlcHRpb25cbmhhbmRsZXIgY2FuIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgYW5kIGNvbnRpbnVlIGV4ZWN1dGlvbiBhdCBhbiBvdXRlclxubGV2ZWwsIGJ1dCBpdCBjYW5ub3QgcmVwYWlyIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IgYW5kIHJldHJ5IHRoZVxuZmFpbGluZyBvcGVyYXRpb24gKGV4Y2VwdCBieSByZS1lbnRlcmluZyB0aGUgb2ZmZW5kaW5nIHBpZWNlIG9mIGNvZGVcbmZyb20gdGhlIHRvcCkuXG5cbldoZW4gYW4gZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGF0IGFsbCwgdGhlIGludGVycHJldGVyIHRlcm1pbmF0ZXNcbmV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSwgb3IgcmV0dXJucyB0byBpdHMgaW50ZXJhY3RpdmUgbWFpbiBsb29wLiAgSW5cbmVpdGhlciBjYXNlLCBpdCBwcmludHMgYSBzdGFjayBiYWNrdHJhY2UsIGV4Y2VwdCB3aGVuIHRoZSBleGNlcHRpb24gaXNcbiJTeXN0ZW1FeGl0Ii5cblxuRXhjZXB0aW9ucyBhcmUgaWRlbnRpZmllZCBieSBjbGFzcyBpbnN0YW5jZXMuICBUaGUgImV4Y2VwdCIgY2xhdXNlIGlzXG5zZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2UgdGhlXG5jbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuIGJlXG5yZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG5leGNlcHRpb25hbCBjb25kaXRpb24uXG5cbk5vdGU6IEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpclxuICBjb250ZW50cyBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXRcbiAgd2FybmluZyBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlclxuICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgInRyeSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSB0cnlcbnN0YXRlbWVudCogYW5kICJyYWlzZSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoaXMgbGltaXRhdGlvbiBvY2N1cnMgYmVjYXVzZSB0aGUgY29kZSB0aGF0IGlzIGV4ZWN1dGVkIGJ5XG4gICAgdGhlc2Ugb3BlcmF0aW9ucyBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoZSBtb2R1bGUgaXNcbiAgICBjb21waWxlZC5cbicsCisgJ2V4Y2VwdGlvbnMnOiAnXG5FeGNlcHRpb25zXG4qKioqKioqKioqXG5cbkV4Y2VwdGlvbnMgYXJlIGEgbWVhbnMgb2YgYnJlYWtpbmcgb3V0IG9mIHRoZSBub3JtYWwgZmxvdyBvZiBjb250cm9sXG5vZiBhIGNvZGUgYmxvY2sgaW4gb3JkZXIgdG8gaGFuZGxlIGVycm9ycyBvciBvdGhlciBleGNlcHRpb25hbFxuY29uZGl0aW9ucy4gIEFuIGV4Y2VwdGlvbiBpcyAqcmFpc2VkKiBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGVycm9yIGlzXG5kZXRlY3RlZDsgaXQgbWF5IGJlICpoYW5kbGVkKiBieSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9jayBvciBieSBhbnlcbmNvZGUgYmxvY2sgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGludm9rZWQgdGhlIGNvZGUgYmxvY2sgd2hlcmVcbnRoZSBlcnJvciBvY2N1cnJlZC5cblxuVGhlIFB5dGhvbiBpbnRlcnByZXRlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gaXQgZGV0ZWN0cyBhIHJ1bi10aW1lXG5lcnJvciAoc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvKS4gIEEgUHl0aG9uIHByb2dyYW0gY2FuIGFsc29cbmV4cGxpY2l0bHkgcmFpc2UgYW4gZXhjZXB0aW9uIHdpdGggdGhlICJyYWlzZSIgc3RhdGVtZW50LiBFeGNlcHRpb25cbmhhbmRsZXJzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgInRyeSIgLi4uICJleGNlcHQiIHN0YXRlbWVudC4gIFRoZVxuImZpbmFsbHkiIGNsYXVzZSBvZiBzdWNoIGEgc3RhdGVtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgY2xlYW51cFxuY29kZSB3aGljaCBkb2VzIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbiwgYnV0IGlzIGV4ZWN1dGVkIHdoZXRoZXIgYW5cbmV4Y2VwdGlvbiBvY2N1cnJlZCBvciBub3QgaW4gdGhlIHByZWNlZGluZyBjb2RlLlxuXG5QeXRob24gdXNlcyB0aGUgInRlcm1pbmF0aW9uIiBtb2RlbCBvZiBlcnJvciBoYW5kbGluZzogYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNhbiBmaW5kIG91dCB3aGF0IGhhcHBlbmVkIGFuZCBjb250aW51ZSBleGVjdXRpb24gYXQgYW4gb3V0ZXJcbmxldmVsLCBidXQgaXQgY2Fubm90IHJlcGFpciB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yIGFuZCByZXRyeSB0aGVcbmZhaWxpbmcgb3BlcmF0aW9uIChleGNlcHQgYnkgcmUtZW50ZXJpbmcgdGhlIG9mZmVuZGluZyBwaWVjZSBvZiBjb2RlXG5mcm9tIHRoZSB0b3ApLlxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCBhdCBhbGwsIHRoZSBpbnRlcnByZXRlciB0ZXJtaW5hdGVzXG5leGVjdXRpb24gb2YgdGhlIHByb2dyYW0sIG9yIHJldHVybnMgdG8gaXRzIGludGVyYWN0aXZlIG1haW4gbG9vcC4gIEluXG5laXRoZXIgY2FzZSwgaXQgcHJpbnRzIGEgc3RhY2sgYmFja3RyYWNlLCBleGNlcHQgd2hlbiB0aGUgZXhjZXB0aW9uIGlzXG4iU3lzdGVtRXhpdCIuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlICJleGNlcHQiIGNsYXVzZSBpc1xuc2VsZWN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2U6IGl0IG11c3QgcmVmZXJlbmNlIHRoZVxuY2xhc3Mgb2YgdGhlIGluc3RhbmNlIG9yIGEgYmFzZSBjbGFzcyB0aGVyZW9mLiAgVGhlIGluc3RhbmNlIGNhbiBiZVxucmVjZWl2ZWQgYnkgdGhlIGhhbmRsZXIgYW5kIGNhbiBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZVxuZXhjZXB0aW9uYWwgY29uZGl0aW9uLlxuXG5Ob3RlOiBFeGNlcHRpb24gbWVzc2FnZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQeXRob24gQVBJLiAgVGhlaXIgY29udGVudHNcbiAgbWF5IGNoYW5nZSBmcm9tIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byB0aGUgbmV4dCB3aXRob3V0IHdhcm5pbmdcbiAgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVkIG9uIGJ5IGNvZGUgd2hpY2ggd2lsbCBydW4gdW5kZXIgbXVsdGlwbGVcbiAgdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLlxuXG5TZWUgYWxzbyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJ0cnkiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgdHJ5XG5zdGF0ZW1lbnQqIGFuZCAicmFpc2UiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieSB0aGVzZVxuICAgIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkLlxuJywKKyAnZXhlY21vZGVsJzogJ1xuRXhlY3V0aW9uIG1vZGVsXG4qKioqKioqKioqKioqKipcblxuXG5OYW1pbmcgYW5kIGJpbmRpbmdcbj09PT09PT09PT09PT09PT09PVxuXG4qTmFtZXMqIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuIEVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG9cbnRoZSAqYmluZGluZyogb2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGluIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24gYmxvY2tcbmNvbnRhaW5pbmcgdGhlIHVzZS5cblxuQSAqYmxvY2sqIGlzIGEgcGllY2Ugb2YgUHl0aG9uIHByb2dyYW0gdGV4dCB0aGF0IGlzIGV4ZWN1dGVkIGFzIGFcbnVuaXQuIFRoZSBmb2xsb3dpbmcgYXJlIGJsb2NrczogYSBtb2R1bGUsIGEgZnVuY3Rpb24gYm9keSwgYW5kIGEgY2xhc3NcbmRlZmluaXRpb24uIEVhY2ggY29tbWFuZCB0eXBlZCBpbnRlcmFjdGl2ZWx5IGlzIGEgYmxvY2suICBBIHNjcmlwdFxuZmlsZSAoYSBmaWxlIGdpdmVuIGFzIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbnRlcnByZXRlciBvciBzcGVjaWZpZWRcbm9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgdGhlIGZpcnN0IGFyZ3VtZW50KSBpcyBhIGNvZGUgYmxvY2suXG5BIHNjcmlwdCBjb21tYW5kIChhIGNvbW1hbmQgc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmVcbndpdGggdGhlIFwnKiotYyoqXCcgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nIGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgaXMgYSBjb2RlIGJsb2NrLlxuXG5BIGNvZGUgYmxvY2sgaXMgZXhlY3V0ZWQgaW4gYW4gKmV4ZWN1dGlvbiBmcmFtZSouICBBIGZyYW1lIGNvbnRhaW5zXG5zb21lIGFkbWluaXN0cmF0aXZlIGluZm9ybWF0aW9uICh1c2VkIGZvciBkZWJ1Z2dpbmcpIGFuZCBkZXRlcm1pbmVzXG53aGVyZSBhbmQgaG93IGV4ZWN1dGlvbiBjb250aW51ZXMgYWZ0ZXIgdGhlIGNvZGUgYmxvY2tcJ3MgZXhlY3V0aW9uIGhhc1xuY29tcGxldGVkLlxuXG5BICpzY29wZSogZGVmaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiBhIG5hbWUgd2l0aGluIGEgYmxvY2suICBJZiBhIGxvY2FsXG52YXJpYWJsZSBpcyBkZWZpbmVkIGluIGEgYmxvY2ssIGl0cyBzY29wZSBpbmNsdWRlcyB0aGF0IGJsb2NrLiAgSWYgdGhlXG5kZWZpbml0aW9uIG9jY3VycyBpbiBhIGZ1bmN0aW9uIGJsb2NrLCB0aGUgc2NvcGUgZXh0ZW5kcyB0byBhbnkgYmxvY2tzXG5jb250YWluZWQgd2l0aGluIHRoZSBkZWZpbmluZyBvbmUsIHVubGVzcyBhIGNvbnRhaW5lZCBibG9jayBpbnRyb2R1Y2VzXG5hIGRpZmZlcmVudCBiaW5kaW5nIGZvciB0aGUgbmFtZS4gIFRoZSBzY29wZSBvZiBuYW1lcyBkZWZpbmVkIGluIGFcbmNsYXNzIGJsb2NrIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzIGJsb2NrOyBpdCBkb2VzIG5vdCBleHRlbmQgdG8gdGhlXG5jb2RlIGJsb2NrcyBvZiBtZXRob2RzIC0tIHRoaXMgaW5jbHVkZXMgY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvclxuZXhwcmVzc2lvbnMgc2luY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSBmdW5jdGlvbiBzY29wZS4gIFRoaXNcbm1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyB3aWxsIGZhaWw6XG5cbiAgIGNsYXNzIEE6XG4gICAgICAgYSA9IDQyXG4gICAgICAgYiA9IGxpc3QoYSArIGkgZm9yIGkgaW4gcmFuZ2UoMTApKVxuXG5XaGVuIGEgbmFtZSBpcyB1c2VkIGluIGEgY29kZSBibG9jaywgaXQgaXMgcmVzb2x2ZWQgdXNpbmcgdGhlIG5lYXJlc3RcbmVuY2xvc2luZyBzY29wZS4gIFRoZSBzZXQgb2YgYWxsIHN1Y2ggc2NvcGVzIHZpc2libGUgdG8gYSBjb2RlIGJsb2NrXG5pcyBjYWxsZWQgdGhlIGJsb2NrXCdzICplbnZpcm9ubWVudCouXG5cbklmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssXG51bmxlc3MgZGVjbGFyZWQgYXMgIm5vbmxvY2FsIi4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGUgbW9kdWxlXG5sZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlIGNvZGVcbmJsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2tcbmJ1dCBub3QgZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSAqZnJlZSB2YXJpYWJsZSouXG5cbldoZW4gYSBuYW1lIGlzIG5vdCBmb3VuZCBhdCBhbGwsIGEgIk5hbWVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbklmIHRoZSBuYW1lIHJlZmVycyB0byBhIGxvY2FsIHZhcmlhYmxlIHRoYXQgaGFzIG5vdCBiZWVuIGJvdW5kLCBhXG4iVW5ib3VuZExvY2FsRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuICAiVW5ib3VuZExvY2FsRXJyb3IiIGlzIGFcbnN1YmNsYXNzIG9mICJOYW1lRXJyb3IiLlxuXG5UaGUgZm9sbG93aW5nIGNvbnN0cnVjdHMgYmluZCBuYW1lczogZm9ybWFsIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLFxuImltcG9ydCIgc3RhdGVtZW50cywgY2xhc3MgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zICh0aGVzZSBiaW5kIHRoZVxuY2xhc3Mgb3IgZnVuY3Rpb24gbmFtZSBpbiB0aGUgZGVmaW5pbmcgYmxvY2spLCBhbmQgdGFyZ2V0cyB0aGF0IGFyZVxuaWRlbnRpZmllcnMgaWYgb2NjdXJyaW5nIGluIGFuIGFzc2lnbm1lbnQsICJmb3IiIGxvb3AgaGVhZGVyLCBvciBhZnRlclxuImFzIiBpbiBhICJ3aXRoIiBzdGF0ZW1lbnQgb3IgImV4Y2VwdCIgY2xhdXNlLiBUaGUgImltcG9ydCIgc3RhdGVtZW50XG5vZiB0aGUgZm9ybSAiZnJvbSAuLi4gaW1wb3J0ICoiIGJpbmRzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZVxuaW1wb3J0ZWQgbW9kdWxlLCBleGNlcHQgdGhvc2UgYmVnaW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZS4gIFRoaXMgZm9ybVxubWF5IG9ubHkgYmUgdXNlZCBhdCB0aGUgbW9kdWxlIGxldmVsLlxuXG5BIHRhcmdldCBvY2N1cnJpbmcgaW4gYSAiZGVsIiBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvclxudGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuXG5cbkVhY2ggYXNzaWdubWVudCBvciBpbXBvcnQgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jayBkZWZpbmVkIGJ5IGFcbmNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgYXQgdGhlIG1vZHVsZSBsZXZlbCAodGhlIHRvcC1sZXZlbFxuY29kZSBibG9jaykuXG5cbklmIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbiBvY2N1cnMgYW55d2hlcmUgd2l0aGluIGEgY29kZSBibG9jaywgYWxsXG51c2VzIG9mIHRoZSBuYW1lIHdpdGhpbiB0aGUgYmxvY2sgYXJlIHRyZWF0ZWQgYXMgcmVmZXJlbmNlcyB0byB0aGVcbmN1cnJlbnQgYmxvY2suICBUaGlzIGNhbiBsZWFkIHRvIGVycm9ycyB3aGVuIGEgbmFtZSBpcyB1c2VkIHdpdGhpbiBhXG5ibG9jayBiZWZvcmUgaXQgaXMgYm91bmQuICBUaGlzIHJ1bGUgaXMgc3VidGxlLiAgUHl0aG9uIGxhY2tzXG5kZWNsYXJhdGlvbnMgYW5kIGFsbG93cyBuYW1lIGJpbmRpbmcgb3BlcmF0aW9ucyB0byBvY2N1ciBhbnl3aGVyZVxud2l0aGluIGEgY29kZSBibG9jay4gIFRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYSBjb2RlIGJsb2NrIGNhbiBiZVxuZGV0ZXJtaW5lZCBieSBzY2FubmluZyB0aGUgZW50aXJlIHRleHQgb2YgdGhlIGJsb2NrIGZvciBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuXG5cbklmIHRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrLCBhbGwgdXNlcyBvZiB0aGUgbmFtZVxuc3BlY2lmaWVkIGluIHRoZSBzdGF0ZW1lbnQgcmVmZXIgdG8gdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lIGluIHRoZVxudG9wLWxldmVsIG5hbWVzcGFjZS4gIE5hbWVzIGFyZSByZXNvbHZlZCBpbiB0aGUgdG9wLWxldmVsIG5hbWVzcGFjZSBieVxuc2VhcmNoaW5nIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBpLmUuIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZVxuY29udGFpbmluZyB0aGUgY29kZSBibG9jaywgYW5kIHRoZSBidWlsdGlucyBuYW1lc3BhY2UsIHRoZSBuYW1lc3BhY2Vcbm9mIHRoZSBtb2R1bGUgImJ1aWx0aW5zIi4gIFRoZSBnbG9iYWwgbmFtZXNwYWNlIGlzIHNlYXJjaGVkIGZpcnN0LiAgSWZcbnRoZSBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBpcyBzZWFyY2hlZC4gIFRoZVxuZ2xvYmFsIHN0YXRlbWVudCBtdXN0IHByZWNlZGUgYWxsIHVzZXMgb2YgdGhlIG5hbWUuXG5cblRoZSBidWlsdGlucyBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGVjdXRpb24gb2YgYSBjb2RlIGJsb2NrXG5pcyBhY3R1YWxseSBmb3VuZCBieSBsb29raW5nIHVwIHRoZSBuYW1lICJfX2J1aWx0aW5zX18iIGluIGl0cyBnbG9iYWxcbm5hbWVzcGFjZTsgdGhpcyBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5IG9yIGEgbW9kdWxlIChpbiB0aGUgbGF0dGVyIGNhc2VcbnRoZSBtb2R1bGVcJ3MgZGljdGlvbmFyeSBpcyB1c2VkKS4gIEJ5IGRlZmF1bHQsIHdoZW4gaW4gdGhlICJfX21haW5fXyJcbm1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgdGhlIGJ1aWx0LWluIG1vZHVsZSAiYnVpbHRpbnMiOyB3aGVuIGluIGFueVxub3RoZXIgbW9kdWxlLCAiX19idWlsdGluc19fIiBpcyBhbiBhbGlhcyBmb3IgdGhlIGRpY3Rpb25hcnkgb2YgdGhlXG4iYnVpbHRpbnMiIG1vZHVsZSBpdHNlbGYuICAiX19idWlsdGluc19fIiBjYW4gYmUgc2V0IHRvIGEgdXNlci1jcmVhdGVkXG5kaWN0aW9uYXJ5IHRvIGNyZWF0ZSBhIHdlYWsgZm9ybSBvZiByZXN0cmljdGVkIGV4ZWN1dGlvbi5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBVc2VycyBzaG91bGQgbm90IHRvdWNoXG4iX19idWlsdGluc19fIjsgaXQgaXMgc3RyaWN0bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgVXNlcnNcbndhbnRpbmcgdG8gb3ZlcnJpZGUgdmFsdWVzIGluIHRoZSBidWlsdGlucyBuYW1lc3BhY2Ugc2hvdWxkICJpbXBvcnQiXG50aGUgImJ1aWx0aW5zIiBtb2R1bGUgYW5kIG1vZGlmeSBpdHMgYXR0cmlidXRlcyBhcHByb3ByaWF0ZWx5LlxuXG5UaGUgbmFtZXNwYWNlIGZvciBhIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYVxubW9kdWxlIGlzIGltcG9ydGVkLiAgVGhlIG1haW4gbW9kdWxlIGZvciBhIHNjcmlwdCBpcyBhbHdheXMgY2FsbGVkXG4iX19tYWluX18iLlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb25cbmluIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGVcbmNvbnRhaW5zIGEgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lXG5uYW1lcy4gVGhlc2UgcmVmZXJlbmNlcyBmb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uLlxuVGhlIG5hbWVzcGFjZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBiZWNvbWVzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeVxub2YgdGhlIGNsYXNzLiAgTmFtZXMgZGVmaW5lZCBhdCB0aGUgY2xhc3Mgc2NvcGUgYXJlIG5vdCB2aXNpYmxlIGluXG5tZXRob2RzLlxuXG5cbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tICJpbXBvcnQgKiIgLS0tIGlzIHVzZWQgaW4gYVxuZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWVcbnZhcmlhYmxlcywgdGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYSAiU3ludGF4RXJyb3IiLlxuXG5UaGUgImV2YWwoKSIgYW5kICJleGVjKCkiIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlICJleGVjKCkiIGFuZCAiZXZhbCgpIiBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuXG5cbkV4Y2VwdGlvbnNcbj09PT09PT09PT1cblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgInJhaXNlIiBzdGF0ZW1lbnQuIEV4Y2VwdGlvblxuaGFuZGxlcnMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSAidHJ5IiAuLi4gImV4Y2VwdCIgc3RhdGVtZW50LiAgVGhlXG4iZmluYWxseSIgY2xhdXNlIG9mIHN1Y2ggYSBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjbGVhbnVwXG5jb2RlIHdoaWNoIGRvZXMgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLCBidXQgaXMgZXhlY3V0ZWQgd2hldGhlciBhblxuZXhjZXB0aW9uIG9jY3VycmVkIG9yIG5vdCBpbiB0aGUgcHJlY2VkaW5nIGNvZGUuXG5cblB5dGhvbiB1c2VzIHRoZSAidGVybWluYXRpb24iIG1vZGVsIG9mIGVycm9yIGhhbmRsaW5nOiBhbiBleGNlcHRpb25cbmhhbmRsZXIgY2FuIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgYW5kIGNvbnRpbnVlIGV4ZWN1dGlvbiBhdCBhbiBvdXRlclxubGV2ZWwsIGJ1dCBpdCBjYW5ub3QgcmVwYWlyIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IgYW5kIHJldHJ5IHRoZVxuZmFpbGluZyBvcGVyYXRpb24gKGV4Y2VwdCBieSByZS1lbnRlcmluZyB0aGUgb2ZmZW5kaW5nIHBpZWNlIG9mIGNvZGVcbmZyb20gdGhlIHRvcCkuXG5cbldoZW4gYW4gZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGF0IGFsbCwgdGhlIGludGVycHJldGVyIHRlcm1pbmF0ZXNcbmV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSwgb3IgcmV0dXJucyB0byBpdHMgaW50ZXJhY3RpdmUgbWFpbiBsb29wLiAgSW5cbmVpdGhlciBjYXNlLCBpdCBwcmludHMgYSBzdGFjayBiYWNrdHJhY2UsIGV4Y2VwdCB3aGVuIHRoZSBleGNlcHRpb24gaXNcbiJTeXN0ZW1FeGl0Ii5cblxuRXhjZXB0aW9ucyBhcmUgaWRlbnRpZmllZCBieSBjbGFzcyBpbnN0YW5jZXMuICBUaGUgImV4Y2VwdCIgY2xhdXNlIGlzXG5zZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2UgdGhlXG5jbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuIGJlXG5yZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG5leGNlcHRpb25hbCBjb25kaXRpb24uXG5cbk5vdGU6IEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpciBjb250ZW50c1xuICBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXQgd2FybmluZ1xuICBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlciBtdWx0aXBsZVxuICB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgInRyeSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSB0cnlcbnN0YXRlbWVudCogYW5kICJyYWlzZSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoaXMgbGltaXRhdGlvbiBvY2N1cnMgYmVjYXVzZSB0aGUgY29kZSB0aGF0IGlzIGV4ZWN1dGVkIGJ5IHRoZXNlXG4gICAgb3BlcmF0aW9ucyBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoZSBtb2R1bGUgaXMgY29tcGlsZWQuXG4nLAogICdleHBybGlzdHMnOiAnXG5FeHByZXNzaW9uIGxpc3RzXG4qKioqKioqKioqKioqKioqXG5cbiAgIGV4cHJlc3Npb25fbGlzdCA6Oj0gZXhwcmVzc2lvbiAoICIsIiBleHByZXNzaW9uICkqIFsiLCJdXG5cbkFuIGV4cHJlc3Npb24gbGlzdCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBjb21tYSB5aWVsZHMgYSB0dXBsZS4gIFRoZVxubGVuZ3RoIG9mIHRoZSB0dXBsZSBpcyB0aGUgbnVtYmVyIG9mIGV4cHJlc3Npb25zIGluIHRoZSBsaXN0LiAgVGhlXG5leHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodC5cblxuVGhlIHRyYWlsaW5nIGNvbW1hIGlzIHJlcXVpcmVkIG9ubHkgdG8gY3JlYXRlIGEgc2luZ2xlIHR1cGxlIChhLmsuYS4gYVxuKnNpbmdsZXRvbiopOyBpdCBpcyBvcHRpb25hbCBpbiBhbGwgb3RoZXIgY2FzZXMuICBBIHNpbmdsZSBleHByZXNzaW9uXG53aXRob3V0IGEgdHJhaWxpbmcgY29tbWEgZG9lc25cJ3QgY3JlYXRlIGEgdHVwbGUsIGJ1dCByYXRoZXIgeWllbGRzIHRoZVxudmFsdWUgb2YgdGhhdCBleHByZXNzaW9uLiAoVG8gY3JlYXRlIGFuIGVtcHR5IHR1cGxlLCB1c2UgYW4gZW1wdHkgcGFpclxub2YgcGFyZW50aGVzZXM6ICIoKSIuKVxuJywKICAnZmxvYXRpbmcnOiAnXG5GbG9hdGluZyBwb2ludCBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWxcbmRlZmluaXRpb25zOlxuXG4gICBmbG9hdG51bWJlciAgIDo6PSBwb2ludGZsb2F0IHwgZXhwb25lbnRmbG9hdFxuICAgcG9pbnRmbG9hdCAgICA6Oj0gW2ludHBhcnRdIGZyYWN0aW9uIHwgaW50cGFydCAiLiJcbiAgIGV4cG9uZW50ZmxvYXQgOjo9IChpbnRwYXJ0IHwgcG9pbnRmbG9hdCkgZXhwb25lbnRcbiAgIGludHBhcnQgICAgICAgOjo9IGRpZ2l0K1xuICAgZnJhY3Rpb24gICAgICA6Oj0gIi4iIGRpZ2l0K1xuICAgZXhwb25lbnQgICAgICA6Oj0gKCJlIiB8ICJFIikgWyIrIiB8ICItIl0gZGlnaXQrXG5cbk5vdGUgdGhhdCB0aGUgaW50ZWdlciBhbmQgZXhwb25lbnQgcGFydHMgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCB1c2luZ1xucmFkaXggMTAuIEZvciBleGFtcGxlLCAiMDc3ZTAxMCIgaXMgbGVnYWwsIGFuZCBkZW5vdGVzIHRoZSBzYW1lIG51bWJlclxuYXMgIjc3ZTEwIi4gVGhlIGFsbG93ZWQgcmFuZ2Ugb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgaXNcbmltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gU29tZSBleGFtcGxlcyBvZiBmbG9hdGluZyBwb2ludCBsaXRlcmFsczpcblxuICAgMy4xNCAgICAxMC4gICAgLjAwMSAgICAxZTEwMCAgICAzLjE0ZS0xMCAgICAwZTBcblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlICItMSJcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yICItIiBhbmQgdGhlXG5saXRlcmFsICIxIi5cbicsCi0gJ2Zvcic6ICdcblRoZSAiZm9yIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKipcblxuVGhlICJmb3IiIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZVxuKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG4iZXhwcmVzc2lvbl9saXN0Ii4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhICJTdG9wSXRlcmF0aW9uIiBleGNlcHRpb24pLFxudGhlIHN1aXRlIGluIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCwgYW5kIHRoZSBsb29wXG50ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGNvbnRpbnVlc1xud2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSAiZWxzZSIgY2xhdXNlIGlmIHRoZXJlIHdhcyBubyBuZXh0XG5pdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gInJhbmdlKCkiIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgImZvciBpXG46PSBhIHRvIGIgZG8iOyBlLmcuLCAibGlzdChyYW5nZSgzKSkiIHJldHVybnMgdGhlIGxpc3QgIlswLCAxLCAyXSIuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlXG4gIGxvb3AgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuJywKKyAnZm9yJzogJ1xuVGhlICJmb3IiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgImZvciIgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlXG4oc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbiJleHByZXNzaW9uX2xpc3QiLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgd2FzIG5vIG5leHRcbml0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG4nLAogICdmb3JtYXRzdHJpbmdzJzogJ1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAic3RyLmZvcm1hdCgpIiBtZXRob2QgYW5kIHRoZSAiRm9ybWF0dGVyIiBjbGFzcyBzaGFyZSB0aGUgc2FtZVxuc3ludGF4IGZvciBmb3JtYXQgc3RyaW5ncyAoYWx0aG91Z2ggaW4gdGhlIGNhc2Ugb2YgIkZvcm1hdHRlciIsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuInt9Ii4gQW55dGhpbmcgdGhhdCBpcyBub3QgY29udGFpbmVkIGluIGJyYWNlcyBpcyBjb25zaWRlcmVkIGxpdGVyYWxcbnRleHQsIHdoaWNoIGlzIGNvcGllZCB1bmNoYW5nZWQgdG8gdGhlIG91dHB1dC4gIElmIHlvdSBuZWVkIHRvIGluY2x1ZGVcbmEgYnJhY2UgY2hhcmFjdGVyIGluIHRoZSBsaXRlcmFsIHRleHQsIGl0IGNhbiBiZSBlc2NhcGVkIGJ5IGRvdWJsaW5nOlxuInt7IiBhbmQgIn19Ii5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBbZmllbGRfbmFtZV0gWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSBhcmdfbmFtZSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGFyZ19uYW1lICAgICAgICAgIDo6PSBbaWRlbnRpZmllciB8IGludGVnZXJdXG4gICAgICBhdHRyaWJ1dGVfbmFtZSAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgZWxlbWVudF9pbmRleCAgICAgOjo9IGludGVnZXIgfCBpbmRleF9zdHJpbmdcbiAgICAgIGluZGV4X3N0cmluZyAgICAgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gK1xuICAgICAgY29udmVyc2lvbiAgICAgICAgOjo9ICJyIiB8ICJzIiB8ICJhIlxuICAgICAgZm9ybWF0X3NwZWMgICAgICAgOjo9IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj5cblxuSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhXG4qZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMgdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWRcbmFuZCBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuIFRoZVxuKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgIlwnIVwnIiwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGEgY29sb24gIlwnOlwnIi4gIFRoZXNlIHNwZWNpZnkgYSBub24tZGVmYXVsdCBmb3JtYXQgZm9yIHRoZVxucmVwbGFjZW1lbnQgdmFsdWUuXG5cblNlZSBhbHNvIHRoZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogc2VjdGlvbi5cblxuVGhlICpmaWVsZF9uYW1lKiBpdHNlbGYgYmVnaW5zIHdpdGggYW4gKmFyZ19uYW1lKiB0aGF0IGlzIGVpdGhlciBhXG5udW1iZXIgb3IgYSBrZXl3b3JkLiAgSWYgaXRcJ3MgYSBudW1iZXIsIGl0IHJlZmVycyB0byBhIHBvc2l0aW9uYWxcbmFyZ3VtZW50LCBhbmQgaWYgaXRcJ3MgYSBrZXl3b3JkLCBpdCByZWZlcnMgdG8gYSBuYW1lZCBrZXl3b3JkXG5hcmd1bWVudC4gIElmIHRoZSBudW1lcmljYWwgYXJnX25hbWVzIGluIGEgZm9ybWF0IHN0cmluZyBhcmUgMCwgMSwgMixcbi4uLiBpbiBzZXF1ZW5jZSwgdGhleSBjYW4gYWxsIGJlIG9taXR0ZWQgKG5vdCBqdXN0IHNvbWUpIGFuZCB0aGVcbm51bWJlcnMgMCwgMSwgMiwgLi4uIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGF0IG9yZGVyLlxuQmVjYXVzZSAqYXJnX25hbWUqIGlzIG5vdCBxdW90ZS1kZWxpbWl0ZWQsIGl0IGlzIG5vdCBwb3NzaWJsZSB0b1xuc3BlY2lmeSBhcmJpdHJhcnkgZGljdGlvbmFyeSBrZXlzIChlLmcuLCB0aGUgc3RyaW5ncyAiXCcxMFwnIiBvclxuIlwnOi1dXCciKSB3aXRoaW4gYSBmb3JtYXQgc3RyaW5nLiBUaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnkgYW55XG5udW1iZXIgb2YgaW5kZXggb3IgYXR0cmlidXRlIGV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtXG4iXCcubmFtZVwnIiBzZWxlY3RzIHRoZSBuYW1lZCBhdHRyaWJ1dGUgdXNpbmcgImdldGF0dHIoKSIsIHdoaWxlIGFuXG5leHByZXNzaW9uIG9mIHRoZSBmb3JtICJcJ1tpbmRleF1cJyIgZG9lcyBhbiBpbmRleCBsb29rdXAgdXNpbmdcbiJfX2dldGl0ZW1fXygpIi5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogVGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVycyBjYW4gYmVcbm9taXR0ZWQsIHNvICJcJ3t9IHt9XCciIGlzIGVxdWl2YWxlbnQgdG8gIlwnezB9IHsxfVwnIi5cblxuU29tZSBzaW1wbGUgZm9ybWF0IHN0cmluZyBleGFtcGxlczpcblxuICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSJcbiAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjIFwnd2VpZ2h0XCcgYXR0cmlidXRlIG9mIGZpcnN0IHBvc2l0aW9uYWwgYXJnXG4gICAiVW5pdHMgZGVzdHJveWVkOiB7cGxheWVyc1swXX0iICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCBcJ3BsYXllcnNcJy5cblxuVGhlICpjb252ZXJzaW9uKiBmaWVsZCBjYXVzZXMgYSB0eXBlIGNvZXJjaW9uIGJlZm9yZSBmb3JtYXR0aW5nLlxuTm9ybWFsbHksIHRoZSBqb2Igb2YgZm9ybWF0dGluZyBhIHZhbHVlIGlzIGRvbmUgYnkgdGhlICJfX2Zvcm1hdF9fKCkiXG5tZXRob2Qgb2YgdGhlIHZhbHVlIGl0c2VsZi4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMgaXQgaXMgZGVzaXJhYmxlIHRvXG5mb3JjZSBhIHR5cGUgdG8gYmUgZm9ybWF0dGVkIGFzIGEgc3RyaW5nLCBvdmVycmlkaW5nIGl0cyBvd25cbmRlZmluaXRpb24gb2YgZm9ybWF0dGluZy4gIEJ5IGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuY2FsbGluZyAiX19mb3JtYXRfXygpIiwgdGhlIG5vcm1hbCBmb3JtYXR0aW5nIGxvZ2ljIGlzIGJ5cGFzc2VkLlxuXG5UaHJlZSBjb252ZXJzaW9uIGZsYWdzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOiAiXCchc1wnIiB3aGljaCBjYWxsc1xuInN0cigpIiBvbiB0aGUgdmFsdWUsICJcJyFyXCciIHdoaWNoIGNhbGxzICJyZXByKCkiIGFuZCAiXCchYVwnIiB3aGljaFxuY2FsbHMgImFzY2lpKCkiLlxuXG5Tb21lIGV4YW1wbGVzOlxuXG4gICAiSGFyb2xkXCdzIGEgY2xldmVyIHswIXN9IiAgICAgICAgIyBDYWxscyBzdHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJCcmluZyBvdXQgdGhlIGhvbHkge25hbWUhcn0iICAgICMgQ2FsbHMgcmVwcigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIk1vcmUgeyFhfSIgICAgICAgICAgICAgICAgICAgICAgIyBDYWxscyBhc2NpaSgpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuXG5UaGUgKmZvcm1hdF9zcGVjKiBmaWVsZCBjb250YWlucyBhIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZSB2YWx1ZVxuc2hvdWxkIGJlIHByZXNlbnRlZCwgaW5jbHVkaW5nIHN1Y2ggZGV0YWlscyBhcyBmaWVsZCB3aWR0aCwgYWxpZ25tZW50LFxucGFkZGluZywgZGVjaW1hbCBwcmVjaXNpb24gYW5kIHNvIG9uLiAgRWFjaCB2YWx1ZSB0eXBlIGNhbiBkZWZpbmUgaXRzXG5vd24gImZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSIgb3IgaW50ZXJwcmV0YXRpb24gb2YgdGhlICpmb3JtYXRfc3BlYyouXG5cbk1vc3QgYnVpbHQtaW4gdHlwZXMgc3VwcG9ydCBhIGNvbW1vbiBmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UsIHdoaWNoXG5pcyBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbi5cblxuQSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNhbiBhbHNvIGluY2x1ZGUgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkc1xud2l0aGluIGl0LiBUaGVzZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzIGNhbiBjb250YWluIG9ubHkgYSBmaWVsZFxubmFtZTsgY29udmVyc2lvbiBmbGFncyBhbmQgZm9ybWF0IHNwZWNpZmljYXRpb25zIGFyZSBub3QgYWxsb3dlZC4gIFRoZVxucmVwbGFjZW1lbnQgZmllbGRzIHdpdGhpbiB0aGUgZm9ybWF0X3NwZWMgYXJlIHN1YnN0aXR1dGVkIGJlZm9yZSB0aGVcbipmb3JtYXRfc3BlYyogc3RyaW5nIGlzIGludGVycHJldGVkLiBUaGlzIGFsbG93cyB0aGUgZm9ybWF0dGluZyBvZiBhXG52YWx1ZSB0byBiZSBkeW5hbWljYWxseSBzcGVjaWZpZWQuXG5cblNlZSB0aGUgKkZvcm1hdCBleGFtcGxlcyogc2VjdGlvbiBmb3Igc29tZSBleGFtcGxlcy5cblxuXG5Gb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiJGb3JtYXQgc3BlY2lmaWNhdGlvbnMiIGFyZSB1c2VkIHdpdGhpbiByZXBsYWNlbWVudCBmaWVsZHMgY29udGFpbmVkXG53aXRoaW4gYSBmb3JtYXQgc3RyaW5nIHRvIGRlZmluZSBob3cgaW5kaXZpZHVhbCB2YWx1ZXMgYXJlIHByZXNlbnRlZFxuKHNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqKS4gIFRoZXkgY2FuIGFsc28gYmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZVxuYnVpbHQtaW4gImZvcm1hdCgpIiBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKCIiIiIpIHByb2R1Y2VzXG50aGUgc2FtZSByZXN1bHQgYXMgaWYgeW91IGhhZCBjYWxsZWQgInN0cigpIiBvbiB0aGUgdmFsdWUuIEEgbm9uLWVtcHR5XG5mb3JtYXQgc3RyaW5nIHR5cGljYWxseSBtb2RpZmllcyB0aGUgcmVzdWx0LlxuXG5UaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOlxuXG4gICBmb3JtYXRfc3BlYyA6Oj0gW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV1cbiAgIGZpbGwgICAgICAgIDo6PSA8YW55IGNoYXJhY3Rlcj5cbiAgIGFsaWduICAgICAgIDo6PSAiPCIgfCAiPiIgfCAiPSIgfCAiXiJcbiAgIHNpZ24gICAgICAgIDo6PSAiKyIgfCAiLSIgfCAiICJcbiAgIHdpZHRoICAgICAgIDo6PSBpbnRlZ2VyXG4gICBwcmVjaXNpb24gICA6Oj0gaW50ZWdlclxuICAgdHlwZSAgICAgICAgOjo9ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIlxuXG5JZiBhIHZhbGlkICphbGlnbiogdmFsdWUgaXMgc3BlY2lmaWVkLCBpdCBjYW4gYmUgcHJlY2VkZWQgYnkgYSAqZmlsbCpcbmNoYXJhY3RlciB0aGF0IGNhbiBiZSBhbnkgY2hhcmFjdGVyIGFuZCBkZWZhdWx0cyB0byBhIHNwYWNlIGlmXG5vbWl0dGVkLiBOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSAieyIgYW5kICJ9IiBhcyAqZmlsbCpcbmNoYXIgd2hpbGUgdXNpbmcgdGhlICJzdHIuZm9ybWF0KCkiIG1ldGhvZDsgdGhpcyBsaW1pdGF0aW9uIGhvd2V2ZXJcbmRvZXNuXCd0IGFmZmVjdCB0aGUgImZvcm1hdCgpIiBmdW5jdGlvbi5cblxuVGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYWxpZ25tZW50IG9wdGlvbnMgaXMgYXMgZm9sbG93czpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCc8XCciICAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgbGVmdC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnPlwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJz1cJyIgICAgIHwgRm9yY2VzIHRoZSBwYWRkaW5nIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgc2lnbiAoaWYgYW55KSAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdeXCciICAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZSB0aGF0IHVubGVzcyBhIG1pbmltdW0gZmllbGQgd2lkdGggaXMgZGVmaW5lZCwgdGhlIGZpZWxkIHdpZHRoXG53aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBkYXRhIHRvIGZpbGwgaXQsIHNvIHRoYXQgdGhlXG5hbGlnbm1lbnQgb3B0aW9uIGhhcyBubyBtZWFuaW5nIGluIHRoaXMgY2FzZS5cblxuVGhlICpzaWduKiBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgbnVtYmVyIHR5cGVzLCBhbmQgY2FuIGJlIG9uZSBvZlxudGhlIGZvbGxvd2luZzpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCcrXCciICAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBmb3IgYm90aCBwb3NpdGl2ZSBhcyAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnLVwnIiAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgbmVnYXRpdmUgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlICJcJyNcJyIgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgIlwnMGJcJyIsICJcJzBvXCciLCBvclxuIlwnMHhcJyIgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yICJcJ2dcJyIgYW5kICJcJ0dcJyJcbmNvbnZlcnNpb25zLCB0cmFpbGluZyB6ZXJvcyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUgcmVzdWx0LlxuXG5UaGUgIlwnLFwnIiBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzIHNlcGFyYXRvci5cbkZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgIlwnblwnIiBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlXG5pbnN0ZWFkLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBBZGRlZCB0aGUgIlwnLFwnIiBvcHRpb24gKHNlZSBhbHNvICoqUEVQIDM3OCoqKS5cblxuKndpZHRoKiBpcyBhIGRlY2ltYWwgaW50ZWdlciBkZWZpbmluZyB0aGUgbWluaW11bSBmaWVsZCB3aWR0aC4gIElmIG5vdFxuc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWVsZCB3aWR0aCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnQuXG5cblByZWNlZGluZyB0aGUgKndpZHRoKiBmaWVsZCBieSBhIHplcm8gKCJcJzBcJyIpIGNoYXJhY3RlciBlbmFibGVzIHNpZ24tXG5hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWMgdHlwZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSAqZmlsbCpcbmNoYXJhY3RlciBvZiAiXCcwXCciIHdpdGggYW4gKmFsaWdubWVudCogdHlwZSBvZiAiXCc9XCciLlxuXG5UaGUgKnByZWNpc2lvbiogaXMgYSBkZWNpbWFsIG51bWJlciBpbmRpY2F0aW5nIGhvdyBtYW55IGRpZ2l0cyBzaG91bGRcbmJlIGRpc3BsYXllZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZVxuZm9ybWF0dGVkIHdpdGggIlwnZlwnIiBhbmQgIlwnRlwnIiwgb3IgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludFxuZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgZm9ybWF0dGVkIHdpdGggIlwnZ1wnIiBvciAiXCdHXCciLiAgRm9yIG5vbi1cbm51bWJlciB0eXBlcyB0aGUgZmllbGQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIGZpZWxkIHNpemUgLSBpbiBvdGhlclxud29yZHMsIGhvdyBtYW55IGNoYXJhY3RlcnMgd2lsbCBiZSB1c2VkIGZyb20gdGhlIGZpZWxkIGNvbnRlbnQuIFRoZVxuKnByZWNpc2lvbiogaXMgbm90IGFsbG93ZWQgZm9yIGludGVnZXIgdmFsdWVzLlxuXG5GaW5hbGx5LCB0aGUgKnR5cGUqIGRldGVybWluZXMgaG93IHRoZSBkYXRhIHNob3VsZCBiZSBwcmVzZW50ZWQuXG5cblRoZSBhdmFpbGFibGUgc3RyaW5nIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnc1wnIiAgICAgfCBTdHJpbmcgZm9ybWF0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHR5cGUgZm9yIHN0cmluZ3MgYW5kICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzICJcJ3NcJyIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYXZhaWxhYmxlIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCdiXCciICAgICB8IEJpbmFyeSBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDIuICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnY1wnIiAgICAgfCBDaGFyYWN0ZXIuIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIHRoZSBjb3JyZXNwb25kaW5nICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2RcJyIgICAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdvXCciICAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwneFwnIiAgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ1hcJyIgICAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIHVwcGVyLSAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCduXCciICAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyAiXCdkXCciLCBleGNlcHQgdGhhdCBpdCB1c2VzIHRoZSB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyAiXCdkXCciLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHByZXNlbnRhdGlvbiB0eXBlcywgaW50ZWdlcnMgY2FuIGJlIGZvcm1hdHRlZFxud2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgcHJlc2VudGF0aW9uIHR5cGVzIGxpc3RlZCBiZWxvdyAoZXhjZXB0ICJcJ25cJyJcbmFuZCBOb25lKS4gV2hlbiBkb2luZyBzbywgImZsb2F0KCkiIGlzIHVzZWQgdG8gY29udmVydCB0aGUgaW50ZWdlciB0b1xuYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYmVmb3JlIGZvcm1hdHRpbmcuXG5cblRoZSBhdmFpbGFibGUgcHJlc2VudGF0aW9uIHR5cGVzIGZvciBmbG9hdGluZyBwb2ludCBhbmQgZGVjaW1hbCB2YWx1ZXNcbmFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCdlXCciICAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBQcmludHMgdGhlIG51bWJlciBpbiBzY2llbnRpZmljICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnRVwnIiAgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyAiXCdlXCciIGV4Y2VwdCBpdCB1c2VzIGFuIHVwcGVyICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnZlwnIiAgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ0ZcJyIgICAgIHwgRml4ZWQgcG9pbnQuIFNhbWUgYXMgIlwnZlwnIiwgYnV0IGNvbnZlcnRzICJuYW4iIHRvICJOQU4iICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2dcJyIgICAgIHwgR2VuZXJhbCBmb3JtYXQuICBGb3IgYSBnaXZlbiBwcmVjaXNpb24gInAgPj0gMSIsIHRoaXMgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdHXCciICAgICB8IEdlbmVyYWwgZm9ybWF0LiBTYW1lIGFzICJcJ2dcJyIgZXhjZXB0IHN3aXRjaGVzIHRvICJcJ0VcJyIgaWYgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ25cJyIgICAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzICJcJ2dcJyIsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgdGhlIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJyVcJyIgICAgIHwgUGVyY2VudGFnZS4gTXVsdGlwbGllcyB0aGUgbnVtYmVyIGJ5IDEwMCBhbmQgZGlzcGxheXMgaW4gICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBTaW1pbGFyIHRvICJcJ2dcJyIsIGV4Y2VwdCB3aXRoIGF0IGxlYXN0IG9uZSBkaWdpdCBwYXN0IHRoZSAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuXG5Gb3JtYXQgZXhhbXBsZXNcbj09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZXMgb2YgdGhlIG5ldyBmb3JtYXQgc3ludGF4IGFuZCBjb21wYXJpc29uXG53aXRoIHRoZSBvbGQgIiUiLWZvcm1hdHRpbmcuXG5cbkluIG1vc3Qgb2YgdGhlIGNhc2VzIHRoZSBzeW50YXggaXMgc2ltaWxhciB0byB0aGUgb2xkICIlIi1mb3JtYXR0aW5nLFxud2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlICJ7fSIgYW5kIHdpdGggIjoiIHVzZWQgaW5zdGVhZCBvZiAiJSIuIEZvclxuZXhhbXBsZSwgIlwnJTAzLjJmXCciIGNhbiBiZSB0cmFuc2xhdGVkIHRvICJcJ3s6MDMuMmZ9XCciLlxuXG5UaGUgbmV3IGZvcm1hdCBzeW50YXggYWxzbyBzdXBwb3J0cyBuZXcgYW5kIGRpZmZlcmVudCBvcHRpb25zLCBzaG93blxuaW4gdGhlIGZvbGxvdyBleGFtcGxlcy5cblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBwb3NpdGlvbjpcblxuICAgPj4+IFwnezB9LCB7MX0sIHsyfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3t9LCB7fSwge31cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJykgICMgMy4xKyBvbmx5XG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoKlwnYWJjXCcpICAgICAgIyB1bnBhY2tpbmcgYXJndW1lbnQgc2VxdWVuY2VcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7MH17MX17MH1cJy5mb3JtYXQoXCdhYnJhXCcsIFwnY2FkXCcpICAgIyBhcmd1bWVudHNcJyBpbmRpY2VzIGNhbiBiZSByZXBlYXRlZFxuICAgXCdhYnJhY2FkYWJyYVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgbmFtZTpcblxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KGxhdGl0dWRlPVwnMzcuMjROXCcsIGxvbmdpdHVkZT1cJy0xMTUuODFXXCcpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcbiAgID4+PiBjb29yZCA9IHtcJ2xhdGl0dWRlXCc6IFwnMzcuMjROXCcsIFwnbG9uZ2l0dWRlXCc6IFwnLTExNS44MVdcJ31cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdCgqKmNvb3JkKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBhdHRyaWJ1dGVzOlxuXG4gICA+Pj4gYyA9IDMtNWpcbiAgID4+PiAoXCdUaGUgY29tcGxleCBudW1iZXIgezB9IGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgezAucmVhbH0gXCdcbiAgIC4uLiAgXCdhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IHswLmltYWd9LlwnKS5mb3JtYXQoYylcbiAgIFwnVGhlIGNvbXBsZXggbnVtYmVyICgzLTVqKSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IDMuMCBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IC01LjAuXCdcbiAgID4+PiBjbGFzcyBQb2ludDpcbiAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOlxuICAgLi4uICAgICAgICAgc2VsZi54LCBzZWxmLnkgPSB4LCB5XG4gICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnUG9pbnQoe3NlbGYueH0sIHtzZWxmLnl9KVwnLmZvcm1hdChzZWxmPXNlbGYpXG4gICAuLi5cbiAgID4+PiBzdHIoUG9pbnQoNCwgMikpXG4gICBcJ1BvaW50KDQsIDIpXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGl0ZW1zOlxuXG4gICA+Pj4gY29vcmQgPSAoMywgNSlcbiAgID4+PiBcJ1g6IHswWzBdfTsgIFk6IHswWzFdfVwnLmZvcm1hdChjb29yZClcbiAgIFwnWDogMzsgIFk6IDVcJ1xuXG5SZXBsYWNpbmcgIiVzIiBhbmQgIiVyIjpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2VzblwndDogeyFzfSIuZm9ybWF0KFwndGVzdDFcJywgXCd0ZXN0MlwnKVxuICAgInJlcHIoKSBzaG93cyBxdW90ZXM6IFwndGVzdDFcJzsgc3RyKCkgZG9lc25cJ3Q6IHRlc3QyIlxuXG5BbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOlxuXG4gICA+Pj4gXCd7OjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3s6XjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpXG4gICBcJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7OipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyAiJStmIiwgIiUtZiIsIGFuZCAiJSBmIiBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3s6K2Z9OyB7OitmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXNcbiAgIFwnKzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezogZn07IHs6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezotZn07IHs6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7OmZ9OyB7OmZ9XCdcbiAgIFwnMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG5cblJlcGxhY2luZyAiJXgiIGFuZCAiJW8iIGFuZCBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBkaWZmZXJlbnQgYmFzZXM6XG5cbiAgID4+PiAjIGZvcm1hdCBhbHNvIHN1cHBvcnRzIGJpbmFyeSBudW1iZXJzXG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOnh9OyAgb2N0OiB7MDpvfTsgIGJpbjogezA6Yn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMmE7ICBvY3Q6IDUyOyAgYmluOiAxMDEwMTBcJ1xuICAgPj4+ICMgd2l0aCAweCwgMG8sIG9yIDBiIGFzIHByZWZpeDpcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6I3h9OyAgb2N0OiB7MDojb307ICBiaW46IHswOiNifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAweDJhOyAgb2N0OiAwbzUyOyAgYmluOiAwYjEwMTAxMFwnXG5cblVzaW5nIHRoZSBjb21tYSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3I6XG5cbiAgID4+PiBcJ3s6LH1cJy5mb3JtYXQoMTIzNDU2Nzg5MClcbiAgIFwnMSwyMzQsNTY3LDg5MFwnXG5cbkV4cHJlc3NpbmcgYSBwZXJjZW50YWdlOlxuXG4gICA+Pj4gcG9pbnRzID0gMTlcbiAgID4+PiB0b3RhbCA9IDIyXG4gICA+Pj4gXCdDb3JyZWN0IGFuc3dlcnM6IHs6LjIlfVwnLmZvcm1hdChwb2ludHMvdG90YWwpXG4gICBcJ0NvcnJlY3QgYW5zd2VyczogODYuMzYlXCdcblxuVXNpbmcgdHlwZS1zcGVjaWZpYyBmb3JtYXR0aW5nOlxuXG4gICA+Pj4gaW1wb3J0IGRhdGV0aW1lXG4gICA+Pj4gZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDcsIDQsIDEyLCAxNSwgNTgpXG4gICA+Pj4gXCd7OiVZLSVtLSVkICVIOiVNOiVTfVwnLmZvcm1hdChkKVxuICAgXCcyMDEwLTA3LTA0IDEyOjE1OjU4XCdcblxuTmVzdGluZyBhcmd1bWVudHMgYW5kIG1vcmUgY29tcGxleCBleGFtcGxlczpcblxuICAgPj4+IGZvciBhbGlnbiwgdGV4dCBpbiB6aXAoXCc8Xj5cJywgW1wnbGVmdFwnLCBcJ2NlbnRlclwnLCBcJ3JpZ2h0XCddKTpcbiAgIC4uLiAgICAgXCd7MDp7ZmlsbH17YWxpZ259MTZ9XCcuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKVxuICAgLi4uXG4gICBcJ2xlZnQ8PDw8PDw8PDw8PDxcJ1xuICAgXCdeXl5eXmNlbnRlcl5eXl5eXCdcbiAgIFwnPj4+Pj4+Pj4+Pj5yaWdodFwnXG4gICA+Pj5cbiAgID4+PiBvY3RldHMgPSBbMTkyLCAxNjgsIDAsIDFdXG4gICA+Pj4gXCd7OjAyWH17OjAyWH17OjAyWH17OjAyWH1cJy5mb3JtYXQoKm9jdGV0cylcbiAgIFwnQzBBODAwMDFcJ1xuICAgPj4+IGludChfLCAxNilcbiAgIDMyMzIyMzU1MjFcbiAgID4+PlxuICAgPj4+IHdpZHRoID0gNVxuICAgPj4+IGZvciBudW0gaW4gcmFuZ2UoNSwxMik6ICNkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0VcbiAgIC4uLiAgICAgZm9yIGJhc2UgaW4gXCdkWG9iXCc6XG4gICAuLi4gICAgICAgICBwcmludChcJ3swOnt3aWR0aH17YmFzZX19XCcuZm9ybWF0KG51bSwgYmFzZT1iYXNlLCB3aWR0aD13aWR0aCksIGVuZD1cJyBcJylcbiAgIC4uLiAgICAgcHJpbnQoKVxuICAgLi4uXG4gICAgICAgNSAgICAgNSAgICAgNSAgIDEwMVxuICAgICAgIDYgICAgIDYgICAgIDYgICAxMTBcbiAgICAgICA3ICAgICA3ICAgICA3ICAgMTExXG4gICAgICAgOCAgICAgOCAgICAxMCAgMTAwMFxuICAgICAgIDkgICAgIDkgICAgMTEgIDEwMDFcbiAgICAgIDEwICAgICBBICAgIDEyICAxMDEwXG4gICAgICAxMSAgICAgQiAgICAxMyAgMTAxMVxuJywKLSAnZnVuY3Rpb24nOiAnXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogIj0iXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiIioiIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tIHRoaXNcbmlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uXG5pcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uY2UsIHdoZW5cbnRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpc1xudXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYVxuZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OlxuaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYVxubGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgbm90XG53aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIHVzZSAiTm9uZSIgYXMgdGhlIGRlZmF1bHQsXG5hbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuIiIqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nIGFueVxuZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZiB0aGVcbmZvcm0gIiIqKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiIioiIiBvciAiIippZGVudGlmaWVyIiIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gIiI6IGV4cHJlc3Npb24iIiBmb2xsb3dpbmdcbnRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvbiBldmVuIHRob3NlXG5vZiB0aGUgZm9ybSAiKmlkZW50aWZpZXIiIG9yICIqKmlkZW50aWZpZXIiLiAgRnVuY3Rpb25zIG1heSBoYXZlXG4icmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICIiLT4gZXhwcmVzc2lvbiIiIGFmdGVyIHRoZSBwYXJhbWV0ZXJcbmxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIGFuZCBhcmVcbmV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLiAgQW5ub3RhdGlvbnMgbWF5XG5iZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG5UaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgYVxuZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhcyB2YWx1ZXMgb2YgYVxuZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZSAiX19hbm5vdGF0aW9uc19fIlxuYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiImRlZiIiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgIiJkZWYiIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICIiZGVmIiJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuXG4gICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cbicsCisgJ2Z1bmN0aW9uJzogJ1xuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqICI9IlxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgIiIqIiIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzXG5pcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdoZW4gdGhlXG5mdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpc1xuZXZhbHVhdGVkIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtXG5jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudFxudG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhXG5saXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnlcbmFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC5cblRoaXMgaXMgZ2VuZXJhbGx5IG5vdCB3aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIHVzZVxuIk5vbmUiIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGVcbmZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiIiKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZyBhbnlcbmV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWYgdGhlXG5mb3JtICIiKippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgIiIqIiIgb3IgIiIqaWRlbnRpZmllciIiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICIiOiBleHByZXNzaW9uIiIgZm9sbG93aW5nXG50aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb24gZXZlbiB0aG9zZVxub2YgdGhlIGZvcm0gIippZGVudGlmaWVyIiBvciAiKippZGVudGlmaWVyIi4gIEZ1bmN0aW9ucyBtYXkgaGF2ZVxuInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiIi0+IGV4cHJlc3Npb24iIiBhZnRlciB0aGUgcGFyYW1ldGVyXG5saXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiBhbmQgYXJlXG5ldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4gIEFubm90YXRpb25zIG1heVxuYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLlxuVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFcbmZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXMgdmFsdWVzIG9mIGFcbmRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGUgIl9fYW5ub3RhdGlvbnNfXyJcbmF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgIiJkZWYiIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICIiZGVmIiIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiImRlZiIiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcbiAgICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cbicsCiAgJ2dsb2JhbCc6ICdcblRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuICAgZ2xvYmFsX3N0bXQgOjo9ICJnbG9iYWwiIGlkZW50aWZpZXIgKCIsIiBpZGVudGlmaWVyKSpcblxuVGhlICJnbG9iYWwiIHN0YXRlbWVudCBpcyBhIGRlY2xhcmF0aW9uIHdoaWNoIGhvbGRzIGZvciB0aGUgZW50aXJlXG5jdXJyZW50IGNvZGUgYmxvY2suICBJdCBtZWFucyB0aGF0IHRoZSBsaXN0ZWQgaWRlbnRpZmllcnMgYXJlIHRvIGJlXG5pbnRlcnByZXRlZCBhcyBnbG9iYWxzLiAgSXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byBhc3NpZ24gdG8gYSBnbG9iYWxcbnZhcmlhYmxlIHdpdGhvdXQgImdsb2JhbCIsIGFsdGhvdWdoIGZyZWUgdmFyaWFibGVzIG1heSByZWZlciB0b1xuZ2xvYmFscyB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGdsb2JhbC5cblxuTmFtZXMgbGlzdGVkIGluIGEgImdsb2JhbCIgc3RhdGVtZW50IG11c3Qgbm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgY29kZVxuYmxvY2sgdGV4dHVhbGx5IHByZWNlZGluZyB0aGF0ICJnbG9iYWwiIHN0YXRlbWVudC5cblxuTmFtZXMgbGlzdGVkIGluIGEgImdsb2JhbCIgc3RhdGVtZW50IG11c3Qgbm90IGJlIGRlZmluZWQgYXMgZm9ybWFsXG5wYXJhbWV0ZXJzIG9yIGluIGEgImZvciIgbG9vcCBjb250cm9sIHRhcmdldCwgImNsYXNzIiBkZWZpbml0aW9uLFxuZnVuY3Rpb24gZGVmaW5pdGlvbiwgb3IgImltcG9ydCIgc3RhdGVtZW50LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90XG5lbmZvcmNlIHRoZSBsYXR0ZXIgdHdvIHJlc3RyaWN0aW9ucywgYnV0IHByb2dyYW1zIHNob3VsZCBub3QgYWJ1c2VcbnRoaXMgZnJlZWRvbSwgYXMgZnV0dXJlIGltcGxlbWVudGF0aW9ucyBtYXkgZW5mb3JjZSB0aGVtIG9yIHNpbGVudGx5XG5jaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIHRoZSAiZ2xvYmFsIiBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgcGFyc2VyLiAgSXRcbmFwcGxpZXMgb25seSB0byBjb2RlIHBhcnNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSAiZ2xvYmFsIlxuc3RhdGVtZW50LiBJbiBwYXJ0aWN1bGFyLCBhICJnbG9iYWwiIHN0YXRlbWVudCBjb250YWluZWQgaW4gYSBzdHJpbmdcbm9yIGNvZGUgb2JqZWN0IHN1cHBsaWVkIHRvIHRoZSBidWlsdC1pbiAiZXhlYygpIiBmdW5jdGlvbiBkb2VzIG5vdFxuYWZmZWN0IHRoZSBjb2RlIGJsb2NrICpjb250YWluaW5nKiB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIGNvZGVcbmNvbnRhaW5lZCBpbiBzdWNoIGEgc3RyaW5nIGlzIHVuYWZmZWN0ZWQgYnkgImdsb2JhbCIgc3RhdGVtZW50cyBpbiB0aGVcbmNvZGUgY29udGFpbmluZyB0aGUgZnVuY3Rpb24gY2FsbC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlICJldmFsKCkiXG5hbmQgImNvbXBpbGUoKSIgZnVuY3Rpb25zLlxuJywKICAnaWQtY2xhc3Nlcyc6ICdcblJlc2VydmVkIGNsYXNzZXMgb2YgaWRlbnRpZmllcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQ2VydGFpbiBjbGFzc2VzIG9mIGlkZW50aWZpZXJzIChiZXNpZGVzIGtleXdvcmRzKSBoYXZlIHNwZWNpYWxcbm1lYW5pbmdzLiAgVGhlc2UgY2xhc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgcGF0dGVybnMgb2YgbGVhZGluZyBhbmRcbnRyYWlsaW5nIHVuZGVyc2NvcmUgY2hhcmFjdGVyczpcblxuIl8qIlxuICAgTm90IGltcG9ydGVkIGJ5ICJmcm9tIG1vZHVsZSBpbXBvcnQgKiIuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyICJfIlxuICAgaXMgdXNlZCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGVcbiAgIGxhc3QgZXZhbHVhdGlvbjsgaXQgaXMgc3RvcmVkIGluIHRoZSAiYnVpbHRpbnMiIG1vZHVsZS4gIFdoZW4gbm90XG4gICBpbiBpbnRlcmFjdGl2ZSBtb2RlLCAiXyIgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXMgbm90IGRlZmluZWQuXG4gICBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSAiXyIgaXMgb2Z0ZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gICAgIGludGVybmF0aW9uYWxpemF0aW9uOyByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgICJnZXR0ZXh0IiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG4iX18qX18iXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpLiAgQ3VycmVudFxuICAgc3lzdGVtIG5hbWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlICpTcGVjaWFsIG1ldGhvZCBuYW1lcyogc2VjdGlvblxuICAgYW5kIGVsc2V3aGVyZS4gIE1vcmUgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2ZcbiAgIFB5dGhvbi4gICpBbnkqIHVzZSBvZiAiX18qX18iIG5hbWVzLCBpbiBhbnkgY29udGV4dCwgdGhhdCBkb2VzIG5vdFxuICAgZm9sbG93IGV4cGxpY2l0bHkgZG9jdW1lbnRlZCB1c2UsIGlzIHN1YmplY3QgdG8gYnJlYWthZ2Ugd2l0aG91dFxuICAgd2FybmluZy5cblxuIl9fKiJcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAogICdpZGVudGlmaWVycyc6ICdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9ucy5cblxuVGhlIHN5bnRheCBvZiBpZGVudGlmaWVycyBpbiBQeXRob24gaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgc3RhbmRhcmRcbmFubmV4IFVBWC0zMSwgd2l0aCBlbGFib3JhdGlvbiBhbmQgY2hhbmdlcyBhcyBkZWZpbmVkIGJlbG93OyBzZWUgYWxzb1xuKipQRVAgMzEzMSoqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5cbldpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKFUrMDAwMS4uVSswMDdGKSwgdGhlIHZhbGlkIGNoYXJhY3RlcnMgZm9yXG5pZGVudGlmaWVycyBhcmUgdGhlIHNhbWUgYXMgaW4gUHl0aG9uIDIueDogdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlXG5sZXR0ZXJzICJBIiB0aHJvdWdoICJaIiwgdGhlIHVuZGVyc2NvcmUgIl8iIGFuZCwgZXhjZXB0IGZvciB0aGUgZmlyc3RcbmNoYXJhY3RlciwgdGhlIGRpZ2l0cyAiMCIgdGhyb3VnaCAiOSIuXG5cblB5dGhvbiAzLjAgaW50cm9kdWNlcyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZnJvbSBvdXRzaWRlIHRoZSBBU0NJSVxucmFuZ2UgKHNlZSAqKlBFUCAzMTMxKiopLiAgRm9yIHRoZXNlIGNoYXJhY3RlcnMsIHRoZSBjbGFzc2lmaWNhdGlvblxudXNlcyB0aGUgdmVyc2lvbiBvZiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgYXMgaW5jbHVkZWQgaW4gdGhlXG4idW5pY29kZWRhdGEiIG1vZHVsZS5cblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG4gICBpZGVudGlmaWVyICAgOjo9IHhpZF9zdGFydCB4aWRfY29udGludWUqXG4gICBpZF9zdGFydCAgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBnZW5lcmFsIGNhdGVnb3JpZXMgTHUsIExsLCBMdCwgTG0sIExvLCBObCwgdGhlIHVuZGVyc2NvcmUsIGFuZCBjaGFyYWN0ZXJzIHdpdGggdGhlIE90aGVyX0lEX1N0YXJ0IHByb3BlcnR5PlxuICAgaWRfY29udGludWUgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQsIHBsdXMgY2hhcmFjdGVycyBpbiB0aGUgY2F0ZWdvcmllcyBNbiwgTWMsIE5kLCBQYyBhbmQgb3RoZXJzIHdpdGggdGhlIE90aGVyX0lEX0NvbnRpbnVlIHByb3BlcnR5PlxuICAgeGlkX3N0YXJ0ICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9zdGFydCB4aWRfY29udGludWUqIj5cbiAgIHhpZF9jb250aW51ZSA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX2NvbnRpbnVlIHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfY29udGludWUqIj5cblxuVGhlIFVuaWNvZGUgY2F0ZWdvcnkgY29kZXMgbWVudGlvbmVkIGFib3ZlIHN0YW5kIGZvcjpcblxuKiAqTHUqIC0gdXBwZXJjYXNlIGxldHRlcnNcblxuKiAqTGwqIC0gbG93ZXJjYXNlIGxldHRlcnNcblxuKiAqTHQqIC0gdGl0bGVjYXNlIGxldHRlcnNcblxuKiAqTG0qIC0gbW9kaWZpZXIgbGV0dGVyc1xuXG4qICpMbyogLSBvdGhlciBsZXR0ZXJzXG5cbiogKk5sKiAtIGxldHRlciBudW1iZXJzXG5cbiogKk1uKiAtIG5vbnNwYWNpbmcgbWFya3NcblxuKiAqTWMqIC0gc3BhY2luZyBjb21iaW5pbmcgbWFya3NcblxuKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzXG5cbiogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnNcblxuKiAqT3RoZXJfSURfU3RhcnQqIC0gZXhwbGljaXQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIFByb3BMaXN0LnR4dCB0b1xuICBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlXG5cbkFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZztcbmNvbXBhcmlzb24gb2YgaWRlbnRpZmllcnMgaXMgYmFzZWQgb24gTkZLQy5cblxuQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yXG5Vbmljb2RlIDQuMSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5kY2wuaHBpLnVuaS1cbnBvdHNkYW0uZGUvaG9tZS9sb2V3aXMvdGFibGUtMzEzMS5odG1sLlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgRmFsc2UgICAgICBjbGFzcyAgICAgIGZpbmFsbHkgICAgaXMgICAgICAgICByZXR1cm5cbiAgIE5vbmUgICAgICAgY29udGludWUgICBmb3IgICAgICAgIGxhbWJkYSAgICAgdHJ5XG4gICBUcnVlICAgICAgIGRlZiAgICAgICAgZnJvbSAgICAgICBub25sb2NhbCAgIHdoaWxlXG4gICBhbmQgICAgICAgIGRlbCAgICAgICAgZ2xvYmFsICAgICBub3QgICAgICAgIHdpdGhcbiAgIGFzICAgICAgICAgZWxpZiAgICAgICBpZiAgICAgICAgIG9yICAgICAgICAgeWllbGRcbiAgIGFzc2VydCAgICAgZWxzZSAgICAgICBpbXBvcnQgICAgIHBhc3NcbiAgIGJyZWFrICAgICAgZXhjZXB0ICAgICBpbiAgICAgICAgIHJhaXNlXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG4iXyoiXG4gICBOb3QgaW1wb3J0ZWQgYnkgImZyb20gbW9kdWxlIGltcG9ydCAqIi4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXIgIl8iXG4gICBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZVxuICAgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlICJidWlsdGlucyIgbW9kdWxlLiAgV2hlbiBub3RcbiAgIGluIGludGVyYWN0aXZlIG1vZGUsICJfIiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3QgZGVmaW5lZC5cbiAgIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lICJfIiBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdldHRleHQiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbiJfXypfXyJcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mICJfXypfXyIgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXMgbm90XG4gICBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZSB3aXRob3V0XG4gICB3YXJuaW5nLlxuXG4iX18qIlxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCiAgJ2lmJzogJ1xuVGhlICJpZiIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKipcblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuJywKICAnaW1hZ2luYXJ5JzogJ1xuSW1hZ2luYXJ5IGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKipcblxuSW1hZ2luYXJ5IGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBpbWFnbnVtYmVyIDo6PSAoZmxvYXRudW1iZXIgfCBpbnRwYXJ0KSAoImoiIHwgIkoiKVxuXG5BbiBpbWFnaW5hcnkgbGl0ZXJhbCB5aWVsZHMgYSBjb21wbGV4IG51bWJlciB3aXRoIGEgcmVhbCBwYXJ0IG9mIDAuMC5cbkNvbXBsZXggbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgYXMgYSBwYWlyIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnNcbmFuZCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBvbiB0aGVpciByYW5nZS4gIFRvIGNyZWF0ZSBhIGNvbXBsZXhcbm51bWJlciB3aXRoIGEgbm9uemVybyByZWFsIHBhcnQsIGFkZCBhIGZsb2F0aW5nIHBvaW50IG51bWJlciB0byBpdCxcbmUuZy4sICIoMys0aikiLiAgU29tZSBleGFtcGxlcyBvZiBpbWFnaW5hcnkgbGl0ZXJhbHM6XG5cbiAgIDMuMTRqICAgMTAuaiAgICAxMGogICAgIC4wMDFqICAgMWUxMDBqICAzLjE0ZS0xMGpcbicsCi0gJ2ltcG9ydCc6ICdcblRoZSAiaW1wb3J0IiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuICAgaW1wb3J0X3N0bXQgICAgIDo6PSAiaW1wb3J0IiBtb2R1bGUgWyJhcyIgbmFtZV0gKCAiLCIgbW9kdWxlIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiICIoIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKiBbIiwiXSAiKSJcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiBtb2R1bGUgImltcG9ydCIgIioiXG4gICBtb2R1bGUgICAgICAgICAgOjo9IChpZGVudGlmaWVyICIuIikqIGlkZW50aWZpZXJcbiAgIHJlbGF0aXZlX21vZHVsZSA6Oj0gIi4iKiBtb2R1bGUgfCAiLiIrXG4gICBuYW1lICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuVGhlIGJhc2ljIGltcG9ydCBzdGF0ZW1lbnQgKG5vICJmcm9tIiBjbGF1c2UpIGlzIGV4ZWN1dGVkIGluIHR3b1xuc3RlcHM6XG5cbjEuIGZpbmQgYSBtb2R1bGUsIGxvYWRpbmcgYW5kIGluaXRpYWxpemluZyBpdCBpZiBuZWNlc3NhcnlcblxuMi4gZGVmaW5lIGEgbmFtZSBvciBuYW1lcyBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgc2NvcGVcbiAgIHdoZXJlIHRoZSAiaW1wb3J0IiBzdGF0ZW1lbnQgb2NjdXJzLlxuXG5XaGVuIHRoZSBzdGF0ZW1lbnQgY29udGFpbnMgbXVsdGlwbGUgY2xhdXNlcyAoc2VwYXJhdGVkIGJ5IGNvbW1hcykgdGhlXG50d28gc3RlcHMgYXJlIGNhcnJpZWQgb3V0IHNlcGFyYXRlbHkgZm9yIGVhY2ggY2xhdXNlLCBqdXN0IGFzIHRob3VnaFxudGhlIGNsYXVzZXMgaGFkIGJlZW4gc2VwYXJhdGVkIG91dCBpbnRvIGluZGl2aWRpdWFsIGltcG9ydCBzdGF0ZW1lbnRzLlxuXG5UaGUgZGV0YWlscyBvZiB0aGUgZmlyc3Qgc3RlcCwgZmluZGluZyBhbmQgbG9hZGluZyBtb2R1bGVzIGlzXG5kZXNjcmliZWQgaW4gZ3JlYXRlciBkZXRhaWwgaW4gdGhlIHNlY3Rpb24gb24gdGhlICppbXBvcnQgc3lzdGVtKixcbndoaWNoIGFsc28gZGVzY3JpYmVzIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHRoYXRcbmNhbiBiZSBpbXBvcnRlZCwgYXMgd2VsbCBhcyBhbGwgdGhlIGhvb2tzIHRoYXQgY2FuIGJlIHVzZWQgdG9cbmN1c3RvbWl6ZSB0aGUgaW1wb3J0IHN5c3RlbS4gTm90ZSB0aGF0IGZhaWx1cmVzIGluIHRoaXMgc3RlcCBtYXlcbmluZGljYXRlIGVpdGhlciB0aGF0IHRoZSBtb2R1bGUgY291bGQgbm90IGJlIGxvY2F0ZWQsICpvciogdGhhdCBhblxuZXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBtb2R1bGUsIHdoaWNoIGluY2x1ZGVzIGV4ZWN1dGlvblxub2YgdGhlIG1vZHVsZVwncyBjb2RlLlxuXG5JZiB0aGUgcmVxdWVzdGVkIG1vZHVsZSBpcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LCBpdCB3aWxsIGJlIG1hZGVcbmF2YWlsYWJsZSBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGluIG9uZSBvZiB0aHJlZSB3YXlzOlxuXG4qIElmIHRoZSBtb2R1bGUgbmFtZSBpcyBmb2xsb3dlZCBieSAiYXMiLCB0aGVuIHRoZSBuYW1lIGZvbGxvd2luZ1xuICAiYXMiIGlzIGJvdW5kIGRpcmVjdGx5IHRvIHRoZSBpbXBvcnRlZCBtb2R1bGUuXG5cbiogSWYgbm8gb3RoZXIgbmFtZSBpcyBzcGVjaWZpZWQsIGFuZCB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzIGFcbiAgdG9wIGxldmVsIG1vZHVsZSwgdGhlIG1vZHVsZVwncyBuYW1lIGlzIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2VcbiAgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGltcG9ydGVkIG1vZHVsZVxuXG4qIElmIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQgaXMgKm5vdCogYSB0b3AgbGV2ZWwgbW9kdWxlLCB0aGVuIHRoZVxuICBuYW1lIG9mIHRoZSB0b3AgbGV2ZWwgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBtb2R1bGUgaXMgYm91bmQgaW5cbiAgdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyBhIHJlZmVyZW5jZSB0byB0aGUgdG9wIGxldmVsIHBhY2thZ2UuIFRoZVxuICBpbXBvcnRlZCBtb2R1bGUgbXVzdCBiZSBhY2Nlc3NlZCB1c2luZyBpdHMgZnVsbCBxdWFsaWZpZWQgbmFtZVxuICByYXRoZXIgdGhhbiBkaXJlY3RseVxuXG5UaGUgImZyb20iIGZvcm0gdXNlcyBhIHNsaWdodGx5IG1vcmUgY29tcGxleCBwcm9jZXNzOlxuXG4xLiBmaW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIHRoZSAiZnJvbSIgY2xhdXNlIGxvYWRpbmcgYW5kXG4gICBpbml0aWFsaXppbmcgaXQgaWYgbmVjZXNzYXJ5O1xuXG4yLiBmb3IgZWFjaCBvZiB0aGUgaWRlbnRpZmllcnMgc3BlY2lmaWVkIGluIHRoZSAiaW1wb3J0IiBjbGF1c2VzOlxuXG4gICAxLiBjaGVjayBpZiB0aGUgaW1wb3J0ZWQgbW9kdWxlIGhhcyBhbiBhdHRyaWJ1dGUgYnkgdGhhdCBuYW1lXG5cbiAgIDIuIGlmIG5vdCwgYXR0ZW1wdCB0byBpbXBvcnQgYSBzdWJtb2R1bGUgd2l0aCB0aGF0IG5hbWUgYW5kIHRoZW5cbiAgICAgIGNoZWNrIHRoZSBpbXBvcnRlZCBtb2R1bGUgYWdhaW4gZm9yIHRoYXQgYXR0cmlidXRlXG5cbiAgIDMuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kLCAiSW1wb3J0RXJyb3IiIGlzIHJhaXNlZC5cblxuICAgNC4gb3RoZXJ3aXNlLCBhIHJlZmVyZW5jZSB0byB0aGF0IHZhbHVlIGlzIGJvdW5kIGluIHRoZSBsb2NhbFxuICAgICAgbmFtZXNwYWNlLCB1c2luZyB0aGUgbmFtZSBpbiB0aGUgImFzIiBjbGF1c2UgaWYgaXQgaXMgcHJlc2VudCxcbiAgICAgIG90aGVyd2lzZSB1c2luZyB0aGUgYXR0cmlidXRlIG5hbWVcblxuRXhhbXBsZXM6XG5cbiAgIGltcG9ydCBmb28gICAgICAgICAgICAgICAgICMgZm9vIGltcG9ydGVkIGFuZCBib3VuZCBsb2NhbGx5XG4gICBpbXBvcnQgZm9vLmJhci5iYXogICAgICAgICAjIGZvby5iYXIuYmF6IGltcG9ydGVkLCBmb28gYm91bmQgbG9jYWxseVxuICAgaW1wb3J0IGZvby5iYXIuYmF6IGFzIGZiYiAgIyBmb28uYmFyLmJheiBpbXBvcnRlZCBhbmQgYm91bmQgYXMgZmJiXG4gICBmcm9tIGZvby5iYXIgaW1wb3J0IGJheiAgICAjIGZvby5iYXIuYmF6IGltcG9ydGVkIGFuZCBib3VuZCBhcyBiYXpcbiAgIGZyb20gZm9vIGltcG9ydCBhdHRyICAgICAgICMgZm9vIGltcG9ydGVkIGFuZCBmb28uYXR0ciBib3VuZCBhcyBhdHRyXG5cbklmIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIGlzIHJlcGxhY2VkIGJ5IGEgc3RhciAoIlwnKlwnIiksIGFsbCBwdWJsaWNcbm5hbWVzIGRlZmluZWQgaW4gdGhlIG1vZHVsZSBhcmUgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlXG5zY29wZSB3aGVyZSB0aGUgImltcG9ydCIgc3RhdGVtZW50IG9jY3Vycy5cblxuVGhlICpwdWJsaWMgbmFtZXMqIGRlZmluZWQgYnkgYSBtb2R1bGUgYXJlIGRldGVybWluZWQgYnkgY2hlY2tpbmcgdGhlXG5tb2R1bGVcJ3MgbmFtZXNwYWNlIGZvciBhIHZhcmlhYmxlIG5hbWVkICJfX2FsbF9fIjsgaWYgZGVmaW5lZCwgaXQgbXVzdFxuYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBuYW1lcyBkZWZpbmVkIG9yIGltcG9ydGVkIGJ5IHRoYXRcbm1vZHVsZS4gIFRoZSBuYW1lcyBnaXZlbiBpbiAiX19hbGxfXyIgYXJlIGFsbCBjb25zaWRlcmVkIHB1YmxpYyBhbmRcbmFyZSByZXF1aXJlZCB0byBleGlzdC4gIElmICJfX2FsbF9fIiBpcyBub3QgZGVmaW5lZCwgdGhlIHNldCBvZiBwdWJsaWNcbm5hbWVzIGluY2x1ZGVzIGFsbCBuYW1lcyBmb3VuZCBpbiB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSB3aGljaCBkbyBub3RcbmJlZ2luIHdpdGggYW4gdW5kZXJzY29yZSBjaGFyYWN0ZXIgKCJcJ19cJyIpLiAgIl9fYWxsX18iIHNob3VsZCBjb250YWluXG50aGUgZW50aXJlIHB1YmxpYyBBUEkuIEl0IGlzIGludGVuZGVkIHRvIGF2b2lkIGFjY2lkZW50YWxseSBleHBvcnRpbmdcbml0ZW1zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBBUEkgKHN1Y2ggYXMgbGlicmFyeSBtb2R1bGVzIHdoaWNoIHdlcmVcbmltcG9ydGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgbW9kdWxlKS5cblxuVGhlICJmcm9tIiBmb3JtIHdpdGggIioiIG1heSBvbmx5IG9jY3VyIGluIGEgbW9kdWxlIHNjb3BlLiAgVGhlIHdpbGRcbmNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tICJpbXBvcnQgKiIgLS0tIGlzIG9ubHkgYWxsb3dlZCBhdCB0aGUgbW9kdWxlXG5sZXZlbC4gQXR0ZW1wdGluZyB0byB1c2UgaXQgaW4gY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2lsbFxucmFpc2UgYSAiU3ludGF4RXJyb3IiLlxuXG5XaGVuIHNwZWNpZnlpbmcgd2hhdCBtb2R1bGUgdG8gaW1wb3J0IHlvdSBkbyBub3QgaGF2ZSB0byBzcGVjaWZ5IHRoZVxuYWJzb2x1dGUgbmFtZSBvZiB0aGUgbW9kdWxlLiBXaGVuIGEgbW9kdWxlIG9yIHBhY2thZ2UgaXMgY29udGFpbmVkXG53aXRoaW4gYW5vdGhlciBwYWNrYWdlIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgYSByZWxhdGl2ZSBpbXBvcnQgd2l0aGluXG50aGUgc2FtZSB0b3AgcGFja2FnZSB3aXRob3V0IGhhdmluZyB0byBtZW50aW9uIHRoZSBwYWNrYWdlIG5hbWUuIEJ5XG51c2luZyBsZWFkaW5nIGRvdHMgaW4gdGhlIHNwZWNpZmllZCBtb2R1bGUgb3IgcGFja2FnZSBhZnRlciAiZnJvbSIgeW91XG5jYW4gc3BlY2lmeSBob3cgaGlnaCB0byB0cmF2ZXJzZSB1cCB0aGUgY3VycmVudCBwYWNrYWdlIGhpZXJhcmNoeVxud2l0aG91dCBzcGVjaWZ5aW5nIGV4YWN0IG5hbWVzLiBPbmUgbGVhZGluZyBkb3QgbWVhbnMgdGhlIGN1cnJlbnRcbnBhY2thZ2Ugd2hlcmUgdGhlIG1vZHVsZSBtYWtpbmcgdGhlIGltcG9ydCBleGlzdHMuIFR3byBkb3RzIG1lYW5zIHVwXG5vbmUgcGFja2FnZSBsZXZlbC4gVGhyZWUgZG90cyBpcyB1cCB0d28gbGV2ZWxzLCBldGMuIFNvIGlmIHlvdSBleGVjdXRlXG4iZnJvbSAuIGltcG9ydCBtb2QiIGZyb20gYSBtb2R1bGUgaW4gdGhlICJwa2ciIHBhY2thZ2UgdGhlbiB5b3Ugd2lsbFxuZW5kIHVwIGltcG9ydGluZyAicGtnLm1vZCIuIElmIHlvdSBleGVjdXRlICJmcm9tIC4uc3VicGtnMiBpbXBvcnQgbW9kIlxuZnJvbSB3aXRoaW4gInBrZy5zdWJwa2cxIiB5b3Ugd2lsbCBpbXBvcnQgInBrZy5zdWJwa2cyLm1vZCIuIFRoZVxuc3BlY2lmaWNhdGlvbiBmb3IgcmVsYXRpdmUgaW1wb3J0cyBpcyBjb250YWluZWQgd2l0aGluICoqUEVQIDMyOCoqLlxuXG4iaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSIgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdFxuZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZXMgbmVlZCB0byBiZSBsb2FkZWQgZHluYW1pY2FsbHkuXG5cblxuRnV0dXJlIHN0YXRlbWVudHNcbj09PT09PT09PT09PT09PT09XG5cbkEgKmZ1dHVyZSBzdGF0ZW1lbnQqIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBjb21waWxlciB0aGF0IGEgcGFydGljdWxhclxubW9kdWxlIHNob3VsZCBiZSBjb21waWxlZCB1c2luZyBzeW50YXggb3Igc2VtYW50aWNzIHRoYXQgd2lsbCBiZVxuYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIGZ1dHVyZSByZWxlYXNlIG9mIFB5dGhvbi4gIFRoZSBmdXR1cmVcbnN0YXRlbWVudCBpcyBpbnRlbmRlZCB0byBlYXNlIG1pZ3JhdGlvbiB0byBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uXG50aGF0IGludHJvZHVjZSBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgbGFuZ3VhZ2UuICBJdCBhbGxvd3MgdXNlIG9mXG50aGUgbmV3IGZlYXR1cmVzIG9uIGEgcGVyLW1vZHVsZSBiYXNpcyBiZWZvcmUgdGhlIHJlbGVhc2UgaW4gd2hpY2ggdGhlXG5mZWF0dXJlIGJlY29tZXMgc3RhbmRhcmQuXG5cbiAgIGZ1dHVyZV9zdGF0ZW1lbnQgOjo9ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgZmVhdHVyZSBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICAgICAgKCIsIiBmZWF0dXJlIFsiYXMiIG5hbWVdKSpcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiAiKCIgZmVhdHVyZSBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICAgICAgKCIsIiBmZWF0dXJlIFsiYXMiIG5hbWVdKSogWyIsIl0gIikiXG4gICBmZWF0dXJlICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG4gICBuYW1lICAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnV0dXJlIHN0YXRlbWVudCBtdXN0IGFwcGVhciBuZWFyIHRoZSB0b3Agb2YgdGhlIG1vZHVsZS4gIFRoZSBvbmx5XG5saW5lcyB0aGF0IGNhbiBhcHBlYXIgYmVmb3JlIGEgZnV0dXJlIHN0YXRlbWVudCBhcmU6XG5cbiogdGhlIG1vZHVsZSBkb2NzdHJpbmcgKGlmIGFueSksXG5cbiogY29tbWVudHMsXG5cbiogYmxhbmsgbGluZXMsIGFuZFxuXG4qIG90aGVyIGZ1dHVyZSBzdGF0ZW1lbnRzLlxuXG5UaGUgZmVhdHVyZXMgcmVjb2duaXplZCBieSBQeXRob24gMy4wIGFyZSAiYWJzb2x1dGVfaW1wb3J0IixcbiJkaXZpc2lvbiIsICJnZW5lcmF0b3JzIiwgInVuaWNvZGVfbGl0ZXJhbHMiLCAicHJpbnRfZnVuY3Rpb24iLFxuIm5lc3RlZF9zY29wZXMiIGFuZCAid2l0aF9zdGF0ZW1lbnQiLiAgVGhleSBhcmUgYWxsIHJlZHVuZGFudCBiZWNhdXNlXG50aGV5IGFyZSBhbHdheXMgZW5hYmxlZCwgYW5kIG9ubHkga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCBpcyByZWNvZ25pemVkIGFuZCB0cmVhdGVkIHNwZWNpYWxseSBhdCBjb21waWxlXG50aW1lOiBDaGFuZ2VzIHRvIHRoZSBzZW1hbnRpY3Mgb2YgY29yZSBjb25zdHJ1Y3RzIGFyZSBvZnRlblxuaW1wbGVtZW50ZWQgYnkgZ2VuZXJhdGluZyBkaWZmZXJlbnQgY29kZS4gIEl0IG1heSBldmVuIGJlIHRoZSBjYXNlXG50aGF0IGEgbmV3IGZlYXR1cmUgaW50cm9kdWNlcyBuZXcgaW5jb21wYXRpYmxlIHN5bnRheCAoc3VjaCBhcyBhIG5ld1xucmVzZXJ2ZWQgd29yZCksIGluIHdoaWNoIGNhc2UgdGhlIGNvbXBpbGVyIG1heSBuZWVkIHRvIHBhcnNlIHRoZVxubW9kdWxlIGRpZmZlcmVudGx5LiAgU3VjaCBkZWNpc2lvbnMgY2Fubm90IGJlIHB1c2hlZCBvZmYgdW50aWxcbnJ1bnRpbWUuXG5cbkZvciBhbnkgZ2l2ZW4gcmVsZWFzZSwgdGhlIGNvbXBpbGVyIGtub3dzIHdoaWNoIGZlYXR1cmUgbmFtZXMgaGF2ZVxuYmVlbiBkZWZpbmVkLCBhbmQgcmFpc2VzIGEgY29tcGlsZS10aW1lIGVycm9yIGlmIGEgZnV0dXJlIHN0YXRlbWVudFxuY29udGFpbnMgYSBmZWF0dXJlIG5vdCBrbm93biB0byBpdC5cblxuVGhlIGRpcmVjdCBydW50aW1lIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgZm9yIGFueSBpbXBvcnQgc3RhdGVtZW50OlxudGhlcmUgaXMgYSBzdGFuZGFyZCBtb2R1bGUgIl9fZnV0dXJlX18iLCBkZXNjcmliZWQgbGF0ZXIsIGFuZCBpdCB3aWxsXG5iZSBpbXBvcnRlZCBpbiB0aGUgdXN1YWwgd2F5IGF0IHRoZSB0aW1lIHRoZSBmdXR1cmUgc3RhdGVtZW50IGlzXG5leGVjdXRlZC5cblxuVGhlIGludGVyZXN0aW5nIHJ1bnRpbWUgc2VtYW50aWNzIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgZmVhdHVyZVxuZW5hYmxlZCBieSB0aGUgZnV0dXJlIHN0YXRlbWVudC5cblxuTm90ZSB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGUgc3RhdGVtZW50OlxuXG4gICBpbXBvcnQgX19mdXR1cmVfXyBbYXMgbmFtZV1cblxuVGhhdCBpcyBub3QgYSBmdXR1cmUgc3RhdGVtZW50OyBpdFwncyBhbiBvcmRpbmFyeSBpbXBvcnQgc3RhdGVtZW50IHdpdGhcbm5vIHNwZWNpYWwgc2VtYW50aWNzIG9yIHN5bnRheCByZXN0cmljdGlvbnMuXG5cbkNvZGUgY29tcGlsZWQgYnkgY2FsbHMgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZXhlYygpIiBhbmRcbiJjb21waWxlKCkiIHRoYXQgb2NjdXIgaW4gYSBtb2R1bGUgIk0iIGNvbnRhaW5pbmcgYSBmdXR1cmUgc3RhdGVtZW50XG53aWxsLCBieSBkZWZhdWx0LCB1c2UgdGhlIG5ldyBzeW50YXggb3Igc2VtYW50aWNzIGFzc29jaWF0ZWQgd2l0aCB0aGVcbmZ1dHVyZSBzdGF0ZW1lbnQuICBUaGlzIGNhbiBiZSBjb250cm9sbGVkIGJ5IG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xuImNvbXBpbGUoKSIgLS0tIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIGZvciBkZXRhaWxzLlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgdHlwZWQgYXQgYW4gaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgcHJvbXB0IHdpbGxcbnRha2UgZWZmZWN0IGZvciB0aGUgcmVzdCBvZiB0aGUgaW50ZXJwcmV0ZXIgc2Vzc2lvbi4gIElmIGFuXG5pbnRlcnByZXRlciBpcyBzdGFydGVkIHdpdGggdGhlICotaSogb3B0aW9uLCBpcyBwYXNzZWQgYSBzY3JpcHQgbmFtZVxudG8gZXhlY3V0ZSwgYW5kIHRoZSBzY3JpcHQgaW5jbHVkZXMgYSBmdXR1cmUgc3RhdGVtZW50LCBpdCB3aWxsIGJlIGluXG5lZmZlY3QgaW4gdGhlIGludGVyYWN0aXZlIHNlc3Npb24gc3RhcnRlZCBhZnRlciB0aGUgc2NyaXB0IGlzXG5leGVjdXRlZC5cblxuU2VlIGFsc286ICoqUEVQIDIzNioqIC0gQmFjayB0byB0aGUgX19mdXR1cmVfX1xuXG4gICAgIFRoZSBvcmlnaW5hbCBwcm9wb3NhbCBmb3IgdGhlIF9fZnV0dXJlX18gbWVjaGFuaXNtLlxuJywKLSAnaW4nOiAnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgImEgPCBiIDwgYyIgaGF2ZSB0aGVcbmludGVycHJldGF0aW9uIHRoYXQgaXMgY29udmVudGlvbmFsIGluIG1hdGhlbWF0aWNzOlxuXG4gICBjb21wYXJpc29uICAgIDo6PSBvcl9leHByICggY29tcF9vcGVyYXRvciBvcl9leHByICkqXG4gICBjb21wX29wZXJhdG9yIDo6PSAiPCIgfCAiPiIgfCAiPT0iIHwgIj49IiB8ICI8PSIgfCAiIT0iXG4gICAgICAgICAgICAgICAgICAgICB8ICJpcyIgWyJub3QiXSB8IFsibm90Il0gImluIlxuXG5Db21wYXJpc29ucyB5aWVsZCBib29sZWFuIHZhbHVlczogIlRydWUiIG9yICJGYWxzZSIuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCAieCA8IHkgPD0geiIgaXNcbmVxdWl2YWxlbnQgdG8gInggPCB5IGFuZCB5IDw9IHoiLCBleGNlcHQgdGhhdCAieSIgaXMgZXZhbHVhdGVkIG9ubHlcbm9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzICJ6IiBpcyBub3QgZXZhbHVhdGVkIGF0IGFsbCB3aGVuICJ4IDwgeSIgaXNcbmZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiAiYSBvcDEgYiBvcDIgYyAuLi4geVxub3BOIHoiIGlzIGVxdWl2YWxlbnQgdG8gImEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6IiwgZXhjZXB0XG50aGF0IGVhY2ggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYXQgbW9zdCBvbmNlLlxuXG5Ob3RlIHRoYXQgImEgb3AxIGIgb3AyIGMiIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb24gYmV0d2VlblxuKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sICJ4IDwgeSA+IHoiIGlzIHBlcmZlY3RseSBsZWdhbCAodGhvdWdoXG5wZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgb3BlcmF0b3JzICI8IiwgIj4iLCAiPT0iLCAiPj0iLCAiPD0iLCBhbmQgIiE9IiBjb21wYXJlIHRoZSB2YWx1ZXNcbm9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLiBJZiBib3RoIGFyZVxubnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsIHRoZSAiPT0iIGFuZFxuIiE9IiBvcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdG8gYmVcbnVuZXF1YWwsIHdoaWxlIHRoZSAiPCIsICI+IiwgIj49IiBhbmQgIjw9IiBvcGVyYXRvcnMgcmFpc2UgYVxuIlR5cGVFcnJvciIgd2hlbiBjb21wYXJpbmcgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdGhhdCBkbyBub3RcbmltcGxlbWVudCB0aGVzZSBvcGVyYXRvcnMgZm9yIHRoZSBnaXZlbiBwYWlyIG9mIHR5cGVzLiAgWW91IGNhblxuY29udHJvbCBjb21wYXJpc29uIGJlaGF2aW9yIG9mIG9iamVjdHMgb2Ygbm9uLWJ1aWx0LWluIHR5cGVzIGJ5XG5kZWZpbmluZyByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBsaWtlICJfX2d0X18oKSIsIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qQmFzaWMgY3VzdG9taXphdGlvbiouXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogVGhlIHZhbHVlcyAiZmxvYXQoXCdOYU5cJykiIGFuZCAiRGVjaW1hbChcJ05hTlwnKSIgYXJlIHNwZWNpYWwuIFRoZVxuICBhcmUgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMsICJ4IGlzIHgiIGJ1dCBhcmUgbm90IGVxdWFsIHRvXG4gIHRoZW1zZWx2ZXMsICJ4ICE9IHgiLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGFcbiAgbm90LWEtbnVtYmVyIHZhbHVlIHdpbGwgcmV0dXJuICJGYWxzZSIuICBGb3IgZXhhbXBsZSwgYm90aCAiMyA8XG4gIGZsb2F0KFwnTmFOXCcpIiBhbmQgImZsb2F0KFwnTmFOXCcpIDwgMyIgd2lsbCByZXR1cm4gIkZhbHNlIi5cblxuKiBCeXRlcyBvYmplY3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpY1xuICB2YWx1ZXMgb2YgdGhlaXIgZWxlbWVudHMuXG5cbiogU3RyaW5ncyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgZXF1aXZhbGVudHMgKHRoZSByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJvcmQoKSIpIG9mIHRoZWlyXG4gIGNoYXJhY3RlcnMuIFszXSBTdHJpbmcgYW5kIGJ5dGVzIG9iamVjdCBjYW5cJ3QgYmUgY29tcGFyZWQhXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvblxuICBvZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCAiWzEsMix4XSA8PSBbMSwyLHldIiBoYXMgdGhlIHNhbWVcbiAgdmFsdWUgYXMgInggPD0geSIuICBJZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVcbiAgc2hvcnRlciBzZXF1ZW5jZSBpcyBvcmRlcmVkIGZpcnN0IChmb3IgZXhhbXBsZSwgIlsxLDJdIDwgWzEsMiwzXSIpLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZVxuICBzYW1lICIoa2V5LCB2YWx1ZSkiIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyAiKFwnPFwnLCBcJzw9XCcsIFwnPj1cJyxcbiAgXCc+XCcpIiByYWlzZSAiVHlwZUVycm9yIi5cblxuKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmRcbiAgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZVxuICB0d28gc2V0cyAiezEsMn0iIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy5cbiAgRm9yIGV4YW1wbGUsICJtaW4oKSIsICJtYXgoKSIsIGFuZCAic29ydGVkKCkiIHByb2R1Y2UgdW5kZWZpbmVkXG4gIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzLlxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXlcbiAgYXJlIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZFxuICBzbWFsbGVyIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0XG4gIGNvbnNpc3RlbnRseSB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXJcbm9mIHRoZSB0eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdFxubnVtZXJpYyB0eXBlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlci4gIFdoZW4gY3Jvc3MtdHlwZVxuY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgY29tcGFyaXNvbiBtZXRob2QgcmV0dXJuc1xuIk5vdEltcGxlbWVudGVkIi5cblxuVGhlIG9wZXJhdG9ycyAiaW4iIGFuZCAibm90IGluIiB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgInggaW4gcyJcbmV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiAqcyosIGFuZCBmYWxzZSBvdGhlcndpc2UuICAieFxubm90IGluIHMiIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mICJ4IGluIHMiLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlc1xuYW5kIHNldCB0eXBlcyBzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggImluIiB0ZXN0c1xud2hldGhlciBhIHRoZSBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzXG5saXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGVcbmV4cHJlc3Npb24gInggaW4geSIgaXMgZXF1aXZhbGVudCB0byAiYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW5cbnkpIi5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBpc1xuYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzICJ5LmZpbmQoeCkgIT0gLTEiLiAgRW1wdHlcbnN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsXG5zbyAiIiIgaW4gImFiYyIiIHdpbGwgcmV0dXJuICJUcnVlIi5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgIl9fY29udGFpbnNfXygpIiBtZXRob2QsICJ4XG5pbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICJ5Ll9fY29udGFpbnNfXyh4KSIgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiBidXQgZG9cbmRlZmluZSAiX19pdGVyX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgc29tZSB2YWx1ZSAieiIgd2l0aCAieCA9PSB6IlxuaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgInkiLiAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZFxuZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbiJfX2dldGl0ZW1fXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCAieCA9PSB5W2ldIiwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSAiSW5kZXhFcnJvciIgZXhjZXB0aW9uLiAgKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCBpbiIgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbiJpbiIuXG5cblRoZSBvcGVyYXRvcnMgImlzIiBhbmQgImlzIG5vdCIgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiAieCBpcyB5IiBpc1xudHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgInggaXMgbm90IHkiXG55aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKKyAnaW1wb3J0JzogJ1xuVGhlICJpbXBvcnQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBpbXBvcnRfc3RtdCAgICAgOjo9ICJpbXBvcnQiIG1vZHVsZSBbImFzIiBuYW1lXSAoICIsIiBtb2R1bGUgWyJhcyIgbmFtZV0gKSpcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiByZWxhdGl2ZV9tb2R1bGUgImltcG9ydCIgaWRlbnRpZmllciBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICggIiwiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV0gKSpcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiByZWxhdGl2ZV9tb2R1bGUgImltcG9ydCIgIigiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqIFsiLCJdICIpIlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIG1vZHVsZSAiaW1wb3J0IiAiKiJcbiAgIG1vZHVsZSAgICAgICAgICA6Oj0gKGlkZW50aWZpZXIgIi4iKSogaWRlbnRpZmllclxuICAgcmVsYXRpdmVfbW9kdWxlIDo6PSAiLiIqIG1vZHVsZSB8ICIuIitcbiAgIG5hbWUgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5UaGUgYmFzaWMgaW1wb3J0IHN0YXRlbWVudCAobm8gImZyb20iIGNsYXVzZSkgaXMgZXhlY3V0ZWQgaW4gdHdvXG5zdGVwczpcblxuMS4gZmluZCBhIG1vZHVsZSwgbG9hZGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0IGlmIG5lY2Vzc2FyeVxuXG4yLiBkZWZpbmUgYSBuYW1lIG9yIG5hbWVzIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBzY29wZSB3aGVyZVxuICAgdGhlICJpbXBvcnQiIHN0YXRlbWVudCBvY2N1cnMuXG5cbldoZW4gdGhlIHN0YXRlbWVudCBjb250YWlucyBtdWx0aXBsZSBjbGF1c2VzIChzZXBhcmF0ZWQgYnkgY29tbWFzKSB0aGVcbnR3byBzdGVwcyBhcmUgY2FycmllZCBvdXQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGF1c2UsIGp1c3QgYXMgdGhvdWdoXG50aGUgY2xhdXNlcyBoYWQgYmVlbiBzZXBhcmF0ZWQgb3V0IGludG8gaW5kaXZpZGl1YWwgaW1wb3J0IHN0YXRlbWVudHMuXG5cblRoZSBkZXRhaWxzIG9mIHRoZSBmaXJzdCBzdGVwLCBmaW5kaW5nIGFuZCBsb2FkaW5nIG1vZHVsZXMgaXNcbmRlc2NyaWJlZCBpbiBncmVhdGVyIGRldGFpbCBpbiB0aGUgc2VjdGlvbiBvbiB0aGUgKmltcG9ydCBzeXN0ZW0qLFxud2hpY2ggYWxzbyBkZXNjcmliZXMgdGhlIHZhcmlvdXMgdHlwZXMgb2YgcGFja2FnZXMgYW5kIG1vZHVsZXMgdGhhdFxuY2FuIGJlIGltcG9ydGVkLCBhcyB3ZWxsIGFzIGFsbCB0aGUgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0b1xuY3VzdG9taXplIHRoZSBpbXBvcnQgc3lzdGVtLiBOb3RlIHRoYXQgZmFpbHVyZXMgaW4gdGhpcyBzdGVwIG1heVxuaW5kaWNhdGUgZWl0aGVyIHRoYXQgdGhlIG1vZHVsZSBjb3VsZCBub3QgYmUgbG9jYXRlZCwgKm9yKiB0aGF0IGFuXG5lcnJvciBvY2N1cnJlZCB3aGlsZSBpbml0aWFsaXppbmcgdGhlIG1vZHVsZSwgd2hpY2ggaW5jbHVkZXMgZXhlY3V0aW9uXG5vZiB0aGUgbW9kdWxlXCdzIGNvZGUuXG5cbklmIHRoZSByZXF1ZXN0ZWQgbW9kdWxlIGlzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHksIGl0IHdpbGwgYmUgbWFkZVxuYXZhaWxhYmxlIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgaW4gb25lIG9mIHRocmVlIHdheXM6XG5cbiogSWYgdGhlIG1vZHVsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5ICJhcyIsIHRoZW4gdGhlIG5hbWUgZm9sbG93aW5nICJhcyJcbiAgaXMgYm91bmQgZGlyZWN0bHkgdG8gdGhlIGltcG9ydGVkIG1vZHVsZS5cblxuKiBJZiBubyBvdGhlciBuYW1lIGlzIHNwZWNpZmllZCwgYW5kIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQgaXMgYVxuICB0b3AgbGV2ZWwgbW9kdWxlLCB0aGUgbW9kdWxlXCdzIG5hbWUgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZVxuICBhcyBhIHJlZmVyZW5jZSB0byB0aGUgaW1wb3J0ZWQgbW9kdWxlXG5cbiogSWYgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCBpcyAqbm90KiBhIHRvcCBsZXZlbCBtb2R1bGUsIHRoZW4gdGhlXG4gIG5hbWUgb2YgdGhlIHRvcCBsZXZlbCBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIG1vZHVsZSBpcyBib3VuZCBpblxuICB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AgbGV2ZWwgcGFja2FnZS4gVGhlXG4gIGltcG9ydGVkIG1vZHVsZSBtdXN0IGJlIGFjY2Vzc2VkIHVzaW5nIGl0cyBmdWxsIHF1YWxpZmllZCBuYW1lXG4gIHJhdGhlciB0aGFuIGRpcmVjdGx5XG5cblRoZSAiZnJvbSIgZm9ybSB1c2VzIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHByb2Nlc3M6XG5cbjEuIGZpbmQgdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gdGhlICJmcm9tIiBjbGF1c2UgbG9hZGluZyBhbmRcbiAgIGluaXRpYWxpemluZyBpdCBpZiBuZWNlc3Nhcnk7XG5cbjIuIGZvciBlYWNoIG9mIHRoZSBpZGVudGlmaWVycyBzcGVjaWZpZWQgaW4gdGhlICJpbXBvcnQiIGNsYXVzZXM6XG5cbiAgIDEuIGNoZWNrIGlmIHRoZSBpbXBvcnRlZCBtb2R1bGUgaGFzIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWVcblxuICAgMi4gaWYgbm90LCBhdHRlbXB0IHRvIGltcG9ydCBhIHN1Ym1vZHVsZSB3aXRoIHRoYXQgbmFtZSBhbmQgdGhlblxuICAgICAgY2hlY2sgdGhlIGltcG9ydGVkIG1vZHVsZSBhZ2FpbiBmb3IgdGhhdCBhdHRyaWJ1dGVcblxuICAgMy4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQsICJJbXBvcnRFcnJvciIgaXMgcmFpc2VkLlxuXG4gICA0LiBvdGhlcndpc2UsIGEgcmVmZXJlbmNlIHRvIHRoYXQgdmFsdWUgaXMgYm91bmQgaW4gdGhlIGxvY2FsXG4gICAgICBuYW1lc3BhY2UsIHVzaW5nIHRoZSBuYW1lIGluIHRoZSAiYXMiIGNsYXVzZSBpZiBpdCBpcyBwcmVzZW50LFxuICAgICAgb3RoZXJ3aXNlIHVzaW5nIHRoZSBhdHRyaWJ1dGUgbmFtZVxuXG5FeGFtcGxlczpcblxuICAgaW1wb3J0IGZvbyAgICAgICAgICAgICAgICAgIyBmb28gaW1wb3J0ZWQgYW5kIGJvdW5kIGxvY2FsbHlcbiAgIGltcG9ydCBmb28uYmFyLmJheiAgICAgICAgICMgZm9vLmJhci5iYXogaW1wb3J0ZWQsIGZvbyBib3VuZCBsb2NhbGx5XG4gICBpbXBvcnQgZm9vLmJhci5iYXogYXMgZmJiICAjIGZvby5iYXIuYmF6IGltcG9ydGVkIGFuZCBib3VuZCBhcyBmYmJcbiAgIGZyb20gZm9vLmJhciBpbXBvcnQgYmF6ICAgICMgZm9vLmJhci5iYXogaW1wb3J0ZWQgYW5kIGJvdW5kIGFzIGJhelxuICAgZnJvbSBmb28gaW1wb3J0IGF0dHIgICAgICAgIyBmb28gaW1wb3J0ZWQgYW5kIGZvby5hdHRyIGJvdW5kIGFzIGF0dHJcblxuSWYgdGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMgaXMgcmVwbGFjZWQgYnkgYSBzdGFyICgiXCcqXCciKSwgYWxsIHB1YmxpY1xubmFtZXMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlIGFyZSBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGVcbnNjb3BlIHdoZXJlIHRoZSAiaW1wb3J0IiBzdGF0ZW1lbnQgb2NjdXJzLlxuXG5UaGUgKnB1YmxpYyBuYW1lcyogZGVmaW5lZCBieSBhIG1vZHVsZSBhcmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGVcbm1vZHVsZVwncyBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUgbmFtZWQgIl9fYWxsX18iOyBpZiBkZWZpbmVkLCBpdCBtdXN0XG5iZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3Mgd2hpY2ggYXJlIG5hbWVzIGRlZmluZWQgb3IgaW1wb3J0ZWQgYnkgdGhhdFxubW9kdWxlLiAgVGhlIG5hbWVzIGdpdmVuIGluICJfX2FsbF9fIiBhcmUgYWxsIGNvbnNpZGVyZWQgcHVibGljIGFuZFxuYXJlIHJlcXVpcmVkIHRvIGV4aXN0LiAgSWYgIl9fYWxsX18iIGlzIG5vdCBkZWZpbmVkLCB0aGUgc2V0IG9mIHB1YmxpY1xubmFtZXMgaW5jbHVkZXMgYWxsIG5hbWVzIGZvdW5kIGluIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIHdoaWNoIGRvIG5vdFxuYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoIlwnX1wnIikuICAiX19hbGxfXyIgc2hvdWxkIGNvbnRhaW5cbnRoZSBlbnRpcmUgcHVibGljIEFQSS4gSXQgaXMgaW50ZW5kZWQgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IGV4cG9ydGluZ1xuaXRlbXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSAoc3VjaCBhcyBsaWJyYXJ5IG1vZHVsZXMgd2hpY2ggd2VyZVxuaW1wb3J0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUpLlxuXG5UaGUgImZyb20iIGZvcm0gd2l0aCAiKiIgbWF5IG9ubHkgb2NjdXIgaW4gYSBtb2R1bGUgc2NvcGUuICBUaGUgd2lsZFxuY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gImltcG9ydCAqIiAtLS0gaXMgb25seSBhbGxvd2VkIGF0IHRoZSBtb2R1bGVcbmxldmVsLiBBdHRlbXB0aW5nIHRvIHVzZSBpdCBpbiBjbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aWxsXG5yYWlzZSBhICJTeW50YXhFcnJvciIuXG5cbldoZW4gc3BlY2lmeWluZyB3aGF0IG1vZHVsZSB0byBpbXBvcnQgeW91IGRvIG5vdCBoYXZlIHRvIHNwZWNpZnkgdGhlXG5hYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUuIFdoZW4gYSBtb2R1bGUgb3IgcGFja2FnZSBpcyBjb250YWluZWRcbndpdGhpbiBhbm90aGVyIHBhY2thZ2UgaXQgaXMgcG9zc2libGUgdG8gbWFrZSBhIHJlbGF0aXZlIGltcG9ydCB3aXRoaW5cbnRoZSBzYW1lIHRvcCBwYWNrYWdlIHdpdGhvdXQgaGF2aW5nIHRvIG1lbnRpb24gdGhlIHBhY2thZ2UgbmFtZS4gQnlcbnVzaW5nIGxlYWRpbmcgZG90cyBpbiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBvciBwYWNrYWdlIGFmdGVyICJmcm9tIiB5b3VcbmNhbiBzcGVjaWZ5IGhvdyBoaWdoIHRvIHRyYXZlcnNlIHVwIHRoZSBjdXJyZW50IHBhY2thZ2UgaGllcmFyY2h5XG53aXRob3V0IHNwZWNpZnlpbmcgZXhhY3QgbmFtZXMuIE9uZSBsZWFkaW5nIGRvdCBtZWFucyB0aGUgY3VycmVudFxucGFja2FnZSB3aGVyZSB0aGUgbW9kdWxlIG1ha2luZyB0aGUgaW1wb3J0IGV4aXN0cy4gVHdvIGRvdHMgbWVhbnMgdXBcbm9uZSBwYWNrYWdlIGxldmVsLiBUaHJlZSBkb3RzIGlzIHVwIHR3byBsZXZlbHMsIGV0Yy4gU28gaWYgeW91IGV4ZWN1dGVcbiJmcm9tIC4gaW1wb3J0IG1vZCIgZnJvbSBhIG1vZHVsZSBpbiB0aGUgInBrZyIgcGFja2FnZSB0aGVuIHlvdSB3aWxsXG5lbmQgdXAgaW1wb3J0aW5nICJwa2cubW9kIi4gSWYgeW91IGV4ZWN1dGUgImZyb20gLi5zdWJwa2cyIGltcG9ydCBtb2QiXG5mcm9tIHdpdGhpbiAicGtnLnN1YnBrZzEiIHlvdSB3aWxsIGltcG9ydCAicGtnLnN1YnBrZzIubW9kIi4gVGhlXG5zcGVjaWZpY2F0aW9uIGZvciByZWxhdGl2ZSBpbXBvcnRzIGlzIGNvbnRhaW5lZCB3aXRoaW4gKipQRVAgMzI4KiouXG5cbiJpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIiBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGFwcGxpY2F0aW9ucyB0aGF0XG5kZXRlcm1pbmUgd2hpY2ggbW9kdWxlcyBuZWVkIHRvIGJlIGxvYWRlZCBkeW5hbWljYWxseS5cblxuXG5GdXR1cmUgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT1cblxuQSAqZnV0dXJlIHN0YXRlbWVudCogaXMgYSBkaXJlY3RpdmUgdG8gdGhlIGNvbXBpbGVyIHRoYXQgYSBwYXJ0aWN1bGFyXG5tb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIHN5bnRheCBvciBzZW1hbnRpY3MgdGhhdCB3aWxsIGJlXG5hdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uLiAgVGhlIGZ1dHVyZVxuc3RhdGVtZW50IGlzIGludGVuZGVkIHRvIGVhc2UgbWlncmF0aW9uIHRvIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob25cbnRoYXQgaW50cm9kdWNlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBsYW5ndWFnZS4gIEl0IGFsbG93cyB1c2Ugb2ZcbnRoZSBuZXcgZmVhdHVyZXMgb24gYSBwZXItbW9kdWxlIGJhc2lzIGJlZm9yZSB0aGUgcmVsZWFzZSBpbiB3aGljaCB0aGVcbmZlYXR1cmUgYmVjb21lcyBzdGFuZGFyZC5cblxuICAgZnV0dXJlX3N0YXRlbWVudCA6Oj0gImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKlxuICAgICAgICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiICIoIiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKiBbIiwiXSAiKSJcbiAgIGZlYXR1cmUgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgIG5hbWUgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdXR1cmUgc3RhdGVtZW50IG11c3QgYXBwZWFyIG5lYXIgdGhlIHRvcCBvZiB0aGUgbW9kdWxlLiAgVGhlIG9ubHlcbmxpbmVzIHRoYXQgY2FuIGFwcGVhciBiZWZvcmUgYSBmdXR1cmUgc3RhdGVtZW50IGFyZTpcblxuKiB0aGUgbW9kdWxlIGRvY3N0cmluZyAoaWYgYW55KSxcblxuKiBjb21tZW50cyxcblxuKiBibGFuayBsaW5lcywgYW5kXG5cbiogb3RoZXIgZnV0dXJlIHN0YXRlbWVudHMuXG5cblRoZSBmZWF0dXJlcyByZWNvZ25pemVkIGJ5IFB5dGhvbiAzLjAgYXJlICJhYnNvbHV0ZV9pbXBvcnQiLFxuImRpdmlzaW9uIiwgImdlbmVyYXRvcnMiLCAidW5pY29kZV9saXRlcmFscyIsICJwcmludF9mdW5jdGlvbiIsXG4ibmVzdGVkX3Njb3BlcyIgYW5kICJ3aXRoX3N0YXRlbWVudCIuICBUaGV5IGFyZSBhbGwgcmVkdW5kYW50IGJlY2F1c2VcbnRoZXkgYXJlIGFsd2F5cyBlbmFibGVkLCBhbmQgb25seSBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblxuQSBmdXR1cmUgc3RhdGVtZW50IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgc3BlY2lhbGx5IGF0IGNvbXBpbGVcbnRpbWU6IENoYW5nZXMgdG8gdGhlIHNlbWFudGljcyBvZiBjb3JlIGNvbnN0cnVjdHMgYXJlIG9mdGVuXG5pbXBsZW1lbnRlZCBieSBnZW5lcmF0aW5nIGRpZmZlcmVudCBjb2RlLiAgSXQgbWF5IGV2ZW4gYmUgdGhlIGNhc2VcbnRoYXQgYSBuZXcgZmVhdHVyZSBpbnRyb2R1Y2VzIG5ldyBpbmNvbXBhdGlibGUgc3ludGF4IChzdWNoIGFzIGEgbmV3XG5yZXNlcnZlZCB3b3JkKSwgaW4gd2hpY2ggY2FzZSB0aGUgY29tcGlsZXIgbWF5IG5lZWQgdG8gcGFyc2UgdGhlXG5tb2R1bGUgZGlmZmVyZW50bHkuICBTdWNoIGRlY2lzaW9ucyBjYW5ub3QgYmUgcHVzaGVkIG9mZiB1bnRpbFxucnVudGltZS5cblxuRm9yIGFueSBnaXZlbiByZWxlYXNlLCB0aGUgY29tcGlsZXIga25vd3Mgd2hpY2ggZmVhdHVyZSBuYW1lcyBoYXZlXG5iZWVuIGRlZmluZWQsIGFuZCByYWlzZXMgYSBjb21waWxlLXRpbWUgZXJyb3IgaWYgYSBmdXR1cmUgc3RhdGVtZW50XG5jb250YWlucyBhIGZlYXR1cmUgbm90IGtub3duIHRvIGl0LlxuXG5UaGUgZGlyZWN0IHJ1bnRpbWUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYW55IGltcG9ydCBzdGF0ZW1lbnQ6XG50aGVyZSBpcyBhIHN0YW5kYXJkIG1vZHVsZSAiX19mdXR1cmVfXyIsIGRlc2NyaWJlZCBsYXRlciwgYW5kIGl0IHdpbGxcbmJlIGltcG9ydGVkIGluIHRoZSB1c3VhbCB3YXkgYXQgdGhlIHRpbWUgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQgaXNcbmV4ZWN1dGVkLlxuXG5UaGUgaW50ZXJlc3RpbmcgcnVudGltZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBmZWF0dXJlXG5lbmFibGVkIGJ5IHRoZSBmdXR1cmUgc3RhdGVtZW50LlxuXG5Ob3RlIHRoYXQgdGhlcmUgaXMgbm90aGluZyBzcGVjaWFsIGFib3V0IHRoZSBzdGF0ZW1lbnQ6XG5cbiAgIGltcG9ydCBfX2Z1dHVyZV9fIFthcyBuYW1lXVxuXG5UaGF0IGlzIG5vdCBhIGZ1dHVyZSBzdGF0ZW1lbnQ7IGl0XCdzIGFuIG9yZGluYXJ5IGltcG9ydCBzdGF0ZW1lbnQgd2l0aFxubm8gc3BlY2lhbCBzZW1hbnRpY3Mgb3Igc3ludGF4IHJlc3RyaWN0aW9ucy5cblxuQ29kZSBjb21waWxlZCBieSBjYWxscyB0byB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJleGVjKCkiIGFuZFxuImNvbXBpbGUoKSIgdGhhdCBvY2N1ciBpbiBhIG1vZHVsZSAiTSIgY29udGFpbmluZyBhIGZ1dHVyZSBzdGF0ZW1lbnRcbndpbGwsIGJ5IGRlZmF1bHQsIHVzZSB0aGUgbmV3IHN5bnRheCBvciBzZW1hbnRpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZVxuZnV0dXJlIHN0YXRlbWVudC4gIFRoaXMgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG4iY29tcGlsZSgpIiAtLS0gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gZm9yIGRldGFpbHMuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCB0eXBlZCBhdCBhbiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBwcm9tcHQgd2lsbFxudGFrZSBlZmZlY3QgZm9yIHRoZSByZXN0IG9mIHRoZSBpbnRlcnByZXRlciBzZXNzaW9uLiAgSWYgYW5cbmludGVycHJldGVyIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgKi1pKiBvcHRpb24sIGlzIHBhc3NlZCBhIHNjcmlwdCBuYW1lXG50byBleGVjdXRlLCBhbmQgdGhlIHNjcmlwdCBpbmNsdWRlcyBhIGZ1dHVyZSBzdGF0ZW1lbnQsIGl0IHdpbGwgYmUgaW5cbmVmZmVjdCBpbiB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbiBzdGFydGVkIGFmdGVyIHRoZSBzY3JpcHQgaXNcbmV4ZWN1dGVkLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMjM2KiogLSBCYWNrIHRvIHRoZSBfX2Z1dHVyZV9fXG4gICAgICBUaGUgb3JpZ2luYWwgcHJvcG9zYWwgZm9yIHRoZSBfX2Z1dHVyZV9fIG1lY2hhbmlzbS5cbicsCisgJ2luJzogJ1xuQ29tcGFyaXNvbnNcbioqKioqKioqKioqXG5cblVubGlrZSBDLCBhbGwgY29tcGFyaXNvbiBvcGVyYXRpb25zIGluIFB5dGhvbiBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LFxud2hpY2ggaXMgbG93ZXIgdGhhbiB0aGF0IG9mIGFueSBhcml0aG1ldGljLCBzaGlmdGluZyBvciBiaXR3aXNlXG5vcGVyYXRpb24uICBBbHNvIHVubGlrZSBDLCBleHByZXNzaW9ucyBsaWtlICJhIDwgYiA8IGMiIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIiE9IlxuICAgICAgICAgICAgICAgICAgICAgfCAiaXMiIFsibm90Il0gfCBbIm5vdCJdICJpbiJcblxuQ29tcGFyaXNvbnMgeWllbGQgYm9vbGVhbiB2YWx1ZXM6ICJUcnVlIiBvciAiRmFsc2UiLlxuXG5Db21wYXJpc29ucyBjYW4gYmUgY2hhaW5lZCBhcmJpdHJhcmlseSwgZS5nLiwgInggPCB5IDw9IHoiIGlzXG5lcXVpdmFsZW50IHRvICJ4IDwgeSBhbmQgeSA8PSB6IiwgZXhjZXB0IHRoYXQgInkiIGlzIGV2YWx1YXRlZCBvbmx5XG5vbmNlIChidXQgaW4gYm90aCBjYXNlcyAieiIgaXMgbm90IGV2YWx1YXRlZCBhdCBhbGwgd2hlbiAieCA8IHkiIGlzXG5mb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gImEgb3AxIGIgb3AyIGMgLi4uIHlcbm9wTiB6IiBpcyBlcXVpdmFsZW50IHRvICJhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4geiIsIGV4Y2VwdFxudGhhdCBlYWNoIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGF0IG1vc3Qgb25jZS5cblxuTm90ZSB0aGF0ICJhIG9wMSBiIG9wMiBjIiBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uIGJldHdlZW5cbiphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCAieCA8IHkgPiB6IiBpcyBwZXJmZWN0bHkgbGVnYWwgKHRob3VnaFxucGVyaGFwcyBub3QgcHJldHR5KS5cblxuVGhlIG9wZXJhdG9ycyAiPCIsICI+IiwgIj09IiwgIj49IiwgIjw9IiwgYW5kICIhPSIgY29tcGFyZSB0aGUgdmFsdWVzXG5vZiB0d28gb2JqZWN0cy4gIFRoZSBvYmplY3RzIG5lZWQgbm90IGhhdmUgdGhlIHNhbWUgdHlwZS4gSWYgYm90aCBhcmVcbm51bWJlcnMsIHRoZXkgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgT3RoZXJ3aXNlLCB0aGUgIj09IiBhbmRcbiIhPSIgb3BlcmF0b3JzICphbHdheXMqIGNvbnNpZGVyIG9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzIHRvIGJlXG51bmVxdWFsLCB3aGlsZSB0aGUgIjwiLCAiPiIsICI+PSIgYW5kICI8PSIgb3BlcmF0b3JzIHJhaXNlIGFcbiJUeXBlRXJyb3IiIHdoZW4gY29tcGFyaW5nIG9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzIHRoYXQgZG8gbm90XG5pbXBsZW1lbnQgdGhlc2Ugb3BlcmF0b3JzIGZvciB0aGUgZ2l2ZW4gcGFpciBvZiB0eXBlcy4gIFlvdSBjYW5cbmNvbnRyb2wgY29tcGFyaXNvbiBiZWhhdmlvciBvZiBvYmplY3RzIG9mIG5vbi1idWlsdC1pbiB0eXBlcyBieVxuZGVmaW5pbmcgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbGlrZSAiX19ndF9fKCkiLCBkZXNjcmliZWQgaW4gc2VjdGlvblxuKkJhc2ljIGN1c3RvbWl6YXRpb24qLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlOlxuXG4qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LlxuXG4qIFRoZSB2YWx1ZXMgImZsb2F0KFwnTmFOXCcpIiBhbmQgIkRlY2ltYWwoXCdOYU5cJykiIGFyZSBzcGVjaWFsLiBUaGUgYXJlXG4gIGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLCAieCBpcyB4IiBidXQgYXJlIG5vdCBlcXVhbCB0byB0aGVtc2VsdmVzLFxuICAieCAhPSB4Ii4gIEFkZGl0aW9uYWxseSwgY29tcGFyaW5nIGFueSB2YWx1ZSB0byBhIG5vdC1hLW51bWJlciB2YWx1ZVxuICB3aWxsIHJldHVybiAiRmFsc2UiLiAgRm9yIGV4YW1wbGUsIGJvdGggIjMgPCBmbG9hdChcJ05hTlwnKSIgYW5kXG4gICJmbG9hdChcJ05hTlwnKSA8IDMiIHdpbGwgcmV0dXJuICJGYWxzZSIuXG5cbiogQnl0ZXMgb2JqZWN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgdmFsdWVzIG9mIHRoZWlyIGVsZW1lbnRzLlxuXG4qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIGVxdWl2YWxlbnRzXG4gICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiAib3JkKCkiKSBvZiB0aGVpciBjaGFyYWN0ZXJzLlxuICBbM10gU3RyaW5nIGFuZCBieXRlcyBvYmplY3QgY2FuXCd0IGJlIGNvbXBhcmVkIVxuXG4qIFR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb24gb2ZcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBlYWNoXG4gIGVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG4gIHR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuXG4gIElmIG5vdCBlcXVhbCwgdGhlIHNlcXVlbmNlcyBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpciBmaXJzdFxuICBkaWZmZXJpbmcgZWxlbWVudHMuICBGb3IgZXhhbXBsZSwgIlsxLDIseF0gPD0gWzEsMix5XSIgaGFzIHRoZSBzYW1lXG4gIHZhbHVlIGFzICJ4IDw9IHkiLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdCBleGlzdCwgdGhlXG4gIHNob3J0ZXIgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsICJbMSwyXSA8IFsxLDIsM10iKS5cblxuKiBNYXBwaW5ncyAoZGljdGlvbmFyaWVzKSBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSB0aGVcbiAgc2FtZSAiKGtleSwgdmFsdWUpIiBwYWlycy4gT3JkZXIgY29tcGFyaXNvbnMgIihcJzxcJywgXCc8PVwnLCBcJz49XCcsXG4gIFwnPlwnKSIgcmFpc2UgIlR5cGVFcnJvciIuXG5cbiogU2V0cyBhbmQgZnJvemVuc2V0cyBkZWZpbmUgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gbWVhbiBzdWJzZXQgYW5kXG4gIHN1cGVyc2V0IHRlc3RzLiAgVGhvc2UgcmVsYXRpb25zIGRvIG5vdCBkZWZpbmUgdG90YWwgb3JkZXJpbmdzICh0aGVcbiAgdHdvIHNldHMgInsxLDJ9IiBhbmQgezIsM30gYXJlIG5vdCBlcXVhbCwgbm9yIHN1YnNldHMgb2Ygb25lXG4gIGFub3RoZXIsIG5vciBzdXBlcnNldHMgb2Ygb25lIGFub3RoZXIpLiAgQWNjb3JkaW5nbHksIHNldHMgYXJlIG5vdFxuICBhcHByb3ByaWF0ZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9ucyB3aGljaCBkZXBlbmQgb24gdG90YWwgb3JkZXJpbmcuXG4gIEZvciBleGFtcGxlLCAibWluKCkiLCAibWF4KCkiLCBhbmQgInNvcnRlZCgpIiBwcm9kdWNlIHVuZGVmaW5lZFxuICByZXN1bHRzIGdpdmVuIGEgbGlzdCBvZiBzZXRzIGFzIGlucHV0cy5cblxuKiBNb3N0IG90aGVyIG9iamVjdHMgb2YgYnVpbHQtaW4gdHlwZXMgY29tcGFyZSB1bmVxdWFsIHVubGVzcyB0aGV5IGFyZVxuICB0aGUgc2FtZSBvYmplY3Q7IHRoZSBjaG9pY2Ugd2hldGhlciBvbmUgb2JqZWN0IGlzIGNvbnNpZGVyZWQgc21hbGxlclxuICBvciBsYXJnZXIgdGhhbiBhbm90aGVyIG9uZSBpcyBtYWRlIGFyYml0cmFyaWx5IGJ1dCBjb25zaXN0ZW50bHlcbiAgd2l0aGluIG9uZSBleGVjdXRpb24gb2YgYSBwcm9ncmFtLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIGRpZmZlcmluZyB0eXBlcyBkZXBlbmRzIG9uIHdoZXRoZXIgZWl0aGVyXG5vZiB0aGUgdHlwZXMgcHJvdmlkZSBleHBsaWNpdCBzdXBwb3J0IGZvciB0aGUgY29tcGFyaXNvbi4gIE1vc3Rcbm51bWVyaWMgdHlwZXMgY2FuIGJlIGNvbXBhcmVkIHdpdGggb25lIGFub3RoZXIuICBXaGVuIGNyb3NzLXR5cGVcbmNvbXBhcmlzb24gaXMgbm90IHN1cHBvcnRlZCwgdGhlIGNvbXBhcmlzb24gbWV0aG9kIHJldHVybnNcbiJOb3RJbXBsZW1lbnRlZCIuXG5cblRoZSBvcGVyYXRvcnMgImluIiBhbmQgIm5vdCBpbiIgdGVzdCBmb3IgbWVtYmVyc2hpcC4gICJ4IGluIHMiXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgInhcbm5vdCBpbiBzIiByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiAieCBpbiBzIi4gIEFsbCBidWlsdC1pbiBzZXF1ZW5jZXNcbmFuZCBzZXQgdHlwZXMgc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoICJpbiIgdGVzdHNcbndoZXRoZXIgYSB0aGUgZGljdGlvbmFyeSBoYXMgYSBnaXZlbiBrZXkuIEZvciBjb250YWluZXIgdHlwZXMgc3VjaCBhc1xubGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0LCBkaWN0LCBvciBjb2xsZWN0aW9ucy5kZXF1ZSwgdGhlXG5leHByZXNzaW9uICJ4IGluIHkiIGlzIGVxdWl2YWxlbnQgdG8gImFueSh4IGlzIGUgb3IgeCA9PSBlIGZvciBlIGluXG55KSIuXG5cbkZvciB0aGUgc3RyaW5nIGFuZCBieXRlcyB0eXBlcywgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogaXNcbmEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyAieS5maW5kKHgpICE9IC0xIi4gIEVtcHR5XG5zdHJpbmdzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBiZSBhIHN1YnN0cmluZyBvZiBhbnkgb3RoZXIgc3RyaW5nLFxuc28gIiIiIGluICJhYmMiIiB3aWxsIHJldHVybiAiVHJ1ZSIuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlICJfX2NvbnRhaW5zX18oKSIgbWV0aG9kLCAieFxuaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAieS5fX2NvbnRhaW5zX18oeCkiIGlzIHRydWUuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkbyBub3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIgYnV0IGRvXG5kZWZpbmUgIl9faXRlcl9fKCkiLCAieCBpbiB5IiBpcyB0cnVlIGlmIHNvbWUgdmFsdWUgInoiIHdpdGggInggPT0geiJcbmlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyICJ5Ii4gIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWRcbmR1cmluZyB0aGUgaXRlcmF0aW9uLCBpdCBpcyBhcyBpZiAiaW4iIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbi5cblxuTGFzdGx5LCB0aGUgb2xkLXN0eWxlIGl0ZXJhdGlvbiBwcm90b2NvbCBpcyB0cmllZDogaWYgYSBjbGFzcyBkZWZpbmVzXG4iX19nZXRpdGVtX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgYSBub24tXG5uZWdhdGl2ZSBpbnRlZ2VyIGluZGV4ICppKiBzdWNoIHRoYXQgInggPT0geVtpXSIsIGFuZCBhbGwgbG93ZXJcbmludGVnZXIgaW5kaWNlcyBkbyBub3QgcmFpc2UgIkluZGV4RXJyb3IiIGV4Y2VwdGlvbi4gIChJZiBhbnkgb3RoZXJcbmV4Y2VwdGlvbiBpcyByYWlzZWQsIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uKS5cblxuVGhlIG9wZXJhdG9yICJub3QgaW4iIGlzIGRlZmluZWQgdG8gaGF2ZSB0aGUgaW52ZXJzZSB0cnVlIHZhbHVlIG9mXG4iaW4iLlxuXG5UaGUgb3BlcmF0b3JzICJpcyIgYW5kICJpcyBub3QiIHRlc3QgZm9yIG9iamVjdCBpZGVudGl0eTogInggaXMgeSIgaXNcbnRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGFuZCAqeSogYXJlIHRoZSBzYW1lIG9iamVjdC4gICJ4IGlzIG5vdCB5IlxueWllbGRzIHRoZSBpbnZlcnNlIHRydXRoIHZhbHVlLiBbNF1cbicsCiAgJ2ludGVnZXJzJzogJ1xuSW50ZWdlciBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKlxuXG5JbnRlZ2VyIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBpbnRlZ2VyICAgICAgICA6Oj0gZGVjaW1hbGludGVnZXIgfCBvY3RpbnRlZ2VyIHwgaGV4aW50ZWdlciB8IGJpbmludGVnZXJcbiAgIGRlY2ltYWxpbnRlZ2VyIDo6PSBub256ZXJvZGlnaXQgZGlnaXQqIHwgIjAiK1xuICAgbm9uemVyb2RpZ2l0ICAgOjo9ICIxIi4uLiI5IlxuICAgZGlnaXQgICAgICAgICAgOjo9ICIwIi4uLiI5IlxuICAgb2N0aW50ZWdlciAgICAgOjo9ICIwIiAoIm8iIHwgIk8iKSBvY3RkaWdpdCtcbiAgIGhleGludGVnZXIgICAgIDo6PSAiMCIgKCJ4IiB8ICJYIikgaGV4ZGlnaXQrXG4gICBiaW5pbnRlZ2VyICAgICA6Oj0gIjAiICgiYiIgfCAiQiIpIGJpbmRpZ2l0K1xuICAgb2N0ZGlnaXQgICAgICAgOjo9ICIwIi4uLiI3IlxuICAgaGV4ZGlnaXQgICAgICAgOjo9IGRpZ2l0IHwgImEiLi4uImYiIHwgIkEiLi4uIkYiXG4gICBiaW5kaWdpdCAgICAgICA6Oj0gIjAiIHwgIjEiXG5cblRoZXJlIGlzIG5vIGxpbWl0IGZvciB0aGUgbGVuZ3RoIG9mIGludGVnZXIgbGl0ZXJhbHMgYXBhcnQgZnJvbSB3aGF0XG5jYW4gYmUgc3RvcmVkIGluIGF2YWlsYWJsZSBtZW1vcnkuXG5cbk5vdGUgdGhhdCBsZWFkaW5nIHplcm9zIGluIGEgbm9uLXplcm8gZGVjaW1hbCBudW1iZXIgYXJlIG5vdCBhbGxvd2VkLlxuVGhpcyBpcyBmb3IgZGlzYW1iaWd1YXRpb24gd2l0aCBDLXN0eWxlIG9jdGFsIGxpdGVyYWxzLCB3aGljaCBQeXRob25cbnVzZWQgYmVmb3JlIHZlcnNpb24gMy4wLlxuXG5Tb21lIGV4YW1wbGVzIG9mIGludGVnZXIgbGl0ZXJhbHM6XG5cbiAgIDcgICAgIDIxNDc0ODM2NDcgICAgICAgICAgICAgICAgICAgICAgICAwbzE3NyAgICAwYjEwMDExMDExMVxuICAgMyAgICAgNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzYgICAgIDBvMzc3ICAgIDB4MTAwMDAwMDAwXG4gICAgICAgICA3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNiAgICAgICAgICAgICAgMHhkZWFkYmVlZlxuJywKICAnbGFtYmRhJzogJ1xuTGFtYmRhc1xuKioqKioqKlxuXG4gICBsYW1iZGFfZXhwciAgICAgICAgOjo9ICJsYW1iZGEiIFtwYXJhbWV0ZXJfbGlzdF06IGV4cHJlc3Npb25cbiAgIGxhbWJkYV9leHByX25vY29uZCA6Oj0gImxhbWJkYSIgW3BhcmFtZXRlcl9saXN0XTogZXhwcmVzc2lvbl9ub2NvbmRcblxuTGFtYmRhIGV4cHJlc3Npb25zIChzb21ldGltZXMgY2FsbGVkIGxhbWJkYSBmb3JtcykgaGF2ZSB0aGUgc2FtZVxuc3ludGFjdGljIHBvc2l0aW9uIGFzIGV4cHJlc3Npb25zLiAgVGhleSBhcmUgYSBzaG9ydGhhbmQgdG8gY3JlYXRlXG5hbm9ueW1vdXMgZnVuY3Rpb25zOyB0aGUgZXhwcmVzc2lvbiAibGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbiJcbnlpZWxkcyBhIGZ1bmN0aW9uIG9iamVjdC4gIFRoZSB1bm5hbWVkIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBmdW5jdGlvblxub2JqZWN0IGRlZmluZWQgd2l0aFxuXG4gICBkZWYgPGxhbWJkYT4oYXJndW1lbnRzKTpcbiAgICAgICByZXR1cm4gZXhwcmVzc2lvblxuXG5TZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIHBhcmFtZXRlciBsaXN0cy5cbk5vdGUgdGhhdCBmdW5jdGlvbnMgY3JlYXRlZCB3aXRoIGxhbWJkYSBleHByZXNzaW9ucyBjYW5ub3QgY29udGFpblxuc3RhdGVtZW50cyBvciBhbm5vdGF0aW9ucy5cbicsCiAgJ2xpc3RzJzogJ1xuTGlzdCBkaXNwbGF5c1xuKioqKioqKioqKioqKlxuXG5BIGxpc3QgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBleHByZXNzaW9ucyBlbmNsb3NlZCBpblxuc3F1YXJlIGJyYWNrZXRzOlxuXG4gICBsaXN0X2Rpc3BsYXkgOjo9ICJbIiBbZXhwcmVzc2lvbl9saXN0IHwgY29tcHJlaGVuc2lvbl0gIl0iXG5cbkEgbGlzdCBkaXNwbGF5IHlpZWxkcyBhIG5ldyBsaXN0IG9iamVjdCwgdGhlIGNvbnRlbnRzIGJlaW5nIHNwZWNpZmllZFxuYnkgZWl0aGVyIGEgbGlzdCBvZiBleHByZXNzaW9ucyBvciBhIGNvbXByZWhlbnNpb24uICBXaGVuIGEgY29tbWEtXG5zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucyBpcyBzdXBwbGllZCwgaXRzIGVsZW1lbnRzIGFyZSBldmFsdWF0ZWRcbmZyb20gbGVmdCB0byByaWdodCBhbmQgcGxhY2VkIGludG8gdGhlIGxpc3Qgb2JqZWN0IGluIHRoYXQgb3JkZXIuXG5XaGVuIGEgY29tcHJlaGVuc2lvbiBpcyBzdXBwbGllZCwgdGhlIGxpc3QgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGVcbmVsZW1lbnRzIHJlc3VsdGluZyBmcm9tIHRoZSBjb21wcmVoZW5zaW9uLlxuJywKICAnbmFtaW5nJzogJ1xuTmFtaW5nIGFuZCBiaW5kaW5nXG4qKioqKioqKioqKioqKioqKipcblxuKk5hbWVzKiByZWZlciB0byBvYmplY3RzLiAgTmFtZXMgYXJlIGludHJvZHVjZWQgYnkgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLiBFYWNoIG9jY3VycmVuY2Ugb2YgYSBuYW1lIGluIHRoZSBwcm9ncmFtIHRleHQgcmVmZXJzIHRvXG50aGUgKmJpbmRpbmcqIG9mIHRoYXQgbmFtZSBlc3RhYmxpc2hlZCBpbiB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uIGJsb2NrXG5jb250YWluaW5nIHRoZSB1c2UuXG5cbkEgKmJsb2NrKiBpcyBhIHBpZWNlIG9mIFB5dGhvbiBwcm9ncmFtIHRleHQgdGhhdCBpcyBleGVjdXRlZCBhcyBhXG51bml0LiBUaGUgZm9sbG93aW5nIGFyZSBibG9ja3M6IGEgbW9kdWxlLCBhIGZ1bmN0aW9uIGJvZHksIGFuZCBhIGNsYXNzXG5kZWZpbml0aW9uLiBFYWNoIGNvbW1hbmQgdHlwZWQgaW50ZXJhY3RpdmVseSBpcyBhIGJsb2NrLiAgQSBzY3JpcHRcbmZpbGUgKGEgZmlsZSBnaXZlbiBhcyBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIgb3Igc3BlY2lmaWVkXG5vbiB0aGUgaW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lIHRoZSBmaXJzdCBhcmd1bWVudCkgaXMgYSBjb2RlIGJsb2NrLlxuQSBzY3JpcHQgY29tbWFuZCAoYSBjb21tYW5kIHNwZWNpZmllZCBvbiB0aGUgaW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lXG53aXRoIHRoZSBcJyoqLWMqKlwnIG9wdGlvbikgaXMgYSBjb2RlIGJsb2NrLiAgVGhlIHN0cmluZyBhcmd1bWVudCBwYXNzZWRcbnRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImV2YWwoKSIgYW5kICJleGVjKCkiIGlzIGEgY29kZSBibG9jay5cblxuQSBjb2RlIGJsb2NrIGlzIGV4ZWN1dGVkIGluIGFuICpleGVjdXRpb24gZnJhbWUqLiAgQSBmcmFtZSBjb250YWluc1xuc29tZSBhZG1pbmlzdHJhdGl2ZSBpbmZvcm1hdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKSBhbmQgZGV0ZXJtaW5lc1xud2hlcmUgYW5kIGhvdyBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBjb2RlIGJsb2NrXCdzIGV4ZWN1dGlvbiBoYXNcbmNvbXBsZXRlZC5cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuICBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhXG5jbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZVxuY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLSB0aGlzIGluY2x1ZGVzIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3JcbmV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgZnVuY3Rpb24gc2NvcGUuICBUaGlzXG5tZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgd2lsbCBmYWlsOlxuXG4gICBjbGFzcyBBOlxuICAgICAgIGEgPSA0MlxuICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSlcblxuV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0XG5lbmNsb3Npbmcgc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9ja1xuaXMgY2FsbGVkIHRoZSBibG9ja1wncyAqZW52aXJvbm1lbnQqLlxuXG5JZiBhIG5hbWUgaXMgYm91bmQgaW4gYSBibG9jaywgaXQgaXMgYSBsb2NhbCB2YXJpYWJsZSBvZiB0aGF0IGJsb2NrLFxudW5sZXNzIGRlY2xhcmVkIGFzICJub25sb2NhbCIuICBJZiBhIG5hbWUgaXMgYm91bmQgYXQgdGhlIG1vZHVsZVxubGV2ZWwsIGl0IGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiAgKFRoZSB2YXJpYWJsZXMgb2YgdGhlIG1vZHVsZSBjb2RlXG5ibG9jayBhcmUgbG9jYWwgYW5kIGdsb2JhbC4pICBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrXG5idXQgbm90IGRlZmluZWQgdGhlcmUsIGl0IGlzIGEgKmZyZWUgdmFyaWFibGUqLlxuXG5XaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhICJOYW1lRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG5JZiB0aGUgbmFtZSByZWZlcnMgdG8gYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGhhcyBub3QgYmVlbiBib3VuZCwgYVxuIlVuYm91bmRMb2NhbEVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLiAgIlVuYm91bmRMb2NhbEVycm9yIiBpcyBhXG5zdWJjbGFzcyBvZiAiTmFtZUVycm9yIi5cblxuVGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RzIGJpbmQgbmFtZXM6IGZvcm1hbCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9ucyxcbiJpbXBvcnQiIHN0YXRlbWVudHMsIGNsYXNzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyAodGhlc2UgYmluZCB0aGVcbmNsYXNzIG9yIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGRlZmluaW5nIGJsb2NrKSwgYW5kIHRhcmdldHMgdGhhdCBhcmVcbmlkZW50aWZpZXJzIGlmIG9jY3VycmluZyBpbiBhbiBhc3NpZ25tZW50LCAiZm9yIiBsb29wIGhlYWRlciwgb3IgYWZ0ZXJcbiJhcyIgaW4gYSAid2l0aCIgc3RhdGVtZW50IG9yICJleGNlcHQiIGNsYXVzZS4gVGhlICJpbXBvcnQiIHN0YXRlbWVudFxub2YgdGhlIGZvcm0gImZyb20gLi4uIGltcG9ydCAqIiBiaW5kcyBhbGwgbmFtZXMgZGVmaW5lZCBpbiB0aGVcbmltcG9ydGVkIG1vZHVsZSwgZXhjZXB0IHRob3NlIGJlZ2lubmluZyB3aXRoIGFuIHVuZGVyc2NvcmUuICBUaGlzIGZvcm1cbm1heSBvbmx5IGJlIHVzZWQgYXQgdGhlIG1vZHVsZSBsZXZlbC5cblxuQSB0YXJnZXQgb2NjdXJyaW5nIGluIGEgImRlbCIgc3RhdGVtZW50IGlzIGFsc28gY29uc2lkZXJlZCBib3VuZCBmb3JcbnRoaXMgcHVycG9zZSAodGhvdWdoIHRoZSBhY3R1YWwgc2VtYW50aWNzIGFyZSB0byB1bmJpbmQgdGhlIG5hbWUpLlxuXG5FYWNoIGFzc2lnbm1lbnQgb3IgaW1wb3J0IHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2sgZGVmaW5lZCBieSBhXG5jbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGF0IHRoZSBtb2R1bGUgbGV2ZWwgKHRoZSB0b3AtbGV2ZWxcbmNvZGUgYmxvY2spLlxuXG5JZiBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24gb2NjdXJzIGFueXdoZXJlIHdpdGhpbiBhIGNvZGUgYmxvY2ssIGFsbFxudXNlcyBvZiB0aGUgbmFtZSB3aXRoaW4gdGhlIGJsb2NrIGFyZSB0cmVhdGVkIGFzIHJlZmVyZW5jZXMgdG8gdGhlXG5jdXJyZW50IGJsb2NrLiAgVGhpcyBjYW4gbGVhZCB0byBlcnJvcnMgd2hlbiBhIG5hbWUgaXMgdXNlZCB3aXRoaW4gYVxuYmxvY2sgYmVmb3JlIGl0IGlzIGJvdW5kLiAgVGhpcyBydWxlIGlzIHN1YnRsZS4gIFB5dGhvbiBsYWNrc1xuZGVjbGFyYXRpb25zIGFuZCBhbGxvd3MgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbnMgdG8gb2NjdXIgYW55d2hlcmVcbndpdGhpbiBhIGNvZGUgYmxvY2suICBUaGUgbG9jYWwgdmFyaWFibGVzIG9mIGEgY29kZSBibG9jayBjYW4gYmVcbmRldGVybWluZWQgYnkgc2Nhbm5pbmcgdGhlIGVudGlyZSB0ZXh0IG9mIHRoZSBibG9jayBmb3IgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5JZiB0aGUgImdsb2JhbCIgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jaywgYWxsIHVzZXMgb2YgdGhlIG5hbWVcbnNwZWNpZmllZCBpbiB0aGUgc3RhdGVtZW50IHJlZmVyIHRvIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBpbiB0aGVcbnRvcC1sZXZlbCBuYW1lc3BhY2UuICBOYW1lcyBhcmUgcmVzb2x2ZWQgaW4gdGhlIHRvcC1sZXZlbCBuYW1lc3BhY2UgYnlcbnNlYXJjaGluZyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgaS5lLiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGVcbmNvbnRhaW5pbmcgdGhlIGNvZGUgYmxvY2ssIGFuZCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlLCB0aGUgbmFtZXNwYWNlXG5vZiB0aGUgbW9kdWxlICJidWlsdGlucyIuICBUaGUgZ2xvYmFsIG5hbWVzcGFjZSBpcyBzZWFyY2hlZCBmaXJzdC4gIElmXG50aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBidWlsdGlucyBuYW1lc3BhY2UgaXMgc2VhcmNoZWQuICBUaGVcbmdsb2JhbCBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mIHRoZSBuYW1lLlxuXG5UaGUgYnVpbHRpbnMgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIGEgY29kZSBibG9ja1xuaXMgYWN0dWFsbHkgZm91bmQgYnkgbG9va2luZyB1cCB0aGUgbmFtZSAiX19idWlsdGluc19fIiBpbiBpdHMgZ2xvYmFsXG5uYW1lc3BhY2U7IHRoaXMgc2hvdWxkIGJlIGEgZGljdGlvbmFyeSBvciBhIG1vZHVsZSAoaW4gdGhlIGxhdHRlciBjYXNlXG50aGUgbW9kdWxlXCdzIGRpY3Rpb25hcnkgaXMgdXNlZCkuICBCeSBkZWZhdWx0LCB3aGVuIGluIHRoZSAiX19tYWluX18iXG5tb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIHRoZSBidWlsdC1pbiBtb2R1bGUgImJ1aWx0aW5zIjsgd2hlbiBpbiBhbnlcbm90aGVyIG1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgYW4gYWxpYXMgZm9yIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZVxuImJ1aWx0aW5zIiBtb2R1bGUgaXRzZWxmLiAgIl9fYnVpbHRpbnNfXyIgY2FuIGJlIHNldCB0byBhIHVzZXItY3JlYXRlZFxuZGljdGlvbmFyeSB0byBjcmVhdGUgYSB3ZWFrIGZvcm0gb2YgcmVzdHJpY3RlZCBleGVjdXRpb24uXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVXNlcnMgc2hvdWxkIG5vdCB0b3VjaFxuIl9fYnVpbHRpbnNfXyI7IGl0IGlzIHN0cmljdGx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIFVzZXJzXG53YW50aW5nIHRvIG92ZXJyaWRlIHZhbHVlcyBpbiB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIHNob3VsZCAiaW1wb3J0IlxudGhlICJidWlsdGlucyIgbW9kdWxlIGFuZCBtb2RpZnkgaXRzIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS5cblxuVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGFcbm1vZHVsZSBpcyBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZFxuIl9fbWFpbl9fIi5cblxuVGhlICJnbG9iYWwiIHN0YXRlbWVudCBoYXMgdGhlIHNhbWUgc2NvcGUgYXMgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uXG5pbiB0aGUgc2FtZSBibG9jay4gIElmIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBmb3IgYSBmcmVlIHZhcmlhYmxlXG5jb250YWlucyBhIGdsb2JhbCBzdGF0ZW1lbnQsIHRoZSBmcmVlIHZhcmlhYmxlIGlzIHRyZWF0ZWQgYXMgYSBnbG9iYWwuXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudCB0aGF0IG1heSB1c2UgYW5kIGRlZmluZVxubmFtZXMuIFRoZXNlIHJlZmVyZW5jZXMgZm9sbG93IHRoZSBub3JtYWwgcnVsZXMgZm9yIG5hbWUgcmVzb2x1dGlvbi5cblRoZSBuYW1lc3BhY2Ugb2YgdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnlcbm9mIHRoZSBjbGFzcy4gIE5hbWVzIGRlZmluZWQgYXQgdGhlIGNsYXNzIHNjb3BlIGFyZSBub3QgdmlzaWJsZSBpblxubWV0aG9kcy5cblxuXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWRcbmluIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuXG5cbklmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG9cbmRlbGV0ZSB0aGUgbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLlxuXG5JZiB0aGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSAiaW1wb3J0ICoiIC0tLSBpcyB1c2VkIGluIGFcbmZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYSBuZXN0ZWQgYmxvY2sgd2l0aCBmcmVlXG52YXJpYWJsZXMsIHRoZSBjb21waWxlciB3aWxsIHJhaXNlIGEgIlN5bnRheEVycm9yIi5cblxuVGhlICJldmFsKCkiIGFuZCAiZXhlYygpIiBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSAiZXhlYygpIiBhbmQgImV2YWwoKSIgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cbicsCi0gJ25vbmxvY2FsJzogJ1xuVGhlICJub25sb2NhbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgbm9ubG9jYWxfc3RtdCA6Oj0gIm5vbmxvY2FsIiBpZGVudGlmaWVyICgiLCIgaWRlbnRpZmllcikqXG5cblRoZSAibm9ubG9jYWwiIHN0YXRlbWVudCBjYXVzZXMgdGhlIGxpc3RlZCBpZGVudGlmaWVycyB0byByZWZlciB0b1xucHJldmlvdXNseSBib3VuZCB2YXJpYWJsZXMgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlLiAgVGhpcyBpc1xuaW1wb3J0YW50IGJlY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGJpbmRpbmcgaXMgdG8gc2VhcmNoIHRoZVxubG9jYWwgbmFtZXNwYWNlIGZpcnN0LiAgVGhlIHN0YXRlbWVudCBhbGxvd3MgZW5jYXBzdWxhdGVkIGNvZGUgdG9cbnJlYmluZCB2YXJpYWJsZXMgb3V0c2lkZSBvZiB0aGUgbG9jYWwgc2NvcGUgYmVzaWRlcyB0aGUgZ2xvYmFsXG4obW9kdWxlKSBzY29wZS5cblxuTmFtZXMgbGlzdGVkIGluIGEgIm5vbmxvY2FsIiBzdGF0ZW1lbnQsIHVubGlrZSB0byB0aG9zZSBsaXN0ZWQgaW4gYVxuImdsb2JhbCIgc3RhdGVtZW50LCBtdXN0IHJlZmVyIHRvIHByZS1leGlzdGluZyBiaW5kaW5ncyBpbiBhblxuZW5jbG9zaW5nIHNjb3BlICh0aGUgc2NvcGUgaW4gd2hpY2ggYSBuZXcgYmluZGluZyBzaG91bGQgYmUgY3JlYXRlZFxuY2Fubm90IGJlIGRldGVybWluZWQgdW5hbWJpZ3VvdXNseSkuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJub25sb2NhbCIgc3RhdGVtZW50IG11c3Qgbm90IGNvbGxpZGUgd2l0aCBwcmUtXG5leGlzdGluZyBiaW5kaW5ncyBpbiB0aGUgbG9jYWwgc2NvcGUuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTA0KiogLSBBY2Nlc3MgdG8gTmFtZXMgaW4gT3V0ZXIgU2NvcGVzXG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSAibm9ubG9jYWwiIHN0YXRlbWVudC5cbicsCisgJ25vbmxvY2FsJzogJ1xuVGhlICJub25sb2NhbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgbm9ubG9jYWxfc3RtdCA6Oj0gIm5vbmxvY2FsIiBpZGVudGlmaWVyICgiLCIgaWRlbnRpZmllcikqXG5cblRoZSAibm9ubG9jYWwiIHN0YXRlbWVudCBjYXVzZXMgdGhlIGxpc3RlZCBpZGVudGlmaWVycyB0byByZWZlciB0b1xucHJldmlvdXNseSBib3VuZCB2YXJpYWJsZXMgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlLiAgVGhpcyBpc1xuaW1wb3J0YW50IGJlY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGJpbmRpbmcgaXMgdG8gc2VhcmNoIHRoZVxubG9jYWwgbmFtZXNwYWNlIGZpcnN0LiAgVGhlIHN0YXRlbWVudCBhbGxvd3MgZW5jYXBzdWxhdGVkIGNvZGUgdG9cbnJlYmluZCB2YXJpYWJsZXMgb3V0c2lkZSBvZiB0aGUgbG9jYWwgc2NvcGUgYmVzaWRlcyB0aGUgZ2xvYmFsXG4obW9kdWxlKSBzY29wZS5cblxuTmFtZXMgbGlzdGVkIGluIGEgIm5vbmxvY2FsIiBzdGF0ZW1lbnQsIHVubGlrZSB0byB0aG9zZSBsaXN0ZWQgaW4gYVxuImdsb2JhbCIgc3RhdGVtZW50LCBtdXN0IHJlZmVyIHRvIHByZS1leGlzdGluZyBiaW5kaW5ncyBpbiBhblxuZW5jbG9zaW5nIHNjb3BlICh0aGUgc2NvcGUgaW4gd2hpY2ggYSBuZXcgYmluZGluZyBzaG91bGQgYmUgY3JlYXRlZFxuY2Fubm90IGJlIGRldGVybWluZWQgdW5hbWJpZ3VvdXNseSkuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJub25sb2NhbCIgc3RhdGVtZW50IG11c3Qgbm90IGNvbGxpZGUgd2l0aCBwcmUtXG5leGlzdGluZyBiaW5kaW5ncyBpbiB0aGUgbG9jYWwgc2NvcGUuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTA0KiogLSBBY2Nlc3MgdG8gTmFtZXMgaW4gT3V0ZXIgU2NvcGVzXG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlICJub25sb2NhbCIgc3RhdGVtZW50LlxuJywKICAnbnVtYmVycyc6ICdcbk51bWVyaWMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG51bWVyaWMgbGl0ZXJhbHM6IGludGVnZXJzLCBmbG9hdGluZyBwb2ludFxubnVtYmVycywgYW5kIGltYWdpbmFyeSBudW1iZXJzLiAgVGhlcmUgYXJlIG5vIGNvbXBsZXggbGl0ZXJhbHNcbihjb21wbGV4IG51bWJlcnMgY2FuIGJlIGZvcm1lZCBieSBhZGRpbmcgYSByZWFsIG51bWJlciBhbmQgYW5cbmltYWdpbmFyeSBudW1iZXIpLlxuXG5Ob3RlIHRoYXQgbnVtZXJpYyBsaXRlcmFscyBkbyBub3QgaW5jbHVkZSBhIHNpZ247IGEgcGhyYXNlIGxpa2UgIi0xIlxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgXCciLSJcJyBhbmQgdGhlXG5saXRlcmFsICIxIi5cbicsCi0gJ251bWVyaWMtdHlwZXMnOiAnXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kXG4gICAgIGZvciB0aGUgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXNcbiAgICAgdG8gb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCAieCArPSB5Iiwgd2hlcmVcbiAgICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX2lhZGRfXygpIiBtZXRob2QsXG4gICAieC5fX2lhZGRfXyh5KSIgaXMgY2FsbGVkLiAgSWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdFxuICAgZG9lcyBub3QgZGVmaW5lIGEgIl9faWFkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgYW5kXG4gICAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgInggKyB5Ii5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zICgiLSIsICIrIixcbiAgICJhYnMoKSIgYW5kICJ+IikuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImNvbXBsZXgoKSIsICJpbnQoKSIsXG4gICAiZmxvYXQoKSIgYW5kICJyb3VuZCgpIi4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGVcbiAgIHR5cGUuXG5cbm9iamVjdC5fX2luZGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IuaW5kZXgoKSIuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZVxuICAgYnVpbHQtaW4gImJpbigpIiwgImhleCgpIiBhbmQgIm9jdCgpIiBmdW5jdGlvbnMpLiBNdXN0IHJldHVybiBhblxuICAgaW50ZWdlci5cbicsCisgJ251bWVyaWMtdHlwZXMnOiAnXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXMgdG9cbiAgICAgb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIGlmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHdpdGggYW5cbiAgICJfX2lhZGRfXygpIiBtZXRob2QsICJ4ICs9IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPSB4Ll9faWFkZF9fKHkpIlxuICAgLiBPdGhlcndpc2UsICJ4Ll9fYWRkX18oeSkiIGFuZCAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzXG4gICB3aXRoIHRoZSBldmFsdWF0aW9uIG9mICJ4ICsgeSIuIEluIGNlcnRhaW4gc2l0dWF0aW9ucywgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBlcnJvcnMgKHNlZSAqV2h5IGRvZXNcbiAgIGFfdHVwbGVbaV0gKz0gW1wnaXRlbVwnXSByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgYWRkaXRpb25cbiAgIHdvcmtzPyopLCBidXQgdGhpcyBiZWhhdmlvciBpcyBpbiBmYWN0IHBhcnQgb2YgdGhlIGRhdGEgbW9kZWwuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoIi0iLCAiKyIsXG4gICAiYWJzKCkiIGFuZCAifiIpLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5vYmplY3QuX19yb3VuZF9fKHNlbGZbLCBuXSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJjb21wbGV4KCkiLCAiaW50KCkiLFxuICAgImZsb2F0KCkiIGFuZCAicm91bmQoKSIuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlXG4gICB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmluZGV4KCkiLCBhbmQgd2hlbmV2ZXIgUHl0aG9uIG5lZWRzXG4gICB0byBsb3NzbGVzc2x5IGNvbnZlcnQgdGhlIG51bWVyaWMgb2JqZWN0IHRvIGFuIGludGVnZXIgb2JqZWN0IChzdWNoXG4gICBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGUgYnVpbHQtaW4gImJpbigpIiwgImhleCgpIiBhbmQgIm9jdCgpIlxuICAgZnVuY3Rpb25zKS4gUHJlc2VuY2Ugb2YgdGhpcyBtZXRob2QgaW5kaWNhdGVzIHRoYXQgdGhlIG51bWVyaWNcbiAgIG9iamVjdCBpcyBhbiBpbnRlZ2VyIHR5cGUuICBNdXN0IHJldHVybiBhbiBpbnRlZ2VyLlxuXG4gICBOb3RlOiBXaGVuICJfX2luZGV4X18oKSIgaXMgZGVmaW5lZCwgIl9faW50X18oKSIgc2hvdWxkIGFsc28gYmVcbiAgICAgZGVmaW5lZCwgYW5kIGJvdGggc2h1bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlLCBpbiBvcmRlciB0byBoYXZlIGFcbiAgICAgY29oZXJlbnQgaW50ZWdlciB0eXBlIGNsYXNzLlxuJywKICAnb2JqZWN0cyc6ICdcbk9iamVjdHMsIHZhbHVlcyBhbmQgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuKk9iamVjdHMqIGFyZSBQeXRob25cJ3MgYWJzdHJhY3Rpb24gZm9yIGRhdGEuICBBbGwgZGF0YSBpbiBhIFB5dGhvblxucHJvZ3JhbSBpcyByZXByZXNlbnRlZCBieSBvYmplY3RzIG9yIGJ5IHJlbGF0aW9ucyBiZXR3ZWVuIG9iamVjdHMuIChJblxuYSBzZW5zZSwgYW5kIGluIGNvbmZvcm1hbmNlIHRvIFZvbiBOZXVtYW5uXCdzIG1vZGVsIG9mIGEgInN0b3JlZFxucHJvZ3JhbSBjb21wdXRlciwiIGNvZGUgaXMgYWxzbyByZXByZXNlbnRlZCBieSBvYmplY3RzLilcblxuRXZlcnkgb2JqZWN0IGhhcyBhbiBpZGVudGl0eSwgYSB0eXBlIGFuZCBhIHZhbHVlLiAgQW4gb2JqZWN0XCdzXG4qaWRlbnRpdHkqIG5ldmVyIGNoYW5nZXMgb25jZSBpdCBoYXMgYmVlbiBjcmVhdGVkOyB5b3UgbWF5IHRoaW5rIG9mIGl0XG5hcyB0aGUgb2JqZWN0XCdzIGFkZHJlc3MgaW4gbWVtb3J5LiAgVGhlIFwnImlzIlwnIG9wZXJhdG9yIGNvbXBhcmVzIHRoZVxuaWRlbnRpdHkgb2YgdHdvIG9iamVjdHM7IHRoZSAiaWQoKSIgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnRlZ2VyXG5yZXByZXNlbnRpbmcgaXRzIGlkZW50aXR5LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEZvciBDUHl0aG9uLCAiaWQoeCkiIGlzIHRoZSBtZW1vcnlcbmFkZHJlc3Mgd2hlcmUgIngiIGlzIHN0b3JlZC5cblxuQW4gb2JqZWN0XCdzIHR5cGUgZGV0ZXJtaW5lcyB0aGUgb3BlcmF0aW9ucyB0aGF0IHRoZSBvYmplY3Qgc3VwcG9ydHNcbihlLmcuLCAiZG9lcyBpdCBoYXZlIGEgbGVuZ3RoPyIpIGFuZCBhbHNvIGRlZmluZXMgdGhlIHBvc3NpYmxlIHZhbHVlc1xuZm9yIG9iamVjdHMgb2YgdGhhdCB0eXBlLiAgVGhlICJ0eXBlKCkiIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0XCdzXG50eXBlICh3aGljaCBpcyBhbiBvYmplY3QgaXRzZWxmKS4gIExpa2UgaXRzIGlkZW50aXR5LCBhbiBvYmplY3RcJ3Ncbip0eXBlKiBpcyBhbHNvIHVuY2hhbmdlYWJsZS4gWzFdXG5cblRoZSAqdmFsdWUqIG9mIHNvbWUgb2JqZWN0cyBjYW4gY2hhbmdlLiAgT2JqZWN0cyB3aG9zZSB2YWx1ZSBjYW5cbmNoYW5nZSBhcmUgc2FpZCB0byBiZSAqbXV0YWJsZSo7IG9iamVjdHMgd2hvc2UgdmFsdWUgaXMgdW5jaGFuZ2VhYmxlXG5vbmNlIHRoZXkgYXJlIGNyZWF0ZWQgYXJlIGNhbGxlZCAqaW1tdXRhYmxlKi4gKFRoZSB2YWx1ZSBvZiBhblxuaW1tdXRhYmxlIGNvbnRhaW5lciBvYmplY3QgdGhhdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byBhIG11dGFibGVcbm9iamVjdCBjYW4gY2hhbmdlIHdoZW4gdGhlIGxhdHRlclwncyB2YWx1ZSBpcyBjaGFuZ2VkOyBob3dldmVyIHRoZVxuY29udGFpbmVyIGlzIHN0aWxsIGNvbnNpZGVyZWQgaW1tdXRhYmxlLCBiZWNhdXNlIHRoZSBjb2xsZWN0aW9uIG9mXG5vYmplY3RzIGl0IGNvbnRhaW5zIGNhbm5vdCBiZSBjaGFuZ2VkLiAgU28sIGltbXV0YWJpbGl0eSBpcyBub3RcbnN0cmljdGx5IHRoZSBzYW1lIGFzIGhhdmluZyBhbiB1bmNoYW5nZWFibGUgdmFsdWUsIGl0IGlzIG1vcmUgc3VidGxlLilcbkFuIG9iamVjdFwncyBtdXRhYmlsaXR5IGlzIGRldGVybWluZWQgYnkgaXRzIHR5cGU7IGZvciBpbnN0YW5jZSxcbm51bWJlcnMsIHN0cmluZ3MgYW5kIHR1cGxlcyBhcmUgaW1tdXRhYmxlLCB3aGlsZSBkaWN0aW9uYXJpZXMgYW5kXG5saXN0cyBhcmUgbXV0YWJsZS5cblxuT2JqZWN0cyBhcmUgbmV2ZXIgZXhwbGljaXRseSBkZXN0cm95ZWQ7IGhvd2V2ZXIsIHdoZW4gdGhleSBiZWNvbWVcbnVucmVhY2hhYmxlIHRoZXkgbWF5IGJlIGdhcmJhZ2UtY29sbGVjdGVkLiAgQW4gaW1wbGVtZW50YXRpb24gaXNcbmFsbG93ZWQgdG8gcG9zdHBvbmUgZ2FyYmFnZSBjb2xsZWN0aW9uIG9yIG9taXQgaXQgYWx0b2dldGhlciAtLS0gaXQgaXNcbmEgbWF0dGVyIG9mIGltcGxlbWVudGF0aW9uIHF1YWxpdHkgaG93IGdhcmJhZ2UgY29sbGVjdGlvbiBpc1xuaW1wbGVtZW50ZWQsIGFzIGxvbmcgYXMgbm8gb2JqZWN0cyBhcmUgY29sbGVjdGVkIHRoYXQgYXJlIHN0aWxsXG5yZWFjaGFibGUuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQ1B5dGhvbiBjdXJyZW50bHkgdXNlcyBhIHJlZmVyZW5jZS1cbmNvdW50aW5nIHNjaGVtZSB3aXRoIChvcHRpb25hbCkgZGVsYXllZCBkZXRlY3Rpb24gb2YgY3ljbGljYWxseSBsaW5rZWRcbmdhcmJhZ2UsIHdoaWNoIGNvbGxlY3RzIG1vc3Qgb2JqZWN0cyBhcyBzb29uIGFzIHRoZXkgYmVjb21lXG51bnJlYWNoYWJsZSwgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGNvbGxlY3QgZ2FyYmFnZSBjb250YWluaW5nXG5jaXJjdWxhciByZWZlcmVuY2VzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSAiZ2MiIG1vZHVsZSBmb3JcbmluZm9ybWF0aW9uIG9uIGNvbnRyb2xsaW5nIHRoZSBjb2xsZWN0aW9uIG9mIGN5Y2xpYyBnYXJiYWdlLiBPdGhlclxuaW1wbGVtZW50YXRpb25zIGFjdCBkaWZmZXJlbnRseSBhbmQgQ1B5dGhvbiBtYXkgY2hhbmdlLiBEbyBub3QgZGVwZW5kXG5vbiBpbW1lZGlhdGUgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2hlbiB0aGV5IGJlY29tZSB1bnJlYWNoYWJsZSAoZXg6XG5hbHdheXMgY2xvc2UgZmlsZXMpLlxuXG5Ob3RlIHRoYXQgdGhlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb25cJ3MgdHJhY2luZyBvciBkZWJ1Z2dpbmdcbmZhY2lsaXRpZXMgbWF5IGtlZXAgb2JqZWN0cyBhbGl2ZSB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGNvbGxlY3RhYmxlLlxuQWxzbyBub3RlIHRoYXQgY2F0Y2hpbmcgYW4gZXhjZXB0aW9uIHdpdGggYSBcJyJ0cnkiLi4uImV4Y2VwdCJcJ1xuc3RhdGVtZW50IG1heSBrZWVwIG9iamVjdHMgYWxpdmUuXG5cblNvbWUgb2JqZWN0cyBjb250YWluIHJlZmVyZW5jZXMgdG8gImV4dGVybmFsIiByZXNvdXJjZXMgc3VjaCBhcyBvcGVuXG5maWxlcyBvciB3aW5kb3dzLiAgSXQgaXMgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIHJlc291cmNlcyBhcmUgZnJlZWRcbndoZW4gdGhlIG9iamVjdCBpcyBnYXJiYWdlLWNvbGxlY3RlZCwgYnV0IHNpbmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBpc1xubm90IGd1YXJhbnRlZWQgdG8gaGFwcGVuLCBzdWNoIG9iamVjdHMgYWxzbyBwcm92aWRlIGFuIGV4cGxpY2l0IHdheSB0b1xucmVsZWFzZSB0aGUgZXh0ZXJuYWwgcmVzb3VyY2UsIHVzdWFsbHkgYSAiY2xvc2UoKSIgbWV0aG9kLiBQcm9ncmFtc1xuYXJlIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGV4cGxpY2l0bHkgY2xvc2Ugc3VjaCBvYmplY3RzLiAgVGhlXG5cJyJ0cnkiLi4uImZpbmFsbHkiXCcgc3RhdGVtZW50IGFuZCB0aGUgXCcid2l0aCJcJyBzdGF0ZW1lbnQgcHJvdmlkZVxuY29udmVuaWVudCB3YXlzIHRvIGRvIHRoaXMuXG5cblNvbWUgb2JqZWN0cyBjb250YWluIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0czsgdGhlc2UgYXJlIGNhbGxlZFxuKmNvbnRhaW5lcnMqLiBFeGFtcGxlcyBvZiBjb250YWluZXJzIGFyZSB0dXBsZXMsIGxpc3RzIGFuZFxuZGljdGlvbmFyaWVzLiAgVGhlIHJlZmVyZW5jZXMgYXJlIHBhcnQgb2YgYSBjb250YWluZXJcJ3MgdmFsdWUuICBJblxubW9zdCBjYXNlcywgd2hlbiB3ZSB0YWxrIGFib3V0IHRoZSB2YWx1ZSBvZiBhIGNvbnRhaW5lciwgd2UgaW1wbHkgdGhlXG52YWx1ZXMsIG5vdCB0aGUgaWRlbnRpdGllcyBvZiB0aGUgY29udGFpbmVkIG9iamVjdHM7IGhvd2V2ZXIsIHdoZW4gd2VcbnRhbGsgYWJvdXQgdGhlIG11dGFiaWxpdHkgb2YgYSBjb250YWluZXIsIG9ubHkgdGhlIGlkZW50aXRpZXMgb2YgdGhlXG5pbW1lZGlhdGVseSBjb250YWluZWQgb2JqZWN0cyBhcmUgaW1wbGllZC4gIFNvLCBpZiBhbiBpbW11dGFibGVcbmNvbnRhaW5lciAobGlrZSBhIHR1cGxlKSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBhIG11dGFibGUgb2JqZWN0LCBpdHNcbnZhbHVlIGNoYW5nZXMgaWYgdGhhdCBtdXRhYmxlIG9iamVjdCBpcyBjaGFuZ2VkLlxuXG5UeXBlcyBhZmZlY3QgYWxtb3N0IGFsbCBhc3BlY3RzIG9mIG9iamVjdCBiZWhhdmlvci4gIEV2ZW4gdGhlXG5pbXBvcnRhbmNlIG9mIG9iamVjdCBpZGVudGl0eSBpcyBhZmZlY3RlZCBpbiBzb21lIHNlbnNlOiBmb3IgaW1tdXRhYmxlXG50eXBlcywgb3BlcmF0aW9ucyB0aGF0IGNvbXB1dGUgbmV3IHZhbHVlcyBtYXkgYWN0dWFsbHkgcmV0dXJuIGFcbnJlZmVyZW5jZSB0byBhbnkgZXhpc3Rpbmcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUsIHdoaWxlXG5mb3IgbXV0YWJsZSBvYmplY3RzIHRoaXMgaXMgbm90IGFsbG93ZWQuICBFLmcuLCBhZnRlciAiYSA9IDE7IGIgPSAxIixcbiJhIiBhbmQgImIiIG1heSBvciBtYXkgbm90IHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCB3aXRoIHRoZSB2YWx1ZVxub25lLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLCBidXQgYWZ0ZXIgImMgPSBbXTsgZCA9IFtdIiwgImMiXG5hbmQgImQiIGFyZSBndWFyYW50ZWVkIHRvIHJlZmVyIHRvIHR3byBkaWZmZXJlbnQsIHVuaXF1ZSwgbmV3bHlcbmNyZWF0ZWQgZW1wdHkgbGlzdHMuIChOb3RlIHRoYXQgImMgPSBkID0gW10iIGFzc2lnbnMgdGhlIHNhbWUgb2JqZWN0XG50byBib3RoICJjIiBhbmQgImQiLilcbicsCi0gJ29wZXJhdG9yLXN1bW1hcnknOiAnXG5PcGVyYXRvciBwcmVjZWRlbmNlXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMgaW4gUHl0aG9uLFxuZnJvbSBsb3dlc3QgcHJlY2VkZW5jZSAobGVhc3QgYmluZGluZykgdG8gaGlnaGVzdCBwcmVjZWRlbmNlIChtb3N0XG5iaW5kaW5nKS4gIE9wZXJhdG9ycyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmVjZWRlbmNlLiAgVW5sZXNzXG50aGUgc3ludGF4IGlzIGV4cGxpY2l0bHkgZ2l2ZW4sIG9wZXJhdG9ycyBhcmUgYmluYXJ5LiAgT3BlcmF0b3JzIGluXG50aGUgc2FtZSBib3ggZ3JvdXAgbGVmdCB0byByaWdodCAoZXhjZXB0IGZvciBjb21wYXJpc29ucywgaW5jbHVkaW5nXG50ZXN0cywgd2hpY2ggYWxsIGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZSBhbmQgY2hhaW4gZnJvbSBsZWZ0IHRvIHJpZ2h0XG4tLS0gc2VlIHNlY3Rpb24gKkNvbXBhcmlzb25zKiAtLS0gYW5kIGV4cG9uZW50aWF0aW9uLCB3aGljaCBncm91cHNcbmZyb20gcmlnaHQgdG8gbGVmdCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgImxhbWJkYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMYW1iZGEgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImlmIiAtLSAiZWxzZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb25kaXRpb25hbCBleHByZXNzaW9uICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIm9yIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIm5vdCIgIngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE5PVCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImluIiwgIm5vdCBpbiIsICJpcyIsICJpcyBub3QiLCAiPCIsICI8PSIsICI+IiwgfCBDb21wYXJpc29ucywgaW5jbHVkaW5nIG1lbWJlcnNoaXAgICAgIHxcbnwgIj49IiwgIiE9IiwgIj09IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0cyBhbmQgaWRlbnRpdHkgdGVzdHMgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIl4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIFhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIiYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIjw8IiwgIj4+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTaGlmdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIisiLCAiLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIioiLCAiLyIsICIvLyIsICIlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIHJlbWFpbmRlciAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIit4IiwgIi14IiwgIn54IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQb3NpdGl2ZSwgbmVnYXRpdmUsIGJpdHdpc2UgTk9UICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIioqIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeHBvbmVudGlhdGlvbiBbNl0gICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInhbaW5kZXhdIiwgInhbaW5kZXg6aW5kZXhdIiwgICAgICAgICAgICAgICAgICAgfCBTdWJzY3JpcHRpb24sIHNsaWNpbmcsIGNhbGwsICAgICAgICAgIHxcbnwgIngoYXJndW1lbnRzLi4uKSIsICJ4LmF0dHJpYnV0ZSIgICAgICAgICAgICAgICAgfCBhdHRyaWJ1dGUgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIihleHByZXNzaW9ucy4uLikiLCAiW2V4cHJlc3Npb25zLi4uXSIsICJ7a2V5OiAgfCBCaW5kaW5nIG9yIHR1cGxlIGRpc3BsYXksIGxpc3QgICAgICAgIHxcbnwgdmFsdWUuLi59IiwgIntleHByZXNzaW9ucy4uLn0iICAgICAgICAgICAgICAgICAgfCBkaXNwbGF5LCBkaWN0aW9uYXJ5IGRpc3BsYXksIHNldCAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGlsZSAiYWJzKHgleSkgPCBhYnMoeSkiIGlzIHRydWUgbWF0aGVtYXRpY2FsbHksIGZvciBmbG9hdHNcbiAgICBpdCBtYXkgbm90IGJlIHRydWUgbnVtZXJpY2FsbHkgZHVlIHRvIHJvdW5kb2ZmLiAgRm9yIGV4YW1wbGUsIGFuZFxuICAgIGFzc3VtaW5nIGEgcGxhdGZvcm0gb24gd2hpY2ggYSBQeXRob24gZmxvYXQgaXMgYW4gSUVFRSA3NTQgZG91YmxlLVxuICAgIHByZWNpc2lvbiBudW1iZXIsIGluIG9yZGVyIHRoYXQgIi0xZS0xMDAgJSAxZTEwMCIgaGF2ZSB0aGUgc2FtZVxuICAgIHNpZ24gYXMgIjFlMTAwIiwgdGhlIGNvbXB1dGVkIHJlc3VsdCBpcyAiLTFlLTEwMCArIDFlMTAwIiwgd2hpY2hcbiAgICBpcyBudW1lcmljYWxseSBleGFjdGx5IGVxdWFsIHRvICIxZTEwMCIuICBUaGUgZnVuY3Rpb25cbiAgICAibWF0aC5mbW9kKCkiIHJldHVybnMgYSByZXN1bHQgd2hvc2Ugc2lnbiBtYXRjaGVzIHRoZSBzaWduIG9mIHRoZVxuICAgIGZpcnN0IGFyZ3VtZW50IGluc3RlYWQsIGFuZCBzbyByZXR1cm5zICItMWUtMTAwIiBpbiB0aGlzIGNhc2UuXG4gICAgV2hpY2ggYXBwcm9hY2ggaXMgbW9yZSBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBhcHBsaWNhdGlvbi5cblxuWzJdIElmIHggaXMgdmVyeSBjbG9zZSB0byBhbiBleGFjdCBpbnRlZ2VyIG11bHRpcGxlIG9mIHksIGl0XCdzXG4gICAgcG9zc2libGUgZm9yICJ4Ly95IiB0byBiZSBvbmUgbGFyZ2VyIHRoYW4gIih4LXgleSkvL3kiIGR1ZSB0b1xuICAgIHJvdW5kaW5nLiAgSW4gc3VjaCBjYXNlcywgUHl0aG9uIHJldHVybnMgdGhlIGxhdHRlciByZXN1bHQsIGluXG4gICAgb3JkZXIgdG8gcHJlc2VydmUgdGhhdCAiZGl2bW9kKHgseSlbMF0gKiB5ICsgeCAlIHkiIGJlIHZlcnkgY2xvc2VcbiAgICB0byAieCIuXG5cblszXSBXaGlsZSBjb21wYXJpc29ucyBiZXR3ZWVuIHN0cmluZ3MgbWFrZSBzZW5zZSBhdCB0aGUgYnl0ZVxuICAgIGxldmVsLCB0aGV5IG1heSBiZSBjb3VudGVyLWludHVpdGl2ZSB0byB1c2Vycy4gIEZvciBleGFtcGxlLCB0aGVcbiAgICBzdHJpbmdzICIiXFx1MDBDNyIiIGFuZCAiIlxcdTAzMjdcXHUwMDQzIiIgY29tcGFyZSBkaWZmZXJlbnRseSwgZXZlblxuICAgIHRob3VnaCB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBzYW1lIHVuaWNvZGUgY2hhcmFjdGVyIChMQVRJTlxuICAgIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBKS4gIFRvIGNvbXBhcmUgc3RyaW5ncyBpbiBhIGh1bWFuXG4gICAgcmVjb2duaXphYmxlIHdheSwgY29tcGFyZSB1c2luZyAidW5pY29kZWRhdGEubm9ybWFsaXplKCkiLlxuXG5bNF0gRHVlIHRvIGF1dG9tYXRpYyBnYXJiYWdlLWNvbGxlY3Rpb24sIGZyZWUgbGlzdHMsIGFuZCB0aGVcbiAgICBkeW5hbWljIG5hdHVyZSBvZiBkZXNjcmlwdG9ycywgeW91IG1heSBub3RpY2Ugc2VlbWluZ2x5IHVudXN1YWxcbiAgICBiZWhhdmlvdXIgaW4gY2VydGFpbiB1c2VzIG9mIHRoZSAiaXMiIG9wZXJhdG9yLCBsaWtlIHRob3NlXG4gICAgaW52b2x2aW5nIGNvbXBhcmlzb25zIGJldHdlZW4gaW5zdGFuY2UgbWV0aG9kcywgb3IgY29uc3RhbnRzLlxuICAgIENoZWNrIHRoZWlyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby5cblxuWzVdIFRoZSAiJSIgb3BlcmF0b3IgaXMgYWxzbyB1c2VkIGZvciBzdHJpbmcgZm9ybWF0dGluZzsgdGhlIHNhbWVcbiAgICBwcmVjZWRlbmNlIGFwcGxpZXMuXG5cbls2XSBUaGUgcG93ZXIgb3BlcmF0b3IgIioqIiBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiBhbiBhcml0aG1ldGljXG4gICAgb3IgYml0d2lzZSB1bmFyeSBvcGVyYXRvciBvbiBpdHMgcmlnaHQsIHRoYXQgaXMsICIyKiotMSIgaXMgIjAuNSIuXG4nLAorICdvcGVyYXRvci1zdW1tYXJ5JzogJ1xuT3BlcmF0b3IgcHJlY2VkZW5jZVxuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIG9wZXJhdG9yIHByZWNlZGVuY2VzIGluIFB5dGhvbixcbmZyb20gbG93ZXN0IHByZWNlZGVuY2UgKGxlYXN0IGJpbmRpbmcpIHRvIGhpZ2hlc3QgcHJlY2VkZW5jZSAobW9zdFxuYmluZGluZykuICBPcGVyYXRvcnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZS4gIFVubGVzc1xudGhlIHN5bnRheCBpcyBleHBsaWNpdGx5IGdpdmVuLCBvcGVyYXRvcnMgYXJlIGJpbmFyeS4gIE9wZXJhdG9ycyBpblxudGhlIHNhbWUgYm94IGdyb3VwIGxlZnQgdG8gcmlnaHQgKGV4Y2VwdCBmb3IgY29tcGFyaXNvbnMsIGluY2x1ZGluZ1xudGVzdHMsIHdoaWNoIGFsbCBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UgYW5kIGNoYWluIGZyb20gbGVmdCB0byByaWdodFxuLS0tIHNlZSBzZWN0aW9uICpDb21wYXJpc29ucyogLS0tIGFuZCBleHBvbmVudGlhdGlvbiwgd2hpY2ggZ3JvdXBzXG5mcm9tIHJpZ2h0IHRvIGxlZnQpLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG58ICJsYW1iZGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTGFtYmRhIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJpZiIgLS0gImVsc2UiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29uZGl0aW9uYWwgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJvciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQm9vbGVhbiBPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQm9vbGVhbiBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJub3QiICJ4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQm9vbGVhbiBOT1QgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJpbiIsICJub3QgaW4iLCAiaXMiLCAiaXMgbm90IiwgIjwiLCAiPD0iLCAiPiIsIHwgQ29tcGFyaXNvbnMsIGluY2x1ZGluZyBtZW1iZXJzaGlwICAgICB8XG58ICI+PSIsICIhPSIsICI9PSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdHMgYW5kIGlkZW50aXR5IHRlc3RzICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJ8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQml0d2lzZSBPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJeIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQml0d2lzZSBYT1IgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICImIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQml0d2lzZSBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICI8PCIsICI+PiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2hpZnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICIrIiwgIi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICIqIiwgIi8iLCAiLy8iLCAiJSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTXVsdGlwbGljYXRpb24sIGRpdmlzaW9uLCByZW1haW5kZXIgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICIreCIsICIteCIsICJ+eCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUG9zaXRpdmUsIG5lZ2F0aXZlLCBiaXR3aXNlIE5PVCAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICIqKiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRXhwb25lbnRpYXRpb24gWzZdICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJ4W2luZGV4XSIsICJ4W2luZGV4OmluZGV4XSIsICAgICAgICAgICAgICAgICAgIHwgU3Vic2NyaXB0aW9uLCBzbGljaW5nLCBjYWxsLCAgICAgICAgICB8XG58ICJ4KGFyZ3VtZW50cy4uLikiLCAieC5hdHRyaWJ1dGUiICAgICAgICAgICAgICAgIHwgYXR0cmlidXRlIHJlZmVyZW5jZSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICIoZXhwcmVzc2lvbnMuLi4pIiwgIltleHByZXNzaW9ucy4uLl0iLCAie2tleTogIHwgQmluZGluZyBvciB0dXBsZSBkaXNwbGF5LCBsaXN0ICAgICAgICB8XG58IHZhbHVlLi4ufSIsICJ7ZXhwcmVzc2lvbnMuLi59IiAgICAgICAgICAgICAgICAgIHwgZGlzcGxheSwgZGljdGlvbmFyeSBkaXNwbGF5LCBzZXQgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gV2hpbGUgImFicyh4JXkpIDwgYWJzKHkpIiBpcyB0cnVlIG1hdGhlbWF0aWNhbGx5LCBmb3IgZmxvYXRzIGl0XG4gICAgbWF5IG5vdCBiZSB0cnVlIG51bWVyaWNhbGx5IGR1ZSB0byByb3VuZG9mZi4gIEZvciBleGFtcGxlLCBhbmRcbiAgICBhc3N1bWluZyBhIHBsYXRmb3JtIG9uIHdoaWNoIGEgUHl0aG9uIGZsb2F0IGlzIGFuIElFRUUgNzU0IGRvdWJsZS1cbiAgICBwcmVjaXNpb24gbnVtYmVyLCBpbiBvcmRlciB0aGF0ICItMWUtMTAwICUgMWUxMDAiIGhhdmUgdGhlIHNhbWVcbiAgICBzaWduIGFzICIxZTEwMCIsIHRoZSBjb21wdXRlZCByZXN1bHQgaXMgIi0xZS0xMDAgKyAxZTEwMCIsIHdoaWNoXG4gICAgaXMgbnVtZXJpY2FsbHkgZXhhY3RseSBlcXVhbCB0byAiMWUxMDAiLiAgVGhlIGZ1bmN0aW9uXG4gICAgIm1hdGguZm1vZCgpIiByZXR1cm5zIGEgcmVzdWx0IHdob3NlIHNpZ24gbWF0Y2hlcyB0aGUgc2lnbiBvZiB0aGVcbiAgICBmaXJzdCBhcmd1bWVudCBpbnN0ZWFkLCBhbmQgc28gcmV0dXJucyAiLTFlLTEwMCIgaW4gdGhpcyBjYXNlLlxuICAgIFdoaWNoIGFwcHJvYWNoIGlzIG1vcmUgYXBwcm9wcmlhdGUgZGVwZW5kcyBvbiB0aGUgYXBwbGljYXRpb24uXG5cblsyXSBJZiB4IGlzIHZlcnkgY2xvc2UgdG8gYW4gZXhhY3QgaW50ZWdlciBtdWx0aXBsZSBvZiB5LCBpdFwnc1xuICAgIHBvc3NpYmxlIGZvciAieC8veSIgdG8gYmUgb25lIGxhcmdlciB0aGFuICIoeC14JXkpLy95IiBkdWUgdG9cbiAgICByb3VuZGluZy4gIEluIHN1Y2ggY2FzZXMsIFB5dGhvbiByZXR1cm5zIHRoZSBsYXR0ZXIgcmVzdWx0LCBpblxuICAgIG9yZGVyIHRvIHByZXNlcnZlIHRoYXQgImRpdm1vZCh4LHkpWzBdICogeSArIHggJSB5IiBiZSB2ZXJ5IGNsb3NlXG4gICAgdG8gIngiLlxuXG5bM10gV2hpbGUgY29tcGFyaXNvbnMgYmV0d2VlbiBzdHJpbmdzIG1ha2Ugc2Vuc2UgYXQgdGhlIGJ5dGUgbGV2ZWwsXG4gICAgdGhleSBtYXkgYmUgY291bnRlci1pbnR1aXRpdmUgdG8gdXNlcnMuICBGb3IgZXhhbXBsZSwgdGhlIHN0cmluZ3NcbiAgICAiIlxcdTAwQzciIiBhbmQgIiJcXHUwMzI3XFx1MDA0MyIiIGNvbXBhcmUgZGlmZmVyZW50bHksIGV2ZW4gdGhvdWdoXG4gICAgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgc2FtZSB1bmljb2RlIGNoYXJhY3RlciAoTEFUSU4gQ0FQSVRBTFxuICAgIExFVFRFUiBDIFdJVEggQ0VESUxMQSkuICBUbyBjb21wYXJlIHN0cmluZ3MgaW4gYSBodW1hblxuICAgIHJlY29nbml6YWJsZSB3YXksIGNvbXBhcmUgdXNpbmcgInVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgpIi5cblxuWzRdIER1ZSB0byBhdXRvbWF0aWMgZ2FyYmFnZS1jb2xsZWN0aW9uLCBmcmVlIGxpc3RzLCBhbmQgdGhlIGR5bmFtaWNcbiAgICBuYXR1cmUgb2YgZGVzY3JpcHRvcnMsIHlvdSBtYXkgbm90aWNlIHNlZW1pbmdseSB1bnVzdWFsIGJlaGF2aW91clxuICAgIGluIGNlcnRhaW4gdXNlcyBvZiB0aGUgImlzIiBvcGVyYXRvciwgbGlrZSB0aG9zZSBpbnZvbHZpbmdcbiAgICBjb21wYXJpc29ucyBiZXR3ZWVuIGluc3RhbmNlIG1ldGhvZHMsIG9yIGNvbnN0YW50cy4gIENoZWNrIHRoZWlyXG4gICAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvLlxuXG5bNV0gVGhlICIlIiBvcGVyYXRvciBpcyBhbHNvIHVzZWQgZm9yIHN0cmluZyBmb3JtYXR0aW5nOyB0aGUgc2FtZVxuICAgIHByZWNlZGVuY2UgYXBwbGllcy5cblxuWzZdIFRoZSBwb3dlciBvcGVyYXRvciAiKioiIGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIGFuIGFyaXRobWV0aWMgb3JcbiAgICBiaXR3aXNlIHVuYXJ5IG9wZXJhdG9yIG9uIGl0cyByaWdodCwgdGhhdCBpcywgIjIqKi0xIiBpcyAiMC41Ii5cbicsCiAgJ3Bhc3MnOiAnXG5UaGUgInBhc3MiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKipcblxuICAgcGFzc19zdG10IDo6PSAicGFzcyJcblxuInBhc3MiIGlzIGEgbnVsbCBvcGVyYXRpb24gLS0tIHdoZW4gaXQgaXMgZXhlY3V0ZWQsIG5vdGhpbmcgaGFwcGVucy5cbkl0IGlzIHVzZWZ1bCBhcyBhIHBsYWNlaG9sZGVyIHdoZW4gYSBzdGF0ZW1lbnQgaXMgcmVxdWlyZWRcbnN5bnRhY3RpY2FsbHksIGJ1dCBubyBjb2RlIG5lZWRzIHRvIGJlIGV4ZWN1dGVkLCBmb3IgZXhhbXBsZTpcblxuICAgZGVmIGYoYXJnKTogcGFzcyAgICAjIGEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcgKHlldClcblxuICAgY2xhc3MgQzogcGFzcyAgICAgICAjIGEgY2xhc3Mgd2l0aCBubyBtZXRob2RzICh5ZXQpXG4nLAogICdwb3dlcic6ICdcblRoZSBwb3dlciBvcGVyYXRvclxuKioqKioqKioqKioqKioqKioqXG5cblRoZSBwb3dlciBvcGVyYXRvciBiaW5kcyBtb3JlIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzXG5sZWZ0OyBpdCBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzIHJpZ2h0LiAgVGhlXG5zeW50YXggaXM6XG5cbiAgIHBvd2VyIDo6PSBwcmltYXJ5IFsiKioiIHVfZXhwcl1cblxuVGh1cywgaW4gYW4gdW5wYXJlbnRoZXNpemVkIHNlcXVlbmNlIG9mIHBvd2VyIGFuZCB1bmFyeSBvcGVyYXRvcnMsIHRoZVxub3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgZnJvbSByaWdodCB0byBsZWZ0ICh0aGlzIGRvZXMgbm90IGNvbnN0cmFpblxudGhlIGV2YWx1YXRpb24gb3JkZXIgZm9yIHRoZSBvcGVyYW5kcyk6ICItMSoqMiIgcmVzdWx0cyBpbiAiLTEiLlxuXG5UaGUgcG93ZXIgb3BlcmF0b3IgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyB0aGUgYnVpbHQtaW4gInBvdygpIlxuZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogaXQgeWllbGRzIGl0cyBsZWZ0IGFyZ3VtZW50XG5yYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGl0cyByaWdodCBhcmd1bWVudC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmVcbmZpcnN0IGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCBhbmQgdGhlIHJlc3VsdCBpcyBvZiB0aGF0IHR5cGUuXG5cbkZvciBpbnQgb3BlcmFuZHMsIHRoZSByZXN1bHQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzIHVubGVzc1xudGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWdhdGl2ZTsgaW4gdGhhdCBjYXNlLCBhbGwgYXJndW1lbnRzIGFyZVxuY29udmVydGVkIHRvIGZsb2F0IGFuZCBhIGZsb2F0IHJlc3VsdCBpcyBkZWxpdmVyZWQuIEZvciBleGFtcGxlLFxuIjEwKioyIiByZXR1cm5zICIxMDAiLCBidXQgIjEwKiotMiIgcmV0dXJucyAiMC4wMSIuXG5cblJhaXNpbmcgIjAuMCIgdG8gYSBuZWdhdGl2ZSBwb3dlciByZXN1bHRzIGluIGEgIlplcm9EaXZpc2lvbkVycm9yIi5cblJhaXNpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBmcmFjdGlvbmFsIHBvd2VyIHJlc3VsdHMgaW4gYSAiY29tcGxleCJcbm51bWJlci4gKEluIGVhcmxpZXIgdmVyc2lvbnMgaXQgcmFpc2VkIGEgIlZhbHVlRXJyb3IiLilcbicsCiAgJ3JhaXNlJzogJ1xuVGhlICJyYWlzZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgcmFpc2Vfc3RtdCA6Oj0gInJhaXNlIiBbZXhwcmVzc2lvbiBbImZyb20iIGV4cHJlc3Npb25dXVxuXG5JZiBubyBleHByZXNzaW9ucyBhcmUgcHJlc2VudCwgInJhaXNlIiByZS1yYWlzZXMgdGhlIGxhc3QgZXhjZXB0aW9uXG50aGF0IHdhcyBhY3RpdmUgaW4gdGhlIGN1cnJlbnQgc2NvcGUuICBJZiBubyBleGNlcHRpb24gaXMgYWN0aXZlIGluXG50aGUgY3VycmVudCBzY29wZSwgYSAiUnVudGltZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkIGluZGljYXRpbmdcbnRoYXQgdGhpcyBpcyBhbiBlcnJvci5cblxuT3RoZXJ3aXNlLCAicmFpc2UiIGV2YWx1YXRlcyB0aGUgZmlyc3QgZXhwcmVzc2lvbiBhcyB0aGUgZXhjZXB0aW9uXG5vYmplY3QuICBJdCBtdXN0IGJlIGVpdGhlciBhIHN1YmNsYXNzIG9yIGFuIGluc3RhbmNlIG9mXG4iQmFzZUV4Y2VwdGlvbiIuIElmIGl0IGlzIGEgY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2Ugd2lsbCBiZVxub2J0YWluZWQgd2hlbiBuZWVkZWQgYnkgaW5zdGFudGlhdGluZyB0aGUgY2xhc3Mgd2l0aCBubyBhcmd1bWVudHMuXG5cblRoZSAqdHlwZSogb2YgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgZXhjZXB0aW9uIGluc3RhbmNlXCdzIGNsYXNzLCB0aGVcbip2YWx1ZSogaXMgdGhlIGluc3RhbmNlIGl0c2VsZi5cblxuQSB0cmFjZWJhY2sgb2JqZWN0IGlzIG5vcm1hbGx5IGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFuIGV4Y2VwdGlvblxuaXMgcmFpc2VkIGFuZCBhdHRhY2hlZCB0byBpdCBhcyB0aGUgIl9fdHJhY2ViYWNrX18iIGF0dHJpYnV0ZSwgd2hpY2hcbmlzIHdyaXRhYmxlLiBZb3UgY2FuIGNyZWF0ZSBhbiBleGNlcHRpb24gYW5kIHNldCB5b3VyIG93biB0cmFjZWJhY2sgaW5cbm9uZSBzdGVwIHVzaW5nIHRoZSAid2l0aF90cmFjZWJhY2soKSIgZXhjZXB0aW9uIG1ldGhvZCAod2hpY2ggcmV0dXJuc1xudGhlIHNhbWUgZXhjZXB0aW9uIGluc3RhbmNlLCB3aXRoIGl0cyB0cmFjZWJhY2sgc2V0IHRvIGl0cyBhcmd1bWVudCksXG5saWtlIHNvOlxuXG4gICByYWlzZSBFeGNlcHRpb24oImZvbyBvY2N1cnJlZCIpLndpdGhfdHJhY2ViYWNrKHRyYWNlYmFja29iailcblxuVGhlICJmcm9tIiBjbGF1c2UgaXMgdXNlZCBmb3IgZXhjZXB0aW9uIGNoYWluaW5nOiBpZiBnaXZlbiwgdGhlIHNlY29uZFxuKmV4cHJlc3Npb24qIG11c3QgYmUgYW5vdGhlciBleGNlcHRpb24gY2xhc3Mgb3IgaW5zdGFuY2UsIHdoaWNoIHdpbGxcbnRoZW4gYmUgYXR0YWNoZWQgdG8gdGhlIHJhaXNlZCBleGNlcHRpb24gYXMgdGhlICJfX2NhdXNlX18iIGF0dHJpYnV0ZVxuKHdoaWNoIGlzIHdyaXRhYmxlKS4gIElmIHRoZSByYWlzZWQgZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkLCBib3RoXG5leGNlcHRpb25zIHdpbGwgYmUgcHJpbnRlZDpcblxuICAgPj4+IHRyeTpcbiAgIC4uLiAgICAgcHJpbnQoMSAvIDApXG4gICAuLi4gZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6XG4gICAuLi4gICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29tZXRoaW5nIGJhZCBoYXBwZW5lZCIpIGZyb20gZXhjXG4gICAuLi5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gPG1vZHVsZT5cbiAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm9cblxuICAgVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcblxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSA0LCBpbiA8bW9kdWxlPlxuICAgUnVudGltZUVycm9yOiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkXG5cbkEgc2ltaWxhciBtZWNoYW5pc20gd29ya3MgaW1wbGljaXRseSBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluc2lkZVxuYW4gZXhjZXB0aW9uIGhhbmRsZXI6IHRoZSBwcmV2aW91cyBleGNlcHRpb24gaXMgdGhlbiBhdHRhY2hlZCBhcyB0aGVcbm5ldyBleGNlcHRpb25cJ3MgIl9fY29udGV4dF9fIiBhdHRyaWJ1dGU6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdDpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIilcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhhbmRsaW5nIGV4Y2VwdGlvbnMgaXMgaW4gc2VjdGlvblxuKlRoZSB0cnkgc3RhdGVtZW50Ki5cbicsCiAgJ3JldHVybic6ICdcblRoZSAicmV0dXJuIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmV0dXJuX3N0bXQgOjo9ICJyZXR1cm4iIFtleHByZXNzaW9uX2xpc3RdXG5cbiJyZXR1cm4iIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbixcbm5vdCB3aXRoaW4gYSBuZXN0ZWQgY2xhc3MgZGVmaW5pdGlvbi5cblxuSWYgYW4gZXhwcmVzc2lvbiBsaXN0IGlzIHByZXNlbnQsIGl0IGlzIGV2YWx1YXRlZCwgZWxzZSAiTm9uZSIgaXNcbnN1YnN0aXR1dGVkLlxuXG4icmV0dXJuIiBsZWF2ZXMgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbCB3aXRoIHRoZSBleHByZXNzaW9uIGxpc3QgKG9yXG4iTm9uZSIpIGFzIHJldHVybiB2YWx1ZS5cblxuV2hlbiAicmV0dXJuIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhICJmaW5hbGx5IlxuY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseSBsZWF2aW5nIHRoZVxuZnVuY3Rpb24uXG5cbkluIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLCB0aGUgInJldHVybiIgc3RhdGVtZW50IGluZGljYXRlcyB0aGF0IHRoZVxuZ2VuZXJhdG9yIGlzIGRvbmUgYW5kIHdpbGwgY2F1c2UgIlN0b3BJdGVyYXRpb24iIHRvIGJlIHJhaXNlZC4gVGhlXG5yZXR1cm5lZCB2YWx1ZSAoaWYgYW55KSBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIGNvbnN0cnVjdFxuIlN0b3BJdGVyYXRpb24iIGFuZCBiZWNvbWVzIHRoZSAiU3RvcEl0ZXJhdGlvbi52YWx1ZSIgYXR0cmlidXRlLlxuJywKLSAnc2VxdWVuY2UtdHlwZXMnOiAnXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoICIwIDw9IGsgPCBOIiB3aGVyZVxuKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaCBkZWZpbmUgYVxucmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZSB0aGVcbm1ldGhvZHMgImtleXMoKSIsICJ2YWx1ZXMoKSIsICJpdGVtcygpIiwgImdldCgpIiwgImNsZWFyKCkiLFxuInNldGRlZmF1bHQoKSIsICJwb3AoKSIsICJwb3BpdGVtKCkiLCAiY29weSgpIiwgYW5kICJ1cGRhdGUoKSJcbmJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuXG5UaGUgImNvbGxlY3Rpb25zIiBtb2R1bGUgcHJvdmlkZXMgYSAiTXV0YWJsZU1hcHBpbmciIGFic3RyYWN0IGJhc2VcbmNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mICJfX2dldGl0ZW1fXygpIixcbiJfX3NldGl0ZW1fXygpIiwgIl9fZGVsaXRlbV9fKCkiLCBhbmQgImtleXMoKSIuIE11dGFibGUgc2VxdWVuY2VzXG5zaG91bGQgcHJvdmlkZSBtZXRob2RzICJhcHBlbmQoKSIsICJjb3VudCgpIiwgImluZGV4KCkiLCAiZXh0ZW5kKCkiLFxuImluc2VydCgpIiwgInBvcCgpIiwgInJlbW92ZSgpIiwgInJldmVyc2UoKSIgYW5kICJzb3J0KCkiLCBsaWtlIFB5dGhvblxuc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudFxuYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyAiX19hZGRfXygpIiwgIl9fcmFkZF9fKCkiLFxuIl9faWFkZF9fKCkiLCAiX19tdWxfXygpIiwgIl9fcm11bF9fKCkiIGFuZCAiX19pbXVsX18oKSIgZGVzY3JpYmVkXG5iZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXQgaXNcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbiJfX2NvbnRhaW5zX18oKSIgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlICJpbiIgb3BlcmF0b3I7XG5mb3IgbWFwcGluZ3MsICJpbiIgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3Igc2VxdWVuY2VzLCBpdFxuc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyIHJlY29tbWVuZGVkIHRoYXQgYm90aFxubWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlICJfX2l0ZXJfXygpIiBtZXRob2QgdG8gYWxsb3dcbmVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsICJfX2l0ZXJfXygpIlxuc2hvdWxkIGJlIHRoZSBzYW1lIGFzICJrZXlzKCkiOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZVxudGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyICI+PSIgMC4gIEFsc28sIGFuIG9iamVjdCB0aGF0XG4gICBkb2VzblwndCBkZWZpbmUgYSAiX19ib29sX18oKSIgbWV0aG9kIGFuZCB3aG9zZSAiX19sZW5fXygpIiBtZXRob2RcbiAgIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuXG4gIEEgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGggIk5vbmUiLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgInNlbGZba2V5XSIuIEZvciBzZXF1ZW5jZSB0eXBlcyxcbiAgIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy4gIE5vdGUgdGhhdFxuICAgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlIGNsYXNzIHdpc2hlc1xuICAgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLiBJZlxuICAgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLCAiVHlwZUVycm9yIiBtYXkgYmUgcmFpc2VkOyBpZiBvZlxuICAgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2YgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnlcbiAgIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgdmFsdWVzKSwgIkluZGV4RXJyb3IiIHNob3VsZCBiZVxuICAgcmFpc2VkLiBGb3IgbWFwcGluZyB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZVxuICAgY29udGFpbmVyKSwgIktleUVycm9yIiBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiAiZm9yIiBsb29wcyBleHBlY3QgdGhhdCBhbiAiSW5kZXhFcnJvciIgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgImtleXMoKSIuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlICJyZXZlcnNlZCgpIiBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgIl9fcmV2ZXJzZWRfXygpIiBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGUgInJldmVyc2VkKCkiXG4gICBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgKCJfX2xlbl9fKCkiXG4gICBhbmQgIl9fZ2V0aXRlbV9fKCkiKS4gIE9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbFxuICAgc2hvdWxkIG9ubHkgcHJvdmlkZSAiX19yZXZlcnNlZF9fKCkiIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW5cbiAgIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5XG4gICAicmV2ZXJzZWQoKSIuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzICgiaW4iIGFuZCAibm90IGluIikgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIsIHRoZSBtZW1iZXJzaGlwIHRlc3RcbiAgIGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgIl9faXRlcl9fKCkiLCB0aGVuIHRoZSBvbGQgc2VxdWVuY2VcbiAgIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgIl9fZ2V0aXRlbV9fKCkiLCBzZWUgKnRoaXMgc2VjdGlvbiBpbiB0aGVcbiAgIGxhbmd1YWdlIHJlZmVyZW5jZSouXG4nLAotICdzaGlmdGluZyc6ICdcblNoaWZ0aW5nIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIHNoaWZ0aW5nIG9wZXJhdGlvbnMgaGF2ZSBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSBhcml0aG1ldGljXG5vcGVyYXRpb25zOlxuXG4gICBzaGlmdF9leHByIDo6PSBhX2V4cHIgfCBzaGlmdF9leHByICggIjw8IiB8ICI+PiIgKSBhX2V4cHJcblxuVGhlc2Ugb3BlcmF0b3JzIGFjY2VwdCBpbnRlZ2VycyBhcyBhcmd1bWVudHMuICBUaGV5IHNoaWZ0IHRoZSBmaXJzdFxuYXJndW1lbnQgdG8gdGhlIGxlZnQgb3IgcmlnaHQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGdpdmVuIGJ5IHRoZVxuc2Vjb25kIGFyZ3VtZW50LlxuXG5BIHJpZ2h0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgZmxvb3IgZGl2aXNpb24gYnkgInBvdygyLG4pIi5cbkEgbGVmdCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIG11bHRpcGxpY2F0aW9uIHdpdGggInBvdygyLG4pIi5cblxuTm90ZTogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXNcbiAgcmVxdWlyZWQgdG8gYmUgYXQgbW9zdCAic3lzLm1heHNpemUiLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpc1xuICBsYXJnZXIgdGhhbiAic3lzLm1heHNpemUiIGFuICJPdmVyZmxvd0Vycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKKyAnc2VxdWVuY2UtdHlwZXMnOiAnXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoICIwIDw9IGsgPCBOIiB3aGVyZVxuKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaCBkZWZpbmUgYVxucmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZSB0aGVcbm1ldGhvZHMgImtleXMoKSIsICJ2YWx1ZXMoKSIsICJpdGVtcygpIiwgImdldCgpIiwgImNsZWFyKCkiLFxuInNldGRlZmF1bHQoKSIsICJwb3AoKSIsICJwb3BpdGVtKCkiLCAiY29weSgpIiwgYW5kICJ1cGRhdGUoKSJcbmJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuXG5UaGUgImNvbGxlY3Rpb25zIiBtb2R1bGUgcHJvdmlkZXMgYSAiTXV0YWJsZU1hcHBpbmciIGFic3RyYWN0IGJhc2VcbmNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mICJfX2dldGl0ZW1fXygpIixcbiJfX3NldGl0ZW1fXygpIiwgIl9fZGVsaXRlbV9fKCkiLCBhbmQgImtleXMoKSIuIE11dGFibGUgc2VxdWVuY2VzXG5zaG91bGQgcHJvdmlkZSBtZXRob2RzICJhcHBlbmQoKSIsICJjb3VudCgpIiwgImluZGV4KCkiLCAiZXh0ZW5kKCkiLFxuImluc2VydCgpIiwgInBvcCgpIiwgInJlbW92ZSgpIiwgInJldmVyc2UoKSIgYW5kICJzb3J0KCkiLCBsaWtlIFB5dGhvblxuc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudFxuYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyAiX19hZGRfXygpIiwgIl9fcmFkZF9fKCkiLFxuIl9faWFkZF9fKCkiLCAiX19tdWxfXygpIiwgIl9fcm11bF9fKCkiIGFuZCAiX19pbXVsX18oKSIgZGVzY3JpYmVkXG5iZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXQgaXNcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbiJfX2NvbnRhaW5zX18oKSIgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlICJpbiIgb3BlcmF0b3I7XG5mb3IgbWFwcGluZ3MsICJpbiIgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3Igc2VxdWVuY2VzLCBpdFxuc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyIHJlY29tbWVuZGVkIHRoYXQgYm90aFxubWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlICJfX2l0ZXJfXygpIiBtZXRob2QgdG8gYWxsb3dcbmVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsICJfX2l0ZXJfXygpIlxuc2hvdWxkIGJlIHRoZSBzYW1lIGFzICJrZXlzKCkiOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZVxudGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyICI+PSIgMC4gIEFsc28sIGFuIG9iamVjdCB0aGF0XG4gICBkb2VzblwndCBkZWZpbmUgYSAiX19ib29sX18oKSIgbWV0aG9kIGFuZCB3aG9zZSAiX19sZW5fXygpIiBtZXRob2RcbiAgIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5vYmplY3QuX19sZW5ndGhfaGludF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmxlbmd0aF9oaW50KCkiLiBTaG91bGQgcmV0dXJuIGFuXG4gICBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICh3aGljaCBtYXkgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW5cbiAgIHRoZSBhY3R1YWwgbGVuZ3RoKS4gVGhlIGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIgIj49IiAwLiBUaGlzXG4gICBtZXRob2QgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yXG4gICBjb3JyZWN0bmVzcy5cblxuICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoICJOb25lIi5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mICJzZWxmW2tleV0iLiBGb3Igc2VxdWVuY2UgdHlwZXMsXG4gICB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuICBOb3RlIHRoYXRcbiAgIHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZSBjbGFzcyB3aXNoZXNcbiAgIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC4gSWZcbiAgICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSwgIlR5cGVFcnJvciIgbWF5IGJlIHJhaXNlZDsgaWYgb2ZcbiAgIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55XG4gICBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIHZhbHVlcyksICJJbmRleEVycm9yIiBzaG91bGQgYmVcbiAgIHJhaXNlZC4gRm9yIG1hcHBpbmcgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGVcbiAgIGNvbnRhaW5lciksICJLZXlFcnJvciIgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogImZvciIgbG9vcHMgZXhwZWN0IHRoYXQgYW4gIkluZGV4RXJyb3IiIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kICJrZXlzKCkiLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSAicmV2ZXJzZWQoKSIgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlICJfX3JldmVyc2VkX18oKSIgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlICJyZXZlcnNlZCgpIlxuICAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlIHByb3RvY29sICgiX19sZW5fXygpIlxuICAgYW5kICJfX2dldGl0ZW1fXygpIikuICBPYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2xcbiAgIHNob3VsZCBvbmx5IHByb3ZpZGUgIl9fcmV2ZXJzZWRfXygpIiBpZiB0aGV5IGNhbiBwcm92aWRlIGFuXG4gICBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieVxuICAgInJldmVyc2VkKCkiLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoImluIiBhbmQgIm5vdCBpbiIpIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uXCd0IGRlZmluZSAiX19jb250YWluc19fKCkiLCB0aGUgbWVtYmVyc2hpcCB0ZXN0XG4gICBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhICJfX2l0ZXJfXygpIiwgdGhlbiB0aGUgb2xkIHNlcXVlbmNlXG4gICBpdGVyYXRpb24gcHJvdG9jb2wgdmlhICJfX2dldGl0ZW1fXygpIiwgc2VlICp0aGlzIHNlY3Rpb24gaW4gdGhlXG4gICBsYW5ndWFnZSByZWZlcmVuY2UqLlxuJywKKyAnc2hpZnRpbmcnOiAnXG5TaGlmdGluZyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBzaGlmdGluZyBvcGVyYXRpb25zIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgYXJpdGhtZXRpY1xub3BlcmF0aW9uczpcblxuICAgc2hpZnRfZXhwciA6Oj0gYV9leHByIHwgc2hpZnRfZXhwciAoICI8PCIgfCAiPj4iICkgYV9leHByXG5cblRoZXNlIG9wZXJhdG9ycyBhY2NlcHQgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGZsb29yIGRpdmlzaW9uIGJ5ICJwb3coMixuKSIuXG5BIGxlZnQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBtdWx0aXBsaWNhdGlvbiB3aXRoICJwb3coMixuKSIuXG5cbk5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIHJlcXVpcmVkIHRvXG4gIGJlIGF0IG1vc3QgInN5cy5tYXhzaXplIi4gIElmIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXMgbGFyZ2VyIHRoYW5cbiAgInN5cy5tYXhzaXplIiBhbiAiT3ZlcmZsb3dFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbicsCiAgJ3NsaWNpbmdzJzogJ1xuU2xpY2luZ3NcbioqKioqKioqXG5cbkEgc2xpY2luZyBzZWxlY3RzIGEgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZSBvYmplY3QgKGUuZy4sIGFcbnN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBTbGljaW5ncyBtYXkgYmUgdXNlZCBhcyBleHByZXNzaW9ucyBvciBhc1xudGFyZ2V0cyBpbiBhc3NpZ25tZW50IG9yICJkZWwiIHN0YXRlbWVudHMuICBUaGUgc3ludGF4IGZvciBhIHNsaWNpbmc6XG5cbiAgIHNsaWNpbmcgICAgICA6Oj0gcHJpbWFyeSAiWyIgc2xpY2VfbGlzdCAiXSJcbiAgIHNsaWNlX2xpc3QgICA6Oj0gc2xpY2VfaXRlbSAoIiwiIHNsaWNlX2l0ZW0pKiBbIiwiXVxuICAgc2xpY2VfaXRlbSAgIDo6PSBleHByZXNzaW9uIHwgcHJvcGVyX3NsaWNlXG4gICBwcm9wZXJfc2xpY2UgOjo9IFtsb3dlcl9ib3VuZF0gIjoiIFt1cHBlcl9ib3VuZF0gWyAiOiIgW3N0cmlkZV0gXVxuICAgbG93ZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICB1cHBlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHN0cmlkZSAgICAgICA6Oj0gZXhwcmVzc2lvblxuXG5UaGVyZSBpcyBhbWJpZ3VpdHkgaW4gdGhlIGZvcm1hbCBzeW50YXggaGVyZTogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlXG5hbiBleHByZXNzaW9uIGxpc3QgYWxzbyBsb29rcyBsaWtlIGEgc2xpY2UgbGlzdCwgc28gYW55IHN1YnNjcmlwdGlvblxuY2FuIGJlIGludGVycHJldGVkIGFzIGEgc2xpY2luZy4gIFJhdGhlciB0aGFuIGZ1cnRoZXIgY29tcGxpY2F0aW5nIHRoZVxuc3ludGF4LCB0aGlzIGlzIGRpc2FtYmlndWF0ZWQgYnkgZGVmaW5pbmcgdGhhdCBpbiB0aGlzIGNhc2UgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHN1YnNjcmlwdGlvbiB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzbGljaW5nICh0aGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBubyBwcm9wZXIgc2xpY2UpLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlXG50byBhIG1hcHBpbmcgb2JqZWN0LCBhbmQgaXQgaXMgaW5kZXhlZCAodXNpbmcgdGhlIHNhbWUgIl9fZ2V0aXRlbV9fKCkiXG5tZXRob2QgYXMgbm9ybWFsIHN1YnNjcmlwdGlvbikgd2l0aCBhIGtleSB0aGF0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlXG5zbGljZSBsaXN0LCBhcyBmb2xsb3dzLiAgSWYgdGhlIHNsaWNlIGxpc3QgY29udGFpbnMgYXQgbGVhc3Qgb25lXG5jb21tYSwgdGhlIGtleSBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnNpb24gb2YgdGhlIHNsaWNlXG5pdGVtczsgb3RoZXJ3aXNlLCB0aGUgY29udmVyc2lvbiBvZiB0aGUgbG9uZSBzbGljZSBpdGVtIGlzIHRoZSBrZXkuXG5UaGUgY29udmVyc2lvbiBvZiBhIHNsaWNlIGl0ZW0gdGhhdCBpcyBhbiBleHByZXNzaW9uIGlzIHRoYXRcbmV4cHJlc3Npb24uICBUaGUgY29udmVyc2lvbiBvZiBhIHByb3BlciBzbGljZSBpcyBhIHNsaWNlIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSB3aG9zZSAic3RhcnQiLCAic3RvcCIgYW5kXG4ic3RlcCIgYXR0cmlidXRlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aGUgZXhwcmVzc2lvbnMgZ2l2ZW4gYXMgbG93ZXJcbmJvdW5kLCB1cHBlciBib3VuZCBhbmQgc3RyaWRlLCByZXNwZWN0aXZlbHksIHN1YnN0aXR1dGluZyAiTm9uZSIgZm9yXG5taXNzaW5nIGV4cHJlc3Npb25zLlxuJywKLSAnc3BlY2lhbGF0dHJzJzogJ1xuU3BlY2lhbCBBdHRyaWJ1dGVzXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIGltcGxlbWVudGF0aW9uIGFkZHMgYSBmZXcgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlcyB0byBzZXZlcmFsXG5vYmplY3QgdHlwZXMsIHdoZXJlIHRoZXkgYXJlIHJlbGV2YW50LiAgU29tZSBvZiB0aGVzZSBhcmUgbm90IHJlcG9ydGVkXG5ieSB0aGUgImRpcigpIiBidWlsdC1pbiBmdW5jdGlvbi5cblxub2JqZWN0Ll9fZGljdF9fXG5cbiAgIEEgZGljdGlvbmFyeSBvciBvdGhlciBtYXBwaW5nIG9iamVjdCB1c2VkIHRvIHN0b3JlIGFuIG9iamVjdFwnc1xuICAgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzLlxuXG5pbnN0YW5jZS5fX2NsYXNzX19cblxuICAgVGhlIGNsYXNzIHRvIHdoaWNoIGEgY2xhc3MgaW5zdGFuY2UgYmVsb25ncy5cblxuY2xhc3MuX19iYXNlc19fXG5cbiAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuXG5cbmNsYXNzLl9fbmFtZV9fXG5cbiAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG5jbGFzcy5fX3F1YWxuYW1lX19cblxuICAgVGhlICpxdWFsaWZpZWQgbmFtZSogb2YgdGhlIGNsYXNzIG9yIHR5cGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuY2xhc3MuX19tcm9fX1xuXG4gICBUaGlzIGF0dHJpYnV0ZSBpcyBhIHR1cGxlIG9mIGNsYXNzZXMgdGhhdCBhcmUgY29uc2lkZXJlZCB3aGVuXG4gICBsb29raW5nIGZvciBiYXNlIGNsYXNzZXMgZHVyaW5nIG1ldGhvZCByZXNvbHV0aW9uLlxuXG5jbGFzcy5tcm8oKVxuXG4gICBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIG1ldGFjbGFzcyB0byBjdXN0b21pemUgdGhlXG4gICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgaXRzIGluc3RhbmNlcy4gIEl0IGlzIGNhbGxlZCBhdCBjbGFzc1xuICAgaW5zdGFudGlhdGlvbiwgYW5kIGl0cyByZXN1bHQgaXMgc3RvcmVkIGluICJfX21yb19fIi5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIGNsYXNzIGtlZXBzIGEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGltbWVkaWF0ZVxuICAgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aG9zZSByZWZlcmVuY2VzXG4gICBzdGlsbCBhbGl2ZS4gRXhhbXBsZTpcblxuICAgICAgPj4+IGludC5fX3N1YmNsYXNzZXNfXygpXG4gICAgICBbPGNsYXNzIFwnYm9vbFwnPl1cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNwZWNpYWwgbWV0aG9kcyBtYXkgYmUgZm91bmRcbiAgICBpbiB0aGUgUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwgKCpCYXNpYyBjdXN0b21pemF0aW9uKikuXG5cblsyXSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgbGlzdCAiWzEsIDJdIiBpcyBjb25zaWRlcmVkIGVxdWFsIHRvXG4gICAgIlsxLjAsIDIuMF0iLCBhbmQgc2ltaWxhcmx5IGZvciB0dXBsZXMuXG5cblszXSBUaGV5IG11c3QgaGF2ZSBzaW5jZSB0aGUgcGFyc2VyIGNhblwndCB0ZWxsIHRoZSB0eXBlIG9mIHRoZVxuICAgIG9wZXJhbmRzLlxuXG5bNF0gQ2FzZWQgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICAgYmVpbmcgb25lIG9mICJMdSIgKExldHRlciwgdXBwZXJjYXNlKSwgIkxsIiAoTGV0dGVyLCBsb3dlcmNhc2UpLFxuICAgIG9yICJMdCIgKExldHRlciwgdGl0bGVjYXNlKS5cblxuWzVdIFRvIGZvcm1hdCBvbmx5IGEgdHVwbGUgeW91IHNob3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBhXG4gICAgc2luZ2xldG9uIHR1cGxlIHdob3NlIG9ubHkgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLlxuJywKLSAnc3BlY2lhbG5hbWVzJzogJ1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkICJfX2dldGl0ZW1fXygpIiwgYW5kICJ4IiBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLFxudGhlbiAieFtpXSIgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvICJ0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsIGkpIi5cbkV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlIGFuXG5leGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG4iQXR0cmlidXRlRXJyb3IiIG9yICJUeXBlRXJyb3IiKS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgYSBjbGFzcyB0aGF0IGVtdWxhdGVzIGFueSBidWlsdC1pbiB0eXBlLCBpdCBpc1xuaW1wb3J0YW50IHRoYXQgdGhlIGVtdWxhdGlvbiBvbmx5IGJlIGltcGxlbWVudGVkIHRvIHRoZSBkZWdyZWUgdGhhdCBpdFxubWFrZXMgc2Vuc2UgZm9yIHRoZSBvYmplY3QgYmVpbmcgbW9kZWxsZWQuICBGb3IgZXhhbXBsZSwgc29tZVxuc2VxdWVuY2VzIG1heSB3b3JrIHdlbGwgd2l0aCByZXRyaWV2YWwgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgYnV0XG5leHRyYWN0aW5nIGEgc2xpY2UgbWF5IG5vdCBtYWtlIHNlbnNlLiAgKE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgdGhlXG4iTm9kZUxpc3QiIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgIl9fbmV3X18oKSIgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgIl9fbmV3X18oKSIgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5IGFuXG4gICBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCB1c2luZ1xuICAgInN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pIiB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgIl9fbmV3X18oKSIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICAiX19pbml0X18oc2VsZlssIC4uLl0pIiwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIuXG5cbiAgIElmICJfX25ld19fKCkiIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgICJfX25ld19fKCkiIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgICJfX2luaXRfXygpIiBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzICJfX2luaXRfXygpIiBtZXRob2QsIGlmXG4gICBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlXG4gICBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgICJCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKSIuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludCBvblxuICAgY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgIlR5cGVFcnJvciIgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgIl9fZGVsX18oKSIgbWV0aG9kLCB0aGVcbiAgIGRlcml2ZWQgY2xhc3NcJ3MgIl9fZGVsX18oKSIgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0XG4gICB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlLlxuICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yIHRoZVxuICAgIl9fZGVsX18oKSIgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogImRlbCB4IiBkb2VzblwndCBkaXJlY3RseSBjYWxsICJ4Ll9fZGVsX18oKSIgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciAieCIgYnkgb25lLCBhbmQgdGhlIGxhdHRlciBpc1xuICAgICBvbmx5IGNhbGxlZCB3aGVuICJ4IlwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZSBjb21tb25cbiAgICAgc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW4gb2JqZWN0IGZyb21cbiAgICAgZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gb2JqZWN0cyAoZS5nLixcbiAgICAgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggcGFyZW50IGFuZFxuICAgICBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIG9mXG4gICAgIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmV4Y19pbmZvKClbMl0iIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yIGEgcmVmZXJlbmNlXG4gICAgIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZFxuICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nICJOb25lIiBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIi4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5XG4gICAgIGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLVxuICAgICBsZXZlbCAiX19kZWxfXygpIiBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvblxuICAgICBmb3IgdGhlICJnYyIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyAiX19kZWxfXygpIlxuICAgICBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5IHRoZVxuICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgImdhcmJhZ2UiIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaFxuICAgICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nXG4gICAgIHRoZWlyIGV4ZWN1dGlvbiBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvXG4gICAgICJzeXMuc3RkZXJyIiBpbnN0ZWFkLiBBbHNvLCB3aGVuICJfX2RlbF9fKCkiIGlzIGludm9rZWQgaW5cbiAgICAgcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmcgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlXG4gICAgIHByb2dyYW0gaXMgZG9uZSksIG90aGVyIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nXG4gICAgIHRvcm4gZG93biAoZS5nLiB0aGUgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzXG4gICAgIHJlYXNvbiwgIl9fZGVsX18oKSIgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkXG4gICAgIHRvIG1haW50YWluIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LFxuICAgICBQeXRob24gZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSAiX19kZWxfXygpIiBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSAicmVwcigpIiBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSAib2ZmaWNpYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzXG4gICBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvXG4gICByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgIjwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj4iIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyAiX19yZXByX18oKSIgYnV0XG4gICBub3QgIl9fc3RyX18oKSIsIHRoZW4gIl9fcmVwcl9fKCkiIGlzIGFsc28gdXNlZCB3aGVuIGFuICJpbmZvcm1hbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpcyByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgInN0cihvYmplY3QpIiBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZm9ybWF0KCkiIGFuZFxuICAgInByaW50KCkiIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZSBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhICpzdHJpbmcqXG4gICBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSAib2JqZWN0Ll9fcmVwcl9fKCkiIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgIl9fc3RyX18oKSIgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlICJvYmplY3QiXG4gICBjYWxscyAib2JqZWN0Ll9fcmVwcl9fKCkiLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAiYnl0ZXMoKSIgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhICJieXRlcyIgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSAiZm9ybWF0KCkiIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBvZiBjbGFzcyAic3RyIikgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyBhXG4gICBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyB1cCB0b1xuICAgdGhlIHR5cGUgaW1wbGVtZW50aW5nICJfX2Zvcm1hdF9fKCkiLCBob3dldmVyIG1vc3QgY2xhc3NlcyB3aWxsXG4gICBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvciB1c2UgYVxuICAgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiAieDx5IiBjYWxscyAieC5fX2x0X18oeSkiLCAieDw9eSIgY2FsbHMgInguX19sZV9fKHkpIixcbiAgICJ4PT15IiBjYWxscyAieC5fX2VxX18oeSkiLCAieCE9eSIgY2FsbHMgInguX19uZV9fKHkpIiwgIng+eSIgY2FsbHNcbiAgICJ4Ll9fZ3RfXyh5KSIsIGFuZCAieD49eSIgY2FsbHMgInguX19nZV9fKHkpIi5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvbiAiTm90SW1wbGVtZW50ZWQiXG4gICBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYSBnaXZlbiBwYWlyIG9mXG4gICBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgcmV0dXJuZWQgZm9yIGFcbiAgIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW4gcmV0dXJuIGFueSB2YWx1ZSxcbiAgIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYSBCb29sZWFuIGNvbnRleHQgKGUuZy4sXG4gICBpbiB0aGUgY29uZGl0aW9uIG9mIGFuICJpZiIgc3RhdGVtZW50KSwgUHl0aG9uIHdpbGwgY2FsbCAiYm9vbCgpIlxuICAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0IGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mICJ4PT15IiBkb2VzIG5vdCBpbXBseSB0aGF0ICJ4IT15IiBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nICJfX2VxX18oKSIsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgICJfX25lX18oKSIgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlIHRoZVxuICAgcGFyYWdyYXBoIG9uICJfX2hhc2hfXygpIiBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb24gY3JlYXRpbmdcbiAgICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kXG4gICBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgIl9fbHRfXygpIiBhbmQgIl9fZ3RfXygpIiBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgIl9fbGVfXygpIiBhbmQgIl9fZ2VfXygpIiBhcmUgZWFjaCBvdGhlclwncyByZWZsZWN0aW9uLFxuICAgYW5kICJfX2VxX18oKSIgYW5kICJfX25lX18oKSIgYXJlIHRoZWlyIG93biByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlICJmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKSIuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gImhhc2goKSIgYW5kIGZvciBvcGVyYXRpb25zIG9uIG1lbWJlcnNcbiAgIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgInNldCIsICJmcm96ZW5zZXQiLCBhbmQgImRpY3QiLlxuICAgIl9faGFzaF9fKCkiIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5IHJlcXVpcmVkIHByb3BlcnR5XG4gICBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWU7IGl0IGlzXG4gICBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2hcbiAgIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0IGFsc28gcGxheSBhIHBhcnQgaW5cbiAgIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogImhhc2goKSIgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwnc1xuICAgICBjdXN0b20gIl9faGFzaF9fKCkiIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhICJQeV9zc2l6ZV90Ii4gIFRoaXNcbiAgICAgaXMgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXRcbiAgICAgYnVpbGRzLiBJZiBhbiBvYmplY3RcJ3MgICAiX19oYXNoX18oKSIgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzXG4gICAgIG9mIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbFxuICAgICBzdXBwb3J0ZWQgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJweXRob24gLWNcbiAgICAgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpIiJcblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gIl9fZXFfXygpIiBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgIl9faGFzaF9fKCkiIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXMgIl9fZXFfXygpIlxuICAgYnV0IG5vdCAiX19oYXNoX18oKSIsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmUgdXNhYmxlIGFzIGl0ZW1zIGluXG4gICBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lcyBtdXRhYmxlIG9iamVjdHMgYW5kXG4gICBpbXBsZW1lbnRzIGFuICJfX2VxX18oKSIgbWV0aG9kLCBpdCBzaG91bGQgbm90IGltcGxlbWVudFxuICAgIl9faGFzaF9fKCkiLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGUgY29sbGVjdGlvbnNcbiAgIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZSBvYmplY3RcJ3MgaGFzaFxuICAgdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlICJfX2VxX18oKSIgYW5kICJfX2hhc2hfXygpIiBtZXRob2RzIGJ5XG4gICBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCAieC5fX2hhc2hfXygpIiByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgInggPT0geSIgaW1wbGllcyBib3RoIHRoYXQgInggaXMgeSIgYW5kICJoYXNoKHgpID09IGhhc2goeSkiLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgYW5kIGRvZXMgbm90IGRlZmluZSAiX19oYXNoX18oKSJcbiAgIHdpbGwgaGF2ZSBpdHMgIl9faGFzaF9fKCkiIGltcGxpY2l0bHkgc2V0IHRvICJOb25lIi4gIFdoZW4gdGhlXG4gICAiX19oYXNoX18oKSIgbWV0aG9kIG9mIGEgY2xhc3MgaXMgIk5vbmUiLCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzXG4gICB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlICJUeXBlRXJyb3IiIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvXG4gICByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSIpLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgIl9faGFzaF9fKCkiIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZSBpbnRlcnByZXRlclxuICAgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nICJfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fIi5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlICJfX2VxX18oKSIgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlICJfX2hhc2hfXyA9IE5vbmUiIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gIl9faGFzaF9fKCkiIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgIlR5cGVFcnJvciIgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgaGFzaGFibGUgYnkgYW4gImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkiIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSAiX19oYXNoX18oKSIgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kXG4gICAgIGRhdGV0aW1lIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gIlBZVEhPTkhBU0hTRUVEIi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgImJvb2woKSI7IHNob3VsZCByZXR1cm4gIkZhbHNlIiBvciAiVHJ1ZSIuICBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdFxuICAgZGVmaW5lZCwgIl9fbGVuX18oKSIgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlIG9iamVjdCBpc1xuICAgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbmVpdGhlciAiX19sZW5fXygpIiBub3IgIl9fYm9vbF9fKCkiLCBhbGwgaXRzIGluc3RhbmNlcyBhcmVcbiAgIGNvbnNpZGVyZWQgdHJ1ZS5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgIngubmFtZSIpIGZvclxuY2xhc3MgaW5zdGFuY2VzLlxuXG5vYmplY3QuX19nZXRhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGxvb2t1cCBoYXMgbm90IGZvdW5kIHRoZSBhdHRyaWJ1dGUgaW4gdGhlXG4gICB1c3VhbCBwbGFjZXMgKGkuZS4gaXQgaXMgbm90IGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBub3IgaXMgaXQgZm91bmRcbiAgIGluIHRoZSBjbGFzcyB0cmVlIGZvciAic2VsZiIpLiAgIm5hbWUiIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS4gVGhpc1xuICAgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgZm91bmQgdGhyb3VnaCB0aGUgbm9ybWFsIG1lY2hhbmlzbSxcbiAgICJfX2dldGF0dHJfXygpIiBpcyBub3QgY2FsbGVkLiAgKFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgYXN5bW1ldHJ5XG4gICBiZXR3ZWVuICJfX2dldGF0dHJfXygpIiBhbmQgIl9fc2V0YXR0cl9fKCkiLikgVGhpcyBpcyBkb25lIGJvdGggZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMgYW5kIGJlY2F1c2Ugb3RoZXJ3aXNlICJfX2dldGF0dHJfXygpIiB3b3VsZCBoYXZlXG4gICBubyB3YXkgdG8gYWNjZXNzIG90aGVyIGF0dHJpYnV0ZXMgb2YgdGhlIGluc3RhbmNlLiAgTm90ZSB0aGF0IGF0XG4gICBsZWFzdCBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCB5b3UgY2FuIGZha2UgdG90YWwgY29udHJvbCBieSBub3RcbiAgIGluc2VydGluZyBhbnkgdmFsdWVzIGluIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSAoYnV0XG4gICBpbnN0ZWFkIGluc2VydGluZyB0aGVtIGluIGFub3RoZXIgb2JqZWN0KS4gIFNlZSB0aGVcbiAgICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lcyAiX19nZXRhdHRyX18oKSIsXG4gICB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3MgIl9fZ2V0YXR0cmlidXRlX18oKSIgZWl0aGVyXG4gICBjYWxscyBpdCBleHBsaWNpdGx5IG9yIHJhaXNlcyBhbiAiQXR0cmlidXRlRXJyb3IiLiBUaGlzIG1ldGhvZFxuICAgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLiBJbiBvcmRlciB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW5cbiAgIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzXG4gICBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yXG4gICBleGFtcGxlLCAib2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkiLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWxcbiAgICAgbWV0aG9kcyBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheFxuICAgICBvciBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwKi5cblxub2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgYXNzaWdubWVudCBpcyBhdHRlbXB0ZWQuICBUaGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1lY2hhbmlzbSAoaS5lLiBzdG9yZSB0aGUgdmFsdWUgaW4gdGhlXG4gICBpbnN0YW5jZSBkaWN0aW9uYXJ5KS4gKm5hbWUqIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSwgKnZhbHVlKiBpcyB0aGVcbiAgIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBJZiAiX19zZXRhdHRyX18oKSIgd2FudHMgdG8gYXNzaWduIHRvIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgaXRcbiAgIHNob3VsZCBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUsIGZvciBleGFtcGxlLFxuICAgIm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkiLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSAiX19zZXRhdHRyX18oKSIgYnV0IGZvciBhdHRyaWJ1dGUgZGVsZXRpb24gaW5zdGVhZCBvZlxuICAgYXNzaWdubWVudC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgImRlbCBvYmoubmFtZSIgaXNcbiAgIG1lYW5pbmdmdWwgZm9yIHRoZSBvYmplY3QuXG5cbm9iamVjdC5fX2Rpcl9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuICJkaXIoKSIgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuIEEgc2VxdWVuY2UgbXVzdCBiZVxuICAgcmV0dXJuZWQuICJkaXIoKSIgY29udmVydHMgdGhlIHJldHVybmVkIHNlcXVlbmNlIHRvIGEgbGlzdCBhbmRcbiAgIHNvcnRzIGl0LlxuXG5cbkltcGxlbWVudGluZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5jb250YWluaW5nIHRoZSBtZXRob2QgKGEgc28tY2FsbGVkICpkZXNjcmlwdG9yKiBjbGFzcykgYXBwZWFycyBpbiBhblxuKm93bmVyKiBjbGFzcyAodGhlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbiBlaXRoZXIgdGhlIG93bmVyXCdzIGNsYXNzXG5kaWN0aW9uYXJ5IG9yIGluIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGZvciBvbmUgb2YgaXRzIHBhcmVudHMpLiAgSW4gdGhlXG5leGFtcGxlcyBiZWxvdywgInRoZSBhdHRyaWJ1dGUiIHJlZmVycyB0byB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXNcbnRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBvd25lciBjbGFzc1wnICJfX2RpY3RfXyIuXG5cbm9iamVjdC5fX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcilcblxuICAgQ2FsbGVkIHRvIGdldCB0aGUgYXR0cmlidXRlIG9mIHRoZSBvd25lciBjbGFzcyAoY2xhc3MgYXR0cmlidXRlXG4gICBhY2Nlc3MpIG9yIG9mIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgKGluc3RhbmNlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKS4gKm93bmVyKiBpcyBhbHdheXMgdGhlIG93bmVyIGNsYXNzLCB3aGlsZSAqaW5zdGFuY2UqIGlzIHRoZVxuICAgaW5zdGFuY2UgdGhhdCB0aGUgYXR0cmlidXRlIHdhcyBhY2Nlc3NlZCB0aHJvdWdoLCBvciAiTm9uZSIgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuICJBdHRyaWJ1dGVFcnJvciJcbiAgIGV4Y2VwdGlvbi5cblxub2JqZWN0Ll9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXJcbiAgIGNsYXNzIHRvIGEgbmV3IHZhbHVlLCAqdmFsdWUqLlxuXG5vYmplY3QuX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgQ2FsbGVkIHRvIGRlbGV0ZSB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlXG4gICBvd25lciBjbGFzcy5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiLCBhbmRcbiJfX2RlbGV0ZV9fKCkiLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LCBpdFxuaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCAiYS54IiBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggImEuX19kaWN0X19bXCd4XCddIiwgdGhlblxuInR5cGUoYSkuX19kaWN0X19bXCd4XCddIiwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG4idHlwZShhKSIgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCAiYS54Ii4gSG93XG50aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiAiYSI6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgICJ4Ll9fZ2V0X18oYSkiLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgImEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6ICJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpIi5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCAiQS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgIkEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSkiLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiAiYSIgaXMgYW4gaW5zdGFuY2Ugb2YgInN1cGVyIiwgdGhlbiB0aGUgYmluZGluZyAic3VwZXIoQixcbiAgIG9iaikubSgpIiBzZWFyY2hlcyAib2JqLl9fY2xhc3NfXy5fX21yb19fIiBmb3IgdGhlIGJhc2UgY2xhc3MgIkEiXG4gICBpbW1lZGlhdGVseSBwcmVjZWRpbmcgIkIiIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3Igd2l0aCB0aGVcbiAgIGNhbGw6ICJBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXykiLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIgYW5kICJfX2RlbGV0ZV9fKCkiLiAgSWYgaXRcbmRvZXMgbm90IGRlZmluZSAiX19nZXRfXygpIiwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIHJldHVyblxudGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGUgb2JqZWN0XCdzXG5pbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyAiX19zZXRfXygpIiBhbmQvb3JcbiJfX2RlbGV0ZV9fKCkiLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lcyBuZWl0aGVyLCBpdCBpc1xuYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnMgZGVmaW5lIGJvdGhcbiJfX2dldF9fKCkiIGFuZCAiX19zZXRfXygpIiwgd2hpbGUgbm9uLWRhdGEgZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZVxuIl9fZ2V0X18oKSIgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoICJfX3NldF9fKCkiIGFuZCAiX19nZXRfXygpIlxuZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb24gaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluXG5jb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nICJzdGF0aWNtZXRob2QoKSIgYW5kICJjbGFzc21ldGhvZCgpIikgYXJlXG5pbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlICJwcm9wZXJ0eSgpIiBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxufn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzICJBdHRyaWJ1dGVFcnJvciIuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gICJcJ19fZGljdF9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3Nlc1xuICBkZWZpbmluZyAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzXG4gIGluc3RhbmNlcy4gSWYgd2VhayByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkXG4gICJcJ19fd2Vha3JlZl9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlXG4gIGluc3RhbmNlIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGVcbiAgKGV4Y2VwdCBieSByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLlxuICBUaGlzIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgImludCIsICJieXRlcyIgYW5kICJ0dXBsZSIuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5nc1xuICBtYXkgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG5cblxuQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIGNsYXNzZXMgYXJlIGNvbnN0cnVjdGVkIHVzaW5nICJ0eXBlKCkiLiBUaGUgY2xhc3MgYm9keSBpc1xuZXhlY3V0ZWQgaW4gYSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgY2xhc3MgbmFtZSBpcyBib3VuZCBsb2NhbGx5IHRvIHRoZVxucmVzdWx0IG9mICJ0eXBlKG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpIi5cblxuVGhlIGNsYXNzIGNyZWF0aW9uIHByb2Nlc3MgY2FuIGJlIGN1c3RvbWlzZWQgYnkgcGFzc2luZyB0aGVcbiJtZXRhY2xhc3MiIGtleXdvcmQgYXJndW1lbnQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gbGluZSwgb3IgYnlcbmluaGVyaXRpbmcgZnJvbSBhbiBleGlzdGluZyBjbGFzcyB0aGF0IGluY2x1ZGVkIHN1Y2ggYW4gYXJndW1lbnQuIEluXG50aGUgZm9sbG93aW5nIGV4YW1wbGUsIGJvdGggIk15Q2xhc3MiIGFuZCAiTXlTdWJjbGFzcyIgYXJlIGluc3RhbmNlc1xub2YgIk1ldGEiOlxuXG4gICBjbGFzcyBNZXRhKHR5cGUpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlDbGFzcyhtZXRhY2xhc3M9TWV0YSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeVN1YmNsYXNzKE15Q2xhc3MpOlxuICAgICAgIHBhc3NcblxuQW55IG90aGVyIGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxuYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGFsbCBtZXRhY2xhc3Mgb3BlcmF0aW9ucyBkZXNjcmliZWQgYmVsb3cuXG5cbldoZW4gYSBjbGFzcyBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9jY3VyOlxuXG4qIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaXMgZGV0ZXJtaW5lZFxuXG4qIHRoZSBjbGFzcyBuYW1lc3BhY2UgaXMgcHJlcGFyZWRcblxuKiB0aGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZFxuXG4qIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZFxuXG5cbkRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3Ncbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBmb3IgYSBjbGFzcyBkZWZpbml0aW9uIGlzIGRldGVybWluZWQgYXNcbmZvbGxvd3M6XG5cbiogaWYgbm8gYmFzZXMgYW5kIG5vIGV4cGxpY2l0IG1ldGFjbGFzcyBhcmUgZ2l2ZW4sIHRoZW4gInR5cGUoKSIgaXNcbiAgdXNlZFxuXG4qIGlmIGFuIGV4cGxpY2l0IG1ldGFjbGFzcyBpcyBnaXZlbiBhbmQgaXQgaXMgKm5vdCogYW4gaW5zdGFuY2Ugb2ZcbiAgInR5cGUoKSIsIHRoZW4gaXQgaXMgdXNlZCBkaXJlY3RseSBhcyB0aGUgbWV0YWNsYXNzXG5cbiogaWYgYW4gaW5zdGFuY2Ugb2YgInR5cGUoKSIgaXMgZ2l2ZW4gYXMgdGhlIGV4cGxpY2l0IG1ldGFjbGFzcywgb3JcbiAgYmFzZXMgYXJlIGRlZmluZWQsIHRoZW4gdGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgdXNlZFxuXG5UaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBzZWxlY3RlZCBmcm9tIHRoZSBleHBsaWNpdGx5IHNwZWNpZmllZFxubWV0YWNsYXNzIChpZiBhbnkpIGFuZCB0aGUgbWV0YWNsYXNzZXMgKGkuZS4gInR5cGUoY2xzKSIpIG9mIGFsbFxuc3BlY2lmaWVkIGJhc2UgY2xhc3Nlcy4gVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgb25lIHdoaWNoIGlzIGFcbnN1YnR5cGUgb2YgKmFsbCogb2YgdGhlc2UgY2FuZGlkYXRlIG1ldGFjbGFzc2VzLiBJZiBub25lIG9mIHRoZVxuY2FuZGlkYXRlIG1ldGFjbGFzc2VzIG1lZXRzIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uXG53aWxsIGZhaWwgd2l0aCAiVHlwZUVycm9yIi5cblxuXG5QcmVwYXJpbmcgdGhlIGNsYXNzIG5hbWVzcGFjZVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGhhcyBiZWVuIGlkZW50aWZpZWQsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgcHJlcGFyZWQuIElmIHRoZSBtZXRhY2xhc3MgaGFzIGEgIl9fcHJlcGFyZV9fIiBhdHRyaWJ1dGUsXG5pdCBpcyBjYWxsZWQgYXMgIm5hbWVzcGFjZSA9IG1ldGFjbGFzcy5fX3ByZXBhcmVfXyhuYW1lLCBiYXNlcyxcbioqa3dkcykiICh3aGVyZSB0aGUgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgaWYgYW55LCBjb21lIGZyb21cbnRoZSBjbGFzcyBkZWZpbml0aW9uKS5cblxuSWYgdGhlIG1ldGFjbGFzcyBoYXMgbm8gIl9fcHJlcGFyZV9fIiBhdHRyaWJ1dGUsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgaW5pdGlhbGlzZWQgYXMgYW4gZW1wdHkgImRpY3QoKSIgaW5zdGFuY2UuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMzAwMFxuXG4gICAgIEludHJvZHVjZWQgdGhlICJfX3ByZXBhcmVfXyIgbmFtZXNwYWNlIGhvb2tcblxuXG5FeGVjdXRpbmcgdGhlIGNsYXNzIGJvZHlcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZCAoYXBwcm94aW1hdGVseSkgYXMgImV4ZWMoYm9keSwgZ2xvYmFscygpLFxubmFtZXNwYWNlKSIuIFRoZSBrZXkgZGlmZmVyZW5jZSBmcm9tIGEgbm9ybWFsIGNhbGwgdG8gImV4ZWMoKSIgaXMgdGhhdFxubGV4aWNhbCBzY29waW5nIGFsbG93cyB0aGUgY2xhc3MgYm9keSAoaW5jbHVkaW5nIGFueSBtZXRob2RzKSB0b1xucmVmZXJlbmNlIG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYW5kIG91dGVyIHNjb3BlcyB3aGVuIHRoZSBjbGFzc1xuZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIGEgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIGV2ZW4gd2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIHRoZSBmdW5jdGlvbixcbm1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHN0aWxsIGNhbm5vdCBzZWUgbmFtZXMgZGVmaW5lZCBhdCB0aGVcbmNsYXNzIHNjb3BlLiBDbGFzcyB2YXJpYWJsZXMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBmaXJzdFxucGFyYW1ldGVyIG9mIGluc3RhbmNlIG9yIGNsYXNzIG1ldGhvZHMsIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgYXQgYWxsXG5mcm9tIHN0YXRpYyBtZXRob2RzLlxuXG5cbkNyZWF0aW5nIHRoZSBjbGFzcyBvYmplY3Rcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgY2xhc3MgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBieSBleGVjdXRpbmcgdGhlIGNsYXNzXG5ib2R5LCB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgY2FsbGluZyAibWV0YWNsYXNzKG5hbWUsIGJhc2VzLFxubmFtZXNwYWNlLCAqKmt3ZHMpIiAodGhlIGFkZGl0aW9uYWwga2V5d29yZHMgcGFzc2VkIGhlcmUgYXJlIHRoZSBzYW1lXG5hcyB0aG9zZSBwYXNzZWQgdG8gIl9fcHJlcGFyZV9fIikuXG5cblRoaXMgY2xhc3Mgb2JqZWN0IGlzIHRoZSBvbmUgdGhhdCB3aWxsIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHplcm8tXG5hcmd1bWVudCBmb3JtIG9mICJzdXBlcigpIi4gIl9fY2xhc3NfXyIgaXMgYW4gaW1wbGljaXQgY2xvc3VyZVxucmVmZXJlbmNlIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGlmIGFueSBtZXRob2RzIGluIGEgY2xhc3MgYm9keSByZWZlclxudG8gZWl0aGVyICJfX2NsYXNzX18iIG9yICJzdXBlciIuIFRoaXMgYWxsb3dzIHRoZSB6ZXJvIGFyZ3VtZW50IGZvcm1cbm9mICJzdXBlcigpIiB0byBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlIGNsYXNzIGJlaW5nIGRlZmluZWQgYmFzZWQgb25cbmxleGljYWwgc2NvcGluZywgd2hpbGUgdGhlIGNsYXNzIG9yIGluc3RhbmNlIHRoYXQgd2FzIHVzZWQgdG8gbWFrZSB0aGVcbmN1cnJlbnQgY2FsbCBpcyBpZGVudGlmaWVkIGJhc2VkIG9uIHRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlXG5tZXRob2QuXG5cbkFmdGVyIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCwgaXQgaXMgcGFzc2VkIHRvIHRoZSBjbGFzc1xuZGVjb3JhdG9ycyBpbmNsdWRlZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiAoaWYgYW55KSBhbmQgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgYXMgdGhlIGRlZmluZWQgY2xhc3MuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTM1KiogLSBOZXcgc3VwZXJcblxuICAgICBEZXNjcmliZXMgdGhlIGltcGxpY2l0ICJfX2NsYXNzX18iIGNsb3N1cmUgcmVmZXJlbmNlXG5cblxuTWV0YWNsYXNzIGV4YW1wbGVcbi0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkZSBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuImNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IiB0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyBtZW1iZXJzXG53ZXJlIGRlZmluZWQ6XG5cbiAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKTpcblxuICAgICAgICBAY2xhc3NtZXRob2RcbiAgICAgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIG5hbWUsIGJhc2VzLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKVxuXG4gICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiprd2RzKTpcbiAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QobmFtZXNwYWNlKSlcbiAgICAgICAgICAgcmVzdWx0Lm1lbWJlcnMgPSB0dXBsZShuYW1lc3BhY2UpXG4gICAgICAgICAgIHJldHVybiByZXN1bHRcblxuICAgY2xhc3MgQShtZXRhY2xhc3M9T3JkZXJlZENsYXNzKTpcbiAgICAgICBkZWYgb25lKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHR3byhzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0aHJlZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiBmb3VyKHNlbGYpOiBwYXNzXG5cbiAgID4+PiBBLm1lbWJlcnNcbiAgIChcJ19fbW9kdWxlX19cJywgXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnLCBcJ2ZvdXJcJylcblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgKkEqIGdldHMgZXhlY3V0ZWQsIHRoZSBwcm9jZXNzIGJlZ2luc1xud2l0aCBjYWxsaW5nIHRoZSBtZXRhY2xhc3NcJ3MgIl9fcHJlcGFyZV9fKCkiIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuXG5lbXB0eSAiY29sbGVjdGlvbnMuT3JkZXJlZERpY3QiLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHMgYW5kXG5hdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgZ2V0c1xuaW52b2tlZC4gIFRoYXQgbWV0aG9kIGJ1aWxkcyB0aGUgbmV3IHR5cGUgYW5kIGl0IHNhdmVzIHRoZSBvcmRlcmVkXG5kaWN0aW9uYXJ5IGtleXMgaW4gYW4gYXR0cmlidXRlIGNhbGxlZCAibWVtYmVycyIuXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG4iaXNpbnN0YW5jZSgpIiBhbmQgImlzc3ViY2xhc3MoKSIgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5JbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzICJhYmMuQUJDTWV0YSIgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzIGluXG5vcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICAiaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xhc3MpIi5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgICJpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcykiLlxuXG5Ob3RlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgbG9va2VkIHVwIG9uIHRoZSB0eXBlIChtZXRhY2xhc3MpIG9mIGFcbmNsYXNzLiAgVGhleSBjYW5ub3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzIGluIHRoZSBhY3R1YWwgY2xhc3MuXG5UaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWRcbm9uIGluc3RhbmNlcywgb25seSBpbiB0aGlzIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExOSoqIC0gSW50cm9kdWNpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzXG5cbiAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nICJpc2luc3RhbmNlKCkiIGFuZFxuICAgICAiaXNzdWJjbGFzcygpIiBiZWhhdmlvciB0aHJvdWdoICJfX2luc3RhbmNlY2hlY2tfXygpIiBhbmRcbiAgICAgIl9fc3ViY2xhc3NjaGVja19fKCkiLCB3aXRoIG1vdGl2YXRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBpblxuICAgICB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlICJhYmMiXG4gICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsICJ4KGFyZzEsIGFyZzIsIC4uLikiIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgInguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKSIuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCAiMCA8PSBrIDwgTiIgd2hlcmVcbipOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2ggZGVmaW5lIGFcbnJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGUgdGhlXG5tZXRob2RzICJrZXlzKCkiLCAidmFsdWVzKCkiLCAiaXRlbXMoKSIsICJnZXQoKSIsICJjbGVhcigpIixcbiJzZXRkZWZhdWx0KCkiLCAicG9wKCkiLCAicG9waXRlbSgpIiwgImNvcHkoKSIsIGFuZCAidXBkYXRlKCkiXG5iZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmQgZGljdGlvbmFyeSBvYmplY3RzLlxuVGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlIHByb3ZpZGVzIGEgIk11dGFibGVNYXBwaW5nIiBhYnN0cmFjdCBiYXNlXG5jbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzIGZyb20gYSBiYXNlIHNldCBvZiAiX19nZXRpdGVtX18oKSIsXG4iX19zZXRpdGVtX18oKSIsICJfX2RlbGl0ZW1fXygpIiwgYW5kICJrZXlzKCkiLiBNdXRhYmxlIHNlcXVlbmNlc1xuc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyAiYXBwZW5kKCkiLCAiY291bnQoKSIsICJpbmRleCgpIiwgImV4dGVuZCgpIixcbiJpbnNlcnQoKSIsICJwb3AoKSIsICJyZW1vdmUoKSIsICJyZXZlcnNlKCkiIGFuZCAic29ydCgpIiwgbGlrZSBQeXRob25cbnN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZCBpbXBsZW1lbnRcbmFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgIl9fYWRkX18oKSIsICJfX3JhZGRfXygpIixcbiJfX2lhZGRfXygpIiwgIl9fbXVsX18oKSIsICJfX3JtdWxfXygpIiBhbmQgIl9faW11bF9fKCkiIGRlc2NyaWJlZFxuYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG4iX19jb250YWluc19fKCkiIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSAiaW4iIG9wZXJhdG9yO1xuZm9yIG1hcHBpbmdzLCAiaW4iIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yIHNlcXVlbmNlcywgaXRcbnNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlciByZWNvbW1lbmRlZCB0aGF0IGJvdGhcbm1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZSAiX19pdGVyX18oKSIgbWV0aG9kIHRvIGFsbG93XG5lZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCAiX19pdGVyX18oKSJcbnNob3VsZCBiZSB0aGUgc2FtZSBhcyAia2V5cygpIjsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGVcbnRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIi4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciAiPj0iIDAuICBBbHNvLCBhbiBvYmplY3QgdGhhdFxuICAgZG9lc25cJ3QgZGVmaW5lIGEgIl9fYm9vbF9fKCkiIG1ldGhvZCBhbmQgd2hvc2UgIl9fbGVuX18oKSIgbWV0aG9kXG4gICByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLlxuICBBIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoICJOb25lIi5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mICJzZWxmW2tleV0iLiBGb3Igc2VxdWVuY2UgdHlwZXMsXG4gICB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuICBOb3RlIHRoYXRcbiAgIHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZSBjbGFzcyB3aXNoZXNcbiAgIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC4gSWZcbiAgICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSwgIlR5cGVFcnJvciIgbWF5IGJlIHJhaXNlZDsgaWYgb2ZcbiAgIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55XG4gICBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIHZhbHVlcyksICJJbmRleEVycm9yIiBzaG91bGQgYmVcbiAgIHJhaXNlZC4gRm9yIG1hcHBpbmcgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGVcbiAgIGNvbnRhaW5lciksICJLZXlFcnJvciIgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogImZvciIgbG9vcHMgZXhwZWN0IHRoYXQgYW4gIkluZGV4RXJyb3IiIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kICJrZXlzKCkiLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSAicmV2ZXJzZWQoKSIgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlICJfX3JldmVyc2VkX18oKSIgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlICJyZXZlcnNlZCgpIlxuICAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlIHByb3RvY29sICgiX19sZW5fXygpIlxuICAgYW5kICJfX2dldGl0ZW1fXygpIikuICBPYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2xcbiAgIHNob3VsZCBvbmx5IHByb3ZpZGUgIl9fcmV2ZXJzZWRfXygpIiBpZiB0aGV5IGNhbiBwcm92aWRlIGFuXG4gICBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieVxuICAgInJldmVyc2VkKCkiLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoImluIiBhbmQgIm5vdCBpbiIpIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uXCd0IGRlZmluZSAiX19jb250YWluc19fKCkiLCB0aGUgbWVtYmVyc2hpcCB0ZXN0XG4gICBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhICJfX2l0ZXJfXygpIiwgdGhlbiB0aGUgb2xkIHNlcXVlbmNlXG4gICBpdGVyYXRpb24gcHJvdG9jb2wgdmlhICJfX2dldGl0ZW1fXygpIiwgc2VlICp0aGlzIHNlY3Rpb24gaW4gdGhlXG4gICBsYW5ndWFnZSByZWZlcmVuY2UqLlxuXG5cbkVtdWxhdGluZyBudW1lcmljIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZW11bGF0ZSBudW1lcmljIG9iamVjdHMuXG5NZXRob2RzIGNvcnJlc3BvbmRpbmcgdG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZVxucGFydGljdWxhciBraW5kIG9mIG51bWJlciBpbXBsZW1lbnRlZCAoZS5nLiwgYml0d2lzZSBvcGVyYXRpb25zIGZvclxubm9uLWludGVncmFsIG51bWJlcnMpIHNob3VsZCBiZSBsZWZ0IHVuZGVmaW5lZC5cblxub2JqZWN0Ll9fYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19zdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX211bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19wb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19sc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX194b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX29yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGVcbiAgIGV4cHJlc3Npb24gInggKyB5Iiwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW5cbiAgICJfX2FkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgaXMgY2FsbGVkLiAgVGhlICJfX2Rpdm1vZF9fKCkiXG4gICBtZXRob2Qgc2hvdWxkIGJlIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nICJfX2Zsb29yZGl2X18oKSIgYW5kXG4gICAiX19tb2RfXygpIjsgaXQgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvICJfX3RydWVkaXZfXygpIi4gIE5vdGVcbiAgIHRoYXQgIl9fcG93X18oKSIgc2hvdWxkIGJlIGRlZmluZWQgdG8gYWNjZXB0IGFuIG9wdGlvbmFsIHRoaXJkXG4gICBhcmd1bWVudCBpZiB0aGUgdGVybmFyeSB2ZXJzaW9uIG9mIHRoZSBidWlsdC1pbiAicG93KCkiIGZ1bmN0aW9uIGlzXG4gICB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuICJOb3RJbXBsZW1lbnRlZCIuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKSB3aXRoIHJlZmxlY3RlZCAoc3dhcHBlZCkgb3BlcmFuZHMuXG4gICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZG9lcyBub3RcbiAgIHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGFuZCB0aGUgb3BlcmFuZHMgYXJlIG9mXG4gICBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiAieCAtXG4gICB5Iiwgd2hlcmUgKnkqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gIl9fcnN1Yl9fKCkiXG4gICBtZXRob2QsICJ5Ll9fcnN1Yl9fKHgpIiBpcyBjYWxsZWQgaWYgInguX19zdWJfXyh5KSIgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgInBvdygpIiB3aWxsIG5vdCB0cnkgY2FsbGluZyAiX19ycG93X18oKSIgKHRoZVxuICAgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYSBzdWJjbGFzcyBvZiB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIHR5cGUgYW5kIHRoYXQgc3ViY2xhc3MgcHJvdmlkZXMgdGhlIHJlZmxlY3RlZCBtZXRob2RcbiAgICAgZm9yIHRoZSBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3Nlc1xuICAgICB0byBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnNcJyBvcGVyYXRpb25zLlxuXG5vYmplY3QuX19pYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9faWxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGF1Z21lbnRlZCBhcml0aG1ldGljXG4gICBhc3NpZ25tZW50cyAoIis9IiwgIi09IiwgIio9IiwgIi89IiwgIi8vPSIsICIlPSIsICIqKj0iLCAiPDw9IixcbiAgICI+Pj0iLCAiJj0iLCAiXj0iLCAifD0iKS4gIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlXG4gICBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZCByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2hcbiAgIGNvdWxkIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSwgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZCBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbFxuICAgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgdG8gZXhlY3V0ZSB0aGUgc3RhdGVtZW50ICJ4ICs9IHkiLCB3aGVyZVxuICAgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gIl9faWFkZF9fKCkiIG1ldGhvZCxcbiAgICJ4Ll9faWFkZF9fKHkpIiBpcyBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0XG4gICBkb2VzIG5vdCBkZWZpbmUgYSAiX19pYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBhbmRcbiAgICJ5Ll9fcmFkZF9fKHgpIiBhcmUgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiAieCArIHkiLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKCItIiwgIisiLFxuICAgImFicygpIiBhbmQgIn4iKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiY29tcGxleCgpIiwgImludCgpIixcbiAgICJmbG9hdCgpIiBhbmQgInJvdW5kKCkiLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZVxuICAgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5pbmRleCgpIi4gIEFsc28gY2FsbGVkIHdoZW5ldmVyXG4gICBQeXRob24gbmVlZHMgYW4gaW50ZWdlciBvYmplY3QgKHN1Y2ggYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlXG4gICBidWlsdC1pbiAiYmluKCkiLCAiaGV4KCkiIGFuZCAib2N0KCkiIGZ1bmN0aW9ucykuIE11c3QgcmV0dXJuIGFuXG4gICBpbnRlZ2VyLlxuXG5cbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgIndpdGgiIHN0YXRlbWVudC4gVGhlIGNvbnRleHQgbWFuYWdlclxuaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWUgY29udGV4dFxuZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBub3JtYWxseVxuaW52b2tlZCB1c2luZyB0aGUgIndpdGgiIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb24gKlRoZSB3aXRoXG5zdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXIgbWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgIndpdGgiXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlICJhcyIgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgIk5vbmUiLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCAiX19leGl0X18oKSIgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cblxuXG5TcGVjaWFsIG1ldGhvZCBsb29rdXBcbj09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3IgY3VzdG9tIGNsYXNzZXMsIGltcGxpY2l0IGludm9jYXRpb25zIG9mIHNwZWNpYWwgbWV0aG9kcyBhcmUgb25seVxuZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBpZiBkZWZpbmVkIG9uIGFuIG9iamVjdFwncyB0eXBlLCBub3QgaW5cbnRoZSBvYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIFRoYXQgYmVoYXZpb3VyIGlzIHRoZSByZWFzb24gd2h5XG50aGUgZm9sbG93aW5nIGNvZGUgcmFpc2VzIGFuIGV4Y2VwdGlvbjpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18gPSBsYW1iZGE6IDVcbiAgID4+PiBsZW4oYylcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogb2JqZWN0IG9mIHR5cGUgXCdDXCcgaGFzIG5vIGxlbigpXG5cblRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYmVoYXZpb3VyIGxpZXMgd2l0aCBhIG51bWJlciBvZiBzcGVjaWFsXG5tZXRob2RzIHN1Y2ggYXMgIl9faGFzaF9fKCkiIGFuZCAiX19yZXByX18oKSIgdGhhdCBhcmUgaW1wbGVtZW50ZWQgYnlcbmFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mIHRoZXNlXG5tZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsIHdoZW5cbmludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1ldGhvZCBldmVuIG9mIHRoZSBvYmplY3RcJ3MgbWV0YWNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgTWV0YSh0eXBlKTpcbiAgIC4uLiAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgcHJpbnQoIk1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgcmV0dXJuIHR5cGUuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGNsYXNzIEMob2JqZWN0LCBtZXRhY2xhc3M9TWV0YSk6XG4gICAuLi4gICAgIGRlZiBfX2xlbl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIDEwXG4gICAuLi4gICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICAgIHByaW50KCJDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fKCkgICAgICAgICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSBpbnN0YW5jZVxuICAgQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gdHlwZShjKS5fX2xlbl9fKGMpICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSB0eXBlXG4gICBNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gbGVuKGMpICAgICAgICAgICAgICAgICAgICAgICMgSW1wbGljaXQgbG9va3VwXG4gICAxMFxuXG5CeXBhc3NpbmcgdGhlICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb24gcHJvdmlkZXNcbnNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGUgaW50ZXJwcmV0ZXIsIGF0XG50aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiBzcGVjaWFsIG1ldGhvZHMgKHRoZVxuc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0IGl0c2VsZiBpbiBvcmRlciB0byBiZVxuY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLFxuICAgIHVuZGVyIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZFxuICAgIGlkZWEgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWZcbiAgICBpdCBpcyBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgIl9fYWRkX18oKSIpIGZhaWxzIHRoZSBvcGVyYXRpb24gaXMgbm90XG4gICAgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCi0gJ3N0cmluZy1tZXRob2RzJzogJ1xuU3RyaW5nIE1ldGhvZHNcbioqKioqKioqKioqKioqXG5cblN0cmluZ3MgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucywgYWxvbmcgd2l0aFxudGhlIGFkZGl0aW9uYWwgbWV0aG9kcyBkZXNjcmliZWQgYmVsb3cuXG5cblN0cmluZ3MgYWxzbyBzdXBwb3J0IHR3byBzdHlsZXMgb2Ygc3RyaW5nIGZvcm1hdHRpbmcsIG9uZSBwcm92aWRpbmcgYVxubGFyZ2UgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGFuZCBjdXN0b21pemF0aW9uIChzZWUgInN0ci5mb3JtYXQoKSIsXG4qRm9ybWF0IFN0cmluZyBTeW50YXgqIGFuZCAqU3RyaW5nIEZvcm1hdHRpbmcqKSBhbmQgdGhlIG90aGVyIGJhc2VkIG9uXG5DICJwcmludGYiIHN0eWxlIGZvcm1hdHRpbmcgdGhhdCBoYW5kbGVzIGEgbmFycm93ZXIgcmFuZ2Ugb2YgdHlwZXMgYW5kXG5pcyBzbGlnaHRseSBoYXJkZXIgdG8gdXNlIGNvcnJlY3RseSwgYnV0IGlzIG9mdGVuIGZhc3RlciBmb3IgdGhlIGNhc2VzXG5pdCBjYW4gaGFuZGxlICgqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKikuXG5cblRoZSAqVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzKiBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNvdmVyc1xuYSBudW1iZXIgb2Ygb3RoZXIgbW9kdWxlcyB0aGF0IHByb3ZpZGUgdmFyaW91cyB0ZXh0IHJlbGF0ZWQgdXRpbGl0aWVzXG4oaW5jbHVkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IGluIHRoZSAicmUiIG1vZHVsZSkuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jYXNlZm9sZCgpXG5cbiAgIFJldHVybiBhIGNhc2Vmb2xkZWQgY29weSBvZiB0aGUgc3RyaW5nLiBDYXNlZm9sZGVkIHN0cmluZ3MgbWF5IGJlXG4gICB1c2VkIGZvciBjYXNlbGVzcyBtYXRjaGluZy5cblxuICAgQ2FzZWZvbGRpbmcgaXMgc2ltaWxhciB0byBsb3dlcmNhc2luZyBidXQgbW9yZSBhZ2dyZXNzaXZlIGJlY2F1c2VcbiAgIGl0IGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgY2FzZSBkaXN0aW5jdGlvbnMgaW4gYSBzdHJpbmcuIEZvclxuICAgZXhhbXBsZSwgdGhlIEdlcm1hbiBsb3dlcmNhc2UgbGV0dGVyICJcJ1x4YzNceDlmXCciIGlzIGVxdWl2YWxlbnQgdG8gIiJzcyIiLlxuICAgU2luY2UgaXQgaXMgYWxyZWFkeSBsb3dlcmNhc2UsICJsb3dlcigpIiB3b3VsZCBkbyBub3RoaW5nIHRvICJcJ1x4YzNceDlmXCciO1xuICAgImNhc2Vmb2xkKCkiIGNvbnZlcnRzIGl0IHRvICIic3MiIi5cblxuICAgVGhlIGNhc2Vmb2xkaW5nIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBhcyBhIGJ5dGVzIG9iamVjdC4gRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgIlwndXRmLThcJyIuICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnRcbiAgIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzICJcJ3N0cmljdFwnIixcbiAgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSAiVW5pY29kZUVycm9yIi4gT3RoZXIgcG9zc2libGVcbiAgIHZhbHVlcyBhcmUgIlwnaWdub3JlXCciLCAiXCdyZXBsYWNlXCciLCAiXCd4bWxjaGFycmVmcmVwbGFjZVwnIixcbiAgICJcJ2JhY2tzbGFzaHJlcGxhY2VcJyIgYW5kIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgdmlhXG4gICAiY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCkiLCBzZWUgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yIGFcbiAgIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuICJGYWxzZSIuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHN1ZmZpeGVzXG4gICB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyhbdGFic2l6ZV0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBjaGFyYWN0ZXJzXG4gICAoZGVmYXVsdCBpcyA4LCBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuXG4gICBUbyBleHBhbmQgdGhlIHN0cmluZywgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGVcbiAgIHN0cmluZyBpcyBleGFtaW5lZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICB0YWIgKCJcXHQiKSwgb25lIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIHJlc3VsdFxuICAgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi4gKFRoZVxuICAgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90IGNvcGllZC4pICBJZiB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZVxuICAgKCJcXG4iKSBvciByZXR1cm4gKCJcXHIiKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXNcbiAgIHJlc2V0IHRvIHplcm8uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGNvcGllZCB1bmNoYW5nZWQgYW5kIHRoZVxuICAgY3VycmVudCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZVxuICAgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHdoZW4gcHJpbnRlZC5cblxuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKClcbiAgIFwnMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzRcJ1xuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKDQpXG4gICBcJzAxICAwMTIgMDEyMyAgICAwMTIzNFwnXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgInNbc3RhcnQ6ZW5kXSIuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiAiLTEiIGlmICpzdWIqIGlzIG5vdCBmb3VuZC5cblxuICAgTm90ZTogVGhlICJmaW5kKCkiIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBvbmx5IGlmIHlvdSBuZWVkIHRvIGtub3dcbiAgICAgdGhlIHBvc2l0aW9uIG9mICpzdWIqLiAgVG8gY2hlY2sgaWYgKnN1YiogaXMgYSBzdWJzdHJpbmcgb3Igbm90LFxuICAgICB1c2UgdGhlICJpbiIgb3BlcmF0b3I6XG5cbiAgICAgICAgPj4+IFwnUHlcJyBpbiBcJ1B5dGhvblwnXG4gICAgICAgIFRydWVcblxuc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpXG5cbiAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXNcbiAgIG1ldGhvZCBpcyBjYWxsZWQgY2FuIGNvbnRhaW4gbGl0ZXJhbCB0ZXh0IG9yIHJlcGxhY2VtZW50IGZpZWxkc1xuICAgZGVsaW1pdGVkIGJ5IGJyYWNlcyAie30iLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXJcbiAgIHRoZSBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYVxuICAga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgZWFjaFxuICAgcmVwbGFjZW1lbnQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZVxuICAgY29ycmVzcG9uZGluZyBhcmd1bWVudC5cblxuICAgPj4+ICJUaGUgc3VtIG9mIDEgKyAyIGlzIHswfSIuZm9ybWF0KDErMilcbiAgIFwnVGhlIHN1bSBvZiAxICsgMiBpcyAzXCdcblxuICAgU2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXNcbiAgIGZvcm1hdHRpbmcgb3B0aW9ucyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybWF0IHN0cmluZ3MuXG5cbnN0ci5mb3JtYXRfbWFwKG1hcHBpbmcpXG5cbiAgIFNpbWlsYXIgdG8gInN0ci5mb3JtYXQoKiptYXBwaW5nKSIsIGV4Y2VwdCB0aGF0ICJtYXBwaW5nIiBpcyB1c2VkXG4gICBkaXJlY3RseSBhbmQgbm90IGNvcGllZCB0byBhICJkaWN0Ii4gIFRoaXMgaXMgdXNlZnVsIGlmIGZvciBleGFtcGxlXG4gICAibWFwcGluZyIgaXMgYSBkaWN0IHN1YmNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgRGVmYXVsdChkaWN0KTpcbiAgIC4uLiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6XG4gICAuLi4gICAgICAgICByZXR1cm4ga2V5XG4gICAuLi5cbiAgID4+PiBcJ3tuYW1lfSB3YXMgYm9ybiBpbiB7Y291bnRyeX1cJy5mb3JtYXRfbWFwKERlZmF1bHQobmFtZT1cJ0d1aWRvXCcpKVxuICAgXCdHdWlkbyB3YXMgYm9ybiBpbiBjb3VudHJ5XCdcblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5zdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSAiZmluZCgpIiwgYnV0IHJhaXNlICJWYWx1ZUVycm9yIiB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBIGNoYXJhY3RlciAiYyJcbiAgIGlzIGFscGhhbnVtZXJpYyBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zICJUcnVlIjpcbiAgICJjLmlzYWxwaGEoKSIsICJjLmlzZGVjaW1hbCgpIiwgImMuaXNkaWdpdCgpIiwgb3IgImMuaXNudW1lcmljKCkiLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgIGZvcm0gZGVjaW1hbC1yYWRpeCBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG4gICBVc2UgImtleXdvcmQuaXNrZXl3b3JkKCkiIHRvIHRlc3QgZm9yIHJlc2VydmVkIGlkZW50aWZpZXJzIHN1Y2ggYXNcbiAgICJkZWYiIGFuZCAiY2xhc3MiLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSBsb3dlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBudW1lcmljIGNoYXJhY3RlcnMsXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBOdW1lcmljXG4gICBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZVxuICAgdGhlIFVuaWNvZGUgbnVtZXJpYyB2YWx1ZSBwcm9wZXJ0eSwgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTlxuICAgT05FIEZJRlRILiAgRm9ybWFsbHksIG51bWVyaWMgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCB0aGVcbiAgIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCwgTnVtZXJpY19UeXBlPURlY2ltYWwgb3JcbiAgIE51bWVyaWNfVHlwZT1OdW1lcmljLlxuXG5zdHIuaXNwcmludGFibGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBwcmludGFibGUgb3IgdGhlXG4gICBzdHJpbmcgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gIE5vbnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZVxuICAgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlciBkYXRhYmFzZSBhc1xuICAgIk90aGVyIiBvciAiU2VwYXJhdG9yIiwgZXhjZXB0aW5nIHRoZSBBU0NJSSBzcGFjZSAoMHgyMCkgd2hpY2ggaXNcbiAgIGNvbnNpZGVyZWQgcHJpbnRhYmxlLiAgKE5vdGUgdGhhdCBwcmludGFibGUgY2hhcmFjdGVycyBpbiB0aGlzXG4gICBjb250ZXh0IGFyZSB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIGVzY2FwZWQgd2hlbiAicmVwcigpIiBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvICJzeXMuc3Rkb3V0IiBvciAic3lzLnN0ZGVyciIuKVxuXG5zdHIuaXNzcGFjZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgV2hpdGVzcGFjZVxuICAgY2hhcmFjdGVycyAgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJPdGhlciIgb3IgIlNlcGFyYXRvciIgYW5kIHRob3NlIHdpdGggYmlkaXJlY3Rpb25hbFxuICAgcHJvcGVydHkgYmVpbmcgb25lIG9mICJXUyIsICJCIiwgb3IgIlMiLlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBBICJUeXBlRXJyb3IiIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICppdGVyYWJsZSosIGluY2x1ZGluZyAiYnl0ZXMiIG9iamVjdHMuXG4gICBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlIHN0cmluZyBwcm92aWRpbmcgdGhpcyBtZXRob2QuXG5cbnN0ci5sanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgbGVmdCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3JcbiAgIGVxdWFsIHRvICJsZW4ocykiLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBUaGUgbG93ZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci5sc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuc3RhdGljIHN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pXG5cbiAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvclxuICAgInN0ci50cmFuc2xhdGUoKSIuXG5cbiAgIElmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nXG4gICBVbmljb2RlIG9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyAoc3RyaW5ncyBvZiBsZW5ndGggMSkgdG9cbiAgIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MgKG9mIGFyYml0cmFyeSBsZW5ndGhzKSBvciBOb25lLlxuICAgQ2hhcmFjdGVyIGtleXMgd2lsbCB0aGVuIGJlIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblxuICAgSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCxcbiAgIGFuZCBpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWRcbiAgIHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gIElmIHRoZXJlIGlzIGEgdGhpcmRcbiAgIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvXG4gICBOb25lIGluIHRoZSByZXN1bHQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbnN0ci5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpvbGQqXG4gICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5XG4gICB0aGUgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuXG5cbnN0ci5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiAic1tzdGFydDplbmRdIi5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuICItMSIgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlICJyZmluZCgpIiBidXQgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbnN0ci5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgICJOb25lIiwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvciBzcGxpdHRpbmdcbiAgIGZyb20gdGhlIHJpZ2h0LCAicnNwbGl0KCkiIGJlaGF2ZXMgbGlrZSAic3BsaXQoKSIgd2hpY2ggaXNcbiAgIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG5zdHIuc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuICBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCpcbiAgIHNwbGl0cyBhcmUgZG9uZSAodGh1cywgdGhlIGxpc3Qgd2lsbCBoYXZlIGF0IG1vc3QgIm1heHNwbGl0KzEiXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgIi0xIiwgdGhlbiB0aGVyZSBpc1xuICAgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICAiXCcxLCwyXCcuc3BsaXQoXCcsXCcpIiByZXR1cm5zICJbXCcxXCcsIFwnXCcsIFwnMlwnXSIpLiAgVGhlICpzZXAqIGFyZ3VtZW50XG4gICBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgICJcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpIiByZXR1cm5zICJbXCcxXCcsIFwnMlwnLCBcJzNcJ10iKS4gU3BsaXR0aW5nIGFuXG4gICBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyAiW1wnXCddIi5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyAiTm9uZSIsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhICJOb25lIiBzZXBhcmF0b3IgcmV0dXJucyAiW10iLlxuXG4gICBGb3IgZXhhbXBsZSwgIlwnIDEgIDIgICAzICBcJy5zcGxpdCgpIiByZXR1cm5zICJbXCcxXCcsIFwnMlwnLCBcJzNcJ10iLCBhbmRcbiAgICJcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpIiByZXR1cm5zICJbXCcxXCcsIFwnMiAgIDMgIFwnXSIuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuIFRoaXMgbWV0aG9kIHVzZXMgdGhlICp1bml2ZXJzYWwgbmV3bGluZXMqIGFwcHJvYWNoIHRvXG4gICBzcGxpdHRpbmcgbGluZXMuIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuICAgRm9yIGV4YW1wbGUsICJcJ2FiIGNcXG5cXG5kZSBmZ1xccmtsXFxyXFxuXCcuc3BsaXRsaW5lcygpIiByZXR1cm5zICJbXCdhYlxuICAgY1wnLCBcJ1wnLCBcJ2RlIGZnXCcsIFwna2xcJ10iLCB3aGlsZSB0aGUgc2FtZSBjYWxsIHdpdGhcbiAgICJzcGxpdGxpbmVzKFRydWUpIiByZXR1cm5zICJbXCdhYiBjXFxuXCcsIFwnXFxuXCcsIFwnZGUgZmdcXHJcJywgXCdrbFxcclxcblwnXSIuXG5cbiAgIFVubGlrZSAic3BsaXQoKSIgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXNcbiAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsXG4gICBsaW5lIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lLlxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZSByZXR1cm5cbiAgICJGYWxzZSIuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9vayBmb3IuXG4gICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuICAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXQgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKlxuICAgYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycyogYXJndW1lbnQgaXNcbiAgIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZVxuICAgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgXCdzcGFjaW91c1wnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlXCdcblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB0aGF0XG4gICAicy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkgPT0gcyIuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgIC4uLiAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgcylcbiAgICAgIC4uLlxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuc3RyLnRyYW5zbGF0ZShtYXApXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlICpzKiB3aGVyZSBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkXG4gICB0aHJvdWdoIHRoZSAqbWFwKiB3aGljaCBtdXN0IGJlIGEgZGljdGlvbmFyeSBvZiBVbmljb2RlIG9yZGluYWxzXG4gICAoaW50ZWdlcnMpIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgIk5vbmUiLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byAiTm9uZSIgYXJlXG4gICBkZWxldGVkLlxuXG4gICBZb3UgY2FuIHVzZSAic3RyLm1ha2V0cmFucygpIiB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbiBtYXAgZnJvbVxuICAgY2hhcmFjdGVyLXRvLWNoYXJhY3RlciBtYXBwaW5ncyBpbiBkaWZmZXJlbnQgZm9ybWF0cy5cblxuICAgTm90ZTogQW4gZXZlbiBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbVxuICAgICBjaGFyYWN0ZXIgbWFwcGluZyBjb2RlYyB1c2luZyB0aGUgImNvZGVjcyIgbW9kdWxlIChzZWVcbiAgICAgImVuY29kaW5ncy5jcDEyNTEiIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIHVwcGVyY2FzZS4gIE5vdGUgdGhhdCAic3RyLnVwcGVyKCkuaXN1cHBlcigpIiBtaWdodCBiZVxuICAgIkZhbHNlIiBpZiAicyIgY29udGFpbnMgdW5jYXNlZCBjaGFyYWN0ZXJzIG9yIGlmIHRoZSBVbmljb2RlXG4gICBjYXRlZ29yeSBvZiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcihzKSBpcyBub3QgIkx1IiAoTGV0dGVyLFxuICAgdXBwZXJjYXNlKSwgYnV0IGUuZy4gIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG4gICBUaGUgdXBwZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAibGVuKHMpIi5cbicsCi0gJ3N0cmluZ3MnOiAnXG5TdHJpbmcgYW5kIEJ5dGVzIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblN0cmluZyBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgc3RyaW5nbGl0ZXJhbCAgIDo6PSBbc3RyaW5ncHJlZml4XShzaG9ydHN0cmluZyB8IGxvbmdzdHJpbmcpXG4gICBzdHJpbmdwcmVmaXggICAgOjo9ICJyIiB8ICJ1IiB8ICJSIiB8ICJVIlxuICAgc2hvcnRzdHJpbmcgICAgIDo6PSAiXCciIHNob3J0c3RyaW5naXRlbSogIlwnIiB8IFwnIlwnIHNob3J0c3RyaW5naXRlbSogXCciXCdcbiAgIGxvbmdzdHJpbmcgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ3N0cmluZ2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nc3RyaW5naXRlbSogXCciIiJcJ1xuICAgc2hvcnRzdHJpbmdpdGVtIDo6PSBzaG9ydHN0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIGxvbmdzdHJpbmdpdGVtICA6Oj0gbG9uZ3N0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIHNob3J0c3RyaW5nY2hhciA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ3N0cmluZ2NoYXIgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBzdHJpbmdlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBzb3VyY2UgY2hhcmFjdGVyPlxuXG4gICBieXRlc2xpdGVyYWwgICA6Oj0gYnl0ZXNwcmVmaXgoc2hvcnRieXRlcyB8IGxvbmdieXRlcylcbiAgIGJ5dGVzcHJlZml4ICAgIDo6PSAiYiIgfCAiQiIgfCAiYnIiIHwgIkJyIiB8ICJiUiIgfCAiQlIiIHwgInJiIiB8ICJyQiIgfCAiUmIiIHwgIlJCIlxuICAgc2hvcnRieXRlcyAgICAgOjo9ICJcJyIgc2hvcnRieXRlc2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydGJ5dGVzaXRlbSogXCciXCdcbiAgIGxvbmdieXRlcyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nYnl0ZXNpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ2J5dGVzaXRlbSogXCciIiJcJ1xuICAgc2hvcnRieXRlc2l0ZW0gOjo9IHNob3J0Ynl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIGxvbmdieXRlc2l0ZW0gIDo6PSBsb25nYnl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIHNob3J0Ynl0ZXNjaGFyIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdieXRlc2NoYXIgIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIGJ5dGVzZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgQVNDSUkgY2hhcmFjdGVyPlxuXG5PbmUgc3ludGFjdGljIHJlc3RyaWN0aW9uIG5vdCBpbmRpY2F0ZWQgYnkgdGhlc2UgcHJvZHVjdGlvbnMgaXMgdGhhdFxud2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCBiZXR3ZWVuIHRoZSAic3RyaW5ncHJlZml4IiBvciAiYnl0ZXNwcmVmaXgiXG5hbmQgdGhlIHJlc3Qgb2YgdGhlIGxpdGVyYWwuIFRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldCBpcyBkZWZpbmVkIGJ5XG50aGUgZW5jb2RpbmcgZGVjbGFyYXRpb247IGl0IGlzIFVURi04IGlmIG5vIGVuY29kaW5nIGRlY2xhcmF0aW9uIGlzXG5naXZlbiBpbiB0aGUgc291cmNlIGZpbGU7IHNlZSBzZWN0aW9uICpFbmNvZGluZyBkZWNsYXJhdGlvbnMqLlxuXG5JbiBwbGFpbiBFbmdsaXNoOiBCb3RoIHR5cGVzIG9mIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZ1xuc2luZ2xlIHF1b3RlcyAoIlwnIikgb3IgZG91YmxlIHF1b3RlcyAoIiIiKS4gIFRoZXkgY2FuIGFsc28gYmUgZW5jbG9zZWRcbmluIG1hdGNoaW5nIGdyb3VwcyBvZiB0aHJlZSBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodGhlc2UgYXJlXG5nZW5lcmFsbHkgcmVmZXJyZWQgdG8gYXMgKnRyaXBsZS1xdW90ZWQgc3RyaW5ncyopLiAgVGhlIGJhY2tzbGFzaFxuKCJcXCIpIGNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYVxuc3BlY2lhbCBtZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZVxuY2hhcmFjdGVyLlxuXG5CeXRlcyBsaXRlcmFscyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggIlwnYlwnIiBvciAiXCdCXCciOyB0aGV5IHByb2R1Y2VcbmFuIGluc3RhbmNlIG9mIHRoZSAiYnl0ZXMiIHR5cGUgaW5zdGVhZCBvZiB0aGUgInN0ciIgdHlwZS4gIFRoZXkgbWF5XG5vbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVyczsgYnl0ZXMgd2l0aCBhIG51bWVyaWMgdmFsdWUgb2YgMTI4IG9yXG5ncmVhdGVyIG11c3QgYmUgZXhwcmVzc2VkIHdpdGggZXNjYXBlcy5cblxuQXMgb2YgUHl0aG9uIDMuMyBpdCBpcyBwb3NzaWJsZSBhZ2FpbiB0byBwcmVmaXggdW5pY29kZSBzdHJpbmdzIHdpdGggYVxuInUiIHByZWZpeCB0byBzaW1wbGlmeSBtYWludGVuYW5jZSBvZiBkdWFsIDIueCBhbmQgMy54IGNvZGViYXNlcy5cblxuQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYVxubGV0dGVyICJcJ3JcJyIgb3IgIlwnUlwnIjsgc3VjaCBzdHJpbmdzIGFyZSBjYWxsZWQgKnJhdyBzdHJpbmdzKiBhbmQgdHJlYXRcbmJhY2tzbGFzaGVzIGFzIGxpdGVyYWwgY2hhcmFjdGVycy4gIEFzIGEgcmVzdWx0LCBpbiBzdHJpbmcgbGl0ZXJhbHMsXG4iXCdcXFVcJyIgYW5kICJcJ1xcdVwnIiBlc2NhcGVzIGluIHJhdyBzdHJpbmdzIGFyZSBub3QgdHJlYXRlZCBzcGVjaWFsbHkuXG5HaXZlbiB0aGF0IFB5dGhvbiAyLnhcJ3MgcmF3IHVuaWNvZGUgbGl0ZXJhbHMgYmVoYXZlIGRpZmZlcmVudGx5IHRoYW5cblB5dGhvbiAzLnhcJ3MgdGhlICJcJ3VyXCciIHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSAiXCdyYlwnIiBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhc1xuICAgYmVlbiBhZGRlZCBhcyBhIHN5bm9ueW0gb2YgIlwnYnJcJyIuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogU3VwcG9ydCBmb3IgdGhlIHVuaWNvZGUgbGVnYWN5IGxpdGVyYWxcbiAgICgidVwndmFsdWVcJyIpIHdhcyByZWludHJvZHVjZWQgdG8gc2ltcGxpZnkgdGhlIG1haW50ZW5hbmNlIG9mIGR1YWxcbiAgIFB5dGhvbiAyLnggYW5kIDMueCBjb2RlYmFzZXMuIFNlZSAqKlBFUCA0MTQqKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSW4gdHJpcGxlLXF1b3RlZCBzdHJpbmdzLCB1bmVzY2FwZWQgbmV3bGluZXMgYW5kIHF1b3RlcyBhcmUgYWxsb3dlZFxuKGFuZCBhcmUgcmV0YWluZWQpLCBleGNlcHQgdGhhdCB0aHJlZSB1bmVzY2FwZWQgcXVvdGVzIGluIGEgcm93XG50ZXJtaW5hdGUgdGhlIHN0cmluZy4gIChBICJxdW90ZSIgaXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIG9wZW4gdGhlXG5zdHJpbmcsIGkuZS4gZWl0aGVyICJcJyIgb3IgIiIiLilcblxuVW5sZXNzIGFuICJcJ3JcJyIgb3IgIlwnUlwnIiBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpblxuc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieVxuU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXG9vbyIgICAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgxLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx4aGgiICAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoMiwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuRXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCAiXFxOe25hbWV9IiAgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAoNCkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcdXh4eHgiICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMTYtYml0IGhleCB2YWx1ZSAgIHwgKDUpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXFV4eHh4eHh4eCIgICAgICB8IENoYXJhY3RlciB3aXRoIDMyLWJpdCBoZXggdmFsdWUgICB8ICg2KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuMi4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG4zLiBJbiBhIGJ5dGVzIGxpdGVyYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzIGRlbm90ZSB0aGVcbiAgIGJ5dGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIEluIGEgc3RyaW5nIGxpdGVyYWwsIHRoZXNlIGVzY2FwZXNcbiAgIGRlbm90ZSBhIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG40LiBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciBuYW1lIGFsaWFzZXMgWzFdIGhhcyBiZWVuXG4gICBhZGRlZC5cblxuNS4gSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGUgcGFpciBjYW5cbiAgIGJlIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuICBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmVcbiAgIHJlcXVpcmVkLlxuXG42LiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXkuICBFeGFjdGx5IGVpZ2h0XG4gICBoZXggZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuVW5saWtlIFN0YW5kYXJkIEMsIGFsbCB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbGVmdCBpbiB0aGVcbnN0cmluZyB1bmNoYW5nZWQsIGkuZS4sICp0aGUgYmFja3NsYXNoIGlzIGxlZnQgaW4gdGhlIHN0cmluZyouICAoVGhpc1xuYmVoYXZpb3IgaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nOiBpZiBhbiBlc2NhcGUgc2VxdWVuY2UgaXMgbWlzdHlwZWQsXG50aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBtb3JlIGVhc2lseSByZWNvZ25pemVkIGFzIGJyb2tlbi4pICBJdCBpcyBhbHNvXG5pbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmdcbmxpdGVyYWxzIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgdW5yZWNvZ25pemVkIGVzY2FwZXMgZm9yIGJ5dGVzXG5saXRlcmFscy5cblxuRXZlbiBpbiBhIHJhdyBzdHJpbmcsIHN0cmluZyBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCxcbmJ1dCB0aGUgYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHN0cmluZzsgZm9yIGV4YW1wbGUsICJyIlxcIiIiIGlzIGFcbnZhbGlkIHN0cmluZyBsaXRlcmFsIGNvbnNpc3Rpbmcgb2YgdHdvIGNoYXJhY3RlcnM6IGEgYmFja3NsYXNoIGFuZCBhXG5kb3VibGUgcXVvdGU7ICJyIlxcIiIgaXMgbm90IGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgKGV2ZW4gYSByYXcgc3RyaW5nXG5jYW5ub3QgZW5kIGluIGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYSByYXdcbnN0cmluZyBjYW5ub3QgZW5kIGluIGEgc2luZ2xlIGJhY2tzbGFzaCogKHNpbmNlIHRoZSBiYWNrc2xhc2ggd291bGRcbmVzY2FwZSB0aGUgZm9sbG93aW5nIHF1b3RlIGNoYXJhY3RlcikuICBOb3RlIGFsc28gdGhhdCBhIHNpbmdsZVxuYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aG9zZSB0d28gY2hhcmFjdGVyc1xuYXMgcGFydCBvZiB0aGUgc3RyaW5nLCAqbm90KiBhcyBhIGxpbmUgY29udGludWF0aW9uLlxuJywKKyAnc3BlY2lhbGF0dHJzJzogJ1xuU3BlY2lhbCBBdHRyaWJ1dGVzXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIGltcGxlbWVudGF0aW9uIGFkZHMgYSBmZXcgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlcyB0byBzZXZlcmFsXG5vYmplY3QgdHlwZXMsIHdoZXJlIHRoZXkgYXJlIHJlbGV2YW50LiAgU29tZSBvZiB0aGVzZSBhcmUgbm90IHJlcG9ydGVkXG5ieSB0aGUgImRpcigpIiBidWlsdC1pbiBmdW5jdGlvbi5cblxub2JqZWN0Ll9fZGljdF9fXG5cbiAgIEEgZGljdGlvbmFyeSBvciBvdGhlciBtYXBwaW5nIG9iamVjdCB1c2VkIHRvIHN0b3JlIGFuIG9iamVjdFwnc1xuICAgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzLlxuXG5pbnN0YW5jZS5fX2NsYXNzX19cblxuICAgVGhlIGNsYXNzIHRvIHdoaWNoIGEgY2xhc3MgaW5zdGFuY2UgYmVsb25ncy5cblxuY2xhc3MuX19iYXNlc19fXG5cbiAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuXG5cbmNsYXNzLl9fbmFtZV9fXG5cbiAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG5jbGFzcy5fX3F1YWxuYW1lX19cblxuICAgVGhlICpxdWFsaWZpZWQgbmFtZSogb2YgdGhlIGNsYXNzIG9yIHR5cGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuY2xhc3MuX19tcm9fX1xuXG4gICBUaGlzIGF0dHJpYnV0ZSBpcyBhIHR1cGxlIG9mIGNsYXNzZXMgdGhhdCBhcmUgY29uc2lkZXJlZCB3aGVuXG4gICBsb29raW5nIGZvciBiYXNlIGNsYXNzZXMgZHVyaW5nIG1ldGhvZCByZXNvbHV0aW9uLlxuXG5jbGFzcy5tcm8oKVxuXG4gICBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIG1ldGFjbGFzcyB0byBjdXN0b21pemUgdGhlXG4gICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgaXRzIGluc3RhbmNlcy4gIEl0IGlzIGNhbGxlZCBhdCBjbGFzc1xuICAgaW5zdGFudGlhdGlvbiwgYW5kIGl0cyByZXN1bHQgaXMgc3RvcmVkIGluICJfX21yb19fIi5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIGNsYXNzIGtlZXBzIGEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGltbWVkaWF0ZVxuICAgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aG9zZSByZWZlcmVuY2VzXG4gICBzdGlsbCBhbGl2ZS4gRXhhbXBsZTpcblxuICAgICAgPj4+IGludC5fX3N1YmNsYXNzZXNfXygpXG4gICAgICBbPGNsYXNzIFwnYm9vbFwnPl1cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNwZWNpYWwgbWV0aG9kcyBtYXkgYmUgZm91bmQgaW5cbiAgICB0aGUgUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwgKCpCYXNpYyBjdXN0b21pemF0aW9uKikuXG5cblsyXSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgbGlzdCAiWzEsIDJdIiBpcyBjb25zaWRlcmVkIGVxdWFsIHRvICJbMS4wLFxuICAgIDIuMF0iLCBhbmQgc2ltaWxhcmx5IGZvciB0dXBsZXMuXG5cblszXSBUaGV5IG11c3QgaGF2ZSBzaW5jZSB0aGUgcGFyc2VyIGNhblwndCB0ZWxsIHRoZSB0eXBlIG9mIHRoZVxuICAgIG9wZXJhbmRzLlxuXG5bNF0gQ2FzZWQgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5IGJlaW5nXG4gICAgb25lIG9mICJMdSIgKExldHRlciwgdXBwZXJjYXNlKSwgIkxsIiAoTGV0dGVyLCBsb3dlcmNhc2UpLCBvciAiTHQiXG4gICAgKExldHRlciwgdGl0bGVjYXNlKS5cblxuWzVdIFRvIGZvcm1hdCBvbmx5IGEgdHVwbGUgeW91IHNob3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBhIHNpbmdsZXRvblxuICAgIHR1cGxlIHdob3NlIG9ubHkgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLlxuJywKKyAnc3BlY2lhbG5hbWVzJzogJ1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkICJfX2dldGl0ZW1fXygpIiwgYW5kICJ4IiBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLFxudGhlbiAieFtpXSIgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvICJ0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsIGkpIi5cbkV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlIGFuXG5leGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG4iQXR0cmlidXRlRXJyb3IiIG9yICJUeXBlRXJyb3IiKS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgYSBjbGFzcyB0aGF0IGVtdWxhdGVzIGFueSBidWlsdC1pbiB0eXBlLCBpdCBpc1xuaW1wb3J0YW50IHRoYXQgdGhlIGVtdWxhdGlvbiBvbmx5IGJlIGltcGxlbWVudGVkIHRvIHRoZSBkZWdyZWUgdGhhdCBpdFxubWFrZXMgc2Vuc2UgZm9yIHRoZSBvYmplY3QgYmVpbmcgbW9kZWxsZWQuICBGb3IgZXhhbXBsZSwgc29tZVxuc2VxdWVuY2VzIG1heSB3b3JrIHdlbGwgd2l0aCByZXRyaWV2YWwgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgYnV0XG5leHRyYWN0aW5nIGEgc2xpY2UgbWF5IG5vdCBtYWtlIHNlbnNlLiAgKE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgdGhlXG4iTm9kZUxpc3QiIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgIl9fbmV3X18oKSIgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgIl9fbmV3X18oKSIgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5IGFuXG4gICBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCB1c2luZ1xuICAgInN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pIiB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgIl9fbmV3X18oKSIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICAiX19pbml0X18oc2VsZlssIC4uLl0pIiwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIuXG5cbiAgIElmICJfX25ld19fKCkiIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgICJfX25ld19fKCkiIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgICJfX2luaXRfXygpIiBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzICJfX2luaXRfXygpIiBtZXRob2QsIGlmXG4gICBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlXG4gICBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgICJCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKSIuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludCBvblxuICAgY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgIlR5cGVFcnJvciIgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgIl9fZGVsX18oKSIgbWV0aG9kLCB0aGVcbiAgIGRlcml2ZWQgY2xhc3NcJ3MgIl9fZGVsX18oKSIgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0XG4gICB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlLlxuICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yIHRoZVxuICAgIl9fZGVsX18oKSIgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogImRlbCB4IiBkb2VzblwndCBkaXJlY3RseSBjYWxsICJ4Ll9fZGVsX18oKSIgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciAieCIgYnkgb25lLCBhbmQgdGhlIGxhdHRlciBpc1xuICAgICBvbmx5IGNhbGxlZCB3aGVuICJ4IlwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZSBjb21tb25cbiAgICAgc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW4gb2JqZWN0IGZyb21cbiAgICAgZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gb2JqZWN0cyAoZS5nLixcbiAgICAgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggcGFyZW50IGFuZFxuICAgICBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIG9mXG4gICAgIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmV4Y19pbmZvKClbMl0iIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yIGEgcmVmZXJlbmNlXG4gICAgIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZFxuICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nICJOb25lIiBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIi4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzXG4gICAgIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgICJnYyIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgdG9waWMuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gInN5cy5zdGRlcnIiIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gIl9fZGVsX18oKSIgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSAiX19kZWxfXygpIiBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCAiX19kZWxfXygpIlxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlICJfX2RlbF9fKCkiIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlICJyZXByKCkiIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlICJvZmZpY2lhbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsIHRoaXNcbiAgIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG9cbiAgIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICAiPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPiIgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzICJfX3JlcHJfXygpIiBidXRcbiAgIG5vdCAiX19zdHJfXygpIiwgdGhlbiAiX19yZXByX18oKSIgaXMgYWxzbyB1c2VkIHdoZW4gYW4gImluZm9ybWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAic3RyKG9iamVjdCkiIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJmb3JtYXQoKSIgYW5kXG4gICAicHJpbnQoKSIgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlIHN0cmluZ1xuICAgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgKnN0cmluZypcbiAgIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tICJvYmplY3QuX19yZXByX18oKSIgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCAiX19zdHJfXygpIiByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgIm9iamVjdCJcbiAgIGNhbGxzICJvYmplY3QuX19yZXByX18oKSIuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJieXRlcygpIiB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgImJ5dGVzIiBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlICJmb3JtYXQoKSIgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgInN0ci5mb3JtYXQoKSIgbWV0aG9kIG9mIGNsYXNzICJzdHIiKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIGFcbiAgIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIHVwIHRvXG4gICB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgIl9fZm9ybWF0X18oKSIsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzIHdpbGxcbiAgIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yIHVzZSBhXG4gICBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy40OiBUaGUgX19mb3JtYXRfXyBtZXRob2Qgb2YgIm9iamVjdCIgaXRzZWxmXG4gICByYWlzZXMgYSAiVHlwZUVycm9yIiBpZiBwYXNzZWQgYW55IG5vbi1lbXB0eSBzdHJpbmcuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiAieD09eSIgZG9lcyBub3QgaW1wbHkgdGhhdCAieCE9eSIgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyAiX19lcV9fKCkiLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICAiX19uZV9fKCkiIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZSB0aGVcbiAgIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nXG4gICAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZFxuICAgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3MgY3VzdG9tXG4gICAgICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzIGlzXG4gICAgIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0IGJ1aWxkcy5cbiAgICAgSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkcyBvZlxuICAgICBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGwgc3VwcG9ydGVkXG4gICAgIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jICJpbXBvcnQgc3lzO1xuICAgICBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUiKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG5cblxuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mICJ4Lm5hbWUiKSBmb3JcbmNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgInNlbGYiKS4gICJuYW1lIiBpcyB0aGUgYXR0cmlidXRlIG5hbWUuIFRoaXNcbiAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICAiX19nZXRhdHRyX18oKSIgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiAiX19nZXRhdHRyX18oKSIgYW5kICJfX3NldGF0dHJfXygpIi4pIFRoaXMgaXMgZG9uZSBib3RoIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSAiX19nZXRhdHRyX18oKSIgd291bGQgaGF2ZVxuICAgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGUgdGhhdCBhdFxuICAgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnkgbm90XG4gICBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXMgIl9fZ2V0YXR0cl9fKCkiLFxuICAgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzICJfX2dldGF0dHJpYnV0ZV9fKCkiIGVpdGhlclxuICAgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW4gIkF0dHJpYnV0ZUVycm9yIi4gVGhpcyBtZXRob2RcbiAgIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi4gSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluXG4gICB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzc1xuICAgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0byBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvclxuICAgZXhhbXBsZSwgIm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpIi5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHNcbiAgICAgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXggb3JcbiAgICAgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgIl9fc2V0YXR0cl9fKCkiIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgICJvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpIi5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgIl9fc2V0YXR0cl9fKCkiIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmICJkZWwgb2JqLm5hbWUiIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiAiZGlyKCkiIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiAiZGlyKCkiIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyAiX19kaWN0X18iLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgIk5vbmUiIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiAiQXR0cmlidXRlRXJyb3IiXG4gICBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblRoZSBhdHRyaWJ1dGUgIl9fb2JqY2xhc3NfXyIgaXMgaW50ZXJwcmV0ZWQgYnkgdGhlICJpbnNwZWN0IiBtb2R1bGUgYXNcbnNwZWNpZnlpbmcgdGhlIGNsYXNzIHdoZXJlIHRoaXMgb2JqZWN0IHdhcyBkZWZpbmVkIChzZXR0aW5nIHRoaXNcbmFwcHJvcHJpYXRlbHkgY2FuIGFzc2lzdCBpbiBydW50aW1lIGludHJvc3BlY3Rpb24gb2YgZHluYW1pYyBjbGFzc1xuYXR0cmlidXRlcykuIEZvciBjYWxsYWJsZXMsIGl0IG1heSBpbmRpY2F0ZSB0aGF0IGFuIGluc3RhbmNlIG9mIHRoZVxuZ2l2ZW4gdHlwZSAob3IgYSBzdWJjbGFzcykgaXMgZXhwZWN0ZWQgb3IgcmVxdWlyZWQgYXMgdGhlIGZpcnN0XG5wb3NpdGlvbmFsIGFyZ3VtZW50IChmb3IgZXhhbXBsZSwgQ1B5dGhvbiBzZXRzIHRoaXMgYXR0cmlidXRlIGZvclxudW5ib3VuZCBtZXRob2RzIHRoYXQgYXJlIGltcGxlbWVudGVkIGluIEMpLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIsIGFuZFxuIl9fZGVsZXRlX18oKSIuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsIGl0XG5pcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsICJhLngiIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCAiYS5fX2RpY3RfX1tcJ3hcJ10iLCB0aGVuXG4idHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10iLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbiJ0eXBlKGEpIiBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsICJhLngiLiBIb3dcbnRoZSBhcmd1bWVudHMgYXJlIGFzc2VtYmxlZCBkZXBlbmRzIG9uICJhIjpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgInguX19nZXRfXyhhKSIuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYW4gb2JqZWN0IGluc3RhbmNlLCAiYS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZVxuICAgY2FsbDogInR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSkiLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsICJBLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGNhbGw6XG4gICAiQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKSIuXG5cblN1cGVyIEJpbmRpbmdcbiAgIElmICJhIiBpcyBhbiBpbnN0YW5jZSBvZiAic3VwZXIiLCB0aGVuIHRoZSBiaW5kaW5nICJzdXBlcihCLFxuICAgb2JqKS5tKCkiIHNlYXJjaGVzICJvYmouX19jbGFzc19fLl9fbXJvX18iIGZvciB0aGUgYmFzZSBjbGFzcyAiQSJcbiAgIGltbWVkaWF0ZWx5IHByZWNlZGluZyAiQiIgYW5kIHRoZW4gaW52b2tlcyB0aGUgZGVzY3JpcHRvciB3aXRoIHRoZVxuICAgY2FsbDogIkEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBvYmouX19jbGFzc19fKSIuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiBhbmQgIl9fZGVsZXRlX18oKSIuICBJZiBpdFxuZG9lcyBub3QgZGVmaW5lICJfX2dldF9fKCkiLCB0aGVuIGFjY2Vzc2luZyB0aGUgYXR0cmlidXRlIHdpbGwgcmV0dXJuXG50aGUgZGVzY3JpcHRvciBvYmplY3QgaXRzZWxmIHVubGVzcyB0aGVyZSBpcyBhIHZhbHVlIGluIHRoZSBvYmplY3RcJ3Ncbmluc3RhbmNlIGRpY3Rpb25hcnkuICBJZiB0aGUgZGVzY3JpcHRvciBkZWZpbmVzICJfX3NldF9fKCkiIGFuZC9vclxuIl9fZGVsZXRlX18oKSIsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzIG5laXRoZXIsIGl0IGlzXG5hIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9ycyBkZWZpbmUgYm90aFxuIl9fZ2V0X18oKSIgYW5kICJfX3NldF9fKCkiLCB3aGlsZSBub24tZGF0YSBkZXNjcmlwdG9ycyBoYXZlIGp1c3QgdGhlXG4iX19nZXRfXygpIiBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGggIl9fc2V0X18oKSIgYW5kICJfX2dldF9fKCkiXG5kZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvbiBpbiBhbiBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSW5cbmNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBpbnN0YW5jZXMuXG5cblB5dGhvbiBtZXRob2RzIChpbmNsdWRpbmcgInN0YXRpY21ldGhvZCgpIiBhbmQgImNsYXNzbWV0aG9kKCkiKSBhcmVcbmltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgInByb3BlcnR5KCkiIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgZGF0YSBkZXNjcmlwdG9yLlxuQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGJlaGF2aW9yIG9mIGEgcHJvcGVydHkuXG5cblxuX19zbG90c19fXG4tLS0tLS0tLS1cblxuQnkgZGVmYXVsdCwgaW5zdGFuY2VzIG9mIGNsYXNzZXMgaGF2ZSBhIGRpY3Rpb25hcnkgZm9yIGF0dHJpYnV0ZVxuc3RvcmFnZS4gIFRoaXMgd2FzdGVzIHNwYWNlIGZvciBvYmplY3RzIGhhdmluZyB2ZXJ5IGZldyBpbnN0YW5jZVxudmFyaWFibGVzLiAgVGhlIHNwYWNlIGNvbnN1bXB0aW9uIGNhbiBiZWNvbWUgYWN1dGUgd2hlbiBjcmVhdGluZyBsYXJnZVxubnVtYmVycyBvZiBpbnN0YW5jZXMuXG5cblRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nICpfX3Nsb3RzX18qIGluIGEgY2xhc3NcbmRlZmluaXRpb24uIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mIGluc3RhbmNlXG52YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG8gaG9sZCBhXG52YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpcyBub3RcbmNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbm9iamVjdC5fX3Nsb3RzX19cblxuICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZVxuICAgb2Ygc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgSWYgZGVmaW5lZCBpbiBhXG4gICBjbGFzcywgKl9fc2xvdHNfXyogcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBkZWNsYXJlZCB2YXJpYWJsZXMgYW5kXG4gICBwcmV2ZW50cyB0aGUgYXV0b21hdGljIGNyZWF0aW9uIG9mICpfX2RpY3RfXyogYW5kICpfX3dlYWtyZWZfXyogZm9yXG4gICBlYWNoIGluc3RhbmNlLlxuXG5cbk5vdGVzIG9uIHVzaW5nICpfX3Nsb3RzX18qXG5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuXG4qIFdoZW4gaW5oZXJpdGluZyBmcm9tIGEgY2xhc3Mgd2l0aG91dCAqX19zbG90c19fKiwgdGhlICpfX2RpY3RfXypcbiAgYXR0cmlidXRlIG9mIHRoYXQgY2xhc3Mgd2lsbCBhbHdheXMgYmUgYWNjZXNzaWJsZSwgc28gYSAqX19zbG90c19fKlxuICBkZWZpbml0aW9uIGluIHRoZSBzdWJjbGFzcyBpcyBtZWFuaW5nbGVzcy5cblxuKiBXaXRob3V0IGEgKl9fZGljdF9fKiB2YXJpYWJsZSwgaW5zdGFuY2VzIGNhbm5vdCBiZSBhc3NpZ25lZCBuZXdcbiAgdmFyaWFibGVzIG5vdCBsaXN0ZWQgaW4gdGhlICpfX3Nsb3RzX18qIGRlZmluaXRpb24uICBBdHRlbXB0cyB0b1xuICBhc3NpZ24gdG8gYW4gdW5saXN0ZWQgdmFyaWFibGUgbmFtZSByYWlzZXMgIkF0dHJpYnV0ZUVycm9yIi4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgIlwnX19kaWN0X19cJyIgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4qIFdpdGhvdXQgYSAqX193ZWFrcmVmX18qIHZhcmlhYmxlIGZvciBlYWNoIGluc3RhbmNlLCBjbGFzc2VzIGRlZmluaW5nXG4gICpfX3Nsb3RzX18qIGRvIG5vdCBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgaW5zdGFuY2VzLiBJZiB3ZWFrXG4gIHJlZmVyZW5jZSBzdXBwb3J0IGlzIG5lZWRlZCwgdGhlbiBhZGQgIlwnX193ZWFrcmVmX19cJyIgdG8gdGhlXG4gIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uLlxuXG4qICpfX3Nsb3RzX18qIGFyZSBpbXBsZW1lbnRlZCBhdCB0aGUgY2xhc3MgbGV2ZWwgYnkgY3JlYXRpbmdcbiAgZGVzY3JpcHRvcnMgKCpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqKSBmb3IgZWFjaCB2YXJpYWJsZSBuYW1lLiAgQXNcbiAgYSByZXN1bHQsIGNsYXNzIGF0dHJpYnV0ZXMgY2Fubm90IGJlIHVzZWQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvclxuICBpbnN0YW5jZSB2YXJpYWJsZXMgZGVmaW5lZCBieSAqX19zbG90c19fKjsgb3RoZXJ3aXNlLCB0aGUgY2xhc3NcbiAgYXR0cmlidXRlIHdvdWxkIG92ZXJ3cml0ZSB0aGUgZGVzY3JpcHRvciBhc3NpZ25tZW50LlxuXG4qIFRoZSBhY3Rpb24gb2YgYSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzc1xuICB3aGVyZSBpdCBpcyBkZWZpbmVkLiAgQXMgYSByZXN1bHQsIHN1YmNsYXNzZXMgd2lsbCBoYXZlIGEgKl9fZGljdF9fKlxuICB1bmxlc3MgdGhleSBhbHNvIGRlZmluZSAqX19zbG90c19fKiAod2hpY2ggbXVzdCBvbmx5IGNvbnRhaW4gbmFtZXNcbiAgb2YgYW55ICphZGRpdGlvbmFsKiBzbG90cykuXG5cbiogSWYgYSBjbGFzcyBkZWZpbmVzIGEgc2xvdCBhbHNvIGRlZmluZWQgaW4gYSBiYXNlIGNsYXNzLCB0aGUgaW5zdGFuY2VcbiAgdmFyaWFibGUgZGVmaW5lZCBieSB0aGUgYmFzZSBjbGFzcyBzbG90IGlzIGluYWNjZXNzaWJsZSAoZXhjZXB0IGJ5XG4gIHJldHJpZXZpbmcgaXRzIGRlc2NyaXB0b3IgZGlyZWN0bHkgZnJvbSB0aGUgYmFzZSBjbGFzcykuIFRoaXNcbiAgcmVuZGVycyB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbSB1bmRlZmluZWQuICBJbiB0aGUgZnV0dXJlLCBhXG4gIGNoZWNrIG1heSBiZSBhZGRlZCB0byBwcmV2ZW50IHRoaXMuXG5cbiogTm9uZW1wdHkgKl9fc2xvdHNfXyogZG9lcyBub3Qgd29yayBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb21cbiAgInZhcmlhYmxlLWxlbmd0aCIgYnVpbHQtaW4gdHlwZXMgc3VjaCBhcyAiaW50IiwgImJ5dGVzIiBhbmQgInR1cGxlIi5cblxuKiBBbnkgbm9uLXN0cmluZyBpdGVyYWJsZSBtYXkgYmUgYXNzaWduZWQgdG8gKl9fc2xvdHNfXyouIE1hcHBpbmdzIG1heVxuICBhbHNvIGJlIHVzZWQ7IGhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIHNwZWNpYWwgbWVhbmluZyBtYXkgYmVcbiAgYXNzaWduZWQgdG8gdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2V5LlxuXG4qICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgd29ya3Mgb25seSBpZiBib3RoIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZVxuICAqX19zbG90c19fKi5cblxuXG5DdXN0b21pemluZyBjbGFzcyBjcmVhdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnkgZGVmYXVsdCwgY2xhc3NlcyBhcmUgY29uc3RydWN0ZWQgdXNpbmcgInR5cGUoKSIuIFRoZSBjbGFzcyBib2R5IGlzXG5leGVjdXRlZCBpbiBhIG5ldyBuYW1lc3BhY2UgYW5kIHRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIGxvY2FsbHkgdG8gdGhlXG5yZXN1bHQgb2YgInR5cGUobmFtZSwgYmFzZXMsIG5hbWVzcGFjZSkiLlxuXG5UaGUgY2xhc3MgY3JlYXRpb24gcHJvY2VzcyBjYW4gYmUgY3VzdG9taXNlZCBieSBwYXNzaW5nIHRoZVxuIm1ldGFjbGFzcyIga2V5d29yZCBhcmd1bWVudCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBsaW5lLCBvciBieVxuaW5oZXJpdGluZyBmcm9tIGFuIGV4aXN0aW5nIGNsYXNzIHRoYXQgaW5jbHVkZWQgc3VjaCBhbiBhcmd1bWVudC4gSW5cbnRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgYm90aCAiTXlDbGFzcyIgYW5kICJNeVN1YmNsYXNzIiBhcmUgaW5zdGFuY2VzXG5vZiAiTWV0YSI6XG5cbiAgIGNsYXNzIE1ldGEodHlwZSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeUNsYXNzKG1ldGFjbGFzcz1NZXRhKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15U3ViY2xhc3MoTXlDbGFzcyk6XG4gICAgICAgcGFzc1xuXG5Bbnkgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uXG5hcmUgcGFzc2VkIHRocm91Z2ggdG8gYWxsIG1ldGFjbGFzcyBvcGVyYXRpb25zIGRlc2NyaWJlZCBiZWxvdy5cblxuV2hlbiBhIGNsYXNzIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQsIHRoZSBmb2xsb3dpbmcgc3RlcHMgb2NjdXI6XG5cbiogdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBpcyBkZXRlcm1pbmVkXG5cbiogdGhlIGNsYXNzIG5hbWVzcGFjZSBpcyBwcmVwYXJlZFxuXG4qIHRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkXG5cbiogdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkXG5cblxuRGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGZvciBhIGNsYXNzIGRlZmluaXRpb24gaXMgZGV0ZXJtaW5lZCBhc1xuZm9sbG93czpcblxuKiBpZiBubyBiYXNlcyBhbmQgbm8gZXhwbGljaXQgbWV0YWNsYXNzIGFyZSBnaXZlbiwgdGhlbiAidHlwZSgpIiBpc1xuICB1c2VkXG5cbiogaWYgYW4gZXhwbGljaXQgbWV0YWNsYXNzIGlzIGdpdmVuIGFuZCBpdCBpcyAqbm90KiBhbiBpbnN0YW5jZSBvZlxuICAidHlwZSgpIiwgdGhlbiBpdCBpcyB1c2VkIGRpcmVjdGx5IGFzIHRoZSBtZXRhY2xhc3NcblxuKiBpZiBhbiBpbnN0YW5jZSBvZiAidHlwZSgpIiBpcyBnaXZlbiBhcyB0aGUgZXhwbGljaXQgbWV0YWNsYXNzLCBvclxuICBiYXNlcyBhcmUgZGVmaW5lZCwgdGhlbiB0aGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyB1c2VkXG5cblRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHNlbGVjdGVkIGZyb20gdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkXG5tZXRhY2xhc3MgKGlmIGFueSkgYW5kIHRoZSBtZXRhY2xhc3NlcyAoaS5lLiAidHlwZShjbHMpIikgb2YgYWxsXG5zcGVjaWZpZWQgYmFzZSBjbGFzc2VzLiBUaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBvbmUgd2hpY2ggaXMgYVxuc3VidHlwZSBvZiAqYWxsKiBvZiB0aGVzZSBjYW5kaWRhdGUgbWV0YWNsYXNzZXMuIElmIG5vbmUgb2YgdGhlXG5jYW5kaWRhdGUgbWV0YWNsYXNzZXMgbWVldHMgdGhhdCBjcml0ZXJpb24sIHRoZW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbndpbGwgZmFpbCB3aXRoICJUeXBlRXJyb3IiLlxuXG5cblByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaGFzIGJlZW4gaWRlbnRpZmllZCwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBwcmVwYXJlZC4gSWYgdGhlIG1ldGFjbGFzcyBoYXMgYSAiX19wcmVwYXJlX18iIGF0dHJpYnV0ZSxcbml0IGlzIGNhbGxlZCBhcyAibmFtZXNwYWNlID0gbWV0YWNsYXNzLl9fcHJlcGFyZV9fKG5hbWUsIGJhc2VzLFxuKiprd2RzKSIgKHdoZXJlIHRoZSBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLCBpZiBhbnksIGNvbWUgZnJvbVxudGhlIGNsYXNzIGRlZmluaXRpb24pLlxuXG5JZiB0aGUgbWV0YWNsYXNzIGhhcyBubyAiX19wcmVwYXJlX18iIGF0dHJpYnV0ZSwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBpbml0aWFsaXNlZCBhcyBhbiBlbXB0eSAiZGljdCgpIiBpbnN0YW5jZS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzMDAwXG4gICAgICBJbnRyb2R1Y2VkIHRoZSAiX19wcmVwYXJlX18iIG5hbWVzcGFjZSBob29rXG5cblxuRXhlY3V0aW5nIHRoZSBjbGFzcyBib2R5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWQgKGFwcHJveGltYXRlbHkpIGFzICJleGVjKGJvZHksIGdsb2JhbHMoKSxcbm5hbWVzcGFjZSkiLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvICJleGVjKCkiIGlzIHRoYXRcbmxleGljYWwgc2NvcGluZyBhbGxvd3MgdGhlIGNsYXNzIGJvZHkgKGluY2x1ZGluZyBhbnkgbWV0aG9kcykgdG9cbnJlZmVyZW5jZSBuYW1lcyBmcm9tIHRoZSBjdXJyZW50IGFuZCBvdXRlciBzY29wZXMgd2hlbiB0aGUgY2xhc3NcbmRlZmluaXRpb24gb2NjdXJzIGluc2lkZSBhIGZ1bmN0aW9uLlxuXG5Ib3dldmVyLCBldmVuIHdoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gb2NjdXJzIGluc2lkZSB0aGUgZnVuY3Rpb24sXG5tZXRob2RzIGRlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzdGlsbCBjYW5ub3Qgc2VlIG5hbWVzIGRlZmluZWQgYXQgdGhlXG5jbGFzcyBzY29wZS4gQ2xhc3MgdmFyaWFibGVzIG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZmlyc3RcbnBhcmFtZXRlciBvZiBpbnN0YW5jZSBvciBjbGFzcyBtZXRob2RzLCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGF0IGFsbFxuZnJvbSBzdGF0aWMgbWV0aG9kcy5cblxuXG5DcmVhdGluZyB0aGUgY2xhc3Mgb2JqZWN0XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGNsYXNzIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYnkgZXhlY3V0aW5nIHRoZSBjbGFzc1xuYm9keSwgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgIm1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKSIgKHRoZSBhZGRpdGlvbmFsIGtleXdvcmRzIHBhc3NlZCBoZXJlIGFyZSB0aGUgc2FtZVxuYXMgdGhvc2UgcGFzc2VkIHRvICJfX3ByZXBhcmVfXyIpLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiAic3VwZXIoKSIuICJfX2NsYXNzX18iIGlzIGFuIGltcGxpY2l0IGNsb3N1cmVcbnJlZmVyZW5jZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBpZiBhbnkgbWV0aG9kcyBpbiBhIGNsYXNzIGJvZHkgcmVmZXJcbnRvIGVpdGhlciAiX19jbGFzc19fIiBvciAic3VwZXIiLiBUaGlzIGFsbG93cyB0aGUgemVybyBhcmd1bWVudCBmb3JtXG5vZiAic3VwZXIoKSIgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSBjbGFzcyBiZWluZyBkZWZpbmVkIGJhc2VkIG9uXG5sZXhpY2FsIHNjb3BpbmcsIHdoaWxlIHRoZSBjbGFzcyBvciBpbnN0YW5jZSB0aGF0IHdhcyB1c2VkIHRvIG1ha2UgdGhlXG5jdXJyZW50IGNhbGwgaXMgaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZVxubWV0aG9kLlxuXG5BZnRlciB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3NcbmRlY29yYXRvcnMgaW5jbHVkZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gKGlmIGFueSkgYW5kIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIHRoZSBkZWZpbmVkIGNsYXNzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEzNSoqIC0gTmV3IHN1cGVyXG4gICAgICBEZXNjcmliZXMgdGhlIGltcGxpY2l0ICJfX2NsYXNzX18iIGNsb3N1cmUgcmVmZXJlbmNlXG5cblxuTWV0YWNsYXNzIGV4YW1wbGVcbi0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkZSBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuImNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IiB0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyBtZW1iZXJzXG53ZXJlIGRlZmluZWQ6XG5cbiAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKTpcblxuICAgICAgICBAY2xhc3NtZXRob2RcbiAgICAgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIG5hbWUsIGJhc2VzLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKVxuXG4gICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiprd2RzKTpcbiAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QobmFtZXNwYWNlKSlcbiAgICAgICAgICAgcmVzdWx0Lm1lbWJlcnMgPSB0dXBsZShuYW1lc3BhY2UpXG4gICAgICAgICAgIHJldHVybiByZXN1bHRcblxuICAgY2xhc3MgQShtZXRhY2xhc3M9T3JkZXJlZENsYXNzKTpcbiAgICAgICBkZWYgb25lKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHR3byhzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0aHJlZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiBmb3VyKHNlbGYpOiBwYXNzXG5cbiAgID4+PiBBLm1lbWJlcnNcbiAgIChcJ19fbW9kdWxlX19cJywgXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnLCBcJ2ZvdXJcJylcblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgKkEqIGdldHMgZXhlY3V0ZWQsIHRoZSBwcm9jZXNzIGJlZ2luc1xud2l0aCBjYWxsaW5nIHRoZSBtZXRhY2xhc3NcJ3MgIl9fcHJlcGFyZV9fKCkiIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuXG5lbXB0eSAiY29sbGVjdGlvbnMuT3JkZXJlZERpY3QiLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHMgYW5kXG5hdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgZ2V0c1xuaW52b2tlZC4gIFRoYXQgbWV0aG9kIGJ1aWxkcyB0aGUgbmV3IHR5cGUgYW5kIGl0IHNhdmVzIHRoZSBvcmRlcmVkXG5kaWN0aW9uYXJ5IGtleXMgaW4gYW4gYXR0cmlidXRlIGNhbGxlZCAibWVtYmVycyIuXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG4iaXNpbnN0YW5jZSgpIiBhbmQgImlzc3ViY2xhc3MoKSIgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5JbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzICJhYmMuQUJDTWV0YSIgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzIGluXG5vcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICAiaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xhc3MpIi5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgICJpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcykiLlxuXG5Ob3RlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgbG9va2VkIHVwIG9uIHRoZSB0eXBlIChtZXRhY2xhc3MpIG9mIGFcbmNsYXNzLiAgVGhleSBjYW5ub3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzIGluIHRoZSBhY3R1YWwgY2xhc3MuXG5UaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWRcbm9uIGluc3RhbmNlcywgb25seSBpbiB0aGlzIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExOSoqIC0gSW50cm9kdWNpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzXG4gICAgICBJbmNsdWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgY3VzdG9taXppbmcgImlzaW5zdGFuY2UoKSIgYW5kXG4gICAgICAiaXNzdWJjbGFzcygpIiBiZWhhdmlvciB0aHJvdWdoICJfX2luc3RhbmNlY2hlY2tfXygpIiBhbmRcbiAgICAgICJfX3N1YmNsYXNzY2hlY2tfXygpIiwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaW5cbiAgICAgIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgImFiYyJcbiAgICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsICJ4KGFyZzEsIGFyZzIsIC4uLikiIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgInguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKSIuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCAiMCA8PSBrIDwgTiIgd2hlcmVcbipOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2ggZGVmaW5lIGFcbnJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGUgdGhlXG5tZXRob2RzICJrZXlzKCkiLCAidmFsdWVzKCkiLCAiaXRlbXMoKSIsICJnZXQoKSIsICJjbGVhcigpIixcbiJzZXRkZWZhdWx0KCkiLCAicG9wKCkiLCAicG9waXRlbSgpIiwgImNvcHkoKSIsIGFuZCAidXBkYXRlKCkiXG5iZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmQgZGljdGlvbmFyeSBvYmplY3RzLlxuVGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlIHByb3ZpZGVzIGEgIk11dGFibGVNYXBwaW5nIiBhYnN0cmFjdCBiYXNlXG5jbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzIGZyb20gYSBiYXNlIHNldCBvZiAiX19nZXRpdGVtX18oKSIsXG4iX19zZXRpdGVtX18oKSIsICJfX2RlbGl0ZW1fXygpIiwgYW5kICJrZXlzKCkiLiBNdXRhYmxlIHNlcXVlbmNlc1xuc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyAiYXBwZW5kKCkiLCAiY291bnQoKSIsICJpbmRleCgpIiwgImV4dGVuZCgpIixcbiJpbnNlcnQoKSIsICJwb3AoKSIsICJyZW1vdmUoKSIsICJyZXZlcnNlKCkiIGFuZCAic29ydCgpIiwgbGlrZSBQeXRob25cbnN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZCBpbXBsZW1lbnRcbmFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgIl9fYWRkX18oKSIsICJfX3JhZGRfXygpIixcbiJfX2lhZGRfXygpIiwgIl9fbXVsX18oKSIsICJfX3JtdWxfXygpIiBhbmQgIl9faW11bF9fKCkiIGRlc2NyaWJlZFxuYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG4iX19jb250YWluc19fKCkiIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSAiaW4iIG9wZXJhdG9yO1xuZm9yIG1hcHBpbmdzLCAiaW4iIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yIHNlcXVlbmNlcywgaXRcbnNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlciByZWNvbW1lbmRlZCB0aGF0IGJvdGhcbm1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZSAiX19pdGVyX18oKSIgbWV0aG9kIHRvIGFsbG93XG5lZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCAiX19pdGVyX18oKSJcbnNob3VsZCBiZSB0aGUgc2FtZSBhcyAia2V5cygpIjsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGVcbnRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIi4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciAiPj0iIDAuICBBbHNvLCBhbiBvYmplY3QgdGhhdFxuICAgZG9lc25cJ3QgZGVmaW5lIGEgIl9fYm9vbF9fKCkiIG1ldGhvZCBhbmQgd2hvc2UgIl9fbGVuX18oKSIgbWV0aG9kXG4gICByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxub2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5sZW5ndGhfaGludCgpIi4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyICI+PSIgMC4gVGhpc1xuICAgbWV0aG9kIGlzIHB1cmVseSBhbiBvcHRpbWl6YXRpb24gYW5kIGlzIG5ldmVyIHJlcXVpcmVkIGZvclxuICAgY29ycmVjdG5lc3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLiAgQVxuICBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aCAiTm9uZSIuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiAic2VsZltrZXldIi4gRm9yIHNlcXVlbmNlIHR5cGVzLFxuICAgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLiAgTm90ZSB0aGF0XG4gICB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGUgY2xhc3Mgd2lzaGVzXG4gICB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuIElmXG4gICAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsICJUeXBlRXJyb3IiIG1heSBiZSByYWlzZWQ7IGlmIG9mXG4gICBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZiBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueVxuICAgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSB2YWx1ZXMpLCAiSW5kZXhFcnJvciIgc2hvdWxkIGJlXG4gICByYWlzZWQuIEZvciBtYXBwaW5nIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlXG4gICBjb250YWluZXIpLCAiS2V5RXJyb3IiIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6ICJmb3IiIGxvb3BzIGV4cGVjdCB0aGF0IGFuICJJbmRleEVycm9yIiB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCAia2V5cygpIi5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgInJldmVyc2VkKCkiIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSAiX19yZXZlcnNlZF9fKCkiIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZSAicmV2ZXJzZWQoKSJcbiAgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZSBwcm90b2NvbCAoIl9fbGVuX18oKSJcbiAgIGFuZCAiX19nZXRpdGVtX18oKSIpLiAgT2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sXG4gICBzaG91bGQgb25seSBwcm92aWRlICJfX3JldmVyc2VkX18oKSIgaWYgdGhleSBjYW4gcHJvdmlkZSBhblxuICAgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnlcbiAgICJyZXZlcnNlZCgpIi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKCJpbiIgYW5kICJub3QgaW4iKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiwgdGhlIG1lbWJlcnNoaXAgdGVzdFxuICAgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSAiX19pdGVyX18oKSIsIHRoZW4gdGhlIG9sZCBzZXF1ZW5jZVxuICAgaXRlcmF0aW9uIHByb3RvY29sIHZpYSAiX19nZXRpdGVtX18oKSIsIHNlZSAqdGhpcyBzZWN0aW9uIGluIHRoZVxuICAgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXMgdG9cbiAgICAgb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIGlmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHdpdGggYW5cbiAgICJfX2lhZGRfXygpIiBtZXRob2QsICJ4ICs9IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPSB4Ll9faWFkZF9fKHkpIlxuICAgLiBPdGhlcndpc2UsICJ4Ll9fYWRkX18oeSkiIGFuZCAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzXG4gICB3aXRoIHRoZSBldmFsdWF0aW9uIG9mICJ4ICsgeSIuIEluIGNlcnRhaW4gc2l0dWF0aW9ucywgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBlcnJvcnMgKHNlZSAqV2h5IGRvZXNcbiAgIGFfdHVwbGVbaV0gKz0gW1wnaXRlbVwnXSByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgYWRkaXRpb25cbiAgIHdvcmtzPyopLCBidXQgdGhpcyBiZWhhdmlvciBpcyBpbiBmYWN0IHBhcnQgb2YgdGhlIGRhdGEgbW9kZWwuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoIi0iLCAiKyIsXG4gICAiYWJzKCkiIGFuZCAifiIpLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5vYmplY3QuX19yb3VuZF9fKHNlbGZbLCBuXSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJjb21wbGV4KCkiLCAiaW50KCkiLFxuICAgImZsb2F0KCkiIGFuZCAicm91bmQoKSIuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlXG4gICB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmluZGV4KCkiLCBhbmQgd2hlbmV2ZXIgUHl0aG9uIG5lZWRzXG4gICB0byBsb3NzbGVzc2x5IGNvbnZlcnQgdGhlIG51bWVyaWMgb2JqZWN0IHRvIGFuIGludGVnZXIgb2JqZWN0IChzdWNoXG4gICBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGUgYnVpbHQtaW4gImJpbigpIiwgImhleCgpIiBhbmQgIm9jdCgpIlxuICAgZnVuY3Rpb25zKS4gUHJlc2VuY2Ugb2YgdGhpcyBtZXRob2QgaW5kaWNhdGVzIHRoYXQgdGhlIG51bWVyaWNcbiAgIG9iamVjdCBpcyBhbiBpbnRlZ2VyIHR5cGUuICBNdXN0IHJldHVybiBhbiBpbnRlZ2VyLlxuXG4gICBOb3RlOiBXaGVuICJfX2luZGV4X18oKSIgaXMgZGVmaW5lZCwgIl9faW50X18oKSIgc2hvdWxkIGFsc28gYmVcbiAgICAgZGVmaW5lZCwgYW5kIGJvdGggc2h1bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlLCBpbiBvcmRlciB0byBoYXZlIGFcbiAgICAgY29oZXJlbnQgaW50ZWdlciB0eXBlIGNsYXNzLlxuXG5cbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgIndpdGgiIHN0YXRlbWVudC4gVGhlIGNvbnRleHQgbWFuYWdlclxuaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWUgY29udGV4dFxuZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBub3JtYWxseVxuaW52b2tlZCB1c2luZyB0aGUgIndpdGgiIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb24gKlRoZSB3aXRoXG5zdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXIgbWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgIndpdGgiXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlICJhcyIgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgIk5vbmUiLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCAiX19leGl0X18oKSIgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgIndpdGgiIHN0YXRlbWVudC5cblxuXG5TcGVjaWFsIG1ldGhvZCBsb29rdXBcbj09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3IgY3VzdG9tIGNsYXNzZXMsIGltcGxpY2l0IGludm9jYXRpb25zIG9mIHNwZWNpYWwgbWV0aG9kcyBhcmUgb25seVxuZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBpZiBkZWZpbmVkIG9uIGFuIG9iamVjdFwncyB0eXBlLCBub3QgaW5cbnRoZSBvYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIFRoYXQgYmVoYXZpb3VyIGlzIHRoZSByZWFzb24gd2h5XG50aGUgZm9sbG93aW5nIGNvZGUgcmFpc2VzIGFuIGV4Y2VwdGlvbjpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18gPSBsYW1iZGE6IDVcbiAgID4+PiBsZW4oYylcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogb2JqZWN0IG9mIHR5cGUgXCdDXCcgaGFzIG5vIGxlbigpXG5cblRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYmVoYXZpb3VyIGxpZXMgd2l0aCBhIG51bWJlciBvZiBzcGVjaWFsXG5tZXRob2RzIHN1Y2ggYXMgIl9faGFzaF9fKCkiIGFuZCAiX19yZXByX18oKSIgdGhhdCBhcmUgaW1wbGVtZW50ZWQgYnlcbmFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mIHRoZXNlXG5tZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsIHdoZW5cbmludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1ldGhvZCBldmVuIG9mIHRoZSBvYmplY3RcJ3MgbWV0YWNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgTWV0YSh0eXBlKTpcbiAgIC4uLiAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgcHJpbnQoIk1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgcmV0dXJuIHR5cGUuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGNsYXNzIEMob2JqZWN0LCBtZXRhY2xhc3M9TWV0YSk6XG4gICAuLi4gICAgIGRlZiBfX2xlbl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIDEwXG4gICAuLi4gICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICAgIHByaW50KCJDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fKCkgICAgICAgICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSBpbnN0YW5jZVxuICAgQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gdHlwZShjKS5fX2xlbl9fKGMpICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSB0eXBlXG4gICBNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gbGVuKGMpICAgICAgICAgICAgICAgICAgICAgICMgSW1wbGljaXQgbG9va3VwXG4gICAxMFxuXG5CeXBhc3NpbmcgdGhlICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb24gcHJvdmlkZXNcbnNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGUgaW50ZXJwcmV0ZXIsIGF0XG50aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiBzcGVjaWFsIG1ldGhvZHMgKHRoZVxuc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0IGl0c2VsZiBpbiBvcmRlciB0byBiZVxuY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLCB1bmRlclxuICAgIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZCBpZGVhXG4gICAgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWYgaXQgaXNcbiAgICBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgIl9fYWRkX18oKSIpIGZhaWxzIHRoZSBvcGVyYXRpb24gaXMgbm90XG4gICAgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCisgJ3N0cmluZy1tZXRob2RzJzogJ1xuU3RyaW5nIE1ldGhvZHNcbioqKioqKioqKioqKioqXG5cblN0cmluZ3MgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucywgYWxvbmcgd2l0aFxudGhlIGFkZGl0aW9uYWwgbWV0aG9kcyBkZXNjcmliZWQgYmVsb3cuXG5cblN0cmluZ3MgYWxzbyBzdXBwb3J0IHR3byBzdHlsZXMgb2Ygc3RyaW5nIGZvcm1hdHRpbmcsIG9uZSBwcm92aWRpbmcgYVxubGFyZ2UgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGFuZCBjdXN0b21pemF0aW9uIChzZWUgInN0ci5mb3JtYXQoKSIsXG4qRm9ybWF0IFN0cmluZyBTeW50YXgqIGFuZCAqU3RyaW5nIEZvcm1hdHRpbmcqKSBhbmQgdGhlIG90aGVyIGJhc2VkIG9uXG5DICJwcmludGYiIHN0eWxlIGZvcm1hdHRpbmcgdGhhdCBoYW5kbGVzIGEgbmFycm93ZXIgcmFuZ2Ugb2YgdHlwZXMgYW5kXG5pcyBzbGlnaHRseSBoYXJkZXIgdG8gdXNlIGNvcnJlY3RseSwgYnV0IGlzIG9mdGVuIGZhc3RlciBmb3IgdGhlIGNhc2VzXG5pdCBjYW4gaGFuZGxlICgqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKikuXG5cblRoZSAqVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzKiBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNvdmVyc1xuYSBudW1iZXIgb2Ygb3RoZXIgbW9kdWxlcyB0aGF0IHByb3ZpZGUgdmFyaW91cyB0ZXh0IHJlbGF0ZWQgdXRpbGl0aWVzXG4oaW5jbHVkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IGluIHRoZSAicmUiIG1vZHVsZSkuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jYXNlZm9sZCgpXG5cbiAgIFJldHVybiBhIGNhc2Vmb2xkZWQgY29weSBvZiB0aGUgc3RyaW5nLiBDYXNlZm9sZGVkIHN0cmluZ3MgbWF5IGJlXG4gICB1c2VkIGZvciBjYXNlbGVzcyBtYXRjaGluZy5cblxuICAgQ2FzZWZvbGRpbmcgaXMgc2ltaWxhciB0byBsb3dlcmNhc2luZyBidXQgbW9yZSBhZ2dyZXNzaXZlIGJlY2F1c2VcbiAgIGl0IGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgY2FzZSBkaXN0aW5jdGlvbnMgaW4gYSBzdHJpbmcuIEZvclxuICAgZXhhbXBsZSwgdGhlIEdlcm1hbiBsb3dlcmNhc2UgbGV0dGVyICJcJ1x4YzNceDlmXCciIGlzIGVxdWl2YWxlbnQgdG8gIiJzcyIiLlxuICAgU2luY2UgaXQgaXMgYWxyZWFkeSBsb3dlcmNhc2UsICJsb3dlcigpIiB3b3VsZCBkbyBub3RoaW5nIHRvICJcJ1x4YzNceDlmXCciO1xuICAgImNhc2Vmb2xkKCkiIGNvbnZlcnRzIGl0IHRvICIic3MiIi5cblxuICAgVGhlIGNhc2Vmb2xkaW5nIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBhcyBhIGJ5dGVzIG9iamVjdC4gRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgIlwndXRmLThcJyIuICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnRcbiAgIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzICJcJ3N0cmljdFwnIixcbiAgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSAiVW5pY29kZUVycm9yIi4gT3RoZXIgcG9zc2libGVcbiAgIHZhbHVlcyBhcmUgIlwnaWdub3JlXCciLCAiXCdyZXBsYWNlXCciLCAiXCd4bWxjaGFycmVmcmVwbGFjZVwnIixcbiAgICJcJ2JhY2tzbGFzaHJlcGxhY2VcJyIgYW5kIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgdmlhXG4gICAiY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCkiLCBzZWUgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yIGFcbiAgIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuICJGYWxzZSIuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHN1ZmZpeGVzXG4gICB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyh0YWJzaXplPTgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBjaGFyYWN0ZXJzXG4gICAoZGVmYXVsdCBpcyA4LCBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuXG4gICBUbyBleHBhbmQgdGhlIHN0cmluZywgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGVcbiAgIHN0cmluZyBpcyBleGFtaW5lZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICB0YWIgKCJcXHQiKSwgb25lIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIHJlc3VsdFxuICAgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi4gKFRoZVxuICAgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90IGNvcGllZC4pICBJZiB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZVxuICAgKCJcXG4iKSBvciByZXR1cm4gKCJcXHIiKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXNcbiAgIHJlc2V0IHRvIHplcm8uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGNvcGllZCB1bmNoYW5nZWQgYW5kIHRoZVxuICAgY3VycmVudCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZVxuICAgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHdoZW4gcHJpbnRlZC5cblxuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKClcbiAgIFwnMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzRcJ1xuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKDQpXG4gICBcJzAxICAwMTIgMDEyMyAgICAwMTIzNFwnXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgInNbc3RhcnQ6ZW5kXSIuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiAiLTEiIGlmICpzdWIqIGlzIG5vdCBmb3VuZC5cblxuICAgTm90ZTogVGhlICJmaW5kKCkiIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBvbmx5IGlmIHlvdSBuZWVkIHRvIGtub3cgdGhlXG4gICAgIHBvc2l0aW9uIG9mICpzdWIqLiAgVG8gY2hlY2sgaWYgKnN1YiogaXMgYSBzdWJzdHJpbmcgb3Igbm90LCB1c2VcbiAgICAgdGhlICJpbiIgb3BlcmF0b3I6XG5cbiAgICAgICAgPj4+IFwnUHlcJyBpbiBcJ1B5dGhvblwnXG4gICAgICAgIFRydWVcblxuc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpXG5cbiAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXNcbiAgIG1ldGhvZCBpcyBjYWxsZWQgY2FuIGNvbnRhaW4gbGl0ZXJhbCB0ZXh0IG9yIHJlcGxhY2VtZW50IGZpZWxkc1xuICAgZGVsaW1pdGVkIGJ5IGJyYWNlcyAie30iLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXJcbiAgIHRoZSBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYVxuICAga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgZWFjaFxuICAgcmVwbGFjZW1lbnQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZVxuICAgY29ycmVzcG9uZGluZyBhcmd1bWVudC5cblxuICAgPj4+ICJUaGUgc3VtIG9mIDEgKyAyIGlzIHswfSIuZm9ybWF0KDErMilcbiAgIFwnVGhlIHN1bSBvZiAxICsgMiBpcyAzXCdcblxuICAgU2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXNcbiAgIGZvcm1hdHRpbmcgb3B0aW9ucyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybWF0IHN0cmluZ3MuXG5cbnN0ci5mb3JtYXRfbWFwKG1hcHBpbmcpXG5cbiAgIFNpbWlsYXIgdG8gInN0ci5mb3JtYXQoKiptYXBwaW5nKSIsIGV4Y2VwdCB0aGF0ICJtYXBwaW5nIiBpcyB1c2VkXG4gICBkaXJlY3RseSBhbmQgbm90IGNvcGllZCB0byBhICJkaWN0Ii4gIFRoaXMgaXMgdXNlZnVsIGlmIGZvciBleGFtcGxlXG4gICAibWFwcGluZyIgaXMgYSBkaWN0IHN1YmNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgRGVmYXVsdChkaWN0KTpcbiAgIC4uLiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6XG4gICAuLi4gICAgICAgICByZXR1cm4ga2V5XG4gICAuLi5cbiAgID4+PiBcJ3tuYW1lfSB3YXMgYm9ybiBpbiB7Y291bnRyeX1cJy5mb3JtYXRfbWFwKERlZmF1bHQobmFtZT1cJ0d1aWRvXCcpKVxuICAgXCdHdWlkbyB3YXMgYm9ybiBpbiBjb3VudHJ5XCdcblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5zdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSAiZmluZCgpIiwgYnV0IHJhaXNlICJWYWx1ZUVycm9yIiB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBIGNoYXJhY3RlciAiYyJcbiAgIGlzIGFscGhhbnVtZXJpYyBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zICJUcnVlIjpcbiAgICJjLmlzYWxwaGEoKSIsICJjLmlzZGVjaW1hbCgpIiwgImMuaXNkaWdpdCgpIiwgb3IgImMuaXNudW1lcmljKCkiLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgIGZvcm0gZGVjaW1hbC1yYWRpeCBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG4gICBVc2UgImtleXdvcmQuaXNrZXl3b3JkKCkiIHRvIHRlc3QgZm9yIHJlc2VydmVkIGlkZW50aWZpZXJzIHN1Y2ggYXNcbiAgICJkZWYiIGFuZCAiY2xhc3MiLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSBsb3dlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBudW1lcmljIGNoYXJhY3RlcnMsXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBOdW1lcmljXG4gICBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZVxuICAgdGhlIFVuaWNvZGUgbnVtZXJpYyB2YWx1ZSBwcm9wZXJ0eSwgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTlxuICAgT05FIEZJRlRILiAgRm9ybWFsbHksIG51bWVyaWMgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCB0aGVcbiAgIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCwgTnVtZXJpY19UeXBlPURlY2ltYWwgb3JcbiAgIE51bWVyaWNfVHlwZT1OdW1lcmljLlxuXG5zdHIuaXNwcmludGFibGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBwcmludGFibGUgb3IgdGhlXG4gICBzdHJpbmcgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gIE5vbnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZVxuICAgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlciBkYXRhYmFzZSBhc1xuICAgIk90aGVyIiBvciAiU2VwYXJhdG9yIiwgZXhjZXB0aW5nIHRoZSBBU0NJSSBzcGFjZSAoMHgyMCkgd2hpY2ggaXNcbiAgIGNvbnNpZGVyZWQgcHJpbnRhYmxlLiAgKE5vdGUgdGhhdCBwcmludGFibGUgY2hhcmFjdGVycyBpbiB0aGlzXG4gICBjb250ZXh0IGFyZSB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIGVzY2FwZWQgd2hlbiAicmVwcigpIiBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvICJzeXMuc3Rkb3V0IiBvciAic3lzLnN0ZGVyciIuKVxuXG5zdHIuaXNzcGFjZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgV2hpdGVzcGFjZVxuICAgY2hhcmFjdGVycyAgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJPdGhlciIgb3IgIlNlcGFyYXRvciIgYW5kIHRob3NlIHdpdGggYmlkaXJlY3Rpb25hbFxuICAgcHJvcGVydHkgYmVpbmcgb25lIG9mICJXUyIsICJCIiwgb3IgIlMiLlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBBICJUeXBlRXJyb3IiIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICppdGVyYWJsZSosIGluY2x1ZGluZyAiYnl0ZXMiIG9iamVjdHMuXG4gICBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlIHN0cmluZyBwcm92aWRpbmcgdGhpcyBtZXRob2QuXG5cbnN0ci5sanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgbGVmdCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3JcbiAgIGVxdWFsIHRvICJsZW4ocykiLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBUaGUgbG93ZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci5sc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuc3RhdGljIHN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pXG5cbiAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvclxuICAgInN0ci50cmFuc2xhdGUoKSIuXG5cbiAgIElmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nXG4gICBVbmljb2RlIG9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyAoc3RyaW5ncyBvZiBsZW5ndGggMSkgdG9cbiAgIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MgKG9mIGFyYml0cmFyeSBsZW5ndGhzKSBvciBOb25lLlxuICAgQ2hhcmFjdGVyIGtleXMgd2lsbCB0aGVuIGJlIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblxuICAgSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCxcbiAgIGFuZCBpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWRcbiAgIHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gIElmIHRoZXJlIGlzIGEgdGhpcmRcbiAgIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvXG4gICBOb25lIGluIHRoZSByZXN1bHQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbnN0ci5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpvbGQqXG4gICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5XG4gICB0aGUgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuXG5cbnN0ci5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiAic1tzdGFydDplbmRdIi5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuICItMSIgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlICJyZmluZCgpIiBidXQgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbnN0ci5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgICJOb25lIiwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvciBzcGxpdHRpbmdcbiAgIGZyb20gdGhlIHJpZ2h0LCAicnNwbGl0KCkiIGJlaGF2ZXMgbGlrZSAic3BsaXQoKSIgd2hpY2ggaXNcbiAgIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG5zdHIuc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuICBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCpcbiAgIHNwbGl0cyBhcmUgZG9uZSAodGh1cywgdGhlIGxpc3Qgd2lsbCBoYXZlIGF0IG1vc3QgIm1heHNwbGl0KzEiXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgIi0xIiwgdGhlbiB0aGVyZSBpc1xuICAgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICAiXCcxLCwyXCcuc3BsaXQoXCcsXCcpIiByZXR1cm5zICJbXCcxXCcsIFwnXCcsIFwnMlwnXSIpLiAgVGhlICpzZXAqIGFyZ3VtZW50XG4gICBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgICJcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpIiByZXR1cm5zICJbXCcxXCcsIFwnMlwnLCBcJzNcJ10iKS4gU3BsaXR0aW5nIGFuXG4gICBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyAiW1wnXCddIi5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyAiTm9uZSIsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhICJOb25lIiBzZXBhcmF0b3IgcmV0dXJucyAiW10iLlxuXG4gICBGb3IgZXhhbXBsZSwgIlwnIDEgIDIgICAzICBcJy5zcGxpdCgpIiByZXR1cm5zICJbXCcxXCcsIFwnMlwnLCBcJzNcJ10iLCBhbmRcbiAgICJcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpIiByZXR1cm5zICJbXCcxXCcsIFwnMiAgIDMgIFwnXSIuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuIFRoaXMgbWV0aG9kIHVzZXMgdGhlICp1bml2ZXJzYWwgbmV3bGluZXMqIGFwcHJvYWNoIHRvXG4gICBzcGxpdHRpbmcgbGluZXMuIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuICAgRm9yIGV4YW1wbGUsICJcJ2FiIGNcXG5cXG5kZSBmZ1xccmtsXFxyXFxuXCcuc3BsaXRsaW5lcygpIiByZXR1cm5zICJbXCdhYlxuICAgY1wnLCBcJ1wnLCBcJ2RlIGZnXCcsIFwna2xcJ10iLCB3aGlsZSB0aGUgc2FtZSBjYWxsIHdpdGhcbiAgICJzcGxpdGxpbmVzKFRydWUpIiByZXR1cm5zICJbXCdhYiBjXFxuXCcsIFwnXFxuXCcsIFwnZGUgZmdcXHJcJywgXCdrbFxcclxcblwnXSIuXG5cbiAgIFVubGlrZSAic3BsaXQoKSIgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXNcbiAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsXG4gICBsaW5lIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lLlxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZSByZXR1cm5cbiAgICJGYWxzZSIuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9vayBmb3IuXG4gICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuICAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXQgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKlxuICAgYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycyogYXJndW1lbnQgaXNcbiAgIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZVxuICAgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgXCdzcGFjaW91c1wnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlXCdcblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB0aGF0XG4gICAicy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkgPT0gcyIuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgIC4uLiAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgcylcbiAgICAgIC4uLlxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuc3RyLnRyYW5zbGF0ZShtYXApXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlICpzKiB3aGVyZSBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkXG4gICB0aHJvdWdoIHRoZSAqbWFwKiB3aGljaCBtdXN0IGJlIGEgZGljdGlvbmFyeSBvZiBVbmljb2RlIG9yZGluYWxzXG4gICAoaW50ZWdlcnMpIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgIk5vbmUiLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byAiTm9uZSIgYXJlXG4gICBkZWxldGVkLlxuXG4gICBZb3UgY2FuIHVzZSAic3RyLm1ha2V0cmFucygpIiB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbiBtYXAgZnJvbVxuICAgY2hhcmFjdGVyLXRvLWNoYXJhY3RlciBtYXBwaW5ncyBpbiBkaWZmZXJlbnQgZm9ybWF0cy5cblxuICAgTm90ZTogQW4gZXZlbiBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBjaGFyYWN0ZXJcbiAgICAgbWFwcGluZyBjb2RlYyB1c2luZyB0aGUgImNvZGVjcyIgbW9kdWxlIChzZWUgImVuY29kaW5ncy5jcDEyNTEiXG4gICAgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIHVwcGVyY2FzZS4gIE5vdGUgdGhhdCAic3RyLnVwcGVyKCkuaXN1cHBlcigpIiBtaWdodCBiZVxuICAgIkZhbHNlIiBpZiAicyIgY29udGFpbnMgdW5jYXNlZCBjaGFyYWN0ZXJzIG9yIGlmIHRoZSBVbmljb2RlXG4gICBjYXRlZ29yeSBvZiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcihzKSBpcyBub3QgIkx1IiAoTGV0dGVyLFxuICAgdXBwZXJjYXNlKSwgYnV0IGUuZy4gIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG4gICBUaGUgdXBwZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAibGVuKHMpIi5cbicsCisgJ3N0cmluZ3MnOiAnXG5TdHJpbmcgYW5kIEJ5dGVzIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblN0cmluZyBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgc3RyaW5nbGl0ZXJhbCAgIDo6PSBbc3RyaW5ncHJlZml4XShzaG9ydHN0cmluZyB8IGxvbmdzdHJpbmcpXG4gICBzdHJpbmdwcmVmaXggICAgOjo9ICJyIiB8ICJ1IiB8ICJSIiB8ICJVIlxuICAgc2hvcnRzdHJpbmcgICAgIDo6PSAiXCciIHNob3J0c3RyaW5naXRlbSogIlwnIiB8IFwnIlwnIHNob3J0c3RyaW5naXRlbSogXCciXCdcbiAgIGxvbmdzdHJpbmcgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ3N0cmluZ2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nc3RyaW5naXRlbSogXCciIiJcJ1xuICAgc2hvcnRzdHJpbmdpdGVtIDo6PSBzaG9ydHN0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIGxvbmdzdHJpbmdpdGVtICA6Oj0gbG9uZ3N0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIHNob3J0c3RyaW5nY2hhciA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ3N0cmluZ2NoYXIgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBzdHJpbmdlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBzb3VyY2UgY2hhcmFjdGVyPlxuXG4gICBieXRlc2xpdGVyYWwgICA6Oj0gYnl0ZXNwcmVmaXgoc2hvcnRieXRlcyB8IGxvbmdieXRlcylcbiAgIGJ5dGVzcHJlZml4ICAgIDo6PSAiYiIgfCAiQiIgfCAiYnIiIHwgIkJyIiB8ICJiUiIgfCAiQlIiIHwgInJiIiB8ICJyQiIgfCAiUmIiIHwgIlJCIlxuICAgc2hvcnRieXRlcyAgICAgOjo9ICJcJyIgc2hvcnRieXRlc2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydGJ5dGVzaXRlbSogXCciXCdcbiAgIGxvbmdieXRlcyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nYnl0ZXNpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ2J5dGVzaXRlbSogXCciIiJcJ1xuICAgc2hvcnRieXRlc2l0ZW0gOjo9IHNob3J0Ynl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIGxvbmdieXRlc2l0ZW0gIDo6PSBsb25nYnl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIHNob3J0Ynl0ZXNjaGFyIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdieXRlc2NoYXIgIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIGJ5dGVzZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgQVNDSUkgY2hhcmFjdGVyPlxuXG5PbmUgc3ludGFjdGljIHJlc3RyaWN0aW9uIG5vdCBpbmRpY2F0ZWQgYnkgdGhlc2UgcHJvZHVjdGlvbnMgaXMgdGhhdFxud2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCBiZXR3ZWVuIHRoZSAic3RyaW5ncHJlZml4IiBvciAiYnl0ZXNwcmVmaXgiXG5hbmQgdGhlIHJlc3Qgb2YgdGhlIGxpdGVyYWwuIFRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldCBpcyBkZWZpbmVkIGJ5XG50aGUgZW5jb2RpbmcgZGVjbGFyYXRpb247IGl0IGlzIFVURi04IGlmIG5vIGVuY29kaW5nIGRlY2xhcmF0aW9uIGlzXG5naXZlbiBpbiB0aGUgc291cmNlIGZpbGU7IHNlZSBzZWN0aW9uICpFbmNvZGluZyBkZWNsYXJhdGlvbnMqLlxuXG5JbiBwbGFpbiBFbmdsaXNoOiBCb3RoIHR5cGVzIG9mIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZ1xuc2luZ2xlIHF1b3RlcyAoIlwnIikgb3IgZG91YmxlIHF1b3RlcyAoIiIiKS4gIFRoZXkgY2FuIGFsc28gYmUgZW5jbG9zZWRcbmluIG1hdGNoaW5nIGdyb3VwcyBvZiB0aHJlZSBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodGhlc2UgYXJlXG5nZW5lcmFsbHkgcmVmZXJyZWQgdG8gYXMgKnRyaXBsZS1xdW90ZWQgc3RyaW5ncyopLiAgVGhlIGJhY2tzbGFzaFxuKCJcXCIpIGNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYVxuc3BlY2lhbCBtZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZVxuY2hhcmFjdGVyLlxuXG5CeXRlcyBsaXRlcmFscyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggIlwnYlwnIiBvciAiXCdCXCciOyB0aGV5IHByb2R1Y2VcbmFuIGluc3RhbmNlIG9mIHRoZSAiYnl0ZXMiIHR5cGUgaW5zdGVhZCBvZiB0aGUgInN0ciIgdHlwZS4gIFRoZXkgbWF5XG5vbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVyczsgYnl0ZXMgd2l0aCBhIG51bWVyaWMgdmFsdWUgb2YgMTI4IG9yXG5ncmVhdGVyIG11c3QgYmUgZXhwcmVzc2VkIHdpdGggZXNjYXBlcy5cblxuQXMgb2YgUHl0aG9uIDMuMyBpdCBpcyBwb3NzaWJsZSBhZ2FpbiB0byBwcmVmaXggdW5pY29kZSBzdHJpbmdzIHdpdGggYVxuInUiIHByZWZpeCB0byBzaW1wbGlmeSBtYWludGVuYW5jZSBvZiBkdWFsIDIueCBhbmQgMy54IGNvZGViYXNlcy5cblxuQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYVxubGV0dGVyICJcJ3JcJyIgb3IgIlwnUlwnIjsgc3VjaCBzdHJpbmdzIGFyZSBjYWxsZWQgKnJhdyBzdHJpbmdzKiBhbmQgdHJlYXRcbmJhY2tzbGFzaGVzIGFzIGxpdGVyYWwgY2hhcmFjdGVycy4gIEFzIGEgcmVzdWx0LCBpbiBzdHJpbmcgbGl0ZXJhbHMsXG4iXCdcXFVcJyIgYW5kICJcJ1xcdVwnIiBlc2NhcGVzIGluIHJhdyBzdHJpbmdzIGFyZSBub3QgdHJlYXRlZCBzcGVjaWFsbHkuXG5HaXZlbiB0aGF0IFB5dGhvbiAyLnhcJ3MgcmF3IHVuaWNvZGUgbGl0ZXJhbHMgYmVoYXZlIGRpZmZlcmVudGx5IHRoYW5cblB5dGhvbiAzLnhcJ3MgdGhlICJcJ3VyXCciIHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSAiXCdyYlwnIiBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhc1xuICAgYmVlbiBhZGRlZCBhcyBhIHN5bm9ueW0gb2YgIlwnYnJcJyIuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogU3VwcG9ydCBmb3IgdGhlIHVuaWNvZGUgbGVnYWN5IGxpdGVyYWxcbiAgICgidVwndmFsdWVcJyIpIHdhcyByZWludHJvZHVjZWQgdG8gc2ltcGxpZnkgdGhlIG1haW50ZW5hbmNlIG9mIGR1YWxcbiAgIFB5dGhvbiAyLnggYW5kIDMueCBjb2RlYmFzZXMuIFNlZSAqKlBFUCA0MTQqKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSW4gdHJpcGxlLXF1b3RlZCBzdHJpbmdzLCB1bmVzY2FwZWQgbmV3bGluZXMgYW5kIHF1b3RlcyBhcmUgYWxsb3dlZFxuKGFuZCBhcmUgcmV0YWluZWQpLCBleGNlcHQgdGhhdCB0aHJlZSB1bmVzY2FwZWQgcXVvdGVzIGluIGEgcm93XG50ZXJtaW5hdGUgdGhlIHN0cmluZy4gIChBICJxdW90ZSIgaXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIG9wZW4gdGhlXG5zdHJpbmcsIGkuZS4gZWl0aGVyICJcJyIgb3IgIiIiLilcblxuVW5sZXNzIGFuICJcJ3JcJyIgb3IgIlwnUlwnIiBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpblxuc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieVxuU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXG9vbyIgICAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgxLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx4aGgiICAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoMiwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuRXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCAiXFxOe25hbWV9IiAgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAoNCkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcdXh4eHgiICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMTYtYml0IGhleCB2YWx1ZSAgIHwgKDUpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXFV4eHh4eHh4eCIgICAgICB8IENoYXJhY3RlciB3aXRoIDMyLWJpdCBoZXggdmFsdWUgICB8ICg2KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuMi4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG4zLiBJbiBhIGJ5dGVzIGxpdGVyYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzIGRlbm90ZSB0aGUgYnl0ZVxuICAgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIEluIGEgc3RyaW5nIGxpdGVyYWwsIHRoZXNlIGVzY2FwZXMgZGVub3RlIGFcbiAgIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG40LiBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciBuYW1lIGFsaWFzZXMgWzFdIGhhcyBiZWVuXG4gICBhZGRlZC5cblxuNS4gSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGUgcGFpciBjYW4gYmVcbiAgIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuICBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmVcbiAgIHJlcXVpcmVkLlxuXG42LiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXkuICBFeGFjdGx5IGVpZ2h0IGhleFxuICAgZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuVW5saWtlIFN0YW5kYXJkIEMsIGFsbCB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbGVmdCBpbiB0aGVcbnN0cmluZyB1bmNoYW5nZWQsIGkuZS4sICp0aGUgYmFja3NsYXNoIGlzIGxlZnQgaW4gdGhlIHN0cmluZyouICAoVGhpc1xuYmVoYXZpb3IgaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nOiBpZiBhbiBlc2NhcGUgc2VxdWVuY2UgaXMgbWlzdHlwZWQsXG50aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBtb3JlIGVhc2lseSByZWNvZ25pemVkIGFzIGJyb2tlbi4pICBJdCBpcyBhbHNvXG5pbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmdcbmxpdGVyYWxzIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgdW5yZWNvZ25pemVkIGVzY2FwZXMgZm9yIGJ5dGVzXG5saXRlcmFscy5cblxuRXZlbiBpbiBhIHJhdyBzdHJpbmcsIHN0cmluZyBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCxcbmJ1dCB0aGUgYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHN0cmluZzsgZm9yIGV4YW1wbGUsICJyIlxcIiIiIGlzIGFcbnZhbGlkIHN0cmluZyBsaXRlcmFsIGNvbnNpc3Rpbmcgb2YgdHdvIGNoYXJhY3RlcnM6IGEgYmFja3NsYXNoIGFuZCBhXG5kb3VibGUgcXVvdGU7ICJyIlxcIiIgaXMgbm90IGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgKGV2ZW4gYSByYXcgc3RyaW5nXG5jYW5ub3QgZW5kIGluIGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYSByYXdcbnN0cmluZyBjYW5ub3QgZW5kIGluIGEgc2luZ2xlIGJhY2tzbGFzaCogKHNpbmNlIHRoZSBiYWNrc2xhc2ggd291bGRcbmVzY2FwZSB0aGUgZm9sbG93aW5nIHF1b3RlIGNoYXJhY3RlcikuICBOb3RlIGFsc28gdGhhdCBhIHNpbmdsZVxuYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aG9zZSB0d28gY2hhcmFjdGVyc1xuYXMgcGFydCBvZiB0aGUgc3RyaW5nLCAqbm90KiBhcyBhIGxpbmUgY29udGludWF0aW9uLlxuJywKICAnc3Vic2NyaXB0aW9ucyc6ICdcblN1YnNjcmlwdGlvbnNcbioqKioqKioqKioqKipcblxuQSBzdWJzY3JpcHRpb24gc2VsZWN0cyBhbiBpdGVtIG9mIGEgc2VxdWVuY2UgKHN0cmluZywgdHVwbGUgb3IgbGlzdClcbm9yIG1hcHBpbmcgKGRpY3Rpb25hcnkpIG9iamVjdDpcblxuICAgc3Vic2NyaXB0aW9uIDo6PSBwcmltYXJ5ICJbIiBleHByZXNzaW9uX2xpc3QgIl0iXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IHRoYXQgc3VwcG9ydHMgc3Vic2NyaXB0aW9uLFxuZS5nLiBhIGxpc3Qgb3IgZGljdGlvbmFyeS4gIFVzZXItZGVmaW5lZCBvYmplY3RzIGNhbiBzdXBwb3J0XG5zdWJzY3JpcHRpb24gYnkgZGVmaW5pbmcgYSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5Gb3IgYnVpbHQtaW4gb2JqZWN0cywgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvYmplY3RzIHRoYXQgc3VwcG9ydFxuc3Vic2NyaXB0aW9uOlxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcsIHRoZSBleHByZXNzaW9uIGxpc3QgbXVzdCBldmFsdWF0ZSB0byBhblxub2JqZWN0IHdob3NlIHZhbHVlIGlzIG9uZSBvZiB0aGUga2V5cyBvZiB0aGUgbWFwcGluZywgYW5kIHRoZVxuc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlIHZhbHVlIGluIHRoZSBtYXBwaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhhdFxua2V5LiAgKFRoZSBleHByZXNzaW9uIGxpc3QgaXMgYSB0dXBsZSBleGNlcHQgaWYgaXQgaGFzIGV4YWN0bHkgb25lXG5pdGVtLilcblxuSWYgdGhlIHByaW1hcnkgaXMgYSBzZXF1ZW5jZSwgdGhlIGV4cHJlc3Npb24gKGxpc3QpIG11c3QgZXZhbHVhdGUgdG9cbmFuIGludGVnZXIgb3IgYSBzbGljZSAoYXMgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuXG5cblRoZSBmb3JtYWwgc3ludGF4IG1ha2VzIG5vIHNwZWNpYWwgcHJvdmlzaW9uIGZvciBuZWdhdGl2ZSBpbmRpY2VzIGluXG5zZXF1ZW5jZXM7IGhvd2V2ZXIsIGJ1aWx0LWluIHNlcXVlbmNlcyBhbGwgcHJvdmlkZSBhICJfX2dldGl0ZW1fXygpIlxubWV0aG9kIHRoYXQgaW50ZXJwcmV0cyBuZWdhdGl2ZSBpbmRpY2VzIGJ5IGFkZGluZyB0aGUgbGVuZ3RoIG9mIHRoZVxuc2VxdWVuY2UgdG8gdGhlIGluZGV4IChzbyB0aGF0ICJ4Wy0xXSIgc2VsZWN0cyB0aGUgbGFzdCBpdGVtIG9mICJ4IikuXG5UaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgbnVtYmVyXG5vZiBpdGVtcyBpbiB0aGUgc2VxdWVuY2UsIGFuZCB0aGUgc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlIGl0ZW0gd2hvc2VcbmluZGV4IGlzIHRoYXQgdmFsdWUgKGNvdW50aW5nIGZyb20gemVybykuIFNpbmNlIHRoZSBzdXBwb3J0IGZvclxubmVnYXRpdmUgaW5kaWNlcyBhbmQgc2xpY2luZyBvY2N1cnMgaW4gdGhlIG9iamVjdFwncyAiX19nZXRpdGVtX18oKSJcbm1ldGhvZCwgc3ViY2xhc3NlcyBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIHdpbGwgbmVlZCB0byBleHBsaWNpdGx5IGFkZFxudGhhdCBzdXBwb3J0LlxuXG5BIHN0cmluZ1wncyBpdGVtcyBhcmUgY2hhcmFjdGVycy4gIEEgY2hhcmFjdGVyIGlzIG5vdCBhIHNlcGFyYXRlIGRhdGFcbnR5cGUgYnV0IGEgc3RyaW5nIG9mIGV4YWN0bHkgb25lIGNoYXJhY3Rlci5cbicsCiAgJ3RydXRoJzogJ1xuVHJ1dGggVmFsdWUgVGVzdGluZ1xuKioqKioqKioqKioqKioqKioqKlxuXG5Bbnkgb2JqZWN0IGNhbiBiZSB0ZXN0ZWQgZm9yIHRydXRoIHZhbHVlLCBmb3IgdXNlIGluIGFuICJpZiIgb3JcbiJ3aGlsZSIgY29uZGl0aW9uIG9yIGFzIG9wZXJhbmQgb2YgdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyBiZWxvdy4gVGhlXG5mb2xsb3dpbmcgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGZhbHNlOlxuXG4qICJOb25lIlxuXG4qICJGYWxzZSJcblxuKiB6ZXJvIG9mIGFueSBudW1lcmljIHR5cGUsIGZvciBleGFtcGxlLCAiMCIsICIwLjAiLCAiMGoiLlxuXG4qIGFueSBlbXB0eSBzZXF1ZW5jZSwgZm9yIGV4YW1wbGUsICJcJ1wnIiwgIigpIiwgIltdIi5cblxuKiBhbnkgZW1wdHkgbWFwcGluZywgZm9yIGV4YW1wbGUsICJ7fSIuXG5cbiogaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzLCBpZiB0aGUgY2xhc3MgZGVmaW5lcyBhXG4gICJfX2Jvb2xfXygpIiBvciAiX19sZW5fXygpIiBtZXRob2QsIHdoZW4gdGhhdCBtZXRob2QgcmV0dXJucyB0aGVcbiAgaW50ZWdlciB6ZXJvIG9yICJib29sIiB2YWx1ZSAiRmFsc2UiLiBbMV1cblxuQWxsIG90aGVyIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0cnVlIC0tLSBzbyBvYmplY3RzIG9mIG1hbnkgdHlwZXMgYXJlXG5hbHdheXMgdHJ1ZS5cblxuT3BlcmF0aW9ucyBhbmQgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIEJvb2xlYW4gcmVzdWx0IGFsd2F5c1xucmV0dXJuICIwIiBvciAiRmFsc2UiIGZvciBmYWxzZSBhbmQgIjEiIG9yICJUcnVlIiBmb3IgdHJ1ZSwgdW5sZXNzXG5vdGhlcndpc2Ugc3RhdGVkLiAoSW1wb3J0YW50IGV4Y2VwdGlvbjogdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyAib3IiXG5hbmQgImFuZCIgYWx3YXlzIHJldHVybiBvbmUgb2YgdGhlaXIgb3BlcmFuZHMuKVxuJywKLSAndHJ5JzogJ1xuVGhlICJ0cnkiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlICJmaW5hbGx5IiBjbGF1c2UuXG5cbldoZW4gYSAicmV0dXJuIiwgImJyZWFrIiBvciAiY29udGludWUiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpbiB0aGVcbiJ0cnkiIHN1aXRlIG9mIGEgInRyeSIuLi4iZmluYWxseSIgc3RhdGVtZW50LCB0aGUgImZpbmFsbHkiIGNsYXVzZSBpc1xuYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgaWxsZWdhbCBpblxudGhlICJmaW5hbGx5IiBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG4nLAotICd0eXBlcyc6ICdcblRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeVxuKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkJlbG93IGlzIGEgbGlzdCBvZiB0aGUgdHlwZXMgdGhhdCBhcmUgYnVpbHQgaW50byBQeXRob24uICBFeHRlbnNpb25cbm1vZHVsZXMgKHdyaXR0ZW4gaW4gQywgSmF2YSwgb3Igb3RoZXIgbGFuZ3VhZ2VzLCBkZXBlbmRpbmcgb24gdGhlXG5pbXBsZW1lbnRhdGlvbikgY2FuIGRlZmluZSBhZGRpdGlvbmFsIHR5cGVzLiAgRnV0dXJlIHZlcnNpb25zIG9mXG5QeXRob24gbWF5IGFkZCB0eXBlcyB0byB0aGUgdHlwZSBoaWVyYXJjaHkgKGUuZy4sIHJhdGlvbmFsIG51bWJlcnMsXG5lZmZpY2llbnRseSBzdG9yZWQgYXJyYXlzIG9mIGludGVnZXJzLCBldGMuKSwgYWx0aG91Z2ggc3VjaCBhZGRpdGlvbnNcbndpbGwgb2Z0ZW4gYmUgcHJvdmlkZWQgdmlhIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluc3RlYWQuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSAiTm9uZSIuIEl0XG4gICBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBtYW55IHNpdHVhdGlvbnMsIGUuZy4sXG4gICBpdCBpcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVyblxuICAgYW55dGhpbmcuIEl0cyB0cnV0aCB2YWx1ZSBpcyBmYWxzZS5cblxuTm90SW1wbGVtZW50ZWRcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgIk5vdEltcGxlbWVudGVkIi4gTnVtZXJpYyBtZXRob2RzIGFuZCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBtYXlcbiAgIHJldHVybiB0aGlzIHZhbHVlIGlmIHRoZXkgZG8gbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciB0aGVcbiAgIG9wZXJhbmRzIHByb3ZpZGVkLiAgKFRoZSBpbnRlcnByZXRlciB3aWxsIHRoZW4gdHJ5IHRoZSByZWZsZWN0ZWRcbiAgIG9wZXJhdGlvbiwgb3Igc29tZSBvdGhlciBmYWxsYmFjaywgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRvci4pICBJdHNcbiAgIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbkVsbGlwc2lzXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGxpdGVyYWwgIi4uLiIgb3IgdGhlXG4gICBidWlsdC1pbiBuYW1lICJFbGxpcHNpcyIuICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuIm51bWJlcnMuTnVtYmVyIlxuICAgVGhlc2UgYXJlIGNyZWF0ZWQgYnkgbnVtZXJpYyBsaXRlcmFscyBhbmQgcmV0dXJuZWQgYXMgcmVzdWx0cyBieVxuICAgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kIGFyaXRobWV0aWMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgTnVtZXJpY1xuICAgb2JqZWN0cyBhcmUgaW1tdXRhYmxlOyBvbmNlIGNyZWF0ZWQgdGhlaXIgdmFsdWUgbmV2ZXIgY2hhbmdlcy5cbiAgIFB5dGhvbiBudW1iZXJzIGFyZSBvZiBjb3Vyc2Ugc3Ryb25nbHkgcmVsYXRlZCB0byBtYXRoZW1hdGljYWxcbiAgIG51bWJlcnMsIGJ1dCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBudW1lcmljYWwgcmVwcmVzZW50YXRpb25cbiAgIGluIGNvbXB1dGVycy5cblxuICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYW5kXG4gICBjb21wbGV4IG51bWJlcnM6XG5cbiAgICJudW1iZXJzLkludGVncmFsIlxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBJbnRlZ2VycyAoImludCIpXG5cbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCBudW1iZXJzIGluIGFuIHVubGltaXRlZCByYW5nZSwgc3ViamVjdCB0b1xuICAgICAgICAgYXZhaWxhYmxlICh2aXJ0dWFsKSBtZW1vcnkgb25seS4gIEZvciB0aGUgcHVycG9zZSBvZiBzaGlmdFxuICAgICAgICAgYW5kIG1hc2sgb3BlcmF0aW9ucywgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgYXNzdW1lZCwgYW5kXG4gICAgICAgICBuZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBpbiBhIHZhcmlhbnQgb2YgMlwnc1xuICAgICAgICAgY29tcGxlbWVudCB3aGljaCBnaXZlcyB0aGUgaWxsdXNpb24gb2YgYW4gaW5maW5pdGUgc3RyaW5nIG9mXG4gICAgICAgICBzaWduIGJpdHMgZXh0ZW5kaW5nIHRvIHRoZSBsZWZ0LlxuXG4gICAgICBCb29sZWFucyAoImJvb2wiKVxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IHRoZSB0cnV0aCB2YWx1ZXMgRmFsc2UgYW5kIFRydWUuICBUaGUgdHdvXG4gICAgICAgICBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgdGhlXG4gICAgICAgICBvbmx5IEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlXG4gICAgICAgICBpbnRlZ2VyIHR5cGUsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kXG4gICAgICAgICAxLCByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzICIiRmFsc2UiIiBvclxuICAgICAgICAgIiJUcnVlIiIgYXJlIHJldHVybmVkLCByZXNwZWN0aXZlbHkuXG5cbiAgICAgIFRoZSBydWxlcyBmb3IgaW50ZWdlciByZXByZXNlbnRhdGlvbiBhcmUgaW50ZW5kZWQgdG8gZ2l2ZSB0aGVcbiAgICAgIG1vc3QgbWVhbmluZ2Z1bCBpbnRlcnByZXRhdGlvbiBvZiBzaGlmdCBhbmQgbWFzayBvcGVyYXRpb25zXG4gICAgICBpbnZvbHZpbmcgbmVnYXRpdmUgaW50ZWdlcnMuXG5cbiAgICJudW1iZXJzLlJlYWwiICgiZmxvYXQiKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IG1hY2hpbmUtbGV2ZWwgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludFxuICAgICAgbnVtYmVycy4gWW91IGFyZSBhdCB0aGUgbWVyY3kgb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZVxuICAgICAgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhIGltcGxlbWVudGF0aW9uKSBmb3IgdGhlIGFjY2VwdGVkXG4gICAgICByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1cbiAgICAgIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kXG4gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBpc1xuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgICJudW1iZXJzLkNvbXBsZXgiICgiY29tcGxleCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciAieiIgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgInoucmVhbCIgYW5kICJ6LmltYWciLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlIGluZGV4IHNldFxuICAgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mIHNlcXVlbmNlICphKiBpc1xuICAgc2VsZWN0ZWQgYnkgImFbaV0iLlxuXG4gICBTZXF1ZW5jZXMgYWxzbyBzdXBwb3J0IHNsaWNpbmc6ICJhW2k6al0iIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqICI8PSIgKmsqICI8IiAqaiouICBXaGVuIHVzZWQgYXMgYW5cbiAgIGV4cHJlc3Npb24sIGEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlLiAgVGhpcyBpbXBsaWVzXG4gICB0aGF0IHRoZSBpbmRleCBzZXQgaXMgcmVudW1iZXJlZCBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAwLlxuXG4gICBTb21lIHNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgImV4dGVuZGVkIHNsaWNpbmciIHdpdGggYSB0aGlyZCAic3RlcCJcbiAgIHBhcmFtZXRlcjogImFbaTpqOmtdIiBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCogd2hlcmVcbiAgICJ4ID0gaSArIG4qayIsICpuKiAiPj0iICIwIiBhbmQgKmkqICI8PSIgKngqICI8IiAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlXG4gICAgICAgICBjb2RlcG9pbnRzLiBBbGwgdGhlIGNvZGVwb2ludHMgaW4gcmFuZ2UgIlUrMDAwMCAtIFUrMTBGRkZGIlxuICAgICAgICAgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuXCd0IGhhdmUgYSAiY2hyIlxuICAgICAgICAgdHlwZSwgYW5kIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGFzIGFcbiAgICAgICAgIHN0cmluZyBvYmplY3Qgd2l0aCBsZW5ndGggIjEiLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJvcmQoKSJcbiAgICAgICAgIGNvbnZlcnRzIGEgY2hhcmFjdGVyIHRvIGl0cyBjb2RlcG9pbnQgKGFzIGFuIGludGVnZXIpO1xuICAgICAgICAgImNocigpIiBjb252ZXJ0cyBhbiBpbnRlZ2VyIGluIHJhbmdlICIwIC0gMTBGRkZGIiB0byB0aGVcbiAgICAgICAgIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiAic3RyLmVuY29kZSgpIiBjYW4gYmUgdXNlZCB0b1xuICAgICAgICAgY29udmVydCBhICJzdHIiIHRvICJieXRlcyIgdXNpbmcgdGhlIGdpdmVuIGVuY29kaW5nLCBhbmRcbiAgICAgICAgICJieXRlcy5kZWNvZGUoKSIgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSB0aGUgb3Bwb3NpdGUuXG5cbiAgICAgIFR1cGxlc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgdHVwbGUgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gVHVwbGVzIG9mXG4gICAgICAgICB0d28gb3IgbW9yZSBpdGVtcyBhcmUgZm9ybWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBvZlxuICAgICAgICAgZXhwcmVzc2lvbnMuICBBIHR1cGxlIG9mIG9uZSBpdGVtIChhIFwnc2luZ2xldG9uXCcpIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFmZml4aW5nIGEgY29tbWEgdG8gYW4gZXhwcmVzc2lvbiAoYW4gZXhwcmVzc2lvbiBieVxuICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGNyZWF0ZSBhIHR1cGxlLCBzaW5jZSBwYXJlbnRoZXNlcyBtdXN0IGJlXG4gICAgICAgICB1c2FibGUgZm9yIGdyb3VwaW5nIG9mIGV4cHJlc3Npb25zKS4gIEFuIGVtcHR5IHR1cGxlIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFuIGVtcHR5IHBhaXIgb2YgcGFyZW50aGVzZXMuXG5cbiAgICAgIEJ5dGVzXG4gICAgICAgICBBIGJ5dGVzIG9iamVjdCBpcyBhbiBpbW11dGFibGUgYXJyYXkuICBUaGUgaXRlbXMgYXJlIDgtYml0XG4gICAgICAgICBieXRlcywgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cbiAgICAgICAgIEJ5dGVzIGxpdGVyYWxzIChsaWtlICJiXCdhYmNcJyIpIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICAgICAgICJieXRlcygpIiBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYnl0ZXMgb2JqZWN0cy4gIEFsc28sXG4gICAgICAgICBieXRlcyBvYmplY3RzIGNhbiBiZSBkZWNvZGVkIHRvIHN0cmluZ3MgdmlhIHRoZSAiZGVjb2RlKCkiXG4gICAgICAgICBtZXRob2QuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kICJkZWwiIChkZWxldGUpIHN0YXRlbWVudHMuXG5cbiAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzOlxuXG4gICAgICBMaXN0c1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgbGlzdCBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiAgTGlzdHMgYXJlXG4gICAgICAgICBmb3JtZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGluXG4gICAgICAgICBzcXVhcmUgYnJhY2tldHMuIChOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY2FzZXMgbmVlZGVkXG4gICAgICAgICB0byBmb3JtIGxpc3RzIG9mIGxlbmd0aCAwIG9yIDEuKVxuXG4gICAgICBCeXRlIEFycmF5c1xuICAgICAgICAgQSBieXRlYXJyYXkgb2JqZWN0IGlzIGEgbXV0YWJsZSBhcnJheS4gVGhleSBhcmUgY3JlYXRlZCBieVxuICAgICAgICAgdGhlIGJ1aWx0LWluICJieXRlYXJyYXkoKSIgY29uc3RydWN0b3IuICBBc2lkZSBmcm9tIGJlaW5nXG4gICAgICAgICBtdXRhYmxlIChhbmQgaGVuY2UgdW5oYXNoYWJsZSksIGJ5dGUgYXJyYXlzIG90aGVyd2lzZSBwcm92aWRlXG4gICAgICAgICB0aGUgc2FtZSBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWxpdHkgYXMgaW1tdXRhYmxlIGJ5dGVzXG4gICAgICAgICBvYmplY3RzLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZSAiYXJyYXkiIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZiBhXG4gICAgICBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsIGFzIGRvZXMgdGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlLlxuXG5TZXQgdHlwZXNcbiAgIFRoZXNlIHJlcHJlc2VudCB1bm9yZGVyZWQsIGZpbml0ZSBzZXRzIG9mIHVuaXF1ZSwgaW1tdXRhYmxlXG4gICBvYmplY3RzLiBBcyBzdWNoLCB0aGV5IGNhbm5vdCBiZSBpbmRleGVkIGJ5IGFueSBzdWJzY3JpcHQuIEhvd2V2ZXIsXG4gICB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSJcbiAgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIHNldC4gQ29tbW9uIHVzZXMgZm9yIHNldHMgYXJlIGZhc3RcbiAgIG1lbWJlcnNoaXAgdGVzdGluZywgcmVtb3ZpbmcgZHVwbGljYXRlcyBmcm9tIGEgc2VxdWVuY2UsIGFuZFxuICAgY29tcHV0aW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIHN1Y2ggYXMgaW50ZXJzZWN0aW9uLCB1bmlvbixcbiAgIGRpZmZlcmVuY2UsIGFuZCBzeW1tZXRyaWMgZGlmZmVyZW5jZS5cblxuICAgRm9yIHNldCBlbGVtZW50cywgdGhlIHNhbWUgaW1tdXRhYmlsaXR5IHJ1bGVzIGFwcGx5IGFzIGZvclxuICAgZGljdGlvbmFyeSBrZXlzLiBOb3RlIHRoYXQgbnVtZXJpYyB0eXBlcyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yXG4gICBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sICIxIiBhbmRcbiAgICIxLjAiKSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LlxuXG4gICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOlxuXG4gICBTZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYSBtdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgICJzZXQoKSIgY29uc3RydWN0b3IgYW5kIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIGJ5IHNldmVyYWxcbiAgICAgIG1ldGhvZHMsIHN1Y2ggYXMgImFkZCgpIi5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluICJmcm96ZW5zZXQoKSIgY29uc3RydWN0b3IuICBBcyBhIGZyb3plbnNldCBpcyBpbW11dGFibGVcbiAgICAgIGFuZCAqaGFzaGFibGUqLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mIGFub3RoZXJcbiAgICAgIHNldCwgb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS5cblxuTWFwcGluZ3NcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4XG4gICBzZXRzLiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uICJhW2tdIiBzZWxlY3RzIHRoZSBpdGVtIGluZGV4ZWQgYnkgImsiXG4gICBmcm9tIHRoZSBtYXBwaW5nICJhIjsgdGhpcyBjYW4gYmUgdXNlZCBpbiBleHByZXNzaW9ucyBhbmQgYXMgdGhlXG4gICB0YXJnZXQgb2YgYXNzaWdubWVudHMgb3IgImRlbCIgc3RhdGVtZW50cy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAibGVuKCkiIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sICIxIiBhbmQgIjEuMCIpXG4gICAgICB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4IHRoZSBzYW1lXG4gICAgICBkaWN0aW9uYXJ5IGVudHJ5LlxuXG4gICAgICBEaWN0aW9uYXJpZXMgYXJlIG11dGFibGU7IHRoZXkgY2FuIGJlIGNyZWF0ZWQgYnkgdGhlICJ7Li4ufSJcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgImRibS5uZGJtIiBhbmQgImRibS5nbnUiIHByb3ZpZGVcbiAgICAgIGFkZGl0aW9uYWwgZXhhbXBsZXMgb2YgbWFwcGluZyB0eXBlcywgYXMgZG9lcyB0aGUgImNvbGxlY3Rpb25zIlxuICAgICAgbW9kdWxlLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT0rXG4gICAgICB8ICJfX2RvY19fIiAgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvbiAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX25hbWVfXyIgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX3F1YWxuYW1lX18iICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgKnF1YWxpZmllZCBuYW1lKiB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX21vZHVsZV9fIiAgICAgICAgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGVmYXVsdHNfXyIgICAgICAgICAgICB8IEEgdHVwbGUgY29udGFpbmluZyBkZWZhdWx0ICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jb2RlX18iICAgICAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2dsb2JhbHNfXyIgICAgICAgICAgICAgfCBBIHJlZmVyZW5jZSB0byB0aGUgZGljdGlvbmFyeSAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGljdF9fIiAgICAgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jbG9zdXJlX18iICAgICAgICAgICAgIHwgIk5vbmUiIG9yIGEgdHVwbGUgb2YgY2VsbHMgdGhhdCB8IFJlYWQtb25seSAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2Fubm90YXRpb25zX18iICAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBhbm5vdGF0aW9ucyAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fa3dkZWZhdWx0c19fIiAgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGRlZmF1bHRzIGZvciAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuXG4gICAgICBNb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIGxhYmVsbGVkICJXcml0YWJsZSIgY2hlY2sgdGhlIHR5cGUgb2YgdGhlXG4gICAgICBhc3NpZ25lZCB2YWx1ZS5cblxuICAgICAgRnVuY3Rpb24gb2JqZWN0cyBhbHNvIHN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBhcmJpdHJhcnlcbiAgICAgIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXR0YWNoIG1ldGFkYXRhXG4gICAgICB0byBmdW5jdGlvbnMuICBSZWd1bGFyIGF0dHJpYnV0ZSBkb3Qtbm90YXRpb24gaXMgdXNlZCB0byBnZXQgYW5kXG4gICAgICBzZXQgc3VjaCBhdHRyaWJ1dGVzLiAqTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHlcbiAgICAgIHN1cHBvcnRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25cbiAgICAgIGF0dHJpYnV0ZXMgb24gYnVpbHQtaW4gZnVuY3Rpb25zIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAgICBmdXR1cmUuKlxuXG4gICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb25cJ3MgZGVmaW5pdGlvbiBjYW4gYmVcbiAgICAgIHJldHJpZXZlZCBmcm9tIGl0cyBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbFxuICAgICAgdHlwZXMgYmVsb3cuXG5cbiAgIEluc3RhbmNlIG1ldGhvZHNcbiAgICAgIEFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgY29tYmluZXMgYSBjbGFzcywgYSBjbGFzcyBpbnN0YW5jZSBhbmRcbiAgICAgIGFueSBjYWxsYWJsZSBvYmplY3QgKG5vcm1hbGx5IGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uKS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogIl9fc2VsZl9fIiBpcyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIG9iamVjdCwgIl9fZnVuY19fIiBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyAiX19kb2NfXyIgaXMgdGhlXG4gICAgICBtZXRob2RcJ3MgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyAiX19mdW5jX18uX19kb2NfXyIpOyAiX19uYW1lX18iXG4gICAgICBpcyB0aGUgbWV0aG9kIG5hbWUgKHNhbWUgYXMgIl9fZnVuY19fLl9fbmFtZV9fIik7ICJfX21vZHVsZV9fIlxuICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbWV0aG9kIHdhcyBkZWZpbmVkIGluLCBvciAiTm9uZSJcbiAgICAgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICAgICBNZXRob2RzIGFsc28gc3VwcG9ydCBhY2Nlc3NpbmcgKGJ1dCBub3Qgc2V0dGluZykgdGhlIGFyYml0cmFyeVxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZCB3aGVuIGdldHRpbmcgYW5cbiAgICAgIGF0dHJpYnV0ZSBvZiBhIGNsYXNzIChwZXJoYXBzIHZpYSBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzKSwgaWZcbiAgICAgIHRoYXQgYXR0cmlidXRlIGlzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBvciBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0LlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgdXNlci1cbiAgICAgIGRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcyB2aWEgb25lIG9mIGl0cyBpbnN0YW5jZXMsXG4gICAgICBpdHMgIl9fc2VsZl9fIiBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLCBhbmQgdGhlIG1ldGhvZCBvYmplY3RcbiAgICAgIGlzIHNhaWQgdG8gYmUgYm91bmQuICBUaGUgbmV3IG1ldGhvZFwncyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpc1xuICAgICAgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZ1xuICAgICAgYW5vdGhlciBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgdGhlIGJlaGF2aW91ciBpc1xuICAgICAgdGhlIHNhbWUgYXMgZm9yIGEgZnVuY3Rpb24gb2JqZWN0LCBleGNlcHQgdGhhdCB0aGUgIl9fZnVuY19fIlxuICAgICAgYXR0cmlidXRlIG9mIHRoZSBuZXcgaW5zdGFuY2UgaXMgbm90IHRoZSBvcmlnaW5hbCBtZXRob2Qgb2JqZWN0XG4gICAgICBidXQgaXRzICJfX2Z1bmNfXyIgYXR0cmlidXRlLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCBpdHMgIl9fc2VsZl9fIiBhdHRyaWJ1dGVcbiAgICAgIGlzIHRoZSBjbGFzcyBpdHNlbGYsIGFuZCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUgaXMgdGhlXG4gICAgICBmdW5jdGlvbiBvYmplY3QgdW5kZXJseWluZyB0aGUgY2xhc3MgbWV0aG9kLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24gKCJfX2Z1bmNfXyIpIGlzIGNhbGxlZCwgaW5zZXJ0aW5nIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgKCJfX3NlbGZfXyIpIGluIGZyb250IG9mIHRoZSBhcmd1bWVudCBsaXN0LiAgRm9yIGluc3RhbmNlLCB3aGVuXG4gICAgICAiQyIgaXMgYSBjbGFzcyB3aGljaCBjb250YWlucyBhIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gImYoKSIsXG4gICAgICBhbmQgIngiIGlzIGFuIGluc3RhbmNlIG9mICJDIiwgY2FsbGluZyAieC5mKDEpIiBpcyBlcXVpdmFsZW50IHRvXG4gICAgICBjYWxsaW5nICJDLmYoeCwgMSkiLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgZGVyaXZlZCBmcm9tIGEgY2xhc3MgbWV0aG9kXG4gICAgICBvYmplY3QsIHRoZSAiY2xhc3MgaW5zdGFuY2UiIHN0b3JlZCBpbiAiX19zZWxmX18iIHdpbGwgYWN0dWFsbHlcbiAgICAgIGJlIHRoZSBjbGFzcyBpdHNlbGYsIHNvIHRoYXQgY2FsbGluZyBlaXRoZXIgInguZigxKSIgb3IgIkMuZigxKSJcbiAgICAgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyAiZihDLDEpIiB3aGVyZSAiZiIgaXMgdGhlIHVuZGVybHlpbmdcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBOb3RlIHRoYXQgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gZnVuY3Rpb24gb2JqZWN0IHRvIGluc3RhbmNlXG4gICAgICBtZXRob2Qgb2JqZWN0IGhhcHBlbnMgZWFjaCB0aW1lIHRoZSBhdHRyaWJ1dGUgaXMgcmV0cmlldmVkIGZyb21cbiAgICAgIHRoZSBpbnN0YW5jZS4gIEluIHNvbWUgY2FzZXMsIGEgZnJ1aXRmdWwgb3B0aW1pemF0aW9uIGlzIHRvXG4gICAgICBhc3NpZ24gdGhlIGF0dHJpYnV0ZSB0byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBjYWxsIHRoYXQgbG9jYWxcbiAgICAgIHZhcmlhYmxlLiBBbHNvIG5vdGljZSB0aGF0IHRoaXMgdHJhbnNmb3JtYXRpb24gb25seSBoYXBwZW5zIGZvclxuICAgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uczsgb3RoZXIgY2FsbGFibGUgb2JqZWN0cyAoYW5kIGFsbCBub24tXG4gICAgICBjYWxsYWJsZSBvYmplY3RzKSBhcmUgcmV0cmlldmVkIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24uICBJdCBpc1xuICAgICAgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgd2hpY2ggYXJlXG4gICAgICBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgaW5zdGFuY2UgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gYm91bmRcbiAgICAgIG1ldGhvZHM7IHRoaXMgKm9ubHkqIGhhcHBlbnMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYW4gYXR0cmlidXRlXG4gICAgICBvZiB0aGUgY2xhc3MuXG5cbiAgIEdlbmVyYXRvciBmdW5jdGlvbnNcbiAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIHVzZXMgdGhlICJ5aWVsZCIgc3RhdGVtZW50IChzZWVcbiAgICAgIHNlY3Rpb24gKlRoZSB5aWVsZCBzdGF0ZW1lbnQqKSBpcyBjYWxsZWQgYSAqZ2VuZXJhdG9yIGZ1bmN0aW9uKi5cbiAgICAgIFN1Y2ggYSBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIGFsd2F5cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9iamVjdFxuICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb246ICBjYWxsaW5nXG4gICAgICB0aGUgaXRlcmF0b3JcJ3MgIml0ZXJhdG9yLl9fbmV4dF9fKCkiIG1ldGhvZCB3aWxsIGNhdXNlIHRoZVxuICAgICAgZnVuY3Rpb24gdG8gZXhlY3V0ZSB1bnRpbCBpdCBwcm92aWRlcyBhIHZhbHVlIHVzaW5nIHRoZSAieWllbGQiXG4gICAgICBzdGF0ZW1lbnQuICBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcyBhICJyZXR1cm4iIHN0YXRlbWVudCBvclxuICAgICAgZmFsbHMgb2ZmIHRoZSBlbmQsIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZVxuICAgICAgaXRlcmF0b3Igd2lsbCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2V0IG9mIHZhbHVlcyB0byBiZVxuICAgICAgcmV0dXJuZWQuXG5cbiAgIEJ1aWx0LWluIGZ1bmN0aW9uc1xuICAgICAgQSBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIEMgZnVuY3Rpb24uXG4gICAgICBFeGFtcGxlcyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYXJlICJsZW4oKSIgYW5kICJtYXRoLnNpbigpIlxuICAgICAgKCJtYXRoIiBpcyBhIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2ZcbiAgICAgIHRoZSBhcmd1bWVudHMgYXJlIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1cbiAgICAgIG9ubHkgYXR0cmlidXRlczogIl9fZG9jX18iIGlzIHRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uXG4gICAgICBzdHJpbmcsIG9yICJOb25lIiBpZiB1bmF2YWlsYWJsZTsgIl9fbmFtZV9fIiBpcyB0aGUgZnVuY3Rpb25cJ3NcbiAgICAgIG5hbWU7ICJfX3NlbGZfXyIgaXMgc2V0IHRvICJOb25lIiAoYnV0IHNlZSB0aGUgbmV4dCBpdGVtKTtcbiAgICAgICJfX21vZHVsZV9fIiBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZFxuICAgICAgaW4gb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlLlxuXG4gICBCdWlsdC1pbiBtZXRob2RzXG4gICAgICBUaGlzIGlzIHJlYWxseSBhIGRpZmZlcmVudCBkaXNndWlzZSBvZiBhIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzXG4gICAgICB0aW1lIGNvbnRhaW5pbmcgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhblxuICAgICAgaW1wbGljaXQgZXh0cmEgYXJndW1lbnQuICBBbiBleGFtcGxlIG9mIGEgYnVpbHQtaW4gbWV0aG9kIGlzXG4gICAgICAiYWxpc3QuYXBwZW5kKCkiLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgIl9fc2VsZl9fIiBpcyBzZXQgdG8gdGhlXG4gICAgICBvYmplY3QgZGVub3RlZCBieSAqYWxpc3QqLlxuXG4gICBDbGFzc2VzXG4gICAgICBDbGFzc2VzIGFyZSBjYWxsYWJsZS4gIFRoZXNlIG9iamVjdHMgbm9ybWFsbHkgYWN0IGFzIGZhY3Rvcmllc1xuICAgICAgZm9yIG5ldyBpbnN0YW5jZXMgb2YgdGhlbXNlbHZlcywgYnV0IHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlIGZvclxuICAgICAgY2xhc3MgdHlwZXMgdGhhdCBvdmVycmlkZSAiX19uZXdfXygpIi4gIFRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICAgICBjYWxsIGFyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgIl9faW5pdF9fKCkiIHRvIGluaXRpYWxpemUgdGhlIG5ldyBpbnN0YW5jZS5cblxuICAgQ2xhc3MgSW5zdGFuY2VzXG4gICAgICBJbnN0YW5jZXMgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgY2FuIGJlIG1hZGUgY2FsbGFibGUgYnkgZGVmaW5pbmdcbiAgICAgIGEgIl9fY2FsbF9fKCkiIG1ldGhvZCBpbiB0aGVpciBjbGFzcy5cblxuTW9kdWxlc1xuICAgTW9kdWxlcyBhcmUgYSBiYXNpYyBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLCBhbmQgYXJlXG4gICBjcmVhdGVkIGJ5IHRoZSAqaW1wb3J0IHN5c3RlbSogYXMgaW52b2tlZCBlaXRoZXIgYnkgdGhlICJpbXBvcnQiXG4gICBzdGF0ZW1lbnQgKHNlZSAiaW1wb3J0IiksIG9yIGJ5IGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXNcbiAgICJpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIiBhbmQgYnVpbHQtaW4gIl9faW1wb3J0X18oKSIuICBBIG1vZHVsZVxuICAgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieSBhIGRpY3Rpb25hcnkgb2JqZWN0ICh0aGlzIGlzXG4gICB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZSAiX19nbG9iYWxzX18iIGF0dHJpYnV0ZSBvZlxuICAgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSkuICBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmVcbiAgIHRyYW5zbGF0ZWQgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sICJtLngiIGlzIGVxdWl2YWxlbnRcbiAgIHRvICJtLl9fZGljdF9fWyJ4Il0iLiBBIG1vZHVsZSBvYmplY3QgZG9lcyBub3QgY29udGFpbiB0aGUgY29kZVxuICAgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIChzaW5jZSBpdCBpc25cJ3QgbmVlZGVkIG9uY2VcbiAgIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgIm0ueCA9IDEiIGlzIGVxdWl2YWxlbnQgdG8gIm0uX19kaWN0X19bIngiXSA9IDEiLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6ICJfX2RpY3RfXyIgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWU7XG4gICAiX19kb2NfXyIgaXMgdGhlIG1vZHVsZVwncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgIk5vbmUiIGlmXG4gICB1bmF2YWlsYWJsZTsgIl9fZmlsZV9fIiBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaCB0aGVcbiAgIG1vZHVsZSB3YXMgbG9hZGVkLCBpZiBpdCB3YXMgbG9hZGVkIGZyb20gYSBmaWxlLiBUaGUgIl9fZmlsZV9fIlxuICAgYXR0cmlidXRlIG1heSBiZSBtaXNzaW5nIGZvciBjZXJ0YWluIHR5cGVzIG9mIG1vZHVsZXMsIHN1Y2ggYXMgQ1xuICAgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjsgZm9yXG4gICBleHRlbnNpb24gbW9kdWxlcyBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdCBpc1xuICAgdGhlIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIkMueCIgaXMgdHJhbnNsYXRlZCB0b1xuICAgIkMuX19kaWN0X19bIngiXSIgKGFsdGhvdWdoIHRoZXJlIGFyZSBhIG51bWJlciBvZiBob29rcyB3aGljaCBhbGxvd1xuICAgZm9yIG90aGVyIG1lYW5zIG9mIGxvY2F0aW5nIGF0dHJpYnV0ZXMpLiBXaGVuIHRoZSBhdHRyaWJ1dGUgbmFtZSBpc1xuICAgbm90IGZvdW5kIHRoZXJlLCB0aGUgYXR0cmlidXRlIHNlYXJjaCBjb250aW51ZXMgaW4gdGhlIGJhc2VcbiAgIGNsYXNzZXMuIFRoaXMgc2VhcmNoIG9mIHRoZSBiYXNlIGNsYXNzZXMgdXNlcyB0aGUgQzMgbWV0aG9kXG4gICByZXNvbHV0aW9uIG9yZGVyIHdoaWNoIGJlaGF2ZXMgY29ycmVjdGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mXG4gICBcJ2RpYW1vbmRcJyBpbmhlcml0YW5jZSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uIGFuY2VzdG9yLiBBZGRpdGlvbmFsXG4gICBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBQeXRob24gY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIDIuMyByZWxlYXNlIGF0XG4gICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uXG5cbiAgIFdoZW4gYSBjbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlIChmb3IgY2xhc3MgIkMiLCBzYXkpIHdvdWxkIHlpZWxkIGFcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgIl9fc2VsZl9fIiBhdHRyaWJ1dGVzIGlzICJDIi4gIFdoZW4gaXQgd291bGQgeWllbGQgYVxuICAgc3RhdGljIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG9iamVjdCB3cmFwcGVkIGJ5XG4gICB0aGUgc3RhdGljIG1ldGhvZCBvYmplY3QuIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqXG4gICBmb3IgYW5vdGhlciB3YXkgaW4gd2hpY2ggYXR0cmlidXRlcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heVxuICAgZGlmZmVyIGZyb20gdGhvc2UgYWN0dWFsbHkgY29udGFpbmVkIGluIGl0cyAiX19kaWN0X18iLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6ICJfX25hbWVfXyIgaXMgdGhlIGNsYXNzIG5hbWU7ICJfX21vZHVsZV9fIiBpc1xuICAgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZDsgIl9fZGljdF9fIiBpcyB0aGVcbiAgIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyAiX19iYXNlc19fIiBpcyBhIHR1cGxlXG4gICAocG9zc2libHkgZW1wdHkgb3IgYSBzaW5nbGV0b24pIGNvbnRhaW5pbmcgdGhlIGJhc2UgY2xhc3NlcywgaW4gdGhlXG4gICBvcmRlciBvZiB0aGVpciBvY2N1cnJlbmNlIGluIHRoZSBiYXNlIGNsYXNzIGxpc3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgIGNsYXNzXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBOb25lIGlmIHVuZGVmaW5lZC5cblxuQ2xhc3MgaW5zdGFuY2VzXG4gICBBIGNsYXNzIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBhIGNsYXNzIG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgIEEgY2xhc3MgaW5zdGFuY2UgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGFzIGEgZGljdGlvbmFyeSB3aGljaFxuICAgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHdoaWNoIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBzZWFyY2hlZC5cbiAgIFdoZW4gYW4gYXR0cmlidXRlIGlzIG5vdCBmb3VuZCB0aGVyZSwgYW5kIHRoZSBpbnN0YW5jZVwncyBjbGFzcyBoYXNcbiAgIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWUsIHRoZSBzZWFyY2ggY29udGludWVzIHdpdGggdGhlIGNsYXNzXG4gICBhdHRyaWJ1dGVzLiAgSWYgYSBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQgdGhhdCBpcyBhIHVzZXItZGVmaW5lZFxuICAgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3RcbiAgIHdob3NlICJfX3NlbGZfXyIgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZS4gIFN0YXRpYyBtZXRob2QgYW5kXG4gICBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzbyB0cmFuc2Zvcm1lZDsgc2VlIGFib3ZlIHVuZGVyXG4gICAiQ2xhc3NlcyIuICBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKiBmb3IgYW5vdGhlciB3YXlcbiAgIGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyByZXRyaWV2ZWQgdmlhIGl0cyBpbnN0YW5jZXMgbWF5XG4gICBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIGNsYXNzXCdzICJfX2RpY3RfXyIuXG4gICBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQsIGFuZCB0aGUgb2JqZWN0XCdzIGNsYXNzIGhhcyBhXG4gICAiX19nZXRhdHRyX18oKSIgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0byBzYXRpc2Z5IHRoZSBsb29rdXAuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50cyBhbmQgZGVsZXRpb25zIHVwZGF0ZSB0aGUgaW5zdGFuY2VcJ3NcbiAgIGRpY3Rpb25hcnksIG5ldmVyIGEgY2xhc3NcJ3MgZGljdGlvbmFyeS4gIElmIHRoZSBjbGFzcyBoYXMgYVxuICAgIl9fc2V0YXR0cl9fKCkiIG9yICJfX2RlbGF0dHJfXygpIiBtZXRob2QsIHRoaXMgaXMgY2FsbGVkIGluc3RlYWRcbiAgIG9mIHVwZGF0aW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBDbGFzcyBpbnN0YW5jZXMgY2FuIHByZXRlbmQgdG8gYmUgbnVtYmVycywgc2VxdWVuY2VzLCBvciBtYXBwaW5nc1xuICAgaWYgdGhleSBoYXZlIG1ldGhvZHMgd2l0aCBjZXJ0YWluIHNwZWNpYWwgbmFtZXMuICBTZWUgc2VjdGlvblxuICAgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKi5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiAiX19kaWN0X18iIGlzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeTtcbiAgICJfX2NsYXNzX18iIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuSS9PIG9iamVjdHMgKGFsc28ga25vd24gYXMgZmlsZSBvYmplY3RzKVxuICAgQSAqZmlsZSBvYmplY3QqIHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgVmFyaW91cyBzaG9ydGN1dHMgYXJlXG4gICBhdmFpbGFibGUgdG8gY3JlYXRlIGZpbGUgb2JqZWN0czogdGhlICJvcGVuKCkiIGJ1aWx0LWluIGZ1bmN0aW9uLFxuICAgYW5kIGFsc28gIm9zLnBvcGVuKCkiLCAib3MuZmRvcGVuKCkiLCBhbmQgdGhlICJtYWtlZmlsZSgpIiBtZXRob2RcbiAgIG9mIHNvY2tldCBvYmplY3RzIChhbmQgcGVyaGFwcyBieSBvdGhlciBmdW5jdGlvbnMgb3IgbWV0aG9kc1xuICAgcHJvdmlkZWQgYnkgZXh0ZW5zaW9uIG1vZHVsZXMpLlxuXG4gICBUaGUgb2JqZWN0cyAic3lzLnN0ZGluIiwgInN5cy5zdGRvdXQiIGFuZCAic3lzLnN0ZGVyciIgYXJlXG4gICBpbml0aWFsaXplZCB0byBmaWxlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50ZXJwcmV0ZXJcJ3NcbiAgIHN0YW5kYXJkIGlucHV0LCBvdXRwdXQgYW5kIGVycm9yIHN0cmVhbXM7IHRoZXkgYXJlIGFsbCBvcGVuIGluIHRleHRcbiAgIG1vZGUgYW5kIHRoZXJlZm9yZSBmb2xsb3cgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZVxuICAgImlvLlRleHRJT0Jhc2UiIGFic3RyYWN0IGNsYXNzLlxuXG5JbnRlcm5hbCB0eXBlc1xuICAgQSBmZXcgdHlwZXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBpbnRlcnByZXRlciBhcmUgZXhwb3NlZCB0byB0aGVcbiAgIHVzZXIuIFRoZWlyIGRlZmluaXRpb25zIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlXG4gICBpbnRlcnByZXRlciwgYnV0IHRoZXkgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuXG5cbiAgIENvZGUgb2JqZWN0c1xuICAgICAgQ29kZSBvYmplY3RzIHJlcHJlc2VudCAqYnl0ZS1jb21waWxlZCogZXhlY3V0YWJsZSBQeXRob24gY29kZSxcbiAgICAgIG9yICpieXRlY29kZSouIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb2RlIG9iamVjdCBhbmQgYVxuICAgICAgZnVuY3Rpb24gb2JqZWN0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhbiBleHBsaWNpdFxuICAgICAgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvblwncyBnbG9iYWxzICh0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhc1xuICAgICAgZGVmaW5lZCksIHdoaWxlIGEgY29kZSBvYmplY3QgY29udGFpbnMgbm8gY29udGV4dDsgYWxzbyB0aGVcbiAgICAgIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdCwgbm90XG4gICAgICBpbiB0aGUgY29kZSBvYmplY3QgKGJlY2F1c2UgdGhleSByZXByZXNlbnQgdmFsdWVzIGNhbGN1bGF0ZWQgYXRcbiAgICAgIHJ1bi10aW1lKS4gIFVubGlrZSBmdW5jdGlvbiBvYmplY3RzLCBjb2RlIG9iamVjdHMgYXJlIGltbXV0YWJsZVxuICAgICAgYW5kIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gbXV0YWJsZVxuICAgICAgb2JqZWN0cy5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogImNvX25hbWUiIGdpdmVzIHRoZSBmdW5jdGlvbiBuYW1lO1xuICAgICAgImNvX2FyZ2NvdW50IiBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIChpbmNsdWRpbmdcbiAgICAgIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgImNvX25sb2NhbHMiIGlzIHRoZSBudW1iZXIgb2ZcbiAgICAgIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiAoaW5jbHVkaW5nIGFyZ3VtZW50cyk7XG4gICAgICAiY29fdmFybmFtZXMiIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIGxvY2FsXG4gICAgICB2YXJpYWJsZXMgKHN0YXJ0aW5nIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVzKTsgImNvX2NlbGx2YXJzIiBpcyBhXG4gICAgICB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBsb2NhbCB2YXJpYWJsZXMgdGhhdCBhcmVcbiAgICAgIHJlZmVyZW5jZWQgYnkgbmVzdGVkIGZ1bmN0aW9uczsgImNvX2ZyZWV2YXJzIiBpcyBhIHR1cGxlXG4gICAgICBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBmcmVlIHZhcmlhYmxlczsgImNvX2NvZGUiIGlzIGEgc3RyaW5nXG4gICAgICByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9uczsgImNvX2NvbnN0cyJcbiAgICAgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbGl0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7XG4gICAgICAiY29fbmFtZXMiIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7XG4gICAgICAiY29fZmlsZW5hbWUiIGlzIHRoZSBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZSBjb2RlIHdhcyBjb21waWxlZDtcbiAgICAgICJjb19maXJzdGxpbmVubyIgaXMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbjtcbiAgICAgICJjb19sbm90YWIiIGlzIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBtYXBwaW5nIGZyb20gYnl0ZWNvZGVcbiAgICAgIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIChmb3IgZGV0YWlscyBzZWUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZVxuICAgICAgaW50ZXJwcmV0ZXIpOyAiY29fc3RhY2tzaXplIiBpcyB0aGUgcmVxdWlyZWQgc3RhY2sgc2l6ZVxuICAgICAgKGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMpOyAiY29fZmxhZ3MiIGlzIGFuIGludGVnZXIgZW5jb2RpbmcgYVxuICAgICAgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGZvciAiY29fZmxhZ3MiOiBiaXQgIjB4MDQiXG4gICAgICBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlICIqYXJndW1lbnRzIiBzeW50YXggdG8gYWNjZXB0IGFuXG4gICAgICBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBiaXQgIjB4MDgiIGlzIHNldCBpZlxuICAgICAgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlICIqKmtleXdvcmRzIiBzeW50YXggdG8gYWNjZXB0IGFyYml0cmFyeVxuICAgICAga2V5d29yZCBhcmd1bWVudHM7IGJpdCAiMHgyMCIgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiBpcyBhXG4gICAgICBnZW5lcmF0b3IuXG5cbiAgICAgIEZ1dHVyZSBmZWF0dXJlIGRlY2xhcmF0aW9ucyAoImZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24iKVxuICAgICAgYWxzbyB1c2UgYml0cyBpbiAiY29fZmxhZ3MiIHRvIGluZGljYXRlIHdoZXRoZXIgYSBjb2RlIG9iamVjdFxuICAgICAgd2FzIGNvbXBpbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgZW5hYmxlZDogYml0ICIweDIwMDAiIGlzXG4gICAgICBzZXQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjb21waWxlZCB3aXRoIGZ1dHVyZSBkaXZpc2lvbiBlbmFibGVkO1xuICAgICAgYml0cyAiMHgxMCIgYW5kICIweDEwMDAiIHdlcmUgdXNlZCBpbiBlYXJsaWVyIHZlcnNpb25zIG9mXG4gICAgICBQeXRob24uXG5cbiAgICAgIE90aGVyIGJpdHMgaW4gImNvX2ZsYWdzIiBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS5cblxuICAgICAgSWYgYSBjb2RlIG9iamVjdCByZXByZXNlbnRzIGEgZnVuY3Rpb24sIHRoZSBmaXJzdCBpdGVtIGluXG4gICAgICAiY29fY29uc3RzIiBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIGZ1bmN0aW9uLCBvclxuICAgICAgIk5vbmUiIGlmIHVuZGVmaW5lZC5cblxuICAgRnJhbWUgb2JqZWN0c1xuICAgICAgRnJhbWUgb2JqZWN0cyByZXByZXNlbnQgZXhlY3V0aW9uIGZyYW1lcy4gIFRoZXkgbWF5IG9jY3VyIGluXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0cyAoc2VlIGJlbG93KS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogImZfYmFjayIgaXMgdG8gdGhlIHByZXZpb3VzIHN0YWNrXG4gICAgICBmcmFtZSAodG93YXJkcyB0aGUgY2FsbGVyKSwgb3IgIk5vbmUiIGlmIHRoaXMgaXMgdGhlIGJvdHRvbVxuICAgICAgc3RhY2sgZnJhbWU7ICJmX2NvZGUiIGlzIHRoZSBjb2RlIG9iamVjdCBiZWluZyBleGVjdXRlZCBpbiB0aGlzXG4gICAgICBmcmFtZTsgImZfbG9jYWxzIiBpcyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGxvb2sgdXAgbG9jYWxcbiAgICAgIHZhcmlhYmxlczsgImZfZ2xvYmFscyIgaXMgdXNlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcztcbiAgICAgICJmX2J1aWx0aW5zIiBpcyB1c2VkIGZvciBidWlsdC1pbiAoaW50cmluc2ljKSBuYW1lczsgImZfbGFzdGkiXG4gICAgICBnaXZlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvIHRoZVxuICAgICAgYnl0ZWNvZGUgc3RyaW5nIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogImZfdHJhY2UiLCBpZiBub3QgIk5vbmUiLCBpcyBhXG4gICAgICBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGNvZGUgbGluZSAodGhpcyBpc1xuICAgICAgdXNlZCBieSB0aGUgZGVidWdnZXIpOyAiZl9saW5lbm8iIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIG9mXG4gICAgICB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uIGp1bXBzXG4gICAgICB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEEgZGVidWdnZXJcbiAgICAgIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpIGJ5IHdyaXRpbmdcbiAgICAgIHRvIGZfbGluZW5vLlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGVcbiAgICAgIHR1cGxlIHJldHVybmVkIGJ5ICJzeXMuZXhjX2luZm8oKSIuIFdoZW4gdGhlIHByb2dyYW0gY29udGFpbnMgbm9cbiAgICAgIHN1aXRhYmxlIGhhbmRsZXIsIHRoZSBzdGFjayB0cmFjZSBpcyB3cml0dGVuIChuaWNlbHkgZm9ybWF0dGVkKVxuICAgICAgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbTsgaWYgdGhlIGludGVycHJldGVyIGlzIGludGVyYWN0aXZlLFxuICAgICAgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhcyAic3lzLmxhc3RfdHJhY2ViYWNrIi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogInRiX25leHQiIGlzIHRoZSBuZXh0IGxldmVsIGluIHRoZVxuICAgICAgc3RhY2sgdHJhY2UgKHRvd2FyZHMgdGhlIGZyYW1lIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQpLCBvclxuICAgICAgIk5vbmUiIGlmIHRoZXJlIGlzIG5vIG5leHQgbGV2ZWw7ICJ0Yl9mcmFtZSIgcG9pbnRzIHRvIHRoZVxuICAgICAgZXhlY3V0aW9uIGZyYW1lIG9mIHRoZSBjdXJyZW50IGxldmVsOyAidGJfbGluZW5vIiBnaXZlcyB0aGUgbGluZVxuICAgICAgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQ7ICJ0Yl9sYXN0aSIgaW5kaWNhdGVzIHRoZVxuICAgICAgcHJlY2lzZSBpbnN0cnVjdGlvbi4gIFRoZSBsaW5lIG51bWJlciBhbmQgbGFzdCBpbnN0cnVjdGlvbiBpblxuICAgICAgdGhlIHRyYWNlYmFjayBtYXkgZGlmZmVyIGZyb20gdGhlIGxpbmUgbnVtYmVyIG9mIGl0cyBmcmFtZVxuICAgICAgb2JqZWN0IGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBub1xuICAgICAgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBvciB3aXRoIGEgZmluYWxseSBjbGF1c2UuXG5cbiAgIFNsaWNlIG9iamVjdHNcbiAgICAgIFNsaWNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNsaWNlcyBmb3IgIl9fZ2V0aXRlbV9fKCkiXG4gICAgICBtZXRob2RzLiAgVGhleSBhcmUgYWxzbyBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pbiAic2xpY2UoKSJcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAic3RhcnQiIGlzIHRoZSBsb3dlciBib3VuZDsgInN0b3AiXG4gICAgICBpcyB0aGUgdXBwZXIgYm91bmQ7ICJzdGVwIiBpcyB0aGUgc3RlcCB2YWx1ZTsgZWFjaCBpcyAiTm9uZSIgaWZcbiAgICAgIG9taXR0ZWQuICBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBoYXZlIGFueSB0eXBlLlxuXG4gICAgICBTbGljZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgc2xpY2UuaW5kaWNlcyhzZWxmLCBsZW5ndGgpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQgKmxlbmd0aCogYW5kXG4gICAgICAgICBjb21wdXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xpY2UgdGhhdCB0aGUgc2xpY2Ugb2JqZWN0XG4gICAgICAgICB3b3VsZCBkZXNjcmliZSBpZiBhcHBsaWVkIHRvIGEgc2VxdWVuY2Ugb2YgKmxlbmd0aCogaXRlbXMuXG4gICAgICAgICBJdCByZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnM7IHJlc3BlY3RpdmVseSB0aGVzZSBhcmVcbiAgICAgICAgIHRoZSAqc3RhcnQqIGFuZCAqc3RvcCogaW5kaWNlcyBhbmQgdGhlICpzdGVwKiBvciBzdHJpZGVcbiAgICAgICAgIGxlbmd0aCBvZiB0aGUgc2xpY2UuIE1pc3Npbmcgb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzIGFyZVxuICAgICAgICAgaGFuZGxlZCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggcmVndWxhciBzbGljZXMuXG5cbiAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0c1xuICAgICAgU3RhdGljIG1ldGhvZCBvYmplY3RzIHByb3ZpZGUgYSB3YXkgb2YgZGVmZWF0aW5nIHRoZVxuICAgICAgdHJhbnNmb3JtYXRpb24gb2YgZnVuY3Rpb24gb2JqZWN0cyB0byBtZXRob2Qgb2JqZWN0cyBkZXNjcmliZWRcbiAgICAgIGFib3ZlLiBBIHN0YXRpYyBtZXRob2Qgb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYW55IG90aGVyXG4gICAgICBvYmplY3QsIHVzdWFsbHkgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdC4gV2hlbiBhIHN0YXRpY1xuICAgICAgbWV0aG9kIG9iamVjdCBpcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG9yIGEgY2xhc3MgaW5zdGFuY2UsIHRoZVxuICAgICAgb2JqZWN0IGFjdHVhbGx5IHJldHVybmVkIGlzIHRoZSB3cmFwcGVkIG9iamVjdCwgd2hpY2ggaXMgbm90XG4gICAgICBzdWJqZWN0IHRvIGFueSBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlXG4gICAgICBub3QgdGhlbXNlbHZlcyBjYWxsYWJsZSwgYWx0aG91Z2ggdGhlIG9iamVjdHMgdGhleSB3cmFwIHVzdWFsbHlcbiAgICAgIGFyZS4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgInN0YXRpY21ldGhvZCgpIiBjb25zdHJ1Y3Rvci5cblxuICAgQ2xhc3MgbWV0aG9kIG9iamVjdHNcbiAgICAgIEEgY2xhc3MgbWV0aG9kIG9iamVjdCwgbGlrZSBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpcyBhIHdyYXBwZXJcbiAgICAgIGFyb3VuZCBhbm90aGVyIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgd2F5IGluIHdoaWNoIHRoYXQgb2JqZWN0XG4gICAgICBpcyByZXRyaWV2ZWQgZnJvbSBjbGFzc2VzIGFuZCBjbGFzcyBpbnN0YW5jZXMuIFRoZSBiZWhhdmlvdXIgb2ZcbiAgICAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIHVwb24gc3VjaCByZXRyaWV2YWwgaXMgZGVzY3JpYmVkIGFib3ZlLFxuICAgICAgdW5kZXIgIlVzZXItZGVmaW5lZCBtZXRob2RzIi4gQ2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWRcbiAgICAgIGJ5IHRoZSBidWlsdC1pbiAiY2xhc3NtZXRob2QoKSIgY29uc3RydWN0b3IuXG4nLAorICd0cnknOiAnXG5UaGUgInRyeSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSAidHJ5IiBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlICJleGNlcHQiIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlbiBub1xuZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgInRyeSIgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgInRyeSIgc3VpdGUsIGEgc2VhcmNoIGZvciBhblxuZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHQgY2xhdXNlc1xuaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBbiBleHByZXNzaW9uLVxubGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXMgYW55XG5leGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXQgZXhwcmVzc2lvblxuaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXMgY29tcGF0aWJsZVxud2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGUgZXhjZXB0aW9uXG5vYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZSBleGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgInRyeSIgc3RhdGVtZW50IHJhaXNlZFxudGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgImFzIiBrZXl3b3JkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSwgaWZcbnByZXNlbnQsIGFuZCB0aGUgZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHRcbmNsYXVzZXMgbXVzdCBoYXZlIGFuIGV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpc1xucmVhY2hlZCwgZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuXG4oVGhpcyBtZWFucyB0aGF0IGlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbixcbmFuZCB0aGUgZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlXG5vdXRlciBoYW5kbGVyIHdpbGwgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuV2hlbiBhbiBleGNlcHRpb24gaGFzIGJlZW4gYXNzaWduZWQgdXNpbmcgImFzIHRhcmdldCIsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlICJzeXMiIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbiJzeXMuZXhjX2luZm8oKSIuICJzeXMuZXhjX2luZm8oKSIgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZiB0aGVcbmV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpbiB0aGVcbnByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gICJzeXMuZXhjX2luZm8oKSIgdmFsdWVzIGFyZVxucmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsICJlbHNlIiBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlICJ0cnkiIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlICJlbHNlIiBjbGF1c2UgYXJlXG5ub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nICJleGNlcHQiIGNsYXVzZXMuXG5cbklmICJmaW5hbGx5IiBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlICJ0cnkiXG5jbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgImV4Y2VwdCIgYW5kICJlbHNlIiBjbGF1c2VzLiAgSWYgYW5cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3QgaGFuZGxlZCwgdGhlXG5leGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkLiAgSWZcbnRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mIHRoZSAiZmluYWxseSJcbmNsYXVzZS4gIElmIHRoZSAiZmluYWxseSIgY2xhdXNlIHJhaXNlcyBhbm90aGVyIGV4Y2VwdGlvbiwgdGhlIHNhdmVkXG5leGNlcHRpb24gaXMgc2V0IGFzIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgZXhjZXB0aW9uLiBJZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UgZXhlY3V0ZXMgYSAicmV0dXJuIiBvciAiYnJlYWsiIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvblxuaXMgZGlzY2FyZGVkOlxuXG4gICA+Pj4gZGVmIGYoKTpcbiAgIC4uLiAgICAgdHJ5OlxuICAgLi4uICAgICAgICAgMS8wXG4gICAuLi4gICAgIGZpbmFsbHk6XG4gICAuLi4gICAgICAgICByZXR1cm4gNDJcbiAgIC4uLlxuICAgPj4+IGYoKVxuICAgNDJcblxuVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZ1xuZXhlY3V0aW9uIG9mIHRoZSAiZmluYWxseSIgY2xhdXNlLlxuXG5XaGVuIGEgInJldHVybiIsICJicmVhayIgb3IgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW4gdGhlXG4idHJ5IiBzdWl0ZSBvZiBhICJ0cnkiLi4uImZpbmFsbHkiIHN0YXRlbWVudCwgdGhlICJmaW5hbGx5IiBjbGF1c2UgaXNcbmFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGlsbGVnYWwgaW5cbnRoZSAiZmluYWxseSIgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhIHByb2JsZW0gd2l0aCB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuVGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgdGhlIGxhc3QgInJldHVybiJcbnN0YXRlbWVudCBleGVjdXRlZC4gIFNpbmNlIHRoZSAiZmluYWxseSIgY2xhdXNlIGFsd2F5cyBleGVjdXRlcywgYVxuInJldHVybiIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSAiZmluYWxseSIgY2xhdXNlIHdpbGwgYWx3YXlzIGJlIHRoZVxubGFzdCBvbmUgZXhlY3V0ZWQ6XG5cbiAgID4+PiBkZWYgZm9vKCk6XG4gICAuLi4gICAgIHRyeTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ3RyeVwnXG4gICAuLi4gICAgIGZpbmFsbHk6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdmaW5hbGx5XCdcbiAgIC4uLlxuICAgPj4+IGZvbygpXG4gICBcJ2ZpbmFsbHlcJ1xuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG4nLAorICd0eXBlcyc6ICdcblRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeVxuKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkJlbG93IGlzIGEgbGlzdCBvZiB0aGUgdHlwZXMgdGhhdCBhcmUgYnVpbHQgaW50byBQeXRob24uICBFeHRlbnNpb25cbm1vZHVsZXMgKHdyaXR0ZW4gaW4gQywgSmF2YSwgb3Igb3RoZXIgbGFuZ3VhZ2VzLCBkZXBlbmRpbmcgb24gdGhlXG5pbXBsZW1lbnRhdGlvbikgY2FuIGRlZmluZSBhZGRpdGlvbmFsIHR5cGVzLiAgRnV0dXJlIHZlcnNpb25zIG9mXG5QeXRob24gbWF5IGFkZCB0eXBlcyB0byB0aGUgdHlwZSBoaWVyYXJjaHkgKGUuZy4sIHJhdGlvbmFsIG51bWJlcnMsXG5lZmZpY2llbnRseSBzdG9yZWQgYXJyYXlzIG9mIGludGVnZXJzLCBldGMuKSwgYWx0aG91Z2ggc3VjaCBhZGRpdGlvbnNcbndpbGwgb2Z0ZW4gYmUgcHJvdmlkZWQgdmlhIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluc3RlYWQuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSAiTm9uZSIuIEl0XG4gICBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBtYW55IHNpdHVhdGlvbnMsIGUuZy4sXG4gICBpdCBpcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVyblxuICAgYW55dGhpbmcuIEl0cyB0cnV0aCB2YWx1ZSBpcyBmYWxzZS5cblxuTm90SW1wbGVtZW50ZWRcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgIk5vdEltcGxlbWVudGVkIi4gTnVtZXJpYyBtZXRob2RzIGFuZCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBtYXlcbiAgIHJldHVybiB0aGlzIHZhbHVlIGlmIHRoZXkgZG8gbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciB0aGVcbiAgIG9wZXJhbmRzIHByb3ZpZGVkLiAgKFRoZSBpbnRlcnByZXRlciB3aWxsIHRoZW4gdHJ5IHRoZSByZWZsZWN0ZWRcbiAgIG9wZXJhdGlvbiwgb3Igc29tZSBvdGhlciBmYWxsYmFjaywgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRvci4pICBJdHNcbiAgIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbkVsbGlwc2lzXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGxpdGVyYWwgIi4uLiIgb3IgdGhlXG4gICBidWlsdC1pbiBuYW1lICJFbGxpcHNpcyIuICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuIm51bWJlcnMuTnVtYmVyIlxuICAgVGhlc2UgYXJlIGNyZWF0ZWQgYnkgbnVtZXJpYyBsaXRlcmFscyBhbmQgcmV0dXJuZWQgYXMgcmVzdWx0cyBieVxuICAgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kIGFyaXRobWV0aWMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgTnVtZXJpY1xuICAgb2JqZWN0cyBhcmUgaW1tdXRhYmxlOyBvbmNlIGNyZWF0ZWQgdGhlaXIgdmFsdWUgbmV2ZXIgY2hhbmdlcy5cbiAgIFB5dGhvbiBudW1iZXJzIGFyZSBvZiBjb3Vyc2Ugc3Ryb25nbHkgcmVsYXRlZCB0byBtYXRoZW1hdGljYWxcbiAgIG51bWJlcnMsIGJ1dCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBudW1lcmljYWwgcmVwcmVzZW50YXRpb25cbiAgIGluIGNvbXB1dGVycy5cblxuICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYW5kXG4gICBjb21wbGV4IG51bWJlcnM6XG5cbiAgICJudW1iZXJzLkludGVncmFsIlxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBJbnRlZ2VycyAoImludCIpXG5cbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCBudW1iZXJzIGluIGFuIHVubGltaXRlZCByYW5nZSwgc3ViamVjdCB0b1xuICAgICAgICAgYXZhaWxhYmxlICh2aXJ0dWFsKSBtZW1vcnkgb25seS4gIEZvciB0aGUgcHVycG9zZSBvZiBzaGlmdFxuICAgICAgICAgYW5kIG1hc2sgb3BlcmF0aW9ucywgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgYXNzdW1lZCwgYW5kXG4gICAgICAgICBuZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBpbiBhIHZhcmlhbnQgb2YgMlwnc1xuICAgICAgICAgY29tcGxlbWVudCB3aGljaCBnaXZlcyB0aGUgaWxsdXNpb24gb2YgYW4gaW5maW5pdGUgc3RyaW5nIG9mXG4gICAgICAgICBzaWduIGJpdHMgZXh0ZW5kaW5nIHRvIHRoZSBsZWZ0LlxuXG4gICAgICBCb29sZWFucyAoImJvb2wiKVxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IHRoZSB0cnV0aCB2YWx1ZXMgRmFsc2UgYW5kIFRydWUuICBUaGUgdHdvXG4gICAgICAgICBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgdGhlXG4gICAgICAgICBvbmx5IEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlXG4gICAgICAgICBpbnRlZ2VyIHR5cGUsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kXG4gICAgICAgICAxLCByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzICIiRmFsc2UiIiBvclxuICAgICAgICAgIiJUcnVlIiIgYXJlIHJldHVybmVkLCByZXNwZWN0aXZlbHkuXG5cbiAgICAgIFRoZSBydWxlcyBmb3IgaW50ZWdlciByZXByZXNlbnRhdGlvbiBhcmUgaW50ZW5kZWQgdG8gZ2l2ZSB0aGVcbiAgICAgIG1vc3QgbWVhbmluZ2Z1bCBpbnRlcnByZXRhdGlvbiBvZiBzaGlmdCBhbmQgbWFzayBvcGVyYXRpb25zXG4gICAgICBpbnZvbHZpbmcgbmVnYXRpdmUgaW50ZWdlcnMuXG5cbiAgICJudW1iZXJzLlJlYWwiICgiZmxvYXQiKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IG1hY2hpbmUtbGV2ZWwgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludFxuICAgICAgbnVtYmVycy4gWW91IGFyZSBhdCB0aGUgbWVyY3kgb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZVxuICAgICAgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhIGltcGxlbWVudGF0aW9uKSBmb3IgdGhlIGFjY2VwdGVkXG4gICAgICByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1cbiAgICAgIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kXG4gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBpc1xuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgICJudW1iZXJzLkNvbXBsZXgiICgiY29tcGxleCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciAieiIgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgInoucmVhbCIgYW5kICJ6LmltYWciLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlIGluZGV4IHNldFxuICAgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mIHNlcXVlbmNlICphKiBpc1xuICAgc2VsZWN0ZWQgYnkgImFbaV0iLlxuXG4gICBTZXF1ZW5jZXMgYWxzbyBzdXBwb3J0IHNsaWNpbmc6ICJhW2k6al0iIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqICI8PSIgKmsqICI8IiAqaiouICBXaGVuIHVzZWQgYXMgYW5cbiAgIGV4cHJlc3Npb24sIGEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlLiAgVGhpcyBpbXBsaWVzXG4gICB0aGF0IHRoZSBpbmRleCBzZXQgaXMgcmVudW1iZXJlZCBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAwLlxuXG4gICBTb21lIHNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgImV4dGVuZGVkIHNsaWNpbmciIHdpdGggYSB0aGlyZCAic3RlcCJcbiAgIHBhcmFtZXRlcjogImFbaTpqOmtdIiBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCogd2hlcmVcbiAgICJ4ID0gaSArIG4qayIsICpuKiAiPj0iICIwIiBhbmQgKmkqICI8PSIgKngqICI8IiAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlXG4gICAgICAgICBjb2RlcG9pbnRzLiBBbGwgdGhlIGNvZGVwb2ludHMgaW4gcmFuZ2UgIlUrMDAwMCAtIFUrMTBGRkZGIlxuICAgICAgICAgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuXCd0IGhhdmUgYSAiY2hyIlxuICAgICAgICAgdHlwZSwgYW5kIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGFzIGFcbiAgICAgICAgIHN0cmluZyBvYmplY3Qgd2l0aCBsZW5ndGggIjEiLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJvcmQoKSJcbiAgICAgICAgIGNvbnZlcnRzIGEgY2hhcmFjdGVyIHRvIGl0cyBjb2RlcG9pbnQgKGFzIGFuIGludGVnZXIpO1xuICAgICAgICAgImNocigpIiBjb252ZXJ0cyBhbiBpbnRlZ2VyIGluIHJhbmdlICIwIC0gMTBGRkZGIiB0byB0aGVcbiAgICAgICAgIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiAic3RyLmVuY29kZSgpIiBjYW4gYmUgdXNlZCB0b1xuICAgICAgICAgY29udmVydCBhICJzdHIiIHRvICJieXRlcyIgdXNpbmcgdGhlIGdpdmVuIGVuY29kaW5nLCBhbmRcbiAgICAgICAgICJieXRlcy5kZWNvZGUoKSIgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSB0aGUgb3Bwb3NpdGUuXG5cbiAgICAgIFR1cGxlc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgdHVwbGUgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gVHVwbGVzIG9mXG4gICAgICAgICB0d28gb3IgbW9yZSBpdGVtcyBhcmUgZm9ybWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBvZlxuICAgICAgICAgZXhwcmVzc2lvbnMuICBBIHR1cGxlIG9mIG9uZSBpdGVtIChhIFwnc2luZ2xldG9uXCcpIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFmZml4aW5nIGEgY29tbWEgdG8gYW4gZXhwcmVzc2lvbiAoYW4gZXhwcmVzc2lvbiBieVxuICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGNyZWF0ZSBhIHR1cGxlLCBzaW5jZSBwYXJlbnRoZXNlcyBtdXN0IGJlXG4gICAgICAgICB1c2FibGUgZm9yIGdyb3VwaW5nIG9mIGV4cHJlc3Npb25zKS4gIEFuIGVtcHR5IHR1cGxlIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFuIGVtcHR5IHBhaXIgb2YgcGFyZW50aGVzZXMuXG5cbiAgICAgIEJ5dGVzXG4gICAgICAgICBBIGJ5dGVzIG9iamVjdCBpcyBhbiBpbW11dGFibGUgYXJyYXkuICBUaGUgaXRlbXMgYXJlIDgtYml0XG4gICAgICAgICBieXRlcywgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cbiAgICAgICAgIEJ5dGVzIGxpdGVyYWxzIChsaWtlICJiXCdhYmNcJyIpIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICAgICAgICJieXRlcygpIiBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYnl0ZXMgb2JqZWN0cy4gIEFsc28sXG4gICAgICAgICBieXRlcyBvYmplY3RzIGNhbiBiZSBkZWNvZGVkIHRvIHN0cmluZ3MgdmlhIHRoZSAiZGVjb2RlKCkiXG4gICAgICAgICBtZXRob2QuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kICJkZWwiIChkZWxldGUpIHN0YXRlbWVudHMuXG5cbiAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzOlxuXG4gICAgICBMaXN0c1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgbGlzdCBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiAgTGlzdHMgYXJlXG4gICAgICAgICBmb3JtZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGluXG4gICAgICAgICBzcXVhcmUgYnJhY2tldHMuIChOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY2FzZXMgbmVlZGVkXG4gICAgICAgICB0byBmb3JtIGxpc3RzIG9mIGxlbmd0aCAwIG9yIDEuKVxuXG4gICAgICBCeXRlIEFycmF5c1xuICAgICAgICAgQSBieXRlYXJyYXkgb2JqZWN0IGlzIGEgbXV0YWJsZSBhcnJheS4gVGhleSBhcmUgY3JlYXRlZCBieVxuICAgICAgICAgdGhlIGJ1aWx0LWluICJieXRlYXJyYXkoKSIgY29uc3RydWN0b3IuICBBc2lkZSBmcm9tIGJlaW5nXG4gICAgICAgICBtdXRhYmxlIChhbmQgaGVuY2UgdW5oYXNoYWJsZSksIGJ5dGUgYXJyYXlzIG90aGVyd2lzZSBwcm92aWRlXG4gICAgICAgICB0aGUgc2FtZSBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWxpdHkgYXMgaW1tdXRhYmxlIGJ5dGVzXG4gICAgICAgICBvYmplY3RzLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZSAiYXJyYXkiIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZiBhXG4gICAgICBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsIGFzIGRvZXMgdGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlLlxuXG5TZXQgdHlwZXNcbiAgIFRoZXNlIHJlcHJlc2VudCB1bm9yZGVyZWQsIGZpbml0ZSBzZXRzIG9mIHVuaXF1ZSwgaW1tdXRhYmxlXG4gICBvYmplY3RzLiBBcyBzdWNoLCB0aGV5IGNhbm5vdCBiZSBpbmRleGVkIGJ5IGFueSBzdWJzY3JpcHQuIEhvd2V2ZXIsXG4gICB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSJcbiAgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIHNldC4gQ29tbW9uIHVzZXMgZm9yIHNldHMgYXJlIGZhc3RcbiAgIG1lbWJlcnNoaXAgdGVzdGluZywgcmVtb3ZpbmcgZHVwbGljYXRlcyBmcm9tIGEgc2VxdWVuY2UsIGFuZFxuICAgY29tcHV0aW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIHN1Y2ggYXMgaW50ZXJzZWN0aW9uLCB1bmlvbixcbiAgIGRpZmZlcmVuY2UsIGFuZCBzeW1tZXRyaWMgZGlmZmVyZW5jZS5cblxuICAgRm9yIHNldCBlbGVtZW50cywgdGhlIHNhbWUgaW1tdXRhYmlsaXR5IHJ1bGVzIGFwcGx5IGFzIGZvclxuICAgZGljdGlvbmFyeSBrZXlzLiBOb3RlIHRoYXQgbnVtZXJpYyB0eXBlcyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yXG4gICBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sICIxIiBhbmRcbiAgICIxLjAiKSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LlxuXG4gICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOlxuXG4gICBTZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYSBtdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgICJzZXQoKSIgY29uc3RydWN0b3IgYW5kIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIGJ5IHNldmVyYWxcbiAgICAgIG1ldGhvZHMsIHN1Y2ggYXMgImFkZCgpIi5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluICJmcm96ZW5zZXQoKSIgY29uc3RydWN0b3IuICBBcyBhIGZyb3plbnNldCBpcyBpbW11dGFibGVcbiAgICAgIGFuZCAqaGFzaGFibGUqLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mIGFub3RoZXJcbiAgICAgIHNldCwgb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS5cblxuTWFwcGluZ3NcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4XG4gICBzZXRzLiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uICJhW2tdIiBzZWxlY3RzIHRoZSBpdGVtIGluZGV4ZWQgYnkgImsiXG4gICBmcm9tIHRoZSBtYXBwaW5nICJhIjsgdGhpcyBjYW4gYmUgdXNlZCBpbiBleHByZXNzaW9ucyBhbmQgYXMgdGhlXG4gICB0YXJnZXQgb2YgYXNzaWdubWVudHMgb3IgImRlbCIgc3RhdGVtZW50cy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAibGVuKCkiIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sICIxIiBhbmQgIjEuMCIpXG4gICAgICB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4IHRoZSBzYW1lXG4gICAgICBkaWN0aW9uYXJ5IGVudHJ5LlxuXG4gICAgICBEaWN0aW9uYXJpZXMgYXJlIG11dGFibGU7IHRoZXkgY2FuIGJlIGNyZWF0ZWQgYnkgdGhlICJ7Li4ufSJcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgImRibS5uZGJtIiBhbmQgImRibS5nbnUiIHByb3ZpZGVcbiAgICAgIGFkZGl0aW9uYWwgZXhhbXBsZXMgb2YgbWFwcGluZyB0eXBlcywgYXMgZG9lcyB0aGUgImNvbGxlY3Rpb25zIlxuICAgICAgbW9kdWxlLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT0rXG4gICAgICB8ICJfX2RvY19fIiAgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvbiAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX25hbWVfXyIgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX3F1YWxuYW1lX18iICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgKnF1YWxpZmllZCBuYW1lKiB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX21vZHVsZV9fIiAgICAgICAgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGVmYXVsdHNfXyIgICAgICAgICAgICB8IEEgdHVwbGUgY29udGFpbmluZyBkZWZhdWx0ICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jb2RlX18iICAgICAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2dsb2JhbHNfXyIgICAgICAgICAgICAgfCBBIHJlZmVyZW5jZSB0byB0aGUgZGljdGlvbmFyeSAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGljdF9fIiAgICAgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jbG9zdXJlX18iICAgICAgICAgICAgIHwgIk5vbmUiIG9yIGEgdHVwbGUgb2YgY2VsbHMgdGhhdCB8IFJlYWQtb25seSAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2Fubm90YXRpb25zX18iICAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBhbm5vdGF0aW9ucyAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fa3dkZWZhdWx0c19fIiAgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGRlZmF1bHRzIGZvciAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuXG4gICAgICBNb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIGxhYmVsbGVkICJXcml0YWJsZSIgY2hlY2sgdGhlIHR5cGUgb2YgdGhlXG4gICAgICBhc3NpZ25lZCB2YWx1ZS5cblxuICAgICAgRnVuY3Rpb24gb2JqZWN0cyBhbHNvIHN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBhcmJpdHJhcnlcbiAgICAgIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXR0YWNoIG1ldGFkYXRhXG4gICAgICB0byBmdW5jdGlvbnMuICBSZWd1bGFyIGF0dHJpYnV0ZSBkb3Qtbm90YXRpb24gaXMgdXNlZCB0byBnZXQgYW5kXG4gICAgICBzZXQgc3VjaCBhdHRyaWJ1dGVzLiAqTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHlcbiAgICAgIHN1cHBvcnRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25cbiAgICAgIGF0dHJpYnV0ZXMgb24gYnVpbHQtaW4gZnVuY3Rpb25zIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAgICBmdXR1cmUuKlxuXG4gICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb25cJ3MgZGVmaW5pdGlvbiBjYW4gYmVcbiAgICAgIHJldHJpZXZlZCBmcm9tIGl0cyBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbFxuICAgICAgdHlwZXMgYmVsb3cuXG5cbiAgIEluc3RhbmNlIG1ldGhvZHNcbiAgICAgIEFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgY29tYmluZXMgYSBjbGFzcywgYSBjbGFzcyBpbnN0YW5jZSBhbmRcbiAgICAgIGFueSBjYWxsYWJsZSBvYmplY3QgKG5vcm1hbGx5IGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uKS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogIl9fc2VsZl9fIiBpcyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIG9iamVjdCwgIl9fZnVuY19fIiBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyAiX19kb2NfXyIgaXMgdGhlXG4gICAgICBtZXRob2RcJ3MgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyAiX19mdW5jX18uX19kb2NfXyIpOyAiX19uYW1lX18iXG4gICAgICBpcyB0aGUgbWV0aG9kIG5hbWUgKHNhbWUgYXMgIl9fZnVuY19fLl9fbmFtZV9fIik7ICJfX21vZHVsZV9fIlxuICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbWV0aG9kIHdhcyBkZWZpbmVkIGluLCBvciAiTm9uZSJcbiAgICAgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICAgICBNZXRob2RzIGFsc28gc3VwcG9ydCBhY2Nlc3NpbmcgKGJ1dCBub3Qgc2V0dGluZykgdGhlIGFyYml0cmFyeVxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZCB3aGVuIGdldHRpbmcgYW5cbiAgICAgIGF0dHJpYnV0ZSBvZiBhIGNsYXNzIChwZXJoYXBzIHZpYSBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzKSwgaWZcbiAgICAgIHRoYXQgYXR0cmlidXRlIGlzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBvciBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0LlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgdXNlci1cbiAgICAgIGRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcyB2aWEgb25lIG9mIGl0cyBpbnN0YW5jZXMsXG4gICAgICBpdHMgIl9fc2VsZl9fIiBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLCBhbmQgdGhlIG1ldGhvZCBvYmplY3RcbiAgICAgIGlzIHNhaWQgdG8gYmUgYm91bmQuICBUaGUgbmV3IG1ldGhvZFwncyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpc1xuICAgICAgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZ1xuICAgICAgYW5vdGhlciBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgdGhlIGJlaGF2aW91ciBpc1xuICAgICAgdGhlIHNhbWUgYXMgZm9yIGEgZnVuY3Rpb24gb2JqZWN0LCBleGNlcHQgdGhhdCB0aGUgIl9fZnVuY19fIlxuICAgICAgYXR0cmlidXRlIG9mIHRoZSBuZXcgaW5zdGFuY2UgaXMgbm90IHRoZSBvcmlnaW5hbCBtZXRob2Qgb2JqZWN0XG4gICAgICBidXQgaXRzICJfX2Z1bmNfXyIgYXR0cmlidXRlLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCBpdHMgIl9fc2VsZl9fIiBhdHRyaWJ1dGVcbiAgICAgIGlzIHRoZSBjbGFzcyBpdHNlbGYsIGFuZCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUgaXMgdGhlXG4gICAgICBmdW5jdGlvbiBvYmplY3QgdW5kZXJseWluZyB0aGUgY2xhc3MgbWV0aG9kLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24gKCJfX2Z1bmNfXyIpIGlzIGNhbGxlZCwgaW5zZXJ0aW5nIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgKCJfX3NlbGZfXyIpIGluIGZyb250IG9mIHRoZSBhcmd1bWVudCBsaXN0LiAgRm9yIGluc3RhbmNlLCB3aGVuXG4gICAgICAiQyIgaXMgYSBjbGFzcyB3aGljaCBjb250YWlucyBhIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gImYoKSIsXG4gICAgICBhbmQgIngiIGlzIGFuIGluc3RhbmNlIG9mICJDIiwgY2FsbGluZyAieC5mKDEpIiBpcyBlcXVpdmFsZW50IHRvXG4gICAgICBjYWxsaW5nICJDLmYoeCwgMSkiLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgZGVyaXZlZCBmcm9tIGEgY2xhc3MgbWV0aG9kXG4gICAgICBvYmplY3QsIHRoZSAiY2xhc3MgaW5zdGFuY2UiIHN0b3JlZCBpbiAiX19zZWxmX18iIHdpbGwgYWN0dWFsbHlcbiAgICAgIGJlIHRoZSBjbGFzcyBpdHNlbGYsIHNvIHRoYXQgY2FsbGluZyBlaXRoZXIgInguZigxKSIgb3IgIkMuZigxKSJcbiAgICAgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyAiZihDLDEpIiB3aGVyZSAiZiIgaXMgdGhlIHVuZGVybHlpbmdcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBOb3RlIHRoYXQgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gZnVuY3Rpb24gb2JqZWN0IHRvIGluc3RhbmNlXG4gICAgICBtZXRob2Qgb2JqZWN0IGhhcHBlbnMgZWFjaCB0aW1lIHRoZSBhdHRyaWJ1dGUgaXMgcmV0cmlldmVkIGZyb21cbiAgICAgIHRoZSBpbnN0YW5jZS4gIEluIHNvbWUgY2FzZXMsIGEgZnJ1aXRmdWwgb3B0aW1pemF0aW9uIGlzIHRvXG4gICAgICBhc3NpZ24gdGhlIGF0dHJpYnV0ZSB0byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBjYWxsIHRoYXQgbG9jYWxcbiAgICAgIHZhcmlhYmxlLiBBbHNvIG5vdGljZSB0aGF0IHRoaXMgdHJhbnNmb3JtYXRpb24gb25seSBoYXBwZW5zIGZvclxuICAgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uczsgb3RoZXIgY2FsbGFibGUgb2JqZWN0cyAoYW5kIGFsbCBub24tXG4gICAgICBjYWxsYWJsZSBvYmplY3RzKSBhcmUgcmV0cmlldmVkIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24uICBJdCBpc1xuICAgICAgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgd2hpY2ggYXJlXG4gICAgICBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgaW5zdGFuY2UgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gYm91bmRcbiAgICAgIG1ldGhvZHM7IHRoaXMgKm9ubHkqIGhhcHBlbnMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYW4gYXR0cmlidXRlXG4gICAgICBvZiB0aGUgY2xhc3MuXG5cbiAgIEdlbmVyYXRvciBmdW5jdGlvbnNcbiAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIHVzZXMgdGhlICJ5aWVsZCIgc3RhdGVtZW50IChzZWVcbiAgICAgIHNlY3Rpb24gKlRoZSB5aWVsZCBzdGF0ZW1lbnQqKSBpcyBjYWxsZWQgYSAqZ2VuZXJhdG9yIGZ1bmN0aW9uKi5cbiAgICAgIFN1Y2ggYSBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIGFsd2F5cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9iamVjdFxuICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb246ICBjYWxsaW5nXG4gICAgICB0aGUgaXRlcmF0b3JcJ3MgIml0ZXJhdG9yLl9fbmV4dF9fKCkiIG1ldGhvZCB3aWxsIGNhdXNlIHRoZVxuICAgICAgZnVuY3Rpb24gdG8gZXhlY3V0ZSB1bnRpbCBpdCBwcm92aWRlcyBhIHZhbHVlIHVzaW5nIHRoZSAieWllbGQiXG4gICAgICBzdGF0ZW1lbnQuICBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcyBhICJyZXR1cm4iIHN0YXRlbWVudCBvclxuICAgICAgZmFsbHMgb2ZmIHRoZSBlbmQsIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZVxuICAgICAgaXRlcmF0b3Igd2lsbCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2V0IG9mIHZhbHVlcyB0byBiZVxuICAgICAgcmV0dXJuZWQuXG5cbiAgIEJ1aWx0LWluIGZ1bmN0aW9uc1xuICAgICAgQSBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIEMgZnVuY3Rpb24uXG4gICAgICBFeGFtcGxlcyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYXJlICJsZW4oKSIgYW5kICJtYXRoLnNpbigpIlxuICAgICAgKCJtYXRoIiBpcyBhIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2ZcbiAgICAgIHRoZSBhcmd1bWVudHMgYXJlIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1cbiAgICAgIG9ubHkgYXR0cmlidXRlczogIl9fZG9jX18iIGlzIHRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uXG4gICAgICBzdHJpbmcsIG9yICJOb25lIiBpZiB1bmF2YWlsYWJsZTsgIl9fbmFtZV9fIiBpcyB0aGUgZnVuY3Rpb25cJ3NcbiAgICAgIG5hbWU7ICJfX3NlbGZfXyIgaXMgc2V0IHRvICJOb25lIiAoYnV0IHNlZSB0aGUgbmV4dCBpdGVtKTtcbiAgICAgICJfX21vZHVsZV9fIiBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZFxuICAgICAgaW4gb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlLlxuXG4gICBCdWlsdC1pbiBtZXRob2RzXG4gICAgICBUaGlzIGlzIHJlYWxseSBhIGRpZmZlcmVudCBkaXNndWlzZSBvZiBhIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzXG4gICAgICB0aW1lIGNvbnRhaW5pbmcgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhblxuICAgICAgaW1wbGljaXQgZXh0cmEgYXJndW1lbnQuICBBbiBleGFtcGxlIG9mIGEgYnVpbHQtaW4gbWV0aG9kIGlzXG4gICAgICAiYWxpc3QuYXBwZW5kKCkiLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgIl9fc2VsZl9fIiBpcyBzZXQgdG8gdGhlXG4gICAgICBvYmplY3QgZGVub3RlZCBieSAqYWxpc3QqLlxuXG4gICBDbGFzc2VzXG4gICAgICBDbGFzc2VzIGFyZSBjYWxsYWJsZS4gIFRoZXNlIG9iamVjdHMgbm9ybWFsbHkgYWN0IGFzIGZhY3Rvcmllc1xuICAgICAgZm9yIG5ldyBpbnN0YW5jZXMgb2YgdGhlbXNlbHZlcywgYnV0IHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlIGZvclxuICAgICAgY2xhc3MgdHlwZXMgdGhhdCBvdmVycmlkZSAiX19uZXdfXygpIi4gIFRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICAgICBjYWxsIGFyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgIl9faW5pdF9fKCkiIHRvIGluaXRpYWxpemUgdGhlIG5ldyBpbnN0YW5jZS5cblxuICAgQ2xhc3MgSW5zdGFuY2VzXG4gICAgICBJbnN0YW5jZXMgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgY2FuIGJlIG1hZGUgY2FsbGFibGUgYnkgZGVmaW5pbmdcbiAgICAgIGEgIl9fY2FsbF9fKCkiIG1ldGhvZCBpbiB0aGVpciBjbGFzcy5cblxuTW9kdWxlc1xuICAgTW9kdWxlcyBhcmUgYSBiYXNpYyBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLCBhbmQgYXJlXG4gICBjcmVhdGVkIGJ5IHRoZSAqaW1wb3J0IHN5c3RlbSogYXMgaW52b2tlZCBlaXRoZXIgYnkgdGhlICJpbXBvcnQiXG4gICBzdGF0ZW1lbnQgKHNlZSAiaW1wb3J0IiksIG9yIGJ5IGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXNcbiAgICJpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIiBhbmQgYnVpbHQtaW4gIl9faW1wb3J0X18oKSIuICBBIG1vZHVsZVxuICAgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieSBhIGRpY3Rpb25hcnkgb2JqZWN0ICh0aGlzIGlzXG4gICB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZSAiX19nbG9iYWxzX18iIGF0dHJpYnV0ZSBvZlxuICAgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSkuICBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmVcbiAgIHRyYW5zbGF0ZWQgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sICJtLngiIGlzIGVxdWl2YWxlbnRcbiAgIHRvICJtLl9fZGljdF9fWyJ4Il0iLiBBIG1vZHVsZSBvYmplY3QgZG9lcyBub3QgY29udGFpbiB0aGUgY29kZVxuICAgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIChzaW5jZSBpdCBpc25cJ3QgbmVlZGVkIG9uY2VcbiAgIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgIm0ueCA9IDEiIGlzIGVxdWl2YWxlbnQgdG8gIm0uX19kaWN0X19bIngiXSA9IDEiLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6ICJfX2RpY3RfXyIgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWU7XG4gICAiX19kb2NfXyIgaXMgdGhlIG1vZHVsZVwncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgIk5vbmUiIGlmXG4gICB1bmF2YWlsYWJsZTsgIl9fZmlsZV9fIiBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaCB0aGVcbiAgIG1vZHVsZSB3YXMgbG9hZGVkLCBpZiBpdCB3YXMgbG9hZGVkIGZyb20gYSBmaWxlLiBUaGUgIl9fZmlsZV9fIlxuICAgYXR0cmlidXRlIG1heSBiZSBtaXNzaW5nIGZvciBjZXJ0YWluIHR5cGVzIG9mIG1vZHVsZXMsIHN1Y2ggYXMgQ1xuICAgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjsgZm9yXG4gICBleHRlbnNpb24gbW9kdWxlcyBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdCBpc1xuICAgdGhlIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIkMueCIgaXMgdHJhbnNsYXRlZCB0b1xuICAgIkMuX19kaWN0X19bIngiXSIgKGFsdGhvdWdoIHRoZXJlIGFyZSBhIG51bWJlciBvZiBob29rcyB3aGljaCBhbGxvd1xuICAgZm9yIG90aGVyIG1lYW5zIG9mIGxvY2F0aW5nIGF0dHJpYnV0ZXMpLiBXaGVuIHRoZSBhdHRyaWJ1dGUgbmFtZSBpc1xuICAgbm90IGZvdW5kIHRoZXJlLCB0aGUgYXR0cmlidXRlIHNlYXJjaCBjb250aW51ZXMgaW4gdGhlIGJhc2VcbiAgIGNsYXNzZXMuIFRoaXMgc2VhcmNoIG9mIHRoZSBiYXNlIGNsYXNzZXMgdXNlcyB0aGUgQzMgbWV0aG9kXG4gICByZXNvbHV0aW9uIG9yZGVyIHdoaWNoIGJlaGF2ZXMgY29ycmVjdGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mXG4gICBcJ2RpYW1vbmRcJyBpbmhlcml0YW5jZSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uIGFuY2VzdG9yLiBBZGRpdGlvbmFsXG4gICBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBQeXRob24gY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIDIuMyByZWxlYXNlIGF0XG4gICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uXG5cbiAgIFdoZW4gYSBjbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlIChmb3IgY2xhc3MgIkMiLCBzYXkpIHdvdWxkIHlpZWxkIGFcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgIl9fc2VsZl9fIiBhdHRyaWJ1dGVzIGlzICJDIi4gIFdoZW4gaXQgd291bGQgeWllbGQgYVxuICAgc3RhdGljIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG9iamVjdCB3cmFwcGVkIGJ5XG4gICB0aGUgc3RhdGljIG1ldGhvZCBvYmplY3QuIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqXG4gICBmb3IgYW5vdGhlciB3YXkgaW4gd2hpY2ggYXR0cmlidXRlcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heVxuICAgZGlmZmVyIGZyb20gdGhvc2UgYWN0dWFsbHkgY29udGFpbmVkIGluIGl0cyAiX19kaWN0X18iLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6ICJfX25hbWVfXyIgaXMgdGhlIGNsYXNzIG5hbWU7ICJfX21vZHVsZV9fIiBpc1xuICAgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZDsgIl9fZGljdF9fIiBpcyB0aGVcbiAgIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyAiX19iYXNlc19fIiBpcyBhIHR1cGxlXG4gICAocG9zc2libHkgZW1wdHkgb3IgYSBzaW5nbGV0b24pIGNvbnRhaW5pbmcgdGhlIGJhc2UgY2xhc3NlcywgaW4gdGhlXG4gICBvcmRlciBvZiB0aGVpciBvY2N1cnJlbmNlIGluIHRoZSBiYXNlIGNsYXNzIGxpc3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgIGNsYXNzXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBOb25lIGlmIHVuZGVmaW5lZC5cblxuQ2xhc3MgaW5zdGFuY2VzXG4gICBBIGNsYXNzIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBhIGNsYXNzIG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgIEEgY2xhc3MgaW5zdGFuY2UgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGFzIGEgZGljdGlvbmFyeSB3aGljaFxuICAgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHdoaWNoIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBzZWFyY2hlZC5cbiAgIFdoZW4gYW4gYXR0cmlidXRlIGlzIG5vdCBmb3VuZCB0aGVyZSwgYW5kIHRoZSBpbnN0YW5jZVwncyBjbGFzcyBoYXNcbiAgIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWUsIHRoZSBzZWFyY2ggY29udGludWVzIHdpdGggdGhlIGNsYXNzXG4gICBhdHRyaWJ1dGVzLiAgSWYgYSBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQgdGhhdCBpcyBhIHVzZXItZGVmaW5lZFxuICAgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3RcbiAgIHdob3NlICJfX3NlbGZfXyIgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZS4gIFN0YXRpYyBtZXRob2QgYW5kXG4gICBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzbyB0cmFuc2Zvcm1lZDsgc2VlIGFib3ZlIHVuZGVyXG4gICAiQ2xhc3NlcyIuICBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKiBmb3IgYW5vdGhlciB3YXlcbiAgIGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyByZXRyaWV2ZWQgdmlhIGl0cyBpbnN0YW5jZXMgbWF5XG4gICBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIGNsYXNzXCdzICJfX2RpY3RfXyIuXG4gICBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQsIGFuZCB0aGUgb2JqZWN0XCdzIGNsYXNzIGhhcyBhXG4gICAiX19nZXRhdHRyX18oKSIgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0byBzYXRpc2Z5IHRoZSBsb29rdXAuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50cyBhbmQgZGVsZXRpb25zIHVwZGF0ZSB0aGUgaW5zdGFuY2VcJ3NcbiAgIGRpY3Rpb25hcnksIG5ldmVyIGEgY2xhc3NcJ3MgZGljdGlvbmFyeS4gIElmIHRoZSBjbGFzcyBoYXMgYVxuICAgIl9fc2V0YXR0cl9fKCkiIG9yICJfX2RlbGF0dHJfXygpIiBtZXRob2QsIHRoaXMgaXMgY2FsbGVkIGluc3RlYWRcbiAgIG9mIHVwZGF0aW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBDbGFzcyBpbnN0YW5jZXMgY2FuIHByZXRlbmQgdG8gYmUgbnVtYmVycywgc2VxdWVuY2VzLCBvciBtYXBwaW5nc1xuICAgaWYgdGhleSBoYXZlIG1ldGhvZHMgd2l0aCBjZXJ0YWluIHNwZWNpYWwgbmFtZXMuICBTZWUgc2VjdGlvblxuICAgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKi5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiAiX19kaWN0X18iIGlzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeTtcbiAgICJfX2NsYXNzX18iIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuSS9PIG9iamVjdHMgKGFsc28ga25vd24gYXMgZmlsZSBvYmplY3RzKVxuICAgQSAqZmlsZSBvYmplY3QqIHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgVmFyaW91cyBzaG9ydGN1dHMgYXJlXG4gICBhdmFpbGFibGUgdG8gY3JlYXRlIGZpbGUgb2JqZWN0czogdGhlICJvcGVuKCkiIGJ1aWx0LWluIGZ1bmN0aW9uLFxuICAgYW5kIGFsc28gIm9zLnBvcGVuKCkiLCAib3MuZmRvcGVuKCkiLCBhbmQgdGhlICJtYWtlZmlsZSgpIiBtZXRob2RcbiAgIG9mIHNvY2tldCBvYmplY3RzIChhbmQgcGVyaGFwcyBieSBvdGhlciBmdW5jdGlvbnMgb3IgbWV0aG9kc1xuICAgcHJvdmlkZWQgYnkgZXh0ZW5zaW9uIG1vZHVsZXMpLlxuXG4gICBUaGUgb2JqZWN0cyAic3lzLnN0ZGluIiwgInN5cy5zdGRvdXQiIGFuZCAic3lzLnN0ZGVyciIgYXJlXG4gICBpbml0aWFsaXplZCB0byBmaWxlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50ZXJwcmV0ZXJcJ3NcbiAgIHN0YW5kYXJkIGlucHV0LCBvdXRwdXQgYW5kIGVycm9yIHN0cmVhbXM7IHRoZXkgYXJlIGFsbCBvcGVuIGluIHRleHRcbiAgIG1vZGUgYW5kIHRoZXJlZm9yZSBmb2xsb3cgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZVxuICAgImlvLlRleHRJT0Jhc2UiIGFic3RyYWN0IGNsYXNzLlxuXG5JbnRlcm5hbCB0eXBlc1xuICAgQSBmZXcgdHlwZXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBpbnRlcnByZXRlciBhcmUgZXhwb3NlZCB0byB0aGVcbiAgIHVzZXIuIFRoZWlyIGRlZmluaXRpb25zIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlXG4gICBpbnRlcnByZXRlciwgYnV0IHRoZXkgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuXG5cbiAgIENvZGUgb2JqZWN0c1xuICAgICAgQ29kZSBvYmplY3RzIHJlcHJlc2VudCAqYnl0ZS1jb21waWxlZCogZXhlY3V0YWJsZSBQeXRob24gY29kZSxcbiAgICAgIG9yICpieXRlY29kZSouIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb2RlIG9iamVjdCBhbmQgYVxuICAgICAgZnVuY3Rpb24gb2JqZWN0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhbiBleHBsaWNpdFxuICAgICAgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvblwncyBnbG9iYWxzICh0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhc1xuICAgICAgZGVmaW5lZCksIHdoaWxlIGEgY29kZSBvYmplY3QgY29udGFpbnMgbm8gY29udGV4dDsgYWxzbyB0aGVcbiAgICAgIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdCwgbm90XG4gICAgICBpbiB0aGUgY29kZSBvYmplY3QgKGJlY2F1c2UgdGhleSByZXByZXNlbnQgdmFsdWVzIGNhbGN1bGF0ZWQgYXRcbiAgICAgIHJ1bi10aW1lKS4gIFVubGlrZSBmdW5jdGlvbiBvYmplY3RzLCBjb2RlIG9iamVjdHMgYXJlIGltbXV0YWJsZVxuICAgICAgYW5kIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gbXV0YWJsZVxuICAgICAgb2JqZWN0cy5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogImNvX25hbWUiIGdpdmVzIHRoZSBmdW5jdGlvbiBuYW1lO1xuICAgICAgImNvX2FyZ2NvdW50IiBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIChpbmNsdWRpbmdcbiAgICAgIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgImNvX25sb2NhbHMiIGlzIHRoZSBudW1iZXIgb2ZcbiAgICAgIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiAoaW5jbHVkaW5nIGFyZ3VtZW50cyk7XG4gICAgICAiY29fdmFybmFtZXMiIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIGxvY2FsXG4gICAgICB2YXJpYWJsZXMgKHN0YXJ0aW5nIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVzKTsgImNvX2NlbGx2YXJzIiBpcyBhXG4gICAgICB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBsb2NhbCB2YXJpYWJsZXMgdGhhdCBhcmVcbiAgICAgIHJlZmVyZW5jZWQgYnkgbmVzdGVkIGZ1bmN0aW9uczsgImNvX2ZyZWV2YXJzIiBpcyBhIHR1cGxlXG4gICAgICBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBmcmVlIHZhcmlhYmxlczsgImNvX2NvZGUiIGlzIGEgc3RyaW5nXG4gICAgICByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9uczsgImNvX2NvbnN0cyJcbiAgICAgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbGl0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7XG4gICAgICAiY29fbmFtZXMiIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7XG4gICAgICAiY29fZmlsZW5hbWUiIGlzIHRoZSBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZSBjb2RlIHdhcyBjb21waWxlZDtcbiAgICAgICJjb19maXJzdGxpbmVubyIgaXMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbjtcbiAgICAgICJjb19sbm90YWIiIGlzIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBtYXBwaW5nIGZyb20gYnl0ZWNvZGVcbiAgICAgIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIChmb3IgZGV0YWlscyBzZWUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZVxuICAgICAgaW50ZXJwcmV0ZXIpOyAiY29fc3RhY2tzaXplIiBpcyB0aGUgcmVxdWlyZWQgc3RhY2sgc2l6ZVxuICAgICAgKGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMpOyAiY29fZmxhZ3MiIGlzIGFuIGludGVnZXIgZW5jb2RpbmcgYVxuICAgICAgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGZvciAiY29fZmxhZ3MiOiBiaXQgIjB4MDQiXG4gICAgICBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlICIqYXJndW1lbnRzIiBzeW50YXggdG8gYWNjZXB0IGFuXG4gICAgICBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBiaXQgIjB4MDgiIGlzIHNldCBpZlxuICAgICAgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlICIqKmtleXdvcmRzIiBzeW50YXggdG8gYWNjZXB0IGFyYml0cmFyeVxuICAgICAga2V5d29yZCBhcmd1bWVudHM7IGJpdCAiMHgyMCIgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiBpcyBhXG4gICAgICBnZW5lcmF0b3IuXG5cbiAgICAgIEZ1dHVyZSBmZWF0dXJlIGRlY2xhcmF0aW9ucyAoImZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24iKVxuICAgICAgYWxzbyB1c2UgYml0cyBpbiAiY29fZmxhZ3MiIHRvIGluZGljYXRlIHdoZXRoZXIgYSBjb2RlIG9iamVjdFxuICAgICAgd2FzIGNvbXBpbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgZW5hYmxlZDogYml0ICIweDIwMDAiIGlzXG4gICAgICBzZXQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjb21waWxlZCB3aXRoIGZ1dHVyZSBkaXZpc2lvbiBlbmFibGVkO1xuICAgICAgYml0cyAiMHgxMCIgYW5kICIweDEwMDAiIHdlcmUgdXNlZCBpbiBlYXJsaWVyIHZlcnNpb25zIG9mXG4gICAgICBQeXRob24uXG5cbiAgICAgIE90aGVyIGJpdHMgaW4gImNvX2ZsYWdzIiBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS5cblxuICAgICAgSWYgYSBjb2RlIG9iamVjdCByZXByZXNlbnRzIGEgZnVuY3Rpb24sIHRoZSBmaXJzdCBpdGVtIGluXG4gICAgICAiY29fY29uc3RzIiBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIGZ1bmN0aW9uLCBvclxuICAgICAgIk5vbmUiIGlmIHVuZGVmaW5lZC5cblxuICAgRnJhbWUgb2JqZWN0c1xuICAgICAgRnJhbWUgb2JqZWN0cyByZXByZXNlbnQgZXhlY3V0aW9uIGZyYW1lcy4gIFRoZXkgbWF5IG9jY3VyIGluXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0cyAoc2VlIGJlbG93KS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogImZfYmFjayIgaXMgdG8gdGhlIHByZXZpb3VzIHN0YWNrXG4gICAgICBmcmFtZSAodG93YXJkcyB0aGUgY2FsbGVyKSwgb3IgIk5vbmUiIGlmIHRoaXMgaXMgdGhlIGJvdHRvbVxuICAgICAgc3RhY2sgZnJhbWU7ICJmX2NvZGUiIGlzIHRoZSBjb2RlIG9iamVjdCBiZWluZyBleGVjdXRlZCBpbiB0aGlzXG4gICAgICBmcmFtZTsgImZfbG9jYWxzIiBpcyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGxvb2sgdXAgbG9jYWxcbiAgICAgIHZhcmlhYmxlczsgImZfZ2xvYmFscyIgaXMgdXNlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcztcbiAgICAgICJmX2J1aWx0aW5zIiBpcyB1c2VkIGZvciBidWlsdC1pbiAoaW50cmluc2ljKSBuYW1lczsgImZfbGFzdGkiXG4gICAgICBnaXZlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvIHRoZVxuICAgICAgYnl0ZWNvZGUgc3RyaW5nIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogImZfdHJhY2UiLCBpZiBub3QgIk5vbmUiLCBpcyBhXG4gICAgICBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGNvZGUgbGluZSAodGhpcyBpc1xuICAgICAgdXNlZCBieSB0aGUgZGVidWdnZXIpOyAiZl9saW5lbm8iIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIG9mXG4gICAgICB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uIGp1bXBzXG4gICAgICB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEEgZGVidWdnZXJcbiAgICAgIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpIGJ5IHdyaXRpbmdcbiAgICAgIHRvIGZfbGluZW5vLlxuXG4gICAgICBGcmFtZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgZnJhbWUuY2xlYXIoKVxuXG4gICAgICAgICBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGhlbGQgYnlcbiAgICAgICAgIHRoZSBmcmFtZS4gIEFsc28sIGlmIHRoZSBmcmFtZSBiZWxvbmdlZCB0byBhIGdlbmVyYXRvciwgdGhlXG4gICAgICAgICBnZW5lcmF0b3IgaXMgZmluYWxpemVkLiAgVGhpcyBoZWxwcyBicmVhayByZWZlcmVuY2UgY3ljbGVzXG4gICAgICAgICBpbnZvbHZpbmcgZnJhbWUgb2JqZWN0cyAoZm9yIGV4YW1wbGUgd2hlbiBjYXRjaGluZyBhblxuICAgICAgICAgZXhjZXB0aW9uIGFuZCBzdG9yaW5nIGl0cyB0cmFjZWJhY2sgZm9yIGxhdGVyIHVzZSkuXG5cbiAgICAgICAgICJSdW50aW1lRXJyb3IiIGlzIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgY3VycmVudGx5IGV4ZWN1dGluZy5cblxuICAgICAgICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGVcbiAgICAgIHR1cGxlIHJldHVybmVkIGJ5ICJzeXMuZXhjX2luZm8oKSIuIFdoZW4gdGhlIHByb2dyYW0gY29udGFpbnMgbm9cbiAgICAgIHN1aXRhYmxlIGhhbmRsZXIsIHRoZSBzdGFjayB0cmFjZSBpcyB3cml0dGVuIChuaWNlbHkgZm9ybWF0dGVkKVxuICAgICAgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbTsgaWYgdGhlIGludGVycHJldGVyIGlzIGludGVyYWN0aXZlLFxuICAgICAgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhcyAic3lzLmxhc3RfdHJhY2ViYWNrIi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogInRiX25leHQiIGlzIHRoZSBuZXh0IGxldmVsIGluIHRoZVxuICAgICAgc3RhY2sgdHJhY2UgKHRvd2FyZHMgdGhlIGZyYW1lIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQpLCBvclxuICAgICAgIk5vbmUiIGlmIHRoZXJlIGlzIG5vIG5leHQgbGV2ZWw7ICJ0Yl9mcmFtZSIgcG9pbnRzIHRvIHRoZVxuICAgICAgZXhlY3V0aW9uIGZyYW1lIG9mIHRoZSBjdXJyZW50IGxldmVsOyAidGJfbGluZW5vIiBnaXZlcyB0aGUgbGluZVxuICAgICAgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQ7ICJ0Yl9sYXN0aSIgaW5kaWNhdGVzIHRoZVxuICAgICAgcHJlY2lzZSBpbnN0cnVjdGlvbi4gIFRoZSBsaW5lIG51bWJlciBhbmQgbGFzdCBpbnN0cnVjdGlvbiBpblxuICAgICAgdGhlIHRyYWNlYmFjayBtYXkgZGlmZmVyIGZyb20gdGhlIGxpbmUgbnVtYmVyIG9mIGl0cyBmcmFtZVxuICAgICAgb2JqZWN0IGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBub1xuICAgICAgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBvciB3aXRoIGEgZmluYWxseSBjbGF1c2UuXG5cbiAgIFNsaWNlIG9iamVjdHNcbiAgICAgIFNsaWNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNsaWNlcyBmb3IgIl9fZ2V0aXRlbV9fKCkiXG4gICAgICBtZXRob2RzLiAgVGhleSBhcmUgYWxzbyBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pbiAic2xpY2UoKSJcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAic3RhcnQiIGlzIHRoZSBsb3dlciBib3VuZDsgInN0b3AiXG4gICAgICBpcyB0aGUgdXBwZXIgYm91bmQ7ICJzdGVwIiBpcyB0aGUgc3RlcCB2YWx1ZTsgZWFjaCBpcyAiTm9uZSIgaWZcbiAgICAgIG9taXR0ZWQuICBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBoYXZlIGFueSB0eXBlLlxuXG4gICAgICBTbGljZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgc2xpY2UuaW5kaWNlcyhzZWxmLCBsZW5ndGgpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQgKmxlbmd0aCogYW5kXG4gICAgICAgICBjb21wdXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xpY2UgdGhhdCB0aGUgc2xpY2Ugb2JqZWN0XG4gICAgICAgICB3b3VsZCBkZXNjcmliZSBpZiBhcHBsaWVkIHRvIGEgc2VxdWVuY2Ugb2YgKmxlbmd0aCogaXRlbXMuXG4gICAgICAgICBJdCByZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnM7IHJlc3BlY3RpdmVseSB0aGVzZSBhcmVcbiAgICAgICAgIHRoZSAqc3RhcnQqIGFuZCAqc3RvcCogaW5kaWNlcyBhbmQgdGhlICpzdGVwKiBvciBzdHJpZGVcbiAgICAgICAgIGxlbmd0aCBvZiB0aGUgc2xpY2UuIE1pc3Npbmcgb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzIGFyZVxuICAgICAgICAgaGFuZGxlZCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggcmVndWxhciBzbGljZXMuXG5cbiAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0c1xuICAgICAgU3RhdGljIG1ldGhvZCBvYmplY3RzIHByb3ZpZGUgYSB3YXkgb2YgZGVmZWF0aW5nIHRoZVxuICAgICAgdHJhbnNmb3JtYXRpb24gb2YgZnVuY3Rpb24gb2JqZWN0cyB0byBtZXRob2Qgb2JqZWN0cyBkZXNjcmliZWRcbiAgICAgIGFib3ZlLiBBIHN0YXRpYyBtZXRob2Qgb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYW55IG90aGVyXG4gICAgICBvYmplY3QsIHVzdWFsbHkgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdC4gV2hlbiBhIHN0YXRpY1xuICAgICAgbWV0aG9kIG9iamVjdCBpcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG9yIGEgY2xhc3MgaW5zdGFuY2UsIHRoZVxuICAgICAgb2JqZWN0IGFjdHVhbGx5IHJldHVybmVkIGlzIHRoZSB3cmFwcGVkIG9iamVjdCwgd2hpY2ggaXMgbm90XG4gICAgICBzdWJqZWN0IHRvIGFueSBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlXG4gICAgICBub3QgdGhlbXNlbHZlcyBjYWxsYWJsZSwgYWx0aG91Z2ggdGhlIG9iamVjdHMgdGhleSB3cmFwIHVzdWFsbHlcbiAgICAgIGFyZS4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgInN0YXRpY21ldGhvZCgpIiBjb25zdHJ1Y3Rvci5cblxuICAgQ2xhc3MgbWV0aG9kIG9iamVjdHNcbiAgICAgIEEgY2xhc3MgbWV0aG9kIG9iamVjdCwgbGlrZSBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpcyBhIHdyYXBwZXJcbiAgICAgIGFyb3VuZCBhbm90aGVyIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgd2F5IGluIHdoaWNoIHRoYXQgb2JqZWN0XG4gICAgICBpcyByZXRyaWV2ZWQgZnJvbSBjbGFzc2VzIGFuZCBjbGFzcyBpbnN0YW5jZXMuIFRoZSBiZWhhdmlvdXIgb2ZcbiAgICAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIHVwb24gc3VjaCByZXRyaWV2YWwgaXMgZGVzY3JpYmVkIGFib3ZlLFxuICAgICAgdW5kZXIgIlVzZXItZGVmaW5lZCBtZXRob2RzIi4gQ2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWRcbiAgICAgIGJ5IHRoZSBidWlsdC1pbiAiY2xhc3NtZXRob2QoKSIgY29uc3RydWN0b3IuXG4nLAogICd0eXBlc2Z1bmN0aW9ucyc6ICdcbkZ1bmN0aW9uc1xuKioqKioqKioqXG5cbkZ1bmN0aW9uIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBUaGUgb25seVxub3BlcmF0aW9uIG9uIGEgZnVuY3Rpb24gb2JqZWN0IGlzIHRvIGNhbGwgaXQ6ICJmdW5jKGFyZ3VtZW50LWxpc3QpIi5cblxuVGhlcmUgYXJlIHJlYWxseSB0d28gZmxhdm9ycyBvZiBmdW5jdGlvbiBvYmplY3RzOiBidWlsdC1pbiBmdW5jdGlvbnNcbmFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiAgQm90aCBzdXBwb3J0IHRoZSBzYW1lIG9wZXJhdGlvbiAodG8gY2FsbFxudGhlIGZ1bmN0aW9uKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBkaWZmZXJlbnQsIGhlbmNlIHRoZVxuZGlmZmVyZW50IG9iamVjdCB0eXBlcy5cblxuU2VlICpGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAotICd0eXBlc21hcHBpbmcnOiAnXG5NYXBwaW5nIFR5cGVzIC0tLSAiZGljdCJcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0LVxuaW4gImxpc3QiLCAic2V0IiwgYW5kICJ0dXBsZSIgY2xhc3NlcywgYW5kIHRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZS4pXG5cbkEgZGljdGlvbmFyeVwncyBrZXlzIGFyZSAqYWxtb3N0KiBhcmJpdHJhcnkgdmFsdWVzLiAgVmFsdWVzIHRoYXQgYXJlXG5ub3QgKmhhc2hhYmxlKiwgdGhhdCBpcywgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMsIGRpY3Rpb25hcmllcyBvclxub3RoZXIgbXV0YWJsZSB0eXBlcyAodGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG5pZGVudGl0eSkgbWF5IG5vdCBiZSB1c2VkIGFzIGtleXMuICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleVxudGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsXG4oc3VjaCBhcyAiMSIgYW5kICIxLjAiKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4XG50aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnMgc3RvcmVcbmZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG8gdXNlXG50aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgImtleTpcbnZhbHVlIiBwYWlycyB3aXRoaW4gYnJhY2VzLCBmb3IgZXhhbXBsZTogIntcJ2phY2tcJzogNDA5OCwgXCdzam9lcmRcJzpcbjQxMjd9IiBvciAiezQwOTg6IFwnamFja1wnLCA0MTI3OiBcJ3Nqb2VyZFwnfSIsIG9yIGJ5IHRoZSAiZGljdCJcbmNvbnN0cnVjdG9yLlxuXG5jbGFzcyBjbGFzcyBkaWN0KCoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KG1hcHBpbmcsICoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KGl0ZXJhYmxlLCAqKmt3YXJnKVxuXG4gICBSZXR1cm4gYSBuZXcgZGljdGlvbmFyeSBpbml0aWFsaXplZCBmcm9tIGFuIG9wdGlvbmFsIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50IGFuZCBhIHBvc3NpYmx5IGVtcHR5IHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy5cblxuICAgSWYgbm8gcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiwgYW4gZW1wdHkgZGljdGlvbmFyeSBpcyBjcmVhdGVkLlxuICAgSWYgYSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuIGFuZCBpdCBpcyBhIG1hcHBpbmcgb2JqZWN0LCBhXG4gICBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBrZXktdmFsdWUgcGFpcnMgYXMgdGhlIG1hcHBpbmdcbiAgIG9iamVjdC4gIE90aGVyd2lzZSwgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgbXVzdCBiZSBhbiAqaXRlcmF0b3IqXG4gICBvYmplY3QuICBFYWNoIGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIG11c3QgaXRzZWxmIGJlIGFuIGl0ZXJhdG9yIHdpdGhcbiAgIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUgZmlyc3Qgb2JqZWN0IG9mIGVhY2ggaXRlbSBiZWNvbWVzIGEga2V5XG4gICBpbiB0aGUgbmV3IGRpY3Rpb25hcnksIGFuZCB0aGUgc2Vjb25kIG9iamVjdCB0aGUgY29ycmVzcG9uZGluZ1xuICAgdmFsdWUuICBJZiBhIGtleSBvY2N1cnMgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIGZvciB0aGF0IGtleVxuICAgYmVjb21lcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbmV3IGRpY3Rpb25hcnkuXG5cbiAgIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGVpclxuICAgdmFsdWVzIGFyZSBhZGRlZCB0byB0aGUgZGljdGlvbmFyeSBjcmVhdGVkIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LiAgSWYgYSBrZXkgYmVpbmcgYWRkZWQgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbVxuICAgdGhlIGtleXdvcmQgYXJndW1lbnQgcmVwbGFjZXMgdGhlIHZhbHVlIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LlxuXG4gICBUbyBpbGx1c3RyYXRlLCB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFsbCByZXR1cm4gYSBkaWN0aW9uYXJ5IGVxdWFsXG4gICB0byAieyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30iOlxuXG4gICAgICA+Pj4gYSA9IGRpY3Qob25lPTEsIHR3bz0yLCB0aHJlZT0zKVxuICAgICAgPj4+IGIgPSB7XCdvbmVcJzogMSwgXCd0d29cJzogMiwgXCd0aHJlZVwnOiAzfVxuICAgICAgPj4+IGMgPSBkaWN0KHppcChbXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnXSwgWzEsIDIsIDNdKSlcbiAgICAgID4+PiBkID0gZGljdChbKFwndHdvXCcsIDIpLCAoXCdvbmVcJywgMSksIChcJ3RocmVlXCcsIDMpXSlcbiAgICAgID4+PiBlID0gZGljdCh7XCd0aHJlZVwnOiAzLCBcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyfSlcbiAgICAgID4+PiBhID09IGIgPT0gYyA9PSBkID09IGVcbiAgICAgIFRydWVcblxuICAgUHJvdmlkaW5nIGtleXdvcmQgYXJndW1lbnRzIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlIG9ubHkgd29ya3MgZm9yXG4gICBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycy4gIE90aGVyd2lzZSwgYW55IHZhbGlkIGtleXNcbiAgIGNhbiBiZSB1c2VkLlxuXG4gICBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaWN0aW9uYXJpZXMgc3VwcG9ydCAoYW5kIHRoZXJlZm9yZSxcbiAgIGN1c3RvbSBtYXBwaW5nIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRvbyk6XG5cbiAgIGxlbihkKVxuXG4gICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZGljdGlvbmFyeSAqZCouXG5cbiAgIGRba2V5XVxuXG4gICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgIktleUVycm9yIiBpZlxuICAgICAgKmtleSogaXMgbm90IGluIHRoZSBtYXAuXG5cbiAgICAgIElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kICJfX21pc3NpbmdfXygpIiwgaWYgdGhlXG4gICAgICBrZXkgKmtleSogaXMgbm90IHByZXNlbnQsIHRoZSAiZFtrZXldIiBvcGVyYXRpb24gY2FsbHMgdGhhdFxuICAgICAgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KiBhcyBhcmd1bWVudC4gIFRoZSAiZFtrZXldIiBvcGVyYXRpb25cbiAgICAgIHRoZW4gcmV0dXJucyBvciByYWlzZXMgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZVxuICAgICAgIl9fbWlzc2luZ19fKGtleSkiIGNhbGwgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudC4gTm8gb3RoZXJcbiAgICAgIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyBpbnZva2UgIl9fbWlzc2luZ19fKCkiLiBJZiAiX19taXNzaW5nX18oKSJcbiAgICAgIGlzIG5vdCBkZWZpbmVkLCAiS2V5RXJyb3IiIGlzIHJhaXNlZC4gIl9fbWlzc2luZ19fKCkiIG11c3QgYmUgYVxuICAgICAgbWV0aG9kOyBpdCBjYW5ub3QgYmUgYW4gaW5zdGFuY2UgdmFyaWFibGU6XG5cbiAgICAgICAgID4+PiBjbGFzcyBDb3VudGVyKGRpY3QpOlxuICAgICAgICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgICAgICAgIC4uLiAgICAgICAgIHJldHVybiAwXG4gICAgICAgICA+Pj4gYyA9IENvdW50ZXIoKVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDBcbiAgICAgICAgID4+PiBjW1wncmVkXCddICs9IDFcbiAgICAgICAgID4+PiBjW1wncmVkXCddXG4gICAgICAgICAxXG5cbiAgICAgIFNlZSAiY29sbGVjdGlvbnMuQ291bnRlciIgZm9yIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb25cbiAgICAgIGluY2x1ZGluZyBvdGhlciBtZXRob2RzIGhlbHBmdWwgZm9yIGFjY3VtdWxhdGluZyBhbmQgbWFuYWdpbmdcbiAgICAgIHRhbGxpZXMuXG5cbiAgIGRba2V5XSA9IHZhbHVlXG5cbiAgICAgIFNldCAiZFtrZXldIiB0byAqdmFsdWUqLlxuXG4gICBkZWwgZFtrZXldXG5cbiAgICAgIFJlbW92ZSAiZFtrZXldIiBmcm9tICpkKi4gIFJhaXNlcyBhICJLZXlFcnJvciIgaWYgKmtleSogaXMgbm90XG4gICAgICBpbiB0aGUgbWFwLlxuXG4gICBrZXkgaW4gZFxuXG4gICAgICBSZXR1cm4gIlRydWUiIGlmICpkKiBoYXMgYSBrZXkgKmtleSosIGVsc2UgIkZhbHNlIi5cblxuICAga2V5IG5vdCBpbiBkXG5cbiAgICAgIEVxdWl2YWxlbnQgdG8gIm5vdCBrZXkgaW4gZCIuXG5cbiAgIGl0ZXIoZClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMgb2YgdGhlIGRpY3Rpb25hcnkuICBUaGlzIGlzIGFcbiAgICAgIHNob3J0Y3V0IGZvciAiaXRlcihkLmtleXMoKSkiLlxuXG4gICBjbGVhcigpXG5cbiAgICAgIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS5cblxuICAgY29weSgpXG5cbiAgICAgIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGljdGlvbmFyeS5cblxuICAgY2xhc3NtZXRob2QgZnJvbWtleXMoc2VxWywgdmFsdWVdKVxuXG4gICAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSAqc2VxKiBhbmQgdmFsdWVzIHNldCB0b1xuICAgICAgKnZhbHVlKi5cblxuICAgICAgImZyb21rZXlzKCkiIGlzIGEgY2xhc3MgbWV0aG9kIHRoYXQgcmV0dXJucyBhIG5ldyBkaWN0aW9uYXJ5LlxuICAgICAgKnZhbHVlKiBkZWZhdWx0cyB0byAiTm9uZSIuXG5cbiAgIGdldChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3IgKmtleSogaWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIGVsc2VcbiAgICAgICpkZWZhdWx0Ki4gSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gIk5vbmUiLCBzb1xuICAgICAgdGhhdCB0aGlzIG1ldGhvZCBuZXZlciByYWlzZXMgYSAiS2V5RXJyb3IiLlxuXG4gICBpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGl0ZW1zICgiKGtleSwgdmFsdWUpIlxuICAgICAgcGFpcnMpLiBTZWUgdGhlICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIGtleXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBrZXlzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAgcG9wKGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLFxuICAgICAgZWxzZSByZXR1cm4gKmRlZmF1bHQqLiAgSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiBhbmQgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgZGljdGlvbmFyeSwgYSAiS2V5RXJyb3IiIGlzIHJhaXNlZC5cblxuICAgcG9waXRlbSgpXG5cbiAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSAiKGtleSwgdmFsdWUpIiBwYWlyIGZyb20gdGhlXG4gICAgICBkaWN0aW9uYXJ5LlxuXG4gICAgICAicG9waXRlbSgpIiBpcyB1c2VmdWwgdG8gZGVzdHJ1Y3RpdmVseSBpdGVyYXRlIG92ZXIgYVxuICAgICAgZGljdGlvbmFyeSwgYXMgb2Z0ZW4gdXNlZCBpbiBzZXQgYWxnb3JpdGhtcy4gIElmIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyBlbXB0eSwgY2FsbGluZyAicG9waXRlbSgpIiByYWlzZXMgYSAiS2V5RXJyb3IiLlxuXG4gICBzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmV0dXJuIGl0cyB2YWx1ZS4gIElmIG5vdCwgaW5zZXJ0XG4gICAgICAqa2V5KiB3aXRoIGEgdmFsdWUgb2YgKmRlZmF1bHQqIGFuZCByZXR1cm4gKmRlZmF1bHQqLiAgKmRlZmF1bHQqXG4gICAgICBkZWZhdWx0cyB0byAiTm9uZSIuXG5cbiAgIHVwZGF0ZShbb3RoZXJdKVxuXG4gICAgICBVcGRhdGUgdGhlIGRpY3Rpb25hcnkgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gKm90aGVyKixcbiAgICAgIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGtleXMuICBSZXR1cm4gIk5vbmUiLlxuXG4gICAgICAidXBkYXRlKCkiIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW5cbiAgICAgIGl0ZXJhYmxlIG9mIGtleS92YWx1ZSBwYWlycyAoYXMgdHVwbGVzIG9yIG90aGVyIGl0ZXJhYmxlcyBvZlxuICAgICAgbGVuZ3RoIHR3bykuICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgdGhlbiB1cGRhdGVkIHdpdGggdGhvc2Uga2V5L3ZhbHVlIHBhaXJzOiAiZC51cGRhdGUocmVkPTEsXG4gICAgICBibHVlPTIpIi5cblxuICAgdmFsdWVzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgdmFsdWVzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuU2VlIGFsc286ICJ0eXBlcy5NYXBwaW5nUHJveHlUeXBlIiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSByZWFkLW9ubHlcbiAgdmlldyBvZiBhICJkaWN0Ii5cblxuXG5EaWN0aW9uYXJ5IHZpZXcgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9iamVjdHMgcmV0dXJuZWQgYnkgImRpY3Qua2V5cygpIiwgImRpY3QudmFsdWVzKCkiIGFuZFxuImRpY3QuaXRlbXMoKSIgYXJlICp2aWV3IG9iamVjdHMqLiAgVGhleSBwcm92aWRlIGEgZHluYW1pYyB2aWV3IG9uIHRoZVxuZGljdGlvbmFyeVwncyBlbnRyaWVzLCB3aGljaCBtZWFucyB0aGF0IHdoZW4gdGhlIGRpY3Rpb25hcnkgY2hhbmdlcyxcbnRoZSB2aWV3IHJlZmxlY3RzIHRoZXNlIGNoYW5nZXMuXG5cbkRpY3Rpb25hcnkgdmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgdG8geWllbGQgdGhlaXIgcmVzcGVjdGl2ZSBkYXRhLFxuYW5kIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0czpcblxubGVuKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG5pdGVyKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cywgdmFsdWVzIG9yIGl0ZW1zIChyZXByZXNlbnRlZCBhc1xuICAgdHVwbGVzIG9mICIoa2V5LCB2YWx1ZSkiKSBpbiB0aGUgZGljdGlvbmFyeS5cblxuICAgS2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIGFuIGFyYml0cmFyeSBvcmRlciB3aGljaCBpc1xuICAgbm9uLXJhbmRvbSwgdmFyaWVzIGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLCBhbmQgZGVwZW5kcyBvblxuICAgdGhlIGRpY3Rpb25hcnlcJ3MgaGlzdG9yeSBvZiBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMuIElmIGtleXMsXG4gICB2YWx1ZXMgYW5kIGl0ZW1zIHZpZXdzIGFyZSBpdGVyYXRlZCBvdmVyIHdpdGggbm8gaW50ZXJ2ZW5pbmdcbiAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRpY3Rpb25hcnksIHRoZSBvcmRlciBvZiBpdGVtcyB3aWxsIGRpcmVjdGx5XG4gICBjb3JyZXNwb25kLiAgVGhpcyBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mICIodmFsdWUsIGtleSkiIHBhaXJzIHVzaW5nXG4gICAiemlwKCkiOiAicGFpcnMgPSB6aXAoZC52YWx1ZXMoKSwgZC5rZXlzKCkpIi4gIEFub3RoZXIgd2F5IHRvXG4gICBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyAicGFpcnMgPSBbKHYsIGspIGZvciAoaywgdikgaW4gZC5pdGVtcygpXSIuXG5cbiAgIEl0ZXJhdGluZyB2aWV3cyB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeVxuICAgbWF5IHJhaXNlIGEgIlJ1bnRpbWVFcnJvciIgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXIgYWxsIGVudHJpZXMuXG5cbnggaW4gZGljdHZpZXdcblxuICAgUmV0dXJuICJUcnVlIiBpZiAqeCogaXMgaW4gdGhlIHVuZGVybHlpbmcgZGljdGlvbmFyeVwncyBrZXlzLCB2YWx1ZXNcbiAgIG9yIGl0ZW1zIChpbiB0aGUgbGF0dGVyIGNhc2UsICp4KiBzaG91bGQgYmUgYSAiKGtleSwgdmFsdWUpIlxuICAgdHVwbGUpLlxuXG5LZXlzIHZpZXdzIGFyZSBzZXQtbGlrZSBzaW5jZSB0aGVpciBlbnRyaWVzIGFyZSB1bmlxdWUgYW5kIGhhc2hhYmxlLlxuSWYgYWxsIHZhbHVlcyBhcmUgaGFzaGFibGUsIHNvIHRoYXQgIihrZXksIHZhbHVlKSIgcGFpcnMgYXJlIHVuaXF1ZVxuYW5kIGhhc2hhYmxlLCB0aGVuIHRoZSBpdGVtcyB2aWV3IGlzIGFsc28gc2V0LWxpa2UuICAoVmFsdWVzIHZpZXdzIGFyZVxubm90IHRyZWF0ZWQgYXMgc2V0LWxpa2Ugc2luY2UgdGhlIGVudHJpZXMgYXJlIGdlbmVyYWxseSBub3QgdW5pcXVlLilcbkZvciBzZXQtbGlrZSB2aWV3cywgYWxsIG9mIHRoZSBvcGVyYXRpb25zIGRlZmluZWQgZm9yIHRoZSBhYnN0cmFjdFxuYmFzZSBjbGFzcyAiY29sbGVjdGlvbnMuYWJjLlNldCIgYXJlIGF2YWlsYWJsZSAoZm9yIGV4YW1wbGUsICI9PSIsXG4iPCIsIG9yICJeIikuXG5cbkFuIGV4YW1wbGUgb2YgZGljdGlvbmFyeSB2aWV3IHVzYWdlOlxuXG4gICA+Pj4gZGlzaGVzID0ge1wnZWdnc1wnOiAyLCBcJ3NhdXNhZ2VcJzogMSwgXCdiYWNvblwnOiAxLCBcJ3NwYW1cJzogNTAwfVxuICAgPj4+IGtleXMgPSBkaXNoZXMua2V5cygpXG4gICA+Pj4gdmFsdWVzID0gZGlzaGVzLnZhbHVlcygpXG5cbiAgID4+PiAjIGl0ZXJhdGlvblxuICAgPj4+IG4gPSAwXG4gICA+Pj4gZm9yIHZhbCBpbiB2YWx1ZXM6XG4gICAuLi4gICAgIG4gKz0gdmFsXG4gICA+Pj4gcHJpbnQobilcbiAgIDUwNFxuXG4gICA+Pj4gIyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gdGhlIHNhbWUgb3JkZXJcbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYXVzYWdlXCcsIFwnc3BhbVwnXVxuICAgPj4+IGxpc3QodmFsdWVzKVxuICAgWzIsIDEsIDEsIDUwMF1cblxuICAgPj4+ICMgdmlldyBvYmplY3RzIGFyZSBkeW5hbWljIGFuZCByZWZsZWN0IGRpY3QgY2hhbmdlc1xuICAgPj4+IGRlbCBkaXNoZXNbXCdlZ2dzXCddXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ3NhdXNhZ2VcJ11cbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdzcGFtXCcsIFwnYmFjb25cJ11cblxuICAgPj4+ICMgc2V0IG9wZXJhdGlvbnNcbiAgID4+PiBrZXlzICYge1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2FsYWRcJ31cbiAgIHtcJ2JhY29uXCd9XG4gICA+Pj4ga2V5cyBeIHtcJ3NhdXNhZ2VcJywgXCdqdWljZVwnfVxuICAge1wnanVpY2VcJywgXCdzYXVzYWdlXCcsIFwnYmFjb25cJywgXCdzcGFtXCd9XG4nLAorICd0eXBlc21hcHBpbmcnOiAnXG5NYXBwaW5nIFR5cGVzIC0tLSAiZGljdCJcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0LVxuaW4gImxpc3QiLCAic2V0IiwgYW5kICJ0dXBsZSIgY2xhc3NlcywgYW5kIHRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZS4pXG5cbkEgZGljdGlvbmFyeVwncyBrZXlzIGFyZSAqYWxtb3N0KiBhcmJpdHJhcnkgdmFsdWVzLiAgVmFsdWVzIHRoYXQgYXJlXG5ub3QgKmhhc2hhYmxlKiwgdGhhdCBpcywgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMsIGRpY3Rpb25hcmllcyBvclxub3RoZXIgbXV0YWJsZSB0eXBlcyAodGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG5pZGVudGl0eSkgbWF5IG5vdCBiZSB1c2VkIGFzIGtleXMuICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleVxudGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsXG4oc3VjaCBhcyAiMSIgYW5kICIxLjAiKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4XG50aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnMgc3RvcmVcbmZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG8gdXNlXG50aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgImtleTpcbnZhbHVlIiBwYWlycyB3aXRoaW4gYnJhY2VzLCBmb3IgZXhhbXBsZTogIntcJ2phY2tcJzogNDA5OCwgXCdzam9lcmRcJzpcbjQxMjd9IiBvciAiezQwOTg6IFwnamFja1wnLCA0MTI3OiBcJ3Nqb2VyZFwnfSIsIG9yIGJ5IHRoZSAiZGljdCJcbmNvbnN0cnVjdG9yLlxuXG5jbGFzcyBjbGFzcyBkaWN0KCoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KG1hcHBpbmcsICoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KGl0ZXJhYmxlLCAqKmt3YXJnKVxuXG4gICBSZXR1cm4gYSBuZXcgZGljdGlvbmFyeSBpbml0aWFsaXplZCBmcm9tIGFuIG9wdGlvbmFsIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50IGFuZCBhIHBvc3NpYmx5IGVtcHR5IHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy5cblxuICAgSWYgbm8gcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiwgYW4gZW1wdHkgZGljdGlvbmFyeSBpcyBjcmVhdGVkLlxuICAgSWYgYSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuIGFuZCBpdCBpcyBhIG1hcHBpbmcgb2JqZWN0LCBhXG4gICBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBrZXktdmFsdWUgcGFpcnMgYXMgdGhlIG1hcHBpbmdcbiAgIG9iamVjdC4gIE90aGVyd2lzZSwgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgbXVzdCBiZSBhbiAqaXRlcmF0b3IqXG4gICBvYmplY3QuICBFYWNoIGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIG11c3QgaXRzZWxmIGJlIGFuIGl0ZXJhdG9yIHdpdGhcbiAgIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUgZmlyc3Qgb2JqZWN0IG9mIGVhY2ggaXRlbSBiZWNvbWVzIGEga2V5XG4gICBpbiB0aGUgbmV3IGRpY3Rpb25hcnksIGFuZCB0aGUgc2Vjb25kIG9iamVjdCB0aGUgY29ycmVzcG9uZGluZ1xuICAgdmFsdWUuICBJZiBhIGtleSBvY2N1cnMgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIGZvciB0aGF0IGtleVxuICAgYmVjb21lcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbmV3IGRpY3Rpb25hcnkuXG5cbiAgIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGVpclxuICAgdmFsdWVzIGFyZSBhZGRlZCB0byB0aGUgZGljdGlvbmFyeSBjcmVhdGVkIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LiAgSWYgYSBrZXkgYmVpbmcgYWRkZWQgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbVxuICAgdGhlIGtleXdvcmQgYXJndW1lbnQgcmVwbGFjZXMgdGhlIHZhbHVlIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LlxuXG4gICBUbyBpbGx1c3RyYXRlLCB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFsbCByZXR1cm4gYSBkaWN0aW9uYXJ5IGVxdWFsXG4gICB0byAieyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30iOlxuXG4gICAgICA+Pj4gYSA9IGRpY3Qob25lPTEsIHR3bz0yLCB0aHJlZT0zKVxuICAgICAgPj4+IGIgPSB7XCdvbmVcJzogMSwgXCd0d29cJzogMiwgXCd0aHJlZVwnOiAzfVxuICAgICAgPj4+IGMgPSBkaWN0KHppcChbXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnXSwgWzEsIDIsIDNdKSlcbiAgICAgID4+PiBkID0gZGljdChbKFwndHdvXCcsIDIpLCAoXCdvbmVcJywgMSksIChcJ3RocmVlXCcsIDMpXSlcbiAgICAgID4+PiBlID0gZGljdCh7XCd0aHJlZVwnOiAzLCBcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyfSlcbiAgICAgID4+PiBhID09IGIgPT0gYyA9PSBkID09IGVcbiAgICAgIFRydWVcblxuICAgUHJvdmlkaW5nIGtleXdvcmQgYXJndW1lbnRzIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlIG9ubHkgd29ya3MgZm9yXG4gICBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycy4gIE90aGVyd2lzZSwgYW55IHZhbGlkIGtleXNcbiAgIGNhbiBiZSB1c2VkLlxuXG4gICBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaWN0aW9uYXJpZXMgc3VwcG9ydCAoYW5kIHRoZXJlZm9yZSxcbiAgIGN1c3RvbSBtYXBwaW5nIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRvbyk6XG5cbiAgIGxlbihkKVxuXG4gICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZGljdGlvbmFyeSAqZCouXG5cbiAgIGRba2V5XVxuXG4gICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgIktleUVycm9yIiBpZlxuICAgICAgKmtleSogaXMgbm90IGluIHRoZSBtYXAuXG5cbiAgICAgIElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kICJfX21pc3NpbmdfXygpIiwgaWYgdGhlXG4gICAgICBrZXkgKmtleSogaXMgbm90IHByZXNlbnQsIHRoZSAiZFtrZXldIiBvcGVyYXRpb24gY2FsbHMgdGhhdFxuICAgICAgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KiBhcyBhcmd1bWVudC4gIFRoZSAiZFtrZXldIiBvcGVyYXRpb25cbiAgICAgIHRoZW4gcmV0dXJucyBvciByYWlzZXMgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZVxuICAgICAgIl9fbWlzc2luZ19fKGtleSkiIGNhbGwgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudC4gTm8gb3RoZXJcbiAgICAgIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyBpbnZva2UgIl9fbWlzc2luZ19fKCkiLiBJZiAiX19taXNzaW5nX18oKSJcbiAgICAgIGlzIG5vdCBkZWZpbmVkLCAiS2V5RXJyb3IiIGlzIHJhaXNlZC4gIl9fbWlzc2luZ19fKCkiIG11c3QgYmUgYVxuICAgICAgbWV0aG9kOyBpdCBjYW5ub3QgYmUgYW4gaW5zdGFuY2UgdmFyaWFibGU6XG5cbiAgICAgICAgID4+PiBjbGFzcyBDb3VudGVyKGRpY3QpOlxuICAgICAgICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgICAgICAgIC4uLiAgICAgICAgIHJldHVybiAwXG4gICAgICAgICA+Pj4gYyA9IENvdW50ZXIoKVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDBcbiAgICAgICAgID4+PiBjW1wncmVkXCddICs9IDFcbiAgICAgICAgID4+PiBjW1wncmVkXCddXG4gICAgICAgICAxXG5cbiAgICAgIFNlZSAiY29sbGVjdGlvbnMuQ291bnRlciIgZm9yIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb25cbiAgICAgIGluY2x1ZGluZyBvdGhlciBtZXRob2RzIGhlbHBmdWwgZm9yIGFjY3VtdWxhdGluZyBhbmQgbWFuYWdpbmdcbiAgICAgIHRhbGxpZXMuXG5cbiAgIGRba2V5XSA9IHZhbHVlXG5cbiAgICAgIFNldCAiZFtrZXldIiB0byAqdmFsdWUqLlxuXG4gICBkZWwgZFtrZXldXG5cbiAgICAgIFJlbW92ZSAiZFtrZXldIiBmcm9tICpkKi4gIFJhaXNlcyBhICJLZXlFcnJvciIgaWYgKmtleSogaXMgbm90XG4gICAgICBpbiB0aGUgbWFwLlxuXG4gICBrZXkgaW4gZFxuXG4gICAgICBSZXR1cm4gIlRydWUiIGlmICpkKiBoYXMgYSBrZXkgKmtleSosIGVsc2UgIkZhbHNlIi5cblxuICAga2V5IG5vdCBpbiBkXG5cbiAgICAgIEVxdWl2YWxlbnQgdG8gIm5vdCBrZXkgaW4gZCIuXG5cbiAgIGl0ZXIoZClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMgb2YgdGhlIGRpY3Rpb25hcnkuICBUaGlzIGlzIGFcbiAgICAgIHNob3J0Y3V0IGZvciAiaXRlcihkLmtleXMoKSkiLlxuXG4gICBjbGVhcigpXG5cbiAgICAgIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS5cblxuICAgY29weSgpXG5cbiAgICAgIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGljdGlvbmFyeS5cblxuICAgY2xhc3NtZXRob2QgZnJvbWtleXMoc2VxWywgdmFsdWVdKVxuXG4gICAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSAqc2VxKiBhbmQgdmFsdWVzIHNldCB0b1xuICAgICAgKnZhbHVlKi5cblxuICAgICAgImZyb21rZXlzKCkiIGlzIGEgY2xhc3MgbWV0aG9kIHRoYXQgcmV0dXJucyBhIG5ldyBkaWN0aW9uYXJ5LlxuICAgICAgKnZhbHVlKiBkZWZhdWx0cyB0byAiTm9uZSIuXG5cbiAgIGdldChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3IgKmtleSogaWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIGVsc2VcbiAgICAgICpkZWZhdWx0Ki4gSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gIk5vbmUiLCBzb1xuICAgICAgdGhhdCB0aGlzIG1ldGhvZCBuZXZlciByYWlzZXMgYSAiS2V5RXJyb3IiLlxuXG4gICBpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGl0ZW1zICgiKGtleSwgdmFsdWUpIlxuICAgICAgcGFpcnMpLiBTZWUgdGhlICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIGtleXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBrZXlzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAgcG9wKGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLFxuICAgICAgZWxzZSByZXR1cm4gKmRlZmF1bHQqLiAgSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiBhbmQgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgZGljdGlvbmFyeSwgYSAiS2V5RXJyb3IiIGlzIHJhaXNlZC5cblxuICAgcG9waXRlbSgpXG5cbiAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSAiKGtleSwgdmFsdWUpIiBwYWlyIGZyb20gdGhlXG4gICAgICBkaWN0aW9uYXJ5LlxuXG4gICAgICAicG9waXRlbSgpIiBpcyB1c2VmdWwgdG8gZGVzdHJ1Y3RpdmVseSBpdGVyYXRlIG92ZXIgYVxuICAgICAgZGljdGlvbmFyeSwgYXMgb2Z0ZW4gdXNlZCBpbiBzZXQgYWxnb3JpdGhtcy4gIElmIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyBlbXB0eSwgY2FsbGluZyAicG9waXRlbSgpIiByYWlzZXMgYSAiS2V5RXJyb3IiLlxuXG4gICBzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmV0dXJuIGl0cyB2YWx1ZS4gIElmIG5vdCwgaW5zZXJ0XG4gICAgICAqa2V5KiB3aXRoIGEgdmFsdWUgb2YgKmRlZmF1bHQqIGFuZCByZXR1cm4gKmRlZmF1bHQqLiAgKmRlZmF1bHQqXG4gICAgICBkZWZhdWx0cyB0byAiTm9uZSIuXG5cbiAgIHVwZGF0ZShbb3RoZXJdKVxuXG4gICAgICBVcGRhdGUgdGhlIGRpY3Rpb25hcnkgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gKm90aGVyKixcbiAgICAgIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGtleXMuICBSZXR1cm4gIk5vbmUiLlxuXG4gICAgICAidXBkYXRlKCkiIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW5cbiAgICAgIGl0ZXJhYmxlIG9mIGtleS92YWx1ZSBwYWlycyAoYXMgdHVwbGVzIG9yIG90aGVyIGl0ZXJhYmxlcyBvZlxuICAgICAgbGVuZ3RoIHR3bykuICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgdGhlbiB1cGRhdGVkIHdpdGggdGhvc2Uga2V5L3ZhbHVlIHBhaXJzOiAiZC51cGRhdGUocmVkPTEsXG4gICAgICBibHVlPTIpIi5cblxuICAgdmFsdWVzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgdmFsdWVzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuU2VlIGFsc286XG5cbiAgICJ0eXBlcy5NYXBwaW5nUHJveHlUeXBlIiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSByZWFkLW9ubHkgdmlldyBvZlxuICAgYSAiZGljdCIuXG5cblxuRGljdGlvbmFyeSB2aWV3IG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvYmplY3RzIHJldHVybmVkIGJ5ICJkaWN0LmtleXMoKSIsICJkaWN0LnZhbHVlcygpIiBhbmRcbiJkaWN0Lml0ZW1zKCkiIGFyZSAqdmlldyBvYmplY3RzKi4gIFRoZXkgcHJvdmlkZSBhIGR5bmFtaWMgdmlldyBvbiB0aGVcbmRpY3Rpb25hcnlcJ3MgZW50cmllcywgd2hpY2ggbWVhbnMgdGhhdCB3aGVuIHRoZSBkaWN0aW9uYXJ5IGNoYW5nZXMsXG50aGUgdmlldyByZWZsZWN0cyB0aGVzZSBjaGFuZ2VzLlxuXG5EaWN0aW9uYXJ5IHZpZXdzIGNhbiBiZSBpdGVyYXRlZCBvdmVyIHRvIHlpZWxkIHRoZWlyIHJlc3BlY3RpdmUgZGF0YSxcbmFuZCBzdXBwb3J0IG1lbWJlcnNoaXAgdGVzdHM6XG5cbmxlbihkaWN0dmlldylcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeS5cblxuaXRlcihkaWN0dmlldylcblxuICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMsIHZhbHVlcyBvciBpdGVtcyAocmVwcmVzZW50ZWQgYXNcbiAgIHR1cGxlcyBvZiAiKGtleSwgdmFsdWUpIikgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbiAgIEtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiBhbiBhcmJpdHJhcnkgb3JkZXIgd2hpY2ggaXNcbiAgIG5vbi1yYW5kb20sIHZhcmllcyBhY3Jvc3MgUHl0aG9uIGltcGxlbWVudGF0aW9ucywgYW5kIGRlcGVuZHMgb25cbiAgIHRoZSBkaWN0aW9uYXJ5XCdzIGhpc3Rvcnkgb2YgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zLiBJZiBrZXlzLFxuICAgdmFsdWVzIGFuZCBpdGVtcyB2aWV3cyBhcmUgaXRlcmF0ZWQgb3ZlciB3aXRoIG5vIGludGVydmVuaW5nXG4gICBtb2RpZmljYXRpb25zIHRvIHRoZSBkaWN0aW9uYXJ5LCB0aGUgb3JkZXIgb2YgaXRlbXMgd2lsbCBkaXJlY3RseVxuICAgY29ycmVzcG9uZC4gIFRoaXMgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiAiKHZhbHVlLCBrZXkpIiBwYWlycyB1c2luZ1xuICAgInppcCgpIjogInBhaXJzID0gemlwKGQudmFsdWVzKCksIGQua2V5cygpKSIuICBBbm90aGVyIHdheSB0b1xuICAgY3JlYXRlIHRoZSBzYW1lIGxpc3QgaXMgInBhaXJzID0gWyh2LCBrKSBmb3IgKGssIHYpIGluIGQuaXRlbXMoKV0iLlxuXG4gICBJdGVyYXRpbmcgdmlld3Mgd2hpbGUgYWRkaW5nIG9yIGRlbGV0aW5nIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnlcbiAgIG1heSByYWlzZSBhICJSdW50aW1lRXJyb3IiIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzLlxuXG54IGluIGRpY3R2aWV3XG5cbiAgIFJldHVybiAiVHJ1ZSIgaWYgKngqIGlzIGluIHRoZSB1bmRlcmx5aW5nIGRpY3Rpb25hcnlcJ3Mga2V5cywgdmFsdWVzXG4gICBvciBpdGVtcyAoaW4gdGhlIGxhdHRlciBjYXNlLCAqeCogc2hvdWxkIGJlIGEgIihrZXksIHZhbHVlKSJcbiAgIHR1cGxlKS5cblxuS2V5cyB2aWV3cyBhcmUgc2V0LWxpa2Ugc2luY2UgdGhlaXIgZW50cmllcyBhcmUgdW5pcXVlIGFuZCBoYXNoYWJsZS5cbklmIGFsbCB2YWx1ZXMgYXJlIGhhc2hhYmxlLCBzbyB0aGF0ICIoa2V5LCB2YWx1ZSkiIHBhaXJzIGFyZSB1bmlxdWVcbmFuZCBoYXNoYWJsZSwgdGhlbiB0aGUgaXRlbXMgdmlldyBpcyBhbHNvIHNldC1saWtlLiAgKFZhbHVlcyB2aWV3cyBhcmVcbm5vdCB0cmVhdGVkIGFzIHNldC1saWtlIHNpbmNlIHRoZSBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgbm90IHVuaXF1ZS4pXG5Gb3Igc2V0LWxpa2Ugdmlld3MsIGFsbCBvZiB0aGUgb3BlcmF0aW9ucyBkZWZpbmVkIGZvciB0aGUgYWJzdHJhY3RcbmJhc2UgY2xhc3MgImNvbGxlY3Rpb25zLmFiYy5TZXQiIGFyZSBhdmFpbGFibGUgKGZvciBleGFtcGxlLCAiPT0iLFxuIjwiLCBvciAiXiIpLlxuXG5BbiBleGFtcGxlIG9mIGRpY3Rpb25hcnkgdmlldyB1c2FnZTpcblxuICAgPj4+IGRpc2hlcyA9IHtcJ2VnZ3NcJzogMiwgXCdzYXVzYWdlXCc6IDEsIFwnYmFjb25cJzogMSwgXCdzcGFtXCc6IDUwMH1cbiAgID4+PiBrZXlzID0gZGlzaGVzLmtleXMoKVxuICAgPj4+IHZhbHVlcyA9IGRpc2hlcy52YWx1ZXMoKVxuXG4gICA+Pj4gIyBpdGVyYXRpb25cbiAgID4+PiBuID0gMFxuICAgPj4+IGZvciB2YWwgaW4gdmFsdWVzOlxuICAgLi4uICAgICBuICs9IHZhbFxuICAgPj4+IHByaW50KG4pXG4gICA1MDRcblxuICAgPj4+ICMga2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIHRoZSBzYW1lIG9yZGVyXG4gICA+Pj4gbGlzdChrZXlzKVxuICAgW1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2F1c2FnZVwnLCBcJ3NwYW1cJ11cbiAgID4+PiBsaXN0KHZhbHVlcylcbiAgIFsyLCAxLCAxLCA1MDBdXG5cbiAgID4+PiAjIHZpZXcgb2JqZWN0cyBhcmUgZHluYW1pYyBhbmQgcmVmbGVjdCBkaWN0IGNoYW5nZXNcbiAgID4+PiBkZWwgZGlzaGVzW1wnZWdnc1wnXVxuICAgPj4+IGRlbCBkaXNoZXNbXCdzYXVzYWdlXCddXG4gICA+Pj4gbGlzdChrZXlzKVxuICAgW1wnc3BhbVwnLCBcJ2JhY29uXCddXG5cbiAgID4+PiAjIHNldCBvcGVyYXRpb25zXG4gICA+Pj4ga2V5cyAmIHtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhbGFkXCd9XG4gICB7XCdiYWNvblwnfVxuICAgPj4+IGtleXMgXiB7XCdzYXVzYWdlXCcsIFwnanVpY2VcJ31cbiAgIHtcJ2p1aWNlXCcsIFwnc2F1c2FnZVwnLCBcJ2JhY29uXCcsIFwnc3BhbVwnfVxuJywKICAndHlwZXNtZXRob2RzJzogJ1xuTWV0aG9kc1xuKioqKioqKlxuXG5NZXRob2RzIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIHVzaW5nIHRoZSBhdHRyaWJ1dGUgbm90YXRpb24uXG5UaGVyZSBhcmUgdHdvIGZsYXZvcnM6IGJ1aWx0LWluIG1ldGhvZHMgKHN1Y2ggYXMgImFwcGVuZCgpIiBvbiBsaXN0cylcbmFuZCBjbGFzcyBpbnN0YW5jZSBtZXRob2RzLiAgQnVpbHQtaW4gbWV0aG9kcyBhcmUgZGVzY3JpYmVkIHdpdGggdGhlXG50eXBlcyB0aGF0IHN1cHBvcnQgdGhlbS5cblxuSWYgeW91IGFjY2VzcyBhIG1ldGhvZCAoYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgY2xhc3MgbmFtZXNwYWNlKVxudGhyb3VnaCBhbiBpbnN0YW5jZSwgeW91IGdldCBhIHNwZWNpYWwgb2JqZWN0OiBhICpib3VuZCBtZXRob2QqIChhbHNvXG5jYWxsZWQgKmluc3RhbmNlIG1ldGhvZCopIG9iamVjdC4gV2hlbiBjYWxsZWQsIGl0IHdpbGwgYWRkIHRoZSAic2VsZiJcbmFyZ3VtZW50IHRvIHRoZSBhcmd1bWVudCBsaXN0LiAgQm91bmQgbWV0aG9kcyBoYXZlIHR3byBzcGVjaWFsIHJlYWQtXG5vbmx5IGF0dHJpYnV0ZXM6ICJtLl9fc2VsZl9fIiBpcyB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2Rcbm9wZXJhdGVzLCBhbmQgIm0uX19mdW5jX18iIGlzIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIG1ldGhvZC5cbkNhbGxpbmcgIm0oYXJnLTEsIGFyZy0yLCAuLi4sIGFyZy1uKSIgaXMgY29tcGxldGVseSBlcXVpdmFsZW50IHRvXG5jYWxsaW5nICJtLl9fZnVuY19fKG0uX19zZWxmX18sIGFyZy0xLCBhcmctMiwgLi4uLCBhcmctbikiLlxuXG5MaWtlIGZ1bmN0aW9uIG9iamVjdHMsIGJvdW5kIG1ldGhvZCBvYmplY3RzIHN1cHBvcnQgZ2V0dGluZyBhcmJpdHJhcnlcbmF0dHJpYnV0ZXMuICBIb3dldmVyLCBzaW5jZSBtZXRob2QgYXR0cmlidXRlcyBhcmUgYWN0dWFsbHkgc3RvcmVkIG9uXG50aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QgKCJtZXRoLl9fZnVuY19fIiksIHNldHRpbmcgbWV0aG9kXG5hdHRyaWJ1dGVzIG9uIGJvdW5kIG1ldGhvZHMgaXMgZGlzYWxsb3dlZC4gIEF0dGVtcHRpbmcgdG8gc2V0IGFuXG5hdHRyaWJ1dGUgb24gYSBtZXRob2QgcmVzdWx0cyBpbiBhbiAiQXR0cmlidXRlRXJyb3IiIGJlaW5nIHJhaXNlZC4gIEluXG5vcmRlciB0byBzZXQgYSBtZXRob2QgYXR0cmlidXRlLCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBpdCBvbiB0aGVcbnVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0OlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKTpcbiAgIC4uLiAgICAgICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLm1ldGhvZC53aG9hbWkgPSBcJ215IG5hbWUgaXMgbWV0aG9kXCcgICMgY2FuXCd0IHNldCBvbiB0aGUgbWV0aG9kXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBBdHRyaWJ1dGVFcnJvcjogXCdtZXRob2RcJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSBcJ3dob2FtaVwnXG4gICA+Pj4gYy5tZXRob2QuX19mdW5jX18ud2hvYW1pID0gXCdteSBuYW1lIGlzIG1ldGhvZFwnXG4gICA+Pj4gYy5tZXRob2Qud2hvYW1pXG4gICBcJ215IG5hbWUgaXMgbWV0aG9kXCdcblxuU2VlICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKICAndHlwZXNtb2R1bGVzJzogJ1xuTW9kdWxlc1xuKioqKioqKlxuXG5UaGUgb25seSBzcGVjaWFsIG9wZXJhdGlvbiBvbiBhIG1vZHVsZSBpcyBhdHRyaWJ1dGUgYWNjZXNzOiAibS5uYW1lIixcbndoZXJlICptKiBpcyBhIG1vZHVsZSBhbmQgKm5hbWUqIGFjY2Vzc2VzIGEgbmFtZSBkZWZpbmVkIGluICptKlwnc1xuc3ltYm9sIHRhYmxlLiBNb2R1bGUgYXR0cmlidXRlcyBjYW4gYmUgYXNzaWduZWQgdG8uICAoTm90ZSB0aGF0IHRoZVxuImltcG9ydCIgc3RhdGVtZW50IGlzIG5vdCwgc3RyaWN0bHkgc3BlYWtpbmcsIGFuIG9wZXJhdGlvbiBvbiBhIG1vZHVsZVxub2JqZWN0OyAiaW1wb3J0IGZvbyIgZG9lcyBub3QgcmVxdWlyZSBhIG1vZHVsZSBvYmplY3QgbmFtZWQgKmZvbyogdG9cbmV4aXN0LCByYXRoZXIgaXQgcmVxdWlyZXMgYW4gKGV4dGVybmFsKSAqZGVmaW5pdGlvbiogZm9yIGEgbW9kdWxlXG5uYW1lZCAqZm9vKiBzb21ld2hlcmUuKVxuXG5BIHNwZWNpYWwgYXR0cmlidXRlIG9mIGV2ZXJ5IG1vZHVsZSBpcyAiX19kaWN0X18iLiBUaGlzIGlzIHRoZVxuZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBtb2R1bGVcJ3Mgc3ltYm9sIHRhYmxlLiBNb2RpZnlpbmcgdGhpc1xuZGljdGlvbmFyeSB3aWxsIGFjdHVhbGx5IGNoYW5nZSB0aGUgbW9kdWxlXCdzIHN5bWJvbCB0YWJsZSwgYnV0IGRpcmVjdFxuYXNzaWdubWVudCB0byB0aGUgIl9fZGljdF9fIiBhdHRyaWJ1dGUgaXMgbm90IHBvc3NpYmxlICh5b3UgY2FuIHdyaXRlXG4ibS5fX2RpY3RfX1tcJ2FcJ10gPSAxIiwgd2hpY2ggZGVmaW5lcyAibS5hIiB0byBiZSAiMSIsIGJ1dCB5b3UgY2FuXCd0XG53cml0ZSAibS5fX2RpY3RfXyA9IHt9IikuICBNb2RpZnlpbmcgIl9fZGljdF9fIiBkaXJlY3RseSBpcyBub3RcbnJlY29tbWVuZGVkLlxuXG5Nb2R1bGVzIGJ1aWx0IGludG8gdGhlIGludGVycHJldGVyIGFyZSB3cml0dGVuIGxpa2UgdGhpczogIjxtb2R1bGVcblwnc3lzXCcgKGJ1aWx0LWluKT4iLiAgSWYgbG9hZGVkIGZyb20gYSBmaWxlLCB0aGV5IGFyZSB3cml0dGVuIGFzXG4iPG1vZHVsZSBcJ29zXCcgZnJvbSBcJy91c3IvbG9jYWwvbGliL3B5dGhvblguWS9vcy5weWNcJz4iLlxuJywKLSAndHlwZXNzZXEnOiAnXG5TZXF1ZW5jZSBUeXBlcyAtLS0gImxpc3QiLCAidHVwbGUiLCAicmFuZ2UiXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSBiYXNpYyBzZXF1ZW5jZSB0eXBlczogbGlzdHMsIHR1cGxlcywgYW5kIHJhbmdlXG5vYmplY3RzLiBBZGRpdGlvbmFsIHNlcXVlbmNlIHR5cGVzIHRhaWxvcmVkIGZvciBwcm9jZXNzaW5nIG9mICpiaW5hcnlcbmRhdGEqIGFuZCAqdGV4dCBzdHJpbmdzKiBhcmUgZGVzY3JpYmVkIGluIGRlZGljYXRlZCBzZWN0aW9ucy5cblxuXG5Db21tb24gU2VxdWVuY2UgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgc3VwcG9ydGVkIGJ5IG1vc3Qgc2VxdWVuY2VcbnR5cGVzLCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZS4gVGhlICJjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UiIEFCQ1xuaXMgcHJvdmlkZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zXG5vbiBjdXN0b20gc2VxdWVuY2UgdHlwZXMuXG5cblRoaXMgdGFibGUgbGlzdHMgdGhlIHNlcXVlbmNlIG9wZXJhdGlvbnMgc29ydGVkIGluIGFzY2VuZGluZyBwcmlvcml0eVxuKG9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkpLiAgSW4gdGhlIHRhYmxlLFxuKnMqIGFuZCAqdCogYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCAqbiosICppKiwgKmoqIGFuZCAqayogYXJlXG5pbnRlZ2VycyBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmQgdmFsdWVcbnJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKi5cblxuVGhlICJpbiIgYW5kICJub3QgaW4iIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZVxuY29tcGFyaXNvbiBvcGVyYXRpb25zLiBUaGUgIisiIChjb25jYXRlbmF0aW9uKSBhbmQgIioiIChyZXBldGl0aW9uKVxub3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoZSBjb3JyZXNwb25kaW5nIG51bWVyaWNcbm9wZXJhdGlvbnMuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PStcbnwgInggaW4gcyIgICAgICAgICAgICAgICAgICAgfCAiVHJ1ZSIgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgICB8ICgxKSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJ4IG5vdCBpbiBzIiAgICAgICAgICAgICAgIHwgIkZhbHNlIiBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICAgfCAoMSkgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicyArIHQiICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb25jYXRlbmF0aW9uIG9mICpzKiBhbmQgKnQqIHwgKDYpKDcpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMgKiBuIiBvciAibiAqIHMiICAgICAgICAgfCAqbiogc2hhbGxvdyBjb3BpZXMgb2YgKnMqICAgICAgICB8ICgyKSg3KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzW2ldIiAgICAgICAgICAgICAgICAgICAgIHwgKmkqdGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICAgICAgfCAoMykgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAic1tpOmpdIiAgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDQpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInNbaTpqOmtdIiAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg1KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzLmluZGV4KHhbLCBpWywgal1dKSIgICAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgfCAoOCkgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG5cblNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlIGFsc28gc3VwcG9ydCBjb21wYXJpc29ucy4gIEluIHBhcnRpY3VsYXIsXG50dXBsZXMgYW5kIGxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSBieSBjb21wYXJpbmdcbmNvcnJlc3BvbmRpbmcgZWxlbWVudHMuIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBldmVyeVxuZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbnR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiAgKEZvciBmdWxsIGRldGFpbHMgc2VlICpDb21wYXJpc29ucyogaW5cbnRoZSBsYW5ndWFnZSByZWZlcmVuY2UuKVxuXG5Ob3RlczpcblxuMS4gV2hpbGUgdGhlICJpbiIgYW5kICJub3QgaW4iIG9wZXJhdGlvbnMgYXJlIHVzZWQgb25seSBmb3Igc2ltcGxlXG4gICBjb250YWlubWVudCB0ZXN0aW5nIGluIHRoZSBnZW5lcmFsIGNhc2UsIHNvbWUgc3BlY2lhbGlzZWQgc2VxdWVuY2VzXG4gICAoc3VjaCBhcyAic3RyIiwgImJ5dGVzIiBhbmQgImJ5dGVhcnJheSIpIGFsc28gdXNlIHRoZW0gZm9yXG4gICBzdWJzZXF1ZW5jZSB0ZXN0aW5nOlxuXG4gICAgICA+Pj4gImdnIiBpbiAiZWdncyJcbiAgICAgIFRydWVcblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gIjAiIGFyZSB0cmVhdGVkIGFzICIwIiAod2hpY2ggeWllbGRzIGFuXG4gICBlbXB0eSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzKikuICBOb3RlIGFsc28gdGhhdCB0aGUgY29waWVzXG4gICBhcmUgc2hhbGxvdzsgbmVzdGVkIHN0cnVjdHVyZXMgYXJlIG5vdCBjb3BpZWQuICBUaGlzIG9mdGVuIGhhdW50c1xuICAgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsgY29uc2lkZXI6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXV0gKiAzXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbXSwgW10sIFtdXVxuICAgICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgICAgPj4+IGxpc3RzXG4gICAgICBbWzNdLCBbM10sIFszXV1cblxuICAgV2hhdCBoYXMgaGFwcGVuZWQgaXMgdGhhdCAiW1tdXSIgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiAiW1tdXSAqIDMiIGFyZSAocG9pbnRlcnNcbiAgIHRvKSB0aGlzIHNpbmdsZSBlbXB0eSBsaXN0LiAgTW9kaWZ5aW5nIGFueSBvZiB0aGUgZWxlbWVudHMgb2ZcbiAgICJsaXN0cyIgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4gWW91IGNhbiBjcmVhdGUgYSBsaXN0IG9mXG4gICBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXSBmb3IgaSBpbiByYW5nZSgzKV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1sxXS5hcHBlbmQoNSlcbiAgICAgID4+PiBsaXN0c1syXS5hcHBlbmQoNylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzVdLCBbN11dXG5cbjMuIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mXG4gICB0aGUgc3RyaW5nOiAibGVuKHMpICsgaSIgb3IgImxlbihzKSArIGoiIGlzIHN1YnN0aXR1dGVkLiAgQnV0IG5vdGVcbiAgIHRoYXQgIi0wIiBpcyBzdGlsbCAiMCIuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgImkgPD0gayA8IGoiLiAgSWYgKmkqIG9yICpqKiBpc1xuICAgZ3JlYXRlciB0aGFuICJsZW4ocykiLCB1c2UgImxlbihzKSIuICBJZiAqaSogaXMgb21pdHRlZCBvciAiTm9uZSIsXG4gICB1c2UgIjAiLiAgSWYgKmoqIGlzIG9taXR0ZWQgb3IgIk5vbmUiLCB1c2UgImxlbihzKSIuICBJZiAqaSogaXNcbiAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAqaiosIHRoZSBzbGljZSBpcyBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgInggPSBpICsgbiprIiBzdWNoIHRoYXQgIjAgPD0gbiA8XG4gICAoai1pKS9rIi4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW5kaWNlcyBhcmUgImkiLCAiaStrIiwgImkrMiprIixcbiAgICJpKzMqayIgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXQgbmV2ZXJcbiAgIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gImxlbihzKSIsIHVzZVxuICAgImxlbihzKSIuICBJZiAqaSogb3IgKmoqIGFyZSBvbWl0dGVkIG9yICJOb25lIiwgdGhleSBiZWNvbWUgImVuZCJcbiAgIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKiBjYW5ub3QgYmVcbiAgIHplcm8uIElmICprKiBpcyAiTm9uZSIsIGl0IGlzIHRyZWF0ZWQgbGlrZSAiMSIuXG5cbjYuIENvbmNhdGVuYXRpbmcgaW1tdXRhYmxlIHNlcXVlbmNlcyBhbHdheXMgcmVzdWx0cyBpbiBhIG5ld1xuICAgb2JqZWN0LiBUaGlzIG1lYW5zIHRoYXQgYnVpbGRpbmcgdXAgYSBzZXF1ZW5jZSBieSByZXBlYXRlZFxuICAgY29uY2F0ZW5hdGlvbiB3aWxsIGhhdmUgYSBxdWFkcmF0aWMgcnVudGltZSBjb3N0IGluIHRoZSB0b3RhbFxuICAgc2VxdWVuY2UgbGVuZ3RoLiBUbyBnZXQgYSBsaW5lYXIgcnVudGltZSBjb3N0LCB5b3UgbXVzdCBzd2l0Y2ggdG9cbiAgIG9uZSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGJlbG93OlxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgInN0ciIgb2JqZWN0cywgeW91IGNhbiBidWlsZCBhIGxpc3QgYW5kIHVzZVxuICAgICAic3RyLmpvaW4oKSIgYXQgdGhlIGVuZCBvciBlbHNlIHdyaXRlIHRvIGEgImlvLlN0cmluZ0lPIiBpbnN0YW5jZVxuICAgICBhbmQgcmV0cmlldmUgaXRzIHZhbHVlIHdoZW4gY29tcGxldGVcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nICJieXRlcyIgb2JqZWN0cywgeW91IGNhbiBzaW1pbGFybHkgdXNlXG4gICAgICJieXRlcy5qb2luKCkiIG9yICJpby5CeXRlc0lPIiwgb3IgeW91IGNhbiBkbyBpbi1wbGFjZVxuICAgICBjb25jYXRlbmF0aW9uIHdpdGggYSAiYnl0ZWFycmF5IiBvYmplY3QuICAiYnl0ZWFycmF5IiBvYmplY3RzIGFyZVxuICAgICBtdXRhYmxlIGFuZCBoYXZlIGFuIGVmZmljaWVudCBvdmVyYWxsb2NhdGlvbiBtZWNoYW5pc21cblxuICAgKiBpZiBjb25jYXRlbmF0aW5nICJ0dXBsZSIgb2JqZWN0cywgZXh0ZW5kIGEgImxpc3QiIGluc3RlYWRcblxuICAgKiBmb3Igb3RoZXIgdHlwZXMsIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBjbGFzcyBkb2N1bWVudGF0aW9uXG5cbjcuIFNvbWUgc2VxdWVuY2UgdHlwZXMgKHN1Y2ggYXMgInJhbmdlIikgb25seSBzdXBwb3J0IGl0ZW1cbiAgIHNlcXVlbmNlcyB0aGF0IGZvbGxvdyBzcGVjaWZpYyBwYXR0ZXJucywgYW5kIGhlbmNlIGRvblwndCBzdXBwb3J0XG4gICBzZXF1ZW5jZSBjb25jYXRlbmF0aW9uIG9yIHJlcGV0aXRpb24uXG5cbjguICJpbmRleCIgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuXG4gICBzdXBwb3J0ZWQsIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgaW5kZXggbWV0aG9kIGFsbG93XG4gICBlZmZpY2llbnQgc2VhcmNoaW5nIG9mIHN1YnNlY3Rpb25zIG9mIHRoZSBzZXF1ZW5jZS4gUGFzc2luZyB0aGVcbiAgIGV4dHJhIGFyZ3VtZW50cyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdXNpbmcgInNbaTpqXS5pbmRleCh4KSIsXG4gICBvbmx5IHdpdGhvdXQgY29weWluZyBhbnkgZGF0YSBhbmQgd2l0aCB0aGUgcmV0dXJuZWQgaW5kZXggYmVpbmdcbiAgIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VxdWVuY2UgcmF0aGVyIHRoYW4gdGhlIHN0YXJ0IG9mIHRoZVxuICAgc2xpY2UuXG5cblxuSW1tdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9ubHkgb3BlcmF0aW9uIHRoYXQgaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGdlbmVyYWxseSBpbXBsZW1lbnRcbnRoYXQgaXMgbm90IGFsc28gaW1wbGVtZW50ZWQgYnkgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyBpcyBzdXBwb3J0IGZvclxudGhlICJoYXNoKCkiIGJ1aWx0LWluLlxuXG5UaGlzIHN1cHBvcnQgYWxsb3dzIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHN1Y2ggYXMgInR1cGxlIiBpbnN0YW5jZXMsIHRvXG5iZSB1c2VkIGFzICJkaWN0IiBrZXlzIGFuZCBzdG9yZWQgaW4gInNldCIgYW5kICJmcm96ZW5zZXQiIGluc3RhbmNlcy5cblxuQXR0ZW1wdGluZyB0byBoYXNoIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0aGF0IGNvbnRhaW5zIHVuaGFzaGFibGVcbnZhbHVlcyB3aWxsIHJlc3VsdCBpbiAiVHlwZUVycm9yIi5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSAiY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZSIgQUJDIGlzIHByb3ZpZGVkIHRvIG1ha2Vcbml0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlIG9wZXJhdGlvbnMgb24gY3VzdG9tIHNlcXVlbmNlXG50eXBlcy5cblxuSW4gdGhlIHRhYmxlICpzKiBpcyBhbiBpbnN0YW5jZSBvZiBhIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgKnQqIGlzIGFueVxuaXRlcmFibGUgb2JqZWN0IGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZFxudmFsdWUgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqIChmb3IgZXhhbXBsZSwgImJ5dGVhcnJheSIgb25seVxuYWNjZXB0cyBpbnRlZ2VycyB0aGF0IG1lZXQgdGhlIHZhbHVlIHJlc3RyaWN0aW9uICIwIDw9IHggPD0gMjU1IikuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInNbaTpqOmtdID0gdCIgICAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mICJzW2k6ajprXSIgYXJlICAgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5jbGVhcigpIiAgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tICJzIiAoc2FtZSB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY29weSgpIiAgICAgICAgICAgICAgICAgICAgIHwgY3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiAicyIgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5wb3AoW2ldKSIgICAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucmVtb3ZlKHgpIiAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJldmVyc2UoKSIgICAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byAiLTEiLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuICJyZW1vdmUiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlICJyZXZlcnNlKCkiIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yXG4gICBlY29ub215IG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnNcbiAgIHRoYXQgaXQgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWRcbiAgIHNlcXVlbmNlLlxuXG41LiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyAiZGljdCIgYW5kICJzZXQiKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6ICJjbGVhcigpIiBhbmQgImNvcHkoKSIgbWV0aG9kcy5cblxuXG5MaXN0c1xuPT09PT1cblxuTGlzdHMgYXJlIG11dGFibGUgc2VxdWVuY2VzLCB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBjb2xsZWN0aW9ucyBvZlxuaG9tb2dlbmVvdXMgaXRlbXMgKHdoZXJlIHRoZSBwcmVjaXNlIGRlZ3JlZSBvZiBzaW1pbGFyaXR5IHdpbGwgdmFyeSBieVxuYXBwbGljYXRpb24pLlxuXG5jbGFzcyBjbGFzcyBsaXN0KFtpdGVyYWJsZV0pXG5cbiAgIExpc3RzIG1heSBiZSBjb25zdHJ1Y3RlZCBpbiBzZXZlcmFsIHdheXM6XG5cbiAgICogVXNpbmcgYSBwYWlyIG9mIHNxdWFyZSBicmFja2V0cyB0byBkZW5vdGUgdGhlIGVtcHR5IGxpc3Q6ICJbXSJcblxuICAgKiBVc2luZyBzcXVhcmUgYnJhY2tldHMsIHNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6ICJbYV0iLFxuICAgICAiW2EsIGIsIGNdIlxuXG4gICAqIFVzaW5nIGEgbGlzdCBjb21wcmVoZW5zaW9uOiAiW3ggZm9yIHggaW4gaXRlcmFibGVdIlxuXG4gICAqIFVzaW5nIHRoZSB0eXBlIGNvbnN0cnVjdG9yOiAibGlzdCgpIiBvciAibGlzdChpdGVyYWJsZSkiXG5cbiAgIFRoZSBjb25zdHJ1Y3RvciBidWlsZHMgYSBsaXN0IHdob3NlIGl0ZW1zIGFyZSB0aGUgc2FtZSBhbmQgaW4gdGhlXG4gICBzYW1lIG9yZGVyIGFzICppdGVyYWJsZSpcJ3MgaXRlbXMuICAqaXRlcmFibGUqIG1heSBiZSBlaXRoZXIgYVxuICAgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHMgaXRlcmF0aW9uLCBvciBhbiBpdGVyYXRvclxuICAgb2JqZWN0LiAgSWYgKml0ZXJhYmxlKiBpcyBhbHJlYWR5IGEgbGlzdCwgYSBjb3B5IGlzIG1hZGUgYW5kXG4gICByZXR1cm5lZCwgc2ltaWxhciB0byAiaXRlcmFibGVbOl0iLiBGb3IgZXhhbXBsZSwgImxpc3QoXCdhYmNcJykiXG4gICByZXR1cm5zICJbXCdhXCcsIFwnYlwnLCBcJ2NcJ10iIGFuZCAibGlzdCggKDEsIDIsIDMpICkiIHJldHVybnMgIlsxLCAyLFxuICAgM10iLiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXcgZW1wdHlcbiAgIGxpc3QsICJbXSIuXG5cbiAgIE1hbnkgb3RoZXIgb3BlcmF0aW9ucyBhbHNvIHByb2R1Y2UgbGlzdHMsIGluY2x1ZGluZyB0aGUgInNvcnRlZCgpIlxuICAgYnVpbHQtaW4uXG5cbiAgIExpc3RzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIGFuZCAqbXV0YWJsZSogc2VxdWVuY2VcbiAgIG9wZXJhdGlvbnMuIExpc3RzIGFsc28gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbWV0aG9kOlxuXG4gICBzb3J0KCosIGtleT1Ob25lLCByZXZlcnNlPU5vbmUpXG5cbiAgICAgIFRoaXMgbWV0aG9kIHNvcnRzIHRoZSBsaXN0IGluIHBsYWNlLCB1c2luZyBvbmx5ICI8IiBjb21wYXJpc29uc1xuICAgICAgYmV0d2VlbiBpdGVtcy4gRXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgLSBpZiBhbnkgY29tcGFyaXNvblxuICAgICAgb3BlcmF0aW9ucyBmYWlsLCB0aGUgZW50aXJlIHNvcnQgb3BlcmF0aW9uIHdpbGwgZmFpbCAoYW5kIHRoZVxuICAgICAgbGlzdCB3aWxsIGxpa2VseSBiZSBsZWZ0IGluIGEgcGFydGlhbGx5IG1vZGlmaWVkIHN0YXRlKS5cblxuICAgICAgInNvcnQoKSIgYWNjZXB0cyB0d28gYXJndW1lbnRzIHRoYXQgY2FuIG9ubHkgYmUgcGFzc2VkIGJ5XG4gICAgICBrZXl3b3JkICgqa2V5d29yZC1vbmx5IGFyZ3VtZW50cyopOlxuXG4gICAgICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvXG4gICAgICBleHRyYWN0IGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudCAoZm9yIGV4YW1wbGUsXG4gICAgICAia2V5PXN0ci5sb3dlciIpLiBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBpdGVtIGluIHRoZSBsaXN0XG4gICAgICBpcyBjYWxjdWxhdGVkIG9uY2UgYW5kIHRoZW4gdXNlZCBmb3IgdGhlIGVudGlyZSBzb3J0aW5nIHByb2Nlc3MuXG4gICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAiTm9uZSIgbWVhbnMgdGhhdCBsaXN0IGl0ZW1zIGFyZSBzb3J0ZWRcbiAgICAgIGRpcmVjdGx5IHdpdGhvdXQgY2FsY3VsYXRpbmcgYSBzZXBhcmF0ZSBrZXkgdmFsdWUuXG5cbiAgICAgIFRoZSAiZnVuY3Rvb2xzLmNtcF90b19rZXkoKSIgdXRpbGl0eSBpcyBhdmFpbGFibGUgdG8gY29udmVydCBhXG4gICAgICAyLnggc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KiBmdW5jdGlvbi5cblxuICAgICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byAiVHJ1ZSIsIHRoZW4gdGhlIGxpc3RcbiAgICAgIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuXG5cbiAgICAgIFRoaXMgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3IgZWNvbm9teSBvZiBzcGFjZVxuICAgICAgd2hlbiBzb3J0aW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdCBvcGVyYXRlc1xuICAgICAgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgc29ydGVkIHNlcXVlbmNlICh1c2VcbiAgICAgICJzb3J0ZWQoKSIgdG8gZXhwbGljaXRseSByZXF1ZXN0IGEgbmV3IHNvcnRlZCBsaXN0IGluc3RhbmNlKS5cblxuICAgICAgVGhlICJzb3J0KCkiIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZS4gIEEgc29ydCBpc1xuICAgICAgc3RhYmxlIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGUgcmVsYXRpdmUgb3JkZXIgb2ZcbiAgICAgIGVsZW1lbnRzIHRoYXQgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsIGZvciBzb3J0aW5nIGluXG4gICAgICBtdWx0aXBsZSBwYXNzZXMgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsIHRoZW4gYnkgc2FsYXJ5XG4gICAgICBncmFkZSkuXG5cbiAgICAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogV2hpbGUgYSBsaXN0IGlzIGJlaW5nIHNvcnRlZCxcbiAgICAgIHRoZSBlZmZlY3Qgb2YgYXR0ZW1wdGluZyB0byBtdXRhdGUsIG9yIGV2ZW4gaW5zcGVjdCwgdGhlIGxpc3QgaXNcbiAgICAgIHVuZGVmaW5lZC4gIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiBtYWtlcyB0aGUgbGlzdCBhcHBlYXJcbiAgICAgIGVtcHR5IGZvciB0aGUgZHVyYXRpb24sIGFuZCByYWlzZXMgIlZhbHVlRXJyb3IiIGlmIGl0IGNhbiBkZXRlY3RcbiAgICAgIHRoYXQgdGhlIGxpc3QgaGFzIGJlZW4gbXV0YXRlZCBkdXJpbmcgYSBzb3J0LlxuXG5cblR1cGxlc1xuPT09PT09XG5cblR1cGxlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlcywgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgY29sbGVjdGlvbnMgb2ZcbmhldGVyb2dlbmVvdXMgZGF0YSAoc3VjaCBhcyB0aGUgMi10dXBsZXMgcHJvZHVjZWQgYnkgdGhlICJlbnVtZXJhdGUoKSJcbmJ1aWx0LWluKS4gVHVwbGVzIGFyZSBhbHNvIHVzZWQgZm9yIGNhc2VzIHdoZXJlIGFuIGltbXV0YWJsZSBzZXF1ZW5jZVxub2YgaG9tb2dlbmVvdXMgZGF0YSBpcyBuZWVkZWQgKHN1Y2ggYXMgYWxsb3dpbmcgc3RvcmFnZSBpbiBhICJzZXQiIG9yXG4iZGljdCIgaW5zdGFuY2UpLlxuXG5jbGFzcyBjbGFzcyB0dXBsZShbaXRlcmFibGVdKVxuXG4gICBUdXBsZXMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIGEgbnVtYmVyIG9mIHdheXM6XG5cbiAgICogVXNpbmcgYSBwYWlyIG9mIHBhcmVudGhlc2VzIHRvIGRlbm90ZSB0aGUgZW1wdHkgdHVwbGU6ICIoKSJcblxuICAgKiBVc2luZyBhIHRyYWlsaW5nIGNvbW1hIGZvciBhIHNpbmdsZXRvbiB0dXBsZTogImEsIiBvciAiKGEsKSJcblxuICAgKiBTZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiAiYSwgYiwgYyIgb3IgIihhLCBiLCBjKSJcblxuICAgKiBVc2luZyB0aGUgInR1cGxlKCkiIGJ1aWx0LWluOiAidHVwbGUoKSIgb3IgInR1cGxlKGl0ZXJhYmxlKSJcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIHR1cGxlIHdob3NlIGl0ZW1zIGFyZSB0aGUgc2FtZSBhbmQgaW4gdGhlXG4gICBzYW1lIG9yZGVyIGFzICppdGVyYWJsZSpcJ3MgaXRlbXMuICAqaXRlcmFibGUqIG1heSBiZSBlaXRoZXIgYVxuICAgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHMgaXRlcmF0aW9uLCBvciBhbiBpdGVyYXRvclxuICAgb2JqZWN0LiAgSWYgKml0ZXJhYmxlKiBpcyBhbHJlYWR5IGEgdHVwbGUsIGl0IGlzIHJldHVybmVkXG4gICB1bmNoYW5nZWQuIEZvciBleGFtcGxlLCAidHVwbGUoXCdhYmNcJykiIHJldHVybnMgIihcJ2FcJywgXCdiXCcsIFwnY1wnKSJcbiAgIGFuZCAidHVwbGUoIFsxLCAyLCAzXSApIiByZXR1cm5zICIoMSwgMiwgMykiLiBJZiBubyBhcmd1bWVudCBpc1xuICAgZ2l2ZW4sIHRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgbmV3IGVtcHR5IHR1cGxlLCAiKCkiLlxuXG4gICBOb3RlIHRoYXQgaXQgaXMgYWN0dWFsbHkgdGhlIGNvbW1hIHdoaWNoIG1ha2VzIGEgdHVwbGUsIG5vdCB0aGVcbiAgIHBhcmVudGhlc2VzLiBUaGUgcGFyZW50aGVzZXMgYXJlIG9wdGlvbmFsLCBleGNlcHQgaW4gdGhlIGVtcHR5XG4gICB0dXBsZSBjYXNlLCBvciB3aGVuIHRoZXkgYXJlIG5lZWRlZCB0byBhdm9pZCBzeW50YWN0aWMgYW1iaWd1aXR5LlxuICAgRm9yIGV4YW1wbGUsICJmKGEsIGIsIGMpIiBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCB0aHJlZSBhcmd1bWVudHMsXG4gICB3aGlsZSAiZigoYSwgYiwgYykpIiBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCBhIDMtdHVwbGUgYXMgdGhlIHNvbGVcbiAgIGFyZ3VtZW50LlxuXG4gICBUdXBsZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucy5cblxuRm9yIGhldGVyb2dlbmVvdXMgY29sbGVjdGlvbnMgb2YgZGF0YSB3aGVyZSBhY2Nlc3MgYnkgbmFtZSBpcyBjbGVhcmVyXG50aGFuIGFjY2VzcyBieSBpbmRleCwgImNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoKSIgbWF5IGJlIGEgbW9yZVxuYXBwcm9wcmlhdGUgY2hvaWNlIHRoYW4gYSBzaW1wbGUgdHVwbGUgb2JqZWN0LlxuXG5cblJhbmdlc1xuPT09PT09XG5cblRoZSAicmFuZ2UiIHR5cGUgcmVwcmVzZW50cyBhbiBpbW11dGFibGUgc2VxdWVuY2Ugb2YgbnVtYmVycyBhbmQgaXNcbmNvbW1vbmx5IHVzZWQgZm9yIGxvb3BpbmcgYSBzcGVjaWZpYyBudW1iZXIgb2YgdGltZXMgaW4gImZvciIgbG9vcHMuXG5cbmNsYXNzIGNsYXNzIHJhbmdlKHN0b3ApXG5jbGFzcyBjbGFzcyByYW5nZShzdGFydCwgc3RvcFssIHN0ZXBdKVxuXG4gICBUaGUgYXJndW1lbnRzIHRvIHRoZSByYW5nZSBjb25zdHJ1Y3RvciBtdXN0IGJlIGludGVnZXJzIChlaXRoZXJcbiAgIGJ1aWx0LWluICJpbnQiIG9yIGFueSBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSAiX19pbmRleF9fIlxuICAgc3BlY2lhbCBtZXRob2QpLiAgSWYgdGhlICpzdGVwKiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0b1xuICAgIjEiLiBJZiB0aGUgKnN0YXJ0KiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAiMCIuIElmXG4gICAqc3RlcCogaXMgemVybywgIlZhbHVlRXJyb3IiIGlzIHJhaXNlZC5cblxuICAgRm9yIGEgcG9zaXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgYSByYW5nZSAiciIgYXJlIGRldGVybWluZWRcbiAgIGJ5IHRoZSBmb3JtdWxhICJyW2ldID0gc3RhcnQgKyBzdGVwKmkiIHdoZXJlICJpID49IDAiIGFuZCAicltpXSA8XG4gICBzdG9wIi5cblxuICAgRm9yIGEgbmVnYXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgdGhlIHJhbmdlIGFyZSBzdGlsbFxuICAgZGV0ZXJtaW5lZCBieSB0aGUgZm9ybXVsYSAicltpXSA9IHN0YXJ0ICsgc3RlcCppIiwgYnV0IHRoZVxuICAgY29uc3RyYWludHMgYXJlICJpID49IDAiIGFuZCAicltpXSA+IHN0b3AiLlxuXG4gICBBIHJhbmdlIG9iamVjdCB3aWxsIGJlIGVtcHR5IGlmICJyWzBdIiBkb2VzIG5vdCBtZWV0IHRoZSB2YWx1ZVxuICAgY29uc3RyYWludC4gUmFuZ2VzIGRvIHN1cHBvcnQgbmVnYXRpdmUgaW5kaWNlcywgYnV0IHRoZXNlIGFyZVxuICAgaW50ZXJwcmV0ZWQgYXMgaW5kZXhpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSBkZXRlcm1pbmVkIGJ5XG4gICB0aGUgcG9zaXRpdmUgaW5kaWNlcy5cblxuICAgUmFuZ2VzIGNvbnRhaW5pbmcgYWJzb2x1dGUgdmFsdWVzIGxhcmdlciB0aGFuICJzeXMubWF4c2l6ZSIgYXJlXG4gICBwZXJtaXR0ZWQgYnV0IHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgImxlbigpIikgbWF5IHJhaXNlXG4gICAiT3ZlcmZsb3dFcnJvciIuXG5cbiAgIFJhbmdlIGV4YW1wbGVzOlxuXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxMCkpXG4gICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEsIDExKSlcbiAgICAgIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIDMwLCA1KSlcbiAgICAgIFswLCA1LCAxMCwgMTUsIDIwLCAyNV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIDEwLCAzKSlcbiAgICAgIFswLCAzLCA2LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgLTEwLCAtMSkpXG4gICAgICBbMCwgLTEsIC0yLCAtMywgLTQsIC01LCAtNiwgLTcsIC04LCAtOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDApKVxuICAgICAgW11cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEsIDApKVxuICAgICAgW11cblxuICAgUmFuZ2VzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMgZXhjZXB0XG4gICBjb25jYXRlbmF0aW9uIGFuZCByZXBldGl0aW9uIChkdWUgdG8gdGhlIGZhY3QgdGhhdCByYW5nZSBvYmplY3RzXG4gICBjYW4gb25seSByZXByZXNlbnQgc2VxdWVuY2VzIHRoYXQgZm9sbG93IGEgc3RyaWN0IHBhdHRlcm4gYW5kXG4gICByZXBldGl0aW9uIGFuZCBjb25jYXRlbmF0aW9uIHdpbGwgdXN1YWxseSB2aW9sYXRlIHRoYXQgcGF0dGVybikuXG5cblRoZSBhZHZhbnRhZ2Ugb2YgdGhlICJyYW5nZSIgdHlwZSBvdmVyIGEgcmVndWxhciAibGlzdCIgb3IgInR1cGxlIiBpc1xudGhhdCBhICJyYW5nZSIgb2JqZWN0IHdpbGwgYWx3YXlzIHRha2UgdGhlIHNhbWUgKHNtYWxsKSBhbW91bnQgb2Zcbm1lbW9yeSwgbm8gbWF0dGVyIHRoZSBzaXplIG9mIHRoZSByYW5nZSBpdCByZXByZXNlbnRzIChhcyBpdCBvbmx5XG5zdG9yZXMgdGhlICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiIHZhbHVlcywgY2FsY3VsYXRpbmcgaW5kaXZpZHVhbFxuaXRlbXMgYW5kIHN1YnJhbmdlcyBhcyBuZWVkZWQpLlxuXG5SYW5nZSBvYmplY3RzIGltcGxlbWVudCB0aGUgImNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZSIgQUJDLCBhbmRcbnByb3ZpZGUgZmVhdHVyZXMgc3VjaCBhcyBjb250YWlubWVudCB0ZXN0cywgZWxlbWVudCBpbmRleCBsb29rdXAsXG5zbGljaW5nIGFuZCBzdXBwb3J0IGZvciBuZWdhdGl2ZSBpbmRpY2VzIChzZWUgKlNlcXVlbmNlIFR5cGVzIC0tLVxubGlzdCwgdHVwbGUsIHJhbmdlKik6XG5cbj4+PiByID0gcmFuZ2UoMCwgMjAsIDIpXG4+Pj4gclxucmFuZ2UoMCwgMjAsIDIpXG4+Pj4gMTEgaW4gclxuRmFsc2Vcbj4+PiAxMCBpbiByXG5UcnVlXG4+Pj4gci5pbmRleCgxMClcbjVcbj4+PiByWzVdXG4xMFxuPj4+IHJbOjVdXG5yYW5nZSgwLCAxMCwgMilcbj4+PiByWy0xXVxuMThcblxuVGVzdGluZyByYW5nZSBvYmplY3RzIGZvciBlcXVhbGl0eSB3aXRoICI9PSIgYW5kICIhPSIgY29tcGFyZXMgdGhlbSBhc1xuc2VxdWVuY2VzLiAgVGhhdCBpcywgdHdvIHJhbmdlIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1YWwgaWYgdGhleVxucmVwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcy4gIChOb3RlIHRoYXQgdHdvIHJhbmdlIG9iamVjdHNcbnRoYXQgY29tcGFyZSBlcXVhbCBtaWdodCBoYXZlIGRpZmZlcmVudCAic3RhcnQiLCAic3RvcCIgYW5kICJzdGVwIlxuYXR0cmlidXRlcywgZm9yIGV4YW1wbGUgInJhbmdlKDApID09IHJhbmdlKDIsIDEsIDMpIiBvciAicmFuZ2UoMCwgMyxcbjIpID09IHJhbmdlKDAsIDQsIDIpIi4pXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IEltcGxlbWVudCB0aGUgU2VxdWVuY2UgQUJDLiBTdXBwb3J0IHNsaWNpbmdcbmFuZCBuZWdhdGl2ZSBpbmRpY2VzLiBUZXN0ICJpbnQiIG9iamVjdHMgZm9yIG1lbWJlcnNoaXAgaW4gY29uc3RhbnRcbnRpbWUgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgaXRlbXMuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IERlZmluZSBcJz09XCcgYW5kIFwnIT1cJyB0byBjb21wYXJlIHJhbmdlIG9iamVjdHNcbmJhc2VkIG9uIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nXG5iYXNlZCBvbiBvYmplY3QgaWRlbnRpdHkpLlxuXG5OZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSAic3RhcnQiLCAic3RvcCIgYW5kICJzdGVwIiBhdHRyaWJ1dGVzLlxuJywKLSAndHlwZXNzZXEtbXV0YWJsZSc6ICdcbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcy4gVGhlICJjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZVNlcXVlbmNlIiBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCAiYnl0ZWFycmF5IiBvbmx5XG5hY2NlcHRzIGludGVnZXJzIHRoYXQgbWVldCB0aGUgdmFsdWUgcmVzdHJpY3Rpb24gIjAgPD0geCA8PSAyNTUiKS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAic1tpOmo6a10gPSB0IiAgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgInNbaTpqOmtdIiBhcmUgICB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNsZWFyKCkiICAgICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gInMiIChzYW1lIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5jb3B5KCkiICAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mICJzIiAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnBvcChbaV0pIiAgICAgICAgICAgICAgICAgICB8IHJldHJpZXZlcyB0aGUgaXRlbSBhdCAqaSogYW5kICAgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZW1vdmUoeCkiICAgICAgICAgICAgICAgICAgfCByZW1vdmUgdGhlIGZpcnN0IGl0ZW0gZnJvbSAqcyogICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucmV2ZXJzZSgpIiAgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgcmVwbGFjaW5nLlxuXG4yLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvICItMSIsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuMy4gInJlbW92ZSIgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLlxuXG40LiBUaGUgInJldmVyc2UoKSIgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3JcbiAgIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiByZXZlcnNpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2Vyc1xuICAgdGhhdCBpdCBvcGVyYXRlcyBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSByZXZlcnNlZFxuICAgc2VxdWVuY2UuXG5cbjUuICJjbGVhcigpIiBhbmQgImNvcHkoKSIgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzICJkaWN0IiBhbmQgInNldCIpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogImNsZWFyKCkiIGFuZCAiY29weSgpIiBtZXRob2RzLlxuJywKKyAndHlwZXNzZXEnOiAnXG5TZXF1ZW5jZSBUeXBlcyAtLS0gImxpc3QiLCAidHVwbGUiLCAicmFuZ2UiXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSBiYXNpYyBzZXF1ZW5jZSB0eXBlczogbGlzdHMsIHR1cGxlcywgYW5kIHJhbmdlXG5vYmplY3RzLiBBZGRpdGlvbmFsIHNlcXVlbmNlIHR5cGVzIHRhaWxvcmVkIGZvciBwcm9jZXNzaW5nIG9mICpiaW5hcnlcbmRhdGEqIGFuZCAqdGV4dCBzdHJpbmdzKiBhcmUgZGVzY3JpYmVkIGluIGRlZGljYXRlZCBzZWN0aW9ucy5cblxuXG5Db21tb24gU2VxdWVuY2UgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgc3VwcG9ydGVkIGJ5IG1vc3Qgc2VxdWVuY2VcbnR5cGVzLCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZS4gVGhlICJjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UiIEFCQ1xuaXMgcHJvdmlkZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zXG5vbiBjdXN0b20gc2VxdWVuY2UgdHlwZXMuXG5cblRoaXMgdGFibGUgbGlzdHMgdGhlIHNlcXVlbmNlIG9wZXJhdGlvbnMgc29ydGVkIGluIGFzY2VuZGluZyBwcmlvcml0eVxuKG9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkpLiAgSW4gdGhlIHRhYmxlLFxuKnMqIGFuZCAqdCogYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCAqbiosICppKiwgKmoqIGFuZCAqayogYXJlXG5pbnRlZ2VycyBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmQgdmFsdWVcbnJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKi5cblxuVGhlICJpbiIgYW5kICJub3QgaW4iIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZVxuY29tcGFyaXNvbiBvcGVyYXRpb25zLiBUaGUgIisiIChjb25jYXRlbmF0aW9uKSBhbmQgIioiIChyZXBldGl0aW9uKVxub3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoZSBjb3JyZXNwb25kaW5nIG51bWVyaWNcbm9wZXJhdGlvbnMuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PStcbnwgInggaW4gcyIgICAgICAgICAgICAgICAgICAgfCAiVHJ1ZSIgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgICB8ICgxKSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJ4IG5vdCBpbiBzIiAgICAgICAgICAgICAgIHwgIkZhbHNlIiBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICAgfCAoMSkgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicyArIHQiICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb25jYXRlbmF0aW9uIG9mICpzKiBhbmQgKnQqIHwgKDYpKDcpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMgKiBuIiBvciAibiAqIHMiICAgICAgICAgfCAqbiogc2hhbGxvdyBjb3BpZXMgb2YgKnMqICAgICAgICB8ICgyKSg3KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzW2ldIiAgICAgICAgICAgICAgICAgICAgIHwgKmkqdGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICAgICAgfCAoMykgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAic1tpOmpdIiAgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDQpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInNbaTpqOmtdIiAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg1KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzLmluZGV4KHhbLCBpWywgal1dKSIgICAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgfCAoOCkgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG5cblNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlIGFsc28gc3VwcG9ydCBjb21wYXJpc29ucy4gIEluIHBhcnRpY3VsYXIsXG50dXBsZXMgYW5kIGxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSBieSBjb21wYXJpbmdcbmNvcnJlc3BvbmRpbmcgZWxlbWVudHMuIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBldmVyeVxuZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbnR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiAgKEZvciBmdWxsIGRldGFpbHMgc2VlICpDb21wYXJpc29ucyogaW5cbnRoZSBsYW5ndWFnZSByZWZlcmVuY2UuKVxuXG5Ob3RlczpcblxuMS4gV2hpbGUgdGhlICJpbiIgYW5kICJub3QgaW4iIG9wZXJhdGlvbnMgYXJlIHVzZWQgb25seSBmb3Igc2ltcGxlXG4gICBjb250YWlubWVudCB0ZXN0aW5nIGluIHRoZSBnZW5lcmFsIGNhc2UsIHNvbWUgc3BlY2lhbGlzZWQgc2VxdWVuY2VzXG4gICAoc3VjaCBhcyAic3RyIiwgImJ5dGVzIiBhbmQgImJ5dGVhcnJheSIpIGFsc28gdXNlIHRoZW0gZm9yXG4gICBzdWJzZXF1ZW5jZSB0ZXN0aW5nOlxuXG4gICAgICA+Pj4gImdnIiBpbiAiZWdncyJcbiAgICAgIFRydWVcblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gIjAiIGFyZSB0cmVhdGVkIGFzICIwIiAod2hpY2ggeWllbGRzIGFuXG4gICBlbXB0eSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzKikuICBOb3RlIGFsc28gdGhhdCB0aGUgY29waWVzXG4gICBhcmUgc2hhbGxvdzsgbmVzdGVkIHN0cnVjdHVyZXMgYXJlIG5vdCBjb3BpZWQuICBUaGlzIG9mdGVuIGhhdW50c1xuICAgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsgY29uc2lkZXI6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXV0gKiAzXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbXSwgW10sIFtdXVxuICAgICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgICAgPj4+IGxpc3RzXG4gICAgICBbWzNdLCBbM10sIFszXV1cblxuICAgV2hhdCBoYXMgaGFwcGVuZWQgaXMgdGhhdCAiW1tdXSIgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiAiW1tdXSAqIDMiIGFyZSAocG9pbnRlcnNcbiAgIHRvKSB0aGlzIHNpbmdsZSBlbXB0eSBsaXN0LiAgTW9kaWZ5aW5nIGFueSBvZiB0aGUgZWxlbWVudHMgb2ZcbiAgICJsaXN0cyIgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4gWW91IGNhbiBjcmVhdGUgYSBsaXN0IG9mXG4gICBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXSBmb3IgaSBpbiByYW5nZSgzKV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1sxXS5hcHBlbmQoNSlcbiAgICAgID4+PiBsaXN0c1syXS5hcHBlbmQoNylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzVdLCBbN11dXG5cbjMuIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZVxuICAgc3RyaW5nOiAibGVuKHMpICsgaSIgb3IgImxlbihzKSArIGoiIGlzIHN1YnN0aXR1dGVkLiAgQnV0IG5vdGUgdGhhdFxuICAgIi0wIiBpcyBzdGlsbCAiMCIuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgImkgPD0gayA8IGoiLiAgSWYgKmkqIG9yICpqKiBpc1xuICAgZ3JlYXRlciB0aGFuICJsZW4ocykiLCB1c2UgImxlbihzKSIuICBJZiAqaSogaXMgb21pdHRlZCBvciAiTm9uZSIsXG4gICB1c2UgIjAiLiAgSWYgKmoqIGlzIG9taXR0ZWQgb3IgIk5vbmUiLCB1c2UgImxlbihzKSIuICBJZiAqaSogaXNcbiAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAqaiosIHRoZSBzbGljZSBpcyBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgInggPSBpICsgbiprIiBzdWNoIHRoYXQgIjAgPD0gbiA8XG4gICAoai1pKS9rIi4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW5kaWNlcyBhcmUgImkiLCAiaStrIiwgImkrMiprIixcbiAgICJpKzMqayIgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXQgbmV2ZXJcbiAgIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gImxlbihzKSIsIHVzZVxuICAgImxlbihzKSIuICBJZiAqaSogb3IgKmoqIGFyZSBvbWl0dGVkIG9yICJOb25lIiwgdGhleSBiZWNvbWUgImVuZCJcbiAgIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKiBjYW5ub3QgYmVcbiAgIHplcm8uIElmICprKiBpcyAiTm9uZSIsIGl0IGlzIHRyZWF0ZWQgbGlrZSAiMSIuXG5cbjYuIENvbmNhdGVuYXRpbmcgaW1tdXRhYmxlIHNlcXVlbmNlcyBhbHdheXMgcmVzdWx0cyBpbiBhIG5ldyBvYmplY3QuXG4gICBUaGlzIG1lYW5zIHRoYXQgYnVpbGRpbmcgdXAgYSBzZXF1ZW5jZSBieSByZXBlYXRlZCBjb25jYXRlbmF0aW9uXG4gICB3aWxsIGhhdmUgYSBxdWFkcmF0aWMgcnVudGltZSBjb3N0IGluIHRoZSB0b3RhbCBzZXF1ZW5jZSBsZW5ndGguXG4gICBUbyBnZXQgYSBsaW5lYXIgcnVudGltZSBjb3N0LCB5b3UgbXVzdCBzd2l0Y2ggdG8gb25lIG9mIHRoZVxuICAgYWx0ZXJuYXRpdmVzIGJlbG93OlxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgInN0ciIgb2JqZWN0cywgeW91IGNhbiBidWlsZCBhIGxpc3QgYW5kIHVzZVxuICAgICAic3RyLmpvaW4oKSIgYXQgdGhlIGVuZCBvciBlbHNlIHdyaXRlIHRvIGEgImlvLlN0cmluZ0lPIiBpbnN0YW5jZVxuICAgICBhbmQgcmV0cmlldmUgaXRzIHZhbHVlIHdoZW4gY29tcGxldGVcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nICJieXRlcyIgb2JqZWN0cywgeW91IGNhbiBzaW1pbGFybHkgdXNlXG4gICAgICJieXRlcy5qb2luKCkiIG9yICJpby5CeXRlc0lPIiwgb3IgeW91IGNhbiBkbyBpbi1wbGFjZVxuICAgICBjb25jYXRlbmF0aW9uIHdpdGggYSAiYnl0ZWFycmF5IiBvYmplY3QuICAiYnl0ZWFycmF5IiBvYmplY3RzIGFyZVxuICAgICBtdXRhYmxlIGFuZCBoYXZlIGFuIGVmZmljaWVudCBvdmVyYWxsb2NhdGlvbiBtZWNoYW5pc21cblxuICAgKiBpZiBjb25jYXRlbmF0aW5nICJ0dXBsZSIgb2JqZWN0cywgZXh0ZW5kIGEgImxpc3QiIGluc3RlYWRcblxuICAgKiBmb3Igb3RoZXIgdHlwZXMsIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBjbGFzcyBkb2N1bWVudGF0aW9uXG5cbjcuIFNvbWUgc2VxdWVuY2UgdHlwZXMgKHN1Y2ggYXMgInJhbmdlIikgb25seSBzdXBwb3J0IGl0ZW0gc2VxdWVuY2VzXG4gICB0aGF0IGZvbGxvdyBzcGVjaWZpYyBwYXR0ZXJucywgYW5kIGhlbmNlIGRvblwndCBzdXBwb3J0IHNlcXVlbmNlXG4gICBjb25jYXRlbmF0aW9uIG9yIHJlcGV0aXRpb24uXG5cbjguICJpbmRleCIgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuXG4gICBzdXBwb3J0ZWQsIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgaW5kZXggbWV0aG9kIGFsbG93XG4gICBlZmZpY2llbnQgc2VhcmNoaW5nIG9mIHN1YnNlY3Rpb25zIG9mIHRoZSBzZXF1ZW5jZS4gUGFzc2luZyB0aGVcbiAgIGV4dHJhIGFyZ3VtZW50cyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdXNpbmcgInNbaTpqXS5pbmRleCh4KSIsXG4gICBvbmx5IHdpdGhvdXQgY29weWluZyBhbnkgZGF0YSBhbmQgd2l0aCB0aGUgcmV0dXJuZWQgaW5kZXggYmVpbmdcbiAgIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VxdWVuY2UgcmF0aGVyIHRoYW4gdGhlIHN0YXJ0IG9mIHRoZVxuICAgc2xpY2UuXG5cblxuSW1tdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9ubHkgb3BlcmF0aW9uIHRoYXQgaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGdlbmVyYWxseSBpbXBsZW1lbnRcbnRoYXQgaXMgbm90IGFsc28gaW1wbGVtZW50ZWQgYnkgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyBpcyBzdXBwb3J0IGZvclxudGhlICJoYXNoKCkiIGJ1aWx0LWluLlxuXG5UaGlzIHN1cHBvcnQgYWxsb3dzIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHN1Y2ggYXMgInR1cGxlIiBpbnN0YW5jZXMsIHRvXG5iZSB1c2VkIGFzICJkaWN0IiBrZXlzIGFuZCBzdG9yZWQgaW4gInNldCIgYW5kICJmcm96ZW5zZXQiIGluc3RhbmNlcy5cblxuQXR0ZW1wdGluZyB0byBoYXNoIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0aGF0IGNvbnRhaW5zIHVuaGFzaGFibGVcbnZhbHVlcyB3aWxsIHJlc3VsdCBpbiAiVHlwZUVycm9yIi5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSAiY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZSIgQUJDIGlzIHByb3ZpZGVkIHRvIG1ha2Vcbml0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlIG9wZXJhdGlvbnMgb24gY3VzdG9tIHNlcXVlbmNlXG50eXBlcy5cblxuSW4gdGhlIHRhYmxlICpzKiBpcyBhbiBpbnN0YW5jZSBvZiBhIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgKnQqIGlzIGFueVxuaXRlcmFibGUgb2JqZWN0IGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZFxudmFsdWUgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqIChmb3IgZXhhbXBsZSwgImJ5dGVhcnJheSIgb25seVxuYWNjZXB0cyBpbnRlZ2VycyB0aGF0IG1lZXQgdGhlIHZhbHVlIHJlc3RyaWN0aW9uICIwIDw9IHggPD0gMjU1IikuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInNbaTpqOmtdID0gdCIgICAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mICJzW2k6ajprXSIgYXJlICAgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5jbGVhcigpIiAgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tICJzIiAoc2FtZSB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY29weSgpIiAgICAgICAgICAgICAgICAgICAgIHwgY3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiAicyIgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5wb3AoW2ldKSIgICAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucmVtb3ZlKHgpIiAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJldmVyc2UoKSIgICAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byAiLTEiLCBzbyB0aGF0IGJ5IGRlZmF1bHQgdGhlXG4gICBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuICJyZW1vdmUiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlICJyZXZlcnNlKCkiIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXlcbiAgIG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdFxuICAgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWQgc2VxdWVuY2UuXG5cbjUuICJjbGVhcigpIiBhbmQgImNvcHkoKSIgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzICJkaWN0IiBhbmQgInNldCIpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogImNsZWFyKCkiIGFuZCAiY29weSgpIiBtZXRob2RzLlxuXG5cbkxpc3RzXG49PT09PVxuXG5MaXN0cyBhcmUgbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5ob21vZ2VuZW91cyBpdGVtcyAod2hlcmUgdGhlIHByZWNpc2UgZGVncmVlIG9mIHNpbWlsYXJpdHkgd2lsbCB2YXJ5IGJ5XG5hcHBsaWNhdGlvbikuXG5cbmNsYXNzIGNsYXNzIGxpc3QoW2l0ZXJhYmxlXSlcblxuICAgTGlzdHMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIHNldmVyYWwgd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2Ygc3F1YXJlIGJyYWNrZXRzIHRvIGRlbm90ZSB0aGUgZW1wdHkgbGlzdDogIltdIlxuXG4gICAqIFVzaW5nIHNxdWFyZSBicmFja2V0cywgc2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogIlthXSIsICJbYSxcbiAgICAgYiwgY10iXG5cbiAgICogVXNpbmcgYSBsaXN0IGNvbXByZWhlbnNpb246ICJbeCBmb3IgeCBpbiBpdGVyYWJsZV0iXG5cbiAgICogVXNpbmcgdGhlIHR5cGUgY29uc3RydWN0b3I6ICJsaXN0KCkiIG9yICJsaXN0KGl0ZXJhYmxlKSJcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIGxpc3Qgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSBsaXN0LCBhIGNvcHkgaXMgbWFkZSBhbmRcbiAgIHJldHVybmVkLCBzaW1pbGFyIHRvICJpdGVyYWJsZVs6XSIuIEZvciBleGFtcGxlLCAibGlzdChcJ2FiY1wnKSJcbiAgIHJldHVybnMgIltcJ2FcJywgXCdiXCcsIFwnY1wnXSIgYW5kICJsaXN0KCAoMSwgMiwgMykgKSIgcmV0dXJucyAiWzEsIDIsXG4gICAzXSIuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eVxuICAgbGlzdCwgIltdIi5cblxuICAgTWFueSBvdGhlciBvcGVyYXRpb25zIGFsc28gcHJvZHVjZSBsaXN0cywgaW5jbHVkaW5nIHRoZSAic29ydGVkKCkiXG4gICBidWlsdC1pbi5cblxuICAgTGlzdHMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogYW5kICptdXRhYmxlKiBzZXF1ZW5jZVxuICAgb3BlcmF0aW9ucy4gTGlzdHMgYWxzbyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBtZXRob2Q6XG5cbiAgIHNvcnQoKiwga2V5PU5vbmUsIHJldmVyc2U9Tm9uZSlcblxuICAgICAgVGhpcyBtZXRob2Qgc29ydHMgdGhlIGxpc3QgaW4gcGxhY2UsIHVzaW5nIG9ubHkgIjwiIGNvbXBhcmlzb25zXG4gICAgICBiZXR3ZWVuIGl0ZW1zLiBFeGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCAtIGlmIGFueSBjb21wYXJpc29uXG4gICAgICBvcGVyYXRpb25zIGZhaWwsIHRoZSBlbnRpcmUgc29ydCBvcGVyYXRpb24gd2lsbCBmYWlsIChhbmQgdGhlXG4gICAgICBsaXN0IHdpbGwgbGlrZWx5IGJlIGxlZnQgaW4gYSBwYXJ0aWFsbHkgbW9kaWZpZWQgc3RhdGUpLlxuXG4gICAgICAic29ydCgpIiBhY2NlcHRzIHR3byBhcmd1bWVudHMgdGhhdCBjYW4gb25seSBiZSBwYXNzZWQgYnlcbiAgICAgIGtleXdvcmQgKCprZXl3b3JkLW9ubHkgYXJndW1lbnRzKik6XG5cbiAgICAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG9cbiAgICAgIGV4dHJhY3QgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50IChmb3IgZXhhbXBsZSxcbiAgICAgICJrZXk9c3RyLmxvd2VyIikuIFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byBlYWNoIGl0ZW0gaW4gdGhlIGxpc3RcbiAgICAgIGlzIGNhbGN1bGF0ZWQgb25jZSBhbmQgdGhlbiB1c2VkIGZvciB0aGUgZW50aXJlIHNvcnRpbmcgcHJvY2Vzcy5cbiAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mICJOb25lIiBtZWFucyB0aGF0IGxpc3QgaXRlbXMgYXJlIHNvcnRlZFxuICAgICAgZGlyZWN0bHkgd2l0aG91dCBjYWxjdWxhdGluZyBhIHNlcGFyYXRlIGtleSB2YWx1ZS5cblxuICAgICAgVGhlICJmdW5jdG9vbHMuY21wX3RvX2tleSgpIiB1dGlsaXR5IGlzIGF2YWlsYWJsZSB0byBjb252ZXJ0IGFcbiAgICAgIDIueCBzdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLlxuXG4gICAgICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvICJUcnVlIiwgdGhlbiB0aGUgbGlzdFxuICAgICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgICAgVGhpcyBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvciBlY29ub215IG9mIHNwYWNlXG4gICAgICB3aGVuIHNvcnRpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0IG9wZXJhdGVzXG4gICAgICBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBzb3J0ZWQgc2VxdWVuY2UgKHVzZVxuICAgICAgInNvcnRlZCgpIiB0byBleHBsaWNpdGx5IHJlcXVlc3QgYSBuZXcgc29ydGVkIGxpc3QgaW5zdGFuY2UpLlxuXG4gICAgICBUaGUgInNvcnQoKSIgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzXG4gICAgICBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZlxuICAgICAgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW5cbiAgICAgIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnlcbiAgICAgIGdyYWRlKS5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyAiVmFsdWVFcnJvciIgaWYgaXQgY2FuIGRldGVjdFxuICAgICAgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG5cblxuVHVwbGVzXG49PT09PT1cblxuVHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzLCB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBjb2xsZWN0aW9ucyBvZlxuaGV0ZXJvZ2VuZW91cyBkYXRhIChzdWNoIGFzIHRoZSAyLXR1cGxlcyBwcm9kdWNlZCBieSB0aGUgImVudW1lcmF0ZSgpIlxuYnVpbHQtaW4pLiBUdXBsZXMgYXJlIGFsc28gdXNlZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW1tdXRhYmxlIHNlcXVlbmNlXG5vZiBob21vZ2VuZW91cyBkYXRhIGlzIG5lZWRlZCAoc3VjaCBhcyBhbGxvd2luZyBzdG9yYWdlIGluIGEgInNldCIgb3JcbiJkaWN0IiBpbnN0YW5jZSkuXG5cbmNsYXNzIGNsYXNzIHR1cGxlKFtpdGVyYWJsZV0pXG5cbiAgIFR1cGxlcyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gYSBudW1iZXIgb2Ygd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2YgcGFyZW50aGVzZXMgdG8gZGVub3RlIHRoZSBlbXB0eSB0dXBsZTogIigpIlxuXG4gICAqIFVzaW5nIGEgdHJhaWxpbmcgY29tbWEgZm9yIGEgc2luZ2xldG9uIHR1cGxlOiAiYSwiIG9yICIoYSwpIlxuXG4gICAqIFNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6ICJhLCBiLCBjIiBvciAiKGEsIGIsIGMpIlxuXG4gICAqIFVzaW5nIHRoZSAidHVwbGUoKSIgYnVpbHQtaW46ICJ0dXBsZSgpIiBvciAidHVwbGUoaXRlcmFibGUpIlxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgdHVwbGUgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSB0dXBsZSwgaXQgaXMgcmV0dXJuZWRcbiAgIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsICJ0dXBsZShcJ2FiY1wnKSIgcmV0dXJucyAiKFwnYVwnLCBcJ2JcJywgXCdjXCcpIlxuICAgYW5kICJ0dXBsZSggWzEsIDIsIDNdICkiIHJldHVybnMgIigxLCAyLCAzKSIuIElmIG5vIGFyZ3VtZW50IGlzXG4gICBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXcgZW1wdHkgdHVwbGUsICIoKSIuXG5cbiAgIE5vdGUgdGhhdCBpdCBpcyBhY3R1YWxseSB0aGUgY29tbWEgd2hpY2ggbWFrZXMgYSB0dXBsZSwgbm90IHRoZVxuICAgcGFyZW50aGVzZXMuIFRoZSBwYXJlbnRoZXNlcyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBpbiB0aGUgZW1wdHlcbiAgIHR1cGxlIGNhc2UsIG9yIHdoZW4gdGhleSBhcmUgbmVlZGVkIHRvIGF2b2lkIHN5bnRhY3RpYyBhbWJpZ3VpdHkuXG4gICBGb3IgZXhhbXBsZSwgImYoYSwgYiwgYykiIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIHRocmVlIGFyZ3VtZW50cyxcbiAgIHdoaWxlICJmKChhLCBiLCBjKSkiIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGEgMy10dXBsZSBhcyB0aGUgc29sZVxuICAgYXJndW1lbnQuXG5cbiAgIFR1cGxlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLlxuXG5Gb3IgaGV0ZXJvZ2VuZW91cyBjb2xsZWN0aW9ucyBvZiBkYXRhIHdoZXJlIGFjY2VzcyBieSBuYW1lIGlzIGNsZWFyZXJcbnRoYW4gYWNjZXNzIGJ5IGluZGV4LCAiY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIiBtYXkgYmUgYSBtb3JlXG5hcHByb3ByaWF0ZSBjaG9pY2UgdGhhbiBhIHNpbXBsZSB0dXBsZSBvYmplY3QuXG5cblxuUmFuZ2VzXG49PT09PT1cblxuVGhlICJyYW5nZSIgdHlwZSByZXByZXNlbnRzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSBvZiBudW1iZXJzIGFuZCBpc1xuY29tbW9ubHkgdXNlZCBmb3IgbG9vcGluZyBhIHNwZWNpZmljIG51bWJlciBvZiB0aW1lcyBpbiAiZm9yIiBsb29wcy5cblxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RvcClcbmNsYXNzIGNsYXNzIHJhbmdlKHN0YXJ0LCBzdG9wWywgc3RlcF0pXG5cbiAgIFRoZSBhcmd1bWVudHMgdG8gdGhlIHJhbmdlIGNvbnN0cnVjdG9yIG11c3QgYmUgaW50ZWdlcnMgKGVpdGhlclxuICAgYnVpbHQtaW4gImludCIgb3IgYW55IG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlICJfX2luZGV4X18iXG4gICBzcGVjaWFsIG1ldGhvZCkuICBJZiB0aGUgKnN0ZXAqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvXG4gICAiMSIuIElmIHRoZSAqc3RhcnQqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICIwIi4gSWZcbiAgICpzdGVwKiBpcyB6ZXJvLCAiVmFsdWVFcnJvciIgaXMgcmFpc2VkLlxuXG4gICBGb3IgYSBwb3NpdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiBhIHJhbmdlICJyIiBhcmUgZGV0ZXJtaW5lZFxuICAgYnkgdGhlIGZvcm11bGEgInJbaV0gPSBzdGFydCArIHN0ZXAqaSIgd2hlcmUgImkgPj0gMCIgYW5kICJyW2ldIDxcbiAgIHN0b3AiLlxuXG4gICBGb3IgYSBuZWdhdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UgYXJlIHN0aWxsXG4gICBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtdWxhICJyW2ldID0gc3RhcnQgKyBzdGVwKmkiLCBidXQgdGhlXG4gICBjb25zdHJhaW50cyBhcmUgImkgPj0gMCIgYW5kICJyW2ldID4gc3RvcCIuXG5cbiAgIEEgcmFuZ2Ugb2JqZWN0IHdpbGwgYmUgZW1wdHkgaWYgInJbMF0iIGRvZXMgbm90IG1lZXQgdGhlIHZhbHVlXG4gICBjb25zdHJhaW50LiBSYW5nZXMgZG8gc3VwcG9ydCBuZWdhdGl2ZSBpbmRpY2VzLCBidXQgdGhlc2UgYXJlXG4gICBpbnRlcnByZXRlZCBhcyBpbmRleGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGRldGVybWluZWQgYnlcbiAgIHRoZSBwb3NpdGl2ZSBpbmRpY2VzLlxuXG4gICBSYW5nZXMgY29udGFpbmluZyBhYnNvbHV0ZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gInN5cy5tYXhzaXplIiBhcmVcbiAgIHBlcm1pdHRlZCBidXQgc29tZSBmZWF0dXJlcyAoc3VjaCBhcyAibGVuKCkiKSBtYXkgcmFpc2VcbiAgICJPdmVyZmxvd0Vycm9yIi5cblxuICAgUmFuZ2UgZXhhbXBsZXM6XG5cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEwKSlcbiAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMTEpKVxuICAgICAgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMzAsIDUpKVxuICAgICAgWzAsIDUsIDEwLCAxNSwgMjAsIDI1XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMTAsIDMpKVxuICAgICAgWzAsIDMsIDYsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAtMTAsIC0xKSlcbiAgICAgIFswLCAtMSwgLTIsIC0zLCAtNCwgLTUsIC02LCAtNywgLTgsIC05XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCkpXG4gICAgICBbXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMCkpXG4gICAgICBbXVxuXG4gICBSYW5nZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucyBleGNlcHRcbiAgIGNvbmNhdGVuYXRpb24gYW5kIHJlcGV0aXRpb24gKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHJhbmdlIG9iamVjdHNcbiAgIGNhbiBvbmx5IHJlcHJlc2VudCBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgYSBzdHJpY3QgcGF0dGVybiBhbmRcbiAgIHJlcGV0aXRpb24gYW5kIGNvbmNhdGVuYXRpb24gd2lsbCB1c3VhbGx5IHZpb2xhdGUgdGhhdCBwYXR0ZXJuKS5cblxuVGhlIGFkdmFudGFnZSBvZiB0aGUgInJhbmdlIiB0eXBlIG92ZXIgYSByZWd1bGFyICJsaXN0IiBvciAidHVwbGUiIGlzXG50aGF0IGEgInJhbmdlIiBvYmplY3Qgd2lsbCBhbHdheXMgdGFrZSB0aGUgc2FtZSAoc21hbGwpIGFtb3VudCBvZlxubWVtb3J5LCBubyBtYXR0ZXIgdGhlIHNpemUgb2YgdGhlIHJhbmdlIGl0IHJlcHJlc2VudHMgKGFzIGl0IG9ubHlcbnN0b3JlcyB0aGUgInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCIgdmFsdWVzLCBjYWxjdWxhdGluZyBpbmRpdmlkdWFsXG5pdGVtcyBhbmQgc3VicmFuZ2VzIGFzIG5lZWRlZCkuXG5cblJhbmdlIG9iamVjdHMgaW1wbGVtZW50IHRoZSAiY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlIiBBQkMsIGFuZFxucHJvdmlkZSBmZWF0dXJlcyBzdWNoIGFzIGNvbnRhaW5tZW50IHRlc3RzLCBlbGVtZW50IGluZGV4IGxvb2t1cCxcbnNsaWNpbmcgYW5kIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGluZGljZXMgKHNlZSAqU2VxdWVuY2UgVHlwZXMgLS0tXG5saXN0LCB0dXBsZSwgcmFuZ2UqKTpcblxuPj4+IHIgPSByYW5nZSgwLCAyMCwgMilcbj4+PiByXG5yYW5nZSgwLCAyMCwgMilcbj4+PiAxMSBpbiByXG5GYWxzZVxuPj4+IDEwIGluIHJcblRydWVcbj4+PiByLmluZGV4KDEwKVxuNVxuPj4+IHJbNV1cbjEwXG4+Pj4gcls6NV1cbnJhbmdlKDAsIDEwLCAyKVxuPj4+IHJbLTFdXG4xOFxuXG5UZXN0aW5nIHJhbmdlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggIj09IiBhbmQgIiE9IiBjb21wYXJlcyB0aGVtIGFzXG5zZXF1ZW5jZXMuICBUaGF0IGlzLCB0d28gcmFuZ2Ugb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiB0aGV5XG5yZXByZXNlbnQgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgdmFsdWVzLiAgKE5vdGUgdGhhdCB0d28gcmFuZ2Ugb2JqZWN0c1xudGhhdCBjb21wYXJlIGVxdWFsIG1pZ2h0IGhhdmUgZGlmZmVyZW50ICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiXG5hdHRyaWJ1dGVzLCBmb3IgZXhhbXBsZSAicmFuZ2UoMCkgPT0gcmFuZ2UoMiwgMSwgMykiIG9yICJyYW5nZSgwLCAzLFxuMikgPT0gcmFuZ2UoMCwgNCwgMikiLilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogSW1wbGVtZW50IHRoZSBTZXF1ZW5jZSBBQkMuIFN1cHBvcnQgc2xpY2luZ1xuYW5kIG5lZ2F0aXZlIGluZGljZXMuIFRlc3QgImludCIgb2JqZWN0cyBmb3IgbWVtYmVyc2hpcCBpbiBjb25zdGFudFxudGltZSBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBpdGVtcy5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogRGVmaW5lIFwnPT1cJyBhbmQgXCchPVwnIHRvIGNvbXBhcmUgcmFuZ2Ugb2JqZWN0c1xuYmFzZWQgb24gdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGV5IGRlZmluZSAoaW5zdGVhZCBvZiBjb21wYXJpbmdcbmJhc2VkIG9uIG9iamVjdCBpZGVudGl0eSkuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiIGF0dHJpYnV0ZXMuXG4nLAorICd0eXBlc3NlcS1tdXRhYmxlJzogJ1xuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBkZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2VcbnR5cGVzLiBUaGUgImNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2UiIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsICJieXRlYXJyYXkiIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiAiMCA8PSB4IDw9IDI1NSIpLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSA9IHQiICAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiAic1tpOmo6a10iIGFyZSAgIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY2xlYXIoKSIgICAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSAicyIgKHNhbWUgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNvcHkoKSIgICAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgInMiICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucG9wKFtpXSkiICAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJlbW92ZSh4KSIgICAgICAgICAgICAgICAgICB8IHJlbW92ZSB0aGUgZmlyc3QgaXRlbSBmcm9tICpzKiAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZXZlcnNlKCkiICAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gIi0xIiwgc28gdGhhdCBieSBkZWZhdWx0IHRoZVxuICAgbGFzdCBpdGVtIGlzIHJlbW92ZWQgYW5kIHJldHVybmVkLlxuXG4zLiAicmVtb3ZlIiByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSAicmV2ZXJzZSgpIiBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvciBlY29ub215XG4gICBvZiBzcGFjZSB3aGVuIHJldmVyc2luZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzIHRoYXQgaXRcbiAgIG9wZXJhdGVzIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHJldmVyc2VkIHNlcXVlbmNlLlxuXG41LiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyAiZGljdCIgYW5kICJzZXQiKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6ICJjbGVhcigpIiBhbmQgImNvcHkoKSIgbWV0aG9kcy5cbicsCiAgJ3VuYXJ5JzogJ1xuVW5hcnkgYXJpdGhtZXRpYyBhbmQgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQWxsIHVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5OlxuXG4gICB1X2V4cHIgOjo9IHBvd2VyIHwgIi0iIHVfZXhwciB8ICIrIiB1X2V4cHIgfCAifiIgdV9leHByXG5cblRoZSB1bmFyeSAiLSIgKG1pbnVzKSBvcGVyYXRvciB5aWVsZHMgdGhlIG5lZ2F0aW9uIG9mIGl0cyBudW1lcmljXG5hcmd1bWVudC5cblxuVGhlIHVuYXJ5ICIrIiAocGx1cykgb3BlcmF0b3IgeWllbGRzIGl0cyBudW1lcmljIGFyZ3VtZW50IHVuY2hhbmdlZC5cblxuVGhlIHVuYXJ5ICJ+IiAoaW52ZXJ0KSBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgaW52ZXJzaW9uIG9mIGl0c1xuaW50ZWdlciBhcmd1bWVudC4gIFRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiAieCIgaXMgZGVmaW5lZCBhc1xuIi0oeCsxKSIuICBJdCBvbmx5IGFwcGxpZXMgdG8gaW50ZWdyYWwgbnVtYmVycy5cblxuSW4gYWxsIHRocmVlIGNhc2VzLCBpZiB0aGUgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVyIHR5cGUsIGFcbiJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAogICd3aGlsZSc6ICdcblRoZSAid2hpbGUiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAid2hpbGUiIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBnb2VzIGJhY2tcbnRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG4nLAotICd3aXRoJzogJ1xuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuJywKKyAnd2l0aCc6ICdcblRoZSAid2l0aCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgIndpdGgiIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vbiAidHJ5Ii4uLiJleGNlcHQiLi4uImZpbmFsbHkiXG51c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWQgZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgIndpdGgiIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSAid2l0aF9pdGVtIikgaXNcbiAgIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2VudGVyX18oKSIgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgIndpdGgiIHN0YXRlbWVudCwgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSAiX19lbnRlcl9fKCkiIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgIndpdGgiIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlICJfX2VudGVyX18oKSIgbWV0aG9kXG4gICAgIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiAiX19leGl0X18oKSIgd2lsbCBhbHdheXMgYmVcbiAgICAgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byAiX19leGl0X18oKSIuIE90aGVyd2lzZSwgdGhyZWVcbiAgICJOb25lIiBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgIl9fZXhpdF9fKCkiIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXMgcmVyYWlzZWQuXG4gICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGFuZFxuICAgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSAid2l0aCJcbiAgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gIl9fZXhpdF9fKCkiIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSAid2l0aCIgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgIndpdGgiIHN0YXRlbWVudC5cbicsCiAgJ3lpZWxkJzogJ1xuVGhlICJ5aWVsZCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgeWllbGRfc3RtdCA6Oj0geWllbGRfZXhwcmVzc2lvblxuXG5BICJ5aWVsZCIgc3RhdGVtZW50IGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIGEgKnlpZWxkXG5leHByZXNzaW9uKi4gVGhlIHlpZWxkIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBvbWl0IHRoZSBwYXJlbnRoZXNlc1xudGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgcmVxdWlyZWQgaW4gdGhlIGVxdWl2YWxlbnQgeWllbGQgZXhwcmVzc2lvblxuc3RhdGVtZW50LiBGb3IgZXhhbXBsZSwgdGhlIHlpZWxkIHN0YXRlbWVudHNcblxuICAgeWllbGQgPGV4cHI+XG4gICB5aWVsZCBmcm9tIDxleHByPlxuXG5hcmUgZXF1aXZhbGVudCB0byB0aGUgeWllbGQgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzXG5cbiAgICh5aWVsZCA8ZXhwcj4pXG4gICAoeWllbGQgZnJvbSA8ZXhwcj4pXG5cbllpZWxkIGV4cHJlc3Npb25zIGFuZCBzdGF0ZW1lbnRzIGFyZSBvbmx5IHVzZWQgd2hlbiBkZWZpbmluZyBhXG4qZ2VuZXJhdG9yKiBmdW5jdGlvbiwgYW5kIGFyZSBvbmx5IHVzZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGdlbmVyYXRvclxuZnVuY3Rpb24uICBVc2luZyB5aWVsZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgc3VmZmljaWVudCB0byBjYXVzZVxudGhhdCBkZWZpbml0aW9uIHRvIGNyZWF0ZSBhIGdlbmVyYXRvciBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgbm9ybWFsXG5mdW5jdGlvbi5cblxuRm9yIGZ1bGwgZGV0YWlscyBvZiAieWllbGQiIHNlbWFudGljcywgcmVmZXIgdG8gdGhlICpZaWVsZFxuZXhwcmVzc2lvbnMqIHNlY3Rpb24uXG4nfQpkaWZmIC0tZ2l0IGEvTGliL3F1b3ByaS5weSBiL0xpYi9xdW9wcmkucHkKaW5kZXggM2QwZjBhYy4uNDZjMmE0YyAxMDA3NTUKLS0tIGEvTGliL3F1b3ByaS5weQorKysgYi9MaWIvcXVvcHJpLnB5CkBAIC00NCwxMyArNDQsMTEgQEAKIGRlZiBlbmNvZGUoaW5wdXQsIG91dHB1dCwgcXVvdGV0YWJzLCBoZWFkZXI9RmFsc2UpOgogICAgICIiIlJlYWQgJ2lucHV0JywgYXBwbHkgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZywgYW5kIHdyaXRlIHRvICdvdXRwdXQnLgogCi0gICAgJ2lucHV0JyBhbmQgJ291dHB1dCcgYXJlIGZpbGVzIHdpdGggcmVhZGxpbmUoKSBhbmQgd3JpdGUoKSBtZXRob2RzLgotICAgIFRoZSAncXVvdGV0YWJzJyBmbGFnIGluZGljYXRlcyB3aGV0aGVyIGVtYmVkZGVkIHRhYnMgYW5kIHNwYWNlcyBzaG91bGQgYmUKLSAgICBxdW90ZWQuICBOb3RlIHRoYXQgbGluZS1lbmRpbmcgdGFicyBhbmQgc3BhY2VzIGFyZSBhbHdheXMgZW5jb2RlZCwgYXMgcGVyCi0gICAgUkZDIDE1MjEuCi0gICAgVGhlICdoZWFkZXInIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgYXJlIGVuY29kaW5nIHNwYWNlcyBhcyBfIGFzIHBlcgotICAgIFJGQyAxNTIyLgotICAgICIiIgorICAgICdpbnB1dCcgYW5kICdvdXRwdXQnIGFyZSBiaW5hcnkgZmlsZSBvYmplY3RzLiBUaGUgJ3F1b3RldGFicycgZmxhZworICAgIGluZGljYXRlcyB3aGV0aGVyIGVtYmVkZGVkIHRhYnMgYW5kIHNwYWNlcyBzaG91bGQgYmUgcXVvdGVkLiBOb3RlIHRoYXQKKyAgICBsaW5lLWVuZGluZyB0YWJzIGFuZCBzcGFjZXMgYXJlIGFsd2F5cyBlbmNvZGVkLCBhcyBwZXIgUkZDIDE1MjEuCisgICAgVGhlICdoZWFkZXInIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgYXJlIGVuY29kaW5nIHNwYWNlcyBhcyBfIGFzIHBlciBSRkMKKyAgICAxNTIyLiIiIgogCiAgICAgaWYgYjJhX3FwIGlzIG5vdCBOb25lOgogICAgICAgICBkYXRhID0gaW5wdXQucmVhZCgpCkBAIC0xMTgsNyArMTE2LDcgQEAKIAogZGVmIGRlY29kZShpbnB1dCwgb3V0cHV0LCBoZWFkZXI9RmFsc2UpOgogICAgICIiIlJlYWQgJ2lucHV0JywgYXBwbHkgcXVvdGVkLXByaW50YWJsZSBkZWNvZGluZywgYW5kIHdyaXRlIHRvICdvdXRwdXQnLgotICAgICdpbnB1dCcgYW5kICdvdXRwdXQnIGFyZSBmaWxlcyB3aXRoIHJlYWRsaW5lKCkgYW5kIHdyaXRlKCkgbWV0aG9kcy4KKyAgICAnaW5wdXQnIGFuZCAnb3V0cHV0JyBhcmUgYmluYXJ5IGZpbGUgb2JqZWN0cy4KICAgICBJZiAnaGVhZGVyJyBpcyB0cnVlLCBkZWNvZGUgdW5kZXJzY29yZSBhcyBzcGFjZSAocGVyIFJGQyAxNTIyKS4iIiIKIAogICAgIGlmIGEyYl9xcCBpcyBub3QgTm9uZToKQEAgLTIyMyw3ICsyMjEsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlLCAicmIiKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzOiBjYW4ndCBvcGVuICglcylcbiIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgICAgICAgICBzdHMgPSAxCiAgICAgICAgICAgICAgICAgY29udGludWUKZGlmZiAtLWdpdCBhL0xpYi9yYW5kb20ucHkgYi9MaWIvcmFuZG9tLnB5CmluZGV4IDE0YWM1ZTUuLjQ2NDI5MjggMTAwNjQ0Ci0tLSBhL0xpYi9yYW5kb20ucHkKKysrIGIvTGliL3JhbmRvbS5weQpAQCAtNDEsNyArNDEsNyBAQAogZnJvbSBtYXRoIGltcG9ydCBsb2cgYXMgX2xvZywgZXhwIGFzIF9leHAsIHBpIGFzIF9waSwgZSBhcyBfZSwgY2VpbCBhcyBfY2VpbAogZnJvbSBtYXRoIGltcG9ydCBzcXJ0IGFzIF9zcXJ0LCBhY29zIGFzIF9hY29zLCBjb3MgYXMgX2Nvcywgc2luIGFzIF9zaW4KIGZyb20gb3MgaW1wb3J0IHVyYW5kb20gYXMgX3VyYW5kb20KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBTZXQgYXMgX1NldCwgU2VxdWVuY2UgYXMgX1NlcXVlbmNlCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IFNldCBhcyBfU2V0LCBTZXF1ZW5jZSBhcyBfU2VxdWVuY2UKIGZyb20gaGFzaGxpYiBpbXBvcnQgc2hhNTEyIGFzIF9zaGE1MTIKIAogX19hbGxfXyA9IFsiUmFuZG9tIiwic2VlZCIsInJhbmRvbSIsInVuaWZvcm0iLCJyYW5kaW50IiwiY2hvaWNlIiwic2FtcGxlIiwKQEAgLTEwNSw3ICsxMDUsOSBAQAogCiAgICAgICAgIGlmIGEgaXMgTm9uZToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBhID0gaW50LmZyb21fYnl0ZXMoX3VyYW5kb20oMzIpLCAnYmlnJykKKyAgICAgICAgICAgICAgICAjIFNlZWQgd2l0aCBlbm91Z2ggYnl0ZXMgdG8gc3BhbiB0aGUgMTk5MzcgYml0CisgICAgICAgICAgICAgICAgIyBzdGF0ZSBzcGFjZSBmb3IgdGhlIE1lcnNlbm5lIFR3aXN0ZXIKKyAgICAgICAgICAgICAgICBhID0gaW50LmZyb21fYnl0ZXMoX3VyYW5kb20oMjUwMCksICdiaWcnKQogICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICAgICAgaW1wb3J0IHRpbWUKICAgICAgICAgICAgICAgICBhID0gaW50KHRpbWUudGltZSgpICogMjU2KSAjIHVzZSBmcmFjdGlvbmFsIHNlY29uZHMKQEAgLTE1MSw2ICsxNTMsOSBAQAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSBwaWNrbGUgc3VwcG9ydCAgLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgIyBJc3N1ZSAxNzQ4OTogU2luY2UgX19yZWR1Y2VfXyB3YXMgZGVmaW5lZCB0byBmaXggIzc1OTg4OSB0aGlzIGlzIG5vCisgICAgIyBsb25nZXIgY2FsbGVkOyB3ZSBsZWF2ZSBpdCBoZXJlIGJlY2F1c2UgaXQgaGFzIGJlZW4gaGVyZSBzaW5jZSByYW5kb20gd2FzCisgICAgIyByZXdyaXR0ZW4gYmFjayBpbiAyMDAxIGFuZCB3aHkgcmlzayBicmVha2luZyBzb21ldGhpbmcuCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKTogIyBmb3IgcGlja2xlCiAgICAgICAgIHJldHVybiBzZWxmLmdldHN0YXRlKCkKIApAQCAtMjE2LDEwICsyMjEsMTEgQEAKICAgICAgICAgICAgICAgICAgICBNZXRob2Q9X01ldGhvZFR5cGUsIEJ1aWx0aW5NZXRob2Q9X0J1aWx0aW5NZXRob2RUeXBlKToKICAgICAgICAgIlJldHVybiBhIHJhbmRvbSBpbnQgaW4gdGhlIHJhbmdlIFswLG4pLiAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgbj09MC4iCiAKKyAgICAgICAgcmFuZG9tID0gc2VsZi5yYW5kb20KICAgICAgICAgZ2V0cmFuZGJpdHMgPSBzZWxmLmdldHJhbmRiaXRzCiAgICAgICAgICMgT25seSBjYWxsIHNlbGYuZ2V0cmFuZGJpdHMgaWYgdGhlIG9yaWdpbmFsIHJhbmRvbSgpIGJ1aWx0aW4gbWV0aG9kCiAgICAgICAgICMgaGFzIG5vdCBiZWVuIG92ZXJyaWRkZW4gb3IgaWYgYSBuZXcgZ2V0cmFuZGJpdHMoKSB3YXMgc3VwcGxpZWQuCi0gICAgICAgIGlmIHR5cGUoc2VsZi5yYW5kb20pIGlzIEJ1aWx0aW5NZXRob2Qgb3IgdHlwZShnZXRyYW5kYml0cykgaXMgTWV0aG9kOgorICAgICAgICBpZiB0eXBlKHJhbmRvbSkgaXMgQnVpbHRpbk1ldGhvZCBvciB0eXBlKGdldHJhbmRiaXRzKSBpcyBNZXRob2Q6CiAgICAgICAgICAgICBrID0gbi5iaXRfbGVuZ3RoKCkgICMgZG9uJ3QgdXNlIChuLTEpIGhlcmUgYmVjYXVzZSBuIGNhbiBiZSAxCiAgICAgICAgICAgICByID0gZ2V0cmFuZGJpdHMoaykgICAgICAgICAgIyAwIDw9IHIgPCAyKiprCiAgICAgICAgICAgICB3aGlsZSByID49IG46CkBAIC0yMjcsNyArMjMzLDYgQEAKICAgICAgICAgICAgIHJldHVybiByCiAgICAgICAgICMgVGhlcmUncyBhbiBvdmVycmlkZW4gcmFuZG9tKCkgbWV0aG9kIGJ1dCBubyBuZXcgZ2V0cmFuZGJpdHMoKSBtZXRob2QsCiAgICAgICAgICMgc28gd2UgY2FuIG9ubHkgdXNlIHJhbmRvbSgpIGZyb20gaGVyZS4KLSAgICAgICAgcmFuZG9tID0gc2VsZi5yYW5kb20KICAgICAgICAgaWYgbiA+PSBtYXhzaXplOgogICAgICAgICAgICAgX3dhcm4oIlVuZGVybHlpbmcgcmFuZG9tKCkgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBseSBcbiIKICAgICAgICAgICAgICAgICAiZW5vdWdoIGJpdHMgdG8gY2hvb3NlIGZyb20gYSBwb3B1bGF0aW9uIHJhbmdlIHRoaXMgbGFyZ2UuXG4iCkBAIC0yNTEsMTAgKzI1NiwxMSBAQAogICAgICAgICByZXR1cm4gc2VxW2ldCiAKICAgICBkZWYgc2h1ZmZsZShzZWxmLCB4LCByYW5kb209Tm9uZSk6Ci0gICAgICAgICIiIngsIHJhbmRvbT1yYW5kb20ucmFuZG9tIC0+IHNodWZmbGUgbGlzdCB4IGluIHBsYWNlOyByZXR1cm4gTm9uZS4KKyAgICAgICAgIiIiU2h1ZmZsZSBsaXN0IHggaW4gcGxhY2UsIGFuZCByZXR1cm4gTm9uZS4KIAotICAgICAgICBPcHRpb25hbCBhcmcgcmFuZG9tIGlzIGEgMC1hcmd1bWVudCBmdW5jdGlvbiByZXR1cm5pbmcgYSByYW5kb20KLSAgICAgICAgZmxvYXQgaW4gWzAuMCwgMS4wKTsgYnkgZGVmYXVsdCwgdGhlIHN0YW5kYXJkIHJhbmRvbS5yYW5kb20uCisgICAgICAgIE9wdGlvbmFsIGFyZ3VtZW50IHJhbmRvbSBpcyBhIDAtYXJndW1lbnQgZnVuY3Rpb24gcmV0dXJuaW5nIGEKKyAgICAgICAgcmFuZG9tIGZsb2F0IGluIFswLjAsIDEuMCk7IGlmIGl0IGlzIHRoZSBkZWZhdWx0IE5vbmUsIHRoZQorICAgICAgICBzdGFuZGFyZCByYW5kb20ucmFuZG9tIHdpbGwgYmUgdXNlZC4KIAogICAgICAgICAiIiIKIApAQCAtMzQ5LDcgKzM1NSwxMCBAQAogCiAgICAgICAgICIiIgogICAgICAgICB1ID0gc2VsZi5yYW5kb20oKQotICAgICAgICBjID0gMC41IGlmIG1vZGUgaXMgTm9uZSBlbHNlIChtb2RlIC0gbG93KSAvIChoaWdoIC0gbG93KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjID0gMC41IGlmIG1vZGUgaXMgTm9uZSBlbHNlIChtb2RlIC0gbG93KSAvIChoaWdoIC0gbG93KQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gbG93CiAgICAgICAgIGlmIHUgPiBjOgogICAgICAgICAgICAgdSA9IDEuMCAtIHUKICAgICAgICAgICAgIGMgPSAxLjAgLSBjCmRpZmYgLS1naXQgYS9MaWIvcmUucHkgYi9MaWIvcmUucHkKaW5kZXggYTQ2ZWNjOC4uMmU0ZDg3YyAxMDA2NDQKLS0tIGEvTGliL3JlLnB5CisrKyBiL0xpYi9yZS5weQpAQCAtODUsMTYgKzg1LDE3IEBACiAgICAgXFwgICAgICAgTWF0Y2hlcyBhIGxpdGVyYWwgYmFja3NsYXNoLgogCiBUaGlzIG1vZHVsZSBleHBvcnRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgotICAgIG1hdGNoICAgIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy4KLSAgICBzZWFyY2ggICBTZWFyY2ggYSBzdHJpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHBhdHRlcm4uCi0gICAgc3ViICAgICAgU3Vic3RpdHV0ZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gZm91bmQgaW4gYSBzdHJpbmcuCi0gICAgc3VibiAgICAgU2FtZSBhcyBzdWIsIGJ1dCBhbHNvIHJldHVybiB0aGUgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgbWFkZS4KLSAgICBzcGxpdCAgICBTcGxpdCBhIHN0cmluZyBieSB0aGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuLgotICAgIGZpbmRhbGwgIEZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBpbiBhIHN0cmluZy4KLSAgICBmaW5kaXRlciBSZXR1cm4gYW4gaXRlcmF0b3IgeWllbGRpbmcgYSBtYXRjaCBvYmplY3QgZm9yIGVhY2ggbWF0Y2guCi0gICAgY29tcGlsZSAgQ29tcGlsZSBhIHBhdHRlcm4gaW50byBhIFJlZ2V4T2JqZWN0LgotICAgIHB1cmdlICAgIENsZWFyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY2FjaGUuCi0gICAgZXNjYXBlICAgQmFja3NsYXNoIGFsbCBub24tYWxwaGFudW1lcmljcyBpbiBhIHN0cmluZy4KKyAgICBtYXRjaCAgICAgTWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLgorICAgIGZ1bGxtYXRjaCBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIGFsbCBvZiBhIHN0cmluZy4KKyAgICBzZWFyY2ggICAgU2VhcmNoIGEgc3RyaW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBwYXR0ZXJuLgorICAgIHN1YiAgICAgICBTdWJzdGl0dXRlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBmb3VuZCBpbiBhIHN0cmluZy4KKyAgICBzdWJuICAgICAgU2FtZSBhcyBzdWIsIGJ1dCBhbHNvIHJldHVybiB0aGUgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgbWFkZS4KKyAgICBzcGxpdCAgICAgU3BsaXQgYSBzdHJpbmcgYnkgdGhlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybi4KKyAgICBmaW5kYWxsICAgRmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGluIGEgc3RyaW5nLgorICAgIGZpbmRpdGVyICBSZXR1cm4gYW4gaXRlcmF0b3IgeWllbGRpbmcgYSBtYXRjaCBvYmplY3QgZm9yIGVhY2ggbWF0Y2guCisgICAgY29tcGlsZSAgIENvbXBpbGUgYSBwYXR0ZXJuIGludG8gYSBSZWdleE9iamVjdC4KKyAgICBwdXJnZSAgICAgQ2xlYXIgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZS4KKyAgICBlc2NhcGUgICAgQmFja3NsYXNoIGFsbCBub24tYWxwaGFudW1lcmljcyBpbiBhIHN0cmluZy4KIAogU29tZSBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHRha2VzIGZsYWdzIGFzIG9wdGlvbmFsIHBhcmFtZXRlcnM6CiAgICAgQSAgQVNDSUkgICAgICAgRm9yIHN0cmluZyBwYXR0ZXJucywgbWFrZSBcdywgXFcsIFxiLCBcQiwgXGQsIFxECkBAIC0xMjEsMTAgKzEyMiw5IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgc3JlX2NvbXBpbGUKIGltcG9ydCBzcmVfcGFyc2UKLWltcG9ydCBmdW5jdG9vbHMKIAogIyBwdWJsaWMgc3ltYm9scwotX19hbGxfXyA9IFsgIm1hdGNoIiwgInNlYXJjaCIsICJzdWIiLCAic3VibiIsICJzcGxpdCIsICJmaW5kYWxsIiwKK19fYWxsX18gPSBbICJtYXRjaCIsICJmdWxsbWF0Y2giLCAic2VhcmNoIiwgInN1YiIsICJzdWJuIiwgInNwbGl0IiwgImZpbmRhbGwiLAogICAgICJjb21waWxlIiwgInB1cmdlIiwgInRlbXBsYXRlIiwgImVzY2FwZSIsICJBIiwgIkkiLCAiTCIsICJNIiwgIlMiLCAiWCIsCiAgICAgIlUiLCAiQVNDSUkiLCAiSUdOT1JFQ0FTRSIsICJMT0NBTEUiLCAiTVVMVElMSU5FIiwgIkRPVEFMTCIsICJWRVJCT1NFIiwKICAgICAiVU5JQ09ERSIsICJlcnJvciIgXQpAQCAtMTU1LDYgKzE1NSwxMSBAQAogICAgIGEgbWF0Y2ggb2JqZWN0LCBvciBOb25lIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4iIiIKICAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLm1hdGNoKHN0cmluZykKIAorZGVmIGZ1bGxtYXRjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApOgorICAgICIiIlRyeSB0byBhcHBseSB0aGUgcGF0dGVybiB0byBhbGwgb2YgdGhlIHN0cmluZywgcmV0dXJuaW5nCisgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgorICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykuZnVsbG1hdGNoKHN0cmluZykKKwogZGVmIHNlYXJjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApOgogICAgICIiIlNjYW4gdGhyb3VnaCBzdHJpbmcgbG9va2luZyBmb3IgYSBtYXRjaCB0byB0aGUgcGF0dGVybiwgcmV0dXJuaW5nCiAgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgpkaWZmIC0tZ2l0IGEvTGliL3JsY29tcGxldGVyLnB5IGIvTGliL3JsY29tcGxldGVyLnB5CmluZGV4IDNmOTcwNTMuLjk0ZjkzNDEgMTAwNjQ0Ci0tLSBhL0xpYi9ybGNvbXBsZXRlci5weQorKysgYi9MaWIvcmxjb21wbGV0ZXIucHkKQEAgLTI5LDYgKzI5LDcgQEAKIAogIiIiCiAKK2ltcG9ydCBhdGV4aXQKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IF9fbWFpbl9fCiAKQEAgLTE1OCwzICsxNTksNyBAQAogICAgIHBhc3MKIGVsc2U6CiAgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihDb21wbGV0ZXIoKS5jb21wbGV0ZSkKKyAgICAjIFJlbGVhc2UgcmVmZXJlbmNlcyBlYXJseSBhdCBzaHV0ZG93biAodGhlIHJlYWRsaW5lIG1vZHVsZSdzCisgICAgIyBjb250ZW50cyBhcmUgcXVhc2ktaW1tb3J0YWwsIGFuZCB0aGUgY29tcGxldGVyIGZ1bmN0aW9uIGhvbGRzIGEKKyAgICAjIHJlZmVyZW5jZSB0byBnbG9iYWxzKS4KKyAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhOiByZWFkbGluZS5zZXRfY29tcGxldGVyKE5vbmUpKQpkaWZmIC0tZ2l0IGEvTGliL3J1bnB5LnB5IGIvTGliL3J1bnB5LnB5CmluZGV4IDM5YzBlOWYuLjBiYjU3ZDcgMTAwNjQ0Ci0tLSBhL0xpYi9ydW5weS5weQorKysgYi9MaWIvcnVucHkucHkKQEAgLTEwLDExICsxMCwxMSBAQAogIyAgICB0byBpbXBsZW1lbnQgUEVQIDMzOCAoRXhlY3V0aW5nIE1vZHVsZXMgYXMgU2NyaXB0cykKIAogCi1pbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5ICMgaW1wb3J0bGliIGZpcnN0IHNvIHdlIGNhbiB0ZXN0ICMxNTM4NiB2aWEgLW0KLWltcG9ydCBpbXAKLWZyb20gcGtndXRpbCBpbXBvcnQgcmVhZF9jb2RlLCBnZXRfbG9hZGVyLCBnZXRfaW1wb3J0ZXIKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAoraW1wb3J0IHR5cGVzCitmcm9tIHBrZ3V0aWwgaW1wb3J0IHJlYWRfY29kZSwgZ2V0X2ltcG9ydGVyCiAKIF9fYWxsX18gPSBbCiAgICAgInJ1bl9tb2R1bGUiLCAicnVuX3BhdGgiLApAQCAtMjQsNyArMjQsNyBAQAogICAgICIiIlRlbXBvcmFyaWx5IHJlcGxhY2UgYSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMgd2l0aCBhbiBlbXB0eSBuYW1lc3BhY2UiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kX25hbWUpOgogICAgICAgICBzZWxmLm1vZF9uYW1lID0gbW9kX25hbWUKLSAgICAgICAgc2VsZi5tb2R1bGUgPSBpbXAubmV3X21vZHVsZShtb2RfbmFtZSkKKyAgICAgICAgc2VsZi5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG1vZF9uYW1lKQogICAgICAgICBzZWxmLl9zYXZlZF9tb2R1bGUgPSBbXQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKQEAgLTU4LDUxICs1OCw1OSBAQAogICAgICAgICBzZWxmLnZhbHVlID0gc2VsZi5fc2VudGluZWwKICAgICAgICAgc3lzLmFyZ3ZbMF0gPSBzZWxmLl9zYXZlZF92YWx1ZQogCisjIFRPRE86IFJlcGxhY2UgdGhlc2UgaGVscGVycyB3aXRoIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcwogZGVmIF9ydW5fY29kZShjb2RlLCBydW5fZ2xvYmFscywgaW5pdF9nbG9iYWxzPU5vbmUsCi0gICAgICAgICAgICAgIG1vZF9uYW1lPU5vbmUsIG1vZF9mbmFtZT1Ob25lLAotICAgICAgICAgICAgICBtb2RfbG9hZGVyPU5vbmUsIHBrZ19uYW1lPU5vbmUpOgorICAgICAgICAgICAgICBtb2RfbmFtZT1Ob25lLCBtb2Rfc3BlYz1Ob25lLAorICAgICAgICAgICAgICBwa2dfbmFtZT1Ob25lLCBzY3JpcHRfbmFtZT1Ob25lKToKICAgICAiIiJIZWxwZXIgdG8gcnVuIGNvZGUgaW4gbm9taW5hdGVkIG5hbWVzcGFjZSIiIgogICAgIGlmIGluaXRfZ2xvYmFscyBpcyBub3QgTm9uZToKICAgICAgICAgcnVuX2dsb2JhbHMudXBkYXRlKGluaXRfZ2xvYmFscykKKyAgICBpZiBtb2Rfc3BlYyBpcyBOb25lOgorICAgICAgICBsb2FkZXIgPSBOb25lCisgICAgICAgIGZuYW1lID0gc2NyaXB0X25hbWUKKyAgICAgICAgY2FjaGVkID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIGxvYWRlciA9IG1vZF9zcGVjLmxvYWRlcgorICAgICAgICBmbmFtZSA9IG1vZF9zcGVjLm9yaWdpbgorICAgICAgICBjYWNoZWQgPSBtb2Rfc3BlYy5jYWNoZWQKKyAgICAgICAgaWYgcGtnX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHBrZ19uYW1lID0gbW9kX3NwZWMucGFyZW50CiAgICAgcnVuX2dsb2JhbHMudXBkYXRlKF9fbmFtZV9fID0gbW9kX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIF9fZmlsZV9fID0gbW9kX2ZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBfX2NhY2hlZF9fID0gTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX19maWxlX18gPSBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX19jYWNoZWRfXyA9IGNhY2hlZCwKICAgICAgICAgICAgICAgICAgICAgICAgX19kb2NfXyA9IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIF9fbG9hZGVyX18gPSBtb2RfbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICBfX3BhY2thZ2VfXyA9IHBrZ19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fID0gbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICBfX3BhY2thZ2VfXyA9IHBrZ19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBfX3NwZWNfXyA9IG1vZF9zcGVjKQogICAgIGV4ZWMoY29kZSwgcnVuX2dsb2JhbHMpCiAgICAgcmV0dXJuIHJ1bl9nbG9iYWxzCiAKIGRlZiBfcnVuX21vZHVsZV9jb2RlKGNvZGUsIGluaXRfZ2xvYmFscz1Ob25lLAotICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1Ob25lLCBtb2RfZm5hbWU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgbW9kX2xvYWRlcj1Ob25lLCBwa2dfbmFtZT1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX3NwZWM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgcGtnX25hbWU9Tm9uZSwgc2NyaXB0X25hbWU9Tm9uZSk6CiAgICAgIiIiSGVscGVyIHRvIHJ1biBjb2RlIGluIG5ldyBuYW1lc3BhY2Ugd2l0aCBzeXMgbW9kaWZpZWQiIiIKLSAgICB3aXRoIF9UZW1wTW9kdWxlKG1vZF9uYW1lKSBhcyB0ZW1wX21vZHVsZSwgX01vZGlmaWVkQXJndjAobW9kX2ZuYW1lKToKKyAgICBmbmFtZSA9IHNjcmlwdF9uYW1lIGlmIG1vZF9zcGVjIGlzIE5vbmUgZWxzZSBtb2Rfc3BlYy5vcmlnaW4KKyAgICB3aXRoIF9UZW1wTW9kdWxlKG1vZF9uYW1lKSBhcyB0ZW1wX21vZHVsZSwgX01vZGlmaWVkQXJndjAoZm5hbWUpOgogICAgICAgICBtb2RfZ2xvYmFscyA9IHRlbXBfbW9kdWxlLm1vZHVsZS5fX2RpY3RfXwogICAgICAgICBfcnVuX2NvZGUoY29kZSwgbW9kX2dsb2JhbHMsIGluaXRfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgIG1vZF9uYW1lLCBtb2RfZm5hbWUsIG1vZF9sb2FkZXIsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9zcGVjLCBwa2dfbmFtZSwgc2NyaXB0X25hbWUpCiAgICAgIyBDb3B5IHRoZSBnbG9iYWxzIG9mIHRoZSB0ZW1wb3JhcnkgbW9kdWxlLCBhcyB0aGV5CiAgICAgIyBtYXkgYmUgY2xlYXJlZCB3aGVuIHRoZSB0ZW1wb3JhcnkgbW9kdWxlIGdvZXMgYXdheQogICAgIHJldHVybiBtb2RfZ2xvYmFscy5jb3B5KCkKIAotCi0jIFRoaXMgaGVscGVyIGlzIG5lZWRlZCBkdWUgdG8gYSBtaXNzaW5nIGNvbXBvbmVudCBpbiB0aGUgUEVQIDMwMgotIyBsb2FkZXIgcHJvdG9jb2wgKHNwZWNpZmljYWxseSwgImdldF9maWxlbmFtZSIgaXMgbm9uLXN0YW5kYXJkKQotIyBTaW5jZSB3ZSBjYW4ndCBpbnRyb2R1Y2UgbmV3IGZlYXR1cmVzIGluIG1haW50ZW5hbmNlIHJlbGVhc2VzLAotIyBzdXBwb3J0IHdhcyBhZGRlZCB0byB6aXBpbXBvcnRlciB1bmRlciB0aGUgbmFtZSAnX2dldF9maWxlbmFtZScKLWRlZiBfZ2V0X2ZpbGVuYW1lKGxvYWRlciwgbW9kX25hbWUpOgotICAgIGZvciBhdHRyIGluICgiZ2V0X2ZpbGVuYW1lIiwgIl9nZXRfZmlsZW5hbWUiKToKLSAgICAgICAgbWV0aCA9IGdldGF0dHIobG9hZGVyLCBhdHRyLCBOb25lKQotICAgICAgICBpZiBtZXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChtZXRoKG1vZF9uYW1lKSkKLSAgICByZXR1cm4gTm9uZQotCiAjIEhlbHBlciB0byBnZXQgdGhlIGxvYWRlciwgY29kZSBhbmQgZmlsZW5hbWUgZm9yIGEgbW9kdWxlCiBkZWYgX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSk6Ci0gICAgbG9hZGVyID0gZ2V0X2xvYWRlcihtb2RfbmFtZSkKLSAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICB0cnk6CisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMobW9kX25hbWUpCisgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvcikgYXMgZXg6CisgICAgICAgICMgVGhpcyBoYWNrIGZpeGVzIGFuIGltcGVkYW5jZSBtaXNtYXRjaCBiZXR3ZWVuIHBrZ3V0aWwgYW5kCisgICAgICAgICMgaW1wb3J0bGliLCB3aGVyZSB0aGUgbGF0dGVyIHJhaXNlcyBvdGhlciBlcnJvcnMgZm9yIGNhc2VzIHdoZXJlCisgICAgICAgICMgcGtndXRpbCBwcmV2aW91c2x5IHJhaXNlZCBJbXBvcnRFcnJvcgorICAgICAgICBtc2cgPSAiRXJyb3Igd2hpbGUgZmluZGluZyBzcGVjIGZvciB7IXJ9ICh7fToge30pIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KG1vZF9uYW1lLCB0eXBlKGV4KSwgZXgpKSBmcm9tIGV4CisgICAgaWYgc3BlYyBpcyBOb25lOgogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm8gbW9kdWxlIG5hbWVkICVzIiAlIG1vZF9uYW1lKQotICAgIGlmIGxvYWRlci5pc19wYWNrYWdlKG1vZF9uYW1lKToKKyAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgogICAgICAgICBpZiBtb2RfbmFtZSA9PSAiX19tYWluX18iIG9yIG1vZF9uYW1lLmVuZHN3aXRoKCIuX19tYWluX18iKToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJDYW5ub3QgdXNlIHBhY2thZ2UgYXMgX19tYWluX18gbW9kdWxlIikKICAgICAgICAgdHJ5OgpAQCAtMTExLDExICsxMTksMTQgQEAKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigoIiVzOyAlciBpcyBhIHBhY2thZ2UgYW5kIGNhbm5vdCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgZGlyZWN0bHkgZXhlY3V0ZWQiKSAlKGUsIG1vZF9uYW1lKSkKKyAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiJXIgaXMgYSBuYW1lc3BhY2UgcGFja2FnZSBhbmQgY2Fubm90IGJlIGV4ZWN1dGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG1vZF9uYW1lKQogICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUobW9kX25hbWUpCiAgICAgaWYgY29kZSBpcyBOb25lOgogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm8gY29kZSBvYmplY3QgYXZhaWxhYmxlIGZvciAlcyIgJSBtb2RfbmFtZSkKLSAgICBmaWxlbmFtZSA9IF9nZXRfZmlsZW5hbWUobG9hZGVyLCBtb2RfbmFtZSkKLSAgICByZXR1cm4gbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZmlsZW5hbWUKKyAgICByZXR1cm4gbW9kX25hbWUsIHNwZWMsIGNvZGUKIAogIyBYWFggbmNvZ2hsYW46IFNob3VsZCB0aGlzIGJlIGRvY3VtZW50ZWQgYW5kIG1hZGUgcHVibGljPwogIyAoQ3VycmVudCB0aG91Z2h0czogZG9uJ3QgcmVwZWF0IHRoZSBtaXN0YWtlIHRoYXQgbGVhZCB0byBpdHMKQEAgLTEzNyw5ICsxNDgsOSBAQAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgaWYgYWx0ZXJfYXJndiBvciBtb2RfbmFtZSAhPSAiX19tYWluX18iOiAjIGkuZS4gLW0gc3dpdGNoCi0gICAgICAgICAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCisgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIGNvZGUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKQogICAgICAgICBlbHNlOiAgICAgICAgICAjIGkuZS4gZGlyZWN0b3J5IG9yIHppcGZpbGUgZXhlY3V0aW9uCi0gICAgICAgICAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpCisgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIGNvZGUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CiAgICAgICAgICMgVHJ5IHRvIHByb3ZpZGUgYSBnb29kIGVycm9yIG1lc3NhZ2UKICAgICAgICAgIyBmb3IgZGlyZWN0b3JpZXMsIHppcCBmaWxlcyBhbmQgdGhlIC1tIHN3aXRjaApAQCAtMTUyLDEyICsxNjMsMTEgQEAKICAgICAgICAgICAgIGluZm8gPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSBzeXMuYXJndlswXQogICAgICAgICBtc2cgPSAiJXM6ICVzIiAlIChzeXMuZXhlY3V0YWJsZSwgaW5mbykKICAgICAgICAgc3lzLmV4aXQobXNnKQotICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCiAgICAgbWFpbl9nbG9iYWxzID0gc3lzLm1vZHVsZXNbIl9fbWFpbl9fIl0uX19kaWN0X18KICAgICBpZiBhbHRlcl9hcmd2OgotICAgICAgICBzeXMuYXJndlswXSA9IGZuYW1lCisgICAgICAgIHN5cy5hcmd2WzBdID0gbW9kX3NwZWMub3JpZ2luCiAgICAgcmV0dXJuIF9ydW5fY29kZShjb2RlLCBtYWluX2dsb2JhbHMsIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAiX19tYWluX18iLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICJfX21haW5fXyIsIG1vZF9zcGVjKQogCiBkZWYgcnVuX21vZHVsZShtb2RfbmFtZSwgaW5pdF9nbG9iYWxzPU5vbmUsCiAgICAgICAgICAgICAgICBydW5fbmFtZT1Ob25lLCBhbHRlcl9zeXM9RmFsc2UpOgpAQCAtMTY1LDE3ICsxNzUsMTQgQEAKIAogICAgICAgIFJldHVybnMgdGhlIHJlc3VsdGluZyB0b3AgbGV2ZWwgbmFtZXNwYWNlIGRpY3Rpb25hcnkKICAgICAiIiIKLSAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCisgICAgbW9kX25hbWUsIG1vZF9zcGVjLCBjb2RlID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKICAgICBpZiBydW5fbmFtZSBpcyBOb25lOgogICAgICAgICBydW5fbmFtZSA9IG1vZF9uYW1lCi0gICAgcGtnX25hbWUgPSBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KICAgICBpZiBhbHRlcl9zeXM6Ci0gICAgICAgIHJldHVybiBfcnVuX21vZHVsZV9jb2RlKGNvZGUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKQorICAgICAgICByZXR1cm4gX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLCBtb2Rfc3BlYykKICAgICBlbHNlOgogICAgICAgICAjIExlYXZlIHRoZSBzeXMgbW9kdWxlIGFsb25lCi0gICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwge30sIGluaXRfZ2xvYmFscywgcnVuX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCisgICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwge30sIGluaXRfZ2xvYmFscywgcnVuX25hbWUsIG1vZF9zcGVjKQogCiBkZWYgX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCk6CiAgICAgIyBIZWxwZXIgdGhhdCBnaXZlcyBhIG5pY2VyIGVycm9yIG1lc3NhZ2Ugd2hlbiBhdHRlbXB0aW5nIHRvCkBAIC0yMDQsMTAgKzIxMSw3IEBACiAgICAgICAgICMgVGhhdCBkaWRuJ3Qgd29yaywgc28gdHJ5IGl0IGFzIG5vcm1hbCBzb3VyY2UgY29kZQogICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBjb2RlID0gY29tcGlsZShmLnJlYWQoKSwgZm5hbWUsICdleGVjJykKLSAgICAgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihydW5fbmFtZSwgZm5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcihydW5fbmFtZSwgZm5hbWUpCi0gICAgcmV0dXJuIGNvZGUsIGxvYWRlcgorICAgIHJldHVybiBjb2RlLCBmbmFtZQogCiBkZWYgcnVuX3BhdGgocGF0aF9uYW1lLCBpbml0X2dsb2JhbHM9Tm9uZSwgcnVuX25hbWU9Tm9uZSk6CiAgICAgIiIiRXhlY3V0ZSBjb2RlIGxvY2F0ZWQgYXQgdGhlIHNwZWNpZmllZCBmaWxlc3lzdGVtIGxvY2F0aW9uCkBAIC0yMjMsMTIgKzIyNywxNyBAQAogICAgICAgICBydW5fbmFtZSA9ICI8cnVuX3BhdGg+IgogICAgIHBrZ19uYW1lID0gcnVuX25hbWUucnBhcnRpdGlvbigiLiIpWzBdCiAgICAgaW1wb3J0ZXIgPSBnZXRfaW1wb3J0ZXIocGF0aF9uYW1lKQotICAgIGlmIGlzaW5zdGFuY2UoaW1wb3J0ZXIsICh0eXBlKE5vbmUpLCBpbXAuTnVsbEltcG9ydGVyKSk6CisgICAgIyBUcnlpbmcgdG8gYXZvaWQgaW1wb3J0aW5nIGltcCBzbyBhcyB0byBub3QgY29uc3VtZSB0aGUgZGVwcmVjYXRpb24gd2FybmluZy4KKyAgICBpc19OdWxsSW1wb3J0ZXIgPSBGYWxzZQorICAgIGlmIHR5cGUoaW1wb3J0ZXIpLl9fbW9kdWxlX18gPT0gJ2ltcCc6CisgICAgICAgIGlmIHR5cGUoaW1wb3J0ZXIpLl9fbmFtZV9fID09ICdOdWxsSW1wb3J0ZXInOgorICAgICAgICAgICAgaXNfTnVsbEltcG9ydGVyID0gVHJ1ZQorICAgIGlmIGlzaW5zdGFuY2UoaW1wb3J0ZXIsIHR5cGUoTm9uZSkpIG9yIGlzX051bGxJbXBvcnRlcjoKICAgICAgICAgIyBOb3QgYSB2YWxpZCBzeXMucGF0aCBlbnRyeSwgc28gcnVuIHRoZSBjb2RlIGRpcmVjdGx5CiAgICAgICAgICMgZXhlY2ZpbGUoKSBkb2Vzbid0IGhlbHAgYXMgd2Ugd2FudCB0byBhbGxvdyBjb21waWxlZCBmaWxlcwotICAgICAgICBjb2RlLCBtb2RfbG9hZGVyID0gX2dldF9jb2RlX2Zyb21fZmlsZShydW5fbmFtZSwgcGF0aF9uYW1lKQotICAgICAgICByZXR1cm4gX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLCBwYXRoX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9sb2FkZXIsIHBrZ19uYW1lKQorICAgICAgICBjb2RlLCBmbmFtZSA9IF9nZXRfY29kZV9mcm9tX2ZpbGUocnVuX25hbWUsIHBhdGhfbmFtZSkKKyAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnX25hbWU9cGtnX25hbWUsIHNjcmlwdF9uYW1lPWZuYW1lKQogICAgIGVsc2U6CiAgICAgICAgICMgSW1wb3J0ZXIgaXMgZGVmaW5lZCBmb3IgcGF0aCwgc28gYWRkIGl0IHRvCiAgICAgICAgICMgdGhlIHN0YXJ0IG9mIHN5cy5wYXRoCkBAIC0yNDAsMTIgKzI0OSwxMiBAQAogICAgICAgICAgICAgIyBoYXZlIG5vIGNob2ljZSBhbmQgd2UgaGF2ZSB0byByZW1vdmUgaXQgZXZlbiB3aGlsZSB3ZSByZWFkIHRoZQogICAgICAgICAgICAgIyBjb2RlLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBhIF9fbG9hZGVyX18gYXR0cmlidXRlIGluIHRoZQogICAgICAgICAgICAgIyBleGlzdGluZyBfX21haW5fXyBtb2R1bGUgbWF5IHByZXZlbnQgbG9jYXRpb24gb2YgdGhlIG5ldyBtb2R1bGUuCi0gICAgICAgICAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpCisgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIGNvZGUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQogICAgICAgICAgICAgd2l0aCBfVGVtcE1vZHVsZShydW5fbmFtZSkgYXMgdGVtcF9tb2R1bGUsIFwKICAgICAgICAgICAgICAgICAgX01vZGlmaWVkQXJndjAocGF0aF9uYW1lKToKICAgICAgICAgICAgICAgICBtb2RfZ2xvYmFscyA9IHRlbXBfbW9kdWxlLm1vZHVsZS5fX2RpY3RfXwogICAgICAgICAgICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwgbW9kX2dsb2JhbHMsIGluaXRfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9uYW1lLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkuY29weSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fbmFtZSwgbW9kX3NwZWMsIHBrZ19uYW1lKS5jb3B5KCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzeXMucGF0aC5yZW1vdmUocGF0aF9uYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3NjaGVkLnB5IGIvTGliL3NjaGVkLnB5CmluZGV4IGI5YTdhZDEuLjJlNmIwMGEgMTAwNjQ0Ci0tLSBhL0xpYi9zY2hlZC5weQorKysgYi9MaWIvc2NoZWQucHkKQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYga3dhcmdzIGlzIF9zZW50aW5lbDoKICAgICAgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgIGV2ZW50ID0gRXZlbnQodGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgZXZlbnQgPSBFdmVudCh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQogICAgICAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fcXVldWUsIGV2ZW50KQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50ICMgVGhlIElECisgICAgICAgIHJldHVybiBldmVudCAjIFRoZSBJRAogCiAgICAgZGVmIGVudGVyKHNlbGYsIGRlbGF5LCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudD0oKSwga3dhcmdzPV9zZW50aW5lbCk6CiAgICAgICAgICIiIkEgdmFyaWFudCB0aGF0IHNwZWNpZmllcyB0aGUgdGltZSBhcyBhIHJlbGF0aXZlIHRpbWUuCkBAIC04Miw5ICs4Miw4IEBACiAgICAgICAgIFRoaXMgaXMgYWN0dWFsbHkgdGhlIG1vcmUgY29tbW9ubHkgdXNlZCBpbnRlcmZhY2UuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIHRpbWUgPSBzZWxmLnRpbWVmdW5jKCkgKyBkZWxheQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZW50ZXJhYnModGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKKyAgICAgICAgdGltZSA9IHNlbGYudGltZWZ1bmMoKSArIGRlbGF5CisgICAgICAgIHJldHVybiBzZWxmLmVudGVyYWJzKHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCiAKICAgICBkZWYgY2FuY2VsKHNlbGYsIGV2ZW50KToKICAgICAgICAgIiIiUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHF1ZXVlLgpAQCAtMTY1LDQgKzE2NCw0IEBACiAgICAgICAgICMgdGhlIGFjdHVhbCBvcmRlciB0aGV5IHdvdWxkIGJlIHJldHJpZXZlZC4KICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgICAgICAgZXZlbnRzID0gc2VsZi5fcXVldWVbOl0KLSAgICAgICAgICAgIHJldHVybiBsaXN0KG1hcChoZWFwcS5oZWFwcG9wLCBbZXZlbnRzXSpsZW4oZXZlbnRzKSkpCisgICAgICAgIHJldHVybiBsaXN0KG1hcChoZWFwcS5oZWFwcG9wLCBbZXZlbnRzXSpsZW4oZXZlbnRzKSkpCmRpZmYgLS1naXQgYS9MaWIvc2VsZWN0b3JzLnB5IGIvTGliL3NlbGVjdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU5MjI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3NlbGVjdG9ycy5weQpAQCAtMCwwICsxLDUyNSBAQAorIiIiU2VsZWN0b3JzIG1vZHVsZS4KKworVGhpcyBtb2R1bGUgYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZQorYHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuCisiIiIKKworCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUsIE1hcHBpbmcKK2ltcG9ydCBtYXRoCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCisKKworIyBnZW5lcmljIGV2ZW50cywgdGhhdCBtdXN0IGJlIG1hcHBlZCB0byBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvbmVzCitFVkVOVF9SRUFEID0gKDEgPDwgMCkKK0VWRU5UX1dSSVRFID0gKDEgPDwgMSkKKworCitkZWYgX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaik6CisgICAgIiIiUmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBmaWxlIG9iamVjdC4KKworICAgIFBhcmFtZXRlcnM6CisgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgIFJldHVybnM6CisgICAgY29ycmVzcG9uZGluZyBmaWxlIGRlc2NyaXB0b3IKKworICAgIFJhaXNlczoKKyAgICBWYWx1ZUVycm9yIGlmIHRoZSBvYmplY3QgaXMgaW52YWxpZAorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoZmlsZW9iaiwgaW50KToKKyAgICAgICAgZmQgPSBmaWxlb2JqCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQgPSBpbnQoZmlsZW9iai5maWxlbm8oKSkKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZmlsZSBvYmplY3Q6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInshcn0iLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisgICAgaWYgZmQgPCAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGZpbGUgZGVzY3JpcHRvcjoge30iLmZvcm1hdChmZCkpCisgICAgcmV0dXJuIGZkCisKKworU2VsZWN0b3JLZXkgPSBuYW1lZHR1cGxlKCdTZWxlY3RvcktleScsIFsnZmlsZW9iaicsICdmZCcsICdldmVudHMnLCAnZGF0YSddKQorIiIiT2JqZWN0IHVzZWQgdG8gYXNzb2NpYXRlIGEgZmlsZSBvYmplY3QgdG8gaXRzIGJhY2tpbmcgZmlsZSBkZXNjcmlwdG9yLAorc2VsZWN0ZWQgZXZlbnQgbWFzayBhbmQgYXR0YWNoZWQgZGF0YS4iIiIKKworCitjbGFzcyBfU2VsZWN0b3JNYXBwaW5nKE1hcHBpbmcpOgorICAgICIiIk1hcHBpbmcgb2YgZmlsZSBvYmplY3RzIHRvIHNlbGVjdG9yIGtleXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VsZWN0b3IpOgorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IHNlbGVjdG9yCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5KQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGZpbGVvYmopOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IHNlbGYuX3NlbGVjdG9yLl9maWxlb2JqX2xvb2t1cChmaWxlb2JqKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbGVjdG9yLl9mZF90b19rZXlbZmRdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5KQorCisKK2NsYXNzIEJhc2VTZWxlY3RvcihtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgIiIiU2VsZWN0b3IgYWJzdHJhY3QgYmFzZSBjbGFzcy4KKworICAgIEEgc2VsZWN0b3Igc3VwcG9ydHMgcmVnaXN0ZXJpbmcgZmlsZSBvYmplY3RzIHRvIGJlIG1vbml0b3JlZCBmb3Igc3BlY2lmaWMKKyAgICBJL08gZXZlbnRzLgorCisgICAgQSBmaWxlIG9iamVjdCBpcyBhIGZpbGUgZGVzY3JpcHRvciBvciBhbnkgb2JqZWN0IHdpdGggYSBgZmlsZW5vKClgIG1ldGhvZC4KKyAgICBBbiBhcmJpdHJhcnkgb2JqZWN0IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgZmlsZSBvYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkCisgICAgZm9yIGV4YW1wbGUgdG8gc3RvcmUgY29udGV4dCBpbmZvcm1hdGlvbiwgYSBjYWxsYmFjaywgZXRjLgorCisgICAgQSBzZWxlY3RvciBjYW4gdXNlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zIChzZWxlY3QoKSwgcG9sbCgpLCBlcG9sbCgpLi4uKQorICAgIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uIFRoZSBkZWZhdWx0IGBTZWxlY3RvcmAgY2xhc3MgdXNlcyB0aGUgbW9zdAorICAgIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgZXZlbnRzICAtLSBldmVudHMgdG8gbW9uaXRvciAoYml0d2lzZSBtYXNrIG9mIEVWRU5UX1JFQUR8RVZFTlRfV1JJVEUpCisgICAgICAgIGRhdGEgICAgLS0gYXR0YWNoZWQgZGF0YQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIFNlbGVjdG9yS2V5IGluc3RhbmNlCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICBWYWx1ZUVycm9yIGlmIGV2ZW50cyBpcyBpbnZhbGlkCisgICAgICAgIEtleUVycm9yIGlmIGZpbGVvYmogaXMgYWxyZWFkeSByZWdpc3RlcmVkCisgICAgICAgIE9TRXJyb3IgaWYgZmlsZW9iaiBpcyBjbG9zZWQgb3Igb3RoZXJ3aXNlIGlzIHVuYWNjZXB0YWJsZSB0bworICAgICAgICAgICAgICAgIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxsIChpZiBhIHN5c3RlbSBjYWxsIGlzIG1hZGUpCisKKyAgICAgICAgTm90ZToKKyAgICAgICAgT1NFcnJvciBtYXkgb3IgbWF5IG5vdCBiZSByYWlzZWQKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJVbnJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgS2V5RXJyb3IgaWYgZmlsZW9iaiBpcyBub3QgcmVnaXN0ZXJlZAorCisgICAgICAgIE5vdGU6CisgICAgICAgIElmIGZpbGVvYmogaXMgcmVnaXN0ZXJlZCBidXQgaGFzIHNpbmNlIGJlZW4gY2xvc2VkIHRoaXMgZG9lcworICAgICAgICAqbm90KiByYWlzZSBPU0Vycm9yIChldmVuIGlmIHRoZSB3cmFwcGVkIHN5c2NhbGwgZG9lcykKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBtb2RpZnkoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAiIiJDaGFuZ2UgYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0IG1vbml0b3JlZCBldmVudHMgb3IgYXR0YWNoZWQgZGF0YS4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBldmVudHMgIC0tIGV2ZW50cyB0byBtb25pdG9yIChiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURSkKKyAgICAgICAgZGF0YSAgICAtLSBhdHRhY2hlZCBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKworICAgICAgICBSYWlzZXM6CisgICAgICAgIEFueXRoaW5nIHRoYXQgdW5yZWdpc3RlcigpIG9yIHJlZ2lzdGVyKCkgcmFpc2VzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgcmV0dXJuIHNlbGYucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiJQZXJmb3JtIHRoZSBhY3R1YWwgc2VsZWN0aW9uLCB1bnRpbCBzb21lIG1vbml0b3JlZCBmaWxlIG9iamVjdHMgYXJlCisgICAgICAgIHJlYWR5IG9yIGEgdGltZW91dCBleHBpcmVzLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHRpbWVvdXQgLS0gaWYgdGltZW91dCA+IDAsIHRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdhaXQgdGltZSwgaW4KKyAgICAgICAgICAgICAgICAgICBzZWNvbmRzCisgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwLCB0aGUgc2VsZWN0KCkgY2FsbCB3b24ndCBibG9jaywgYW5kIHdpbGwKKyAgICAgICAgICAgICAgICAgICByZXBvcnQgdGhlIGN1cnJlbnRseSByZWFkeSBmaWxlIG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmUsIHNlbGVjdCgpIHdpbGwgYmxvY2sgdW50aWwgYSBtb25pdG9yZWQKKyAgICAgICAgICAgICAgICAgICBmaWxlIG9iamVjdCBiZWNvbWVzIHJlYWR5CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgbGlzdCBvZiAoa2V5LCBldmVudHMpIGZvciByZWFkeSBmaWxlIG9iamVjdHMKKyAgICAgICAgYGV2ZW50c2AgaXMgYSBiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgc2VsZWN0b3IuCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBnZXRfa2V5KHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHRvIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBmb3IgdGhpcyBmaWxlIG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAgbWFwcGluZyA9IHNlbGYuZ2V0X21hcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBtYXBwaW5nW2ZpbGVvYmpdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGdldF9tYXAoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG1hcHBpbmcgb2YgZmlsZSBvYmplY3RzIHRvIHNlbGVjdG9yIGtleXMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworCitjbGFzcyBfQmFzZVNlbGVjdG9ySW1wbChCYXNlU2VsZWN0b3IpOgorICAgICIiIkJhc2Ugc2VsZWN0b3IgaW1wbGVtZW50YXRpb24uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgdGhpcyBtYXBzIGZpbGUgZGVzY3JpcHRvcnMgdG8ga2V5cworICAgICAgICBzZWxmLl9mZF90b19rZXkgPSB7fQorICAgICAgICAjIHJlYWQtb25seSBtYXBwaW5nIHJldHVybmVkIGJ5IGdldF9tYXAoKQorICAgICAgICBzZWxmLl9tYXAgPSBfU2VsZWN0b3JNYXBwaW5nKHNlbGYpCisKKyAgICBkZWYgX2ZpbGVvYmpfbG9va3VwKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJSZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSBhIGZpbGUgb2JqZWN0LgorCisgICAgICAgIFRoaXMgd3JhcHMgX2ZpbGVvYmpfdG9fZmQoKSB0byBkbyBhbiBleGhhdXN0aXZlIHNlYXJjaCBpbiBjYXNlCisgICAgICAgIHRoZSBvYmplY3QgaXMgaW52YWxpZCBidXQgd2Ugc3RpbGwgaGF2ZSBpdCBpbiBvdXIgbWFwLiAgVGhpcworICAgICAgICBpcyB1c2VkIGJ5IHVucmVnaXN0ZXIoKSBzbyB3ZSBjYW4gdW5yZWdpc3RlciBhbiBvYmplY3QgdGhhdAorICAgICAgICB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGV2ZW4gaWYgaXQgaXMgY2xvc2VkLiAgSXQgaXMgYWxzbworICAgICAgICB1c2VkIGJ5IF9TZWxlY3Rvck1hcHBpbmcuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAjIERvIGFuIGV4aGF1c3RpdmUgc2VhcmNoLgorICAgICAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9mZF90b19rZXkudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYga2V5LmZpbGVvYmogaXMgZmlsZW9iajoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5mZAorICAgICAgICAgICAgIyBSYWlzZSBWYWx1ZUVycm9yIGFmdGVyIGFsbC4KKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBpZiAobm90IGV2ZW50cykgb3IgKGV2ZW50cyAmIH4oRVZFTlRfUkVBRCB8IEVWRU5UX1dSSVRFKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGV2ZW50czogeyFyfSIuZm9ybWF0KGV2ZW50cykpCisKKyAgICAgICAga2V5ID0gU2VsZWN0b3JLZXkoZmlsZW9iaiwgc2VsZi5fZmlsZW9ial9sb29rdXAoZmlsZW9iaiksIGV2ZW50cywgZGF0YSkKKworICAgICAgICBpZiBrZXkuZmQgaW4gc2VsZi5fZmRfdG9fa2V5OgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gKEZEIHt9KSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZpbGVvYmosIGtleS5mZCkpCisKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5W2tleS5mZF0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2ZkX3RvX2tleS5wb3Aoc2VsZi5fZmlsZW9ial9sb29rdXAoZmlsZW9iaikpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgbW9kaWZ5KHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgIyBUT0RPOiBTdWJjbGFzc2VzIGNhbiBwcm9iYWJseSBvcHRpbWl6ZSB0aGlzIGV2ZW4gZnVydGhlci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fZmRfdG9fa2V5W3NlbGYuX2ZpbGVvYmpfbG9va3VwKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICAgICAgaWYgZXZlbnRzICE9IGtleS5ldmVudHM6CisgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIGtleSA9IHNlbGYucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICBlbGlmIGRhdGEgIT0ga2V5LmRhdGE6CisgICAgICAgICAgICAjIFVzZSBhIHNob3J0Y3V0IHRvIHVwZGF0ZSB0aGUgZGF0YS4KKyAgICAgICAgICAgIGtleSA9IGtleS5fcmVwbGFjZShkYXRhPWRhdGEpCisgICAgICAgICAgICBzZWxmLl9mZF90b19rZXlba2V5LmZkXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2ZkX3RvX2tleS5jbGVhcigpCisKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hcAorCisgICAgZGVmIF9rZXlfZnJvbV9mZChzZWxmLCBmZCk6CisgICAgICAgICIiIlJldHVybiB0aGUga2V5IGFzc29jaWF0ZWQgdG8gYSBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmQgLS0gZmlsZSBkZXNjcmlwdG9yCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgY29ycmVzcG9uZGluZyBrZXksIG9yIE5vbmUgaWYgbm90IGZvdW5kCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmRfdG9fa2V5W2ZkXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFNlbGVjdFNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAiIiJTZWxlY3QtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9yZWFkZXJzID0gc2V0KCkKKyAgICAgICAgc2VsZi5fd3JpdGVycyA9IHNldCgpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRlcnMuYWRkKGtleS5mZCkKKyAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl93cml0ZXJzLmFkZChrZXkuZmQpCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgc2VsZi5fcmVhZGVycy5kaXNjYXJkKGtleS5mZCkKKyAgICAgICAgc2VsZi5fd3JpdGVycy5kaXNjYXJkKGtleS5mZCkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIGRlZiBfc2VsZWN0KHNlbGYsIHIsIHcsIF8sIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdChyLCB3LCB3LCB0aW1lb3V0KQorICAgICAgICAgICAgcmV0dXJuIHIsIHcgKyB4LCBbXQorICAgIGVsc2U6CisgICAgICAgIF9zZWxlY3QgPSBzZWxlY3Quc2VsZWN0CisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIHRpbWVvdXQgPSBOb25lIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICByZWFkeSA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHIsIHcsIF8gPSBzZWxmLl9zZWxlY3Qoc2VsZi5fcmVhZGVycywgc2VsZi5fd3JpdGVycywgW10sIHRpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgIHIgPSBzZXQocikKKyAgICAgICAgdyA9IHNldCh3KQorICAgICAgICBmb3IgZmQgaW4gciB8IHc6CisgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICBpZiBmZCBpbiByOgorICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisgICAgICAgICAgICBpZiBmZCBpbiB3OgorICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorCisgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgIHJldHVybiByZWFkeQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgorCisgICAgY2xhc3MgUG9sbFNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAgICAgIiIiUG9sbC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX3BvbGwgPSBzZWxlY3QucG9sbCgpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgcG9sbF9ldmVudHMgPSAwCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIHBvbGxfZXZlbnRzIHw9IHNlbGVjdC5QT0xMSU4KKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIHBvbGxfZXZlbnRzIHw9IHNlbGVjdC5QT0xMT1VUCisgICAgICAgICAgICBzZWxmLl9wb2xsLnJlZ2lzdGVyKGtleS5mZCwgcG9sbF9ldmVudHMpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHNlbGYuX3BvbGwudW5yZWdpc3RlcihrZXkuZmQpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lCisgICAgICAgICAgICBlbGlmIHRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHBvbGwoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsIHJvdW5kIGF3YXkgZnJvbQorICAgICAgICAgICAgICAgICMgemVybyB0byB3YWl0ICphdCBsZWFzdCogdGltZW91dCBzZWNvbmRzLgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBtYXRoLmNlaWwodGltZW91dCAqIDFlMykKKyAgICAgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZF9ldmVudF9saXN0ID0gc2VsZi5fcG9sbC5wb2xsKHRpbWVvdXQpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKKyAgICAgICAgICAgIGZvciBmZCwgZXZlbnQgaW4gZmRfZXZlbnRfbGlzdDoKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LlBPTExJTjoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LlBPTExPVVQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAnZXBvbGwnKToKKworICAgIGNsYXNzIEVwb2xsU2VsZWN0b3IoX0Jhc2VTZWxlY3RvckltcGwpOgorICAgICAgICAiIiJFcG9sbC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsID0gc2VsZWN0LmVwb2xsKCkKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Vwb2xsLmZpbGVubygpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgZXBvbGxfZXZlbnRzID0gMAorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBlcG9sbF9ldmVudHMgfD0gc2VsZWN0LkVQT0xMSU4KKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGVwb2xsX2V2ZW50cyB8PSBzZWxlY3QuRVBPTExPVVQKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsLnJlZ2lzdGVyKGtleS5mZCwgZXBvbGxfZXZlbnRzKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXBvbGwudW5yZWdpc3RlcihrZXkuZmQpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgRkQgd2FzIGNsb3NlZCBzaW5jZSBpdAorICAgICAgICAgICAgICAgICMgd2FzIHJlZ2lzdGVyZWQuCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gLTEKKyAgICAgICAgICAgIGVsaWYgdGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZXBvbGxfd2FpdCgpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwgcm91bmQgYXdheQorICAgICAgICAgICAgICAgICMgZnJvbSB6ZXJvIHRvIHdhaXQgKmF0IGxlYXN0KiB0aW1lb3V0IHNlY29uZHMuCisgICAgICAgICAgICAgICAgdGltZW91dCA9IG1hdGguY2VpbCh0aW1lb3V0ICogMWUzKSAqIDFlLTMKKyAgICAgICAgICAgIG1heF9ldiA9IGxlbihzZWxmLl9mZF90b19rZXkpCisgICAgICAgICAgICByZWFkeSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRfZXZlbnRfbGlzdCA9IHNlbGYuX2Vwb2xsLnBvbGwodGltZW91dCwgbWF4X2V2KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIGZkX2V2ZW50X2xpc3Q6CisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5FUE9MTElOOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuRVBPTExPVVQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAna3F1ZXVlJyk6CisKKyAgICBjbGFzcyBLcXVldWVTZWxlY3RvcihfQmFzZVNlbGVjdG9ySW1wbCk6CisgICAgICAgICIiIktxdWV1ZS1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX2txdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorCisgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fa3F1ZXVlLmZpbGVubygpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgaWYga2V5LmV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAga2V2ID0gc2VsZWN0LmtldmVudChrZXkuZmQsIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIEZEIHdhcyBjbG9zZWQgc2luY2UgaXQKKyAgICAgICAgICAgICAgICAgICAgIyB3YXMgcmVnaXN0ZXJlZC4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYga2V5LmV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0RFTEVURSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAjIFNlZSBjb21tZW50IGFib3ZlLgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KHRpbWVvdXQsIDApCisgICAgICAgICAgICBtYXhfZXYgPSBsZW4oc2VsZi5fZmRfdG9fa2V5KQorICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtldl9saXN0ID0gc2VsZi5fa3F1ZXVlLmNvbnRyb2woTm9uZSwgbWF4X2V2LCB0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3Iga2V2IGluIGtldl9saXN0OgorICAgICAgICAgICAgICAgIGZkID0ga2V2LmlkZW50CisgICAgICAgICAgICAgICAgZmxhZyA9IGtldi5maWx0ZXIKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSBzZWxlY3QuS1FfRklMVEVSX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSBzZWxlY3QuS1FfRklMVEVSX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisKKyMgQ2hvb3NlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uOiByb3VnaGx5LCBlcG9sbHxrcXVldWUgPiBwb2xsID4gc2VsZWN0LgorIyBzZWxlY3QoKSBhbHNvIGNhbid0IGFjY2VwdCBhIEZEID4gRkRfU0VUU0laRSAodXN1YWxseSBhcm91bmQgMTAyNCkKK2lmICdLcXVldWVTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IEtxdWV1ZVNlbGVjdG9yCitlbGlmICdFcG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gRXBvbGxTZWxlY3RvcgorZWxpZiAnUG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gUG9sbFNlbGVjdG9yCitlbHNlOgorICAgIERlZmF1bHRTZWxlY3RvciA9IFNlbGVjdFNlbGVjdG9yCmRpZmYgLS1naXQgYS9MaWIvc2hlbHZlLnB5IGIvTGliL3NoZWx2ZS5weQppbmRleCBjYzE4MTVlLi5jZWY1ODBlIDEwMDY0NAotLS0gYS9MaWIvc2hlbHZlLnB5CisrKyBiL0xpYi9zaGVsdmUucHkKQEAgLTYxLDcgKzYxLDcgQEAKIAogaW1wb3J0IGNvbGxlY3Rpb25zCiAKLV9fYWxsX18gPSBbIlNoZWxmIiwiQnNkRGJTaGVsZiIsIkRiZmlsZW5hbWVTaGVsZiIsIm9wZW4iXQorX19hbGxfXyA9IFsiU2hlbGYiLCAiQnNkRGJTaGVsZiIsICJEYmZpbGVuYW1lU2hlbGYiLCAib3BlbiJdCiAKIGNsYXNzIF9DbG9zZWREaWN0KGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nKToKICAgICAnTWFya2VyIGZvciBhIGNsb3NlZCBkaWN0LiAgQWNjZXNzIGF0dGVtcHRzIHJhaXNlIGEgVmFsdWVFcnJvci4nCkBAIC0xMzEsNiArMTMxLDEyIEBACiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLnN5bmMoKQogICAgICAgICB0cnk6CkBAIC0xNDcsNiArMTUzLDcgQEAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ3dyaXRlYmFjaycpOgogICAgICAgICAgICAgIyBfX2luaXRfXyBkaWRuJ3Qgc3VjY2VlZCwgc28gZG9uJ3QgYm90aGVyIGNsb3NpbmcKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzM5MDA3IGZvciBkZXRhaWxzCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi9zaHV0aWwucHkgYi9MaWIvc2h1dGlsLnB5CmluZGV4IDVhNGQ0ZjYuLjBjZDZlYzQgMTAwNjQ0Ci0tLSBhL0xpYi9zaHV0aWwucHkKKysrIGIvTGliL3NodXRpbC5weQpAQCAtMzksMTcgKzM5LDIwIEBACiAgICAgICAgICAgICJpZ25vcmVfcGF0dGVybnMiLCAiY2hvd24iLCAid2hpY2giXQogICAgICAgICAgICAjIGRpc2tfdXNhZ2UgaXMgYWRkZWQgbGF0ZXIsIGlmIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0KIAotY2xhc3MgRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBFcnJvcihPU0Vycm9yKToKICAgICBwYXNzCiAKLWNsYXNzIFNwZWNpYWxGaWxlRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBTYW1lRmlsZUVycm9yKEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiIiIgorCitjbGFzcyBTcGVjaWFsRmlsZUVycm9yKE9TRXJyb3IpOgogICAgICIiIlJhaXNlZCB3aGVuIHRyeWluZyB0byBkbyBhIGtpbmQgb2Ygb3BlcmF0aW9uIChlLmcuIGNvcHlpbmcpIHdoaWNoIGlzCiAgICAgbm90IHN1cHBvcnRlZCBvbiBhIHNwZWNpYWwgZmlsZSAoZS5nLiBhIG5hbWVkIHBpcGUpIiIiCiAKLWNsYXNzIEV4ZWNFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIEV4ZWNFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIiIiCiAKLWNsYXNzIFJlYWRFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIFJlYWRFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhbiBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIiIiCiAKIGNsYXNzIFJlZ2lzdHJ5RXJyb3IoRXhjZXB0aW9uKToKQEAgLTU3LDExICs2MCw2IEBACiAgICAgYW5kIHVucGFja2luZyByZWdpc3RlcmllcyBmYWlscyIiIgogCiAKLXRyeToKLSAgICBXaW5kb3dzRXJyb3IKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgV2luZG93c0Vycm9yID0gTm9uZQotCiBkZWYgY29weWZpbGVvYmooZnNyYywgZmRzdCwgbGVuZ3RoPTE2KjEwMjQpOgogICAgICIiImNvcHkgZGF0YSBmcm9tIGZpbGUtbGlrZSBvYmplY3QgZnNyYyB0byBmaWxlLWxpa2Ugb2JqZWN0IGZkc3QiIiIKICAgICB3aGlsZSAxOgpAQCAtOTAsNyArODgsNyBAQAogCiAgICAgIiIiCiAgICAgaWYgX3NhbWVmaWxlKHNyYywgZHN0KToKLSAgICAgICAgcmFpc2UgRXJyb3IoImAlc2AgYW5kIGAlc2AgYXJlIHRoZSBzYW1lIGZpbGUiICUgKHNyYywgZHN0KSkKKyAgICAgICAgcmFpc2UgU2FtZUZpbGVFcnJvcigieyFyfSBhbmQgeyFyfSBhcmUgdGhlIHNhbWUgZmlsZSIuZm9ybWF0KHNyYywgZHN0KSkKIAogICAgIGZvciBmbiBpbiBbc3JjLCBkc3RdOgogICAgICAgICB0cnk6CkBAIC0yMjEsNiArMjE5LDkgQEAKICAgICBJZiBmb2xsb3dfc3ltbGlua3MgaXMgZmFsc2UsIHN5bWxpbmtzIHdvbid0IGJlIGZvbGxvd2VkLiBUaGlzCiAgICAgcmVzZW1ibGVzIEdOVSdzICJjcCAtUCBzcmMgZHN0Ii4KIAorICAgIElmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUsIGEgU2FtZUZpbGVFcnJvciB3aWxsIGJlCisgICAgcmFpc2VkLgorCiAgICAgIiIiCiAgICAgaWYgb3MucGF0aC5pc2Rpcihkc3QpOgogICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZHN0LCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCkBAIC0zMjksMTUgKzMzMCwxMyBAQAogICAgICAgICAjIGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXMKICAgICAgICAgZXhjZXB0IEVycm9yIGFzIGVycjoKICAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXJyLmFyZ3NbMF0pCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQogICAgIHRyeToKICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCiAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgotICAgICAgICBpZiBXaW5kb3dzRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2Uod2h5LCBXaW5kb3dzRXJyb3IpOgotICAgICAgICAgICAgIyBDb3B5aW5nIGZpbGUgYWNjZXNzIHRpbWVzIG1heSBmYWlsIG9uIFdpbmRvd3MKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKKyAgICAgICAgIyBDb3B5aW5nIGZpbGUgYWNjZXNzIHRpbWVzIG1heSBmYWlsIG9uIFdpbmRvd3MKKyAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CiAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgIGlmIGVycm9yczoKICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQpAQCAtMzU2LDI0ICszNTUsMjQgQEAKICAgICBuYW1lcyA9IFtdCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIG9uZXJyb3Iob3MubGlzdGRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZGUgPSBvcy5sc3RhdChmdWxsbmFtZSkuc3RfbW9kZQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbW9kZSA9IDAKICAgICAgICAgaWYgc3RhdC5TX0lTRElSKG1vZGUpOgogICAgICAgICAgICAgX3JtdHJlZV91bnNhZmUoZnVsbG5hbWUsIG9uZXJyb3IpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgb25lcnJvcihvcy51bmxpbmssIGZ1bGxuYW1lLCBzeXMuZXhjX2luZm8oKSkKICAgICB0cnk6CiAgICAgICAgIG9zLnJtZGlyKHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBvbmVycm9yKG9zLnJtZGlyLCBwYXRoLCBzeXMuZXhjX2luZm8oKSkKIAogIyBWZXJzaW9uIHVzaW5nIGZkLWJhc2VkIEFQSXMgdG8gcHJvdGVjdCBhZ2FpbnN0IHJhY2VzCkBAIC00NjQsNyArNDYzLDcgQEAKICAgICAgICAgICAgICAgICBfcm10cmVlX3NhZmVfZmQoZmQsIHBhdGgsIG9uZXJyb3IpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihvcy5ybWRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9zaXRlLnB5IGIvTGliL3NpdGUucHkKaW5kZXggN2UwOTcwMS4uYzAxNDliNCAxMDA2NDQKLS0tIGEvTGliL3NpdGUucHkKKysrIGIvTGliL3NpdGUucHkKQEAgLTU4LDE3ICs1OCwyMCBAQAogYmVjYXVzZSBiYXIucHRoIGNvbWVzIGFscGhhYmV0aWNhbGx5IGJlZm9yZSBmb28ucHRoOyBhbmQgc3BhbSBpcwogb21pdHRlZCBiZWNhdXNlIGl0IGlzIG5vdCBtZW50aW9uZWQgaW4gZWl0aGVyIHBhdGggY29uZmlndXJhdGlvbiBmaWxlLgogCi1BZnRlciB0aGVzZSBwYXRoIG1hbmlwdWxhdGlvbnMsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBpbXBvcnQgYSBtb2R1bGUKK1RoZSByZWFkbGluZSBtb2R1bGUgaXMgYWxzbyBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgdG8gZW5hYmxlCitjb21wbGV0aW9uIGZvciBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBpbgorc2l0ZWN1c3RvbWl6ZSwgdXNlcmN1c3RvbWl6ZSBvciBQWVRIT05TVEFSVFVQLgorCitBZnRlciB0aGVzZSBvcGVyYXRpb25zLCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gaW1wb3J0IGEgbW9kdWxlCiBuYW1lZCBzaXRlY3VzdG9taXplLCB3aGljaCBjYW4gcGVyZm9ybSBhcmJpdHJhcnkgYWRkaXRpb25hbAogc2l0ZS1zcGVjaWZpYyBjdXN0b21pemF0aW9ucy4gIElmIHRoaXMgaW1wb3J0IGZhaWxzIHdpdGggYW4KIEltcG9ydEVycm9yIGV4Y2VwdGlvbiwgaXQgaXMgc2lsZW50bHkgaWdub3JlZC4KLQogIiIiCiAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IHJlCiBpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBfc2l0ZWJ1aWx0aW5zCiAKICMgUHJlZml4ZXMgZm9yIHNpdGUtcGFja2FnZXM7IGFkZCBhZGRpdGlvbmFsIHByZWZpeGVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCiBQUkVGSVhFUyA9IFtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXhdCkBAIC0xNDYsMTQgKzE0OSwxNCBAQAogICAgICAgIGFuZCBhZGQgdGhhdCB0byBrbm93bl9wYXRocywgb3IgZXhlY3V0ZSBpdCBpZiBpdCBzdGFydHMgd2l0aCAnaW1wb3J0ICcuCiAgICAgIiIiCiAgICAgaWYga25vd25fcGF0aHMgaXMgTm9uZToKLSAgICAgICAgX2luaXRfcGF0aGluZm8oKQorICAgICAgICBrbm93bl9wYXRocyA9IF9pbml0X3BhdGhpbmZvKCkKICAgICAgICAgcmVzZXQgPSAxCiAgICAgZWxzZToKICAgICAgICAgcmVzZXQgPSAwCiAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oc2l0ZWRpciwgbmFtZSkKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZ1bGxuYW1lLCAiciIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybgogICAgIHdpdGggZjoKICAgICAgICAgZm9yIG4sIGxpbmUgaW4gZW51bWVyYXRlKGYpOgpAQCAtMTk2LDcgKzE5OSw3IEBACiAgICAgICAgIGtub3duX3BhdGhzLmFkZChzaXRlZGlyY2FzZSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzaXRlZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuCiAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBuYW1lcyBpZiBuYW1lLmVuZHN3aXRoKCIucHRoIildCiAgICAgZm9yIG5hbWUgaW4gc29ydGVkKG5hbWVzKToKQEAgLTMwMCw5ICszMDMsNyBAQAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgc2Vlbi5hZGQocHJlZml4KQogCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCi0gICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKyAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKQEAgLTMyNSwyNyArMzI2LDE1IEBACiAgICAgIiIiQWRkIHNpdGUtcGFja2FnZXMgKGFuZCBwb3NzaWJseSBzaXRlLXB5dGhvbikgdG8gc3lzLnBhdGgiIiIKICAgICBmb3Igc2l0ZWRpciBpbiBnZXRzaXRlcGFja2FnZXMocHJlZml4ZXMpOgogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNpdGVkaXIpOgorICAgICAgICAgICAgaWYgInNpdGUtcHl0aG9uIiBpbiBzaXRlZGlyOgorICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJyJzaXRlLXB5dGhvbiIgZGlyZWN0b3JpZXMgd2lsbCBub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1cHBvcnRlZCBpbiAzLjUgYW55bW9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBhZGRzaXRlZGlyKHNpdGVkaXIsIGtub3duX3BhdGhzKQogCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCiAKLWRlZiBzZXRCRUdJTkxJQlBBVEgoKToKLSAgICAiIiJUaGUgT1MvMiBFTVggcG9ydCBoYXMgb3B0aW9uYWwgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBkbyBkb3VibGUgZHV0eQotICAgIGFzIERMTHMgKGFuZCBtdXN0IHVzZSB0aGUgLkRMTCBmaWxlIGV4dGVuc2lvbikgZm9yIG90aGVyIGV4dGVuc2lvbnMuCi0gICAgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggbmVlZHMgdG8gYmUgYW1lbmRlZCBzbyB0aGVzZSB3aWxsIGJlIGZvdW5kCi0gICAgZHVyaW5nIG1vZHVsZSBpbXBvcnQuICBVc2UgQkVHSU5MSUJQQVRIIHNvIHRoYXQgdGhlc2UgYXJlIGF0IHRoZSBzdGFydAotICAgIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLgotCi0gICAgIiIiCi0gICAgZGxscGF0aCA9IG9zLnBhdGguam9pbihzeXMucHJlZml4LCAiTGliIiwgImxpYi1keW5sb2FkIikKLSAgICBsaWJwYXRoID0gb3MuZW52aXJvblsnQkVHSU5MSUJQQVRIJ10uc3BsaXQoJzsnKQotICAgIGlmIGxpYnBhdGhbLTFdOgotICAgICAgICBsaWJwYXRoLmFwcGVuZChkbGxwYXRoKQotICAgIGVsc2U6Ci0gICAgICAgIGxpYnBhdGhbLTFdID0gZGxscGF0aAotICAgIG9zLmVudmlyb25bJ0JFR0lOTElCUEFUSCddID0gJzsnLmpvaW4obGlicGF0aCkKLQotCiBkZWYgc2V0cXVpdCgpOgogICAgICIiIkRlZmluZSBuZXcgYnVpbHRpbnMgJ3F1aXQnIGFuZCAnZXhpdCcuCiAKQEAgLTM2MCwxMjYgKzM0OSw5NCBAQAogICAgIGVsc2U6CiAgICAgICAgIGVvZiA9ICdDdHJsLUQgKGkuZS4gRU9GKScKIAotICAgIGNsYXNzIFF1aXR0ZXIob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gJ1VzZSAlcygpIG9yICVzIHRvIGV4aXQnICUgKHNlbGYubmFtZSwgZW9mKQotICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgY29kZT1Ob25lKToKLSAgICAgICAgICAgICMgU2hlbGxzIGxpa2UgSURMRSBjYXRjaCB0aGUgU3lzdGVtRXhpdCwgYnV0IGxpc3RlbiB3aGVuIHRoZWlyCi0gICAgICAgICAgICAjIHN0ZGluIHdyYXBwZXIgaXMgY2xvc2VkLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChjb2RlKQotICAgIGJ1aWx0aW5zLnF1aXQgPSBRdWl0dGVyKCdxdWl0JykKLSAgICBidWlsdGlucy5leGl0ID0gUXVpdHRlcignZXhpdCcpCisgICAgYnVpbHRpbnMucXVpdCA9IF9zaXRlYnVpbHRpbnMuUXVpdHRlcigncXVpdCcsIGVvZikKKyAgICBidWlsdGlucy5leGl0ID0gX3NpdGVidWlsdGlucy5RdWl0dGVyKCdleGl0JywgZW9mKQogCiAKLWNsYXNzIF9QcmludGVyKG9iamVjdCk6Ci0gICAgIiIiaW50ZXJhY3RpdmUgcHJvbXB0IG9iamVjdHMgZm9yIHByaW50aW5nIHRoZSBsaWNlbnNlIHRleHQsIGEgbGlzdCBvZgotICAgIGNvbnRyaWJ1dG9ycyBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2UuIiIiCi0KLSAgICBNQVhMSU5FUyA9IDIzCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGF0YSwgZmlsZXM9KCksIGRpcnM9KCkpOgotICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5fX2RhdGEgPSBkYXRhCi0gICAgICAgIHNlbGYuX19maWxlcyA9IGZpbGVzCi0gICAgICAgIHNlbGYuX19kaXJzID0gZGlycwotICAgICAgICBzZWxmLl9fbGluZXMgPSBOb25lCi0KLSAgICBkZWYgX19zZXR1cChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fX2xpbmVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGRhdGEgPSBOb25lCi0gICAgICAgIGZvciBkaXIgaW4gc2VsZi5fX2RpcnM6Ci0gICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5fX2ZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpciwgZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICJyIikKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fX2RhdGEKLSAgICAgICAgc2VsZi5fX2xpbmVzID0gZGF0YS5zcGxpdCgnXG4nKQotICAgICAgICBzZWxmLl9fbGluZWNudCA9IGxlbihzZWxmLl9fbGluZXMpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX19zZXR1cCgpCi0gICAgICAgIGlmIGxlbihzZWxmLl9fbGluZXMpIDw9IHNlbGYuTUFYTElORVM6Ci0gICAgICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYuX19saW5lcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiVHlwZSAlcygpIHRvIHNlZSB0aGUgZnVsbCAlcyB0ZXh0IiAlICgoc2VsZi5fX25hbWUsKSoyKQotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9fc2V0dXAoKQotICAgICAgICBwcm9tcHQgPSAnSGl0IFJldHVybiBmb3IgbW9yZSwgb3IgcSAoYW5kIFJldHVybikgdG8gcXVpdDogJwotICAgICAgICBsaW5lbm8gPSAwCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGluZW5vLCBsaW5lbm8gKyBzZWxmLk1BWExJTkVTKToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5fX2xpbmVzW2ldKQotICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGluZW5vICs9IHNlbGYuTUFYTElORVMKLSAgICAgICAgICAgICAgICBrZXkgPSBOb25lCi0gICAgICAgICAgICAgICAgd2hpbGUga2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IGlucHV0KHByb21wdCkKLSAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiAoJycsICdxJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBOb25lCi0gICAgICAgICAgICAgICAgaWYga2V5ID09ICdxJzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLQogZGVmIHNldGNvcHlyaWdodCgpOgogICAgICIiIlNldCAnY29weXJpZ2h0JyBhbmQgJ2NyZWRpdHMnIGluIGJ1aWx0aW5zIiIiCi0gICAgYnVpbHRpbnMuY29weXJpZ2h0ID0gX1ByaW50ZXIoImNvcHlyaWdodCIsIHN5cy5jb3B5cmlnaHQpCisgICAgYnVpbHRpbnMuY29weXJpZ2h0ID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigiY29weXJpZ2h0Iiwgc3lzLmNvcHlyaWdodCkKICAgICBpZiBzeXMucGxhdGZvcm1bOjRdID09ICdqYXZhJzoKLSAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9QcmludGVyKAorICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigKICAgICAgICAgICAgICJjcmVkaXRzIiwKICAgICAgICAgICAgICJKeXRob24gaXMgbWFpbnRhaW5lZCBieSB0aGUgSnl0aG9uIGRldmVsb3BlcnMgKHd3dy5qeXRob24ub3JnKS4iKQogICAgIGVsc2U6Ci0gICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfUHJpbnRlcigiY3JlZGl0cyIsICIiIlwKKyAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoImNyZWRpdHMiLCAiIiJcCiAgICAgVGhhbmtzIHRvIENXSSwgQ05SSSwgQmVPcGVuLmNvbSwgWm9wZSBDb3Jwb3JhdGlvbiBhbmQgYSBjYXN0IG9mIHRob3VzYW5kcwogICAgIGZvciBzdXBwb3J0aW5nIFB5dGhvbiBkZXZlbG9wbWVudC4gIFNlZSB3d3cucHl0aG9uLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIiIpCi0gICAgaGVyZSA9IG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykKLSAgICBidWlsdGlucy5saWNlbnNlID0gX1ByaW50ZXIoCisgICAgZmlsZXMsIGRpcnMgPSBbXSwgW10KKyAgICAjIE5vdCBhbGwgbW9kdWxlcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhIF9fZmlsZV9fIGF0dHJpYnV0ZS4gIFNlZQorICAgICMgUEVQIDQyMCBmb3IgbW9yZSBkZXRhaWxzLgorICAgIGlmIGhhc2F0dHIob3MsICdfX2ZpbGVfXycpOgorICAgICAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKQorICAgICAgICBmaWxlcy5leHRlbmQoWyJMSUNFTlNFLnR4dCIsICJMSUNFTlNFIl0pCisgICAgICAgIGRpcnMuZXh0ZW5kKFtvcy5wYXRoLmpvaW4oaGVyZSwgb3MucGFyZGlyKSwgaGVyZSwgb3MuY3VyZGlyXSkKKyAgICBidWlsdGlucy5saWNlbnNlID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigKICAgICAgICAgImxpY2Vuc2UiLAotICAgICAgICAiU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8lLjVzL2xpY2Vuc2UvIiAlIHN5cy52ZXJzaW9uLAotICAgICAgICBbIkxJQ0VOU0UudHh0IiwgIkxJQ0VOU0UiXSwKLSAgICAgICAgW29zLnBhdGguam9pbihoZXJlLCBvcy5wYXJkaXIpLCBoZXJlLCBvcy5jdXJkaXJdKQorICAgICAgICAiU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZS8iLAorICAgICAgICBmaWxlcywgZGlycykKIAogCi1jbGFzcyBfSGVscGVyKG9iamVjdCk6Ci0gICAgIiIiRGVmaW5lIHRoZSBidWlsdGluICdoZWxwJy4KLSAgICBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgcHlkb2MuaGVscCAod2l0aCBhIHR3aXN0KS4KLQotICAgICIiIgotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlR5cGUgaGVscCgpIGZvciBpbnRlcmFjdGl2ZSBoZWxwLCAiIFwKLSAgICAgICAgICAgICAgICJvciBoZWxwKG9iamVjdCkgZm9yIGhlbHAgYWJvdXQgb2JqZWN0LiIKLSAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIGltcG9ydCBweWRvYwotICAgICAgICByZXR1cm4gcHlkb2MuaGVscCgqYXJncywgKiprd2RzKQotCiBkZWYgc2V0aGVscGVyKCk6Ci0gICAgYnVpbHRpbnMuaGVscCA9IF9IZWxwZXIoKQorICAgIGJ1aWx0aW5zLmhlbHAgPSBfc2l0ZWJ1aWx0aW5zLl9IZWxwZXIoKQorCitkZWYgZW5hYmxlcmxjb21wbGV0ZXIoKToKKyAgICAiIiJFbmFibGUgZGVmYXVsdCByZWFkbGluZSBjb25maWd1cmF0aW9uIG9uIGludGVyYWN0aXZlIHByb21wdHMsIGJ5CisgICAgcmVnaXN0ZXJpbmcgYSBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXy4KKworICAgIElmIHRoZSByZWFkbGluZSBtb2R1bGUgY2FuIGJlIGltcG9ydGVkLCB0aGUgaG9vayB3aWxsIHNldCB0aGUgVGFiIGtleQorICAgIGFzIGNvbXBsZXRpb24ga2V5IGFuZCByZWdpc3RlciB+Ly5weXRob25faGlzdG9yeSBhcyBoaXN0b3J5IGZpbGUuCisgICAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluIHRoZSBzaXRlY3VzdG9taXplIG9yIHVzZXJjdXN0b21pemUgbW9kdWxlLAorICAgIG9yIGluIGEgUFlUSE9OU1RBUlRVUCBmaWxlLgorICAgICIiIgorICAgIGRlZiByZWdpc3Rlcl9yZWFkbGluZSgpOgorICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCByZWFkbGluZQorICAgICAgICAgICAgaW1wb3J0IHJsY29tcGxldGVyCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUmVhZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gKGNvbmZpZykgZmlsZSBtYXkgbm90IGJlIGVub3VnaCB0byBzZXQgYQorICAgICAgICAjIGNvbXBsZXRpb24ga2V5LCBzbyB3ZSBzZXQgb25lIGZpcnN0IGFuZCB0aGVuIHJlYWQgdGhlIGZpbGUuCisgICAgICAgIHJlYWRsaW5lX2RvYyA9IGdldGF0dHIocmVhZGxpbmUsICdfX2RvY19fJywgJycpCisgICAgICAgIGlmIHJlYWRsaW5lX2RvYyBpcyBub3QgTm9uZSBhbmQgJ2xpYmVkaXQnIGluIHJlYWRsaW5lX2RvYzoKKyAgICAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCdiaW5kIF5JIHJsX2NvbXBsZXRlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCd0YWI6IGNvbXBsZXRlJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkbGluZS5yZWFkX2luaXRfZmlsZSgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBBbiBPU0Vycm9yIGhlcmUgY291bGQgaGF2ZSBtYW55IGNhdXNlcywgYnV0IHRoZSBtb3N0IGxpa2VseSBvbmUKKyAgICAgICAgICAgICMgaXMgdGhhdCB0aGVyZSdzIG5vIC5pbnB1dHJjIGZpbGUgKG9yIC5lZGl0cmMgZmlsZSBpbiB0aGUgY2FzZSBvZgorICAgICAgICAgICAgIyBNYWMgT1MgWCArIGxpYmVkaXQpIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gIEluIHRoYXQgY2FzZSwgd2UKKyAgICAgICAgICAgICMgd2FudCB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiByZWFkbGluZS5nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCgpID09IDA6CisgICAgICAgICAgICAjIElmIG5vIGhpc3Rvcnkgd2FzIGxvYWRlZCwgZGVmYXVsdCB0byAucHl0aG9uX2hpc3RvcnkuCisgICAgICAgICAgICAjIFRoZSBndWFyZCBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgZG91YmxpbmcgaGlzdG9yeSBzaXplIGF0CisgICAgICAgICAgICAjIGVhY2ggaW50ZXJwcmV0ZXIgZXhpdCB3aGVuIHJlYWRsaW5lIHdhcyBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICMgdGhyb3VnaCBhIFBZVEhPTlNUQVJUVVAgaG9vaywgc2VlOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTg0NSNtc2cxOTg2MzYKKyAgICAgICAgICAgIGhpc3RvcnkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcucHl0aG9uX2hpc3RvcnknKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RvcnkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0b3J5KQorCisgICAgc3lzLl9faW50ZXJhY3RpdmVob29rX18gPSByZWdpc3Rlcl9yZWFkbGluZQogCiBkZWYgYWxpYXNtYmNzKCk6CiAgICAgIiIiT24gV2luZG93cywgc29tZSBkZWZhdWx0IGVuY29kaW5ncyBhcmUgbm90IHByb3ZpZGVkIGJ5IFB5dGhvbiwKICAgICB3aGlsZSB0aGV5IGFyZSBhbHdheXMgYXZhaWxhYmxlIGFzICJtYmNzIiBpbiBlYWNoIGxvY2FsZS4gTWFrZQogICAgIHRoZW0gdXNhYmxlIGJ5IGFsaWFzaW5nIHRvICJtYmNzIiBpbiBzdWNoIGEgY2FzZS4iIiIKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgaW1wb3J0IGxvY2FsZSwgY29kZWNzCi0gICAgICAgIGVuYyA9IGxvY2FsZS5nZXRkZWZhdWx0bG9jYWxlKClbMV0KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlLCBjb2RlY3MKKyAgICAgICAgZW5jID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCiAgICAgICAgIGlmIGVuYy5zdGFydHN3aXRoKCdjcCcpOiAgICAgICAgICAgICMgImNwKioqIiA/CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY29kZWNzLmxvb2t1cChlbmMpCkBAIC00ODgsOCArNDQ1LDcgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuX2NhY2hlW2VuY10gPSBlbmNvZGluZ3MuX3Vua25vd24KICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzW2VuY10gPSAnbWJjcycKIAotCi1DT05GSUdfTElORSA9IHJlLmNvbXBpbGUocideKD9QPGtleT4oXHd8Wy1fXSkrKVxzKj1ccyooP1A8dmFsdWU+LiopXHMqJCcpCitDT05GSUdfTElORSA9IHInXig/UDxrZXk+KFx3fFstX10pKylccyo9XHMqKD9QPHZhbHVlPi4qKVxzKiQnCiAKIGRlZiB2ZW52KGtub3duX3BhdGhzKToKICAgICBnbG9iYWwgUFJFRklYRVMsIEVOQUJMRV9VU0VSX1NJVEUKQEAgLTUxMiwxMiArNDY4LDE0IEBACiAgICAgICAgIF0KIAogICAgIGlmIGNhbmRpZGF0ZV9jb25mczoKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGNvbmZpZ19saW5lID0gcmUuY29tcGlsZShDT05GSUdfTElORSkKICAgICAgICAgdmlydHVhbF9jb25mID0gY2FuZGlkYXRlX2NvbmZzWzBdCiAgICAgICAgIHN5c3RlbV9zaXRlID0gInRydWUiCiAgICAgICAgIHdpdGggb3Blbih2aXJ0dWFsX2NvbmYpIGFzIGY6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBtID0gQ09ORklHX0xJTkUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBtID0gY29uZmlnX2xpbmUubWF0Y2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgICAgICBkID0gbS5ncm91cGRpY3QoKQogICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlID0gZFsna2V5J10ubG93ZXIoKSwgZFsndmFsdWUnXQpAQCAtNTg5LDExICs1NDcsMTAgQEAKICAgICAgICAgRU5BQkxFX1VTRVJfU0lURSA9IGNoZWNrX2VuYWJsZXVzZXJzaXRlKCkKICAgICBrbm93bl9wYXRocyA9IGFkZHVzZXJzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpCiAgICAga25vd25fcGF0aHMgPSBhZGRzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdvczJlbXgnOgotICAgICAgICBzZXRCRUdJTkxJQlBBVEgoKQogICAgIHNldHF1aXQoKQogICAgIHNldGNvcHlyaWdodCgpCiAgICAgc2V0aGVscGVyKCkKKyAgICBlbmFibGVybGNvbXBsZXRlcigpCiAgICAgYWxpYXNtYmNzKCkKICAgICBleGVjc2l0ZWN1c3RvbWl6ZSgpCiAgICAgaWYgRU5BQkxFX1VTRVJfU0lURToKZGlmZiAtLWdpdCBhL0xpYi9zbXRwZC5weSBiL0xpYi9zbXRwZC5weQppbmRleCA3NzhkNmQ2Li4xZmExNTdhIDEwMDc1NQotLS0gYS9MaWIvc210cGQucHkKKysrIGIvTGliL3NtdHBkLnB5CkBAIC0xMjEsOCArMTIxLDkgQEAKICAgICAgICAgfSkKICAgICBtYXhfY29tbWFuZF9zaXplX2xpbWl0ID0gbWF4KGNvbW1hbmRfc2l6ZV9saW1pdHMudmFsdWVzKCkpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQpOgotICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlciwgY29ubiwgYWRkciwgZGF0YV9zaXplX2xpbWl0PURBVEFfU0laRV9ERUZBVUxULAorICAgICAgICAgICAgICAgICBtYXA9Tm9uZSk6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubiwgbWFwPW1hcCkKICAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgogICAgICAgICBzZWxmLmNvbm4gPSBjb25uCiAgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKQEAgLTEzNyw3ICsxMzgsNyBAQAogICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wZWVyID0gY29ubi5nZXRwZWVybmFtZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAjIGEgcmFjZSBjb25kaXRpb24gIG1heSBvY2N1ciBpZiB0aGUgb3RoZXIgZW5kIGlzIGNsb3NpbmcKICAgICAgICAgICAgICMgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHBlZXJuYW1lCiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTU3NiwxMSArNTc3LDExIEBACiAgICAgY2hhbm5lbF9jbGFzcyA9IFNNVFBDaGFubmVsCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jYWxhZGRyLCByZW1vdGVhZGRyLAotICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQpOgorICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQsIG1hcD1Ob25lKToKICAgICAgICAgc2VsZi5fbG9jYWxhZGRyID0gbG9jYWxhZGRyCiAgICAgICAgIHNlbGYuX3JlbW90ZWFkZHIgPSByZW1vdGVhZGRyCiAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gZGF0YV9zaXplX2xpbWl0Ci0gICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9bWFwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgICMgdHJ5IHRvIHJlLXVzZSBhIHNlcnZlciBwb3J0IGlmIHBvc3NpYmxlCkBAIC01OTcsNyArNTk4LDggQEAKIAogICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6CiAgICAgICAgIHByaW50KCdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKSwgZmlsZT1ERUJVR1NUUkVBTSkKLSAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCkKKyAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXApCiAKICAgICAjIEFQSSBmb3IgImRvaW5nIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgbWVzc2FnZSIKICAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKToKQEAgLTY2OCw3ICs2NzAsNyBAQAogICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQUmVjaXBpZW50c1JlZnVzZWQgYXMgZToKICAgICAgICAgICAgIHByaW50KCdnb3QgU01UUFJlY2lwaWVudHNSZWZ1c2VkJywgZmlsZT1ERUJVR1NUUkVBTSkKICAgICAgICAgICAgIHJlZnVzZWQgPSBlLnJlY2lwaWVudHMKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUEV4Y2VwdGlvbikgYXMgZToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzbXRwbGliLlNNVFBFeGNlcHRpb24pIGFzIGU6CiAgICAgICAgICAgICBwcmludCgnZ290JywgZS5fX2NsYXNzX18sIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgICAgICAjIEFsbCByZWNpcGllbnRzIHdlcmUgcmVmdXNlZC4gIElmIHRoZSBleGNlcHRpb24gaGFkIGFuIGFzc29jaWF0ZWQKICAgICAgICAgICAgICMgZXJyb3IgY29kZSwgdXNlIGl0LiAgT3RoZXJ3aXNlLGZha2UgaXQgd2l0aCBhIG5vbi10cmlnZ2VyaW5nCkBAIC03NzgsNyArNzgwLDcgQEAKICAgICAgICAgaWYgb3B0IGluICgnLWgnLCAnLS1oZWxwJyk6CiAgICAgICAgICAgICB1c2FnZSgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1WJywgJy0tdmVyc2lvbicpOgotICAgICAgICAgICAgcHJpbnQoX192ZXJzaW9uX18sIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHByaW50KF9fdmVyc2lvbl9fKQogICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctbicsICctLW5vc2V0dWlkJyk6CiAgICAgICAgICAgICBvcHRpb25zLnNldHVpZCA9IDAKQEAgLTg1MCw4ICs4NTIsNyBAQAogICAgICAgICBub2JvZHkgPSBwd2QuZ2V0cHduYW0oJ25vYm9keScpWzJdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnNldHVpZChub2JvZHkpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQRVJNOiByYWlzZQorICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yOgogICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBzZXR1aWQgIm5vYm9keSI7IHRyeSBydW5uaW5nIHdpdGggLW4gb3B0aW9uLicsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NtdHBsaWIucHkgYi9MaWIvc210cGxpYi5weQppbmRleCA1N2YxODFiLi4wOWI0ZWE2IDEwMDc1NQotLS0gYS9MaWIvc210cGxpYi5weQorKysgYi9MaWIvc210cGxpYi5weQpAQCAtNjcsNyArNjcsNyBAQAogT0xEU1RZTEVfQVVUSCA9IHJlLmNvbXBpbGUociJhdXRoPSguKikiLCByZS5JKQogCiAjIEV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhpcyBtb2R1bGUuCi1jbGFzcyBTTVRQRXhjZXB0aW9uKEV4Y2VwdGlvbik6CitjbGFzcyBTTVRQRXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBleGNlcHRpb25zIHJhaXNlZCBieSB0aGlzIG1vZHVsZS4iIiIKIAogY2xhc3MgU01UUFNlcnZlckRpc2Nvbm5lY3RlZChTTVRQRXhjZXB0aW9uKToKQEAgLTIzMyw2ICsyMzMsNyBAQAogICAgICAgICB3aWxsIGJlIHVzZWQuCiAKICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgICAgICAgc2VsZi5lc210cF9mZWF0dXJlcyA9IHt9CiAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcwpAQCAtMzEyLDcgKzMxMyw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigibm9ubnVtZXJpYyBwb3J0IikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigibm9ubnVtZXJpYyBwb3J0IikKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICBwb3J0ID0gc2VsZi5kZWZhdWx0X3BvcnQKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKQEAgLTMzMyw3ICszMzQsNyBAQAogICAgICAgICAgICAgICAgIHMgPSBzLmVuY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgnU2VydmVyIG5vdCBjb25uZWN0ZWQnKQogICAgICAgICBlbHNlOgpAQCAtMzY2LDcgKzM2Nyw3IEBACiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuZmlsZS5yZWFkbGluZShfTUFYTElORSArIDEpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoIkNvbm5lY3Rpb24gdW5leHBlY3RlZGx5IGNsb3NlZDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHIoZSkpCkBAIC0zNzYsNiArMzc3LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ3JlcGx5OicsIHJlcHIobGluZSksIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gX01BWExJTkU6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFJlc3BvbnNlRXhjZXB0aW9uKDUwMCwgIkxpbmUgdG9vIGxvbmcuIikKICAgICAgICAgICAgIHJlc3AuYXBwZW5kKGxpbmVbNDpdLnN0cmlwKGInIFx0XHJcbicpKQogICAgICAgICAgICAgY29kZSA9IGxpbmVbOjNdCkBAIC00NzcsNiArNDc5LDE4IEBACiAgICAgICAgICIiIlNNVFAgJ3JzZXQnIGNvbW1hbmQgLS0gcmVzZXRzIHNlc3Npb24uIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmRvY21kKCJyc2V0IikKIAorICAgIGRlZiBfcnNldChzZWxmKToKKyAgICAgICAgIiIiSW50ZXJuYWwgJ3JzZXQnIGNvbW1hbmQgd2hpY2ggaWdub3JlcyBhbnkgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCBlcnJvci4KKworICAgICAgICBVc2VkIGludGVybmFsbHkgaW4gdGhlIGxpYnJhcnksIHNpbmNlIHRoZSBzZXJ2ZXIgZGlzY29ubmVjdGVkIGVycm9yCisgICAgICAgIHNob3VsZCBhcHBlYXIgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gdGhlICpuZXh0KiBjb21tYW5kIGlzIGlzc3VlZCwgaWYKKyAgICAgICAgd2UgYXJlIGRvaW5nIGFuIGludGVybmFsICJzYWZldHkiIHJlc2V0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yc2V0KCkKKyAgICAgICAgZXhjZXB0IFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQ6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgbm9vcChzZWxmKToKICAgICAgICAgIiIiU01UUCAnbm9vcCcgY29tbWFuZCAtLSBkb2Vzbid0IGRvIGFueXRoaW5nIDo+IiIiCiAgICAgICAgIHJldHVybiBzZWxmLmRvY21kKCJub29wIikKQEAgLTU4Miw3ICs1OTYsNyBAQAogICAgICAgICBkZWYgZW5jb2RlX2NyYW1fbWQ1KGNoYWxsZW5nZSwgdXNlciwgcGFzc3dvcmQpOgogICAgICAgICAgICAgY2hhbGxlbmdlID0gYmFzZTY0LmRlY29kZWJ5dGVzKGNoYWxsZW5nZSkKICAgICAgICAgICAgIHJlc3BvbnNlID0gdXNlciArICIgIiArIGhtYWMuSE1BQyhwYXNzd29yZC5lbmNvZGUoJ2FzY2lpJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlKS5oZXhkaWdlc3QoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZSwgJ21kNScpLmhleGRpZ2VzdCgpCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlX2Jhc2U2NChyZXNwb25zZS5lbmNvZGUoJ2FzY2lpJyksIGVvbD0nJykKIAogICAgICAgICBkZWYgZW5jb2RlX3BsYWluKHVzZXIsIHBhc3N3b3JkKToKQEAgLTY2NywxMCArNjgxLDEyIEBACiAgICAgICAgICAgICBpZiBjb250ZXh0IGlzIG5vdCBOb25lIGFuZCBjZXJ0ZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb250ZXh0IGFuZCBjZXJ0ZmlsZSBhcmd1bWVudHMgYXJlIG11dHVhbGx5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQotICAgICAgICAgICAgaWYgY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBjb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywga2V5ZmlsZSwgY2VydGZpbGUpCisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLl9ob3N0IGlmIHNzbC5IQVNfU05JIGVsc2UgTm9uZQorICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgICAgICAjIFJGQyAzMjA3OgogICAgICAgICAgICAgIyBUaGUgY2xpZW50IE1VU1QgZGlzY2FyZCBhbnkga25vd2xlZGdlIG9idGFpbmVkIGZyb20KQEAgLTc1OSw3ICs3NzUsNyBAQAogICAgICAgICAgICAgaWYgY29kZSA9PSA0MjE6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYucnNldCgpCisgICAgICAgICAgICAgICAgc2VsZi5fcnNldCgpCiAgICAgICAgICAgICByYWlzZSBTTVRQU2VuZGVyUmVmdXNlZChjb2RlLCByZXNwLCBmcm9tX2FkZHIpCiAgICAgICAgIHNlbmRlcnJzID0ge30KICAgICAgICAgaWYgaXNpbnN0YW5jZSh0b19hZGRycywgc3RyKToKQEAgLTc3MywxNCArNzg5LDE0IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFJlY2lwaWVudHNSZWZ1c2VkKHNlbmRlcnJzKQogICAgICAgICBpZiBsZW4oc2VuZGVycnMpID09IGxlbih0b19hZGRycyk6CiAgICAgICAgICAgICAjIHRoZSBzZXJ2ZXIgcmVmdXNlZCBhbGwgb3VyIHJlY2lwaWVudHMKLSAgICAgICAgICAgIHNlbGYucnNldCgpCisgICAgICAgICAgICBzZWxmLl9yc2V0KCkKICAgICAgICAgICAgIHJhaXNlIFNNVFBSZWNpcGllbnRzUmVmdXNlZChzZW5kZXJycykKICAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5kYXRhKG1zZykKICAgICAgICAgaWYgY29kZSAhPSAyNTA6CiAgICAgICAgICAgICBpZiBjb2RlID09IDQyMToKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5yc2V0KCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yc2V0KCkKICAgICAgICAgICAgIHJhaXNlIFNNVFBEYXRhRXJyb3IoY29kZSwgcmVzcCkKICAgICAgICAgI2lmIHdlIGdvdCBoZXJlIHRoZW4gc29tZWJvZHkgZ290IG91ciBtYWlsCiAgICAgICAgIHJldHVybiBzZW5kZXJycwpAQCAtODUwLDYgKzg2NiwxMCBAQAogICAgIGRlZiBxdWl0KHNlbGYpOgogICAgICAgICAiIiJUZXJtaW5hdGUgdGhlIFNNVFAgc2Vzc2lvbi4iIiIKICAgICAgICAgcmVzID0gc2VsZi5kb2NtZCgicXVpdCIpCisgICAgICAgICMgQSBuZXcgRUhMTyBpcyByZXF1aXJlZCBhZnRlciByZWNvbm5lY3Rpbmcgd2l0aCBjb25uZWN0KCkKKyAgICAgICAgc2VsZi5laGxvX3Jlc3AgPSBzZWxmLmhlbG9fcmVzcCA9IE5vbmUKKyAgICAgICAgc2VsZi5lc210cF9mZWF0dXJlcyA9IHt9CisgICAgICAgIHNlbGYuZG9lc19lc210cCA9IEZhbHNlCiAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICByZXR1cm4gcmVzCiAKQEAgLTg4Myw2ICs5MDMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFNNVFAuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgbG9jYWxfaG9zdG5hbWUsIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzKQpAQCAtODkyLDEwICs5MTUsOSBAQAogICAgICAgICAgICAgICAgIHByaW50KCdjb25uZWN0OicsIChob3N0LCBwb3J0KSwgZmlsZT1zdGRlcnIpCiAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcykKLSAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KG5ld19zb2NrZXQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQobmV3X3NvY2tldCwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlKQorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5faG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQobmV3X3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgIHJldHVybiBuZXdfc29ja2V0CiAKICAgICBfX2FsbF9fLmFwcGVuZCgiU01UUF9TU0wiKQpAQCAtOTM3LDcgKzk1OSw3IEBACiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChob3N0KQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3QgZmFpbDonLCBob3N0LCBmaWxlPXN0ZGVycikKICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKZGlmZiAtLWdpdCBhL0xpYi9zbmRoZHIucHkgYi9MaWIvc25kaGRyLnB5CmluZGV4IDlmNWRjYzkuLjI0MGU1MDcgMTAwNjQ0Ci0tLSBhL0xpYi9zbmRoZHIucHkKKysrIGIvTGliL3NuZGhkci5weQpAQCAtMTEsNyArMTEsNyBAQAogLSBudW1iZXIgb2YgYml0cy9zYW1wbGUsIG9yICdVJyBmb3IgVS1MQVcsIG9yICdBJyBmb3IgQS1MQVcKIAogSWYgdGhlIGZpbGUgZG9lc24ndCBoYXZlIGEgcmVjb2duaXphYmxlIHR5cGUsIGl0IHJldHVybnMgTm9uZS4KLUlmIHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgSU9FcnJvciBpcyByYWlzZWQuCitJZiB0aGUgZmlsZSBjYW4ndCBiZSBvcGVuZWQsIE9TRXJyb3IgaXMgcmFpc2VkLgogCiBUbyBjb21wdXRlIHRoZSB0b3RhbCB0aW1lLCBkaXZpZGUgdGhlIG51bWJlciBvZiBmcmFtZXMgYnkgdGhlCiBzYW1wbGluZyByYXRlIChhIGZyYW1lIGNvbnRhaW5zIGEgc2FtcGxlIGZvciBlYWNoIGNoYW5uZWwpLgpAQCAtMTM3LDE0ICsxMzcsMTcgQEAKIAogCiBkZWYgdGVzdF93YXYoaCwgZik6CisgICAgaW1wb3J0IHdhdmUKICAgICAjICdSSUZGJyA8bGVuPiAnV0FWRScgJ2ZtdCAnIDxsZW4+CiAgICAgaWYgbm90IGguc3RhcnRzd2l0aChiJ1JJRkYnKSBvciBoWzg6MTJdICE9IGInV0FWRScgb3IgaFsxMjoxNl0gIT0gYidmbXQgJzoKICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBzdHlsZSA9IGdldF9zaG9ydF9sZShoWzIwOjIyXSkKLSAgICBuY2hhbm5lbHMgPSBnZXRfc2hvcnRfbGUoaFsyMjoyNF0pCi0gICAgcmF0ZSA9IGdldF9sb25nX2xlKGhbMjQ6MjhdKQotICAgIHNhbXBsZV9iaXRzID0gZ2V0X3Nob3J0X2xlKGhbMzQ6MzZdKQotICAgIHJldHVybiAnd2F2JywgcmF0ZSwgbmNoYW5uZWxzLCAtMSwgc2FtcGxlX2JpdHMKKyAgICBmLnNlZWsoMCkKKyAgICB0cnk6CisgICAgICAgIHcgPSB3YXZlLm9wZW5mcChmLCAncicpCisgICAgZXhjZXB0IChFT0ZFcnJvciwgd2F2ZS5FcnJvcik6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuICgnd2F2Jywgdy5nZXRmcmFtZXJhdGUoKSwgdy5nZXRuY2hhbm5lbHMoKSwKKyAgICAgICAgICAgICAgICAgICB3LmdldG5mcmFtZXMoKSwgOCp3LmdldHNhbXB3aWR0aCgpKQogCiB0ZXN0cy5hcHBlbmQodGVzdF93YXYpCiAKQEAgLTIzMCw3ICsyMzMsNyBAQAogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHJpbnQod2hhdChmaWxlbmFtZSkpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHByaW50KCcqKiogbm90IGZvdW5kICoqKicpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0LnB5IGIvTGliL3NvY2tldC5weQppbmRleCBkNGYxYjY1Li42ZDY3YjNkIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0LnB5CisrKyBiL0xpYi9zb2NrZXQucHkKQEAgLTQ4LDYgKzQ4LDcgQEAKIGZyb20gX3NvY2tldCBpbXBvcnQgKgogCiBpbXBvcnQgb3MsIHN5cywgaW8KK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQogCiB0cnk6CiAgICAgaW1wb3J0IGVycm5vCkBAIC02MCw2ICs2MSwzMCBAQAogX19hbGxfXyA9IFsiZ2V0ZnFkbiIsICJjcmVhdGVfY29ubmVjdGlvbiJdCiBfX2FsbF9fLmV4dGVuZChvcy5fZ2V0X2V4cG9ydHNfbGlzdChfc29ja2V0KSkKIAorIyBTZXQgdXAgdGhlIHNvY2tldC5BRl8qIHNvY2tldC5TT0NLXyogY29uc3RhbnRzIGFzIG1lbWJlcnMgb2YgSW50RW51bXMgZm9yCisjIG5pY2VyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisjIE5vdGUgdGhhdCBfc29ja2V0IG9ubHkga25vd3MgYWJvdXQgdGhlIGludGVnZXIgdmFsdWVzLiBUaGUgcHVibGljIGludGVyZmFjZQorIyBpbiB0aGlzIG1vZHVsZSB1bmRlcnN0YW5kcyB0aGUgZW51bXMgYW5kIHRyYW5zbGF0ZXMgdGhlbSBiYWNrIGZyb20gaW50ZWdlcnMKKyMgd2hlcmUgbmVlZGVkIChlLmcuIC5mYW1pbHkgcHJvcGVydHkgb2YgYSBzb2NrZXQgb2JqZWN0KS4KK0FkZHJlc3NGYW1pbHkgPSBJbnRFbnVtKCdBZGRyZXNzRmFtaWx5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB2YWx1ZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLmlzdXBwZXIoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCdBRl8nKX0pCitnbG9iYWxzKCkudXBkYXRlKEFkZHJlc3NGYW1pbHkuX19tZW1iZXJzX18pCisKK1NvY2tldFR5cGUgPSBJbnRFbnVtKCdTb2NrZXRUeXBlJywKKyAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB2YWx1ZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLmlzdXBwZXIoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCdTT0NLXycpfSkKK2dsb2JhbHMoKS51cGRhdGUoU29ja2V0VHlwZS5fX21lbWJlcnNfXykKKworZGVmIF9pbnRlbnVtX2NvbnZlcnRlcih2YWx1ZSwgZW51bV9rbGFzcyk6CisgICAgIiIiQ29udmVydCBhIG51bWVyaWMgZmFtaWx5IHZhbHVlIHRvIGFuIEludEVudW0gbWVtYmVyLgorCisgICAgSWYgaXQncyBub3QgYSBrbm93biBtZW1iZXIsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpdHNlbGYuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZW51bV9rbGFzcyh2YWx1ZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmV0dXJuIHZhbHVlCiAKIF9yZWFsc29ja2V0ID0gc29ja2V0CiAKQEAgLTkxLDYgKzExNiwxMCBAQAogICAgIF9fc2xvdHNfXyA9IFsiX193ZWFrcmVmX18iLCAiX2lvX3JlZnMiLCAiX2Nsb3NlZCJdCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmFtaWx5PUFGX0lORVQsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTAsIGZpbGVubz1Ob25lKToKKyAgICAgICAgIyBGb3IgdXNlciBjb2RlIGFkZHJlc3MgZmFtaWx5IGFuZCB0eXBlIHZhbHVlcyBhcmUgSW50RW51bSBtZW1iZXJzLCBidXQKKyAgICAgICAgIyBmb3IgdGhlIHVuZGVybHlpbmcgX3NvY2tldC5zb2NrZXQgdGhleSdyZSBqdXN0IGludGVnZXJzLiBUaGUKKyAgICAgICAgIyBjb25zdHJ1Y3RvciBvZiBfc29ja2V0LnNvY2tldCBjb252ZXJ0cyB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4KKyAgICAgICAgIyBpbnRlZ2VyIGF1dG9tYXRpY2FsbHkuCiAgICAgICAgIF9zb2NrZXQuc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZpbGVubykKICAgICAgICAgc2VsZi5faW9fcmVmcyA9IDAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKQEAgLTEwMywxMyArMTMyLDMyIEBACiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiV3JhcCBfX3JlcHJfXygpIHRvIHJldmVhbCB0aGUgcmVhbCBjbGFzcyBuYW1lLiIiIgotICAgICAgICBzID0gX3NvY2tldC5zb2NrZXQuX19yZXByX18oc2VsZikKLSAgICAgICAgaWYgcy5zdGFydHN3aXRoKCI8c29ja2V0IG9iamVjdCIpOgotICAgICAgICAgICAgcyA9ICI8JXMuJXMlcyVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnX2Nsb3NlZCcsIEZhbHNlKSBhbmQgIiBbY2xvc2VkXSAiIG9yICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzc6XSkKKyAgICAgICAgIiIiV3JhcCBfX3JlcHJfXygpIHRvIHJldmVhbCB0aGUgcmVhbCBjbGFzcyBuYW1lIGFuZCBzb2NrZXQKKyAgICAgICAgYWRkcmVzcyhlcykuCisgICAgICAgICIiIgorICAgICAgICBjbG9zZWQgPSBnZXRhdHRyKHNlbGYsICdfY2xvc2VkJywgRmFsc2UpCisgICAgICAgIHMgPSAiPCVzLiVzJXMgZmQ9JWksIGZhbWlseT0lcywgdHlwZT0lcywgcHJvdG89JWkiIFwKKyAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICIgW2Nsb3NlZF0iIGlmIGNsb3NlZCBlbHNlICIiLAorICAgICAgICAgICAgICAgc2VsZi5maWxlbm8oKSwKKyAgICAgICAgICAgICAgIHNlbGYuZmFtaWx5LAorICAgICAgICAgICAgICAgc2VsZi50eXBlLAorICAgICAgICAgICAgICAgc2VsZi5wcm90bykKKyAgICAgICAgaWYgbm90IGNsb3NlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsYWRkciA9IHNlbGYuZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgICAgIGlmIGxhZGRyOgorICAgICAgICAgICAgICAgICAgICBzICs9ICIsIGxhZGRyPSVzIiAlIHN0cihsYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFkZHIgPSBzZWxmLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgICAgICBpZiByYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgcyArPSAiLCByYWRkcj0lcyIgJSBzdHIocmFkZHIpCisgICAgICAgICAgICBleGNlcHQgZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzICs9ICc+JwogICAgICAgICByZXR1cm4gcwogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKQEAgLTExOCw3ICsxNjYsOCBAQAogICAgIGRlZiBkdXAoc2VsZik6CiAgICAgICAgICIiImR1cCgpIC0+IHNvY2tldCBvYmplY3QKIAotICAgICAgICBSZXR1cm4gYSBuZXcgc29ja2V0IG9iamVjdCBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgc3lzdGVtIHJlc291cmNlLgorICAgICAgICBEdXBsaWNhdGUgdGhlIHNvY2tldC4gUmV0dXJuIGEgbmV3IHNvY2tldCBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBzYW1lCisgICAgICAgIHN5c3RlbSByZXNvdXJjZS4gVGhlIG5ldyBzb2NrZXQgaXMgbm9uLWluaGVyaXRhYmxlLgogICAgICAgICAiIiIKICAgICAgICAgZmQgPSBkdXAoc2VsZi5maWxlbm8oKSkKICAgICAgICAgc29jayA9IHNlbGYuX19jbGFzc19fKHNlbGYuZmFtaWx5LCBzZWxmLnR5cGUsIHNlbGYucHJvdG8sIGZpbGVubz1mZCkKQEAgLTIxMCw2ICsyNTksMzEgQEAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQogICAgICAgICByZXR1cm4gc3VwZXIoKS5kZXRhY2goKQogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZhbWlseShzZWxmKToKKyAgICAgICAgIiIiUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIHRoaXMgc29ja2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9pbnRlbnVtX2NvbnZlcnRlcihzdXBlcigpLmZhbWlseSwgQWRkcmVzc0ZhbWlseSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICAiIiJSZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBzb2NrZXQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfaW50ZW51bV9jb252ZXJ0ZXIoc3VwZXIoKS50eXBlLCBTb2NrZXRUeXBlKQorCisgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICBkZWYgZ2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGUoc2VsZi5maWxlbm8oKSkKKyAgICAgICAgZGVmIHNldF9pbmhlcml0YWJsZShzZWxmLCBpbmhlcml0YWJsZSk6CisgICAgICAgICAgICBvcy5zZXRfaGFuZGxlX2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBnZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gb3MuZ2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCkpCisgICAgICAgIGRlZiBzZXRfaW5oZXJpdGFibGUoc2VsZiwgaW5oZXJpdGFibGUpOgorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGdldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIkdldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorICAgIHNldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorCiBkZWYgZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvPTApOgogICAgICIiIiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZVssIHByb3RvXSkgLT4gc29ja2V0IG9iamVjdAogCkBAIC0yOTEsNyArMzY1LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKICAgICAgICAgaWYgc2VsZi5fdGltZW91dF9vY2N1cnJlZDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiKQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnJlY3ZfaW50byhiKQpAQCAtNDM1LDMgKzUwOSwyNyBAQAogICAgICAgICByYWlzZSBlcnIKICAgICBlbHNlOgogICAgICAgICByYWlzZSBlcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKKworZGVmIGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICIiIlJlc29sdmUgaG9zdCBhbmQgcG9ydCBpbnRvIGxpc3Qgb2YgYWRkcmVzcyBpbmZvIGVudHJpZXMuCisKKyAgICBUcmFuc2xhdGUgdGhlIGhvc3QvcG9ydCBhcmd1bWVudCBpbnRvIGEgc2VxdWVuY2Ugb2YgNS10dXBsZXMgdGhhdCBjb250YWluCisgICAgYWxsIHRoZSBuZWNlc3NhcnkgYXJndW1lbnRzIGZvciBjcmVhdGluZyBhIHNvY2tldCBjb25uZWN0ZWQgdG8gdGhhdCBzZXJ2aWNlLgorICAgIGhvc3QgaXMgYSBkb21haW4gbmFtZSwgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSVB2NC92NiBhZGRyZXNzIG9yCisgICAgTm9uZS4gcG9ydCBpcyBhIHN0cmluZyBzZXJ2aWNlIG5hbWUgc3VjaCBhcyAnaHR0cCcsIGEgbnVtZXJpYyBwb3J0IG51bWJlciBvcgorICAgIE5vbmUuIEJ5IHBhc3NpbmcgTm9uZSBhcyB0aGUgdmFsdWUgb2YgaG9zdCBhbmQgcG9ydCwgeW91IGNhbiBwYXNzIE5VTEwgdG8KKyAgICB0aGUgdW5kZXJseWluZyBDIEFQSS4KKworICAgIFRoZSBmYW1pbHksIHR5cGUgYW5kIHByb3RvIGFyZ3VtZW50cyBjYW4gYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8KKyAgICBuYXJyb3cgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzIHJldHVybmVkLiBQYXNzaW5nIHplcm8gYXMgYSB2YWx1ZSBmb3IgZWFjaCBvZgorICAgIHRoZXNlIGFyZ3VtZW50cyBzZWxlY3RzIHRoZSBmdWxsIHJhbmdlIG9mIHJlc3VsdHMuCisgICAgIiIiCisgICAgIyBXZSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHNpbmNlIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1lcmljIGZhbWlseQorICAgICMgYW5kIHNvY2tldCB0eXBlIHZhbHVlcyB0byBlbnVtIGNvbnN0YW50cy4KKyAgICBhZGRybGlzdCA9IFtdCisgICAgZm9yIHJlcyBpbiBfc29ja2V0LmdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzKToKKyAgICAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzYSA9IHJlcworICAgICAgICBhZGRybGlzdC5hcHBlbmQoKF9pbnRlbnVtX2NvbnZlcnRlcihhZiwgQWRkcmVzc0ZhbWlseSksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2ludGVudW1fY29udmVydGVyKHNvY2t0eXBlLCBTb2NrZXRUeXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bywgY2Fub25uYW1lLCBzYSkpCisgICAgcmV0dXJuIGFkZHJsaXN0CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0c2VydmVyLnB5IGIvTGliL3NvY2tldHNlcnZlci5weQppbmRleCA4MzMyZmRmLi4yZjM5NWZhIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi9zb2NrZXRzZXJ2ZXIucHkKQEAgLTEzMSw3ICsxMzEsNiBAQAogCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc2VsZWN0Ci1pbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBlcnJubwogdHJ5OgpAQCAtMjk5LDcgKzI5OCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyA9IHNlbGYuZ2V0X3JlcXVlc3QoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnZlcmlmeV9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKICAgICAgICAgICAgIHRyeToKQEAgLTQ3OSw3ICs0NzgsNyBAQAogICAgICAgICAgICAgI2V4cGxpY2l0bHkgc2h1dGRvd24uICBzb2NrZXQuY2xvc2UoKSBtZXJlbHkgcmVsZWFzZXMKICAgICAgICAgICAgICN0aGUgc29ja2V0IGFuZCB3YWl0cyBmb3IgR0MgdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGNsb3NlLgogICAgICAgICAgICAgcmVxdWVzdC5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzICNzb21lIHBsYXRmb3JtcyBtYXkgcmFpc2UgRU5PVENPTk4gaGVyZQogICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKIApAQCAtNTI0LDM1ICs1MjMsMzkgQEAKIAogICAgIGRlZiBjb2xsZWN0X2NoaWxkcmVuKHNlbGYpOgogICAgICAgICAiIiJJbnRlcm5hbCByb3V0aW5lIHRvIHdhaXQgZm9yIGNoaWxkcmVuIHRoYXQgaGF2ZSBleGl0ZWQuIiIiCi0gICAgICAgIGlmIHNlbGYuYWN0aXZlX2NoaWxkcmVuIGlzIE5vbmU6IHJldHVybgotICAgICAgICB3aGlsZSBsZW4oc2VsZi5hY3RpdmVfY2hpbGRyZW4pID49IHNlbGYubWF4X2NoaWxkcmVuOgotICAgICAgICAgICAgIyBYWFg6IFRoaXMgd2lsbCB3YWl0IGZvciBhbnkgY2hpbGQgcHJvY2Vzcywgbm90IGp1c3Qgb25lcwotICAgICAgICAgICAgIyBzcGF3bmVkIGJ5IHRoaXMgbGlicmFyeS4gVGhpcyBjb3VsZCBjb25mdXNlIG90aGVyCi0gICAgICAgICAgICAjIGxpYnJhcmllcyB0aGF0IGV4cGVjdCB0byBiZSBhYmxlIHRvIHdhaXQgZm9yIHRoZWlyIG93bgotICAgICAgICAgICAgIyBjaGlsZHJlbi4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoMCwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwaWQgPSBOb25lCi0gICAgICAgICAgICBpZiBwaWQgbm90IGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuOiBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4ucmVtb3ZlKHBpZCkKKyAgICAgICAgaWYgc2VsZi5hY3RpdmVfY2hpbGRyZW4gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICMgWFhYOiBUaGlzIGxvb3AgcnVucyBtb3JlIHN5c3RlbSBjYWxscyB0aGFuIGl0IG91Z2h0Ci0gICAgICAgICMgdG8uIFRoZXJlIHNob3VsZCBiZSBhIHdheSB0byBwdXQgdGhlIGFjdGl2ZV9jaGlsZHJlbiBpbnRvIGEKLSAgICAgICAgIyBwcm9jZXNzIGdyb3VwIGFuZCB0aGVuIHVzZSBvcy53YWl0cGlkKC1wZ2lkKSB0byB3YWl0IGZvciBhbnkKLSAgICAgICAgIyBvZiB0aGF0IHNldCwgYnV0IEkgY291bGRuJ3QgZmluZCBhIHdheSB0byBhbGxvY2F0ZSBwZ2lkcwotICAgICAgICAjIHRoYXQgY291bGRuJ3QgY29sbGlkZS4KLSAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuOgorICAgICAgICAjIElmIHdlJ3JlIGFib3ZlIHRoZSBtYXggbnVtYmVyIG9mIGNoaWxkcmVuLCB3YWl0IGFuZCByZWFwIHRoZW0gdW50aWwKKyAgICAgICAgIyB3ZSBnbyBiYWNrIGJlbG93IHRocmVzaG9sZC4gTm90ZSB0aGF0IHdlIHVzZSB3YWl0cGlkKC0xKSBiZWxvdyB0byBiZQorICAgICAgICAjIGFibGUgdG8gY29sbGVjdCBjaGlsZHJlbiBpbiBzaXplKDxkZWZ1bmN0IGNoaWxkcmVuPikgc3lzY2FsbHMgaW5zdGVhZAorICAgICAgICAjIG9mIHNpemUoPGNoaWxkcmVuPik6IHRoZSBkb3duc2lkZSBpcyB0aGF0IHRoaXMgbWlnaHQgcmVhcCBjaGlsZHJlbgorICAgICAgICAjIHdoaWNoIHdlIGRpZG4ndCBzcGF3biwgd2hpY2ggaXMgd2h5IHdlIG9ubHkgcmVzb3J0IHRvIHRoaXMgd2hlbiB3ZSdyZQorICAgICAgICAjIGFib3ZlIG1heF9jaGlsZHJlbi4KKyAgICAgICAgd2hpbGUgbGVuKHNlbGYuYWN0aXZlX2NoaWxkcmVuKSA+PSBzZWxmLm1heF9jaGlsZHJlbjoKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoY2hpbGQsIG9zLldOT0hBTkcpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGlkID0gTm9uZQotICAgICAgICAgICAgaWYgbm90IHBpZDogY29udGludWUKKyAgICAgICAgICAgICAgICBwaWQsIF8gPSBvcy53YWl0cGlkKC0xLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLmRpc2NhcmQocGlkKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5jbGVhcigpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgTm93IHJlYXAgYWxsIGRlZnVuY3QgY2hpbGRyZW4uCisgICAgICAgIGZvciBwaWQgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4uY29weSgpOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLnJlbW92ZShwaWQpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzLiB4PSVkIGFuZCBsaXN0PSVyJyAlIChlLm1lc3NhZ2UsIHBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4pKQorICAgICAgICAgICAgICAgIHBpZCwgXyA9IG9zLndhaXRwaWQocGlkLCBvcy5XTk9IQU5HKQorICAgICAgICAgICAgICAgICMgaWYgdGhlIGNoaWxkIGhhc24ndCBleGl0ZWQgeWV0LCBwaWQgd2lsbCBiZSAwIGFuZCBpZ25vcmVkIGJ5CisgICAgICAgICAgICAgICAgIyBkaXNjYXJkKCkgYmVsb3cKKyAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5kaXNjYXJkKHBpZCkKKyAgICAgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIHNvbWVvbmUgZWxzZSByZWFwZWQgaXQKKyAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5kaXNjYXJkKHBpZCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBoYW5kbGVfdGltZW91dChzZWxmKToKICAgICAgICAgIiIiV2FpdCBmb3Igem9tYmllcyBhZnRlciBzZWxmLnRpbWVvdXQgc2Vjb25kcyBvZiBpbmFjdGl2aXR5LgpAQCAtNTc0LDggKzU3Nyw4IEBACiAgICAgICAgIGlmIHBpZDoKICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MKICAgICAgICAgICAgIGlmIHNlbGYuYWN0aXZlX2NoaWxkcmVuIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4gPSBbXQotICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4uYXBwZW5kKHBpZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbiA9IHNldCgpCisgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5hZGQocGlkKQogICAgICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL2RiYXBpMi5weSBiL0xpYi9zcWxpdGUzL2RiYXBpMi5weQppbmRleCA5YTBiNzY2Li45OTE2ODJjIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy9kYmFwaTIucHkKKysrIGIvTGliL3NxbGl0ZTMvZGJhcGkyLnB5CkBAIC0yMiw2ICsyMiw3IEBACiAKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IHRpbWUKK2ltcG9ydCBjb2xsZWN0aW9ucy5hYmMKIAogZnJvbSBfc3FsaXRlMyBpbXBvcnQgKgogCkBAIC01MCw2ICs1MSw3IEBACiBzcWxpdGVfdmVyc2lvbl9pbmZvID0gdHVwbGUoW2ludCh4KSBmb3IgeCBpbiBzcWxpdGVfdmVyc2lvbi5zcGxpdCgiLiIpXSkKIAogQmluYXJ5ID0gbWVtb3J5dmlldworY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlLnJlZ2lzdGVyKFJvdykKIAogZGVmIHJlZ2lzdGVyX2FkYXB0ZXJzX2FuZF9jb252ZXJ0ZXJzKCk6CiAgICAgZGVmIGFkYXB0X2RhdGUodmFsKToKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CmluZGV4IGI3ZWMxYWQuLjA0NjQ5ZmMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQpAQCAtMjgsNiArMjgsOSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rCisKKwogY2xhc3MgTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBDaGVja0FQSUxldmVsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxbGl0ZS5hcGlsZXZlbCwgIjIuMCIsCkBAIC0xNjMsNiArMTY2LDIxIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jeC5pbl90cmFuc2FjdGlvbiA9IFRydWUKIAorICAgIGRlZiBDaGVja09wZW5Vcmkoc2VsZik6CisgICAgICAgIGlmIHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDcsIDcpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuTm90U3VwcG9ydGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNxbGl0ZS5jb25uZWN0KCc6bWVtb3J5OicsIHVyaT1UcnVlKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgd2l0aCBzcWxpdGUuY29ubmVjdChURVNURk4pIGFzIGN4OgorICAgICAgICAgICAgY3guZXhlY3V0ZSgnY3JlYXRlIHRhYmxlIHRlc3QoaWQgaW50ZWdlciknKQorICAgICAgICB3aXRoIHNxbGl0ZS5jb25uZWN0KCdmaWxlOicgKyBURVNURk4sIHVyaT1UcnVlKSBhcyBjeDoKKyAgICAgICAgICAgIGN4LmV4ZWN1dGUoJ2luc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcygwKScpCisgICAgICAgIHdpdGggc3FsaXRlLmNvbm5lY3QoJ2ZpbGU6JyArIFRFU1RGTiArICc/bW9kZT1ybycsIHVyaT1UcnVlKSBhcyBjeDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgorICAgICAgICAgICAgICAgIGN4LmV4ZWN1dGUoJ2luc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcygxKScpCisKKwogY2xhc3MgQ3Vyc29yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5jeCA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKaW5kZXggMTAxMzc1NS4uOThkY2FlNSAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weQpAQCAtMjMsNiArMjMsNyBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzcWxpdGUzIGFzIHNxbGl0ZQorZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IFNlcXVlbmNlCiAKIGNsYXNzIE15Q29ubmVjdGlvbihzcWxpdGUuQ29ubmVjdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CkBAIC05Niw5ICs5NywxOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbDEsIDEsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnQSciKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbDIsIDIsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnQiciKQogCi0gICAgICAgIGNvbDEsIGNvbDIgPSByb3dbMF0sIHJvd1sxXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbDEsIDEsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sMiwgMiwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIDEsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzFdLCAyLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1stMV0sIDIsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gLTEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1stMl0sIDEsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gLTIiKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICByb3dbJ2MnXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcm93WzJdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICByb3dbLTNdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICByb3dbMioqMTAwMF0KIAogICAgIGRlZiBDaGVja1NxbGl0ZVJvd0l0ZXIoc2VsZik6CiAgICAgICAgICIiIkNoZWNrcyBpZiB0aGUgcm93IG9iamVjdCBpcyBpdGVyYWJsZSIiIgpAQCAtMTQyLDYgKzE1MywxNSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJvd18xLCByb3dfMykKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoYXNoKHJvd18xKSwgaGFzaChyb3dfMykpCiAKKyAgICBkZWYgQ2hlY2tTcWxpdGVSb3dBc1NlcXVlbmNlKHNlbGYpOgorICAgICAgICAiIiIgQ2hlY2tzIGlmIHRoZSByb3cgb2JqZWN0IGNhbiBhY3QgbGlrZSBhIHNlcXVlbmNlICIiIgorICAgICAgICBzZWxmLmNvbi5yb3dfZmFjdG9yeSA9IHNxbGl0ZS5Sb3cKKyAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IDEgYXMgYSwgMiBhcyBiIikuZmV0Y2hvbmUoKQorCisgICAgICAgIGFzX3R1cGxlID0gdHVwbGUocm93KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQocm93KSksIGxpc3QocmV2ZXJzZWQoYXNfdHVwbGUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJvdywgU2VxdWVuY2UpCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5CmluZGV4IGM1NTdhYjYuLmVhYWFhMmMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkKQEAgLTMzNiw2ICszMzYsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlLmNvbm5lY3QsICI6bWVtb3J5OiIsIGlzb2xhdGlvbl9sZXZlbD0xMjMpCiAKIAorICAgIGRlZiBDaGVja051bGxDaGFyYWN0ZXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxMTQ3CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbiwgIlwwc2VsZWN0IDEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb24sICJzZWxlY3QgMVwwIikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN1ci5leGVjdXRlLCAiIFwwc2VsZWN0IDIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdXIuZXhlY3V0ZSwgInNlbGVjdCAyXDAiKQorCisKIGRlZiBzdWl0ZSgpOgogICAgIHJlZ3Jlc3Npb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoUmVncmVzc2lvblRlc3RzLCAiQ2hlY2siKQogICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoKHJlZ3Jlc3Npb25fc3VpdGUsKSkKZGlmZiAtLWdpdCBhL0xpYi9zcmVfY29tcGlsZS5weSBiL0xpYi9zcmVfY29tcGlsZS5weQppbmRleCBiOTg0YTU0Li5jNjg2MGI1IDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbXBpbGUucHkKKysrIGIvTGliL3NyZV9jb21waWxlLnB5CkBAIC0xMCw5ICsxMCwxMCBAQAogCiAiIiJJbnRlcm5hbCBzdXBwb3J0IG1vZHVsZSBmb3Igc3JlIiIiCiAKLWltcG9ydCBfc3JlLCBzeXMKK2ltcG9ydCBfc3JlCiBpbXBvcnQgc3JlX3BhcnNlCiBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKIGFzc2VydCBfc3JlLk1BR0lDID09IE1BR0lDLCAiU1JFIG1vZHVsZSBtaXNtYXRjaCIKIApAQCAtNjQsMTMgKzY1LDYgQEAKICAgICAgICAgZWxpZiBvcCBpbiBSRVBFQVRJTkdfQ09ERVM6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX1RFTVBMQVRFOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJpbnRlcm5hbDogdW5zdXBwb3J0ZWQgdGVtcGxhdGUgb3BlcmF0b3IiKQotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRdKQotICAgICAgICAgICAgICAgIHNraXAgPSBfbGVuKGNvZGUpOyBlbWl0KDApCi0gICAgICAgICAgICAgICAgZW1pdChhdlswXSkKLSAgICAgICAgICAgICAgICBlbWl0KGF2WzFdKQotICAgICAgICAgICAgICAgIF9jb21waWxlKGNvZGUsIGF2WzJdLCBmbGFncykKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbU1VDQ0VTU10pCi0gICAgICAgICAgICAgICAgY29kZVtza2lwXSA9IF9sZW4oY29kZSkgLSBza2lwCiAgICAgICAgICAgICBlbGlmIF9zaW1wbGUoYXYpIGFuZCBvcCBpcyBub3QgUkVQRUFUOgogICAgICAgICAgICAgICAgIGlmIG9wIGlzIE1BWF9SRVBFQVQ6CiAgICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRfT05FXSkKQEAgLTIwNywxNTggKzIwMSwxNDMgQEAKIGRlZiBfb3B0aW1pemVfY2hhcnNldChjaGFyc2V0LCBmaXh1cCk6CiAgICAgIyBpbnRlcm5hbDogb3B0aW1pemUgY2hhcmFjdGVyIHNldAogICAgIG91dCA9IFtdCi0gICAgb3V0YXBwZW5kID0gb3V0LmFwcGVuZAotICAgIGNoYXJtYXAgPSBbMF0qMjU2Ci0gICAgdHJ5OgotICAgICAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6Ci0gICAgICAgICAgICBpZiBvcCBpcyBORUdBVEU6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChvcCwgYXYpKQotICAgICAgICAgICAgZWxpZiBvcCBpcyBMSVRFUkFMOgotICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZml4dXAoYXZbMF0pLCBmaXh1cChhdlsxXSkrMSk6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIENBVEVHT1JZOgotICAgICAgICAgICAgICAgICMgWFhYOiBjb3VsZCBhcHBlbmQgdG8gY2hhcm1hcCB0YWlsCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIHVuaWNvZGUgY2hhcmFjdGVycwotICAgICAgICByZXR1cm4gX29wdGltaXplX3VuaWNvZGUoY2hhcnNldCwgZml4dXApCisgICAgdGFpbCA9IFtdCisgICAgY2hhcm1hcCA9IGJ5dGVhcnJheSgyNTYpCisgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG9wIGlzIExJVEVSQUw6CisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShmaXh1cChhdlswXSksIGZpeHVwKGF2WzFdKSsxKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCisgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBORUdBVEU6CisgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBsZW4oY2hhcm1hcCkgPT0gMjU2OgorICAgICAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLVVDUzEgY2hhcmFjdGVyIGNvZGVzCisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXAgKz0gYidcMCcgKiAweGZmMDAKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIgY29kZXMKKyAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgIGJyZWFrCisKICAgICAjIGNvbXByZXNzIGNoYXJhY3RlciBtYXAKLSAgICBpID0gcCA9IG4gPSAwCiAgICAgcnVucyA9IFtdCi0gICAgcnVuc2FwcGVuZCA9IHJ1bnMuYXBwZW5kCi0gICAgZm9yIGMgaW4gY2hhcm1hcDoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgICAgICBwID0gaQotICAgICAgICAgICAgbiA9IG4gKyAxCi0gICAgICAgIGVsaWYgbjoKLSAgICAgICAgICAgIHJ1bnNhcHBlbmQoKHAsIG4pKQotICAgICAgICAgICAgbiA9IDAKLSAgICAgICAgaSA9IGkgKyAxCi0gICAgaWYgbjoKLSAgICAgICAgcnVuc2FwcGVuZCgocCwgbikpCi0gICAgaWYgbGVuKHJ1bnMpIDw9IDI6CisgICAgcSA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwID0gY2hhcm1hcC5maW5kKDEsIHEpCisgICAgICAgIGlmIHAgPCAwOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbGVuKHJ1bnMpID49IDI6CisgICAgICAgICAgICBydW5zID0gTm9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcSA9IGNoYXJtYXAuZmluZCgwLCBwKQorICAgICAgICBpZiBxIDwgMDoKKyAgICAgICAgICAgIHJ1bnMuYXBwZW5kKChwLCBsZW4oY2hhcm1hcCkpKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcnVucy5hcHBlbmQoKHAsIHEpKQorICAgIGlmIHJ1bnMgaXMgbm90IE5vbmU6CiAgICAgICAgICMgdXNlIGxpdGVyYWwvcmFuZ2UKLSAgICAgICAgZm9yIHAsIG4gaW4gcnVuczoKLSAgICAgICAgICAgIGlmIG4gPT0gMToKLSAgICAgICAgICAgICAgICBvdXRhcHBlbmQoKExJVEVSQUwsIHApKQorICAgICAgICBmb3IgcCwgcSBpbiBydW5zOgorICAgICAgICAgICAgaWYgcSAtIHAgPT0gMToKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKChMSVRFUkFMLCBwKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChSQU5HRSwgKHAsIHArbi0xKSkpCisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgoUkFOR0UsIChwLCBxIC0gMSkpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICBpZiBsZW4ob3V0KSA8IGxlbihjaGFyc2V0KToKICAgICAgICAgICAgIHJldHVybiBvdXQKLSAgICBlbHNlOgotICAgICAgICAjIHVzZSBiaXRtYXAKKyAgICAgICAgcmV0dXJuIGNoYXJzZXQKKworICAgICMgdXNlIGJpdG1hcAorICAgIGlmIGxlbihjaGFybWFwKSA9PSAyNTY6CiAgICAgICAgIGRhdGEgPSBfbWtfYml0bWFwKGNoYXJtYXApCi0gICAgICAgIG91dGFwcGVuZCgoQ0hBUlNFVCwgZGF0YSkpCisgICAgICAgIG91dC5hcHBlbmQoKENIQVJTRVQsIGRhdGEpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICByZXR1cm4gb3V0Ci0gICAgcmV0dXJuIGNoYXJzZXQKIAotZGVmIF9ta19iaXRtYXAoYml0cyk6Ci0gICAgZGF0YSA9IFtdCi0gICAgZGF0YWFwcGVuZCA9IGRhdGEuYXBwZW5kCi0gICAgaWYgX3NyZS5DT0RFU0laRSA9PSAyOgotICAgICAgICBzdGFydCA9ICgxLCAwKQotICAgIGVsc2U6Ci0gICAgICAgIHN0YXJ0ID0gKDEsIDApCi0gICAgbSwgdiA9IHN0YXJ0Ci0gICAgZm9yIGMgaW4gYml0czoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIHYgPSB2ICsgbQotICAgICAgICBtID0gbSArIG0KLSAgICAgICAgaWYgbSA+IE1BWENPREU6Ci0gICAgICAgICAgICBkYXRhYXBwZW5kKHYpCi0gICAgICAgICAgICBtLCB2ID0gc3RhcnQKLSAgICByZXR1cm4gZGF0YQorICAgICMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQorICAgICMgc2V0IGlzIGNvbnN0cnVjdGVkLiBUaGVuLCB0aGlzIGJpdG1hcCBpcyBzbGljZWQgaW50byBjaHVua3Mgb2YgMjU2CisgICAgIyBjaGFyYWN0ZXJzLCBkdXBsaWNhdGUgY2h1bmtzIGFyZSBlbGltaW5hdGVkLCBhbmQgZWFjaCBjaHVuayBpcworICAgICMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcworICAgICMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgd29yZCBzZXF1ZW5jZSwgY29uc2lzdGluZyBvZiBvbmUgd29yZCBmb3IKKyAgICAjIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNodW5rcywgYSBzZXF1ZW5jZSBvZiAyNTYgYnl0ZXMgKDY0IHdvcmRzKQorICAgICMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQorICAgICMgc2VxdWVuY2Ugb2YgMjU2LWJpdCBjaHVua3MgKDggd29yZHMgZWFjaCkuCiAKLSMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQotIyBzZXQgaXMgY29uc3RydWN0ZWQuIFRoZW4sIHRoaXMgYml0bWFwIGlzIHNsaWNlZCBpbnRvIGNodW5rcyBvZiAyNTYKLSMgY2hhcmFjdGVycywgZHVwbGljYXRlIGNodW5rcyBhcmUgZWxpbWluYXRlZCwgYW5kIGVhY2ggY2h1bmsgaXMKLSMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcwotIyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCB3b3JkIHNlcXVlbmNlLCBjb25zaXN0aW5nIG9mIG9uZSB3b3JkIGZvcgotIyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjaHVua3MsIGEgc2VxdWVuY2Ugb2YgMjU2IGJ5dGVzICg2NCB3b3JkcykKLSMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQotIyBzZXF1ZW5jZSBvZiAyNTYtYml0IGNodW5rcyAoOCB3b3JkcyBlYWNoKS4KKyAgICAjIENvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGdvb2Q6IGluIGEgdHlwaWNhbCBjaGFyc2V0LCBsYXJnZSByYW5nZXMgb2YKKyAgICAjIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCisgICAgIyBsZXR0ZXJzIGFyZSB0byBiZSBtYXRjaGVkKSwgb3IgY29tcGxldGVseSBpbmNsdWRlZCAoZS5nLiBpZiBsYXJnZQorICAgICMgc3VicmFuZ2VzIG9mIEthbmppIG1hdGNoKS4gVGhlc2UgcmFuZ2VzIHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkKKyAgICAjIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KIAotIyBDb21wcmVzc2lvbiBpcyBub3JtYWxseSBnb29kOiBpbiBhIHR5cGljYWwgY2hhcnNldCwgbGFyZ2UgcmFuZ2VzIG9mCi0jIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCi0jIGxldHRlcnMgYXJlIHRvIGJlIG1hdGNoZWQpLCBvciBjb21wbGV0ZWx5IGluY2x1ZGVkIChlLmcuIGlmIGxhcmdlCi0jIHN1YnJhbmdlcyBvZiBLYW5qaSBtYXRjaCkuIFRoZXNlIHJhbmdlcyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5Ci0jIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KKyAgICAjIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKKyAgICAjIHRoZSBVbmljb2RlIGNoYXJhY3RlciBpcyBhbiBpbmRleCBpbnRvIHRoZSBjaHVuayBudW1iZXIsIGFuZCB0aGUKKyAgICAjIGxlc3Mgc2lnbmlmaWNhbnQgYnl0ZSBpcyBhIGJpdCBpbmRleCBpbiB0aGUgY2h1bmsgKGp1c3QgbGlrZSB0aGUKKyAgICAjIENIQVJTRVQgbWF0Y2hpbmcpLgogCi0jIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKLSMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGlzIGFuIGluZGV4IGludG8gdGhlIGNodW5rIG51bWJlciwgYW5kIHRoZQotIyBsZXNzIHNpZ25pZmljYW50IGJ5dGUgaXMgYSBiaXQgaW5kZXggaW4gdGhlIGNodW5rIChqdXN0IGxpa2UgdGhlCi0jIENIQVJTRVQgbWF0Y2hpbmcpLgotCi0jIFRoZSBCSUdDSEFSU0VUIG9wY29kZSBzdGlsbCBzdXBwb3J0cyBvbmx5IHN1YnNldHMKLSMgb2YgdGhlIGJhc2ljIG11bHRpbGluZ3VhbCBwbGFuZTsgYW4gZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uCi0jIGZvciBhbGwgb2YgVW5pY29kZSBoYXMgbm90IHlldCBiZWVuIGRldmVsb3BlZC4gVGhpcyBtZWFucywKLSMgaW4gcGFydGljdWxhciwgdGhhdCBuZWdhdGVkIGNoYXJzZXRzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcwotIyBiaWdjaGFyc2V0cy4KLQotZGVmIF9vcHRpbWl6ZV91bmljb2RlKGNoYXJzZXQsIGZpeHVwKToKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBhcnJheQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICBjaGFybWFwID0gWzBdKjY1NTM2Ci0gICAgbmVnYXRlID0gMAotICAgIHRyeToKLSAgICAgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgotICAgICAgICAgICAgaWYgb3AgaXMgTkVHQVRFOgotICAgICAgICAgICAgICAgIG5lZ2F0ZSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgTElURVJBTDoKLSAgICAgICAgICAgICAgICBjaGFybWFwW2ZpeHVwKGF2KV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgotICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGZpeHVwKGF2WzBdKSwgZml4dXAoYXZbMV0pKzEpOgotICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBDQVRFR09SWToKLSAgICAgICAgICAgICAgICAjIFhYWDogY291bGQgZXhwYW5kIGNhdGVnb3J5Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBub24tQk1QIGNoYXJhY3RlcnM7IFhYWCBub3cgdGhleSBzaG91bGQgd29yawotICAgICAgICByZXR1cm4gY2hhcnNldAotICAgIGlmIG5lZ2F0ZToKLSAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgIT0gNjU1MzU6Ci0gICAgICAgICAgICAjIFhYWDogbmVnYXRpb24gZG9lcyBub3Qgd29yayB3aXRoIGJpZyBjaGFyc2V0cwotICAgICAgICAgICAgIyBYWFgyOiBub3cgdGhleSBzaG91bGQgd29yaywgYnV0IHJlbW92aW5nIHRoaXMgd2lsbCBtYWtlIHRoZQotICAgICAgICAgICAgIyBjaGFybWFwIDE3IHRpbWVzIGJpZ2dlcgotICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjU1MzYpOgotICAgICAgICAgICAgY2hhcm1hcFtpXSA9IG5vdCBjaGFybWFwW2ldCisgICAgY2hhcm1hcCA9IGJ5dGVzKGNoYXJtYXApICMgc2hvdWxkIGJlIGhhc2hhYmxlCiAgICAgY29tcHMgPSB7fQotICAgIG1hcHBpbmcgPSBbMF0qMjU2CisgICAgbWFwcGluZyA9IGJ5dGVhcnJheSgyNTYpCiAgICAgYmxvY2sgPSAwCi0gICAgZGF0YSA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKLSAgICAgICAgY2h1bmsgPSB0dXBsZShjaGFybWFwW2kqMjU2OihpKzEpKjI1Nl0pCi0gICAgICAgIG5ldyA9IGNvbXBzLnNldGRlZmF1bHQoY2h1bmssIGJsb2NrKQotICAgICAgICBtYXBwaW5nW2ldID0gbmV3Ci0gICAgICAgIGlmIG5ldyA9PSBibG9jazoKLSAgICAgICAgICAgIGJsb2NrID0gYmxvY2sgKyAxCi0gICAgICAgICAgICBkYXRhID0gZGF0YSArIF9ta19iaXRtYXAoY2h1bmspCi0gICAgaGVhZGVyID0gW2Jsb2NrXQotICAgIGlmIF9zcmUuQ09ERVNJWkUgPT0gMjoKLSAgICAgICAgY29kZSA9ICdIJwotICAgIGVsc2U6Ci0gICAgICAgIGNvZGUgPSAnSScKLSAgICAjIENvbnZlcnQgYmxvY2sgaW5kaWNlcyB0byBieXRlIGFycmF5IG9mIDI1NiBieXRlcwotICAgIG1hcHBpbmcgPSBhcnJheS5hcnJheSgnQicsIG1hcHBpbmcpLnRvYnl0ZXMoKQotICAgICMgQ29udmVydCBieXRlIGFycmF5IHRvIHdvcmQgYXJyYXkKLSAgICBtYXBwaW5nID0gYXJyYXkuYXJyYXkoY29kZSwgbWFwcGluZykKLSAgICBhc3NlcnQgbWFwcGluZy5pdGVtc2l6ZSA9PSBfc3JlLkNPREVTSVpFCi0gICAgYXNzZXJ0IGxlbihtYXBwaW5nKSAqIG1hcHBpbmcuaXRlbXNpemUgPT0gMjU2Ci0gICAgaGVhZGVyID0gaGVhZGVyICsgbWFwcGluZy50b2xpc3QoKQotICAgIGRhdGFbMDowXSA9IGhlYWRlcgotICAgIHJldHVybiBbKEJJR0NIQVJTRVQsIGRhdGEpXQorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgIGZvciBpIGluIHJhbmdlKDAsIDY1NTM2LCAyNTYpOgorICAgICAgICBjaHVuayA9IGNoYXJtYXBbaTogaSArIDI1Nl0KKyAgICAgICAgaWYgY2h1bmsgaW4gY29tcHM6CisgICAgICAgICAgICBtYXBwaW5nW2kgLy8gMjU2XSA9IGNvbXBzW2NodW5rXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ1tpIC8vIDI1Nl0gPSBjb21wc1tjaHVua10gPSBibG9jaworICAgICAgICAgICAgYmxvY2sgKz0gMQorICAgICAgICAgICAgZGF0YSArPSBjaHVuaworICAgIGRhdGEgPSBfbWtfYml0bWFwKGRhdGEpCisgICAgZGF0YVswOjBdID0gW2Jsb2NrXSArIF9ieXRlc190b19jb2RlcyhtYXBwaW5nKQorICAgIG91dC5hcHBlbmQoKEJJR0NIQVJTRVQsIGRhdGEpKQorICAgIG91dCArPSB0YWlsCisgICAgcmV0dXJuIG91dAorCitfQ09ERUJJVFMgPSBfc3JlLkNPREVTSVpFICogOAorX0JJVFNfVFJBTlMgPSBiJzAnICsgYicxJyAqIDI1NQorZGVmIF9ta19iaXRtYXAoYml0cywgX0NPREVCSVRTPV9DT0RFQklUUywgX2ludD1pbnQpOgorICAgIHMgPSBiaXRzLnRyYW5zbGF0ZShfQklUU19UUkFOUylbOjotMV0KKyAgICByZXR1cm4gW19pbnQoc1tpIC0gX0NPREVCSVRTOiBpXSwgMikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzKSwgMCwgLV9DT0RFQklUUyldCisKK2RlZiBfYnl0ZXNfdG9fY29kZXMoYik6CisgICAgIyBDb252ZXJ0IGJsb2NrIGluZGljZXMgdG8gd29yZCBhcnJheQorICAgIGltcG9ydCBhcnJheQorICAgIGEgPSBhcnJheS5hcnJheSgnSScsIGIpCisgICAgYXNzZXJ0IGEuaXRlbXNpemUgPT0gX3NyZS5DT0RFU0laRQorICAgIGFzc2VydCBsZW4oYSkgKiBhLml0ZW1zaXplID09IGxlbihiKQorICAgIHJldHVybiBhLnRvbGlzdCgpCiAKIGRlZiBfc2ltcGxlKGF2KToKICAgICAjIGNoZWNrIGlmIGF2IGlzIGEgInNpbXBsZSIgb3BlcmF0b3IKICAgICBsbywgaGkgPSBhdlsyXS5nZXR3aWR0aCgpCiAgICAgcmV0dXJuIGxvID09IGhpID09IDEgYW5kIGF2WzJdWzBdWzBdICE9IFNVQlBBVFRFUk4KIAorZGVmIF9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlKHByZWZpeCk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgYW4gb3ZlcmxhcCB0YWJsZSBmb3IgdGhlIGZvbGxvd2luZyBwcmVmaXguCisgICAgQW4gb3ZlcmxhcCB0YWJsZSBpcyBhIHRhYmxlIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIHByZWZpeCB3aGljaAorICAgIGluZm9ybXMgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWxmLW92ZXJsYXAgZm9yIGVhY2ggaW5kZXggaW4gdGhlIHByZWZpeDoKKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gMCwgcHJlZml4W2k6XSBjYW4ndCBvdmVybGFwIHByZWZpeFswOi4uLl0KKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gayB3aXRoIDAgPCBrIDw9IGksIHByZWZpeFtpLWsrMTppKzFdIG92ZXJsYXBzIHdpdGgKKyAgICAgIHByZWZpeFswOmtdCisgICAgIiIiCisgICAgdGFibGUgPSBbMF0gKiBsZW4ocHJlZml4KQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihwcmVmaXgpKToKKyAgICAgICAgaWR4ID0gdGFibGVbaSAtIDFdCisgICAgICAgIHdoaWxlIHByZWZpeFtpXSAhPSBwcmVmaXhbaWR4XToKKyAgICAgICAgICAgIGlmIGlkeCA9PSAwOgorICAgICAgICAgICAgICAgIHRhYmxlW2ldID0gMAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZHggPSB0YWJsZVtpZHggLSAxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFibGVbaV0gPSBpZHggKyAxCisgICAgcmV0dXJuIHRhYmxlCisKIGRlZiBfY29tcGlsZV9pbmZvKGNvZGUsIHBhdHRlcm4sIGZsYWdzKToKICAgICAjIGludGVybmFsOiBjb21waWxlIGFuIGluZm8gYmxvY2suICBpbiB0aGUgY3VycmVudCB2ZXJzaW9uLAogICAgICMgdGhpcyBjb250YWlucyBtaW4vbWF4IHBhdHRlcm4gd2lkdGgsIGFuZCBhbiBvcHRpb25hbCBsaXRlcmFsCkBAIC00NTUsMTIgKzQzNCw3IEBACiAgICAgICAgIGVtaXQocHJlZml4X3NraXApICMgc2tpcAogICAgICAgICBjb2RlLmV4dGVuZChwcmVmaXgpCiAgICAgICAgICMgZ2VuZXJhdGUgb3ZlcmxhcCB0YWJsZQotICAgICAgICB0YWJsZSA9IFstMV0gKyAoWzBdKmxlbihwcmVmaXgpKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocHJlZml4KSk6Ci0gICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbaV0rMQotICAgICAgICAgICAgd2hpbGUgdGFibGVbaSsxXSA+IDAgYW5kIHByZWZpeFtpXSAhPSBwcmVmaXhbdGFibGVbaSsxXS0xXToKLSAgICAgICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbdGFibGVbaSsxXS0xXSsxCi0gICAgICAgIGNvZGUuZXh0ZW5kKHRhYmxlWzE6XSkgIyBkb24ndCBzdG9yZSBmaXJzdCBlbnRyeQorICAgICAgICBjb2RlLmV4dGVuZChfZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZShwcmVmaXgpKQogICAgIGVsaWYgY2hhcnNldDoKICAgICAgICAgX2NvbXBpbGVfY2hhcnNldChjaGFyc2V0LCBmbGFncywgY29kZSkKICAgICBjb2RlW3NraXBdID0gbGVuKGNvZGUpIC0gc2tpcApkaWZmIC0tZ2l0IGEvTGliL3NyZV9jb25zdGFudHMucHkgYi9MaWIvc3JlX2NvbnN0YW50cy5weQppbmRleCAzZmI1ZWFjLi4yM2UzNTE2IDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbnN0YW50cy5weQorKysgYi9MaWIvc3JlX2NvbnN0YW50cy5weQpAQCAtMTUsMTEgKzE1LDcgQEAKIAogTUFHSUMgPSAyMDAzMTAxNwogCi10cnk6Ci0gICAgZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgX3NyZQotICAgIE1BWFJFUEVBVCA9IF9zcmUuTUFYUkVQRUFUID0gNjU1MzUKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKICMgU1JFIHN0YW5kYXJkIGV4Y2VwdGlvbiAoYWNjZXNzIGFzIHNyZS5lcnJvcikKICMgc2hvdWxkIHRoaXMgcmVhbGx5IGJlIGhlcmU/CkBAIC0yNTQsNiArMjUwLDggQEAKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0RPVEFMTCAlZFxuIiAlIFNSRV9GTEFHX0RPVEFMTCkKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX1VOSUNPREUgJWRcbiIgJSBTUkVfRkxBR19VTklDT0RFKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSAlZFxuIiAlIFNSRV9GTEFHX1ZFUkJPU0UpCisgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19ERUJVRyAlZFxuIiAlIFNSRV9GTEFHX0RFQlVHKQorICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfQVNDSUkgJWRcbiIgJSBTUkVfRkxBR19BU0NJSSkKIAogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fUFJFRklYICVkXG4iICUgU1JFX0lORk9fUFJFRklYKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fTElURVJBTCAlZFxuIiAlIFNSRV9JTkZPX0xJVEVSQUwpCmRpZmYgLS1naXQgYS9MaWIvc3JlX3BhcnNlLnB5IGIvTGliL3NyZV9wYXJzZS5weQppbmRleCA4YTc3NzkwLi4zMjA5Y2UwIDEwMDY0NAotLS0gYS9MaWIvc3JlX3BhcnNlLnB5CisrKyBiL0xpYi9zcmVfcGFyc2UucHkKQEAgLTEyLDkgKzEyLDggQEAKIAogIyBYWFg6IHNob3cgc3RyaW5nIG9mZnNldCBhbmQgb2ZmZW5kaW5nIGNoYXJhY3RlciBmb3IgYWxsIGVycm9ycwogCi1pbXBvcnQgc3lzCi0KIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgorZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKIAogU1BFQ0lBTF9DSEFSUyA9ICIuXFxbeygpKis/XiR8IgogUkVQRUFUX0NIQVJTID0gIiorP3siCkBAIC02MTcsNyArNjE2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXIiICUgbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGdpZCA9IHN0YXRlLmdyb3VwZGljdC5nZXQobmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdpZCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmtub3duIGdyb3VwIG5hbWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJ1bmtub3duIGdyb3VwIG5hbWU6IHswIXJ9Ii5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcihtc2cpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuYXBwZW5kKChHUk9VUFJFRiwgZ2lkKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC02NzAsNyArNjcwLDggQEAKICAgICAgICAgICAgICAgICAgICAgaWYgY29uZG5hbWUuaXNpZGVudGlmaWVyKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25kZ3JvdXAgPSBzdGF0ZS5ncm91cGRpY3QuZ2V0KGNvbmRuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29uZGdyb3VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVua25vd24gZ3JvdXAgbmFtZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInVua25vd24gZ3JvdXAgbmFtZTogezAhcn0iLmZvcm1hdChjb25kbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcihtc2cpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGdyb3VwID0gaW50KGNvbmRuYW1lKQpAQCAtNzY4LDM1ICs3NjksMzMgQEAKICAgICAjIGdyb3VwIHJlZmVyZW5jZXMKICAgICBzID0gVG9rZW5pemVyKHNvdXJjZSkKICAgICBzZ2V0ID0gcy5nZXQKLSAgICBwID0gW10KLSAgICBhID0gcC5hcHBlbmQKLSAgICBkZWYgbGl0ZXJhbChsaXRlcmFsLCBwPXAsIHBhcHBlbmQ9YSk6Ci0gICAgICAgIGlmIHAgYW5kIHBbLTFdWzBdIGlzIExJVEVSQUw6Ci0gICAgICAgICAgICBwWy0xXSA9IExJVEVSQUwsIHBbLTFdWzFdICsgbGl0ZXJhbAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFwcGVuZCgoTElURVJBTCwgbGl0ZXJhbCkpCi0gICAgc2VwID0gc291cmNlWzowXQotICAgIGlmIGlzaW5zdGFuY2Uoc2VwLCBzdHIpOgotICAgICAgICBtYWtlY2hhciA9IGNocgotICAgIGVsc2U6Ci0gICAgICAgIG1ha2VjaGFyID0gY2hyCi0gICAgd2hpbGUgMToKKyAgICBncm91cHMgPSBbXQorICAgIGxpdGVyYWxzID0gW10KKyAgICBsaXRlcmFsID0gW10KKyAgICBsYXBwZW5kID0gbGl0ZXJhbC5hcHBlbmQKKyAgICBkZWYgYWRkZ3JvdXAoaW5kZXgpOgorICAgICAgICBpZiBsaXRlcmFsOgorICAgICAgICAgICAgbGl0ZXJhbHMuYXBwZW5kKCcnLmpvaW4obGl0ZXJhbCkpCisgICAgICAgICAgICBkZWwgbGl0ZXJhbFs6XQorICAgICAgICBncm91cHMuYXBwZW5kKChsZW4obGl0ZXJhbHMpLCBpbmRleCkpCisgICAgICAgIGxpdGVyYWxzLmFwcGVuZChOb25lKQorICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRoaXMgPSBzZ2V0KCkKICAgICAgICAgaWYgdGhpcyBpcyBOb25lOgogICAgICAgICAgICAgYnJlYWsgIyBlbmQgb2YgcmVwbGFjZW1lbnQgc3RyaW5nCi0gICAgICAgIGlmIHRoaXMgYW5kIHRoaXNbMF0gPT0gIlxcIjoKKyAgICAgICAgaWYgdGhpc1swXSA9PSAiXFwiOgogICAgICAgICAgICAgIyBncm91cAotICAgICAgICAgICAgYyA9IHRoaXNbMToyXQorICAgICAgICAgICAgYyA9IHRoaXNbMV0KICAgICAgICAgICAgIGlmIGMgPT0gImciOgogICAgICAgICAgICAgICAgIG5hbWUgPSAiIgogICAgICAgICAgICAgICAgIGlmIHMubWF0Y2goIjwiKToKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW50ZXJtaW5hdGVkIGdyb3VwIG5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciA9PSAiPiI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBjaGFyCiAgICAgICAgICAgICAgICAgaWYgbm90IG5hbWU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJtaXNzaW5nIGdyb3VwIG5hbWUiKQogICAgICAgICAgICAgICAgIHRyeToKQEAgLTgwOSw1MSArODA4LDQwIEBACiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGF0dGVybi5ncm91cGluZGV4W25hbWVdCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoInVua25vd24gZ3JvdXAgbmFtZSIpCi0gICAgICAgICAgICAgICAgYSgoTUFSSywgaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInVua25vd24gZ3JvdXAgbmFtZTogezAhcn0iLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcihtc2cpCisgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW5kZXgpCiAgICAgICAgICAgICBlbGlmIGMgPT0gIjAiOgogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQotICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKKyAgICAgICAgICAgICAgICBsYXBwZW5kKGNocihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCiAgICAgICAgICAgICBlbGlmIGMgaW4gRElHSVRTOgogICAgICAgICAgICAgICAgIGlzb2N0YWwgPSBGYWxzZQogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjIGluIE9DVERJR0lUUyBhbmQgdGhpc1syXSBpbiBPQ1RESUdJVFMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBzLm5leHQgaW4gT0NURElHSVRTKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgaXNvY3RhbCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGFwcGVuZChjaHIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBpc29jdGFsOgotICAgICAgICAgICAgICAgICAgICBhKChNQVJLLCBpbnQodGhpc1sxOl0pKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW50KHRoaXNbMTpdKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gbWFrZWNoYXIoRVNDQVBFU1t0aGlzXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcyA9IGNocihFU0NBUEVTW3RoaXNdWzFdKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGxpdGVyYWwodGhpcykKKyAgICAgICAgICAgICAgICBsYXBwZW5kKHRoaXMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaXRlcmFsKHRoaXMpCi0gICAgIyBjb252ZXJ0IHRlbXBsYXRlIHRvIGdyb3VwcyBhbmQgbGl0ZXJhbHMgbGlzdHMKLSAgICBpID0gMAotICAgIGdyb3VwcyA9IFtdCi0gICAgZ3JvdXBzYXBwZW5kID0gZ3JvdXBzLmFwcGVuZAotICAgIGxpdGVyYWxzID0gW05vbmVdICogbGVuKHApCi0gICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6Ci0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4Ci0gICAgZWxzZToKKyAgICAgICAgICAgIGxhcHBlbmQodGhpcykKKyAgICBpZiBsaXRlcmFsOgorICAgICAgICBsaXRlcmFscy5hcHBlbmQoJycuam9pbihsaXRlcmFsKSkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6CiAgICAgICAgICMgVGhlIHRva2VuaXplciBpbXBsaWNpdGx5IGRlY29kZXMgYnl0ZXMgb2JqZWN0cyBhcyBsYXRpbi0xLCB3ZSBtdXN0CiAgICAgICAgICMgdGhlcmVmb3JlIHJlLWVuY29kZSB0aGUgZmluYWwgcmVwcmVzZW50YXRpb24uCi0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4LmVuY29kZSgnbGF0aW4tMScpCi0gICAgZm9yIGMsIHMgaW4gcDoKLSAgICAgICAgaWYgYyBpcyBNQVJLOgotICAgICAgICAgICAgZ3JvdXBzYXBwZW5kKChpLCBzKSkKLSAgICAgICAgICAgICMgbGl0ZXJhbFtpXSBpcyBhbHJlYWR5IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpdGVyYWxzW2ldID0gZW5jb2RlKHMpCi0gICAgICAgIGkgPSBpICsgMQorICAgICAgICBsaXRlcmFscyA9IFtOb25lIGlmIHMgaXMgTm9uZSBlbHNlIHMuZW5jb2RlKCdsYXRpbi0xJykgZm9yIHMgaW4gbGl0ZXJhbHNdCiAgICAgcmV0dXJuIGdyb3VwcywgbGl0ZXJhbHMKIAogZGVmIGV4cGFuZF90ZW1wbGF0ZSh0ZW1wbGF0ZSwgbWF0Y2gpOgpkaWZmIC0tZ2l0IGEvTGliL3NzbC5weSBiL0xpYi9zc2wucHkKaW5kZXggY2Q4ZDZiNC4uZDNjMThlZCAxMDA2NDQKLS0tIGEvTGliL3NzbC5weQorKysgYi9MaWIvc3NsLnB5CkBAIC01MiwxMCArNTIsNDcgQEAKIFBST1RPQ09MX1NTTHYzCiBQUk9UT0NPTF9TU0x2MjMKIFBST1RPQ09MX1RMU3YxCitQUk9UT0NPTF9UTFN2MV8xCitQUk9UT0NPTF9UTFN2MV8yCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGlkZW50aWZ5IHZhcmlvdXMgU1NMIGFsZXJ0IG1lc3NhZ2UgZGVzY3JpcHRpb25zIGFzIHBlcgoraHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNgorCitBTEVSVF9ERVNDUklQVElPTl9DTE9TRV9OT1RJRlkKK0FMRVJUX0RFU0NSSVBUSU9OX1VORVhQRUNURURfTUVTU0FHRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX1JFQ09SRF9NQUMKK0FMRVJUX0RFU0NSSVBUSU9OX1JFQ09SRF9PVkVSRkxPVworQUxFUlRfREVTQ1JJUFRJT05fREVDT01QUkVTU0lPTl9GQUlMVVJFCitBTEVSVF9ERVNDUklQVElPTl9IQU5EU0hBS0VfRkFJTFVSRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFCitBTEVSVF9ERVNDUklQVElPTl9VTlNVUFBPUlRFRF9DRVJUSUZJQ0FURQorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfUkVWT0tFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfRVhQSVJFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5LTk9XTgorQUxFUlRfREVTQ1JJUFRJT05fSUxMRUdBTF9QQVJBTUVURVIKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fQ0EKK0FMRVJUX0RFU0NSSVBUSU9OX0FDQ0VTU19ERU5JRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ09ERV9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fREVDUllQVF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fUFJPVE9DT0xfVkVSU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fSU5TVUZGSUNJRU5UX1NFQ1VSSVRZCitBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fVVNFUl9DQU5DRUxMRUQKK0FMRVJUX0RFU0NSSVBUSU9OX05PX1JFTkVHT1RJQVRJT04KK0FMRVJUX0RFU0NSSVBUSU9OX1VOU1VQUE9SVEVEX0VYVEVOU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFCitBTEVSVF9ERVNDUklQVElPTl9VTlJFQ09HTklaRURfTkFNRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fUFNLX0lERU5USVRZCiAiIiIKIAogaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSBlbnVtIGltcG9ydCBFbnVtIGFzIF9FbnVtCiAKIGltcG9ydCBfc3NsICAgICAgICAgICAgICMgaWYgd2UgY2FuJ3QgaW1wb3J0IGl0LCBsZXQgdGhlIGVycm9yIHByb3BhZ2F0ZQogCkBAIC02NiwzNSArMTAzLDI2IEBACiAgICAgU1NMU3lzY2FsbEVycm9yLCBTU0xFT0ZFcnJvciwKICAgICApCiBmcm9tIF9zc2wgaW1wb3J0IENFUlRfTk9ORSwgQ0VSVF9PUFRJT05BTCwgQ0VSVF9SRVFVSVJFRAotZnJvbSBfc3NsIGltcG9ydCAoCi0gICAgT1BfQUxMLCBPUF9OT19TU0x2MiwgT1BfTk9fU1NMdjMsIE9QX05PX1RMU3YxLAotICAgIE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgT1BfU0lOR0xFX0RIX1VTRQotICAgICkKLXRyeToKLSAgICBmcm9tIF9zc2wgaW1wb3J0IE9QX05PX0NPTVBSRVNTSU9OCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotdHJ5OgotICAgIGZyb20gX3NzbCBpbXBvcnQgT1BfU0lOR0xFX0VDREhfVVNFCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcworZnJvbSBfc3NsIGltcG9ydCAoVkVSSUZZX0RFRkFVTFQsIFZFUklGWV9DUkxfQ0hFQ0tfTEVBRiwgVkVSSUZZX0NSTF9DSEVDS19DSEFJTiwKKyAgICBWRVJJRllfWDUwOV9TVFJJQ1QpCitmcm9tIF9zc2wgaW1wb3J0IHR4dDJvYmogYXMgX3R4dDJvYmosIG5pZDJvYmogYXMgX25pZDJvYmoKIGZyb20gX3NzbCBpbXBvcnQgUkFORF9zdGF0dXMsIFJBTkRfZWdkLCBSQU5EX2FkZCwgUkFORF9ieXRlcywgUkFORF9wc2V1ZG9fYnl0ZXMKLWZyb20gX3NzbCBpbXBvcnQgKAotICAgIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiwKLSAgICBTU0xfRVJST1JfV0FOVF9SRUFELAotICAgIFNTTF9FUlJPUl9XQU5UX1dSSVRFLAotICAgIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQLAotICAgIFNTTF9FUlJPUl9TWVNDQUxMLAotICAgIFNTTF9FUlJPUl9TU0wsCi0gICAgU1NMX0VSUk9SX1dBTlRfQ09OTkVDVCwKLSAgICBTU0xfRVJST1JfRU9GLAotICAgIFNTTF9FUlJPUl9JTlZBTElEX0VSUk9SX0NPREUsCi0gICAgKQorCitkZWYgX2ltcG9ydF9zeW1ib2xzKHByZWZpeCk6CisgICAgZm9yIG4gaW4gZGlyKF9zc2wpOgorICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgIGdsb2JhbHMoKVtuXSA9IGdldGF0dHIoX3NzbCwgbikKKworX2ltcG9ydF9zeW1ib2xzKCdPUF8nKQorX2ltcG9ydF9zeW1ib2xzKCdBTEVSVF9ERVNDUklQVElPTl8nKQorX2ltcG9ydF9zeW1ib2xzKCdTU0xfRVJST1JfJykKKwogZnJvbSBfc3NsIGltcG9ydCBIQVNfU05JLCBIQVNfRUNESCwgSEFTX05QTgotZnJvbSBfc3NsIGltcG9ydCAoUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywKLSAgICAgICAgICAgICAgICAgIFBST1RPQ09MX1RMU3YxKQorCitmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1NTTHYzLCBQUk9UT0NPTF9TU0x2MjMsIFBST1RPQ09MX1RMU3YxCiBmcm9tIF9zc2wgaW1wb3J0IF9PUEVOU1NMX0FQSV9WRVJTSU9OCiAKKwogX1BST1RPQ09MX05BTUVTID0gewogICAgIFBST1RPQ09MX1RMU3YxOiAiVExTdjEiLAogICAgIFBST1RPQ09MX1NTTHYyMzogIlNTTHYyMyIsCkBAIC0xMDgsMTQgKzEzNiwyNSBAQAogZWxzZToKICAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfU1NMdjJdID0gIlNTTHYyIgogCi1mcm9tIHNvY2tldCBpbXBvcnQgZ2V0bmFtZWluZm8gYXMgX2dldG5hbWVpbmZvCi1mcm9tIHNvY2tldCBpbXBvcnQgZXJyb3IgYXMgc29ja2V0X2Vycm9yCit0cnk6CisgICAgZnJvbSBfc3NsIGltcG9ydCBQUk9UT0NPTF9UTFN2MV8xLCBQUk9UT0NPTF9UTFN2MV8yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMV0gPSAiVExTdjEuMSIKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMl0gPSAiVExTdjEuMiIKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgZnJvbSBfc3NsIGltcG9ydCBlbnVtX2NlcnRpZmljYXRlcywgZW51bV9jcmxzCisKIGZyb20gc29ja2V0IGltcG9ydCBzb2NrZXQsIEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBjcmVhdGVfY29ubmVjdGlvbgogZnJvbSBzb2NrZXQgaW1wb3J0IFNPTF9TT0NLRVQsIFNPX1RZUEUKIGltcG9ydCBiYXNlNjQgICAgICAgICMgZm9yIERFUi10by1QRU0gdHJhbnNsYXRpb24KLWltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCBlcnJubwogCisKK3NvY2tldF9lcnJvciA9IE9TRXJyb3IgICMga2VlcCB0aGF0IHB1YmxpYyBuYW1lIGluIG1vZHVsZSBuYW1lc3BhY2UKKwogaWYgX3NzbC5IQVNfVExTX1VOSVFVRToKICAgICBDSEFOTkVMX0JJTkRJTkdfVFlQRVMgPSBbJ3Rscy11bmlxdWUnXQogZWxzZToKQEAgLTEyMyw3ICsxNjIsMzcgQEAKIAogIyBEaXNhYmxlIHdlYWsgb3IgaW5zZWN1cmUgY2lwaGVycyBieSBkZWZhdWx0CiAjIChPcGVuU1NMJ3MgZGVmYXVsdCBzZXR0aW5nIGlzICdERUZBVUxUOiFhTlVMTDohZU5VTEwnKQotX0RFRkFVTFRfQ0lQSEVSUyA9ICdERUZBVUxUOiFhTlVMTDohZU5VTEw6IUxPVzohRVhQT1JUOiFTU0x2MicKKyMgRW5hYmxlIGEgYmV0dGVyIHNldCBvZiBjaXBoZXJzIGJ5IGRlZmF1bHQKKyMgVGhpcyBsaXN0IGhhcyBiZWVuIGV4cGxpY2l0bHkgY2hvc2VuIHRvOgorIyAgICogUHJlZmVyIGNpcGhlciBzdWl0ZXMgdGhhdCBvZmZlciBwZXJmZWN0IGZvcndhcmQgc2VjcmVjeSAoREhFL0VDREhFKQorIyAgICogUHJlZmVyIEVDREhFIG92ZXIgREhFIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKKyMgICAqIFByZWZlciBhbnkgQUVTLUdDTSBvdmVyIGFueSBBRVMtQ0JDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5CisjICAgKiBUaGVuIFVzZSBISUdIIGNpcGhlciBzdWl0ZXMgYXMgYSBmYWxsYmFjaworIyAgICogVGhlbiBVc2UgM0RFUyBhcyBmYWxsYmFjayB3aGljaCBpcyBzZWN1cmUgYnV0IHNsb3cKKyMgICAqIEZpbmFsbHkgdXNlIFJDNCBhcyBhIGZhbGxiYWNrIHdoaWNoIGlzIHByb2JsZW1hdGljIGJ1dCBuZWVkZWQgZm9yCisjICAgICBjb21wYXRpYmlsaXR5IHNvbWUgdGltZXMuCisjICAgKiBEaXNhYmxlIE5VTEwgYXV0aGVudGljYXRpb24sIE5VTEwgZW5jcnlwdGlvbiwgYW5kIE1ENSBNQUNzIGZvciBzZWN1cml0eQorIyAgICAgcmVhc29ucworX0RFRkFVTFRfQ0lQSEVSUyA9ICgKKyAgICAnRUNESCtBRVNHQ006REgrQUVTR0NNOkVDREgrQUVTMjU2OkRIK0FFUzI1NjpFQ0RIK0FFUzEyODpESCtBRVM6RUNESCtISUdIOicKKyAgICAnREgrSElHSDpFQ0RIKzNERVM6REgrM0RFUzpSU0ErQUVTR0NNOlJTQStBRVM6UlNBK0hJR0g6UlNBKzNERVM6RUNESCtSQzQ6JworICAgICdESCtSQzQ6UlNBK1JDNDohYU5VTEw6IWVOVUxMOiFNRDUnCispCisKKyMgUmVzdHJpY3RlZCBhbmQgbW9yZSBzZWN1cmUgY2lwaGVycyBmb3IgdGhlIHNlcnZlciBzaWRlCisjIFRoaXMgbGlzdCBoYXMgYmVlbiBleHBsaWNpdGx5IGNob3NlbiB0bzoKKyMgICAqIFByZWZlciBjaXBoZXIgc3VpdGVzIHRoYXQgb2ZmZXIgcGVyZmVjdCBmb3J3YXJkIHNlY3JlY3kgKERIRS9FQ0RIRSkKKyMgICAqIFByZWZlciBFQ0RIRSBvdmVyIERIRSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisjICAgKiBQcmVmZXIgYW55IEFFUy1HQ00gb3ZlciBhbnkgQUVTLUNCQyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eQorIyAgICogVGhlbiBVc2UgSElHSCBjaXBoZXIgc3VpdGVzIGFzIGEgZmFsbGJhY2sKKyMgICAqIFRoZW4gVXNlIDNERVMgYXMgZmFsbGJhY2sgd2hpY2ggaXMgc2VjdXJlIGJ1dCBzbG93CisjICAgKiBEaXNhYmxlIE5VTEwgYXV0aGVudGljYXRpb24sIE5VTEwgZW5jcnlwdGlvbiwgTUQ1IE1BQ3MsIERTUywgYW5kIFJDNCBmb3IKKyMgICAgIHNlY3VyaXR5IHJlYXNvbnMKK19SRVNUUklDVEVEX1NFUlZFUl9DSVBIRVJTID0gKAorICAgICdFQ0RIK0FFU0dDTTpESCtBRVNHQ006RUNESCtBRVMyNTY6REgrQUVTMjU2OkVDREgrQUVTMTI4OkRIK0FFUzpFQ0RIK0hJR0g6JworICAgICdESCtISUdIOkVDREgrM0RFUzpESCszREVTOlJTQStBRVNHQ006UlNBK0FFUzpSU0ErSElHSDpSU0ErM0RFUzohYU5VTEw6JworICAgICchZU5VTEw6IU1ENTohRFNTOiFSQzQnCispCiAKIAogY2xhc3MgQ2VydGlmaWNhdGVFcnJvcihWYWx1ZUVycm9yKToKQEAgLTE4OCw3ICsyNTcsOSBAQAogICAgIHJldHVybnMgbm90aGluZy4KICAgICAiIiIKICAgICBpZiBub3QgY2VydDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZW1wdHkgb3Igbm8gY2VydGlmaWNhdGUiKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJlbXB0eSBvciBubyBjZXJ0aWZpY2F0ZSwgbWF0Y2hfaG9zdG5hbWUgbmVlZHMgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTCBzb2NrZXQgb3IgU1NMIGNvbnRleHQgd2l0aCBlaXRoZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQiKQogICAgIGRuc25hbWVzID0gW10KICAgICBzYW4gPSBjZXJ0LmdldCgnc3ViamVjdEFsdE5hbWUnLCAoKSkKICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzYW46CkBAIC0yMjAsMTEgKzI5MSw1OCBAQAogICAgICAgICAgICAgInN1YmplY3RBbHROYW1lIGZpZWxkcyB3ZXJlIGZvdW5kIikKIAogCitEZWZhdWx0VmVyaWZ5UGF0aHMgPSBuYW1lZHR1cGxlKCJEZWZhdWx0VmVyaWZ5UGF0aHMiLAorICAgICJjYWZpbGUgY2FwYXRoIG9wZW5zc2xfY2FmaWxlX2VudiBvcGVuc3NsX2NhZmlsZSBvcGVuc3NsX2NhcGF0aF9lbnYgIgorICAgICJvcGVuc3NsX2NhcGF0aCIpCisKK2RlZiBnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKToKKyAgICAiIiJSZXR1cm4gcGF0aHMgdG8gZGVmYXVsdCBjYWZpbGUgYW5kIGNhcGF0aC4KKyAgICAiIiIKKyAgICBwYXJ0cyA9IF9zc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKworICAgICMgZW52aXJvbm1lbnQgdmFycyBzaGFkb3cgcGF0aHMKKyAgICBjYWZpbGUgPSBvcy5lbnZpcm9uLmdldChwYXJ0c1swXSwgcGFydHNbMV0pCisgICAgY2FwYXRoID0gb3MuZW52aXJvbi5nZXQocGFydHNbMl0sIHBhcnRzWzNdKQorCisgICAgcmV0dXJuIERlZmF1bHRWZXJpZnlQYXRocyhjYWZpbGUgaWYgb3MucGF0aC5pc2ZpbGUoY2FmaWxlKSBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhdGggaWYgb3MucGF0aC5pc2RpcihjYXBhdGgpIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJ0cykKKworCitjbGFzcyBfQVNOMU9iamVjdChuYW1lZHR1cGxlKCJfQVNOMU9iamVjdCIsICJuaWQgc2hvcnRuYW1lIGxvbmduYW1lIG9pZCIpKToKKyAgICAiIiJBU04uMSBvYmplY3QgaWRlbnRpZmllciBsb29rdXAKKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCBvaWQpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgKl90eHQyb2JqKG9pZCwgbmFtZT1GYWxzZSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbW5pZChjbHMsIG5pZCk6CisgICAgICAgICIiIkNyZWF0ZSBfQVNOMU9iamVjdCBmcm9tIE9wZW5TU0wgbnVtZXJpYyBJRAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMsICpfbmlkMm9iaihuaWQpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21uYW1lKGNscywgbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZSBfQVNOMU9iamVjdCBmcm9tIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBvciBPSUQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzLCAqX3R4dDJvYmoobmFtZSwgbmFtZT1UcnVlKSkKKworCitjbGFzcyBQdXJwb3NlKF9BU04xT2JqZWN0LCBfRW51bSk6CisgICAgIiIiU1NMQ29udGV4dCBwdXJwb3NlIGZsYWdzIHdpdGggWDUwOXYzIEV4dGVuZGVkIEtleSBVc2FnZSBvYmplY3RzCisgICAgIiIiCisgICAgU0VSVkVSX0FVVEggPSAnMS4zLjYuMS41LjUuNy4zLjEnCisgICAgQ0xJRU5UX0FVVEggPSAnMS4zLjYuMS41LjUuNy4zLjInCisKKwogY2xhc3MgU1NMQ29udGV4dChfU1NMQ29udGV4dCk6CiAgICAgIiIiQW4gU1NMQ29udGV4dCBob2xkcyB2YXJpb3VzIFNTTC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQKICAgICBkYXRhLCBzdWNoIGFzIGNlcnRpZmljYXRlcyBhbmQgcG9zc2libHkgYSBwcml2YXRlIGtleS4iIiIKIAotICAgIF9fc2xvdHNfXyA9ICgncHJvdG9jb2wnLCkKKyAgICBfX3Nsb3RzX18gPSAoJ3Byb3RvY29sJywgJ19fd2Vha3JlZl9fJykKKyAgICBfd2luZG93c19jZXJ0X3N0b3JlcyA9ICgiQ0EiLCAiUk9PVCIpCiAKICAgICBkZWYgX19uZXdfXyhjbHMsIHByb3RvY29sLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmID0gX1NTTENvbnRleHQuX19uZXdfXyhjbHMsIHByb3RvY29sKQpAQCAtMjU2LDYgKzM3NCwxMTIgQEAKIAogICAgICAgICBzZWxmLl9zZXRfbnBuX3Byb3RvY29scyhwcm90b3MpCiAKKyAgICBkZWYgX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyhzZWxmLCBzdG9yZW5hbWUsIHB1cnBvc2UpOgorICAgICAgICBjZXJ0cyA9IGJ5dGVhcnJheSgpCisgICAgICAgIGZvciBjZXJ0LCBlbmNvZGluZywgdHJ1c3QgaW4gZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVuYW1lKToKKyAgICAgICAgICAgICMgQ0EgY2VydHMgYXJlIG5ldmVyIFBLQ1MjNyBlbmNvZGVkCisgICAgICAgICAgICBpZiBlbmNvZGluZyA9PSAieDUwOV9hc24iOgorICAgICAgICAgICAgICAgIGlmIHRydXN0IGlzIFRydWUgb3IgcHVycG9zZS5vaWQgaW4gdHJ1c3Q6CisgICAgICAgICAgICAgICAgICAgIGNlcnRzLmV4dGVuZChjZXJ0KQorICAgICAgICBzZWxmLmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2VydHMpCisgICAgICAgIHJldHVybiBjZXJ0cworCisgICAgZGVmIGxvYWRfZGVmYXVsdF9jZXJ0cyhzZWxmLCBwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwdXJwb3NlLCBfQVNOMU9iamVjdCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IocHVycG9zZSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBmb3Igc3RvcmVuYW1lIGluIHNlbGYuX3dpbmRvd3NfY2VydF9zdG9yZXM6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9hZF93aW5kb3dzX3N0b3JlX2NlcnRzKHN0b3JlbmFtZSwgcHVycG9zZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfY29udGV4dChwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgsICosIGNhZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKToKKyAgICAiIiJDcmVhdGUgYSBTU0xDb250ZXh0IG9iamVjdCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuCisKKyAgICBOT1RFOiBUaGUgcHJvdG9jb2wgYW5kIHNldHRpbmdzIG1heSBjaGFuZ2UgYW55dGltZSB3aXRob3V0IHByaW9yCisgICAgICAgICAgZGVwcmVjYXRpb24uIFRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgZmFpciBiYWxhbmNlIGJldHdlZW4gbWF4aW11bQorICAgICAgICAgIGNvbXBhdGliaWxpdHkgYW5kIHNlY3VyaXR5LgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHB1cnBvc2UsIF9BU04xT2JqZWN0KToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKHB1cnBvc2UpCisKKyAgICBjb250ZXh0ID0gU1NMQ29udGV4dChQUk9UT0NPTF9TU0x2MjMpCisKKyAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gT1BfTk9fU1NMdjIKKworICAgICMgU1NMdjMgaGFzIHByb2JsZW1hdGljIHNlY3VyaXR5IGFuZCBpcyBvbmx5IHJlcXVpcmVkIGZvciByZWFsbHkgb2xkCisgICAgIyBjbGllbnRzIHN1Y2ggYXMgSUU2IG9uIFdpbmRvd3MgWFAKKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gT1BfTk9fU1NMdjMKKworICAgICMgZGlzYWJsZSBjb21wcmVzc2lvbiB0byBwcmV2ZW50IENSSU1FIGF0dGFja3MgKE9wZW5TU0wgMS4wKykKKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gZ2V0YXR0cihfc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKQorCisgICAgaWYgcHVycG9zZSA9PSBQdXJwb3NlLlNFUlZFUl9BVVRIOgorICAgICAgICAjIHZlcmlmeSBjZXJ0cyBhbmQgaG9zdCBuYW1lIGluIGNsaWVudCBtb2RlCisgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBDRVJUX1JFUVVJUkVECisgICAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgZWxpZiBwdXJwb3NlID09IFB1cnBvc2UuQ0xJRU5UX0FVVEg6CisgICAgICAgICMgUHJlZmVyIHRoZSBzZXJ2ZXIncyBjaXBoZXJzIGJ5IGRlZmF1bHQgc28gdGhhdCB3ZSBnZXQgc3Ryb25nZXIKKyAgICAgICAgIyBlbmNyeXB0aW9uCisgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBnZXRhdHRyKF9zc2wsICJPUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiLCAwKQorCisgICAgICAgICMgVXNlIHNpbmdsZSB1c2Uga2V5cyBpbiBvcmRlciB0byBpbXByb3ZlIGZvcndhcmQgc2VjcmVjeQorICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gZ2V0YXR0cihfc3NsLCAiT1BfU0lOR0xFX0RIX1VTRSIsIDApCisgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBnZXRhdHRyKF9zc2wsICJPUF9TSU5HTEVfRUNESF9VU0UiLCAwKQorCisgICAgICAgICMgZGlzYWxsb3cgY2lwaGVycyB3aXRoIGtub3duIHZ1bG5lcmFiaWxpdGllcworICAgICAgICBjb250ZXh0LnNldF9jaXBoZXJzKF9SRVNUUklDVEVEX1NFUlZFUl9DSVBIRVJTKQorCisgICAgaWYgY2FmaWxlIG9yIGNhcGF0aCBvciBjYWRhdGE6CisgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZSwgY2FwYXRoLCBjYWRhdGEpCisgICAgZWxpZiBjb250ZXh0LnZlcmlmeV9tb2RlICE9IENFUlRfTk9ORToKKyAgICAgICAgIyBubyBleHBsaWNpdCBjYWZpbGUsIGNhcGF0aCBvciBjYWRhdGEgYnV0IHRoZSB2ZXJpZnkgbW9kZSBpcworICAgICAgICAjIENFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRC4gTGV0J3MgdHJ5IHRvIGxvYWQgZGVmYXVsdCBzeXN0ZW0KKyAgICAgICAgIyByb290IENBIGNlcnRpZmljYXRlcyBmb3IgdGhlIGdpdmVuIHB1cnBvc2UuIFRoaXMgbWF5IGZhaWwgc2lsZW50bHkuCisgICAgICAgIGNvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2UpCisgICAgcmV0dXJuIGNvbnRleHQKKworCitkZWYgX2NyZWF0ZV9zdGRsaWJfY29udGV4dChwcm90b2NvbD1QUk9UT0NPTF9TU0x2MjMsICosIGNlcnRfcmVxcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9RmFsc2UsIHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPU5vbmUsIGtleWZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSwgY2FkYXRhPU5vbmUpOgorICAgICIiIkNyZWF0ZSBhIFNTTENvbnRleHQgb2JqZWN0IGZvciBQeXRob24gc3RkbGliIG1vZHVsZXMKKworICAgIEFsbCBQeXRob24gc3RkbGliIG1vZHVsZXMgc2hhbGwgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY3JlYXRlIFNTTENvbnRleHQKKyAgICBvYmplY3RzIGluIG9yZGVyIHRvIGtlZXAgY29tbW9uIHNldHRpbmdzIGluIG9uZSBwbGFjZS4gVGhlIGNvbmZpZ3VyYXRpb24KKyAgICBpcyBsZXNzIHJlc3RyaWN0IHRoYW4gY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpJ3MgdG8gaW5jcmVhc2UgYmFja3dhcmQKKyAgICBjb21wYXRpYmlsaXR5LgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHB1cnBvc2UsIF9BU04xT2JqZWN0KToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKHB1cnBvc2UpCisKKyAgICBjb250ZXh0ID0gU1NMQ29udGV4dChwcm90b2NvbCkKKyAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gT1BfTk9fU1NMdjIKKworICAgIGlmIGNlcnRfcmVxcyBpcyBub3QgTm9uZToKKyAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcworICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBjaGVja19ob3N0bmFtZQorCisgICAgaWYga2V5ZmlsZSBhbmQgbm90IGNlcnRmaWxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjZXJ0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgaWYgY2VydGZpbGUgb3Iga2V5ZmlsZToKKyAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCisKKyAgICAjIGxvYWQgQ0Egcm9vdCBjZXJ0cworICAgIGlmIGNhZmlsZSBvciBjYXBhdGggb3IgY2FkYXRhOgorICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGUsIGNhcGF0aCwgY2FkYXRhKQorICAgIGVsaWYgY29udGV4dC52ZXJpZnlfbW9kZSAhPSBDRVJUX05PTkU6CisgICAgICAgICMgbm8gZXhwbGljaXQgY2FmaWxlLCBjYXBhdGggb3IgY2FkYXRhIGJ1dCB0aGUgdmVyaWZ5IG1vZGUgaXMKKyAgICAgICAgIyBDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQuIExldCdzIHRyeSB0byBsb2FkIGRlZmF1bHQgc3lzdGVtCisgICAgICAgICMgcm9vdCBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHRoZSBnaXZlbiBwdXJwb3NlLiBUaGlzIG1heSBmYWlsIHNpbGVudGx5LgorICAgICAgICBjb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cyhwdXJwb3NlKQorCisgICAgcmV0dXJuIGNvbnRleHQKIAogY2xhc3MgU1NMU29ja2V0KHNvY2tldCk6CiAgICAgIiIiVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgc3VidHlwZSBvZiBzb2NrZXQuc29ja2V0IHRoYXQgd3JhcHMKQEAgLTI3Miw3ICs0OTYsNyBAQAogICAgICAgICAgICAgICAgICBfY29udGV4dD1Ob25lKToKIAogICAgICAgICBpZiBfY29udGV4dDoKLSAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IF9jb250ZXh0CisgICAgICAgICAgICBzZWxmLl9jb250ZXh0ID0gX2NvbnRleHQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHNlcnZlcl9zaWRlIGFuZCBub3QgY2VydGZpbGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHNlcnZlci1zaWRlICIKQEAgLTI4MSwxNiArNTA1LDE2IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKQogICAgICAgICAgICAgaWYgY2VydGZpbGUgYW5kIG5vdCBrZXlmaWxlOgogICAgICAgICAgICAgICAgIGtleWZpbGUgPSBjZXJ0ZmlsZQotICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gU1NMQ29udGV4dChzc2xfdmVyc2lvbikKLSAgICAgICAgICAgIHNlbGYuY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcworICAgICAgICAgICAgc2VsZi5fY29udGV4dCA9IFNTTENvbnRleHQoc3NsX3ZlcnNpb24pCisgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnZlcmlmeV9tb2RlID0gY2VydF9yZXFzCiAgICAgICAgICAgICBpZiBjYV9jZXJ0czoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhX2NlcnRzKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhX2NlcnRzKQogICAgICAgICAgICAgaWYgY2VydGZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKICAgICAgICAgICAgIGlmIG5wbl9wcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9ucG5fcHJvdG9jb2xzKG5wbl9wcm90b2NvbHMpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5zZXRfbnBuX3Byb3RvY29scyhucG5fcHJvdG9jb2xzKQogICAgICAgICAgICAgaWYgY2lwaGVyczoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X2NpcGhlcnMoY2lwaGVycykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnNldF9jaXBoZXJzKGNpcGhlcnMpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydF9yZXFzID0gY2VydF9yZXFzCkBAIC0zMDQsMTEgKzUyOCwxNyBAQAogICAgICAgICBpZiBzZXJ2ZXJfc2lkZSBhbmQgc2VydmVyX2hvc3RuYW1lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2VydmVyX2hvc3RuYW1lIGNhbiBvbmx5IGJlIHNwZWNpZmllZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBjbGllbnQgbW9kZSIpCisgICAgICAgIGlmIHNlbGYuX2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIG5vdCBzZXJ2ZXJfaG9zdG5hbWU6CisgICAgICAgICAgICBpZiBIQVNfU05JOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNoZWNrX2hvc3RuYW1lIHJlcXVpcmVzIHNlcnZlcl9ob3N0bmFtZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNoZWNrX2hvc3RuYW1lIHJlcXVpcmVzIHNlcnZlcl9ob3N0bmFtZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBpdCdzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBPcGVuU1NMICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5IikKICAgICAgICAgc2VsZi5zZXJ2ZXJfc2lkZSA9IHNlcnZlcl9zaWRlCiAgICAgICAgIHNlbGYuc2VydmVyX2hvc3RuYW1lID0gc2VydmVyX2hvc3RuYW1lCiAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QgPSBkb19oYW5kc2hha2Vfb25fY29ubmVjdAogICAgICAgICBzZWxmLnN1cHByZXNzX3JhZ2dlZF9lb2ZzID0gc3VwcHJlc3NfcmFnZ2VkX2VvZnMKLSAgICAgICAgY29ubmVjdGVkID0gRmFsc2UKICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrLmZhbWlseSwKQEAgLTMxNiwyNyArNTQ2LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89c29jay5wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbm89c29jay5maWxlbm8oKSkKICAgICAgICAgICAgIHNlbGYuc2V0dGltZW91dChzb2NrLmdldHRpbWVvdXQoKSkKLSAgICAgICAgICAgICMgc2VlIGlmIGl0J3MgY29ubmVjdGVkCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc29jay5nZXRwZWVybmFtZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICAgICAgc29jay5kZXRhY2goKQogICAgICAgICBlbGlmIGZpbGVubyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLCBmaWxlbm89ZmlsZW5vKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCiAKKyAgICAgICAgIyBTZWUgaWYgd2UgYXJlIGNvbm5lY3RlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmdldHBlZXJuYW1lKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGNvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uZWN0ZWQgPSBUcnVlCisKICAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQogICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBjb25uZWN0ZWQKICAgICAgICAgaWYgY29ubmVjdGVkOgogICAgICAgICAgICAgIyBjcmVhdGUgdGhlIFNTTCBvYmplY3QKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBzZWxmLmNvbnRleHQuX3dyYXBfc29ja2V0KHNlbGYsIHNlcnZlcl9zaWRlLAorICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IHNlbGYuX2NvbnRleHQuX3dyYXBfc29ja2V0KHNlbGYsIHNlcnZlcl9zaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lKQogICAgICAgICAgICAgICAgIGlmIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgogICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5nZXR0aW1lb3V0KCkKQEAgLTM0NSw5ICs1NzcsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImRvX2hhbmRzaGFrZV9vbl9jb25uZWN0IHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGZvciBub24tYmxvY2tpbmcgc29ja2V0cyIpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlKCkKIAotICAgICAgICAgICAgZXhjZXB0IHNvY2tldF9lcnJvciBhcyB4OgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByYWlzZSB4CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb250ZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29udGV4dAorCisgICAgQGNvbnRleHQuc2V0dGVyCisgICAgZGVmIGNvbnRleHQoc2VsZiwgY3R4KToKKyAgICAgICAgc2VsZi5fY29udGV4dCA9IGN0eAorICAgICAgICBzZWxmLl9zc2xvYmouY29udGV4dCA9IGN0eAogCiAgICAgZGVmIGR1cChzZWxmKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWQoIkNhbid0IGR1cCgpICVzIGluc3RhbmNlcyIgJQpAQCAtMzU3LDExICs1OTgsMjEgQEAKICAgICAgICAgIyByYWlzZSBhbiBleGNlcHRpb24gaGVyZSBpZiB5b3Ugd2lzaCB0byBjaGVjayBmb3Igc3B1cmlvdXMgY2xvc2VzCiAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfY2hlY2tfY29ubmVjdGVkKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgIyBnZXRwZWVybmFtZSgpIHdpbGwgcmFpc2UgRU5PVENPTk4gaWYgdGhlIHNvY2tldCBpcyByZWFsbHkKKyAgICAgICAgICAgICMgbm90IGNvbm5lY3RlZDsgbm90ZSB0aGF0IHdlIGNhbiBiZSBjb25uZWN0ZWQgZXZlbiB3aXRob3V0CisgICAgICAgICAgICAjIF9jb25uZWN0ZWQgYmVpbmcgc2V0LCBlLmcuIGlmIGNvbm5lY3QoKSBmaXJzdCByZXR1cm5lZAorICAgICAgICAgICAgIyBFQUdBSU4uCisgICAgICAgICAgICBzZWxmLmdldHBlZXJuYW1lKCkKKwogICAgIGRlZiByZWFkKHNlbGYsIGxlbj0wLCBidWZmZXI9Tm9uZSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gTEVOIGJ5dGVzIGFuZCByZXR1cm4gdGhlbS4KICAgICAgICAgUmV0dXJuIHplcm8tbGVuZ3RoIHN0cmluZyBvbiBFT0YuIiIiCiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBpZiBub3Qgc2VsZi5fc3Nsb2JqOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUmVhZCBvbiBjbG9zZWQgb3IgdW53cmFwcGVkIFNTTCBzb2NrZXQuIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgYnVmZmVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoucmVhZChsZW4sIGJ1ZmZlcikKQEAgLTM4Miw2ICs2MzMsOCBAQAogICAgICAgICBudW1iZXIgb2YgYnl0ZXMgb2YgREFUQSBhY3R1YWxseSB0cmFuc21pdHRlZC4iIiIKIAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9zc2xvYmo6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJXcml0ZSBvbiBjbG9zZWQgb3IgdW53cmFwcGVkIFNTTCBzb2NrZXQuIikKICAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai53cml0ZShkYXRhKQogCiAgICAgZGVmIGdldHBlZXJjZXJ0KHNlbGYsIGJpbmFyeV9mb3JtPUZhbHNlKToKQEAgLTM5MSw2ICs2NDQsNyBAQAogICAgICAgICBjZXJ0aWZpY2F0ZSB3YXMgcHJvdmlkZWQsIGJ1dCBub3QgdmFsaWRhdGVkLiIiIgogCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfY29ubmVjdGVkKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5wZWVyX2NlcnRpZmljYXRlKGJpbmFyeV9mb3JtKQogCiAgICAgZGVmIHNlbGVjdGVkX25wbl9wcm90b2NvbChzZWxmKToKQEAgLTQyMSwxOCArNjc1LDE3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGZsYWdzIG5vdCBhbGxvd2VkIGluIGNhbGxzIHRvIHNlbmQoKSBvbiAlcyIgJQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXykKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFNTTEVycm9yIGFzIHg6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgICAgICAgICAgZWxpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgU1NMRXJyb3IgYXMgeDoKKyAgICAgICAgICAgICAgICBpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBlbGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5zZW5kKHNlbGYsIGRhdGEsIGZsYWdzKQogCkBAIC01NDAsMTIgKzc5MywxMSBAQAogCiAgICAgZGVmIF9yZWFsX2Nsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCi0gICAgICAgICMgc2VsZi5fY2xvc2VkID0gVHJ1ZQogICAgICAgICBzb2NrZXQuX3JlYWxfY2xvc2Uoc2VsZikKIAogICAgIGRlZiBkb19oYW5kc2hha2Uoc2VsZiwgYmxvY2s9RmFsc2UpOgogICAgICAgICAiIiJQZXJmb3JtIGEgVExTL1NTTCBoYW5kc2hha2UuIiIiCi0KKyAgICAgICAgc2VsZi5fY2hlY2tfY29ubmVjdGVkKCkKICAgICAgICAgdGltZW91dCA9IHNlbGYuZ2V0dGltZW91dCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHRpbWVvdXQgPT0gMC4wIGFuZCBibG9jazoKQEAgLTU1NCw2ICs4MDYsMTIgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuc2V0dGltZW91dCh0aW1lb3V0KQogCisgICAgICAgIGlmIHNlbGYuY29udGV4dC5jaGVja19ob3N0bmFtZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlcl9ob3N0bmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjaGVja19ob3N0bmFtZSBuZWVkcyBzZXJ2ZXJfaG9zdG5hbWUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IikKKyAgICAgICAgICAgIG1hdGNoX2hvc3RuYW1lKHNlbGYuZ2V0cGVlcmNlcnQoKSwgc2VsZi5zZXJ2ZXJfaG9zdG5hbWUpCisKICAgICBkZWYgX3JlYWxfY29ubmVjdChzZWxmLCBhZGRyLCBjb25uZWN0X2V4KToKICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJfc2lkZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGNvbm5lY3QgaW4gc2VydmVyLXNpZGUgbW9kZSIpCkBAIC01NjksMTEgKzgyNywxMSBAQAogICAgICAgICAgICAgICAgIHJjID0gTm9uZQogICAgICAgICAgICAgICAgIHNvY2tldC5jb25uZWN0KHNlbGYsIGFkZHIpCiAgICAgICAgICAgICBpZiBub3QgcmM6CisgICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgIGlmIHNlbGYuZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICByZXR1cm4gcmMKLSAgICAgICAgZXhjZXB0IHNvY2tldF9lcnJvcjoKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTY3MSwxNSArOTI5LDE2IEBACiAgICAgSWYgJ3NzbF92ZXJzaW9uJyBpcyBzcGVjaWZpZWQsIHVzZSBpdCBpbiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0LiIiIgogCiAgICAgaG9zdCwgcG9ydCA9IGFkZHIKLSAgICBpZiAoY2FfY2VydHMgaXMgbm90IE5vbmUpOgorICAgIGlmIGNhX2NlcnRzIGlzIG5vdCBOb25lOgogICAgICAgICBjZXJ0X3JlcXMgPSBDRVJUX1JFUVVJUkVECiAgICAgZWxzZToKICAgICAgICAgY2VydF9yZXFzID0gQ0VSVF9OT05FCi0gICAgcyA9IGNyZWF0ZV9jb25uZWN0aW9uKGFkZHIpCi0gICAgcyA9IHdyYXBfc29ja2V0KHMsIHNzbF92ZXJzaW9uPXNzbF92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9Y2VydF9yZXFzLCBjYV9jZXJ0cz1jYV9jZXJ0cykKLSAgICBkZXJjZXJ0ID0gcy5nZXRwZWVyY2VydChUcnVlKQotICAgIHMuY2xvc2UoKQorICAgIGNvbnRleHQgPSBfY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNzbF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jZXJ0X3JlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPWNhX2NlcnRzKQorICAgIHdpdGggIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHIpIGFzIHNvY2s6CisgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrKSBhcyBzc2xzb2NrOgorICAgICAgICAgICAgZGVyY2VydCA9IHNzbHNvY2suZ2V0cGVlcmNlcnQoVHJ1ZSkKICAgICByZXR1cm4gREVSX2NlcnRfdG9fUEVNX2NlcnQoZGVyY2VydCkKIAogZGVmIGdldF9wcm90b2NvbF9uYW1lKHByb3RvY29sX2NvZGUpOgpkaWZmIC0tZ2l0IGEvTGliL3N0YXQucHkgYi9MaWIvc3RhdC5weQppbmRleCA3MDRhZGZlLi4zZWVjYzNlIDEwMDY0NAotLS0gYS9MaWIvc3RhdC5weQorKysgYi9MaWIvc3RhdC5weQpAQCAtMTQ3LDMgKzE0Nyw5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwZXJtLmFwcGVuZCgiLSIpCiAgICAgcmV0dXJuICIiLmpvaW4ocGVybSkKKworIyBJZiBhdmFpbGFibGUsIHVzZSBDIGltcGxlbWVudGF0aW9uCit0cnk6CisgICAgZnJvbSBfc3RhdCBpbXBvcnQgKgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9zdGF0aXN0aWNzLnB5IGIvTGliL3N0YXRpc3RpY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhMjZkNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zdGF0aXN0aWNzLnB5CkBAIC0wLDAgKzEsNTk1IEBACisjIyAgTW9kdWxlIHN0YXRpc3RpY3MucHkKKyMjCisjIyAgQ29weXJpZ2h0IChjKSAyMDEzIFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+LgorIyMKKyMjICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMjICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIworIyMgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyMKKyMjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiCitCYXNpYyBzdGF0aXN0aWNzIG1vZHVsZS4KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBzdGF0aXN0aWNzIG9mIGRhdGEsIGluY2x1ZGluZworYXZlcmFnZXMsIHZhcmlhbmNlLCBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uLgorCitDYWxjdWxhdGluZyBhdmVyYWdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Z1bmN0aW9uICAgICAgICAgICAgRGVzY3JpcHRpb24KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittZWFuICAgICAgICAgICAgICAgIEFyaXRobWV0aWMgbWVhbiAoYXZlcmFnZSkgb2YgZGF0YS4KK21lZGlhbiAgICAgICAgICAgICAgTWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIGRhdGEuCittZWRpYW5fbG93ICAgICAgICAgIExvdyBtZWRpYW4gb2YgZGF0YS4KK21lZGlhbl9oaWdoICAgICAgICAgSGlnaCBtZWRpYW4gb2YgZGF0YS4KK21lZGlhbl9ncm91cGVkICAgICAgTWVkaWFuLCBvciA1MHRoIHBlcmNlbnRpbGUsIG9mIGdyb3VwZWQgZGF0YS4KK21vZGUgICAgICAgICAgICAgICAgTW9kZSAobW9zdCBjb21tb24gdmFsdWUpIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDYWxjdWxhdGUgdGhlIGFyaXRobWV0aWMgbWVhbiAoInRoZSBhdmVyYWdlIikgb2YgZGF0YToKKworPj4+IG1lYW4oWy0xLjAsIDIuNSwgMy4yNSwgNS43NV0pCisyLjYyNQorCisKK0NhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgbWVkaWFuIG9mIGRpc2NyZXRlIGRhdGE6CisKKz4+PiBtZWRpYW4oWzIsIDMsIDQsIDVdKQorMy41CisKKworQ2FsY3VsYXRlIHRoZSBtZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZGF0YSBncm91cGVkIGludG8gY2xhc3MgaW50ZXJ2YWxzCitjZW50cmVkIG9uIHRoZSBkYXRhIHZhbHVlcyBwcm92aWRlZC4gRS5nLiBpZiB5b3VyIGRhdGEgcG9pbnRzIGFyZSByb3VuZGVkIHRvCit0aGUgbmVhcmVzdCB3aG9sZSBudW1iZXI6CisKKz4+PiBtZWRpYW5fZ3JvdXBlZChbMiwgMiwgMywgMywgMywgNF0pICAjZG9jdGVzdDogK0VMTElQU0lTCisyLjgzMzMzMzMzMzMuLi4KKworVGhpcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgaW4gdGhpcyB3YXk6IHlvdSBoYXZlIHR3byBkYXRhIHBvaW50cyBpbiB0aGUgY2xhc3MKK2ludGVydmFsIDEuNS0yLjUsIHRocmVlIGRhdGEgcG9pbnRzIGluIHRoZSBjbGFzcyBpbnRlcnZhbCAyLjUtMy41LCBhbmQgb25lIGluCit0aGUgY2xhc3MgaW50ZXJ2YWwgMy41LTQuNS4gVGhlIG1lZGlhbiBvZiB0aGVzZSBkYXRhIHBvaW50cyBpcyAyLjgzMzMuLi4KKworCitDYWxjdWxhdGluZyB2YXJpYWJpbGl0eSBvciBzcHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRnVuY3Rpb24gICAgICAgICAgICBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3B2YXJpYW5jZSAgICAgICAgICAgUG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBkYXRhLgordmFyaWFuY2UgICAgICAgICAgICBTYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KK3BzdGRldiAgICAgICAgICAgICAgUG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KK3N0ZGV2ICAgICAgICAgICAgICAgU2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2Ygc2FtcGxlIGRhdGE6CisKKz4+PiBzdGRldihbMi41LCAzLjI1LCA1LjUsIDExLjI1LCAxMS43NV0pICAjZG9jdGVzdDogK0VMTElQU0lTCis0LjM4OTYxODQzNDQ0Li4uCisKK0lmIHlvdSBoYXZlIHByZXZpb3VzbHkgY2FsY3VsYXRlZCB0aGUgbWVhbiwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZSBvcHRpb25hbAorc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBmb3VyICJzcHJlYWQiIGZ1bmN0aW9ucyB0byBhdm9pZCByZWNhbGN1bGF0aW5nIGl0OgorCis+Pj4gZGF0YSA9IFsxLCAyLCAyLCA0LCA0LCA0LCA1LCA2XQorPj4+IG11ID0gbWVhbihkYXRhKQorPj4+IHB2YXJpYW5jZShkYXRhLCBtdSkKKzIuNQorCisKK0V4Y2VwdGlvbnMKKy0tLS0tLS0tLS0KKworQSBzaW5nbGUgZXhjZXB0aW9uIGlzIGRlZmluZWQ6IFN0YXRpc3RpY3NFcnJvciBpcyBhIHN1YmNsYXNzIG9mIFZhbHVlRXJyb3IuCisKKyIiIgorCitfX2FsbF9fID0gWyAnU3RhdGlzdGljc0Vycm9yJywKKyAgICAgICAgICAgICdwc3RkZXYnLCAncHZhcmlhbmNlJywgJ3N0ZGV2JywgJ3ZhcmlhbmNlJywKKyAgICAgICAgICAgICdtZWRpYW4nLCAgJ21lZGlhbl9sb3cnLCAnbWVkaWFuX2hpZ2gnLCAnbWVkaWFuX2dyb3VwZWQnLAorICAgICAgICAgICAgJ21lYW4nLCAnbW9kZScsCisgICAgICAgICAgXQorCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IG1hdGgKKworZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKworCisjID09PSBFeGNlcHRpb25zID09PQorCitjbGFzcyBTdGF0aXN0aWNzRXJyb3IoVmFsdWVFcnJvcik6CisgICAgcGFzcworCisKKyMgPT09IFByaXZhdGUgdXRpbGl0aWVzID09PQorCitkZWYgX3N1bShkYXRhLCBzdGFydD0wKToKKyAgICAiIiJfc3VtKGRhdGEgWywgc3RhcnRdKSAtPiB2YWx1ZQorCisgICAgUmV0dXJuIGEgaGlnaC1wcmVjaXNpb24gc3VtIG9mIHRoZSBnaXZlbiBudW1lcmljIGRhdGEuIElmIG9wdGlvbmFsCisgICAgYXJndW1lbnQgYGBzdGFydGBgIGlzIGdpdmVuLCBpdCBpcyBhZGRlZCB0byB0aGUgdG90YWwuIElmIGBgZGF0YWBgIGlzCisgICAgZW1wdHksIGBgc3RhcnRgYCAoZGVmYXVsdGluZyB0byAwKSBpcyByZXR1cm5lZC4KKworCisgICAgRXhhbXBsZXMKKyAgICAtLS0tLS0tLQorCisgICAgPj4+IF9zdW0oWzMsIDIuMjUsIDQuNSwgLTAuNSwgMS4wXSwgMC43NSkKKyAgICAxMS4wCisKKyAgICBTb21lIHNvdXJjZXMgb2Ygcm91bmQtb2ZmIGVycm9yIHdpbGwgYmUgYXZvaWRlZDoKKworICAgID4+PiBfc3VtKFsxZTUwLCAxLCAtMWU1MF0gKiAxMDAwKSAgIyBCdWlsdC1pbiBzdW0gcmV0dXJucyB6ZXJvLgorICAgIDEwMDAuMAorCisgICAgRnJhY3Rpb25zIGFuZCBEZWNpbWFscyBhcmUgYWxzbyBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gX3N1bShbRigyLCAzKSwgRig3LCA1KSwgRigxLCA0KSwgRig1LCA2KV0pCisgICAgRnJhY3Rpb24oNjMsIDIwKQorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IGRhdGEgPSBbRCgiMC4xMzc1IiksIEQoIjAuMjEwOCIpLCBEKCIwLjMwNjEiKSwgRCgiMC4wNDE5IildCisgICAgPj4+IF9zdW0oZGF0YSkKKyAgICBEZWNpbWFsKCcwLjY5NjMnKQorCisgICAgTWl4ZWQgdHlwZXMgYXJlIGN1cnJlbnRseSB0cmVhdGVkIGFzIGFuIGVycm9yLCBleGNlcHQgdGhhdCBpbnQgaXMKKyAgICBhbGxvd2VkLgorICAgICIiIgorICAgICMgV2UgZmFpbCBhcyBzb29uIGFzIHdlIHJlYWNoIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gaW50IG9yIHRoZSB0eXBlIG9mCisgICAgIyB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggaXMgbm90IGFuIGludC4gRS5nLiBfc3VtKFtpbnQsIGludCwgZmxvYXQsIGludF0pCisgICAgIyBpcyBva2F5LCBidXQgc3VtKFtpbnQsIGludCwgZmxvYXQsIEZyYWN0aW9uXSkgaXMgbm90LgorICAgIGFsbG93ZWRfdHlwZXMgPSBzZXQoW2ludCwgdHlwZShzdGFydCldKQorICAgIG4sIGQgPSBfZXhhY3RfcmF0aW8oc3RhcnQpCisgICAgcGFydGlhbHMgPSB7ZDogbn0gICMgbWFwIHtkZW5vbWluYXRvcjogc3VtIG9mIG51bWVyYXRvcnN9CisgICAgIyBNaWNyby1vcHRpbWl6YXRpb25zLgorICAgIGV4YWN0X3JhdGlvID0gX2V4YWN0X3JhdGlvCisgICAgcGFydGlhbHNfZ2V0ID0gcGFydGlhbHMuZ2V0CisgICAgIyBBZGQgbnVtZXJhdG9ycyBmb3IgZWFjaCBkZW5vbWluYXRvci4KKyAgICBmb3IgeCBpbiBkYXRhOgorICAgICAgICBfY2hlY2tfdHlwZSh0eXBlKHgpLCBhbGxvd2VkX3R5cGVzKQorICAgICAgICBuLCBkID0gZXhhY3RfcmF0aW8oeCkKKyAgICAgICAgcGFydGlhbHNbZF0gPSBwYXJ0aWFsc19nZXQoZCwgMCkgKyBuCisgICAgIyBGaW5kIHRoZSBleHBlY3RlZCByZXN1bHQgdHlwZS4gSWYgYWxsb3dlZF90eXBlcyBoYXMgb25seSBvbmUgaXRlbSwgaXQKKyAgICAjIHdpbGwgYmUgaW50OyBpZiBpdCBoYXMgdHdvLCB1c2UgdGhlIG9uZSB3aGljaCBpc24ndCBpbnQuCisgICAgYXNzZXJ0IGxlbihhbGxvd2VkX3R5cGVzKSBpbiAoMSwgMikKKyAgICBpZiBsZW4oYWxsb3dlZF90eXBlcykgPT0gMToKKyAgICAgICAgYXNzZXJ0IGFsbG93ZWRfdHlwZXMucG9wKCkgaXMgaW50CisgICAgICAgIFQgPSBpbnQKKyAgICBlbHNlOgorICAgICAgICBUID0gKGFsbG93ZWRfdHlwZXMgLSBzZXQoW2ludF0pKS5wb3AoKQorICAgIGlmIE5vbmUgaW4gcGFydGlhbHM6CisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKFQsIChmbG9hdCwgRGVjaW1hbCkpCisgICAgICAgIGFzc2VydCBub3QgbWF0aC5pc2Zpbml0ZShwYXJ0aWFsc1tOb25lXSkKKyAgICAgICAgcmV0dXJuIFQocGFydGlhbHNbTm9uZV0pCisgICAgdG90YWwgPSBGcmFjdGlvbigpCisgICAgZm9yIGQsIG4gaW4gc29ydGVkKHBhcnRpYWxzLml0ZW1zKCkpOgorICAgICAgICB0b3RhbCArPSBGcmFjdGlvbihuLCBkKQorICAgIGlmIGlzc3ViY2xhc3MoVCwgaW50KToKKyAgICAgICAgYXNzZXJ0IHRvdGFsLmRlbm9taW5hdG9yID09IDEKKyAgICAgICAgcmV0dXJuIFQodG90YWwubnVtZXJhdG9yKQorICAgIGlmIGlzc3ViY2xhc3MoVCwgRGVjaW1hbCk6CisgICAgICAgIHJldHVybiBUKHRvdGFsLm51bWVyYXRvcikvdG90YWwuZGVub21pbmF0b3IKKyAgICByZXR1cm4gVCh0b3RhbCkKKworCitkZWYgX2NoZWNrX3R5cGUoVCwgYWxsb3dlZCk6CisgICAgaWYgVCBub3QgaW4gYWxsb3dlZDoKKyAgICAgICAgaWYgbGVuKGFsbG93ZWQpID09IDE6CisgICAgICAgICAgICBhbGxvd2VkLmFkZChUKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHlwZXMgPSAnLCAnLmpvaW4oW3QuX19uYW1lX18gZm9yIHQgaW4gYWxsb3dlZF0gKyBbVC5fX25hbWVfX10pCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIG1peGVkIHR5cGVzOiAlcyIgJSB0eXBlcykKKworCitkZWYgX2V4YWN0X3JhdGlvKHgpOgorICAgICIiIkNvbnZlcnQgUmVhbCBudW1iZXIgeCBleGFjdGx5IHRvIChudW1lcmF0b3IsIGRlbm9taW5hdG9yKSBwYWlyLgorCisgICAgPj4+IF9leGFjdF9yYXRpbygwLjI1KQorICAgICgxLCA0KQorCisgICAgeCBpcyBleHBlY3RlZCB0byBiZSBhbiBpbnQsIEZyYWN0aW9uLCBEZWNpbWFsIG9yIGZsb2F0LgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpbnQsIEZyYWN0aW9uCisgICAgICAgICAgICByZXR1cm4gKHgubnVtZXJhdG9yLCB4LmRlbm9taW5hdG9yKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIGZsb2F0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHguYXNfaW50ZWdlcl9yYXRpbygpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBEZWNpbWFsCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2RlY2ltYWxfdG9fcmF0aW8oeCkKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBjb252ZXJ0IHR5cGUgJ3t9JyB0byBudW1lcmF0b3IvZGVub21pbmF0b3IiCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cuZm9ybWF0KHR5cGUoeCkuX19uYW1lX18pKSBmcm9tIE5vbmUKKyAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAjIElORiBvciBOQU4KKyAgICAgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICAgICAgIyBEZWNpbWFsIHNpZ25hbGxpbmcgTkFOcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGZsb2F0IDotKAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBEZWNpbWFsKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHguaXNfZmluaXRlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBtYXRoLmlzZmluaXRlKHgpCisgICAgICAgIHJldHVybiAoeCwgTm9uZSkKKworCisjIEZJWE1FIFRoaXMgaXMgZmFzdGVyIHRoYW4gRnJhY3Rpb24uZnJvbV9kZWNpbWFsLCBidXQgc3RpbGwgdG9vIHNsb3cuCitkZWYgX2RlY2ltYWxfdG9fcmF0aW8oZCk6CisgICAgIiIiQ29udmVydCBEZWNpbWFsIGQgdG8gZXhhY3QgaW50ZWdlciByYXRpbyAobnVtZXJhdG9yLCBkZW5vbWluYXRvcikuCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisgICAgPj4+IF9kZWNpbWFsX3RvX3JhdGlvKERlY2ltYWwoIjIuNiIpKQorICAgICgyNiwgMTApCisKKyAgICAiIiIKKyAgICBzaWduLCBkaWdpdHMsIGV4cCA9IGQuYXNfdHVwbGUoKQorICAgIGlmIGV4cCBpbiAoJ0YnLCAnbicsICdOJyk6ICAjIElORiwgTkFOLCBzTkFOCisgICAgICAgIGFzc2VydCBub3QgZC5pc19maW5pdGUoKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgbnVtID0gMAorICAgIGZvciBkaWdpdCBpbiBkaWdpdHM6CisgICAgICAgIG51bSA9IG51bSoxMCArIGRpZ2l0CisgICAgaWYgZXhwIDwgMDoKKyAgICAgICAgZGVuID0gMTAqKi1leHAKKyAgICBlbHNlOgorICAgICAgICBudW0gKj0gMTAqKmV4cAorICAgICAgICBkZW4gPSAxCisgICAgaWYgc2lnbjoKKyAgICAgICAgbnVtID0gLW51bQorICAgIHJldHVybiAobnVtLCBkZW4pCisKKworZGVmIF9jb3VudHMoZGF0YSk6CisgICAgIyBHZW5lcmF0ZSBhIHRhYmxlIG9mIHNvcnRlZCAodmFsdWUsIGZyZXF1ZW5jeSkgcGFpcnMuCisgICAgdGFibGUgPSBjb2xsZWN0aW9ucy5Db3VudGVyKGl0ZXIoZGF0YSkpLm1vc3RfY29tbW9uKCkKKyAgICBpZiBub3QgdGFibGU6CisgICAgICAgIHJldHVybiB0YWJsZQorICAgICMgRXh0cmFjdCB0aGUgdmFsdWVzIHdpdGggdGhlIGhpZ2hlc3QgZnJlcXVlbmN5LgorICAgIG1heGZyZXEgPSB0YWJsZVswXVsxXQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbih0YWJsZSkpOgorICAgICAgICBpZiB0YWJsZVtpXVsxXSAhPSBtYXhmcmVxOgorICAgICAgICAgICAgdGFibGUgPSB0YWJsZVs6aV0KKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHRhYmxlCisKKworIyA9PT0gTWVhc3VyZXMgb2YgY2VudHJhbCB0ZW5kZW5jeSAoYXZlcmFnZXMpID09PQorCitkZWYgbWVhbihkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIHNhbXBsZSBhcml0aG1ldGljIG1lYW4gb2YgZGF0YS4KKworICAgID4+PiBtZWFuKFsxLCAyLCAzLCA0LCA0XSkKKyAgICAyLjgKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiBtZWFuKFtGKDMsIDcpLCBGKDEsIDIxKSwgRig1LCAzKSwgRigxLCAzKV0pCisgICAgRnJhY3Rpb24oMTMsIDIxKQorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IG1lYW4oW0QoIjAuNSIpLCBEKCIwLjc1IiksIEQoIjAuNjI1IiksIEQoIjAuMzc1IildKQorICAgIERlY2ltYWwoJzAuNTYyNScpCisKKyAgICBJZiBgYGRhdGFgYCBpcyBlbXB0eSwgU3RhdGlzdGljc0Vycm9yIHdpbGwgYmUgcmFpc2VkLgorICAgICIiIgorICAgIGlmIGl0ZXIoZGF0YSkgaXMgZGF0YToKKyAgICAgICAgZGF0YSA9IGxpc3QoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA8IDE6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcignbWVhbiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZGF0YSBwb2ludCcpCisgICAgcmV0dXJuIF9zdW0oZGF0YSkvbgorCisKKyMgRklYTUU6IGludmVzdGlnYXRlIHdheXMgdG8gY2FsY3VsYXRlIG1lZGlhbnMgd2l0aG91dCBzb3J0aW5nPyBRdWlja3NlbGVjdD8KK2RlZiBtZWRpYW4oZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBtZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgbnVtZXJpYyBkYXRhLgorCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIG9kZCwgcmV0dXJuIHRoZSBtaWRkbGUgZGF0YSBwb2ludC4KKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgZXZlbiwgdGhlIG1lZGlhbiBpcyBpbnRlcnBvbGF0ZWQgYnkKKyAgICB0YWtpbmcgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzOgorCisgICAgPj4+IG1lZGlhbihbMSwgMywgNV0pCisgICAgMworICAgID4+PiBtZWRpYW4oWzEsIDMsIDUsIDddKQorICAgIDQuMAorCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICBpZiBuJTIgPT0gMToKKyAgICAgICAgcmV0dXJuIGRhdGFbbi8vMl0KKyAgICBlbHNlOgorICAgICAgICBpID0gbi8vMgorICAgICAgICByZXR1cm4gKGRhdGFbaSAtIDFdICsgZGF0YVtpXSkvMgorCisKK2RlZiBtZWRpYW5fbG93KGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgbG93IG1lZGlhbiBvZiBudW1lcmljIGRhdGEuCisKKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLgorICAgIFdoZW4gaXQgaXMgZXZlbiwgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDVdKQorICAgIDMKKyAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNSwgN10pCisgICAgMworCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICBpZiBuJTIgPT0gMToKKyAgICAgICAgcmV0dXJuIGRhdGFbbi8vMl0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZGF0YVtuLy8yIC0gMV0KKworCitkZWYgbWVkaWFuX2hpZ2goZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBoaWdoIG1lZGlhbiBvZiBkYXRhLgorCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBsYXJnZXIgb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1XSkKKyAgICAzCisgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1LCA3XSkKKyAgICA1CisKKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIHJldHVybiBkYXRhW24vLzJdCisKKworZGVmIG1lZGlhbl9ncm91cGVkKGRhdGEsIGludGVydmFsPTEpOgorICAgICIiIiJSZXR1cm4gdGhlIDUwdGggcGVyY2VudGlsZSAobWVkaWFuKSBvZiBncm91cGVkIGNvbnRpbnVvdXMgZGF0YS4KKworICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMiwgMiwgMywgNCwgNCwgNCwgNCwgNCwgNV0pCisgICAgMy43CisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFs1MiwgNTIsIDUzLCA1NF0pCisgICAgNTIuNQorCisgICAgVGhpcyBjYWxjdWxhdGVzIHRoZSBtZWRpYW4gYXMgdGhlIDUwdGggcGVyY2VudGlsZSwgYW5kIHNob3VsZCBiZQorICAgIHVzZWQgd2hlbiB5b3VyIGRhdGEgaXMgY29udGludW91cyBhbmQgZ3JvdXBlZC4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsCisgICAgdGhlIHZhbHVlcyAxLCAyLCAzLCBldGMuIGFjdHVhbGx5IHJlcHJlc2VudCB0aGUgbWlkcG9pbnQgb2YgY2xhc3NlcworICAgIDAuNS0xLjUsIDEuNS0yLjUsIDIuNS0zLjUsIGV0Yy4gVGhlIG1pZGRsZSB2YWx1ZSBmYWxscyBzb21ld2hlcmUgaW4KKyAgICBjbGFzcyAzLjUtNC41LCBhbmQgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIHRvIGVzdGltYXRlIGl0LgorCisgICAgT3B0aW9uYWwgYXJndW1lbnQgYGBpbnRlcnZhbGBgIHJlcHJlc2VudHMgdGhlIGNsYXNzIGludGVydmFsLCBhbmQKKyAgICBkZWZhdWx0cyB0byAxLiBDaGFuZ2luZyB0aGUgY2xhc3MgaW50ZXJ2YWwgbmF0dXJhbGx5IHdpbGwgY2hhbmdlIHRoZQorICAgIGludGVycG9sYXRlZCA1MHRoIHBlcmNlbnRpbGUgdmFsdWU6CisKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0xKQorICAgIDMuMjUKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0yKQorICAgIDMuNQorCisgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIHBvaW50cyBhcmUgYXQgbGVhc3QKKyAgICBgYGludGVydmFsYGAgYXBhcnQuCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICBlbGlmIG4gPT0gMToKKyAgICAgICAgcmV0dXJuIGRhdGFbMF0KKyAgICAjIEZpbmQgdGhlIHZhbHVlIGF0IHRoZSBtaWRwb2ludC4gUmVtZW1iZXIgdGhpcyBjb3JyZXNwb25kcyB0byB0aGUKKyAgICAjIGNlbnRyZSBvZiB0aGUgY2xhc3MgaW50ZXJ2YWwuCisgICAgeCA9IGRhdGFbbi8vMl0KKyAgICBmb3Igb2JqIGluICh4LCBpbnRlcnZhbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCAoc3RyLCBieXRlcykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBudW1iZXIgYnV0IGdvdCAlcicgJSBvYmopCisgICAgdHJ5OgorICAgICAgICBMID0geCAtIGludGVydmFsLzIgICMgVGhlIGxvd2VyIGxpbWl0IG9mIHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgIyBNaXhlZCB0eXBlLiBGb3Igbm93IHdlIGp1c3QgY29lcmNlIHRvIGZsb2F0LgorICAgICAgICBMID0gZmxvYXQoeCkgLSBmbG9hdChpbnRlcnZhbCkvMgorICAgIGNmID0gZGF0YS5pbmRleCh4KSAgIyBOdW1iZXIgb2YgdmFsdWVzIGJlbG93IHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgIyBGSVhNRSBUaGUgZm9sbG93aW5nIGxpbmUgY291bGQgYmUgbW9yZSBlZmZpY2llbnQgZm9yIGJpZyBsaXN0cy4KKyAgICBmID0gZGF0YS5jb3VudCh4KSAgIyBOdW1iZXIgb2YgZGF0YSBwb2ludHMgaW4gdGhlIG1lZGlhbiBpbnRlcnZhbC4KKyAgICByZXR1cm4gTCArIGludGVydmFsKihuLzIgLSBjZikvZgorCisKK2RlZiBtb2RlKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgbW9zdCBjb21tb24gZGF0YSBwb2ludCBmcm9tIGRpc2NyZXRlIG9yIG5vbWluYWwgZGF0YS4KKworICAgIGBgbW9kZWBgIGFzc3VtZXMgZGlzY3JldGUgZGF0YSwgYW5kIHJldHVybnMgYSBzaW5nbGUgdmFsdWUuIFRoaXMgaXMgdGhlCisgICAgc3RhbmRhcmQgdHJlYXRtZW50IG9mIHRoZSBtb2RlIGFzIGNvbW1vbmx5IHRhdWdodCBpbiBzY2hvb2xzOgorCisgICAgPj4+IG1vZGUoWzEsIDEsIDIsIDMsIDMsIDMsIDMsIDRdKQorICAgIDMKKworICAgIFRoaXMgYWxzbyB3b3JrcyB3aXRoIG5vbWluYWwgKG5vbi1udW1lcmljKSBkYXRhOgorCisgICAgPj4+IG1vZGUoWyJyZWQiLCAiYmx1ZSIsICJibHVlIiwgInJlZCIsICJncmVlbiIsICJyZWQiLCAicmVkIl0pCisgICAgJ3JlZCcKKworICAgIElmIHRoZXJlIGlzIG5vdCBleGFjdGx5IG9uZSBtb3N0IGNvbW1vbiB2YWx1ZSwgYGBtb2RlYGAgd2lsbCByYWlzZQorICAgIFN0YXRpc3RpY3NFcnJvci4KKyAgICAiIiIKKyAgICAjIEdlbmVyYXRlIGEgdGFibGUgb2Ygc29ydGVkICh2YWx1ZSwgZnJlcXVlbmN5KSBwYWlycy4KKyAgICB0YWJsZSA9IF9jb3VudHMoZGF0YSkKKyAgICBpZiBsZW4odGFibGUpID09IDE6CisgICAgICAgIHJldHVybiB0YWJsZVswXVswXQorICAgIGVsaWYgdGFibGU6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigKKyAgICAgICAgICAgICAgICAnbm8gdW5pcXVlIG1vZGU7IGZvdW5kICVkIGVxdWFsbHkgY29tbW9uIHZhbHVlcycgJSBsZW4odGFibGUpCisgICAgICAgICAgICAgICAgKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcignbm8gbW9kZSBmb3IgZW1wdHkgZGF0YScpCisKKworIyA9PT0gTWVhc3VyZXMgb2Ygc3ByZWFkID09PQorCisjIFNlZSBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL1ZhcmlhbmNlLmh0bWwKKyMgICAgIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vU2FtcGxlVmFyaWFuY2UuaHRtbAorIyAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BbGdvcml0aG1zX2Zvcl9jYWxjdWxhdGluZ192YXJpYW5jZQorIworIyBVbmRlciBubyBjaXJjdW1zdGFuY2VzIHVzZSB0aGUgc28tY2FsbGVkICJjb21wdXRhdGlvbmFsIGZvcm11bGEgZm9yCisjIHZhcmlhbmNlIiwgYXMgdGhhdCBpcyBvbmx5IHN1aXRhYmxlIGZvciBoYW5kIGNhbGN1bGF0aW9ucyB3aXRoIGEgc21hbGwKKyMgYW1vdW50IG9mIGxvdy1wcmVjaXNpb24gZGF0YS4gSXQgaGFzIHRlcnJpYmxlIG51bWVyaWMgcHJvcGVydGllcy4KKyMKKyMgU2VlIGEgY29tcGFyaXNvbiBvZiB0aHJlZSBjb21wdXRhdGlvbmFsIG1ldGhvZHMgaGVyZToKKyMgaHR0cDovL3d3dy5qb2huZGNvb2suY29tL2Jsb2cvMjAwOC8wOS8yNi9jb21wYXJpbmctdGhyZWUtbWV0aG9kcy1vZi1jb21wdXRpbmctc3RhbmRhcmQtZGV2aWF0aW9uLworCitkZWYgX3NzKGRhdGEsIGM9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHN1bSBvZiBzcXVhcmUgZGV2aWF0aW9ucyBvZiBzZXF1ZW5jZSBkYXRhLgorCisgICAgSWYgYGBjYGAgaXMgTm9uZSwgdGhlIG1lYW4gaXMgY2FsY3VsYXRlZCBpbiBvbmUgcGFzcywgYW5kIHRoZSBkZXZpYXRpb25zCisgICAgZnJvbSB0aGUgbWVhbiBhcmUgY2FsY3VsYXRlZCBpbiBhIHNlY29uZCBwYXNzLiBPdGhlcndpc2UsIGRldmlhdGlvbnMgYXJlCisgICAgY2FsY3VsYXRlZCBmcm9tIGBgY2BgIGFzIGdpdmVuLiBVc2UgdGhlIHNlY29uZCBjYXNlIHdpdGggY2FyZSwgYXMgaXQgY2FuCisgICAgbGVhZCB0byBnYXJiYWdlIHJlc3VsdHMuCisgICAgIiIiCisgICAgaWYgYyBpcyBOb25lOgorICAgICAgICBjID0gbWVhbihkYXRhKQorICAgIHNzID0gX3N1bSgoeC1jKSoqMiBmb3IgeCBpbiBkYXRhKQorICAgICMgVGhlIGZvbGxvd2luZyBzdW0gc2hvdWxkIG1hdGhlbWF0aWNhbGx5IGVxdWFsIHplcm8sIGJ1dCBkdWUgdG8gcm91bmRpbmcKKyAgICAjIGVycm9yIG1heSBub3QuCisgICAgc3MgLT0gX3N1bSgoeC1jKSBmb3IgeCBpbiBkYXRhKSoqMi9sZW4oZGF0YSkKKyAgICBhc3NlcnQgbm90IHNzIDwgMCwgJ25lZ2F0aXZlIHN1bSBvZiBzcXVhcmUgZGV2aWF0aW9uczogJWYnICUgc3MKKyAgICByZXR1cm4gc3MKKworCitkZWYgdmFyaWFuY2UoZGF0YSwgeGJhcj1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNhbXBsZSB2YXJpYW5jZSBvZiBkYXRhLgorCisgICAgZGF0YSBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgUmVhbC12YWx1ZWQgbnVtYmVycywgd2l0aCBhdCBsZWFzdCB0d28KKyAgICB2YWx1ZXMuIFRoZSBvcHRpb25hbCBhcmd1bWVudCB4YmFyLCBpZiBnaXZlbiwgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAgdGhlIGRhdGEuIElmIGl0IGlzIG1pc3Npbmcgb3IgTm9uZSwgdGhlIG1lYW4gaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICAgVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB5b3VyIGRhdGEgaXMgYSBzYW1wbGUgZnJvbSBhIHBvcHVsYXRpb24uIFRvCisgICAgY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiwgc2VlIGBgcHZhcmlhbmNlYGAuCisKKyAgICBFeGFtcGxlczoKKworICAgID4+PiBkYXRhID0gWzIuNzUsIDEuNzUsIDEuMjUsIDAuMjUsIDAuNSwgMS4yNSwgMy41XQorICAgID4+PiB2YXJpYW5jZShkYXRhKQorICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzCisgICAgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBgYHhiYXJgYCB0byBhdm9pZCByZWNhbGN1bGF0aW5nIGl0OgorCisgICAgPj4+IG0gPSBtZWFuKGRhdGEpCisgICAgPj4+IHZhcmlhbmNlKGRhdGEsIG0pCisgICAgMS4zNzIwMjM4MDk1MjM4MDk1CisKKyAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgYGB4YmFyYGAgaXMgYWN0dWFsbHkgdGhlIG1lYW4gb2YKKyAgICBgYGRhdGFgYC4gR2l2aW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBgeGJhcmBgIG1heSBsZWFkIHRvIGludmFsaWQgb3IKKyAgICBpbXBvc3NpYmxlIHJlc3VsdHMuCisKKyAgICBEZWNpbWFscyBhbmQgRnJhY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICBEZWNpbWFsKCczMS4wMTg3NScpCisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gdmFyaWFuY2UoW0YoMSwgNiksIEYoMSwgMiksIEYoNSwgMyldKQorICAgIEZyYWN0aW9uKDY3LCAxMDgpCisKKyAgICAiIiIKKyAgICBpZiBpdGVyKGRhdGEpIGlzIGRhdGE6CisgICAgICAgIGRhdGEgPSBsaXN0KGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPCAyOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ3ZhcmlhbmNlIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBkYXRhIHBvaW50cycpCisgICAgc3MgPSBfc3MoZGF0YSwgeGJhcikKKyAgICByZXR1cm4gc3MvKG4tMSkKKworCitkZWYgcHZhcmlhbmNlKGRhdGEsIG11PU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBgYGRhdGFgYC4KKworICAgIGRhdGEgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIFJlYWwtdmFsdWVkIG51bWJlcnMsIHdpdGggYXQgbGVhc3Qgb25lCisgICAgdmFsdWUuIFRoZSBvcHRpb25hbCBhcmd1bWVudCBtdSwgaWYgZ2l2ZW4sIHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgIHRoZSBkYXRhLiBJZiBpdCBpcyBtaXNzaW5nIG9yIE5vbmUsIHRoZSBtZWFuIGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgdmFyaWFuY2UgZnJvbSB0aGUgZW50aXJlIHBvcHVsYXRpb24uCisgICAgVG8gZXN0aW1hdGUgdGhlIHZhcmlhbmNlIGZyb20gYSBzYW1wbGUsIHRoZSBgYHZhcmlhbmNlYGAgZnVuY3Rpb24gaXMKKyAgICB1c3VhbGx5IGEgYmV0dGVyIGNob2ljZS4KKworICAgIEV4YW1wbGVzOgorCisgICAgPj4+IGRhdGEgPSBbMC4wLCAwLjI1LCAwLjI1LCAxLjI1LCAxLjUsIDEuNzUsIDIuNzUsIDMuMjVdCisgICAgPj4+IHB2YXJpYW5jZShkYXRhKQorICAgIDEuMjUKKworICAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB0aGUgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzCisgICAgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBhdm9pZCByZWNhbGN1bGF0aW5nIGl0OgorCisgICAgPj4+IG11ID0gbWVhbihkYXRhKQorICAgID4+PiBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgMS4yNQorCisgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGF0IGBgbXVgYCBpcyBhY3R1YWxseSB0aGUgbWVhbiBvZiBgYGRhdGFgYC4KKyAgICBHaXZpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgYGBtdWBgIG1heSBsZWFkIHRvIGludmFsaWQgb3IgaW1wb3NzaWJsZQorICAgIHJlc3VsdHMuCisKKyAgICBEZWNpbWFscyBhbmQgRnJhY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gcHZhcmlhbmNlKFtEKCIyNy41IiksIEQoIjMwLjI1IiksIEQoIjMwLjI1IiksIEQoIjM0LjUiKSwgRCgiNDEuNzUiKV0pCisgICAgRGVjaW1hbCgnMjQuODE1JykKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiBwdmFyaWFuY2UoW0YoMSwgNCksIEYoNSwgNCksIEYoMSwgMildKQorICAgIEZyYWN0aW9uKDEzLCA3MikKKworICAgICIiIgorICAgIGlmIGl0ZXIoZGF0YSkgaXMgZGF0YToKKyAgICAgICAgZGF0YSA9IGxpc3QoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA8IDE6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigncHZhcmlhbmNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBkYXRhIHBvaW50JykKKyAgICBzcyA9IF9zcyhkYXRhLCBtdSkKKyAgICByZXR1cm4gc3MvbgorCisKK2RlZiBzdGRldihkYXRhLCB4YmFyPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHNhbXBsZSB2YXJpYW5jZS4KKworICAgIFNlZSBgYHZhcmlhbmNlYGAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgID4+PiBzdGRldihbMS41LCAyLjUsIDIuNSwgMi43NSwgMy4yNSwgNC43NV0pCisgICAgMS4wODEwODc0MTU1MjE5ODI3CisKKyAgICAiIiIKKyAgICB2YXIgPSB2YXJpYW5jZShkYXRhLCB4YmFyKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHZhci5zcXJ0KCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBtYXRoLnNxcnQodmFyKQorCisKK2RlZiBwc3RkZXYoZGF0YSwgbXU9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKworICAgIFNlZSBgYHB2YXJpYW5jZWBgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgICA+Pj4gcHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAwLjk4Njg5MzI3MzUyNzI1MQorCisgICAgIiIiCisgICAgdmFyID0gcHZhcmlhbmNlKGRhdGEsIG11KQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHZhci5zcXJ0KCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBtYXRoLnNxcnQodmFyKQpkaWZmIC0tZ2l0IGEvTGliL3N0cmluZy5weSBiL0xpYi9zdHJpbmcucHkKaW5kZXggYjU3Yzc5Yi4uNzJhMDlmNyAxMDA2NDQKLS0tIGEvTGliL3N0cmluZy5weQorKysgYi9MaWIvc3RyaW5nLnB5CkBAIC0xNjksNyArMTY5LDggQEAKICAgICAgICAgc2VsZi5jaGVja191bnVzZWRfYXJncyh1c2VkX2FyZ3MsIGFyZ3MsIGt3YXJncykKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIF92Zm9ybWF0KHNlbGYsIGZvcm1hdF9zdHJpbmcsIGFyZ3MsIGt3YXJncywgdXNlZF9hcmdzLCByZWN1cnNpb25fZGVwdGgpOgorICAgIGRlZiBfdmZvcm1hdChzZWxmLCBmb3JtYXRfc3RyaW5nLCBhcmdzLCBrd2FyZ3MsIHVzZWRfYXJncywgcmVjdXJzaW9uX2RlcHRoLAorICAgICAgICAgICAgICAgICBhdXRvX2FyZ19pbmRleD0wKToKICAgICAgICAgaWYgcmVjdXJzaW9uX2RlcHRoIDwgMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ01heCBzdHJpbmcgcmVjdXJzaW9uIGV4Y2VlZGVkJykKICAgICAgICAgcmVzdWx0ID0gW10KQEAgLTE4NSw2ICsxODYsMjMgQEAKICAgICAgICAgICAgICAgICAjIHRoaXMgaXMgc29tZSBtYXJrdXAsIGZpbmQgdGhlIG9iamVjdCBhbmQgZG8KICAgICAgICAgICAgICAgICAjICB0aGUgZm9ybWF0dGluZwogCisgICAgICAgICAgICAgICAgIyBoYW5kbGUgYXJnIGluZGV4aW5nIHdoZW4gZW1wdHkgZmllbGRfbmFtZXMgYXJlIGdpdmVuLgorICAgICAgICAgICAgICAgIGlmIGZpZWxkX25hbWUgPT0gJyc6CisgICAgICAgICAgICAgICAgICAgIGlmIGF1dG9fYXJnX2luZGV4IGlzIEZhbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2Fubm90IHN3aXRjaCBmcm9tIG1hbnVhbCBmaWVsZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWZpY2F0aW9uIHRvIGF1dG9tYXRpYyBmaWVsZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1iZXJpbmcnKQorICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gc3RyKGF1dG9fYXJnX2luZGV4KQorICAgICAgICAgICAgICAgICAgICBhdXRvX2FyZ19pbmRleCArPSAxCisgICAgICAgICAgICAgICAgZWxpZiBmaWVsZF9uYW1lLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgYXV0b19hcmdfaW5kZXg6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW5ub3Qgc3dpdGNoIGZyb20gbWFudWFsIGZpZWxkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwZWNpZmljYXRpb24gdG8gYXV0b21hdGljIGZpZWxkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bWJlcmluZycpCisgICAgICAgICAgICAgICAgICAgICMgZGlzYWJsZSBhdXRvIGFyZyBpbmNyZW1lbnRpbmcsIGlmIGl0IGdldHMKKyAgICAgICAgICAgICAgICAgICAgIyB1c2VkIGxhdGVyIG9uLCB0aGVuIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZAorICAgICAgICAgICAgICAgICAgICBhdXRvX2FyZ19pbmRleCA9IEZhbHNlCisKICAgICAgICAgICAgICAgICAjIGdpdmVuIHRoZSBmaWVsZF9uYW1lLCBmaW5kIHRoZSBvYmplY3QgaXQgcmVmZXJlbmNlcwogICAgICAgICAgICAgICAgICMgIGFuZCB0aGUgYXJndW1lbnQgaXQgY2FtZSBmcm9tCiAgICAgICAgICAgICAgICAgb2JqLCBhcmdfdXNlZCA9IHNlbGYuZ2V0X2ZpZWxkKGZpZWxkX25hbWUsIGFyZ3MsIGt3YXJncykKQEAgLTE5NSw3ICsyMTMsOCBAQAogCiAgICAgICAgICAgICAgICAgIyBleHBhbmQgdGhlIGZvcm1hdCBzcGVjLCBpZiBuZWVkZWQKICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYyA9IHNlbGYuX3Zmb3JtYXQoZm9ybWF0X3NwZWMsIGFyZ3MsIGt3YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9hcmdzLCByZWN1cnNpb25fZGVwdGgtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9hcmdzLCByZWN1cnNpb25fZGVwdGgtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b19hcmdfaW5kZXg9YXV0b19hcmdfaW5kZXgpCiAKICAgICAgICAgICAgICAgICAjIGZvcm1hdCB0aGUgb2JqZWN0IGFuZCBhcHBlbmQgdG8gdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc2VsZi5mb3JtYXRfZmllbGQob2JqLCBmb3JtYXRfc3BlYykpCmRpZmYgLS1naXQgYS9MaWIvc3RydWN0LnB5IGIvTGliL3N0cnVjdC5weQppbmRleCA5YmZjMjNmLi5kNmJiYTU4IDEwMDY0NAotLS0gYS9MaWIvc3RydWN0LnB5CisrKyBiL0xpYi9zdHJ1Y3QucHkKQEAgLTEsNiArMSw3IEBACiBfX2FsbF9fID0gWwogICAgICMgRnVuY3Rpb25zCiAgICAgJ2NhbGNzaXplJywgJ3BhY2snLCAncGFja19pbnRvJywgJ3VucGFjaycsICd1bnBhY2tfZnJvbScsCisgICAgJ2l0ZXJfdW5wYWNrJywKIAogICAgICMgQ2xhc3NlcwogICAgICdTdHJ1Y3QnLApkaWZmIC0tZ2l0IGEvTGliL3N1YnByb2Nlc3MucHkgYi9MaWIvc3VicHJvY2Vzcy5weQppbmRleCAwMTc4YjA4Li5kZGMwMzNhIDEwMDY0NAotLS0gYS9MaWIvc3VicHJvY2Vzcy5weQorKysgYi9MaWIvc3VicHJvY2Vzcy5weQpAQCAtMTQ1LDExICsxNDUsMTMgQEAKIGdldHN0YXR1c291dHB1dChjbWQpOgogICAgIFJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KIAotICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggb3MucG9wZW4oKSBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgIChzdGF0dXMsIG91dHB1dCkuICBjbWQgaXMgYWN0dWFsbHkgcnVuIGFzICd7IGNtZCA7IH0gMj4mMScsIHNvIHRoYXQgdGhlCi0gICAgcmV0dXJuZWQgb3V0cHV0IHdpbGwgY29udGFpbiBvdXRwdXQgb3IgZXJyb3IgbWVzc2FnZXMuIEEgdHJhaWxpbmcgbmV3bGluZQotICAgIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4gVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUKLSAgICBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgQyBmdW5jdGlvbiB3YWl0KCkuICBFeGFtcGxlOgorICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggJ2NoZWNrX291dHB1dCcgYW5kCisgICAgcmV0dXJuIGEgMi10dXBsZSAoc3RhdHVzLCBvdXRwdXQpLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkLAorICAgIG1lYW5pbmcgdGhhdCB0aGUgcmVzdWx0IHdpdGggYmUgZGVjb2RlZCB0byBhIHN0cmluZy4KKworICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCisgICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgZnVuY3Rpb24gJ3dhaXQnLiAgRXhhbXBsZToKIAogICAgID4+PiBzdWJwcm9jZXNzLmdldHN0YXR1c291dHB1dCgnbHMgL2Jpbi9scycpCiAgICAgKDAsICcvYmluL2xzJykKQEAgLTE3OCw2ICsxODAsOSBAQAogCiAgICAgPj4+IG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCiAKKyAgICBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50LCAiaW5wdXQiLCBhbGxvd2luZyB5b3UgdG8KKyAgICBwYXNzIGEgc3RyaW5nIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB5b3UgdXNlIHRoaXMgYXJndW1lbnQKKyAgICB5b3UgbWF5IG5vdCBhbHNvIHVzZSB0aGUgUG9wZW4gY29uc3RydWN0b3IncyAic3RkaW4iIGFyZ3VtZW50LgogCiBFeGNlcHRpb25zCiAtLS0tLS0tLS0tCkBAIC0zNDUsOCArMzUwLDYgQEAKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgdGltZQotaW1wb3J0IHRyYWNlYmFjawotaW1wb3J0IGdjCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCB3YXJuaW5ncwpAQCAtMzk4LDE5ICs0MDEsMjggQEAKICAgICAgICAgaFN0ZE91dHB1dCA9IE5vbmUKICAgICAgICAgaFN0ZEVycm9yID0gTm9uZQogICAgICAgICB3U2hvd1dpbmRvdyA9IDAKLSAgICBjbGFzcyBweXdpbnR5cGVzOgotICAgICAgICBlcnJvciA9IElPRXJyb3IKIGVsc2U6Ci0gICAgaW1wb3J0IHNlbGVjdAotICAgIF9oYXNfcG9sbCA9IGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpCiAgICAgaW1wb3J0IF9wb3NpeHN1YnByb2Nlc3MKLSAgICBfY3JlYXRlX3BpcGUgPSBfcG9zaXhzdWJwcm9jZXNzLmNsb2V4ZWNfcGlwZQorICAgIGltcG9ydCBzZWxlY3QKKyAgICBpbXBvcnQgc2VsZWN0b3JzCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nIGFzIHRocmVhZGluZwogCiAgICAgIyBXaGVuIHNlbGVjdCBvciBwb2xsIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGUgZmlsZSBpcyB3cml0YWJsZSwKICAgICAjIHdlIGNhbiB3cml0ZSB1cCB0byBfUElQRV9CVUYgYnl0ZXMgd2l0aG91dCByaXNrIG9mIGJsb2NraW5nLgogICAgICMgUE9TSVggZGVmaW5lcyBQSVBFX0JVRiBhcyA+PSA1MTIuCiAgICAgX1BJUEVfQlVGID0gZ2V0YXR0cihzZWxlY3QsICdQSVBFX0JVRicsIDUxMikKIAorICAgICMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUKKyAgICAjIGRlc2NyaXB0b3IsIGNvbnRyYXJpbHkgdG8gZXBvbGwva3F1ZXVlIChhbHNvLCB0aGV5IHJlcXVpcmUgYSBzaW5nbGUKKyAgICAjIHN5c2NhbGwpLgorICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgIF9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlBvbGxTZWxlY3RvcgorICAgIGVsc2U6CisgICAgICAgIF9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCisKIAogX19hbGxfXyA9IFsiUG9wZW4iLCAiUElQRSIsICJTVERPVVQiLCAiY2FsbCIsICJjaGVja19jYWxsIiwgImdldHN0YXR1c291dHB1dCIsCiAgICAgICAgICAgICJnZXRvdXRwdXQiLCAiY2hlY2tfb3V0cHV0IiwgIkNhbGxlZFByb2Nlc3NFcnJvciIsICJERVZOVUxMIl0KQEAgLTUwNiw2ICs1MTgsOCBAQAogICAgIGZvciBmbGFnLCBvcHQgaW4gZmxhZ19vcHRfbWFwLml0ZW1zKCk6CiAgICAgICAgIHYgPSBnZXRhdHRyKHN5cy5mbGFncywgZmxhZykKICAgICAgICAgaWYgdiA+IDA6CisgICAgICAgICAgICBpZiBmbGFnID09ICdoYXNoX3JhbmRvbWl6YXRpb24nOgorICAgICAgICAgICAgICAgIHYgPSAxICMgSGFuZGxlIHNwZWNpZmljYXRpb24gb2YgYW4gZXhhY3Qgc2VlZAogICAgICAgICAgICAgYXJncy5hcHBlbmQoJy0nICsgb3B0ICogdikKICAgICBmb3Igb3B0IGluIHN5cy53YXJub3B0aW9uczoKICAgICAgICAgYXJncy5hcHBlbmQoJy1XJyArIG9wdCkKQEAgLTU2OCwxNCArNTgyLDMxIEBACiAgICAgLi4uICAgICAgICAgICAgICBzdGRlcnI9U1RET1VUKQogICAgIGInbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCiAKKyAgICBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50LCAiaW5wdXQiLCBhbGxvd2luZyB5b3UgdG8KKyAgICBwYXNzIGEgc3RyaW5nIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB5b3UgdXNlIHRoaXMgYXJndW1lbnQKKyAgICB5b3UgbWF5IG5vdCBhbHNvIHVzZSB0aGUgUG9wZW4gY29uc3RydWN0b3IncyAic3RkaW4iIGFyZ3VtZW50LCBhcworICAgIGl0IHRvbyB3aWxsIGJlIHVzZWQgaW50ZXJuYWxseS4gIEV4YW1wbGU6CisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsic2VkIiwgIi1lIiwgInMvZm9vL2Jhci8iXSwKKyAgICAuLi4gICAgICAgICAgICAgIGlucHV0PWIid2hlbiBpbiB0aGUgY291cnNlIG9mIGZvb21hbiBldmVudHNcbiIpCisgICAgYid3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgYmFybWFuIGV2ZW50c1xuJworCiAgICAgSWYgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUgaXMgcGFzc2VkLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYQogICAgIHN0cmluZyByYXRoZXIgdGhhbiBieXRlcy4KICAgICAiIiIKICAgICBpZiAnc3Rkb3V0JyBpbiBrd2FyZ3M6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZG91dCBhcmd1bWVudCBub3QgYWxsb3dlZCwgaXQgd2lsbCBiZSBvdmVycmlkZGVuLicpCisgICAgaWYgJ2lucHV0JyBpbiBrd2FyZ3M6CisgICAgICAgIGlmICdzdGRpbicgaW4ga3dhcmdzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3RkaW4gYW5kIGlucHV0IGFyZ3VtZW50cyBtYXkgbm90IGJvdGggYmUgdXNlZC4nKQorICAgICAgICBpbnB1dGRhdGEgPSBrd2FyZ3NbJ2lucHV0J10KKyAgICAgICAgZGVsIGt3YXJnc1snaW5wdXQnXQorICAgICAgICBrd2FyZ3NbJ3N0ZGluJ10gPSBQSVBFCisgICAgZWxzZToKKyAgICAgICAgaW5wdXRkYXRhID0gTm9uZQogICAgIHdpdGggUG9wZW4oKnBvcGVuYXJncywgc3Rkb3V0PVBJUEUsICoqa3dhcmdzKSBhcyBwcm9jZXNzOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXRkYXRhLCB0aW1lb3V0PXRpbWVvdXQpCiAgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXhwaXJlZDoKICAgICAgICAgICAgIHByb2Nlc3Mua2lsbCgpCiAgICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKQEAgLTY2NCwxMyArNjk1LDE1IEBACiAjCiAKIGRlZiBnZXRzdGF0dXNvdXRwdXQoY21kKToKLSAgICAiIiJSZXR1cm4gKHN0YXR1cywgb3V0cHV0KSBvZiBleGVjdXRpbmcgY21kIGluIGEgc2hlbGwuCisgICAgIiIiICAgIFJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KIAotICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggb3MucG9wZW4oKSBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgIChzdGF0dXMsIG91dHB1dCkuICBjbWQgaXMgYWN0dWFsbHkgcnVuIGFzICd7IGNtZCA7IH0gMj4mMScsIHNvIHRoYXQgdGhlCi0gICAgcmV0dXJuZWQgb3V0cHV0IHdpbGwgY29udGFpbiBvdXRwdXQgb3IgZXJyb3IgbWVzc2FnZXMuICBBIHRyYWlsaW5nIG5ld2xpbmUKLSAgICBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZQotICAgIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHRoZSBDIGZ1bmN0aW9uIHdhaXQoKS4gIEV4YW1wbGU6CisgICAgRXhlY3V0ZSB0aGUgc3RyaW5nICdjbWQnIGluIGEgc2hlbGwgd2l0aCAnY2hlY2tfb3V0cHV0JyBhbmQKKyAgICByZXR1cm4gYSAyLXR1cGxlIChzdGF0dXMsIG91dHB1dCkuIFVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzIHVzZWQsCisgICAgbWVhbmluZyB0aGF0IHRoZSByZXN1bHQgd2l0aCBiZSBkZWNvZGVkIHRvIGEgc3RyaW5nLgorCisgICAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4KKyAgICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZSBpbnRlcnByZXRlZAorICAgIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHRoZSBmdW5jdGlvbiAnd2FpdCcuIEV4YW1wbGU6CiAKICAgICA+Pj4gaW1wb3J0IHN1YnByb2Nlc3MKICAgICA+Pj4gc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXQoJ2xzIC9iaW4vbHMnKQpAQCAtNzE5LDYgKzc1MiwxMiBAQAogICAgICAgICAgICAgICAgICBwYXNzX2Zkcz0oKSk6CiAgICAgICAgICIiIkNyZWF0ZSBuZXcgUG9wZW4gaW5zdGFuY2UuIiIiCiAgICAgICAgIF9jbGVhbnVwKCkKKyAgICAgICAgIyBIZWxkIHdoaWxlIGFueXRoaW5nIGlzIGNhbGxpbmcgd2FpdHBpZCBiZWZvcmUgcmV0dXJuY29kZSBoYXMgYmVlbgorICAgICAgICAjIHVwZGF0ZWQgdG8gcHJldmVudCBjbG9iYmVyaW5nIHJldHVybmNvZGUgaWYgd2FpdCgpIG9yIHBvbGwoKSBhcmUKKyAgICAgICAgIyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGF0IG9uY2UuICBBZnRlciBhY3F1aXJpbmcgdGhlIGxvY2ssCisgICAgICAgICMgY29kZSBtdXN0IHJlLWNoZWNrIHNlbGYucmV0dXJuY29kZSB0byBzZWUgaWYgYW5vdGhlciB0aHJlYWQganVzdAorICAgICAgICAjIGZpbmlzaGVkIGEgd2FpdHBpZCgpIGNhbGwuCisgICAgICAgIHNlbGYuX3dhaXRwaWRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKIAogICAgICAgICBzZWxmLl9pbnB1dCA9IE5vbmUKICAgICAgICAgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkID0gRmFsc2UKQEAgLTgyMiw3ICs4NjEsNyBAQAogICAgICAgICAgICAgZm9yIGYgaW4gZmlsdGVyKE5vbmUsIChzZWxmLnN0ZGluLCBzZWxmLnN0ZG91dCwgc2VsZi5zdGRlcnIpKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzICAjIElnbm9yZSBFQkFERiBvciBvdGhlciBlcnJvcnMuCiAKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zZWRfY2hpbGRfcGlwZV9mZHM6CkBAIC04MzgsNyArODc3LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgZmQgaW4gdG9fY2xvc2U6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgICAgIHJhaXNlCkBAIC04OTksNyArOTM4LDcgQEAKICAgICAgICAgICAgICAgICBpZiBpbnB1dDoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBJUEUgYW5kIGUuZXJybm8gIT0gZXJybm8uRUlOVkFMOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCkBAIC0xMDMxLDIzICsxMDcwLDYgQEAKICAgICAgICAgICAgIHJldHVybiBIYW5kbGUoaCkKIAogCi0gICAgICAgIGRlZiBfZmluZF93OXhwb3BlbihzZWxmKToKLSAgICAgICAgICAgICIiIkZpbmQgYW5kIHJldHVybiBhYnNvbHV0IHBhdGggdG8gdzl4cG9wZW4uZXhlIiIiCi0gICAgICAgICAgICB3OXhwb3BlbiA9IG9zLnBhdGguam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX3dpbmFwaS5HZXRNb2R1bGVGaWxlTmFtZSgwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidzl4cG9wZW4uZXhlIikKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3OXhwb3Blbik6Ci0gICAgICAgICAgICAgICAgIyBFZWVrIC0gZmlsZS1ub3QtZm91bmQgLSBwb3NzaWJseSBhbiBlbWJlZGRpbmcKLSAgICAgICAgICAgICAgICAjIHNpdHVhdGlvbiAtIHNlZSBpZiB3ZSBjYW4gbG9jYXRlIGl0IGluIHN5cy5leGVjX3ByZWZpeAotICAgICAgICAgICAgICAgIHc5eHBvcGVuID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYmFzZV9leGVjX3ByZWZpeCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInc5eHBvcGVuLmV4ZSIpCi0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHc5eHBvcGVuKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgbG9jYXRlIHc5eHBvcGVuLmV4ZSwgd2hpY2ggaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRlZCBmb3IgUG9wZW4gdG8gd29yayB3aXRoIHlvdXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoZWxsIG9yIHBsYXRmb3JtLiIpCi0gICAgICAgICAgICByZXR1cm4gdzl4cG9wZW4KLQotCiAgICAgICAgIGRlZiBfZXhlY3V0ZV9jaGlsZChzZWxmLCBhcmdzLCBleGVjdXRhYmxlLCBwcmVleGVjX2ZuLCBjbG9zZV9mZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2ZkcywgY3dkLCBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbywgY3JlYXRpb25mbGFncywgc2hlbGwsCkBAIC0xMDc2LDIxICsxMDk4LDYgQEAKICAgICAgICAgICAgICAgICBzdGFydHVwaW5mby53U2hvd1dpbmRvdyA9IF93aW5hcGkuU1dfSElERQogICAgICAgICAgICAgICAgIGNvbXNwZWMgPSBvcy5lbnZpcm9uLmdldCgiQ09NU1BFQyIsICJjbWQuZXhlIikKICAgICAgICAgICAgICAgICBhcmdzID0gJ3t9IC9jICJ7fSInLmZvcm1hdCAoY29tc3BlYywgYXJncykKLSAgICAgICAgICAgICAgICBpZiAoX3dpbmFwaS5HZXRWZXJzaW9uKCkgPj0gMHg4MDAwMDAwMCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShjb21zcGVjKS5sb3dlcigpID09ICJjb21tYW5kLmNvbSIpOgotICAgICAgICAgICAgICAgICAgICAjIFdpbjl4LCBvciB1c2luZyBjb21tYW5kLmNvbSBvbiBOVC4gV2UgbmVlZCB0bwotICAgICAgICAgICAgICAgICAgICAjIHVzZSB0aGUgdzl4cG9wZW4gaW50ZXJtZWRpYXRlIHByb2dyYW0uIEZvciBtb3JlCi0gICAgICAgICAgICAgICAgICAgICMgaW5mb3JtYXRpb24sIHNlZSBLQiBRMTUwOTU2Ci0gICAgICAgICAgICAgICAgICAgICMgKGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMDExMTA1MDg0MDAyL2h0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vc3VwcG9ydC9rYi9hcnRpY2xlcy9RMTUwLzkvNTYuYXNwKQotICAgICAgICAgICAgICAgICAgICB3OXhwb3BlbiA9IHNlbGYuX2ZpbmRfdzl4cG9wZW4oKQotICAgICAgICAgICAgICAgICAgICBhcmdzID0gJyIlcyIgJXMnICUgKHc5eHBvcGVuLCBhcmdzKQotICAgICAgICAgICAgICAgICAgICAjIE5vdCBwYXNzaW5nIENSRUFURV9ORVdfQ09OU09MRSBoYXMgYmVlbiBrbm93biB0bwotICAgICAgICAgICAgICAgICAgICAjIGNhdXNlIHJhbmRvbSBmYWlsdXJlcyBvbiB3aW45eC4gIFNwZWNpZmljYWxseSBhCi0gICAgICAgICAgICAgICAgICAgICMgZGlhbG9nOiAiWW91ciBwcm9ncmFtIGFjY2Vzc2VkIG1lbSBjdXJyZW50bHkgaW4KLSAgICAgICAgICAgICAgICAgICAgIyB1c2UgYXQgeHh4IiBhbmQgYSBob3BlZnVsIHdhcm5pbmcgYWJvdXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICMgc3RhYmlsaXR5IG9mIHlvdXIgc3lzdGVtLiAgQ29zdCBpcyBDdHJsK0Mgd29uJ3QKLSAgICAgICAgICAgICAgICAgICAgIyBraWxsIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzIHw9IF93aW5hcGkuQ1JFQVRFX05FV19DT05TT0xFCiAKICAgICAgICAgICAgICMgU3RhcnQgdGhlIHByb2Nlc3MKICAgICAgICAgICAgIHRyeToKQEAgLTExMDIsMTIgKzExMDksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8pCi0gICAgICAgICAgICBleGNlcHQgcHl3aW50eXBlcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICMgVHJhbnNsYXRlIHB5d2ludHlwZXMuZXJyb3IgdG8gV2luZG93c0Vycm9yLCB3aGljaCBpcwotICAgICAgICAgICAgICAgICMgYSBzdWJjbGFzcyBvZiBPU0Vycm9yLiAgRklYTUU6IFdlIHNob3VsZCByZWFsbHkKLSAgICAgICAgICAgICAgICAjIHRyYW5zbGF0ZSBlcnJubyB1c2luZyBfc3lzX2Vycmxpc3QgKG9yIHNpbWlsYXIpLCBidXQKLSAgICAgICAgICAgICAgICAjIGhvdyBjYW4gdGhpcyBiZSBkb25lIGZyb20gUHl0aG9uPwotICAgICAgICAgICAgICAgIHJhaXNlIFdpbmRvd3NFcnJvcigqZS5hcmdzKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAjIENoaWxkIGlzIGxhdW5jaGVkLiBDbG9zZSB0aGUgcGFyZW50J3MgY29weSBvZiB0aG9zZSBwaXBlCiAgICAgICAgICAgICAgICAgIyBoYW5kbGVzIHRoYXQgb25seSB0aGUgY2hpbGQgc2hvdWxkIGhhdmUgb3Blbi4gIFlvdSBuZWVkCkBAIC0xMTkyLDkgKzExOTMsOSBAQAogICAgICAgICAgICAgICAgIGlmIGlucHV0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLndyaXRlKGlucHV0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSBwaXBlIGZ1bGwgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbW11bmljYXRlKCkgc2hvdWxkIGlnbm9yZSBwaXBlIGZ1bGwgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIChlLmVycm5vID09IGVycm5vLkVJTlZBTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lKToKQEAgLTEyNzgsNyArMTI3OSw3IEBACiAgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3RkaW4gPT0gUElQRToKLSAgICAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3RkaW4gPT0gREVWTlVMTDoKICAgICAgICAgICAgICAgICBwMmNyZWFkID0gc2VsZi5fZ2V0X2Rldm51bGwoKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHN0ZGluLCBpbnQpOgpAQCAtMTI5MCw3ICsxMjkxLDcgQEAKICAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3Rkb3V0ID09IFBJUEU6Ci0gICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZG91dCA9PSBERVZOVUxMOgogICAgICAgICAgICAgICAgIGMycHdyaXRlID0gc2VsZi5fZ2V0X2Rldm51bGwoKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHN0ZG91dCwgaW50KToKQEAgLTEzMDIsNyArMTMwMyw3IEBACiAgICAgICAgICAgICBpZiBzdGRlcnIgaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBQSVBFOgotICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gU1RET1VUOgogICAgICAgICAgICAgICAgIGVycndyaXRlID0gYzJwd3JpdGUKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IERFVk5VTEw6CkBAIC0xMzU0LDcgKzEzNTUsMTQgQEAKICAgICAgICAgICAgICMgRm9yIHRyYW5zZmVycmluZyBwb3NzaWJsZSBleGVjIGZhaWx1cmUgZnJvbSBjaGlsZCB0byBwYXJlbnQuCiAgICAgICAgICAgICAjIERhdGEgZm9ybWF0OiAiZXhjZXB0aW9uIG5hbWU6aGV4IGVycm5vOmRlc2NyaXB0aW9uIgogICAgICAgICAgICAgIyBQaWNrbGUgaXMgbm90IHVzZWQ7IGl0IGlzIGNvbXBsZXggYW5kIGludm9sdmVzIG1lbW9yeSBhbGxvY2F0aW9uLgotICAgICAgICAgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IG9zLnBpcGUoKQorICAgICAgICAgICAgIyBlcnJwaXBlX3dyaXRlIG11c3Qgbm90IGJlIGluIHRoZSBzdGFuZGFyZCBpbyAwLCAxLCBvciAyIGZkIHJhbmdlLgorICAgICAgICAgICAgbG93X2Zkc190b19jbG9zZSA9IFtdCisgICAgICAgICAgICB3aGlsZSBlcnJwaXBlX3dyaXRlIDwgMzoKKyAgICAgICAgICAgICAgICBsb3dfZmRzX3RvX2Nsb3NlLmFwcGVuZChlcnJwaXBlX3dyaXRlKQorICAgICAgICAgICAgICAgIGVycnBpcGVfd3JpdGUgPSBvcy5kdXAoZXJycGlwZV93cml0ZSkKKyAgICAgICAgICAgIGZvciBsb3dfZmQgaW4gbG93X2Zkc190b19jbG9zZToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShsb3dfZmQpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAjIFdlIG11c3QgYXZvaWQgY29tcGxleCB3b3JrIHRoYXQgY291bGQgaW52b2x2ZQpAQCAtMTQyNCwxMyArMTQzMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZSwgaGV4X2Vycm5vLCBlcnJfbXNnID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnBpcGVfZGF0YS5zcGxpdChiJzonLCAyKSkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUgPSBiJ1J1bnRpbWVFcnJvcicKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUgPSBiJ1N1YnByb2Nlc3NFcnJvcicKICAgICAgICAgICAgICAgICAgICAgaGV4X2Vycm5vID0gYicwJwogICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gKGInQmFkIGV4Y2VwdGlvbiBkYXRhIGZyb20gY2hpbGQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZXJycGlwZV9kYXRhKSkKICAgICAgICAgICAgICAgICBjaGlsZF9leGNlcHRpb25fdHlwZSA9IGdldGF0dHIoCiAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGlucywgZXhjZXB0aW9uX25hbWUuZGVjb2RlKCdhc2NpaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc0Vycm9yKQogICAgICAgICAgICAgICAgIGVycl9tc2cgPSBlcnJfbXNnLmRlY29kZShlcnJvcnM9InN1cnJvZ2F0ZXBhc3MiKQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoY2hpbGRfZXhjZXB0aW9uX3R5cGUsIE9TRXJyb3IpIGFuZCBoZXhfZXJybm86CiAgICAgICAgICAgICAgICAgICAgIGVycm5vX251bSA9IGludChoZXhfZXJybm8sIDE2KQpAQCAtMTQ1Miw2ICsxNDYwLDcgQEAKICAgICAgICAgZGVmIF9oYW5kbGVfZXhpdHN0YXR1cyhzZWxmLCBzdHMsIF9XSUZTSUdOQUxFRD1vcy5XSUZTSUdOQUxFRCwKICAgICAgICAgICAgICAgICBfV1RFUk1TSUc9b3MuV1RFUk1TSUcsIF9XSUZFWElURUQ9b3MuV0lGRVhJVEVELAogICAgICAgICAgICAgICAgIF9XRVhJVFNUQVRVUz1vcy5XRVhJVFNUQVRVUyk6CisgICAgICAgICAgICAiIiJBbGwgY2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIE1VU1QgaG9sZCBzZWxmLl93YWl0cGlkX2xvY2suIiIiCiAgICAgICAgICAgICAjIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCAoaW5kaXJlY3RseSkgYnkgX19kZWxfXywgc28gaXQgY2Fubm90CiAgICAgICAgICAgICAjIHJlZmVyIHRvIGFueXRoaW5nIG91dHNpZGUgb2YgaXRzIGxvY2FsIHNjb3BlLgogICAgICAgICAgICAgaWYgX1dJRlNJR05BTEVEKHN0cyk6CkBAIC0xNDYwLDExICsxNDY5LDExIEBACiAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gX1dFWElUU1RBVFVTKHN0cykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBTaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJVbmtub3duIGNoaWxkIGV4aXQgc3RhdHVzISIpCisgICAgICAgICAgICAgICAgcmFpc2UgU3VicHJvY2Vzc0Vycm9yKCJVbmtub3duIGNoaWxkIGV4aXQgc3RhdHVzISIpCiAKIAogICAgICAgICBkZWYgX2ludGVybmFsX3BvbGwoc2VsZiwgX2RlYWRzdGF0ZT1Ob25lLCBfd2FpdHBpZD1vcy53YWl0cGlkLAotICAgICAgICAgICAgICAgIF9XTk9IQU5HPW9zLldOT0hBTkcsIF9vc19lcnJvcj1vcy5lcnJvciwgX0VDSElMRD1lcnJuby5FQ0hJTEQpOgorICAgICAgICAgICAgICAgIF9XTk9IQU5HPW9zLldOT0hBTkcsIF9FQ0hJTEQ9ZXJybm8uRUNISUxEKToKICAgICAgICAgICAgICIiIkNoZWNrIGlmIGNoaWxkIHByb2Nlc3MgaGFzIHRlcm1pbmF0ZWQuICBSZXR1cm5zIHJldHVybmNvZGUKICAgICAgICAgICAgIGF0dHJpYnV0ZS4KIApAQCAtMTQ3MywxMSArMTQ4MiwxNyBAQAogCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0cGlkX2xvY2suYWNxdWlyZShGYWxzZSk6CisgICAgICAgICAgICAgICAgICAgICMgU29tZXRoaW5nIGVsc2UgaXMgYnVzeSBjYWxsaW5nIHdhaXRwaWQuICBEb24ndCBhbGxvdyB0d28KKyAgICAgICAgICAgICAgICAgICAgIyBhdCBvbmNlLiAgV2Uga25vdyBub3RoaW5nIHlldC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUgICMgQW5vdGhlciB0aHJlYWQgd2FpdGVkLgogICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IF93YWl0cGlkKHNlbGYucGlkLCBfV05PSEFORykKICAgICAgICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4aXRzdGF0dXMoc3RzKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBfb3NfZXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBfZGVhZHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gX2RlYWRzdGF0ZQogICAgICAgICAgICAgICAgICAgICBlbGlmIGUuZXJybm8gPT0gX0VDSElMRDoKQEAgLTE0ODcsMTAgKzE1MDIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgY2FuJ3QgZ2V0IHRoZSBzdGF0dXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTc1NgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMAorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRwaWRfbG9jay5yZWxlYXNlKCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKIAogCiAgICAgICAgIGRlZiBfdHJ5X3dhaXQoc2VsZiwgd2FpdF9mbGFncyk6CisgICAgICAgICAgICAiIiJBbGwgY2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIE1VU1QgaG9sZCBzZWxmLl93YWl0cGlkX2xvY2suIiIiCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgKHBpZCwgc3RzKSA9IF9laW50cl9yZXRyeV9jYWxsKG9zLndhaXRwaWQsIHNlbGYucGlkLCB3YWl0X2ZsYWdzKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKQEAgLTE1MjMsMTEgKzE1NDEsMTcgQEAKICAgICAgICAgICAgICAgICAjIGNyaWJiZWQgZnJvbSBMaWIvdGhyZWFkaW5nLnB5IGluIFRocmVhZC53YWl0KCkgYXQgcjcxMDY1LgogICAgICAgICAgICAgICAgIGRlbGF5ID0gMC4wMDA1ICMgNTAwIHVzIC0+IGluaXRpYWwgZGVsYXkgb2YgMSBtcwogICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgIChwaWQsIHN0cykgPSBzZWxmLl90cnlfd2FpdChvcy5XTk9IQU5HKQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcGlkID09IHNlbGYucGlkIG9yIHBpZCA9PSAwCi0gICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dhaXRwaWRfbG9jay5hY3F1aXJlKEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAjIEFub3RoZXIgdGhyZWFkIHdhaXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGlkLCBzdHMpID0gc2VsZi5fdHJ5X3dhaXQob3MuV05PSEFORykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcGlkID09IHNlbGYucGlkIG9yIHBpZCA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXhpdHN0YXR1cyhzdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRwaWRfbG9jay5yZWxlYXNlKCkKICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKICAgICAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nIDw9IDA6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIHRpbWVvdXQpCkBAIC0xNTM1LDExICsxNTU5LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoZGVsYXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAocGlkLCBzdHMpID0gc2VsZi5fdHJ5X3dhaXQoMCkKLSAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGUgcGlkIGFuZCBsb29wIGFzIHdhaXRwaWQgaGFzIGJlZW4ga25vd24gdG8gcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICMgMCBldmVuIHdpdGhvdXQgV05PSEFORyBpbiBvZGQgc2l0dWF0aW9ucy4gIGlzc3VlMTQzOTYuCi0gICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl93YWl0cGlkX2xvY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgICMgQW5vdGhlciB0aHJlYWQgd2FpdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgKHBpZCwgc3RzKSA9IHNlbGYuX3RyeV93YWl0KDApCisgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIHRoZSBwaWQgYW5kIGxvb3AgYXMgd2FpdHBpZCBoYXMgYmVlbiBrbm93biB0bworICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm4gMCBldmVuIHdpdGhvdXQgV05PSEFORyBpbiBvZGQgc2l0dWF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE0Mzk2LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKIAogCkBAIC0xNTUxLDEyICsxNTc5LDY4IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IGlucHV0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKIAotICAgICAgICAgICAgaWYgX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fY29tbXVuaWNhdGVfd2l0aF9wb2xsKGlucHV0LCBlbmR0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9jb21tdW5pY2F0ZV93aXRoX3NlbGVjdChpbnB1dCwgZW5kdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfdGltZW91dCkKKyAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUKKyAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUKKworICAgICAgICAgICAgIyBPbmx5IGNyZWF0ZSB0aGlzIG1hcHBpbmcgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dCA9IHt9CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3Rkb3V0XSA9IFtdCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3RkZXJyXSA9IFtdCisKKyAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3Rkb3V0XQorICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fZmlsZW9iajJvdXRwdXRbc2VsZi5zdGRlcnJdCisKKyAgICAgICAgICAgIHNlbGYuX3NhdmVfaW5wdXQoaW5wdXQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0OgorICAgICAgICAgICAgICAgIGlucHV0X3ZpZXcgPSBtZW1vcnl2aWV3KHNlbGYuX2lucHV0KQorCisgICAgICAgICAgICB3aXRoIF9Qb3BlblNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYuc3RkaW4sIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZi5zdGRvdXQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLnN0ZGVyciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxlY3Rvci5nZXRfbWFwKCk6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKQorICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQorCisgICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3RpbWVvdXQoZW5kdGltZSwgb3JpZ190aW1lb3V0KQorCisgICAgICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgIyBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKKworICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkuZmlsZW9iaiBpcyBzZWxmLnN0ZGluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gaW5wdXRfdmlld1tzZWxmLl9pbnB1dF9vZmZzZXQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKz0gb3Mud3JpdGUoa2V5LmZkLCBjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IudW5yZWdpc3RlcihrZXkuZmlsZW9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wdXRfb2Zmc2V0ID49IGxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkuZmlsZW9iaiBpbiAoc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChrZXkuZmQsIDMyNzY4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW9iajJvdXRwdXRba2V5LmZpbGVvYmpdLmFwcGVuZChkYXRhKQogCiAgICAgICAgICAgICBzZWxmLndhaXQodGltZW91dD1zZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKSkKIApAQCAtMTU5MCwxNzAgKzE2NzQsNiBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuX2lucHV0LmVuY29kZShzZWxmLnN0ZGluLmVuY29kaW5nKQogCiAKLSAgICAgICAgZGVmIF9jb21tdW5pY2F0ZV93aXRoX3BvbGwoc2VsZiwgaW5wdXQsIGVuZHRpbWUsIG9yaWdfdGltZW91dCk6Ci0gICAgICAgICAgICBzdGRvdXQgPSBOb25lICMgUmV0dXJuCi0gICAgICAgICAgICBzdGRlcnIgPSBOb25lICMgUmV0dXJuCi0KLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZSA9IHt9Ci0KLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIGRlZiByZWdpc3Rlcl9hbmRfYXBwZW5kKGZpbGVfb2JqLCBldmVudG1hc2spOgotICAgICAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihmaWxlX29iai5maWxlbm8oKSwgZXZlbnRtYXNrKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGVbZmlsZV9vYmouZmlsZW5vKCldID0gZmlsZV9vYmoKLQotICAgICAgICAgICAgZGVmIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCk6Ci0gICAgICAgICAgICAgICAgcG9sbGVyLnVucmVnaXN0ZXIoZmQpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZVtmZF0uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGUucG9wKGZkKQotCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGFuZCBpbnB1dDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3RkaW4sIHNlbGVjdC5QT0xMT1VUKQotCi0gICAgICAgICAgICAjIE9ubHkgY3JlYXRlIHRoaXMgbWFwcGluZyBpZiB3ZSBoYXZlbid0IGFscmVhZHkuCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dCA9IHt9Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZG91dC5maWxlbm8oKV0gPSBbXQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRlcnIuZmlsZW5vKCldID0gW10KLQotICAgICAgICAgICAgc2VsZWN0X1BPTExJTl9QT0xMUFJJID0gc2VsZWN0LlBPTExJTiB8IHNlbGVjdC5QT0xMUFJJCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3Rkb3V0LCBzZWxlY3RfUE9MTElOX1BPTExQUkkpCi0gICAgICAgICAgICAgICAgc3Rkb3V0ID0gc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3Rkb3V0LmZpbGVubygpXQotICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZGVyciwgc2VsZWN0X1BPTExJTl9QT0xMUFJJKQotICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZGVyci5maWxlbm8oKV0KLQotICAgICAgICAgICAgc2VsZi5fc2F2ZV9pbnB1dChpbnB1dCkKLQotICAgICAgICAgICAgaWYgc2VsZi5faW5wdXQ6Ci0gICAgICAgICAgICAgICAgaW5wdXRfdmlldyA9IG1lbW9yeXZpZXcoc2VsZi5faW5wdXQpCi0KLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX2ZkMmZpbGU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuX3JlbWFpbmluZ190aW1lKGVuZHRpbWUpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZSBhbmQgdGltZW91dCA8IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbCh0aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBzZWxmLl9jaGVja190aW1lb3V0KGVuZHRpbWUsIG9yaWdfdGltZW91dCkKLQotICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlCi0gICAgICAgICAgICAgICAgIyBmaWxlIG9iamVjdHM7IHRoZXkgYXJlIG5vIGxvbmdlciB1c2luZyBDIHN0ZGlvIQotCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgc2VsZWN0LlBPTExPVVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGlucHV0X3ZpZXdbc2VsZi5faW5wdXRfb2Zmc2V0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IG9zLndyaXRlKGZkLCBjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0X29mZnNldCA+PSBsZW4oc2VsZi5faW5wdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgbW9kZSAmIHNlbGVjdF9QT0xMSU5fUE9MTFBSSToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKGZkLCAzMjc2OCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dFtmZF0uYXBwZW5kKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBoYW5nIHVwIG9yIGVycm9ycy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLQotICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKLQotCi0gICAgICAgIGRlZiBfY29tbXVuaWNhdGVfd2l0aF9zZWxlY3Qoc2VsZiwgaW5wdXQsIGVuZHRpbWUsIG9yaWdfdGltZW91dCk6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0ID0gW10KLSAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQgPSBbXQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQuYXBwZW5kKHNlbGYuc3RkaW4pCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LmFwcGVuZChzZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQuYXBwZW5kKHNlbGYuc3RkZXJyKQotCi0gICAgICAgICAgICBzZWxmLl9zYXZlX2lucHV0KGlucHV0KQotCi0gICAgICAgICAgICBzdGRvdXQgPSBOb25lICMgUmV0dXJuCi0gICAgICAgICAgICBzdGRlcnIgPSBOb25lICMgUmV0dXJuCi0KLSAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dF9idWZmID0gW10KLSAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9zdGRvdXRfYnVmZgotICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyX2J1ZmYgPSBbXQotICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX3N0ZGVycl9idWZmCi0KLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX3JlYWRfc2V0IG9yIHNlbGYuX3dyaXRlX3NldDoKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAocmxpc3QsIHdsaXN0LCB4bGlzdCkgPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KHNlbGYuX3JlYWRfc2V0LCBzZWxmLl93cml0ZV9zZXQsIFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLQotICAgICAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCByZXR1cm5pbmcgdGhyZWUgZW1wdHkgbGlzdHMgaW5kaWNhdGVzCi0gICAgICAgICAgICAgICAgIyB0aGF0IHRoZSB0aW1lb3V0IGV4cGlyZWQuCi0gICAgICAgICAgICAgICAgaWYgbm90IChybGlzdCBvciB3bGlzdCBvciB4bGlzdCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgICAgICMgV2UgYWxzbyBjaGVjayB3aGF0IHRpbWUgaXQgaXMgb3Vyc2VsdmVzIGZvciBnb29kIG1lYXN1cmUuCi0gICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGltZW91dChlbmR0aW1lLCBvcmlnX3RpbWVvdXQpCi0KLSAgICAgICAgICAgICAgICAjIFhYWCBSZXdyaXRlIHRoZXNlIHRvIHVzZSBub24tYmxvY2tpbmcgSS9PIG9uIHRoZQotICAgICAgICAgICAgICAgICMgZmlsZSBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gaW4gd2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5faW5wdXRbc2VsZi5faW5wdXRfb2Zmc2V0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3dyaXR0ZW4gPSBvcy53cml0ZShzZWxmLnN0ZGluLmZpbGVubygpLCBjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBJUEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0LnJlbW92ZShzZWxmLnN0ZGluKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IGJ5dGVzX3dyaXR0ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0X29mZnNldCA+PSBsZW4oc2VsZi5faW5wdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldC5yZW1vdmUoc2VsZi5zdGRpbikKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0IGluIHJsaXN0OgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnN0ZG91dC5maWxlbm8oKSwgMTAyNCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZG91dC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5yZW1vdmUoc2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dC5hcHBlbmQoZGF0YSkKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyIGluIHJsaXN0OgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnN0ZGVyci5maWxlbm8oKSwgMTAyNCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5yZW1vdmUoc2VsZi5zdGRlcnIpCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVyci5hcHBlbmQoZGF0YSkKLQotICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKLQotCiAgICAgICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWcpOgogICAgICAgICAgICAgIiIiU2VuZCBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcwogICAgICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvc3VuYXUucHkgYi9MaWIvc3VuYXUucHkKaW5kZXggMTVmN2IwMy4uM2MyNDQ5MiAxMDA2NDQKLS0tIGEvTGliL3N1bmF1LnB5CisrKyBiL0xpYi9zdW5hdS5weQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBnZXRjb21wdHlwZSgpICAgLS0gcmV0dXJucyBjb21wcmVzc2lvbiB0eXBlICgnTk9ORScgb3IgJ1VMQVcnKQogICAgICAgICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIG1hdGNoZXMgJ05PTkUnKQotICAgICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICAgICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIG5hbWVkdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgICAgICAgZ2V0bWFya2VycygpICAgIC0tIHJldHVybnMgTm9uZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZmMgbW9kdWxlKQpAQCAtMTAzLDYgKzEwMywxMSBAQAogaXMgZGVzdHJveWVkLgogIiIiCiAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworX3N1bmF1X3BhcmFtcyA9IG5hbWVkdHVwbGUoJ19zdW5hdV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQorCiAjIGZyb20gPG11bHRpbWVkaWEvYXVkaW9fZmlsZWhkci5oPgogQVVESU9fRklMRV9NQUdJQyA9IDB4MmU3MzZlNjQKIEFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOCA9IDEKQEAgLTE2Myw2ICsxNjgsMTIgQEAKICAgICAgICAgaWYgc2VsZi5fZmlsZToKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGluaXRmcChzZWxmLCBmaWxlKToKICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSAwCkBAIC0yNDYsOSArMjU3LDkgQEAKICAgICAgICAgICAgIHJldHVybiAnbm90IGNvbXByZXNzZWQnCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfc3VuYXVfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIGdldG1hcmtlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25lCkBAIC0zMDcsNiArMzE4LDEyIEBACiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBpbml0ZnAoc2VsZiwgZmlsZSk6CiAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuX2ZyYW1lcmF0ZSA9IDAKQEAgLTMzNSw3ICszNTIsNyBAQAogICAgIGRlZiBzZXRzYW1wd2lkdGgoc2VsZiwgc2FtcHdpZHRoKToKICAgICAgICAgaWYgc2VsZi5fbmZyYW1lc3dyaXR0ZW46CiAgICAgICAgICAgICByYWlzZSBFcnJvcignY2Fubm90IGNoYW5nZSBwYXJhbWV0ZXJzIGFmdGVyIHN0YXJ0aW5nIHRvIHdyaXRlJykKLSAgICAgICAgaWYgc2FtcHdpZHRoIG5vdCBpbiAoMSwgMiwgNCk6CisgICAgICAgIGlmIHNhbXB3aWR0aCBub3QgaW4gKDEsIDIsIDMsIDQpOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ2JhZCBzYW1wbGUgd2lkdGgnKQogICAgICAgICBzZWxmLl9zYW1wd2lkdGggPSBzYW1wd2lkdGgKIApAQCAtMzkwLDE0ICs0MDcsMTYgQEAKICAgICAgICAgc2VsZi5zZXRjb21wdHlwZShjb21wdHlwZSwgY29tcG5hbWUpCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfc3VuYXVfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbigpCiAgICAgICAgIGlmIHNlbGYuX2NvbXB0eXBlID09ICdVTEFXJzoKICAgICAgICAgICAgIGltcG9ydCBhdWRpb29wCkBAIC00MjEsOSArNDQwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RhdGFsZW5ndGggIT0gc2VsZi5fZGF0YXdyaXR0ZW46CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGNoaGVhZGVyKCkKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3BlbmVkIGFuZCBzZWxmLl9maWxlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKIAogICAgICMKQEAgLTQ0OCw2ICs0NjcsOSBAQAogICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gMjoKICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzE2CiAgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gMgorICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gMzoKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzI0CisgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gMwogICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gNDoKICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzMyCiAgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gNApkaWZmIC0tZ2l0IGEvTGliL3N5bWJvbC5weSBiL0xpYi9zeW1ib2wucHkKaW5kZXggMzQxNDNiNS4uNWNmNGE2NSAxMDA3NTUKLS0tIGEvTGliL3N5bWJvbC5weQorKysgYi9MaWIvc3ltYm9sLnB5CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgc3ltX25hbWVbX3ZhbHVlXSA9IF9uYW1lCiAKIAotZGVmIG1haW4oKToKK2RlZiBfbWFpbigpOgogICAgIGltcG9ydCBzeXMKICAgICBpbXBvcnQgdG9rZW4KICAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CkBAIC0xMDgsNCArMTA4LDQgQEAKICAgICB0b2tlbi5fbWFpbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgX21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3N5bXRhYmxlLnB5IGIvTGliL3N5bXRhYmxlLnB5CmluZGV4IGJiMjcxOTYuLmUyMzMxM2IgMTAwNjQ0Ci0tLSBhL0xpYi9zeW10YWJsZS5weQorKysgYi9MaWIvc3ltdGFibGUucHkKQEAgLTIzMiw3ICsyMzIsOCBAQAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGltcG9ydCBvcywgc3lzCi0gICAgc3JjID0gb3BlbihzeXMuYXJndlswXSkucmVhZCgpCisgICAgd2l0aCBvcGVuKHN5cy5hcmd2WzBdKSBhcyBmOgorICAgICAgICBzcmMgPSBmLnJlYWQoKQogICAgIG1vZCA9IHN5bXRhYmxlKHNyYywgb3MucGF0aC5zcGxpdChzeXMuYXJndlswXSlbMV0sICJleGVjIikKICAgICBmb3IgaWRlbnQgaW4gbW9kLmdldF9pZGVudGlmaWVycygpOgogICAgICAgICBpbmZvID0gbW9kLmxvb2t1cChpZGVudCkKZGlmZiAtLWdpdCBhL0xpYi9zeXNjb25maWcucHkgYi9MaWIvc3lzY29uZmlnLnB5CmluZGV4IDJhMjE2MGMuLmRiZjc3NjcgMTAwNjQ0Ci0tLSBhL0xpYi9zeXNjb25maWcucHkKKysrIGIvTGliL3N5c2NvbmZpZy5weQpAQCAtMSw3ICsxLDYgQEAKICIiIkFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCByZQogaW1wb3J0IHN5cwogZnJvbSBvcy5wYXRoIGltcG9ydCBwYXJkaXIsIHJlYWxwYXRoCiAKQEAgLTUyLDI1ICs1MSw2IEBACiAgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9TY3JpcHRzJywKICAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKICAgICAgICAgfSwKLSAgICAnb3MyJzogewotICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vTGliJywKLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9L0xpYicsCi0gICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vSW5jbHVkZScsCi0gICAgICAgICdwbGF0aW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L0luY2x1ZGUnLAotICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCi0gICAgICAgICdkYXRhJzogJ3tiYXNlfScsCi0gICAgICAgIH0sCi0gICAgJ29zMl9ob21lJzogewotICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKLSAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAotICAgICAgICAnZGF0YSc6ICd7dXNlcmJhc2V9JywKLSAgICAgICAgfSwKICAgICAnbnRfdXNlcic6IHsKICAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCiAgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9JywKQEAgLTIxMCw3ICsxOTAsNiBAQAogICAgIGRlZiBqb2ludXNlcigqYXJncyk6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCphcmdzKSkKIAotICAgICMgd2hhdCBhYm91dCAnb3MyZW14JywgJ3Jpc2NvcycgPwogICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJBUFBEQVRBIikgb3IgIn4iCiAgICAgICAgIGlmIGVudl9iYXNlOgpAQCAtMjQyLDYgKzIyMSw3IEBACiAgICAgIiIiCiAgICAgIyBSZWdleGVzIG5lZWRlZCBmb3IgcGFyc2luZyBNYWtlZmlsZSAoYW5kIHNpbWlsYXIgc3ludGF4ZXMsCiAgICAgIyBsaWtlIG9sZC1zdHlsZSBTZXR1cCBmaWxlcykuCisgICAgaW1wb3J0IHJlCiAgICAgX3ZhcmlhYmxlX3J4ID0gcmUuY29tcGlsZSgiKFthLXpBLVpdW2EtekEtWjAtOV9dKylccyo9XHMqKC4qKSIpCiAgICAgX2ZpbmR2YXIxX3J4ID0gcmUuY29tcGlsZShyIlwkXCgoW0EtWmEtel1bQS1aYS16MC05X10qKVwpIikKICAgICBfZmluZHZhcjJfcnggPSByZS5jb21waWxlKHIiXCR7KFtBLVphLXpdW0EtWmEtejAtOV9dKil9IikKQEAgLTM2OSwyMSArMzQ5LDIxIEBACiAgICAgbWFrZWZpbGUgPSBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQogICAgIHRyeToKICAgICAgICAgX3BhcnNlX21ha2VmaWxlKG1ha2VmaWxlLCB2YXJzKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgbWFrZWZpbGUKICAgICAgICAgaWYgaGFzYXR0cihlLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG1zZyA9IG1zZyArICIgKCVzKSIgJSBlLnN0cmVycm9yCi0gICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorICAgICAgICByYWlzZSBPU0Vycm9yKG1zZykKICAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBweWNvbmZpZy5oOgogICAgIGNvbmZpZ19oID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKICAgICB0cnk6CiAgICAgICAgIHdpdGggb3Blbihjb25maWdfaCkgYXMgZjoKICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGYsIHZhcnMpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBtc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBjb25maWdfaAogICAgICAgICBpZiBoYXNhdHRyKGUsICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXNnID0gbXNnICsgIiAoJXMpIiAlIGUuc3RyZXJyb3IKLSAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICMgT24gQUlYLCB0aGVyZSBhcmUgd3JvbmcgcGF0aHMgdG8gdGhlIGxpbmtlciBzY3JpcHRzIGluIHRoZSBNYWtlZmlsZQogICAgICMgLS0gdGhlc2UgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBQeXRob24gc291cmNlLCBidXQgd2hlbiBpbnN0YWxsZWQKICAgICAjIHRoZSBzY3JpcHRzIGFyZSBpbiBhbm90aGVyIGRpcmVjdG9yeS4KQEAgLTQwMyw4ICszODMsOCBAQAogICAgICMgZ2V0X3BsYXRmb3JtKCkgc3VjY2VlZHMuCiAgICAgbmFtZSA9ICdfc3lzY29uZmlnZGF0YScKICAgICBpZiAnZGFyd2luJyBpbiBzeXMucGxhdGZvcm06Ci0gICAgICAgIGltcG9ydCBpbXAKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgbW9kdWxlLmJ1aWxkX3RpbWVfdmFycyA9IHZhcnMKICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKIApAQCAtNDM2LDcgKzQxNiw2IEBACiAgICAgdmFyc1snTElCREVTVCddID0gZ2V0X3BhdGgoJ3N0ZGxpYicpCiAgICAgdmFyc1snQklOTElCREVTVCddID0gZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKQogICAgIHZhcnNbJ0lOQ0xVREVQWSddID0gZ2V0X3BhdGgoJ2luY2x1ZGUnKQotICAgIHZhcnNbJ1NPJ10gPSAnLnB5ZCcKICAgICB2YXJzWydFWFRfU1VGRklYJ10gPSAnLnB5ZCcKICAgICB2YXJzWydFWEUnXSA9ICcuZXhlJwogICAgIHZhcnNbJ1ZFUlNJT04nXSA9IF9QWV9WRVJTSU9OX1NIT1JUX05PX0RPVApAQCAtNDU2LDYgKzQzNSw3IEBACiAgICAgIiIiCiAgICAgaWYgdmFycyBpcyBOb25lOgogICAgICAgICB2YXJzID0ge30KKyAgICBpbXBvcnQgcmUKICAgICBkZWZpbmVfcnggPSByZS5jb21waWxlKCIjZGVmaW5lIChbQS1aXVtBLVphLXowLTlfXSspICguKilcbiIpCiAgICAgdW5kZWZfcnggPSByZS5jb21waWxlKCIvWypdICN1bmRlZiAoW0EtWl1bQS1aYS16MC05X10rKSBbKl0vXG4iKQogCkBAIC01NTIsMTAgKzUzMiwxNCBAQAogICAgICAgICAgICAgIyBzeXMuYWJpZmxhZ3MgbWF5IG5vdCBiZSBkZWZpbmVkIG9uIGFsbCBwbGF0Zm9ybXMuCiAgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ2FiaWZsYWdzJ10gPSAnJwogCi0gICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgogICAgICAgICAgICAgX2luaXRfbm9uX3Bvc2l4KF9DT05GSUdfVkFSUykKICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgogICAgICAgICAgICAgX2luaXRfcG9zaXgoX0NPTkZJR19WQVJTKQorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBzZWUgaXNzdWUxOTU1NQorICAgICAgICBTTyA9IF9DT05GSUdfVkFSUy5nZXQoJ0VYVF9TVUZGSVgnKQorICAgICAgICBpZiBTTyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9DT05GSUdfVkFSU1snU08nXSA9IFNPCiAgICAgICAgICMgU2V0dGluZyAndXNlcmJhc2UnIGlzIGRvbmUgYmVsb3cgdGhlIGNhbGwgdG8gdGhlCiAgICAgICAgICMgaW5pdCBmdW5jdGlvbiB0byBlbmFibGUgdXNpbmcgJ2dldF9jb25maWdfdmFyJyBpbgogICAgICAgICAjIHRoZSBpbml0LWZ1bmN0aW9uLgpAQCAtNTk5LDYgKzU4Myw5IEBACiAKICAgICBFcXVpdmFsZW50IHRvIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQogICAgICIiIgorICAgIGlmIG5hbWUgPT0gJ1NPJzoKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1NPIGlzIGRlcHJlY2F0ZWQsIHVzZSBFWFRfU1VGRklYJywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgIHJldHVybiBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKIAogCkBAIC02NzksNiArNjY2LDcgQEAKICAgICAgICAgcmV0dXJuICIlcy0lcy4lcyIgJSAob3NuYW1lLCB2ZXJzaW9uLCByZWxlYXNlKQogICAgIGVsaWYgb3NuYW1lWzo2XSA9PSAiY3lnd2luIjoKICAgICAgICAgb3NuYW1lID0gImN5Z3dpbiIKKyAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIHJlbF9yZSA9IHJlLmNvbXBpbGUocidbXGQuXSsnKQogICAgICAgICBtID0gcmVsX3JlLm1hdGNoKHJlbGVhc2UpCiAgICAgICAgIGlmIG06CmRpZmYgLS1naXQgYS9MaWIvdGFibmFubnkucHkgYi9MaWIvdGFibmFubnkucHkKaW5kZXggNWI5YjQ0NC4uNDZlMGY1NiAxMDA3NTUKLS0tIGEvTGliL3RhYm5hbm55LnB5CisrKyBiL0xpYi90YWJuYW5ueS5weQpAQCAtOTUsNyArOTUsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBmID0gdG9rZW5pemUub3BlbihmaWxlKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KCIlcjogSS9PIEVycm9yOiAlcyIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL0xpYi90YXJmaWxlLnB5IGIvTGliL3RhcmZpbGUucHkKaW5kZXggZjZkN2Y3OS4uOWUyOTFjMiAxMDA3NTUKLS0tIGEvTGliL3RhcmZpbGUucHkKKysrIGIvTGliL3RhcmZpbGUucHkKQEAgLTU2LDE3ICs1NiwxNSBAQAogIyBvcy5zeW1saW5rIG9uIFdpbmRvd3MgcHJpb3IgdG8gNi4wIHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yCiBzeW1saW5rX2V4Y2VwdGlvbiA9IChBdHRyaWJ1dGVFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcikKIHRyeToKLSAgICAjIFdpbmRvd3NFcnJvciAoMTMxNCkgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIHRoZQorICAgICMgT1NFcnJvciAod2luZXJyb3I9MTMxNCkgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIHRoZQogICAgICMgU2VDcmVhdGVTeW1ib2xpY0xpbmtQcml2aWxlZ2UgcHJpdmlsZWdlCi0gICAgc3ltbGlua19leGNlcHRpb24gKz0gKFdpbmRvd3NFcnJvciwpCisgICAgc3ltbGlua19leGNlcHRpb24gKz0gKE9TRXJyb3IsKQogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBwYXNzCiAKICMgZnJvbSB0YXJmaWxlIGltcG9ydCAqCiBfX2FsbF9fID0gWyJUYXJGaWxlIiwgIlRhckluZm8iLCAiaXNfdGFyZmlsZSIsICJUYXJFcnJvciJdCiAKLWZyb20gYnVpbHRpbnMgaW1wb3J0IG9wZW4gYXMgX29wZW4gIyBTaW5jZSAnb3BlbicgaXMgVGFyRmlsZS5vcGVuCi0KICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgdGFyIGNvbnN0YW50cwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQwLDMwICsxMzgsNiBAQAogfQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEJpdHMgdXNlZCBpbiB0aGUgbW9kZSBmaWVsZCwgdmFsdWVzIGluIG9jdGFsLgotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU19JRkxOSyA9IDBvMTIwMDAwICAgICAgICAjIHN5bWJvbGljIGxpbmsKLVNfSUZSRUcgPSAwbzEwMDAwMCAgICAgICAgIyByZWd1bGFyIGZpbGUKLVNfSUZCTEsgPSAwbzA2MDAwMCAgICAgICAgIyBibG9jayBkZXZpY2UKLVNfSUZESVIgPSAwbzA0MDAwMCAgICAgICAgIyBkaXJlY3RvcnkKLVNfSUZDSFIgPSAwbzAyMDAwMCAgICAgICAgIyBjaGFyYWN0ZXIgZGV2aWNlCi1TX0lGSUZPID0gMG8wMTAwMDAgICAgICAgICMgZmlmbwotCi1UU1VJRCAgID0gMG80MDAwICAgICAgICAgICMgc2V0IFVJRCBvbiBleGVjdXRpb24KLVRTR0lEICAgPSAwbzIwMDAgICAgICAgICAgIyBzZXQgR0lEIG9uIGV4ZWN1dGlvbgotVFNWVFggICA9IDBvMTAwMCAgICAgICAgICAjIHJlc2VydmVkCi0KLVRVUkVBRCAgPSAwbzQwMCAgICAgICAgICAgIyByZWFkIGJ5IG93bmVyCi1UVVdSSVRFID0gMG8yMDAgICAgICAgICAgICMgd3JpdGUgYnkgb3duZXIKLVRVRVhFQyAgPSAwbzEwMCAgICAgICAgICAgIyBleGVjdXRlL3NlYXJjaCBieSBvd25lcgotVEdSRUFEICA9IDBvMDQwICAgICAgICAgICAjIHJlYWQgYnkgZ3JvdXAKLVRHV1JJVEUgPSAwbzAyMCAgICAgICAgICAgIyB3cml0ZSBieSBncm91cAotVEdFWEVDICA9IDBvMDEwICAgICAgICAgICAjIGV4ZWN1dGUvc2VhcmNoIGJ5IGdyb3VwCi1UT1JFQUQgID0gMG8wMDQgICAgICAgICAgICMgcmVhZCBieSBvdGhlcgotVE9XUklURSA9IDBvMDAyICAgICAgICAgICAjIHdyaXRlIGJ5IG90aGVyCi1UT0VYRUMgID0gMG8wMDEgICAgICAgICAgICMgZXhlY3V0ZS9zZWFyY2ggYnkgb3RoZXIKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBpbml0aWFsaXphdGlvbgogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaWYgb3MubmFtZSBpbiAoIm50IiwgImNlIik6CkBAIC0yMjAsNyArMTk0LDcgQEAKICAgICAjIEEgMG8yMDAgYnl0ZSBpbmRpY2F0ZXMgYSBwb3NpdGl2ZSBudW1iZXIsIGEgMG8zNzcgYnl0ZSBhIG5lZ2F0aXZlCiAgICAgIyBudW1iZXIuCiAgICAgaWYgMCA8PSBuIDwgOCAqKiAoZGlnaXRzIC0gMSk6Ci0gICAgICAgIHMgPSBieXRlcygiJTAqbyIgJSAoZGlnaXRzIC0gMSwgbiksICJhc2NpaSIpICsgTlVMCisgICAgICAgIHMgPSBieXRlcygiJTAqbyIgJSAoZGlnaXRzIC0gMSwgaW50KG4pKSwgImFzY2lpIikgKyBOVUwKICAgICBlbGlmIGZvcm1hdCA9PSBHTlVfRk9STUFUIGFuZCAtMjU2ICoqIChkaWdpdHMgLSAxKSA8PSBuIDwgMjU2ICoqIChkaWdpdHMgLSAxKToKICAgICAgICAgaWYgbiA+PSAwOgogICAgICAgICAgICAgcyA9IGJ5dGVhcnJheShbMG8yMDBdKQpAQCAtMjY0LDEzICsyMzgsMTMgQEAKICAgICBmb3IgYiBpbiByYW5nZShibG9ja3MpOgogICAgICAgICBidWYgPSBzcmMucmVhZChCVUZTSVpFKQogICAgICAgICBpZiBsZW4oYnVmKSA8IEJVRlNJWkU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQogICAgICAgICBkc3Qud3JpdGUoYnVmKQogCiAgICAgaWYgcmVtYWluZGVyICE9IDA6CiAgICAgICAgIGJ1ZiA9IHNyYy5yZWFkKHJlbWFpbmRlcikKICAgICAgICAgaWYgbGVuKGJ1ZikgPCByZW1haW5kZXI6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQogICAgICAgICBkc3Qud3JpdGUoYnVmKQogICAgIHJldHVybgogCkBAIC00MDUsNyArMzc5LDcgQEAKICAgICAgICAgICAgICAgICBpZiBtb2RlID09ICJyIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYnVmID0gYiIiCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY21wID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IE9TRXJyb3IKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNtcCA9IGJ6Mi5CWjJDb21wcmVzc29yKCkKIApAQCAtMTQ0OSw3ICsxNDIzLDggQEAKICAgICAgICAgICAgIGZpbGVvYmogPSBibHRuX29wZW4obmFtZSwgc2VsZi5fbW9kZSkKICAgICAgICAgICAgIHNlbGYuX2V4dGZpbGVvYmogPSBGYWxzZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbmFtZSBpcyBOb25lIGFuZCBoYXNhdHRyKGZpbGVvYmosICJuYW1lIik6CisgICAgICAgICAgICBpZiAobmFtZSBpcyBOb25lIGFuZCBoYXNhdHRyKGZpbGVvYmosICJuYW1lIikgYW5kCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShmaWxlb2JqLm5hbWUsIChzdHIsIGJ5dGVzKSkpOgogICAgICAgICAgICAgICAgIG5hbWUgPSBmaWxlb2JqLm5hbWUKICAgICAgICAgICAgIGlmIGhhc2F0dHIoZmlsZW9iaiwgIm1vZGUiKToKICAgICAgICAgICAgICAgICBzZWxmLl9tb2RlID0gZmlsZW9iai5tb2RlCkBAIC0xNjcyLDcgKzE2NDcsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCiAgICAgICAgICAgICBpZiBtb2RlID09ICdyJzoKICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoIm5vdCBhIGJ6aXAyIGZpbGUiKQpAQCAtMjA0Miw3ICsyMDE3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9tZW1iZXIodGFyaW5mbywgb3MucGF0aC5qb2luKHBhdGgsIHRhcmluZm8ubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfYXR0cnM9c2V0X2F0dHJzKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmxldmVsID4gMDoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKQEAgLTIyMzEsOSArMjIwNiw4IEBACiAgICAgICAgICAgICAgICAgaWYgdGFyaW5mby5pc3N5bSgpIGFuZCBoYXNhdHRyKG9zLCAibGNob3duIik6CiAgICAgICAgICAgICAgICAgICAgIG9zLmxjaG93bih0YXJnZXRwYXRoLCB1LCBnKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAib3MyZW14IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNob3duKHRhcmdldHBhdGgsIHUsIGcpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBvcy5jaG93bih0YXJnZXRwYXRoLCB1LCBnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2Ugb3duZXIiKQogCiAgICAgZGVmIGNobW9kKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMjI0Miw3ICsyMjE2LDcgQEAKICAgICAgICAgaWYgaGFzYXR0cihvcywgJ2NobW9kJyk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MuY2htb2QodGFyZ2V0cGF0aCwgdGFyaW5mby5tb2RlKQotICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG1vZGUiKQogCiAgICAgZGVmIHV0aW1lKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMjI1Miw3ICsyMjI2LDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51dGltZSh0YXJnZXRwYXRoLCAodGFyaW5mby5tdGltZSwgdGFyaW5mby5tdGltZSkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2UgbW9kaWZpY2F0aW9uIHRpbWUiKQogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQzLDkgKzIzMTcsOSBAQAogICAgICAgICAgICBjb3JyZXNwb25kcyB0byBUYXJGaWxlJ3MgbW9kZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiJXMgaXMgY2xvc2VkIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiJXMgaXMgY2xvc2VkIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQogICAgICAgICBpZiBtb2RlIGlzIG5vdCBOb25lIGFuZCBzZWxmLm1vZGUgbm90IGluIG1vZGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJiYWQgb3BlcmF0aW9uIGZvciBtb2RlICVyIiAlIHNlbGYubW9kZSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImJhZCBvcGVyYXRpb24gZm9yIG1vZGUgJXIiICUgc2VsZi5tb2RlKQogCiAgICAgZGVmIF9maW5kX2xpbmtfdGFyZ2V0KHNlbGYsIHRhcmluZm8pOgogICAgICAgICAiIiJGaW5kIHRoZSB0YXJnZXQgbWVtYmVyIG9mIGEgc3ltbGluayBvciBoYXJkbGluayBtZW1iZXIgaW4gdGhlCkBAIC0yNDQ5LDMgKzI0MjMsOTcgQEAKIAogYmx0bl9vcGVuID0gb3Blbgogb3BlbiA9IFRhckZpbGUub3BlbgorCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBkZXNjcmlwdGlvbiA9ICdBIHNpbXBsZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGZvciB0YXJmaWxlIG1vZHVsZS4nCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ZlcmJvc2Ugb3V0cHV0JykKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1sJywgJy0tbGlzdCcsIG1ldGF2YXI9Jzx0YXJmaWxlPicsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Nob3cgbGlzdGluZyBvZiBhIHRhcmZpbGUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWUnLCAnLS1leHRyYWN0JywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSgnPHRhcmZpbGU+JywgJzxvdXRwdXRfZGlyPicpLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFeHRyYWN0IHRhcmZpbGUgaW50byB0YXJnZXQgZGlyJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1jJywgJy0tY3JlYXRlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSgnPG5hbWU+JywgJzxmaWxlPicpLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUgdGFyZmlsZSBmcm9tIHNvdXJjZXMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10ZXN0JywgbWV0YXZhcj0nPHRhcmZpbGU+JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGVzdCBpZiBhIHRhcmZpbGUgaXMgdmFsaWQnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLnRlc3Q6CisgICAgICAgIHNyYyA9IGFyZ3MudGVzdAorICAgICAgICBpZiBpc190YXJmaWxlKHNyYyk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICAgICAgcHJpbnQodGFyLmdldG1lbWJlcnMoKSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgaWYgYXJncy52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCd7IXJ9IGlzIGEgdGFyIGFyY2hpdmUuJy5mb3JtYXQoc3JjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5saXN0OgorICAgICAgICBzcmMgPSBhcmdzLmxpc3QKKyAgICAgICAgaWYgaXNfdGFyZmlsZShzcmMpOgorICAgICAgICAgICAgd2l0aCBUYXJGaWxlLm9wZW4oc3JjLCAncjoqJykgYXMgdGY6CisgICAgICAgICAgICAgICAgdGYubGlzdCh2ZXJib3NlPWFyZ3MudmVyYm9zZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5leHRyYWN0OgorICAgICAgICBpZiBsZW4oYXJncy5leHRyYWN0KSA9PSAxOgorICAgICAgICAgICAgc3JjID0gYXJncy5leHRyYWN0WzBdCisgICAgICAgICAgICBjdXJkaXIgPSBvcy5jdXJkaXIKKyAgICAgICAgZWxpZiBsZW4oYXJncy5leHRyYWN0KSA9PSAyOgorICAgICAgICAgICAgc3JjLCBjdXJkaXIgPSBhcmdzLmV4dHJhY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsIHBhcnNlci5mb3JtYXRfaGVscCgpKQorCisgICAgICAgIGlmIGlzX3RhcmZpbGUoc3JjKToKKyAgICAgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHNyYywgJ3I6KicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmV4dHJhY3RhbGwocGF0aD1jdXJkaXIpCisgICAgICAgICAgICBpZiBhcmdzLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgaWYgY3VyZGlyID09ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJ3shcn0gZmlsZSBpcyBleHRyYWN0ZWQuJy5mb3JtYXQoc3JjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgneyFyfSBmaWxlIGlzIGV4dHJhY3RlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50byB7IXJ9IGRpcmVjdG9yeS4nKS5mb3JtYXQoc3JjLCBjdXJkaXIpCisgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyLmV4aXQoMSwgJ3shcn0gaXMgbm90IGEgdGFyIGFyY2hpdmUuXG4nLmZvcm1hdChzcmMpKQorCisgICAgZWxpZiBhcmdzLmNyZWF0ZToKKyAgICAgICAgdGFyX25hbWUgPSBhcmdzLmNyZWF0ZS5wb3AoMCkKKyAgICAgICAgXywgZXh0ID0gb3MucGF0aC5zcGxpdGV4dCh0YXJfbmFtZSkKKyAgICAgICAgY29tcHJlc3Npb25zID0geworICAgICAgICAgICAgIyBnegorICAgICAgICAgICAgJ2d6JzogJ2d6JywKKyAgICAgICAgICAgICd0Z3onOiAnZ3onLAorICAgICAgICAgICAgIyB4egorICAgICAgICAgICAgJ3h6JzogJ3h6JywKKyAgICAgICAgICAgICd0eHonOiAneHonLAorICAgICAgICAgICAgIyBiejIKKyAgICAgICAgICAgICdiejInOiAnYnoyJywKKyAgICAgICAgICAgICd0YnonOiAnYnoyJywKKyAgICAgICAgICAgICd0YnoyJzogJ2J6MicsCisgICAgICAgICAgICAndGIyJzogJ2J6MicsCisgICAgICAgIH0KKyAgICAgICAgdGFyX21vZGUgPSAndzonICsgY29tcHJlc3Npb25zW2V4dF0gaWYgZXh0IGluIGNvbXByZXNzaW9ucyBlbHNlICd3JworICAgICAgICB0YXJfZmlsZXMgPSBhcmdzLmNyZWF0ZQorCisgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHRhcl9uYW1lLCB0YXJfbW9kZSkgYXMgdGY6CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIHRhcl9maWxlczoKKyAgICAgICAgICAgICAgICB0Zi5hZGQoZmlsZV9uYW1lKQorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCd7IXJ9IGZpbGUgY3JlYXRlZC4nLmZvcm1hdCh0YXJfbmFtZSkpCisKKyAgICBlbHNlOgorICAgICAgICBwYXJzZXIuZXhpdCgxLCBwYXJzZXIuZm9ybWF0X2hlbHAoKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZWxuZXRsaWIucHkgYi9MaWIvdGVsbmV0bGliLnB5CmluZGV4IGQ0OWQ0ZjQuLjBjYWNhYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZWxuZXRsaWIucHkKKysrIGIvTGliL3RlbG5ldGxpYi5weQpAQCAtMTcsMTMgKzE3LDEyIEBACiBOb3RlIHRoYXQgcmVhZF9hbGwoKSB3b24ndCByZWFkIHVudGlsIGVvZiAtLSBpdCBqdXN0IHJlYWRzIHNvbWUgZGF0YQogLS0gYnV0IGl0IGd1YXJhbnRlZXMgdG8gcmVhZCBhdCBsZWFzdCBvbmUgYnl0ZSB1bmxlc3MgRU9GIGlzIGhpdC4KIAotSXQgaXMgcG9zc2libGUgdG8gcGFzcyBhIFRlbG5ldCBvYmplY3QgdG8gc2VsZWN0LnNlbGVjdCgpIGluIG9yZGVyIHRvCi13YWl0IHVudGlsIG1vcmUgZGF0YSBpcyBhdmFpbGFibGUuICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLAotcmVhZF9lYWdlcigpIG1heSByZXR1cm4gYicnIGV2ZW4gaWYgdGhlcmUgd2FzIGRhdGEgb24gdGhlIHNvY2tldCwKLWJlY2F1c2UgdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIG1heSBoYXZlIGVhdGVuIHRoZSBkYXRhLiAgVGhpcyBpcyB3aHkKLUVPRkVycm9yIGlzIG5lZWRlZCBpbiBzb21lIGNhc2VzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gIm5vIGRhdGEiIGFuZAotImNvbm5lY3Rpb24gY2xvc2VkIiAoc2luY2UgdGhlIHNvY2tldCBhbHNvIGFwcGVhcnMgcmVhZHkgZm9yIHJlYWRpbmcKLXdoZW4gaXQgaXMgY2xvc2VkKS4KK0l0IGlzIHBvc3NpYmxlIHRvIHBhc3MgYSBUZWxuZXQgb2JqZWN0IHRvIGEgc2VsZWN0b3IgaW4gb3JkZXIgdG8gd2FpdCB1bnRpbAorbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHJlYWRfZWFnZXIoKSBtYXkgcmV0dXJuIGInJworZXZlbiBpZiB0aGVyZSB3YXMgZGF0YSBvbiB0aGUgc29ja2V0LCBiZWNhdXNlIHRoZSBwcm90b2NvbCBuZWdvdGlhdGlvbiBtYXkgaGF2ZQorZWF0ZW4gdGhlIGRhdGEuICBUaGlzIGlzIHdoeSBFT0ZFcnJvciBpcyBuZWVkZWQgaW4gc29tZSBjYXNlcyB0byBkaXN0aW5ndWlzaAorYmV0d2VlbiAibm8gZGF0YSIgYW5kICJjb25uZWN0aW9uIGNsb3NlZCIgKHNpbmNlIHRoZSBzb2NrZXQgYWxzbyBhcHBlYXJzIHJlYWR5Citmb3IgcmVhZGluZyB3aGVuIGl0IGlzIGNsb3NlZCkuCiAKIFRvIGRvOgogLSBvcHRpb24gbmVnb3RpYXRpb24KQEAgLTM0LDEwICszMyw5IEBACiAKIAogIyBJbXBvcnRlZCBtb2R1bGVzCi1pbXBvcnQgZXJybm8KIGltcG9ydCBzeXMKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBzZWxlY3QKK2ltcG9ydCBzZWxlY3RvcnMKIHRyeToKICAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTM0LDYgKzEzMiwxNSBAQAogRVhPUEwgPSBieXRlcyhbMjU1XSkgIyBFeHRlbmRlZC1PcHRpb25zLUxpc3QKIE5PT1BUID0gYnl0ZXMoWzBdKQogCisKKyMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUgZGVzY3JpcHRvciwKKyMgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZSBzeXNjYWxsKS4KK2lmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgX1RlbG5ldFNlbGVjdG9yID0gc2VsZWN0b3JzLlBvbGxTZWxlY3RvcgorZWxzZToKKyAgICBfVGVsbmV0U2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKworCiBjbGFzcyBUZWxuZXQ6CiAKICAgICAiIiJUZWxuZXQgaW50ZXJmYWNlIGNsYXNzLgpAQCAtMjEwLDcgKzIxNyw2IEBACiAgICAgICAgIHNlbGYuc2IgPSAwICMgZmxhZyBmb3IgU0IgYW5kIFNFIHNlcXVlbmNlLgogICAgICAgICBzZWxmLnNiZGF0YXEgPSBiJycKICAgICAgICAgc2VsZi5vcHRpb25fY2FsbGJhY2sgPSBOb25lCi0gICAgICAgIHNlbGYuX2hhc19wb2xsID0gaGFzYXR0cihzZWxlY3QsICdwb2xsJykKICAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYub3Blbihob3N0LCBwb3J0LCB0aW1lb3V0KQogCkBAIC0yNzcsNyArMjgzLDcgQEAKICAgICAgICAgIiIiV3JpdGUgYSBzdHJpbmcgdG8gdGhlIHNvY2tldCwgZG91YmxpbmcgYW55IElBQyBjaGFyYWN0ZXJzLgogCiAgICAgICAgIENhbiBibG9jayBpZiB0aGUgY29ubmVjdGlvbiBpcyBibG9ja2VkLiAgTWF5IHJhaXNlCi0gICAgICAgIHNvY2tldC5lcnJvciBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgICAgICAgIE9TRXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgogCiAgICAgICAgICIiIgogICAgICAgICBpZiBJQUMgaW4gYnVmZmVyOgpAQCAtMjkzLDYxICsyOTksNiBAQAogICAgICAgICBpcyBjbG9zZWQgYW5kIG5vIGNvb2tlZCBkYXRhIGlzIGF2YWlsYWJsZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faGFzX3BvbGw6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bnRpbF93aXRoX3BvbGwobWF0Y2gsIHRpbWVvdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bnRpbF93aXRoX3NlbGVjdChtYXRjaCwgdGltZW91dCkKLQotICAgIGRlZiBfcmVhZF91bnRpbF93aXRoX3BvbGwoc2VsZiwgbWF0Y2gsIHRpbWVvdXQpOgotICAgICAgICAiIiJSZWFkIHVudGlsIGEgZ2l2ZW4gc3RyaW5nIGlzIGVuY291bnRlcmVkIG9yIHVudGlsIHRpbWVvdXQuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgdXNlcyBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0aGUgdGltZW91dC4KLSAgICAgICAgIiIiCi0gICAgICAgIG4gPSBsZW4obWF0Y2gpCi0gICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoKQotICAgICAgICBpZiBpIDwgMDoKLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihzZWxmLCBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzKQotICAgICAgICAgICAgd2hpbGUgaSA8IDAgYW5kIG5vdCBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwoTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIDEwMDAgKiBjYWxsX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihzZWxmKQotICAgICAgICBpZiBpID49IDA6Ci0gICAgICAgICAgICBpID0gaSArIG4KLSAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KLSAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KLSAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZF92ZXJ5X2xhenkoKQotCi0gICAgZGVmIF9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KHNlbGYsIG1hdGNoLCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIGEgZ2l2ZW4gc3RyaW5nIGlzIGVuY291bnRlcmVkIG9yIHVudGlsIHRpbWVvdXQuCi0KLSAgICAgICAgVGhlIHRpbWVvdXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2VsZWN0LnNlbGVjdCgpLgotICAgICAgICAiIiIKICAgICAgICAgbiA9IGxlbihtYXRjaCkKICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQogICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gpCkBAIC0zNTYsMjYgKzMwNywyNSBAQAogICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQogICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQogICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICBzX3JlcGx5ID0gKFtzZWxmXSwgW10sIFtdKQotICAgICAgICBzX2FyZ3MgPSBzX3JlcGx5CiAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzX2FyZ3MgPSBzX2FyZ3MgKyAodGltZW91dCwpCi0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2YgYW5kIHNlbGVjdC5zZWxlY3QoKnNfYXJncykgPT0gc19yZXBseToKLSAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKLSAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKLSAgICAgICAgICAgIGlmIGkgPj0gMDoKLSAgICAgICAgICAgICAgICBpID0gaStuCi0gICAgICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQotICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzX2FyZ3MgPSBzX3JlcGx5ICsgKHRpbWVvdXQtZWxhcHNlZCwpCisgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0CisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgICAgICBpZiBzZWxlY3Rvci5zZWxlY3QodGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkrbgorICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICByZXR1cm4gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCiAKICAgICBkZWYgcmVhZF9hbGwoc2VsZik6CkBAIC01ODAsMjkgKzUzMCwzNSBAQAogCiAgICAgZGVmIHNvY2tfYXZhaWwoc2VsZik6CiAgICAgICAgICIiIlRlc3Qgd2hldGhlciBkYXRhIGlzIGF2YWlsYWJsZSBvbiB0aGUgc29ja2V0LiIiIgotICAgICAgICByZXR1cm4gc2VsZWN0LnNlbGVjdChbc2VsZl0sIFtdLCBbXSwgMCkgPT0gKFtzZWxmXSwgW10sIFtdKQorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICByZXR1cm4gYm9vbChzZWxlY3Rvci5zZWxlY3QoMCkpCiAKICAgICBkZWYgaW50ZXJhY3Qoc2VsZik6CiAgICAgICAgICIiIkludGVyYWN0aW9uIGZ1bmN0aW9uLCBlbXVsYXRlcyBhIHZlcnkgZHVtYiB0ZWxuZXQgY2xpZW50LiIiIgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICAgICAgIHNlbGYubXRfaW50ZXJhY3QoKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZmQsIHdmZCwgeGZkID0gc2VsZWN0LnNlbGVjdChbc2VsZiwgc3lzLnN0ZGluXSwgW10sIFtdKQotICAgICAgICAgICAgaWYgc2VsZiBpbiByZmQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX2VhZ2VyKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogQ29ubmVjdGlvbiBjbG9zZWQgYnkgcmVtb3RlIGhvc3QgKioqJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiB0ZXh0OgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQuZGVjb2RlKCdhc2NpaScpKQotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpbiByZmQ6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLmVuY29kZSgnYXNjaWknKQotICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc3lzLnN0ZGluLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gc2VsZWN0b3Iuc2VsZWN0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleS5maWxlb2JqIGlzIHNlbGY6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYucmVhZF9lYWdlcigpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBDb25uZWN0aW9uIGNsb3NlZCBieSByZW1vdGUgaG9zdCAqKionKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQuZGVjb2RlKCdhc2NpaScpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGtleS5maWxlb2JqIGlzIHN5cy5zdGRpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQogCiAgICAgZGVmIG10X2ludGVyYWN0KHNlbGYpOgogICAgICAgICAiIiJNdWx0aXRocmVhZGVkIHZlcnNpb24gb2YgaW50ZXJhY3QoKS4iIiIKQEAgLTY0OSw3OSArNjA1LDYgQEAKICAgICAgICAgcmVzdWx0cyBhcmUgdW5kZXRlcm1pbmlzdGljLCBhbmQgbWF5IGRlcGVuZCBvbiB0aGUgSS9PIHRpbWluZy4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faGFzX3BvbGw6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0X3dpdGhfcG9sbChsaXN0LCB0aW1lb3V0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdF93aXRoX3NlbGVjdChsaXN0LCB0aW1lb3V0KQotCi0gICAgZGVmIF9leHBlY3Rfd2l0aF9wb2xsKHNlbGYsIGV4cGVjdF9saXN0LCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIG9uZSBmcm9tIGEgbGlzdCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hlcy4KLQotICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRoZSB0aW1lb3V0LgotICAgICAgICAiIiIKLSAgICAgICAgcmUgPSBOb25lCi0gICAgICAgIGV4cGVjdF9saXN0ID0gZXhwZWN0X2xpc3RbOl0KLSAgICAgICAgaW5kaWNlcyA9IHJhbmdlKGxlbihleHBlY3RfbGlzdCkpCi0gICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihleHBlY3RfbGlzdFtpXSwgInNlYXJjaCIpOgotICAgICAgICAgICAgICAgIGlmIG5vdCByZTogaW1wb3J0IHJlCi0gICAgICAgICAgICAgICAgZXhwZWN0X2xpc3RbaV0gPSByZS5jb21waWxlKGV4cGVjdF9saXN0W2ldKQotICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0Ci0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgIG0gPSBOb25lCi0gICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICBtID0gZXhwZWN0X2xpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihzZWxmLCBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzKQotICAgICAgICAgICAgd2hpbGUgbm90IG0gYW5kIG5vdCBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwoTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIDEwMDAgKiBjYWxsX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGV4cGVjdF9saXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgIHBvbGxlci51bnJlZ2lzdGVyKHNlbGYpCi0gICAgICAgIGlmIG06Ci0gICAgICAgICAgICByZXR1cm4gKGksIG0sIHRleHQpCi0gICAgICAgIHRleHQgPSBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKLSAgICAgICAgaWYgbm90IHRleHQgYW5kIHNlbGYuZW9mOgotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgcmV0dXJuICgtMSwgTm9uZSwgdGV4dCkKLQotICAgIGRlZiBfZXhwZWN0X3dpdGhfc2VsZWN0KHNlbGYsIGxpc3QsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgb25lIGZyb20gYSBsaXN0IG9mIGEgcmVndWxhciBleHByZXNzaW9ucyBtYXRjaGVzLgotCi0gICAgICAgIFRoZSB0aW1lb3V0IGlzIGltcGxlbWVudGVkIHVzaW5nIHNlbGVjdC5zZWxlY3QoKS4KLSAgICAgICAgIiIiCiAgICAgICAgIHJlID0gTm9uZQogICAgICAgICBsaXN0ID0gbGlzdFs6XQogICAgICAgICBpbmRpY2VzID0gcmFuZ2UobGVuKGxpc3QpKQpAQCAtNzMwLDI3ICs2MTMsMjcgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgcmU6IGltcG9ydCByZQogICAgICAgICAgICAgICAgIGxpc3RbaV0gPSByZS5jb21waWxlKGxpc3RbaV0pCiAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgICAgICBtID0gbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQotICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCi0gICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQotICAgICAgICAgICAgaWYgc2VsZi5lb2Y6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNfYXJncyA9IChbc2VsZi5maWxlbm8oKV0sIFtdLCBbXSwgdGltZW91dC1lbGFwc2VkKQotICAgICAgICAgICAgICAgIHIsIHcsIHggPSBzZWxlY3Quc2VsZWN0KCpzX2FyZ3MpCi0gICAgICAgICAgICAgICAgaWYgbm90IHI6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCisgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0CisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAgICAgbSA9IGxpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWR5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCiAgICAgICAgIHRleHQgPSBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKICAgICAgICAgaWYgbm90IHRleHQgYW5kIHNlbGYuZW9mOgogICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKZGlmZiAtLWdpdCBhL0xpYi90ZW1wZmlsZS5weSBiL0xpYi90ZW1wZmlsZS5weQppbmRleCA2YmM4NDJmLi5mMGUyNWZjIDEwMDY0NAotLS0gYS9MaWIvdGVtcGZpbGUucHkKKysrIGIvTGliL3RlbXBmaWxlLnB5CkBAIC0yNyw3ICsyNyw2IEBACiAKICMgSW1wb3J0cy4KIAotaW1wb3J0IGF0ZXhpdCBhcyBfYXRleGl0CiBpbXBvcnQgZnVuY3Rvb2xzIGFzIF9mdW5jdG9vbHMKIGltcG9ydCB3YXJuaW5ncyBhcyBfd2FybmluZ3MKIGltcG9ydCBpbyBhcyBfaW8KQEAgLTM1LDIzICszNCw3IEBACiBpbXBvcnQgc2h1dGlsIGFzIF9zaHV0aWwKIGltcG9ydCBlcnJubyBhcyBfZXJybm8KIGZyb20gcmFuZG9tIGltcG9ydCBSYW5kb20gYXMgX1JhbmRvbQotCi10cnk6Ci0gICAgaW1wb3J0IGZjbnRsIGFzIF9mY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGRlZiBfc2V0X2Nsb2V4ZWMoZmQpOgotICAgICAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfc2V0X2Nsb2V4ZWMoZmQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmbGFncyA9IF9mY250bC5mY250bChmZCwgX2ZjbnRsLkZfR0VURkQsIDApCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBmbGFncyByZWFkIHN1Y2Nlc3NmdWxseSwgbW9kaWZ5Ci0gICAgICAgICAgICBmbGFncyB8PSBfZmNudGwuRkRfQ0xPRVhFQwotICAgICAgICAgICAgX2ZjbnRsLmZjbnRsKGZkLCBfZmNudGwuRl9TRVRGRCwgZmxhZ3MpCi0KK2ltcG9ydCB3ZWFrcmVmIGFzIF93ZWFrcmVmCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZApAQCAtNjAsOCArNDMsNiBAQAogX2FsbG9jYXRlX2xvY2sgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2sKIAogX3RleHRfb3BlbmZsYWdzID0gX29zLk9fUkRXUiB8IF9vcy5PX0NSRUFUIHwgX29zLk9fRVhDTAotaWYgaGFzYXR0cihfb3MsICdPX05PSU5IRVJJVCcpOgotICAgIF90ZXh0X29wZW5mbGFncyB8PSBfb3MuT19OT0lOSEVSSVQKIGlmIGhhc2F0dHIoX29zLCAnT19OT0ZPTExPVycpOgogICAgIF90ZXh0X29wZW5mbGFncyB8PSBfb3MuT19OT0ZPTExPVwogCkBAIC05MCw4ICs3MSw4IEBACiAgICAgIyBGYWxsYmFjay4gIEFsbCB3ZSBuZWVkIGlzIHNvbWV0aGluZyB0aGF0IHJhaXNlcyBPU0Vycm9yIGlmIHRoZQogICAgICMgZmlsZSBkb2Vzbid0IGV4aXN0LgogICAgIGRlZiBfc3RhdChmbik6Ci0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmQgPSBfb3Mub3BlbihmbiwgX29zLk9fUkRPTkxZKQorICAgICAgICBfb3MuY2xvc2UoZmQpCiAKIGRlZiBfZXhpc3RzKGZuKToKICAgICB0cnk6CkBAIC0xMjUsNyArMTA2LDcgQEAKICAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgIGMgPSBzZWxmLmNoYXJhY3RlcnMKICAgICAgICAgY2hvb3NlID0gc2VsZi5ybmcuY2hvaWNlCi0gICAgICAgIGxldHRlcnMgPSBbY2hvb3NlKGMpIGZvciBkdW1teSBpbiAiMTIzNDU2Il0KKyAgICAgICAgbGV0dGVycyA9IFtjaG9vc2UoYykgZm9yIGR1bW15IGluIHJhbmdlKDgpXQogICAgICAgICByZXR1cm4gJycuam9pbihsZXR0ZXJzKQogCiBkZWYgX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKToKQEAgLTE2Nyw3ICsxNDgsNyBAQAogCiAgICAgZm9yIGRpciBpbiBkaXJsaXN0OgogICAgICAgICBpZiBkaXIgIT0gX29zLmN1cmRpcjoKLSAgICAgICAgICAgIGRpciA9IF9vcy5wYXRoLm5vcm1jYXNlKF9vcy5wYXRoLmFic3BhdGgoZGlyKSkKKyAgICAgICAgICAgIGRpciA9IF9vcy5wYXRoLmFic3BhdGgoZGlyKQogICAgICAgICAjIFRyeSBvbmx5IGEgZmV3IG5hbWVzIHBlciBkaXJlY3RvcnkuCiAgICAgICAgIGZvciBzZXEgaW4gcmFuZ2UoMTAwKToKICAgICAgICAgICAgIG5hbWUgPSBuZXh0KG5hbWVyKQpAQCAtMjE3LDcgKzE5OCw2IEBACiAgICAgICAgIGZpbGUgPSBfb3MucGF0aC5qb2luKGRpciwgcHJlICsgbmFtZSArIHN1ZikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmQgPSBfb3Mub3BlbihmaWxlLCBmbGFncywgMG82MDApCi0gICAgICAgICAgICBfc2V0X2Nsb2V4ZWMoZmQpCiAgICAgICAgICAgICByZXR1cm4gKGZkLCBfb3MucGF0aC5hYnNwYXRoKGZpbGUpKQogICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgogICAgICAgICAgICAgY29udGludWUgICAgIyB0cnkgYWdhaW4KQEAgLTM1Niw4ICszMzYsNyBAQAogICAgIHVuZGVybHlpbmcgZmlsZSBvYmplY3QsIHdpdGhvdXQgYWRkaW5nIGEgX19kZWxfXyBtZXRob2QgdG8gdGhlCiAgICAgdGVtcG9yYXJ5IGZpbGUuIiIiCiAKLSAgICAjIFNldCBoZXJlIHNpbmNlIF9fZGVsX18gY2hlY2tzIGl0Ci0gICAgZmlsZSA9IE5vbmUKKyAgICBmaWxlID0gTm9uZSAgIyBTZXQgaGVyZSBzaW5jZSBfX2RlbF9fIGNoZWNrcyBpdAogICAgIGNsb3NlX2NhbGxlZCA9IEZhbHNlCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbmFtZSwgZGVsZXRlPVRydWUpOgpAQCAtNDc5LDEwICs0NTgsMTQgQEAKICAgICAgICAgZmxhZ3MgfD0gX29zLk9fVEVNUE9SQVJZCiAKICAgICAoZmQsIG5hbWUpID0gX21rc3RlbXBfaW5uZXIoZGlyLCBwcmVmaXgsIHN1ZmZpeCwgZmxhZ3MpCi0gICAgZmlsZSA9IF9pby5vcGVuKGZkLCBtb2RlLCBidWZmZXJpbmc9YnVmZmVyaW5nLAotICAgICAgICAgICAgICAgICAgICBuZXdsaW5lPW5ld2xpbmUsIGVuY29kaW5nPWVuY29kaW5nKQorICAgIHRyeToKKyAgICAgICAgZmlsZSA9IF9pby5vcGVuKGZkLCBtb2RlLCBidWZmZXJpbmc9YnVmZmVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT1uZXdsaW5lLCBlbmNvZGluZz1lbmNvZGluZykKIAotICAgIHJldHVybiBfVGVtcG9yYXJ5RmlsZVdyYXBwZXIoZmlsZSwgbmFtZSwgZGVsZXRlKQorICAgICAgICByZXR1cm4gX1RlbXBvcmFyeUZpbGVXcmFwcGVyKGZpbGUsIG5hbWUsIGRlbGV0ZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBfb3MuY2xvc2UoZmQpCisgICAgICAgIHJhaXNlCiAKIGlmIF9vcy5uYW1lICE9ICdwb3NpeCcgb3IgX29zLnN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKICAgICAjIE9uIG5vbi1QT1NJWCBhbmQgQ3lnd2luIHN5c3RlbXMsIGFzc3VtZSB0aGF0IHdlIGNhbm5vdCB1bmxpbmsgYSBmaWxlCkBAIC02ODIsMTAgKzY2NSwyMSBAQAogCiAgICAgIyBIYW5kbGUgbWtkdGVtcCByYWlzaW5nIGFuIGV4Y2VwdGlvbgogICAgIG5hbWUgPSBOb25lCisgICAgX2ZpbmFsaXplciA9IE5vbmUKICAgICBfY2xvc2VkID0gRmFsc2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWZmaXg9IiIsIHByZWZpeD10ZW1wbGF0ZSwgZGlyPU5vbmUpOgogICAgICAgICBzZWxmLm5hbWUgPSBta2R0ZW1wKHN1ZmZpeCwgcHJlZml4LCBkaXIpCisgICAgICAgIHNlbGYuX2ZpbmFsaXplciA9IF93ZWFrcmVmLmZpbmFsaXplKAorICAgICAgICAgICAgc2VsZiwgc2VsZi5fY2xlYW51cCwgc2VsZi5uYW1lLAorICAgICAgICAgICAgd2Fybl9tZXNzYWdlPSJJbXBsaWNpdGx5IGNsZWFuaW5nIHVwIHshcn0iLmZvcm1hdChzZWxmKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY2xlYW51cChjbHMsIG5hbWUsIHdhcm5fbWVzc2FnZT1Ob25lKToKKyAgICAgICAgX3NodXRpbC5ybXRyZWUobmFtZSkKKyAgICAgICAgaWYgd2Fybl9tZXNzYWdlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dhcm5pbmdzLndhcm4od2Fybl9tZXNzYWdlLCBSZXNvdXJjZVdhcm5pbmcpCisKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICI8e30geyFyfT4iLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5uYW1lKQpAQCAtNjkzLDUzICs2ODcsMTIgQEAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5uYW1lCiAKLSAgICBkZWYgY2xlYW51cChzZWxmLCBfd2Fybj1GYWxzZSwgX3dhcm5pbmdzPV93YXJuaW5ncyk6Ci0gICAgICAgIGlmIHNlbGYubmFtZSBhbmQgbm90IHNlbGYuX2Nsb3NlZDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBfc2h1dGlsLnJtdHJlZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpIGFzIGV4OgotICAgICAgICAgICAgICAgIGlmICJOb25lIiBub3QgaW4gJyVzJyAlIChleCwpOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIHNlbGYuX3JtdHJlZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCi0gICAgICAgICAgICBpZiBfd2FybiBhbmQgX3dhcm5pbmdzLndhcm46Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBfd2FybmluZ3Mud2FybigiSW1wbGljaXRseSBjbGVhbmluZyB1cCB7IXJ9Ii5mb3JtYXQoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlV2FybmluZykKLSAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIF9pc19ydW5uaW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgIyBEb24ndCByYWlzZSBhbiBleGNlcHRpb24gaWYgbW9kdWxlcyBuZWVkZWQgZm9yIGVtaXR0aW5nCi0gICAgICAgICAgICAgICAgICAgICMgYSB3YXJuaW5nIGFyZSBhbHJlYWR5IGNsZWFuZWQgaW4gc2h1dGRvd24gcHJvY2Vzcy4KLQogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGMsIHZhbHVlLCB0Yik6CiAgICAgICAgIHNlbGYuY2xlYW51cCgpCiAKLSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgIyBJc3N1ZSBhIFJlc291cmNlV2FybmluZyBpZiBpbXBsaWNpdCBjbGVhbnVwIG5lZWRlZAotICAgICAgICBzZWxmLmNsZWFudXAoX3dhcm49VHJ1ZSkKLQotICAgIGRlZiBfcm10cmVlKHNlbGYsIHBhdGgsIF9PU0Vycm9yPU9TRXJyb3IsIF9zZXA9X29zLnBhdGguc2VwLAotICAgICAgICAgICAgICAgIF9saXN0ZGlyPV9vcy5saXN0ZGlyLCBfcmVtb3ZlPV9vcy5yZW1vdmUsIF9ybWRpcj1fb3Mucm1kaXIpOgotICAgICAgICAjIEVzc2VudGlhbGx5IGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIHNodXRpbC5ybXRyZWUuICBXZSBjYW4ndAotICAgICAgICAjIHVzZSBnbG9iYWxzIGJlY2F1c2UgdGhleSBtYXkgYmUgTm9uZSdlZCBvdXQgYXQgc2h1dGRvd24uCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6Ci0gICAgICAgICAgICBfc2VwID0gX3NlcC5lbmNvZGUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgbmFtZSBpbiBfbGlzdGRpcihwYXRoKToKLSAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IHBhdGggKyBfc2VwICsgbmFtZQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgX3JlbW92ZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgX09TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JtdHJlZShmdWxsbmFtZSkKLSAgICAgICAgICAgIF9ybWRpcihwYXRoKQotICAgICAgICBleGNlcHQgX09TRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLV9pc19ydW5uaW5nID0gVHJ1ZQotCi1kZWYgX29uX3NodXRkb3duKCk6Ci0gICAgZ2xvYmFsIF9pc19ydW5uaW5nCi0gICAgX2lzX3J1bm5pbmcgPSBGYWxzZQotCi1fYXRleGl0LnJlZ2lzdGVyKF9vbl9zaHV0ZG93bikKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZmluYWxpemVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZmluYWxpemVyLmRldGFjaCgpCisgICAgICAgIGlmIHNlbGYubmFtZSBpcyBub3QgTm9uZSBhbmQgbm90IHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIF9zaHV0aWwucm10cmVlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvX19tYWluX18ucHkKaW5kZXggY2U1NjE1Yi4uZDVmYmUxNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvX19tYWluX18ucHkKQEAgLTEsMTMgKzEsMyBAQAotZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdAogCi0KLVRFTVBESVIsIFRFU1RDV0QgPSByZWdydGVzdC5fbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQocmVncnRlc3QuVEVNUERJUikKLXJlZ3J0ZXN0LlRFTVBESVIgPSBURU1QRElSCi1yZWdydGVzdC5URVNUQ1dEID0gVEVTVENXRAotCi0jIFJ1biB0aGUgdGVzdHMgaW4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB0ZW1wb3JhcnkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKLSMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKLSMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KLXdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICByZWdydGVzdC5tYWluKCkKK3JlZ3J0ZXN0Lm1haW5faW5fdGVtcF9jd2QoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKcmVuYW1lIHRvIExpYi90ZXN0L190ZXN0X211bHRpcHJvY2Vzc2luZy5weQppbmRleCBhYTY2ZGI0Li40NGQ2YzcxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weQorKysgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKQEAgLTQxLDcgKzQxLDcgQEAKIAogdHJ5OgogICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZWR1Y3Rpb24KLSAgICBIQVNfUkVEVUNUSU9OID0gVHJ1ZQorICAgIEhBU19SRURVQ1RJT04gPSByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIEhBU19SRURVQ1RJT04gPSBGYWxzZQogCkBAIC05Nyw2ICs5Nyw5IEBACiBleGNlcHQ6CiAgICAgTUFYRkQgPSAyNTYKIAorIyBUbyBzcGVlZCB1cCB0ZXN0cyB3aGVuIHVzaW5nIHRoZSBmb3Jrc2VydmVyLCB3ZSBjYW4gcHJlbG9hZCB0aGVzZToKK1BSRUxPQUQgPSBbJ19fbWFpbl9fJywgJ3Rlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlciddCisKICMKICMgU29tZSB0ZXN0cyByZXF1aXJlIGN0eXBlcwogIwpAQCAtMjkyLDE3ICsyOTUsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChqb2luLmVsYXBzZWQsIDAuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIFRydWUpCiAKKyAgICAgICAgIyBYWFggbWF5YmUgdGVybWluYXRpbmcgdG9vIHNvb24gY2F1c2VzIHRoZSBwcm9ibGVtcyBvbiBHZW50b28uLi4KKyAgICAgICAgdGltZS5zbGVlcCgxKQorCiAgICAgICAgIHAudGVybWluYXRlKCkKIAogICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ2FsYXJtJyk6CisgICAgICAgICAgICAjIE9uIHRoZSBHZW50b28gYnVpbGRib3Qgd2FpdHBpZCgpIG9mdGVuIHNlZW1zIHRvIGJsb2NrIGZvcmV2ZXIuCisgICAgICAgICAgICAjIFdlIHVzZSBhbGFybSgpIHRvIGludGVycnVwdCBpdCBpZiBpdCBibG9ja3MgZm9yIHRvbyBsb25nLgogICAgICAgICAgICAgZGVmIGhhbmRsZXIoKmFyZ3MpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignam9pbiB0b29rIHRvbyBsb25nOiAlcycgJSBwKQogICAgICAgICAgICAgb2xkX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKLSAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb2xkX2hhbmRsZXIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKQEAgLTM0MCw3ICszNDgsNiBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90ZXN0X3JlY3Vyc2lvbihjbHMsIHdjb25uLCBpZCk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmb3JraW5nCiAgICAgICAgIHdjb25uLnNlbmQoaWQpCiAgICAgICAgIGlmIGxlbihpZCkgPCAyOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CkBAIC0zODgsNyArMzk1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MC4wKSkKICAgICAgICAgZXZlbnQuc2V0KCkKICAgICAgICAgcC5qb2luKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRfZm9yX2hhbmRsZShzZW50aW5lbCwgdGltZW91dD1ERUxUQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MSkpCiAKICMKICMKQEAgLTY4OCw5ICs2OTUsNiBAQAogICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZShzZWxmKToKICAgICAgICAgcXVldWUgPSBzZWxmLkpvaW5hYmxlUXVldWUoKQogCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNSkgYW5kIG5vdCBoYXNhdHRyKHF1ZXVlLCAndGFza19kb25lJyk6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyAncXVldWUudGFza19kb25lKCknIG1ldGhvZCIpCi0KICAgICAgICAgd29ya2VycyA9IFtzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfdGFza19kb25lLCBhcmdzPShxdWV1ZSwpKQogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDQpXQogCkBAIC0xNzc3LDYgKzE3ODEsNDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0KCksIGV4cGVjdGVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5tYXBfYXN5bmMsIHNxciwgTCkKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF90cmFjZWJhY2soY2xzKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQKKworICAgIGRlZiB0ZXN0X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgIyBXZSB3YW50IGVuc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyBpcworICAgICAgICAjIGNvbnRhaW5lZCBpbiB0aGUgdHJhY2ViYWNrIHJhaXNlZCBpbiB0aGUgbWFpbiBwcm9jZXNzLgorICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuUG9vbCgxKSBhcyBwOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcC5hcHBseShzZWxmLl90ZXN0X3RyYWNlYmFjaykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGV4YyA9IGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgUnVudGltZUVycm9yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShleGMpLCBSdW50aW1lRXJyb3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5hcmdzLCAoMTIzLCkpCisgICAgICAgICAgICBjYXVzZSA9IGV4Yy5fX2NhdXNlX18KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShjYXVzZSksIG11bHRpcHJvY2Vzc2luZy5wb29sLlJlbW90ZVRyYWNlYmFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3JhaXNlIFJ1bnRpbWVFcnJvcigxMjMpICMgc29tZSBjb21tZW50JywgY2F1c2UudGIpCisKKyAgICAgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIGYxOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmMS5nZXR2YWx1ZSgpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3dyYXBwZWRfZXhjZXB0aW9uKGNscyk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZm9vJykKKworICAgIGRlZiB0ZXN0X3dyYXBwZWRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMDk4MDogU2hvdWxkIG5vdCB3cmFwIGV4Y2VwdGlvbiB3aGVuIHVzaW5nIHRocmVhZCBwb29sCisgICAgICAgIHdpdGggc2VsZi5Qb29sKDEpIGFzIHA6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgcC5hcHBseShzZWxmLl90ZXN0X3dyYXBwZWRfZXhjZXB0aW9uKQorCisKIGRlZiByYWlzaW5nKCk6CiAgICAgcmFpc2UgS2V5RXJyb3IoImtleSIpCiAKQEAgLTI0ODQsNyArMjUyOCw3IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCiAgICAgICAgIHJlc291cmNlX3NoYXJlci5zdG9wKHRpbWVvdXQ9NSkKIAogICAgIEBjbGFzc21ldGhvZApAQCAtMjc5OCwzMCArMjg0Miw0MCBAQAogIyBUZXN0IHRoYXQgZnJvbSAuLi4gaW1wb3J0ICogd29ya3MgZm9yIGVhY2ggbW9kdWxlCiAjCiAKLWNsYXNzIF9UZXN0SW1wb3J0U3RhcihCYXNlVGVzdENhc2UpOgorY2xhc3MgX1Rlc3RJbXBvcnRTdGFyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorICAgIGRlZiBnZXRfbW9kdWxlX25hbWVzKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2xvYgorICAgICAgICBmb2xkZXIgPSBvcy5wYXRoLmRpcm5hbWUobXVsdGlwcm9jZXNzaW5nLl9fZmlsZV9fKQorICAgICAgICBwYXR0ZXJuID0gb3MucGF0aC5qb2luKGZvbGRlciwgJyoucHknKQorICAgICAgICBmaWxlcyA9IGdsb2IuZ2xvYihwYXR0ZXJuKQorICAgICAgICBtb2R1bGVzID0gW29zLnBhdGguc3BsaXRleHQob3MucGF0aC5zcGxpdChmKVsxXSlbMF0gZm9yIGYgaW4gZmlsZXNdCisgICAgICAgIG1vZHVsZXMgPSBbJ211bHRpcHJvY2Vzc2luZy4nICsgbSBmb3IgbSBpbiBtb2R1bGVzXQorICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLl9faW5pdF9fJykKKyAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZycpCisgICAgICAgIHJldHVybiBtb2R1bGVzCiAKICAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6Ci0gICAgICAgIG1vZHVsZXMgPSBbCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nJywgJ211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcuaGVhcCcsICdtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMnLAotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wb29sJywgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUnLCAnbXVsdGlwcm9jZXNzaW5nLnV0aWwnCi0gICAgICAgICAgICBdCisgICAgICAgIG1vZHVsZXMgPSBzZWxmLmdldF9tb2R1bGVfbmFtZXMoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9yaycpCisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmtzZXJ2ZXInKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9zcGF3bl9wb3NpeCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX3NwYXduX3dpbjMyJykKKyAgICAgICAgICAgIGlmIG5vdCBIQVNfUkVEVUNUSU9OOgorICAgICAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9ya3NlcnZlcicpCiAKLSAgICAgICAgaWYgSEFTX1JFRFVDVElPTjoKLSAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uJykKLQotICAgICAgICBpZiBjX2ludCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgY19pbnQgaXMgTm9uZToKICAgICAgICAgICAgICMgVGhpcyBtb2R1bGUgcmVxdWlyZXMgX2N0eXBlcwotICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQogCiAgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZXM6CiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kLCAnX19hbGxfXycpLCBuYW1lKQogCi0gICAgICAgICAgICBmb3IgYXR0ciBpbiBnZXRhdHRyKG1vZCwgJ19fYWxsX18nLCAoKSk6CisgICAgICAgICAgICBmb3IgYXR0ciBpbiBtb2QuX19hbGxfXzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIobW9kLCBhdHRyKSwKICAgICAgICAgICAgICAgICAgICAgJyVyIGRvZXMgbm90IGhhdmUgYXR0cmlidXRlICVyJyAlIChtb2QsIGF0dHIpCkBAIC0yOTA0LDcgKzI5NTgsNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9raWxsZXIoY2xzLCBwaWQpOgotICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHVVNSMSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHVVNSMScpLCAncmVxdWlyZXMgU0lHVVNSMScpCkBAIC0yOTE3LDEyICsyOTcxLDE0IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtpbGxlciA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fa2lsbGVyLCBhcmdzPShwaWQsKSkKICAgICAgICAgICAgIGtpbGxlci5zdGFydCgpCi0gICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD10aW1lLnNsZWVwLCBhcmdzPSgxLCkpCi0gICAgICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9dGltZS5zbGVlcCwgYXJncz0oMiwpKQorICAgICAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGtpbGxlci5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnb3Rfc2lnbmFsWzBdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCAwKQotICAgICAgICAgICAga2lsbGVyLmpvaW4oKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgb2xkaGFuZGxlcikKIApAQCAtMjkzNSw4ICsyOTkxLDExIEBACiAgICAgQHVuaXR0ZXN0LnNraXBJZihXSU4zMiwgInNraXBwZWQgb24gV2luZG93cyIpCiAgICAgZGVmIHRlc3RfaW52YWxpZF9oYW5kbGVzKHNlbGYpOgogICAgICAgICBjb25uID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbig0NDk3NzYwOCkKKyAgICAgICAgIyBjaGVjayB0aGF0IHBvbGwoKSBkb2Vzbid0IGNyYXNoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPU0Vycm9yKSwgY29ubi5wb2xsKQorICAgICAgICAgICAgY29ubi5wb2xsKCkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICMgSGFjayBwcml2YXRlIGF0dHJpYnV0ZSBfaGFuZGxlIHRvIGF2b2lkIHByaW50aW5nIGFuIGVycm9yCiAgICAgICAgICAgICAjIGluIGNvbm4uX19kZWxfXwpAQCAtMjk0NCwxMzEgKzMwMDMsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24sIC0xKQogCi0jCi0jIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZyb20gdGhlIGJhc2Ugb25lcyBpbiB0aGlzIG1vZHVsZQotIwotCi1kZWYgY3JlYXRlX3Rlc3RfY2FzZXMoTWl4aW4sIHR5cGUpOgotICAgIHJlc3VsdCA9IHt9Ci0gICAgZ2xvYiA9IGdsb2JhbHMoKQotICAgIFR5cGUgPSB0eXBlLmNhcGl0YWxpemUoKQotICAgIEFMTF9UWVBFUyA9IHsncHJvY2Vzc2VzJywgJ3RocmVhZHMnLCAnbWFuYWdlcid9Ci0KLSAgICBmb3IgbmFtZSBpbiBsaXN0KGdsb2Iua2V5cygpKToKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfVGVzdCcpOgotICAgICAgICAgICAgYmFzZSA9IGdsb2JbbmFtZV0KLSAgICAgICAgICAgIGFzc2VydCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKSA8PSBBTExfVFlQRVMsIHNldChiYXNlLkFMTE9XRURfVFlQRVMpCi0gICAgICAgICAgICBpZiB0eXBlIGluIGJhc2UuQUxMT1dFRF9UWVBFUzoKLSAgICAgICAgICAgICAgICBuZXduYW1lID0gJ1dpdGgnICsgVHlwZSArIG5hbWVbMTpdCi0gICAgICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgcmVzdWx0W25ld25hbWVdID0gVGVtcAotICAgICAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBUZW1wLl9fcXVhbG5hbWVfXyA9IG5ld25hbWUKLSAgICAgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBNaXhpbi5fX21vZHVsZV9fCi0gICAgcmV0dXJuIHJlc3VsdAotCi0jCi0jIENyZWF0ZSB0ZXN0IGNhc2VzCi0jCi0KLWNsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICdwcm9jZXNzZXMnCi0gICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCi0gICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MpCi0gICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4pCi0gICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKLSAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5QaXBlKQotICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5RdWV1ZSkKLSAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlKQotICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkxvY2spCi0gICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJMb2NrKQotICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKQotICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmUpCi0gICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24pCi0gICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkV2ZW50KQotICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIpCi0gICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlZhbHVlKQotICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5BcnJheSkKLSAgICBSYXdWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3VmFsdWUpCi0gICAgUmF3QXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd0FycmF5KQotCi10ZXN0Y2FzZXNfcHJvY2Vzc2VzID0gY3JlYXRlX3Rlc3RfY2FzZXMoUHJvY2Vzc2VzTWl4aW4sIHR5cGU9J3Byb2Nlc3NlcycpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc19wcm9jZXNzZXMpCi0KLQotY2xhc3MgTWFuYWdlck1peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICdtYW5hZ2VyJwotICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgIFF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5RdWV1ZScpKQotICAgIEpvaW5hYmxlUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkpvaW5hYmxlUXVldWUnKSkKLSAgICBMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Mb2NrJykpCi0gICAgUkxvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlJMb2NrJykpCi0gICAgU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5TZW1hcGhvcmUnKSkKLSAgICBCb3VuZGVkU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlJykpCi0gICAgQ29uZGl0aW9uID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Db25kaXRpb24nKSkKLSAgICBFdmVudCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuRXZlbnQnKSkKLSAgICBCYXJyaWVyID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5CYXJyaWVyJykpCi0gICAgVmFsdWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlZhbHVlJykpCi0gICAgQXJyYXkgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkFycmF5JykpCi0gICAgbGlzdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIubGlzdCcpKQotICAgIGRpY3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmRpY3QnKSkKLSAgICBOYW1lc3BhY2UgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLk5hbWVzcGFjZScpKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIFBvb2woY2xzLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIGNscy5tYW5hZ2VyLlBvb2woKmFyZ3MsICoqa3dkcykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIGNscy5tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgIyBvbmx5IHRoZSBtYW5hZ2VyIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGFjdGl2ZV9jaGlsZHJlbigpCi0gICAgICAgICMgYnV0IHRoaXMgY2FuIHRha2UgYSBiaXQgb24gc2xvdyBtYWNoaW5lcywgc28gd2FpdCBhIGZldyBzZWNvbmRzCi0gICAgICAgICMgaWYgdGhlcmUgYXJlIG90aGVyIGNoaWxkcmVuIHRvbyAoc2VlICMxNzM5NSkKLSAgICAgICAgdCA9IDAuMDEKLSAgICAgICAgd2hpbGUgbGVuKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSkgPiAxIGFuZCB0IDwgNToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAodCkKLSAgICAgICAgICAgIHQgKj0gMgotICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICMgZG8gZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgICAgIGlmIGNscy5tYW5hZ2VyLl9udW1iZXJfb2Zfb2JqZWN0cygpICE9IDA6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvciBzaW5jZSBzb21lIHRlc3RzIGRvIG5vdAotICAgICAgICAgICAgIyBlbnN1cmUgdGhhdCBhbGwgcHJvY2Vzc2VzIHdoaWNoIGhvbGQgYSByZWZlcmVuY2UgdG8gYQotICAgICAgICAgICAgIyBtYW5hZ2VkIG9iamVjdCBoYXZlIGJlZW4gam9pbmVkLgotICAgICAgICAgICAgcHJpbnQoJ1NoYXJlZCBvYmplY3RzIHdoaWNoIHN0aWxsIGV4aXN0IGF0IG1hbmFnZXIgc2h1dGRvd246JykKLSAgICAgICAgICAgIHByaW50KGNscy5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkpCi0gICAgICAgIGNscy5tYW5hZ2VyLnNodXRkb3duKCkKLSAgICAgICAgY2xzLm1hbmFnZXIuam9pbigpCi0gICAgICAgIGNscy5tYW5hZ2VyID0gTm9uZQotCi10ZXN0Y2FzZXNfbWFuYWdlciA9IGNyZWF0ZV90ZXN0X2Nhc2VzKE1hbmFnZXJNaXhpbiwgdHlwZT0nbWFuYWdlcicpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc19tYW5hZ2VyKQotCi0KLWNsYXNzIFRocmVhZHNNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAndGhyZWFkcycKLSAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LlByb2Nlc3MKLSAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LmNvbm5lY3Rpb24KLSAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmN1cnJlbnRfcHJvY2VzcykKLSAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmFjdGl2ZV9jaGlsZHJlbikKLSAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQotICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlBpcGUpCi0gICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlF1ZXVlKQotICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkpvaW5hYmxlUXVldWUpCi0gICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuTG9jaykKLSAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUkxvY2spCi0gICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5TZW1hcGhvcmUpCi0gICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQm91bmRlZFNlbWFwaG9yZSkKLSAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkNvbmRpdGlvbikKLSAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuRXZlbnQpCi0gICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQmFycmllcikKLSAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuVmFsdWUpCi0gICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkFycmF5KQotCi10ZXN0Y2FzZXNfdGhyZWFkcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFRocmVhZHNNaXhpbiwgdHlwZT0ndGhyZWFkcycpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc190aHJlYWRzKQogCiAKIGNsYXNzIE90aGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNDE4LDcgKzMzNTIsNyBAQAogICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgogICAgICAgICBpbXBvcnQganNvbiwgc3VicHJvY2VzcwogICAgICAgICAjIHN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgdW51c3VhbCBmbGFncwotICAgICAgICBwcm9nID0gKCdmcm9tIHRlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFRlc3RGbGFnczsgJyArCisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFRlc3RGbGFnczsgJyArCiAgICAgICAgICAgICAgICAgJ1Rlc3RGbGFncy5ydW5faW5fY2hpbGQoKScpCiAgICAgICAgIGRhdGEgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy1FJywgJy1TJywgJy1PJywgJy1jJywgcHJvZ10pCkBAIC0zNDY1LDEzICszMzk5LDE0IEBACiAKIGNsYXNzIFRlc3ROb0ZvcmtCb21iKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9ub2Zvcmtib21iKHNlbGYpOgorICAgICAgICBzbSA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkKICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnbXBfZm9ya19ib21iLnB5JykKLSAgICAgICAgaWYgV0lOMzI6Ci0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUpCisgICAgICAgIGlmIHNtICE9ICdmb3JrJzoKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUobmFtZSwgc20pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBvdXQuZGVjb2RlKCdhc2NpaScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVudGltZUVycm9yJywgZXJyLmRlY29kZSgnYXNjaWknKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKG5hbWUpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayhuYW1lLCBzbSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyMycsIG91dC5kZWNvZGUoJ2FzY2lpJykucnN0cmlwKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBlcnIuZGVjb2RlKCdhc2NpaScpKQogCkBAIC0zNDg5LDcgKzM0MjQsOCBAQAogICAgICAgICBpZiBuID4gMToKICAgICAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Y2xzLmNoaWxkLCBhcmdzPShuLTEsIGNvbm4pKQogICAgICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICBwLmpvaW4odGltZW91dD01KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29ubi5zZW5kKGxlbih1dGlsLl9hZnRlcmZvcmtfcmVnaXN0cnkpKQogICAgICAgICBjb25uLmNsb3NlKCkKQEAgLTM1MDAsMTEgKzM0MzYsNzggQEAKICAgICAgICAgb2xkX3NpemUgPSBsZW4odXRpbC5fYWZ0ZXJmb3JrX3JlZ2lzdHJ5KQogICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuY2hpbGQsIGFyZ3M9KDUsIHcpKQogICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdy5jbG9zZSgpCiAgICAgICAgIG5ld19zaXplID0gci5yZWN2KCkKLSAgICAgICAgcC5qb2luKCkKKyAgICAgICAgcC5qb2luKHRpbWVvdXQ9NSkKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobmV3X3NpemUsIG9sZF9zaXplKQogCiAjCisjIENoZWNrIHRoYXQgbm9uLWZvcmtlZCBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdW5uZWVkZWQgZmRzL2hhbmRsZXMKKyMKKworY2xhc3MgVGVzdENsb3NlRmRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfaGlnaF9zb2NrZXRfZmQoc2VsZik6CisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyB3aWxsIG5vdCBoYXZlIGFueSBzb2NrZXQgaGFuZGxlcywgc28KKyAgICAgICAgICAgICMgY2FsbGluZyBzb2NrZXQuZnJvbWZkKCkgc2hvdWxkIHByb2R1Y2UgV1NBRU5PVFNPQ0sgZXZlbgorICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBhIGhhbmRsZSBvZiB0aGUgc2FtZSBudW1iZXIuCisgICAgICAgICAgICByZXR1cm4gc29ja2V0LnNvY2tldCgpLmRldGFjaCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdlIHdhbnQgdG8gcHJvZHVjZSBhIHNvY2tldCB3aXRoIGFuIGZkIGhpZ2ggZW5vdWdoIHRoYXQgYQorICAgICAgICAgICAgIyBmcmVzaGx5IGNyZWF0ZWQgY2hpbGQgcHJvY2VzcyB3aWxsIG5vdCBoYXZlIGFueSBmZHMgYXMgaGlnaC4KKyAgICAgICAgICAgIGZkID0gc29ja2V0LnNvY2tldCgpLmRldGFjaCgpCisgICAgICAgICAgICB0b19jbG9zZSA9IFtdCisgICAgICAgICAgICB3aGlsZSBmZCA8IDUwOgorICAgICAgICAgICAgICAgIHRvX2Nsb3NlLmFwcGVuZChmZCkKKyAgICAgICAgICAgICAgICBmZCA9IG9zLmR1cChmZCkKKyAgICAgICAgICAgIGZvciB4IGluIHRvX2Nsb3NlOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHgpCisgICAgICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBjbG9zZShzZWxmLCBmZCk6CisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgc29ja2V0LnNvY2tldChmaWxlbm89ZmQpLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2Nsb3NlZmRzKGNscywgY29ubiwgZmQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LmZyb21mZChmZCwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgY29ubi5zZW5kKGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgIGNvbm4uc2VuZChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2VmZChzZWxmKToKKyAgICAgICAgaWYgbm90IEhBU19SRURVQ1RJT046CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncmVxdWlyZXMgZmQgcGlja2xpbmcnKQorCisgICAgICAgIHJlYWRlciwgd3JpdGVyID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQorICAgICAgICBmZCA9IHNlbGYuZ2V0X2hpZ2hfc29ja2V0X2ZkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2Nsb3NlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHdyaXRlciwgZmQpKQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgZSA9IHJlYWRlci5yZWN2KCkKKyAgICAgICAgICAgIHAuam9pbih0aW1lb3V0PTUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsb3NlKGZkKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpCisKKyAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSA9PSAnZm9yayc6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGUsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBXU0FFTk9UU09DSyA9IDEwMDM4CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmVycm5vID09IGVycm5vLkVCQURGIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS53aW5lcnJvciA9PSBXU0FFTk9UU09DSywgZSkKKworIwogIyBJc3N1ZSAjMTcwOTc6IEVJTlRSIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHJlY3YoKSwgc2VuZCgpLCBhY2NlcHQoKSBldGMKICMKIApAQCAtMzU0OCwxMCArMzU1MSwxMCBAQAogICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgaGFuZGxlcikKLSAgICAgICAgbCA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyKCkKLSAgICAgICAgY29ubi5zZW5kKGwuYWRkcmVzcykKLSAgICAgICAgYSA9IGwuYWNjZXB0KCkKLSAgICAgICAgYS5zZW5kKCd3ZWxjb21lJykKKyAgICAgICAgd2l0aCBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcigpIGFzIGw6CisgICAgICAgICAgICBjb25uLnNlbmQobC5hZGRyZXNzKQorICAgICAgICAgICAgYSA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgIGEuc2VuZCgnd2VsY29tZScpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR1VTUjEnKSwgJ3JlcXVpcmVzIFNJR1VTUjEnKQogICAgIGRlZiB0ZXN0X2lnbm9yZV9saXN0ZW5lcihzZWxmKToKQEAgLTM1NzIsMjYgKzM1NzUsMjY3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjb25uLmNsb3NlKCkKIAotIwotIwotIworY2xhc3MgVGVzdFN0YXJ0TWV0aG9kKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NoZWNrX2NvbnRleHQoY2xzLCBjb25uKToKKyAgICAgICAgY29ubi5zZW5kKG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkpCiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgIGRlZiBjaGVja19jb250ZXh0KHNlbGYsIGN0eCk6CisgICAgICAgIHIsIHcgPSBjdHguUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fY2hlY2tfY29udGV4dCwgYXJncz0odywpKQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIGNoaWxkX21ldGhvZCA9IHIucmVjdigpCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkX21ldGhvZCwgY3R4LmdldF9zdGFydF9tZXRob2QoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdHggPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2NvbnRleHQobWV0aG9kKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjdHguZ2V0X2NvbnRleHQoKSwgY3R4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9zdGFydF9tZXRob2QsICdzcGF3bicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHguc2V0X3N0YXJ0X21ldGhvZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29udGV4dChjdHgpCisKKyAgICBkZWYgdGVzdF9zZXRfZ2V0KHNlbGYpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChQUkVMT0FEKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgb2xkX21ldGhvZCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGlzc3VlIDMxMTEhIikKLSAgICBjaGVja19lbm91Z2hfc2VtYXBob3JlcygpCi0gICAgdXRpbC5nZXRfdGVtcF9kaXIoKSAgICAgIyBjcmVhdGVzIHRlbXAgZGlyZWN0b3J5IGZvciB1c2UgYnkgYWxsIHByb2Nlc3NlcwotICAgIG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoTE9HX0xFVkVMKQorICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlcicpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2QobWV0aG9kLCBmb3JjZT1UcnVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgICAgIGN0eCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X3N0YXJ0X21ldGhvZCgpLCBtZXRob2QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoY3R4KS5fX25hbWVfXy5sb3dlcigpLnN0YXJ0c3dpdGgobWV0aG9kKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgIGN0eC5Qcm9jZXNzLl9fbmFtZV9fLmxvd2VyKCkuc3RhcnRzd2l0aChtZXRob2QpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY29udGV4dChtdWx0aXByb2Nlc3NpbmcpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qob2xkX21ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoY291bnQsIDEpCisKKyAgICBkZWYgdGVzdF9nZXRfYWxsKHNlbGYpOgorICAgICAgICBtZXRob2RzID0gbXVsdGlwcm9jZXNzaW5nLmdldF9hbGxfc3RhcnRfbWV0aG9kcygpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2RzLCBbJ3NwYXduJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kcyA9PSBbJ2ZvcmsnLCAnc3Bhd24nXSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgPT0gWydmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInXSkKKworIworIyBDaGVjayB0aGF0IGtpbGxpbmcgcHJvY2VzcyBkb2VzIG5vdCBsZWFrIG5hbWVkIHNlbWFwaG9yZXMKKyMKKworQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgInRlc3Qgc2VtYW50aWNzIGRvbid0IG1ha2Ugc2Vuc2Ugb24gV2luZG93cyIpCitjbGFzcyBUZXN0U2VtYXBob3JlVHJhY2tlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2VtYXBob3JlX3RyYWNrZXIoc2VsZik6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGNtZCA9ICcnJ2lmIDE6CisgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wLCB0aW1lLCBvcworICAgICAgICAgICAgbXAuc2V0X3N0YXJ0X21ldGhvZCgic3Bhd24iKQorICAgICAgICAgICAgbG9jazEgPSBtcC5Mb2NrKCkKKyAgICAgICAgICAgIGxvY2syID0gbXAuTG9jaygpCisgICAgICAgICAgICBvcy53cml0ZSglZCwgbG9jazEuX3NlbWxvY2submFtZS5lbmNvZGUoImFzY2lpIikgKyBiIlxcbiIpCisgICAgICAgICAgICBvcy53cml0ZSglZCwgbG9jazIuX3NlbWxvY2submFtZS5lbmNvZGUoImFzY2lpIikgKyBiIlxcbiIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAnJycKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsIGNtZCAlICh3LCB3KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPVt3XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgd2l0aCBvcGVuKHIsICdyYicsIGNsb3NlZmQ9VHJ1ZSkgYXMgZjoKKyAgICAgICAgICAgIG5hbWUxID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgbmFtZTIgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lMSkKKyAgICAgICAgcC50ZXJtaW5hdGUoKQorICAgICAgICBwLndhaXQoKQorICAgICAgICB0aW1lLnNsZWVwKDIuMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjdHg6CisgICAgICAgICAgICBfbXVsdGlwcm9jZXNzaW5nLnNlbV91bmxpbmsobmFtZTIpCisgICAgICAgICMgZG9jcyBzYXkgaXQgc2hvdWxkIGJlIEVOT0VOVCwgYnV0IE9TWCBzZWVtcyB0byBnaXZlIEVJTlZBTAorICAgICAgICBzZWxmLmFzc2VydEluKGN0eC5leGNlcHRpb24uZXJybm8sIChlcnJuby5FTk9FTlQsIGVycm5vLkVJTlZBTCkpCisgICAgICAgIGVyciA9IHAuc3RkZXJyLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgICAgICBleHBlY3RlZCA9ICdzZW1hcGhvcmVfdHJhY2tlcjogVGhlcmUgYXBwZWFyIHRvIGJlIDIgbGVha2VkIHNlbWFwaG9yZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsICdzZW1hcGhvcmVfdHJhY2tlcjogJXI6IFxbRXJybm8nICUgbmFtZTEpCisKKyMKKyMgTWl4aW5zCisjCisKK2NsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICdwcm9jZXNzZXMnCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCisgICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCisgICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4pCisgICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKKyAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5QaXBlKQorICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5RdWV1ZSkKKyAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlKQorICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkxvY2spCisgICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJMb2NrKQorICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKQorICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmUpCisgICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24pCisgICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkV2ZW50KQorICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIpCisgICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlZhbHVlKQorICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5BcnJheSkKKyAgICBSYXdWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3VmFsdWUpCisgICAgUmF3QXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd0FycmF5KQogCiAKLWRlZiB0ZWFyRG93bk1vZHVsZSgpOgotICAgICMgcGF1c2UgYSBiaXQgc28gd2UgZG9uJ3QgZ2V0IHdhcm5pbmcgYWJvdXQgZGFuZ2xpbmcgdGhyZWFkcy9wcm9jZXNzZXMKLSAgICB0aW1lLnNsZWVwKDAuNSkKK2NsYXNzIE1hbmFnZXJNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAnbWFuYWdlcicKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKKyAgICBRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUXVldWUnKSkKKyAgICBKb2luYWJsZVF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Kb2luYWJsZVF1ZXVlJykpCisgICAgTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTG9jaycpKQorICAgIFJMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5STG9jaycpKQorICAgIFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuU2VtYXBob3JlJykpCisgICAgQm91bmRlZFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQm91bmRlZFNlbWFwaG9yZScpKQorICAgIENvbmRpdGlvbiA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQ29uZGl0aW9uJykpCisgICAgRXZlbnQgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkV2ZW50JykpCisgICAgQmFycmllciA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQmFycmllcicpKQorICAgIFZhbHVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5WYWx1ZScpKQorICAgIEFycmF5ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5BcnJheScpKQorICAgIGxpc3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmxpc3QnKSkKKyAgICBkaWN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5kaWN0JykpCisgICAgTmFtZXNwYWNlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5OYW1lc3BhY2UnKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBQb29sKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBjbHMubWFuYWdlci5Qb29sKCphcmdzLCAqKmt3ZHMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICMgb25seSB0aGUgbWFuYWdlciBwcm9jZXNzIHNob3VsZCBiZSByZXR1cm5lZCBieSBhY3RpdmVfY2hpbGRyZW4oKQorICAgICAgICAjIGJ1dCB0aGlzIGNhbiB0YWtlIGEgYml0IG9uIHNsb3cgbWFjaGluZXMsIHNvIHdhaXQgYSBmZXcgc2Vjb25kcworICAgICAgICAjIGlmIHRoZXJlIGFyZSBvdGhlciBjaGlsZHJlbiB0b28gKHNlZSAjMTczOTUpCisgICAgICAgIHQgPSAwLjAxCisgICAgICAgIHdoaWxlIGxlbihtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkpID4gMSBhbmQgdCA8IDU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKHQpCisgICAgICAgICAgICB0ICo9IDIKKyAgICAgICAgZ2MuY29sbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAjIGRvIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgICBpZiBjbHMubWFuYWdlci5fbnVtYmVyX29mX29iamVjdHMoKSAhPSAwOgorICAgICAgICAgICAgIyBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3Igc2luY2Ugc29tZSB0ZXN0cyBkbyBub3QKKyAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgYWxsIHByb2Nlc3NlcyB3aGljaCBob2xkIGEgcmVmZXJlbmNlIHRvIGEKKyAgICAgICAgICAgICMgbWFuYWdlZCBvYmplY3QgaGF2ZSBiZWVuIGpvaW5lZC4KKyAgICAgICAgICAgIHByaW50KCdTaGFyZWQgb2JqZWN0cyB3aGljaCBzdGlsbCBleGlzdCBhdCBtYW5hZ2VyIHNodXRkb3duOicpCisgICAgICAgICAgICBwcmludChjbHMubWFuYWdlci5fZGVidWdfaW5mbygpKQorICAgICAgICBjbHMubWFuYWdlci5zaHV0ZG93bigpCisgICAgICAgIGNscy5tYW5hZ2VyLmpvaW4oKQorICAgICAgICBjbHMubWFuYWdlciA9IE5vbmUKIAogCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQorY2xhc3MgVGhyZWFkc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICd0aHJlYWRzJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUHJvY2VzcworICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY29ubmVjdGlvbgorICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY3VycmVudF9wcm9jZXNzKQorICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuYWN0aXZlX2NoaWxkcmVuKQorICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCisgICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUGlwZSkKKyAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUXVldWUpCisgICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuSm9pbmFibGVRdWV1ZSkKKyAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Mb2NrKQorICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5STG9jaykKKyAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlNlbWFwaG9yZSkKKyAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Cb3VuZGVkU2VtYXBob3JlKQorICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQ29uZGl0aW9uKQorICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5FdmVudCkKKyAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5CYXJyaWVyKQorICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5WYWx1ZSkKKyAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQXJyYXkpCisKKyMKKyMgRnVuY3Rpb25zIHVzZWQgdG8gY3JlYXRlIHRlc3QgY2FzZXMgZnJvbSB0aGUgYmFzZSBvbmVzIGluIHRoaXMgbW9kdWxlCisjCisKK2RlZiBpbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KHJlbW90ZV9nbG9icywgc3RhcnRfbWV0aG9kKToKKyAgICBfX21vZHVsZV9fID0gcmVtb3RlX2dsb2JzWydfX25hbWVfXyddCisgICAgbG9jYWxfZ2xvYnMgPSBnbG9iYWxzKCkKKyAgICBBTExfVFlQRVMgPSB7J3Byb2Nlc3NlcycsICd0aHJlYWRzJywgJ21hbmFnZXInfQorCisgICAgZm9yIG5hbWUsIGJhc2UgaW4gbG9jYWxfZ2xvYnMuaXRlbXMoKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYmFzZSwgdHlwZSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEJhc2VUZXN0Q2FzZSk6CisgICAgICAgICAgICBpZiBiYXNlIGlzIEJhc2VUZXN0Q2FzZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYXNzZXJ0IHNldChiYXNlLkFMTE9XRURfVFlQRVMpIDw9IEFMTF9UWVBFUywgYmFzZS5BTExPV0VEX1RZUEVTCisgICAgICAgICAgICBmb3IgdHlwZV8gaW4gYmFzZS5BTExPV0VEX1RZUEVTOgorICAgICAgICAgICAgICAgIG5ld25hbWUgPSAnV2l0aCcgKyB0eXBlXy5jYXBpdGFsaXplKCkgKyBuYW1lWzE6XQorICAgICAgICAgICAgICAgIE1peGluID0gbG9jYWxfZ2xvYnNbdHlwZV8uY2FwaXRhbGl6ZSgpICsgJ01peGluJ10KKyAgICAgICAgICAgICAgICBjbGFzcyBUZW1wKGJhc2UsIE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuZXduYW1lCisgICAgICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gX19tb2R1bGVfXworICAgICAgICAgICAgICAgIHJlbW90ZV9nbG9ic1tuZXduYW1lXSA9IFRlbXAKKyAgICAgICAgZWxpZiBpc3N1YmNsYXNzKGJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgb2JqZWN0KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuYW1lCisgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBfX21vZHVsZV9fCisgICAgICAgICAgICByZW1vdGVfZ2xvYnNbbmFtZV0gPSBUZW1wCisKKyAgICBkYW5nbGluZyA9IFtOb25lLCBOb25lXQorICAgIG9sZF9zdGFydF9tZXRob2QgPSBbTm9uZV0KKworICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChQUkVMT0FEKQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIGRhbmdsaW5nWzBdID0gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nLmNvcHkoKQorICAgICAgICBkYW5nbGluZ1sxXSA9IHRocmVhZGluZy5fZGFuZ2xpbmcuY29weSgpCisgICAgICAgIG9sZF9zdGFydF9tZXRob2RbMF0gPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZChhbGxvd19ub25lPVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKHN0YXJ0X21ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdGFydF9tZXRob2QgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBzdGFydCBtZXRob2Qgbm90IHN1cHBvcnRlZCcpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiT1NFcnJvciByYWlzZXMgb24gUkxvY2sgY3JlYXRpb24sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGlzc3VlIDMxMTEhIikKKyAgICAgICAgY2hlY2tfZW5vdWdoX3NlbWFwaG9yZXMoKQorICAgICAgICB1dGlsLmdldF90ZW1wX2RpcigpICAgICAjIGNyZWF0ZXMgdGVtcCBkaXJlY3RvcnkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKS5zZXRMZXZlbChMT0dfTEVWRUwpCisKKyAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qob2xkX3N0YXJ0X21ldGhvZFswXSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgIyBwYXVzZSBhIGJpdCBzbyB3ZSBkb24ndCBnZXQgd2FybmluZyBhYm91dCBkYW5nbGluZyB0aHJlYWRzL3Byb2Nlc3NlcworICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgdG1wID0gc2V0KG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZykgLSBzZXQoZGFuZ2xpbmdbMF0pCisgICAgICAgIGlmIHRtcDoKKyAgICAgICAgICAgIHByaW50KCdEYW5nbGluZyBwcm9jZXNzZXM6JywgdG1wLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGRlbCB0bXAKKyAgICAgICAgdG1wID0gc2V0KHRocmVhZGluZy5fZGFuZ2xpbmcpIC0gc2V0KGRhbmdsaW5nWzFdKQorICAgICAgICBpZiB0bXA6CisgICAgICAgICAgICBwcmludCgnRGFuZ2xpbmcgdGhyZWFkczonLCB0bXAsIGZpbGU9c3lzLnN0ZGVycikKKworICAgIHJlbW90ZV9nbG9ic1snc2V0VXBNb2R1bGUnXSA9IHNldFVwTW9kdWxlCisgICAgcmVtb3RlX2dsb2JzWyd0ZWFyRG93bk1vZHVsZSddID0gdGVhckRvd25Nb2R1bGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2F1ZGlvZGF0YS9wbHVjay1wY20yNC5hdSBiL0xpYi90ZXN0L2F1ZGlvZGF0YS9wbHVjay1wY20yNC5hdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmIyMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYXVkaW9kYXRhL3BsdWNrLXBjbTI0LmF1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkgYi9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CmluZGV4IDZmZjViYjguLmI3NDk3Y2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvYXVkaW90ZXN0cy5weQpAQCAtMTIsMjQgKzEyLDYgQEAKICAgICBkZWYgc2VlayhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgogCi1kZWYgYnl0ZXN3YXAyKGRhdGEpOgotICAgIGEgPSBhcnJheS5hcnJheSgnaCcpCi0gICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICBhLmJ5dGVzd2FwKCkKLSAgICByZXR1cm4gYS50b2J5dGVzKCkKLQotZGVmIGJ5dGVzd2FwMyhkYXRhKToKLSAgICBiYSA9IGJ5dGVhcnJheShkYXRhKQotICAgIGJhWzo6M10gPSBkYXRhWzI6OjNdCi0gICAgYmFbMjo6M10gPSBkYXRhWzo6M10KLSAgICByZXR1cm4gYnl0ZXMoYmEpCi0KLWRlZiBieXRlc3dhcDQoZGF0YSk6Ci0gICAgYSA9IGFycmF5LmFycmF5KCdpJykKLSAgICBhLmZyb21ieXRlcyhkYXRhKQotICAgIGEuYnl0ZXN3YXAoKQotICAgIHJldHVybiBhLnRvYnl0ZXMoKQotCiAKIGNsYXNzIEF1ZGlvVGVzdHM6CiAgICAgY2xvc2VfZmQgPSBGYWxzZQpAQCAtNTYsNiArMzgsMTIgQEAKICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcywKICAgICAgICAgICAgICAgICAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsIGNvbXBuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBuY2hhbm5lbHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2FtcHdpZHRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIGZyYW1lcmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmZyYW1lcywgbmZyYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuY29tcHR5cGUsIGNvbXB0eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wbmFtZSwgY29tcG5hbWUpCiAKICAgICAgICAgZHVtcCA9IHBpY2tsZS5kdW1wcyhwYXJhbXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLmxvYWRzKGR1bXApLCBwYXJhbXMpCkBAIC03MiwxNSArNjAsMTIgQEAKICAgICAgICAgcmV0dXJuIGYKIAogICAgIGRlZiBjaGVja19maWxlKHNlbGYsIHRlc3RmaWxlLCBuZnJhbWVzLCBmcmFtZXMpOgotICAgICAgICBmID0gc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYubmNoYW5uZWxzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHNhbXB3aWR0aCgpLCBzZWxmLnNhbXB3aWR0aCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5mcmFtZXJhdGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmZyYW1lcygpLCBuZnJhbWVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMobmZyYW1lcyksIGZyYW1lcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfcGFyYW1zKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCkBAIC05MCw2ICs3NSw1MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5mcmFtZXMsIHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCiAgICAgICAgIGYuY2xvc2UoKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfY29udGV4dF9tYW5hZ2VyX2NhbGxzX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIENsb3NlIGNoZWNrcyBmb3IgYSBtaW5pbXVtIGhlYWRlciBhbmQgd2lsbCByYWlzZSBhbiBlcnJvcgorICAgICAgICAjIGlmIGl0IGlzIG5vdCBzZXQsIHNvIHRoaXMgcHJvdmVzIHRoYXQgY2xvc2UgaXMgY2FsbGVkLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYubW9kdWxlLkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4sICd3YicpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLm1vZHVsZS5FcnJvcik6CisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfd2l0aF9vcGVuX2ZpbGUoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2V0bmNoYW5uZWxzKHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgICAgIGYuc2V0c2FtcHdpZHRoKHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgICAgIGYuc2V0ZnJhbWVyYXRlKHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgICAgIGYuc2V0Y29tcHR5cGUoc2VsZi5jb21wdHlwZSwgc2VsZi5jb21wbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUuY2xvc2VkLCBzZWxmLmNsb3NlX2ZkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZ2V0ZnAoKS5jbG9zZWQpCisgICAgICAgICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VfZmQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5nZXRmcCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5jbG9zZWQsIHNlbGYuY2xvc2VfZmQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfd2l0aF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgIyBJZiB0aGUgZmlsZSBkb2Vzbid0IGdldCBjbG9zZWQsIHRoaXMgdGVzdCB3b24ndCBmYWlsLCBidXQgaXQgd2lsbAorICAgICAgICAjIHByb2R1Y2UgYSByZXNvdXJjZSBsZWFrIHdhcm5pbmcuCisgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLnNldG5jaGFubmVscyhzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgIGYuc2V0c2FtcHdpZHRoKHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgZi5zZXRmcmFtZXJhdGUoc2VsZi5mcmFtZXJhdGUpCisgICAgICAgICAgICBmLnNldGNvbXB0eXBlKHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCisgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4pIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZ2V0ZnAoKS5jbG9zZWQpCisgICAgICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgc2VsZi5mcmFtZXJhdGUpCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlX2ZkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5nZXRmcCgpKQorCiAgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKQEAgLTk4LDYgKzEzMCwzMCBAQAogCiAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhieXRlYXJyYXkoc2VsZi5mcmFtZXMpKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYXJyYXkoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhhcnJheS5hcnJheSgnaCcsIHNlbGYuZnJhbWVzKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKworICAgIGRlZiB0ZXN0X3dyaXRlX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhtZW1vcnl2aWV3KHNlbGYuZnJhbWVzKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKwogICAgIGRlZiB0ZXN0X2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKICAgICAgICAgICAgIHRlc3RmaWxlLndyaXRlKGInYWJhYmFnYWxhbWFnYScpCkBAIC0xMzcsMjAgKzE5MywxOCBAQAogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKHRlc3RmaWxlLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQogCiAgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV9yZWFkKHNlbGYpOgotICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCi0gICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCi0gICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCiAKICAgICAgICAgd2l0aCBVbnNlZWthYmxlSU8oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZSh0ZXN0ZmlsZSwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKIAogICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfd3JpdGUoc2VsZik6CiAgICAgICAgIHdpdGggVW5zZWVrYWJsZUlPKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6Ci0gICAgICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZSh0ZXN0ZmlsZSkKLSAgICAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCi0gICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX2ZpbGUodGVzdGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQogCiAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCiAKQEAgLTI2NywxMiArMzIxLDkgQEAKIAogICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUucmVhZCgxMyksIGInYWJhYmFnYWxhbWFnYScpCi0gICAgICAgICAgICBmID0gc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYubmNoYW5uZWxzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRzYW1wd2lkdGgoKSwgc2VsZi5zYW1wd2lkdGgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmZyYW1lcmF0ZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmZyYW1lcygpLCBzZWxmLnNuZGZpbGVuZnJhbWVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKHNlbGYubmZyYW1lcyksIHNlbGYuZnJhbWVzKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weSBiL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTVhYjY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTEwLnB5CkBAIC0wLDAgKzEsMyBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKyJzcGFtLCBiYXIsIGJsYWgiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkgYi9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKaW5kZXggY2Y1NGMyOC4uMGE2Mjk0MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQpAQCAtMTYwLDE0ICsxNjAsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiICBkZWZcbmcgICBoaScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLAotICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgICMgY2hlY2sga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyh0YWJzaXplPTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgZGVmXG5nICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKHRhYnNpemU9NCkpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgYVxuIGInLCBzZWxmLm1hcnNoYWwoYicgXHRhXG5cdGInKS5leHBhbmR0YWJzKDEpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5leHBhbmR0YWJzLCA0MiwgNDIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkgYi9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiNDIwOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weQpAQCAtMCwwICsxLDQxIEBACisiIiJieXRlY29kZV9oZWxwZXIgLSBzdXBwb3J0IHRvb2xzIGZvciB0ZXN0aW5nIGNvcnJlY3QgYnl0ZWNvZGUgZ2VuZXJhdGlvbiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBkaXMKK2ltcG9ydCBpbworCitfVU5TUEVDSUZJRUQgPSBvYmplY3QoKQorCitjbGFzcyBCeXRlY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJDdXN0b20gYXNzZXJ0aW9uIG1ldGhvZHMgZm9yIGluc3BlY3RpbmcgYnl0ZWNvZGUuIiIiCisKKyAgICBkZWYgZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyhzZWxmLCBjbyk6CisgICAgICAgIHMgPSBpby5TdHJpbmdJTygpCisgICAgICAgIGRpcy5kaXMoY28sIGZpbGU9cykKKyAgICAgICAgcmV0dXJuIHMuZ2V0dmFsdWUoKQorCisgICAgZGVmIGFzc2VydEluQnl0ZWNvZGUoc2VsZiwgeCwgb3BuYW1lLCBhcmd2YWw9X1VOU1BFQ0lGSUVEKToKKyAgICAgICAgIiIiUmV0dXJucyBpbnN0ciBpZiBvcCBpcyBmb3VuZCwgb3RoZXJ3aXNlIHRocm93cyBBc3NlcnRpb25FcnJvciIiIgorICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoeCk6CisgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gb3BuYW1lOgorICAgICAgICAgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQgb3IgaW5zdHIuYXJndmFsID09IGFyZ3ZhbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RyCisgICAgICAgIGRpc2Fzc2VtYmx5ID0gc2VsZi5nZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKHgpCisgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICBtc2cgPSAnJXMgbm90IGZvdW5kIGluIGJ5dGVjb2RlOlxuJXMnICUgKG9wbmFtZSwgZGlzYXNzZW1ibHkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAnKCVzLCVyKSBub3QgZm91bmQgaW4gYnl0ZWNvZGU6XG4lcycKKyAgICAgICAgICAgIG1zZyA9IG1zZyAlIChvcG5hbWUsIGFyZ3ZhbCwgZGlzYXNzZW1ibHkpCisgICAgICAgIHNlbGYuZmFpbChtc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90SW5CeXRlY29kZShzZWxmLCB4LCBvcG5hbWUsIGFyZ3ZhbD1fVU5TUEVDSUZJRUQpOgorICAgICAgICAiIiJUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgaWYgb3AgaXMgZm91bmQiIiIKKyAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHgpOgorICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09IG9wbmFtZToKKyAgICAgICAgICAgICAgICBkaXNhc3NlbWJseSA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyhjbykKKyAgICAgICAgICAgICAgICBpZiBvcGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICclcyBvY2N1cnMgaW4gYnl0ZWNvZGU6XG4lcycgJSAob3BuYW1lLCBkaXNhc3NlbWJseSkKKyAgICAgICAgICAgICAgICBlbGlmIGluc3RyLmFyZ3ZhbCA9PSBhcmd2YWw6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICcoJXMsJXIpIG9jY3VycyBpbiBieXRlY29kZTpcbiVzJworICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cgJSAob3BuYW1lLCBhcmd2YWwsIGRpc2Fzc2VtYmx5KQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jb2RpbmcyMDczMS5weSBiL0xpYi90ZXN0L2NvZGluZzIwNzMxLnB5CmluZGV4IGNhNDk2MmUuLmIwZTIyN2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2NvZGluZzIwNzMxLnB5CisrKyBiL0xpYi90ZXN0L2NvZGluZzIwNzMxLnB5CkBAIC0xLDQgKzEsNCBAQAotI2NvZGluZzpsYXRpbjEKLQotCi0KKyNjb2Rpbmc6bGF0aW4xDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQppbmRleCBhYjU1NDc2Li5jZjQ5NmI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQpAQCAtNSw2ICs1LDcgQEAKIAogaW1wb3J0IHN5cwogaW1wb3J0IHBpY2tsZQoraW1wb3J0IHJhbmRvbQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gb3BlcmF0b3IgaW1wb3J0IGx0LCBsZSwgZ3QsIGdlLCBlcSwgbmUsIHRydWVkaXYsIGZsb29yZGl2LCBtb2QKQEAgLTc2LDggKzc3LDE4IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldD1Ob25lLCBuYW1lPU5vbmUsIGRzdG9mZnNldD1Ob25lKToKICAgICAgICAgRml4ZWRPZmZzZXQuX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lLCBkc3RvZmZzZXQpCiAKK2NsYXNzIF9UWkluZm8odHppbmZvKToKKyAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGRhdGV0aW1lX21vZHVsZSk6CisgICAgICAgIHJldHVybiByYW5kb20ucmFuZG9tKCkKKwogY2xhc3MgVGVzdFRaSW5mbyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdF9yZWZjbnRfY3Jhc2hfYnVnXzIyMDQ0KHNlbGYpOgorICAgICAgICB0ejEgPSBfVFpJbmZvKCkKKyAgICAgICAgZHQxID0gZGF0ZXRpbWUoMjAxNCwgNywgMjEsIDExLCAzMiwgMywgMCwgdHoxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkdDEudXRjb2Zmc2V0KCkKKwogICAgIGRlZiB0ZXN0X25vbl9hYnN0cmFjdG5lc3Moc2VsZik6CiAgICAgICAgICMgSW4gb3JkZXIgdG8gYWxsb3cgc3ViY2xhc3NlcyB0byBnZXQgcGlja2xlZCwgdGhlIEMgaW1wbGVtZW50YXRpb24KICAgICAgICAgIyB3YXNuJ3QgYWJsZSB0byBnZXQgYXdheSB3aXRoIGhhdmluZyBfX2luaXRfXyByYWlzZQpAQCAtNjE5LDYgKzYzMCwxMCBAQAogICAgICAgICBlcSh0ZChob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZCgwKSkKICAgICAgICAgZXEodGQoZGF5cz0tLjQvdXNfcGVyX2RheSwgaG91cnM9LS4yL3VzX3Blcl9ob3VyKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKIAorICAgICAgICAjIFRlc3QgZm9yIGEgcGF0Y2ggaW4gSXNzdWUgODg2MAorICAgICAgICBlcSh0ZChtaWNyb3NlY29uZHM9MC41KSwgMC41KnRkKG1pY3Jvc2Vjb25kcz0xLjApKQorICAgICAgICBlcSh0ZChtaWNyb3NlY29uZHM9MC41KS8vdGQucmVzb2x1dGlvbiwgMC41KnRkLnJlc29sdXRpb24vL3RkLnJlc29sdXRpb24pCisKICAgICBkZWYgdGVzdF9tYXNzaXZlX25vcm1hbGl6YXRpb24oc2VsZik6CiAgICAgICAgIHRkID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0tMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodGQuZGF5cywgdGQuc2Vjb25kcywgdGQubWljcm9zZWNvbmRzKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ZpbmFsX2EucHkgYi9MaWIvdGVzdC9maW5hbF9hLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MGVlODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9maW5hbF9hLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIgorRm9kZGVyIGZvciBtb2R1bGUgZmluYWxpemF0aW9uIHRlc3RzIGluIHRlc3RfbW9kdWxlLgorIiIiCisKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZXN0LmZpbmFsX2IKKworeCA9ICdhJworCitjbGFzcyBDOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAjIEluc3BlY3QgbW9kdWxlIGdsb2JhbHMgYW5kIGJ1aWx0aW5zCisgICAgICAgIHByaW50KCJ4ID0iLCB4KQorICAgICAgICBwcmludCgiZmluYWxfYi54ID0iLCB0ZXN0LmZpbmFsX2IueCkKKyAgICAgICAgcHJpbnQoInNodXRpbC5ybXRyZWUgPSIsIGdldGF0dHIoc2h1dGlsLnJtdHJlZSwgJ19fbmFtZV9fJywgTm9uZSkpCisgICAgICAgIHByaW50KCJsZW4gPSIsIGdldGF0dHIobGVuLCAnX19uYW1lX18nLCBOb25lKSkKKworYyA9IEMoKQorX3VuZGVyc2NvcmVkID0gQygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9maW5hbF9iLnB5IGIvTGliL3Rlc3QvZmluYWxfYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjI4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZmluYWxfYi5weQpAQCAtMCwwICsxLDE5IEBACisiIiIKK0ZvZGRlciBmb3IgbW9kdWxlIGZpbmFsaXphdGlvbiB0ZXN0cyBpbiB0ZXN0X21vZHVsZS4KKyIiIgorCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVzdC5maW5hbF9hCisKK3ggPSAnYicKKworY2xhc3MgQzoKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIyBJbnNwZWN0IG1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucworICAgICAgICBwcmludCgieCA9IiwgeCkKKyAgICAgICAgcHJpbnQoImZpbmFsX2EueCA9IiwgdGVzdC5maW5hbF9hLngpCisgICAgICAgIHByaW50KCJzaHV0aWwucm10cmVlID0iLCBnZXRhdHRyKHNodXRpbC5ybXRyZWUsICdfX25hbWVfXycsIE5vbmUpKQorICAgICAgICBwcmludCgibGVuID0iLCBnZXRhdHRyKGxlbiwgJ19fbmFtZV9fJywgTm9uZSkpCisKK2MgPSBDKCkKK191bmRlcnNjb3JlZCA9IEMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZm9ya193YWl0LnB5IGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CmluZGV4IDg4NTI3ZGYuLjE5YjU0ZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQorKysgYi9MaWIvdGVzdC9mb3JrX3dhaXQucHkKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYWxpdmVbaWRdID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKFNIT1JUU0xFRVApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9rZXljZXJ0My5wZW0gYi9MaWIvdGVzdC9rZXljZXJ0My5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmYTYyYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2tleWNlcnQzLnBlbQpAQCAtMCwwICsxLDczIEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQkFNTGdEMGtBS0RiNWNGeVAKK2pid05mUjVDdGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk0KKzl6MmoxT2xhTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVoKK2FnZ0Vka2oxVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFQ2dZQTBhSCtUMlZmM1dPUHY4S2RrY0pnNmdDUmUKK3lKS1hPV2dXUmNpY3gvQ1V6T0VzVHhtRklEUEx4cUFXQTNrN3YwQiszdmpHdzVZOWx5Y1YvNVhxWE5vUUkxNGoKK3kwOWlOc3VtZHMxM3U1QUtrR2RUSm5aaFE3VUtkb1ZIZnVQNDRaZE92L3JKNS9WRDZGNHpXeXdwZTkwcGNiSysKK0FXRFZ0dXNnR1FCU2llRWwxUUpCQU95VnJVRzVsMnlvVUJ0ZDJ6ci9raUdtL0RZeVhsSXRoUU8vQTMvTG5nRFcKKzUveWRHeFZzVDdsQVZPZ0Nzb1QrMEw0ZWZUaDkwUGp6VzhMUFFyUEJXVk1DUVFEUzNoL0Z0WVlkNWxmeitGTkwKKzlDRWUxRjF3OWw4UDc0OXVOVUQwZzMxN3p2MXRhdElxVkNzUVdIZlZITmRWdmZRK3ZTRnczOE9PUk8wMFhxczkKKzFHSnJBa0Jrb1hYRWt4Q1pveTRQdGVoZU8vOElXV0xHR3I2TDdkaTZNekZsMWxJcXdUNkQ4TDlvYVYydnluRlQKK0RuS29wMHBhMDlVbmhqeXc1N0tNTm1TRTJTVUpBa0VBcmxvVEV6cGdSbUNxNElLMi9OcENlR2RIUzV1cVJsYmgKKzFWSWEveEdwczdFV1FsNU1uOHN3UURlbC9ZUDNXR0hUamZ4N3BnU2VnUWZreWFSdEdwWjlPUUpBYTlWdW1qOG0KK0pBQXRJMEJuZ2E4aGdReDdCaFRRWTRDYWREeHlpUkdPR1lod1V6WVZDcWtiMnNiVlJIOUhud1VhSlQ3Y1dCWTMKK1JuSmRIT01YV2VtNy93PT0KKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDEgKDB4MCkKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODEgKDB4YjA5MjY0YjFmMmRhMjFkMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IE5vdiAxMyAxOTo0NzowNyAyMDIyIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBMPUNhc3RsZSBBbnRocmF4LCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBDTj1sb2NhbGhvc3QKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpjMjplMDowZjo0OTowMDoyODozNjpmOTo3MDo1Yzo4Zjo4ZDpiYzowZDoKKyAgICAgICAgICAgICAgICAgICAgN2Q6MWU6NDI6YjU6ZWM6MWQ6NWM6MmY6YTQ6MzE6NzA6MTY6MGY6YzA6Y2I6CisgICAgICAgICAgICAgICAgICAgIGM2OjI0OmQzOmJlOjEzOjE2OmVlOmE1OjY3Ojk3OjAzOmE2OmRmOmE5Ojk5OgorICAgICAgICAgICAgICAgICAgICA5NjpjYzpjNzoyYTpmYjoxMTo3Zjo0ZTo2NTo0Zjo4YTo1ZTo4MjoyMTo0YzoKKyAgICAgICAgICAgICAgICAgICAgZjc6M2Q6YTM6ZDQ6ZTk6NWE6Mzc6ZTc6MjI6ZmQ6N2U6Y2Q6NTM6NmQ6OTM6CisgICAgICAgICAgICAgICAgICAgIDM0OmRlOjljOmFkOjg0OmEyOjM3OmJlOmM1OjhkOjgyOjRmOmUzOmFlOjIzOgorICAgICAgICAgICAgICAgICAgICBmMzpiZTphNzo3NToyYzo3MjowZjplYTpmMzpjYTpjZDpmYzplOTozZjpiNToKKyAgICAgICAgICAgICAgICAgICAgYWY6NTY6OTk6NmE6MDg6MDQ6NzY6NDg6ZjU6NGU6YzQ6YWM6YmY6NWM6ZDY6CisgICAgICAgICAgICAgICAgICAgIDIxOjgyOmE1OjNjOjg4OmU1OmJlOjFiOmIxCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgMmY6NDI6NWY6YTM6MDk6MmM6ZmE6NTE6ODg6Yzc6Mzc6N2Y6ZWE6MGU6NjM6ZjA6YTI6OWE6CisgICAgICAgICBlNTo1YTplMjpjODoyMDpmMDozZjo2MDpiYzpjODowZjpiNjpjNjo3NjpjZTpkYjo4Mzo5MzoKKyAgICAgICAgIGY1OmEzOjMzOjY3OjAxOjhlOjA0OmNkOjAwOjlhOjczOmZkOmYzOjM1Ojg2OmZhOmQ3OjEzOgorICAgICAgICAgZTI6NDY6YzY6OWQ6YzA6Mjk6NTM6ZDQ6YTk6OTA6Yjg6Nzc6NGI6ZTY6ODM6NzY6ZTQ6OTI6CisgICAgICAgICBkNjo5Yzo1MDpjZjo0MzpkMDpjNjowMTo3Nzo2MTo5YTpkZTo5Yjo3MDpmNzo3MjpjZDo1OToKKyAgICAgICAgIDAwOjMxOjY5OmQ5OmI0OmNhOjA2OjljOjZkOmMzOmM3OjgwOjhjOjY4OmU2OmI1OmEyOmY4OgorICAgICAgICAgZWY6MWQ6YmI6MTY6OWY6Nzc6Nzc6ZWY6ODc6NjI6MjI6OWI6NGQ6Njk6YTQ6M2E6MWE6ZjE6CisgICAgICAgICAyMTo1ZTo4YzozMjphYzo5MjpmZDoxNTo2YjoxODpjMjo3ZjoxNTowZDo5ODozMDpjYTo3NToKKyAgICAgICAgIDhmOjFhOjcxOmRmOmRhOjFkOmIyOmVmOjlhOmU4OjJkOjJlOjAyOmZkOjRhOjNjOmFhOjk2OgorICAgICAgICAgMGI6MDY6NWQ6MzU6YjM6M2Q6MjQ6ODc6NGI6ZTA6YjA6NTg6NjA6MmY6NDU6YWM6MmU6NDg6CisgICAgICAgICA4YTpiMDo5OToxMDo2NToyNzpmZjpjYzpiMTpkODpmZDpiZDoyNjo2YjpiOTowYzowNToyYToKKyAgICAgICAgIGY0OjQ1OjYzOjM1OjUxOjA3OmVkOjgzOjg1OmZlOjZmOjY5OmNiOmJiOjQwOmE4OmFlOmI2OgorICAgICAgICAgM2I6NTY6NGE6MmQ6YTQ6ZWQ6NmQ6MTE6MmM6NGQ6ZWQ6MTc6MjQ6ZmQ6NDc6YmM6ZDM6NDE6CisgICAgICAgICBhMjpkMzowNjpmZTowYzo5MDpkODpkODo5NDoyNjpjNDpmZjpjYzphMTpkODo0Mjo3NzplYjoKKyAgICAgICAgIGZjOmE5Ojk0OjcxCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwRENDQVl3Q0NRQ3drbVN4OHRvaDBUQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SlkKK1dURW1NQ1FHQTFVRUNnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlYKK0JBTU1EVzkxY2kxallTMXpaWEoyWlhJd0hoY05NVE13TVRBME1UazBOekEzV2hjTk1qSXhNVEV6TVRrME56QTMKK1dqQmZNUXN3Q1FZRFZRUUdFd0pZV1RFWE1CVUdBMVVFQnhNT1EyRnpkR3hsSUVGdWRHaHlZWGd4SXpBaEJnTlYKK0JBb1RHbEI1ZEdodmJpQlRiMlowZDJGeVpTQkdiM1Z1WkdGMGFXOXVNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKK2MzUXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTUxnRDBrQUtEYjVjRnlQamJ3TmZSNUMKK3Rld2RYQytrTVhBV0Q4REx4aVRUdmhNVzdxVm5sd09tMzZtWmxzekhLdnNSZjA1bFQ0cGVnaUZNOXoyajFPbGEKK04rY2kvWDdOVTIyVE5ONmNyWVNpTjc3RmpZSlA0NjRqODc2bmRTeHlEK3J6eXMzODZUKzFyMWFaYWdnRWRrajEKK1RzU3N2MXpXSVlLbFBJamx2aHV4QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBQzlDWDZNSkxQcFIKK2lNYzNmK29PWS9DaW11VmE0c2dnOEQ5Z3ZNZ1B0c1oyenR1RGsvV2pNMmNCamdUTkFKcHovZk0xaHZyWEUrSkcKK3hwM0FLVlBVcVpDNGQwdm1nM2Jra3RhY1VNOUQwTVlCZDJHYTNwdHc5M0xOV1FBeGFkbTB5Z2FjYmNQSGdJeG8KKzVyV2krTzhkdXhhZmQzZnZoMklpbTAxcHBEb2E4U0ZlakRLc2t2MFZheGpDZnhVTm1EREtkWThhY2QvYUhiTHYKK211Z3RMZ0w5U2p5cWxnc0dYVFd6UFNTSFMrQ3dXR0F2UmF3dVNJcXdtUkJsSi8vTXNkajl2U1pydVF3Rkt2UkYKK1l6VlJCKzJEaGY1dmFjdTdRS2l1dGp0V1NpMms3VzBSTEUzdEZ5VDlSN3pUUWFMVEJ2NE1rTmpZbENiRS84eWgKKzJFSjM2L3lwbEhFPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qva2V5Y2VydDQucGVtIGIvTGliL3Rlc3Qva2V5Y2VydDQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzU1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9rZXljZXJ0NC5wZW0KQEAgLTAsMCArMSw3MyBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBSzVVUWlNSTVWa05zMlF2CitMN2dVYWlEZEZldk5VWFJqVTRESEFlM1p6ellMWk5FNjloOWdPOVZDU1MxNnRKNWZUNVZFdTBFWnlHcjBlM1YyCitOa1gwWm9VMEhjL1VhWTRxeDdMSG1uNVNZWnBJeGhKbmtmN1N5SEpLMXpVYUdsVTAvTHhZcUl1R0N0RjVkcXgxCitMMk9RaEV4MUdNNlJ5ZEhkZ1g2OUc2NExYY1k1QWdNQkFBRUNnWUFoc1JNZkprYjlFUkxNbC9vRy81c0xRdTlMCitwV0RLdDYrWndkeHpsWmJnZ1E4NUNNWXNoakxLSW9kMkRMTC9zTGYyeDFQUlh5UkcxMzFNMUUzazh6a2t6NmRlCitSMXVEcklOL3g5MWl1WXpmTFFaR2g4Yk1ZN1lqZDJlb3JvYTZSLzdEanBFbEdlakx4T0FhRFdPMFNUMklGUXk5CitteVRHUzJqU005N3djWGZzU1FKQkFOUDNqZWxKb1M1WDZCUmpUU25lWTIxd2NvY3hWdVFoOHBYcEVyQUxWTnNUCitkcnJGVGVhQnVacDdLdmJ0bklNNWcyV1JOdmF4TFpsQVkvaFhQSnZpNm5jQ1FRRFNpeDFjZWJtbDZFbVBsRVpTCitNbThnd0kyRjl1ZlV1bndKbUJKY3o4MjZEbzBaTkdCeVdEQU0vSlFaSDRGWDRHZkFGTnVqOFBVYitHUWZhZGt4CitpMURQQWtFQTBsVnNOSG9qdnVEc0lvOEhHdXphck5aUVQyYmVXakoxamR4aDl0N0hyVHg3TElwczZyYi9maE9LCitaczBSNmdWQUphRWJjV0FQWjJ0RnlFQ0luQWRuc1FKQVVqYWVYWGp1eEZrak9GeW01UHZxcHZocGl2RXg3OEJ1CitKUFRyM3JBS1htZkdNeHhmdU9hMHhLMXdTeXNoUDZaUi9SQm4vK2xjWFBLdWJoSFFET2Vnd3dKQUpGMURCUW5OCisrL3RMbU9QVUx0RHdmUDRaaXhuKy84R21HT2FoRm9SY3U2VklHSG1SaWxKVG42TU9CdXR3N0dsdjJZZGVDNmwvCitlODNHcTZmZkxWZktOUT09CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAxICgweDApCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgyICgweGIwOTI2NGIxZjJkYTIxZDIpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTD1DYXN0bGUgQW50aHJheCwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgQ049ZmFrZWhvc3RuYW1lCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YWU6NTQ6NDI6MjM6MDg6ZTU6NTk6MGQ6YjM6NjQ6MmY6MmY6Yjg6MTQ6CisgICAgICAgICAgICAgICAgICAgIDZhOjIwOmRkOjE1OmViOmNkOjUxOjc0OjYzOjUzOjgwOmM3OjAxOmVkOmQ5OgorICAgICAgICAgICAgICAgICAgICBjZjozNjowYjo2NDpkMTozYTpmNjoxZjo2MDozYjpkNTo0Mjo0OToyZDo3YToKKyAgICAgICAgICAgICAgICAgICAgYjQ6OWU6NWY6NGY6OTU6NDQ6YmI6NDE6MTk6Yzg6NmE6ZjQ6N2I6NzU6NzY6CisgICAgICAgICAgICAgICAgICAgIDM2OjQ1OmY0OjY2Ojg1OjM0OjFkOmNmOmQ0OjY5OjhlOjJhOmM3OmIyOmM3OgorICAgICAgICAgICAgICAgICAgICA5YTo3ZTo1Mjo2MTo5YTo0ODpjNjoxMjo2Nzo5MTpmZTpkMjpjODo3Mjo0YToKKyAgICAgICAgICAgICAgICAgICAgZDc6MzU6MWE6MWE6NTU6MzQ6ZmM6YmM6NTg6YTg6OGI6ODY6MGE6ZDE6Nzk6CisgICAgICAgICAgICAgICAgICAgIDc2OmFjOjc1OjJmOjYzOjkwOjg0OjRjOjc1OjE4OmNlOjkxOmM5OmQxOmRkOgorICAgICAgICAgICAgICAgICAgICA4MTo3ZTpiZDoxYjphZTowYjo1ZDpjNjozOQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIGFkOjQ1OjhhOjhlOmVmOmM2OmVmOjA0OjQxOjVjOjJjOjRhOjg0OmRjOjAyOjc2OjBjOmQwOgorICAgICAgICAgNjY6MGY6ZjA6MTY6MDQ6NTg6NGQ6ZmQ6Njg6Yjc6Yjg6ZDM6YTg6NDE6YTU6NWM6M2M6NmY6CisgICAgICAgICA2NTozYzpkMTpmODpjZTo0MzozNTplNzo0MTo1Zjo1MzozZDpjOToyYzpjMzo3ZDpmYzo1NjoKKyAgICAgICAgIDRhOmZhOjQ3Ojc3OjM4OjlkOmJiOjk3OjI4OjBhOjNiOjkxOjE5OjdmOmJjOjc0OmFlOjE1OgorICAgICAgICAgNmI6YmQ6MjA6MzY6Njc6NDU6YTU6MWU6Nzk6ZDc6NzU6ZTY6ODk6NWM6NmQ6NTQ6ODQ6ZDE6CisgICAgICAgICA5NTpkNzphNzpiNDozMzozYzphZjozNzpjNDo3OTo4Zjo1ZTo3NTpkYzo3NTpjMjoxODpmYjoKKyAgICAgICAgIDYxOjZmOjJkOmRjOjM4OjY1OjViOmJhOjY3OjI4OmQwOjg4OmQ3OjhkOmI5OjIzOjVhOjhlOgorICAgICAgICAgZTg6YzY6YmI6ZGI6Y2U6ZDU6Yjg6NDE6MmE6Y2U6OTM6MDg6YjY6OTU6YWQ6MzQ6MjA6MTg6CisgICAgICAgICBkNTozYjozNzo1Mjo3NDo1MDowYjowNzoyYzpiMDo2ZDphNDo0Yzo3YjpmNDplMDpmZDpkMToKKyAgICAgICAgIGFmOjE3OmFhOjIwOmNkOjYyOmUzOmYwOjlkOjM3OjY5OmRiOjQxOmJkOmQ0OjFjOmZiOjUzOgorICAgICAgICAgMjA6ZGE6ODg6OWQ6NzY6MjY6Njc6Y2U6MDE6OTA6YTc6ODA6MWQ6YTk6NWI6Mzk6NzM6Njg6CisgICAgICAgICA1NDowYTpkMToyYTowMzoxYjo4ZjozYzo0Mzo1ZDo1ZDpjNDo1MTpmMTphNzplNzoxMTpkYToKKyAgICAgICAgIDMxOjJjOjQ5OjA2OmFmOjA0OmY0OmI4OjNjOjk5OmM0OjIwOmI5OjA2OjM2OmEyOjAwOjkyOgorICAgICAgICAgNjE6MWQ6MGM6NmQ6MjQ6MDU6ZTI6ODI6ZTE6NDc6ZGI6YTA6NWY6YmE6Yjk6ZmI6YmE6ZmE6CisgICAgICAgICA0OToxMjoxZTpjZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDcHpDQ0FZOENDUUN3a21TeDh0b2gwakFOQmdrcWhraUc5dzBCQVFVRkFEQk5NUXN3Q1FZRFZRUUdFd0pZCitXVEVtTUNRR0ExVUVDZ3dkVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjRnUTBFeEZqQVVCZ05WCitCQU1NRFc5MWNpMWpZUzF6WlhKMlpYSXdIaGNOTVRNd01UQTBNVGswTnpBM1doY05Nakl4TVRFek1UazBOekEzCitXakJpTVFzd0NRWURWUVFHRXdKWVdURVhNQlVHQTFVRUJ4TU9RMkZ6ZEd4bElFRnVkR2h5WVhneEl6QWhCZ05WCitCQW9UR2xCNWRHaHZiaUJUYjJaMGQyRnlaU0JHYjNWdVpHRjBhVzl1TVJVd0V3WURWUVFERXd4bVlXdGxhRzl6CitkRzVoYldVd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFLNVVRaU1JNVZrTnMyUXZMN2dVCithaURkRmV2TlVYUmpVNERIQWUzWnp6WUxaTkU2OWg5Z085VkNTUzE2dEo1ZlQ1VkV1MEVaeUdyMGUzVjJOa1gwCitab1UwSGMvVWFZNHF4N0xIbW41U1lacEl4aEpua2Y3U3lISksxelVhR2xVMC9MeFlxSXVHQ3RGNWRxeDFMMk9RCitoRXgxR002UnlkSGRnWDY5RzY0TFhjWTVBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFLMUZpbzd2Cit4dThFUVZ3c1NvVGNBbllNMEdZUDhCWUVXRTM5YUxlNDA2aEJwVnc4YjJVODBmak9RelhuUVY5VFBja3N3MzM4CitWa3I2UjNjNG5idVhLQW83a1JsL3ZIU3VGV3U5SURablJhVWVlZGQxNW9sY2JWU0UwWlhYcDdRelBLODN4SG1QCitYblhjZGNJWSsyRnZMZHc0WlZ1Nlp5alFpTmVOdVNOYWp1akd1OXZPMWJoQktzNlRDTGFWclRRZ0dOVTdOMUowCitVQXNITExCdHBFeDc5T0Q5MGE4WHFpRE5ZdVB3blRkcDIwRzkxQno3VXlEYWlKMTJKbWZPQVpDbmdCMnBXemx6CithRlFLMFNvREc0ODhRMTFkeEZIeHArY1IyakVzU1FhdkJQUzRQSm5FSUxrR05xSUFrbUVkREcwa0JlS0M0VWZiCitvRis2dWZ1Nitra1NIczQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weSBiL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDA4MWMxLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotaW1wb3J0IHN5cwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcigiVGhpcyB0ZXN0IG9ubHkgbGVha3Mgb24gTWFjIE9TIFgiKQotCi1kZWYgbGVhaygpOgotICAgICMgdGFrZW4gZnJvbSBwbGF0Zm9ybS5fbWFjX3Zlcl9sb29rdXAoKQotICAgIGZyb20gZ2VzdGFsdCBpbXBvcnQgZ2VzdGFsdAotICAgIGltcG9ydCBNYWNPUwotCi0gICAgdHJ5OgotICAgICAgICBnZXN0YWx0KCdzeXN1JykKLSAgICBleGNlcHQgTWFjT1MuRXJyb3I6Ci0gICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CmluZGV4IGJmYmY0NGUuLjFjYmNlYTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQpAQCAtODAsNiArODAsMTEgQEAKICAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQogICAgICAgICBkZWwgbG9jawogCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICByZXByKGxvY2spCisgICAgICAgIGRlbCBsb2NrCisKICAgICBkZWYgdGVzdF9hY3F1aXJlX2Rlc3Ryb3koc2VsZik6CiAgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKICAgICAgICAgbG9jay5hY3F1aXJlKCkKQEAgLTQxMyw2ICs0MTgsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb25kLm5vdGlmeSkKIAogICAgIGRlZiBfY2hlY2tfbm90aWZ5KHNlbGYsIGNvbmQpOgorICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIHRlc3QgaXMgc2Vuc2l0aXZlIHRvIHRpbWluZy4gIElmIHRoZSB3b3JrZXIgdGhyZWFkcworICAgICAgICAjIGRvbid0IGV4ZWN1dGUgaW4gYSB0aW1lbHkgZmFzaGlvbiwgdGhlIG1haW4gdGhyZWFkIG1heSB0aGluayB0aGV5CisgICAgICAgICMgYXJlIGZ1cnRoZXIgYWxvbmcgdGhlbiB0aGV5IGFyZS4gIFRoZSBtYWluIHRocmVhZCB0aGVyZWZvcmUgaXNzdWVzCisgICAgICAgICMgX3dhaXQoKSBzdGF0ZW1lbnRzIHRvIHRyeSB0byBtYWtlIHN1cmUgdGhhdCBpdCBkb2Vzbid0IHJhY2UgYWhlYWQKKyAgICAgICAgIyBvZiB0aGUgd29ya2Vycy4KKyAgICAgICAgIyBTZWNvbmRseSwgdGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBjb25kaXRpb24gdmFyaWFibGVzIGFyZSBub3Qgc3ViamVjdAorICAgICAgICAjIHRvIHNwdXJpb3VzIHdha2V1cHMuICBUaGUgYWJzZW5jZSBvZiBzcHVyaW91cyB3YWtldXBzIGlzIGFuIGltcGxlbWVudGF0aW9uCisgICAgICAgICMgZGV0YWlsIG9mIENvbmRpdGlvbiBDYXJpYWJsZXMgaW4gY3VycmVudCBDUHl0aG9uLCBidXQgaW4gZ2VuZXJhbCwgbm90CisgICAgICAgICMgYSBndWFyYW50ZWVkIHByb3BlcnR5IG9mIGNvbmRpdGlvbiB2YXJpYWJsZXMgYXMgYSBwcm9ncmFtbWluZworICAgICAgICAjIGNvbnN0cnVjdC4gIEluIHBhcnRpY3VsYXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBjYW4gbm8gbG9uZ2VyCisgICAgICAgICMgYmUgY29udmVuaWVudGx5IGd1YXJhbnRlZWQgc2hvdWxkIHRoZWlyIGltcGxlbWVudGF0aW9uIGV2ZXIgY2hhbmdlLgogICAgICAgICBOID0gNQogICAgICAgICByZXN1bHRzMSA9IFtdCiAgICAgICAgIHJlc3VsdHMyID0gW10KQEAgLTQ0MCw2ICs0NTYsOSBAQAogICAgICAgICAgICAgX3dhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbKFRydWUsIDEpXSAqIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFtdKQorICAgICAgICAjIGZpcnN0IHdhaXQsIHRvIGVuc3VyZSBhbGwgd29ya2VycyBzZXR0bGUgaW50byBjb25kLndhaXQoKSBiZWZvcmUKKyAgICAgICAgIyB3ZSBjb250aW51ZS4gU2VlIGlzc3VlICM4Nzk5CisgICAgICAgIF93YWl0KCkKICAgICAgICAgIyBOb3RpZnkgNSB0aHJlYWRzOiB0aGV5IG1pZ2h0IGJlIGluIHRoZWlyIGZpcnN0IG9yIHNlY29uZCB3YWl0CiAgICAgICAgIGNvbmQuYWNxdWlyZSgpCiAgICAgICAgIGNvbmQubm90aWZ5KDUpCkBAIC00NTAsNiArNDY5LDcgQEAKICAgICAgICAgICAgIF93YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWyhUcnVlLCAxKV0gKiAzICsgWyhUcnVlLCAyKV0gKiAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbKFRydWUsIDIpXSAqIDMpCisgICAgICAgIF93YWl0KCkgIyBtYWtlIHN1cmUgYWxsIHdvcmtlcnMgc2V0dGxlIGludG8gY29uZC53YWl0KCkKICAgICAgICAgIyBOb3RpZnkgYWxsIHRocmVhZHM6IHRoZXkgYXJlIGFsbCBpbiB0aGVpciBzZWNvbmQgd2FpdAogICAgICAgICBjb25kLmFjcXVpcmUoKQogICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQppbmRleCA0OGQyZTU3Li44MWQwNGY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQorKysgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQpAQCAtMiw2ICsyLDcgQEAKIGFuZCBmcmllbmRzLiIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCkBAIC0yMCwxMSArMjEsNTQgQEAKIAogICAgIFtyZXFfeDUwOV9leHRlbnNpb25zXQogICAgIHN1YmplY3RBbHROYW1lICAgICAgICAgPSBETlM6e2hvc3RuYW1lfQorCisgICAgWyBjYSBdCisgICAgZGVmYXVsdF9jYSAgICAgID0gQ0FfZGVmYXVsdAorCisgICAgWyBDQV9kZWZhdWx0IF0KKyAgICBkaXIgPSBjYWRpcgorICAgIGRhdGFiYXNlICA9ICRkaXIvaW5kZXgudHh0CisgICAgY3JsbnVtYmVyID0gJGRpci9jcmwudHh0CisgICAgZGVmYXVsdF9tZCA9IHNoYTEKKyAgICBkZWZhdWx0X2RheXMgPSAzNjAwCisgICAgZGVmYXVsdF9jcmxfZGF5cyA9IDM2MDAKKyAgICBjZXJ0aWZpY2F0ZSA9IHB5Y2FjZXJ0LnBlbQorICAgIHByaXZhdGVfa2V5ID0gcHljYWtleS5wZW0KKyAgICBzZXJpYWwgICAgPSAkZGlyL3NlcmlhbAorICAgIFJBTkRGSUxFICA9ICRkaXIvLnJhbmQKKworICAgIHBvbGljeSAgICAgICAgICA9IHBvbGljeV9tYXRjaAorCisgICAgWyBwb2xpY3lfbWF0Y2ggXQorICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgID0gbWF0Y2gKKyAgICBzdGF0ZU9yUHJvdmluY2VOYW1lICAgICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgPSBtYXRjaAorICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgID0gb3B0aW9uYWwKKyAgICBjb21tb25OYW1lICAgICAgICAgICAgICA9IHN1cHBsaWVkCisgICAgZW1haWxBZGRyZXNzICAgICAgICAgICAgPSBvcHRpb25hbAorCisgICAgWyBwb2xpY3lfYW55dGhpbmcgXQorICAgIGNvdW50cnlOYW1lICAgPSBvcHRpb25hbAorICAgIHN0YXRlT3JQcm92aW5jZU5hbWUgPSBvcHRpb25hbAorICAgIGxvY2FsaXR5TmFtZSAgICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uTmFtZSAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgID0gb3B0aW9uYWwKKyAgICBjb21tb25OYW1lICAgID0gc3VwcGxpZWQKKyAgICBlbWFpbEFkZHJlc3MgICAgPSBvcHRpb25hbAorCisKKyAgICBbIHYzX2NhIF0KKworICAgIHN1YmplY3RLZXlJZGVudGlmaWVyPWhhc2gKKyAgICBhdXRob3JpdHlLZXlJZGVudGlmaWVyPWtleWlkOmFsd2F5cyxpc3N1ZXIKKyAgICBiYXNpY0NvbnN0cmFpbnRzID0gQ0E6dHJ1ZQorCiAgICAgIiIiCiAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIAotZGVmIG1ha2VfY2VydF9rZXkoaG9zdG5hbWUpOgorZGVmIG1ha2VfY2VydF9rZXkoaG9zdG5hbWUsIHNpZ249RmFsc2UpOgorICAgIHByaW50KCJjcmVhdGluZyBjZXJ0IGZvciAiICsgaG9zdG5hbWUpCiAgICAgdGVtcG5hbWVzID0gW10KICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgpAQCAtMzMsMTAgKzc3LDI1IEBACiAgICAgdHJ5OgogICAgICAgICB3aXRoIG9wZW4ocmVxX2ZpbGUsICd3JykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUocmVxX3RlbXBsYXRlLmZvcm1hdChob3N0bmFtZT1ob3N0bmFtZSkpCi0gICAgICAgIGFyZ3MgPSBbJ3JlcScsICctbmV3JywgJy1kYXlzJywgJzM2NTAnLCAnLW5vZGVzJywgJy14NTA5JywKKyAgICAgICAgYXJncyA9IFsncmVxJywgJy1uZXcnLCAnLWRheXMnLCAnMzY1MCcsICctbm9kZXMnLAogICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToxMDI0JywgJy1rZXlvdXQnLCBrZXlfZmlsZSwKLSAgICAgICAgICAgICAgICAnLW91dCcsIGNlcnRfZmlsZSwgJy1jb25maWcnLCByZXFfZmlsZV0KKyAgICAgICAgICAgICAgICAnLWNvbmZpZycsIHJlcV9maWxlXQorICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIHRlbXBuYW1lcy5hcHBlbmQoZi5uYW1lKQorICAgICAgICAgICAgICAgIHJlcWZpbGUgPSBmLm5hbWUKKyAgICAgICAgICAgIGFyZ3MgKz0gWyctb3V0JywgcmVxZmlsZSBdCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWycteDUwOScsICctb3V0JywgY2VydF9maWxlIF0KICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisKKyAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgIGFyZ3MgPSBbJ2NhJywgJy1jb25maWcnLCByZXFfZmlsZSwgJy1vdXQnLCBjZXJ0X2ZpbGUsICctb3V0ZGlyJywgJ2NhZGlyJywKKyAgICAgICAgICAgICAgICAgICAgJy1wb2xpY3knLCAncG9saWN5X2FueXRoaW5nJywgJy1iYXRjaCcsICctaW5maWxlcycsIHJlcWZpbGUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisKKwogICAgICAgICB3aXRoIG9wZW4oY2VydF9maWxlLCAncicpIGFzIGY6CiAgICAgICAgICAgICBjZXJ0ID0gZi5yZWFkKCkKICAgICAgICAgd2l0aCBvcGVuKGtleV9maWxlLCAncicpIGFzIGY6CkBAIC00Niw2ICsxMDUsMzYgQEAKICAgICAgICAgZm9yIG5hbWUgaW4gdGVtcG5hbWVzOgogICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCiAKK1RNUF9DQURJUiA9ICdjYWRpcicKKworZGVmIHVubWFrZV9jYSgpOgorICAgIHNodXRpbC5ybXRyZWUoVE1QX0NBRElSKQorCitkZWYgbWFrZV9jYSgpOgorICAgIG9zLm1rZGlyKFRNUF9DQURJUikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdjYWRpcicsJ2luZGV4LnR4dCcpLCdhKycpIGFzIGY6CisgICAgICAgIHBhc3MgIyBlbXB0eSBmaWxlCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignY2FkaXInLCdjcmwudHh0JyksJ2ErJykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgiMDAiKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2NhZGlyJywnaW5kZXgudHh0LmF0dHInKSwndysnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCd1bmlxdWVfc3ViamVjdCA9IG5vJykKKworICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCJ3IikgYXMgdDoKKyAgICAgICAgdC53cml0ZShyZXFfdGVtcGxhdGUuZm9ybWF0KGhvc3RuYW1lPSdvdXItY2Etc2VydmVyJykpCisgICAgICAgIHQuZmx1c2goKQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CisgICAgICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1leHRlbnNpb25zJywgJ3YzX2NhJywgJy1ub2RlcycsCisgICAgICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToyMDQ4JywgJy1rZXlvdXQnLCAncHljYWtleS5wZW0nLAorICAgICAgICAgICAgICAgICAgICAnLW91dCcsIGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJy1zdWJqJywgJy9DPVhZL0w9Q2FzdGxlIEFudGhyYXgvTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQS9DTj1vdXItY2Etc2VydmVyJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorICAgICAgICAgICAgYXJncyA9IFsnY2EnLCAnLWNvbmZpZycsIHQubmFtZSwgJy1jcmVhdGVfc2VyaWFsJywKKyAgICAgICAgICAgICAgICAgICAgJy1vdXQnLCAncHljYWNlcnQucGVtJywgJy1iYXRjaCcsICctb3V0ZGlyJywgVE1QX0NBRElSLAorICAgICAgICAgICAgICAgICAgICAnLWtleWZpbGUnLCAncHljYWtleS5wZW0nLCAnLWRheXMnLCAnMzY1MCcsCisgICAgICAgICAgICAgICAgICAgICctc2VsZnNpZ24nLCAnLWV4dGVuc2lvbnMnLCAndjNfY2EnLCAnLWluZmlsZXMnLCBmLm5hbWUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisgICAgICAgICAgICBhcmdzID0gWydjYScsICctY29uZmlnJywgdC5uYW1lLCAnLWdlbmNybCcsICctb3V0JywgJ3Jldm9jYXRpb24uY3JsJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG9zLmNoZGlyKGhlcmUpCkBAIC01NCwxMSArMTQzLDM0IEBACiAgICAgICAgIGYud3JpdGUoY2VydCkKICAgICB3aXRoIG9wZW4oJ3NzbF9rZXkucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKKyAgICBwcmludCgicGFzc3dvcmQgcHJvdGVjdGluZyBzc2xfa2V5LnBlbSBpbiBzc2xfa2V5LnBhc3N3ZC5wZW0iKQorICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJywncnNhJywnLWluJywnc3NsX2tleS5wZW0nLCctb3V0Jywnc3NsX2tleS5wYXNzd2QucGVtJywnLWRlczMnLCctcGFzc291dCcsJ3Bhc3M6c29tZXBhc3MnXSkKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3JzYScsJy1pbicsJ3NzbF9rZXkucGVtJywnLW91dCcsJ2tleWNlcnQucGFzc3dkLnBlbScsJy1kZXMzJywnLXBhc3NvdXQnLCdwYXNzOnNvbWVwYXNzJ10pCisKICAgICB3aXRoIG9wZW4oJ2tleWNlcnQucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKICAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0LnBhc3N3ZC5wZW0nLCAnYSsnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGNlcnQpCisKICAgICAjIEZvciBjZXJ0aWZpY2F0ZSBtYXRjaGluZyB0ZXN0cworICAgIG1ha2VfY2EoKQogICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2Zha2Vob3N0bmFtZScpCiAgICAgd2l0aCBvcGVuKCdrZXljZXJ0Mi5wZW0nLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoa2V5KQogICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdsb2NhbGhvc3QnLCBUcnVlKQorICAgIHdpdGggb3Blbigna2V5Y2VydDMucGVtJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGtleSkKKyAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgY2VydCwga2V5ID0gbWFrZV9jZXJ0X2tleSgnZmFrZWhvc3RuYW1lJywgVHJ1ZSkKKyAgICB3aXRoIG9wZW4oJ2tleWNlcnQ0LnBlbScsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShrZXkpCisgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIHVubWFrZV9jYSgpCisgICAgcHJpbnQoIlxuXG5QbGVhc2UgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gdGVzdF9zc2wucHksIHRlc3RfcGFyc2VfY2VydCBmdW5jdGlvbiByZWxhdGVkIHRvIG5vdEFmdGVyLG5vdEJlZm9yZSBhbmQgc2VyaWFsTnVtYmVyIikKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3g1MDknLCctaW4nLCdrZXljZXJ0LnBlbScsJy1kYXRlcycsJy1zZXJpYWwnLCctbm9vdXQnXSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5IGIvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKaW5kZXggODYxYmZiMi4uZTM2NzI0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKKysrIGIvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKQEAgLTE0NSwxMiArMTQ1LDggQEAKICAgICByZXR1cm4gIiIKIAogCi1jbGFzcyBnYWllcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotCi1jbGFzcyBlcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKK2dhaWVycm9yID0gc29ja2V0X21vZHVsZS5nYWllcnJvcgorZXJyb3IgPSBzb2NrZXRfbW9kdWxlLmVycm9yCiAKIAogIyBDb25zdGFudHMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weSBiL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weQppbmRleCA5MDhhZmUzLi4wMTdlMDEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKKysrIGIvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5CkBAIC03LDYgKzcsMTEgQEAKICMgY29ycmVjdGx5IG9uIFdpbmRvd3MuICBIb3dldmVyLCB3ZSBzaG91bGQgZ2V0IGEgUnVudGltZUVycm9yIHJhdGhlcgogIyB0aGFuIHRoZSBXaW5kb3dzIGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIuCiAKK2lmIGxlbihzeXMuYXJndikgPiAxOgorICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKHN5cy5hcmd2WzFdKQorZWxzZToKKyAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQorCiBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWZvbykKIHAuc3RhcnQoKQogcC5qb2luKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkgYi9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CmluZGV4IDE0ZmVhM2UuLjUxZjViNTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQpAQCAtMjc3LDExICsyNzcsMTAgQEAKICAgICBzdXBtYXBzID0gW10KICAgICBjb2RlY3Rlc3RzID0gW10KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6Ci0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQorICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpLmNsb3NlKCkgIyB0ZXN0IGl0IHRvIHJlcG9ydCB0aGUgZXJyb3IgZWFybHkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiK3NlbGYubWFwZmlsZXVybCkKIAogICAgIGRlZiBvcGVuX21hcHBpbmdfZmlsZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weSBiL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQppbmRleCA0ZDU5YmRlLi5hMmJlYTYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKKysrIGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CkBAIC0xLDkgKzEsMTEgQEAKK2ltcG9ydCBjb3B5cmVnCiBpbXBvcnQgaW8KLWltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHBpY2tsZXRvb2xzCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgY29weXJlZworaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgogZnJvbSBodHRwLmNvb2tpZXMgaW1wb3J0IFNpbXBsZUNvb2tpZQogCkBAIC05Myw2ICs5NSw5IEBACiAgICAgZGVmIF9fZ2V0aW5pdGFyZ3NfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICgpCiAKK2NsYXNzIEgob2JqZWN0KToKKyAgICBwYXNzCisKIGltcG9ydCBfX21haW5fXwogX19tYWluX18uQyA9IEMKIEMuX19tb2R1bGVfXyA9ICJfX21haW5fXyIKQEAgLTEwMCw2ICsxMDUsOCBAQAogRC5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgogX19tYWluX18uRSA9IEUKIEUuX19tb2R1bGVfXyA9ICJfX21haW5fXyIKK19fbWFpbl9fLkggPSBICitILl9fbW9kdWxlX18gPSAiX19tYWluX18iCiAKIGNsYXNzIG15aW50KGludCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtNDkxLDMxICs0OTgsNTIgQEAKICAgICB4LmFwcGVuZCg1KQogICAgIHJldHVybiB4CiAKKwogY2xhc3MgQWJzdHJhY3RQaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBTdWJjbGFzcyBtdXN0IGRlZmluZSBzZWxmLmR1bXBzLCBzZWxmLmxvYWRzLgogCisgICAgb3B0aW1pemVkID0gRmFsc2UKKwogICAgIF90ZXN0ZGF0YSA9IGNyZWF0ZV9kYXRhKCkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgcGFzcwogCisgICAgZGVmIGFzc2VydF9pc19jb3B5KHNlbGYsIG9iaiwgb2JqY29weSwgbXNnPU5vbmUpOgorICAgICAgICAiIiJVdGlsaXR5IG1ldGhvZCB0byB2ZXJpZnkgaWYgdHdvIG9iamVjdHMgYXJlIGNvcGllcyBvZiBlYWNoIG90aGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgbXNnID0gInshcn0gaXMgbm90IGEgY29weSBvZiB7IXJ9Ii5mb3JtYXQob2JqLCBvYmpjb3B5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgb2JqY29weSwgbXNnPW1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKG9iaiksIHR5cGUob2JqY29weSksIG1zZz1tc2cpCisgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19kaWN0X18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob2JqLl9fZGljdF9fLCBvYmpjb3B5Ll9fZGljdF9fLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fc2xvdHNfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwob2JqLl9fc2xvdHNfXywgb2JqY29weS5fX3Nsb3RzX18sIG1zZz1tc2cpCisgICAgICAgICAgICBmb3Igc2xvdCBpbiBvYmouX19zbG90c19fOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob2JqLCBzbG90KSwgaGFzYXR0cihvYmpjb3B5LCBzbG90KSwgbXNnPW1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob2JqLCBzbG90LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIob2JqY29weSwgc2xvdCwgTm9uZSksIG1zZz1tc2cpCisKICAgICBkZWYgdGVzdF9taXNjKHNlbGYpOgogICAgICAgICAjIHRlc3QgdmFyaW91cyBkYXRhdHlwZXMgbm90IHRlc3RlZCBieSB0ZXN0ZGF0YQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgeCA9IG15aW50KDQpCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICAgICAgICAgIHggPSAoMSwgKCkpCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICAgICAgICAgIHggPSBpbml0YXJnKDEsIHgpCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICAgICAgIyBYWFggdGVzdCBfX3JlZHVjZV9fIHByb3RvY29sPwogCkBAIC01MjQsMTYgKzU1MiwxNiBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZXhwZWN0ZWQsIHByb3RvKQogICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShleHBlY3RlZCwgZ290KQogCiAgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2RhdGEwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMCkpCiAKICAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTEoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTEpKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEExKSkKIAogICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9kYXRhMihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMikpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTIpKQogCiAgICAgZGVmIHRlc3RfbG9hZF9jbGFzc2ljX2luc3RhbmNlKHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZTUxODAuICBUZXN0IGxvYWRpbmcgMi54IHBpY2tsZXMgdGhhdApAQCAtNTU1LDcgKzU4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGIiWFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiInAwXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKGRwMVxuYi4iKS5yZXBsYWNlKGInWCcsIHhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMCkpCiAKICAgICAgICAgICAgICMgUHJvdG9jb2wgMSAoYmluYXJ5IG1vZGUgcGlja2xlKQogICAgICAgICAgICAgIiIiCkBAIC01NzIsNyArNjAwLDcgQEAKICAgICAgICAgICAgIHBpY2tsZTEgPSAoYicoY19fbWFpbl9fXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInWFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FceDAwb3FceDAxfXFceDAyYi4nKS5yZXBsYWNlKGInWCcsIHhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMSkpCiAKICAgICAgICAgICAgICMgUHJvdG9jb2wgMiAocGlja2xlMiA9IGInXHg4MFx4MDInICsgcGlja2xlMSkKICAgICAgICAgICAgICIiIgpAQCAtNTkwLDcgKzYxOCw3IEBACiAgICAgICAgICAgICBwaWNrbGUyID0gKGInXHg4MFx4MDIoY19fbWFpbl9fXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInWFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FceDAwb3FceDAxfXFceDAyYi4nKS5yZXBsYWNlKGInWCcsIHhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMikpCiAKICAgICAjIFRoZXJlIGFyZSBncmF0dWl0b3VzIGRpZmZlcmVuY2VzIGJldHdlZW4gcGlja2xlcyBwcm9kdWNlZCBieQogICAgICMgcGlja2xlIGFuZCBjUGlja2xlLCBsYXJnZWx5IGJlY2F1c2UgY1BpY2tsZSBzdGFydHMgUFVUIGluZGljZXMgYXQKQEAgLTYxNSw2ICs2NDMsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMobCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxpc3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHhbMF0pCiAKQEAgLTYyNCw2ICs2NTMsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHModCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIHR1cGxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4WzBdKSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHhbMF1bMF0pCkBAIC02MzQsMTUgKzY2NCwzOSBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGRpY3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeC5rZXlzKCkpLCBbMV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeFsxXSBpcyB4KQogCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3NldChzZWxmKToKKyAgICAgICAgaCA9IEgoKQorICAgICAgICB5ID0gc2V0KHtofSkKKyAgICAgICAgaC5hdHRyID0geQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeSwgcHJvdG8pCisgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIHNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobGlzdCh4KVswXS5hdHRyLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZnJvemVuc2V0KHNlbGYpOgorICAgICAgICBoID0gSCgpCisgICAgICAgIHkgPSBmcm96ZW5zZXQoe2h9KQorICAgICAgICBoLmF0dHIgPSB5CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh5LCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgZnJvemVuc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsaXN0KHgpWzBdLmF0dHIsIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKKwogICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9pbnN0KHNlbGYpOgogICAgICAgICBpID0gQygpCiAgICAgICAgIGkuYXR0ciA9IGkKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGksIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBDKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoeCksIGRpcihpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeC5hdHRyLCB4KQogCkBAIC02NTUsNiArNzA5LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGwsIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsaXN0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcih4WzBdKSwgZGlyKGkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhbMF0uYXR0ci5rZXlzKCkpLCBbMV0pCkBAIC02NjIsMzEgKzcxNyw4IEBACiAKICAgICBkZWYgdGVzdF9nZXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLmxvYWRzLCBiJ2cwXG5wMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJygoS2R0cDBcbmhceDAwbC4pKScpLCBbKDEwMCwpLCAoMTAwLCldKQotCi0gICAgZGVmIHRlc3RfaW5zZWN1cmVfc3RyaW5ncyhzZWxmKToKLSAgICAgICAgIyBYWFggU29tZSBvZiB0aGVzZSB0ZXN0cyBhcmUgdGVtcG9yYXJpbHkgZGlzYWJsZWQKLSAgICAgICAgaW5zZWN1cmUgPSBbYiJhYmMiLCBiIjIgKyAyIiwgIyBub3QgcXVvdGVkCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ2FiYycgKyAnZGVmJyIsICMgbm90IGEgc2luZ2xlIHF1b3RlZCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgYiInYWJjIiwgIyBxdW90ZSBpcyBub3QgY2xvc2VkCi0gICAgICAgICAgICAgICAgICAgIGIiJ2FiY1wiIiwgIyBvcGVuIHF1b3RlIGFuZCBjbG9zZSBxdW90ZSBkb24ndCBtYXRjaAotICAgICAgICAgICAgICAgICAgICBiIidhYmMnICAgPyIsICMganVuayBhZnRlciBjbG9zZSBxdW90ZQotICAgICAgICAgICAgICAgICAgICBiIidcXCciLCAjIHRyYWlsaW5nIGJhY2tzbGFzaAotICAgICAgICAgICAgICAgICAgICAjIFZhcmlhdGlvbnMgb24gaXNzdWUgIzE3NzEwCi0gICAgICAgICAgICAgICAgICAgIGIiJyIsCi0gICAgICAgICAgICAgICAgICAgIGInIicsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICIsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAgICIsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAgICAiLAotICAgICAgICAgICAgICAgICAgICBiJyIgICAgJywKLSAgICAgICAgICAgICAgICAgICAgIyBzb21lIHRlc3RzIG9mIHRoZSBxdW90aW5nIHJ1bGVzCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ2FiY1wiXCcnIiwKLSAgICAgICAgICAgICAgICAgICAgIyMgYiInXFxcXGFcJ1wnXCdcXFwnXFxcXFwnJyIsCi0gICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgZm9yIGIgaW4gaW5zZWN1cmU6Ci0gICAgICAgICAgICBidWYgPSBiIlMiICsgYiArIGIiXDAxMnAwXDAxMi4iCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWygxMDAsKSwgKDEwMCwpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRzKGInKChLZHRwMFxuaFx4MDBsLikpJykpCiAKICAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgogICAgICAgICBlbmRjYXNlcyA9IFsnJywgJzxcXHU+JywgJzxcXFx1MTIzND4nLCAnPFxuPicsCkBAIC02OTcsMjYgKzcyOSwyNiBAQAogICAgICAgICAgICAgZm9yIHUgaW4gZW5kY2FzZXM6CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHModSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgdTIgPSBzZWxmLmxvYWRzKHApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MiwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHUsIHUyKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9oaWdoX3BsYW5lKHNlbGYpOgogICAgICAgICB0ID0gJ1xVMDAwMTIzNDUnCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgIHQyID0gc2VsZi5sb2FkcyhwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdDIpCiAKICAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIGZvciBzIGluIGInJywgYid4eXonLCBiJ3h5eicqMTAwOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHMsIHByb3RvKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHMsIHNlbGYubG9hZHMocCkpCiAgICAgICAgICAgICBmb3IgcyBpbiBbYnl0ZXMoW2ldKSBmb3IgaSBpbiByYW5nZSgyNTYpXToKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhzLCBwcm90bykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzLCBzZWxmLmxvYWRzKHApKQogICAgICAgICAgICAgZm9yIHMgaW4gW2J5dGVzKFtpLCBpXSkgZm9yIGkgaW4gcmFuZ2UoMjU2KV06CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMocywgcHJvdG8pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkocywgc2VsZi5sb2FkcyhwKSkKIAogICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CiAgICAgICAgIGltcG9ydCBzeXMKQEAgLTcyNiwxNCArNzU4LDE0IEBACiAgICAgICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgtbiwgbik6CiAgICAgICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGV4cGVjdGVkLCBwcm90bykKICAgICAgICAgICAgICAgICAgICAgbjIgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG4yKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KGV4cGVjdGVkLCBuMikKICAgICAgICAgICAgICAgICBuID0gbiA+PiAxCiAKICAgICBkZWYgdGVzdF9tYXhpbnQ2NChzZWxmKToKICAgICAgICAgbWF4aW50NjQgPSAoMSA8PCA2MykgLSAxCiAgICAgICAgIGRhdGEgPSBiJ0knICsgc3RyKG1heGludDY0KS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuLicKICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhkYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgbWF4aW50NjQpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkobWF4aW50NjQsIGdvdCkKIAogICAgICAgICAjIFRyeSB0b28gd2l0aCBhIGJvZ3VzIGxpdGVyYWwuCiAgICAgICAgIGRhdGEgPSBiJ0knICsgc3RyKG1heGludDY0KS5lbmNvZGUoImFzY2lpIikgKyBiJ0pVTktcbi4nCkBAIC03NDgsNyArNzgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gbnBvcywgLW5wb3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKG4sIHByb3RvKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGdvdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkobiwgZ290KQogICAgICAgICAjIFRyeSBhIG1vbnN0ZXIuICBUaGlzIGlzIHF1YWRyYXRpYy10aW1lIGluIHByb3RvcyAwICYgMSwgc28gZG9uJ3QKICAgICAgICAgIyBib3RoZXIgd2l0aCB0aG9zZS4KICAgICAgICAgbmJhc2UgPSBpbnQoImRlYWRiZWVmZmVlZGZhY2UiLCAxNikKQEAgLTc1Niw2ICs3ODgsMTAgQEAKICAgICAgICAgZm9yIG4gaW4gbmJhc2UsIC1uYmFzZToKICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKG4sIDIpCiAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHApCisgICAgICAgICAgICAjIGFzc2VydF9pc19jb3B5IGlzIHZlcnkgZXhwZW5zaXZlIGhlcmUgYXMgaXQgcHJlY29tcHV0ZXMKKyAgICAgICAgICAgICMgYSBmYWlsdXJlIG1lc3NhZ2UgYnkgY29tcHV0aW5nIHRoZSByZXByKCkgb2YgbiBhbmQgZ290LAorICAgICAgICAgICAgIyB3ZSBqdXN0IGRvIHRoZSBjaGVjayBvdXJzZWx2ZXMuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZ290KSwgaW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBnb3QpCiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKQEAgLTc2Niw3ICs4MDIsNyBAQAogICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRlc3RfdmFsdWVzOgogICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHModmFsdWUsIHByb3RvKQogICAgICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocGlja2xlKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGdvdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHZhbHVlLCBnb3QpCiAKICAgICBAcnVuX3dpdGhfbG9jYWxlKCdMQ19BTEwnLCAnZGVfREUnLCAnZnJfRlInKQogICAgIGRlZiB0ZXN0X2Zsb2F0X2Zvcm1hdChzZWxmKToKQEAgLTc3NCwxMCArODEwLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcygxLjIsIDApWzA6M10sIGInRjEuJykKIAogICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaW5zdCA9IEFBQSgpCisgICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKGluc3QsIHByb3RvKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZCwgUkVEVUNFX0EpCiAKICAgICBkZWYgdGVzdF9nZXRpbml0YXJncyhzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaW5zdCA9IGluaXRhcmcoMSwgMikKKyAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMoaW5zdCwgcHJvdG8pCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoaW5zdCwgbG9hZGVkKQogCiAgICAgZGVmIHRlc3RfcG9wX2VtcHR5X3N0YWNrKHNlbGYpOgogICAgICAgICAjIFRlc3QgaXNzdWU3NDU1CkBAIC03OTgsNiArODQyLDcgQEAKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGEsIHByb3RvKQogICAgICAgICAgICAgYiA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShhKSwgdHlwZShiKSkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdHNlcShzZWxmKToKICAgICAgICAgaW1wb3J0IHRpbWUKQEAgLTgwNywyOSArODUyLDI5IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdCIpOgogICAgICAgICAgICAgICAgIHQgPSBvcy5zdGF0KG9zLmN1cmRpcikKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdHZmcyIpOgogICAgICAgICAgICAgICAgIHQgPSBvcy5zdGF0dmZzKG9zLmN1cmRpcikKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAKICAgICBkZWYgdGVzdF9lbGxpcHNpcyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKC4uLiwgcHJvdG8pCiAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCguLi4sIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKC4uLiwgdSkKIAogICAgIGRlZiB0ZXN0X25vdGltcGxlbWVudGVkKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoTm90SW1wbGVtZW50ZWQsIHByb3RvKQogICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm90SW1wbGVtZW50ZWQsIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCB1KQogCiAgICAgZGVmIHRlc3Rfc2luZ2xldG9uX3R5cGVzKHNlbGYpOgogICAgICAgICAjIElzc3VlICM2NDc3OiBUZXN0IHRoYXQgdHlwZXMgb2YgYnVpbHQtaW4gc2luZ2xldG9ucyBjYW4gYmUgcGlja2xlZC4KQEAgLTg0MywyMSArODg4LDIxIEBACiAgICAgIyBUZXN0cyBmb3IgcHJvdG9jb2wgMgogCiAgICAgZGVmIHRlc3RfcHJvdG8oc2VsZik6Ci0gICAgICAgIGJ1aWxkX25vbmUgPSBwaWNrbGUuTk9ORSArIHBpY2tsZS5TVE9QCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBleHBlY3RlZCA9IGJ1aWxkX25vbmUKKyAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKE5vbmUsIHByb3RvKQogICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHBpY2tsZS5QUk9UTyArIGJ5dGVzKFtwcm90b10pICsgZXhwZWN0ZWQKLSAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKE5vbmUsIHByb3RvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBwcm90b19oZWFkZXIgPSBwaWNrbGUuUFJPVE8gKyBieXRlcyhbcHJvdG9dKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaWNrbGVkLnN0YXJ0c3dpdGgocHJvdG9faGVhZGVyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudF9vcGNvZGUocGlja2xlLlBST1RPLCBwaWNrbGVkKSwgMCkKIAogICAgICAgICBvb2IgPSBwcm90b2NvbHNbLTFdICsgMSAgICAgIyBhIGZ1dHVyZSBwcm90b2NvbAorICAgICAgICBidWlsZF9ub25lID0gcGlja2xlLk5PTkUgKyBwaWNrbGUuU1RPUAogICAgICAgICBiYWRwaWNrbGUgPSBwaWNrbGUuUFJPVE8gKyBieXRlcyhbb29iXSkgKyBidWlsZF9ub25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYubG9hZHMoYmFkcGlja2xlKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBkZXRhaWw6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGRldGFpbCkuc3RhcnRzd2l0aCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbCIpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ1bnN1cHBvcnRlZCBwaWNrbGUgcHJvdG9jb2wiLCBzdHIoZXJyKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgYmFkIHByb3RvY29sIG51bWJlciB0byByYWlzZSBWYWx1ZUVycm9yIikKIApAQCAtODY2LDcgKzkxMSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLkxPTkcxLCBzKSwgcHJvdG8gPj0gMikKIAogICAgIGRlZiB0ZXN0X2xvbmc0KHNlbGYpOgpAQCAtODc0LDcgKzkxOSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLkxPTkc0LCBzKSwgcHJvdG8gPj0gMikKIAogICAgIGRlZiB0ZXN0X3Nob3J0X3R1cGxlcyhzZWxmKToKQEAgLTkxMiw5ICs5NTcsOSBAQAogICAgICAgICAgICAgZm9yIHggaW4gYSwgYiwgYywgZCwgZToKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSwgKHByb3RvLCB4LCBzLCB5KSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVtwcm90bywgbGVuKHgpXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcyksIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW21pbihwcm90bywgMyksIGxlbih4KV0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcykpCiAKICAgICBkZWYgdGVzdF9zaW5nbGV0b25zKHNlbGYpOgogICAgICAgICAjIE1hcCAocHJvdG8sIHNpbmdsZXRvbikgdG8gZXhwZWN0ZWQgb3Bjb2RlLgpAQCAtOTM4LDggKzk4Myw4IEBACiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB5LCAocHJvdG8sIHgsIHMsIHkpKQotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW3Byb3RvLCB4XQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcyksIFRydWUpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbbWluKHByb3RvLCAzKSwgeF0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcykpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfdHVwbGUoc2VsZik6CiAgICAgICAgIHggPSBNeVR1cGxlKFsxLCAyLCAzXSkKQEAgLTk0OCw4ICs5OTMsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh4KSwgdHVwbGUoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfbGlzdChzZWxmKToKICAgICAgICAgeCA9IE15TGlzdChbMSwgMiwgM10pCkBAIC05NTgsOCArMTAwMiw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfZ2VuZXJpYyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKQEAgLTk3MCw2ICsxMDEzLDcgQEAKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgICAgIGRldGFpbCA9IChwcm90bywgQywgQiwgeCwgeSwgdHlwZSh5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpICMgWFhYIHJldmlzaXQKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIoeCksIEIoeSksIGRldGFpbCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18sIGRldGFpbCkKIApAQCAtMTAwOCwxMSArMTA1MiwxMCBAQAogICAgICAgICAgICAgczEgPSBzZWxmLmR1bXBzKHgsIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKF9fbmFtZV9fLmVuY29kZSgidXRmLTgiKSwgczEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiTXlMaXN0IiwgczEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMSksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczEpKQogCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgICAgICAgICAgIyBEdW1wIHVzaW5nIHByb3RvY29sIDIgZm9yIHRlc3QuCiAgICAgICAgICAgICBzMiA9IHNlbGYuZHVtcHMoeCwgMikKQEAgLTEwMjEsOSArMTA2NCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMiksIFRydWUsIHJlcHIoczIpKQogCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKLQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZS5yZXN0b3JlKCkKIApAQCAtMTA0Nyw3ICsxMDg4LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9hcHBlbmRzID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BUFBFTkRTLCBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYXBwZW5kcywgcHJvdG8gPiAwKQogCkBAIC0xMDU2LDcgKzEwOTcsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgbnVtX2FwcGVuZHMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFQUEVORFMsIHMpCiAgICAgICAgICAgICBpZiBwcm90byA9PSAwOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FwcGVuZHMsIDApCkBAIC0xMDcwLDcgKzExMTEsNyBAQAogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgbnVtX3NldGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5TRVRJVEVNUywgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX3NldGl0ZW1zLCBwcm90byA+IDApCiAKQEAgLTEwNzksMjIgKzExMjAsNDkgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9zZXRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuU0VUSVRFTVMsIHMpCiAgICAgICAgICAgICBpZiBwcm90byA9PSAwOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX3NldGl0ZW1zLCAwKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtX3NldGl0ZW1zID49IDIpCiAKKyAgICBkZWYgdGVzdF9zZXRfY2h1bmtpbmcoc2VsZik6CisgICAgICAgIG4gPSAxMCAgIyB0b28gc21hbGwgdG8gY2h1bmsKKyAgICAgICAgeCA9IHNldChyYW5nZShuKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKyAgICAgICAgICAgIG51bV9hZGRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuQURESVRFTVMsIHMpCisgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYWRkaXRlbXMsIDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FkZGl0ZW1zLCAxKQorCisgICAgICAgIG4gPSAyNTAwICAjIGV4cGVjdCBhdCBsZWFzdCB0d28gY2h1bmtzIHdoZW4gcHJvdG8gPj0gNAorICAgICAgICB4ID0gc2V0KHJhbmdlKG4pKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQorICAgICAgICAgICAgbnVtX2FkZGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BRERJVEVNUywgcykKKyAgICAgICAgICAgIGlmIHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hZGRpdGVtcywgMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobnVtX2FkZGl0ZW1zLCAyKQorCiAgICAgZGVmIHRlc3Rfc2ltcGxlX25ld29iaihzZWxmKToKICAgICAgICAgeCA9IG9iamVjdC5fX25ld19fKFNpbXBsZU5ld09iaikgICMgYXZvaWQgX19pbml0X18KICAgICAgICAgeC5hYmMgPSA2NjYKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkosIHMpLCBwcm90byA+PSAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkosIHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDw9IHByb3RvIDwgNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKX0VYLCBzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8gPj0gNCkKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpICAgIyB3aWxsIHJhaXNlIFR5cGVFcnJvciBpZiBfX2luaXRfXyBjYWxsZWQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hYmMsIDY2NikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X25ld29ial9saXN0X3Nsb3RzKHNlbGYpOgogICAgICAgICB4ID0gU2xvdExpc3QoWzEsIDIsIDNdKQpAQCAtMTEwMiwxMCArMTE3MCw3IEBACiAgICAgICAgIHguYmFyID0gImhlbGxvIgogICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCAyKQogICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZvbywgeS5mb28pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5iYXIsIHkuYmFyKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9yZWR1Y2Vfb3ZlcnJpZGVzX2RlZmF1bHRfcmVkdWNlX2V4KHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgpAQCAtMTE1NCwxMSArMTIxOSwxMCBAQAogCiAgICAgQG5vX3RyYWNpbmcKICAgICBkZWYgdGVzdF9iYWRfZ2V0YXR0cihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMzUxNDogY3Jhc2ggd2hlbiB0aGVyZSBpcyBhbiBpbmZpbml0ZSBsb29wIGluIF9fZ2V0YXR0cl9fCiAgICAgICAgIHggPSBCYWRHZXRhdHRyKCkKLSAgICAgICAgZm9yIHByb3RvIGluIDAsIDE6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYuZHVtcHMsIHgsIHByb3RvKQotICAgICAgICAjIHByb3RvY29sIDIgZG9uJ3QgcmFpc2UgYSBSdW50aW1lRXJyb3IuCi0gICAgICAgIGQgPSBzZWxmLmR1bXBzKHgsIDIpCiAKICAgICBkZWYgdGVzdF9yZWR1Y2VfYmFkX2l0ZXJhdG9yKHNlbGYpOgogICAgICAgICAjIElzc3VlNDE3NjogY3Jhc2ggd2hlbiA0dGggYW5kIDV0aCBpdGVtcyBvZiBfX3JlZHVjZV9fKCkKQEAgLTExOTEsMTEgKzEyNTUsMTAgQEAKICAgICAgICAgb2JqID0gW2RpY3QobGFyZ2VfZGljdCksIGRpY3QobGFyZ2VfZGljdCksIGRpY3QobGFyZ2VfZGljdCldCiAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKLSAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoZHVtcGVkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQsIG9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBwcm90b2NvbCAlZDogJXIgIT0gJXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHByb3RvLCBvYmosIGxvYWRlZCkpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoZHVtcGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkob2JqLCBsb2FkZWQpCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfbmFtZV9pbnRlcm5pbmcoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGF0dHJpYnV0ZSBuYW1lcyBvZiBwaWNrbGVkIG9iamVjdHMgYXJlIGludGVybmVkIHdoZW4KQEAgLTEyNDgsNiArMTMxMSwzNSBAQAogICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKHNldChbM10pLCAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1bXBlZCwgREFUQTYpCiAKKyAgICBkZWYgdGVzdF9sb2FkX3B5dGhvbjJfc3RyX2FzX2J5dGVzKHNlbGYpOgorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcygnYVx4MDBceGEwJywgcHJvdG9jb2w9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGIiUydhXFx4MDBcXHhhMCdcbi4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ImJ5dGVzIiksIGInYVx4MDBceGEwJykKKyAgICAgICAgIyBGcm9tIFB5dGhvbiAyOiBwaWNrbGUuZHVtcHMoJ2FceDAwXHhhMCcsIHByb3RvY29sPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJ1VceDAzYVx4MDBceGEwLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iYnl0ZXMiKSwgYidhXHgwMFx4YTAnKQorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcygnYVx4MDBceGEwJywgcHJvdG9jb2w9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInXHg4MFx4MDJVXHgwM2FceDAwXHhhMC4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ImJ5dGVzIiksIGInYVx4MDBceGEwJykKKworICAgIGRlZiB0ZXN0X2xvYWRfcHl0aG9uMl91bmljb2RlX2FzX3N0cihzZWxmKToKKyAgICAgICAgIyBGcm9tIFB5dGhvbiAyOiBwaWNrbGUuZHVtcHModSfPgCcsIHByb3RvY29sPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJ1ZcXHUwM2MwXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdieXRlcycpLCAnz4AnKQorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcyh1J8+AJywgcHJvdG9jb2w9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInWFx4MDJceDAwXHgwMFx4MDBceGNmXHg4MC4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ImJ5dGVzIiksICfPgCcpCisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKHUnz4AnLCBwcm90b2NvbD0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYidceDgwXHgwMlhceDAyXHgwMFx4MDBceDAwXHhjZlx4ODAuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJieXRlcyIpLCAnz4AnKQorCisgICAgZGVmIHRlc3RfbG9hZF9sb25nX3B5dGhvbjJfc3RyX2FzX2J5dGVzKHNlbGYpOgorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcygneCcgKiAzMDAsIHByb3RvY29sPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwaWNrbGUuQklOU1RSSU5HICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8SSIsIDMwMCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4JyAqIDMwMCArIHBpY2tsZS5TVE9QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J2J5dGVzJyksIGIneCcgKiAzMDApCisKICAgICBkZWYgdGVzdF9sYXJnZV9waWNrbGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhlIGNvcnJlY3RuZXNzIG9mIGludGVybmFsIGJ1ZmZlcmluZyByb3V0aW5lcyB3aGVuIGhhbmRsaW5nCiAgICAgICAgICMgbGFyZ2UgZGF0YS4KQEAgLTEyNjYsMTEgKzEzNTgsMTQgQEAKICAgICBkZWYgdGVzdF9pbnRfcGlja2xpbmdfZWZmaWNpZW5jeShzZWxmKToKICAgICAgICAgIyBUZXN0IGNvbXBhY2l0eSBvZiBpbnQgcmVwcmVzZW50YXRpb24gKHNlZSBpc3N1ZSAjMTI3NDQpCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBzaXplcyA9IFtsZW4oc2VsZi5kdW1wcygyKipuLCBwcm90bykpIGZvciBuIGluIHJhbmdlKDcwKV0KLSAgICAgICAgICAgICMgdGhlIHNpemUgZnVuY3Rpb24gaXMgbW9ub3RvbmljCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzaXplcyksIHNpemVzKQotICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplc1stMV0sIDE0KQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZXMgPSBbc2VsZi5kdW1wcygyKipuLCBwcm90bykgZm9yIG4gaW4gcmFuZ2UoNzApXQorICAgICAgICAgICAgICAgIHNpemVzID0gbGlzdChtYXAobGVuLCBwaWNrbGVzKSkKKyAgICAgICAgICAgICAgICAjIHRoZSBzaXplIGZ1bmN0aW9uIGlzIG1vbm90b25pYworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNpemVzKSwgc2l6ZXMpCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGlja2xlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORywgcCkpCiAKICAgICBkZWYgY2hlY2tfbmVnYXRpdmVfMzJiX2JpblhYWChzZWxmLCBkdW1wZWQpOgogICAgICAgICBpZiBzeXMubWF4c2l6ZSA+IDIqKjMyOgpAQCAtMTMwMSw2ICsxMzk2LDM1IEBACiAgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDNYXHgwMVx4MDBceDAwXHgwMGFyXHhmZlx4ZmZceGZmXHhmZi4nCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGR1bXBlZCkKIAorICAgIGRlZiB0ZXN0X2JhZGx5X2VzY2FwZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBiIlMnXFwnXG4uIikKKworICAgIGRlZiB0ZXN0X2JhZGx5X3F1b3RlZF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE3NzEwCisgICAgICAgIGJhZHBpY2tsZXMgPSBbYiJTJ1xuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTIlxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTXCcgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTXCciXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiXCdcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGIiUycgJyBcbi4iLAorICAgICAgICAgICAgICAgICAgICAgIGInUyIgIiBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGIiUyAnJ1xuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTICIiXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1Ncbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUy4nXQorICAgICAgICBmb3IgcCBpbiBiYWRwaWNrbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocGlja2xlLlVucGlja2xpbmdFcnJvciwgc2VsZi5sb2FkcywgcCkKKworICAgIGRlZiB0ZXN0X2NvcnJlY3RseV9xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBnb29kcGlja2xlcyA9IFsoYiJTJydcbi4iLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiJ1MiIlxuLicsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGInUyJcXG4iXG4uJywgJ1xuJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiIlMnXFxuJ1xuLiIsICdcbicpXQorICAgICAgICBmb3IgcCwgZXhwZWN0ZWQgaW4gZ29vZHBpY2tsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIGV4cGVjdGVkKQorCiAgICAgZGVmIF9jaGVja19waWNrbGluZ193aXRoX29wY29kZShzZWxmLCBvYmosIG9wY29kZSwgcHJvdG8pOgogICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHBpY2tsZWQpKQpAQCAtMTMyNCw2ICsxNDQ4LDE5NCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19waWNrbGluZ193aXRoX29wY29kZShvYmosIHBpY2tsZS5TRVRJVEVNUywgcHJvdG8pCiAKKyAgICAjIEV4ZXJjaXNlIGZyYW1pbmcgKHByb3RvID49IDQpIGZvciBzaWduaWZpY2FudCB3b3JrbG9hZHMKKworICAgIEZSQU1FX1NJWkVfVEFSR0VUID0gNjQgKiAxMDI0CisKKyAgICBkZWYgY2hlY2tfZnJhbWVfb3Bjb2RlcyhzZWxmLCBwaWNrbGVkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRoZSBhcmd1bWVudHMgb2YgRlJBTUUgb3Bjb2RlcyBpbiBhIHByb3RvY29sIDQrIHBpY2tsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGZyYW1lX29wY29kZV9zaXplID0gOQorICAgICAgICBsYXN0X2FyZyA9IGxhc3RfcG9zID0gTm9uZQorICAgICAgICBmb3Igb3AsIGFyZywgcG9zIGluIHBpY2tsZXRvb2xzLmdlbm9wcyhwaWNrbGVkKToKKyAgICAgICAgICAgIGlmIG9wLm5hbWUgIT0gJ0ZSQU1FJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGFzdF9wb3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGUgcHJldmlvdXMgZnJhbWUncyBzaXplIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgIyBvZiBieXRlcyB1cCB0byB0aGUgY3VycmVudCBmcmFtZS4KKyAgICAgICAgICAgICAgICBmcmFtZV9zaXplID0gcG9zIC0gbGFzdF9wb3MgLSBmcmFtZV9vcGNvZGVfc2l6ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJhbWVfc2l6ZSwgbGFzdF9hcmcpCisgICAgICAgICAgICBsYXN0X2FyZywgbGFzdF9wb3MgPSBhcmcsIHBvcworICAgICAgICAjIFRoZSBsYXN0IGZyYW1lJ3Mgc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBieXRlcyB1cAorICAgICAgICAjIHRvIHRoZSBwaWNrbGUncyBlbmQuCisgICAgICAgIGZyYW1lX3NpemUgPSBsZW4ocGlja2xlZCkgLSBsYXN0X3BvcyAtIGZyYW1lX29wY29kZV9zaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJhbWVfc2l6ZSwgbGFzdF9hcmcpCisKKyAgICBkZWYgdGVzdF9mcmFtaW5nX21hbnlfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgb2JqID0gbGlzdChyYW5nZSgxMCoqNSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB1bnBpY2tsZWQpCisgICAgICAgICAgICAgICAgYnl0ZXNfcGVyX2ZyYW1lID0gKGxlbihwaWNrbGVkKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHBpY2tsZWQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihieXRlc19wZXJfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRlJBTUVfU0laRV9UQVJHRVQgLyAyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGJ5dGVzX3Blcl9mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZSQU1FX1NJWkVfVEFSR0VUICogMSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZyYW1lX29wY29kZXMocGlja2xlZCkKKworICAgIGRlZiB0ZXN0X2ZyYW1pbmdfbGFyZ2Vfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgTiA9IDEwMjQgKiAxMDI0CisgICAgICAgIG9iaiA9IFtiJ3gnICogTiwgYid5JyAqIE4sIGIneicgKiBOXQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdW5waWNrbGVkKQorICAgICAgICAgICAgICAgIG5fZnJhbWVzID0gY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgcGlja2xlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuX2ZyYW1lcywgbGVuKG9iaikpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19mcmFtZV9vcGNvZGVzKHBpY2tsZWQpCisKKyAgICBkZWYgdGVzdF9vcHRpb25hbF9mcmFtZXMoc2VsZik6CisgICAgICAgIGlmIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MIDwgNDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRlZiByZW1vdmVfZnJhbWVzKHBpY2tsZWQsIGtlZXBfZnJhbWU9Tm9uZSk6CisgICAgICAgICAgICAiIiJSZW1vdmUgZnJhbWUgb3Bjb2RlcyBmcm9tIHRoZSBnaXZlbiBwaWNrbGUuIiIiCisgICAgICAgICAgICBmcmFtZV9zdGFydHMgPSBbXQorICAgICAgICAgICAgIyAxIGJ5dGUgZm9yIHRoZSBvcGNvZGUgYW5kIDggZm9yIHRoZSBhcmd1bWVudAorICAgICAgICAgICAgZnJhbWVfb3Bjb2RlX3NpemUgPSA5CisgICAgICAgICAgICBmb3Igb3Bjb2RlLCBfLCBwb3MgaW4gcGlja2xldG9vbHMuZ2Vub3BzKHBpY2tsZWQpOgorICAgICAgICAgICAgICAgIGlmIG9wY29kZS5uYW1lID09ICdGUkFNRSc6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lX3N0YXJ0cy5hcHBlbmQocG9zKQorCisgICAgICAgICAgICBuZXdwaWNrbGUgPSBieXRlYXJyYXkoKQorICAgICAgICAgICAgbGFzdF9mcmFtZV9lbmQgPSAwCisgICAgICAgICAgICBmb3IgaSwgcG9zIGluIGVudW1lcmF0ZShmcmFtZV9zdGFydHMpOgorICAgICAgICAgICAgICAgIGlmIGtlZXBfZnJhbWUgYW5kIGtlZXBfZnJhbWUoaSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmV3cGlja2xlICs9IHBpY2tsZWRbbGFzdF9mcmFtZV9lbmQ6cG9zXQorICAgICAgICAgICAgICAgIGxhc3RfZnJhbWVfZW5kID0gcG9zICsgZnJhbWVfb3Bjb2RlX3NpemUKKyAgICAgICAgICAgIG5ld3BpY2tsZSArPSBwaWNrbGVkW2xhc3RfZnJhbWVfZW5kOl0KKyAgICAgICAgICAgIHJldHVybiBuZXdwaWNrbGUKKworICAgICAgICBmcmFtZV9zaXplID0gc2VsZi5GUkFNRV9TSVpFX1RBUkdFVAorICAgICAgICBudW1fZnJhbWVzID0gMjAKKyAgICAgICAgb2JqID0gW2J5dGVzKFtpXSkgKiBmcmFtZV9zaXplIGZvciBpIGluIHJhbmdlKG51bV9mcmFtZXMpXQorCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKworICAgICAgICAgICAgZnJhbWVsZXNzX3BpY2tsZSA9IHJlbW92ZV9mcmFtZXMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgZnJhbWVsZXNzX3BpY2tsZSksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgc2VsZi5sb2FkcyhmcmFtZWxlc3NfcGlja2xlKSkKKworICAgICAgICAgICAgc29tZV9mcmFtZXNfcGlja2xlID0gcmVtb3ZlX2ZyYW1lcyhwaWNrbGVkLCBsYW1iZGEgaTogaSAlIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgc29tZV9mcmFtZXNfcGlja2xlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBwaWNrbGVkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBzZWxmLmxvYWRzKHNvbWVfZnJhbWVzX3BpY2tsZSkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfbmFtZXMoc2VsZik6CisgICAgICAgIGdsb2JhbCBOZXN0ZWQKKyAgICAgICAgY2xhc3MgTmVzdGVkOgorICAgICAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIG9iaiBpbiBbTmVzdGVkLkEsIE5lc3RlZC5BLkIsIE5lc3RlZC5BLkIuQ106CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG9iaj1vYmopOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMob2JqLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLCB1bnBpY2tsZWQpCisKKyAgICBkZWYgdGVzdF9weV9tZXRob2RzKHNlbGYpOgorICAgICAgICBnbG9iYWwgUHlNZXRob2RzVGVzdAorICAgICAgICBjbGFzcyBQeU1ldGhvZHNUZXN0OgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIGNoZWVzZSgpOgorICAgICAgICAgICAgICAgIHJldHVybiAiY2hlZXNlIgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgd2luZShjbHMpOgorICAgICAgICAgICAgICAgIGFzc2VydCBjbHMgaXMgUHlNZXRob2RzVGVzdAorICAgICAgICAgICAgICAgIHJldHVybiAid2luZSIKKyAgICAgICAgICAgIGRlZiBiaXNjdWl0cyhzZWxmKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBQeU1ldGhvZHNUZXN0KQorICAgICAgICAgICAgICAgIHJldHVybiAiYmlzY3VpdHMiCisgICAgICAgICAgICBjbGFzcyBOZXN0ZWQ6CisgICAgICAgICAgICAgICAgIk5lc3RlZCBjbGFzcyIKKyAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIGtldGNodXAoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJrZXRjaHVwIgorICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBtYXBsZShjbHMpOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgY2xzIGlzIFB5TWV0aG9kc1Rlc3QuTmVzdGVkCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAibWFwbGUiCisgICAgICAgICAgICAgICAgZGVmIHBpZShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZiwgUHlNZXRob2RzVGVzdC5OZXN0ZWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAicGllIgorCisgICAgICAgIHB5X21ldGhvZHMgPSAoCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0LmNoZWVzZSwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3Qud2luZSwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QoKS5iaXNjdWl0cywKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuTmVzdGVkLmtldGNodXAsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0Lk5lc3RlZC5tYXBsZSwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuTmVzdGVkKCkucGllCisgICAgICAgICkKKyAgICAgICAgcHlfdW5ib3VuZF9tZXRob2RzID0gKAorICAgICAgICAgICAgKFB5TWV0aG9kc1Rlc3QuYmlzY3VpdHMsIFB5TWV0aG9kc1Rlc3QpLAorICAgICAgICAgICAgKFB5TWV0aG9kc1Rlc3QuTmVzdGVkLnBpZSwgUHlNZXRob2RzVGVzdC5OZXN0ZWQpCisgICAgICAgICkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgbWV0aG9kIGluIHB5X21ldGhvZHM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG1ldGhvZD1tZXRob2QpOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMobWV0aG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kKCksIHVucGlja2xlZCgpKQorICAgICAgICAgICAgZm9yIG1ldGhvZCwgY2xzIGluIHB5X3VuYm91bmRfbWV0aG9kczoKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBtZXRob2Q9bWV0aG9kKToKKyAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG1ldGhvZCwgcHJvdG8pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZChvYmopLCB1bnBpY2tsZWQob2JqKSkKKworICAgIGRlZiB0ZXN0X2NfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIFN1YmNsYXNzCisgICAgICAgIGNsYXNzIFN1YmNsYXNzKHR1cGxlKToKKyAgICAgICAgICAgIGNsYXNzIE5lc3RlZChzdHIpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjX21ldGhvZHMgPSAoCisgICAgICAgICAgICAjIGJvdW5kIGJ1aWx0LWluIG1ldGhvZAorICAgICAgICAgICAgKCJhYmNkIi5pbmRleCwgKCJjIiwpKSwKKyAgICAgICAgICAgICMgdW5ib3VuZCBidWlsdC1pbiBtZXRob2QKKyAgICAgICAgICAgIChzdHIuaW5kZXgsICgiYWJjZCIsICJjIikpLAorICAgICAgICAgICAgIyBib3VuZCAic2xvdCIgbWV0aG9kCisgICAgICAgICAgICAoWzEsIDIsIDNdLl9fbGVuX18sICgpKSwKKyAgICAgICAgICAgICMgdW5ib3VuZCAic2xvdCIgbWV0aG9kCisgICAgICAgICAgICAobGlzdC5fX2xlbl9fLCAoWzEsIDIsIDNdLCkpLAorICAgICAgICAgICAgIyBib3VuZCAiY29leGlzdCIgbWV0aG9kCisgICAgICAgICAgICAoezEsIDJ9Ll9fY29udGFpbnNfXywgKDIsKSksCisgICAgICAgICAgICAjIHVuYm91bmQgImNvZXhpc3QiIG1ldGhvZAorICAgICAgICAgICAgKHNldC5fX2NvbnRhaW5zX18sICh7MSwgMn0sIDIpKSwKKyAgICAgICAgICAgICMgYnVpbHQtaW4gY2xhc3MgbWV0aG9kCisgICAgICAgICAgICAoZGljdC5mcm9ta2V5cywgKCgiYSIsIDEpLCAoImIiLCAyKSkpLAorICAgICAgICAgICAgIyBidWlsdC1pbiBzdGF0aWMgbWV0aG9kCisgICAgICAgICAgICAoYnl0ZWFycmF5Lm1ha2V0cmFucywgKGIiYWJjIiwgYiJ4eXoiKSksCisgICAgICAgICAgICAjIHN1YmNsYXNzIG1ldGhvZHMKKyAgICAgICAgICAgIChTdWJjbGFzcyhbMSwyLDJdKS5jb3VudCwgKDIsKSksCisgICAgICAgICAgICAoU3ViY2xhc3MuY291bnQsIChTdWJjbGFzcyhbMSwyLDJdKSwgMikpLAorICAgICAgICAgICAgKFN1YmNsYXNzLk5lc3RlZCgic3dlZXQiKS5jb3VudCwgKCJlIiwpKSwKKyAgICAgICAgICAgIChTdWJjbGFzcy5OZXN0ZWQuY291bnQsIChTdWJjbGFzcy5OZXN0ZWQoInN3ZWV0IiksICJlIikpLAorICAgICAgICApCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIG1ldGhvZCwgYXJncyBpbiBjX21ldGhvZHM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG1ldGhvZD1tZXRob2QpOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMobWV0aG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kKCphcmdzKSwgdW5waWNrbGVkKCphcmdzKSkKKwogCiBjbGFzcyBCaWdtZW1QaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTEzMzYsOCArMTY0OCw5IEBACiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIApAQCAtMTM1MiwyNCArMTY2NSw0NCBAQAogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgICAgICBpZiBwcm90byA8IDM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTVdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWy0xNTpdKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IChwaWNrbGUuQklOQllURVMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8SSIsIGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3N0YXJ0ID0gcGlja2xlZC5pbmRleChkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZFtkYXRhX3N0YXJ0LWxlbihoZWFkZXIpOmRhdGFfc3RhcnRdKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKICAgICBAYmlnbWVtdGVzdChzaXplPV80RywgbWVtdXNlPTIuNSwgZHJ5X3J1bj1GYWxzZSkKICAgICBkZWYgdGVzdF9odWdlX2J5dGVzXzY0YihzZWxmLCBzaXplKToKLSAgICAgICAgZGF0YSA9IGIiYSIgKiBzaXplCisgICAgICAgIGRhdGEgPSBiImFjYmQiICogKHNpemUgLy8gNCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgICAgICBpZiBwcm90byA8IDM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUHJvdG9jb2wgMyBkb2VzIG5vdCBzdXBwb3J0IGxhcmdlIGJ5dGVzIG9iamVjdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHdlIGRvIG5vdCBjcmFzaCB3aGVuIHByb2Nlc3Npbmcgb25lLgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IChwaWNrbGUuQklOQllURVM4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiPFEiLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zdGFydCA9IHBpY2tsZWQuaW5kZXgoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWRbZGF0YV9zdGFydC1sZW4oaGVhZGVyKTpkYXRhX3N0YXJ0XSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCkBAIC0xMzgxLDI3ICsxNzE0LDUyIEBACiAgICAgICAgIGRhdGEgPSAiYWJjZCIgKiAoc2l6ZSAvLyA0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbOjE1XSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFstMTU6XSkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIHByb3RvID09IDA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IChwaWNrbGUuQklOVU5JQ09ERSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIjxJIiwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc3RhcnQgPSBwaWNrbGVkLmluZGV4KGInYWJjZCcpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkW2RhdGFfc3RhcnQtbGVuKGhlYWRlcik6ZGF0YV9zdGFydF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChwaWNrbGVkLnJpbmRleChiImFiY2QiKSArIGxlbihiImFiY2QiKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkLmluZGV4KGIiYWJjZCIpKSwgbGVuKGRhdGEpKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKLSAgICAjIEJJTlVOSUNPREUgKHByb3RvY29scyAxLCAyIGFuZCAzKSBjYW5ub3QgY2FycnkgbW9yZSB0aGFuCi0gICAgIyAyKiozMiAtIDEgYnl0ZXMgb2YgdXRmLTggZW5jb2RlZCB1bmljb2RlLgorICAgICMgQklOVU5JQ09ERSAocHJvdG9jb2xzIDEsIDIgYW5kIDMpIGNhbm5vdCBjYXJyeSBtb3JlIHRoYW4gMioqMzIgLSAxIGJ5dGVzCisgICAgIyBvZiB1dGYtOCBlbmNvZGVkIHVuaWNvZGUuIEJJTlVOSUNPREU4IChwcm90b2NvbCA0KSBzdXBwb3J0cyB0aGVzZSBodWdlCisgICAgIyB1bmljb2RlIHN0cmluZ3MgaG93ZXZlci4KIAogICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHLCBtZW11c2U9OCwgZHJ5X3J1bj1GYWxzZSkKICAgICBkZWYgdGVzdF9odWdlX3N0cl82NGIoc2VsZiwgc2l6ZSk6Ci0gICAgICAgIGRhdGEgPSAiYSIgKiBzaXplCisgICAgICAgIGRhdGEgPSAiYWJjZCIgKiAoc2l6ZSAvLyA0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvID09IDA6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IChwaWNrbGUuQklOVU5JQ09ERTggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8USIsIGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3N0YXJ0ID0gcGlja2xlZC5pbmRleChiJ2FiY2QnKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZFtkYXRhX3N0YXJ0LWxlbihoZWFkZXIpOmRhdGFfc3RhcnRdKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgocGlja2xlZC5yaW5kZXgoYiJhYmNkIikgKyBsZW4oYiJhYmNkIikgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZC5pbmRleChiImFiY2QiKSksIGxlbihkYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCkBAIC0xNDQ1LDggKzE4MDMsOCBAQAogICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcmVkdWNlX18oc2VsZikKIAogY2xhc3MgUkVYX3NpeChvYmplY3QpOgotICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNHRoIGFyZ3VtZW50IChsaXN0IGl0ZXJhdG9yKSBvZiB0aGUgcmVkdWNlCi0gICAgcHJvdG9jb2wuCisgICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA0dGggYXJndW1lbnQgKGxpc3QgaXRlcmF0b3IpIG9mCisgICAgdGhlIHJlZHVjZSBwcm90b2NvbC4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbXM9Tm9uZSk6CiAgICAgICAgIHNlbGYuaXRlbXMgPSBpdGVtcyBpZiBpdGVtcyBpcyBub3QgTm9uZSBlbHNlIFtdCkBAIC0xNDU4LDggKzE4MTYsOCBAQAogICAgICAgICByZXR1cm4gdHlwZShzZWxmKSwgKCksIE5vbmUsIGl0ZXIoc2VsZi5pdGVtcyksIE5vbmUKIAogY2xhc3MgUkVYX3NldmVuKG9iamVjdCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA1dGggYXJndW1lbnQgKGRpY3QgaXRlcmF0b3IpIG9mIHRoZSByZWR1Y2UKLSAgICBwcm90b2NvbC4KKyAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDV0aCBhcmd1bWVudCAoZGljdCBpdGVyYXRvcikgb2YKKyAgICB0aGUgcmVkdWNlIHByb3RvY29sLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZT1Ob25lKToKICAgICAgICAgc2VsZi50YWJsZSA9IHRhYmxlIGlmIHRhYmxlIGlzIG5vdCBOb25lIGVsc2Uge30KQEAgLTE0OTcsMTAgKzE4NTUsMTYgQEAKIGNsYXNzIE15RGljdChkaWN0KToKICAgICBzYW1wbGUgPSB7ImEiOiAxLCAiYiI6IDJ9CiAKK2NsYXNzIE15U2V0KHNldCk6CisgICAgc2FtcGxlID0geyJhIiwgImIifQorCitjbGFzcyBNeUZyb3plblNldChmcm96ZW5zZXQpOgorICAgIHNhbXBsZSA9IGZyb3plbnNldCh7ImEiLCAiYiJ9KQorCiBteWNsYXNzZXMgPSBbTXlJbnQsIE15RmxvYXQsCiAgICAgICAgICAgICAgTXlDb21wbGV4LAogICAgICAgICAgICAgIE15U3RyLCBNeVVuaWNvZGUsCi0gICAgICAgICAgICAgTXlUdXBsZSwgTXlMaXN0LCBNeURpY3RdCisgICAgICAgICAgICAgTXlUdXBsZSwgTXlMaXN0LCBNeURpY3QsIE15U2V0LCBNeUZyb3plblNldF0KIAogCiBjbGFzcyBTbG90TGlzdChNeUxpc3QpOgpAQCAtMTUxMCw2ICsxODc0LDggQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYiwgYyk6CiAgICAgICAgICMgcmFpc2UgYW4gZXJyb3IsIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGNhbGxlZAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlNpbXBsZU5ld09iai5fX2luaXRfXygpIGRpZG4ndCBleHBlY3QgdG8gZ2V0IGNhbGxlZCIpCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fZGljdF9fCiAKIGNsYXNzIEJhZEdldGF0dHI6CiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGtleSk6CkBAIC0xNTQ2LDcgKzE5MTIsNyBAQAogCiAgICAgZGVmIHRlc3RfaGlnaGVzdF9wcm90b2NvbChzZWxmKToKICAgICAgICAgIyBPZiBjb3Vyc2UgdGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHdoZW4gSElHSEVTVF9QUk9UT0NPTCBjaGFuZ2VzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MLCA0KQogCiAgICAgZGVmIHRlc3RfY2FsbGFwaShzZWxmKToKICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQpAQCAtMTczMSwyMiArMjA5NywyMyBAQAogCiAgICAgZGVmIF9jaGVja19tdWx0aXBsZV91bnBpY2tsaW5ncyhzZWxmLCBpb2NsYXNzKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIGRhdGExID0gWyh4LCBzdHIoeCkpIGZvciB4IGluIHJhbmdlKDIwMDApXSArIFtiImFiY2RlIiwgbGVuXQotICAgICAgICAgICAgZiA9IGlvY2xhc3MoKQotICAgICAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMSkKLSAgICAgICAgICAgIHBpY2tsZWQgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBkYXRhMSA9IFsoeCwgc3RyKHgpKSBmb3IgeCBpbiByYW5nZSgyMDAwKV0gKyBbYiJhYmNkZSIsIGxlbl0KKyAgICAgICAgICAgICAgICBmID0gaW9jbGFzcygpCisgICAgICAgICAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YTEpCisgICAgICAgICAgICAgICAgcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQogCi0gICAgICAgICAgICBOID0gNQotICAgICAgICAgICAgZiA9IGlvY2xhc3MocGlja2xlZCAqIE4pCi0gICAgICAgICAgICB1bnBpY2tsZXIgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhmKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgotICAgICAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVyLmxvYWQoKSwgZGF0YTEpCi0gICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwb3MgKyBsZW4ocGlja2xlZCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgdW5waWNrbGVyLmxvYWQpCisgICAgICAgICAgICAgICAgTiA9IDUKKyAgICAgICAgICAgICAgICBmID0gaW9jbGFzcyhwaWNrbGVkICogTikKKyAgICAgICAgICAgICAgICB1bnBpY2tsZXIgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhmKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGExKQorICAgICAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwb3MgKyBsZW4ocGlja2xlZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHVucGlja2xlci5sb2FkKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfdW5waWNrbGluZ3Nfc2Vla2FibGUoc2VsZik6CiAgICAgICAgIHNlbGYuX2NoZWNrX211bHRpcGxlX3VucGlja2xpbmdzKGlvLkJ5dGVzSU8pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWNhY2VydC5wZW0gYi9MaWIvdGVzdC9weWNhY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliMWYzZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FjZXJ0LnBlbQpAQCAtMCwwICsxLDc4IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgwICgweGIwOTI2NGIxZjJkYTIxZDApCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKYW4gIDIgMTk6NDc6MDcgMjAyMyBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmU3OmRlOmU5OmUzOjBjOjlmOjAwOmI2OmExOmZkOjJiOjViOjk2OmQyOgorICAgICAgICAgICAgICAgICAgICA2ZjpjYzplMDpiZTo4NjpiOToyMDo1ZTplYzowMzo3YTo1NTphYjplYTphNDoKKyAgICAgICAgICAgICAgICAgICAgZTk6Zjk6NDk6ODU6ZDI6NjY6ZDU6ZWQ6Yzc6N2E6ZWE6NTY6OGU6MmQ6OGY6CisgICAgICAgICAgICAgICAgICAgIGU3OjQyOmUyOjYyOjI4OmE5OjlmOmQ2OjFiOjhlOmViOmI1OmI0OjljOjlmOgorICAgICAgICAgICAgICAgICAgICAxNDphYjpkZjplNjo5NDo4Yjo3NjoxZDozZTo2ZDoyNDo2MTplZDowYzpiZjoKKyAgICAgICAgICAgICAgICAgICAgMDA6OGE6NjE6MGM6ZGY6NWM6Yzg6MzY6NzM6MTY6MDA6Y2Q6NDc6YmE6NmQ6CisgICAgICAgICAgICAgICAgICAgIGE0OmE0Ojc0Ojg4OjgzOjIzOjBhOjE5OmZjOjA5OmE3OjNjOjRhOjRiOmQzOgorICAgICAgICAgICAgICAgICAgICBlNzoxZDoyZDplNDplYTo0Yzo1NDoyMTpmMzoyNjpkYjo4OTozNzoxODpkNDoKKyAgICAgICAgICAgICAgICAgICAgMDI6YmI6NDA6MzI6NWY6YTQ6ZmY6MmQ6MWM6Zjc6ZDQ6YmI6ZWM6OGU6Y2Y6CisgICAgICAgICAgICAgICAgICAgIDVjOjgyOmFjOmU2OjdjOjA4OjZjOjQ4Ojg1OjYxOjA3OjdmOjI1OmUwOjVjOgorICAgICAgICAgICAgICAgICAgICBlMDpiYzozNDo1ZjplMDpiOTowNDo0Nzo3NTpjODo0NzowYjo4ZDpiYzpkNjoKKyAgICAgICAgICAgICAgICAgICAgYzg6Njg6NWY6MzM6ODM6NjI6ZDI6MjA6NDQ6MzU6YjE6YWQ6ODE6MWE6OGE6CisgICAgICAgICAgICAgICAgICAgIGNkOmJjOjM1OmIwOjVjOjhiOjQ3OmQ2OjE4OmU5OjljOjE4Ojk3OmNjOjAxOgorICAgICAgICAgICAgICAgICAgICAzYzoyOTpjYzplODoxZTplNDplNDpjMTpiODpkZTplNzpjMjoxMToxODo4NzoKKyAgICAgICAgICAgICAgICAgICAgNWE6OTM6MzQ6ZDg6YTY6MjU6Zjc6MTQ6NzE6ZWI6ZTQ6MjE6YTI6ZDI6MGY6CisgICAgICAgICAgICAgICAgICAgIDJlOjJlOmQ0OjYyOjAwOjM1OmQzOmQ2OmVmOjVjOjYwOjRiOjRjOmE5OjE0OgorICAgICAgICAgICAgICAgICAgICBlMjpkZDoxNTo1ODo0NjozNzozMzoyNjpiNzplNzoyZTo1ZDplZDo0MjplNDoKKyAgICAgICAgICAgICAgICAgICAgYzU6NGQKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDdkOjBhOmY1OmNiOjhkOmQzOjVkOmJkOjk5OjhlOmY4OjJiOjBmOmJhOmViOmMyOmQ5OmE2OgorICAgICAgICAgMjc6NGY6MmU6N2I6MmY6MGU6NjQ6ZDg6MWM6MzU6NTA6NGU6ZWU6ZmM6OTA6Yjk6OGQ6NmQ6CisgICAgICAgICBhODpjNTpjNjowNjpiMDphZjpmMzoyZDpiZjozYjpiODo0MjowNzpkZDoxODo3ZDo2ZDo5NToKKyAgICAgICAgIDU0OjU3Ojg1OjE4OjYwOjQ3OjJmOmViOjc4OjFiOmY5OmU4OjE3OmZkOjVhOjBkOjg3OjE3OgorICAgICAgICAgMjg6YWM6NGM6NmE6ZTY6YmM6Mjk6ZjQ6ZjQ6NTU6NzA6Mjk6NDI6ZGU6ODU6ZWE6YWI6NmM6CisgICAgICAgICAyMzowNjo2NDozMDo3NTowMjo4ZTo1MzpiYzo1ZTowMTozMzozNzpjYzoxZTpjZDpiODphNDoKKyAgICAgICAgIGZkOmNhOmU0OjVmOjY1OjNiOjgzOjFjOjg2OmYxOjU1OjAyOmEwOjNhOjhmOmRiOjkxOmI3OgorICAgICAgICAgNDA6MTQ6YjQ6ZTc6OGQ6ZDI6ZWU6NzM6YmE6ZTM6ZTU6MzQ6MmQ6YmM6OTQ6NmY6NGU6MjQ6CisgICAgICAgICAwNjpmNzo1Zjo4YjowZTphNzo4ZTo2YjpkZTo1ZTo3NTpmNDozMjo5YTo1MDpiMTo0NDozMzoKKyAgICAgICAgIDlhOmQwOjA1OmUyOjc4OjgyOmZmOmRiOmRhOjhhOjYzOmViOmE5OmRkOmQxOmJmOmEwOjYxOgorICAgICAgICAgYWQ6ZTM6OWU6OGE6MjQ6NWQ6NjI6MGU6ZTc6NGM6OTE6N2Y6ZWY6ZGY6MzQ6MzY6M2I6MmY6CisgICAgICAgICA1ZDpmNTo4NDpiMjoyZjpjNDo2ZDo5Mzo5NjoxYTo2ZjozMDoyODpmMTpkYToxMjo5YTo2NDoKKyAgICAgICAgIGI0OjQwOjMzOjFkOmJkOmRlOjJiOjUzOmE4OmVhOmJlOmQ2OmJjOjRlOjk2OmY1OjQ0OmZiOgorICAgICAgICAgMzI6MTg6YWU6ZDU6MWY6ZjY6Njk6YWY6YjY6NGU6N2I6MWQ6NTg6ZWM6M2I6YTk6NTM6YTM6CisgICAgICAgICA1ZTo1ODpjODo5ZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEYlRDQ0FsV2dBd0lCQWdJSkFMQ1NaTEh5MmlIUU1BMEdDU3FHU0liM0RRRUJCUVVBTUUweEN6QUpCZ05WCitCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZ1JtOTFibVJoZEdsdmJpQkRRVEVXCitNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pBZUZ3MHhNekF4TURReE9UUTNNRGRhRncweU16QXhNREl4CitPVFEzTURkYU1FMHhDekFKQmdOVkJBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnCitSbTkxYm1SaGRHbHZiaUJEUVRFV01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU9mZTZlTU1ud0Myb2Ywclc1YlNiOHpndm9hNUlGN3NBM3BWCitxK3FrNmZsSmhkSm0xZTNIZXVwV2ppMlA1MExpWWlpcG45WWJqdXUxdEp5ZkZLdmY1cFNMZGgwK2JTUmg3UXkvCitBSXBoRE45Y3lEWnpGZ0ROUjdwdHBLUjBpSU1qQ2huOENhYzhTa3ZUNXgwdDVPcE1WQ0h6SnR1Sk54alVBcnRBCitNbCtrL3kwYzk5Uzc3STdQWElLczVud0liRWlGWVFkL0plQmM0THcwWCtDNUJFZDF5RWNMamJ6V3lHaGZNNE5pCiswaUJFTmJHdGdScUt6Yncxc0Z5TFI5WVk2WndZbDh3QlBDbk02QjdrNU1HNDN1ZkNFUmlIV3BNMDJLWWw5eFJ4Cis2K1Fob3RJUExpN1VZZ0ExMDlidlhHQkxUS2tVNHQwVldFWTNNeWEzNXk1ZDdVTGt4VTBDQXdFQUFhTlFNRTR3CitIUVlEVlIwT0JCWUVGTHpkWXRsMjJodlNWR3ZQNEdhYkhoNTdWZ3dMTUI4R0ExVWRJd1FZTUJhQUZMemRZdGwyCisyaHZTVkd2UDRHYWJIaDU3Vmd3TE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBSDBLOWN1TjAxMjltWTc0S3crNjY4TFpwaWRQTG5zdkRtVFlIRFZRVHU3OGtMbU5iYWpGeGdhd3IvTXR2enU0CitRZ2ZkR0gxdGxWUlhoUmhnUnkvcmVCdjU2QmY5V2cySEZ5aXNUR3JtdkNuMDlGVndLVUxlaGVxcmJDTUdaREIxCitBbzVUdkY0Qk16Zk1IczI0cFAzSzVGOWxPNE1jaHZGVkFxQTZqOXVSdDBBVXRPZU4wdTV6dXVQbE5DMjhsRzlPCitKQWIzWDRzT3A0NXIzbDUxOURLYVVMRkVNNXJRQmVKNGd2L2Iyb3BqNjZuZDBiK2dZYTNqbm9va1hXSU81MHlSCitmKy9mTkRZN0wxMzFoTEl2eEcyVGxocHZNQ2p4MmhLYVpMUkFNeDI5M2l0VHFPcSsxcnhPbHZWRSt6SVlydFVmCis5bW12dGs1N0hWanNPNmxUbzE1WXlKND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3B5Y2FrZXkucGVtIGIvTGliL3Rlc3QvcHljYWtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2ZWZmZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FrZXkucGVtCkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJRXZnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2d3Z2dTa0FnRUFBb0lCQVFEbjN1bmpESjhBdHFIOQorSzF1VzBtL000TDZHdVNCZTdBTjZWYXZxcE9uNVNZWFNadFh0eDNycVZvNHRqK2RDNG1Jb3FaL1dHNDdydGJTYworbnhTcjMrYVVpM1lkUG0wa1llME12d0NLWVF6ZlhNZzJjeFlBelVlNmJhU2tkSWlESXdvWi9BbW5QRXBMMCtjZAorTGVUcVRGUWg4eWJiaVRjWTFBSzdRREpmcFA4dEhQZlV1K3lPejF5Q3JPWjhDR3hJaFdFSGZ5WGdYT0M4TkYvZwordVFSSGRjaEhDNDI4MXNob1h6T0RZdElnUkRXeHJZRWFpczI4TmJCY2kwZldHT21jR0pmTUFUd3B6T2dlNU9UQgordU43bndoRVloMXFUTk5pbUpmY1VjZXZrSWFMU0R5NHUxR0lBTmRQVzcxeGdTMHlwRk9MZEZWaEdOek1tdCtjdQorWGUxQzVNVk5BZ01CQUFFQ2dnRUJBSlBNN1F1VXJQbjRjTE4vWXNkMTVsd1RXbjlvSERGRmdrWUZ2Q3M2NmdYRQoranUvNkt4MkJqV0U0d1RKYnkwOUFITS9NcUIwRHZndVQ3TWYxUTJqM3RQUTFIWm93ZzhPd1JEbGV1d3A2S0lscworakJiaEwwSmRsLzVIQzY3a3RXdlo5d052Ty93RkcxclFmVDZGVmFqZjlMVWJXRWFTWmJPRzJTTGhIZnNIb3J6dQoreGpUSmFJM2JRLzArNzlCMWV4d2s1cnV3aHpGUmQvWHBZOGhsczdEL1JmUEl1SERsQmdoa1czTjU5S0ZXcmY1aAorNmJORWgyVEhtMCtJeUdjR3FzMEZEK1FDT1h5dnNqd1NVc3dxcnIyY3RMUkVPZURjZDVSZVVqU3hZZ2pjSlJybQorSjdjZUlZLyt1d0RKeHcvT2xubUJ2RjZwUU1rS3dZVzJnRnp0dStnMnQ0VUNnWUVBLzl5bzAxRXh6NGNyeFhzeQordEFsbkRKTSsrblpjbTA3cnRGalRLSFVmS1kvY0NnTlRhOHVkTTBzdm5md2xpZC9kcGdMc0kzOGd4MDRISEMxaQorRVo0YWN6K1RvSVdlZEx4TTBucTczLy94ZVJXRWF6T3ZDejFtTVRaYU1sZGFoVFdBeXpOOHFWSzJCLzYyNVl5NAord05ZV3l3ZUJCd0VCOE16YUNzNzNzcGtzWE9zQ2dZRUE1Lzd3dmhpb2ZZR0ZBZk11QU5lSkl3REwyT3RCbm9PdgorbVZOZkNtaTNHQzM4Znp3eWk1WnBza1dEaVMyd29KK0xRZnM5UXU0RWNaYlVGTGQ3Z2JlT3ZiNWdtRlV0WW9wZQorTGl0VVVLdW5JUjE4TWtRK21RREJwUVBRUGhrNFFKUDVyZUNiV2tyZlR1N2I1by9pUzQxczZmQlRGbXV6aExjVAorQzcxdkZkQ3llS2NDZ1lBaUNDcVllT3RFTERtQk9lTERtYUNRUnFHUTFOOTZkT1BiQ0JtRi94WVhCQ0NEWUcvZgorSGFVYUpuejk2WVRnc3RzYmNyWVAvcC9RZ3F0bGJ3L2xRZjlJcHdNdXpiY0cxZWp0OGc4OU95RFdOeXQyeXRnVQoraWFVbkZKQ29zMy9CeWgwSWFoL0JzZE91ZW8yL09KbDJaTU9CVzgwb3JsU2d2ODZjczJ5MDM3VEw0d0tCZ1FEbQorT095VytNbGJvd2huSXZmb0Jmd2xMRWtlZm5lajRuS0Q2V1JMWkJjdWU1UXlmMzU1WDA2TWhzYzlmb1hsSCs2RworRDloL2Jzd2lITmRocDZOODJyZGdQR2lIUXgvQ3hpVW9FLytiL252Z05PNW13NnFMRTJFWGJHMWU4cEFNSmN5RQorYkh3K1lrYXdnZ0RmRUxJMDM2ZlJqNWdraThTZVV6OG5TMW5OZ0VsYnlRS0JnQ1JEWDlKaCtNd1NMdTRRQldkdAorL2ZpK2x2M0s2a3VuL2ZJN0VPVjF2Q1Yvajg3MXRJQ3U3cHU1QnJPTHhBSHFvVmZVOUFVWDI5OS8yS2pDYjVwdgora2pvZ2lVSzZxV0NXQmxmdXFETldHQ29VR3Qxcmh6blV2YTBuTmpTTXk1cmluQmhoanBST1pDMnB3NDhsT2x1UAorVXV2WHNhUHBoN0dUcVB1eTRLYWIxMllDCistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWRvY19tb2QucHkgYi9MaWIvdGVzdC9weWRvY19tb2QucHkKaW5kZXggZjg2YjVjNi4uY2RhMWM5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvcHlkb2NfbW9kLnB5CisrKyBiL0xpYi90ZXN0L3B5ZG9jX21vZC5weQpAQCAtMTUsNiArMTUsMTYgQEAKICAgICBOT19NRUFOSU5HID0gImVnZ3MiCiAgICAgcGFzcwogCitjbGFzcyBDKG9iamVjdCk6CisgICAgZGVmIHNheV9ubyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJubyIKKyAgICBkZWYgZ2V0X2Fuc3dlcihzZWxmKToKKyAgICAgICAgIiIiIFJldHVybiBzYXlfbm8oKSAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2F5X25vKCkKKyAgICBkZWYgaXNfaXRfdHJ1ZShzZWxmKToKKyAgICAgICAgIiIiIFJldHVybiBzZWxmLmdldF9hbnN3ZXIoKSAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2Fuc3dlcigpCisKIGRlZiBkb2NfZnVuYygpOgogICAgICIiIgogICAgIFRoaXMgZnVuY3Rpb24gc29sdmVzIGFsbCBvZiB0aGUgd29ybGQncyBwcm9ibGVtczoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3B5c3RvbmUucHkgYi9MaWIvdGVzdC9weXN0b25lLnB5CmluZGV4IGQ3ZjFlYzkuLmE0MWYxZTUgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3B5c3RvbmUucHkKKysrIGIvTGliL3Rlc3QvcHlzdG9uZS5weQpAQCAtMyw3ICszLDcgQEAKICIiIgogIlBZU1RPTkUiIEJlbmNobWFyayBQcm9ncmFtCiAKLVZlcnNpb246ICAgICAgICBQeXRob24vMS4xIChjb3JyZXNwb25kcyB0byBDLzEuMSBwbHVzIDIgUHlzdG9uZSBmaXhlcykKK1ZlcnNpb246ICAgICAgICBQeXRob24vMS4yIChjb3JyZXNwb25kcyB0byBDLzEuMSBwbHVzIDMgUHlzdG9uZSBmaXhlcykKIAogQXV0aG9yOiAgICAgICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIsICBDQUNNIFZvbCAyNywgTm8gMTAsIDEwLzg0IHBnLiAxMDEzLgogCkBAIC0zMCwxMyArMzAsMjAgQEAKICAgICAgICAgICAgICAgICBwZXJjZW50IGZhc3RlciB0aGFuIHZlcnNpb24gMS4wLCBzbyBiZW5jaG1hcmsgZmlndXJlcwogICAgICAgICAgICAgICAgIG9mIGRpZmZlcmVudCB2ZXJzaW9ucyBjYW4ndCBiZSBjb21wYXJlZCBkaXJlY3RseS4KIAorICAgICAgICAgICAgICAgIFZlcnNpb24gMS4yIGNoYW5nZXMgdGhlIGRpdmlzaW9uIHRvIGZsb29yIGRpdmlzaW9uLgorCisgICAgICAgICAgICAgICAgVW5kZXIgUHl0aG9uIDMgdmVyc2lvbiAxLjEgd291bGQgdXNlIHRoZSBub3JtYWwgZGl2aXNpb24KKyAgICAgICAgICAgICAgICBvcGVyYXRvciwgcmVzdWx0aW5nIGluIHNvbWUgb2YgdGhlIG9wZXJhdGlvbnMgbWlzdGFrZW5seQorICAgICAgICAgICAgICAgIHlpZWxkaW5nIGZsb2F0cy4gVmVyc2lvbiAxLjIgaW5zdGVhZCB1c2VzIGZsb29yIGRpdmlzaW9uCisgICAgICAgICAgICAgICAgbWFraW5nIHRoZSBiZW5jaG1hcmsgYSBpbnRlZ2VyIGJlbmNobWFyayBhZ2Fpbi4KKwogIiIiCiAKIExPT1BTID0gNTAwMDAKIAogZnJvbSB0aW1lIGltcG9ydCBjbG9jawogCi1fX3ZlcnNpb25fXyA9ICIxLjEiCitfX3ZlcnNpb25fXyA9ICIxLjIiCiAKIFtJZGVudDEsIElkZW50MiwgSWRlbnQzLCBJZGVudDQsIElkZW50NV0gPSByYW5nZSgxLCA2KQogCkBAIC0xMjMsNyArMTMwLDcgQEAKICAgICAgICAgICAgICAgICBFbnVtTG9jID0gUHJvYzYoSWRlbnQxKQogICAgICAgICAgICAgQ2hhckluZGV4ID0gY2hyKG9yZChDaGFySW5kZXgpKzEpCiAgICAgICAgIEludExvYzMgPSBJbnRMb2MyICogSW50TG9jMQotICAgICAgICBJbnRMb2MyID0gSW50TG9jMyAvIEludExvYzEKKyAgICAgICAgSW50TG9jMiA9IEludExvYzMgLy8gSW50TG9jMQogICAgICAgICBJbnRMb2MyID0gNyAqIChJbnRMb2MzIC0gSW50TG9jMikgLSBJbnRMb2MxCiAgICAgICAgIEludExvYzEgPSBQcm9jMihJbnRMb2MxKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZWdydGVzdC5weSBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CmluZGV4IGFlNjJjNmUuLmI2MzM2MzEgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CkBAIC0xLDExICsxLDE4IEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKLVVzYWdlOgorU2NyaXB0IHRvIHJ1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAorUnVuIHRoaXMgc2NyaXB0IHdpdGggLWggb3IgLS1oZWxwIGZvciBkb2N1bWVudGF0aW9uLgorIiIiCisKK1VTQUdFID0gIiIiXAogcHl0aG9uIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCiBweXRob24gcGF0aC90by9MaWIvdGVzdC9yZWdydGVzdC5weSBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KKyIiIgogCitERVNDUklQVElPTiA9ICIiIlwKK1J1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAogSWYgbm8gYXJndW1lbnRzIG9yIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBmaW5kcyBhbGwgZmlsZXMgbWF0Y2hpbmcKIHRoZSBwYXR0ZXJuICJ0ZXN0XyoiIGluIHRoZSBMaWIvdGVzdCBzdWJkaXJlY3RvcnkgYW5kIHJ1bnMKQEAgLTE1LDYzICsyMiwxMCBAQAogY29tbWFuZCBsaW5lOgogCiBweXRob24gLUUgLVdkIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIC4uLl0KKyIiIgogCi0KLU9wdGlvbnM6Ci0KLS1oLy0taGVscCAgICAgICAtLSBwcmludCB0aGlzIHRleHQgYW5kIGV4aXQKLS0tdGltZW91dCBUSU1FT1VUCi0gICAgICAgICAgICAgICAgLS0gZHVtcCB0aGUgdHJhY2ViYWNrIGFuZCBleGl0IGlmIGEgdGVzdCB0YWtlcyBtb3JlCi0gICAgICAgICAgICAgICAgICAgdGhhbiBUSU1FT1VUIHNlY29uZHM7IGRpc2FibGVkIGlmIFRJTUVPVVQgaXMgbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAgICBvciBlcXVhbHMgdG8gemVybwotLS13YWl0ICAgICAgICAgIC0tIHdhaXQgZm9yIHVzZXIgaW5wdXQsIGUuZy4sIGFsbG93IGEgZGVidWdnZXIgdG8gYmUgYXR0YWNoZWQKLQotVmVyYm9zaXR5Ci0KLS12Ly0tdmVyYm9zZSAgICAtLSBydW4gdGVzdHMgaW4gdmVyYm9zZSBtb2RlIHdpdGggb3V0cHV0IHRvIHN0ZG91dAotLXcvLS12ZXJib3NlMiAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlCi0tVy8tLXZlcmJvc2UzICAgLS0gZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlCi0tZC8tLWRlYnVnICAgICAgLS0gcHJpbnQgdHJhY2ViYWNrIGZvciBmYWlsZWQgdGVzdHMKLS1xLy0tcXVpZXQgICAgICAtLSBubyBvdXRwdXQgdW5sZXNzIG9uZSBvciBtb3JlIHRlc3RzIGZhaWwKLS1vLy0tc2xvdyAgICAgICAtLSBwcmludCB0aGUgc2xvd2VzdCAxMCB0ZXN0cwotICAgLS1oZWFkZXIgICAgIC0tIHByaW50IGhlYWRlciB3aXRoIGludGVycHJldGVyIGluZm8KLQotU2VsZWN0aW5nIHRlc3RzCi0KLS1yLy0tcmFuZG9taXplICAtLSByYW5kb21pemUgdGVzdCBleGVjdXRpb24gb3JkZXIgKHNlZSBiZWxvdykKLSAgIC0tcmFuZHNlZWQgICAtLSBwYXNzIGEgcmFuZG9tIHNlZWQgdG8gcmVwcm9kdWNlIGEgcHJldmlvdXMgcmFuZG9tIHJ1bgotLWYvLS1mcm9tZmlsZSAgIC0tIHJlYWQgbmFtZXMgb2YgdGVzdHMgdG8gcnVuIGZyb20gYSBmaWxlIChzZWUgYmVsb3cpCi0teC8tLWV4Y2x1ZGUgICAgLS0gYXJndW1lbnRzIGFyZSB0ZXN0cyB0byAqZXhjbHVkZSoKLS1zLy0tc2luZ2xlICAgICAtLSBzaW5nbGUgc3RlcCB0aHJvdWdoIGEgc2V0IG9mIHRlc3RzIChzZWUgYmVsb3cpCi0tbS8tLW1hdGNoIFBBVCAgLS0gbWF0Y2ggdGVzdCBjYXNlcyBhbmQgbWV0aG9kcyB3aXRoIGdsb2IgcGF0dGVybiBQQVQKLS1HLy0tZmFpbGZhc3QgICAtLSBmYWlsIGFzIHNvb24gYXMgYSB0ZXN0IGZhaWxzIChvbmx5IHdpdGggLXYgb3IgLVcpCi0tdS8tLXVzZSBSRVMxLFJFUzIsLi4uCi0gICAgICAgICAgICAgICAgLS0gc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyB0byBydW4KLS1NLy0tbWVtbGltaXQgTElNSVQKLSAgICAgICAgICAgICAgICAtLSBydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzCi0gICAtLXRlc3RkaXIgRElSCi0gICAgICAgICAgICAgICAgLS0gZXhlY3V0ZSB0ZXN0IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IChpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgb2YgdGhlIFB5dGhvbiBzdGRsaWIgdGVzdCBzdWl0ZSkKLQotU3BlY2lhbCBydW5zCi0KLS1sLy0tZmluZGxlYWtzICAtLSBpZiBHQyBpcyBhdmFpbGFibGUgZGV0ZWN0IHRlc3RzIHRoYXQgbGVhayBtZW1vcnkKLS1MLy0tcnVubGVha3MgICAtLSBydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdAotLVIvLS1odW50cmxlYWtzIFJVTkNPVU5UUwotICAgICAgICAgICAgICAgIC0tIHNlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgdi4gc2xvdykKLS1qLy0tbXVsdGlwcm9jZXNzIFBST0NFU1NFUwotICAgICAgICAgICAgICAgIC0tIHJ1biBQUk9DRVNTRVMgcHJvY2Vzc2VzIGF0IG9uY2UKLS1ULy0tY292ZXJhZ2UgICAtLSB0dXJuIG9uIGNvZGUgY292ZXJhZ2UgdHJhY2luZyB1c2luZyB0aGUgdHJhY2UgbW9kdWxlCi0tRC8tLWNvdmVyZGlyIERJUkVDVE9SWQotICAgICAgICAgICAgICAgIC0tIERpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0Ci0tTi8tLW5vY292ZXJkaXIgLS0gUHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzCi0tdC8tLXRocmVzaG9sZCBUSFJFU0hPTEQKLSAgICAgICAgICAgICAgICAtLSBjYWxsIGdjLnNldF90aHJlc2hvbGQoVEhSRVNIT0xEKQotLW4vLS1ub3dpbmRvd3MgIC0tIHN1cHByZXNzIGVycm9yIG1lc3NhZ2UgYm94ZXMgb24gV2luZG93cwotLUYvLS1mb3JldmVyICAgIC0tIHJ1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gZXJyb3IgaGFwcGVucwotCi0KLUFkZGl0aW9uYWwgT3B0aW9uIERldGFpbHM6CitFUElMT0cgPSAiIiJcCitBZGRpdGlvbmFsIG9wdGlvbiBkZXRhaWxzOgogCiAtciByYW5kb21pemVzIHRlc3QgZXhlY3V0aW9uIG9yZGVyLiBZb3UgY2FuIHVzZSAtLXJhbmRzZWVkPWludCB0byBwcm92aWRlIGEKIGludCBzZWVkIHZhbHVlIGZvciB0aGUgcmFuZG9taXplcjsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlcHJvZHVjaW5nIHRyb3VibGVzb21lCkBAIC0xNjgsMTEgKzEyMiwxMiBAQAogIyBXZSBpbXBvcnQgaW1wb3J0bGliICpBU0FQKiBpbiBvcmRlciB0byB0ZXN0ICMxNTM4NgogaW1wb3J0IGltcG9ydGxpYgogCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IGZhdWx0aGFuZGxlcgotaW1wb3J0IGdldG9wdAogaW1wb3J0IGlvCiBpbXBvcnQganNvbgoraW1wb3J0IGxvY2FsZQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCkBAIC0xOTQsNyArMTQ5LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiB0cnk6Ci0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzCisgICAgaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcsIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQogCkBAIC0yNDYsMjAgKzIwMSwyNjIgQEAKIFJFU09VUkNFX05BTUVTID0gKCdhdWRpbycsICdjdXJzZXMnLCAnbGFyZ2VmaWxlJywgJ25ldHdvcmsnLAogICAgICAgICAgICAgICAgICAgJ2RlY2ltYWwnLCAnY3B1JywgJ3N1YnByb2Nlc3MnLCAndXJsZmV0Y2gnLCAnZ3VpJykKIAotVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpCisjIFdoZW4gdGVzdHMgYXJlIHJ1biBmcm9tIHRoZSBQeXRob24gYnVpbGQgZGlyZWN0b3J5LCBpdCBpcyBiZXN0IHByYWN0aWNlCisjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBUaGlzIGVhc2VzIHRoZSBjbGVhbnVwIG9mIGxlZnRvdmVyCisjIGZpbGVzIHVzaW5nIHRoZSAibWFrZSBkaXN0Y2xlYW4iIGNvbW1hbmQuCitpZiBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCk6CisgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQorZWxzZToKKyAgICBURU1QRElSID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCitURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAKLWRlZiB1c2FnZShtc2cpOgotICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgIHByaW50KCJVc2UgLS1oZWxwIGZvciB1c2FnZSIsIGZpbGU9c3lzLnN0ZGVycikKLSAgICBzeXMuZXhpdCgyKQorY2xhc3MgX0FyZ1BhcnNlcihhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcik6CiAKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHN1cGVyKCkuZXJyb3IobWVzc2FnZSArICJcblBhc3MgLWggb3IgLS1oZWxwIGZvciBjb21wbGV0ZSBoZWxwLiIpCiAKLWRlZiBtYWluKHRlc3RzPU5vbmUsIHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKK2RlZiBfY3JlYXRlX3BhcnNlcigpOgorICAgICMgU2V0IHByb2cgdG8gcHJldmVudCB0aGUgdW5pbmZvcm1hdGl2ZSAiX19tYWluX18ucHkiIGZyb20gZGlzcGxheWluZyBpbgorICAgICMgZXJyb3IgbWVzc2FnZXMgd2hlbiB1c2luZyAicHl0aG9uIC1tIHRlc3QgLi4uIi4KKyAgICBwYXJzZXIgPSBfQXJnUGFyc2VyKHByb2c9J3JlZ3J0ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlPVVTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249REVTQ1JJUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9RVBJTE9HLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlbHA9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyKQorCisgICAgIyBBcmd1bWVudHMgd2l0aCB0aGlzIGNsYXVzZSBhZGRlZCB0byBpdHMgaGVscCBhcmUgZGVzY3JpYmVkIGZ1cnRoZXIgaW4KKyAgICAjIHRoZSBlcGlsb2cncyAiQWRkaXRpb25hbCBvcHRpb24gZGV0YWlscyIgc2VjdGlvbi4KKyAgICBtb3JlX2RldGFpbHMgPSAnICBTZWUgdGhlIHNlY3Rpb24gYXQgYm90dG9tIGZvciBtb3JlIGRldGFpbHMuJworCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdHZW5lcmFsIG9wdGlvbnMnKQorICAgICMgV2UgYWRkIGhlbHAgZXhwbGljaXRseSB0byBjb250cm9sIHdoYXQgYXJndW1lbnQgZ3JvdXAgaXQgcmVuZGVycyB1bmRlci4KKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS10aW1lb3V0JywgbWV0YXZhcj0nVElNRU9VVCcsIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vcmUgdGhhbiBUSU1FT1VUIHNlY29uZHM7IGRpc2FibGVkIGlmIFRJTUVPVVQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMgbmVnYXRpdmUgb3IgZXF1YWxzIHRvIHplcm8nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS13YWl0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nd2FpdCBmb3IgdXNlciBpbnB1dCwgZS5nLiwgYWxsb3cgYSBkZWJ1Z2dlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGJlIGF0dGFjaGVkJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc2xhdmVhcmdzJywgbWV0YXZhcj0nQVJHUycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctUycsICctLXN0YXJ0JywgbWV0YXZhcj0nU1RBUlQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0aGUgbmFtZSBvZiB0aGUgdGVzdCBhdCB3aGljaCB0byBzdGFydC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ1ZlcmJvc2l0eScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXcnLCAnLS12ZXJib3NlMicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1XJywgJy0tdmVyYm9zZTMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J25vIG91dHB1dCB1bmxlc3Mgb25lIG9yIG1vcmUgdGVzdHMgZmFpbCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbycsICctLXNsb3cnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdwcmludF9zbG93JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1oZWFkZXInLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCBoZWFkZXIgd2l0aCBpbnRlcnByZXRlciBpbmZvJykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnU2VsZWN0aW5nIHRlc3RzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmFuZG9taXplJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmFuZG9taXplIHRlc3QgZXhlY3V0aW9uIG9yZGVyLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJhbmRzZWVkJywgbWV0YXZhcj0nU0VFRCcsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3JhbmRvbV9zZWVkJywgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Bhc3MgYSByYW5kb20gc2VlZCB0byByZXByb2R1Y2UgYSBwcmV2aW91cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhbmRvbSBydW4nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mcm9tZmlsZScsIG1ldGF2YXI9J0ZJTEUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZWFkIG5hbWVzIG9mIHRlc3RzIHRvIHJ1biBmcm9tIGEgZmlsZS4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteCcsICctLWV4Y2x1ZGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhcmd1bWVudHMgYXJlIHRlc3RzIHRvICpleGNsdWRlKicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcycsICctLXNpbmdsZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NpbmdsZSBzdGVwIHRocm91Z2ggYSBzZXQgb2YgdGVzdHMuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tYXRjaCcsIG1ldGF2YXI9J1BBVCcsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J21hdGNoX3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbWF0Y2ggdGVzdCBjYXNlcyBhbmQgbWV0aG9kcyB3aXRoIGdsb2IgcGF0dGVybiBQQVQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUcnLCAnLS1mYWlsZmFzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZhaWwgYXMgc29vbiBhcyBhIHRlc3QgZmFpbHMgKG9ubHkgd2l0aCAtdiBvciAtVyknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11c2UnLCBtZXRhdmFyPSdSRVMxLFJFUzIsLi4uJywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCB0eXBlPXJlc291cmNlc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzcGVjaWZ5IHdoaWNoIHNwZWNpYWwgcmVzb3VyY2UgaW50ZW5zaXZlIHRlc3RzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gcnVuLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctTScsICctLW1lbWxpbWl0JywgbWV0YXZhcj0nTElNSVQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzLicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tdGVzdGRpcicsIG1ldGF2YXI9J0RJUicsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9cmVsYXRpdmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4ZWN1dGUgdGVzdCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhpbnN0ZWFkIG9mIHRoZSBQeXRob24gc3RkbGliIHRlc3Qgc3VpdGUpJykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnU3BlY2lhbCBydW5zJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1sJywgJy0tZmluZGxlYWtzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0naWYgR0MgaXMgYXZhaWxhYmxlIGRldGVjdCB0ZXN0cyB0aGF0IGxlYWsgbWVtb3J5JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1MJywgJy0tcnVubGVha3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctUicsICctLWh1bnRybGVha3MnLCBtZXRhdmFyPSdSVU5DT1VOVFMnLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJ5IHNsb3cpLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctaicsICctLW11bHRpcHJvY2VzcycsIG1ldGF2YXI9J1BST0NFU1NFUycsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VzZV9tcCcsIHR5cGU9aW50LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gUFJPQ0VTU0VTIHByb2Nlc3NlcyBhdCBvbmNlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1UJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd0cmFjZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3R1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZHVsZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctRCcsICctLWNvdmVyZGlyJywgbWV0YXZhcj0nRElSJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1yZWxhdGl2ZV9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLU4nLCAnLS1ub2NvdmVyZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PU5vbmUsIGRlc3Q9J2NvdmVyZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy10JywgJy0tdGhyZXNob2xkJywgbWV0YXZhcj0nVEhSRVNIT0xEJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2NhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1uJywgJy0tbm93aW5kb3dzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBib3hlcyBvbiBXaW5kb3dzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1GJywgJy0tZm9yZXZlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBoYXBwZW5zJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2FyZ3MnLCBuYXJncz1hcmdwYXJzZS5SRU1BSU5ERVIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorCisgICAgcmV0dXJuIHBhcnNlcgorCitkZWYgcmVsYXRpdmVfZmlsZW5hbWUoc3RyaW5nKToKKyAgICAjIENXRCBpcyByZXBsYWNlZCB3aXRoIGEgdGVtcG9yYXJ5IGRpciBiZWZvcmUgY2FsbGluZyBtYWluKCksIHNvIHdlCisgICAgIyBqb2luIGl0IHdpdGggdGhlIHNhdmVkIENXRCBzbyBpdCBlbmRzIHVwIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMuCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBzdHJpbmcpCisKK2RlZiBodW50cmxlYWtzKHN0cmluZyk6CisgICAgYXJncyA9IHN0cmluZy5zcGxpdCgnOicpCisgICAgaWYgbGVuKGFyZ3MpIG5vdCBpbiAoMiwgMyk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKAorICAgICAgICAgICAgJ25lZWRzIDIgb3IgMyBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKKyAgICBud2FybXVwID0gaW50KGFyZ3NbMF0pIGlmIGFyZ3NbMF0gZWxzZSA1CisgICAgbnRyYWNrZWQgPSBpbnQoYXJnc1sxXSkgaWYgYXJnc1sxXSBlbHNlIDQKKyAgICBmbmFtZSA9IGFyZ3NbMl0gaWYgbGVuKGFyZ3MpID4gMiBhbmQgYXJnc1syXSBlbHNlICdyZWZsb2cudHh0JworICAgIHJldHVybiBud2FybXVwLCBudHJhY2tlZCwgZm5hbWUKKworZGVmIHJlc291cmNlc19saXN0KHN0cmluZyk6CisgICAgdSA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gc3RyaW5nLnNwbGl0KCcsJyldCisgICAgZm9yIHIgaW4gdToKKyAgICAgICAgaWYgciA9PSAnYWxsJyBvciByID09ICdub25lJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgciA9IHJbMTpdCisgICAgICAgIGlmIHIgbm90IGluIFJFU09VUkNFX05BTUVTOgorICAgICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ2ludmFsaWQgcmVzb3VyY2U6ICcgKyByKQorICAgIHJldHVybiB1CisKK2RlZiBfcGFyc2VfYXJncyhhcmdzLCAqKmt3YXJncyk6CisgICAgIyBEZWZhdWx0cworICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKICAgICAgICAgIGV4Y2x1ZGU9RmFsc2UsIHNpbmdsZT1GYWxzZSwgcmFuZG9taXplPUZhbHNlLCBmcm9tZmlsZT1Ob25lLAogICAgICAgICAgZmluZGxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsIHRyYWNlPUZhbHNlLCBjb3ZlcmRpcj0nY292ZXJhZ2UnLAogICAgICAgICAgcnVubGVha3M9RmFsc2UsIGh1bnRybGVha3M9RmFsc2UsIHZlcmJvc2UyPUZhbHNlLCBwcmludF9zbG93PUZhbHNlLAogICAgICAgICAgcmFuZG9tX3NlZWQ9Tm9uZSwgdXNlX21wPU5vbmUsIHZlcmJvc2UzPUZhbHNlLCBmb3JldmVyPUZhbHNlLAotICAgICAgICAgaGVhZGVyPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSk6CisgICAgICAgICBoZWFkZXI9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lKQorICAgIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihucywgayk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVyIGlzIGFuIGludmFsaWQga2V5d29yZCBhcmd1bWVudCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB0aGlzIGZ1bmN0aW9uJyAlIGspCisgICAgICAgIHNldGF0dHIobnMsIGssIHYpCisgICAgaWYgbnMudXNlX3Jlc291cmNlcyBpcyBOb25lOgorICAgICAgICBucy51c2VfcmVzb3VyY2VzID0gW10KKworICAgIHBhcnNlciA9IF9jcmVhdGVfcGFyc2VyKCkKKyAgICBwYXJzZXIucGFyc2VfYXJncyhhcmdzPWFyZ3MsIG5hbWVzcGFjZT1ucykKKworICAgIGlmIG5zLnNpbmdsZSBhbmQgbnMuZnJvbWZpbGU6CisgICAgICAgIHBhcnNlci5lcnJvcigiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMudXNlX21wIGFuZCBucy50cmFjZToKKyAgICAgICAgcGFyc2VyLmVycm9yKCItVCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLmZpbmRsZWFrczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLm1lbWxpbWl0OgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1NIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLmZhaWxmYXN0IGFuZCBub3QgKG5zLnZlcmJvc2Ugb3IgbnMudmVyYm9zZTMpOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1HLy0tZmFpbGZhc3QgbmVlZHMgZWl0aGVyIC12IG9yIC1XIikKKworICAgIGlmIG5zLnF1aWV0OgorICAgICAgICBucy52ZXJib3NlID0gMAorICAgIGlmIG5zLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKToKKyAgICAgICAgICAgIGlmIG5zLnRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICBucy50aW1lb3V0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IFRoZSB0aW1lb3V0IG9wdGlvbiByZXF1aXJlcyAiCisgICAgICAgICAgICAgICAgICAiZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyIikKKyAgICAgICAgICAgIG5zLnRpbWVvdXQgPSBOb25lCisgICAgaWYgbnMudXNlX21wIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBucy51c2VfbXAgPD0gMDoKKyAgICAgICAgICAgICMgVXNlIGFsbCBjb3JlcyArIGV4dHJhcyBmb3IgdGVzdHMgdGhhdCBsaWtlIHRvIHNsZWVwCisgICAgICAgICAgICBucy51c2VfbXAgPSAyICsgKG9zLmNwdV9jb3VudCgpIG9yIDEpCisgICAgICAgIGlmIG5zLnVzZV9tcCA9PSAxOgorICAgICAgICAgICAgbnMudXNlX21wID0gTm9uZQorICAgIGlmIG5zLnVzZToKKyAgICAgICAgZm9yIGEgaW4gbnMudXNlOgorICAgICAgICAgICAgZm9yIHIgaW4gYToKKyAgICAgICAgICAgICAgICBpZiByID09ICdhbGwnOgorICAgICAgICAgICAgICAgICAgICBucy51c2VfcmVzb3VyY2VzWzpdID0gUkVTT1VSQ0VfTkFNRVMKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiByID09ICdub25lJzoKKyAgICAgICAgICAgICAgICAgICAgZGVsIG5zLnVzZV9yZXNvdXJjZXNbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZW1vdmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHIgPSByWzE6XQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgciBpbiBucy51c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgbnMudXNlX3Jlc291cmNlcy5yZW1vdmUocikKKyAgICAgICAgICAgICAgICBlbGlmIHIgbm90IGluIG5zLnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICAgICAgICAgIG5zLnVzZV9yZXNvdXJjZXMuYXBwZW5kKHIpCisgICAgaWYgbnMucmFuZG9tX3NlZWQgaXMgbm90IE5vbmU6CisgICAgICAgIG5zLnJhbmRvbWl6ZSA9IFRydWUKKworICAgIHJldHVybiBucworCisKK2RlZiBydW5fdGVzdF9pbl9zdWJwcm9jZXNzKHRlc3RuYW1lLCBucyk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiB0ZXN0IGluIGEgc3VicHJvY2VzcyB3aXRoIC0tc2xhdmVhcmdzLgorCisgICAgbnMgaXMgdGhlIG9wdGlvbiBOYW1lc3BhY2UgcGFyc2VkIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50cy4gcmVncnRlc3QKKyAgICBpcyBpbnZva2VkIGluIGEgc3VicHJvY2VzcyB3aXRoIHRoZSAtLXNsYXZlYXJncyBhcmd1bWVudDsgd2hlbiB0aGUKKyAgICBzdWJwcm9jZXNzIGV4aXRzLCBpdHMgcmV0dXJuIGNvZGUsIHN0ZG91dCBhbmQgc3RkZXJyIGFyZSByZXR1cm5lZCBhcyBhCisgICAgMy10dXBsZS4KKyAgICAiIiIKKyAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCisgICAgYmFzZV9jbWQgPSAoW3N5cy5leGVjdXRhYmxlXSArIHN1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkgKworICAgICAgICAgICAgICAgIFsnLVgnLCAnZmF1bHRoYW5kbGVyJywgJy1tJywgJ3Rlc3QucmVncnRlc3QnXSkKKworICAgIHNsYXZlYXJncyA9ICgKKyAgICAgICAgICAgICh0ZXN0bmFtZSwgbnMudmVyYm9zZSwgbnMucXVpZXQpLAorICAgICAgICAgICAgZGljdChodW50cmxlYWtzPW5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXM9bnMudXNlX3Jlc291cmNlcywKKyAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCisgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgZmFpbGZhc3Q9bnMuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKSkKKyAgICAjIFJ1bm5pbmcgdGhlIGNoaWxkIGZyb20gdGhlIHNhbWUgd29ya2luZyBkaXJlY3RvcnkgYXMgcmVncnRlc3QncyBvcmlnaW5hbAorICAgICMgaW52b2NhdGlvbiBlbnN1cmVzIHRoYXQgVEVNUERJUiBmb3IgdGhlIGNoaWxkIGlzIHRoZSBzYW1lIHdoZW4KKyAgICAjIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSBpcyB0cnVlLiBTZWUgaXNzdWUgMTUzMDAuCisgICAgcG9wZW4gPSBQb3BlbihiYXNlX2NtZCArIFsnLS1zbGF2ZWFyZ3MnLCBqc29uLmR1bXBzKHNsYXZlYXJncyldLAorICAgICAgICAgICAgICAgICAgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFLAorICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCisgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JyksCisgICAgICAgICAgICAgICAgICBjd2Q9c3VwcG9ydC5TQVZFRENXRCkKKyAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICByZXRjb2RlID0gcG9wZW4ud2FpdCgpCisgICAgcmV0dXJuIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyCisKKworZGVmIG1haW4odGVzdHM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICIiIkV4ZWN1dGUgYSB0ZXN0IHN1aXRlLgogCiAgICAgVGhpcyBhbHNvIHBhcnNlcyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgbW9kaWZpZXMgaXRzIGJlaGF2aW9yCkBAIC0yODIsNyArNDc5LDYgQEAKICAgICBkaXJlY3RseSB0byBzZXQgdGhlIHZhbHVlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHNldCBieSBmbGFncwogICAgIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgIiIiCi0KICAgICAjIERpc3BsYXkgdGhlIFB5dGhvbiB0cmFjZWJhY2sgb24gZmF0YWwgZXJyb3JzIChlLmcuIHNlZ2ZhdWx0KQogICAgIGZhdWx0aGFuZGxlci5lbmFibGUoYWxsX3RocmVhZHM9VHJ1ZSkKIApAQCAtMjk4LDE4NyArNDk0LDUxIEBACiAgICAgcmVwbGFjZV9zdGRvdXQoKQogCiAgICAgc3VwcG9ydC5yZWNvcmRfb3JpZ2luYWxfc3Rkb3V0KHN5cy5zdGRvdXQpCi0gICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdodnF4c29TOnJmOmx1OnQ6VEQ6TkxSOkZkd1dNOm5qOkdtOicsCi0gICAgICAgICAgICBbJ2hlbHAnLCAndmVyYm9zZScsICd2ZXJib3NlMicsICd2ZXJib3NlMycsICdxdWlldCcsCi0gICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAnc2luZ2xlJywgJ3Nsb3cnLCAncmFuZG9taXplJywgJ2Zyb21maWxlPScsICdmaW5kbGVha3MnLAotICAgICAgICAgICAgICd1c2U9JywgJ3RocmVzaG9sZD0nLCAnY292ZXJkaXI9JywgJ25vY292ZXJkaXInLAotICAgICAgICAgICAgICdydW5sZWFrcycsICdodW50cmxlYWtzPScsICdtZW1saW1pdD0nLCAncmFuZHNlZWQ9JywKLSAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzPScsICdjb3ZlcmFnZScsICdzbGF2ZWFyZ3M9JywgJ2ZvcmV2ZXInLCAnZGVidWcnLAotICAgICAgICAgICAgICdzdGFydD0nLCAnbm93aW5kb3dzJywgJ2hlYWRlcicsICd0ZXN0ZGlyPScsICd0aW1lb3V0PScsICd3YWl0JywKLSAgICAgICAgICAgICAnZmFpbGZhc3QnLCAnbWF0Y2g9J10pCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHVzYWdlKG1zZykKIAotICAgICMgRGVmYXVsdHMKLSAgICBpZiByYW5kb21fc2VlZCBpcyBOb25lOgotICAgICAgICByYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCi0gICAgaWYgdXNlX3Jlc291cmNlcyBpcyBOb25lOgotICAgICAgICB1c2VfcmVzb3VyY2VzID0gW10KLSAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgc3RhcnQgPSBOb25lCi0gICAgdGltZW91dCA9IE5vbmUKLSAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6Ci0gICAgICAgICAgICBwcmludChfX2RvY19fKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgbyBpbiAoJy12JywgJy0tdmVyYm9zZScpOgotICAgICAgICAgICAgdmVyYm9zZSArPSAxCi0gICAgICAgIGVsaWYgbyBpbiAoJy13JywgJy0tdmVyYm9zZTInKToKLSAgICAgICAgICAgIHZlcmJvc2UyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctZCcsICctLWRlYnVnJyk6Ci0gICAgICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLVcnLCAnLS12ZXJib3NlMycpOgotICAgICAgICAgICAgdmVyYm9zZTMgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1HJywgJy0tZmFpbGZhc3QnKToKLSAgICAgICAgICAgIGZhaWxmYXN0ID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctcScsICctLXF1aWV0Jyk6Ci0gICAgICAgICAgICBxdWlldCA9IFRydWU7Ci0gICAgICAgICAgICB2ZXJib3NlID0gMAotICAgICAgICBlbGlmIG8gaW4gKCcteCcsICctLWV4Y2x1ZGUnKToKLSAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1TJywgJy0tc3RhcnQnKToKLSAgICAgICAgICAgIHN0YXJ0ID0gYQotICAgICAgICBlbGlmIG8gaW4gKCctcycsICctLXNpbmdsZScpOgotICAgICAgICAgICAgc2luZ2xlID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctbycsICctLXNsb3cnKToKLSAgICAgICAgICAgIHByaW50X3Nsb3cgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1yJywgJy0tcmFuZG9taXplJyk6Ci0gICAgICAgICAgICByYW5kb21pemUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyA9PSAnLS1yYW5kc2VlZCc6Ci0gICAgICAgICAgICByYW5kb21pemUgPSBUcnVlCi0gICAgICAgICAgICByYW5kb21fc2VlZCA9IGludChhKQotICAgICAgICBlbGlmIG8gaW4gKCctZicsICctLWZyb21maWxlJyk6Ci0gICAgICAgICAgICBmcm9tZmlsZSA9IGEKLSAgICAgICAgZWxpZiBvIGluICgnLW0nLCAnLS1tYXRjaCcpOgotICAgICAgICAgICAgbWF0Y2hfdGVzdHMgPSBhCi0gICAgICAgIGVsaWYgbyBpbiAoJy1sJywgJy0tZmluZGxlYWtzJyk6Ci0gICAgICAgICAgICBmaW5kbGVha3MgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1MJywgJy0tcnVubGVha3MnKToKLSAgICAgICAgICAgIHJ1bmxlYWtzID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctdCcsICctLXRocmVzaG9sZCcpOgotICAgICAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgICAgICBnYy5zZXRfdGhyZXNob2xkKGludChhKSkKLSAgICAgICAgZWxpZiBvIGluICgnLVQnLCAnLS1jb3ZlcmFnZScpOgotICAgICAgICAgICAgdHJhY2UgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1EJywgJy0tY292ZXJkaXInKToKLSAgICAgICAgICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKLSAgICAgICAgICAgICMgbmVlZCAgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZ29lcyB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgotICAgICAgICAgICAgY292ZXJkaXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgYSkKLSAgICAgICAgZWxpZiBvIGluICgnLU4nLCAnLS1ub2NvdmVyZGlyJyk6Ci0gICAgICAgICAgICBjb3ZlcmRpciA9IE5vbmUKLSAgICAgICAgZWxpZiBvIGluICgnLVInLCAnLS1odW50cmxlYWtzJyk6Ci0gICAgICAgICAgICBodW50cmxlYWtzID0gYS5zcGxpdCgnOicpCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgbm90IGluICgyLCAzKToKLSAgICAgICAgICAgICAgICBwcmludChhLCBodW50cmxlYWtzKQotICAgICAgICAgICAgICAgIHVzYWdlKCctUiB0YWtlcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCi0gICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1swXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gNQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gaW50KGh1bnRybGVha3NbMF0pCi0gICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1sxXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzFdID0gNAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzFdID0gaW50KGh1bnRybGVha3NbMV0pCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgPT0gMiBvciBub3QgaHVudHJsZWFrc1syXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzI6XSA9IFsicmVmbG9nLnR4dCJdCi0gICAgICAgICAgICAjIEF2b2lkIGZhbHNlIHBvc2l0aXZlcyBkdWUgdG8gdmFyaW91cyBjYWNoZXMKLSAgICAgICAgICAgICMgZmlsbGluZyBzbG93bHkgd2l0aCByYW5kb20gZGF0YToKLSAgICAgICAgICAgIHdhcm1fY2FjaGVzKCkKLSAgICAgICAgZWxpZiBvIGluICgnLU0nLCAnLS1tZW1saW1pdCcpOgotICAgICAgICAgICAgc3VwcG9ydC5zZXRfbWVtbGltaXQoYSkKLSAgICAgICAgZWxpZiBvIGluICgnLXUnLCAnLS11c2UnKToKLSAgICAgICAgICAgIHUgPSBbeC5sb3dlcigpIGZvciB4IGluIGEuc3BsaXQoJywnKV0KLSAgICAgICAgICAgIGZvciByIGluIHU6Ci0gICAgICAgICAgICAgICAgaWYgciA9PSAnYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlc1s6XSA9IFJFU09VUkNFX05BTUVTCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgciA9PSAnbm9uZSc6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCB1c2VfcmVzb3VyY2VzWzpdCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgcmVtb3ZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBpZiByWzBdID09ICctJzoKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICByID0gclsxOl0KLSAgICAgICAgICAgICAgICBpZiByIG5vdCBpbiBSRVNPVVJDRV9OQU1FUzoKLSAgICAgICAgICAgICAgICAgICAgdXNhZ2UoJ0ludmFsaWQgLXUvLS11c2Ugb3B0aW9uOiAnICsgYSkKLSAgICAgICAgICAgICAgICBpZiByZW1vdmU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHIgaW4gdXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMucmVtb3ZlKHIpCi0gICAgICAgICAgICAgICAgZWxpZiByIG5vdCBpbiB1c2VfcmVzb3VyY2VzOgotICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzLmFwcGVuZChyKQotICAgICAgICBlbGlmIG8gaW4gKCctbicsICctLW5vd2luZG93cycpOgotICAgICAgICAgICAgaW1wb3J0IG1zdmNydAotICAgICAgICAgICAgbXN2Y3J0LlNldEVycm9yTW9kZShtc3ZjcnQuU0VNX0ZBSUxDUklUSUNBTEVSUk9SU3wKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0FMSUdOTUVOVEZBVUxURVhDRVBUfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PR1BGQVVMVEVSUk9SQk9YfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PT1BFTkZJTEVFUlJPUkJPWCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICMgcmVsZWFzZSBidWlsZAotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZShtLCBtc3ZjcnQuQ1JUREJHX01PREVfRklMRSkKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUobSwgbXN2Y3J0LkNSVERCR19GSUxFX1NUREVSUikKLSAgICAgICAgZWxpZiBvIGluICgnLUYnLCAnLS1mb3JldmVyJyk6Ci0gICAgICAgICAgICBmb3JldmVyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctaicsICctLW11bHRpcHJvY2VzcycpOgotICAgICAgICAgICAgdXNlX21wID0gaW50KGEpCi0gICAgICAgICAgICBpZiB1c2VfbXAgPD0gMDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgICAgICAgICAgICAgIyBVc2UgYWxsIGNvcmVzICsgZXh0cmFzIGZvciB0ZXN0cyB0aGF0IGxpa2UgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICAgdXNlX21wID0gMiArIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICB1c2VfbXAgPSAzCi0gICAgICAgICAgICBpZiB1c2VfbXAgPT0gMToKLSAgICAgICAgICAgICAgICB1c2VfbXAgPSBOb25lCi0gICAgICAgIGVsaWYgbyA9PSAnLS1oZWFkZXInOgotICAgICAgICAgICAgaGVhZGVyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gPT0gJy0tc2xhdmVhcmdzJzoKLSAgICAgICAgICAgIGFyZ3MsIGt3YXJncyA9IGpzb24ubG9hZHMoYSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgJycKLSAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQ0hJTERfRVJST1IsIHN0cihlKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBwcmludCgpICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKLSAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKLSAgICAgICAgICAgIHN5cy5leGl0KDApCi0gICAgICAgIGVsaWYgbyA9PSAnLS10ZXN0ZGlyJzoKLSAgICAgICAgICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKLSAgICAgICAgICAgICMgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZW5kcyB1cCB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgotICAgICAgICAgICAgdGVzdGRpciA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBhKQotICAgICAgICBlbGlmIG8gPT0gJy0tdGltZW91dCc6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyk6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGZsb2F0KGEpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgotICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogVGhlIHRpbWVvdXQgb3B0aW9uIHJlcXVpcmVzICIKLSAgICAgICAgICAgICAgICAgICAgICAiZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyIikKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICBlbGlmIG8gPT0gJy0td2FpdCc6Ci0gICAgICAgICAgICBpbnB1dCgiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpCisgICAgbnMgPSBfcGFyc2VfYXJncyhzeXMuYXJndlsxOl0sICoqa3dhcmdzKQorCisgICAgaWYgbnMuaHVudHJsZWFrczoKKyAgICAgICAgIyBBdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZHVlIHRvIHZhcmlvdXMgY2FjaGVzCisgICAgICAgICMgZmlsbGluZyBzbG93bHkgd2l0aCByYW5kb20gZGF0YToKKyAgICAgICAgd2FybV9jYWNoZXMoKQorICAgIGlmIG5zLm1lbWxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICBzdXBwb3J0LnNldF9tZW1saW1pdChucy5tZW1saW1pdCkKKyAgICBpZiBucy50aHJlc2hvbGQgaXMgbm90IE5vbmU6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBnYy5zZXRfdGhyZXNob2xkKG5zLnRocmVzaG9sZCkKKyAgICBpZiBucy5ub3dpbmRvd3M6CisgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgbXN2Y3J0LlNldEVycm9yTW9kZShtc3ZjcnQuU0VNX0ZBSUxDUklUSUNBTEVSUk9SU3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PQUxJR05NRU5URkFVTFRFWENFUFR8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0dQRkFVTFRFUlJPUkJPWHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PT1BFTkZJTEVFUlJPUkJPWCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyByZWxlYXNlIGJ1aWxkCisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgoIk5vIGhhbmRsZXIgZm9yIG9wdGlvbiB7fS4gIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyAiCi0gICAgICAgICAgICAgICAgICAgImF0IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcuIikuZm9ybWF0KG8pLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgIGlmIHNpbmdsZSBhbmQgZnJvbWZpbGU6Ci0gICAgICAgIHVzYWdlKCItcyBhbmQgLWYgZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIHRyYWNlOgotICAgICAgICB1c2FnZSgiLVQgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgdXNlX21wIGFuZCBmaW5kbGVha3M6Ci0gICAgICAgIHVzYWdlKCItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIHN1cHBvcnQubWF4X21lbXVzZToKLSAgICAgICAgdXNhZ2UoIi1NIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIGZhaWxmYXN0IGFuZCBub3QgKHZlcmJvc2Ugb3IgdmVyYm9zZTMpOgotICAgICAgICB1c2FnZSgiLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVciKQorICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgorICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlKG0sIG1zdmNydC5DUlREQkdfTU9ERV9GSUxFKQorICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRGaWxlKG0sIG1zdmNydC5DUlREQkdfRklMRV9TVERFUlIpCisgICAgaWYgbnMud2FpdDoKKyAgICAgICAgaW5wdXQoIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iKQorCisgICAgaWYgbnMuc2xhdmVhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKG5zLnNsYXZlYXJncykKKyAgICAgICAgaWYga3dhcmdzLmdldCgnaHVudHJsZWFrcycpOgorICAgICAgICAgICAgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgJycKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgcmVzdWx0ID0gQ0hJTERfRVJST1IsIHN0cihlKQorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgcHJpbnQoKSAgICMgRm9yY2UgYSBuZXdsaW5lIChqdXN0IGluIGNhc2UpCisgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKKyAgICAgICAgc3lzLmV4aXQoMCkKIAogICAgIGdvb2QgPSBbXQogICAgIGJhZCA9IFtdCkBAIC00ODcsMTIgKzU0NywxMiBAQAogICAgIGVudmlyb25tZW50X2NoYW5nZWQgPSBbXQogICAgIGludGVycnVwdGVkID0gRmFsc2UKIAotICAgIGlmIGZpbmRsZWFrczoKKyAgICBpZiBucy5maW5kbGVha3M6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBnYwogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBwcmludCgnTm8gR0MgYXZhaWxhYmxlLCBkaXNhYmxpbmcgZmluZGxlYWtzLicpCi0gICAgICAgICAgICBmaW5kbGVha3MgPSBGYWxzZQorICAgICAgICAgICAgbnMuZmluZGxlYWtzID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IHRvIHJlcG9ydCBnYXJiYWdlIHRoYXQgaXMgbm90CiAgICAgICAgICAgICAjIGZyZWVhYmxlIGJ5IHJlZmVyZW5jZSBjb3VudGluZyBhbG9uZS4gIEJ5IGRlZmF1bHQgb25seQpAQCAtNTAwLDgyICs1NjAsODcgQEAKICAgICAgICAgICAgICNnYy5zZXRfZGVidWcoZ2MuREVCVUdfU0FWRUFMTCkKICAgICAgICAgICAgIGZvdW5kX2dhcmJhZ2UgPSBbXQogCi0gICAgaWYgc2luZ2xlOgorICAgIGlmIG5zLmh1bnRybGVha3M6CisgICAgICAgIHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXAgPSBGYWxzZQorCisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAncHluZXh0dGVzdCcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RzID0gW25leHRfdGVzdF0KLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB0ZXN0cyA9IFtuZXh0X3Rlc3RdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgaWYgZnJvbWZpbGU6CisgICAgaWYgbnMuZnJvbWZpbGU6CiAgICAgICAgIHRlc3RzID0gW10KLSAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmcm9tZmlsZSkpCi0gICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCi0gICAgICAgIGZvciBsaW5lIGluIGZwOgotICAgICAgICAgICAgbGluZSA9IGNvdW50X3BhdC5zdWIoJycsIGxpbmUpCi0gICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQotICAgICAgICAgICAgaWYgZ3V0cyBhbmQgbm90IGd1dHNbMF0uc3RhcnRzd2l0aCgnIycpOgotICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChndXRzKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgbnMuZnJvbWZpbGUpKSBhcyBmcDoKKyAgICAgICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICAgICBsaW5lID0gY291bnRfcGF0LnN1YignJywgbGluZSkKKyAgICAgICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQorICAgICAgICAgICAgICAgIGlmIGd1dHMgYW5kIG5vdCBndXRzWzBdLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKGd1dHMpCiAKICAgICAjIFN0cmlwIC5weSBleHRlbnNpb25zLgotICAgIHJlbW92ZXB5KGFyZ3MpCisgICAgcmVtb3ZlcHkobnMuYXJncykKICAgICByZW1vdmVweSh0ZXN0cykKIAogICAgIHN0ZHRlc3RzID0gU1REVEVTVFNbOl0KICAgICBub3R0ZXN0cyA9IE5PVFRFU1RTLmNvcHkoKQotICAgIGlmIGV4Y2x1ZGU6Ci0gICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICBpZiBucy5leGNsdWRlOgorICAgICAgICBmb3IgYXJnIGluIG5zLmFyZ3M6CiAgICAgICAgICAgICBpZiBhcmcgaW4gc3RkdGVzdHM6CiAgICAgICAgICAgICAgICAgc3RkdGVzdHMucmVtb3ZlKGFyZykKICAgICAgICAgICAgIG5vdHRlc3RzLmFkZChhcmcpCi0gICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBucy5hcmdzID0gW10KIAogICAgICMgRm9yIGEgcGFydGlhbCBydW4sIHdlIGRvIG5vdCBuZWVkIHRvIGNsdXR0ZXIgdGhlIG91dHB1dC4KLSAgICBpZiB2ZXJib3NlIG9yIGhlYWRlciBvciBub3QgKHF1aWV0IG9yIHNpbmdsZSBvciB0ZXN0cyBvciBhcmdzKToKKyAgICBpZiBucy52ZXJib3NlIG9yIG5zLmhlYWRlciBvciBub3QgKG5zLnF1aWV0IG9yIG5zLnNpbmdsZSBvciB0ZXN0cyBvciBucy5hcmdzKToKICAgICAgICAgIyBQcmludCBiYXNpYyBwbGF0Zm9ybSBpbmZvcm1hdGlvbgogICAgICAgICBwcmludCgiPT0iLCBwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwgKnN5cy52ZXJzaW9uLnNwbGl0KCkpCiAgICAgICAgIHByaW50KCI9PSAgIiwgcGxhdGZvcm0ucGxhdGZvcm0oYWxpYXNlZD1UcnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAiJXMtZW5kaWFuIiAlIHN5cy5ieXRlb3JkZXIpCisgICAgICAgIHByaW50KCI9PSAgIiwgImhhc2ggYWxnb3JpdGhtOiIsIHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLAorICAgICAgICAgICAgICAiNjRiaXQiIGlmIHN5cy5tYXhzaXplID4gMioqMzIgZWxzZSAiMzJiaXQiKQogICAgICAgICBwcmludCgiPT0gICIsIG9zLmdldGN3ZCgpKQogICAgICAgICBwcmludCgiVGVzdGluZyB3aXRoIGZsYWdzOiIsIHN5cy5mbGFncykKIAogICAgICMgaWYgdGVzdGRpciBpcyBzZXQsIHRoZW4gd2UgYXJlIG5vdCBydW5uaW5nIHRoZSBweXRob24gdGVzdHMgc3VpdGUsIHNvCiAgICAgIyBkb24ndCBhZGQgZGVmYXVsdCB0ZXN0cyB0byBiZSBleGVjdXRlZCBvciBza2lwcGVkIChwYXNzIGVtcHR5IHZhbHVlcykKLSAgICBpZiB0ZXN0ZGlyOgotICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBsaXN0KCksIHNldCgpKQorICAgIGlmIG5zLnRlc3RkaXI6CisgICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKG5zLnRlc3RkaXIsIGxpc3QoKSwgc2V0KCkpCiAgICAgZWxzZToKLSAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHModGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQorICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyhucy50ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCiAKLSAgICBzZWxlY3RlZCA9IHRlc3RzIG9yIGFyZ3Mgb3IgYWxsdGVzdHMKLSAgICBpZiBzaW5nbGU6CisgICAgc2VsZWN0ZWQgPSB0ZXN0cyBvciBucy5hcmdzIG9yIGFsbHRlc3RzCisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkWzoxXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gYWxsdGVzdHNbYWxsdGVzdHMuaW5kZXgoc2VsZWN0ZWRbMF0pKzFdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IE5vbmUKICAgICAjIFJlbW92ZSBhbGwgdGhlIHNlbGVjdGVkIHRlc3RzIHRoYXQgcHJlY2VkZSBzdGFydCBpZiBpdCdzIHNldC4KLSAgICBpZiBzdGFydDoKKyAgICBpZiBucy5zdGFydDoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVsIHNlbGVjdGVkWzpzZWxlY3RlZC5pbmRleChzdGFydCldCisgICAgICAgICAgICBkZWwgc2VsZWN0ZWRbOnNlbGVjdGVkLmluZGV4KG5zLnN0YXJ0KV0KICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBzdGFydGluZyB0ZXN0ICglcyksIHVzaW5nIGFsbCB0ZXN0cyIgJSBzdGFydCkKLSAgICBpZiByYW5kb21pemU6Ci0gICAgICAgIHJhbmRvbS5zZWVkKHJhbmRvbV9zZWVkKQotICAgICAgICBwcmludCgiVXNpbmcgcmFuZG9tIHNlZWQiLCByYW5kb21fc2VlZCkKKyAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBmaW5kIHN0YXJ0aW5nIHRlc3QgKCVzKSwgdXNpbmcgYWxsIHRlc3RzIiAlIG5zLnN0YXJ0KQorICAgIGlmIG5zLnJhbmRvbWl6ZToKKyAgICAgICAgaWYgbnMucmFuZG9tX3NlZWQgaXMgTm9uZToKKyAgICAgICAgICAgIG5zLnJhbmRvbV9zZWVkID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwMDAwMCkKKyAgICAgICAgcmFuZG9tLnNlZWQobnMucmFuZG9tX3NlZWQpCisgICAgICAgIHByaW50KCJVc2luZyByYW5kb20gc2VlZCIsIG5zLnJhbmRvbV9zZWVkKQogICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxlY3RlZCkKLSAgICBpZiB0cmFjZToKKyAgICBpZiBucy50cmFjZToKICAgICAgICAgaW1wb3J0IHRyYWNlLCB0ZW1wZmlsZQogICAgICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMuYmFzZV9wcmVmaXgsIHN5cy5iYXNlX2V4ZWNfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT1GYWxzZSwgY291bnQ9VHJ1ZSkKIAogICAgIHRlc3RfdGltZXMgPSBbXQotICAgIHN1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICAgICAjIFRlbGwgdGVzdHMgdG8gYmUgbW9kZXJhdGVseSBxdWlldAotICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IHVzZV9yZXNvdXJjZXMKKyAgICBzdXBwb3J0LnZlcmJvc2UgPSBucy52ZXJib3NlICAgICAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKKyAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBucy51c2VfcmVzb3VyY2VzCiAgICAgc2F2ZV9tb2R1bGVzID0gc3lzLm1vZHVsZXMua2V5cygpCiAKICAgICBkZWYgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KToKQEAgLTU5Myw3ICs2NTgsNyBAQAogICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQodGVzdCkKICAgICAgICAgICAgIHJlc291cmNlX2RlbmllZHMuYXBwZW5kKHRlc3QpCiAKLSAgICBpZiBmb3JldmVyOgorICAgIGlmIG5zLmZvcmV2ZXI6CiAgICAgICAgIGRlZiB0ZXN0X2ZvcmV2ZXIodGVzdHM9bGlzdChzZWxlY3RlZCkpOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKQEAgLTYwOCwxOSArNjczLDE2IEBACiAgICAgICAgIHRlc3RfY291bnQgPSAnL3t9Jy5mb3JtYXQobGVuKHNlbGVjdGVkKSkKICAgICAgICAgdGVzdF9jb3VudF93aWR0aCA9IGxlbih0ZXN0X2NvdW50KSAtIDEKIAotICAgIGlmIHVzZV9tcDoKKyAgICBpZiBucy51c2VfbXA6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcHJpbnQoIk11bHRpcHJvY2VzcyBvcHRpb24gcmVxdWlyZXMgdGhyZWFkIHN1cHBvcnQiKQogICAgICAgICAgICAgc3lzLmV4aXQoMikKICAgICAgICAgZnJvbSBxdWV1ZSBpbXBvcnQgUXVldWUKLSAgICAgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQotICAgICAgICBkZWJ1Z19vdXRwdXRfcGF0ID0gcmUuY29tcGlsZShyIlxbXGQrIHJlZnNcXSQiKQorICAgICAgICBkZWJ1Z19vdXRwdXRfcGF0ID0gcmUuY29tcGlsZShyIlxbXGQrIHJlZnMsIFxkKyBibG9ja3NcXSQiKQogICAgICAgICBvdXRwdXQgPSBRdWV1ZSgpCiAgICAgICAgIHBlbmRpbmcgPSBNdWx0aXByb2Nlc3NUZXN0cyh0ZXN0cykKLSAgICAgICAgb3B0X2FyZ3MgPSBzdXBwb3J0LmFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCi0gICAgICAgIGJhc2VfY21kID0gW3N5cy5leGVjdXRhYmxlXSArIG9wdF9hcmdzICsgWyctbScsICd0ZXN0LnJlZ3J0ZXN0J10KICAgICAgICAgZGVmIHdvcmsoKToKICAgICAgICAgICAgICMgQSB3b3JrZXIgdGhyZWFkLgogICAgICAgICAgICAgdHJ5OgpAQCAtNjMwLDI0ICs2OTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgIGFyZ3NfdHVwbGUgPSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAodGVzdCwgdmVyYm9zZSwgcXVpZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgZGljdChodW50cmxlYWtzPWh1bnRybGVha3MsIHVzZV9yZXNvdXJjZXM9dXNlX3Jlc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9ZGVidWcsIG91dHB1dF9vbl9mYWlsdXJlPXZlcmJvc2UzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIGZhaWxmYXN0PWZhaWxmYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1tYXRjaF90ZXN0cykKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAjIC1FIGlzIG5lZWRlZCBieSBzb21lIHRlc3RzLCBlLmcuIHRlc3RfaW1wb3J0Ci0gICAgICAgICAgICAgICAgICAgICMgUnVubmluZyB0aGUgY2hpbGQgZnJvbSB0aGUgc2FtZSB3b3JraW5nIGRpcmVjdG9yeSBlbnN1cmVzCi0gICAgICAgICAgICAgICAgICAgICMgdGhhdCBURU1QRElSIGZvciB0aGUgY2hpbGQgaXMgdGhlIHNhbWUgd2hlbgotICAgICAgICAgICAgICAgICAgICAjIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSBpcyB0cnVlLiBTZWUgaXNzdWUgMTUzMDAuCi0gICAgICAgICAgICAgICAgICAgIHBvcGVuID0gUG9wZW4oYmFzZV9jbWQgKyBbJy0tc2xhdmVhcmdzJywganNvbi5kdW1wcyhhcmdzX3R1cGxlKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz0ob3MubmFtZSAhPSAnbnQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXN1cHBvcnQuU0FWRURDV0QpCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgICAgICAgICByZXRjb2RlID0gcG9wZW4ud2FpdCgpCisgICAgICAgICAgICAgICAgICAgIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyID0gcnVuX3Rlc3RfaW5fc3VicHJvY2Vzcyh0ZXN0LCBucykKICAgICAgICAgICAgICAgICAgICAgIyBTdHJpcCBsYXN0IHJlZmNvdW50IG91dHB1dCBsaW5lIGlmIGl0IGV4aXN0cywgc2luY2UgaXQKICAgICAgICAgICAgICAgICAgICAgIyBjb21lcyBmcm9tIHRoZSBzaHV0ZG93biBvZiB0aGUgaW50ZXJwcmV0ZXIgaW4gdGhlIHN1YmNvbW1hbmQuCiAgICAgICAgICAgICAgICAgICAgIHN0ZGVyciA9IGRlYnVnX291dHB1dF9wYXQuc3ViKCIiLCBzdGRlcnIpCkBAIC02NjQsMTkgKzcwOSwxOSBAQAogICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgd29ya2VycyA9IFtUaHJlYWQodGFyZ2V0PXdvcmspIGZvciBpIGluIHJhbmdlKHVzZV9tcCldCisgICAgICAgIHdvcmtlcnMgPSBbVGhyZWFkKHRhcmdldD13b3JrKSBmb3IgaSBpbiByYW5nZShucy51c2VfbXApXQogICAgICAgICBmb3Igd29ya2VyIGluIHdvcmtlcnM6CiAgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQogICAgICAgICBmaW5pc2hlZCA9IDAKICAgICAgICAgdGVzdF9pbmRleCA9IDEKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgZmluaXNoZWQgPCB1c2VfbXA6CisgICAgICAgICAgICB3aGlsZSBmaW5pc2hlZCA8IG5zLnVzZV9tcDoKICAgICAgICAgICAgICAgICB0ZXN0LCBzdGRvdXQsIHN0ZGVyciwgcmVzdWx0ID0gb3V0cHV0LmdldCgpCiAgICAgICAgICAgICAgICAgaWYgdGVzdCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCArPSAxCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQotICAgICAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICBpZiBub3QgbnMucXVpZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICJbezE6ezB9fXsyfS97M31dIHs0fSIgaWYgYmFkIGVsc2UgIlt7MTp7MH19ezJ9XSB7NH0iCiAgICAgICAgICAgICAgICAgICAgIHByaW50KGZtdC5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LApAQCAtNjk5LDI5ICs3NDQsMzAgQEAKICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKICAgICBlbHNlOgogICAgICAgICBmb3IgdGVzdF9pbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUodGVzdHMsIDEpOgotICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgaWYgbm90IG5zLnF1aWV0OgogICAgICAgICAgICAgICAgIGZtdCA9ICJbezE6ezB9fXsyfS97M31dIHs0fSIgaWYgYmFkIGVsc2UgIlt7MTp7MH19ezJ9XSB7NH0iCiAgICAgICAgICAgICAgICAgcHJpbnQoZm10LmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgdGVzdF9jb3VudF93aWR0aCwgdGVzdF9pbmRleCwgdGVzdF9jb3VudCwgbGVuKGJhZCksIHRlc3QpKQogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgaWYgdHJhY2U6CisgICAgICAgICAgICBpZiBucy50cmFjZToKICAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIHRyYWNpbmcgY29kZSBjb3ZlcmFnZSwgdGhlbiB3ZSBkb24ndCBleGl0IHdpdGggc3RhdHVzCiAgICAgICAgICAgICAgICAgIyBpZiBvbiBhIGZhbHNlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4uCi0gICAgICAgICAgICAgICAgdHJhY2VyLnJ1bmN0eCgncnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgdGltZW91dD10aW1lb3V0KScsCisgICAgICAgICAgICAgICAgdHJhY2VyLnJ1bmN0eCgncnVudGVzdCh0ZXN0LCBucy52ZXJib3NlLCBucy5xdWlldCwgdGltZW91dD1ucy50aW1lb3V0KScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPWdsb2JhbHMoKSwgbG9jYWxzPXZhcnMoKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT12ZXJib3NlMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIGZhaWxmYXN0PWZhaWxmYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW1hdGNoX3Rlc3RzKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KHRlc3QsIG5zLnZlcmJvc2UsIG5zLnF1aWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1ucy50aW1lb3V0LCBmYWlsZmFzdD1ucy5mYWlsZmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cykKICAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgaWYgZmluZGxlYWtzOgorICAgICAgICAgICAgaWYgbnMuZmluZGxlYWtzOgogICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICAgICAgICAgIGlmIGdjLmdhcmJhZ2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiB0ZXN0IGNyZWF0ZWQiLCBsZW4oZ2MuZ2FyYmFnZSksIGVuZD0nICcpCkBAIC03NDIsMTEgKzc4OCwxMSBAQAogICAgICAgICBvbWl0dGVkID0gc2V0KHNlbGVjdGVkKSAtIHNldChnb29kKSAtIHNldChiYWQpIC0gc2V0KHNraXBwZWQpCiAgICAgICAgIHByaW50KGNvdW50KGxlbihvbWl0dGVkKSwgInRlc3QiKSwgIm9taXR0ZWQ6IikKICAgICAgICAgcHJpbnRsaXN0KG9taXR0ZWQpCi0gICAgaWYgZ29vZCBhbmQgbm90IHF1aWV0OgorICAgIGlmIGdvb2QgYW5kIG5vdCBucy5xdWlldDoKICAgICAgICAgaWYgbm90IGJhZCBhbmQgbm90IHNraXBwZWQgYW5kIG5vdCBpbnRlcnJ1cHRlZCBhbmQgbGVuKGdvb2QpID4gMToKICAgICAgICAgICAgIHByaW50KCJBbGwiLCBlbmQ9JyAnKQogICAgICAgICBwcmludChjb3VudChsZW4oZ29vZCksICJ0ZXN0IiksICJPSy4iKQotICAgIGlmIHByaW50X3Nsb3c6CisgICAgaWYgbnMucHJpbnRfc2xvdzoKICAgICAgICAgdGVzdF90aW1lcy5zb3J0KHJldmVyc2U9VHJ1ZSkKICAgICAgICAgcHJpbnQoIjEwIHNsb3dlc3QgdGVzdHM6IikKICAgICAgICAgZm9yIHRpbWUsIHRlc3QgaW4gdGVzdF90aW1lc1s6MTBdOgpAQCAtNzYwLDMyICs4MDYsMTkgQEAKICAgICAgICAgcHJpbnQoInt9IGFsdGVyZWQgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudDoiLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgY291bnQobGVuKGVudmlyb25tZW50X2NoYW5nZWQpLCAidGVzdCIpKSkKICAgICAgICAgcHJpbnRsaXN0KGVudmlyb25tZW50X2NoYW5nZWQpCi0gICAgaWYgc2tpcHBlZCBhbmQgbm90IHF1aWV0OgorICAgIGlmIHNraXBwZWQgYW5kIG5vdCBucy5xdWlldDoKICAgICAgICAgcHJpbnQoY291bnQobGVuKHNraXBwZWQpLCAidGVzdCIpLCAic2tpcHBlZDoiKQogICAgICAgICBwcmludGxpc3Qoc2tpcHBlZCkKIAotICAgICAgICBlID0gX0V4cGVjdGVkU2tpcHMoKQotICAgICAgICBwbGF0ID0gc3lzLnBsYXRmb3JtCi0gICAgICAgIGlmIGUuaXN2YWxpZCgpOgotICAgICAgICAgICAgc3VycHJpc2UgPSBzZXQoc2tpcHBlZCkgLSBlLmdldGV4cGVjdGVkKCkgLSBzZXQocmVzb3VyY2VfZGVuaWVkcykKLSAgICAgICAgICAgIGlmIHN1cnByaXNlOgotICAgICAgICAgICAgICAgIHByaW50KGNvdW50KGxlbihzdXJwcmlzZSksICJza2lwIiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBvbiIsIHBsYXQgKyAiOiIpCi0gICAgICAgICAgICAgICAgcHJpbnRsaXN0KHN1cnByaXNlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCgiVGhvc2Ugc2tpcHMgYXJlIGFsbCBleHBlY3RlZCBvbiIsIHBsYXQgKyAiLiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgiQXNrIHNvbWVvbmUgdG8gdGVhY2ggcmVncnRlc3QucHkgYWJvdXQgd2hpY2ggdGVzdHMgYXJlIikKLSAgICAgICAgICAgIHByaW50KCJleHBlY3RlZCB0byBnZXQgc2tpcHBlZCBvbiIsIHBsYXQgKyAiLiIpCi0KLSAgICBpZiB2ZXJib3NlMiBhbmQgYmFkOgorICAgIGlmIG5zLnZlcmJvc2UyIGFuZCBiYWQ6CiAgICAgICAgIHByaW50KCJSZS1ydW5uaW5nIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUiKQogICAgICAgICBmb3IgdGVzdCBpbiBiYWQ6CiAgICAgICAgICAgICBwcmludCgiUmUtcnVubmluZyB0ZXN0ICVyIGluIHZlcmJvc2UgbW9kZSIgJSB0ZXN0KQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmVyYm9zZSA9IFRydWUKLSAgICAgICAgICAgICAgICBvayA9IHJ1bnRlc3QodGVzdCwgVHJ1ZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLCB0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICAgICAgbnMudmVyYm9zZSA9IFRydWUKKyAgICAgICAgICAgICAgICBvayA9IHJ1bnRlc3QodGVzdCwgVHJ1ZSwgbnMucXVpZXQsIG5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCkKICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQwogICAgICAgICAgICAgICAgIHByaW50KCkKQEAgLTc5MywxOCArODI2LDE4IEBACiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcmFpc2UKIAotICAgIGlmIHNpbmdsZToKKyAgICBpZiBucy5zaW5nbGU6CiAgICAgICAgIGlmIG5leHRfc2luZ2xlX3Rlc3Q6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZnA6CiAgICAgICAgICAgICAgICAgZnAud3JpdGUobmV4dF9zaW5nbGVfdGVzdCArICdcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCiAKLSAgICBpZiB0cmFjZToKKyAgICBpZiBucy50cmFjZToKICAgICAgICAgciA9IHRyYWNlci5yZXN1bHRzKCkKLSAgICAgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPWNvdmVyZGlyKQorICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9bnMuY292ZXJkaXIpCiAKLSAgICBpZiBydW5sZWFrczoKKyAgICBpZiBucy5ydW5sZWFrczoKICAgICAgICAgb3Muc3lzdGVtKCJsZWFrcyAlZCIgJSBvcy5nZXRwaWQoKSkKIAogICAgIHN5cy5leGl0KGxlbihiYWQpID4gMCBvciBpbnRlcnJ1cHRlZCkKQEAgLTg3Nyw3ICs5MTAsNyBAQAogICAgIGF0ZXhpdC5yZWdpc3RlcihyZXN0b3JlX3N0ZG91dCkKIAogZGVmIHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsCi0gICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkZWJ1Zz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLAorICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLAogICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lLAogICAgICAgICAgICAgdGltZW91dD1Ob25lKToKICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdC4KQEAgLTg4NSwxNCArOTE4LDE1IEBACiAgICAgdGVzdCAtLSB0aGUgbmFtZSBvZiB0aGUgdGVzdAogICAgIHZlcmJvc2UgLS0gaWYgdHJ1ZSwgcHJpbnQgbW9yZSBtZXNzYWdlcwogICAgIHF1aWV0IC0tIGlmIHRydWUsIGRvbid0IHByaW50ICdza2lwcGVkJyBtZXNzYWdlcyAocHJvYmFibHkgcmVkdW5kYW50KQotICAgIHRlc3RfdGltZXMgLS0gYSBsaXN0IG9mICh0aW1lLCB0ZXN0X25hbWUpIHBhaXJzCiAgICAgaHVudHJsZWFrcyAtLSBydW4gbXVsdGlwbGUgdGltZXMgdG8gdGVzdCBmb3IgbGVha3M7IHJlcXVpcmVzIGEgZGVidWcKICAgICAgICAgICAgICAgICAgIGJ1aWxkOyBhIHRyaXBsZSBjb3JyZXNwb25kaW5nIHRvIC1SJ3MgdGhyZWUgYXJndW1lbnRzCisgICAgdXNlX3Jlc291cmNlcyAtLSBsaXN0IG9mIGV4dHJhIHJlc291cmNlcyB0byB1c2UKICAgICBvdXRwdXRfb25fZmFpbHVyZSAtLSBpZiB0cnVlLCBkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUKICAgICB0aW1lb3V0IC0tIGR1bXAgdGhlIHRyYWNlYmFjayBhbmQgZXhpdCBpZiBhIHRlc3QgdGFrZXMgbW9yZSB0aGFuCiAgICAgICAgICAgICAgICB0aW1lb3V0IHNlY29uZHMKKyAgICBmYWlsZmFzdCwgbWF0Y2hfdGVzdHMgLS0gU2VlIHJlZ3J0ZXN0IGNvbW1hbmQtbGluZSBmbGFncyBmb3IgdGhlc2UuCiAKLSAgICBSZXR1cm5zIG9uZSBvZiB0aGUgdGVzdCByZXN1bHQgY29uc3RhbnRzOgorICAgIFJldHVybnMgdGhlIHR1cGxlIHJlc3VsdCwgdGVzdF90aW1lLCB3aGVyZSByZXN1bHQgaXMgb25lIG9mIHRoZSBjb25zdGFudHM6CiAgICAgICAgIElOVEVSUlVQVEVEICAgICAgS2V5Ym9hcmRJbnRlcnJ1cHQgd2hlbiBydW4gdW5kZXIgLWoKICAgICAgICAgUkVTT1VSQ0VfREVOSUVEICB0ZXN0IHNraXBwZWQgYmVjYXVzZSByZXNvdXJjZSBkZW5pZWQKICAgICAgICAgU0tJUFBFRCAgICAgICAgICB0ZXN0IHNraXBwZWQgZm9yIHNvbWUgb3RoZXIgcmVhc29uCkBAIC05MzAsNyArOTY0LDcgQEAKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3RyZWFtCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0cmVhbQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywgZGlzcGxheV9mYWlsdXJlPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPUZhbHNlKQogICAgICAgICAgICAgICAgIGlmIHJlc3VsdFswXSA9PSBGQUlMRUQ6CiAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cmVhbS5nZXR2YWx1ZSgpCiAgICAgICAgICAgICAgICAgICAgIG9yaWdfc3RkZXJyLndyaXRlKG91dHB1dCkKQEAgLTk0MCw3ICs5NzQsNyBAQAogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBvcmlnX3N0ZGVycgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLAorICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPW5vdCB2ZXJib3NlKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgZmluYWxseToKQEAgLTk5MiwxMCArMTAyNiwxMiBAQAogICAgICAgICAgICAgICAgICAnb3MuZW52aXJvbicsICdzeXMucGF0aCcsICdzeXMucGF0aF9ob29rcycsICdfX2ltcG9ydF9fJywKICAgICAgICAgICAgICAgICAgJ3dhcm5pbmdzLmZpbHRlcnMnLCAnYXN5bmNvcmUuc29ja2V0X21hcCcsCiAgICAgICAgICAgICAgICAgICdsb2dnaW5nLl9oYW5kbGVycycsICdsb2dnaW5nLl9oYW5kbGVyTGlzdCcsICdzeXMuZ2V0dHJhY2UnLAotICAgICAgICAgICAgICAgICAnc3lzLndhcm5vcHRpb25zJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAotICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywKKyAgICAgICAgICAgICAgICAgJ3N5cy53YXJub3B0aW9ucycsCisgICAgICAgICAgICAgICAgICMgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKSBtYXkgcmVsZWFzZSByZWYKKyAgICAgICAgICAgICAgICAgIyB0byBhIHRocmVhZCwgc28gY2hlY2sgcHJvY2Vzc2VzIGZpcnN0LgorICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAogICAgICAgICAgICAgICAgICAnc3lzY29uZmlnLl9DT05GSUdfVkFSUycsICdzeXNjb25maWcuX0lOU1RBTExfU0NIRU1FUycsCi0gICAgICAgICAgICAgICAgICdzdXBwb3J0LlRFU1RGTicsCisgICAgICAgICAgICAgICAgICdzdXBwb3J0LlRFU1RGTicsICdsb2NhbGUnLCAnd2FybmluZ3Muc2hvd3dhcm5pbmcnLAogICAgICAgICAgICAgICAgICkKIAogICAgIGRlZiBnZXRfc3lzX2FyZ3Yoc2VsZik6CkBAIC0xMTIzLDYgKzExNTksOCBAQAogICAgIGRlZiBnZXRfbXVsdGlwcm9jZXNzaW5nX3Byb2Nlc3NfX2RhbmdsaW5nKHNlbGYpOgogICAgICAgICBpZiBub3QgbXVsdGlwcm9jZXNzaW5nOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBVbmpvaW5lZCBwcm9jZXNzIG9iamVjdHMgY2FuIHN1cnZpdmUgYWZ0ZXIgcHJvY2VzcyBleGl0cworICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCiAgICAgICAgICMgVGhpcyBjb3BpZXMgdGhlIHdlYWtyZWZzIHdpdGhvdXQgbWFraW5nIGFueSBzdHJvbmcgcmVmZXJlbmNlCiAgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcuY29weSgpCiAgICAgZGVmIHJlc3RvcmVfbXVsdGlwcm9jZXNzaW5nX3Byb2Nlc3NfX2RhbmdsaW5nKHNlbGYsIHNhdmVkKToKQEAgLTExNjQsNiArMTIwMiwyNSBAQAogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHN1cHBvcnQuVEVTVEZOKToKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHN1cHBvcnQuVEVTVEZOKQogCisgICAgX2xjID0gW2dldGF0dHIobG9jYWxlLCBsYykgZm9yIGxjIGluIGRpcihsb2NhbGUpCisgICAgICAgICAgIGlmIGxjLnN0YXJ0c3dpdGgoJ0xDXycpXQorICAgIGRlZiBnZXRfbG9jYWxlKHNlbGYpOgorICAgICAgICBwYWlyaW5ncyA9IFtdCisgICAgICAgIGZvciBsYyBpbiBzZWxmLl9sYzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYWlyaW5ncy5hcHBlbmQoKGxjLCBsb2NhbGUuc2V0bG9jYWxlKGxjLCBOb25lKSkpCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmV0dXJuIHBhaXJpbmdzCisgICAgZGVmIHJlc3RvcmVfbG9jYWxlKHNlbGYsIHNhdmVkKToKKyAgICAgICAgZm9yIGxjLCBzZXR0aW5nIGluIHNhdmVkOgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsYywgc2V0dGluZykKKworICAgIGRlZiBnZXRfd2FybmluZ3Nfc2hvd3dhcm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiB3YXJuaW5ncy5zaG93d2FybmluZworICAgIGRlZiByZXN0b3JlX3dhcm5pbmdzX3Nob3d3YXJuaW5nKHNlbGYsIGZ4bik6CisgICAgICAgIHdhcm5pbmdzLnNob3d3YXJuaW5nID0gZnhuCisKICAgICBkZWYgcmVzb3VyY2VfaW5mbyhzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5yZXNvdXJjZXM6CiAgICAgICAgICAgICBtZXRob2Rfc3VmZml4ID0gbmFtZS5yZXBsYWNlKCcuJywgJ18nKQpAQCAtMTE5OCw3ICsxMjU1LDcgQEAKIAogCiBkZWYgcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwKLSAgICAgICAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIGRlYnVnPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CiAgICAgc3VwcG9ydC51bmxvYWQodGVzdCkKIAogICAgIHRlc3RfdGltZSA9IDAuMApAQCAtMTIxMSwxOCArMTI2OCwxOCBAQAogICAgICAgICAgICAgYWJzdGVzdCA9ICd0ZXN0LicgKyB0ZXN0CiAgICAgICAgIHdpdGggc2F2ZWRfdGVzdF9lbnZpcm9ubWVudCh0ZXN0LCB2ZXJib3NlLCBxdWlldCkgYXMgZW52aXJvbm1lbnQ6CiAgICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIHRoZV9wYWNrYWdlID0gX19pbXBvcnRfXyhhYnN0ZXN0LCBnbG9iYWxzKCksIGxvY2FscygpLCBbXSkKLSAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBnZXRhdHRyKHRoZV9wYWNrYWdlLCB0ZXN0KQorICAgICAgICAgICAgdGhlX21vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKGFic3Rlc3QpCiAgICAgICAgICAgICAjIElmIHRoZSB0ZXN0IGhhcyBhIHRlc3RfbWFpbiwgdGhhdCB3aWxsIHJ1biB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAgICAgICMgdGVzdHMuICBJZiBub3QsIHVzZSBub3JtYWwgdW5pdHRlc3QgdGVzdCBsb2FkaW5nLgogICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSBnZXRhdHRyKHRoZV9tb2R1bGUsICJ0ZXN0X21haW4iLCBOb25lKQogICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tTW9kdWxlKHRoZV9tb2R1bGUpCi0gICAgICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSBsYW1iZGE6IHN1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3RzKQorICAgICAgICAgICAgICAgIGRlZiB0ZXN0X3J1bm5lcigpOgorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZSh0aGVfbW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0cykKICAgICAgICAgICAgIHRlc3RfcnVubmVyKCkKICAgICAgICAgICAgIGlmIGh1bnRybGVha3M6Ci0gICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCB0ZXN0X3J1bm5lciwKLSAgICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICByZWZsZWFrID0gZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIHRlc3RfcnVubmVyLCBodW50cmxlYWtzKQogICAgICAgICAgICAgdGVzdF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCiAgICAgZXhjZXB0IHN1cHBvcnQuUmVzb3VyY2VEZW5pZWQgYXMgbXNnOgogICAgICAgICBpZiBub3QgcXVpZXQ6CkBAIC0xMzI4LDQxICsxMzg1LDUwIEBACiAgICAgICAgIGZvciBvYmogaW4gYWJjLl9fc3ViY2xhc3Nlc19fKCkgKyBbYWJjXToKICAgICAgICAgICAgIGFiY3Nbb2JqXSA9IG9iai5fYWJjX3JlZ2lzdHJ5LmNvcHkoKQogCi0gICAgaWYgaW5kaXJlY3RfdGVzdDoKLSAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgotICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCgpCi0gICAgZWxzZToKLSAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3RoZV9tb2R1bGUuX19uYW1lX19dCi0gICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIHRoZV9tb2R1bGUuX19uYW1lX18pCi0KLSAgICBkZWx0YXMgPSBbXQogICAgIG53YXJtdXAsIG50cmFja2VkLCBmbmFtZSA9IGh1bnRybGVha3MKICAgICBmbmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmbmFtZSkKICAgICByZXBjb3VudCA9IG53YXJtdXAgKyBudHJhY2tlZAorICAgIHJjX2RlbHRhcyA9IFswXSAqIHJlcGNvdW50CisgICAgYWxsb2NfZGVsdGFzID0gWzBdICogcmVwY291bnQKKwogICAgIHByaW50KCJiZWdpbm5pbmciLCByZXBjb3VudCwgInJlcGV0aXRpb25zIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgIHByaW50KCgiMTIzNDU2Nzg5MCIqKHJlcGNvdW50Ly8xMCArIDEpKVs6cmVwY291bnRdLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKICAgICBmb3IgaSBpbiByYW5nZShyZXBjb3VudCk6Ci0gICAgICAgIHJjX2JlZm9yZSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcnVuX3RoZV90ZXN0KCkKKyAgICAgICAgaW5kaXJlY3RfdGVzdCgpCisgICAgICAgIGFsbG9jX2FmdGVyLCByY19hZnRlciA9IGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIGFiY3MpCiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy4nKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKLSAgICAgICAgcmNfYWZ0ZXIgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCiAgICAgICAgIGlmIGkgPj0gbndhcm11cDoKLSAgICAgICAgICAgIGRlbHRhcy5hcHBlbmQocmNfYWZ0ZXIgLSByY19iZWZvcmUpCisgICAgICAgICAgICByY19kZWx0YXNbaV0gPSByY19hZnRlciAtIHJjX2JlZm9yZQorICAgICAgICAgICAgYWxsb2NfZGVsdGFzW2ldID0gYWxsb2NfYWZ0ZXIgLSBhbGxvY19iZWZvcmUKKyAgICAgICAgYWxsb2NfYmVmb3JlLCByY19iZWZvcmUgPSBhbGxvY19hZnRlciwgcmNfYWZ0ZXIKICAgICBwcmludChmaWxlPXN5cy5zdGRlcnIpCi0gICAgaWYgYW55KGRlbHRhcyk6Ci0gICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgcmVmZXJlbmNlcywgc3VtPSVzJyAlICh0ZXN0LCBkZWx0YXMsIHN1bShkZWx0YXMpKQotICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgIHdpdGggb3BlbihmbmFtZSwgImEiKSBhcyByZWZyZXA6Ci0gICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQotICAgICAgICAgICAgcmVmcmVwLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKKyAgICAjIFRoZXNlIGNoZWNrZXJzIHJldHVybiBGYWxzZSBvbiBzdWNjZXNzLCBUcnVlIG9uIGZhaWx1cmUKKyAgICBkZWYgY2hlY2tfcmNfZGVsdGFzKGRlbHRhcyk6CisgICAgICAgIHJldHVybiBhbnkoZGVsdGFzKQorICAgIGRlZiBjaGVja19hbGxvY19kZWx0YXMoZGVsdGFzKToKKyAgICAgICAgIyBBdCBsZWFzdCAxLzNyZCBvZiAwcworICAgICAgICBpZiAzICogZGVsdGFzLmNvdW50KDApIDwgbGVuKGRlbHRhcyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIE5vdGhpbmcgZWxzZSB0aGFuIDFzLCAwcyBhbmQgLTFzCisgICAgICAgIGlmIG5vdCBzZXQoZGVsdGFzKSA8PSB7MSwwLC0xfToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGZhaWxlZCA9IEZhbHNlCisgICAgZm9yIGRlbHRhcywgaXRlbV9uYW1lLCBjaGVja2VyIGluIFsKKyAgICAgICAgKHJjX2RlbHRhcywgJ3JlZmVyZW5jZXMnLCBjaGVja19yY19kZWx0YXMpLAorICAgICAgICAoYWxsb2NfZGVsdGFzLCAnbWVtb3J5IGJsb2NrcycsIGNoZWNrX2FsbG9jX2RlbHRhcyldOgorICAgICAgICBpZiBjaGVja2VyKGRlbHRhcyk6CisgICAgICAgICAgICBtc2cgPSAnJXMgbGVha2VkICVzICVzLCBzdW09JXMnICUgKAorICAgICAgICAgICAgICAgIHRlc3QsIGRlbHRhc1tud2FybXVwOl0sIGl0ZW1fbmFtZSwgc3VtKGRlbHRhcykpCisgICAgICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKKyAgICAgICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQorICAgICAgICAgICAgICAgIHJlZnJlcC5mbHVzaCgpCisgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgcmV0dXJuIGZhaWxlZAogCiBkZWYgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcyk6CiAgICAgaW1wb3J0IGdjLCBjb3B5cmVnCkBAIC0xNDI4LDggKzE0OTQsMTEgQEAKICAgICBlbHNlOgogICAgICAgICBjdHlwZXMuX3Jlc2V0X2NhY2hlKCkKIAotICAgICMgQ29sbGVjdCBjeWNsaWMgdHJhc2guCisgICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaCBhbmQgcmVhZCBtZW1vcnkgc3RhdGlzdGljcyBpbW1lZGlhdGVseSBhZnRlci4KKyAgICBmdW5jMSA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MKKyAgICBmdW5jMiA9IHN5cy5nZXR0b3RhbHJlZmNvdW50CiAgICAgZ2MuY29sbGVjdCgpCisgICAgcmV0dXJuIGZ1bmMxKCksIGZ1bmMyKCkKIAogZGVmIHdhcm1fY2FjaGVzKCk6CiAgICAgIyBjaGFyIGNhY2hlCkBAIC0xNDcyLDMwNyArMTU0MSwxMCBAQAogICAgIHByaW50KGZpbGwoJyAnLmpvaW4oc3RyKGVsdCkgZm9yIGVsdCBpbiBzb3J0ZWQoeCkpLCB3aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PWJsYW5rcywgc3Vic2VxdWVudF9pbmRlbnQ9YmxhbmtzKSkKIAotIyBNYXAgc3lzLnBsYXRmb3JtIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2VuYW1lcyBvZiB0ZXN0cwotIyBleHBlY3RlZCB0byBiZSBza2lwcGVkIG9uIHRoYXQgcGxhdGZvcm0uCi0jCi0jIFNwZWNpYWwgY2FzZXM6Ci0jICAgICB0ZXN0X3BlcDI3NwotIyAgICAgICAgIFRoZSBfRXhwZWN0ZWRTa2lwcyBjb25zdHJ1Y3RvciBhZGRzIHRoaXMgdG8gdGhlIHNldCBvZiBleHBlY3RlZAotIyAgICAgICAgIHNraXBzIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzLgotIyAgICAgdGVzdF90aW1lb3V0Ci0jICAgICAgICAgQ29udHJvbGxlZCBieSB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZC4gIFJlcXVpcmVzIHRoZSBuZXR3b3JrCi0jICAgICAgICAgcmVzb3VyY2UgYW5kIGEgc29ja2V0IG1vZHVsZS4KLSMKLSMgVGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBldmVyeXdoZXJlIGV4Y2VwdCBvbiBvbmUgcGxhdGZvcm0KLSMgYXJlIGFsc28gaGFuZGxlZCBzZXBhcmF0ZWx5LgogCi1fZXhwZWN0YXRpb25zID0gKAotICAgICgnd2luMzInLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3J5cHQKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kYm0KLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZmNudGwKLSAgICAgICAgdGVzdF9mb3JrMQotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2RibV9uZGJtCi0gICAgICAgIHRlc3RfZ3JwCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9waXBlcwotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgdGVzdF9wb3NpeAotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3B3ZAotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgIHRlc3Rfc3lzbG9nCi0gICAgICAgIHRlc3RfdGhyZWFkc2lnbmFscwotICAgICAgICB0ZXN0X3dhaXQzCi0gICAgICAgIHRlc3Rfd2FpdDQKLSAgICAgICAgIiIiKSwKLSAgICAoJ2xpbnV4JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgICIiIiksCi0gICAgKCd1bml4d2FyZScsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdvcGVudW5peCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdzY29fc3YnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9hc3luY2hhdAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9nZXR0ZXh0Ci0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3RfcXVldWUKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgdGVzdF90aHJlYWQKLSAgICAgICAgdGVzdF90aHJlYWRlZF9pbXBvcnQKLSAgICAgICAgdGVzdF90aHJlYWRlZHRlbXBmaWxlCi0gICAgICAgIHRlc3RfdGhyZWFkaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdkYXJ3aW4nLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2dkYgotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X21pbmlkb20KLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgIiIiKSwKLSAgICAoJ3N1bm9zJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZ3ppcAotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF96aXBmaWxlCi0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnaHAtdXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3RfemlwZmlsZQotICAgICAgICB0ZXN0X3psaWIKLSAgICAgICAgIiIiKSwKLSAgICAoJ2N5Z3dpbicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2lvY3RsCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9zb2NrZXRzZXJ2ZXIKLSAgICAgICAgIiIiKSwKLSAgICAoJ29zMmVteCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2F1ZGlvb3AKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X21tYXAKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wdHkKLSAgICAgICAgdGVzdF9yZXNvdXJjZQotICAgICAgICB0ZXN0X3NpZ25hbAotICAgICAgICAiIiIpLAotICAgICgnZnJlZWJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF90aW1lb3V0Ci0gICAgICAgIHRlc3RfdXJsbGlibmV0Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdhaXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9iejIKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfemlwaW1wb3J0Ci0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnb3BlbmJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N0eXBlcwotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9ub3JtYWxpemF0aW9uCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCduZXRic2QnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdHlwZXMKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0pCi0KLWNsYXNzIF9FeHBlY3RlZFNraXBzOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG9zLnBhdGgKLSAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3RpbWVvdXQKLQotICAgICAgICBzZWxmLnZhbGlkID0gRmFsc2UKLSAgICAgICAgZXhwZWN0ZWQgPSBOb25lCi0gICAgICAgIGZvciBpdGVtIGluIF9leHBlY3RhdGlvbnM6Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChpdGVtWzBdKToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGl0ZW1bMV0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBleHBlY3RlZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBzZXQoZXhwZWN0ZWQuc3BsaXQoKSkKLQotICAgICAgICAgICAgIyBUaGVzZSBhcmUgYnJva2VuIHRlc3RzLCBmb3Igbm93IHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0uCi0gICAgICAgICAgICAjIFhYWCBGaXggdGhlc2UhCi0gICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICAjIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0sIGV2ZW4gTGludXgKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3BlcDI3NycpCi0KLSAgICAgICAgICAgICMgZG9jdGVzdCwgcHJvZmlsZSBhbmQgY1Byb2ZpbGUgdGVzdHMgZmFpbCB3aGVuIHRoZSBjb2RlYyBmb3IgdGhlCi0gICAgICAgICAgICAjIGZzIGVuY29kaW5nIGlzbid0IGJ1aWx0IGluIGJlY2F1c2UgUHlVbmljb2RlX0RlY29kZSgpIGFkZHMgdHdvCi0gICAgICAgICAgICAjIGNhbGxzIGludG8gUHl0aG9uLgotICAgICAgICAgICAgZW5jcyA9ICgidXRmLTgiLCAibGF0aW4tMSIsICJhc2NpaSIsICJtYmNzIiwgInV0Zi0xNiIsICJ1dGYtMzIiKQotICAgICAgICAgICAgaWYgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpLmxvd2VyKCkgbm90IGluIGVuY3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcHJvZmlsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfY1Byb2ZpbGUnKQotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X2RvY3Rlc3QnKQotCi0gICAgICAgICAgICBpZiB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZDoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF90aW1lb3V0JykKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6Ci0gICAgICAgICAgICAgICAgIyB0ZXN0X3NxbGl0ZSBpcyBvbmx5IHJlbGlhYmxlIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIGxpYnJhcnkKLSAgICAgICAgICAgICAgICAjIGlzIGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uCi0gICAgICAgICAgICAgICAgV0lOX09OTFkgPSB7InRlc3RfdW5pY29kZV9maWxlIiwgInRlc3Rfd2lucmVnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF93aW5zb3VuZCIsICJ0ZXN0X3N0YXJ0ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfc3FsaXRlIiwgInRlc3RfbXNpbGliIn0KLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkIHw9IFdJTl9PTkxZCi0KLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnc3Vub3M1JzoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnB5dGhvbl9pc19vcHRpbWl6ZWQoKToKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgidGVzdF9nZGIiKQotCi0gICAgICAgICAgICBzZWxmLnZhbGlkID0gVHJ1ZQotCi0gICAgZGVmIGlzdmFsaWQoc2VsZik6Ci0gICAgICAgICJSZXR1cm4gdHJ1ZSBpZmYgX0V4cGVjdGVkU2tpcHMga25vd3MgYWJvdXQgdGhlIGN1cnJlbnQgcGxhdGZvcm0uIgotICAgICAgICByZXR1cm4gc2VsZi52YWxpZAotCi0gICAgZGVmIGdldGV4cGVjdGVkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gc2V0IG9mIHRlc3QgbmFtZXMgd2UgZXhwZWN0IHRvIHNraXAgb24gY3VycmVudCBwbGF0Zm9ybS4KLQotICAgICAgICBzZWxmLmlzdmFsaWQoKSBtdXN0IGJlIHRydWUuCi0gICAgICAgICIiIgotCi0gICAgICAgIGFzc2VydCBzZWxmLmlzdmFsaWQoKQotICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZAotCi1kZWYgX21ha2VfdGVtcF9kaXJfZm9yX2J1aWxkKFRFTVBESVIpOgotICAgICMgV2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnksIGl0IGlzIGJlc3QgcHJhY3RpY2UKLSAgICAjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBJdCBlYXNlcyB0aGUgY2xlYW51cCBvZiBsZWZ0b3ZlcgotICAgICMgZmlsZXMgdXNpbmcgY29tbWFuZCAibWFrZSBkaXN0Y2xlYW4iLgorZGVmIG1haW5faW5fdGVtcF9jd2QoKToKKyAgICAiIiJSdW4gbWFpbigpIGluIGEgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5LiIiIgogICAgIGlmIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKLSAgICAgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQotICAgICAgICBURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKFRFTVBESVIpCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CkBAIC0xNzgxLDEwICsxNTUzLDE2IEBACiAgICAgIyBEZWZpbmUgYSB3cml0YWJsZSB0ZW1wIGRpciB0aGF0IHdpbGwgYmUgdXNlZCBhcyBjd2Qgd2hpbGUgcnVubmluZwogICAgICMgdGhlIHRlc3RzLiBUaGUgbmFtZSBvZiB0aGUgZGlyIGluY2x1ZGVzIHRoZSBwaWQgdG8gYWxsb3cgcGFyYWxsZWwKICAgICAjIHRlc3RpbmcgKHNlZSB0aGUgLWogb3B0aW9uKS4KLSAgICBURVNUQ1dEID0gJ3Rlc3RfcHl0aG9uX3t9Jy5mb3JtYXQob3MuZ2V0cGlkKCkpCisgICAgdGVzdF9jd2QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKyAgICB0ZXN0X2N3ZCA9IG9zLnBhdGguam9pbihURU1QRElSLCB0ZXN0X2N3ZCkKIAotICAgIFRFU1RDV0QgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgVEVTVENXRCkKLSAgICByZXR1cm4gVEVNUERJUiwgVEVTVENXRAorICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyaWx5IGNoYW5nZXMgdGhlIENXRCB0byBhCisgICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgorICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiAgVGhlIG9yaWdpbmFsIENXRCBpcworICAgICMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KKyAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGVzdF9jd2QsIHF1aWV0PVRydWUpOgorICAgICAgICBtYWluKCkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICMgUmVtb3ZlIHJlZ3J0ZXN0LnB5J3Mgb3duIGRpcmVjdG9yeSBmcm9tIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGguIERlc3BpdGUKQEAgLTE4MDgsMTEgKzE1ODYsNCBAQAogICAgICMgc2FuaXR5IGNoZWNrCiAgICAgYXNzZXJ0IF9fZmlsZV9fID09IG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkKIAotICAgIFRFTVBESVIsIFRFU1RDV0QgPSBfbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQoVEVNUERJUikKLQotICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyeSBjaGFuZ2VzIHRoZSBDV0QgdG8gYQotICAgICMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiBUaGUgb3JpZ2luYWwgQ1dEIGlzCi0gICAgIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgotICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICAgICAgbWFpbigpCisgICAgbWFpbl9pbl90ZW1wX2N3ZCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZXZvY2F0aW9uLmNybCBiL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODliMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9yZXZvY2F0aW9uLmNybApAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJwakNCandJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SllXVEVtTUNRR0ExVUUKK0Nnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlZCQU1NRFc5MWNpMWoKK1lTMXpaWEoyWlhJWERURXpNVEV5TVRFM01EZzBOMW9YRFRJek1Ea3pNREUzTURnME4xcWdEakFNTUFvR0ExVWQKK0ZBUURBZ0VBTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFDTkpYQzJtVkthdUVlTjNMbFEzWnRNNWdrSDNFeEgKKytpNGJtSmp0Sm40OTdXd3Z2b0llVWRybVZYZ0pRUjkzUnRWMzdoWndOMFNYTUxsTm1VWlBINHJIaGloYXl3NG0KK3VuQ3pWai9PaENDWTcvVFBqS3VKMU8vMFhoYUxCcEJWalFON1IvMXVqb1JLYlNpYS9DRDN2Y243RnF4enc3TEsKK2ZTUkNLUkdUajFDWml1eHJwaHRGY2h3QUxYU2lGRHk5bXIyWktoSW1jeXExUHlkZmdFelU3OEFQcE9rTVFzSUMKK1VOSi9jZjNjOWVtemYrZFV0Y01FY2VqUTNteW5CbzRlSUdnMUVXNDJiejRxNGhTanpRbEtjQlYwbXV3NXFYaGMKK0hPeEgyaVRGaFE3U3J2VnVLL2RNMTRyWU00QjVtU1gzblJDMWtObVhwUzlqM3dKRGh1d21qSGVkCistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5IGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQppbmRleCBhYjIwMTY0Li5hN2JiMGQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CisrKyBiL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKQEAgLTEyLDEzICsxMiwyMiBAQAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHppcGZpbGUKIAotZnJvbSBpbXAgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5Yywgc3RyaXBfcHl0aG9uX3N0ZGVyciwgdGVtcF9kaXIKIAogIyBFeGVjdXRpbmcgdGhlIGludGVycHJldGVyIGluIGEgc3VicHJvY2VzcwogZGVmIF9hc3NlcnRfcHl0aG9uKGV4cGVjdGVkX3N1Y2Nlc3MsICphcmdzLCAqKmVudl92YXJzKToKLSAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZV0KLSAgICBpZiBub3QgZW52X3ZhcnM6CisgICAgaWYgJ19faXNvbGF0ZWQnIGluIGVudl92YXJzOgorICAgICAgICBpc29sYXRlZCA9IGVudl92YXJzLnBvcCgnX19pc29sYXRlZCcpCisgICAgZWxzZToKKyAgICAgICAgaXNvbGF0ZWQgPSBub3QgZW52X3ZhcnMKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1YJywgJ2ZhdWx0aGFuZGxlciddCisgICAgaWYgaXNvbGF0ZWQ6CisgICAgICAgICMgaXNvbGF0ZWQgbW9kZTogaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGlnbm9yZSB1c2VyCisgICAgICAgICMgc2l0ZS1wYWNrYWdlcywgYW5kIGRvbid0IGFkZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gc3lzLnBhdGgKKyAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctSScpCisgICAgZWxpZiBub3QgZW52X3ZhcnM6CisgICAgICAgICMgaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctRScpCiAgICAgIyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCwgZm9yIGluLXBsYWNlIHRlc3Rpbmcgb2YKICAgICAjIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkcy4KQEAgLTM5LDcgKzQ4LDcgQEAKICAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQogICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCiAgICAgcmMgPSBwLnJldHVybmNvZGUKLSAgICBlcnIgPSAgc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCisgICAgZXJyID0gc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCiAgICAgaWYgKHJjIGFuZCBleHBlY3RlZF9zdWNjZXNzKSBvciAobm90IHJjIGFuZCBub3QgZXhwZWN0ZWRfc3VjY2Vzcyk6CiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWQsICIKQEAgLTQ5LDI1ICs1OCw0OCBAQAogZGVmIGFzc2VydF9weXRob25fb2soKmFyZ3MsICoqZW52X3ZhcnMpOgogICAgICIiIgogICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAotICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGlzIG9rIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBzdWNjZWVkcyAocmMgPT0gMCkgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LAorICAgIHN0ZGVycikgdHVwbGUuCisKKyAgICBJZiB0aGUgX19jbGVhbmVudiBrZXl3b3JkIGlzIHNldCwgZW52X3ZhcnMgaXMgdXNlZCBhIGZyZXNoIGVudmlyb25tZW50LgorCisgICAgUHl0aG9uIGlzIHN0YXJ0ZWQgaW4gaXNvbGF0ZWQgbW9kZSAoY29tbWFuZCBsaW5lIG9wdGlvbiAtSSksCisgICAgZXhjZXB0IGlmIHRoZSBfX2lzb2xhdGVkIGtleXdvcmQgaXMgc2V0IHRvIEZhbHNlLgogICAgICIiIgogICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihUcnVlLCAqYXJncywgKiplbnZfdmFycykKIAogZGVmIGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiCiAgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgZmFpbHMgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGZhaWxzIChyYyAhPSAwKSBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsCisgICAgc3RkZXJyKSB0dXBsZS4KKworICAgIFNlZSBhc3NlcnRfcHl0aG9uX29rKCkgZm9yIG1vcmUgb3B0aW9ucy4KICAgICAiIiIKICAgICByZXR1cm4gX2Fzc2VydF9weXRob24oRmFsc2UsICphcmdzLCAqKmVudl92YXJzKQogCi1kZWYgc3Bhd25fcHl0aG9uKCphcmdzLCAqKmt3KToKK2RlZiBzcGF3bl9weXRob24oKmFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgKiprdyk6CisgICAgIiIiUnVuIGEgUHl0aG9uIHN1YnByb2Nlc3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgorCisgICAga3cgaXMgZXh0cmEga2V5d29yZCBhcmdzIHRvIHBhc3MgdG8gc3VicHJvY2Vzcy5Qb3Blbi4gUmV0dXJucyBhIFBvcGVuCisgICAgb2JqZWN0LgorICAgICIiIgogICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLUUnXQogICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQorICAgICMgVW5kZXIgRmVkb3JhICg/KSwgR05VIHJlYWRsaW5lIGNhbiBvdXRwdXQganVuayBvbiBzdGRlcnIgd2hlbiBpbml0aWFsaXplZCwKKyAgICAjIGRlcGVuZGluZyBvbiB0aGUgVEVSTSBzZXR0aW5nLiAgU2V0dGluZyBURVJNPXZ0MTAwIGlzIHN1cHBvc2VkIHRvIGRpc2FibGUKKyAgICAjIHRoYXQuICBSZWZlcmVuY2VzOgorICAgICMgLSBodHRwOi8vcmVpbm91dC52YW5yZWVzLm9yZy93ZWJsb2cvMjAwOS8wOC8xNC9yZWFkbGluZS1pbnZpc2libGUtY2hhcmFjdGVyLWhhY2suaHRtbAorICAgICMgLSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NzYwNzEyL3B5dGhvbi1yZWFkbGluZS1tb2R1bGUtcHJpbnRzLWVzY2FwZS1jaGFyYWN0ZXItZHVyaW5nLWltcG9ydAorICAgICMgLSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXJlYWRsaW5lLzIwMDctMDgvbXNnMDAwMDQuaHRtbAorICAgIGVudiA9IGt3LnNldGRlZmF1bHQoJ2VudicsIGRpY3Qob3MuZW52aXJvbikpCisgICAgZW52WydURVJNJ10gPSAndnQxMDAnCiAgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3KQogCiBkZWYga2lsbF9weXRob24ocCk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiBQb3BlbiBwcm9jZXNzIHVudGlsIGNvbXBsZXRpb24gYW5kIHJldHVybiBzdGRvdXQuIiIiCiAgICAgcC5zdGRpbi5jbG9zZSgpCiAgICAgZGF0YSA9IHAuc3Rkb3V0LnJlYWQoKQogICAgIHAuc3Rkb3V0LmNsb3NlKCkKQEAgLTc3LDggKzEwOSwxMCBAQAogICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQogICAgIHJldHVybiBkYXRhCiAKLWRlZiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSk6Ci0gICAgc2NyaXB0X2ZpbGVuYW1lID0gc2NyaXB0X2Jhc2VuYW1lK29zLmV4dHNlcCsncHknCitkZWYgbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UsIG9taXRfc3VmZml4PUZhbHNlKToKKyAgICBzY3JpcHRfZmlsZW5hbWUgPSBzY3JpcHRfYmFzZW5hbWUKKyAgICBpZiBub3Qgb21pdF9zdWZmaXg6CisgICAgICAgIHNjcmlwdF9maWxlbmFtZSArPSBvcy5leHRzZXAgKyAncHknCiAgICAgc2NyaXB0X25hbWUgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2Rpciwgc2NyaXB0X2ZpbGVuYW1lKQogICAgICMgVGhlIHNjcmlwdCBzaG91bGQgYmUgZW5jb2RlZCB0byBVVEYtOCwgdGhlIGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nCiAgICAgc2NyaXB0X2ZpbGUgPSBvcGVuKHNjcmlwdF9uYW1lLCAndycsIGVuY29kaW5nPSd1dGYtOCcpCkBAIC0xMjEsOCArMTU1LDggQEAKICAgICBzY3JpcHRfbmFtZSA9IG1ha2Vfc2NyaXB0KHppcF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQogICAgIHVubGluay5hcHBlbmQoc2NyaXB0X25hbWUpCiAgICAgaWYgY29tcGlsZWQ6Ci0gICAgICAgIGluaXRfbmFtZSA9IHB5X2NvbXBpbGUoaW5pdF9uYW1lLCBkb3JhaXNlPVRydWUpCi0gICAgICAgIHNjcmlwdF9uYW1lID0gcHlfY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICBpbml0X25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoaW5pdF9uYW1lLCBkb3JhaXNlPVRydWUpCisgICAgICAgIHNjcmlwdF9uYW1lID0gcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCiAgICAgICAgIHVubGluay5leHRlbmQoKGluaXRfbmFtZSwgc2NyaXB0X25hbWUpKQogICAgIHBrZ19uYW1lcyA9IFtvcy5zZXAuam9pbihbcGtnX25hbWVdKmkpIGZvciBpIGluIHJhbmdlKDEsIGRlcHRoKzEpXQogICAgIHNjcmlwdF9uYW1lX2luX3ppcCA9IG9zLnBhdGguam9pbihwa2dfbmFtZXNbLTFdLCBvcy5wYXRoLmJhc2VuYW1lKHNjcmlwdF9uYW1lKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NvcnRwZXJmLnB5IGIvTGliL3Rlc3Qvc29ydHBlcmYucHkKaW5kZXggYWY3YzBiNC4uOTA3MjJmNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc29ydHBlcmYucHkKKysrIGIvTGliL3Rlc3Qvc29ydHBlcmYucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBmbiA9IG9zLnBhdGguam9pbih0ZCwgInJyJTA2ZCIgJSBuKQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZuLCAicmIiKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByID0gcmFuZG9tLnJhbmRvbQogICAgICAgICByZXN1bHQgPSBbcigpIGZvciBpIGluIHJhbmdlKG4pXQogICAgICAgICB0cnk6CkBAIC0zNSw5ICszNSw5IEBACiAgICAgICAgICAgICAgICAgaWYgZnA6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiY2FuJ3Qgd3JpdGUiLCBmbiwgIjoiLCBtc2cpCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gbWFyc2hhbC5sb2FkKGZwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQppbmRleCA4Njg2MTUzLi43NTliM2Y0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zc2xfc2VydmVycy5weQorKysgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgIHNzbGNvbm4gPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBzb2NrZXQgZXJyb3JzIGFyZSBzaWxlbmNlZCBieSB0aGUgY2FsbGVyLCBwcmludCB0aGVtIGhlcmUKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJHb3QgYW4gZXJyb3I6XG4lc1xuIiAlIGUpCkBAIC0xNDcsOSArMTQ3LDExIEBACiAgICAgICAgIHNlbGYuc2VydmVyLnNodXRkb3duKCkKIAogCi1kZWYgbWFrZV9odHRwc19zZXJ2ZXIoY2FzZSwgY2VydGZpbGU9Q0VSVEZJTEUsIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKLSAgICAjIHdlIGFzc3VtZSB0aGUgY2VydGZpbGUgY29udGFpbnMgYm90aCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUKLSAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKK2RlZiBtYWtlX2h0dHBzX3NlcnZlcihjYXNlLCAqLCBjb250ZXh0PU5vbmUsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKKyAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICMgV2UgYXNzdW1lIHRoZSBjZXJ0ZmlsZSBjb250YWlucyBib3RoIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZQogICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlKQogICAgIHNlcnZlciA9IEhUVFBTU2VydmVyVGhyZWFkKGNvbnRleHQsIGhvc3QsIGhhbmRsZXJfY2xhc3MpCiAgICAgZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zc2x0ZXN0cy5weSBiL0xpYi90ZXN0L3NzbHRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGVkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zc2x0ZXN0cy5weQpAQCAtMCwwICsxLDIyIEBACisjIENvbnZlbmllbmNlIHRlc3QgbW9kdWxlIHRvIHJ1biBhbGwgb2YgdGhlIFNTTC1yZWxhdGVkIHRlc3RzIGluIHRoZQorIyBzdGFuZGFyZCBsaWJyYXJ5LgorCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworCitURVNUUyA9IFsndGVzdF9hc3luY2lvJywgJ3Rlc3RfZnRwbGliJywgJ3Rlc3RfaGFzaGxpYicsICd0ZXN0X2h0dHBsaWInLAorICAgICAgICAgJ3Rlc3RfaW1hcGxpYicsICd0ZXN0X25udHBsaWInLCAndGVzdF9wb3BsaWInLCAndGVzdF9zbXRwbGliJywKKyAgICAgICAgICd0ZXN0X3NtdHBuZXQnLCAndGVzdF91cmxsaWIyX2xvY2FsbmV0JywgJ3Rlc3RfdmVudiddCisKK2RlZiBydW5fcmVncnRlc3RzKCpleHRyYV9hcmdzKToKKyAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAiLW0iLCAidGVzdCJdCisgICAgaWYgbm90IGV4dHJhX2FyZ3M6CisgICAgICAgIGFyZ3MuYXBwZW5kKCItdW5ldHdvcmsiKQorICAgIGVsc2U6CisgICAgICAgIGFyZ3MuZXh0ZW5kKGV4dHJhX2FyZ3MpCisgICAgYXJncy5leHRlbmQoVEVTVFMpCisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKGFyZ3MpCisgICAgc3lzLmV4aXQocmVzdWx0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bl9yZWdydGVzdHMoKnN5cy5hcmd2WzE6XSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weSBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQppbmRleCA0ODAwZDZkLi41ZWQwMWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKKysrIGIvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CkBAIC0zMjcsMTMgKzMyNywyNiBAQAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3VwcGVyJywgNDIpCiAKICAgICBkZWYgdGVzdF9leHBhbmR0YWJzKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJykKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDgpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgZGVmXG5nICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgNCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgNCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA4KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgZGVmXG5nICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICBkZWZcbmcgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDQpCisgICAgICAgICMgY2hlY2sga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgdGFic2l6ZT04KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCB0YWJzaXplPTQpCisKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgIGFcbiBiJywgJyBcdGFcblx0YicsICdleHBhbmR0YWJzJywgMSkKIAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2V4cGFuZHRhYnMnLCA0MiwgNDIpCkBAIC0xMTY1LDcgKzExNzgsOCBAQAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdfX21vZF9fJykKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclKGZvbylzJywgJ19fbW9kX18nLCA0MikKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclcyVzJywgJ19fbW9kX18nLCAoNDIsKSkKLSAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclYycsICdfX21vZF9fJywgKE5vbmUsKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVjJywgJ19fbW9kX18nLCAoTm9uZSwpKQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICclKGZvbycsICdfX21vZF9fJywge30pCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJShmb28pcyAlKGJhcilzJywgJ19fbW9kX18nLCAoJ2ZvbycsIDQyKSkKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclZCcsICdfX21vZF9fJywgIjQyIikgIyBub3QgbnVtZXJpYwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5IGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5CmluZGV4IDFmNjFlMTMuLmQxMmJkOTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weQorKysgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKQEAgLTEsMTcgKzEsMjcgQEAKICIiIldoZW4gY2FsbGVkIGFzIGEgc2NyaXB0LCBwcmludCBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBvcGVuCi1maWxlIGRlc2NyaXB0b3JzIG9uIHN0ZG91dC4iIiIKK2ZpbGUgZGVzY3JpcHRvcnMgb24gc3Rkb3V0LgorCitVc2FnZToKK2ZkX3N0YXRzLnB5OiBjaGVjayBhbGwgZmlsZSBkZXNjcmlwdG9ycworZmRfc3RhdHVzLnB5IGZkMSBmZDIgLi4uOiBjaGVjayBvbmx5IHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3JzCisiIiIKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgb3MKLQotdHJ5OgotICAgIF9NQVhGRCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKLWV4Y2VwdDoKLSAgICBfTUFYRkQgPSAyNTYKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgZmRzID0gW10KLSAgICBmb3IgZmQgaW4gcmFuZ2UoMCwgX01BWEZEKToKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9NQVhGRCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgX01BWEZEID0gMjU2CisgICAgICAgIHRlc3RfZmRzID0gcmFuZ2UoMCwgX01BWEZEKQorICAgIGVsc2U6CisgICAgICAgIHRlc3RfZmRzID0gbWFwKGludCwgc3lzLmFyZ3ZbMTpdKQorICAgIGZvciBmZCBpbiB0ZXN0X2ZkczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3QgPSBvcy5mc3RhdChmZCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKQEAgLTE5LDYgKzI5LDYgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgIyBJZ25vcmUgU29sYXJpcyBkb29yIGZpbGVzCi0gICAgICAgIGlmIHN0LnN0X21vZGUgJiAweEYwMDAgIT0gMHhkMDAwOgorICAgICAgICBpZiBub3Qgc3RhdC5TX0lTRE9PUihzdC5zdF9tb2RlKToKICAgICAgICAgICAgIGZkcy5hcHBlbmQoZmQpCiAgICAgcHJpbnQoJywnLmpvaW4obWFwKHN0ciwgZmRzKSkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5IGIvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQppbmRleCA1YzAzZjU0Li5mMmMxYTkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKQEAgLTMsMjggKzMsMjkgQEAKIGlmIF9fbmFtZV9fICE9ICd0ZXN0LnN1cHBvcnQnOgogICAgIHJhaXNlIEltcG9ydEVycm9yKCdzdXBwb3J0IG11c3QgYmUgaW1wb3J0ZWQgZnJvbSB0aGUgdGVzdCBwYWNrYWdlJykKIAoraW1wb3J0IGNvbGxlY3Rpb25zLmFiYwogaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBlcnJubworaW1wb3J0IGZubWF0Y2gKIGltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBnYwotaW1wb3J0IHNvY2tldAotaW1wb3J0IHN5cworaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCitpbXBvcnQgbG9nZ2luZy5oYW5kbGVycwogaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KLWltcG9ydCBzaHV0aWwKLWltcG9ydCB3YXJuaW5ncwotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgY29sbGVjdGlvbnMuYWJjCiBpbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgaW1wCi1pbXBvcnQgdGltZQotaW1wb3J0IHN5c2NvbmZpZwotaW1wb3J0IGZubWF0Y2gKLWltcG9ydCBsb2dnaW5nLmhhbmRsZXJzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RhdAogaW1wb3J0IHN0cnVjdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzeXNjb25maWcKIGltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZCwgdGhyZWFkaW5nCkBAIC01NiwyNiArNTcsNDkgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBsem1hID0gTm9uZQogCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKIF9fYWxsX18gPSBbCi0gICAgIkVycm9yIiwgIlRlc3RGYWlsZWQiLCAiUmVzb3VyY2VEZW5pZWQiLCAiaW1wb3J0X21vZHVsZSIsICJ2ZXJib3NlIiwKLSAgICAidXNlX3Jlc291cmNlcyIsICJtYXhfbWVtdXNlIiwgInJlY29yZF9vcmlnaW5hbF9zdGRvdXQiLAotICAgICJnZXRfb3JpZ2luYWxfc3Rkb3V0IiwgInVubG9hZCIsICJ1bmxpbmsiLCAicm10cmVlIiwgImZvcmdldCIsCisgICAgIyBnbG9iYWxzCisgICAgIlBJUEVfTUFYX1NJWkUiLCAidmVyYm9zZSIsICJtYXhfbWVtdXNlIiwgInVzZV9yZXNvdXJjZXMiLCAiZmFpbGZhc3QiLAorICAgICMgZXhjZXB0aW9ucworICAgICJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlJlc291cmNlRGVuaWVkIiwKKyAgICAjIGltcG9ydHMKKyAgICAiaW1wb3J0X21vZHVsZSIsICJpbXBvcnRfZnJlc2hfbW9kdWxlIiwgIkNsZWFuSW1wb3J0IiwKKyAgICAjIG1vZHVsZXMKKyAgICAidW5sb2FkIiwgImZvcmdldCIsCisgICAgIyBpbworICAgICJyZWNvcmRfb3JpZ2luYWxfc3Rkb3V0IiwgImdldF9vcmlnaW5hbF9zdGRvdXQiLCAiY2FwdHVyZWRfc3Rkb3V0IiwKKyAgICAiY2FwdHVyZWRfc3RkaW4iLCAiY2FwdHVyZWRfc3RkZXJyIiwKKyAgICAjIGZpbGVzeXN0ZW0KKyAgICAiVEVTVEZOIiwgIlNBVkVEQ1dEIiwgInVubGluayIsICJybXRyZWUiLCAidGVtcF9jd2QiLCAiZmluZGZpbGUiLAorICAgICJjcmVhdGVfZW1wdHlfZmlsZSIsICJjYW5fc3ltbGluayIsICJmc19pc19jYXNlX2luc2Vuc2l0aXZlIiwKKyAgICAjIHVuaXR0ZXN0CiAgICAgImlzX3Jlc291cmNlX2VuYWJsZWQiLCAicmVxdWlyZXMiLCAicmVxdWlyZXNfZnJlZWJzZF92ZXJzaW9uIiwKLSAgICAicmVxdWlyZXNfbGludXhfdmVyc2lvbiIsICJyZXF1aXJlc19tYWNfdmVyIiwgImZpbmRfdW51c2VkX3BvcnQiLAotICAgICJiaW5kX3BvcnQiLCAiSVBWNl9FTkFCTEVEIiwgImlzX2p5dGhvbiIsICJURVNURk4iLCAiSE9TVCIsICJTQVZFRENXRCIsCi0gICAgInRlbXBfY3dkIiwgImZpbmRmaWxlIiwgImNyZWF0ZV9lbXB0eV9maWxlIiwgInNvcnRkaWN0IiwKLSAgICAiY2hlY2tfc3ludGF4X2Vycm9yIiwgIm9wZW5fdXJscmVzb3VyY2UiLCAiY2hlY2tfd2FybmluZ3MiLCAiQ2xlYW5JbXBvcnQiLAotICAgICJFbnZpcm9ubWVudFZhckd1YXJkIiwgIlRyYW5zaWVudFJlc291cmNlIiwgImNhcHR1cmVkX3N0ZG91dCIsCi0gICAgImNhcHR1cmVkX3N0ZGluIiwgImNhcHR1cmVkX3N0ZGVyciIsICJ0aW1lX291dCIsICJzb2NrZXRfcGVlcl9yZXNldCIsCi0gICAgImlvZXJyb3JfcGVlcl9yZXNldCIsICJydW5fd2l0aF9sb2NhbGUiLCAndGVtcF91bWFzaycsCi0gICAgInRyYW5zaWVudF9pbnRlcm5ldCIsICJzZXRfbWVtbGltaXQiLCAiYmlnbWVtdGVzdCIsICJiaWdhZGRyc3BhY2V0ZXN0IiwKLSAgICAiQmFzaWNUZXN0UnVubmVyIiwgInJ1bl91bml0dGVzdCIsICJydW5fZG9jdGVzdCIsICJ0aHJlYWRpbmdfc2V0dXAiLAotICAgICJ0aHJlYWRpbmdfY2xlYW51cCIsICJyZWFwX2NoaWxkcmVuIiwgImNweXRob25fb25seSIsICJjaGVja19pbXBsX2RldGFpbCIsCi0gICAgImdldF9hdHRyaWJ1dGUiLCAic3dhcF9pdGVtIiwgInN3YXBfYXR0ciIsICJyZXF1aXJlc19JRUVFXzc1NCIsCi0gICAgIlRlc3RIYW5kbGVyIiwgIk1hdGNoZXIiLCAiY2FuX3N5bWxpbmsiLCAic2tpcF91bmxlc3Nfc3ltbGluayIsCi0gICAgInNraXBfdW5sZXNzX3hhdHRyIiwgImltcG9ydF9mcmVzaF9tb2R1bGUiLCAicmVxdWlyZXNfemxpYiIsCi0gICAgIlBJUEVfTUFYX1NJWkUiLCAiZmFpbGZhc3QiLCAiYW50aWNpcGF0ZV9mYWlsdXJlIiwgInJ1bl93aXRoX3R6IiwKLSAgICAicmVxdWlyZXNfZ3ppcCIsICJyZXF1aXJlc19iejIiLCAicmVxdWlyZXNfbHptYSIsICJzdXBwcmVzc19jcmFzaF9wb3B1cCIsCisgICAgInJlcXVpcmVzX2xpbnV4X3ZlcnNpb24iLCAicmVxdWlyZXNfbWFjX3ZlciIsICJjaGVja19zeW50YXhfZXJyb3IiLAorICAgICJUcmFuc2llbnRSZXNvdXJjZSIsICJ0aW1lX291dCIsICJzb2NrZXRfcGVlcl9yZXNldCIsICJpb2Vycm9yX3BlZXJfcmVzZXQiLAorICAgICJ0cmFuc2llbnRfaW50ZXJuZXQiLCAiQmFzaWNUZXN0UnVubmVyIiwgInJ1bl91bml0dGVzdCIsICJydW5fZG9jdGVzdCIsCisgICAgInNraXBfdW5sZXNzX3N5bWxpbmsiLCAicmVxdWlyZXNfZ3ppcCIsICJyZXF1aXJlc19iejIiLCAicmVxdWlyZXNfbHptYSIsCisgICAgImJpZ21lbXRlc3QiLCAiYmlnYWRkcnNwYWNldGVzdCIsICJjcHl0aG9uX29ubHkiLCAiZ2V0X2F0dHJpYnV0ZSIsCisgICAgInJlcXVpcmVzX0lFRUVfNzU0IiwgInNraXBfdW5sZXNzX3hhdHRyIiwgInJlcXVpcmVzX3psaWIiLAorICAgICJhbnRpY2lwYXRlX2ZhaWx1cmUiLCAibG9hZF9wYWNrYWdlX3Rlc3RzIiwKKyAgICAjIHN5cworICAgICJpc19qeXRob24iLCAiY2hlY2tfaW1wbF9kZXRhaWwiLAorICAgICMgbmV0d29yaworICAgICJIT1NUIiwgIklQVjZfRU5BQkxFRCIsICJmaW5kX3VudXNlZF9wb3J0IiwgImJpbmRfcG9ydCIsICJvcGVuX3VybHJlc291cmNlIiwKKyAgICAjIHByb2Nlc3NlcworICAgICd0ZW1wX3VtYXNrJywgInJlYXBfY2hpbGRyZW4iLAorICAgICMgbG9nZ2luZworICAgICJUZXN0SGFuZGxlciIsCisgICAgIyB0aHJlYWRzCisgICAgInRocmVhZGluZ19zZXR1cCIsICJ0aHJlYWRpbmdfY2xlYW51cCIsCisgICAgIyBtaXNjZWxsYW5lb3VzCisgICAgImNoZWNrX3dhcm5pbmdzIiwgIkVudmlyb25tZW50VmFyR3VhcmQiLCAicnVuX3dpdGhfbG9jYWxlIiwgInN3YXBfaXRlbSIsCisgICAgInN3YXBfYXR0ciIsICJNYXRjaGVyIiwgInNldF9tZW1saW1pdCIsICJTdXBwcmVzc0NyYXNoUmVwb3J0IiwgInNvcnRkaWN0IiwKKyAgICAicnVuX3dpdGhfdHoiLAogICAgIF0KIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKQEAgLTk3LDcgKzEyMSw4IEBACiAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHBhY2thZ2UgYW5kIG1vZHVsZSBkZXByZWNhdGlvbgogICAgIHdhcm5pbmdzIHdoZW4gaW1wb3J0aW5nIHRoZW0uCiAKLSAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuIiIiCisgICAgSWYgaWdub3JlIGlzIEZhbHNlLCB0aGlzIGNvbnRleHQgbWFuYWdlciBoYXMgbm8gZWZmZWN0LgorICAgICIiIgogICAgIGlmIGlnbm9yZToKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKyAobW9kdWxlfHBhY2thZ2UpIiwKQEAgLTEwNywxNiArMTMyLDIxIEBACiAgICAgICAgIHlpZWxkCiAKIAotZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1GYWxzZSk6CitkZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlLCAqLCByZXF1aXJlZF9vbj0oKSk6CiAgICAgIiIiSW1wb3J0IGFuZCByZXR1cm4gdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQsIHJhaXNpbmcgU2tpcFRlc3QgaWYKICAgICBpdCBpcyBub3QgYXZhaWxhYmxlLgogCiAgICAgSWYgZGVwcmVjYXRlZCBpcyBUcnVlLCBhbnkgbW9kdWxlIG9yIHBhY2thZ2UgZGVwcmVjYXRpb24gbWVzc2FnZXMKLSAgICB3aWxsIGJlIHN1cHByZXNzZWQuIiIiCisgICAgd2lsbCBiZSBzdXBwcmVzc2VkLiBJZiBhIG1vZHVsZSBpcyByZXF1aXJlZCBvbiBhIHBsYXRmb3JtIGJ1dCBvcHRpb25hbCBmb3IKKyAgICBvdGhlcnMsIHNldCByZXF1aXJlZF9vbiB0byBhbiBpdGVyYWJsZSBvZiBwbGF0Zm9ybSBwcmVmaXhlcyB3aGljaCB3aWxsIGJlCisgICAgY29tcGFyZWQgYWdhaW5zdCBzeXMucGxhdGZvcm0uCisgICAgIiIiCiAgICAgd2l0aCBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhkZXByZWNhdGVkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0dXBsZShyZXF1aXJlZF9vbikpOgorICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdHIobXNnKSkKIAogCkBAIC0xNTgsNiArMTg4LDI1IEBACiAgICAgICAgIHJldHVybiB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKICAgICByZXR1cm4gbGFtYmRhIGY6IGYKIAorZGVmIGxvYWRfcGFja2FnZV90ZXN0cyhwa2dfZGlyLCBsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAiIiJHZW5lcmljIGxvYWRfdGVzdHMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSB0ZXN0IHBhY2thZ2VzLgorCisgICAgTW9zdCBwYWNrYWdlcyBjYW4gaW1wbGVtZW50IGxvYWRfdGVzdHMgdXNpbmcgdGhpcyBmdW5jdGlvbiBhcyBmb2xsb3dzOgorCisgICAgICAgZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQorICAgICIiIgorICAgIGlmIHBhdHRlcm4gaXMgTm9uZToKKyAgICAgICAgcGF0dGVybiA9ICJ0ZXN0KiIKKyAgICB0b3BfZGlyID0gb3MucGF0aC5kaXJuYW1lKCAgICAgICAgICAgICAgIyBMaWIKKyAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSggICAgICAgICAgICAgICMgdGVzdAorICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSAgICMgc3VwcG9ydAorICAgIHBhY2thZ2VfdGVzdHMgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyPXBrZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfbGV2ZWxfZGlyPXRvcF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPXBhdHRlcm4pCisgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKKyAgICByZXR1cm4gc3RhbmRhcmRfdGVzdHMKKwogCiBkZWYgaW1wb3J0X2ZyZXNoX21vZHVsZShuYW1lLCBmcmVzaD0oKSwgYmxvY2tlZD0oKSwgZGVwcmVjYXRlZD1GYWxzZSk6CiAgICAgIiIiSW1wb3J0IGFuZCByZXR1cm4gYSBtb2R1bGUsIGRlbGliZXJhdGVseSBieXBhc3Npbmcgc3lzLm1vZHVsZXMuCkBAIC0yODcsNyArMzM2LDEzIEBACiAgICAgICAgIGRlZiBfcm10cmVlX2lubmVyKHBhdGgpOgogICAgICAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwYXRoKToKICAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBuYW1lKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IG9zLmxzdGF0KGZ1bGxuYW1lKS5zdF9tb2RlCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBwcmludCgic3VwcG9ydC5ybXRyZWUoKTogb3MubHN0YXQoJXIpIGZhaWxlZCB3aXRoICVzIiAlIChmdWxsbmFtZSwgZXhjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuX19zdGRlcnJfXykKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDAKKyAgICAgICAgICAgICAgICBpZiBzdGF0LlNfSVNESVIobW9kZSk6CiAgICAgICAgICAgICAgICAgICAgIF93YWl0Zm9yKF9ybXRyZWVfaW5uZXIsIGZ1bGxuYW1lLCB3YWl0YWxsPVRydWUpCiAgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGZ1bGxuYW1lKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0zMDIsMjUgKzM1NywyMCBAQAogZGVmIHVubGluayhmaWxlbmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBfdW5saW5rKGZpbGVuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBmaWxlbmFtZSBuZWVkIG5vdCBleGlzdC4KLSAgICAgICAgaWYgZXJyb3IuZXJybm8gbm90IGluIChlcnJuby5FTk9FTlQsIGVycm5vLkVOT1RESVIpOgotICAgICAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBOb3RBRGlyZWN0b3J5RXJyb3IpOgorICAgICAgICBwYXNzCiAKIGRlZiBybWRpcihkaXJuYW1lKToKICAgICB0cnk6CiAgICAgICAgIF9ybWRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBkaXJlY3RvcnkgbmVlZCBub3QgZXhpc3QuCi0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBybXRyZWUocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBfcm10cmVlKHBhdGgpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBtYWtlX2xlZ2FjeV9weWMoc291cmNlKToKICAgICAiIiJNb3ZlIGEgUEVQIDMxNDcgcHljL3B5byBmaWxlIHRvIGl0cyBsZWdhY3kgcHljL3B5byBsb2NhdGlvbi4KQEAgLTMzMiw3ICszODIsNyBAQAogICAgICAgICBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0LCBob3dldmVyIHRoZSBQRVAgMzE0NyBweWMgZmlsZSBtdXN0IGV4aXN0LgogICAgIDpyZXR1cm46IFRoZSBmaWxlIHN5c3RlbSBwYXRoIHRvIHRoZSBsZWdhY3kgcHljIGZpbGUuCiAgICAgIiIiCi0gICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgIHVwX29uZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc291cmNlKSkKICAgICBsZWdhY3lfcHljID0gb3MucGF0aC5qb2luKHVwX29uZSwgc291cmNlICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpKQogICAgIG9zLnJlbmFtZShweWNfZmlsZSwgbGVnYWN5X3B5YykKQEAgLTM1MSwxNSArNDAxLDE5IEBACiAgICAgICAgICMgY29tYmluYXRpb25zIG9mIFBFUCAzMTQ3IGFuZCBsZWdhY3kgcHljIGFuZCBweW8gZmlsZXMuCiAgICAgICAgIHVubGluayhzb3VyY2UgKyAnYycpCiAgICAgICAgIHVubGluayhzb3VyY2UgKyAnbycpCi0gICAgICAgIHVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKLSAgICAgICAgdW5saW5rKGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKKyAgICAgICAgdW5saW5rKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCisgICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKIAotIyBPbiBzb21lIHBsYXRmb3Jtcywgc2hvdWxkIG5vdCBydW4gZ3VpIHRlc3QgZXZlbiBpZiBpdCBpcyBhbGxvd2VkCi0jIGluIGB1c2VfcmVzb3VyY2VzJy4KLWlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICBpbXBvcnQgY3R5cGVzCi0gICAgaW1wb3J0IGN0eXBlcy53aW50eXBlcwotICAgIGRlZiBfaXNfZ3VpX2F2YWlsYWJsZSgpOgorIyBDaGVjayB3aGV0aGVyIGEgZ3VpIGlzIGFjdHVhbGx5IGF2YWlsYWJsZQorZGVmIF9pc19ndWlfYXZhaWxhYmxlKCk6CisgICAgaWYgaGFzYXR0cihfaXNfZ3VpX2F2YWlsYWJsZSwgJ3Jlc3VsdCcpOgorICAgICAgICByZXR1cm4gX2lzX2d1aV9hdmFpbGFibGUucmVzdWx0CisgICAgcmVhc29uID0gTm9uZQorICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgIyBpZiBQeXRob24gaXMgcnVubmluZyBhcyBhIHNlcnZpY2UgKHN1Y2ggYXMgdGhlIGJ1aWxkYm90IHNlcnZpY2UpLAorICAgICAgICAjIGd1aSBpbnRlcmFjdGlvbiBtYXkgYmUgZGlzYWxsb3dlZAorICAgICAgICBpbXBvcnQgY3R5cGVzCisgICAgICAgIGltcG9ydCBjdHlwZXMud2ludHlwZXMKICAgICAgICAgVU9JX0ZMQUdTID0gMQogICAgICAgICBXU0ZfVklTSUJMRSA9IDB4MDAwMQogICAgICAgICBjbGFzcyBVU0VST0JKRUNURkxBR1MoY3R5cGVzLlN0cnVjdHVyZSk6CkBAIC0zNzksMjkgKzQzMyw2NCBAQAogICAgICAgICAgICAgY3R5cGVzLmJ5cmVmKG5lZWRlZCkpCiAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICByYWlzZSBjdHlwZXMuV2luRXJyb3IoKQotICAgICAgICByZXR1cm4gYm9vbCh1b2YuZHdGbGFncyAmIFdTRl9WSVNJQkxFKQotZWxzZToKLSAgICBkZWYgX2lzX2d1aV9hdmFpbGFibGUoKToKLSAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgbm90IGJvb2wodW9mLmR3RmxhZ3MgJiBXU0ZfVklTSUJMRSk6CisgICAgICAgICAgICByZWFzb24gPSAiZ3VpIG5vdCBhdmFpbGFibGUgKFdTRl9WSVNJQkxFIGZsYWcgbm90IHNldCkiCisgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICMgVGhlIEFxdWEgVGsgaW1wbGVtZW50YXRpb25zIG9uIE9TIFggY2FuIGFib3J0IHRoZSBwcm9jZXNzIGlmCisgICAgICAgICMgYmVpbmcgY2FsbGVkIGluIGFuIGVudmlyb25tZW50IHdoZXJlIGEgd2luZG93IHNlcnZlciBjb25uZWN0aW9uCisgICAgICAgICMgY2Fubm90IGJlIG1hZGUsIGZvciBpbnN0YW5jZSB3aGVuIGludm9rZWQgYnkgYSBidWlsZGJvdCBvciBzc2gKKyAgICAgICAgIyBwcm9jZXNzIG5vdCBydW5uaW5nIHVuZGVyIHRoZSBzYW1lIHVzZXIgaWQgYXMgdGhlIGN1cnJlbnQgY29uc29sZQorICAgICAgICAjIHVzZXIuICBUbyBhdm9pZCB0aGF0LCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIHdpbmRvdyBtYW5hZ2VyCisgICAgICAgICMgY29ubmVjdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY2RsbCwgY19pbnQsIHBvaW50ZXIsIFN0cnVjdHVyZQorICAgICAgICBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKKworICAgICAgICBhcHBfc2VydmljZXMgPSBjZGxsLkxvYWRMaWJyYXJ5KGZpbmRfbGlicmFyeSgiQXBwbGljYXRpb25TZXJ2aWNlcyIpKQorCisgICAgICAgIGlmIGFwcF9zZXJ2aWNlcy5DR01haW5EaXNwbGF5SUQoKSA9PSAwOgorICAgICAgICAgICAgcmVhc29uID0gImd1aSB0ZXN0cyBjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCB3aW5kb3cgbWFuYWdlciIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsYXNzIFByb2Nlc3NTZXJpYWxOdW1iZXIoU3RydWN0dXJlKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImhpZ2hMb25nT2ZQU04iLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJsb3dMb25nT2ZQU04iLCBjX2ludCldCisgICAgICAgICAgICBwc24gPSBQcm9jZXNzU2VyaWFsTnVtYmVyKCkKKyAgICAgICAgICAgIHBzbl9wID0gcG9pbnRlcihwc24pCisgICAgICAgICAgICBpZiAoICAoYXBwX3NlcnZpY2VzLkdldEN1cnJlbnRQcm9jZXNzKHBzbl9wKSA8IDApIG9yCisgICAgICAgICAgICAgICAgICAoYXBwX3NlcnZpY2VzLlNldEZyb250UHJvY2Vzcyhwc25fcCkgPCAwKSApOgorICAgICAgICAgICAgICAgIHJlYXNvbiA9ICJjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCBndWkgcHJvY2VzcyIKKworICAgICMgY2hlY2sgb24gZXZlcnkgcGxhdGZvcm0gd2hldGhlciB0a2ludGVyIGNhbiBhY3R1YWxseSBkbyBhbnl0aGluZworICAgICMgYnV0IHNraXAgdGhlIHRlc3Qgb24gT1MgWCBiZWNhdXNlIGl0IGNhbiBjYXVzZSBzZWdmYXVsdHMgaW4gQ29jb2EgVGsKKyAgICAjIHdoZW4gcnVubmluZyByZWdydGVzdCB3aXRoIHRoZSAtaiBvcHRpb24gKG11bHRpcGxlIHRocmVhZHMvc3VicHJvY2Vzc2VzKQorICAgIGlmIChub3QgcmVhc29uKSBhbmQgKHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGtpbnRlciBpbXBvcnQgVGsKKyAgICAgICAgICAgIHJvb3QgPSBUaygpCisgICAgICAgICAgICByb290LmRlc3Ryb3koKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBlcnJfc3RyaW5nID0gc3RyKGUpCisgICAgICAgICAgICBpZiBsZW4oZXJyX3N0cmluZykgPiA1MDoKKyAgICAgICAgICAgICAgICBlcnJfc3RyaW5nID0gZXJyX3N0cmluZ1s6NTBdICsgJyBbLi4uXScKKyAgICAgICAgICAgIHJlYXNvbiA9ICdUayB1bmF2YWlsYWJsZSBkdWUgdG8ge306IHt9Jy5mb3JtYXQodHlwZShlKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3N0cmluZykKKworICAgIF9pc19ndWlfYXZhaWxhYmxlLnJlYXNvbiA9IHJlYXNvbgorICAgIF9pc19ndWlfYXZhaWxhYmxlLnJlc3VsdCA9IG5vdCByZWFzb24KKworICAgIHJldHVybiBfaXNfZ3VpX2F2YWlsYWJsZS5yZXN1bHQKIAogZGVmIGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHJlc291cmNlIGlzIGVuYWJsZWQuICBLbm93biByZXNvdXJjZXMgYXJlIHNldCBieQotICAgIHJlZ3J0ZXN0LnB5LiIiIgotICAgIHJldHVybiB1c2VfcmVzb3VyY2VzIGlzIG5vdCBOb25lIGFuZCByZXNvdXJjZSBpbiB1c2VfcmVzb3VyY2VzCisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcmVzb3VyY2UgaXMgZW5hYmxlZC4KKworICAgIEtub3duIHJlc291cmNlcyBhcmUgc2V0IGJ5IHJlZ3J0ZXN0LnB5LiAgSWYgbm90IHJ1bm5pbmcgdW5kZXIgcmVncnRlc3QucHksCisgICAgYWxsIHJlc291cmNlcyBhcmUgYXNzdW1lZCBlbmFibGVkIHVubGVzcyB1c2VfcmVzb3VyY2VzIGhhcyBiZWVuIHNldC4KKyAgICAiIiIKKyAgICByZXR1cm4gdXNlX3Jlc291cmNlcyBpcyBOb25lIG9yIHJlc291cmNlIGluIHVzZV9yZXNvdXJjZXMKIAogZGVmIHJlcXVpcmVzKHJlc291cmNlLCBtc2c9Tm9uZSk6Ci0gICAgIiIiUmFpc2UgUmVzb3VyY2VEZW5pZWQgaWYgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlLgotCi0gICAgSWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyB0aGVuIGF1dG9tYXRpY2FsbHkgcmV0dXJuIFRydWUuICBUaGUKLSAgICBwb3NzaWJpbGl0eSBvZiBGYWxzZSBiZWluZyByZXR1cm5lZCBvY2N1cnMgd2hlbiByZWdydGVzdC5weSBpcwotICAgIGV4ZWN1dGluZy4KLSAgICAiIiIKKyAgICAiIiJSYWlzZSBSZXNvdXJjZURlbmllZCBpZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuIiIiCiAgICAgaWYgcmVzb3VyY2UgPT0gJ2d1aScgYW5kIG5vdCBfaXNfZ3VpX2F2YWlsYWJsZSgpOgotICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2Fubm90IHVzZSB0aGUgJ2d1aScgcmVzb3VyY2UiKQotICAgICMgc2VlIGlmIHRoZSBjYWxsZXIncyBtb2R1bGUgaXMgX19tYWluX18gLSBpZiBzbywgdHJlYXQgYXMgaWYKLSAgICAjIHRoZSByZXNvdXJjZSB3YXMgc2V0Ci0gICAgaWYgc3lzLl9nZXRmcmFtZSgxKS5mX2dsb2JhbHMuZ2V0KCJfX25hbWVfXyIpID09ICJfX21haW5fXyI6Ci0gICAgICAgIHJldHVybgorICAgICAgICByYWlzZSBSZXNvdXJjZURlbmllZChfaXNfZ3VpX2F2YWlsYWJsZS5yZWFzb24pCiAgICAgaWYgbm90IGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgogICAgICAgICBpZiBtc2cgaXMgTm9uZToKICAgICAgICAgICAgIG1zZyA9ICJVc2Ugb2YgdGhlICVyIHJlc291cmNlIG5vdCBlbmFibGVkIiAlIHJlc291cmNlCkBAIC01MTMsNyArNjAyLDcgQEAKICAgICB0aGUgU09fUkVVU0VBRERSIHNvY2tldCBvcHRpb24gaGF2aW5nIGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gV2luZG93cyB2ZXJzdXMKICAgICBVbml4L0xpbnV4LiAgT24gVW5peCwgeW91IGNhbid0IGhhdmUgdHdvIEFGX0lORVQgU09DS19TVFJFQU0gc29ja2V0cyBiaW5kLAogICAgIGxpc3RlbiBhbmQgdGhlbiBhY2NlcHQgY29ubmVjdGlvbnMgb24gaWRlbnRpY2FsIGhvc3QvcG9ydHMuICBBbiBFQUREUklOVVNFCi0gICAgc29ja2V0LmVycm9yIHdpbGwgYmUgcmFpc2VkIGF0IHNvbWUgcG9pbnQgKGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kCisgICAgT1NFcnJvciB3aWxsIGJlIHJhaXNlZCBhdCBzb21lIHBvaW50IChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZAogICAgIHRoZSBvcmRlciBiaW5kIGFuZCBsaXN0ZW4gd2VyZSBjYWxsZWQgb24gZWFjaCBzb2NrZXQpLgogCiAgICAgSG93ZXZlciwgb24gV2luZG93cywgaWYgU09fUkVVU0VBRERSIGlzIHNldCBvbiB0aGUgc29ja2V0cywgbm8gRUFERFJJTlVTRQpAQCAtNTkxLDkgKzY4MCw5IEBACiAgICAgICAgIHNvY2sgPSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgc29jay5iaW5kKCgnOjoxJywgMCkpCisgICAgICAgICAgICBzb2NrLmJpbmQoKEhPU1R2NiwgMCkpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc29ja2V0LmdhaWVycm9yKToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBzb2NrOgpAQCAtMTE4MCw5ICsxMjY5LDkgQEAKICMgQ29udGV4dCBtYW5hZ2VycyB0aGF0IHJhaXNlIFJlc291cmNlRGVuaWVkIHdoZW4gdmFyaW91cyBpc3N1ZXMKICMgd2l0aCB0aGUgSW50ZXJuZXQgY29ubmVjdGlvbiBtYW5pZmVzdCB0aGVtc2VsdmVzIGFzIGV4Y2VwdGlvbnMuCiAjIFhYWCBkZXByZWNhdGUgdGhlc2UgYW5kIHVzZSB0cmFuc2llbnRfaW50ZXJuZXQoKSBpbnN0ZWFkCi10aW1lX291dCA9IFRyYW5zaWVudFJlc291cmNlKElPRXJyb3IsIGVycm5vPWVycm5vLkVUSU1FRE9VVCkKLXNvY2tldF9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2Uoc29ja2V0LmVycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQotaW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoSU9FcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKK3RpbWVfb3V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRVRJTUVET1VUKQorc29ja2V0X3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShPU0Vycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQoraW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKIAogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgpAQCAtMTIyOCwxNyArMTMxNywxNyBAQAogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KHRpbWVvdXQpCiAgICAgICAgIHlpZWxkCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgIyB1cmxsaWIgY2FuIHdyYXAgb3JpZ2luYWwgc29ja2V0IGVycm9ycyBtdWx0aXBsZSB0aW1lcyAoISksIHdlIG11c3QKICAgICAgICAgIyB1bndyYXAgdG8gZ2V0IGF0IHRoZSBvcmlnaW5hbCBlcnJvci4KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGEgPSBlcnIuYXJncwotICAgICAgICAgICAgaWYgbGVuKGEpID49IDEgYW5kIGlzaW5zdGFuY2UoYVswXSwgSU9FcnJvcik6CisgICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzBdCiAgICAgICAgICAgICAjIFRoZSBlcnJvciBjYW4gYWxzbyBiZSB3cmFwcGVkIGFzIGFyZ3NbMV06CiAgICAgICAgICAgICAjICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgIyAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKLSAgICAgICAgICAgIGVsaWYgbGVuKGEpID49IDIgYW5kIGlzaW5zdGFuY2UoYVsxXSwgSU9FcnJvcik6CisgICAgICAgICAgICAjICAgICAgICByYWlzZSBPU0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQorICAgICAgICAgICAgZWxpZiBsZW4oYSkgPj0gMiBhbmQgaXNpbnN0YW5jZShhWzFdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzFdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xNTY1LDcgKzE2NTQsNyBAQAogCiBkZWYgcmVxdWlyZXNfcmVzb3VyY2UocmVzb3VyY2UpOgogICAgIGlmIHJlc291cmNlID09ICdndWknIGFuZCBub3QgX2lzX2d1aV9hdmFpbGFibGUoKToKLSAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXAoInJlc291cmNlICdndWknIGlzIG5vdCBhdmFpbGFibGUiKQorICAgICAgICByZXR1cm4gdW5pdHRlc3Quc2tpcChfaXNfZ3VpX2F2YWlsYWJsZS5yZWFzb24pCiAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6CiAgICAgICAgIHJldHVybiBfaWQKICAgICBlbHNlOgpAQCAtMTY5Nyw5ICsxNzg2LDE4IEBACiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBkb2NzdHJpbmdzLgogCi1IQVZFX0RPQ1NUUklOR1MgPSAoY2hlY2tfaW1wbF9kZXRhaWwoY3B5dGhvbj1GYWxzZSkgb3IKLSAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvcgotICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9ET0NfU1RSSU5HUycpKQorIyBSYXRoZXIgdGhhbiB0cnlpbmcgdG8gZW51bWVyYXRlIGFsbCB0aGUgY2FzZXMgd2hlcmUgZG9jc3RyaW5ncyBtYXkgYmUKKyMgZGlzYWJsZWQsIHdlIGp1c3QgY2hlY2sgZm9yIHRoYXQgZGlyZWN0bHkKKworZGVmIF9jaGVja19kb2NzdHJpbmdzKCk6CisgICAgIiIiSnVzdCB1c2VkIHRvIGNoZWNrIGlmIGRvY3N0cmluZ3MgYXJlIGVuYWJsZWQiIiIKKworTUlTU0lOR19DX0RPQ1NUUklOR1MgPSAoY2hlY2tfaW1wbF9kZXRhaWwoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9ET0NfU1RSSU5HUycpKQorCitIQVZFX0RPQ1NUUklOR1MgPSAoX2NoZWNrX2RvY3N0cmluZ3MuX19kb2NfXyBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgICBub3QgTUlTU0lOR19DX0RPQ1NUUklOR1MpCiAKIHJlcXVpcmVzX2RvY3N0cmluZ3MgPSB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfRE9DU1RSSU5HUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIGRvY3N0cmluZ3MiKQpAQCAtMTc3NCwxMiArMTg3MiwxMiBAQAogZGVmIHRocmVhZGluZ19jbGVhbnVwKCpvcmlnaW5hbF92YWx1ZXMpOgogICAgIGlmIG5vdCBfdGhyZWFkOgogICAgICAgICByZXR1cm4KLSAgICBfTUFYX0NPVU5UID0gMTAKKyAgICBfTUFYX0NPVU5UID0gMTAwCiAgICAgZm9yIGNvdW50IGluIHJhbmdlKF9NQVhfQ09VTlQpOgogICAgICAgICB2YWx1ZXMgPSBfdGhyZWFkLl9jb3VudCgpLCB0aHJlYWRpbmcuX2RhbmdsaW5nCiAgICAgICAgIGlmIHZhbHVlcyA9PSBvcmlnaW5hbF92YWx1ZXM6CiAgICAgICAgICAgICBicmVhawotICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgdGltZS5zbGVlcCgwLjAxKQogICAgICAgICBnY19jb2xsZWN0KCkKICAgICAjIFhYWCBwcmludCBhIHdhcm5pbmcgaW4gY2FzZSBvZiBmYWlsdXJlPwogCkBAIC0xODgxLDcgKzE5NzksNyBAQAogICAgIFRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgcnVuIG9uIHRoZSByZXN1bHQgb2YgdGhlIGNvbW11bmljYXRlKCkgbWV0aG9kCiAgICAgb2YgYSBzdWJwcm9jZXNzLlBvcGVuIG9iamVjdC4KICAgICAiIiIKLSAgICBzdGRlcnIgPSByZS5zdWIoYnIiXFtcZCsgcmVmc1xdXHI/XG4/IiwgYiIiLCBzdGRlcnIpLnN0cmlwKCkKKyAgICBzdGRlcnIgPSByZS5zdWIoYnIiXFtcZCsgcmVmcywgXGQrIGJsb2Nrc1xdXHI/XG4/IiwgYiIiLCBzdGRlcnIpLnN0cmlwKCkKICAgICByZXR1cm4gc3RkZXJyCiAKIGRlZiBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKToKQEAgLTIwMTIsMjcgKzIxMTAsODEgQEAKICAgICByZXR1cm4gdGVzdCBpZiBvayBlbHNlIHVuaXR0ZXN0LnNraXAobXNnKSh0ZXN0KQogCiAKLWlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICAgIGRlZiBzdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICAiIiJEaXNhYmxlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcgU2V0RXJyb3JNb2RlLiIiIgotICAgICAgICAjIHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxJTI4dj12cy44NSUyOS5hc3B4Ci0gICAgICAgICMgR2V0RXJyb3JNb2RlIGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93cyBYUCBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwMywKLSAgICAgICAgIyBidXQgU2V0RXJyb3JNb2RlIHJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB3ZSBjYW4gdXNlIHRoYXQKLSAgICAgICAgaW1wb3J0IGN0eXBlcwotICAgICAgICBrMzIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyCi0gICAgICAgIFNFTV9OT0dQRkFVTFRFUlJPUkJPWCA9IDB4MDIKLSAgICAgICAgb2xkX2Vycm9yX21vZGUgPSBrMzIuU2V0RXJyb3JNb2RlKFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKLSAgICAgICAgazMyLlNldEVycm9yTW9kZShvbGRfZXJyb3JfbW9kZSB8IFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgeWllbGQKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGszMi5TZXRFcnJvck1vZGUob2xkX2Vycm9yX21vZGUpCi1lbHNlOgotICAgICMgdGhpcyBpcyBhIG5vLW9wIGZvciBvdGhlciBwbGF0Zm9ybXMKLSAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICAgIGRlZiBzdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICB5aWVsZAorZGVmIGZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUoZGlyZWN0b3J5KToKKyAgICAiIiJEZXRlY3RzIGlmIHRoZSBmaWxlIHN5c3RlbSBmb3IgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iIiIKKyAgICBiYXNlX2ZwLCBiYXNlX3BhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj1kaXJlY3RvcnkpCisgICAgY2FzZV9wYXRoID0gYmFzZV9wYXRoLnVwcGVyKCkKKyAgICBpZiBjYXNlX3BhdGggPT0gYmFzZV9wYXRoOgorICAgICAgICBjYXNlX3BhdGggPSBiYXNlX3BhdGgubG93ZXIoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguc2FtZWZpbGUoYmFzZV9wYXRoLCBjYXNlX3BhdGgpCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy51bmxpbmsoYmFzZV9wYXRoKQorCisKK2NsYXNzIFN1cHByZXNzQ3Jhc2hSZXBvcnQ6CisgICAgIiIiVHJ5IHRvIHByZXZlbnQgYSBjcmFzaCByZXBvcnQgZnJvbSBwb3BwaW5nIHVwLgorCisgICAgT24gV2luZG93cywgZG9uJ3QgZGlzcGxheSB0aGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9nLiAgT24gVU5JWCwKKyAgICBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiBjb3JlZHVtcCBmaWxlLgorICAgICIiIgorICAgIG9sZF92YWx1ZSA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIk9uIFdpbmRvd3MsIGRpc2FibGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZworICAgICAgICBTZXRFcnJvck1vZGUuCisKKyAgICAgICAgT24gVU5JWCwgdHJ5IHRvIHNhdmUgdGhlIHByZXZpb3VzIGNvcmUgZmlsZSBzaXplIGxpbWl0LCB0aGVuIHNldAorICAgICAgICBzb2Z0IGxpbWl0IHRvIDAuCisgICAgICAgICIiIgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAjIHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxLmFzcHgKKyAgICAgICAgICAgICMgR2V0RXJyb3JNb2RlIGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93cyBYUCBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwMywKKyAgICAgICAgICAgICMgYnV0IFNldEVycm9yTW9kZSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSwgc28gd2UgY2FuIHVzZSB0aGF0CisgICAgICAgICAgICBpbXBvcnQgY3R5cGVzCisgICAgICAgICAgICBzZWxmLl9rMzIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyCisgICAgICAgICAgICBTRU1fTk9HUEZBVUxURVJST1JCT1ggPSAweDAyCisgICAgICAgICAgICBzZWxmLm9sZF92YWx1ZSA9IHNlbGYuX2szMi5TZXRFcnJvck1vZGUoU0VNX05PR1BGQVVMVEVSUk9SQk9YKQorICAgICAgICAgICAgc2VsZi5fazMyLlNldEVycm9yTW9kZShzZWxmLm9sZF92YWx1ZSB8IFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vbGRfdmFsdWUgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBzZWxmLm9sZF92YWx1ZVsxXSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlICdDcmFzaCBSZXBvcnRlcicgb24gT1NYIHdhcyBjb25maWd1cmVkCisgICAgICAgICAgICAgICAgIyBpbiAnRGV2ZWxvcGVyJyBtb2RlIGFuZCB3YXJuIHRoYXQgaXQgd2lsbCBnZXQgdHJpZ2dlcmVkCisgICAgICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgaW4gdGVzdHMKKyAgICAgICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIHZhbHVlID0gc3VicHJvY2Vzcy5Qb3BlbihbJy91c3IvYmluL2RlZmF1bHRzJywgJ3JlYWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbS5hcHBsZS5DcmFzaFJlcG9ydGVyJywgJ0RpYWxvZ1R5cGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgICAgICBpZiB2YWx1ZS5zdHJpcCgpID09IGInZGV2ZWxvcGVyJzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoInRoaXMgdGVzdCB0cmlnZ2VycyB0aGUgQ3Jhc2ggUmVwb3J0ZXIsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYXQgaXMgaW50ZW50aW9uYWwiLCBlbmQ9JycsIGZsdXNoPVRydWUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqaWdub3JlX2V4Yyk6CisgICAgICAgICIiIlJlc3RvcmUgV2luZG93cyBFcnJvck1vZGUgb3IgY29yZSBmaWxlIGJlaGF2aW9yIHRvIGluaXRpYWwgdmFsdWUuIiIiCisgICAgICAgIGlmIHNlbGYub2xkX3ZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKHNlbGYub2xkX3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsIHNlbGYub2xkX3ZhbHVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogCiBkZWYgcGF0Y2godGVzdF9pbnN0YW5jZSwgb2JqZWN0X3RvX3BhdGNoLCBhdHRyX25hbWUsIG5ld192YWx1ZSk6CkBAIC0yMDY3LDMgKzIyMTksMjMgQEAKIAogICAgICMgYWN0dWFsbHkgb3ZlcnJpZGUgdGhlIGF0dHJpYnV0ZQogICAgIHNldGF0dHIob2JqZWN0X3RvX3BhdGNoLCBhdHRyX25hbWUsIG5ld192YWx1ZSkKKworCitkZWYgcnVuX2luX3N1YmludGVycChjb2RlKToKKyAgICAiIiIKKyAgICBSdW4gY29kZSBpbiBhIHN1YmludGVycHJldGVyLiBSYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCBpZiB0aGUgdHJhY2VtYWxsb2MKKyAgICBtb2R1bGUgaXMgZW5hYmxlZC4KKyAgICAiIiIKKyAgICAjIElzc3VlICMxMDkxNSwgIzE1NzUxOiBQeUdJTFN0YXRlXyooKSBmdW5jdGlvbnMgZG9uJ3Qgd29yayB3aXRoCisgICAgIyBzdWItaW50ZXJwcmV0ZXJzLCB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIHVzZXMgdGhlc2UgZnVuY3Rpb25zIGludGVybmFsbHkKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB0cmFjZW1hbGxvYworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJydW5faW5fc3ViaW50ZXJwKCkgY2Fubm90IGJlIHVzZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZiB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgdHJhY2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhbGxvY2F0aW9ucyIpCisgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgIHJldHVybiBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CmluZGV4IDYwOGVjMDEuLjhjYzI4NWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKQEAgLTI5LDE3ICsyOSwyMCBAQAogICAgICAgICBpZiBub3QgaGFzYXR0cihzeXMubW9kdWxlc1ttb2RuYW1lXSwgIl9fYWxsX18iKToKICAgICAgICAgICAgIHJhaXNlIE5vQWxsKG1vZG5hbWUpCiAgICAgICAgIG5hbWVzID0ge30KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYygiZnJvbSAlcyBpbXBvcnQgKiIgJSBtb2RuYW1lLCBuYW1lcykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZwotICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2FsbF9fIGZhaWx1cmUgaW4ge306IHt9OiB7fSIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsIGUuX19jbGFzc19fLl9fbmFtZV9fLCBlKSkKLSAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6Ci0gICAgICAgICAgICBkZWwgbmFtZXNbIl9fYnVpbHRpbnNfXyJdCi0gICAgICAgIGtleXMgPSBzZXQobmFtZXMpCi0gICAgICAgIGFsbCA9IHNldChzeXMubW9kdWxlc1ttb2RuYW1lXS5fX2FsbF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGFsbCkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobW9kdWxlPW1vZG5hbWUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWMoImZyb20gJXMgaW1wb3J0ICoiICUgbW9kbmFtZSwgbmFtZXMpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZworICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHt9OiB7fToge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgZS5fX2NsYXNzX18uX19uYW1lX18sIGUpKQorICAgICAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgZGVsIG5hbWVzWyJfX2J1aWx0aW5zX18iXQorICAgICAgICAgICAga2V5cyA9IHNldChuYW1lcykKKyAgICAgICAgICAgIGFsbF9saXN0ID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19hbGxfXworICAgICAgICAgICAgYWxsX3NldCA9IHNldChhbGxfbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChhbGxfc2V0LCBhbGxfbGlzdCwgImluIG1vZHVsZSB7fSIuZm9ybWF0KG1vZG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBhbGxfc2V0LCAiaW4gbW9kdWxlIHt9Ii5mb3JtYXQobW9kbmFtZSkpCiAKICAgICBkZWYgd2Fsa19tb2R1bGVzKHNlbGYsIGJhc2VkaXIsIG1vZHBhdGgpOgogICAgICAgICBmb3IgZm4gaW4gc29ydGVkKG9zLmxpc3RkaXIoYmFzZWRpcikpOgpAQCAtMTEwLDggKzExMyw1IEBACiAgICAgICAgICAgICBwcmludCgnRm9sbG93aW5nIG1vZHVsZXMgZmFpbGVkIHRvIGJlIGltcG9ydGVkOicsIGZhaWxlZF9pbXBvcnRzKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBbGxUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19vcGNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X19vcGNvZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MmU5ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weQpAQCAtMCwwICsxLDIzIEBACitpbXBvcnQgZGlzCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgdW5pdHRlc3QKKworX29wY29kZSA9IGltcG9ydF9tb2R1bGUoIl9vcGNvZGUiKQorCitjbGFzcyBPcGNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdGFja19lZmZlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydQT1BfVE9QJ10pLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ0RVUF9UT1BfVFdPJ10pLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSwgMCksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSwgMSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSwgMyksIC0yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfb3Bjb2RlLnN0YWNrX2VmZmVjdCwgMzAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCBkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCBkaXMub3BtYXBbJ1BPUF9UT1AnXSwgMCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChPcGNvZGVUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fb3N4X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weQppbmRleCBmYjE1OWVjLi41ZGNhZGY3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weQpAQCAtMTA5LDcgKzEwOSw5IEBACiAKICAgICBkZWYgdGVzdF9fc3VwcG9ydHNfdW5pdmVyc2FsX2J1aWxkcyhzZWxmKToKICAgICAgICAgaW1wb3J0IHBsYXRmb3JtCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ubWFjX3ZlcigpWzBdLnNwbGl0KCcuJykgPj0gWycxMCcsICc0J10sCisgICAgICAgIG1hY192ZXJfdHVwbGUgPSB0dXBsZShpbnQoaSkgZm9yIGkgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS5tYWNfdmVyKClbMF0uc3BsaXQoJy4nKVswOjJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY192ZXJfdHVwbGUgPj0gKDEwLCA0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuX3N1cHBvcnRzX3VuaXZlcnNhbF9idWlsZHMoKSkKIAogICAgIGRlZiB0ZXN0X19maW5kX2FwcHJvcHJpYXRlX2NvbXBpbGVyKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2FiYy5weQppbmRleCBkNGQ3NTU2Li45M2Y5ZGFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FiYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FiYy5weQpAQCAtNjgsNiArNjgsMTkgQEAKIAogY2xhc3MgVGVzdEFCQyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdF9BQkNfaGVscGVyKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSBhbiBBQkMgdXNpbmcgdGhlIGhlbHBlciBjbGFzcyBhbmQgcGVyZm9ybSBiYXNpYyBjaGVja3MKKyAgICAgICAgY2xhc3MgQyhhYmMuQUJDKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICAgICAgZGVmIGZvbyhjbHMpOiByZXR1cm4gY2xzLl9fbmFtZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShDKSwgYWJjLkFCQ01ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQykKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIGZvbyhjbHMpOiByZXR1cm4gc3VwZXIoKS5mb28oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZm9vKCksICdEJykKKwogICAgIGRlZiB0ZXN0X2Fic3RyYWN0bWV0aG9kX2Jhc2ljcyhzZWxmKToKICAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzCkBAIC0yODgsNyArMzAxLDEwIEBACiAgICAgICAgIGIgPSBCKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKGIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgKEEsKSkpCisgICAgICAgIHRva2VuX29sZCA9IGFiYy5nZXRfY2FjaGVfdG9rZW4oKQogICAgICAgICBBLnJlZ2lzdGVyKEIpCisgICAgICAgIHRva2VuX25ldyA9IGFiYy5nZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRva2VuX29sZCwgdG9rZW5fbmV3KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCBBKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYiwgKEEsKSkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQppbmRleCAxMDI2MGUzLi5hYjUxNDM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FpZmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBURVNURk4sIHVubGluawogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBvcwogaW1wb3J0IGlvCiBpbXBvcnQgc3lzCkBAIC0xMTksNyArMTIwLDcgQEAKICAgICAgIEU1MDQwQ0JDIDYxN0MwQTNDIDA4QkMwQTNDIDJDN0MwQjNDIDUxN0MwRTNDIDhBODQxMEZDIEI2ODQwRUJDIDQ1N0MwQTNDIFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMihmcmFtZXMpCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMikKIAogCiBjbGFzcyBBaWZjQUxBV1Rlc3QoQWlmY1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0MCw3ICsxNDEsNyBAQAogICAgICAgRTQ4MDBDQzAgNjIwMDBBNDAgMDhDMDBBNDAgMkIwMDBCNDAgNTIwMDBFNDAgOEEwMDExODAgQjYwMDBFQzAgNDYwMDBBNDAgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGNsYXNzIEFpZmNNaXNjVGVzdChhdWRpb3Rlc3RzLkF1ZGlvVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0OSw2ICsxNTAsMjEgQEAKICAgICAgICAgI1RoaXMgZmlsZSBjb250YWlucyBjaHVuayB0eXBlcyBhaWZjIGRvZXNuJ3QgcmVjb2duaXplLgogICAgICAgICBzZWxmLmYgPSBhaWZjLm9wZW4oZmluZGZpbGUoJ1NpbmUtMTAwMEh6LTMwMG1zLmFpZicpKQogCisgICAgZGVmIHRlc3RfcGFyYW1zX2FkZGVkKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZi5haWZmKCkKKyAgICAgICAgZi5zZXRwYXJhbXMoKDEsIDEsIDEsIDEsIGInTk9ORScsIGInJykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgZi5nZXRuY2hhbm5lbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBmLmdldHNhbXB3aWR0aCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIGYuZ2V0ZnJhbWVyYXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5mcmFtZXMsIGYuZ2V0bmZyYW1lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wdHlwZSwgZi5nZXRjb21wdHlwZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wbmFtZSwgZi5nZXRjb21wbmFtZSgpKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfaGVhZGVyX2NvbXB0eXBlX3NhbXB3aWR0aChzZWxmKToKICAgICAgICAgZm9yIGNvbXB0eXBlIGluIChiJ1VMQVcnLCBiJ3VsYXcnLCBiJ0FMQVcnLCBiJ2FsYXcnLCBiJ0c3MjInKToKICAgICAgICAgICAgIGZvdXQgPSBhaWZjLm9wZW4oaW8uQnl0ZXNJTygpLCAnd2InKQpAQCAtMzUyLDEyICszNjgsMTQgQEAKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2FpZmZfYnlfZXh0ZW5zaW9uKHNlbGYpOgogICAgICAgICBzYW1wd2lkdGggPSAyCi0gICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oVEVTVEZOICsgJy5haWZmJywgJ3diJykKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAnLmFpZmYnCisgICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oZmlsZW5hbWUsICd3YicpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIGZpbGVuYW1lKQogICAgICAgICBmb3V0LnNldHBhcmFtcygoMSwgc2FtcHdpZHRoLCAxLCAxLCBiJ1VMQVcnLCBiJycpKQogICAgICAgICBmcmFtZXMgPSBiJ1x4MDAnICogZm91dC5nZXRuY2hhbm5lbHMoKSAqIHNhbXB3aWR0aAogICAgICAgICBmb3V0LndyaXRlZnJhbWVzKGZyYW1lcykKICAgICAgICAgZm91dC5jbG9zZSgpCi0gICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOICsgJy5haWZmJywgJ3JiJykKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihmaWxlbmFtZSwgJ3JiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGNvbXB0eXBlKCksIGInTk9ORScpCiAgICAgICAgIGYuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQppbmRleCA5Y2IxNWM3Li5iNjE1NzIyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKQEAgLTE0LDYgKzE0LDcgQEAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogY2xhc3MgU3RkSU9CdWZmZXIoU3RyaW5nSU8pOgogICAgIHBhc3MKIApAQCAtNDYsNiArNDcsOSBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9kaXIpCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudGVtcF9kaXIsIHRvcGRvd249RmFsc2UpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKHNlbGYudGVtcF9kaXIsIG5hbWUpLCBzdGF0LlNfSVdSSVRFKQogICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcF9kaXIsIFRydWUpCiAKICAgICBkZWYgY3JlYXRlX3JlYWRvbmx5X2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgpAQCAtMjMxLDggKzIzNSw4IEBACiAgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCiAgICAgICAgICAgICAgICAgZm9yIGFyZ3Nfc3RyIGluIHRlc3Rlci5mYWlsdXJlczoKICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3Nfc3RyLnNwbGl0KCkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VzID0gdGVzdGVyLmFzc2VydFJhaXNlcwotICAgICAgICAgICAgICAgICAgICByYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgcGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3MpCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdGVyLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBtc2c9YXJncyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQogCiAgICAgICAgICAgICBkZWYgdGVzdF9zdWNjZXNzZXMoc2VsZiwgdGVzdGVyKToKICAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKQEAgLTE0MjEsNiArMTQyNSwxOSBAQAogICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3diJywgMSkiLCByZXByKHR5cGUpKQogCisgICAgZGVmIHRlc3Rfcl9sYXRpbihzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCdyJywgZW5jb2Rpbmc9J2xhdGluXzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgncicsIGVuY29kaW5nPSdsYXRpbl8xJykiLCByZXByKHR5cGUpKQorCisgICAgZGVmIHRlc3Rfd19iaWc1X2lnbm9yZShzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCd3JywgZW5jb2Rpbmc9J2JpZzUnLCBlcnJvcnM9J2lnbm9yZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCd3JywgZW5jb2Rpbmc9J2JpZzUnLCBlcnJvcnM9J2lnbm9yZScpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHR5cGUpKQorCisgICAgZGVmIHRlc3Rfcl8xX3JlcGxhY2Uoc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgncicsIDEsIGVycm9ycz0ncmVwbGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCdyJywgMSwgZXJyb3JzPSdyZXBsYWNlJykiLCByZXByKHR5cGUpKQorCiAKIGNsYXNzIFJGaWxlKG9iamVjdCk6CiAgICAgc2VlbiA9IHt9CkBAIC0xNTU3LDYgKzE1NzQsMjQgQEAKICAgICBdCiAKIAorY2xhc3MgVGVzdEZpbGVUeXBlT3BlbkFyZ3MoVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcGVuICh0aGUgYnVpbHRpbikgaXMgY29ycmVjdGx5IGNhbGxlZCIiIgorCisgICAgZGVmIHRlc3Rfb3Blbl9hcmdzKHNlbGYpOgorICAgICAgICBGVCA9IGFyZ3BhcnNlLkZpbGVUeXBlCisgICAgICAgIGNhc2VzID0gWworICAgICAgICAgICAgKEZUKCdyYicpLCAoJ3JiJywgLTEsIE5vbmUsIE5vbmUpKSwKKyAgICAgICAgICAgIChGVCgndycsIDEpLCAoJ3cnLCAxLCBOb25lLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCBlcnJvcnM9J3JlcGxhY2UnKSwgKCd3JywgLTEsIE5vbmUsICdyZXBsYWNlJykpLAorICAgICAgICAgICAgKEZUKCd3YicsIGVuY29kaW5nPSdiaWc1JyksICgnd2InLCAtMSwgJ2JpZzUnLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCAwLCAnbDEnLCAnc3RyaWN0JyksICgndycsIDAsICdsMScsICdzdHJpY3QnKSksCisgICAgICAgIF0KKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdidWlsdGlucy5vcGVuJykgYXMgbToKKyAgICAgICAgICAgIGZvciB0eXBlLCBhcmdzIGluIGNhc2VzOgorICAgICAgICAgICAgICAgIHR5cGUoJ2ZvbycpCisgICAgICAgICAgICAgICAgbS5hc3NlcnRfY2FsbGVkX3dpdGgoJ2ZvbycsICphcmdzKQorCisKIGNsYXNzIFRlc3RUeXBlQ2FsbGFibGUoUGFyc2VyVGVzdENhc2UpOgogICAgICIiIlRlc3Qgc29tZSBjYWxsYWJsZXMgYXMgb3B0aW9uL2FyZ3VtZW50IHR5cGVzIiIiCiAKQEAgLTQzODEsNyArNDQxNiw3IEBACiAgICAgZGVmIHRlc3RfdmVyc2lvbl9mb3JtYXQoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BQUCcpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyc2lvbicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249JyUocHJvZylzIDMuNScpCi0gICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctdiddKS5zdGRlcnIKKyAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy12J10pLnN0ZG91dAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdQUFAgMy41XG4nLCBtc2cpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX25vX2hlbHAoc2VsZik6CkBAIC00Mzk0LDcgKzQ0MjksNyBAQAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fYWN0aW9uKHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdYWFgnKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctVicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249JyUocHJvZylzIDMuNycpCi0gICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctViddKS5zdGRlcnIKKyAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy1WJ10pLnN0ZG91dAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYWFggMy43XG4nLCBtc2cpCiAKICAgICBkZWYgdGVzdF9ub19oZWxwKHNlbGYpOgpAQCAtNDUxNiw2ICs0NTUxLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuczIgIT0gbnMzKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobnMyICE9IG5zNCkKIAorICAgIGRlZiB0ZXN0X2VxdWFsaXR5X3JldHVybnNfbm90aW1wbGVtZXRlZChzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgMjE0ODEKKyAgICAgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UoYT0xLCBiPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobnMuX19lcV9fKE5vbmUpLCBOb3RJbXBsZW1lbnRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhucy5fX25lX18oTm9uZSksIE5vdEltcGxlbWVudGVkKQorCiAKICMgPT09PT09PT09PT09PT09PT09PQogIyBGaWxlIGVuY29kaW5nIHRlc3RzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5IGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQppbmRleCBkNjgyODRmLi5mOGRiZjA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKQEAgLTM1MywxMiArMzUzLDEyIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2Zyb21maWxlX2lvZXJyb3Ioc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzUzOTU6IENoZWNrIGlmIGZyb21maWxlIHJhaXNlcyBhIHByb3BlciBJT0Vycm9yCisgICAgICAgICMgSXNzdWUgIzUzOTU6IENoZWNrIGlmIGZyb21maWxlIHJhaXNlcyBhIHByb3BlciBPU0Vycm9yCiAgICAgICAgICMgaW5zdGVhZCBvZiBFT0ZFcnJvci4KICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCiAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBhLmZyb21maWxlLCBmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGEuZnJvbWZpbGUsIGYsIGxlbihzZWxmLmV4YW1wbGUpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKQEAgLTEwMjYsNiArMTAyNiwxOCBAQAogICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY3ZvYmpzaXplKCdQbjJQaScpCiAgICAgICAgIHN1cHBvcnQuY2hlY2tfc2l6ZW9mKHNlbGYsIGEsIGJhc2VzaXplKQogCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZWNvZGUgIT0gJ3UnOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAnZm9vJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImNhbm5vdCB1c2UgYSBzdHIiLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgYXJyYXkuYXJyYXkoJ3UnLCAnZm9vJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJjYW5ub3QgdXNlIGEgdW5pY29kZSBhcnJheSIsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsICJmb28iKQorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGFycmF5LmFycmF5KCd1JywgJ2ZvbycpKQorCiAKIGNsYXNzIFN0cmluZ1Rlc3QoQmFzZVRlc3QpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CmluZGV4IDYzNTI4ODguLmYxN2M5M2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CkBAIC0zNyw3ICszNyw3IEBACiAgICAgIyBGdW5jdGlvbkRlZiB3aXRoIGt3YXJncwogICAgICJkZWYgZigqKmt3YXJncyk6IHBhc3MiLAogICAgICMgRnVuY3Rpb25EZWYgd2l0aCBhbGwga2luZCBvZiBhcmdzCi0gICAgImRlZiBmKGEsIGI9MSwgYz1Ob25lLCBkPVtdLCBlPXt9LCAqYXJncywgKiprd2FyZ3MpOiBwYXNzIiwKKyAgICAiZGVmIGYoYSwgYj0xLCBjPU5vbmUsIGQ9W10sIGU9e30sICphcmdzLCBmPTQyLCAqKmt3YXJncyk6IHBhc3MiLAogICAgICMgQ2xhc3NEZWYKICAgICAiY2xhc3MgQzpwYXNzIiwKICAgICAjIENsYXNzRGVmLCBuZXcgc3R5bGUgY2xhc3MKQEAgLTE4MCwyMCArMTgwLDM2IEBACiAKIGNsYXNzIEFTVF9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgX2Fzc2VydFRydWVvcmRlcihzZWxmLCBhc3Rfbm9kZSwgcGFyZW50X3Bvcyk6CisgICAgZGVmIF9hc3NlcnRUcnVlb3JkZXIoc2VsZiwgYXN0X25vZGUsIHBhcmVudF9wb3MsIHJldmVyc2VfY2hlY2sgPSBGYWxzZSk6CisgICAgICAgIGRlZiBzaG91bGRfcmV2ZXJzZV9jaGVjayhwYXJlbnQsIGNoaWxkKToKKyAgICAgICAgICAgICMgSW4gc29tZSBzaXR1YXRpb25zLCB0aGUgY2hpbGRyZW4gb2Ygbm9kZXMgb2NjdXIgYmVmb3JlCisgICAgICAgICAgICAjIHRoZWlyIHBhcmVudHMsIGZvciBleGFtcGxlIGluIGEuYi5jLCBhIG9jY3VycyBiZWZvcmUgYgorICAgICAgICAgICAgIyBidXQgYSBpcyBhIGNoaWxkIG9mIGIuCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmVudCwgYXN0LkNhbGwpOgorICAgICAgICAgICAgICAgIGlmIHBhcmVudC5mdW5jID09IGNoaWxkOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJlbnQsIChhc3QuQXR0cmlidXRlLCBhc3QuU3Vic2NyaXB0KSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFzdF9ub2RlLCBhc3QuQVNUKSBvciBhc3Rfbm9kZS5fZmllbGRzIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgaXNpbnN0YW5jZShhc3Rfbm9kZSwgKGFzdC5leHByLCBhc3Quc3RtdCwgYXN0LmV4Y2VwdGhhbmRsZXIpKToKICAgICAgICAgICAgIG5vZGVfcG9zID0gKGFzdF9ub2RlLmxpbmVubywgYXN0X25vZGUuY29sX29mZnNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlX3BvcyA+PSBwYXJlbnRfcG9zKQorICAgICAgICAgICAgaWYgcmV2ZXJzZV9jaGVjazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZV9wb3MgPD0gcGFyZW50X3BvcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGVfcG9zID49IHBhcmVudF9wb3MpCiAgICAgICAgICAgICBwYXJlbnRfcG9zID0gKGFzdF9ub2RlLmxpbmVubywgYXN0X25vZGUuY29sX29mZnNldCkKICAgICAgICAgZm9yIG5hbWUgaW4gYXN0X25vZGUuX2ZpZWxkczoKICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihhc3Rfbm9kZSwgbmFtZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgogICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiB2YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKGNoaWxkLCBwYXJlbnRfcG9zKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIoY2hpbGQsIHBhcmVudF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZF9yZXZlcnNlX2NoZWNrKGFzdF9ub2RlLCBjaGlsZCkpCiAgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcih2YWx1ZSwgcGFyZW50X3BvcykKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIodmFsdWUsIHBhcmVudF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZF9yZXZlcnNlX2NoZWNrKGFzdF9ub2RlLCB2YWx1ZSkpCiAKICAgICBkZWYgdGVzdF9BU1Rfb2JqZWN0cyhzZWxmKToKICAgICAgICAgeCA9IGFzdC5BU1QoKQpAQCAtMjYyLDE0ICsyNzgsMTQgQEAKIAogICAgIGRlZiB0ZXN0X2FyZ3VtZW50cyhzZWxmKToKICAgICAgICAgeCA9IGFzdC5hcmd1bWVudHMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCdhcmdzJywgJ3ZhcmFyZycsICd2YXJhcmdhbm5vdGF0aW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3b25seWFyZ3MnLCAna3dhcmcnLCAna3dhcmdhbm5vdGF0aW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRzJywgJ2t3X2RlZmF1bHRzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoJ2FyZ3MnLCAndmFyYXJnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3b25seWFyZ3MnLCAna3dfZGVmYXVsdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dhcmcnLCAnZGVmYXVsdHMnKSkKIAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIHgudmFyYXJnCiAKLSAgICAgICAgeCA9IGFzdC5hcmd1bWVudHMoKnJhbmdlKDEsIDkpKQorICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygqcmFuZ2UoMSwgNykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YXJhcmcsIDIpCiAKICAgICBkZWYgdGVzdF9maWVsZF9hdHRyX3dyaXRhYmxlKHNlbGYpOgpAQCAtNDM5LDcgKzQ1NSw3IEBACiAgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGFyZ3M9W05hbWUoaWQ9J2VnZ3MnLCBjdHg9TG9hZCgpLCAiCiAgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9NSksIFN0cihzPSdhbmQgY2hlZXNlJywgbGluZW5vPTEsICIKICAgICAgICAgICAgICJjb2xfb2Zmc2V0PTExKV0sIGtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgIgotICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0pIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTQpLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0pIgogICAgICAgICApCiAKICAgICBkZWYgdGVzdF9jb3B5X2xvY2F0aW9uKHNlbGYpOgpAQCAtNDYwLDcgKzQ3Niw3IEBACiAgICAgICAgICAgICAiTW9kdWxlKGJvZHk9W0V4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3dyaXRlJywgY3R4PUxvYWQoKSwgIgogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBhcmdzPVtTdHIocz0nc3BhbScsIGxpbmVubz0xLCAiCiAgICAgICAgICAgICAiY29sX29mZnNldD02KV0sIGtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgIgotICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBsaW5lbm89MSwgY29sX29mZnNldD0wKSwgIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTUpLCBsaW5lbm89MSwgY29sX29mZnNldD0wKSwgIgogICAgICAgICAgICAgIkV4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3NwYW0nLCBjdHg9TG9hZCgpLCBsaW5lbm89MSwgIgogICAgICAgICAgICAgImNvbF9vZmZzZXQ9MCksIGFyZ3M9W1N0cihzPSdlZ2dzJywgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldLCAiCiAgICAgICAgICAgICAia2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCBsaW5lbm89MSwgIgpAQCAtNTYwLDggKzU3Niw4IEBACiAgICAgICAgIHNlbGYubW9kKG0sICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IiwgImV2YWwiKQogCiAgICAgZGVmIF9jaGVja19hcmd1bWVudHMoc2VsZiwgZmFjLCBjaGVjayk6Ci0gICAgICAgIGRlZiBhcmd1bWVudHMoYXJncz1Ob25lLCB2YXJhcmc9Tm9uZSwgdmFyYXJnYW5ub3RhdGlvbj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3M9Tm9uZSwga3dhcmc9Tm9uZSwga3dhcmdhbm5vdGF0aW9uPU5vbmUsCisgICAgICAgIGRlZiBhcmd1bWVudHMoYXJncz1Ob25lLCB2YXJhcmc9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBrd29ubHlhcmdzPU5vbmUsIGt3YXJnPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHM9Tm9uZSwga3dfZGVmYXVsdHM9Tm9uZSk6CiAgICAgICAgICAgICBpZiBhcmdzIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgYXJncyA9IFtdCkBAIC01NzEsMjAgKzU4NywxMiBAQAogICAgICAgICAgICAgICAgIGRlZmF1bHRzID0gW10KICAgICAgICAgICAgIGlmIGt3X2RlZmF1bHRzIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAga3dfZGVmYXVsdHMgPSBbXQotICAgICAgICAgICAgYXJncyA9IGFzdC5hcmd1bWVudHMoYXJncywgdmFyYXJnLCB2YXJhcmdhbm5vdGF0aW9uLCBrd29ubHlhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmcsIGt3YXJnYW5ub3RhdGlvbiwgZGVmYXVsdHMsIGt3X2RlZmF1bHRzKQorICAgICAgICAgICAgYXJncyA9IGFzdC5hcmd1bWVudHMoYXJncywgdmFyYXJnLCBrd29ubHlhcmdzLCBrd19kZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnLCBkZWZhdWx0cykKICAgICAgICAgICAgIHJldHVybiBmYWMoYXJncykKICAgICAgICAgYXJncyA9IFthc3QuYXJnKCJ4IiwgYXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSkpXQogICAgICAgICBjaGVjayhhcmd1bWVudHMoYXJncz1hcmdzKSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQotICAgICAgICBjaGVjayhhcmd1bWVudHModmFyYXJnYW5ub3RhdGlvbj1hc3QuTnVtKDMpKSwKLSAgICAgICAgICAgICAgInZhcmFyZ2Fubm90YXRpb24gYnV0IG5vIHZhcmFyZyIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyh2YXJhcmdhbm5vdGF0aW9uPWFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpLCB2YXJhcmc9IngiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd29ubHlhcmdzPWFyZ3MpLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd2FyZ2Fubm90YXRpb249YXN0Lk51bSg0MikpLAotICAgICAgICAgICAgICAgICAgICAgICAia3dhcmdhbm5vdGF0aW9uIGJ1dCBubyBrd2FyZyIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd2FyZ2Fubm90YXRpb249YXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnPSJ4IiksICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKICAgICAgICAgY2hlY2soYXJndW1lbnRzKGRlZmF1bHRzPVthc3QuTnVtKDMpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3JlIHBvc2l0aW9uYWwgZGVmYXVsdHMgdGhhbiBhcmdzIikKICAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3X2RlZmF1bHRzPVthc3QuTnVtKDQpXSksCkBAIC01OTksNyArNjA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogCiAgICAgZGVmIHRlc3RfZnVuY2RlZihzZWxmKToKLSAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pCisgICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKQogICAgICAgICBmID0gYXN0LkZ1bmN0aW9uRGVmKCJ4IiwgYSwgW10sIFtdLCBOb25lKQogICAgICAgICBzZWxmLnN0bXQoZiwgImVtcHR5IGJvZHkgb24gRnVuY3Rpb25EZWYiKQogICAgICAgICBmID0gYXN0LkZ1bmN0aW9uRGVmKCJ4IiwgYSwgW2FzdC5QYXNzKCldLCBbYXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSldLApAQCAtNzcwLDcgKzc3OCw3IEBACiAgICAgICAgIHNlbGYuZXhwcih1LCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAKICAgICBkZWYgdGVzdF9sYW1iZGEoc2VsZik6Ci0gICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKQorICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSkKICAgICAgICAgc2VsZi5leHByKGFzdC5MYW1iZGEoYSwgYXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSkpLAogICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogICAgICAgICBkZWYgZmFjKGFyZ3MpOgpAQCAtOTI4LDYgKzkzNiw5IEBACiAgICAgZGVmIHRlc3RfdHVwbGUoc2VsZik6CiAgICAgICAgIHNlbGYuX3NlcXVlbmNlKGFzdC5UdXBsZSkKIAorICAgIGRlZiB0ZXN0X25hbWVjb25zdGFudChzZWxmKToKKyAgICAgICAgc2VsZi5leHByKGFzdC5OYW1lQ29uc3RhbnQoNCksICJzaW5nbGV0b24gbXVzdCBiZSBUcnVlLCBGYWxzZSwgb3IgTm9uZSIpCisKICAgICBkZWYgdGVzdF9zdGRsaWJfdmFsaWRhdGVzKHNlbGYpOgogICAgICAgICBzdGRsaWIgPSBvcy5wYXRoLmRpcm5hbWUoYXN0Ll9fZmlsZV9fKQogICAgICAgICB0ZXN0cyA9IFtmbiBmb3IgZm4gaW4gb3MubGlzdGRpcihzdGRsaWIpIGlmIGZuLmVuZHN3aXRoKCIucHkiKV0KQEAgLTkzNiwxMyArOTQ3LDEwIEBACiAgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzdGRsaWIsIG1vZHVsZSkKICAgICAgICAgICAgIHdpdGggb3BlbihmbiwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmcDoKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBmcC5yZWFkKCkKLSAgICAgICAgICAgIG1vZCA9IGFzdC5wYXJzZShzb3VyY2UpCisgICAgICAgICAgICBtb2QgPSBhc3QucGFyc2Uoc291cmNlLCBmbikKICAgICAgICAgICAgIGNvbXBpbGUobW9kLCBmbiwgImV4ZWMiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBU1RfVGVzdHMsIEFTVEhlbHBlcnNfVGVzdCwgQVNUVmFsaWRhdG9yVGVzdHMpCi0KIGRlZiBtYWluKCk6CiAgICAgaWYgX19uYW1lX18gIT0gJ19fbWFpbl9fJzoKICAgICAgICAgcmV0dXJuCkBAIC05NTUsMjAgKzk2MywyMCBAQAogICAgICAgICAgICAgcHJpbnQoIl0iKQogICAgICAgICBwcmludCgibWFpbigpIikKICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCiAKICMjIyMgRVZFUllUSElORyBCRUxPVyBJUyBHRU5FUkFURUQgIyMjIyMKIGV4ZWNfcmVzdWx0cyA9IFsKLSgnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnTm9uZScsICgnTG9hZCcsKSkpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDkpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICdhJywgTm9uZSldLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCAxMCkpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgJ2EnLCBOb25lKV0sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbKCdOdW0nLCAoMSwgOCksIDApXSwgW10pLCBbKCdQYXNzJywgKDEsIDEyKSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgJ2FyZ3MnLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdLCAna3dhcmdzJywgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCAxNykpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgJ2EnLCBOb25lKSwgKCdhcmcnLCAnYicsIE5vbmUpLCAoJ2FyZycsICdjJywgTm9uZSksICgnYXJnJywgJ2QnLCBOb25lKSwgKCdhcmcnLCAnZScsIE5vbmUpXSwgJ2FyZ3MnLCBOb25lLCBbXSwgJ2t3YXJncycsIE5vbmUsIFsoJ051bScsICgxLCAxMSksIDEpLCAoJ05hbWUnLCAoMSwgMTYpLCAnTm9uZScsICgnTG9hZCcsKSksICgnTGlzdCcsICgxLCAyNCksIFtdLCAoJ0xvYWQnLCkpLCAoJ0RpY3QnLCAoMSwgMzApLCBbXSwgW10pXSwgW10pLCBbKCdQYXNzJywgKDEsIDUyKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdOYW1lQ29uc3RhbnQnLCAoMSwgMCksIE5vbmUpKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCA5KSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAoMSwgNiksICdhJywgTm9uZSldLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCAxMCkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgKDEsIDYpLCAnYScsIE5vbmUpXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbKCdOdW0nLCAoMSwgOCksIDApXSksIFsoJ1Bhc3MnLCAoMSwgMTIpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCAoJ2FyZycsICgxLCA3KSwgJ2FyZ3MnLCBOb25lKSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTQpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sICgnYXJnJywgKDEsIDgpLCAna3dhcmdzJywgTm9uZSksIFtdKSwgWygnUGFzcycsICgxLCAxNykpXSwgW10sIE5vbmUpXSksCisgICAgKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKSwgKCdhcmcnLCAoMSwgOSksICdiJywgTm9uZSksICgnYXJnJywgKDEsIDE0KSwgJ2MnLCBOb25lKSwgKCdhcmcnLCAoMSwgMjIpLCAnZCcsIE5vbmUpLCAoJ2FyZycsICgxLCAyOCksICdlJywgTm9uZSldLCAoJ2FyZycsICgxLCAzNSksICdhcmdzJywgTm9uZSksIFsoJ2FyZycsICgxLCA0MSksICdmJywgTm9uZSldLCBbKCdOdW0nLCAoMSwgNDMpLCA0MildLCAoJ2FyZycsICgxLCA0OSksICdrd2FyZ3MnLCBOb25lKSwgWygnTnVtJywgKDEsIDExKSwgMSksICgnTmFtZUNvbnN0YW50JywgKDEsIDE2KSwgTm9uZSksICgnTGlzdCcsICgxLCAyNCksIFtdLCAoJ0xvYWQnLCkpLCAoJ0RpY3QnLCAoMSwgMzApLCBbXSwgW10pXSksIFsoJ1Bhc3MnLCAoMSwgNTgpKV0sIFtdLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbXSwgW10sIE5vbmUsIE5vbmUsIFsoJ1Bhc3MnLCAoMSwgOCkpXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ0NsYXNzRGVmJywgKDEsIDApLCAnQycsIFsoJ05hbWUnLCAoMSwgOCksICdvYmplY3QnLCAoJ0xvYWQnLCkpXSwgW10sIE5vbmUsIE5vbmUsIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUmV0dXJuJywgKDEsIDgpLCAoJ051bScsICgxLCAxNSksIDEpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUmV0dXJuJywgKDEsIDgpLCAoJ051bScsICgxLCAxNSksIDEpKV0sIFtdLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdEZWxldGUnLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgNCksICd2JywgKCdEZWwnLCkpXSldKSwKICgnTW9kdWxlJywgWygnQXNzaWduJywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDApLCAndicsICgnU3RvcmUnLCkpXSwgKCdOdW0nLCAoMSwgNCksIDEpKV0pLAogKCdNb2R1bGUnLCBbKCdBdWdBc3NpZ24nLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ1N0b3JlJywpKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDUpLCAxKSldKSwKQEAgLTk3Nyw3ICs5ODUsNyBAQAogKCdNb2R1bGUnLCBbKCdJZicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDMpLCAndicsICgnTG9hZCcsKSksIFsoJ1Bhc3MnLCAoMSwgNSkpXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ1dpdGgnLCAoMSwgMCksIFsoJ3dpdGhpdGVtJywgKCdOYW1lJywgKDEsIDUpLCAneCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxMCksICd5JywgKCdTdG9yZScsKSkpXSwgWygnUGFzcycsICgxLCAxMykpXSldKSwKICgnTW9kdWxlJywgWygnV2l0aCcsICgxLCAwKSwgWygnd2l0aGl0ZW0nLCAoJ05hbWUnLCAoMSwgNSksICd4JywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDEwKSwgJ3knLCAoJ1N0b3JlJywpKSksICgnd2l0aGl0ZW0nLCAoJ05hbWUnLCAoMSwgMTMpLCAneicsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxOCksICdxJywgKCdTdG9yZScsKSkpXSwgWygnUGFzcycsICgxLCAyMSkpXSldKSwKLSgnTW9kdWxlJywgWygnUmFpc2UnLCAoMSwgMCksICgnQ2FsbCcsICgxLCA2KSwgKCdOYW1lJywgKDEsIDYpLCAnRXhjZXB0aW9uJywgKCdMb2FkJywpKSwgWygnU3RyJywgKDEsIDE2KSwgJ3N0cmluZycpXSwgW10sIE5vbmUsIE5vbmUpLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdSYWlzZScsICgxLCAwKSwgKCdDYWxsJywgKDEsIDE1KSwgKCdOYW1lJywgKDEsIDYpLCAnRXhjZXB0aW9uJywgKCdMb2FkJywpKSwgWygnU3RyJywgKDEsIDE2KSwgJ3N0cmluZycpXSwgW10sIE5vbmUsIE5vbmUpLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdUcnknLCAoMSwgMCksIFsoJ1Bhc3MnLCAoMiwgMikpXSwgWygnRXhjZXB0SGFuZGxlcicsICgzLCAwKSwgKCdOYW1lJywgKDMsIDcpLCAnRXhjZXB0aW9uJywgKCdMb2FkJywpKSwgTm9uZSwgWygnUGFzcycsICg0LCAyKSldKV0sIFtdLCBbXSldKSwKICgnTW9kdWxlJywgWygnVHJ5JywgKDEsIDApLCBbKCdQYXNzJywgKDIsIDIpKV0sIFtdLCBbXSwgWygnUGFzcycsICg0LCAyKSldKV0pLAogKCdNb2R1bGUnLCBbKCdBc3NlcnQnLCAoMSwgMCksICgnTmFtZScsICgxLCA3KSwgJ3YnLCAoJ0xvYWQnLCkpLCBOb25lKV0pLApAQCAtMTAwMiwyOSArMTAxMCwyOSBAQAogKCdJbnRlcmFjdGl2ZScsIFsoJ0V4cHInLCAoMSwgMCksICgnQmluT3AnLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDIpLCAyKSkpXSksCiBdCiBldmFsX3Jlc3VsdHMgPSBbCi0oJ0V4cHJlc3Npb24nLCAoJ05hbWUnLCAoMSwgMCksICdOb25lJywgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ05hbWVDb25zdGFudCcsICgxLCAwKSwgTm9uZSkpLAogKCdFeHByZXNzaW9uJywgKCdCb29sT3AnLCAoMSwgMCksICgnQW5kJywpLCBbKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA2KSwgJ2InLCAoJ0xvYWQnLCkpXSkpLAogKCdFeHByZXNzaW9uJywgKCdCaW5PcCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnQWRkJywpLCAoJ05hbWUnLCAoMSwgNCksICdiJywgKCdMb2FkJywpKSkpLAogKCdFeHByZXNzaW9uJywgKCdVbmFyeU9wJywgKDEsIDApLCAoJ05vdCcsKSwgKCdOYW1lJywgKDEsIDQpLCAndicsICgnTG9hZCcsKSkpKSwKLSgnRXhwcmVzc2lvbicsICgnTGFtYmRhJywgKDEsIDApLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgKCdOYW1lJywgKDEsIDcpLCAnTm9uZScsICgnTG9hZCcsKSkpKSwKKygnRXhwcmVzc2lvbicsICgnTGFtYmRhJywgKDEsIDApLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgKCdOYW1lQ29uc3RhbnQnLCAoMSwgNyksIE5vbmUpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFsoJ051bScsICgxLCAyKSwgMSldLCBbKCdOdW0nLCAoMSwgNCksIDIpXSkpLAogKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbXSwgW10pKSwKLSgnRXhwcmVzc2lvbicsICgnU2V0JywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDEpLCAnTm9uZScsICgnTG9hZCcsKSldKSksCisoJ0V4cHJlc3Npb24nLCAoJ1NldCcsICgxLCAwKSwgWygnTmFtZUNvbnN0YW50JywgKDEsIDEpLCBOb25lKV0pKSwKICgnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgWygnTnVtJywgKDIsIDYpLCAxKV0sIFsoJ051bScsICg0LCAxMCksIDIpXSkpLAogKCdFeHByZXNzaW9uJywgKCdMaXN0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdiJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICdjJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdkJywgKCdMb2FkJywpKV0pXSkpLAogKCdFeHByZXNzaW9uJywgKCdHZW5lcmF0b3JFeHAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnYicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAnYycsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZCcsICgnTG9hZCcsKSldKV0pKSwKICgnRXhwcmVzc2lvbicsICgnQ29tcGFyZScsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpLCBbKCdMdCcsKSwgKCdMdCcsKV0sIFsoJ051bScsICgxLCA0KSwgMiksICgnTnVtJywgKDEsIDgpLCAzKV0pKSwKLSgnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnZicsICgnTG9hZCcsKSksIFsoJ051bScsICgxLCAyKSwgMSksICgnTnVtJywgKDEsIDQpLCAyKV0sIFsoJ2tleXdvcmQnLCAnYycsICgnTnVtJywgKDEsIDgpLCAzKSldLCAoJ05hbWUnLCAoMSwgMTEpLCAnZCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxNSksICdlJywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMCksICdmJywgKCdMb2FkJywpKSwgWygnTnVtJywgKDEsIDIpLCAxKSwgKCdOdW0nLCAoMSwgNCksIDIpXSwgWygna2V5d29yZCcsICdjJywgKCdOdW0nLCAoMSwgOCksIDMpKV0sICgnTmFtZScsICgxLCAxMSksICdkJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDE1KSwgJ2UnLCAoJ0xvYWQnLCkpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ051bScsICgxLCAwKSwgMTApKSwKICgnRXhwcmVzc2lvbicsICgnU3RyJywgKDEsIDApLCAnc3RyaW5nJykpLAotKCdFeHByZXNzaW9uJywgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSkpLAotKCdFeHByZXNzaW9uJywgKCdTdWJzY3JpcHQnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOYW1lJywgKDEsIDIpLCAnYicsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2MnLCAoJ0xvYWQnLCkpLCBOb25lKSwgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0F0dHJpYnV0ZScsICgxLCAyKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ1N1YnNjcmlwdCcsICgxLCAyKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ05hbWUnLCAoMSwgMiksICdiJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYycsICgnTG9hZCcsKSksIE5vbmUpLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnTGlzdCcsICgxLCAwKSwgWygnTnVtJywgKDEsIDEpLCAxKSwgKCdOdW0nLCAoMSwgMyksIDIpLCAoJ051bScsICgxLCA1KSwgMyldLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnTGlzdCcsICgxLCAwKSwgW10sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAwKSwgWygnTnVtJywgKDEsIDApLCAxKSwgKCdOdW0nLCAoMSwgMiksIDIpLCAoJ051bScsICgxLCA0KSwgMyldLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMSksIFsoJ051bScsICgxLCAxKSwgMSksICgnTnVtJywgKDEsIDMpLCAyKSwgKCdOdW0nLCAoMSwgNSksIDMpXSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDApLCBbXSwgKCdMb2FkJywpKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICdjJywgKCdMb2FkJywpKSwgJ2QnLCAoJ0xvYWQnLCkpLCBbKCdTdWJzY3JpcHQnLCAoMSwgOCksICgnQXR0cmlidXRlJywgKDEsIDgpLCAoJ05hbWUnLCAoMSwgOCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOdW0nLCAoMSwgMTIpLCAxKSwgKCdOdW0nLCAoMSwgMTQpLCAyKSwgTm9uZSksICgnTG9hZCcsKSldLCBbXSwgTm9uZSwgTm9uZSkpLAorKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDcpLCAoJ0F0dHJpYnV0ZScsICgxLCA2KSwgKCdBdHRyaWJ1dGUnLCAoMSwgNCksICgnQXR0cmlidXRlJywgKDEsIDIpLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAnYycsICgnTG9hZCcsKSksICdkJywgKCdMb2FkJywpKSwgWygnU3Vic2NyaXB0JywgKDEsIDEyKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMTApLCAoJ05hbWUnLCAoMSwgOCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOdW0nLCAoMSwgMTIpLCAxKSwgKCdOdW0nLCAoMSwgMTQpLCAyKSwgTm9uZSksICgnTG9hZCcsKSldLCBbXSwgTm9uZSwgTm9uZSkpLAogXQogbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQppbmRleCBjNzlmZTZmLi4yZGM5ZDBjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKQEAgLTUsOSArNSwxNCBAQAogIyBJZiB0aGlzIGZhaWxzLCB0aGUgdGVzdCB3aWxsIGJlIHNraXBwZWQuCiB0aHJlYWQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogCi1pbXBvcnQgYXN5bmNvcmUsIGFzeW5jaGF0LCBzb2NrZXQsIHRpbWUKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IGFzeW5jaGF0CitpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xNSw2ICsyMCw3IEBACiAKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIFNFUlZFUl9RVUlUID0gYidRVUlUXG4nCitUSU1FT1VUID0gMy4wCiAKIGlmIHRocmVhZGluZzoKICAgICBjbGFzcyBlY2hvX3NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKQEAgLTI3LDggKzMzLDggQEAKICAgICAgICAgICAgIHNlbGYuZXZlbnQgPSBldmVudAogICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgc2VsZi5wb3J0ID0gc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQotICAgICAgICAgICAgIyBUaGlzIHdpbGwgYmUgc2V0IGlmIHRoZSBjbGllbnQgd2FudHMgdXMgdG8gd2FpdCBiZWZvcmUgZWNob2luZyBkYXRhCi0gICAgICAgICAgICAjIGJhY2suCisgICAgICAgICAgICAjIFRoaXMgd2lsbCBiZSBzZXQgaWYgdGhlIGNsaWVudCB3YW50cyB1cyB0byB3YWl0IGJlZm9yZSBlY2hvaW5nCisgICAgICAgICAgICAjIGRhdGEgYmFjay4KICAgICAgICAgICAgIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50ID0gTm9uZQogCiAgICAgICAgIGRlZiBydW4oc2VsZik6CkBAIC01MSw4ICs1Nyw4IEBACiAKICAgICAgICAgICAgICMgcmUtc2VuZCBlbnRpcmUgc2V0IG9mIGNvbGxlY3RlZCBkYXRhCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyB0aGlzIG1heSBmYWlsIG9uIHNvbWUgdGVzdHMsIHN1Y2ggYXMgdGVzdF9jbG9zZV93aGVuX2RvbmUsIHNpbmNlCi0gICAgICAgICAgICAgICAgIyB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY2hhbm5lbCB3aGVuIGl0J3MgZG9uZSBzZW5kaW5nCisgICAgICAgICAgICAgICAgIyB0aGlzIG1heSBmYWlsIG9uIHNvbWUgdGVzdHMsIHN1Y2ggYXMgdGVzdF9jbG9zZV93aGVuX2RvbmUsCisgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY2hhbm5lbCB3aGVuIGl0J3MgZG9uZSBzZW5kaW5nCiAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5idWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIG4gPSBjb25uLnNlbmQoc2VsZi5idWZmZXJbOnNlbGYuY2h1bmtfc2l6ZV0pCiAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDEpCkBAIC05NSw3ICsxMDEsNyBAQAogICAgICAgICBzLnN0YXJ0KCkKICAgICAgICAgZXZlbnQud2FpdCgpCiAgICAgICAgIGV2ZW50LmNsZWFyKCkKLSAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAjIEdpdmUgc2VydmVyIHRpbWUgdG8gc3RhcnQgYWNjZXB0aW5nLgorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KICAgICAgICAgcmV0dXJuIHMsIGV2ZW50CiAKIApAQCAtMTAzLDEwICsxMDksMTAgQEAKIGNsYXNzIFRlc3RBc3luY2hhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdXNlcG9sbCA9IEZhbHNlCiAKLSAgICBkZWYgc2V0VXAgKHNlbGYpOgorICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHN1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKIAotICAgIGRlZiB0ZWFyRG93biAoc2VsZik6CisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogCiAgICAgZGVmIGxpbmVfdGVybWluYXRvcl9jaGVjayhzZWxmLCB0ZXJtLCBzZXJ2ZXJfY2h1bmspOgpAQCAtMTE2LDE0ICsxMjIsMTYgQEAKICAgICAgICAgcy5zdGFydCgpCiAgICAgICAgIGV2ZW50LndhaXQoKQogICAgICAgICBldmVudC5jbGVhcigpCi0gICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KKyAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgICMgR2l2ZSBzZXJ2ZXIgdGltZSB0byBzdGFydCBhY2NlcHRpbmcuCiAgICAgICAgIGMgPSBlY2hvX2NsaWVudCh0ZXJtLCBzLnBvcnQpCiAgICAgICAgIGMucHVzaChiImhlbGxvICIpCiAgICAgICAgIGMucHVzaChiIndvcmxkIiArIHRlcm0pCiAgICAgICAgIGMucHVzaChiIkknbSBub3QgZGVhZCB5ZXQhIiArIHRlcm0pCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMTMzLDE3ICsxNDEsMTcgQEAKIAogICAgIGRlZiB0ZXN0X2xpbmVfdGVybWluYXRvcjEoc2VsZik6CiAgICAgICAgICMgdGVzdCBvbmUtY2hhcmFjdGVyIHRlcm1pbmF0b3IKLSAgICAgICAgZm9yIGwgaW4gKDEsMiwzKToKKyAgICAgICAgZm9yIGwgaW4gKDEsIDIsIDMpOgogICAgICAgICAgICAgc2VsZi5saW5lX3Rlcm1pbmF0b3JfY2hlY2soYidcbicsIGwpCiAKICAgICBkZWYgdGVzdF9saW5lX3Rlcm1pbmF0b3IyKHNlbGYpOgogICAgICAgICAjIHRlc3QgdHdvLWNoYXJhY3RlciB0ZXJtaW5hdG9yCi0gICAgICAgIGZvciBsIGluICgxLDIsMyk6CisgICAgICAgIGZvciBsIGluICgxLCAyLCAzKToKICAgICAgICAgICAgIHNlbGYubGluZV90ZXJtaW5hdG9yX2NoZWNrKGInXHJcbicsIGwpCiAKICAgICBkZWYgdGVzdF9saW5lX3Rlcm1pbmF0b3IzKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhyZWUtY2hhcmFjdGVyIHRlcm1pbmF0b3IKLSAgICAgICAgZm9yIGwgaW4gKDEsMiwzKToKKyAgICAgICAgZm9yIGwgaW4gKDEsIDIsIDMpOgogICAgICAgICAgICAgc2VsZi5saW5lX3Rlcm1pbmF0b3JfY2hlY2soYidxcXEnLCBsKQogCiAgICAgZGVmIG51bWVyaWNfdGVybWluYXRvcl9jaGVjayhzZWxmLCB0ZXJtbGVuKToKQEAgLTE1NCw3ICsxNjIsOSBAQAogICAgICAgICBjLnB1c2goZGF0YSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtkYXRhWzp0ZXJtbGVuXV0pCiAKQEAgLTE3NCw3ICsxODQsOSBAQAogICAgICAgICBjLnB1c2goZGF0YSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVmZmVyLCBkYXRhKQpAQCAtMTg2LDcgKzE5OCw5IEBACiAgICAgICAgIHAgPSBhc3luY2hhdC5zaW1wbGVfcHJvZHVjZXIoZGF0YStTRVJWRVJfUVVJVCwgYnVmZmVyX3NpemU9OCkKICAgICAgICAgYy5wdXNoX3dpdGhfcHJvZHVjZXIocCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMTk2LDcgKzIxMCw5IEBACiAgICAgICAgIGRhdGEgPSBiImhlbGxvIHdvcmxkXG5JJ20gbm90IGRlYWQgeWV0IVxuIgogICAgICAgICBjLnB1c2hfd2l0aF9wcm9kdWNlcihkYXRhK1NFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0yMDcsNyArMjIzLDkgQEAKICAgICAgICAgYy5wdXNoKGIiaGVsbG8gd29ybGRcblxuSSdtIG5vdCBkZWFkIHlldCFcbiIpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIFtiImhlbGxvIHdvcmxkIiwgYiIiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCkBAIC0yMjYsNyArMjQ0LDkgQEAKICAgICAgICAgIyB3aGVyZSB0aGUgc2VydmVyIGVjaG9lcyBhbGwgb2YgaXRzIGRhdGEgYmVmb3JlIHdlIGNhbiBjaGVjayB0aGF0IGl0CiAgICAgICAgICMgZ290IGFueSBkb3duIGJlbG93LgogICAgICAgICBzLnN0YXJ0X3Jlc2VuZF9ldmVudC5zZXQoKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCiAgICAgICAgICMgdGhlIHNlcnZlciBtaWdodCBoYXZlIGJlZW4gYWJsZSB0byBzZW5kIGEgYnl0ZSBvciB0d28gYmFjaywgYnV0IHRoaXMKQEAgLTIzNCwxNSArMjU0LDQ4IEBACiAgICAgICAgICMgKHdoaWNoIGNvdWxkIHN0aWxsIHJlc3VsdCBpbiB0aGUgY2xpZW50IG5vdCBoYXZpbmcgcmVjZWl2ZWQgYW55dGhpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ocy5idWZmZXIpLCAwKQogCisgICAgZGVmIHRlc3RfcHVzaChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTI1MjM6IHB1c2goKSBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IgaWYgaXQgZG9lc24ndCBnZXQKKyAgICAgICAgIyBhIGJ5dGVzIHN0cmluZworICAgICAgICBzLCBldmVudCA9IHN0YXJ0X2VjaG9fc2VydmVyKCkKKyAgICAgICAgYyA9IGVjaG9fY2xpZW50KGInXG4nLCBzLnBvcnQpCisgICAgICAgIGRhdGEgPSBiJ2J5dGVzXG4nCisgICAgICAgIGMucHVzaChkYXRhKQorICAgICAgICBjLnB1c2goYnl0ZWFycmF5KGRhdGEpKQorICAgICAgICBjLnB1c2gobWVtb3J5dmlldyhkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnB1c2gsIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucHVzaCwgJ3VuaWNvZGUnKQorICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCisgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiJ2J5dGVzJywgYidieXRlcycsIGInYnl0ZXMnXSkKKwogCiBjbGFzcyBUZXN0QXN5bmNoYXRfV2l0aFBvbGwoVGVzdEFzeW5jaGF0KToKICAgICB1c2Vwb2xsID0gVHJ1ZQogCisKK2NsYXNzIFRlc3RBc3luY2hhdE1vY2tlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmxvY2tpbmdpb2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjEzMzogaGFuZGxlX3JlYWQoKSBtdXN0IGlnbm9yZSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcihlcnJuby5FQUdBSU4pCisKKyAgICAgICAgZGlzcGF0Y2hlciA9IGFzeW5jaGF0LmFzeW5jX2NoYXQoKQorICAgICAgICBkaXNwYXRjaGVyLnNldF9zb2NrZXQoc29jaykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGRpc3BhdGNoZXIuZGVsX2NoYW5uZWwpCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdChkaXNwYXRjaGVyLCAnaGFuZGxlX2Vycm9yJykgYXMgZXJyb3I6CisgICAgICAgICAgICBkaXNwYXRjaGVyLmhhbmRsZV9yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnJvci5jYWxsZWQpCisKKwogY2xhc3MgVGVzdEhlbHBlckZ1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmluZF9wcmVmaXhfYXRfZW5kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaGF0LmZpbmRfcHJlZml4X2F0X2VuZCgicXdlcnR5XHIiLCAiXHJcbiIpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaGF0LmZpbmRfcHJlZml4X2F0X2VuZCgicXdlcnR5ZGtqZiIsICJcclxuIiksIDApCiAKKwogY2xhc3MgVGVzdEZpZm8odW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICBmID0gYXN5bmNoYXQuZmlmbygpCkBAIC0yNjgsOSArMzIxLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDAsIE5vbmUpKQogCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0QXN5bmNoYXQsIFRlc3RBc3luY2hhdF9XaXRoUG9sbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RIZWxwZXJGdW5jdGlvbnMsIFRlc3RGaWZvKQorY2xhc3MgVGVzdE5vdENvbm5lY3RlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZGlzYWxsb3dfbmVnYXRpdmVfdGVybWluYXRvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTEyNTkKKyAgICAgICAgY2xpZW50ID0gYXN5bmNoYXQuYXN5bmNfY2hhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsaWVudC5zZXRfdGVybWluYXRvciwgLTEpCisKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhOWVlYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgb3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMsIGltcG9ydF9tb2R1bGUKKworIyBTa2lwIHRlc3RzIGlmIHdlIGRvbid0IGhhdmUgdGhyZWFkaW5nLgoraW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKyMgU2tpcCB0ZXN0cyBpZiB3ZSBkb24ndCBoYXZlIGNvbmN1cnJlbnQuZnV0dXJlcy4KK2ltcG9ydF9tb2R1bGUoJ2NvbmN1cnJlbnQuZnV0dXJlcycpCisKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTIzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2MzY0YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5CkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IG9zCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgYnVmID0gb3MucmVhZCgwLCAxMDI0KQorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgb3Mud3JpdGUoMSwgYnVmKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2NhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgb3Mud3JpdGUoMSwgYidPVVQ6JytidWYpCisgICAgb3Mud3JpdGUoMiwgYidFUlI6JytidWYpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0NDk2NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy53cml0ZSgxLCBiJ09VVDonK2J1ZikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXg6CisgICAgICAgICAgICBvcy53cml0ZSgyLCBiJ0VSUjonICsgZXguX19jbGFzc19fLl9fbmFtZV9fLmVuY29kZSgnYXNjaWknKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9rZXljZXJ0My5wZW0gYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8va2V5Y2VydDMucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmE2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8va2V5Y2VydDMucGVtCkBAIC0wLDAgKzEsNzMgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UAoramJ3TmZSNUN0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTQorOXoyajFPbGFOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWgorYWdnRWRrajFUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUVDZ1lBMGFIK1QyVmYzV09QdjhLZGtjSmc2Z0NSZQoreUpLWE9XZ1dSY2ljeC9DVXpPRXNUeG1GSURQTHhxQVdBM2s3djBCKzN2akd3NVk5bHljVi81WHFYTm9RSTE0agoreTA5aU5zdW1kczEzdTVBS2tHZFRKblpoUTdVS2RvVkhmdVA0NFpkT3Yvcko1L1ZENkY0eld5d3BlOTBwY2JLKworQVdEVnR1c2dHUUJTaWVFbDFRSkJBT3lWclVHNWwyeW9VQnRkMnpyL2tpR20vRFl5WGxJdGhRTy9BMy9MbmdEVworNS95ZEd4VnNUN2xBVk9nQ3NvVCswTDRlZlRoOTBQanpXOExQUXJQQldWTUNRUURTM2gvRnRZWWQ1bGZ6K0ZOTAorOUNFZTFGMXc5bDhQNzQ5dU5VRDBnMzE3enYxdGF0SXFWQ3NRV0hmVkhOZFZ2ZlErdlNGdzM4T09STzAwWHFzOQorMUdKckFrQmtvWFhFa3hDWm95NFB0ZWhlTy84SVdXTEdHcjZMN2RpNk16RmwxbElxd1Q2RDhMOW9hVjJ2eW5GVAorRG5Lb3AwcGEwOVVuaGp5dzU3S01ObVNFMlNVSkFrRUFybG9URXpwZ1JtQ3E0SUsyL05wQ2VHZEhTNXVxUmxiaAorMVZJYS94R3BzN0VXUWw1TW44c3dRRGVsL1lQM1dHSFRqZng3cGdTZWdRZmt5YVJ0R3BaOU9RSkFhOVZ1bWo4bQorSkFBdEkwQm5nYThoZ1F4N0JoVFFZNENhZER4eWlSR09HWWh3VXpZVkNxa2Iyc2JWUkg5SG53VWFKVDdjV0JZMworUm5KZEhPTVhXZW03L3c9PQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMSAoMHgwKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MSAoMHhiMDkyNjRiMWYyZGEyMWQxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogTm92IDEzIDE5OjQ3OjA3IDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIEw9Q2FzdGxlIEFudGhyYXgsIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIENOPWxvY2FsaG9zdAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmMyOmUwOjBmOjQ5OjAwOjI4OjM2OmY5OjcwOjVjOjhmOjhkOmJjOjBkOgorICAgICAgICAgICAgICAgICAgICA3ZDoxZTo0MjpiNTplYzoxZDo1YzoyZjphNDozMTo3MDoxNjowZjpjMDpjYjoKKyAgICAgICAgICAgICAgICAgICAgYzY6MjQ6ZDM6YmU6MTM6MTY6ZWU6YTU6Njc6OTc6MDM6YTY6ZGY6YTk6OTk6CisgICAgICAgICAgICAgICAgICAgIDk2OmNjOmM3OjJhOmZiOjExOjdmOjRlOjY1OjRmOjhhOjVlOjgyOjIxOjRjOgorICAgICAgICAgICAgICAgICAgICBmNzozZDphMzpkNDplOTo1YTozNzplNzoyMjpmZDo3ZTpjZDo1Mzo2ZDo5MzoKKyAgICAgICAgICAgICAgICAgICAgMzQ6ZGU6OWM6YWQ6ODQ6YTI6Mzc6YmU6YzU6OGQ6ODI6NGY6ZTM6YWU6MjM6CisgICAgICAgICAgICAgICAgICAgIGYzOmJlOmE3Ojc1OjJjOjcyOjBmOmVhOmYzOmNhOmNkOmZjOmU5OjNmOmI1OgorICAgICAgICAgICAgICAgICAgICBhZjo1Njo5OTo2YTowODowNDo3Njo0ODpmNTo0ZTpjNDphYzpiZjo1YzpkNjoKKyAgICAgICAgICAgICAgICAgICAgMjE6ODI6YTU6M2M6ODg6ZTU6YmU6MWI6YjEKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICAyZjo0Mjo1ZjphMzowOToyYzpmYTo1MTo4ODpjNzozNzo3ZjplYTowZTo2MzpmMDphMjo5YToKKyAgICAgICAgIGU1OjVhOmUyOmM4OjIwOmYwOjNmOjYwOmJjOmM4OjBmOmI2OmM2Ojc2OmNlOmRiOjgzOjkzOgorICAgICAgICAgZjU6YTM6MzM6Njc6MDE6OGU6MDQ6Y2Q6MDA6OWE6NzM6ZmQ6ZjM6MzU6ODY6ZmE6ZDc6MTM6CisgICAgICAgICBlMjo0NjpjNjo5ZDpjMDoyOTo1MzpkNDphOTo5MDpiODo3Nzo0YjplNjo4Mzo3NjplNDo5MjoKKyAgICAgICAgIGQ2OjljOjUwOmNmOjQzOmQwOmM2OjAxOjc3OjYxOjlhOmRlOjliOjcwOmY3OjcyOmNkOjU5OgorICAgICAgICAgMDA6MzE6Njk6ZDk6YjQ6Y2E6MDY6OWM6NmQ6YzM6Yzc6ODA6OGM6Njg6ZTY6YjU6YTI6Zjg6CisgICAgICAgICBlZjoxZDpiYjoxNjo5Zjo3Nzo3NzplZjo4Nzo2MjoyMjo5Yjo0ZDo2OTphNDozYToxYTpmMToKKyAgICAgICAgIDIxOjVlOjhjOjMyOmFjOjkyOmZkOjE1OjZiOjE4OmMyOjdmOjE1OjBkOjk4OjMwOmNhOjc1OgorICAgICAgICAgOGY6MWE6NzE6ZGY6ZGE6MWQ6YjI6ZWY6OWE6ZTg6MmQ6MmU6MDI6ZmQ6NGE6M2M6YWE6OTY6CisgICAgICAgICAwYjowNjo1ZDozNTpiMzozZDoyNDo4Nzo0YjplMDpiMDo1ODo2MDoyZjo0NTphYzoyZTo0ODoKKyAgICAgICAgIDhhOmIwOjk5OjEwOjY1OjI3OmZmOmNjOmIxOmQ4OmZkOmJkOjI2OjZiOmI5OjBjOjA1OjJhOgorICAgICAgICAgZjQ6NDU6NjM6MzU6NTE6MDc6ZWQ6ODM6ODU6ZmU6NmY6Njk6Y2I6YmI6NDA6YTg6YWU6YjY6CisgICAgICAgICAzYjo1Njo0YToyZDphNDplZDo2ZDoxMToyYzo0ZDplZDoxNzoyNDpmZDo0NzpiYzpkMzo0MToKKyAgICAgICAgIGEyOmQzOjA2OmZlOjBjOjkwOmQ4OmQ4Ojk0OjI2OmM0OmZmOmNjOmExOmQ4OjQyOjc3OmViOgorICAgICAgICAgZmM6YTk6OTQ6NzEKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ3BEQ0NBWXdDQ1FDd2ttU3g4dG9oMFRBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWQorV1RFbU1DUUdBMVVFQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVgorQkFNTURXOTFjaTFqWVMxelpYSjJaWEl3SGhjTk1UTXdNVEEwTVRrME56QTNXaGNOTWpJeE1URXpNVGswTnpBMworV2pCZk1Rc3dDUVlEVlFRR0V3SllXVEVYTUJVR0ExVUVCeE1PUTJGemRHeGxJRUZ1ZEdoeVlYZ3hJekFoQmdOVgorQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodgorYzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTGdEMGtBS0RiNWNGeVBqYndOZlI1QwordGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk05ejJqMU9sYQorTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVphZ2dFZGtqMQorVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFDOUNYNk1KTFBwUgoraU1jM2Yrb09ZL0NpbXVWYTRzZ2c4RDlndk1nUHRzWjJ6dHVEay9Xak0yY0JqZ1ROQUpwei9mTTFodnJYRStKRworeHAzQUtWUFVxWkM0ZDB2bWczYmtrdGFjVU05RDBNWUJkMkdhM3B0dzkzTE5XUUF4YWRtMHlnYWNiY1BIZ0l4bworNXJXaStPOGR1eGFmZDNmdmgySWltMDFwcERvYThTRmVqREtza3YwVmF4akNmeFVObURES2RZOGFjZC9hSGJMdgorbXVndExnTDlTanlxbGdzR1hUV3pQU1NIUytDd1dHQXZSYXd1U0lxd21SQmxKLy9Nc2RqOXZTWnJ1UXdGS3ZSRgorWXpWUkIrMkRoZjV2YWN1N1FLaXV0anRXU2kyazdXMFJMRTN0RnlUOVI3elRRYUxUQnY0TWtOallsQ2JFLzh5aAorMkVKMzYveXBsSEU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vcHljYWNlcnQucGVtIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3B5Y2FjZXJ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWIxZjNlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3B5Y2FjZXJ0LnBlbQpAQCAtMCwwICsxLDc4IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgwICgweGIwOTI2NGIxZjJkYTIxZDApCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKYW4gIDIgMTk6NDc6MDcgMjAyMyBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmU3OmRlOmU5OmUzOjBjOjlmOjAwOmI2OmExOmZkOjJiOjViOjk2OmQyOgorICAgICAgICAgICAgICAgICAgICA2ZjpjYzplMDpiZTo4NjpiOToyMDo1ZTplYzowMzo3YTo1NTphYjplYTphNDoKKyAgICAgICAgICAgICAgICAgICAgZTk6Zjk6NDk6ODU6ZDI6NjY6ZDU6ZWQ6Yzc6N2E6ZWE6NTY6OGU6MmQ6OGY6CisgICAgICAgICAgICAgICAgICAgIGU3OjQyOmUyOjYyOjI4OmE5OjlmOmQ2OjFiOjhlOmViOmI1OmI0OjljOjlmOgorICAgICAgICAgICAgICAgICAgICAxNDphYjpkZjplNjo5NDo4Yjo3NjoxZDozZTo2ZDoyNDo2MTplZDowYzpiZjoKKyAgICAgICAgICAgICAgICAgICAgMDA6OGE6NjE6MGM6ZGY6NWM6Yzg6MzY6NzM6MTY6MDA6Y2Q6NDc6YmE6NmQ6CisgICAgICAgICAgICAgICAgICAgIGE0OmE0Ojc0Ojg4OjgzOjIzOjBhOjE5OmZjOjA5OmE3OjNjOjRhOjRiOmQzOgorICAgICAgICAgICAgICAgICAgICBlNzoxZDoyZDplNDplYTo0Yzo1NDoyMTpmMzoyNjpkYjo4OTozNzoxODpkNDoKKyAgICAgICAgICAgICAgICAgICAgMDI6YmI6NDA6MzI6NWY6YTQ6ZmY6MmQ6MWM6Zjc6ZDQ6YmI6ZWM6OGU6Y2Y6CisgICAgICAgICAgICAgICAgICAgIDVjOjgyOmFjOmU2OjdjOjA4OjZjOjQ4Ojg1OjYxOjA3OjdmOjI1OmUwOjVjOgorICAgICAgICAgICAgICAgICAgICBlMDpiYzozNDo1ZjplMDpiOTowNDo0Nzo3NTpjODo0NzowYjo4ZDpiYzpkNjoKKyAgICAgICAgICAgICAgICAgICAgYzg6Njg6NWY6MzM6ODM6NjI6ZDI6MjA6NDQ6MzU6YjE6YWQ6ODE6MWE6OGE6CisgICAgICAgICAgICAgICAgICAgIGNkOmJjOjM1OmIwOjVjOjhiOjQ3OmQ2OjE4OmU5OjljOjE4Ojk3OmNjOjAxOgorICAgICAgICAgICAgICAgICAgICAzYzoyOTpjYzplODoxZTplNDplNDpjMTpiODpkZTplNzpjMjoxMToxODo4NzoKKyAgICAgICAgICAgICAgICAgICAgNWE6OTM6MzQ6ZDg6YTY6MjU6Zjc6MTQ6NzE6ZWI6ZTQ6MjE6YTI6ZDI6MGY6CisgICAgICAgICAgICAgICAgICAgIDJlOjJlOmQ0OjYyOjAwOjM1OmQzOmQ2OmVmOjVjOjYwOjRiOjRjOmE5OjE0OgorICAgICAgICAgICAgICAgICAgICBlMjpkZDoxNTo1ODo0NjozNzozMzoyNjpiNzplNzoyZTo1ZDplZDo0MjplNDoKKyAgICAgICAgICAgICAgICAgICAgYzU6NGQKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDdkOjBhOmY1OmNiOjhkOmQzOjVkOmJkOjk5OjhlOmY4OjJiOjBmOmJhOmViOmMyOmQ5OmE2OgorICAgICAgICAgMjc6NGY6MmU6N2I6MmY6MGU6NjQ6ZDg6MWM6MzU6NTA6NGU6ZWU6ZmM6OTA6Yjk6OGQ6NmQ6CisgICAgICAgICBhODpjNTpjNjowNjpiMDphZjpmMzoyZDpiZjozYjpiODo0MjowNzpkZDoxODo3ZDo2ZDo5NToKKyAgICAgICAgIDU0OjU3Ojg1OjE4OjYwOjQ3OjJmOmViOjc4OjFiOmY5OmU4OjE3OmZkOjVhOjBkOjg3OjE3OgorICAgICAgICAgMjg6YWM6NGM6NmE6ZTY6YmM6Mjk6ZjQ6ZjQ6NTU6NzA6Mjk6NDI6ZGU6ODU6ZWE6YWI6NmM6CisgICAgICAgICAyMzowNjo2NDozMDo3NTowMjo4ZTo1MzpiYzo1ZTowMTozMzozNzpjYzoxZTpjZDpiODphNDoKKyAgICAgICAgIGZkOmNhOmU0OjVmOjY1OjNiOjgzOjFjOjg2OmYxOjU1OjAyOmEwOjNhOjhmOmRiOjkxOmI3OgorICAgICAgICAgNDA6MTQ6YjQ6ZTc6OGQ6ZDI6ZWU6NzM6YmE6ZTM6ZTU6MzQ6MmQ6YmM6OTQ6NmY6NGU6MjQ6CisgICAgICAgICAwNjpmNzo1Zjo4YjowZTphNzo4ZTo2YjpkZTo1ZTo3NTpmNDozMjo5YTo1MDpiMTo0NDozMzoKKyAgICAgICAgIDlhOmQwOjA1OmUyOjc4OjgyOmZmOmRiOmRhOjhhOjYzOmViOmE5OmRkOmQxOmJmOmEwOjYxOgorICAgICAgICAgYWQ6ZTM6OWU6OGE6MjQ6NWQ6NjI6MGU6ZTc6NGM6OTE6N2Y6ZWY6ZGY6MzQ6MzY6M2I6MmY6CisgICAgICAgICA1ZDpmNTo4NDpiMjoyZjpjNDo2ZDo5Mzo5NjoxYTo2ZjozMDoyODpmMTpkYToxMjo5YTo2NDoKKyAgICAgICAgIGI0OjQwOjMzOjFkOmJkOmRlOjJiOjUzOmE4OmVhOmJlOmQ2OmJjOjRlOjk2OmY1OjQ0OmZiOgorICAgICAgICAgMzI6MTg6YWU6ZDU6MWY6ZjY6Njk6YWY6YjY6NGU6N2I6MWQ6NTg6ZWM6M2I6YTk6NTM6YTM6CisgICAgICAgICA1ZTo1ODpjODo5ZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEYlRDQ0FsV2dBd0lCQWdJSkFMQ1NaTEh5MmlIUU1BMEdDU3FHU0liM0RRRUJCUVVBTUUweEN6QUpCZ05WCitCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZ1JtOTFibVJoZEdsdmJpQkRRVEVXCitNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pBZUZ3MHhNekF4TURReE9UUTNNRGRhRncweU16QXhNREl4CitPVFEzTURkYU1FMHhDekFKQmdOVkJBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnCitSbTkxYm1SaGRHbHZiaUJEUVRFV01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU9mZTZlTU1ud0Myb2Ywclc1YlNiOHpndm9hNUlGN3NBM3BWCitxK3FrNmZsSmhkSm0xZTNIZXVwV2ppMlA1MExpWWlpcG45WWJqdXUxdEp5ZkZLdmY1cFNMZGgwK2JTUmg3UXkvCitBSXBoRE45Y3lEWnpGZ0ROUjdwdHBLUjBpSU1qQ2huOENhYzhTa3ZUNXgwdDVPcE1WQ0h6SnR1Sk54alVBcnRBCitNbCtrL3kwYzk5Uzc3STdQWElLczVud0liRWlGWVFkL0plQmM0THcwWCtDNUJFZDF5RWNMamJ6V3lHaGZNNE5pCiswaUJFTmJHdGdScUt6Yncxc0Z5TFI5WVk2WndZbDh3QlBDbk02QjdrNU1HNDN1ZkNFUmlIV3BNMDJLWWw5eFJ4Cis2K1Fob3RJUExpN1VZZ0ExMDlidlhHQkxUS2tVNHQwVldFWTNNeWEzNXk1ZDdVTGt4VTBDQXdFQUFhTlFNRTR3CitIUVlEVlIwT0JCWUVGTHpkWXRsMjJodlNWR3ZQNEdhYkhoNTdWZ3dMTUI4R0ExVWRJd1FZTUJhQUZMemRZdGwyCisyaHZTVkd2UDRHYWJIaDU3Vmd3TE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBSDBLOWN1TjAxMjltWTc0S3crNjY4TFpwaWRQTG5zdkRtVFlIRFZRVHU3OGtMbU5iYWpGeGdhd3IvTXR2enU0CitRZ2ZkR0gxdGxWUlhoUmhnUnkvcmVCdjU2QmY5V2cySEZ5aXNUR3JtdkNuMDlGVndLVUxlaGVxcmJDTUdaREIxCitBbzVUdkY0Qk16Zk1IczI0cFAzSzVGOWxPNE1jaHZGVkFxQTZqOXVSdDBBVXRPZU4wdTV6dXVQbE5DMjhsRzlPCitKQWIzWDRzT3A0NXIzbDUxOURLYVVMRkVNNXJRQmVKNGd2L2Iyb3BqNjZuZDBiK2dZYTNqbm9va1hXSU81MHlSCitmKy9mTkRZN0wxMzFoTEl2eEcyVGxocHZNQ2p4MmhLYVpMUkFNeDI5M2l0VHFPcSsxcnhPbHZWRSt6SVlydFVmCis5bW12dGs1N0hWanNPNmxUbzE1WXlKND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfY2VydC5wZW0gYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc3NsX2NlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTdkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc3NsX2NlcnQucGVtCkBAIC0wLDAgKzEsMTUgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1ZEQ0NBYjJnQXdJQkFnSUpBTmZIT0JrWnI4Sk9NQTBHQ1NxR1NJYjNEUUVCQlFVQU1GOHhDekFKQmdOVgorQkFZVEFsaFpNUmN3RlFZRFZRUUhFdzVEWVhOMGJHVWdRVzUwYUhKaGVERWpNQ0VHQTFVRUNoTWFVSGwwYUc5dQorSUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQWVGdzB4TURFdworTURneU16QXhOVFphRncweU1ERXdNRFV5TXpBeE5UWmFNRjh4Q3pBSkJnTlZCQVlUQWxoWk1SY3dGUVlEVlFRSAorRXc1RFlYTjBiR1VnUVc1MGFISmhlREVqTUNFR0ExVUVDaE1hVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1aworWVhScGIyNHhFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBdworZ1lrQ2dZRUEyMXZUNWlzcTdGNjhhbVl1dU5wU0ZsS0RQck1VQ2E0WVdZcVpSdDJPWisvM05LYVoyeEFpU3dyNworNk1yUUY3MHQ1bkxiU1BwcUU1KzVWclM1OFNZK2cvc1hMaUZkNkFwbEgxd0pad2g3OERvZmJGWVhVZ2drdEZNdAorcFR5aVg4anRQNjZia2NQa0RBREEwODlSSTFUUVI2Q2ErbjdIRmE3YzFmYWJWVjZpM3prQ0F3RUFBYU1ZTUJZdworRkFZRFZSMFJCQTB3QzRJSmJHOWpZV3hvYjNOME1BMEdDU3FHU0liM0RRRUJCUVVBQTRHQkFIUGN0UUJFUTR3ZAorQko2K0pjcElyYW9wTG44QkdoYmpOV2o0MG1tUnFXQi9OQVdGNk01bmU3S3BHQXU3dExlRzRoYjF6TGFsZEs4RworbHh5MkdQU1JGNkxGUzQ4ZHBFajJIYk12Mm52djZ4eGFsRE1KOStEaWNXZ0FLVFE2YmNYMmozR1VrQ1IwZy9UMQorQ1JsTkJBQWx2aEt6TzdDbHBmOWwwWUtCRWZyYUpCeVgKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfa2V5LnBlbSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfa2V5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmQzYmJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9rZXkucGVtCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2R3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUV3Z2dKZEFnRUFBb0dCQU50YjArWXJLdXhldkdwbQorTHJqYVVoWlNnejZ6RkFtdUdGbUttVWJkam1mdjl6U21tZHNRSWtzSysrakswQmU5TGVaeTIwajZhaE9mdVZhMAordWZFbVBvUDdGeTRoWGVnS1pSOWNDV2NJZS9BNkgyeFdGMUlJSkxSVExhVThvbC9JN1QrdW01SEQ1QXdBd05QUAorVVNOVTBFZWdtdnAreHhXdTNOWDJtMVZlb3Q4NUFnTUJBQUVDZ1lBM1pkWjY3M1gwb2V4RmxxN0FBbXJ1dGtIdAorQ0w3THZ3cnBPaWFCamh5VHhUZVNOV3p2dFFCa0lVOERPSTBiSWF6QTRVcmVBRmZmd3R2RXVQbW9uRGIzRitJcQorU01BdTQyWGNHeVZaRWwrZ0hsVFBVOVhSWDduVE9YVnQrTWxSUlJ4TDZ0OUdrR2ZVQVhJM1h4SkRYVzNjMHZCSworVUw5eHFEOGNPUlhPZkUwNnJRSkJBUDhtRVgxRVJrUjY0UHRzb2U0MjgxdmpUbE5mSWJzN05NUGtVbnJuOU4vWQorQkxoak5JZlEzSEZaRzhCVE1MZlg3a0NTOUQ1OTNEVzV0VjRaOUJQL2M2Y0NRUURjRnpDY1ZBck5oMkpTeXdPUQorWmZUZlJiSmcvWjVMdDlGa25ndjFtZWVHTlBnSU1MTjhTZzY3OXBBT09XbXpkTU8zVjcwNnJOUHpTVk1NRTdFNQorb1BJZkFrRUE4cERkZGFyUDV0Q3ZUVGdVcG1URmJha20wS29UWm0yK0Z6SGNuQTRqUmgrWE5UalRPdjk4WTZJaworZU81ZDFabktYc2VXdmtabmNRZ3hmZG5NcXFwajV3SkFjTnEvUlZuZTFEYllsd1djaFQyU2k2NU1ZbW1KOHQrRgorMG1jc1VMcWpPbkVNd2Y1ZStwdHE1THp3YnlySFpZcTVGTms3b2N1ZlB2L1pRcmNTU0MrY0Z3SkJBS3ZPSkJ5UworeDU2cXlHZVpMT1FsV1MySlMzS0pvNTlYdUxGR3FjYmdOOU9tOXhGYTQxWWI0TjlOdnBsRml2c3ZaZHczbTFRLworU1BJWFF1VDhSTVBEVk5RPQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTEyMTAxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkKQEAgLTAsMCArMSwxMDY0IEBACisiIiJUZXN0cyBmb3IgYmFzZV9ldmVudHMucHkiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBJUFY2X0VOQUJMRUQKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgY29uc3RhbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitNT0NLX0FOWSA9IG1vY2suQU5ZCitQWTM0ID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNCkKKworCitjbGFzcyBCYXNlRXZlbnRMb29wVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3AoKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5zZWxlY3QucmV0dXJuX3ZhbHVlID0gKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIG0gPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQsIG0sIG0sIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl93cml0ZV90b19zZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBnZW4gPSBzZWxmLmxvb3AuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQobSwgbSwgbSwgbSwgbSwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbmV4dCwgaXRlcihnZW4pKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLmlzX2Nsb3NlZCgpKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmlzX2Nsb3NlZCgpKQorCisgICAgICAgICMgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNhbGwgY2xvc2UoKSBtb3JlIHRoYW4gb25jZQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9uIGJsb2NrZWQgd2hlbiB0aGUgbG9vcCBpcyBjbG9zZWQKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5ydW5fZm9yZXZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorCisgICAgZGVmIHRlc3RfX2FkZF9jYWxsYmFja19oYW5kbGUoc2VsZik6CisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShsYW1iZGE6IEZhbHNlLCAoKSwgc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X19hZGRfY2FsbGJhY2tfdGltZXIoc2VsZik6CisgICAgICAgIGggPSBhc3luY2lvLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkrMTAsIGxhbWJkYTogRmFsc2UsICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2soaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihoLCBzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKworICAgIGRlZiB0ZXN0X19hZGRfY2FsbGJhY2tfY2FuY2VsbGVkX2hhbmRsZShzZWxmKToKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGxhbWJkYTogRmFsc2UsICgpLCBzZWxmLmxvb3ApCisgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdF9leGVjdXRvcihzZWxmKToKKyAgICAgICAgZXhlY3V0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhlY3V0b3IsIHNlbGYubG9vcC5fZGVmYXVsdF9leGVjdXRvcikKKworICAgIGRlZiB0ZXN0X2dldG5hbWVpbmZvKHNlbGYpOgorICAgICAgICBzb2NrYWRkciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuZ2V0bmFtZWluZm8oc29ja2FkZHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoTm9uZSwgc29ja2V0LmdldG5hbWVpbmZvLCBzb2NrYWRkciwgMCksCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaCA9IHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5fY2FsbGJhY2ssIGNiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaCwgYXN5bmNpby5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXIoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9sYXRlcigxMC4wLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGFzeW5jaW8uVGltZXJIYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXJfbmVnYXRpdmVfZGVsYXlzKHNlbGYpOgorICAgICAgICBjYWxscyA9IFtdCisKKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigtMSwgY2IsICdhJykKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoLTIsIGNiLCAnYicpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbJ2InLCAnYSddKQorCisgICAgZGVmIHRlc3RfdGltZV9hbmRfY2FsbF9hdChzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisgICAgICAgIGRlbGF5ID0gMC4xCisKKyAgICAgICAgd2hlbiA9IHNlbGYubG9vcC50aW1lKCkgKyBkZWxheQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9hdCh3aGVuLCBjYikKKyAgICAgICAgdDAgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIGR0ID0gc2VsZi5sb29wLnRpbWUoKSAtIHQwCisKKyAgICAgICAgIyA1MCBtczogbWF4aW11bSBncmFudWxhcml0eSBvZiB0aGUgZXZlbnQgbG9vcAorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkdCwgZGVsYXkgLSAwLjA1MCwgZHQpCisgICAgICAgICMgdG9sZXJhdGUgYSBkaWZmZXJlbmNlIG9mICs4MDAgbXMgYmVjYXVzZSBzb21lIFB5dGhvbiBidWlsZGJvdHMKKyAgICAgICAgIyBhcmUgcmVhbGx5IHNsb3cKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZHQsIDAuOSwgZHQpCisKKyAgICBkZWYgdGVzdF9hc3NlcnRfaXNfY3VycmVudF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBvdGhlcl9sb29wID0gYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCgpCisgICAgICAgIG90aGVyX2xvb3AuX3NlbGVjdG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChvdGhlcl9sb29wKQorCisgICAgICAgICMgcmFpc2UgUnVudGltZUVycm9yIGlmIHRoZSBldmVudCBsb29wIGlzIGRpZmZlcmVudCBpbiBkZWJ1ZyBtb2RlCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoNjAsIGNiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9hdChzZWxmLmxvb3AudGltZSgpICsgNjAsIGNiKQorCisgICAgICAgICMgY2hlY2sgZGlzYWJsZWQgaWYgZGVidWcgbW9kZSBpcyBkaXNhYmxlZAorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKEZhbHNlKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcig2MCwgY2IpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2F0KHNlbGYubG9vcC50aW1lKCkgKyA2MCwgY2IpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IsCisgICAgICAgICAgICBOb25lLCBhc3luY2lvLkhhbmRsZShjYiwgKCksIHNlbGYubG9vcCksICgnJywpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yLAorICAgICAgICAgICAgTm9uZSwgYXN5bmNpby5UaW1lckhhbmRsZSgxMCwgY2IsICgpLCBzZWxmLmxvb3ApKQorCisgICAgZGVmIHRlc3RfcnVuX29uY2VfaW5fZXhlY3V0b3JfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGNiLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBoLmNhbmNlbCgpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9wbGFpbihzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYiwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBleGVjdXRvciA9IG1vY2suTW9jaygpCisgICAgICAgIGV4ZWN1dG9yLnN1Ym1pdC5yZXR1cm5fdmFsdWUgPSBmCisKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yKGV4ZWN1dG9yKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCByZXMpCisKKyAgICAgICAgZXhlY3V0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBleGVjdXRvci5zdWJtaXQucmV0dXJuX3ZhbHVlID0gZgorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKGV4ZWN1dG9yLCBoKQorICAgICAgICBzZWxmLmFzc2VydElzKGYsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4ZWN1dG9yLnN1Ym1pdC5jYWxsZWQpCisKKyAgICAgICAgZi5jYW5jZWwoKSAgIyBEb24ndCBjb21wbGFpbiBhYm91dCBhYmFuZG9uZWQgRnV0dXJlLgorCisgICAgZGVmIHRlc3RfX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICBoMSA9IGFzeW5jaW8uVGltZXJIYW5kbGUodGltZS5tb25vdG9uaWMoKSArIDUuMCwgbGFtYmRhOiBUcnVlLCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcCkKKyAgICAgICAgaDIgPSBhc3luY2lvLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkgKyAxMC4wLCBsYW1iZGE6IFRydWUsICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wKQorCisgICAgICAgIGgxLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoMSkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgyKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICB0ID0gc2VsZi5sb29wLl9zZWxlY3Rvci5zZWxlY3QuY2FsbF9hcmdzWzBdWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSg5LjUgPCB0IDwgMTAuNSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaDJdLCBzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlYnVnKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuZ2V0X2RlYnVnKCkpCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLmdldF9kZWJ1ZygpKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9fcnVuX29uY2VfbG9nZ2luZyhzZWxmLCBtX2xvZ2dlcik6CisgICAgICAgIGRlZiBzbG93X3NlbGVjdCh0aW1lb3V0KToKKyAgICAgICAgICAgICMgU2xlZXAgYSBiaXQgbG9uZ2VyIHRoYW4gYSBzZWNvbmQgdG8gYXZvaWQgdGltZXIgcmVzb2x1dGlvbiBpc3N1ZXMuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEuMSkKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgICMgbG9nZ2luZyBuZWVkcyBkZWJ1ZyBmbGFnCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKworICAgICAgICAjIExvZyB0byBJTkZPIGxldmVsIGlmIHRpbWVvdXQgPiAxLjAgc2VjLgorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLnNlbGVjdCA9IHNsb3dfc2VsZWN0CisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLklORk8sIG1fbG9nZ2VyLmxvZy5jYWxsX2FyZ3NbMF1bMF0pCisKKyAgICAgICAgZGVmIGZhc3Rfc2VsZWN0KHRpbWVvdXQpOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwMSkKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0ID0gZmFzdF9zZWxlY3QKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5ERUJVRywgbV9sb2dnZXIubG9nLmNhbGxfYXJnc1swXVswXSkKKworICAgIGRlZiB0ZXN0X19ydW5fb25jZV9zY2hlZHVsZV9oYW5kbGUoc2VsZik6CisgICAgICAgIGhhbmRsZSA9IE5vbmUKKyAgICAgICAgcHJvY2Vzc2VkID0gRmFsc2UKKworICAgICAgICBkZWYgY2IobG9vcCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9jZXNzZWQsIGhhbmRsZQorICAgICAgICAgICAgcHJvY2Vzc2VkID0gVHJ1ZQorICAgICAgICAgICAgaGFuZGxlID0gbG9vcC5jYWxsX3Nvb24obGFtYmRhOiBUcnVlKQorCisgICAgICAgIGggPSBhc3luY2lvLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkgLSAxLCBjYiwgKHNlbGYubG9vcCwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvY2Vzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtoYW5kbGVdLCBsaXN0KHNlbGYubG9vcC5fcmVhZHkpKQorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlX3R5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsICdibGFoJykKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9sb29wKHNlbGYpOgorICAgICAgICB0YXNrID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG90aGVyX2xvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgb3RoZXJfbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4ZWNfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncGFzcyddCisKKyAgICAgICAgIyBtaXNzaW5nIHByb2dyYW0gcGFyYW1ldGVyIChlbXB0eSBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgIyBleGVwZWN0ZWQgbXVsdGlwbGUgYXJndW1lbnRzLCBub3QgYSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgYXJncykKKworICAgICAgICAjIHByb2dyYW0gYXJndW1lbnRzIG11c3QgYmUgc3RyaW5ncywgbm90IGludAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsIHN5cy5leGVjdXRhYmxlLCAxMjMpCisKKyAgICAgICAgIyB1bml2ZXJzYWxfbmV3bGluZXMsIHNoZWxsLCBidWZzaXplIG11c3Qgbm90IGJlIHNldAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgKmFyZ3MsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICphcmdzLCBzaGVsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICphcmdzLCBidWZzaXplPTQwOTYpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3NoZWxsX2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgIyBleHBlY3RlZCBhIHN0cmluZywgbm90IGFuIGludCBvciBhIGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCwKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCBbc3lzLmV4ZWN1dGFibGUsICctYycsICdwYXNzJ10pCisKKyAgICAgICAgIyB1bml2ZXJzYWxfbmV3bGluZXMsIHNoZWxsLCBidWZzaXplIG11c3Qgbm90IGJlIHNldAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCwKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAnZXhpdCAwJywgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICdleGl0IDAnLCBzaGVsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCwKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAnZXhpdCAwJywgYnVmc2l6ZT00MDk2KQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9leGNfaGFuZGxlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZGVmIHplcm9fZXJyb3IoZnV0KToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAxLzAKKworICAgICAgICAjIFRlc3QgY2FsbF9zb29uIChldmVudHMuSGFuZGxlKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykgYXMgbG9nOgorICAgICAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHplcm9fZXJyb3IsIGZ1dCkKKyAgICAgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhsYW1iZGEgZnV0OiBzZWxmLmxvb3Auc3RvcCgpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybignRXhjZXB0aW9uIGluIGNhbGxiYWNrLip6ZXJvJyksCisgICAgICAgICAgICAgICAgZXhjX2luZm89KFplcm9EaXZpc2lvbkVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisgICAgICAgICMgVGVzdCBjYWxsX2xhdGVyIChldmVudHMuVGltZXJIYW5kbGUpCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKSBhcyBsb2c6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDAuMDEsIHplcm9fZXJyb3IsIGZ1dCkKKyAgICAgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhsYW1iZGEgZnV0OiBzZWxmLmxvb3Auc3RvcCgpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybignRXhjZXB0aW9uIGluIGNhbGxiYWNrLip6ZXJvJyksCisgICAgICAgICAgICAgICAgZXhjX2luZm89KFplcm9EaXZpc2lvbkVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9leGNfaGFuZGxlcl9jb3JvKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHplcm9fZXJyb3JfY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgIyBUZXN0IEZ1dHVyZS5fX2RlbF9fCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKSBhcyBsb2c6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLmFzeW5jKHplcm9fZXJyb3JfY29ybygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhsYW1iZGEgKmFyZ3M6IHNlbGYubG9vcC5zdG9wKCkpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICAgICAgZnV0ID0gTm9uZSAjIFRyaWdnZXIgRnV0dXJlLl9fZGVsX18gb3IgZnV0dXJlcy5fVHJhY2ViYWNrTG9nZ2VyCisgICAgICAgICAgICBpZiBQWTM0OgorICAgICAgICAgICAgICAgICMgRnV0dXJlLl9fZGVsX18gaW4gUHl0aG9uIDMuNCBsb2dzIGVycm9yIHdpdGgKKyAgICAgICAgICAgICAgICAjIGFuIGFjdHVhbCBleGNlcHRpb24gY29udGV4dAorICAgICAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oJy4qZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWQnKSwKKyAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89KFplcm9EaXZpc2lvbkVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGZ1dHVyZXMuX1RyYWNlYmFja0xvZ2dlciBsb2dzIG9ubHkgdGV4dHVhbCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICAgICAgICAgJy4qZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWQuKlplcm9EaXYnKSwKKyAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89RmFsc2UpCisKKyAgICBkZWYgdGVzdF9zZXRfZXhjX2hhbmRsZXJfaW52YWxpZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ0EgY2FsbGFibGUgb2JqZWN0IG9yIE5vbmUnKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIoJ3NwYW0nKQorCisgICAgZGVmIHRlc3Rfc2V0X2V4Y19oYW5kbGVyX2N1c3RvbShzZWxmKToKKyAgICAgICAgZGVmIHplcm9fZXJyb3IoKToKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgIGRlZiBydW5fbG9vcCgpOgorICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5sb29wLmNhbGxfc29vbih6ZXJvX2Vycm9yKQorICAgICAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKworICAgICAgICBtb2NrX2hhbmRsZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKG1vY2tfaGFuZGxlcikKKyAgICAgICAgaGFuZGxlID0gcnVuX2xvb3AoKQorICAgICAgICBtb2NrX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYubG9vcCwgeworICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IE1PQ0tfQU5ZLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIGluIGNhbGxiYWNrLip6ZXJvX2Vycm9yJyksCisgICAgICAgICAgICAnaGFuZGxlJzogaGFuZGxlLAorICAgICAgICAgICAgJ3NvdXJjZV90cmFjZWJhY2snOiBoYW5kbGUuX3NvdXJjZV90cmFjZWJhY2ssCisgICAgICAgIH0pCisgICAgICAgIG1vY2tfaGFuZGxlci5yZXNldF9tb2NrKCkKKworICAgICAgICBzZWxmLmxvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKE5vbmUpCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKSBhcyBsb2c6CisgICAgICAgICAgICBydW5fbG9vcCgpCisgICAgICAgICAgICBsb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBpbiBjYWxsYmFjay4qemVybycpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89KFplcm9EaXZpc2lvbkVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisgICAgICAgIGFzc2VydCBub3QgbW9ja19oYW5kbGVyLmNhbGxlZAorCisgICAgZGVmIHRlc3Rfc2V0X2V4Y19oYW5kbGVyX2Jyb2tlbihzZWxmKToKKyAgICAgICAgZGVmIHJ1bl9sb29wKCk6CisgICAgICAgICAgICBkZWYgemVyb19lcnJvcigpOgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih6ZXJvX2Vycm9yKQorICAgICAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgZGVmIGhhbmRsZXIobG9vcCwgY29udGV4dCk6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignc3BhbScpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLnNldF9leGNlcHRpb25faGFuZGxlcihoYW5kbGVyKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKSBhcyBsb2c6CisgICAgICAgICAgICBydW5fbG9vcCgpCisgICAgICAgICAgICBsb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgICAgICdVbmhhbmRsZWQgZXJyb3IgaW4gZXhjZXB0aW9uIGhhbmRsZXInKSwKKyAgICAgICAgICAgICAgICBleGNfaW5mbz0oQXR0cmlidXRlRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2V4Y19oYW5kbGVyX2Jyb2tlbihzZWxmKToKKyAgICAgICAgX2NvbnRleHQgPSBOb25lCisKKyAgICAgICAgY2xhc3MgTG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKworICAgICAgICAgICAgX3NlbGVjdG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgICAgIF9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYsIGNvbnRleHQpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIF9jb250ZXh0CisgICAgICAgICAgICAgICAgX2NvbnRleHQgPSBjb250ZXh0CisgICAgICAgICAgICAgICAgIyBTaW11bGF0ZXMgY3VzdG9tIGJ1Z2d5ICJkZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyIgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NwYW0nKQorCisgICAgICAgIGxvb3AgPSBMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICAgIGRlZiBydW5fbG9vcCgpOgorICAgICAgICAgICAgZGVmIHplcm9fZXJyb3IoKToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIGxvb3AuY2FsbF9zb29uKHplcm9fZXJyb3IpCisgICAgICAgICAgICBsb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpIGFzIGxvZzoKKyAgICAgICAgICAgIHJ1bl9sb29wKCkKKyAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBpbiBkZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyJywKKyAgICAgICAgICAgICAgICBleGNfaW5mbz1UcnVlKQorCisgICAgICAgIGRlZiBjdXN0b21faGFuZGxlcihsb29wLCBjb250ZXh0KToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2hhbScpCisKKyAgICAgICAgX2NvbnRleHQgPSBOb25lCisgICAgICAgIGxvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGN1c3RvbV9oYW5kbGVyKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykgYXMgbG9nOgorICAgICAgICAgICAgcnVuX2xvb3AoKQorICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKCdFeGNlcHRpb24gaW4gZGVmYXVsdCBleGNlcHRpb24uKicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGlsZSBoYW5kbGluZy4qaW4gY3VzdG9tJyksCisgICAgICAgICAgICAgICAgZXhjX2luZm89VHJ1ZSkKKworICAgICAgICAgICAgIyBDaGVjayB0aGF0IG9yaWdpbmFsIGNvbnRleHQgd2FzIHBhc3NlZCB0byBkZWZhdWx0CisgICAgICAgICAgICAjIGV4Y2VwdGlvbiBoYW5kbGVyLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignY29udGV4dCcsIF9jb250ZXh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKF9jb250ZXh0Wydjb250ZXh0J11bJ2V4Y2VwdGlvbiddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWmVyb0RpdmlzaW9uRXJyb3IpCisKKyAgICBkZWYgdGVzdF9lbnZfdmFyX2RlYnVnKHNlbGYpOgorICAgICAgICBjb2RlID0gJ1xuJy5qb2luKCgKKyAgICAgICAgICAgICdpbXBvcnQgYXN5bmNpbycsCisgICAgICAgICAgICAnbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKScsCisgICAgICAgICAgICAncHJpbnQobG9vcC5nZXRfZGVidWcoKSknKSkKKworICAgICAgICAjIFRlc3Qgd2l0aCAtRSB0byBub3QgZmFpbCBpZiB0aGUgdW5pdCB0ZXN0IHdhcyBydW4gd2l0aAorICAgICAgICAjIFBZVEhPTkFTWU5DSU9ERUJVRyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nCisgICAgICAgIHN0cywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctRScsICctYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJzdHJpcCgpLCBiJ0ZhbHNlJykKKworICAgICAgICBzdHMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05BU1lOQ0lPREVCVUc9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJzdHJpcCgpLCBiJ0ZhbHNlJykKKworICAgICAgICBzdHMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05BU1lOQ0lPREVCVUc9JzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgYidUcnVlJykKKworICAgICAgICBzdHMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUUnLCAnLWMnLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05BU1lOQ0lPREVCVUc9JzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgYidGYWxzZScpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdGFzayhzZWxmKToKKyAgICAgICAgY2xhc3MgTXlUYXNrKGFzeW5jaW8uVGFzayk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgRXZlbnRMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorICAgICAgICAgICAgZGVmIGNyZWF0ZV90YXNrKHNlbGYsIGNvcm8pOgorICAgICAgICAgICAgICAgIHJldHVybiBNeVRhc2soY29ybywgbG9vcD1sb29wKQorCisgICAgICAgIGxvb3AgPSBFdmVudExvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgY29ybyA9IHRlc3QoKQorICAgICAgICB0YXNrID0gYXN5bmNpby5hc3luYyhjb3JvLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0YXNrLCBNeVRhc2spCisKKyAgICAgICAgIyBtYWtlIHdhcm5pbmdzIHF1aWV0CisgICAgICAgIHRhc2suX2xvZ19kZXN0cm95X3BlbmRpbmcgPSBGYWxzZQorICAgICAgICBjb3JvLmNsb3NlKCkKKworCitjbGFzcyBNeVByb3RvKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlX2Z1dHVyZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGNyZWF0ZV9mdXR1cmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBhc3luY2lvLkZ1dHVyZSgpCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuSG9zdDogZXhhbXBsZS5jb21cclxuXHJcbicpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0VPRicKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgaW4gKCdDT05ORUNURUQnLCAnRU9GJyksIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlEYXRhZ3JhbVByb3RvKGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjcmVhdGVfZnV0dXJlPUZhbHNlKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgY3JlYXRlX2Z1dHVyZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTElaRUQnCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIEJhc2VFdmVudExvb3BXaXRoU2VsZWN0b3JUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9tdWx0aXBsZV9lcnJvcnMoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGNsYXNzIE15UHJvdG8oYXN5bmNpby5Qcm90b2NvbCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGVycm9ycyA9IFsnZXJyMScsICdlcnIyJ10KKworICAgICAgICBkZWYgX3NvY2tldCgqYXJncywgKiprdyk6CisgICAgICAgICAgICBub25sb2NhbCBpZHgsIGVycm9ycworICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3JzW2lkeF0pCisKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0ID0gX3NvY2tldAorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdNdWx0aXBsZSBleGNlcHRpb25zOiBlcnIxLCBlcnIyJykKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fdGltZW91dChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHNvY2tldCBpcyBjbG9zZWQgb24gdGltZW91dAorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IHNvY2sKKworICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBhZGRyID0gKHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sIDAsICcnLAorICAgICAgICAgICAgICAgICAgICAoJzEyNy4wLjAuMScsIDgwKSkKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFthZGRyXSkKKyAgICAgICAgICAgIHJldHVybiBmdXQKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm8KKworICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYubG9vcCwgJ3NvY2tfY29ubmVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZV9lZmZlY3Q9YXN5bmNpby5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnMTI3LjAuMC4xJywgODApCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uVGltZW91dEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwLCBzb2NrPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9faG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX25vX2dldGFkZHJpbmZvKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fY29ubmVjdF9lcnIoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGUoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMC4wLjAuMScsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcwLjAuMC4yJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX211bHRpcGxlX2Vycm9yc19sb2NhbF9hZGRyKHNlbGYsIG1fc29ja2V0KToKKworICAgICAgICBkZWYgYmluZChhZGRyKToKKyAgICAgICAgICAgIGlmIGFkZHJbMF0gPT0gJzAuMC4wLjEnOgorICAgICAgICAgICAgICAgIGVyciA9IE9TRXJyb3IoJ0VycicpCisgICAgICAgICAgICAgICAgZXJyLnN0cmVycm9yID0gJ0VycicKKyAgICAgICAgICAgICAgICByYWlzZSBlcnIKKworICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmJpbmQgPSBiaW5kCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcwLjAuMC4xJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzAuMC4wLjInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoJ0VycjInKQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCwgZmFtaWx5PXNvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oTm9uZSwgODA4MCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihjbS5leGNlcHRpb24pLnN0YXJ0c3dpdGgoJ011bHRpcGxlIGV4Y2VwdGlvbnM6ICcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19sb2NhbF9hZGRyKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKGhvc3QsICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIGlmIGhvc3QgPT0gJ2V4YW1wbGUuY29tJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KE5vbmUsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zc2xfc2VydmVyX2hvc3RuYW1lX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZGVmIG1vY2tfZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBmLnNldF9yZXN1bHQoWyhzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9UQ1AsICcnLCAoJzEuMi4zLjQnLCA4MCkpXSkKKyAgICAgICAgICAgIHJldHVybiBmCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvLnNpZGVfZWZmZWN0ID0gbW9ja19nZXRhZGRyaW5mbworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5yZXR1cm5fdmFsdWUgPSAoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydCA9IG1vY2suTW9jaygpCisKKyAgICAgICAgY2xhc3MgX1NlbGVjdG9yVHJhbnNwb3J0TW9jazoKKyAgICAgICAgICAgIF9zb2NrID0gTm9uZQorCisgICAgICAgICAgICBkZWYgZ2V0X2V4dHJhX2luZm8oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9jay5Nb2NrKCkKKworICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorCisgICAgICAgIGRlZiBtb2NrX21ha2Vfc3NsX3RyYW5zcG9ydChzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2RzKToKKyAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JUcmFuc3BvcnRNb2NrKCkKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fc29jayA9IHNvY2sKKyAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQKKworICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5zaWRlX2VmZmVjdCA9IG1vY2tfbWFrZV9zc2xfdHJhbnNwb3J0CisgICAgICAgIEFOWSA9IG1vY2suQU5ZCisgICAgICAgICMgRmlyc3QgdHJ5IHRoZSBkZWZhdWx0IHNlcnZlcl9ob3N0bmFtZS4KKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQucmVzZXRfbW9jaygpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwgc3NsPVRydWUpCisgICAgICAgIHRyYW5zcG9ydCwgXyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgQU5ZLCBBTlksIEFOWSwgQU5ZLAorICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3B5dGhvbi5vcmcnKQorICAgICAgICAjIE5leHQgdHJ5IGFuIGV4cGxpY2l0IHNlcnZlcl9ob3N0bmFtZS4KKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQucmVzZXRfbW9jaygpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwgc3NsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdwZXJsLmNvbScpCisgICAgICAgIHRyYW5zcG9ydCwgXyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgQU5ZLCBBTlksIEFOWSwgQU5ZLAorICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3BlcmwuY29tJykKKyAgICAgICAgIyBGaW5hbGx5IHRyeSBhbiBleHBsaWNpdCBlbXB0eSBzZXJ2ZXJfaG9zdG5hbWUuCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnJlc2V0X21vY2soKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsIHNzbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5hc3NlcnRfY2FsbGVkX3dpdGgoQU5ZLCBBTlksIEFOWSwgQU5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19zc2xfc2VydmVyX2hvc3RuYW1lX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBXaGVuIG5vdCB1c2luZyBzc2wsIHNlcnZlcl9ob3N0bmFtZSBtdXN0IGJlIE5vbmUuCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3B5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fc3NsX3NlcnZlcl9ob3N0bmFtZV9lcnJvcnMoc2VsZik6CisgICAgICAgICMgV2hlbiB1c2luZyBzc2wsIHNlcnZlcl9ob3N0bmFtZSBtYXkgYmUgTm9uZSBpZiBob3N0IGlzIG5vbi1lbXB0eS4KKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnJywgODAsIHNzbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sIE5vbmUsIDgwLCBzc2w9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sIE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPVRydWUsIHNvY2s9c29jaykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2VtcHR5X2hvc3Qoc2VsZik6CisgICAgICAgICMgaWYgaG9zdCBpcyBlbXB0eSBzdHJpbmcgdXNlIE5vbmUgaW5zdGVhZAorICAgICAgICBob3N0ID0gb2JqZWN0KCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGhvc3QKKyAgICAgICAgICAgIGhvc3QgPSBhcmdzWzBdCisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGhvc3QpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcigKKyAgICAgICAgICAgIE15UHJvdG8sICcwLjAuMC4wJywgMCwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ub19ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ub19nZXRhZGRyaW5mbyhzZWxmKToKKyAgICAgICAgZ2V0YWRkcmluZm8gPSBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBtb2NrLk1vY2soKQorICAgICAgICBnZXRhZGRyaW5mby5yZXR1cm5fdmFsdWUgPSBbXQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfY2FudF9iaW5kKHNlbGYsIG1fc29ja2V0KToKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBzdHJlcnJvciA9ICdlcnJvcicKKworICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mby5yZXR1cm5fdmFsdWUgPSBbCisgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTI3LjAuMC4xJywgMTAxMDApKV0KKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8uX2lzX2Nvcm91dGluZSA9IEZhbHNlCisgICAgICAgIG1fc29jayA9IG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSBtb2NrLk1vY2soKQorICAgICAgICBtX3NvY2suYmluZC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX2FkZHJpbmZvKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8uX2lzX2Nvcm91dGluZSA9IEZhbHNlCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCdsb2NhbGhvc3QnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2FkZHJfZXJyb3Ioc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSdsb2NhbGhvc3QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0oJ2xvY2FsaG9zdCcsIDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2Nvbm5lY3RfZXJyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwgcmVtb3RlX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc29ja2V0X2VycihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gc29ja2V0LmdldGFkZHJpbmZvCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wsIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSVBWNl9FTkFCTEVELCAnSVB2NiBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9ub19tYXRjaGluZ19mYW1pbHkoc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgYXN5bmNpby5EYXRhZ3JhbVByb3RvY29sLAorICAgICAgICAgICAgcmVtb3RlX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSwgbG9jYWxfYWRkcj0oJzo6MScsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9zZXRibGtfZXJyKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5zZXRibG9ja2luZy5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vYWRkcl9ub2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9jYW50X2JpbmQoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbV9zb2NrZXQuQUZfSU5FVDYgPSBzb2NrZXQuQUZfSU5FVDYKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8gPSBzb2NrZXQuZ2V0YWRkcmluZm8KKyAgICAgICAgbV9zb2NrID0gbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IG1vY2suTW9jaygpCisgICAgICAgIG1fc29jay5iaW5kLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFcnIsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9hY2NlcHRfY29ubmVjdGlvbl9yZXRyeShzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKworICAgICAgICBzZWxmLmxvb3AuX2FjY2VwdF9jb25uZWN0aW9uKE15UHJvdG8sIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoZXJybm8uRU1GSUxFLCAnVG9vIG1hbnkgb3BlbiBmaWxlcycpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoY29uc3RhbnRzLkFDQ0VQVF9SRVRSWV9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLkFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15UHJvdG8sIHNvY2ssIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWxsX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvdXRpbmVfZnVuY3Rpb24oKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNvcm91dGluZV9mdW5jdGlvbikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGNvcm91dGluZV9mdW5jdGlvbikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoNjAsIGNvcm91dGluZV9mdW5jdGlvbikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfYXQoc2VsZi5sb29wLnRpbWUoKSArIDYwLCBjb3JvdXRpbmVfZnVuY3Rpb24pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgY29yb3V0aW5lX2Z1bmN0aW9uKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9sb2dfc2xvd19jYWxsYmFja3Moc2VsZiwgbV9sb2dnZXIpOgorICAgICAgICBkZWYgc3RvcF9sb29wX2NiKGxvb3ApOgorICAgICAgICAgICAgbG9vcC5zdG9wKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHN0b3BfbG9vcF9jb3JvKGxvb3ApOgorICAgICAgICAgICAgeWllbGQgZnJvbSAoKQorICAgICAgICAgICAgbG9vcC5zdG9wKCkKKworICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICBzZWxmLmxvb3Auc2xvd19jYWxsYmFja19kdXJhdGlvbiA9IDAuMAorCisgICAgICAgICMgc2xvdyBjYWxsYmFjaworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHN0b3BfbG9vcF9jYiwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBmbXQsICphcmdzID0gbV9sb2dnZXIud2FybmluZy5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChmbXQgJSB0dXBsZShhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXkV4ZWN1dGluZyA8SGFuZGxlLipzdG9wX2xvb3BfY2IuKj4gdG9vayAuKiBzZWNvbmRzJCIpCisKKyAgICAgICAgIyBzbG93IHRhc2sKKyAgICAgICAgYXN5bmNpby5hc3luYyhzdG9wX2xvb3BfY29ybyhzZWxmLmxvb3ApLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZm10LCAqYXJncyA9IG1fbG9nZ2VyLndhcm5pbmcuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZm10ICUgdHVwbGUoYXJncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIl5FeGVjdXRpbmcgPFRhc2suKnN0b3BfbG9vcF9jb3JvLio+IHRvb2sgLiogc2Vjb25kcyQiKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmYzAyOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQpAQCAtMCwwICsxLDIyMzkgQEAKKyIiIlRlc3RzIGZvciBldmVudHMucHkuIiIiCisKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBnYworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0Cit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKyAgICBIQVNfU05JID0gRmFsc2UKK2Vsc2U6CisgICAgZnJvbSBzc2wgaW1wb3J0IEhBU19TTkkKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IGVycm5vCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2ltcG9ydCB3ZWFrcmVmCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQgICMgZmluZF91bnVzZWRfcG9ydCwgSVBWNl9FTkFCTEVELCBURVNUX0hPTUVfRElSCisKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvYWN0b3JfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworZGVmIGRhdGFfZmlsZShmaWxlbmFtZSk6CisgICAgaWYgaGFzYXR0cihzdXBwb3J0LCAnVEVTVF9IT01FX0RJUicpOgorICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RfSE9NRV9ESVIsIGZpbGVuYW1lKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gZnVsbG5hbWUKKyAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBmdWxsbmFtZQorICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZpbGVuYW1lKQorCisKK2RlZiBvc3hfdGlnZXIoKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgTWFjIE9TIDEwLjQgb3Igb2xkZXIuIiIiCisgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICB2ZXJzaW9uID0gcGxhdGZvcm0ubWFjX3ZlcigpWzBdCisgICAgdmVyc2lvbiA9IHR1cGxlKG1hcChpbnQsIHZlcnNpb24uc3BsaXQoJy4nKSkpCisgICAgcmV0dXJuIHZlcnNpb24gPCAoMTAsIDUpCisKKworT05MWUNFUlQgPSBkYXRhX2ZpbGUoJ3NzbF9jZXJ0LnBlbScpCitPTkxZS0VZID0gZGF0YV9maWxlKCdzc2xfa2V5LnBlbScpCitTSUdORURfQ0VSVEZJTEUgPSBkYXRhX2ZpbGUoJ2tleWNlcnQzLnBlbScpCitTSUdOSU5HX0NBID0gZGF0YV9maWxlKCdweWNhY2VydC5wZW0nKQorCisKK2NsYXNzIE15QmFzZVByb3RvKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgIGNvbm5lY3RlZCA9IE5vbmUKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmRvbmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgaWYgc2VsZi5jb25uZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3RlZC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0VPRicKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgaW4gKCdDT05ORUNURUQnLCAnRU9GJyksIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlQcm90byhNeUJhc2VQcm90byk6CisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcbkhvc3Q6IGV4YW1wbGUuY29tXHJcblxyXG4nKQorCisKK2NsYXNzIE15RGF0YWdyYW1Qcm90byhhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTElaRUQnCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15UmVhZFBpcGVQcm90byhhc3luY2lvLlByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSBbJ0lOSVRJQUwnXQorICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdDT05ORUNURUQnKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnRU9GJykKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgJ0VPRicgbm90IGluIHNlbGYuc3RhdGU6CisgICAgICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnRU9GJykgICMgSXQgaXMgb2theSBpZiBFT0YgaXMgbWlzc2VkLgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJywgJ0VPRiddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdDTE9TRUQnKQorICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15V3JpdGVQaXBlUHJvdG8oYXN5bmNpby5CYXNlUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVN1YnByb2Nlc3NQcm90b2NvbChhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuY29ubmVjdGVkID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmNvbXBsZXRlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0cyA9IHtmZDogYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKSBmb3IgZmQgaW4gcmFuZ2UoMyl9CisgICAgICAgIHNlbGYuZGF0YSA9IHsxOiBiJycsIDI6IGInJ30KKyAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICBzZWxmLmdvdF9kYXRhID0gezE6IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAyOiBhc3luY2lvLkV2ZW50KGxvb3A9bG9vcCl9CisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgc2VsZi5jb21wbGV0ZWQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHBpcGVfZGF0YV9yZWNlaXZlZChzZWxmLCBmZCwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuZGF0YVtmZF0gKz0gZGF0YQorICAgICAgICBzZWxmLmdvdF9kYXRhW2ZkXS5zZXQoKQorCisgICAgZGVmIHBpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBpZiBleGM6CisgICAgICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzW2ZkXS5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdHNbZmRdLnNldF9yZXN1bHQoZXhjKQorCisgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBzZWxmLnRyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpCisKKworY2xhc3MgRXZlbnRMb29wVGVzdHNNaXhpbjoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYuY3JlYXRlX2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBqdXN0IGluIGNhc2UgaWYgd2UgaGF2ZSB0cmFuc3BvcnQgY2xvc2UgY2FsbGJhY2tzCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9uZXN0aW5nKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuaXNfcnVubmluZygpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvMSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvMigpKQorCisgICAgIyBOb3RlOiBiZWNhdXNlIG9mIHRoZSBkZWZhdWx0IFdpbmRvd3MgdGltaW5nIGdyYW51bGFyaXR5IG9mCisgICAgIyAxNS42IG1zZWMsIHdlIHVzZSBmYWlybHkgbG9uZyBzbGVlcCB0aW1lcyBoZXJlICh+MTAwIG1zZWMpLgorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYpOgorICAgICAgICB0MCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICB0MSA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9zdG9wcGVkKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGNiKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY2FsbF9sYXRlcihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC4xLCBjYWxsYmFjaywgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgdDAgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHQxID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8gd29ybGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZzEsIGFyZzIpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGFyZzEsIGFyZzIpKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICdoZWxsbycsICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWygnaGVsbG8nLCAnd29ybGQnKV0pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0cykgPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgZGVmIHJ1bl9pbl90aHJlYWQoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgJ2hlbGxvJykKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bl9pbl90aHJlYWQpCisgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8nLCAnd29ybGQnXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbl90aHJlYWRzYWZlX3NhbWVfdGhyZWFkKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBkZWYgY2FsbGJhY2soYXJnKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGFyZykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssICdoZWxsbycpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWydoZWxsbycsICd3b3JsZCddKQorCisgICAgZGVmIHRlc3RfcnVuX2luX2V4ZWN1dG9yKHNlbGYpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBmMiA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgcnVuLCAneW8nKQorICAgICAgICByZXMsIHRocmVhZF9pZCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAneW8nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRocmVhZF9pZCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgYnl0ZXNfcmVhZCA9IGJ5dGVhcnJheSgpCisKKyAgICAgICAgZGVmIHJlYWRlcigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSByLnJlY3YoMTAyNCkKKyAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTcHVyaW91cyByZWFkaW5lc3Mgbm90aWZpY2F0aW9ucyBhcmUgcG9zc2libGUKKyAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IG9uIExpbnV4IC0tIHNlZSBtYW4gc2VsZWN0LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBieXRlc19yZWFkLmV4dGVuZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoci5maWxlbm8oKSkpCisgICAgICAgICAgICAgICAgci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoci5maWxlbm8oKSwgcmVhZGVyKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHcuc2VuZCwgYidhYmMnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogbGVuKGJ5dGVzX3JlYWQpID49IDMpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ody5zZW5kLCBiJ2RlZicpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBsZW4oYnl0ZXNfcmVhZCkgPj0gNikKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3LmNsb3NlKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzX3JlYWQsIGInYWJjZGVmJykKKworICAgIGRlZiB0ZXN0X3dyaXRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHcuc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgZGVmIHdyaXRlcihkYXRhKToKKyAgICAgICAgICAgIHcuc2VuZChkYXRhKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIGRhdGEgPSBiJ3gnICogMTAyNAorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcih3LmZpbGVubygpLCB3cml0ZXIsIGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKHcuZmlsZW5vKCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKHcuZmlsZW5vKCkpKQorCisgICAgICAgIHcuY2xvc2UoKQorICAgICAgICByZWFkID0gci5yZWN2KGxlbihkYXRhKSAqIDIpCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWQsIGRhdGEpCisKKyAgICBkZWYgX2Jhc2V0ZXN0X3NvY2tfY2xpZW50X29wcyhzZWxmLCBodHRwZCwgc29jayk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYubG9vcCwgcHJvYWN0b3JfZXZlbnRzLkJhc2VQcm9hY3RvckV2ZW50TG9vcCk6CisgICAgICAgICAgICAjIGluIGRlYnVnIG1vZGUsIHNvY2tldCBvcGVyYXRpb25zIG11c3QgZmFpbAorICAgICAgICAgICAgIyBpZiB0aGUgc29ja2V0IGlzIG5vdCBpbiBibG9ja2luZyBtb2RlCisgICAgICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKFRydWUpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgaHR0cGQuYWRkcmVzcykpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3NlbmRhbGwoc29jaywgYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2FjY2VwdChzb2NrKSkKKworICAgICAgICAjIHRlc3QgaW4gbm9uLWJsb2NraW5nIG1vZGUKKyAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgaHR0cGQuYWRkcmVzcykpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkpCisgICAgICAgICMgY29uc3VtZSBkYXRhCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpKQorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuc3RhcnRzd2l0aChiJ0hUVFAvMS4wIDIwMCBPSycpKQorCisgICAgZGVmIHRlc3Rfc29ja19jbGllbnRfb3BzKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9zb2NrX2NsaWVudF9vcHMoaHR0cGQsIHNvY2spCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfdW5peF9zb2NrX2NsaWVudF9vcHMoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpCisgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9zb2NrX2NsaWVudF9vcHMoaHR0cGQsIHNvY2spCisKKyAgICBkZWYgdGVzdF9zb2NrX2NsaWVudF9mYWlsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHdpbGwgZ2V0IGFuIHVudXNlZCBwb3J0CisgICAgICAgIGFkZHJlc3MgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHMuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICAgICAgYWRkcmVzcyA9IHMuZ2V0c29ja25hbWUoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpKQorICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBsaXN0ZW5lciA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBsaXN0ZW5lci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgbGlzdGVuZXIuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBsaXN0ZW5lci5saXN0ZW4oMSkKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KGxpc3RlbmVyLmdldHNvY2tuYW1lKCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChsaXN0ZW5lcikKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLmdldHRpbWVvdXQoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyLCBjbGllbnQuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQuZ2V0cGVlcm5hbWUoKSwgbGlzdGVuZXIuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIGxpc3RlbmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHS0lMTCcpLCAnTm8gU0lHS0lMTCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKworICAgICAgICAjIENoZWNrIGVycm9yIGJlaGF2aW9yIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgJ2Jvb20nLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgJ2Jvb20nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMCwgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIC0xLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0tJTEwsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICAjIFJlbW92aW5nIFNJR0tJTEwgZG9lc24ndCByYWlzZSwgc2luY2Ugd2UgZG9uJ3QgY2FsbCBzaWduYWwoKS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdLSUxMKSkKKyAgICAgICAgIyBOb3cgc2V0IGEgaGFuZGxlciBhbmQgaGFuZGxlIGl0LgorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQsIG15X2hhbmRsZXIpCisKKyAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IGNhdWdodCkKKworICAgICAgICAjIFJlbW92aW5nIGl0IHNob3VsZCByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLmRlZmF1bHRfaW50X2hhbmRsZXIpCisgICAgICAgICMgUmVtb3ZpbmcgYWdhaW4gcmV0dXJucyBGYWxzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdBTFJNJyksICdObyBTSUdBTFJNJykKKyAgICBkZWYgdGVzdF9zaWduYWxfaGFuZGxpbmdfd2hpbGVfc2VsZWN0aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBhIHNpZ25hbCBhY3R1YWxseSBhcnJpdmluZyBkdXJpbmcgYSBzZWxlY3QoKSBjYWxsLgorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdBTFJNLCBteV9oYW5kbGVyKQorCisgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2lnbmFsLklUSU1FUl9SRUFMLCAwLjAxLCAwKSAgIyBTZW5kIFNJR0FMUk0gb25jZS4KKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0FMUk0nKSwgJ05vIFNJR0FMUk0nKQorICAgIGRlZiB0ZXN0X3NpZ25hbF9oYW5kbGluZ19hcmdzKHNlbGYpOgorICAgICAgICBzb21lX2FyZ3MgPSAoNDIsKQorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKmFyZ3MpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2F1Z2h0CisgICAgICAgICAgICBjYXVnaHQgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBzb21lX2FyZ3MpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQUxSTSwgbXlfaGFuZGxlciwgKnNvbWVfYXJncykKKworICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNpZ25hbC5JVElNRVJfUkVBTCwgMC4xLCAwKSAgIyBTZW5kIFNJR0FMUk0gb25jZS4KKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC41LCBzZWxmLmxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisKKyAgICBkZWYgX2Jhc2V0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uKHNlbGYsIGNvbm5lY3Rpb25fZnV0LCBjaGVja19zb2NrbmFtZT1UcnVlKToKKyAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0aW9uX2Z1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyLCBhc3luY2lvLlRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByLCBhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzKHByLnRyYW5zcG9ydCwgdHIpCisgICAgICAgIGlmIGNoZWNrX3NvY2tuYW1lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHIuZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHByLm5ieXRlcywgMCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksICpodHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oY29ubl9mdXQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjA2ODI6IE9uIE1hYyBPUyBYIFRpZ2VyLCBnZXRzb2NrbmFtZSgpIHJldHVybnMgYQorICAgICAgICAjIHplcm8tbGVuZ3RoIGFkZHJlc3MgZm9yIFVOSVggc29ja2V0LgorICAgICAgICBjaGVja19zb2NrbmFtZSA9IG5vdCBvc3hfdGlnZXIoKQorCisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgY29ubl9mdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCBodHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oY29ubl9mdXQsIGNoZWNrX3NvY2tuYW1lKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fc29jayhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgIGluZm9zID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLCB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkpCisgICAgICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBwcm90bywgY25hbWUsIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICdDYW4gbm90IGNyZWF0ZSBzb2NrZXQuJworCisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksIHNvY2s9c29jaykKKyAgICAgICAgICAgIHRyLCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgYXN5bmNpby5UcmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHIsIGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIF9iYXNldGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZiwgY29ubmVjdGlvbl9mdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfc29ja25hbWU9VHJ1ZSk6CisgICAgICAgIHRyLCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdGlvbl9mdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgYXN5bmNpby5UcmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwciwgYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdzc2wnIGluIHRyLl9fY2xhc3NfXy5fX25hbWVfXy5sb3dlcigpKQorICAgICAgICBpZiBjaGVja19zb2NrbmFtZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwci5uYnl0ZXMsIDApCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIodXNlX3NzbD1UcnVlKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSkKKworICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKGNvbm5fZnV0KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc3NsX3VuaXhfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjA2ODI6IE9uIE1hYyBPUyBYIFRpZ2VyLCBnZXRzb2NrbmFtZSgpIHJldHVybnMgYQorICAgICAgICAjIHplcm8tbGVuZ3RoIGFkZHJlc3MgZm9yIFVOSVggc29ja2V0LgorICAgICAgICBjaGVja19zb2NrbmFtZSA9IG5vdCBvc3hfdGlnZXIoKQorCisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgY29ubl9mdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIGh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSwKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JzEyNy4wLjAuMScpCisKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihjb25uX2Z1dCwgY2hlY2tfc29ja25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9sb2NhbF9hZGRyKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAqaHR0cGQuYWRkcmVzcywgbG9jYWxfYWRkcj0oaHR0cGQuYWRkcmVzc1swXSwgcG9ydCkpCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBleHBlY3RlZCA9IHByLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKVsxXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2xvY2FsX2FkZHJfaW5fdXNlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIGxvY2FsX2FkZHI9aHR0cGQuYWRkcmVzcykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVBRERSSU5VU0UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN0cihodHRwZC5hZGRyZXNzKSwgY20uZXhjZXB0aW9uLnN0cmVycm9yKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcihzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKHNlbGYubG9vcCkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKGxhbWJkYTogcHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXJ2ZXIuc29ja2V0cyksIDEpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdCwgJzAuMC4wLjAnKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmRhbGwoYid4eHgnKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyNy4wLjAuMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwZWVybmFtZScpWzBdKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgY2xvc2Ugc2VydmVyCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgX21ha2VfdW5peF9zZXJ2ZXIoc2VsZiwgZmFjdG9yeSwgKiprd2FyZ3MpOgorICAgICAgICBwYXRoID0gdGVzdF91dGlscy5nZW5fdW5peF9zb2NrZXRfcGF0aCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IG9zLnBhdGguZXhpc3RzKHBhdGgpIGFuZCBvcy51bmxpbmsocGF0aCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIoZmFjdG9yeSwgcGF0aCwgKiprd2FyZ3MpCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKworICAgICAgICByZXR1cm4gc2VydmVyLCBwYXRoCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlcnZlciwgcGF0aCA9IHNlbGYuX21ha2VfdW5peF9zZXJ2ZXIobGFtYmRhOiBwcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VydmVyLnNvY2tldHMpLCAxKQorCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KHBhdGgpCisgICAgICAgIGNsaWVudC5zZW5kYWxsKGIneHh4JykKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgICMgdGhlIGNsaWVudCBzb2NrZXQgbXVzdCBiZSBjbG9zZWQgYWZ0ZXIgdG8gYXZvaWQgRUNPTk5SRVNFVCB1cG9uCisgICAgICAgICMgcmVjdigpL3NlbmQoKSBvbiB0aGUgc2VydmluZyBzb2NrZXQKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICAjIGNsb3NlIHNlcnZlcgorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9wYXRoX3NvY2tldF9lcnJvcihzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogcHJvdG8sICcvdGVzdCcsIHNvY2s9c29jaykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoIGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXQgdGhlIHNhbWUgdGltZScpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKworICAgIGRlZiBfY3JlYXRlX3NzbF9jb250ZXh0KHNlbGYsIGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKyAgICAgICAgcmV0dXJuIHNzbGNvbnRleHQKKworICAgIGRlZiBfbWFrZV9zc2xfc2VydmVyKHNlbGYsIGZhY3RvcnksIGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gc2VsZi5fY3JlYXRlX3NzbF9jb250ZXh0KGNlcnRmaWxlLCBrZXlmaWxlKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCAnMTI3LjAuMC4xJywgMCwgc3NsPXNzbGNvbnRleHQpCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKworICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcxMjcuMC4wLjEnKQorICAgICAgICByZXR1cm4gc2VydmVyLCBob3N0LCBwb3J0CisKKyAgICBkZWYgX21ha2Vfc3NsX3VuaXhfc2VydmVyKHNlbGYsIGZhY3RvcnksIGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gc2VsZi5fY3JlYXRlX3NzbF9jb250ZXh0KGNlcnRmaWxlLCBrZXlmaWxlKQorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV91bml4X3NlcnZlcihmYWN0b3J5LCBzc2w9c3NsY29udGV4dCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBPTkxZQ0VSVCwgT05MWUtFWSkKKworICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlCYXNlUHJvdG8sIGhvc3QsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpKQorICAgICAgICBjbGllbnQsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgY2xpZW50LndyaXRlKGIneHh4JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTI3LjAuMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJylbMF0pCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgc3RvcCBzZXJ2aW5nCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLCBwYXRoID0gc2VsZi5fbWFrZV9zc2xfdW5peF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBPTkxZQ0VSVCwgT05MWUtFWSkKKworICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15QmFzZVByb3RvLCBwYXRoLCBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICBjbGllbnQud3JpdGUoYid4eHgnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICAjIHRoZSBjbGllbnQgc29ja2V0IG11c3QgYmUgY2xvc2VkIGFmdGVyIHRvIGF2b2lkIEVDT05OUkVTRVQgdXBvbgorICAgICAgICAjIHJlY3YoKS9zZW5kKCkgb24gdGhlIHNlcnZpbmcgc29ja2V0CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgIyBzdG9wIHNlcnZpbmcKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfU05JLCAnTm8gU05JIHN1cHBvcnQgaW4gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIGlmIGhhc2F0dHIoc3NsY29udGV4dF9jbGllbnQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgc3NsY29udGV4dF9jbGllbnQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisKKyAgICAgICAgIyBubyBDQSBsb2FkZWQKKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sIGhvc3QsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9c3NsY29udGV4dF9jbGllbnQpCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VydGlmaWNhdGUgdmVyaWZ5IGZhaWxlZCAnKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvdG8udHJhbnNwb3J0KQorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19TTkksICdObyBTTkkgc3VwcG9ydCBpbiBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX3NzbF92ZXJpZnlfZmFpbGVkKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlcnZlciwgcGF0aCA9IHNlbGYuX21ha2Vfc3NsX3VuaXhfc2VydmVyKAorICAgICAgICAgICAgbGFtYmRhOiBwcm90bywgU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgbm8gQ0EgbG9hZGVkCisgICAgICAgIGZfYyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uKE15UHJvdG8sIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1zc2xjb250ZXh0X2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdpbnZhbGlkJykKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkICcpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9jKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwcm90by50cmFuc3BvcnQpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1NOSSwgJ05vIFNOSSBzdXBwb3J0IGluIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX21hdGNoX2ZhaWxlZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucygKKyAgICAgICAgICAgIGNhZmlsZT1TSUdOSU5HX0NBKQorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgaW5jb3JyZWN0IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1zc2xjb250ZXh0X2NsaWVudCkKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgICAgIHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgJzEyNy4wLjAuMScgZG9lc24ndCBtYXRjaCAnbG9jYWxob3N0JyIpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9jKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19TTkksICdObyBTTkkgc3VwcG9ydCBpbiBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIHBhdGggPSBzZWxmLl9tYWtlX3NzbF91bml4X3NlcnZlcigKKyAgICAgICAgICAgIGxhbWJkYTogcHJvdG8sIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1TSUdOSU5HX0NBKQorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgQ29ubmVjdGlvbiBzdWNjZWVkcyB3aXRoIGNvcnJlY3QgQ0EgYW5kIHNlcnZlciBob3N0bmFtZS4KKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oTXlQcm90bywgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfU05JLCAnTm8gU05JIHN1cHBvcnQgaW4gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLCBob3N0LCBwb3J0ID0gc2VsZi5fbWFrZV9zc2xfc2VydmVyKAorICAgICAgICAgICAgbGFtYmRhOiBwcm90bywgU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPVNJR05JTkdfQ0EpCisgICAgICAgIGlmIGhhc2F0dHIoc3NsY29udGV4dF9jbGllbnQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgc3NsY29udGV4dF9jbGllbnQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisKKyAgICAgICAgIyBDb25uZWN0aW9uIHN1Y2NlZWRzIHdpdGggY29ycmVjdCBDQSBhbmQgc2VydmVyIGhvc3RuYW1lLgorICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1zc2xjb250ZXh0X2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nbG9jYWxob3N0JykKKyAgICAgICAgY2xpZW50LCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9jKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zb2NrKHNlbGYpOgorICAgICAgICBwcm90byA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNsYXNzIFRlc3RNeVByb3RvKE15UHJvdG8pOgorICAgICAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKyAgICAgICAgICAgICAgICBwcm90by5zZXRfcmVzdWx0KHNlbGYpCisKKyAgICAgICAgc29ja19vYiA9IHNvY2tldC5zb2NrZXQodHlwZT1zb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNvY2tfb2Iuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgc29ja19vYi5iaW5kKCgnMC4wLjAuMCcsIDApKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihUZXN0TXlQcm90bywgc29jaz1zb2NrX29iKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBzZWxmLmFzc2VydElzKHNvY2ssIHNvY2tfb2IpCisKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcwLjAuMC4wJykKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfYWRkcl9pbl91c2Uoc2VsZik6CisgICAgICAgIHNvY2tfb2IgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrX29iLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNvY2tfb2IuYmluZCgoJzAuMC4wLjAnLCAwKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgc29jaz1zb2NrX29iKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sIGhvc3Q9aG9zdCwgcG9ydD1wb3J0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUFERFJJTlVTRSkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5JUFY2X0VOQUJMRUQsICdJUHY2IG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9kdWFsX3N0YWNrKHNlbGYpOgorICAgICAgICBmX3Byb3RvID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgY2xhc3MgVGVzdE15UHJvdG8oTXlQcm90byk6CisgICAgICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5jb25uZWN0aW9uX21hZGUodHJhbnNwb3J0KQorICAgICAgICAgICAgICAgIGZfcHJvdG8uc2V0X3Jlc3VsdChzZWxmKQorCisgICAgICAgIHRyeV9jb3VudCA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoVGVzdE15UHJvdG8sIGhvc3Q9Tm9uZSwgcG9ydD1wb3J0KQorICAgICAgICAgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4OgorICAgICAgICAgICAgICAgIGlmIGV4LmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CisgICAgICAgICAgICAgICAgICAgIHRyeV9jb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDUsIHRyeV9jb3VudCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9wcm90bykKKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBmX3Byb3RvID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzo6MScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX3Byb3RvKQorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZXJ2ZXJfY2xvc2Uoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKworICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQ29ubmVjdGlvblJlZnVzZWRFcnJvciwgY2xpZW50LmNvbm5lY3QsICgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RNeURhdGFncmFtUHJvdG8oTXlEYXRhZ3JhbVByb3RvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhpbm5lcl9zZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5kYXRhZ3JhbV9yZWNlaXZlZChkYXRhLCBhZGRyKQorICAgICAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LnNlbmR0byhiJ3Jlc3A6JytkYXRhLCBhZGRyKQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgVGVzdE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApKQorICAgICAgICBzX3RyYW5zcG9ydCwgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICBob3N0LCBwb3J0ID0gc190cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc190cmFuc3BvcnQsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VydmVyLCBUZXN0TXlEYXRhZ3JhbVByb3RvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdJTklUSUFMSVpFRCcsIHNlcnZlci5zdGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZXJ2ZXIudHJhbnNwb3J0LCBzX3RyYW5zcG9ydCkKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGxhbWJkYTogTXlEYXRhZ3JhbVByb3RvKGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgIHJlbW90ZV9hZGRyPShob3N0LCBwb3J0KSkKKyAgICAgICAgdHJhbnNwb3J0LCBjbGllbnQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYW5zcG9ydCwgYXN5bmNpby5UcmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbGllbnQsIE15RGF0YWdyYW1Qcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSU5JVElBTElaRUQnLCBjbGllbnQuc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2xpZW50LnRyYW5zcG9ydCwgdHJhbnNwb3J0KQorCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYid4eHgnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogc2VydmVyLm5ieXRlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzZXJ2ZXIubmJ5dGVzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogY2xpZW50Lm5ieXRlcykKKworICAgICAgICAjIHJlY2VpdmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOCwgY2xpZW50Lm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjbGllbnQuZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgY2xpZW50LnN0YXRlKQorICAgICAgICBzZXJ2ZXIudHJhbnNwb3J0LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2ludGVybmFsX2ZkcyhzZWxmKToKKyAgICAgICAgbG9vcCA9IHNlbGYuY3JlYXRlX2V2ZW50X2xvb3AoKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsb29wLCBzZWxlY3Rvcl9ldmVudHMuQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbG9vcCBpcyBub3QgYSBCYXNlU2VsZWN0b3JFdmVudExvb3AnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbG9vcC5faW50ZXJuYWxfZmRzKQorICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsb29wLl9pbnRlcm5hbF9mZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvb3AuX2Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb29wLl9zc29jaykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9yZWFkX3BpcGUoc2VsZik6CisgICAgICAgIHByb3RvID0gTXlSZWFkUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHJwaXBlLCB3cGlwZSA9IG9zLnBpcGUoKQorICAgICAgICBwaXBlb2JqID0gaW8ub3BlbihycGlwZSwgJ3JiJywgMTAyNCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIHQsIHAgPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jb25uZWN0X3JlYWRfcGlwZSgKKyAgICAgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBwaXBlb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJ10sIHByb3RvLnN0YXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisKKyAgICAgICAgb3Mud3JpdGUod3BpcGUsIGInMScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPj0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3Mud3JpdGUod3BpcGUsIGInMjM0NScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPj0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJ10sIHByb3RvLnN0YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIHByb3RvLm5ieXRlcykKKworICAgICAgICBvcy5jbG9zZSh3cGlwZSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWydJTklUSUFMJywgJ0NPTk5FQ1RFRCcsICdFT0YnLCAnQ0xPU0VEJ10sIHByb3RvLnN0YXRlKQorICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgICMgc2VsZWN0LCBwb2xsIGFuZCBrcXVldWUgZG9uJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIgZGV2aWNlcyAoUFRZKSBvbiBNYWMgT1MgWAorICAgICMgb2xkZXIgdGhhbiAxMC42IChTbm93IExlb3BhcmQpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgNikKKyAgICAjIElzc3VlICMyMDQ5NTogVGhlIHRlc3QgaGFuZ3Mgb24gRnJlZUJTRCA3LjIgYnV0IHBhc3Mgb24gRnJlZUJTRCA5CisgICAgQHN1cHBvcnQucmVxdWlyZXNfZnJlZWJzZF92ZXJzaW9uKDgpCisgICAgZGVmIHRlc3RfcmVhZF9wdHlfb3V0cHV0KHNlbGYpOgorICAgICAgICBwcm90byA9IE15UmVhZFBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBtYXN0ZXIsIHNsYXZlID0gb3Mub3BlbnB0eSgpCisgICAgICAgIG1hc3Rlcl9yZWFkX29iaiA9IGlvLm9wZW4obWFzdGVyLCAncmInLCAwKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgdCwgcCA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNvbm5lY3RfcmVhZF9waXBlKGxhbWJkYTogcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX3JlYWRfb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJ10sIHByb3RvLnN0YXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisKKyAgICAgICAgb3Mud3JpdGUoc2xhdmUsIGInMScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLndyaXRlKHNsYXZlLCBiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID49IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3MuY2xvc2Uoc2xhdmUpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsnSU5JVElBTCcsICdDT05ORUNURUQnLCAnRU9GJywgJ0NMT1NFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BpcGUnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICBycGlwZSwgd3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4od3BpcGUsICd3YicsIDEwMjQpCisKKyAgICAgICAgcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLmNvbm5lY3Rfd3JpdGVfcGlwZShsYW1iZGE6IHByb3RvLCBwaXBlb2JqKQorICAgICAgICB0cmFuc3BvcnQsIHAgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHJhbnNwb3J0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzEnKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgICAgICBkZWYgcmVhZGVyKGRhdGEpOgorICAgICAgICAgICAgY2h1bmsgPSBvcy5yZWFkKHJwaXBlLCAxMDI0KQorICAgICAgICAgICAgZGF0YSArPSBjaHVuaworICAgICAgICAgICAgcmV0dXJuIGxlbihkYXRhKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiByZWFkZXIoZGF0YSkgPj0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEnLCBkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcmVhZGVyKGRhdGEpID49IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxMjM0NScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIG9zLmNsb3NlKHJwaXBlKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGlwZV9kaXNjb25uZWN0X29uX2Nsb3NlKHNlbGYpOgorICAgICAgICByc29jaywgd3NvY2sgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICByc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4od3NvY2suZGV0YWNoKCksICd3YicsIDEwMjQpCisKKyAgICAgICAgcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLmNvbm5lY3Rfd3JpdGVfcGlwZShsYW1iZGE6IHByb3RvLCBwaXBlb2JqKQorICAgICAgICB0cmFuc3BvcnQsIHAgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHJhbnNwb3J0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzEnKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLmxvb3Auc29ja19yZWN2KHJzb2NrLCAxMDI0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEnLCBkYXRhKQorCisgICAgICAgIHJzb2NrLmNsb3NlKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgICMgc2VsZWN0LCBwb2xsIGFuZCBrcXVldWUgZG9uJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIgZGV2aWNlcyAoUFRZKSBvbiBNYWMgT1MgWAorICAgICMgb2xkZXIgdGhhbiAxMC42IChTbm93IExlb3BhcmQpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgNikKKyAgICBkZWYgdGVzdF93cml0ZV9wdHkoc2VsZik6CisgICAgICAgIG1hc3Rlciwgc2xhdmUgPSBvcy5vcGVucHR5KCkKKyAgICAgICAgc2xhdmVfd3JpdGVfb2JqID0gaW8ub3BlbihzbGF2ZSwgJ3diJywgMCkKKworICAgICAgICBwcm90byA9IE15V3JpdGVQaXBlUHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3AuY29ubmVjdF93cml0ZV9waXBlKGxhbWJkYTogcHJvdG8sIHNsYXZlX3dyaXRlX29iaikKKyAgICAgICAgdHJhbnNwb3J0LCBwID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYW5zcG9ydCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KCkKKyAgICAgICAgZGVmIHJlYWRlcihkYXRhKToKKyAgICAgICAgICAgIGNodW5rID0gb3MucmVhZChtYXN0ZXIsIDEwMjQpCisgICAgICAgICAgICBkYXRhICs9IGNodW5rCisgICAgICAgICAgICByZXR1cm4gbGVuKGRhdGEpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHJlYWRlcihkYXRhKSA+PSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMScsIGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMjM0NScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiByZWFkZXIoZGF0YSkgPj0gNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEyMzQ1JywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgb3MuY2xvc2UobWFzdGVyKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICBkZWYgdGVzdF9wcm9tcHRfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX3JlY3YociwgMSkKKyAgICAgICAgb3YgPSBnZXRhdHRyKGYsICdvdicsIE5vbmUpCisgICAgICAgIGlmIG92IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG92LnBlbmRpbmcpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBtYWluKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihmLmNhbmNlbCkKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHJlcyA9ICdjYW5jZWxsZWQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlcyA9IE5vbmUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHN0YXJ0ID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICB0ID0gYXN5bmNpby5UYXNrKG1haW4oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIGVsYXBzZWQgPSB0aW1lLm1vbm90b25pYygpIC0gc3RhcnQKKworICAgICAgICBzZWxmLmFzc2VydExlc3MoZWxhcHNlZCwgMC4xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdjYW5jZWxsZWQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBmLnJlc3VsdCkKKyAgICAgICAgaWYgb3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92LnBlbmRpbmcpCisgICAgICAgIHNlbGYubG9vcC5fc3RvcF9zZXJ2aW5nKHIpCisKKyAgICAgICAgci5jbG9zZSgpCisgICAgICAgIHcuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdGltZW91dF9yb3VuZGluZyhzZWxmKToKKyAgICAgICAgZGVmIF9ydW5fb25jZSgpOgorICAgICAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZV9jb3VudGVyICs9IDEKKyAgICAgICAgICAgIG9yaWdfcnVuX29uY2UoKQorCisgICAgICAgIG9yaWdfcnVuX29uY2UgPSBzZWxmLmxvb3AuX3J1bl9vbmNlCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2VfY291bnRlciA9IDAKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSA9IF9ydW5fb25jZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdCgpOgorICAgICAgICAgICAgbG9vcCA9IHNlbGYubG9vcAorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDFlLTIsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxZS00LCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMWUtNiwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDFlLTgsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxZS0xMCwgbG9vcD1sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdCgpKQorICAgICAgICAjIFRoZSBpZGVhbCBudW1iZXIgb2YgY2FsbCBpcyAxMiwgYnV0IG9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgc2VsZWN0b3IKKyAgICAgICAgIyBtYXkgc2xlZXAgYXQgbGl0dGxlIGJpdCBsZXNzIHRoYW4gdGltZW91dCBkZXBlbmRpbmcgb24gdGhlIHJlc29sdXRpb24KKyAgICAgICAgIyBvZiB0aGUgY2xvY2sgdXNlZCBieSB0aGUga2VybmVsLiBUb2xlcmF0ZSBhIGZldyB1c2VsZXNzIGNhbGxzIG9uCisgICAgICAgICMgdGhlc2UgcGxhdGZvcm1zLgorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzZWxmLmxvb3AuX3J1bl9vbmNlX2NvdW50ZXIsIDIwLAorICAgICAgICAgICAgeydjbG9ja19yZXNvbHV0aW9uJzogc2VsZi5sb29wLl9jbG9ja19yZXNvbHV0aW9uLAorICAgICAgICAgICAgICdzZWxlY3Rvcic6IHNlbGYubG9vcC5fc2VsZWN0b3IuX19jbGFzc19fLl9fbmFtZV9ffSkKKworICAgIGRlZiB0ZXN0X3NvY2tfY29ubmVjdF9hZGRyZXNzKHNlbGYpOgorICAgICAgICBhZGRyZXNzZXMgPSBbKHNvY2tldC5BRl9JTkVULCAoJ3d3dy5weXRob24ub3JnJywgODApKV0KKyAgICAgICAgaWYgc3VwcG9ydC5JUFY2X0VOQUJMRUQ6CisgICAgICAgICAgICBhZGRyZXNzZXMuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc29ja2V0LkFGX0lORVQ2LCAoJ3d3dy5weXRob24ub3JnJywgODApKSwKKyAgICAgICAgICAgICAgICAoc29ja2V0LkFGX0lORVQ2LCAoJ3d3dy5weXRob24ub3JnJywgODAsIDAsIDApKSwKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgZm9yIGZhbWlseSwgYWRkcmVzcyBpbiBhZGRyZXNzZXM6CisgICAgICAgICAgICBmb3Igc29ja190eXBlIGluIChzb2NrZXQuU09DS19TVFJFQU0sIHNvY2tldC5TT0NLX0RHUkFNKToKKyAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2tfdHlwZSkKKyAgICAgICAgICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FkZHJlc3MgbXVzdCBiZSByZXNvbHZlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGNtLmV4Y2VwdGlvbikpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZmRzX2FmdGVyX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIGxvb3AgPSBzZWxmLmNyZWF0ZV9ldmVudF9sb29wKCkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGE6IE5vbmUKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAody5jbG9zZSkKKyAgICAgICAgbG9vcC5hZGRfcmVhZGVyKHIsIGNhbGxiYWNrKQorICAgICAgICBsb29wLmFkZF93cml0ZXIodywgY2FsbGJhY2spCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvb3AucmVtb3ZlX3JlYWRlcihyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb29wLnJlbW92ZV93cml0ZXIodykpCisKKyAgICBkZWYgdGVzdF9hZGRfZmRzX2FmdGVyX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIGxvb3AgPSBzZWxmLmNyZWF0ZV9ldmVudF9sb29wKCkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGE6IE5vbmUKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAody5jbG9zZSkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGxvb3AuYWRkX3JlYWRlcihyLCBjYWxsYmFjaykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgbG9vcC5hZGRfd3JpdGVyKHcsIGNhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfY2xvc2VfcnVubmluZ19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNsb3NlX2xvb3AobG9vcCk6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgICAgIGNvcm8gPSBjbG9zZV9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisKK2NsYXNzIFN1YnByb2Nlc3NUZXN0c01peGluOgorCisgICAgZGVmIGNoZWNrX3Rlcm1pbmF0ZWQoc2VsZiwgcmV0dXJuY29kZSk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldHVybmNvZGUsIGludCkKKyAgICAgICAgICAgICMgZXhwZWN0IDEgYnV0IHNvbWV0aW1lcyBnZXQgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR1RFUk0sIHJldHVybmNvZGUpCisKKyAgICBkZWYgY2hlY2tfa2lsbGVkKHNlbGYsIHJldHVybmNvZGUpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdLSUxMLCByZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGVjKHNlbGYpOgorICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc3RkaW4ud3JpdGUoYidQeXRob24gVGhlIFdpbm5lcicpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gVGhlIFdpbm5lcicsIHByb3RvLmRhdGFbMV0pCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2ludGVyYWN0aXZlKHNlbGYpOgorICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgICAgIHN0ZGluLndyaXRlKGInUHl0aG9uICcpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgICAgIHByb3RvLmdvdF9kYXRhWzFdLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gJywgcHJvdG8uZGF0YVsxXSkKKworICAgICAgICAgICAgc3RkaW4ud3JpdGUoYidUaGUgV2lubmVyJykKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1B5dGhvbiBUaGUgV2lubmVyJywgcHJvdG8uZGF0YVsxXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyYW5zcC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zaGVsbChzZWxmKToKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAnZWNobyBQeXRob24nKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChmLmRvbmUoKSBmb3IgZiBpbiBwcm90by5kaXNjb25uZWN0cy52YWx1ZXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uZGF0YVsxXS5yc3RyaXAoYidcclxuJyksIGInUHl0aG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5kYXRhWzJdLCBiJycpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4aXRjb2RlKHNlbGYpOgorICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGl0IDcnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2Nsb3NlX2FmdGVyX2ZpbmlzaChzZWxmKToKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDIpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfa2lsbChzZWxmKToKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNoby5weScpCisKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3Aua2lsbCgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmNoZWNrX2tpbGxlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc190ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLnRlcm1pbmF0ZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmNoZWNrX3Rlcm1pbmF0ZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsICJEb24ndCBoYXZlIFNJR0hVUCIpCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNoby5weScpCisKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3Auc2VuZF9zaWduYWwoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdIVVAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3N0ZGVycihzZWxmKToKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNobzIucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHN0ZGluLndyaXRlKGIndGVzdCcpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ09VVDp0ZXN0JywgcHJvdG8uZGF0YVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLmRhdGFbMl0uc3RhcnRzd2l0aChiJ0VSUjp0ZXN0JyksIHByb3RvLmRhdGFbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc3RkZXJyX3JlZGlyZWN0X3RvX3N0ZG91dChzZWxmKToKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNobzIucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZywgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgyKSkKKworICAgICAgICBzdGRpbi53cml0ZShiJ3Rlc3QnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLmRhdGFbMV0uc3RhcnRzd2l0aChiJ09VVDp0ZXN0RVJSOnRlc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmRhdGFbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBwcm90by5kYXRhWzJdKQorCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfY2xvc2VfY2xpZW50X3N0cmVhbShzZWxmKToKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNobzMucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHN0ZG91dCA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMSkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid0ZXN0JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidPVVQ6dGVzdCcsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kaXNjb25uZWN0c1sxXSkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid4eHgnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzJdLndhaXQoKSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInRVJSOkJyb2tlblBpcGVFcnJvcicsIHByb3RvLmRhdGFbMl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEFmdGVyIGNsb3NpbmcgdGhlIHJlYWQtZW5kIG9mIGEgcGlwZSwgd3JpdGluZyB0byB0aGUKKyAgICAgICAgICAgICMgd3JpdGUtZW5kIHVzaW5nIG9zLndyaXRlKCkgZmFpbHMgd2l0aCBlcnJubz09RUlOVkFMIGFuZAorICAgICAgICAgICAgIyBHZXRMYXN0RXJyb3IoKT09RVJST1JfSU5WQUxJRF9OQU1FIG9uIFdpbmRvd3MhPyEgIChVc2luZworICAgICAgICAgICAgIyBXcml0ZUZpbGUoKSB3ZSBnZXQgRVJST1JfQlJPS0VOX1BJUEUgYXMgZXhwZWN0ZWQuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0VSUjpPU0Vycm9yJywgcHJvdG8uZGF0YVsyXSkKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc193YWl0X25vX3NhbWVfZ3JvdXAoc2VsZik6CisgICAgICAgICMgc3RhcnQgdGhlIG5ldyBwcm9jZXNzIGluIGEgbmV3IHNlc3Npb24KKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSkKKyAgICAgICAgXywgcHJvdG8gPSB5aWVsZCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4ZWNfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKiprd2RzKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAncHdkJywgKiprd2RzKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QodW5pdmVyc2FsX25ld2xpbmVzPVRydWUpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KGJ1ZnNpemU9NDA5NikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3Qoc2hlbGw9VHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3NoZWxsX2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KGNtZD1Ob25lLCAqKmt3ZHMpOgorICAgICAgICAgICAgaWYgbm90IGNtZDoKKyAgICAgICAgICAgICAgICBjbWQgPSAncHdkJworICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwKKyAgICAgICAgICAgICAgICBjbWQsICoqa3dkcykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KFsnbHMnLCAnLWwnXSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QodW5pdmVyc2FsX25ld2xpbmVzPVRydWUpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KGJ1ZnNpemU9NDA5NikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3Qoc2hlbGw9RmFsc2UpKQorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorCisgICAgY2xhc3MgU2VsZWN0RXZlbnRMb29wVGVzdHMoRXZlbnRMb29wVGVzdHNNaXhpbiwgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uU2VsZWN0b3JFdmVudExvb3AoKQorCisgICAgY2xhc3MgUHJvYWN0b3JFdmVudExvb3BUZXN0cyhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgaW5jb21wYXRpYmxlIHdpdGggU1NMIikKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgaW5jb21wYXRpYmxlIHdpdGggU1NMIikKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfcmVhZGVyKCkiKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWRlcl9jYWxsYmFja19jYW5jZWwoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF9yZWFkZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfd3JpdGVyKCkiKQorCisgICAgICAgIGRlZiB0ZXN0X3dyaXRlcl9jYWxsYmFja19jYW5jZWwoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF93cml0ZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoCisgICAgICAgICAgICAgICAgIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBjcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoKSIpCisKKyAgICAgICAgZGVmIHRlc3RfcmVtb3ZlX2Zkc19hZnRlcl9jbG9zaW5nKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfcmVhZGVyKCkiKQorZWxzZToKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHNlbGVjdG9ycworCisgICAgY2xhc3MgVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4oRXZlbnRMb29wVGVzdHNNaXhpbik6CisgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICAgICAgd2F0Y2hlciA9IGFzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcigpCisgICAgICAgICAgICB3YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcikKKworICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICBhc3luY2lvLnNldF9jaGlsZF93YXRjaGVyKE5vbmUpCisgICAgICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnS3F1ZXVlU2VsZWN0b3InKToKKyAgICAgICAgY2xhc3MgS3F1ZXVlRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKAorICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuS3F1ZXVlU2VsZWN0b3IoKSkKKworICAgICAgICAgICAgIyBrcXVldWUgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIChQVFkpIG9uIE1hYyBPUyBYIG9sZGVyCisgICAgICAgICAgICAjIHRoYW4gMTAuOSAoTWF2ZXJpY2spCisgICAgICAgICAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA5KQorICAgICAgICAgICAgIyBJc3N1ZSAjMjA2Njc6IEtxdWV1ZUV2ZW50TG9vcFRlc3RzLnRlc3RfcmVhZF9wdHlfb3V0cHV0KCkKKyAgICAgICAgICAgICMgaGFuZ3Mgb24gT3BlbkJTRCA1LjUKKyAgICAgICAgICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ29wZW5ic2QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgaGFuZ3Mgb24gT3BlbkJTRCcpCisgICAgICAgICAgICBkZWYgdGVzdF9yZWFkX3B0eV9vdXRwdXQoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3JlYWRfcHR5X291dHB1dCgpCisKKyAgICAgICAgICAgICMga3F1ZXVlIGRvZXNuJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIgZGV2aWNlcyAoUFRZKSBvbiBNYWMgT1MgWCBvbGRlcgorICAgICAgICAgICAgIyB0aGFuIDEwLjkgKE1hdmVyaWNrKQorICAgICAgICAgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgOSkKKyAgICAgICAgICAgIGRlZiB0ZXN0X3dyaXRlX3B0eShzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLnRlc3Rfd3JpdGVfcHR5KCkKKworICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnRXBvbGxTZWxlY3RvcicpOgorICAgICAgICBjbGFzcyBFUG9sbEV2ZW50TG9vcFRlc3RzKFVuaXhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IoKSkKKworICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIFBvbGxFdmVudExvb3BUZXN0cyhVbml4RXZlbnRMb29wVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuUG9sbFNlbGVjdG9yKCkpCisKKyAgICAjIFNob3VsZCBhbHdheXMgZXhpc3QuCisgICAgY2xhc3MgU2VsZWN0RXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yKCkpCisKKworZGVmIG5vb3AoKmFyZ3MpOgorICAgIHBhc3MKKworCitjbGFzcyBIYW5kbGVUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmdldF9kZWJ1Zy5yZXR1cm5fdmFsdWUgPSBUcnVlCisKKyAgICBkZWYgdGVzdF9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworCisgICAgICAgIGFyZ3MgPSAoKQorICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5fY2FuY2VsbGVkKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2Zyb21faGFuZGxlKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgICAgICAgaDEgPSBhc3luY2lvLkhhbmRsZShjYWxsYmFjaywgKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBhc3luY2lvLkhhbmRsZSwgaDEsICgpLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193aXRoX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKworICAgICAgICBzZWxmLmxvb3AgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGNhbGxiYWNrLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBoLl9ydW4oKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyLmFzc2VydF9jYWxsZWRfd2l0aCh7CisgICAgICAgICAgICAnbWVzc2FnZSc6IHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oJ0V4Y2VwdGlvbiBpbiBjYWxsYmFjay4qJyksCisgICAgICAgICAgICAnZXhjZXB0aW9uJzogbW9jay5BTlksCisgICAgICAgICAgICAnaGFuZGxlJzogaCwKKyAgICAgICAgICAgICdzb3VyY2VfdHJhY2ViYWNrJzogaC5fc291cmNlX3RyYWNlYmFjaywKKyAgICAgICAgfSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV93ZWFrcmVmKHNlbGYpOgorICAgICAgICB3ZCA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShsYW1iZGE6IE5vbmUsICgpLCBzZWxmLmxvb3ApCisgICAgICAgIHdkWydoJ10gPSBoICAjIFdvdWxkIGZhaWwgd2l0aG91dCBfX3dlYWtyZWZfXyBzbG90LgorCisgICAgZGVmIHRlc3RfaGFuZGxlX3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5nZXRfZGVidWcucmV0dXJuX3ZhbHVlID0gRmFsc2UKKworICAgICAgICAjIHNpbXBsZSBmdW5jdGlvbgorICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUobm9vcCwgKDEsIDIpLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8gPSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2Uobm9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJzxIYW5kbGUgbm9vcCgxLCAyKSBhdCAlczolcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgbGluZW5vKSkKKworICAgICAgICAjIGNhbmNlbGxlZCBoYW5kbGUKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAnPEhhbmRsZSBjYW5jZWxsZWQ+JykKKworICAgICAgICAjIGRlY29yYXRlZCBmdW5jdGlvbgorICAgICAgICBjYiA9IGFzeW5jaW8uY29yb3V0aW5lKG5vb3ApCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYiwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJzxIYW5kbGUgbm9vcCgpIGF0ICVzOiVzPicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBsaW5lbm8pKQorCisgICAgICAgICMgcGFydGlhbCBmdW5jdGlvbgorICAgICAgICBjYiA9IGZ1bmN0b29scy5wYXJ0aWFsKG5vb3AsIDEsIDIpCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYiwgKDMsKSwgc2VsZi5sb29wKQorICAgICAgICByZWdleCA9IChyJ148SGFuZGxlIG5vb3BcKDEsIDJcKVwoM1wpIGF0ICVzOiVzPiQnCisgICAgICAgICAgICAgICAgICUgKHJlLmVzY2FwZShmaWxlbmFtZSksIGxpbmVubykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihoKSwgcmVnZXgpCisKKyAgICAgICAgIyBwYXJ0aWFsIG1ldGhvZAorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA0KToKKyAgICAgICAgICAgIG1ldGhvZCA9IEhhbmRsZVRlc3RzLnRlc3RfaGFuZGxlX3JlcHIKKyAgICAgICAgICAgIGNiID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QobWV0aG9kKQorICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShtZXRob2QpCisgICAgICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUoY2IsICgpLCBzZWxmLmxvb3ApCisKKyAgICAgICAgICAgIGNiX3JlZ2V4ID0gcic8ZnVuY3Rpb24gSGFuZGxlVGVzdHMudGVzdF9oYW5kbGVfcmVwciAuKj4nCisgICAgICAgICAgICBjYl9yZWdleCA9IChyJ2Z1bmN0b29scy5wYXJ0aWFsbWV0aG9kXCglcywgLCBcKVwoXCknICUgY2JfcmVnZXgpCisgICAgICAgICAgICByZWdleCA9IChyJ148SGFuZGxlICVzIGF0ICVzOiVzPiQnCisgICAgICAgICAgICAgICAgICAgICAlIChjYl9yZWdleCwgcmUuZXNjYXBlKGZpbGVuYW1lKSwgbGluZW5vKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihoKSwgcmVnZXgpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfcmVwcl9kZWJ1ZyhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldF9kZWJ1Zy5yZXR1cm5fdmFsdWUgPSBUcnVlCisKKyAgICAgICAgIyBzaW1wbGUgZnVuY3Rpb24KKyAgICAgICAgY3JlYXRlX2ZpbGVuYW1lID0gX19maWxlX18KKyAgICAgICAgY3JlYXRlX2xpbmVubyA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2xpbmVubyArIDEKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKG5vb3AsICgxLCAyKSwgc2VsZi5sb29wKQorICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gdGVzdF91dGlscy5nZXRfZnVuY3Rpb25fc291cmNlKG5vb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8SGFuZGxlIG5vb3AoMSwgMikgYXQgJXM6JXMgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgbGluZW5vLCBjcmVhdGVfZmlsZW5hbWUsIGNyZWF0ZV9saW5lbm8pKQorCisgICAgICAgICMgY2FuY2VsbGVkIGhhbmRsZQorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8SGFuZGxlIGNhbmNlbGxlZCBjcmVhdGVkIGF0ICVzOiVzPicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGNyZWF0ZV9maWxlbmFtZSwgY3JlYXRlX2xpbmVubykpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfc291cmNlX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBsb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgZGVmIGNoZWNrX3NvdXJjZV90cmFjZWJhY2soaCk6CisgICAgICAgICAgICBsaW5lbm8gPSBzeXMuX2dldGZyYW1lKDEpLmZfbGluZW5vIC0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGguX3NvdXJjZV90cmFjZWJhY2ssIGxpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguX3NvdXJjZV90cmFjZWJhY2tbLTFdWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZmlsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfaGFuZGxlX3NvdXJjZV90cmFjZWJhY2snKSkKKworICAgICAgICAjIGNhbGxfc29vbgorICAgICAgICBoID0gbG9vcC5jYWxsX3Nvb24obm9vcCkKKyAgICAgICAgY2hlY2tfc291cmNlX3RyYWNlYmFjayhoKQorCisgICAgICAgICMgY2FsbF9zb29uX3RocmVhZHNhZmUKKyAgICAgICAgaCA9IGxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUobm9vcCkKKyAgICAgICAgY2hlY2tfc291cmNlX3RyYWNlYmFjayhoKQorCisgICAgICAgICMgY2FsbF9sYXRlcgorICAgICAgICBoID0gbG9vcC5jYWxsX2xhdGVyKDAsIG5vb3ApCisgICAgICAgIGNoZWNrX3NvdXJjZV90cmFjZWJhY2soaCkKKworICAgICAgICAjIGNhbGxfYXQKKyAgICAgICAgaCA9IGxvb3AuY2FsbF9sYXRlcigwLCBub29wKQorICAgICAgICBjaGVja19zb3VyY2VfdHJhY2ViYWNrKGgpCisKKworY2xhc3MgVGltZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IG1vY2suTW9jaygpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICB3aGVuID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBoID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBsYW1iZGE6IEZhbHNlLCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChoKSwgaGFzaCh3aGVuKSkKKworICAgIGRlZiB0ZXN0X3RpbWVyKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICBhcmdzID0gKDEsIDIsIDMpCisgICAgICAgIHdoZW4gPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIGggPSBhc3luY2lvLlRpbWVySGFuZGxlKHdoZW4sIGNhbGxiYWNrLCBhcmdzLCBtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgIyBjYW5jZWwKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5fY2FuY2VsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShoLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaC5fYXJncykKKworICAgICAgICAjIHdoZW4gY2Fubm90IGJlIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uVGltZXJIYW5kbGUsIE5vbmUsIGNhbGxiYWNrLCBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF90aW1lcl9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuZ2V0X2RlYnVnLnJldHVybl92YWx1ZSA9IEZhbHNlCisKKyAgICAgICAgIyBzaW1wbGUgZnVuY3Rpb24KKyAgICAgICAgaCA9IGFzeW5jaW8uVGltZXJIYW5kbGUoMTIzLCBub29wLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBzcmMgPSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2Uobm9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJzxUaW1lckhhbmRsZSB3aGVuPTEyMyBub29wKCkgYXQgJXM6JXM+JyAlIHNyYykKKworICAgICAgICAjIGNhbmNlbGxlZCBoYW5kbGUKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAnPFRpbWVySGFuZGxlIGNhbmNlbGxlZCB3aGVuPTEyMz4nKQorCisgICAgZGVmIHRlc3RfdGltZXJfcmVwcl9kZWJ1ZyhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldF9kZWJ1Zy5yZXR1cm5fdmFsdWUgPSBUcnVlCisKKyAgICAgICAgIyBzaW1wbGUgZnVuY3Rpb24KKyAgICAgICAgY3JlYXRlX2ZpbGVuYW1lID0gX19maWxlX18KKyAgICAgICAgY3JlYXRlX2xpbmVubyA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2xpbmVubyArIDEKKyAgICAgICAgaCA9IGFzeW5jaW8uVGltZXJIYW5kbGUoMTIzLCBub29wLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gdGVzdF91dGlscy5nZXRfZnVuY3Rpb25fc291cmNlKG5vb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8VGltZXJIYW5kbGUgd2hlbj0xMjMgbm9vcCgpICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdhdCAlczolcyBjcmVhdGVkIGF0ICVzOiVzPicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBsaW5lbm8sIGNyZWF0ZV9maWxlbmFtZSwgY3JlYXRlX2xpbmVubykpCisKKyAgICAgICAgIyBjYW5jZWxsZWQgaGFuZGxlCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJzxUaW1lckhhbmRsZSBjYW5jZWxsZWQgd2hlbj0xMjMgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAlIChjcmVhdGVfZmlsZW5hbWUsIGNyZWF0ZV9saW5lbm8pKQorCisKKyAgICBkZWYgdGVzdF90aW1lcl9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICB3aGVuID0gdGltZS5tb25vdG9uaWMoKQorCisgICAgICAgIGgxID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgaDIgPSBhc3luY2lvLlRpbWVySGFuZGxlKHdoZW4sIGNhbGxiYWNrLCAoKSwgc2VsZi5sb29wKQorICAgICAgICAjIFRPRE86IFVzZSBhc3NlcnRMZXNzIGV0Yy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA8IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDwgaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA8PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPiBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSAhPSBoMikKKworICAgICAgICBoMi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID09IGgyKQorCisgICAgICAgIGgxID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgaDIgPSBhc3luY2lvLlRpbWVySGFuZGxlKHdoZW4gKyAxMC4wLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPCBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDw9IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSAhPSBoMikKKworICAgICAgICBoMyA9IGFzeW5jaW8uSGFuZGxlKGNhbGxiYWNrLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX2VxX18oaDMpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX25lX18oaDMpKQorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX2ZvcmV2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdG9wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuaXNfcnVubmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmlzX2Nsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY3JlYXRlX3Rhc2ssIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX2xhdGVyLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9hdCwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfc29vbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJ1bl9pbl9leGVjdXRvciwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuZ2V0YWRkcmluZm8sICdsb2NhbGhvc3QnLCA4MDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuZ2V0bmFtZWluZm8sICgnbG9jYWxob3N0JywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfY29ubmVjdGlvbiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9zZXJ2ZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5hZGRfcmVhZGVyLCAxLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3JlYWRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF93cml0ZXIsIDEsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfd3JpdGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19yZWN2LCBmLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfc2VuZGFsbCwgZiwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX2Nvbm5lY3QsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX2FjY2VwdCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNvbm5lY3RfcmVhZF9waXBlLCBmLAorICAgICAgICAgICAgbW9jay5zZW50aW5lbC5waXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY29ubmVjdF93cml0ZV9waXBlLCBmLAorICAgICAgICAgICAgbW9jay5zZW50aW5lbC5waXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc3VicHJvY2Vzc19zaGVsbCwgZiwKKyAgICAgICAgICAgIG1vY2suc2VudGluZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdWJwcm9jZXNzX2V4ZWMsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5kZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmdldF9kZWJ1ZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNldF9kZWJ1ZywgZikKKworCitjbGFzcyBQcm90b2NvbHNBYnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgZiA9IG1vY2suTW9jaygpCisgICAgICAgIHAgPSBhc3luY2lvLlByb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuY29ubmVjdGlvbl9sb3N0KGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLmRhdGFfcmVjZWl2ZWQoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuZW9mX3JlY2VpdmVkKCkpCisKKyAgICAgICAgZHAgPSBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmNvbm5lY3Rpb25fbG9zdChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuZXJyb3JfcmVjZWl2ZWQoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmRhdGFncmFtX3JlY2VpdmVkKGYsIGYpKQorCisgICAgICAgIHNwID0gYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLmNvbm5lY3Rpb25fbG9zdChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucGlwZV9kYXRhX3JlY2VpdmVkKDEsIGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5waXBlX2Nvbm5lY3Rpb25fbG9zdCgxLCBmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucHJvY2Vzc19leGl0ZWQoKSkKKworCitjbGFzcyBQb2xpY3lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LnNldF9ldmVudF9sb29wLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5Lm5ld19ldmVudF9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll9sb2NhbC5fbG9vcCkKKworICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb3AsIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3kuX2xvY2FsLl9sb29wLCBsb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX2NhbGxzX3NldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgcG9saWN5LCAic2V0X2V2ZW50X2xvb3AiLAorICAgICAgICAgICAgICAgIHdyYXBzPXBvbGljeS5zZXRfZXZlbnRfbG9vcCkgYXMgbV9zZXRfZXZlbnRfbG9vcDoKKworICAgICAgICAgICAgbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgICAgICMgcG9saWN5Ll9sb2NhbC5fbG9vcCBtdXN0IGJlIHNldCB0aHJvdWdoIC5zZXRfZXZlbnRfbG9vcCgpCisgICAgICAgICAgICAjICh0aGUgdW5peCBEZWZhdWx0RXZlbnRMb29wUG9saWN5IG5lZWRzIHRoaXMgY2FsbCB0byBhdHRhY2gKKyAgICAgICAgICAgICMgdGhlIGNoaWxkIHdhdGNoZXIgY29ycmVjdGx5KQorICAgICAgICAgICAgbV9zZXRfZXZlbnRfbG9vcC5hc3NlcnRfY2FsbGVkX3dpdGgobG9vcCkKKworICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX2FmdGVyX3NldF9ub25lKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmV2ZW50cy50aHJlYWRpbmcuY3VycmVudF90aHJlYWQnKQorICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX3RocmVhZChzZWxmLCBtX2N1cnJlbnRfdGhyZWFkKToKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcG9saWN5ID0gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3ApCisKKyAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0aC5zdGFydCgpCisgICAgICAgIHRoLmpvaW4oKQorCisgICAgZGVmIHRlc3RfbmV3X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKyAgICAgICAgbG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29wLCBhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBvbGRfbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvbGljeS5zZXRfZXZlbnRfbG9vcCwgb2JqZWN0KCkpCisKKyAgICAgICAgbG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9sZF9sb29wLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIG9sZF9sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9saWN5LCBhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wUG9saWN5KQorICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeSwgYXN5bmNpby5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKSkKKworICAgIGRlZiB0ZXN0X3NldF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgYXN5bmNpby5zZXRfZXZlbnRfbG9vcF9wb2xpY3ksIG9iamVjdCgpKQorCisgICAgICAgIG9sZF9wb2xpY3kgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpCisKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KQorICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeSwgYXN5bmNpby5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwb2xpY3ksIG9sZF9wb2xpY3kpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9mdXR1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDAyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9mdXR1cmVzLnB5CkBAIC0wLDAgKzEsNDQyIEBACisiIiJUZXN0cyBmb3IgZnV0dXJlcy5weS4iIiIKKworaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworZGVmIF9mYWtlZnVuYyhmKToKKyAgICByZXR1cm4gZgorCitkZWYgZmlyc3RfY2IoKToKKyAgICBwYXNzCisKK2RlZiBsYXN0X2NiKCk6CisgICAgcGFzcworCisKK2NsYXNzIEZ1dHVyZVRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbF9zdGF0ZShzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5kb25lKCkpCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9pbml0X2NvbnN0cnVjdG9yX2RlZmF1bHRfbG9vcChzZWxmKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZi5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfcG9zaXRpb25hbChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgRnV0dXJlIGRvZXNuJ3QgYWNjZXB0IGEgcG9zaXRpb25hbCBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFzeW5jaW8uRnV0dXJlLCA0MikKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIGYuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9yZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X2V4Y2VwdGlvbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfcmVzdWx0KHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYucmVzdWx0KQorCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfcmVzdWx0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9leGNlcHRpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLmV4Y2VwdGlvbikKKworICAgICAgICBmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmLnJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmV4Y2VwdGlvbigpLCBleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X3Jlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfZXhjZXB0aW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fY2xhc3Moc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYuZXhjZXB0aW9uKCksIFJ1bnRpbWVFcnJvcikKKworICAgIGRlZiB0ZXN0X3lpZWxkX2Zyb21fdHdpY2Uoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgZml4dHVyZSgpOgorICAgICAgICAgICAgeWllbGQgJ0EnCisgICAgICAgICAgICB4ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICB5aWVsZCAnQicsIHgKKyAgICAgICAgICAgIHkgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHlpZWxkICdDJywgeQorCisgICAgICAgIGcgPSBmaXh0dXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGcpLCAnQScpICAjIHlpZWxkICdBJy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGcpLCBmKSAgIyBGaXJzdCB5aWVsZCBmcm9tIGYuCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGcpLCAoJ0InLCA0MikpICAjIHlpZWxkICdCJywgeC4KKyAgICAgICAgIyBUaGUgc2Vjb25kICJ5aWVsZCBmcm9tIGYiIGRvZXMgbm90IHlpZWxkIGYuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgKCdDJywgNDIpKSAgIyB5aWVsZCAnQycsIHkuCisKKyAgICBkZWYgdGVzdF9mdXR1cmVfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICBmX3BlbmRpbmdfZGVidWcgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnJhbWUgPSBmX3BlbmRpbmdfZGVidWcuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3BlbmRpbmdfZGVidWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8RnV0dXJlIHBlbmRpbmcgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZnJhbWVbMF0sIGZyYW1lWzFdKSkKKyAgICAgICAgZl9wZW5kaW5nX2RlYnVnLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhGYWxzZSkKKyAgICAgICAgZl9wZW5kaW5nID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3BlbmRpbmcpLCAnPEZ1dHVyZSBwZW5kaW5nPicpCisgICAgICAgIGZfcGVuZGluZy5jYW5jZWwoKQorCisgICAgICAgIGZfY2FuY2VsbGVkID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZfY2FuY2VsbGVkLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX2NhbmNlbGxlZCksICc8RnV0dXJlIGNhbmNlbGxlZD4nKQorCisgICAgICAgIGZfcmVzdWx0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZfcmVzdWx0LnNldF9yZXN1bHQoNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfcmVzdWx0KSwgJzxGdXR1cmUgZmluaXNoZWQgcmVzdWx0PTQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmX3Jlc3VsdC5yZXN1bHQoKSwgNCkKKworICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmX2V4Y2VwdGlvbiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfZXhjZXB0aW9uKSwgJzxGdXR1cmUgZmluaXNoZWQgZXhjZXB0aW9uPVJ1bnRpbWVFcnJvcigpPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZl9leGNlcHRpb24uZXhjZXB0aW9uKCksIGV4YykKKworICAgICAgICBkZWYgZnVuY19yZXByKGZ1bmMpOgorICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShmdW5jKQorICAgICAgICAgICAgdGV4dCA9ICclcygpIGF0ICVzOiVzJyAlIChmdW5jLl9fcXVhbG5hbWVfXywgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgICAgIHJldHVybiByZS5lc2NhcGUodGV4dCkKKworICAgICAgICBmX29uZV9jYWxsYmFja3MgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9vbmVfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKF9mYWtlZnVuYykKKyAgICAgICAgZmFrZV9yZXByID0gZnVuY19yZXByKF9mYWtlZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGZfb25lX2NhbGxiYWNrcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcic8RnV0dXJlIHBlbmRpbmcgY2I9XFslc1xdPicgJSBmYWtlX3JlcHIpCisgICAgICAgIGZfb25lX2NhbGxiYWNrcy5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9vbmVfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBjYW5jZWxsZWQ+JykKKworICAgICAgICBmX3R3b19jYWxsYmFja3MgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl90d29fY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGZpcnN0X2NiKQorICAgICAgICBmX3R3b19jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2sobGFzdF9jYikKKyAgICAgICAgZmlyc3RfcmVwciA9IGZ1bmNfcmVwcihmaXJzdF9jYikKKyAgICAgICAgbGFzdF9yZXByID0gZnVuY19yZXByKGxhc3RfY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihmX3R3b19jYWxsYmFja3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHInPEZ1dHVyZSBwZW5kaW5nIGNiPVxbJXMsICVzXF0+JworICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpcnN0X3JlcHIsIGxhc3RfcmVwcikpCisKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGZpcnN0X2NiKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg4KToKKyAgICAgICAgICAgIGZfbWFueV9jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2soX2Zha2VmdW5jKQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGxhc3RfY2IpCisgICAgICAgIGNiX3JlZ2V4ID0gciclcywgPDggbW9yZT4sICVzJyAlIChmaXJzdF9yZXByLCBsYXN0X3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihmX21hbnlfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByJzxGdXR1cmUgcGVuZGluZyBjYj1cWyVzXF0+JyAlIGNiX3JlZ2V4KQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX21hbnlfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBjYW5jZWxsZWQ+JykKKworICAgIGRlZiB0ZXN0X2NvcHlfc3RhdGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgaW50ZXJuYWwgX2NvcHlfc3RhdGUgbWV0aG9kIHNpbmNlIGl0J3MgYmVpbmcgZGlyZWN0bHkKKyAgICAgICAgIyBpbnZva2VkIGluIG90aGVyIG1vZHVsZXMuCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5zZXRfcmVzdWx0KDEwKQorCisgICAgICAgIG5ld2YgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgbmV3Zi5fY29weV9zdGF0ZShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Zi5yZXN1bHQoKSwgMTApCisKKyAgICAgICAgZl9leGNlcHRpb24gPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9leGNlcHRpb24uc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoKSkKKworICAgICAgICBuZXdmX2V4Y2VwdGlvbiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuZXdmX2V4Y2VwdGlvbi5fY29weV9zdGF0ZShmX2V4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2ZfZXhjZXB0aW9uLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBuZXdmX2V4Y2VwdGlvbi5yZXN1bHQpCisKKyAgICAgICAgZl9jYW5jZWxsZWQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9jYW5jZWxsZWQuY2FuY2VsKCkKKworICAgICAgICBuZXdmX2NhbmNlbGxlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuZXdmX2NhbmNlbGxlZC5fY29weV9zdGF0ZShmX2NhbmNlbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2ZfY2FuY2VsbGVkLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfaXRlcihzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGFyZzEsIGFyZzIgPSBjb3JvKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdGVzdCkKKyAgICAgICAgZnV0LmNhbmNlbCgpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9hYmFuZG9uZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX3Jlc3VsdF91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX3Jlc3VsdF9yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIGZ1dC5yZXN1bHQoKQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfZXhjZXB0aW9uX3VucmV0cmlldmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignYm9vbScpKQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfZXhjZXB0aW9uX3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZnV0LmV4Y2VwdGlvbigpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9leGNlcHRpb25fcmVzdWx0X3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmdXQucmVzdWx0KQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmUoc2VsZik6CisKKyAgICAgICAgZGVmIHJ1bihhcmcpOgorICAgICAgICAgICAgcmV0dXJuIChhcmcsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgZXggPSBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKDEpCisgICAgICAgIGYxID0gZXguc3VibWl0KHJ1biwgJ29pJykKKyAgICAgICAgZjIgPSBhc3luY2lvLndyYXBfZnV0dXJlKGYxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzLCBpZGVudCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmMiwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnb2knKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkZW50LCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV9mdXR1cmUoc2VsZik6CisgICAgICAgIGYxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYyID0gYXN5bmNpby53cmFwX2Z1dHVyZShmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmMSwgZjIpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmV2ZW50cycpCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfdXNlX2dsb2JhbF9sb29wKHNlbGYsIG1fZXZlbnRzKToKKyAgICAgICAgZGVmIHJ1bihhcmcpOgorICAgICAgICAgICAgcmV0dXJuIChhcmcsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgZXggPSBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKDEpCisgICAgICAgIGYxID0gZXguc3VibWl0KHJ1biwgJ29pJykKKyAgICAgICAgZjIgPSBhc3luY2lvLndyYXBfZnV0dXJlKGYxKQorICAgICAgICBzZWxmLmFzc2VydElzKG1fZXZlbnRzLmdldF9ldmVudF9sb29wLnJldHVybl92YWx1ZSwgZjIuX2xvb3ApCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV9jYW5jZWwoc2VsZik6CisgICAgICAgIGYxID0gY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSgpCisgICAgICAgIGYyID0gYXN5bmNpby53cmFwX2Z1dHVyZShmMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYyLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMi5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2NhbmNlbDIoc2VsZik6CisgICAgICAgIGYxID0gY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSgpCisgICAgICAgIGYyID0gYXN5bmNpby53cmFwX2Z1dHVyZShmMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYxLnNldF9yZXN1bHQoNDIpCisgICAgICAgIGYyLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYxLnJlc3VsdCgpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYyLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfZnV0dXJlX3NvdXJjZV90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKworICAgICAgICBmdXR1cmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgbGluZW5vID0gc3lzLl9nZXRmcmFtZSgpLmZfbGluZW5vIC0gMQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0dXJlLl9zb3VyY2VfdHJhY2ViYWNrLCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dHVyZS5fc291cmNlX3RyYWNlYmFja1stMV1bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChfX2ZpbGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9mdXR1cmVfc291cmNlX3RyYWNlYmFjaycpKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9mdXR1cmVfZXhjZXB0aW9uX25ldmVyX3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKworICAgICAgICBkZWYgbWVtb3J5X2Vycm9yKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgTWVtb3J5RXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHJldHVybiBleGMKKyAgICAgICAgZXhjID0gbWVtb3J5X2Vycm9yKCkKKworICAgICAgICBmdXR1cmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc291cmNlX3RyYWNlYmFjayA9IGZ1dHVyZS5fc291cmNlX3RyYWNlYmFjaworICAgICAgICBmdXR1cmUuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGZ1dHVyZSA9IE5vbmUKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNCk6CisgICAgICAgICAgICBmcmFtZSA9IHNvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICAgICByZWdleCA9IChyJ15GdXR1cmUgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgIHInZnV0dXJlOiA8RnV0dXJlIGZpbmlzaGVkIGV4Y2VwdGlvbj1NZW1vcnlFcnJvclwoXCkgY3JlYXRlZCBhdCB7ZmlsZW5hbWV9OntsaW5lbm99PlxuJworICAgICAgICAgICAgICAgICAgICAgcidzb3VyY2VfdHJhY2ViYWNrOiBPYmplY3QgY3JlYXRlZCBhdCBcKG1vc3QgcmVjZW50IGNhbGwgbGFzdFwpOlxuJworICAgICAgICAgICAgICAgICAgICAgcicgIEZpbGUnCisgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICByJyAgRmlsZSAie2ZpbGVuYW1lfSIsIGxpbmUge2xpbmVub30sIGluIHRlc3RfZnV0dXJlX2V4Y2VwdGlvbl9uZXZlcl9yZXRyaWV2ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgIHInICAgIGZ1dHVyZSA9IGFzeW5jaW9cLkZ1dHVyZVwobG9vcD1zZWxmXC5sb29wXCkkJworICAgICAgICAgICAgICAgICAgICAgKS5mb3JtYXQoZmlsZW5hbWU9cmUuZXNjYXBlKGZyYW1lWzBdKSwgbGluZW5vPWZyYW1lWzFdKQorICAgICAgICAgICAgZXhjX2luZm8gPSAodHlwZShleGMpLCBleGMsIGV4Yy5fX3RyYWNlYmFja19fKQorICAgICAgICAgICAgbV9sb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgobW9jay5BTlksIGV4Y19pbmZvPWV4Y19pbmZvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJhbWUgPSBzb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICAgICAgcmVnZXggPSAocideRnV0dXJlL1Rhc2sgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgIHInRnV0dXJlL1Rhc2sgY3JlYXRlZCBhdCBcKG1vc3QgcmVjZW50IGNhbGwgbGFzdFwpOlxuJworICAgICAgICAgICAgICAgICAgICAgcicgIEZpbGUnCisgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICByJyAgRmlsZSAie2ZpbGVuYW1lfSIsIGxpbmUge2xpbmVub30sIGluIHRlc3RfZnV0dXJlX2V4Y2VwdGlvbl9uZXZlcl9yZXRyaWV2ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgIHInICAgIGZ1dHVyZSA9IGFzeW5jaW9cLkZ1dHVyZVwobG9vcD1zZWxmXC5sb29wXClcbicKKyAgICAgICAgICAgICAgICAgICAgIHInVHJhY2ViYWNrIFwobW9zdCByZWNlbnQgY2FsbCBsYXN0XCk6XG4nCisgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICByJ01lbW9yeUVycm9yJCcKKyAgICAgICAgICAgICAgICAgICAgICkuZm9ybWF0KGZpbGVuYW1lPXJlLmVzY2FwZShmcmFtZVswXSksIGxpbmVubz1mcmFtZVsxXSkKKyAgICAgICAgICAgIG1fbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKG1vY2suQU5ZLCBleGNfaW5mbz1GYWxzZSkKKyAgICAgICAgbWVzc2FnZSA9IG1fbG9nLmVycm9yLmNhbGxfYXJnc1swXVswXQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG1lc3NhZ2UsIHJlLmNvbXBpbGUocmVnZXgsIHJlLkRPVEFMTCkpCisKKyAgICBkZWYgdGVzdF9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgZnV0Ll9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYW5jZWxsZWQoKSkKKworCitjbGFzcyBGdXR1cmVEb25lQ2FsbGJhY2tUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiBydW5fYnJpZWZseShzZWxmKToKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgX21ha2VfY2FsbGJhY2soc2VsZiwgYmFnLCB0aGluZyk6CisgICAgICAgICMgQ3JlYXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhcHBlbmRzIHRoaW5nIHRvIGJhZy4KKyAgICAgICAgZGVmIGJhZ19hcHBlbmRlcihmdXR1cmUpOgorICAgICAgICAgICAgYmFnLmFwcGVuZCh0aGluZykKKyAgICAgICAgcmV0dXJuIGJhZ19hcHBlbmRlcgorCisgICAgZGVmIF9uZXdfZnV0dXJlKHNlbGYpOgorICAgICAgICByZXR1cm4gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfaW52b2tlZF9vbl9zZXRfcmVzdWx0KHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDQyKSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMTcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbXSkKKyAgICAgICAgZi5zZXRfcmVzdWx0KCdmb28nKQorCisgICAgICAgIHNlbGYucnVuX2JyaWVmbHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbNDIsIDE3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19pbnZva2VkX29uX3NldF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGJhZyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9uZXdfZnV0dXJlKCkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMTAwKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgW10pCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihleGMpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFsxMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXhjZXB0aW9uKCksIGV4YykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9kb25lX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGNiMSA9IHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAxKQorICAgICAgICBjYjIgPSBzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMikKKyAgICAgICAgY2IzID0gc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDMpCisKKyAgICAgICAgIyBBZGQgb25lIGNiMSBhbmQgb25lIGNiMi4KKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjEpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IyKQorCisgICAgICAgICMgT25lIGluc3RhbmNlIG9mIGNiMiByZW1vdmVkLiBOb3cgdGhlcmUncyBvbmx5IG9uZSBjYjEuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjIpLCAxKQorCisgICAgICAgICMgTmV2ZXIgaGFkIGFueSBjYjMgaW4gdGhlcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjMpLCAwKQorCisgICAgICAgICMgQWZ0ZXIgdGhpcyB0aGVyZSB3aWxsIGJlIDYgaW5zdGFuY2VzIG9mIGNiMSBhbmQgb25lIG9mIGNiMi4KKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjEpCisKKyAgICAgICAgIyBSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBjYjEuIE9uZSBjYjIgcmVtYWlucy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiMSksIDYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFtdKQorICAgICAgICBmLnNldF9yZXN1bHQoJ2ZvbycpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAnZm9vJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE0NTc3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkKQEAgLTAsMCArMSw4NTggQEAKKyIiIlRlc3RzIGZvciBsb2NrLnB5IiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworaW1wb3J0IHJlCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitTVFJfUkdYX1JFUFIgPSAoCisgICAgcidePCg/UDxjbGFzcz4uKj8pIG9iamVjdCBhdCAoP1A8YWRkcmVzcz4uKj8pJworICAgIHInXFsoP1A8ZXh0cmFzPicKKyAgICByJyhzZXR8dW5zZXR8bG9ja2VkfHVubG9ja2VkKSgsdmFsdWU6XGQpPygsd2FpdGVyczpcZCspPycKKyAgICByJylcXT5cWicKKykKK1JHWF9SRVBSID0gcmUuY29tcGlsZShTVFJfUkdYX1JFUFIpCisKKworY2xhc3MgTG9ja1Rlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9jay5fbG9vcCwgbG9vcCkKKworICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9jay5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobG9jaykuZW5kc3dpdGgoJ1t1bmxvY2tlZF0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGxvY2spKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobG9jaykuZW5kc3dpdGgoJ1tsb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihsb2NrKSkpCisKKyAgICBkZWYgdGVzdF9sb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmUoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHQzID0gYXN5bmNpby5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpKQorCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2sobG9jay5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHRhc2suY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2suX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfcmFjZShzZWxmKToKKyAgICAgICAgIyBTZXZlcmFsIHRhc2tzOgorICAgICAgICAjIC0gQSBhY3F1aXJlcyB0aGUgbG9jaworICAgICAgICAjIC0gQiBpcyBibG9ja2VkIGluIGFxY3VpcmUoKQorICAgICAgICAjIC0gQyBpcyBibG9ja2VkIGluIGFxY3VpcmUoKQorICAgICAgICAjCisgICAgICAgICMgTm93LCBjb25jdXJyZW50bHk6CisgICAgICAgICMgLSBCIGlzIGNhbmNlbGxlZAorICAgICAgICAjIC0gQSByZWxlYXNlcyB0aGUgbG9jaworICAgICAgICAjCisgICAgICAgICMgSWYgQidzIHdhaXRlciBpcyBtYXJrZWQgY2FuY2VsbGVkIGJ1dCBub3QgeWV0IHJlbW92ZWQgZnJvbQorICAgICAgICAjIF93YWl0ZXJzLCBBJ3MgcmVsZWFzZSgpIGNhbGwgd2lsbCBjcmFzaCB3aGVuIHRyeWluZyB0byBzZXQKKyAgICAgICAgIyBCJ3Mgd2FpdGVyOyBpbnN0ZWFkLCBpdCBzaG91bGQgbW92ZSBvbiB0byBDJ3Mgd2FpdGVyLgorCisgICAgICAgICMgU2V0dXA6IEEgaGFzIHRoZSBsb2NrLCBiIGFuZCBjIGFyZSB3YWl0aW5nLgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbG9ja2l0KG5hbWUsIGJsb2NrZXIpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGJsb2NrZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYmxvY2tlcgorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgICAgIGZhID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhID0gYXN5bmNpby5UYXNrKGxvY2tpdCgnQScsIGZhKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKyAgICAgICAgdGIgPSBhc3luY2lvLlRhc2sobG9ja2l0KCdCJywgTm9uZSksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9jay5fd2FpdGVycyksIDEpCisgICAgICAgIHRjID0gYXN5bmNpby5UYXNrKGxvY2tpdCgnQycsIE5vbmUpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvY2suX3dhaXRlcnMpLCAyKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSByYWNlIGFuZCBjaGVjay4KKyAgICAgICAgIyBXaXRob3V0IHRoZSBmaXggdGhpcyBmYWlsZWQgYXQgdGhlIGxhc3QgYXNzZXJ0LgorICAgICAgICBmYS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRiLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLl93YWl0ZXJzWzBdLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGIuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Yy5kb25lKCkpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vdF9hY3F1aXJlZChzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxvY2sucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShsb2NrLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2NhbnRfcmV1c2Uoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBsb2NrKQorCisgICAgICAgICMgVGhpcyBzcGVsbHMgInlpZWxkIGZyb20gbG9jayIgb3V0c2lkZSBhIGdlbmVyYXRvci4KKyAgICAgICAgY20gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKQorICAgICAgICB3aXRoIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBjbToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbm9feWllbGQoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBsb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIGlzIG5vdCByYWlzZWQgaW4gd2l0aCBleHByZXNzaW9uJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHN0cihlcnIpLAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworCitjbGFzcyBFdmVudFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhldi5fbG9vcCwgbG9vcCkKKworICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhldi5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihldikuZW5kc3dpdGgoJ1t1bnNldF0+JykpCisgICAgICAgIG1hdGNoID0gUkdYX1JFUFIubWF0Y2gocmVwcihldikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0Y2guZ3JvdXAoJ2V4dHJhcycpLCAndW5zZXQnKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGV2KS5lbmRzd2l0aCgnW3NldF0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGV2KSkpCisKKyAgICAgICAgZXYuX3dhaXRlcnMuYXBwZW5kKG1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MScgaW4gcmVwcihldikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGV2KSkpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMywgMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9vbl9zZXQoc2VsZik6CisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXYuc2V0KCkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGV2LndhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgd2FpdCA9IGFzeW5jaW8uVGFzayhldi53YWl0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHdhaXQuY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB3YWl0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2Ll93YWl0ZXJzKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfd2l0aF93YWl0ZXJzKHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGV2Ll93YWl0ZXJzKSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oZXYuX3dhaXRlcnMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKworY2xhc3MgQ29uZGl0aW9uVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSBtb2NrLk1vY2soKQorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbmQuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbmQuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpKQorICAgICAgICBjb25kLm5vdGlmeSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLm5vdGlmeSgyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDJdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9jYW5jZWwoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKworICAgICAgICB3YWl0ID0gYXN5bmNpby5UYXNrKGNvbmQud2FpdCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3YWl0LmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLl93YWl0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvbmQud2FpdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3Ioc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgZGVmIHByZWRpY2F0ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHByZXN1bHQKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdF9mb3IocHJlZGljYXRlKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBjb25kLm5vdGlmeSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgcHJlc3VsdCA9IFRydWUKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3JfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgcHJlZGljYXRlIGNhbiByZXR1cm4gdHJ1ZSBpbW1lZGlhdGVseQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQud2FpdF9mb3IobGFtYmRhOiBbMSwgMiwgM10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGNvbmQud2FpdF9mb3IobGFtYmRhOiBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnkoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gYXN5bmNpby5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoMSkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoMSkKKyAgICAgICAgY29uZC5ub3RpZnkoMjA0OCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeV9hbGwoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeV91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfYWxsX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb25kLm5vdGlmeV9hbGwpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndW5sb2NrZWQnIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xvY2tlZCcgaW4gcmVwcihjb25kKSkKKworICAgICAgICBjb25kLl93YWl0ZXJzLmFwcGVuZChtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgICAgICBjb25kLl93YWl0ZXJzLmFwcGVuZChtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjInIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9jb25kKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gY29uZCkKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9jb25kKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX25vX3lpZWxkKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjb25kOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIGlzIG5vdCByYWlzZWQgaW4gd2l0aCBleHByZXNzaW9uJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHN0cihlcnIpLAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2xvY2soc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb2NrLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydElzKGNvbmQuX2xvY2ssIGxvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgbG9jay5fbG9vcCkKKworICAgIGRlZiB0ZXN0X2FtYmlndW91c19sb29wcyhzZWxmKToKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBhc3luY2lvLkNvbmRpdGlvbihsb2NrLCBsb29wPWxvb3ApCisKKworY2xhc3MgU2VtYXBob3JlVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSBtb2NrLk1vY2soKQorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VtLl9sb29wLCBsb29wKQorCisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VtLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9pbml0aWFsX3ZhbHVlX3plcm8oc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKDAsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHNlbSkuZW5kc3dpdGgoJ1t1bmxvY2tlZCx2YWx1ZToxXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoc2VtKSkpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzZW0pLmVuZHN3aXRoKCdbbG9ja2VkXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzJyBub3QgaW4gcmVwcihzZW0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgICAgICBzZW0uX3dhaXRlcnMuYXBwZW5kKG1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MScgaW4gcmVwcihzZW0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgICAgICBzZW0uX3dhaXRlcnMuYXBwZW5kKG1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MicgaW4gcmVwcihzZW0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgIGRlZiB0ZXN0X3NlbWFwaG9yZShzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VtLl92YWx1ZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHNlbSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9zZW1hcGhvcmVfdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFzeW5jaW8uU2VtYXBob3JlLCAtMSkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmUoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKDMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgyKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjNChyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDQpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDMgPSBhc3luY2lvLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHNlbS5fd2FpdGVycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKworICAgICAgICB0NCA9IGFzeW5jaW8uVGFzayhjNChyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHNlbS5fd2FpdGVycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ0LmRvbmUoKSkKKworICAgICAgICAjIGNsZWFudXAgbG9ja2VkIHNlbWFwaG9yZQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodDQpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKworICAgICAgICBhY3F1aXJlID0gYXN5bmNpby5UYXNrKHNlbS5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGFjcXVpcmUuY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBhY3F1aXJlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5fd2FpdGVycykKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm90X2FjcXVpcmVkKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLkJvdW5kZWRTZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VtLnJlbGVhc2UpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vX3dhaXRlcnMoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUoMiwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZW0pCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzZW0uX3ZhbHVlKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX25vX3lpZWxkKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgyLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBpcyBub3QgcmFpc2VkIGluIHdpdGggZXhwcmVzc2lvbicpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Byb2FjdG9yX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Byb2FjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzUzNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNDkyIEBACisiIiJUZXN0cyBmb3IgcHJvYWN0b3JfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgQmFzZVByb2FjdG9yRXZlbnRMb29wCitmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydAorZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5wcm9hY3RvciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IgPSBzZWxmLnByb2FjdG9yCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSBtb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHRyKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19kYXRhKHNlbGYpOgorICAgICAgICByZXMgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzLnNldF9yZXN1bHQoYidkYXRhJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci5fcmVhZF9mdXQgPSByZXMKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZyhyZXMpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfbm9fZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdHIuX2xvb3BfcmVhZGluZywgcmVzKQorCisgICAgICAgIHRyLmNsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfZnV0ID0gcmVzCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcocmVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvbkFib3J0ZWRFcnJvcigpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZF9pc19mYXRhbChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvbkFib3J0ZWRFcnJvcigpCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IEZhbHNlCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19jb25uX3Jlc2V0X2xvc3Qoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IChPU0Vycm9yKCkpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIE5vbmUpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGE9YidkYXRhJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX21vcmUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fbG9vcF93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLlwKKyAgICAgICAgICAgIGFzc2VydF9jYWxsZWRfd2l0aCh0ci5fbG9vcF93cml0aW5nKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8ucHJvYWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nX2VycihzZWxmLCBtX2xvZyk6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3Iuc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICB0ci5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgTm9uZSkKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nX3N0b3Aoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChiJ2RhdGEnKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gZnV0CisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fd3JpdGVfZnV0KQorCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCgxKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gZnV0CisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyhmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl93cml0ZV9mdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5yZXNldF9tb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZV93cml0ZV9mdXQoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9mYXRhbF9lcnJvcihzZWxmLCBtX2xvZ2dpbmcpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZm9yY2VfY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2dnaW5nLmVycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZvcmNlX2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICByZWFkX2Z1dCA9IHRyLl9yZWFkX2Z1dCA9IG1vY2suTW9jaygpCisgICAgICAgIHdyaXRlX2Z1dCA9IHRyLl93cml0ZV9mdXQgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICByZWFkX2Z1dC5jYW5jZWwuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgd3JpdGVfZnV0LmNhbmNlbC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2VfaWRlbXBvdGVudChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3JfMihzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHRyLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suc2h1dGRvd24uY2FsbF9jb3VudCwgMSkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2VvZl93cml0dGVuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0KQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX3dyaXRlX3BpcGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfYnVmZmVyX3dyaXRlX3BpcGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLnJldHVybl92YWx1ZSA9IGYKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0KQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfZHVwbGV4X3BpcGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBmdXR1cmVzID0gW10KKyAgICAgICAgZm9yIG1zZyBpbiBbYidkYXRhMScsIGInZGF0YTInLCBiJ2RhdGEzJywgYidkYXRhNCcsIGInJ106CisgICAgICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBmLnNldF9yZXN1bHQobXNnKQorICAgICAgICAgICAgZnV0dXJlcy5hcHBlbmQoZikKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gZnV0dXJlcworICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGExJykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMicpCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX3BhdXNlZCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMicpCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEzJykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhNCcpCisgICAgICAgIHRyLmNsb3NlKCkKKworCitjbGFzcyBCYXNlUHJvYWN0b3JFdmVudExvb3BUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrID0gbW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc3NvY2ssIHNlbGYuY3NvY2sgPSBtb2NrLk1vY2soKSwgbW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBFdmVudExvb3AoQmFzZVByb2FjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIGRlZiBfc29ja2V0cGFpcihzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuc3NvY2ssIHNlbGYuY3NvY2spCisKKyAgICAgICAgc2VsZi5sb29wID0gRXZlbnRMb29wKHNlbGYucHJvYWN0b3IpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wLCBjbGVhbnVwPUZhbHNlKQorCisgICAgQG1vY2sucGF0Y2gub2JqZWN0KEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgJ19jYWxsX3Nvb24nKQorICAgIEBtb2NrLnBhdGNoLm9iamVjdChCYXNlUHJvYWN0b3JFdmVudExvb3AsICdfc29ja2V0cGFpcicpCisgICAgZGVmIHRlc3RfY3RvcihzZWxmLCBzb2NrZXRwYWlyLCBfY2FsbF9zb29uKToKKyAgICAgICAgc3NvY2ssIGNzb2NrID0gc29ja2V0cGFpci5yZXR1cm5fdmFsdWUgPSAoCisgICAgICAgICAgICBtb2NrLk1vY2soKSwgbW9jay5Nb2NrKCkpCisgICAgICAgIGxvb3AgPSBCYXNlUHJvYWN0b3JFdmVudExvb3Aoc2VsZi5wcm9hY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLl9zc29jaywgc3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcC5fY3NvY2ssIGNzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3AuX2ludGVybmFsX2ZkcywgMSkKKyAgICAgICAgX2NhbGxfc29vbi5hc3NlcnRfY2FsbGVkX3dpdGgobG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcsICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19sb29wPUZhbHNlKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLl9pbnRlcm5hbF9mZHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX2Nzb2NrKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvYWN0b3IuY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Byb2FjdG9yKQorCisgICAgICAgIHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NvY2tfcmVjdihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfcmVjdihzZWxmLnNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCAxMDI0KQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc2VsZi5zb2NrLCAxMjMpCisgICAgICAgIHNlbGYucHJvYWN0b3IuY29ubmVjdC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCAxMjMpCisKKyAgICBkZWYgdGVzdF9zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5hY2NlcHQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaykKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgQmFzZVByb2FjdG9yRXZlbnRMb29wLCBzZWxmLnByb2FjdG9yKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYuc29jaywgYXN5bmNpby5Qcm90b2NvbCgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfc2VsZl9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNzb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9sb29wX3NlbGZfcmVhZGluZ19mdXQoc2VsZik6CisgICAgICAgIGZ1dCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LnJlc3VsdC5jYWxsZWQpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zc29jaywgNDA5NikKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LnJldHVybl92YWx1ZS5hZGRfZG9uZV9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIHRlc3RfbG9vcF9zZWxmX3JlYWRpbmdfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYoKQorICAgICAgICBzZWxmLmNzb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGInXDAnKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHMoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoW10pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXIoc2VsZiwgbV9sb2cpOgorICAgICAgICBwZiA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxfc29vbiA9IHNlbGYubG9vcC5jYWxsX3Nvb24gPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyhwZiwgc2VsZi5zb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbF9zb29uLmNhbGxlZCkKKworICAgICAgICAjIGNhbGxiYWNrCisgICAgICAgIGxvb3AgPSBjYWxsX3Nvb24uY2FsbF9hcmdzWzBdWzBdCisgICAgICAgIGxvb3AoKQorICAgICAgICBzZWxmLnByb2FjdG9yLmFjY2VwdC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrKQorCisgICAgICAgICMgY29ubgorICAgICAgICBmdXQgPSBtb2NrLk1vY2soKQorICAgICAgICBmdXQucmVzdWx0LnJldHVybl92YWx1ZSA9IChtb2NrLk1vY2soKSwgbW9jay5Nb2NrKCkpCisKKyAgICAgICAgbWFrZV90ciA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfdHIuY2FsbGVkKQorCisgICAgICAgICMgZXhjZXB0aW9uCisgICAgICAgIGZ1dC5yZXN1bHQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9jYW5jZWwoc2VsZik6CisgICAgICAgIHBmID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbF9zb29uID0gc2VsZi5sb29wLmNhbGxfc29vbiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nKHBmLCBzZWxmLnNvY2spCisgICAgICAgIGxvb3AgPSBjYWxsX3Nvb24uY2FsbF9hcmdzWzBdWzBdCisKKyAgICAgICAgIyBjYW5jZWxsZWQKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zdG9wX3NlcnZpbmcoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYucHJvYWN0b3IuX3N0b3Bfc2VydmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoc29jaykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNGFjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9xdWV1ZXMucHkKQEAgLTAsMCArMSw0NzYgQEAKKyIiIlRlc3RzIGZvciBxdWV1ZXMucHkiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitjbGFzcyBfUXVldWVUZXN0QmFzZSh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworCitjbGFzcyBRdWV1ZUJhc2ljVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIF90ZXN0X3JlcHJfb3Jfc3RyKHNlbGYsIGZuLCBleHBlY3RfaWQpOgorICAgICAgICAiIiJUZXN0IFF1ZXVlJ3MgcmVwciBvciBzdHIuCisKKyAgICAgICAgZm4gaXMgcmVwciBvciBzdHIuIGV4cGVjdF9pZCBpcyBUcnVlIGlmIHdlIGV4cGVjdCB0aGUgUXVldWUncyBpZCB0bworICAgICAgICBhcHBlYXIgaW4gZm4oUXVldWUoKSkuCisgICAgICAgICIiIgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjIsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbihxKS5zdGFydHN3aXRoKCc8UXVldWUnKSwgZm4ocSkpCisgICAgICAgIGlkX2lzX3ByZXNlbnQgPSBoZXgoaWQocSkpIGluIGZuKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X2lkLCBpZF9pc19wcmVzZW50KQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWRkX2dldHRlcigpOgorICAgICAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorICAgICAgICAgICAgIyBTdGFydCBhIHRhc2sgdGhhdCB3YWl0cyB0byBnZXQuCisgICAgICAgICAgICBhc3luY2lvLlRhc2socS5nZXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgIyBMZXQgaXQgc3RhcnQgd2FpdGluZy4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX2dldHRlcnNbMV0nIGluIGZuKHEpKQorICAgICAgICAgICAgIyByZXN1bWUgcS5nZXQgY29yb3V0aW5lIHRvIGZpbmlzaCBnZW5lcmF0b3IKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgwKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFkZF9nZXR0ZXIoKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFkZF9wdXR0ZXIoKToKKyAgICAgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKG1heHNpemU9MSwgbG9vcD1sb29wKQorICAgICAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgICAgICAjIFN0YXJ0IGEgdGFzayB0aGF0IHdhaXRzIHRvIHB1dC4KKyAgICAgICAgICAgIGFzeW5jaW8uVGFzayhxLnB1dCgyKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgIyBMZXQgaXQgc3RhcnQgd2FpdGluZy4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX3B1dHRlcnNbMV0nIGluIGZuKHEpKQorICAgICAgICAgICAgIyByZXN1bWUgcS5wdXQgY29yb3V0aW5lIHRvIGZpbmlzaCBnZW5lcmF0b3IKKyAgICAgICAgICAgIHEuZ2V0X25vd2FpdCgpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWRkX3B1dHRlcigpKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX3F1ZXVlPVsxXScgaW4gZm4ocSkpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSBtb2NrLk1vY2soKQorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgbG9vcCkKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlcHJfb3Jfc3RyKHJlcHIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVwcl9vcl9zdHIoc3RyLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocS5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfZnVsbChzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocS5mdWxsKCkpCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobWF4c2l6ZT0xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gWzEsIDMsIDJdOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgaXRlbXMgPSBbcS5nZXRfbm93YWl0KCkgZm9yIF8gaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDMsIDJdLCBpdGVtcykKKworICAgIGRlZiB0ZXN0X21heHNpemUoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAyLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKG1heHNpemU9MiwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHEubWF4c2l6ZSkKKyAgICAgICAgaGF2ZV9iZWVuX3B1dCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBwdXR0ZXIoKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoaSkKKyAgICAgICAgICAgICAgICBoYXZlX2JlZW5fcHV0LmFwcGVuZChpKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHQgPSBhc3luY2lvLlRhc2socHV0dGVyKCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPWxvb3ApCisKKyAgICAgICAgICAgICMgVGhlIHB1dHRlciBpcyBibG9ja2VkIGFmdGVyIHB1dHRpbmcgdHdvIGl0ZW1zLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMCwgMV0sIGhhdmVfYmVlbl9wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHEuZ2V0X25vd2FpdCgpKQorCisgICAgICAgICAgICAjIExldCB0aGUgcHV0dGVyIHJlc3VtZSBhbmQgcHV0IGxhc3QgaXRlbS4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFswLCAxLCAyXSwgaGF2ZV9iZWVuX3B1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHEuZ2V0X25vd2FpdCgpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC5yZXN1bHQoKSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMiwgbG9vcC50aW1lKCkpCisKKworY2xhc3MgUXVldWVHZXRUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19nZXQoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHEuZ2V0KCkpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxdWV1ZV9nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCByZXMpCisKKyAgICBkZWYgdGVzdF9nZXRfd2l0aF9wdXR0ZXJzKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZSgxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEuX3B1dHRlcnMuYXBwZW5kKCgyLCB3YWl0ZXIpKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YWl0ZXIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19nZXRfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgIHN0YXJ0ZWQgPSBhc3luY2lvLkV2ZW50KGxvb3A9bG9vcCkKKyAgICAgICAgZmluaXNoZWQgPSBGYWxzZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5pc2hlZAorICAgICAgICAgICAgc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBxLmdldCgpCisgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDAuMDEsIHEucHV0X25vd2FpdCwgMSkKKyAgICAgICAgICAgIHF1ZXVlX2dldF90YXNrID0gYXN5bmNpby5UYXNrKHF1ZXVlX2dldCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0YXJ0ZWQud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmlzaGVkKQorICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBxdWV1ZV9nZXRfdGFzaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmlzaGVkKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX3B1dCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX2dldChzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfZ2V0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uUXVldWVFbXB0eSwgcS5nZXRfbm93YWl0KQorCisgICAgZGVmIHRlc3RfZ2V0X2NhbmNlbGxlZChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDYxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wNQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdF9mb3IocS5nZXQoKSwgMC4wNTEsIGxvb3A9bG9vcCkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBnZXRfdGFzayA9IGFzeW5jaW8uVGFzayhxdWV1ZV9nZXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkgICMgbGV0IHRoZSB0YXNrIHN0YXJ0CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBnZXRfdGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNiwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY2FuY2VsbGVkX3JhY2Uoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhxLmdldCgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdDEuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHEucHV0X25vd2FpdCgnYScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnJlc3VsdCgpLCAnYScpCisKKyAgICBkZWYgdGVzdF9nZXRfd2l0aF93YWl0aW5nX3B1dHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wLCBtYXhzaXplPTEpCisgICAgICAgIGFzeW5jaW8uVGFzayhxLnB1dCgnYScpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgYXN5bmNpby5UYXNrKHEucHV0KCdiJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLmdldCgpKSwgJ2InKQorCisKK2NsYXNzIFF1ZXVlUHV0VGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgIyBObyBtYXhzaXplLCB3b24ndCBibG9jay4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoMSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX3B1dCgpKQorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfcHV0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobWF4c2l6ZT0xLCBsb29wPWxvb3ApCisgICAgICAgIHN0YXJ0ZWQgPSBhc3luY2lvLkV2ZW50KGxvb3A9bG9vcCkKKyAgICAgICAgZmluaXNoZWQgPSBGYWxzZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5pc2hlZAorICAgICAgICAgICAgc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgyKQorICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjAxLCBxLmdldF9ub3dhaXQpCisgICAgICAgICAgICBxdWV1ZV9wdXRfdGFzayA9IGFzeW5jaW8uVGFzayhxdWV1ZV9wdXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBzdGFydGVkLndhaXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5pc2hlZCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcXVldWVfcHV0X3Rhc2sKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5pc2hlZCkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxdWV1ZV9nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX3B1dChzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfcHV0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobWF4c2l6ZT0xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uUXVldWVGdWxsLCBxLnB1dF9ub3dhaXQsIDIpCisKKyAgICBkZWYgdGVzdF9mbG9hdF9tYXhzaXplKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEuMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBxLnB1dF9ub3dhaXQoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlF1ZXVlRnVsbCwgcS5wdXRfbm93YWl0LCAzKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKG1heHNpemU9MS4zLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoMSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxdWV1ZV9wdXQoKSkKKworICAgIGRlZiB0ZXN0X3B1dF9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHEuZ2V0KCkpCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhxdWV1ZV9wdXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcHV0X2NhbmNlbGxlZF9yYWNlKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCwgbWF4c2l6ZT0xKQorCisgICAgICAgIHB1dF9hID0gYXN5bmNpby5UYXNrKHEucHV0KCdhJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwdXRfYiA9IGFzeW5jaW8uVGFzayhxLnB1dCgnYicpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHV0X2MgPSBhc3luY2lvLlRhc2socS5wdXQoJ1gnKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwdXRfYS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHV0X2IuZG9uZSgpKQorCisgICAgICAgIHB1dF9jLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHV0X2MuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0X25vd2FpdCgpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXRfbm93YWl0KCksICdiJykKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHB1dF9iKQorCisgICAgZGVmIHRlc3RfcHV0X3dpdGhfd2FpdGluZ19nZXR0ZXJzKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhxLmdldCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5wdXQoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpLCAnYScpCisKKworY2xhc3MgTGlmb1F1ZXVlVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLkxpZm9RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gWzEsIDMsIDJdOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgaXRlbXMgPSBbcS5nZXRfbm93YWl0KCkgZm9yIF8gaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzIsIDMsIDFdLCBpdGVtcykKKworCitjbGFzcyBQcmlvcml0eVF1ZXVlVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlByaW9yaXR5UXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgaXRlbXMpCisKKworY2xhc3MgSm9pbmFibGVRdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZV91bmRlcmZsb3coc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLkpvaW5hYmxlUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHEudGFza19kb25lKQorCisgICAgZGVmIHRlc3RfdGFza19kb25lKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgYWNjdW11bGF0b3IgPSAwCisKKyAgICAgICAgIyBUd28gd29ya2VycyBnZXQgaXRlbXMgZnJvbSB0aGUgcXVldWUgYW5kIGNhbGwgdGFza19kb25lIGFmdGVyIGVhY2guCisgICAgICAgICMgSm9pbiB0aGUgcXVldWUgYW5kIGFzc2VydCBhbGwgaXRlbXMgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KKyAgICAgICAgcnVubmluZyA9IFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdvcmtlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgYWNjdW11bGF0b3IKKworICAgICAgICAgICAgd2hpbGUgcnVubmluZzoKKyAgICAgICAgICAgICAgICBpdGVtID0geWllbGQgZnJvbSBxLmdldCgpCisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gaXRlbQorICAgICAgICAgICAgICAgIHEudGFza19kb25lKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHRhc2tzID0gW2FzeW5jaW8uVGFzayh3b3JrZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAgICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2UoMildCisKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKyAgICAgICAgICAgIHJldHVybiB0YXNrcworCisgICAgICAgIHRhc2tzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHJhbmdlKDEwMCkpLCBhY2N1bXVsYXRvcikKKworICAgICAgICAjIGNsb3NlIHJ1bm5pbmcgZ2VuZXJhdG9ycworICAgICAgICBydW5uaW5nID0gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHRhc2tzKSk6CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQodGFza3MsIGxvb3A9c2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X2pvaW5fZW1wdHlfcXVldWUoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLkpvaW5hYmxlUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgIyBUZXN0IHRoYXQgYSBxdWV1ZSBqb2luKClzIHN1Y2Nlc3NmdWxseSwgYW5kIGJlZm9yZSBhbnl0aGluZyBlbHNlCisgICAgICAgICMgKGRvbmUgdHdpY2UgZm9yIGluc3VyYW5jZSkuCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBqb2luKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEuam9pbigpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEuam9pbigpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShqb2luKCkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLkpvaW5hYmxlUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5fZm9ybWF0KCksICdtYXhzaXplPTAnKQorCisgICAgICAgIHEuX3VuZmluaXNoZWRfdGFza3MgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5fZm9ybWF0KCksICdtYXhzaXplPTAgdGFza3M9MicpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NlbGVjdG9yX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NlbGVjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjhkYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTczNyBAQAorIiIiVGVzdHMgZm9yIHNlbGVjdG9yX2V2ZW50cy5weSIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBnYworaW1wb3J0IHBwcmludAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IEJhc2VTZWxlY3RvckV2ZW50TG9vcAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JTc2xUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQKKworCitNT0NLX0FOWSA9IG1vY2suQU5ZCisKKworY2xhc3MgVGVzdEJhc2VTZWxlY3RvckV2ZW50TG9vcChCYXNlU2VsZWN0b3JFdmVudExvb3ApOgorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgc2VsZi5fc3NvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLl9jc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisKKworZGVmIGxpc3RfdG9fYnVmZmVyKGw9KCkpOgorICAgIHJldHVybiBieXRlYXJyYXkoKS5qb2luKGwpCisKKworY2xhc3MgQmFzZVNlbGVjdG9yRXZlbnRMb29wVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VsZWN0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNlbGVjdG9yLnNlbGVjdC5yZXR1cm5fdmFsdWUgPSBbXQorICAgICAgICBzZWxmLmxvb3AgPSBUZXN0QmFzZVNlbGVjdG9yRXZlbnRMb29wKHNlbGYuc2VsZWN0b3IpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wLCBjbGVhbnVwPUZhbHNlKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICBtID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChtLCBhc3luY2lvLlByb3RvY29sKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFuc3BvcnQsIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9tYWtlX3NzbF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIG0gPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgIG0sIGFzeW5jaW8uUHJvdG9jb2woKSwgbSwgd2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnNwb3J0LCBfU2VsZWN0b3JTc2xUcmFuc3BvcnQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMuc3NsJywgTm9uZSkKKyAgICBkZWYgdGVzdF9tYWtlX3NzbF90cmFuc3BvcnRfd2l0aG91dF9zc2xfZXJyb3Ioc2VsZik6CisgICAgICAgIG0gPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0KG0sIG0sIG0sIG0pCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgc3NvY2sgPSBzZWxmLmxvb3AuX3Nzb2NrCisgICAgICAgIHNzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisgICAgICAgIGNzb2NrID0gc2VsZi5sb29wLl9jc29jaworICAgICAgICBjc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMQorICAgICAgICByZW1vdmVfcmVhZGVyID0gc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yID0gc2VsZWN0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5pc19jbG9zZWQoKSkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmlzX2Nsb3NlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3NlbGVjdG9yKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX2Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Nzb2NrKQorICAgICAgICBzZWxlY3Rvci5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzc29jay5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBjc29jay5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICByZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCg3KQorCisgICAgICAgICMgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNhbGwgY2xvc2UoKSBtb3JlIHRoYW4gb25jZQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9uIGJsb2NrZWQgd2hlbiB0aGUgbG9vcCBpcyBjbG9zZWQKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5ydW5fZm9yZXZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorICAgICAgICBmZCA9IDAKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLmFkZF9yZWFkZXIsIGZkLCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmxvb3AuYWRkX3dyaXRlciwgZmQsIGNhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfbm9fc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSBOb25lCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc2VsZWN0b3IpCisKKyAgICBkZWYgdGVzdF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3NvY2tldHBhaXIpCisKKyAgICBkZWYgdGVzdF9yZWFkX2Zyb21fc2VsZl90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fcmVhZF9mcm9tX3NlbGYoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRfZnJvbV9zZWxmX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AuX3JlYWRfZnJvbV9zZWxmKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfdG9fc2VsZl90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9jc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl93cml0ZV90b19zZWxmKCkpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBfd3JpdGVfdG9fc2VsZigpIHN3YWxsb3dzIE9TRXJyb3IKKyAgICAgICAgc2VsZi5sb29wLl9jc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYpCisKKyAgICBkZWYgdGVzdF9zb2NrX3JlY3Yoc2VsZik6CisgICAgICAgIHNvY2sgPSB0ZXN0X3V0aWxzLm1vY2tfbm9uYmxvY2tpbmdfc29ja2V0KCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2sucmVjdi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgVHJ1ZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBGYWxzZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIHNlbGYubG9vcC5fc29ja19yZWN2LCBmLCBUcnVlLCBzb2NrLCAxMDI0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgZXJyID0gc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLCBmLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsX25vZGF0YShzZWxmKToKKyAgICAgICAgc29jayA9IHRlc3RfdXRpbHMubW9ja19ub25ibG9ja2luZ19zb2NrZXQoKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX3NlbmRhbGwoc29jaywgYicnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX2NhbmNlbGVkX2Z1dChzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5zZW5kLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfdW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX2ludGVycnVwdGVkKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBJbnRlcnJ1cHRlZEVycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIGVyciA9IHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydElzKGYuZXhjZXB0aW9uKCksIGVycikKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGwoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGIndGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfbm9uZShzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3NvY2tfY29ubmVjdChzZWxmKToKKyAgICAgICAgc29jayA9IHRlc3RfdXRpbHMubW9ja19ub25ibG9ja2luZ19zb2NrZXQoKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdCA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKGYsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpLAorICAgICAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgICMgVHVsaXAgaXNzdWUgIzIwNTogc29ja19jb25uZWN0KCkgbXVzdCB1bnJlZ2lzdGVyIHRoZSBzb2NrZXQgb24KKyAgICAgICAgIyB0aW1lb3V0IGVycm9yCisKKyAgICAgICAgIyBwcmVwYXJlIG1vY2tzCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNvY2suY29ubmVjdC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgICMgZmlyc3QgY2FsbCB0byBzb2NrX2Nvbm5lY3QoKSByZWdpc3RlcnMgdGhlIHNvY2tldAorICAgICAgICBmdXQgPSBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssICgnMTI3LjAuMC4xJywgODApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jb25uZWN0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnV0Ll9jYWxsYmFja3MpLCAxKQorCisgICAgICAgICMgb24gdGltZW91dCwgdGhlIHNvY2tldCBtdXN0IGJlIHVucmVnaXN0ZXJlZAorICAgICAgICBzb2NrLmNvbm5lY3QucmVzZXRfbW9jaygpCisgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGFzeW5jaW8uVGltZW91dEVycm9yKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uVGltZW91dEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV93cml0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdChzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY29ubmVjdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0X2NiX2NhbmNlbGxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3RfY2IoZiwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmdldHNvY2tvcHQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF93cml0ZXIoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgZmQgaXMgcmVnaXN0ZXJlZCBhbmQgdGhlbiB1bnJlZ2lzdGVyZWQKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmNvbm5lY3Quc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc29jay5nZXRzb2Nrb3B0LnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgYWRkcmVzcyA9ICgnMTI3LjAuMC4xJywgODA4MCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIHNvY2ssIGFkZHJlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAsIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXVswXSkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdF9jYihmLCBzb2NrLCBhZGRyZXNzKQorICAgICAgICAjIG5lZWQgdG8gcnVuIHRoZSBldmVudCBsb29wIHRvIGV4ZWN1dGUgX3NvY2tfY29ubmVjdF9kb25lKCkgY2FsbGJhY2sKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0X2NiX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmdldHNvY2tvcHQucmV0dXJuX3ZhbHVlID0gZXJybm8uRUFHQUlOCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBleGNlcHRpb24gaXMgaGFuZGxlZAorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdF9jYihmLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF9jYl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suZ2V0c29ja29wdC5yZXR1cm5fdmFsdWUgPSBlcnJuby5FTk9UQ09OTgorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3RfY2IoZiwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYuZXhjZXB0aW9uKCksIE9TRXJyb3IpCisKKyAgICBkZWYgdGVzdF9zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgc29jayA9IHRlc3RfdXRpbHMubW9ja19ub25ibG9ja2luZ19zb2NrZXQoKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0ID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jayksIHNlbGYubG9vcC5fc29ja19hY2NlcHQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgY29ubiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnJldHVybl92YWx1ZSA9IGNvbm4sICgnMTI3LjAuMC4xJywgMTAwMCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNvbm4sICgnMTI3LjAuMC4xJywgMTAwMCkpLCBmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChGYWxzZSwpLCBjb25uLnNldGJsb2NraW5nLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgRmFsc2UsIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5hY2NlcHQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBUcnVlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0LCBmLCBUcnVlLCBzb2NrKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIGVyciA9IHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhlcnIsIGYuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkuc2lkZV9lZmZlY3QgPSBLZXlFcnJvcgorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdG9ycy5FVkVOVF9SRUFELCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCByLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodykKKworICAgIGRlZiB0ZXN0X2FkZF9yZWFkZXJfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHJlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChyZWFkZXIsIHdyaXRlcikpCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWFkZXIuY2FuY2VsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxlZCkKKyAgICAgICAgZmQsIG1hc2ssIChyLCB3KSA9IHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdG9ycy5FVkVOVF9XUklURSB8IHNlbGVjdG9ycy5FVkVOVF9SRUFELCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCByLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXIsIHcpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyX2V4aXN0aW5nX3dyaXRlcihzZWxmKToKKyAgICAgICAgd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgKE5vbmUsIHdyaXRlcikpCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLCB3KQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3JlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAoTm9uZSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcmVhZGVyX3JlYWRfd3JpdGUoc2VsZik6CisgICAgICAgIHJlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCB8IHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgIChyZWFkZXIsIHdyaXRlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci51bnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCB3cml0ZXIpKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9yZWFkZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgZGVmIHRlc3RfYWRkX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHcuX2NhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfYWRkX3dyaXRlcl9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVyLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHcuX2NhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dyaXRlcl9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICByZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIChyZWFkZXIsIE5vbmUpKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKDEpKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfcmVhZChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgcmVhZGVyLl9jYW5jZWxsZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cygKKyAgICAgICAgICAgIFsoc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCBOb25lKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aChyZWFkZXIpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2V2ZW50c19yZWFkX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgcmVhZGVyLmNhbmNlbGxlZCA9IFRydWUKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgTm9uZSkpLAorICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKV0pCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfd3JpdGUoc2VsZik6CisgICAgICAgIHdyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdyaXRlci5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSldKQorICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgod3JpdGVyKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfd3JpdGVfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIuY2FuY2VsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cygKKyAgICAgICAgICAgIFsoc2VsZWN0b3JzLlNlbGVjdG9yS2V5KDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCB3cml0ZXIpKSwKKyAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKV0pCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxKQorCisKK2NsYXNzIFNlbGVjdG9yVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSBtb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ci5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyLl9zb2NrLCBzZWxmLnNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHIuX3NvY2tfZmQsIDcpCisKKyAgICBkZWYgdGVzdF9hYm9ydChzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbN10pCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3dyaXRlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9idWZmZXIuZXh0ZW5kKGInMScpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDcsIG1vY2suc2VudGluZWwpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIG1vY2suc2VudGluZWwpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fYnVmZmVyLCBsaXN0X3RvX2J1ZmZlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgICAgICMgc2Vjb25kIGNsb3NlIHNob3VsZCBub3QgcmVtb3ZlIHJlYWRlcgorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXJyb3InKQorICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yKHNlbGYsIG1fZXhjKToKKyAgICAgICAgZXhjID0gT1NFcnJvcigpCisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoZXhjKQorCisgICAgICAgIG1fZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgJ0ZhdGFsIGVycm9yIG9uIHRyYW5zcG9ydFxucHJvdG9jb2w6LipcbnRyYW5zcG9ydDouKicpLAorICAgICAgICAgICAgZXhjX2luZm89KE9TRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChleGMpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIGV4YyA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5fbG9vcCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGV4YykKKworICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXhjKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3NvY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKworCitjbGFzcyBTZWxlY3RvclNvY2tldFRyYW5zcG9ydFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gbW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29ja19mZCA9IHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZnV0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSg3IGluIHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VvZihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3YucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VvZl9rZWVwX29wZW4oc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInJworICAgICAgICBzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5yZXR1cm5fdmFsdWUgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuY2xvc2UuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2xvZ2dpbmcuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3RyeWFnYWluKHNlbGYsIG1fZXhjKToKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2Fpbl9pbnRlcnJ1cHRlZChzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gSW50ZXJydXB0ZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2xvZ2dpbmcuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2Nvbm5fcmVzZXQoc2VsZiwgbV9leGMpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZSA9IG1vY2suTW9jaygpCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgQG1vY2sucGF0Y2goJ2xvZ2dpbmcuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VycihzZWxmLCBtX2V4Yyk6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCByZWFkIGVycm9yIG9uIHNvY2tldCB0cmFuc3BvcnQnKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlYXJyYXkoYidkYXRhJykpICAjIEhhc24ndCBiZWVuIG11dGF0ZWQuCisKKyAgICBkZWYgdGVzdF93cml0ZV9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGExJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YTInKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbF9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ3RhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlYXJyYXkoYidkYXRhJykpICAjIEhhc24ndCBiZWVuIG11dGF0ZWQuCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGInZGF0YScpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsX25vbmUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIHNvY2tldCB0cmFuc3BvcnQnKQorICAgICAgICB0cmFuc3BvcnQuX2Nvbm5fbG9zdCA9IDEKKworICAgICAgICBzZWxmLnNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHJhbnNwb3J0LndyaXRlLCAnc3RyJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgIyBUaGlzIGlzIGFuIGludGVybmFsIGVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3BhcnRpYWwoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ3RhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3BhcnRpYWxfbm9uZShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhMWRhdGEyJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIHNvY2tldCB0cmFuc3BvcnQnKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9leGNlcHRpb25fYW5kX2Nsb3NlKHNlbGYsIG1fbG9nKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgcmVtb3ZlX3dyaXRlciA9IHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICByZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2tfZmQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bi5hc3NlcnRfY2FsbGVkX3dpdGgoc29ja2V0LlNIVVRfV1IpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxfY291bnQsIDEpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgbGlzdF90b19idWZmZXIoW2InZGF0YSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9lb2YpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBsYW1iZGEgXzogNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci5jbG9zZSgpCisKKworQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorY2xhc3MgU2VsZWN0b3JTc2xUcmFuc3BvcnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IG1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKyAgICAgICAgc2VsZi5zc2xzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxCisgICAgICAgIHNlbGYuc3NsY29udGV4dCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC53cmFwX3NvY2tldC5yZXR1cm5fdmFsdWUgPSBzZWxmLnNzbHNvY2sKKworICAgIGRlZiBfbWFrZV9vbmUoc2VsZiwgY3JlYXRlX3dhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgc2VsZi5zb2NrLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlc2V0X2NvdW50ZXJzKCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0LAorICAgICAgICAgICAgd2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2UuY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9yZWFkZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV93cml0ZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoMSwgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9vbl9oYW5kc2hha2VfZXhjKHNlbGYpOgorICAgICAgICBleGMgPSBWYWx1ZUVycm9yKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBzZWxmLnNzbGNvbnRleHQsIHdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB3YWl0ZXIuZXhjZXB0aW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX2Jhc2VfZXhjKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX3dhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBleGMgPSBCYXNlRXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhc2VFeGNlcHRpb24sIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fd2FpdGVyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhleGMsIHRyYW5zcG9ydC5fd2FpdGVyLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMSBpbiBzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdHIucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJ5dGVhcnJheShiJ2RhdGEnKSkgICMgSGFzbid0IGJlZW4gbXV0YXRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkYXRhLCB0cmFuc3BvcnQuX2J1ZmZlcikgICMgSGFzbid0IGJlZW4gaW5jb3Jwb3JhdGVkLgorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdzdHInKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fYnVmZmVyLCBsaXN0X3RvX2J1ZmZlcigpKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidkYXRhJywpLCBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV93cml0ZV93YW50c19yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV93YW50c19yZWFkID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3YucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3ZfY29ubl9yZXNldChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZSA9IG1vY2suTW9jaygpCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3JldHJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHRyYW5zcG9ydC5fc29ja19mZCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gU1NMIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKCksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9ub25lKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YTFkYXRhMiddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YTFkYXRhMiddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3NpbmdfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc3Nsc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nX2VtcHR5X2J1ZmZlcihzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3JldHJ5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRXcml0ZUVycm9yCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3JlYWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCh0cmFuc3BvcnQuX3NvY2tfZmQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBTU0wgdHJhbnNwb3J0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcigpLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3JlYWRfd2FudHNfd3JpdGUoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9yZWFkX3dhbnRzX3dyaXRlKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHIud3JpdGVfZW9mKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbMV0pCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lIG9yIG5vdCBzc2wuSEFTX1NOSSwgJ05vIFNOSSBzdXBwb3J0JykKKyAgICBkZWYgdGVzdF9zZXJ2ZXJfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIF9TZWxlY3RvclNzbFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBzZWxmLnNzbGNvbnRleHQsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC53cmFwX3NvY2tldC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBzZWxmLnNvY2ssIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlLCBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nbG9jYWxob3N0JykKKworCitjbGFzcyBTZWxlY3RvclNzbFdpdGhvdXRTc2xUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMuc3NsJywgTm9uZSkKKyAgICBkZWYgdGVzdF9zc2xfdHJhbnNwb3J0X3JlcXVpcmVzX3NzbF9tb2R1bGUoc2VsZik6CisgICAgICAgIE1vY2sgPSBtb2NrLk1vY2sKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KE1vY2soKSwgTW9jaygpLCBNb2NrKCksIE1vY2soKSkKKworCitjbGFzcyBTZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IG1vY2suTW9jayhzcGVjX3NldD1zb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Zmcm9tLnJldHVybl92YWx1ZSA9IChiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQpKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdmZyb20uc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfZXJyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCByZWFkIGVycm9yIG9uIGRhdGFncmFtIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X29zZXJyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG8oc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc29jay5zZW5kdG8uY2FsbF9hcmdzWzBdLCAoZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYicnLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJ2RhdGEyJywgKCcwLjAuMC4wJywgMTIzNDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSwKKyAgICAgICAgICAgICAoYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSldLAorICAgICAgICAgICAgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnVmZmVyX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZGF0YTIgPSBieXRlYXJyYXkoYidkYXRhMicpCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YTIsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnNwb3J0Ll9idWZmZXJbMV1bMF0sIGJ5dGVzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcl9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhMiA9IG1lbW9yeXZpZXcoYidkYXRhMicpCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YTIsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnNwb3J0Ll9idWZmZXJbMV1bMF0sIGJ5dGVzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfc2VuZHRvX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIGRhdGFncmFtIHRyYW5zcG9ydCcpCisgICAgICAgIHRyYW5zcG9ydC5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyYW5zcG9ydC5fYWRkcmVzcyA9ICgnMTIzJywpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Vycm9yX3JlY2VpdmVkX2Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKworICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCAoJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5lcnJvcl9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fc3RyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdzdHInLCAoKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19jb25uZWN0ZWRfYWRkcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgKCcwLjAuMC4wJywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgdHJhbnNwb3J0LnNlbmR0bywgYidzdHInLCAoJzAuMC4wLjAnLCAyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19jbG9zaW5nKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBhZGRyZXNzPSgxLCkpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYidkYXRhJywgKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc29jay5zZW5kdG8uY2FsbF9hcmdzWzBdLCAoZGF0YSwgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9jbG9zaW5nKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoZGF0YSwgKCkpKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoWyhiJ2RhdGExJywgKCkpLCAoYidkYXRhMicsICgpKV0pCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YTEnLCAoKSksIChiJ2RhdGEyJywgKCkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIGRhdGFncmFtIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9lcnJvcl9yZWNlaXZlZF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCAoJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyLmVycm9yJykKKyAgICBkZWYgdGVzdF9mYXRhbF9lcnJvcl9jb25uZWN0ZWQoc2VsZiwgbV9leGMpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCAoJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgZXJyID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBtX2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICdGYXRhbCBlcnJvciBvbiB0cmFuc3BvcnRcbnByb3RvY29sOi4qXG50cmFuc3BvcnQ6LionKSwKKyAgICAgICAgICAgIGV4Y19pbmZvPShDb25uZWN0aW9uUmVmdXNlZEVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdHJlYW1zLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2EzNzVhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpAQCAtMCwwICsxLDYyOCBAQAorIiIiVGVzdHMgZm9yIHN0cmVhbXMucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgU3RyZWFtUmVhZGVyVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBEQVRBID0gYidsaW5lMVxubGluZTJcbmxpbmUzXG4nCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBqdXN0IGluIGNhc2UgaWYgd2UgaGF2ZSB0cmFuc3BvcnQgY2xvc2UgY2FsbGJhY2tzCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnN0cmVhbXMuZXZlbnRzJykKKyAgICBkZWYgdGVzdF9jdG9yX2dsb2JhbF9sb29wKHNlbGYsIG1fZXZlbnRzKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIoKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0cmVhbS5fbG9vcCwgbV9ldmVudHMuZ2V0X2V2ZW50X2xvb3AucmV0dXJuX3ZhbHVlKQorCisgICAgZGVmIF9iYXNldGVzdF9vcGVuX2Nvbm5lY3Rpb24oc2VsZiwgb3Blbl9jb25uZWN0aW9uX2Z1dCk6CisgICAgICAgIHJlYWRlciwgd3JpdGVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShvcGVuX2Nvbm5lY3Rpb25fZnV0KQorICAgICAgICB3cml0ZXIud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgZiA9IHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidIVFRQLzEuMCAyMDAgT0tcclxuJykKKyAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuZW5kc3dpdGgoYidcclxuXHJcblRlc3QgbWVzc2FnZScpKQorICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKCpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbihjb25uX2Z1dCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9vcGVuX3VuaXhfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3VuaXhfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IGFzeW5jaW8ub3Blbl91bml4X2Nvbm5lY3Rpb24oaHR0cGQuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbihjb25uX2Z1dCkKKworICAgIGRlZiBfYmFzZXRlc3Rfb3Blbl9jb25uZWN0aW9uX25vX2xvb3Bfc3NsKHNlbGYsIG9wZW5fY29ubmVjdGlvbl9mdXQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUob3Blbl9jb25uZWN0aW9uX2Z1dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgd3JpdGVyLndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpCisgICAgICAgIGYgPSByZWFkZXIucmVhZCgpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLmVuZHN3aXRoKGInXHJcblxyXG5UZXN0IG1lc3NhZ2UnKSkKKworICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X29wZW5fY29ubmVjdGlvbl9ub19sb29wX3NzbChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgY29ubl9mdXQgPSBhc3luY2lvLm9wZW5fY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICAqaHR0cGQuYWRkcmVzcywKKyAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpLAorICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9vcGVuX2Nvbm5lY3Rpb25fbm9fbG9vcF9zc2woY29ubl9mdXQpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X29wZW5fdW5peF9jb25uZWN0aW9uX25vX2xvb3Bfc3NsKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3RfdW5peF9zZXJ2ZXIodXNlX3NzbD1UcnVlKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gYXN5bmNpby5vcGVuX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCksCisgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnLAorICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9vcGVuX2Nvbm5lY3Rpb25fbm9fbG9vcF9zc2woY29ubl9mdXQpCisKKyAgICBkZWYgX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9lcnJvcihzZWxmLCBvcGVuX2Nvbm5lY3Rpb25fZnV0KToKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKG9wZW5fY29ubmVjdGlvbl9mdXQpCisgICAgICAgIHdyaXRlci5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KFplcm9EaXZpc2lvbkVycm9yKCkpCisgICAgICAgIGYgPSByZWFkZXIucmVhZCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X29wZW5fY29ubmVjdGlvbl9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgY29ubl9mdXQgPSBhc3luY2lvLm9wZW5fY29ubmVjdGlvbigqaHR0cGQuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9vcGVuX2Nvbm5lY3Rpb25fZXJyb3IoY29ubl9mdXQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3Rfb3Blbl91bml4X2Nvbm5lY3Rpb25fZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgY29ubl9mdXQgPSBhc3luY2lvLm9wZW5fdW5peF9jb25uZWN0aW9uKGh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9vcGVuX2Nvbm5lY3Rpb25fZXJyb3IoY29ubl9mdXQpCisKKyAgICBkZWYgdGVzdF9mZWVkX2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9mZWVkX25vbmVtcHR5X2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkX3plcm8oc2VsZik6CisgICAgICAgICMgUmVhZCB6ZXJvIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWQoMzApLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkRBVEEsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRfbGluZV9icmVha3Moc2VsZik6CisgICAgICAgICMgUmVhZCBieXRlcyB3aXRob3V0IGxpbmUgYnJlYWtzLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmUxJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmUyJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCg1KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTEnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTInLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRfZW9mKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMsIHN0b3AgYXQgZW9mLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkKDEwMjQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZF91bnRpbF9lb2Yoc2VsZik6CisgICAgICAgICMgUmVhZCBhbGwgYnl0ZXMgdW50aWwgZW9mLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkKC0xKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsxXG4nKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInY2h1bmsxXG5jaHVuazInLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGknLCBkYXRhKQorCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZCgyKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICAjIFJlYWQgb25lIGxpbmUuICdyZWFkbGluZScgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBkYXRhCisgICAgICAgICMgdG8gY29tZSBmcm9tICdjYicKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazEgJykKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkbGluZSgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazIgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazMgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidcbiBjaHVuazQnKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rMSBjaHVuazIgY2h1bmszIFxuJywgbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyBjaHVuazQnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2xpbWl0X3dpdGhfZXhpc3RpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBSZWFkIG9uZSBsaW5lLiBUaGUgZGF0YSBpcyBpbiBTdHJlYW1SZWFkZXIncyBidWZmZXIKKyAgICAgICAgIyBiZWZvcmUgdGhlIGV2ZW50IGxvb3AgaXMgcnVuLgorCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbmUxXG5saW5lMlxuJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICAjIFRoZSBidWZmZXIgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbWFpbmluZyBkYXRhIGFmdGVyIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbicsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbmUxJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICAjIE5vIGInXG4nIGF0IHRoZSBlbmQuIFRoZSAnbGltaXQnIGlzIHNldCB0byAzLiBTbyBiZWZvcmUKKyAgICAgICAgIyB3YWl0aW5nIGZvciB0aGUgbmV3IGRhdGEgaW4gYnVmZmVyLCAncmVhZGxpbmUnIHdpbGwgY29uc3VtZQorICAgICAgICAjIHRoZSBlbnRpcmUgYnVmZmVyLCBhbmQgc2luY2UgdGhlIGxlbmd0aCBvZiB0aGUgY29uc3VtZWQgZGF0YQorICAgICAgICAjIGlzIG1vcmUgdGhhbiAzLCBpdCB3aWxsIHJhaXNlIGEgVmFsdWVFcnJvci4gVGhlIGJ1ZmZlciBpcworICAgICAgICAjIGV4cGVjdGVkIHRvIGJlIGVtcHR5IG5vdy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfYXRfZW9mKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uYXRfZW9mKCkpCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ3NvbWUgZGF0YVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uYXRfZW9mKCkpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uYXRfZW9mKCkpCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ3NvbWUgZGF0YVxuJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmVhbS5hdF9lb2YoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2xpbWl0KHNlbGYpOgorICAgICAgICAjIFJlYWQgb25lIGxpbmUuIFN0cmVhbVJlYWRlcnMgYXJlIGZlZCB3aXRoIGRhdGEgYWZ0ZXIKKyAgICAgICAgIyB0aGVpciAncmVhZGxpbmUnIG1ldGhvZHMgYXJlIGNhbGxlZC4KKworICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsaW1pdD03LCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsxJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazInKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rM1xuJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgIyBUaGUgYnVmZmVyIGhhZCBqdXN0IG9uZSBsaW5lIG9mIGRhdGEsIGFuZCBhZnRlciByYWlzaW5nCisgICAgICAgICMgYSBWYWx1ZUVycm9yIGl0IHNob3VsZCBiZSBlbXB0eS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazEnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMlxuJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazNcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidjaHVuazNcbicsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbm9saW1pdF9ub3dhaXQoc2VsZik6CisgICAgICAgICMgQWxsIG5lZWRlZCBkYXRhIGZvciB0aGUgZmlyc3QgJ3JlYWRsaW5lJyBjYWxsIHdpbGwgYmUKKyAgICAgICAgIyBpbiB0aGUgYnVmZmVyLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEFbOjZdKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQVs2Ol0pCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbmxpbmUzXG4nLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidzb21lIGRhdGEnKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInc29tZSBkYXRhJywgbGluZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2VtcHR5X2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBsaW5lKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCg3KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbmwnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInaW5lM1xuJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZVxuJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmVcbicsIGRhdGEpCisKKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oVmFsdWVFcnJvcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV96ZXJvX29yX2xlc3Moc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKHplcm8gb3IgbGVzcykuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGV4YWN0bHkoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRleGFjdGx5KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5KHNlbGYpOgorICAgICAgICAjIFJlYWQgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IGFzeW5jaW8uVGFzayhzdHJlYW0ucmVhZGV4YWN0bHkobiksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkRBVEEgKyBzZWxmLkRBVEEsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGV4YWN0IG51bWJlciBvZiBieXRlcyAoZW9mKS4KKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG4gPSAyICogbGVuKHNlbGYuREFUQSkKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkZXhhY3RseShuKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkluY29tcGxldGVSZWFkRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnBhcnRpYWwsIHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXhwZWN0ZWQsIG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzE4IGJ5dGVzIHJlYWQgb24gYSB0b3RhbCBvZiAzNiBleHBlY3RlZCBieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRleGFjdGx5KDIpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3RyZWFtLmV4Y2VwdGlvbigpKQorCisgICAgICAgIGV4YyA9IFZhbHVlRXJyb3IoKQorICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fd2FpdGVyKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNldF9lcnIoKToKKyAgICAgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJlYWRsaW5lKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0cmVhbS5yZWFkbGluZSgpCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhzZXRfZXJyKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFt0MSwgdDJdLCBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEucmVzdWx0KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2NhbmNlbChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiByZWFkX2FfbGluZSgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzdHJlYW0ucmVhZGxpbmUoKQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2socmVhZF9hX2xpbmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgbGluZSBmYWlscyBpZiBzZXRfZXhjZXB0aW9uKCkgaXNuJ3QgY2FyZWZ1bC4KKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdtZXNzYWdlJykpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0cmVhbS5fd2FpdGVyLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3RhcnRfc2VydmVyKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15U2VydmVyOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5sb29wID0gbG9vcAorCisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfY2xpZW50KHNlbGYsIGNsaWVudF9yZWFkZXIsIGNsaWVudF93cml0ZXIpOgorICAgICAgICAgICAgICAgIGRhdGEgPSB5aWVsZCBmcm9tIGNsaWVudF9yZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGNsaWVudF93cml0ZXIud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgICAgICBzb2NrLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uc3RhcnRfc2VydmVyKHNlbGYuaGFuZGxlX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaz1zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudF9jYWxsYmFjayhzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGNsaWVudF9yZWFkZXIucmVhZGxpbmUoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgICAgICBkZWYgZG9uZSh0YXNrKToKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci53cml0ZSh0YXNrLnJlc3VsdCgpKQorCisgICAgICAgICAgICAgICAgdGFzay5hZGRfZG9uZV9jYWxsYmFjayhkb25lKQorCisgICAgICAgICAgICBkZWYgc3RhcnRfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHNvY2suYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICAgICAgICAgIGFkZHIgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uc3RhcnRfc2VydmVyKHNlbGYuaGFuZGxlX2NsaWVudF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdD1hZGRyWzBdLCBwb3J0PWFkZHJbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkcgorCisgICAgICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbGYuc2VydmVyLndhaXRfY2xvc2VkKCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gTm9uZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY2xpZW50KGFkZHIpOgorICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSB5aWVsZCBmcm9tIGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgICphZGRyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICMgc2VuZCBhIGxpbmUKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShiImhlbGxvIHdvcmxkIVxuIikKKyAgICAgICAgICAgICMgcmVhZCBpdCBiYWNrCisgICAgICAgICAgICBtc2diYWNrID0geWllbGQgZnJvbSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBtc2diYWNrCisKKyAgICAgICAgIyB0ZXN0IHRoZSBzZXJ2ZXIgdmFyaWFudCB3aXRoIGEgY29yb3V0aW5lIGFzIGNsaWVudCBoYW5kbGVyCisgICAgICAgIHNlcnZlciA9IE15U2VydmVyKHNlbGYubG9vcCkKKyAgICAgICAgYWRkciA9IHNlcnZlci5zdGFydCgpCisgICAgICAgIG1zZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGNsaWVudChhZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBiImhlbGxvIHdvcmxkIVxuIikKKworICAgICAgICAjIHRlc3QgdGhlIHNlcnZlciB2YXJpYW50IHdpdGggYSBjYWxsYmFjayBhcyBjbGllbnQgaGFuZGxlcgorICAgICAgICBzZXJ2ZXIgPSBNeVNlcnZlcihzZWxmLmxvb3ApCisgICAgICAgIGFkZHIgPSBzZXJ2ZXIuc3RhcnRfY2FsbGJhY2soKQorICAgICAgICBtc2cgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhjbGllbnQoYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgc2VydmVyLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYiJoZWxsbyB3b3JsZCFcbiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3Rfc3RhcnRfdW5peF9zZXJ2ZXIoc2VsZik6CisKKyAgICAgICAgY2xhc3MgTXlTZXJ2ZXI6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwYXRoKToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AgPSBsb29wCisgICAgICAgICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfY2xpZW50KHNlbGYsIGNsaWVudF9yZWFkZXIsIGNsaWVudF93cml0ZXIpOgorICAgICAgICAgICAgICAgIGRhdGEgPSB5aWVsZCBmcm9tIGNsaWVudF9yZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGNsaWVudF93cml0ZXIud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNpby5zdGFydF91bml4X3NlcnZlcihzZWxmLmhhbmRsZV9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudF9jYWxsYmFjayhzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGNsaWVudF9yZWFkZXIucmVhZGxpbmUoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgICAgICBkZWYgZG9uZSh0YXNrKToKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci53cml0ZSh0YXNrLnJlc3VsdCgpKQorCisgICAgICAgICAgICAgICAgdGFzay5hZGRfZG9uZV9jYWxsYmFjayhkb25lKQorCisgICAgICAgICAgICBkZWYgc3RhcnRfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBhc3luY2lvLnN0YXJ0X3VuaXhfc2VydmVyKHNlbGYuaGFuZGxlX2NsaWVudF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VsZi5zZXJ2ZXIud2FpdF9jbG9zZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjbGllbnQocGF0aCk6CisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHlpZWxkIGZyb20gYXN5bmNpby5vcGVuX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBwYXRoLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICMgc2VuZCBhIGxpbmUKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShiImhlbGxvIHdvcmxkIVxuIikKKyAgICAgICAgICAgICMgcmVhZCBpdCBiYWNrCisgICAgICAgICAgICBtc2diYWNrID0geWllbGQgZnJvbSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBtc2diYWNrCisKKyAgICAgICAgIyB0ZXN0IHRoZSBzZXJ2ZXIgdmFyaWFudCB3aXRoIGEgY29yb3V0aW5lIGFzIGNsaWVudCBoYW5kbGVyCisgICAgICAgIHdpdGggdGVzdF91dGlscy51bml4X3NvY2tldF9wYXRoKCkgYXMgcGF0aDoKKyAgICAgICAgICAgIHNlcnZlciA9IE15U2VydmVyKHNlbGYubG9vcCwgcGF0aCkKKyAgICAgICAgICAgIHNlcnZlci5zdGFydCgpCisgICAgICAgICAgICBtc2cgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhjbGllbnQocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYiJoZWxsbyB3b3JsZCFcbiIpCisKKyAgICAgICAgIyB0ZXN0IHRoZSBzZXJ2ZXIgdmFyaWFudCB3aXRoIGEgY2FsbGJhY2sgYXMgY2xpZW50IGhhbmRsZXIKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnVuaXhfc29ja2V0X3BhdGgoKSBhcyBwYXRoOgorICAgICAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoc2VsZi5sb29wLCBwYXRoKQorICAgICAgICAgICAgc2VydmVyLnN0YXJ0X2NhbGxiYWNrKCkKKyAgICAgICAgICAgIG1zZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGNsaWVudChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgICAgIHNlcnZlci5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBiImhlbGxvIHdvcmxkIVxuIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsICJEb24ndCBoYXZlIHBpcGVzIikKKyAgICBkZWYgdGVzdF9yZWFkX2FsbF9mcm9tX3BpcGVfcmVhZGVyKHNlbGYpOgorICAgICAgICAjIFNlZSBUdWxpcCBpc3N1ZSAxNjguICBUaGlzIHRlc3QgaXMgZGVyaXZlZCBmcm9tIHRoZSBleGFtcGxlCisgICAgICAgICMgc3VicHJvY2Vzc19hdHRhY2hfcmVhZF9waXBlLnB5LCBidXQgd2UgY29uZmlndXJlIHRoZQorICAgICAgICAjIFN0cmVhbVJlYWRlcidzIGxpbWl0IHNvIHRoYXQgdHdpY2UgaXQgaXMgbGVzcyB0aGFuIHRoZSBzaXplCisgICAgICAgICMgb2YgdGhlIGRhdGEgd3JpdHRlci4gIEFsc28gd2UgbXVzdCBleHBsaWNpdGx5IGF0dGFjaCBhIGNoaWxkCisgICAgICAgICMgd2F0Y2hlciB0byB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBjb2RlID0gIiIiXAoraW1wb3J0IG9zLCBzeXMKK2ZkID0gaW50KHN5cy5hcmd2WzFdKQorb3Mud3JpdGUoZmQsIGInZGF0YScpCitvcy5jbG9zZShmZCkKKyIiIgorICAgICAgICByZmQsIHdmZCA9IG9zLnBpcGUoKQorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlLCBzdHIod2ZkKV0KKworICAgICAgICBwaXBlID0gb3BlbihyZmQsICdyYicsIDApCisgICAgICAgIHJlYWRlciA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wLCBsaW1pdD0xKQorICAgICAgICBwcm90b2NvbCA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyUHJvdG9jb2wocmVhZGVyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5jb25uZWN0X3JlYWRfcGlwZShsYW1iZGE6IHByb3RvY29sLCBwaXBlKSkKKworICAgICAgICB3YXRjaGVyID0gYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgd2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcikKKyAgICAgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygqYXJncywgcGFzc19mZHM9e3dmZH0sIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhc3luY2lvLnNldF9jaGlsZF93YXRjaGVyKE5vbmUpCisKKyAgICAgICAgb3MuY2xvc2Uod2ZkKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkZXIucmVhZCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidkYXRhJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3VicHJvY2Vzcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N1YnByb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5ZTFjZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N1YnByb2Nlc3MucHkKQEAgLTAsMCArMSwyMTcgQEAKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc3VicHJvY2VzcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitpbXBvcnQgYXN5bmNpbworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgdW5peF9ldmVudHMKKworIyBQcm9ncmFtIGJsb2NraW5nCitQUk9HUkFNX0JMT0NLRUQgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsICdpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgzNjAwKSddCisKKyMgUHJvZ3JhbSBjb3B5aW5nIGlucHV0IHRvIG91dHB1dAorUFJPR1JBTV9DQVQgPSBbCisgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgJzsnLmpvaW4oKCdpbXBvcnQgc3lzJywKKyAgICAgICAgICAgICAgJ2RhdGEgPSBzeXMuc3RkaW4uYnVmZmVyLnJlYWQoKScsCisgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShkYXRhKScpKV0KKworY2xhc3MgU3VicHJvY2Vzc01peGluOgorCisgICAgZGVmIHRlc3Rfc3RkaW5fc3Rkb3V0KHNlbGYpOgorICAgICAgICBhcmdzID0gUFJPR1JBTV9DQVQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bihkYXRhKToKKyAgICAgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICAjIGZlZWQgZGF0YQorICAgICAgICAgICAgcHJvYy5zdGRpbi53cml0ZShkYXRhKQorICAgICAgICAgICAgeWllbGQgZnJvbSBwcm9jLnN0ZGluLmRyYWluKCkKKyAgICAgICAgICAgIHByb2Muc3RkaW4uY2xvc2UoKQorCisgICAgICAgICAgICAjIGdldCBvdXRwdXQgYW5kIGV4aXRjb2RlCisgICAgICAgICAgICBkYXRhID0geWllbGQgZnJvbSBwcm9jLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgIGV4aXRjb2RlID0geWllbGQgZnJvbSBwcm9jLndhaXQoKQorICAgICAgICAgICAgcmV0dXJuIChleGl0Y29kZSwgZGF0YSkKKworICAgICAgICB0YXNrID0gcnVuKGInc29tZSBkYXRhJykKKyAgICAgICAgdGFzayA9IGFzeW5jaW8ud2FpdF9mb3IodGFzaywgNjAuMCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV4aXRjb2RlLCBzdGRvdXQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ3NvbWUgZGF0YScpCisKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZShzZWxmKToKKyAgICAgICAgYXJncyA9IFBST0dSQU1fQ0FUCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBydW4oZGF0YSk6CisgICAgICAgICAgICBwcm9jID0geWllbGQgZnJvbSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0geWllbGQgZnJvbSBwcm9jLmNvbW11bmljYXRlKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gcHJvYy5yZXR1cm5jb2RlLCBzdGRvdXQKKworICAgICAgICB0YXNrID0gcnVuKGInc29tZSBkYXRhJykKKyAgICAgICAgdGFzayA9IGFzeW5jaW8ud2FpdF9mb3IodGFzaywgNjAuMCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV4aXRjb2RlLCBzdGRvdXQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ3NvbWUgZGF0YScpCisKKyAgICBkZWYgdGVzdF9zaGVsbChzZWxmKToKKyAgICAgICAgY3JlYXRlID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19zaGVsbCgnZXhpdCA3JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICBleGl0Y29kZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDcpCisKKyAgICBkZWYgdGVzdF9zdGFydF9uZXdfc2Vzc2lvbihzZWxmKToKKyAgICAgICAgIyBzdGFydCB0aGUgbmV3IHByb2Nlc3MgaW4gYSBuZXcgc2Vzc2lvbgorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKCdleGl0IDgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgZXhpdGNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRjb2RlLCA4KQorCisgICAgZGVmIHRlc3Rfa2lsbChzZWxmKToKKyAgICAgICAgYXJncyA9IFBST0dSQU1fQkxPQ0tFRAorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoKmFyZ3MsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwcm9jID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjcmVhdGUpCisgICAgICAgIHByb2Mua2lsbCgpCisgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdLSUxMLCByZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3RfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBhcmdzID0gUFJPR1JBTV9CTE9DS0VECisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygqYXJncywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgcHJvYy50ZXJtaW5hdGUoKQorICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLndhaXQoKSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmV0dXJuY29kZSwgaW50KQorICAgICAgICAgICAgIyBleHBlY3QgMSBidXQgc29tZXRpbWVzIGdldCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHVEVSTSwgcmV0dXJuY29kZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsICJEb24ndCBoYXZlIFNJR0hVUCIpCisgICAgZGVmIHRlc3Rfc2VuZF9zaWduYWwoc2VsZik6CisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRpbWU7IHByaW50KCJzbGVlcGluZyIsIGZsdXNoPVRydWUpOyB0aW1lLnNsZWVwKDM2MDApJworICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlXQorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoKmFyZ3MsIGxvb3A9c2VsZi5sb29wLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwcm9jID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjcmVhdGUpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzZW5kX3NpZ25hbChwcm9jKToKKyAgICAgICAgICAgICMgYmFzaWMgc3luY2hyb25pemF0aW9uIHRvIHdhaXQgdW50aWwgdGhlIHByb2dyYW0gaXMgc2xlZXBpbmcKKyAgICAgICAgICAgIGxpbmUgPSB5aWVsZCBmcm9tIHByb2Muc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgYidzbGVlcGluZ1xuJykKKworICAgICAgICAgICAgcHJvYy5zZW5kX3NpZ25hbChzaWduYWwuU0lHSFVQKQorICAgICAgICAgICAgcmV0dXJuY29kZSA9ICh5aWVsZCBmcm9tIHByb2Mud2FpdCgpKQorICAgICAgICAgICAgcmV0dXJuIHJldHVybmNvZGUKKworICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW5kX3NpZ25hbChwcm9jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR0hVUCwgcmV0dXJuY29kZSkKKworICAgIGRlZiBwcmVwYXJlX2Jyb2tlbl9waXBlX3Rlc3Qoc2VsZik6CisgICAgICAgICMgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBmZWVkIHRoZSB3aG9sZSBwaXBlIGJ1ZmZlcgorICAgICAgICBsYXJnZV9kYXRhID0gYid4JyAqIHN1cHBvcnQuUElQRV9NQVhfU0laRQorCisgICAgICAgICMgdGhlIHByb2dyYW0gZW5kcyBiZWZvcmUgdGhlIHN0ZGluIGNhbiBiZSBmZWVkZWQKKyAgICAgICAgY3JlYXRlID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwcm9jID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjcmVhdGUpCisgICAgICAgIHJldHVybiAocHJvYywgbGFyZ2VfZGF0YSkKKworICAgIGRlZiB0ZXN0X3N0ZGluX2Jyb2tlbl9waXBlKHNlbGYpOgorICAgICAgICBwcm9jLCBsYXJnZV9kYXRhID0gc2VsZi5wcmVwYXJlX2Jyb2tlbl9waXBlX3Rlc3QoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd3JpdGVfc3RkaW4ocHJvYywgZGF0YSk6CisgICAgICAgICAgICBwcm9jLnN0ZGluLndyaXRlKGRhdGEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHByb2Muc3RkaW4uZHJhaW4oKQorCisgICAgICAgIGNvcm8gPSB3cml0ZV9zdGRpbihwcm9jLCBsYXJnZV9kYXRhKQorICAgICAgICAjIGRyYWluKCkgbXVzdCByYWlzZSBCcm9rZW5QaXBlRXJyb3Igb3IgQ29ubmVjdGlvblJlc2V0RXJyb3IKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfaWdub3JlX2Jyb2tlbl9waXBlKHNlbGYpOgorICAgICAgICBwcm9jLCBsYXJnZV9kYXRhID0gc2VsZi5wcmVwYXJlX2Jyb2tlbl9waXBlX3Rlc3QoKQorCisgICAgICAgICMgY29tbXVuaWNhdGUoKSBtdXN0IGlnbm9yZSBCcm9rZW5QaXBlRXJyb3Igd2hlbiBmZWVkaW5nIHN0ZGluCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLmNvbW11bmljYXRlKGxhcmdlX2RhdGEpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgICMgVW5peAorICAgIGNsYXNzIFN1YnByb2Nlc3NXYXRjaGVyTWl4aW4oU3VicHJvY2Vzc01peGluKToKKworICAgICAgICBXYXRjaGVyID0gTm9uZQorCisgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKyAgICAgICAgICAgIHNlbGYubG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGV2ZW50IGxvb3AgaXMgcGFzc2VkIGV4cGxpY2l0bHkgaW4gYXN5bmNpbworICAgICAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICAgICAgICAgIHdhdGNoZXIgPSBzZWxmLldhdGNoZXIoKQorICAgICAgICAgICAgd2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBwb2xpY3kuc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcikKKworICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICBwb2xpY3kgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgICAgICAgICBwb2xpY3kuc2V0X2NoaWxkX3dhdGNoZXIoTm9uZSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGNsYXNzIFN1YnByb2Nlc3NTYWZlV2F0Y2hlclRlc3RzKFN1YnByb2Nlc3NXYXRjaGVyTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgV2F0Y2hlciA9IHVuaXhfZXZlbnRzLlNhZmVDaGlsZFdhdGNoZXIKKworICAgIGNsYXNzIFN1YnByb2Nlc3NGYXN0V2F0Y2hlclRlc3RzKFN1YnByb2Nlc3NXYXRjaGVyTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgV2F0Y2hlciA9IHVuaXhfZXZlbnRzLkZhc3RDaGlsZFdhdGNoZXIKKworZWxzZToKKyAgICAjIFdpbmRvd3MKKyAgICBjbGFzcyBTdWJwcm9jZXNzUHJvYWN0b3JUZXN0cyhTdWJwcm9jZXNzTWl4aW4sIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKyAgICAgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8uUHJvYWN0b3JFdmVudExvb3AoKQorCisgICAgICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBldmVudCBsb29wIGlzIHBhc3NlZCBleHBsaWNpdGx5IGluIGFzeW5jaW8KKyAgICAgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Rhc2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNWFhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weQpAQCAtMCwwICsxLDE5NzcgQEAKKyIiIlRlc3RzIGZvciB0YXNrcy5weS4iIiIKKworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgY29yb3V0aW5lcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworUFkzNCA9IChzeXMudmVyc2lvbl9pbmZvID49ICgzLCA0KSkKK1BZMzUgPSAoc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNSkpCisKKworQGFzeW5jaW8uY29yb3V0aW5lCitkZWYgY29yb3V0aW5lX2Z1bmN0aW9uKCk6CisgICAgcGFzcworCisKK2RlZiBmb3JtYXRfY29yb3V0aW5lKHF1YWxuYW1lLCBzdGF0ZSwgc3JjLCBzb3VyY2VfdHJhY2ViYWNrLCBnZW5lcmF0b3I9RmFsc2UpOgorICAgIGlmIGdlbmVyYXRvcjoKKyAgICAgICAgc3RhdGUgPSAnJXMnICUgc3RhdGUKKyAgICBlbHNlOgorICAgICAgICBzdGF0ZSA9ICclcywgZGVmaW5lZCcgJSBzdGF0ZQorICAgIGlmIHNvdXJjZV90cmFjZWJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgIGZyYW1lID0gc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgcmV0dXJuICgnY29ybz08JXMoKSAlcyBhdCAlcz4gY3JlYXRlZCBhdCAlczolcycKKyAgICAgICAgICAgICAgICAlIChxdWFsbmFtZSwgc3RhdGUsIHNyYywgZnJhbWVbMF0sIGZyYW1lWzFdKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJ2Nvcm89PCVzKCkgJXMgYXQgJXM+JyAlIChxdWFsbmFtZSwgc3RhdGUsIHNyYykKKworCitjbGFzcyBEdW1teToKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8RHVtbXk+JworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFRhc2tUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2xhc3Moc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2xvb3AsIHNlbGYubG9vcCkKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhub3RtdWNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBsb29wKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FzeW5jX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworICAgICAgICB0ID0gYXN5bmNpby5hc3luYyhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2xvb3AsIHNlbGYubG9vcCkKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgdCA9IGFzeW5jaW8uYXN5bmMobm90bXVjaCgpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgbG9vcCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9hc3luY19mdXR1cmUoc2VsZik6CisgICAgICAgIGZfb3JpZyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX29yaWcuc2V0X3Jlc3VsdCgna28nKQorCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKGZfb3JpZykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgJ2tvJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCBmX29yaWcpCisKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKGZfb3JpZywgbG9vcD1sb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKGZfb3JpZywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgZGVmIHRlc3RfYXN5bmNfdGFzayhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworICAgICAgICB0X29yaWcgPSBhc3luY2lvLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IGFzeW5jaW8uYXN5bmModF9vcmlnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3AobG9vcCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdCA9IGFzeW5jaW8uYXN5bmModF9vcmlnLCBsb29wPWxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICAgICAgdCA9IGFzeW5jaW8uYXN5bmModF9vcmlnLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCB0X29yaWcpCisKKyAgICBkZWYgdGVzdF9hc3luY19uZWl0aGVyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBhc3luY2lvLmFzeW5jKCdvaycpCisKKyAgICBkZWYgdGVzdF90YXNrX3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gJ2FiYycKKworICAgICAgICAjIHRlc3QgY29yb3V0aW5lIGZ1bmN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90bXVjaC5fX25hbWVfXywgJ25vdG11Y2gnKQorICAgICAgICBpZiBQWTM1OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3RtdWNoLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rhc2tUZXN0cy50ZXN0X3Rhc2tfcmVwci48bG9jYWxzPi5ub3RtdWNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3RtdWNoLl9fbW9kdWxlX18sIF9fbmFtZV9fKQorCisgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8gPSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2Uobm90bXVjaCkKKyAgICAgICAgc3JjID0gIiVzOiVzIiAlIChmaWxlbmFtZSwgbGluZW5vKQorCisgICAgICAgICMgdGVzdCBjb3JvdXRpbmUgb2JqZWN0CisgICAgICAgIGdlbiA9IG5vdG11Y2goKQorICAgICAgICBpZiBjb3JvdXRpbmVzLl9ERUJVRyBvciBQWTM1OgorICAgICAgICAgICAgY29yb19xdWFsbmFtZSA9ICdUYXNrVGVzdHMudGVzdF90YXNrX3JlcHIuPGxvY2Fscz4ubm90bXVjaCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvcm9fcXVhbG5hbWUgPSAnbm90bXVjaCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW4uX19uYW1lX18sICdub3RtdWNoJykKKyAgICAgICAgaWYgUFkzNToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yb19xdWFsbmFtZSkKKworICAgICAgICAjIHRlc3QgcGVuZGluZyBUYXNrCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdC5hZGRfZG9uZV9jYWxsYmFjayhEdW1teSgpKQorCisgICAgICAgIGNvcm8gPSBmb3JtYXRfY29yb3V0aW5lKGNvcm9fcXVhbG5hbWUsICdydW5uaW5nJywgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ll9zb3VyY2VfdHJhY2ViYWNrLCBnZW5lcmF0b3I9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8VGFzayBwZW5kaW5nICVzIGNiPVs8RHVtbXk+KCldPicgJSBjb3JvKQorCisgICAgICAgICMgdGVzdCBjYW5jZWxsaW5nIFRhc2sKKyAgICAgICAgdC5jYW5jZWwoKSAgIyBEb2VzIG5vdCB0YWtlIGltbWVkaWF0ZSBlZmZlY3QhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPFRhc2sgY2FuY2VsbGluZyAlcyBjYj1bPER1bW15PigpXT4nICUgY29ybykKKworICAgICAgICAjIHRlc3QgY2FuY2VsbGVkIFRhc2sKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgY29ybyA9IGZvcm1hdF9jb3JvdXRpbmUoY29yb19xdWFsbmFtZSwgJ2RvbmUnLCBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuX3NvdXJjZV90cmFjZWJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPFRhc2sgY2FuY2VsbGVkICVzPicgJSBjb3JvKQorCisgICAgICAgICMgdGVzdCBmaW5pc2hlZCBUYXNrCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBjb3JvID0gZm9ybWF0X2Nvcm91dGluZShjb3JvX3F1YWxuYW1lLCAnZG9uZScsIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5fc291cmNlX3RyYWNlYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8VGFzayBmaW5pc2hlZCAlcyByZXN1bHQ9J2FiYyc+IiAlIGNvcm8pCisKKyAgICBkZWYgdGVzdF90YXNrX3JlcHJfY29yb19kZWNvcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICAjIG5vdG11Y2goKSBmdW5jdGlvbiBkb2Vzbid0IHVzZSB5aWVsZCBmcm9tOiBpdCB3aWxsIGJlIHdyYXBwZWQgYnkKKyAgICAgICAgICAgICMgQGNvcm91dGluZSBkZWNvcmF0b3IKKyAgICAgICAgICAgIHJldHVybiAxMjMKKworICAgICAgICAjIHRlc3QgY29yb3V0aW5lIGZ1bmN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90bXVjaC5fX25hbWVfXywgJ25vdG11Y2gnKQorICAgICAgICBpZiBQWTM1OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3RtdWNoLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rhc2tUZXN0cy50ZXN0X3Rhc2tfcmVwcl9jb3JvX2RlY29yYXRvci48bG9jYWxzPi5ub3RtdWNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3RtdWNoLl9fbW9kdWxlX18sIF9fbmFtZV9fKQorCisgICAgICAgICMgdGVzdCBjb3JvdXRpbmUgb2JqZWN0CisgICAgICAgIGdlbiA9IG5vdG11Y2goKQorICAgICAgICBpZiBjb3JvdXRpbmVzLl9ERUJVRyBvciBQWTM1OgorICAgICAgICAgICAgIyBPbiBQeXRob24gPj0gMy41LCBnZW5lcmF0b3JzIG5vdyBpbmhlcml0IHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgIyBmdW5jdGlvbiwgYXMgZXhwZWN0ZWQsIGFuZCBoYXZlIGEgcXVhbGlmaWVkIG5hbWUgKF9fcXVhbG5hbWVfXworICAgICAgICAgICAgIyBhdHRyaWJ1dGUpLgorICAgICAgICAgICAgY29yb19uYW1lID0gJ25vdG11Y2gnCisgICAgICAgICAgICBjb3JvX3F1YWxuYW1lID0gJ1Rhc2tUZXN0cy50ZXN0X3Rhc2tfcmVwcl9jb3JvX2RlY29yYXRvci48bG9jYWxzPi5ub3RtdWNoJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPbiBQeXRob24gPCAzLjUsIGdlbmVyYXRvcnMgaW5oZXJpdCB0aGUgbmFtZSBvZiB0aGUgY29kZSwgbm90IG9mCisgICAgICAgICAgICAjIHRoZSBmdW5jdGlvbi4gU2VlOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjEyMDUKKyAgICAgICAgICAgIGNvcm9fbmFtZSA9IGNvcm9fcXVhbG5hbWUgPSAnY29ybycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW4uX19uYW1lX18sIGNvcm9fbmFtZSkKKyAgICAgICAgaWYgUFkzNToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fcXVhbG5hbWVfXywgY29yb19xdWFsbmFtZSkKKworICAgICAgICAjIHRlc3QgcmVwcihDb3JvV3JhcHBlcikKKyAgICAgICAgaWYgY29yb3V0aW5lcy5fREVCVUc6CisgICAgICAgICAgICAjIGZvcm1hdCB0aGUgY29yb3V0aW5lIG9iamVjdAorICAgICAgICAgICAgaWYgY29yb3V0aW5lcy5fREVCVUc6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShub3RtdWNoKQorICAgICAgICAgICAgICAgIGZyYW1lID0gZ2VuLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICAgICAgICAgIGNvcm8gPSAoJyVzKCkgcnVubmluZywgZGVmaW5lZCBhdCAlczolcywgY3JlYXRlZCBhdCAlczolcycKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGNvcm9fcXVhbG5hbWUsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVswXSwgZnJhbWVbMV0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb2RlID0gZ2VuLmdpX2NvZGUKKyAgICAgICAgICAgICAgICBjb3JvID0gKCclcygpIHJ1bm5pbmcgYXQgJXM6JXMnCisgICAgICAgICAgICAgICAgICAgICAgICAlIChjb3JvX3F1YWxuYW1lLCBjb2RlLmNvX2ZpbGVuYW1lLCBjb2RlLmNvX2ZpcnN0bGluZW5vKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGdlbiksICc8Q29yb1dyYXBwZXIgJXM+JyAlIGNvcm8pCisKKyAgICAgICAgIyB0ZXN0IHBlbmRpbmcgVGFzaworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKGdlbiwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQuYWRkX2RvbmVfY2FsbGJhY2soRHVtbXkoKSkKKworICAgICAgICAjIGZvcm1hdCB0aGUgY29yb3V0aW5lIG9iamVjdAorICAgICAgICBpZiBjb3JvdXRpbmVzLl9ERUJVRzoKKyAgICAgICAgICAgIHNyYyA9ICclczolcycgJSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2Uobm90bXVjaCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvZGUgPSBnZW4uZ2lfY29kZQorICAgICAgICAgICAgc3JjID0gJyVzOiVzJyAlIChjb2RlLmNvX2ZpbGVuYW1lLCBjb2RlLmNvX2ZpcnN0bGluZW5vKQorICAgICAgICBjb3JvID0gZm9ybWF0X2Nvcm91dGluZShjb3JvX3F1YWxuYW1lLCAncnVubmluZycsIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5fc291cmNlX3RyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPW5vdCBjb3JvdXRpbmVzLl9ERUJVRykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8VGFzayBwZW5kaW5nICVzIGNiPVs8RHVtbXk+KCldPicgJSBjb3JvKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisKKyAgICBkZWYgdGVzdF90YXNrX3JlcHJfd2FpdF9mb3Ioc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2ZvcihmdXQpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dCkKKworICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayh3YWl0X2ZvcihmdXQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcih0YXNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPFRhc2sgLiogd2FpdF9mb3I9JXM+JyAlIHJlLmVzY2FwZShyZXByKGZ1dCkpKQorCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgIGRlZiB0ZXN0X3Rhc2tfYmFzaWNzKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBhID0geWllbGQgZnJvbSBpbm5lcjEoKQorICAgICAgICAgICAgYiA9IHlpZWxkIGZyb20gaW5uZXIyKCkKKyAgICAgICAgICAgIHJldHVybiBhK2IKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyMSgpOgorICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcjIoKToKKyAgICAgICAgICAgIHJldHVybiAxMDAwCisKKyAgICAgICAgdCA9IG91dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpLCAxMDQyKQorCisgICAgZGVmIHRlc3RfY2FuY2VsKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIGxvb3AuY2FsbF9zb29uKHQuY2FuY2VsKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3lpZWxkKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgc3RhcnQgY29ybworICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2lubmVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyBzdGFydCB0YXNrCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2JvdGhfdGFza19hbmRfaW5uZXJfZnV0dXJlKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB0LmNhbmNlbCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF90YXNrX2NhdGNoaW5nKHNlbGYpOgorICAgICAgICBmdXQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MgorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3Rhc2tfaWdub3Jpbmcoc2VsZik6CisgICAgICAgIGZ1dDEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDIKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gZnV0MworICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MSkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIGZ1dDEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQyKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0Mi5jYW5jZWxsZWQoKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MykgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIGZ1dDMuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0My5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2N1cnJlbnRfdGFzayhzZWxmKToKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC5fbXVzdF9jYW5jZWwpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICAgICAgIyBUaGUgc2xlZXAgc2hvdWxkIGJlIGNhbmNlbGxlZCBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxMDAsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0Ll9tdXN0X2NhbmNlbCkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X3N0b3Bfd2hpbGVfcnVuX2luX2NvbXBsZXRlKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4zLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgeCA9IDAKKyAgICAgICAgd2FpdGVycyA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICBub25sb2NhbCB4CisgICAgICAgICAgICB3aGlsZSB4IDwgMTA6CisgICAgICAgICAgICAgICAgd2FpdGVycy5hcHBlbmQoYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9bG9vcCkpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXJzWy0xXQorICAgICAgICAgICAgICAgIHggKz0gMQorICAgICAgICAgICAgICAgIGlmIHggPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgbG9vcC5zdG9wKCkKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1sb29wKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdFdmVudCBsb29wIHN0b3BwZWQgYmVmb3JlIEZ1dHVyZSBjb21wbGV0ZWQuJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMywgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBjbG9zZSBnZW5lcmF0b3JzCisgICAgICAgIGZvciB3IGluIHdhaXRlcnM6CisgICAgICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjIsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgZm9vX3J1bm5pbmcgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZvb19ydW5uaW5nCisgICAgICAgICAgICBmb29fcnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4yLCBsb29wPWxvb3ApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZvb19ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiAnZG9uZScKKworICAgICAgICBmdXQgPSBhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uVGltZW91dEVycm9yKToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdF9mb3IoZnV0LCAwLjEsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICAjIGl0IHNob3VsZCBoYXZlIGJlZW4gY2FuY2VsbGVkIGR1ZSB0byB0aGUgdGltZW91dAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vX3J1bm5pbmcsIEZhbHNlKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3JfYmxvY2tpbmcoc2VsZik6CisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdF9mb3IoY29ybygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ2RvbmUnKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3Jfd2l0aF9nbG9iYWxfbG9vcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMiwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnV0ID0gYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uVGltZW91dEVycm9yKToKKyAgICAgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXRfZm9yKGZ1dCwgMC4wMSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl9yYWNlX2NvbmRpdGlvbihzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwLjEKKyAgICAgICAgICAgIHlpZWxkIDAuMQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICB0YXNrID0gYXN5bmNpby53YWl0X2ZvcihmdXQsIHRpbWVvdXQ9MC4yLCBsb29wPWxvb3ApCisgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjEsIGZ1dC5zZXRfcmVzdWx0LCAib2siKQorICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgIm9rIikKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjE1CisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoW2IsIGFdLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYSwgYl0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgRG9pbmcgaXQgYWdhaW4gc2hvdWxkIHRha2Ugbm8gdGltZSBhbmQgZXhlcmNpc2UgYSBkaWZmZXJlbnQgcGF0aC4KKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF93YWl0X3dpdGhfZ2xvYmFsX2xvb3Aoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxNSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDE1CisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMDE1LCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChbYiwgYV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYSwgYl0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICBhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorCisgICAgZGVmIHRlc3Rfd2FpdF9kdXBsaWNhdGVfY29yb3V0aW5lcyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKHMpOgorICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgYyA9IGNvcm8oJ3Rlc3QnKQorCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soCisgICAgICAgICAgICBhc3luY2lvLndhaXQoW2MsIGMsIGNvcm8oJ3NwYW0nKV0sIGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmLnJlc3VsdCgpIGZvciBmIGluIGRvbmUpLCB7J3Rlc3QnLCAnc3BhbSd9KQorCisgICAgZGVmIHRlc3Rfd2FpdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChzZXQoKSwgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgICMgLTEgaXMgYW4gaW52YWxpZCByZXR1cm5fd2hlbiB2YWx1ZQorICAgICAgICBzbGVlcF9jb3JvID0gYXN5bmNpby5zbGVlcCgxMC4wLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgd2FpdF9jb3JvID0gYXN5bmNpby53YWl0KFtzbGVlcF9jb3JvXSwgcmV0dXJuX3doZW49LTEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB3YWl0X2Nvcm8pCisKKyAgICAgICAgc2xlZXBfY29yby5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93YWl0X2ZpcnN0X2NvbXBsZXRlZChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzaygKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYiwgYV0sIHJldHVybl93aGVuPWFzeW5jaW8uRklSU1RfQ09NUExFVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCksCisgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShiLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9yZWFsbHlfZG9uZShzZWxmKToKKyAgICAgICAgIyB0aGVyZSBpcyBwb3NzaWJpbGl0eSB0aGF0IHNvbWUgdGFza3MgaW4gdGhlIHBlbmRpbmcgbGlzdAorICAgICAgICAjIGJlY2FtZSBkb25lIGJ1dCB0aGVpciBjYWxsYmFja3MgaGF2ZW4ndCBhbGwgYmVlbiBjYWxsZWQgeWV0CisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvMSgpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8yKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGNvcm8xKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGNvcm8yKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKAorICAgICAgICAgICAgYXN5bmNpby53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49YXN5bmNpby5GSVJTVF9DT01QTEVURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YSwgYn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShiLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9maXJzdF9leGNlcHRpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgIyBmaXJzdF9leGNlcHRpb24sIHRhc2sgYWxyZWFkeSBoYXMgZXhjZXB0aW9uCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBleGMoKToKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdlcnInKQorCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soZXhjKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzaygKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYiwgYV0sIHJldHVybl93aGVuPWFzeW5jaW8uRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCksCisgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2ZpcnN0X2V4Y2VwdGlvbl9pbl93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICAjIGZpcnN0X2V4Y2VwdGlvbiwgZXhjZXB0aW9uIGR1cmluZyB3YWl0aW5nCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBleGMoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPWxvb3ApCisgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcignZXJyJykKKworICAgICAgICBiID0gYXN5bmNpby5UYXNrKGV4YygpLCBsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSBhc3luY2lvLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj1hc3luY2lvLkZJUlNUX0VYQ0VQVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3dpdGhfZXhjZXB0aW9uKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xNQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjE1LCBsb29wPWxvb3ApCisgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcigncmVhbGx5JykKKworICAgICAgICBiID0gYXN5bmNpby5UYXNrKHNsZWVwZXIoKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoW2IsIGFdLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkb25lKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KCkpCisgICAgICAgICAgICBlcnJvcnMgPSBzZXQoZiBmb3IgZiBpbiBkb25lIGlmIGYuZXhjZXB0aW9uKCkgaXMgbm90IE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlcnJvcnMpLCAxKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3dpdGhfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjExCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoW2IsIGFdLCB0aW1lb3V0PTAuMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2FdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KFtiXSkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfY29uY3VycmVudF9jb21wbGV0ZShzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICBhc3luY2lvLndhaXQoW2IsIGFdLCB0aW1lb3V0PTAuMSwgbG9vcD1sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldChbYl0pKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKyAgICAgICAgIyBkaXNhYmxlICJzbG93IGNhbGxiYWNrIiB3YXJuaW5nCisgICAgICAgIGxvb3Auc2xvd19jYWxsYmFja19kdXJhdGlvbiA9IDEuMAorICAgICAgICBjb21wbGV0ZWQgPSBzZXQoKQorICAgICAgICB0aW1lX3NoaWZ0ZWQgPSBGYWxzZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgc2xlZXBlcihkdCwgeCk6CisgICAgICAgICAgICBub25sb2NhbCB0aW1lX3NoaWZ0ZWQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcChkdCwgbG9vcD1sb29wKQorICAgICAgICAgICAgY29tcGxldGVkLmFkZCh4KQorICAgICAgICAgICAgaWYgbm90IHRpbWVfc2hpZnRlZCBhbmQgJ2EnIGluIGNvbXBsZXRlZCBhbmQgJ2InIGluIGNvbXBsZXRlZDoKKyAgICAgICAgICAgICAgICB0aW1lX3NoaWZ0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4xNCkKKyAgICAgICAgICAgIHJldHVybiB4CisKKyAgICAgICAgYSA9IHNsZWVwZXIoMC4wMSwgJ2EnKQorICAgICAgICBiID0gc2xlZXBlcigwLjAxLCAnYicpCisgICAgICAgIGMgPSBzbGVlcGVyKDAuMTUsICdjJykKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIGFzeW5jaW8uYXNfY29tcGxldGVkKFtiLCBjLCBhXSwgbG9vcD1sb29wKToKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKCh5aWVsZCBmcm9tIGYpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlcworCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBpbiByZXNbOjJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2InIGluIHJlc1s6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzJdLCAnYycpCisKKyAgICAgICAgIyBEb2luZyBpdCBhZ2FpbiBzaG91bGQgdGFrZSBubyB0aW1lIGFuZCBleGVyY2lzZSBhIGRpZmZlcmVudCBwYXRoLgorICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfd2l0aF90aW1lb3V0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5zbGVlcCgwLjEsICdhJywgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5zbGVlcCgwLjE1LCAnYicsIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIGFzeW5jaW8uYXNfY29tcGxldGVkKFthLCBiXSwgdGltZW91dD0wLjEyLCBsb29wPWxvb3ApOgorICAgICAgICAgICAgICAgIGlmIHZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4wMikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoMSwgdikpCisgICAgICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uVGltZW91dEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoMiwgZXhjKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDIsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMF0sICgxLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1sxXVswXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc1sxXVsxXSwgYXN5bmNpby5UaW1lb3V0RXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMiwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX3dpdGhfdW51c2VkX3RpbWVvdXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5zbGVlcCgwLjAxLCAnYScsIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZm9yIGYgaW4gYXN5bmNpby5hc19jb21wbGV0ZWQoW2FdLCB0aW1lb3V0PTEsIGxvb3A9bG9vcCk6CisgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgJ2EnKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF9yZXZlcnNlX3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMC4wNQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLnNsZWVwKDAuMDUsICdhJywgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5zbGVlcCgwLjEwLCAnYicsIGxvb3A9bG9vcCkKKyAgICAgICAgZnMgPSB7YSwgYn0KKyAgICAgICAgZnV0cyA9IGxpc3QoYXN5bmNpby5hc19jb21wbGV0ZWQoZnMsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZ1dHMpLCAyKQorCisgICAgICAgIHggPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXRzWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4wNSkKKyAgICAgICAgeSA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTAsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX2NvbmN1cnJlbnQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wNQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLnNsZWVwKDAuMDUsICdhJywgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5zbGVlcCgwLjA1LCAnYicsIGxvb3A9bG9vcCkKKyAgICAgICAgZnMgPSB7YSwgYn0KKyAgICAgICAgZnV0cyA9IGxpc3QoYXN5bmNpby5hc19jb21wbGV0ZWQoZnMsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZ1dHMpLCAyKQorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLndhaXQoZnV0cywgbG9vcD1sb29wKQorICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmLnJlc3VsdCgpIGZvciBmIGluIGRvbmUpLCB7J2EnLCAnYid9KQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX2R1cGxpY2F0ZV9jb3JvdXRpbmVzKHNlbGYpOgorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybyhzKToKKyAgICAgICAgICAgIHJldHVybiBzCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBydW5uZXIoKToKKyAgICAgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgICAgICBjID0gY29ybygnaGFtJykKKyAgICAgICAgICAgIGZvciBmIGluIGFzeW5jaW8uYXNfY29tcGxldGVkKFtjLCBjLCBjb3JvKCdzcGFtJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKHlpZWxkIGZyb20gZikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgZnV0ID0gYXN5bmNpby5UYXNrKHJ1bm5lcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIHJlc3VsdCA9IGZ1dC5yZXN1bHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChyZXN1bHQpLCB7J2hhbScsICdzcGFtJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIDIpCisKKyAgICBkZWYgdGVzdF9zbGVlcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjA1CisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoZHQsIGFyZyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoZHQvMiwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKGR0LzIsIGFyZywgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soc2xlZXBlcigwLjEsICd5ZWFoJyksIGxvb3A9bG9vcCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICd5ZWFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfc2xlZXBfY2FuY2VsKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgxMC4wLCAneWVhaCcsIGxvb3A9bG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGhhbmRsZSA9IE5vbmUKKyAgICAgICAgb3JpZ19jYWxsX2xhdGVyID0gbG9vcC5jYWxsX2xhdGVyCisKKyAgICAgICAgZGVmIGNhbGxfbGF0ZXIoZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICAgICBub25sb2NhbCBoYW5kbGUKKyAgICAgICAgICAgIGhhbmRsZSA9IG9yaWdfY2FsbF9sYXRlcihkZWxheSwgY2FsbGJhY2ssICphcmdzKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgICAgIGxvb3AuY2FsbF9sYXRlciA9IGNhbGxfbGF0ZXIKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFuZGxlLl9jYW5jZWxsZWQpCisKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYW5kbGUuX2NhbmNlbGxlZCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2FuY2VsX3NsZWVwaW5nX3Rhc2soc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDUwMDAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwKGR0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcChkdCwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZG9pdCgpOgorICAgICAgICAgICAgc2xlZXBlciA9IGFzeW5jaW8uVGFzayhzbGVlcCg1MDAwKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDAuMSwgc2xlZXBlci5jYW5jZWwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzbGVlcGVyCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NhbmNlbGxlZCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzbGVwdCBpbicKKworICAgICAgICBkb2VyID0gZG9pdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vcC5ydW5fdW50aWxfY29tcGxldGUoZG9lciksICdjYW5jZWxsZWQnKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF90YXNrX2NhbmNlbF93YWl0ZXJfZnV0dXJlKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhjb3JvKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0YXNrLl9mdXRfd2FpdGVyLCBmdXQpCisKKyAgICAgICAgdGFzay5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0YXNrLl9mdXRfd2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF9pbl9jb21wbGV0ZWRfdGFzayhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ2tvJworCisgICAgICAgIGdlbiA9IG5vdG11Y2goKQorICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGdlbiwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2suc2V0X3Jlc3VsdCgnb2snKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0YXNrLl9zdGVwKQorICAgICAgICBnZW4uY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3RlcF9yZXN1bHQoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgeWllbGQgTm9uZQorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgcmV0dXJuICdrbycKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgbm90bXVjaCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF9yZXN1bHRfZnV0dXJlKHNlbGYpOgorICAgICAgICAjIElmIGNvcm91dGluZSByZXR1cm5zIGZ1dHVyZSwgdGFzayB3YWl0cyBvbiB0aGlzIGZ1dHVyZS4KKworICAgICAgICBjbGFzcyBGdXQoYXN5bmNpby5GdXR1cmUpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHNlbGYuY2JfYWRkZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dkcykKKworICAgICAgICAgICAgZGVmIGFkZF9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgICAgICAgICBzZWxmLmNiX2FkZGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHN1cGVyKCkuYWRkX2RvbmVfY2FsbGJhY2soZm4pCisKKyAgICAgICAgZnV0ID0gRnV0KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHJlc3VsdAorICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZnJvbSBmdXQKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHdhaXRfZm9yX2Z1dHVyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuY2JfYWRkZWQpCisKKyAgICAgICAgcmVzID0gb2JqZWN0KCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQocmVzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZXMsIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF93aXRoX2Jhc2VleGNlcHRpb24oc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXV0Y2goKToKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oKQorCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2sobm90bXV0Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhc2VFeGNlcHRpb24sIHRhc2suX3N0ZXApCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2suZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGFzay5leGNlcHRpb24oKSwgQmFzZUV4Y2VwdGlvbikKKworICAgIGRlZiB0ZXN0X2Jhc2VleGNlcHRpb25fZHVyaW5nX2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxMCwgbG9vcD1sb29wKQorCisgICAgICAgIGJhc2VfZXhjID0gQmFzZUV4Y2VwdGlvbigpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdXRjaCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBlcigpCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBiYXNlX2V4YworCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2sobm90bXV0Y2goKSwgbG9vcD1sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisKKyAgICAgICAgdGFzay5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhc2suZG9uZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhc2VFeGNlcHRpb24sIHRlc3RfdXRpbHMucnVuX2JyaWVmbHksIGxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2suZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhc2suY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGFzay5leGNlcHRpb24oKSwgYmFzZV9leGMpCisKKyAgICBkZWYgdGVzdF9pc2Nvcm91dGluZWZ1bmN0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZm4oKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzeW5jaW8uaXNjb3JvdXRpbmVmdW5jdGlvbihmbikpCisKKyAgICAgICAgZGVmIGZuMSgpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3luY2lvLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4xKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZuMigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uaXNjb3JvdXRpbmVmdW5jdGlvbihmbjIpKQorCisgICAgZGVmIHRlc3RfeWllbGRfdnNfeWllbGRfZnJvbShzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkIGZ1dAorCisgICAgICAgIHRhc2sgPSB3YWl0X2Zvcl9mdXR1cmUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfeWllbGRfdnNfeWllbGRfZnJvbV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXRfZm9yX2Z1dHVyZSgpOgorICAgICAgICAgICAgZ2VuID0gY29ybygpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZ2VuCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGdlbi5jbG9zZSgpCisKKyAgICAgICAgdGFzayA9IHdhaXRfZm9yX2Z1dHVyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdGFzaykKKworICAgIGRlZiB0ZXN0X2Nvcm91dGluZV9ub25fZ2VuX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHJldHVybiAndGVzdCcKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5pc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpKQorCisgICAgICAgIGNvcm8gPSBmdW5jKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uaXNjb3JvdXRpbmUoY29ybykpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3RfY29yb3V0aW5lX25vbl9nZW5fZnVuY3Rpb25fcmV0dXJuX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmdW5jKCk6CisgICAgICAgICAgICByZXR1cm4gZnV0CisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdCgndGVzdCcpCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soZnVuYygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soY29ybygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9jdXJyZW50X3Rhc2soc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybyhsb29wKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9bG9vcCkgaXMgdGFzaykKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGNvcm8oc2VsZi5sb29wKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPXNlbGYubG9vcCkpCisKKyAgICBkZWYgdGVzdF9jdXJyZW50X3Rhc2tfd2l0aF9pbnRlcmxlYXZpbmdfdGFza3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgIGZ1dDEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzEobG9vcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPWxvb3ApIGlzIHRhc2sxKQorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPWxvb3ApIGlzIHRhc2sxKQorICAgICAgICAgICAgZnV0Mi5zZXRfcmVzdWx0KFRydWUpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvMihsb29wKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9bG9vcCkgaXMgdGFzazIpCisgICAgICAgICAgICBmdXQxLnNldF9yZXN1bHQoVHJ1ZSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrMikKKworICAgICAgICB0YXNrMSA9IGFzeW5jaW8uVGFzayhjb3JvMShzZWxmLmxvb3ApLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzazIgPSBhc3luY2lvLlRhc2soY29ybzIoc2VsZi5sb29wKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQoKHRhc2sxLCB0YXNrMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPXNlbGYubG9vcCkpCisKKyAgICAjIFNvbWUgdGhvcm91Z2ggdGVzdHMgZm9yIGNhbmNlbGxhdGlvbiBwcm9wYWdhdGlvbiB0aHJvdWdoCisgICAgIyBjb3JvdXRpbmVzLCB0YXNrcyBhbmQgd2FpdCgpLgorCisgICAgZGVmIHRlc3RfeWllbGRfZnV0dXJlX3Bhc3Nlc19jYW5jZWwoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgaW5uZXIoKSBjYW5jZWxzIHdhaXRlci4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHByb29mICs9IDEKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2dvdCBwYXN0IHNsZWVwKCkgaW4gaW5uZXIoKScpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGlubmVyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHByb29mICs9IDEwMCAgIyBFeHBlY3QgdGhpcyBwYXRoLgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxMAorCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3dhaXRfZG9lc19ub3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgbWFrZXMgd2FpdCgpIHJldHVybiBlYXJseSwgbGVhdmVzIGlubmVyKCkKKyAgICAgICAgIyBydW5uaW5nLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBwcm9vZiArPSAxCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIGQsIHAgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChbaW5uZXIoKV0sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZikKKyAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDEpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfcmVzdWx0KHNlbGYpOgorICAgICAgICBpbm5lciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IGFzeW5jaW8uc2hpZWxkKGlubmVyKQorICAgICAgICBpbm5lci5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKG91dGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBpbm5lciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IGFzeW5jaW8uc2hpZWxkKGlubmVyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCdleHBlY3RlZCcpCisgICAgICAgIGlubmVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvdXRlci5leGNlcHRpb24oKSwgZXhjKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSBhc3luY2lvLnNoaWVsZChpbm5lcikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGlubmVyLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ZXIuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfc2hvcnRjdXQoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLnNoaWVsZChmdXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfZWZmZWN0KHNlbGYpOgorICAgICAgICAjIENhbmNlbGxpbmcgb3V0ZXIoKSBkb2VzIG5vdCBhZmZlY3QgaW5uZXIoKS4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2hpZWxkKGlubmVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2dhdGhlcihzZWxmKToKKyAgICAgICAgY2hpbGQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNoaWxkMiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwYXJlbnQgPSBhc3luY2lvLmdhdGhlcihjaGlsZDEsIGNoaWxkMiwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gYXN5bmNpby5zaGllbGQocGFyZW50LCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIG91dGVyLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ZXIuY2FuY2VsbGVkKCkpCisgICAgICAgIGNoaWxkMS5zZXRfcmVzdWx0KDEpCisgICAgICAgIGNoaWxkMi5zZXRfcmVzdWx0KDIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5yZXN1bHQoKSwgWzEsIDJdKQorCisgICAgZGVmIHRlc3RfZ2F0aGVyX3NoaWVsZChzZWxmKToKKyAgICAgICAgY2hpbGQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNoaWxkMiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBpbm5lcjEgPSBhc3luY2lvLnNoaWVsZChjaGlsZDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBpbm5lcjIgPSBhc3luY2lvLnNoaWVsZChjaGlsZDIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwYXJlbnQgPSBhc3luY2lvLmdhdGhlcihpbm5lcjEsIGlubmVyMiwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBwYXJlbnQuY2FuY2VsKCkKKyAgICAgICAgIyBUaGlzIHNob3VsZCBjYW5jZWwgaW5uZXIxIGFuZCBpbm5lcjIgYnV0IGJvdCBjaGlsZDEgYW5kIGNoaWxkMi4KKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYXJlbnQuZXhjZXB0aW9uKCksIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbm5lcjEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbm5lcjIuY2FuY2VsbGVkKCkpCisgICAgICAgIGNoaWxkMS5zZXRfcmVzdWx0KDEpCisgICAgICAgIGNoaWxkMi5zZXRfcmVzdWx0KDIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgIyBhc19jb21wbGV0ZWQoKSBleHBlY3RzIGEgbGlzdCBvZiBmdXR1cmVzLCBub3QgYSBmdXR1cmUgaW5zdGFuY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgYXN5bmNpby5hc19jb21wbGV0ZWQoZnV0LCBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIGNvcm8gPSBjb3JvdXRpbmVfZnVuY3Rpb24oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBhc3luY2lvLmFzX2NvbXBsZXRlZChjb3JvLCBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIGNvcm8uY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd2FpdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgd2FpdCgpIGV4cGVjdHMgYSBsaXN0IG9mIGZ1dHVyZXMsIG5vdCBhIGZ1dHVyZSBpbnN0YW5jZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBhc3luY2lvLndhaXQoZnV0LCBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIGNvcm8gPSBjb3JvdXRpbmVfZnVuY3Rpb24oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBhc3luY2lvLndhaXQoY29ybywgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBjb3JvLmNsb3NlKCkKKworICAgICAgICAjIHdhaXQoKSBleHBlY3RzIGF0IGxlYXN0IGEgZnV0dXJlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBhc3luY2lvLndhaXQoW10sIGxvb3A9c2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X2Nvcm93cmFwcGVyX21vY2tzX2dlbmVyYXRvcihzZWxmKToKKworICAgICAgICBkZWYgY2hlY2soKToKKyAgICAgICAgICAgICMgQSBmdW5jdGlvbiB0aGF0IGFzc2VydHMgdmFyaW91cyB0aGluZ3MuCisgICAgICAgICAgICAjIENhbGxlZCB0d2ljZSwgd2l0aCBkaWZmZXJlbnQgZGVidWcgZmxhZyB2YWx1ZXMuCisKKyAgICAgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgICAgICAjIFRoZSBhY3R1YWwgY29yb3V0aW5lLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZW4uZ2lfcnVubmluZykKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgICAgICAjIEEgY29tcGxldGVkIEZ1dHVyZSB1c2VkIHRvIHJ1biB0aGUgY29yb3V0aW5lLgorICAgICAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgICAgICAgICAjIENhbGwgdGhlIGNvcm91dGluZS4KKyAgICAgICAgICAgIGdlbiA9IGNvcm8oKQorCisgICAgICAgICAgICAjIENoZWNrIHNvbWUgcHJvcGVydGllcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLmlzY29yb3V0aW5lKGdlbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2VuLmdpX2ZyYW1lLCB0eXBlcy5GcmFtZVR5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdlbi5naV9ydW5uaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGdlbi5naV9jb2RlLCB0eXBlcy5Db2RlVHlwZSkKKworICAgICAgICAgICAgIyBSdW4gaXQuCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdlbikKKworICAgICAgICAgICAgIyBUaGUgZnJhbWUgc2hvdWxkIGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGdlbi5naV9mcmFtZSkKKworICAgICAgICAjIFNhdmUgZGVidWcgZmxhZy4KKyAgICAgICAgb2xkX2RlYnVnID0gYXN5bmNpby5jb3JvdXRpbmVzLl9ERUJVRworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFRlc3Qgd2l0aCBkZWJ1ZyBmbGFnIGNsZWFyZWQuCisgICAgICAgICAgICBhc3luY2lvLmNvcm91dGluZXMuX0RFQlVHID0gRmFsc2UKKyAgICAgICAgICAgIGNoZWNrKCkKKworICAgICAgICAgICAgIyBUZXN0IHdpdGggZGVidWcgZmxhZyBzZXQuCisgICAgICAgICAgICBhc3luY2lvLmNvcm91dGluZXMuX0RFQlVHID0gVHJ1ZQorICAgICAgICAgICAgY2hlY2soKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIFJlc3RvcmUgb3JpZ2luYWwgZGVidWcgZmxhZy4KKyAgICAgICAgICAgIGFzeW5jaW8uY29yb3V0aW5lcy5fREVCVUcgPSBvbGRfZGVidWcKKworICAgIGRlZiB0ZXN0X3lpZWxkX2Zyb21fY29yb3dyYXBwZXIoc2VsZik6CisgICAgICAgIG9sZF9kZWJ1ZyA9IGFzeW5jaW8uY29yb3V0aW5lcy5fREVCVUcKKyAgICAgICAgYXN5bmNpby5jb3JvdXRpbmVzLl9ERUJVRyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgdDEoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gdDIoKSkKKworICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgdDIoKToKKyAgICAgICAgICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAgICAgYXN5bmNpby5UYXNrKHQzKGYpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZikKKworICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgdDMoZik6CisgICAgICAgICAgICAgICAgZi5zZXRfcmVzdWx0KCgxLCAyLCAzKSkKKworICAgICAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayh0MSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHZhbCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAoMSwgMiwgMykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhc3luY2lvLmNvcm91dGluZXMuX0RFQlVHID0gb2xkX2RlYnVnCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX2Nvcm93cmFwcGVyX3NlbmQoc2VsZik6CisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGEgPSB5aWVsZAorICAgICAgICAgICAgcmV0dXJuIGEKKworICAgICAgICBkZWYgY2FsbChhcmcpOgorICAgICAgICAgICAgY3cgPSBhc3luY2lvLmNvcm91dGluZXMuQ29yb1dyYXBwZXIoZm9vKCksIGZvbykKKyAgICAgICAgICAgIGN3LnNlbmQoTm9uZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdy5zZW5kKGFyZykKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgICAgICAgICAgICAgIHJldHVybiBleC5hcmdzWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdTdG9wSXRlcmF0aW9uIHdhcyBleHBlY3RlZCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxsKCgxLCAyKSksICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxsKCdzcGFtJyksICdzcGFtJykKKworICAgIGRlZiB0ZXN0X2Nvcm93cmFwcGVyX3dlYWtyZWYoc2VsZik6CisgICAgICAgIHdkID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgZGVmIGZvbygpOiB5aWVsZCBmcm9tIFtdCisgICAgICAgIGN3ID0gYXN5bmNpby5jb3JvdXRpbmVzLkNvcm9XcmFwcGVyKGZvbygpLCBmb28pCisgICAgICAgIHdkWydjdyddID0gY3cgICMgV291bGQgZmFpbCB3aXRob3V0IF9fd2Vha3JlZl9fIHNsb3QuCisgICAgICAgIGN3LmdlbiA9IE5vbmUgICMgU3VwcHJlc3Mgd2FybmluZyBmcm9tIF9fZGVsX18uCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhQWTM0LAorICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkIHB5dGhvbiAzLjQgb3IgbGF0ZXInKQorICAgIGRlZiB0ZXN0X2xvZ19kZXN0cm95ZWRfcGVuZGluZ190YXNrKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGtpbGxfbWUobG9vcCk6CisgICAgICAgICAgICBmdXR1cmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dHVyZQorICAgICAgICAgICAgIyBhdCB0aGlzIHBvaW50LCB0aGUgb25seSByZWZlcmVuY2UgdG8ga2lsbF9tZSgpIHRhc2sgaXMKKyAgICAgICAgICAgICMgdGhlIFRhc2suX3dha2V1cCgpIG1ldGhvZCBpbiBmdXR1cmUuX2NhbGxiYWNrcworICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJjb2RlIG5ldmVyIHJlYWNoZWQiKQorCisgICAgICAgIG1vY2tfaGFuZGxlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLnNldF9leGNlcHRpb25faGFuZGxlcihtb2NrX2hhbmRsZXIpCisKKyAgICAgICAgIyBzY2hlZHVsZSB0aGUgdGFzaworICAgICAgICBjb3JvID0ga2lsbF9tZShzZWxmLmxvb3ApCisgICAgICAgIHRhc2sgPSBhc3luY2lvLmFzeW5jKGNvcm8sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaW8uVGFzay5hbGxfdGFza3MobG9vcD1zZWxmLmxvb3ApLCB7dGFza30pCisKKyAgICAgICAgIyBleGVjdXRlIHRoZSB0YXNrIHNvIGl0IHdhaXRzIGZvciBmdXR1cmUKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fcmVhZHkpLCAwKQorCisgICAgICAgICMgcmVtb3ZlIHRoZSBmdXR1cmUgdXNlZCBpbiBraWxsX21lKCksIGFuZCByZWZlcmVuY2VzIHRvIHRoZSB0YXNrCisgICAgICAgIGRlbCBjb3JvLmdpX2ZyYW1lLmZfbG9jYWxzWydmdXR1cmUnXQorICAgICAgICBjb3JvID0gTm9uZQorICAgICAgICBzb3VyY2VfdHJhY2ViYWNrID0gdGFzay5fc291cmNlX3RyYWNlYmFjaworICAgICAgICB0YXNrID0gTm9uZQorCisgICAgICAgICMgbm8gbW9yZSByZWZlcmVuY2UgdG8ga2lsbF9tZSgpIHRhc2s6IHRoZSB0YXNrIGlzIGRlc3Ryb3llZCBieSB0aGUgR0MKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaW8uVGFzay5hbGxfdGFza3MobG9vcD1zZWxmLmxvb3ApLCBzZXQoKSkKKworICAgICAgICBtb2NrX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYubG9vcCwgeworICAgICAgICAgICAgJ21lc3NhZ2UnOiAnVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIScsCisgICAgICAgICAgICAndGFzayc6IG1vY2suQU5ZLAorICAgICAgICAgICAgJ3NvdXJjZV90cmFjZWJhY2snOiBzb3VyY2VfdHJhY2ViYWNrLAorICAgICAgICB9KQorICAgICAgICBtb2NrX2hhbmRsZXIucmVzZXRfbW9jaygpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5jb3JvdXRpbmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfY29yb3V0aW5lX25ldmVyX3lpZWxkZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBkZWJ1ZyA9IGFzeW5jaW8uY29yb3V0aW5lcy5fREVCVUcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN5bmNpby5jb3JvdXRpbmVzLl9ERUJVRyA9IFRydWUKKyAgICAgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGNvcm9fbm9vcCgpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFzeW5jaW8uY29yb3V0aW5lcy5fREVCVUcgPSBkZWJ1ZworCisgICAgICAgIHRiX2ZpbGVuYW1lID0gX19maWxlX18KKyAgICAgICAgdGJfbGluZW5vID0gc3lzLl9nZXRmcmFtZSgpLmZfbGluZW5vICsgMgorICAgICAgICAjIGNyZWF0ZSBhIGNvcm91dGluZSBvYmplY3QgYnV0IGRvbid0IHVzZSBpdAorICAgICAgICBjb3JvX25vb3AoKQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZy5lcnJvci5jYWxsZWQpCisgICAgICAgIG1lc3NhZ2UgPSBtX2xvZy5lcnJvci5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgZnVuY19maWxlbmFtZSwgZnVuY19saW5lbm8gPSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2UoY29yb19ub29wKQorICAgICAgICByZWdleCA9IChyJ148Q29yb1dyYXBwZXIgJXNcKFwpIC4qIGF0ICVzOiVzLCAuKj4gd2FzIG5ldmVyIHlpZWxkZWQgZnJvbVxuJworICAgICAgICAgICAgICAgICByJ0Nvcm91dGluZSBvYmplY3QgY3JlYXRlZCBhdCBcKG1vc3QgcmVjZW50IGNhbGwgbGFzdFwpOlxuJworICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgIHInICBGaWxlICIlcyIsIGxpbmUgJXMsIGluIHRlc3RfY29yb3V0aW5lX25ldmVyX3lpZWxkZWRcbicKKyAgICAgICAgICAgICAgICAgcicgICAgY29yb19ub29wXChcKSQnCisgICAgICAgICAgICAgICAgICUgKHJlLmVzY2FwZShjb3JvX25vb3AuX19xdWFsbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKGZ1bmNfZmlsZW5hbWUpLCBmdW5jX2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKHRiX2ZpbGVuYW1lKSwgdGJfbGluZW5vKSkKKworICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG1lc3NhZ2UsIHJlLmNvbXBpbGUocmVnZXgsIHJlLkRPVEFMTCkpCisKKyAgICBkZWYgdGVzdF90YXNrX3NvdXJjZV90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGNvcm91dGluZV9mdW5jdGlvbigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgbGluZW5vID0gc3lzLl9nZXRmcmFtZSgpLmZfbGluZW5vIC0gMQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGFzay5fc291cmNlX3RyYWNlYmFjaywgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXNrLl9zb3VyY2VfdHJhY2ViYWNrWy0xXVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZmlsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X3Rhc2tfc291cmNlX3RyYWNlYmFjaycpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKworY2xhc3MgR2F0aGVyVGVzdHNCYXNlOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9uZV9sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5vdGhlcl9sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wLCBjbGVhbnVwPUZhbHNlKQorCisgICAgZGVmIF9ydW5fbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgd2hpbGUgbG9vcC5fcmVhZHk6CisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisKKyAgICBkZWYgX2NoZWNrX3N1Y2Nlc3Moc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBhLCBiLCBjID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjKSwgKiprd2FyZ3MpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGIuc2V0X3Jlc3VsdCgxKQorICAgICAgICBhLnNldF9yZXN1bHQoMikKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYi5jYWxsZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisgICAgICAgIGMuc2V0X3Jlc3VsdCgzKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMiwgMSwgM10pCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19zdWNjZXNzKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcyhyZXR1cm5fZXhjZXB0aW9ucz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdF9leGNlcHRpb25fc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcyhyZXR1cm5fZXhjZXB0aW9ucz1UcnVlKQorCisgICAgZGVmIHRlc3Rfb25lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCwgZSA9IFthc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDUpXQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqc2VsZi53cmFwX2Z1dHVyZXMoYSwgYiwgYywgZCwgZSkpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGV4YyA9IFplcm9EaXZpc2lvbkVycm9yKCkKKyAgICAgICAgYS5zZXRfcmVzdWx0KDEpCisgICAgICAgIGIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0LmV4Y2VwdGlvbigpLCBleGMpCisgICAgICAgICMgRG9lcyBub3RoaW5nCisgICAgICAgIGMuc2V0X3Jlc3VsdCgzKQorICAgICAgICBkLmNhbmNlbCgpCisgICAgICAgIGUuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoKSkKKyAgICAgICAgZS5leGNlcHRpb24oKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQgPSBbYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSg0KV0KKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fZXhjZXB0aW9ucz1UcnVlKQorICAgICAgICBjYiA9IHRlc3RfdXRpbHMuTW9ja0NhbGxiYWNrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGV4YzIgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYy5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgYS5zZXRfcmVzdWx0KDMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfZXhjZXB0aW9uKGV4YzIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMywgMSwgZXhjLCBleGMyXSkKKworICAgIGRlZiB0ZXN0X2Vudl92YXJfZGVidWcoc2VsZik6CisgICAgICAgIGNvZGUgPSAnXG4nLmpvaW4oKAorICAgICAgICAgICAgJ2ltcG9ydCBhc3luY2lvLmNvcm91dGluZXMnLAorICAgICAgICAgICAgJ3ByaW50KGFzeW5jaW8uY29yb3V0aW5lcy5fREVCVUcpJykpCisKKyAgICAgICAgIyBUZXN0IHdpdGggLUUgdG8gbm90IGZhaWwgaWYgdGhlIHVuaXQgdGVzdCB3YXMgcnVuIHdpdGgKKyAgICAgICAgIyBQWVRIT05BU1lOQ0lPREVCVUcgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZworICAgICAgICBzdHMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUUnLCAnLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgYidGYWxzZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgYidGYWxzZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInVHJ1ZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1FJywgJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInRmFsc2UnKQorCisKK2NsYXNzIEZ1dHVyZUdhdGhlclRlc3RzKEdhdGhlclRlc3RzQmFzZSwgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgd3JhcF9mdXR1cmVzKHNlbGYsICpmdXR1cmVzKToKKyAgICAgICAgcmV0dXJuIGZ1dHVyZXMKKworICAgIGRlZiBfY2hlY2tfZW1wdHlfc2VxdWVuY2Uoc2VsZiwgc2VxX29yX2l0ZXIpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChhc3luY2lvLnNldF9ldmVudF9sb29wLCBOb25lKQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqc2VxX29yX2l0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmdXQsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbXSkKKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKnNlcV9vcl9pdGVyLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2VtcHR5X3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZShbXSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2UoKCkpCisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKHNldCgpKQorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZShpdGVyKCIiKSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2hldGVyb2dlbm91c19mdXR1cmVzKHNlbGYpOgorICAgICAgICBmdXQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBmdXQyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBhc3luY2lvLmdhdGhlcihmdXQxLCBmdXQyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgYXN5bmNpby5nYXRoZXIoZnV0MSwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9ob21vZ2Vub3VzX2Z1dHVyZXMoc2VsZik6CisgICAgICAgIGNoaWxkcmVuID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vdGhlcl9sb29wKSBmb3IgaSBpbiByYW5nZSgzKV0KKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKmNoaWxkcmVuKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKmNoaWxkcmVuLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICBkZWYgdGVzdF9vbmVfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoNSldCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGEsIGIsIGMsIGQsIGUpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBiLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LmV4Y2VwdGlvbigpLCBhc3luY2lvLkNhbmNlbGxlZEVycm9yKQorICAgICAgICAjIERvZXMgbm90aGluZworICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgZC5jYW5jZWwoKQorICAgICAgICBlLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCkpCisgICAgICAgIGUuZXhjZXB0aW9uKCkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdF9leGNlcHRpb25fb25lX2NhbmNlbGxhdGlvbihzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCwgZSwgZiA9IFthc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNildCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGEsIGIsIGMsIGQsIGUsIGYsIHJldHVybl9leGNlcHRpb25zPVRydWUpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICB6ZGUgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGIuc2V0X2V4Y2VwdGlvbih6ZGUpCisgICAgICAgIGMuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBkLnNldF9yZXN1bHQoMykKKyAgICAgICAgZS5jYW5jZWwoKQorICAgICAgICBydGUgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmLnNldF9leGNlcHRpb24ocnRlKQorICAgICAgICByZXMgPSBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXNbMl0sIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXNbNF0sIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpCisgICAgICAgIHJlc1syXSA9IHJlc1s0XSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxLCB6ZGUsIE5vbmUsIDMsIE5vbmUsIHJ0ZV0pCisgICAgICAgIGNiLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZ1dCkKKworCitjbGFzcyBDb3JvdXRpbmVHYXRoZXJUZXN0cyhHYXRoZXJUZXN0c0Jhc2UsIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wKQorCisgICAgZGVmIHdyYXBfZnV0dXJlcyhzZWxmLCAqZnV0dXJlcyk6CisgICAgICAgIGNvcm9zID0gW10KKyAgICAgICAgZm9yIGZ1dCBpbiBmdXR1cmVzOgorICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgY29ybyhmdXQ9ZnV0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZnV0KQorICAgICAgICAgICAgY29yb3MuYXBwZW5kKGNvcm8oKSkKKyAgICAgICAgcmV0dXJuIGNvcm9zCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9sb29wX3NlbGVjdGlvbihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICByZXR1cm4gJ2FiYycKKyAgICAgICAgZ2VuMSA9IGNvcm8oKQorICAgICAgICBnZW4yID0gY29ybygpCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGdlbjEsIGdlbjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLm90aGVyX2xvb3AsIGNsZWFudXA9RmFsc2UpCisgICAgICAgIGdlbjMgPSBjb3JvKCkKKyAgICAgICAgZ2VuNCA9IGNvcm8oKQorICAgICAgICBmdXQyID0gYXN5bmNpby5nYXRoZXIoZ2VuMywgZ2VuNCwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Mi5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLm90aGVyX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dDIpCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfY29yb3V0aW5lcyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKHMpOgorICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgYyA9IGNvcm8oJ2FiYycpCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGMsIGMsIGNvcm8oJ2RlZicpLCBjLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbJ2FiYycsICdhYmMnLCAnZGVmJywgJ2FiYyddKQorCisgICAgZGVmIHRlc3RfY2FuY2VsbGF0aW9uX2Jyb2FkY2FzdChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgY2FuY2VscyBhbGwgY2hpbGRyZW4uCisgICAgICAgIHByb29mID0gMAorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBwcm9vZiArPSAxCisKKyAgICAgICAgY2hpbGQxID0gYXN5bmNpby5hc3luYyhpbm5lcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGNoaWxkMiA9IGFzeW5jaW8uYXN5bmMoaW5uZXIoKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBnYXRoZXJlciA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZiwgZ2F0aGVyZXIKKyAgICAgICAgICAgIGdhdGhlcmVyID0gYXN5bmNpby5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZ2F0aGVyZXIKKyAgICAgICAgICAgIHByb29mICs9IDEwMAorCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWwoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYub25lX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2F0aGVyZXIuY2FuY2VsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGlsZDEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGlsZDIuY2FuY2VsbGVkKCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9vZiwgMCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9tYXJraW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBmaXJzdCBsaW5lIG1hcmtlZCAiTWFyayBleGNlcHRpb24gcmV0cmlldmVkLiIKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKGYpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3Nob3VsZCBub3QgYmUgaWdub3JlZCcpCisKKyAgICAgICAgYSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uZ2F0aGVyKGlubmVyKGEpLCBpbm5lcihiKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBhLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBiLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZi5leGNlcHRpb24oKSwgUnVudGltZUVycm9yKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdHJhbnNwb3J0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmUxYjdiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdHJhbnNwb3J0cy5weQpAQCAtMCwwICsxLDkwIEBACisiIiJUZXN0cyBmb3IgdHJhbnNwb3J0cy5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRyYW5zcG9ydHMKKworCitjbGFzcyBUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jdG9yX2V4dHJhX2lzX25vbmUoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uVHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2V4dHJhLCB7fSkKKworICAgIGRlZiB0ZXN0X2dldF9leHRyYV9pbmZvKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlRyYW5zcG9ydCh7J2V4dHJhJzogJ2luZm8nfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW5mbycsIHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnZXh0cmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCd1bmtub3duJykpCisKKyAgICAgICAgZGVmYXVsdCA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZGVmYXVsdCwgdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCd1bmtub3duJywgZGVmYXVsdCkpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlRyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlbGluZXMoW2InbGluZTEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInbGluZTInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYidsaW5lMycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0cmFuc3BvcnQud3JpdGUuY2FsbF9jb3VudCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlLmFzc2VydF9jYWxsZWRfd2l0aChiJ2xpbmUxbGluZTJsaW5lMycpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC53cml0ZSwgJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQud3JpdGVfZW9mKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuY2FuX3dyaXRlX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LnBhdXNlX3JlYWRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5yZXN1bWVfcmVhZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuYWJvcnQpCisKKyAgICBkZWYgdGVzdF9kZ3JhbV9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uRGF0YWdyYW1UcmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmFib3J0KQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc190cmFuc3BvcnRfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlN1YnByb2Nlc3NUcmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfcGlkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5zZW5kX3NpZ25hbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LnRlcm1pbmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmtpbGwpCisKKyAgICBkZWYgdGVzdF9mbG93Y29udHJvbF9taXhpbl9zZXRfd3JpdGVfbGltaXRzKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15VHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKworICAgICAgICAgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNTEyCisKKyAgICAgICAgdHJhbnNwb3J0ID0gTXlUcmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX3Byb3RvY29sID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fcHJvdG9jb2xfcGF1c2VkKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnaGlnaC4qbXVzdCBiZSA+PSBsb3cnKToKKyAgICAgICAgICAgIHRyYW5zcG9ydC5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhoaWdoPTAsIGxvdz0xKQorCisgICAgICAgIHRyYW5zcG9ydC5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhoaWdoPTEwMjQsIGxvdz0xMjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9wcm90b2NvbF9wYXVzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0LmdldF93cml0ZV9idWZmZXJfbGltaXRzKCksICgxMjgsIDEwMjQpKQorCisgICAgICAgIHRyYW5zcG9ydC5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhoaWdoPTI1NiwgbG93PTEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fcHJvdG9jb2xfcGF1c2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpLCAoMTI4LCAyNTYpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTc1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weQpAQCAtMCwwICsxLDE1ODIgQEAKKyIiIlRlc3RzIGZvciB1bml4X2V2ZW50cy5weS4iIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZ2MKK2ltcG9ydCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnVU5JWCBvbmx5JykKKworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBsb2cKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworZnJvbSBhc3luY2lvIGltcG9ydCB1bml4X2V2ZW50cworCisKK01PQ0tfQU5ZID0gbW9jay5BTlkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzaWduYWwsICdTaWduYWxzIGFyZSBub3Qgc3VwcG9ydGVkJykKK2NsYXNzIFNlbGVjdG9yRXZlbnRMb29wU2lnbmFsVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8uU2VsZWN0b3JFdmVudExvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX3NpZ25hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYubG9vcC5fY2hlY2tfc2lnbmFsLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLl9jaGVja19zaWduYWwsIHNpZ25hbC5OU0lHICsgMSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9zaWduYWxfbm9faGFuZGxlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9oYW5kbGVfc2lnbmFsKHNpZ25hbC5OU0lHICsgMSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9zaWduYWxfY2FuY2VsbGVkX2hhbmRsZXIoc2VsZik6CisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShtb2NrLk1vY2soKSwgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPW1vY2suTW9jaygpKQorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5OU0lHICsgMV0gPSBoCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX2hhbmRsZV9zaWduYWwoc2lnbmFsLk5TSUcgKyAxKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfd2l0aChzaWduYWwuTlNJRyArIDEpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9zZXR1cF9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBjYikKKyAgICAgICAgaCA9IHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzLmdldChzaWduYWwuU0lHSFVQKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaCwgYXN5bmNpby5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5fY2FsbGJhY2ssIGNiKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGRlZiBzZXRfd2FrZXVwX2ZkKGZkKToKKyAgICAgICAgICAgIGlmIGZkID09IC0xOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkID0gc2V0X3dha2V1cF9mZAorCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUZBVUxUCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgRXJyLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcjIoc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUlOVkFMCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5TSUdIVVBdID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZ2dpbmcuaW5mby5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsX2NvdW50KQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9pbnN0YWxsX2Vycm9yMyhzZWxmLCBtX2xvZ2dpbmcsIG1fc2lnbmFsKToKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FSU5WQUwKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZ2dpbmcuaW5mby5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsX2NvdW50KQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NpZ25hbC5zaWduYWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKHNpZ25hbC5TSUdIVVAsIG1fc2lnbmFsLlNJR19ERkwpLCBtX3NpZ25hbC5zaWduYWwuY2FsbF9hcmdzWzBdKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfMihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBtX3NpZ25hbC5TSUdJTlQgPSBzaWduYWwuU0lHSU5UCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5TSUdIVVBdID0gb2JqZWN0KCkKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5yZXNldF9tb2NrKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2lnbmFsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChzaWduYWwuU0lHSU5ULCBtX3NpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyKSwKKyAgICAgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2NsZWFudXBfZXJyb3Ioc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nZ2luZy5pbmZvKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0hVUCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2Vycm9yMihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVJTlZBTAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0hVUCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzKSwgMikKKworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnJlc2V0X21vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnMpLCAwKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKC0xKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLAorICAgICAgICAgICAgICAgICAgICAgJ1VOSVggU29ja2V0cyBhcmUgbm90IHN1cHBvcnRlZCcpCitjbGFzcyBTZWxlY3RvckV2ZW50TG9vcFVuaXhTb2NrZXRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX2V4aXN0aW5nX3BhdGhfc29jayhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnVuaXhfc29ja2V0X3BhdGgoKSBhcyBwYXRoOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpCisgICAgICAgICAgICBzb2NrLmJpbmQocGF0aCkKKyAgICAgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IE5vbmUsIHBhdGgpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRyZXNzLippcyBhbHJlYWR5IGluIHVzZScpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfZXhpc3RpbmdfcGF0aF9ub25zb2NrKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGZpbGU6CisgICAgICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IE5vbmUsIGZpbGUubmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChPU0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRyZXNzLippcyBhbHJlYWR5IGluIHVzZScpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfYm9vbChzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIobGFtYmRhOiBOb25lLCBwYXRoPSdzcGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NsIGFyZ3VtZW50IG11c3QgYmUgYW4gU1NMQ29udGV4dCcpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX25vcGF0aF9ub3NvY2soc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogTm9uZSwgcGF0aD1Ob25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoIHdhcyBub3Qgc3BlY2lmaWVkLCBhbmQgbm8gc29jaycpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX3BhdGhfaW5ldHNvY2soc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIobGFtYmRhOiBOb25lLCBwYXRoPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrPXNvY2spCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQSBVTklYIERvbWFpbiBTb2NrZXQgd2FzIGV4cGVjdGVkJyk6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfYmluZF9lcnJvcihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHNvY2tldCBpcyBjbG9zZWQgb24gYW55IGJpbmQgZXJyb3IKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSBzb2NrCisKKyAgICAgICAgc29jay5iaW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IE5vbmUsIHBhdGg9Ii90ZXN0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgICAgIHNvY2suYmluZC5zaWRlX2VmZmVjdCA9IE1lbW9yeUVycm9yCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogTm9uZSwgcGF0aD0iL3Rlc3QiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfY29ubmVjdGlvbl9wYXRoX3NvY2soc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgIGxhbWJkYTogTm9uZSwgJy9kZXYvbnVsbCcsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAncGF0aCBhbmQgc29jayBjYW4gbm90IGJlJyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9jb25uZWN0aW9uX25vcGF0aF9ub3NvY2soc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgIGxhbWJkYTogTm9uZSwgTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gcGF0aCBhbmQgc29jayB3ZXJlIHNwZWNpZmllZCcpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfY29ubmVjdGlvbl9ub3NzbF9zZXJ2ZXJob3N0KHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBsYW1iZGE6IE5vbmUsICcvZGV2L251bGwnLCBzZXJ2ZXJfaG9zdG5hbWU9J3NwYW0nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXJ2ZXJfaG9zdG5hbWUgaXMgb25seSBtZWFuaW5nZnVsJyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9jb25uZWN0aW9uX3NzbF9ub3NlcnZlcmhvc3Qoc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgIGxhbWJkYTogTm9uZSwgJy9kZXYvbnVsbCcsIHNzbD1UcnVlKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICd5b3UgaGF2ZSB0byBwYXNzIHNlcnZlcl9ob3N0bmFtZSB3aGVuIHVzaW5nIHNzbCcpOgorCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKworY2xhc3MgVW5peFJlYWRQaXBlVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnBpcGUgPSBtb2NrLk1vY2soc3BlY19zZXQ9aW8uUmF3SU9CYXNlKQorICAgICAgICBzZWxmLnBpcGUuZmlsZW5vLnJldHVybl92YWx1ZSA9IDUKKworICAgICAgICBibG9ja2luZ19wYXRjaGVyID0gbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5fc2V0X25vbmJsb2NraW5nJykKKyAgICAgICAgYmxvY2tpbmdfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChibG9ja2luZ19wYXRjaGVyLnN0b3ApCisKKyAgICAgICAgZnN0YXRfcGF0Y2hlciA9IG1vY2sucGF0Y2goJ29zLmZzdGF0JykKKyAgICAgICAgbV9mc3RhdCA9IGZzdGF0X3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzdCA9IG1vY2suTW9jaygpCisgICAgICAgIHN0LnN0X21vZGUgPSBzdGF0LlNfSUZJRk8KKyAgICAgICAgbV9mc3RhdC5yZXR1cm5fdmFsdWUgPSBzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoZnN0YXRfcGF0Y2hlci5zdG9wKQorCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX21hZGUuYXNzZXJ0X2NhbGxlZF93aXRoKHRyKQorCisgICAgZGVmIHRlc3RfY3Rvcl93aXRoX3dhaXRlcihzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZnV0LnJlc3VsdCgpKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19yZWFkX3JlYWR5KHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBtX3JlYWQucmV0dXJuX3ZhbHVlID0gYidkYXRhJworICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgbV9yZWFkLmFzc2VydF9jYWxsZWRfd2l0aCg1LCB0ci5tYXhfc2l6ZSkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEnKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19yZWFkX3JlYWR5X2VvZihzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgbV9yZWFkLnJldHVybl92YWx1ZSA9IGInJworICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgbV9yZWFkLmFzc2VydF9jYWxsZWRfd2l0aCg1LCB0ci5tYXhfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19yZWFkX3JlYWR5X2Jsb2NrZWQoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIG1fcmVhZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgbV9yZWFkLmFzc2VydF9jYWxsZWRfd2l0aCg1LCB0ci5tYXhfc2l6ZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXJyb3InKQorICAgIEBtb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeV9lcnJvcihzZWxmLCBtX3JlYWQsIG1fbG9nZXhjKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICBtX3JlYWQuc2lkZV9lZmZlY3QgPSBlcnIKKyAgICAgICAgdHIuX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHRyLl9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBtX2xvZ2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICdGYXRhbCByZWFkIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0JworICAgICAgICAgICAgICAgICdcbnByb3RvY29sOi4qXG50cmFuc3BvcnQ6LionKSwKKyAgICAgICAgICAgIGV4Y19pbmZvPShPU0Vycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3BhdXNlX3JlYWRpbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDUsIG0pCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3Jlc3VtZV9yZWFkaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIuX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2VfYWxyZWFkeV9jbG9zaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2Nsb3NlLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gb2JqZWN0KCkKKyAgICAgICAgdHIuX2Nsb3NlKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X19jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX2xvb3ApCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5fbG9vcCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKworCitjbGFzcyBVbml4V3JpdGVQaXBlVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLkJhc2VQcm90b2NvbCkKKyAgICAgICAgc2VsZi5waXBlID0gbW9jay5Nb2NrKHNwZWNfc2V0PWlvLlJhd0lPQmFzZSkKKyAgICAgICAgc2VsZi5waXBlLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA1CisKKyAgICAgICAgYmxvY2tpbmdfcGF0Y2hlciA9IG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuX3NldF9ub25ibG9ja2luZycpCisgICAgICAgIGJsb2NraW5nX3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYmxvY2tpbmdfcGF0Y2hlci5zdG9wKQorCisgICAgICAgIGZzdGF0X3BhdGNoZXIgPSBtb2NrLnBhdGNoKCdvcy5mc3RhdCcpCisgICAgICAgIG1fZnN0YXQgPSBmc3RhdF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc3QgPSBtb2NrLk1vY2soKQorICAgICAgICBzdC5zdF9tb2RlID0gc3RhdC5TX0lGU09DSworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX21hZGUuYXNzZXJ0X2NhbGxlZF93aXRoKHRyKQorCisgICAgZGVmIHRlc3RfY3Rvcl93aXRoX3dhaXRlcihzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnV0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fd3JpdGUuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYid0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9idWZmZXIoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidwcmV2aW91cyddCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidwcmV2aW91cycsIGInZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9hZ2FpbihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMubG9nZ2VyJykKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2VycihzZWxmLCBtX3dyaXRlLCBtX2xvZyk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IGVycgorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRyLl9jb25uX2xvc3QpCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCB0ci5fY29ubl9sb3N0KQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICAjIFRoaXMgaXMgYSBiaXQgb3ZlcnNwZWNpZmllZC4gOi0oCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgJ3BpcGUgY2xvc2VkIGJ5IHBlZXIgb3Igb3Mud3JpdGUocGlwZSwgZGF0YSkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9jbG9zZShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpICAjIHBpcGUgd2FzIGNsb3NlZCBieSBwZWVyCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDIpCisKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYucGlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHkoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9wYXJ0aWFsKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAzCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9hZ2FpbihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfZW1wdHkoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXJyb3InKQorICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2VycihzZWxmLCBtX3dyaXRlLCBtX2xvZ2V4Yyk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gZXJyID0gT1NFcnJvcigpCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgbV9sb2dleGMuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybigKKyAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnCisgICAgICAgICAgICAgICAgJ1xucHJvdG9jb2w6LipcbnRyYW5zcG9ydDouKicpLAorICAgICAgICAgICAgZXhjX2luZm89KE9TRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdHIuX2Nvbm5fbG9zdCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9jbG9zaW5nKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIHRyLmFib3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3dyaXRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5fbG9vcCkKKworICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Rfd2l0aF9lcnIoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5fbG9vcCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGVfZW9mID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci53cml0ZV9lb2YuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZV9lb2YgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLndyaXRlX2VvZi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9wZW5kaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworCitjbGFzcyBBYnN0cmFjdENoaWxkV2F0Y2hlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgZiA9IG1vY2suTW9jaygpCisgICAgICAgIHdhdGNoZXIgPSBhc3luY2lvLkFic3RyYWN0Q2hpbGRXYXRjaGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyLCBmLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5hdHRhY2hfbG9vcCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuX19lbnRlcl9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuX19leGl0X18sIGYsIGYsIGYpCisKKworY2xhc3MgQmFzZUNoaWxkV2F0Y2hlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgZiA9IG1vY2suTW9jaygpCisgICAgICAgIHdhdGNoZXIgPSB1bml4X2V2ZW50cy5CYXNlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLl9kb193YWl0cGlkLCBmKQorCisKK1dhaXRQaWRNb2NrcyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIldhaXRQaWRNb2NrcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgid2FpdHBpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0lGRVhJVEVEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSUZTSUdOQUxFRCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0VYSVRTVEFUVVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldURVJNU0lHIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisKKworY2xhc3MgQ2hpbGRXYXRjaGVyVGVzdHNNaXhpbjoKKworICAgIGlnbm9yZV93YXJuaW5ncyA9IG1vY2sucGF0Y2gub2JqZWN0KGxvZy5sb2dnZXIsICJ3YXJuaW5nIikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi56b21iaWVzID0ge30KKworICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIHNlbGYubG9vcCwgImFkZF9zaWduYWxfaGFuZGxlciIpIGFzIHNlbGYubV9hZGRfc2lnbmFsX2hhbmRsZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIgPSBzZWxmLmNyZWF0ZV93YXRjaGVyKCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLmxvb3ApCisKKyAgICBkZWYgd2FpdHBpZChzZWxmLCBwaWQsIGZsYWdzKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLndhdGNoZXIsIGFzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcikgb3IgcGlkICE9IC0xOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHBpZCwgMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcGlkIDwgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi56b21iaWVzLnBvcGl0ZW0oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlkLCBzZWxmLnpvbWJpZXMucG9wKHBpZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBzZWxmLnJ1bm5pbmc6CisgICAgICAgICAgICByZXR1cm4gMCwgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ2hpbGRQcm9jZXNzRXJyb3IoKQorCisgICAgZGVmIGFkZF96b21iaWUoc2VsZiwgcGlkLCByZXR1cm5jb2RlKToKKyAgICAgICAgc2VsZi56b21iaWVzW3BpZF0gPSByZXR1cm5jb2RlICsgMzI3NjgKKworICAgIGRlZiBXSUZFWElURUQoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgcmV0dXJuIHN0YXR1cyA+PSAzMjc2OAorCisgICAgZGVmIFdJRlNJR05BTEVEKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHJldHVybiAzMjcwMCA8IHN0YXR1cyA8IDMyNzY4CisKKyAgICBkZWYgV0VYSVRTVEFUVVMoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuV0lGRVhJVEVEKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXMgLSAzMjc2OAorCisgICAgZGVmIFdURVJNU0lHKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLldJRlNJR05BTEVEKHN0YXR1cykpCisgICAgICAgIHJldHVybiAzMjc2OCAtIHN0YXR1cworCisgICAgZGVmIHRlc3RfY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHNlbGYubV9hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCwgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCkKKworICAgIGRlZiB3YWl0cGlkX21vY2tzKGZ1bmMpOgorICAgICAgICBkZWYgd3JhcHBlZF9mdW5jKHNlbGYpOgorICAgICAgICAgICAgZGVmIHBhdGNoKHRhcmdldCwgd3JhcHBlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vY2sucGF0Y2godGFyZ2V0LCB3cmFwcz13cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYWxsYWJsZT1tb2NrLk1vY2spCisKKyAgICAgICAgICAgIHdpdGggcGF0Y2goJ29zLldURVJNU0lHJywgc2VsZi5XVEVSTVNJRykgYXMgbV9XVEVSTVNJRywgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3MuV0VYSVRTVEFUVVMnLCBzZWxmLldFWElUU1RBVFVTKSBhcyBtX1dFWElUU1RBVFVTLCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy5XSUZTSUdOQUxFRCcsIHNlbGYuV0lGU0lHTkFMRUQpIGFzIG1fV0lGU0lHTkFMRUQsIFwKKyAgICAgICAgICAgICAgICAgcGF0Y2goJ29zLldJRkVYSVRFRCcsIHNlbGYuV0lGRVhJVEVEKSBhcyBtX1dJRkVYSVRFRCwgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3Mud2FpdHBpZCcsIHNlbGYud2FpdHBpZCkgYXMgbV93YWl0cGlkOgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgV2FpdFBpZE1vY2tzKG1fd2FpdHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dJRkVYSVRFRCwgbV9XSUZTSUdOQUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dFWElUU1RBVFVTLCBtX1dURVJNU0lHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgIHJldHVybiB3cmFwcGVkX2Z1bmMKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZChzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gbW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0MiwgY2FsbGJhY2ssIDksIDEwLCAxNCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCBpcyBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgKHJldHVybmNvZGUgMTIpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MiwgMTIpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDIsIDEyLCA5LCAxMCwgMTQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDIsIDEzKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkIGNhbGxlZCBhZ2FpbgorICAgICAgICBzZWxmLnpvbWJpZXMuY2xlYXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdHdvX2NoaWxkcmVuKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSBtb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMQorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0MywgY2FsbGJhY2sxLCA3LCA4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkIDIKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDQsIGNhbGxiYWNrMiwgMTQ3LCAxOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZHJlbiBhcmUgcnVubmluZworICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCAxIHRlcm1pbmF0ZXMgKHNpZ25hbCAzKQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDMsIC0zKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDMsIC0zLCA3LCA4KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldURVJNU0lHLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazEucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBjaGlsZCAyIHN0aWxsIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgMiB0ZXJtaW5hdGVzIChjb2RlIDEwOCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQ0LCAxMDgpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0NCwgMTA4LCAxNDcsIDE4KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2syLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkcmVuIGFyZSBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQzLCAxNCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQ0LCAxNSkKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorCisgICAgICAgICMgc2lnY2hsZCBjYWxsZWQgYWdhaW4KKyAgICAgICAgc2VsZi56b21iaWVzLmNsZWFyKCkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3R3b19jaGlsZHJlbl90ZXJtaW5hdGluZ190b2dldGhlcihzZWxmLCBtKToKKyAgICAgICAgY2FsbGJhY2sxID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gbW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkIDEKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDUsIGNhbGxiYWNrMSwgMTcsIDgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0NiwgY2FsbGJhY2syLCAxMTQ3LCAxOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZHJlbiBhcmUgcnVubmluZworICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCAxIHRlcm1pbmF0ZXMgKGNvZGUgNzgpCisgICAgICAgICMgY2hpbGQgMiB0ZXJtaW5hdGVzIChzaWduYWwgNSkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQ1LCA3OCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQ2LCAtNSkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2sxLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQ1LCA3OCwgMTcsIDgpCisgICAgICAgIGNhbGxiYWNrMi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0NiwgLTUsIDExNDcsIDE4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldURVJNU0lHLnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazEucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZHJlbiBhcmUgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NSwgMTQpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NiwgMTUpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF9yYWNlX2NvbmRpdGlvbihzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gbW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyBiZWZvcmUgYmVpbmcgcmVnaXN0ZXJlZAorICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDUwLCA0KQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MCwgY2FsbGJhY2ssIDEsIDEyKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUwLCA0LCAxLCAxMikKKyAgICAgICAgY2FsbGJhY2sucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MCwgLTEpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF9yZXBsYWNlX2hhbmRsZXIoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrMSA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUxLCBjYWxsYmFjazEsIDE5KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHJlZ2lzdGVyIHRoZSBzYW1lIGNoaWxkIGFnYWluCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUxLCBjYWxsYmFjazIsIDIxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgKHNpZ25hbCA4KQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTEsIC04KQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTEsIC04LCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XVEVSTVNJRy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2syLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTEsIDEzKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmVtb3ZlX2hhbmRsZXIoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrID0gbW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTIsIGNhbGxiYWNrLCAxOTg0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHVucmVnaXN0ZXIgdGhlIGNoaWxkCisgICAgICAgIHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1MikKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzIChjb2RlIDk5KQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTIsIDk5KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdW5rbm93bl9zdGF0dXMoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrID0gbW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTMsIGNhbGxiYWNrLCAtMTkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgdGVybWluYXRlIHdpdGggdW5rbm93biBzdGF0dXMKKyAgICAgICAgc2VsZi56b21iaWVzWzUzXSA9IDExNzgKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTMsIDExNzgsIC0xOSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUzLCAxMDEpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3RfcmVtb3ZlX2NoaWxkX2hhbmRsZXIoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrMSA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZHJlbgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NCwgY2FsbGJhY2sxLCAxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU1LCBjYWxsYmFjazIsIDIpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTYsIGNhbGxiYWNrMywgMykKKworICAgICAgICAjIHJlbW92ZSBjaGlsZCBoYW5kbGVyIDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NCkpCisKKyAgICAgICAgIyByZW1vdmUgY2hpbGQgaGFuZGxlciAyIG11bHRpcGxlIHRpbWVzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDU1KSkKKworICAgICAgICAjIGFsbCBjaGlsZHJlbiB0ZXJtaW5hdGUKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU0LCAwKQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTUsIDEpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1NiwgMikKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBjYWxsYmFjazMuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTYsIDIsIDMpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdW5oYW5kbGVkX2V4Y2VwdGlvbihzZWxmLCBtKToKKyAgICAgICAgY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NywgY2FsbGJhY2spCisKKyAgICAgICAgIyByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgbS53YWl0cGlkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QobG9nLmxvZ2dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InKSBhcyBtX2Vycm9yOgorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2Vycm9yLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF9jaGlsZF9yZWFwZWRfZWxzZXdoZXJlKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU4LCBjYWxsYmFjaykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1OCwgNCkKKworICAgICAgICAjIHdhaXRwaWQgaXMgY2FsbGVkIGVsc2V3aGVyZQorICAgICAgICBvcy53YWl0cGlkKDU4LCBvcy5XTk9IQU5HKQorCisgICAgICAgIG0ud2FpdHBpZC5yZXNldF9tb2NrKCkKKworICAgICAgICAjIHNpZ2NobGQKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi53YXRjaGVyLCBhc3luY2lvLkZhc3RDaGlsZFdhdGNoZXIpOgorICAgICAgICAgICAgIyBoZXJlIHRoZSBGYXN0Q2hpbGRXYXRjaGUgZW50ZXJzIGEgZGVhZGxvY2sKKyAgICAgICAgICAgICMgKHRoZXJlIGlzIG5vIHdheSB0byBwcmV2ZW50IGl0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1OCwgMjU1KQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3Vua25vd25fcGlkX2R1cmluZ19yZWdpc3RyYXRpb24oc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgdHdvIGNoaWxkcmVuCisgICAgICAgIGNhbGxiYWNrMSA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5ncywgc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgIyBjaGlsZCAxIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1OTEsIDcpCisgICAgICAgICAgICAjIGFuIHVua25vd24gY2hpbGQgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDU5MywgMTcpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTkxLCBjYWxsYmFjazEpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTkyLCBjYWxsYmFjazIpCisKKyAgICAgICAgY2FsbGJhY2sxLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU5MSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zZXRfbG9vcChzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gbW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MCwgY2FsbGJhY2spCisKKyAgICAgICAgIyBhdHRhY2ggYSBuZXcgbG9vcAorICAgICAgICBvbGRfbG9vcCA9IHNlbGYubG9vcAorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBwYXRjaCA9IG1vY2sucGF0Y2gub2JqZWN0CisKKyAgICAgICAgd2l0aCBwYXRjaChvbGRfbG9vcCwgInJlbW92ZV9zaWduYWxfaGFuZGxlciIpIGFzIG1fb2xkX3JlbW92ZSwgXAorICAgICAgICAgICAgIHBhdGNoKHNlbGYubG9vcCwgImFkZF9zaWduYWxfaGFuZGxlciIpIGFzIG1fbmV3X2FkZDoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICAgICAgbV9vbGRfcmVtb3ZlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExEKQorICAgICAgICAgICAgbV9uZXdfYWRkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExELCBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcworICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNjAsIDkpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDYwLCA5KQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zZXRfbG9vcF9yYWNlX2NvbmRpdGlvbihzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciAzIGNoaWxkcmVuCisgICAgICAgIGNhbGxiYWNrMSA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjEsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MiwgY2FsbGJhY2syKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYyMiwgY2FsbGJhY2szKQorCisgICAgICAgICMgZGV0YWNoIHRoZSBsb29wCisgICAgICAgIG9sZF9sb29wID0gc2VsZi5sb29wCisgICAgICAgIHNlbGYubG9vcCA9IE5vbmUKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIG9sZF9sb29wLCAicmVtb3ZlX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXI6CisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hdHRhY2hfbG9vcChOb25lKQorCisgICAgICAgICAgICBtX3JlbW92ZV9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCkKKworICAgICAgICAjIGNoaWxkIDEgJiAyIHRlcm1pbmF0ZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNjEsIDExKQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNjIsIC01KQorCisgICAgICAgICMgU0lHQ0hMRCB3YXMgbm90IGNhdWdodAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazMuY2FsbGVkKQorCisgICAgICAgICMgYXR0YWNoIGEgbmV3IGxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIHNlbGYubG9vcCwgImFkZF9zaWduYWxfaGFuZGxlciIpIGFzIG1fYWRkX3NpZ25hbF9oYW5kbGVyOgorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorCisgICAgICAgICAgICBtX2FkZF9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCwgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCkKKyAgICAgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MSwgMTEpICAjIHJhY2UgY29uZGl0aW9uIQorICAgICAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDYyLCAtNSkgICMgcmFjZSBjb25kaXRpb24hCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMy5jYWxsZWQpCisKKyAgICAgICAgY2FsbGJhY2sxLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBjaGlsZCAzIHRlcm1pbmF0ZXMKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDYyMiwgMTkpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBjYWxsYmFjazMuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjIyLCAxOSkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgdHdvIGNoaWxkcmVuCisgICAgICAgIGNhbGxiYWNrMSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDYzLCA5KQorICAgICAgICAgICAgIyBvdGhlciBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNjUsIDE4KQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MywgY2FsbGJhY2sxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDY0LCBjYWxsYmFjazEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYud2F0Y2hlci5fY2FsbGJhY2tzKSwgMSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi53YXRjaGVyLCBhc3luY2lvLkZhc3RDaGlsZFdhdGNoZXIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYud2F0Y2hlci5fem9tYmllcyksIDEpCisKKyAgICAgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcCwKKyAgICAgICAgICAgICAgICAgICAgInJlbW92ZV9zaWduYWxfaGFuZGxlciIpIGFzIG1fcmVtb3ZlX3NpZ25hbF9oYW5kbGVyOgorCisgICAgICAgICAgICAgICAgc2VsZi53YXRjaGVyLmNsb3NlKCkKKworICAgICAgICAgICAgICAgIG1fcmVtb3ZlX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5fY2FsbGJhY2tzKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi53YXRjaGVyLCBhc3luY2lvLkZhc3RDaGlsZFdhdGNoZXIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5fem9tYmllcykKKworCitjbGFzcyBTYWZlQ2hpbGRXYXRjaGVyVGVzdHMgKENoaWxkV2F0Y2hlclRlc3RzTWl4aW4sIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorICAgIGRlZiBjcmVhdGVfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIGFzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcigpCisKKworY2xhc3MgRmFzdENoaWxkV2F0Y2hlclRlc3RzIChDaGlsZFdhdGNoZXJUZXN0c01peGluLCB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiBhc3luY2lvLkZhc3RDaGlsZFdhdGNoZXIoKQorCisKK2NsYXNzIFBvbGljeVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjcmVhdGVfcG9saWN5KHNlbGYpOgorICAgICAgICByZXR1cm4gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb2xpY3kuX3dhdGNoZXIpCisKKyAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3YXRjaGVyLCBhc3luY2lvLlNhZmVDaGlsZFdhdGNoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3kuX3dhdGNoZXIsIHdhdGNoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2F0Y2hlci5fbG9vcCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX2FmdGVyX3NldChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgd2F0Y2hlciA9IGFzeW5jaW8uRmFzdENoaWxkV2F0Y2hlcigpCisKKyAgICAgICAgcG9saWN5LnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5Ll93YXRjaGVyLCB3YXRjaGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIsIHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXJfd2l0aF9tYWlubG9vcF9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll93YXRjaGVyKQorICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod2F0Y2hlciwgYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9nZXRfY2hpbGRfd2F0Y2hlcl90aHJlYWQoc2VsZik6CisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChwb2xpY3kubmV3X2V2ZW50X2xvb3AoKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3ApCisgICAgICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIGFzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhdGNoZXIuX2xvb3ApCisKKyAgICAgICAgICAgIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpLmNsb3NlKCkKKworICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorCisgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdGguc3RhcnQoKQorICAgICAgICB0aC5qb2luKCkKKworICAgIGRlZiB0ZXN0X2NoaWxkX3dhdGNoZXJfcmVwbGFjZV9tYWlubG9vcF9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBsb29wKQorCisgICAgICAgIG5ld19sb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKG5ld19sb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgbmV3X2xvb3ApCisKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBOb25lKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICBuZXdfbG9vcC5jbG9zZSgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkOTY2OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTQxIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnV2luZG93cyBvbmx5JykKKworaW1wb3J0IF93aW5hcGkKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgX292ZXJsYXBwZWQKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworZnJvbSBhc3luY2lvIGltcG9ydCB3aW5kb3dzX2V2ZW50cworCisKK2NsYXNzIFVwcGVyUHJvdG8oYXN5bmNpby5Qcm90b2NvbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmJ1ZiA9IFtdCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zKToKKyAgICAgICAgc2VsZi50cmFucyA9IHRyYW5zCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5idWYuYXBwZW5kKGRhdGEpCisgICAgICAgIGlmIGInXG4nIGluIGRhdGE6CisgICAgICAgICAgICBzZWxmLnRyYW5zLndyaXRlKGInJy5qb2luKHNlbGYuYnVmKS51cHBlcigpKQorICAgICAgICAgICAgc2VsZi50cmFucy5jbG9zZSgpCisKKworY2xhc3MgUHJvYWN0b3JUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGEsIGIgPSBzZWxmLmxvb3AuX3NvY2tldHBhaXIoKQorICAgICAgICB0cmFucyA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KGEsIGFzeW5jaW8uUHJvdG9jb2woKSkKKyAgICAgICAgZiA9IGFzeW5jaW8uYXN5bmMoc2VsZi5sb29wLnNvY2tfcmVjdihiLCAxMDApKQorICAgICAgICB0cmFucy5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCBiJycpCisgICAgICAgIGIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZG91YmxlX2JpbmQoc2VsZik6CisgICAgICAgIEFERFJFU1MgPSByJ1xcLlxwaXBlXHRlc3RfZG91YmxlX2JpbmQtJXMnICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgc2VydmVyMSA9IHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIoQUREUkVTUykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2luZG93c19ldmVudHMuUGlwZVNlcnZlcihBRERSRVNTKQorICAgICAgICBzZXJ2ZXIxLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3BpcGUoc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VsZi5fdGVzdF9waXBlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnZG9uZScpCisKKyAgICBkZWYgX3Rlc3RfcGlwZShzZWxmKToKKyAgICAgICAgQUREUkVTUyA9IHInXFwuXHBpcGVcX3Rlc3RfcGlwZS0lcycgJSBvcy5nZXRwaWQoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmxvb3AuY3JlYXRlX3BpcGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBhc3luY2lvLlByb3RvY29sLCBBRERSRVNTKQorCisgICAgICAgIFtzZXJ2ZXJdID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3RhcnRfc2VydmluZ19waXBlKAorICAgICAgICAgICAgVXBwZXJQcm90bywgQUREUkVTUykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlcnZlciwgd2luZG93c19ldmVudHMuUGlwZVNlcnZlcikKKworICAgICAgICBjbGllbnRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBzdHJlYW1fcmVhZGVyID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBwcm90b2NvbCA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyUHJvdG9jb2woc3RyZWFtX3JlYWRlcikKKyAgICAgICAgICAgIHRyYW5zLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBwcm90b2NvbCwgQUREUkVTUykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFucywgYXN5bmNpby5UcmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvY29sLCBwcm90bykKKyAgICAgICAgICAgIGNsaWVudHMuYXBwZW5kKChzdHJlYW1fcmVhZGVyLCB0cmFucykpCisKKyAgICAgICAgZm9yIGksIChyLCB3KSBpbiBlbnVtZXJhdGUoY2xpZW50cyk6CisgICAgICAgICAgICB3LndyaXRlKCdsb3dlci17fVxuJy5mb3JtYXQoaSkuZW5jb2RlKCkpCisKKyAgICAgICAgZm9yIGksIChyLCB3KSBpbiBlbnVtZXJhdGUoY2xpZW50cyk6CisgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGZyb20gci5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLCAnTE9XRVIte31cbicuZm9ybWF0KGkpLmVuY29kZSgpKQorICAgICAgICAgICAgdy5jbG9zZSgpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5sb29wLmNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgYXN5bmNpby5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl9oYW5kbGUoc2VsZik6CisgICAgICAgIGV2ZW50ID0gX292ZXJsYXBwZWQuQ3JlYXRlRXZlbnQoTm9uZSwgVHJ1ZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfd2luYXBpLkNsb3NlSGFuZGxlLCBldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIHVuc2V0IGV2ZW50IHdpdGggMC41cyB0aW1lb3V0OworICAgICAgICAjIHJlc3VsdCBzaG91bGQgYmUgRmFsc2UgYXQgdGltZW91dAorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMC41KQorICAgICAgICBzdGFydCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIGVsYXBzZWQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjQ4IDwgZWxhcHNlZCA8IDAuOSwgZWxhcHNlZCkKKworICAgICAgICBfb3ZlcmxhcHBlZC5TZXRFdmVudChldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIGZvciBzZXQgZXZlbnQ7CisgICAgICAgICMgcmVzdWx0IHNob3VsZCBiZSBUcnVlIGltbWVkaWF0ZWx5CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGV2ZW50LCAxMCkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IGVsYXBzZWQgPCAwLjMsIGVsYXBzZWQpCisKKyAgICAgICAgIyBUdWxpcCBpc3N1ZSAjMTk1OiBjYW5jZWxsaW5nIGEgZG9uZSBfV2FpdEhhbmRsZUZ1dHVyZSBtdXN0IG5vdCBjcmFzaAorICAgICAgICBmdXQuY2FuY2VsKCkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX2hhbmRsZV9jYW5jZWwoc2VsZik6CisgICAgICAgIGV2ZW50ID0gX292ZXJsYXBwZWQuQ3JlYXRlRXZlbnQoTm9uZSwgVHJ1ZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfd2luYXBpLkNsb3NlSGFuZGxlLCBldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIHVuc2V0IGV2ZW50IHdpdGggYSBjYW5jZWxsZWQgZnV0dXJlOworICAgICAgICAjIENhbmNlbGxlZEVycm9yIHNob3VsZCBiZSByYWlzZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQsIDEwKQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKKyAgICAgICAgZWxhcHNlZCA9IHNlbGYubG9vcC50aW1lKCkgLSBzdGFydAorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSBlbGFwc2VkIDwgMC4xLCBlbGFwc2VkKQorCisgICAgICAgICMgVHVsaXAgaXNzdWUgIzE5NTogY2FuY2VsbGluZyBhIF9XYWl0SGFuZGxlRnV0dXJlIHR3aWNlIG11c3Qgbm90IGNyYXNoCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGV2ZW50KQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgZnV0LmNhbmNlbCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTNhNmQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5CkBAIC0wLDAgKzEsMTcxIEBACisiIiJUZXN0cyBmb3Igd2luZG93X3V0aWxzIiIiCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IElQVjZfRU5BQkxFRAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnV2luZG93cyBvbmx5JykKKworaW1wb3J0IF93aW5hcGkKKworZnJvbSBhc3luY2lvIGltcG9ydCB3aW5kb3dzX3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IF9vdmVybGFwcGVkCisKKworY2xhc3MgV2luc29ja2V0cGFpclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja193aW5zb2NrZXRwYWlyKHNlbGYsIHNzb2NrLCBjc29jayk6CisgICAgICAgIGNzb2NrLnNlbmQoYid4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIneHh4Jywgc3NvY2sucmVjdigxMDI0KSkKKyAgICAgICAgY3NvY2suY2xvc2UoKQorICAgICAgICBzc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzc29jaywgY3NvY2sgPSB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmNoZWNrX3dpbnNvY2tldHBhaXIoc3NvY2ssIGNzb2NrKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSVBWNl9FTkFCTEVELCAnSVB2NiBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X3dpbnNvY2tldHBhaXJfaXB2NihzZWxmKToKKyAgICAgICAgc3NvY2ssIGNzb2NrID0gd2luZG93c191dGlscy5zb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVDYpCisgICAgICAgIHNlbGYuY2hlY2tfd2luc29ja2V0cGFpcihzc29jaywgY3NvY2spCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby53aW5kb3dzX3V0aWxzLnNvY2tldCcpCisgICAgZGVmIHRlc3Rfd2luc29ja2V0cGFpcl9leGMoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5BRl9JTkVUID0gc29ja2V0LkFGX0lORVQKKyAgICAgICAgbV9zb2NrZXQuU09DS19TVFJFQU0gPSBzb2NrZXQuU09DS19TVFJFQU0KKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5nZXRzb2NrbmFtZS5yZXR1cm5fdmFsdWUgPSAoJycsIDEyMzQ1KQorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmFjY2VwdC5yZXR1cm5fdmFsdWUgPSBvYmplY3QoKSwgb2JqZWN0KCkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZG93c191dGlscy5zb2NrZXRwYWlyKQorCisgICAgZGVmIHRlc3Rfd2luc29ja2V0cGFpcl9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpciwgZmFtaWx5PXNvY2tldC5BRl9VTlNQRUMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpciwgdHlwZT1zb2NrZXQuU09DS19ER1JBTSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93c191dGlscy5zb2NrZXRwYWlyLCBwcm90bz0xKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8ud2luZG93c191dGlscy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X3dpbnNvY2tldHBhaXJfY2xvc2Uoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5BRl9JTkVUID0gc29ja2V0LkFGX0lORVQKKyAgICAgICAgbV9zb2NrZXQuU09DS19TVFJFQU0gPSBzb2NrZXQuU09DS19TVFJFQU0KKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSBzb2NrCisgICAgICAgIHNvY2suYmluZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZG93c191dGlscy5zb2NrZXRwYWlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisKKworY2xhc3MgUGlwZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BpcGVfb3ZlcmxhcHBlZChzZWxmKToKKyAgICAgICAgaDEsIGgyID0gd2luZG93c191dGlscy5waXBlKG92ZXJsYXBwZWQ9KFRydWUsIFRydWUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdjEgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YxLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5lcnJvciwgMCkKKworICAgICAgICAgICAgb3YxLlJlYWRGaWxlKGgxLCAxMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3YxLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5lcnJvciwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HKQorICAgICAgICAgICAgRVJST1JfSU9fSU5DT01QTEVURSA9IDk5NgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG92MS5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lPX0lOQ09NUExFVEUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZXhwZWN0ZWQgRVJST1JfSU9fSU5DT01QTEVURScpCisKKyAgICAgICAgICAgIG92MiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjIucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YyLmVycm9yLCAwKQorCisgICAgICAgICAgICBvdjIuV3JpdGVGaWxlKGgyLCBiImhlbGxvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3YyLmVycm9yLCB7MCwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HfSkKKworICAgICAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzKFtvdjIuZXZlbnRdLCBGYWxzZSwgMTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCBFUlJPUl9JT19JTkNPTVBMRVRFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjIucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3YyLmVycm9yLCB7MCwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmdldHJlc3VsdCgpLCBiImhlbGxvIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDEpCisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgyKQorCisgICAgZGVmIHRlc3RfcGlwZV9oYW5kbGUoc2VsZik6CisgICAgICAgIGgsIF8gPSB3aW5kb3dzX3V0aWxzLnBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgVHJ1ZSkpCisgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoXykKKyAgICAgICAgcCA9IHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZShoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZmlsZW5vKCksIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5oYW5kbGUsIGgpCisKKyAgICAgICAgIyBjaGVjayBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgcCBjbG9zZXMgaGFuZGxlCisgICAgICAgIGRlbCBwCisgICAgICAgIHRlc3Quc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCA2KSAgICAgIyBFUlJPUl9JTlZBTElEX0hBTkRMRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdleHBlY3RlZCBFUlJPUl9JTlZBTElEX0hBTkRMRScpCisKKworY2xhc3MgUG9wZW5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9wb3BlbihzZWxmKToKKyAgICAgICAgY29tbWFuZCA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgcyA9IHN5cy5zdGRpbi5yZWFkbGluZSgpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHMudXBwZXIoKSkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ3N0ZGVycicpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgbXNnID0gYiJibGFoXG4iCisKKyAgICAgICAgcCA9IHdpbmRvd3NfdXRpbHMuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb21tYW5kXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49d2luZG93c191dGlscy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9d2luZG93c191dGlscy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9d2luZG93c191dGlscy5QSVBFKQorCisgICAgICAgIGZvciBmIGluIFtwLnN0ZGluLCBwLnN0ZG91dCwgcC5zdGRlcnJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZSkKKworICAgICAgICBvdmluID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgIG92b3V0ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgIG92ZXJyID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisKKyAgICAgICAgb3Zpbi5Xcml0ZUZpbGUocC5zdGRpbi5oYW5kbGUsIG1zZykKKyAgICAgICAgb3ZvdXQuUmVhZEZpbGUocC5zdGRvdXQuaGFuZGxlLCAxMDApCisgICAgICAgIG92ZXJyLlJlYWRGaWxlKHAuc3RkZXJyLmhhbmRsZSwgMTAwKQorCisgICAgICAgIGV2ZW50cyA9IFtvdmluLmV2ZW50LCBvdm91dC5ldmVudCwgb3ZlcnIuZXZlbnRdCisgICAgICAgICMgU3VwZXItbG9uZyB0aW1lb3V0IGZvciBzbG93IGJ1aWxkYm90cy4KKyAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzKGV2ZW50cywgVHJ1ZSwgMTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBfd2luYXBpLldBSVRfT0JKRUNUXzApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3ZvdXQucGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdmVyci5wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92aW4ucGVuZGluZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92aW4uZ2V0cmVzdWx0KCksIGxlbihtc2cpKQorICAgICAgICBvdXQgPSBvdm91dC5nZXRyZXN1bHQoKS5yc3RyaXAoKQorICAgICAgICBlcnIgPSBvdmVyci5nZXRyZXN1bHQoKS5yc3RyaXAoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ob3V0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihlcnIpLCAwKQorICAgICAgICAjIGFsbG93IGZvciBwYXJ0aWFsIHJlYWRzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cudXBwZXIoKS5yc3RyaXAoKS5zdGFydHN3aXRoKG91dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiInN0ZGVyciIuc3RhcnRzd2l0aChlcnIpKQorCisgICAgICAgIHAud2FpdCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CmluZGV4IDVkMDYzMmUuLmQ0NDcyNmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQpAQCAtNSwyMCArNSwxOSBAQAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGVycm5vCiBpbXBvcnQgc3RydWN0CitpbXBvcnQgd2FybmluZ3MKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIHVubGluaywgSE9TVCwgSE9TVHY2CiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCi1mcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAorVElNRU9VVCA9IDMKIEhBU19VTklYX1NPQ0tFVFMgPSBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKQogCiBjbGFzcyBkdW1teXNvY2tldDoKQEAgLTkzLDcgKzkyLDcgQEAKICAgICAiIiJIZWxwZXIgZnVuY3Rpb24gdG8gYmluZCBhIHNvY2tldCBhY2NvcmRpbmcgdG8gaXRzIGZhbWlseS4iIiIKICAgICBpZiBIQVNfVU5JWF9TT0NLRVRTIGFuZCBzb2NrLmZhbWlseSA9PSBzb2NrZXQuQUZfVU5JWDoKICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHBhdGggZG9lc24ndCBleGlzdC4KLSAgICAgICAgdW5saW5rKGFkZHIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKGFkZHIpCiAgICAgc29jay5iaW5kKGFkZHIpCiAKIApAQCAtMjU2LDQwICsyNTUsMjkgQEAKICAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQogCiAgICAgICAgICMgY2FwdHVyZSBvdXRwdXQgb2YgZGlzcGF0Y2hlci5sb2coKSAodG8gc3RkZXJyKQotICAgICAgICBmcCA9IFN0cmluZ0lPKCkKLSAgICAgICAgc3RkZXJyID0gc3lzLnN0ZGVycgogICAgICAgICBsMSA9ICJMb3ZlbHkgc3BhbSEgV29uZGVyZnVsIHNwYW0hIgogICAgICAgICBsMiA9ICJJIGRvbid0IGxpa2Ugc3BhbSEiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBmcAorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgogICAgICAgICAgICAgZC5sb2cobDEpCiAgICAgICAgICAgICBkLmxvZyhsMikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzdGRlcnIKIAotICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIGxpbmVzID0gc3RkZXJyLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsnbG9nOiAlcycgJSBsMSwgJ2xvZzogJXMnICUgbDJdKQogCiAgICAgZGVmIHRlc3RfbG9nX2luZm8oc2VsZik6CiAgICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKIAogICAgICAgICAjIGNhcHR1cmUgb3V0cHV0IG9mIGRpc3BhdGNoZXIubG9nX2luZm8oKSAodG8gc3Rkb3V0IHZpYSBwcmludCkKLSAgICAgICAgZnAgPSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgbDEgPSAiSGF2ZSB5b3UgZ290IGFueXRoaW5nIHdpdGhvdXQgc3BhbT8iCiAgICAgICAgIGwyID0gIldoeSBjYW4ndCBzaGUgaGF2ZSBlZ2cgYmFjb24gc3BhbSBhbmQgc2F1c2FnZT8iCiAgICAgICAgIGwzID0gIlRIQVQnUyBnb3Qgc3BhbSBpbiBpdCEiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBmcAorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgogICAgICAgICAgICAgZC5sb2dfaW5mbyhsMSwgJ0VHR1MnKQogICAgICAgICAgICAgZC5sb2dfaW5mbyhsMikKICAgICAgICAgICAgIGQubG9nX2luZm8obDMsICdTUEFNJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIAotICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIGxpbmVzID0gc3Rkb3V0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgIGV4cGVjdGVkID0gWydFR0dTOiAlcycgJSBsMSwgJ2luZm86ICVzJyAlIGwyLCAnU1BBTTogJXMnICUgbDNdCi0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF91bmhhbmRsZWQoc2VsZik6CkBAIC0yOTcsMTggKzI4NSwxMyBAQAogICAgICAgICBkLmlnbm9yZV9sb2dfdHlwZXMgPSAoKQogCiAgICAgICAgICMgY2FwdHVyZSBvdXRwdXQgb2YgZGlzcGF0Y2hlci5sb2dfaW5mbygpICh0byBzdGRvdXQgdmlhIHByaW50KQotICAgICAgICBmcCA9IFN0cmluZ0lPKCkKLSAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gZnAKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKICAgICAgICAgICAgIGQuaGFuZGxlX2V4cHQoKQogICAgICAgICAgICAgZC5oYW5kbGVfcmVhZCgpCiAgICAgICAgICAgICBkLmhhbmRsZV93cml0ZSgpCiAgICAgICAgICAgICBkLmhhbmRsZV9jb25uZWN0KCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIAotICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIGxpbmVzID0gc3Rkb3V0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgIGV4cGVjdGVkID0gWyd3YXJuaW5nOiB1bmhhbmRsZWQgaW5jb21pbmcgcHJpb3JpdHkgZXZlbnQnLAogICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIHJlYWQgZXZlbnQnLAogICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIHdyaXRlIGV2ZW50JywKQEAgLTM3Nyw3ICszNjAsNyBAQAogICAgICAgICAgICAgZGF0YSA9IGIiU3VwcG9zZSB0aGVyZSBpc24ndCBhIDE2LXRvbiB3ZWlnaHQ/IgogICAgICAgICAgICAgZCA9IGRpc3BhdGNoZXJ3aXRoc2VuZF9ub3JlYWQoKQogICAgICAgICAgICAgZC5jcmVhdGVfc29ja2V0KCkKLSAgICAgICAgICAgIGQuY29ubmVjdCgoSE9TVCwgcG9ydCkpCisgICAgICAgICAgICBkLmNvbm5lY3QoKHN1cHBvcnQuSE9TVCwgcG9ydCkpCiAKICAgICAgICAgICAgICMgZ2l2ZSB0aW1lIGZvciBzb2NrZXQgdG8gY29ubmVjdAogICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCkBAIC0zOTUsNyArMzc4LDEwIEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgaWYgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCisKIAogCiBjbGFzcyBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsKERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzKToKQEAgLTQwNiwxNCArMzkyLDE0IEBACiBjbGFzcyBGaWxlV3JhcHBlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5kID0gYiJJdCdzIG5vdCBkZWFkLCBpdCdzIHNsZWVwaW5nISIKLSAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgZmlsZToKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgZmlsZS53cml0ZShzZWxmLmQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfcmVjdihzZWxmKToKLSAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19SRE9OTFkpCisgICAgICAgIGZkID0gb3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgb3MuT19SRE9OTFkpCiAgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCiAgICAgICAgIG9zLmNsb3NlKGZkKQogCkBAIC00MjcsMjAgKzQxMywyMCBAQAogICAgIGRlZiB0ZXN0X3NlbmQoc2VsZik6CiAgICAgICAgIGQxID0gYiJDb21lIGFnYWluPyIKICAgICAgICAgZDIgPSBiIkkgd2FudCB0byBidXkgc29tZSBjaGVlc2UuIgotICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1dST05MWSB8IG9zLk9fQVBQRU5EKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fV1JPTkxZIHwgb3MuT19BUFBFTkQpCiAgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCiAgICAgICAgIG9zLmNsb3NlKGZkKQogCiAgICAgICAgIHcud3JpdGUoZDEpCiAgICAgICAgIHcuc2VuZChkMikKICAgICAgICAgdy5jbG9zZSgpCi0gICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGZpbGU6CisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS5yZWFkKCksIHNlbGYuZCArIGQxICsgZDIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGFzeW5jb3JlLCAnZmlsZV9kaXNwYXRjaGVyJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlciByZXF1aXJlZCcpCiAgICAgZGVmIHRlc3RfZGlzcGF0Y2hlcihzZWxmKToKLSAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19SRE9OTFkpCisgICAgICAgIGZkID0gb3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgb3MuT19SRE9OTFkpCiAgICAgICAgIGRhdGEgPSBbXQogICAgICAgICBjbGFzcyBGaWxlRGlzcGF0Y2hlcihhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIpOgogICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgpAQCAtNDUwLDYgKzQzNiwyNiBAQAogICAgICAgICBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4wMSwgdXNlX3BvbGw9VHJ1ZSwgY291bnQ9MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIiIuam9pbihkYXRhKSwgc2VsZi5kKQogCisgICAgZGVmIHRlc3RfcmVzb3VyY2Vfd2FybmluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE0NTMKKyAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgZiA9IGFzeW5jb3JlLmZpbGVfd3JhcHBlcihmZCkKKworICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3R3aWNlKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fUkRPTkxZKQorICAgICAgICBmID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZkLCAtMSkKKyAgICAgICAgIyBjYWxsaW5nIGNsb3NlIHR3aWNlIHNob3VsZCBub3QgZmFpbAorICAgICAgICBmLmNsb3NlKCkKKwogCiBjbGFzcyBCYXNlVGVzdEhhbmRsZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CiAKQEAgLTc0MCw3ICs3NDYsMTIgQEAKICAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LmZhbWlseSwgc2VsZi5mYW1pbHkpCiAgICAgICAgIFNPQ0tfTk9OQkxPQ0sgPSBnZXRhdHRyKHNvY2tldCwgJ1NPQ0tfTk9OQkxPQ0snLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0spCisgICAgICAgIHNvY2tfdHlwZSA9IHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0sKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocy5zb2NrZXQudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tfdHlwZSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsIHNvY2tfdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tfdHlwZSkKIAogICAgIGRlZiB0ZXN0X2JpbmQoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzU0LDcgKzc2NSw3IEBACiAgICAgICAgIHMyID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCiAgICAgICAgIHMyLmNyZWF0ZV9zb2NrZXQoc2VsZi5mYW1pbHkpCiAgICAgICAgICMgRUFERFJJTlVTRSBpbmRpY2F0ZXMgdGhlIHNvY2tldCB3YXMgY29ycmVjdGx5IGJvdW5kCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgczIuYmluZCwgKHNlbGYuYWRkclswXSwgcG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMyLmJpbmQsIChzZWxmLmFkZHJbMF0sIHBvcnQpKQogCiAgICAgZGVmIHRlc3Rfc2V0X3JldXNlX2FkZHIoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzYyLDcgKzc3Myw3IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgdW5pdHRlc3Quc2tpcCgiU09fUkVVU0VBRERSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGlmIFNPX1JFVVNFQUREUiBzdWNjZWVkZWQgZm9yIHNvY2sgd2UgZXhwZWN0IGFzeW5jb3JlCkBAIC03ODcsNyArNzk4LDExIEBACiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD01MDApKQogICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAodC5qb2luKQorICAgICAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgICAgIGlmIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzZWxmLmZhbWlseSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgcy5zZXR0aW1lb3V0KC4yKQpAQCAtNzk1LDE5ICs4MTAsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygnaWknLCAxLCAwKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzLmNvbm5lY3Qoc2VydmVyLmFkZHJlc3MpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAogY2xhc3MgVGVzdEFQSV9Vc2VJUHY0U29ja2V0cyhCYXNlVGVzdEFQSSk6CiAgICAgZmFtaWx5ID0gc29ja2V0LkFGX0lORVQKLSAgICBhZGRyID0gKEhPU1QsIDApCisgICAgYWRkciA9IChzdXBwb3J0LkhPU1QsIDApCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiBzdXBwb3J0IHJlcXVpcmVkJykKIGNsYXNzIFRlc3RBUElfVXNlSVB2NlNvY2tldHMoQmFzZVRlc3RBUEkpOgogICAgIGZhbWlseSA9IHNvY2tldC5BRl9JTkVUNgotICAgIGFkZHIgPSAoSE9TVHY2LCAwKQorICAgIGFkZHIgPSAoc3VwcG9ydC5IT1NUdjYsIDApCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19VTklYX1NPQ0tFVFMsICdVbml4IHNvY2tldHMgcmVxdWlyZWQnKQogY2xhc3MgVGVzdEFQSV9Vc2VVbml4U29ja2V0cyhCYXNlVGVzdEFQSSk6CkBAIC04MTYsNyArODMxLDcgQEAKICAgICBhZGRyID0gc3VwcG9ydC5URVNURk4KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgdW5saW5rKHNlbGYuYWRkcikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5hZGRyKQogICAgICAgICBCYXNlVGVzdEFQSS50ZWFyRG93bihzZWxmKQogCiBjbGFzcyBUZXN0QVBJX1VzZUlQdjRTZWxlY3QoVGVzdEFQSV9Vc2VJUHY0U29ja2V0cywgdW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkgYi9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQppbmRleCAzMGMzYjRhLi43MGQyZjFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQpAQCAtMjMsNyArMjMsOSBAQAogZGVmIHJhaXNlMigpOgogICAgIHJhaXNlIFN5c3RlbUVycm9yCiAKLWNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgR2VuZXJhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzZWxmLnNhdmVfc3RkZXJyID0gc3lzLnN0ZGVycgpAQCAtMTQxLDggKzE0Myw0MyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFs1XSkKIAogCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWsoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHNob3dzIGEgbGVhayBpbiByZWZsZWFrIG1vZGUgaWYgYXRleGl0IGRvZXNuJ3QKKyAgICAgICAgIyB0YWtlIGNhcmUgdG8gZnJlZSBjYWxsYmFja3MgaW4gaXRzIHBlci1zdWJpbnRlcnByZXRlciBtb2R1bGUKKyAgICAgICAgIyBzdGF0ZS4KKyAgICAgICAgbiA9IGF0ZXhpdC5fbmNhbGxiYWNrcygpCisgICAgICAgIGNvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGYpCisgICAgICAgICAgICBkZWwgYXRleGl0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0ZXhpdC5fbmNhbGxiYWNrcygpLCBuKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWtfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgU2ltaWxhciB0byB0aGUgYWJvdmUsIGJ1dCB3aXRoIGEgcmVmY3ljbGUgdGhyb3VnaCB0aGUgYXRleGl0CisgICAgICAgICMgbW9kdWxlLgorICAgICAgICBuID0gYXRleGl0Ll9uY2FsbGJhY2tzKCkKKyAgICAgICAgY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoZikKKyAgICAgICAgICAgIGF0ZXhpdC5fX2F0ZXhpdCA9IGF0ZXhpdAorICAgICAgICAgICAgIiIiCisgICAgICAgIHJldCA9IHN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGV4aXQuX25jYWxsYmFja3MoKSwgbikKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5IGIvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CmluZGV4IGE5MmNmODcuLjg3OWFkZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKQEAgLTUsMTMgKzUsMTggQEAKIGRlZiBwYWNrKHdpZHRoLCBkYXRhKToKICAgICByZXR1cm4gYicnLmpvaW4odi50b19ieXRlcyh3aWR0aCwgc3lzLmJ5dGVvcmRlciwgc2lnbmVkPVRydWUpIGZvciB2IGluIGRhdGEpCiAKLXBhY2tzID0ge3c6IChsYW1iZGEgKmRhdGEsIHdpZHRoPXc6IHBhY2sod2lkdGgsIGRhdGEpKSBmb3IgdyBpbiAoMSwgMiwgNCl9Ci1tYXh2YWx1ZXMgPSB7dzogKDEgPDwgKDggKiB3IC0gMSkpIC0gMSBmb3IgdyBpbiAoMSwgMiwgNCl9Ci1taW52YWx1ZXMgPSB7dzogLTEgPDwgKDggKiB3IC0gMSkgZm9yIHcgaW4gKDEsIDIsIDQpfQorZGVmIHVucGFjayh3aWR0aCwgZGF0YSk6CisgICAgcmV0dXJuIFtpbnQuZnJvbV9ieXRlcyhkYXRhW2k6IGkgKyB3aWR0aF0sIHN5cy5ieXRlb3JkZXIsIHNpZ25lZD1UcnVlKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCB3aWR0aCldCisKK3BhY2tzID0ge3c6IChsYW1iZGEgKmRhdGEsIHdpZHRoPXc6IHBhY2sod2lkdGgsIGRhdGEpKSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CittYXh2YWx1ZXMgPSB7dzogKDEgPDwgKDggKiB3IC0gMSkpIC0gMSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CittaW52YWx1ZXMgPSB7dzogLTEgPDwgKDggKiB3IC0gMSkgZm9yIHcgaW4gKDEsIDIsIDMsIDQpfQogCiBkYXRhcyA9IHsKICAgICAxOiBiJ1x4MDBceDEyXHg0NVx4YmJceDdmXHg4MFx4ZmYnLAogICAgIDI6IHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY3LCAweDdmZmYsIC0weDgwMDAsIC0xKSwKKyAgICAzOiBwYWNrc1szXSgwLCAweDEyMzQ1NiwgMHg0NTY3ODksIC0weDQ1Njc4OSwgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTEpLAogICAgIDQ6IHBhY2tzWzRdKDAsIDB4MTIzNDU2NzgsIDB4NDU2Nzg5YWIsIC0weDQ1Njc4OWFiLAogICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMSksCiB9CkBAIC0xOSw2ICsyNCw3IEBACiBJTlZBTElEX0RBVEEgPSBbCiAgICAgKGInYWJjJywgMCksCiAgICAgKGInYWJjJywgMiksCisgICAgKGInYWInLCAzKSwKICAgICAoYidhYmMnLCA0KSwKIF0KIApAQCAtMjYsOCArMzIsMTAgQEAKIGNsYXNzIFRlc3RBdWRpb29wKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X21heChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KHAoNSksIHcpLCA1KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChwKDUsIC04LCAtMSksIHcpLCA4KQpAQCAtMzYsOSArNDQsMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoZGF0YXNbd10sIHcpLCAtbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfbWlubWF4KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChiJycsIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChieXRlYXJyYXkoKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KG1lbW9yeXZpZXcoYicnKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1KSwgdyksICg1LCA1KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1LCAtOCwgLTEpLCB3KSwgKC04LCA1KSkKQEAgLTUwLDE2ICs2MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pKQogCiAgICAgZGVmIHRlc3RfbWF4cHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGRhdGFzW3ddLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWVzW3ddIC0gbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfYXZnKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocCg1KSwgdyksIDUpCiAgICAgICAgICAgICBzZWxmIC5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUsIDgpLCB3KSwgNikKQEAgLTc0LDE3ICs5MCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDYwMDAwMDAwKQogCiAgICAgZGVmIHRlc3RfYXZncHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbMV0sIDEpLCAxOTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1syXSwgMiksIDUwNTM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbM10sIDMpLCAxMjkzNzA5NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzRdLCA0KSwgMzMxMTg5NzAwMikKIAogICAgIGRlZiB0ZXN0X3JtcyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKHAoKnJhbmdlKDEwMCkpLCB3KSwgNTcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGF1ZGlvb3Aucm1zKHAobWF4dmFsdWVzW3ddKSAqIDUsIHcpLApAQCAtOTMsMTEgKzExNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWludmFsdWVzW3ddLCBkZWx0YT0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzFdLCAxKSwgNzcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbMl0sIDIpLCAyMDAwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1szXSwgMyksIDUxMjA1MjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbNF0sIDQpLCAxMzEwODU0MTUyKQogCiAgICAgZGVmIHRlc3RfY3Jvc3Moc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYicnLCB3KSwgLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYnl0ZWFycmF5KCksIHcpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhtZW1vcnl2aWV3KGInJyksIHcpLCAtMSkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMCwgMSwgMiksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMSwgMiwgLTMsIC00KSwgdyksIDEpCkBAIC0xMDYsMjIgKzEzMCwyOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pLCB3KSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoYicnLCBiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGJ5dGVhcnJheSgpLCBieXRlYXJyYXkoKSwgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQobWVtb3J5dmlldyhiJycpLCBtZW1vcnl2aWV3KGInJyksIHcpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzW3ddLCBiJ1wwJyAqIGxlbihkYXRhc1t3XSksIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1sxXSwgZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMFx4MjRceDdmXHg4MFx4N2ZceDgwXHhmZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbMl0sIGRhdGFzWzJdLCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDI0NjgsIDB4N2ZmZiwgLTB4ODAwMCwgMHg3ZmZmLCAtMHg4MDAwLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbM10sIGRhdGFzWzNdLCAzKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgwLCAweDI0NjhhYywgMHg3ZmZmZmYsIC0weDgwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzRdLCBkYXRhc1s0XSwgNCksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgyNDY4YWNmMCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCiAKICAgICBkZWYgdGVzdF9iaWFzKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZm9yIGJpYXMgaW4gMCwgMSwgLTEsIDEyNywgLTEyOCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoYicnLCB3LCBiaWFzKSwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGJ5dGVhcnJheSgpLCB3LCBiaWFzKSwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKG1lbW9yeXZpZXcoYicnKSwgdywgYmlhcyksIGInJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMVx4MTNceDQ2XHhiY1x4ODBceDgxXHgwMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzFdLCAxLCAtMSksCkBAIC0xMzgsNiArMTY5LDE3IEBACiAgICAgICAgICAgICAgICAgcGFja3NbMl0oLTEsIDB4MTIzMywgMHg0NTY2LCAtMHg0NTY4LCAweDdmZmUsIDB4N2ZmZiwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1syXSwgMiwgLTB4ODAwMDAwMDApLAogICAgICAgICAgICAgICAgIGRhdGFzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgMSksCisgICAgICAgICAgICAgICAgcGFja3NbM10oMSwgMHgxMjM0NTcsIDB4NDU2NzhhLCAtMHg0NTY3ODgsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODAwMDAwLCAtMHg3ZmZmZmYsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgLTEpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKC0xLCAweDEyMzQ1NSwgMHg0NTY3ODgsIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZSwgMHg3ZmZmZmYsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIDB4N2ZmZmZmZmYpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKC0xLCAweDEyMzQ1NSwgMHg0NTY3ODgsIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZSwgMHg3ZmZmZmYsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIC0weDgwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICBkYXRhc1szXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbNF0sIDQsIDEpLAogICAgICAgICAgICAgICAgIHBhY2tzWzRdKDEsIDB4MTIzNDU2NzksIDB4NDU2Nzg5YWMsIC0weDQ1Njc4OWFhLAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDgwMDAwMDAwLCAtMHg3ZmZmZmZmZiwgMCkpCkBAIC0xNTIsOTkgKzE5NCwxNDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCwgMHg3ZmZmZmZmZikpCiAKICAgICBkZWYgdGVzdF9saW4ybGluKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbd10sIHcsIHcpLCBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGJ5dGVhcnJheShkYXRhc1t3XSksIHcsIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKG1lbW9yeXZpZXcoZGF0YXNbd10pLCB3LCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDIpLAogICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjAwLCAweDQ1MDAsIC0weDQ1MDAsIDB4N2YwMCwgLTB4ODAwMCwgLTB4MTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDMpLAorICAgICAgICAgICAgcGFja3NbM10oMCwgMHgxMjAwMDAsIDB4NDUwMDAwLCAtMHg0NTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMCwgLTB4ODAwMDAwLCAtMHgxMDAwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCA0KSwKICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIwMDAwMDAsIDB4NDUwMDAwMDAsIC0weDQ1MDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMSksCiAgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMyksCisgICAgICAgICAgICBwYWNrc1szXSgwLCAweDEyMzQwMCwgMHg0NTY3MDAsIC0weDQ1NjcwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZjAwLCAtMHg4MDAwMDAsIC0weDEwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzJdLCAyLCA0KSwKICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIzNDAwMDAsIDB4NDU2NzAwMDAsIC0weDQ1NjcwMDAwLAogICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDEpLAorICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDIpLAorICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjgsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1szXSwgMywgNCksCisgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMzQ1NjAwLCAweDQ1Njc4OTAwLCAtMHg0NTY3ODkwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmMDAsIC0weDgwMDAwMDAwLCAtMHgxMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMSksCiAgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMiksCiAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2OCwgMHg3ZmZmLCAtMHg4MDAwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAzKSwKKyAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MTIzNDU2LCAweDQ1Njc4OSwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTEpKQogCiAgICAgZGVmIHRlc3RfYWRwY20ybGluKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMSwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYnl0ZWFycmF5KGInXHgwN1x4N2ZceDdmJyksIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDBceDAwXHgwMFx4ZmZceDAwXHhmZicsICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKG1lbW9yeXZpZXcoYidceDA3XHg3Zlx4N2YnKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAyLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbMl0oMCwgMHhiLCAweDI5LCAtMHgxNiwgMHg3MiwgLTB4YjMpLCAoLTE3OSwgNDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDMsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1szXSgwLCAweGIwMCwgMHgyOTAwLCAtMHgxNjAwLCAweDcyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0weGIzMDApLCAoLTE3OSwgNDApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDQsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1s0XSgwLCAweGIwMDAwLCAweDI5MDAwMCwgLTB4MTYwMDAwLCAweDcyMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4YjMwMDAwKSwgKC0xNzksIDQwKSkpCiAKICAgICAgICAgIyBWZXJ5IGN1cnNvcnkgdGVzdAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1wwJyAqIDUsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiB3ICogMTAsICgwLCAwKSkpCiAKICAgICBkZWYgdGVzdF9saW4yYWRwY20oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbMV0sIDEsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgtMjIxLCAzOSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzJdLCAyLCBOb25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbNF0sIDQsIE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgzMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShieXRlYXJyYXkoZGF0YXNbMV0pLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKC0yMjEsIDM5KSkpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzW3ddLCB3LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQogCiAgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oYidcMCcgKiB3ICogMTAsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiA1LCAoMCwgMCkpKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9hZHBjbV9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBzdGF0ZSBtdXN0IGJlIGEgdHVwbGUgb3IgTm9uZSwgbm90IGFuIGludGVnZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgYidcMCcsIDEsIDU1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJhZHBjbSwgYidcMCcsIDEsIDU1NSkKKwogICAgIGRlZiB0ZXN0X2xpbjJhbGF3KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1YScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1syXSwgMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDU1JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzRdLCA0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoYnl0ZWFycmF5KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KG1lbW9yeXZpZXcoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NWEnKQorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzW3ddLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDU1JykKIAogICAgIGRlZiB0ZXN0X2FsYXcybGluKHNlbGYpOgogICAgICAgICBlbmNvZGVkID0gYidceDAwXHgwM1x4MjRceDJhXHg1MVx4NTRceDU1XHg1OFx4NmJceDcxXHg3ZidcCiAgICAgICAgICAgICAgICAgICBiJ1x4ODBceDgzXHhhNFx4YWFceGQxXHhkNFx4ZDVceGQ4XHhlYlx4ZjFceGZmJwogICAgICAgICBzcmMgPSBbLTY4OCwgLTcyMCwgLTIyNDAsIC00MDMyLCAtOSwgLTMsIC0xLCAtMjcsIC0yNDQsIC04MiwgLTEwNiwKICAgICAgICAgICAgICAgIDY4OCwgNzIwLCAyMjQwLCA0MDMyLCA5LCAzLCAxLCAyNywgMjQ0LCA4MiwgMTA2XQotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKGVuY29kZWQsIHcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxMyBmb3IgeCBpbiBzcmMpKSkKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKKyAgICAgICAgICAgIGRlY29kZWQgPSBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxMyBmb3IgeCBpbiBzcmMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKGVuY29kZWQsIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKGJ5dGVhcnJheShlbmNvZGVkKSwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4obWVtb3J5dmlldyhlbmNvZGVkKSwgdyksIGRlY29kZWQpCiAKICAgICAgICAgZW5jb2RlZCA9IGJ5dGVzKHJhbmdlKDI1NikpCi0gICAgICAgIGZvciB3IGluIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CiAgICAgICAgICAgICBkZWNvZGVkID0gYXVkaW9vcC5hbGF3MmxpbihlbmNvZGVkLCB3KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRlY29kZWQsIHcpLCBlbmNvZGVkKQogCiAgICAgZGVmIHRlc3RfbGluMnVsYXcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1sxXSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDY3JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzJdLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbNF0sIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhieXRlYXJyYXkoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4NjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcobWVtb3J5dmlldyhkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbd10sIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQogCiAgICAgZGVmIHRlc3RfdWxhdzJsaW4oc2VsZik6CiAgICAgICAgIGVuY29kZWQgPSBiJ1x4MDBceDBlXHgyOFx4M2ZceDU3XHg2YVx4NzZceDdjXHg3ZVx4N2YnXAogICAgICAgICAgICAgICAgICAgYidceDgwXHg4ZVx4YThceGJmXHhkN1x4ZWFceGY2XHhmY1x4ZmVceGZmJwogICAgICAgICBzcmMgPSBbLTgwMzEsIC00NDQ3LCAtMTQ3MSwgLTQ5NSwgLTE2MywgLTUzLCAtMTgsIC02LCAtMiwgMCwKICAgICAgICAgICAgICAgIDgwMzEsIDQ0NDcsIDE0NzEsIDQ5NSwgMTYzLCA1MywgMTgsIDYsIDIsIDBdCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4oZW5jb2RlZCwgdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDE0IGZvciB4IGluIHNyYykpKQorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgorICAgICAgICAgICAgZGVjb2RlZCA9IHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDE0IGZvciB4IGluIHNyYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4oZW5jb2RlZCwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4oYnl0ZWFycmF5KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihtZW1vcnl2aWV3KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKIAogICAgICAgICAjIEN1cnJlbnQgdS1sYXcgaW1wbGVtZW50YXRpb24gaGFzIHR3byBjb2RlcyBmbyAwOiAweDdmIGFuZCAweGZmLgogICAgICAgICBlbmNvZGVkID0gYnl0ZXMocmFuZ2UoMTI3KSkgKyBieXRlcyhyYW5nZSgxMjgsIDI1NikpCi0gICAgICAgIGZvciB3IGluIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CiAgICAgICAgICAgICBkZWNvZGVkID0gYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRlY29kZWQsIHcpLCBlbmNvZGVkKQogCiAgICAgZGVmIHRlc3RfbXVsKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChiJycsIHcsIDIpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGJ5dGVhcnJheSgpLCB3LCAyKSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChtZW1vcnl2aWV3KGInJyksIHcsIDIpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzW3ddLCB3LCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcMCcgKiBsZW4oZGF0YXNbd10pKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1t3XSwgdywgMSksCkBAIC0yNTMsMTQgKzM0MiwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMFx4MjRceDdmXHg4MFx4N2ZceDgwXHhmZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbMl0sIDIsIDIpLAogICAgICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MjQ2OCwgMHg3ZmZmLCAtMHg4MDAwLCAweDdmZmYsIC0weDgwMDAsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1szXSwgMywgMiksCisgICAgICAgICAgICAgICAgcGFja3NbM10oMCwgMHgyNDY4YWMsIDB4N2ZmZmZmLCAtMHg4MDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzRdLCA0LCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDI0NjhhY2YwLCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwgLTIpKQogCiAgICAgZGVmIHRlc3RfcmF0ZWN2KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihieXRlYXJyYXkoKSwgdywgMSwgODAwMCwgODAwMCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KG1lbW9yeXZpZXcoYicnKSwgdywgMSwgODAwMCwgODAwMCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgNSwgODAwMCwgODAwMCwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpICogNSkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDEsIDgwMDAsIDE2MDAwLCBOb25lKSwKQEAgLTI3Miw3ICszNjgsNyBAQAogICAgICAgICBkMiwgc3RhdGUgPSBhdWRpb29wLnJhdGVjdihiJ1x4MDBceDAxXHgwMicsIDEsIDEsIDgwMDAsIDE2MDAwLCBzdGF0ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSArIGQyLCBiJ1wwMDBcMDAwXDAwMVwwMDFcMDAyXDAwMVwwMDBcMDAwXDAwMVwwMDFcMDAyJykKIAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZDAsIHN0YXRlMCA9IGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCAxNjAwMCwgTm9uZSkKICAgICAgICAgICAgIGQsIHN0YXRlID0gYicnLCBOb25lCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YXNbd10pLCB3KToKQEAgLTI4MywxMyArMzc5LDE1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBzdGF0ZTApCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UoYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UoYnl0ZWFycmF5KCksIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShtZW1vcnl2aWV3KGInJyksIHcpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShwYWNrc1t3XSgwLCAxLCAyKSwgdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKDIsIDEsIDApKQogCiAgICAgZGVmIHRlc3RfdG9tb25vKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZGF0YTEgPSBkYXRhc1t3XQogICAgICAgICAgICAgZGF0YTIgPSBieXRlYXJyYXkoMiAqIGxlbihkYXRhMSkpCiAgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKQEAgLTI5OSw5ICszOTcsMTMgQEAKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgogICAgICAgICAgICAgICAgIGRhdGEyW2srdzo6Mip3XSA9IGRhdGExW2s6OnddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKGRhdGEyLCB3LCAwLjUsIDAuNSksIGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvbW9ubyhieXRlYXJyYXkoZGF0YTIpLCB3LCAwLjUsIDAuNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvbW9ubyhtZW1vcnl2aWV3KGRhdGEyKSwgdywgMC41LCAwLjUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMSkKIAogICAgIGRlZiB0ZXN0X3Rvc3RlcmVvKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZGF0YTEgPSBkYXRhc1t3XQogICAgICAgICAgICAgZGF0YTIgPSBieXRlYXJyYXkoMiAqIGxlbihkYXRhMSkpCiAgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKQEAgLTMxMSwxNCArNDEzLDI1IEBACiAgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKICAgICAgICAgICAgICAgICBkYXRhMltrK3c6OjIqd10gPSBkYXRhMVtrOjp3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvc3RlcmVvKGRhdGExLCB3LCAxLCAxKSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8oYnl0ZWFycmF5KGRhdGExKSwgdywgMSwgMSksIGRhdGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvc3RlcmVvKG1lbW9yeXZpZXcoZGF0YTEpLCB3LCAxLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTIpCiAKICAgICBkZWYgdGVzdF9maW5kZmFjdG9yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihkYXRhc1syXSwgZGF0YXNbMl0pLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKGJ5dGVhcnJheShkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShkYXRhc1syXSkpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKG1lbW9yeXZpZXcoZGF0YXNbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGRhdGFzWzJdKSksIDEuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoYidcMCcgKiBsZW4oZGF0YXNbMl0pLCBkYXRhc1syXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wKQogCiAgICAgZGVmIHRlc3RfZmluZGZpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl0sIGRhdGFzWzJdKSwgKDAsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGJ5dGVhcnJheShkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShkYXRhc1syXSkpLCAoMCwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQobWVtb3J5dmlldyhkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoZGF0YXNbMl0pKSwgKDAsIDEuMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGRhdGFzWzJdLCBwYWNrc1syXSgxLCAyLCAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDgwMzguOCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGRhdGFzWzJdWzotMl0gKiA1ICsgZGF0YXNbMl0sIGRhdGFzWzJdKSwKQEAgLTMyNiwxNiArNDM5LDM3IEBACiAKICAgICBkZWYgdGVzdF9maW5kbWF4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZG1heChkYXRhc1syXSwgMSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KGJ5dGVhcnJheShkYXRhc1syXSksIDEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZG1heChtZW1vcnl2aWV3KGRhdGFzWzJdKSwgMSksIDUpCiAKICAgICBkZWYgdGVzdF9nZXRzYW1wbGUoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhID0gcGFja3Nbd10oMCwgMSwgLTEsIG1heHZhbHVlc1t3XSwgbWludmFsdWVzW3ddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAwKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoYnl0ZWFycmF5KGRhdGEpLCB3LCAwKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUobWVtb3J5dmlldyhkYXRhKSwgdywgMCksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDEpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAyKSwgLTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDMpLCBtYXh2YWx1ZXNbd10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDQpLCBtaW52YWx1ZXNbd10pCiAKKyAgICBkZWYgdGVzdF9ieXRlc3dhcChzZWxmKToKKyAgICAgICAgc3dhcHBlZF9kYXRhcyA9IHsKKyAgICAgICAgICAgIDE6IGRhdGFzWzFdLAorICAgICAgICAgICAgMjogcGFja3NbMl0oMCwgMHgzNDEyLCAweDY3NDUsIC0weDY2NDYsIC0weDgxLCAweDgwLCAtMSksCisgICAgICAgICAgICAzOiBwYWNrc1szXSgwLCAweDU2MzQxMiwgLTB4NzY5OGJiLCAweDc3OThiYSwgLTB4ODEsIDB4ODAsIC0xKSwKKyAgICAgICAgICAgIDQ6IHBhY2tzWzRdKDAsIDB4Nzg1NjM0MTIsIC0weDU0NzY5OGJiLCAweDU1NzY5OGJhLAorICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODEsIDB4ODAsIC0xKSwKKyAgICAgICAgfQorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKGInJywgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChkYXRhc1t3XSwgdyksIHN3YXBwZWRfZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoc3dhcHBlZF9kYXRhc1t3XSwgdyksIGRhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKGJ5dGVhcnJheShkYXRhc1t3XSksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVkX2RhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKG1lbW9yeXZpZXcoZGF0YXNbd10pLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcHBlZF9kYXRhc1t3XSkKKwogICAgIGRlZiB0ZXN0X25lZ2F0aXZlbGVuKHNlbGYpOgogICAgICAgICAjIGZyb20gaXNzdWUgMzMwNiwgcHJldmlvdXNseSBpdCBzZWdmYXVsdGVkCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsCkBAIC0zNjUsMTAgKzQ5OSwzMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5saW4yYWxhdywgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBkYXRhLCBzaXplLCBzdGF0ZSkKIAorICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICdhYmNkJworICAgICAgICBzaXplID0gMgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuZ2V0c2FtcGxlLCBkYXRhLCBzaXplLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubWF4LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubWlubWF4LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYXZnLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3Aucm1zLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYXZncHAsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tYXhwcCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmNyb3NzLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubXVsLCBkYXRhLCBzaXplLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC50b21vbm8sIGRhdGEsIHNpemUsIDAuNSwgMC41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AudG9zdGVyZW8sIGRhdGEsIHNpemUsIDAuNSwgMC41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYWRkLCBkYXRhLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYmlhcywgZGF0YSwgc2l6ZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnJldmVyc2UsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4ybGluLCBkYXRhLCBzaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AucmF0ZWN2LCBkYXRhLCBzaXplLCAxLCAxLCAxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMnVsYXcsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4yYWxhdywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJhZHBjbSwgZGF0YSwgc2l6ZSwgTm9uZSkKKwogICAgIGRlZiB0ZXN0X3dyb25nc2l6ZShzZWxmKToKICAgICAgICAgZGF0YSA9IGInYWJjZGVmZ2gnCiAgICAgICAgIHN0YXRlID0gTm9uZQotICAgICAgICBmb3Igc2l6ZSBpbiAoLTEsIDAsIDMsIDUsIDEwMjQpOgorICAgICAgICBmb3Igc2l6ZSBpbiAoLTEsIDAsIDUsIDEwMjQpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC51bGF3MmxpbiwgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYWxhdzJsaW4sIGRhdGEsIHNpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgZGF0YSwgc2l6ZSwgc3RhdGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weSBiL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CmluZGV4IDEzNjk1ZGUuLmI5NzM4ZGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CkBAIC01LDEwICs1LDIxIEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNzCi0KK2ltcG9ydCBzdHJ1Y3QKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5CiAKIAogY2xhc3MgTGVnYWN5QmFzZTY0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBMZWdhY3kgQVBJIGlzIG5vdCBhcyBwZXJtaXNzaXZlIGFzIHRoZSBtb2Rlcm4gQVBJCisgICAgZGVmIGNoZWNrX3R5cGVfZXJyb3JzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIFtdKQorICAgICAgICBtdWx0aWRpbWVuc2lvbmFsID0gbWVtb3J5dmlldyhiIjEyMzQiKS5jYXN0KCdCJywgKDIsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIG11bHRpZGltZW5zaW9uYWwpCisgICAgICAgIGludF9kYXRhID0gbWVtb3J5dmlldyhiIjEyMzQiKS5jYXN0KCdJJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBpbnRfZGF0YSkKKwogICAgIGRlZiB0ZXN0X2VuY29kZWJ5dGVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgZXEoYmFzZTY0LmVuY29kZWJ5dGVzKGIid3d3LnB5dGhvbi5vcmciKSwgYiJkM2QzTG5CNWRHaHZiaTV2Y21jPVxuIikKQEAgLTI0LDcgKzM1LDkgQEAKICAgICAgICAgICAgYiJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09XG4iKQogICAgICAgICAjIE5vbi1ieXRlcwogICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYnl0ZWFycmF5KGInYWJjJykpLCBiJ1lXSmpcbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmVuY29kZWJ5dGVzLCAiIikKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZWJ5dGVzKG1lbW9yeXZpZXcoYidhYmMnKSksIGInWVdKalxuJykKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZWJ5dGVzKGFycmF5KCdCJywgYidhYmMnKSksIGInWVdKalxuJykKKyAgICAgICAgc2VsZi5jaGVja190eXBlX2Vycm9ycyhiYXNlNjQuZW5jb2RlYnl0ZXMpCiAKICAgICBkZWYgdGVzdF9kZWNvZGVieXRlcyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC00MSw3ICs1NCw5IEBACiAgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhiJycpLCBiJycpCiAgICAgICAgICMgTm9uLWJ5dGVzCiAgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhieXRlYXJyYXkoYidZV0pqXG4nKSksIGInYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuZGVjb2RlYnl0ZXMsICIiKQorICAgICAgICBlcShiYXNlNjQuZGVjb2RlYnl0ZXMobWVtb3J5dmlldyhiJ1lXSmpcbicpKSwgYidhYmMnKQorICAgICAgICBlcShiYXNlNjQuZGVjb2RlYnl0ZXMoYXJyYXkoJ0InLCBiJ1lXSmpcbicpKSwgYidhYmMnKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGVfZXJyb3JzKGJhc2U2NC5kZWNvZGVieXRlcykKIAogICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC03Myw2ICs4OCw0MiBAQAogCiAKIGNsYXNzIEJhc2VYWVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgTW9kZXJuIEFQSSBjb21wbGV0ZWx5IGlnbm9yZXMgZXhwb3J0ZWQgZGltZW5zaW9uIGFuZCBmb3JtYXQgZGF0YSBhbmQKKyAgICAjIHRyZWF0cyBhbnkgYnVmZmVyIGFzIGEgc3RyZWFtIG9mIGJ5dGVzCisgICAgZGVmIGNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBbXSkKKworICAgIGRlZiBjaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgW10pCisKKyAgICBkZWYgY2hlY2tfb3RoZXJfdHlwZXMoc2VsZiwgZiwgYnl0ZXNfZGF0YSwgZXhwZWN0ZWQpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYiA9IGJ5dGVhcnJheShieXRlc19kYXRhKQorICAgICAgICBlcShmKGIpLCBleHBlY3RlZCkKKyAgICAgICAgIyBUaGUgYnl0ZWFycmF5IHdhc24ndCBtdXRhdGVkCisgICAgICAgIGVxKGIsIGJ5dGVzX2RhdGEpCisgICAgICAgIGVxKGYobWVtb3J5dmlldyhieXRlc19kYXRhKSksIGV4cGVjdGVkKQorICAgICAgICBlcShmKGFycmF5KCdCJywgYnl0ZXNfZGF0YSkpLCBleHBlY3RlZCkKKyAgICAgICAgIyBYWFggd2h5IGlzIGI2NGVuY29kZSBoYXJkY29kZWQgaGVyZT8KKyAgICAgICAgc2VsZi5jaGVja19ub25ieXRlX2VsZW1lbnRfZm9ybWF0KGJhc2U2NC5iNjRlbmNvZGUsIGJ5dGVzX2RhdGEpCisgICAgICAgIHNlbGYuY2hlY2tfbXVsdGlkaW1lbnNpb25hbChiYXNlNjQuYjY0ZW5jb2RlLCBieXRlc19kYXRhKQorCisgICAgZGVmIGNoZWNrX211bHRpZGltZW5zaW9uYWwoc2VsZiwgZiwgZGF0YSk6CisgICAgICAgIHBhZGRpbmcgPSBiIlx4MDAiIGlmIGxlbihkYXRhKSAlIDIgZWxzZSBiIiIKKyAgICAgICAgYnl0ZXNfZGF0YSA9IGRhdGEgKyBwYWRkaW5nICMgTWFrZSBzdXJlIGNhc3Qgd29ya3MKKyAgICAgICAgc2hhcGUgPSAobGVuKGJ5dGVzX2RhdGEpIC8vIDIsIDIpCisgICAgICAgIG11bHRpZGltZW5zaW9uYWwgPSBtZW1vcnl2aWV3KGJ5dGVzX2RhdGEpLmNhc3QoJ0InLCBzaGFwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKG11bHRpZGltZW5zaW9uYWwpLCBmKGJ5dGVzX2RhdGEpKQorCisgICAgZGVmIGNoZWNrX25vbmJ5dGVfZWxlbWVudF9mb3JtYXQoc2VsZiwgZiwgZGF0YSk6CisgICAgICAgIHBhZGRpbmcgPSBiIlx4MDAiICogKCg0IC0gbGVuKGRhdGEpKSAlIDQpCisgICAgICAgIGJ5dGVzX2RhdGEgPSBkYXRhICsgcGFkZGluZyAjIE1ha2Ugc3VyZSBjYXN0IHdvcmtzCisgICAgICAgIGludF9kYXRhID0gbWVtb3J5dmlldyhieXRlc19kYXRhKS5jYXN0KCdJJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGludF9kYXRhKSwgZihieXRlc19kYXRhKSkKKworCiAgICAgZGVmIHRlc3RfYjY0ZW5jb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBUZXN0IGRlZmF1bHQgYWxwaGFiZXQKQEAgLTkwLDEzICsxNDEsMTYgQEAKICAgICAgICAgICAgYiJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09IikKICAgICAgICAgIyBUZXN0IHdpdGggYXJiaXRyYXJ5IGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWInKiQnKSwgYicwMWEqYiRjZCcpCi0gICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYnl0ZWFycmF5KGInYWJjZCcpKSwgYidZV0pqWkE9PScpCiAgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1ieXRlYXJyYXkoYicqJCcpKSwKICAgICAgICAgICAgYicwMWEqYiRjZCcpCi0gICAgICAgICMgQ2hlY2sgaWYgcGFzc2luZyBhIHN0ciBvYmplY3QgcmFpc2VzIGFuIGVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGVuY29kZSwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGVuY29kZSwgYiIiLCBhbHRjaGFycz0iIikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPW1lbW9yeXZpZXcoYicqJCcpKSwKKyAgICAgICAgICAgYicwMWEqYiRjZCcpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1hcnJheSgnQicsIGInKiQnKSksCisgICAgICAgICAgIGInMDFhKmIkY2QnKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iNjRlbmNvZGUsIGInYWJjZCcsIGInWVdKalpBPT0nKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjY0ZW5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsIGIiIiwgYWx0Y2hhcnM9IiokIikKICAgICAgICAgIyBUZXN0IHN0YW5kYXJkIGFscGhhYmV0CiAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoYiJ3d3cucHl0aG9uLm9yZyIpLCBiImQzZDNMbkI1ZEdodmJpNXZjbWM9IikKICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShiImEiKSwgYiJZUT09IikKQEAgLTExMCwxNSArMTY0LDE1IEBACiAgICAgICAgICAgIGIiUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wTlQiCiAgICAgICAgICAgIGIiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PSIpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoYnl0ZWFycmF5KGInYWJjZCcpKSwgYidZV0pqWkE9PScpCi0gICAgICAgICMgQ2hlY2sgaWYgcGFzc2luZyBhIHN0ciBvYmplY3QgcmFpc2VzIGFuIGVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FiY2QnLCBiJ1lXSmpaQT09JykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSkKICAgICAgICAgIyBUZXN0IHdpdGggJ1VSTCBzYWZlJyBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpLCBiJzAxYS1iX2NkJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlKGJ5dGVhcnJheShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpKSwgYicwMWEtYl9jZCcpCi0gICAgICAgICMgQ2hlY2sgaWYgcGFzc2luZyBhIHN0ciBvYmplY3QgcmFpc2VzIGFuIGVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQzVlx4YmVvXHhmN1x4MWQnLCBiJzAxYS1iX2NkJykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlKQogCiAgICAgZGVmIHRlc3RfYjY0ZGVjb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTE0MSw3ICsxOTUsOCBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZShieXRlYXJyYXkoYiJZV0pqIikpLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI2NGRlY29kZSwgYiJZV0pqIiwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjY0ZGVjb2RlKQogCiAgICAgICAgICMgVGVzdCB3aXRoIGFyYml0cmFyeSBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIHRlc3RzX2FsdGNoYXJzID0geyhiJzAxYSpiJGNkJywgYicqJCcpOiBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsCkBAIC0xNjAsNyArMjE1LDggQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoYnl0ZWFycmF5KGIiWVdKaiIpKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUsIGIiWVdKaiIsIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSkKIAogICAgICAgICAjIFRlc3Qgd2l0aCAnVVJMIHNhZmUnIGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgdGVzdHNfdXJsc2FmZSA9IHtiJzAxYS1iX2NkJzogYidceGQzVlx4YmVvXHhmN1x4MWQnLApAQCAtMTcwLDcgKzIyNiw5IEBACiAgICAgICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKGJ5dGVhcnJheShiJzAxYS1iX2NkJykpLCBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlLCBiJzAxYS1iX2NkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSkKIAogICAgIGRlZiB0ZXN0X2I2NGRlY29kZV9wYWRkaW5nX2Vycm9yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiaW5hc2NpaS5FcnJvciwgYmFzZTY0LmI2NGRlY29kZSwgYidhYmMnKQpAQCAtMjA1LDggKzI2Myw4IEBACiAgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYidhYmNkJyksIGInTUZSR0daQT0nKQogICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGInYWJjZGUnKSwgYidNRlJHR1pERicpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYnl0ZWFycmF5KGInYWJjZCcpKSwgYidNRlJHR1pBPScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIzMmVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIzMmVuY29kZSwgYidhYmNkJywgYidNRlJHR1pBPScpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMzJlbmNvZGUpCiAKICAgICBkZWYgdGVzdF9iMzJkZWNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjIyLDcgKzI4MCw4IEBACiAgICAgICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKGJ5dGVhcnJheShiJ01GUkdHPT09JykpLCBiJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIzMmRlY29kZSwgYidNRlJHRz09PScsIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIzMmRlY29kZSkKIAogICAgIGRlZiB0ZXN0X2IzMmRlY29kZV9jYXNlZm9sZChzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yNzcsOCArMzM2LDkgQEAKICAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJyksIGInMDEwMkFCQ0RFRicpCiAgICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoYidceDAwJyksIGInMDAnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGJ5dGVhcnJheShiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykpLCBiJzAxMDJBQkNERUYnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iMTZlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMTZlbmNvZGUsIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMDEwMkFCQ0RFRicpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMTZlbmNvZGUpCiAKICAgICBkZWYgdGVzdF9iMTZkZWNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjkzLDE0ICszNTMsMjY4IEBACiAgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYicwMTAyYWJjZGVmJywgVHJ1ZSksIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQogICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKCcwMTAyYWJjZGVmJywgVHJ1ZSksIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKGJ5dGVhcnJheShiIjAxMDJBQkNERUYiKSksIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMTZkZWNvZGUsIGIiMDEwMkFCQ0RFRiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMTZkZWNvZGUpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYnl0ZWFycmF5KGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKKyAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUobWVtb3J5dmlldyhiIjAxMDJhYmNkZWYiKSwgVHJ1ZSksCisgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKGFycmF5KCdCJywgYiIwMTAyYWJjZGVmIiksIFRydWUpLAorICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKworICAgIGRlZiB0ZXN0X2E4NWVuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGIid3d3LnB5dGhvbi5vcmciOiBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nLAorICAgICAgICAgICAgYnl0ZXMocmFuZ2UoMjU1KSk6IGIiIiIhISotJyI5ZXU3I1JMaEckazNbVyYub05nJ0dWQiIoYD01MiokJCIiIgorICAgICAgICAgICAgICAgYiIiIihCKzxfcFIsVUZjYi1uLVZyLzFpSi0wSlA9PTFjNzBNMyZzI100P1lrbTVYQF8oNnEnUjg4NGNFIiIiCisgICAgICAgICAgICAgICBiIiIiSDlNSjhYOmYxK2g8KWx0Iz1CU2czPls6WkM/dCFNU0E3XUBjQlBEM3NDaSsnLkUsZm8+RkVNYk4iIiIKKyAgICAgICAgICAgICAgIGIiIiJHXjRVXkkhcEhuSjpXPClLUz4vOUxsJSJJTi9gallPSEddaVBhLlEkUiRqRDRTPVE3RFRWOCpUVSIiIgorICAgICAgICAgICAgICAgYiIiIm5zcmRXMlpldFhLQVkvWWQoTD9bJ2Q/T1xcQEsyX11ZMiVvXnFtbipgNVRhOmFOO1RKYmciR1pkIiIiCisgICAgICAgICAgICAgICBiIiIiKl46amVDRS4lZlxcLCE1Z3RnaUVpOE5cXFVqUTVPZWtpcUJ1bS1YNjBuRj8pQG9fJXFQcSJhZGAiIiIKKyAgICAgICAgICAgICAgIGIiIiJyO0hUIiIiLAorICAgICAgICAgICAgYiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAgICAgIGIiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IjoKKyAgICAgICAgICAgICAgICBiJ0A6RV9XQVMsUmdCa2hGIkQvTzkyRUg2LEJGYHF0UkgkVmJDNlVYQDQ3bj8zRDkyJiZUJworICAgICAgICAgICAgICAgIGIiOkphbmQ7Y0hhdD0nL1UvMEpQPT0xYzcwTTMmci1JLDs8Rk4uT1pgLTNdb1NXL2crQShIW1AiLAorICAgICAgICAgICAgYiJubyBwYWRkaW5nLi4iOiBiJ0RKcFk6QDpXbl9ESihSUycsCisgICAgICAgICAgICBiInplcm8gY29tcHJlc3Npb25cMFwwXDBcMCI6IGInSD1fLDgrQ2Y+LEUsb04yRihvUTF6JywKKyAgICAgICAgICAgIGIiemVybyBjb21wcmVzc2lvblwwXDBcMCI6IGInSD1fLDgrQ2Y+LEUsb04yRihvUTEhISEhJywKKyAgICAgICAgICAgIGIiQm91bmRhcnk6XDBcMFwwXDAiOiBiJzY+cSFhQTc5TSgzV0stWyEhJywKKyAgICAgICAgICAgIGIiU3BhY2UgY29tcHI6ICAgICI6IGInO2ZIL1RBS1lLJEQvYU1WKzxWZEwnLAorICAgICAgICAgICAgYidceGZmJzogYidycicsCisgICAgICAgICAgICBiJ1x4ZmYnKjI6IGInczhOJywKKyAgICAgICAgICAgIGInXHhmZicqMzogYidzOFcqJywKKyAgICAgICAgICAgIGInXHhmZicqNDogYidzOFctIScsCisgICAgICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShkYXRhKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShkYXRhLCBhZG9iZT1GYWxzZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoZGF0YSwgYWRvYmU9VHJ1ZSksIGInPH4nICsgcmVzICsgYid+PicsIGRhdGEpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYTg1ZW5jb2RlLCBiInd3dy5weXRob24ub3JnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmE4NWVuY29kZSwgIiIpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInd3dy5weXRob24ub3JnIiwgd3JhcGNvbD03LCBhZG9iZT1GYWxzZSksCisgICAgICAgICAgIGInR0JcXDZgRS1cblpQPURmLjFcbkdFYj4nKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIiXDBcMFwwXDB3d3cucHl0aG9uLm9yZyIsIHdyYXBjb2w9NywgYWRvYmU9RmFsc2UpLAorICAgICAgICAgICBiJ3pHQlxcNmBFXG4tWlA9RGYuXG4xR0ViPicpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ3d3cucHl0aG9uLm9yZyIsIHdyYXBjb2w9NywgYWRvYmU9VHJ1ZSksCisgICAgICAgICAgIGInPH5HQlxcNmBcbkUtWlA9RGZcbi4xR0ViPlxufj4nKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYicgJyo4LCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYid5eScpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYicgJyo3LCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYid5KzxWZCcpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYicgJyo2LCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYid5KzxVJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjUsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3krOScpCisKKyAgICBkZWYgdGVzdF9iODVlbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHRlc3RzID0geworICAgICAgICAgICAgYicnOiBiJycsCisgICAgICAgICAgICBiJ3d3dy5weXRob24ub3JnJzogYidjWHhMI2FDdmxTWipER2NhJVQnLAorICAgICAgICAgICAgYnl0ZXMocmFuZ2UoMjU1KSk6IGIiIiIwMDlDNjFPKX5NMm5oLWMzPUl3czVEXmorNmNyWDE3I1NLSDkzMzdYIiIiCisgICAgICAgICAgICAgICAgYiIiIkFSIV9uQnFiJiVDQENye0VHO2ZDRmZsU1NHJk1GaUk1fDJ5SlV1PT9LdFYhN0xgNm5OTkomYWQiIiIKKyAgICAgICAgICAgICAgICBiIiIiT2lmTnRQKkdBLVI4Pn0yU1hvK0lUd1B2WVV9MGlvV015ViZYbFpJfFk7QTZEYUIqXlRiYWklaiIiIgorICAgICAgICAgICAgICAgIGIiIiJjekpxemUwX2RAZlBzUjhnb1RFT2g+NDFlakUjPHVrZGN5O2wkRG0zbjM8WkpvU21NWnByTjlwIiIiCisgICAgICAgICAgICAgICAgYiIiInFAfHsoc0h2KX10Z1d1RXUoN2hVdzYoVWt4VmdIIXl1SDReemA/QDkjS3AkUCRqUXBmJSsxY3YiIiIKKyAgICAgICAgICAgICAgICBiIiIiKDl6UDwpWWFENCp4QjBLK30rO2E7Tmp4cTxtS2spPTtgWH4/Q3RMRkBiVThWXiE0YGxgMSQoIyIiIgorICAgICAgICAgICAgICAgIGIiIiJ7UWRwIiIiLAorICAgICAgICAgICAgYiIiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIiIKKyAgICAgICAgICAgICAgICBiIiIiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IiIiOgorICAgICAgICAgICAgICAgIGIiIiJWUGEhc1dvQm4rWD0tYjFaRWtPSGFkTEJYYiNgfW5kM3IlWUxxdFZKTUBVSVpPSDU1cFBmJEAoIiIiCisgICAgICAgICAgICAgICAgYiIiIlEmZCR9UzZFcUVGZmxTU0cmTUZpSTV7Q2VCUVJiakRrdiNDSXleb3NFK0FXN2R3bCIiIiwKKyAgICAgICAgICAgIGInbm8gcGFkZGluZy4uJzogYidaZl91UFZQc0AhWmY3bm8nLAorICAgICAgICAgICAgYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwXHgwMCc6IGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwMCcsCisgICAgICAgICAgICBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDAnOiBiJ2RTIUJOQVkqVEJhQl5qSGI3Xm1HMDAwMCcsCisgICAgICAgICAgICBiIiIiQm91bmRhcnk6XHgwMFx4MDBceDAwXHgwMCIiIjogYiIiIkxUYDAkV01PaTdJc2dDdzAwIiIiLAorICAgICAgICAgICAgYidTcGFjZSBjb21wcjogICAgJzogYidRKmRFcFdndWczWkUkaXJBUnIoaCcsCisgICAgICAgICAgICBiJ1x4ZmYnOiBiJ3t7JywKKyAgICAgICAgICAgIGInXHhmZicqMjogYid8TmonLAorICAgICAgICAgICAgYidceGZmJyozOiBiJ3xOczknLAorICAgICAgICAgICAgYidceGZmJyo0OiBiJ3xOc0MwJywKKyAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoZGF0YSksIHJlcykKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iODVlbmNvZGUsIGIid3d3LnB5dGhvbi5vcmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY1h4TCNhQ3ZsU1oqREdjYSVUJykKKworICAgIGRlZiB0ZXN0X2E4NWRlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGInR0JcXDZgRS1aUD1EZi4xR0ViPic6IGInd3d3LnB5dGhvbi5vcmcnLAorICAgICAgICAgICAgYiIiIiEgISAqIC0nIlxuXHRcdDlldVxyXG43IyAgUkxcdmhHJGszW1cmLm9OZydHVkIiKGA9NTIqJCQiIiIKKyAgICAgICAgICAgICAgIGIiIiIoQis8X3BSLFVGY2Itbi1Wci8xaUotMEpQPT0xYzcwTTMmcyNdND9Za201WEBfKDZxJ1I4ODRjRSIiIgorICAgICAgICAgICAgICAgYiIiIkg5TUo4WDpmMStoPClsdCM9QlNnMz5bOlpDP3QhTVNBN11AY0JQRDNzQ2krJy5FLGZvPkZFTWJOIiIiCisgICAgICAgICAgICAgICBiIiIiR140VV5JIXBIbko6VzwpS1M+LzlMbCUiSU4vYGpZT0hHXWlQYS5RJFIkakQ0Uz1RN0RUVjgqVFUiIiIKKyAgICAgICAgICAgICAgIGIiIiJuc3JkVzJaZXRYS0FZL1lkKEw/WydkP09cXEBLMl9dWTIlb15xbW4qYDVUYTphTjtUSmJnIkdaZCIiIgorICAgICAgICAgICAgICAgYiIiIipeOmplQ0UuJWZcXCwhNWd0Z2lFaThOXFxValE1T2VraXFCdW0tWDYwbkY/KUBvXyVxUHEiYWRgIiIiCisgICAgICAgICAgICAgICBiIiIicjtIVCIiIjogYnl0ZXMocmFuZ2UoMjU1KSksCisgICAgICAgICAgICBiIiIiQDpFX1dBUyxSZ0JraEYiRC9POTJFSDYsQkZgcXRSSCRWYkM2VVhANDduPzNEOTImJlQ6SmFuZDtjIiIiCisgICAgICAgICAgICAgICAgYiIiIkhhdD0nL1UvMEpQPT0xYzcwTTMmci1JLDs8Rk4uT1pgLTNdb1NXL2crQShIW1AiIiI6CisgICAgICAgICAgICAgICAgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQnCisgICAgICAgICAgICAgICAgYic1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9JywKKyAgICAgICAgICAgIGInREpwWTpAOlduX0RKKFJTJzogYidubyBwYWRkaW5nLi4nLAorICAgICAgICAgICAgYidIPV8sOCtDZj4sRSxvTjJGKG9RMXonOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInSD1fLDgrQ2Y+LEUsb04yRihvUTEhISEhJzogYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInNj5xIWFBNzlNKDNXSy1bISEnOiBiIkJvdW5kYXJ5Olx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICAgYic7ZkgvVEFLWUskRC9hTVYrPFZkTCc6IGInU3BhY2UgY29tcHI6ICAgICcsCisgICAgICAgICAgICBiJ3JyJzogYidceGZmJywKKyAgICAgICAgICAgIGInczhOJzogYidceGZmJyoyLAorICAgICAgICAgICAgYidzOFcqJzogYidceGZmJyozLAorICAgICAgICAgICAgYidzOFctISc6IGInXHhmZicqNCwKKyAgICAgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGRhdGEpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGRhdGEsIGFkb2JlPUZhbHNlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShkYXRhLmRlY29kZSgiYXNjaWkiKSwgYWRvYmU9RmFsc2UpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInPH4nICsgZGF0YSArIGInfj4nLCBhZG9iZT1UcnVlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZSgnPH4lc34+JyAlIGRhdGEuZGVjb2RlKCJhc2NpaSIpLCBhZG9iZT1UcnVlKSwKKyAgICAgICAgICAgICAgIHJlcywgZGF0YSkKKworICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIneXknLCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYicgJyo4KQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIneSs8VmQnLCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYicgJyo3KQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIneSs8VScsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjYpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5KzknLCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYicgJyo1KQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmE4NWRlY29kZSwgYidHQlxcNmBFLVpQPURmLjFHRWI+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiInd3dy5weXRob24ub3JnIikKKworICAgIGRlZiB0ZXN0X2I4NWRlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGInY1h4TCNhQ3ZsU1oqREdjYSVUJzogYid3d3cucHl0aG9uLm9yZycsCisgICAgICAgICAgICBiIiIiMDA5QzYxTyl+TTJuaC1jMz1Jd3M1RF5qKzZjclgxNyNTS0g5MzM3WCIiIgorICAgICAgICAgICAgICAgIGIiIiJBUiFfbkJxYiYlQ0BDcntFRztmQ0ZmbFNTRyZNRmlJNXwyeUpVdT0/S3RWITdMYDZuTk5KJmFkIiIiCisgICAgICAgICAgICAgICAgYiIiIk9pZk50UCpHQS1SOD59MlNYbytJVHdQdllVfTBpb1dNeVYmWGxaSXxZO0E2RGFCKl5UYmFpJWoiIiIKKyAgICAgICAgICAgICAgICBiIiIiY3pKcXplMF9kQGZQc1I4Z29URU9oPjQxZWpFIzx1a2RjeTtsJERtM24zPFpKb1NtTVpwck45cCIiIgorICAgICAgICAgICAgICAgIGIiIiJxQHx7KHNIdil9dGdXdUV1KDdoVXc2KFVreFZnSCF5dUg0XnpgP0A5I0twJFAkalFwZiUrMWN2IiIiCisgICAgICAgICAgICAgICAgYiIiIig5elA8KVlhRDQqeEIwSyt9KzthO05qeHE8bUtrKT07YFh+P0N0TEZAYlU4Vl4hNGBsYDEkKCMiIiIKKyAgICAgICAgICAgICAgICBiIiIie1FkcCIiIjogYnl0ZXMocmFuZ2UoMjU1KSksCisgICAgICAgICAgICBiIiIiVlBhIXNXb0JuK1g9LWIxWkVrT0hhZExCWGIjYH1uZDNyJVlMcXRWSk1AVUlaT0g1NXBQZiRAKCIiIgorICAgICAgICAgICAgICAgIGIiIiJRJmQkfVM2RXFFRmZsU1NHJk1GaUk1e0NlQlFSYmpEa3YjQ0l5Xm9zRStBVzdkd2wiIiI6CisgICAgICAgICAgICAgICAgYiIiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIiIKKyAgICAgICAgICAgICAgICBiIiIiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IiIiLAorICAgICAgICAgICAgYidaZl91UFZQc0AhWmY3bm8nOiBiJ25vIHBhZGRpbmcuLicsCisgICAgICAgICAgICBiJ2RTIUJOQVkqVEJhQl5qSGI3Xm1HMDAwMDAnOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwJzogYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGIiIiJMVGAwJFdNT2k3SXNnQ3cwMCIiIjogYiIiIkJvdW5kYXJ5Olx4MDBceDAwXHgwMFx4MDAiIiIsCisgICAgICAgICAgICBiJ1EqZEVwV2d1ZzNaRSRpckFScihoJzogYidTcGFjZSBjb21wcjogICAgJywKKyAgICAgICAgICAgIGIne3snOiBiJ1x4ZmYnLAorICAgICAgICAgICAgYid8TmonOiBiJ1x4ZmYnKjIsCisgICAgICAgICAgICBiJ3xOczknOiBiJ1x4ZmYnKjMsCisgICAgICAgICAgICBiJ3xOc0MwJzogYidceGZmJyo0LAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShkYXRhKSwgcmVzKQorICAgICAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShkYXRhLmRlY29kZSgiYXNjaWkiKSksIHJlcykKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iODVkZWNvZGUsIGInY1h4TCNhQ3ZsU1oqREdjYSVUJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiInd3dy5weXRob24ub3JnIikKKworICAgIGRlZiB0ZXN0X2E4NV9wYWRkaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieCIsIHBhZD1UcnVlKSwgYidHUTdeRCcpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eCIsIHBhZD1UcnVlKSwgYiJHXicyZyIpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eHgiLCBwYWQ9VHJ1ZSksIGInR14rSDUnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieHh4eCIsIHBhZD1UcnVlKSwgYidHXitJWCcpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eHh4eCIsIHBhZD1UcnVlKSwgYidHXitJWEdRN15EJykKKworICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR1E3XkQnKSwgYiJ4XHgwMFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiIkdeJzJnIiksIGIieHhceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHXitINScpLCBiInh4eFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR14rSVgnKSwgYiJ4eHh4IikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0deK0lYR1E3XkQnKSwgYiJ4eHh4eFx4MDBceDAwXHgwMCIpCisKKyAgICBkZWYgdGVzdF9iODVfcGFkZGluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiIngiLCBwYWQ9VHJ1ZSksIGInY21NelonKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHgiLCBwYWQ9VHJ1ZSksIGInY3o2SCsnKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHh4IiwgcGFkPVRydWUpLCBiJ2N6QWRLJykKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiInh4eHgiLCBwYWQ9VHJ1ZSksIGInY3pBZXQnKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHh4eHgiLCBwYWQ9VHJ1ZSksIGInY3pBZXRjbU16WicpCisKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2NtTXpaJyksIGIieFx4MDBceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjejZIKycpLCBiInh4XHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3pBZEsnKSwgYiJ4eHhceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6QWV0JyksIGIieHh4eCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjekFldGNtTXpaJyksIGIieHh4eHhceDAwXHgwMFx4MDAiKQorCisgICAgZGVmIHRlc3RfYTg1ZGVjb2RlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgaWxsZWdhbCA9IChzZXQocmFuZ2UoMzIpKSB8IHNldChyYW5nZSgxMTgsIDI1NikpKSAtIHNldChiJyBcdFxuXHJcdicpCisgICAgICAgIGZvciBjIGluIGlsbGVnYWw6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGInISEhIScgKyBieXRlcyhbY10pKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2c9Ynl0ZXMoW2NdKSk6CisgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiJyEhISEnICsgYnl0ZXMoW2NdKSwgYWRvYmU9RmFsc2UpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGInPH4hISEhJyArIGJ5dGVzKFtjXSkgKyBiJ34+JywgYWRvYmU9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIm1hbGZvcm1lZCIsIGFkb2JlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPH5zdGlsbCBtYWxmb3JtZWQiLCBhZG9iZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFsc28gbWFsZm9ybWVkfj4iLCBhZG9iZT1UcnVlKQorCisgICAgICAgICMgV2l0aCBhZG9iZT1GYWxzZSAodGhlIGRlZmF1bHQpLCBBZG9iZSBmcmFtaW5nIG1hcmtlcnMgYXJlIGRpc2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8fn4+IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8fn4+IiwgYWRvYmU9RmFsc2UpCisgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYiI8fn4+IiwgYWRvYmU9VHJ1ZSkgICMgc2FuaXR5IGNoZWNrCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhYmN4IiwgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWJjZGV5IiwgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYSBiXG5jIiwgYWRvYmU9RmFsc2UsIGlnbm9yZWNoYXJzPWIiIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3MnLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzOCcsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4VycsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4Vy0nLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzOFctIicsIGFkb2JlPUZhbHNlKQorCisgICAgZGVmIHRlc3RfYjg1ZGVjb2RlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgaWxsZWdhbCA9IGxpc3QocmFuZ2UoMzMpKSArIFwKKyAgICAgICAgICAgICAgICAgIGxpc3QoYiciXCcsLi86W1xcXScpICsgXAorICAgICAgICAgICAgICAgICAgbGlzdChyYW5nZSgxMjgsIDI1NikpCisgICAgICAgIGZvciBjIGluIGlsbGVnYWw6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYjg1ZGVjb2RlKGInMDAwMCcgKyBieXRlcyhbY10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3xOcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE5zQycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE5zQzEnKQogCiAgICAgZGVmIHRlc3RfZGVjb2RlX25vbmFzY2lpX3N0cihzZWxmKToKICAgICAgICAgZGVjb2RlX2Z1bmNzID0gKGJhc2U2NC5iNjRkZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmIzMmRlY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iMTZkZWNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjE2ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmI4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUpCiAgICAgICAgIGZvciBmIGluIGRlY29kZV9mdW5jczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYsICd3aXRoIG5vbi1hc2NpaSBceGNiJykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkgYi9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weQppbmRleCA3YjliZDE5Li41ODBhOTYzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weQpAQCAtNyw3ICs3LDcgQEAKIGNfYmlzZWN0ID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdiaXNlY3QnLCBmcmVzaD1bJ19iaXNlY3QnXSkKIAogY2xhc3MgUmFuZ2Uob2JqZWN0KToKLSAgICAiIiJBIHRyaXZpYWwgcmFuZ2UoKS1saWtlIG9iamVjdCB3aXRob3V0IGFueSBpbnRlZ2VyIHdpZHRoIGxpbWl0YXRpb25zLiIiIgorICAgICIiIkEgdHJpdmlhbCByYW5nZSgpLWxpa2Ugb2JqZWN0IHRoYXQgaGFzIGFuIGluc2VydCgpIG1ldGhvZC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIHN0b3ApOgogICAgICAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKICAgICAgICAgc2VsZi5zdG9wID0gc3RvcApAQCAtMTIwLDEwICsxMjAsMTAgQEAKICAgICBkZWYgdGVzdF9uZWdhdGl2ZV9sbyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAzMzAxCiAgICAgICAgIG1vZCA9IHNlbGYubW9kdWxlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuaW5zb3J0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuaW5zb3J0X3JpZ2h0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgM10sIDUsIC0xLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuaW5zb3J0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCiAKICAgICBkZWYgdGVzdF9sYXJnZV9yYW5nZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxMzQ5NgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkgYi9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQppbmRleCAwNGUzZjYxLi4xNjY3ODQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQpAQCAtNDI5MCw5ICs0MjkwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIG1lbW9yeXZpZXcsIHgpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RCdWZmZXJQcm90b2NvbCkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkgYi9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKaW5kZXggYzM0MmE0My4uYjU2MWE2ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQpAQCAtMTYsNiArMTYsNyBAQAogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIG9wZXJhdG9yIGltcG9ydCBuZWcKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHVubGluaywgIHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiB0cnk6CiAgICAgaW1wb3J0IHB0eSwgc2lnbmFsCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC00NjQsNiArNDY1LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBib21bOjJdICsgYidhJykKIAorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBldmFsLCAiZm9vIiwge30sIFgoKSkKKwogICAgIGRlZiB0ZXN0X2dlbmVyYWxfZXZhbChzZWxmKToKICAgICAgICAgIyBUZXN0cyB0aGF0IGdlbmVyYWwgbWFwcGluZ3MgY2FuIGJlIHVzZWQgZm9yIHRoZSBsb2NhbHMgYXJndW1lbnQKIApAQCAtNTc5LDcgKzU4NSwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIGZyb3plbmRpY3RfZXJyb3IoImZyb3plbmRpY3QgaXMgcmVhZG9ubHkiKQogCiAgICAgICAgICMgcmVhZC1vbmx5IGJ1aWx0aW5zCi0gICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQorICAgICAgICBpZiBpc2luc3RhbmNlKF9fYnVpbHRpbnNfXywgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBmcm96ZW5fYnVpbHRpbnMgPSBmcm96ZW5kaWN0KF9fYnVpbHRpbnNfXy5fX2RpY3RfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQogICAgICAgICBjb2RlID0gY29tcGlsZSgiX19idWlsdGluc19fWydzdXBlcmdsb2JhbCddPTI7IHByaW50KHN1cGVyZ2xvYmFsKSIsICJ0ZXN0IiwgImV4ZWMiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmcm96ZW5kaWN0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLCBjb2RlLCB7J19fYnVpbHRpbnNfXyc6IGZyb3plbl9idWlsdGluc30pCkBAIC04MzksOCArODQ4LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIuMCwgMyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEuMCwgMiwgMyksIDMpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF4LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF4LCAoKSkKKyAgICAgICAgY2xhc3MgQmFkU2VxOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1heCwgQmFkU2VxKCkpCisKICAgICAgICAgZm9yIHN0bXQgaW4gKAogICAgICAgICAgICAgIm1heChrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lKSIsCisgICAgICAgICAgICAibWF4KDEsIDIsIGRlZmF1bHQ9Tm9uZSkiLCAgICAgICMgcmVxdWlyZSBjb250YWluZXIgZm9yIGRlZmF1bHQKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lLCBrZXk9aW50KSIsCiAgICAgICAgICAgICAibWF4KDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKICAgICAgICAgICAgICJtYXgoMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCiAgICAgICAgICAgICAibWF4KDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKQEAgLTg1Nyw2ICs4NzcsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGtleT1uZWcpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIsIGtleT1uZWcpLCAxKSAgICAgIyB0d28gZWxlbXMKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD1Ob25lKSwgTm9uZSkgICAgIyB6ZXJvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsKSwgZGVmYXVsdD1Ob25lKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGRlZmF1bHQ9Tm9uZSksIDIpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsIDIpLCBkZWZhdWx0PTMsIGtleT1uZWcpLCAxKQorCiAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCiAgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKICAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KQEAgLTg4Myw2ICs5MTAsOSBAQAogCiAgICAgICAgIGZvciBzdG10IGluICgKICAgICAgICAgICAgICJtaW4oa2V5PWludCkiLCAgICAgICAgICAgICAgICAgIyBubyBhcmdzCisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSkiLAorICAgICAgICAgICAgIm1pbigxLCAyLCBkZWZhdWx0PU5vbmUpIiwgICAgICAjIHJlcXVpcmUgY29udGFpbmVyIGZvciBkZWZhdWx0CisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSwga2V5PWludCkiLAogICAgICAgICAgICAgIm1pbigxLCBrZXk9aW50KSIsICAgICAgICAgICAgICAjIHNpbmdsZSBhcmcgbm90IGl0ZXJhYmxlCiAgICAgICAgICAgICAibWluKDEsIDIsIGtleXN0b25lPWludCkiLCAgICAgICMgd3Jvbmcga2V5d29yZAogICAgICAgICAgICAgIm1pbigxLCAyLCBrZXk9aW50LCBhYmM9aW50KSIsICAjIHR3byBtYW55IGtleXdvcmRzCkBAIC04OTksNiArOTI5LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBrZXk9bmVnKSwgMikgICAgIyB0d28gZWxlbSBpdGVyYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigxLCAyLCBrZXk9bmVnKSwgMikgICAgICMgdHdvIGVsZW1zCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9Tm9uZSksIE5vbmUpICAgICMgemVybyBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCksIGRlZmF1bHQ9Tm9uZSksIDEpICAgICAjIG9uZSBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBkZWZhdWx0PU5vbmUpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9MSwga2V5PW5lZyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCAyKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMikKKwogICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwKSBmb3IgaSBpbiByYW5nZSgxMDApXQogICAgICAgICBrZXlzID0gZGljdCgoZWxlbSwgcmFuZG9tLnJhbmRyYW5nZSg1MCkpIGZvciBlbGVtIGluIGRhdGEpCiAgICAgICAgIGYgPSBrZXlzLl9fZ2V0aXRlbV9fCkBAIC05NDAsMjkgKzk3NywyNSBAQAogICAgIGRlZiB3cml0ZV90ZXN0ZmlsZShzZWxmKToKICAgICAgICAgIyBOQiB0aGUgZmlyc3QgNCBsaW5lcyBhcmUgYWxzbyB1c2VkIHRvIHRlc3QgaW5wdXQsIGJlbG93CiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgdHJ5OgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBmcC53cml0ZSgnMSsxXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKQogICAgICAgICAgICAgZnAud3JpdGUoJy5cbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnRGVhciBKb2huXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1hYWCcqMTAwKQogICAgICAgICAgICAgZnAud3JpdGUoJ1lZWScqMTAwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICdyJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJzErMVxuJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJ0RlYXInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgxMDApLCAnIEpvaG5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMzAwKSwgJ1hYWCcqMTAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkKDEwMDApLCAnWVlZJyoxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgZGVmIHRlc3Rfb3Blbl9kZWZhdWx0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICBvbGRfZW52aXJvbiA9IGRpY3Qob3MuZW52aXJvbikKQEAgLTk3NywxNSArMTAxMCwxNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgICAgICBjdXJyZW50X2xvY2FsZV9lbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKICAgICAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5lbmNvZGluZywgY3VycmVudF9sb2NhbGVfZW5jb2RpbmcpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCiAgICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShvbGRfZW52aXJvbikKIAorICAgIGRlZiB0ZXN0X29wZW5fbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBmaWxlb2JqID0gb3BlbihfX2ZpbGVfXykKKyAgICAgICAgd2l0aCBmaWxlb2JqOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUoZmlsZW9iai5maWxlbm8oKSkpCisKICAgICBkZWYgdGVzdF9vcmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCcgJyksIDMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZCgnQScpLCA2NSkKQEAgLTEwOTYsNyArMTEzMSw2IEBACiAgICAgICAgICAgICBzeXMuc3RkaW4gPSBzYXZlc3RkaW4KICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CiAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MocHR5LCAidGhlIHB0eSBhbmQgc2lnbmFsIG1vZHVsZXMgbXVzdCBiZSBhdmFpbGFibGUiKQogICAgIGRlZiBjaGVja19pbnB1dF90dHkoc2VsZiwgcHJvbXB0LCB0ZXJtaW5hbF9pbnB1dCwgc3RkaW9fZW5jb2Rpbmc9Tm9uZSk6CkBAIC0xNDc2LDE3ICsxNTEwLDExIEBACiAgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgIyBJc3N1ZSAjNzk5NDogb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzCiAgICAgICAgICMgIGRlcHJlY2F0ZWQKLSAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlX3dhcm5pbmcpOgotICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQotICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlX3dhcm5pbmc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdbMF0ubWVzc2FnZSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCBzdHIod1swXS5tZXNzYWdlKSkKKyAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlKToKKyAgICAgICAgICAgIGlmIHNob3VsZF9yYWlzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZvcm1hdCwgb2JqLCBmbXRfc3RyKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQogCiAgICAgICAgIGZtdF9zdHJzID0gWycnLCAncyddCiAKQEAgLTE1NjUsMjEgKzE1OTMsNDUgQEAKICAgICAgICAgZGF0YSA9ICdUaGUgcXVpY2sgQnJvd24gZm94IEp1bXBlZCBvdmVyIFRoZSBsYXp5IERvZycuc3BsaXQoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNvcnRlZCwgZGF0YSwgTm9uZSwgbGFtYmRhIHgseTogMCkKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHRlc3RfY2xhc3NlcyA9IChCdWlsdGluVGVzdCwgVGVzdFNvcnRlZCkKIAotICAgIHJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorY2xhc3MgU2h1dGRvd25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgotICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgY291bnRzID0gW05vbmVdICogNQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6Ci0gICAgICAgICAgICBydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKLSAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBwcmludChjb3VudHMpCisgICAgZGVmIHRlc3RfY2xlYW51cChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTkyNTU6IGJ1aWx0aW5zIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgc2h1dGRvd24KKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgYnVpbHRpbnMKKyAgICAgICAgICAgIGltcG9ydCBzeXMKIAorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImJlZm9yZSIpCisgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBidWlsdGlucyBzdGlsbCBleGlzdAorICAgICAgICAgICAgICAgICAgICBsZW4oKCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJhZnRlciIpCisKKyAgICAgICAgICAgIGMgPSBDKCkKKyAgICAgICAgICAgICMgTWFrZSB0aGlzIG1vZHVsZSBzdXJ2aXZlIHVudGlsIGJ1aWx0aW5zIGFuZCBzeXMgYXJlIGNsZWFuZWQKKyAgICAgICAgICAgIGJ1aWx0aW5zLmhlcmUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KKyAgICAgICAgICAgIHN5cy5oZXJlID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCisgICAgICAgICAgICAjIENyZWF0ZSBhIHJlZmVyZW5jZSBsb29wIHNvIHRoYXQgdGhpcyBtb2R1bGUgbmVlZHMgdG8gZ28KKyAgICAgICAgICAgICMgdGhyb3VnaCBhIEdDIHBoYXNlLgorICAgICAgICAgICAgaGVyZSA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXQorICAgICAgICAgICAgIiIiCisgICAgICAgICMgSXNzdWUgIzIwNTk5OiBGb3JjZSBBU0NJSSBlbmNvZGluZyB0byBnZXQgYSBjb2RlYyBpbXBsZW1lbnRlZCBpbiBDLAorICAgICAgICAjIG90aGVyd2lzZSB0aGUgY29kZWMgbWF5IGJlIHVubG9hZGVkIGJlZm9yZSBDLl9fZGVsX18oKSBpcyBjYWxsZWQsIGFuZAorICAgICAgICAjIHNvIHByaW50KCJiZWZvcmUiKSBmYWlscyBiZWNhdXNlIHRoZSBjb2RlYyBjYW5ub3QgYmUgdXNlZCB0byBlbmNvZGUKKyAgICAgICAgIyAiYmVmb3JlIiB0byBzeXMuc3Rkb3V0LmVuY29kaW5nLiBGb3IgZXhhbXBsZSwgb24gV2luZG93cywKKyAgICAgICAgIyBzeXMuc3Rkb3V0LmVuY29kaW5nIGlzIHRoZSBPRU0gY29kZSBwYWdlIGFuZCB0aGVzZSBjb2RlIHBhZ2VzIGFyZQorICAgICAgICAjIGltcGxlbWVudGVkIGluIFB5dGhvbgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OSU9FTkNPRElORz0iYXNjaWkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiYmVmb3JlIiwgImFmdGVyIl0sIG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkpCisKKworZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgZnJvbSBkb2N0ZXN0IGltcG9ydCBEb2NUZXN0U3VpdGUKKyAgICB0ZXN0cy5hZGRUZXN0KERvY1Rlc3RTdWl0ZShidWlsdGlucykpCisgICAgcmV0dXJuIHRlc3RzCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CmluZGV4IDNjMDkxNDEuLjQzYjZjODIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtMjg4LDggKzI4OCwyMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4obHN0KSwgYiJhYmMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4odHVwbGUobHN0KSksIGIiYWJjIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKGl0ZXIobHN0KSksIGIiYWJjIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIi4iKS5qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi5jZCIpCi0gICAgICAgICMgWFhYIG1vcmUuLi4KKyAgICAgICAgZG90X2pvaW4gPSBzZWxmLnR5cGUydGVzdChiIi46Iikuam9pbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgbWVtb3J5dmlldyhiImNkIildKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBieXRlYXJyYXkoYiJjZCIpXSksIGIiYWIuOmNkIikKKyAgICAgICAgIyBTdHJlc3MgaXQgd2l0aCBtYW55IGl0ZW1zCisgICAgICAgIHNlcSA9IFtiImFiYyJdICogMTAwMAorICAgICAgICBleHBlY3RlZCA9IGIiYWJjIiArIGIiLjphYmMiICogOTk5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oc2VxKSwgZXhwZWN0ZWQpCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgd2hlbiBzb21lIGl0ZW0gaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgICAgICAgIyBzZXF1ZW5jZSBoYXMgdGhlIHdyb25nIHR5cGUuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCAiY2QiLCBiImVmIl0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgImNkIiwgYiJlZiJdKQogCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKQEAgLTY4Niw3ICs3MDAsNyBAQAogICAgIHR5cGUydGVzdCA9IGJ5dGVzCiAKICAgICBkZWYgdGVzdF9idWZmZXJfaXNfcmVhZG9ubHkoc2VsZik6Ci0gICAgICAgIGZkID0gb3MuZHVwKHN5cy5zdGRpbi5maWxlbm8oKSkKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKICAgICAgICAgd2l0aCBvcGVuKGZkLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgYiIiKQogCkBAIC03NjUsNyArNzc5LDcgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGZuKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfcmV2ZXJzZShzZWxmKToKQEAgLTkwMSw2ICs5MTUsMTUgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgYlszOjRdID0gZWxlbQogCisgICAgZGVmIHRlc3Rfc2V0c2xpY2VfZXh0ZW5kKHNlbGYpOgorICAgICAgICAjIEV4ZXJjaXNlIHRoZSByZXNpemluZyBsb2dpYyAoc2VlIGlzc3VlICMxOTA4NykKKyAgICAgICAgYiA9IGJ5dGVhcnJheShyYW5nZSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMTAwKSkpCisgICAgICAgIGRlbCBiWzoxMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBsaXN0KHJhbmdlKDEwLCAxMDApKSkKKyAgICAgICAgYi5leHRlbmQocmFuZ2UoMTAwLCAxMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMTAsIDExMCkpKQorCiAgICAgZGVmIHRlc3RfZXh0ZW5kZWRfc2V0X2RlbF9zbGljZShzZWxmKToKICAgICAgICAgaW5kaWNlcyA9ICgwLCBOb25lLCAxLCAzLCAxOSwgMzAwLCAxPDwzMzMsIC0xLCAtMiwgLTMxLCAtMzAwKQogICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKQEAgLTEyODAsNiArMTMwMywxMSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIG5ld3ZhbCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWwgaXMgbm90IG5ld3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByKycgcmV0dXJuZWQgdmFsIG9uIGEgbXV0YWJsZSBvYmplY3QnKQorICAgICAgICBzZXAgPSBzZWxmLm1hcnNoYWwoYicnKQorICAgICAgICBuZXd2YWwgPSBzZXAuam9pbihbdmFsXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIG5ld3ZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh2YWwsIG5ld3ZhbCkKKwogCiBjbGFzcyBGaXhlZFN0cmluZ1Rlc3QodGVzdC5zdHJpbmdfdGVzdHMuQmFzZVRlc3QpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J6Mi5weSBiL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CmluZGV4IGM4YzkzNTEuLjQwZDg0MjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CkBAIC0xLDUgKzEsNSBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBiaWdtZW10ZXN0LCBfNEcKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBiaWdtZW10ZXN0LCBfNEcKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCkBAIC04LDYgKzgsNyBAQAogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB1bmxpbmsKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTE4LDEwICsxOSwxMCBAQAogYnoyID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdiejInKQogZnJvbSBiejIgaW1wb3J0IEJaMkZpbGUsIEJaMkNvbXByZXNzb3IsIEJaMkRlY29tcHJlc3NvcgogCi1oYXNfY21kbGluZV9idW56aXAyID0gc3lzLnBsYXRmb3JtIG5vdCBpbiAoIndpbjMyIiwgIm9zMmVteCIpCiAKIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiQmFzZSBmb3Igb3RoZXIgdGVzdGNhc2VzLiIKKwogICAgIFRFWFRfTElORVMgPSBbCiAgICAgICAgIGIncm9vdDp4OjA6MDpyb290Oi9yb290Oi9iaW4vYmFzaFxuJywKICAgICAgICAgYidiaW46eDoxOjE6YmluOi9iaW46XG4nLApAQCAtNTEsMTMgKzUyLDE3IEBACiAgICAgQkFEX0RBVEEgPSBiJ3RoaXMgaXMgbm90IGEgdmFsaWQgYnppcDIgZmlsZScKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IFRFU1RGTgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5maWxlbmFtZSk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5maWxlbmFtZSkKIAotICAgIGlmIGhhc19jbWRsaW5lX2J1bnppcDI6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCisgICAgZWxzZToKICAgICAgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSk6CiAgICAgICAgICAgICBwb3AgPSBzdWJwcm9jZXNzLlBvcGVuKCJidW56aXAyIiwgc2hlbGw9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLApAQCAtNzEsMTMgKzc2LDkgQEAKICAgICAgICAgICAgICAgICByZXQgPSBiejIuZGVjb21wcmVzcyhkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHJldAogCi0gICAgZWxzZToKLSAgICAgICAgIyBidW56aXAyIGlzbid0IGF2YWlsYWJsZSB0byBydW4gb24gV2luZG93cy4KLSAgICAgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSk6Ci0gICAgICAgICAgICByZXR1cm4gYnoyLmRlY29tcHJlc3MoZGF0YSkKIAogY2xhc3MgQloyRmlsZVRlc3QoQmFzZVRlc3QpOgotICAgICJUZXN0IEJaMkZpbGUgdHlwZSBtaXNjZWxsYW5lb3VzIG1ldGhvZHMuIgorICAgICJUZXN0IHRoZSBCWjJGaWxlIGNsYXNzLiIKIAogICAgIGRlZiBjcmVhdGVUZW1wRmlsZShzZWxmLCBzdHJlYW1zPTEsIHN1ZmZpeD1iIiIpOgogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKQEAgLTg1LDE4ICs4NiwxMiBAQAogICAgICAgICAgICAgZi53cml0ZShzdWZmaXgpCiAKICAgICBkZWYgdGVzdEJhZEFyZ3Moc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoMTIzLjQ1NikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJ6IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJyeCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAicmJ0IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQloyRmlsZSwgMTIzLjQ1NikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsICJ6IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsICJyeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCAicmJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCiAKICAgICBkZWYgdGVzdFJlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQpAQCAtMjMyLDkgKzIyNyw4IEBACiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQogICAgICAgICBiejJmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5fX25leHRfXykKLSAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBpZiB0aGUgYWJvdmUgLl9fbmV4dF9fIGNhbGwgZmFpbGVkIHRvCi0gICAgICAgICMgcmVsZWFzZSB0aGUgbG9jay4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgYnoyZikKKyAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBpZiB0aGUgYWJvdmUgY2FsbCBmYWlsZWQgdG8gcmVsZWFzZSB0aGUgbG9jay4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5yZWFkbGluZXMpCiAKICAgICBkZWYgdGVzdFdyaXRlKHNlbGYpOgpAQCAtMjc4LDggKzI3Miw4IEBACiAgICAgICAgICAgICBiejJmLndyaXRlKGIiYWJjIikKIAogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInIiKSBhcyBiejJmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnoyZi53cml0ZSwgYiJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnoyZi53cml0ZSwgYiJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQogCiAgICAgZGVmIHRlc3RBcHBlbmQoc2VsZik6CiAgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CkBAIC0zOTcsNyArMzkxLDcgQEAKICAgICAgICAgICAgIGJ6MmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnNlZWthYmxlKQogCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgbW9kZT0idyIpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ6MmYuc2Vla2FibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQyMyw3ICs0MTcsNyBAQAogICAgICAgICAgICAgYnoyZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYucmVhZGFibGUpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCBtb2RlPSJ3IikKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYnoyZi5yZWFkYWJsZSgpKQogICAgICAgICBmaW5hbGx5OgpAQCAtNDQwLDcgKzQzNCw3IEBACiAgICAgICAgICAgICBiejJmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi53cml0YWJsZSkKIAotICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksIG1vZGU9InciKQorICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ6MmYud3JpdGFibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQ1NCw3ICs0NDgsNyBAQAogICAgICAgICAgICAgZGVsIG8KIAogICAgIGRlZiB0ZXN0T3Blbk5vbmV4aXN0ZW50KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBCWjJGaWxlLCAiL25vbi9leGlzdGVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIEJaMkZpbGUsICIvbm9uL2V4aXN0ZW50IikKIAogICAgIGRlZiB0ZXN0UmVhZGxpbmVzTm9OZXdsaW5lKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMTkxMDQzOiByZWFkbGluZXMoKSBmYWlscyBvbiBhIGZpbGUgY29udGFpbmluZyBubyBuZXdsaW5lLgpAQCAtNDk0LDcgKzQ4OCw3IEBACiAgICAgICAgICMgSXNzdWUgIzcyMDU6IFVzaW5nIGEgQloyRmlsZSBmcm9tIHNldmVyYWwgdGhyZWFkcyBzaG91bGRuJ3QgZGVhZGxvY2suCiAgICAgICAgIGRhdGEgPSBiIjEiICogMioqMjAKICAgICAgICAgbnRocmVhZHMgPSAxMAotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgZGVmIGNvbXAoKToKICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQpAQCAtNTA1LDI4ICs0OTksMjcgQEAKICAgICAgICAgICAgICAgICB0LmpvaW4oKQogCiAgICAgZGVmIHRlc3RXaXRob3V0VGhyZWFkaW5nKHNlbGYpOgotICAgICAgICBiejIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoImJ6MiIsIGJsb2NrZWQ9KCJ0aHJlYWRpbmciLCkpCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgbW9kdWxlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJiejIiLCBibG9ja2VkPSgidGhyZWFkaW5nIiwpKQorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiYWJjIikKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiYyIpCiAKICAgICBkZWYgdGVzdE1peGVkSXRlcmF0aW9uQW5kUmVhZHMoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBsaW5lbGVuID0gbGVuKHNlbGYuVEVYVF9MSU5FU1swXSkKICAgICAgICAgaGFsZmxlbiA9IGxpbmVsZW4gLy8gMgotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkKGhhbGZsZW4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1swXVtoYWxmbGVuOl0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbbGluZWxlbjpdKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkbGluZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1sxXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZSgpLCBzZWxmLlRFWFRfTElORVNbMl0pCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CiAgICAgICAgICAgICBiejJmLnJlYWRsaW5lcygpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgotICAgICAgICAgICAgICAgIG5leHQoYnoyZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGJ6MmYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmVzKCksIFtdKQogCiAgICAgZGVmIHRlc3RNdWx0aVN0cmVhbU9yZGVyaW5nKHNlbGYpOgpAQCAtNTk0LDYgKzU4NywyMCBAQAogICAgICAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFs1MDAtMTUwOl0pCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgIyBEcm9wIHRoZSBlb3NfbWFnaWMgZmllbGQgKDYgYnl0ZXMpIGFuZCBDUkMgKDQgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBzZWxmLkRBVEFbOi0xMF0KKyAgICAgICAgd2l0aCBCWjJGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oc2VsZi5URVhUKSksIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSA0LWJ5dGUgZmlsZSBoZWFkZXIsIGFuZCBibG9jayBoZWFkZXIgb2YgYXQgbGVhc3QgMTQ2IGJpdHMuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIyKToKKyAgICAgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKKwogY2xhc3MgQloyQ29tcHJlc3NvclRlc3QoQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0Q29tcHJlc3Moc2VsZik6CiAgICAgICAgIGJ6MmMgPSBCWjJDb21wcmVzc29yKCkKQEAgLTc0MCw5NyArNzQ3LDEyMiBAQAogCiAKIGNsYXNzIE9wZW5UZXN0KEJhc2VUZXN0KToKKyAgICAiVGVzdCB0aGUgb3BlbiBmdW5jdGlvbi4iCisKKyAgICBkZWYgb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gYnoyLm9wZW4oKmFyZ3MsICoqa3dhcmdzKQorCiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3YiIsICJ4YiIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieGIiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQogCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgidyIsICJ4Iik6CisgICAgICAgICAgICBpZiBtb2RlID09ICJ4IjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCiAKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQogICAgICAgICB0ZXh0X25hdGl2ZV9lb2wgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgImF0IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3dCIsICJ4dCIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieHQiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYXQiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCAqIDIpCisKKyAgICBkZWYgdGVzdF94X21vZGUoc2VsZik6CisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIsICJ4dCIpOgorICAgICAgICAgICAgdW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyYiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJydCIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJ0IikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9iYWRfcGFyYW1zKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW52YWxpZCBwYXJhbWV0ZXIgY29tYmluYXRpb25zLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgIndidCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgbmV3bGluZT0iXG4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ3YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3Blbiwgc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIG5ld2xpbmU9IlxuIikKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3Qgbm9uLWRlZmF1bHQgZW5jb2RpbmcuCiAgICAgICAgIHRleHQgPSBzZWxmLlRFWFQuZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHRleHRfbmF0aXZlX2VvbCA9IHRleHQucmVwbGFjZSgiXG4iLCBvcy5saW5lc2VwKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJ1dGYtMTYtbGUiKQorICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoInV0Zi0xNi1sZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcl9oYW5kbGVyKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBub24tZGVmYXVsdCBlbmNvZGluZyBlcnJvciBoYW5kbGVyLgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiZm9vXHhmZmJhciIpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKSBcCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgXAogICAgICAgICAgICAgICAgIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiZm9vYmFyIikKIAogICAgIGRlZiB0ZXN0X25ld2xpbmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB3aXRoIGV4cGxpY2l0IG5ld2xpbmUgKHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgZGlzYWJsZWQpLgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIG5ld2xpbmU9IlxuIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IiwgbmV3bGluZT0iXG4iKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgbmV3bGluZT0iXHIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdGV4dF0pCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYXBpLnB5IGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CmluZGV4IDUwYzRiYmEuLmJhN2MzOGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhcGkucHkKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBNSVNTSU5HX0NfRE9DU1RSSU5HUwogdHJ5OgogICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC00NCw3ICs0NSw3IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIGRlZiB0ZXN0X25vX0ZhdGFsRXJyb3JfaW5maW5pdGVfbG9vcChzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6CisgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBfdGVzdGNhcGk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfdGVzdGNhcGkuY3Jhc2hfbm9fY3VycmVudF90aHJlYWQoKSddLApAQCAtMTEwLDYgKzExMSw0NiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBaKCksW2InMSddLDMsWzEsIDJdLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNykKIAorICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9kb2NzdHJpbmdfc2lnbmF0dXJlX3BhcnNpbmcoc2VsZik6CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkubm9fZG9jc3RyaW5nLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLm5vX2RvY3N0cmluZy5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX2VtcHR5Ll9fZG9jX18sICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfZW1wdHkuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUuX19kb2NfXywKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgbm8gc2lnbmF0dXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUoJG1vZHVsZSwgLywgYm9vKVxuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlLl9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZTIuX19kb2NfXywKKyAgICAgICAgICAgICJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZTIoJG1vZHVsZSwgLywgYm9vKVxuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIi0tXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgYWxzbyBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUuIgorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZTIuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZS5fX2RvY19fLAorICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmUuX190ZXh0X3NpZ25hdHVyZV9fLCAiKCRtb2R1bGUsIC8sIHNpZykiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMuX19kb2NfXywKKyAgICAgICAgICAgICJcblRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSBhbmQgc29tZSBleHRyYSBuZXdsaW5lcy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzLl9fdGV4dF9zaWduYXR1cmVfXywKKyAgICAgICAgICAgICIoJG1vZHVsZSwgLywgcGFyYW1ldGVyKSIpCisKKwogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFRlc3RQZW5kaW5nQ2FsbHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xOTMsNiArMjM0LDkgQEAKICAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0KGwsIG4pCiAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQobCwgbikKIAorCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKICAgICAgICAgaW1wb3J0IGJ1aWx0aW5zCiAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKQEAgLTIwMyw0NyArMjQ3LDEwOSBAQAogICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wKGlkKGJ1aWx0aW5zKSwgZikKICAgICAgICAgICAgICIiIi5mb3JtYXQodykKICAgICAgICAgd2l0aCBvcGVuKHIsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICByZXQgPSBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGlja2xlLmxvYWQoZiksIGlkKHN5cy5tb2R1bGVzKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGlja2xlLmxvYWQoZiksIGlkKGJ1aWx0aW5zKSkKIAorCiAjIEJ1ZyAjNjAxMgogY2xhc3MgVGVzdDYwMTIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5hcmdwYXJzaW5nKCJIZWxsbyIsICJXb3JsZCIpLCAxKQogCiAKLWNsYXNzIEVtYmVkZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAidGVzdCBkb2Vzbid0IHdvcmsgdW5kZXIgV2luZG93cyIpCi0gICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKLSAgICAgICAgIyBYWFggb25seSB0ZXN0ZWQgdW5kZXIgVW5peCBjaGVja291dHMKK2NsYXNzIEVtYmVkZGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSkKLSAgICAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgZXhlbmFtZSA9ICJfdGVzdGVtYmVkIgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAgICAgICBleHQgPSAoIl9kIiBpZiAiX2QiIGluIHN5cy5leGVjdXRhYmxlIGVsc2UgIiIpICsgIi5leGUiCisgICAgICAgICAgICBleGVuYW1lICs9IGV4dAorICAgICAgICAgICAgZXhlcGF0aCA9IG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZXBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIikKKyAgICAgICAgc2VsZi50ZXN0X2V4ZSA9IGV4ZSA9IG9zLnBhdGguam9pbihleGVwYXRoLCBleGVuYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZXhlKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIGRvZXNuJ3QgZXhpc3QiICUgZXhlKQogICAgICAgICAjIFRoaXMgaXMgbmVlZGVkIG90aGVyd2lzZSB3ZSBnZXQgYSBmYXRhbCBlcnJvcjoKICAgICAgICAgIyAiUHlfSW5pdGlhbGl6ZTogVW5hYmxlIHRvIGdldCB0aGUgbG9jYWxlIGVuY29kaW5nCiAgICAgICAgICMgTG9va3VwRXJyb3I6IG5vIGNvZGVjIHNlYXJjaCBmdW5jdGlvbnMgcmVnaXN0ZXJlZDogY2FuJ3QgZmluZCBlbmNvZGluZyIKKyAgICAgICAgc2VsZi5vbGRjd2QgPSBvcy5nZXRjd2QoKQogICAgICAgICBvcy5jaGRpcihiYXNlcGF0aCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRjd2QpCisKKyAgICBkZWYgcnVuX2VtYmVkZGVkX2ludGVycHJldGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUnVucyBhIHRlc3QgaW4gdGhlIGVtYmVkZGVkIGludGVycHJldGVyIiIiCisgICAgICAgIGNtZCA9IFtzZWxmLnRlc3RfZXhlXQorICAgICAgICBjbWQuZXh0ZW5kKGFyZ3MpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJldHVybmNvZGUgJWQsIHN0ZGVyciBpcyAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCisgICAgICAgIHJldHVybiBvdXQuZGVjb2RlKCJsYXRpbjEiKSwgZXJyLmRlY29kZSgibGF0aW4xIikKKworICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBqdXN0IGEgImRvbid0IGNyYXNoIiB0ZXN0CisgICAgICAgIG91dCwgZXJyID0gc2VsZi5ydW5fZW1iZWRkZWRfaW50ZXJwcmV0ZXIoKQorICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICBwcmludChlcnIpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZGVmYXVsdF9waXBlX2VuY29kaW5nKCk6CisgICAgICAgIHJwLCB3cCA9IG9zLnBpcGUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIiwgIl90ZXN0ZW1iZWQiKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgZG9lc24ndCBleGlzdCIgJSBleGUpCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbZXhlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmV0dXJuY29kZSAlZCwgc3RkZXJyIGlzICVyIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgICAgIHByaW50KG91dC5kZWNvZGUoJ2xhdGluMScpKQotICAgICAgICAgICAgICAgIHByaW50KGVyci5kZWNvZGUoJ2xhdGluMScpKQorICAgICAgICAgICAgd2l0aCBvcy5mZG9wZW4od3AsICd3JykgYXMgdzoKKyAgICAgICAgICAgICAgICBkZWZhdWx0X3BpcGVfZW5jb2RpbmcgPSB3LmVuY29kaW5nCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRjd2QpCisgICAgICAgICAgICBvcy5jbG9zZShycCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRfcGlwZV9lbmNvZGluZworCisgICAgZGVmIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrcyBmb3JjZWQgY29uZmlndXJhdGlvbiBvZiBlbWJlZGRlZCBpbnRlcnByZXRlciBJTyBzdHJlYW1zCisgICAgICAgIG91dCwgZXJyID0gc2VsZi5ydW5fZW1iZWRkZWRfaW50ZXJwcmV0ZXIoImZvcmNlZF9pb19lbmNvZGluZyIpCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgIHByaW50KGVycikKKyAgICAgICAgZXhwZWN0ZWRfc3RkaW5fZW5jb2RpbmcgPSBzeXMuX19zdGRpbl9fLmVuY29kaW5nCisgICAgICAgIGV4cGVjdGVkX3BpcGVfZW5jb2RpbmcgPSBzZWxmLl9nZXRfZGVmYXVsdF9waXBlX2VuY29kaW5nKCkKKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gb3MubGluZXNlcC5qb2luKFsKKyAgICAgICAgIi0tLSBVc2UgZGVmYXVsdHMgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0IiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdCIsCisgICAgICAgICJzdGRpbjogezB9OnN0cmljdCIsCisgICAgICAgICJzdGRvdXQ6IHsxfTpzdHJpY3QiLAorICAgICAgICAic3RkZXJyOiB7MX06YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVycm9ycyBvbmx5IC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdCIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IHN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRpbjogezB9OnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRvdXQ6IHsxfTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3RkZXJyOiB7MX06YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVuY29kaW5nIG9ubHkgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBsYXRpbi0xIiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdCIsCisgICAgICAgICJzdGRpbjogbGF0aW4tMTpzdHJpY3QiLAorICAgICAgICAic3Rkb3V0OiBsYXRpbi0xOnN0cmljdCIsCisgICAgICAgICJzdGRlcnI6IGxhdGluLTE6YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVuY29kaW5nIGFuZCBlcnJvcnMgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBsYXRpbi0xIiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogc3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGluOiBsYXRpbi0xOnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRvdXQ6IGxhdGluLTE6c3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGVycjogbGF0aW4tMTpiYWNrc2xhc2hyZXBsYWNlIl0pLmZvcm1hdChleHBlY3RlZF9zdGRpbl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9waXBlX2VuY29kaW5nKQorICAgICAgICAjIFRoaXMgaXMgdXNlZnVsIGlmIHdlIGV2ZXIgdHJpcCBvdmVyIG9kZCBwbGF0Zm9ybSBiZWhhdmlvdXIKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBleHBlY3RlZF9vdXRwdXQpCiAKIGNsYXNzIFNraXBpdGVtVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTM1NSw4ICs0NjEsOSBAQAogICAgIGRlZiB0ZXN0X190ZXN0Y2FwaShzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gZGlyKF90ZXN0Y2FwaSk6CiAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ3Rlc3RfJyk6Ci0gICAgICAgICAgICAgICAgdGVzdCA9IGdldGF0dHIoX3Rlc3RjYXBpLCBuYW1lKQotICAgICAgICAgICAgICAgIHRlc3QoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJpbnRlcm5hbCIsIG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3QgPSBnZXRhdHRyKF90ZXN0Y2FwaSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdGVzdCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZC5weSBiL0xpYi90ZXN0L3Rlc3RfY21kLnB5CmluZGV4IGU5YTAyMTEuLjBjMzE0NTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kLnB5CkBAIC0yMjksNyArMjI5LDcgQEAKICAgICB0cmFjZSA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndHJhY2UnKQogICAgIHRyYWNlcj10cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMuYmFzZV9wcmVmaXgsIHN5cy5iYXNlX2V4ZWNfcHJlZml4LF0sCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT0wLCBjb3VudD0xKQotICAgIHRyYWNlci5ydW4oJ3JlbG9hZChjbWQpO3Rlc3RfbWFpbigpJykKKyAgICB0cmFjZXIucnVuKCdpbXBvcnQgaW1wb3J0bGliOyBpbXBvcnRsaWIucmVsb2FkKGNtZCk7IHRlc3RfbWFpbigpJykKICAgICByPXRyYWNlci5yZXN1bHRzKCkKICAgICBwcmludCgiV3JpdGluZyBjb3ZlcmFnZSByZXN1bHRzLi4uIikKICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9Y292ZXJkaXIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQppbmRleCBhODlkN2U0Li4zMjdjMTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKQEAgLTQsNiArNCw3IEBACiAKIGltcG9ydCB0ZXN0LnN1cHBvcnQsIHVuaXR0ZXN0CiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKQEAgLTQxLDggKzQyLDEwIEBACiAKICAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgogICAgICAgICB2ZXJzaW9uID0gKCdQeXRob24gJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0pLmVuY29kZSgiYXNjaWkiKQotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctVicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKyAgICAgICAgZm9yIHN3aXRjaCBpbiAnLVYnLCAnLS12ZXJzaW9uJzoKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc3dpdGNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKIAogICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CiAgICAgICAgICMgLXYgY2F1c2VzIGltcG9ydHMgdG8gd3JpdGUgdG8gc3RkZXJyLiAgSWYgdGhlIHdyaXRlIHRvCkBAIC01NCwxNCArNTcsNDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ3N0YWNrIG92ZXJmbG93JywgZXJyKQogCiAgICAgZGVmIHRlc3RfeG9wdGlvbnMoc2VsZik6Ci0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKLSAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKyAgICAgICAgZGVmIGdldF94b3B0aW9ucygqYXJncyk6CisgICAgICAgICAgICAjIHVzZSBzdWJwcm9jZXNzIG1vZHVsZSBkaXJlY3RseSBiZWNhdXNlIHRlc3Quc2NyaXB0X2hlbHBlciBhZGRzCisgICAgICAgICAgICAjICItWCBmYXVsdGhhbmRsZXIiIHRvIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctRScpICsgYXJncworICAgICAgICAgICAgYXJncyArPSAoJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKKyAgICAgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgICAgICBvcHRzID0gZXZhbChvdXQuc3BsaXRsaW5lcygpWzBdKQorICAgICAgICAgICAgcmV0dXJuIG9wdHMKKworICAgICAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7fSkKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygKLSAgICAgICAgICAgICctWGEnLCAnLVhiPWMsZD1lJywgJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKLSAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKworICAgICAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCctWGEnLCAnLVhiPWMsZD1lJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7J2EnOiBUcnVlLCAnYic6ICdjLGQ9ZSd9KQogCisgICAgZGVmIHRlc3Rfc2hvd3JlZmNvdW50KHNlbGYpOgorICAgICAgICBkZWYgcnVuX3B5dGhvbigqYXJncyk6CisgICAgICAgICAgICAjIHRoaXMgaXMgc2ltaWxhciB0byBhc3NlcnRfcHl0aG9uX29rIGJ1dCBkb2Vzbid0IHN0cmlwCisgICAgICAgICAgICAjIHRoZSByZWZjb3VudCBmcm9tIHN0ZGVyci4gIEl0IGNhbiBiZSByZXBsYWNlZCBvbmNlCisgICAgICAgICAgICAjIGFzc2VydF9weXRob25fb2sgc3RvcHMgZG9pbmcgdGhhdC4KKyAgICAgICAgICAgIGNtZCA9IFtzeXMuZXhlY3V0YWJsZV0KKyAgICAgICAgICAgIGNtZC5leHRlbmQoYXJncykKKyAgICAgICAgICAgIFBJUEUgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQorICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAgIHJjID0gcC5yZXR1cm5jb2RlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICAgICAgcmV0dXJuIHJjLCBvdXQsIGVycgorICAgICAgICBjb2RlID0gJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJworICAgICAgICAjIG5vcm1hbGx5IHRoZSByZWZjb3VudCBpcyBoaWRkZW4KKyAgICAgICAgcmMsIG91dCwgZXJyID0gcnVuX3B5dGhvbignLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgYid7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisgICAgICAgICMgIi1YIHNob3dyZWZjb3VudCIgc2hvd3MgdGhlIHJlZmNvdW50LCBidXQgb25seSBpbiBkZWJ1ZyBidWlsZHMKKyAgICAgICAgcmMsIG91dCwgZXJyID0gcnVuX3B5dGhvbignLVgnLCAnc2hvd3JlZmNvdW50JywgJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGIieydzaG93cmVmY291bnQnOiBUcnVlfSIpCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOiAgIyBkZWJ1ZyBidWlsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGJyJ15cW1xkKyByZWZzLCBcZCsgYmxvY2tzXF0nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKwogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBleHBlY3RlZCBvcGVyYXRpb24gb2YgdGhlICctbScgc3dpdGNoCiAgICAgICAgICMgU3dpdGNoIG5lZWRzIGFuIGFyZ3VtZW50CkBAIC03MCw5ICsxMDgsOSBAQAogICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ2Zub3JkNDM1MjB4eXonKQogICAgICAgICAjIENoZWNrIHRoZSBydW5weSBtb2R1bGUgYWxzbyBnaXZlcyBhbiBlcnJvciBmb3IKICAgICAgICAgIyBhIG5vbmV4aXN0ZW50IG1vZHVsZQotICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3J1bnB5JywgJ2Zub3JkNDM1MjB4eXonKSwKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdydW5weScsICdmbm9yZDQzNTIweHl6JykKICAgICAgICAgIyBBbGwgZ29vZCBpZiBtb2R1bGUgaXMgbG9jYXRlZCBhbmQgcnVuIHN1Y2Nlc3NmdWxseQotICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpLAorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpCiAKICAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2J1ZzE3NjQ0MDcoc2VsZik6CiAgICAgICAgICMgLW0gYW5kIC1pIG5lZWQgdG8gcGxheSB3ZWxsIHRvZ2V0aGVyCkBAIC0yMTMsNiArMjUxLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDEuZW5jb2RlKCdhc2NpaScpLCBvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDIuZW5jb2RlKCdhc2NpaScpLCBvdXQpCiAKKyAgICBkZWYgdGVzdF9lbXB0eV9QWVRIT05QQVRIX2lzc3VlMTYzMDkoc2VsZik6CisgICAgICAgICMgT24gUG9zaXgsIGl0IGlzIGRvY3VtZW50ZWQgdGhhdCBzZXR0aW5nIFBBVEggdG8gdGhlCisgICAgICAgICMgZW1wdHkgc3RyaW5nIGlzIGVxdWl2YWxlbnQgdG8gbm90IHNldHRpbmcgUEFUSCBhdCBhbGwsCisgICAgICAgICMgd2hpY2ggaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlIHRoYXQgaW4gYSBzdHJpbmcgbGlrZQorICAgICAgICAjICIvYmluOjovdXNyL2JpbiIgdGhlIGVtcHR5IHN0cmluZyBpbiB0aGUgbWlkZGxlIGdldHMKKyAgICAgICAgIyBpbnRlcnByZXRlZCBhcyAnLicKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBwYXRoID0gIjoiLmpvaW4oc3lzLnBhdGgpCisgICAgICAgICAgICBwYXRoID0gcGF0aC5lbmNvZGUoImFzY2lpIiwgImJhY2tzbGFzaHJlcGxhY2UiKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUocGF0aCkiIiIKKyAgICAgICAgcmMxLCBvdXQxLCBlcnIxID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05QQVRIPSIiKQorICAgICAgICByYzIsIG91dDIsIGVycjIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIF9faXNvbGF0ZWQ9RmFsc2UpCisgICAgICAgICMgcmVnYXJkaW5nIHRvIFBvc2l4IHNwZWNpZmljYXRpb24sIG91dHB1dHMgc2hvdWxkIGJlIGVxdWFsCisgICAgICAgICMgZm9yIGVtcHR5IGFuZCB1bnNldCBQWVRIT05QQVRICisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0MSwgb3V0MikKKwogICAgIGRlZiB0ZXN0X2Rpc3BsYXlob29rX3VuZW5jb2RhYmxlKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKCdhc2NpaScsICdsYXRpbi0xJywgJ3V0Zi04Jyk6CiAgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQpAQCAtMjkwLDcgKzM0NSw3IEBACiAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIuZGVjb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIE9TRXJyb3I6IC4qIGlnbm9yZWQnKQorICAgICAgICAgICAgICAgICAgICAgICAgICdFeGNlcHRpb24gaWdub3JlZCBpbi4qXG5PU0Vycm9yOiAuKicpCiAKICAgICBkZWYgdGVzdF9jbG9zZWRfc3Rkb3V0KHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMzQ0NDogaWYgc3Rkb3V0IGhhcyBiZWVuIGV4cGxpY2l0bHkgY2xvc2VkLCB3ZSBzaG91bGQKQEAgLTM4NSw2ICs0NDAsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKIAogCisgICAgZGVmIHRlc3RfaXNvbGF0ZWRtb2RlKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctSScpCisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1JRXMnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctSScsICctYycsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IGZsYWdzIGFzIGY7ICcKKyAgICAgICAgICAgICdwcmludChmLm5vX3VzZXJfc2l0ZSwgZi5pZ25vcmVfZW52aXJvbm1lbnQsIGYuaXNvbGF0ZWQpJywKKyAgICAgICAgICAgICMgZHVtbXl2YXIgdG8gcHJldmVudCBleHRyYW5vdXMgLUUKKyAgICAgICAgICAgIGR1bW15dmFyPSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJzEgMSAxJykKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0bXBkaXI6CisgICAgICAgICAgICBmYWtlID0gb3MucGF0aC5qb2luKHRtcGRpciwgInV1aWQucHkiKQorICAgICAgICAgICAgbWFpbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICJtYWluLnB5IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmYWtlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgicmFpc2UgUnVudGltZUVycm9yKCdpc29sYXRlZCBtb2RlIHRlc3QnKVxuIikKKyAgICAgICAgICAgIHdpdGggb3BlbihtYWluLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiaW1wb3J0IHV1aWRcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgicHJpbnQoJ29rJylcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCBtYWluXSwgY3dkPXRtcGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwpCisgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc3lzLmV4ZWN1dGFibGUsICItSSIsIG1haW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXRtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGIib2siKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDbWRMaW5lVGVzdCkKICAgICB0ZXN0LnN1cHBvcnQucmVhcF9jaGlsZHJlbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CmluZGV4IGI0MjY5YjkuLjg4YTllMmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CkBAIC0xLDUgKzEsNiBAQAogIyB0ZXN0cyBjb21tYW5kIGxpbmUgZXhlY3V0aW9uIG9mIHNjcmlwdHMKIAoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgemlwaW1wb3J0CkBAIC04LDYgKzksNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHB5X2NvbXBpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCiAKIGltcG9ydCB0ZXh0d3JhcAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC00MSwxMSArNDMsMjggQEAKIF9sb2FkZXIgPSBfX2xvYWRlcl9fIGlmIF9fbG9hZGVyX18gaXMgQnVpbHRpbkltcG9ydGVyIGVsc2UgdHlwZShfX2xvYWRlcl9fKQogcHJpbnQoJ19fbG9hZGVyX189PSVhJyAlIF9sb2FkZXIpCiBwcmludCgnX19maWxlX189PSVhJyAlIF9fZmlsZV9fKQotYXNzZXJ0RXF1YWwoX19jYWNoZWRfXywgTm9uZSkKK3ByaW50KCdfX2NhY2hlZF9fPT0lYScgJSBfX2NhY2hlZF9fKQogcHJpbnQoJ19fcGFja2FnZV9fPT0lcicgJSBfX3BhY2thZ2VfXykKKyMgQ2hlY2sgUEVQIDQ1MSBkZXRhaWxzCitpbXBvcnQgb3MucGF0aAoraWYgX19wYWNrYWdlX18gaXMgbm90IE5vbmU6CisgICAgcHJpbnQoJ19fbWFpbl9fIHdhcyBsb2NhdGVkIHRocm91Z2ggdGhlIGltcG9ydCBzeXN0ZW0nKQorICAgIGFzc2VydElkZW50aWNhbChfX3NwZWNfXy5sb2FkZXIsIF9fbG9hZGVyX18pCisgICAgZXhwZWN0ZWRfc3BlY19uYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKSlbMF0KKyAgICBpZiBfX3BhY2thZ2VfXzoKKyAgICAgICAgZXhwZWN0ZWRfc3BlY19uYW1lID0gX19wYWNrYWdlX18gKyAiLiIgKyBleHBlY3RlZF9zcGVjX25hbWUKKyAgICBhc3NlcnRFcXVhbChfX3NwZWNfXy5uYW1lLCBleHBlY3RlZF9zcGVjX25hbWUpCisgICAgYXNzZXJ0RXF1YWwoX19zcGVjX18ucGFyZW50LCBfX3BhY2thZ2VfXykKKyAgICBhc3NlcnRJZGVudGljYWwoX19zcGVjX18uc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgYXNzZXJ0RXF1YWwoX19zcGVjX18ub3JpZ2luLCBfX2ZpbGVfXykKKyAgICBpZiBfX3NwZWNfXy5jYWNoZWQgaXMgbm90IE5vbmU6CisgICAgICAgIGFzc2VydEVxdWFsKF9fc3BlY19fLmNhY2hlZCwgX19jYWNoZWRfXykKICMgQ2hlY2sgdGhlIHN5cyBtb2R1bGUKIGltcG9ydCBzeXMKIGFzc2VydElkZW50aWNhbChnbG9iYWxzKCksIHN5cy5tb2R1bGVzW19fbmFtZV9fXS5fX2RpY3RfXykKK2lmIF9fc3BlY19fIGlzIG5vdCBOb25lOgorICAgICMgWFhYOiBXZSdyZSBub3QgY3VycmVudGx5IG1ha2luZyBfX21haW5fXyBhdmFpbGFibGUgdW5kZXIgaXRzIHJlYWwgbmFtZQorICAgIHBhc3MgIyBhc3NlcnRJZGVudGljYWwoZ2xvYmFscygpLCBzeXMubW9kdWxlc1tfX3NwZWNfXy5uYW1lXS5fX2RpY3RfXykKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9jbWRfbGluZV9zY3JpcHQKIGV4YW1wbGVfYXJnc19saXN0ID0gdGVzdF9jbWRfbGluZV9zY3JpcHQuZXhhbXBsZV9hcmdzCiBhc3NlcnRFcXVhbChzeXMuYXJndlsxOl0sIGV4YW1wbGVfYXJnc19saXN0KQpAQCAtMTIzLDcgKzE0Miw3IEBACiAgICAgICAgIGlmIG5vdCBfX2RlYnVnX186CiAgICAgICAgICAgICBjbWRfbGluZV9zd2l0Y2hlcyArPSAoJy0nICsgJ08nICogc3lzLmZsYWdzLm9wdGltaXplLCkKICAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwpICsgdHVwbGUoZXhhbXBsZV9hcmdzKQotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCpydW5fYXJncykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqcnVuX2FyZ3MsIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuX2NoZWNrX291dHB1dChzY3JpcHRfbmFtZSwgcmMsIG91dCArIGVyciwgZXhwZWN0ZWRfZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwLCBleHBlY3RlZF9wYXRoMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3BhY2thZ2UsIGV4cGVjdGVkX2xvYWRlcikKQEAgLTE1Niw2ICsxNzUsNTMgQEAKICAgICAgICAgZXhwZWN0ZWQgPSByZXByKGltcG9ydGxpYi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyKS5lbmNvZGUoInV0Zi04IikKICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgb3V0KQogCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgaW50ZXJhY3RpdmVfcHl0aG9uKHNlbGYsIHNlcGFyYXRlX3N0ZGVycj1GYWxzZSk6CisgICAgICAgIGlmIHNlcGFyYXRlX3N0ZGVycjoKKyAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oJy1pJywgYnVmc2l6ZT0xLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgc3RkZXJyID0gcC5zdGRlcnIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oJy1pJywgYnVmc2l6ZT0xLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBzdGRlcnIgPSBwLnN0ZG91dAorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIERyYWluIHN0ZGVyciB1bnRpbCBwcm9tcHQKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgZGF0YSA9IHN0ZGVyci5yZWFkKDQpCisgICAgICAgICAgICAgICAgaWYgZGF0YSA9PSBiIj4+PiAiOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHN0ZGVyci5yZWFkbGluZSgpCisgICAgICAgICAgICB5aWVsZCBwCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBraWxsX3B5dGhvbihwKQorICAgICAgICAgICAgc3RkZXJyLmNsb3NlKCkKKworICAgIGRlZiBjaGVja19yZXBsX3N0ZG91dF9mbHVzaChzZWxmLCBzZXBhcmF0ZV9zdGRlcnI9RmFsc2UpOgorICAgICAgICB3aXRoIHNlbGYuaW50ZXJhY3RpdmVfcHl0aG9uKHNlcGFyYXRlX3N0ZGVycikgYXMgcDoKKyAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYiJwcmludCgnZm9vJylcbiIpCisgICAgICAgICAgICBwLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidmb28nLCBwLnN0ZG91dC5yZWFkbGluZSgpLnN0cmlwKCkpCisKKyAgICBkZWYgY2hlY2tfcmVwbF9zdGRlcnJfZmx1c2goc2VsZiwgc2VwYXJhdGVfc3RkZXJyPUZhbHNlKToKKyAgICAgICAgd2l0aCBzZWxmLmludGVyYWN0aXZlX3B5dGhvbihzZXBhcmF0ZV9zdGRlcnIpIGFzIHA6CisgICAgICAgICAgICBwLnN0ZGluLndyaXRlKGIiMS8wXG4iKQorICAgICAgICAgICAgcC5zdGRpbi5mbHVzaCgpCisgICAgICAgICAgICBzdGRlcnIgPSBwLnN0ZGVyciBpZiBzZXBhcmF0ZV9zdGRlcnIgZWxzZSBwLnN0ZG91dAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1RyYWNlYmFjayAnLCBzdGRlcnIucmVhZGxpbmUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidGaWxlICI8c3RkaW4+IicsIHN0ZGVyci5yZWFkbGluZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1plcm9EaXZpc2lvbkVycm9yJywgc3RkZXJyLnJlYWRsaW5lKCkpCisKKyAgICBkZWYgdGVzdF9yZXBsX3N0ZG91dF9mbHVzaChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXBsX3N0ZG91dF9mbHVzaCgpCisKKyAgICBkZWYgdGVzdF9yZXBsX3N0ZG91dF9mbHVzaF9zZXBhcmF0ZV9zdGRlcnIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVwbF9zdGRvdXRfZmx1c2goVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JlcGxfc3RkZXJyX2ZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlcGxfc3RkZXJyX2ZsdXNoKCkKKworICAgIGRlZiB0ZXN0X3JlcGxfc3RkZXJyX2ZsdXNoX3NlcGFyYXRlX3N0ZGVycihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXBsX3N0ZGVycl9mbHVzaChUcnVlKQorCiAgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0KHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ3NjcmlwdCcpCkBAIC0yOTQsNyArMzYwLDcgQEAKICAgICAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCiAgICAgICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpciwgImltcG9ydCBzeXM7IHByaW50KCdpbml0X2FyZ3YwPT0lcicgJSBzeXMuYXJndlswXSkiKQogICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ3NjcmlwdCcpCi0gICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGVzdF9wa2cuc2NyaXB0JywgKmV4YW1wbGVfYXJncykKKyAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0ZXN0X3BrZy5zY3JpcHQnLCAqZXhhbXBsZV9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgogICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAiaW5pdF9hcmd2MD09JXIiICUgJy1tJwpAQCAtMzExLDcgKzM3Nyw4IEBACiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCItYyIsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCiAgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBwcmludCgic3lzLnBhdGhbMF09PSVyIiAlIHN5cy5wYXRoWzBdKScpCisgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoInN5cy5wYXRoWzBdPT0lciIgJSBzeXMucGF0aFswXSknLAorICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gInN5cy5wYXRoWzBdPT0lciIgJSAnJwpAQCAtMzI1LDcgKzM5Miw4IEBACiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChwYXRoPXNjcmlwdF9kaXIpOgogICAgICAgICAgICAgICAgIHdpdGggb3BlbigiLW0iLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoImRhdGEiKQotICAgICAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdvdGhlcicsICpleGFtcGxlX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ290aGVyJywgKmV4YW1wbGVfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgJycsICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCkBAIC0zODYsNiArNDU0LDI0IEBACiAgICAgICAgICAgICAnc3Rkb3V0PSVyIHN0ZGVycj0lcicgJSAoc3Rkb3V0LCBzdGRlcnIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJjKQogCisgICAgZGVmIHRlc3RfaXNzdWUyMDUwMF9leGl0X3dpdGhfZXhjZXB0aW9uX3ZhbHVlKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgZXJyb3IgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc29tZSB0ZXh0JykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBlcnJvciA9IGVycgorCisgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuZXhpdChlcnJvcikKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnLCBzY3JpcHQpCisgICAgICAgICAgICBleGl0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICB0ZXh0ID0gc3RkZXJyLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAic29tZSB0ZXh0IikKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQppbmRleCBhZGVmMTcwLi43YTgwYTgwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgc2VsZi5pbmZ1bmMuc2lkZV9lZmZlY3QgPSBbInVuZGVmaW5lZCIsIEVPRkVycm9yKCdGaW5pc2hlZCcpXQogICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoKQogICAgICAgICBmb3IgY2FsbCBpbiBzZWxmLnN0ZGVyci5tZXRob2RfY2FsbHM6Ci0gICAgICAgICAgICBpZiAnTmFtZUVycm9yOicgaW4gJycuam9pbihjYWxsWzFdKToKKyAgICAgICAgICAgIGlmICdOYW1lRXJyb3InIGluICcnLmpvaW4oY2FsbFsxXSk6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJObyBzeW50YXggZXJyb3IgZnJvbSBjb25zb2xlIikKQEAgLTY0LDYgKzY0LDIwIEBACiAgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShob29rLmNhbGxlZCkKIAorICAgIGRlZiB0ZXN0X2Jhbm5lcihzZWxmKToKKyAgICAgICAgIyB3aXRoIGJhbm5lcgorICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IEVPRkVycm9yKCdGaW5pc2hlZCcpCisgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdChiYW5uZXI9J0ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxscyksIDIpCisgICAgICAgIGJhbm5lcl9jYWxsID0gc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFubmVyX2NhbGwsIFsnd3JpdGUnLCAoJ0Zvb1xuJywpLCB7fV0pCisKKyAgICAgICAgIyBubyBiYW5uZXIKKyAgICAgICAgc2VsZi5zdGRlcnIucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuaW5mdW5jLnNpZGVfZWZmZWN0ID0gRU9GRXJyb3IoJ0ZpbmlzaGVkJykKKyAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KGJhbm5lcj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzKSwgMSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEludGVyYWN0aXZlQ29uc29sZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CmluZGV4IGZkODg1MDUuLjg0ODA0YmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQpAQCAtODc1LDggKzg3NSw2IEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBkYXRhLmRlY29kZShlbmNvZGluZywgInRlc3QucmVwbGFjaW5nIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29kZWNDYWxsYmFja1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfY24ucHkKaW5kZXggNzY2MzJhMi4uOGI4NGMxNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfY24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfY24ucHkKQEAgLTI1LDggKzI1LDUgQEAKICAgICAgICAgICAgICAgICAgJ3RydW5rL2NoYXJzZXQvZGF0YS94bWwvZ2ItMTgwMzAtMjAwMC54bWwnCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19oay5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2hrLnB5CmluZGV4IDI3OGFlMmYuLjEyYWFkYTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2hrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2hrLnB5CkBAIC0xMiw5ICsxMiw1IEBACiAgICAgZW5jb2RpbmcgPSAnYmlnNWhrc2NzJwogICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9CSUc1SEtTQ1MtMjAwNC5UWFQnCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ3VybGZldGNoJ10KLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfanAucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQppbmRleCBmYTkzZjEyLi4xYzY2ZDgwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQpAQCAtNTksOCArNTksNSBAQAogICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9TSElGVF9KSVNYMDIxMy5UWFQnCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2tyLnB5CmluZGV4IGUwYmY3MTYuLjQwNGQ3NGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2tyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2tyLnB5CkBAIC0zNiw4ICszNiw1IEBACiAgICAgcGFzc19lbmN0ZXN0ID0gWyhiJ1xcJywgJ1x1MjBhOScpXQogICAgIHBhc3NfZGVjdGVzdCA9IFsoYidcXCcsICdcdTIwYTknKV0KIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc190dy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5CmluZGV4IDRkMjcwODAuLjliZjgzNDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5CkBAIC0yNiw4ICsyNiw1IEBACiAgICAgICAgIChiIlx4RkZ4eSIsICJyZXBsYWNlIiwgICJcdWZmZmR4eSIpLAogICAgICkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CmluZGV4IGE4YjNkYTAuLjg1NjEyNmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CkBAIC0xLDQgKzEsNSBAQAogaW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbwogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHN5cwpAQCAtMzQyLDggKzM0Myw0NiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgIiIpCiAKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlX3JlcGxhY2UgPSAiXHVmZmZkIgorCisgICAgZGVmIHRlc3RfbG9uZV9zdXJyb2dhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsICJcdWQ4MDAiLmVuY29kZSwgc2VsZi5lbmNvZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAiYmFja3NsYXNocmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbXFx1ZGM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAieG1sY2hhcnJlZnJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWyYjNTY0NDg7XSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbP10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKworICAgICAgICBib20gPSAiIi5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgZm9yIGJlZm9yZSwgYWZ0ZXIgaW4gWygiXFUwMDAxMGZmZiIsICJBIiksICgiWyIsICJdIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkEiLCAiXFUwMDAxMGZmZiIpXToKKyAgICAgICAgICAgIGJlZm9yZV9zZXF1ZW5jZSA9IGJlZm9yZS5lbmNvZGUoc2VsZi5lbmNvZGluZylbbGVuKGJvbSk6XQorICAgICAgICAgICAgYWZ0ZXJfc2VxdWVuY2UgPSBhZnRlci5lbmNvZGUoc2VsZi5lbmNvZGluZylbbGVuKGJvbSk6XQorICAgICAgICAgICAgdGVzdF9zdHJpbmcgPSBiZWZvcmUgKyAiXHVEQzgwIiArIGFmdGVyCisgICAgICAgICAgICB0ZXN0X3NlcXVlbmNlID0gKGJvbSArIGJlZm9yZV9zZXF1ZW5jZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWxsX2Zvcm1lZF9zZXF1ZW5jZSArIGFmdGVyX3NlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCB0ZXN0X3NlcXVlbmNlLmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc3RyaW5nLmVuY29kZShzZWxmLmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXBhc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9zZXF1ZW5jZS5kZWNvZGUoc2VsZi5lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXBhc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlICsgYWZ0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSArIHNlbGYuaWxsX2Zvcm1lZF9zZXF1ZW5jZV9yZXBsYWNlICsgYWZ0ZXIpCisKIGNsYXNzIFVURjMyVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMiIKKyAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDgwXHhkY1x4MDBceDAwIgorICAgIGVsc2U6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4MDBceDAwXHhkY1x4ODAiCiAKICAgICBzcGFtbGUgPSAoYidceGZmXHhmZVx4MDBceDAwJwogICAgICAgICAgICAgICBiJ3NceDAwXHgwMFx4MDBwXHgwMFx4MDBceDAwYVx4MDBceDAwXHgwMG1ceDAwXHgwMFx4MDAnCkBAIC00MzUsNiArNDc0LDcgQEAKIAogY2xhc3MgVVRGMzJMRVRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGNceDAwXHgwMCIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTQ3OSw2ICs1MTksNyBAQAogCiBjbGFzcyBVVEYzMkJFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMi1iZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDAwXHgwMFx4ZGNceDgwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNTI0LDYgKzU2NSwxMCBAQAogCiBjbGFzcyBVVEYxNlRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMTYiCisgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGMiCisgICAgZWxzZToKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhkY1x4ODAiCiAKICAgICBzcGFtbGUgPSBiJ1x4ZmZceGZlc1x4MDBwXHgwMGFceDAwbVx4MDBzXHgwMHBceDAwYVx4MDBtXHgwMCcKICAgICBzcGFtYmUgPSBiJ1x4ZmVceGZmXHgwMHNceDAwcFx4MDBhXHgwMG1ceDAwc1x4MDBwXHgwMGFceDAwbScKQEAgLTU5OSwxMSArNjQ0LDE0IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CiAgICAgICAgICAgICBmcC53cml0ZShzKQotICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCAnVScsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpIGFzIHJlYWRlcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgJ1UnLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQorICAgICAgICB3aXRoIHJlYWRlcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWQoKSwgczEpCiAKIGNsYXNzIFVURjE2TEVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWxlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjQ3LDYgKzY5NSw3IEBACiAKIGNsYXNzIFVURjE2QkVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWJlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ZGNceDgwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjkwLDYgKzczOSw4IEBACiAKIGNsYXNzIFVURjhUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTgiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhlZFx4YjJceDgwIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2VfcmVwbGFjZSA9ICJcdWZmZmQiICogMwogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNzE5LDE4ICs3NzAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSwgdS5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAKICAgICBkZWYgdGVzdF9sb25lX3N1cnJvZ2F0ZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgIlx1ZDgwMCIuZW5jb2RlLCAidXRmLTgiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGIiXHhlZFx4YTBceDgwIi5kZWNvZGUsICJ1dGYtOCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgImJhY2tzbGFzaHJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tcXHVkYzgwXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInhtbGNoYXJyZWZyZXBsYWNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbJiM1NjQ0ODtdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAic3Vycm9nYXRlZXNjYXBlIiksCisgICAgICAgIHN1cGVyKCkudGVzdF9sb25lX3N1cnJvZ2F0ZXMoKQorICAgICAgICAjIG5vdCBzdXJlIGlmIHRoaXMgaXMgbWFraW5nIHNlbnNlIGZvcgorICAgICAgICAjIFVURi0xNiBhbmQgVVRGLTMyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoJ3V0Zi04JywgInN1cnJvZ2F0ZWVzY2FwZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInW1x4ODBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAiaWdub3JlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1s/XScpCiAKICAgICBkZWYgdGVzdF9zdXJyb2dhdGVwYXNzX2hhbmRsZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFiY1x1ZDgwMGRlZiIuZW5jb2RlKCJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIiksCkBAIC05MTMsMTUgKzk1NywxOSBAQAogICAgICAgICAgICAgKGInYSsvLy8vLCtJS3ctYicsICdhXHVmZmZmXHVmZmZkXHUyMGFjYicpLAogICAgICAgICBdCiAgICAgICAgIGZvciByYXcsIGV4cGVjdGVkIGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzdfZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmRlY29kZSgndXRmLTcnLCAncmVwbGFjZScpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHJhdz1yYXcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl83X2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9ub25ibXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1xVMDAwMTA0QTAnLmVuY29kZShzZWxmLmVuY29kaW5nKSwgYicrMkFIY29BLScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x1ZDgwMVx1ZGNhMCcuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBiJysyQUhjb0EtJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJysyQUhjb0EtJy5kZWNvZGUoc2VsZi5lbmNvZGluZyksICdcVTAwMDEwNEEwJykKIAorICAgIHRlc3RfbG9uZV9zdXJyb2dhdGVzID0gTm9uZQorCisKIGNsYXNzIFVURjE2RXhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKQEAgLTk0Niw3ICs5OTQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWFkYnVmZmVyX2VuY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUsIDQyKQogCi1jbGFzcyBVVEY4U2lnVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVVRGOFNpZ1Rlc3QoVVRGOFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtOC1zaWciCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgpAQCAtMTYyOCw2ICsxNjc2LDcgQEAKICAgICAiY3AwMzciLAogICAgICJjcDEwMDYiLAogICAgICJjcDEwMjYiLAorICAgICJjcDExMjUiLAogICAgICJjcDExNDAiLAogICAgICJjcDEyNTAiLAogICAgICJjcDEyNTEiLApAQCAtMjM3MCw2MCArMjQxOSw5MyBAQAogICAgICJxdW9wcmlfY29kZWMiLAogICAgICJoZXhfY29kZWMiLAogXQorCit0cmFuc2Zvcm1fYWxpYXNlcyA9IHsKKyAgICAiYmFzZTY0X2NvZGVjIjogWyJiYXNlNjQiLCAiYmFzZV82NCJdLAorICAgICJ1dV9jb2RlYyI6IFsidXUiXSwKKyAgICAicXVvcHJpX2NvZGVjIjogWyJxdW9wcmkiLCAicXVvdGVkX3ByaW50YWJsZSIsICJxdW90ZWRwcmludGFibGUiXSwKKyAgICAiaGV4X2NvZGVjIjogWyJoZXgiXSwKKyAgICAicm90XzEzIjogWyJyb3QxMyJdLAorfQorCiB0cnk6CiAgICAgaW1wb3J0IHpsaWIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCisgICAgemxpYiA9IE5vbmUKIGVsc2U6CiAgICAgYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5ncy5hcHBlbmQoInpsaWJfY29kZWMiKQorICAgIHRyYW5zZm9ybV9hbGlhc2VzWyJ6bGliX2NvZGVjIl0gPSBbInppcCIsICJ6bGliIl0KIHRyeToKICAgICBpbXBvcnQgYnoyCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogZWxzZToKICAgICBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzLmFwcGVuZCgiYnoyX2NvZGVjIikKKyAgICB0cmFuc2Zvcm1fYWxpYXNlc1siYnoyX2NvZGVjIl0gPSBbImJ6MiJdCiAKIGNsYXNzIFRyYW5zZm9ybUNvZGVjVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CiAgICAgICAgIGJpbnB1dCA9IGJ5dGVzKHJhbmdlKDI1NikpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgotICAgICAgICAgICAgIyBnZW5lcmljIGNvZGVjcyBpbnRlcmZhY2UKLSAgICAgICAgICAgIChvLCBzaXplKSA9IGNvZGVjcy5nZXRlbmNvZGVyKGVuY29kaW5nKShiaW5wdXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihiaW5wdXQpKQotICAgICAgICAgICAgKGksIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihvKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgYmlucHV0KQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgICMgZ2VuZXJpYyBjb2RlY3MgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgKG8sIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKGJpbnB1dCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihiaW5wdXQpKQorICAgICAgICAgICAgICAgIChpLCBzaXplKSA9IGNvZGVjcy5nZXRkZWNvZGVyKGVuY29kaW5nKShvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKG8pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgYmlucHV0KQogCiAgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQotICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQotICAgICAgICAgICAgc291dCA9IHJlYWRlci5yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKKyAgICAgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKIAogICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKLSAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCi0gICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCi0gICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKKyAgICAgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXQsIGIiXHg4MCIpCisKKyAgICBkZWYgdGVzdF9idWZmZXJfYXBpX3VzYWdlKHNlbGYpOgorICAgICAgICAjIFdlIGNoZWNrIGFsbCB0aGUgdHJhbnNmb3JtIGNvZGVjcyBhY2NlcHQgbWVtb3J5dmlldyBpbnB1dAorICAgICAgICAjIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcKKyAgICAgICAgIyBhbmQgYWxzbyB0aGF0IHRoZXkgcm91bmR0cmlwIGNvcnJlY3RseQorICAgICAgICBvcmlnaW5hbCA9IGIiMTIzNDVceDgwIgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBkYXRhID0gb3JpZ2luYWwKKyAgICAgICAgICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEgPSBjb2RlY3MuZW5jb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHZpZXdfZW5jb2RlZCA9IGNvZGVjcy5lbmNvZGUodmlldywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2VuY29kZWQsIGRhdGEpCisgICAgICAgICAgICAgICAgdmlldyA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29kZWNzLmRlY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIG9yaWdpbmFsKQorICAgICAgICAgICAgICAgIHZpZXdfZGVjb2RlZCA9IGNvZGVjcy5kZWNvZGUodmlldywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2RlY29kZWQsIGRhdGEpCiAKICAgICBkZWYgdGVzdF90ZXh0X3RvX2JpbmFyeV9ibGFja2xpc3RzX2JpbmFyeV90cmFuc2Zvcm1zKHNlbGYpOgogICAgICAgICAjIENoZWNrIGJpbmFyeSAtPiBiaW5hcnkgY29kZWNzIGdpdmUgYSBnb29kIGVycm9yIGZvciBzdHIgaW5wdXQKICAgICAgICAgYmFkX2lucHV0ID0gImJhZCBpbnB1dCB0eXBlIgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKLSAgICAgICAgICAgIGZtdCA9IChyInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgICAgIHIidXNlIGNvZGVjcy5lbmNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKLSAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZykgYXMgZmFpbHVyZToKLSAgICAgICAgICAgICAgICBiYWRfaW5wdXQuZW5jb2RlKGVuY29kaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGZtdCA9ICggInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgbXNnID0gZm10LmZvcm1hdChlbmNvZGluZykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZykgYXMgZmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgYmFkX2lucHV0LmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18pCiAKICAgICBkZWYgdGVzdF90ZXh0X3RvX2JpbmFyeV9ibGFja2xpc3RzX3RleHRfdHJhbnNmb3JtcyhzZWxmKToKICAgICAgICAgIyBDaGVjayBzdHIuZW5jb2RlIGdpdmVzIGEgZ29vZCBlcnJvciBtZXNzYWdlIGZvciBzdHIgLT4gc3RyIGNvZGVjcwogICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgciJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CiAgICAgICAgICAgICAianVzdCBhbiBleGFtcGxlIG1lc3NhZ2UiLmVuY29kZSgicm90XzEzIikKIApAQCAtMjQzMiwyMyArMjUxNCwyMzggQEAKICAgICAgICAgIyBtZXNzYWdlIGZvciBiaW5hcnkgLT4gYmluYXJ5IGNvZGVjcwogICAgICAgICBkYXRhID0gYiJlbmNvZGUgZmlyc3QgdG8gZW5zdXJlIHdlIG1lZXQgYW55IGZvcm1hdCByZXN0cmljdGlvbnMiCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgotICAgICAgICAgICAgZW5jb2RlZF9kYXRhID0gY29kZWNzLmVuY29kZShkYXRhLCBlbmNvZGluZykKLSAgICAgICAgICAgIGZtdCA9IChyInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgICAgIHIidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKLSAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6Ci0gICAgICAgICAgICAgICAgZW5jb2RlZF9kYXRhLmRlY29kZShlbmNvZGluZykKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKLSAgICAgICAgICAgICAgICBieXRlYXJyYXkoZW5jb2RlZF9kYXRhKS5kZWNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZW5jb2RlZF9kYXRhID0gY29kZWNzLmVuY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBmbXQgPSAociJ7IXJ9IGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkX2RhdGEuZGVjb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGVuY29kZWRfZGF0YSkuZGVjb2RlKGVuY29kaW5nKQogCiAgICAgZGVmIHRlc3RfYmluYXJ5X3RvX3RleHRfYmxhY2tsaXN0c190ZXh0X3RyYW5zZm9ybXMoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgc3RyIC0+IHN0ciBjb2RlYyBnaXZlcyBhIGdvb2QgZXJyb3IgZm9yIGJpbmFyeSBpbnB1dAogICAgICAgICBmb3IgYmFkX2lucHV0IGluIChiImltbXV0YWJsZSIsIGJ5dGVhcnJheShiIm11dGFibGUiKSk6Ci0gICAgICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgICAgIHIidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKSBhcyBmYWlsdXJlOgotICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5kZWNvZGUoInJvdF8xMyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18pCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChiYWRfaW5wdXQ9YmFkX2lucHV0KToKKyAgICAgICAgICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5kZWNvZGUoInJvdF8xMyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIgc3VwcG9ydCIpCisgICAgZGVmIHRlc3RfY3VzdG9tX3psaWJfZXJyb3JfaXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBDaGVjayB6bGliIGNvZGVjIGdpdmVzIGEgZ29vZCBlcnJvciBmb3IgbWFsZm9ybWVkIGlucHV0CisgICAgICAgIG1zZyA9ICJeZGVjb2Rpbmcgd2l0aCAnemxpYl9jb2RlYycgY29kZWMgZmFpbGVkIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiaGVsbG8iLCAiemxpYl9jb2RlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGZhaWx1cmUuZXhjZXB0aW9uKSkKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9oZXhfZXJyb3JfaXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBoZXggY29kZWMgZ2l2ZXMgYSBnb29kIGVycm9yIGZvciBtYWxmb3JtZWQgaW5wdXQKKyAgICAgICAgbXNnID0gIl5kZWNvZGluZyB3aXRoICdoZXhfY29kZWMnIGNvZGVjIGZhaWxlZCIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgbXNnKSBhcyBmYWlsdXJlOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImhlbGxvIiwgImhleF9jb2RlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGZhaWx1cmUuZXhjZXB0aW9uKSkKKworICAgICMgVW5mb3J0dW5hdGVseSwgdGhlIGJ6MiBtb2R1bGUgdGhyb3dzIE9TRXJyb3IsIHdoaWNoIHRoZSBjb2RlYworICAgICMgbWFjaGluZXJ5IGN1cnJlbnRseSBjYW4ndCB3cmFwIDooCisKKyAgICAjIEVuc3VyZSBjb2RlYyBhbGlhc2VzIGZyb20gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc0NzUgd29yaworICAgIGRlZiB0ZXN0X2FsaWFzZXMoc2VsZik6CisgICAgICAgIGZvciBjb2RlY19uYW1lLCBhbGlhc2VzIGluIHRyYW5zZm9ybV9hbGlhc2VzLml0ZW1zKCk6CisgICAgICAgICAgICBleHBlY3RlZF9uYW1lID0gY29kZWNzLmxvb2t1cChjb2RlY19uYW1lKS5uYW1lCisgICAgICAgICAgICBmb3IgYWxpYXMgaW4gYWxpYXNlczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChhbGlhcz1hbGlhcyk6CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSBjb2RlY3MubG9va3VwKGFsaWFzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ubmFtZSwgZXhwZWN0ZWRfbmFtZSkKKworCisjIFRoZSBjb2RlYyBzeXN0ZW0gdHJpZXMgdG8gd3JhcCBleGNlcHRpb25zIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgZXJyb3IKKyMgbWVudGlvbnMgdGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgYW5kIHRoZSBjb2RlYyBpbnZvbHZlZC4gV2UKKyMgY3VycmVudGx5ICpvbmx5KiB3YW50IHRoaXMgdG8gaGFwcGVuIGZvciByZWxhdGl2ZWx5IHN0YXRlbGVzcworIyBleGNlcHRpb25zLCB3aGVyZSB0aGUgb25seSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbiB0aGV5IGNvbnRhaW4gaXMgdGhlaXIKKyMgdHlwZSBhbmQgYSBzaW5nbGUgc3RyIGFyZ3VtZW50LgorCisjIFVzZSBhIGxvY2FsIGNvZGVjIHJlZ2lzdHJ5IHRvIGF2b2lkIGFwcGVhcmluZyB0byBsZWFrIG9iamVjdHMgd2hlbgorIyByZWdpc3RlcmluZyBtdWx0aXBsZSBzZWFjaCBmdW5jdGlvbnMKK19URVNUX0NPREVDUyA9IHt9CisKK2RlZiBfZ2V0X3Rlc3RfY29kZWMoY29kZWNfbmFtZSk6CisgICAgcmV0dXJuIF9URVNUX0NPREVDUy5nZXQoY29kZWNfbmFtZSkKK2NvZGVjcy5yZWdpc3RlcihfZ2V0X3Rlc3RfY29kZWMpICMgUmV0dXJucyBOb25lLCBub3QgdXNhYmxlIGFzIGEgZGVjb3JhdG9yCisKK3RyeToKKyAgICAjIElzc3VlICMyMjE2NjogQWxzbyBuZWVkIHRvIGNsZWFyIHRoZSBpbnRlcm5hbCBjYWNoZSBpbiBDUHl0aG9uCisgICAgZnJvbSBfY29kZWNzIGltcG9ydCBfZm9yZ2V0X2NvZGVjCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZGVmIF9mb3JnZXRfY29kZWMoY29kZWNfbmFtZSk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBFeGNlcHRpb25DaGFpbmluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFRoZXJlJ3Mgbm8gd2F5IHRvIHVucmVnaXN0ZXIgYSBjb2RlYyBzZWFyY2ggZnVuY3Rpb24sIHNvIHdlIGp1c3QKKyAgICAgICAgIyBlbnN1cmUgd2UgcmVuZGVyIHRoaXMgb25lIGZhaXJseSBoYXJtbGVzcyBhZnRlciB0aGUgdGVzdAorICAgICAgICAjIGNhc2UgZmluaXNoZXMgYnkgdXNpbmcgdGhlIHRlc3QgY2FzZSByZXByIGFzIHRoZSBjb2RlYyBuYW1lCisgICAgICAgICMgVGhlIGNvZGVjcyBtb2R1bGUgbm9ybWFsaXplcyBjb2RlYyBuYW1lcywgYWx0aG91Z2ggdGhpcyBkb2Vzbid0CisgICAgICAgICMgYXBwZWFyIHRvIGJlIGZvcm1hbGx5IGRvY3VtZW50ZWQuLi4KKyAgICAgICAgIyBXZSBhbHNvIG1ha2Ugc3VyZSB3ZSB1c2UgYSB0cnVseSB1bmlxdWUgaWQgZm9yIHRoZSBjdXN0b20gY29kZWMKKyAgICAgICAgIyB0byBhdm9pZCBpc3N1ZXMgd2l0aCB0aGUgY29kZWMgY2FjaGUgd2hlbiBydW5uaW5nIHRoZXNlIHRlc3RzCisgICAgICAgICMgbXVsdGlwbGUgdGltZXMgKGUuZy4gd2hlbiBodW50aW5nIGZvciByZWZsZWFrcykKKyAgICAgICAgdW5pcXVlX2lkID0gcmVwcihzZWxmKSArIHN0cihpZChzZWxmKSkKKyAgICAgICAgc2VsZi5jb2RlY19uYW1lID0gZW5jb2RpbmdzLm5vcm1hbGl6ZV9lbmNvZGluZyh1bmlxdWVfaWQpLmxvd2VyKCkKKworICAgICAgICAjIFdlIHN0b3JlIHRoZSBvYmplY3QgdG8gcmFpc2Ugb24gdGhlIGluc3RhbmNlIGJlY2F1c2Ugb2YgYSBiYWQKKyAgICAgICAgIyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBjb2RlYyBjYWNoaW5nICh3aGljaCBtZWFucyB3ZSBjYW4ndAorICAgICAgICAjIHJlY3JlYXRlIHRoZSBjb2RlYyBlbnRyeSkgYW5kIHJlZ3J0ZXN0IHJlZmxlYWsgaHVudGluZyAod2hpY2gKKyAgICAgICAgIyBydW5zIHRoZSBzYW1lIHRlc3QgaW5zdGFuY2UgbXVsdGlwbGUgdGltZXMpLiBUaGlzIG1lYW5zIHdlCisgICAgICAgICMgbmVlZCB0byBlbnN1cmUgdGhlIGNvZGVjcyBjYWxsIGJhY2sgaW4gdG8gdGhlIGluc3RhbmNlIHRvIGZpbmQKKyAgICAgICAgIyBvdXQgd2hpY2ggZXhjZXB0aW9uIHRvIHJhaXNlIHJhdGhlciB0aGFuIGJpbmRpbmcgdGhlbSBpbiBhCisgICAgICAgICMgY2xvc3VyZSB0byBhbiBvYmplY3QgdGhhdCBtYXkgY2hhbmdlIG9uIHRoZSBuZXh0IHJ1bgorICAgICAgICBzZWxmLm9ial90b19yYWlzZSA9IFJ1bnRpbWVFcnJvcgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBfVEVTVF9DT0RFQ1MucG9wKHNlbGYuY29kZWNfbmFtZSwgTm9uZSkKKyAgICAgICAgIyBJc3N1ZSAjMjIxNjY6IEFsc28gcG9wIGZyb20gY2FjaGVzIHRvIGF2b2lkIGFwcGVhcmFuY2Ugb2YgcmVmIGxlYWtzCisgICAgICAgIGVuY29kaW5ncy5fY2FjaGUucG9wKHNlbGYuY29kZWNfbmFtZSwgTm9uZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX2ZvcmdldF9jb2RlYyhzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXRfY29kZWMoc2VsZiwgZW5jb2RlLCBkZWNvZGUpOgorICAgICAgICBjb2RlY19pbmZvID0gY29kZWNzLkNvZGVjSW5mbyhlbmNvZGUsIGRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1zZWxmLmNvZGVjX25hbWUpCisgICAgICAgIF9URVNUX0NPREVDU1tzZWxmLmNvZGVjX25hbWVdID0gY29kZWNfaW5mbworCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgYXNzZXJ0V3JhcHBlZChzZWxmLCBvcGVyYXRpb24sIGV4Y190eXBlLCBtc2cpOgorICAgICAgICBmdWxsX21zZyA9IHIie30gd2l0aCB7IXJ9IGNvZGVjIGZhaWxlZCBcKHt9OiB7fVwpIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIHNlbGYuY29kZWNfbmFtZSwgZXhjX3R5cGUuX19uYW1lX18sIG1zZykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KGV4Y190eXBlLCBmdWxsX21zZykgYXMgY2F1Z2h0OgorICAgICAgICAgICAgeWllbGQgY2F1Z2h0CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjYXVnaHQuZXhjZXB0aW9uLl9fY2F1c2VfXywgZXhjX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGNhdWdodC5leGNlcHRpb24uX19jYXVzZV9fLl9fdHJhY2ViYWNrX18pCisKKyAgICBkZWYgcmFpc2Vfb2JqKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAjIEhlbHBlciB0byBkeW5hbWljYWxseSBjaGFuZ2UgdGhlIG9iamVjdCByYWlzZWQgYnkgYSB0ZXN0IGNvZGVjCisgICAgICAgIHJhaXNlIHNlbGYub2JqX3RvX3JhaXNlCisKKyAgICBkZWYgY2hlY2tfd3JhcHBlZChzZWxmLCBvYmpfdG9fcmFpc2UsIG1zZywgZXhjX3R5cGU9UnVudGltZUVycm9yKToKKyAgICAgICAgc2VsZi5vYmpfdG9fcmFpc2UgPSBvYmpfdG9fcmFpc2UKKyAgICAgICAgc2VsZi5zZXRfY29kZWMoc2VsZi5yYWlzZV9vYmosIHNlbGYucmFpc2Vfb2JqKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V3JhcHBlZCgiZW5jb2RpbmciLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgICAgICJzdHJfaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJlbmNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmVuY29kZSgic3RyX2lucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V3JhcHBlZCgiZGVjb2RpbmciLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgICAgIGIiYnl0ZXMgaW5wdXQiLmRlY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJkZWNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImJ5dGVzIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorCisgICAgZGVmIHRlc3RfcmFpc2VfYnlfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKFJ1bnRpbWVFcnJvciwgIiIpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9ieV92YWx1ZShzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIGJlIHdyYXBwZWQiCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChSdW50aW1lRXJyb3IobXNnKSwgbXNnKQorCisgICAgZGVmIHRlc3RfcmFpc2VfZ3JhbmRjaGlsZF9zdWJjbGFzc19leGFjdF9zaXplKHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgYmUgd3JhcHBlZCIKKyAgICAgICAgY2xhc3MgTXlSdW50aW1lRXJyb3IoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICgpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChNeVJ1bnRpbWVFcnJvcihtc2cpLCBtc2csIE15UnVudGltZUVycm9yKQorCisgICAgZGVmIHRlc3RfcmFpc2Vfc3ViY2xhc3Nfd2l0aF93ZWFrcmVmX3N1cHBvcnQoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBiZSB3cmFwcGVkIgorICAgICAgICBjbGFzcyBNeVJ1bnRpbWVFcnJvcihSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoTXlSdW50aW1lRXJyb3IobXNnKSwgbXNnLCBNeVJ1bnRpbWVFcnJvcikKKworICAgIGRlZiBjaGVja19ub3Rfd3JhcHBlZChzZWxmLCBvYmpfdG9fcmFpc2UsIG1zZyk6CisgICAgICAgIGRlZiByYWlzZV9vYmooKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByYWlzZSBvYmpfdG9fcmFpc2UKKyAgICAgICAgc2VsZi5zZXRfY29kZWMocmFpc2Vfb2JqLCByYWlzZV9vYmopCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAic3RyIGlucHV0Ii5lbmNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmVuY29kZSgic3RyIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJieXRlcyBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKworICAgIGRlZiB0ZXN0X2luaXRfb3ZlcnJpZGVfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEN1c3RvbUluaXQoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoQ3VzdG9tSW5pdCwgIiIpCisKKyAgICBkZWYgdGVzdF9uZXdfb3ZlcnJpZGVfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEN1c3RvbU5ldyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscykKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChDdXN0b21OZXcsICIiKQorCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfYXR0cmlidXRlX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgTk9UIGJlIHdyYXBwZWQiCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcihtc2cpCisgICAgICAgIGV4Yy5hdHRyID0gMQorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKGV4YywgIl57fSQiLmZvcm1hdChtc2cpKQorCisgICAgZGVmIHRlc3Rfbm9uX3N0cl9hcmdfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoUnVudGltZUVycm9yKDEpLCAiMSIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9hcmdzX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBtc2dfcmUgPSByIl5cKCdhJywgJ2InLCAnYydcKSQiCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoUnVudGltZUVycm9yKCdhJywgJ2InLCAnYycpLCBtc2dfcmUpCisKKyAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTYwOQorICAgIGRlZiB0ZXN0X2NvZGVjX2xvb2t1cF9mYWlsdXJlX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBtc2cgPSAiXnVua25vd24gZW5jb2Rpbmc6IHt9JCIuZm9ybWF0KHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgIyBUaGUgaW5pdGlhbCBjb2RlYyBsb29rdXAgc2hvdWxkIG5vdCBiZSB3cmFwcGVkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJzdHIgaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5lbmNvZGUoInN0ciBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImJ5dGVzIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorCisgICAgZGVmIHRlc3RfdW5mbGFnZ2VkX25vbl90ZXh0X2NvZGVjX2hhbmRsaW5nKHNlbGYpOgorICAgICAgICAjIFRoZSBzdGRsaWIgbm9uLXRleHQgY29kZWNzIGFyZSBub3cgbWFya2VkIHNvIHRoZXkncmUKKyAgICAgICAgIyBwcmUtZW1wdGl2ZWx5IHNraXBwZWQgYnkgdGhlIHRleHQgbW9kZWwgcmVsYXRlZCBtZXRob2RzCisgICAgICAgICMgSG93ZXZlciwgdGhpcmQgcGFydHkgY29kZWNzIHdvbid0IGJlIGZsYWdnZWQsIHNvIHdlIHN0aWxsIG1ha2UKKyAgICAgICAgIyBzdXJlIHRoZSBjYXNlIHdoZXJlIGFuIGluYXBwcm9wcmlhdGUgb3V0cHV0IHR5cGUgaXMgcHJvZHVjZWQgaXMKKyAgICAgICAgIyBoYW5kbGVkIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgZGVmIGVuY29kZV90b19zdHIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gIm5vdCBieXRlcyEiLCAwCisgICAgICAgIGRlZiBkZWNvZGVfdG9fYnl0ZXMoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYiJub3Qgc3RyISIsIDAKKyAgICAgICAgc2VsZi5zZXRfY29kZWMoZW5jb2RlX3RvX3N0ciwgZGVjb2RlX3RvX2J5dGVzKQorICAgICAgICAjIE5vIGlucHV0IG9yIG91dHB1dCB0eXBlIGNoZWNrcyBvbiB0aGUgY29kZWNzIG1vZHVsZSBmdW5jdGlvbnMKKyAgICAgICAgZW5jb2RlZCA9IGNvZGVjcy5lbmNvZGUoTm9uZSwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZWQsICJub3QgYnl0ZXMhIikKKyAgICAgICAgZGVjb2RlZCA9IGNvZGVjcy5kZWNvZGUoTm9uZSwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWQsIGIibm90IHN0ciEiKQorICAgICAgICAjIFRleHQgbW9kZWwgbWV0aG9kcyBzaG91bGQgY29tcGxhaW4KKyAgICAgICAgZm10ID0gKHIiXnshcn0gZW5jb2RlciByZXR1cm5lZCAnc3RyJyBpbnN0ZWFkIG9mICdieXRlcyc7ICIKKyAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGVcKFwpIHRvIGVuY29kZSB0byBhcmJpdHJhcnkgdHlwZXMkIikKKyAgICAgICAgbXNnID0gZm10LmZvcm1hdChzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAic3RyX2lucHV0Ii5lbmNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICBmbXQgPSAociJeeyFyfSBkZWNvZGVyIHJldHVybmVkICdieXRlcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyQiKQorICAgICAgICBtc2cgPSBmbXQuZm9ybWF0KHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGIiYnl0ZXMgaW5wdXQiLmRlY29kZShzZWxmLmNvZGVjX25hbWUpCisKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywKQEAgLTI0NjAsOCArMjc1Nyw4IEBACiAgICAgZGVmIHRlc3RfaW52YWxpZF9jb2RlX3BhZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlLCAtMSwgJ2EnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgLTEsIGInYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIDEyMywgJ2EnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCAxMjMsIGInYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlLCAxMjMsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIDEyMywgYidhJykKIAogICAgIGRlZiB0ZXN0X2NvZGVfcGFnZV9uYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFVuaWNvZGVFbmNvZGVFcnJvciwgJ2NwOTMyJywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYmI1MWYuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHVubGluaywgdW5sb2FkCi1pbXBvcnQgaW1wb3J0bGliLCBvcywgc3lzLCBzdWJwcm9jZXNzCi0KLWNsYXNzIENvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2JhZF9jb2Rpbmcoc2VsZik6Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcnCi0gICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCi0KLSAgICBkZWYgdGVzdF9iYWRfY29kaW5nMihzZWxmKToKLSAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZzInCi0gICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCi0KLSAgICBkZWYgdmVyaWZ5X2JhZF9tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgX19pbXBvcnRfXywgJ3Rlc3QuJyArIG1vZHVsZV9uYW1lKQotCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG1vZHVsZV9uYW1lICsgJy5weScpCi0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6Ci0gICAgICAgICAgICBieXRlcyA9IGZwLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgYnl0ZXMsIGZpbGVuYW1lLCAnZXhlYycpCi0KLSAgICBkZWYgdGVzdF9leGVjX3ZhbGlkX2NvZGluZyhzZWxmKToKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYicjIGNvZGluZzogY3A5NDlcbmEgPSAiXHhhYVx4YTciXG4nLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgJ1x1MzA0NycpCi0KLSAgICBkZWYgdGVzdF9maWxlX3BhcnNlKHNlbGYpOgotICAgICAgICAjIGlzc3VlMTEzNDogYWxsIGVuY29kaW5ncyBvdXRzaWRlIGxhdGluLTEgYW5kIHV0Zi04IGZhaWwgb24KLSAgICAgICAgIyBtdWx0aWxpbmUgc3RyaW5ncyBhbmQgbG9uZyBsaW5lcyAoPjUxMiBjb2x1bW5zKQotICAgICAgICB1bmxvYWQoVEVTVEZOKQotICAgICAgICBmaWxlbmFtZSA9IFRFU1RGTiArICIucHkiCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPSJjcDEyNTIiKQotICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGY6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgiIyAtKi0gY29kaW5nOiBjcDEyNTIgLSotXG4iKQotICAgICAgICAgICAgICAgIGYud3JpdGUoIicnJ0Egc2hvcnQgc3RyaW5nXG4iKQotICAgICAgICAgICAgICAgIGYud3JpdGUoIicnJ1xuIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKCInQSB2ZXJ5IGxvbmcgc3RyaW5nICVzJ1xuIiAlICgiWCIgKiAxMDAwKSkKLQotICAgICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKLSAgICAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUpCi0gICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAiYyIpCi0gICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAibyIpCi0gICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQotCi0gICAgZGVmIHRlc3RfZXJyb3JfZnJvbV9zdHJpbmcoc2VsZik6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2Mjg5Ci0gICAgICAgIGlucHV0ID0gIiMgY29kaW5nOiBhc2NpaVxuXE57U05PV01BTn0iLmVuY29kZSgndXRmLTgnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKSBhcyBjOgotICAgICAgICAgICAgY29tcGlsZShpbnB1dCwgIjxzdHJpbmc+IiwgImV4ZWMiKQotICAgICAgICBleHBlY3RlZCA9ICInYXNjaWknIGNvZGVjIGNhbid0IGRlY29kZSBieXRlIDB4ZTIgaW4gcG9zaXRpb24gMTY6ICIgXAotICAgICAgICAgICAgICAgICAgICJvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5leGNlcHRpb24uYXJnc1swXS5zdGFydHN3aXRoKGV4cGVjdGVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1jLmV4Y2VwdGlvbi5hcmdzWzBdKQotCi0gICAgZGVmIHRlc3RfMjA3MzEoc2VsZik6Ci0gICAgICAgIHN1YiA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGluZzIwNzMxLnB5JyldLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgZXJyID0gc3ViLmNvbW11bmljYXRlKClbMV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIucmV0dXJuY29kZSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ1N5bnRheEVycm9yJywgZXJyKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKaW5kZXggZmY1Mjc1NS4uNjQwN2I2ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CkBAIC0xMTIsNiArMTEyLDM4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChkKSwgZGljdChhPTEsIGI9MiwgYz0zMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChkLml0ZW1zKCkpLCBkaWN0KGE9MSwgYj0yLCBjPTMwKSkKIAorICAgIGRlZiB0ZXN0X25ld19jaGlsZChzZWxmKToKKyAgICAgICAgJ1Rlc3RzIGZvciBjaGFuZ2VzIGZvciBpc3N1ZSAjMTY2MTMuJworICAgICAgICBjID0gQ2hhaW5NYXAoKQorICAgICAgICBjWydhJ10gPSAxCisgICAgICAgIGNbJ2InXSA9IDIKKyAgICAgICAgbSA9IHsnYic6MjAsICdjJzogMzB9CisgICAgICAgIGQgPSBjLm5ld19jaGlsZChtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubWFwcywgW3snYic6MjAsICdjJzozMH0sIHsnYSc6MSwgJ2InOjJ9XSkgICMgY2hlY2sgaW50ZXJuYWwgc3RhdGUKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtLCBkLm1hcHNbMF0pCisKKyAgICAgICAgIyBVc2UgYSBkaWZmZXJlbnQgbWFwIHRoYW4gYSBkaWN0CisgICAgICAgIGNsYXNzIGxvd2VyZGljdChkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQorICAgICAgICAgICAgICAgIHJldHVybiBkaWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5fX2NvbnRhaW5zX18oc2VsZiwga2V5KQorCisgICAgICAgIGMgPSBDaGFpbk1hcCgpCisgICAgICAgIGNbJ2EnXSA9IDEKKyAgICAgICAgY1snYiddID0gMgorICAgICAgICBtID0gbG93ZXJkaWN0KGI9MjAsIGM9MzApCisgICAgICAgIGQgPSBjLm5ld19jaGlsZChtKQorICAgICAgICBzZWxmLmFzc2VydElzKG0sIGQubWFwc1swXSkKKyAgICAgICAgZm9yIGtleSBpbiAnYWJjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGNvbnRhaW5zCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgZCkKKyAgICAgICAgZm9yIGssIHYgaW4gZGljdChhPTEsIEI9MjAsIEM9MzAsIHo9MTAwKS5pdGVtcygpOiAgICAgICAgICAgICAjIGNoZWNrIGdldAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChrLCAxMDApLCB2KQorCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgTmFtZWQgVHVwbGVzCkBAIC0yNjksNyArMzAxLDcgQEAKICAgICAgICAgZm9yIG1vZHVsZSBpbiAocGlja2xlLCk6CiAgICAgICAgICAgICBsb2FkcyA9IGdldGF0dHIobW9kdWxlLCAnbG9hZHMnKQogICAgICAgICAgICAgZHVtcHMgPSBnZXRhdHRyKG1vZHVsZSwgJ2R1bXBzJykKLSAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiAtMSwgMCwgMSwgMjoKKyAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZSgtMSwgbW9kdWxlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgICAgICBxID0gbG9hZHMoZHVtcHMocCwgcHJvdG9jb2wpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgcSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX2ZpZWxkcywgcS5fZmllbGRzKQpAQCAtNjg4LDE0ICs3MjAsMTY2IEBACiAKICAgICAgICAgY3MgPSBNeUNvbXBhcmFibGVTZXQoKQogICAgICAgICBuY3MgPSBNeU5vbkNvbXBhcmFibGVTZXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5jcyA8IGNzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmNzIDw9IGNzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5jcyA+IGNzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmNzID49IGNzKQorCisgICAgZGVmIGFzc2VydFNhbWVTZXQoc2VsZiwgczEsIHMyKToKKyAgICAgICAgIyBjb2VyY2UgYm90aCB0byBhIHJlYWwgc2V0IHRoZW4gY2hlY2sgZXF1YWxpdHkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQoczEpLCBzZXQoczIpKQorCisgICAgZGVmIHRlc3RfU2V0X2ludGVyb3BlcmFiaWxpdHlfd2l0aF9yZWFsX3NldHMoc2VsZik6CisgICAgICAgICMgSXNzdWU6IDg3NDMKKyAgICAgICAgY2xhc3MgTGlzdFNldChTZXQpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnRzPSgpKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBbXQorICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGVsZW1lbnRzOgorICAgICAgICAgICAgICAgICAgICBpZiBlbGVtIG5vdCBpbiBzZWxmLmRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEuYXBwZW5kKGVsZW0pCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGVsZW0pOgorICAgICAgICAgICAgICAgIHJldHVybiBlbGVtIGluIHNlbGYuZGF0YQorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuZGF0YSkKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5kYXRhKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnU2V0KHshcn0pJy5mb3JtYXQoc2VsZi5kYXRhKQorCisgICAgICAgIHIxID0gc2V0KCdhYmMnKQorICAgICAgICByMiA9IHNldCgnYmNkJykKKyAgICAgICAgcjMgPSBzZXQoJ2FiY2RlJykKKyAgICAgICAgZjEgPSBMaXN0U2V0KCdhYmMnKQorICAgICAgICBmMiA9IExpc3RTZXQoJ2JjZCcpCisgICAgICAgIGYzID0gTGlzdFNldCgnYWJjZGUnKQorICAgICAgICBsMSA9IGxpc3QoJ2FiY2NiYScpCisgICAgICAgIGwyID0gbGlzdCgnYmNkZGNiJykKKyAgICAgICAgbDMgPSBsaXN0KCdhYmNkZWVkY2JhJykKKworICAgICAgICB0YXJnZXQgPSByMSAmIHIyCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAmIGYyLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAmIHIyLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChyMiAmIGYxLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAmIGwyLCB0YXJnZXQpCisKKyAgICAgICAgdGFyZ2V0ID0gcjEgfCByMgorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgfCBmMiwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgfCByMiwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQocjIgfCBmMSwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgfCBsMiwgdGFyZ2V0KQorCisgICAgICAgIGZ3ZF90YXJnZXQgPSByMSAtIHIyCisgICAgICAgIHJldl90YXJnZXQgPSByMiAtIHIxCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAtIGYyLCBmd2RfdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjIgLSBmMSwgcmV2X3RhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KGYxIC0gcjIsIGZ3ZF90YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMiAtIHIxLCByZXZfdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQocjEgLSBmMiwgZndkX3RhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KHIyIC0gZjEsIHJldl90YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAtIGwyLCBmd2RfdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjIgLSBsMSwgcmV2X3RhcmdldCkKKworICAgICAgICB0YXJnZXQgPSByMSBeIHIyCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSBeIGYyLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSBeIHIyLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChyMiBeIGYxLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSBeIGwyLCB0YXJnZXQpCisKKyAgICAgICAgIyBEb24ndCBjaGFuZ2UgdGhlIGZvbGxvd2luZyB0byB1c2UgYXNzZXJ0TGVzcyBvciBvdGhlcgorICAgICAgICAjICJtb3JlIHNwZWNpZmljIiB1bml0dGVzdCBhc3NlcnRpb25zLiAgVGhlIGN1cnJlbnQKKyAgICAgICAgIyBhc3NlcnRUcnVlL2Fzc2VydEZhbHNlIHN0eWxlIG1ha2VzIHRoZSBwYXR0ZXJuIG9mIHRlc3QKKyAgICAgICAgIyBjYXNlIGNvbWJpbmF0aW9ucyBjbGVhciBhbmQgYWxsb3dzIHVzIHRvIGtub3cgZm9yIHN1cmUKKyAgICAgICAgIyB0aGUgZXhhY3Qgb3BlcmF0b3IgYmVpbmcgaW52b2tlZC4KKworICAgICAgICAjIHByb3BlciBzdWJzZXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxIDwgZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPCBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMSA8IGYyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPCBmMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyMSA8IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxIDwgZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSA8IHIzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxIDwgcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPCByMikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgbmNzIDwgY3MKKyAgICAgICAgICAgIGYxIDwgbDMKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgbmNzIDw9IGNzCisgICAgICAgICAgICBmMSA8IGwxCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGNzID4gbmNzCisgICAgICAgICAgICBmMSA8IGwyCisKKyAgICAgICAgIyBhbnkgc3Vic2V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA8PSBmMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxIDw9IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxIDw9IGYyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPD0gZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSA8PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyMSA8PSBmMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxIDw9IHIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPD0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPD0gcjIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGNzID49IG5jcworICAgICAgICAgICAgZjEgPD0gbDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPD0gbDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPD0gbDIKKworICAgICAgICAjIHByb3BlciBzdXBlcnNldAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjMgPiBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMSA+IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyID4gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMyA+IHIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxID4gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjIgPiByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIzID4gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPiByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyMiA+IHIxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBmMSA+IGwzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxID4gbDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPiBsMgorCisgICAgICAgICMgYW55IHN1cGVyc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMyA+PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxID49IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyID49IGYxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjMgPj0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA+PSByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMiA+PSByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIzID49IHIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPj0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjIgPj0gcjEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxID49IGwzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxID49bDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPj0gbDIKKworICAgICAgICAjIGVxdWFsaXR5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA9PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxID09IGYxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgPT0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPT0gZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gcjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gbDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gbDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gbDIpCisKKyAgICAgICAgIyBpbmVxdWFsaXR5CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgIT0gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgIT0gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgIT0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSAhPSBmMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxICE9IGYzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgIT0gcjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSAhPSBsMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxICE9IGwxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgIT0gbDIpCiAKICAgICBkZWYgdGVzdF9NYXBwaW5nKHNlbGYpOgogICAgICAgICBmb3Igc2FtcGxlIGluIFtkaWN0XToKQEAgLTc1MCw2ICs5MzQsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyYW5nZSgxMCksIFNlcXVlbmNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhyYW5nZSwgU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWVtb3J5dmlldyhiIiIpLCBTZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MobWVtb3J5dmlldywgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKFNlcXVlbmNlLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAogICAgICAgICAgICAgJ19fZ2V0aXRlbV9fJykKQEAgLTkwNCwyMyArMTA5MCwyNiBAQAogICAgICAgICB3b3JkcyA9IENvdW50ZXIoJ3doaWNoIHdpdGNoIGhhZCB3aGljaCB3aXRjaGVzIHdyaXN0IHdhdGNoJy5zcGxpdCgpKQogICAgICAgICB1cGRhdGVfdGVzdCA9IENvdW50ZXIoKQogICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUod29yZHMpCi0gICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKLSAgICAgICAgICAgICAgICAgICAgd29yZHMuY29weSgpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkod29yZHMpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDIpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSwKLSAgICAgICAgICAgICAgICAgICAgZXZhbChyZXByKHdvcmRzKSksCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV90ZXN0LAotICAgICAgICAgICAgICAgICAgICBDb3VudGVyKHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgXSk6Ci0gICAgICAgICAgICBtc2cgPSAoaSwgZHVwLCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IHdvcmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIHdvcmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwKSwgbGVuKHdvcmRzKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkdXApLCB0eXBlKHdvcmRzKSkKKyAgICAgICAgZm9yIGxhYmVsLCBkdXAgaW4gWworICAgICAgICAgICAgICAgICAgICAoJ3dvcmRzLmNvcHkoKScsIHdvcmRzLmNvcHkoKSksCisgICAgICAgICAgICAgICAgICAgICgnY29weS5jb3B5KHdvcmRzKScsIGNvcHkuY29weSh3b3JkcykpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvcHkuZGVlcGNvcHkod29yZHMpJywgY29weS5kZWVwY29weSh3b3JkcykpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDApKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAwKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDEpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDIpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSksCisgICAgICAgICAgICAgICAgICAgICgnZXZhbChyZXByKHdvcmRzKSknLCBldmFsKHJlcHIod29yZHMpKSksCisgICAgICAgICAgICAgICAgICAgICgndXBkYXRlX3Rlc3QnLCB1cGRhdGVfdGVzdCksCisgICAgICAgICAgICAgICAgICAgICgnQ291bnRlcih3b3JkcyknLCBDb3VudGVyKHdvcmRzKSksCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChsYWJlbD1sYWJlbCk6CisgICAgICAgICAgICAgICAgbXNnID0gIlxuY29weTogJXNcbndvcmRzOiAlcyIgJSAoZHVwLCB3b3JkcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgd29yZHMsIG1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgd29yZHMpCiAKICAgICBkZWYgdGVzdF9jb3B5X3N1YmNsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBNeUNvdW50ZXIoQ291bnRlcik6CkBAIC0xMDQzLDggKzEyMzIsMTAgQEAKICAgICAgICAgIyB0ZXN0IGZpZGVsaXR5IHRvIHRoZSBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAgICAgICAgIGMgPSBDb3VudGVyU3ViY2xhc3NXaXRoU2V0SXRlbSgnYWJyYWNhZGFicmEnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChjKSwgeydhJzogNSwgJ2InOiAyLCAnYyc6IDEsICdkJzogMSwgJ3InOjIgfSkKICAgICAgICAgYyA9IENvdW50ZXJTdWJjbGFzc1dpdGhHZXQoJ2FicmFjYWRhYnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYyksIHsnYSc6IDUsICdiJzogMiwgJ2MnOiAxLCAnZCc6IDEsICdyJzoyIH0pCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTEyMDUsMjQgKzEzOTYsMjggQEAKICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKICAgICAgICAgdXBkYXRlX3Rlc3QgPSBPcmRlcmVkRGljdCgpCiAgICAgICAgIHVwZGF0ZV90ZXN0LnVwZGF0ZShvZCkKLSAgICAgICAgZm9yIGksIGR1cCBpbiBlbnVtZXJhdGUoWwotICAgICAgICAgICAgICAgICAgICBvZC5jb3B5KCksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuY29weShvZCksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuZGVlcGNvcHkob2QpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAwKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAzKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIC0xKSksCi0gICAgICAgICAgICAgICAgICAgIGV2YWwocmVwcihvZCkpLAotICAgICAgICAgICAgICAgICAgICB1cGRhdGVfdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3Qob2QpLAotICAgICAgICAgICAgICAgICAgICBdKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IG9kKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIG9kKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGR1cC5pdGVtcygpKSwgbGlzdChvZC5pdGVtcygpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbihvZCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZHVwKSwgdHlwZShvZCkpCisgICAgICAgIGZvciBsYWJlbCwgZHVwIGluIFsKKyAgICAgICAgICAgICAgICAgICAgKCdvZC5jb3B5KCknLCBvZC5jb3B5KCkpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvcHkuY29weShvZCknLCBjb3B5LmNvcHkob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmRlZXBjb3B5KG9kKScsIGNvcHkuZGVlcGNvcHkob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAwKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAxKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAyKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAzKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMykpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIC0xKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ2V2YWwocmVwcihvZCkpJywgZXZhbChyZXByKG9kKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3VwZGF0ZV90ZXN0JywgdXBkYXRlX3Rlc3QpLAorICAgICAgICAgICAgICAgICAgICAoJ09yZGVyZWREaWN0KG9kKScsIE9yZGVyZWREaWN0KG9kKSksCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChsYWJlbD1sYWJlbCk6CisgICAgICAgICAgICAgICAgbXNnID0gIlxuY29weTogJXNcbm9kOiAlcyIgJSAoZHVwLCBvZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgb2QsIG1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgb2QpCiAKICAgICBkZWYgdGVzdF95YW1sX2xpbmthZ2Uoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgX19yZWR1Y2VfXyBpcyBzZXR1cCBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIFB5WUFNTCdzIGR1bXAoKSBmZWF0dXJlLgpAQCAtMTIzNyw5ICsxNDMyLDE4IEBACiAgICAgICAgICMgZG8gbm90IHNhdmUgaW5zdGFuY2UgZGljdGlvbmFyeSBpZiBub3QgbmVlZGVkCiAgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kLl9fcmVkdWNlX18oKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9kLl9fcmVkdWNlX18oKVsyXSkKICAgICAgICAgb2QueCA9IDEwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kLl9fcmVkdWNlX18oKSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG9kLl9fcmVkdWNlX18oKVsyXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9yZWN1cnNpdmUoc2VsZik6CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZFsxXSA9IG9kCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgtMSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGR1cCA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIHByb3RvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZHVwLCBvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAua2V5cygpKSwgWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkdXBbMV0sIGR1cCkKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weSBiL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkKaW5kZXggZTQwNWI4YS4uYTI0ZTNhZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CkBAIC0xLDQgKzEsNCBAQAotaW1wb3J0IHVuaXR0ZXN0LCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IGNvbG9yc3lzCiAKIGRlZiBmcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApOgpAQCAtNjksOCArNjksMzIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoaGxzLCBjb2xvcnN5cy5yZ2JfdG9faGxzKCpyZ2IpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbChyZ2IsIGNvbG9yc3lzLmhsc190b19yZ2IoKmhscykpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KENvbG9yc3lzVGVzdCkKKyAgICBkZWYgdGVzdF95aXFfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBmb3IgciBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICBmb3IgZyBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICAgICAgZm9yIGIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgICAgICByZ2IgPSAociwgZywgYikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc3lzLnlpcV90b19yZ2IoKmNvbG9yc3lzLnJnYl90b195aXEoKnJnYikpCisgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3lpcV92YWx1ZXMoc2VsZik6CisgICAgICAgIHZhbHVlcyA9IFsKKyAgICAgICAgICAgICMgcmdiLCB5aXEKKyAgICAgICAgICAgICgoMC4wLCAwLjAsIDAuMCksICgwLjAsIDAuMCwgMC4wKSksICMgYmxhY2sKKyAgICAgICAgICAgICgoMC4wLCAwLjAsIDEuMCksICgwLjExLCAtMC4zMjE3LCAwLjMxMjEpKSwgIyBibHVlCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAwLjApLCAoMC41OSwgLTAuMjc3MywgLTAuNTI1MSkpLCAjIGdyZWVuCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAxLjApLCAoMC43LCAtMC41OTksIC0wLjIxMykpLCAjIGN5YW4KKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDAuMCksICgwLjMsIDAuNTk5LCAwLjIxMykpLCAjIHJlZAorICAgICAgICAgICAgKCgxLjAsIDAuMCwgMS4wKSwgKDAuNDEsIDAuMjc3MywgMC41MjUxKSksICMgcHVycGxlCisgICAgICAgICAgICAoKDEuMCwgMS4wLCAwLjApLCAoMC44OSwgMC4zMjE3LCAtMC4zMTIxKSksICMgeWVsbG93CisgICAgICAgICAgICAoKDEuMCwgMS4wLCAxLjApLCAoMS4wLCAwLjAsIDAuMCkpLCAjIHdoaXRlCisgICAgICAgICAgICAoKDAuNSwgMC41LCAwLjUpLCAoMC41LCAwLjAsIDAuMCkpLCAjIGdyZXkKKyAgICAgICAgXQorICAgICAgICBmb3IgKHJnYiwgeWlxKSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHlpcSwgY29sb3JzeXMucmdiX3RvX3lpcSgqcmdiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwocmdiLCBjb2xvcnN5cy55aXFfdG9fcmdiKCp5aXEpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKaW5kZXggY2NkMDhkYi4uNjExNjY3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQpAQCAtMSwzICsxLDQgQEAKK2ltcG9ydCBtYXRoCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKIGltcG9ydCBfYXN0CkBAIC0zMDMsOSArMzA0LDI2IEBACiAgICAgICAgIGwgPSBsYW1iZGE6ICJmb28iCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGwuX19kb2NfXykKIAotIyMgICAgIGRlZiB0ZXN0X3VuaWNvZGVfZW5jb2Rpbmcoc2VsZik6Ci0jIyAgICAgICAgIGNvZGUgPSAiIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbnBhc3NcbiIKLSMjICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGNvZGUsICJ0bXAiLCAiZXhlYyIpCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIGNvZGUgPSBiJyMgLSotIGNvZGluZzogYmFkZW5jb2RpbmcgLSotXG5wYXNzXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBjb2RlLCAndG1wJywgJ2V4ZWMnKQorICAgICAgICBjb2RlID0gJyMgLSotIGNvZGluZzogYmFkZW5jb2RpbmcgLSotXG4iXHhjMlx4YTQiXG4nCisgICAgICAgIGNvbXBpbGUoY29kZSwgJ3RtcCcsICdleGVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHhjMlx4YTQnKQorICAgICAgICBjb2RlID0gJyJceGMyXHhhNCJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHhjMlx4YTQnKQorICAgICAgICBjb2RlID0gYiciXHhjMlx4YTQiXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgJ1x4YTQnKQorICAgICAgICBjb2RlID0gYicjIC0qLSBjb2Rpbmc6IGxhdGluMSAtKi1cbiJceGMyXHhhNCJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHhjMlx4YTQnKQorICAgICAgICBjb2RlID0gYicjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuIlx4YzJceGE0IlxuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksICdceGE0JykKKyAgICAgICAgY29kZSA9IGInIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuIlx4YzJceGE0IlxuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksICdceGMyXHUyMGFjJykKKyAgICAgICAgY29kZSA9ICciIiJcXFxuIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuXHhjMlx4YTQiIiJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuXHhjMlx4YTQnKQorICAgICAgICBjb2RlID0gYiciIiJcXFxuIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuXHhjMlx4YTQiIiJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuXHhhNCcpCiAKICAgICBkZWYgdGVzdF9zdWJzY3JpcHRzKHNlbGYpOgogICAgICAgICAjIFNGIGJ1ZyAxNDQ4ODA0CkBAIC01MDEsOCArNTE5LDQzIEBACiAgICAgICAgIGNoZWNrX2xpbWl0KCJhIiwgIiphIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFNwZWNpZmljcykKK2NsYXNzIFRlc3RTdGFja1NpemUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlc2UgdGVzdHMgY2hlY2sgdGhhdCB0aGUgY29tcHV0ZWQgc3RhY2sgc2l6ZSBmb3IgYSBjb2RlIG9iamVjdAorICAgICMgc3RheXMgd2l0aGluIHJlYXNvbmFibGUgYm91bmRzIChzZWUgaXNzdWUgIzIxNTIzIGZvciBhbiBleGFtcGxlCisgICAgIyBkeXNmdW5jdGlvbikuCisgICAgTiA9IDEwMAorCisgICAgZGVmIGNoZWNrX3N0YWNrX3NpemUoc2VsZiwgY29kZSk6CisgICAgICAgICMgVG8gYXNzZXJ0IHRoYXQgdGhlIGFsbGVnZWQgc3RhY2sgc2l6ZSBpcyBub3QgTyhOKSwgd2UKKyAgICAgICAgIyBjaGVjayB0aGF0IGl0IGlzIHNtYWxsZXIgdGhhbiBsb2coTikuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29kZSwgc3RyKToKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsICI8Zm9vPiIsICJzaW5nbGUiKQorICAgICAgICBtYXhfc2l6ZSA9IG1hdGguY2VpbChtYXRoLmxvZyhsZW4oY29kZS5jb19jb2RlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGNvZGUuY29fc3RhY2tzaXplLCBtYXhfc2l6ZSkKKworICAgIGRlZiB0ZXN0X2FuZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdGFja19zaXplKCJ4IGFuZCAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3Rfb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3RhY2tfc2l6ZSgieCBvciAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3RfYW5kX29yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N0YWNrX3NpemUoInggYW5kIHggb3IgIiAqIHNlbGYuTiArICJ4IikKKworICAgIGRlZiB0ZXN0X2NoYWluZWRfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdGFja19zaXplKCJ4IDwgIiAqIHNlbGYuTiArICJ4IikKKworICAgIGRlZiB0ZXN0X2lmX2Vsc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3RhY2tfc2l6ZSgieCBpZiB4IGVsc2UgIiAqIHNlbGYuTiArICJ4IikKKworICAgIGRlZiB0ZXN0X2Jpbm9wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N0YWNrX3NpemUoInggKyAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3RfZnVuY19hbmQoc2VsZik6CisgICAgICAgIGNvZGUgPSAiZGVmIGYoeCk6XG4iCisgICAgICAgIGNvZGUgKz0gIiAgIHggYW5kIHhcbiIgKiBzZWxmLk4KKyAgICAgICAgc2VsZi5jaGVja19zdGFja19zaXplKGNvZGUpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CmluZGV4IDA1MDVjNTIuLjJhNDIyMzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKQEAgLTEsMTEgKzEsMTAgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBjb21waWxlYWxsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdHJ1Y3QKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTE4LDExICsxNywxMSBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKLSAgICAgICAgc2VsZi5iY19wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuYmNfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZV9wYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCd4ID0gMTIzXG4nKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoMiA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0Mi5weScpCi0gICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIpCisgICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMikKICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYuc291cmNlX3BhdGgyKQogICAgICAgICBzZWxmLnN1YmRpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ19zdWJkaXInKQogICAgICAgICBvcy5ta2RpcihzZWxmLnN1YmRpcmVjdG9yeSkKQEAgLTM2LDcgKzM1LDcgQEAKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmNfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGRhdGEgPSBmaWxlLnJlYWQoOCkKICAgICAgICAgbXRpbWUgPSBpbnQob3Muc3RhdChzZWxmLnNvdXJjZV9wYXRoKS5zdF9tdGltZSkKLSAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCBtdGltZSkKKyAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLCBtdGltZSkKICAgICAgICAgcmV0dXJuIGRhdGEsIGNvbXBhcmUKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0JyksICd0ZXN0IG5lZWRzIG9zLnN0YXQoKScpCkBAIC01Niw3ICs1NSw4IEBACiAKICAgICBkZWYgdGVzdF9tdGltZShzZWxmKToKICAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCi0gICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgMSkpCisgICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKQogCiAgICAgZGVmIHRlc3RfbWFnaWNfbnVtYmVyKHNlbGYpOgogICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KQEAgLTk2LDE0ICs5NiwxNCBAQAogICAgICAgICAjIGludGVycHJldGVyJ3MgY3JlYXRlcyB0aGUgY29ycmVjdCBmaWxlIG5hbWVzCiAgICAgICAgIG9wdGltaXplID0gMSBpZiBfX2RlYnVnX18gZWxzZSAwCiAgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHF1aWV0PVRydWUsIG9wdGltaXplPW9wdGltaXplKQotICAgICAgICBjYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkKSkKLSAgICAgICAgY2FjaGVkMiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkMiA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkMikpCi0gICAgICAgIGNhY2hlZDMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZDMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDMpKQogCiAKQEAgLTE1MSwxMCArMTUxLDEyIEBACiAgICAgICAgIHJldHVybiByYywgb3V0LCBlcnIKIAogICAgIGRlZiBhc3NlcnRDb21waWxlZChzZWxmLCBmbik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZm4pKSkKKyAgICAgICAgcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgYXNzZXJ0Tm90Q29tcGlsZWQoc2VsZiwgZm4pOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmbikpKQorICAgICAgICBwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLl9jbGVhbnVwKQpAQCAtMTgwLDcgKzE4Miw3IEBACiAgICAgZGVmIHRlc3Rfbm9fYXJnc19yZXNwZWN0c19mb3JjZV9mbGFnKHNlbGYpOgogICAgICAgICBiYXpmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5kaXJlY3RvcnksICdiYXonLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRSdW5PSyhQWVRIT05QQVRIPXNlbGYuZGlyZWN0b3J5KQotICAgICAgICBweWNwYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGJhemZuKQorICAgICAgICBweWNwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCiAgICAgICAgICMgU2V0IGF0aW1lL210aW1lIGJhY2t3YXJkIHRvIGF2b2lkIGZpbGUgdGltZXN0YW1wIHJlc29sdXRpb24gaXNzdWVzCiAgICAgICAgIG9zLnV0aW1lKHB5Y3BhdGgsICh0aW1lLnRpbWUoKS02MCwpKjIpCiAgICAgICAgIG10aW1lID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQpAQCAtMjEyLDggKzIxNCw4IEBACiAgICAgICAgICAgICAgICAgWyctbScsICdjb21waWxlYWxsJywgJy1xJywgc2VsZi5wa2dkaXJdKSkKICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgY29udGVudHMuCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5wa2dkaXJfY2FjaGVkaXIpKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoYmFzZS5mb3JtYXQoaW1wLmdldF90YWcoKSwgZXh0KSBmb3IgYmFzZSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX2luaXRfXy57fS57fScsICdiYXIue30ue30nKSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGJhc2UuZm9ybWF0KHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcsIGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiYXNlIGluICgnX19pbml0X18ue30ue30nLCAnYmFyLnt9Lnt9JykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvcy5saXN0ZGlyKHNlbGYucGtnZGlyX2NhY2hlZGlyKSksIGV4cGVjdGVkKQogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIC5weWMgZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFtmbiBmb3IgZm4gaW4gb3MubGlzdGRpcihzZWxmLnBrZ2RpcikKQEAgLTI0Niw3ICsyNDgsNyBAQAogCiAgICAgZGVmIHRlc3RfZm9yY2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgc2VsZi5wa2dkaXIpCi0gICAgICAgIHB5Y3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5iYXJmbikKKyAgICAgICAgcHljcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuYmFyZm4pCiAgICAgICAgICMgc2V0IGF0aW1lL210aW1lIGJhY2t3YXJkIHRvIGF2b2lkIGZpbGUgdGltZXN0YW1wIHJlc29sdXRpb24gaXNzdWVzCiAgICAgICAgIG9zLnV0aW1lKHB5Y3BhdGgsICh0aW1lLnRpbWUoKS02MCwpKjIpCiAgICAgICAgIG10aW1lID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQpAQCAtMzEwLDEwICszMTIsMTAgQEAKICAgICAgICAgYmF6Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnYmF6JywgJ3JhaXNlIEV4Y2VwdGlvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgJy1kJywgJ2RpbnNkYWxlJywgc2VsZi5wa2dkaXIpCiAgICAgICAgIGZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2JpbmcnLCAnaW1wb3J0IGJheicpCi0gICAgICAgIHB5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShiYXpmbikKKyAgICAgICAgcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCiAgICAgICAgIG9zLnJlbmFtZShweWMsIG9zLnBhdGguam9pbihzZWxmLnBrZ2RpciwgJ2Jhei5weWMnKSkKICAgICAgICAgb3MucmVtb3ZlKGJhemZuKQotICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShmbikKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm4sIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBiJ0ZpbGUgImRpbnNkYWxlJykKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfYmFkX2ZpbGUoc2VsZik6CkBAIC0zMjEsNyArMzIzLDcgQEAKICAgICAgICAgICAgICctaScsIG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ25vc3VjaGZpbGUnKSwgc2VsZi5wa2dkaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCBiJ3Jyb3IuKm5vc3VjaGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4KGVyciwgYidUcmFjZWJhY2snKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dkaXJfY2FjaGVkaXIpKSkKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfZmlsZV93aXRoX2FyZyhzZWxmKToKQEAgLTM3OCwxMyArMzgwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIGIiQ2FuJ3QgbGlzdCAnYmFkZmlsZW5hbWUnIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIENvbW1hbmRMaW5lVGVzdHMsCi0gICAgICAgIENvbXBpbGVhbGxUZXN0cywKLSAgICAgICAgRW5jb2RpbmdUZXN0LAotICAgICAgICApCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CmluZGV4IDFiZjQwOTcuLmNkNTUzNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKQEAgLTIyMCw2ICsyMjAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE9TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKDEuNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTlMoMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIxKzEwaiIpLCAxKzEwaikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwKSwgMTArMGopCkBAIC0zMDEsNiArMzAzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwgNSszaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3QgJ05vbmVUeXBlJyIsIGNvbXBsZXgsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICJcMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIzXDA5IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCAiMSIsICIyIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKaW5kZXggMDRjNGMzNy4uYzc0YjJjYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiAKIGZyb20gY29uY3VycmVudCBpbXBvcnQgZnV0dXJlcwogZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UgaW1wb3J0ICgKQEAgLTUyLDYgKzUzLDExIEBACiAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKIAorY2xhc3MgTXlPYmplY3Qob2JqZWN0KToKKyAgICBkZWYgbXlfbWV0aG9kKHNlbGYpOgorICAgICAgICBwYXNzCisKKwogY2xhc3MgRXhlY3V0b3JNaXhpbjoKICAgICB3b3JrZXJfY291bnQgPSA1CiAKQEAgLTQwMyw2ICs0MDksMjIgQEAKICAgICAgICAgc2VsZi5leGVjdXRvci5tYXAoc3RyLCBbMl0gKiAoc2VsZi53b3JrZXJfY291bnQgKyAxKSkKICAgICAgICAgc2VsZi5leGVjdXRvci5zaHV0ZG93bigpCiAKKyAgICBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX3N0YWxlX3JlZmVyZW5jZXMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2Mjg0OiBjaGVjayB0aGF0IHRoZSBleGVjdXRvcnMgZG9uJ3QgdW5uZWNlc3NhcmlseSBoYW5nIG9udG8KKyAgICAgICAgIyByZWZlcmVuY2VzLgorICAgICAgICBteV9vYmplY3QgPSBNeU9iamVjdCgpCisgICAgICAgIG15X29iamVjdF9jb2xsZWN0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBteV9vYmplY3RfY2FsbGJhY2sgPSB3ZWFrcmVmLnJlZigKKyAgICAgICAgICAgIG15X29iamVjdCwgbGFtYmRhIG9iajogbXlfb2JqZWN0X2NvbGxlY3RlZC5zZXQoKSkKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZGlzY2FyZGluZyB0aGUgZnV0dXJlLgorICAgICAgICBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChteV9vYmplY3QubXlfbWV0aG9kKQorICAgICAgICBkZWwgbXlfb2JqZWN0CisKKyAgICAgICAgY29sbGVjdGVkID0gbXlfb2JqZWN0X2NvbGxlY3RlZC53YWl0KHRpbWVvdXQ9NS4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0YWxlIHJlZmVyZW5jZSBub3QgY29sbGVjdGVkIHdpdGhpbiB0aW1lb3V0LiIpCisKIAogY2xhc3MgVGhyZWFkUG9vbEV4ZWN1dG9yVGVzdChUaHJlYWRQb29sTWl4aW4sIEV4ZWN1dG9yVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X21hcF9zdWJtaXRzX3dpdGhvdXRfaXRlcmF0aW9uKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IGUzOGQwNDMuLjM5Y2M3NzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTEsNSArMSw2IEBACiAiIiJVbml0IHRlc3RzIGZvciBjb250ZXh0bGliLnB5LCBhbmQgb3RoZXIgY29udGV4dCBtYW5hZ2Vycy4iIiIKIAoraW1wb3J0IGlvCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtMTAwLDE1ICsxMDEsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19uYW1lX18sJ2JheicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6LmZvbywgJ2JhcicpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAotICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZG9jX2F0dHJpYihzZWxmKToKICAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQogCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3N0cmluZ19naXZlbl9jbV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19kb2NfXywgIldoZWUhIikKKworCiBjbGFzcyBDbG9zaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyBYWFggVGhpcyBuZWVkcyBtb3JlIHdvcmsKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gY2xvc2luZy5fX2RvY19fCisgICAgICAgIG9iaiA9IGNsb3NpbmcoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQogCiAgICAgZGVmIHRlc3RfY2xvc2luZyhzZWxmKToKICAgICAgICAgc3RhdGUgPSBbXQpAQCAtMjA0LDYgKzIxNSw3IEBACiAKIAogY2xhc3MgbXljb250ZXh0KENvbnRleHREZWNvcmF0b3IpOgorICAgICIiIkV4YW1wbGUgZGVjb3JhdGlvbi1jb21wYXRpYmxlIGNvbnRleHQgbWFuYWdlciBmb3IgdGVzdGluZyIiIgogICAgIHN0YXJ0ZWQgPSBGYWxzZQogICAgIGV4YyA9IE5vbmUKICAgICBjYXRjaCA9IEZhbHNlCkBAIC0yMTksNiArMjMxLDEzIEBACiAKIGNsYXNzIFRlc3RDb250ZXh0RGVjb3JhdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBteWNvbnRleHQuX19kb2NfXworICAgICAgICBvYmogPSBteWNvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKICAgICBkZWYgdGVzdF9jb250ZXh0ZGVjb3JhdG9yKHNlbGYpOgogICAgICAgICBjb250ZXh0ID0gbXljb250ZXh0KCkKICAgICAgICAgd2l0aCBjb250ZXh0IGFzIHJlc3VsdDoKQEAgLTM3Miw2ICszOTEsMTMgQEAKIAogY2xhc3MgVGVzdEV4aXRTdGFjayh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gRXhpdFN0YWNrLl9fZG9jX18KKyAgICAgICAgb2JqID0gRXhpdFN0YWNrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQorCiAgICAgZGVmIHRlc3Rfbm9fcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICB3aXRoIEV4aXRTdGFjaygpOgogICAgICAgICAgICAgcGFzcwpAQCAtNjkyLDEwICs3MTgsMTExIEBACiAgICAgICAgIHN0YWNrLnB1c2goY20pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhY2suX2V4aXRfY2FsbGJhY2tzWy0xXSwgY20pCiAKK2NsYXNzIFRlc3RSZWRpcmVjdFN0ZG91dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSMgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgdGVzdCBhY3R1YWxseSBydW4gdW5kZXIgcmVncnRlc3QucHkhCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHJlZGlyZWN0X3N0ZG91dC5fX2RvY19fCisgICAgICAgIG9iaiA9IHJlZGlyZWN0X3N0ZG91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZWRpcmVjdF9pbl9pbml0KHNlbGYpOgorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgcmVkaXJlY3Rfc3Rkb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF90b19zdHJpbmdfaW8oc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIG1zZyA9ICJDb25zaWRlciBhbiBBUEkgbGlrZSBoZWxwKCksIHdoaWNoIHByaW50cyBkaXJlY3RseSB0byBzdGRvdXQiCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCBvcmlnX3N0ZG91dCkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbXNnKQorCisgICAgZGVmIHRlc3RfZW50ZXJfcmVzdWx0X2lzX3RhcmdldChzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZikgYXMgZW50ZXJfcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlbnRlcl9yZXN1bHQsIGYpCisKKyAgICBkZWYgdGVzdF9jbV9pc19yZXVzYWJsZShzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVfdG9fZiA9IHJlZGlyZWN0X3N0ZG91dChmKQorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIkhlbGxvIiwgZW5kPSIgIikKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiSGVsbG8gV29ybGQhXG4iKQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3cml0ZV90b19mID0gcmVkaXJlY3Rfc3Rkb3V0KGYpCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6CisgICAgICAgICAgICBwcmludCgiSGVsbG8iLCBlbmQ9IiAiKQorICAgICAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgICAgIHByaW50KCJXb3JsZCEiKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkhlbGxvIFdvcmxkIVxuIikKKworCitjbGFzcyBUZXN0U3VwcHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHN1cHByZXNzLl9fZG9jX18KKyAgICAgICAgb2JqID0gc3VwcHJlc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZXN1bHRfZnJvbV9lbnRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhWYWx1ZUVycm9yKSBhcyBlbnRlcl9yZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlbnRlcl9yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLCA1KSwgMzIpCisKKyAgICBkZWYgdGVzdF9leGFjdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2hpZXJhcmNoeShzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhMb29rdXBFcnJvcik6CisgICAgICAgICAgICAnSGVsbG8nWzUwXQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwcmVzcygpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZXhjZXB0aW9uX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoWmVyb0RpdmlzaW9uRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhaZXJvRGl2aXNpb25FcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBpZ25vcmVfZXhjZXB0aW9ucyA9IHN1cHByZXNzKEV4Y2VwdGlvbikKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIGxlbig1KQorICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOgorICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOiAjIENoZWNrIG5lc3RlZCB1c2FnZQorICAgICAgICAgICAgICAgIGxlbig1KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQppbmRleCA1Njc2NjY4Li5jZTVkMjdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKQEAgLTYsOSArNiwxMSBAQAogIyByaXAgb2ZmIGFsbCBpbnRlcmVzdGluZyBzdHVmZiBmcm9tIHRlc3RfcHJvZmlsZQogaW1wb3J0IGNQcm9maWxlCiBmcm9tIHRlc3QudGVzdF9wcm9maWxlIGltcG9ydCBQcm9maWxlVGVzdCwgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQKK2Zyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMKIAogY2xhc3MgQ1Byb2ZpbGVUZXN0KFByb2ZpbGVUZXN0KToKICAgICBwcm9maWxlcmNsYXNzID0gY1Byb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gY1Byb2ZpbGUKICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gIntidWlsdC1pbiBtZXRob2QgbWF4fSIKIAogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgpAQCAtMjcsNiArMjksNyBAQAogICAgICAgICAgICAgICAgICAgICBvYmouZW5hYmxlKCkKICAgICAgICAgICAgICAgICAgICAgb2JqID0gX2xzcHJvZi5Qcm9maWxlcigxKQogICAgICAgICAgICAgICAgICAgICBvYmouZGlzYWJsZSgpCisgICAgICAgICAgICAgICAgICAgIG9iai5jbGVhcigpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9yaWdfc3RkZXJyCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5IGIvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQppbmRleCBjZmI3MzQxLi42MjRkNzAyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKQEAgLTEsMTEgKzEsNyBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIAotZGVmIHNldFVwTW9kdWxlKCk6Ci0gICAgIyB0aGlzIGltcG9ydCB3aWxsIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0IGlmIF9jcnlwdCBkb2Vzbid0IGV4aXN0LAotICAgICMgc28gaXQgaGFzIHRvIGJlIGRvbmUgaW4gc2V0VXBNb2R1bGUgZm9yIHRlc3QgZGlzY292ZXJ5IHRvIHdvcmsKLSAgICBnbG9iYWwgY3J5cHQKLSAgICBjcnlwdCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3J5cHQnKQorY3J5cHQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKIAogY2xhc3MgQ3J5cHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5IGIvTGliL3Rlc3QvdGVzdF9jc3YucHkKaW5kZXggODNmOGNiMy4uN2UyNDg1ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jc3YucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jc3YucHkKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDEwOwogICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgogICAgICAgICAgICAgICAgIGlmIGkgPiAyOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIEJhZExpc3QoKSwgJycpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgQmFkTGlzdCgpLCAnJykKICAgICAgICAgY2xhc3MgQmFkSXRlbToKICAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgW0JhZEl0ZW0oKV0sICcnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgW0JhZEl0ZW0oKV0sICcnKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfYmlnZmllbGQoc2VsZik6CiAgICAgICAgICMgVGhpcyBleGVyY2lzZXMgdGhlIGJ1ZmZlciByZWFsbG9jIGZ1bmN0aW9uYWxpdHkKQEAgLTE4Niw5ICsxODYsOSBAQAogICAgIGRlZiB0ZXN0X3dyaXRlcm93cyhzZWxmKToKICAgICAgICAgY2xhc3MgQnJva2VuRmlsZToKICAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBidWYpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoQnJva2VuRmlsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBbWydhJ11dKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBbWydhJ11dKQogCiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgidysiLCBuZXdsaW5lPScnKSBhcyBmaWxlb2JqOgogICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqKQpAQCAtMzA4LDYgKzMwOCwxNSBAQAogICAgICAgICAgICAgZm9yIGksIHJvdyBpbiBlbnVtZXJhdGUoY3N2LnJlYWRlcihmaWxlb2JqKSk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3csIHJvd3NbaV0pCiAKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfZXNjYXBlZF91bnF1b3RlZF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCJ3KyIsIG5ld2xpbmU9JycpIGFzIGZpbGVvYmo6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmoscXVvdGluZz1jc3YuUVVPVEVfTk9ORSxlc2NhcGVjaGFyPSJcXCIpCisgICAgICAgICAgICByb3dzID0gW1snYVxuYicsJ2InXSxbJ2MnLCd4XHJcbmQnXV0KKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvd3Mocm93cykKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgZm9yIGksIHJvdyBpbiBlbnVtZXJhdGUoY3N2LnJlYWRlcihmaWxlb2JqLHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsZXNjYXBlY2hhcj0iXFwiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3cscm93c1tpXSkKKwogY2xhc3MgVGVzdERpYWxlY3RSZWdpc3RyeSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVnaXN0cnlfYmFkYXJncyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YubGlzdF9kaWFsZWN0cywgTm9uZSkKQEAgLTgzNiwxMCArODQ1LDExIEBACiAgICAgICAgICAgICBkID0gbXlkaWFsZWN0KCkKIAogICAgICAgICBmb3IgZmllbGRfbmFtZSBpbiAoImRlbGltaXRlciIsICJlc2NhcGVjaGFyIiwgInF1b3RlY2hhciIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBjcmVhdGVfaW52YWxpZCwgZmllbGRfbmFtZSwgIiIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiYWJjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsIGIneCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCA1KQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZmllbGRfbmFtZT1maWVsZF9uYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiYWJjIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCBiJ3gnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsIDUpCiAKIAogY2xhc3MgVGVzdFNuaWZmZXIodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jdHlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weQppbmRleCA0OTYzNTVlLi41Mzk2NGNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weQpAQCAtMSwxNiArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUKLQotIyBTa2lwIHRlc3RzIGlmIF9jdHlwZXMgbW9kdWxlIHdhcyBub3QgYnVpbHQuCi1pbXBvcnRfbW9kdWxlKCdfY3R5cGVzJykKLQotaW1wb3J0IGN0eXBlcy50ZXN0Ci0KLWRlZiBsb2FkX3Rlc3RzKCphcmdzKToKLSAgICBza2lwcGVkLCB0ZXN0Y2FzZXMgPSBjdHlwZXMudGVzdC5nZXRfdGVzdHMoY3R5cGVzLnRlc3QsICJ0ZXN0XyoucHkiLCB2ZXJib3NpdHk9MCkKLSAgICBzdWl0ZXMgPSBbdW5pdHRlc3QubWFrZVN1aXRlKHQpIGZvciB0IGluIHRlc3RjYXNlc10KLSAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlcykKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGxvYWRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5IGIvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKaW5kZXggNzMxMGFmYy4uYWQxMGY2MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKQEAgLTE3LDYgKzE3LDcgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCBpbnNwZWN0CiByZXF1aXJlcygnY3Vyc2VzJykKIAogIyBJZiBlaXRoZXIgb2YgdGhlc2UgZG9uJ3QgZXhpc3QsIHNraXAgdGhlIHRlc3RzLgpAQCAtMTE1LDggKzExNiw4IEBACiAgICAgc3Rkc2NyLm5vdGltZW91dCgxKQogICAgIHdpbjIub3ZlcmxheSh3aW4pCiAgICAgd2luMi5vdmVyd3JpdGUod2luKQotICAgIHdpbjIub3ZlcmxheSh3aW4sIDEsIDIsIDMsIDMsIDIsIDEpCi0gICAgd2luMi5vdmVyd3JpdGUod2luLCAxLCAyLCAzLCAzLCAyLCAxKQorICAgIHdpbjIub3ZlcmxheSh3aW4sIDEsIDIsIDIsIDEsIDMsIDMpCisgICAgd2luMi5vdmVyd3JpdGUod2luLCAxLCAyLCAyLCAxLCAzLCAzKQogICAgIHN0ZHNjci5yZWRyYXdsbigxLDIpCiAKICAgICBzdGRzY3Iuc2Nyb2xsb2soMSkKQEAgLTMzMSw2ICszMzIsMzQgQEAKICAgICBlbHNlOgogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVHlwZUVycm9yIG5vdCByYWlzZWQiKQogCitkZWYgdGVzdF9pc3N1ZTIxMDg4KHN0ZHNjcik6CisgICAgIworICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIxMDg4CisgICAgIworICAgICMgdGhlIGJ1ZzoKKyAgICAjIHdoZW4gY29udmVydGluZyBjdXJzZXMud2luZG93LmFkZGNoIHRvIEFyZ3VtZW50IENsaW5pYworICAgICMgdGhlIGZpcnN0IHR3byBwYXJhbWV0ZXJzIHdlcmUgc3dpdGNoZWQuCisKKyAgICAjIGlmIHNvbWVkYXkgd2UgY2FuIHJlcHJlc2VudCB0aGUgc2lnbmF0dXJlIG9mIGFkZGNoCisgICAgIyB3ZSB3aWxsIG5lZWQgdG8gcmV3cml0ZSB0aGlzIHRlc3QuCisgICAgdHJ5OgorICAgICAgICBzaWduYXR1cmUgPSBpbnNwZWN0LnNpZ25hdHVyZShzdGRzY3IuYWRkY2gpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2lnbmF0dXJlKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAjIG5vdCBnZW5lcmF0aW5nIGEgc2lnbmF0dXJlIGlzIGZpbmUuCisgICAgICAgIHBhc3MKKworICAgICMgU28uICBObyBzaWduYXR1cmUgZm9yIGFkZGNoLgorICAgICMgQnV0IEFyZ3VtZW50IENsaW5pYyBnYXZlIHVzIGEgaHVtYW4tcmVhZGFibGUgZXF1aXZhbGVudAorICAgICMgYXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGRvY3N0cmluZy4gIFNvIHdlIHBhcnNlIHRoYXQsCisgICAgIyBhbmQgZW5zdXJlIHRoYXQgdGhlIHBhcmFtZXRlcnMgYXBwZWFyIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICMgU2luY2UgdGhpcyBpcyBwYXJzaW5nIG91dHB1dCBmcm9tIEFyZ3VtZW50IENsaW5pYywgd2UgY2FuCisgICAgIyBiZSByZWFzb25hYmx5IGNlcnRhaW4gdGhlIGdlbmVyYXRlZCBwYXJzaW5nIGNvZGUgd2lsbCBiZQorICAgICMgY29ycmVjdCB0b28uCisgICAgaHVtYW5fcmVhZGFibGVfc2lnbmF0dXJlID0gc3Rkc2NyLmFkZGNoLl9fZG9jX18uc3BsaXQoIlxuIilbMF0KKyAgICBvZmZzZXQgPSBodW1hbl9yZWFkYWJsZV9zaWduYXR1cmUuZmluZCgiW3ksIHgsXSIpCisgICAgYXNzZXJ0IG9mZnNldCA+PSAwLCAiIgorCiBkZWYgbWFpbihzdGRzY3IpOgogICAgIGN1cnNlcy5zYXZldHR5KCkKICAgICB0cnk6CkBAIC0zNDQsNiArMzczLDcgQEAKICAgICAgICAgdGVzdF91bmdldF93Y2goc3Rkc2NyKQogICAgICAgICB0ZXN0X2lzc3VlMTA1NzAoKQogICAgICAgICB0ZXN0X2VuY29kaW5nKHN0ZHNjcikKKyAgICAgICAgdGVzdF9pc3N1ZTIxMDg4KHN0ZHNjcikKICAgICBmaW5hbGx5OgogICAgICAgICBjdXJzZXMucmVzZXR0eSgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm0ucHkKaW5kZXggZDExZDkyNC4uNjIzZDk5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kYm0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm0ucHkKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgcmV0dXJuIGtleXMKIAogICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLm1vZHVsZS5lcnJvciwgSU9FcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNlbGYubW9kdWxlLmVycm9yLCBPU0Vycm9yKSkKIAogICAgIGRlZiB0ZXN0X2FueWRibV9ub3RfZXhpc3Rpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRibS5lcnJvciwgZGJtLm9wZW4sIF9mbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkgYi9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CmluZGV4IDRmMDNhZTcuLjI5ZjQ4YTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQpAQCAtMywxMCArMywxMiBAQAogIiIiCiAKIGltcG9ydCBpbworaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGRibS5kdW1iIGFzIGR1bWJkYm0KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKIAogX2ZuYW1lID0gc3VwcG9ydC5URVNURk4KIApAQCAtMTgzLDYgKzE4NSwzOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggZHVtYmRibS5vcGVuKF9mbmFtZSwgJ2MnKSBhcyBkYjoKKyAgICAgICAgICAgIGRiWyJkdW1iZGJtIGNvbnRleHQgbWFuYWdlciJdID0gImNvbnRleHQgbWFuYWdlciIKKworICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IiZHVtYmRibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGR1bWJkYm0uZXJyb3IpOgorICAgICAgICAgICAgZGIua2V5cygpCisKKyAgICBkZWYgdGVzdF9jaGVja19jbG9zZWQoc2VsZik6CisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAnYycpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGZvciBtZXRoIGluIChwYXJ0aWFsKG9wZXJhdG9yLmRlbGl0ZW0sIGYpLAorICAgICAgICAgICAgICAgICAgICAgcGFydGlhbChvcGVyYXRvci5zZXRpdGVtLCBmLCAnYicpLAorICAgICAgICAgICAgICAgICAgICAgcGFydGlhbChvcGVyYXRvci5nZXRpdGVtLCBmKSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwob3BlcmF0b3IuY29udGFpbnMsIGYpKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZHVtYmRibS5lcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgbWV0aCgndGVzdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpCisKKyAgICAgICAgZm9yIG1ldGggaW4gKG9wZXJhdG9yLm1ldGhvZGNhbGxlcigna2V5cycpLAorICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdpdGVya2V5cycpLAorICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdpdGVtcycpLAorICAgICAgICAgICAgICAgICAgICAgbGVuKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZHVtYmRibS5lcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgbWV0aChmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQiKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBfZGVsZXRlX2ZpbGVzKCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5CmluZGV4IDRmYjY2YzUuLmE3ODA4ZjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkKQEAgLTgxLDYgKzgxLDE3IEBACiAgICAgICAgIHNpemUyID0gb3MucGF0aC5nZXRzaXplKGZpbGVuYW1lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2l6ZTEgPiBzaXplMiA+PSBzaXplMCkKIAorICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgd2l0aCBnZGJtLm9wZW4oZmlsZW5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsiZ2RibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBnZGJtLm9wZW4oZmlsZW5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IiZ2RibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGdkYm0uZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgZGIua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkdEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkIikKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkgYi9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5CmluZGV4IGI1N2UxZjAuLjIyOTE1NjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weQpAQCAtMzcsNSArMzcsMTggQEAKICAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIGRibS5uZGJtLm9wZW4oc2VsZi5maWxlbmFtZSwgJ2MnKSBhcyBkYjoKKyAgICAgICAgICAgIGRiWyJuZGJtIGNvbnRleHQgbWFuYWdlciJdID0gImNvbnRleHQgbWFuYWdlciIKKworICAgICAgICB3aXRoIGRibS5uZGJtLm9wZW4oc2VsZi5maWxlbmFtZSwgJ3InKSBhcyBkYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkYi5rZXlzKCkpLCBbYiJuZGJtIGNvbnRleHQgbWFuYWdlciJdKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGJtLm5kYm0uZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgZGIua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQiKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKaW5kZXggNDAzMTM0Ny4uYjRjOGMzNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQpAQCAtMTA1Nyw2ICsxMDU3LDExIEBACiAKICAgICAgICAgICAgICMgaXNzdWUgNjg1MAogICAgICAgICAgICAgKCdhPS03LjAnLCAnMC4xMjM0NScsICdhYWFhMC4xJyksCisKKyAgICAgICAgICAgICMgaXNzdWUgMjIwOTAKKyAgICAgICAgICAgICgnPF4rMTUuMjAlJywgJ2luZicsICc8PCtJbmZpbml0eSU8PDwnKSwKKyAgICAgICAgICAgICgnXHgwNz4sJScsICdzTmFOMTIzNDU2NycsICdzTmFOMTIzNDU2NyUnKSwKKyAgICAgICAgICAgICgnPTEwLjEwJScsICdOYU4xMjMnLCAnICAgTmFOMTIzJScpLAogICAgICAgICAgICAgXQogICAgICAgICBmb3IgZm10LCBkLCByZXN1bHQgaW4gdGVzdF92YWx1ZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChEZWNpbWFsKGQpLCBmbXQpLCByZXN1bHQpCkBAIC0yNDMxLDYgKzI0MzYsMjMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBDLkRlY2ltYWwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHgpCiAKKyAgICAgICAgICAgIHggPSBDLkRlY2ltYWwoJy0zLjEyM2U4MTcyMycpLmFzX3R1cGxlKCkKKyAgICAgICAgICAgIHkgPSBQLkRlY2ltYWwoJy0zLjEyM2U4MTcyMycpLmFzX3R1cGxlKCkKKworICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IEMKKyAgICAgICAgICAgIHN4ID0gcGlja2xlLmR1bXBzKHgpCisgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gUAorICAgICAgICAgICAgciA9IHBpY2tsZS5sb2FkcyhzeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBQLkRlY2ltYWxUdXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgeSkKKworICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IFAKKyAgICAgICAgICAgIHN5ID0gcGlja2xlLmR1bXBzKHkpCisgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gQworICAgICAgICAgICAgciA9IHBpY2tsZS5sb2FkcyhzeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBDLkRlY2ltYWxUdXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgeCkKKwogICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gc2F2ZWRlY2ltYWwKIAogICAgIGRlZiB0ZXN0X2ludChzZWxmKToKQEAgLTU0MTIsNyArNTQzNCw3IEBACiAgICAgYWxsX3Rlc3RzLmluc2VydCgwLCBDaGVja0F0dHJpYnV0ZXMpCiAKIAotZGVmIHRlc3RfbWFpbihhcml0aD1GYWxzZSwgdmVyYm9zZT1Ob25lLCB0b2RvX3Rlc3RzPU5vbmUsIGRlYnVnPU5vbmUpOgorZGVmIHRlc3RfbWFpbihhcml0aD1Ob25lLCB2ZXJib3NlPU5vbmUsIHRvZG9fdGVzdHM9Tm9uZSwgZGVidWc9Tm9uZSk6CiAgICAgIiIiIEV4ZWN1dGUgdGhlIHRlc3RzLgogCiAgICAgUnVucyBhbGwgYXJpdGhtZXRpYyB0ZXN0cyBpZiBhcml0aCBpcyBUcnVlIG9yIGlmIHRoZSAiZGVjaW1hbCIgcmVzb3VyY2UKQEAgLTU0MjIsNyArNTQ0NCw3IEBACiAgICAgaW5pdChDKQogICAgIGluaXQoUCkKICAgICBnbG9iYWwgVEVTVF9BTEwsIERFQlVHCi0gICAgVEVTVF9BTEwgPSBhcml0aCBvciBpc19yZXNvdXJjZV9lbmFibGVkKCdkZWNpbWFsJykKKyAgICBURVNUX0FMTCA9IGFyaXRoIGlmIGFyaXRoIGlzIG5vdCBOb25lIGVsc2UgaXNfcmVzb3VyY2VfZW5hYmxlZCgnZGVjaW1hbCcpCiAgICAgREVCVUcgPSBkZWJ1ZwogCiAgICAgaWYgdG9kb190ZXN0cyBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKaW5kZXggYTg0ODdkMi4uN2JmZjFkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CkBAIC01NDMsOCArNTQzLDggQEAKICAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgogICAgICAgICBjaGVjayhkZXF1ZSgpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCi0gICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQotICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLy8gMiArIDEpKSwgYmFzZXNpemUgKyAyICogYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLSAxKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiBCTE9DS0xFTiksIGJhc2VzaXplICsgMiAqIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKDQyICogQkxPQ0tMRU4pKSwgYmFzZXNpemUgKyA0MyAqIGJsb2Nrc2l6ZSkKIAogY2xhc3MgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3ModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weSBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKaW5kZXggMWE4OTFhOC4uMjZjMjczYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CkBAIC0xLDggKzEsMTEgQEAKIGltcG9ydCBidWlsdGlucworaW1wb3J0IGNvcHlyZWcKIGltcG9ydCBnYworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1hdGgKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwotaW1wb3J0IG1hdGgKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdlYWtyZWYKIApAQCAtMTE0Niw3ICsxMTQ5LDcgQEAKICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFVuaWNvZGVFbmNvZGVFcnJvcik6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJbY2hyKDEyOCldIHNsb3RzIG5vdCBjYXVnaHQiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJbY2hyKDEyOCldIHNsb3RzIG5vdCBjYXVnaHQiKQogCiAgICAgICAgICMgVGVzdCBsZWFrcwogICAgICAgICBjbGFzcyBDb3VudGVkKG9iamVjdCk6CkBAIC0xNzk3LDYgKzE4MDAsNyBAQAogICAgICAgICAgICAgKCJfX3RydW5jX18iLCBpbnQsIHplcm8sIHNldCgpLCB7fSksCiAgICAgICAgICAgICAoIl9fY2VpbF9fIiwgbWF0aC5jZWlsLCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgKCJfX2Rpcl9fIiwgZGlyLCBlbXB0eV9zZXEsIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fcm91bmRfXyIsIHJvdW5kLCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGNsYXNzIENoZWNrZXIob2JqZWN0KToKQEAgLTIyNTgsNyArMjI2Miw5IEBACiAgICAgICAgIG1pbnN0YW5jZSA9IE0oIm0iKQogICAgICAgICBtaW5zdGFuY2UuYiA9IDIKICAgICAgICAgbWluc3RhbmNlLmEgPSAxCi0gICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gZGlyKG1pbnN0YW5jZSkgaWYgeCBub3QgaW4gWyJfX25hbWVfXyIsICJfX2RvY19fIl1dCisgICAgICAgIGRlZmF1bHRfYXR0cmlidXRlcyA9IFsnX19uYW1lX18nLCAnX19kb2NfXycsICdfX3BhY2thZ2VfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX3NwZWNfXyddCisgICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gZGlyKG1pbnN0YW5jZSkgaWYgeCBub3QgaW4gZGVmYXVsdF9hdHRyaWJ1dGVzXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzLCBbJ2EnLCAnYiddKQogCiAgICAgICAgIGNsYXNzIE0yKE0pOgpAQCAtMzE1MSwxNzYgKzMxNTcsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmEsIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbl9kZWxldGVfZGljdChlKSwgY2FuX2RlbGV0ZV9kaWN0KFZhbHVlRXJyb3IoKSkpCiAKLSAgICBkZWYgdGVzdF9waWNrbGVzKHNlbGYpOgotICAgICAgICAjIFRlc3RpbmcgcGlja2xpbmcgYW5kIGNvcHlpbmcgbmV3LXN0eWxlIGNsYXNzZXMgYW5kIG9iamVjdHMuLi4KLSAgICAgICAgaW1wb3J0IHBpY2tsZQotCi0gICAgICAgIGRlZiBzb3J0ZWRpdGVtcyhkKToKLSAgICAgICAgICAgIEwgPSBsaXN0KGQuaXRlbXMoKSkKLSAgICAgICAgICAgIEwuc29ydCgpCi0gICAgICAgICAgICByZXR1cm4gTAotCi0gICAgICAgIGdsb2JhbCBDCi0gICAgICAgIGNsYXNzIEMob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICBzdXBlcihDLCBzZWxmKS5fX2luaXRfXygpCi0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMoJXIsICVyKSIgJSAoc2VsZi5hLCBzZWxmLmIpCi0KLSAgICAgICAgZ2xvYmFsIEMxCi0gICAgICAgIGNsYXNzIEMxKGxpc3QpOgotICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQzEsIGNscykuX19uZXdfXyhjbHMpCi0gICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYikKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCi0gICAgICAgICAgICAgICAgc2VsZi5iID0gYgotICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiQzEoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBsaXN0KHNlbGYpKQotCi0gICAgICAgIGdsb2JhbCBDMgotICAgICAgICBjbGFzcyBDMihpbnQpOgotICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiLCB2YWw9MCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMyLCBjbHMpLl9fbmV3X18oY2xzLCB2YWwpCi0gICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIsIHZhbD0wKToKLSAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCi0gICAgICAgICAgICAgICAgc2VsZi5iID0gYgotICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiQzIoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCi0KLSAgICAgICAgZ2xvYmFsIEMzCi0gICAgICAgIGNsYXNzIEMzKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKLSAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbwotICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28KLSAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgZm9vKToKLSAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbwotCi0gICAgICAgIGdsb2JhbCBDNGNsYXNzaWMsIEM0Ci0gICAgICAgIGNsYXNzIEM0Y2xhc3NpYzogIyBjbGFzc2ljCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGNsYXNzIEM0KEM0Y2xhc3NpYywgb2JqZWN0KTogIyBtaXhlZCBpbmhlcml0YW5jZQotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGZvciBiaW4gaW4gMCwgMToKLSAgICAgICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgotICAgICAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoY2xzLCBiaW4pCi0gICAgICAgICAgICAgICAgY2xzMiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2xzMiwgY2xzKQotCi0gICAgICAgICAgICBhID0gQzEoMSwgMik7IGEuYXBwZW5kKDQyKTsgYS5hcHBlbmQoMjQpCi0gICAgICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCi0gICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKChhLCBiKSwgYmluKQotICAgICAgICAgICAgeCwgeSA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fY2xhc3NfXywgYS5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHguX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhhLl9fZGljdF9fKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIGIuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh5Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYi5fX2RpY3RfXykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeCksIHJlcHIoYSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeSksIHJlcHIoYikpCi0gICAgICAgICAgICAjIFRlc3QgZm9yIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fIG9uIG5ldyBzdHlsZSBjbGFzcwotICAgICAgICAgICAgdSA9IEMzKDQyKQotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyh1LCBiaW4pCi0gICAgICAgICAgICB2ID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuX19jbGFzc19fLCB2Ll9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mb28sIHYuZm9vKQotICAgICAgICAgICAgIyBUZXN0IGZvciBwaWNrbGFiaWxpdHkgb2YgaHlicmlkIGNsYXNzCi0gICAgICAgICAgICB1ID0gQzQoKQotICAgICAgICAgICAgdS5mb28gPSA0MgotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyh1LCBiaW4pCi0gICAgICAgICAgICB2ID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuX19jbGFzc19fLCB2Ll9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mb28sIHYuZm9vKQotCi0gICAgICAgICMgVGVzdGluZyBjb3B5LmRlZXBjb3B5KCkKLSAgICAgICAgaW1wb3J0IGNvcHkKLSAgICAgICAgZm9yIGNscyBpbiBDLCBDMSwgQzI6Ci0gICAgICAgICAgICBjbHMyID0gY29weS5kZWVwY29weShjbHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGNsczIsIGNscykKLQotICAgICAgICBhID0gQzEoMSwgMik7IGEuYXBwZW5kKDQyKTsgYS5hcHBlbmQoMjQpCi0gICAgICAgIGIgPSBDMigiaGVsbG8iLCAid29ybGQiLCA0MikKLSAgICAgICAgeCwgeSA9IGNvcHkuZGVlcGNvcHkoKGEsIGIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCBhLl9fY2xhc3NfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh4Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYS5fX2RpY3RfXykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIGIuX19jbGFzc19fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHkuX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhiLl9fZGljdF9fKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHgpLCByZXByKGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeSksIHJlcHIoYikpCi0KLSAgICBkZWYgdGVzdF9waWNrbGVfc2xvdHMoc2VsZik6Ci0gICAgICAgICMgVGVzdGluZyBwaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fIC4uLgotICAgICAgICBpbXBvcnQgcGlja2xlCi0gICAgICAgICMgUGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyBidXQgd2l0aG91dCBfX2dldHN0YXRlX18gc2hvdWxkIGZhaWwKLSAgICAgICAgIyAoaWYgdXNpbmcgcHJvdG9jb2wgMCBvciAxKQotICAgICAgICBnbG9iYWwgQiwgQywgRCwgRQotICAgICAgICBjbGFzcyBCKG9iamVjdCk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGZvciBiYXNlIGluIFtvYmplY3QsIEJdOgotICAgICAgICAgICAgY2xhc3MgQyhiYXNlKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQotICAgICAgICAgICAgY2xhc3MgRChDKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsOiBwaWNrbGUgQyBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsOiBwaWNrbGUgRCBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCi0gICAgICAgICAgICAjIEdpdmUgQyBhIG5pY2UgZ2VuZXJpYyBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXwotICAgICAgICAgICAgY2xhc3MgQyhiYXNlKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQotICAgICAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBzZWxmLl9fZGljdF9fLmNvcHkoKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0ge30KLSAgICAgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9fY2xhc3NfXy5fX21yb19fOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNuIGluIGNscy5fX2RpY3RfXy5nZXQoJ19fc2xvdHNfXycsICgpKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbc25dID0gZ2V0YXR0cihzZWxmLCBzbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQKLSAgICAgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGQpOgotICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBsaXN0KGQuaXRlbXMoKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCi0gICAgICAgICAgICBjbGFzcyBEKEMpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICMgTm93IGl0IHNob3VsZCB3b3JrCi0gICAgICAgICAgICB4ID0gQygpCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SGFzQXR0cih5LCAnYScpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSwgNDIpCi0gICAgICAgICAgICB4ID0gRCgpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeC5iID0gMTAwCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hICsgeS5iLCAxNDIpCi0gICAgICAgICAgICAjIEEgc3ViY2xhc3MgdGhhdCBhZGRzIGEgc2xvdCBzaG91bGQgYWxzbyB3b3JrCi0gICAgICAgICAgICBjbGFzcyBFKEMpOgotICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYiddCi0gICAgICAgICAgICB4ID0gRSgpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeC5iID0gImZvbyIKLSAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIHguYSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5iLCB4LmIpCi0KICAgICBkZWYgdGVzdF9iaW5hcnlfb3BlcmF0b3Jfb3ZlcnJpZGUoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBvdmVycmlkZXMgb2YgYmluYXJ5IG9wZXJhdGlvbnMuLi4KICAgICAgICAgY2xhc3MgSShpbnQpOgpAQCAtMzc0NSwxOCArMzU4MSw4IEBACiAgICAgICAgICMgYnVnKS4KICAgICAgICAgZGVsIGMKIAotICAgICAgICAjIElmIHRoYXQgZGlkbid0IGJsb3cgdXAsIGl0J3MgYWxzbyBpbnRlcmVzdGluZyB0byBzZWUgd2hldGhlciBjbGVhcmluZwotICAgICAgICAjIHRoZSBsYXN0IGNvbnRhaW5lciBzbG90IHdvcmtzOiB0aGF0IHdpbGwgYXR0ZW1wdCB0byBkZWxldGUgYyBhZ2FpbiwKLSAgICAgICAgIyB3aGljaCB3aWxsIGNhdXNlIGMgdG8gZ2V0IGFwcGVuZGVkIGJhY2sgdG8gdGhlIGNvbnRhaW5lciBhZ2FpbgotICAgICAgICAjICJkdXJpbmciIHRoZSBkZWwuICAoT24gbm9uLUNQeXRob24gaW1wbGVtZW50YXRpb25zLCBob3dldmVyLCBfX2RlbF9fCi0gICAgICAgICMgaXMgdHlwaWNhbGx5IG5vdCBjYWxsZWQgYWdhaW4uKQogICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmNvbnRhaW5lciksIDEpCi0gICAgICAgIGRlbCBDLmNvbnRhaW5lclstMV0KLSAgICAgICAgaWYgc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgotICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuY29udGFpbmVyKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5jb250YWluZXJbLTFdLmF0dHIsIDQyKQogCiAgICAgICAgICMgTWFrZSBjIG1vcnRhbCBhZ2Fpbiwgc28gdGhhdCB0aGUgdGVzdCBmcmFtZXdvcmsgd2l0aCAtbCBkb2Vzbid0IHJlcG9ydAogICAgICAgICAjIGl0IGFzIGEgbGVhay4KQEAgLTQ1MzYsNiArNDM2MiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR5cGUuX19kaWN0X19bJ19fcXVhbG5hbWVfXyddLl9fc2V0X18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgJ09pbmsnKQogCisgICAgICAgIGdsb2JhbCBZCisgICAgICAgIGNsYXNzIFk6CisgICAgICAgICAgICBjbGFzcyBJbnNpZGU6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuX19xdWFsbmFtZV9fLCAnWScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5JbnNpZGUuX19xdWFsbmFtZV9fLCAnWS5JbnNpZGUnKQorCiAgICAgZGVmIHRlc3RfcXVhbG5hbWVfZGljdChzZWxmKToKICAgICAgICAgbnMgPSB7J19fcXVhbG5hbWVfXyc6ICdzb21lLm5hbWUnfQogICAgICAgICB0cCA9IHR5cGUoJ0ZvbycsICgpLCBucykKQEAgLTQ1ODEsNiArNDQxNCwxNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjYXNlLCAxLCAyLCAzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjYXNlLCAxLCAyLCBmb289MykKIAorICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nX2RvZXNfbm90X2R1cGxpY2F0ZV9kaWN0X2Rlc2NyaXB0b3JzKHNlbGYpOgorICAgICAgICBjbGFzcyBCYXNlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBTdWIoQmFzZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fZGljdF9fIiwgQmFzZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19kaWN0X18iLCBTdWIuX19kaWN0X18pCisKIAogY2xhc3MgRGljdFByb3h5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTQ2OTEsMTEgKzQ1MzIsNDc1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5teWtleTIsICdmcm9tIEJhc2UyJykKIAogCitjbGFzcyBQaWNrbGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY2hlY2tfcmVkdWNlKHNlbGYsIHByb3RvLCBvYmosIGFyZ3M9KCksIGt3YXJncz17fSwgc3RhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBsaXN0aXRlbXM9Tm9uZSwgZGljdGl0ZW1zPU5vbmUpOgorICAgICAgICBpZiBwcm90byA+PSA0OgorICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZV92YWx1ZVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3B5cmVnLl9fbmV3b2JqX2V4X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShvYmopLCBhcmdzLCBrd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUpKQorICAgICAgICAgICAgaWYgbGlzdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QocmVkdWNlX3ZhbHVlWzNdKSwgbGlzdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbM10pCisgICAgICAgICAgICBpZiBkaWN0aXRlbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoZGljdChyZWR1Y2VfdmFsdWVbNF0pLCBkaWN0aXRlbXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZHVjZV92YWx1ZVs0XSkKKyAgICAgICAgZWxpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZV92YWx1ZVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3B5cmVnLl9fbmV3b2JqX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShvYmopLCkgKyBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUpKQorICAgICAgICAgICAgaWYgbGlzdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QocmVkdWNlX3ZhbHVlWzNdKSwgbGlzdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbM10pCisgICAgICAgICAgICBpZiBkaWN0aXRlbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoZGljdChyZWR1Y2VfdmFsdWVbNF0pLCBkaWN0aXRlbXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZHVjZV92YWx1ZVs0XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2VfdHlwZSA9IHR5cGUob2JqKS5fX2Jhc2VfXworICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gKGNvcHlyZWcuX3JlY29uc3RydWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lIGlmIGJhc2VfdHlwZSBpcyBvYmplY3QgZWxzZSBiYXNlX3R5cGUob2JqKSkpCisgICAgICAgICAgICBpZiBzdGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgKz0gKHN0YXRlLCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pLCByZWR1Y2VfdmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX3JlZHVjZV9fKCksIHJlZHVjZV92YWx1ZSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKKyAgICAgICAgcHJvdG9jb2xzID0gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKQorICAgICAgICBhcmdzID0gKC0xMDEsICJzcGFtIikKKyAgICAgICAga3dhcmdzID0geydiYWNvbic6IC0yMDEsICdmaXNoJzogLTMwMX0KKyAgICAgICAgc3RhdGUgPSB7J2NoZWVzZSc6IC00MDF9CisKKyAgICAgICAgY2xhc3MgQzE6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgICAgICAgb2JqID0gQzEoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MpCisKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHN0YXRlLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncywgc3RhdGU9c3RhdGUpCisKKyAgICAgICAgY2xhc3MgQzI6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiYWQgYXJncyIKKyAgICAgICAgb2JqID0gQzIoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEMzOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywga3dhcmdzKQorICAgICAgICBvYmogPSBDMygpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiBwcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBhcmdzLCBrd2FyZ3MpCisgICAgICAgICAgICBlbGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzQ6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCAiYmFkIGRpY3QiKQorICAgICAgICBjbGFzcyBDNToKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJiYWQgdHVwbGUiLCBrd2FyZ3MpCisgICAgICAgIGNsYXNzIEM2OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoKQorICAgICAgICBjbGFzcyBDNzoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImJhZCBhcmdzIgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZm9yIGNscyBpbiBDNCwgQzUsIEM2LCBDNzoKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKQorICAgICAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgVmFsdWVFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzg6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCBrd2FyZ3MpCisgICAgICAgIG9iaiA9IEM4KCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIDIgPD0gcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICBjbGFzcyBDOToKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGFyZ3MsIHt9KQorICAgICAgICBvYmogPSBDOSgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncykKKworICAgICAgICBjbGFzcyBDMTA6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICBvYmogPSBDMTAoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKworICAgICAgICBjbGFzcyBDMTE6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZQorICAgICAgICBvYmogPSBDMTEoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIHN0YXRlPXN0YXRlKQorCisgICAgICAgIGNsYXNzIEMxMjoKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJub3QgZGljdCIKKyAgICAgICAgb2JqID0gQzEyKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT0ibm90IGRpY3QiKQorCisgICAgICAgIGNsYXNzIEMxMzoKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICBvYmogPSBDMTMoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKyAgICAgICAgICAgIGlmIHByb3RvIDwgMjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfXygpCisKKyAgICAgICAgY2xhc3MgQzE0OgorICAgICAgICAgICAgX19zbG90c19fID0gdHVwbGUoc3RhdGUpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHN0YXRlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZSwgdmFsdWUpCisKKyAgICAgICAgb2JqID0gQzE0KCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIHN0YXRlPShOb25lLCBzdGF0ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfXygpCisKKyAgICAgICAgY2xhc3MgQzE1KGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvYmogPSBDMTUoeyJxdWViZWMiOiAtNjAxfSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBkaWN0aXRlbXM9ZGljdChvYmopKQorCisgICAgICAgIGNsYXNzIEMxNihsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQzE2KFsieXVrb24iXSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBsaXN0aXRlbXM9bGlzdChvYmopKQorCisgICAgZGVmIHRlc3Rfc3BlY2lhbF9tZXRob2RfbG9va3VwKHNlbGYpOgorICAgICAgICBwcm90b2NvbHMgPSByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpCisgICAgICAgIGNsYXNzIFBpY2t5OgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4ge30KKworICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICAgICAgICAgIGlmIGF0dHIgaW4gKCJfX2dldG5ld2FyZ3NfXyIsICJfX2dldG5ld2FyZ3NfZXhfXyIpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihhdHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzdGF0ZSA9IHt9IGlmIHByb3RvY29sID49IDIgZWxzZSBOb25lCisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG9jb2wsIFBpY2t5KCksIHN0YXRlPXN0YXRlKQorCisgICAgZGVmIF9hc3NlcnRfaXNfY29weShzZWxmLCBvYmosIG9iamNvcHksIG1zZz1Ob25lKToKKyAgICAgICAgIiIiVXRpbGl0eSBtZXRob2QgdG8gdmVyaWZ5IGlmIHR3byBvYmplY3RzIGFyZSBjb3BpZXMgb2YgZWFjaCBvdGhlcnMuCisgICAgICAgICIiIgorICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIG1zZyA9ICJ7IXJ9IGlzIG5vdCBhIGNvcHkgb2YgeyFyfSIuZm9ybWF0KG9iaiwgb2JqY29weSkKKyAgICAgICAgaWYgdHlwZShvYmopLl9fcmVwcl9fIGlzIG9iamVjdC5fX3JlcHJfXzoKKyAgICAgICAgICAgICMgV2UgaGF2ZSB0aGlzIGxpbWl0YXRpb24gZm9yIG5vdyBiZWNhdXNlIHdlIHVzZSB0aGUgb2JqZWN0J3MgcmVwcgorICAgICAgICAgICAgIyB0byBoZWxwIHVzIHZlcmlmeSB0aGF0IHRoZSB0d28gb2JqZWN0cyBhcmUgY29waWVzLiBUaGlzIGFsbG93cworICAgICAgICAgICAgIyB1cyB0byBkZWxlZ2F0ZSB0aGUgbm9uLWdlbmVyaWMgdmVyaWZpY2F0aW9uIGxvZ2ljIHRvIHRoZSBvYmplY3RzCisgICAgICAgICAgICAjIHRoZW1zZWx2ZXMuCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJvYmplY3QgcGFzc2VkIHRvIF9hc3NlcnRfaXNfY29weSBtdXN0ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcnJpZGUgdGhlIF9fcmVwcl9fIG1ldGhvZC4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9iaiwgb2JqY29weSwgbXNnPW1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKG9iaiksIHR5cGUob2JqY29weSksIG1zZz1tc2cpCisgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19kaWN0X18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob2JqLl9fZGljdF9fLCBvYmpjb3B5Ll9fZGljdF9fLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fc2xvdHNfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwob2JqLl9fc2xvdHNfXywgb2JqY29weS5fX3Nsb3RzX18sIG1zZz1tc2cpCisgICAgICAgICAgICBmb3Igc2xvdCBpbiBvYmouX19zbG90c19fOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob2JqLCBzbG90KSwgaGFzYXR0cihvYmpjb3B5LCBzbG90KSwgbXNnPW1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob2JqLCBzbG90LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIob2JqY29weSwgc2xvdCwgTm9uZSksIG1zZz1tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvYmopLCByZXByKG9iamNvcHkpLCBtc2c9bXNnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2VuZXJhdGVfcGlja2xlX2NvcGllcnMoKToKKyAgICAgICAgIiIiVXRpbGl0eSBtZXRob2QgdG8gZ2VuZXJhdGUgdGhlIG1hbnkgcG9zc2libGUgcGlja2xlIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgUGlja2xlQ29waWVyOgorICAgICAgICAgICAgIlRoaXMgY2xhc3MgY29waWVzIG9iamVjdCB1c2luZyBwaWNrbGUuIgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3RvLCBkdW1wcywgbG9hZHMpOgorICAgICAgICAgICAgICAgIHNlbGYucHJvdG8gPSBwcm90bworICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMgPSBkdW1wcworICAgICAgICAgICAgICAgIHNlbGYubG9hZHMgPSBsb2FkcworICAgICAgICAgICAgZGVmIGNvcHkoc2VsZiwgb2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG9iaiwgc2VsZi5wcm90bykpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBXZSB0cnkgdG8gYmUgYXMgZGVzY3JpcHRpdmUgYXMgcG9zc2libGUgaGVyZSBzaW5jZSB0aGlzIGlzCisgICAgICAgICAgICAgICAgIyB0aGUgc3RyaW5nIHdoaWNoIHdlIHdpbGwgYWxsb3cgdXMgdG8gdGVsbCB0aGUgcGlja2xlCisgICAgICAgICAgICAgICAgIyBjb25maWd1cmF0aW9uIHdlIGFyZSB1c2luZyBkdXJpbmcgZGVidWdnaW5nLgorICAgICAgICAgICAgICAgIHJldHVybiAoIlBpY2tsZUNvcGllcihwcm90bz17fSwgZHVtcHM9e30ue30sIGxvYWRzPXt9Lnt9KSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5wcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcy5fX21vZHVsZV9fLCBzZWxmLmR1bXBzLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2Fkcy5fX21vZHVsZV9fLCBzZWxmLmxvYWRzLl9fcXVhbG5hbWVfXykpCisgICAgICAgIHJldHVybiAoUGlja2xlQ29waWVyKCphcmdzKSBmb3IgYXJncyBpbgorICAgICAgICAgICAgICAgICAgIGl0ZXJ0b29scy5wcm9kdWN0KHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BpY2tsZS5kdW1wcywgcGlja2xlLl9kdW1wc30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BpY2tsZS5sb2FkcywgcGlja2xlLl9sb2Fkc30pKQorCisgICAgZGVmIHRlc3RfcGlja2xlX3Nsb3RzKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHBpY2tsaW5nIG9mIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18uCisKKyAgICAgICAgIyBQaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fIGJ1dCB3aXRob3V0IF9fZ2V0c3RhdGVfXyBzaG91bGQKKyAgICAgICAgIyBmYWlsIChpZiB1c2luZyBwcm90b2NvbCAwIG9yIDEpCisgICAgICAgIGdsb2JhbCBDCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwaWNrbGUuZHVtcHMoQygpLCAwKQorCisgICAgICAgIGdsb2JhbCBECisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhEKCksIDApCisKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICJBIGNsYXNzIHdpdGggX19nZXRzdGF0ZV9fIGFuZCBfX3NldHN0YXRlX18gaW1wbGVtZW50ZWQuIgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIHt9KS5jb3B5KCkKKyAgICAgICAgICAgICAgICBmb3IgY2xzIGluIHR5cGUoc2VsZikuX19tcm9fXzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNsb3QgaW4gY2xzLl9fZGljdF9fLmdldCgnX19zbG90c19fJywgKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW3Nsb3RdID0gZ2V0YXR0cihzZWxmLCBzbG90KQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUKKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHN0YXRlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgdikKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzKCk8JXI+IiAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBzZWxmLl9fZ2V0c3RhdGVfXygpKQorCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICAiQSBzdWJjbGFzcyBvZiBhIGNsYXNzIHdpdGggc2xvdHMuIgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGdsb2JhbCBFCisgICAgICAgIGNsYXNzIEUoQyk6CisgICAgICAgICAgICAiQSBzdWJjbGFzcyB3aXRoIGFuIGV4dHJhIHNsb3QuIgorICAgICAgICAgICAgX19zbG90c19fID0gWydiJ10KKworICAgICAgICAjIE5vdyBpdCBzaG91bGQgd29yaworICAgICAgICBmb3IgcGlja2xlX2NvcGllciBpbiBzZWxmLl9nZW5lcmF0ZV9waWNrbGVfY29waWVycygpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocGlja2xlX2NvcGllcj1waWNrbGVfY29waWVyKToKKyAgICAgICAgICAgICAgICB4ID0gQygpCisgICAgICAgICAgICAgICAgeSA9IHBpY2tsZV9jb3BpZXIuY29weSh4KQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICAgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeCA9IEQoKQorICAgICAgICAgICAgICAgIHguYSA9IDQyCisgICAgICAgICAgICAgICAgeC5iID0gMTAwCisgICAgICAgICAgICAgICAgeSA9IHBpY2tsZV9jb3BpZXIuY29weSh4KQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICAgICAgICAgICAgICB4ID0gRSgpCisgICAgICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgICAgICB4LmIgPSAiZm9vIgorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgZGVmIHRlc3RfcmVkdWNlX2NvcHlpbmcoc2VsZik6CisgICAgICAgICMgVGVzdHMgcGlja2xpbmcgYW5kIGNvcHlpbmcgbmV3LXN0eWxlIGNsYXNzZXMgYW5kIG9iamVjdHMuCisgICAgICAgIGdsb2JhbCBDMQorICAgICAgICBjbGFzcyBDMToKKyAgICAgICAgICAgICJUaGUgc3RhdGUgb2YgdGhpcyBjbGFzcyBpcyBjb3B5YWJsZSB2aWEgaXRzIGluc3RhbmNlIGRpY3QuIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgTkVFRF9ESUNUX0NPUFlJTkcgPSBUcnVlCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMxKCVyLCAlcikiICUgKHNlbGYuYSwgc2VsZi5iKQorCisgICAgICAgIGdsb2JhbCBDMgorICAgICAgICBjbGFzcyBDMihsaXN0KToKKyAgICAgICAgICAgICJBIGxpc3Qgc3ViY2xhc3MgY29weWFibGUgdmlhIF9fZ2V0bmV3YXJnc19fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYik6CisgICAgICAgICAgICAgICAgc2VsZiA9IHN1cGVyKCkuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgICAgICAjIFRoaXMgaGVscHMgdGVzdGluZyB0aGF0IF9faW5pdF9fIGlzIG5vdCBjYWxsZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICMgdW5waWNrbGluZyBwcm9jZXNzLCB3aGljaCB3b3VsZCBjYXVzZSBleHRyYSBhcHBlbmRzLgorICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCJjaGVlc2UiKQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMyKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgbGlzdChzZWxmKSkKKworICAgICAgICBnbG9iYWwgQzMKKyAgICAgICAgY2xhc3MgQzMobGlzdCk6CisgICAgICAgICAgICAiQSBsaXN0IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldHN0YXRlX18uIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgTkVFRF9ESUNUX0NPUFlJTkcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgIyBUaGlzIGhlbHBzIHRlc3RpbmcgdGhhdCBfX2luaXRfXyBpcyBub3QgY2FsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIHVucGlja2xpbmcgcHJvY2Vzcywgd2hpY2ggd291bGQgY2F1c2UgZXh0cmEgYXBwZW5kcy4KKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCgiY2hlZXNlIikKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuQVJHUworICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgYSwgYiA9IHN0YXRlCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMzKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgbGlzdChzZWxmKSkKKworICAgICAgICBnbG9iYWwgQzQKKyAgICAgICAgY2xhc3MgQzQoaW50KToKKyAgICAgICAgICAgICJBbiBpbnQgc3ViY2xhc3MgY29weWFibGUgdmlhIF9fZ2V0bmV3YXJnc19fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoImhlbGxvIiwgIndvcmxkIiwgMSkKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuQVJHUworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQzQoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEM1CisgICAgICAgIGNsYXNzIEM1KGludCk6CisgICAgICAgICAgICAiQW4gaW50IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfZXhfXy4iCisgICAgICAgICAgICBBUkdTID0gKDEsIDIpCisgICAgICAgICAgICBLV0FSR1MgPSB7J3ZhbHVlJzogM30KKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYiwgKiwgdmFsdWU9MCk6CisgICAgICAgICAgICAgICAgc2VsZiA9IHN1cGVyKCkuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIChjbHMuQVJHUywgY2xzLktXQVJHUykKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkM1KCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQorCisgICAgICAgIHRlc3RfY2xhc3NlcyA9IChDMSwgQzIsIEMzLCBDNCwgQzUpCisgICAgICAgICMgVGVzdGluZyBjb3B5aW5nIHRocm91Z2ggcGlja2xlCisgICAgICAgIHBpY2tsZV9jb3BpZXJzID0gc2VsZi5fZ2VuZXJhdGVfcGlja2xlX2NvcGllcnMoKQorICAgICAgICBmb3IgY2xzLCBwaWNrbGVfY29waWVyIGluIGl0ZXJ0b29scy5wcm9kdWN0KHRlc3RfY2xhc3NlcywgcGlja2xlX2NvcGllcnMpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY2xzPWNscywgcGlja2xlX2NvcGllcj1waWNrbGVfY29waWVyKToKKyAgICAgICAgICAgICAgICBrd2FyZ3MgPSBnZXRhdHRyKGNscywgJ0tXQVJHUycsIHt9KQorICAgICAgICAgICAgICAgIG9iaiA9IGNscygqY2xzLkFSR1MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHByb3RvID0gcGlja2xlX2NvcGllci5wcm90bworICAgICAgICAgICAgICAgIGlmIDIgPD0gcHJvdG8gPCA0IGFuZCBoYXNhdHRyKGNscywgJ19fZ2V0bmV3YXJnc19leF9fJyk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVfY29waWVyLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgb2JqY29weSA9IHBpY2tsZV9jb3BpZXIuY29weShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5KQorICAgICAgICAgICAgICAgICMgRm9yIHRlc3QgY2xhc3NlcyB0aGF0IHN1cHBvcnRzIHRoaXMsIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgZ28KKyAgICAgICAgICAgICAgICAjIGFyb3VuZCB0aGUgcmVkdWNlIHByb3RvY29sIGJ5IHNpbXBseSBjb3B5aW5nIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAjIGRpY3Rpb25hcnkuIFdlIGNsZWFyIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIHByZXZpb3VzIGNvcHkgdG8KKyAgICAgICAgICAgICAgICAjIG5vdCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIGlmIHByb3RvID49IDIgYW5kIG5vdCBjbHMuTkVFRF9ESUNUX0NPUFlJTkc6CisgICAgICAgICAgICAgICAgICAgIG9iamNvcHkuX19kaWN0X18uY2xlYXIoKQorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5MiA9IHBpY2tsZV9jb3BpZXIuY29weShvYmpjb3B5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weShvYmosIG9iamNvcHkyKQorCisgICAgICAgICMgVGVzdGluZyBjb3B5aW5nIHRocm91Z2ggY29weS5kZWVwY29weSgpCisgICAgICAgIGZvciBjbHMgaW4gdGVzdF9jbGFzc2VzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY2xzPWNscyk6CisgICAgICAgICAgICAgICAga3dhcmdzID0gZ2V0YXR0cihjbHMsICdLV0FSR1MnLCB7fSkKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKmNscy5BUkdTLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICAjIFhYWDogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGNvcHkgbW9kdWxlIHRvIHN1cHBvcnQgUEVQIDMxNTQncworICAgICAgICAgICAgICAgICMgcmVkdWNlIHByb3RvY29sIDQuCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihjbHMsICdfX2dldG5ld2FyZ3NfZXhfXycpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9iamNvcHkgPSBkZWVwY29weShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5KQorICAgICAgICAgICAgICAgICMgRm9yIHRlc3QgY2xhc3NlcyB0aGF0IHN1cHBvcnRzIHRoaXMsIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgZ28KKyAgICAgICAgICAgICAgICAjIGFyb3VuZCB0aGUgcmVkdWNlIHByb3RvY29sIGJ5IHNpbXBseSBjb3B5aW5nIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAjIGRpY3Rpb25hcnkuIFdlIGNsZWFyIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIHByZXZpb3VzIGNvcHkgdG8KKyAgICAgICAgICAgICAgICAjIG5vdCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIGlmIG5vdCBjbHMuTkVFRF9ESUNUX0NPUFlJTkc6CisgICAgICAgICAgICAgICAgICAgIG9iamNvcHkuX19kaWN0X18uY2xlYXIoKQorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5MiA9IGRlZXBjb3B5KG9iamNvcHkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weTIpCisKKworY2xhc3MgU2hhcmVkS2V5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc3ViY2xhc3NlcyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBzdWJjbGFzc2VzIGNhbiBzaGFyZSBrZXlzIChwZXIgUEVQIDQxMikKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhLCBiID0gQSgpLCBCKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKHZhcnMoYSkpLCBzeXMuZ2V0c2l6ZW9mKHZhcnMoYikpKQorICAgICAgICBzZWxmLmFzc2VydExlc3Moc3lzLmdldHNpemVvZih2YXJzKGEpKSwgc3lzLmdldHNpemVvZih7fSkpCisgICAgICAgIGEueCwgYS55LCBhLnosIGEudyA9IHJhbmdlKDQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3lzLmdldHNpemVvZih2YXJzKGEpKSwgc3lzLmdldHNpemVvZih2YXJzKGIpKSkKKyAgICAgICAgYTIgPSBBKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKHZhcnMoYSkpLCBzeXMuZ2V0c2l6ZW9mKHZhcnMoYTIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHN5cy5nZXRzaXplb2YodmFycyhhKSksIHN5cy5nZXRzaXplb2Yoe30pKQorICAgICAgICBiLnUsIGIudiwgYi53LCBiLnQgPSByYW5nZSg0KQorICAgICAgICBzZWxmLmFzc2VydExlc3Moc3lzLmdldHNpemVvZih2YXJzKGIpKSwgc3lzLmdldHNpemVvZih7fSkpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgICMgUnVuIGFsbCBsb2NhbCB0ZXN0IGNhc2VzLCB3aXRoIFBUeXBlc0xvbmdJbml0VGVzdCBmaXJzdC4KICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQVHlwZXNMb25nSW5pdFRlc3QsIE9wZXJhdG9yc1Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NQcm9wZXJ0aWVzQW5kTWV0aG9kcywgRGljdFByb3h5VGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTWlzY1Rlc3RzKQorICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2NUZXN0cywgUGlja2xpbmdUZXN0cywgU2hhcmVkS2V5VGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weQppbmRleCA5MTI5YWMwLi45NTU2MThhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5CkBAIC0yLDEzICsyLDE1IEBACiAKICMgSW5pdGlhbCB0ZXN0cyBhcmUgY29waWVkIGFzIGlzIGZyb20gInRlc3RfcG9sbC5weSIKIAotaW1wb3J0IG9zLCBzZWxlY3QsIHJhbmRvbSwgdW5pdHRlc3QsIHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgY3B5dGhvbl9vbmx5CiAKLXRyeToKLSAgICBzZWxlY3QuZGV2cG9sbAotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzZWxlY3QuZGV2cG9sbCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X2RldnBvbGwiKQoraWYgbm90IGhhc2F0dHIoc2VsZWN0LCAnZGV2cG9sbCcpIDoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgndGVzdCB3b3JrcyBvbmx5IG9uIFNvbGFyaXMgT1MgZmFtaWx5JykKIAogCiBkZWYgZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgZmxhZyk6CkBAIC04Nyw2ICs4OSwzNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5wb2xsLCAxIDw8IDYzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5wb2xsLCAxIDw8IDY0KQogCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIG9wZW5fZmlsZSA9IG9wZW4oX19maWxlX18sICJyYiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcGVuX2ZpbGUuY2xvc2UpCisgICAgICAgIGZkID0gb3Blbl9maWxlLmZpbGVubygpCisgICAgICAgIGRldnBvbGwgPSBzZWxlY3QuZGV2cG9sbCgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGV2cG9sbC5maWxlbm8oKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRldnBvbGwuY2xvc2VkKQorCisgICAgICAgICMgdGVzdCBjbG9zZSgpCisgICAgICAgIGRldnBvbGwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGV2cG9sbC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwuZmlsZW5vKQorCisgICAgICAgICMgY2xvc2UoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIGRldnBvbGwuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLm1vZGlmeSwgZmQsIHNlbGVjdC5QT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwucG9sbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5yZWdpc3RlciwgZmQsIGZkLCBzZWxlY3QuUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLnVucmVnaXN0ZXIsIGZkKQorCisgICAgZGVmIHRlc3RfZmRfbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBkZXZwb2xsID0gc2VsZWN0LmRldnBvbGwoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZGV2cG9sbC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZGV2cG9sbC5maWxlbm8oKSksIEZhbHNlKQorCiAgICAgZGVmIHRlc3RfZXZlbnRzX21hc2tfb3ZlcmZsb3coc2VsZik6CiAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LmRldnBvbGwoKQogICAgICAgICB3LCByID0gb3MucGlwZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKaW5kZXggMzI1NDQ5YS4uMGJhOGYwZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weQpAQCAtNzYsNiArNzYsMTUgQEAKICAgICAgICAgZGlmZl9nZW4gPSBkaWZmbGliLnVuaWZpZWRfZGlmZihbXSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGRpZmZfZ2VuKQogCisgICAgZGVmIHRlc3RfbWF0Y2hpbmdfYmxvY2tzX2NhY2hlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTYzNQorICAgICAgICBzID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgImFieGNkIiwgImFiY2QiKQorICAgICAgICBmaXJzdCA9IHMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpCisgICAgICAgIHNlY29uZCA9IHMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzBdLnNpemUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzFdLnNpemUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzJdLnNpemUsIDApCisKICAgICBkZWYgdGVzdF9hZGRlZF90YWJfaGludChzZWxmKToKICAgICAgICAgIyBDaGVjayBmaXggZm9yIGJ1ZyAjMTQ4ODk0MwogICAgICAgICBkaWZmID0gbGlzdChkaWZmbGliLkRpZmZlcigpLmNvbXBhcmUoWyJcdEkgYW0gYSBidWdneSJdLFsiXHRcdEkgYW0gYSBidWciXSkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rpcy5weSBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CmluZGV4IGI4NmNjODYuLmQxMjI5ZmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CkBAIC0xLDEyICsxLDMwIEBACiAjIE1pbmltYWwgdGVzdHMgZm9yIGRpcyBtb2R1bGUKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2FwdHVyZWRfc3Rkb3V0Citmcm9tIHRlc3QuYnl0ZWNvZGVfaGVscGVyIGltcG9ydCBCeXRlY29kZVRlc3RDYXNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgZGlzCiBpbXBvcnQgaW8KIGltcG9ydCByZQoraW1wb3J0IHR5cGVzCitpbXBvcnQgY29udGV4dGxpYgorCitkZWYgZ2V0X3RiKCk6CisgICAgZGVmIF9lcnJvcigpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0YiA9IGUuX190cmFjZWJhY2tfXworICAgICAgICByZXR1cm4gdGIKKworICAgIHRiID0gX2Vycm9yKCkKKyAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICByZXR1cm4gdGIKKworVFJBQ0VCQUNLX0NPREUgPSBnZXRfdGIoKS50Yl9mcmFtZS5mX2NvZGUKIAogY2xhc3MgX0M6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjMsMTIgKzQxLDEyIEBACiAiIiIgJSAoX0MuX19pbml0X18uX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLCkKIAogZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAxICgxKQotICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQotICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAyICg9PSkKLSAgICAgICAgICA5IExPQURfRkFTVCAgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgNiBDT01QQVJFX09QICAgICAgICAgICAgICAgMiAoPT0pCisgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICgwKQorICAgICAgICAgMTUgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKDApCiAgICAgICAgICAxOCBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC00OSwxMSArNjcsMTEgQEAKIAogCiBkaXNfZl9jb19jb2RlID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAwICgwKQotICAgICAgICAgIDMgTE9BRF9GQVNUICAgICAgICAgICAwICgwKQotICAgICAgICAgIDYgQ0FMTF9GVU5DVElPTiAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQorICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKDApCisgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICA2IENBTExfRlVOQ1RJT04gICAgICAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgIDkgUE9QX1RPUAotICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQorICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC04OSw3ICsxMDcsNyBAQAogICAgIHBhc3MKIAogZGlzX2J1ZzEzMzM5ODIgPSAiIiJcCi0gJS00ZCAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCislM2QgICAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCiAgICAgICAgICAgICAgIDMgUE9QX0pVTVBfSUZfVFJVRSAgICAgICAgMzUKICAgICAgICAgICAgICAgNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoQXNzZXJ0aW9uRXJyb3IpCiAgICAgICAgICAgICAgIDkgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDxjb2RlIG9iamVjdCA8bGlzdGNvbXA+IGF0IDB4Li4uLCBmaWxlICIlcyIsIGxpbmUgJWQ+KQpAQCAtOTksMTIgKzExNywxMiBAQAogICAgICAgICAgICAgIDIxIEdFVF9JVEVSCiAgICAgICAgICAgICAgMjIgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEgKDEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXIpCiAKLSAlLTRkICAgICAgICAyNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgNCAoMSkKKyUzZCAgICAgICAgICAyNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgNCAoMSkKICAgICAgICAgICAgICAyOCBCSU5BUllfQURECiAgICAgICAgICAgICAgMjkgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEgKDEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXIpCiAgICAgICAgICAgICAgMzIgUkFJU0VfVkFSQVJHUyAgICAgICAgICAgIDEKIAotICUtNGQgICA+PiAgIDM1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorJTNkICAgICA+PiAgIDM1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQogICAgICAgICAgICAgIDM4IFJFVFVSTl9WQUxVRQogIiIiICUgKGJ1ZzEzMzM5ODIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLAogICAgICAgIF9fZmlsZV9fLApAQCAtMTcxLDM4ICsxODksNjkgQEAKICAgICAgICAgICAgICAyNSBSRVRVUk5fVkFMVUUKICIiIgogCitkaXNfdHJhY2ViYWNrID0gIiIiXAorICUtNGQgICAgICAgICAwIFNFVFVQX0VYQ0VQVCAgICAgICAgICAgIDEyICh0byAxNSkKKworICUtNGQgICAgICAgICAzIExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgICAgICA2IExPQURfQ09OU1QgICAgICAgICAgICAgICAyICgwKQorICAgIC0tPiAgICAgICA5IEJJTkFSWV9UUlVFX0RJVklERQorICAgICAgICAgICAgIDEwIFBPUF9UT1AKKyAgICAgICAgICAgICAxMSBQT1BfQkxPQ0sKKyAgICAgICAgICAgICAxMiBKVU1QX0ZPUldBUkQgICAgICAgICAgICA0NiAodG8gNjEpCisKKyAlLTRkICAgPj4gICAxNSBEVVBfVE9QCisgICAgICAgICAgICAgMTYgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKEV4Y2VwdGlvbikKKyAgICAgICAgICAgICAxOSBDT01QQVJFX09QICAgICAgICAgICAgICAxMCAoZXhjZXB0aW9uIG1hdGNoKQorICAgICAgICAgICAgIDIyIFBPUF9KVU1QX0lGX0ZBTFNFICAgICAgIDYwCisgICAgICAgICAgICAgMjUgUE9QX1RPUAorICAgICAgICAgICAgIDI2IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDI5IFBPUF9UT1AKKyAgICAgICAgICAgICAzMCBTRVRVUF9GSU5BTExZICAgICAgICAgICAxNCAodG8gNDcpCisKKyAlLTRkICAgICAgICAzMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoZSkKKyAgICAgICAgICAgICAzNiBMT0FEX0FUVFIgICAgICAgICAgICAgICAgMSAoX190cmFjZWJhY2tfXykKKyAgICAgICAgICAgICAzOSBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMSAodGIpCisgICAgICAgICAgICAgNDIgUE9QX0JMT0NLCisgICAgICAgICAgICAgNDMgUE9QX0VYQ0VQVAorICAgICAgICAgICAgIDQ0IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorICAgICAgICA+PiAgIDQ3IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorICAgICAgICAgICAgIDUwIFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDUzIERFTEVURV9GQVNUICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDU2IEVORF9GSU5BTExZCisgICAgICAgICAgICAgNTcgSlVNUF9GT1JXQVJEICAgICAgICAgICAgIDEgKHRvIDYxKQorICAgICAgICA+PiAgIDYwIEVORF9GSU5BTExZCisKKyAlLTRkICAgPj4gICA2MSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMSAodGIpCisgICAgICAgICAgICAgNjQgUkVUVVJOX1ZBTFVFCisiIiIgJSAoVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyAxLAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgMiwKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDMsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyA0LAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgNSkKKwogY2xhc3MgRGlzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9kaXNhc3NlbWJseShzZWxmLCBmdW5jLCBsYXN0aT0tMSwgd3JhcHBlcj1UcnVlKToKLSAgICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0Ci0gICAgICAgIHN5cy5zdGRvdXQgPSBzCi0gICAgICAgIHRyeToKKyAgICAgICAgIyBXZSB3YW50IHRvIHRlc3QgdGhlIGRlZmF1bHQgcHJpbnRpbmcgYmVoYXZpb3VyLCBub3QgdGhlIGZpbGUgYXJnCisgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dChvdXRwdXQpOgogICAgICAgICAgICAgaWYgd3JhcHBlcjoKICAgICAgICAgICAgICAgICBkaXMuZGlzKGZ1bmMpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRpcy5kaXNhc3NlbWJsZShmdW5jLCBsYXN0aSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAotICAgICAgICAjIFRyaW0gdHJhaWxpbmcgYmxhbmtzIChpZiBhbnkpLgotICAgICAgICByZXR1cm4gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gcy5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKV0KKyAgICAgICAgcmV0dXJuIG91dHB1dC5nZXR2YWx1ZSgpCiAKICAgICBkZWYgZ2V0X2Rpc2Fzc2VtYmxlX2FzX3N0cmluZyhzZWxmLCBmdW5jLCBsYXN0aT0tMSk6Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZXRfZGlzYXNzZW1ibHkoZnVuYywgbGFzdGksIEZhbHNlKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMsIGxhc3RpLCBGYWxzZSkKKworICAgIGRlZiBzdHJpcF9hZGRyZXNzZXMoc2VsZiwgdGV4dCk6CisgICAgICAgIHJldHVybiByZS5zdWIocidcYjB4WzAtOUEtRmEtZl0rXGInLCAnMHguLi4nLCB0ZXh0KQogCiAgICAgZGVmIGRvX2Rpc2Fzc2VtYmx5X3Rlc3Qoc2VsZiwgZnVuYywgZXhwZWN0ZWQpOgotICAgICAgICBsaW5lcyA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMpCi0gICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQuc3BsaXRsaW5lcygpCi0gICAgICAgIGlmIGV4cGVjdGVkID09IGxpbmVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcyA9IFtyZS5zdWIoJzB4WzAtOUEtRmEtZl0rJywgJzB4Li4uJywgbCkgZm9yIGwgaW4gbGluZXNdCi0gICAgICAgICAgICBpZiBleHBlY3RlZCA9PSBsaW5lczoKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mYWlsKAotICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjpcbiIgKwotICAgICAgICAgICAgICAgICJcbiIuam9pbihkaWZmbGliLm5kaWZmKGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKSkpCisgICAgICAgIGdvdCA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMpCisgICAgICAgIGlmIGdvdCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgIGdvdCA9IHNlbGYuc3RyaXBfYWRkcmVzc2VzKGdvdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfb3BtYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJOT1AiXSwgOSkKQEAgLTI5MCwzNSArMzM5LDM1IEBACiAgICAgZGVmIHRlc3RfZGlzX29iamVjdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuZGlzLCBvYmplY3QoKSkKIAorY2xhc3MgRGlzV2l0aEZpbGVUZXN0cyhEaXNUZXN0cyk6CisKKyAgICAjIFJ1biB0aGUgdGVzdHMgYWdhaW4sIHVzaW5nIHRoZSBmaWxlIGFyZyBpbnN0ZWFkIG9mIHByaW50CisgICAgZGVmIGdldF9kaXNhc3NlbWJseShzZWxmLCBmdW5jLCBsYXN0aT0tMSwgd3JhcHBlcj1UcnVlKToKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBpZiB3cmFwcGVyOgorICAgICAgICAgICAgZGlzLmRpcyhmdW5jLCBmaWxlPW91dHB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcy5kaXNhc3NlbWJsZShmdW5jLCBsYXN0aSwgZmlsZT1vdXRwdXQpCisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQorCisKKwogY29kZV9pbmZvX2NvZGVfaW5mbyA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICBjb2RlX2luZm8KIEZpbGVuYW1lOiAgICAgICAgICAoLiopCiBBcmd1bWVudCBjb3VudDogICAgMQogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAxCi1TdGFjayBzaXplOiAgICAgICAgNAorU3RhY2sgc2l6ZTogICAgICAgIDMKIEZsYWdzOiAgICAgICAgICAgICBPUFRJTUlaRUQsIE5FV0xPQ0FMUywgTk9GUkVFCiBDb25zdGFudHM6CiAgICAwOiAlcgotICAgMTogJ19fZnVuY19fJwotICAgMjogJ19fY29kZV9fJwotICAgMzogJzxjb2RlX2luZm8+JwotICAgNDogJ2NvX2NvZGUnCi0gICA1OiAiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJSVzIG9iamVjdHMiCi0lc05hbWVzOgotICAgMDogaGFzYXR0cgotICAgMTogX19mdW5jX18KLSAgIDI6IF9fY29kZV9fCi0gICAzOiBpc2luc3RhbmNlCi0gICA0OiBzdHIKLSAgIDU6IF90cnlfY29tcGlsZQotICAgNjogX2Zvcm1hdF9jb2RlX2luZm8KLSAgIDc6IFR5cGVFcnJvcgotICAgODogdHlwZQotICAgOTogX19uYW1lX18KK05hbWVzOgorICAgMDogX2Zvcm1hdF9jb2RlX2luZm8KKyAgIDE6IF9nZXRfY29kZV9vYmplY3QKIFZhcmlhYmxlIG5hbWVzOgotICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCAnICAgNjogTm9uZVxuJykKLSAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCAnJykpCisgICAwOiB4IiIiICUgKCgnRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLicsKQorICAgICAgICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAyIGVsc2UgKE5vbmUsKSkKIAogQHN0YXRpY21ldGhvZAogZGVmIHRyaWNreSh4LCB5LCB6PVRydWUsICphcmdzLCBjLCBkLCBlPVtdLCAqKmt3ZHMpOgpAQCAtMzgyLDcgKzQzMSw3IEBACiAKIGNvZGVfaW5mb19leHByX3N0ciA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICA8bW9kdWxlPgotRmlsZW5hbWU6ICAgICAgICAgIDxjb2RlX2luZm8+CitGaWxlbmFtZTogICAgICAgICAgPGRpc2Fzc2VtYmx5PgogQXJndW1lbnQgY291bnQ6ICAgIDAKIEt3LW9ubHkgYXJndW1lbnRzOiAwCiBOdW1iZXIgb2YgbG9jYWxzOiAgMApAQCAtMzk1LDcgKzQ0NCw3IEBACiAKIGNvZGVfaW5mb19zaW1wbGVfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQwOSw3ICs0NTgsNyBAQAogCiBjb2RlX2luZm9fY29tcG91bmRfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQ0Myw2ICs0OTIsOSBAQAogICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgZGlzLnNob3dfY29kZSh4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQrIlxuIikKKyAgICAgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIGRpcy5zaG93X2NvZGUoeCwgZmlsZT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dC5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2NvZGVfaW5mb19vYmplY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLmNvZGVfaW5mbywgb2JqZWN0KCkpCkBAIC00NTEsNSArNTAzLDMzMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5wcmV0dHlfZmxhZ3MoMCksICcweDAnKQogCiAKKyMgRm9kZGVyIGZvciBpbnN0cnVjdGlvbiBpbnRyb3NwZWN0aW9uIHRlc3RzCisjICAgRWRpdGluZyBhbnkgb2YgdGhlc2UgbWF5IHJlcXVpcmUgcmVjYWxjdWxhdGluZyB0aGUgZXhwZWN0ZWQgb3V0cHV0CitkZWYgb3V0ZXIoYT0xLCBiPTIpOgorICAgIGRlZiBmKGM9MywgZD00KToKKyAgICAgICAgZGVmIGlubmVyKGU9NSwgZj02KToKKyAgICAgICAgICAgIHByaW50KGEsIGIsIGMsIGQsIGUsIGYpCisgICAgICAgIHByaW50KGEsIGIsIGMsIGQpCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIHByaW50KGEsIGIsICcnLCAxLCBbXSwge30sICJIZWxsbyB3b3JsZCEiKQorICAgIHJldHVybiBmCisKK2RlZiBqdW1weSgpOgorICAgICMgVGhpcyB3b24ndCBhY3R1YWxseSBydW4gKGJ1dCB0aGF0J3MgT0ssIHdlIG9ubHkgZGlzYXNzZW1ibGUgaXQpCisgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICBwcmludChpKQorICAgICAgICBpZiBpIDwgNDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiSSBjYW4gaGF6IGVsc2UgY2xhdXNlPyIpCisgICAgd2hpbGUgaToKKyAgICAgICAgcHJpbnQoaSkKKyAgICAgICAgaSAtPSAxCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgaSA8IDQ6CisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHByaW50KCJXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/IikKKyAgICB0cnk6CisgICAgICAgIDEgLyAwCisgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICBwcmludCgiSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLiIpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBpIGFzIGRvZGd5OgorICAgICAgICAgICAgcHJpbnQoIk5ldmVyIHJlYWNoIHRoaXMiKQorICAgIGZpbmFsbHk6CisgICAgICAgIHByaW50KCJPSywgbm93IHdlJ3JlIGRvbmUiKQorCisjIEVuZCBmb2RkZXIgZm9yIG9waW5mbyBnZW5lcmF0aW9uIHRlc3RzCitleHBlY3RlZF9vdXRlcl9saW5lID0gMQorX2xpbmVfb2Zmc2V0ID0gb3V0ZXIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gLSAxCitjb2RlX29iamVjdF9mID0gb3V0ZXIuX19jb2RlX18uY29fY29uc3RzWzNdCitleHBlY3RlZF9mX2xpbmUgPSBjb2RlX29iamVjdF9mLmNvX2ZpcnN0bGluZW5vIC0gX2xpbmVfb2Zmc2V0Citjb2RlX29iamVjdF9pbm5lciA9IGNvZGVfb2JqZWN0X2YuY29fY29uc3RzWzNdCitleHBlY3RlZF9pbm5lcl9saW5lID0gY29kZV9vYmplY3RfaW5uZXIuY29fZmlyc3RsaW5lbm8gLSBfbGluZV9vZmZzZXQKK2V4cGVjdGVkX2p1bXB5X2xpbmUgPSAxCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgdXNlZnVsIHRvIHJlZ2VuZXJhdGUgdGhlIGV4cGVjdGVkIHJlc3VsdHMgYWZ0ZXIKKyMgZWl0aGVyIHRoZSBmb2RkZXIgaXMgbW9kaWZpZWQgb3IgdGhlIGJ5dGVjb2RlIGdlbmVyYXRpb24gY2hhbmdlcworIyBBZnRlciByZWdlbmVyYXRpb24sIHVwZGF0ZSB0aGUgcmVmZXJlbmNlcyB0byBjb2RlX29iamVjdF9mIGFuZAorIyBjb2RlX29iamVjdF9pbm5lciBiZWZvcmUgcmVydW5uaW5nIHRoZSB0ZXN0cworCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19vdXRlciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9fZiA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSgpLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19pbm5lciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoanVtcHksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfanVtcHlfbGluZSkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX2p1bXB5ID0gW1xuICAnLAorICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQorCisKK0luc3RydWN0aW9uID0gZGlzLkluc3RydWN0aW9uCitleHBlY3RlZF9vcGluZm9fb3V0ZXIgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9MywgYXJncmVwcj0nMycsIG9mZnNldD0wLCBzdGFydHNfbGluZT0yLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTAsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9UVVBMRScsIG9wY29kZT0xMDIsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9Y29kZV9vYmplY3RfZiwgYXJncmVwcj1yZXByKGNvZGVfb2JqZWN0X2YpLCBvZmZzZXQ9MTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mJyIsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2YnLCBhcmdyZXByPSdmJywgb2Zmc2V0PTI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT03LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0wLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9JycsIGFyZ3JlcHI9IicnIiwgb2Zmc2V0PTM2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz02LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0zOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX0xJU1QnLCBvcGNvZGU9MTAzLCBhcmc9MCwgYXJndmFsPTAsIGFyZ3JlcHI9JycsIG9mZnNldD00Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX01BUCcsIG9wY29kZT0xMDUsIGFyZz0wLCBhcmd2YWw9MCwgYXJncmVwcj0nJywgb2Zmc2V0PTQ1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9J0hlbGxvIHdvcmxkIScsIGFyZ3JlcHI9IidIZWxsbyB3b3JsZCEnIiwgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz03LCBhcmd2YWw9NywgYXJncmVwcj0nNyBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MiwgYXJndmFsPSdmJywgYXJncmVwcj0nZicsIG9mZnNldD01NSwgc3RhcnRzX2xpbmU9OCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworZXhwZWN0ZWRfb3BpbmZvX2YgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9NSwgYXJncmVwcj0nNScsIG9mZnNldD0wLCBzdGFydHNfbGluZT0zLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0zLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MCwgYXJndmFsPSdjJywgYXJncmVwcj0nYycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2QnLCBhcmdyZXByPSdkJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfVFVQTEUnLCBvcGNvZGU9MTAyLCBhcmc9NCwgYXJndmFsPTQsIGFyZ3JlcHI9JycsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPWNvZGVfb2JqZWN0X2lubmVyLCBhcmdyZXByPXJlcHIoY29kZV9vYmplY3RfaW5uZXIpLCBvZmZzZXQ9MjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZi48bG9jYWxzPi5pbm5lcicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mLjxsb2NhbHM+LmlubmVyJyIsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9MzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MzMsIHN0YXJ0c19saW5lPTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9MzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTMsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9MzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTAsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9NDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTEsIGFyZ3ZhbD0nZCcsIGFyZ3JlcHI9J2QnLCBvZmZzZXQ9NDUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTQsIGFyZ3ZhbD00LCBhcmdyZXByPSc0IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9NTIsIHN0YXJ0c19saW5lPTYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19pbm5lciA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9NCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MCwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MywgYXJndmFsPSdkJywgYXJncmVwcj0nZCcsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2UnLCBhcmdyZXByPSdlJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTEsIGFyZ3ZhbD0nZicsIGFyZ3JlcHI9J2YnLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTYsIGFyZ3ZhbD02LCBhcmdyZXByPSc2IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19qdW1weSA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTc0LCBhcmd2YWw9NzcsIGFyZ3JlcHI9J3RvIDc3Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3JhbmdlJywgYXJncmVwcj0ncmFuZ2UnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTEwLCBhcmdyZXByPScxMCcsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nR0VUX0lURVInLCBvcGNvZGU9NjgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRk9SX0lURVInLCBvcGNvZGU9OTMsIGFyZz01MCwgYXJndmFsPTY2LCBhcmdyZXByPSd0byA2NicsIG9mZnNldD0xMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTE2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE5LCBzdGFydHNfbGluZT00LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTI5LCBzdGFydHNfbGluZT01LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0zNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTQ3LCBhcmd2YWw9NDcsIGFyZ3JlcHI9JycsIG9mZnNldD0zOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTQxLCBzdGFydHNfbGluZT02LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD00NywgYXJncmVwcj0ndG8gNDcnLCBvZmZzZXQ9NDQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD00Nywgc3RhcnRzX2xpbmU9NywgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD01MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD01Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD01Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JSRUFLX0xPT1AnLCBvcGNvZGU9ODAsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU5LCBzdGFydHNfbGluZT04LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NjAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD02Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NjYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD02Nywgc3RhcnRzX2xpbmU9MTAsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nSSBjYW4gaGF6IGVsc2UgY2xhdXNlPycsIGFyZ3JlcHI9IidJIGNhbiBoYXogZWxzZSBjbGF1c2U/JyIsIG9mZnNldD03MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTc2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfTE9PUCcsIG9wY29kZT0xMjAsIGFyZz03NCwgYXJndmFsPTE1NCwgYXJncmVwcj0ndG8gMTU0Jywgb2Zmc2V0PTc3LCBzdGFydHNfbGluZT0xMSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9ODAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTE0MywgYXJndmFsPTE0MywgYXJncmVwcj0nJywgb2Zmc2V0PTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTg2LCBzdGFydHNfbGluZT0xMiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTg5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9OTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD05Niwgc3RhcnRzX2xpbmU9MTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSU5QTEFDRV9TVUJUUkFDVCcsIG9wY29kZT01NiwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTAyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwNiwgc3RhcnRzX2xpbmU9MTQsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTEwOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD0xMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xMjQsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTgsIHN0YXJ0c19saW5lPTE1LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9J3RvIDEyNCcsIG9mZnNldD0xMjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMjQsIHN0YXJ0c19saW5lPTE2LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD00LCBhcmdyZXByPSc0Jywgb2Zmc2V0PTEyNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0xMzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlJFQUtfTE9PUCcsIG9wY29kZT04MCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTM2LCBzdGFydHNfbGluZT0xNywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTEzNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTE0MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTQzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTQ0LCBzdGFydHNfbGluZT0xOSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NiwgYXJndmFsPSdXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/JywgYXJncmVwcj0iJ1dobyBsZXQgbG9sY2F0eiBpbnRvIHRoaXMgdGVzdCBzdWl0ZT8nIiwgb2Zmc2V0PTE0Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTUwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9GSU5BTExZJywgb3Bjb2RlPTEyMiwgYXJnPTcyLCBhcmd2YWw9MjI5LCBhcmdyZXByPSd0byAyMjknLCBvZmZzZXQ9MTU0LCBzdGFydHNfbGluZT0yMCwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfRVhDRVBUJywgb3Bjb2RlPTEyMSwgYXJnPTEyLCBhcmd2YWw9MTcyLCBhcmdyZXByPSd0byAxNzInLCBvZmZzZXQ9MTU3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0xNjAsIHN0YXJ0c19saW5lPTIxLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9MCwgYXJncmVwcj0nMCcsIG9mZnNldD0xNjMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCSU5BUllfVFJVRV9ESVZJREUnLCBvcGNvZGU9MjcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjgsIGFyZ3ZhbD0yMDAsIGFyZ3JlcHI9J3RvIDIwMCcsIG9mZnNldD0xNjksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdEVVBfVE9QJywgb3Bjb2RlPTQsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE3Miwgc3RhcnRzX2xpbmU9MjIsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTIsIGFyZ3ZhbD0nWmVyb0RpdmlzaW9uRXJyb3InLCBhcmdyZXByPSdaZXJvRGl2aXNpb25FcnJvcicsIG9mZnNldD0xNzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTEwLCBhcmd2YWw9J2V4Y2VwdGlvbiBtYXRjaCcsIGFyZ3JlcHI9J2V4Y2VwdGlvbiBtYXRjaCcsIG9mZnNldD0xNzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xOTksIGFyZ3ZhbD0xOTksIGFyZ3JlcHI9JycsIG9mZnNldD0xNzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTg1LCBzdGFydHNfbGluZT0yMywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9OCwgYXJndmFsPSdIZXJlIHdlIGdvLCBoZXJlIHdlIGdvLCBoZXJlIHdlIGdvLi4uJywgYXJncmVwcj0iJ0hlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4nIiwgb2Zmc2V0PTE4OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTkxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfRVhDRVBUJywgb3Bjb2RlPTg5LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjYsIGFyZ3ZhbD0yMjUsIGFyZ3JlcHI9J3RvIDIyNScsIG9mZnNldD0xOTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yMDAsIHN0YXJ0c19saW5lPTI1LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9XSVRIJywgb3Bjb2RlPTE0MywgYXJnPTE3LCBhcmd2YWw9MjIzLCBhcmdyZXByPSd0byAyMjMnLCBvZmZzZXQ9MjAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0xLCBhcmd2YWw9J2RvZGd5JywgYXJncmVwcj0nZG9kZ3knLCBvZmZzZXQ9MjA2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIwOSwgc3RhcnRzX2xpbmU9MjYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTksIGFyZ3ZhbD0nTmV2ZXIgcmVhY2ggdGhpcycsIGFyZ3JlcHI9IidOZXZlciByZWFjaCB0aGlzJyIsIG9mZnNldD0yMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1dJVEhfQ0xFQU5VUCcsIG9wY29kZT04MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjIzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjI2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIyOSwgc3RhcnRzX2xpbmU9MjgsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MTAsIGFyZ3ZhbD0iT0ssIG5vdyB3ZSdyZSBkb25lIiwgYXJncmVwcj0nIk9LLCBub3cgd2VcJ3JlIGRvbmUiJywgb2Zmc2V0PTIzMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yNDAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI0Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCisjIE9uZSBsYXN0IHBpZWNlIG9mIGluc3BlY3QgZm9kZGVyIHRvIGNoZWNrIHRoZSBkZWZhdWx0IGxpbmUgbnVtYmVyIGhhbmRsaW5nCitkZWYgc2ltcGxlKCk6IHBhc3MKK2V4cGVjdGVkX29waW5mb19zaW1wbGUgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0wLCBzdGFydHNfbGluZT1zaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8sIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKQorXQorCisKK2NsYXNzIEluc3RydWN0aW9uVGVzdHMoQnl0ZWNvZGVUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHNpbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9maXJzdF9saW5lX3NldF90b19Ob25lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhzaW1wbGUsIGZpcnN0X2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9vdXRlcihzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19vdXRlcikKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIGYgPSBvdXRlcigpCisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfZl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2YpCisKKyAgICBkZWYgdGVzdF9kb3VibHlfbmVzdGVkKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpOgorICAgICAgICAgICAgaW5uZXIgPSBvdXRlcigpKCkKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoaW5uZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfaW5uZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19pbm5lcikKKworICAgIGRlZiB0ZXN0X2p1bXB5KHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhqdW1weSwgZmlyc3RfbGluZT1leHBlY3RlZF9qdW1weV9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2p1bXB5KQorCisjIGdldF9pbnN0cnVjdGlvbnMgaGFzIGl0cyBvd24gdGVzdHMgYWJvdmUsIHNvIGNhbiByZWx5IG9uIGl0IHRvIHZhbGlkYXRlCisjIHRoZSBvYmplY3Qgb3JpZW50ZWQgQVBJCitjbGFzcyBCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnN0YW50aWF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBmdW5jdGlvbiwgbWV0aG9kLCBjb2RlIHN0cmluZyBhbmQgY29kZSBvYmplY3QKKyAgICAgICAgZm9yIG9iaiBpbiBbX2YsIF9DKDEpLl9faW5pdF9fLCAiYT0xIiwgX2YuX19jb2RlX19dOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgYiA9IGRpcy5CeXRlY29kZShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIuY29kZW9iaiwgdHlwZXMuQ29kZVR5cGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuQnl0ZWNvZGUsIG9iamVjdCgpKQorCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFtfZiwgX0MoMSkuX19pbml0X18sICJhPTEiLCBfZi5fX2NvZGVfX106CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvYmo9b2JqKToKKyAgICAgICAgICAgICAgICB2aWFfb2JqZWN0ID0gbGlzdChkaXMuQnl0ZWNvZGUob2JqKSkKKyAgICAgICAgICAgICAgICB2aWFfZ2VuZXJhdG9yID0gbGlzdChkaXMuZ2V0X2luc3RydWN0aW9ucyhvYmopKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlhX29iamVjdCwgdmlhX2dlbmVyYXRvcikKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShvdXRlciwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX291dGVyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2xpbmVfaW5fZGlzYXNzZW1ibHkoc2VsZik6CisgICAgICAgICMgVXNlIHRoZSBsaW5lIGluIHRoZSBzb3VyY2UgY29kZQorICAgICAgICBhY3R1YWwgPSBkaXMuQnl0ZWNvZGUoc2ltcGxlKS5kaXMoKVs6M10KKyAgICAgICAgZXhwZWN0ZWQgPSAiezo+M30iLmZvcm1hdChzaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgIyBVc2UgYW4gZXhwbGljaXQgZmlyc3QgbGluZSBudW1iZXIKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKHNpbXBsZSwgZmlyc3RfbGluZT0zNTApLmRpcygpWzozXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgIjM1MCIpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSAxMDAwCisgICAgICAgIGZvciB4LCBleHBlY3RlZCBpbiBDb2RlSW5mb1Rlc3RzLnRlc3RfcGFpcnM6CisgICAgICAgICAgICBiID0gZGlzLkJ5dGVjb2RlKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGIuaW5mbygpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Rpc2Fzc2VtYmxlZChzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKF9mKS5kaXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZGlzX2YpCisKKyAgICBkZWYgdGVzdF9mcm9tX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgdGIgPSBnZXRfdGIoKQorICAgICAgICBiID0gZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKQorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY3VycmVudF9vZmZzZXQsIHRiLnRiX2xhc3RpKQorCisgICAgZGVmIHRlc3RfZnJvbV90cmFjZWJhY2tfZGlzKHNlbGYpOgorICAgICAgICB0YiA9IGdldF90YigpCisgICAgICAgIGIgPSBkaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2sodGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kaXMoKSwgZGlzX3RyYWNlYmFjaykKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQppbmRleCA4NjI1OWMzLi41NjE5M2U4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CkBAIC00MDksNyArNDA5LDggQEAKIAogIiIiCiAKLWRlZiB0ZXN0X0RvY1Rlc3RGaW5kZXIoKTogciIiIgorY2xhc3MgdGVzdF9Eb2NUZXN0RmluZGVyOgorICAgIGRlZiBiYXNpY3MoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0RmluZGVyYCBjbGFzcy4KIAogRG9jVGVzdEZpbmRlciBpcyB1c2VkIHRvIGV4dHJhY3QgRG9jVGVzdHMgZnJvbSBhbiBvYmplY3QncyBkb2NzdHJpbmcKQEAgLTY0Niw2ICs2NDcsMzkgQEAKICAgICBbMSwgOSwgMTJdCiAiIiIKIAorICAgIGlmIGludC5fX2RvY19fOiAjIHNpbXBsZSBjaGVjayBmb3IgLS13aXRob3V0LWRvYy1zdHJpbmdzLCBza2lwIGlmIGxhY2tpbmcKKyAgICAgICAgZGVmIG5vbl9QeXRob25fbW9kdWxlcygpOiByIiIiCisKK0ZpbmRpbmcgRG9jdGVzdHMgaW4gTW9kdWxlcyBOb3QgV3JpdHRlbiBpbiBQeXRob24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0RvY1Rlc3RGaW5kZXIgY2FuIGFsc28gZmluZCBkb2N0ZXN0cyBpbiBtb3N0IG1vZHVsZXMgbm90IHdyaXR0ZW4gaW4gUHl0aG9uLgorV2UnbGwgdXNlIGJ1aWx0aW5zIGFzIGFuIGV4YW1wbGUsIHNpbmNlIGl0IGFsbW9zdCBjZXJ0YWlubHkgaXNuJ3Qgd3JpdHRlbiBpbgorcGxhaW4gb2wnIFB5dGhvbiBhbmQgaXMgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUuCisKKyAgICA+Pj4gaW1wb3J0IGJ1aWx0aW5zCisgICAgPj4+IHRlc3RzID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChidWlsdGlucykKKyAgICA+Pj4gNzkwIDwgbGVuKHRlc3RzKSA8IDgwMCAjIGFwcHJveGltYXRlIG51bWJlciBvZiBvYmplY3RzIHdpdGggZG9jc3RyaW5ncworICAgIFRydWUKKyAgICA+Pj4gcmVhbF90ZXN0cyA9IFt0IGZvciB0IGluIHRlc3RzIGlmIGxlbih0LmV4YW1wbGVzKSA+IDBdCisgICAgPj4+IGxlbihyZWFsX3Rlc3RzKSAjIG9iamVjdHMgdGhhdCBhY3R1YWxseSBoYXZlIGRvY3Rlc3RzCisgICAgOAorICAgID4+PiBmb3IgdCBpbiByZWFsX3Rlc3RzOgorICAgIC4uLiAgICAgcHJpbnQoJ3t9ICB7fScuZm9ybWF0KGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKSkKKyAgICAuLi4KKyAgICAxICBidWlsdGlucy5iaW4KKyAgICAzICBidWlsdGlucy5mbG9hdC5hc19pbnRlZ2VyX3JhdGlvCisgICAgMiAgYnVpbHRpbnMuZmxvYXQuZnJvbWhleAorICAgIDIgIGJ1aWx0aW5zLmZsb2F0LmhleAorICAgIDEgIGJ1aWx0aW5zLmhleAorICAgIDEgIGJ1aWx0aW5zLmludAorICAgIDIgIGJ1aWx0aW5zLmludC5iaXRfbGVuZ3RoCisgICAgMSAgYnVpbHRpbnMub2N0CisKK05vdGUgaGVyZSB0aGF0ICdiaW4nLCAnb2N0JywgYW5kICdoZXgnIGFyZSBmdW5jdGlvbnM7ICdmbG9hdC5hc19pbnRlZ2VyX3JhdGlvJywKKydmbG9hdC5oZXgnLCBhbmQgJ2ludC5iaXRfbGVuZ3RoJyBhcmUgbWV0aG9kczsgJ2Zsb2F0LmZyb21oZXgnIGlzIGEgY2xhc3NtZXRob2QsCithbmQgJ2ludCcgaXMgYSB0eXBlLgorIiIiCisKIGRlZiB0ZXN0X0RvY1Rlc3RQYXJzZXIoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0UGFyc2VyYCBjbGFzcy4KIApAQCAtMTQzNiw4ICsxNDcwLDQwIEBACiAgICAgICAgIDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCiAKLUZvciB0aGUgcHVycG9zZXMgb2YgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSwgdW5leHBlY3RlZCBleGNlcHRpb25zCi1jb3VudCBhcyBmYWlsdXJlczoKK1RoZSBGQUlMX0ZBU1QgZmxhZyBjYXVzZXMgdGhlIHJ1bm5lciB0byBleGl0IGFmdGVyIHRoZSBmaXJzdCBmYWlsaW5nIGV4YW1wbGUsCitzbyBzdWJzZXF1ZW50IGV4YW1wbGVzIGFyZSBub3QgZXZlbiBhdHRlbXB0ZWQ6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVAorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK1NwZWNpZnlpbmcgYm90aCBGQUlMX0ZBU1QgYW5kIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgaXMgZXF1aXZhbGVudCB0bworRkFJTF9GQVNUIG9ubHk6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVCB8IGRvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgYm90aCBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIGFuZCBGQUlMX0ZBU1QsIHVuZXhwZWN0ZWQKK2V4Y2VwdGlvbnMgY291bnQgYXMgZmFpbHVyZXM6CiAKICAgICA+Pj4gZGVmIGYoeCk6CiAgICAgLi4uICAgICByJycnCkBAIC0xNDY0LDYgKzE1MzAsMTcgQEAKICAgICAgICAgLi4uCiAgICAgICAgIFZhbHVlRXJyb3I6IDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIC4uLgorICAgICAgICBWYWx1ZUVycm9yOiAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQogCiBOZXcgb3B0aW9uIGZsYWdzIGNhbiBhbHNvIGJlIHJlZ2lzdGVyZWQsIHZpYSByZWdpc3Rlcl9vcHRpb25mbGFnKCkuICBIZXJlCiB3ZSByZWFjaCBpbnRvIGRvY3Rlc3QncyBpbnRlcm5hbHMgYSBiaXQuCkBAIC0yNTgwLDYgKzI2NTcsMjQwIEBACiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQogICAgICIiIgogCitkZWYgdGVzdF9DTEkoKTogciIiIgorVGhlIGRvY3Rlc3QgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIHJ1biBkb2N0ZXN0cyBhZ2FpbnN0IGFuIGFyYml0cmFyeSBmaWxlLgorVGhlc2UgdGVzdHMgdGVzdCB0aGlzIENMSSBmdW5jdGlvbmFsaXR5LgorCitXZSdsbCB1c2UgdGhlIHN1cHBvcnQgbW9kdWxlJ3Mgc2NyaXB0X2hlbHBlcnMgZm9yIHRoaXMsIGFuZCB3cml0ZSBhIHRlc3QgZmlsZXMKK3RvIGEgdGVtcCBkaXIgdG8gcnVuIHRoZSBjb21tYW5kIGFnYWluc3QuICBEdWUgdG8gYSBjdXJyZW50IGxpbWl0YXRpb24gaW4KK3NjcmlwdF9oZWxwZXJzLCB0aG91Z2gsIHdlIG5lZWQgYSBsaXR0bGUgdXRpbGl0eSBmdW5jdGlvbiB0byB0dXJuIHRoZSByZXR1cm5lZAorb3V0cHV0IGludG8gc29tZXRoaW5nIHdlIGNhbiBkb2N0ZXN0IGFnYWluc3Q6CisKKyAgICA+Pj4gZGVmIG5vcm1hbGl6ZShzKToKKyAgICAuLi4gICAgIHJldHVybiAnXG4nLmpvaW4ocy5kZWNvZGUoKS5zcGxpdGxpbmVzKCkpCisKK05vdGU6IHdlIGFsc28gcGFzcyBURVJNPScnIHRvIGFsbCB0aGUgYXNzZXJ0X3B5dGhvbiBjYWxscyB0byBhdm9pZCBhIGJ1ZworaW4gdGhlIHJlYWRsaW5lIGxpYnJhcnkgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gdGhlc2UgdGVzdHMgYmVjYXVzZSB3ZSBhcmUKK3J1bm5pbmcgdGhlbSBpbiBhIG5ldyBweXRob24gcHJvY2Vzcy4gIFNlZToKKworICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXJlYWRsaW5lLzIwMTMtMDYvbXNnMDAwMDAuaHRtbAorCitXaXRoIHRob3NlIHByZWxpbWluYXJpZXMgb3V0IG9mIHRoZSB3YXksIHdlJ2xsIHN0YXJ0IHdpdGggYSBmaWxlIHdpdGggdHdvCitzaW1wbGUgdGVzdHMgYW5kIG5vIGVycm9ycy4gIFdlJ2xsIHJ1biBib3RoIHRoZSB1bmFkb3JuZWQgZG9jdGVzdCBjb21tYW5kLCBhbmQKK3RoZSB2ZXJib3NlIHZlcnNpb24sIGFuZCB0aGVuIGNoZWNrIHRoZSBvdXRwdXQ6CisKKyAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCisgICAgPj4+IHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHRtcGRpcjoKKyAgICAuLi4gICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZS5kb2MnKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1RoaXMgaXMgYSB2ZXJ5IHNpbXBsZSB0ZXN0IGZpbGUuXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYSJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhJ1xuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdBbmQgdGhhdCBpcyBpdC5cbicpCisgICAgLi4uICAgICByYzEsIG91dDEsIGVycjEgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICByYzIsIG91dDIsIGVycjIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy12JywgZm4sIFRFUk09JycpCisKK1dpdGggbm8gYXJndW1lbnRzIGFuZCBwYXNzaW5nIHRlc3RzLCB3ZSBzaG91bGQgZ2V0IG5vIG91dHB1dDoKKworICAgID4+PiByYzEsIG91dDEsIGVycjEKKyAgICAoMCwgYicnLCBiJycpCisKK1dpdGggdGhlIHZlcmJvc2UgZmxhZywgd2Ugc2hvdWxkIHNlZSB0aGUgdGVzdCBvdXRwdXQsIGJ1dCBubyBlcnJvciBvdXRwdXQ6CisKKyAgICA+Pj4gcmMyLCBlcnIyCisgICAgKDAsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDIpKQorICAgIFRyeWluZzoKKyAgICAgICAgMSArIDEKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgImEiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYScKKyAgICBvaworICAgIDEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgICAgICAyIHRlc3RzIGluIG15ZmlsZS5kb2MKKyAgICAyIHRlc3RzIGluIDEgaXRlbXMuCisgICAgMiBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorCitOb3cgd2UnbGwgd3JpdGUgYSBjb3VwbGUgZmlsZXMsIG9uZSB3aXRoIHRocmVlIHRlc3RzLCB0aGUgb3RoZXIgYSBweXRob24gbW9kdWxlCit3aXRoIHR3byB0ZXN0cywgYm90aCBvZiB0aGUgZmlsZXMgaGF2aW5nICJlcnJvcnMiIGluIHRoZSB0ZXN0cyB0aGF0IGNhbiBiZSBtYWRlCitub24tZXJyb3JzIGJ5IGFwcGx5aW5nIHRoZSBhcHByb3ByaWF0ZSBkb2N0ZXN0IG9wdGlvbnMgdG8gdGhlIHJ1biAoRUxMSVBTSVMgaW4KK3RoZSBmaXJzdCBmaWxlLCBOT1JNQUxJWkVfV0hJVEVTUEFDRSBpbiB0aGUgc2Vjb25kKS4gIFRoaXMgY29tYmluYXRpb24gd2lsbAorYWxsb3cgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSAtZiBhbmQgLW8gZmxhZ3MsIGFzIHdlbGwgYXMgdGhlIGRvY3Rlc3QgY29tbWFuZCdzCithYmlsaXR5IHRvIHByb2Nlc3MgbW9yZSB0aGFuIG9uZSBmaWxlIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kLCBzaW5jZSB0aGUgc2Vjb25kCitmaWxlIGVuZHMgaW4gJy5weScsIGl0cyBoYW5kbGluZyBvZiBweXRob24gbW9kdWxlIGZpbGVzIChhcyBvcHBvc2VkIHRvIHN0cmFpZ2h0Cit0ZXh0IGZpbGVzKS4KKworICAgID4+PiBmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKKyAgICA+Pj4gd2l0aCBzY3JpcHRfaGVscGVyLnRlbXBfZGlyKCkgYXMgdG1wZGlyOgorICAgIC4uLiAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnbXlmaWxlLmRvYycpCisgICAgLi4uICAgICB3aXRoIG9wZW4oZm4sICd3JykgYXMgZjoKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnVGhpcyBpcyBhbm90aGVyIHNpbXBsZSB0ZXN0IGZpbGUuXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYWJjZGVmIlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgiICAgJ2EuLi5mJ1xuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgPj4+ICJhamttbCJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhLi4ubCdcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1xuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnQW5kIHRoYXQgaXMgaXQuXG4nKQorICAgIC4uLiAgICAgZm4yID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZTIucHknKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuMiwgJ3cnKSBhcyBmOgorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdkZWYgdGVzdF9mdW5jKCk6XG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICBcIlwiXCJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIFRoaXMgaXMgc2ltcGxlIHB5dGhvbiB0ZXN0IGZ1bmN0aW9uLlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgICAgID4+PiAxICsgMVxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgICAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgICAgICA+Pj4gImFiYyAgIGRlZiJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICAgICAnYWJjIGRlZidcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIlxuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgXCJcIlwiXG4nKQorICAgIC4uLiAgICAgaW1wb3J0IHNodXRpbAorICAgIC4uLiAgICAgcmMxLCBvdXQxLCBlcnIxID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjMiwgb3V0MiwgZXJyMiA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLCBmbiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjMywgb3V0MywgZXJyMyA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLAorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorICAgIC4uLiAgICAgcmM0LCBvdXQ0LCBlcnI0ID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1mJywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjNSwgb3V0NSwgZXJyNSA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLXYnLCAnLW8nLCAnRUxMSVBTSVMnLAorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorCitPdXIgZmlyc3QgdGVzdCBydW4gd2lsbCBzaG93IHRoZSBlcnJvcnMgZnJvbSB0aGUgZmlyc3QgZmlsZSAoZG9jdGVzdCBzdG9wcyBpZiBhCitmaWxlIGhhcyBlcnJvcnMpLiAgTm90ZSB0aGF0IGRvY3Rlc3QgdGVzdC1ydW4gZXJyb3Igb3V0cHV0IGFwcGVhcnMgb24gc3Rkb3V0LAorbm90IHN0ZGVycjoKKworICAgID4+PiByYzEsIGVycjEKKyAgICAoMSwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUob3V0MSkpICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLm15ZmlsZS5kb2MiLCBsaW5lIDQsIGluIG15ZmlsZS5kb2MKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgImFiY2RlZiIKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgJ2EuLi5mJworICAgIEdvdDoKKyAgICAgICAgJ2FiY2RlZicKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4ubXlmaWxlLmRvYyIsIGxpbmUgNiwgaW4gbXlmaWxlLmRvYworICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAiYWprbWwiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4ubCcKKyAgICBHb3Q6CisgICAgICAgICdhamttbCcKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgMSBpdGVtcyBoYWQgZmFpbHVyZXM6CisgICAgICAgMiBvZiAgIDMgaW4gbXlmaWxlLmRvYworICAgICoqKlRlc3QgRmFpbGVkKioqIDIgZmFpbHVyZXMuCisKK1dpdGggLW8gRUxMSVBTSVMgc3BlY2lmaWVkLCB0aGUgc2Vjb25kIHJ1biwgYWdhaW5zdCBqdXN0IHRoZSBmaXJzdCBmaWxlLCBzaG91bGQKK3Byb2R1Y2Ugbm8gZXJyb3JzLCBhbmQgd2l0aCAtbyBOT1JNQUxJWkVfV0hJVEVTUEFDRSBhbHNvIHNwZWNpZmllZCwgbmVpdGhlcgorc2hvdWxkIHRoZSB0aGlyZCwgd2hpY2ggcmFuIGFnYWluc3QgYm90aCBmaWxlczoKKworICAgID4+PiByYzIsIG91dDIsIGVycjIKKyAgICAoMCwgYicnLCBiJycpCisgICAgPj4+IHJjMywgb3V0MywgZXJyMworICAgICgwLCBiJycsIGInJykKKworVGhlIGZvdXJ0aCBydW4gdXNlcyBGQUlMX0ZBU1QsIHNvIHdlIHNob3VsZCBzZWUgb25seSBvbmUgZXJyb3I6CisKKyAgICA+Pj4gcmM0LCBlcnI0CisgICAgKDEsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDQpKSAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi5teWZpbGUuZG9jIiwgbGluZSA0LCBpbiBteWZpbGUuZG9jCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4uZicKKyAgICBHb3Q6CisgICAgICAgICdhYmNkZWYnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIDEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgICAgIDEgb2YgICAyIGluIG15ZmlsZS5kb2MKKyAgICAqKipUZXN0IEZhaWxlZCoqKiAxIGZhaWx1cmVzLgorCitUaGUgZmlmdGggdGVzdCB1c2VzIHZlcmJvc2Ugd2l0aCB0aGUgdHdvIG9wdGlvbnMsIHNvIHdlIHNob3VsZCBnZXQgdmVyYm9zZQorc3VjY2VzcyBvdXRwdXQgZm9yIHRoZSB0ZXN0cyBpbiBib3RoIGZpbGVzOgorCisgICAgPj4+IHJjNSwgZXJyNQorICAgICgwLCBiJycpCisgICAgPj4+IHByaW50KG5vcm1hbGl6ZShvdXQ1KSkKKyAgICBUcnlpbmc6CisgICAgICAgIDEgKyAxCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYS4uLmYnCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhamttbCIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdhLi4ubCcKKyAgICBvaworICAgIDEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgICAgICAzIHRlc3RzIGluIG15ZmlsZS5kb2MKKyAgICAzIHRlc3RzIGluIDEgaXRlbXMuCisgICAgMyBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorICAgIFRyeWluZzoKKyAgICAgICAgMSArIDEKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgImFiYyAgIGRlZiIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdhYmMgZGVmJworICAgIG9rCisgICAgMSBpdGVtcyBoYWQgbm8gdGVzdHM6CisgICAgICAgIG15ZmlsZTIKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMiB0ZXN0cyBpbiBteWZpbGUyLnRlc3RfZnVuYworICAgIDIgdGVzdHMgaW4gMiBpdGVtcy4KKyAgICAyIHBhc3NlZCBhbmQgMCBmYWlsZWQuCisgICAgVGVzdCBwYXNzZWQuCisKK1dlIHNob3VsZCBhbHNvIGNoZWNrIHNvbWUgdHlwaWNhbCBlcnJvciBjYXNlcy4KKworSW52YWxpZCBmaWxlIG5hbWU6CisKKyAgICA+Pj4gcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnbm9zdWNoZmlsZScsIFRFUk09JycpCisgICAgPj4+IHJjLCBvdXQKKyAgICAoMSwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgRmlsZU5vdEZvdW5kRXJyb3I6IFtFcnJubyAuLi5dIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICdub3N1Y2hmaWxlJworCitJbnZhbGlkIGRvY3Rlc3Qgb3B0aW9uOgorCisgICAgPj4+IHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ25vc3VjaG9wdGlvbicsIFRFUk09JycpCisgICAgPj4+IHJjLCBvdXQKKyAgICAoMiwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgdXNhZ2UuLi5pbnZhbGlkLi4ubm9zdWNob3B0aW9uLi4uCisKKyIiIgorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNYWluCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZHluYW1pY2NsYXNzYXR0cmlidXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWQ2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQpAQCAtMCwwICsxLDMwNCBAQAorIyBUZXN0IGNhc2UgZm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorIyBtb3JlIHRlc3RzIGFyZSBpbiB0ZXN0X2Rlc2NyCisKK2ltcG9ydCBhYmMKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0eXBlcyBpbXBvcnQgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK2NsYXNzIFByb3BlcnR5QmFzZShFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgUHJvcGVydHlHZXQoUHJvcGVydHlCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFByb3BlcnR5U2V0KFByb3BlcnR5QmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eURlbChQcm9wZXJ0eUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgQmFzZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zcGFtID0gNQorCisgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJCYXNlQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NwYW0gPSB2YWx1ZQorCisgICAgQHNwYW0uZGVsZXRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5fc3BhbQorCitjbGFzcyBTdWJDbGFzcyhCYXNlQ2xhc3MpOgorCisgICAgc3BhbSA9IEJhc2VDbGFzcy5fX2RpY3RfX1snc3BhbSddCisKKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIiU3ViQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJhaXNlIFByb3BlcnR5R2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIFByb3BlcnR5U2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5kZWxldGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgIHJhaXNlIFByb3BlcnR5RGVsKHNlbGYuX3NwYW0pCisKK2NsYXNzIFByb3BlcnR5RG9jQmFzZShvYmplY3QpOgorICAgIF9zcGFtID0gMQorICAgIGRlZiBfZ2V0X3NwYW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisgICAgc3BhbSA9IER5bmFtaWNDbGFzc0F0dHJpYnV0ZShfZ2V0X3NwYW0sIGRvYz0ic3BhbSBzcGFtIHNwYW0iKQorCitjbGFzcyBQcm9wZXJ0eURvY1N1YihQcm9wZXJ0eURvY0Jhc2UpOgorICAgIHNwYW0gPSBQcm9wZXJ0eURvY0Jhc2UuX19kaWN0X19bJ3NwYW0nXQorICAgIEBzcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJUaGUgZGVjb3JhdG9yIGRvZXMgbm90IHVzZSB0aGlzIGRvYyBzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKworY2xhc3MgUHJvcGVydHlTdWJOZXdHZXR0ZXIoQmFzZUNsYXNzKToKKyAgICBzcGFtID0gQmFzZUNsYXNzLl9fZGljdF9fWydzcGFtJ10KKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIibmV3IGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gNQorCitjbGFzcyBQcm9wZXJ0eU5ld0dldHRlcihvYmplY3QpOgorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIib3JpZ2luYWwgZG9jc3RyaW5nIiIiCisgICAgICAgIHJldHVybiAxCisgICAgQHNwYW0uZ2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIm5ldyBkb2NzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIDgKKworY2xhc3MgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjb2xvcigpOgorICAgICAgICBwYXNzCisKK2NsYXNzIENsYXNzV2l0aFByb3BlcnR5QWJzdHJhY3RWaXJ0dWFsKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgY29sb3IoKToKKyAgICAgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBiYXNlID0gQmFzZUNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgNSkKKyAgICAgICAgYmFzZS5zcGFtID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDEwKQorICAgICAgICBkZWxhdHRyKGJhc2UsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKKyAgICAgICAgYmFzZS5zcGFtID0gMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCisgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgbmV3Z2V0dGVyID0gUHJvcGVydHlOZXdHZXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5zcGFtLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5fX2NsYXNzX18uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAibmV3IGRvY3N0cmluZyIpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9fX2lzYWJzdHJhY3RtZXRob2RfX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gKFRydWUsIEZhbHNlLCBbXSwgWzFdLCAnJywgJzEnKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gdmFsCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoQy5fX2RpY3RfX1snZm9vJ10uX19pc2Fic3RyYWN0bWV0aG9kX18sIGJvb2wodmFsKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSdzIF9faXNhYnN0cmFjdG1ldGhvZF9fIGRlc2NyaXB0b3IgZG9lcyB0aGUKKyAgICAgICAgIyByaWdodCB0aGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEgdmFsdWUgdGhhdCBmYWlscyB0cnV0aCB0ZXN0aW5nOgorICAgICAgICBjbGFzcyBOb3RCb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgICAgICBfX2xlbl9fID0gX19ub256ZXJvX18KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gTm90Qm9vbCgpCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0X3ZpcnR1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoUHJvcGVydHlBYnN0cmFjdFZpcnR1YWwpCisgICAgICAgIGNsYXNzIEFQVihDbGFzc1dpdGhQcm9wZXJ0eUFic3RyYWN0VmlydHVhbCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQVBWKQorICAgICAgICBjbGFzcyBBVlAoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEFWUCkKKyAgICAgICAgY2xhc3MgT2theTEoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGNvbG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvcgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbG9yID0gJ2N5YW4nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgT2theTEuY29sb3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChPa2F5MSgpLmNvbG9yLCAnY3lhbicpCisgICAgICAgIGNsYXNzIE9rYXkyKENsYXNzV2l0aEFic3RyYWN0VmlydHVhbFByb3BlcnR5KToKKyAgICAgICAgICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBjb2xvcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29sb3IKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jb2xvciA9ICdtYWdlbnRhJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIE9rYXkyLmNvbG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT2theTIoKS5jb2xvciwgJ21hZ2VudGEnKQorCisKKyMgSXNzdWUgNTg5MDogc3ViY2xhc3NlcyBvZiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZG8gbm90IHByZXNlcnZlIG1ldGhvZCBfX2RvY19fIHN0cmluZ3MKK2NsYXNzIFByb3BlcnR5U3ViKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSIiIgorCitjbGFzcyBQcm9wZXJ0eVN1YlNsb3RzKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSB0aGF0IGRlZmluZXMgX19zbG90c19fIiIiCisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihQcm9wZXJ0eVN1YlNsb3RzLCAnX19kb2NfXycpLAorICAgICAgICAgICAgIl9fZG9jX18gaXMgYWxyZWFkeSBwcmVzZW50LCBfX3Nsb3RzX18gd2lsbCBoYXZlIG5vIGVmZmVjdCIpCisgICAgZGVmIHRlc3Rfc2xvdHNfZG9jc3RyaW5nX2NvcHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgICAgICBAUHJvcGVydHlTdWJTbG90cworICAgICAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJUcnlpbmcgdG8gY29weSB0aGlzIGRvY3N0cmluZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiIiIgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHByaW50KCdcbicsc3BhbS5fX2RvY19fKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9zZXR0ZXJfY29waWVzX2dldHRlcl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLl9zcGFtID0gMQorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKyAgICAgICAgICAgIEBzcGFtLnNldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICIiInRoaXMgZG9jc3RyaW5nIGlzIGlnbm9yZWQiIiIKKyAgICAgICAgICAgICAgICBzZWxmLl9zcGFtID0gdmFsdWUKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uc3BhbSwgMSkKKyAgICAgICAgZm9vLnNwYW0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnNwYW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLAorICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgc3ViY2xhc3MiKQorICAgICAgICBjbGFzcyBGb29TdWIoRm9vKToKKyAgICAgICAgICAgIHNwYW0gPSBGb28uX19kaWN0X19bJ3NwYW0nXQorICAgICAgICAgICAgQHNwYW0uc2V0dGVyCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgIiIiYW5vdGhlciBpZ25vcmVkIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHNlbGYuX3NwYW0gPSAnZWdncycKKyAgICAgICAgZm9vc3ViID0gRm9vU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29zdWIuc3BhbSwgMSkKKyAgICAgICAgZm9vc3ViLnNwYW0gPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vc3ViLnNwYW0sICdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvb1N1Yi5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBzcGFtID0gRm9vQmFzZS5fX2RpY3RfX1snc3BhbSddCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19pbml0X18ucHkKaW5kZXggZjIwNmFjZS4uYTU5Nzc1YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19faW5pdF9fLnB5CkBAIC0xLDMwICsxLDE2IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgZW1haWwKIGZyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgTWVzc2FnZQogZnJvbSBlbWFpbC5fcG9saWN5YmFzZSBpbXBvcnQgY29tcGF0MzIKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKIGZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBfX2ZpbGVfXyBhcyBsYW5kbWFyawogCi0jIFJ1biBhbGwgdGVzdHMgaW4gcGFja2FnZSBmb3IgJy1tIHVuaXR0ZXN0IHRlc3QudGVzdF9lbWFpbCcKLWRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgotICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgIGlmIHBhdHRlcm4gaXMgTm9uZToKLSAgICAgICAgcGF0dGVybiA9ICJ0ZXN0KiIKLSAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuKQotICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCi0gICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCi0KLQotIyB1c2VkIGJ5IHJlZ3J0ZXN0IGFuZCBfX21haW5fXy4KLWRlZiB0ZXN0X21haW4oKToKLSAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICMgVW5pdHRlc3QgbXVja3Mgd2l0aCB0aGUgcGF0aCwgc28gd2UgaGF2ZSB0byBzYXZlIGFuZCByZXN0b3JlCi0gICAgIyBpdCB0byBrZWVwIHJlZ3J0ZXN0IGhhcHB5LgotICAgIHNhdmVwYXRoID0gc3lzLnBhdGhbOl0KLSAgICB0ZXN0LnN1cHBvcnQuX3J1bl9zdWl0ZSh1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5kaXNjb3ZlcihoZXJlKSkKLSAgICBzeXMucGF0aFs6XSA9IHNhdmVwYXRoCisjIExvYWQgYWxsIHRlc3RzIGluIHBhY2thZ2UKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQogCiAKICMgaGVscGVyIGNvZGUgdXNlZCBieSBhIG51bWJlciBvZiB0ZXN0IG1vZHVsZXMuCkBAIC00Miw2ICsyOCw4IEBACiAgICAgIyBoZXJlIHdlIG1ha2UgbWluaW1hbCBjaGFuZ2VzIGluIHRoZSB0ZXN0X2VtYWlsIHRlc3RzIGNvbXBhcmVkIHRvIHRoZWlyCiAgICAgIyBwcmUtMy4zIHN0YXRlLgogICAgIHBvbGljeSA9IGNvbXBhdDMyCisgICAgIyBMaWtld2lzZSwgdGhlIGRlZmF1bHQgbWVzc2FnZSBvYmplY3QgaXMgTWVzc2FnZS4KKyAgICBtZXNzYWdlID0gTWVzc2FnZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprdykKQEAgLTU0LDExICs0MiwyMyBAQAogICAgICAgICB3aXRoIG9wZW5maWxlKGZpbGVuYW1lKSBhcyBmcDoKICAgICAgICAgICAgIHJldHVybiBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCwgcG9saWN5PXNlbGYucG9saWN5KQogCi0gICAgZGVmIF9zdHJfbXNnKHNlbGYsIHN0cmluZywgbWVzc2FnZT1NZXNzYWdlLCBwb2xpY3k9Tm9uZSk6CisgICAgZGVmIF9zdHJfbXNnKHNlbGYsIHN0cmluZywgbWVzc2FnZT1Ob25lLCBwb2xpY3k9Tm9uZSk6CiAgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgogICAgICAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYubWVzc2FnZQogICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhzdHJpbmcsIG1lc3NhZ2UsIHBvbGljeT1wb2xpY3kpCiAKKyAgICBkZWYgX2J5dGVzX21zZyhzZWxmLCBieXRlc3RyaW5nLCBtZXNzYWdlPU5vbmUsIHBvbGljeT1Ob25lKToKKyAgICAgICAgaWYgcG9saWN5IGlzIE5vbmU6CisgICAgICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeQorICAgICAgICBpZiBtZXNzYWdlIGlzIE5vbmU6CisgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5tZXNzYWdlCisgICAgICAgIHJldHVybiBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoYnl0ZXN0cmluZywgbWVzc2FnZSwgcG9saWN5PXBvbGljeSkKKworICAgIGRlZiBfbWFrZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeSkKKwogICAgIGRlZiBfYnl0ZXNfcmVwcihzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIFtyZXByKHgpIGZvciB4IGluIGIuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKV0KIApAQCAtMTIzLDYgKzEyMyw3IEBACiAKICAgICAiIiIKICAgICBwYXJhbWRpY3RzID0ge30KKyAgICB0ZXN0ZXJzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgICBmb3IgbmFtZSwgYXR0ciBpbiBjbHMuX19kaWN0X18uaXRlbXMoKToKICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnX3BhcmFtcycpOgogICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoYXR0ciwgJ2tleXMnKToKQEAgLTEzNCw3ICsxMzUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgZFtuXSA9IHgKICAgICAgICAgICAgICAgICBhdHRyID0gZAogICAgICAgICAgICAgcGFyYW1kaWN0c1tuYW1lWzotN10gKyAnX2FzXyddID0gYXR0cgorICAgICAgICBpZiAnX2FzXycgaW4gbmFtZToKKyAgICAgICAgICAgIHRlc3RlcnNbbmFtZS5zcGxpdCgnX2FzXycpWzBdICsgJ19hc18nXS5hcHBlbmQobmFtZSkKICAgICB0ZXN0ZnVuY3MgPSB7fQorICAgIGZvciBuYW1lIGluIHBhcmFtZGljdHM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHRlc3RlcnM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyB0ZXN0ZXIgZm91bmQgZm9yIHt9Ii5mb3JtYXQobmFtZSkpCisgICAgZm9yIG5hbWUgaW4gdGVzdGVyczoKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gcGFyYW1kaWN0czoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIHBhcmFtcyBmb3VuZCBmb3Ige30iLmZvcm1hdChuYW1lKSkKICAgICBmb3IgbmFtZSwgYXR0ciBpbiBjbHMuX19kaWN0X18uaXRlbXMoKToKICAgICAgICAgZm9yIHBhcmFtc25hbWUsIHBhcmFtc2RpY3QgaW4gcGFyYW1kaWN0cy5pdGVtcygpOgogICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKHBhcmFtc25hbWUpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19tYWluX18ucHkKaW5kZXggOThhZjllYy4uNGIxNGY3NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX21haW5fXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19fbWFpbl9fLnB5CkBAIC0xLDMgKzEsNCBAQAotZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IHRlc3RfbWFpbgorZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAogCi10ZXN0X21haW4oKQordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKaW5kZXggMzI5OTZjYS4uNTQwNGQxOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQpAQCAtMjQ0Myw2ICsyNDQzLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGFkZHJlc3NfbGlzdC5hZGRyZXNzZXNbMV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihhZGRyZXNzX2xpc3QubWFpbGJveGVzWzJdKSkKIAorICAgIGRlZiB0ZXN0X2ludmFsaWRfY29udGVudF9kaXNwb3NpdGlvbihzZWxmKToKKyAgICAgICAgY29udGVudF9kaXNwID0gc2VsZi5fdGVzdF9wYXJzZV94KAorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2NvbnRlbnRfZGlzcG9zaXRpb25faGVhZGVyLAorICAgICAgICAgICAgIjthdHRhY2htZW50IiwgIjsgYXR0YWNobWVudCIsICI7YXR0YWNobWVudCIsCisgICAgICAgICAgICBbZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3RdKjIKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9jb250ZW50X3RyYW5zZmVyX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBjdGUgPSBzZWxmLl90ZXN0X3BhcnNlX3goCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfY29udGVudF90cmFuc2Zlcl9lbmNvZGluZ19oZWFkZXIsCisgICAgICAgICAgICAiO2ZvbyIsICI7Zm9vIiwgIjtmb28iLCBbZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3RdKjMKKyAgICAgICAgKQogCiBAcGFyYW1ldGVyaXplCiBjbGFzcyBUZXN0X3BhcnNlX21pbWVfdmVyc2lvbihUZXN0UGFyc2VyTWl4aW4sIFRlc3RFbWFpbEJhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfY29udGVudG1hbmFnZXIucHkKQEAgLTAsMCArMSw3OTYgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UsIHBhcmFtZXRlcml6ZQoraW1wb3J0IHRleHR3cmFwCitmcm9tIGVtYWlsIGltcG9ydCBwb2xpY3kKK2Zyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgRW1haWxNZXNzYWdlCitmcm9tIGVtYWlsLmNvbnRlbnRtYW5hZ2VyIGltcG9ydCBDb250ZW50TWFuYWdlciwgcmF3X2RhdGFfbWFuYWdlcgorCisKK0BwYXJhbWV0ZXJpemUKK2NsYXNzIFRlc3RDb250ZW50TWFuYWdlcihUZXN0RW1haWxCYXNlKToKKworICAgIHBvbGljeSA9IHBvbGljeS5kZWZhdWx0CisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZ2V0X2tleV9wYXJhbXMgPSB7CisgICAgICAgICdmdWxsX3R5cGUnOiAgICAgICAgKDEsICd0ZXh0L3BsYWluJywpLAorICAgICAgICAnbWFpbnR5cGVfb25seSc6ICAgICgyLCAndGV4dCcsKSwKKyAgICAgICAgJ251bGxfa2V5JzogICAgICAgICAoMywgJycsKSwKKyAgICAgICAgfQorCisgICAgZGVmIGdldF9rZXlfYXNfZ2V0X2NvbnRlbnRfa2V5KHNlbGYsIG9yZGVyLCBrZXkpOgorICAgICAgICBkZWYgZm9vX2dldHRlcihtc2csIGZvbz1Ob25lKToKKyAgICAgICAgICAgIGJhciA9IG1zZ1snWC1CYXItSGVhZGVyJ10KKyAgICAgICAgICAgIHJldHVybiBmb28sIGJhcgorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX2dldF9oYW5kbGVyKGtleSwgZm9vX2dldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgIG1bJ1gtQmFyLUhlYWRlciddID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5nZXRfY29udGVudChtLCBmb289J2JhcicpLCAoJ2JhcicsICdmb28nKSkKKworICAgIGRlZiBnZXRfa2V5X2FzX2dldF9jb250ZW50X2tleV9vcmRlcihzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGJhcl9nZXR0ZXIobXNnKToKKyAgICAgICAgICAgIHJldHVybiBtc2dbJ1gtQmFyLUhlYWRlciddCisgICAgICAgIGRlZiBmb29fZ2V0dGVyKG1zZyk6CisgICAgICAgICAgICByZXR1cm4gbXNnWydYLUZvby1IZWFkZXInXQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX2dldF9oYW5kbGVyKGtleSwgZm9vX2dldHRlcikKKyAgICAgICAgZm9yIHByZWNlZGVuY2UsIGtleSBpbiBzZWxmLmdldF9rZXlfcGFyYW1zLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgcHJlY2VkZW5jZSA+IG9yZGVyOgorICAgICAgICAgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGJhcl9nZXR0ZXIpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtWydYLUJhci1IZWFkZXInXSA9ICdiYXInCisgICAgICAgIG1bJ1gtRm9vLUhlYWRlciddID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5nZXRfY29udGVudChtKSwgKCdmb28nKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3JhaXNlc19pZl91bmtub3duX21pbWV0eXBlX2FuZF9ub19kZWZhdWx0KHNlbGYpOgorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChLZXlFcnJvciwgJ3RleHQvcGxhaW4nKToKKyAgICAgICAgICAgIGNtLmdldF9jb250ZW50KG0pCisKKyAgICBjbGFzcyBCYXNlVGhpbmcoc3RyKToKKyAgICAgICAgcGFzcworICAgIGJhc2VvYmplY3RfZnVsbF9wYXRoID0gX19uYW1lX18gKyAnLicgKyAnVGVzdENvbnRlbnRNYW5hZ2VyLkJhc2VUaGluZycKKyAgICBjbGFzcyBUaGluZyhCYXNlVGhpbmcpOgorICAgICAgICBwYXNzCisgICAgdGVzdG9iamVjdF9mdWxsX3BhdGggPSBfX25hbWVfXyArICcuJyArICdUZXN0Q29udGVudE1hbmFnZXIuVGhpbmcnCisKKyAgICBzZXRfa2V5X3BhcmFtcyA9IHsKKyAgICAgICAgJ3R5cGUnOiAgICAgICAgICAgICAoMCwgIFRoaW5nLCksCisgICAgICAgICdmdWxsX3BhdGgnOiAgICAgICAgKDEsICB0ZXN0b2JqZWN0X2Z1bGxfcGF0aCwpLAorICAgICAgICAncXVhbG5hbWUnOiAgICAgICAgICgyLCAgJ1Rlc3RDb250ZW50TWFuYWdlci5UaGluZycsKSwKKyAgICAgICAgJ25hbWUnOiAgICAgICAgICAgICAoMywgICdUaGluZycsKSwKKyAgICAgICAgJ2Jhc2VfdHlwZSc6ICAgICAgICAoNCwgIEJhc2VUaGluZywpLAorICAgICAgICAnYmFzZV9mdWxsX3BhdGgnOiAgICg1LCAgYmFzZW9iamVjdF9mdWxsX3BhdGgsKSwKKyAgICAgICAgJ2Jhc2VfcXVhbG5hbWUnOiAgICAoNiwgICdUZXN0Q29udGVudE1hbmFnZXIuQmFzZVRoaW5nJywpLAorICAgICAgICAnYmFzZV9uYW1lJzogICAgICAgICg3LCAgJ0Jhc2VUaGluZycsKSwKKyAgICAgICAgJ3N0cl90eXBlJzogICAgICAgICAoOCwgIHN0ciwpLAorICAgICAgICAnc3RyX2Z1bGxfcGF0aCc6ICAgICg5LCAgJ2J1aWx0aW5zLnN0cicsKSwKKyAgICAgICAgJ3N0cl9uYW1lJzogICAgICAgICAoMTAsICdzdHInLCksICAgIyBzdHIgbmFtZSBhbmQgcXVhbG5hbWUgYXJlIHRoZSBzYW1lCisgICAgICAgICdudWxsX2tleSc6ICAgICAgICAgKDExLCBOb25lLCksCisgICAgICAgIH0KKworICAgIGRlZiBzZXRfa2V5X2FzX3NldF9jb250ZW50X2tleShzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19zZXR0ZXIobXNnLCBvYmosIGZvbz1Ob25lKToKKyAgICAgICAgICAgIG1zZ1snWC1Gb28tSGVhZGVyJ10gPSBmb28KKyAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChvYmopCisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBmb29fc2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbXNnX29iaiA9IHNlbGYuVGhpbmcoKQorICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqLCBmb289J2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnWC1Gb28tSGVhZGVyJ10sICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoKSwgbXNnX29iaikKKworICAgIGRlZiBzZXRfa2V5X2FzX3NldF9jb250ZW50X2tleV9vcmRlcihzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19zZXR0ZXIobXNnLCBvYmopOgorICAgICAgICAgICAgbXNnWydYLUZvb0Jhci1IZWFkZXInXSA9ICdmb28nCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQob2JqKQorICAgICAgICBkZWYgYmFyX3NldHRlcihtc2csIG9iaik6CisgICAgICAgICAgICBtc2dbJ1gtRm9vQmFyLUhlYWRlciddID0gJ2JhcicKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9zZXRfaGFuZGxlcihrZXksIGZvb19zZXR0ZXIpCisgICAgICAgIGZvciBwcmVjZWRlbmNlLCBrZXkgaW4gc2VsZi5nZXRfa2V5X3BhcmFtcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByZWNlZGVuY2UgPiBvcmRlcjoKKyAgICAgICAgICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBiYXJfc2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbXNnX29iaiA9IHNlbGYuVGhpbmcoKQorICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1gtRm9vQmFyLUhlYWRlciddLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksIG1zZ19vYmopCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9yYWlzZXNfaWZfdW5rbm93bl90eXBlX2FuZF9ub19kZWZhdWx0KHNlbGYpOgorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEtleUVycm9yLCBzZWxmLnRlc3RvYmplY3RfZnVsbF9wYXRoKToKKyAgICAgICAgICAgIGNtLnNldF9jb250ZW50KG0sIG1zZ19vYmopCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9yYWlzZXNfaWZfY2FsbGVkX29uX211bHRpcGFydChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvZm9vJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbS5zZXRfY29udGVudChtLCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9jYWxsc19jbGVhcl9jb250ZW50KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1Gb28nXSA9ICdiYXInCisgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvaHRtbCcKKyAgICAgICAgbVsnVG8nXSA9ICd0ZXN0JworICAgICAgICBtLnNldF9wYXlsb2FkKCdhYmMnKQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKHN0ciwgbGFtYmRhICphcmdzLCAqKmt3OiBOb25lKQorICAgICAgICBtLnNldF9jb250ZW50KCd4eXonLCBjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1bJ0NvbnRlbnQtRm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1bJ0NvbnRlbnQtVHlwZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1RvJ10sICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobS5nZXRfcGF5bG9hZCgpKQorCisKK0BwYXJhbWV0ZXJpemUKK2NsYXNzIFRlc3RSYXdEYXRhTWFuYWdlcihUZXN0RW1haWxCYXNlKToKKyAgICAjIE5vdGU6IHRoZXNlIHRlc3RzIGFyZSBkZXBlbmRlbnQgb24gdGhlIG9yZGVyIGluIHdoaWNoIGhlYWRlcnMgYXJlIGFkZGVkCisgICAgIyB0byB0aGUgbWVzc2FnZSBvYmplY3RzIGJ5IHRoZSBjb2RlLiAgVGhlcmUncyBubyBkZWZpbmVkIG9yZGVyaW5nIGluCisgICAgIyBSRkM1MzIyL01JTUUsIHNvIHRoaXMgbWFrZXMgdGhlIHRlc3RzIG1vcmUgZnJhZ2lsZSB0aGFuIHRoZSBzdGFuZGFyZHMKKyAgICAjIHJlcXVpcmUuICBIb3dldmVyLCBpZiB0aGUgaGVhZGVyIG9yZGVyIGNoYW5nZXMgaXQgaXMgYmVzdCB0byB1bmRlcnN0YW5kCisgICAgIyAqd2h5KiwgYW5kIG1ha2Ugc3VyZSBpdCBpc24ndCBhIHN1YnRsZSBidWcgaW4gd2hhdGV2ZXIgY2hhbmdlIHdhcworICAgICMgYXBwbGllZC4KKworICAgIHBvbGljeSA9IHBvbGljeS5kZWZhdWx0LmNsb25lKG1heF9saW5lX2xlbmd0aD02MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X21hbmFnZXI9cmF3X2RhdGFfbWFuYWdlcikKKyAgICBtZXNzYWdlID0gRW1haWxNZXNzYWdlCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICBCYXNpYyB0ZXh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCAiQmFzaWMgdGV4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9odG1sKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgPHA+QmFzaWMgdGV4dC48L3A+CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxwPkJhc2ljIHRleHQuPC9wPlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X3BsYWluX2xhdGluMShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX2J5dGVzX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWxhdGluMQorCisgICAgICAgICAgICBCYXPDrGMgdMOreHQuCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnbGF0aW4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9sYXRpbjFfcXVvdGVkX3ByaW50YWJsZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0ibGF0aW4tMSIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgQmFzPUVDYyB0PUVCeHQuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fdXRmOF9iYXNlNjQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0ZjgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgUW1Genc2eGpJSFREcTNoMExnbz0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9iYWRfdXRmOF9xdW90ZWRfcHJpbnRhYmxlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBCYXM9YzM9YWNjIHQ9YzM9YWJ4dD1mZC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc8OsYyB0w6t4dO+/vS5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9iYWRfdXRmOF9xdW90ZWRfcHJpbnRhYmxlX2lnbm9yZV9lcnJvcnMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0ZjgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKyAgICAgICAgICAgIEJhcz1jMz1hY2MgdD1jMz1hYnh0PWZkLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0sIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl91dGY4X2Jhc2U2NF9yZWNvdmVyYWJsZV9iYWRfQ1RFX2RhdGEoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0ZjgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgUW1Genc2eGpJSFREcTNoMExnb1x4RkY9CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZXJyb3JzPSdpZ25vcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzw6xjIHTDq3h0LlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X2ludmFsaWRfa2V5d29yZChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICBCYXNpYyB0ZXh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBmb289J2lnbm9yZScpCisKKyAgICBkZWYgdGVzdF9nZXRfbm9uX3RleHQoc2VsZik6CisgICAgICAgIHRlbXBsYXRlID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZToge30KKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCisgICAgICAgICAgICBZbTluZFhNZ1pHRjBZUT09CisgICAgICAgICAgICAiIiIpCisgICAgICAgIGZvciBtYWludHlwZSBpbiAnYXVkaW8gaW1hZ2UgdmlkZW8gYXBwbGljYXRpb24nLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtYWludHlwZT1tYWludHlwZSk6CisgICAgICAgICAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGVtcGxhdGUuZm9ybWF0KG1haW50eXBlKycvZm9vJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCBiImJvZ3VzIGRhdGEiKQorCisgICAgZGVmIHRlc3RfZ2V0X25vbl90ZXh0X2ludmFsaWRfa2V5d29yZChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgWW05bmRYTWdaR0YwWVE9PQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBlcnJvcnM9J2lnbm9yZScpCisKKyAgICBkZWYgdGVzdF9nZXRfcmFpc2VzX29uX211bHRpcGFydChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZV9yZmM4MjJfYW5kX2V4dGVybmFsX2JvZHkoc2VsZik6CisgICAgICAgIHRlbXBsYXRlID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS97fQorCisgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBGcm9tOiBiYXJAZXhhbXBsZS5jb20KKyAgICAgICAgICAgIFN1YmplY3Q6IGV4YW1wbGUKKworICAgICAgICAgICAgYW4gZXhhbXBsZSBtZXNzYWdlCisgICAgICAgICAgICAiIiIpCisgICAgICAgIGZvciBzdWJ0eXBlIGluICdyZmM4MjIgZXh0ZXJuYWwtYm9keScuc3BsaXQoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHN1YnR5cGU9c3VidHlwZSk6CisgICAgICAgICAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGVtcGxhdGUuZm9ybWF0KHN1YnR5cGUpKQorICAgICAgICAgICAgICAgIHN1Yl9tc2cgPSByYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1Yl9tc2csIHNlbGYubWVzc2FnZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQoc3ViX21zZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW4gZXhhbXBsZSBtZXNzYWdlXG4iKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX21zZ1sndG8nXSwgJ2Zvb0BleGFtcGxlLmNvbScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJfbXNnWydmcm9tJ10uYWRkcmVzc2VzWzBdLnVzZXJuYW1lLCAnYmFyJykKKworICAgIGRlZiB0ZXN0X2dldF9tZXNzYWdlX25vbl9yZmM4MjJfb3JfZXh0ZXJuYWxfYm9keV95aWVsZHNfYnl0ZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2UvcGFydGlhbAorCisgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBGcm9tOiBiYXJAZXhhbXBsZS5jb20KKyAgICAgICAgICAgIFN1YmplY3Q6IGV4YW1wbGUKKworICAgICAgICAgICAgVGhlIHJlYWwgYm9keSBpcyBpbiBhbm90aGVyIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSlbOjEwXSwgYidUbzogZm9vQGV4JykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X3BsYWluKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKS5kZWNvZGUoJ3V0Zi04JyksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X3RleHRfaHRtbChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiPHA+U2ltcGxlIG1lc3NhZ2UuPC9wPlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIHN1YnR5cGU9J2h0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgPHA+U2ltcGxlIG1lc3NhZ2UuPC9wPgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKS5kZWNvZGUoJ3V0Zi04JyksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X3RleHRfY2hhcnNldF9sYXRpbl8xKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBjaGFyc2V0PSdsYXRpbi0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby04ODU5LTEiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKS5kZWNvZGUoJ3V0Zi04JyksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X3RleHRfc2hvcnRfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIMOgIG0nw6l0by5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgZXQgbMOgIGlsIGVzdCBtb250w6kgc3VyIG1vaSBldCBpbCBjb21tZW5jZSDDoCBtJ8OpdG8uCisgICAgICAgICAgICAiIiIpLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKS5kZWNvZGUoJ3V0Zi04JyksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X3RleHRfbG9uZ19saW5lX21pbmltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gKCJqJ2FpIHVuIHByb2Jsw6htZSBkZSBweXRob24uIGlsIGVzdCBzb3J0aSBkZSBzb24iCisgICAgICAgICAgICAgICAgICAgIiB2aXZhcml1bS4gIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2UiCisgICAgICAgICAgICAgICAgICAgIiDDoCBtJ8OpdG8uXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBqJ2FpIHVuIHByb2JsPUMzPUE4bWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIHZpdmFyaT0KKyAgICAgICAgICAgIHVtLiAgZXQgbD1DMz1BMCBpbCBlc3QgbW9udD1DMz1BOSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlID0KKyAgICAgICAgICAgID1DMz1BMCBtJz1DMz1BOXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX2xvbmdfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICdcbicqMTAgKyAoCisgICAgICAgICAgICAgICAgICAiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgIiB2aXZhcml1bS4gIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2UiCisgICAgICAgICAgICAgICAgICAiIMOgIG0nw6l0by5cbiIpCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICAiIiIgKyAnXG4nKjEwICsgIiIiCisgICAgICAgICAgICBqJ2FpIHVuIHByb2JsPUMzPUE4bWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIHZpdmFyaT0KKyAgICAgICAgICAgIHVtLiAgZXQgbD1DMz1BMCBpbCBlc3QgbW9udD1DMz1BOSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlID0KKyAgICAgICAgICAgID1DMz1BMCBtJz1DMz1BOXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X21heGltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIsOhw6DDpMOpw6jEmcO2xZEuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIMOhw6DDpMOpw6jEmcO2xZEuCisgICAgICAgICAgICAiIiIpLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKS5kZWNvZGUoJ3V0Zi04JyksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X3RleHRfMTFfbGluZXNfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAnXG4nKjEwICsgIsOhw6DDpMOpw6jEmcO2xZEuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisgICAgICAgICAgICAiIiIgKyAnXG4nKjEwICsgIiIiCisgICAgICAgICAgICDDocOgw6TDqcOoxJnDtsWRLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2xvbmdfbGluZV9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICgiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkS5cbiIpCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgdzZIRG9NT2t3Nm5EcU1TWnc3YkZrY09odzZERHBNT3B3NmpFbWNPMnhaSERvY09ndzZURHFjT294Sm5ECisgICAgICAgICAgICB0c1dSdzZIRG9NT2t3Nm5EcU1TWnc3YkZrY09odzZERHBNT3B3NmpFbWNPMnhaSERvY09ndzZURHFjT28KKyAgICAgICAgICAgIHhKbkR0c1dSdzZIRG9NT2t3Nm5EcU1TWnc3YkZrY09odzZERHBNT3B3NmpFbWNPMnhaSERvY09ndzZURAorICAgICAgICAgICAgcWNPb3hKbkR0c1dSdzZIRG9NT2t3Nm5EcU1TWnc3YkZrY09odzZERHBNT3B3NmpFbWNPMnhaSERvY09nCisgICAgICAgICAgICB3NlREcWNPb3hKbkR0c1dSTGdvPQorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX2xvbmdfbGluZV9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICAjIFllcywgaXQgY2hvb3NlcyAid3JvbmciIGhlcmUuICBJdCdzIGEgaGV1cmlzdGljLiAgU28gdGhpcyByZXN1bHQKKyAgICAgICAgIyBjb3VsZCBjaGFuZ2UgaWYgd2UgY29tZSB1cCB3aXRoIGEgYmV0dGVyIGhldXJpc3RpYy4KKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAoJ1xuJyoxMCArCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEuXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sICJcbiIqMTAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRLlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICAiIiIgKyAnXG4nKjEwICsgIiIiCisgICAgICAgICAgICA9QzM9QTE9QzM9QTA9QzM9QTQ9QzM9QTk9QzM9QTg9QzQ9OTk9QzM9QjY9QzU9OTE9QzM9QTE9QzM9CisgICAgICAgICAgICA9QTA9QzM9QTQ9QzM9QTk9QzM9QTg9QzQ9OTk9QzM9QjY9QzU9OTE9QzM9QTE9QzM9QTA9QzM9QTQ9CisgICAgICAgICAgICA9QzM9QTk9QzM9QTg9QzQ9OTk9QzM9QjY9QzU9OTE9QzM9QTE9QzM9QTA9QzM9QTQ9QzM9QTk9QzM9CisgICAgICAgICAgICA9QTg9QzQ9OTk9QzM9QjY9QzU9OTE9QzM9QTE9QzM9QTA9QzM9QTQ9QzM9QTk9QzM9QTg9QzQ9OTk9CisgICAgICAgICAgICA9QzM9QjY9QzU9OTE9QzM9QTE9QzM9QTA9QzM9QTQ9QzM9QTk9QzM9QTg9QzQ9OTk9QzM9QjY9QzU9CisgICAgICAgICAgICA9OTE9QzM9QTE9QzM9QTA9QzM9QTQ9QzM9QTk9QzM9QTg9QzQ9OTk9QzM9QjY9QzU9OTE9QzM9QTE9CisgICAgICAgICAgICA9QzM9QTA9QzM9QTQ9QzM9QTk9QzM9QTg9QzQ9OTk9QzM9QjY9QzU9OTE9QzM9QTE9QzM9QTA9QzM9CisgICAgICAgICAgICA9QTQ9QzM9QTk9QzM9QTg9QzQ9OTk9QzM9QjY9QzU9OTE9QzM9QTE9QzM9QTA9QzM9QTQ9QzM9QTk9CisgICAgICAgICAgICA9QzM9QTg9QzQ9OTk9QzM9QjY9QzU9OTE9QzM9QTE9QzM9QTA9QzM9QTQ9QzM9QTk9QzM9QTg9QzQ9CisgICAgICAgICAgICA9OTk9QzM9QjY9QzU9OTE9QzM9QTE9QzM9QTA9QzM9QTQ9QzM9QTk9QzM9QTg9QzQ9OTk9QzM9QjY9CisgICAgICAgICAgICA9QzU9OTEuCisgICAgICAgICAgICAiIiIpLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKS5kZWNvZGUoJ3V0Zi04JyksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X3RleHRfbm9uX2FzY2lpX3dpdGhfY3RlXzdiaXRfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCLDocOgw6TDqcOoxJnDtsWRLlxuIiwgY3RlPSc3Yml0JykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2NoYXJzZXRfYXNjaWlfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCLDocOgw6TDqcOoxJnDtsWRLlxuIiwgY2hhcnNldD0nYXNjaWknKQorCisgICAgZGVmIHRlc3Rfc2V0X3RleHRfbm9uX2FzY2lpX3dpdGhfY3RlXzdiaXRfYW5kX2NoYXJzZXRfYXNjaWlfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCLDocOgw6TDqcOoxJnDtsWRLlxuIiwgY3RlPSc3Yml0JywgY2hhcnNldD0nYXNjaWknKQorCisgICAgZGVmIHRlc3Rfc2V0X21lc3NhZ2Uoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydTdWJqZWN0J10gPSAiRm9yd2FyZGVkIG1lc3NhZ2UiCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50WydUbyddID0gJ3B5dGhvbkB2aXZhcml1bS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ0Zyb20nXSA9ICdwb2xpY2VAbW9udHkub3JnJworICAgICAgICBjb250ZW50WydTdWJqZWN0J10gPSAiZ2V0IGJhY2sgaW4geW91ciBib3giCisgICAgICAgIGNvbnRlbnQuc2V0X2NvbnRlbnQoIk9yIGZhY2UgdGhlIGNvbWZ5IGNoYWlyLiIpCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBTdWJqZWN0OiBGb3J3YXJkZWQgbWVzc2FnZQorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcHl0aG9uQHZpdmFyaXVtLm9yZworICAgICAgICAgICAgRnJvbTogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogZ2V0IGJhY2sgaW4geW91ciBib3gKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBPciBmYWNlIHRoZSBjb21meSBjaGFpci4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHBheWxvYWQgPSBtLmdldF9wYXlsb2FkKDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYXlsb2FkLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHBheWxvYWQpLCBzdHIoY29udGVudCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtLmdldF9jb250ZW50KCksIHNlbGYubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobS5nZXRfY29udGVudCgpKSwgc3RyKGNvbnRlbnQpKQorCisgICAgZGVmIHRlc3Rfc2V0X21lc3NhZ2Vfd2l0aF9ub25fYXNjaWlfYW5kX2NvZXJjaW9uX3RvXzdiaXQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydTdWJqZWN0J10gPSAiRXNjYXBlIHJlcG9ydCIKKyAgICAgICAgY29udGVudCA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnRbJ1RvJ10gPSAncG9saWNlQG1vbnR5Lm9yZycKKyAgICAgICAgY29udGVudFsnRnJvbSddID0gJ3ZpY3RpbUBtb250eS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ1N1YmplY3QnXSA9ICJIZWxwIgorICAgICAgICBjb250ZW50LnNldF9jb250ZW50KCJqJ2FpIHVuIHByb2Jsw6htZSBkZSBweXRob24uIGlsIGVzdCBzb3J0aSBkZSBzb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB2aXZhcml1bS4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBTdWJqZWN0OiBFc2NhcGUgcmVwb3J0CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIFRvOiBwb2xpY2VAbW9udHkub3JnCisgICAgICAgICAgICBGcm9tOiB2aWN0aW1AbW9udHkub3JnCisgICAgICAgICAgICBTdWJqZWN0OiBIZWxwCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIHZpdmFyaXVtLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgICMgVGhlIGNob2ljZSBvZiBiYXNlNjQgZm9yIHRoZSBib2R5IGVuY29kaW5nIGlzIGJlY2F1c2UgZ2VuZXJhdG9yCisgICAgICAgICMgZG9lc24ndCBib3RoZXIgd2l0aCBoZXVyaXN0aWNzIGFuZCB1c2VzIGl0IHVuY29uZGl0aW9uYWxseSBmb3IgdXRmLTgKKyAgICAgICAgIyB0ZXh0LgorICAgICAgICAjIFhYWDogdGhlIGZpcnN0IGN0ZSBzaG91bGQgYmUgN2JpdCwgdG9vLi4udGhhdCdzIGEgZ2VuZXJhdG9yIGJ1Zy4KKyAgICAgICAgIyBYWFg6IHRoZSBsaW5lIGxlbmd0aCBpbiB0aGUgYm9keSBhbHNvIGxvb2tzIGxpa2UgYSBnZW5lcmF0b3IgYnVnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uYXNfc3RyaW5nKG1heGhlYWRlcmxlbj1zZWxmLnBvbGljeS5tYXhfbGluZV9sZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBTdWJqZWN0OiBFc2NhcGUgcmVwb3J0CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIFRvOiBwb2xpY2VAbW9udHkub3JnCisgICAgICAgICAgICBGcm9tOiB2aWN0aW1AbW9udHkub3JnCisgICAgICAgICAgICBTdWJqZWN0OiBIZWxwCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBhaWRoYVNCMWJpQndjbTlpYk1Pb2JXVWdaR1VnY0hsMGFHOXVMaUJwYkNCbGMzUWdjMjl5ZEdrZ1pHVWdjMjl1SUhacGRtRnlhWFZ0CisgICAgICAgICAgICBMZ289CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5nZXRfY29udGVudCgpLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0uZ2V0X2NvbnRlbnQoKSksIHN0cihjb250ZW50KSkKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlX2ludmFsaWRfY3RlX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBmb3IgY3RlIGluICdxdW90ZWQtcHJpbnRhYmxlIGJhc2U2NCcuc3BsaXQoKToKKyAgICAgICAgICAgIGZvciBzdWJ0eXBlIGluICdyZmM4MjIgZXh0ZXJuYWwtYm9keScuc3BsaXQoKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjdGU9Y3RlLCBzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGFyOgorICAgICAgICAgICAgICAgICAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCBzdWJ0eXBlLCBjdGU9Y3RlKQorICAgICAgICAgICAgICAgICAgICBleGMgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGN0ZSwgZXhjKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN1YnR5cGUsIGV4YykKKyAgICAgICAgc3VidHlwZSA9ICdleHRlcm5hbC1ib2R5JworICAgICAgICBmb3IgY3RlIGluICc4Yml0IGJpbmFyeScuc3BsaXQoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGN0ZT1jdGUsIHN1YnR5cGU9c3VidHlwZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgICAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCBzdWJ0eXBlLCBjdGU9Y3RlKQorICAgICAgICAgICAgICAgIGV4YyA9IHN0cihhci5leGNlcHRpb24pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdGUsIGV4YykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN1YnR5cGUsIGV4YykKKworICAgIGRlZiB0ZXN0X3NldF9pbWFnZV9qcGcoc2VsZik6CisgICAgICAgIGZvciBjb250ZW50IGluIChiImJvZ3VzIGNvbnRlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGIiYm9ndXMgY29udGVudCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiImJvZ3VzIGNvbnRlbnQiKSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjb250ZW50PWNvbnRlbnQpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgJ2ltYWdlJywgJ2pwZWcnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZWcKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgICAgICAgICAgWW05bmRYTWdZMjl1ZEdWdWRBPT0KKyAgICAgICAgICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2F1ZGlvX2FpZl93aXRoX3F1b3RlZF9wcmludGFibGVfY3RlKHNlbGYpOgorICAgICAgICAjIFdoeSB5b3Ugd291bGQgdXNlIHFwLCBJIGRvbid0IGtub3csIGJ1dCBpdCBpcyB0ZWNobmljYWxseSBzdXBwb3J0ZWQuCisgICAgICAgICMgWFhYOiB0aGUgaW5jb3JyZWN0IGxpbmUgbGVuZ3RoIGlzIGJlY2F1c2UgYmluYXNjaWkuYjJhX3FwIGRvZXNuJ3QKKyAgICAgICAgIyBzdXBwb3J0IGEgbGluZSBsZW5ndGggcGFyYW1ldGVyLCBidXQgd2UgbXVzdCB1c2UgaXQgdG8gZ2V0IG5ld2xpbmUKKyAgICAgICAgIyBlbmNvZGluZy4KKyAgICAgICAgIyBYWFg6IHdoYXQgYWJvdXQgdGhhdCBsYWNrIG9mIHRhaWxpbmcgbmV3bGluZT8gIERvIHdlIGFjdHVhbGx5IGhhbmRsZQorICAgICAgICAjIHRoYXQgY29ycmVjdGx5IGluIGFsbCBjYXNlcz8gIFRoYXQgaXMsIGlmIHRoZSAqc291cmNlKiBoYXMgYW4KKyAgICAgICAgIyB1bmVuY29kZWQgbmV3bGluZSwgZG8gd2UgYWRkIGFuIGV4dHJhIG5ld2xpbmUgdG8gdGhlIHJldHVybmVkIHBheWxvYWQKKyAgICAgICAgIyBvciBub3Q/ICBBbmQgY2FuIHRoYXQgYWN0dWFsbHkgYmUgZGlzYW1iaWd1YXRlZCBiYXNlZCBvbiB0aGUgUkZDPworICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50ICcgKyBiJ3onKjEwMAorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnQsICdhdWRpbycsICdhaWYnLCBjdGU9J3F1b3RlZC1wcmludGFibGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBhdWRpby9haWYKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgIGI9RkZndXM9MDljb249MEF0PTBEZW50PTIwenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6ej0KKyAgICAgICAgICAgIHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eiIiIikuZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X3ZpZGVvX21wZWdfd2l0aF9iaW5hcnlfY3RlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50ICcgKyBiJ3onKjEwMAorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnQsICd2aWRlbycsICdtcGVnJywgY3RlPSdiaW5hcnknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB2aWRlby9tcGVnCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgICIiIikuZW5jb2RlKCdhc2NpaScpICsKKyAgICAgICAgICAgICMgWFhYOiB0aGUgc2Vjb25kIFxuIG91Z2h0IHRvIGJlIGEgXHIsIGJ1dCBnZW5lcmF0b3IgZ2V0cyBpdCB3cm9uZy4KKyAgICAgICAgICAgICMgVEhJUyBNRUFOUyBXRSBET04nVCBBQ1RVQUxMWSBTVVBQT1JUIFRIRSAnYmluYXJ5JyBDVEUuCisgICAgICAgICAgICBiJ2JceEZGZ3VzXHRjb25cbnRcbmVudCB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonICsKKyAgICAgICAgICAgIGInenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2FwcGxpY2F0aW9uX29jdGV0X3N0cmVhbV93aXRoXzhiaXRfY3RlKHNlbGYpOgorICAgICAgICAjIEluIDhiaXQgbW9kZSwgdW5pdmVyYWwgbGluZSBlbmQgbG9naWMgYXBwbGllcy4gIEl0IGlzIHVwIHRvIHRoZQorICAgICAgICAjIGFwcGxpY2F0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgbGluZXMgYXJlIHNob3J0IGVub3VnaDsgd2UgZG9uJ3QgY2hlY2suCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gYidiXHhGRmd1c1x0Y29uXG50XHJlbnRcbicgKyBiJ3onKjYwICsgYidcbicKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAnYXBwbGljYXRpb24nLCAnb2N0ZXQtc3RyZWFtJywgY3RlPSc4Yml0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSArCisgICAgICAgICAgICBiJ2JceEZGZ3VzXHRjb25cbnRcbmVudFxuJyArCisgICAgICAgICAgICBiJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6elxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc19mcm9tX2hlYWRlcl9vYmplY3RzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIlRvIiwgImZvb0BleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIkZyb20iLCAiZm9vQGV4YW1wbGUuY29tIiksCisgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgiU3ViamVjdCIsICJJJ20gdGFsa2luZyB0byBteXNlbGYuIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBGcm9tOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgIFN1YmplY3Q6IEknbSB0YWxraW5nIHRvIG15c2VsZi4KKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgU2ltcGxlIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfZnJvbV9zdHJpbmdzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICJYLUZvby1IZWFkZXI6IGZvbyIsCisgICAgICAgICAgICAiWC1CYXItSGVhZGVyOiBiYXIiLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIFgtRm9vLUhlYWRlcjogZm9vCisgICAgICAgICAgICBYLUJhci1IZWFkZXI6IGJhcgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc193aXRoX2ludmFsaWRfZHVwbGljYXRlX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdDb250ZW50LVR5cGUnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogZm9vL2JhciIsKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfaW52YWxpZF9kdXBsaWNhdGVfaGVhZGVyX2hlYWRlcl9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIlNpbXBsZSBtZXNzYWdlLlxuIgorICAgICAgICBoZWFkZXJfZmFjdG9yeSA9IHNlbGYucG9saWN5LmhlYWRlcl9mYWN0b3J5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnQ29udGVudC1UeXBlJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJDb250ZW50LVR5cGUiLCAiIGZvby9iYXIiKSwpCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9kZWZlY3RpdmVfc3RyaW5nX2hlYWRlcl9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIlNpbXBsZSBtZXNzYWdlLlxuIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgJ1RvOiBhQGZhaXJseUBAaW52YWxpZEBhZGRyZXNzJywpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcHJpbnQobVsnVG8nXS5kZWZlY3RzKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9kZWZlY3RpdmVfaGVhZGVyX2hlYWRlcl9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIlNpbXBsZSBtZXNzYWdlLlxuIgorICAgICAgICBoZWFkZXJfZmFjdG9yeSA9IHNlbGYucG9saWN5LmhlYWRlcl9mYWN0b3J5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgnVG8nLCAnYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycpLCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBwcmludChtWydUbyddLmRlZmVjdHMpCisKKyAgICBkZWYgdGVzdF9zZXRfZGlzcG9zaXRpb25faW5saW5lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2lubGluZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lJykKKworICAgIGRlZiB0ZXN0X3NldF9kaXNwb3NpdGlvbl9hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2F0dGFjaG1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2F0dGFjaG1lbnQnKQorCisgICAgZGVmIHRlc3Rfc2V0X2Rpc3Bvc2l0aW9uX2ZvbyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2ZvbycpCisKKyAgICAjIFhYWDogd2Ugc2hvdWxkIGhhdmUgYSAnc3RyaWN0JyBwb2xpY3kgbW9kZSAoYmV5b25kIHJhaXNlX29uX2RlZmVjdCkgdGhhdAorICAgICMgd291bGQgY2F1c2UgJ2ZvbycgYWJvdmUgdG8gcmFpc2UuCisKKyAgICBkZWYgdGVzdF9zZXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBmaWxlbmFtZT0nYmFyLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT0iYmFyLnR4dCInKQorCisgICAgZGVmIHRlc3Rfc2V0X2ZpbGVuYW1lX2FuZF9kaXNwb3NpdGlvbl9pbmxpbmUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBkaXNwb3NpdGlvbj0naW5saW5lJywgZmlsZW5hbWU9J2Jhci50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZTsgZmlsZW5hbWU9ImJhci50eHQiJykKKworICAgIGRlZiB0ZXN0X3NldF9ub25fYXNjaWlfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBmaWxlbmFtZT0nw6Fiw6Fyw64udHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OworICAgICAgICAgICAgIGZpbGVuYW1lKj11dGYtOCcnJUMzJUExYiVDMyVBMXIlQzMlQUUudHh0CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBmb28KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCdhc2NpaScpKQorCisgICAgY29udGVudF9vYmplY3RfcGFyYW1zID0geworICAgICAgICAndGV4dF9wbGFpbic6ICgnY29udGVudCcsICgpKSwKKyAgICAgICAgJ3RleHRfaHRtbCc6ICgnY29udGVudCcsICgnaHRtbCcsKSksCisgICAgICAgICdhcHBsaWNhdGlvbl9vY3RldF9zdHJlYW0nOiAoYidjb250ZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2FwcGxpY2F0aW9uJywgJ29jdGV0X3N0cmVhbScpKSwKKyAgICAgICAgJ2ltYWdlX2pwZWcnOiAoYidjb250ZW50JywgKCdpbWFnZScsICdqcGVnJykpLAorICAgICAgICAnbWVzc2FnZV9yZmM4MjInOiAobWVzc2FnZSgpLCAoKSksCisgICAgICAgICdtZXNzYWdlX2V4dGVybmFsX2JvZHknOiAobWVzc2FnZSgpLCAoJ2V4dGVybmFsLWJvZHknLCkpLAorICAgICAgICB9CisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfaGVhZGVyX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgaGVhZGVycz0oCisgICAgICAgICAgICAnVG86IGZvb0BleGFtcGxlLmNvbScsCisgICAgICAgICAgICAnRnJvbTogYmFyQHNpbXBsZS5uZXQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWyd0byddLCAnZm9vQGV4YW1wbGUuY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydmcm9tJ10sICdiYXJAc2ltcGxlLm5ldCcpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfZGlzcG9zaXRpb25faW5saW5lX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgZGlzcG9zaXRpb249J2lubGluZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lJykKKworICAgIGRlZiBjb250ZW50X29iamVjdF9hc19ub25fYXNjaWlfZmlsZW5hbWVfcmVjZWl2ZXIoc2VsZiwgb2JqLCBtaW1ldHlwZSk6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KG9iaiwgKm1pbWV0eXBlLCBkaXNwb3NpdGlvbj0naW5saW5lJywgZmlsZW5hbWU9J2LDoXIudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmU7IGZpbGVuYW1lPSJiw6FyLnR4dCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2ZpbGVuYW1lKCksICJiw6FyLnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLnBhcmFtc1snZmlsZW5hbWUnXSwgImLDoXIudHh0IikKKworICAgIGRlZiBjb250ZW50X29iamVjdF9hc19jaWRfcmVjZWl2ZXIoc2VsZiwgb2JqLCBtaW1ldHlwZSk6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KG9iaiwgKm1pbWV0eXBlLCBjaWQ9J3NvbWVfcmFuZG9tX3N0dWZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LUlEJ10sICdzb21lX3JhbmRvbV9zdHVmZicpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfcGFyYW1zX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgcGFyYW1zID0geydmb28nOiAnYsOhcicsICdhYmMnOiAneHl6J30KKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgcGFyYW1zPXBhcmFtcykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHN0cik6CisgICAgICAgICAgICBwYXJhbXNbJ2NoYXJzZXQnXSA9ICd1dGYtOCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LVR5cGUnXS5wYXJhbXMsIHBhcmFtcykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CmluZGV4IDUxZmU3NTYuLmMzZWNkMGFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC0xMCw2ICsxMCw3IEBACiAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPCiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4KK2Zyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKIAogaW1wb3J0IGVtYWlsCiBpbXBvcnQgZW1haWwucG9saWN5CkBAIC0xMjQsNiArMTI1LDE0IEBACiAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChbXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgW10pCiAKKyAgICBkZWYgdGVzdF9hdHRhY2hfd2hlbl9wYXlsb2FkX2lzX3N0cmluZyhzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L21peGVkJworICAgICAgICBtc2cuc2V0X3BheWxvYWQoJ3N0cmluZyBwYXlsb2FkJykKKyAgICAgICAgc3ViX21zZyA9IE1JTUVNZXNzYWdlKE1lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJbQWFddHRhY2guKm5vbi1tdWx0aXBhcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5hdHRhY2gsIHN1Yl9tc2cpCisKICAgICBkZWYgdGVzdF9nZXRfY2hhcnNldHMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogCkBAIC0yODEsMTUgKzI5MCw0MiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCdUTycsIG1zZykKIAogICAgIGRlZiB0ZXN0X2FzX3N0cmluZyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKICAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgogICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQotICAgICAgICBlcSh0ZXh0LCBzdHIobXNnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzdHIobXNnKSkKICAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfc3RyaW5nKHVuaXhmcm9tPVRydWUpCiAgICAgICAgIGxpbmVzID0gZnVsbHJlcHIuc3BsaXQoJ1xuJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCi0gICAgICAgIGVxKHRleHQsIE5MLmpvaW4obGluZXNbMTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCisKKyAgICBkZWYgdGVzdF9hc19zdHJpbmdfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19zdHJpbmcocG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxyZXByLCBzLmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9hc19ieXRlcyhzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlcyhtc2cpKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyh1bml4ZnJvbT1UcnVlKQorICAgICAgICBsaW5lcyA9IGZ1bGxyZXByLnNwbGl0KGInXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXNbMF0uc3RhcnRzd2l0aChiJ0Zyb20gJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidcbicuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyhwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBzID0gQnl0ZXNJTygpCisgICAgICAgIGcgPSBCeXRlc0dlbmVyYXRvcihzLHBvbGljeT1uZXdwb2xpY3kpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVsbHJlcHIsIHMuZ2V0dmFsdWUoKSkKIAogICAgICMgdGVzdF9oZWFkZXJyZWdpc3RyeS5UZXN0Q29udGVudFR5cGVIZWFkZXIuYmFkX3BhcmFtcwogICAgIGRlZiB0ZXN0X2JhZF9wYXJhbShzZWxmKToKQEAgLTc0Miw4ICs3NzgsMTUgQEAKICAgICAgICAgIyB3aG9zZSBvdXRwdXQgY2hhcmFjdGVyIHNldCBpcyA3Yml0IGdldHMgYSB0cmFuc2Zlci1lbmNvZGluZwogICAgICAgICAjIG9mIDdiaXQuCiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBtc2cgPSBNSU1FVGV4dCgn5paHJywgX2NoYXJzZXQ9J2V1Yy1qcCcpCisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCfmlodcbicsIF9jaGFyc2V0PSdldWMtanAnKQogICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzdiaXQnKQorICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tMjAyMi1qcCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgXHgxYiRCSjhceDFiKEIKKyAgICAgICAgICAgICIiIikpCiAKICAgICBkZWYgdGVzdF9xcF9lbmNvZGVfbGF0aW4xKHNlbGYpOgogICAgICAgICBtc2cgPSBNSU1FVGV4dCgnXHhlMVx4ZjZcbicsICd0ZXh0JywgJ0lTTy04ODU5LTEnKQpAQCAtMzMxMSwxNiArMzM1NCw3MSBAQAogICAgICAgICAgICAgYnNmLnB1c2goaWwpCiAgICAgICAgICAgICBudCArPSBuCiAgICAgICAgICAgICBuMSA9IDAKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgb2wgPSBic2YucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIGlmIG9sID09IE5lZWRNb3JlRGF0YToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZvciBvbCBpbiBpdGVyKGJzZi5yZWFkbGluZSwgTmVlZE1vcmVEYXRhKToKICAgICAgICAgICAgICAgICBvbS5hcHBlbmQob2wpCiAgICAgICAgICAgICAgICAgbjEgKz0gMQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBuMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob20pLCBudCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKFtpbCBmb3IgaWwsIG4gaW4gaW10XSksICcnLmpvaW4ob20pKQogCisgICAgZGVmIHRlc3RfcHVzaF9yYW5kb20oc2VsZik6CisgICAgICAgIGZyb20gZW1haWwuZmVlZHBhcnNlciBpbXBvcnQgQnVmZmVyZWRTdWJGaWxlLCBOZWVkTW9yZURhdGEKKworICAgICAgICBuID0gMTAwMDAKKyAgICAgICAgY2h1bmtzaXplID0gNQorICAgICAgICBjaGFycyA9ICdhYmNkIFx0XHJcbicKKworICAgICAgICBzID0gJycuam9pbihjaG9pY2UoY2hhcnMpIGZvciBpIGluIHJhbmdlKG4pKSArICdcbicKKyAgICAgICAgdGFyZ2V0ID0gcy5zcGxpdGxpbmVzKFRydWUpCisKKyAgICAgICAgYnNmID0gQnVmZmVyZWRTdWJGaWxlKCkKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIGNodW5rc2l6ZSk6CisgICAgICAgICAgICBjaHVuayA9IHNbaTppK2NodW5rc2l6ZV0KKyAgICAgICAgICAgIGJzZi5wdXNoKGNodW5rKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGl0ZXIoYnNmLnJlYWRsaW5lLCBOZWVkTW9yZURhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCB0YXJnZXQpCisKKworY2xhc3MgVGVzdEZlZWRQYXJzZXJzKFRlc3RFbWFpbEJhc2UpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGNodW5rcyk6CisgICAgICAgIGZyb20gZW1haWwuZmVlZHBhcnNlciBpbXBvcnQgRmVlZFBhcnNlcgorICAgICAgICBmZWVkcGFyc2VyID0gRmVlZFBhcnNlcigpCisgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6CisgICAgICAgICAgICBmZWVkcGFyc2VyLmZlZWQoY2h1bmspCisgICAgICAgIHJldHVybiBmZWVkcGFyc2VyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X25ld2xpbmVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6XG5iOlxyYzpcclxuZDpcbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ua2V5cygpLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlxuYjpccmM6XHJcbmQ6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5rZXlzKCksIFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6XHJiJywgJ2M6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmtleXMoKSwgWydhJywgJ2JjJ10pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdiOlxuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5rZXlzKCksIFsnYScsICdiJ10pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdcbmI6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmtleXMoKSwgWydhJywgJ2InXSkKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlx4ODViOlx1MjAyOGM6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksIFsoJ2EnLCAnXHg4NScpLCAoJ2InLCAnXHUyMDI4JyksICgnYycsICcnKV0pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdiOlx4ODUnLCAnYzpcbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICcnKSwgKCdiJywgJ1x4ODUnKSwgKCdjJywgJycpXSkKKworICAgIGRlZiB0ZXN0X2xvbmdfbGluZXMoc2VsZik6CisgICAgICAgICMgRXhwZWN0ZWQgcGVhayBtZW1vcnkgdXNlIG9uIDMyLWJpdCBwbGF0Zm9ybTogNipOKk0gYnl0ZXMuCisgICAgICAgIE0sIE4gPSAxMDAwLCAyMDAwMAorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6YlxuXG4nXSArIFsneCcqTV0gKiBOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICdiJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoKSwgJ3gnKk0qTikKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOmJcclxyJ10gKyBbJ3gnKk1dICogTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksIFsoJ2EnLCAnYicpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksICd4JypNKk4pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpiXHJcciddICsgWyd4JypNKydceDg1J10gKiBOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICdiJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoKSwgKCd4JypNKydceDg1JykqTikKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlxyJywgJ2I6ICddICsgWyd4JypNXSAqIE4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5pdGVtcygpLCBbKCdhJywgJycpLCAoJ2InLCAneCcqTSpOKV0pCiAKIAogY2xhc3MgVGVzdFBhcnNlcnMoVGVzdEVtYWlsQmFzZSk6CkBAIC0zMzQ4LDYgKzM0NDYsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBieXRlcykKIAorICAgIGRlZiB0ZXN0X2J5dGVzX3BhcnNlcl9kb2VzX25vdF9jbG9zZV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW5maWxlKCdtc2dfMDIudHh0JywgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBlbWFpbC5wYXJzZXIuQnl0ZXNQYXJzZXIoKS5wYXJzZShmcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnAuY2xvc2VkKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfcGFyc2VyX29uX2V4Y2VwdGlvbl9kb2VzX25vdF9jbG9zZV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW5maWxlKCdtc2dfMTUudHh0JywgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBieXRlc1BhcnNlciA9IGVtYWlsLnBhcnNlci5CeXRlc1BhcnNlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZW1haWwuZXJyb3JzLlN0YXJ0Qm91bmRhcnlOb3RGb3VuZERlZmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGFyc2VyKHBvbGljeT1lbWFpbC5wb2xpY3kuc3RyaWN0KS5wYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmcC5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfZG9lc19ub3RfY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAyLnR4dCcsICdyJykgYXMgZnA6CisgICAgICAgICAgICBlbWFpbC5wYXJzZXIuUGFyc2VyKCkucGFyc2UoZnApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZwLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9vbl9leGNlcHRpb25fZG9lc19ub3RfY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzE1LnR4dCcsICdyJykgYXMgZnA6CisgICAgICAgICAgICBwYXJzZXIgPSBlbWFpbC5wYXJzZXIuUGFyc2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlbWFpbC5lcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyKHBvbGljeT1lbWFpbC5wb2xpY3kuc3RyaWN0KS5wYXJzZSwgZnApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZwLmNsb3NlZCkKKwogICAgIGRlZiB0ZXN0X3doaXRlc3BhY2VfY29udGludWF0aW9uKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBUaGlzIG1lc3NhZ2UgY29udGFpbnMgYSBsaW5lIGFmdGVyIHRoZSBTdWJqZWN0OiBoZWFkZXIgdGhhdCBoYXMgb25seQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5CmluZGV4IGFkYWYzZTguLjdkNjRhMzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkKQEAgLTY2MSw3ICs2NjEsNyBAQAogICAgICAgICAgICAgJ3RleHQvcGxhaW47IG5hbWU9ImFzY2lpX2lzX3RoZV9kZWZhdWx0IicpLAogCiAgICAgICAgICdyZmMyMjMxX2JhZF9jaGFyYWN0ZXJfaW5fY2hhcnNldF9wYXJhbWV0ZXJfdmFsdWUnOiAoCi0gICAgICAgICAgICAidGV4dC9wbGFpbjsgY2hhcnNldCo9YXNjaWknJ3V0Zi04JUUyJTgwJTlEIiwKKyAgICAgICAgICAgICJ0ZXh0L3BsYWluOyBjaGFyc2V0Kj1hc2NpaScndXRmLTglRjElRjIlRjMiLAogICAgICAgICAgICAgJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgJ3BsYWluJywKQEAgLTY2OSw2ICs2NjksMTggQEAKICAgICAgICAgICAgIFtlcnJvcnMuVW5kZWNvZGFibGVCeXRlc0RlZmVjdF0sCiAgICAgICAgICAgICAndGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLThcdUZGRkRcdUZGRkRcdUZGRkQiJyksCiAKKyAgICAgICAgJ3JmYzIyMzFfdXRmXzhfaW5fc3VwcG9zZWRseV9hc2NpaV9jaGFyc2V0X3BhcmFtZXRlcl92YWx1ZSc6ICgKKyAgICAgICAgICAgICJ0ZXh0L3BsYWluOyBjaGFyc2V0Kj1hc2NpaScndXRmLTglRTIlODAlOUQiLAorICAgICAgICAgICAgJ3RleHQvcGxhaW4nLAorICAgICAgICAgICAgJ3RleHQnLAorICAgICAgICAgICAgJ3BsYWluJywKKyAgICAgICAgICAgIHsnY2hhcnNldCc6ICd1dGYtOOKAnSd9LAorICAgICAgICAgICAgW2Vycm9ycy5VbmRlY29kYWJsZUJ5dGVzRGVmZWN0XSwKKyAgICAgICAgICAgICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOOKAnSInLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICMgWFhYOiBpZiB0aGUgYWJvdmUgd2VyZSAqcmUqZm9sZGVkLCBpdCB3b3VsZCBnZXQgdGFnZ2VkIGFzIHV0Zi04CisgICAgICAgICAgICAjIGluc3RlYWQgb2YgYXNjaWkgaW4gdGhlIHBhcmFtLCBzaW5jZSBpdCBub3cgY29udGFpbnMgbm9uLUFTQ0lJLgorCiAgICAgICAgICdyZmMyMjMxX2VuY29kZWRfdGhlbl91bmVuY29kZWRfc2VnbWVudHMnOiAoCiAgICAgICAgICAgICAoJ2FwcGxpY2F0aW9uL3gtZm9vOycKICAgICAgICAgICAgICAgICAnXHRuYW1lKjAqPSJ1cy1hc2NpaVwnZW4tdXNcJ015IjsnCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5CmluZGV4IDhjYzNmODAuLmM3NjFjNjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5CkBAIC0xLDYgKzEsMTMgQEAKIGltcG9ydCB1bml0dGVzdAotZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Ci1mcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZQoraW1wb3J0IHRleHR3cmFwCitmcm9tIGVtYWlsIGltcG9ydCBwb2xpY3ksIG1lc3NhZ2VfZnJvbV9zdHJpbmcKK2Zyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgRW1haWxNZXNzYWdlLCBNSU1FUGFydAorZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UsIHBhcmFtZXRlcml6ZQorCisKKyMgSGVscGVyLgorZGVmIGZpcnN0KGl0ZXJhYmxlKToKKyAgICByZXR1cm4gbmV4dChmaWx0ZXIobGFtYmRhIHg6IHggaXMgbm90IE5vbmUsIGl0ZXJhYmxlKSwgTm9uZSkKIAogCiBjbGFzcyBUZXN0KFRlc3RFbWFpbEJhc2UpOgpAQCAtMTMsNiArMjAsNzUzIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBtWydUbyddID0gJ3h5ekBhYmMnCiAKKyAgICBkZWYgdGVzdF9yZmMyMDQzX2F1dG9fZGVjb2RlZF9hbmRfZW1haWxtZXNzYWdlX3VzZWQoc2VsZik6CisgICAgICAgIG0gPSBtZXNzYWdlX2Zyb21fc3RyaW5nKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBTdWJqZWN0OiBBeW9ucyBhc3BlcmdlcyBwb3VyIGxlID0/dXRmLTg/cT9kPUMzPUE5amV1bmVyPz0KKyAgICAgICAgICAgIEZyb206ID0/dXRmLTg/cT9QZXA9QzM9QTk/PSBMZSBQZXcgPHBlcGVAZXhhbXBsZS5jb20+CisgICAgICAgICAgICBUbzogIlBlbmVsb3BlIFB1c3N5Y2F0IiA8InBlbmVsb3BlQGV4YW1wbGUuY29tIj4KKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCisgICAgICAgICAgICBzYW1wbGUgdGV4dAorICAgICAgICAgICAgIiIiKSwgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ3N1YmplY3QnXSwgIkF5b25zIGFzcGVyZ2VzIHBvdXIgbGUgZMOpamV1bmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydmcm9tJ10sICJQZXDDqSBMZSBQZXcgPHBlcGVAZXhhbXBsZS5jb20+IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0sIEVtYWlsTWVzc2FnZSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0RW1haWxNZXNzYWdlQmFzZToKKworICAgIHBvbGljeSA9IHBvbGljeS5kZWZhdWx0CisKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHRyaXBsZSAocmVsYXRlZCwgaHRtbCwgcGxhaW4pIG9mIGluZGljZXMgaW50byB0aGUKKyAgICAjIGxpc3QgcmV0dXJuZWQgYnkgJ3dhbGsnIGNhbGxlZCBvbiBhIE1lc3NhZ2UgY29uc3RydWN0ZWQgZnJvbSB0aGUgdGhpcmQuCisgICAgIyBUaGUgaW5kaWNlcyBpbmRpY2F0ZSB3aGljaCBwYXJ0IHNob3VsZCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBwYXJ0LXR5cGUKKyAgICAjIHdoZW4gcGFzc2VkIHRvIGdldF9ib2R5IChpZTogdGhlICJmaXJzdCIgcGFydCBvZiB0aGF0IHR5cGUgaW4gdGhlCisgICAgIyBtZXNzYWdlKS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGluZGljZXMgaW50byB0aGUgJ3dhbGsnIGxpc3QKKyAgICAjIG9mIHRoZSBhdHRhY2htZW50cyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBieSBhIGNhbGwgdG8KKyAgICAjICdpdGVyX2F0dGFjaG1lbnRzJy4gIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2YgaW5kaWNlcyBpbnRvICd3YWxrJworICAgICMgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYSBjYWxsIHRvICdpdGVyX3BhcnRzJy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QKKyAgICAjIGl0ZW0gcmV0dXJuZWQgYnkgJ3dhbGsnIGlzIHRoZSBNZXNzYWdlIGl0c2VsZi4KKworICAgIG1lc3NhZ2VfcGFyYW1zID0geworCisgICAgICAgICdlbXB0eV9tZXNzYWdlJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIDApLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICIiKSwKKworICAgICAgICAnbm9uX21pbWVfcGxhaW4nOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgdGV4dCBib2R5CisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21pbWVfbm9uX3RleHQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworCisgICAgICAgICAgICAgICAgYm9ndXMgYm9keS4KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9hbHRlcm5hdGl2ZSc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX2F0dGFjaG1lbnRfbWl4ZWQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdodG1sX3RleHRfYXR0YWNobWVudF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCBOb25lKSwKKyAgICAgICAgICAgICgxLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdFRhQ2htZW50CisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ2h0bWxfdGV4dF9hdHRhY2htZW50X2lubGluZV9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogSW5MaW5lCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBSRkMgMjM4NworICAgICAgICAncmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgwLCAxLCBOb25lKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT0iOyB0eXBlPXRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMT4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGRhdGEKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFRoaXMgbWVzc2FnZSBzdHJ1Y3R1cmUgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBzZWVuIGluIHRoZSB3aWxkLCBidXQKKyAgICAgICAgIyBpdCBwcm92ZXMgd2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0ZXh0IHBhcnRzIGJhc2VkIG9uICdzdGFydCcuICBUaGUKKyAgICAgICAgIyBjb250ZW50IHdvdWxkIG5vdCwgb2YgY291cnNlLCBhY3R1YWxseSB3b3JrIDopCisgICAgICAgICdyZWxhdGVkX3dpdGhfc3RhcnQnOiAoCisgICAgICAgICAgICAoMCwgMiwgTm9uZSksCisgICAgICAgICAgICAoMSwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iPT09IjsgdHlwZT10ZXh0L2h0bWw7CisgICAgICAgICAgICAgICAgIHN0YXJ0PSI8Ym9keT4iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGluY2x1ZGU+CisKKyAgICAgICAgICAgICAgICB1c2VsZXNzIHRleHQKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8Ym9keT4KKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIDwhLS0jaW5jbHVkZSBmaWxlPSI8aW5jbHVkZT4iLS0+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKworICAgICAgICAnbWl4ZWRfYWx0ZXJuYXRpdmVfcGxhaW5fcmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgzLCA0LCAyKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxQGNpZD4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdHRhY0htZW5UCisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBUaGlzIHN0cnVjdHVyZSBzdWdnZXN0ZWQgYnkgU3RlcGhlbiBKLiBUdXJuYnVsbC4uLm1heSBub3QgZXhpc3QvYmUKKyAgICAgICAgIyBzdXBwb3J0ZWQgaW4gdGhlIHdpbGQsIGJ1dCB3ZSB3YW50IHRvIHN1cHBvcnQgaXQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWwnOiAoCisgICAgICAgICAgICAoMSwgNCwgMyksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMUBjaWQ+CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgU2FtZSB0aGluZywgYnV0IHByb3Zpbmcgd2Ugb25seSBsb29rIGF0IHRoZSByb290IHBhcnQsIHdoaWNoIGlzIHRoZQorICAgICAgICAjIGZpcnN0IG9uZSBpZiB0aGVyZSBpc24ndCBhbnkgc3RhcnQgcGFyYW1ldGVyLiAgVGhhdCBpcywgdGhpcyBpcyBhCisgICAgICAgICMgYnJva2VuIHJlbGF0ZWQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWxfd3Jvbmdfb3JkZXInOiAoCisgICAgICAgICAgICAoMSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTFAY2lkPgorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS1fX18tLQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdtZXNzYWdlX3JmYzgyMic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKworICAgICAgICAgICAgICAgIFRvOiBiYXJAZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBGcm9tOiByb2JvdEBleGFtcC5jb20KKworICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBtZXNzYWdlIGJvZHkuCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21peGVkX3RleHRfbWVzc2FnZV9yZmM4MjInOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBZb3VyIG1lc3NhZ2UgaGFzIGJvdW5jZWQsIHNlci4KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorCisgICAgICAgICAgICAgICAgVG86IGJhckBleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIEZyb206IHJvYm90QGV4YW1wLmNvbQorCisgICAgICAgICAgICAgICAgdGhpcyBpcyBhIG1lc3NhZ2UgYm9keS4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAgfQorCisgICAgZGVmIG1lc3NhZ2VfYXNfZ2V0X2JvZHkoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbTm9uZSBpZiBuIGlzIE5vbmUgZWxzZSBhbGxwYXJ0c1tuXSBmb3IgbiBpbiBib2R5X3BhcnRzXQorICAgICAgICByZWxhdGVkID0gMDsgaHRtbCA9IDE7IHBsYWluID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkoKSwgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbcmVsYXRlZDpodG1sKzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdwbGFpbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcmVsYXRlZF0sIGV4cGVjdGVkW3BsYWluXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3BsYWluJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW2h0bWw6cGxhaW4rMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydyZWxhdGVkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3JlbGF0ZWRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydodG1sJ10pLCBleHBlY3RlZFtodG1sXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PVsncGxhaW4nXSksIGV4cGVjdGVkW3BsYWluXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtwbGFpbjpodG1sLTE6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcGxhaW5dLCBleHBlY3RlZFtyZWxhdGVkXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbaHRtbDo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkWzo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcsICdwbGFpbicsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtodG1sXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbcGxhaW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtyZWxhdGVkXV0pKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfaXRlcl9hdHRhY2htZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBhbGxwYXJ0cyA9IGxpc3QobS53YWxrKCkpCisgICAgICAgIGF0dGFjaG1lbnRzID0gW2FsbHBhcnRzW25dIGZvciBuIGluIGF0dGFjaG1lbnRzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX2F0dGFjaG1lbnRzKCkpLCBhdHRhY2htZW50cykKKworICAgIGRlZiBtZXNzYWdlX2FzX2l0ZXJfcGFydHMoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgcGFydHMgPSBbYWxscGFydHNbbl0gZm9yIG4gaW4gcGFydHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfcGFydHMoKSksIHBhcnRzKQorCisgICAgY2xhc3MgX1Rlc3RDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZywgYXJncywga3cKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYua3cgPSBrdworCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfd2l0aF9jbShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgY29udGVudF9tYW5hZ2VyPWNtLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X2RlZmF1bHRfY21fY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIHAgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShjb250ZW50X21hbmFnZXI9c2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkpCisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnLCBwb2xpY3k9cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF93aXRoX2NtKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIHt9KQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBjb250ZW50X21hbmFnZXI9Y20sIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZGVmYXVsdF9jbV9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBwID0gcG9saWN5LmRlZmF1bHQuY2xvbmUoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJywgcG9saWN5PXApCisgICAgICAgIG0uc2V0X2NvbnRlbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywge30pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgIyBvdXRjb21lIGlzIHdoZXRoZXIgeHh4X21ldGhvZCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBlcnJvciB3aGVuIGNhbGxlZAorICAgICMgb24gbXVsdGlwYXJ0L3N1YnR5cGUuICBCbGFuayBvdXRjb21lIG1lYW5zIGl0IGRlcGVuZHMgb24geHh4IChhZGQKKyAgICAjIHN1Y2NlZWRzLCBtYWtlIHJhaXNlcykuICBOb3RlOiAnbm9uZScgbWVhbnMgdGhlcmUgYXJlIGNvbnRlbnQtdHlwZQorICAgICMgaGVhZGVycyBidXQgcGF5bG9hZCBpcyBOb25lLi4udGhpcyBoYXBwZW5pbmcgaW4gcHJhY3RpY2Ugd291bGQgYmUgdmVyeQorICAgICMgdW51c3VhbCwgc28gdHJlYXRpbmcgaXQgYXMgaWYgdGhlcmUgd2VyZSBjb250ZW50IHNlZW1zIHJlYXNvbmFibGUuCisgICAgIyAgICBtZXRob2QgICAgICAgICAgc3VidHlwZSAgICAgICAgICAgb3V0Y29tZQorICAgIHN1YnR5cGVfcGFyYW1zID0gKAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdyZWxhdGVkJywgICAgICAgICcnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnYWx0ZXJuYXRpdmUnLCAgICAncmFpc2VzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ21peGVkJywgICAgICAgICAgJ3JhaXNlcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdyZWxhdGVkJywgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdhbHRlcm5hdGl2ZScsICAgICcnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAnbWl4ZWQnLCAgICAgICAgICAncmFpc2VzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3JlbGF0ZWQnLCAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ2FsdGVybmF0aXZlJywgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ21peGVkJywgICAgICAgICAgJycpLAorICAgICAgICApCisKKyAgICBkZWYgX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc2VsZiwgc3VidHlwZSk6CisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UoKQorICAgICAgICBwYXlsb2FkID0gTm9uZQorICAgICAgICBtc2dfaGVhZGVycyA9ICBbCisgICAgICAgICAgICAoJ1RvJywgJ2Zvb0BiYXIuY29tJyksCisgICAgICAgICAgICAoJ0Zyb20nLCAnYmFyQGZvby5jb20nKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaWYgc3VidHlwZSAhPSAnbm9fY29udGVudCc6CisgICAgICAgICAgICAoJ2NvbnRlbnQtc2hhZG93JywgJ0xvZ3J1cycpLAorICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdYLVJhbmRvbS1IZWFkZXInLCAnQ29yd2luJykpCisgICAgICAgIGlmIHN1YnR5cGUgPT0gJ3RleHQnOgorICAgICAgICAgICAgcGF5bG9hZCA9ICcnCisgICAgICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpKQorICAgICAgICAgICAgbS5zZXRfcGF5bG9hZCgnJykKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHBheWxvYWQgPSBbXQorICAgICAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnQ29udGVudC1UeXBlJywgJ211bHRpcGFydC8nICsgc3VidHlwZSkpCisgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ1gtVHJ1bXAnLCAnUmFuZG9tJykpCisgICAgICAgIG0uc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgbVtuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiBtLCBtc2dfaGVhZGVycywgcGF5bG9hZAorCisgICAgZGVmIF9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKHNlbGYsIG0sIG1ldGhvZF9uYW1lLCBzdWJ0eXBlLCBtZXRob2QpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGFyOgorICAgICAgICAgICAgZ2V0YXR0cihtLCBtZXRob2QpKCkKKyAgICAgICAgZXhjX3RleHQgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEluKHN1YnR5cGUsIGV4Y190ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1ldGhvZF9uYW1lLCBleGNfdGV4dCkKKworICAgIGRlZiBfY2hlY2tfbWFrZV9tdWx0aXBhcnQoc2VsZiwgbSwgbXNnX2hlYWRlcnMsIHBheWxvYWQpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgaWYgbm90IG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgY291bnQrMSkgIyArMSBmb3IgbmV3IENvbnRlbnQtVHlwZQorICAgICAgICBwYXJ0ID0gbmV4dChtLml0ZXJfcGFydHMoKSkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydFtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXJ0KSwgY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfcGF5bG9hZCgpLCBwYXlsb2FkKQorCisgICAgZGVmIHN1YnR5cGVfYXNfbWFrZShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgbWFrZV9tZXRob2QgPSAnbWFrZV8nICsgbWV0aG9kCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKG0sIG1ldGhvZCwgc3VidHlwZSwgbWFrZV9tZXRob2QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZ2V0YXR0cihtLCBtYWtlX21ldGhvZCkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ211bHRpcGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9zdWJ0eXBlKCksIG1ldGhvZCkKKyAgICAgICAgaWYgc3VidHlwZSA9PSAnbm9fY29udGVudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmdldF9wYXlsb2FkKCkpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19oZWFkZXJzICsgWygnQ29udGVudC1UeXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXBhcnQvJyttZXRob2QpXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX21ha2Vfd2l0aF9ib3VuZGFyeShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICAjIERvaW5nIGFsbCB2YXJpYXRpb24gaXMgYSBiaXQgb2Ygb3ZlcmtpbGwuLi4KKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZSgpCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgZ2V0YXR0cihtLCAnbWFrZV8nICsgbWV0aG9kKSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc3VidHlwZSA9PSAncGxhaW4nOgorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICBnZXRhdHRyKG0sICdtYWtlXycgKyBtZXRob2QpKGJvdW5kYXJ5PSJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib3VuZGFyeSgpLCAnYWJjJykKKworICAgIGRlZiB0ZXN0X3BvbGljeV9vbl9wYXJ0X21hZGVfYnlfbWFrZV9jb21lc19mcm9tX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdtYWtlX3JlbGF0ZWQnLCAnbWFrZV9hbHRlcm5hdGl2ZScsICdtYWtlX21peGVkJyk6CisgICAgICAgICAgICBtID0gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeS5jbG9uZShjb250ZW50X21hbmFnZXI9J2ZvbycpKQorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgICAgIGdldGF0dHIobSwgbWV0aG9kKSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoMCkucG9saWN5LmNvbnRlbnRfbWFuYWdlciwgJ2ZvbycpCisKKyAgICBjbGFzcyBfVGVzdFNldENvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBjb250ZW50LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoY29udGVudCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX2FkZChzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0U2V0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBhZGRfbWV0aG9kID0gJ2FkZF9hdHRhY2htZW50JyBpZiBtZXRob2Q9PSdtaXhlZCcgZWxzZSAnYWRkXycgKyBtZXRob2QKKyAgICAgICAgaWYgb3V0Y29tZSA9PSAncmFpc2VzJzoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMobSwgbWV0aG9kLCBzdWJ0eXBlLCBhZGRfbWV0aG9kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGdldGF0dHIobSwgYWRkX21ldGhvZCkoJ3Rlc3QnLCBjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbXVsdGlwYXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X3N1YnR5cGUoKSwgbWV0aG9kKQorICAgICAgICBpZiBtZXRob2QgPT0gc3VidHlwZSBvciBzdWJ0eXBlID09ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X3BheWxvYWQoKSwgJ3Rlc3QnKQorICAgICAgICBpZiBtZXRob2Q9PSdtaXhlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2F0dGFjaG1lbnQnKQorICAgICAgICBlbGlmIG1ldGhvZD09J3JlbGF0ZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPdGhlcndpc2Ugd2UgZG9uJ3QgZ3Vlc3MuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10pCisKKyAgICBjbGFzcyBfVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgY29udGVudCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29udGVudF9tYW5hZ2VyX2Zvcl9hZGRfY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIGNtID0gc2VsZi5fVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UocG9saWN5PXNlbGYucG9saWN5LmNsb25lKGNvbnRlbnRfbWFuYWdlcj1jbSkpCisgICAgICAgIGZvciBtZXRob2QgaW4gKCdhZGRfcmVsYXRlZCcsICdhZGRfYWx0ZXJuYXRpdmUnLCAnYWRkX2F0dGFjaG1lbnQnKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBhcjoKKyAgICAgICAgICAgICAgICBnZXRhdHRyKG0sIG1ldGhvZCkoJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhci5leGNlcHRpb24pLCAndGVzdCcpCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcihzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgbS5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVtcygpKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcl9jb250ZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBleHBlY3RlZF9oZWFkZXJzID0gW2ggZm9yIGggaW4gbS5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaC5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyldCisgICAgICAgIG0uY2xlYXJfY29udGVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLmtleXMoKSksIGV4cGVjdGVkX2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgdGVzdF9pc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLmlzX2F0dGFjaG1lbnQpCisgICAgICAgIG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICdpbmxpbmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ0F0VGFjaE1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorCisKKworY2xhc3MgVGVzdEVtYWlsTWVzc2FnZShUZXN0RW1haWxNZXNzYWdlQmFzZSwgVGVzdEVtYWlsQmFzZSk6CisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfYWRkc19NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ01JTUUtVmVyc2lvbiddLCAnMS4wJykKKworICAgIGNsYXNzIF9NSU1FX1ZlcnNpb25fYWRkaW5nX0NNOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2R1cGxpY2F0ZV9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX01JTUVfVmVyc2lvbl9hZGRpbmdfQ00oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydNSU1FLVZlcnNpb24nXSwgJzEuMCcpCisKKworY2xhc3MgVGVzdE1JTUVQYXJ0KFRlc3RFbWFpbE1lc3NhZ2VCYXNlLCBUZXN0RW1haWxCYXNlKToKKyAgICAjIERvaW5nIHRoZSBmdWxsIHRlc3QgcnVuIGhlcmUgbWF5IHNlZW0gYSBiaXQgcmVkdW5kYW50LCBzaW5jZSB0aGUgdHdvCisgICAgIyBjbGFzc2VzIGFyZSBhbG1vc3QgaWRlbnRpY2FsLiAgQnV0IHdoYXQgaWYgdGhleSBkcmlmdCBhcGFydD8gIFNvIHdlIGRvCisgICAgIyB0aGUgZnVsbCB0ZXN0cyBzbyB0aGF0IGFueSBmdXR1cmUgZHJpZnQgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4KKyAgICBtZXNzYWdlID0gTUlNRVBhcnQKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2FkZF9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQppbmRleCA5ODNiZDQ5Li5lNzk3ZjM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKQEAgLTMwLDYgKzMwLDcgQEAKICAgICAgICAgJ3JhaXNlX29uX2RlZmVjdCc6ICAgICAgICAgIEZhbHNlLAogICAgICAgICAnaGVhZGVyX2ZhY3RvcnknOiAgICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmhlYWRlcl9mYWN0b3J5LAogICAgICAgICAncmVmb2xkX3NvdXJjZSc6ICAgICAgICAgICAgJ2xvbmcnLAorICAgICAgICAnY29udGVudF9tYW5hZ2VyJzogICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlciwKICAgICAgICAgfSkKIAogICAgICMgRm9yIGVhY2ggcG9saWN5IHVuZGVyIHRlc3QsIHdlIGdpdmUgaGVyZSB3aGF0IHdlIGV4cGVjdCB0aGUgZGVmYXVsdHMgdG8KQEAgLTMxOCw1ICszMTksMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKCksICJTdWJqZWN0OiB0ZXN0WFRvOiBmb29YWCIpCiAKIAorY2xhc3MgVGVzdENvbmNyZXRlUG9saWNpZXModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaGVhZGVyX3N0b3JlX3BhcnNlX3JlamVjdHNfbmV3bGluZXMoc2VsZik6CisgICAgICAgIGluc3RhbmNlID0gZW1haWwucG9saWN5LkVtYWlsUG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuaGVhZGVyX3N0b3JlX3BhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJvbScsICdzcGFtXG5lZ2dAZm9vLnB5JykKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3RvcnR1cmVfdGVzdC5weQppbmRleCA1NDRiMWJiLi4xOWNmNjRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3RvcnR1cmVfdGVzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3RvcnR1cmVfdGVzdC5weQpAQCAtMjcsNyArMjcsNyBAQAogIyBQcmV2ZW50IHRoaXMgdGVzdCBmcm9tIHJ1bm5pbmcgaW4gdGhlIFB5dGhvbiBkaXN0cm8KIHRyeToKICAgICBvcGVuZmlsZSgnY3Jpc3Bpbi10b3J0dXJlLnR4dCcpCi1leGNlcHQgSU9FcnJvcjoKK2V4Y2VwdCBPU0Vycm9yOgogICAgIHJhaXNlIFRlc3RTa2lwcGVkCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnN1cmVwaXAucHkgYi9MaWIvdGVzdC90ZXN0X2Vuc3VyZXBpcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTkxNjhlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnN1cmVwaXAucHkKQEAgLTAsMCArMSwzNDUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgc3lzCisKK2ltcG9ydCBlbnN1cmVwaXAKK2ltcG9ydCBlbnN1cmVwaXAuX3VuaW5zdGFsbAorCisjIHBpcCBjdXJyZW50bHkgcmVxdWlyZXMgc3NsIHN1cHBvcnQsIHNvIHdlIGVuc3VyZSB3ZSBoYW5kbGUKKyMgaXQgYmVpbmcgbWlzc2luZyAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzQ0KQorZW5zdXJlcGlwX25vX3NzbCA9IHRlc3Quc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJlbnN1cmVwaXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrZWQ9WyJzc2wiXSkKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZGVmIHJlcXVpcmVzX3VzYWJsZV9waXAoZik6CisgICAgICAgIGRlY28gPSB1bml0dGVzdC5za2lwKGVuc3VyZXBpcC5fTUlTU0lOR19TU0xfTUVTU0FHRSkKKyAgICAgICAgcmV0dXJuIGRlY28oZikKK2Vsc2U6CisgICAgZGVmIHJlcXVpcmVzX3VzYWJsZV9waXAoZik6CisgICAgICAgIHJldHVybiBmCisKK2NsYXNzIFRlc3RFbnN1cmVQaXBWZXJzaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JldHVybnNfdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnN1cmVwaXAuX1BJUF9WRVJTSU9OLCBlbnN1cmVwaXAudmVyc2lvbigpKQorCitjbGFzcyBFbnN1cmVwaXBNaXhpbjoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcnVuX3BpcF9wYXRjaCA9IHVuaXR0ZXN0Lm1vY2sucGF0Y2goImVuc3VyZXBpcC5fcnVuX3BpcCIpCisgICAgICAgIHNlbGYucnVuX3BpcCA9IHJ1bl9waXBfcGF0Y2guc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocnVuX3BpcF9wYXRjaC5zdG9wKQorCisgICAgICAgICMgQXZvaWQgc2lkZSBlZmZlY3RzIG9uIHRoZSBhY3R1YWwgb3MgbW9kdWxlCisgICAgICAgIHJlYWxfZGV2bnVsbCA9IG9zLmRldm51bGwKKyAgICAgICAgb3NfcGF0Y2ggPSB1bml0dGVzdC5tb2NrLnBhdGNoKCJlbnN1cmVwaXAub3MiKQorICAgICAgICBwYXRjaGVkX29zID0gb3NfcGF0Y2guc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3NfcGF0Y2guc3RvcCkKKyAgICAgICAgcGF0Y2hlZF9vcy5kZXZudWxsID0gcmVhbF9kZXZudWxsCisgICAgICAgIHBhdGNoZWRfb3MucGF0aCA9IG9zLnBhdGgKKyAgICAgICAgc2VsZi5vc19lbnZpcm9uID0gcGF0Y2hlZF9vcy5lbnZpcm9uID0gb3MuZW52aXJvbi5jb3B5KCkKKworCitjbGFzcyBUZXN0Qm9vdHN0cmFwKEVuc3VyZXBpcE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jhc2ljX2Jvb3RzdHJhcHBpbmcoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgICAgICBhZGRpdGlvbmFsX3BhdGhzID0gc2VsZi5ydW5fcGlwLmNhbGxfYXJnc1swXVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhZGRpdGlvbmFsX3BhdGhzKSwgMikKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3Jvb3Qoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAocm9vdD0iL2Zvby9iYXIvIikKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1yb290IiwgIi9mb28vYmFyLyIsCisgICAgICAgICAgICAgICAgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdXNlcihzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh1c2VyPVRydWUpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tdXNlciIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3VwZ3JhZGUoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAodXBncmFkZT1UcnVlKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXVwZ3JhZGUiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF92ZXJib3NpdHlfMShzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh2ZXJib3NpdHk9MSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLXYiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF92ZXJib3NpdHlfMihzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh2ZXJib3NpdHk9MikKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLXZ2IiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdmVyYm9zaXR5XzMoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAodmVyYm9zaXR5PTMpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi12dnYiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF9yZWd1bGFyX2luc3RhbGwoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3NfZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSwgImluc3RhbGwiKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfYWx0X2luc3RhbGwoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoYWx0aW5zdGFsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3NfZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSwgImFsdGluc3RhbGwiKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfZGVmYXVsdF9waXAoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoZGVmYXVsdF9waXA9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiRU5TVVJFUElQX09QVElPTlMiLCBzZWxmLm9zX2Vudmlyb24pCisKKyAgICBkZWYgdGVzdF9hbHRpbnN0YWxsX2RlZmF1bHRfcGlwX2NvbmZsaWN0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChhbHRpbnN0YWxsPVRydWUsIGRlZmF1bHRfcGlwPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfcGlwX2Vudmlyb25tZW50X3ZhcmlhYmxlc19yZW1vdmVkKHNlbGYpOgorICAgICAgICAjIGVuc3VyZXBpcCBkZWxpYmVyYXRlbHkgaWdub3JlcyBhbGwgcGlwIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MzQgZm9yIGRldGFpbHMKKyAgICAgICAgc2VsZi5vc19lbnZpcm9uWyJQSVBfVEhJU19TSE9VTERfR09fQVdBWSJdID0gInRlc3QgZm9kZGVyIgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUElQX1RISVNfU0hPVUxEX0dPX0FXQVkiLCBzZWxmLm9zX2Vudmlyb24pCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3BpcF9jb25maWdfZmlsZV9kaXNhYmxlZChzZWxmKToKKyAgICAgICAgIyBlbnN1cmVwaXAgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlIHBpcCBjb25maWcgZmlsZQorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAwNTMgZm9yIGRldGFpbHMKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vc19lbnZpcm9uWyJQSVBfQ09ORklHX0ZJTEUiXSwgb3MuZGV2bnVsbCkKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBmYWtlX3BpcCh2ZXJzaW9uPWVuc3VyZXBpcC5fUElQX1ZFUlNJT04pOgorICAgIGlmIHZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgcGlwID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIGNsYXNzIEZha2VQaXAoKToKKyAgICAgICAgICAgIF9fdmVyc2lvbl9fID0gdmVyc2lvbgorICAgICAgICBwaXAgPSBGYWtlUGlwKCkKKyAgICBzZW50aW5lbCA9IG9iamVjdCgpCisgICAgb3JpZ19waXAgPSBzeXMubW9kdWxlcy5nZXQoInBpcCIsIHNlbnRpbmVsKQorICAgIHN5cy5tb2R1bGVzWyJwaXAiXSA9IHBpcAorICAgIHRyeToKKyAgICAgICAgeWllbGQgcGlwCisgICAgZmluYWxseToKKyAgICAgICAgaWYgb3JpZ19waXAgaXMgc2VudGluZWw6CisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbInBpcCJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMubW9kdWxlc1sicGlwIl0gPSBvcmlnX3BpcAorCitjbGFzcyBUZXN0VW5pbnN0YWxsKEVuc3VyZXBpcE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfc2tpcHBlZF93aGVuX25vdF9pbnN0YWxsZWQoc2VsZik6CisgICAgICAgIHdpdGggZmFrZV9waXAoTm9uZSk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucnVuX3BpcC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfc2tpcHBlZF93aXRoX3dhcm5pbmdfZm9yX3dyb25nX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHdpdGggZmFrZV9waXAoIm5vdCBhIHZhbGlkIHZlcnNpb24iKToKKyAgICAgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIoKQorICAgICAgICB3YXJuaW5nID0gc3RkZXJyLmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJvbmx5IHVuaW5zdGFsbCBhIG1hdGNoaW5nIHZlcnNpb24iLCB3YXJuaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucnVuX3BpcC5jYWxsZWQpCisKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfdW5pbnN0YWxsKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIoKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsidW5pbnN0YWxsIiwgIi15IiwgInBpcCIsICJzZXR1cHRvb2xzIl0KKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfd2l0aF92ZXJib3NpdHlfMShzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKHZlcmJvc2l0eT0xKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsidW5pbnN0YWxsIiwgIi15IiwgIi12IiwgInBpcCIsICJzZXR1cHRvb2xzIl0KKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfd2l0aF92ZXJib3NpdHlfMihzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKHZlcmJvc2l0eT0yKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsidW5pbnN0YWxsIiwgIi15IiwgIi12diIsICJwaXAiLCAic2V0dXB0b29scyJdCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfdW5pbnN0YWxsX3dpdGhfdmVyYm9zaXR5XzMoc2VsZik6CisgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcih2ZXJib3NpdHk9MykKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbInVuaW5zdGFsbCIsICIteSIsICItdnZ2IiwgInBpcCIsICJzZXR1cHRvb2xzIl0KKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9waXBfZW52aXJvbm1lbnRfdmFyaWFibGVzX3JlbW92ZWQoc2VsZik6CisgICAgICAgICMgZW5zdXJlcGlwIGRlbGliZXJhdGVseSBpZ25vcmVzIGFsbCBwaXAgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTczNCBmb3IgZGV0YWlscworICAgICAgICBzZWxmLm9zX2Vudmlyb25bIlBJUF9USElTX1NIT1VMRF9HT19BV0FZIl0gPSAidGVzdCBmb2RkZXIiCisgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlBJUF9USElTX1NIT1VMRF9HT19BV0FZIiwgc2VsZi5vc19lbnZpcm9uKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9waXBfY29uZmlnX2ZpbGVfZGlzYWJsZWQoc2VsZik6CisgICAgICAgICMgZW5zdXJlcGlwIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZSBwaXAgY29uZmlnIGZpbGUKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwMDUzIGZvciBkZXRhaWxzCisgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vc19lbnZpcm9uWyJQSVBfQ09ORklHX0ZJTEUiXSwgb3MuZGV2bnVsbCkKKworCitjbGFzcyBUZXN0TWlzc2luZ1NTTChFbnN1cmVwaXBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzeXMubW9kdWxlc1siZW5zdXJlcGlwIl0gPSBlbnN1cmVwaXBfbm9fc3NsCisgICAgICAgIEBzZWxmLmFkZENsZWFudXAKKyAgICAgICAgZGVmIHJlc3RvcmVfbW9kdWxlKCk6CisgICAgICAgICAgICBzeXMubW9kdWxlc1siZW5zdXJlcGlwIl0gPSBlbnN1cmVwaXAKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBfcmVxdWlyZXNfc3NsKHNlbGYpOgorICAgICAgICBzZWxmLm9zX2Vudmlyb25bIlBJUF9USElTX1NIT1VMRF9TVEFZIl0gPSAidGVzdCBmb2RkZXIiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsICJyZXF1aXJlcyBTU0wvVExTIik6CisgICAgICAgICAgICBlbnN1cmVwaXBfbm9fc3NsLmJvb3RzdHJhcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUElQX1RISVNfU0hPVUxEX1NUQVkiLCBzZWxmLm9zX2Vudmlyb24pCisKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfcmVxdWlyZXNfc3NsKHNlbGYpOgorICAgICAgICBzZWxmLm9zX2Vudmlyb25bIlBJUF9USElTX1NIT1VMRF9TVEFZIl0gPSAidGVzdCBmb2RkZXIiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsICJyZXF1aXJlcyBTU0wvVExTIik6CisgICAgICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICAgICAgZW5zdXJlcGlwX25vX3NzbC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUElQX1RISVNfU0hPVUxEX1NUQVkiLCBzZWxmLm9zX2Vudmlyb24pCisKKyAgICBkZWYgdGVzdF9tYWluX2V4aXRzX2Vhcmx5X3dpdGhfd2FybmluZyhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgZW5zdXJlcGlwX25vX3NzbC5fbWFpbihbIi0tdmVyc2lvbiJdKQorICAgICAgICB3YXJuaW5nID0gc3RkZXJyLmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FybmluZy5lbmRzd2l0aCgicmVxdWlyZXMgU1NML1RMUyIpLCB3YXJuaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucnVuX3BpcC5jYWxsZWQpCisKKyMgQmFzaWMgdGVzdGluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbnMgYW5kIHRoZWlyIGFyZ3VtZW50IHBhcnNpbmcKKworRVhQRUNURURfVkVSU0lPTl9PVVRQVVQgPSAicGlwICIgKyBlbnN1cmVwaXAuX1BJUF9WRVJTSU9OCisKK2NsYXNzIFRlc3RCb290c3RyYXBwaW5nTWFpbkZ1bmN0aW9uKEVuc3VyZXBpcE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcF92ZXJzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIGVuc3VyZXBpcC5fbWFpbihbIi0tdmVyc2lvbiJdKQorICAgICAgICByZXN1bHQgPSBzdGRvdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBFWFBFQ1RFRF9WRVJTSU9OX09VVFBVVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnJ1bl9waXAuY2FsbGVkKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9iYXNpY19ib290c3RyYXBwaW5nKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuX21haW4oW10pCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBzZWxmLnJ1bl9waXAuY2FsbF9hcmdzWzBdWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFkZGl0aW9uYWxfcGF0aHMpLCAyKQorCitjbGFzcyBUZXN0VW5pbnN0YWxsYXRpb25NYWluRnVuY3Rpb24oRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF92ZXJzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsLl9tYWluKFsiLS12ZXJzaW9uIl0pCisgICAgICAgIHJlc3VsdCA9IHN0ZG91dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIEVYUEVDVEVEX1ZFUlNJT05fT1VUUFVUKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucnVuX3BpcC5jYWxsZWQpCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jhc2ljX3VuaW5zdGFsbChzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGwuX21haW4oW10pCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWyJ1bmluc3RhbGwiLCAiLXkiLCAicGlwIiwgInNldHVwdG9vbHMiXQorICAgICAgICApCisKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VudW0ucHkgYi9MaWIvdGVzdC90ZXN0X2VudW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmODA2MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZW51bS5weQpAQCAtMCwwICsxLDE1OTIgQEAKK2ltcG9ydCBlbnVtCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IHB5ZG9jCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIGVudW0gaW1wb3J0IEVudW0sIEludEVudW0sIEVudW1NZXRhLCB1bmlxdWUKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHBpY2tsZSBpbXBvcnQgZHVtcHMsIGxvYWRzLCBQaWNrbGluZ0Vycm9yLCBISUdIRVNUX1BST1RPQ09MCisKKyMgZm9yIHBpY2tsZSB0ZXN0cwordHJ5OgorICAgIGNsYXNzIFN0b29nZXMoRW51bSk6CisgICAgICAgIExBUlJZID0gMQorICAgICAgICBDVVJMWSA9IDIKKyAgICAgICAgTU9FID0gMworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgU3Rvb2dlcyA9IGV4YworCit0cnk6CisgICAgY2xhc3MgSW50U3Rvb2dlcyhpbnQsIEVudW0pOgorICAgICAgICBMQVJSWSA9IDEKKyAgICAgICAgQ1VSTFkgPSAyCisgICAgICAgIE1PRSA9IDMKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEludFN0b29nZXMgPSBleGMKKwordHJ5OgorICAgIGNsYXNzIEZsb2F0U3Rvb2dlcyhmbG9hdCwgRW51bSk6CisgICAgICAgIExBUlJZID0gMS4zOQorICAgICAgICBDVVJMWSA9IDIuNzIKKyAgICAgICAgTU9FID0gMy4xNDI1OTYKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEZsb2F0U3Rvb2dlcyA9IGV4YworCisjIGZvciBwaWNrbGUgdGVzdCBhbmQgc3ViY2xhc3MgdGVzdHMKK3RyeToKKyAgICBjbGFzcyBTdHJFbnVtKHN0ciwgRW51bSk6CisgICAgICAgICdhY2NlcHRzIG9ubHkgc3RyaW5nIHZhbHVlcycKKyAgICBjbGFzcyBOYW1lKFN0ckVudW0pOgorICAgICAgICBCREZMID0gJ0d1aWRvIHZhbiBSb3NzdW0nCisgICAgICAgIEZMVUZMID0gJ0JhcnJ5IFdhcnNhdycKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIE5hbWUgPSBleGMKKwordHJ5OgorICAgIFF1ZXN0aW9uID0gRW51bSgnUXVlc3Rpb24nLCAnd2hvIHdoYXQgd2hlbiB3aGVyZSB3aHknLCBtb2R1bGU9X19uYW1lX18pCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBRdWVzdGlvbiA9IGV4YworCit0cnk6CisgICAgQW5zd2VyID0gRW51bSgnQW5zd2VyJywgJ2hpbSB0aGlzIHRoZW4gdGhlcmUgYmVjYXVzZScpCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBBbnN3ZXIgPSBleGMKKwordHJ5OgorICAgIFRoZW9yeSA9IEVudW0oJ1RoZW9yeScsICdydWxlIGxhdyBzdXBwb3NpdGlvbicsIHF1YWxuYW1lPSdzcGFuaXNoX2lucXVpc2l0aW9uJykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIFRoZW9yeSA9IGV4YworCisjIGZvciBkb2N0ZXN0cwordHJ5OgorICAgIGNsYXNzIEZydWl0KEVudW0pOgorICAgICAgICB0b21hdG8gPSAxCisgICAgICAgIGJhbmFuYSA9IDIKKyAgICAgICAgY2hlcnJ5ID0gMworZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBwYXNzCisKK2RlZiB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoYXNzZXJ0aW9uLCBzb3VyY2UsIHRhcmdldD1Ob25lLAorICAgICAgICAqLCBwcm90b2NvbD0oMCwgSElHSEVTVF9QUk9UT0NPTCkpOgorICAgIHN0YXJ0LCBzdG9wID0gcHJvdG9jb2wKKyAgICBpZiB0YXJnZXQgaXMgTm9uZToKKyAgICAgICAgdGFyZ2V0ID0gc291cmNlCisgICAgZm9yIHByb3RvY29sIGluIHJhbmdlKHN0YXJ0LCBzdG9wKzEpOgorICAgICAgICBhc3NlcnRpb24obG9hZHMoZHVtcHMoc291cmNlLCBwcm90b2NvbD1wcm90b2NvbCkpLCB0YXJnZXQpCisKK2RlZiB0ZXN0X3BpY2tsZV9leGNlcHRpb24oYXNzZXJ0aW9uLCBleGNlcHRpb24sIG9iaiwKKyAgICAgICAgKiwgcHJvdG9jb2w9KDAsIEhJR0hFU1RfUFJPVE9DT0wpKToKKyAgICBzdGFydCwgc3RvcCA9IHByb3RvY29sCisgICAgZm9yIHByb3RvY29sIGluIHJhbmdlKHN0YXJ0LCBzdG9wKzEpOgorICAgICAgICB3aXRoIGFzc2VydGlvbihleGNlcHRpb24pOgorICAgICAgICAgICAgZHVtcHMob2JqLCBwcm90b2NvbD1wcm90b2NvbCkKKworY2xhc3MgVGVzdEhlbHBlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgX2lzX2Rlc2NyaXB0b3IsIF9pc19zdW5kZXIsIF9pc19kdW5kZXIKKworICAgIGRlZiB0ZXN0X2lzX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGNsYXNzIGZvbzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGF0dHIgaW4gKCdfX2dldF9fJywnX19zZXRfXycsJ19fZGVsZXRlX18nKToKKyAgICAgICAgICAgIG9iaiA9IGZvbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVudW0uX2lzX2Rlc2NyaXB0b3Iob2JqKSkKKyAgICAgICAgICAgIHNldGF0dHIob2JqLCBhdHRyLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX2Rlc2NyaXB0b3Iob2JqKSkKKworICAgIGRlZiB0ZXN0X2lzX3N1bmRlcihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCdfYV8nLCAnX2FhXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX3N1bmRlcihzKSkKKworICAgICAgICBmb3IgcyBpbiAoJ2EnLCAnYV8nLCAnX2EnLCAnX19hJywgJ2FfXycsICdfX2FfXycsICdfYV9fJywgJ19fYV8nLCAnXycsCisgICAgICAgICAgICAgICAgJ19fJywgJ19fXycsICdfX19fJywgJ19fX19fJywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnVtLl9pc19zdW5kZXIocykpCisKKyAgICBkZWYgdGVzdF9pc19kdW5kZXIoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnX19hX18nLCAnX19hYV9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZW51bS5faXNfZHVuZGVyKHMpKQorICAgICAgICBmb3IgcyBpbiAoJ2EnLCAnYV8nLCAnX2EnLCAnX19hJywgJ2FfXycsICdfYV8nLCAnX2FfXycsICdfX2FfJywgJ18nLAorICAgICAgICAgICAgICAgICdfXycsICdfX18nLCAnX19fXycsICdfX19fXycsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW51bS5faXNfZHVuZGVyKHMpKQorCisKK2NsYXNzIFRlc3RFbnVtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgV0lOVEVSID0gNAorICAgICAgICBzZWxmLlNlYXNvbiA9IFNlYXNvbgorCisgICAgICAgIGNsYXNzIEtvbnN0YW50cyhmbG9hdCwgRW51bSk6CisgICAgICAgICAgICBFID0gMi43MTgyODE4CisgICAgICAgICAgICBQSSA9IDMuMTQxNTkyNgorICAgICAgICAgICAgVEFVID0gMiAqIFBJCisgICAgICAgIHNlbGYuS29uc3RhbnRzID0gS29uc3RhbnRzCisKKyAgICAgICAgY2xhc3MgR3JhZGVzKEludEVudW0pOgorICAgICAgICAgICAgQSA9IDUKKyAgICAgICAgICAgIEIgPSA0CisgICAgICAgICAgICBDID0gMworICAgICAgICAgICAgRCA9IDIKKyAgICAgICAgICAgIEYgPSAwCisgICAgICAgIHNlbGYuR3JhZGVzID0gR3JhZGVzCisKKyAgICAgICAgY2xhc3MgRGlyZWN0aW9uYWwoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIEVBU1QgPSAnZWFzdCcKKyAgICAgICAgICAgIFdFU1QgPSAnd2VzdCcKKyAgICAgICAgICAgIE5PUlRIID0gJ25vcnRoJworICAgICAgICAgICAgU09VVEggPSAnc291dGgnCisgICAgICAgIHNlbGYuRGlyZWN0aW9uYWwgPSBEaXJlY3Rpb25hbAorCisgICAgICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUKKyAgICAgICAgY2xhc3MgSG9saWRheShkYXRlLCBFbnVtKToKKyAgICAgICAgICAgIE5FV19ZRUFSID0gMjAxMywgMSwgMQorICAgICAgICAgICAgSURFU19PRl9NQVJDSCA9IDIwMTMsIDMsIDE1CisgICAgICAgIHNlbGYuSG9saWRheSA9IEhvbGlkYXkKKworICAgIGRlZiB0ZXN0X2Rpcl9vbl9jbGFzcyhzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNldChkaXIoU2Vhc29uKSksCisgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJywKKyAgICAgICAgICAgICAgICAnU1BSSU5HJywgJ1NVTU1FUicsICdBVVRVTU4nLCAnV0lOVEVSJ10pLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZGlyX29uX2l0ZW0oc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZXQoZGlyKFNlYXNvbi5XSU5URVIpKSwKKyAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLCAnbmFtZScsICd2YWx1ZSddKSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Rpcl93aXRoX2FkZGVkX2JlaGF2aW9yKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KEVudW0pOgorICAgICAgICAgICAgdGhpcyA9ICd0aGF0JworICAgICAgICAgICAgdGhlc2UgPSAndGhvc2UnCisgICAgICAgICAgICBkZWYgd293c2VyKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoIldvd3NlciEgSSdtICVzISIgJSBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2V0KGRpcihUZXN0KSksCisgICAgICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXycsICd0aGlzJywgJ3RoZXNlJ10pLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZXQoZGlyKFRlc3QudGhpcykpLAorICAgICAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLCAnbmFtZScsICd2YWx1ZScsICd3b3dzZXInXSksCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZW51bV9pbl9lbnVtX291dChzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTZWFzb24oU2Vhc29uLldJTlRFUiksIFNlYXNvbi5XSU5URVIpCisKKyAgICBkZWYgdGVzdF9lbnVtX3ZhbHVlKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5TUFJJTkcudmFsdWUsIDEpCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEludFN0b29nZXMuQ1VSTFkudmFsdWUsIDIpCisKKyAgICBkZWYgdGVzdF9lbnVtKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBsc3QgPSBsaXN0KFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFNlYXNvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFNlYXNvbiksIDQsIFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFtTZWFzb24uU1BSSU5HLCBTZWFzb24uU1VNTUVSLCBTZWFzb24uQVVUVU1OLCBTZWFzb24uV0lOVEVSXSwgbHN0KQorCisgICAgICAgIGZvciBpLCBzZWFzb24gaW4gZW51bWVyYXRlKCdTUFJJTkcgU1VNTUVSIEFVVFVNTiBXSU5URVInLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFNlYXNvbihpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBnZXRhdHRyKFNlYXNvbiwgc2Vhc29uKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS52YWx1ZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBzZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUsIFNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnU2Vhc29uLicgKyBzZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXByKGUpLAorICAgICAgICAgICAgICAgICAgICAnPFNlYXNvbi57MH06IHsxfT4nLmZvcm1hdChzZWFzb24sIGkpLAorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF92YWx1ZV9uYW1lKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5TUFJJTkcubmFtZSwgJ1NQUklORycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU2Vhc29uLlNQUklORy52YWx1ZSwgMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBTZWFzb24uU1BSSU5HLm5hbWUgPSAnaW52aWVybm8nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORy52YWx1ZSA9IDIKKworICAgIGRlZiB0ZXN0X2NoYW5naW5nX21lbWJlcihzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBTZWFzb24uV0lOVEVSID0gJ3JlYWxseSBjb2xkJworCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2RlbGV0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBTZWFzb24oRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBTVU1NRVIgPSAyCisgICAgICAgICAgICBBVVRVTU4gPSAzCisgICAgICAgICAgICBXSU5URVIgPSA0CisKKyAgICAgICAgICAgIGRlZiBzcGFtKGNscyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKFNlYXNvbiwgJ3NwYW0nKSkKKyAgICAgICAgZGVsIFNlYXNvbi5zcGFtCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihTZWFzb24sICdzcGFtJykpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgU2Vhc29uLlNQUklORworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBTZWFzb24uRFJZCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFNlYXNvbi5TUFJJTkcubmFtZQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9uYW1lcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIG1ybyA9IDkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9jcmVhdGVfPSAxMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgV3JvbmcoRW51bSk6CisgICAgICAgICAgICAgICAgX2dldF9taXhpbnNfID0gOQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgV3JvbmcoRW51bSk6CisgICAgICAgICAgICAgICAgX2ZpbmRfbmV3XyA9IDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9hbnlfbmFtZV8gPSA5CisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRJbihTZWFzb24uQVVUVU1OLCBTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMywgU2Vhc29uKQorCisgICAgICAgIHZhbCA9IFNlYXNvbigzKQorICAgICAgICBzZWxmLmFzc2VydEluKHZhbCwgU2Vhc29uKQorCisgICAgICAgIGNsYXNzIE90aGVyRW51bShFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDE7IHR3byA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihPdGhlckVudW0udHdvLCBTZWFzb24pCisKKyAgICBkZWYgdGVzdF9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORyA8IFNlYXNvbi5XSU5URVIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORyA+IDQKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFNlYXNvbi5TUFJJTkcsIDEpCisKKyAgICAgICAgY2xhc3MgUGFydChFbnVtKToKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgICAgIENMSVAgPSAyCisgICAgICAgICAgICBCQVJSRUwgPSAzCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChTZWFzb24uU1BSSU5HLCBQYXJ0LlNQUklORykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORyA8IFBhcnQuQ0xJUAorCisgICAgZGVmIHRlc3RfZW51bV9kdXBsaWNhdGVzKHNlbGYpOgorICAgICAgICBjbGFzcyBTZWFzb24oRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBTVU1NRVIgPSAyCisgICAgICAgICAgICBBVVRVTU4gPSBGQUxMID0gMworICAgICAgICAgICAgV0lOVEVSID0gNAorICAgICAgICAgICAgQU5PVEhFUl9TUFJJTkcgPSAxCisgICAgICAgIGxzdCA9IGxpc3QoU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgW1NlYXNvbi5TUFJJTkcsIFNlYXNvbi5TVU1NRVIsCisgICAgICAgICAgICAgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLldJTlRFUiwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uLkZBTEwsIFNlYXNvbi5BVVRVTU4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU2Vhc29uLkZBTEwudmFsdWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU2Vhc29uLkFVVFVNTi52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTZWFzb24oMyksIFNlYXNvbi5BVVRVTU4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKDEpLCBTZWFzb24uU1BSSU5HKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5GQUxMLm5hbWUsICdBVVRVTU4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtrIGZvciBrLHYgaW4gU2Vhc29uLl9fbWVtYmVyc19fLml0ZW1zKCkgaWYgdi5uYW1lICE9IGtdLAorICAgICAgICAgICAgICAgIFsnRkFMTCcsICdBTk9USEVSX1NQUklORyddLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9uYW1lKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgICAgICByZWQgPSA0CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICAgICAgZGVmIHJlZChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdyZWQnCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICAgICAgZGVmIHJlZChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdyZWRkZXInCisgICAgICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgICAgIGJsdWUgPSAzCisKKworICAgIGRlZiB0ZXN0X2VudW1fd2l0aF92YWx1ZV9uYW1lKHNlbGYpOgorICAgICAgICBjbGFzcyBIdWgoRW51bSk6CisgICAgICAgICAgICBuYW1lID0gMQorICAgICAgICAgICAgdmFsdWUgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBsaXN0KEh1aCksCisgICAgICAgICAgICBbSHVoLm5hbWUsIEh1aC52YWx1ZV0sCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShIdWgubmFtZSksIEh1aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIdWgubmFtZS5uYW1lLCAnbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHVoLm5hbWUudmFsdWUsIDEpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAne30nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCAnezp9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICd7On0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7OjIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7OjIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6XjIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7Ol4yMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Oj4yMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezo+MjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo8MjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6PDIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9jdXN0b20oc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RGbG9hdChmbG9hdCwgRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxLjAKKyAgICAgICAgICAgIHR3byA9IDIuMAorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdUZXN0RmxvYXQgc3VjY2VzcyEnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9Jy5mb3JtYXQoVGVzdEZsb2F0Lm9uZSksICdUZXN0RmxvYXQgc3VjY2VzcyEnKQorCisgICAgZGVmIGFzc2VydEZvcm1hdElzVmFsdWUoc2VsZiwgc3BlYywgbWVtYmVyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmZvcm1hdChtZW1iZXIpLCBzcGVjLmZvcm1hdChtZW1iZXIudmFsdWUpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fZGF0ZShzZWxmKToKKyAgICAgICAgSG9saWRheSA9IHNlbGYuSG9saWRheQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3t9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Ol4yMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OiVZICVtfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OiVZICVtICVNOjAwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2Zsb2F0KHNlbGYpOgorICAgICAgICBLb25zdGFudHMgPSBzZWxmLktvbnN0YW50cworICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3t9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Ol4yMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Om59JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjUuMn0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6Zn0nLCBLb25zdGFudHMuVEFVKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1faW50KHNlbGYpOgorICAgICAgICBHcmFkZXMgPSBzZWxmLkdyYWRlcworICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3t9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBHcmFkZXMuQykKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Ol4yMH0nLCBHcmFkZXMuQykKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBHcmFkZXMuQykKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBHcmFkZXMuQykKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oit9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezowOFh9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpifScsIEdyYWRlcy5DKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fc3RyKHNlbGYpOgorICAgICAgICBEaXJlY3Rpb25hbCA9IHNlbGYuRGlyZWN0aW9uYWwKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIERpcmVjdGlvbmFsLldFU1QpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBkYXRlcyA9IHt9CisgICAgICAgIGRhdGVzW1NlYXNvbi5XSU5URVJdID0gJzEyMjUnCisgICAgICAgIGRhdGVzW1NlYXNvbi5TUFJJTkddID0gJzAzMTUnCisgICAgICAgIGRhdGVzW1NlYXNvbi5TVU1NRVJdID0gJzA3MDQnCisgICAgICAgIGRhdGVzW1NlYXNvbi5BVVRVTU5dID0gJzEwMzEnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXNbU2Vhc29uLkFVVFVNTl0sICcxMDMxJykKKworICAgIGRlZiB0ZXN0X2ludGVudW1fZnJvbV9zY3JhdGNoKHNlbGYpOgorICAgICAgICBjbGFzcyBwaHkoaW50LCBFbnVtKToKKyAgICAgICAgICAgIHBpID0gMworICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3RfaW50ZW51bV9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEludEVudW0oaW50LCBFbnVtKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgcGh5KEludEVudW0pOgorICAgICAgICAgICAgcGkgPSAzCisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9mbG9hdGVudW1fZnJvbV9zY3JhdGNoKHNlbGYpOgorICAgICAgICBjbGFzcyBwaHkoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgcGkgPSAzLjE0MTU5MjYKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0ZW51bV9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZsb2F0RW51bShmbG9hdCwgRW51bSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHBoeShGbG9hdEVudW0pOgorICAgICAgICAgICAgcGkgPSAzLjE0MTU5MjYKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X3N0cmVudW1fZnJvbV9zY3JhdGNoKHNlbGYpOgorICAgICAgICBjbGFzcyBwaHkoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHBpID0gJ1BpJworICAgICAgICAgICAgdGF1ID0gJ1RhdScKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9zdHJlbnVtX2luaGVyaXRlZChzZWxmKToKKyAgICAgICAgY2xhc3MgU3RyRW51bShzdHIsIEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBwaHkoU3RyRW51bSk6CisgICAgICAgICAgICBwaSA9ICdQaScKKyAgICAgICAgICAgIHRhdSA9ICdUYXUnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBXZWVrRGF5KEludEVudW0pOgorICAgICAgICAgICAgU1VOREFZID0gMQorICAgICAgICAgICAgTU9OREFZID0gMgorICAgICAgICAgICAgVFVFU0RBWSA9IDMKKyAgICAgICAgICAgIFdFRE5FU0RBWSA9IDQKKyAgICAgICAgICAgIFRIVVJTREFZID0gNQorICAgICAgICAgICAgRlJJREFZID0gNgorICAgICAgICAgICAgU0FUVVJEQVkgPSA3CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ2EnLCAnYicsICdjJ11bV2Vla0RheS5NT05EQVldLCAnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2kgZm9yIGkgaW4gcmFuZ2UoV2Vla0RheS5UVUVTREFZKV0sIFswLCAxLCAyXSkKKworICAgICAgICBsc3QgPSBsaXN0KFdlZWtEYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihXZWVrRGF5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oV2Vla0RheSksIDcpCisgICAgICAgIHRhcmdldCA9ICdTVU5EQVkgTU9OREFZIFRVRVNEQVkgV0VETkVTREFZIFRIVVJTREFZIEZSSURBWSBTQVRVUkRBWScKKyAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnNwbGl0KCkKKyAgICAgICAgZm9yIGksIHdlZWtkYXkgaW4gZW51bWVyYXRlKHRhcmdldCwgMSk6CisgICAgICAgICAgICBlID0gV2Vla0RheShpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgd2Vla2RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgV2Vla0RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LmluZGV4KGUpKzEsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8IGUgPCA4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBXZWVrRGF5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBFbnVtKQorCisgICAgZGVmIHRlc3RfaW50ZW51bV9kdXBsaWNhdGVzKHNlbGYpOgorICAgICAgICBjbGFzcyBXZWVrRGF5KEludEVudW0pOgorICAgICAgICAgICAgU1VOREFZID0gMQorICAgICAgICAgICAgTU9OREFZID0gMgorICAgICAgICAgICAgVFVFU0RBWSA9IFRFVVNEQVkgPSAzCisgICAgICAgICAgICBXRURORVNEQVkgPSA0CisgICAgICAgICAgICBUSFVSU0RBWSA9IDUKKyAgICAgICAgICAgIEZSSURBWSA9IDYKKyAgICAgICAgICAgIFNBVFVSREFZID0gNworICAgICAgICBzZWxmLmFzc2VydElzKFdlZWtEYXkuVEVVU0RBWSwgV2Vla0RheS5UVUVTREFZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFdlZWtEYXkoMykubmFtZSwgJ1RVRVNEQVknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtrIGZvciBrLHYgaW4gV2Vla0RheS5fX21lbWJlcnNfXy5pdGVtcygpCisgICAgICAgICAgICAgICAgaWYgdi5uYW1lICE9IGtdLCBbJ1RFVVNEQVknLCBdKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW0oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoU3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIFN0b29nZXMKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIFN0b29nZXMuQ1VSTFkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBTdG9vZ2VzKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2ludChzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShJbnRTdG9vZ2VzLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgSW50U3Rvb2dlcworICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgSW50U3Rvb2dlcy5DVVJMWSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIEludFN0b29nZXMpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfZmxvYXQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoRmxvYXRTdG9vZ2VzLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgRmxvYXRTdG9vZ2VzCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBGbG9hdFN0b29nZXMuQ1VSTFkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBGbG9hdFN0b29nZXMpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfZW51bV9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShBbnN3ZXIsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBBbnN3ZXIKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIEFuc3dlci5oaW0pCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBBbnN3ZXIpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfZW51bV9mdW5jdGlvbl93aXRoX21vZHVsZShzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShRdWVzdGlvbiwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIFF1ZXN0aW9uCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBRdWVzdGlvbi53aG8pCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBRdWVzdGlvbikKKworICAgIGRlZiB0ZXN0X2VudW1fZnVuY3Rpb25fd2l0aF9xdWFsbmFtZShzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShUaGVvcnksIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBUaGVvcnkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUaGVvcnkuX19xdWFsbmFtZV9fLCAnc3BhbmlzaF9pbnF1aXNpdGlvbicpCisKKyAgICBkZWYgdGVzdF9jbGFzc19uZXN0ZWRfZW51bV9hbmRfcGlja2xlX3Byb3RvY29sX2ZvdXIoc2VsZik6CisgICAgICAgICMgd291bGQgbm9ybWFsbHkganVzdCBoYXZlIHRoaXMgZGlyZWN0bHkgaW4gdGhlIGNsYXNzIG5hbWVzcGFjZQorICAgICAgICBjbGFzcyBOZXN0ZWRFbnVtKEVudW0pOgorICAgICAgICAgICAgdHdpZ3MgPSAnY29tbW9uJworICAgICAgICAgICAgc2hpbnkgPSAncmFyZScKKworICAgICAgICBzZWxmLl9fY2xhc3NfXy5OZXN0ZWRFbnVtID0gTmVzdGVkRW51bQorICAgICAgICBzZWxmLk5lc3RlZEVudW0uX19xdWFsbmFtZV9fID0gJyVzLk5lc3RlZEVudW0nICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgdGVzdF9waWNrbGVfZXhjZXB0aW9uKAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzLCBQaWNrbGluZ0Vycm9yLCBzZWxmLk5lc3RlZEVudW0udHdpZ3MsCisgICAgICAgICAgICAgICAgcHJvdG9jb2w9KDAsIDMpKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgc2VsZi5OZXN0ZWRFbnVtLnR3aWdzLAorICAgICAgICAgICAgICAgIHByb3RvY29sPSg0LCBISUdIRVNUX1BST1RPQ09MKSkKKworICAgIGRlZiB0ZXN0X2V4cGxvZGluZ19waWNrbGUoc2VsZik6CisgICAgICAgIEJhZFBpY2tsZSA9IEVudW0oCisgICAgICAgICAgICAgICAgJ0JhZFBpY2tsZScsICdkaWxsIHN3ZWV0IGJyZWFkLW4tYnV0dGVyJywgbW9kdWxlPV9fbmFtZV9fKQorICAgICAgICBnbG9iYWxzKClbJ0JhZFBpY2tsZSddID0gQmFkUGlja2xlCisgICAgICAgICMgbm93IGJyZWFrIEJhZFBpY2tsZSB0byB0ZXN0IGV4Y2VwdGlvbiByYWlzaW5nCisgICAgICAgIGVudW0uX21ha2VfY2xhc3NfdW5waWNrbGFibGUoQmFkUGlja2xlKQorICAgICAgICB0ZXN0X3BpY2tsZV9leGNlcHRpb24oc2VsZi5hc3NlcnRSYWlzZXMsIFR5cGVFcnJvciwgQmFkUGlja2xlLmRpbGwpCisgICAgICAgIHRlc3RfcGlja2xlX2V4Y2VwdGlvbihzZWxmLmFzc2VydFJhaXNlcywgUGlja2xpbmdFcnJvciwgQmFkUGlja2xlKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIFNraWxsTGV2ZWwoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIG1hc3RlciA9ICd3aGF0IGlzIHRoZSBzb3VuZCBvZiBvbmUgaGFuZCBjbGFwcGluZz8nCisgICAgICAgICAgICBqb3VybmV5bWFuID0gJ3doeSBkaWQgdGhlIGNoaWNrZW4gY3Jvc3MgdGhlIHJvYWQ/JworICAgICAgICAgICAgYXBwcmVudGljZSA9ICdrbm9jaywga25vY2shJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNraWxsTGV2ZWwuYXBwcmVudGljZSwgJ2tub2NrLCBrbm9jayEnKQorCisgICAgZGVmIHRlc3RfZ2V0YXR0cl9nZXRpdGVtKHNlbGYpOgorICAgICAgICBjbGFzcyBQZXJpb2QoRW51bSk6CisgICAgICAgICAgICBtb3JuaW5nID0gMQorICAgICAgICAgICAgbm9vbiA9IDIKKyAgICAgICAgICAgIGV2ZW5pbmcgPSAzCisgICAgICAgICAgICBuaWdodCA9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQZXJpb2QoMiksIFBlcmlvZC5ub29uKQorICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIoUGVyaW9kLCAnbmlnaHQnKSwgUGVyaW9kLm5pZ2h0KQorICAgICAgICBzZWxmLmFzc2VydElzKFBlcmlvZFsnbW9ybmluZyddLCBQZXJpb2QubW9ybmluZykKKworICAgIGRlZiB0ZXN0X2dldGF0dHJfZHVuZGVyKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihTZWFzb24sICdfX2VxX18nKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgV0lOVEVSID0gNAorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QoU2Vhc29uKSwKKyAgICAgICAgICAgICAgICBbU2Vhc29uLlNVTU1FUiwgU2Vhc29uLldJTlRFUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLlNQUklOR10sCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZWRfaXRlcmF0aW9uX29yZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QocmV2ZXJzZWQoc2VsZi5TZWFzb24pKSwKKyAgICAgICAgICAgICAgICBbc2VsZi5TZWFzb24uV0lOVEVSLCBzZWxmLlNlYXNvbi5BVVRVTU4sIHNlbGYuU2Vhc29uLlNVTU1FUiwKKyAgICAgICAgICAgICAgICAgc2VsZi5TZWFzb24uU1BSSU5HXQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3N0cmluZyhzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZS52YWx1ZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3N0cmluZ19saXN0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgWydqdW5lJywgJ2p1bHknLCAnYXVndXN0J10pCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKAorICAgICAgICAgICAgICAgICdTdW1tZXJNb250aCcsCisgICAgICAgICAgICAgICAgKCgnanVuZScsIDEpLCAoJ2p1bHknLCAyKSwgKCdhdWd1c3QnLCAzKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9mcm9tX2RpY3Qoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgKKyAgICAgICAgICAgICAgICAnU3VtbWVyTW9udGgnLAorICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KCgoJ2p1bmUnLCAxKSwgKCdqdWx5JywgMiksICgnYXVndXN0JywgMykpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZS52YWx1ZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3R5cGUoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcsIHR5cGU9aW50KQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3R5cGVfZnJvbV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBJbnRFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShOYW1lLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgTmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5hbWUuQkRGTCwgJ0d1aWRvIHZhbiBSb3NzdW0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTmFtZS5CREZMLCBOYW1lKCdHdWlkbyB2YW4gUm9zc3VtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTmFtZS5CREZMLCBnZXRhdHRyKE5hbWUsICdCREZMJykpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBOYW1lLkJERkwpCisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICAgICAgbWFnZW50YSA9IDUKKyAgICAgICAgICAgICAgICB5ZWxsb3cgPSA2CisKKyAgICBkZWYgdGVzdF9leGNsdWRlX21ldGhvZHMoc2VsZik6CisgICAgICAgIGNsYXNzIHdoYXRldmVyKEVudW0pOgorICAgICAgICAgICAgdGhpcyA9ICd0aGF0JworICAgICAgICAgICAgdGhlc2UgPSAndGhvc2UnCisgICAgICAgICAgICBkZWYgcmVhbGx5KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnbm8sIG5vdCAlcycgJSBzZWxmLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodHlwZSh3aGF0ZXZlci5yZWFsbHkpLCB3aGF0ZXZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aGF0ZXZlci50aGlzLnJlYWxseSgpLCAnbm8sIG5vdCB0aGF0JykKKworICAgIGRlZiB0ZXN0X3dyb25nX2luaGVyaXRhbmNlX29yZGVyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtLCBzdHIpOgorICAgICAgICAgICAgICAgIE5vdEhlcmUgPSAnZXJyb3IgYmVmb3JlIHRoaXMgcG9pbnQnCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX3RyYW5zaXRpdml0eShzZWxmKToKKyAgICAgICAgY2xhc3MgbnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgb25lID0gMQorICAgICAgICAgICAgdHdvID0gMgorICAgICAgICAgICAgdGhyZWUgPSAzCisgICAgICAgIGNsYXNzIG51bWVybyhJbnRFbnVtKToKKyAgICAgICAgICAgIHVubyA9IDEKKyAgICAgICAgICAgIGRvcyA9IDIKKyAgICAgICAgICAgIHRyZXMgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyLm9uZSwgbnVtZXJvLnVubykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXIudHdvLCBudW1lcm8uZG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlci50aHJlZSwgbnVtZXJvLnRyZXMpCisKKyAgICBkZWYgdGVzdF93cm9uZ19lbnVtX2luX2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoRW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoRW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBNb25vY2hyb21lLCBHZW5kZXIubWFsZSkKKworICAgIGRlZiB0ZXN0X3dyb25nX2VudW1faW5fbWl4ZWRfY2FsbChzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShJbnRFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIE1vbm9jaHJvbWUsIEdlbmRlci5tYWxlKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfZW51bV9pbl9jYWxsXzEoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoSW50RW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoSW50RW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydElzKE1vbm9jaHJvbWUoR2VuZGVyLmZlbWFsZSksIE1vbm9jaHJvbWUud2hpdGUpCisKKyAgICBkZWYgdGVzdF9taXhlZF9lbnVtX2luX2NhbGxfMihzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTW9ub2Nocm9tZShHZW5kZXIubWFsZSksIE1vbm9jaHJvbWUuYmxhY2spCisKKyAgICBkZWYgdGVzdF9mbHVmbF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBGbHVmbG51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZi52YWx1ZSkKKyAgICAgICAgY2xhc3MgTWFpbE1hbk9wdGlvbnMoRmx1ZmxudW0pOgorICAgICAgICAgICAgb3B0aW9uMSA9IDEKKyAgICAgICAgICAgIG9wdGlvbjIgPSAyCisgICAgICAgICAgICBvcHRpb24zID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChNYWlsTWFuT3B0aW9ucy5vcHRpb24xKSwgMSkKKworICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24oc2VsZik6CisgICAgICAgIGNsYXNzIE51bWJlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEwMAorICAgICAgICAgICAgdHdvID0gMjAwCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTnVtYmVyLm9uZS5fbWVtYmVyX3R5cGVfLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTnVtYmVyLl9tZW1iZXJfdHlwZV8sIGludCkKKyAgICAgICAgY2xhc3MgU3RyaW5nKHN0ciwgRW51bSk6CisgICAgICAgICAgICB5YXJuID0gJ3NvZnQnCisgICAgICAgICAgICByb3BlID0gJ3JvdWdoJworICAgICAgICAgICAgd2lyZSA9ICdoYXJkJworICAgICAgICBzZWxmLmFzc2VydElzKFN0cmluZy55YXJuLl9tZW1iZXJfdHlwZV8sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTdHJpbmcuX21lbWJlcl90eXBlXywgc3RyKQorICAgICAgICBjbGFzcyBQbGFpbihFbnVtKToKKyAgICAgICAgICAgIHZhbmlsbGEgPSAnd2hpdGUnCisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGxhaW4udmFuaWxsYS5fbWVtYmVyX3R5cGVfLCBvYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGxhaW4uX21lbWJlcl90eXBlXywgb2JqZWN0KQorCisgICAgZGVmIHRlc3Rfbm9fc3VjaF9lbnVtX21lbWJlcihzZWxmKToKKyAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBDb2xvcig0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIENvbG9yWydjaGFydHJldXNlJ10KKworICAgIGRlZiB0ZXN0X25ld19yZXByKHNlbGYpOgorICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImRvbid0IHlvdSBqdXN0IGxvdmUgc2hhZGVzIG9mICVzPyIgJSBzZWxmLm5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXByKENvbG9yLmJsdWUpLAorICAgICAgICAgICAgICAgICJkb24ndCB5b3UganVzdCBsb3ZlIHNoYWRlcyBvZiBibHVlPyIsCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIE15RW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIk15IG5hbWUgaXMgJXMuIiAlIHNlbGYubmFtZQorICAgICAgICBjbGFzcyBNeUludEVudW0oaW50LCBNeUVudW0pOgorICAgICAgICAgICAgdGhpcyA9IDEKKyAgICAgICAgICAgIHRoYXQgPSAyCisgICAgICAgICAgICB0aGVvdGhlciA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE15SW50RW51bS50aGF0KSwgIk15IG5hbWUgaXMgdGhhdC4iKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfbWl4aW5fbXJvKHNlbGYpOgorICAgICAgICBjbGFzcyBhdXRvX2VudW0odHlwZShFbnVtKSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICAgICAgICAgIHRlbXAgPSB0eXBlKGNsYXNzZGljdCkoKQorICAgICAgICAgICAgICAgIG5hbWVzID0gc2V0KGNsYXNzZGljdC5fbWVtYmVyX25hbWVzKQorICAgICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHYgPSBjbGFzc2RpY3Rba10KKyAgICAgICAgICAgICAgICAgICAgaWYgdiBpcyBFbGxpcHNpczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gdgorICAgICAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgICAgICAgICAgdGVtcFtrXSA9IHYKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBjbGFzc2RpY3QuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wW2tdID0gdgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihhdXRvX2VudW0sIG1ldGFjbHMpLl9fbmV3X18oCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhY2xzLCBjbHMsIGJhc2VzLCB0ZW1wKQorCisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXJlZEVudW0oRW51bSwgbWV0YWNsYXNzPWF1dG9fZW51bSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQXV0b0ludEVudW0oSW50RW51bSwgbWV0YWNsYXNzPWF1dG9fZW51bSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdEF1dG9OdW1iZXIoQXV0b051bWJlcmVkRW51bSk6CisgICAgICAgICAgICBhID0gLi4uCisgICAgICAgICAgICBiID0gMworICAgICAgICAgICAgYyA9IC4uLgorCisgICAgICAgIGNsYXNzIFRlc3RBdXRvSW50KEF1dG9JbnRFbnVtKToKKyAgICAgICAgICAgIGEgPSAuLi4KKyAgICAgICAgICAgIGIgPSAzCisgICAgICAgICAgICBjID0gLi4uCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhfZ2V0bmV3YXJncyhzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcgICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9hcmdzCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTkVJJyAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydEVxdWFsLCBOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXNfd2l0aF9nZXRuZXdhcmdzX2V4KHNlbGYpOgorICAgICAgICBjbGFzcyBOYW1lZEludChpbnQpOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05hbWVkSW50JyAgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIF9hcmdzID0gYXJncworICAgICAgICAgICAgICAgIG5hbWUsICphcmdzID0gYXJncworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5hbWUgYW5kIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPSBfYXJncworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FyZ3MsIHt9CisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTkVJJyAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydEVxdWFsLCBOSTUsIDUsIHByb3RvY29sPSg0LCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChORUkueS52YWx1ZSwgMikKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSS55LCBwcm90b2NvbD0oNCwgNCkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhfcmVkdWNlKHNlbGYpOgorICAgICAgICBjbGFzcyBOYW1lZEludChpbnQpOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05hbWVkSW50JyAgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIF9hcmdzID0gYXJncworICAgICAgICAgICAgICAgIG5hbWUsICphcmdzID0gYXJncworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5hbWUgYW5kIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPSBfYXJncworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIHNlbGYuX2FyZ3MKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbmFtZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRuYW1lCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXByKCkgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBuYW1lIGFuZCB0eXBlIGluZm8KKyAgICAgICAgICAgICAgICByZXR1cm4gInt9KHshcn0sIHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Ll9fcmVwcl9fKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBzdHIoKSBpcyB1bmNoYW5nZWQsIGV2ZW4gaWYgaXQgcmVsaWVzIG9uIHRoZSByZXByKCkgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBiYXNlID0gaW50CisgICAgICAgICAgICAgICAgYmFzZV9zdHIgPSBiYXNlLl9fc3RyX18KKyAgICAgICAgICAgICAgICBpZiBiYXNlX3N0ci5fX29iamNsYXNzX18gaXMgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3N0cihzZWxmKQorICAgICAgICAgICAgIyBmb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBkZWZpbmUgb25lIG9wZXJhdG9yIHRoYXQKKyAgICAgICAgICAgICMgcHJvcGFnYXRlcyBleHByZXNzaW9ucworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBpbnQoc2VsZikgKyBpbnQoIG90aGVyKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgTmFtZWRJbnQpIGFuZCBpc2luc3RhbmNlKG90aGVyLCBOYW1lZEludCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lZEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoezB9ICsgezF9KScuZm9ybWF0KHNlbGYuX19uYW1lX18sIG90aGVyLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wCisKKyAgICAgICAgY2xhc3MgTkVJKE5hbWVkSW50LCBFbnVtKToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdORUknICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisKKworICAgICAgICBzZWxmLmFzc2VydElzKE5FSS5fX25ld19fLCBFbnVtLl9fbmV3X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihORUkueCArIE5FSS55KSwgIk5hbWVkSW50KCcodGhlLXggKyB0aGUteSknLCAzKSIpCisgICAgICAgIGdsb2JhbHMoKVsnTmFtZWRJbnQnXSA9IE5hbWVkSW50CisgICAgICAgIGdsb2JhbHMoKVsnTkVJJ10gPSBORUkKKyAgICAgICAgTkk1ID0gTmFtZWRJbnQoJ3Rlc3QnLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5JNSwgNSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0RXF1YWwsIE5JNSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChORUkueS52YWx1ZSwgMikKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSS55KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRoX3JlZHVjZV9leChzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcgICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX2V4X18oc2VsZiwgcHJvdG8pOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgc2VsZi5fYXJncworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRFcXVhbCwgTkk1LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJLnkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhvdXRfZGlyZWN0X3BpY2tsZV9zdXBwb3J0KHNlbGYpOgorICAgICAgICBjbGFzcyBOYW1lZEludChpbnQpOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05hbWVkSW50JworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbmFtZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRuYW1lCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXByKCkgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBuYW1lIGFuZCB0eXBlIGluZm8KKyAgICAgICAgICAgICAgICByZXR1cm4gInt9KHshcn0sIHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Ll9fcmVwcl9fKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBzdHIoKSBpcyB1bmNoYW5nZWQsIGV2ZW4gaWYgaXQgcmVsaWVzIG9uIHRoZSByZXByKCkgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBiYXNlID0gaW50CisgICAgICAgICAgICAgICAgYmFzZV9zdHIgPSBiYXNlLl9fc3RyX18KKyAgICAgICAgICAgICAgICBpZiBiYXNlX3N0ci5fX29iamNsYXNzX18gaXMgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3N0cihzZWxmKQorICAgICAgICAgICAgIyBmb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBkZWZpbmUgb25lIG9wZXJhdG9yIHRoYXQKKyAgICAgICAgICAgICMgcHJvcGFnYXRlcyBleHByZXNzaW9ucworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBpbnQoc2VsZikgKyBpbnQoIG90aGVyKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgTmFtZWRJbnQpIGFuZCBpc2luc3RhbmNlKG90aGVyLCBOYW1lZEludCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lZEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoezB9ICsgezF9KScuZm9ybWF0KHNlbGYuX19uYW1lX18sIG90aGVyLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wCisKKyAgICAgICAgY2xhc3MgTkVJKE5hbWVkSW50LCBFbnVtKToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdORUknCisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2V4Y2VwdGlvbihzZWxmLmFzc2VydFJhaXNlcywgVHlwZUVycm9yLCBORUkueCkKKyAgICAgICAgdGVzdF9waWNrbGVfZXhjZXB0aW9uKHNlbGYuYXNzZXJ0UmFpc2VzLCBQaWNrbGluZ0Vycm9yLCBORUkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhvdXRfZGlyZWN0X3BpY2tsZV9zdXBwb3J0X3VzaW5nX25hbWUoc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTmFtZWRJbnQnCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKHNlbGYuX19jbGFzc19fLCBzZWxmLl9uYW1lXykKKworICAgICAgICBzZWxmLmFzc2VydElzKE5FSS5fX25ld19fLCBFbnVtLl9fbmV3X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihORUkueCArIE5FSS55KSwgIk5hbWVkSW50KCcodGhlLXggKyB0aGUteSknLCAzKSIpCisgICAgICAgIGdsb2JhbHMoKVsnTmFtZWRJbnQnXSA9IE5hbWVkSW50CisgICAgICAgIGdsb2JhbHMoKVsnTkVJJ10gPSBORUkKKyAgICAgICAgTkk1ID0gTmFtZWRJbnQoJ3Rlc3QnLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5JNSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChORUkueS52YWx1ZSwgMikKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSS55KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJKQorCisgICAgZGVmIHRlc3RfdHVwbGVfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFNvbWVUdXBsZSh0dXBsZSwgRW51bSk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnU29tZVR1cGxlJyAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgZmlyc3QgPSAoMSwgJ2ZvciB0aGUgbW9uZXknKQorICAgICAgICAgICAgc2Vjb25kID0gKDIsICdmb3IgdGhlIHNob3cnKQorICAgICAgICAgICAgdGhpcmQgPSAoMywgJ2ZvciB0aGUgbXVzaWMnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoU29tZVR1cGxlLmZpcnN0KSwgU29tZVR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoU29tZVR1cGxlLnNlY29uZCwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZVR1cGxlLnRoaXJkLCAoMywgJ2ZvciB0aGUgbXVzaWMnKSkKKyAgICAgICAgZ2xvYmFscygpWydTb21lVHVwbGUnXSA9IFNvbWVUdXBsZQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgU29tZVR1cGxlLmZpcnN0KQorCisgICAgZGVmIHRlc3RfZHVwbGljYXRlX3ZhbHVlc19naXZlX3VuaXF1ZV9lbnVtX2l0ZW1zKHNlbGYpOgorICAgICAgICBjbGFzcyBBdXRvTnVtYmVyKEVudW0pOgorICAgICAgICAgICAgZmlyc3QgPSAoKQorICAgICAgICAgICAgc2Vjb25kID0gKCkKKyAgICAgICAgICAgIHRoaXJkID0gKCkKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBsZW4oY2xzLl9fbWVtYmVyc19fKSArIDEKKyAgICAgICAgICAgICAgICBvYmogPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZi5fdmFsdWVfKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QoQXV0b051bWJlciksCisgICAgICAgICAgICAgICAgW0F1dG9OdW1iZXIuZmlyc3QsIEF1dG9OdW1iZXIuc2Vjb25kLCBBdXRvTnVtYmVyLnRoaXJkXSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KEF1dG9OdW1iZXIuc2Vjb25kKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBdXRvTnVtYmVyLnRoaXJkLnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydElzKEF1dG9OdW1iZXIoMSksIEF1dG9OdW1iZXIuZmlyc3QpCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWRfbmV3X2Zyb21fZW5oYW5jZWRfZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBsZW4oY2xzLl9fbWVtYmVyc19fKSArIDEKKyAgICAgICAgICAgICAgICBvYmogPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZi5fdmFsdWVfKQorICAgICAgICBjbGFzcyBDb2xvcihBdXRvTnVtYmVyKToKKyAgICAgICAgICAgIHJlZCA9ICgpCisgICAgICAgICAgICBncmVlbiA9ICgpCisgICAgICAgICAgICBibHVlID0gKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KENvbG9yKSwgW0NvbG9yLnJlZCwgQ29sb3IuZ3JlZW4sIENvbG9yLmJsdWVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWFwKGludCwgQ29sb3IpKSwgWzEsIDIsIDNdKQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX25ld19mcm9tX21peGVkX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXIoSW50RW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gaW50Ll9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBvYmouX3ZhbHVlXyA9IHZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICBjbGFzcyBDb2xvcihBdXRvTnVtYmVyKToKKyAgICAgICAgICAgIHJlZCA9ICgpCisgICAgICAgICAgICBncmVlbiA9ICgpCisgICAgICAgICAgICBibHVlID0gKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KENvbG9yKSwgW0NvbG9yLnJlZCwgQ29sb3IuZ3JlZW4sIENvbG9yLmJsdWVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWFwKGludCwgQ29sb3IpKSwgWzEsIDIsIDNdKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIGNsYXNzIEFsd2F5c0VxdWFsOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgY2xhc3MgT3JkaW5hcnlFbnVtKEVudW0pOgorICAgICAgICAgICAgYSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBbHdheXNFcXVhbCgpLCBPcmRpbmFyeUVudW0uYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChPcmRpbmFyeUVudW0uYSwgQWx3YXlzRXF1YWwoKSkKKworICAgIGRlZiB0ZXN0X29yZGVyZWRfbWl4aW4oc2VsZik6CisgICAgICAgIGNsYXNzIE9yZGVyZWRFbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfID49IG90aGVyLl92YWx1ZV8KKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA+IG90aGVyLl92YWx1ZV8KKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA8PSBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPCBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGNsYXNzIEdyYWRlKE9yZGVyZWRFbnVtKToKKyAgICAgICAgICAgIEEgPSA1CisgICAgICAgICAgICBCID0gNAorICAgICAgICAgICAgQyA9IDMKKyAgICAgICAgICAgIEQgPSAyCisgICAgICAgICAgICBGID0gMQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoR3JhZGUuQSwgR3JhZGUuQikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoR3JhZGUuRiwgR3JhZGUuQykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKEdyYWRlLkQsIEdyYWRlLkEpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKEdyYWRlLkIsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR3JhZGUuQiwgR3JhZGUuQikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChHcmFkZS5DLCBHcmFkZS5EKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kaW5nMihzZWxmKToKKyAgICAgICAgY2xhc3MgU2hhZGUoRW51bSk6CisgICAgICAgICAgICBkZWYgc2hhZGUoc2VsZik6CisgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5uYW1lKQorICAgICAgICBjbGFzcyBDb2xvcihTaGFkZSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIE1vcmVDb2xvcihDb2xvcik6CisgICAgICAgICAgICAgICAgY3lhbiA9IDQKKyAgICAgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgICAgIHllbGxvdyA9IDYKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZzMoc2VsZik6CisgICAgICAgIGNsYXNzIFNoYWRlKEVudW0pOgorICAgICAgICAgICAgZGVmIHNoYWRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKyAgICAgICAgY2xhc3MgQ29sb3IoU2hhZGUpOgorICAgICAgICAgICAgZGVmIGhleChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzIGhleGxpZmllZCEnICUgc2VsZi52YWx1ZQorICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgY3lhbiA9IDQKKyAgICAgICAgICAgIG1hZ2VudGEgPSA1CisgICAgICAgICAgICB5ZWxsb3cgPSA2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9yZUNvbG9yLm1hZ2VudGEuaGV4KCksICc1IGhleGxpZmllZCEnKQorCisKKyAgICBkZWYgdGVzdF9ub19kdXBsaWNhdGVzKHNlbGYpOgorICAgICAgICBjbGFzcyBVbmlxdWVFbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBjbHMgPSBzZWxmLl9fY2xhc3NfXworICAgICAgICAgICAgICAgIGlmIGFueShzZWxmLnZhbHVlID09IGUudmFsdWUgZm9yIGUgaW4gY2xzKToKKyAgICAgICAgICAgICAgICAgICAgYSA9IHNlbGYubmFtZQorICAgICAgICAgICAgICAgICAgICBlID0gY2xzKHNlbGYudmFsdWUpLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXNlcyBub3QgYWxsb3dlZCBpbiBVbmlxdWVFbnVtOiAgJXIgLS0+ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGEsIGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBjbGFzcyBDb2xvcihVbmlxdWVFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKFVuaXF1ZUVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIGdyZW5lID0gMgorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgY2xhc3MgUGxhbmV0KEVudW0pOgorICAgICAgICAgICAgTUVSQ1VSWSA9ICgzLjMwM2UrMjMsIDIuNDM5N2U2KQorICAgICAgICAgICAgVkVOVVMgICA9ICg0Ljg2OWUrMjQsIDYuMDUxOGU2KQorICAgICAgICAgICAgRUFSVEggICA9ICg1Ljk3NmUrMjQsIDYuMzc4MTRlNikKKyAgICAgICAgICAgIE1BUlMgICAgPSAoNi40MjFlKzIzLCAzLjM5NzJlNikKKyAgICAgICAgICAgIEpVUElURVIgPSAoMS45ZSsyNywgICA3LjE0OTJlNykKKyAgICAgICAgICAgIFNBVFVSTiAgPSAoNS42ODhlKzI2LCA2LjAyNjhlNykKKyAgICAgICAgICAgIFVSQU5VUyAgPSAoOC42ODZlKzI1LCAyLjU1NTllNykKKyAgICAgICAgICAgIE5FUFRVTkUgPSAoMS4wMjRlKzI2LCAyLjQ3NDZlNykKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXNzLCByYWRpdXMpOgorICAgICAgICAgICAgICAgIHNlbGYubWFzcyA9IG1hc3MgICAgICAgIyBpbiBraWxvZ3JhbXMKKyAgICAgICAgICAgICAgICBzZWxmLnJhZGl1cyA9IHJhZGl1cyAgICMgaW4gbWV0ZXJzCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBzdXJmYWNlX2dyYXZpdHkoc2VsZik6CisgICAgICAgICAgICAgICAgIyB1bml2ZXJzYWwgZ3Jhdml0YXRpb25hbCBjb25zdGFudCAgKG0zIGtnLTEgcy0yKQorICAgICAgICAgICAgICAgIEcgPSA2LjY3MzAwRS0xMQorICAgICAgICAgICAgICAgIHJldHVybiBHICogc2VsZi5tYXNzIC8gKHNlbGYucmFkaXVzICogc2VsZi5yYWRpdXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoUGxhbmV0LkVBUlRILnN1cmZhY2VfZ3Jhdml0eSwgMiksIDkuODApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGxhbmV0LkVBUlRILnZhbHVlLCAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpKQorCisgICAgZGVmIHRlc3Rfbm9uaGFzaF92YWx1ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlckluQUxpc3QoRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gW2xlbihjbHMuX19tZW1iZXJzX18pICsgMV0KKyAgICAgICAgICAgICAgICBvYmogPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgY2xhc3MgQ29sb3JJbkFMaXN0KEF1dG9OdW1iZXJJbkFMaXN0KToKKyAgICAgICAgICAgIHJlZCA9ICgpCisgICAgICAgICAgICBncmVlbiA9ICgpCisgICAgICAgICAgICBibHVlID0gKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KENvbG9ySW5BTGlzdCksIFtDb2xvckluQUxpc3QucmVkLCBDb2xvckluQUxpc3QuZ3JlZW4sIENvbG9ySW5BTGlzdC5ibHVlXSkKKyAgICAgICAgZm9yIGVudW0sIHZhbHVlIGluIHppcChDb2xvckluQUxpc3QsIHJhbmdlKDMpKToKKyAgICAgICAgICAgIHZhbHVlICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW51bS52YWx1ZSwgW3ZhbHVlXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoQ29sb3JJbkFMaXN0KFt2YWx1ZV0pLCBlbnVtKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RpbmdfdHlwZXNfcmVzb2x2ZWRfaW5fbmV3KHNlbGYpOgorICAgICAgICBjbGFzcyBMYWJlbGxlZEludEVudW0oaW50LCBFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHZhbHVlLCBsYWJlbCA9IGFyZ3MKKyAgICAgICAgICAgICAgICBvYmogPSBpbnQuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICAgICAgICAgIG9iai5sYWJlbCA9IGxhYmVsCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKworICAgICAgICBjbGFzcyBMYWJlbGxlZExpc3QoTGFiZWxsZWRJbnRFbnVtKToKKyAgICAgICAgICAgIHVucHJvY2Vzc2VkID0gKDEsICJVbnByb2Nlc3NlZCIpCisgICAgICAgICAgICBwYXltZW50X2NvbXBsZXRlID0gKDIsICJQYXltZW50IENvbXBsZXRlIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoTGFiZWxsZWRMaXN0KSwgW0xhYmVsbGVkTGlzdC51bnByb2Nlc3NlZCwgTGFiZWxsZWRMaXN0LnBheW1lbnRfY29tcGxldGVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExhYmVsbGVkTGlzdC51bnByb2Nlc3NlZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMYWJlbGxlZExpc3QoMSksIExhYmVsbGVkTGlzdC51bnByb2Nlc3NlZCkKKworCitjbGFzcyBUZXN0VW5pcXVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaXF1ZV9jbGVhbihzZWxmKToKKyAgICAgICAgQHVuaXF1ZQorICAgICAgICBjbGFzcyBDbGVhbihFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgICAgIHR3byA9ICdkb3MnCisgICAgICAgICAgICB0cmVzID0gNC4wCisgICAgICAgIEB1bmlxdWUKKyAgICAgICAgY2xhc3MgQ2xlYW5lcihJbnRFbnVtKToKKyAgICAgICAgICAgIHNpbmdsZSA9IDEKKyAgICAgICAgICAgIGRvdWJsZSA9IDIKKyAgICAgICAgICAgIHRyaXBsZSA9IDMKKworICAgIGRlZiB0ZXN0X3VuaXF1ZV9kaXJ0eShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd0cmVzLipvbmUnKToKKyAgICAgICAgICAgIEB1bmlxdWUKKyAgICAgICAgICAgIGNsYXNzIERpcnR5KEVudW0pOgorICAgICAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgICAgICAgICB0d28gPSAnZG9zJworICAgICAgICAgICAgICAgIHRyZXMgPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICBWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICdkb3VibGUuKnNpbmdsZS4qdHVya2V5Lip0cmlwbGUnLAorICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICBAdW5pcXVlCisgICAgICAgICAgICBjbGFzcyBEaXJ0aWVyKEludEVudW0pOgorICAgICAgICAgICAgICAgIHNpbmdsZSA9IDEKKyAgICAgICAgICAgICAgICBkb3VibGUgPSAxCisgICAgICAgICAgICAgICAgdHJpcGxlID0gMworICAgICAgICAgICAgICAgIHR1cmtleSA9IDMKKworCitleHBlY3RlZF9oZWxwX291dHB1dCA9ICIiIgorSGVscCBvbiBjbGFzcyBDb2xvciBpbiBtb2R1bGUgJXM6CisKK2NsYXNzIENvbG9yKGVudW0uRW51bSkKKyB8ICBNZXRob2QgcmVzb2x1dGlvbiBvcmRlcjoKKyB8ICAgICAgQ29sb3IKKyB8ICAgICAgZW51bS5FbnVtCisgfCAgICAgIGJ1aWx0aW5zLm9iamVjdAorIHxceDIwXHgyMAorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCBoZXJlOgorIHxceDIwXHgyMAorIHwgIGJsdWUgPSA8Q29sb3IuYmx1ZTogMz4KKyB8XHgyMFx4MjAKKyB8ICBncmVlbiA9IDxDb2xvci5ncmVlbjogMj4KKyB8XHgyMFx4MjAKKyB8ICByZWQgPSA8Q29sb3IucmVkOiAxPgorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIGVudW0uRW51bToKKyB8XHgyMFx4MjAKKyB8ICBuYW1lCisgfCAgICAgIFRoZSBuYW1lIG9mIHRoZSBFbnVtIG1lbWJlci4KKyB8XHgyMFx4MjAKKyB8ICB2YWx1ZQorIHwgICAgICBUaGUgdmFsdWUgb2YgdGhlIEVudW0gbWVtYmVyLgorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIGVudW0uRW51bU1ldGE6CisgfFx4MjBceDIwCisgfCAgX19tZW1iZXJzX18KKyB8ICAgICAgUmV0dXJucyBhIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUtPnZhbHVlLgorIHxceDIwXHgyMFx4MjBceDIwXHgyMFx4MjAKKyB8ICAgICAgVGhpcyBtYXBwaW5nIGxpc3RzIGFsbCBlbnVtIG1lbWJlcnMsIGluY2x1ZGluZyBhbGlhc2VzLiBOb3RlIHRoYXQgdGhpcworIHwgICAgICBpcyBhIHJlYWQtb25seSB2aWV3IG9mIHRoZSBpbnRlcm5hbCBtYXBwaW5nLgorIiIiLnN0cmlwKCkKKworY2xhc3MgVGVzdFN0ZExpYih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgcmVkID0gMQorICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgYmx1ZSA9IDMKKworICAgIGRlZiB0ZXN0X3B5ZG9jKHNlbGYpOgorICAgICAgICAjIGluZGlyZWN0bHkgdGVzdCBfX29iamNsYXNzX18KKyAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX2hlbHBfb3V0cHV0ICUgX19uYW1lX18KKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKHNlbGYuQ29sb3IpCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkX3RleHQpCisKKyAgICBkZWYgdGVzdF9pbnNwZWN0X2dldG1lbWJlcnMoc2VsZik6CisgICAgICAgIHZhbHVlcyA9IGRpY3QoKAorICAgICAgICAgICAgICAgICgnX19jbGFzc19fJywgRW51bU1ldGEpLAorICAgICAgICAgICAgICAgICgnX19kb2NfXycsIE5vbmUpLAorICAgICAgICAgICAgICAgICgnX19tZW1iZXJzX18nLCBzZWxmLkNvbG9yLl9fbWVtYmVyc19fKSwKKyAgICAgICAgICAgICAgICAoJ19fbW9kdWxlX18nLCBfX25hbWVfXyksCisgICAgICAgICAgICAgICAgKCdibHVlJywgc2VsZi5Db2xvci5ibHVlKSwKKyAgICAgICAgICAgICAgICAoJ2dyZWVuJywgc2VsZi5Db2xvci5ncmVlbiksCisgICAgICAgICAgICAgICAgKCduYW1lJywgRW51bS5fX2RpY3RfX1snbmFtZSddKSwKKyAgICAgICAgICAgICAgICAoJ3JlZCcsIHNlbGYuQ29sb3IucmVkKSwKKyAgICAgICAgICAgICAgICAoJ3ZhbHVlJywgRW51bS5fX2RpY3RfX1sndmFsdWUnXSksCisgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgcmVzdWx0ID0gZGljdChpbnNwZWN0LmdldG1lbWJlcnMoc2VsZi5Db2xvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLmtleXMoKSwgcmVzdWx0LmtleXMoKSkKKyAgICAgICAgZmFpbGVkID0gRmFsc2UKKyAgICAgICAgZm9yIGsgaW4gdmFsdWVzLmtleXMoKToKKyAgICAgICAgICAgIGlmIHJlc3VsdFtrXSAhPSB2YWx1ZXNba106CisgICAgICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgIHByaW50KCdcbiVzXG4gICAgIGtleTogJXNcbiAgcmVzdWx0OiAlc1xuZXhwZWN0ZWQ6ICVzXG4lc1xuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoJz0nICogNzUsIGssIHJlc3VsdFtrXSwgdmFsdWVzW2tdLCAnPScgKiA3NSksIHNlcD0nJykKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgICAgIGlmIGZhaWxlZDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVzdWx0IGRvZXMgbm90IGVxdWFsIGV4cGVjdGVkLCBzZWUgcHJpbnQgYWJvdmUiKQorCisgICAgZGVmIHRlc3RfaW5zcGVjdF9jbGFzc2lmeV9jbGFzc19hdHRycyhzZWxmKToKKyAgICAgICAgIyBpbmRpcmVjdGx5IHRlc3QgX19vYmpjbGFzc19fCisgICAgICAgIGZyb20gaW5zcGVjdCBpbXBvcnQgQXR0cmlidXRlCisgICAgICAgIHZhbHVlcyA9IFsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19jbGFzc19fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPW9iamVjdCwgb2JqZWN0PUVudW1NZXRhKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19kb2NfXycsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1zZWxmLkNvbG9yLCBvYmplY3Q9Tm9uZSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fbWVtYmVyc19fJywga2luZD0ncHJvcGVydHknLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1FbnVtTWV0YSwgb2JqZWN0PUVudW1NZXRhLl9fbWVtYmVyc19fKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19tb2R1bGVfXycsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1zZWxmLkNvbG9yLCBvYmplY3Q9X19uYW1lX18pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdibHVlJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLmJsdWUpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdncmVlbicsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1zZWxmLkNvbG9yLCBvYmplY3Q9c2VsZi5Db2xvci5ncmVlbiksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J3JlZCcsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1zZWxmLkNvbG9yLCBvYmplY3Q9c2VsZi5Db2xvci5yZWQpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSduYW1lJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW0sIG9iamVjdD1FbnVtLl9fZGljdF9fWyduYW1lJ10pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSd2YWx1ZScsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1FbnVtLCBvYmplY3Q9RW51bS5fX2RpY3RfX1sndmFsdWUnXSksCisgICAgICAgICAgICAgICAgXQorICAgICAgICB2YWx1ZXMuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0ubmFtZSkKKyAgICAgICAgcmVzdWx0ID0gbGlzdChpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKHNlbGYuQ29sb3IpKQorICAgICAgICByZXN1bHQuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0ubmFtZSkKKyAgICAgICAgZmFpbGVkID0gRmFsc2UKKyAgICAgICAgZm9yIHYsIHIgaW4gemlwKHZhbHVlcywgcmVzdWx0KToKKyAgICAgICAgICAgIGlmIHIgIT0gdjoKKyAgICAgICAgICAgICAgICBwcmludCgnXG4lc1xuJXNcbiVzXG4lc1xuJyAlICgnPScgKiA3NSwgciwgdiwgJz0nICogNzUpLCBzZXA9JycpCisgICAgICAgICAgICAgICAgZmFpbGVkID0gVHJ1ZQorICAgICAgICBpZiBmYWlsZWQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlc3VsdCBkb2VzIG5vdCBlcXVhbCBleHBlY3RlZCwgc2VlIHByaW50IGFib3ZlIikKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKaW5kZXggNGFmMjE3Yi4uODc0MmFmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKQEAgLTEsNCArMSw1IEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHN5cwogaW1wb3J0IHBpY2tsZQogCkBAIC0xNjgsMTUgKzE2OSwxMiBAQAogICAgICAgICB4ID0gcmFuZ2UoMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJldmVyc2VkKHgpKSwgdHlwZShpdGVyKHgpKSkKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKLSAgICAgICAgIyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IGFuIGludGVyZmFjZSByZXF1aXJlbWVudAotICAgICAgICBmcm9tIHRlc3QudGVzdF9pdGVybGVuIGltcG9ydCBsZW4KICAgICAgICAgZm9yIHMgaW4gKCdoZWxsbycsIHR1cGxlKCdoZWxsbycpLCBsaXN0KCdoZWxsbycpLCByYW5nZSg1KSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXZlcnNlZChzKSksIGxlbihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmV2ZXJzZWQocykpLCBsZW4ocykpCiAgICAgICAgICAgICByID0gcmV2ZXJzZWQocykKICAgICAgICAgICAgIGxpc3QocikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyKSwgMCkKICAgICAgICAgY2xhc3MgU2VxV2l0aFdlaXJkTGVuOgogICAgICAgICAgICAgY2FsbGVkID0gRmFsc2UKICAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgpAQCAtMTg3LDcgKzE4NSw3IEBACiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICAgICAgICAgIHJldHVybiBpbmRleAogICAgICAgICByID0gcmV2ZXJzZWQoU2VxV2l0aFdlaXJkTGVuKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsZW4sIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBvcGVyYXRvci5sZW5ndGhfaGludCwgcikKIAogCiAgICAgZGVmIHRlc3RfZ2Moc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQppbmRleCA4NzFlZmIyLi5iMzdmMDMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKQEAgLTIxLDEwICsyMSwxMSBAQAogIiIiCiBUZXN0cyBmb3IgZXBvbGwgd3JhcHBlci4KICIiIgotaW1wb3J0IHNvY2tldAogaW1wb3J0IGVycm5vCi1pbXBvcnQgdGltZQoraW1wb3J0IG9zCiBpbXBvcnQgc2VsZWN0CitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydApAQCAtMzMsNyArMzQsNyBAQAogCiB0cnk6CiAgICAgc2VsZWN0LmVwb2xsKCkKLWV4Y2VwdCBJT0Vycm9yIGFzIGU6CitleGNlcHQgT1NFcnJvciBhcyBlOgogICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgogICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgia2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBlcG9sbCgpIikKICAgICByYWlzZQpAQCAtNTUsNyArNTYsNyBAQAogICAgICAgICBjbGllbnQuc2V0YmxvY2tpbmcoRmFsc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgc2VsZi5zZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FSU5QUk9HUkVTUykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCkBAIC04Niw2ICs4NywxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwgWydmb28nXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3QuZXBvbGwsIHt9KQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGVjdC5lcG9sbCgxNikgYXMgZXA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZXAuZmlsZW5vKCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXAuZmlsZW5vKQorCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgogICAgICAgICBzZXJ2ZXIsIGNsaWVudCA9IHNlbGYuX2Nvbm5lY3RlZF9wYWlyKCkKIApAQCAtMTE0LDEyICsxMjIsMTIgQEAKICAgICAgICAgICAgICMgVmFsdWVFcnJvcjogZmlsZSBkZXNjcmlwdG9yIGNhbm5vdCBiZSBhIG5lZ2F0aXZlIGludGVnZXIgKC0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXAucmVnaXN0ZXIsIC0xLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQotICAgICAgICAgICAgIyBJT0Vycm9yOiBbRXJybm8gOV0gQmFkIGZpbGUgZGVzY3JpcHRvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZXAucmVnaXN0ZXIsIDEwMDAwLAorICAgICAgICAgICAgIyBPU0Vycm9yOiBbRXJybm8gOV0gQmFkIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZXAucmVnaXN0ZXIsIDEwMDAwLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQogICAgICAgICAgICAgIyByZWdpc3RlcmluZyB0d2ljZSBhbHNvIHJhaXNlcyBhbiBleGNlcHRpb24KICAgICAgICAgICAgIGVwLnJlZ2lzdGVyKHNlcnZlciwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBlcC5yZWdpc3Rlciwgc2VydmVyLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZXAucmVnaXN0ZXIsIHNlcnZlciwKICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGVwLmNsb3NlKCkKQEAgLTE0MSw3ICsxNDksNyBAQAogICAgICAgICBlcC5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVwMi5wb2xsKDEsIDQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUJBREYsIGUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImVwb2xsIG9uIGNsb3NlZCBmZCBkaWRuJ3QgcmFpc2UgRUJBREYiKQpAQCAtMTU1LDkgKzE2Myw5IEBACiAgICAgICAgIGVwLnJlZ2lzdGVyKGNsaWVudC5maWxlbm8oKSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCB8IHNlbGVjdC5FUE9MTEVUKQogCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIG5vdyA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQotICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgdGhlbiA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4xLCB0aGVuIC0gbm93KQogCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKQEAgLTE2NiwxOSArMTc0LDE2IEBACiAgICAgICAgIGV4cGVjdGVkLnNvcnQoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSwgdGhlbiAtIG5vdykKIAotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKHRpbWVvdXQ9Mi4xLCBtYXhldmVudHM9NCkKLSAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZlbnRzKQogCiAgICAgICAgIGNsaWVudC5zZW5kKGIiSGVsbG8hIikKICAgICAgICAgc2VydmVyLnNlbmQoYiJ3b3JsZCEhISIpCiAKLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgbm93ID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKDEsIDQpCi0gICAgICAgIHRoZW4gPSB0aW1lLnRpbWUoKQorICAgICAgICB0aGVuID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRoZW4gLSBub3cgPiAwLjAxKQogCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKQEAgLTE5MCw5ICsxOTUsOSBAQAogCiAgICAgICAgIGVwLnVucmVnaXN0ZXIoY2xpZW50LmZpbGVubygpKQogICAgICAgICBlcC5tb2RpZnkoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIG5vdyA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQotICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgdGhlbiA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSkKIAogICAgICAgICBleHBlY3RlZCA9IFsoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpXQpAQCAtMjA5LDE0ICsyMTQsNDMgQEAKICAgICAgICAgZXAgPSBzZWxlY3QuZXBvbGwoMTYpCiAgICAgICAgIGVwLnJlZ2lzdGVyKHNlcnZlcikKIAotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBub3cgPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKLSAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCisgICAgICAgIHRoZW4gPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMDEpCiAKICAgICAgICAgc2VydmVyLmNsb3NlKCkKICAgICAgICAgZXAudW5yZWdpc3RlcihmZCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBvcGVuX2ZpbGUgPSBvcGVuKF9fZmlsZV9fLCAicmIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3Blbl9maWxlLmNsb3NlKQorICAgICAgICBmZCA9IG9wZW5fZmlsZS5maWxlbm8oKQorICAgICAgICBlcG9sbCA9IHNlbGVjdC5lcG9sbCgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXBvbGwuZmlsZW5vKCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcG9sbC5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAgZXBvbGwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXBvbGwuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgZXBvbGwuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5tb2RpZnksIGZkLCBzZWxlY3QuRVBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwucG9sbCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5yZWdpc3RlciwgZmQsIHNlbGVjdC5FUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC51bnJlZ2lzdGVyLCBmZCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZXBvbGwuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGVwb2xsLmZpbGVubygpKSwgRmFsc2UpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RFUG9sbCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQppbmRleCA4ZDExZDkwLi4yODgwMWJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CkBAIC04LDggKzgsOCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBjYXB0dXJlZF9vdXRwdXQsIGNoZWNrX2ltcGxfZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgY3B5dGhvbl9vbmx5LCBnY19jb2xsZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBub190cmFjaW5nLCBydW5fdW5pdHRlc3QsIHVubGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MsIGNweXRob25fb25seSwgZ2NfY29sbGVjdCwgcnVuX3VuaXR0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBub190cmFjaW5nLCB1bmxpbmspCiAKIGNsYXNzIE5haXZlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjU3LDIyICsyNTcsMjIgQEAKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAxKX0pLAogICAgICAgICAgICAgKFN5c3RlbUV4aXQsICgnZm9vJywpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsKSwgJ2NvZGUnIDogJ2Zvbyd9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCksICdmaWxlbmFtZScgOiBOb25lLAogICAgICAgICAgICAgICAgICAnZXJybm8nIDogTm9uZSwgJ3N0cmVycm9yJyA6IE5vbmV9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsICdiYXInKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiBOb25lLAogICAgICAgICAgICAgICAgICAnZXJybm8nIDogJ2ZvbycsICdzdHJlcnJvcicgOiAnYmFyJ30pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLCAnZmlsZW5hbWUnIDogJ2JheicsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiAnZm9vJywgJ3N0cmVycm9yJyA6ICdiYXInfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXV4JyksCi0gICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicsICdiYXonLCAncXV1eCcpfSksCi0gICAgICAgICAgICAoRW52aXJvbm1lbnRFcnJvciwgKCdlcnJub1N0cicsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonLCBOb25lLCAncXV1eCcpLAorICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6ICdiYXonLCAnZmlsZW5hbWUyJzogJ3F1dXgnfSksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdlcnJub1N0cicsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJyksCiAgICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnZXJybm8nIDogJ2Vycm5vU3RyJywKICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoMSwgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoMSwgJ3N0ckVycm9yU3RyJyksICdlcnJubycgOiAxLAogICAgICAgICAgICAgICAgICAnc3RyZXJyb3InIDogJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KSwKICAgICAgICAgICAgIChTeW50YXhFcnJvciwgKCksIHsnbXNnJyA6IE5vbmUsICd0ZXh0JyA6IE5vbmUsCkBAIC00MjIsNyArNDIyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NvbnRleHRfXykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NhdXNlX18pCiAKLSAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRW52aXJvbm1lbnRFcnJvcik6CisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGUgPSBNeUV4Y2VwdGlvbigpCkBAIC03NjMsNyArNzYzLDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCAoTm9uZSwgTm9uZSwgTm9uZSkpCiAKLSAgICBkZWYgdGVzdFVuaWNvZGVDaGFuZ2VBdHRyaWJ1dGVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VuaWNvZGVfY2hhbmdlX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgU2VlIGlzc3VlIDczMDkuIFRoaXMgd2FzIGEgY3Jhc2hlci4KIAogICAgICAgICB1ID0gVW5pY29kZUVuY29kZUVycm9yKCdiYXonLCAneHh4eHgnLCAxLCA1LCAnZm9vJykKQEAgLTgwMCw2ICs4MDAsMTIgQEAKICAgICAgICAgdS5zdGFydCA9IDEwMDAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICJjYW4ndCB0cmFuc2xhdGUgY2hhcmFjdGVycyBpbiBwb3NpdGlvbiAxMDAwLTQ6IDk2NTIzMDk1MTQ0MzY4NTcyNDk5NyIpCiAKKyAgICBkZWYgdGVzdF91bmljb2RlX2Vycm9yc19ub19vYmplY3Qoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICMyMTEzNC4KKyAgICAgICAga2xhc3NlcyA9IFVuaWNvZGVFbmNvZGVFcnJvciwgVW5pY29kZURlY29kZUVycm9yLCBVbmljb2RlVHJhbnNsYXRlRXJyb3IKKyAgICAgICAgZm9yIGtsYXNzIGluIGtsYXNzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihrbGFzcy5fX25ld19fKGtsYXNzKSksICIiKQorCiAgICAgQG5vX3RyYWNpbmcKICAgICBkZWYgdGVzdF9iYWRpc2luc3RhbmNlKHNlbGYpOgogICAgICAgICAjIEJ1ZyAjMjU0MjogaWYgaXNzdWJjbGFzcyhlLCBNeUV4Y2VwdGlvbikgcmFpc2VzIGFuIGV4Y2VwdGlvbiwKQEAgLTk2OCw4ICs5NzQsNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYXJnKSwgc3RyKGV4YykpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0cywgSW1wb3J0RXJyb3JUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmF1bHRoYW5kbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKaW5kZXggNzcwZTcwYy4uNDFjY2QxZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKQEAgLTEwLDYgKzEwLDcgQEAKIGZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXh0d3JhcCBpbXBvcnQgZGVkZW50CiAKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC0xOSwxOCArMjAsNiBAQAogCiBUSU1FT1VUID0gMC41CiAKLXRyeToKLSAgICBmcm9tIHJlc291cmNlIGltcG9ydCBzZXRybGltaXQsIFJMSU1JVF9DT1JFLCBlcnJvciBhcyByZXNvdXJjZV9lcnJvcgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHByZXBhcmVfc3VicHJvY2VzcyA9IE5vbmUKLWVsc2U6Ci0gICAgZGVmIHByZXBhcmVfc3VicHJvY2VzcygpOgotICAgICAgICAjIGRvbid0IGNyZWF0ZSBjb3JlIGZpbGUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2V0cmxpbWl0KFJMSU1JVF9DT1JFLCAoMCwgMCkpCi0gICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgcmVzb3VyY2VfZXJyb3IpOgotICAgICAgICAgICAgcGFzcwotCiBkZWYgZXhwZWN0ZWRfdHJhY2ViYWNrKGxpbmVubzEsIGxpbmVubzIsIGhlYWRlciwgbWluX2NvdW50PTEpOgogICAgIHJlZ2V4ID0gaGVhZGVyCiAgICAgcmVnZXggKz0gJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lICVzIGluIGZ1bmNcbicgJSBsaW5lbm8xCkBAIC01OSwxMCArNDgsOSBAQAogICAgICAgICBidWlsZCwgYW5kIHJlcGxhY2UgIkN1cnJlbnQgdGhyZWFkIDB4MDAwMDdmOGQ4ZmJkOTcwMCIgYnkgIkN1cnJlbnQKICAgICAgICAgdGhyZWFkIFhYWCIuCiAgICAgICAgICIiIgotICAgICAgICBvcHRpb25zID0ge30KLSAgICAgICAgaWYgcHJlcGFyZV9zdWJwcm9jZXNzOgotICAgICAgICAgICAgb3B0aW9uc1sncHJlZXhlY19mbiddID0gcHJlcGFyZV9zdWJwcm9jZXNzCi0gICAgICAgIHByb2Nlc3MgPSBzY3JpcHRfaGVscGVyLnNwYXduX3B5dGhvbignLWMnLCBjb2RlLCAqKm9wdGlvbnMpCisgICAgICAgIGNvZGUgPSBkZWRlbnQoY29kZSkuc3RyaXAoKQorICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUpCiAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCiAgICAgICAgIGV4aXRjb2RlID0gcHJvY2Vzcy53YWl0KCkKICAgICAgICAgb3V0cHV0ID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKHN0ZG91dCkKQEAgLTg2LDIzICs3NCwyMiBAQAogICAgICAgICBSYWlzZSBhbiBlcnJvciBpZiB0aGUgb3V0cHV0IGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIGFsbF90aHJlYWRzOgotICAgICAgICAgICAgaGVhZGVyID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCcKKyAgICAgICAgICAgIGhlYWRlciA9ICdDdXJyZW50IHRocmVhZCBYWFggKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaGVhZGVyID0gJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCisgICAgICAgICAgICBoZWFkZXIgPSAnU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpJwogICAgICAgICByZWdleCA9ICIiIgotXkZhdGFsIFB5dGhvbiBlcnJvcjoge25hbWV9CisgICAgICAgICAgICBeRmF0YWwgUHl0aG9uIGVycm9yOiB7bmFtZX0KIAote2hlYWRlcn06Ci0gIEZpbGUgIjxzdHJpbmc+IiwgbGluZSB7bGluZW5vfSBpbiA8bW9kdWxlPgotIiIiLnN0cmlwKCkKLSAgICAgICAgcmVnZXggPSByZWdleC5mb3JtYXQoCisgICAgICAgICAgICB7aGVhZGVyfToKKyAgICAgICAgICAgICAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIHtsaW5lbm99IGluIDxtb2R1bGU+CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmVnZXggPSBkZWRlbnQocmVnZXguZm9ybWF0KAogICAgICAgICAgICAgbGluZW5vPWxpbmVfbnVtYmVyLAogICAgICAgICAgICAgbmFtZT1uYW1lX3JlZ2V4LAotICAgICAgICAgICAgaGVhZGVyPXJlLmVzY2FwZShoZWFkZXIpKQorICAgICAgICAgICAgaGVhZGVyPXJlLmVzY2FwZShoZWFkZXIpKSkuc3RyaXAoKQogICAgICAgICBpZiBvdGhlcl9yZWdleDoKICAgICAgICAgICAgIHJlZ2V4ICs9ICd8JyArIG90aGVyX3JlZ2V4Ci0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICAgICAgb3V0cHV0LCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlLCBmaWxlbmFtZSkKKyAgICAgICAgb3V0cHV0LCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlLCBmaWxlbmFtZSkKICAgICAgICAgb3V0cHV0ID0gJ1xuJy5qb2luKG91dHB1dCkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQsIHJlZ2V4KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV4aXRjb2RlLCAwKQpAQCAtMTExLDI5ICs5OCwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgInRoZSBmaXJzdCBwYWdlIG9mIG1lbW9yeSBpcyBhIG1hcHBlZCByZWFkLW9ubHkgb24gQUlYIikKICAgICBkZWYgdGVzdF9yZWFkX251bGwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fcmVhZF9udWxsKCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3JlYWRfbnVsbCgpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgIyBJc3N1ZSAjMTI3MDA6IFJlYWQgTlVMTCByYWlzZXMgU0lHSUxMIG9uIE1hYyBPUyBYIExpb24KICAgICAgICAgICAgICcoPzpTZWdtZW50YXRpb24gZmF1bHR8QnVzIGVycm9yfElsbGVnYWwgaW5zdHJ1Y3Rpb24pJykKIAogICAgIGRlZiB0ZXN0X3NpZ3NlZ3Yoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fc2lnc2VndigpCi0iIiIuc3RyaXAoKSwKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAnU2VnbWVudGF0aW9uIGZhdWx0JykKIAogICAgIGRlZiB0ZXN0X3NpZ2FicnQoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fc2lnYWJydCgpCi0iIiIuc3RyaXAoKSwKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdhYnJ0KCkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAnQWJvcnRlZCcpCiAKQEAgLTE0MSwxMCArMTI4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAiU0lHRlBFIGNhbm5vdCBiZSBjYXVnaHQgb24gV2luZG93cyIpCiAgICAgZGVmIHRlc3Rfc2lnZnBlKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ZhdGFsX2Vycm9yKCIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZmF1bHRoYW5kbGVyLmVuYWJsZSgpCi1mYXVsdGhhbmRsZXIuX3NpZ2ZwZSgpCi0iIiIuc3RyaXAoKSwKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdmcGUoKQorICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgMywKICAgICAgICAgICAgICdGbG9hdGluZyBwb2ludCBleGNlcHRpb24nKQogCkBAIC0xNTIsMTAgKzEzOSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgIm5lZWQgZmF1bHRoYW5kbGVyLl9zaWdidXMoKSIpCiAgICAgZGVmIHRlc3Rfc2lnYnVzKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ZhdGFsX2Vycm9yKCIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZmF1bHRoYW5kbGVyLmVuYWJsZSgpCi1mYXVsdGhhbmRsZXIuX3NpZ2J1cygpCi0iIiIuc3RyaXAoKSwKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdidXMoKQorICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgMywKICAgICAgICAgICAgICdCdXMgZXJyb3InKQogCkBAIC0xNjMsMTggKzE1MCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgIm5lZWQgZmF1bHRoYW5kbGVyLl9zaWdpbGwoKSIpCiAgICAgZGVmIHRlc3Rfc2lnaWxsKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ZhdGFsX2Vycm9yKCIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZmF1bHRoYW5kbGVyLmVuYWJsZSgpCi1mYXVsdGhhbmRsZXIuX3NpZ2lsbCgpCi0iIiIuc3RyaXAoKSwKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdpbGwoKQorICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgMywKICAgICAgICAgICAgICdJbGxlZ2FsIGluc3RydWN0aW9uJykKIAogICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ZhdGFsX2Vycm9yKCIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZmF1bHRoYW5kbGVyLl9mYXRhbF9lcnJvcihiJ3h5eicpCi0iIiIuc3RyaXAoKSwKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5fZmF0YWxfZXJyb3IoYid4eXonKQorICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgMiwKICAgICAgICAgICAgICd4eXonKQogCkBAIC0xODUsNTUgKzE3Miw1NCBAQAogICAgICAgICAgICAgICAgICAgICAgJ25lZWQgZmF1bHRoYW5kbGVyLl9zdGFja19vdmVyZmxvdygpJykKICAgICBkZWYgdGVzdF9zdGFja19vdmVyZmxvdyhzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9zdGFja19vdmVyZmxvdygpCi0iIiIuc3RyaXAoKSwKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zdGFja19vdmVyZmxvdygpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgJyg/OlNlZ21lbnRhdGlvbiBmYXVsdHxCdXMgZXJyb3IpJywKICAgICAgICAgICAgIG90aGVyX3JlZ2V4PSd1bmFibGUgdG8gcmFpc2UgYSBzdGFjayBvdmVyZmxvdycpCiAKICAgICBkZWYgdGVzdF9naWxfcmVsZWFzZWQoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fcmVhZF9udWxsKFRydWUpCi0iIiIuc3RyaXAoKSwKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9yZWFkX251bGwoVHJ1ZSkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAnKD86U2VnbWVudGF0aW9uIGZhdWx0fEJ1cyBlcnJvcnxJbGxlZ2FsIGluc3RydWN0aW9uKScpCiAKICAgICBkZWYgdGVzdF9lbmFibGVfZmlsZShzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wb3JhcnlfZmlsZW5hbWUoKSBhcyBmaWxlbmFtZToKICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1vdXRwdXQgPSBvcGVuKHtmaWxlbmFtZX0sICd3YicpCi1mYXVsdGhhbmRsZXIuZW5hYmxlKG91dHB1dCkKLWZhdWx0aGFuZGxlci5fc2lnc2VndigpCi0iIiIuc3RyaXAoKS5mb3JtYXQoZmlsZW5hbWU9cmVwcihmaWxlbmFtZSkpLAorICAgICAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcGVuKHtmaWxlbmFtZX0sICd3YicpCisgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZShvdXRwdXQpCisgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKKyAgICAgICAgICAgICAgICAiIiIuZm9ybWF0KGZpbGVuYW1lPXJlcHIoZmlsZW5hbWUpKSwKICAgICAgICAgICAgICAgICA0LAogICAgICAgICAgICAgICAgICdTZWdtZW50YXRpb24gZmF1bHQnLAogICAgICAgICAgICAgICAgIGZpbGVuYW1lPWZpbGVuYW1lKQogCiAgICAgZGVmIHRlc3RfZW5hYmxlX3NpbmdsZV90aHJlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKGFsbF90aHJlYWRzPUZhbHNlKQotZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZShhbGxfdGhyZWFkcz1GYWxzZSkKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5fc2lnc2VndigpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgJ1NlZ21lbnRhdGlvbiBmYXVsdCcsCiAgICAgICAgICAgICBhbGxfdGhyZWFkcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2Rpc2FibGUoc2VsZik6CiAgICAgICAgIGNvZGUgPSAiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLmRpc2FibGUoKQotZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKLSIiIi5zdHJpcCgpCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKCkKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kaXNhYmxlKCkKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5fc2lnc2VndigpCisgICAgICAgICAgICAiIiIKICAgICAgICAgbm90X2V4cGVjdGVkID0gJ0ZhdGFsIFB5dGhvbiBlcnJvcicKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICAgICBzdGRlcnIsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUpCisgICAgICAgIHN0ZGVyciwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSkKICAgICAgICAgc3RkZXIgPSAnXG4nLmpvaW4oc3RkZXJyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90X2V4cGVjdGVkIG5vdCBpbiBzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAiJXIgaXMgcHJlc2VudCBpbiAlciIgJSAobm90X2V4cGVjdGVkLCBzdGRlcnIpKQpAQCAtMjY0LDE2ICsyNTAsMzQgQEAKICAgICBkZWYgdGVzdF9kaXNhYmxlZF9ieV9kZWZhdWx0KHNlbGYpOgogICAgICAgICAjIEJ5IGRlZmF1bHQsIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGRpc2FibGVkCiAgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCi0gICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKLSAgICAgICAgc3Rkb3V0ID0gKHN0ZG91dCArIHN0ZGVycikuc3RyaXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYiJGYWxzZSIpCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctRScsICctYycsIGNvZGUpCisgICAgICAgICMgZG9uJ3QgdXNlIGFzc2VydF9weXRob25fb2soKSBiZWNhdXNlIGl0IGFsd2F5cyBlbmFibGUgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIkZhbHNlIikKIAogICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBUZXN0IHB5dGhvbiAtWCBmYXVsdGhhbmRsZXIKICAgICAgICAgY29kZSA9ICJpbXBvcnQgZmF1bHRoYW5kbGVyOyBwcmludChmYXVsdGhhbmRsZXIuaXNfZW5hYmxlZCgpKSIKLSAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVgiLCAiZmF1bHRoYW5kbGVyIiwgIi1jIiwgY29kZSkKLSAgICAgICAgc3Rkb3V0ID0gKHN0ZG91dCArIHN0ZGVycikuc3RyaXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYiJUcnVlIikKKyAgICAgICAgYXJncyA9IChzeXMuZXhlY3V0YWJsZSwgIi1FIiwgIi1YIiwgImZhdWx0aGFuZGxlciIsICItYyIsIGNvZGUpCisgICAgICAgICMgZG9uJ3QgdXNlIGFzc2VydF9weXRob25fb2soKSBiZWNhdXNlIGl0IGFsd2F5cyBlbmFibGUgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIlRydWUiKQorCisgICAgZGVmIHRlc3RfZW52X3ZhcihzZWxmKToKKyAgICAgICAgIyBlbXB0eSBlbnYgdmFyCisgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGUpCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnUFlUSE9ORkFVTFRIQU5ETEVSJ10gPSAnJworICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJGYWxzZSIpCisKKyAgICAgICAgIyBub24tZW1wdHkgZW52IHZhcgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTkZBVUxUSEFORExFUiddID0gJzEnCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIlRydWUiKQogCiAgICAgZGVmIGNoZWNrX2R1bXBfdHJhY2ViYWNrKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiCkBAIC0yODEsMjAgKzI4NSwyMCBAQAogICAgICAgICBSYWlzZSBhbiBlcnJvciBpZiB0aGUgb3V0cHV0IGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC4KICAgICAgICAgIiIiCiAgICAgICAgIGNvZGUgPSAiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKIAotZGVmIGZ1bmNCKCk6Ci0gICAgaWYge2hhc19maWxlbmFtZX06Ci0gICAgICAgIHdpdGggb3Blbih7ZmlsZW5hbWV9LCAid2IiKSBhcyBmcDoKLSAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhmcCwgYWxsX3RocmVhZHM9RmFsc2UpCi0gICAgZWxzZToKLSAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGFsbF90aHJlYWRzPUZhbHNlKQorICAgICAgICAgICAgZGVmIGZ1bmNCKCk6CisgICAgICAgICAgICAgICAgaWYge2hhc19maWxlbmFtZX06CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbih7ZmlsZW5hbWV9LCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhmcCwgYWxsX3RocmVhZHM9RmFsc2UpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGFsbF90aHJlYWRzPUZhbHNlKQogCi1kZWYgZnVuY0EoKToKLSAgICBmdW5jQigpCisgICAgICAgICAgICBkZWYgZnVuY0EoKToKKyAgICAgICAgICAgICAgICBmdW5jQigpCiAKLWZ1bmNBKCkKLSIiIi5zdHJpcCgpCisgICAgICAgICAgICBmdW5jQSgpCisgICAgICAgICAgICAiIiIKICAgICAgICAgY29kZSA9IGNvZGUuZm9ybWF0KAogICAgICAgICAgICAgZmlsZW5hbWU9cmVwcihmaWxlbmFtZSksCiAgICAgICAgICAgICBoYXNfZmlsZW5hbWU9Ym9vbChmaWxlbmFtZSksCkBAIC0zMDQsNyArMzA4LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVubyA9IDgKICAgICAgICAgZXhwZWN0ZWQgPSBbCi0gICAgICAgICAgICAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAorICAgICAgICAgICAgJ1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lICVzIGluIGZ1bmNCJyAlIGxpbmVubywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxMSBpbiBmdW5jQScsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMTMgaW4gPG1vZHVsZT4nCkBAIC0zMjUsMTggKzMyOSwxOCBAQAogICAgICAgICBmdW5jX25hbWUgPSAneCcgKiAobWF4bGVuICsgNTApCiAgICAgICAgIHRydW5jYXRlZCA9ICd4JyAqIG1heGxlbiArICcuLi4nCiAgICAgICAgIGNvZGUgPSAiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKIAotZGVmIHtmdW5jX25hbWV9KCk6Ci0gICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGFsbF90aHJlYWRzPUZhbHNlKQorICAgICAgICAgICAgZGVmIHtmdW5jX25hbWV9KCk6CisgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGFsbF90aHJlYWRzPUZhbHNlKQogCi17ZnVuY19uYW1lfSgpCi0iIiIuc3RyaXAoKQorICAgICAgICAgICAge2Z1bmNfbmFtZX0oKQorICAgICAgICAgICAgIiIiCiAgICAgICAgIGNvZGUgPSBjb2RlLmZvcm1hdCgKICAgICAgICAgICAgIGZ1bmNfbmFtZT1mdW5jX25hbWUsCiAgICAgICAgICkKICAgICAgICAgZXhwZWN0ZWQgPSBbCi0gICAgICAgICAgICAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAorICAgICAgICAgICAgJ1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDQgaW4gJXMnICUgdHJ1bmNhdGVkLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDYgaW4gPG1vZHVsZT4nCiAgICAgICAgIF0KQEAgLTM1MSwzNyArMzU1LDM3IEBACiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAiIiIKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZCwgRXZlbnQKLWltcG9ydCB0aW1lCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkLCBFdmVudAorICAgICAgICAgICAgaW1wb3J0IHRpbWUKIAotZGVmIGR1bXAoKToKLSAgICBpZiB7ZmlsZW5hbWV9OgotICAgICAgICB3aXRoIG9wZW4oe2ZpbGVuYW1lfSwgIndiIikgYXMgZnA6Ci0gICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soZnAsIGFsbF90aHJlYWRzPVRydWUpCi0gICAgZWxzZToKLSAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGFsbF90aHJlYWRzPVRydWUpCisgICAgICAgICAgICBkZWYgZHVtcCgpOgorICAgICAgICAgICAgICAgIGlmIHtmaWxlbmFtZX06CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbih7ZmlsZW5hbWV9LCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhmcCwgYWxsX3RocmVhZHM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9VHJ1ZSkKIAotY2xhc3MgV2FpdGVyKFRocmVhZCk6Ci0gICAgIyBhdm9pZCBibG9ja2luZyBpZiB0aGUgbWFpbiB0aHJlYWQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLSAgICBkYWVtb24gPSBUcnVlCisgICAgICAgICAgICBjbGFzcyBXYWl0ZXIoVGhyZWFkKToKKyAgICAgICAgICAgICAgICAjIGF2b2lkIGJsb2NraW5nIGlmIHRoZSBtYWluIHRocmVhZCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgIGRhZW1vbiA9IFRydWUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYucnVubmluZyA9IEV2ZW50KCkKLSAgICAgICAgc2VsZi5zdG9wID0gRXZlbnQoKQorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IEV2ZW50KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wID0gRXZlbnQoKQogCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5uaW5nLnNldCgpCi0gICAgICAgIHNlbGYuc3RvcC53YWl0KCkKKyAgICAgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmcuc2V0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wLndhaXQoKQogCi13YWl0ZXIgPSBXYWl0ZXIoKQotd2FpdGVyLnN0YXJ0KCkKLXdhaXRlci5ydW5uaW5nLndhaXQoKQotZHVtcCgpCi13YWl0ZXIuc3RvcC5zZXQoKQotd2FpdGVyLmpvaW4oKQotIiIiLnN0cmlwKCkKKyAgICAgICAgICAgIHdhaXRlciA9IFdhaXRlcigpCisgICAgICAgICAgICB3YWl0ZXIuc3RhcnQoKQorICAgICAgICAgICAgd2FpdGVyLnJ1bm5pbmcud2FpdCgpCisgICAgICAgICAgICBkdW1wKCkKKyAgICAgICAgICAgIHdhaXRlci5zdG9wLnNldCgpCisgICAgICAgICAgICB3YWl0ZXIuam9pbigpCisgICAgICAgICAgICAiIiIKICAgICAgICAgY29kZSA9IGNvZGUuZm9ybWF0KGZpbGVuYW1lPXJlcHIoZmlsZW5hbWUpKQogICAgICAgICBvdXRwdXQsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lKQogICAgICAgICBvdXRwdXQgPSAnXG4nLmpvaW4ob3V0cHV0KQpAQCAtMzkwLDE3ICszOTQsMTcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVubyA9IDEwCiAgICAgICAgIHJlZ2V4ID0gIiIiCi1eVGhyZWFkIDB4WzAtOWEtZl0rOgotKD86ICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIFtfYS16XSsKLSl7ezEsM319ICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMjMgaW4gcnVuCi0gIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcF9pbm5lcgotICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIF9ib290c3RyYXAKKyAgICAgICAgICAgIF5UaHJlYWQgMHhbMC05YS1mXSsgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgICAgICAgICAgICAoPzogIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gW19hLXpdKworICAgICAgICAgICAgKXt7MSwzfX0gIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyMyBpbiBydW4KKyAgICAgICAgICAgICAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBfYm9vdHN0cmFwX2lubmVyCisgICAgICAgICAgICAgIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcAogCi1DdXJyZW50IHRocmVhZCBYWFg6Ci0gIEZpbGUgIjxzdHJpbmc+IiwgbGluZSB7bGluZW5vfSBpbiBkdW1wCi0gIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyOCBpbiA8bW9kdWxlPiQKLSIiIi5zdHJpcCgpCi0gICAgICAgIHJlZ2V4ID0gcmVnZXguZm9ybWF0KGxpbmVubz1saW5lbm8pCisgICAgICAgICAgICBDdXJyZW50IHRocmVhZCBYWFggXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgICAgICAgICAgICAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSB7bGluZW5vfSBpbiBkdW1wCisgICAgICAgICAgICAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyOCBpbiA8bW9kdWxlPiQKKyAgICAgICAgICAgICIiIgorICAgICAgICByZWdleCA9IGRlZGVudChyZWdleC5mb3JtYXQobGluZW5vPWxpbmVubykpLnN0cmlwKCkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQsIHJlZ2V4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRjb2RlLCAwKQogCkBAIC00MjEsMjkgKzQyNSwyOSBAQAogICAgICAgICAiIiIKICAgICAgICAgdGltZW91dF9zdHIgPSBzdHIoZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9VElNRU9VVCkpCiAgICAgICAgIGNvZGUgPSAiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWltcG9ydCB0aW1lCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBpbXBvcnQgdGltZQogCi1kZWYgZnVuYyh0aW1lb3V0LCByZXBlYXQsIGNhbmNlbCwgZmlsZSwgbG9vcHMpOgotICAgIGZvciBsb29wIGluIHJhbmdlKGxvb3BzKToKLSAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyKHRpbWVvdXQsIHJlcGVhdD1yZXBlYXQsIGZpbGU9ZmlsZSkKLSAgICAgICAgaWYgY2FuY2VsOgotICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcigpCi0gICAgICAgIHRpbWUuc2xlZXAodGltZW91dCAqIDUpCi0gICAgICAgIGZhdWx0aGFuZGxlci5jYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKQorICAgICAgICAgICAgZGVmIGZ1bmModGltZW91dCwgcmVwZWF0LCBjYW5jZWwsIGZpbGUsIGxvb3BzKToKKyAgICAgICAgICAgICAgICBmb3IgbG9vcCBpbiByYW5nZShsb29wcyk6CisgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlcih0aW1lb3V0LCByZXBlYXQ9cmVwZWF0LCBmaWxlPWZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIGNhbmNlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5jYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHRpbWVvdXQgKiA1KQorICAgICAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCkKIAotdGltZW91dCA9IHt0aW1lb3V0fQotcmVwZWF0ID0ge3JlcGVhdH0KLWNhbmNlbCA9IHtjYW5jZWx9Ci1sb29wcyA9IHtsb29wc30KLWlmIHtoYXNfZmlsZW5hbWV9OgotICAgIGZpbGUgPSBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpCi1lbHNlOgotICAgIGZpbGUgPSBOb25lCi1mdW5jKHRpbWVvdXQsIHJlcGVhdCwgY2FuY2VsLCBmaWxlLCBsb29wcykKLWlmIGZpbGUgaXMgbm90IE5vbmU6Ci0gICAgZmlsZS5jbG9zZSgpCi0iIiIuc3RyaXAoKQorICAgICAgICAgICAgdGltZW91dCA9IHt0aW1lb3V0fQorICAgICAgICAgICAgcmVwZWF0ID0ge3JlcGVhdH0KKyAgICAgICAgICAgIGNhbmNlbCA9IHtjYW5jZWx9CisgICAgICAgICAgICBsb29wcyA9IHtsb29wc30KKyAgICAgICAgICAgIGlmIHtoYXNfZmlsZW5hbWV9OgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpbGUgPSBOb25lCisgICAgICAgICAgICBmdW5jKHRpbWVvdXQsIHJlcGVhdCwgY2FuY2VsLCBmaWxlLCBsb29wcykKKyAgICAgICAgICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAiIiIKICAgICAgICAgY29kZSA9IGNvZGUuZm9ybWF0KAogICAgICAgICAgICAgdGltZW91dD1USU1FT1VULAogICAgICAgICAgICAgcmVwZWF0PXJlcGVhdCwKQEAgLTQ1OSw3ICs0NjMsNyBAQAogICAgICAgICAgICAgY291bnQgPSBsb29wcwogICAgICAgICAgICAgaWYgcmVwZWF0OgogICAgICAgICAgICAgICAgIGNvdW50ICo9IDIKLSAgICAgICAgICAgIGhlYWRlciA9IHInVGltZW91dCBcKCVzXCkhXG5UaHJlYWQgMHhbMC05YS1mXSs6XG4nICUgdGltZW91dF9zdHIKKyAgICAgICAgICAgIGhlYWRlciA9IHInVGltZW91dCBcKCVzXCkhXG5UaHJlYWQgMHhbMC05YS1mXSsgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nICUgdGltZW91dF9zdHIKICAgICAgICAgICAgIHJlZ2V4ID0gZXhwZWN0ZWRfdHJhY2ViYWNrKDksIDIwLCBoZWFkZXIsIG1pbl9jb3VudD1jb3VudCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgodHJhY2UsIHJlZ2V4KQogICAgICAgICBlbHNlOgpAQCAtNTEwLDQ1ICs1MTQsNDUgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNpZ251bSA9IHNpZ25hbC5TSUdVU1IxCiAgICAgICAgIGNvZGUgPSAiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWltcG9ydCBvcwotaW1wb3J0IHNpZ25hbAotaW1wb3J0IHN5cworICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgc2lnbmFsCisgICAgICAgICAgICBpbXBvcnQgc3lzCiAKLWRlZiBmdW5jKHNpZ251bSk6Ci0gICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbnVtKQorICAgICAgICAgICAgZGVmIGZ1bmMoc2lnbnVtKToKKyAgICAgICAgICAgICAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWdudW0pCiAKLWRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgotICAgIGhhbmRsZXIuY2FsbGVkID0gVHJ1ZQotaGFuZGxlci5jYWxsZWQgPSBGYWxzZQorICAgICAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICAgICAgaGFuZGxlci5jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICBoYW5kbGVyLmNhbGxlZCA9IEZhbHNlCiAKLWV4aXRjb2RlID0gMAotc2lnbnVtID0ge3NpZ251bX0KLXVucmVnaXN0ZXIgPSB7dW5yZWdpc3Rlcn0KLWNoYWluID0ge2NoYWlufQorICAgICAgICAgICAgZXhpdGNvZGUgPSAwCisgICAgICAgICAgICBzaWdudW0gPSB7c2lnbnVtfQorICAgICAgICAgICAgdW5yZWdpc3RlciA9IHt1bnJlZ2lzdGVyfQorICAgICAgICAgICAgY2hhaW4gPSB7Y2hhaW59CiAKLWlmIHtoYXNfZmlsZW5hbWV9OgotICAgIGZpbGUgPSBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpCi1lbHNlOgotICAgIGZpbGUgPSBOb25lCi1pZiBjaGFpbjoKLSAgICBzaWduYWwuc2lnbmFsKHNpZ251bSwgaGFuZGxlcikKLWZhdWx0aGFuZGxlci5yZWdpc3RlcihzaWdudW0sIGZpbGU9ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICBhbGxfdGhyZWFkcz17YWxsX3RocmVhZHN9LCBjaGFpbj17Y2hhaW59KQotaWYgdW5yZWdpc3RlcjoKLSAgICBmYXVsdGhhbmRsZXIudW5yZWdpc3RlcihzaWdudW0pCi1mdW5jKHNpZ251bSkKLWlmIGNoYWluIGFuZCBub3QgaGFuZGxlci5jYWxsZWQ6Ci0gICAgaWYgZmlsZSBpcyBub3QgTm9uZToKLSAgICAgICAgb3V0cHV0ID0gZmlsZQotICAgIGVsc2U6Ci0gICAgICAgIG91dHB1dCA9IHN5cy5zdGRlcnIKLSAgICBwcmludCgiRXJyb3I6IHNpZ25hbCBoYW5kbGVyIG5vdCBjYWxsZWQhIiwgZmlsZT1vdXRwdXQpCi0gICAgZXhpdGNvZGUgPSAxCi1pZiBmaWxlIGlzIG5vdCBOb25lOgotICAgIGZpbGUuY2xvc2UoKQotc3lzLmV4aXQoZXhpdGNvZGUpCi0iIiIuc3RyaXAoKQorICAgICAgICAgICAgaWYge2hhc19maWxlbmFtZX06CisgICAgICAgICAgICAgICAgZmlsZSA9IG9wZW4oe2ZpbGVuYW1lfSwgIndiIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGNoYWluOgorICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbnVtLCBoYW5kbGVyKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLnJlZ2lzdGVyKHNpZ251bSwgZmlsZT1maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF90aHJlYWRzPXthbGxfdGhyZWFkc30sIGNoYWluPXtjaGFpbn0pCisgICAgICAgICAgICBpZiB1bnJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci51bnJlZ2lzdGVyKHNpZ251bSkKKyAgICAgICAgICAgIGZ1bmMoc2lnbnVtKQorICAgICAgICAgICAgaWYgY2hhaW4gYW5kIG5vdCBoYW5kbGVyLmNhbGxlZDoKKyAgICAgICAgICAgICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBmaWxlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZGVycgorICAgICAgICAgICAgICAgIHByaW50KCJFcnJvcjogc2lnbmFsIGhhbmRsZXIgbm90IGNhbGxlZCEiLCBmaWxlPW91dHB1dCkKKyAgICAgICAgICAgICAgICBleGl0Y29kZSA9IDEKKyAgICAgICAgICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzeXMuZXhpdChleGl0Y29kZSkKKyAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoCiAgICAgICAgICAgICBmaWxlbmFtZT1yZXByKGZpbGVuYW1lKSwKICAgICAgICAgICAgIGhhc19maWxlbmFtZT1ib29sKGZpbGVuYW1lKSwKQEAgLTU2MSw5ICs1NjUsOSBAQAogICAgICAgICB0cmFjZSA9ICdcbicuam9pbih0cmFjZSkKICAgICAgICAgaWYgbm90IHVucmVnaXN0ZXI6CiAgICAgICAgICAgICBpZiBhbGxfdGhyZWFkczoKLSAgICAgICAgICAgICAgICByZWdleCA9ICdDdXJyZW50IHRocmVhZCBYWFg6XG4nCisgICAgICAgICAgICAgICAgcmVnZXggPSAnQ3VycmVudCB0aHJlYWQgWFhYIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZWdleCA9ICdUcmFjZWJhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCisgICAgICAgICAgICAgICAgcmVnZXggPSAnU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCiAgICAgICAgICAgICByZWdleCA9IGV4cGVjdGVkX3RyYWNlYmFjayg3LCAyOCwgcmVnZXgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHRyYWNlLCByZWdleCkKICAgICAgICAgZWxzZToKQEAgLTU4OSw5ICs1OTMsMzEgQEAKICAgICBkZWYgdGVzdF9yZWdpc3Rlcl9jaGFpbihzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19yZWdpc3RlcihjaGFpbj1UcnVlKQogCisgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgZGVmIGNoZWNrX3N0ZGVycl9ub25lKHNlbGYpOgorICAgICAgICBzdGRlcnIgPSBzeXMuc3RkZXJyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBOb25lCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJzeXMuc3RkZXJyIGlzIE5vbmUiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0ZGVycgogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRmF1bHRIYW5kbGVyVGVzdHMpCisgICAgZGVmIHRlc3Rfc3RkZXJyX05vbmUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxNDk3OiBwcm92aWRlIGFuIGhlbHBmdWwgZXJyb3IgaWYgc3lzLnN0ZGVyciBpcyBOb25lLAorICAgICAgICAjIGluc3RlYWQgb2YganVzdCBhbiBhdHRyaWJ1dGUgZXJyb3I6ICJOb25lIGhhcyBubyBhdHRyaWJ1dGUgZmlsZW5vIi4KKyAgICAgICAgd2l0aCBzZWxmLmNoZWNrX3N0ZGVycl9ub25lKCk6CisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKCkKKyAgICAgICAgd2l0aCBzZWxmLmNoZWNrX3N0ZGVycl9ub25lKCk6CisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soKQorICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuY2hlY2tfc3RkZXJyX25vbmUoKToKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIoMWUtMykKKyAgICAgICAgaWYgaGFzYXR0cihmYXVsdGhhbmRsZXIsICJyZWdpc3RlciIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmNoZWNrX3N0ZGVycl9ub25lKCk6CisgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLnJlZ2lzdGVyKHNpZ25hbC5TSUdVU1IxKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CmluZGV4IDE4MTBjNGUuLmUzYjdlZDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mY250bC5weQpAQCAtMSw3ICsxLDQgQEAKICIiIlRlc3QgcHJvZ3JhbSBmb3IgdGhlIGZjbnRsIEMgbW9kdWxlLgotCi1PUy8yK0VNWCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZpbGUgbG9ja2luZyBvcGVyYXRpb25zLgotCiAiIiIKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IG9zCkBAIC0zOSw4ICszNiw2IEBACiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ3FxaWhoaScsIDAsIDAsIDAsIGZjbnRsLkZfV1JMQ0ssIDAsIDApCiAgICAgZWxpZiBzeXMucGxhdGZvcm0gaW4gWydhaXgzJywgJ2FpeDQnLCAnaHAtdXhCJywgJ3VuaXh3YXJlNyddOgogICAgICAgICBsb2NrZGF0YSA9IHN0cnVjdC5wYWNrKCdoaGxsbGlpJywgZmNudGwuRl9XUkxDSywgMCwgMCwgMCwgMCwgMCwgMCkKLSAgICBlbGlmIHN5cy5wbGF0Zm9ybSBpbiBbJ29zMmVteCddOgotICAgICAgICBsb2NrZGF0YSA9IE5vbmUKICAgICBlbHNlOgogICAgICAgICBsb2NrZGF0YSA9IHN0cnVjdC5wYWNrKCdoaCcrc3RhcnRfbGVuKydoaCcsIGZjbnRsLkZfV1JMQ0ssIDAsIDAsIDAsIDAsIDApCiAgICAgaWYgbG9ja2RhdGE6CkBAIC03MiwxOCArNjcsMjAgQEAKICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYuZmlsZW5vKCksIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgnU3RhdHVzIGZyb20gZmNudGwgd2l0aCBPX05PTkJMT0NLOiAnLCBydikKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiBbJ29zMmVteCddOgotICAgICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYuZmlsZW5vKCksIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKLSAgICAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJ1N0cmluZyBmcm9tIGZjbnRsIHdpdGggRl9TRVRMS1c6ICcsIHJlcHIocnYpKQorICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ1N0cmluZyBmcm9tIGZjbnRsIHdpdGggRl9TRVRMS1c6ICcsIHJlcHIocnYpKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfZmNudGxfZmlsZV9kZXNjcmlwdG9yKHNlbGYpOgogICAgICAgICAjIGFnYWluLCBidXQgcGFzcyB0aGUgZmlsZSByYXRoZXIgdGhhbiBudW1lcmljIGRlc2NyaXB0b3IKICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICd3YicpCiAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVEZMLCBvcy5PX05PTkJMT0NLKQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIFsnb3MyZW14J106Ci0gICAgICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZiwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ1N0YXR1cyBmcm9tIGZjbnRsIHdpdGggT19OT05CTE9DSzogJywgcnYpCisgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9mY250bF9iYWRfZmlsZShzZWxmKToKQEAgLTEyNyw2ICsxMjQsMjYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogCisgICAgZGVmIHRlc3RfZmxvY2soc2VsZik6CisgICAgICAgICMgU29sYXJpcyBuZWVkcyByZWFkYWJsZSBmaWxlIGZvciBzaGFyZWQgbG9jaworICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3diKycpCisgICAgICAgIGZpbGVubyA9IHNlbGYuZi5maWxlbm8oKQorICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIGZjbnRsLkxPQ0tfU0gpCisgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgZmNudGwuTE9DS19VTikKKyAgICAgICAgZmNudGwuZmxvY2soc2VsZi5mLCBmY250bC5MT0NLX1NIIHwgZmNudGwuTE9DS19OQikKKyAgICAgICAgZmNudGwuZmxvY2soc2VsZi5mLCBmY250bC5MT0NLX1VOKQorICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIGZjbnRsLkxPQ0tfRVgpCisgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgZmNudGwuTE9DS19VTikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmY250bC5mbG9jaywgLTEsIGZjbnRsLkxPQ0tfU0gpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmNudGwuZmxvY2ssICdzcGFtJywgZmNudGwuTE9DS19TSCkKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9mbG9ja19vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmY250bC5mbG9jaywgX3Rlc3RjYXBpLklOVF9NQVgrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmNudGwuTE9DS19TSCkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFRlc3RGY250bCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQppbmRleCA3NmIxNjk0Li5kNTRlOTc2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCiAKICAgICAgICAgaWYgaGFzYXR0cihmLCAicmVhZGludG8iKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChJT0Vycm9yLCBUeXBlRXJyb3IpLCBmLnJlYWRpbnRvLCAiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPU0Vycm9yLCBUeXBlRXJyb3IpLCBmLnJlYWRpbnRvLCAiIikKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKIApAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5fX2V4aXRfXygqc3lzLmV4Y19pbmZvKCkpLCBOb25lKQogCiAgICAgZGVmIHRlc3RSZWFkV2hlbldyaXRpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmYucmVhZCkKIAogY2xhc3MgQ0F1dG9GaWxlVGVzdHMoQXV0b0ZpbGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIG9wZW4gPSBpby5vcGVuCkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgICAgICAgICBkID0gaW50KGYucmVhZCgpLmRlY29kZSgiYXNjaWkiKSkKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Vycm9yIHNldHRpbmcgYnVmZmVyIHNpemUgJWQ6ICVzJyAlIChzLCBzdHIobXNnKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQppbmRleCAwOTU5OTc5Li5iNWIyNGEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CkBAIC0xLDggKzEsMTIgQEAKLQotaW1wb3J0IG9zLCBmaWxlY21wLCBzaHV0aWwsIHRlbXBmaWxlCitpbXBvcnQgZmlsZWNtcAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAorCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAorCiBjbGFzcyBGaWxlQ29tcGFyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYubmFtZSA9IHN1cHBvcnQuVEVTVEZOCkBAIC0xMCwxMyArMTQsMTEgQEAKICAgICAgICAgc2VsZi5uYW1lX2RpZmYgPSBzdXBwb3J0LlRFU1RGTiArICctZGlmZicKICAgICAgICAgZGF0YSA9ICdDb250ZW50cyBvZiBmaWxlIGdvIGhlcmUuXG4nCiAgICAgICAgIGZvciBuYW1lIGluIFtzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lLCBzZWxmLm5hbWVfZGlmZl06Ci0gICAgICAgICAgICBvdXRwdXQgPSBvcGVuKG5hbWUsICd3JykKLSAgICAgICAgICAgIG91dHB1dC53cml0ZShkYXRhKQotICAgICAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihuYW1lLCAndycpIGFzIG91dHB1dDoKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoZGF0YSkKIAotICAgICAgICBvdXRwdXQgPSBvcGVuKHNlbGYubmFtZV9kaWZmLCAnYSsnKQotICAgICAgICBvdXRwdXQud3JpdGUoJ0FuIGV4dHJhIGxpbmUuXG4nKQotICAgICAgICBvdXRwdXQuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5uYW1lX2RpZmYsICdhKycpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIG91dHB1dC53cml0ZSgnQW4gZXh0cmEgbGluZS5cbicpCiAgICAgICAgIHNlbGYuZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC0yNSwxMyArMjcsMTMgQEAKICAgICAgICAgb3MudW5saW5rKHNlbGYubmFtZV9kaWZmKQogCiAgICAgZGVmIHRlc3RfbWF0Y2hpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpdHNlbGYgZmFpbHMiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSwgc2hhbGxvdz1GYWxzZSksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaXRzZWxmIGZhaWxzIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lLCBzaGFsbG93PUZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpdHNlbGYgZmFpbHMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaWRlbnRpY2FsIGZpbGUgZmFpbHMiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWUpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSwgc2hhbGxvdz1GYWxzZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaWRlbnRpY2FsIGZpbGUgZmFpbHMiKQogCiAgICAgZGVmIHRlc3RfZGlmZmVyZW50KHNlbGYpOgpAQCAtNDAsMzMgKzQyLDQ1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLmRpciksCiAgICAgICAgICAgICAgICAgICAgICJGaWxlIGFuZCBkaXJlY3RvcnkgY29tcGFyZSBhcyBlcXVhbCIpCiAKKyAgICBkZWYgdGVzdF9jYWNoZV9jbGVhcihzZWxmKToKKyAgICAgICAgZmlyc3RfY29tcGFyZSA9IGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpCisgICAgICAgIHNlY29uZF9jb21wYXJlID0gZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfZGlmZiwgc2hhbGxvdz1GYWxzZSkKKyAgICAgICAgZmlsZWNtcC5jbGVhcl9jYWNoZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZWNtcC5fY2FjaGUpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FjaGUgbm90IGNsZWFyZWQgYWZ0ZXIgY2FsbGluZyBjbGVhcl9jYWNoZSIpCisKIGNsYXNzIERpckNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKICAgICAgICAgc2VsZi5kaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyJykKICAgICAgICAgc2VsZi5kaXJfc2FtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdkaXItc2FtZScpCiAgICAgICAgIHNlbGYuZGlyX2RpZmYgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLWRpZmYnKQorCisgICAgICAgICMgQW5vdGhlciBkaXIgaXMgY3JlYXRlZCB1bmRlciBkaXJfc2FtZSwgYnV0IGl0IGhhcyBhIG5hbWUgZnJvbSB0aGUKKyAgICAgICAgIyBpZ25vcmVkIGxpc3Qgc28gaXQgc2hvdWxkIG5vdCBhZmZlY3QgdGVzdGluZyByZXN1bHRzLgorICAgICAgICBzZWxmLmRpcl9pZ25vcmVkID0gb3MucGF0aC5qb2luKHNlbGYuZGlyX3NhbWUsICcuaGcnKQorCiAgICAgICAgIHNlbGYuY2FzZWluc2Vuc2l0aXZlID0gb3MucGF0aC5ub3JtY2FzZSgnQScpID09IG9zLnBhdGgubm9ybWNhc2UoJ2EnKQogICAgICAgICBkYXRhID0gJ0NvbnRlbnRzIG9mIGZpbGUgZ28gaGVyZS5cbicKLSAgICAgICAgZm9yIGRpciBpbiBbc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmZdOgorICAgICAgICBmb3IgZGlyIGluIChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgc2VsZi5kaXJfZGlmZiwgc2VsZi5kaXJfaWdub3JlZCk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpciwgVHJ1ZSkKICAgICAgICAgICAgIG9zLm1rZGlyKGRpcikKICAgICAgICAgICAgIGlmIHNlbGYuY2FzZWluc2Vuc2l0aXZlIGFuZCBkaXIgaXMgc2VsZi5kaXJfc2FtZToKICAgICAgICAgICAgICAgICBmbiA9ICdGaUxlJyAgICAgIyBWZXJpZnkgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZuID0gJ2ZpbGUnCi0gICAgICAgICAgICBvdXRwdXQgPSBvcGVuKG9zLnBhdGguam9pbihkaXIsIGZuKSwgJ3cnKQotICAgICAgICAgICAgb3V0cHV0LndyaXRlKGRhdGEpCi0gICAgICAgICAgICBvdXRwdXQuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkaXIsIGZuKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlKGRhdGEpCiAKLSAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXJfZGlmZiwgJ2ZpbGUyJyksICd3JykKLSAgICAgICAgb3V0cHV0LndyaXRlKCdBbiBleHRyYSBmaWxlLlxuJykKLSAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpcl9kaWZmLCAnZmlsZTInKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ0FuIGV4dHJhIGZpbGUuXG4nKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyKQotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyX3NhbWUpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJfZGlmZikKKyAgICAgICAgZm9yIGRpciBpbiAoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmYpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXIpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2lnbm9yZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy5oZycsIGZpbGVjbXAuREVGQVVMVF9JR05PUkVTKQogCiAgICAgZGVmIHRlc3RfY21wZmlsZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10pID09CkBAIC04Niw5ICsxMDAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBkaXJlY3RvcnkgdG8gc2FtZSBmYWlscyIpCiAKICAgICAgICAgIyBBZGQgZGlmZmVyZW50IGZpbGUyCi0gICAgICAgIG91dHB1dCA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGlyLCAnZmlsZTInKSwgJ3cnKQotICAgICAgICBvdXRwdXQud3JpdGUoJ0RpZmZlcmVudCBjb250ZW50cy5cbicpCi0gICAgICAgIG91dHB1dC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdmaWxlMicpLCAndycpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIG91dHB1dC53cml0ZSgnRGlmZmVyZW50IGNvbnRlbnRzLlxuJykKIAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydmaWxlJywgJ2ZpbGUyJ10pID09CkBAIC0xMDcsMzAgKzEyMCw5NCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbZC5sZWZ0X2xpc3QsIGQucmlnaHRfbGlzdF0sW1snZmlsZSddLCBbJ2ZpbGUnXV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb21tb24sIFsnZmlsZSddKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5sZWZ0X29ubHkgPT0gZC5yaWdodF9vbmx5ID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubGVmdF9vbmx5LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJpZ2h0X29ubHksIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuc2FtZV9maWxlcywgWydmaWxlJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kaWZmX2ZpbGVzLCBbXSkKKyAgICAgICAgZXhwZWN0ZWRfcmVwb3J0ID0gWworICAgICAgICAgICAgImRpZmYge30ge30iLmZvcm1hdChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSksCisgICAgICAgICAgICAiSWRlbnRpY2FsIGZpbGVzIDogWydmaWxlJ10iLAorICAgICAgICBdCisgICAgICAgIHNlbGYuX2Fzc2VydF9yZXBvcnQoZC5yZXBvcnQsIGV4cGVjdGVkX3JlcG9ydCkKIAotICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgZm9yIGNvbXBhcmlzb24gb2YgdHdvIGRpZmZlcmVudCBkaXJlY3RvcmllcworICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgZm9yIGNvbXBhcmlzb24gb2YgdHdvIGRpZmZlcmVudCBkaXJlY3RvcmllcyAocmlnaHQpCiAgICAgICAgIGxlZnRfZGlyLCByaWdodF9kaXIgPSBzZWxmLmRpciwgc2VsZi5kaXJfZGlmZgogICAgICAgICBkID0gZmlsZWNtcC5kaXJjbXAobGVmdF9kaXIsIHJpZ2h0X2RpcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmxlZnQsIGxlZnRfZGlyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucmlnaHQsIHJpZ2h0X2RpcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmxlZnRfbGlzdCwgWydmaWxlJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnJpZ2h0X2xpc3QgPT0gWydmaWxlJywgJ2ZpbGUyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5yaWdodF9saXN0LCBbJ2ZpbGUnLCAnZmlsZTInXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvbW1vbiwgWydmaWxlJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0X29ubHksIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucmlnaHRfb25seSwgWydmaWxlMiddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuc2FtZV9maWxlcywgWydmaWxlJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kaWZmX2ZpbGVzLCBbXSkKKyAgICAgICAgZXhwZWN0ZWRfcmVwb3J0ID0gWworICAgICAgICAgICAgImRpZmYge30ge30iLmZvcm1hdChzZWxmLmRpciwgc2VsZi5kaXJfZGlmZiksCisgICAgICAgICAgICAiT25seSBpbiB7fSA6IFsnZmlsZTInXSIuZm9ybWF0KHNlbGYuZGlyX2RpZmYpLAorICAgICAgICAgICAgIklkZW50aWNhbCBmaWxlcyA6IFsnZmlsZSddIiwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVwb3J0KGQucmVwb3J0LCBleHBlY3RlZF9yZXBvcnQpCisKKyAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIGZvciBjb21wYXJpc29uIG9mIHR3byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgKGxlZnQpCisgICAgICAgIGxlZnRfZGlyLCByaWdodF9kaXIgPSBzZWxmLmRpciwgc2VsZi5kaXJfZGlmZgorICAgICAgICBzaHV0aWwubW92ZSgKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRpcl9kaWZmLCAnZmlsZTInKSwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRpciwgJ2ZpbGUyJykKKyAgICAgICAgKQorICAgICAgICBkID0gZmlsZWNtcC5kaXJjbXAobGVmdF9kaXIsIHJpZ2h0X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmxlZnQsIGxlZnRfZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucmlnaHQsIHJpZ2h0X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmxlZnRfbGlzdCwgWydmaWxlJywgJ2ZpbGUyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5yaWdodF9saXN0LCBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvbW1vbiwgWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0X29ubHksIFsnZmlsZTInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJpZ2h0X29ubHksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuc2FtZV9maWxlcywgWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kaWZmX2ZpbGVzLCBbXSkKKyAgICAgICAgZXhwZWN0ZWRfcmVwb3J0ID0gWworICAgICAgICAgICAgImRpZmYge30ge30iLmZvcm1hdChzZWxmLmRpciwgc2VsZi5kaXJfZGlmZiksCisgICAgICAgICAgICAiT25seSBpbiB7fSA6IFsnZmlsZTInXSIuZm9ybWF0KHNlbGYuZGlyKSwKKyAgICAgICAgICAgICJJZGVudGljYWwgZmlsZXMgOiBbJ2ZpbGUnXSIsCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X3JlcG9ydChkLnJlcG9ydCwgZXhwZWN0ZWRfcmVwb3J0KQogCiAgICAgICAgICMgQWRkIGRpZmZlcmVudCBmaWxlMgotICAgICAgICBvdXRwdXQgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpciwgJ2ZpbGUyJyksICd3JykKLSAgICAgICAgb3V0cHV0LndyaXRlKCdEaWZmZXJlbnQgY29udGVudHMuXG4nKQotICAgICAgICBvdXRwdXQuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGlyX2RpZmYsICdmaWxlMicpLCAndycpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIG91dHB1dC53cml0ZSgnRGlmZmVyZW50IGNvbnRlbnRzLlxuJykKICAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKHNlbGYuZGlyLCBzZWxmLmRpcl9kaWZmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuc2FtZV9maWxlcywgWydmaWxlJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kaWZmX2ZpbGVzLCBbJ2ZpbGUyJ10pCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpLAorICAgICAgICAgICAgIklkZW50aWNhbCBmaWxlcyA6IFsnZmlsZSddIiwKKyAgICAgICAgICAgICJEaWZmZXJpbmcgZmlsZXMgOiBbJ2ZpbGUyJ10iLAorICAgICAgICBdCisgICAgICAgIHNlbGYuX2Fzc2VydF9yZXBvcnQoZC5yZXBvcnQsIGV4cGVjdGVkX3JlcG9ydCkKKworICAgIGRlZiB0ZXN0X3JlcG9ydF9wYXJ0aWFsX2Nsb3N1cmUoc2VsZik6CisgICAgICAgIGxlZnRfZGlyLCByaWdodF9kaXIgPSBzZWxmLmRpciwgc2VsZi5kaXJfc2FtZQorICAgICAgICBkID0gZmlsZWNtcC5kaXJjbXAobGVmdF9kaXIsIHJpZ2h0X2RpcikKKyAgICAgICAgZXhwZWN0ZWRfcmVwb3J0ID0gWworICAgICAgICAgICAgImRpZmYge30ge30iLmZvcm1hdChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSksCisgICAgICAgICAgICAiSWRlbnRpY2FsIGZpbGVzIDogWydmaWxlJ10iLAorICAgICAgICBdCisgICAgICAgIHNlbGYuX2Fzc2VydF9yZXBvcnQoZC5yZXBvcnRfcGFydGlhbF9jbG9zdXJlLCBleHBlY3RlZF9yZXBvcnQpCisKKyAgICBkZWYgdGVzdF9yZXBvcnRfZnVsbF9jbG9zdXJlKHNlbGYpOgorICAgICAgICBsZWZ0X2RpciwgcmlnaHRfZGlyID0gc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUKKyAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKGxlZnRfZGlyLCByaWdodF9kaXIpCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUpLAorICAgICAgICAgICAgIklkZW50aWNhbCBmaWxlcyA6IFsnZmlsZSddIiwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVwb3J0KGQucmVwb3J0X2Z1bGxfY2xvc3VyZSwgZXhwZWN0ZWRfcmVwb3J0KQorCisgICAgZGVmIF9hc3NlcnRfcmVwb3J0KHNlbGYsIGRpcmNtcF9yZXBvcnQsIGV4cGVjdGVkX3JlcG9ydF9saW5lcyk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBkaXJjbXBfcmVwb3J0KCkKKyAgICAgICAgICAgIHJlcG9ydF9saW5lcyA9IHN0ZG91dC5nZXR2YWx1ZSgpLnN0cmlwKCkuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwb3J0X2xpbmVzLCBleHBlY3RlZF9yZXBvcnRfbGluZXMpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weQppbmRleCBiOTUyM2NjLi4xZDA4OWY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weQpAQCAtMTksMTEgKzE5LDEyIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZ3ppcCA9IE5vbmUKIAotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8sIFN0cmluZ0lPCiBmcm9tIGZpbGVpbnB1dCBpbXBvcnQgRmlsZUlucHV0LCBob29rX2VuY29kZWQKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdW5saW5rIGFzIHNhZmVfdW5saW5rCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiAKIAogIyBUaGUgZmlsZWlucHV0IG1vZHVsZSBoYXMgMiBpbnRlcmZhY2VzOiB0aGUgRmlsZUlucHV0IGNsYXNzIHdoaWNoIGRvZXMKQEAgLTIyNCwxMiArMjI1LDIxIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdHJ5IG9wZW5pbmcgaW4gdW5pdmVyc2FsIG5ld2xpbmUgbW9kZQogICAgICAgICAgICAgdDEgPSB3cml0ZVRtcCgxLCBbYiJBXG5CXHJcbkNcckQiXSwgbW9kZT0id2IiKQotICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9dDEsIG1vZGU9IlUiKQotICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQorICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPXQxLCBtb2RlPSJVIikKKyAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIkFcbiIsICJCXG4iLCAiQ1xuIiwgIkQiXSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEpCiAKKyAgICBkZWYgdGVzdF9zdGRpbl9iaW5hcnlfbW9kZShzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdzeXMuc3RkaW4nKSBhcyBtX3N0ZGluOgorICAgICAgICAgICAgbV9zdGRpbi5idWZmZXIgPSBCeXRlc0lPKGInc3BhbSwgYmFjb24sIHNhdXNhZ2UsIGFuZCBzcGFtJykKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPVsnLSddLCBtb2RlPSdyYicpCisgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbYidzcGFtLCBiYWNvbiwgc2F1c2FnZSwgYW5kIHNwYW0nXSkKKwogICAgIGRlZiB0ZXN0X2ZpbGVfb3BlbmluZ19ob29rKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIGNhbm5vdCB1c2Ugb3Blbmhvb2sgYW5kIGlucGxhY2UgbW9kZQpAQCAtMjk2LDggKzMwNiw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgWyIiXSkKICAgICAgICAgICAgIHdpdGggRmlsZUlucHV0KGZpbGVzPXQxKSBhcyBmaToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLl9maWxlcywgKCkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQpAQCAtODY5LDI3ICs4NzksMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIGV4cGVjdGVkX2xpbmVzKQogCiAgICAgICAgIGNoZWNrKCdyJywgWydBXG4nLCAnQlxuJywgJ0NcbicsICdEXHUyMGFjJ10pCi0gICAgICAgIGNoZWNrKCdyVScsIFsnQVxuJywgJ0JcbicsICdDXG4nLCAnRFx1MjBhYyddKQotICAgICAgICBjaGVjaygnVScsIFsnQVxuJywgJ0JcbicsICdDXG4nLCAnRFx1MjBhYyddKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGNoZWNrKCdyVScsIFsnQVxuJywgJ0JcbicsICdDXG4nLCAnRFx1MjBhYyddKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGNoZWNrKCdVJywgWydBXG4nLCAnQlxuJywgJ0NcbicsICdEXHUyMGFjJ10pCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBjaGVjaygncmInLCBbJ0FcbicsICdCXHJcbicsICdDXHInLCAnRFx1MjBhYyddKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KAotICAgICAgICBCdWZmZXJTaXplc1Rlc3RzLAotICAgICAgICBGaWxlSW5wdXRUZXN0cywKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfaW5wdXQsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2Nsb3NlLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9uZXh0ZmlsZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfZmlsZW5hbWUsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2xpbmVubywKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfZmlsZWxpbmVubywKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfZmlsZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pc2ZpcnN0bGluZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfaXNzdGRpbiwKLSAgICAgICAgVGVzdF9ob29rX2NvbXByZXNzZWQsCi0gICAgICAgIFRlc3RfaG9va19lbmNvZGVkLAotICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQppbmRleCA0NDRiZTkxLi5jMzc0ODJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQpAQCAtMTQ0LDE2ICsxNDQsMTYgQEAKICAgICAgICAgIyBVbml4IGNhbGxzIGRpcmNoZWNrKCkgYW5kIHJldHVybnMgIltFcnJubyAyMV06IElzIGEgZGlyZWN0b3J5IgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBfRmlsZUlPKCcuJywgJ3InKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLmVycm5vLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbGVuYW1lLCAiLiIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBJT0Vycm9yIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIE9TRXJyb3IiKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICJ0ZXN0IG9ubHkgd29ya3Mgb24gYSBQT1NJWC1saWtlIHN5c3RlbSIpCiAgICAgZGVmIHRlc3RPcGVuRGlyRkQoc2VsZik6CiAgICAgICAgIGZkID0gb3Mub3BlbignLicsIG9zLk9fUkRPTkxZKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgX0ZpbGVJTyhmZCwgJ3InKQogICAgICAgICBvcy5jbG9zZShmZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVJU0RJUikKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIHdyYXBwZXIKIApAQCAtMTgzLDE0ICsxODMsMTQgQEAKICAgICAgICAgICAgIG9zLmNsb3NlKGYuZmlsZW5vKCkpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCBmKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FQkFERikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgT1NFcnJvciIpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICBkZWYgUmVvcGVuRm9yUmVhZChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3InKQogICAgICAgICBvcy5jbG9zZShzZWxmLmYuZmlsZW5vKCkpCkBAIC0yODUsNyArMjg1LDcgQEAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZiA9IF9GaWxlSU8oIi9kZXYvdHR5IiwgImEiKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAjIFdoZW4gcnVuIGluIGEgY3JvbiBqb2IgdGhlcmUganVzdCBhcmVuJ3QgYW55CiAgICAgICAgICAgICAgICAgICAgICMgdHR5cywgc28gc2tpcCB0aGUgdGVzdC4gIFRoaXMgYWxzbyBoYW5kbGVzIG90aGVyCiAgICAgICAgICAgICAgICAgICAgICMgT1MnZXMgdGhhdCBkb24ndCBzdXBwb3J0IC9kZXYvdHR5LgpAQCAtMzYwLDcgKzM2MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIF9GaWxlSU8sIG1ha2VfYmFkX2ZkKCkpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgaW1wb3J0IG1zdmNydAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbXN2Y3J0LmdldF9vc2ZoYW5kbGUsIG1ha2VfYmFkX2ZkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtc3ZjcnQuZ2V0X29zZmhhbmRsZSwgbWFrZV9iYWRfZmQoKSkKIAogICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdEludmFsaWRGZF9vdmVyZmxvdyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9maW5hbGl6YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhYzFhYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5CkBAIC0wLDAgKzEsNTIyIEBACisiIiIKK1Rlc3RzIGZvciBvYmplY3QgZmluYWxpemF0aW9uIHNlbWFudGljcywgYXMgb3V0bGluZWQgaW4gUEVQIDQ0Mi4KKyIiIgorCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGdjCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK3RyeToKKyAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgd2l0aF90cF9kZWwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBkZWYgd2l0aF90cF9kZWwoY2xzKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigncmVxdWlyZXMgX3Rlc3RjYXBpLndpdGhfdHBfZGVsJykKKyAgICAgICAgcmV0dXJuIEMKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKworY2xhc3MgTm9uR0NTaW1wbGVCYXNlOgorICAgICIiIgorICAgIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgdGhlIG9iamVjdHMgdW5kZXIgdGVzdCwgZXF1aXBwZWQgd2l0aCB2YXJpb3VzCisgICAgdGVzdGluZyBmZWF0dXJlcy4KKyAgICAiIiIKKworICAgIHN1cnZpdm9ycyA9IFtdCisgICAgZGVsX2NhbGxzID0gW10KKyAgICB0cF9kZWxfY2FsbHMgPSBbXQorICAgIGVycm9ycyA9IFtdCisKKyAgICBfY2xlYW5pbmcgPSBGYWxzZQorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY2xlYW51cChjbHMpOgorICAgICAgICBjbHMuc3Vydml2b3JzLmNsZWFyKCkKKyAgICAgICAgY2xzLmVycm9ycy5jbGVhcigpCisgICAgICAgIGdjLmdhcmJhZ2UuY2xlYXIoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgY2xzLmRlbF9jYWxscy5jbGVhcigpCisgICAgICAgIGNscy50cF9kZWxfY2FsbHMuY2xlYXIoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgdGVzdChjbHMpOgorICAgICAgICAiIiIKKyAgICAgICAgQSBjb250ZXh0IG1hbmFnZXIgdG8gdXNlIGFyb3VuZCBhbGwgZmluYWxpemF0aW9uIHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBzdXBwb3J0LmRpc2FibGVfZ2MoKToKKyAgICAgICAgICAgIGNscy5kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICAgICAgY2xzLnRwX2RlbF9jYWxscy5jbGVhcigpCisgICAgICAgICAgICBOb25HQ1NpbXBsZUJhc2UuX2NsZWFuaW5nID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgICAgIGlmIGNscy5lcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGNscy5lcnJvcnNbMF0KKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgTm9uR0NTaW1wbGVCYXNlLl9jbGVhbmluZyA9IFRydWUKKyAgICAgICAgICAgICAgICBjbHMuX2NsZWFudXAoKQorCisgICAgZGVmIGNoZWNrX3Nhbml0eShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRoZSBvYmplY3QgaXMgc2FuZSAobm9uLWJyb2tlbikuCisgICAgICAgICIiIgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBQRVAgNDQyIGZpbmFsaXplci4gIFJlY29yZCB0aGF0IHRoaXMgd2FzIGNhbGxlZCwgY2hlY2sgdGhlCisgICAgICAgIG9iamVjdCBpcyBpbiBhIHNhbmUgc3RhdGUsIGFuZCBpbnZva2UgYSBzaWRlIGVmZmVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbGVhbmluZzoKKyAgICAgICAgICAgICAgICBzZWxmLmRlbF9jYWxscy5hcHBlbmQoaWQoc2VsZikpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zYW5pdHkoKQorICAgICAgICAgICAgICAgIHNlbGYuc2lkZV9lZmZlY3QoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoZSkKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgc2lkZSBlZmZlY3QgY2FsbGVkIG9uIGRlc3RydWN0aW9uLgorICAgICAgICAiIiIKKworCitjbGFzcyBTaW1wbGVCYXNlKE5vbkdDU2ltcGxlQmFzZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuaWRfID0gaWQoc2VsZikKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmlkXyA9PSBpZChzZWxmKQorCisKK2NsYXNzIE5vbkdDKE5vbkdDU2ltcGxlQmFzZSk6CisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgTm9uR0NSZXN1cnJlY3RvcihOb25HQ1NpbXBsZUJhc2UpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXN1cnJlY3Qgc2VsZiBieSBzdG9yaW5nIHNlbGYgaW4gYSBjbGFzcy13aWRlIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1cnZpdm9ycy5hcHBlbmQoc2VsZikKKworY2xhc3MgU2ltcGxlKFNpbXBsZUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgU2ltcGxlUmVzdXJyZWN0b3IoTm9uR0NSZXN1cnJlY3RvciwgU2ltcGxlQmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RCYXNlOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9sZF9nYXJiYWdlID0gZ2MuZ2FyYmFnZVs6XQorICAgICAgICBnYy5nYXJiYWdlWzpdID0gW10KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBOb25lIG9mIHRoZSB0ZXN0cyBoZXJlIHNob3VsZCBwdXQgYW55dGhpbmcgaW4gZ2MuZ2FyYmFnZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIFtdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHNlbGYub2xkX2dhcmJhZ2UKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIGFzc2VydF9kZWxfY2FsbHMoc2VsZiwgaWRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoU2ltcGxlQmFzZS5kZWxfY2FsbHMpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBhc3NlcnRfdHBfZGVsX2NhbGxzKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFNpbXBsZUJhc2UudHBfZGVsX2NhbGxzKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgYXNzZXJ0X3N1cnZpdm9ycyhzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpZCh4KSBmb3IgeCBpbiBTaW1wbGVCYXNlLnN1cnZpdm9ycyksIHNvcnRlZChpZHMpKQorCisgICAgZGVmIGFzc2VydF9nYXJiYWdlKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGlkKHgpIGZvciB4IGluIGdjLmdhcmJhZ2UpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBjbGVhcl9zdXJ2aXZvcnMoc2VsZik6CisgICAgICAgIFNpbXBsZUJhc2Uuc3Vydml2b3JzLmNsZWFyKCkKKworCitjbGFzcyBTaW1wbGVGaW5hbGl6YXRpb25UZXN0KFRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdCBmaW5hbGl6YXRpb24gd2l0aG91dCByZWZjeWNsZXMuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2ltcGxlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFNpbXBsZVJlc3VycmVjdG9yKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cigpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub25fZ2Moc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTm9uR0MoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHMpKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X25vbl9nY19yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTm9uR0NSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQocykpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcyAqIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoaWRzKQorCisKK2NsYXNzIFNlbGZDeWNsZUJhc2U6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLnJlZiA9IHNlbGYKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgIHN1cGVyKCkuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgYXNzZXJ0IHNlbGYucmVmIGlzIHNlbGYKKworY2xhc3MgU2ltcGxlU2VsZkN5Y2xlKFNlbGZDeWNsZUJhc2UsIFNpbXBsZSk6CisgICAgcGFzcworCitjbGFzcyBTZWxmQ3ljbGVSZXN1cnJlY3RvcihTZWxmQ3ljbGVCYXNlLCBTaW1wbGVSZXN1cnJlY3Rvcik6CisgICAgcGFzcworCitjbGFzcyBTdWljaWRhbFNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBTaW1wbGUpOgorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhwbGljaXRseSBicmVhayB0aGUgcmVmZXJlbmNlIGN5Y2xlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yZWYgPSBOb25lCisKKworY2xhc3MgU2VsZkN5Y2xlRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIG9mIGFuIG9iamVjdCBoYXZpbmcgYSBzaW5nbGUgY3ljbGljIHJlZmVyZW5jZSB0bworICAgIGl0c2VsZi4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTaW1wbGVTZWxmQ3ljbGUoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IF9fZGVsX18gY2FuIHJlc3VycmVjdCB0aGUgb2JqZWN0IGJlaW5nIGZpbmFsaXplZC4KKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTZWxmQ3ljbGVSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgICMgWFhYIGlzIHRoaXMgZGVzaXJhYmxlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgIyBXaGVuIHRyeWluZyB0byBkZXN0cm95IHRoZSBvYmplY3QgYSBzZWNvbmQgdGltZSwgX19kZWxfXworICAgICAgICAgICAgIyBpc24ndCBjYWxsZWQgYW55bW9yZSAoYW5kIHRoZSBvYmplY3QgaXNuJ3QgcmVzdXJyZWN0ZWQpLgorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3N1aWNpZGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgR0MgaXMgYWJsZSB0byBkZWFsIHdpdGggYW4gb2JqZWN0IHRoYXQga2lsbHMgaXRzIGxhc3QKKyAgICAgICAgIyByZWZlcmVuY2UgZHVyaW5nIF9fZGVsX18uCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU3VpY2lkYWxTZWxmQ3ljbGUoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworCitjbGFzcyBDaGFpbmVkQmFzZToKKworICAgIGRlZiBjaGFpbihzZWxmLCBsZWZ0KToKKyAgICAgICAgc2VsZi5zdWljaWRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKKyAgICAgICAgbGVmdC5yaWdodCA9IHNlbGYKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgIHN1cGVyKCkuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgaWYgc2VsZi5zdWljaWRlZDoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmxlZnQgaXMgTm9uZQorICAgICAgICAgICAgYXNzZXJ0IHNlbGYucmlnaHQgaXMgTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGVmdCA9IHNlbGYubGVmdAorICAgICAgICAgICAgaWYgbGVmdC5zdWljaWRlZDoKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVmdC5yaWdodCBpcyBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBsZWZ0LnJpZ2h0IGlzIHNlbGYKKyAgICAgICAgICAgIHJpZ2h0ID0gc2VsZi5yaWdodAorICAgICAgICAgICAgaWYgcmlnaHQuc3VpY2lkZWQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJpZ2h0LmxlZnQgaXMgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgcmlnaHQubGVmdCBpcyBzZWxmCisKK2NsYXNzIFNpbXBsZUNoYWluZWQoQ2hhaW5lZEJhc2UsIFNpbXBsZSk6CisgICAgcGFzcworCitjbGFzcyBDaGFpbmVkUmVzdXJyZWN0b3IoQ2hhaW5lZEJhc2UsIFNpbXBsZVJlc3VycmVjdG9yKToKKyAgICBwYXNzCisKK2NsYXNzIFN1aWNpZGFsQ2hhaW5lZChDaGFpbmVkQmFzZSwgU2ltcGxlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGxpY2l0bHkgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3VpY2lkZWQgPSBUcnVlCisgICAgICAgIHNlbGYubGVmdCA9IE5vbmUKKyAgICAgICAgc2VsZi5yaWdodCA9IE5vbmUKKworCitjbGFzcyBDeWNsZUNoYWluRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIG9mIGEgY3ljbGljIGNoYWluLiAgVGhlc2UgdGVzdHMgYXJlIHNpbWlsYXIgaW4KKyAgICBzcGlyaXQgdG8gdGhlIHNlbGYtY3ljbGUgdGVzdHMgYWJvdmUsIGJ1dCB0aGUgY29sbGVjdGFibGUgb2JqZWN0CisgICAgZ3JhcGggaXNuJ3QgdHJpdmlhbCBhbnltb3JlLgorICAgICIiIgorCisgICAgZGVmIGJ1aWxkX2NoYWluKHNlbGYsIGNsYXNzZXMpOgorICAgICAgICBub2RlcyA9IFtjbHMoKSBmb3IgY2xzIGluIGNsYXNzZXNdCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihub2RlcykpOgorICAgICAgICAgICAgbm9kZXNbaV0uY2hhaW4obm9kZXNbaS0xXSkKKyAgICAgICAgcmV0dXJuIG5vZGVzCisKKyAgICBkZWYgY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgTiA9IGxlbihjbGFzc2VzKQorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmJ1aWxkX2NoYWluKGNsYXNzZXMpCisgICAgICAgICAgICBpZHMgPSBbaWQocykgZm9yIHMgaW4gbm9kZXNdCisgICAgICAgICAgICB3cnMgPSBbd2Vha3JlZi5yZWYocykgZm9yIHMgaW4gbm9kZXNdCisgICAgICAgICAgICBkZWwgbm9kZXMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3dyKCkgZm9yIHdyIGluIHdyc10sIFtOb25lXSAqIE4pCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisKKyAgICBkZWYgY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKHNlbGYsIGNsYXNzZXMpOgorICAgICAgICBOID0gbGVuKGNsYXNzZXMpCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBub2RlcyA9IHNlbGYuYnVpbGRfY2hhaW4oY2xhc3NlcykKKyAgICAgICAgICAgIE4gPSBsZW4obm9kZXMpCisgICAgICAgICAgICBpZHMgPSBbaWQocykgZm9yIHMgaW4gbm9kZXNdCisgICAgICAgICAgICBzdXJ2aXZvcl9pZHMgPSBbaWQocykgZm9yIHMgaW4gbm9kZXMgaWYgaXNpbnN0YW5jZShzLCBTaW1wbGVSZXN1cnJlY3RvcildCisgICAgICAgICAgICB3cnMgPSBbd2Vha3JlZi5yZWYocykgZm9yIHMgaW4gbm9kZXNdCisgICAgICAgICAgICBkZWwgbm9kZXMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhzdXJ2aXZvcl9pZHMpCisgICAgICAgICAgICAjIFhYWCBkZXNpcmFibGU/CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3cigpIGZvciB3ciBpbiB3cnNdLCBbTm9uZV0gKiBOKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKFtTaW1wbGVDaGFpbmVkXSAqIDMpCisKKyAgICBkZWYgdGVzdF9ob21vZ2Vub3VzX3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oW0NoYWluZWRSZXN1cnJlY3Rvcl0gKiAzKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91c19zdWljaWRhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKFtTdWljaWRhbENoYWluZWRdICogMykKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19zdWljaWRhbF9vbmUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU3VpY2lkYWxDaGFpbmVkLCBTaW1wbGVDaGFpbmVkXSAqIDIpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfc3VpY2lkYWxfdHdvKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbU3VpY2lkYWxDaGFpbmVkXSAqIDIgKyBbU2ltcGxlQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3Jlc3VycmVjdF9vbmUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKFtDaGFpbmVkUmVzdXJyZWN0b3IsIFNpbXBsZUNoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3RfdHdvKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbigKKyAgICAgICAgICAgIFtDaGFpbmVkUmVzdXJyZWN0b3IsIFNpbXBsZUNoYWluZWQsIFN1aWNpZGFsQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3Jlc3VycmVjdF90aHJlZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbQ2hhaW5lZFJlc3VycmVjdG9yXSAqIDIgKyBbU2ltcGxlQ2hhaW5lZF0gKiAyICsgW1N1aWNpZGFsQ2hhaW5lZF0gKiAyKQorCisKKyMgTk9URTogdGhlIHRwX2RlbCBzbG90IGlzbid0IGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLCBzbyB3ZSBoYXZlIHRvIGNhbGwKKyMgd2l0aF90cF9kZWwoKSBmb3IgZWFjaCBpbnN0YW50aWF0ZWQgY2xhc3MuCisKK2NsYXNzIExlZ2FjeUJhc2UoU2ltcGxlQmFzZSk6CisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBEbyBub3QgaW52b2tlIHNpZGVfZWZmZWN0IGhlcmUsIHNpbmNlIHdlIGFyZSBub3cgZXhlcmNpc2luZworICAgICAgICAgICAgIyB0aGUgdHBfZGVsIHNsb3QuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKKyAgICBkZWYgX190cF9kZWxfXyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIExlZ2FjeSAocHJlLVBFUCA0NDIpIGZpbmFsaXplciwgbWFwcGVkIHRvIGEgdHBfZGVsIHNsb3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi50cF9kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVfZWZmZWN0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKK0B3aXRoX3RwX2RlbAorY2xhc3MgTGVnYWN5KExlZ2FjeUJhc2UpOgorICAgIHBhc3MKKworQHdpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lSZXN1cnJlY3RvcihMZWdhY3lCYXNlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlc3VycmVjdCBzZWxmIGJ5IHN0b3Jpbmcgc2VsZiBpbiBhIGNsYXNzLXdpZGUgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3Vydml2b3JzLmFwcGVuZChzZWxmKQorCitAd2l0aF90cF9kZWwKK2NsYXNzIExlZ2FjeVNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBMZWdhY3lCYXNlKToKKyAgICBwYXNzCisKKworQHN1cHBvcnQuY3B5dGhvbl9vbmx5CitjbGFzcyBMZWdhY3lGaW5hbGl6YXRpb25UZXN0KFRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdCBmaW5hbGl6YXRpb24gb2Ygb2JqZWN0cyB3aXRoIGEgdHBfZGVsLgorICAgICIiIgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIFRoZXNlIHRlc3RzIG5lZWQgdG8gY2xlYW4gdXAgYSBiaXQgbW9yZSwgc2luY2UgdGhleSBjcmVhdGUKKyAgICAgICAgIyB1bmNvbGxlY3RhYmxlIG9iamVjdHMuCisgICAgICAgIGdjLmdhcmJhZ2UuY2xlYXIoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9sZWdhY3koc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTGVnYWN5KCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcykKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTGVnYWN5UmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoaWRzKQorICAgICAgICAgICAgIyB3ZWFrcmVmcyBhcmUgY2xlYXJlZCBiZWZvcmUgdHBfZGVsIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X3NlbGZfY3ljbGUoc2VsZik6CisgICAgICAgICMgU2VsZi1jeWNsZXMgd2l0aCBsZWdhY3kgZmluYWxpemVycyBlbmQgdXAgaW4gZ2MuZ2FyYmFnZS4KKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBMZWdhY3lTZWxmQ3ljbGUoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZ2FyYmFnZShpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHdyKCksIE5vbmUpCisgICAgICAgICAgICAjIEJyZWFrIHRoZSBjeWNsZSB0byBhbGxvdyBjb2xsZWN0aW9uCisgICAgICAgICAgICBnYy5nYXJiYWdlWzBdLnJlZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRfZ2FyYmFnZShbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mbG9hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKaW5kZXggOTZkOTA3YS4uZTFlMWYwNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CkBAIC00MSw2ICs0MSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLS4iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgYiItIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAibm90ICdkaWN0JyIsIGZsb2F0LCB7fSkKICAgICAgICAgIyBMb25lIHN1cnJvZ2F0ZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIGZsb2F0LCAnXHVEOEYwJykKICAgICAgICAgIyBjaGVjayB0aGF0IHdlIGRvbid0IGFjY2VwdCBhbHRlcm5hdGUgZXhwb25lbnQgbWFya2VycwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mb3JrMS5weSBiL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKaW5kZXggODE5MmMzOC4uZTA2MjZkZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CkBAIC0xLDcgKzEsNyBAQAogIiIiVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCBmb3JrKCkgYmVoYXZpb3IuCiAiIiIKIAotaW1wb3J0IGltcAoraW1wb3J0IF9pbXAgYXMgaW1wCiBpbXBvcnQgb3MKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKaW5kZXggZWE1YTczMS4uZmM3MWU0OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKQEAgLTE0Miw3ICsxNDIsOCBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIlIyswMjcuMjNYIiwgYmlnLCAiKzBYMDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKICAgICAgICAgIyBzYW1lLCBleGNlcHQgbm8gMCBmbGFnCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjKzI3LjIzWCIsIGJpZywgIiArMFgwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fXyIsIDYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCBmbG9hdChiaWcpLCAiMTIzNDU2X19fX19fX19fX19fX19fIiwgNikKICAgICAgICAgYmlnID0gMG8xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCAgIyAzMiBvY3RhbCBkaWdpdHMKICAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCkBAIC0xODIsNyArMTgzLDggQEAKICAgICAgICAgdGVzdGZvcm1hdCgiJTAzNC4zM28iLCBiaWcsICIwMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKICAgICAgICAgIyBiYXNlIG1hcmtlciBzaG91bGRuJ3QgY2hhbmdlIHRoYXQKICAgICAgICAgdGVzdGZvcm1hdCgiJTAjMzQuMzNvIiwgYmlnLCAiMG8wMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX19fX19fX19fX19fXyIsIDYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCBmbG9hdChiaWcpLCAiMTIzNDU2X19fX19fX19fX19fX19fX19fX19fX19fX18iLCA2KQogICAgICAgICAjIFNvbWUgc21hbGwgaW50cywgaW4gYm90aCBQeXRob24gaW50IGFuZCBmbGF2b3JzKS4KICAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCA0MiwgIjQyIikKICAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCAtNDIsICItNDIiKQpAQCAtMTkzLDcgKzE5NSw4IEBACiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjeCIsIDEsICIweDEiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlI1giLCAxLCAiMFgxIikKICAgICAgICAgdGVzdGZvcm1hdCgiJSNYIiwgMSwgIjBYMSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjeCIsIDEuMCwgIjB4MSIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgdGVzdGZvcm1hdCgiJSN4IiwgMS4wLCAiMHgxIikKICAgICAgICAgdGVzdGZvcm1hdCgiJSNvIiwgMSwgIjBvMSIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjbyIsIDEsICIwbzEiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlI28iLCAwLCAiMG8wIikKQEAgLTIxMCwxMiArMjEzLDE0IEBACiAgICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgLTB4NDIsICItNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIDB4NDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgLTB4NDIsICItNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KDB4NDIpLCAiNDIiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgZmxvYXQoMHg0MiksICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgMG80MiwgIjQyIikKICAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCAtMG80MiwgIi00MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgMG80MiwgIjQyIikKICAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCAtMG80MiwgIi00MiIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoMG80MiksICI0MiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCBmbG9hdCgwbzQyKSwgIjQyIikKICAgICAgICAgdGVzdGZvcm1hdCgiJXIiLCAiXHUwMzc4IiwgIidcXHUwMzc4JyIpICAjIG5vbiBwcmludGFibGUKICAgICAgICAgdGVzdGZvcm1hdCgiJWEiLCAiXHUwMzc4IiwgIidcXHUwMzc4JyIpICAjIG5vbiBwcmludGFibGUKICAgICAgICAgdGVzdGZvcm1hdCgiJXIiLCAiXHUwMzc0IiwgIidcdTAzNzQnIikgICAjIHByaW50YWJsZQpAQCAtMzA3LDEwICszMTIsMjUgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgb2xkbG9jKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfb3B0aW1pc2F0aW9ucyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICJhYmNkZSIgIyA1IGNoYXJhY3RlcnMKIAorICAgICAgICBzZWxmLmFzc2VydElzKCIlcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlLjVzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUuMTBzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUxcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlNXMiICUgdGV4dCwgdGV4dCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZvcm1hdFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDpzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDouNXN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOi4xMHN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOjFzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDo1c30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHRleHQgJSAoKSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXh0LmZvcm1hdCgpLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfcHJlY2lzaW9uKHNlbGYpOgogICAgICAgICBmID0gMS4yCkBAIC0zMTgsMTQgKzMzOCwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChmLCAiLjNmIiksICIxLjIwMCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBmb3JtYXQoZiwgIi4lc2YiICUgKHN5cy5tYXhzaXplICsgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJwcmVjaXNpb24gdG9vIGJpZyIpCiAKICAgICAgICAgYyA9IGNvbXBsZXgoZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoYywgIi4wZiIpLCAiMSswaiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGMsICIuM2YiKSwgIjEuMjAwKzAuMDAwaiIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBmb3JtYXQoYywgIi4lc2YiICUgKHN5cy5tYXhzaXplICsgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJwcmVjaXNpb24gdG9vIGJpZyIpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9wcmVjaXNpb25fY19saW1pdHMoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CmluZGV4IDFmYWQ5MjEuLjMzMzY1MzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CkBAIC0xNDYsOSArMTQ2LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGKC0wLjApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMzYwMjg3OTcwMTg5NjM5NywgMzYwMjg3OTcwMTg5NjM5NjgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoMC4xKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJ25hbicpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCdpbmYnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnLWluZicpKQorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBmbG9hdCAtPiBpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRiwgZmxvYXQoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIEYsIGZsb2F0KCctaW5mJykpCiAKICAgICBkZWYgdGVzdEluaXRGcm9tRGVjaW1hbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTEsIDEwKSwKQEAgLTE1NywxMCArMTU4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCczLjVlLTInKSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKERlY2ltYWwoJy4wMDBlMjAnKSkpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJ25hbicpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJ3NuYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCctaW5mJykpCisgICAgICAgICMgYnVnIDE2NDY5OiBlcnJvciB0eXBlcyBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGRlY2ltYWwgLT4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEYsIERlY2ltYWwoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIEYsIERlY2ltYWwoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBEZWNpbWFsKCctaW5mJykpCiAKICAgICBkZWYgdGVzdEZyb21TdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUsIDEpLCBfY29tcG9uZW50cyhGKCI1IikpKQpAQCAtMjQ4LDE0ICsyNTAsMTUgQEAKIAogICAgICAgICBpbmYgPSAxZTEwMDAKICAgICAgICAgbmFuID0gaW5mIC0gaW5mCisgICAgICAgICMgYnVnIDE2NDY5OiBlcnJvciB0eXBlcyBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGZsb2F0IC0+IGludAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBpbmYgdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIE92ZXJmbG93RXJyb3IsICJDYW5ub3QgY29udmVydCBpbmYgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgaW5mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCAtaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAogICAgICAgICAgICAgRi5mcm9tX2Zsb2F0LCAtaW5mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBuYW4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBuYW4gdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgbmFuKQogCiAgICAgZGVmIHRlc3RGcm9tRGVjaW1hbChzZWxmKToKQEAgLTI2OCwxNyArMjcxLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSAtIEYoMSwgMTAqKjMwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCIwLiIgKyAiOSIgKiAzMCkpKQogCisgICAgICAgICMgYnVnIDE2NDY5OiBlcnJvciB0eXBlcyBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGRlY2ltYWwgLT4gaW50CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgSW5maW5pdHkgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsLCBEZWNpbWFsKCJpbmYiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLUluZmluaXR5IHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgLUluZmluaXR5IHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiLWluZiIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBOYU4gdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsLCBEZWNpbWFsKCJuYW4iKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgc05hTiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgVmFsdWVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsLCBEZWNpbWFsKCJzbmFuIikpCiAKICAgICBkZWYgdGVzdExpbWl0RGVub21pbmF0b3Ioc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZyYW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9mcmFtZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDAyZWMzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9mcmFtZS5weQpAQCAtMCwwICsxLDE2OCBAQAoraW1wb3J0IGdjCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKworY2xhc3MgQ2xlYXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0cyBmb3IgZnJhbWUuY2xlYXIoKS4KKyAgICAiIiIKKworICAgIGRlZiBpbm5lcihzZWxmLCB4PTUsICoqa3dhcmdzKToKKyAgICAgICAgMS8wCisKKyAgICBkZWYgb3V0ZXIoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmlubmVyKCoqa3dhcmdzKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4YyA9IGUKKyAgICAgICAgcmV0dXJuIGV4YworCisgICAgZGVmIGNsZWFyX3RyYWNlYmFja19mcmFtZXMoc2VsZiwgdGIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xlYXIgYWxsIGZyYW1lcyBpbiBhIHRyYWNlYmFjay4KKyAgICAgICAgIiIiCisgICAgICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisKKyAgICBkZWYgdGVzdF9jbGVhcl9sb2NhbHMoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjKQorICAgICAgICBleGMgPSBzZWxmLm91dGVyKGM9YykKKyAgICAgICAgZGVsIGMKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgIyBBIHJlZmVyZW5jZSB0byBjIGlzIGhlbGQgdGhyb3VnaCB0aGUgZnJhbWVzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoTm9uZSwgd3IoKSkKKyAgICAgICAgc2VsZi5jbGVhcl90cmFjZWJhY2tfZnJhbWVzKGV4Yy5fX3RyYWNlYmFja19fKQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICAjIFRoZSByZWZlcmVuY2Ugd2FzIHJlbGVhc2VkIGJ5IC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm9uZSwgd3IoKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgZW5kbHkgPSBGYWxzZQorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgbm9ubG9jYWwgZW5kbHkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgICAgIGlubmVyKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZW5kbHkgPSBUcnVlCisgICAgICAgIGdlbiA9IGcoKQorICAgICAgICBuZXh0KGdlbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbmRseSkKKyAgICAgICAgIyBDbGVhcmluZyB0aGUgZnJhbWUgY2xvc2VzIHRoZSBnZW5lcmF0b3IKKyAgICAgICAgZ2VuLmdpX2ZyYW1lLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVuZGx5KQorCisgICAgZGVmIHRlc3RfY2xlYXJfZXhlY3V0aW5nKHNlbGYpOgorICAgICAgICAjIEF0dGVtcHRpbmcgdG8gY2xlYXIgYW4gZXhlY3V0aW5nIGZyYW1lIGlzIGZvcmJpZGRlbi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgMS8wCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgZiA9IGUuX190cmFjZWJhY2tfXy50Yl9mcmFtZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZi5mX2JhY2suY2xlYXIoKQorCisgICAgZGVmIHRlc3RfY2xlYXJfZXhlY3V0aW5nX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgIyBBdHRlbXB0aW5nIHRvIGNsZWFyIGFuIGV4ZWN1dGluZyBnZW5lcmF0b3IgZnJhbWUgaXMgZm9yYmlkZGVuLgorICAgICAgICBlbmRseSA9IEZhbHNlCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICBub25sb2NhbCBlbmRseQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZiA9IGUuX190cmFjZWJhY2tfXy50Yl9mcmFtZQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZi5jbGVhcigpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBmLmZfYmFjay5jbGVhcigpCisgICAgICAgICAgICAgICAgeWllbGQgZgorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBlbmRseSA9IFRydWUKKyAgICAgICAgZ2VuID0gZygpCisgICAgICAgIGYgPSBuZXh0KGdlbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbmRseSkKKyAgICAgICAgIyBDbGVhcmluZyB0aGUgZnJhbWUgY2xvc2VzIHRoZSBnZW5lcmF0b3IKKyAgICAgICAgZi5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbmRseSkKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2NsZWFyX3JlZmN5Y2xlcyhzZWxmKToKKyAgICAgICAgIyAuY2xlYXIoKSBkb2Vzbid0IGxlYXZlIGFueSByZWZjeWNsZSBiZWhpbmQKKyAgICAgICAgd2l0aCBzdXBwb3J0LmRpc2FibGVfZ2MoKToKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYyA9IEMoKQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjKQorICAgICAgICAgICAgZXhjID0gc2VsZi5vdXRlcihjPWMpCisgICAgICAgICAgICBkZWwgYworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChOb25lLCB3cigpKQorICAgICAgICAgICAgc2VsZi5jbGVhcl90cmFjZWJhY2tfZnJhbWVzKGV4Yy5fX3RyYWNlYmFja19fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhOb25lLCB3cigpKQorCisKK2NsYXNzIEZyYW1lTG9jYWxzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIHRoZSAuZl9sb2NhbHMgYXR0cmlidXRlLgorICAgICIiIgorCisgICAgZGVmIG1ha2VfZnJhbWVzKHNlbGYpOgorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIHggPSA1CisgICAgICAgICAgICB5ID0gNgorICAgICAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICAgICAgeiA9IHggKyAyCisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICAgICAgdCA9IDkKKyAgICAgICAgICAgIHJldHVybiBpbm5lcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dGVyKCkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICB0YiA9IGUuX190cmFjZWJhY2tfXworICAgICAgICAgICAgZnJhbWVzID0gW10KKyAgICAgICAgICAgIHdoaWxlIHRiOgorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQodGIudGJfZnJhbWUpCisgICAgICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBmcmFtZXMKKworICAgIGRlZiB0ZXN0X2xvY2FscyhzZWxmKToKKyAgICAgICAgZiwgb3V0ZXIsIGlubmVyID0gc2VsZi5tYWtlX2ZyYW1lcygpCisgICAgICAgIG91dGVyX2xvY2FscyA9IG91dGVyLmZfbG9jYWxzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvdXRlcl9sb2NhbHMucG9wKCdpbm5lcicpLCB0eXBlcy5GdW5jdGlvblR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0ZXJfbG9jYWxzLCB7J3gnOiA1LCAneSc6IDZ9KQorICAgICAgICBpbm5lcl9sb2NhbHMgPSBpbm5lci5mX2xvY2FscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlubmVyX2xvY2Fscywgeyd4JzogNSwgJ3onOiA3fSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2xvY2FscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZfbG9jYWxzIGFmdGVyIGNsZWFyKCkgKGlzc3VlICMyMTg5NykKKyAgICAgICAgZiwgb3V0ZXIsIGlubmVyID0gc2VsZi5tYWtlX2ZyYW1lcygpCisgICAgICAgIG91dGVyLmNsZWFyKCkKKyAgICAgICAgaW5uZXIuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGVyLmZfbG9jYWxzLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lci5mX2xvY2Fscywge30pCisKKyAgICBkZWYgdGVzdF9sb2NhbHNfY2xlYXJfbG9jYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgZl9sb2NhbHMgYmVmb3JlIGFuZCBhZnRlciBjbGVhcigpICh0byBleGVyY2lzZSBjYWNoaW5nKQorICAgICAgICBmLCBvdXRlciwgaW5uZXIgPSBzZWxmLm1ha2VfZnJhbWVzKCkKKyAgICAgICAgb3V0ZXIuZl9sb2NhbHMKKyAgICAgICAgaW5uZXIuZl9sb2NhbHMKKyAgICAgICAgb3V0ZXIuY2xlYXIoKQorICAgICAgICBpbm5lci5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0ZXIuZl9sb2NhbHMsIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlubmVyLmZfbG9jYWxzLCB7fSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5IGIvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNjc2MWMuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0jIFRlc3QgdGhlIGZyb3plbiBtb2R1bGUgZGVmaW5lZCBpbiBmcm96ZW4uYy4KLQotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0Ci1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzeXMKLQotY2xhc3MgRnJvemVuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgbW9kdWxlX2F0dHJzID0gZnJvemVuc2V0KFsnX19idWlsdGluc19fJywgJ19fY2FjaGVkX18nLCAnX19kb2NfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nXSkKLSAgICBwYWNrYWdlX2F0dHJzID0gZnJvemVuc2V0KGxpc3QobW9kdWxlX2F0dHJzKSArIFsnX19wYXRoX18nXSkKLQotICAgIGRlZiB0ZXN0X2Zyb3plbihzZWxmKToKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IF9faGVsbG9fXwotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIHg6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19oZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX2hlbGxvX18uaW5pdGlhbGl6ZWQsIFRydWUpCi0gICAgICAgICAgICBleHBlY3QgPSBzZXQoc2VsZi5tb2R1bGVfYXR0cnMpCi0gICAgICAgICAgICBleHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19oZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCi0KLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18gZmFpbGVkOiIgKyBzdHIoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uaW5pdGlhbGl6ZWQsIFRydWUpCi0gICAgICAgICAgICBleHBlY3QgPSBzZXQoc2VsZi5wYWNrYWdlX2F0dHJzKQotICAgICAgICAgICAgZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgaWYgbm90ICJfX3BoZWxsb19fLnNwYW0iIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZXhwZWN0LmFkZCgnc3BhbScpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9fcGhlbGxvX18pKSwgZXhwZWN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX3BoZWxsb19fLl9fcGF0aF9fLCBbX19waGVsbG9fXy5fX25hbWVfX10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQotCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fLnNwYW0KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uc3BhbSBmYWlsZWQ6IiArIHN0cih4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5zcGFtLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgc3BhbV9leHBlY3QgPSBzZXQoc2VsZi5tb2R1bGVfYXR0cnMpCi0gICAgICAgICAgICBzcGFtX2V4cGVjdC5hZGQoJ2luaXRpYWxpemVkJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fLnNwYW0pKSwgc3BhbV9leHBlY3QpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0ID0gc2V0KHNlbGYucGFja2FnZV9hdHRycykKLSAgICAgICAgICAgIHBoZWxsb19leHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0LmFkZCgnc3BhbScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXykpLCBwaGVsbG9fZXhwZWN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5mb28gc2hvdWxkIGhhdmUgZmFpbGVkIikKLQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fLmZvbwotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5mb28gc2hvdWxkIGhhdmUgZmFpbGVkIikKLQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19faGVsbG9fXyddCi0gICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXyddCi0gICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXy5zcGFtJ10KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChGcm96ZW5UZXN0cykKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQppbmRleCA2Yzk1YzQ5Li5hOWJmMzBiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQpAQCAtMTUsMTIgKzE1LDE2IEBACiAgICAgaW1wb3J0IHNzbAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHNzbCA9IE5vbmUKKyAgICBIQVNfU05JID0gRmFsc2UKK2Vsc2U6CisgICAgZnJvbSBzc2wgaW1wb3J0IEhBU19TTkkKIAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UsIHNraXBVbmxlc3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEhPU1QsIEhPU1R2NgogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCitUSU1FT1VUID0gMwogIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgb3ZlciB0aGUgZGF0YSBjaGFubmVsIHdoZW4KICMgUkVUUiwgTElTVCwgTkxTVCwgTUxTRCBjb21tYW5kcyBhcmUgaXNzdWVkCiBSRVRSX0RBVEEgPSAnYWJjZGUxMjM0NVxyXG4nICogMTAwMApAQCAtMTI2LDcgKzEzMCw3IEBACiAgICAgICAgIGFkZHIgPSBsaXN0KG1hcChpbnQsIGFyZy5zcGxpdCgnLCcpKSkKICAgICAgICAgaXAgPSAnJWQuJWQuJWQuJWQnICV0dXBsZShhZGRyWzo0XSkKICAgICAgICAgcG9ydCA9IChhZGRyWzRdICogMjU2KSArIGFkZHJbNV0KLSAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTIpCisgICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIocywgYmFzZWNsYXNzPXNlbGYpCiAgICAgICAgIHNlbGYucHVzaCgnMjAwIGFjdGl2ZSBkYXRhIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKQogCkBAIC0xMzQsNyArMTM4LDcgQEAKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKICAgICAgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCiAgICAgICAgICAgICBzb2NrLmxpc3Rlbig1KQotICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KFRJTUVPVVQpCiAgICAgICAgICAgICBpcCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVs6Ml0KICAgICAgICAgICAgIGlwID0gaXAucmVwbGFjZSgnLicsICcsJyk7IHAxID0gcG9ydCAvIDI1NjsgcDIgPSBwb3J0ICUgMjU2CiAgICAgICAgICAgICBzZWxmLnB1c2goJzIyNyBlbnRlcmluZyBwYXNzaXZlIG1vZGUgKCVzLCVkLCVkKScgJShpcCwgcDEsIHAyKSkKQEAgLTE0NCw3ICsxNDgsNyBAQAogICAgIGRlZiBjbWRfZXBydChzZWxmLCBhcmcpOgogICAgICAgICBhZiwgaXAsIHBvcnQgPSBhcmcuc3BsaXQoYXJnWzBdKVsxOi0xXQogICAgICAgICBwb3J0ID0gaW50KHBvcnQpCi0gICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0yKQorICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIApAQCAtMTUyLDcgKzE1Niw3IEBACiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmJpbmQoKHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMF0sIDApKQogICAgICAgICAgICAgc29jay5saXN0ZW4oNSkKLSAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgICAgIHNvY2suc2V0dGltZW91dChUSU1FT1VUKQogICAgICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQogICAgICAgICAgICAgc2VsZi5wdXNoKCcyMjkgZW50ZXJpbmcgZXh0ZW5kZWQgcGFzc2l2ZSBtb2RlICh8fHwlZHwpJyAlcG9ydCkKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpCkBAIC0zMDAsNyArMzA0LDggQEAKIAogaWYgc3NsIGlzIG5vdCBOb25lOgogCi0gICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImtleWNlcnQucGVtIikKKyAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAia2V5Y2VydDMucGVtIikKKyAgICBDQUZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInB5Y2FjZXJ0LnBlbSIpCiAKICAgICBjbGFzcyBTU0xDb25uZWN0aW9uKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgogICAgICAgICAiIiJBbiBhc3luY29yZS5kaXNwYXRjaGVyIHN1YmNsYXNzIHN1cHBvcnRpbmcgVExTL1NTTC4iIiIKQEAgLTMyNyw3ICszMzIsNyBAQAogICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNDEsNyArMzQ2LDcgQEAKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgIyBBbnkgInNvY2tldCBlcnJvciIgY29ycmVzcG9uZHMgdG8gYSBTU0xfRVJST1JfU1lTQ0FMTCByZXR1cm4KICAgICAgICAgICAgICAgICAjIGZyb20gT3BlblNTTCdzIFNTTF9zaHV0ZG93bigpLCBjb3JyZXNwb25kaW5nIHRvIGEKICAgICAgICAgICAgICAgICAjIGNsb3NlZCBzb2NrZXQgY29uZGl0aW9uLiBTZWUgYWxzbzoKQEAgLTQ2MCw3ICs0NjUsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVCwgMCkpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtNDg4LDcgKzQ5Myw3IEBACiAKICAgICBkZWYgdGVzdF9hbGxfZXJyb3JzKHNlbGYpOgogICAgICAgICBleGNlcHRpb25zID0gKGZ0cGxpYi5lcnJvcl9yZXBseSwgZnRwbGliLmVycm9yX3RlbXAsIGZ0cGxpYi5lcnJvcl9wZXJtLAotICAgICAgICAgICAgICAgICAgICAgIGZ0cGxpYi5lcnJvcl9wcm90bywgZnRwbGliLkVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICBmdHBsaWIuZXJyb3JfcHJvdG8sIGZ0cGxpYi5FcnJvciwgT1NFcnJvciwgRU9GRXJyb3IpCiAgICAgICAgIGZvciB4IGluIGV4Y2VwdGlvbnM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmFpc2UgeCgnZXhjZXB0aW9uIG5vdCBpbmNsdWRlZCBpbiBhbGxfZXJyb3JzIHNldCcpCkBAIC02NzgsNyArNjgzLDcgQEAKIAogICAgIGRlZiB0ZXN0X21ha2VwYXN2KHNlbGYpOgogICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5jbGllbnQubWFrZXBhc3YoKQotICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgMTApCisgICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgICAjIElQdjQgaXMgaW4gdXNlLCBqdXN0IG1ha2Ugc3VyZSBzZW5kX2Vwc3YgaGFzIG5vdCBiZWVuIHVzZWQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLCAncGFzdicpCkBAIC02OTEsMTIgKzY5NiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LnNlbmRjbWQoJ25vb3AnKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICAjIGJhc2UgdGVzdAotICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkgYXMgc2VsZi5jbGllbnQ6CiAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc19jbGllbnRfY29ubmVjdGVkKCkpCkBAIC03MDQsNyArNzA5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc19jbGllbnRfY29ubmVjdGVkKCkpCiAKICAgICAgICAgIyBRVUlUIHNlbnQgaW5zaWRlIHRoZSB3aXRoIGJsb2NrCi0gICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PTIpIGFzIHNlbGYuY2xpZW50OgorICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD1USU1FT1VUKSBhcyBzZWxmLmNsaWVudDoKICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgICAgIHNlbGYuY2xpZW50LnNlbmRjbWQoJ25vb3AnKQogICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCkBAIC03MTQsNyArNzE5LDcgQEAKICAgICAgICAgIyBmb3JjZSBhIHdyb25nIHJlc3BvbnNlIGNvZGUgdG8gYmUgc2VudCBvbiBRVUlUOiBlcnJvcl9wZXJtCiAgICAgICAgICMgaXMgZXhwZWN0ZWQgYW5kIHRoZSBjb25uZWN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGNsb3NlZAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpIGFzIHNlbGYuY2xpZW50OgogICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLm5leHRfcmVzcG9uc2UgPSAnNTUwIGVycm9yIG9uIHF1aXQnCkBAIC03MzYsNyArNzQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9KEhPU1QsIHBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5zb2NrLmdldHNvY2tuYW1lKClbMV0sIHBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFERFJJTlVTRToKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjb3VsZG4ndCBiaW5kIHRvIHBvcnQgJWQiICUgcG9ydCkKICAgICAgICAgICAgIHJhaXNlCkBAIC03NDcsNyArNzUyLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgnbGlzdCcpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldHNvY2tuYW1lKClbMV0sIHBvcnQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNzg1LDcgKzc5MCw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15RlRQU2VydmVyKChIT1NUdjYsIDApLCBhZj1zb2NrZXQuQUZfSU5FVDYpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtODAyLDcgKzgwNyw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLCAnZXBzdicpCiAKQEAgLTgyOSw3ICs4MzQsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVRMU19GVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD0yKQorICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICAjIGVuYWJsZSBUTFMKICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCkBAIC04NDMsNyArODQ4LDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTkwMyw3ICs5MDgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdHBsaWIuRlRQX1RMUywgY2VydGZpbGU9Q0VSVEZJTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyhjb250ZXh0PWN0eCwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQogICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKQEAgLTkyMiw2ICs5MjcsMzcgQEAKICAgICAgICAgc2VsZi5jbGllbnQuY2NjKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5jbGllbnQuc29jay51bndyYXApCiAKKyAgICBAc2tpcFVubGVzcyhIQVNfU05JLCAnTm8gU05JIHN1cHBvcnQgaW4gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY2hlY2tfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDQUZJTEUpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKKworICAgICAgICAjIDEyNy4wLjAuMSBkb2Vzbid0IG1hdGNoIFNBTgorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgICMgZXhjZXB0aW9uIHF1aXRzIGNvbm5lY3Rpb24KKworICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgibGlzdCIpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKworICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KCJsb2NhbGhvc3QiLCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdCgibG9jYWxob3N0Iiwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgc2VsZi5jbGllbnQucHJvdF9wKCkKKyAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgibGlzdCIpIGFzIHNvY2s6CisgICAgICAgICAgICBwYXNzCisKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIApAQCAtMTAxNyw4ICsxMDUzLDE5IEBACiAgICAgICAgIGZ0cC5jbG9zZSgpCiAKIAorY2xhc3MgVGVzdE5ldHJjRGVwcmVjYXRpb24oVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCgpLCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBvcGVuKCcubmV0cmMnLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIGZ0cGxpYi5OZXRyYygpCisKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsCisgICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsIFRlc3ROZXRyY0RlcHJlY2F0aW9uLAogICAgICAgICAgICAgIFRlc3RJUHY2RW52aXJvbm1lbnQsCiAgICAgICAgICAgICAgVGVzdFRMU19GVFBDbGFzc01peGluLCBUZXN0VExTX0ZUUENsYXNzXQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weSBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CmluZGV4IGM4ZWQ4MzAuLjUwOTRmN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CkBAIC03LDYgKzcsMTEgQEAKICAgICBkZWYgaW5uZXJfZnVuY3Rpb24oKToKICAgICAgICAgY2xhc3MgTG9jYWxDbGFzczoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2xvYmFsIGlubmVyX2dsb2JhbF9mdW5jdGlvbgorICAgICAgICBkZWYgaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uKCk6CisgICAgICAgICAgICBkZWYgaW5uZXJfZnVuY3Rpb24yKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGlubmVyX2Z1bmN0aW9uMgogICAgICAgICByZXR1cm4gTG9jYWxDbGFzcwogICAgIHJldHVybiBsYW1iZGE6IGlubmVyX2Z1bmN0aW9uCiAKQEAgLTExNiw2ICsxMjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9mdW5jdGlvbigpKCkoKS5fX3F1YWxuYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbF9mdW5jdGlvbi48bG9jYWxzPi5pbm5lcl9mdW5jdGlvbi48bG9jYWxzPi5Mb2NhbENsYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24uX19xdWFsbmFtZV9fLCAnaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24oKS5fX3F1YWxuYW1lX18sICdpbm5lcl9nbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24yJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdjJwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX3F1YWxuYW1lX18sICdjJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdkJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQppbmRleCBkMWNlMmE5Li5hN2U1YzdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQpAQCAtMSw2NiArMSw1MiBAQAotaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGFiYwogaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IHBlcm11dGF0aW9ucwogaW1wb3J0IHBpY2tsZQogZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZQoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKIAotQHN0YXRpY21ldGhvZAotZGVmIFB5dGhvblBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgotICAgICdQdXJlIFB5dGhvbiBhcHByb3hpbWF0aW9uIG9mIHBhcnRpYWwoKScKLSAgICBkZWYgbmV3ZnVuYygqZmFyZ3MsICoqZmtleXdvcmRzKToKLSAgICAgICAgbmV3a2V5d29yZHMgPSBrZXl3b3Jkcy5jb3B5KCkKLSAgICAgICAgbmV3a2V5d29yZHMudXBkYXRlKGZrZXl3b3JkcykKLSAgICAgICAgcmV0dXJuIGZ1bmMoKihhcmdzICsgZmFyZ3MpLCAqKm5ld2tleXdvcmRzKQotICAgIG5ld2Z1bmMuZnVuYyA9IGZ1bmMKLSAgICBuZXdmdW5jLmFyZ3MgPSBhcmdzCi0gICAgbmV3ZnVuYy5rZXl3b3JkcyA9IGtleXdvcmRzCi0gICAgcmV0dXJuIG5ld2Z1bmMKK2ltcG9ydCBmdW5jdG9vbHMKKworcHlfZnVuY3Rvb2xzID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdmdW5jdG9vbHMnLCBibG9ja2VkPVsnX2Z1bmN0b29scyddKQorY19mdW5jdG9vbHMgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2Z1bmN0b29scycsIGZyZXNoPVsnX2Z1bmN0b29scyddKQorCitkZWNpbWFsID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdkZWNpbWFsJywgZnJlc2g9WydfZGVjaW1hbCddKQorCiAKIGRlZiBjYXB0dXJlKCphcmdzLCAqKmt3KToKICAgICAiIiJjYXB0dXJlIGFsbCBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyIiIgogICAgIHJldHVybiBhcmdzLCBrdwogCisKIGRlZiBzaWduYXR1cmUocGFydCk6CiAgICAgIiIiIHJldHVybiB0aGUgc2lnbmF0dXJlIG9mIGEgcGFydGlhbCBvYmplY3QgIiIiCiAgICAgcmV0dXJuIChwYXJ0LmZ1bmMsIHBhcnQuYXJncywgcGFydC5rZXl3b3JkcywgcGFydC5fX2RpY3RfXykKIAotY2xhc3MgVGVzdFBhcnRpYWwodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgdGhldHlwZSA9IGZ1bmN0b29scy5wYXJ0aWFsCitjbGFzcyBUZXN0UGFydGlhbDoKIAogICAgIGRlZiB0ZXN0X2Jhc2ljX2V4YW1wbGVzKHNlbGYpOgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKHApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoMywgNCwgYj0zMCwgYz00MCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgxLCAyLCAzLCA0KSwgZGljdChhPTEwLCBiPTMwLCBjPTQwKSkpCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUobWFwLCBsYW1iZGEgeDogeCoxMCkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChtYXAsIGxhbWJkYSB4OiB4KjEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocChbMSwyLDMsNF0pKSwgWzEwLCAyMCwgMzAsIDQwXSkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6Ci0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQogICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJlYWRhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5mdW5jLCBjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYXJncywgKDEsIDIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2V5d29yZHMsIGRpY3QoYT0xMCwgYj0yMCkpCi0gICAgICAgICMgYXR0cmlidXRlcyBzaG91bGQgbm90IGJlIHdyaXRhYmxlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnZnVuYycsIG1hcCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdhcmdzJywgKDEsIDIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2tleXdvcmRzJywgZGljdChhPTEsIGI9MikpCi0KLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShoZXgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBwLl9fZGljdF9fCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ3BhcnRpYWwgb2JqZWN0IGFsbG93ZWQgX19kaWN0X18gdG8gYmUgZGVsZXRlZCcpCiAKICAgICBkZWYgdGVzdF9hcmd1bWVudF9jaGVja2luZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnRoZXR5cGUpICAgICAjIG5lZWQgYXQgbGVhc3QgYSBmdW5jIGFyZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGFydGlhbCkgICAgICMgbmVlZCBhdCBsZWFzdCBhIGZ1bmMgYXJnCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYudGhldHlwZSgyKSgpCisgICAgICAgICAgICBzZWxmLnBhcnRpYWwoMikoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgpAQCAtNzEsNyArNTcsNyBAQAogICAgICAgICBkZWYgZnVuYyhhPTEwLCBiPTIwKToKICAgICAgICAgICAgIHJldHVybiBhCiAgICAgICAgIGQgPSB7J2EnOjN9Ci0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoZnVuYywgYT01KQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGZ1bmMsIGE9NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCoqZCksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydhJzozfSkKICAgICAgICAgcChiPTcpCkBAIC04MCwyMCArNjYsMjAgQEAKICAgICBkZWYgdGVzdF9hcmdfY29tYmluYXRpb25zKHNlbGYpOgogICAgICAgICAjIGV4ZXJjaXNlIHNwZWNpYWwgY29kZSBwYXRocyBmb3IgemVybyBhcmdzIGluIGVpdGhlciBwYXJ0aWFsCiAgICAgICAgICMgb2JqZWN0IG9yIHRoZSBjYWxsZXIKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHt9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDEsMiksICgoMSwyKSwge30pKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoMSwyKSwge30pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoMyw0KSwgKCgxLDIsMyw0KSwge30pKQogCiAgICAgZGVmIHRlc3Rfa3dfY29tYmluYXRpb25zKHNlbGYpOgogICAgICAgICAjIGV4ZXJjaXNlIHNwZWNpYWwgY29kZSBwYXRocyBmb3Igbm8ga2V5d29yZCBhcmdzIGluCiAgICAgICAgICMgZWl0aGVyIHRoZSBwYXJ0aWFsIG9iamVjdCBvciB0aGUgY2FsbGVyCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocChhPTEpLCAoKCksIHsnYSc6MX0pKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIGE9MSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCBhPTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHsnYSc6MX0pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYj0yKSwgKCgpLCB7J2EnOjEsICdiJzoyfSkpCiAgICAgICAgICMga2V5d29yZCBhcmdzIGluIHRoZSBjYWxsIG92ZXJyaWRlIHRob3NlIGluIHRoZSBwYXJ0aWFsIG9iamVjdApAQCAtMTAyLDcgKzg4LDcgQEAKICAgICBkZWYgdGVzdF9wb3NpdGlvbmFsKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgY29ycmVjdGx5CiAgICAgICAgIGZvciBhcmdzIGluIFsoKSwgKDAsKSwgKDAsMSksICgwLDEsMiksICgwLDEsMiwzKV06Ci0gICAgICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzKQorICAgICAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqYXJncykKICAgICAgICAgICAgIGV4cGVjdGVkID0gYXJncyArICgneCcsKQogICAgICAgICAgICAgZ290LCBlbXB0eSA9IHAoJ3gnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0ge30pCkBAIC0xMTAsMTQgKzk2LDE0IEBACiAgICAgZGVmIHRlc3Rfa2V5d29yZChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUga2V5d29yZCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQogICAgICAgICBmb3IgYSBpbiBbJ2EnLCAwLCBOb25lLCAzLjVdOgotICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPWEpCisgICAgICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIGE9YSkKICAgICAgICAgICAgIGV4cGVjdGVkID0geydhJzphLCd4JzpOb25lfQogICAgICAgICAgICAgZW1wdHksIGdvdCA9IHAoeD1Ob25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0gKCkpCiAKICAgICBkZWYgdGVzdF9ub19zaWRlX2VmZmVjdHMoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgdGhhdCBhZmZlY3Qgc3Vic2VxdWVudCBjYWxscwotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDAsIGE9MSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAwLCBhPTEpCiAgICAgICAgIGFyZ3MxLCBrdzEgPSBwKDEsIGI9MikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3MxID09ICgwLDEpIGFuZCBrdzEgPT0geydhJzoxLCdiJzoyfSkKICAgICAgICAgYXJnczIsIGt3MiA9IHAoKQpAQCAtMTI2LDEzICsxMTIsMTMgQEAKICAgICBkZWYgdGVzdF9lcnJvcl9wcm9wYWdhdGlvbihzZWxmKToKICAgICAgICAgZGVmIGYoeCwgeSk6CiAgICAgICAgICAgICB4IC8geQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEsIDApKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEpLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYpLCAxLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIHk9MCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiksIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgeT0wKSwgMSkKIAogICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoaW50LCBiYXNlPTE2KQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGludCwgYmFzZT0xNikKICAgICAgICAgcCA9IHByb3h5KGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5mdW5jLCBwLmZ1bmMpCiAgICAgICAgIGYgPSBOb25lCkBAIC0xNDAsMzkgKzEyNiw2MSBAQAogCiAgICAgZGVmIHRlc3Rfd2l0aF9ib3VuZF9hbmRfdW5ib3VuZF9tZXRob2RzKHNlbGYpOgogICAgICAgICBkYXRhID0gbGlzdChtYXAoc3RyLCByYW5nZSgxMCkpKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKHN0ci5qb2luLCAnJykKKyAgICAgICAgam9pbiA9IHNlbGYucGFydGlhbChzdHIuam9pbiwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKCcnLmpvaW4pCisgICAgICAgIGpvaW4gPSBzZWxmLnBhcnRpYWwoJycuam9pbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGRhdGEpLCAnMDEyMzQ1Njc4OScpCiAKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0UGFydGlhbEMoVGVzdFBhcnRpYWwsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgcGFydGlhbCA9IGNfZnVuY3Rvb2xzLnBhcnRpYWwKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfdW53cml0YWJsZShzZWxmKToKKyAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBub3QgYmUgd3JpdGFibGUKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2Z1bmMnLCBtYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnYXJncycsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQorCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoaGV4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgcC5fX2RpY3RfXworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQorCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgYXJncyA9IChvYmplY3QoKSwgb2JqZWN0KCkpCiAgICAgICAgIGFyZ3NfcmVwciA9ICcsICcuam9pbihyZXByKGEpIGZvciBhIGluIGFyZ3MpCi0gICAgICAgIGt3YXJncyA9IHsnYSc6IG9iamVjdCgpLCAnYic6IG9iamVjdCgpfQorICAgICAgICAja3dhcmdzID0geydhJzogb2JqZWN0KCksICdiJzogb2JqZWN0KCl9CisgICAgICAgIGt3YXJncyA9IHsnYSc6IG9iamVjdCgpfQogICAgICAgICBrd2FyZ3NfcmVwciA9ICcsICcuam9pbigiJXM9JXIiICUgKGssIHYpIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpKQotICAgICAgICBpZiBzZWxmLnRoZXR5cGUgaXMgZnVuY3Rvb2xzLnBhcnRpYWw6CisgICAgICAgIGlmIHNlbGYucGFydGlhbCBpcyBjX2Z1bmN0b29scy5wYXJ0aWFsOgogICAgICAgICAgICAgbmFtZSA9ICdmdW5jdG9vbHMucGFydGlhbCcKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnRoZXR5cGUuX19uYW1lX18KKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhcnRpYWwuX19uYW1lX18KIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSknLmZvcm1hdChuYW1lLCBjYXB0dXJlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKmFyZ3MpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGFyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICoqa3dhcmdzKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICoqa3dhcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBrd2FyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIsIGt3YXJnc19yZXByKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgotICAgICAgICBmID0gc2VsZi50aGV0eXBlKHNpZ25hdHVyZSwgJ2FzZGYnLCBiYXI9VHJ1ZSkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCiAgICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQogICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCkBAIC0xOTEsMzAgKzE5OSwxNDAgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9CiAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUob2JqZWN0KQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKG9iamVjdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAibmV3IHN0eWxlIGdldGFyZ3MgZm9ybWF0IGJ1dCBhcmd1bWVudCBpcyBub3QgYSB0dXBsZSIsCiAgICAgICAgICAgICAgICAgZi5fX3NldHN0YXRlX18sIEJhZFNlcXVlbmNlKCkpCiAKLWNsYXNzIFBhcnRpYWxTdWJjbGFzcyhmdW5jdG9vbHMucGFydGlhbCk6Ci0gICAgcGFzcwogCi1jbGFzcyBUZXN0UGFydGlhbFN1YmNsYXNzKFRlc3RQYXJ0aWFsKToKK2NsYXNzIFRlc3RQYXJ0aWFsUHkoVGVzdFBhcnRpYWwsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXJ0aWFsID0gc3RhdGljbWV0aG9kKHB5X2Z1bmN0b29scy5wYXJ0aWFsKQogCi0gICAgdGhldHlwZSA9IFBhcnRpYWxTdWJjbGFzcwogCi1jbGFzcyBUZXN0UHl0aG9uUGFydGlhbChUZXN0UGFydGlhbCk6CitpZiBjX2Z1bmN0b29sczoKKyAgICBjbGFzcyBQYXJ0aWFsU3ViY2xhc3MoY19mdW5jdG9vbHMucGFydGlhbCk6CisgICAgICAgIHBhc3MKIAotICAgIHRoZXR5cGUgPSBQeXRob25QYXJ0aWFsCiAKLSAgICAjIHRoZSBweXRob24gdmVyc2lvbiBoYXNuJ3QgYSBuaWNlIHJlcHIKLSAgICB0ZXN0X3JlcHIgPSBOb25lCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX2Z1bmN0b29scywgJ3JlcXVpcmVzIHRoZSBDIF9mdW5jdG9vbHMgbW9kdWxlJykKK2NsYXNzIFRlc3RQYXJ0aWFsQ1N1YmNsYXNzKFRlc3RQYXJ0aWFsQyk6CisgICAgaWYgY19mdW5jdG9vbHM6CisgICAgICAgIHBhcnRpYWwgPSBQYXJ0aWFsU3ViY2xhc3MKIAotICAgICMgdGhlIHB5dGhvbiB2ZXJzaW9uIGlzbid0IHBpY2tsYWJsZQotICAgIHRlc3RfcGlja2xlID0gdGVzdF9zZXRzdGF0ZV9yZWZjb3VudCA9IE5vbmUKIAotICAgICMgdGhlIHB5dGhvbiB2ZXJzaW9uIGlzbid0IGEgdHlwZQotICAgIHRlc3RfYXR0cmlidXRlcyA9IE5vbmUKK2NsYXNzIFRlc3RQYXJ0aWFsTWV0aG9kKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgbm90aGluZyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNhcHR1cmUpCisgICAgICAgIHBvc2l0aW9uYWwgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlLCAxKQorICAgICAgICBrZXl3b3JkcyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNhcHR1cmUsIGE9MikKKyAgICAgICAgYm90aCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNhcHR1cmUsIDMsIGI9NCkKKworICAgICAgICBuZXN0ZWQgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChwb3NpdGlvbmFsLCA1KQorCisgICAgICAgIG92ZXJfcGFydGlhbCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGZ1bmN0b29scy5wYXJ0aWFsKGNhcHR1cmUsIGM9NiksIDcpCisKKyAgICAgICAgc3RhdGljID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2Qoc3RhdGljbWV0aG9kKGNhcHR1cmUpLCA4KQorICAgICAgICBjbHMgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjbGFzc21ldGhvZChjYXB0dXJlKSwgZD05KQorCisgICAgYSA9IEEoKQorCisgICAgZGVmIHRlc3RfYXJnX2NvbWJpbmF0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZygpLCAoKHNlbGYuYSwpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoNSksICgoc2VsZi5hLCA1KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKGM9NiksICgoc2VsZi5hLCksIHsnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZyg1LCBjPTYpLCAoKHNlbGYuYSwgNSksIHsnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5wb3NpdGlvbmFsKCksICgoc2VsZi5hLCAxKSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5wb3NpdGlvbmFsKDUpLCAoKHNlbGYuYSwgMSwgNSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbChjPTYpLCAoKHNlbGYuYSwgMSksIHsnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbCg1LCBjPTYpLCAoKHNlbGYuYSwgMSwgNSksIHsnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3JkcygpLCAoKHNlbGYuYSwpLCB7J2EnOiAyfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKDUpLCAoKHNlbGYuYSwgNSksIHsnYSc6IDJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoYz02KSwgKChzZWxmLmEsKSwgeydhJzogMiwgJ2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKDUsIGM9NiksICgoc2VsZi5hLCA1KSwgeydhJzogMiwgJ2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEuYm90aCgpLCAoKHNlbGYuYSwgMyksIHsnYic6IDR9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEuYm90aCg1KSwgKChzZWxmLmEsIDMsIDUpLCB7J2InOiA0fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoYz02KSwgKChzZWxmLmEsIDMpLCB7J2InOiA0LCAnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEuYm90aCg1LCBjPTYpLCAoKHNlbGYuYSwgMywgNSksIHsnYic6IDQsICdjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5BLmJvdGgoc2VsZi5hLCA1LCBjPTYpLCAoKHNlbGYuYSwgMywgNSksIHsnYic6IDQsICdjJzogNn0pKQorCisgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoKSwgKChzZWxmLmEsIDEsIDUpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZCg2KSwgKChzZWxmLmEsIDEsIDUsIDYpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZChkPTcpLCAoKHNlbGYuYSwgMSwgNSksIHsnZCc6IDd9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKDYsIGQ9NyksICgoc2VsZi5hLCAxLCA1LCA2KSwgeydkJzogN30pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5BLm5lc3RlZChzZWxmLmEsIDYsIGQ9NyksICgoc2VsZi5hLCAxLCA1LCA2KSwgeydkJzogN30pKQorCisgICAgZGVmIHRlc3Rfb3Zlcl9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoKSwgKChzZWxmLmEsIDcpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm92ZXJfcGFydGlhbCg1KSwgKChzZWxmLmEsIDcsIDUpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm92ZXJfcGFydGlhbChkPTgpLCAoKHNlbGYuYSwgNyksIHsnYyc6IDYsICdkJzogOH0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoNSwgZD04KSwgKChzZWxmLmEsIDcsIDUpLCB7J2MnOiA2LCAnZCc6IDh9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5vdmVyX3BhcnRpYWwoc2VsZi5hLCA1LCBkPTgpLCAoKHNlbGYuYSwgNywgNSksIHsnYyc6IDYsICdkJzogOH0pKQorCisgICAgZGVmIHRlc3RfYm91bmRfbWV0aG9kX2ludHJvc3BlY3Rpb24oc2VsZik6CisgICAgICAgIG9iaiA9IHNlbGYuYQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5ib3RoLl9fc2VsZl9fLCBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLm5lc3RlZC5fX3NlbGZfXywgb2JqKQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5vdmVyX3BhcnRpYWwuX19zZWxmX18sIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmouY2xzLl9fc2VsZl9fLCBzZWxmLkEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5BLmNscy5fX3NlbGZfXywgc2VsZi5BKQorCisgICAgZGVmIHRlc3RfdW5ib3VuZF9tZXRob2RfcmV0cmlldmFsKHNlbGYpOgorICAgICAgICBvYmogPSBzZWxmLkEKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5ib3RoLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5uZXN0ZWQsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLm92ZXJfcGFydGlhbCwgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmouc3RhdGljLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHNlbGYuYS5zdGF0aWMsICJfX3NlbGZfXyIpKQorCisgICAgZGVmIHRlc3RfZGVzY3JpcHRvcnMoc2VsZik6CisgICAgICAgIGZvciBvYmogaW4gW3NlbGYuQSwgc2VsZi5hXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmopOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnN0YXRpYygpLCAoKDgsKSwge30pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnN0YXRpYyg1KSwgKCg4LCA1KSwge30pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnN0YXRpYyhkPTgpLCAoKDgsKSwgeydkJzogOH0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnN0YXRpYyg1LCBkPTgpLCAoKDgsIDUpLCB7J2QnOiA4fSkpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoKSwgKChzZWxmLkEsKSwgeydkJzogOX0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscyg1KSwgKChzZWxmLkEsIDUpLCB7J2QnOiA5fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKGM9OCksICgoc2VsZi5BLCksIHsnYyc6IDgsICdkJzogOX0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscyg1LCBjPTgpLCAoKHNlbGYuQSwgNSksIHsnYyc6IDgsICdkJzogOX0pKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGluZ19rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoYT0zKSwgKChzZWxmLmEsKSwgeydhJzogM30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5rZXl3b3JkcyhzZWxmLmEsIGE9MyksICgoc2VsZi5hLCksIHsnYSc6IDN9KSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKE5vbmUsIDEpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodmFycyhzZWxmLkEpWydib3RoJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmdW5jdG9vbHMucGFydGlhbG1ldGhvZCh7fSwgMywgYj00KScuZm9ybWF0KGNhcHR1cmUpKQorCisgICAgZGVmIHRlc3RfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgIGNsYXNzIEFic3RyYWN0KGFiYy5BQkNNZXRhKToKKworICAgICAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICAgICAgZGVmIGFkZChzZWxmLCB4LCB5KToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGFkZDUgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChhZGQsIDUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEFic3RyYWN0LmFkZC5fX2lzYWJzdHJhY3RtZXRob2RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEFic3RyYWN0LmFkZDUuX19pc2Fic3RyYWN0bWV0aG9kX18pCisKKyAgICAgICAgZm9yIGZ1bmMgaW4gW3NlbGYuQS5zdGF0aWMsIHNlbGYuQS5jbHMsIHNlbGYuQS5vdmVyX3BhcnRpYWwsIHNlbGYuQS5uZXN0ZWQsIHNlbGYuQS5ib3RoXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2V0YXR0cihmdW5jLCAnX19pc2Fic3RyYWN0bWV0aG9kX18nLCBGYWxzZSkpCisKIAogY2xhc3MgVGVzdFVwZGF0ZVdyYXBwZXIodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMjMsMTkgKzM0MSwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ9ZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUyk6CiAgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyB3ZXJlIGFzc2lnbmVkCiAgICAgICAgIGZvciBuYW1lIGluIGFzc2lnbmVkOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIod3JhcHBlciwgbmFtZSkgaXMgZ2V0YXR0cih3cmFwcGVkLCBuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cih3cmFwcGVyLCBuYW1lKSwgZ2V0YXR0cih3cmFwcGVkLCBuYW1lKSkKICAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIHdlcmUgdXBkYXRlZAogICAgICAgICBmb3IgbmFtZSBpbiB1cGRhdGVkOgogICAgICAgICAgICAgd3JhcHBlcl9hdHRyID0gZ2V0YXR0cih3cmFwcGVyLCBuYW1lKQogICAgICAgICAgICAgd3JhcHBlZF9hdHRyID0gZ2V0YXR0cih3cmFwcGVkLCBuYW1lKQogICAgICAgICAgICAgZm9yIGtleSBpbiB3cmFwcGVkX2F0dHI6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZWRfYXR0cltrZXldIGlzIHdyYXBwZXJfYXR0cltrZXldKQorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gIl9fZGljdF9fIiBhbmQga2V5ID09ICJfX3dyYXBwZWRfXyI6CisgICAgICAgICAgICAgICAgICAgICMgX193cmFwcGVkX18gaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIHVwZGF0ZSBjb2RlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVkX2F0dHJba2V5XSwgd3JhcHBlcl9hdHRyW2tleV0pCisgICAgICAgICMgQ2hlY2sgX193cmFwcGVkX18KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVkKQorCiAKICAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgogICAgICAgICBkZWYgZihhOidUaGlzIGlzIGEgbmV3IGFubm90YXRpb24nKToKICAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGYuYXR0ciA9ICdUaGlzIGlzIGFsc28gYSB0ZXN0JworICAgICAgICBmLl9fd3JhcHBlZF9fID0gIlRoaXMgaXMgYSBiYWxkIGZhY2VkIGxpZSIKICAgICAgICAgZGVmIHdyYXBwZXIoYjonVGhpcyBpcyB0aGUgcHJpb3IgYW5ub3RhdGlvbicpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZikKQEAgLTMyMiw2ICs0NDcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUod3JhcHBlci5fX2RvY19fLnN0YXJ0c3dpdGgoJ21heCgnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fYW5ub3RhdGlvbnNfXywge30pCiAKKwogY2xhc3MgVGVzdFdyYXBzKFRlc3RVcGRhdGVXcmFwcGVyKToKIAogICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CkBAIC0zMjksMTQgKzQ1NSwxNSBAQAogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYWxzbyBhIHRlc3QnCisgICAgICAgIGYuX193cmFwcGVkX18gPSAiVGhpcyBpcyBzdGlsbCBhIGJhbGQgZmFjZWQgbGllIgogICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGYpCiAgICAgICAgIGRlZiB3cmFwcGVyKCk6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmKQogICAgICAgICByZXR1cm4gd3JhcHBlciwgZgogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGUoc2VsZik6CiAgICAgICAgIHdyYXBwZXIsIGYgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICdmJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fcXVhbG5hbWVfXywgZi5fX3F1YWxuYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhbHNvIGEgdGVzdCcpCkBAIC0zODIsNiArNTA5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGEgZGlmZmVyZW50IHRlc3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuZGljdF9hdHRyLCBmLmRpY3RfYXR0cikKIAorCiBjbGFzcyBUZXN0UmVkdWNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmdW5jID0gZnVuY3Rvb2xzLnJlZHVjZQogCkBAIC00NjIsMjQgKzU5MCwyOSBAQAogICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoYWRkLCBkKSwgIiIuam9pbihkLmtleXMoKSkpCiAKLWNsYXNzIFRlc3RDbXBUb0tleSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFRlc3RDbXBUb0tleToKIAogICAgIGRlZiB0ZXN0X2NtcF90b19rZXkoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSgzKSwga2V5KDMpKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoa2V5KDMpLCBrZXkoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGtleSgzKSwga2V5KDMpKQorCiAgICAgICAgIGRlZiBjbXAyKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIGludCh4KSAtIGludCh5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAyKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkoNC4wKSwga2V5KCc0JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhrZXkoMiksIGtleSgnMzUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoa2V5KDIpLCBrZXkoJzM1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5KDIpLCBrZXkoJzM1JykpCiAKICAgICBkZWYgdGVzdF9jbXBfdG9fa2V5X2FyZ3VtZW50cyhzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXA9Y21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KG9iaj0zKSwga2V5KG9iaj0zKSkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGtleShvYmo9MyksIGtleShvYmo9MSkpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpKToKQEAgLTQ4NywxMCArNjIwLDEwIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpKToKICAgICAgICAgICAgIDEgPCBrZXkoMykgICAgIyBsaHMgaXMgbm90IGEgSyBvYmplY3QKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoKSAgICAgICAgICAgICAjIHRvbyBmZXcgYXJncworICAgICAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KCkgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSwgTm9uZSkgICAjIHRvbyBtYW55IGFyZ3MKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSkKKyAgICAgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxLCBOb25lKSAgICMgdG9vIG1hbnkgYXJncworICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAga2V5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBmZXcgYXJncwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CkBAIC00OTksNyArNjMyLDcgQEAKICAgICBkZWYgdGVzdF9iYWRfY21wKHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgIGtleSgzKSA+IGtleSgxKQogCkBAIC01MTQsMTMgKzY0NywxMyBAQAogICAgIGRlZiB0ZXN0X29ial9maWVsZChzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXA9Y21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KDUwKS5vYmosIDUwKQogCiAgICAgZGVmIHRlc3Rfc29ydF9pbnQoc2VsZik6CiAgICAgICAgIGRlZiBteWNtcCh4LCB5KToKICAgICAgICAgICAgIHJldHVybiB5IC0geAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyYW5nZSg1KSwga2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKSksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJhbmdlKDUpLCBrZXk9c2VsZi5jbXBfdG9fa2V5KG15Y21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWzQsIDMsIDIsIDEsIDBdKQogCiAgICAgZGVmIHRlc3Rfc29ydF9pbnRfc3RyKHNlbGYpOgpAQCAtNTI4LDE4ICs2NjEsMjkgQEAKICAgICAgICAgICAgIHgsIHkgPSBpbnQoeCksIGludCh5KQogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCiAgICAgICAgIHZhbHVlcyA9IFs1LCAnMycsIDcsIDIsICcwJywgJzEnLCA0LCAnMTAnLCAxXQotICAgICAgICB2YWx1ZXMgPSBzb3J0ZWQodmFsdWVzLCBrZXk9ZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApKQorICAgICAgICB2YWx1ZXMgPSBzb3J0ZWQodmFsdWVzLCBrZXk9c2VsZi5jbXBfdG9fa2V5KG15Y21wKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaW50KHZhbHVlKSBmb3IgdmFsdWUgaW4gdmFsdWVzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNCwgNSwgNywgMTBdKQogCiAgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKICAgICAgICAgZGVmIG15Y21wKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIHkgLSB4Ci0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkobXljbXApCiAgICAgICAgIGsgPSBrZXkoMTApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgaykKICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGssIGNvbGxlY3Rpb25zLkhhc2hhYmxlKQogCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfZnVuY3Rvb2xzLCAncmVxdWlyZXMgdGhlIEMgX2Z1bmN0b29scyBtb2R1bGUnKQorY2xhc3MgVGVzdENtcFRvS2V5QyhUZXN0Q21wVG9LZXksIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgY21wX3RvX2tleSA9IGNfZnVuY3Rvb2xzLmNtcF90b19rZXkKKworCitjbGFzcyBUZXN0Q21wVG9LZXlQeShUZXN0Q21wVG9LZXksIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbXBfdG9fa2V5ID0gc3RhdGljbWV0aG9kKHB5X2Z1bmN0b29scy5jbXBfdG9fa2V5KQorCisKIGNsYXNzIFRlc3RUb3RhbE9yZGVyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2x0KHNlbGYpOgpAQCAtNTU3LDYgKzcwMSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgxKSA+IEEoMikpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sZShzZWxmKToKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwpAQCAtNTczLDYgKzcxOCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgxKSA+PSBBKDIpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ3Qoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTU4OSw2ICs3MzUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMikgPCBBKDEpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ2Uoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTYwNSw2ICs3NTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMikgPD0gQSgxKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX25vX292ZXJ3cml0ZShzZWxmKToKICAgICAgICAgIyBuZXcgbWV0aG9kcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBleGlzdGluZwpAQCAtNjI0LDI3ICs3NzIsMTE4IEBACiAgICAgICAgICAgICBjbGFzcyBBOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0X2J1Z18xMDA0MihzZWxmKToKKyAgICBkZWYgdGVzdF90eXBlX2Vycm9yX3doZW5fbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICAjIGJ1ZyAxMDA0MjsgZW5zdXJlIHN0YWNrIG92ZXJmbG93IGRvZXMgbm90IG9jY3VyCisgICAgICAgICMgd2hlbiBkZWNvcmF0ZWQgdHlwZXMgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKLSAgICAgICAgY2xhc3MgVGVzdFRPOgorICAgICAgICBjbGFzcyBJbXBsZW1lbnRzTGVzc1RoYW46CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgogICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW4pOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW4pOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCi0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIFRlc3RUTyg4KSA8PSAoKQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0dyZWF0ZXJUaGFuOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW4pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDw9IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMVCA8IDEiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigtMSkgPCAxCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxUIDwgTEUiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigwKSA8IEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oMCkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTFQgPCBHVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuKDEpIDwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDEpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxFIDw9IExUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDIpIDw9IEltcGxlbWVudHNMZXNzVGhhbigyKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMRSA8PSBHRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbygzKSA8PSBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDMpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdUID4gR0UiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbig0KSA+IEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oNCkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR1QgPiBMVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDUpID4gSW1wbGVtZW50c0xlc3NUaGFuKDUpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdFID49IEdUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDYpID49IEltcGxlbWVudHNHcmVhdGVyVGhhbig2KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSA+PSBMRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyg3KSA+PSBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDcpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdFIHdoZW4gZXF1YWwiKToKKyAgICAgICAgICAgIGEgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOCkKKyAgICAgICAgICAgIGIgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBhID49IGIKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTEUgd2hlbiBlcXVhbCIpOgorICAgICAgICAgICAgYSA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg5KQorICAgICAgICAgICAgYiA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGEgPD0gYgogCiBjbGFzcyBUZXN0TFJVKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2xydShzZWxmKToKICAgICAgICAgZGVmIG9yaWcoeCwgeSk6Ci0gICAgICAgICAgICByZXR1cm4gMyp4K3kKKyAgICAgICAgICAgIHJldHVybiAzICogeCArIHkKICAgICAgICAgZiA9IGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0yMCkob3JpZykKICAgICAgICAgaGl0cywgbWlzc2VzLCBtYXhzaXplLCBjdXJyc2l6ZSA9IGYuY2FjaGVfaW5mbygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4c2l6ZSwgMjApCkBAIC03NDksNyArOTg4LDcgQEAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1c2VyX2Z1bmN0aW9uIGV4Y2VwdGlvbnMgZ2V0IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQKICAgICAgICAgIyBjcmVhdGluZyBhIGhhcmQtdG8tcmVhZCBjaGFpbmVkIGV4Y2VwdGlvbi4KICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMxNzcKLSAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEwMCk6CisgICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMjgpOgogICAgICAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZSkKICAgICAgICAgICAgIGRlZiBmdW5jKGkpOgogICAgICAgICAgICAgICAgIHJldHVybiAnYWJjJ1tpXQpAQCAtNzYyLDcgKzEwMDEsNyBAQAogICAgICAgICAgICAgICAgIGZ1bmMoMTUpCiAKICAgICBkZWYgdGVzdF9scnVfd2l0aF90eXBlcyhzZWxmKToKLSAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEwMCk6CisgICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMjgpOgogICAgICAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT1tYXhzaXplLCB0eXBlZD1UcnVlKQogICAgICAgICAgICAgZGVmIHNxdWFyZSh4KToKICAgICAgICAgICAgICAgICByZXR1cm4geCAqIHgKQEAgLTc3Nyw2ICsxMDE2LDM2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxdWFyZS5jYWNoZV9pbmZvKCkuaGl0cywgNCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3F1YXJlLmNhY2hlX2luZm8oKS5taXNzZXMsIDQpCiAKKyAgICBkZWYgdGVzdF9scnVfd2l0aF9rZXl3b3JkX2FyZ3Moc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKKyAgICAgICAgZGVmIGZpYihuKToKKyAgICAgICAgICAgIGlmIG4gPCAyOgorICAgICAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgICAgICByZXR1cm4gZmliKG49bi0xKSArIGZpYihuPW4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFtmaWIobj1udW1iZXIpIGZvciBudW1iZXIgaW4gcmFuZ2UoMTYpXSwKKyAgICAgICAgICAgIFswLCAxLCAxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODksIDE0NCwgMjMzLCAzNzcsIDYxMF0KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTI4LCBtaXNzZXM9MTYsIG1heHNpemU9MTI4LCBjdXJyc2l6ZT0xNikpCisgICAgICAgIGZpYi5jYWNoZV9jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MCwgbWlzc2VzPTAsIG1heHNpemU9MTI4LCBjdXJyc2l6ZT0wKSkKKworICAgIGRlZiB0ZXN0X2xydV93aXRoX2tleXdvcmRfYXJnc19tYXhzaXplX25vbmUoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9Tm9uZSkKKyAgICAgICAgZGVmIGZpYihuKToKKyAgICAgICAgICAgIGlmIG4gPCAyOgorICAgICAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgICAgICByZXR1cm4gZmliKG49bi0xKSArIGZpYihuPW4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbZmliKG49bnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDE2KV0sCisgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3LCA2MTBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTI4LCBtaXNzZXM9MTYsIG1heHNpemU9Tm9uZSwgY3VycnNpemU9MTYpKQorICAgICAgICBmaWIuY2FjaGVfY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTApKQorCiAgICAgZGVmIHRlc3RfbmVlZF9mb3JfcmxvY2soc2VsZik6CiAgICAgICAgICMgVGhpcyB3aWxsIGRlYWRsb2NrIG9uIGFuIExSVSBjYWNoZSB0aGF0IHVzZXMgYSByZWd1bGFyIGxvY2sKIApAQCAtODAxLDE4ICsxMDcwLDUwMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RfZnVuYyhEb3VibGVFcSgyKSksICAgICMgVHJpZ2dlciBhIHJlLWVudHJhbnQgX19lcV9fIGNhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGVFcSgyKSkgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGUgY29ycmVjdCByZXR1cm4gdmFsdWUKIAorICAgIGRlZiB0ZXN0X2Vhcmx5X2RldGVjdGlvbl9vZl9iYWRfY2FsbChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjIxODQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisKK2NsYXNzIFRlc3RTaW5nbGVEaXNwYXRjaCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2ltcGxlX292ZXJsb2FkcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBkZWYgZ19pbnQoaSk6CisgICAgICAgICAgICByZXR1cm4gImludGVnZXIiCisgICAgICAgIGcucmVnaXN0ZXIoaW50LCBnX2ludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKCJzdHIiKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoMSksICJpbnRlZ2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKFsxLDIsM10pLCAiYmFzZSIpCisKKyAgICBkZWYgdGVzdF9tcm8oc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChDLCBCKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGdfQShhKToKKyAgICAgICAgICAgIHJldHVybiAiQSIKKyAgICAgICAgZGVmIGdfQihiKToKKyAgICAgICAgICAgIHJldHVybiAiQiIKKyAgICAgICAgZy5yZWdpc3RlcihBLCBnX0EpCisgICAgICAgIGcucmVnaXN0ZXIoQiwgZ19CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQSgpKSwgIkEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQigpKSwgIkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQygpKSwgIkEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoRCgpKSwgIkIiKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIEBnLnJlZ2lzdGVyKGludCkKKyAgICAgICAgZGVmIGdfaW50KGkpOgorICAgICAgICAgICAgcmV0dXJuICJpbnQgJXMiICUgKGksKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoIiIpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygxMiksICJpbnQgMTIiKQorICAgICAgICBzZWxmLmFzc2VydElzKGcuZGlzcGF0Y2goaW50KSwgZ19pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZy5kaXNwYXRjaChvYmplY3QpLCBnLmRpc3BhdGNoKHN0cikpCisgICAgICAgICMgTm90ZTogaW4gdGhlIGFzc2VydCBhYm92ZSB0aGlzIGlzIG5vdCBnLgorICAgICAgICAjIEBzaW5nbGVkaXNwYXRjaCByZXR1cm5zIHRoZSB3cmFwcGVyLgorCisgICAgZGVmIHRlc3Rfd3JhcHBpbmdfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgIlNpbXBsZSB0ZXN0IgorICAgICAgICAgICAgcmV0dXJuICJUZXN0IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcuX19uYW1lX18sICJnIikKKyAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5fX2RvY19fLCAiU2ltcGxlIHRlc3QiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZGVjaW1hbCwgJ3JlcXVpcmVzIF9kZWNpbWFsJykKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jX2NsYXNzZXMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGcucmVnaXN0ZXIoZGVjaW1hbC5EZWNpbWFsRXhjZXB0aW9uKQorICAgICAgICBkZWYgXyhvYmopOgorICAgICAgICAgICAgcmV0dXJuIG9iai5hcmdzCisgICAgICAgIHN1Ym4gPSBkZWNpbWFsLlN1Ym5vcm1hbCgiRXhwb25lbnQgPCBFbWluIikKKyAgICAgICAgcm5kID0gZGVjaW1hbC5Sb3VuZGVkKCJOdW1iZXIgZ290IHJvdW5kZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoc3VibiksICgiRXhwb25lbnQgPCBFbWluIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocm5kKSwgKCJOdW1iZXIgZ290IHJvdW5kZWQiLCkpCisgICAgICAgIEBnLnJlZ2lzdGVyKGRlY2ltYWwuU3Vibm9ybWFsKQorICAgICAgICBkZWYgXyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJUb28gc21hbGwgdG8gY2FyZS4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzdWJuKSwgIlRvbyBzbWFsbCB0byBjYXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhybmQpLCAoIk51bWJlciBnb3Qgcm91bmRlZCIsKSkKKworICAgIGRlZiB0ZXN0X2NvbXBvc2VfbXJvKHNlbGYpOgorICAgICAgICAjIE5vbmUgb2YgdGhlIGV4YW1wbGVzIGluIHRoaXMgdGVzdCBkZXBlbmQgb24gaGF5c3RhY2sgb3JkZXJpbmcuCisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBtcm8gPSBmdW5jdG9vbHMuX2NvbXBvc2VfbXJvCisgICAgICAgIGJhc2VzID0gW2MuU2VxdWVuY2UsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywgYy5TZXRdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhkaWN0LCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW2RpY3QsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywgYy5TaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorICAgICAgICBiYXNlcyA9IFtjLkNvbnRhaW5lciwgYy5NYXBwaW5nLCBjLk11dGFibGVNYXBwaW5nLCBjLk9yZGVyZWREaWN0XQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oYy5DaGFpbk1hcCwgaGF5c3RhY2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtjLkNoYWluTWFwLCBjLk11dGFibGVNYXBwaW5nLCBjLk1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLlNpemVkLCBjLkl0ZXJhYmxlLCBjLkNvbnRhaW5lciwgb2JqZWN0XSkKKworICAgICAgICAjIElmIHRoZXJlJ3MgYSBnZW5lcmljIGZ1bmN0aW9uIHdpdGggaW1wbGVtZW50YXRpb25zIHJlZ2lzdGVyZWQgZm9yCisgICAgICAgICMgYm90aCBTaXplZCBhbmQgQ29udGFpbmVyLCBwYXNzaW5nIGEgZGVmYXVsdGRpY3QgdG8gaXQgcmVzdWx0cyBpbiBhbgorICAgICAgICAjIGFtYmlndW91cyBkaXNwYXRjaCB3aGljaCB3aWxsIGNhdXNlIGEgUnVudGltZUVycm9yIChzZWUKKyAgICAgICAgIyB0ZXN0X21yb19jb25mbGljdHMpLgorICAgICAgICBiYXNlcyA9IFtjLkNvbnRhaW5lciwgYy5TaXplZCwgc3RyXQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oYy5kZWZhdWx0ZGljdCwgW2MuU2l6ZWQsIGMuQ29udGFpbmVyLCBzdHJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbYy5kZWZhdWx0ZGljdCwgZGljdCwgYy5TaXplZCwgYy5Db250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RdKQorCisgICAgICAgICMgTXV0YWJsZVNlcXVlbmNlIGJlbG93IGlzIHJlZ2lzdGVyZWQgZGlyZWN0bHkgb24gRC4gSW4gb3RoZXIgd29yZHMsIGl0CisgICAgICAgICMgcHJlY2VlZHMgTXV0YWJsZU1hcHBpbmcgd2hpY2ggbWVhbnMgc2luZ2xlIGRpc3BhdGNoIHdpbGwgYWx3YXlzCisgICAgICAgICMgY2hvb3NlIE11dGFibGVTZXF1ZW5jZSBoZXJlLgorICAgICAgICBjbGFzcyBEKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjLk11dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihEKQorICAgICAgICBiYXNlcyA9IFtjLk11dGFibGVTZXF1ZW5jZSwgYy5NdXRhYmxlTWFwcGluZ10KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKEQsIGJhc2VzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbRCwgYy5NdXRhYmxlU2VxdWVuY2UsIGMuU2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmRlZmF1bHRkaWN0LCBkaWN0LCBjLk11dGFibGVNYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5NYXBwaW5nLCBjLlNpemVkLCBjLkl0ZXJhYmxlLCBjLkNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF0pCisKKyAgICAgICAgIyBDb250YWluZXIgYW5kIENhbGxhYmxlIGFyZSByZWdpc3RlcmVkIG9uIGRpZmZlcmVudCBiYXNlIGNsYXNzZXMgYW5kCisgICAgICAgICMgYSBnZW5lcmljIGZ1bmN0aW9uIHN1cHBvcnRpbmcgYm90aCBzaG91bGQgYWx3YXlzIHBpY2sgdGhlIENhbGxhYmxlCisgICAgICAgICMgaW1wbGVtZW50YXRpb24gaWYgYSBDIGluc3RhbmNlIGlzIHBhc3NlZC4KKyAgICAgICAgY2xhc3MgQyhjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGJhc2VzID0gW2MuU2l6ZWQsIGMuQ2FsbGFibGUsIGMuQ29udGFpbmVyLCBjLk1hcHBpbmddCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhDLCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW0MsIGMuQ2FsbGFibGUsIGMuZGVmYXVsdGRpY3QsIGRpY3QsIGMuTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfYWJjKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgZCA9IHsiYSI6ICJiIn0KKyAgICAgICAgbCA9IFsxLCAyLCAzXQorICAgICAgICBzID0ge29iamVjdCgpLCBOb25lfQorICAgICAgICBmID0gZnJvemVuc2V0KHMpCisgICAgICAgIHQgPSAoMSwgMiwgMykKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAiYmFzZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIG9iajogInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZywgbGFtYmRhIG9iajogIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5DaGFpbk1hcCwgbGFtYmRhIG9iajogImNoYWlubWFwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKSAgIyBpcnJlbGV2YW50IEFCQ3MgcmVnaXN0ZXJlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlU2VxdWVuY2UsIGxhbWJkYSBvYmo6ICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlU2V0LCBsYW1iZGEgb2JqOiAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuTWFwcGluZywgbGFtYmRhIG9iajogIm1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpICAjIG5vdCBzcGVjaWZpYyBlbm91Z2gKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2VxdWVuY2UsIGxhbWJkYSBvYmo6ICJzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2V0LCBsYW1iZGEgb2JqOiAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGRpY3QsIGxhbWJkYSBvYmo6ICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIobGlzdCwgbGFtYmRhIG9iajogImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoc2V0LCBsYW1iZGEgb2JqOiAiY29uY3JldGUtc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoZnJvemVuc2V0LCBsYW1iZGEgb2JqOiAiZnJvemVuLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiY29uY3JldGUtc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAiZnJvemVuLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3Rlcih0dXBsZSwgbGFtYmRhIG9iajogInR1cGxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAidHVwbGUiKQorCisgICAgZGVmIHRlc3RfYzNfYWJjKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgbXJvID0gZnVuY3Rvb2xzLl9jM19tcm8KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAgICAjIGltcGxpZXMgU2l6ZWQKKyAgICAgICAgQGMuQ29udGFpbmVyLnJlZ2lzdGVyCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAgICAgcGFzcyAgICMgdW5yZWxhdGVkCisgICAgICAgIGNsYXNzIFgoRCwgQywgQik6CisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcyAgICMgaW1wbGllcyBDYWxsYWJsZQorICAgICAgICBleHBlY3RlZCA9IFtYLCBjLkNhbGxhYmxlLCBELCBDLCBjLkNvbnRhaW5lciwgQiwgYy5TaXplZCwgQSwgb2JqZWN0XQorICAgICAgICBmb3IgYWJjcyBpbiBwZXJtdXRhdGlvbnMoW2MuU2l6ZWQsIGMuQ2FsbGFibGUsIGMuQ29udGFpbmVyXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ybyhYLCBhYmNzPWFiY3MpLCBleHBlY3RlZCkKKyAgICAgICAgIyB1bnJlbGF0ZWQgQUJDcyBkb24ndCBhcHBlYXIgaW4gdGhlIHJlc3VsdGluZyBNUk8KKyAgICAgICAgbWFueV9hYmNzID0gW2MuTWFwcGluZywgYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXIsIGMuSXRlcmFibGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXJvKFgsIGFiY3M9bWFueV9hYmNzKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9tcm9fY29uZmxpY3RzKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBjbGFzcyBPKGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgbyA9IE8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkl0ZXJhYmxlLCBsYW1iZGEgYXJnOiAiaXRlcmFibGUiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuQ29udGFpbmVyLCBsYW1iZGEgYXJnOiAiY29udGFpbmVyIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgYXJnOiAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2V0LCBsYW1iZGEgYXJnOiAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIF9fbXJvX18KKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKSAgICMgc2VlIGFib3ZlOiBTaXplZCBpcyBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkNvbnRhaW5lcgorICAgICAgICBjbGFzcyBQOgorICAgICAgICAgICAgcGFzcworICAgICAgICBwID0gUCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgImJhc2UiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgIml0ZXJhYmxlIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoUCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX29uZToKKyAgICAgICAgICAgIGcocCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV9vbmUuZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICgoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGUnPiIpLAorICAgICAgICAgICAgICgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5JdGVyYWJsZSc+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+IikpLAorICAgICAgICApCisgICAgICAgIGNsYXNzIFEoYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBxID0gUSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNpemVkIikKKyAgICAgICAgYy5JdGVyYWJsZS5yZWdpc3RlcihRKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocSksICJzaXplZCIpICAgIyBiZWNhdXNlIGl0J3MgZXhwbGljaXRseSBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKFEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkl0ZXJhYmxlCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGgoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGgucmVnaXN0ZXIoYy5TaXplZCkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2l6ZWQiCisgICAgICAgIEBoLnJlZ2lzdGVyKGMuQ29udGFpbmVyKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJjb250YWluZXIiCisgICAgICAgICMgRXZlbiB0aG91Z2ggU2l6ZWQgYW5kIENvbnRhaW5lciBhcmUgZXhwbGljaXQgYmFzZXMgb2YgTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICMgdGhpcyBBQkMgaXMgaW1wbGljaXRseSByZWdpc3RlcmVkIG9uIGRlZmF1bHRkaWN0IHdoaWNoIG1ha2VzIGFsbCBvZgorICAgICAgICAjIE11dGFibGVNYXBwaW5nJ3MgYmFzZXMgaW1wbGljaXQgYXMgd2VsbCBmcm9tIGRlZmF1bHRkaWN0J3MKKyAgICAgICAgIyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX3R3bzoKKyAgICAgICAgICAgIGgoYy5kZWZhdWx0ZGljdChsYW1iZGE6IDApKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX3R3by5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgUihjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoUikKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaShhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJtYXBwaW5nIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2VxdWVuY2UiCisgICAgICAgIHIgPSBSKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpKHIpLCAic2VxdWVuY2UiKQorICAgICAgICBjbGFzcyBTOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBUKFMsIGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgdCA9IFQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgodCksICJzaXplZCIpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCh0KSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIHRoZSBNUk8KKyAgICAgICAgY2xhc3MgVToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHUgPSBVKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKHUpLCAic2l6ZWQiKSAgICMgaW1wbGljaXQgU2l6ZWQgc3ViY2xhc3MgaW5mZXJyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgZXhpc3RlbmNlIG9mIF9fbGVuX18oKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihVKQorICAgICAgICAjIFRoZXJlIGlzIG5vIHByZWZlcmVuY2UgZm9yIHJlZ2lzdGVyZWQgdmVyc3VzIGluZmVycmVkIEFCQ3MuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyByZV90aHJlZToKKyAgICAgICAgICAgIGgodSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV90aHJlZS5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgVihjLlNpemVkLCBTKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGooYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGoucmVnaXN0ZXIoUykKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAicyIKKyAgICAgICAgQGoucmVnaXN0ZXIoYy5Db250YWluZXIpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImNvbnRhaW5lciIKKyAgICAgICAgdiA9IFYoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGoodiksICJzIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoVikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqKHYpLCAiY29udGFpbmVyIikgICAjIGJlY2F1c2UgaXQgZW5kcyB1cCByaWdodCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2l6ZWQgaW4gdGhlIE1STworCisgICAgZGVmIHRlc3RfY2FjaGVfaW52YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBVc2VyRGljdAorICAgICAgICBjbGFzcyBUcmFjaW5nRGljdChVc2VyRGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBzdXBlcihUcmFjaW5nRGljdCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcyA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzID0gW10KKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGF0YVtrZXldCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcy5hcHBlbmQoa2V5KQorICAgICAgICAgICAgICAgIHNlbGYuZGF0YVtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorICAgICAgICBfb3JpZ193a2QgPSBmdW5jdG9vbHMuV2Vha0tleURpY3Rpb25hcnkKKyAgICAgICAgdGQgPSBUcmFjaW5nRGljdCgpCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IGxhbWJkYTogdGQKKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGwgPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbbGlzdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLCB0ZC5kYXRhW2xpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgYXJnOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5fZmluZF9pbXBsKGRpY3QsIGcucmVnaXN0cnkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtsaXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMuX2ZpbmRfaW1wbChsaXN0LCBnLnJlZ2lzdHJ5KSkKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlTWFwcGluZy5yZWdpc3RlcihYKSAgICMgV2lsbCBub3QgaW52YWxpZGF0ZSB0aGUgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCB1c2luZyBBQkNzIHlldC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIGFyZzogInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5kaXNwYXRjaChsaXN0KQorICAgICAgICBnLmRpc3BhdGNoKGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgYy5NdXRhYmxlU2V0LnJlZ2lzdGVyKFgpICAgICAgICMgV2lsbCBpbnZhbGlkYXRlIHRoZSBjYWNoZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKSAgICMgU3RhbGUgY2FjaGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZywgbGFtYmRhIGFyZzogIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgZy5yZWdpc3RlcihkaWN0LCBsYW1iZGEgYXJnOiAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgZy5fY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IF9vcmlnX3drZAorCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X2NsYXNzZXMgPSAoCi0gICAgICAgIFRlc3RQYXJ0aWFsLAotICAgICAgICBUZXN0UGFydGlhbFN1YmNsYXNzLAotICAgICAgICBUZXN0UHl0aG9uUGFydGlhbCwKKyAgICAgICAgVGVzdFBhcnRpYWxDLAorICAgICAgICBUZXN0UGFydGlhbFB5LAorICAgICAgICBUZXN0UGFydGlhbENTdWJjbGFzcywKKyAgICAgICAgVGVzdFBhcnRpYWxNZXRob2QsCiAgICAgICAgIFRlc3RVcGRhdGVXcmFwcGVyLAogICAgICAgICBUZXN0VG90YWxPcmRlcmluZywKLSAgICAgICAgVGVzdENtcFRvS2V5LAorICAgICAgICBUZXN0Q21wVG9LZXlDLAorICAgICAgICBUZXN0Q21wVG9LZXlQeSwKICAgICAgICAgVGVzdFdyYXBzLAogICAgICAgICBUZXN0UmVkdWNlLAogICAgICAgICBUZXN0TFJVLAorICAgICAgICBUZXN0U2luZ2xlRGlzcGF0Y2gsCiAgICAgKQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKaW5kZXggYTBjMTU2Zi4uYmVhYzk5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKQEAgLTgyLDYgKzgyLDE0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQogCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlMTAoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTEwCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmUxMCIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCiAgICAgZGVmIHRlc3RfcGFyc2VyaGFjayhzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgdGhlIHBhcnNlci5jOjpmdXR1cmVfaGFjayBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZAogICAgICAgICAjIE5vdGU6IGFsdGhvdWdoIHRoaXMgdGVzdCBtdXN0IHBhc3MsIGl0J3Mgbm90IHRlc3RpbmcgdGhlIG9yaWdpbmFsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2djLnB5IGIvTGliL3Rlc3QvdGVzdF9nYy5weQppbmRleCBjNTliNzJlLi5jMGJlNTM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2djLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKQEAgLTEsNiArMSw4IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAodmVyYm9zZSwgcmVmY291bnRfdGVzdCwgcnVuX3VuaXR0ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX3B5dGhvbl9zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfcHl0aG9uX3N0ZGVyciwgY3B5dGhvbl9vbmx5KQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIG1ha2Vfc2NyaXB0LCB0ZW1wX2RpcgorCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IGdjCkBAIC0xMSw2ICsxMywxNSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAordHJ5OgorICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCB3aXRoX3RwX2RlbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGRlZiB3aXRoX3RwX2RlbChjbHMpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdyZXF1aXJlcyBfdGVzdGNhcGkud2l0aF90cF9kZWwnKQorICAgICAgICByZXR1cm4gQworCiAjIyMgU3VwcG9ydCBjb2RlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTM4LDYgKzQ5LDcgQEAKICAgICAgICAgIyBnYyBjb2xsZWN0cyBpdC4KICAgICAgICAgc2VsZi53ciA9IHdlYWtyZWYucmVmKEMxMDU1ODIwKDY2NiksIGl0X2hhcHBlbmVkKQogCitAd2l0aF90cF9kZWwKIGNsYXNzIFVuY29sbGVjdGFibGUob2JqZWN0KToKICAgICAiIiJDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgd2l0aCBtdWx0aXBsZSBfX2RlbF9fIG1ldGhvZHMuCiAKQEAgLTUwLDcgKzYyLDcgQEAKICAgICAgICAgICAgIHNlbGYucGFydG5lciA9IFVuY29sbGVjdGFibGUocGFydG5lcj1zZWxmKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5wYXJ0bmVyID0gcGFydG5lcgotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOgogICAgICAgICBwYXNzCiAKICMjIyBUZXN0cwpAQCAtMTM5LDExICsxNTEsMTMgQEAKICAgICAgICAgZGVsIGEKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCiAKLSAgICBkZWYgdGVzdF9maW5hbGl6ZXIoc2VsZik6CisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2xlZ2FjeV9maW5hbGl6ZXIoc2VsZik6CiAgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKICAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBAd2l0aF90cF9kZWwKICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX190cF9kZWxfXyhzZWxmKTogcGFzcwogICAgICAgICBjbGFzcyBCOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQSgpCkBAIC0xNjMsMTEgKzE3NywxMyBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgZmluZCBvYmogaW4gZ2FyYmFnZSAoZmluYWxpemVyKSIpCiAgICAgICAgIGdjLmdhcmJhZ2UucmVtb3ZlKG9iaikKIAotICAgIGRlZiB0ZXN0X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfbGVnYWN5X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKICAgICAgICAgIyBBKCkgaXMgdW5jb2xsZWN0YWJsZSBpZiBpdCBpcyBwYXJ0IG9mIGEgY3ljbGUsIG1ha2Ugc3VyZSBpdCBzaG93cyB1cAogICAgICAgICAjIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIEB3aXRoX3RwX2RlbAogICAgICAgICBjbGFzcyBBKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6IHBhc3MKICAgICAgICAgY2xhc3MgQihvYmplY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQSgpCkBAIC01NjQsMTYgKzU4MCw1MSBAQAogICAgICAgICAgICAgIyB3b3VsZCBiZSBkYW1hZ2VkLCB3aXRoIGFuIGVtcHR5IF9fZGljdF9fLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBOb25lKQogCisgICAgZGVmIHRlc3RfYnVnMjE0MzUoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhIHBvb3IgdGVzdCAtIGl0cyBvbmx5IHZpcnR1ZSBpcyB0aGF0IGl0IGhhcHBlbmVkIHRvCisgICAgICAgICMgc2VnZmF1bHQgb24gVGltJ3MgV2luZG93cyBib3ggYmVmb3JlIHRoZSBwYXRjaCBmb3IgMjE0MzUgd2FzCisgICAgICAgICMgYXBwbGllZC4gIFRoYXQncyBhIG5hc3R5IGJ1ZyByZWx5aW5nIG9uIHNwZWNpZmljIHBpZWNlcyBvZiBjeWNsaWMKKyAgICAgICAgIyB0cmFzaCBhcHBlYXJpbmcgaW4gZXhhY3RseSB0aGUgcmlnaHQgb3JkZXIgaW4gZmluYWxpemVfZ2FyYmFnZSgpJ3MKKyAgICAgICAgIyBpbnB1dCBsaXN0LgorICAgICAgICAjIEJ1dCB0aGVyZSdzIG5vIHJlbGlhYmxlIHdheSB0byBmb3JjZSB0aGF0IG9yZGVyIGZyb20gUHl0aG9uIGNvZGUsCisgICAgICAgICMgc28gb3ZlciB0aW1lIGNoYW5jZXMgYXJlIGdvb2QgdGhpcyB0ZXN0IHdvbid0IHJlYWxseSBiZSB0ZXN0aW5nIG11Y2gKKyAgICAgICAgIyBvZiBhbnl0aGluZyBhbnltb3JlLiAgU3RpbGwsIGlmIGl0IGJsb3dzIHVwLCB0aGVyZSdzIF9zb21lXworICAgICAgICAjIHByb2JsZW0gOy0pCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuYXR0ciA9IE5vbmUKKworICAgICAgICBkZWYgZG9fd29yaygpOgorICAgICAgICAgICAgYSA9IEEoKQorICAgICAgICAgICAgYiA9IEIoQSgpKQorCisgICAgICAgICAgICBhLmF0dHIgPSBiCisgICAgICAgICAgICBiLmF0dHIgPSBhCisKKyAgICAgICAgZG9fd29yaygpCisgICAgICAgIGdjLmNvbGxlY3QoKSAjIHRoaXMgYmxvd3MgdXAgKGJhZCBDIHBvaW50ZXIpIHdoZW4gaXQgZmFpbHMKKworICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9nYXJiYWdlX2F0X3NodXRkb3duKHNlbGYpOgogICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICBjb2RlID0gIiIiaWYgMToKICAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICAgICAgQF90ZXN0Y2FwaS53aXRoX3RwX2RlbAogICAgICAgICAgICAgY2xhc3MgWDoKICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiPFggJSVyPiIgJSUgc2VsZi5uYW1lCi0gICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAgICAgeCA9IFgoJ2ZpcnN0JykKQEAgLTYxMCw2ICs2NjEsNjYgQEAKICAgICAgICAgc3RkZXJyID0gcnVuX2NvbW1hbmQoY29kZSAlICJnYy5ERUJVR19TQVZFQUxMIikKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiInVuY29sbGVjdGFibGUgb2JqZWN0cyBhdCBzaHV0ZG93biIsIHN0ZGVycikKIAorICAgIGRlZiB0ZXN0X2djX21haW5fbW9kdWxlX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZSB0aHJvdWdoIHRoZSBfX21haW5fXyBtb2R1bGUgYW5kIGNoZWNrCisgICAgICAgICMgaXQgZ2V0cyBjb2xsZWN0ZWQgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdfX2RlbF9fIGNhbGxlZCcpCisgICAgICAgICAgICBsID0gW0MoKV0KKyAgICAgICAgICAgIGwuYXBwZW5kKGwpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJ19fZGVsX18gY2FsbGVkJykKKworICAgIGRlZiB0ZXN0X2djX29yZGluYXJ5X21vZHVsZV9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBTYW1lIGFzIGFib3ZlLCBidXQgd2l0aCBhIG5vbi1fX21haW5fXyBtb2R1bGUuCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kdWxlID0gIiIiaWYgMToKKyAgICAgICAgICAgICAgICBpbXBvcnQgd2Vha3JlZgorICAgICAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ19fZGVsX18gY2FsbGVkJykKKyAgICAgICAgICAgICAgICBsID0gW0MoKV0KKyAgICAgICAgICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCAlcikKKyAgICAgICAgICAgICAgICBpbXBvcnQgZ2N0ZXN0CisgICAgICAgICAgICAgICAgIiIiICUgKHNjcmlwdF9kaXIsKQorICAgICAgICAgICAgbWFrZV9zY3JpcHQoc2NyaXB0X2RpciwgJ2djdGVzdCcsIG1vZHVsZSkKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGInX19kZWxfXyBjYWxsZWQnKQorCisgICAgZGVmIHRlc3RfZ2V0X3N0YXRzKHNlbGYpOgorICAgICAgICBzdGF0cyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0YXRzKSwgMykKKyAgICAgICAgZm9yIHN0IGluIHN0YXRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0LCBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ImNvbGxlY3RlZCIsICJjb2xsZWN0aW9ucyIsICJ1bmNvbGxlY3RhYmxlIn0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsiY29sbGVjdGVkIl0sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsiY29sbGVjdGlvbnMiXSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0WyJ1bmNvbGxlY3RhYmxlIl0sIDApCisgICAgICAgICMgQ2hlY2sgdGhhdCBjb2xsZWN0aW9uIGNvdW50cyBhcmUgaW5jcmVtZW50ZWQgY29ycmVjdGx5CisgICAgICAgIGlmIGdjLmlzZW5hYmxlZCgpOgorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGdjLmVuYWJsZSkKKyAgICAgICAgICAgIGdjLmRpc2FibGUoKQorICAgICAgICBvbGQgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBnYy5jb2xsZWN0KDApCisgICAgICAgIG5ldyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzBdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMF1bImNvbGxlY3Rpb25zIl0gKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1sxXVsiY29sbGVjdGlvbnMiXSwgb2xkWzFdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1syXVsiY29sbGVjdGlvbnMiXSwgb2xkWzJdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBnYy5jb2xsZWN0KDIpCisgICAgICAgIG5ldyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzBdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMF1bImNvbGxlY3Rpb25zIl0gKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1sxXVsiY29sbGVjdGlvbnMiXSwgb2xkWzFdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1syXVsiY29sbGVjdGlvbnMiXSwgb2xkWzJdWyJjb2xsZWN0aW9ucyJdICsgMSkKKwogCiBjbGFzcyBHQ0NhbGxiYWNrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTY5Niw2ICs4MDcsNyBAQAogICAgICAgICAgICAgaW5mbyA9IHZbMl0KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1siZ2VuZXJhdGlvbiJdLCAyKQogCisgICAgQGNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2NvbGxlY3RfZ2FyYmFnZShzZWxmKToKICAgICAgICAgc2VsZi5wcmVjbGVhbigpCiAgICAgICAgICMgRWFjaCBvZiB0aGVzZSBjYXVzZSBmb3VyIG9iamVjdHMgdG8gYmUgZ2FyYmFnZTogVHdvCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dkYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CmluZGV4IDg0NjQyMmIuLjRmYmEzYzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CkBAIC01LDYgKzUsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IHBwcmludAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBzeXNjb25maWcKQEAgLTE3LDEwICsxOCwxMSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIF90aHJlYWQgPSBOb25lCiAKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZmluZGZpbGUsIHB5dGhvbl9pc19vcHRpbWl6ZWQKIAogdHJ5OgotICAgIGdkYl92ZXJzaW9uLCBfID0gc3VicHJvY2Vzcy5Qb3BlbihbImdkYiIsICItLXZlcnNpb24iXSwKKyAgICBnZGJfdmVyc2lvbiwgXyA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnZGIiLCAiLW54IiwgIi0tdmVyc2lvbiJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpCiBleGNlcHQgT1NFcnJvcjoKICAgICAjIFRoaXMgaXMgd2hhdCAibm8gZ2RiIiBsb29rcyBsaWtlLiAgVGhlcmUgbWF5LCBob3dldmVyLCBiZSBvdGhlcgpAQCAtNDAsNiArNDIsOCBAQAogY2hlY2tvdXRfaG9va19wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbi1nZGIucHknKQogCitQWVRIT05IQVNIU0VFRCA9ICcxMjMnCisKIGRlZiBydW5fZ2RiKCphcmdzLCAqKmVudl92YXJzKToKICAgICAiIiJSdW5zIGdkYiBpbiAtLWJhdGNoIG1vZGUgd2l0aCB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgZ2l2ZW4gYnkgKmFyZ3MuCiAKQEAgLTUwLDcgKzU0LDkgQEAKICAgICAgICAgZW52LnVwZGF0ZShlbnZfdmFycykKICAgICBlbHNlOgogICAgICAgICBlbnYgPSBOb25lCi0gICAgYmFzZV9jbWQgPSAoJ2dkYicsICctLWJhdGNoJykKKyAgICAjIC1ueDogRG8gbm90IGV4ZWN1dGUgY29tbWFuZHMgZnJvbSBhbnkgLmdkYmluaXQgaW5pdGlhbGl6YXRpb24gZmlsZXMKKyAgICAjICAgICAgKGlzc3VlICMyMjE4OCkKKyAgICBiYXNlX2NtZCA9ICgnZ2RiJywgJy0tYmF0Y2gnLCAnLW54JykKICAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA+PSAoNywgNCk6CiAgICAgICAgIGJhc2VfY21kICs9ICgnLWlleCcsICdhZGQtYXV0by1sb2FkLXNhZmUtcGF0aCAnICsgY2hlY2tvdXRfaG9va19wYXRoKQogICAgIG91dCwgZXJyID0gc3VicHJvY2Vzcy5Qb3BlbihiYXNlX2NtZCArIGFyZ3MsCkBAIC0xMjYsNyArMTMyLDcgQEAKICAgICAgICAgIyBwcmludCBjb21tYW5kcwogCiAgICAgICAgICMgVXNlICJjb21tYW5kcyIgdG8gZ2VuZXJhdGUgdGhlIGFyZ3VtZW50cyB3aXRoIHdoaWNoIHRvIGludm9rZSAiZ2RiIjoKLSAgICAgICAgYXJncyA9IFsiZ2RiIiwgIi0tYmF0Y2giXQorICAgICAgICBhcmdzID0gWyJnZGIiLCAiLS1iYXRjaCIsICItbngiXQogICAgICAgICBhcmdzICs9IFsnLS1ldmFsLWNvbW1hbmQ9JXMnICUgY21kIGZvciBjbWQgaW4gY29tbWFuZHNdCiAgICAgICAgIGFyZ3MgKz0gWyItLWFyZ3MiLAogICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZV0KQEAgLTE0NCw3ICsxNTAsNyBAQAogICAgICAgICAjIHByaW50ICgnICcuam9pbihhcmdzKSkKIAogICAgICAgICAjIFVzZSAiYXJncyIgdG8gaW52b2tlIGdkYiwgY2FwdHVyaW5nIHN0ZG91dCwgc3RkZXJyOgotICAgICAgICBvdXQsIGVyciA9IHJ1bl9nZGIoKmFyZ3MsIFBZVEhPTkhBU0hTRUVEPScwJykKKyAgICAgICAgb3V0LCBlcnIgPSBydW5fZ2RiKCphcmdzLCBQWVRIT05IQVNIU0VFRD1QWVRIT05IQVNIU0VFRCkKIAogICAgICAgICBlcnJsaW5lcyA9IGVyci5zcGxpdGxpbmVzKCkKICAgICAgICAgdW5leHBlY3RlZF9lcnJsaW5lcyA9IFtdCkBAIC0xNjUsNiArMTcxLDEwIEBACiAgICAgICAgICAgICAnbGludXgtZ2F0ZS5zbycsCiAgICAgICAgICAgICAnRG8geW91IG5lZWQgInNldCBzb2xpYi1zZWFyY2gtcGF0aCIgb3IgJwogICAgICAgICAgICAgJyJzZXQgc3lzcm9vdCI/JywKKyAgICAgICAgICAgICd3YXJuaW5nOiBTb3VyY2UgZmlsZSBpcyBtb3JlIHJlY2VudCB0aGFuIGV4ZWN1dGFibGUuJywKKyAgICAgICAgICAgICMgSXNzdWUgIzE5NzUzOiBtaXNzaW5nIHN5bWJvbHMgb24gU3lzdGVtIFoKKyAgICAgICAgICAgICdNaXNzaW5nIHNlcGFyYXRlIGRlYnVnaW5mbyBmb3IgJywKKyAgICAgICAgICAgICdUcnk6IHp5cHBlciBpbnN0YWxsIC1DICcsCiAgICAgICAgICAgICApCiAgICAgICAgIGZvciBsaW5lIGluIGVycmxpbmVzOgogICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChpZ25vcmVfcGF0dGVybnMpOgpAQCAtMjQ4LDkgKzI1OCw4IEBACiAgICAgZGVmIHRlc3RfZGljdHMoc2VsZik6CiAgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBkaWN0aW9uYXJpZXMnCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2Jhcid9KQotICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAieydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0iKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJ30sICJ7J2Zvbyc6ICdiYXInfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInLCAnZG91Z2xhcyc6IDQyfSwgInsnZG91Z2xhcyc6IDQyLCAnZm9vJzogJ2Jhcid9IikKIAogICAgIGRlZiB0ZXN0X2xpc3RzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgbGlzdHMnCkBAIC0zMDUsMjYgKzMxNCwzMCBAQAogCiAgICAgZGVmIHRlc3RfdHVwbGVzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdHVwbGVzJwotICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodHVwbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHR1cGxlKCksICcoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigoMSwpLCAnKDEsKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigoJ2ZvbycsICdiYXInLCAnYmF6JykpCiAKICAgICBkZWYgdGVzdF9zZXRzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2Ygc2V0cycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldCgpKQorICAgICAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA8ICg3LCAzKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInByZXR0eS1wcmludGluZyBvZiBzZXRzIG5lZWRzIGdkYiA3LjMgb3IgbGF0ZXIiKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KCksICdzZXQoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWydhJywgJ2InXSksICJ7J2EnLCAnYid9IikKICAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldChbNCwgNSwgNl0pLCAiezQsIDUsIDZ9IikKIAogICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGhhbmRsZSBzZXRzIGNvbnRhaW5pbmcgdGhlICJkdW1teSIga2V5IHZhbHVlLAogICAgICAgICAjIHdoaWNoIGhhcHBlbnMgb24gZGVsZXRpb246CiAgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycncyA9IHNldChbJ2EnLCdiJ10pCi1zLnBvcCgpCitzLnJlbW92ZSgnYScpCiBpZChzKScnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgInsnYid9IikKIAogICAgIGRlZiB0ZXN0X2Zyb3plbnNldHMoc2VsZik6CiAgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzJwotICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCkpCisgICAgICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pIDwgKDcsIDMpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicHJldHR5LXByaW50aW5nIG9mIGZyb3plbnNldHMgbmVlZHMgZ2RiIDcuMyBvciBsYXRlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoKSwgJ2Zyb3plbnNldCgpJykKICAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldChbJ2EnLCAnYiddKSwgImZyb3plbnNldCh7J2EnLCAnYid9KSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWzQsIDUsIDZdKSwgImZyb3plbnNldCh7NCwgNSwgNn0pIikKIApAQCAtODQxLDYgKzg1NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciIuKlxuYSA9IDFcbmIgPSAyXG5jID0gM1xuLioiKQogCiBkZWYgdGVzdF9tYWluKCk6CisgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICBwcmludCgiR0RCIHZlcnNpb246IikKKyAgICAgICAgZm9yIGxpbmUgaW4gb3MuZnNkZWNvZGUoZ2RiX3ZlcnNpb24pLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHByaW50KCIgIiAqIDQgKyBsaW5lKQogICAgIHJ1bl91bml0dGVzdChQcmV0dHlQcmludFRlc3RzLAogICAgICAgICAgICAgICAgICBQeUxpc3RUZXN0cywKICAgICAgICAgICAgICAgICAgU3RhY2tOYXZpZ2F0aW9uVGVzdHMsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKaW5kZXggOTU4MDU0YS4uOTFhZmU0NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQpAQCAtMSwzICsxLDU1IEBACitpbXBvcnQgZ2MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKworY2xhc3MgRmluYWxpemF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mcmFtZV9yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgICMgQSBnZW5lcmF0b3IgZnJhbWUgY2FuIGJlIHJlc3VycmVjdGVkIGJ5IGEgZ2VuZXJhdG9yJ3MgZmluYWxpemF0aW9uLgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICBub25sb2NhbCBmcmFtZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZykKKyAgICAgICAgbmV4dChnKQorICAgICAgICBkZWwgZworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcmFtZSkKKyAgICAgICAgZGVsIGZyYW1lCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBBIGdlbmVyYXRvciBjYXVnaHQgaW4gYSByZWZjeWNsZSBnZXRzIGZpbmFsaXplZCBhbnl3YXkuCisgICAgICAgIG9sZF9nYXJiYWdlID0gZ2MuZ2FyYmFnZVs6XQorICAgICAgICBmaW5hbGl6ZWQgPSBGYWxzZQorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5hbGl6ZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBnID0geWllbGQKKyAgICAgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZpbmFsaXplZCA9IFRydWUKKworICAgICAgICBnID0gZ2VuKCkKKyAgICAgICAgbmV4dChnKQorICAgICAgICBnLnNlbmQoZykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHN5cy5nZXRyZWZjb3VudChnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5hbGl6ZWQpCisgICAgICAgIGRlbCBnCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5hbGl6ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuZ2FyYmFnZSwgb2xkX2dhcmJhZ2UpCisKKwogdHV0b3JpYWxfdGVzdHMgPSAiIiIKIExldCdzIHRyeSBhIHNpbXBsZSBnZW5lcmF0b3I6CiAKQEAgLTM4NCw4ICs0MzYsOCBAQAogPj4+IFtzIGZvciBzIGluIGRpcihpKSBpZiBub3Qgcy5zdGFydHN3aXRoKCdfJyldCiBbJ2Nsb3NlJywgJ2dpX2NvZGUnLCAnZ2lfZnJhbWUnLCAnZ2lfcnVubmluZycsICdzZW5kJywgJ3Rocm93J10KID4+PiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgSEFWRV9ET0NTVFJJTkdTCi0+Pj4gcHJpbnQoaS5fX25leHRfXy5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICd4Ll9fbmV4dF9fKCkgPD09PiBuZXh0KHgpJykKLXguX19uZXh0X18oKSA8PT0+IG5leHQoeCkKKz4+PiBwcmludChpLl9fbmV4dF9fLl9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ0ltcGxlbWVudCBuZXh0KHNlbGYpLicpCitJbXBsZW1lbnQgbmV4dChzZWxmKS4KID4+PiBpdGVyKGkpIGlzIGkKIFRydWUKID4+PiBpbXBvcnQgdHlwZXMKQEAgLTE3MjksOSArMTc4MSw3IEBACiA+Pj4gZyA9IGYoKQogPj4+IG5leHQoZykKID4+PiBkZWwgZwotPj4+IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdGFydHN3aXRoKAotLi4uICAgICAiRXhjZXB0aW9uIFJ1bnRpbWVFcnJvcjogJ2dlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQnIGluICIKLS4uLiApCis+Pj4gIlJ1bnRpbWVFcnJvcjogZ2VuZXJhdG9yIGlnbm9yZWQgR2VuZXJhdG9yRXhpdCIgaW4gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpCiBUcnVlCiA+Pj4gc3lzLnN0ZGVyciA9IG9sZAogCkBAIC0xODQxLDIyICsxODkxLDIzIEBACiAuLi4gICAgIHN5cy5zdGRlcnIgPSBpby5TdHJpbmdJTygpCiAuLi4gICAgIGNsYXNzIExlYWtlcjoKIC4uLiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotLi4uICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorLi4uICAgICAgICAgICAgIGRlZiBpbnZva2UobWVzc2FnZSk6CisuLi4gICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtZXNzYWdlKQorLi4uICAgICAgICAgICAgIGludm9rZSgidGVzdCIpCiAuLi4KIC4uLiAgICAgbCA9IExlYWtlcigpCiAuLi4gICAgIGRlbCBsCiAuLi4gICAgIGVyciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCi0uLi4gICAgIGVyci5zdGFydHN3aXRoKAotLi4uICAgICAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6IFJ1bnRpbWVFcnJvcigpIGluIDwiCi0uLi4gICAgICkKLS4uLiAgICAgZXJyLmVuZHN3aXRoKCI+IGlnbm9yZWQiKQotLi4uICAgICBsZW4oZXJyLnNwbGl0bGluZXMoKSkKKy4uLiAgICAgIkV4Y2VwdGlvbiBpZ25vcmVkIGluIiBpbiBlcnIKKy4uLiAgICAgIlJ1bnRpbWVFcnJvcjogdGVzdCIgaW4gZXJyCisuLi4gICAgICJUcmFjZWJhY2siIGluIGVycgorLi4uICAgICAiaW4gaW52b2tlIiBpbiBlcnIKIC4uLiBmaW5hbGx5OgogLi4uICAgICBzeXMuc3RkZXJyID0gb2xkCiBUcnVlCiBUcnVlCi0xCi0KK1RydWUKK1RydWUKIAogCiBUaGVzZSByZWZsZWFrIHRlc3RzIHNob3VsZCBwZXJoYXBzIGJlIGluIGEgdGVzdGZpbGUgb2YgdGhlaXIgb3duLApAQCAtMTg4MSw2ICsxOTMyLDcgQEAKICMgc28gdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBpbiBib3RoIHdheXMgb2YgcnVubmluZyByZWdydGVzdC4KIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHRlc3RfZ2VuZXJhdG9ycworICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9nZW5lcmF0b3JzLCB2ZXJib3NlKQogCiAjIFRoaXMgcGFydCBpc24ndCBuZWVkZWQgZm9yIHJlZ3J0ZXN0LCBidXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQppbmRleCBiNTA2OGU0Li5lNTllZDRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTE4OCwxMiArMTg4LDkzIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoc3VwcG9ydC5URVNURk4pCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jcmVhdGVfZmlsZShmaWxlbmFtZSk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYidmb28nKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuKQorCisgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X3NhbWVmaWxlX29uX3N5bWxpbmsoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2FtZWZpbGVfb25fbGlua19mdW5jKG9zLnN5bWxpbmspCisKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhvcy5saW5rKQorCisgICAgZGVmIF90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhzZWxmLCBmdW5jKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCisKKyAgICAgICAgICAgIGZ1bmModGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjEpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCisKKyAgICBkZWYgdGVzdF9zYW1lc3RhdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQorICAgICAgICAgICAgdGVzdF9mbnMgPSBbdGVzdF9mbl0qMgorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zYW1lc3RhdF9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVzdGF0X29uX2xpbmtfZnVuYyhvcy5zeW1saW5rKQorCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMob3MubGluaykKKworICAgIGRlZiBfdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorICAgICAgICAgICAgdGVzdF9mbnMgPSAodGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgZnVuYygqdGVzdF9mbnMpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZXN0YXQoKnN0YXRzKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4xKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgorICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZW9wZW5maWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmZpbGVubygpLCBiLmZpbGVubygpKSkKKwogY2xhc3MgVGVzdEdlbmVyaWNUZXN0KEdlbmVyaWNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBJc3N1ZSAxNjg1MjogR2VuZXJpY1Rlc3QgY2FuJ3QgaW5oZXJpdCBmcm9tIHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgIyBmb3IgdGVzdCBkaXNjb3ZlcnkgcHVycG9zZXM7IENvbW1vblRlc3QgaW5oZXJpdHMgZnJvbSBHZW5lcmljVGVzdAogICAgICMgYW5kIGlzIG9ubHkgbWVhbnQgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVycy4KICAgICBwYXRobW9kdWxlID0gZ2VuZXJpY3BhdGgKIAorCiAjIEZvbGxvd2luZyBUZXN0Q2FzZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcnVuIGZyb20gdGVzdF9nZW5lcmljcGF0aC4KICMgSXQgaXMgaW5oZXJpdGVkIGJ5IG90aGVyIHRlc3QgbW9kdWxlcyAobWFjcGF0aCwgbnRwYXRoLCBwb3NpeHBhdGgpLgogCkBAIC0zNDgsNyArNDI5LDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5lZWQgc3VwcG9ydC5URVNURk5fTk9OQVNDSUkiKQogCi0gICAgICAgICMgVGVzdCBub24tQVNDSUksIG5vbi1VVEY4IGJ5dGVzIGluIHRoZSBwYXRoLgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weQppbmRleCAyMDNiMzM2Li5mYjUzMWQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZW5leHBzLnB5CkBAIC0yMjIsOCArMjIyLDggQEAKICAgICBUcnVlCiAKICAgICA+Pj4gZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUwotICAgID4+PiBwcmludChnLl9fbmV4dF9fLl9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ3guX19uZXh0X18oKSA8PT0+IG5leHQoeCknKQotICAgIHguX19uZXh0X18oKSA8PT0+IG5leHQoeCkKKyAgICA+Pj4gcHJpbnQoZy5fX25leHRfXy5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICdJbXBsZW1lbnQgbmV4dChzZWxmKS4nKQorICAgIEltcGxlbWVudCBuZXh0KHNlbGYpLgogICAgID4+PiBpbXBvcnQgdHlwZXMKICAgICA+Pj4gaXNpbnN0YW5jZShnLCB0eXBlcy5HZW5lcmF0b3JUeXBlKQogICAgIFRydWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CmluZGV4IGZlNjRlZTEuLjE4NTNhMmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQpAQCAtMywzOCArMyw0MCBAQAogIyBTa2lwIHRoaXMgdGVzdCBpZiB0aGUgX3Rlc3RjYXBpIG1vZHVsZSBpc24ndCBhdmFpbGFibGUuCiBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190ZXN0Y2FwaScpCiBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rZXl3b3JkcywgZ2V0YXJnc19rZXl3b3JkX29ubHkKK3RyeToKKyAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRhcmdzX0wgPSBOb25lICMgUFlfTE9OR19MT05HIG5vdCBhdmFpbGFibGUKIAotIiIiCi0+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgotPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KLT4KLT4gQ29kZSBDIHR5cGUgUmFuZ2UgY2hlY2sKLT4KLT4gYiB1bnNpZ25lZCBjaGFyIDAuLlVDSEFSX01BWAotPiBoIHNpZ25lZCBzaG9ydCBTSFJUX01JTi4uU0hSVF9NQVgKLT4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKLT4gSCB1bnNpZ25lZCBzaG9ydCBub25lICoqCi0+IGsgKiB1bnNpZ25lZCBsb25nIG5vbmUKLT4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAotCi0KLT4gaSBpbnQgSU5UX01JTi4uSU5UX01BWAotPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCi0KLT4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCi0+IEwgbG9uZyBsb25nIExMT05HX01JTi4uTExPTkdfTUFYCi0KLT4gTm90ZXM6Ci0+Ci0+ICogTmV3IGZvcm1hdCBjb2Rlcy4KLT4KLT4gKiogQ2hhbmdlZCBmcm9tIHByZXZpb3VzICJyYW5nZS1hbmQtYS1oYWxmIiB0byAibm9uZSI7IHRoZQotPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgotCi1QbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgotdW5zaWduZWQgbG9uZyBhbmQgUHlJbnRfQXNMb25nTG9uZ01hc2soKSAtPiB1bnNpZ25lZAotbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCi0iIiIKKyMgPiBIb3cgYWJvdXQgdGhlIGZvbGxvd2luZyBjb3VudGVycHJvcG9zYWwuIFRoaXMgYWxzbyBjaGFuZ2VzIHNvbWUgb2YKKyMgPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KKyMgPgorIyA+IENvZGUgQyB0eXBlIFJhbmdlIGNoZWNrCisjID4KKyMgPiBiIHVuc2lnbmVkIGNoYXIgMC4uVUNIQVJfTUFYCisjID4gaCBzaWduZWQgc2hvcnQgU0hSVF9NSU4uLlNIUlRfTUFYCisjID4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKKyMgPiBIIHVuc2lnbmVkIHNob3J0IG5vbmUgKioKKyMgPiBrICogdW5zaWduZWQgbG9uZyBub25lCisjID4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAorIworIworIyA+IGkgaW50IElOVF9NSU4uLklOVF9NQVgKKyMgPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCisjCisjID4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCisjID4gTCBsb25nIGxvbmcgTExPTkdfTUlOLi5MTE9OR19NQVgKKyMKKyMgPiBOb3RlczoKKyMgPgorIyA+ICogTmV3IGZvcm1hdCBjb2Rlcy4KKyMgPgorIyA+ICoqIENoYW5nZWQgZnJvbSBwcmV2aW91cyAicmFuZ2UtYW5kLWEtaGFsZiIgdG8gIm5vbmUiOyB0aGUKKyMgPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgorIworIyBQbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgorIyB1bnNpZ25lZCBsb25nIGFuZCBQeUludF9Bc0xvbmdMb25nTWFzaygpIC0+IHVuc2lnbmVkCisjIGxvbmcgbG9uZyAoaWYgdGhhdCBleGlzdHMpLgogCiBMQVJHRSA9IDB4N0ZGRkZGRkYKIFZFUllfTEFSR0UgPSAweEZGMDAwMDEyMTIxMjEyMTIxMjEyMTI0MgpAQCAtNzcsNyArNzksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2IoSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfYihJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2IsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfYihCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19iKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19iKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19iLCAtMSkKQEAgLTk1LDcgKzk4LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19CKEludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoSW50U3ViY2xhc3MoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19CLCBCYWRJbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0IoQmFkSW50MigpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfQihCYWRJbnQyKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfQihCYWRJbnQzKCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoLTEpKQpAQCAtMTEzLDcgKzExNyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSChJbnQoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19IKEludFN1YmNsYXNzKCkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSCwgQmFkSW50KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19IKEJhZEludDIoKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0goQmFkSW50MigpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0goQmFkSW50MygpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVTSFJUX01BWCwgZ2V0YXJnc19IKC0xKSkKQEAgLTEzMiw3ICsxMzcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0koSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSShJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ksIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfSShCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19JKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19JKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVSU5UX01BWCwgZ2V0YXJnc19JKC0xKSkKQEAgLTE3Miw3ICsxNzgsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2goSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfaChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2gsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfaChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19oKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19oKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19oLCBTSFJUX01JTi0xKQpAQCAtMTkwLDcgKzE5Nyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaShJbnQoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19pKEludFN1YmNsYXNzKCkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaSwgQmFkSW50KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19pKEJhZEludDIoKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX2koQmFkSW50MigpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2koQmFkSW50MygpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2ksIElOVF9NSU4tMSkKQEAgLTIwOCw3ICsyMTYsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2woSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfbChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2wsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfbChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19sKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19sKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBMT05HX01JTi0xKQpAQCAtMjM5LDYgKzI0OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgVkVSWV9MQVJHRSkKIAogCitAdW5pdHRlc3Quc2tpcElmKGdldGFyZ3NfTCBpcyBOb25lLCAnUFlfTE9OR19MT05HIGlzIG5vdCBhdmFpbGFibGUnKQogY2xhc3MgTG9uZ0xvbmdfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X0woc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wKQEAgLTI0OSw3ICsyNTksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0woSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfTChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0wsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfTChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19MKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19MKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19MLCBMTE9OR19NSU4tMSkKQEAgLTYwMCwyNCArNjExLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc19aX2hhc2goTm9uZSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gWwotICAgICAgICBTaWduZWRfVGVzdENhc2UsCi0gICAgICAgIFVuc2lnbmVkX1Rlc3RDYXNlLAotICAgICAgICBCb29sZWFuX1Rlc3RDYXNlLAotICAgICAgICBUdXBsZV9UZXN0Q2FzZSwKLSAgICAgICAgS2V5d29yZHNfVGVzdENhc2UsCi0gICAgICAgIEtleXdvcmRPbmx5X1Rlc3RDYXNlLAotICAgICAgICBCeXRlc19UZXN0Q2FzZSwKLSAgICAgICAgVW5pY29kZV9UZXN0Q2FzZSwKLSAgICBdCi0gICAgdHJ5OgotICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgIyBQWV9MT05HX0xPTkcgbm90IGF2YWlsYWJsZQotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb25nTG9uZ19UZXN0Q2FzZSkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weQppbmRleCAxNzMxYmQ0Li4zNDUyZTQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldHBhc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5CkBAIC0xLDcgKzEsNyBAQAogaW1wb3J0IGdldHBhc3MKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8sIFRleHRJT1dyYXBwZXIKIGZyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC02OSw2ICs2OSwxNCBAQAogICAgICAgICBnZXRwYXNzLl9yYXdfaW5wdXQoc3RyZWFtPVN0cmluZ0lPKCkpCiAgICAgICAgIG1vY2tfaW5wdXQucmVhZGxpbmUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQogCisgICAgQG1vY2sucGF0Y2goJ3N5cy5zdGRpbicpCisgICAgZGVmIHRlc3RfdXNlc19zdGRpbl9hc19kaWZmZXJlbnRfbG9jYWxlKHNlbGYsIG1vY2tfaW5wdXQpOgorICAgICAgICBzdHJlYW0gPSBUZXh0SU9XcmFwcGVyKEJ5dGVzSU8oKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgbW9ja19pbnB1dC5yZWFkbGluZS5yZXR1cm5fdmFsdWUgPSAiSGFzw4XigJpvOiAiCisgICAgICAgIGdldHBhc3MuX3Jhd19pbnB1dChwcm9tcHQ9Ikhhc8OF4oCabzogIixzdHJlYW09c3RyZWFtKQorICAgICAgICBtb2NrX2lucHV0LnJlYWRsaW5lLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworCiAgICAgZGVmIHRlc3RfcmFpc2VzX29uX2VtcHR5X2lucHV0KHNlbGYpOgogICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCcnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZ2V0cGFzcy5fcmF3X2lucHV0LCBpbnB1dD1pbnB1dCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weQppbmRleCA1NDU2OTQ4Li5hYmIzMTJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldHRleHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLmVudi5fX2V4aXRfXygpCiAgICAgICAgIGRlbCBzZWxmLmVudgotICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguc3BsaXQoTE9DQUxFRElSKVswXSkKKyAgICAgICAgc3VwcG9ydC5ybXRyZWUob3MucGF0aC5zcGxpdChMT0NBTEVESVIpWzBdKQogCiAKIGNsYXNzIEdldHRleHRUZXN0Q2FzZTEoR2V0dGV4dEJhc2VUZXN0KToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQppbmRleCBlYjlhZWI1Li5hNWFiOGQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CkBAIC0xNjksNiArMTY5LDI4IEBACiAgICAgICAgIGVxKGdsb2IuZ2xvYignXFxcXCpcXCpcXCcpLCBbXSkKICAgICAgICAgZXEoZ2xvYi5nbG9iKGInXFxcXCpcXCpcXCcpLCBbXSkKIAorICAgIGRlZiBjaGVja19lc2NhcGUoc2VsZiwgYXJnLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYi5lc2NhcGUoYXJnKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYi5lc2NhcGUob3MuZnNlbmNvZGUoYXJnKSksIG9zLmZzZW5jb2RlKGV4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX2VzY2FwZQorICAgICAgICBjaGVjaygnYWJjJywgJ2FiYycpCisgICAgICAgIGNoZWNrKCdbJywgJ1tbXScpCisgICAgICAgIGNoZWNrKCc/JywgJ1s/XScpCisgICAgICAgIGNoZWNrKCcqJywgJ1sqXScpCisgICAgICAgIGNoZWNrKCdbW18vKj8qL19dXScsICdbW11bW11fL1sqXVs/XVsqXS9fXV0nKQorICAgICAgICBjaGVjaygnL1tbXy8qPyovX11dLycsICcvW1tdW1tdXy9bKl1bP11bKl0vX11dLycpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3QiKQorICAgIGRlZiB0ZXN0X2VzY2FwZV93aW5kb3dzKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfZXNjYXBlCisgICAgICAgIGNoZWNrKCc/Oj8nLCAnPzpbP10nKQorICAgICAgICBjaGVjaygnKjoqJywgJyo6WypdJykKKyAgICAgICAgY2hlY2socidcXD9cYzpcPycsIHInXFw/XGM6XFs/XScpCisgICAgICAgIGNoZWNrKHInXFwqXCpcKicsIHInXFwqXCpcWypdJykKKyAgICAgICAgY2hlY2soJy8vPy9jOi8/JywgJy8vPy9jOi9bP10nKQorICAgICAgICBjaGVjaygnLy8qLyovKicsICcvLyovKi9bKl0nKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEdsb2JUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weSBiL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQppbmRleCA2YjMyNmJkLi43MGQ4NWIxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CkBAIC04MCw2ICs4MCwxMiBAQAogICAgICAgICB4ID0gLjNlMTQKICAgICAgICAgeCA9IDMuMWU0CiAKKyAgICBkZWYgdGVzdF9mbG9hdF9leHBvbmVudF90b2tlbml6YXRpb24oc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDIxNjQyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgaWYgMWVsc2UgMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxIGlmIDBlbHNlIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiMCBpZiAxRWxzZSAwIikKKwogICAgIGRlZiB0ZXN0X3N0cmluZ19saXRlcmFscyhzZWxmKToKICAgICAgICAgeCA9ICcnOyB5ID0gIiI7IHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMCBhbmQgeCA9PSB5KQogICAgICAgICB4ID0gJ1wnJzsgeSA9ICInIjsgc2VsZi5hc3NlcnRUcnVlKGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzOSkKQEAgLTMxNCw2ICszMjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fYW5ub3RhdGlvbnNfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgeydiJzogMSwgJ2MnOiAyLCAnZSc6IDMsICdnJzogNiwgJ2gnOiA3LCAnaic6IDksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnayc6IDExLCAncmV0dXJuJzogMTJ9KQorICAgICAgICAjIENoZWNrIGZvciBpc3N1ZSAjMjA2MjUgLS0gYW5ub3RhdGlvbnMgbWFuZ2xpbmcKKyAgICAgICAgY2xhc3MgU3BhbToKKyAgICAgICAgICAgIGRlZiBmKHNlbGYsICosIF9fa3c6MSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBIYW0oU3BhbSk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTcGFtLmYuX19hbm5vdGF0aW9uc19fLCB7J19TcGFtX19rdyc6IDF9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEhhbS5mLl9fYW5ub3RhdGlvbnNfXywgeydfU3BhbV9fa3cnOiAxfSkKICAgICAgICAgIyBDaGVjayBmb3IgU0YgQnVnICMxNjk3MjQ4IC0gbWl4aW5nIGRlY29yYXRvcnMgYW5kIGEgcmV0dXJuIGFubm90YXRpb24KICAgICAgICAgZGVmIG51bGwoeCk6IHJldHVybiB4CiAgICAgICAgIEBudWxsCkBAIC0zNzcsNiArMzkwLDMxIEBACiAgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAieCArIDEgPSAxIikKICAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJhICsgMSA9IGIgKyAyIikKIAorICAgICMgQ2hlY2sgdGhlIGhldXJpc3RpYyBmb3IgcHJpbnQgJiBleGVjIGNvdmVycyBzaWduaWZpY2FudCBjYXNlcworICAgICMgQXMgd2VsbCBhcyBwbGFjaW5nIHNvbWUgbGltaXRzIG9uIGZhbHNlIHBvc2l0aXZlcworICAgIGRlZiB0ZXN0X2Zvcm1lcl9zdGF0ZW1lbnRzX3JlZmVyX3RvX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBrZXl3b3JkcyA9ICJwcmludCIsICJleGVjIgorICAgICAgICAjIENhc2VzIHdoZXJlIHdlIHdhbnQgdGhlIGN1c3RvbSBlcnJvcgorICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAgICJ7fSBmb28iLAorICAgICAgICAgICAgInt9IHt7MTpmb299fSIsCisgICAgICAgICAgICAiaWYgMToge30gZm9vIiwKKyAgICAgICAgICAgICJpZiAxOiB7fSB7ezE6Zm9vfX0iLAorICAgICAgICAgICAgImlmIDE6XG4gICAge30gZm9vIiwKKyAgICAgICAgICAgICJpZiAxOlxuICAgIHt9IHt7MTpmb299fSIsCisgICAgICAgIF0KKyAgICAgICAgZm9yIGtleXdvcmQgaW4ga2V5d29yZHM6CisgICAgICAgICAgICBjdXN0b21fbXNnID0gImNhbGwgdG8gJ3t9JyIuZm9ybWF0KGtleXdvcmQpCisgICAgICAgICAgICBmb3IgY2FzZSBpbiBjYXNlczoKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBjYXNlLmZvcm1hdChrZXl3b3JkKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHNvdXJjZT1zb3VyY2UpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsIGN1c3RvbV9tc2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyhzb3VyY2UpCisgICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlLnJlcGxhY2UoImZvbyIsICIoZm9vLikiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHNvdXJjZT1zb3VyY2UpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICJpbnZhbGlkIHN5bnRheCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyhzb3VyY2UpCisKICAgICBkZWYgdGVzdF9kZWxfc3RtdChzZWxmKToKICAgICAgICAgIyAnZGVsJyBleHBybGlzdAogICAgICAgICBhYmMgPSBbMSwyLDNdCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKaW5kZXggMDM0YWNiMC4uYjdhN2UwMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtMTMwLDYgKzEzMCwxNCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCB6dHh0OiBicmVhawogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBiJ2EnKjIwMSkKIAorICAgIGRlZiB0ZXN0X2V4Y2x1c2l2ZV93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YTEgKiA1MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneGInKQorCiAgICAgZGVmIHRlc3RfYnVmZmVyZWRfcmVhZGVyKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3NDcxOiBhIEd6aXBGaWxlIGNhbiBiZSB3cmFwcGVkIGluIGEgQnVmZmVyZWRSZWFkZXIgZm9yCiAgICAgICAgICMgcGVyZm9ybWFuY2UuCkBAIC0yMDUsNiArMjEzLDkgQEAKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3JiJykKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4JykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3hiJykKIAogICAgIGRlZiB0ZXN0XzE2NDc0ODQoc2VsZik6CiAgICAgICAgIGZvciBtb2RlIGluICgnd2InLCAncmInKToKQEAgLTM4OCw2ICszOTksMjAgQEAKICAgICAgICAgICAgIGRhdGFjID0gZ3ppcC5jb21wcmVzcyhkYXRhKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnemlwLmRlY29tcHJlc3MoZGF0YWMpLCBkYXRhKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBkYXRhMSo1MAorICAgICAgICAjIERyb3AgdGhlIENSQyAoNCBieXRlcykgYW5kIGZpbGUgc2l6ZSAoNCBieXRlcykuCisgICAgICAgIHRydW5jYXRlZCA9IGd6aXAuY29tcHJlc3MoZGF0YSlbOi04XQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oZGF0YSkpLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKyAgICAgICAgIyBJbmNvbXBsZXRlIDEwLWJ5dGUgaGVhZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCAxMCk6CisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKICAgICBkZWYgdGVzdF9yZWFkX3dpdGhfZXh0cmEoc2VsZik6CiAgICAgICAgICMgR3ppcCBkYXRhIHdpdGggYW4gZXh0cmEgZmllbGQKICAgICAgICAgZ3pkYXRhID0gKGInXHgxZlx4OGJceDA4XHgwNFx4YjJceDE3Y1FceDAyXHhmZicKQEAgLTQwNiwzNSArNDMxLDU5IEBACiBjbGFzcyBUZXN0T3BlbihCYXNlVGVzdCk6CiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMSAqIDUwCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCAqIDIpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEgKiA1MAorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQgKiAyKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieCIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMS5kZWNvZGUoImFzY2lpIikgKiA1MAogICAgICAgICB1bmNvbXByZXNzZWRfcmF3ID0gdW5jb21wcmVzc2VkLnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKQEAgLTQ2OSw2ICs1MTgsOCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNoLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CmluZGV4IDIyZWJiY2MuLmY2NDdjNmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2gucHkKQEAgLTEyLDYgKzEyLDQwIEBACiAKIElTXzY0QklUID0gc3lzLm1heHNpemUgPiAyKiozMgogCitkZWYgbGNnKHgsIGxlbmd0aD0xNik6CisgICAgIiIiTGluZWFyIGNvbmdydWVudGlhbCBnZW5lcmF0b3IiIiIKKyAgICBpZiB4ID09IDA6CisgICAgICAgIHJldHVybiBieXRlcyhsZW5ndGgpCisgICAgb3V0ID0gYnl0ZWFycmF5KGxlbmd0aCkKKyAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICB4ID0gKDIxNDAxMyAqIHggKyAyNTMxMDExKSAmIDB4N2ZmZmZmZmYKKyAgICAgICAgb3V0W2ldID0gKHggPj4gMTYpICYgMHhmZgorICAgIHJldHVybiBieXRlcyhvdXQpCisKK2RlZiBweXNpcGhhc2godWludDY0KToKKyAgICAiIiJDb252ZXJ0IFNpcEhhc2gyNCBvdXRwdXQgdG8gUHlfaGFzaF90CisgICAgIiIiCisgICAgYXNzZXJ0IDAgPD0gdWludDY0IDwgKDEgPDwgNjQpCisgICAgIyBzaW1wbGUgdW5zaWduZWQgdG8gc2lnbmVkIGludDY0CisgICAgaWYgdWludDY0ID4gKDEgPDwgNjMpIC0gMToKKyAgICAgICAgaW50NjQgPSB1aW50NjQgLSAoMSA8PCA2NCkKKyAgICBlbHNlOgorICAgICAgICBpbnQ2NCA9IHVpbnQ2NAorICAgICMgbWFuZ2xlIHVpbnQ2NCB0byB1aW50MzIKKyAgICB1aW50MzIgPSAodWludDY0IF4gdWludDY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYKKyAgICAjIHNpbXBsZSB1bnNpZ25lZCB0byBzaWduZWQgaW50MzIKKyAgICBpZiB1aW50MzIgPiAoMSA8PCAzMSkgLSAxOgorICAgICAgICBpbnQzMiA9IHVpbnQzMiAtICgxIDw8IDMyKQorICAgIGVsc2U6CisgICAgICAgIGludDMyID0gdWludDMyCisgICAgcmV0dXJuIGludDMyLCBpbnQ2NAorCitkZWYgc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoKHRlc3QpOgorICAgICIiIlNraXAgZGVjb3JhdG9yIGZvciB0ZXN0cyB0aGF0IGRlcGVuZCBvbiBTaXBIYXNoMjQgb3IgRk5WIiIiCisgICAgb2sgPSBzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSBpbiB7ImZudiIsICJzaXBoYXNoMjQifQorICAgIG1zZyA9ICJSZXF1aXJlcyBTaXBIYXNoMjQgb3IgRk5WIgorICAgIHJldHVybiB0ZXN0IGlmIG9rIGVsc2UgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpCisKIAogY2xhc3MgSGFzaEVxdWFsaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xNjEsMTIgKzE5NSw2NCBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJ1bjEsIHJ1bjIpCiAKIGNsYXNzIFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzKEhhc2hSYW5kb21pemF0aW9uVGVzdHMpOgorICAgIHJlcHJfID0gTm9uZQorICAgIHJlcHJfbG9uZyA9IE5vbmUKKworICAgICMgMzJiaXQgbGl0dGxlLCA2NGJpdCBsaXR0bGUsIDMyYml0IGJpZywgNjRiaXQgYmlnCisgICAga25vd25faGFzaGVzID0geworICAgICAgICAnZGpiYTMzeCc6IFsgIyBvbmx5IHVzZWQgZm9yIHNtYWxsIHN0cmluZ3MKKyAgICAgICAgICAgICMgc2VlZCAwLCAnYWJjJworICAgICAgICAgICAgWzE5MzQ4NTk2MCwgMTkzNDg1OTYwLCAgMTkzNDg1OTYwLCAxOTM0ODU5NjBdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjJworICAgICAgICAgICAgWy02Nzg5NjYxOTYsIDU3Mzc2MzQyNjI2MzIyMzM3MiwgLTgyMDQ4OTM4OCwgLTQyODI5MDU4MDQ4MjYwMzk2NjVdLAorICAgICAgICAgICAgXSwKKyAgICAgICAgJ3NpcGhhc2gyNCc6IFsKKyAgICAgICAgICAgICMgTk9URTogUHlVQ1MyIGxheW91dCBkZXBlbmRzIG9uIGVuZGlhbmVzcworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbMTE5ODU4MzUxOCwgNDU5NjA2OTIwMDcxMDEzNTUxOCwgMTE5ODU4MzUxOCwgNDU5NjA2OTIwMDcxMDEzNTUxOF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbMjczODc2ODg2LCAtNDUwMTYxODE1MjUyNDU0NDEwNiwgMjczODc2ODg2LCAtNDUwMTYxODE1MjUyNDU0NDEwNl0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmNkZWZnaGlqaycKKyAgICAgICAgICAgIFstMTc0NTIxNTMxMywgNDQzNjcxOTU4ODg5Mjg3Njk3NSwgLTE3NDUyMTUzMTMsIDQ0MzY3MTk1ODg4OTI4NzY5NzVdLAorICAgICAgICAgICAgIyBzZWVkIDAsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWzQ5MzU3MDgwNiwgNTc0OTk4NjQ4NDE4OTYxMjc5MCwgLTEwMDYzODE1NjQsIC01OTE1MTExNDUwMTk5NDY4NTQwXSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbLTE2NzcxMTA4MTYsIC0yOTQ3OTgxMzQyMjI3NzM4MTQ0LCAtMTg2MDIwNzc5MywgLTQyOTY2OTkyMTc2NTI1MTYwMTddLAorICAgICAgICBdLAorICAgICAgICAnZm52JzogWworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbLTE2MDA5MjU1MzMsIDE0NTMwNzk3MjkxODgwOTgyMTEsIC0xNjAwOTI1NTMzLAorICAgICAgICAgICAgIDE0NTMwNzk3MjkxODgwOTgyMTFdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjJworICAgICAgICAgICAgWy0yMDYwNzY3OTksIC00NDEwOTExNTAyMzAzODc4NTA5LCAtMTAyNDAxNDQ1NywKKyAgICAgICAgICAgICAtMzU3MDE1MDk2OTQ3OTk5NDEzMF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmNkZWZnaGlqaycKKyAgICAgICAgICAgIFs4MTExMzY3NTEsIC01MDQ2MjMwMDQ5Mzc2MTE4NzQ2LCAtNzcyMDgwNTMgLAorICAgICAgICAgICAgIC00Nzc5MDI5NjE1MjgxMDE5NjY2XSwKKyAgICAgICAgICAgICMgc2VlZCAwLCAnw6TDuuKIkeKEhycKKyAgICAgICAgICAgIFs0NDQwMjgxNywgODk5ODI5NzU3OTg0NTk4NzQzMSwgLTE5NTYyNDAzMzEsCisgICAgICAgICAgICAgLTc4MjY5Nzg4ODYxNDA0Nzg4N10sCisgICAgICAgICAgICAjIHNlZWQgNDIsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWy0yODMwNjYzNjUsIC00NTc2NzI5ODgzODI0NjAxNTQzLCAtMjcxODcxNDA3LAorICAgICAgICAgICAgIC0zOTI3Njk1NTAxMTg3MjQ3MDg0XSwKKyAgICAgICAgXQorICAgIH0KKworICAgIGRlZiBnZXRfZXhwZWN0ZWRfaGFzaChzZWxmLCBwb3NpdGlvbiwgbGVuZ3RoKToKKyAgICAgICAgaWYgbGVuZ3RoIDwgc3lzLmhhc2hfaW5mby5jdXRvZmY6CisgICAgICAgICAgICBhbGdvcml0aG0gPSAiZGpiYTMzeCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFsZ29yaXRobSA9IHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtCisgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6CisgICAgICAgICAgICBwbGF0Zm9ybSA9IDEgaWYgSVNfNjRCSVQgZWxzZSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQoc3lzLmJ5dGVvcmRlciA9PSAnYmlnJykKKyAgICAgICAgICAgIHBsYXRmb3JtID0gMyBpZiBJU182NEJJVCBlbHNlIDIKKyAgICAgICAgcmV0dXJuIHNlbGYua25vd25faGFzaGVzW2FsZ29yaXRobV1bcG9zaXRpb25dW3BsYXRmb3JtXQorCiAgICAgZGVmIHRlc3RfbnVsbF9oYXNoKHNlbGYpOgogICAgICAgICAjIFBZVEhPTkhBU0hTRUVEPTAgZGlzYWJsZXMgdGhlIHJhbmRvbWl6ZWQgaGFzaAotICAgICAgICBpZiBJU182NEJJVDoKLSAgICAgICAgICAgIGtub3duX2hhc2hfb2Zfb2JqID0gMTQ1MzA3OTcyOTE4ODA5ODIxMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAga25vd25faGFzaF9vZl9vYmogPSAtMTYwMDkyNTUzMworICAgICAgICBrbm93bl9oYXNoX29mX29iaiA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMCwgMykKIAogICAgICAgICAjIFJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0OgogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXyksIGtub3duX2hhc2hfb2Zfb2JqKQpAQCAtMTc0LDM5ICsyNjAsNTMgQEAKICAgICAgICAgIyBJdCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBzZWVkIHRvIDA6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfLCBzZWVkPTApLCBrbm93bl9oYXNoX29mX29iaikKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKICAgICBkZWYgdGVzdF9maXhlZF9oYXNoKHNlbGYpOgogICAgICAgICAjIHRlc3QgYSBmaXhlZCBzZWVkIGZvciB0aGUgcmFuZG9taXplZCBoYXNoCiAgICAgICAgICMgTm90ZSB0aGF0IGFsbCB0eXBlcyBzaGFyZSB0aGUgc2FtZSB2YWx1ZXM6Ci0gICAgICAgIGlmIElTXzY0QklUOgotICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKLSAgICAgICAgICAgICAgICBoID0gLTQ0MTA5MTE1MDIzMDM4Nzg1MDkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaCA9IC0zNTcwMTUwOTY5NDc5OTk0MTMwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgotICAgICAgICAgICAgICAgIGggPSAtMjA2MDc2Nzk5Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGggPSAtMTAyNDAxNDQ1NworICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgxLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXywgc2VlZD00MiksIGgpCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCisgICAgZGVmIHRlc3RfbG9uZ19maXhlZF9oYXNoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlcHJfbG9uZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDIsIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX2xvbmcsIHNlZWQ9NDIpLCBoKQorCisKIGNsYXNzIFN0ckhhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICByZXByXyA9IHJlcHIoJ2FiYycpCisgICAgcmVwcl9sb25nID0gcmVwcignYWJjZGVmZ2hpamsnKQorICAgIHJlcHJfdWNzMiA9IHJlcHIoJ8Okw7riiJHihIcnKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKCIiKSwgMCkKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKKyAgICBkZWYgdGVzdF91Y3MyX3N0cmluZyhzZWxmKToKKyAgICAgICAgaCA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMywgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl91Y3MyLCBzZWVkPTApLCBoKQorICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCg0LCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX3VjczIsIHNlZWQ9NDIpLCBoKQorCiBjbGFzcyBCeXRlc0hhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gcmVwcihiJ2FiYycpCisgICAgcmVwcl9sb25nID0gcmVwcihiJ2FiY2RlZmdoaWprJykKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChiIiIpLCAwKQogCiBjbGFzcyBNZW1vcnl2aWV3SGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICByZXByXyA9ICJtZW1vcnl2aWV3KGInYWJjJykiCisgICAgcmVwcl9sb25nID0gIm1lbW9yeXZpZXcoYidhYmNkZWZnaGlqaycpIgogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKG1lbW9yeXZpZXcoYiIiKSksIDApCiAKQEAgLTIyNCw1ICszMjQsMjMgQEAKICAgICByZXByXyA9IHJlcHIoZGF0ZXRpbWUudGltZSgwKSkKIAogCitjbGFzcyBIYXNoRGlzdHJpYnV0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaGFzaF9kaXN0cmlidXRpb24oc2VsZik6CisgICAgICAgICMgY2hlY2sgZm9yIGhhc2ggY29sbGlzaW9uCisgICAgICAgIGJhc2UgPSAiYWJjZGVmZ2hhYmNkZWZnIgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oYmFzZSkpOgorICAgICAgICAgICAgcHJlZml4ID0gYmFzZVs6aV0KKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByZWZpeD1wcmVmaXgpOgorICAgICAgICAgICAgICAgIHMxNSA9IHNldCgpCisgICAgICAgICAgICAgICAgczI1NSA9IHNldCgpCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgICAgICAgICAgaCA9IGhhc2gocHJlZml4ICsgY2hyKGMpKQorICAgICAgICAgICAgICAgICAgICBzMTUuYWRkKGggJiAweGYpCisgICAgICAgICAgICAgICAgICAgIHMyNTUuYWRkKGggJiAweGZmKQorICAgICAgICAgICAgICAgICMgU2lwSGFzaDI0IGRpc3RyaWJ1dGlvbiBkZXBlbmRzIG9uIGtleSwgdXN1YWxseSA+IDYwJQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczE1KSwgOCwgcHJlZml4KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczI1NSksIDEyOCwgcHJlZml4KQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CmluZGV4IGMwNDcwZDYuLjM2YTk4Y2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKQEAgLTE4LDExICsxOCwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCiAjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPwogQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKIAorY19oYXNobGliID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnaGFzaGxpYicsIGZyZXNoPVsnX2hhc2hsaWInXSkKK3B5X2hhc2hsaWIgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdoYXNobGliJywgYmxvY2tlZD1bJ19oYXNobGliJ10pCiAKIGRlZiBoZXhzdHIocyk6CiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgYnl0ZXMpLCByZXByKHMpCkBAIC0zNiw3ICszOCw3IEBACiBjbGFzcyBIYXNoTGliVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHN1cHBvcnRlZF9oYXNoX25hbWVzID0gKCAnbWQ1JywgJ01ENScsICdzaGExJywgJ1NIQTEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMjI0JywgJ1NIQTIyNCcsICdzaGEyNTYnLCAnU0hBMjU2JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMzg0JywgJ1NIQTM4NCcsICdzaGE1MTInLCAnU0hBNTEyJykKIAogICAgICMgSXNzdWUgIzE0NjkzOiBmYWxsYmFjayBtb2R1bGVzIGFyZSBhbHdheXMgY29tcGlsZWQgdW5kZXIgUE9TSVgKICAgICBfd2Fybl9vbl9leHRlbnNpb25faW1wb3J0ID0gb3MubmFtZSA9PSAncG9zaXgnIG9yIENPTVBJTEVEX1dJVEhfUFlERUJVRwpAQCAtNzIsMjcgKzc0LDMxIEBACiAgICAgICAgIGlmIF9oYXNobGliOgogICAgICAgICAgICAgIyBUaGVzZSB0d28gYWxnb3JpdGhtcyBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQgd2hlbiB0aGlzIG1vZHVsZQogICAgICAgICAgICAgIyBpcyBjb21waWxlZC4gIElmIG5vdCwgc29tZXRoaW5nIHdhcyBjb21waWxlZCB3cm9uZy4KLSAgICAgICAgICAgIGFzc2VydCBoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9tZDUnKQotICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX3NoYTEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX21kNScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX3NoYTEnKSkKICAgICAgICAgICAgIGZvciBhbGdvcml0aG0sIGNvbnN0cnVjdG9ycyBpbiBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBnZXRhdHRyKF9oYXNobGliLCAnb3BlbnNzbF8nK2FsZ29yaXRobSwgTm9uZSkKICAgICAgICAgICAgICAgICBpZiBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChjb25zdHJ1Y3RvcikKIAorICAgICAgICBkZWYgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IobmFtZSk6CisgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGdldGF0dHIoaGFzaGxpYiwgIl9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IiKShuYW1lKQorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFtuYW1lXS5hZGQoY29uc3RydWN0b3IpCisKICAgICAgICAgX21kNSA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19tZDUnKQogICAgICAgICBpZiBfbWQ1OgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnbWQ1J10uYWRkKF9tZDUubWQ1KQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ21kNScpCiAgICAgICAgIF9zaGExID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTEnKQogICAgICAgICBpZiBfc2hhMToKLSAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTEnXS5hZGQoX3NoYTEuc2hhMSkKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGExJykKICAgICAgICAgX3NoYTI1NiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEyNTYnKQogICAgICAgICBpZiBfc2hhMjU2OgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjI0J10uYWRkKF9zaGEyNTYuc2hhMjI0KQotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjU2J10uYWRkKF9zaGEyNTYuc2hhMjU2KQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTIyNCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjU2JykKICAgICAgICAgX3NoYTUxMiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGE1MTInKQogICAgICAgICBpZiBfc2hhNTEyOgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMzg0J10uYWRkKF9zaGE1MTIuc2hhMzg0KQotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhNTEyJ10uYWRkKF9zaGE1MTIuc2hhNTEyKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTM4NCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhNTEyJykKIAogICAgICAgICBzdXBlcihIYXNoTGliVGVzdENhc2UsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKIApAQCAtMTIxLDggKzEyNywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2hsaWIubmV3LCAxKQogCiAgICAgZGVmIHRlc3RfZ2V0X2J1aWx0aW5fY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIGdldF9idWlsdGluX2NvbnN0cnVjdG9yID0gaGFzaGxpYi5fX2RpY3RfX1sKLSAgICAgICAgICAgICAgICAnX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciddCisgICAgICAgIGdldF9idWlsdGluX2NvbnN0cnVjdG9yID0gZ2V0YXR0cihoYXNobGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3InKQorICAgICAgICBidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlID0gZ2V0YXR0cihoYXNobGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsICd0ZXN0JykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IF9tZDUKQEAgLTEzMCw2ICsxMzgsOCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICAjIFRoaXMgZm9yY2VzIGFuIEltcG9ydEVycm9yIGZvciAiaW1wb3J0IF9tZDUiIHN0YXRlbWVudHMKICAgICAgICAgc3lzLm1vZHVsZXNbJ19tZDUnXSA9IE5vbmUKKyAgICAgICAgIyBjbGVhciB0aGUgY2FjaGUKKyAgICAgICAgYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZS5jbGVhcigpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldF9idWlsdGluX2NvbnN0cnVjdG9yLCAnbWQ1JykKICAgICAgICAgZmluYWxseToKQEAgLTEzOCwxMyArMTQ4LDIzIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX21kNSddCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsIDMpCisgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ21kNScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uc3RydWN0b3IsIF9tZDUubWQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlKSwgWydNRDUnLCAnbWQ1J10pCiAKICAgICBkZWYgdGVzdF9oZXhkaWdlc3Qoc2VsZik6CiAgICAgICAgIGZvciBjb25zIGluIHNlbGYuaGFzaF9jb25zdHJ1Y3RvcnM6CiAgICAgICAgICAgICBoID0gY29ucygpCi0gICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShoLmRpZ2VzdCgpLCBieXRlcyksIG5hbWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLmRpZ2VzdCgpLCBieXRlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4c3RyKGguZGlnZXN0KCkpLCBoLmhleGRpZ2VzdCgpKQogCisgICAgZGVmIHRlc3RfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGZvciBjb25zIGluIHNlbGYuaGFzaF9jb25zdHJ1Y3RvcnM6CisgICAgICAgICAgICBoID0gY29ucygpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaC5uYW1lLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGgubmFtZSwgc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCBoYXNobGliLm5ldyhoLm5hbWUpLm5hbWUpCisKICAgICBkZWYgdGVzdF9sYXJnZV91cGRhdGUoc2VsZik6CiAgICAgICAgIGFhcyA9IGInYScgKiAxMjgKICAgICAgICAgYmVlcyA9IGInYicgKiAxMjcKQEAgLTIxMyw4ICsyMzMsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5kaWdlc3QoKSksIGRpZ2VzdF9zaXplKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm5hbWUubG93ZXIoKSwgbmFtZS5sb3dlcigpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLnNwbGl0KCJfIilbMF0sIHJlcHIobSkubG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5uYW1lLCBuYW1lKQorICAgICAgICAgICAgIyBzcGxpdCBmb3Igc2hhM181MTIgLyBfc2hhMy5zaGEzIG9iamVjdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLnNwbGl0KCJfIilbMF0sIHJlcHIobSkpCiAKICAgICBkZWYgdGVzdF9ibG9ja3NpemVfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnbWQ1JywgNjQsIDE2KQpAQCAtMzUyLDYgKzM3MywxMiBAQAogICAgICAgICAgICJlNzE4NDgzZDBjZTc2OTY0NGUyZTQyYzdiYzE1YjQ2MzhlMWY5OGIxM2IyMDQ0Mjg1NjMyYTgwM2FmYTk3M2ViIisKICAgICAgICAgICAiZGUwZmYyNDQ4NzdlYTYwYTRjYjA0MzJjZTU3N2MzMWJlYjAwOWM1YzJjNDlhYTJlNGVhZGIyMTdhZDhjYzA5YiIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5tYXhzaXplIDwgXzRHICsgNSwgJ3Rlc3QgY2Fubm90IHJ1biBvbiAzMi1iaXQgc3lzdGVtcycpCisgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyA1LCBtZW11c2U9MSwgZHJ5X3J1bj1GYWxzZSkKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjI0X2h1Z2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjI0JywgYidBJypzaXplLAorICAgICAgICAgICAgICAgICAgICc1OGVmNjAwNTdjOWRkZGI2YTg3NDc3ZTlhY2U1YTI2ZjBkOWRiMDE4ODFjZjliMTBhOWY4YzIyNCcpCisKICAgICBkZWYgdGVzdF9naWwoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhpbmdzIHdvcmsgZmluZSB3aXRoIGFuIGlucHV0IGxhcmdlciB0aGFuIHRoZSBzaXplIHJlcXVpcmVkCiAgICAgICAgICMgZm9yIG11bHRpdGhyZWFkZWQgb3BlcmF0aW9uICh3aGljaCBpcyBoYXJkd2lyZWQgdG8gMjA0OCkuCkBAIC00MDAsOCArNDI3LDggQEAKICAgICAgICAgZXZlbnRzID0gW10KICAgICAgICAgZm9yIHRocmVhZG51bSBpbiByYW5nZShudW1fdGhyZWFkcyk6CiAgICAgICAgICAgICBjaHVua19zaXplID0gbGVuKGRhdGEpIC8vICgxMCoqdGhyZWFkbnVtKQotICAgICAgICAgICAgYXNzZXJ0IGNodW5rX3NpemUgPiAwCi0gICAgICAgICAgICBhc3NlcnQgY2h1bmtfc2l6ZSAlIGxlbihzbWFsbGVzdF9kYXRhKSA9PSAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoY2h1bmtfc2l6ZSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2h1bmtfc2l6ZSAlIGxlbihzbWFsbGVzdF9kYXRhKSwgMCkKICAgICAgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoZXZlbnQpCiAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1oYXNoX2luX2NodW5rcywKQEAgLTQxMiw4ICs0MzksOTUgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2hhc2gsIGhhc2hlci5oZXhkaWdlc3QoKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEhhc2hMaWJUZXN0Q2FzZSkKKworY2xhc3MgS0RGVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgcGJrZGYyX3Rlc3RfdmVjdG9ycyA9IFsKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxLCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAyLCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCA0MDk2LCBOb25lKSwKKyAgICAgICAgIyB0b28gc2xvdywgaXQgdGFrZXMgb3ZlciBhIG1pbnV0ZSBvbiBhIGZhc3QgQ1BVLgorICAgICAgICAjKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxNjc3NzIxNiwgTm9uZSksCisgICAgICAgIChiJ3Bhc3N3b3JkUEFTU1dPUkRwYXNzd29yZCcsIGInc2FsdFNBTFRzYWx0U0FMVHNhbHRTQUxUc2FsdFNBTFRzYWx0JywKKyAgICAgICAgIDQwOTYsIC0xKSwKKyAgICAgICAgKGIncGFzc1wwd29yZCcsIGInc2FcMGx0JywgNDA5NiwgMTYpLAorICAgIF0KKworICAgIHBia2RmMl9yZXN1bHRzID0geworICAgICAgICAic2hhMSI6IFsKKyAgICAgICAgICAgICMgb2ZmaWNhbCB0ZXN0IHZlY3RvcnMgZnJvbSBSRkMgNjA3MAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzBjNjBjODBmOTYxZjBlNzFmM2E5YjUyNGFmNjAxMjA2MmZlMDM3YTYnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZWE2YzAxNGRjNzJkNmY4Y2NkMWVkOTJhY2UxZDQxZjBkOGRlODk1NycpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc0YjAwNzkwMWI3NjU0ODlhYmVhZDQ5ZDkyNmY3MjFkMDY1YTQyOWMxJyksIE5vbmUpLAorICAgICAgICAgICAgIyhieXRlcy5mcm9taGV4KCdlZWZlM2Q2MWNkNGRhNGU0ZTk5NDViM2Q2YmEyMTU4YzI2MzRlOTg0JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzNkMmVlYzRmZTQxYzg0OWI4MGM4ZDgzNjYyYzBlNDRhOGIyOTFhOTY0YycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdmMmYwNzAzOCcpLCAyNSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnNTZmYTZhYTc1NTQ4MDk5ZGNjMzdkN2YwMzQyNWUwYzMnKSwgTm9uZSksXSwKKyAgICAgICAgInNoYTI1NiI6IFsKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCcxMjBmYjZjZmZjZjhiMzJjNDNlNzIyNTI1NmM0ZjgzNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdhODY1NDhjOTJjY2MzNTQ4MDgwNTk4N2NiNzBiZTE3YicpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdhZTRkMGM5NWFmNmI0NmQzMmQwYWRmZjkyOGYwNmRkMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcyYTMwM2Y4ZWYzYzI1MWRmZDZlMmQ4NWE5NTQ3NGM0MycpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdjNWU0NzhkNTkyODhjODQxYWE1MzBkYjY4NDVjNGM4ZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc5NjI4OTNhMDAxY2U0ZTExYTQ5NjM4NzNhYTk4MTM0YScpLCBOb25lKSwKKyAgICAgICAgICAgICMoYnl0ZXMuZnJvbWhleCgnY2Y4MWM2NmZlOGNmYzA0ZDFmMzFlY2I2NWRhYjQwODknCisgICAgICAgICAgICAjICAgICAgICAgICAgICAgJ2Y3ZjE3OWU4OWIzYjBiY2IxN2FkMTBlM2FjNmViYTQ2JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzM0OGM4OWRiY2JkMzJiMmYzMmQ4MTRiODExNmU4NGNmMmIxNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczNDdlYmMxODAwMTgxYzRlMmExZmI4ZGQ1M2UxYzYzNTUxOGM3ZGFjNDdlOScpLCA0MCksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnODliNjlkMDUxNmY4Mjk4OTNjNjk2MjI2NjUwYTg2ODcnKSwgTm9uZSksXSwKKyAgICAgICAgInNoYTUxMiI6IFsKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4NjdmNzBjZjFhZGUwMmNmZjM3NTI1OTlhM2E1M2RjNGFmMzRjN2E2Njk4MTVhZTUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZDUxMzU1NGUxYzhjZjI1MmMwMmQ0NzBhMjg1YTA1MDFiYWQ5OTliZmU5NDNjMDhmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzA1MDIzNWQ3ZDY4YjFkYTU1ZTYzZjczYjYwYTU3ZmNlJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2UxZDljMTZhYTY4MTcwOGE0NWY1YzdjNGUyMTVjZWI2NmUwMTFhMmU5ZjAwNDA3MScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczZjE4YWVmZGI4NjZkNTNjZjc2Y2FiMjg2OGEzOWI5Zjc4NDBlZGNlNGZlZjVhODInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmU2NzMzNWM3N2E2MDY4ZTA0MTEyNzU0ZjI3Y2NmNGUnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZDE5N2IxYjMzZGIwMTQzZTAxOGIxMmYzZDFkMTQ3OWU2Y2RlYmRjYzk3YzVjMGY4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzdmNjkwMmUwNzJmNDU3YjUxNDNmMzA2MDI2NDFiM2Q1NWNkMzM1OTg4Y2IzNmI4NCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczNzYwNjBlY2Q1MzJlMDM5Yjc0MmEyMzk0MzRhZjJkNScpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4YzA1MTFmNGM2ZTU5N2M2YWM2MzE1ZDhmMDM2MmUyMjVmM2M1MDE0OTViYTIzYjgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnNjhjMDA1MTc0ZGM0ZWU3MTExNWI1OWY5ZTYwY2Q5NTMyZmEzM2UwZjc1YWVmZTMwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzIyNWM1ODNhMTg2Y2Q4MmJkNGRhZWE5NzI0YTNkM2I4JyksIDY0KSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc5ZDllOWM0Y2QyMWZlNGJlMjRkNWI4MjQ0Yzc1OTY2NScpLCBOb25lKSxdLAorICAgIH0KKworICAgIGRlZiBfdGVzdF9wYmtkZjJfaG1hYyhzZWxmLCBwYmtkZjIpOgorICAgICAgICBmb3IgZGlnZXN0X25hbWUsIHJlc3VsdHMgaW4gc2VsZi5wYmtkZjJfcmVzdWx0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGksIHZlY3RvciBpbiBlbnVtZXJhdGUoc2VsZi5wYmtkZjJfdGVzdF92ZWN0b3JzKToKKyAgICAgICAgICAgICAgICBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbiA9IHZlY3RvcgorICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBvdmVyd3JpdGVfZGtsZW4gPSByZXN1bHRzW2ldCisgICAgICAgICAgICAgICAgaWYgb3ZlcndyaXRlX2RrbGVuOgorICAgICAgICAgICAgICAgICAgICBka2xlbiA9IG92ZXJ3cml0ZV9ka2xlbgorICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbikpCisgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBtZW1vcnl2aWV3KHBhc3N3b3JkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhzYWx0KSwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIGJ5dGVhcnJheShwYXNzd29yZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShzYWx0KSwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgaWYgZGtsZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBia2RmMiwgYidzaGExJywgYidwYXNzJywgYidzYWx0JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwYmtkZjIsICdzaGExJywgJ3Bhc3MnLCAnc2FsdCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgMSwgLTEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndW5zdXBwb3J0ZWQgaGFzaCB0eXBlJyk6CisgICAgICAgICAgICBwYmtkZjIoJ3Vua25vd24nLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxKQorCisgICAgZGVmIHRlc3RfcGJrZGYyX2htYWNfcHkoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGJrZGYyX2htYWMocHlfaGFzaGxpYi5wYmtkZjJfaG1hYykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY19oYXNobGliLCAncGJrZGYyX2htYWMnKSwKKyAgICAgICAgICAgICAgICAgICAgICcgICB0ZXN0IHJlcXVpcmVzIE9wZW5TU0wgPiAxLjAnKQorICAgIGRlZiB0ZXN0X3Bia2RmMl9obWFjX2Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGJrZGYyX2htYWMoY19oYXNobGliLnBia2RmMl9obWFjKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weSBiL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQppbmRleCA0Y2E3Y2VjLi5jZGU1NmZkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2htYWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CkBAIC0xLDE3ICsxLDM5IEBACitpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgaG1hYwogaW1wb3J0IGhhc2hsaWIKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAorCitkZWYgaWdub3JlX3dhcm5pbmcoZnVuYyk6CisgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9UGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICByZXR1cm4gd3JhcHBlcgorCisKIGNsYXNzIFRlc3RWZWN0b3JzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbWQ1X3ZlY3RvcnMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGUgSE1BQyBtb2R1bGUgYWdhaW5zdCB0ZXN0IHZlY3RvcnMgZnJvbSB0aGUgUkZDLgogCiAgICAgICAgIGRlZiBtZDV0ZXN0KGtleSwgZGF0YSwgZGlnZXN0KToKLSAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhKQorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNobGliLm1kNSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1tZDUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAxNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKworICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD0nbWQ1JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1tZDUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAxNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKwogCiAgICAgICAgIG1kNXRlc3QoYiJceDBiIiAqIDE2LAogICAgICAgICAgICAgICAgIGIiSGkgVGhlcmUiLApAQCAtNDYsNiArNjgsMTYgQEAKICAgICAgICAgZGVmIHNoYXRlc3Qoa2V5LCBkYXRhLCBkaWdlc3QpOgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNobGliLnNoYTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtc2hhMSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDIwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPSdzaGExJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1zaGExIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKIAogICAgICAgICBzaGF0ZXN0KGIiXHgwYiIgKiAyMCwKICAgICAgICAgICAgICAgICBiIkhpIFRoZXJlIiwKQEAgLTc2LDEwICsxMDgsMjEgQEAKICAgICAgICAgICAgICAgICAgYiJhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIpLAogICAgICAgICAgICAgICAgICJlOGU5OWQwZjQ1MjM3ZDc4NmQ2YmJhYTc5NjVjNzgwOGJiZmYxYTkxIikKIAotICAgIGRlZiBfcmZjNDIzMV90ZXN0X2Nhc2VzKHNlbGYsIGhhc2hmdW5jKToKKyAgICBkZWYgX3JmYzQyMzFfdGVzdF9jYXNlcyhzZWxmLCBoYXNoZnVuYywgaGFzaF9uYW1lLCBkaWdlc3Rfc2l6ZSwgYmxvY2tfc2l6ZSk6CiAgICAgICAgIGRlZiBobWFjdGVzdChrZXksIGRhdGEsIGhleGRpZ2VzdHMpOgorICAgICAgICAgICAgaG1hY19uYW1lID0gImhtYWMtIiArIGhhc2hfbmFtZQogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNoZnVuYykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS5sb3dlcigpLCBoZXhkaWdlc3RzW2hhc2hmdW5jXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCBobWFjX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCisKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaF9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLmxvd2VyKCksIGhleGRpZ2VzdHNbaGFzaGZ1bmNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhtYWNfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgZGlnZXN0X3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgYmxvY2tfc2l6ZSkKKwogCiAgICAgICAgICMgNC4yLiAgVGVzdCBDYXNlIDEKICAgICAgICAgaG1hY3Rlc3Qoa2V5ID0gYidceDBiJyoyMCwKQEAgLTE4OSwxNiArMjMyLDE2IEBACiAgICAgICAgICAgICAgICAgIH0pCiAKICAgICBkZWYgdGVzdF9zaGEyMjRfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjI0KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyMjQsICdzaGEyMjQnLCAyOCwgNjQpCiAKICAgICBkZWYgdGVzdF9zaGEyNTZfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjU2KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyNTYsICdzaGEyNTYnLCAzMiwgNjQpCiAKICAgICBkZWYgdGVzdF9zaGEzODRfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMzg0KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEzODQsICdzaGEzODQnLCA0OCwgMTI4KQogCiAgICAgZGVmIHRlc3Rfc2hhNTEyX3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTUxMikKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhNTEyLCAnc2hhNTEyJywgNjQsIDEyOCkKIAogICAgIGRlZiB0ZXN0X2xlZ2FjeV9ibG9ja19zaXplX3dhcm5pbmdzKHNlbGYpOgogICAgICAgICBjbGFzcyBNb2NrQ3JhenlIYXNoKG9iamVjdCk6CkBAIC0yMjIsNDYgKzI2NSw3NCBAQAogICAgICAgICAgICAgICAgIGhtYWMuSE1BQyhiJ2EnLCBiJ2InLCBkaWdlc3Rtb2Q9TW9ja0NyYXp5SGFzaCkKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4cGVjdGVkIHdhcm5pbmcgYWJvdXQgc21hbGwgYmxvY2tfc2l6ZScpCiAKKyAgICBkZWYgdGVzdF93aXRoX2RpZ2VzdG1vZF93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBrZXkgPSBiIlx4MGIiICogMTYKKyAgICAgICAgICAgIGRhdGEgPSBiIkhpIFRoZXJlIgorICAgICAgICAgICAgZGlnZXN0ID0gIjkyOTQ3MjdBMzYzOEJCMUMxM0Y0OEVGODE1OEJGQzlEIgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0KQogCiAKIGNsYXNzIENvbnN0cnVjdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3Rfbm9ybWFsKHNlbGYpOgogICAgICAgICAjIFN0YW5kYXJkIGNvbnN0cnVjdG9yIGNhbGwuCiAgICAgICAgIGZhaWxlZCA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiU3RhbmRhcmQgY29uc3RydWN0b3IgY2FsbCByYWlzZWQgZXhjZXB0aW9uLiIpCiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF93aXRoX3N0cl9rZXkoc2VsZik6CiAgICAgICAgICMgUGFzcyBhIGtleSBvZiB0eXBlIHN0ciwgd2hpY2ggaXMgYW4gZXJyb3IsIGJlY2F1c2UgaXQgZXhwZWN0cyBhIGtleQogICAgICAgICAjIG9mIHR5cGUgYnl0ZXMKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQygia2V5IikKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X2RvdF9uZXdfd2l0aF9zdHJfa2V5KHNlbGYpOgogICAgICAgICAjIFBhc3MgYSBrZXkgb2YgdHlwZSBzdHIsIHdoaWNoIGlzIGFuIGVycm9yLCBiZWNhdXNlIGl0IGV4cGVjdHMgYSBrZXkKICAgICAgICAgIyBvZiB0eXBlIGJ5dGVzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGggPSBobWFjLm5ldygia2V5IikKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X3dpdGh0ZXh0KHNlbGYpOgogICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0LgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgYiJoYXNoIHRoaXMhIikKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dCBhcmd1bWVudCByYWlzZWQgZXhjZXB0aW9uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKSwgJzM0MzI1YjYzOWRhNGNmZDk1NzM1YjM4MWUyOGNiODY0JykKKworICAgIGRlZiB0ZXN0X3dpdGhfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGJ5dGVhcnJheShiImtleSIpLCBieXRlYXJyYXkoYiJoYXNoIHRoaXMhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdG1vZD0ibWQ1IikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIGJ5dGVhcnJheSBhcmd1bWVudHMgcmFpc2VkIGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCksICczNDMyNWI2MzlkYTRjZmQ5NTczNWIzODFlMjhjYjg2NCcpCisKKyAgICBkZWYgdGVzdF93aXRoX21lbW9yeXZpZXdfbXNnKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgbWVtb3J5dmlldyhiImhhc2ggdGhpcyEiKSwgZGlnZXN0bW9kPSJtZDUiKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggbWVtb3J5dmlldyBtc2cgcmFpc2VkIGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCksICczNDMyNWI2MzlkYTRjZmQ5NTczNWIzODFlMjhjYjg2NCcpCiAKICAgICBkZWYgdGVzdF93aXRobW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0IGFuZCBkaWdlc3QgbW9kdWxlLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgYiIiLCBoYXNobGliLnNoYTEpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIGhhc2hsaWIuc2hhMSByYWlzZWQgZXhjZXB0aW9uLiIpCiAKIGNsYXNzIFNhbml0eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfbWQ1KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgSE1BQyBkZWZhdWx0cyB0byBNRDUgYWxnb3JpdGhtLgogICAgICAgICAjIE5PVEU6IHRoaXMgd2hpdGVib3ggdGVzdCBkZXBlbmRzIG9uIHRoZSBobWFjIGNsYXNzIGludGVybmFscwpAQCAtMjcyLDE5ICszNDMsMTkgQEAKICAgICAgICAgIyBFeGVyY2lzaW5nIGFsbCBtZXRob2RzIG9uY2UuCiAgICAgICAgICMgVGhpcyBtdXN0IG5vdCByYWlzZSBhbnkgZXhjZXB0aW9ucwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIibXkgc2VjcmV0IGtleSIpCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIibXkgc2VjcmV0IGtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgICAgIGgudXBkYXRlKGIiY29tcHV0ZSB0aGUgaGFzaCBvZiB0aGlzIHRleHQhIikKICAgICAgICAgICAgIGRpZyA9IGguZGlnZXN0KCkKICAgICAgICAgICAgIGRpZyA9IGguaGV4ZGlnZXN0KCkKICAgICAgICAgICAgIGgyID0gaC5jb3B5KCkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFeGNlcHRpb24gcmFpc2VkIGR1cmluZyBub3JtYWwgdXNhZ2Ugb2YgSE1BQyBjbGFzcy4iKQogCiBjbGFzcyBDb3B5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIGF0dHJpYnV0ZXMgYXJlIG9mIHNhbWUgdHlwZS4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxLmRpZ2VzdF9jb25zID09IGgyLmRpZ2VzdF9jb25zLAogICAgICAgICAgICAgImRpZ2VzdCBjb25zdHJ1Y3RvcnMgZG9uJ3QgbWF0Y2guIikKQEAgLTI5NSw3ICszNjYsNyBAQAogCiAgICAgZGVmIHRlc3RfcmVhbGNvcHkoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiB0aGUgY29weSBtZXRob2QgY3JlYXRlZCBhIHJlYWwgY29weS4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgIyBVc2luZyBpZCgpIGluIGNhc2Ugc29tZWJvZHkgaGFzIG92ZXJyaWRkZW4gX19lcV9fL19fbmVfXy4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlkKGgxKSAhPSBpZChoMiksICJObyByZWFsIGNvcHkgb2YgdGhlIEhNQUMgaW5zdGFuY2UuIikKQEAgLTMwNiw3ICszNzcsNyBAQAogCiAgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiB0aGUgY29weSBoYXMgdGhlIHNhbWUgZGlnZXN0cy4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDEudXBkYXRlKGIic29tZSByYW5kb20gdGV4dCIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEuZGlnZXN0KCksIGgyLmRpZ2VzdCgpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odG1sLnB5IGIvTGliL3Rlc3QvdGVzdF9odG1sLnB5CmluZGV4IDMwZGFjNTguLjVlOWYzODIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0bWwucHkKQEAgLTE2LDkgKzE2LDg5IEBACiAgICAgICAgICAgICBodG1sLmVzY2FwZSgnXCc8c2NyaXB0PiImZm9vOyI8L3NjcmlwdD5cJycsIEZhbHNlKSwKICAgICAgICAgICAgICdcJyZsdDtzY3JpcHQmZ3Q7IiZhbXA7Zm9vOyImbHQ7L3NjcmlwdCZndDtcJycpCiAKKyAgICBkZWYgdGVzdF91bmVzY2FwZShzZWxmKToKKyAgICAgICAgbnVtZXJpY19mb3JtYXRzID0gWycmIyVkJywgJyYjJWQ7JywgJyYjeCV4JywgJyYjeCV4OyddCisgICAgICAgIGVycm1zZyA9ICd1bmVzY2FwZSglcikgc2hvdWxkIGhhdmUgcmV0dXJuZWQgJXInCisgICAgICAgIGRlZiBjaGVjayh0ZXh0LCBleHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwudW5lc2NhcGUodGV4dCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJybXNnICUgKHRleHQsIGV4cGVjdGVkKSkKKyAgICAgICAgZGVmIGNoZWNrX251bShudW0sIGV4cGVjdGVkKToKKyAgICAgICAgICAgIGZvciBmb3JtYXQgaW4gbnVtZXJpY19mb3JtYXRzOgorICAgICAgICAgICAgICAgIHRleHQgPSBmb3JtYXQgJSBudW0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwudW5lc2NhcGUodGV4dCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm1zZyAlICh0ZXh0LCBleHBlY3RlZCkpCisgICAgICAgICMgY2hlY2sgdGV4dCB3aXRoIG5vIGNoYXJhY3RlciByZWZlcmVuY2VzCisgICAgICAgIGNoZWNrKCdubyBjaGFyYWN0ZXIgcmVmZXJlbmNlcycsICdubyBjaGFyYWN0ZXIgcmVmZXJlbmNlcycpCisgICAgICAgICMgY2hlY2sgJiBmb2xsb3dlZCBieSBpbnZhbGlkIGNoYXJzCisgICAgICAgIGNoZWNrKCcmXG4mXHQmICYmJywgJyZcbiZcdCYgJiYnKQorICAgICAgICAjIGNoZWNrICYgZm9sbG93ZWQgYnkgbnVtYmVycyBhbmQgbGV0dGVycworICAgICAgICBjaGVjaygnJjAgJjkgJmEgJjA7ICY5OyAmYTsnLCAnJjAgJjkgJmEgJjA7ICY5OyAmYTsnKQorICAgICAgICAjIGNoZWNrIGluY29tcGxldGUgZW50aXRpZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisgICAgICAgIGZvciB4IGluIFsnJicsICcmIycsICcmI3gnLCAnJiNYJywgJyYjeScsICcmI3h5JywgJyYjWHknXToKKyAgICAgICAgICAgIGNoZWNrKHgsIHgpCisgICAgICAgICAgICBjaGVjayh4Kyc7JywgeCsnOycpCisgICAgICAgICMgY2hlY2sgc2V2ZXJhbCBjb21iaW5hdGlvbnMgb2YgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcywKKyAgICAgICAgIyBwb3NzaWJseSBmb2xsb3dlZCBieSBkaWZmZXJlbnQgY2hhcmFjdGVycworICAgICAgICBmb3JtYXRzID0gWycmIyVkJywgJyYjJTA3ZCcsICcmIyVkOycsICcmIyUwN2Q7JywKKyAgICAgICAgICAgICAgICAgICAnJiN4JXgnLCAnJiN4JTA2eCcsICcmI3gleDsnLCAnJiN4JTA2eDsnLAorICAgICAgICAgICAgICAgICAgICcmI3glWCcsICcmI3glMDZYJywgJyYjWCV4OycsICcmI1glMDZ4OyddCisgICAgICAgIGZvciBudW0sIGNoYXIgaW4gemlwKFs2NSwgOTcsIDM0LCAzOCwgMHgyNjAzLCAweDEwMTIzNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnQScsICdhJywgJyInLCAnJicsICdcdTI2MDMnLCAnXFUwMDEwMTIzNCddKToKKyAgICAgICAgICAgIGZvciBzIGluIGZvcm1hdHM6CisgICAgICAgICAgICAgICAgY2hlY2socyAlIG51bSwgY2hhcikKKyAgICAgICAgICAgICAgICBmb3IgZW5kIGluIFsnICcsICdYJ106CisgICAgICAgICAgICAgICAgICAgIGNoZWNrKChzK2VuZCkgJSBudW0sIGNoYXIrZW5kKQorICAgICAgICAjIGNoZWNrIGludmFsaWQgY29kZXBvaW50cworICAgICAgICBmb3IgY3AgaW4gWzB4RDgwMCwgMHhEQjAwLCAweERDMDAsIDB4REZGRiwgMHgxMTAwMDBdOgorICAgICAgICAgICAgY2hlY2tfbnVtKGNwLCAnXHVGRkZEJykKKyAgICAgICAgIyBjaGVjayBtb3JlIGludmFsaWQgY29kZXBvaW50cworICAgICAgICBmb3IgY3AgaW4gWzB4MSwgMHhiLCAweGUsIDB4N2YsIDB4ZmZmZSwgMHhmZmZmLCAweDEwZmZmZSwgMHgxMGZmZmZdOgorICAgICAgICAgICAgY2hlY2tfbnVtKGNwLCAnJykKKyAgICAgICAgIyBjaGVjayBpbnZhbGlkIG51bWJlcnMKKyAgICAgICAgZm9yIG51bSwgY2ggaW4gemlwKFsweDBkLCAweDgwLCAweDk1LCAweDlkXSwgJ1xyXHUyMGFjXHUyMDIyXHg5ZCcpOgorICAgICAgICAgICAgY2hlY2tfbnVtKG51bSwgY2gpCisgICAgICAgICMgY2hlY2sgc21hbGwgbnVtYmVycworICAgICAgICBjaGVja19udW0oMCwgJ1x1RkZGRCcpCisgICAgICAgIGNoZWNrX251bSg5LCAnXHQnKQorICAgICAgICAjIGNoZWNrIGEgYmlnIG51bWJlcgorICAgICAgICBjaGVja19udW0oMTAwMDAwMDAwMDAwMDAwMDAwMCwgJ1x1RkZGRCcpCisgICAgICAgICMgY2hlY2sgdGhhdCBtdWx0aXBsZSB0cmFpbGluZyBzZW1pY29sb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseQorICAgICAgICBmb3IgZSBpbiBbJyZxdW90OzsnLCAnJiMzNDs7JywgJyYjeDIyOzsnLCAnJiNYMjI7OyddOgorICAgICAgICAgICAgY2hlY2soZSwgJyI7JykKKyAgICAgICAgIyBjaGVjayB0aGF0IHNlbWljb2xvbnMgaW4gdGhlIG1pZGRsZSBkb24ndCBjcmVhdGUgcHJvYmxlbXMKKyAgICAgICAgZm9yIGUgaW4gWycmcXVvdDtxdW90OycsICcmIzM0O3F1b3Q7JywgJyYjeDIyO3F1b3Q7JywgJyYjWDIyO3F1b3Q7J106CisgICAgICAgICAgICBjaGVjayhlLCAnInF1b3Q7JykKKyAgICAgICAgIyBjaGVjayB0cmlwbGUgYWRqYWNlbnQgY2hhcnJlZnMKKyAgICAgICAgZm9yIGUgaW4gWycmcXVvdCcsICcmIzM0JywgJyYjeDIyJywgJyYjWDIyJ106CisgICAgICAgICAgICBjaGVjayhlKjMsICciIiInKQorICAgICAgICAgICAgY2hlY2soKGUrJzsnKSozLCAnIiIiJykKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBjYXNlIGlzIHJlc3BlY3RlZAorICAgICAgICBmb3IgZSBpbiBbJyZhbXAnLCAnJmFtcDsnLCAnJkFNUCcsICcmQU1QOyddOgorICAgICAgICAgICAgY2hlY2soZSwgJyYnKQorICAgICAgICBmb3IgZSBpbiBbJyZBbXAnLCAnJkFtcDsnXToKKyAgICAgICAgICAgIGNoZWNrKGUsIGUpCisgICAgICAgICMgY2hlY2sgdGhhdCBub24tZXhpc3RlbnQgbmFtZWQgZW50aXRpZXMgYXJlIHJldHVybmVkIHVuY2hhbmdlZAorICAgICAgICBjaGVjaygnJnN2YWRpbGZhcmk7JywgJyZzdmFkaWxmYXJpOycpCisgICAgICAgICMgdGhlIGZvbGxvd2luZyBleGFtcGxlcyBhcmUgaW4gdGhlIGh0bWw1IHNwZWNzCisgICAgICAgIGNoZWNrKCcmbm90aXQnLCAnwqxpdCcpCisgICAgICAgIGNoZWNrKCcmbm90aXQ7JywgJ8KsaXQ7JykKKyAgICAgICAgY2hlY2soJyZub3RpbicsICfCrGluJykKKyAgICAgICAgY2hlY2soJyZub3RpbjsnLCAn4oiJJykKKyAgICAgICAgIyBhIHNpbWlsYXIgZXhhbXBsZSB3aXRoIGEgbG9uZyBuYW1lCisgICAgICAgIGNoZWNrKCcmbm90UmVhbGx5QW5FeGlzdGluZ05hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlOycsCisgICAgICAgICAgICAgICfCrFJlYWxseUFuRXhpc3RpbmdOYW1lZENoYXJhY3RlclJlZmVyZW5jZTsnKQorICAgICAgICAjIGxvbmdlc3QgdmFsaWQgbmFtZQorICAgICAgICBjaGVjaygnJkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7JywgJ+KIsycpCisgICAgICAgICMgY2hlY2sgYSBjaGFycmVmIHRoYXQgbWFwcyB0byB0d28gdW5pY29kZSBjaGFycworICAgICAgICBjaGVjaygnJmFjRTsnLCAnXHUyMjNFXHUwMzMzJykKKyAgICAgICAgY2hlY2soJyZhY0UnLCAnJmFjRScpCisgICAgICAgICMgc2VlICMxMjg4OAorICAgICAgICBjaGVjaygnJiMxMjM7ICcgKiAxMDUwLCAneyAnICogMTA1MCkKKyAgICAgICAgIyBzZWUgIzE1MTU2CisgICAgICAgIGNoZWNrKCcmRWFjdXRlcmljJkVhY3V0ZTtyaWMmYWxwaGFjZW50YXVyaSZhbHBoYTtjZW50YXVyaScsCisgICAgICAgICAgICAgICfDiXJpY8OJcmljJmFscGhhY2VudGF1cmnOsWNlbnRhdXJpJykKKyAgICAgICAgY2hlY2soJyZjbzsnLCAnJmNvOycpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoSHRtbFRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKaW5kZXggMTFkOWM5Yy4uMmQ3NzFhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQpAQCAtNzAsNiArNzAsMTggQEAKICAgICAgICAgc2VsZi5hcHBlbmQoKCJzdGFydHRhZ190ZXh0Iiwgc2VsZi5nZXRfc3RhcnR0YWdfdGV4dCgpKSkKIAogCitjbGFzcyBFdmVudENvbGxlY3RvckNoYXJyZWZzKEV2ZW50Q29sbGVjdG9yKToKKworICAgIGRlZiBnZXRfZXZlbnRzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ldmVudHMKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5mYWlsKCdUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aCBjb252ZXJ0X2NoYXJyZWZzPVRydWUnKQorCisgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZmFpbCgnVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGggY29udmVydF9jaGFycmVmcz1UcnVlJykKKworCiBjbGFzcyBUZXN0Q2FzZUJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6CkBAIC04NCwyNiArOTYsMzAgQEAKICAgICAgICAgcGFyc2VyLmNsb3NlKCkKICAgICAgICAgZXZlbnRzID0gcGFyc2VyLmdldF9ldmVudHMoKQogICAgICAgICBpZiBldmVudHMgIT0gZXhwZWN0ZWRfZXZlbnRzOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWNlaXZlZCBldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBldmVudHNcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXhwZWN0ZWRfZXZlbnRzKSArCisgICAgICAgICAgICBzZWxmLmZhaWwoInJlY2VpdmVkIGV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGV2ZW50cyIgKworICAgICAgICAgICAgICAgICAgICAgICJcblNvdXJjZTpcbiIgKyByZXByKHNvdXJjZSkgKworICAgICAgICAgICAgICAgICAgICAgICJcbkV4cGVjdGVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV4cGVjdGVkX2V2ZW50cykgKwogICAgICAgICAgICAgICAgICAgICAgICJcblJlY2VpdmVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV2ZW50cykpCiAKICAgICBkZWYgX3J1bl9jaGVja19leHRyYShzZWxmLCBzb3VyY2UsIGV2ZW50cyk6Ci0gICAgICAgIHNlbGYuX3J1bl9jaGVjayhzb3VyY2UsIGV2ZW50cywgRXZlbnRDb2xsZWN0b3JFeHRyYSgpKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soc291cmNlLCBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBFdmVudENvbGxlY3RvckV4dHJhKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpKQogCiAgICAgZGVmIF9wYXJzZV9lcnJvcihzZWxmLCBzb3VyY2UpOgogICAgICAgICBkZWYgcGFyc2Uoc291cmNlPXNvdXJjZSk6CiAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLmdldF9jb2xsZWN0b3IoKQogICAgICAgICAgICAgcGFyc2VyLmZlZWQoc291cmNlKQogICAgICAgICAgICAgcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3IsIHBhcnNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBhcnNlKCkKIAogCiBjbGFzcyBIVE1MUGFyc2VyU3RyaWN0VGVzdENhc2UoVGVzdENhc2VCYXNlKToKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWl0ZT1GYWxzZSk6Ci0gICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUsIGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX29ubHkoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPD9wcm9jZXNzaW5nIGluc3RydWN0aW9uPiIsIFsKQEAgLTMzOSw3ICszNTUsNyBAQAogICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHMsIFsoInN0YXJ0dGFnIiwgZWxlbWVudF9sb3dlciwgW10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRhdGEiLCBjb250ZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJlbmR0YWciLCBlbGVtZW50X2xvd2VyKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPUNvbGxlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1Db2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1GYWxzZSkpCiAKICAgICBkZWYgdGVzdF9jb21tZW50cyhzZWxmKToKICAgICAgICAgaHRtbCA9ICgiPCEtLSBJJ20gYSB2YWxpZCBjb21tZW50IC0tPiIKQEAgLTM2NywxMSArMzgzLDYwIEBACiAgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICdbaWYgbHRlIElFIDddPnByZXR0eT88IVtlbmRpZl0nKV0KICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQogCisgICAgZGVmIHRlc3RfY29udmVydF9jaGFycmVmcyhzZWxmKToKKyAgICAgICAgY29sbGVjdG9yID0gbGFtYmRhOiBFdmVudENvbGxlY3RvckNoYXJyZWZzKGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbGxlY3RvcigpLmNvbnZlcnRfY2hhcnJlZnMpCisgICAgICAgIGNoYXJyZWZzID0gWycmcXVvdDsnLCAnJiMzNDsnLCAnJiN4MjI7JywgJyZxdW90JywgJyYjMzQnLCAnJiN4MjInXQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRleHQvYXR0cmlidXRlcworICAgICAgICBleHBlY3RlZCA9IFsoJ3N0YXJ0dGFnJywgJ2EnLCBbKCdocmVmJywgJ2ZvbyJ6YXInKV0pLAorICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnYSJ6JyksICgnZW5kdGFnJywgJ2EnKV0KKyAgICAgICAgZm9yIGNoYXJyZWYgaW4gY2hhcnJlZnM6CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxhIGhyZWY9ImZvb3swfXphciI+YXswfXo8L2E+Jy5mb3JtYXQoY2hhcnJlZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKyAgICAgICAgIyBjaGVjayBjaGFycmVmcyBhdCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgdGV4dC9hdHRyaWJ1dGVzCisgICAgICAgIGV4cGVjdGVkID0gWygnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYScsIFsoJ3gnLCAnIicpLCAoJ3knLCAnIlgnKSwgKCd6JywgJ1giJyldKSwKKyAgICAgICAgICAgICAgICAgICAgKCdkYXRhJywgJyInKSwgKCdlbmR0YWcnLCAnYScpLCAoJ2RhdGEnLCAnIicpXQorICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnezB9PGEgeD0iezB9IiB5PSJ7MH1YIiB6PSJYezB9Ij4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3swfTwvYT57MH0nLmZvcm1hdChjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGluIDxzY3JpcHQ+LzxzdHlsZT4gZWxlbWVudHMKKyAgICAgICAgZm9yIGNoYXJyZWYgaW4gY2hhcnJlZnM6CisgICAgICAgICAgICB0ZXh0ID0gJ1gnLmpvaW4oW2NoYXJyZWZdKjMpCisgICAgICAgICAgICBleHBlY3RlZCA9IFsoJ2RhdGEnLCAnIicpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdzY3JpcHQnLCBbXSksICgnZGF0YScsIHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnc2NyaXB0JyksICgnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ3N0eWxlJywgW10pLCAoJ2RhdGEnLCB0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ3N0eWxlJyksICgnZGF0YScsICciJyldCisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soJ3sxfTxzY3JpcHQ+ezB9PC9zY3JpcHQ+ezF9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGU+ezB9PC9zdHlsZT57MX0nLmZvcm1hdCh0ZXh0LCBjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIHRydW5jYXRlZCBjaGFycmVmcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCisgICAgICAgIGh0bWwgPSAnJnF1byAmIyAmI3gnCisgICAgICAgIGZvciB4IGluIHJhbmdlKDEsIGxlbihodG1sKSk6CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbFs6eF0sIFsoJ2RhdGEnLCBodG1sWzp4XSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKyAgICAgICAgIyBjaGVjayBhIHN0cmluZyB3aXRoIG5vIGNoYXJyZWZzCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnbm8gY2hhcnJlZnMgaGVyZScsIFsoJ2RhdGEnLCAnbm8gY2hhcnJlZnMgaGVyZScpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKwogCiBjbGFzcyBIVE1MUGFyc2VyVG9sZXJhbnRUZXN0Q2FzZShIVE1MUGFyc2VyU3RyaWN0VGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9RmFsc2UpCisgICAgICAgIHJldHVybiBFdmVudENvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRpb25fd2FybmluZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3IoKSAgIyBjb252ZXJ0X2NoYXJyZWZzIG5vdCBwYXNzZWQgZXhwbGljaXRseQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhodG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBFdmVudENvbGxlY3RvcigpLmVycm9yKCd0ZXN0JykKIAogICAgIGRlZiB0ZXN0X3RvbGVyYW50X3BhcnNpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGh0bWwgPGh0bWw+dGU+Pnh0JmE8PGJjPC9hPjwvaHRtbD5cbicKQEAgLTU2NCwxNyArNjI5LDEyIEBACiAgICAgICAgIGZvciBodG1sLCBleHBlY3RlZCBpbiBkYXRhOgogICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQogCi0gICAgZGVmIHRlc3RfdW5lc2NhcGVfZnVuY3Rpb24oc2VsZik6CisgICAgZGVmIHRlc3RfdW5lc2NhcGVfbWV0aG9kKHNlbGYpOgorICAgICAgICBmcm9tIGh0bWwgaW1wb3J0IHVuZXNjYXBlCiAgICAgICAgIHAgPSBzZWxmLmdldF9jb2xsZWN0b3IoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjYmFkOycpLCcmI2JhZDsnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjMDAzODsnKSwnJicpCi0gICAgICAgICMgc2VlICMxMjg4OAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjMTIzOyAnICogMTA1MCksICd7ICcgKiAxMDUwKQotICAgICAgICAjIHNlZSAjMTUxNTYKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmRWFjdXRlcmljJkVhY3V0ZTtyaWMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJmFscGhhY2VudGF1cmkmYWxwaGE7Y2VudGF1cmknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICfDiXJpY8OJcmljJmFscGhhY2VudGF1cmnOsWNlbnRhdXJpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmY287JyksICcmY287JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzID0gJyZxdW90OyYjMzQ7JiN4MjI7JnF1b3QmIzM0JiN4MjImI2JhZDsnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUocyksIHVuZXNjYXBlKHMpKQogCiAgICAgZGVmIHRlc3RfYnJva2VuX2NvbW1lbnRzKHNlbGYpOgogICAgICAgICBodG1sID0gKCc8ISBub3QgcmVhbGx5IGEgY29tbWVudCA+JwpAQCAtNjMwLDcgKzY5MCw3IEBACiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpdGU9RmFsc2UpOgotICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlKQorICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlLCBjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfYXR0cl9zeW50YXgoc2VsZik6CiAgICAgICAgIG91dHB1dCA9IFsKQEAgLTY5MSw3ICs3NTEsNyBAQAogY2xhc3MgQXR0cmlidXRlc1RvbGVyYW50VGVzdENhc2UoQXR0cmlidXRlc1N0cmljdFRlc3RDYXNlKToKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgotICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PUZhbHNlKQorICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2F0dHJfZnVua3lfbmFtZXMyKHNlbGYpOgogICAgICAgICBzZWxmLl9ydW5fY2hlY2soCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKaW5kZXggYzhkZWQ5Mi4uMjJmNzMyOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQpAQCAtMjEsMTQgKzIxLDE4IEBACiBIT1NUID0gc3VwcG9ydC5IT1NUCiAKIGNsYXNzIEZha2VTb2NrZXQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGZpbGVjbGFzcz1pby5CeXRlc0lPKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgZmlsZWNsYXNzPWlvLkJ5dGVzSU8sIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lKToKICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXh0LCBzdHIpOgogICAgICAgICAgICAgdGV4dCA9IHRleHQuZW5jb2RlKCJhc2NpaSIpCiAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKICAgICAgICAgc2VsZi5maWxlY2xhc3MgPSBmaWxlY2xhc3MKICAgICAgICAgc2VsZi5kYXRhID0gYicnCisgICAgICAgIHNlbGYuc2VuZGFsbF9jYWxscyA9IDAKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CiAKICAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zZW5kYWxsX2NhbGxzICs9IDEKICAgICAgICAgc2VsZi5kYXRhICs9IGRhdGEKIAogICAgIGRlZiBtYWtlZmlsZShzZWxmLCBtb2RlLCBidWZzaXplPU5vbmUpOgpAQCAtMzYsNiArNDAsOSBAQAogICAgICAgICAgICAgcmFpc2UgY2xpZW50LlVuaW1wbGVtZW50ZWRGaWxlTW9kZSgpCiAgICAgICAgIHJldHVybiBzZWxmLmZpbGVjbGFzcyhzZWxmLnRleHQpCiAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKwogY2xhc3MgRVBpcGVTb2NrZXQoRmFrZVNvY2tldCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgcGlwZV90cmlnZ2VyKToKQEAgLTQ1LDcgKzUyLDcgQEAKIAogICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgogICAgICAgICBpZiBzZWxmLnBpcGVfdHJpZ2dlciBpbiBkYXRhOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVQSVBFLCAiZ290Y2hhIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRVBJUEUsICJnb3RjaGEiKQogICAgICAgICBzZWxmLmRhdGEgKz0gZGF0YQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtNjAwLDcgKzYwNyw3IEBACiAgICAgICAgICAgICBiIkNvbnRlbnQtTGVuZ3RoIikKICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbigiZXhhbXBsZS5jb20iKQogICAgICAgICBjb25uLnNvY2sgPSBzb2NrCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBjb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgImJvZHkiKSkKICAgICAgICAgcmVzcCA9IGNvbm4uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQwMSwgcmVzcC5zdGF0dXMpCkBAIC02NDYsNiArNjUzLDI4IEBACiAgICAgICAgIHJlc3AuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5jbG9zZWQpCiAKKyAgICBkZWYgdGVzdF9kZWxheWVkX2Fja19vcHQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5hZ2xlL2RlbGF5ZWRfYWNrIG9wdGltaXN0YWlvbiB3b3JrcyBjb3JyZWN0bHkuCisKKyAgICAgICAgIyBGb3Igc21hbGwgcGF5bG9hZHMsIGl0IHNob3VsZCBjb2FsZXNjZSB0aGUgYm9keSB3aXRoCisgICAgICAgICMgaGVhZGVycywgcmVzdWx0aW5nIGluIGEgc2luZ2xlIHNlbmRhbGwoKSBjYWxsCisgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBib2R5ID0gYid4JyAqIChjb25uLm1zcyAtIDEpCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvJywgYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnNlbmRhbGxfY2FsbHMsIDEpCisKKyAgICAgICAgIyBGb3IgbGFyZ2UgcGF5bG9hZHMsIGl0IHNob3VsZCBzZW5kIHRoZSBoZWFkZXJzIGFuZAorICAgICAgICAjIHRoZW4gdGhlIGJvZHksIHJlc3VsdGluZyBpbiBtb3JlIHRoYW4gb25lIHNlbmRhbGwoKQorICAgICAgICAjIGNhbGwKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGJvZHkgPSBiJ3gnICogY29ubi5tc3MKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc29jay5zZW5kYWxsX2NhbGxzLCAxKQorCiBjbGFzcyBPZmZsaW5lVGVzdChUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVzcG9uc2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsaWVudC5yZXNwb25zZXNbY2xpZW50Lk5PVF9GT1VORF0sICJOb3QgRm91bmQiKQpAQCAtNzM2LDcgKzc2NSw3IEBACiAKICAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgY2VydGZpbGUpOgogICAgICAgICBmcm9tIHRlc3Quc3NsX3NlcnZlcnMgaW1wb3J0IG1ha2VfaHR0cHNfc2VydmVyCi0gICAgICAgIHJldHVybiBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZSkKKyAgICAgICAgcmV0dXJuIG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPWNlcnRmaWxlKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyBzaW1wbGUgdGVzdCB0byBjaGVjayBpdCdzIHN0b3JpbmcgdGhlIHRpbWVvdXQKQEAgLTk0NiwxMCArOTc1LDUxIEBACiAgICAgICAgIGhlYWRlciA9IHNlbGYucmVzcC5nZXRoZWFkZXIoJ05vLVN1Y2gtSGVhZGVyJyxkZWZhdWx0PTQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlciwgNDIpCiAKK2NsYXNzIFR1bm5lbFRlc3RzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHJlc3BvbnNlX3RleHQgPSAoCisgICAgICAgICAgICAnSFRUUC8xLjAgMjAwIE9LXHJcblxyXG4nICMgUmVwbHkgdG8gQ09OTkVDVAorICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nICMgUmVwbHkgdG8gSEVBRAorICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiA0MlxyXG5cclxuJworICAgICAgICApCisKKyAgICAgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MsIHRpbWVvdXQ9Tm9uZSwgc291cmNlX2FkZHJlc3M9Tm9uZSk6CisgICAgICAgICAgICByZXR1cm4gRmFrZVNvY2tldChyZXNwb25zZV90ZXh0LCBob3N0PWFkZHJlc3NbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0PWFkZHJlc3NbMV0pCisKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbigncHJveHkuY29tJykKKyAgICAgICAgY29ubi5fY3JlYXRlX2Nvbm5lY3Rpb24gPSBjcmVhdGVfY29ubmVjdGlvbgorCisgICAgICAgICMgT25jZSBjb25uZWN0ZWQsIHdlIHNob3VsZG4ndCBiZSBhYmxlIHRvIHR1bm5lbCBhbnltb3JlCisgICAgICAgIGNvbm4uY29ubmVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29ubi5zZXRfdHVubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzdGluYXRpb24uY29tJykKKworICAgICAgICAjIEJ1dCBpZiB3ZSBjbG9zZSB0aGUgY29ubmVjdGlvbiwgd2UncmUgZ29vZAorICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgY29ubi5zZXRfdHVubmVsKCdkZXN0aW5hdGlvbi5jb20nKQorICAgICAgICBjb25uLnJlcXVlc3QoJ0hFQUQnLCAnLycsICcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5zb2NrLmhvc3QsICdwcm94eS5jb20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uc29jay5wb3J0LCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInQ09OTkVDVCBkZXN0aW5hdGlvbi5jb20nIGluIGNvbm4uc29jay5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYidIb3N0OiBkZXN0aW5hdGlvbi5jb20nIGluIGNvbm4uc29jay5kYXRhKQorCisgICAgICAgICMgVGhpcyB0ZXN0IHNob3VsZCBiZSByZW1vdmVkIHdoZW4gQ09OTkVDVCBnZXRzIHRoZSBIVFRQLzEuMSBibGVzc2luZworICAgICAgICBzZWxmLmFzc2VydFRydWUoYidIb3N0OiBwcm94eS5jb20nIG5vdCBpbiBjb25uLnNvY2suZGF0YSkKKworICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQVVQnLCAnLycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uc29jay5ob3N0LCAncHJveHkuY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnNvY2sucG9ydCwgODApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ0NPTk5FQ1QgZGVzdGluYXRpb24uY29tJyBpbiBjb25uLnNvY2suZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInSG9zdDogZGVzdGluYXRpb24uY29tJyBpbiBjb25uLnNvY2suZGF0YSkKKwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEhlYWRlclRlc3RzLCBPZmZsaW5lVGVzdCwgQmFzaWNUZXN0LCBUaW1lb3V0VGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU1Rlc3QsIFJlcXVlc3RCb2R5VGVzdCwgU291cmNlQWRkcmVzc1Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFJlc3BvbnNlVGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQUmVzcG9uc2VUZXN0LCBUdW5uZWxUZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKaW5kZXggYmU1ZDhkZS4uZjE2NDA1NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CkBAIC0xNCw2ICsxNCw3IEBACiBpbXBvcnQgYmFzZTY0CiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdXJsbGliLnBhcnNlCitpbXBvcnQgaHRtbAogaW1wb3J0IGh0dHAuY2xpZW50CiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KQEAgLTkyLDYgKzkzLDEzIEBACiAgICAgICAgIGRlZiBkb19LRVlFUlJPUihzZWxmKToKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig5OTkpCiAKKyAgICAgICAgZGVmIGRvX05PVEZPVU5EKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCkKKworICAgICAgICBkZWYgZG9fRVhQTEFJTkVSUk9SKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDk5OSwgIlNob3J0IE1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgbG9uZyBcbiBleHBsYWluYXRpb24iKQorCiAgICAgICAgIGRlZiBkb19DVVNUT00oc2VsZik6CiAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoOTk5KQogICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpCkBAIC0xMTgsNyArMTI2LDcgQEAKIAogICAgIGRlZiB0ZXN0X3JlcXVlc3RfbGluZV90cmltbWluZyhzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdIVFRQLzEuMVxuJwotICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ1hZWkJPR1VTJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKQEAgLTE0NSw4ICsxNTMsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9uZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYSB2YWxpZCBtZXRob2QgaXMgcmVqZWN0ZWQgd2hlbiBub3QgSFRUUC8xLngKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICcnCi0gICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ1BVVCcsICcvJykKKyAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnQ1VTVE9NJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKQEAgLTIwMyw2ICsyMTIsMTIgQEAKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDk5OSkKIAorICAgIGRlZiB0ZXN0X3JldHVybl9leHBsYWluX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdFWFBMQUlORVJST1InLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSkpCisKICAgICBkZWYgdGVzdF9sYXRpbjFfaGVhZGVyKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdMQVRJTk9ORUhFQURFUicsICcvJywgaGVhZGVycz17CiAgICAgICAgICAgICAnWC1TcGVjaWFsLUluY29taW5nJzogICAgICAgJ8OEcmdlciBtaXQgVW5pY29kZScKQEAgLTIxMSw2ICsyMjYsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0aGVhZGVyKCdYLVNwZWNpYWwnKSwgJ0TDpG5nZXJvdXMgTWluZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnJlYWQoKSwgJ8OEcmdlciBtaXQgVW5pY29kZScuZW5jb2RlKCd1dGYtOCcpKQogCisgICAgZGVmIHRlc3RfZXJyb3JfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2MDg4OiBzdGFuZGFyZCBlcnJvciByZXNwb25zZXMgc2hvdWxkIGhhdmUgYSBjb250ZW50LWxlbmd0aAorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdOT1RGT1VORCcsICcvJykKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwNCkKKyAgICAgICAgZGF0YSA9IHJlcy5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSksIGxlbihkYXRhKSkKKwogCiBjbGFzcyBTaW1wbGVIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKICAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKQEAgLTI0NCw2ICsyNjcsMzIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVzcG9uc2UucmVhc29uKQogICAgICAgICBpZiBkYXRhOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBib2R5KQorICAgICAgICByZXR1cm4gYm9keQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZWQgc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUnKQorICAgIGRlZiB0ZXN0X3VuZGVjb2RhYmxlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBlbmMgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5mc2RlY29kZShzdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRSkgKyAnLnR4dCcKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsIGZpbGVuYW1lKSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy8nKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAjIE9uIE1hYyBPUyB0aGUgSEZTKyBmaWxlc3lzdGVtIHJlcGxhY2VzIGJ5dGVzIHRoYXQgYXJlbid0IHZhbGlkCisgICAgICAgICAgICAjIFVURi04IGludG8gYSBwZXJjZW50LWVuY29kZWQgdmFsdWUuCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKHNlbGYudGVtcGRpcik6CisgICAgICAgICAgICAgICAgaWYgbmFtZSAhPSAndGVzdCc6ICMgSWdub3JlIGEgZmlsZW5hbWUgY3JlYXRlZCBpbiBzZXRVcCgpLgorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgYm9keSA9IHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCkKKyAgICAgICAgcXVvdGVkbmFtZSA9IHVybGxpYi5wYXJzZS5xdW90ZShmaWxlbmFtZSwgZXJyb3JzPSdzdXJyb2dhdGVwYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2hyZWY9IiVzIicgJSBxdW90ZWRuYW1lKQorICAgICAgICAgICAgICAgICAgICAgIC5lbmNvZGUoZW5jLCAnc3Vycm9nYXRlZXNjYXBlJyksIGJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCc+JXM8JyAlIGh0bWwuZXNjYXBlKGZpbGVuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAuZW5jb2RlKGVuYywgJ3N1cnJvZ2F0ZWVzY2FwZScpLCBib2R5KQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvJyArIHF1b3RlZG5hbWUpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFKQogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgogICAgICAgICAjY29uc3RydWN0cyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIEhUVFBTZXJ2ZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaWRsZS5weSBiL0xpYi90ZXN0L3Rlc3RfaWRsZS5weQppbmRleCA3NzcwZWU1Li4xNDFlODllIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lkbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pZGxlLnB5CkBAIC0xLDMyICsxLDE2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUsIHVzZV9yZXNvdXJjZXMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfbW9kdWxlCiAKICMgU2tpcCB0ZXN0IGlmIF90aHJlYWQgb3IgX3RraW50ZXIgd2Fzbid0IGJ1aWx0IG9yIGlkbGVsaWIgd2FzIGRlbGV0ZWQuCiBpbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKSAgIyBpbXBvcnRlZCBieSBQeVNoZWxsLCBpbXBvcnRzIF90aHJlYWQKIHRrID0gaW1wb3J0X21vZHVsZSgndGtpbnRlcicpICAjIGltcG9ydHMgX3RraW50ZXIKIGlkbGV0ZXN0ID0gaW1wb3J0X21vZHVsZSgnaWRsZWxpYi5pZGxlX3Rlc3QnKQogCi0jIElmIGJ1aWxkYm90IGltcHJvcGVybHkgc2V0cyBndWkgcmVzb3VyY2UgKCMxODM2NSwgIzE4NDQxKSwgcmVtb3ZlIGl0Ci0jIHNvIHJlcXVpcmVzKCdndWknKSB0ZXN0cyBhcmUgc2tpcHBlZCB3aGlsZSBub24tZ3VpIHRlc3RzIHN0aWxsIHJ1bi4KLSMgSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggTWFjcywgc2VlICMxODQ0MSwgbXNnIDE5MzgwNQotaWYgdXNlX3Jlc291cmNlcyBhbmQgJ2d1aScgaW4gdXNlX3Jlc291cmNlczoKLSAgICB0cnk6Ci0gICAgICAgIHJvb3QgPSB0ay5UaygpCi0gICAgICAgIHJvb3QuZGVzdHJveSgpCi0gICAgICAgIGRlbCByb290Ci0gICAgZXhjZXB0IHRrLlRjbEVycm9yOgotICAgICAgICB3aGlsZSAnZ3VpJyBpbiB1c2VfcmVzb3VyY2VzOgotICAgICAgICAgICAgdXNlX3Jlc291cmNlcy5yZW1vdmUoJ2d1aScpCi0KICMgV2l0aG91dCB0ZXN0X21haW4gcHJlc2VudCwgcmVncnRlc3QucnVudGVzdF9pbm5lciAobGluZTEyMTkpIGNhbGxzCiAjIHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tTW9kdWxlKHRoaXNfbW9kdWxlKSB3aGljaCBjYWxscwogIyBsb2FkX3Rlc3RzKCkgaWYgaXQgZmluZHMgaXQuIChVbml0dGVzdC5tYWluIGRvZXMgdGhlIHNhbWUuKQogbG9hZF90ZXN0cyA9IGlkbGV0ZXN0LmxvYWRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjIFVudGlsIHVuaXR0ZXN0IHN1cHBvcnRzIHJlc291cmNlcywgd2UgZW11bGF0ZSByZWdydGVzdCdzIC11Z3VpCi0gICAgIyBzbyBsb2FkZWQgdGVzdHMgcnVuIHRoZSBzYW1lIGFzIGlmIHRleHR1YWxseSBwcmVzZW50IGhlcmUuCi0gICAgIyBJZiBhbnkgSWRsZSB0ZXN0IGV2ZXIgbmVlZHMgYW5vdGhlciByZXNvdXJjZSwgYWRkIGl0IHRvIHRoZSBsaXN0LgotICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10gICMgdXNlX3Jlc291cmNlcyBpcyBpbml0aWFsbHkgTm9uZQogICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKaW5kZXggN2M5YWZkOS4uYTZkODNkNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQpAQCAtMTgsOCArMTgsMTIgQEAKICAgICBpbXBvcnQgc3NsCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgc3NsID0gTm9uZQorICAgIEhBU19TTkkgPSBGYWxzZQorZWxzZToKKyAgICBmcm9tIHNzbCBpbXBvcnQgSEFTX1NOSQogCiBDRVJURklMRSA9IE5vbmUKK0NBRklMRSA9IE5vbmUKIAogCiBjbGFzcyBUZXN0SW1hcGxpYih1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMjUsNyArMTI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgTmFrZWQgc29ja2V0cyByZXR1cm4gZW1wdHkgc3RyaW5ncy4uCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgbGluZSArPSBwYXJ0Ci0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgLi5idXQgU1NMU29ja2V0cyByYWlzZSBleGNlcHRpb25zLgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKGInXHJcbicpOgpAQCAtMzQ3LDYgKzM1MSwyNiBAQAogICAgIHNlcnZlcl9jbGFzcyA9IFNlY3VyZVRDUFNlcnZlcgogICAgIGltYXBfY2xhc3MgPSBJTUFQNF9TU0wKIAorICAgIEByZWFwX3RocmVhZHMKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfU05JLCAnTm8gU05JIHN1cHBvcnQgaW4gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3Rfc3NsX3ZlcmlmaWVkKHNlbGYpOgorICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbF9jb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsX2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHNzbF9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDQUZJTEUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lICcxMjcuMC4wLjEnIGRvZXNuJ3QgbWF0Y2ggJ2xvY2FsaG9zdCciKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKFNpbXBsZUlNQVBIYW5kbGVyKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgY2xpZW50ID0gc2VsZi5pbWFwX2NsYXNzKCpzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0PXNzbF9jb250ZXh0KQorICAgICAgICAgICAgICAgIGNsaWVudC5zaHV0ZG93bigpCisKKyAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9zZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgIGNsaWVudCA9IHNlbGYuaW1hcF9jbGFzcygibG9jYWxob3N0Iiwgc2VydmVyLnNlcnZlcl9hZGRyZXNzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0PXNzbF9jb250ZXh0KQorICAgICAgICAgICAgY2xpZW50LnNodXRkb3duKCkKKwogCiBjbGFzcyBSZW1vdGVJTUFQVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgaG9zdCA9ICdjeXJ1cy5hbmRyZXcuY211LmVkdScKQEAgLTQ1OSwxMSArNDgzLDE1IEBACiAKICAgICBpZiBzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKToKICAgICAgICAgaWYgc3NsOgotICAgICAgICAgICAgZ2xvYmFsIENFUlRGSUxFCisgICAgICAgICAgICBnbG9iYWwgQ0VSVEZJTEUsIENBRklMRQogICAgICAgICAgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5Y2VydC5wZW0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleWNlcnQzLnBlbSIpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0VSVEZJTEUpOgogICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlcyEiKQorICAgICAgICAgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5Y2FjZXJ0LnBlbSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0FGSUxFKToKKyAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgQ0EgZmlsZSEiKQogICAgICAgICB0ZXN0cy5leHRlbmQoWwogICAgICAgICAgICAgVGhyZWFkZWROZXR3b3JrZWRUZXN0cywgVGhyZWFkZWROZXR3b3JrZWRUZXN0c1NTTCwKICAgICAgICAgICAgIFJlbW90ZUlNQVBUZXN0LCBSZW1vdGVJTUFQX1NTTFRlc3QsIFJlbW90ZUlNQVBfU1RBUlRUTFNUZXN0LApAQCAtNDczLDUgKzUwMSw0IEBACiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ25ldHdvcmsnXQogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQppbmRleCA3MWMyMjBmLi4wMjRmNDM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQpAQCAtMSwxNCArMSwyOSBAQAotaW1wb3J0IGltcAordHJ5OgorICAgIGltcG9ydCBfdGhyZWFkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3RocmVhZCA9IE5vbmUKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliIGltcG9ydCB1dGlsCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncword2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICBpbXBvcnQgaW1wCiAKKworZGVmIHJlcXVpcmVzX2xvYWRfZHluYW1pYyhtZXRoKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gc2tpcCBhIHRlc3QgaWYgbm90IHJ1bm5pbmcgdW5kZXIgQ1B5dGhvbiBvciBsYWNraW5nCisgICAgaW1wLmxvYWRfZHluYW1pYygpLiIiIgorICAgIG1ldGggPSBzdXBwb3J0LmNweXRob25fb25seShtZXRoKQorICAgIHJldHVybiB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykobWV0aCkKKworCitAdW5pdHRlc3Quc2tpcElmKF90aHJlYWQgaXMgTm9uZSwgJ190aHJlYWQgbW9kdWxlIGlzIHJlcXVpcmVkJykKIGNsYXNzIExvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJWZXJ5IGJhc2ljIHRlc3Qgb2YgaW1wb3J0IGxvY2sgZnVuY3Rpb25zLiIiIgpAQCAtMTUwLDcgKzE2NSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoZmlsZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZW5hbWVbOi0zXS5lbmRzd2l0aCh0ZW1wX21vZF9uYW1lKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bMF0sICcucHknKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sxXSwgJ1UnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sxXSwgJ3InKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1syXSwgaW1wLlBZX1NPVVJDRSkKIAogICAgICAgICAgICAgICAgIG1vZCA9IGltcC5sb2FkX21vZHVsZSh0ZW1wX21vZF9uYW1lLCBmaWxlLCBmaWxlbmFtZSwgaW5mbykKQEAgLTIwOCw5ICsyMjMsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcmlnX3BhdGgsIG5ld19vcy5wYXRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvcmlnX2dldGVudiwgbmV3X29zLmdldGVudikKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCi0gICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfaXNzdWUxNTgyOF9sb2FkX2V4dGVuc2lvbnMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTU4MjggcGlja2VkIHVwIHRoYXQgdGhlIGFkYXB0ZXIgYmV0d2VlbiB0aGUgb2xkIGltcCBBUEkKICAgICAgICAgIyBhbmQgaW1wb3J0bGliIGNvdWxkbid0IGhhbmRsZSBDIGV4dGVuc2lvbnMKQEAgLTIyMiw2ICsyMzUsMjIgQEAKICAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKGV4YW1wbGUsICp4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5fX25hbWVfXywgZXhhbXBsZSkKIAorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKKyAgICBkZWYgdGVzdF9pc3N1ZTE2NDIxX211bHRpcGxlX21vZHVsZXNfaW5fb25lX2RsbChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNjQyMTogbG9hZGluZyBzZXZlcmFsIG1vZHVsZXMgZnJvbSB0aGUgc2FtZSBjb21waWxlZCBmaWxlIGZhaWxzCisgICAgICAgIG0gPSAnX3Rlc3RpbXBvcnRtdWx0aXBsZScKKyAgICAgICAgZmlsZW9iaiwgcGF0aG5hbWUsIGRlc2NyaXB0aW9uID0gaW1wLmZpbmRfbW9kdWxlKG0pCisgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICBtb2QwID0gaW1wLmxvYWRfZHluYW1pYyhtLCBwYXRobmFtZSkKKyAgICAgICAgbW9kMSA9IGltcC5sb2FkX2R5bmFtaWMoJ190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vJywgcGF0aG5hbWUpCisgICAgICAgIG1vZDIgPSBpbXAubG9hZF9keW5hbWljKCdfdGVzdGltcG9ydG11bHRpcGxlX2JhcicsIHBhdGhuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZDAuX19uYW1lX18sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kMS5fX25hbWVfXywgJ190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QyLl9fbmFtZV9fLCAnX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXInKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGltcC5sb2FkX2R5bmFtaWMoJ25vbmV4aXN0ZW50JywgcGF0aG5hbWUpCisKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfbG9hZF9keW5hbWljX0ltcG9ydEVycm9yX3BhdGgoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE1NTk1NDkgYWRkZWQgYG5hbWVgIGFuZCBgcGF0aGAgYXR0cmlidXRlcyB0byBJbXBvcnRFcnJvcgogICAgICAgICAjIGluIG9yZGVyIHRvIHByb3ZpZGUgYmV0dGVyIGRldGFpbC4gSXNzdWUgIzEwODU0IGltcGxlbWVudGVkIHRob3NlCkBAIC0yMzMsMTQgKzI2MiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgsIGVyci5leGNlcHRpb24ucGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBlcnIuZXhjZXB0aW9uLm5hbWUpCiAKLSAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKGltcCwgJ2xvYWRfZHluYW1pYycpLAotICAgICAgICAgICAgICAgICAgICAgJ2ltcC5sb2FkX2R5bmFtaWMoKSByZXF1aXJlZCcpCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYwogICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlX2V4dGVuc2lvbl9maWxlX2lzX05vbmUoc2VsZik6CiAgICAgICAgICMgV2hlbiBsb2FkaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgYW5kIHRoZSBmaWxlIGlzIE5vbmUsIG9wZW4gb25lCiAgICAgICAgICMgb24gdGhlIGJlaGFsZiBvZiBpbXAubG9hZF9keW5hbWljKCkuCiAgICAgICAgICMgSXNzdWUgIzE1OTAyCi0gICAgICAgIG5hbWUgPSAnX2hlYXBxJworICAgICAgICBuYW1lID0gJ190ZXN0aW1wb3J0bXVsdGlwbGUnCiAgICAgICAgIGZvdW5kID0gaW1wLmZpbmRfbW9kdWxlKG5hbWUpCiAgICAgICAgIGlmIGZvdW5kWzBdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZm91bmRbMF0uY2xvc2UoKQpAQCAtMjQ4LDYgKzI3NSwxNSBAQAogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiZm91bmQgbW9kdWxlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgQyBleHRlbnNpb24iKQogICAgICAgICBpbXAubG9hZF9tb2R1bGUobmFtZSwgTm9uZSwgKmZvdW5kWzE6XSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsCisgICAgICAgICJ0ZXN0IG1lYW5pbmdmdWwgb25seSB3aGVuIHdyaXRpbmcgYnl0ZWNvZGUiKQorICAgIGRlZiB0ZXN0X2J1Zzc3MzIoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCgpOgorICAgICAgICAgICAgc291cmNlID0gc3VwcG9ydC5URVNURk4gKyAnLnB5JworICAgICAgICAgICAgb3MubWtkaXIoc291cmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgJ15ObyBtb2R1bGUnLAorICAgICAgICAgICAgICAgIGltcC5maW5kX21vZHVsZSwgc3VwcG9ydC5URVNURk4sIFsiLiJdKQorCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfY2FsbHNfdG9fZ2V0X2RhdGEoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE4NzU1OiBtYWtlIHN1cmUgbXVsdGlwbGUgY2FsbHMgdG8gZ2V0X2RhdGEoKSBjYW4gc3VjY2VlZC4KICAgICAgICAgbG9hZGVyID0gaW1wLl9Mb2FkU291cmNlQ29tcGF0aWJpbGl0eSgnaW1wJywgaW1wLl9fZmlsZV9fLApAQCAtMjkzLDIyICszMjksNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdodG1sJyk6CiAgICAgICAgICAgICBpbXAucmVsb2FkKHBhcnNlcikKIAotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXBsYWNlZChzZWxmKToKLSAgICAgICAgIyBzZWUgIzE4Njk4Ci0gICAgICAgIGRlZiBjb2RlKCk6Ci0gICAgICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ3RvcF9sZXZlbCcpCi0gICAgICAgICAgICBtb2R1bGUuc3BhbSA9IDMKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXSA9IG1vZHVsZQotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3RvcF9sZXZlbCc6IGNvZGV9KQotICAgICAgICB3aXRoIG1vY2s6Ci0gICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQotICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gaW1wLnJlbG9hZChtb2R1bGUpCi0gICAgICAgICAgICAgICAgYWN0dWFsID0gc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwuc3BhbSwgMykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbG9hZGVkLnNwYW0sIDMpCi0KIAogY2xhc3MgUEVQMzE0N1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0cyBvZiBQRVAgMzE0Ny4iIiIKQEAgLTQ2MSwyMCArNDgxLDUgQEAKICAgICAgICAgICAgIG9zLnJtZGlyKG5hbWUpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gWwotICAgICAgICBJbXBvcnRUZXN0cywKLSAgICAgICAgUEVQMzE0N1Rlc3RzLAotICAgICAgICBSZWxvYWRUZXN0cywKLSAgICAgICAgTnVsbEltcG9ydGVyVGVzdHMsCi0gICAgICAgIF0KLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBfdGhyZWFkCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgdGVzdHMuYXBwZW5kKExvY2tUZXN0cykKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKaW5kZXggZGYwOGU2YS4uNzgxYTE1OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKQEAgLTEsOSArMSw4IEBACiAjIFdlIGltcG9ydCBpbXBvcnRsaWIgKkFTQVAqIGluIG9yZGVyIHRvIHRlc3QgIzE1Mzg2CiBpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IF9nZXRfc291cmNlZmlsZQogaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgaW1wCi1mcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIuaW1wb3J0XyBpbXBvcnQgdXRpbCBhcyBpbXBvcnRsaWJfdXRpbAogaW1wb3J0IG1hcnNoYWwKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCkBAIC0yMiw3ICsyMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKAogICAgIEVudmlyb25tZW50VmFyR3VhcmQsIFRFU1RGTiwgY2hlY2tfd2FybmluZ3MsIGZvcmdldCwgaXNfanl0aG9uLAogICAgIG1ha2VfbGVnYWN5X3B5Yywgcm10cmVlLCBydW5fdW5pdHRlc3QsIHN3YXBfYXR0ciwgc3dhcF9pdGVtLCB0ZW1wX3VtYXNrLAotICAgIHVubGluaywgdW5sb2FkLCBjcmVhdGVfZW1wdHlfZmlsZSwgY3B5dGhvbl9vbmx5KQorICAgIHVubGluaywgdW5sb2FkLCBjcmVhdGVfZW1wdHlfZmlsZSwgY3B5dGhvbl9vbmx5LCBURVNURk5fVU5FTkNPREFCTEUpCiBmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKIAogCkBAIC03MCw4ICs2OSw2IEBACiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB1bmxvYWQoVEVTVEZOKQogCi0gICAgc2V0VXAgPSB0ZWFyRG93bgotCiAgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdml0eShzZWxmKToKICAgICAgICAgIyBCcmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhhdCBpbXBvcnQgaXMgY2FzZS1zZW5zaXRpdmU6ICBpZiB3ZSBnb3QKICAgICAgICAgIyB0aGlzIGZhciwgd2Uga25vdyBmb3Igc3VyZSB0aGF0ICJyYW5kb20iIGV4aXN0cy4KQEAgLTEyOSwxNiArMTI2LDYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQogCi0gICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQotICAgIGRlZiB0ZXN0X2J1Zzc3MzIoc2VsZik6Ci0gICAgICAgIHNvdXJjZSA9IFRFU1RGTiArICcucHknCi0gICAgICAgIG9zLm1rZGlyKHNvdXJjZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgJ15ObyBtb2R1bGUnLAotICAgICAgICAgICAgICAgIGltcC5maW5kX21vZHVsZSwgVEVTVEZOLCBbIi4iXSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnJtZGlyKHNvdXJjZSkKLQogICAgIGRlZiB0ZXN0X21vZHVsZV93aXRoX2xhcmdlX3N0YWNrKHNlbGYsIG1vZHVsZT0nbG9uZ2xpc3QnKToKICAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU1NjE4NTguCiAgICAgICAgIGZpbGVuYW1lID0gbW9kdWxlICsgJy5weScKQEAgLTE2MSwxNiArMTQ4LDI0IEBACiAgICAgICAgIHN5cy5wYXRoLmFwcGVuZCgnJykKICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKIAorICAgICAgICBuYW1lc3BhY2UgPSB7fQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtYWtlX2xlZ2FjeV9weWMoZmlsZW5hbWUpCiAgICAgICAgICAgICAjIFRoaXMgdXNlZCB0byBjcmFzaC4KLSAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgbW9kdWxlKQorICAgICAgICAgICAgZXhlYygnaW1wb3J0ICcgKyBtb2R1bGUsIE5vbmUsIG5hbWVzcGFjZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICMgQ2xlYW51cC4KICAgICAgICAgICAgIGRlbCBzeXMucGF0aFstMV0KICAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICdjJykKICAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICdvJykKIAorICAgICAgICAgICAgIyBSZW1vdmUgcmVmZXJlbmNlcyB0byB0aGUgbW9kdWxlICh1bmxvYWQgdGhlIG1vZHVsZSkKKyAgICAgICAgICAgIG5hbWVzcGFjZS5jbGVhcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF9mYWlsaW5nX2ltcG9ydF9zdGlja3Moc2VsZik6CiAgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArICIucHkiCiAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICJ3IikgYXMgZjoKQEAgLTE5NSwxMiArMTkwLDEyIEBACiAgICAgICAgICMgaW1wb3J0IHgueS56IGJpbmRzIHggaW4gdGhlIGN1cnJlbnQgbmFtZXNwYWNlCiAgICAgICAgIGltcG9ydCB0ZXN0IGFzIHgKICAgICAgICAgaW1wb3J0IHRlc3Quc3VwcG9ydAotICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB0ZXN0LCB4Ll9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydElzKHgsIHRlc3QsIHguX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHRlc3Quc3VwcG9ydCwgIl9fZmlsZV9fIikpCiAKICAgICAgICAgIyBpbXBvcnQgeC55LnogYXMgdyBiaW5kcyB6IGFzIHcKICAgICAgICAgaW1wb3J0IHRlc3Quc3VwcG9ydCBhcyB5Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHRlc3Quc3VwcG9ydCwgeS5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh5LCB0ZXN0LnN1cHBvcnQsIHkuX19uYW1lX18pCiAKICAgICBkZWYgdGVzdF9mYWlsaW5nX3JlbG9hZChzZWxmKToKICAgICAgICAgIyBBIGZhaWxpbmcgcmVsb2FkIHNob3VsZCBsZWF2ZSB0aGUgbW9kdWxlIG9iamVjdCBpbiBzeXMubW9kdWxlcy4KQEAgLTIyNSwxMCArMjIwLDEwIEBACiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgiYSA9IDEwXG5iPTIwLy8wXG4iKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgaW1wLnJlbG9hZCwgbW9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGltcG9ydGxpYi5yZWxvYWQsIG1vZCkKICAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KFRFU1RGTikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kLCBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1vZCwgImV4cGVjdGVkIG1vZHVsZSB0byBiZSBpbiBzeXMubW9kdWxlcyIpCiAKICAgICAgICAgICAgICMgV2Ugc2hvdWxkIGhhdmUgcmVwbGFjZWQgYSB3LyAxMCwgYnV0IHRoZSBvbGQgYiB2YWx1ZSBzaG91bGQKICAgICAgICAgICAgICMgc3RpY2suCkBAIC0yODAsNyArMjc1LDcgQEAKICAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgIGltcG9ydCBpbXAKKyAgICAgICAgICAgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKICAgICAgICAgICAgIHN5cy5hcmd2Lmluc2VydCgwLCBDKCkpCiAgICAgICAgICAgICAiIiIpKQogICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sodGVzdGZuKQpAQCAtMjkxLDcgKzI4Niw3IEBACiAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArICIucHkiCi0gICAgICAgICAgICBjb21waWxlZCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCisgICAgICAgICAgICBjb21waWxlZCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICB0cnk6CkBAIC0zMjIsNiArMzE3LDE0IEBACiAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEluKGIiSW1wb3J0RXJyb3IiLCBzdGRvdXQpCiAKKyAgICBkZWYgdGVzdF9mcm9tX2ltcG9ydF9tZXNzYWdlX2Zvcl9ub25leGlzdGVudF9tb2R1bGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgIl5ObyBtb2R1bGUgbmFtZWQgJ2JvZ3VzJyIpOgorICAgICAgICAgICAgZnJvbSBib2d1cyBpbXBvcnQgZm9vCisKKyAgICBkZWYgdGVzdF9mcm9tX2ltcG9ydF9tZXNzYWdlX2Zvcl9leGlzdGluZ19tb2R1bGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgIl5jYW5ub3QgaW1wb3J0IG5hbWUgJ2JvZ3VzJyIpOgorICAgICAgICAgICAgZnJvbSByZSBpbXBvcnQgYm9ndXMKKwogCiBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCiBjbGFzcyBGaWxlUGVybWlzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTMzMiw3ICszMzUsNyBAQAogICAgIGRlZiB0ZXN0X2NyZWF0aW9uX21vZGUoc2VsZik6CiAgICAgICAgIG1hc2sgPSAwbzAyMgogICAgICAgICB3aXRoIHRlbXBfdW1hc2sobWFzayksIF9yZWFkeV90b19pbXBvcnQoKSBhcyAobmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQogICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9faW1wb3J0X18gZGlkIG5vdCByZXN1bHQgaW4gY3JlYXRpb24gb2YgIgpAQCAtMzUwLDcgKzM1Myw3IEBACiAgICAgICAgICMgcGVybWlzc2lvbnMgb2YgLnB5YyBzaG91bGQgbWF0Y2ggdGhvc2Ugb2YgLnB5LCByZWdhcmRsZXNzIG9mIG1hc2sKICAgICAgICAgbW9kZSA9IDBvNjAwCiAgICAgICAgIHdpdGggdGVtcF91bWFzaygwbzAyMiksIF9yZWFkeV90b19pbXBvcnQoKSBhcyAobmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQogICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkKICAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjYWNoZWRfcGF0aCk6CkBAIC0zNjUsNyArMzY4LDcgQEAKICAgICBkZWYgdGVzdF9jYWNoZWRfcmVhZG9ubHkoc2VsZik6CiAgICAgICAgIG1vZGUgPSAwbzQwMAogICAgICAgICB3aXRoIHRlbXBfdW1hc2soMG8wMjIpLCBfcmVhZHlfdG9faW1wb3J0KCkgYXMgKG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKICAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIG1vZGUpCiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgpAQCAtNDA1LDcgKzQwOCw3IEBACiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfb25seSA9IHBhdGggKyAiYyIKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfb25seSA9IHBhdGggKyAibyIKLSAgICAgICAgICAgIG9zLnJlbmFtZShpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCksIGJ5dGVjb2RlX29ubHkpCisgICAgICAgICAgICBvcy5yZW5hbWUoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCksIGJ5dGVjb2RlX29ubHkpCiAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLngsICdyZXdyaXR0ZW4nKQogCkBAIC00MjcsNyArNDMwLDcgQEAKICIiIgogICAgIGRpcl9uYW1lID0gb3MucGF0aC5hYnNwYXRoKFRFU1RGTikKICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oZGlyX25hbWUsIG1vZHVsZV9uYW1lKSArIG9zLmV4dHNlcCArICJweSIKLSAgICBjb21waWxlZF9uYW1lID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfbmFtZSkKKyAgICBjb21waWxlZF9uYW1lID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9uYW1lKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KQEAgLTQ4OCw3ICs0OTEsNyBAQAogICAgICAgICAgICAgaGVhZGVyID0gZi5yZWFkKDEyKQogICAgICAgICAgICAgY29kZSA9IG1hcnNoYWwubG9hZChmKQogICAgICAgICBjb25zdGFudHMgPSBsaXN0KGNvZGUuY29fY29uc3RzKQotICAgICAgICBmb3JlaWduX2NvZGUgPSB0ZXN0X21haW4uX19jb2RlX18KKyAgICAgICAgZm9yZWlnbl9jb2RlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUuX19jb2RlX18KICAgICAgICAgcG9zID0gY29uc3RhbnRzLmluZGV4KDEpCiAgICAgICAgIGNvbnN0YW50c1twb3NdID0gZm9yZWlnbl9jb2RlCiAgICAgICAgIGNvZGUgPSB0eXBlKGNvZGUpKGNvZGUuY29fYXJnY291bnQsIGNvZGUuY29fa3dvbmx5YXJnY291bnQsCkBAIC02MzAsNyArNjMzLDcgQEAKIGNsYXNzIFB5Y2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBUZXN0IHRoZSB2YXJpb3VzIFBFUCAzMTQ3IHJlbGF0ZWQgYmVoYXZpb3JzLgogCi0gICAgdGFnID0gaW1wLmdldF90YWcoKQorICAgIHRhZyA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKIAogICAgIGRlZiBfY2xlYW4oc2VsZik6CiAgICAgICAgIGZvcmdldChURVNURk4pCkBAIC02NzgsMTAgKzY4MSwxMSBAQAogICAgICAgICAjIFdpdGggUEVQIDMxNDcgY2FjaGUgbGF5b3V0LCByZW1vdmluZyB0aGUgc291cmNlIGJ1dCBsZWF2aW5nIHRoZSBweWMKICAgICAgICAgIyBmaWxlIGRvZXMgbm90IHNhdGlzZnkgdGhlIGltcG9ydC4KICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlKQorICAgICAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHljX2ZpbGUpKQogICAgICAgICBvcy5yZW1vdmUoc2VsZi5zb3VyY2UpCiAgICAgICAgIGZvcmdldChURVNURk4pCisgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCBURVNURk4pCiAKICAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCkBAIC03MDMsNyArNzA3LDcgQEAKICAgICBkZWYgdGVzdF9fX2NhY2hlZF9fKHNlbGYpOgogICAgICAgICAjIE1vZHVsZXMgbm93IGFsc28gaGF2ZSBhbiBfX2NhY2hlZF9fIHRoYXQgcG9pbnRzIHRvIHRoZSBweWMgZmlsZS4KICAgICAgICAgbSA9IF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShURVNURk4gKyAnLnB5JykKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShURVNURk4gKyAnLnB5JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIHB5Y19maWxlKSkKIAogICAgIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKQEAgLTczOCwxMCArNzQyLDEwIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3LmZvbycpCi0gICAgICAgIGluaXRfcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICBpbml0X3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgb3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ19faW5pdF9fLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2NhY2hlZF9fLCBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBpbml0X3B5YykpCi0gICAgICAgIGZvb19weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQorICAgICAgICBmb29fcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5tb2R1bGVzWydwZXAzMTQ3LmZvbyddLl9fY2FjaGVkX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgZm9vX3B5YykpCiAKQEAgLTc2NSwxMCArNzY5LDEwIEBACiAgICAgICAgIHVubG9hZCgncGVwMzE0NycpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3LmZvbycpCi0gICAgICAgIGluaXRfcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICBpbml0X3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgb3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ19faW5pdF9fLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2NhY2hlZF9fLCBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBpbml0X3B5YykpCi0gICAgICAgIGZvb19weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQorICAgICAgICBmb29fcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5tb2R1bGVzWydwZXAzMTQ3LmZvbyddLl9fY2FjaGVkX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgZm9vX3B5YykpCiAKQEAgLTg1Miw3ICs4NTYsNiBAQAogICAgICAgICBmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzWydfZnJvemVuX2ltcG9ydGxpYiddCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMobWFjaGluZXJ5LkZpbGVGaW5kZXIsIG1vZC5GaWxlRmluZGVyKQotICAgICAgICBzZWxmLmFzc2VydElzKGltcC5uZXdfbW9kdWxlLCBtb2QubmV3X21vZHVsZSkKIAogCiBAY3B5dGhvbl9vbmx5CkBAIC0xMDMzLDExICsxMDM2LDE0IEBACiAgICAgICAgICMgYXdheSBmcm9tIHRoZSB0cmFjZWJhY2suCiAgICAgICAgIHNlbGYuY3JlYXRlX21vZHVsZSgiZm9vIiwgIiIpCiAgICAgICAgIGltcG9ydGxpYiA9IHN5cy5tb2R1bGVzWydfZnJvemVuX2ltcG9ydGxpYiddCi0gICAgICAgIG9sZF9sb2FkX21vZHVsZSA9IGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGUKKyAgICAgICAgaWYgJ2xvYWRfbW9kdWxlJyBpbiB2YXJzKGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIpOgorICAgICAgICAgICAgb2xkX2V4ZWNfbW9kdWxlID0gaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2xkX2V4ZWNfbW9kdWxlID0gTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoKmFyZ3MpOgorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKCphcmdzKToKICAgICAgICAgICAgICAgICAxLzAKLSAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGUgPSBsb2FkX21vZHVsZQorICAgICAgICAgICAgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZSA9IGV4ZWNfbW9kdWxlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGZvbwogICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CkBAIC0xMDQ2LDE5ICsxMDUyLDIxIEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJaZXJvRGl2aXNpb25FcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydF90cmFjZWJhY2sodGIsIFtfX2ZpbGVfXywgJzxmcm96ZW4gaW1wb3J0bGliJywgX19maWxlX19dKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZSA9IG9sZF9sb2FkX21vZHVsZQorICAgICAgICAgICAgaWYgb2xkX2V4ZWNfbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGVsIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZSA9IG9sZF9leGVjX21vZHVsZQogCi0KLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBydW5fdW5pdHRlc3QoSW1wb3J0VGVzdHMsIFB5Y2FjaGVUZXN0cywgRmlsZVBlcm1pc3Npb25UZXN0cywKLSAgICAgICAgICAgICAgICAgUHljUmV3cml0aW5nVGVzdHMsIFBhdGhzVGVzdHMsIFJlbGF0aXZlSW1wb3J0VGVzdHMsCi0gICAgICAgICAgICAgICAgIE92ZXJyaWRpbmdJbXBvcnRCdWlsdGluVGVzdHMsCi0gICAgICAgICAgICAgICAgIEltcG9ydGxpYkJvb3RzdHJhcFRlc3RzLCBHZXRTb3VyY2VmaWxlVGVzdHMsCi0gICAgICAgICAgICAgICAgIFRlc3RTeW1ib2xpY2FsbHlMaW5rZWRQYWNrYWdlLAotICAgICAgICAgICAgICAgICBJbXBvcnRUcmFjZWJhY2tUZXN0cykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhURVNURk5fVU5FTkNPREFCTEUsICduZWVkIFRFU1RGTl9VTkVOQ09EQUJMRScpCisgICAgZGVmIHRlc3RfdW5lbmNvZGFibGVfZmlsZW5hbWUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNjE5OiBUaGUgUHl0aG9uIHBhcnNlciBhbmQgdGhlIGltcG9ydCBtYWNoaW5lcnkgbXVzdCBub3QKKyAgICAgICAgIyBlbmNvZGUgZmlsZW5hbWVzLCBlc3BlY2lhbGx5IG9uIFdpbmRvd3MKKyAgICAgICAgcHluYW1lID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdCgnJywgVEVTVEZOX1VORU5DT0RBQkxFLCAncGFzcycpCisgICAgICAgIG5hbWUgPSBweW5hbWVbOi0zXQorICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soIi1jIiwgIm1vZCA9IF9faW1wb3J0X18oJWEpIiAlIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzb2xhdGVkPUZhbHNlKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgIyBUZXN0IG5lZWRzIHRvIGJlIGEgcGFja2FnZSwgc28gd2UgY2FuIGRvIHJlbGF0aXZlIGltcG9ydHMuCi0gICAgZnJvbSB0ZXN0LnRlc3RfaW1wb3J0IGltcG9ydCB0ZXN0X21haW4KLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMjJkMWEuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi1pbXBvcnQgc3lzCi1pbXBvcnQgaW1wCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0KLQotdGVzdF9zcmMgPSAiIiJcCi1kZWYgZ2V0X25hbWUoKToKLSAgICByZXR1cm4gX19uYW1lX18KLWRlZiBnZXRfZmlsZSgpOgotICAgIHJldHVybiBfX2ZpbGVfXwotIiIiCi0KLWFic2ltcCA9ICJpbXBvcnQgc3ViXG4iCi1yZWxpbXAgPSAiZnJvbSAuIGltcG9ydCBzdWJcbiIKLWRlZXByZWxpbXAgPSAiZnJvbSAuLi4uIGltcG9ydCBzdWJcbiIKLWZ1dGltcCA9ICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydFxuIgotCi1yZWxvYWRfc3JjID0gdGVzdF9zcmMrIiIiXAotcmVsb2FkZWQgPSBUcnVlCi0iIiIKLQotdGVzdF9jbyA9IGNvbXBpbGUodGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXJlbG9hZF9jbyA9IGNvbXBpbGUocmVsb2FkX3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotCi10ZXN0Ml9vbGRhYnNfY28gPSBjb21waWxlKGFic2ltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9uZXdhYnNfY28gPSBjb21waWxlKGZ1dGltcCArIGFic2ltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9uZXdyZWxfY28gPSBjb21waWxlKHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9kZWVwcmVsX2NvID0gY29tcGlsZShkZWVwcmVsaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX2Z1dHJlbF9jbyA9IGNvbXBpbGUoZnV0aW1wICsgcmVsaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLQotdGVzdF9wYXRoID0gIiEhIV90ZXN0XyEhISIKLQotCi1jbGFzcyBUZXN0SW1wb3J0ZXI6Ci0KLSAgICBtb2R1bGVzID0gewotICAgICAgICAiaG9va3Rlc3Rtb2R1bGUiOiAoRmFsc2UsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlIjogKFRydWUsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1YiI6IChUcnVlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyIjogKFRydWUsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm9sZGFicyI6IChGYWxzZSwgdGVzdDJfb2xkYWJzX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdhYnMiOiAoRmFsc2UsIHRlc3QyX25ld2Fic19jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3cmVsIjogKEZhbHNlLCB0ZXN0Ml9uZXdyZWxfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IjogKFRydWUsIHRlc3QyX2RlZXByZWxfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbCI6IChGYWxzZSwgdGVzdDJfZnV0cmVsX2NvKSwKLSAgICAgICAgInN1YiI6IChGYWxzZSwgdGVzdF9jbyksCi0gICAgICAgICJyZWxvYWRtb2R1bGUiOiAoRmFsc2UsIHRlc3RfY28pLAotICAgIH0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPXRlc3RfcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggIT0gdGVzdF9wYXRoOgotICAgICAgICAgICAgIyBpZiBvdXIgY2xhc3MgaXMgb24gc3lzLnBhdGhfaG9va3MsIHdlIG11c3QgcmFpc2UKLSAgICAgICAgICAgICMgSW1wb3J0RXJyb3IgZm9yIGFueSBwYXRoIGl0ZW0gdGhhdCB3ZSBjYW4ndCBoYW5kbGUuCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lIGluIHNlbGYubW9kdWxlczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgaXNwa2csIGNvZGUgPSBzZWxmLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzLnNldGRlZmF1bHQoZnVsbG5hbWUsaW1wLm5ld19tb2R1bGUoZnVsbG5hbWUpKQotICAgICAgICBtb2QuX19maWxlX18gPSAiPCVzPiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwotICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgaWYgaXNwa2c6Ci0gICAgICAgICAgICBtb2QuX19wYXRoX18gPSBzZWxmLl9nZXRfX3BhdGhfXygpCi0gICAgICAgIGV4ZWMoY29kZSwgbW9kLl9fZGljdF9fKQotICAgICAgICByZXR1cm4gbW9kCi0KLQotY2xhc3MgTWV0YUltcG9ydGVyKFRlc3RJbXBvcnRlcik6Ci0gICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtdCi0KLWNsYXNzIFBhdGhJbXBvcnRlcihUZXN0SW1wb3J0ZXIpOgotICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBbc2VsZi5wYXRoXQotCi0KLWNsYXNzIEltcG9ydEJsb2NrZXI6Ci0gICAgIiIiUGxhY2UgYW4gSW1wb3J0QmxvY2tlciBpbnN0YW5jZSBvbiBzeXMubWV0YV9wYXRoIGFuZCB5b3UKLSAgICBjYW4gYmUgc3VyZSB0aGUgbW9kdWxlcyB5b3Ugc3BlY2lmaWVkIGNhbid0IGJlIGltcG9ydGVkLCBldmVuCi0gICAgaWYgaXQncyBhIGJ1aWx0aW4uIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICpuYW1lc3RvYmxvY2spOgotICAgICAgICBzZWxmLm5hbWVzdG9ibG9jayA9IGRpY3QuZnJvbWtleXMobmFtZXN0b2Jsb2NrKQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5uYW1lc3RvYmxvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICByZXR1cm4gTm9uZQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJJIGRhcmUgeW91IikKLQotCi1jbGFzcyBJbXBXcmFwcGVyOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmUgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgc2VsZi5wYXRoID0gcGF0aAotCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBzdWJuYW1lID0gZnVsbG5hbWUuc3BsaXQoIi4iKVstMV0KLSAgICAgICAgaWYgc3VibmFtZSAhPSBmdWxsbmFtZSBhbmQgc2VsZi5wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBpZiBzZWxmLnBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHBhdGggPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRoID0gW3NlbGYucGF0aF0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmlsZSwgZmlsZW5hbWUsIHN0dWZmID0gaW1wLmZpbmRfbW9kdWxlKHN1Ym5hbWUsIHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBJbXBMb2FkZXIoZmlsZSwgZmlsZW5hbWUsIHN0dWZmKQotCi0KLWNsYXNzIEltcExvYWRlcjoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBmaWxlbmFtZSwgc3R1ZmYpOgotICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCi0gICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQotICAgICAgICBzZWxmLnN0dWZmID0gc3R1ZmYKLQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIG1vZCA9IGltcC5sb2FkX21vZHVsZShmdWxsbmFtZSwgc2VsZi5maWxlLCBzZWxmLmZpbGVuYW1lLCBzZWxmLnN0dWZmKQotICAgICAgICBpZiBzZWxmLmZpbGU6Ci0gICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQotICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYgICMgZm9yIGludHJvc3BlY3Rpb24KLSAgICAgICAgcmV0dXJuIG1vZAotCi0KLWNsYXNzIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5wYXRoID0gc3lzLnBhdGhbOl0KLSAgICAgICAgc2VsZi5tZXRhX3BhdGggPSBzeXMubWV0YV9wYXRoWzpdCi0gICAgICAgIHNlbGYucGF0aF9ob29rcyA9IHN5cy5wYXRoX2hvb2tzWzpdCi0gICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgc2VsZi5tb2R1bGVzX2JlZm9yZSA9IHN1cHBvcnQubW9kdWxlc19zZXR1cCgpCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5wYXRoCi0gICAgICAgIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLm1ldGFfcGF0aAotICAgICAgICBzeXMucGF0aF9ob29rc1s6XSA9IHNlbGYucGF0aF9ob29rcwotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCi0gICAgICAgIHN1cHBvcnQubW9kdWxlc19jbGVhbnVwKCpzZWxmLm1vZHVsZXNfYmVmb3JlKQotCi0KLWNsYXNzIEltcG9ydEhvb2tzVGVzdENhc2UoSW1wb3J0SG9va3NCYXNlVGVzdENhc2UpOgotCi0gICAgZGVmIGRvVGVzdEltcG9ydHMoc2VsZiwgaW1wb3J0ZXI9Tm9uZSk6Ci0gICAgICAgIGltcG9ydCBob29rdGVzdG1vZHVsZQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlcgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0bW9kdWxlLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0bW9kdWxlIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyIikKLSAgICAgICAgaWYgaW1wb3J0ZXI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0bW9kdWxlLl9fbG9hZGVyX18sIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLl9fbG9hZGVyX18sIGltcG9ydGVyKQotCi0gICAgICAgIFRlc3RJbXBvcnRlci5tb2R1bGVzWydyZWxvYWRtb2R1bGUnXSA9IChGYWxzZSwgdGVzdF9jbykKLSAgICAgICAgaW1wb3J0IHJlbG9hZG1vZHVsZQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIocmVsb2FkbW9kdWxlLCdyZWxvYWRlZCcpKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UubmV3cmVsCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld3JlbC5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3cmVsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3cmVsLnN1YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QgYXMgc3ViZXN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViZXN0LmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViZXN0LnN1YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UuZnV0cmVsCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbC5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UuZnV0cmVsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZnV0cmVsLnN1YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQotCi0gICAgICAgIGltcG9ydCBzdWIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuZ2V0X25hbWUoKSwgInN1YiIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uub2xkYWJzLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5vbGRhYnMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMuc3ViLCBzdWIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3YWJzLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdhYnMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMuc3ViLCBzdWIpCi0KLSAgICBkZWYgdGVzdE1ldGFQYXRoKHNlbGYpOgotICAgICAgICBpID0gTWV0YUltcG9ydGVyKCkKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoaSkKLSAgICAgICAgc2VsZi5kb1Rlc3RJbXBvcnRzKGkpCi0KLSAgICBkZWYgdGVzdFBhdGhIb29rKHNlbGYpOgotICAgICAgICBzeXMucGF0aF9ob29rcy5pbnNlcnQoMCwgUGF0aEltcG9ydGVyKQotICAgICAgICBzeXMucGF0aC5hcHBlbmQodGVzdF9wYXRoKQotICAgICAgICBzZWxmLmRvVGVzdEltcG9ydHMoKQotCi0gICAgZGVmIHRlc3RCbG9ja2VyKHNlbGYpOgotICAgICAgICBtbmFtZSA9ICJleGNlcHRpb25zIiAgIyBhbiBhcmJpdHJhcnkgaGFybWxlc3MgYnVpbHRpbiBtb2R1bGUKLSAgICAgICAgc3VwcG9ydC51bmxvYWQobW5hbWUpCi0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKEltcG9ydEJsb2NrZXIobW5hbWUpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgX19pbXBvcnRfXywgbW5hbWUpCi0KLSAgICBkZWYgdGVzdEltcFdyYXBwZXIoc2VsZik6Ci0gICAgICAgIGkgPSBJbXBXcmFwcGVyKCkKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoaSkKLSAgICAgICAgc3lzLnBhdGhfaG9va3MuaW5zZXJ0KDAsIEltcFdyYXBwZXIpCi0gICAgICAgIG1uYW1lcyA9ICgKLSAgICAgICAgICAgICJjb2xvcnN5cyIsICJ1cmxsaWIucGFyc2UiLCAiZGlzdHV0aWxzLmNvcmUiLCAic3lzIiwKLSAgICAgICAgKQotICAgICAgICBmb3IgbW5hbWUgaW4gbW5hbWVzOgotICAgICAgICAgICAgcGFyZW50ID0gbW5hbWUuc3BsaXQoIi4iKVswXQotICAgICAgICAgICAgZm9yIG4gaW4gbGlzdChzeXMubW9kdWxlcyk6Ci0gICAgICAgICAgICAgICAgaWYgbi5zdGFydHN3aXRoKHBhcmVudCk6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuXQotICAgICAgICBmb3IgbW5hbWUgaW4gbW5hbWVzOgotICAgICAgICAgICAgbSA9IF9faW1wb3J0X18obW5hbWUsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFsiX19kdW1teV9fIl0pCi0gICAgICAgICAgICAjIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYW5kbGVkIHRoZSBpbXBvcnQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG0sICJfX2xvYWRlcl9fIikpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEltcG9ydEhvb2tzVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19pbml0X18ucHkKaW5kZXggMGUzNDVjZC4uNGIxNmVjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19pbml0X18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTEsMzMgKzEsNSBAQAogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGxvYWRfcGFja2FnZV90ZXN0cwogCi1kZWYgdGVzdF9zdWl0ZShwYWNrYWdlPV9fcGFja2FnZV9fLCBkaXJlY3Rvcnk9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSk6Ci0gICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIoZGlyZWN0b3J5KToKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCgnLicsICdfXycpKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBuYW1lKQotICAgICAgICBpZiAob3MucGF0aC5pc2ZpbGUocGF0aCkgYW5kIG5hbWUuc3RhcnRzd2l0aCgndGVzdF8nKSBhbmQKLSAgICAgICAgICAgICAgICBuYW1lLmVuZHN3aXRoKCcucHknKSk6Ci0gICAgICAgICAgICBzdWJtb2R1bGVfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQobmFtZSlbMF0KLSAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gInswfS57MX0iLmZvcm1hdChwYWNrYWdlLCBzdWJtb2R1bGVfbmFtZSkKLSAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlX25hbWUsIGxldmVsPTApCi0gICAgICAgICAgICBtb2R1bGVfdGVzdHMgPSB1bml0dGVzdC5maW5kVGVzdENhc2VzKHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXSkKLSAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobW9kdWxlX3Rlc3RzKQotICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICBwYWNrYWdlX25hbWUgPSAiezB9LnsxfSIuZm9ybWF0KHBhY2thZ2UsIG5hbWUpCi0gICAgICAgICAgICBfX2ltcG9ydF9fKHBhY2thZ2VfbmFtZSwgbGV2ZWw9MCkKLSAgICAgICAgICAgIHBhY2thZ2VfdGVzdHMgPSBnZXRhdHRyKHN5cy5tb2R1bGVzW3BhY2thZ2VfbmFtZV0sICd0ZXN0X3N1aXRlJykoKQotICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChwYWNrYWdlX3Rlc3RzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29udGludWUKLSAgICByZXR1cm4gc3VpdGUKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3RhcnRfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgIHRvcF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN0YXJ0X2RpcikpCi0gICAgdGVzdF9sb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0X2xvYWRlci5kaXNjb3ZlcihzdGFydF9kaXIsIHRvcF9sZXZlbF9kaXI9dG9wX2RpcikpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkKaW5kZXggYzM5NzEyOC4uNDBhMjNhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkKQEAgLTEsMjAgKzEsNCBAQAotIiIiUnVuIGltcG9ydGxpYidzIHRlc3Qgc3VpdGUuCitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAogCi1TcGVjaWZ5aW5nIHRoZSBgYC0tYnVpbHRpbmBgIGZsYWcgd2lsbCBydW4gdGVzdHMsIHdoZXJlIGFwcGxpY2FibGUsIHdpdGgKLWJ1aWx0aW5zLl9faW1wb3J0X18gaW5zdGVhZCBvZiBpbXBvcnRsaWIuX19pbXBvcnRfXy4KLQotIiIiCi1mcm9tIC4gaW1wb3J0IHRlc3RfbWFpbgotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IGFyZ3BhcnNlCi0KLSAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nRXhlY3V0ZSB0aGUgaW1wb3J0bGliIHRlc3QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VpdGUnKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnVpbHRpbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd1c2UgYnVpbHRpbnMuX19pbXBvcnRfXygpIGluc3RlYWQgb2YgaW1wb3J0bGliJykKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotICAgIGlmIGFyZ3MuYnVpbHRpbjoKLSAgICAgICAgdXRpbC51c2luZ19fX2ltcG9ydF9fID0gVHJ1ZQotICAgIHRlc3RfbWFpbigpCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weQppbmRleCAyYzE3YWMzLi4yMDcwZGFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5CkBAIC0yLDcgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgRmluZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CitjbGFzcyBGaW5kZXJUZXN0cyhtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgogCiAgICAgIiIiQmFzaWMgdGVzdHMgZm9yIGEgZmluZGVyIHRvIHBhc3MuIiIiCiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcGFzcwogCiAKLWNsYXNzIExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorY2xhc3MgTG9hZGVyVGVzdHMobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CkBAIC04MSwxMSArODEsNiBAQAogICAgICAgICBwYXNzCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICAiIiJJZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLCBpdCBzaG91bGQgYmUgcmV1c2VkLiIiIgotICAgICAgICBwYXNzCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKICAgICAgICAgIiIiSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcyBhbmQgYSByZWxvYWQgZmFpbHMKICAgICAgICAgKGUuZy4gYSBTeW50YXhFcnJvciksIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGluIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi9fX2luaXRfXy5weQppbmRleCAxNWMwYWRlLi40YjE2ZWNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vX19pbml0X18ucHkKQEAgLTEsMTIgKzEsNSBAQAotZnJvbSAuLiBpbXBvcnQgdGVzdF9zdWl0ZQogaW1wb3J0IG9zCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgcmV0dXJuIHRlc3Rfc3VpdGUoJ2ltcG9ydGxpYi50ZXN0LmJ1aWx0aW4nLCBkaXJlY3RvcnkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CmluZGV4IGRhMGVmMjguLjkzNDU2MmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQpAQCAtMSwxMSArMSw1MyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgYnVpbHRpbl91dGlsCiAKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAorCitjbGFzcyBGaW5kU3BlY1Rlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGZpbmRfc3BlYygpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIENvbW1vbiBjYXNlLgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6CisgICAgICAgICAgICBmb3VuZCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLm9yaWdpbiwgJ2J1aWx0LWluJykKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgorICAgIHRlc3RfcGFja2FnZSA9IE5vbmUKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub2J0IGJlIGluIGEgcGFja2FnZS4KKyAgICB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlX2luX3BhY2thZ2UgPSBOb25lCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KKyAgICB0ZXN0X3BhY2thZ2Vfb3Zlcl9tb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2ltcG9ydGxpYicKKyAgICAgICAgYXNzZXJ0IG5hbWUgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcworICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhuYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcGVjKQorCisgICAgZGVmIHRlc3RfaWdub3JlX3BhdGgoc2VsZik6CisgICAgICAgICMgVGhlIHZhbHVlIGZvciAncGF0aCcgc2hvdWxkIGFsd2F5cyB0cmlnZ2VyIGEgZmFpbGVkIGltcG9ydC4KKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMoYnVpbHRpbl91dGlsLk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3BrZyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKKworRnJvemVuX0ZpbmRTcGVjVGVzdHMsIFNvdXJjZV9GaW5kU3BlY1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKKworCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCBmaW5kX21vZHVsZSgpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgpAQCAtMTMsOCArNTUsOSBAQAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgIyBDb21tb24gY2FzZS4KICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgotICAgICAgICAgICAgZm91bmQgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihmb3VuZCwgJ2xvYWRfbW9kdWxlJykpCiAKICAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KICAgICB0ZXN0X3BhY2thZ2UgPSB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IHRlc3RfcGFja2FnZV9vdmVyX21vZHVsZSA9IE5vbmUKQEAgLTI0LDIyICs2NywxOSBAQAogCiAgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKICAgICAgICAgYXNzZXJ0ICdpbXBvcnRsaWInIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKLSAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZSgnaW1wb3J0bGliJykKKyAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdpbXBvcnRsaWInKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKICAgICBkZWYgdGVzdF9pZ25vcmVfcGF0aChzZWxmKToKICAgICAgICAgIyBUaGUgdmFsdWUgZm9yICdwYXRoJyBzaG91bGQgYWx3YXlzIHRyaWdnZXIgYSBmYWlsZWQgaW1wb3J0LgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydwa2cnXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKIAotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQppbmRleCAxMmE3OWM2Li4xZjgzNTc0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKQEAgLTEsOSArMSw5IEBACi1pbXBvcnQgaW1wb3J0bGliCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBidWlsdGluX3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CkBAIC0xMyw4ICsxMyw5IEBACiAKICAgICAiIiJUZXN0IGxvYWRfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCiAKLSAgICB2ZXJpZmljYXRpb24gPSB7J19fbmFtZV9fJzogJ2Vycm5vJywgJ19fcGFja2FnZV9fJzogJycsCi0gICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlcn0KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZpY2F0aW9uID0geydfX25hbWVfXyc6ICdlcnJubycsICdfX3BhY2thZ2VfXyc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlcn0KIAogICAgIGRlZiB2ZXJpZnkoc2VsZiwgbW9kdWxlKToKICAgICAgICAgIiIiVmVyaWZ5IHRoYXQgdGhlIG1vZHVsZSBtYXRjaGVzIGFnYWluc3Qgd2hhdCBpdCBzaG91bGQgaGF2ZS4iIiIKQEAgLTIzLDggKzI0LDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19uYW1lX18sIHN5cy5tb2R1bGVzKQogCi0gICAgbG9hZF9tb2R1bGUgPSBzdGF0aWNtZXRob2QobGFtYmRhIG5hbWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUobmFtZSkpCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgQ29tbW9uIGNhc2UuCkBAIC01NSw0NSArNTYsNTEgQEAKICAgICBkZWYgdGVzdF9hbHJlYWR5X2ltcG9ydGVkKHNlbGYpOgogICAgICAgICAjIFVzaW5nIHRoZSBuYW1lIG9mIGEgbW9kdWxlIGFscmVhZHkgaW1wb3J0ZWQgYnV0IG5vdCBhIGJ1aWx0LWluIHNob3VsZAogICAgICAgICAjIHN0aWxsIGZhaWwuCi0gICAgICAgIGFzc2VydCBoYXNhdHRyKGltcG9ydGxpYiwgJ19fZmlsZV9fJykgICMgTm90IGEgYnVpbHQtaW4uCisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2J1aWx0aW5fcmVsb2FkX3Rlc3QnCisgICAgICAgIGFzc2VydCBtb2R1bGVfbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG1vZHVsZV9uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobW9kdWxlX25hbWUpCisgICAgICAgICAgICBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0gPSBtb2R1bGUKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKCdpbXBvcnRsaWInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnaW1wb3J0bGliJykKKyAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGUobW9kdWxlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG1vZHVsZV9uYW1lKQogCiAKLWNsYXNzIEluc3BlY3RMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKExvYWRlclRlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBJbnNwZWN0TG9hZGVyIG1ldGhvZHMgZm9yIEJ1aWx0aW5JbXBvcnRlci4iIiIKIAogICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgogICAgICAgICAjIFRoZXJlIGlzIG5vIGNvZGUgb2JqZWN0LgotICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9jb2RlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gc291cmNlLgotICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5nZXRfc291cmNlKGJ1aWx0aW5fdXRpbC5OQU1FKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHQpCiAKICAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIENhbm5vdCBiZSBhIHBhY2thZ2UuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuaXNfcGFja2FnZShidWlsdGluX3V0aWwuTkFNRSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X25vdF9idWlsdGluKHNlbGYpOgogICAgICAgICAjIE1vZHVsZXMgbm90IGJ1aWx0LWluIHNob3VsZCByYWlzZSBJbXBvcnRFcnJvci4KICAgICAgICAgZm9yIG1ldGhfbmFtZSBpbiAoJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnLCAnaXNfcGFja2FnZScpOgotICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtZXRoX25hbWUpCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWV0aF9uYW1lKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKICAgICAgICAgICAgIG1ldGhvZChidWlsdGluX3V0aWwuQkFEX05BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJ1aWx0aW5fdXRpbC5CQURfTkFNRSkKIAotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KExvYWRlclRlc3RzLCBJbnNwZWN0TG9hZGVyVGVzdHMpCitGcm96ZW5fSW5zcGVjdExvYWRlclRlc3RzLCBTb3VyY2VfSW5zcGVjdExvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEluc3BlY3RMb2FkZXJUZXN0cywKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vX19pbml0X18ucHkKaW5kZXggYzAzMzkyMy4uNGIxNmVjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi9fX2luaXRfXy5weQpAQCAtMSwxMyArMSw1IEBACi1mcm9tIC4uIGltcG9ydCB0ZXN0X3N1aXRlCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKIAotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICByZXR1cm4gdGVzdF9zdWl0ZSgnaW1wb3J0bGliLnRlc3QuZXh0ZW5zaW9uJywgZGlyZWN0b3J5KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSAuIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQppbmRleCA3NmM1M2U0Li5iYjI1MjhlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKQEAgLTEsMjIgKzEsMjcgQEAKLWltcG9ydCBpbXAKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKKwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGV4dF91dGlsCiAKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCisKKyMgWFhYIGZpbmRfc3BlYyB0ZXN0cworCitAdW5pdHRlc3Quc2tpcElmKGV4dF91dGlsLkZJTEVOQU1FIGlzIE5vbmUsICdfdGVzdGNhcGkgbm90IGF2YWlsYWJsZScpCiBAdXRpbC5jYXNlX2luc2Vuc2l0aXZlX3Rlc3RzCi1jbGFzcyBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEV4dGVuc2lvbk1vZHVsZUNhc2VTZW5zaXRpdml0eVRlc3Q6CiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZik6CiAgICAgICAgIGdvb2RfbmFtZSA9IGV4dF91dGlsLk5BTUUKICAgICAgICAgYmFkX25hbWUgPSBnb29kX25hbWUudXBwZXIoKQogICAgICAgICBhc3NlcnQgZ29vZF9uYW1lICE9IGJhZF9uYW1lCi0gICAgICAgIGZpbmRlciA9IF9ib290c3RyYXAuRmlsZUZpbmRlcihleHRfdXRpbC5QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfYm9vdHN0cmFwLkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ib290c3RyYXAuRVhURU5TSU9OX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihleHRfdXRpbC5QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShiYWRfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZlKHNlbGYpOgpAQCAtMzcsMTQgKzQyLDEwIEBACiAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLmZpbmRfbW9kdWxlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxvYWRlciwgJ2xvYWRfbW9kdWxlJykpCiAKLQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBpZiBleHRfdXRpbC5GSUxFTkFNRSBpcyBOb25lOgotICAgICAgICByZXR1cm4KLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0KQorRnJvemVuX0V4dGVuc2lvbkNhc2VTZW5zaXRpdml0eSwgU291cmNlX0V4dGVuc2lvbkNhc2VTZW5zaXRpdml0eSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0LAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQppbmRleCAzN2Y2NzcyLi45OTBmMjljIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDE4ICsxLDI1IEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKK2Zyb20gLi4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworCisjIFhYWCBmaW5kX3NwZWMgdGVzdHMKIAogY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKIAogICAgICIiIlRlc3QgdGhlIGZpbmRlciBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBpbXBvcnRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKHV0aWwuUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKQotICAgICAgICByZXR1cm4gaW1wb3J0ZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCisgICAgICAgIGltcG9ydGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcih1dGlsLlBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gaW1wb3J0ZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfbW9kdWxlKHV0aWwuTkFNRSkpCkBAIC0yOSwxMSArMzYsOSBAQAogICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuZmluZF9tb2R1bGUoJ2FzZGZqa2w7JykpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEZpbmRlclRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQppbmRleCBlNzkwNjc1Li5mZDlhYmYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDEwICsxLDEyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgZXh0X3V0aWwKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAogCkBAIC0xMyw4ICsxNSw4IEBACiAgICAgIiIiVGVzdCBsb2FkX21vZHVsZSgpIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5sb2FkZXIgPSBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcihleHRfdXRpbC5OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfdXRpbC5GSUxFUEFUSCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dF91dGlsLk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfdXRpbC5GSUxFUEFUSCkKIAogICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIHJldHVybiBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShmdWxsbmFtZSkKQEAgLTI2LDYgKzI4LDE1IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZSgnWFhYJykKIAorICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X2luZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG90aGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcignXycgKyBleHRfdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5sb2FkZXIsIG90aGVyKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShleHRfdXRpbC5OQU1FKToKQEAgLTM2LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4dF91dGlsLk5BTUUsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHVsZS5fX2xvYWRlcl9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCiAKICAgICAjIE5vIGV4dGVuc2lvbiBtb2R1bGUgYXMgX19pbml0X18gYXZhaWxhYmxlIGZvciB0ZXN0aW5nLgogICAgIHRlc3RfcGFja2FnZSA9IE5vbmUKQEAgLTYxLDE2ICs3MiwxNSBAQAogCiAgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKGV4dF91dGlsLk5BTUUpKQotICAgICAgICBmb3Igc3VmZml4IGluIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVM6CisgICAgICAgIGZvciBzdWZmaXggaW4gc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgogICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignc29tZScsICdwYXRoJywgJ3BrZycsICdfX2luaXRfXycgKyBzdWZmaXgpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcigncGtnJywgcGF0aCkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ3BrZycsIHBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLmlzX3BhY2thZ2UoJ3BrZycpKQogCitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMb2FkZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoTG9hZGVyVGVzdHMpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDFkOTY5YTEuLjQ5ZDY3MzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKQEAgLTEsMzIgKzEsMzIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gLi4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFBhdGhIb29rVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGF0aEhvb2tUZXN0czoKIAogICAgICIiIlRlc3QgdGhlIHBhdGggaG9vayBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAgICAgIyBYWFggU2hvdWxkIGl0IG9ubHkgc3VjY2VlZCBmb3IgcHJlLWV4aXN0aW5nIGRpcmVjdG9yaWVzPwogICAgICMgWFhYIFNob3VsZCBpdCBvbmx5IHdvcmsgZm9yIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZT8KIAogICAgIGRlZiBob29rKHNlbGYsIGVudHJ5KToKLSAgICAgICAgcmV0dXJuIG1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygobWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkoZW50cnkpCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygKKyAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkoZW50cnkpCiAKICAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgogICAgICAgICAjIFBhdGggaG9vayBzaG91bGQgaGFuZGxlIGEgZGlyZWN0b3J5IHdoZXJlIGEga25vd24gZXh0ZW5zaW9uIG1vZHVsZQogICAgICAgICAjIGV4aXN0cy4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5ob29rKHV0aWwuUEFUSCksICdmaW5kX21vZHVsZScpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhdGhIb29rVGVzdHMpCitGcm96ZW5fUGF0aEhvb2tzVGVzdHMsIFNvdXJjZV9QYXRoSG9va3NUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhdGhIb29rVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQppbmRleCBhMjY2ZGQ5Li44ZDA4OWYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQpAQCAtMSw0ICsxLDMgQEAKLWltcG9ydCBpbXAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL19faW5pdF9fLnB5CmluZGV4IDllZjEwM2IuLjRiMTZlY2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vX19pbml0X18ucHkKQEAgLTEsMTMgKzEsNSBAQAotZnJvbSAuLiBpbXBvcnQgdGVzdF9zdWl0ZQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgcmV0dXJuIHRlc3Rfc3VpdGUoJ2ltcG9ydGxpYi50ZXN0LmZyb3plbicsIGRpcmVjdG9yeSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQorZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgIHJldHVybiBsb2FkX3BhY2thZ2VfdGVzdHMob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKmFyZ3MpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi9fX21haW5fXy5weQpAQCAtMCwwICsxLDQgQEAKK2Zyb20gLiBpbXBvcnQgbG9hZF90ZXN0cworaW1wb3J0IHVuaXR0ZXN0CisKK3VuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CmluZGV4IGYwYWJlMGUuLmY5Zjk3ZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKQEAgLTEsMTUgKzEsNTIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAorCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCiBpbXBvcnQgdW5pdHRlc3QKIAogCitjbGFzcyBGaW5kU3BlY1Rlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGZpbmRpbmcgZnJvemVuIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgZmluZChzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgorICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfc3BlYyhuYW1lLCBwYXRoKQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCAnZnJvemVuJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJ19fcGhlbGxvX18nKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzcGVjKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJ19fcGhlbGxvX18uc3BhbScsIFsnX19waGVsbG9fXyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzcGVjKQorCisgICAgIyBObyBmcm96ZW4gcGFja2FnZSB3aXRoaW4gYW5vdGhlciBwYWNrYWdlIHRvIHRlc3Qgd2l0aC4KKyAgICB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgTm8gZWFzeSB3YXkgdG8gdGVzdC4KKyAgICB0ZXN0X3BhY2thZ2Vfb3Zlcl9tb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5maW5kKCc8bm90IHJlYWw+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKKworRnJvemVuX0ZpbmRTcGVjVGVzdHMsIFNvdXJjZV9GaW5kU3BlY1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKwogY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKIAogICAgICIiIlRlc3QgZmluZGluZyBmcm96ZW4gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgogICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CkBAIC0zNSwxMSArNzIsOSBAQAogICAgICAgICBsb2FkZXIgPSBzZWxmLmZpbmQoJzxub3QgcmVhbD4nKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQppbmRleCBmM2E4YmY2Li43YzAxNDY0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDE4ICsxLDEwNCBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQotaW1wb3J0IGltcAotaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKKworbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworCitpbXBvcnQgc3lzCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0CitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCisKKworY2xhc3MgRXhlY01vZHVsZVRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG9yaWdpbj0nZnJvemVuJywKKyAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1zZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5pc19wYWNrYWdlKG5hbWUpKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKG1vZHVsZSwgJ2luaXRpYWxpemVkJykKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19zcGVjX18ub3JpZ2luLCAnZnJvemVuJykKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUsIHN0ZG91dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19oZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnSGVsbG8gd29ybGQhXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX3BoZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJfdmFsdWUsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB7bmFtZX0ue2F0dHJ9LCB7Z2l2ZW4hcn0gIT0ge2V4cGVjdGVkIXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIGF0dHI9YXR0ciwgZ2l2ZW49YXR0cl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPXZhbHVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisKKyAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX3BoZWxsb19fLnNwYW0nCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX3BoZWxsb19fJyk6CisgICAgICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6IG5hbWV9CisgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKKyAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyX3ZhbHVlLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmb3Ige25hbWV9LnthdHRyfSwge2dpdmVufSAhPSB7ZXhwZWN0ZWQhcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgYXR0cj1hdHRyLCBnaXZlbj1hdHRyX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9dmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcihzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCisgICAgICAgIG1vZHVsZSwgb3V0cHV0ID0gc2VsZi5leGVjX21vZHVsZShuYW1lKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJlcHJfc3RyID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubW9kdWxlX3JlcHIobW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHJfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8bW9kdWxlICdfX2hlbGxvX18nIChmcm96ZW4pPiIpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9pbmRpcmVjdChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCisgICAgICAgIG1vZHVsZSwgb3V0cHV0ID0gc2VsZi5leGVjX21vZHVsZShuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobW9kdWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQorCisgICAgIyBObyB3YXkgdG8gdHJpZ2dlciBhbiBlcnJvciBpbiBhIGZyb3plbiBtb2R1bGUuCisgICAgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlID0gTm9uZQorCisgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdfbm90X3JlYWwnKSBpcyBOb25lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5leGVjX21vZHVsZSgnX25vdF9yZWFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ19ub3RfcmVhbCcpCisKK0Zyb3plbl9FeGVjTW9kdWxlVGVzdHMsIFNvdXJjZV9FeGVjTW9kdWxlVGVzdHMgPSB1dGlsLnRlc3RfYm90aChFeGVjTW9kdWxlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKIAogY2xhc3MgTG9hZGVyVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19faGVsbG9fXycpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX19oZWxsb19fJywKICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJycsCi0gICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCkBAIC0yMSwxMSArMTA3LDEzIEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycpLCAgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXycpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX19waGVsbG9fXycsCiAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnX19waGVsbG9fXycsCi0gICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbJ19fcGhlbGxvX18nXSwKLSAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW10sCisgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQpAQCAtMzgsMTAgKzEyNiwxMiBAQAogICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycsICdfX3BoZWxsb19fLnNwYW0nKSwgXAogICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXy5zcGFtJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXy5zcGFtJykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfX3BoZWxsb19fLnNwYW0nLAogICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnX19waGVsbG9fXycsCi0gICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKICAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCkBAIC01MywyOSArMTQzLDQzIEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmV1c2Uoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlMSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKLSAgICAgICAgICAgIG1vZHVsZTIgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlMSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgICAgIG1vZHVsZTIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlMSwgbW9kdWxlMikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIZWxsbyB3b3JsZCFcbkhlbGxvIHdvcmxkIVxuJykKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpOgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG1vZHVsZSksCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICAgICAgcmVwcl9zdHIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5tb2R1bGVfcmVwcihtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHJfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQogCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfaW5kaXJlY3Qoc2VsZik6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG1vZHVsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxtb2R1bGUgJ19faGVsbG9fXycgKGZyb3plbik+IikKKwogICAgICMgTm8gd2F5IHRvIHRyaWdnZXIgYW4gZXJyb3IgaW4gYSBmcm96ZW4gbW9kdWxlLgogICAgIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSA9IE5vbmUKIAogICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6Ci0gICAgICAgIGFzc2VydCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKKyAgICAgICAgYXNzZXJ0IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdfbm90X3JlYWwnKSBpcyBOb25lCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfbm90X3JlYWwnKQorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19ub3RfcmVhbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdfbm90X3JlYWwnKQogCitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKExvYWRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCi1jbGFzcyBJbnNwZWN0TG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBJbnNwZWN0TG9hZGVyVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgdGhlIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgRnJvemVuSW1wb3J0ZXIuIiIiCiAKQEAgLTgzLDE1ICsxODcsMTUgQEAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgY29kZSBvYmplY3QgaXMgZ29vZC4KICAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgY29kZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5nZXRfY29kZShuYW1lKQotICAgICAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGNvZGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5nZXRfY29kZShuYW1lKQorICAgICAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgZXhlYyhjb2RlLCBtb2QuX19kaWN0X18pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2QsICdpbml0aWFsaXplZCcpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKIAogICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CiAgICAgICAgICMgU2hvdWxkIGFsd2F5cyByZXR1cm4gTm9uZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9zb3VyY2UoJ19faGVsbG9fXycpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9zb3VyY2UoJ19faGVsbG9fXycpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CkBAIC05OSwyMiArMjAzLDIwIEBACiAgICAgICAgIHRlc3RfZm9yID0gKCgnX19oZWxsb19fJywgRmFsc2UpLCAoJ19fcGhlbGxvX18nLCBUcnVlKSwKICAgICAgICAgICAgICAgICAgICAgKCdfX3BoZWxsb19fLnNwYW0nLCBGYWxzZSkpCiAgICAgICAgIGZvciBuYW1lLCBpc19wYWNrYWdlIGluIHRlc3RfZm9yOgotICAgICAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmlzX3BhY2thZ2UobmFtZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmlzX3BhY2thZ2UobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbChyZXN1bHQpLCBpc19wYWNrYWdlKQogCiAgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKICAgICAgICAgIyBSYWlzZSBJbXBvcnRFcnJvciBmb3IgbW9kdWxlcyB0aGF0IGFyZSBub3QgZnJvemVuLgogICAgICAgICBmb3IgbWV0aF9uYW1lIGluICgnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsICdpc19wYWNrYWdlJyk6Ci0gICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwgbWV0aF9uYW1lKQorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwgbWV0aF9uYW1lKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgbWV0aG9kKCdpbXBvcnRsaWInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ2ltcG9ydGxpYicpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoTG9hZGVyVGVzdHMsIEluc3BlY3RMb2FkZXJUZXN0cykKK0Zyb3plbl9JTFRlc3RzLCBTb3VyY2VfSUxUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEluc3BlY3RMb2FkZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vX19pbml0X18ucHkKaW5kZXggMzY2ZTUzMS4uNGIxNmVjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL19faW5pdF9fLnB5CkBAIC0xLDEzICsxLDUgQEAKLWZyb20gLi4gaW1wb3J0IHRlc3Rfc3VpdGUKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGxvYWRfcGFja2FnZV90ZXN0cwogCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgIHJldHVybiB0ZXN0X3N1aXRlKCdpbXBvcnRsaWIudGVzdC5pbXBvcnRfJywgZGlyZWN0b3J5KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTIzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSAuIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZjgwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weQpAQCAtMCwwICsxLDcwIEBACitmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIC4uIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKKworCitjbGFzcyBTcGVjTG9hZGVyTW9jazoKKworICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICByZXR1cm4gbWFjaGluZXJ5Lk1vZHVsZVNwZWMoZnVsbG5hbWUsIHNlbGYpCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFNwZWNMb2FkZXJBdHRyaWJ1dGVUZXN0czoKKworICAgIGRlZiB0ZXN0X19fbG9hZGVyX18oc2VsZik6CisgICAgICAgIGxvYWRlciA9IFNwZWNMb2FkZXJNb2NrKCkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ2JsYWgnKSwgdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtsb2FkZXJdKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKworRnJvemVuX1NwZWNUZXN0cywgU291cmNlX1NwZWNUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTcGVjTG9hZGVyQXR0cmlidXRlVGVzdHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworCitjbGFzcyBMb2FkZXJNb2NrOgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gc2VsZi5tb2R1bGUKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKworY2xhc3MgTG9hZGVyQXR0cmlidXRlVGVzdHM6CisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fX21pc3Npbmcoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBsb2FkZXIgPSBMb2FkZXJNb2NrKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3RfX19sb2FkZXJfX19pc19Ob25lKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCisgICAgICAgIGxvYWRlciA9IExvYWRlck1vY2soKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdibGFoJyksIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbG9hZGVyXSk6CisgICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCisKKworRnJvemVuX1Rlc3RzLCBTb3VyY2VfVGVzdHMgPSB1dGlsLnRlc3RfYm90aChMb2FkZXJBdHRyaWJ1dGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKaW5kZXggNzgzY2RlMS4uMmUxOTcyNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQpAQCAtOSw3ICs5LDcgQEAKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAogCiAKLWNsYXNzIFVzaW5nX19wYWNrYWdlX18odW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVXNpbmdfX3BhY2thZ2VfXzoKIAogICAgICIiIlVzZSBvZiBfX3BhY2thZ2VfXyBzdXBlcmNlZGVzIHRoZSB1c2Ugb2YgX19uYW1lX18vX19wYXRoX18gdG8gY2FsY3VsYXRlCiAgICAgd2hhdCBwYWNrYWdlIGEgbW9kdWxlIGJlbG9uZ3MgdG8uIFRoZSBiYXNpYyBhbGdvcml0aG0gaXMgW19fcGFja2FnZV9fXTo6CkBAIC0zNiwxMCArMzYsMTAgQEAKIAogICAgIGRlZiB0ZXN0X3VzaW5nX19fcGFja2FnZV9fKHNlbGYpOgogICAgICAgICAjIFtfX3BhY2thZ2VfX10KLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuZmFrZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLmZha2UnKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuZmFrZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPXsnX19wYWNrYWdlX18nOiAncGtnLmZha2UnfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKQEAgLTQ5LDEwICs0OSwxMCBAQAogICAgICAgICBnbG9iYWxzXyA9IHsnX19uYW1lX18nOiAncGtnLmZha2UnLCAnX19wYXRoX18nOiBbXX0KICAgICAgICAgaWYgcGFja2FnZV9hc19Ob25lOgogICAgICAgICAgICAgZ2xvYmFsc19bJ19fcGFja2FnZV9fJ10gPSBOb25lCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuZmFrZScpIGFzIGltcG9ydGVyOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLmZha2UnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5mYWtlJykKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxzPSBnbG9iYWxzXywKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5mYWtlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbHM9IGdsb2JhbHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAKQEAgLTYzLDE2ICs2MywyNyBAQAogICAgIGRlZiB0ZXN0X2JhZF9fcGFja2FnZV9fKHNlbGYpOgogICAgICAgICBnbG9iYWxzID0geydfX3BhY2thZ2VfXyc6ICc8bm90IHJlYWw+J30KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCiAKICAgICBkZWYgdGVzdF9idW5rX19wYWNrYWdlX18oc2VsZik6CiAgICAgICAgIGdsb2JhbHMgPSB7J19fcGFja2FnZV9fJzogNDJ9CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKKworY2xhc3MgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMihVc2luZ19fcGFja2FnZV9fKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfbW9kdWxlcworCitGcm96ZW5fVXNpbmdQYWNrYWdlUEVQMzAyLCBTb3VyY2VfVXNpbmdQYWNrYWdlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFVzaW5nX19wYWNrYWdlX19QRVAzMDIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworY2xhc3MgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMihVc2luZ19fcGFja2FnZV9fKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfc3BlYworCitGcm96ZW5fVXNpbmdQYWNrYWdlUEVQNDUxLCBTb3VyY2VfVXNpbmdQYWNrYWdlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFVzaW5nX19wYWNrYWdlX19QRVAzMDIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAogCi1AaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKLWNsYXNzIFNldHRpbmdfX3BhY2thZ2VfXyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTZXR0aW5nX19wYWNrYWdlX186CiAKICAgICAiIiJCZWNhdXNlIF9fcGFja2FnZV9fIGlzIGEgbmV3IGZlYXR1cmUsIGl0IGlzIG5vdCBhbHdheXMgc2V0IGJ5IGEgbG9hZGVyLgogICAgIEltcG9ydCB3aWxsIHNldCBpdCBhcyBuZWVkZWQgdG8gaGVscCB3aXRoIHRoZSB0cmFuc2l0aW9uIHRvIHJlbHlpbmcgb24KQEAgLTg0LDM2ICs5NSwzOSBAQAogCiAgICAgIiIiCiAKKyAgICBfX2ltcG9ydF9fID0gaW1wb3J0X3V0aWwuX19pbXBvcnRfX1sxXQorCiAgICAgIyBbdG9wLWxldmVsXQogICAgIGRlZiB0ZXN0X3RvcF9sZXZlbChzZWxmKToKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJykgYXMgbW9jazoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgZGVsIG1vY2tbJ3RvcF9sZXZlbCddLl9fcGFja2FnZV9fCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygndG9wX2xldmVsJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3RvcF9sZXZlbCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sICcnKQogCiAgICAgIyBbcGFja2FnZV0KICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nKSBhcyBtb2NrOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBkZWwgbW9ja1sncGtnJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJ3BrZycpCiAKICAgICAjIFtzdWJtb2R1bGVdCiAgICAgZGVmIHRlc3Rfc3VibW9kdWxlKHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZCcpIGFzIG1vY2s6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgZGVsIG1vY2tbJ3BrZy5tb2QnXS5fX3BhY2thZ2VfXwotICAgICAgICAgICAgICAgIHBrZyA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2QnKQorICAgICAgICAgICAgICAgIHBrZyA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZCcpCiAgICAgICAgICAgICAgICAgbW9kdWxlID0gZ2V0YXR0cihwa2csICdtb2QnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAncGtnJykKIAorY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fUEVQMzAyKFNldHRpbmdfX3BhY2thZ2VfXywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19tb2R1bGVzCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFVzaW5nX19wYWNrYWdlX18sIFNldHRpbmdfX3BhY2thZ2VfXykKK2NsYXNzIFNldHRpbmdfX3BhY2thZ2VfX1BFUDQ1MShTZXR0aW5nX19wYWNrYWdlX18sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfc3BlYwogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CmluZGV4IDNkNGNkOTQuLjQzOWMxMDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQpAQCAtMSwyMyArMSw0MSBAQAotZnJvbSAuLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRsaWJfdGVzdF91dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwKLWltcG9ydCBpbXAKK2Zyb20gLi4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAorCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCitQS0dfTkFNRSA9ICdmaW5lJworU1VCTU9EX05BTUUgPSAnZmluZS5ib2d1cycKIAotY2xhc3MgQmFkTG9hZGVyRmluZGVyOgotICAgIGJhZCA9ICdmaW5lLmJvZ3VzJworCitjbGFzcyBCYWRTcGVjRmluZGVyTG9hZGVyOgogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgaWYgZnVsbG5hbWUgPT0gY2xzLmJhZDoKLSAgICAgICAgICAgIHJldHVybiBjbHMKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbG9hZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lID09IGNscy5iYWQ6CisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgPT0gU1VCTU9EX05BTUU6CisgICAgICAgICAgICBzcGVjID0gbWFjaGluZXJ5Lk1vZHVsZVNwZWMoZnVsbG5hbWUsIGNscykKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4ZWNfbW9kdWxlKG1vZHVsZSk6CisgICAgICAgIGlmIG1vZHVsZS5fX25hbWVfXyA9PSBTVUJNT0RfTkFNRToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdJIGNhbm5vdCBiZSBsb2FkZWQhJykKIAogCi1jbGFzcyBBUElUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJhZExvYWRlckZpbmRlcjoKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgICAgIGlmIGZ1bGxuYW1lID09IFNVQk1PRF9OQU1FOgorICAgICAgICAgICAgcmV0dXJuIGNscworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGxvYWRfbW9kdWxlKGNscywgZnVsbG5hbWUpOgorICAgICAgICBpZiBmdWxsbmFtZSA9PSBTVUJNT0RfTkFNRToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdJIGNhbm5vdCBiZSBsb2FkZWQhJykKKworCitjbGFzcyBBUElUZXN0OgogCiAgICAgIiIiVGVzdCBBUEktc3BlY2lmaWMgZGV0YWlscyBmb3IgX19pbXBvcnRfXyAoZS5nLiByYWlzaW5nIHRoZSByaWdodAogICAgIGV4Y2VwdGlvbiB3aGVuIHBhc3NpbmcgaW4gYW4gaW50IGZvciB0aGUgbW9kdWxlIG5hbWUpLiIiIgpAQCAtMjUsNDMgKzQzLDUyIEBACiAgICAgZGVmIHRlc3RfbmFtZV9yZXF1aXJlc19ycGFyaXRpb24oc2VsZik6CiAgICAgICAgICMgUmFpc2UgVHlwZUVycm9yIGlmIGEgbm9uLXN0cmluZyBpcyBwYXNzZWQgaW4gZm9yIHRoZSBtb2R1bGUgbmFtZS4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5pbXBvcnRfKDQyKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKDQyKQogCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVfbGV2ZWwoc2VsZik6CiAgICAgICAgICMgUmFpc2UgVmFsdWVFcnJvciB3aGVuIGEgbmVnYXRpdmUgbGV2ZWwgaXMgc3BlY2lmaWVkLgogICAgICAgICAjIFBFUCAzMjggZGlkIGF3YXkgd2l0aCBzeXMubW9kdWxlIE5vbmUgZW50cmllcyBhbmQgdGhlIGFtYmlndWl0eSBvZgogICAgICAgICAjIGFic29sdXRlL3JlbGF0aXZlIGltcG9ydHMuCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICB1dGlsLmltcG9ydF8oJ29zJywgZ2xvYmFscygpLCBsZXZlbD0tMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnb3MnLCBnbG9iYWxzKCksIGxldmVsPS0xKQogCiAgICAgZGVmIHRlc3Rfbm9uZXhpc3RlbnRfZnJvbWxpc3RfZW50cnkoc2VsZik6CiAgICAgICAgICMgSWYgc29tZXRoaW5nIGluIGZyb21saXN0IGRvZXNuJ3QgZXhpc3QsIHRoYXQncyBva2F5LgogICAgICAgICAjIGlzc3VlMTU3MTUKLSAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUoJ2ZpbmUnKQorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKFBLR19OQU1FKQogICAgICAgICBtb2QuX19wYXRoX18gPSBbJ1hYWCddCi0gICAgICAgIHdpdGggaW1wb3J0bGliX3Rlc3RfdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtCYWRMb2FkZXJGaW5kZXJdKToKLSAgICAgICAgICAgIHdpdGggaW1wb3J0bGliX3Rlc3RfdXRpbC51bmNhY2hlKCdmaW5lJyk6Ci0gICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2ZpbmUnXSA9IG1vZAotICAgICAgICAgICAgICAgIHV0aWwuaW1wb3J0XygnZmluZScsIGZyb21saXN0PVsnbm90IGhlcmUnXSkKKyAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuYmFkX2ZpbmRlcl9sb2FkZXJdKToKKyAgICAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKFBLR19OQU1FKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tQS0dfTkFNRV0gPSBtb2QKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oUEtHX05BTUUsIGZyb21saXN0PVsnbm90IGhlcmUnXSkKIAogICAgIGRlZiB0ZXN0X2Zyb21saXN0X2xvYWRfZXJyb3JfcHJvcGFnYXRlcyhzZWxmKToKICAgICAgICAgIyBJZiBzb21ldGhpbmcgaW4gZnJvbWxpc3QgdHJpZ2dlcnMgYW4gZXhjZXB0aW9uIG5vdCByZWxhdGVkIHRvIG5vdAogICAgICAgICAjIGV4aXN0aW5nLCBsZXQgdGhhdCBleGNlcHRpb24gcHJvcGFnYXRlLgogICAgICAgICAjIGlzc3VlMTUzMTYKLSAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUoJ2ZpbmUnKQorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKFBLR19OQU1FKQogICAgICAgICBtb2QuX19wYXRoX18gPSBbJ1hYWCddCi0gICAgICAgIHdpdGggaW1wb3J0bGliX3Rlc3RfdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtCYWRMb2FkZXJGaW5kZXJdKToKLSAgICAgICAgICAgIHdpdGggaW1wb3J0bGliX3Rlc3RfdXRpbC51bmNhY2hlKCdmaW5lJyk6Ci0gICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2ZpbmUnXSA9IG1vZAorICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5iYWRfZmluZGVyX2xvYWRlcl0pOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoUEtHX05BTUUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW1BLR19OQU1FXSA9IG1vZAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgICAgICAgICB1dGlsLmltcG9ydF8oJ2ZpbmUnLCBmcm9tbGlzdD1bJ2JvZ3VzJ10pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhQS0dfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVtTVUJNT0RfTkFNRS5ycGFydGl0aW9uKCcuJylbLTFdXSkKIAogCitjbGFzcyBPbGRBUElUZXN0cyhBUElUZXN0KToKKyAgICBiYWRfZmluZGVyX2xvYWRlciA9IEJhZExvYWRlckZpbmRlcgogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChBUElUZXN0KQorRnJvemVuX09sZEFQSVRlc3RzLCBTb3VyY2VfT2xkQVBJVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgT2xkQVBJVGVzdHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworCitjbGFzcyBTcGVjQVBJVGVzdHMoQVBJVGVzdCk6CisgICAgYmFkX2ZpbmRlcl9sb2FkZXIgPSBCYWRTcGVjRmluZGVyTG9hZGVyCisKK0Zyb3plbl9TcGVjQVBJVGVzdHMsIFNvdXJjZV9TcGVjQVBJVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU3BlY0FQSVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQppbmRleCAyMDczNzhhLi5jMjkyZWU0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQpAQCAtNiw3ICs2LDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFVzZUNhY2hlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFVzZUNhY2hlOgogCiAgICAgIiIiV2hlbiBpdCBjb21lcyB0byBzeXMubW9kdWxlcywgaW1wb3J0IHByZWZlcnMgaXQgb3ZlciBhbnl0aGluZyBlbHNlLgogCkBAIC0yMSwxMiArMjEsMTMgQEAKICAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgW05vbmUgaW4gY2FjaGVdLgogCiAgICAgIiIiCisKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZShzZWxmKToKICAgICAgICAgIyBbdXNlIGNhY2hlXQogICAgICAgICBtb2R1bGVfdG9fdXNlID0gInNvbWUgbW9kdWxlIGZvdW5kISIKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NvbWVfbW9kdWxlJyk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1snc29tZV9tb2R1bGUnXSA9IG1vZHVsZV90b191c2UKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3NvbWVfbW9kdWxlJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnc29tZV9tb2R1bGUnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChtb2R1bGVfdG9fdXNlKSwgaWQobW9kdWxlKSkKIAogICAgIGRlZiB0ZXN0X05vbmVfaW5fY2FjaGUoc2VsZik6CkBAIC0zNSw5ICszNiwxOSBAQAogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gTm9uZQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XyhuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbmFtZSkKIAorRnJvemVuX1VzZUNhY2hlLCBTb3VyY2VfVXNlQ2FjaGUgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgVXNlQ2FjaGUsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworCitjbGFzcyBJbXBvcnRsaWJVc2VDYWNoZShVc2VDYWNoZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBQZXJ0aW5lbnQgb25seSB0byBQRVAgMzAyOyBleGVjX21vZHVsZSgpIGRvZXNuJ3QgcmV0dXJuIGEgbW9kdWxlLgorCisgICAgX19pbXBvcnRfXyA9IGltcG9ydF91dGlsLl9faW1wb3J0X19bMV0KKwogICAgIGRlZiBjcmVhdGVfbW9jayhzZWxmLCAqbmFtZXMsIHJldHVybl89Tm9uZSk6CiAgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygqbmFtZXMpCiAgICAgICAgIG9yaWdpbmFsX2xvYWQgPSBtb2NrLmxvYWRfbW9kdWxlCkBAIC00OSw0MCArNjAsMzMgQEAKIAogICAgICMgX19pbXBvcnRfXyBpbmNvbnNpc3RlbnQgYmV0d2VlbiBsb2FkZXJzIGFuZCBidWlsdC1pbiBpbXBvcnQgd2hlbiBpdCBjb21lcwogICAgICMgICB0byB3aGVuIHRvIHVzZSB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzIGFuZCB3aGVuIG5vdCB0by4KLSAgICBAaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZV9hZnRlcl9sb2FkZXIoc2VsZik6CiAgICAgICAgICMgW2Zyb20gY2FjaGUgb24gcmV0dXJuXQogICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX21vY2soJ21vZHVsZScpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlKSwgaWQoc3lzLm1vZHVsZXNbJ21vZHVsZSddKSkKIAogICAgICMgU2VlIHRlc3RfdXNpbmdfY2FjaGVfYWZ0ZXJfbG9hZGVyKCkgZm9yIHJlYXNvbmluZy4KLSAgICBAaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZV9mb3JfYXNzaWduaW5nX3RvX2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgIyBbZnJvbSBjYWNoZSB0byBhdHRyaWJ1dGVdCiAgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfbW9jaygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChtb2R1bGUubW9kdWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKHN5cy5tb2R1bGVzWydwa2cubW9kdWxlJ10pKQogCiAgICAgIyBTZWUgdGVzdF91c2luZ19jYWNoZV9hZnRlcl9sb2FkZXIoKSBmb3IgcmVhc29uaW5nLgotICAgIEBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQogICAgIGRlZiB0ZXN0X3VzaW5nX2NhY2hlX2Zvcl9mcm9tbGlzdChzZWxmKToKICAgICAgICAgIyBbZnJvbSBjYWNoZSBmb3IgZnJvbWxpc3RdCiAgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfbW9jaygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlLm1vZHVsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZChzeXMubW9kdWxlc1sncGtnLm1vZHVsZSddKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChVc2VDYWNoZSkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CmluZGV4IGMxNmMzMzcuLmE3NTViNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKQEAgLTEsMTAgKzEsMTAgQEAKICIiIlRlc3QgdGhhdCB0aGUgc2VtYW50aWNzIHJlbGF0aW5nIHRvIHRoZSAnZnJvbWxpc3QnIGFyZ3VtZW50IGFyZSBjb3JyZWN0LiIiIgogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCi1pbXBvcnQgaW1wCiBpbXBvcnQgdW5pdHRlc3QKIAotY2xhc3MgUmV0dXJuVmFsdWUodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBSZXR1cm5WYWx1ZToKIAogICAgICIiIlRoZSB1c2Ugb2YgZnJvbWxpc3QgaW5mbHVlbmNlcyB3aGF0IGltcG9ydCByZXR1cm5zLgogCkBAIC0xNywyMCArMTcsMjMgQEAKIAogICAgIGRlZiB0ZXN0X3JldHVybl9mcm9tX2ltcG9ydChzZWxmKToKICAgICAgICAgIyBbaW1wb3J0IHJldHVybl0KLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogCiAgICAgZGVmIHRlc3RfcmV0dXJuX2Zyb21fZnJvbV9pbXBvcnQoc2VsZik6CiAgICAgICAgICMgW2Zyb20gcmV0dXJuXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cubW9kdWxlJykKIAorRnJvemVuX1JldHVyblZhbHVlLCBTb3VyY2VfUmV0dXJuVmFsdWUgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmV0dXJuVmFsdWUsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotY2xhc3MgSGFuZGxpbmdGcm9tbGlzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIEhhbmRsaW5nRnJvbWxpc3Q6CiAKICAgICAiIiJVc2luZyBmcm9tbGlzdCB0cmlnZ2VycyBkaWZmZXJlbnQgYWN0aW9ucyBiYXNlZCBvbiB3aGF0IGlzIGJlaW5nIGFza2VkCiAgICAgb2YgaXQuCkBAIC00OSwyMiArNTIsMjIgQEAKICAgICAgICAgIyBbb2JqZWN0IGNhc2VdCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ21vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ2F0dHInXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ21vZHVsZScpCiAKICAgICBkZWYgdGVzdF9ub25leGlzdGVudF9vYmplY3Qoc2VsZik6CiAgICAgICAgICMgW2JhZCBvYmplY3RdCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ21vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kdWxlJywgZnJvbWxpc3Q9Wydub25fZXhpc3RlbnQnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ21vZHVsZScsIGZyb21saXN0PVsnbm9uX2V4aXN0ZW50J10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdtb2R1bGUnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdub25fZXhpc3RlbnQnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnbm9uX2V4aXN0ZW50JykpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfZnJvbV9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFttb2R1bGVdCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZHVsZScpCkBAIC03OSwxMyArODIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3BrZy5tb2QnOiBtb2R1bGVfY29kZX0pIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6CiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZCddKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaV9kb19ub3RfZXhpc3QnLCBleGMuZXhjZXB0aW9uLm5hbWUpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kJywgZnJvbWxpc3Q9WycnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2QnLCBmcm9tbGlzdD1bJyddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZCcpCiAKICAgICBkZWYgYmFzaWNfc3Rhcl90ZXN0KHNlbGYsIGZyb21saXN0PVsnKiddKToKQEAgLTkzLDcgKzk2LDcgQEAKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBtb2NrWydwa2cnXS5fX2FsbF9fID0gWydtb2R1bGUnXQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PWZyb21saXN0KQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9ZnJvbWxpc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2R1bGUnKQpAQCAtMTExLDE3ICsxMTQsMTYgQEAKICAgICAgICAgd2l0aCBjb250ZXh0IGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIG1vY2tbJ3BrZyddLl9fYWxsX18gPSBbJ21vZHVsZTEnXQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlMicsICcqJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZTInLCAnKiddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUxJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlMicpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZTEuX19uYW1lX18sICdwa2cubW9kdWxlMScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlMi5fX25hbWVfXywgJ3BrZy5tb2R1bGUyJykKIAorRnJvemVuX0Zyb21MaXN0LCBTb3VyY2VfRnJvbUxpc3QgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgSGFuZGxpbmdGcm9tbGlzdCwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChSZXR1cm5WYWx1ZSwgSGFuZGxpbmdGcm9tbGlzdCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkKaW5kZXggNGQ4NWY4MC4uNWVlYjE0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5CkBAIC03LDcgKzcsNyBAQAogaW1wb3J0IHdhcm5pbmdzCiAKIAotY2xhc3MgQ2FsbGluZ09yZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENhbGxpbmdPcmRlcjoKIAogICAgICIiIkNhbGxzIHRvIHRoZSBpbXBvcnRlcnMgb24gc3lzLm1ldGFfcGF0aCBoYXBwZW4gaW4gb3JkZXIgdGhhdCB0aGV5IGFyZQogICAgIHNwZWNpZmllZCBpbiB0aGUgc2VxdWVuY2UsIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGltcG9ydGVyCkBAIC0xOCwyMyArMTgsMTggQEAKICAgICBkZWYgdGVzdF9maXJzdF9jYWxsZWQoc2VsZik6CiAgICAgICAgICMgW2ZpcnN0IGNhbGxlZF0KICAgICAgICAgbW9kID0gJ3RvcF9sZXZlbCcKLSAgICAgICAgZmlyc3QgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2QpCi0gICAgICAgIHNlY29uZCA9IHV0aWwubW9ja19tb2R1bGVzKG1vZCkKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhtb2QpIGFzIGZpcnN0LCB1dGlsLm1vY2tfbW9kdWxlcyhtb2QpIGFzIHNlY29uZDoKLSAgICAgICAgICAgIGZpcnN0Lm1vZHVsZXNbbW9kXSA9IDQyCi0gICAgICAgICAgICBzZWNvbmQubW9kdWxlc1ttb2RdID0gLTEzCisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMobW9kKSBhcyBmaXJzdCwgdXRpbC5tb2NrX3NwZWMobW9kKSBhcyBzZWNvbmQ6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bZmlyc3QsIHNlY29uZF0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2QpLCA0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuX19pbXBvcnRfXyhtb2QpLCBmaXJzdC5tb2R1bGVzW21vZF0pCiAKICAgICBkZWYgdGVzdF9jb250aW51aW5nKHNlbGYpOgogICAgICAgICAjIFtjb250aW51aW5nXQogICAgICAgICBtb2RfbmFtZSA9ICdmb3JfcmVhbCcKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygnbm9uZXhpc3RlbnQnKSBhcyBmaXJzdCwgXAotICAgICAgICAgICAgIHV0aWwubW9ja19tb2R1bGVzKG1vZF9uYW1lKSBhcyBzZWNvbmQ6Ci0gICAgICAgICAgICBmaXJzdC5maW5kX21vZHVsZSA9IGxhbWJkYSBzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lOiBOb25lCi0gICAgICAgICAgICBzZWNvbmQubW9kdWxlc1ttb2RfbmFtZV0gPSA0MgorICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKCdub25leGlzdGVudCcpIGFzIGZpcnN0LCBcCisgICAgICAgICAgICAgdXRpbC5tb2NrX3NwZWMobW9kX25hbWUpIGFzIHNlY29uZDoKKyAgICAgICAgICAgIGZpcnN0LmZpbmRfc3BlYyA9IGxhbWJkYSBzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCBwYXJlbnQ9Tm9uZTogTm9uZQogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ZpcnN0LCBzZWNvbmRdKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydF91dGlsLmltcG9ydF8obW9kX25hbWUpLCA0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuX19pbXBvcnRfXyhtb2RfbmFtZSksIHNlY29uZC5tb2R1bGVzW21vZF9uYW1lXSkKIAogICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgogICAgICAgICAjIFJhaXNlIGFuIEltcG9ydFdhcm5pbmcgaWYgc3lzLm1ldGFfcGF0aCBpcyBlbXB0eS4KQEAgLTQ2LDQxICs0MSw0MiBAQAogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bXSk6CiAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgogICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignYWx3YXlzJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fZmluZF9tb2R1bGUoJ25vdGhpbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fZmluZF9zcGVjKCdub3RoaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHdbLTFdLmNhdGVnb3J5LCBJbXBvcnRXYXJuaW5nKSkKIAorRnJvemVuX0NhbGxpbmdPcmRlciwgU291cmNlX0NhbGxpbmdPcmRlciA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBDYWxsaW5nT3JkZXIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotY2xhc3MgQ2FsbFNpZ25hdHVyZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIENhbGxTaWduYXR1cmU6CiAKICAgICAiIiJJZiB0aGVyZSBpcyBubyBfX3BhdGhfXyBlbnRyeSBvbiB0aGUgcGFyZW50IG1vZHVsZSwgdGhlbiAncGF0aCcgaXMgTm9uZQogICAgIFtubyBwYXRoXS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgZm9yIF9fcGF0aF9fIGlzIHBhc3NlZCBpbiBmb3IgdGhlICdwYXRoJwogICAgIGFyZ3VtZW50IFtwYXRoIHNldF0uIiIiCiAKLSAgICBkZWYgbG9nKHNlbGYsIGZ4bik6CisgICAgZGVmIGxvZ19maW5kZXIoc2VsZiwgaW1wb3J0ZXIpOgorICAgICAgICBmeG4gPSBnZXRhdHRyKGltcG9ydGVyLCBzZWxmLmZpbmRlcl9uYW1lKQogICAgICAgICBsb2cgPSBbXQogICAgICAgICBkZWYgd3JhcHBlcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgbG9nLmFwcGVuZChbYXJncywga3dhcmdzXSkKICAgICAgICAgICAgIHJldHVybiBmeG4oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICByZXR1cm4gbG9nLCB3cmFwcGVyCiAKLQogICAgIGRlZiB0ZXN0X25vX3BhdGgoc2VsZik6CiAgICAgICAgICMgW25vIHBhdGhdCiAgICAgICAgIG1vZF9uYW1lID0gJ3RvcF9sZXZlbCcKICAgICAgICAgYXNzZXJ0ICcuJyBub3QgaW4gbW9kX25hbWUKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhtb2RfbmFtZSkgYXMgaW1wb3J0ZXI6Ci0gICAgICAgICAgICBsb2csIHdyYXBwZWRfY2FsbCA9IHNlbGYubG9nKGltcG9ydGVyLmZpbmRfbW9kdWxlKQotICAgICAgICAgICAgaW1wb3J0ZXIuZmluZF9tb2R1bGUgPSBNZXRob2RUeXBlKHdyYXBwZWRfY2FsbCwgaW1wb3J0ZXIpCisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMobW9kX25hbWUpIGFzIGltcG9ydGVyOgorICAgICAgICAgICAgbG9nLCB3cmFwcGVkX2NhbGwgPSBzZWxmLmxvZ19maW5kZXIoaW1wb3J0ZXIpCisgICAgICAgICAgICBzZXRhdHRyKGltcG9ydGVyLCBzZWxmLmZpbmRlcl9uYW1lLCBNZXRob2RUeXBlKHdyYXBwZWRfY2FsbCwgaW1wb3J0ZXIpKQogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihsb2cpID09IDEKICAgICAgICAgICAgICAgICBhcmdzID0gbG9nWzBdWzBdCiAgICAgICAgICAgICAgICAga3dhcmdzID0gbG9nWzBdWzFdCiAgICAgICAgICAgICAgICAgIyBBc3N1bWluZyBhbGwgYXJndW1lbnRzIGFyZSBwb3NpdGlvbmFsLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyZ3MpLCAyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGt3YXJncyksIDApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzWzBdLCBtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhcmdzWzFdKQogCkBAIC05MCwyNiArODYsMzQgQEAKICAgICAgICAgbW9kX25hbWUgPSBwa2dfbmFtZSArICcubW9kdWxlJwogICAgICAgICBwYXRoID0gWzQyXQogICAgICAgICBhc3NlcnQgJy4nIGluIG1vZF9uYW1lCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX25hbWUrJy5fX2luaXRfXycsIG1vZF9uYW1lKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcyhwa2dfbmFtZSsnLl9faW5pdF9fJywgbW9kX25hbWUpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgaW1wb3J0ZXIubW9kdWxlc1twa2dfbmFtZV0uX19wYXRoX18gPSBwYXRoCi0gICAgICAgICAgICBsb2csIHdyYXBwZWRfY2FsbCA9IHNlbGYubG9nKGltcG9ydGVyLmZpbmRfbW9kdWxlKQotICAgICAgICAgICAgaW1wb3J0ZXIuZmluZF9tb2R1bGUgPSBNZXRob2RUeXBlKHdyYXBwZWRfY2FsbCwgaW1wb3J0ZXIpCisgICAgICAgICAgICBsb2csIHdyYXBwZWRfY2FsbCA9IHNlbGYubG9nX2ZpbmRlcihpbXBvcnRlcikKKyAgICAgICAgICAgIHNldGF0dHIoaW1wb3J0ZXIsIHNlbGYuZmluZGVyX25hbWUsIE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikpCiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZF9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGxvZykgPT0gMgogICAgICAgICAgICAgICAgIGFyZ3MgPSBsb2dbMV1bMF0KICAgICAgICAgICAgICAgICBrd2FyZ3MgPSBsb2dbMV1bMV0KICAgICAgICAgICAgICAgICAjIEFzc3VtaW5nIGFsbCBhcmd1bWVudHMgYXJlIHBvc2l0aW9uYWwuCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBrd2FyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrd2FyZ3MpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzWzBdLCBtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGFyZ3NbMV0sIHBhdGgpCiAKK2NsYXNzIENhbGxTaWduYXR1cmVQRVAzMDIoQ2FsbFNpZ25hdHVyZSk6CisgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX21vZHVsZXMKKyAgICBmaW5kZXJfbmFtZSA9ICdmaW5kX21vZHVsZScKIAorRnJvemVuX0NhbGxTaWduYXR1cmVQRVAzMDIsIFNvdXJjZV9DYWxsU2lnbmF0dXJlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIENhbGxTaWduYXR1cmVQRVAzMDIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoQ2FsbGluZ09yZGVyLCBDYWxsU2lnbmF0dXJlKQorY2xhc3MgQ2FsbFNpZ25hdHVyZVBFUDQ1MShDYWxsU2lnbmF0dXJlKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfc3BlYworICAgIGZpbmRlcl9uYW1lID0gJ2ZpbmRfc3BlYycKKworRnJvemVuX0NhbGxTaWduYXR1cmVQRVA0NTEsIFNvdXJjZV9DYWxsU2lnbmF0dXJlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIENhbGxTaWduYXR1cmVQRVA0NTEsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKaW5kZXggYmZhMThkYy4uNTVhNWQxNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQpAQCAtNiwzNyArNiwzNyBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIAotY2xhc3MgUGFyZW50TW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGFyZW50TW9kdWxlVGVzdHM6CiAKICAgICAiIiJJbXBvcnRpbmcgYSBzdWJtb2R1bGUgc2hvdWxkIGltcG9ydCB0aGUgcGFyZW50IG1vZHVsZXMuIiIiCiAKICAgICBkZWYgdGVzdF9pbXBvcnRfcGFyZW50KHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIG1vY2s6CisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwa2cnLCBzeXMubW9kdWxlcykKIAogICAgIGRlZiB0ZXN0X2JhZF9wYXJlbnQoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgorICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKCdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdwa2cnKQogCiAgICAgZGVmIHRlc3RfcmFpc2luZ19wYXJlbnRfYWZ0ZXJfaW1wb3J0aW5nX2NoaWxkKHNlbGYpOgogICAgICAgICBkZWYgX19pbml0X18oKToKICAgICAgICAgICAgIGltcG9ydCBwa2cubW9kdWxlCiAgICAgICAgICAgICAxLzAKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScsCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydwa2cnOiBfX2luaXRfX30pCiAgICAgICAgIHdpdGggbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKIApAQCAtNDQsMTcgKzQ0LDE3IEBACiAgICAgICAgIGRlZiBfX2luaXRfXygpOgogICAgICAgICAgICAgZnJvbSAuIGltcG9ydCBtb2R1bGUKICAgICAgICAgICAgIDEvMAotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJywKKyAgICAgICAgbW9jayA9IHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3BrZyc6IF9faW5pdF9ffSkKICAgICAgICAgd2l0aCBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHJhaXNlcyBJbXBvcnRFcnJvciBvbiB0aGUgImZyb20gLiBpbXBvcnQgbW9kdWxlIgogICAgICAgICAgICAgICAgICAgICAjIGxpbmUsIG5vdCBzdXJlIHdoeS4KLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFplcm9EaXZpc2lvbkVycm9yLCBJbXBvcnRFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICAjIFhYWCBGYWxzZQogICAgICAgICAgICAgICAgICNzZWxmLmFzc2VydEluKCdwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIGRlZiBfX2luaXRfXygpOgogICAgICAgICAgICAgZnJvbSAuLnN1YnBrZyBpbXBvcnQgbW9kdWxlCiAgICAgICAgICAgICAxLzAKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLnN1YnBrZy5fX2luaXRfXycsCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5zdWJwa2cuX19pbml0X18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZy5zdWJwa2cubW9kdWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsncGtnLnN1YnBrZyc6IF9faW5pdF9ffSkKICAgICAgICAgd2l0aCBtb2NrOgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIEltcG9ydEVycm9yKSk6CiAgICAgICAgICAgICAgICAgICAgICMgVGhpcyByYWlzZXMgSW1wb3J0RXJyb3Igb24gdGhlICJmcm9tIC4uc3VicGtnIGltcG9ydCBtb2R1bGUiCiAgICAgICAgICAgICAgICAgICAgICMgbGluZSwgbm90IHN1cmUgd2h5LgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cuc3VicGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuc3VicGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cuc3VicGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIEltcG9ydEVycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5zdWJwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuc3VicGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnLnN1YnBrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgICMgWFhYIEZhbHNlCiAgICAgICAgICAgICAgICAgI3NlbGYuYXNzZXJ0SW4oJ3BrZy5zdWJwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICMgVHJ5IHRvIGltcG9ydCBhIHN1Ym1vZHVsZSBmcm9tIGEgbm9uLXBhY2thZ2Ugc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yLgogICAgICAgICBhc3NlcnQgbm90IGhhc2F0dHIoc3lzLCAnX19wYXRoX18nKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3N5cy5ub19zdWJtb2R1bGVzX2hlcmUnKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdzeXMubm9fc3VibW9kdWxlc19oZXJlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ3N5cy5ub19zdWJtb2R1bGVzX2hlcmUnKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX25vdF9wYWNrYWdlX2J1dF9zaWRlX2VmZmVjdHMoc2VsZik6CkBAIC05MywyMCArOTMsMTggQEAKICAgICAgICAgc3VibmFtZSA9IG5hbWUgKyAnLmInCiAgICAgICAgIGRlZiBtb2R1bGVfaW5qZWN0aW9uKCk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tzdWJuYW1lXSA9ICd0b3RhbCBidW5rJwotICAgICAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfbW9kdWxlcygnbW9kJywKKyAgICAgICAgbW9ja19zcGVjID0gdXRpbC5tb2NrX3NwZWMoJ21vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsnbW9kJzogbW9kdWxlX2luamVjdGlvbn0pCi0gICAgICAgIHdpdGggbW9ja19tb2R1bGVzIGFzIG1vY2s6CisgICAgICAgIHdpdGggbW9ja19zcGVjIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XyhzdWJuYW1lKQorICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oc3VibmFtZSkKICAgICAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubG9hZChzdWJuYW1lKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhcmVudE1vZHVsZVRlc3RzKQorRnJvemVuX1BhcmVudFRlc3RzLCBTb3VyY2VfUGFyZW50VGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUGFyZW50TW9kdWxlVGVzdHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5CmluZGV4IGQ4MmI3ZjYuLjEyNzRmOGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5CkBAIC0xLDggKzEsOSBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWZyb20gaW1wb3J0bGliIGltcG9ydCBpbXBvcnRfbW9kdWxlCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKKworaW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCkBAIC0xMSwyNSArMTIsMjUgQEAKIGltcG9ydCB6aXBpbXBvcnQKIAogCi1jbGFzcyBGaW5kZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBGaW5kZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBQYXRoRmluZGVyLiIiIgogCiAgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKLSAgICAgICAgIyBUZXN0IE5vbmUgcmV0dXJuZWQgdXBvbiBub3QgZmluZGluZyBhIHN1aXRhYmxlIGZpbmRlci4KKyAgICAgICAgIyBUZXN0IE5vbmUgcmV0dXJuZWQgdXBvbiBub3QgZmluZGluZyBhIHN1aXRhYmxlIGxvYWRlci4KICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkpCiAKICAgICBkZWYgdGVzdF9zeXNfcGF0aChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgc3lzLnBhdGggaXMgdXNlZCB3aGVuICdwYXRoJyBpcyBOb25lLgogICAgICAgICAjIEltcGxpY2l0bHkgdGVzdHMgdGhhdCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSBpcyB1c2VkLgogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgcGF0aCA9ICc8dGVzdCBwYXRoPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaW1wb3J0ZXJfY2FjaGU9e3BhdGg6IGltcG9ydGVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPVtwYXRoXSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBpbXBvcnRlcikKIAogICAgIGRlZiB0ZXN0X3BhdGgoc2VsZik6CkBAIC0zNywyOSArMzgsMjkgQEAKICAgICAgICAgIyBJbXBsaWNpdGx5IHRlc3RzIHRoYXQgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUgaXMgdXNlZC4KICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHBhdGggPSAnPHRlc3QgcGF0aD4nCi0gICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQorICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19zcGVjKG1vZHVsZSkKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBpbXBvcnRlcn0pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfbGlzdChzZWxmKToKICAgICAgICAgIyBBbiBlbXB0eSBsaXN0IHNob3VsZCBub3QgY291bnQgYXMgYXNraW5nIGZvciBzeXMucGF0aC4KICAgICAgICAgbW9kdWxlID0gJ21vZHVsZScKICAgICAgICAgcGF0aCA9ICc8dGVzdCBwYXRoPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaW1wb3J0ZXJfY2FjaGU9e3BhdGg6IGltcG9ydGVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPVtwYXRoXSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnbW9kdWxlJywgW10pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnbW9kdWxlJywgW10pKQogCiAgICAgZGVmIHRlc3RfcGF0aF9ob29rcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgc3lzLnBhdGhfaG9va3MgaXMgdXNlZC4KICAgICAgICAgIyBUZXN0IHRoYXQgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUgaXMgc2V0LgogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgcGF0aCA9ICc8dGVzdCBwYXRoPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQogICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2socGF0aCwgaW1wb3J0ZXI9aW1wb3J0ZXIpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9ob29rcz1baG9va10pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXRoLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVbcGF0aF0sIGltcG9ydGVyKQpAQCAtNzIsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W3BhdGhfZW50cnldKToKICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CiAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdhbHdheXMnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdvcycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUoJ29zJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVbcGF0aF9lbnRyeV0pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mod1stMV0uY2F0ZWdvcnksIEltcG9ydFdhcm5pbmcpKQpAQCAtODEsMTIgKzgyLDEyIEBACiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyBzaG91bGQgY3JlYXRlIGEgZmluZGVyIHVzaW5nIHRoZSBjd2QuCiAgICAgICAgIHBhdGggPSAnJwogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCi0gICAgICAgIGhvb2sgPSBpbXBvcnRfdXRpbC5tb2NrX3BhdGhfaG9vayhvcy5jdXJkaXIsIGltcG9ydGVyPWltcG9ydGVyKQorICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19zcGVjKG1vZHVsZSkKKyAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKG9zLmdldGN3ZCgpLCBpbXBvcnRlcj1pbXBvcnRlcikKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoPVtwYXRoXSwgcGF0aF9ob29rcz1baG9va10pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLmN1cmRpciwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLmdldGN3ZCgpLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKIAogICAgIGRlZiB0ZXN0X05vbmVfb25fc3lzX3BhdGgoc2VsZik6CiAgICAgICAgICMgUHV0dGluZyBOb25lIGluIHN5cy5wYXRoWzBdIGNhdXNlZCBhbiBpbXBvcnQgcmVncmVzc2lvbiBmcm9tIFB5dGhvbgpAQCAtOTYsOCArOTcsOCBAQAogICAgICAgICBuZXdfcGF0aF9pbXBvcnRlcl9jYWNoZSA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNvcHkoKQogICAgICAgICBuZXdfcGF0aF9pbXBvcnRlcl9jYWNoZS5wb3AoTm9uZSwgTm9uZSkKICAgICAgICAgbmV3X3BhdGhfaG9va3MgPSBbemlwaW1wb3J0LnppcGltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLkZpbGVGaW5kZXIucGF0aF9ob29rKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKl9ib290c3RyYXAuX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkpXQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpKV0KICAgICAgICAgbWlzc2luZyA9IG9iamVjdCgpCiAgICAgICAgIGVtYWlsID0gc3lzLm1vZHVsZXMucG9wKCdlbWFpbCcsIG1pc3NpbmcpCiAgICAgICAgIHRyeToKQEAgLTEwNSwxNiArMTA2LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9bmV3X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaW1wb3J0ZXJfY2FjaGU9bmV3X3BhdGhfaW1wb3J0ZXJfY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3M9bmV3X3BhdGhfaG9va3MpOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF9tb2R1bGUoJ2VtYWlsJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdlbWFpbCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHVsZSwgTW9kdWxlVHlwZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIGVtYWlsIGlzIG5vdCBtaXNzaW5nOgogICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydlbWFpbCddID0gZW1haWwKIAorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHMsIGltcG9ydGxpYj1pbXBvcnRsaWIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorCitjbGFzcyBQYXRoRW50cnlGaW5kZXJUZXN0czoKKworICAgIGRlZiB0ZXN0X2ZpbmRlcl93aXRoX2ZhaWxpbmdfZmluZF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgUGF0aEVudHJ5RmluZGVyIHdpdGggZmluZF9tb2R1bGUoKSBkZWZpbmVkIHNob3VsZCB3b3JrLgorICAgICAgICAjIElzc3VlICMyMDc2My4KKyAgICAgICAgY2xhc3MgRmluZGVyOgorICAgICAgICAgICAgcGF0aF9sb2NhdGlvbiA9ICd0ZXN0X2ZpbmRlcl93aXRoX2ZpbmRfbW9kdWxlJworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICAgICAgICAgIGlmIHBhdGggIT0gc2VsZi5wYXRoX2xvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZmluZF9tb2R1bGUoZnVsbG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKworICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGg9W0ZpbmRlci5wYXRoX2xvY2F0aW9uXStzeXMucGF0aFs6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2hvb2tzPVtGaW5kZXJdKToKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjKCdpbXBvcnRsaWInKQorCitGcm96ZW5fUEVGVGVzdHMsIFNvdXJjZV9QRUZUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXRoRW50cnlGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcmVsYXRpdmVfaW1wb3J0cy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CmluZGV4IDQ1NjljMjYuLmIyMTZlOWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWNsYXNzIFJlbGF0aXZlSW1wb3J0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBSZWxhdGl2ZUltcG9ydHM6CiAKICAgICAiIiJQRVAgMzI4IGludHJvZHVjZWQgcmVsYXRpdmUgaW1wb3J0cy4gVGhpcyBhbGxvd3MgZm9yIGltcG9ydHMgdG8gb2NjdXIKICAgICBmcm9tIHdpdGhpbiBhIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgYWN0dWFsIHBhY2thZ2UgbmFtZS4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgICB1bmNhY2hlX25hbWVzLmFwcGVuZChuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB1bmNhY2hlX25hbWVzLmFwcGVuZChuYW1lWzotbGVuKCcuX19pbml0X18nKV0pCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoKmNyZWF0ZSkgYXMgaW1wb3J0ZXI6CisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoKmNyZWF0ZSkgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKICAgICAgICAgICAgICAgICBmb3IgZ2xvYmFsXyBpbiBnbG9iYWxzXzoKICAgICAgICAgICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoKnVuY2FjaGVfbmFtZXMpOgpAQCAtNzYsOCArNzYsOCBAQAogICAgICAgICBjcmVhdGUgPSAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QyJwogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZDEnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2QyJ10sIGxldmVsPTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kMiddLCBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kMicpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kMi5hdHRyLCAncGtnLm1vZDInKQpAQCAtODgsOCArODgsOCBAQAogICAgICAgICBjcmVhdGUgPSAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QyJwogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZDEnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kMicsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLAorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2QyJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2QyJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsICdwa2cubW9kMicpCkBAIC0xMDEsOCArMTAxLDggQEAKICAgICAgICAgZ2xvYmFsc18gPSAoeydfX3BhY2thZ2VfXyc6ICdwa2cnfSwKICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cnLCAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZHVsZSddLAorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZHVsZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCkBAIC0xMTQsOCArMTE0LDggQEAKICAgICAgICAgY3JlYXRlID0gJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJwogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZHVsZSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICBnbG9iYWxzXyA9ICAoeydfX3BhY2thZ2VfXyc6ICdwa2cuc3VicGtnMSd9LAogICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cuc3VicGtnMScsICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydzdWJwa2cyJ10sCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnc3VicGtnMiddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnc3VicGtnMicpKQpAQCAtMTQyLDggKzE0Miw4IEBACiAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnLnBrZzEucGtnMi5wa2czLnBrZzQucGtnNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oZ2xvYmFsc19bMF1bJ19fcGFja2FnZV9fJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9NikKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhnbG9iYWxzX1swXVsnX19wYWNrYWdlX18nXSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKQEAgLTE1Myw5ICsxNTMsOSBAQAogICAgICAgICBnbG9iYWxzXyA9ICh7J19fcGFja2FnZV9fJzogJ3BrZyd9LAogICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZycsICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wyd0b3BfbGV2ZWwnXSwKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCkBAIC0xNjQsMTYgKzE2NCwxNiBAQAogICAgICAgICBjcmVhdGUgPSBbJ3RvcF9sZXZlbCcsICdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZSddCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdwa2cnfSwgeydfX25hbWVfXyc6ICdwa2cubW9kdWxlJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wyd0b3BfbGV2ZWwnXSwKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfbmFtZV93X2xldmVsXzAoc2VsZik6CiAgICAgICAgICMgW2VtcHR5IG5hbWVdCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnKQogCiAgICAgZGVmIHRlc3RfaW1wb3J0X2Zyb21fZGlmZmVyZW50X3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlIHRoYW4gdGhlIGNhbGxlci4KQEAgLTE4Niw4ICsxODYsOCBAQAogICAgICAgICAgICAgICAgICAgICAnX19ydW5weV9wa2dfXy51bmNsZS5jb3VzaW4ubmVwaGV3J10KICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ19fcnVucHlfcGtnX18uX19ydW5weV9wa2dfXyd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ19fcnVucHlfcGtnX18uX19ydW5weV9wa2dfXycpCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCd1bmNsZS5jb3VzaW4nLCBnbG9iYWxzXywge30sCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ19fcnVucHlfcGtnX18uX19ydW5weV9wa2dfXycpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3VuY2xlLmNvdXNpbicsIGdsb2JhbHNfLCB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsnbmVwaGV3J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ19fcnVucHlfcGtnX18udW5jbGUuY291c2luJykKQEAgLTE5OCwyMCArMTk4LDE5IEBACiAgICAgICAgIGNyZWF0ZSA9IFsnY3Jhc2guX19pbml0X18nLCAnY3Jhc2gubW9kJ10KICAgICAgICAgZ2xvYmFsc18gPSBbeydfX3BhY2thZ2VfXyc6ICdjcmFzaCcsICdfX25hbWVfXyc6ICdjcmFzaCd9XQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdjcmFzaCcpCi0gICAgICAgICAgICBtb2QgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2QnLCBnbG9iYWxfLCB7fSwgW10sIDEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ2NyYXNoJykKKyAgICAgICAgICAgIG1vZCA9IHNlbGYuX19pbXBvcnRfXygnbW9kJywgZ2xvYmFsXywge30sIFtdLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19uYW1lX18sICdjcmFzaC5tb2QnKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCiAgICAgZGVmIHRlc3RfcmVsYXRpdmVfaW1wb3J0X25vX2dsb2JhbHMoc2VsZik6CiAgICAgICAgICMgTm8gZ2xvYmFscyBmb3IgYSByZWxhdGl2ZSBpbXBvcnQgaXMgYW4gZXJyb3IuCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xygnc3lzJywgbGV2ZWw9MSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnc3lzJywgbGV2ZWw9MSkKIAorRnJvemVuX1JlbGF0aXZlSW1wb3J0cywgU291cmNlX1JlbGF0aXZlSW1wb3J0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBSZWxhdGl2ZUltcG9ydHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUmVsYXRpdmVJbXBvcnRzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkKaW5kZXggODZhYzA2NS4uZGNiNDkwZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weQpAQCAtMSwyMiArMSwxNCBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAorCitmcm96ZW5faW1wb3J0bGliLCBzb3VyY2VfaW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorCitpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCB1bml0dGVzdAogCiAKLXVzaW5nX19faW1wb3J0X18gPSBGYWxzZQotCi0KLWRlZiBpbXBvcnRfKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgIiIiRGVsZWdhdGUgdG8gYWxsb3cgZm9yIGluamVjdGluZyBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIGltcG9ydC4iIiIKLSAgICBpZiB1c2luZ19fX2ltcG9ydF9fOgotICAgICAgICByZXR1cm4gX19pbXBvcnRfXygqYXJncywgKiprd2FyZ3MpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5fX2ltcG9ydF9fKCphcmdzLCAqKmt3YXJncykKLQotCi1kZWYgaW1wb3J0bGliX29ubHkoZnhuKToKLSAgICAiIiJEZWNvcmF0b3IgdG8gc2tpcCBhIHRlc3QgaWYgdXNpbmcgX19idWlsdGluc19fLl9faW1wb3J0X18uIiIiCi0gICAgcmV0dXJuIHVuaXR0ZXN0LnNraXBJZih1c2luZ19fX2ltcG9ydF9fLCAiaW1wb3J0bGliLXNwZWNpZmljIHRlc3QiKShmeG4pCitfX2ltcG9ydF9fID0gc3RhdGljbWV0aG9kKGJ1aWx0aW5zLl9faW1wb3J0X18pLCBzdGF0aWNtZXRob2Qoc291cmNlX2ltcG9ydGxpYi5fX2ltcG9ydF9fKQogCiAKIGRlZiBtb2NrX3BhdGhfaG9vaygqZW50cmllcywgaW1wb3J0ZXIpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vb25lLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vb25lLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2Zvby9vbmUucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL2JvdGhfcG9ydGlvbnMvZm9vL29uZS5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vdHdvLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vdHdvLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2Zvby90d28ucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL2JvdGhfcG9ydGlvbnMvZm9vL3R3by5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvbWlzc2luZ19kaXJlY3RvcnkuemlwIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbWlzc2luZ19kaXJlY3RvcnkuemlwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9taXNzaW5nX2RpcmVjdG9yeS56aXAKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL21pc3NpbmdfZGlyZWN0b3J5LnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0LnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdC5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QucHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0L2VtcHR5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QvZW1wdHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0L2VtcHR5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdC9lbXB0eQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvbmVzdGVkX3BvcnRpb24xLnppcCBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25lc3RlZF9wb3J0aW9uMS56aXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL25lc3RlZF9wb3J0aW9uMS56aXAKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25lc3RlZF9wb3J0aW9uMS56aXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28vX19pbml0X18ucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9vbmUucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9vbmUucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vL29uZS5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28vb25lLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMS9mb28vb25lLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vL29uZS5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vL29uZS5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vL29uZS5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIvZm9vL3R3by5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3BvcnRpb24yL2Zvby90d28ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3BvcnRpb24yL2Zvby90d28ucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3BvcnRpb24yL2Zvby90d28ucHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QxL3BhcmVudC9jaGlsZC9vbmUucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQvb25lLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQvb25lLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQvb25lLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQvY2hpbGQvdHdvLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50L2NoaWxkL3R3by5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50L2NoaWxkL3R3by5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50L2NoaWxkL3R3by5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkL3RocmVlLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkL3RocmVlLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQvdGhyZWUucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QzL3BhcmVudC9jaGlsZC90aHJlZS5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvdG9wX2xldmVsX3BvcnRpb24xLnppcCBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3RvcF9sZXZlbF9wb3J0aW9uMS56aXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3RvcF9sZXZlbF9wb3J0aW9uMS56aXAKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3RvcF9sZXZlbF9wb3J0aW9uMS56aXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19faW5pdF9fLnB5CmluZGV4IDNlZjk3ZjMuLjRiMTZlY2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvX19pbml0X18ucHkKQEAgLTEsMTMgKzEsNSBAQAotZnJvbSAuLiBpbXBvcnQgdGVzdF9zdWl0ZQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgcmV0dXJuIHRlc3QudGVzdF9zdWl0ZSgnaW1wb3J0bGliLnRlc3Quc291cmNlJywgZGlyZWN0b3J5KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSAuIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfYWJjX2xvYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5MTJiNi4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTA2ICswLDAgQEAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBhYmMKLQotZnJvbSAuLiBpbXBvcnQgYWJjIGFzIHRlc3RpbmdfYWJjCi1mcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKLQotaW1wb3J0IGltcAotaW1wb3J0IGluc3BlY3QKLWltcG9ydCBpbwotaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHR5cGVzCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwotCi0KLWNsYXNzIFNvdXJjZU9ubHlMb2FkZXJNb2NrKGFiYy5Tb3VyY2VMb2FkZXIpOgotCi0gICAgIyBHbG9iYWxzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgZm9yIGFsbCBtb2R1bGVzLgotICAgIHNvdXJjZSA9IChiIl8gPSAnOjonLmpvaW4oW19fbmFtZV9fLCBfX2ZpbGVfXywgX19jYWNoZWRfXywgX19wYWNrYWdlX18sICIKLSAgICAgICAgICAgICAgYiJyZXByKF9fbG9hZGVyX18pXSkiKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGFzc2VydCBzZWxmLnBhdGggPT0gcGF0aAotICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5wYXRoCi0KLSAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJNb2NrKFNvdXJjZU9ubHlMb2FkZXJNb2NrKToKLQotICAgIHNvdXJjZV9tdGltZSA9IDEKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBtYWdpYz1pbXAuZ2V0X21hZ2ljKCkpOgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHBhdGgpCi0gICAgICAgIHNlbGYuYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuc291cmNlX3NpemUgPSBsZW4oc2VsZi5zb3VyY2UpCi0gICAgICAgIGRhdGEgPSBieXRlYXJyYXkobWFnaWMpCi0gICAgICAgIGRhdGEuZXh0ZW5kKGltcG9ydGxpYi5fd19sb25nKHNlbGYuc291cmNlX210aW1lKSkKLSAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5zb3VyY2Vfc2l6ZSkpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gY29tcGlsZShzZWxmLnNvdXJjZSwgc2VsZi5wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQotICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKLSAgICAgICAgc2VsZi5ieXRlY29kZSA9IGJ5dGVzKGRhdGEpCi0gICAgICAgIHNlbGYud3JpdHRlbiA9IHt9Ci0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggPT0gc2VsZi5wYXRoOgotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZWxpZiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmJ5dGVjb2RlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0KLSAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHBhdGggPT0gc2VsZi5wYXRoCi0gICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5zb3VyY2VfbXRpbWUsICdzaXplJzogc2VsZi5zb3VyY2Vfc2l6ZX0KLQotICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKLSAgICAgICAgc2VsZi53cml0dGVuW3BhdGhdID0gYnl0ZXMoZGF0YSkKLSAgICAgICAgcmV0dXJuIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoCi0KLQotY2xhc3MgUHlMb2FkZXJNb2NrKGFiYy5QeUxvYWRlcik6Ci0KLSAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCi0gICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX3BhY2thZ2VfXywgIgotICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0gICAgICAgICIiIlRha2UgYSBkaWN0IG9mICdtb2R1bGVfbmFtZTogcGF0aCcgcGFpcmluZ3MuCi0KLSAgICAgICAgUGF0aHMgc2hvdWxkIGhhdmUgbm8gZmlsZSBleHRlbnNpb24sIGFsbG93aW5nIHBhY2thZ2VzIHRvIGJlIGRlbm90ZWQgYnkKLSAgICAgICAgZW5kaW5nIGluICdfX2luaXRfXycuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYubW9kdWxlX3BhdGhzID0gZGF0YQotICAgICAgICBzZWxmLnBhdGhfdG9fbW9kdWxlID0ge3ZhbDprZXkgZm9yIGtleSx2YWwgaW4gZGF0YS5pdGVtcygpfQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgotICAgICAgICBpZiBwYXRoIG5vdCBpbiBzZWxmLnBhdGhfdG9fbW9kdWxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKLQotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUobmFtZSkpCi0gICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLSAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9wYXRoc1tuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiU2lsZW5jZSBkZXByZWNhdGlvbiB3YXJuaW5nLiIiIgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgcGF0aCA9IHN1cGVyKCkuZ2V0X2ZpbGVuYW1lKG5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKLSAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0KLSAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZik6Ci0gICAgICAgIHJldHVybiAnPG1vZHVsZT4nCi0KLQotY2xhc3MgUHlMb2FkZXJDb21wYXRNb2NrKFB5TG9hZGVyTW9jayk6Ci0KLSAgICAiIiJNb2NrIHRoYXQgbWF0Y2hlcyB3aGF0IGlzIHN1Z2dlc3RlZCB0byBoYXZlIGEgbG9hZGVyIHRoYXQgaXMgY29tcGF0aWJsZQotICAgIGZyb20gUHl0aG9uIDMuMSBvbndhcmRzLiIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9wYXRoc1tmdWxsbmFtZV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotCi1jbGFzcyBQeVB5Y0xvYWRlck1vY2soYWJjLlB5UHljTG9hZGVyLCBQeUxvYWRlck1vY2spOgotCi0gICAgZGVmYXVsdF9tdGltZSA9IDEKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIGJjPXt9KToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZSBtb2NrLgotCi0gICAgICAgICdiYycgaXMgYSBkaWN0IGtleWVkIG9uIGEgbW9kdWxlJ3MgbmFtZS4gVGhlIHZhbHVlIGlzIGRpY3Qgd2l0aAotICAgICAgICBwb3NzaWJsZSBrZXlzIG9mICdwYXRoJywgJ210aW1lJywgJ21hZ2ljJywgYW5kICdiYycuIEV4Y2VwdCBmb3IgJ3BhdGgnLAotICAgICAgICBlYWNoIG9mIHRob3NlIGtleXMgY29udHJvbCBpZiBhbnkgcGFydCBvZiBjcmVhdGVkIGJ5dGVjb2RlIGlzIHRvCi0gICAgICAgIGRldmlhdGUgZnJvbSBkZWZhdWx0IHZhbHVlcy4KLQotICAgICAgICAiIiIKLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzb3VyY2UpCi0gICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlID0ge30KLSAgICAgICAgc2VsZi5wYXRoX3RvX2J5dGVjb2RlID0ge30KLSAgICAgICAgc2VsZi5ieXRlY29kZV90b19wYXRoID0ge30KLSAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gYmMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYucGF0aF90b19ieXRlY29kZVtkYXRhWydwYXRoJ11dID0gbmFtZQotICAgICAgICAgICAgc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdID0gZGF0YVsncGF0aCddCi0gICAgICAgICAgICBtYWdpYyA9IGRhdGEuZ2V0KCdtYWdpYycsIGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgICAgIG10aW1lID0gaW1wb3J0bGliLl93X2xvbmcoZGF0YS5nZXQoJ210aW1lJywgc2VsZi5kZWZhdWx0X210aW1lKSkKLSAgICAgICAgICAgIHNvdXJjZV9zaXplID0gaW1wb3J0bGliLl93X2xvbmcobGVuKHNlbGYuc291cmNlKSAmIDB4RkZGRkZGRkYpCi0gICAgICAgICAgICBpZiAnYmMnIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgYmMgPSBkYXRhWydiYyddCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGJjID0gc2VsZi5jb21waWxlX2JjKG5hbWUpCi0gICAgICAgICAgICBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXSA9IG1hZ2ljICsgbXRpbWUgKyBzb3VyY2Vfc2l6ZSArIGJjCi0KLSAgICBkZWYgY29tcGlsZV9iYyhzZWxmLCBuYW1lKToKLSAgICAgICAgc291cmNlX3BhdGggPSBzZWxmLm1vZHVsZV9wYXRocy5nZXQobmFtZSwgJzx0ZXN0PicpIG9yICc8dGVzdD4nCi0gICAgICAgIGNvZGUgPSBjb21waWxlKHNlbGYuc291cmNlLCBzb3VyY2VfcGF0aCwgJ2V4ZWMnKQotICAgICAgICByZXR1cm4gbWFyc2hhbC5kdW1wcyhjb2RlKQotCi0gICAgZGVmIHNvdXJjZV9tdGltZShzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgbmFtZSBpbiBzZWxmLm1vZHVsZV9wYXRoczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHRfbXRpbWUKLSAgICAgICAgZWxpZiBuYW1lIGluIHNlbGYubW9kdWxlX2J5dGVjb2RlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGVfdG9fcGF0aFtuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYubW9kdWxlX3BhdGhzOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgbmFtZSwgYnl0ZWNvZGUpOgotICAgICAgICBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXSA9IGJ5dGVjb2RlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggaW4gc2VsZi5wYXRoX3RvX21vZHVsZToKLSAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGVsaWYgcGF0aCBpbiBzZWxmLnBhdGhfdG9fYnl0ZWNvZGU6Ci0gICAgICAgICAgICBuYW1lID0gc2VsZi5wYXRoX3RvX2J5dGVjb2RlW3BhdGhdCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVfYnl0ZWNvZGVbbmFtZV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5pc19wYWNrYWdlKG5hbWUpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gJ19faW5pdF9fJyBpbiBzZWxmLmJ5dGVjb2RlX3RvX3BhdGhbbmFtZV0KLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBuYW1lKToKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKLSAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc3VwZXIoKS5nZXRfY29kZShuYW1lKQotICAgICAgICAgICAgYXNzZXJ0IGxlbih3KSA9PSAxCi0gICAgICAgICAgICBhc3NlcnQgaXNzdWJjbGFzcyh3WzBdLmNhdGVnb3J5LCBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKLQotY2xhc3MgUHlMb2FkZXJUZXN0cyh0ZXN0aW5nX2FiYy5Mb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeUxvYWRlci4iIiIKLQotICAgIG1vY2tlciA9IFB5TG9hZGVyTW9jawotCi0gICAgZGVmIGVxX2F0dHJzKHNlbGYsIG9iLCAqKmt3YXJncyk6Ci0gICAgICAgIGZvciBhdHRyLCB2YWwgaW4ga3dhcmdzLml0ZW1zKCk6Ci0gICAgICAgICAgICBmb3VuZCA9IGdldGF0dHIob2IsIGF0dHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCB2YWwsCi0gICAgICAgICAgICAgICAgICAgICJ7fSBhdHRyaWJ1dGU6IHt9ICE9IHt9Ii5mb3JtYXQoYXR0ciwgZm91bmQsIHZhbCkpCi0KLSAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnPG1vZHVsZT4nCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJycsICdwYXRoJywgJ3RvJywgJ21vZHVsZScpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsIF9fcGFja2FnZV9fPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnPHBrZz4nCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCBuYW1lLCAnX19pbml0X18nKQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc3lzLm1vZHVsZXMpCi0gICAgICAgIHNlbGYuZXFfYXR0cnMobW9kdWxlLCBfX25hbWVfXz1uYW1lLCBfX2ZpbGVfXz1wYXRoLAotICAgICAgICAgICAgICAgIF9fcGF0aF9fPVtvcy5wYXRoLmRpcm5hbWUocGF0aCldLCBfX3BhY2thZ2VfXz1uYW1lLAotICAgICAgICAgICAgICAgIF9fbG9hZGVyX189bW9jaykKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgotICAgICAgICBuYW1lID0gJ3BrZy5tb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAncGtnJywgJ21vZCcpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsIF9fcGFja2FnZV9fPSdwa2cnLAotICAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJykKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgbG9hZGVkX21vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkX21vZHVsZSwgbW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICJtb2QiCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCi0gICAgICAgIG1vZHVsZS5ibGFoID0gTm9uZQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIG1vY2suc291cmNlID0gYiIxLzAiCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgotICAgICAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbbmFtZV0sIG1vZHVsZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2JsYWgnKSkKLSAgICAgICAgcmV0dXJuIG1vY2sKLQotICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAibW9kIgotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIG1vY2suc291cmNlID0gYiIxLzAiCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgcmV0dXJuIG1vY2sKLQotCi1jbGFzcyBQeUxvYWRlckNvbXBhdFRlc3RzKFB5TG9hZGVyVGVzdHMpOgotCi0gICAgIiIiVGVzdCB0aGF0IHRoZSBzdWdnZXN0ZWQgY29kZSB0byBtYWtlIGEgbG9hZGVyIHRoYXQgaXMgY29tcGF0aWJsZSBmcm9tCi0gICAgUHl0aG9uIDMuMSBmb3J3YXJkIHdvcmtzLiIiIgotCi0gICAgbW9ja2VyID0gUHlMb2FkZXJDb21wYXRNb2NrCi0KLQotY2xhc3MgUHlMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeUxvYWRlciB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHNvdXJjZV9wYXRoKCkKLSAgICBkb2Vzbid0IHJldHVybiBhIHBhdGggZXZlcnl0aGluZyB3b3JrcyBhcyBleHBlY3RlZC4iIiIKLQotICAgIGRlZiB0ZXN0X25vX3NvdXJjZV9wYXRoKHNlbGYpOgotICAgICAgICAjIE5vIHNvdXJjZSBwYXRoIHNob3VsZCBsZWFkIHRvIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9wYXRoX2lzX05vbmUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV93aXRoX3NvdXJjZV9wYXRoKHNlbGYpOgotICAgICAgICAjIGdldF9maWxlbmFtZSgpIHNob3VsZCByZXR1cm4gd2hhdCBzb3VyY2VfcGF0aCgpIHJldHVybnMuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ3NvdXJjZScpCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfZmlsZW5hbWUobmFtZSksIHBhdGgpCi0KLSAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWVfbm9fc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yIGlmIHNvdXJjZV9wYXRoIHJldHVybnMgTm9uZS4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5nZXRfZmlsZW5hbWUobmFtZSkKLQotCi1jbGFzcyBQeVB5Y0xvYWRlclRlc3RzKFB5TG9hZGVyVGVzdHMpOgotCi0gICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIuIiIiCi0KLSAgICBtb2NrZXIgPSBQeVB5Y0xvYWRlck1vY2sKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdmVyaWZ5X2J5dGVjb2RlKHNlbGYsIG1vY2ssIG5hbWUpOgotICAgICAgICBhc3NlcnQgbmFtZSBpbiBtb2NrLm1vZHVsZV9wYXRocwotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtYWdpYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzo0XQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljLCBpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgIG10aW1lID0gaW1wb3J0bGliLl9yX2xvbmcobW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bNDo4XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdGltZSwgMSkKLSAgICAgICAgc291cmNlX3NpemUgPSBtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs4OjEyXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2NrLnNvdXJjZSkgJiAweEZGRkZGRkZGLAotICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5fcl9sb25nKHNvdXJjZV9zaXplKSkKLSAgICAgICAgYmMgPSBtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVsxMjpdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmMsIG1vY2suY29tcGlsZV9iYyhuYW1lKSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9tb2R1bGUoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9wYWNrYWdlKCkKLSAgICAgICAgc2VsZi52ZXJpZnlfYnl0ZWNvZGUobW9jaywgbmFtZSkKLQotICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X2xhY2tpbmdfcGFyZW50KCkKLSAgICAgICAgc2VsZi52ZXJpZnlfYnl0ZWNvZGUobW9jaywgbmFtZSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9tb2R1bGVfcmV1c2UoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKLSAgICAgICAgc3VwZXIoKS50ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUoKQotCi0gICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgc3VwZXIoKS50ZXN0X3VubG9hZGFibGUoKQotCi0KLWNsYXNzIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCBmb3IgdGhlIGludGVyZmFjZSBvZiBpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyLiIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZV9jaGVjayhzZWxmLCBzcmNfcGF0aCwgYmNfcGF0aCwgZXhwZWN0KToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IHNyY19wYXRofSwge25hbWU6IHsncGF0aCc6IGJjX3BhdGh9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBhc3NlcnQgbW9jay5zb3VyY2VfcGF0aChuYW1lKSA9PSBzcmNfcGF0aAotICAgICAgICAgICAgYXNzZXJ0IG1vY2suYnl0ZWNvZGVfcGF0aChuYW1lKSA9PSBiY19wYXRoCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpLCBleHBlY3QpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX3NvdXJjZV9iYyhzZWxmKToKLSAgICAgICAgIyBXaGVuIHNvdXJjZSBhbmQgYnl0ZWNvZGUgcGF0aHMgcHJlc2VudCwgcmV0dXJuIHRoZSBzb3VyY2UgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soJ3NvdXJjZV9wYXRoJywgJ2JjX3BhdGgnLCAnc291cmNlX3BhdGgnKQotCi0gICAgZGVmIHRlc3RfZmlsZW5hbWVfd2l0aF9zb3VyY2Vfbm9fYmMoc2VsZik6Ci0gICAgICAgICMgV2l0aCBzb3VyY2UgYnV0IG5vIGJjLCByZXR1cm4gc291cmNlIHBhdGguCi0gICAgICAgIHNlbGYuZ2V0X2ZpbGVuYW1lX2NoZWNrKCdzb3VyY2VfcGF0aCcsIE5vbmUsICdzb3VyY2VfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX25vX3NvdXJjZV9iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIG5vdCBzb3VyY2UgYnV0IGJjLCByZXR1cm4gdGhlIGJjIHBhdGguCi0gICAgICAgIHNlbGYuZ2V0X2ZpbGVuYW1lX2NoZWNrKE5vbmUsICdiY19wYXRoJywgJ2JjX3BhdGgnKQotCi0gICAgZGVmIHRlc3RfZmlsZW5hbWVfd2l0aF9ub19zb3VyY2Vfb3JfYmMoc2VsZik6Ci0gICAgICAgICMgV2l0aCBubyBzb3VyY2Ugb3IgYmMsIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIHtuYW1lOiB7J3BhdGgnOiBOb25lfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQotCi0KLWNsYXNzIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgYnl0ZWNvZGUgaXMgcHJvcGVybHkgaGFuZGxlZCBiYXNlZCBvbgotICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLiIiIgotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiBydW5fdGVzdChzZWxmLCBkb250X3dyaXRlX2J5dGVjb2RlKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gZG9udF93cml0ZV9ieXRlY29kZQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdChuYW1lIGluIG1vY2subW9kdWxlX2J5dGVjb2RlLCBkb250X3dyaXRlX2J5dGVjb2RlKQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGVfd3JpdHRlbihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChUcnVlKQotCi0gICAgZGVmIHRlc3RfYnl0ZWNvZGVfd3JpdHRlbihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChGYWxzZSkKLQotCi1jbGFzcyBSZWdlbmVyYXRlZEJ5dGVjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB0aGF0IGJ5dGVjb2RlIGlzIHJlZ2VuZXJhdGVkIGFzIGV4cGVjdGVkLiIiIgotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBBIGRpZmZlcmVudCBtYWdpYyBudW1iZXIgc2hvdWxkIGxlYWQgdG8gbmV3IGJ5dGVjb2RlLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBhc3NlcnQgYmFkX21hZ2ljICE9IGltcC5nZXRfbWFnaWMoKQotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyl9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kLmJ5dGVjb2RlJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtYWdpYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzo0XQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljLCBpbXAuZ2V0X21hZ2ljKCkpCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3Rfb2xkX210aW1lKHNlbGYpOgotICAgICAgICAjIEJ5dGVjb2RlIHdpdGggYW4gb2xkZXIgbXRpbWUgc2hvdWxkIGJlIHJlZ2VuZXJhdGVkLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgb2xkX210aW1lID0gUHlQeWNMb2FkZXJNb2NrLmRlZmF1bHRfbXRpbWUgLSAxCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0sCi0gICAgICAgICAgICAgICAge25hbWU6IHsncGF0aCc6ICdwYXRoL3RvL21vZC5ieXRlY29kZScsICdtdGltZSc6IG9sZF9tdGltZX19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBtb2NrLm1vZHVsZV9ieXRlY29kZSkKLSAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3JfbG9uZyhtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs0OjhdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCBQeVB5Y0xvYWRlck1vY2suZGVmYXVsdF9tdGltZSkKLQotCi1jbGFzcyBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IGltcG9ydCBmYWlsdXJlcyB3aGVuIHRoZXJlIGlzIG5vIHNvdXJjZSBhbmQgcGFydHMgb2YgdGhlIGJ5dGVjb2RlCi0gICAgaXMgYmFkLiIiIgotCi0gICAgZGVmIHRlc3RfYmFkX21hZ2ljKHNlbGYpOgotICAgICAgICAjIEEgYmFkIG1hZ2ljIG51bWJlciBzaG91bGQgbGVhZCB0byBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJhZF9tYWdpYyA9IGInXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYmMgPSB7bmFtZToKLSAgICAgICAgICAgICAgICB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksCi0gICAgICAgICAgICAgICAgICdtYWdpYyc6IGJhZF9tYWdpY319Ci0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCBiYykKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbmFtZSkKLQotICAgIGRlZiB0ZXN0X25vX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIE1pc3NpbmcgY29kZSBvYmplY3QgYnl0ZWNvZGUgc2hvdWxkIGxlYWQgdG8gYW4gRU9GRXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYyA9IHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksICdiYyc6IGInJ319Ci0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCBiYykKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X2JhZF9ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBNYWxmb3JtZWQgY29kZSBvYmplY3QgYnl0ZWNvZGUgc2hvdWxkIGxlYWQgdG8gYSBWYWx1ZUVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmMgPSB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpLCAnYmMnOiBiJzEyMzQnfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLQotZGVmIHJhaXNlX0ltcG9ydEVycm9yKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotY2xhc3MgTWlzc2luZ1BhdGhzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiBhIHNvdXJjZSBvciBieXRlY29kZSBwYXRoIGRvZXMgbm90IGV4aXN0IChlaXRoZXIKLSAgICBmcm9tICpfcGF0aCByZXR1cm5pbmcgTm9uZSBvciByYWlzaW5nIEltcG9ydEVycm9yKS4iIiIKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9wYXRoX05vbmUoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgc2hvdWxkIGJlIHVzZWQgd2hlbiBzb3VyY2VfcGF0aCByZXR1cm5zIE5vbmUsIGFsb25nIHdpdGgKLSAgICAgICAgIyBfX2ZpbGVfXyBiZWluZyBzZXQgdG8gdGhlIGJ5dGVjb2RlIHBhdGguCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBieXRlY29kZV9wYXRoID0gJ3BhdGgvdG8vbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwge25hbWU6IHsncGF0aCc6IGJ5dGVjb2RlX3BhdGh9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBieXRlY29kZV9wYXRoKQotCi0gICAgIyBUZXN0aW5nIGZvciBieXRlY29kZV9wYXRoIHJldHVybmluZyBOb25lIGhhbmRsZWQgYnkgYWxsIHRlc3RzIHdoZXJlIG5vCi0gICAgIyBieXRlY29kZSBpbml0aWFsbHkgZXhpc3RzLgotCi0gICAgZGVmIHRlc3RfYWxsX3BhdGhzX05vbmUoc2VsZik6Ci0gICAgICAgICMgSWYgYWxsICpfcGF0aCBtZXRob2RzIHJldHVybiBOb25lLCByYWlzZSBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfSW1wb3J0RXJyb3Ioc2VsZik6Ci0gICAgICAgICMgQW4gSW1wb3J0RXJyb3IgZnJvbSBzb3VyY2VfcGF0aCBzaG91bGQgdHJpZ2dlciBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe30sIHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QnKX19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfYnl0ZWNvZGVfcGF0aF9JbXBvcnRFcnJvcihzZWxmKToKLSAgICAgICAgIyBBbiBJbXBvcnRFcnJvciBmcm9tIGJ5dGVjb2RlX3BhdGggc2hvdWxkIHRyaWdnZXIgYW4gSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyl9KQotICAgICAgICBiYWRfbWV0aCA9IHR5cGVzLk1ldGhvZFR5cGUocmFpc2VfSW1wb3J0RXJyb3IsIG1vY2spCi0gICAgICAgIG1vY2suYnl0ZWNvZGVfcGF0aCA9IGJhZF9tZXRoCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLQotY2xhc3MgU291cmNlTG9hZGVyVGVzdEhhcm5lc3ModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYsICosIGlzX3BhY2thZ2U9VHJ1ZSwgKiprd2FyZ3MpOgotICAgICAgICBzZWxmLnBhY2thZ2UgPSAncGtnJwotICAgICAgICBpZiBpc19wYWNrYWdlOgotICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJ19faW5pdF9fLnB5JykKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IHNlbGYucGFja2FnZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnbW9kJwotICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJy4nLmpvaW4oWydtb2QnLCAncHknXSkpCi0gICAgICAgICAgICBzZWxmLm5hbWUgPSAnLicuam9pbihbc2VsZi5wYWNrYWdlLCBtb2R1bGVfbmFtZV0pCi0gICAgICAgIHNlbGYuY2FjaGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLmxvYWRlcl9tb2NrKHNlbGYucGF0aCwgKiprd2FyZ3MpCi0KLSAgICBkZWYgdmVyaWZ5X21vZHVsZShzZWxmLCBtb2R1bGUpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc2VsZi5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBzZWxmLmNhY2hlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNlbGYucGFja2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgc2VsZi5sb2FkZXIpCi0gICAgICAgIHZhbHVlcyA9IG1vZHVsZS5fLnNwbGl0KCc6OicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzFdLCBzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzJdLCBzZWxmLmNhY2hlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbM10sIHNlbGYucGFja2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbNF0sIHJlcHIoc2VsZi5sb2FkZXIpKQotCi0gICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0KToKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoc2VsZi5uYW1lKQotICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzZWxmLnBhdGgKLSAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzZWxmLmNhY2hlZAotICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzZWxmLnBhY2thZ2UKLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmLmxvYWRlcgotICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbXQotICAgICAgICBleGVjKGNvZGVfb2JqZWN0LCBtb2R1bGUuX19kaWN0X18pCi0gICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCi0KLQotY2xhc3MgU291cmNlT25seUxvYWRlclRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKLQotICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIgZm9yIHNvdXJjZS1vbmx5IGxvYWRpbmcuCi0KLSAgICBSZWxvYWQgdGVzdGluZyBpcyBzdWJzdW1lZCBieSB0aGUgdGVzdHMgZm9yCi0gICAgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuCi0KLSAgICAiIiIKLQotICAgIGxvYWRlcl9tb2NrID0gU291cmNlT25seUxvYWRlck1vY2sKLQotICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6Ci0gICAgICAgICMgVmVyaWZ5IHRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIHN0cmluZy4KLSAgICAgICAgIyBJZiBhbiBJT0Vycm9yIGlzIHJhaXNlZCBieSBnZXRfZGF0YSB0aGVuIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBleHBlY3RlZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5zb3VyY2UuZGVjb2RlKCd1dGYtOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpLCBleHBlY3RlZF9zb3VyY2UpCi0gICAgICAgIGRlZiByYWlzZV9JT0Vycm9yKHBhdGgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmxvYWRlci5nZXRfZGF0YSA9IHJhaXNlX0lPRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgc2VsZi5uYW1lKQotCi0gICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKLSAgICAgICAgIyBQcm9wZXJseSBkZXRlY3Qgd2hlbiBsb2FkaW5nIGEgcGFja2FnZS4KLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUgKyAnLl9faW5pdF9fJykpCi0KLSAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhlIGNvZGUgb2JqZWN0IGlzIGNyZWF0ZWQuCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotCi0gICAgZGVmIHRlc3RfbG9hZF9tb2R1bGUoc2VsZik6Ci0gICAgICAgICMgTG9hZGluZyBhIG1vZHVsZSBzaG91bGQgc2V0IF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywKLSAgICAgICAgIyBfX3BhdGhfXyAoZm9yIHBhY2thZ2VzKSwgX19maWxlX18sIGFuZCBfX2NhY2hlZF9fLgotICAgICAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIGFsc28gYmUgcHV0IGludG8gc3lzLm1vZHVsZXMuCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYXRoX18sIFtvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc3lzLm1vZHVsZXMpCi0KLSAgICBkZWYgdGVzdF9wYWNrYWdlX3NldHRpbmdzKHNlbGYpOgotICAgICAgICAjIF9fcGFja2FnZV9fIG5lZWRzIHRvIGJlIHNldCwgd2hpbGUgX19wYXRoX18gaXMgc2V0IG9uIGlmIHRoZSBtb2R1bGUKLSAgICAgICAgIyBpcyBhIHBhY2thZ2UuCi0gICAgICAgICMgVGVzdGluZyB0aGUgdmFsdWVzIGZvciBhIHBhY2thZ2UgYXJlIGNvdmVyZWQgYnkgdGVzdF9sb2FkX21vZHVsZS4KLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZV9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTb3VyY2UgaXMgY29uc2lkZXJlZCBlbmNvZGVkIGluIFVURi04IGJ5IGRlZmF1bHQgdW5sZXNzIG90aGVyd2lzZQotICAgICAgICAjIHNwZWNpZmllZCBieSBhbiBlbmNvZGluZyBsaW5lLgotICAgICAgICBzb3VyY2UgPSAiXyA9ICfDvCciCi0gICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0gICAgICAgIHNvdXJjZSA9ICIjIGNvZGluZzogbGF0aW4tMVxuXyA9IMO8IgotICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0KLQotQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgInN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUiKQotY2xhc3MgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6Ci0KLSAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyJ3MgdXNlIG9mIGJ5dGVjb2RlLgotCi0gICAgU291cmNlLW9ubHkgdGVzdGluZyBoYW5kbGVkIGJ5IFNvdXJjZU9ubHlMb2FkZXJUZXN0cy4KLQotICAgICIiIgotCi0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VMb2FkZXJNb2NrCi0KLSAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QsICosIGJ5dGVjb2RlX3dyaXR0ZW49RmFsc2UpOgotICAgICAgICBzdXBlcigpLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotICAgICAgICBpZiBieXRlY29kZV93cml0dGVuOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmNhY2hlZCwgc2VsZi5sb2FkZXIud3JpdHRlbikKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX210aW1lKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKGltcG9ydGxpYi5fd19sb25nKHNlbGYubG9hZGVyLnNvdXJjZV9zaXplKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci53cml0dGVuW3NlbGYuY2FjaGVkXSwgYnl0ZXMoZGF0YSkpCi0KLSAgICBkZWYgdGVzdF9jb2RlX3dpdGhfZXZlcnl0aGluZyhzZWxmKToKLSAgICAgICAgIyBXaGVuIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsuCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgSWYgbm8gYnl0ZWNvZGUgZXhpc3RzIHRoZW4gbW92ZSBvbiB0byB0aGUgc291cmNlLgotICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCi0gICAgICAgICMgU2FuaXR5IGNoZWNrCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6Ci0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0KLSAgICBkZWYgdGVzdF9jb2RlX2JhZF90aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBzb3VyY2UgRVhBQ1RMWS4KLSAgICAgICAgZm9yIHNvdXJjZV9tdGltZSBpbiAoMCwgMik6Ci0gICAgICAgICAgICBhc3NlcnQgc291cmNlX210aW1lICE9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQotICAgICAgICAgICAgb3JpZ2luYWwgPSBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IHNvdXJjZV9tdGltZQotICAgICAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUgPSBvcmlnaW5hbAotCi0gICAgZGVmIHRlc3RfY29kZV9iYWRfbWFnaWMoc2VsZik6Ci0gICAgICAgICMgU2tpcCBvdmVyIGJ5dGVjb2RlIHdpdGggYSBiYWQgbWFnaWMgbnVtYmVyLgotICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCi0gICAgICAgICMgSWYgYnl0ZWNvZGUgaXMgdXNlZCB0aGVuIEVPRkVycm9yIHdvdWxkIGJlIHJhaXNlZCBieSBtYXJzaGFsLgotICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCwgYnl0ZWNvZGVfd3JpdHRlbj1UcnVlKQotCi0gICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBpcyBub3Qgd3JpdHRlbiBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlLgotICAgICAgICAjIENhbiBhc3N1bWUgaXQgaXMgZmFsc2UgYWxyZWFkeSB0aGFua3MgdG8gdGhlIHNraXBJZiBjbGFzcyBkZWNvcmF0b3IuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuYnl0ZWNvZGVfcGF0aCA9ICI8ZG9lcyBub3QgZXhpc3Q+IgotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQotCi0gICAgZGVmIHRlc3Rfbm9fc2V0X2RhdGEoc2VsZik6Ci0gICAgICAgICMgSWYgc2V0X2RhdGEgaXMgbm90IGRlZmluZWQsIG9uZSBjYW4gc3RpbGwgcmVhZCBieXRlY29kZS4KLSAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQotICAgICAgICBvcmlnaW5hbF9zZXRfZGF0YSA9IHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWwgc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEgPSBvcmlnaW5hbF9zZXRfZGF0YQotCi0gICAgZGVmIHRlc3Rfc2V0X2RhdGFfcmFpc2VzX2V4Y2VwdGlvbnMoc2VsZik6Ci0gICAgICAgICMgUmFpc2luZyBOb3RJbXBsZW1lbnRlZEVycm9yIG9yIElPRXJyb3IgaXMgb2theSBmb3Igc2V0X2RhdGEuCi0gICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24oZXhjKToKLSAgICAgICAgICAgIGRlZiBjbG9zdXJlKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXhjCi0gICAgICAgICAgICByZXR1cm4gY2xvc3VyZQotCi0gICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKLSAgICAgICAgc2VsZi5sb2FkZXIuc2V0X2RhdGEgPSByYWlzZV9leGNlcHRpb24oTm90SW1wbGVtZW50ZWRFcnJvcikKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLQotY2xhc3MgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2UoKS4iIiIKLQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6Ci0gICAgICAgICMgU2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMgd2l0aCBVVEYtOCB0ZXh0LgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCi0gICAgICAgIHNvdXJjZSA9ICd4ID0gIsO8IicKLSAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQotCi0gICAgZGVmIHRlc3RfZGVjb2RlZF9zb3VyY2Uoc2VsZik6Ci0gICAgICAgICMgRGVjb2Rpbmcgc2hvdWxkIHdvcmsuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soIm1vZC5maWxlIikKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBMYXRpbi0xXG54PSfDvCciCi0gICAgICAgIGFzc2VydCBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKLSAgICAgICAgIyBQRVAgMzAyIHNheXMgdW5pdmVyc2FsIG5ld2xpbmVzIHNob3VsZCBiZSB1c2VkLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCi0gICAgICAgIHNvdXJjZSA9ICJ4ID0gNDJcclxueSA9IC0xM1xyXG4iCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICBleHBlY3QgPSBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpLmRlY29kZShzb3VyY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfc291cmNlKG5hbWUpLCBleHBlY3QpCi0KLQotY2xhc3MgQWJzdHJhY3RNZXRob2RJbXBsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB0aGUgY29uY3JldGUgYWJzdHJhY3RtZXRob2QgaW1wbGVtZW50YXRpb25zLiIiIgotCi0gICAgY2xhc3MgTWV0YVBhdGhGaW5kZXIoYWJjLk1ldGFQYXRoRmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCi0KLSAgICBjbGFzcyBQYXRoRW50cnlGaW5kZXIoYWJjLlBhdGhFbnRyeUZpbmRlcik6Ci0gICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoXykKLQotICAgICAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmZpbmRfbG9hZGVyKF8pCi0KLSAgICBjbGFzcyBGaW5kZXIoYWJjLkZpbmRlcik6Ci0gICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBzdXBlcigpLmZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQotCi0gICAgY2xhc3MgTG9hZGVyKGFiYy5Mb2FkZXIpOgotICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgc3VwZXIoKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKLSAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICAgICBzdXBlcigpLm1vZHVsZV9yZXByKG1vZHVsZSkKLQotICAgIGNsYXNzIFJlc291cmNlTG9hZGVyKExvYWRlciwgYWJjLlJlc291cmNlTG9hZGVyKToKLSAgICAgICAgZGVmIGdldF9kYXRhKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5nZXRfZGF0YShfKQotCi0gICAgY2xhc3MgSW5zcGVjdExvYWRlcihMb2FkZXIsIGFiYy5JbnNwZWN0TG9hZGVyKToKLSAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmlzX3BhY2thZ2UoXykKLQotICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9jb2RlKF8pCi0KLSAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9zb3VyY2UoXykKLQotICAgIGNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyKToKLSAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2ZpbGVuYW1lKF8pCi0KLSAgICBjbGFzcyBTb3VyY2VMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlciwgYWJjLlNvdXJjZUxvYWRlcik6Ci0gICAgICAgIHBhc3MKLQotICAgIGNsYXNzIFB5TG9hZGVyKFJlc291cmNlTG9hZGVyLCBJbnNwZWN0TG9hZGVyLCBhYmMuUHlMb2FkZXIpOgotICAgICAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9wYXRoKF8pCi0KLSAgICBjbGFzcyBQeVB5Y0xvYWRlcihQeUxvYWRlciwgYWJjLlB5UHljTG9hZGVyKToKLSAgICAgICAgZGVmIGJ5dGVjb2RlX3BhdGgoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmJ5dGVjb2RlX3BhdGgoXykKLQotICAgICAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5zb3VyY2VfbXRpbWUoXykKLQotICAgICAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgXywgXzIpOgotICAgICAgICAgICAgc3VwZXIoKS53cml0ZV9ieXRlY29kZShfLCBfMikKLQotICAgIGRlZiByYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLCBpbnMsICphcmdzKToKLSAgICAgICAgZm9yIG1ldGhvZF9uYW1lIGluIGFyZ3M6Ci0gICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKGlucywgbWV0aG9kX25hbWUpCi0gICAgICAgICAgICBhcmdfY291bnQgPSBsZW4oaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhtZXRob2QpWzBdKSAtIDEKLSAgICAgICAgICAgIGFyZ3MgPSBbJyddICogYXJnX2NvdW50Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWV0aG9kKCphcmdzKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtc2cgPSAie30ue30gZGlkIG5vdCByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yIgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KGlucy5fX2NsYXNzX18uX19uYW1lX18sIG1ldGhvZF9uYW1lKSkKLQotICAgIGRlZiB0ZXN0X0xvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkxvYWRlcigpLCAnbG9hZF9tb2R1bGUnKQotCi0gICAgIyBYWFggbWlzcGxhY2VkOyBzaG91bGQgYmUgc29tZXdoZXJlIGVsc2UKLSAgICBkZWYgdGVzdF9GaW5kZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5GaW5kZXIoKSwgJ2ZpbmRfbW9kdWxlJykKLQotICAgIGRlZiB0ZXN0X1Jlc291cmNlTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUmVzb3VyY2VMb2FkZXIoKSwgJ2xvYWRfbW9kdWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnKQotCi0gICAgZGVmIHRlc3RfSW5zcGVjdExvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkluc3BlY3RMb2FkZXIoKSwgJ2xvYWRfbW9kdWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfcGFja2FnZScsICdnZXRfY29kZScsICdnZXRfc291cmNlJykKLQotICAgIGRlZiB0ZXN0X0V4ZWN1dGlvbkxvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkV4ZWN1dGlvbkxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZmlsZW5hbWUnKQotCi0gICAgZGVmIHRlc3RfU291cmNlTG9hZGVyKHNlbGYpOgotICAgICAgICBpbnMgPSBzZWxmLlNvdXJjZUxvYWRlcigpCi0gICAgICAgICMgUmVxdWlyZWQgYWJzdHJhY3RtZXRob2RzLgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKGlucywgJ2dldF9maWxlbmFtZScsICdnZXRfZGF0YScpCi0gICAgICAgICMgT3B0aW9uYWwgYWJzdHJhY3RtZXRob2RzLgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKGlucywncGF0aF9zdGF0cycsICdzZXRfZGF0YScpCi0KLSAgICBkZWYgdGVzdF9QeUxvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5TG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9kYXRhJywgJ2lzX3BhY2thZ2UnKQotCi0gICAgZGVmIHRlc3RfUHlQeWNMb2FkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5QeVB5Y0xvYWRlcigpLCAnc291cmNlX3BhdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VfbXRpbWUnLCAnYnl0ZWNvZGVfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRlX2J5dGVjb2RlJykKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQeUxvYWRlclRlc3RzLCBQeUxvYWRlckNvbXBhdFRlc3RzLAotICAgICAgICAgICAgICAgICAgICBQeUxvYWRlckludGVyZmFjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBQeVB5Y0xvYWRlclRlc3RzLCBQeVB5Y0xvYWRlckludGVyZmFjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBTa2lwV3JpdGluZ0J5dGVjb2RlVGVzdHMsIFJlZ2VuZXJhdGVkQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgQmFkQnl0ZWNvZGVGYWlsdXJlVGVzdHMsIE1pc3NpbmdQYXRoc1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICBTb3VyY2VPbmx5TG9hZGVyVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdE1ldGhvZEltcGxUZXN0cykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQppbmRleCAyNDExNzNmLi5lZmQzMTQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKQEAgLTEsOSArMSwxMCBAQAogIiIiVGVzdCBjYXNlLXNlbnNpdGl2aXR5IChQRVAgMjM1KS4iIiIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKLWltcG9ydCBpbXAKKworaW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQgYXMgdGVzdF9zdXBwb3J0CkBAIC0xMSw3ICsxMiw3IEBACiAKIAogQHV0aWwuY2FzZV9pbnNlbnNpdGl2ZV90ZXN0cwotY2xhc3MgQ2FzZVNlbnNpdGl2aXR5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0OgogCiAgICAgIiIiUEVQIDIzNSBkaWN0YXRlcyB0aGF0IG9uIGNhc2UtcHJlc2VydmluZywgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMKICAgICB0aGF0IGltcG9ydHMgYXJlIGNhc2Utc2Vuc2l0aXZlIHVubGVzcyB0aGUgUFlUSE9OQ0FTRU9LIGVudmlyb25tZW50CkBAIC0yMCwxMyArMjEsMTIgQEAKICAgICBuYW1lID0gJ01vRHVMZScKICAgICBhc3NlcnQgbmFtZSAhPSBuYW1lLmxvd2VyKCkKIAotICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgpOgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcihwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUykpCi0gICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgIGRlZiBmaW5kZXIoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpKQogCiAgICAgZGVmIHNlbnNpdGl2aXR5X3Rlc3Qoc2VsZik6CiAgICAgICAgICIiIkxvb2sgZm9yIGEgbW9kdWxlIHdpdGggbWF0Y2hpbmcgYW5kIG5vbi1tYXRjaGluZyBzZW5zaXRpdml0eS4iIiIKQEAgLTM2LDM1ICszNiw0OCBAQAogICAgICAgICB3aXRoIGNvbnRleHQgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNlbnNpdGl2ZV9wYXRoID0gb3MucGF0aC5qb2luKG1hcHBpbmdbJy5yb290J10sICdzZW5zaXRpdmUnKQogICAgICAgICAgICAgaW5zZW5zaXRpdmVfcGF0aCA9IG9zLnBhdGguam9pbihtYXBwaW5nWycucm9vdCddLCAnaW5zZW5zaXRpdmUnKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZChzZW5zaXRpdmVfcGF0aCksIHNlbGYuZmluZChpbnNlbnNpdGl2ZV9wYXRoKQorICAgICAgICAgICAgc2Vuc2l0aXZlX2ZpbmRlciA9IHNlbGYuZmluZGVyKHNlbnNpdGl2ZV9wYXRoKQorICAgICAgICAgICAgaW5zZW5zaXRpdmVfZmluZGVyID0gc2VsZi5maW5kZXIoaW5zZW5zaXRpdmVfcGF0aCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQoc2Vuc2l0aXZlX2ZpbmRlciksIHNlbGYuZmluZChpbnNlbnNpdGl2ZV9maW5kZXIpCiAKICAgICBkZWYgdGVzdF9zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CiAgICAgICAgICAgICBlbnYudW5zZXQoJ1BZVEhPTkNBU0VPSycpCi0gICAgICAgICAgICBpZiBiJ1BZVEhPTkNBU0VPSycgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBpbiBzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLmVudmlyb24gY2hhbmdlcyBub3QgcmVmbGVjdGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfb3MuZW52aXJvbicpCiAgICAgICAgICAgICBzZW5zaXRpdmUsIGluc2Vuc2l0aXZlID0gc2VsZi5zZW5zaXRpdml0eV90ZXN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbnNpdGl2ZSwgJ2xvYWRfbW9kdWxlJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5zZW5zaXRpdmUpCiAKICAgICBkZWYgdGVzdF9pbnNlbnNpdGl2ZShzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi5zZXQoJ1BZVEhPTkNBU0VPSycsICcxJykKLSAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gc2VsZi5pbXBvcnRsaWIuX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5lbnZpcm9uIGNoYW5nZXMgbm90IHJlZmxlY3RlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX29zLmVudmlyb24nKQogICAgICAgICAgICAgc2Vuc2l0aXZlLCBpbnNlbnNpdGl2ZSA9IHNlbGYuc2Vuc2l0aXZpdHlfdGVzdCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZW5zaXRpdmUsICdsb2FkX21vZHVsZScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc2Vuc2l0aXZlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHNlbnNpdGl2ZS5nZXRfZmlsZW5hbWUoc2VsZi5uYW1lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGluc2Vuc2l0aXZlLCAnbG9hZF9tb2R1bGUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGluc2Vuc2l0aXZlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIGluc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogCitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyKENhc2VTZW5zaXRpdml0eVRlc3QpOgorICAgIGRlZiBmaW5kKHNlbGYsIGZpbmRlcik6CisgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoc2VsZi5uYW1lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDYXNlU2Vuc2l0aXZpdHlUZXN0KQorRnJvemVuX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIsIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworY2xhc3MgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MShDYXNlU2Vuc2l0aXZpdHlUZXN0KToKKyAgICBkZWYgZmluZChzZWxmLCBmaW5kZXIpOgorICAgICAgICBmb3VuZCA9IGZpbmRlci5maW5kX3NwZWMoc2VsZi5uYW1lKQorICAgICAgICByZXR1cm4gZm91bmQubG9hZGVyIGlmIGZvdW5kIGlzIG5vdCBOb25lIGVsc2UgZm91bmQKKworRnJvemVuX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVA0NTEsIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maWxlX2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CmluZGV4IGQ3MTFjYjMuLjJkNDE1ZjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CkBAIC0xLDUyICsxLDUyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgaW1wb3J0bGliLmFiYwogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAoraW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQoraW1wb3J0bGliX2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQoraW1wb3J0bGliX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKwogaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN0YXQKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YywgdW5sb2FkCiAKIAotY2xhc3MgU2ltcGxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTaW1wbGVUZXN0KGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICAiIiJTaG91bGQgaGF2ZSBubyBpc3N1ZSBpbXBvcnRpbmcgYSBzb3VyY2UgbW9kdWxlIFtiYXNpY10uIEFuZCBpZiB0aGVyZSBpcwogICAgIGEgc3ludGF4IGVycm9yLCBpdCBzaG91bGQgcmFpc2UgYSBTeW50YXhFcnJvciBbc3ludGF4IGVycm9yXS4KIAogICAgICIiIgogCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5maWxlcGF0aCA9IG9zLnBhdGguam9pbignaGFtJywgc2VsZi5uYW1lICsgJy5weScpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZXBhdGgpCisKICAgICBkZWYgdGVzdF9sb2FkX21vZHVsZV9BUEkoc2VsZik6Ci0gICAgICAgICMgSWYgZnVsbG5hbWUgaXMgbm90IHNwZWNpZmllZCB0aGF0IGFzc3VtZSBzZWxmLm5hbWUgaXMgZGVzaXJlZC4KLSAgICAgICAgY2xhc3MgVGVzdGVyTWl4aW4oaW1wb3J0bGliLmFiYy5Mb2FkZXIpOgotICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKTogcmV0dXJuIGZ1bGxuYW1lCi0gICAgICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKTogcmV0dXJuICc8bW9kdWxlPicKKyAgICAgICAgY2xhc3MgVGVzdGVyKHNlbGYuYWJjLkZpbGVMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6IHJldHVybiAnYXR0ciA9IDQyJworICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6IHJldHVybiBGYWxzZQogCi0gICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIsIFRlc3Rlck1peGluKToKLSAgICAgICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKTogcGFzcwotICAgICAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6IHBhc3MKLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIF8pOiBwYXNzCi0KLSAgICAgICAgbmFtZSA9ICdtb2RfbmFtZScKLSAgICAgICAgbG9hZGVyID0gVGVzdGVyKG5hbWUsICdzb21lX3BhdGgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZShOb25lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKGxvYWRlci5uYW1lICsgJ1hYWCcpCisgICAgICAgIGxvYWRlciA9IFRlc3RlcignYmxhaCcsICdibGFoLnB5JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubG9hZCwgJ2JsYWgnKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgpICAjIFNob3VsZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uLgogCiAgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX0FQSShzZWxmKToKICAgICAgICAgIyBJZiBmdWxsbmFtZSBpcyBub3Qgc2V0IHRoZW4gYXNzdW1lIHNlbGYucGF0aCBpcyBkZXNpcmVkLgotICAgICAgICBjbGFzcyBUZXN0ZXIoaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyKToKKyAgICAgICAgY2xhc3MgVGVzdGVyKHNlbGYuYWJjLkZpbGVMb2FkZXIpOgogICAgICAgICAgICAgZGVmIGdldF9jb2RlKHNlbGYsIF8pOiBwYXNzCiAgICAgICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKTogcGFzcwogICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6IHBhc3MKQEAgLTYxLDExICs2MSwyMSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIGxvYWRlci5nZXRfZmlsZW5hbWUobmFtZSArICdYWFgnKQogCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG90aGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZXBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfJyArIHNlbGYubmFtZSwgc2VsZi5maWxlcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmxvYWRlciwgb3RoZXIpCisKICAgICAjIFtiYXNpY10KICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ190ZW1wJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3RlbXAnLCAnX19maWxlX18nOiBtYXBwaW5nWydfdGVtcCddLAogICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJyd9CkBAIC03NCw5ICs4NCwxMSBAQAogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZycsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nWydfcGtnLl9faW5pdF9fJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cnKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdfcGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3BrZycsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSwKICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFtvcy5wYXRoLmRpcm5hbWUobWFwcGluZ1snX3BrZy5fX2luaXRfXyddKV0sCkBAIC04Nyw5ICs5OSwxMSBAQAogCiAgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ19wa2cuX19pbml0X18nLCAnX3BrZy5tb2QnKWFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZy5tb2QnLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZy5tb2QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cubW9kJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cubW9kJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cubW9kJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19wa2cubW9kJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3BrZy5tb2QnLCAnX19maWxlX18nOiBtYXBwaW5nWydfcGtnLm1vZCddLAogICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJ19wa2cnfQpAQCAtMTAyLDEzICsxMTYsMTcgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgbW9kdWxlX2lkID0gaWQobW9kdWxlKQogICAgICAgICAgICAgbW9kdWxlX2RpY3RfaWQgPSBpZChtb2R1bGUuX19kaWN0X18pCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1snX3RlbXAnXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoInRlc3RpbmdfdmFyID0gNDJcbiIpCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Rlc3RpbmdfdmFyJywgbW9kdWxlLl9fZGljdF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICIndGVzdGluZ192YXInIG5vdCBpbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInswfSIuZm9ybWF0KGxpc3QobW9kdWxlLl9fZGljdF9fLmtleXMoKSkpKQpAQCAtMTIyLDE0ICsxNDAsMjAgQEAKICAgICAgICAgdmFsdWUgPSAnPHRlc3Q+JwogICAgICAgICBuYW1lID0gJ190ZW1wJwogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG5hbWUpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBvcmlnX21vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBvcmlnX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICAgICAgc2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciwgdmFsdWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tuYW1lXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJysrKyBiYWQgc3ludGF4ICsrKycpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6Ci0gICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG9yaWdfbW9kdWxlKQorICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob3JpZ19tb2R1bGUsIGF0dHIpLCB2YWx1ZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob3JpZ19tb2R1bGUsIGF0dHIpLCB2YWx1ZSkKIApAQCAtMTM4LDkgKzE2MiwxMSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1snX3RlbXAnXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJz0nKQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgotICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX3RlbXAnLCBzeXMubW9kdWxlcykKIAogICAgIGRlZiB0ZXN0X2ZpbGVfZnJvbV9lbXB0eV9zdHJpbmdfZGlyKHNlbGYpOgpAQCAtMTUxLDE0ICsxNzcsMTYgQEAKICAgICAgICAgICAgIGZpbGUud3JpdGUoIiMgdGVzdCBmaWxlIGZvciBpbXBvcnRsaWIiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX3RlbXAnKToKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCi0gICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX3BhdGgsIG1vZC5fX2ZpbGVfXykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuX19jYWNoZWRfXykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlX3BhdGgpCi0gICAgICAgICAgICBweWNhY2hlID0gb3MucGF0aC5kaXJuYW1lKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpKQorICAgICAgICAgICAgcHljYWNoZSA9IG9zLnBhdGguZGlybmFtZShzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHB5Y2FjaGUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocHljYWNoZSkKIApAQCAtMTY4LDcgKzE5Niw3IEBACiAgICAgICAgICMgdHJ1bmNhdGVkIHJhdGhlciB0aGFuIHJhaXNlIGFuIE92ZXJmbG93RXJyb3IuCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNvdXJjZSA9IG1hcHBpbmdbJ190ZW1wJ10KLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCJ4ID0gNSIpCiAgICAgICAgICAgICB0cnk6CkBAIC0xNzksMjAgKzIwNyw0OCBAQAogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZ2V0YXR0cihlcnJubywgJ0VPVkVSRkxPVycsIE5vbmUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNhbm5vdCBzZXQgbW9kaWZpY2F0aW9uIHRpbWUgdG8gbGFyZ2UgaW50ZWdlciAoe30pIi5mb3JtYXQoZSkpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICAjIFBFUCA0NTEKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ190ZW1wJykKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKCdfdGVtcCcsIGxvYWRlcikKKyAgICAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS54LCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGNvbXBpbGVkKSkKKyAgICAgICAgICAgIG9zLnVubGluayhjb21waWxlZCkKKyAgICAgICAgICAgICMgUEVQIDMwMgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKSAjIFhYWAogICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2tzLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19jYWNoZWRfXywgY29tcGlsZWQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC54LCA1KQogICAgICAgICAgICAgIyBUaGUgcHljIGZpbGUgd2FzIGNyZWF0ZWQuCi0gICAgICAgICAgICBvcy5zdGF0KGNvbXBpbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGNvbXBpbGVkKSkKKworICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ2dvb2QgbmFtZScsIHt9KQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdiYWQgbmFtZScpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2JhZCBuYW1lJywgbG9hZGVyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnYmFkIG5hbWUnKQorCitGcm96ZW5fU2ltcGxlVGVzdCwgU291cmNlX1NpbXBsZVRlc3QgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU2ltcGxlVGVzdCwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSwgYWJjPWltcG9ydGxpYl9hYmMsCisgICAgICAgIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKIAotY2xhc3MgQmFkQnl0ZWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJhZEJ5dGVjb2RlVGVzdDoKIAogICAgIGRlZiBpbXBvcnRfKHNlbGYsIGZpbGUsIG1vZHVsZV9uYW1lKToKICAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIobW9kdWxlX25hbWUsIGZpbGUpCi0gICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAjIFhYWCBDaGFuZ2UgdG8gdXNlIGV4ZWNfbW9kdWxlKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobW9kdWxlX25hbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlX25hbWUsIHN5cy5tb2R1bGVzKQogCiAgICAgZGVmIG1hbmlwdWxhdGVfYnl0ZWNvZGUoc2VsZiwgbmFtZSwgbWFwcGluZywgbWFuaXB1bGF0b3IsICosCkBAIC0yMDUsNyArMjYxLDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGlmIG5vdCBkZWxfc291cmNlOgotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gbWFrZV9sZWdhY3lfcHljKG1hcHBpbmdbbmFtZV0pCkBAIC0yOTEsMTAgKzM0NywyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiJ1x4MDBceDAwXHgwMFx4MDAnICsgYmNbNDpdKQogICAgICAgICAgICAgdGVzdCgnX3RlbXAnLCBtYXBwaW5nLCBiY19wYXRoKQogCitjbGFzcyBCYWRCeXRlY29kZVRlc3RQRVA0NTEoQmFkQnl0ZWNvZGVUZXN0KToKIAotY2xhc3MgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0KEJhZEJ5dGVjb2RlVGVzdCk6CisgICAgZGVmIGltcG9ydF8oc2VsZiwgZmlsZSwgbW9kdWxlX25hbWUpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLmxvYWRlcihtb2R1bGVfbmFtZSwgZmlsZSkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIobW9kdWxlX25hbWUsIGxvYWRlcikKKyAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKIAotICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCitjbGFzcyBCYWRCeXRlY29kZVRlc3RQRVAzMDIoQmFkQnl0ZWNvZGVUZXN0KToKKworICAgIGRlZiBpbXBvcnRfKHNlbGYsIGZpbGUsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIobW9kdWxlX25hbWUsIGZpbGUpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKworCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3Q6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubG9hZGVyID0gY2xzLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCiAKICAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZShzZWxmKToKQEAgLTMzMyw3ICs0MDgsOCBAQAogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGJ5dGVjb2RlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlY29kZV9maWxlLnJlYWQoNCksIGltcC5nZXRfbWFnaWMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCiAKICAgICAgICAgc2VsZi5fdGVzdF9iYWRfbWFnaWModGVzdCkKIApAQCAtMzgzLDEzICs0NTksMTMgQEAKICAgICAgICAgemVyb3MgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyK2InKSBhcyBieXRlY29kZV9maWxlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUuc2Vlayg0KQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUud3JpdGUoemVyb3MpCiAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBpbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCisgICAgICAgICAgICBzb3VyY2VfdGltZXN0YW1wID0gc2VsZi5pbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoNCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwgc291cmNlX3RpbWVzdGFtcCkKQEAgLTQwMSw3ICs0NzcsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICAjIENyZWF0ZSBieXRlY29kZSB0aGF0IHdpbGwgbmVlZCB0byBiZSByZS1jcmVhdGVkLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS5zZWVrKDApCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZShiJ1x4MDBceDAwXHgwMFx4MDAnKQpAQCAtNDA5LDE2ICs0ODUsMzQgQEAKICAgICAgICAgICAgIG9zLmNobW9kKGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIElPRXJyb3IhCisgICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIE9TRXJyb3IhCiAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgTWFrZSB3cml0YWJsZSBmb3IgZXZlbnR1YWwgY2xlYW4tdXAuCiAgICAgICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwgc3RhdC5TX0lXVVNSKQogCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEoCisgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdCwgQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKToKKyAgICBwYXNzCiAKLWNsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKK0Zyb3plbl9Tb3VyY2VCYWRCeXRlY29kZVBFUDQ1MSwgU291cmNlX1NvdXJjZUJhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSwKKyAgICAgICAgYWJjPWltcG9ydGxpYl9hYmMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKLSAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKK2NsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMigKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0LCBCYWRCeXRlY29kZVRlc3RQRVAzMDIpOgorICAgIHBhc3MKKworRnJvemVuX1NvdXJjZUJhZEJ5dGVjb2RlUEVQMzAyLCBTb3VyY2VfU291cmNlQmFkQnl0ZWNvZGVQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LAorICAgICAgICBhYmM9aW1wb3J0bGliX2FiYywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0OgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLmxvYWRlciA9IGNscy5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGUoc2VsZik6CiAgICAgICAgIGRlZiB0ZXN0KG5hbWUsIG1hcHBpbmcsIGJ5dGVjb2RlX3BhdGgpOgpAQCAtNDczLDE0ICs1NjcsMjIgQEAKICAgICBkZWYgdGVzdF9ub25fY29kZV9tYXJzaGFsKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X25vbl9jb2RlX21hcnNoYWwoZGVsX3NvdXJjZT1UcnVlKQogCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSk6CisgICAgcGFzcwogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChTaW1wbGVUZXN0LAotICAgICAgICAgICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsCi0gICAgICAgICAgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QKLSAgICAgICAgICAgICAgICApCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQorCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDMwMik6CisgICAgcGFzcworCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVAzMDIsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQppbmRleCA4ZTQ5ODY4Li40NzMyOTdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDkgKzEsMTAgQEAKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBlcnJubwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHN0YXQKQEAgLTM5LDE0ICs0MCwxNSBAQAogICAgICIiIgogCiAgICAgZGVmIGdldF9maW5kZXIoc2VsZiwgcm9vdCk6Ci0gICAgICAgIGxvYWRlcl9kZXRhaWxzID0gWyhtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIocm9vdCwgKmxvYWRlcl9kZXRhaWxzKQorICAgICAgICBsb2FkZXJfZGV0YWlscyA9IFsoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihyb290LCAqbG9hZGVyX2RldGFpbHMpCiAKICAgICBkZWYgaW1wb3J0XyhzZWxmLCByb290LCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmluZGVyKHJvb3QpLmZpbmRfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5nZXRfZmluZGVyKHJvb3QpCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kKGZpbmRlciwgbW9kdWxlLCBsb2FkZXJfb25seT1UcnVlKQogCiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3QsIGNyZWF0ZT1Ob25lLCAqLCBjb21waWxlXz1Ob25lLCB1bmxpbms9Tm9uZSk6CiAgICAgICAgICIiIlRlc3QgdGhlIGZpbmRpbmcgb2YgJ3Rlc3QnIHdpdGggdGhlIGNyZWF0aW9uIG9mIG1vZHVsZXMgbGlzdGVkIGluCkBAIC0xMjQsMjAgKzEyNiwyMCBAQAogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nX2Zvcl9kaXIoc2VsZik6CiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyBmcm9tIHN5cy5wYXRoIG1lYW5zIHRvIHNlYXJjaCBpbiB0aGUgY3dkLgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKICAgICAgICAgd2l0aCBvcGVuKCdtb2QucHknLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCIjIHRlc3QgZmlsZSBmb3IgaW1wb3J0bGliIikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKCdtb2QnKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobG9hZGVyLCAnbG9hZF9tb2R1bGUnKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluaygnbW9kLnB5JykKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgogICAgICAgICAjIGludmFsaWRhdGVfY2FjaGVzKCkgc2hvdWxkIHJlc2V0IHRoZSBtdGltZS4KLSAgICAgICAgZmluZGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKCcnLCAoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCiAgICAgICAgIGZpbmRlci5fcGF0aF9tdGltZSA9IDQyCiAgICAgICAgIGZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGVyLl9wYXRoX210aW1lLCAtMSkKQEAgLTE0Nyw4ICsxNDksMTAgQEAKICAgICAgICAgbW9kID0gJ21vZCcKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhtb2QpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBmaW5kZXIgPSBzZWxmLmdldF9maW5kZXIobWFwcGluZ1snLnJvb3QnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGZpbmRlci5maW5kX21vZHVsZShtb2QpKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmaW5kZXIuZmluZF9tb2R1bGUobW9kKSkKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoZm91bmQpCisgICAgICAgIGZvdW5kID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmb3VuZCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAogICAgICAgICAgICAgJ29zLmNobW9kKCkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbmVlZGVkIGFyZ3VtZW50cyB1bmRlciBXaW5kb3dzJykKQEAgLTE3MiwyMCArMTc2LDU3IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCB0ZW1wZGlyKQogICAgICAgICBvcy5jaG1vZCh0ZW1wZGlyLm5hbWUsIHN0YXQuU19JV1VTUiB8IHN0YXQuU19JWFVTUikKICAgICAgICAgZmluZGVyID0gc2VsZi5nZXRfZmluZGVyKHRlbXBkaXIubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBmaW5kZXIuZmluZF9sb2FkZXIoJ2RvZXNub3RleGlzdCcpKQorICAgICAgICBmb3VuZCA9IHNlbGYuX2ZpbmQoZmluZGVyLCAnZG9lc25vdGV4aXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgc2VsZi5OT1RfRk9VTkQpCiAKICAgICBkZWYgdGVzdF9pZ25vcmVfZmlsZShzZWxmKToKICAgICAgICAgIyBJZiBhIGRpcmVjdG9yeSBnb3QgY2hhbmdlZCB0byBhIGZpbGUgZnJvbSB1bmRlcm5lYXRoIHVzLCB0aGVuIGRvbid0CiAgICAgICAgICMgd29ycnkgYWJvdXQgbG9va2luZyBmb3Igc3VibW9kdWxlcy4KICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmaWxlX29iajoKICAgICAgICAgICAgIGZpbmRlciA9IHNlbGYuZ2V0X2ZpbmRlcihmaWxlX29iai5uYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBmaW5kZXIuZmluZF9sb2FkZXIoJ2RvZXNub3RleGlzdCcpKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLl9maW5kKGZpbmRlciwgJ2RvZXNub3RleGlzdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzZWxmLk5PVF9GT1VORCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKK2NsYXNzIEZpbmRlclRlc3RzUEVQNDUxKEZpbmRlclRlc3RzKToKKworICAgIE5PVF9GT1VORCA9IE5vbmUKKworICAgIGRlZiBfZmluZChzZWxmLCBmaW5kZXIsIG5hbWUsIGxvYWRlcl9vbmx5PUZhbHNlKToKKyAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyIGlmIHNwZWMgaXMgbm90IE5vbmUgZWxzZSBzcGVjCisKK0Zyb3plbl9GaW5kZXJUZXN0c1BFUDQ1MSwgU291cmNlX0ZpbmRlclRlc3RzUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEZpbmRlclRlc3RzUEVQNDUxLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisKK2NsYXNzIEZpbmRlclRlc3RzUEVQNDIwKEZpbmRlclRlc3RzKToKKworICAgIE5PVF9GT1VORCA9IChOb25lLCBbXSkKKworICAgIGRlZiBfZmluZChzZWxmLCBmaW5kZXIsIG5hbWUsIGxvYWRlcl9vbmx5PUZhbHNlKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBsb2FkZXJfcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkZXJfcG9ydGlvbnNbMF0gaWYgbG9hZGVyX29ubHkgZWxzZSBsb2FkZXJfcG9ydGlvbnMKKworRnJvemVuX0ZpbmRlclRlc3RzUEVQNDIwLCBTb3VyY2VfRmluZGVyVGVzdHNQRVA0MjAgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHNQRVA0MjAsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKworY2xhc3MgRmluZGVyVGVzdHNQRVAzMDIoRmluZGVyVGVzdHMpOgorCisgICAgTk9UX0ZPVU5EID0gTm9uZQorCisgICAgZGVmIF9maW5kKHNlbGYsIGZpbmRlciwgbmFtZSwgbG9hZGVyX29ubHk9RmFsc2UpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSkKKworRnJvemVuX0ZpbmRlclRlc3RzUEVQMzAyLCBTb3VyY2VfRmluZGVyVGVzdHNQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHNQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKaW5kZXggNmE3ODc5Mi4uOTJkYTc3MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQpAQCAtMSwxNyArMSwxOCBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXAKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFBhdGhIb29rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQYXRoSG9va1Rlc3Q6CiAKICAgICAiIiJUZXN0IHRoZSBwYXRoIGhvb2sgZm9yIHNvdXJjZS4iIiIKIAogICAgIGRlZiBwYXRoX2hvb2soc2VsZik6Ci0gICAgICAgIHJldHVybiBtYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCiAKICAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdkdW1teScpIGFzIG1hcHBpbmc6CkBAIC0yMiwxMSArMjMsOCBAQAogICAgICAgICAjIFRoZSBlbXB0eSBzdHJpbmcgcmVwcmVzZW50cyB0aGUgY3dkLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLnBhdGhfaG9vaygpKCcnKSwgJ2ZpbmRfbW9kdWxlJykpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUGF0aEhvb2tUZXN0KQorRnJvemVuX1BhdGhIb29rVGVzdCwgU291cmNlX1BhdGhIb29rdGVzdCA9IHV0aWwudGVzdF9ib3RoKFBhdGhIb29rVGVzdCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKaW5kZXggYmEwMmI0NC4uYzYyZGZhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQpAQCAtMSwxOSArMSwyNCBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiAjIEJlY2F1c2Ugc3lzLnBhdGggZ2V0cyBlc3NlbnRpYWxseSBibGFua2VkLCBuZWVkIHRvIGhhdmUgdW5pY29kZWRhdGEgYWxyZWFkeQogIyBpbXBvcnRlZCBmb3IgdGhlIHBhcnNlciB0byB1c2UuCiBpbXBvcnQgdW5pY29kZWRhdGEKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCiAKIAogQ09ESU5HX1JFID0gcmUuY29tcGlsZShyJ15bIFx0XGZdKiMuKmNvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknLCByZS5BU0NJSSkKIAogCi1jbGFzcyBFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRW5jb2RpbmdUZXN0OgogCiAgICAgIiIiUEVQIDMxMjAgbWFrZXMgVVRGLTggdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIHNvdXJjZSBjb2RlCiAgICAgW2RlZmF1bHQgZW5jb2RpbmddLgpAQCAtMzUsOSArNDAsOSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKHNlbGYubW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tzZWxmLm1vZHVsZV9uYW1lXSwgJ3diJykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKHNvdXJjZSkKLSAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW3NlbGYubW9kdWxlX25hbWVdKQotICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZChsb2FkZXIpCiAKICAgICBkZWYgY3JlYXRlX3NvdXJjZShzZWxmLCBlbmNvZGluZyk6CiAgICAgICAgIGVuY29kaW5nX2xpbmUgPSAiIyBjb2Rpbmc9ezB9Ii5mb3JtYXQoZW5jb2RpbmcpCkBAIC04NCw4ICs4OSwyOSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKICAgICAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc291cmNlKQogCitjbGFzcyBFbmNvZGluZ1Rlc3RQRVA0NTEoRW5jb2RpbmdUZXN0KToKIAotY2xhc3MgTGluZUVuZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBsb2FkKHNlbGYsIGxvYWRlcik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm1vZHVsZV9uYW1lLCBsb2FkZXIpCisgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIHJldHVybiBtb2R1bGUKKworRnJvemVuX0VuY29kaW5nVGVzdFBFUDQ1MSwgU291cmNlX0VuY29kaW5nVGVzdFBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFbmNvZGluZ1Rlc3RQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKK2NsYXNzIEVuY29kaW5nVGVzdFBFUDMwMihFbmNvZGluZ1Rlc3QpOgorCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKK0Zyb3plbl9FbmNvZGluZ1Rlc3RQRVAzMDIsIFNvdXJjZV9FbmNvZGluZ1Rlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRW5jb2RpbmdUZXN0UEVQMzAyLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisKK2NsYXNzIExpbmVFbmRpbmdUZXN0OgogCiAgICAgciIiIlNvdXJjZSB3cml0dGVuIHdpdGggdGhlIHRocmVlIHR5cGVzIG9mIGxpbmUgZW5kaW5ncyAoXG4sIFxyXG4sIFxyKQogICAgIG5lZWQgdG8gYmUgcmVhZGFibGUgW2NyXVtjcmxmXVtsZl0uIiIiCkBAIC05Nyw5ICsxMjMsOSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG1vZHVsZV9uYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgd2l0aCBvcGVuKG1hcHBpbmdbbW9kdWxlX25hbWVdLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoc291cmNlKQotICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbW9kdWxlX25hbWVdKQotICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbW9kdWxlX25hbWVdKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZChsb2FkZXIsIG1vZHVsZV9uYW1lKQogCiAgICAgIyBbY3JdCiAgICAgZGVmIHRlc3RfY3Ioc2VsZik6CkBAIC0xMTMsMTEgKzEzOSwyNyBAQAogICAgIGRlZiB0ZXN0X2xmKHNlbGYpOgogICAgICAgICBzZWxmLnJ1bl90ZXN0KGInXG4nKQogCitjbGFzcyBMaW5lRW5kaW5nVGVzdFBFUDQ1MShMaW5lRW5kaW5nVGVzdCk6CiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEVuY29kaW5nVGVzdCwgTGluZUVuZGluZ1Rlc3QpCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobW9kdWxlX25hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9sb2FkZXIobW9kdWxlX25hbWUsIGxvYWRlcikKKyAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCitGcm96ZW5fTGluZUVuZGluZ1Rlc3RQRVA0NTEsIFNvdXJjZV9MaW5lRW5kaW5nVGVzdFBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMaW5lRW5kaW5nVGVzdFBFUDQ1MSwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworY2xhc3MgTGluZUVuZGluZ1Rlc3RQRVAzMDIoTGluZUVuZGluZ1Rlc3QpOgorCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKworRnJvemVuX0xpbmVFbmRpbmdUZXN0UEVQMzAyLCBTb3VyY2VfTGluZUVuZGluZ1Rlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTGluZUVuZGluZ1Rlc3RQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQppbmRleCBhZTY1NjYzLi42M2NkMjVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQpAQCAtMiw3ICsyLDYgQEAKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZXJybm8KIGltcG9ydCBmdW5jdG9vbHMKLWltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYWJjLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKaW5kZXggYzYyMGMzNy4uYTFmOGU3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKQEAgLTEsOSArMSwyMyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2ltcG9ydCB3YXJuaW5ncwogCitmcm9tIC4gaW1wb3J0IHV0aWwKIAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2FiYywgc291cmNlX2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKKyMjIyMjIEluaGVyaXRhbmNlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBjbGFzcyBJbmhlcml0YW5jZVRlc3RzOgogCiAgICAgIiIiVGVzdCB0aGF0IHRoZSBzcGVjaWZpZWQgY2xhc3MgaXMgYSBzdWJjbGFzcy9zdXBlcmNsYXNzIG9mIHRoZSBleHBlY3RlZApAQCAtMTQsOCArMjgsMTkgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5zdXBlcmNsYXNzZXMgPSBbZ2V0YXR0cihzZWxmLmFiYywgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5zdXBlcmNsYXNzX25hbWVzXQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzdWJjbGFzc19uYW1lcycpOgorICAgICAgICAgICAgIyBCZWNhdXNlIHRlc3Quc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCkgY3JlYXRlcyBhIG5ldworICAgICAgICAgICAgIyBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBwZXIgbW9kdWxlLCBpbmhlcml0YW5jZSBjaGVja3MgZmFpbCB3aGVuCisgICAgICAgICAgICAjIGNoZWNraW5nIGFjcm9zcyBtb2R1bGUgYm91bmRhcmllcyAoaS5lLiB0aGUgX2Jvb3RzdHJhcCBpbiBhYmMgaXMKKyAgICAgICAgICAgICMgbm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gbWFjaGluZXJ5KS4gVGhhdCBtZWFucyBzdGVhbGluZyBvbmUgb2YKKyAgICAgICAgICAgICMgdGhlIG1vZHVsZXMgZnJvbSB0aGUgb3RoZXIgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIGluc3RhbmNlIGlzIHVzZWQuCisgICAgICAgICAgICBzZWxmLnN1YmNsYXNzZXMgPSBbZ2V0YXR0cihzZWxmLmFiYy5tYWNoaW5lcnksIGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuc3ViY2xhc3NfbmFtZXNdCiAgICAgICAgIGFzc2VydCBzZWxmLnN1YmNsYXNzZXMgb3Igc2VsZi5zdXBlcmNsYXNzZXMsIHNlbGYuX19jbGFzc19fCi0gICAgICAgIHNlbGYuX190ZXN0ID0gZ2V0YXR0cihhYmMsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICB0ZXN0aW5nID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18ucGFydGl0aW9uKCdfJylbMl0KKyAgICAgICAgc2VsZi5fX3Rlc3QgPSBnZXRhdHRyKHNlbGYuYWJjLCB0ZXN0aW5nKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGV4cGVjdGVkIHN1YmNsYXNzZXMgaW5oZXJpdC4KQEAgLTI5LDc1ICs1NCw4OTggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNlbGYuX190ZXN0LCBzdXBlcmNsYXNzKSwKICAgICAgICAgICAgICAgICJ7MH0gaXMgbm90IGEgc3VwZXJjbGFzcyBvZiB7MX0iLmZvcm1hdChzdXBlcmNsYXNzLCBzZWxmLl9fdGVzdCkpCiAKK2RlZiBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoYmFzZV9jbGFzcyk6CisgICAgZGVmIHNldF9mcm96ZW4obnMpOgorICAgICAgICBuc1snYWJjJ10gPSBmcm96ZW5fYWJjCisgICAgZGVmIHNldF9zb3VyY2UobnMpOgorICAgICAgICBuc1snYWJjJ10gPSBzb3VyY2VfYWJjCiAKLWNsYXNzIE1ldGFQYXRoRmluZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuRmluZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuUGF0aEZpbmRlciwgbWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlcl0KLQotCi1jbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5GaW5kZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuRmlsZUZpbmRlcl0KLQotCi1jbGFzcyBMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3ViY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotY2xhc3MgUmVzb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5Mb2FkZXJdCi0KLQotY2xhc3MgSW5zcGVjdExvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW2FiYy5QeUxvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5JbnNwZWN0TG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyXQotCi0KLWNsYXNzIEZpbGVMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5SZXNvdXJjZUxvYWRlciwgYWJjLkV4ZWN1dGlvbkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLCBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXJdCi0KLQotY2xhc3MgU291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBQeUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlciwgYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQotCi0KLWNsYXNzIFB5UHljTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKICAgICBjbGFzc2VzID0gW10KLSAgICBmb3IgY2xhc3NfIGluIGdsb2JhbHMoKS52YWx1ZXMoKToKLSAgICAgICAgaWYgKGluc3BlY3QuaXNjbGFzcyhjbGFzc18pIGFuZAotICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoY2xhc3NfLCB1bml0dGVzdC5UZXN0Q2FzZSkgYW5kCi0gICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhjbGFzc18sIEluaGVyaXRhbmNlVGVzdHMpKToKLSAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGNsYXNzXykKLSAgICBydW5fdW5pdHRlc3QoKmNsYXNzZXMpCisgICAgZm9yIHByZWZpeCwgbnNfc2V0IGluIFsoJ0Zyb3plbicsIHNldF9mcm96ZW4pLCAoJ1NvdXJjZScsIHNldF9zb3VyY2UpXToKKyAgICAgICAgY2xhc3Nlcy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKCdfJy5qb2luKFtwcmVmaXgsIGJhc2VfY2xhc3MuX19uYW1lX19dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYXNlX2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2JvZHk9bnNfc2V0KSkKKyAgICByZXR1cm4gY2xhc3NlcworCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0ZpbmRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0J1aWx0aW5JbXBvcnRlcicsICdGcm96ZW5JbXBvcnRlcicsICdQYXRoRmluZGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAnV2luZG93c1JlZ2lzdHJ5RmluZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoTWV0YVBhdGhGaW5kZXIpCitGcm96ZW5fTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnRmluZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnRmlsZUZpbmRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlcikKK0Zyb3plbl9QYXRoRW50cnlGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUGF0aEVudHJ5RmluZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoUmVzb3VyY2VMb2FkZXIpCitGcm96ZW5fUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0xvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0J1aWx0aW5JbXBvcnRlcicsICdGcm96ZW5JbXBvcnRlcicsICdFeHRlbnNpb25GaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoSW5zcGVjdExvYWRlcikKK0Zyb3plbl9JbnNwZWN0TG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnSW5zcGVjdExvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0V4dGVuc2lvbkZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIpCitGcm96ZW5fRXhlY3V0aW9uTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0V4ZWN1dGlvbkxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEZpbGVMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnUmVzb3VyY2VMb2FkZXInLCAnRXhlY3V0aW9uTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnU291cmNlRmlsZUxvYWRlcicsICdTb3VyY2VsZXNzRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEZpbGVMb2FkZXIpCitGcm96ZW5fRmlsZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgU291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ1Jlc291cmNlTG9hZGVyJywgJ0V4ZWN1dGlvbkxvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ1NvdXJjZUZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhTb3VyY2VMb2FkZXIpCitGcm96ZW5fU291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX1NvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisjIyMjIyBEZWZhdWx0IHJldHVybiB2YWx1ZXMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZGVmIG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcyk6CisgICAgY2xhc3NlcyA9IFtdCisgICAgZm9yIGtpbmQsIGFiYyBpbiBbKCdGcm96ZW4nLCBmcm96ZW5fYWJjKSwgKCdTb3VyY2UnLCBzb3VyY2VfYWJjKV06CisgICAgICAgIG5hbWUgPSAnXycuam9pbihba2luZCwgYmFzZV9jbGFzcy5fX25hbWVfX10pCisgICAgICAgIGJhc2VfY2xhc3NlcyA9IGJhc2VfY2xhc3MsIGdldGF0dHIoYWJjLCBiYXNlX2NsYXNzLl9fbmFtZV9fKQorICAgICAgICBjbGFzc2VzLmFwcGVuZCh0eXBlcy5uZXdfY2xhc3MobmFtZSwgYmFzZV9jbGFzc2VzKSkKKyAgICByZXR1cm4gY2xhc3NlcworCitkZWYgbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoYmFzZV9jbGFzcywgdGVzdF9jbGFzcyk6CisgICAgZnJvemVuX2NsYXNzLCBzb3VyY2VfY2xhc3MgPSBtYWtlX2FiY19zdWJjbGFzc2VzKGJhc2VfY2xhc3MpCisgICAgdGVzdHMgPSBbXQorICAgIGZvciBwcmVmaXgsIGNsYXNzX2luX3Rlc3QgaW4gWygnRnJvemVuJywgZnJvemVuX2NsYXNzKSwgKCdTb3VyY2UnLCBzb3VyY2VfY2xhc3MpXToKKyAgICAgICAgZGVmIHNldF9ucyhucyk6CisgICAgICAgICAgICBuc1snaW5zJ10gPSBjbGFzc19pbl90ZXN0KCkKKyAgICAgICAgdGVzdHMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcygnXycuam9pbihbcHJlZml4LCB0ZXN0X2NsYXNzLl9fbmFtZV9fXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2JvZHk9c2V0X25zKSkKKyAgICByZXR1cm4gdGVzdHMKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlcjoKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQorCitGcm96ZW5fTVBGLCBTb3VyY2VfTVBGID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhNZXRhUGF0aEZpbmRlcikKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9maW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgIyBEZWZhdWx0IHNob3VsZCByZXR1cm4gTm9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5pbnMuZmluZF9tb2R1bGUoJ3NvbWV0aGluZycsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CisgICAgICAgICMgQ2FsbGluZyB0aGUgbWV0aG9kIGlzIGEgbm8tb3AuCisgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKE1ldGFQYXRoRmluZGVyLCBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fTVBGRGVmYXVsdFRlc3RzLCBTb3VyY2VfTVBGRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXI6CisKKyAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5maW5kX2xvYWRlcihmdWxsbmFtZSkKKworRnJvemVuX1BFRiwgU291cmNlX1BFRiA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUGF0aEVudHJ5RmluZGVyKQorCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9maW5kX2xvYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBzZWxmLmlucy5maW5kX2xvYWRlcignc29tZXRoaW5nJykpCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5pbnMuZmluZF9tb2R1bGUoJ3NvbWV0aGluZycpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGJlIGEgbm8tb3AuCisgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlciwgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9QRUZEZWZhdWx0VGVzdHMsIFNvdXJjZV9QRUZEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIExvYWRlcjoKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorCisKK0Zyb3plbl9MLCBTb3VyY2VfTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoTG9hZGVyKQorCisKK2NsYXNzIExvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5sb2FkX21vZHVsZSgnc29tZXRoaW5nJykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLm1vZHVsZV9yZXByKG1vZCkKKyAgICAgICAgb3JpZ2luYWxfcmVwciA9IHJlcHIobW9kKQorICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYuaW5zCisgICAgICAgICMgU2hvdWxkIHN0aWxsIHJldHVybiBhIHByb3BlciByZXByLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtb2QpKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoTG9hZGVyLCBMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0xEZWZhdWx0VGVzdHMsIFNvdXJjZUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFJlc291cmNlTG9hZGVyKExvYWRlcik6CisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCisKKworRnJvemVuX1JMLCBTb3VyY2VfUkwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFJlc291cmNlTG9hZGVyKQorCisKK2NsYXNzIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9kYXRhKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X2RhdGEoJy9zb21lL3BhdGgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoUmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9STERlZmF1bHRUZXN0cywgU291cmNlX1JMRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlcik6CisKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UoZnVsbG5hbWUpCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9zb3VyY2UoZnVsbG5hbWUpCisKKworRnJvemVuX0lMLCBTb3VyY2VfSUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKEluc3BlY3RMb2FkZXIpCisKKworY2xhc3MgSW5zcGVjdExvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmlzX3BhY2thZ2UoJ2JsYWgnKQorCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfc291cmNlKCdibGFoJykKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKEluc3BlY3RMb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0lMRGVmYXVsdFRlc3RzLCBTb3VyY2VfSUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyKToKKworICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisKK0Zyb3plbl9FTCwgU291cmNlX0VMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhFeGVjdXRpb25Mb2FkZXIpCisKKworY2xhc3MgRXhlY3V0aW9uTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfZmlsZW5hbWUoJ2JsYWgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoRXhlY3V0aW9uTG9hZGVyLCBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9FTERlZmF1bHRUZXN0cywgU291cmNlX0VMRGVmYXVsdHNUZXN0cyA9IHRlc3RzCisKKyMjIyMjIE1ldGFQYXRoRmluZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyRmluZE1vZHVsZVRlc3RzOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRlcihjbHMsIHNwZWMpOgorICAgICAgICBjbGFzcyBNZXRhUGF0aFNwZWNGaW5kZXIoY2xzLmFiYy5NZXRhUGF0aEZpbmRlcik6CisKKyAgICAgICAgICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxlZF9mb3IgPSBmdWxsbmFtZSwgcGF0aAorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICAgICAgcmV0dXJuIE1ldGFQYXRoU3BlY0ZpbmRlcigpCisKKyAgICBkZWYgdGVzdF9ub19zcGVjKHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLmZpbmRlcihOb25lKQorICAgICAgICBwYXRoID0gWydhJywgJ2InLCAnYyddCisgICAgICAgIG5hbWUgPSAnYmxhaCcKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZm91bmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgZmluZGVyLmNhbGxlZF9mb3JbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgZmluZGVyLmNhbGxlZF9mb3JbMV0pCisKKyAgICBkZWYgdGVzdF9zcGVjKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBvYmplY3QoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoJ2JsYWgnLCBsb2FkZXIpCisgICAgICAgIGZpbmRlciA9IHNlbGYuZmluZGVyKHNwZWMpCisgICAgICAgIGZvdW5kID0gZmluZGVyLmZpbmRfbW9kdWxlKCdibGFoJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb3VuZCwgc3BlYy5sb2FkZXIpCisKKworRnJvemVuX01QRkZpbmRNb2R1bGVUZXN0cywgU291cmNlX01QRkZpbmRNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBNZXRhUGF0aEZpbmRlckZpbmRNb2R1bGVUZXN0cywKKyAgICAgICAgYWJjPShmcm96ZW5fYWJjLCBzb3VyY2VfYWJjKSwKKyAgICAgICAgdXRpbD0oZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsKSkKKworIyMjIyMgUGF0aEVudHJ5RmluZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgUGF0aEVudHJ5RmluZGVyRmluZExvYWRlclRlc3RzOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRlcihjbHMsIHNwZWMpOgorICAgICAgICBjbGFzcyBQYXRoRW50cnlTcGVjRmluZGVyKGNscy5hYmMuUGF0aEVudHJ5RmluZGVyKToKKworICAgICAgICAgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkX2ZvciA9IGZ1bGxuYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgICAgICByZXR1cm4gUGF0aEVudHJ5U3BlY0ZpbmRlcigpCisKKyAgICBkZWYgdGVzdF9ub19zcGVjKHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLmZpbmRlcihOb25lKQorICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgIGZvdW5kID0gZmluZGVyLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZvdW5kWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBmb3VuZFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBmaW5kZXIuY2FsbGVkX2ZvcikKKworICAgIGRlZiB0ZXN0X3NwZWNfd2l0aF9sb2FkZXIoc2VsZik6CisgICAgICAgIGxvYWRlciA9IG9iamVjdCgpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcignYmxhaCcsIGxvYWRlcikKKyAgICAgICAgZmluZGVyID0gc2VsZi5maW5kZXIoc3BlYykKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9sb2FkZXIoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvdW5kWzBdLCBzcGVjLmxvYWRlcikKKworICAgIGRlZiB0ZXN0X3NwZWNfd2l0aF9wb3J0aW9ucyhzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2JsYWgnLCBOb25lKQorICAgICAgICBwYXRocyA9IFsnYScsICdiJywgJ2MnXQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gcGF0aHMKKyAgICAgICAgZmluZGVyID0gc2VsZi5maW5kZXIoc3BlYykKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9sb2FkZXIoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmb3VuZFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRocywgZm91bmRbMV0pCisKKworRnJvemVuX1BFRkZpbmRMb2FkZXJUZXN0cywgU291cmNlX1BFRkZpbmRMb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXRoRW50cnlGaW5kZXJGaW5kTG9hZGVyVGVzdHMsCisgICAgICAgIGFiYz0oZnJvemVuX2FiYywgc291cmNlX2FiYyksCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksCisgICAgICAgIHV0aWw9KGZyb3plbl91dGlsLCBzb3VyY2VfdXRpbCkpCisKKworIyMjIyMgTG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIExvYWRlckxvYWRNb2R1bGVUZXN0czoKKworICAgIGRlZiBsb2FkZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFNwZWNMb2FkZXIoc2VsZi5hYmMuTG9hZGVyKToKKyAgICAgICAgICAgIGZvdW5kID0gTm9uZQorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mb3VuZCA9IG1vZHVsZQorCisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgIiIiRm9yY2Ugc29tZSBub24tZGVmYXVsdCBtb2R1bGUgc3RhdGUgdG8gYmUgc2V0LiIiIgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIFNwZWNMb2FkZXIoKQorCisgICAgZGVmIHRlc3RfZnJlc2goc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKCkKKyAgICAgICAgbmFtZSA9ICdibGFoJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmZvdW5kCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW25hbWVdLCBtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbW9kdWxlLl9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIG1vZHVsZS5fX3NwZWNfXy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtb2R1bGUuX19wYXRoX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1vZHVsZS5fX3BhdGhfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKQorCisgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgICAgICAgICAgZm91bmQgPSBsb2FkZXIuZm91bmQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm91bmQsIHN5cy5tb2R1bGVzW25hbWVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUsIHN5cy5tb2R1bGVzW25hbWVdKQorCisKK0Zyb3plbl9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMsIFNvdXJjZV9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTG9hZGVyTG9hZE1vZHVsZVRlc3RzLAorICAgICAgICBhYmM9KGZyb3plbl9hYmMsIHNvdXJjZV9hYmMpLAorICAgICAgICB1dGlsPShmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwpKQorCisKKyMjIyMjIEluc3BlY3RMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBJbnNwZWN0TG9hZGVyU291cmNlVG9Db2RlVGVzdHM6CisKKyAgICBkZWYgc291cmNlX3RvX21vZHVsZShzZWxmLCBkYXRhLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJIZWxwIHdpdGggc291cmNlX3RvX2NvZGUoKSB0ZXN0cy4iIiIKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShkYXRhLCBwYXRoKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfc291cmNlKHNlbGYpOgorICAgICAgICAjIFNpbmNlIGNvbXBpbGUoKSBjYW4gaGFuZGxlIHN0cmluZ3MsIHNvIHNob3VsZCBzb3VyY2VfdG9fY29kZSgpLgorICAgICAgICBzb3VyY2UgPSAnYXR0ciA9IDQyJworICAgICAgICBtb2R1bGUgPSBzZWxmLnNvdXJjZV90b19tb2R1bGUoc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdhdHRyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfYnl0ZXMoc2VsZik6CisgICAgICAgICMgU2luY2UgY29tcGlsZSgpIGNhbiBoYW5kbGUgYnl0ZXMsIHNvIHNob3VsZCBzb3VyY2VfdG9fY29kZSgpLgorICAgICAgICBzb3VyY2UgPSBiJ2F0dHIgPSA0MicKKyAgICAgICAgbW9kdWxlID0gc2VsZi5zb3VyY2VfdG9fbW9kdWxlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYXR0cicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX3BhdGgoc2VsZik6CisgICAgICAgICMgU3BlY2lmeWluZyBhIHBhdGggc2hvdWxkIHNldCBpdCBmb3IgdGhlIGNvZGUgb2JqZWN0LgorICAgICAgICBwYXRoID0gJ3BhdGgvdG8vc29tZXdoZXJlJworICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoJycsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgcGF0aCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX25vX3BhdGgoc2VsZik6CisgICAgICAgICMgTm90IHNldHRpbmcgYSBwYXRoIHNob3VsZCBzdGlsbCB3b3JrIGFuZCBiZSBzZXQgdG8gPHN0cmluZz4gc2luY2UgdGhhdAorICAgICAgICAjIGlzIGEgcHJlLWV4aXN0aW5nIHByYWN0aWNlIGFzIGEgZGVmYXVsdCB0byBjb21waWxlKCkuCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZSgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCAnPHN0cmluZz4nKQorCisKK2NsYXNzIEZyb3plbl9JTFNvdXJjZVRvQ29kZVRlc3RzKEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxTb3VyY2VUb0NvZGVUZXN0cyhJbnNwZWN0TG9hZGVyU291cmNlVG9Db2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyR2V0Q29kZVRlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgICMgVGVzdCBzdWNjZXNzLgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2dldF9zb3VyY2UnKSBhcyBtb2NrZWQ6CisgICAgICAgICAgICBtb2NrZWQucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2VfaXNfTm9uZShzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfc291cmNlKCkgaXMgTm9uZSB0aGVuIHRoaXMgc2hvdWxkIGJlIE5vbmUuCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MsICdnZXRfc291cmNlJykgYXMgbW9ja2VkOgorICAgICAgICAgICAgbW9ja2VkLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb2RlKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBzb3VyY2UgdGhlbiB0aGVyZSBpcyBubyBjb2RlIG9iamVjdC4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisKKworY2xhc3MgRnJvemVuX0lMR2V0Q29kZVRlc3RzKEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKKworY2xhc3MgU291cmNlX0lMR2V0Q29kZVRlc3RzKEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyTG9hZE1vZHVsZVRlc3RzOgorCisgICAgIiIiVGVzdCBJbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlKCkuIiIiCisKKyAgICBtb2R1bGVfbmFtZSA9ICdibGFoJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubG9hZChzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxvYWQsIHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgbW9ja19nZXRfY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X2NvZGUnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfSW1wb3J0RXJyb3Ioc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2NvZGUoKSByYWlzZXMgSW1wb3J0RXJyb3IsIGl0IHNob3VsZCBwcm9wYWdhdGUuCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2dldF9jb2RlKCkgYXMgbW9ja2VkX2dldF9jb2RlOgorICAgICAgICAgICAgbW9ja2VkX2dldF9jb2RlLnNpZGVfZWZmZWN0ID0gSW1wb3J0RXJyb3IKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX05vbmUoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2NvZGUoKSByZXR1cm5zIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmV0dXJuZWQoc2VsZik6CisgICAgICAgICMgVGhlIGxvYWRlZCBtb2R1bGUgc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAgICBjb2RlID0gY29tcGlsZSgnYXR0ciA9IDQyJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5yZXR1cm5fdmFsdWUgPSBjb2RlCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLCBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXSkKKworCitjbGFzcyBGcm96ZW5fSUxMb2FkTW9kdWxlVGVzdHMoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxMb2FkTW9kdWxlVGVzdHMoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKKyMjIyMjIEV4ZWN1dGlvbkxvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHM6CisKKyAgICBkZWYgbW9ja19tZXRob2RzKHNlbGYsICosIGdldF9zb3VyY2U9RmFsc2UsIGdldF9maWxlbmFtZT1GYWxzZSk6CisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IE5vbmUsIE5vbmUKKyAgICAgICAgaWYgZ2V0X3NvdXJjZToKKyAgICAgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQgPSBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc291cmNlJykKKyAgICAgICAgaWYgZ2V0X2ZpbGVuYW1lOgorICAgICAgICAgICAgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZmlsZW5hbWUnKQorICAgICAgICByZXR1cm4gc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0CisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgcGF0aCA9ICdibGFoLnB5JworICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBzZWxmLm1vY2tfbWV0aG9kcygKKyAgICAgICAgICAgICAgICBnZXRfc291cmNlPVRydWUsIGdldF9maWxlbmFtZT1UcnVlKQorICAgICAgICB3aXRoIHNvdXJjZV9tb2NrX2NvbnRleHQgYXMgc291cmNlX21vY2ssIGZpbGVuYW1lX21vY2tfY29udGV4dCBhcyBuYW1lX21vY2s6CisgICAgICAgICAgICBzb3VyY2VfbW9jay5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbmFtZV9tb2NrLnJldHVybl92YWx1ZSA9IHBhdGgKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgcGF0aCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9pc19Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9zb3VyY2UoKSBpcyBOb25lIHRoZW4gdGhpcyBzaG91bGQgYmUgTm9uZS4KKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgXyA9IHNlbGYubW9ja19tZXRob2RzKGdldF9zb3VyY2U9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb2RlKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBzb3VyY2UgdGhlbiB0aGVyZSBpcyBubyBjb2RlIG9iamVjdC4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX25vX3BhdGgoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2ZpbGVuYW1lKCkgcmFpc2VzIEltcG9ydEVycm9yIHRoZW4gc2ltcGx5IHNraXAgc2V0dGluZyB0aGUgcGF0aAorICAgICAgICAjIG9uIHRoZSBjb2RlIG9iamVjdC4KKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gc2VsZi5tb2NrX21ldGhvZHMoCisgICAgICAgICAgICAgICAgZ2V0X3NvdXJjZT1UcnVlLCBnZXRfZmlsZW5hbWU9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIHNvdXJjZV9tb2NrLCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgYXMgbmFtZV9tb2NrOgorICAgICAgICAgICAgc291cmNlX21vY2sucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIG5hbWVfbW9jay5zaWRlX2VmZmVjdCA9IEltcG9ydEVycm9yCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3RyaW5nPicpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKworY2xhc3MgRnJvemVuX0VMR2V0Q29kZVRlc3RzKEV4ZWN1dGlvbkxvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzID0gRnJvemVuX0VMCisKK2NsYXNzIFNvdXJjZV9FTEdldENvZGVUZXN0cyhFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBFeGVjdXRpb25Mb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9FTAorCisKKyMjIyMjIFNvdXJjZUxvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBTb3VyY2VMb2FkZXI6CisKKyAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCisgICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX2NhY2hlZF9fLCBfX3BhY2thZ2VfXywgIgorICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCAhPSBzZWxmLnBhdGg6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQorCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKworICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgorICAgICAgICByZXR1cm4gJzxtb2R1bGU+JworCisKK0Zyb3plbl9Tb3VyY2VPbmx5TCwgU291cmNlX1NvdXJjZU9ubHlMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhTb3VyY2VMb2FkZXIpCisKKworY2xhc3MgU291cmNlTG9hZGVyKFNvdXJjZUxvYWRlcik6CisKKyAgICBzb3VyY2VfbXRpbWUgPSAxCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgbWFnaWM9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKKyAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5zb3VyY2Vfc2l6ZSA9IGxlbihzZWxmLnNvdXJjZSkKKyAgICAgICAgaWYgbWFnaWMgaXMgTm9uZToKKyAgICAgICAgICAgIG1hZ2ljID0gc2VsZi51dGlsLk1BR0lDX05VTUJFUgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KG1hZ2ljKQorICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLnNvdXJjZV9tdGltZSkpCisgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYuc291cmNlX3NpemUpKQorICAgICAgICBjb2RlX29iamVjdCA9IGNvbXBpbGUoc2VsZi5zb3VyY2UsIHNlbGYucGF0aCwgJ2V4ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250X2luaGVyaXQ9VHJ1ZSkKKyAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgIHNlbGYuYnl0ZWNvZGUgPSBieXRlcyhkYXRhKQorICAgICAgICBzZWxmLndyaXR0ZW4gPSB7fQorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoID09IHNlbGYucGF0aDoKKyAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCisgICAgICAgIGVsaWYgcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGg6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlY29kZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorCisgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggIT0gc2VsZi5wYXRoOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICByZXR1cm4geydtdGltZSc6IHNlbGYuc291cmNlX210aW1lLCAnc2l6ZSc6IHNlbGYuc291cmNlX3NpemV9CisKKyAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CisgICAgICAgIHNlbGYud3JpdHRlbltwYXRoXSA9IGJ5dGVzKGRhdGEpCisgICAgICAgIHJldHVybiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aAorCisKK0Zyb3plbl9TTCwgU291cmNlX1NMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhTb3VyY2VMb2FkZXIpCitGcm96ZW5fU0wudXRpbCA9IGZyb3plbl91dGlsCitTb3VyY2VfU0wudXRpbCA9IHNvdXJjZV91dGlsCitGcm96ZW5fU0wuaW5pdCA9IGZyb3plbl9pbml0CitTb3VyY2VfU0wuaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgU291cmNlTG9hZGVyVGVzdEhhcm5lc3M6CisKKyAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCisgICAgICAgIGlmIGlzX3BhY2thZ2U6CisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKKyAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKKworICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKKyAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCisKKyAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKHNlbGYubmFtZSkKKyAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc2VsZi5wYXRoCisgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc2VsZi5jYWNoZWQKKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc2VsZi5wYWNrYWdlCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZi5sb2FkZXIKKyAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW10KKyAgICAgICAgZXhlYyhjb2RlX29iamVjdCwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorCisKK2NsYXNzIFNvdXJjZU9ubHlMb2FkZXJUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyIGZvciBzb3VyY2Utb25seSBsb2FkaW5nLgorCisgICAgUmVsb2FkIHRlc3RpbmcgaXMgc3Vic3VtZWQgYnkgdGhlIHRlc3RzIGZvcgorICAgIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyLgorCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBzdHJpbmcuCisgICAgICAgICMgSWYgYW4gT1NFcnJvciBpcyByYWlzZWQgYnkgZ2V0X2RhdGEgdGhlbiByYWlzZSBJbXBvcnRFcnJvci4KKyAgICAgICAgZXhwZWN0ZWRfc291cmNlID0gc2VsZi5sb2FkZXIuc291cmNlLmRlY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKSwgZXhwZWN0ZWRfc291cmNlKQorICAgICAgICBkZWYgcmFpc2VfT1NFcnJvcihwYXRoKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEgPSByYWlzZV9PU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIHNlbGYubmFtZSkKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgICMgUHJvcGVybHkgZGV0ZWN0IHdoZW4gbG9hZGluZyBhIHBhY2thZ2UuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lICsgJy5fX2luaXRfXycpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoZSBjb2RlIG9iamVjdCBpcyBjcmVhdGVkLgorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgY29tcGlsZWQgY29kZSBvYmplY3QuCisgICAgICAgIGNvZGUgPSBzZWxmLmxvYWRlci5zb3VyY2VfdG9fY29kZShzZWxmLmxvYWRlci5zb3VyY2UsIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlKQorCisgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgTG9hZGluZyBhIG1vZHVsZSBzaG91bGQgc2V0IF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywKKyAgICAgICAgIyBfX3BhdGhfXyAoZm9yIHBhY2thZ2VzKSwgX19maWxlX18sIGFuZCBfX2NhY2hlZF9fLgorICAgICAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIGFsc28gYmUgcHV0IGludG8gc3lzLm1vZHVsZXMuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGF0aF9fLCBbb3MucGF0aC5kaXJuYW1lKHNlbGYucGF0aCldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyBfX3BhY2thZ2VfXyBuZWVkcyB0byBiZSBzZXQsIHdoaWxlIF9fcGF0aF9fIGlzIHNldCBvbiBpZiB0aGUgbW9kdWxlCisgICAgICAgICMgaXMgYSBwYWNrYWdlLgorICAgICAgICAjIFRlc3RpbmcgdGhlIHZhbHVlcyBmb3IgYSBwYWNrYWdlIGFyZSBjb3ZlcmVkIGJ5IHRlc3RfbG9hZF9tb2R1bGUuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCisgICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCisgICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKyAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCisgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworCitjbGFzcyBGcm96ZW5fU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9Tb3VyY2VPbmx5TAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsICJzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlIikKK2NsYXNzIFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcidzIHVzZSBvZiBieXRlY29kZS4KKworICAgIFNvdXJjZS1vbmx5IHRlc3RpbmcgaGFuZGxlZCBieSBTb3VyY2VPbmx5TG9hZGVyVGVzdHMuCisKKyAgICAiIiIKKworICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6CisgICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisgICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQorICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShzZWxmLnV0aWwuTUFHSUNfTlVNQkVSKQorICAgICAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX210aW1lKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYubG9hZGVyLnNvdXJjZV9zaXplKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci53cml0dGVuW3NlbGYuY2FjaGVkXSwgYnl0ZXMoZGF0YSkpCisKKyAgICBkZWYgdGVzdF9jb2RlX3dpdGhfZXZlcnl0aGluZyhzZWxmKToKKyAgICAgICAgIyBXaGVuIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsuCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQorCisgICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6CisgICAgICAgICMgSWYgbm8gYnl0ZWNvZGUgZXhpc3RzIHRoZW4gbW92ZSBvbiB0byB0aGUgc291cmNlLgorICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICMgU2FuaXR5IGNoZWNrCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF90aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgQnl0ZWNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBzb3VyY2UgRVhBQ1RMWS4KKyAgICAgICAgZm9yIHNvdXJjZV9tdGltZSBpbiAoMCwgMik6CisgICAgICAgICAgICBhc3NlcnQgc291cmNlX210aW1lICE9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgb3JpZ2luYWwgPSBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IHNvdXJjZV9tdGltZQorICAgICAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQorICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisgICAgICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUgPSBvcmlnaW5hbAorCisgICAgZGVmIHRlc3RfY29kZV9iYWRfbWFnaWMoc2VsZik6CisgICAgICAgICMgU2tpcCBvdmVyIGJ5dGVjb2RlIHdpdGggYSBiYWQgbWFnaWMgbnVtYmVyLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgICMgSWYgYnl0ZWNvZGUgaXMgdXNlZCB0aGVuIEVPRkVycm9yIHdvdWxkIGJlIHJhaXNlZCBieSBtYXJzaGFsLgorICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCwgYnl0ZWNvZGVfd3JpdHRlbj1UcnVlKQorCisgICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBub3Qgd3JpdHRlbiBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlLgorICAgICAgICAjIENhbiBhc3N1bWUgaXQgaXMgZmFsc2UgYWxyZWFkeSB0aGFua3MgdG8gdGhlIHNraXBJZiBjbGFzcyBkZWNvcmF0b3IuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuYnl0ZWNvZGVfcGF0aCA9ICI8ZG9lcyBub3QgZXhpc3Q+IgorICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQorCisgICAgZGVmIHRlc3Rfbm9fc2V0X2RhdGEoc2VsZik6CisgICAgICAgICMgSWYgc2V0X2RhdGEgaXMgbm90IGRlZmluZWQsIG9uZSBjYW4gc3RpbGwgcmVhZCBieXRlY29kZS4KKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBvcmlnaW5hbF9zZXRfZGF0YSA9IHNlbGYubG9hZGVyLl9fY2xhc3NfXy5tcm8oKVsxXS5zZXRfZGF0YQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5sb2FkZXIuX19jbGFzc19fLm1ybygpWzFdLnNldF9kYXRhCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvYWRlci5fX2NsYXNzX18ubXJvKClbMV0uc2V0X2RhdGEgPSBvcmlnaW5hbF9zZXRfZGF0YQorCisgICAgZGVmIHRlc3Rfc2V0X2RhdGFfcmFpc2VzX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgUmFpc2luZyBOb3RJbXBsZW1lbnRlZEVycm9yIG9yIE9TRXJyb3IgaXMgb2theSBmb3Igc2V0X2RhdGEuCisgICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24oZXhjKToKKyAgICAgICAgICAgIGRlZiBjbG9zdXJlKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgICAgICByZXR1cm4gY2xvc3VyZQorCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgc2VsZi5sb2FkZXIuc2V0X2RhdGEgPSByYWlzZV9leGNlcHRpb24oTm90SW1wbGVtZW50ZWRFcnJvcikKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKworY2xhc3MgRnJvemVuX1NMQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbG9hZGVyX21vY2sgPSBGcm96ZW5fU0wKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworY2xhc3MgU291cmNlU0xCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9TTAorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzOgorCisgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2UoKS4iIiIKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMgd2l0aCBVVEYtOCB0ZXh0LgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJworICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrKCJtb2QuZmlsZSIpCisgICAgICAgIHNvdXJjZSA9ICIjIGNvZGluZzogTGF0aW4tMVxueD0nw7wnIgorICAgICAgICBhc3NlcnQgc291cmNlLmVuY29kZSgnbGF0aW4tMScpICE9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CisgICAgICAgICMgUEVQIDMwMiBzYXlzIHVuaXZlcnNhbCBuZXdsaW5lcyBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCisgICAgICAgIHNvdXJjZSA9ICJ4ID0gNDJcclxueSA9IC0xM1xyXG4iCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBleHBlY3QgPSBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpLmRlY29kZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfc291cmNlKG5hbWUpLCBleHBlY3QpCisKKworY2xhc3MgRnJvemVuX1NvdXJjZU9ubHlMR2V0U291cmNlVGVzdHMoU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBTb3VyY2VPbmx5TG9hZGVyTW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAorCitjbGFzcyBTb3VyY2VfU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hcGkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQppbmRleCBiMWE1ODk0Li4yYTJkNDJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQpAQCAtMSwxNCArMSwxOCBAQAogZnJvbSAuIGltcG9ydCB1dGlsCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW1wb3J0bGliCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CisKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKK2ltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBJbXBvcnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbXBvcnRNb2R1bGVUZXN0czoKIAogICAgICIiIlRlc3QgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUuIiIiCiAKQEAgLTE2LDcgKzIwLDcgQEAKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAndG9wX2xldmVsJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMjYsNyArMzAsNyBAQAogICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9zaGFsbG93X3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMzgsMTcgKzQyLDE3IEBACiAgICAgICAgIHJlbGF0aXZlX25hbWUgPSAnLnswfScuZm9ybWF0KG1vZHVsZV9uYW1lKQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIGFic29sdXRlX25hbWUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBhYnNvbHV0ZV9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGVlcF9yZWxhdGl2ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EnKQotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhLmInKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYScpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy4uYycsICdhLmInKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnYS5jJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX2ltcG9ydF93aXRoX3BhY2thZ2Uoc2VsZik6CkBAIC01OSwxNSArNjMsMTUgQEAKICAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUocGtnX25hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfd29fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBSZWxhdGl2ZSBpbXBvcnRzIGNhbm5vdCBoYXBwZW4gd2l0aG91dCB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGJlaW5nCiAgICAgICAgICMgc2V0LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLnN1cHBvcnQnKQorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy5zdXBwb3J0JykKIAogCiAgICAgZGVmIHRlc3RfbG9hZGVkX29uY2Uoc2VsZik6CkBAIC03Niw3ICs4MCw3IEBACiAgICAgICAgICMgbW9kdWxlIGN1cnJlbnRseSBiZWluZyBpbXBvcnRlZC4KICAgICAgICAgYl9sb2FkX2NvdW50ID0gMAogICAgICAgICBkZWYgbG9hZF9hKCk6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQogICAgICAgICBkZWYgbG9hZF9iKCk6CiAgICAgICAgICAgICBub25sb2NhbCBiX2xvYWRfY291bnQKICAgICAgICAgICAgIGJfbG9hZF9jb3VudCArPSAxCkBAIC04NCwxMSArODgsMTcgQEAKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmInXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzLCBtb2R1bGVfY29kZT1jb2RlKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYS5iJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiX2xvYWRfY291bnQsIDEpCiAKK2NsYXNzIEZyb3plbl9JbXBvcnRNb2R1bGVUZXN0cyhJbXBvcnRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAogCi1jbGFzcyBGaW5kTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU291cmNlX0ltcG9ydE1vZHVsZVRlc3RzKEltcG9ydE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgRmluZExvYWRlclRlc3RzOgogCiAgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CiAgICAgICAgIEBzdGF0aWNtZXRob2QKQEAgLTk4LDI5ICsxMDgsNTEgQEAKICAgICAgICAgIyBJZiBhIG1vZHVsZSB3aXRoIF9fbG9hZGVyX18gaXMgaW4gc3lzLm1vZHVsZXMsIHRoZW4gcmV0dXJuIGl0LgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJwogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBmb3VuZCA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGZvdW5kID0gc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgZm91bmQpCiAKICAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBJZiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fIGlzIE5vbmUsIHJhaXNlIFZhbHVlRXJyb3IuCiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gTm9uZQogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfbm90X3NldChzZWxmKToKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAjIElzc3VlICMxNzA5OQorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgICMgUmV0dXJuIHRoZSBsb2FkZXIgZm91bmQgb24gc3lzLm1ldGFfcGF0aC4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIE5vbmUpLCBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSksIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lKSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3NfcGF0aChzZWxmKToKICAgICAgICAgIyBTZWFyY2hpbmcgb24gYSBwYXRoIHNob3VsZCB3b3JrLgpAQCAtMTI4LDE1ICsxNjAsMjAxIEBACiAgICAgICAgIHBhdGggPSAncGF0aCB0byBzb21lIHBsYWNlJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSwgcGF0aCkpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQogCiAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKICAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuZmluZF9sb2FkZXIoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5pbml0LmZpbmRfbG9hZGVyKCduZXZlcmdvaW5ndG9maW5kdGhpc21vZHVsZScpKQorCitjbGFzcyBGcm96ZW5fRmluZExvYWRlclRlc3RzKEZpbmRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorCitjbGFzcyBTb3VyY2VfRmluZExvYWRlclRlc3RzKEZpbmRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAogCiAKLWNsYXNzIEludmFsaWRhdGVDYWNoZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFJlbG9hZFRlc3RzOgorCisgICAgIiIiVGVzdCBtb2R1bGUgcmVsb2FkaW5nIGZvciBidWlsdGluIGFuZCBleHRlbnNpb24gbW9kdWxlcy4iIiIKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICBmb3IgbW9kIGluICgndG9rZW5pemUnLCAndGltZScsICdtYXJzaGFsJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2R1bGU9bW9kKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuQ2xlYW5JbXBvcnQobW9kKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobW9kKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgZGVmIGNvZGUoKToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgndG9wX2xldmVsJykKKyAgICAgICAgICAgIG1vZHVsZS5zcGFtID0gMworICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddID0gbW9kdWxlCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsndG9wX2xldmVsJzogY29kZX0pCisgICAgICAgIHdpdGggbW9jazoKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5zcGFtLCAzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuc3BhbSwgMykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9taXNzaW5nX2xvYWRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICBsb2FkZXIgPSB0eXBlcy5fX2xvYWRlcl9fCisgICAgICAgICAgICBkZWwgdHlwZXMuX19sb2FkZXJfXworICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKHR5cGVzKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCB0eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbJ3R5cGVzJ10sIHR5cGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5fX2xvYWRlcl9fLnBhdGgsIGxvYWRlci5wYXRoKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2xvYWRlcl9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICB0eXBlcy5fX2xvYWRlcl9fID0gTm9uZQorICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZCh0eXBlcykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyZWxvYWRlZC5fX2xvYWRlcl9fLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgdHlwZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzWyd0eXBlcyddLCB0eXBlcykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sb2NhdGlvbl9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBwbGFpbiBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lICsgJy5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBjYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmNyZWF0ZV9lbXB0eV9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhtb2R1bGUpLmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIG5zLnBvcCgnX19idWlsdGluc19fJywgTm9uZSkgICMgQW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5wYXRoLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICAjIENoYW5nZSB0byBhIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIGluaXRfcGF0aCA9IG9zLnBhdGguam9pbihjd2QsIG5hbWUsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0geydfX25hbWVfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2ZpbGVfXyc6IGluaXRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBjYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFtvcy5wYXRoLmRpcm5hbWUoaW5pdF9wYXRoKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihuYW1lKQorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUocGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMocmVsb2FkZWQpLmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIG5zLnBvcCgnX19idWlsdGluc19fJywgTm9uZSkgICMgQW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9uYW1lc3BhY2VfY2hhbmdlZChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NwYW0nKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRGlyc09uU3lzUGF0aChjd2QpOgorICAgICAgICAgICAgICAgICAgICAjIFN0YXJ0IGFzIGEgbmFtZXNwYWNlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIGJhZF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdC5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShiYWRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihiYWRfcGF0aCwgJ3cnKSBhcyBpbml0X2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2ZpbGUud3JpdGUoJ2VnZ3MgPSBOb25lJykKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKG1vZHVsZSkuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBucy5wb3AoJ19fcGF0aF9fJykKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IG5zLnBvcCgnX19zcGVjX18nKQorICAgICAgICAgICAgICAgICAgICBucy5wb3AoJ19fYnVpbHRpbnNfXycsIE5vbmUpICAjIEFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9hZGVyLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoW29zLnBhdGguZGlybmFtZShiYWRfcGF0aCldKSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGEgTmFtZXNwYWNlTG9hZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIucGF0aAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICAjIENoYW5nZSB0byBhIHJlZ3VsYXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogaW5pdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShpbml0X3BhdGgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWdncyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGJhZF9wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhyZWxvYWRlZCkuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgbnMucG9wKCdfX2J1aWx0aW5zX18nLCBOb25lKSAgIyBBbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgICMgU2VlICMxOTg1MS4KKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBzdWJuYW1lID0gJ2hhbScKKyAgICAgICAgd2l0aCB1dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB1dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgaGFtID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoZnVsbG5hbWUpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQoaGFtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgaGFtKQorCisKK2NsYXNzIEZyb3plbl9SZWxvYWRUZXN0cyhSZWxvYWRUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfUmVsb2FkVGVzdHMoUmVsb2FkVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBJbnZhbGlkYXRlQ2FjaGVUZXN0czoKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jYWxsZWQoc2VsZik6CiAgICAgICAgICMgSWYgZGVmaW5lZCB0aGUgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQuCkBAIC0xNTUsNDggKzM3Myw2NSBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5fX2RlbGl0ZW1fXyhrZXkpKQogICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtrZXldID0gcGF0aF9pbnMKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc3lzLm1ldGFfcGF0aC5yZW1vdmUobWV0YV9pbnMpKQotICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0YV9pbnMuY2FsbGVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0aF9pbnMuY2FsbGVkKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2xhY2tpbmcoc2VsZik6CiAgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG5vIGlzc3VlcyBpZiB0aGUgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLgogICAgICAgICBrZXkgPSAnZ29iYmxlZGVlZ29vaycKLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVba2V5XSA9IGltcC5OdWxsSW1wb3J0ZXIoJ2FiYycpCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2tleV0gPSBOb25lCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLl9fZGVsaXRlbV9fKGtleSkpCi0gICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpICAjIFNob3VsZG4ndCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkgICMgU2hvdWxkbid0IHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorCitjbGFzcyBGcm96ZW5fSW52YWxpZGF0ZUNhY2hlVGVzdHMoSW52YWxpZGF0ZUNhY2hlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKworY2xhc3MgU291cmNlX0ludmFsaWRhdGVDYWNoZVRlc3RzKEludmFsaWRhdGVDYWNoZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CiAKIAogY2xhc3MgRnJvemVuSW1wb3J0bGliVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfbm9fZnJvemVuX2ltcG9ydGxpYihzZWxmKToKICAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byBpbXBvcnQgdy9vIF9mcm96ZW5faW1wb3J0bGliIGJlaW5nIGRlZmluZWQuCi0gICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnaW1wb3J0bGliJywgYmxvY2tlZD1bJ19mcm96ZW5faW1wb3J0bGliJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShtb2R1bGUuX19sb2FkZXJfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcikpCisgICAgICAgICMgQ2FuJ3QgZG8gYW4gaXNpbnN0YW5jZSgpIGNoZWNrIHNpbmNlIHNlcGFyYXRlIGNvcGllcyBvZiBpbXBvcnRsaWIKKyAgICAgICAgIyBtYXkgaGF2ZSBiZWVuIHVzZWQgZm9yIGltcG9ydCwgc28ganVzdCBjaGVjayB0aGUgbmFtZSBpcyBub3QgZm9yIHRoZQorICAgICAgICAjIGZyb3plbiBsb2FkZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc291cmNlX2luaXQuX19sb2FkZXJfXy5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyb3plbkltcG9ydGVyJykKIAogCi1jbGFzcyBTdGFydHVwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3RhcnR1cFRlc3RzOgogCiAgICAgZGVmIHRlc3RfZXZlcnlvbmVfaGFzX19fbG9hZGVyX18oc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE3MDk4OiBhbGwgbW9kdWxlcyBzaG91bGQgaGF2ZSBfX2xvYWRlcl9fIGRlZmluZWQuCiAgICAgICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKLSAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRsaWIubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXykKLSAgICAgICAgICAgICAgICBlbGlmIGltcC5pc19mcm96ZW4obmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0bGliLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfSBsYWNrcyBhIF9fbG9hZGVyX18gYXR0cmlidXRlJy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZHVsZS5fX2xvYWRlcl9fLCBOb25lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChJbXBvcnRNb2R1bGVUZXN0cywKLSAgICAgICAgICAgICAgICAgRmluZExvYWRlclRlc3RzLAotICAgICAgICAgICAgICAgICBJbnZhbGlkYXRlQ2FjaGVUZXN0cywKLSAgICAgICAgICAgICAgICAgRnJvemVuSW1wb3J0bGliVGVzdHMsCi0gICAgICAgICAgICAgICAgIFN0YXJ0dXBUZXN0cykKKyAgICBkZWYgdGVzdF9ldmVyeW9uZV9oYXNfX19zcGVjX18oc2VsZik6CisgICAgICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZHVsZS5fX3NwZWNfXywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fc3BlY19fLCBOb25lKQorCitjbGFzcyBGcm96ZW5fU3RhcnR1cFRlc3RzKFN0YXJ0dXBUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworY2xhc3MgU291cmNlX1N0YXJ0dXBUZXN0cyhTdGFydHVwVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKaW5kZXggYzM3M2IxMS4uZGM5N2JhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CkBAIC0xLDQgKzEsOCBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2Jvb3RzdHJhcCA9IGZyb3plbl9pbml0Ll9ib290c3RyYXAKK3NvdXJjZV9ib290c3RyYXAgPSBzb3VyY2VfaW5pdC5fYm9vdHN0cmFwCisKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEzLDE0ICsxNyw5IEBACiBlbHNlOgogICAgIGZyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cwogCi0KLUxvY2tUeXBlID0gX2Jvb3RzdHJhcC5fTW9kdWxlTG9jawotRGVhZGxvY2tFcnJvciA9IF9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKLQotCiBpZiB0aHJlYWRpbmcgaXMgbm90IE5vbmU6Ci0gICAgY2xhc3MgTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgotICAgICAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZChsYW1iZGE6IExvY2tUeXBlKCJzb21lX2xvY2siKSkKKyAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzOgorICAgICAgICBsb2NrdHlwZSA9IGNsYXNzbWV0aG9kKGxhbWJkYSBjbHM6IGNscy5Mb2NrVHlwZSgic29tZV9sb2NrIikpCiAKICAgICAgICAgIyBfaXNfb3duZWQoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X19pc19vd25lZCA9IE5vbmUKQEAgLTM0LDEzICszMywyMSBAQAogICAgICAgICAjIF9yZWxlYXNlX3NhdmUoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X3JlbGVhc2Vfc2F2ZV91bmFjcXVpcmVkID0gTm9uZQogCisgICAgY2xhc3MgRnJvemVuX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMoTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywgbG9ja190ZXN0cy5STG9ja1Rlc3RzKToKKyAgICAgICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisKKyAgICBjbGFzcyBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLCBsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgICAgICBMb2NrVHlwZSA9IHNvdXJjZV9ib290c3RyYXAuX01vZHVsZUxvY2sKKwogZWxzZToKLSAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcGFzcwogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQotY2xhc3MgRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEZWFkbG9ja0F2b2lkYW5jZVRlc3RzOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC01NSw3ICs2Miw3IEBACiAKICAgICBkZWYgcnVuX2RlYWRsb2NrX2F2b2lkYW5jZV90ZXN0KHNlbGYsIGNyZWF0ZV9kZWFkbG9jayk6CiAgICAgICAgIE5MT0NLUyA9IDEwCi0gICAgICAgIGxvY2tzID0gW0xvY2tUeXBlKHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KKyAgICAgICAgbG9ja3MgPSBbc2VsZi5Mb2NrVHlwZShzdHIoaSkpIGZvciBpIGluIHJhbmdlKE5MT0NLUyldCiAgICAgICAgIHBhaXJzID0gWyhsb2Nrc1tpXSwgbG9ja3NbKGkrMSklTkxPQ0tTXSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KICAgICAgICAgaWYgY3JlYXRlX2RlYWRsb2NrOgogICAgICAgICAgICAgTlRIUkVBRFMgPSBOTE9DS1MKQEAgLTY3LDcgKzc0LDcgQEAKICAgICAgICAgICAgICIiIlRyeSB0byBhY3F1aXJlIHRoZSBsb2NrLiBSZXR1cm4gVHJ1ZSBvbiBzdWNjZXNzLCBGYWxzZSBvbiBkZWFkbG9jay4iIiIKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQotICAgICAgICAgICAgZXhjZXB0IERlYWRsb2NrRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgc2VsZi5EZWFkbG9ja0Vycm9yOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtOTksMzAgKzEwNiw1MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMuY291bnQoKFRydWUsIEZhbHNlKSksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgVHJ1ZSkpLCBsZW4ocmVzdWx0cykpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorY2xhc3MgRnJvemVuX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHMoRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIExvY2tUeXBlID0gZnJvemVuX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworICAgIERlYWRsb2NrRXJyb3IgPSBmcm96ZW5fYm9vdHN0cmFwLl9EZWFkbG9ja0Vycm9yCiAKLWNsYXNzIExpZmV0aW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCitjbGFzcyBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyhEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTG9ja1R5cGUgPSBzb3VyY2VfYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisgICAgRGVhZGxvY2tFcnJvciA9IHNvdXJjZV9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKKworCitjbGFzcyBMaWZldGltZVRlc3RzOgogCiAgICAgZGVmIHRlc3RfbG9ja19saWZldGltZShzZWxmKToKICAgICAgICAgbmFtZSA9ICJ4eXp6eSIKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCi0gICAgICAgIGxvY2sgPSBfYm9vdHN0cmFwLl9nZXRfbW9kdWxlX2xvY2sobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgbG9jayA9IHNlbGYuYm9vdHN0cmFwLl9nZXRfbW9kdWxlX2xvY2sobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQogICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGxvY2spCiAgICAgICAgIGRlbCBsb2NrCiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCiAKICAgICBkZWYgdGVzdF9hbGxfbG9ja3Moc2VsZik6CiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKF9ib290c3RyYXAuX21vZHVsZV9sb2NrcyksIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKworY2xhc3MgRnJvemVuX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKKworY2xhc3MgU291cmNlX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKIAogCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIERlYWRsb2NrQXZvaWRhbmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGlmZXRpbWVUZXN0cykKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5fRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5fTGlmZXRpbWVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfTGlmZXRpbWVUZXN0cykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9uYW1lc3BhY2VfcGtncy5weQppbmRleCA3MDY3YjEyLi42NjM5NjEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKQEAgLTEsNyArMSwxMCBAQAotaW1wb3J0IHN5cwogaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IGltcG9ydGxpYi5hYmMKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdC50ZXN0X2ltcG9ydGxpYiBpbXBvcnQgdXRpbAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdApAQCAtMjg2LDkgKzI4OSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYV90ZXN0LmF0dHIsICdpbiBtb2R1bGUnKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoKk5hbWVzcGFjZVBhY2thZ2VUZXN0Ll9fc3ViY2xhc3Nlc19fKCkpCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9zcGVjLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9zcGVjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTQxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkKQEAgLTAsMCArMSw5NTcgQEAKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fYm9vdHN0cmFwID0gZnJvemVuX2luaXQuX2Jvb3RzdHJhcAorc291cmNlX2Jvb3RzdHJhcCA9IHNvdXJjZV9pbml0Ll9ib290c3RyYXAKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKK2ltcG9ydCBvcy5wYXRoCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgQ2xlYW5JbXBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKKworCitjbGFzcyBUZXN0TG9hZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSwgaXNfcGFja2FnZT1Ob25lKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLnBhY2thZ2UgPSBpc19wYWNrYWdlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPFRlc3RMb2FkZXIgb2JqZWN0PicKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSA9PSAnZ2V0X2ZpbGVuYW1lJyBhbmQgc2VsZi5wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9maWxlbmFtZQorICAgICAgICBpZiBuYW1lID09ICdpc19wYWNrYWdlJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pc19wYWNrYWdlCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisKKyAgICBkZWYgX2dldF9maWxlbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aAorCisgICAgZGVmIF9pc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5wYWNrYWdlCisKKworY2xhc3MgTmV3TG9hZGVyKFRlc3RMb2FkZXIpOgorCisgICAgRUdHUyA9IDEKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBtb2R1bGUuZWdncyA9IHNlbGYuRUdHUworCisKK2NsYXNzIExlZ2FjeUxvYWRlcihUZXN0TG9hZGVyKToKKworICAgIEhBTSA9IC0xCisKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgIEBmcm96ZW5fdXRpbC5tb2R1bGVfZm9yX2xvYWRlcgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIG1vZHVsZS5oYW0gPSBzZWxmLkhBTQorICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorCisKK2NsYXNzIE1vZHVsZVNwZWNUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCisgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JworICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5sb2Nfc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2Nfc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9ub19sb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX3BhY2thZ2VfZmFsc2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfcGFja2FnZV90cnVlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9oYXNfbG9jYXRpb25fc2V0dGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49J3NvbWV3aGVyZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisgICAgICAgIHNwZWMuaGFzX2xvY2F0aW9uID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19sb2NhdGlvbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGVjID09IG90aGVyKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHlfbG9jYXRpb24oc2VsZik6CisgICAgICAgIG90aGVyID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKG5hbWU9c2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19sb2NhdGlvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9c2VsZi5jYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT0naGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5zcGVjLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X2luZXF1YWxpdHlfaW5jb21wbGV0ZShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5zcGVjLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtLmVnZ3MnLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMucGFyZW50LCAnc3BhbScpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtLmVnZ3MnLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5wYXJlbnQsICdzcGFtLmVnZ3MnKQorCisgICAgIyBjYWNoZWQKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zZXQoc2VsZik6CisgICAgICAgIGJlZm9yZSA9IHNlbGYuc3BlYy5jYWNoZWQKKyAgICAgICAgc2VsZi5zcGVjLmNhY2hlZCA9ICd0aGVyZScKKyAgICAgICAgYWZ0ZXIgPSBzZWxmLnNwZWMuY2FjaGVkCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhiZWZvcmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWZ0ZXIsICd0aGVyZScpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfbm9fb3JpZ2luKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfd2l0aF9vcmlnaW5fbm90X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZi5wYXRoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvY19zcGVjLmNhY2hlZCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlX3Vua25vd25fc3VmZml4KHNlbGYpOgorICAgICAgICBzZWxmLmxvY19zcGVjLm9yaWdpbiA9ICdzcGFtLnNwYW1zcGFtc3BhbScKKworICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9jX3NwZWMuY2FjaGVkLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NvdXJjZV9taXNzaW5nX2NhY2hlX3RhZyhzZWxmKToKKyAgICAgICAgb3JpZ2luYWwgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCisgICAgICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYubG9jX3NwZWMuY2FjaGVkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnID0gb3JpZ2luYWwKKworICAgICAgICBzZWxmLmFzc2VydElzKGNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2VsZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmxvY19zcGVjLm9yaWdpbiA9ICdzcGFtLnB5YycKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMuY2FjaGVkLCAnc3BhbS5weWMnKQorCisKK2NsYXNzIEZyb3plbl9Nb2R1bGVTcGVjVGVzdHMoTW9kdWxlU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCisKK2NsYXNzIFNvdXJjZV9Nb2R1bGVTcGVjVGVzdHMoTW9kdWxlU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorCisKK2NsYXNzIE1vZHVsZVNwZWNNZXRob2RzVGVzdHM6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdzcGFtJworICAgICAgICBzZWxmLnBhdGggPSAnc3BhbS5weScKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLnNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYubG9jX3NwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9jX3NwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKworICAgICMgaW5pdF9tb2R1bGVfYXR0cnMKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gWydzcGFtJywgJ2hhbSddCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fcGF0aF9fLCBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5sb2Nfc3BlYworICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIHNwZWMub3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzcGVjLm9yaWdpbikpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19kaWZmZXJlbnRfbmFtZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCdlZ2dzJykKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfZGlmZmVyZW50X3NwZWMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2VnZ3MnLCBvYmplY3QoKSkKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2FscmVhZHlfc2V0KHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ2hhbS5lZ2dzJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBvYmplY3QoKQorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnaGFtJworICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJ2VnZ3MnXQorICAgICAgICBtb2R1bGUuX19maWxlX18gPSAnaGFtL2VnZ3MvX19pbml0X18ucHknCisgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1vZHVsZS5fX2ZpbGVfXykKKyAgICAgICAgb3JpZ2luYWwgPSB2YXJzKG1vZHVsZSkuY29weSgpCisgICAgICAgIHNwZWMgPSBzZWxmLmxvY19zcGVjCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbJyddCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgb3JpZ2luYWxbJ19fbG9hZGVyX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG9yaWdpbmFsWydfX3BhY2thZ2VfXyddKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3BhdGhfXywgb3JpZ2luYWxbJ19fcGF0aF9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBvcmlnaW5hbFsnX19maWxlX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19jYWNoZWRfXywgb3JpZ2luYWxbJ19fY2FjaGVkX18nXSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2ltbXV0YWJsZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gb2JqZWN0KCkKKyAgICAgICAgc3BlYyA9IHNlbGYubG9jX3NwZWMKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFsnJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19uYW1lX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCisKKyAgICAjIGNyZWF0ZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGUoc2VsZik6CisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9sb2FkZXIoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKSgpCisgICAgICAgIGNsYXNzIENyZWF0aW5nTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gQ3JlYXRpbmdMb2FkZXIoKQorICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQsIG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xvYWRlcl9ub3RfaGFuZGxlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3JlYXRpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gQ3JlYXRpbmdMb2FkZXIoKQorICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgIyBleGVjKCkKKworICAgIGRlZiB0ZXN0X2V4ZWMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICBtb2R1bGUgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorICAgICAgICBzeXMubW9kdWxlc1tzZWxmLm5hbWVdID0gbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdlZ2dzJykpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmVnZ3MsIDEpCisKKyAgICAjIGxvYWQoKQorCisgICAgZGVmIHRlc3RfbG9hZChzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZCwgaW5zdGFsbGVkKQorCisgICAgZGVmIHRlc3RfbG9hZF9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgcmVwbGFjZW1lbnQgPSBvYmplY3QoKQorICAgICAgICBjbGFzcyBSZXBsYWNpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dID0gcmVwbGFjZW1lbnQKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IFJlcGxhY2luZ0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZCwgcmVwbGFjZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zdGFsbGVkLCByZXBsYWNlbWVudCkKKworICAgIGRlZiB0ZXN0X2xvYWRfZmFpbGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWlsZWRMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEZhaWxlZExvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzZWxmLnNwZWMubmFtZSwgc3lzLm1vZHVsZXMpCisKKyAgICBkZWYgdGVzdF9sb2FkX2ZhaWxlZF9yZW1vdmVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWlsZWRMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gRmFpbGVkTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuc3BlYy5uYW1lLCBzeXMubW9kdWxlcykKKworICAgIGRlZiB0ZXN0X2xvYWRfbGVnYWN5KHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTGVnYWN5TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5oYW0sIC0xKQorCisgICAgZGVmIHRlc3RfbG9hZF9sZWdhY3lfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IExlZ2FjeUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xlZ2FjeV9hdHRyaWJ1dGVzX2ltbXV0YWJsZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gb2JqZWN0KCkKKyAgICAgICAgY2xhc3MgSW1tdXRhYmxlTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gSW1tdXRhYmxlTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0sIG1vZHVsZSkKKworICAgICMgcmVsb2FkKCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZChzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorICAgICAgICAgICAgaW5zdGFsbGVkID0gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZWdncywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3RhbGxlZCwgbG9hZGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX21vZGlmaWVkKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZC5lZ2dzID0gMgorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfZXh0cmFfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQuYXZhaWxhYmxlID0gRmFsc2UKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2FkZWQuYXZhaWxhYmxlKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfaW5pdF9tb2R1bGVfYXR0cnMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkLl9fbmFtZV9fID0gJ2hhbScKKyAgICAgICAgICAgIGRlbCBsb2FkZWQuX19sb2FkZXJfXworICAgICAgICAgICAgZGVsIGxvYWRlZC5fX3BhY2thZ2VfXworICAgICAgICAgICAgZGVsIGxvYWRlZC5fX3NwZWNfXworICAgICAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGxvYWRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihsb2FkZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2xlZ2FjeShzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IExlZ2FjeUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorICAgICAgICAgICAgaW5zdGFsbGVkID0gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuaGFtLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3RhbGxlZCwgbG9hZGVkKQorCisKK2NsYXNzIEZyb3plbl9Nb2R1bGVTcGVjTWV0aG9kc1Rlc3RzKE1vZHVsZVNwZWNNZXRob2RzVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBmcm96ZW5fYm9vdHN0cmFwCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCisKK2NsYXNzIFNvdXJjZV9Nb2R1bGVTcGVjTWV0aG9kc1Rlc3RzKE1vZHVsZVNwZWNNZXRob2RzVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBzb3VyY2VfYm9vdHN0cmFwCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIE1vZHVsZVJlcHJUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5tb2R1bGUgPSB0eXBlKG9zKSgnc3BhbScpCisgICAgICAgIHNlbGYuc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3NwYW0nLCBUZXN0TG9hZGVyKCkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19sb2FkZXJfX19tb2R1bGVfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8ZGVsaWNpb3VzIHt9PicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgc2VsZi5tb2R1bGUuX19sb2FkZXJfXyA9IExvYWRlcigpCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPGRlbGljaW91cyBzcGFtPicpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19sb2FkZXJfX19tb2R1bGVfcmVwcl9iYWQoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBzZWxmLm1vZHVsZS5fX2xvYWRlcl9fID0gTG9hZGVyKCkKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSAoPFRlc3RMb2FkZXIgb2JqZWN0Pik+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfXyhzZWxmKToKKyAgICAgICAgb3JpZ2luID0gJ2luIGEgaG9sZSwgaW4gdGhlIGdyb3VuZCcKKyAgICAgICAgc2VsZi5zcGVjLm9yaWdpbiA9IG9yaWdpbgorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfSAoe30pPicuZm9ybWF0KCdzcGFtJywgb3JpZ2luKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfX19sb2NhdGlvbihzZWxmKToKKyAgICAgICAgbG9jYXRpb24gPSAnaW5fYV9nYWxheHlfZmFyX2Zhcl9hd2F5LnB5JworICAgICAgICBzZWxmLnNwZWMub3JpZ2luID0gbG9jYXRpb24KKyAgICAgICAgc2VsZi5zcGVjLl9zZXRfZmlsZWF0dHIgPSBUcnVlCisgICAgICAgIHNlbGYubW9kdWxlLl9fc3BlY19fID0gc2VsZi5zcGVjCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KCdzcGFtJywgbG9jYXRpb24pKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fc3BlY19fX25vX29yaWdpbihzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9ICg8VGVzdExvYWRlciBvYmplY3Q+KT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fc3BlY19fX25vX29yaWdpbl9ub19sb2FkZXIoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOb25lCisgICAgICAgIHNlbGYubW9kdWxlLl9fc3BlY19fID0gc2VsZi5zcGVjCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfbm9fbmFtZShzZWxmKToKKyAgICAgICAgZGVsIHNlbGYubW9kdWxlLl9fbmFtZV9fCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KCc/JykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aF9maWxlKHNlbGYpOgorICAgICAgICBmaWxlbmFtZSA9ICdlL2kvZS9pL28vc3BhbS5weScKKyAgICAgICAgc2VsZi5tb2R1bGUuX19maWxlX18gPSBmaWxlbmFtZQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdCgnc3BhbScsIGZpbGVuYW1lKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9ub19maWxlKHNlbGYpOgorICAgICAgICBzZWxmLm1vZHVsZS5fX2xvYWRlcl9fID0gVGVzdExvYWRlcigpCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gKDxUZXN0TG9hZGVyIG9iamVjdD4pPicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfbm9fZmlsZV9ub19sb2FkZXIoc2VsZik6CisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KCdzcGFtJykpCisKKworY2xhc3MgRnJvemVuX01vZHVsZVJlcHJUZXN0cyhNb2R1bGVSZXByVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBmcm96ZW5fYm9vdHN0cmFwCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCisKK2NsYXNzIFNvdXJjZV9Nb2R1bGVSZXByVGVzdHMoTW9kdWxlUmVwclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gc291cmNlX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBGYWN0b3J5VGVzdHM6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdzcGFtJworICAgICAgICBzZWxmLnBhdGggPSAnc3BhbS5weScKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmZpbGVsb2FkZXIgPSBUZXN0TG9hZGVyKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5wa2dsb2FkZXIgPSBUZXN0TG9hZGVyKHNlbGYucGF0aCwgVHJ1ZSkKKworICAgICMgc3BlY19mcm9tX2xvYWRlcigpCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2RlZmF1bHRfd2l0aF9iYWRfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9vcmlnaW4oc2VsZik6CisgICAgICAgIG9yaWdpbiA9ICdzb21ld2hlcmUgb3ZlciB0aGUgcmFpbmJvdycKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49b3JpZ2luKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBvcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV9mYWxzZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPUZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfdHJ1ZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX29yaWdpbl9hbmRfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgb3JpZ2luID0gJ3doZXJlIHRoZSBzdHJlZXRzIGhhdmUgbm8gbmFtZScKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49b3JpZ2luLCBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIG9yaWdpbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV93aXRoX2xvYWRlcl9mYWxzZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gVGVzdExvYWRlcihpc19wYWNrYWdlPUZhbHNlKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2Vfd2l0aF9sb2FkZXJfdHJ1ZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gVGVzdExvYWRlcihpc19wYWNrYWdlPVRydWUpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIGxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2RlZmF1bHRfd2l0aF9maWxlX2xvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfZmFsc2Vfd2l0aF9maWxlbG9hZGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPUZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfdHJ1ZV93aXRoX2ZpbGVsb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgIyBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbigpCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9kZWZhdWx0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLm1hY2hpbmVyeSBpcyBzb3VyY2VfbWFjaGluZXJ5OgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ25vdCBzdXJlIHdoeSB0aGlzIGlzIGJyZWFraW5nLi4uJykKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3BlYy5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlci5wYXRoLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fZGVmYXVsdF93aXRob3V0X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9kZWZhdWx0X2JhZF9zdWZmaXgoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCAnc3BhbS5lZ2dzJykKKworICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9sb2FkZXJfbm9fbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2xvYWRlcl9ub19sb2NhdGlvbl9ub19nZXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgJzx1bmtub3duPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fbG9hZGVyX25vX2xvY2F0aW9uX2JhZF9nZXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIGxvYWRlcj1sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCAnPHVua25vd24+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX25vbmUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9lbXB0eShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1bXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9ub3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9WydlZ2dzJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWydlZ2dzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5wa2dsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5wa2dsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0X25vdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9bG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHRfbm9faXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdF9iYWRfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9bG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKworY2xhc3MgRnJvemVuX0ZhY3RvcnlUZXN0cyhGYWN0b3J5VGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisKKworY2xhc3MgU291cmNlX0ZhY3RvcnlUZXN0cyhGYWN0b3J5VGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKaW5kZXggZWZjODk3Ny4uYjI4MjNjNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQpAQCAtMSwyMyArMSw2NiBAQAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKLWltcG9ydCBpbXAKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKK2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKK2ltcG9ydCBvcwogaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCiAKIAotY2xhc3MgTW9kdWxlRm9yTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRGVjb2RlU291cmNlQnl0ZXNUZXN0czoKKworICAgIHNvdXJjZSA9ICJzdHJpbmcgPSfDvCciCisKKyAgICBkZWYgdGVzdF91dDhfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc291cmNlX2J5dGVzID0gc2VsZi5zb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwgc2VsZi5zb3VyY2UpCisKKyAgICBkZWYgdGVzdF9zcGVjaWZpZWRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHNvdXJjZSA9ICcjIGNvZGluZz1sYXRpbi0xXG4nICsgc2VsZi5zb3VyY2UKKyAgICAgICAgc291cmNlX2J5dGVzID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgIGFzc2VydCBzb3VyY2VfYnl0ZXMgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5kZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyksIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgc291cmNlID0gJ1xyXG4nLmpvaW4oW3NlbGYuc291cmNlLCBzZWxmLnNvdXJjZV0pCisgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicuam9pbihbc2VsZi5zb3VyY2UsIHNlbGYuc291cmNlXSkpCisKK0Zyb3plbl9EZWNvZGVTb3VyY2VCeXRlc1Rlc3RzLCBTb3VyY2VfRGVjb2RlU291cmNlQnl0ZXNUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIERlY29kZVNvdXJjZUJ5dGVzVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCisKKworY2xhc3MgTW9kdWxlRm9yTG9hZGVyVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuIiIiCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbW9kdWxlX2Zvcl9sb2FkZXIoY2xzLCBmdW5jKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gY2xzLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoZnVuYykKKworICAgIGRlZiB0ZXN0X3dhcm5pbmcoc2VsZik6CisgICAgICAgICMgU2hvdWxkIHJhaXNlIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyB3aGVuIHVzZWQuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZXJyb3InLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgZnVuYyA9IHNlbGYudXRpbC5tb2R1bGVfZm9yX2xvYWRlcihsYW1iZGEgeDogeCkKKwogICAgIGRlZiByZXR1cm5fbW9kdWxlKHNlbGYsIG5hbWUpOgotICAgICAgICBmeG4gPSB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyKGxhbWJkYSBzZWxmLCBtb2R1bGU6IG1vZHVsZSkKKyAgICAgICAgZnhuID0gc2VsZi5tb2R1bGVfZm9yX2xvYWRlcihsYW1iZGEgc2VsZiwgbW9kdWxlOiBtb2R1bGUpCiAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgbmFtZSkKIAogICAgIGRlZiByYWlzZV9leGNlcHRpb24oc2VsZiwgbmFtZSk6CiAgICAgICAgIGRlZiB0b193cmFwKHNlbGYsIG1vZHVsZSk6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICBmeG4gPSB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyKHRvX3dyYXApCisgICAgICAgIGZ4biA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIodG9fd3JhcCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnhuKHNlbGYsIG5hbWUpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTM1LDEyICs3OCwyMyBAQAogCiAgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIG1vZHVsZSBpcyByZXVzZWQgaWYgYWxyZWFkeSBpbiBzeXMubW9kdWxlcy4KKyAgICAgICAgY2xhc3MgRmFrZUxvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBAc2VsZi5tb2R1bGVfZm9yX2xvYWRlcgorICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQogICAgICAgICBuYW1lID0gJ2EuYi5jJwotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnYS5iLmMnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdhLmIuYycpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gNDIKKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gNDIKICAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBzZWxmLnJldHVybl9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGxvYWRlciA9IEZha2VMb2FkZXIoKQorICAgICAgICAgICAgcmV0dXJuZWRfbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJldHVybmVkX21vZHVsZSwgc3lzLm1vZHVsZXNbbmFtZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBsb2FkZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgbmFtZSkKIAogICAgIGRlZiB0ZXN0X25ld19tb2R1bGVfZmFpbHVyZShzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYSBtb2R1bGUgaXMgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzIGlmIGFkZGVkIGJ1dCBhbgpAQCAtNTMsNyArMTA3LDcgQEAKICAgICBkZWYgdGVzdF9yZWxvYWRfZmFpbHVyZShzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYSBmYWlsdXJlIG9uIHJlbG9hZCBsZWF2ZXMgdGhlIG1vZHVsZSBpbi1wbGFjZS4KICAgICAgICAgbmFtZSA9ICdhLmIuYycKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKICAgICAgICAgICAgIHNlbGYucmFpc2VfZXhjZXB0aW9uKG5hbWUpCkBAIC02MSw3ICsxMTUsNyBAQAogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9yX2F0dHJzKHNlbGYpOgogICAgICAgICBkZWYgZnhuKHNlbGYsIG1vZHVsZSk6IHBhc3MKLSAgICAgICAgd3JhcHBlZCA9IHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoZnhuKQorICAgICAgICB3cmFwcGVkID0gc2VsZi5tb2R1bGVfZm9yX2xvYWRlcihmeG4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX25hbWVfXywgZnhuLl9fbmFtZV9fKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19xdWFsbmFtZV9fLCBmeG4uX19xdWFsbmFtZV9fKQogCkBAIC04Nyw3ICsxNDEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3BrZyA9IGlzX3BhY2thZ2UKICAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wa2cKLSAgICAgICAgICAgIEB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyCisgICAgICAgICAgICBAc2VsZi5tb2R1bGVfZm9yX2xvYWRlcgogICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQogCkBAIC0xMDcsOCArMTYxLDExIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBsb2FkZXIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgbmFtZSkKIAorRnJvemVuX01vZHVsZUZvckxvYWRlclRlc3RzLCBTb3VyY2VfTW9kdWxlRm9yTG9hZGVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBNb2R1bGVGb3JMb2FkZXJUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAotY2xhc3MgU2V0UGFja2FnZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgU2V0UGFja2FnZVRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi51dGlsLnNldF9wYWNrYWdlLiIiIgogCkBAIC0xMTYsMzQgKzE3MywzNiBAQAogICAgICAgICAiIiJWZXJpZnkgdGhlIG1vZHVsZSBoYXMgdGhlIGV4cGVjdGVkIHZhbHVlIGZvciBfX3BhY2thZ2VfXyBhZnRlcgogICAgICAgICBwYXNzaW5nIHRocm91Z2ggc2V0X3BhY2thZ2UuIiIiCiAgICAgICAgIGZ4biA9IGxhbWJkYTogbW9kdWxlCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLnNldF9wYWNrYWdlKGZ4bikKLSAgICAgICAgd3JhcHBlZCgpCisgICAgICAgIHdyYXBwZWQgPSBzZWxmLnV0aWwuc2V0X3BhY2thZ2UoZnhuKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHdyYXBwZWQoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgbW9kdWxlLl9fcGFja2FnZV9fKQogCiAgICAgZGVmIHRlc3RfdG9wX2xldmVsKHNlbGYpOgogICAgICAgICAjIF9fcGFja2FnZV9fIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBhIHRvcC1sZXZlbCBtb2R1bGUuCiAgICAgICAgICMgSW1wbGljaXRseSB0ZXN0cyB3aGVuIHBhY2thZ2UgaXMgc2V0IHRvIE5vbmUuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdtb2R1bGUnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2R1bGUnKQogICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBOb25lCiAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgJycpCiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFRlc3Qgc2V0dGluZyBfX3BhY2thZ2VfXyBmb3IgYSBwYWNrYWdlLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgncGtnJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgncGtnJykKICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gWyc8cGF0aD4nXQogICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBOb25lCiAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9zdWJtb2R1bGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBfX3BhY2thZ2VfXyBmb3IgYSBtb2R1bGUgaW4gYSBwYWNrYWdlLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgncGtnLm1vZCcpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BrZy5tb2QnKQogICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBOb25lCiAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9zZXR0aW5nX2lmX21pc3Npbmcoc2VsZik6CiAgICAgICAgICMgX19wYWNrYWdlX18gc2hvdWxkIGJlIHNldCBpZiBpdCBpcyBtaXNzaW5nLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnbW9kJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kJykKICAgICAgICAgaWYgaGFzYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpOgogICAgICAgICAgICAgZGVsYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpCiAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgJycpCkBAIC0xNTEsNTggKzIxMCwzODMgQEAKICAgICBkZWYgdGVzdF9sZWF2aW5nX2Fsb25lKHNlbGYpOgogICAgICAgICAjIElmIF9fcGFja2FnZV9fIGlzIHNldCBhbmQgbm90IE5vbmUgdGhlbiBsZWF2ZSBpdCBhbG9uZS4KICAgICAgICAgZm9yIHZhbHVlIGluIChUcnVlLCBGYWxzZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnbW9kJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZCcpCiAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSB2YWx1ZQogICAgICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCB2YWx1ZSkKIAogICAgIGRlZiB0ZXN0X2RlY29yYXRvcl9hdHRycyhzZWxmKToKICAgICAgICAgZGVmIGZ4bihtb2R1bGUpOiBwYXNzCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLnNldF9wYWNrYWdlKGZ4bikKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB3cmFwcGVkID0gc2VsZi51dGlsLnNldF9wYWNrYWdlKGZ4bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fbmFtZV9fLCBmeG4uX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX3F1YWxuYW1lX18sIGZ4bi5fX3F1YWxuYW1lX18pCiAKK0Zyb3plbl9TZXRQYWNrYWdlVGVzdHMsIFNvdXJjZV9TZXRQYWNrYWdlVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBTZXRQYWNrYWdlVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKLWNsYXNzIFJlc29sdmVOYW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBTZXRMb2FkZXJUZXN0czoKKworICAgICIiIlRlc3RzIGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXIoKS4iIiIKKworICAgIGNsYXNzIER1bW15TG9hZGVyOgorICAgICAgICBAdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKyAgICBkZWYgdGVzdF9ub19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2lzX05vbmUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXyA9IE5vbmUKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbG9hZGVyLmxvYWRfbW9kdWxlKCdibGFoJykuX19sb2FkZXJfXykKKworICAgIGRlZiB0ZXN0X25vdF9yZXNldChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5EdW1teUxvYWRlcigpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbG9hZGVyLm1vZHVsZS5fX2xvYWRlcl9fID0gNDIKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCitjbGFzcyBGcm96ZW5fU2V0TG9hZGVyVGVzdHMoU2V0TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBEdW1teUxvYWRlcjoKKyAgICAgICAgQGZyb3plbl91dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworY2xhc3MgU291cmNlX1NldExvYWRlclRlc3RzKFNldExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgIEBzb3VyY2VfdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKworY2xhc3MgUmVzb2x2ZU5hbWVUZXN0czoKIAogICAgICIiIlRlc3RzIGltcG9ydGxpYi51dGlsLnJlc29sdmVfbmFtZSgpLiIiIgogCiAgICAgZGVmIHRlc3RfYWJzb2x1dGUoc2VsZik6CiAgICAgICAgICMgYmFjb24KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCB1dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsIE5vbmUpKQogCiAgICAgZGVmIHRlc3RfYWJvc2x1dGVfd2l0aGluX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgYmFjb24gaW4gc3BhbQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsICdzcGFtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCAnc3BhbScpKQogCiAgICAgZGVmIHRlc3Rfbm9fcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuYmFjb24gaW4gJycKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnJykKKyAgICAgICAgICAgIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICcnKQogCiAgICAgZGVmIHRlc3RfaW5fcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuYmFjb24gaW4gc3BhbQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzcGFtLmVnZ3MuYmFjb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnc3BhbS5lZ2dzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJ3NwYW0uZWdncycpKQogCiAgICAgZGVmIHRlc3Rfb3RoZXJfcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuLmJhY29uIGluIHNwYW0uYmFjb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3BhbS5iYWNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbS5lZ2dzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtLmVnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKICAgICAgICAgIyAuLmJhY29uIGluIHNwYW0KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0nKQorICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtJykKKworRnJvemVuX1Jlc29sdmVOYW1lVGVzdHMsIFNvdXJjZV9SZXNvbHZlTmFtZVRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmVzb2x2ZU5hbWVUZXN0cywKKyAgICAgICAgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgICAgICBNb2R1bGVGb3JMb2FkZXJUZXN0cywKLSAgICAgICAgICAgIFNldFBhY2thZ2VUZXN0cywKLSAgICAgICAgICAgIFJlc29sdmVOYW1lVGVzdHMKLSAgICAgICAgKQorY2xhc3MgRmluZFNwZWNUZXN0czoKKworICAgIGNsYXNzIEZha2VNZXRhRmluZGVyOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBmaW5kX3NwZWMobmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6IHJldHVybiBuYW1lLCBwYXRoLCB0YXJnZXQKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIGxvYWRlcikKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzcGVjKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfd2l0aG91dF9fX2xvYWRlcl9fKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgZGVsIG1vZHVsZS5fX2xvYWRlcl9fCisgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJworICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgbG9hZGVyKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgc3BlYykKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX3NwZWNfaXNfTm9uZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IE5vbmUKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19Ob25lKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgTm9uZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNwZWMpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19zcGVjX2lzX25vdF9zZXQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIG1vZHVsZS5fX3NwZWNfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICB3aXRoIHRlc3RfdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUpKQorCisjICAgIGRlZiB0ZXN0X3N1Y2Nlc3NfcGF0aChzZWxmKToKKyMgICAgICAgICMgU2VhcmNoaW5nIG9uIGEgcGF0aCBzaG91bGQgd29yay4KKyMgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisjICAgICAgICBwYXRoID0gJ3BhdGggdG8gc29tZSBwbGFjZScKKyMgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisjICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgorIyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBwYXRoLCBOb25lKSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUsIHBhdGgpKQorCisgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKKyAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLnV0aWwuZmluZF9zcGVjKCduZXZlcmdvaW5ndG9maW5kdGhpc21vZHVsZScpKQorCisgICAgZGVmIHRlc3RfZmluZF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgc3VibmFtZSA9ICdoYW0nCisgICAgICAgIHdpdGggdGVzdF91dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB0ZXN0X3V0aWwuc3VibW9kdWxlKG5hbWUsIHN1Ym5hbWUsIHBrZ19kaXIpCisgICAgICAgICAgICBzcGVjID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3BlYywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZnVsbG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICAjIEVuc3VyZSBzdWNjZXNzaXZlIGNhbGxzIGJlaGF2ZSB0aGUgc2FtZS4KKyAgICAgICAgICAgIHNwZWNfYWdhaW4gPSBzZWxmLnV0aWwuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjX2FnYWluLCBzcGVjKQorCisgICAgZGVmIHRlc3RfZmluZF9zdWJtb2R1bGVfcGFyZW50X2FscmVhZHlfaW1wb3J0ZWQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgc3VibmFtZSA9ICdoYW0nCisgICAgICAgIHdpdGggdGVzdF91dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdGVzdF91dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHNwZWMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZ1bGxuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgIyBFbnN1cmUgc3VjY2Vzc2l2ZSBjYWxscyBiZWhhdmUgdGhlIHNhbWUuCisgICAgICAgICAgICBzcGVjX2FnYWluID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlY19hZ2Fpbiwgc3BlYykKKworICAgIGRlZiB0ZXN0X2ZpbmRfcmVsYXRpdmVfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHN1Ym5hbWUgPSAnaGFtJworICAgICAgICB3aXRoIHRlc3RfdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKKyAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdGVzdF91dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgcmVsbmFtZSA9ICcuJyArIHN1Ym5hbWUKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuZmluZF9zcGVjKHJlbG5hbWUsIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHNwZWMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZ1bGxuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgIyBFbnN1cmUgc3VjY2Vzc2l2ZSBjYWxscyBiZWhhdmUgdGhlIHNhbWUuCisgICAgICAgICAgICBzcGVjX2FnYWluID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlY19hZ2Fpbiwgc3BlYykKKworICAgIGRlZiB0ZXN0X2ZpbmRfcmVsYXRpdmVfbW9kdWxlX21pc3NpbmdfcGFja2FnZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBzdWJuYW1lID0gJ2hhbScKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHRlc3RfdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKKyAgICAgICAgICAgIHJlbG5hbWUgPSAnLicgKyBzdWJuYW1lCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMocmVsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZnVsbG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisKKworY2xhc3MgRnJvemVuX0ZpbmRTcGVjVGVzdHMoRmluZFNwZWNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworY2xhc3MgU291cmNlX0ZpbmRTcGVjVGVzdHMoRmluZFNwZWNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBNYWdpY051bWJlclRlc3RzOgorCisgICAgZGVmIHRlc3RfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIFNob3VsZCBiZSA0IGJ5dGVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnV0aWwuTUFHSUNfTlVNQkVSKSwgNCkKKworICAgIGRlZiB0ZXN0X2luY29ycG9yYXRlc19ybihzZWxmKToKKyAgICAgICAgIyBUaGUgbWFnaWMgbnVtYmVyIHVzZXMgXHJcbiB0byBjb21lIG91dCB3cm9uZyB3aGVuIHNwbGl0dGluZyBvbiBsaW5lcy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudXRpbC5NQUdJQ19OVU1CRVIuZW5kc3dpdGgoYidcclxuJykpCisKK0Zyb3plbl9NYWdpY051bWJlclRlc3RzLCBTb3VyY2VfTWFnaWNOdW1iZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1hZ2ljTnVtYmVyVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCisKKworY2xhc3MgUEVQMzE0N1Rlc3RzOgorCisgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDctcmVsYXRlZCBmdW5jdGlvbnM6IGNhY2hlX2Zyb21fc291cmNlIGFuZCBzb3VyY2VfZnJvbV9jYWNoZS4iIiIKKworICAgIHRhZyA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgbm90IGJlIE5vbmUnKQorICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKKyAgICAgICAgIyBkZWZpbmVkIC5weWMgZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9ub19jYWNoZV90YWcoc2VsZik6CisgICAgICAgICMgTm8gY2FjaGUgdGFnIG1lYW5zIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLmltcGxlbWVudGF0aW9uLCAnY2FjaGVfdGFnJywgTm9uZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnd2hhdGV2ZXIucHknKQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfbm9fZG90KHNlbGYpOgorICAgICAgICAjIERpcmVjdG9yeSB3aXRoIGEgZG90LCBmaWxlbmFtZSB3aXRob3V0IGRvdC4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vLmJhcicsICdmaWxlJykKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28uYmFyJywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxle30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3B0aW1pemVkKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKKyAgICAgICAgIyBkZWZpbmVkIC5weW8gZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weW8nLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIEZhbHNlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2VfY3dkKHNlbGYpOgorICAgICAgICBwYXRoID0gJ2Zvby5weScKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdfX3B5Y2FjaGVfXycsICdmb28ue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgICMgV2hlbiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgaXQgY2FuIGJlIGFueSB0cnVlLWlzaCBvciBmYWxzZS1pc2gKKyAgICAgICAgIyB2YWx1ZS4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXoucHknKQorICAgICAgICBwYXJ0aWFsX2V4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXoue30ucHknLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFtdKSwgcGFydGlhbF9leHBlY3QgKyAnbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFsxN10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxfZXhwZWN0ICsgJ2MnKQorICAgICAgICAjIEhvd2V2ZXIgaWYgdGhlIGJvb2wtaXNobmVzcyBjYW4ndCBiZSBkZXRlcm1pbmVkLCB0aGUgZXhjZXB0aW9uCisgICAgICAgICMgcHJvcGFnYXRlcy4KKyAgICAgICAgY2xhc3MgQmVhcmlzaDoKKyAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnL2Zvby9iYXIvYmF6LnB5JywgQmVhcmlzaCgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3Muc2VwID09ICdcXCcgYW5kIG9zLmFsdHNlcCA9PSAnLycsCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlcmUgb3MuYWx0c2VwIGlzIGRlZmluZWQnKQorICAgIGRlZiB0ZXN0X3NlcF9hbHRzZXBfYW5kX3NlcF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBXaW5kb3dzIHBhdGggYW5kIFBFUCAzMTQ3IHdoZXJlIHNlcCBpcyByaWdodCBvZiBhbHRzZXAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ1xcZm9vXFxiYXJcXGJhei9xdXgucHknLCBUcnVlKSwKKyAgICAgICAgICAgICdcXGZvb1xcYmFyXFxiYXpcXF9fcHljYWNoZV9fXFxxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBub3QgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyB0byBub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdOb25lJykKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZShzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIFBFUCAzMTQ3IGRlZmluZWQgLnB5YyBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8KKyAgICAgICAgIyBpdHMgc291cmNlLiAgVGhpcyB0ZXN0cyB0aGUgZ29vZCBwYXRoLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAncXV4LnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUocGF0aCksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX2NhY2hlX3RhZyhzZWxmKToKKyAgICAgICAgIyBJZiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUsIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2JsYWgnLCAnX19weWNhY2hlX18nLCAnd2hhdGV2ZXIucHljJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihzeXMuaW1wbGVtZW50YXRpb24sICdjYWNoZV90YWcnLCBOb25lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9iYWRfcGF0aChzZWxmKToKKyAgICAgICAgIyBXaGVuIHRoZSBwYXRoIHRvIGEgcHljIGZpbGUgaXMgbm90IGluIFBFUCAzMTQ3IGZvcm1hdCwgYSBWYWx1ZUVycm9yCisgICAgICAgICMgaXMgcmFpc2VkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJy9mb28vYmFyL2JhenF1eC5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fc2xhc2goc2VsZik6CisgICAgICAgICMgTm8gc2xhc2hlcyBhdCBhbGwgaW4gcGF0aCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLCAnZm9vLmNweXRob24tMzIucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX3Rvb19mZXdfZG90cyhzZWxmKToKKyAgICAgICAgIyBUb28gZmV3IGRvdHMgaW4gZmluYWwgcGF0aCBjb21wb25lbnQgLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJ19fcHljYWNoZV9fL2Zvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfdG9vX21hbnlfZG90cyhzZWxmKToKKyAgICAgICAgIyBUb28gbWFueSBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCisgICAgICAgICAgICAnX19weWNhY2hlX18vZm9vLmNweXRob24tMzIuZm9vLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19fcHljYWNoZV9fKHNlbGYpOgorICAgICAgICAjIEFub3RoZXIgcHJvYmxlbSB3aXRoIHRoZSBwYXRoIC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCisgICAgICAgICAgICAnL2Zvby9iYXIvZm9vLmNweXRob24tMzIuZm9vLnB5YycpCisKK0Zyb3plbl9QRVAzMTQ3VGVzdHMsIFNvdXJjZV9QRVAzMTQ3VGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBQRVAzMTQ3VGVzdHMsCisgICAgICAgIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF93aW5kb3dzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF93aW5kb3dzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjRhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3dpbmRvd3MucHkKQEAgLTAsMCArMSwyOSBAQAorZnJvbSAuIGltcG9ydCB1dGlsCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLCAncmVxdWlyZXMgV2luZG93cycpCitjbGFzcyBXaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0czoKKworICAgICMgWFhYIE5lZWQgYSB0ZXN0IHRoYXQgZmluZHMgdGhlIHNwZWMgdmlhIHRoZSByZWdpc3RyeS4KKworICAgIGRlZiB0ZXN0X2ZpbmRfc3BlY19taXNzaW5nKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyLmZpbmRfc3BlYygnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfbW9kdWxlX21pc3Npbmcoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlci5maW5kX21vZHVsZSgnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBOb25lKQorCisKK2NsYXNzIEZyb3plbl9XaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cyhXaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCisKK2NsYXNzIFNvdXJjZV9XaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cyhXaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKaW5kZXggZWYzMmY3ZC4uODg1Y2VjMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CkBAIC0xLDkgKzEsMzEgQEAKIGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKLWltcG9ydCBpbXAKK2Zyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsLCBpbnZhbGlkYXRlX2NhY2hlcwogaW1wb3J0IG9zLnBhdGgKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKKworCitkZWYgaW1wb3J0X2ltcG9ydGxpYihtb2R1bGVfbmFtZSk6CisgICAgIiIiSW1wb3J0IGEgbW9kdWxlIGZyb20gaW1wb3J0bGliIGJvdGggdy8gYW5kIHcvbyBfZnJvemVuX2ltcG9ydGxpYi4iIiIKKyAgICBmcmVzaCA9ICgnaW1wb3J0bGliJywpIGlmICcuJyBpbiBtb2R1bGVfbmFtZSBlbHNlICgpCisgICAgZnJvemVuID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgIHNvdXJjZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZShtb2R1bGVfbmFtZSwgZnJlc2g9ZnJlc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrZWQ9KCdfZnJvemVuX2ltcG9ydGxpYicsKSkKKyAgICByZXR1cm4gZnJvemVuLCBzb3VyY2UKKworCitkZWYgdGVzdF9ib3RoKHRlc3RfY2xhc3MsICoqa3dhcmdzKToKKyAgICBmcm96ZW5fdGVzdHMgPSB0eXBlcy5uZXdfY2xhc3MoJ0Zyb3plbl8nK3Rlc3RfY2xhc3MuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisgICAgc291cmNlX3Rlc3RzID0gdHlwZXMubmV3X2NsYXNzKCdTb3VyY2VfJyt0ZXN0X2NsYXNzLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpKQorICAgIGZyb3plbl90ZXN0cy5fX21vZHVsZV9fID0gc291cmNlX3Rlc3RzLl9fbW9kdWxlX18gPSB0ZXN0X2NsYXNzLl9fbW9kdWxlX18KKyAgICBmb3IgYXR0ciwgKGZyb3plbl92YWx1ZSwgc291cmNlX3ZhbHVlKSBpbiBrd2FyZ3MuaXRlbXMoKToKKyAgICAgICAgc2V0YXR0cihmcm96ZW5fdGVzdHMsIGF0dHIsIGZyb3plbl92YWx1ZSkKKyAgICAgICAgc2V0YXR0cihzb3VyY2VfdGVzdHMsIGF0dHIsIHNvdXJjZV92YWx1ZSkKKyAgICByZXR1cm4gZnJvemVuX3Rlc3RzLCBzb3VyY2VfdGVzdHMKIAogCiBDQVNFX0lOU0VOU0lUSVZFX0ZTID0gVHJ1ZQpAQCAtMjQsNiArNDYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0iKSh0ZXN0KQogCiAKK2RlZiBzdWJtb2R1bGUocGFyZW50LCBuYW1lLCBwa2dfZGlyLCBjb250ZW50PScnKToKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHBrZ19kaXIsIG5hbWUgKyAnLnB5JykKKyAgICB3aXRoIG9wZW4ocGF0aCwgJ3cnKSBhcyBzdWJmaWxlOgorICAgICAgICBzdWJmaWxlLndyaXRlKGNvbnRlbnQpCisgICAgcmV0dXJuICd7fS57fScuZm9ybWF0KHBhcmVudCwgbmFtZSksIHBhdGgKKworCiBAY29udGV4dG1hbmFnZXIKIGRlZiB1bmNhY2hlKCpuYW1lcyk6CiAgICAgIiIiVW5jYWNoZSBhIG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzLgpAQCAtNDksNiArNzgsMzEgQEAKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgdGVtcF9tb2R1bGUobmFtZSwgY29udGVudD0nJywgKiwgcGtnPUZhbHNlKToKKyAgICBjb25mbGljdHMgPSBbbiBmb3IgbiBpbiBzeXMubW9kdWxlcyBpZiBuLnBhcnRpdGlvbignLicpWzBdID09IG5hbWVdCisgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKE5vbmUpIGFzIGN3ZDoKKyAgICAgICAgd2l0aCB1bmNhY2hlKG5hbWUsICpjb25mbGljdHMpOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgoY3dkKToKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlX2NhY2hlcygpCisKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IG9zLnBhdGguam9pbihjd2QsIG5hbWUpCisgICAgICAgICAgICAgICAgaWYgcGtnOgorICAgICAgICAgICAgICAgICAgICBtb2RwYXRoID0gb3MucGF0aC5qb2luKGxvY2F0aW9uLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZHBhdGggPSBsb2NhdGlvbiArICcucHknCisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnRlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBtb2R1bGUgZmlsZSBnZXRzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gJycKKyAgICAgICAgICAgICAgICBpZiBjb250ZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIG5vdCBhIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbihtb2RwYXRoLCAndycpIGFzIG1vZGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RmaWxlLndyaXRlKGNvbnRlbnQpCisgICAgICAgICAgICAgICAgeWllbGQgbG9jYXRpb24KKworCiBAY29udGV4dG1hbmFnZXIKIGRlZiBpbXBvcnRfc3RhdGUoKiprd2FyZ3MpOgogICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBtYW5hZ2UgdGhlIHZhcmlvdXMgaW1wb3J0ZXJzIGFuZCBzdG9yZWQgc3RhdGUgaW4gdGhlCkBAIC04MCw5ICsxMzQsOSBAQAogICAgICAgICAgICAgc2V0YXR0cihzeXMsIGF0dHIsIHZhbHVlKQogCiAKLWNsYXNzIG1vY2tfbW9kdWxlczoKK2NsYXNzIF9JbXBvcnRlck1vY2s6CiAKLSAgICAiIiJBIG1vY2sgaW1wb3J0ZXIvbG9hZGVyLiIiIgorICAgICIiIkJhc2UgY2xhc3MgdG8gaGVscCB3aXRoIGNyZWF0aW5nIGltcG9ydGVyIG1vY2tzLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICpuYW1lcywgbW9kdWxlX2NvZGU9e30pOgogICAgICAgICBzZWxmLm1vZHVsZXMgPSB7fQpAQCAtOTgsNyArMTUyLDcgQEAKICAgICAgICAgICAgICAgICBwYWNrYWdlID0gbmFtZS5yc3BsaXQoJy4nLCAxKVswXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYWNrYWdlID0gaW1wb3J0X25hbWUKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKGltcG9ydF9uYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShpbXBvcnRfbmFtZSkKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgogICAgICAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gJzxtb2NrIF9fZmlsZV9fPicKICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHBhY2thZ2UKQEAgLTExMiw2ICsxNjYsMTkgQEAKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CiAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbbmFtZV0KIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuX3VuY2FjaGUgPSB1bmNhY2hlKCpzZWxmLm1vZHVsZXMua2V5cygpKQorICAgICAgICBzZWxmLl91bmNhY2hlLl9fZW50ZXJfXygpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorCisKK2NsYXNzIG1vY2tfbW9kdWxlcyhfSW1wb3J0ZXJNb2NrKToKKworICAgICIiIkltcG9ydGVyIG1vY2sgdXNpbmcgUEVQIDMwMiBBUElzLiIiIgorCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgogICAgICAgICBpZiBmdWxsbmFtZSBub3QgaW4gc2VsZi5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTEzMSwxMCArMTk4LDI4IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQogCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fdW5jYWNoZSA9IHVuY2FjaGUoKnNlbGYubW9kdWxlcy5rZXlzKCkpCi0gICAgICAgIHNlbGYuX3VuY2FjaGUuX19lbnRlcl9fKCkKLSAgICAgICAgcmV0dXJuIHNlbGYKK2NsYXNzIG1vY2tfc3BlYyhfSW1wb3J0ZXJNb2NrKToKIAotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgotICAgICAgICBzZWxmLl91bmNhY2hlLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCisgICAgIiIiSW1wb3J0ZXIgbW9jayB1c2luZyBQRVAgNDUxIEFQSXMuIiIiCisKKyAgICBkZWYgZmluZF9zcGVjKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHBhcmVudD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpc19wYWNrYWdlID0gaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpCisgICAgICAgIHNwZWMgPSB1dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKAorICAgICAgICAgICAgICAgIGZ1bGxuYW1lLCBtb2R1bGUuX19maWxlX18sIGxvYWRlcj1zZWxmLAorICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPWdldGF0dHIobW9kdWxlLCAnX19wYXRoX18nLCBOb25lKSkKKyAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICBpZiBzcGVjLm5hbWUgbm90IGluIHNlbGYubW9kdWxlczoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbc3BlYy5uYW1lXQorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlX2NvZGVbbW9kdWxlLl9fc3BlY19fLm5hbWVdKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbmRleC5weSBiL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkKaW5kZXggODc4NTcxMS4uYTJhYzMyMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbmRleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2luZGV4LnB5CkBAIC04MSw3ICs4MSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICBiYWRfaW50ID0gQmFkSW50KCkKLSAgICAgICAgbiA9IG9wZXJhdG9yLmluZGV4KGJhZF9pbnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgbiA9IG9wZXJhdG9yLmluZGV4KGJhZF9pbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKIAogICAgICAgICBiYWRfaW50ID0gQmFkSW50MigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKaW5kZXggNWNiZWM5Yi4uZGEwNTcyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpAQCAtMSwyMiArMSwzMiBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCBvcworZnJvbSBvcy5wYXRoIGltcG9ydCBub3JtY2FzZQoraW1wb3J0IF9waWNrbGUKIGltcG9ydCByZQoraW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pY29kZWRhdGEKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IGluc3BlY3QKLWltcG9ydCBsaW5lY2FjaGUKLWltcG9ydCBkYXRldGltZQotaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKLWZyb20gb3MucGF0aCBpbXBvcnQgbm9ybWNhc2UKK2ltcG9ydCB1bml0dGVzdC5tb2NrCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRGlyc09uU3lzUGF0aAordHJ5OgorICAgIGZyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBUaHJlYWRQb29sRXhlY3V0b3IKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBUaHJlYWRQb29sRXhlY3V0b3IgPSBOb25lCiAKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRGlyc09uU3lzUGF0aCwgY3B5dGhvbl9vbmx5Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgTUlTU0lOR19DX0RPQ1NUUklOR1MKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIgYXMgbW9kCiBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyMiBhcyBtb2QyCiAKLSMgQyBtb2R1bGUgZm9yIHRlc3RfZmluZHNvdXJjZV9iaW5hcnkKLWltcG9ydCB1bmljb2RlZGF0YQogCiAjIEZ1bmN0aW9ucyB0ZXN0ZWQgaW4gdGhpcyBzdWl0ZToKICMgaXNtb2R1bGUsIGlzY2xhc3MsIGlzbWV0aG9kLCBpc2Z1bmN0aW9uLCBpc3RyYWNlYmFjaywgaXNmcmFtZSwgaXNjb2RlLApAQCAtMTIwLDcgKzEzMCw2IEBACiAgICAgZGVmIHRlc3RfZ2V0X3Nsb3RfbWVtYmVycyhzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgX19zbG90c19fID0gKCJhIiwgImIiKQotCiAgICAgICAgIHggPSBDKCkKICAgICAgICAgeC5hID0gNDIKICAgICAgICAgbWVtYmVycyA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHgpKQpAQCAtMzEwLDYgKzMxOSwxNiBAQAogICAgIGRlZiB0ZXN0X2dldGZpbGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRmaWxlKG1vZC5TdHVwaWRHaXQpLCBtb2QuX19maWxlX18pCiAKKyAgICBkZWYgdGVzdF9nZXRmaWxlX2NsYXNzX3dpdGhvdXRfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBDTSh0eXBlKToKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbW9kdWxlX18oY2xzKToKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1DTSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGluc3BlY3QuZ2V0ZmlsZShDKQorCiAgICAgZGVmIHRlc3RfZ2V0bW9kdWxlX3JlY3Vyc2lvbihzZWxmKToKICAgICAgICAgZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQogICAgICAgICBuYW1lID0gJ19faW5zcGVjdF9kdW1teScKQEAgLTQxOCwxNCArNDM3LDE0IEBACiAgICAgICAgICAgICB1bmljb2RlZGF0YS5fX2ZpbGVfX1stNDpdIGluICgiLnB5YyIsICIucHlvIiksCiAgICAgICAgICJ1bmljb2RlZGF0YSBpcyBub3QgYW4gZXh0ZXJuYWwgYmluYXJ5IG1vZHVsZSIpCiAgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9iaW5hcnkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCB1bmljb2RlZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCB1bmljb2RlZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIHVuaWNvZGVkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIHVuaWNvZGVkYXRhKQogCiAgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9jb2RlX2luX2xpbmVjYWNoZShzZWxmKToKICAgICAgICAgbGluZXMgPSBbIng9MSJdCiAgICAgICAgIGNvID0gY29tcGlsZShsaW5lc1swXSwgIl9keW5hbWljYWxseV9jcmVhdGVkX2ZpbGUiLCAiZXhlYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCBjbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIGNvKQogICAgICAgICBsaW5lY2FjaGUuY2FjaGVbY28uY29fZmlsZW5hbWVdID0gKDEsIE5vbmUsIGxpbmVzLCBjby5jb19maWxlbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmZpbmRzb3VyY2UoY28pLCAobGluZXMsMCkpCkBAIC00NjMsMTMgKzQ4MiwxMyBAQAogICAgIEEgYnJva2VuIGRhdGEgZGVzY3JpcHRvci4gU2VlIGJ1ZyAjMTc4NS4KICAgICAiIiIKICAgICBkZWYgX19nZXRfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0X18gZGF0YSBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gZGF0YSBkZXNjcmlwdG9yIikKIAogICAgIGRlZiBfX3NldF9fKCphcmdzKToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCiAKICAgICBkZWYgX19nZXRhdHRyX18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldGF0dHJfXyBkYXRhIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBkYXRhIGRlc2NyaXB0b3IiKQogCiAKIGNsYXNzIF9Ccm9rZW5NZXRob2REZXNjcmlwdG9yKG9iamVjdCk6CkBAIC00NzcsMTAgKzQ5NiwxMCBAQAogICAgIEEgYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yLiBTZWUgYnVnICMxNzg1LgogICAgICIiIgogICAgIGRlZiBfX2dldF9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRfXyBtZXRob2QgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yIikKIAogICAgIGRlZiBfX2dldGF0dHJfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0YXR0cl9fIG1ldGhvZCBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gbWV0aG9kIGRlc2NyaXB0b3IiKQogCiAKICMgSGVscGVyIGZvciB0ZXN0aW5nIGNsYXNzaWZ5X2NsYXNzX2F0dHJzLgpAQCAtNTU5LDYgKzU3OCw5NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3NfZT1bJ2FyZyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZD0nKCosIGFyZyknKQogCisgICAgZGVmIHRlc3RfYXJnc3BlY19hcGlfaWdub3Jlc193cmFwcGVkKHNlbGYpOgorICAgICAgICAjIElzc3VlIDIwNjg0OiBsb3cgbGV2ZWwgaW50cm9zcGVjdGlvbiBBUEkgbXVzdCBpZ25vcmUgX193cmFwcGVkX18KKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhtb2Quc3BhbSkKKyAgICAgICAgZGVmIGhhbSh4LCB5KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBCYXNpYyBjaGVjaworICAgICAgICBzZWxmLmFzc2VydEFyZ1NwZWNFcXVhbHMoaGFtLCBbJ3gnLCAneSddLCBmb3JtYXR0ZWQ9Jyh4LCB5KScpCisgICAgICAgIHNlbGYuYXNzZXJ0RnVsbEFyZ1NwZWNFcXVhbHMoaGFtLCBbJ3gnLCAneSddLCBmb3JtYXR0ZWQ9Jyh4LCB5KScpCisgICAgICAgIHNlbGYuYXNzZXJ0RnVsbEFyZ1NwZWNFcXVhbHMoZnVuY3Rvb2xzLnBhcnRpYWwoaGFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3gnLCAneSddLCBmb3JtYXR0ZWQ9Jyh4LCB5KScpCisgICAgICAgICMgT3RoZXIgdmFyaWFudHMKKyAgICAgICAgZGVmIGNoZWNrX21ldGhvZChmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QXJnU3BlY0VxdWFscyhmLCBbJ3NlbGYnLCAneCcsICd5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkPScoc2VsZiwgeCwgeSknKQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyhtb2Quc3BhbSkKKyAgICAgICAgICAgIGRlZiBoYW0oc2VsZiwgeCwgeSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcGhhbSA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGhhbSkKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMobW9kLnNwYW0pCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgeCwgeSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjaGVja19tZXRob2QoQygpKQorICAgICAgICBjaGVja19tZXRob2QoQy5oYW0pCisgICAgICAgIGNoZWNrX21ldGhvZChDKCkuaGFtKQorICAgICAgICBjaGVja19tZXRob2QoQy5waGFtKQorICAgICAgICBjaGVja19tZXRob2QoQygpLnBoYW0pCisKKyAgICAgICAgY2xhc3MgQ19uZXc6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKG1vZC5zcGFtKQorICAgICAgICAgICAgZGVmIF9fbmV3X18oc2VsZiwgeCwgeSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjaGVja19tZXRob2QoQ19uZXcpCisKKyAgICAgICAgY2xhc3MgQ19pbml0OgorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyhtb2Quc3BhbSkKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNoZWNrX21ldGhvZChDX2luaXQpCisKKyAgICBkZWYgdGVzdF9nZXRmdWxsYXJnc3BlY19zaWduYXR1cmVfYXR0cihzZWxmKToKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3BhbV9wYXJhbSA9IGluc3BlY3QuUGFyYW1ldGVyKCdzcGFtJywgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICB0ZXN0Ll9fc2lnbmF0dXJlX18gPSBpbnNwZWN0LlNpZ25hdHVyZShwYXJhbWV0ZXJzPShzcGFtX3BhcmFtLCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGdWxsQXJnU3BlY0VxdWFscyh0ZXN0LCBhcmdzX2U9WydzcGFtJ10sIGZvcm1hdHRlZD0nKHNwYW0pJykKKworICAgIGRlZiB0ZXN0X2dldGZ1bGxhcmdzcGVjX3NpZ25hdHVyZV9hbm5vcyhzZWxmKToKKyAgICAgICAgZGVmIHRlc3QoYTonc3BhbScpIC0+ICdoYW0nOiBwYXNzCisgICAgICAgIHNwZWMgPSBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5fX2Fubm90YXRpb25zX18sIHNwZWMuYW5ub3RhdGlvbnMpCisKKyAgICAgICAgZGVmIHRlc3QoKTogcGFzcworICAgICAgICBzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyh0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuX19hbm5vdGF0aW9uc19fLCBzcGVjLmFubm90YXRpb25zKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X2dldGZ1bGxhcmdzcGVjX2J1aWx0aW5fbWV0aG9kcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGdWxsQXJnU3BlY0VxdWFscyhfcGlja2xlLlBpY2tsZXIuZHVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzX2U9WydzZWxmJywgJ29iaiddLCBmb3JtYXR0ZWQ9JyhzZWxmLCBvYmopJykKKworICAgICAgICBzZWxmLmFzc2VydEZ1bGxBcmdTcGVjRXF1YWxzKF9waWNrbGUuUGlja2xlcihpby5CeXRlc0lPKCkpLmR1bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19lPVsnc2VsZicsICdvYmonXSwgZm9ybWF0dGVkPScoc2VsZiwgb2JqKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGdWxsQXJnU3BlY0VxdWFscygKKyAgICAgICAgICAgICBvcy5zdGF0LAorICAgICAgICAgICAgIGFyZ3NfZT1bJ3BhdGgnXSwKKyAgICAgICAgICAgICBrd29ubHlhcmdzX2U9WydkaXJfZmQnLCAnZm9sbG93X3N5bWxpbmtzJ10sCisgICAgICAgICAgICAga3dvbmx5ZGVmYXVsdHNfZT17J2Rpcl9mZCc6IE5vbmUsICdmb2xsb3dfc3ltbGlua3MnOiBUcnVlfSwKKyAgICAgICAgICAgICBmb3JtYXR0ZWQ9JyhwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpJykKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3RfZ2V0ZnVsbGFncnNwZWNfYnVpbHRpbl9mdW5jKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIGJ1aWx0aW4gPSBfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHMKKyAgICAgICAgc3BlYyA9IGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMoYnVpbHRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmRlZmF1bHRzWzBdLCAnYXZvY2FkbycpCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X2dldGZ1bGxhZ3JzcGVjX2J1aWx0aW5fZnVuY19ub19zaWduYXR1cmUoc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgYnVpbHRpbiA9IF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMoYnVpbHRpbikKIAogICAgIGRlZiB0ZXN0X2dldGFyZ3NwZWNfbWV0aG9kKHNlbGYpOgogICAgICAgICBjbGFzcyBBKG9iamVjdCk6CkBAIC01ODgsNiArNjk3LDEwIEBACiAgICAgICAgICAgICBtZCA9IF9Ccm9rZW5NZXRob2REZXNjcmlwdG9yKCkKIAogICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoQSkKKworICAgICAgICBzZWxmLmFzc2VydEluKCgnX19uZXdfXycsICdtZXRob2QnLCBvYmplY3QpLCBhdHRycywgJ21pc3NpbmcgX19uZXdfXycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdfX2luaXRfXycsICdtZXRob2QnLCBvYmplY3QpLCBhdHRycywgJ21pc3NpbmcgX19pbml0X18nKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQogICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdwJywgJ3Byb3BlcnR5JywgQSksIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCkBAIC02NTAsNiArNzYzLDg4IEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGJ1aWx0aW4sIHR5cGUpOgogICAgICAgICAgICAgICAgIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoYnVpbHRpbikKIAorICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X0R5bmFtaWNDbGFzc0F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdoYW0nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgVkEobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VnZ3MnCisgICAgICAgIHNob3VsZF9maW5kX2RjYSA9IGluc3BlY3QuQXR0cmlidXRlKCdoYW0nLCAnZGF0YScsIFZBLCBWQS5fX2RpY3RfX1snaGFtJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmRfZGNhLCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKFZBKSkKKyAgICAgICAgc2hvdWxkX2ZpbmRfZ2EgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnaGFtJywgJ2RhdGEnLCBNZXRhLCAnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmRfZ2EsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoVkEpKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfbWV0YWNsYXNzX2NsYXNzX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGZpc2ggPSAnc2xhcCcKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZXNfXycsICdfX25hbWVfXycsICdmaXNoJ10KKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzaG91bGRfZmluZCA9IGluc3BlY3QuQXR0cmlidXRlKCdmaXNoJywgJ2RhdGEnLCBNZXRhLCAnc2xhcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmQsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQ2xhc3MpKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfVmlydHVhbEF0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnQk9PTSddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSdCT09NJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyKG5hbWUpCisgICAgICAgIGNsYXNzIENsYXNzKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2hvdWxkX2ZpbmQgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnQk9PTScsICdkYXRhJywgTWV0YSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmQsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQ2xhc3MpKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfVmlydHVhbEF0dHJpYnV0ZV9tdWx0aV9jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhMSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnb25lJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J29uZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTIodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3R3byddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0d28nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIE1ldGEzKE1ldGExLCBNZXRhMik6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KHNvcnRlZChzZXQoWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0aHJlZSddICsKKyAgICAgICAgICAgICAgICAgICAgTWV0YTEuX19kaXJfXyhjbHMpICsgTWV0YTIuX19kaXJfXyhjbHMpKSkpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0aHJlZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MxKG1ldGFjbGFzcz1NZXRhMSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIENsYXNzMihDbGFzczEsIG1ldGFjbGFzcz1NZXRhMyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2hvdWxkX2ZpbmQxID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ29uZScsICdkYXRhJywgTWV0YTEsIDEpCisgICAgICAgIHNob3VsZF9maW5kMiA9IGluc3BlY3QuQXR0cmlidXRlKCd0d28nLCAnZGF0YScsIE1ldGEyLCAyKQorICAgICAgICBzaG91bGRfZmluZDMgPSBpbnNwZWN0LkF0dHJpYnV0ZSgndGhyZWUnLCAnZGF0YScsIE1ldGEzLCAzKQorICAgICAgICBjY2EgPSBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKENsYXNzMikKKyAgICAgICAgZm9yIHNmIGluIChzaG91bGRfZmluZDEsIHNob3VsZF9maW5kMiwgc2hvdWxkX2ZpbmQzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2YsIGNjYSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X2NsYXNzX2F0dHJzX3dpdGhfYnVnZ3lfZGlyKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19uYW1lX18nLCAnbWlzc2luZyddCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhdHRycyA9IFthWzBdIGZvciBhIGluIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQyldCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21pc3NpbmcnLCBhdHRycykKKwogICAgIGRlZiB0ZXN0X2dldG1lbWJlcnNfZGVzY3JpcHRvcnMoc2VsZik6CiAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKICAgICAgICAgICAgIGRkID0gX0Jyb2tlbkRhdGFEZXNjcmlwdG9yKCkKQEAgLTY5Myw2ICs4ODgsMjggQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYikpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgYi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKGIsIGluc3BlY3QuaXNtZXRob2QpKQogCisgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc19WaXJ0dWFsQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKGNscywgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnZWdncyc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc2NyYW1ibGVkJworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGVnZ3Moc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzcGFtJworICAgICAgICBzZWxmLmFzc2VydEluKCgnZWdncycsICdzY3JhbWJsZWQnKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEEpKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZWdncycsICdzcGFtJyksIGluc3BlY3QuZ2V0bWVtYmVycyhBKCkpKQorCisgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc193aXRoX2J1Z2d5X2RpcihzZWxmKToKKyAgICAgICAgY2xhc3MgTSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbmFtZV9fJywgJ21pc3NpbmcnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYXR0cnMgPSBbYVswXSBmb3IgYSBpbiBpbnNwZWN0LmdldG1lbWJlcnMoQyldCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21pc3NpbmcnLCBhdHRycykKKwogCiBfZ2xvYmFsX3JlZiA9IG9iamVjdCgpCiBjbGFzcyBUZXN0R2V0Q2xvc3VyZVZhcnModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTg5LDYgKzEyMDYsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMywgJzEsIDInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYzLCAnMSwgMiwgYT0xLCBiPTInKQogCisgICAgICAgICMgaXNzdWUgIzIwODE2OiBnZXRjYWxsYXJncygpIGZhaWxzIHRvIGl0ZXJhdGUgb3ZlciBub24tZXhpc3RlbnQKKyAgICAgICAgIyBrd29ubHlkZWZhdWx0cyBhbmQgcmFpc2VzIGEgd3JvbmcgVHlwZUVycm9yCisgICAgICAgIGRlZiBmNSgqLCBhKTogcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcgMSByZXF1aXJlZCBrZXl3b3JkLW9ubHknKToKKyAgICAgICAgICAgIGluc3BlY3QuZ2V0Y2FsbGFyZ3MoZjUpCisKKworICAgICAgICAjIGlzc3VlMjA4MTc6CisgICAgICAgIGRlZiBmNihhLCBiLCBjKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIidhJywgJ2InIGFuZCAnYyciKToKKyAgICAgICAgICAgIGluc3BlY3QuZ2V0Y2FsbGFyZ3MoZjYpCisKIGNsYXNzIFRlc3RHZXRjYWxsYXJnc01ldGhvZHMoVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTEwODAsNiArMTMxMSwxNSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhUaGluZywgJ3gnKSwgVGhpbmcueCkKIAorICAgIGRlZiB0ZXN0X2NsYXNzVmlydHVhbEF0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGhpbmcob2JqZWN0KToKKyAgICAgICAgICAgIEB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiB4KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl94CisgICAgICAgICAgICBfeCA9IG9iamVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKFRoaW5nLCAneCcpLCBUaGluZy5fX2RpY3RfX1sneCddKQorCiAgICAgZGVmIHRlc3RfaW5oZXJpdGVkX2NsYXNzYXR0cmlidXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBUaGluZyhvYmplY3QpOgogICAgICAgICAgICAgeCA9IG9iamVjdCgpCkBAIC0xMzkwLDExICsxNjMwLDEzIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoUygpKSwgJygpJykKIAotICAgICAgICBkZWYgdGVzdChwbywgcGssICphcmdzLCBrbywgKiprd2FyZ3MpOgorICAgICAgICBkZWYgdGVzdChwbywgcGssIHBvZD00MiwgcGtkPTEwMCwgKmFyZ3MsIGtvLCAqKmt3YXJncyk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKHRlc3QpCiAgICAgICAgIHBvID0gc2lnLnBhcmFtZXRlcnNbJ3BvJ10ucmVwbGFjZShraW5kPVAuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICBwb2QgPSBzaWcucGFyYW1ldGVyc1sncG9kJ10ucmVwbGFjZShraW5kPVAuUE9TSVRJT05BTF9PTkxZKQogICAgICAgICBwayA9IHNpZy5wYXJhbWV0ZXJzWydwayddCisgICAgICAgIHBrZCA9IHNpZy5wYXJhbWV0ZXJzWydwa2QnXQogICAgICAgICBhcmdzID0gc2lnLnBhcmFtZXRlcnNbJ2FyZ3MnXQogICAgICAgICBrbyA9IHNpZy5wYXJhbWV0ZXJzWydrbyddCiAgICAgICAgIGt3YXJncyA9IHNpZy5wYXJhbWV0ZXJzWydrd2FyZ3MnXQpAQCAtMTQxNyw2ICsxNjU5LDE1IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lJyk6CiAgICAgICAgICAgICBTKChwbywgcGssIGFyZ3MsIGt3YXJnczIsIGtvKSkKIAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2ZvbGxvd3MgZGVmYXVsdCBhcmd1bWVudCcpOgorICAgICAgICAgICAgUygocG9kLCBwbykpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQnKToKKyAgICAgICAgICAgIFMoKHBvLCBwa2QsIHBrKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2ZvbGxvd3MgZGVmYXVsdCBhcmd1bWVudCcpOgorICAgICAgICAgICAgUygocGtkLCBwaykpCisKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfaW1tdXRhYmlsaXR5KHNlbGYpOgogICAgICAgICBkZWYgdGVzdChhKToKICAgICAgICAgICAgIHBhc3MKQEAgLTE0NjEsMTkgKzE3MTIsMTAwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgaW50LCAidmFyX2tleXdvcmQiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKLSAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbl9mdW5jdGlvbihzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUodHlwZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgotICAgICAgICAgICAgIyBzdXBwb3J0IGZvciAnd3JhcHBlcl9kZXNjcmlwdG9yJwotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUodHlwZS5fX2NhbGxfXykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgotICAgICAgICAgICAgIyBzdXBwb3J0IGZvciAnbWV0aG9kLXdyYXBwZXInCi0gICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShtaW4uX19jYWxsX18pCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubyBzaWduYXR1cmUgZm91bmQgZm9yIGJ1aWx0aW4gZnVuY3Rpb24nKToKLSAgICAgICAgICAgICMgc3VwcG9ydCBmb3IgJ21ldGhvZC13cmFwcGVyJwotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUobWluKQorICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisKKyAgICAgICAgZGVmIHRlc3RfdW5ib3VuZF9tZXRob2Qobyk6CisgICAgICAgICAgICAiIiJVc2UgdGhpcyB0byB0ZXN0IHVuYm91bmQgbWV0aG9kcyAodGhpbmdzIHRoYXQgc2hvdWxkIGhhdmUgYSBzZWxmKSIiIgorICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUobykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNpZ25hdHVyZSwgaW5zcGVjdC5TaWduYXR1cmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNpZ25hdHVyZS5wYXJhbWV0ZXJzLnZhbHVlcygpKVswXS5uYW1lLCAnc2VsZicpCisgICAgICAgICAgICByZXR1cm4gc2lnbmF0dXJlCisKKyAgICAgICAgZGVmIHRlc3RfY2FsbGFibGUobyk6CisgICAgICAgICAgICAiIiJVc2UgdGhpcyB0byB0ZXN0IGJvdW5kIG1ldGhvZHMgb3Igbm9ybWFsIGNhbGxhYmxlcyAodGhpbmdzIHRoYXQgZG9uJ3QgZXhwZWN0IHNlbGYpIiIiCisgICAgICAgICAgICBzaWduYXR1cmUgPSBpbnNwZWN0LnNpZ25hdHVyZShvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2lnbmF0dXJlLCBpbnNwZWN0LlNpZ25hdHVyZSkpCisgICAgICAgICAgICBpZiBzaWduYXR1cmUucGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpc3Qoc2lnbmF0dXJlLnBhcmFtZXRlcnMudmFsdWVzKCkpWzBdLm5hbWUsICdzZWxmJykKKyAgICAgICAgICAgIHJldHVybiBzaWduYXR1cmUKKworICAgICAgICBzaWduYXR1cmUgPSB0ZXN0X2NhbGxhYmxlKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfd2l0aF9kZWZhdWx0cykKKyAgICAgICAgZGVmIHAobmFtZSk6IHJldHVybiBzaWduYXR1cmUucGFyYW1ldGVyc1tuYW1lXS5kZWZhdWx0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgncycpLCAnYXZvY2FkbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnYicpLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdkJyksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnaScpLCAzNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCduJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgndCcpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ2YnKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnbG9jYWwnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdzeXMnKSwgc3lzLm1heHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnZXhwJyksIHN5cy5tYXhzaXplIC0gMSkKKworICAgICAgICB0ZXN0X2NhbGxhYmxlKG9iamVjdCkKKworICAgICAgICAjIG5vcm1hbCBtZXRob2QKKyAgICAgICAgIyAoUHlNZXRob2REZXNjcl9UeXBlLCAibWV0aG9kX2Rlc2NyaXB0b3IiKQorICAgICAgICB0ZXN0X3VuYm91bmRfbWV0aG9kKF9waWNrbGUuUGlja2xlci5kdW1wKQorICAgICAgICBkID0gX3BpY2tsZS5QaWNrbGVyKGlvLlN0cmluZ0lPKCkpCisgICAgICAgIHRlc3RfY2FsbGFibGUoZC5kdW1wKQorCisgICAgICAgICMgc3RhdGljIG1ldGhvZAorICAgICAgICB0ZXN0X2NhbGxhYmxlKHN0ci5tYWtldHJhbnMpCisgICAgICAgIHRlc3RfY2FsbGFibGUoJ2FiYycubWFrZXRyYW5zKQorCisgICAgICAgICMgY2xhc3MgbWV0aG9kCisgICAgICAgIHRlc3RfY2FsbGFibGUoZGljdC5mcm9ta2V5cykKKyAgICAgICAgdGVzdF9jYWxsYWJsZSh7fS5mcm9ta2V5cykKKworICAgICAgICAjIHdyYXBwZXIgYXJvdW5kIHNsb3QgKFB5V3JhcHBlckRlc2NyX1R5cGUsICJ3cmFwcGVyX2Rlc2NyaXB0b3IiKQorICAgICAgICB0ZXN0X3VuYm91bmRfbWV0aG9kKHR5cGUuX19jYWxsX18pCisgICAgICAgIHRlc3RfdW5ib3VuZF9tZXRob2QoaW50Ll9fYWRkX18pCisgICAgICAgIHRlc3RfY2FsbGFibGUoKDMpLl9fYWRkX18pCisKKyAgICAgICAgIyBfUHlNZXRob2RXcmFwcGVyX1R5cGUKKyAgICAgICAgIyBzdXBwb3J0IGZvciAnbWV0aG9kLXdyYXBwZXInCisgICAgICAgIHRlc3RfY2FsbGFibGUobWluLl9fY2FsbF9fKQorCisgICAgICAgICMgVGhpcyBkb2Vzbid0IHdvcmsgbm93LgorICAgICAgICAjIChXZSBkb24ndCBoYXZlIGEgdmFsaWQgc2lnbmF0dXJlIGZvciAidHlwZSIgaW4gMy40KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgIm5vIHNpZ25hdHVyZSBmb3VuZCIpOgorICAgICAgICAgICAgY2xhc3MgVGhpc1dvcmtzTm93OgorICAgICAgICAgICAgICAgIF9fY2FsbF9fID0gdHlwZQorICAgICAgICAgICAgdGVzdF9jYWxsYWJsZShUaGlzV29ya3NOb3coKSkKKworICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgIzIwNzg2CisgICAgICAgIHRlc3RfdW5ib3VuZF9tZXRob2QoZGljdC5fX2RlbGl0ZW1fXykKKyAgICAgICAgdGVzdF91bmJvdW5kX21ldGhvZChwcm9wZXJ0eS5fX2RlbGV0ZV9fKQorCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9kZWNvcmF0ZWRfYnVpbHRpbnMoc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgZnVuYyA9IF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfd2l0aF9kZWZhdWx0cworCisgICAgICAgIGRlZiBkZWNvcmF0b3IoZnVuYyk6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpIC0+IGludDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgICAgIGRlY29yYXRlZF9mdW5jID0gZGVjb3JhdG9yKGZ1bmMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShmdW5jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShkZWNvcmF0ZWRfZnVuYykpCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2J1aWx0aW5zX25vX3NpZ25hdHVyZShzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vIHNpZ25hdHVyZSBmb3VuZCBmb3IgYnVpbHRpbicpOgorICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fbm9uX2Z1bmN0aW9uKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgY2FsbGFibGUgb2JqZWN0Jyk6CkBAIC0xNDgyLDE4ICsxODE0LDExMiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgUHl0aG9uIGZ1bmN0aW9uJyk6CiAgICAgICAgICAgICBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKDQyKQogCi0gICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX21ldGhvZChzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdDoKLSAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgYXJnMSwgYXJnMj0xKSAtPiBpbnQ6CisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2Zyb21fYnVpbHRpbl9lcnJvcnMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdpcyBub3QgYSBQeXRob24gYnVpbHRpbicpOgorICAgICAgICAgICAgaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9idWlsdGluKDQyKQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2Zyb21fZnVuY3Rpb25saWtlX29iamVjdChzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoYSxiLCAqYXJncywga3dvbmx5PVRydWUsIGt3b25seXJlcSwgKiprd2FyZ3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIGZ1bmNsaWtlOgorICAgICAgICAgICAgIyBIYXMgdG8gYmUgY2FsbGFibGUsIGFuZCBoYXZlIGNvcnJlY3QKKyAgICAgICAgICAgICMgX19jb2RlX18sIF9fYW5ub3RhdGlvbnNfXywgX19kZWZhdWx0c19fLCBfX25hbWVfXywKKyAgICAgICAgICAgICMgYW5kIF9fa3dkZWZhdWx0c19fIGF0dHJpYnV0ZXMKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMpOgorICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgc2VsZi5fX2NvZGVfXyA9IGZ1bmMuX19jb2RlX18KKyAgICAgICAgICAgICAgICBzZWxmLl9fYW5ub3RhdGlvbnNfXyA9IGZ1bmMuX19hbm5vdGF0aW9uc19fCisgICAgICAgICAgICAgICAgc2VsZi5fX2RlZmF1bHRzX18gPSBmdW5jLl9fZGVmYXVsdHNfXworICAgICAgICAgICAgICAgIHNlbGYuX19rd2RlZmF1bHRzX18gPSBmdW5jLl9fa3dkZWZhdWx0c19fCisgICAgICAgICAgICAgICAgc2VsZi5mdW5jID0gZnVuYworCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mdW5jKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzaWdfZnVuYyA9IGluc3BlY3QuU2lnbmF0dXJlLmZyb21fZnVuY3Rpb24oZnVuYykKKworICAgICAgICBzaWdfZnVuY2xpa2UgPSBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKGZ1bmNsaWtlKGZ1bmMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ19mdW5jbGlrZSwgc2lnX2Z1bmMpCisKKyAgICAgICAgc2lnX2Z1bmNsaWtlID0gaW5zcGVjdC5zaWduYXR1cmUoZnVuY2xpa2UoZnVuYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnX2Z1bmNsaWtlLCBzaWdfZnVuYykKKworICAgICAgICAjIElmIG9iamVjdCBpcyBub3QgYSBkdWNrIHR5cGUgb2YgZnVuY3Rpb24sIHRoZW4KKyAgICAgICAgIyBzaWduYXR1cmUgd2lsbCB0cnkgdG8gZ2V0IGEgc2lnbmF0dXJlIGZvciBpdHMgJ19fY2FsbF9fJworICAgICAgICAjIG1ldGhvZAorICAgICAgICBmbCA9IGZ1bmNsaWtlKGZ1bmMpCisgICAgICAgIGRlbCBmbC5fX2RlZmF1bHRzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShmbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9wb3NpdGlvbmFsIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgLi4uLCAidmFyX2tleXdvcmQiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgICMgVGVzdCB3aXRoIGN5dGhvbi1saWtlIGJ1aWx0aW5zOgorICAgICAgICBfb3JpZ19pc2Rlc2MgPSBpbnNwZWN0LmlzbWV0aG9kZGVzY3JpcHRvcgorICAgICAgICBkZWYgX2lzZGVzYyhvYmopOgorICAgICAgICAgICAgaWYgaGFzYXR0cihvYmosICdfYnVpbHRpbm1vY2snKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIF9vcmlnX2lzZGVzYyhvYmopCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoKCdpbnNwZWN0LmlzbWV0aG9kZGVzY3JpcHRvcicsIF9pc2Rlc2MpOgorICAgICAgICAgICAgYnVpbHRpbl9mdW5jID0gZnVuY2xpa2UoZnVuYykKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgb3VyIG1vY2sgc2V0dXAgaXMgd29ya2luZworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzbWV0aG9kZGVzY3JpcHRvcihidWlsdGluX2Z1bmMpKQorICAgICAgICAgICAgYnVpbHRpbl9mdW5jLl9idWlsdGlubW9jayA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzbWV0aG9kZGVzY3JpcHRvcihidWlsdGluX2Z1bmMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShidWlsdGluX2Z1bmMpLCBzaWdfZnVuYykKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9mdW5jdGlvbmxpa2VfY2xhc3Moc2VsZik6CisgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGR1Y2sgdHlwZSBmdW5jdGlvbi1saWtlIG9iamVjdHMsCisgICAgICAgICMgbm90IGNsYXNzZXMuCisKKyAgICAgICAgZGVmIGZ1bmMoYSxiLCAqYXJncywga3dvbmx5PVRydWUsIGt3b25seXJlcSwgKiprd2FyZ3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIGZ1bmNsaWtlOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmtlcik6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIG1ldGggPSBUZXN0KCkuZm9vCisgICAgICAgICAgICBfX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KKyAgICAgICAgICAgIF9fY29kZV9fID0gZnVuYy5fX2NvZGVfXworICAgICAgICAgICAgX19hbm5vdGF0aW9uc19fID0gZnVuYy5fX2Fubm90YXRpb25zX18KKyAgICAgICAgICAgIF9fZGVmYXVsdHNfXyA9IGZ1bmMuX19kZWZhdWx0c19fCisgICAgICAgICAgICBfX2t3ZGVmYXVsdHNfXyA9IGZ1bmMuX19rd2RlZmF1bHRzX18KIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKG1ldGgpLAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgUHl0aG9uIGZ1bmN0aW9uJyk6CisgICAgICAgICAgICBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKGZ1bmNsaWtlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKGZ1bmNsaWtlKSksICcobWFya2VyKScpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fbWV0aG9kKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKCphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgbTEoc2VsZiwgYXJnMSwgYXJnMj0xKSAtPiBpbnQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIG0yKCphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgX19jYWxsX18oKiwgYSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoVGVzdCgpLm0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJnMScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2FyZzInLCAxLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShUZXN0KCkubTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmdzJywgLi4uLCAuLi4sICJ2YXJfcG9zaXRpb25hbCIpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShUZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJncycsIC4uLiwgLi4uLCAidmFyX3Bvc2l0aW9uYWwiKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlJyk6CisgICAgICAgICAgICBzZWxmLnNpZ25hdHVyZShUZXN0KCkpCisKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fY2xhc3NtZXRob2Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3Q6CiAgICAgICAgICAgICBAY2xhc3NtZXRob2QKQEAgLTE1MzMsNiArMTk1OSw4IEBACiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX3BhcnRpYWwoc2VsZik6CiAgICAgICAgIGZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCiAKKyAgICAgICAgUGFyYW1ldGVyID0gaW5zcGVjdC5QYXJhbWV0ZXIKKwogICAgICAgICBkZWYgdGVzdCgpOgogICAgICAgICAgICAgcGFzcwogCkBAIC0xNTY4LDE1ICsxOTk2LDIyIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKHRlc3QsIGI9MSwgYz0yKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgMSwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAxLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsIDIsIC4uLiwgImtleXdvcmRfb25seSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgLi4uLCAuLi4sICJrZXl3b3JkX29ubHkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKHRlc3QsIDAsIGI9MSwgYz0yKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAxLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIDEsIC4uLiwgImtleXdvcmRfb25seSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMiwgLi4uLCAia2V5d29yZF9vbmx5IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgYT0xKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAxLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgLi4uLCAuLi4sICJrZXl3b3JkX29ubHkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKICAgICAgICAgZGVmIHRlc3QoYSwgKmFyZ3MsIGIsICoqa3dhcmdzKToKQEAgLTE1ODgsMTMgKzIwMjMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICJ2YXJfa2V5d29yZCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgYT0xKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAxLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgLi4uLCAidmFyX2tleXdvcmQiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKHRlc3QsIDEsIDIsIDMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJncycsIC4uLiwgLi4uLCAidmFyX3Bvc2l0aW9uYWwiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgLi4uLCAidmFyX2tleXdvcmQiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgMSwgMiwgMywgdGVzdD1UcnVlKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9wb3NpdGlvbmFsIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpLApAQCAtMTY0MSw3ICsyMDgxLDcgQEAKICAgICAgICAgICAgIHJldHVybiBhCiAgICAgICAgIF9mb28gPSBwYXJ0aWFsKHBhcnRpYWwoZm9vLCBhPTEwKSwgYT0yMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShfZm9vKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIDIwLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgMjAsIC4uLiwgImtleXdvcmRfb25seSIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBoYXZlIGFueSBzaWRlLWVmZmVjdHMgaW4gc2lnbmF0dXJlKCksCiAgICAgICAgICMgYW5kIHRoZSBwYXJ0aWFsIG9iamVjdCBpcyBzdGlsbCBmdW5jdGlvbmluZwpAQCAtMTY1MCw0MiArMjA5MCwxMTkgQEAKICAgICAgICAgZGVmIGZvbyhhLCBiLCBjKToKICAgICAgICAgICAgIHJldHVybiBhLCBiLCBjCiAgICAgICAgIF9mb28gPSBwYXJ0aWFsKHBhcnRpYWwoZm9vLCAxLCBiPTIwKSwgYj0zMCkKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKF9mb28pLAotICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdiJywgMzAsIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAzMCwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKGM9MTApLCAoMSwgMzAsIDEwKSkKLSAgICAgICAgX2ZvbyA9IHBhcnRpYWwoX2ZvbywgMikgIyBub3cgJ2InIGhhcyB0d28gdmFsdWVzIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAiaGFzIGluY29ycmVjdCBhcmd1bWVudHMiKToKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKF9mb28pCiAKICAgICAgICAgZGVmIGZvbyhhLCBiLCBjLCAqLCBkKToKICAgICAgICAgICAgIHJldHVybiBhLCBiLCBjLCBkCiAgICAgICAgIF9mb28gPSBwYXJ0aWFsKHBhcnRpYWwoZm9vLCBkPTIwLCBjPTIwKSwgYj0xMCwgZD0zMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShfZm9vKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAxMCwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAyMCwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAzMCwgLi4uLCAia2V5d29yZF9vbmx5IikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgMTAsIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMjAsIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgMzAsIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKICAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKGE9MjAwLCBiPTExKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9mb28oKmJhLmFyZ3MsICoqYmEua3dhcmdzKSwgKDIwMCwgMTEsIDIwLCAzMCkpCiAKICAgICAgICAgZGVmIGZvbyhhPTEsIGI9MiwgYz0zKToKICAgICAgICAgICAgIHJldHVybiBhLCBiLCBjCi0gICAgICAgIF9mb28gPSBwYXJ0aWFsKGZvbywgYT0xMCwgYz0xMykKLSAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKDExKQorICAgICAgICBfZm9vID0gcGFydGlhbChmb28sIGM9MTMpICMgKGE9MSwgYj0yLCAqLCBjPTEzKQorCisgICAgICAgIGJhID0gaW5zcGVjdC5zaWduYXR1cmUoX2ZvbykuYmluZChhPTExKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9mb28oKmJhLmFyZ3MsICoqYmEua3dhcmdzKSwgKDExLCAyLCAxMykpCisKICAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKDExLCAxMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKCpiYS5hcmdzLCAqKmJhLmt3YXJncyksICgxMSwgMTIsIDEzKSkKKwogICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoMTEsIGI9MTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTEsIDEyLCAxMykpCisKICAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKGI9MTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTAsIDEyLCAxMykpCi0gICAgICAgIF9mb28gPSBwYXJ0aWFsKF9mb28sIGI9MTApCi0gICAgICAgIGJhID0gaW5zcGVjdC5zaWduYXR1cmUoX2ZvbykuYmluZCgxMiwgMTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTIsIDE0LCAxMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMSwgMTIsIDEzKSkKKworICAgICAgICBfZm9vID0gcGFydGlhbChfZm9vLCBiPTEwLCBjPTIwKQorICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTIsIDEwLCAyMCkpCisKKworICAgICAgICBkZWYgZm9vKGEsIGIsIGMsIGQsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUoZm9vKQorICAgICAgICBwYXJhbXMgPSBzaWcucGFyYW1ldGVycy5jb3B5KCkKKyAgICAgICAgcGFyYW1zWydhJ10gPSBwYXJhbXNbJ2EnXS5yZXBsYWNlKGtpbmQ9UGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgcGFyYW1zWydiJ10gPSBwYXJhbXNbJ2InXS5yZXBsYWNlKGtpbmQ9UGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgZm9vLl9fc2lnbmF0dXJlX18gPSBpbnNwZWN0LlNpZ25hdHVyZShwYXJhbXMudmFsdWVzKCkpCisgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2lnKSwgJyhhLCBiLCAvLCBjLCBkLCAqKmt3YXJncyknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbChmb28sIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICd2YXJfa2V5d29yZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbChmb28sIDEsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYycsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgJ3Zhcl9rZXl3b3JkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKGZvbywgMSwgMiwgMykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdkJywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICd2YXJfa2V5d29yZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbChmb28sIDEsIDIsIGM9MykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjJywgMywgLi4uLCAna2V5d29yZF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgJ2tleXdvcmRfb25seScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgJ3Zhcl9rZXl3b3JkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKGZvbywgMSwgYz0zKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb25seScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMywgLi4uLCAna2V5d29yZF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgJ2tleXdvcmRfb25seScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgJ3Zhcl9rZXl3b3JkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fcGFydGlhbG1ldGhvZChzZWxmKToKKyAgICAgICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWxtZXRob2QKKworICAgICAgICBjbGFzcyBTcGFtOgorICAgICAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBoYW0gPSBwYXJ0aWFsbWV0aG9kKHRlc3QpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJoYXMgaW5jb3JyZWN0IGFyZ3VtZW50cyIpOgorICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoU3BhbS5oYW0pCisKKyAgICAgICAgY2xhc3MgU3BhbToKKyAgICAgICAgICAgIGRlZiB0ZXN0KGl0LCBhLCAqLCBjKSAtPiAnc3BhbSc6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaGFtID0gcGFydGlhbG1ldGhvZCh0ZXN0LCBjPTEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShTcGFtLmhhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2l0JywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAxLCAuLi4sICdrZXl3b3JkX29ubHknKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShTcGFtKCkuaGFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAxLCAuLi4sICdrZXl3b3JkX29ubHknKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fZmFrZV9wYXJ0aWFsbWV0aG9kKHNlbGYpOgorICAgICAgICBkZWYgZm9vKGEpOiBwYXNzCisgICAgICAgIGZvby5fcGFydGlhbG1ldGhvZCA9ICdzcGFtJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShmb28pKSwgJyhhKScpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fZGVjb3JhdGVkKHNlbGYpOgogICAgICAgICBpbXBvcnQgZnVuY3Rvb2xzCkBAIC0xNzM2LDYgKzIyNTMsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAorICAgICAgICAjIFRlc3Qgd2UgaGFuZGxlIF9fc2lnbmF0dXJlX18gcGFydHdheSBkb3duIHRoZSB3cmFwcGVyIHN0YWNrCisgICAgICAgIGRlZiB3cmFwcGVkX2Zvb19jYWxsKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdyYXBwZWRfZm9vX2NhbGwuX193cmFwcGVkX18gPSBGb28uX19jYWxsX18KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHdyYXBwZWRfZm9vX2NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSk6CkBAIC0xODE3LDYgKzIzNDUsNDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYmFyJywgMiwgLi4uLCAia2V5d29yZF9vbmx5IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9jbGFzc193aXRob3V0X2luaXQoc2VsZik6CisgICAgICAgICMgVGVzdCBjbGFzc2VzIHdpdGhvdXQgdXNlci1kZWZpbmVkIF9faW5pdF9fIG9yIF9fbmV3X18KKyAgICAgICAgY2xhc3MgQzogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShDKSksICcoKScpCisgICAgICAgIGNsYXNzIEQoQyk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoRCkpLCAnKCknKQorCisgICAgICAgICMgVGVzdCBtZXRhLWNsYXNzZXMgd2l0aG91dCB1c2VyLWRlZmluZWQgX19pbml0X18gb3IgX19uZXdfXworICAgICAgICBjbGFzcyBDKHR5cGUpOiBwYXNzCisgICAgICAgIGNsYXNzIEQoQyk6IHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYWxsYWJsZS4qaXMgbm90IHN1cHBvcnRlZCIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShDKSwgTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYWxsYWJsZS4qaXMgbm90IHN1cHBvcnRlZCIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShEKSwgTm9uZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbl9jbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoX3BpY2tsZS5QaWNrbGVyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmaWxlLCBwcm90b2NvbD1Ob25lLCBmaXhfaW1wb3J0cz1UcnVlKScpCisKKyAgICAgICAgY2xhc3MgUChfcGlja2xlLlBpY2tsZXIpOiBwYXNzCisgICAgICAgIGNsYXNzIEVtcHR5VHJhaXQ6IHBhc3MKKyAgICAgICAgY2xhc3MgUDIoRW1wdHlUcmFpdCwgUCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoUCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcoZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShQMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcoZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSknKQorCisgICAgICAgIGNsYXNzIFAzKFAyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcGFtKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKFAzKSksICcoc3BhbSknKQorCisgICAgICAgIGNsYXNzIE1ldGFQKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKGNscywgZm9vLCBiYXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgUDQoUDIsIG1ldGFjbGFzcz1NZXRhUCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKFA0KSksICcoZm9vLCBiYXIpJykKKwogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9jYWxsYWJsZV9vYmplY3RzKHNlbGYpOgogICAgICAgICBjbGFzcyBGb286CiAgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgYSk6CkBAIC0xODM4LDE4ICsyNDA5LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKLSAgICAgICAgY2xhc3MgVG9GYWlsOgotICAgICAgICAgICAgX19jYWxsX18gPSB0eXBlCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAibm90IHN1cHBvcnRlZCBieSBzaWduYXR1cmUiKToKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKFRvRmFpbCgpKQotCi0KICAgICAgICAgY2xhc3MgV3JhcHBlZDoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgV3JhcHBlZC5fX3dyYXBwZWRfXyA9IGxhbWJkYSBhOiBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoV3JhcHBlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisgICAgICAgICMgd3JhcHBlciBsb29wOgorICAgICAgICBXcmFwcGVkLl9fd3JhcHBlZF9fID0gV3JhcHBlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUoV3JhcHBlZCkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9sYW1iZGFzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKChsYW1iZGEgYT0xMDogYSkpLApAQCAtMTkyMyw2ICsyNDkyLDcgQEAKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9zdHJfcG9zaXRpb25hbF9vbmx5KHNlbGYpOgogICAgICAgICBQID0gaW5zcGVjdC5QYXJhbWV0ZXIKKyAgICAgICAgUyA9IGluc3BlY3QuU2lnbmF0dXJlCiAKICAgICAgICAgZGVmIHRlc3QoYV9wbywgKiwgYiwgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmV0dXJuIGFfcG8sIGt3YXJncwpAQCAtMTkzMywxNCArMjUwMywyMCBAQAogICAgICAgICB0ZXN0Ll9fc2lnbmF0dXJlX18gPSBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPW5ld19wYXJhbXMpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUodGVzdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICcoPGFfcG8+LCAqLCBiLCAqKmt3YXJncyknKQorICAgICAgICAgICAgICAgICAgICAgICAgICcoYV9wbywgLywgKiwgYiwgKiprd2FyZ3MpJykKIAotICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KQotICAgICAgICBuZXdfcGFyYW1zID0gbGlzdChzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKLSAgICAgICAgbmV3X3BhcmFtc1swXSA9IG5ld19wYXJhbXNbMF0ucmVwbGFjZShuYW1lPU5vbmUpCi0gICAgICAgIHRlc3QuX19zaWduYXR1cmVfXyA9IHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9bmV3X3BhcmFtcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUodGVzdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICcoPDA+LCAqLCBiLCAqKmt3YXJncyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihTKHBhcmFtZXRlcnM9W1AoJ2ZvbycsIFAuUE9TSVRJT05BTF9PTkxZKV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKGZvbywgLyknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFMocGFyYW1ldGVycz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAoJ2ZvbycsIFAuUE9TSVRJT05BTF9PTkxZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCgnYmFyJywgUC5WQVJfS0VZV09SRCldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmb28sIC8sICoqYmFyKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoUyhwYXJhbWV0ZXJzPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCgnZm9vJywgUC5QT1NJVElPTkFMX09OTFkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQKCdiYXInLCBQLlZBUl9QT1NJVElPTkFMKV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKGZvbywgLywgKmJhciknKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3JlcGxhY2VfYW5ubyhzZWxmKToKICAgICAgICAgZGVmIHRlc3QoKSAtPiA0MjoKQEAgLTE5NTUsNiArMjUzMSwyMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZy5yZXR1cm5fYW5ub3RhdGlvbiwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnLCBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KSkKIAorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9tYW5nbGVkX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGNsYXNzIFNwYW06CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYsIF9fcDE6MT0yLCAqLCBfX3AyOjI9Myk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBIYW0oU3BhbSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShTcGFtLmZvbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ3NlbGYnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfU3BhbV9fcDEnLCAyLCAxLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ19TcGFtX19wMicsIDMsIDIsICJrZXl3b3JkX29ubHkiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShTcGFtLmZvbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUoSGFtLmZvbykpCisKIAogY2xhc3MgVGVzdFBhcmFtZXRlck9iamVjdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3BhcmFtZXRlcl9raW5kcyhzZWxmKToKQEAgLTE5NzksMTAgKzI1NzEsMTMgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZScpOgogICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoJzEnLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlZBUl9LRVlXT1JEKQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub24tcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnbmFtZSBtdXN0IGJlIGEgc3RyJyk6CiAgICAgICAgICAgICBpbnNwZWN0LlBhcmFtZXRlcihOb25lLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlZBUl9LRVlXT1JEKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJyk6CisgICAgICAgICAgICBpbnNwZWN0LlBhcmFtZXRlcignJCcsIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuVkFSX0tFWVdPUkQpCisKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdjYW5ub3QgaGF2ZSBkZWZhdWx0IHZhbHVlcycpOgogICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoJ2EnLCBkZWZhdWx0PTQyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1pbnNwZWN0LlBhcmFtZXRlci5WQVJfS0VZV09SRCkKQEAgLTIwMzEsNyArMjYyNiw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDIubmFtZSwgJ2JhcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocDIsIHApCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZScpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lIGlzIGEgcmVxdWlyZWQgYXR0cmlidXRlJyk6CiAgICAgICAgICAgICBwMiA9IHAyLnJlcGxhY2UobmFtZT1wMi5lbXB0eSkKIAogICAgICAgICBwMiA9IHAyLnJlcGxhY2UobmFtZT0nZm9vJywgZGVmYXVsdD1Ob25lKQpAQCAtMjA1MywxNCArMjY0OSwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLCBwKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3BhcmFtZXRlcl9wb3NpdGlvbmFsX29ubHkoc2VsZik6Ci0gICAgICAgIHAgPSBpbnNwZWN0LlBhcmFtZXRlcihOb25lLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICc8PicpCi0KLSAgICAgICAgcCA9IHAucmVwbGFjZShuYW1lPScxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICc8MT4nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnbmFtZSBtdXN0IGJlIGEgc3RyJyk6CisgICAgICAgICAgICBpbnNwZWN0LlBhcmFtZXRlcihOb25lLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9wYXJhbWV0ZXJfaW1tdXRhYmlsaXR5KHNlbGYpOgotICAgICAgICBwID0gaW5zcGVjdC5QYXJhbWV0ZXIoTm9uZSwga2luZD1pbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHAgPSBpbnNwZWN0LlBhcmFtZXRlcignc3BhbScsIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcC5mb28gPSAnYmFyJwpAQCAtMjI1OCw2ICsyODUxLDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIDEsIDIsIDQsIDUsIGJhcj02KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgMiwgNCwgNSwgNiwge30pKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAyLCAzLCA0MiwgNTAsIHt9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FsbCh0ZXN0LCAxLCAyLCBmb289NCwgYmFyPTUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAyLCAzLCA0LCA1LCB7fSkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgImJ1dCB3YXMgcGFzc2VkIGFzIGEga2V5d29yZCIpOgorICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIDEsIDIsIGZvbz00LCBiYXI9NSwgY19wbz0xMCkKKwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAicGFyYW1ldGVyIGlzIHBvc2l0aW9uYWwgb25seSIpOgogICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIDEsIDIsIGNfcG89NCkKIApAQCAtMjI3NCw2ICsyODc2LDIyIEBACiAgICAgICAgIGJhID0gc2lnLmJpbmQoMSwgc2VsZj0yLCBiPTMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmEuYXJncywgKDEsIDIsIDMpKQogCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2JpbmRfdmFyYXJnX25hbWUoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KGEsICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhLCBhcmdzCisgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKHRlc3QpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgInRvbyBtYW55IGtleXdvcmQgYXJndW1lbnRzIik6CisgICAgICAgICAgICBzaWcuYmluZChhPTAsIGFyZ3M9MSkKKworICAgICAgICBkZWYgdGVzdCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MsIGt3YXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FsbCh0ZXN0LCBhcmdzPTEpLCAoKCksIHsnYXJncyc6IDF9KSkKKworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KQorICAgICAgICBiYSA9IHNpZy5iaW5kKGFyZ3M9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYS5hcmd1bWVudHMsIHsna3dhcmdzJzogeydhcmdzJzogMX19KQorCiAKIGNsYXNzIFRlc3RCb3VuZEFyZ3VtZW50cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2JvdW5kX2FyZ3VtZW50c191bmhhc2hhYmxlKHNlbGYpOgpAQCAtMjMwMSw2ICsyOTE5LDE3NSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGJhLCBiYTQpCiAKIAorY2xhc3MgVGVzdFNpZ25hdHVyZVByaXZhdGVIZWxwZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfZ2V0X2JvdW5kX3BhcmFtKHNlbGYpOgorICAgICAgICBnZXR0ZXIgPSBpbnNwZWN0Ll9zaWduYXR1cmVfZ2V0X2JvdW5kX3BhcmFtCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXR0ZXIoJygkc2VsZiknKSwgJ3NlbGYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldHRlcignKCRzZWxmLCBvYmopJyksICdzZWxmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXR0ZXIoJygkY2xzLCAvLCBvYmopJyksICdjbHMnKQorCisgICAgZGVmIF9zdHJpcF9ub25fcHl0aG9uX3N5bnRheChzZWxmLCBpbnB1dCwKKyAgICAgICAgY2xlYW5fc2lnbmF0dXJlLCBzZWxmX3BhcmFtZXRlciwgbGFzdF9wb3NpdGlvbmFsX29ubHkpOgorICAgICAgICBjb21wdXRlZF9jbGVhbl9zaWduYXR1cmUsIFwKKyAgICAgICAgICAgIGNvbXB1dGVkX3NlbGZfcGFyYW1ldGVyLCBcCisgICAgICAgICAgICBjb21wdXRlZF9sYXN0X3Bvc2l0aW9uYWxfb25seSA9IFwKKyAgICAgICAgICAgIGluc3BlY3QuX3NpZ25hdHVyZV9zdHJpcF9ub25fcHl0aG9uX3N5bnRheChpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wdXRlZF9jbGVhbl9zaWduYXR1cmUsIGNsZWFuX3NpZ25hdHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wdXRlZF9zZWxmX3BhcmFtZXRlciwgc2VsZl9wYXJhbWV0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcHV0ZWRfbGFzdF9wb3NpdGlvbmFsX29ubHksIGxhc3RfcG9zaXRpb25hbF9vbmx5KQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3N0cmlwX25vbl9weXRob25fc3ludGF4KHNlbGYpOgorICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIoJG1vZHVsZSwgLywgcGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsICIgKworICAgICAgICAgICAgICAgICJlZmZlY3RpdmVfaWRzPUZhbHNlLFxuICAgICAgIGZvbGxvd19zeW1saW5rcz1UcnVlKSIsCisgICAgICAgICAgICAiKG1vZHVsZSwgcGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsICIgKworICAgICAgICAgICAgICAgICJlZmZlY3RpdmVfaWRzPUZhbHNlLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkiLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDApCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiKCRtb2R1bGUsIHdvcmQsIHNhbHQsIC8pIiwKKyAgICAgICAgICAgICIobW9kdWxlLCB3b3JkLCBzYWx0KSIsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMikKKworICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIoeCwgeT1Ob25lLCB6PU5vbmUsIC8pIiwKKyAgICAgICAgICAgICIoeCwgeT1Ob25lLCB6PU5vbmUpIiwKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAyKQorCisgICAgICAgIHNlbGYuX3N0cmlwX25vbl9weXRob25fc3ludGF4KAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiKHgsXG4gICAgeT1Ob25lLFxuICAgICAgeiA9IE5vbmUgICkiLAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBOb25lKQorCisKK2NsYXNzIFRlc3RVbndyYXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW53cmFwX29uZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgd3JhcHBlciA9IGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0yMCkoZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnNwZWN0LnVud3JhcCh3cmFwcGVyKSwgZnVuYykKKworICAgIGRlZiB0ZXN0X3Vud3JhcF9zZXZlcmFsKHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICB3cmFwcGVyID0gZnVuYworICAgICAgICBmb3IgX18gaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyh3cmFwcGVyKQorICAgICAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3JhcHBlci5fX3dyYXBwZWRfXywgZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnNwZWN0LnVud3JhcCh3cmFwcGVyKSwgZnVuYykKKworICAgIGRlZiB0ZXN0X3N0b3Aoc2VsZik6CisgICAgICAgIGRlZiBmdW5jMShhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMxKQorICAgICAgICBkZWYgZnVuYzIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jMikKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZnVuYzIuc3RvcF9oZXJlID0gMQorICAgICAgICB1bndyYXBwZWQgPSBpbnNwZWN0LnVud3JhcCh3cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wPShsYW1iZGEgZjogaGFzYXR0cihmLCAic3RvcF9oZXJlIikpKQorICAgICAgICBzZWxmLmFzc2VydElzKHVud3JhcHBlZCwgZnVuYzIpCisKKyAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMxKCk6IHBhc3MKKyAgICAgICAgZnVuYzEuX193cmFwcGVkX18gPSBmdW5jMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgaW5zcGVjdC51bndyYXAoZnVuYzEpCisKKyAgICAgICAgZGVmIGZ1bmMyKCk6IHBhc3MKKyAgICAgICAgZnVuYzIuX193cmFwcGVkX18gPSBmdW5jMQorICAgICAgICBmdW5jMS5fX3dyYXBwZWRfXyA9IGZ1bmMyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBpbnNwZWN0LnVud3JhcChmdW5jMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIGluc3BlY3QudW53cmFwKGZ1bmMyKQorCisgICAgZGVmIHRlc3RfdW5oYXNoYWJsZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoKTogcGFzcworICAgICAgICBmdW5jLl9fd3JhcHBlZF9fID0gTm9uZQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lCisgICAgICAgICAgICBfX3dyYXBwZWRfXyA9IGZ1bmMKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5zcGVjdC51bndyYXAoQygpKSkKKworY2xhc3MgVGVzdE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X29ubHlfc291cmNlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pdHRlc3QnKQorICAgICAgICBsaW5lcyA9IG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBpZ25vcmUgdGhlIGZpbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s6LTFdLCBpbnNwZWN0LmdldHNvdXJjZShtb2R1bGUpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9nZXRhdHRyKHNlbGYpOgorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvby5fX3NpZ25hdHVyZV9fID0gNDIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoZm9vKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihUaHJlYWRQb29sRXhlY3V0b3IgaXMgTm9uZSwKKyAgICAgICAgICAgICd0aHJlYWRzIHJlcXVpcmVkIHRvIHRlc3QgX19xdWFsbmFtZV9fIGZvciBzb3VyY2UgZmlsZXMnKQorICAgIGRlZiB0ZXN0X3F1YWxuYW1lX3NvdXJjZShzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmN1cnJlbnQuZnV0dXJlczpUaHJlYWRQb29sRXhlY3V0b3InKQorICAgICAgICBsaW5lcyA9IG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBpZ25vcmUgdGhlIGZpbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s6LTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuZ2V0c291cmNlKFRocmVhZFBvb2xFeGVjdXRvcikuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cycpCisgICAgICAgIGxpbmVzID0gZXJyLmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIkNhbid0IGdldCBpbmZvIGZvciBidWlsdGluIG1vZHVsZXMuIl0pCisKKyAgICBkZWYgdGVzdF9kZXRhaWxzKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pdHRlc3QnLCAnLS1kZXRhaWxzJykKKyAgICAgICAgb3V0cHV0ID0gb3V0LmRlY29kZSgpCisgICAgICAgICMgSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fbmFtZV9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fZmlsZV9fLCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBzeXMuZmxhZ3Mub3B0aW1pemU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX2NhY2hlZF9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisKKworCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoCiAgICAgICAgIFRlc3REZWNvcmF0b3JzLCBUZXN0UmV0cmlldmluZ1NvdXJjZUNvZGUsIFRlc3RPbmVsaW5lcnMsIFRlc3RCdWdneUNhc2VzLApAQCAtMjMwOCw3ICszMDk1LDggQEAKICAgICAgICAgVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zLCBUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzLAogICAgICAgICBUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgVGVzdEdldGF0dHJTdGF0aWMsIFRlc3RHZXRHZW5lcmF0b3JTdGF0ZSwKICAgICAgICAgVGVzdE5vRU9MLCBUZXN0U2lnbmF0dXJlT2JqZWN0LCBUZXN0U2lnbmF0dXJlQmluZCwgVGVzdFBhcmFtZXRlck9iamVjdCwKLSAgICAgICAgVGVzdEJvdW5kQXJndW1lbnRzLCBUZXN0R2V0Q2xvc3VyZVZhcnMKKyAgICAgICAgVGVzdEJvdW5kQXJndW1lbnRzLCBUZXN0U2lnbmF0dXJlUHJpdmF0ZUhlbHBlcnMsIFRlc3RHZXRDbG9zdXJlVmFycywKKyAgICAgICAgVGVzdFVud3JhcCwgVGVzdE1haW4KICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ludC5weSBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CmluZGV4IGM0ODk1MTAuLmU5NDYwMmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CkBAIC0yMjgsNiArMjI4LDQ3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBiYXNlPTEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgYmFzZT0wKQogCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfbGltaXRzKHNlbGYpOgorICAgICAgICAiIiJUZXN0aW5nIHRoZSBzdXBwb3J0ZWQgbGltaXRzIG9mIHRoZSBpbnQoKSBiYXNlIHBhcmFtZXRlci4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAnLCA1KSwgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCAzNykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIC05MDkpICAjIEFuIG9sZCBtYWdpYyB2YWx1ZSBiYXNlIGZyb20gUHl0aG9uIDIuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCBiYXNlPTAtKDIqKjIzNCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCBiYXNlPTIqKjIzNCkKKyAgICAgICAgIyBCYXNlcyAyIHRocm91Z2ggMzYgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgZm9yIGJhc2UgaW4gcmFuZ2UoMiwzNyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMCcsIGJhc2U9YmFzZSksIDApCisKKyAgICBkZWYgdGVzdF9pbnRfYmFzZV9iYWRfdHlwZXMoc2VsZik6CisgICAgICAgICIiIk5vdCBpbnRlZ2VyIHR5cGVzIGFyZSBub3QgdmFsaWQgYmFzZXM7IGlzc3VlMTY3NzIuIiIiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDUuNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgNS4wKQorCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUluZGV4YWJsZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworICAgICAgICAjIENoZWNrIG91dCBvZiByYW5nZSBiYXNlcy4KKyAgICAgICAgZm9yIGJhc2UgaW4gMioqMTAwLCAtMioqMTAwLCAxLCAzNzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgaW50KCc0MycsIGJhc2UpCisKKyAgICAgICAgIyBDaGVjayBpbi1yYW5nZSBiYXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMScsIGJhc2U9TXlJbmRleGFibGUoMikpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAxJywgYmFzZT1NeUluZGV4YWJsZSgxMCkpLCAxMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDEnLCBiYXNlPU15SW5kZXhhYmxlKDM2KSksIDEgKyAzNioqMikKKwogICAgIGRlZiB0ZXN0X25vbl9udW1lcmljX2lucHV0X3R5cGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgcG9zc2libGUgbm9uLW51bWVyaWMgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB4LCBpbmNsdWRpbmcKICAgICAgICAgIyBzdWJjbGFzc2VzIG9mIHRoZSBleHBsaWNpdGx5IGRvY3VtZW50ZWQgYWNjZXB0ZWQgdHlwZXMuCkBAIC0zNTksMTUgKzQwMCwxOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgYmFkX2ludCA9IEJhZEludCgpCi0gICAgICAgIG4gPSBpbnQoYmFkX2ludCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBuID0gaW50KGJhZF9pbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKIAogICAgICAgICBiYWRfaW50ID0gQmFkSW50MigpCi0gICAgICAgIG4gPSBpbnQoYmFkX2ludCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBuID0gaW50KGJhZF9pbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKIAogICAgICAgICBiYWRfaW50ID0gVHJ1bmNSZXR1cm5zQmFkSW50KCkKLSAgICAgICAgbiA9IGludChiYWRfaW50KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIG4gPSBpbnQoYmFkX2ludCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAxKQogCiAgICAgICAgIGdvb2RfaW50ID0gVHJ1bmNSZXR1cm5zSW50U3ViY2xhc3MoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pby5weSBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKaW5kZXggMmE5NmI3Yi4uMzJlOTA4ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lvLnB5CkBAIC0zNSw2ICszNSw3IEBACiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSwgVXNlckxpc3QKIGZyb20gaXRlcnRvb2xzIGltcG9ydCBjeWNsZSwgY291bnQKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIAogaW1wb3J0IGNvZGVjcwogaW1wb3J0IGlvICAjIEMgaW1wbGVtZW50YXRpb24gb2YgaW8KQEAgLTE2NCw3ICsxNjUsNyBAQAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSAxCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAKIGNsYXNzIENDbG9zZUZhaWx1cmVJTyhDbG9zZUZhaWx1cmVJTywgaW8uUmF3SU9CYXNlKToKICAgICBwYXNzCkBAIC01OTUsOSArNTk2LDkgQEAKICAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIGYuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgpAQCAtNjUyLDYgKzY1MywyMCBAQAogICAgICAgICAgICAgZmlsZWlvLmNsb3NlKCkKICAgICAgICAgICAgIGYyLnJlYWRsaW5lKCkKIAorICAgIGRlZiB0ZXN0X25vbmJ1ZmZlcmVkX3RleHRpbyhzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgcmVjb3JkZWQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnLCBidWZmZXJpbmc9MCkKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkZWQsIFtdKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9uZXdsaW5lKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyByZWNvcmRlZDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAndycsIG5ld2xpbmU9J2ludmFsaWQnKQorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmRlZCwgW10pCisKIAogY2xhc3MgQ0lPVGVzdChJT1Rlc3QpOgogCkBAIC03NTcsNyArNzcyLDcgQEAKICAgICAgICAgaWYgczoKICAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gT1NFcnJvcjogIiksIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CkBAIC03NzMsMjcgKzc4OCw0NSBAQAogICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIHJhdy5mbHVzaCA9IGJhZF9mbHVzaAogICAgICAgICBiID0gc2VsZi50cChyYXcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9jbG9zZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdmbHVzaCcpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdmbHVzaCcpCiAgICAgICAgIGRlZiBiYWRfY2xvc2UoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2Nsb3NlJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2Nsb3NlJykKICAgICAgICAgcmF3LmNsb3NlID0gYmFkX2Nsb3NlCiAgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKICAgICAgICAgYi5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICAgICAgYi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5hcmdzLCAoJ2Nsb3NlJywpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgT1NFcnJvcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLl9fY29udGV4dF9fLmFyZ3MsICgnZmx1c2gnLCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5jbG9zZWQpCiAKKyAgICBkZWYgdGVzdF9ub25ub3JtYWxpemVkX2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTY3NworICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGRlZiBiYWRfZmx1c2goKToKKyAgICAgICAgICAgIHJhaXNlIG5vbl9leGlzdGluZ19mbHVzaAorICAgICAgICBkZWYgYmFkX2Nsb3NlKCk6CisgICAgICAgICAgICByYWlzZSBub25fZXhpc3RpbmdfY2xvc2UKKyAgICAgICAgcmF3LmNsb3NlID0gYmFkX2Nsb3NlCisgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgYi5mbHVzaCA9IGJhZF9mbHVzaAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOiAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgICAgICBiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm9uX2V4aXN0aW5nX2Nsb3NlJywgc3RyKGVyci5leGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgTmFtZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEluKCdub25fZXhpc3RpbmdfZmx1c2gnLCBzdHIoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5jbG9zZWQpCisKICAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBiID0gc2VsZi50cChyYXcpCkBAIC04MjgsNiArODYxLDE0IEBACiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihidWZpbyksIHNpemUgKyBidWZzaXplMikKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2J1ZmZlcl9mcmVlaW5nKHNlbGYpIDoKKyAgICAgICAgYnVmc2l6ZSA9IDQwOTYKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZSkKKyAgICAgICAgc2l6ZSA9IHN5cy5nZXRzaXplb2YoYnVmaW8pIC0gYnVmc2l6ZQorICAgICAgICBidWZpby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihidWZpbyksIHNpemUpCiAKIGNsYXNzIEJ1ZmZlcmVkUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQ29tbW9uQnVmZmVyZWRUZXN0cyk6CiAgICAgcmVhZF9tb2RlID0gInJiIgpAQCAtMTAxMiw4ICsxMDUzLDggQEAKICAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgogICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8uc2VlaywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8udGVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8uc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8udGVsbCkKIAogICAgIGRlZiB0ZXN0X25vX2V4dHJhbmVvdXNfcmVhZChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjOTU1MDsgd2hlbiB0aGUgcmF3IElPIG9iamVjdCBoYXMgc2F0aXNmaWVkIHRoZSByZWFkIHJlcXVlc3QsCkBAIC0xMDY0LDE3ICsxMTA1LDE4IEBACiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKICAgICAgICAgIyBfcHlpby5CdWZmZXJlZFJlYWRlciBzZWVtcyB0byBpbXBsZW1lbnQgcmVhZGluZyBkaWZmZXJlbnQsIHNvIHRoYXQKICAgICAgICAgIyBjaGVja2luZyB0aGlzIGlzIG5vdCBzbyBlYXN5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5yZWFkLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8ucmVhZCwgMTApCiAKICAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CiAgICAgICAgICMgQyBCdWZmZXJlZFJlYWRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQuCiAgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCi0gICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQotICAgICAgICBmID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgZi5mID0gZgotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCi0gICAgICAgIGRlbCBmCi0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCisgICAgICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIGYuZiA9IGYKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgICAgIGRlbCBmCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKIAogICAgIGRlZiB0ZXN0X2FyZ3NfZXJyb3Ioc2VsZik6CkBAIC0xMzI3LDkgKzEzNjksOSBAQAogICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CiAgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKQogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnNlZWssIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnRlbGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCiAKICAgICBkZWYgdGVzdF9tYXhfYnVmZmVyX3NpemVfcmVtb3ZhbChzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgpAQCAtMTMzOCwxMSArMTM4MCwxMSBAQAogICAgIGRlZiB0ZXN0X3dyaXRlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGRlZiBiYWRfd3JpdGUoYik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICByYXcud3JpdGUgPSBiYWRfd3JpdGUKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQogICAgICAgICBiLndyaXRlKGInc3BhbScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5jbG9zZWQpCiAKIApAQCAtMTM3MywxMyArMTQxNSwxNCBAQAogICAgICAgICAjIEMgQnVmZmVyZWRXcml0ZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKICAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbnRvIGdjLmdhcmJhZ2UgaW5zdGVhZAotICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKLSAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIGYud3JpdGUoYiIxMjN4eHgiKQotICAgICAgICBmLnggPSBmCi0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKLSAgICAgICAgZGVsIGYKLSAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKKyAgICAgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgZi53cml0ZShiIjEyM3h4eCIpCisgICAgICAgICAgICBmLnggPSBmCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgICAgICBkZWwgZgorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiIxMjN4eHgiKQpAQCAtMTQyNiwxNCArMTQ2OSwxNCBAQAogICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIE5vdFJlYWRhYmxlKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYudHAsIE5vdFJlYWRhYmxlKCksIHNlbGYuTW9ja1Jhd0lPKCkpCiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX25vdF93cml0ZWFibGUoc2VsZik6CiAgICAgICAgIGNsYXNzIE5vdFdyaXRlYWJsZShNb2NrUmF3SU8pOgogICAgICAgICAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIHNlbGYuTW9ja1Jhd0lPKCksIE5vdFdyaXRlYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLnRwLCBzZWxmLk1vY2tSYXdJTygpLCBOb3RXcml0ZWFibGUoKSkKIAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQpAQCAtMTk2Miw3ICsyMDA1LDcgQEAKICAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCiAgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgImlzIG5vdCBhIHRleHQgZW5jb2RpbmciKToKLSAgICAgICAgICAgIHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iaGV4X2NvZGVjIikKKyAgICAgICAgICAgIHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iaGV4IikKIAogICAgIGRlZiB0ZXN0X2RldGFjaChzZWxmKToKICAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCkBAIC0yMjA5LDcgKzIyNTIsNyBAQAogICAgICAgICBpZiBzOgogICAgICAgICAgICAgIyBUaGUgZGVzdHJ1Y3RvciAqbWF5KiBoYXZlIHByaW50ZWQgYW4gdW5yYWlzYWJsZSBlcnJvciwgY2hlY2sgaXQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3BsaXRsaW5lcygpKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBJT0Vycm9yOiAiKSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBPU0Vycm9yOiAiKSwgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCIgaWdub3JlZCIpLCBzKQogCiAgICAgIyBTeXN0ZW1hdGljIHRlc3RzIG9mIHRoZSB0ZXh0IEkvTyBBUEkKQEAgLTIyODEsNyArMjMyNCw3IEBACiAgICAgICAgIGYuc2VlaygwKQogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCAiXHhmZlxuIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYudGVsbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYudGVsbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcDIpCiAgICAgICAgIGYuY2xvc2UoKQogCkBAIC0yMzg1LDcgKzI0MjgsNyBAQAogICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoVW5SZWFkYWJsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdHh0LnJlYWQpCiAKICAgICBkZWYgdGVzdF9yZWFkX29uZV9ieV9vbmUoc2VsZik6CiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBQVxyXG5CQiIpKQpAQCAtMjU2MCwxMSArMjYwMyw0NCBAQAogICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICB0eHQuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHR4dC5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUodHh0LmNsb3NlZCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICBidWZmZXIgPSBzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSkKKyAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZmx1c2gnKQorICAgICAgICBkZWYgYmFkX2Nsb3NlKCk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjbG9zZScpCisgICAgICAgIGJ1ZmZlci5jbG9zZSA9IGJhZF9jbG9zZQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQuZmx1c2ggPSBiYWRfZmx1c2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgICAgIHR4dC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5hcmdzLCAoJ2Nsb3NlJywpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgT1NFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLl9fY29udGV4dF9fLmFyZ3MsICgnZmx1c2gnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHh0LmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X25vbm5vcm1hbGl6ZWRfY2xvc2VfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxNjc3CisgICAgICAgIGJ1ZmZlciA9IHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBub25fZXhpc3RpbmdfZmx1c2gKKyAgICAgICAgZGVmIGJhZF9jbG9zZSgpOgorICAgICAgICAgICAgcmFpc2Ugbm9uX2V4aXN0aW5nX2Nsb3NlCisgICAgICAgIGJ1ZmZlci5jbG9zZSA9IGJhZF9jbG9zZQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQuZmx1c2ggPSBiYWRfZmx1c2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICAgICAgdHh0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm9uX2V4aXN0aW5nX2Nsb3NlJywgc3RyKGVyci5leGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgTmFtZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEluKCdub25fZXhpc3RpbmdfZmx1c2gnLCBzdHIoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHh0LmNsb3NlZCkKKwogICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQogICAgICAgICB0eHQuY2xvc2UoKQpAQCAtMjYwNCw2ICsyNjgwLDM4IEBACiAgICAgICAgIHR4dC53cml0ZSgnNScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLmpvaW4ocmF3Ll93cml0ZV9zdGFjayksIGInMTIzXG40NScpCiAKKyAgICBkZWYgdGVzdF9idWZpb193cml0ZV90aHJvdWdoKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTM5Njogd3JpdGVfdGhyb3VnaD1UcnVlIGRvZXNuJ3QgZm9yY2UgYSBmbHVzaCgpCisgICAgICAgICMgb24gdGhlIHVuZGVybHlpbmcgYmluYXJ5IGJ1ZmZlcmVkIG9iamVjdC4KKyAgICAgICAgZmx1c2hfY2FsbGVkLCB3cml0ZV9jYWxsZWQgPSBbXSwgW10KKyAgICAgICAgY2xhc3MgQnVmZmVyZWRXcml0ZXIoc2VsZi5CdWZmZXJlZFdyaXRlcik6CisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBmbHVzaF9jYWxsZWQuYXBwZW5kKFRydWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZmx1c2goKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgd3JpdGVfY2FsbGVkLmFwcGVuZChUcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLndyaXRlKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICByYXdpbyA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIGRhdGEgPSBiImEiCisgICAgICAgIGJ1ZmlvID0gQnVmZmVyZWRXcml0ZXIocmF3aW8sIGxlbihkYXRhKSoyKQorICAgICAgICB0ZXh0aW8gPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmaW8sIGVuY29kaW5nPSdhc2NpaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV90aHJvdWdoPVRydWUpCisgICAgICAgICMgd3JpdGUgdG8gdGhlIGJ1ZmZlcmVkIGlvIGJ1dCBkb24ndCBvdmVyZmxvdyB0aGUgYnVmZmVyCisgICAgICAgIHRleHQgPSBkYXRhLmRlY29kZSgnYXNjaWknKQorICAgICAgICB0ZXh0aW8ud3JpdGUodGV4dCkKKworICAgICAgICAjIGJ1ZmZlci5mbHVzaCBpcyBub3QgY2FsbGVkIHdpdGggd3JpdGVfdGhyb3VnaD1UcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmx1c2hfY2FsbGVkKQorICAgICAgICAjIGJ1ZmZlci53cml0ZSAqaXMqIGNhbGxlZCB3aXRoIHdyaXRlX3Rocm91Z2g9VHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLmdldHZhbHVlKCksIGIiIikgIyBubyBmbHVzaAorCisgICAgICAgIHdyaXRlX2NhbGxlZCA9IFtdICMgcmVzZXQKKyAgICAgICAgdGV4dGlvLndyaXRlKHRleHQgKiAxMCkgIyB0b3RhbCBjb250ZW50IGlzIGxhcmdlciB0aGFuIGJ1ZmlvIGJ1ZmZlcgorICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLmdldHZhbHVlKCksIGRhdGEgKiAxMSkgIyBhbGwgZmx1c2hlZAorCiAgICAgZGVmIHRlc3RfcmVhZF9ub25ieXRlcyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTcxMDYKICAgICAgICAgIyBDcmFzaCB3aGVuIHVuZGVybHlpbmcgcmVhZCgpIHJldHVybnMgbm9uLWJ5dGVzCkBAIC0yNjE4LDExICsyNzI2LDExIEBACiAgICAgICAgICMgSXNzdWUgIzE3MTA2CiAgICAgICAgICMgQnlwYXNzIHRoZSBlYXJseSBlbmNvZGluZyBjaGVjayBhZGRlZCBpbiBpc3N1ZSAyMDQwNAogICAgICAgICBkZWYgX21ha2VfaWxsZWdhbF93cmFwcGVyKCk6Ci0gICAgICAgICAgICBxdW9wcmkgPSBjb2RlY3MubG9va3VwKCJxdW9wcmlfY29kZWMiKQorICAgICAgICAgICAgcXVvcHJpID0gY29kZWNzLmxvb2t1cCgicXVvcHJpIikKICAgICAgICAgICAgIHF1b3ByaS5faXNfdGV4dF9lbmNvZGluZyA9IFRydWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiJ2FhYWFhYScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT0nXG4nLCBlbmNvZGluZz0icXVvcHJpX2NvZGVjIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9J1xuJywgZW5jb2Rpbmc9InF1b3ByaSIpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHF1b3ByaS5faXNfdGV4dF9lbmNvZGluZyA9IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gdApAQCAtMjYzNCw4ICsyNzQyLDQ2IEBACiAgICAgICAgIHQgPSBfbWFrZV9pbGxlZ2FsX3dyYXBwZXIoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQucmVhZCkKIAorICAgIGRlZiBfY2hlY2tfY3JlYXRlX2F0X3NodXRkb3duKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgIyBJc3N1ZSAjMjAwMzc6IGNyZWF0aW5nIGEgVGV4dElPV3JhcHBlciBhdCBzaHV0ZG93bgorICAgICAgICAjIHNob3VsZG4ndCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIuCisgICAgICAgIGlvbW9kID0gc2VsZi5pby5fX25hbWVfXworICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBjb2RlY3MKKyAgICAgICAgICAgIGltcG9ydCB7aW9tb2R9IGFzIGlvCisKKyAgICAgICAgICAgICMgQXZvaWQgbG9va2luZyB1cCBjb2RlY3MgYXQgc2h1dGRvd24KKyAgICAgICAgICAgIGNvZGVjcy5sb29rdXAoJ3V0Zi04JykKKworICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVmID0gaW8uQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIGlvLlRleHRJT1dyYXBwZXIoc2VsZi5idWYsICoqe2t3YXJnc30pCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJvayIpCisgICAgICAgICAgICBjID0gQygpCisgICAgICAgICAgICAiIiIuZm9ybWF0KGlvbW9kPWlvbW9kLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICByZXR1cm4gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2F0X3NodXRkb3duX3dpdGhvdXRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuX2NoZWNrX2NyZWF0ZV9hdF9zaHV0ZG93bigpCisgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICMgQ2FuIGVycm9yIG91dCB3aXRoIGEgUnVudGltZUVycm9yIGlmIHRoZSBtb2R1bGUgc3RhdGUKKyAgICAgICAgICAgICMgaXNuJ3QgZm91bmQuCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuc2h1dGRvd25fZXJyb3IsIGVyci5kZWNvZGUoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9rIiwgb3V0LmRlY29kZSgpLnN0cmlwKCkpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfYXRfc2h1dGRvd25fd2l0aF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi5fY2hlY2tfY3JlYXRlX2F0X3NodXRkb3duKGVuY29kaW5nPSd1dGYtOCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9J3N0cmljdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvayIsIG91dC5kZWNvZGUoKS5zdHJpcCgpKQorCiAKIGNsYXNzIENUZXh0SU9XcmFwcGVyVGVzdChUZXh0SU9XcmFwcGVyVGVzdCk6CisgICAgaW8gPSBpbworICAgIHNodXRkb3duX2Vycm9yID0gIlJ1bnRpbWVFcnJvcjogY291bGQgbm90IGZpbmQgaW8gbW9kdWxlIHN0YXRlIgogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CiAgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oYiJceGMzXHhhOVxuXG4iKQpAQCAtMjY1MCwxNCArMjc5NiwxNSBAQAogICAgICAgICAjIEMgVGV4dElPV3JhcHBlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcwogICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCiAgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGluIGdjLmdhcmJhZ2UgaW5zdGVhZC4KLSAgICAgICAgcmF3aW8gPSBpby5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHJhd2lvKQotICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCi0gICAgICAgIHQud3JpdGUoIjQ1NmRlZiIpCi0gICAgICAgIHQueCA9IHQKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0KQotICAgICAgICBkZWwgdAotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJhd2lvID0gaW8uRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIocmF3aW8pCisgICAgICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgICAgICB0LndyaXRlKCI0NTZkZWYiKQorICAgICAgICAgICAgdC54ID0gdAorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0KQorICAgICAgICAgICAgZGVsIHQKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiNDU2ZGVmIikKQEAgLTI2NzgsNyArMjgyNSw5IEBACiAKIAogY2xhc3MgUHlUZXh0SU9XcmFwcGVyVGVzdChUZXh0SU9XcmFwcGVyVGVzdCk6Ci0gICAgcGFzcworICAgIGlvID0gcHlpbworICAgICNzaHV0ZG93bl9lcnJvciA9ICJMb29rdXBFcnJvcjogdW5rbm93biBlbmNvZGluZzogYXNjaWkiCisgICAgc2h1dGRvd25fZXJyb3IgPSAiVHlwZUVycm9yOiAnTm9uZVR5cGUnIG9iamVjdCBpcyBub3QgaXRlcmFibGUiCiAKIAogY2xhc3MgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjgxNyw3ICsyOTY2LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm1vZGUsICJ3YiIpCiAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJVIikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiVSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLm5hbWUsICAgICBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5yYXcubmFtZSwgc3VwcG9ydC5URVNURk4pCkBAIC0yOTQ3LDcgKzMwOTcsNyBAQAogICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwX2ZkcykKQEAgLTMwNjksNyArMzIxOSw2IEBACiAKIGNsYXNzIENNaXNjSU9UZXN0KE1pc2NJT1Rlc3QpOgogICAgIGlvID0gaW8KLSAgICBzaHV0ZG93bl9lcnJvciA9ICJSdW50aW1lRXJyb3I6IGNvdWxkIG5vdCBmaW5kIGlvIG1vZHVsZSBzdGF0ZSIKIAogICAgIGRlZiB0ZXN0X3JlYWRpbnRvX2J1ZmZlcl9vdmVyZmxvdyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTgwMjUKQEAgLTMwODIsNyArMzIzMSw2IEBACiAKIGNsYXNzIFB5TWlzY0lPVGVzdChNaXNjSU9UZXN0KToKICAgICBpbyA9IHB5aW8KLSAgICBzaHV0ZG93bl9lcnJvciA9ICJMb29rdXBFcnJvcjogdW5rbm93biBlbmNvZGluZzogYXNjaWkiCiAKIAogQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdQT1NJWCBzaWduYWxzIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKQEAgLTMxMTUsMTUgKzMyNjMsMTggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCiAgICAgICAgICAgICAjIEZpbGwgdGhlIHBpcGUgZW5vdWdoIHRoYXQgdGhlIHdyaXRlIHdpbGwgYmUgYmxvY2tpbmcuCiAgICAgICAgICAgICAjIEl0IHdpbGwgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIHRpbWVyIGFybWVkIGFib3ZlLiAgU2luY2UgdGhlCiAgICAgICAgICAgICAjIG90aGVyIHRocmVhZCBoYXMgcmVhZCBvbmUgYnl0ZSwgdGhlIGxvdy1sZXZlbCB3cml0ZSB3aWxsCiAgICAgICAgICAgICAjIHJldHVybiB3aXRoIGEgc3VjY2Vzc2Z1bCAocGFydGlhbCkgcmVzdWx0IHJhdGhlciB0aGFuIGFuIEVJTlRSLgogICAgICAgICAgICAgIyBUaGUgYnVmZmVyZWQgSU8gbGF5ZXIgbXVzdCBjaGVjayBmb3IgcGVuZGluZyBzaWduYWwKICAgICAgICAgICAgICMgaGFuZGxlcnMsIHdoaWNoIGluIHRoaXMgY2FzZSB3aWxsIGludm9rZSBhbGFybV9pbnRlcnJ1cHQoKS4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlLCBpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZSwgaXRlbSAqIChzdXBwb3J0LlBJUEVfTUFYX1NJWkUgLy8gbGVuKGl0ZW0pICsgMSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQogICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgICMgV2UgZ290IG9uZSBieXRlLCBnZXQgYW5vdGhlciBvbmUgYW5kIGNoZWNrIHRoYXQgaXQgaXNuJ3QgYQogICAgICAgICAgICAgIyByZXBlYXQgb2YgdGhlIGZpcnN0IG9uZS4KQEAgLTMxMzcsNyArMzI4OCw3IEBACiAgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGJsb2NrIGFnYWluLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC0zMTQ3LDYgKzMyOTgsOCBAQAogICAgIGRlZiB0ZXN0X2ludGVycnVwdGVkX3dyaXRlX2J1ZmZlcmVkKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3dyaXRlKGIieHkiLCBiInh5IiwgbW9kZT0id2IiKQogCisgICAgIyBJc3N1ZSAjMjIzMzE6IFRoZSB0ZXN0IGhhbmdzIG9uIEZyZWVCU0QgNy4yCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZnJlZWJzZF92ZXJzaW9uKDgpCiAgICAgZGVmIHRlc3RfaW50ZXJydXB0ZWRfd3JpdGVfdGV4dChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZSgieHkiLCBiInh5IiwgbW9kZT0idyIsIGVuY29kaW5nPSJhc2NpaSIpCiAKQEAgLTMyNjUsNyArMzQxOCw3IEBACiAgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGNvdWxkIGJsb2NrIChpbiBjYXNlIG9mIGZhaWx1cmUpLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5IGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQppbmRleCA1MzFjOWFmLi5lZmU5ZjUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKQEAgLTgsNyArOCw3IEBACiAKIHRyeToKICAgICB0dHkgPSBvcGVuKCIvZGV2L3R0eSIsICJyYiIpCi1leGNlcHQgSU9FcnJvcjoKK2V4Y2VwdCBPU0Vycm9yOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gb3BlbiAvZGV2L3R0eSIpCiBlbHNlOgogICAgICMgU2tpcCBpZiBhbm90aGVyIHByb2Nlc3MgaXMgaW4gZm9yZWdyb3VuZApAQCAtODYsOCArODYsNiBAQAogICAgICAgICAgICAgb3MuY2xvc2UobWZkKQogICAgICAgICAgICAgb3MuY2xvc2Uoc2ZkKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KElvY3RsVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKaW5kZXggNWJmY2Y0MS4uZjI5NDdiOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKQEAgLTEzNTgsNiArMTM1OCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKAogICAgICAgICAgICAgICAgICcxMjcuNDIuMC4wLzE2JykuaXNfbG9vcGJhY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMjguMC4wLjAnKS5pc19sb29wYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAwLjY0LjAuMC8xMCcpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykuaXNfZ2xvYmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTkyLjAuMi4xMjgvMjUnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzE5Mi4wLjMuMC8yNCcpLmlzX2dsb2JhbCkKIAogICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzAuMC4wLjAnKS5pc191bnNwZWNpZmllZCkKQEAgLTE0MjMsNiArMTQzMSwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnOjoxJykuaXNfdW5zcGVjaWZpZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCc6Oi8xMjcnKS5pc191bnNwZWNpZmllZCkKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzIwMDE6OjEvMTI4JykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcyMDA6OjEvMTI4JykuaXNfZ2xvYmFsKQogICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJ2ZmZmY6OicpLmlzX211bHRpY2FzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygyKioxMjggLSAxKS5pc19tdWx0aWNhc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKaW5kZXggOTEwMWY2Yy4uMTUyZjVmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQpAQCAtNDUsMzEgKzQ1LDIxIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCByZXBlYXQKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi1mcm9tIGJ1aWx0aW5zIGltcG9ydCBsZW4gYXMgX2xlbgorZnJvbSBvcGVyYXRvciBpbXBvcnQgbGVuZ3RoX2hpbnQKIAogbiA9IDEwCiAKLWRlZiBsZW4ob2JqKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBfbGVuKG9iaikKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IHRoaXMgaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKLSAgICAgICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcwotICAgICAgICAgICAgcmV0dXJuIG9iai5fX2xlbmd0aF9oaW50X18oKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKIAogY2xhc3MgVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnM6CiAKICAgICBkZWYgdGVzdF9pbnZhcmlhbnQoc2VsZik6CiAgICAgICAgIGl0ID0gc2VsZi5pdAogICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZSgxLCBuKzEpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBpKQogICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKIGNsYXNzIFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyk6CiAKQEAgLTc4LDEyICs2OCwxMiBAQAogICAgICAgICAjIGxlbmd0aCBpbW11dGFiaWxpdHkgIGR1cmluZyBpdGVyYXRpb24KIAogICAgICAgICBpdCA9IHNlbGYuaXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbikKICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuLTEpCiAgICAgICAgIHNlbGYubXV0YXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBuZXh0LCBpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKIAogIyMgLS0tLS0tLSBDb25jcmV0ZSBUeXBlIFRlc3RzIC0tLS0tLS0KIApAQCAtOTIsMTAgKzgyLDYgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuaXQgPSByZXBlYXQoTm9uZSwgbikKIAotICAgIGRlZiB0ZXN0X25vX2xlbl9mb3JfaW5maW5pdGVfcmVwZWF0KHNlbGYpOgotICAgICAgICAjIFRoZSByZXBlYXQoKSBvYmplY3QgY2FuIGFsc28gYmUgaW5maW5pdGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKLQogY2xhc3MgVGVzdFhyYW5nZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTY3LDE0ICsxNTMsMTUgQEAKICAgICAgICAgaXQgPSBpdGVyKGQpCiAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpCiAgICAgICAgIGQuYXBwZW5kKG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKSAgIyBncm93IHdpdGggYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMSkgICMgZ3JvdyB3aXRoIGFwcGVuZAogICAgICAgICBkWzE6XSA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQogICAgICAgICBkLmV4dGVuZChyYW5nZSgyMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCisKIAogY2xhc3MgVGVzdExpc3RSZXZlcnNlZChUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xODYsMzIgKzE3Myw0MSBAQAogICAgICAgICBpdCA9IHJldmVyc2VkKGQpCiAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpCiAgICAgICAgIGQuYXBwZW5kKG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKSAgIyBpZ25vcmUgYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMikgICMgaWdub3JlIGFwcGVuZAogICAgICAgICBkWzE6XSA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKSAgIyBjb25maXJtIGludmFyaWFudAogICAgICAgICBkLmV4dGVuZChyYW5nZSgyMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKICMjIC0tIENoZWNrIHRvIG1ha2Ugc3VyZSBleGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCBieSBfX2xlbmd0aF9oaW50X18oKQogCiAKIGNsYXNzIEJhZExlbihvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQogCisKIGNsYXNzIEJhZExlbmd0aEhpbnQob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKwogICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQogCisKIGNsYXNzIE5vbmVMZW5ndGhIaW50KG9iamVjdCk6Ci0gICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisKICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKwogCiBjbGFzcyBUZXN0TGVuZ3RoSGludEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CmluZGV4IDUxNGE2YjcuLjVmMzNkMzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CkBAIC0xLDcgKzEsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCAqCi1mcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CitpbXBvcnQgd2Vha3JlZgogZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KIGltcG9ydCBzeXMKQEAgLTEwLDYgKzEwLDggQEAKIGltcG9ydCBjb3B5CiBpbXBvcnQgcGlja2xlCiBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CiBtYXhzaXplID0gc3VwcG9ydC5NQVhfUHlfc3NpemVfdAogbWluc2l6ZSA9IC1tYXhzaXplLTEKIApAQCAtNDA5LDcgKzQxMSw3IEBACiAKICAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocGVybXV0YXRpb25zKHZhbHVlcywgcikpICAgICAgICAgICAgICAgICMgdGVzdCBwaWNrbGluZwogCi0gICAgQHN1cHBvcnQuaW1wbF9kZXRhaWwoInR1cGxlIHJlc3VzZSBpcyBDUHl0aG9uIHNwZWNpZmljIikKKyAgICBAc3VwcG9ydC5pbXBsX2RldGFpbCgidHVwbGUgcmV1c2UgaXMgc3BlY2lmaWMgdG8gQ1B5dGhvbiIpCiAgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zX3R1cGxlX3JldXNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBwZXJtdXRhdGlvbnMoJ2FiY2RlJywgMykpKSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGVuKHNldChtYXAoaWQsIGxpc3QocGVybXV0YXRpb25zKCdhYmNkZScsIDMpKSkpKSwgMSkKQEAgLTk2NSw2ICs5NjcsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIsIGNvcHkuZGVlcGNvcHkoYykpLCBsaXN0KCdhJyAqIDIpKQogICAgICAgICBzZWxmLnBpY2tsZXRlc3QocmVwZWF0KG9iamVjdD0nYScsIHRpbWVzPTEwKSkKIAorICAgIGRlZiB0ZXN0X3JlcGVhdF93aXRoX25lZ2F0aXZlX3RpbWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocmVwZWF0KCdhJywgLTEpKSwgInJlcGVhdCgnYScsIDApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlcGVhdCgnYScsIC0yKSksICJyZXBlYXQoJ2EnLCAwKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZXBlYXQoJ2EnLCB0aW1lcz0tMSkpLCAicmVwZWF0KCdhJywgMCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocmVwZWF0KCdhJywgdGltZXM9LTIpKSwgInJlcGVhdCgnYScsIDApIikKKwogICAgIGRlZiB0ZXN0X21hcChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChvcGVyYXRvci5wb3csIHJhbmdlKDMpLCByYW5nZSgxLDcpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWzAqKjEsIDEqKjIsIDIqKjNdKQpAQCAtMTA4NSw2ICsxMDkzLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocmFuZ2UoKmFyZ3MpKSkKICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChpc2xpY2UocmFuZ2UoMTAwKSwgKmFyZ3MpKQogCisgICAgICAgICMgSXNzdWUgIzIxMzIxOiBjaGVjayBzb3VyY2UgaXRlcmF0b3IgaXMgbm90IHJlZmVyZW5jZWQKKyAgICAgICAgIyBmcm9tIGlzbGljZSgpIGFmdGVyIHRoZSBsYXR0ZXIgaGFzIGJlZW4gZXhoYXVzdGVkCisgICAgICAgIGl0ID0gKHggZm9yIHggaW4gKDEsIDIpKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGl0KQorICAgICAgICBpdCA9IGlzbGljZShpdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUod3IoKSkKKyAgICAgICAgbGlzdChpdCkgIyBleGhhdXN0IHRoZSBpdGVyYXRvcgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cigpKQorCiAgICAgZGVmIHRlc3RfdGFrZXdoaWxlKHNlbGYpOgogICAgICAgICBkYXRhID0gWzEsIDMsIDUsIDIwLCAyLCA0LCA2LCA4XQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodGFrZXdoaWxlKHVuZGVydGVuLCBkYXRhKSksIFsxLCAzLCA1XSkKQEAgLTEyMDEsNyArMTIxOSw3IEBACiAKICAgICAgICAgIyB0ZXN0IHRoYXQgdGVlIG9iamVjdHMgYXJlIHdlYWsgcmVmZXJlbmNhYmxlCiAgICAgICAgIGEsIGIgPSB0ZWUocmFuZ2UoMTApKQotICAgICAgICBwID0gcHJveHkoYSkKKyAgICAgICAgcCA9IHdlYWtyZWYucHJveHkoYSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHAsICdfX2NsYXNzX18nKSwgdHlwZShiKSkKICAgICAgICAgZGVsIGEKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVmZXJlbmNlRXJyb3IsIGdldGF0dHIsIHAsICdfX2NsYXNzX18nKQpAQCAtMTcyOSw5ICsxNzQ3LDE1IEBACiBjbGFzcyBMZW5ndGhUcmFuc3BhcmVuY3kodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgotICAgICAgICBmcm9tIHRlc3QudGVzdF9pdGVybGVuIGltcG9ydCBsZW4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVwZWF0KE5vbmUsIDUwKSksIDUwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgcmVwZWF0KE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCA1MCkpLCA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgMCkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lKSwgMTIpLCAxMikKKworICAgIGRlZiB0ZXN0X3JlcGVhdF93aXRoX25lZ2F0aXZlX3RpbWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCAtMSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCAtMikpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCB0aW1lcz0tMSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCB0aW1lcz0tMikpLCAwKQogCiBjbGFzcyBSZWdyZXNzaW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xODA4LDYgKzE4MzIsNDQgQEAKICAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCB0eXBlIGVycm9ycyBiZWNhdXNlIG9mIHdyb25nIGFyZ3VtZW50IGNvdW50CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiZG9lcyBub3QgdGFrZSBrZXl3b3JkIGFyZ3VtZW50cyIsIGVyci5hcmdzWzBdKQogCitAc3VwcG9ydC5jcHl0aG9uX29ubHkKK2NsYXNzIFNpemVvZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zc2l6ZV90ID0gc3RydWN0LmNhbGNzaXplKCduJykKKworICAgIGNoZWNrX3NpemVvZiA9IHN1cHBvcnQuY2hlY2tfc2l6ZW9mCisKKyAgICBkZWYgdGVzdF9wcm9kdWN0X3NpemVvZihzZWxmKToKKyAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCczUGknKQorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCisgICAgICAgIGNoZWNrKHByb2R1Y3QoJ2FiJywgJzEyJyksIGJhc2VzaXplICsgMiAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2socHJvZHVjdCgqKCgnYWJjJywpICogMTApKSwgYmFzZXNpemUgKyAxMCAqIHNlbGYuc3NpemVfdCkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc19zaXplb2Yoc2VsZik6CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnM1BuaScpCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgY2hlY2soY29tYmluYXRpb25zKCdhYmNkJywgMyksIGJhc2VzaXplICsgMyAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2soY29tYmluYXRpb25zKHJhbmdlKDEwKSwgNCksIGJhc2VzaXplICsgNCAqIHNlbGYuc3NpemVfdCkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50X3NpemVvZihzZWxmKToKKyAgICAgICAgY3dyID0gY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQKKyAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCczUG5pJykKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICBjaGVjayhjd3IoJ2FiY2QnLCAzKSwgYmFzZXNpemUgKyAzICogc2VsZi5zc2l6ZV90KQorICAgICAgICBjaGVjayhjd3IocmFuZ2UoMTApLCA0KSwgYmFzZXNpemUgKyA0ICogc2VsZi5zc2l6ZV90KQorCisgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zX3NpemVvZihzZWxmKToKKyAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCc0UG5pJykKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICBjaGVjayhwZXJtdXRhdGlvbnMoJ2FiY2QnKSwKKyAgICAgICAgICAgICAgYmFzZXNpemUgKyA0ICogc2VsZi5zc2l6ZV90ICsgNCAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2socGVybXV0YXRpb25zKCdhYmNkJywgMyksCisgICAgICAgICAgICAgIGJhc2VzaXplICsgNCAqIHNlbGYuc3NpemVfdCArIDMgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKHBlcm11dGF0aW9ucygnYWJjZGUnLCAzKSwKKyAgICAgICAgICAgICAgYmFzZXNpemUgKyA1ICogc2VsZi5zc2l6ZV90ICsgMyAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2socGVybXV0YXRpb25zKHJhbmdlKDEwKSwgNCksCisgICAgICAgICAgICAgIGJhc2VzaXplICsgMTAgKiBzZWxmLnNzaXplX3QgKyA0ICogc2VsZi5zc2l6ZV90KQorCiAKIGxpYnJlZnRlc3QgPSAiIiIgRG9jdGVzdCBmb3IgZXhhbXBsZXMgaW4gdGhlIGxpYnJhcnkgcmVmZXJlbmNlOiBsaWJpdGVydG9vbHMudGV4CiAKQEAgLTE5NTksNiArMjAyMSwxOSBAQAogLi4uICAgICAjIHVuaXF1ZV9qdXN0c2VlbignQUJCQ2NBRCcsIHN0ci5sb3dlcikgLS0+IEEgQiBDIEEgRAogLi4uICAgICByZXR1cm4gbWFwKG5leHQsIG1hcChpdGVtZ2V0dGVyKDEpLCBncm91cGJ5KGl0ZXJhYmxlLCBrZXkpKSkKIAorPj4+IGRlZiBmaXJzdF90cnVlKGl0ZXJhYmxlLCBkZWZhdWx0PUZhbHNlLCBwcmVkPU5vbmUpOgorLi4uICAgICAnJydSZXR1cm5zIHRoZSBmaXJzdCB0cnVlIHZhbHVlIGluIHRoZSBpdGVyYWJsZS4KKy4uLgorLi4uICAgICBJZiBubyB0cnVlIHZhbHVlIGlzIGZvdW5kLCByZXR1cm5zICpkZWZhdWx0KgorLi4uCisuLi4gICAgIElmICpwcmVkKiBpcyBub3QgTm9uZSwgcmV0dXJucyB0aGUgZmlyc3QgaXRlbQorLi4uICAgICBmb3Igd2hpY2ggcHJlZChpdGVtKSBpcyB0cnVlLgorLi4uCisuLi4gICAgICcnJworLi4uICAgICAjIGZpcnN0X3RydWUoW2EsYixjXSwgeCkgLS0+IGEgb3IgYiBvciBjIG9yIHgKKy4uLiAgICAgIyBmaXJzdF90cnVlKFthLGJdLCB4LCBmKSAtLT4gYSBpZiBmKGEpIGVsc2UgYiBpZiBmKGIpIGVsc2UgeAorLi4uICAgICByZXR1cm4gbmV4dChmaWx0ZXIocHJlZCwgaXRlcmFibGUpLCBkZWZhdWx0KQorCiBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBleGFtcGxlcyBidXQgaXQgdGVzdHMgdG8gbWFrZSBzdXJlIHRoZSBkZWZpbml0aW9ucwogcGVyZm9ybSBhcyBwdXJwb3J0ZWQuCiAKQEAgLTIwMzYsNiArMjExMSw5IEBACiA+Pj4gbGlzdCh1bmlxdWVfanVzdHNlZW4oJ0FCQkNjQUQnLCBzdHIubG93ZXIpKQogWydBJywgJ0InLCAnQycsICdBJywgJ0QnXQogCis+Pj4gZmlyc3RfdHJ1ZSgnQUJDMERFRjEnLCAnOScsIHN0ci5pc2RpZ2l0KQorJzAnCisKICIiIgogCiBfX3Rlc3RfXyA9IHsnbGlicmVmdGVzdCcgOiBsaWJyZWZ0ZXN0fQpAQCAtMjA0Myw3ICsyMTIxLDggQEAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X2NsYXNzZXMgPSAoVGVzdEJhc2ljT3BzLCBUZXN0VmFyaW91c0l0ZXJhdG9yQXJncywgVGVzdEdDLAogICAgICAgICAgICAgICAgICAgICBSZWdyZXNzaW9uVGVzdHMsIExlbmd0aFRyYW5zcGFyZW5jeSwKLSAgICAgICAgICAgICAgICAgICAgU3ViY2xhc3NXaXRoS3dhcmdzVGVzdCwgVGVzdEV4YW1wbGVzKQorICAgICAgICAgICAgICAgICAgICBTdWJjbGFzc1dpdGhLd2FyZ3NUZXN0LCBUZXN0RXhhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgIFNpemVvZlRlc3QpCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIAogICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL19faW5pdF9fLnB5CmluZGV4IGY5OTRmOWIuLjJjZjEwMzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vX19pbml0X18ucHkKQEAgLTQyLDIzICs0MiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdfanNvbicpCiAKIAotaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLQotZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgotICAgIHN1aXRlID0gYWRkaXRpb25hbF90ZXN0cygpCi0gICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgZm9yIGZuIGluIG9zLmxpc3RkaXIoaGVyZSk6Ci0gICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgoInRlc3QiKSBhbmQgZm4uZW5kc3dpdGgoIi5weSIpOgotICAgICAgICAgICAgbW9kbmFtZSA9ICJ0ZXN0LnRlc3RfanNvbi4iICsgZm5bOi0zXQotICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQotICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KLSAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkpCi0gICAgcmV0dXJuIHN1aXRlCi0KLWRlZiBhZGRpdGlvbmFsX3Rlc3RzKCk6CitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIF8sIHBhdHRlcm4pOgogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKICAgICBmb3IgbW9kIGluIChqc29uLCBqc29uLmVuY29kZXIsIGpzb24uZGVjb2Rlcik6CiAgICAgICAgIHN1aXRlLmFkZFRlc3QoZG9jdGVzdC5Eb2NUZXN0U3VpdGUobW9kKSkKICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RQeVRlc3QoJ3Rlc3RfcHlqc29uJykpCiAgICAgc3VpdGUuYWRkVGVzdChUZXN0Q1Rlc3QoJ3Rlc3RfY2pzb24nKSkKLSAgICByZXR1cm4gc3VpdGUKKworICAgIHBrZ19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcmV0dXJuIHN1cHBvcnQubG9hZF9wYWNrYWdlX3Rlc3RzKHBrZ19kaXIsIGxvYWRlciwgc3VpdGUsIHBhdHRlcm4pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKaW5kZXggMTcyNDVlYi4uNTkxYjJlMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQpAQCAtMSw1ICsxLDUgQEAKIGltcG9ydCBkZWNpbWFsCi1mcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIEJ5dGVzSU8KIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CiAKQEAgLTcwLDYgKzcwLDI3IEBACiAgICAgICAgIG1zZyA9ICdlc2NhcGUnCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9pbnB1dF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSAndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyJworICAgICAgICBmb3IgdmFsdWUgaW4gWzEsIDMuMTQsIGInYnl0ZXMnLCBiJ1x4ZmZceDAwJywgW10sIHt9LCBOb25lXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2csIHNlbGYubG9hZHMsIHZhbHVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoQnl0ZXNJTyhiJ1sxLDIsM10nKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ193aXRoX3V0ZjhfYm9tKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg5NTgKKyAgICAgICAgYm9tX2pzb24gPSAiWzEsMiwzXSIuZW5jb2RlKCd1dGYtOC1zaWcnKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZHMoYm9tX2pzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JPTScsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoU3RyaW5nSU8oYm9tX2pzb24pKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT00nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgQk9NIGlzIG5vdCBkZXRlY3RlZCBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nCisgICAgICAgIGJvbV9pbl9zdHIgPSAnInt9IicuZm9ybWF0KCcnLmVuY29kZSgndXRmLTgtc2lnJykuZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYm9tX2luX3N0ciksICdcdWZlZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9pbl9zdHIpKSwgJ1x1ZmVmZicpCisKICAgICBkZWYgdGVzdF9uZWdhdGl2ZV9pbmRleChzZWxmKToKICAgICAgICAgZCA9IHNlbGYuanNvbi5KU09ORGVjb2RlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGQucmF3X2RlY29kZSwgJ2EnKjQyLCAtNTAwMDApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY0MTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weQpAQCAtMCwwICsxLDEyMCBAQAorZnJvbSBlbnVtIGltcG9ydCBFbnVtLCBJbnRFbnVtCitmcm9tIG1hdGggaW1wb3J0IGlzbmFuCitmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CisKK1NNQUxMID0gMQorQklHID0gMTw8MzIKK0hVR0UgPSAxPDw2NAorUkVBTExZX0hVR0UgPSAxPDw5NgorCitjbGFzcyBCaWdOdW0oSW50RW51bSk6CisgICAgc21hbGwgPSBTTUFMTAorICAgIGJpZyA9IEJJRworICAgIGh1Z2UgPSBIVUdFCisgICAgcmVhbGx5X2h1Z2UgPSBSRUFMTFlfSFVHRQorCitFID0gMi43MTgyODEKK1BJID0gMy4xNDE1OTMKK1RBVSA9IDIgKiBQSQorCitjbGFzcyBGbG9hdE51bShmbG9hdCwgRW51bSk6CisgICAgZSA9IEUKKyAgICBwaSA9IFBJCisgICAgdGF1ID0gVEFVCisKK0lORiA9IGZsb2F0KCdpbmYnKQorTkVHX0lORiA9IGZsb2F0KCctaW5mJykKK05BTiA9IGZsb2F0KCduYW4nKQorCitjbGFzcyBXaWVyZE51bShmbG9hdCwgRW51bSk6CisgICAgaW5mID0gSU5GCisgICAgbmVnX2luZiA9IE5FR19JTkYKKyAgICBuYW4gPSBOQU4KKworY2xhc3MgVGVzdEVudW06CisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgIGZvciBlbnVtIGluIEZsb2F0TnVtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCByZXByKGVudW0udmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X3dlaXJkX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgZm9yIGVudW0sIGV4cGVjdGVkIGluIHppcChXaWVyZE51bSwgKCdJbmZpbml0eScsICctSW5maW5pdHknLCAnTmFOJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGlmIG5vdCBpc25hbihlbnVtKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSkpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBmb3IgZW51bSBpbiBCaWdOdW06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIHN0cihlbnVtLnZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorCisgICAgZGVmIHRlc3RfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoQmlnTnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKFtTTUFMTCwgQklHLCBIVUdFLCBSRUFMTFlfSFVHRV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KEJpZ051bSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KEJpZ051bSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KEZsb2F0TnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKFtFLCBQSSwgVEFVXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoRmxvYXROdW0pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChGbG9hdE51bSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAnW0luZmluaXR5LCAtSW5maW5pdHksIE5hTl0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSkpWzoyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KFdpZXJkTnVtKVs6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChXaWVyZE51bSkpKVsyXSkpCisKKyAgICBkZWYgdGVzdF9kaWN0X2tleXMoc2VsZik6CisgICAgICAgIHMsIGIsIGgsIHIgPSBCaWdOdW0KKyAgICAgICAgZSwgcCwgdCA9IEZsb2F0TnVtCisgICAgICAgIGksIGosIG4gPSBXaWVyZE51bQorICAgICAgICBkID0geworICAgICAgICAgICAgczondGlueScsIGI6J2xhcmdlJywgaDonbGFyZ2VyJywgcjonbGFyZ2VzdCcsCisgICAgICAgICAgICBlOiJFdWxlcidzIG51bWJlciIsIHA6J3BpJywgdDondGF1JywKKyAgICAgICAgICAgIGk6J0luZmluaXR5JywgajonLUluZmluaXR5JywgbjonTmFOJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgbmQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKFNNQUxMKV0sICd0aW55JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoQklHKV0sICdsYXJnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKEhVR0UpXSwgJ2xhcmdlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKFJFQUxMWV9IVUdFKV0sICdsYXJnZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKEUpXSwgIkV1bGVyJ3MgbnVtYmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKFBJKV0sICdwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbcmVwcihUQVUpXSwgJ3RhdScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ0luZmluaXR5J10sICdJbmZpbml0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJy1JbmZpbml0eSddLCAnLUluZmluaXR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnTmFOJ10sICdOYU4nKQorCisgICAgZGVmIHRlc3RfZGljdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGQgPSBkaWN0KAorICAgICAgICAgICAgICAgIHRpbnk9QmlnTnVtLnNtYWxsLAorICAgICAgICAgICAgICAgIGxhcmdlPUJpZ051bS5iaWcsCisgICAgICAgICAgICAgICAgbGFyZ2VyPUJpZ051bS5odWdlLAorICAgICAgICAgICAgICAgIGxhcmdlc3Q9QmlnTnVtLnJlYWxseV9odWdlLAorICAgICAgICAgICAgICAgIGU9RmxvYXROdW0uZSwKKyAgICAgICAgICAgICAgICBwaT1GbG9hdE51bS5waSwKKyAgICAgICAgICAgICAgICB0YXU9RmxvYXROdW0udGF1LAorICAgICAgICAgICAgICAgIGk9V2llcmROdW0uaW5mLAorICAgICAgICAgICAgICAgIGo9V2llcmROdW0ubmVnX2luZiwKKyAgICAgICAgICAgICAgICBuPVdpZXJkTnVtLm5hbiwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIG5kID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyd0aW55J10sIFNNQUxMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZSddLCBCSUcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlciddLCBIVUdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZXN0J10sIFJFQUxMWV9IVUdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydlJ10sIEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3BpJ10sIFBJKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyd0YXUnXSwgVEFVKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydpJ10sIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnaiddLCBORUdfSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4obmRbJ24nXSkpCisKK2NsYXNzIFRlc3RQeUVudW0oVGVzdEVudW0sIFB5VGVzdCk6IHBhc3MKK2NsYXNzIFRlc3RDRW51bShUZXN0RW51bSwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQppbmRleCAzZGQ4NzdhLi43Y2FhZmRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKQEAgLTEsNCArMSw1IEBACiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CitpbXBvcnQgcmUKIAogIyAyMDA3LTEwLTA1CiBKU09ORE9DUyA9IFsKQEAgLTEwMCw2ICsxMDEsOTQgQEAKICAgICAgICAgI1RoaXMgaXMgZm9yIHB5dGhvbiBlbmNvZGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kdW1wcywgZGF0YSwgaW5kZW50PVRydWUpCiAKKyAgICBkZWYgdGVzdF90cnVuY2F0ZWRfaW5wdXQoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJycsICdFeHBlY3RpbmcgdmFsdWUnLCAwKSwKKyAgICAgICAgICAgICgnWycsICdFeHBlY3RpbmcgdmFsdWUnLCAxKSwKKyAgICAgICAgICAgICgnWzQyJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMyksCisgICAgICAgICAgICAoJ1s0MiwnLCAnRXhwZWN0aW5nIHZhbHVlJywgNCksCisgICAgICAgICAgICAoJ1siJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtIicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCdbInNwYW0iLCcsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgneycsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3siJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtIicsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCd7InNwYW0iOicsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDEwKSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MiwnLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDExKSwKKyAgICAgICAgXQorICAgICAgICB0ZXN0X2Nhc2VzICs9IFsKKyAgICAgICAgICAgICgnIicsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMCksCisgICAgICAgICAgICAoJyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAwKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbXNnLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ157MH06IGxpbmUgMSBjb2x1bW4gezF9IFwoY2hhciB7Mn1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9kYXRhKHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCdbLCcsICdFeHBlY3RpbmcgdmFsdWUnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtIjpbfScsICdFeHBlY3RpbmcgdmFsdWUnLCA5KSwKKyAgICAgICAgICAgICgnWzQyOicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDMpLAorICAgICAgICAgICAgKCdbNDIgInNwYW0iJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNCksCisgICAgICAgICAgICAoJ1s0MixdJywgJ0V4cGVjdGluZyB2YWx1ZScsIDQpLAorICAgICAgICAgICAgKCd7InNwYW0iOls0Mn0nLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ1siXScsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMSksCisgICAgICAgICAgICAoJ1sic3BhbSI6JywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1sic3BhbSIsXScsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgnezonLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDEpLAorICAgICAgICAgICAgKCd7LCcsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3s0MicsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ1t7XScsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMiksCisgICAgICAgICAgICAoJ3sic3BhbSIsJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ3sic3BhbSJ9JywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1t7InNwYW0iXScsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDgpLAorICAgICAgICAgICAgKCd7InNwYW0iOn0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOCksCisgICAgICAgICAgICAoJ1t7InNwYW0iOl0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOSksCisgICAgICAgICAgICAoJ3sic3BhbSI6NDIgImhhbSInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ1t7InNwYW0iOjQyXScsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0Mix9JywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxMSksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIG1zZywgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideezB9OiBsaW5lIDEgY29sdW1uIHsxfSBcKGNoYXIgezJ9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2V4dHJhX2RhdGEoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJ1tdXScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ3t9fScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ1tdLFtdJywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgne30se30nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICBdCisgICAgICAgIHRlc3RfY2FzZXMgKz0gWworICAgICAgICAgICAgKCc0Miwic3BhbSInLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCcic3BhbSIsNDInLCAnRXh0cmEgZGF0YScsIDYpLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gLSBsaW5lIDEgY29sdW1uIHsyfScKKyAgICAgICAgICAgICAgICByJyBcKGNoYXIgezN9IC0gezR9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGxlbihkYXRhKSArIDEsIGlkeCwgbGVuKGRhdGEpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfbGluZWNvbChzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnIScsIDEsIDEsIDApLAorICAgICAgICAgICAgKCcgIScsIDEsIDIsIDEpLAorICAgICAgICAgICAgKCdcbiEnLCAyLCAxLCAxKSwKKyAgICAgICAgICAgICgnXG4gIFxuXG4gICAgICEnLCA0LCA2LCAxMCksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIGxpbmUsIGNvbCwgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideRXhwZWN0aW5nIHZhbHVlOiBsaW5lIHswfSBjb2x1bW4gezF9JworICAgICAgICAgICAgICAgIHInIFwoY2hhciB7Mn1cKSQnLmZvcm1hdChsaW5lLCBjb2wsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKIAogY2xhc3MgVGVzdFB5RmFpbChUZXN0RmFpbCwgUHlUZXN0KTogcGFzcwogY2xhc3MgVGVzdENGYWlsKFRlc3RGYWlsLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weQppbmRleCBhNGQ0ZDIwLi5lMDc4NTZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5CkBAIC0zMiw2ICszMiw4IEBACiAgICAgICAgIGQxID0gc2VsZi5kdW1wcyhoKQogICAgICAgICBkMiA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQogICAgICAgICBkMyA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PSdcdCcsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQorICAgICAgICBkNCA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlKQorICAgICAgICBkNSA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PSdcdCcsIHNvcnRfa2V5cz1UcnVlKQogCiAgICAgICAgIGgxID0gc2VsZi5sb2FkcyhkMSkKICAgICAgICAgaDIgPSBzZWxmLmxvYWRzKGQyKQpAQCAtNDIsNiArNDQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgzLCBoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBleHBlY3QuZXhwYW5kdGFicygyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMywgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ0LCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkNSwgZDMpCiAKICAgICBkZWYgdGVzdF9pbmRlbnQwKHNlbGYpOgogICAgICAgICBoID0gezM6IDF9CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2tleXdvcmQucHkgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5OWY1MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weQpAQCAtMCwwICsxLDEzOCBAQAoraW1wb3J0IGtleXdvcmQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgZmlsZWNtcAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRleHR3cmFwCisKK0tFWVdPUkRfRklMRSAgICAgICAgICAgICA9IHN1cHBvcnQuZmluZGZpbGUoJ2tleXdvcmQucHknKQorR1JBTU1BUl9GSUxFICAgICAgICAgICAgID0gb3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLicsICcuLicsICdQeXRob24nLCAnZ3JhbWluaXQuYycpCitURVNUX1BZX0ZJTEUgICAgICAgICAgICAgPSAna2V5d29yZF90ZXN0LnB5JworR1JBTU1BUl9URVNUX0ZJTEUgICAgICAgID0gJ2dyYW1pbml0X3Rlc3QuYycKK1BZX0ZJTEVfV0lUSE9VVF9LRVlXT1JEUyA9ICdtaW5pbWFsX2tleXdvcmQucHknCitOT05FWElTVEVOVF9GSUxFICAgICAgICAgPSAnbm90X2hlcmUudHh0JworCisKK2NsYXNzIFRlc3RfaXNrZXl3b3JkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90cnVlX2lzX2Ffa2V5d29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtleXdvcmQuaXNrZXl3b3JkKCdUcnVlJykpCisKKyAgICBkZWYgdGVzdF91cHBlcmNhc2VfdHJ1ZV9pc19ub3RfYV9rZXl3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXdvcmQuaXNrZXl3b3JkKCdUUlVFJykpCisKKyAgICBkZWYgdGVzdF9ub25lX3ZhbHVlX2lzX25vdF9hX2tleXdvcmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoTm9uZSkpCisKKyAgICAjIFRoaXMgaXMgcHJvYmFibHkgYW4gYWNjaWRlbnQgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGJ1dCBzaG91bGQgYmUKKyAgICAjIHByZXNlcnZlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICBkZWYgdGVzdF9jaGFuZ2luZ190aGVfa3dsaXN0X2RvZXNfbm90X2FmZmVjdF9pc2tleXdvcmQoc2VsZik6CisgICAgICAgIG9sZGxpc3QgPSBrZXl3b3JkLmt3bGlzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0YXR0ciwga2V5d29yZCwgJ2t3bGlzdCcsIG9sZGxpc3QpCisgICAgICAgIGtleXdvcmQua3dsaXN0ID0gWydpdHMnLCAnYWxsJywgJ2VnZ3MnLCAnYmVhbnMnLCAnYW5kJywgJ2EnLCAnc2xpY2UnXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXdvcmQuaXNrZXl3b3JkKCdlZ2dzJykpCisKKworY2xhc3MgVGVzdEtleXdvcmRHZW5lcmF0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKHNlbGYsIHNvdXJjZV9maWxlLCBkZXN0X2ZpbGUpOgorICAgICAgICB3aXRoIG9wZW4oc291cmNlX2ZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICBubCA9IGxpbmVzWzBdW2xlbihsaW5lc1swXS5zdHJpcCgpKTpdCisgICAgICAgIHdpdGggb3BlbihkZXN0X2ZpbGUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyhsaW5lc1s6bGluZXMuaW5kZXgoYiIjLS1zdGFydCBrZXl3b3Jkcy0tIiArIG5sKSArIDFdKQorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyhsaW5lc1tsaW5lcy5pbmRleChiIiMtLWVuZCBrZXl3b3Jkcy0tIiArIG5sKTpdKQorCisgICAgZGVmIF9nZW5lcmF0ZV9rZXl3b3JkcyhzZWxmLCBncmFtbWFyX2ZpbGUsIHRhcmdldF9rZXl3b3JkX3B5X2ZpbGUpOgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlXT1JEX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfa2V5d29yZF9weV9maWxlXSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgpWzFdCisgICAgICAgIHJldHVybiBwcm9jLnJldHVybmNvZGUsIHN0ZGVycgorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgb3MucGF0aC5leGlzdHMoR1JBTU1BUl9GSUxFKSwKKyAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG9ubHkgd29ya3MgZnJvbSBzb3VyY2UgYnVpbGQgZGlyZWN0b3J5JykKKyAgICBkZWYgdGVzdF9yZWFsX2dyYW1tYXJfYW5kX2tleXdvcmRfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcChLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIGInJyksIHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKEdSQU1NQVJfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKSkKKworICAgIGRlZiB0ZXN0X2dyYW1tYXIoc2VsZik6CisgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHdpdGggb3BlbihHUkFNTUFSX1RFU1RfRklMRSwgJ3cnKSBhcyBmcDoKKyAgICAgICAgICAgICMgU29tZSBvZiB0aGVzZSBhcmUgcHJvYmFibHkgaW1wbGVtZW50YXRpb24gYWNjaWRlbnRzLgorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIHsyLCAxfSwKKyAgICAgICAgICAgICAgICAgICAgezExLCAiZW5jb2RpbmdfZGVjbCIsIDAsIDIsIHN0YXRlc183OSwKKyAgICAgICAgICAgICAgICAgICAgICJcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAiCisgICAgICAgICAgICAgICAgICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAiamVsbG8ifSwKKyAgICAgICAgICAgICAgICAgICAgezMyNiwgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAidHVybmlwIn0sCisgICAgICAgICAgICAgICAgXHR7MSwgIlRoaXMgb25lIGlzIHRhYiBpbmRlbnRlZCIKKyAgICAgICAgICAgICAgICAgICAgezI3OCwgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAiY3JhenkgYnV0IGxlZ2FsIgorICAgICAgICAgICAgICAgICJhbHNvIGxlZ2FsIiB7MSwgIgorICAgICAgICAgICAgICAgICAgICB7MSwgImNvbnRpbnVlIn0sCisgICAgICAgICAgICAgICAgICAgezEsICJsZW1vbiJ9LAorICAgICAgICAgICAgICAgICAgICAgezEsICJ0b21hdG8ifSwKKyAgICAgICAgICAgICAgICB7MSwgIndpZ2lpIn0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAnbm8gZ29vZCd9CisgICAgICAgICAgICAgICAgICAgIHsyODMsIDB9LAorICAgICAgICAgICAgICAgICAgICB7MSwgICJ0b28gbWFueSBzcGFjZXMifSIiIikpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgR1JBTU1BUl9URVNUX0ZJTEUpCisgICAgICAgIHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKEdSQU1NQVJfVEVTVF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgIiAgICAgICAgJ1RoaXMgb25lIGlzIHRhYiBpbmRlbnRlZCcsIiwKKyAgICAgICAgICAgICIgICAgICAgICdhbHNvIGxlZ2FsJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2NvbnRpbnVlJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2NyYXp5IGJ1dCBsZWdhbCcsIiwKKyAgICAgICAgICAgICIgICAgICAgICdqZWxsbycsIiwKKyAgICAgICAgICAgICIgICAgICAgICdsZW1vbicsIiwKKyAgICAgICAgICAgICIgICAgICAgICd0b21hdG8nLCIsCisgICAgICAgICAgICAiICAgICAgICAndHVybmlwJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ3dpZ2lpJywiLAorICAgICAgICAgICAgXQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9QWV9GSUxFKSBhcyBmcDoKKyAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICBzdGFydCA9IGxpbmVzLmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tIikgKyAxCisgICAgICAgIGVuZCA9IGxpbmVzLmluZGV4KCIjLS1lbmQga2V5d29yZHMtLSIpCisgICAgICAgIGFjdHVhbCA9IGxpbmVzW3N0YXJ0OmVuZF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZ3JhbW1hcl9yZXN1bHRzX2luX25vX2tleXdvcmRzKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoS0VZV09SRF9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFBZX0ZJTEVfV0lUSE9VVF9LRVlXT1JEUykKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgYicnKSwgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMob3MuZGV2bnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKFRFU1RfUFlfRklMRSwgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKSkKKworICAgIGRlZiB0ZXN0X2tleXdvcmRzX3B5X3dpdGhvdXRfbWFya2Vyc19wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKG9zLmRldm51bGwsIG9zLmRldm51bGwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJ2RvZXMgbm90IGNvbnRhaW4gZm9ybWF0IG1hcmtlcnMnKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19ncmFtbWFyX2ZpbGVfcHJvZHVjZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHJjLCBzdGRlcnIgPSBzZWxmLl9nZW5lcmF0ZV9rZXl3b3JkcyhOT05FWElTVEVOVF9GSUxFLCBLRVlXT1JEX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJyg/bXMpJyArIE5PTkVYSVNURU5UX0ZJTEUuZW5jb2RlKCkpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2tleXdvcmRzX3B5X2ZpbGVfcHJvZHVjZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHJjLCBzdGRlcnIgPSBzZWxmLl9nZW5lcmF0ZV9rZXl3b3Jkcyhvcy5kZXZudWxsLCBOT05FWElTVEVOVF9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHN0ZGVyciwgYicoP21zKScgKyBOT05FWElTVEVOVF9GSUxFLmVuY29kZSgpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5IGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQppbmRleCA2YzJmZjAwLi43ZjMxNWQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKQEAgLTE3NCw2ICsxNzQsMTggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gX19hCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgpLmYoKSwgNDIpCiAKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2V2YWx1YXRpb25fb3JkZXIoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDE2OTY3CisgICAgICAgIGEgPSA0MgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZGVmIGYodj1hLCB4PWIsICosIHk9Yywgej1kKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyci5leGNlcHRpb24pLCAibmFtZSAnYicgaXMgbm90IGRlZmluZWQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZiA9IGxhbWJkYSB2PWEsIHg9YiwgKiwgeT1jLCB6PWQ6IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyLmV4Y2VwdGlvbiksICJuYW1lICdiJyBpcyBub3QgZGVmaW5lZCIpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChLZXl3b3JkT25seUFyZ1Rlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2txdWV1ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CmluZGV4IGU1ZTYwNTguLmJhZmRlYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FSU5QUk9HUkVTUykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICNyYWlzZSBBc3NlcnRpb25FcnJvcigiQ29ubmVjdCBzaG91bGQgaGF2ZSByYWlzZWQgRUlOUFJPR1JFU1MiKQpAQCAtMTg1LDYgKzE4NSwzMyBAQAogICAgICAgICBiLmNsb3NlKCkKICAgICAgICAga3EuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIG9wZW5fZmlsZSA9IG9wZW4oX19maWxlX18sICJyYiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcGVuX2ZpbGUuY2xvc2UpCisgICAgICAgIGZkID0gb3Blbl9maWxlLmZpbGVubygpCisgICAgICAgIGtxdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtxdWV1ZS5maWxlbm8oKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtxdWV1ZS5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAga3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtxdWV1ZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGtxdWV1ZS5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAga3F1ZXVlLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3F1ZXVlLmNvbnRyb2wsIE5vbmUsIDQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGtxdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoa3F1ZXVlLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShrcXVldWUuZmlsZW5vKCkpLCBGYWxzZSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEtRdWV1ZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQppbmRleCA2M2VlNjk3Li41YjI3NmU3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgICAgICAjIFNlZWtpbmcgaXMgbm90IGVub3VnaCBvZiBhIHRlc3Q6IHlvdSBtdXN0IHdyaXRlIGFuZCBmbHVzaCwgdG9vIQogICAgICAgICAgICAgZi53cml0ZShiJ3gnKQogICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXJnZWZpbGUgc3VwcG9ydCIpCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvY2FsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CmluZGV4IDc2MzQ3YjcuLmFiOTkwYWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CkBAIC0zNzEsNyArMzcxLDggQEAKIAogICAgIGRlZiB0ZXN0X2xvY2FsZV9hbGlhcyhzZWxmKToKICAgICAgICAgZm9yIGxvY2FsZW5hbWUsIGFsaWFzIGluIGxvY2FsZS5sb2NhbGVfYWxpYXMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2sobG9jYWxlbmFtZSwgYWxpYXMpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChsb2NhbGU9KGxvY2FsZW5hbWUsIGFsaWFzKSk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVjayhsb2NhbGVuYW1lLCBhbGlhcykKIAogICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCcnLCAnJykKQEAgLTM4Myw2ICszODQsNyBAQAogICAgIGRlZiB0ZXN0X2VuZ2xpc2goc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ2VuJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ0VOJywgJ2VuX1VTLklTTzg4NTktMScpCisgICAgICAgIHNlbGYuY2hlY2soJ2VuLmlzbzg4NTkxJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX3VzJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX0dCJywgJ2VuX0dCLklTTzg4NTktMScpCkBAIC0zOTEsNyArMzkzLDEwIEBACiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTOlVURi04JywgJ2VuX1VTLlVURi04JykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuSVNPODg1OS0xJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTLlVTLUFTQ0lJJywgJ2VuX1VTLklTTzg4NTktMScpCisgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTLjg4NTkxJywgJ2VuX1VTLklTTzg4NTktMScpCisgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTLjg4NTkxNScsICdlbl9VUy5JU084ODU5LTE1JykKICAgICAgICAgc2VsZi5jaGVjaygnZW5nbGlzaCcsICdlbl9FTi5JU084ODU5LTEnKQorICAgICAgICBzZWxmLmNoZWNrKCdlbmdsaXNoX3VrLmFzY2lpJywgJ2VuX0dCLklTTzg4NTktMScpCiAKICAgICBkZWYgdGVzdF9oeXBoZW5hdGVkX2VuY29kaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCdhel9BWi5pc284ODU5OWUnLCAnYXpfQVouSVNPODg1OS05RScpCkBAIC00MTEsMTAgKzQxNiwxMiBAQAogICAgIGRlZiB0ZXN0X2V1cm9fbW9kaWZpZXIoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ2RlX0RFQGV1cm8nLCAnZGVfREUuSVNPODg1OS0xNScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTLklTTzg4NTktMTVAZXVybycsICdlbl9VUy5JU084ODU5LTE1JykKKyAgICAgICAgc2VsZi5jaGVjaygnZGVfREUudXRmOEBldXJvJywgJ2RlX0RFLlVURi04JykKIAogICAgIGRlZiB0ZXN0X2xhdGluX21vZGlmaWVyKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCdiZV9CWS5VVEYtOEBsYXRpbicsICdiZV9CWS5VVEYtOEBsYXRpbicpCiAgICAgICAgIHNlbGYuY2hlY2soJ3NyX1JTLlVURi04QGxhdGluJywgJ3NyX1JTLlVURi04QGxhdGluJykKKyAgICAgICAgc2VsZi5jaGVjaygnc3JfUlMuVVRGLThAbGF0bicsICdzcl9SUy5VVEYtOEBsYXRpbicpCiAKICAgICBkZWYgdGVzdF92YWxlbmNpYV9tb2RpZmllcihzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygnY2FfRVMuVVRGLThAdmFsZW5jaWEnLCAnY2FfRVMuVVRGLThAdmFsZW5jaWEnKQpAQCAtNDM1LDYgKzQ0MiwzOSBAQAogICAgICAgICBzZWxmLmNoZWNrKCdzZF9JTicsICdzZF9JTi5VVEYtOCcpCiAgICAgICAgIHNlbGYuY2hlY2soJ3NkJywgJ3NkX0lOLlVURi04JykKIAorICAgIGRlZiB0ZXN0X2V1Y19lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuZXVjJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuZXVjanAnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdrb19rci5ldWMnLCAna29fS1IuZXVjS1InKQorICAgICAgICBzZWxmLmNoZWNrKCdrb19rci5ldWNrcicsICdrb19LUi5ldWNLUicpCisgICAgICAgIHNlbGYuY2hlY2soJ3poX2NuLmV1YycsICd6aF9DTi5ldWNDTicpCisgICAgICAgIHNlbGYuY2hlY2soJ3poX3R3LmV1YycsICd6aF9UVy5ldWNUVycpCisgICAgICAgIHNlbGYuY2hlY2soJ3poX3R3LmV1Y3R3JywgJ3poX1RXLmV1Y1RXJykKKworICAgIGRlZiB0ZXN0X2phcGFuZXNlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdqYScsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phLmppcycsICdqYV9KUC5KSVM3JykKKyAgICAgICAgc2VsZi5jaGVjaygnamEuc2ppcycsICdqYV9KUC5TSklTJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5hamVjJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuZXVjJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuZXVjanAnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5pc28tMjAyMi1qcCcsICdqYV9KUC5KSVM3JykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuaXNvMjAyMmpwJywgJ2phX0pQLkpJUzcnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5qaXMnLCAnamFfSlAuSklTNycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmppczcnLCAnamFfSlAuSklTNycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLm1zY29kZScsICdqYV9KUC5TSklTJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAucGNrJywgJ2phX0pQLlNKSVMnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5zamlzJywgJ2phX0pQLlNKSVMnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC51amlzJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAudXRmOCcsICdqYV9KUC5VVEYtOCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phcGFuJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFwYW5lc2UnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYXBhbmVzZS1ldWMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYXBhbmVzZS5ldWMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYXBhbmVzZS5zamlzJywgJ2phX0pQLlNKSVMnKQorICAgICAgICBzZWxmLmNoZWNrKCdqcF9qcCcsICdqYV9KUC5ldWNKUCcpCisKIAogY2xhc3MgVGVzdE1pc2NlbGxhbmVvdXModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2dldHByZWZlcnJlZGVuY29kaW5nKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CmluZGV4IGYzNDE3MmEuLmQ1YWVjOWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBsb2dnaW5nLmNvbmZpZwogCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgY29uZmlncGFyc2VyCiBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBpbwpAQCAtMzgsNiArMzksNyBAQAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChjYXB0dXJlZF9zdGRvdXQsIHJ1bl93aXRoX2xvY2FsZSwgcnVuX3VuaXR0ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaCwgcmVxdWlyZXNfemxpYiwgVGVzdEhhbmRsZXIsIE1hdGNoZXIpCiBpbXBvcnQgdGV4dHdyYXAKQEAgLTU2LDcgKzU4LDkgQEAKICAgICBpbXBvcnQgc210cGQKICAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UsIHBhcnNlX3FzCiAgICAgZnJvbSBzb2NrZXRzZXJ2ZXIgaW1wb3J0IChUaHJlYWRpbmdVRFBTZXJ2ZXIsIERhdGFncmFtUmVxdWVzdEhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIsIFN0cmVhbVJlcXVlc3RIYW5kbGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1VuaXhTdHJlYW1TZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIpCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogdHJ5OgpAQCAtNzMsMTMgKzc3LDEyIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogCi0KIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIkJhc2UgY2xhc3MgZm9yIGxvZ2dpbmcgdGVzdHMuIiIiCiAKICAgICBsb2dfZm9ybWF0ID0gIiUobmFtZSlzIC0+ICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3Ll0rKSAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcdy5dKykgLT4gKFx3Kyk6IChcZCspJCIKICAgICBtZXNzYWdlX251bSA9IDAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTkxLDcgKzk0LDggQEAKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcnMgPSBsb2dnaW5nLl9oYW5kbGVycy5jb3B5KCkKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcl9saXN0ID0gbG9nZ2luZy5faGFuZGxlckxpc3RbOl0KICAgICAgICAgICAgIHNlbGYuc2F2ZWRfbG9nZ2VycyA9IHNhdmVkX2xvZ2dlcnMgPSBsb2dnZXJfZGljdC5jb3B5KCkKLSAgICAgICAgICAgIHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMgPSBsb2dnaW5nLl9sZXZlbE5hbWVzLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9uYW1lX3RvX2xldmVsID0gbG9nZ2luZy5fbmFtZVRvTGV2ZWwuY29weSgpCisgICAgICAgICAgICBzZWxmLnNhdmVkX2xldmVsX3RvX25hbWUgPSBsb2dnaW5nLl9sZXZlbFRvTmFtZS5jb3B5KCkKICAgICAgICAgICAgIHNlbGYubG9nZ2VyX3N0YXRlcyA9IGxvZ2dlcl9zdGF0ZXMgPSB7fQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gc2F2ZWRfbG9nZ2VyczoKICAgICAgICAgICAgICAgICBsb2dnZXJfc3RhdGVzW25hbWVdID0gZ2V0YXR0cihzYXZlZF9sb2dnZXJzW25hbWVdLApAQCAtMTMzLDggKzEzNywxMCBAQAogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnNldExldmVsKHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCkKICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2dnaW5nLl9sZXZlbE5hbWVzLmNsZWFyKCkKLSAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsTmFtZXMudXBkYXRlKHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMpCisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbFRvTmFtZS5jbGVhcigpCisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbFRvTmFtZS51cGRhdGUoc2VsZi5zYXZlZF9sZXZlbF90b19uYW1lKQorICAgICAgICAgICAgbG9nZ2luZy5fbmFtZVRvTGV2ZWwuY2xlYXIoKQorICAgICAgICAgICAgbG9nZ2luZy5fbmFtZVRvTGV2ZWwudXBkYXRlKHNlbGYuc2F2ZWRfbmFtZV90b19sZXZlbCkKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLmNsZWFyKCkKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLnVwZGF0ZShzZWxmLnNhdmVkX2hhbmRsZXJzKQogICAgICAgICAgICAgbG9nZ2luZy5faGFuZGxlckxpc3RbOl0gPSBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdApAQCAtMTQ4LDEyICsxNTQsMTIgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKIAotICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUsIHBhdD1Ob25lKToKICAgICAgICAgIiIiTWF0Y2ggdGhlIGNvbGxlY3RlZCBsb2cgbGluZXMgYWdhaW5zdCB0aGUgcmVndWxhciBleHByZXNzaW9uCiAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCwgYW5kIGNvbXBhcmUgdGhlIGV4dHJhY3RlZCBncm91cCB2YWx1ZXMgdG8KICAgICAgICAgdGhlIGV4cGVjdGVkX3ZhbHVlcyBsaXN0IG9mIHR1cGxlcy4iIiIKICAgICAgICAgc3RyZWFtID0gc3RyZWFtIG9yIHNlbGYuc3RyZWFtCi0gICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoc2VsZi5leHBlY3RlZF9sb2dfcGF0KQorICAgICAgICBwYXQgPSByZS5jb21waWxlKHBhdCBvciBzZWxmLmV4cGVjdGVkX2xvZ19wYXQpCiAgICAgICAgIGFjdHVhbF9saW5lcyA9IHN0cmVhbS5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhY3R1YWxfbGluZXMpLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKICAgICAgICAgZm9yIGFjdHVhbCwgZXhwZWN0ZWQgaW4gemlwKGFjdHVhbF9saW5lcywgZXhwZWN0ZWRfdmFsdWVzKToKQEAgLTMwNyw2ICszMTMsMTAgQEAKICAgICAgICAgICAgICgnSU5GLkJBRFBBUkVOVCcsICdJTkZPJywgJzQnKSwKICAgICAgICAgXSkKIAorICAgIGRlZiB0ZXN0X3JlZ3Jlc3Npb25fMjIzODYoc2VsZik6CisgICAgICAgICIiIlNlZSBpc3N1ZSAjMjIzODYgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5nZXRMZXZlbE5hbWUoJ0lORk8nKSwgbG9nZ2luZy5JTkZPKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKGxvZ2dpbmcuSU5GTyksICdJTkZPJykKIAogY2xhc3MgQmFzaWNGaWx0ZXJUZXN0KEJhc2VUZXN0KToKIApAQCAtNDI4LDcgKzQzOCw3IEBACiAgICAgIiIiVGVzdCB2YXJpb3VzIGZpbHRlcmluZyBwb3NzaWJpbGl0aWVzIHdpdGggY3VzdG9tIGxvZ2dpbmcgbGV2ZWxzLiIiIgogCiAgICAgIyBTa2lwIHRoZSBsb2dnZXIgbmFtZSBncm91cC4KLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKQEAgLTU1OCw3ICs1NjgsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5mYWNpbGl0eSwgaC5MT0dfVVNFUikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaC51bml4c29ja2V0KQogICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjogIyBzeXNsb2dkIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjIHN5c2xvZ2QgbWlnaHQgbm90IGJlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ0dFVCcsICdQT1NUJywgJ1BVVCcpOgogICAgICAgICAgICAgaWYgbWV0aG9kID09ICdQVVQnOgpAQCAtNTgzLDYgKzU5Myw3IEBACiAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSh0cmllcyk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRpb25fdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDA0ICogcmFuZG9tLnJhbmRpbnQoMCwgNCkpCkBAIC01OTAsNiArNjAxLDkgQEAKICAgICAgICAgZGVsX2NvdW50ID0gNTAwCiAgICAgICAgIGxvZ19jb3VudCA9IDUwMAogCisgICAgICAgIHNlbGYuaGFuZGxlX3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYuZGVsZXRpb25fdGltZSA9IE5vbmUKKwogICAgICAgICBmb3IgZGVsYXkgaW4gKEZhbHNlLCBUcnVlKToKICAgICAgICAgICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAoJy5sb2cnLCAndGVzdF9sb2dnaW5nLTMtJykKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQpAQCAtNjAzLDcgKzYxNywxNCBAQAogICAgICAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKGxvZ19jb3VudCk6CiAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDUpCiAgICAgICAgICAgICAgICAgICAgIHIgPSBsb2dnaW5nLm1ha2VMb2dSZWNvcmQoeydtc2cnOiAndGVzdGluZycgfSkKLSAgICAgICAgICAgICAgICAgICAgaC5oYW5kbGUocikKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBoLmhhbmRsZShyKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0RlbGV0ZWQgYXQgJXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuZWQgYXQgJXMnICUgKHNlbGYuZGVsZXRpb25fdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3RpbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcmVtb3Zlci5qb2luKCkKICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKQEAgLTY0NSw0MSArNjY2LDYgQEAKICMgLS0gaWYgaXQgcHJvdmVzIHRvIGJlIG9mIHdpZGVyIHV0aWxpdHkgdGhhbiBqdXN0IHRlc3RfbG9nZ2luZwogCiBpZiB0aHJlYWRpbmc6Ci0gICAgY2xhc3MgVGVzdFNNVFBDaGFubmVsKHNtdHBkLlNNVFBDaGFubmVsKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMgZGVyaXZlZCBjbGFzcyBoYXMgaGFkIHRvIGJlIGNyZWF0ZWQgYmVjYXVzZSBzbXRwZCBkb2VzIG5vdAotICAgICAgICBzdXBwb3J0IHVzZSBvZiBjdXN0b20gY2hhbm5lbCBtYXBzLCBhbHRob3VnaCB0aGV5IGFyZSBhbGxvd2VkIGJ5Ci0gICAgICAgIGFzeW5jb3JlJ3MgZGVzaWduLiBJc3N1ZSAjMTE5NTkgaGFzIGJlZW4gcmFpc2VkIHRvIGFkZHJlc3MgdGhpcywKLSAgICAgICAgYW5kIGlmIHJlc29sdmVkIHNhdGlzZmFjdG9yaWx5LCBzb21lIG9mIHRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIHNvY2ttYXApOgotICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uLCBzb2NrbWFwKQotICAgICAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgotICAgICAgICAgICAgc2VsZi5jb25uID0gY29ubgotICAgICAgICAgICAgc2VsZi5hZGRyID0gYWRkcgotICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJlY2VpdmVkX2xpbmVzID0gW10KLSAgICAgICAgICAgIHNlbGYuc210cF9zdGF0ZSA9IHNlbGYuQ09NTUFORAotICAgICAgICAgICAgc2VsZi5zZWVuX2dyZWV0aW5nID0gJycKLSAgICAgICAgICAgIHNlbGYubWFpbGZyb20gPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJjcHR0b3MgPSBbXQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9kYXRhID0gJycKLSAgICAgICAgICAgIHNlbGYuZnFkbiA9IHNvY2tldC5nZXRmcWRuKCkKLSAgICAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYucGVlciA9IGNvbm4uZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgIyBhIHJhY2UgY29uZGl0aW9uICBtYXkgb2NjdXIgaWYgdGhlIG90aGVyIGVuZCBpcyBjbG9zaW5nCi0gICAgICAgICAgICAgICAgIyBiZWZvcmUgd2UgY2FuIGdldCB0aGUgcGVlcm5hbWUKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSAhPSBlcnJuby5FTk9UQ09OTjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYucHVzaCgnMjIwICVzICVzJyAlIChzZWxmLmZxZG4sIHNtdHBkLl9fdmVyc2lvbl9fKSkKLSAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYidcclxuJykKLSAgICAgICAgICAgIHNlbGYuZXh0ZW5kZWRfc210cCA9IEZhbHNlCi0KLQogICAgIGNsYXNzIFRlc3RTTVRQU2VydmVyKHNtdHBkLlNNVFBTZXJ2ZXIpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgdGVzdCBTTVRQIHNlcnZlci4KQEAgLTcwMCwzNyArNjg2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA6ZnVuYzpgYXN5bmNvcmUubG9vcGAuIFRoaXMgYXZvaWRzIGNoYW5naW5nIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgOm1vZDpgYXN5bmNvcmVgIG1vZHVsZSdzIGdsb2JhbCBzdGF0ZS4KICAgICAgICAgIiIiCi0gICAgICAgIGNoYW5uZWxfY2xhc3MgPSBUZXN0U01UUENoYW5uZWwKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkciwgaGFuZGxlciwgcG9sbF9pbnRlcnZhbCwgc29ja21hcCk6Ci0gICAgICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBhZGRyCi0gICAgICAgICAgICBzZWxmLl9yZW1vdGVhZGRyID0gTm9uZQotICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnNvY2ttYXAgPSBzb2NrbWFwCi0gICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIG1hcD1zb2NrbWFwKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZygwKQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldChzb2NrLCBtYXA9c29ja21hcCkKLSAgICAgICAgICAgICAgICAjIHRyeSB0byByZS11c2UgYSBzZXJ2ZXIgcG9ydCBpZiBwb3NzaWJsZQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X3JldXNlX2FkZHIoKQotICAgICAgICAgICAgICAgIHNlbGYuYmluZChhZGRyKQotICAgICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQotICAgICAgICAgICAgICAgIHNlbGYubGlzdGVuKDUpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNtdHBkLlNNVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgYWRkciwgTm9uZSwgbWFwPXNvY2ttYXApCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVyID0gaGFuZGxlcgogICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQogICAgICAgICAgICAgc2VsZi5wb2xsX2ludGVydmFsID0gcG9sbF9pbnRlcnZhbAogCi0gICAgICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6Ci0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIFJlZGVmaW5lZCBvbmx5IGJlY2F1c2UgdGhlIGJhc2UgY2xhc3MgZG9lcyBub3QgcGFzcyBpbiBhCi0gICAgICAgICAgICBtYXAsIGZvcmNpbmcgdXNlIG9mIGEgZ2xvYmFsIGluIDptb2Q6YGFzeW5jb3JlYC4KLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLnNvY2ttYXApCi0KICAgICAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIERlbGVnYXRlcyB0byB0aGUgaGFuZGxlciBwYXNzZWQgaW4gdG8gdGhlIHNlcnZlcidzIGNvbnN0cnVjdG9yLgpAQCAtNzYxLDggKzcyNCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZ1bmM6YGFzeW5jb3JlLmxvb3BgLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcChwb2xsX2ludGVydmFsLCBtYXA9c2VsZi5zb2NrbWFwKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvcjoKKyAgICAgICAgICAgICAgICBhc3luY29yZS5sb29wKHBvbGxfaW50ZXJ2YWwsIG1hcD1zZWxmLl9tYXApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIE9uIEZyZWVCU0QgOCwgY2xvc2luZyB0aGUgc2VydmVyIHJlcGVhdGFibHkKICAgICAgICAgICAgICAgICAjIHJhaXNlcyB0aGlzIGVycm9yLiBXZSBzd2FsbG93IGl0IGlmIHRoZQogICAgICAgICAgICAgICAgICMgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4KQEAgLTg2OSw3ICs4MzIsNyBAQAogICAgICAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuc3NsY3R4OgogICAgICAgICAgICAgICAgICAgICBzb2NrID0gc2VsZi5zc2xjdHgud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgIyBzb2NrZXQgZXJyb3JzIGFyZSBzaWxlbmNlZCBieSB0aGUgY2FsbGVyLCBwcmludCB0aGVtIGhlcmUKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJHb3QgYW4gZXJyb3I6XG4lc1xuIiAlIGUpCiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTkzNSw3ICs4OTgsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBkYXRhOgogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyKERlbGVnYXRpbmdVRFBSZXF1ZXN0SGFuZGxlciwgc2VsZikuZmluaXNoKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIuX2Nsb3NlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtOTUzLDYgKzkxNiwxMyBAQAogICAgICAgICAgICAgc3VwZXIoVGVzdFVEUFNlcnZlciwgc2VsZikuc2VydmVyX2Nsb3NlKCkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKIAorICAgIGlmIGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpOgorICAgICAgICBjbGFzcyBUZXN0VW5peFN0cmVhbVNlcnZlcihUZXN0VENQU2VydmVyKToKKyAgICAgICAgICAgIGFkZHJlc3NfZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKworICAgICAgICBjbGFzcyBUZXN0VW5peERhdGFncmFtU2VydmVyKFRlc3RVRFBTZXJ2ZXIpOgorICAgICAgICAgICAgYWRkcmVzc19mYW1pbHkgPSBzb2NrZXQuQUZfVU5JWAorCiAjIC0gZW5kIG9mIHNlcnZlcl9oZWxwZXIgc2VjdGlvbgogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQpAQCAtOTkxLDcgKzk2MSw3IEBACiAgICAgIiIiVGVzdHMgZm9yIHRoZSBNZW1vcnlIYW5kbGVyLiIiIgogCiAgICAgIyBEbyBub3QgYm90aGVyIHdpdGggYSBsb2dnZXIgbmFtZSBncm91cC4KLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKQEAgLTEwNDQsNyArMTAxNCw3IEBACiAKICAgICAiIiJSZWFkaW5nIGxvZ2dpbmcgY29uZmlnIGZyb20gYSAuaW5pLXN0eWxlIGNvbmZpZyBmaWxlLiIiIgogCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHddKykgXCtcKyAoW1x3XSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFx3KykgXCtcKyAoXHcrKSQiCiAKICAgICAjIGNvbmZpZzAgaXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLgogICAgIGNvbmZpZzAgPSAiIiIKQEAgLTEyOTIsNiArMTI2MiwyNCBAQAogICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQogCisgICAgZGVmIHRlc3RfY29uZmlnMF91c2luZ19jcF9vayhzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgZmlsZSB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKHRleHR3cmFwLmRlZGVudChzZWxmLmNvbmZpZzApKQorICAgICAgICAgICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgICAgIGNwLnJlYWRfZmlsZShmaWxlKQorICAgICAgICAgICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZyhjcCkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgICAgICMgV29uJ3Qgb3V0cHV0IGFueXRoaW5nCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgIyBPdXRwdXRzIGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKwogICAgIGRlZiB0ZXN0X2NvbmZpZzFfb2soc2VsZiwgY29uZmlnPWNvbmZpZzEpOgogICAgICAgICAjIEEgY29uZmlnIGZpbGUgZGVmaW5pbmcgYSBzdWItcGFyc2VyIGFzIHdlbGwuCiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgpAQCAtMTM4MSw3ICsxMzY5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2xvZ2dlcl9kaXNhYmxpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuZGlzYWJsZV90ZXN0KQotICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZm9vJykKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3NvbWVfcHJpc3RpbmVfbG9nZ2VyJykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2dnZXIuZGlzYWJsZWQpCiAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuZGlzYWJsZV90ZXN0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUobG9nZ2VyLmRpc2FibGVkKQpAQCAtMTM5NCwxNyArMTM4MiwyMyBAQAogCiAgICAgIiIiVGVzdCBmb3IgU29ja2V0SGFuZGxlciBvYmplY3RzLiIiIgogCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VENQU2VydmVyCisgICAgICAgIGFkZHJlc3MgPSAoJ2xvY2FsaG9zdCcsIDApCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlNldCB1cCBhIFRDUCBzZXJ2ZXIgdG8gcmVjZWl2ZSBsb2cgbWVzc2FnZXMsIGFuZCBhIFNvY2tldEhhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCAwKQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IFRlc3RUQ1BTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfc29ja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbGFzcyhzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfc29ja2V0LCAwLjAxKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZXJ2ZXIucmVhZHkud2FpdCgpCi0gICAgICAgIHNlbGYuc29ja19oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyKCdsb2NhbGhvc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCkKKyAgICAgICAgaGNscyA9IGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIE5vbmUpCiAgICAgICAgIHNlbGYubG9nX291dHB1dCA9ICcnCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5zb2NrX2hkbHIpCkBAIC0xNDQ0LDM1ICsxNDM4LDcwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2dfb3V0cHV0LCAic3BhbVxuZWdnc1xuIikKIAogICAgIGRlZiB0ZXN0X25vc2VydmVyKHNlbGYpOgorICAgICAgICAjIEF2b2lkIHRpbWluZy1yZWxhdGVkIGZhaWx1cmVzIGR1ZSB0byBTb2NrZXRIYW5kbGVyJ3Mgb3duIGhhcmQtd2lyZWQKKyAgICAgICAgIyBvbmUtc2Vjb25kIHRpbWVvdXQgb24gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKCkgKGlzc3VlICMxNjI2NCkuCisgICAgICAgIHNlbGYuc29ja19oZGxyLnJldHJ5U3RhcnQgPSAyLjUKICAgICAgICAgIyBLaWxsIHRoZSBzZXJ2ZXIKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgyLjApCi0gICAgICAgICNUaGUgbG9nZ2luZyBjYWxsIHNob3VsZCB0cnkgdG8gY29ubmVjdCwgd2hpY2ggc2hvdWxkIGZhaWwKKyAgICAgICAgIyBUaGUgbG9nZ2luZyBjYWxsIHNob3VsZCB0cnkgdG8gY29ubmVjdCwgd2hpY2ggc2hvdWxkIGZhaWwKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdEZWxpYmVyYXRlIG1pc3Rha2UnKQogICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgogICAgICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5leGNlcHRpb24oJ05ldmVyIHNlbnQnKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmVycm9yKCdOZXZlciBzZW50LCBlaXRoZXInKQogICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrX2hkbHIucmV0cnlUaW1lID4gbm93KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc2VsZi5zb2NrX2hkbHIucmV0cnlUaW1lLCBub3cpCiAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5zb2NrX2hkbHIucmV0cnlUaW1lIC0gbm93ICsgMC4wMDEpCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXJyb3IoJ05vciB0aGlzJykKIAorZGVmIF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCk6CisgICAgZmQsIGZuID0gdGVtcGZpbGUubWtzdGVtcChwcmVmaXg9J3Rlc3RfbG9nZ2luZ18nLCBzdWZmaXg9Jy5zb2NrJykKKyAgICBvcy5jbG9zZShmZCkKKyAgICAjIGp1c3QgbmVlZCBhIG5hbWUgLSBmaWxlIGNhbid0IGJlIHByZXNlbnQsIG9yIHdlJ2xsIGdldCBhbgorICAgICMgJ2FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnIGVycm9yLgorICAgIG9zLnJlbW92ZShmbikKKyAgICByZXR1cm4gZm4KKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIiksICJVbml4IHNvY2tldHMgcmVxdWlyZWQiKQorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFVuaXhTb2NrZXRIYW5kbGVyVGVzdChTb2NrZXRIYW5kbGVyVGVzdCk6CisKKyAgICAiIiJUZXN0IGZvciBTb2NrZXRIYW5kbGVyIHdpdGggdW5peCBzb2NrZXRzLiIiIgorCisgICAgaWYgdGhyZWFkaW5nIGFuZCBoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKToKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhTdHJlYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFNvY2tldEhhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFNvY2tldEhhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBEYXRhZ3JhbUhhbmRsZXJUZXN0KEJhc2VUZXN0KToKIAogICAgICIiIlRlc3QgZm9yIERhdGFncmFtSGFuZGxlci4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVEUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBVRFAgc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBEYXRhZ3JhbUhhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCAwKQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IFRlc3RVRFBTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGFncmFtLCAwLjAxKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZXJ2ZXIucmVhZHkud2FpdCgpCi0gICAgICAgIHNlbGYuc29ja19oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIoJ2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIE5vbmUpCiAgICAgICAgIHNlbGYubG9nX291dHB1dCA9ICcnCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5zb2NrX2hkbHIpCkBAIC0xNTA1LDIzICsxNTM0LDQ2IEBACiAgICAgICAgIHNlbGYuaGFuZGxlZC53YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvZ19vdXRwdXQsICJzcGFtXG5lZ2dzXG4iKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKSwgIlVuaXggc29ja2V0cyByZXF1aXJlZCIpCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVW5peERhdGFncmFtSGFuZGxlclRlc3QoRGF0YWdyYW1IYW5kbGVyVGVzdCk6CisKKyAgICAiIiJUZXN0IGZvciBEYXRhZ3JhbUhhbmRsZXIgdXNpbmcgVW5peCBzb2NrZXRzLiIiIgorCisgICAgaWYgdGhyZWFkaW5nIGFuZCBoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKToKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhEYXRhZ3JhbVNlcnZlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCkKKyAgICAgICAgRGF0YWdyYW1IYW5kbGVyVGVzdC5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBEYXRhZ3JhbUhhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBTeXNMb2dIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAKICAgICAiIiJUZXN0IGZvciBTeXNMb2dIYW5kbGVyIHVzaW5nIFVEUC4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVEUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBVRFAgc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTeXNMb2dIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VURQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX2RhdGFncmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbGFzcyhzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlcnZlci5yZWFkeS53YWl0KCkKLSAgICAgICAgc2VsZi5zbF9oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyKCgnbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCkpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc2xfaGRsciA9IGhjbHMoKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNsX2hkbHIgPSBoY2xzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKICAgICAgICAgc2VsZi5sb2dfb3V0cHV0ID0gJycKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNsX2hkbHIpCkBAIC0xNTU3LDYgKzE2MDksMjMgQEAKICAgICAgICAgc2VsZi5oYW5kbGVkLndhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9nX291dHB1dCwgYic8MTE+aFx4YzNceGE0bS1zcFx4YzNceGE0bScpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpLCAiVW5peCBzb2NrZXRzIHJlcXVpcmVkIikKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4U3lzTG9nSGFuZGxlclRlc3QoU3lzTG9nSGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgU3lzTG9nSGFuZGxlciB3aXRoIFVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZyBhbmQgaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIik6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBIVFRQSGFuZGxlclRlc3QoQmFzZVRlc3QpOgpAQCAtMTc3OSw3ICsxODQ4LDcgQEAKICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCiAgICAgICAgICAgICBzID0gc3RyZWFtLmdldHZhbHVlKCkKICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZmluZCgiVXNlcldhcm5pbmc6IEknbSB3YXJuaW5nIHlvdS4uLlxuIikgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHMuZmluZCgiVXNlcldhcm5pbmc6IEknbSB3YXJuaW5nIHlvdS4uLlxuIiksIDApCiAKICAgICAgICAgICAgICNTZWUgaWYgYW4gZXhwbGljaXQgZmlsZSB1c2VzIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgYV9maWxlID0gaW8uU3RyaW5nSU8oKQpAQCAtMTgxNyw3ICsxODg2LDcgQEAKIAogICAgICIiIlJlYWRpbmcgbG9nZ2luZyBjb25maWcgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCiAKLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcd10rKSBcK1wrIChbXHddKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oXHcrKSBcK1wrIChcdyspJCIKIAogICAgICMgY29uZmlnMCBpcyBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCiAgICAgY29uZmlnMCA9IHsKQEAgLTIzODksNiArMjQ1OCwzMiBAQAogICAgICAgICB9LAogICAgIH0KIAorICAgICMgQXMgY29uZmlnMCwgYnV0IHdpdGggcHJvcGVydGllcworICAgIGNvbmZpZzE0ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgICAgICAnLic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2Zvbyc6ICdiYXInLAorICAgICAgICAgICAgICAgICAgICAndGVybWluYXRvcic6ICchXG4nLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKwogICAgIG91dF9vZl9vcmRlciA9IHsKICAgICAgICAgInZlcnNpb24iOiAxLAogICAgICAgICAiZm9ybWF0dGVycyI6IHsKQEAgLTI2NTYsMTEgKzI3NTEsMjAgQEAKICAgICBkZWYgdGVzdF9jb25maWcxM19mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzEzKQogCisgICAgZGVmIHRlc3RfY29uZmlnMTRfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxNCkKKyAgICAgICAgICAgIGggPSBsb2dnaW5nLl9oYW5kbGVyc1snaGFuZDEnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZvbywgJ2JhcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgudGVybWluYXRvciwgJyFcbicpCisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ0V4Y2xhbWF0aW9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRwdXQuZ2V0dmFsdWUoKS5lbmRzd2l0aCgnRXhjbGFtYXRpb24hXG4nKSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ2xpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrJykKLSAgICBkZWYgc2V0dXBfdmlhX2xpc3RlbmVyKHNlbGYsIHRleHQpOgorICAgIGRlZiBzZXR1cF92aWFfbGlzdGVuZXIoc2VsZiwgdGV4dCwgdmVyaWZ5PU5vbmUpOgogICAgICAgICB0ZXh0ID0gdGV4dC5lbmNvZGUoInV0Zi04IikKICAgICAgICAgIyBBc2sgZm9yIGEgcmFuZG9tbHkgYXNzaWduZWQgcG9ydCAoYnkgdXNpbmcgcG9ydCAwKQotICAgICAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDApCisgICAgICAgIHQgPSBsb2dnaW5nLmNvbmZpZy5saXN0ZW4oMCwgdmVyaWZ5KQogICAgICAgICB0LnN0YXJ0KCkKICAgICAgICAgdC5yZWFkeS53YWl0KCkKICAgICAgICAgIyBOb3cgZ2V0IHRoZSBwb3J0IGFsbG9jYXRlZApAQCAtMjcyMCw2ICsyODI0LDY5IEBACiAgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0X2xpc3Rlbl92ZXJpZnkoc2VsZik6CisKKyAgICAgICAgZGVmIHZlcmlmeV9mYWlsKHN0dWZmKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZGVmIHZlcmlmeV9yZXZlcnNlKHN0dWZmKToKKyAgICAgICAgICAgIHJldHVybiBzdHVmZls6Oi0xXQorCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICB0b19zZW5kID0gdGV4dHdyYXAuZGVkZW50KENvbmZpZ0ZpbGVUZXN0LmNvbmZpZzEpCisgICAgICAgICMgRmlyc3QsIHNwZWNpZnkgYSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gdGhhdCB3aWxsIGZhaWwuCisgICAgICAgICMgV2UgZXhwZWN0IHRvIHNlZSBubyBvdXRwdXQsIHNpbmNlIG91ciBjb25maWd1cmF0aW9uCisgICAgICAgICMgbmV2ZXIgdG9vayBlZmZlY3QuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZCwgdmVyaWZ5X2ZhaWwpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGhhcyB0aGUgc3R1ZmYgd2UgbG9nZ2VkLgorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICBdLCBwYXQ9ciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiKQorCisgICAgICAgICMgTm93LCBwZXJmb3JtIG5vIHZlcmlmaWNhdGlvbi4gT3VyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgIyBzaG91bGQgdGFrZSBlZmZlY3QuCisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0b19zZW5kKSAgICAjIG5vIHZlcmlmeSBjYWxsYWJsZSBzcGVjaWZpZWQKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzMnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnNCcpLAorICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgc3RpbGwgaGFzIHRoZSBzdHVmZiB3ZSBsb2dnZWQgYmVmb3JlLgorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICBdLCBwYXQ9ciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiKQorCisgICAgICAgICMgTm93LCBwZXJmb3JtIHZlcmlmaWNhdGlvbiB3aGljaCB0cmFuc2Zvcm1zIHRoZSBieXRlcy4KKworICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmRbOjotMV0sIHZlcmlmeV9yZXZlcnNlKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnNScpLAorICAgICAgICAgICAgKCdFUlJPUicsICc2JyksCisgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBzdGlsbCBoYXMgdGhlIHN0dWZmIHdlIGxvZ2dlZCBiZWZvcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKICAgICBkZWYgdGVzdF9vdXRfb2Zfb3JkZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYub3V0X29mX29yZGVyKQogICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ215bW9kdWxlJykuaGFuZGxlcnNbMF0KQEAgLTI3NzksMTQgKzI5NDYsMTQgQEAKICAgICAgICAgbDIgPSBsb2dnaW5nLmdldExvZ2dlcignZGVmLmdoaScpCiAgICAgICAgIGMxID0gci5nZXRDaGlsZCgneHl6JykKICAgICAgICAgYzIgPSByLmdldENoaWxkKCd1dncueHl6JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd4eXonKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd1dncueHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzEsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd4eXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgbG9nZ2luZy5nZXRMb2dnZXIoJ3V2dy54eXonKSkKICAgICAgICAgYzEgPSBsMS5nZXRDaGlsZCgnZGVmJykKICAgICAgICAgYzIgPSBjMS5nZXRDaGlsZCgnZ2hpJykKICAgICAgICAgYzMgPSBsMS5nZXRDaGlsZCgnZGVmLmdoaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBjMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMSwgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzIsIGMzKQogCiAKIGNsYXNzIERlcml2ZWRMb2dSZWNvcmQobG9nZ2luZy5Mb2dSZWNvcmQpOgpAQCAtMjgyOSw3ICsyOTk2LDcgQEAKIAogY2xhc3MgUXVldWVIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAgICAgIyBEbyBub3QgYm90aGVyIHdpdGggYSBsb2dnZXIgbmFtZSBncm91cC4KLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKQEAgLTMxMjMsMTMgKzMyOTAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMCAtIHJlbGVhc2UnLCBzZWxmLmNhbGxlZFstMV0pCiAKICAgICBkZWYgdGVzdF93aXRoX2lvZXJyb3JfaW5fYWNxdWlyZShzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgT1NFcnJvcikKIAogICAgIGRlZiB0ZXN0X3dpdGhfaW9lcnJvcl9pbl9mbHVzaChzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdmbHVzaCcsIElPRXJyb3IpCisgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnZmx1c2gnLCBPU0Vycm9yKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9pb2Vycm9yX2luX2Nsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2Nsb3NlJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdjbG9zZScsIE9TRXJyb3IpCiAKICAgICBkZWYgdGVzdF93aXRoX3ZhbHVlZXJyb3JfaW5fYWNxdWlyZShzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgVmFsdWVFcnJvcikKQEAgLTMyMzUsNiArMzQwMiwyNSBAQAogICAgICAgICBsb2dnaW5nLnNldExvZ2dlckNsYXNzKGxvZ2dpbmcuTG9nZ2VyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuZ2V0TG9nZ2VyQ2xhc3MoKSwgbG9nZ2luZy5Mb2dnZXIpCiAKKyAgICBkZWYgdGVzdF9sb2dnaW5nX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMDAzNworICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBsb2dnaW5nCisKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNvbWUgZXJyb3IiKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oImV4Y2VwdGlvbiBpbiBfX2RlbF9fIikKKworICAgICAgICAgICAgYSA9IEEoKSIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJleGNlcHRpb24gaW4gX19kZWxfXyIsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiVmFsdWVFcnJvcjogc29tZSBlcnJvciIsIGVycikKKworCiBjbGFzcyBMb2dSZWNvcmRUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdF9zdHJfcmVwKHNlbGYpOgogICAgICAgICByID0gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKHt9KQpAQCAtMzM1Miw2ICszNTM4LDEyIEBACiAgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6TG9nIGFuIGVycm9yIikKIAogICAgIGRlZiB0ZXN0X2ZpbGVuYW1lKHNlbGYpOgorCisgICAgICAgIGRlZiBjbGVhbnVwKGgxLCBoMiwgZm4pOgorICAgICAgICAgICAgaDEuY2xvc2UoKQorICAgICAgICAgICAgaDIuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorCiAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9J3Rlc3QubG9nJykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnaW5nLnJvb3QuaGFuZGxlcnMpLCAxKQpAQCAtMzM1OSwxNyArMzU1MSwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaGFuZGxlciwgbG9nZ2luZy5GaWxlSGFuZGxlcikKIAogICAgICAgICBleHBlY3RlZCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoJ3Rlc3QubG9nJywgJ2EnKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoZXhwZWN0ZWQuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubW9kZSwgZXhwZWN0ZWQuc3RyZWFtLm1vZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubmFtZSwgZXhwZWN0ZWQuc3RyZWFtLm5hbWUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCBoYW5kbGVyLCBleHBlY3RlZCwgJ3Rlc3QubG9nJykKIAogICAgIGRlZiB0ZXN0X2ZpbGVtb2RlKHNlbGYpOgorCisgICAgICAgIGRlZiBjbGVhbnVwKGgxLCBoMiwgZm4pOgorICAgICAgICAgICAgaDEuY2xvc2UoKQorICAgICAgICAgICAgaDIuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorCiAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9J3Rlc3QubG9nJywgZmlsZW1vZGU9J3diJykKIAogICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5yb290LmhhbmRsZXJzWzBdCiAgICAgICAgIGV4cGVjdGVkID0gbG9nZ2luZy5GaWxlSGFuZGxlcigndGVzdC5sb2cnLCAnd2InKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoZXhwZWN0ZWQuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubW9kZSwgZXhwZWN0ZWQuc3RyZWFtLm1vZGUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCBoYW5kbGVyLCBleHBlY3RlZCwgJ3Rlc3QubG9nJykKIAogICAgIGRlZiB0ZXN0X3N0cmVhbShzZWxmKToKICAgICAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKQpAQCAtMzgyNSw2ICs0MDIzLDYzIEBACiAgICAgICAgIGFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm4sICdXNycsIGRlbGF5PVRydWUpCiAKKyAgICBkZWYgdGVzdF9jb21wdXRlX3JvbGxvdmVyX2RhaWx5X2F0dGltZShzZWxmKToKKyAgICAgICAgY3VycmVudFRpbWUgPSAwCisgICAgICAgIGF0VGltZSA9IGRhdGV0aW1lLnRpbWUoMTIsIDAsIDApCisgICAgICAgIHJoID0gbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoCisgICAgICAgICAgICBzZWxmLmZuLCB3aGVuPSdNSUROSUdIVCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIHV0Yz1UcnVlLAorICAgICAgICAgICAgYXRUaW1lPWF0VGltZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKGN1cnJlbnRUaW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGN1cnJlbnRUaW1lICsgMTIgKiA2MCAqIDYwKQorCisgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIoY3VycmVudFRpbWUgKyAxMyAqIDYwICogNjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgY3VycmVudFRpbWUgKyAzNiAqIDYwICogNjApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByaC5jbG9zZSgpCisKKyAgICAjQHVuaXR0ZXN0LnNraXBJZihUcnVlLCAnVGVtcG9yYXJpbHkgc2tpcHBlZCB3aGlsZSBmYWlsdXJlcyBpbnZlc3RpZ2F0ZWQuJykKKyAgICBkZWYgdGVzdF9jb21wdXRlX3JvbGxvdmVyX3dlZWtseV9hdHRpbWUoc2VsZik6CisgICAgICAgIGN1cnJlbnRUaW1lID0gaW50KHRpbWUudGltZSgpKQorICAgICAgICB0b2RheSA9IGN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUgJSA4NjQwMAorCisgICAgICAgIGF0VGltZSA9IGRhdGV0aW1lLnRpbWUoMTIsIDAsIDApCisKKyAgICAgICAgd2RheSA9IHRpbWUuZ210aW1lKHRvZGF5KS50bV93ZGF5CisgICAgICAgIGZvciBkYXkgaW4gcmFuZ2UoNyk6CisgICAgICAgICAgICByaCA9IGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKAorICAgICAgICAgICAgICAgIHNlbGYuZm4sIHdoZW49J1clZCcgJSBkYXksIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIHV0Yz1UcnVlLAorICAgICAgICAgICAgICAgIGF0VGltZT1hdFRpbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgd2RheSA+IGRheToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgcm9sbG92ZXIgZGF5IGhhcyBhbHJlYWR5IHBhc3NlZCB0aGlzIHdlZWssIHNvIHdlCisgICAgICAgICAgICAgICAgICAgICMgZ28gb3ZlciBpbnRvIG5leHQgd2VlaworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICg3IC0gd2RheSArIGRheSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IChkYXkgLSB3ZGF5KQorICAgICAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCBleHBlY3RlZCBpcyBpbiBkYXlzIGZyb20gbm93LCBjb252ZXJ0IHRvIHNlY29uZHMKKyAgICAgICAgICAgICAgICBleHBlY3RlZCAqPSAyNCAqIDYwICogNjAKKyAgICAgICAgICAgICAgICAjIEFkZCBpbiB0aGUgcm9sbG92ZXIgdGltZQorICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IDEyICogNjAgKiA2MAorICAgICAgICAgICAgICAgICMgQWRkIGluIGFkanVzdG1lbnQgZm9yIHRvZGF5CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gdG9kYXkKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIodG9kYXkpCisgICAgICAgICAgICAgICAgaWYgYWN0dWFsICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnZmFpbGVkIGluIHRpbWV6b25lOiAlZCcgJSB0aW1lLnRpbWV6b25lKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnbG9jYWwgdmFyczogJXMnICUgbG9jYWxzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGlmIGRheSA9PSB3ZGF5OgorICAgICAgICAgICAgICAgICAgICAjIGdvZXMgaW50byBmb2xsb3dpbmcgd2VlaworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCArPSA3ICogMjQgKiA2MCAqIDYwCisgICAgICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKHRvZGF5ICsgMTMgKiA2MCAqIDYwKQorICAgICAgICAgICAgICAgIGlmIGFjdHVhbCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZhaWxlZCBpbiB0aW1lem9uZTogJWQnICUgdGltZS50aW1lem9uZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2xvY2FsIHZhcnM6ICVzJyAlIGxvY2FscygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmguY2xvc2UoKQorCisKIGRlZiBzZWNzKCoqa3cpOgogICAgIHJldHVybiBkYXRldGltZS50aW1lZGVsdGEoKiprdykgLy8gZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MSkKIApAQCAtMzg4Myw3ICs0MTM4LDcgQEAKICAgICAgICAgaC5oYW5kbGUocikKICAgICAgICAgaC5jbG9zZSgpCiAgICAgICAgICMgTm93IHNlZSBpZiB0aGUgZXZlbnQgaXMgcmVjb3JkZWQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9yZWNzIDwgd2luMzJldnRsb2cuR2V0TnVtYmVyT2ZFdmVudExvZ1JlY29yZHMoZWxoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG51bV9yZWNzLCB3aW4zMmV2dGxvZy5HZXROdW1iZXJPZkV2ZW50TG9nUmVjb3JkcyhlbGgpKQogICAgICAgICBmbGFncyA9IHdpbjMyZXZ0bG9nLkVWRU5UTE9HX0JBQ0tXQVJEU19SRUFEIHwgXAogICAgICAgICAgICAgICAgIHdpbjMyZXZ0bG9nLkVWRU5UTE9HX1NFUVVFTlRJQUxfUkVBRAogICAgICAgICBmb3VuZCA9IEZhbHNlCkBAIC0zOTE2LDcgKzQxNzEsOCBAQAogICAgICAgICAgICAgICAgICBTTVRQSGFuZGxlclRlc3QsIEZpbGVIYW5kbGVyVGVzdCwgUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsCiAgICAgICAgICAgICAgICAgIExhc3RSZXNvcnRUZXN0LCBMb2dSZWNvcmRUZXN0LCBFeGNlcHRpb25UZXN0LAogICAgICAgICAgICAgICAgICBTeXNMb2dIYW5kbGVyVGVzdCwgSFRUUEhhbmRsZXJUZXN0LCBOVEV2ZW50TG9nSGFuZGxlclRlc3QsCi0gICAgICAgICAgICAgICAgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlclRlc3QKKyAgICAgICAgICAgICAgICAgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdCwgVW5peFNvY2tldEhhbmRsZXJUZXN0LAorICAgICAgICAgICAgICAgICBVbml4RGF0YWdyYW1IYW5kbGVyVGVzdCwgVW5peFN5c0xvZ0hhbmRsZXJUZXN0CiAgICAgICAgICAgICAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5IGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CmluZGV4IDNmOWMxZTIuLjVmMTQ3OTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKQEAgLTEwNzksNyArMTA3OSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnYmlnJywgc2lnbmVkPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnbGl0dGxlJywgc2lnbmVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2xpdHRsZScsIHNpZ25lZD1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoLTEpLnRvX2J5dGVzLCAyLCAnYmlnJywgc2lnbmVkPUZhbHNlKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2JpZycsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2xpdHRsZScsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCkudG9fYnl0ZXMoMCwgJ2JpZycpLCBiJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEpLnRvX2J5dGVzKDUsICdiaWcnKSwgYidceDAwXHgwMFx4MDBceDAwXHgwMScpCkBAIC0xMjM1LDYgKzEyMzUsMTMgQEAKICAgICAgICAgZm9yIG4gaW4gbWFwKGludCwgaW50ZWdlcnMpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAwKQogCisgICAgZGVmIHRlc3Rfc2hpZnRfYm9vbChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjE0MjI6IGVuc3VyZSB0aGF0IGJvb2wgPDwgaW50IGFuZCBib29sID4+IGludCByZXR1cm4gaW50CisgICAgICAgIGZvciB2YWx1ZSBpbiAoVHJ1ZSwgRmFsc2UpOgorICAgICAgICAgICAgZm9yIHNoaWZ0IGluICgwLCAyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUgPDwgc2hpZnQpLCBpbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlID4+IHNoaWZ0KSwgaW50KQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChMb25nVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbHptYS5weSBiL0xpYi90ZXN0L3Rlc3RfbHptYS5weQppbmRleCAxNjBiMGU4Li4zZTczZDdmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2x6bWEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sem1hLnB5CkBAIC0zODMsNiArMzgzLDggQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJ3IikgYXMgZjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJ4IikgYXMgZjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJhIikgYXMgZjoKICAgICAgICAgICAgIHBhc3MKIApAQCAtNDEwLDEzICs0MTIsMjkgQEAKICAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoVEVTVEZOLCAiYWIiKToKICAgICAgICAgICAgICAgICBwYXNzCiAKKyAgICBkZWYgdGVzdF9pbml0X3dpdGhfeF9tb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIpOgorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF9pbml0X2JhZF9tb2RlKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgKDMsICJ4IikpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAiIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4IikKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4dCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAieCsiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInJ4IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ3eCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAicnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgpAQCAtNjk4LDYgKzcxNiwyMCBAQAogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWls6MTI4XSkpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgICMgRHJvcCBzdHJlYW0gZm9vdGVyOiBDUkMgKDQgYnl0ZXMpLCBpbmRleCBzaXplICg0IGJ5dGVzKSwKKyAgICAgICAgIyBmbGFncyAoMiBieXRlcykgYW5kIG1hZ2ljIG51bWJlciAoMiBieXRlcykuCisgICAgICAgIHRydW5jYXRlZCA9IENPTVBSRVNTRURfWFpbOi0xMl0KKyAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKGxlbihJTlBVVCkpLCBJTlBVVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSAxMi1ieXRlIGhlYWRlci4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTIpOgorICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKICAgICBkZWYgdGVzdF9yZWFkX2JhZF9hcmdzKHNlbGYpOgogICAgICAgICBmID0gTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSkKICAgICAgICAgZi5jbG9zZSgpCkBAIC0xMDQxLDggKzEwNzMsNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgIiIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAieCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAicmJ0IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCkBAIC0xMDkxLDYgKzExMjEsMTYgQEAKICAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKGJpbywgInJ0IiwgbmV3bGluZT0iXHIiKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW3RleHRdKQogCisgICAgZGVmIHRlc3RfeF9tb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIsICJ4dCIpOgorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKwogCiBjbGFzcyBNaXNjZWxsYW5lb3VzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkgYi9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKaW5kZXggNWU5ZTMwYS4uMDk5MWY3NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQpAQCAtMzAwLDcgKzMwMCw3IEBACiAKICAgICBkZWYgdGVzdF9pdGVya2V5cyhzZWxmKToKICAgICAgICAgIyBHZXQga2V5cyB1c2luZyBpdGVya2V5cygpCi0gICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3gua2V5cywgZG9fa2V5cz1UcnVlLCBkb192YWx1ZXM9RmFsc2UpCisgICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3guaXRlcmtleXMsIGRvX2tleXM9VHJ1ZSwgZG9fdmFsdWVzPUZhbHNlKQogCiAgICAgZGVmIHRlc3Rfa2V5cyhzZWxmKToKICAgICAgICAgIyBHZXQga2V5cyB1c2luZyBrZXlzKCkKQEAgLTMwOCw3ICszMDgsNyBAQAogCiAgICAgZGVmIHRlc3RfaXRlcnZhbHVlcyhzZWxmKToKICAgICAgICAgIyBHZXQgdmFsdWVzIHVzaW5nIGl0ZXJ2YWx1ZXMoKQotICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94LnZhbHVlcywgZG9fa2V5cz1GYWxzZSwKKyAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5pdGVydmFsdWVzLCBkb19rZXlzPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdmFsdWVzPVRydWUpCiAKICAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgpAQCAtMzIyLDcgKzMyMiw3IEBACiAKICAgICBkZWYgdGVzdF9pdGVyaXRlbXMoc2VsZik6CiAgICAgICAgICMgR2V0IGtleXMgYW5kIHZhbHVlcyB1c2luZyBpdGVyaXRlbXMoKQotICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94Lml0ZW1zLCBkb19rZXlzPVRydWUsCisgICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3guaXRlcml0ZW1zLCBkb19rZXlzPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192YWx1ZXM9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgpAQCAtNTY0LDEyICs1NjQsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19kZWxpdGVtX18oJycpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5kaXNjYXJkKCcnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19zZXRpdGVtX18oJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlcmtleXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LnZhbHVlcygpLl9fbmV4dF9fKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Lml0ZXJ2YWx1ZXMoKS5fX25leHRfXygpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2l0ZXJfXygpLl9fbmV4dF9fKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LnZhbHVlcygpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5pdGVtcygpLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlcml0ZW1zKCkuX19uZXh0X18oKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlbXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guZ2V0KCcnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19nZXRpdGVtX18oJycpKQpAQCAtNTk2LDcgKzU5Niw3IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIFRlc3RNYWlsYm94LnNldFVwKHNlbGYpCi0gICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKSBvciBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgIGlmIChvcy5uYW1lID09ICdudCcpIG9yIChzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicpOgogICAgICAgICAgICAgc2VsZi5fYm94LmNvbG9uID0gJyEnCiAKICAgICBkZWYgYXNzZXJ0TWFpbGJveEVtcHR5KHNlbGYpOgpAQCAtMTAyMCw3ICsxMDIwLDcgQEAKICAgICAgICAgbXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKHNlbGYuX3BhdGgpCiAgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9ib3gua2V5cygpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2JveC5pdGVya2V5cygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpLCB2YWx1ZXMpCiAgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUsIG9zLnBhdGguZ2V0bXRpbWUoc2VsZi5fcGF0aCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkgYi9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKaW5kZXggMGIxNDEzNy4uMDY4YzQ3MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQpAQCAtMjIsMzcgKzIyLDEzIEBACiAKIGNsYXNzIEludFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CiAgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoZSBmdWxsIHJhbmdlIG9mIFB5dGhvbiBpbnRzLgotICAgICAgICBuID0gc3lzLm1heHNpemUKKyAgICAgICAgIyBUZXN0IGEgcmFuZ2Ugb2YgUHl0aG9uIGludHMgbGFyZ2VyIHRoYW4gdGhlIG1hY2hpbmUgd29yZCBzaXplLgorICAgICAgICBuID0gc3lzLm1heHNpemUgKiogMgogICAgICAgICB3aGlsZSBuOgogICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgtbiwgbik6CiAgICAgICAgICAgICAgICAgc2VsZi5oZWxwZXIoZXhwZWN0ZWQpCiAgICAgICAgICAgICBuID0gbiA+PiAxCiAKLSAgICBkZWYgdGVzdF9pbnQ2NChzZWxmKToKLSAgICAgICAgIyBTaW11bGF0ZSBpbnQgbWFyc2hhbGluZyBvbiBhIDY0LWJpdCBib3guICBUaGlzIGlzIG1vc3QgaW50ZXJlc3RpbmcgaWYKLSAgICAgICAgIyB3ZSdyZSBydW5uaW5nIHRoZSB0ZXN0IG9uIGEgMzItYml0IGJveCwgb2YgY291cnNlLgotCi0gICAgICAgIGRlZiB0b19saXR0bGVfZW5kaWFuX3N0cmluZyh2YWx1ZSwgbmJ5dGVzKToKLSAgICAgICAgICAgIGIgPSBieXRlYXJyYXkoKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmJ5dGVzKToKLSAgICAgICAgICAgICAgICBiLmFwcGVuZCh2YWx1ZSAmIDB4ZmYpCi0gICAgICAgICAgICAgICAgdmFsdWUgPj49IDgKLSAgICAgICAgICAgIHJldHVybiBiCi0KLSAgICAgICAgbWF4aW50NjQgPSAoMSA8PCA2MykgLSAxCi0gICAgICAgIG1pbmludDY0ID0gLW1heGludDY0LTEKLQotICAgICAgICBmb3IgYmFzZSBpbiBtYXhpbnQ2NCwgbWluaW50NjQsIC1tYXhpbnQ2NCwgLShtaW5pbnQ2NCA+PiAxKToKLSAgICAgICAgICAgIHdoaWxlIGJhc2U6Ci0gICAgICAgICAgICAgICAgcyA9IGInSScgKyB0b19saXR0bGVfZW5kaWFuX3N0cmluZyhiYXNlLCA4KQotICAgICAgICAgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGdvdCkKLSAgICAgICAgICAgICAgICBpZiBiYXNlID09IC0xOiAgIyBhIGZpeGVkLXBvaW50IGZvciBzaGlmdGluZyByaWdodCAxCi0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA+Pj0gMQotCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKICAgICAgICAgZm9yIGIgaW4gKFRydWUsIEZhbHNlKToKICAgICAgICAgICAgIHNlbGYuaGVscGVyKGIpCkBAIC0xOTksMTAgKzE3NSwxNCBAQAogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgdGVzdF9sb2Fkc19yZWN1cnNpb24oc2VsZik6CisgICAgZGVmIHRlc3RfbG9hZHNfMnhfY29kZShzZWxmKToKICAgICAgICAgcyA9IGInYycgKyAoYidYJyAqIDQqNCkgKyBiJ3snICogMioqMjAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkcywgcykKIAorICAgIGRlZiB0ZXN0X2xvYWRzX3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgcyA9IGInYycgKyAoYidYJyAqIDQqNSkgKyBiJ3snICogMioqMjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkcywgcykKKwogICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9saW1pdChzZWxmKToKICAgICAgICAgIyBDcmVhdGUgYSBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZS4KICAgICAgICAgaGVhZCA9IGxhc3QgPSBbXQpAQCAtMjgwLDE1ICsyNjAsMjAgQEAKIAogICAgIGRlZiB0ZXN0X2JhZF9yZWFkZXIoc2VsZik6CiAgICAgICAgIGNsYXNzIEJhZFJlYWRlcihpby5CeXRlc0lPKToKLSAgICAgICAgICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAgICAgICAgIGIgPSBzdXBlcigpLnJlYWQobikKKyAgICAgICAgICAgIGRlZiByZWFkaW50byhzZWxmLCBidWYpOgorICAgICAgICAgICAgICAgIG4gPSBzdXBlcigpLnJlYWRpbnRvKGJ1ZikKICAgICAgICAgICAgICAgICBpZiBuIGlzIG5vdCBOb25lIGFuZCBuID4gNDoKLSAgICAgICAgICAgICAgICAgICAgYiArPSBiJyAnICogMTAqKjYKLSAgICAgICAgICAgICAgICByZXR1cm4gYgorICAgICAgICAgICAgICAgICAgICBuICs9IDEwKio2CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgZm9yIHZhbHVlIGluICgxLjAsIDFqLCBiJzAxMjM0NTY3ODknLCAnMDEyMzQ1Njc4OScpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkUmVhZGVyKG1hcnNoYWwuZHVtcHModmFsdWUpKSkKIAorICAgIGRlZiBfdGVzdF9lb2Yoc2VsZik6CisgICAgICAgIGRhdGEgPSBtYXJzaGFsLmR1bXBzKCgiaGVsbG8iLCAiZG9sbHkiLCBOb25lKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGEpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBtYXJzaGFsLmxvYWRzLCBkYXRhWzA6IGldKQorCiBMQVJHRV9TSVpFID0gMioqMzEKIHBvaW50ZXJfc2l6ZSA9IDggaWYgc3lzLm1heHNpemUgPiAweEZGRkZGRkZGIGVsc2UgNAogCkBAIC0zMzMsNiArMzE4LDEyMiBAQAogICAgIGRlZiB0ZXN0X2J5dGVhcnJheShzZWxmLCBzaXplKToKICAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZShieXRlYXJyYXkoc2l6ZSkpCiAKK2RlZiBDb2xsZWN0T2JqZWN0SURzKGlkcywgb2JqKToKKyAgICAiIiJDb2xsZWN0IG9iamVjdCBpZHMgc2VlbiBpbiBhIHN0cnVjdHVyZSIiIgorICAgIGlmIGlkKG9iaikgaW4gaWRzOgorICAgICAgICByZXR1cm4KKyAgICBpZHMuYWRkKGlkKG9iaikpCisgICAgaWYgaXNpbnN0YW5jZShvYmosIChsaXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQpKToKKyAgICAgICAgZm9yIGUgaW4gb2JqOgorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIGUpCisgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CisgICAgICAgIGZvciBrLCB2IGluIG9iai5pdGVtcygpOgorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIGspCisgICAgICAgICAgICBDb2xsZWN0T2JqZWN0SURzKGlkcywgdikKKyAgICByZXR1cm4gbGVuKGlkcykKKworY2xhc3MgSW5zdGFuY2luZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisgICAgaW50b2JqID0gMTIzMzIxCisgICAgZmxvYXRvYmogPSAxLjIzNDUKKyAgICBzdHJvYmogPSAiYWJjZGUiKjMKKyAgICBkaWN0b2JqID0geyJoZWxsbyI6ZmxvYXRvYmosICJnb29kYnllIjpmbG9hdG9iaiwgZmxvYXRvYmo6ImhlbGxvIn0KKworICAgIGRlZiBoZWxwZXIzKHNlbGYsIHJzYW1wbGUsIHJlY3Vyc2l2ZT1GYWxzZSwgc2ltcGxlPUZhbHNlKToKKyAgICAgICAgI3dlIGhhdmUgdHdvIGluc3RhbmNlcworICAgICAgICBzYW1wbGUgPSAocnNhbXBsZSwgcnNhbXBsZSkKKworICAgICAgICBuMCA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIHNhbXBsZSkKKworICAgICAgICBzMyA9IG1hcnNoYWwuZHVtcHMoc2FtcGxlLCAzKQorICAgICAgICBuMyA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIG1hcnNoYWwubG9hZHMoczMpKQorCisgICAgICAgICNzYW1lIG51bWJlciBvZiBpbnN0YW5jZXMgZ2VuZXJhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjMsIG4wKQorCisgICAgICAgIGlmIG5vdCByZWN1cnNpdmU6CisgICAgICAgICAgICAjY2FuIGNvbXBhcmUgd2l0aCB2ZXJzaW9uIDIKKyAgICAgICAgICAgIHMyID0gbWFyc2hhbC5kdW1wcyhzYW1wbGUsIDIpCisgICAgICAgICAgICBuMiA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIG1hcnNoYWwubG9hZHMoczIpKQorICAgICAgICAgICAgI29sZCBmb3JtYXQgZ2VuZXJhdGVkIG1vcmUgaW5zdGFuY2VzCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobjIsIG4wKQorCisgICAgICAgICAgICAjaWYgY29tcGxleCBvYmplY3RzIGFyZSBpbiB0aGVyZSwgb2xkIGZvcm1hdCBpcyBsYXJnZXIKKyAgICAgICAgICAgIGlmIG5vdCBzaW1wbGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzMiksIGxlbihzMykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzMiksIGxlbihzMykpCisKKyAgICBkZWYgdGVzdEludChzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5pbnRvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmludG9iaiwgc2ltcGxlPVRydWUpCisKKyAgICBkZWYgdGVzdEZsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmZsb2F0b2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5mbG9hdG9iaikKKworICAgIGRlZiB0ZXN0U3RyKHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuc3Ryb2JqKQorCisgICAgZGVmIHRlc3REaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmRpY3RvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmRpY3RvYmopCisKKyAgICBkZWYgdGVzdE1vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgY29kZSA9IGYucmVhZCgpCisgICAgICAgIGlmIF9fZmlsZV9fLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsIF9fZmlsZV9fLCAiZXhlYyIpCisgICAgICAgIHNlbGYuaGVscGVyKGNvZGUpCisgICAgICAgIHNlbGYuaGVscGVyMyhjb2RlKQorCisgICAgZGVmIHRlc3RSZWN1cnNpb24oc2VsZik6CisgICAgICAgIGQgPSBkaWN0KHNlbGYuZGljdG9iaikKKyAgICAgICAgZFsic2VsZiJdID0gZAorICAgICAgICBzZWxmLmhlbHBlcjMoZCwgcmVjdXJzaXZlPVRydWUpCisgICAgICAgIGwgPSBbc2VsZi5kaWN0b2JqXQorICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICBzZWxmLmhlbHBlcjMobCwgcmVjdXJzaXZlPVRydWUpCisKK2NsYXNzIENvbXBhdGliaWxpdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIHZlcnNpb24pOgorICAgICAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBjb2RlID0gZi5yZWFkKCkKKyAgICAgICAgaWYgX19maWxlX18uZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoY29kZSwgX19maWxlX18sICJleGVjIikKKyAgICAgICAgZGF0YSA9IG1hcnNoYWwuZHVtcHMoY29kZSwgdmVyc2lvbikKKyAgICAgICAgbWFyc2hhbC5sb2FkcyhkYXRhKQorCisgICAgZGVmIHRlc3QwVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDApCisKKyAgICBkZWYgdGVzdDFUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMSkKKworICAgIGRlZiB0ZXN0MlRvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgyKQorCisgICAgZGVmIHRlc3QzVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDMpCisKK2NsYXNzIEludGVybmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisgICAgc3Ryb2JqID0gInRoaXMgaXMgYW4gaW50ZXJuZWQgc3RyaW5nIgorICAgIHN0cm9iaiA9IHN5cy5pbnRlcm4oc3Ryb2JqKQorCisgICAgZGVmIHRlc3RJbnRlcm4oc2VsZik6CisgICAgICAgIHMgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoc2VsZi5zdHJvYmopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYuc3Ryb2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMpLCBpZChzZWxmLnN0cm9iaikpCisgICAgICAgIHMyID0gc3lzLmludGVybihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMyKSwgaWQocykpCisKKyAgICBkZWYgdGVzdE5vSW50ZXJuKHNlbGYpOgorICAgICAgICBzID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHNlbGYuc3Ryb2JqLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQoc2VsZi5zdHJvYmopKQorICAgICAgICBzMiA9IHN5cy5pbnRlcm4ocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzMiksIGlkKHMpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChJbnRUZXN0Q2FzZSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CmluZGV4IDRmYTlhMTkuLjllZjI5M2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQpAQCAtNTIwLDEyICs1MjAsMTIgQEAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9zZWVrKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMSwgMikKIAogICAgIGRlZiB0ZXN0X3RleHRpb19wcm9wZXJ0aWVzKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKaW5kZXggYmYwZWFhZC4uZTdkZjhhNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpAQCAtMzUyLDYgKzM1MiwxNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhMWzBdLCBiKQogCisgICAgZGVmIHRlc3RfcmV2ZXJzZWQoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICAgICAgYXNsaXN0ID0gbGlzdChyZXZlcnNlZChtLnRvbGlzdCgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChtKSksIGFzbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChtKSksIGxpc3QobVs6Oi0xXSkpCisKKwogIyBWYXJpYXRpb25zIG9uIHNvdXJjZSBvYmplY3RzIGZvciB0aGUgYnVmZmVyOiBieXRlcy1saWtlIG9iamVjdHMsIHRoZW4gYXJyYXlzCiAjIHdpdGggaXRlbXNpemUgPiAxLgogIyBOT1RFOiBzdXBwb3J0IGZvciBtdWx0aS1kaW1lbnNpb25hbCBvYmplY3RzIGlzIHVuaW1wbGVtZW50ZWQuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKaW5kZXggMTEzYzdmZC4uMjQ4OWZmNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQpAQCAtMzYwLDYgKzM2MCwxNSBAQAogICAgICAgICAgICAgICAgIGFuZCBlbC5nZXRBdHRyaWJ1dGUoInNwYW0yIikgPT0gImJhbTIiKQogICAgICAgICBkb20udW5saW5rKCkKIAorICAgIGRlZiB0ZXN0R2V0QXR0ckxpc3Qoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0R2V0QXR0clZhbHVlcyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RHZXRBdHRyTGVuZ3RoKHNlbGYpOgorICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdEdldEF0dHJpYnV0ZShzZWxmKToKICAgICAgICAgZG9tID0gRG9jdW1lbnQoKQogICAgICAgICBjaGlsZCA9IGRvbS5hcHBlbmRDaGlsZCgKQEAgLTM4MCw2ICszODksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkMi5nZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy5weXRob24ub3JnIiwgIm1pc3NpbmciKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKIAorICAgIGRlZiB0ZXN0R2V0QXR0cmlidXRlTm9kZShzZWxmKTogcGFzcworCiAgICAgZGVmIHRlc3RHZXRFbGVtZW50c0J5VGFnTmFtZU5TKHNlbGYpOgogICAgICAgICBkPSIiIjxmb28geG1sbnM6bWluaWRvbT0naHR0cDovL3B5eG1sLnNmLm5ldC9taW5pZG9tJz4KICAgICAgICAgPG1pbmlkb206bXllbGVtLz4KQEAgLTQ1MCw2ICs0NjEsOCBAQAogICAgICAgICBzZWxmLmNvbmZpcm0oc3RyKG5vZGUpID09IHJlcHIobm9kZSkpCiAgICAgICAgIGRvbS51bmxpbmsoKQogCisgICAgZGVmIHRlc3RUZXh0Tm9kZVJlcHIoc2VsZik6IHBhc3MKKwogICAgIGRlZiB0ZXN0V3JpdGVYTUwoc2VsZik6CiAgICAgICAgIHN0ciA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiID8+PGEgYj0iYyIvPicKICAgICAgICAgZG9tID0gcGFyc2VTdHJpbmcoc3RyKQpAQCAtNTEzLDYgKzUyNiwxNCBAQAogICAgICAgICAgICAgICAgIGFuZCBwaS5sb2NhbE5hbWUgaXMgTm9uZQogICAgICAgICAgICAgICAgIGFuZCBwaS5uYW1lc3BhY2VVUkkgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UpCiAKKyAgICBkZWYgdGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvblJlcHIoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0VGV4dFJlcHIoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0V3JpdGVUZXh0KHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdERvY3VtZW50RWxlbWVudChzZWxmKTogcGFzcworCiAgICAgZGVmIHRlc3RUb29NYW55RG9jdW1lbnRFbGVtZW50cyhzZWxmKToKICAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCiAgICAgICAgIGVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgiZXh0cmEiKQpAQCAtNTIxLDYgKzU0MiwyNiBAQAogICAgICAgICBlbGVtLnVubGluaygpCiAgICAgICAgIGRvYy51bmxpbmsoKQogCisgICAgZGVmIHRlc3RDcmVhdGVFbGVtZW50TlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q3JlYXRlQXR0cmlidXRlTlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2Uoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VTdHJpbmcoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q29tbWVudChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEl0ZW0oc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RJdGVtcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEl0ZW1OUyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEtleXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RLZXlzTlMoc2VsZik6IHBhc3MKKwogICAgIGRlZiB0ZXN0UmVtb3ZlTmFtZWRJdGVtKHNlbGYpOgogICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYyBhPScnLz4iKQogICAgICAgICBlID0gZG9jLmRvY3VtZW50RWxlbWVudApAQCAtNTQwLDYgKzU4MSwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5vdEZvdW5kRXJyLCBhdHRycy5yZW1vdmVOYW1lZEl0ZW1OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly94bWwucHl0aG9uLm9yZy8iLCAiYiIpCiAKKyAgICBkZWYgdGVzdEF0dHJMaXN0VmFsdWVzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0TGVuZ3RoKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0X19nZXRpdGVtX18oc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RfX3NldGl0ZW1fXyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RTZXRBdHRyVmFsdWVhbmROb2RlVmFsdWUoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VFbGVtZW50KHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlQXR0cmlidXRlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZUVsZW1lbnROYW1lc3BhY2VzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlQXR0cmlidXRlTmFtZXNwYWNlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbnMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q2hpbGROb2RlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RGaXJzdENoaWxkKHNlbGYpOiBwYXNzCisKICAgICBkZWYgdGVzdEhhc0NoaWxkTm9kZXMoc2VsZik6CiAgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCI8ZG9jPjxmb28vPjwvZG9jPiIpCiAgICAgICAgIGRvYyA9IGRvbS5kb2N1bWVudEVsZW1lbnQKQEAgLTE0NTMsNiArMTUxOCwxMCBAQAogICAgICAgICBkb2MyID0gcGFyc2VTdHJpbmcoZG9jLnRveG1sKCkpCiAgICAgICAgIHNlbGYuY29uZmlybShkb2MyLm5hbWVzcGFjZVVSSSA9PSB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSkKIAorICAgIGRlZiB0ZXN0RXhjZXB0aW9uT25TcGFjZXNJblhNTE5TVmFsdWUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnVW5zdXBwb3J0ZWQgc3ludGF4Jyk6CisgICAgICAgICAgICBwYXJzZVN0cmluZygnPGVsZW1lbnQgeG1sbnM6YWJjPSJodHRwOmFiYy5jb20vZGUgZiBnL2hpL2ogayI+PGFiYzpmb28gLz48L2VsZW1lbnQ+JykKKwogICAgIGRlZiB0ZXN0RG9jUmVtb3ZlQ2hpbGQoc2VsZik6CiAgICAgICAgIGRvYyA9IHBhcnNlKHRzdGZpbGUpCiAgICAgICAgIHRpdGxlX3RhZyA9IGRvYy5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRJVExFIilbMF0KQEAgLTE0NjIsNiArMTUzMSwxMyBAQAogICAgICAgICBudW1fY2hpbGRyZW5fYWZ0ZXIgPSBsZW4oZG9jLmNoaWxkTm9kZXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fY2hpbGRyZW5fYWZ0ZXIgPT0gbnVtX2NoaWxkcmVuX2JlZm9yZSAtIDEpCiAKKyAgICBkZWYgdGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvbk5hbWVFcnJvcihzZWxmKToKKyAgICAgICAgIyB3cm9uZyB2YXJpYWJsZSBpbiAubm9kZVZhbHVlIHByb3BlcnR5IHdpbGwKKyAgICAgICAgIyBsZWFkIHRvICJOYW1lRXJyb3I6IG5hbWUgJ2RhdGEnIGlzIG5vdCBkZWZpbmVkIgorICAgICAgICBkb2MgPSBwYXJzZSh0c3RmaWxlKQorICAgICAgICBwaSA9IGRvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oInkiLCAieiIpCisgICAgICAgIHBpLm5vZGVWYWx1ZSA9ICJjcmFzaCIKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChNaW5pZG9tVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5IGIvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CmluZGV4IDg5OWRmOGQuLjRkMjNmMTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKQEAgLTEsMTEgKzEsMTIgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIHVubGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMsIF8yRywgXzRHKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgXzJHLCBfNEcsIGdjX2NvbGxlY3QsIGNweXRob25fb25seSkKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCiAKICMgU2tpcCB0ZXN0IGlmIHdlIGNhbid0IGltcG9ydCBtbWFwLgogbW1hcCA9IGltcG9ydF9tb2R1bGUoJ21tYXAnKQpAQCAtMjQ1LDcgKzI0Niw3IEBACiAKICAgICBkZWYgdGVzdF9iYWRfZmlsZV9kZXNjKHNlbGYpOgogICAgICAgICAjIFRyeSBvcGVuaW5nIGEgYmFkIGZpbGUgZGVzY3JpcHRvci4uLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQogCiAgICAgZGVmIHRlc3RfdG91Z2hlcl9maW5kKHNlbGYpOgogICAgICAgICAjIERvIGEgdG91Z2hlciAuZmluZCgpIHRlc3QuICBTRiBidWcgNTE1OTQzIHBvaW50ZWQgb3V0IHRoYXQsIGluIDIuMiwKQEAgLTYzOCw2ICs2MzksMTUgQEAKICAgICAgICAgbTIuY2xvc2UoKQogICAgICAgICBtMS5jbG9zZSgpCiAKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAnbnQnLCAncmVxdWlyZXMgV2luZG93cycpCisgICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgorICAgICAgICBtMSA9IG1tYXAubW1hcCgtMSwgMTAwKQorICAgICAgICB0YWduYW1lID0gImZvbyIKKyAgICAgICAgbTIgPSBtbWFwLm1tYXAoLTEsIDEwMCwgdGFnbmFtZT10YWduYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YobTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRzaXplb2YobTEpICsgbGVuKHRhZ25hbWUpICsgMSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ250JywgJ3JlcXVpcmVzIFdpbmRvd3MnKQogICAgIGRlZiB0ZXN0X2NyYXNoZXJfb25fd2luZG93cyhzZWxmKToKICAgICAgICAgIyBTaG91bGQgbm90IGNyYXNoIChJc3N1ZSAxNzMzOTg2KQpAQCAtNjU1LDcgKzY2NSw3IEBACiAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCkKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG0ucmVzaXplKDApICMgd2lsbCByYWlzZSBXaW5kb3dzRXJyb3IKKyAgICAgICAgICAgIG0ucmVzaXplKDApICMgd2lsbCByYWlzZSBPU0Vycm9yCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgpAQCAtNjcxLDcgKzY4MSw3IEBACiAgICAgICAgICMgcGFyYW1ldGVycyB0byBfZ2V0X29zZmhhbmRsZS4KICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG1tYXAuZXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKICAgICAgICAgICAgICAgICBtID0gbW1hcC5tbWFwKHMuZmlsZW5vKCksIDEwKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcy5jbG9zZSgpCkBAIC02ODIsMTQgKzY5MiwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUobS5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfZXhjZXB0aW9uKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCB0aGUgSU9FcnJvciBnZXRzIHBhc3NlZCB0aHJvdWdoCisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBPU0Vycm9yIGdldHMgcGFzc2VkIHRocm91Z2gKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGV4YzoKICAgICAgICAgICAgIHdpdGggbW1hcC5tbWFwKC0xLCAxMCkgYXMgbToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBJT0Vycm9yLAorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgZXhjZXB0aW9uIHJhaXNlZCBpbiBjb250ZXh0IG1hbmFnZXIiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobS5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKIAorICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CisgICAgICAgICMgQ2hlY2sgbW1hcCBvYmplY3RzIGFyZSB3ZWFrcmVmYWJsZQorICAgICAgICBtbSA9IG1tYXAubW1hcCgtMSwgMTYpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobW0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgbW0pCisgICAgICAgIGRlbCBtbQorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCiBjbGFzcyBMYXJnZU1tYXBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC03MDcsNyArNzI2LDcgQEAKICAgICAgICAgICAgIGYuc2VlayhudW1femVyb2VzKQogICAgICAgICAgICAgZi53cml0ZSh0YWlsKQogICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgbGFyZ2VmaWxlIHN1cHBvcnQiKQogICAgICAgICByZXR1cm4gZgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkgYi9MaWIvdGVzdC90ZXN0X21vZHVsZS5weQppbmRleCBlNWEyNTI1Li4xMjMwMjkzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21vZHVsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X21vZHVsZS5weQpAQCAtMSw2ICsxLDggQEAKICMgVGVzdCB0aGUgbW9kdWxlIHR5cGUKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGdjX2NvbGxlY3QKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiAKIGltcG9ydCBzeXMKIE1vZHVsZVR5cGUgPSB0eXBlKHN5cykKQEAgLTMzLDcgKzM1LDEyIEBACiAgICAgICAgIGZvbyA9IE1vZHVsZVR5cGUoImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fbmFtZV9fLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiBOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb28uX19sb2FkZXJfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb28uX19wYWNrYWdlX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fc3BlY19fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3NwZWNfXyI6IE5vbmV9KQogCiAgICAgZGVmIHRlc3RfYXNjaWlfZG9jc3RyaW5nKHNlbGYpOgogICAgICAgICAjIEFTQ0lJIGRvY3N0cmluZwpAQCAtNDEsNyArNDgsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sICJmb29kb2MiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyJ9KQorICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfZG9jc3RyaW5nKHNlbGYpOgogICAgICAgICAjIFVuaWNvZGUgZG9jc3RyaW5nCkBAIC00OSw3ICs1OCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fbmFtZV9fLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgImZvb2RvY1x1MTIzNCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAotICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jXHUxMjM0In0pCisgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2NcdTEyMzQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3NwZWNfXyI6IE5vbmV9KQogCiAgICAgZGVmIHRlc3RfcmVpbml0KHNlbGYpOgogICAgICAgICAjIFJlaW5pdGlhbGl6YXRpb24gc2hvdWxkIG5vdCByZXBsYWNlIHRoZSBfX2RpY3RfXwpAQCAtNjEsMTAgKzcyLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sICJmb29kb2MiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5iYXIsIDQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKLSAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLCAiYmFyIjogNDJ9KQorICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsICJiYXIiOiA0MiwKKyAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwgIl9fc3BlY19fIjogTm9uZX0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19kaWN0X18gaXMgZCkKIAotICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKICAgICBkZWYgdGVzdF9kb250X2NsZWFyX2RpY3Qoc2VsZik6CiAgICAgICAgICMgU2VlIGlzc3VlIDcxNDAuCiAgICAgICAgIGRlZiBmKCk6CkBAIC04OSw2ICsxMDAsMTQgQEAKICAgICAgICAgZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdHJveWVkLCBbMV0pCiAKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICBtID0gTW9kdWxlVHlwZSgiZm9vIikKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihtKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIG0pCisgICAgICAgIGRlbCBtCisgICAgICAgIGdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9taW5pbWFsKHNlbGYpOgogICAgICAgICAjIHJlcHJzIHdoZW4gbW9kdWxlcyBoYXZlIG5vIF9fZmlsZV9fLCBfX25hbWVfXywgb3IgX19sb2FkZXJfXwogICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKQEAgLTExMCwxMyArMTI5LDE5IEBACiAgICAgICAgIG0uX19maWxlX18gPSAnL3RtcC9mb28ucHknCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgIjxtb2R1bGUgJz8nIGZyb20gJy90bXAvZm9vLnB5Jz4iKQogCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9sb2FkZXJfYXNfTm9uZShzZWxmKToKKyAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCisgICAgICAgIGFzc2VydCBtLl9fbG9hZGVyX18gaXMgTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8bW9kdWxlICdmb28nPiIpCisKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2JhcmVfbG9hZGVyX2J1dF9ub19uYW1lKHNlbGYpOgogICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKICAgICAgICAgZGVsIG0uX19uYW1lX18KICAgICAgICAgIyBZZXMsIGEgY2xhc3Mgbm90IGFuIGluc3RhbmNlLgogICAgICAgICBtLl9fbG9hZGVyX18gPSBCYXJlTG9hZGVyCisgICAgICAgIGxvYWRlcl9yZXByID0gcmVwcihCYXJlTG9hZGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJz8nICg8Y2xhc3MgJ3Rlc3QudGVzdF9tb2R1bGUuQmFyZUxvYWRlcic+KT4iKQorICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJz8nICh7fSk+Ii5mb3JtYXQobG9hZGVyX3JlcHIpKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9mdWxsX2xvYWRlcl9idXRfbm9fbmFtZShzZWxmKToKICAgICAgICAgIyBtLl9fbG9hZGVyX18ubW9kdWxlX3JlcHIoKSB3aWxsIGZhaWwgYmVjYXVzZSB0aGUgbW9kdWxlIGhhcyBubwpAQCAtMTI2LDE1ICsxNTEsMTcgQEAKICAgICAgICAgZGVsIG0uX19uYW1lX18KICAgICAgICAgIyBZZXMsIGEgY2xhc3Mgbm90IGFuIGluc3RhbmNlLgogICAgICAgICBtLl9fbG9hZGVyX18gPSBGdWxsTG9hZGVyCisgICAgICAgIGxvYWRlcl9yZXByID0gcmVwcihGdWxsTG9hZGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJz8nICg8Y2xhc3MgJ3Rlc3QudGVzdF9tb2R1bGUuRnVsbExvYWRlcic+KT4iKQorICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJz8nICh7fSk+Ii5mb3JtYXQobG9hZGVyX3JlcHIpKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9iYXJlX2xvYWRlcihzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gQmFyZUxvYWRlcgorICAgICAgICBtb2R1bGVfcmVwciA9IHJlcHIoQmFyZUxvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICdmb28nICg8Y2xhc3MgJ3Rlc3QudGVzdF9tb2R1bGUuQmFyZUxvYWRlcic+KT4iKQorICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJ2ZvbycgKHt9KT4iLmZvcm1hdChtb2R1bGVfcmVwcikpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2Z1bGxfbG9hZGVyKHNlbGYpOgogICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKQEAgLTE2NCw4ICsxOTEsMjUgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3NvdXJjZShzZWxmKToKICAgICAgICAgciA9IHJlcHIodW5pdHRlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocls6MjVdLCAiPG1vZHVsZSAndW5pdHRlc3QnIGZyb20gJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclstMTM6XSwgIl9faW5pdF9fLnB5Jz4iKQorICAgICAgICBzdGFydHNfd2l0aCA9ICI8bW9kdWxlICd1bml0dGVzdCcgZnJvbSAnIgorICAgICAgICBlbmRzX3dpdGggPSAiX19pbml0X18ucHknPiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzpsZW4oc3RhcnRzX3dpdGgpXSwgc3RhcnRzX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gZG9lcyBub3Qgc3RhcnQgd2l0aCB7IXJ9Jy5mb3JtYXQociwgc3RhcnRzX3dpdGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLWxlbihlbmRzX3dpdGgpOl0sIGVuZHNfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfSBkb2VzIG5vdCBlbmQgd2l0aCB7IXJ9Jy5mb3JtYXQociwgZW5kc193aXRoKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9maW5hbGl6YXRpb25fYXRfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgTW9kdWxlIGdsb2JhbHMgYW5kIGJ1aWx0aW5zIHNob3VsZCBzdGlsbCBiZSBhdmFpbGFibGUgZHVyaW5nIHNodXRkb3duCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgImZyb20gdGVzdCBpbXBvcnQgZmluYWxfYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyKQorICAgICAgICBsaW5lcyA9IG91dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobGluZXMpLCB7CisgICAgICAgICAgICBiInggPSBhIiwKKyAgICAgICAgICAgIGIieCA9IGIiLAorICAgICAgICAgICAgYiJmaW5hbF9hLnggPSBhIiwKKyAgICAgICAgICAgIGIiZmluYWxfYi54ID0gYiIsCisgICAgICAgICAgICBiImxlbiA9IGxlbiIsCisgICAgICAgICAgICBiInNodXRpbC5ybXRyZWUgPSBybXRyZWUifSkKIAogICAgICMgZnJvemVuIGFuZCBuYW1lc3BhY2UgbW9kdWxlIHJlcHJzIGFyZSB0ZXN0ZWQgaW4gaW1wb3J0bGliLgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5CmluZGV4IGVkMzBkNmYuLjRjNDllOWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5CkBAIC0yNDUsMTEgKzI0NSwxMiBAQAogCiAKIGNsYXNzIE1vZHVsZUZpbmRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBfZG9fdGVzdChzZWxmLCBpbmZvLCByZXBvcnQ9RmFsc2UpOgorICAgIGRlZiBfZG9fdGVzdChzZWxmLCBpbmZvLCByZXBvcnQ9RmFsc2UsIGRlYnVnPTAsIHJlcGxhY2VfcGF0aHM9W10pOgogICAgICAgICBpbXBvcnRfdGhpcywgbW9kdWxlcywgbWlzc2luZywgbWF5YmVfbWlzc2luZywgc291cmNlID0gaW5mbwogICAgICAgICBjcmVhdGVfcGFja2FnZShzb3VyY2UpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG1mID0gbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlcihwYXRoPVRFU1RfUEFUSCkKKyAgICAgICAgICAgIG1mID0gbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlcihwYXRoPVRFU1RfUEFUSCwgZGVidWc9ZGVidWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZV9wYXRocz1yZXBsYWNlX3BhdGhzKQogICAgICAgICAgICAgbWYuaW1wb3J0X2hvb2soaW1wb3J0X3RoaXMpCiAgICAgICAgICAgICBpZiByZXBvcnQ6CiAgICAgICAgICAgICAgICAgbWYucmVwb3J0KCkKQEAgLTMwOCw5ICszMDksMTYgQEAKICAgICAgICAgb3MucmVtb3ZlKHNvdXJjZV9wYXRoKQogICAgICAgICBzZWxmLl9kb190ZXN0KGJ5dGVjb2RlX3Rlc3QpCiAKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3BhdGhzKHNlbGYpOgorICAgICAgICBvbGRfcGF0aCA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2EnLCAnbW9kdWxlLnB5JykKKyAgICAgICAgbmV3X3BhdGggPSBvcy5wYXRoLmpvaW4oVEVTVF9ESVIsICdhJywgJ3NwYW0ucHknKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5fZG9fdGVzdChtYXliZV90ZXN0LCBkZWJ1Zz0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlX3BhdGhzPVsob2xkX3BhdGgsIG5ld19wYXRoKV0pCisgICAgICAgIG91dHB1dCA9IG91dHB1dC5nZXR2YWx1ZSgpCisgICAgICAgIGV4cGVjdGVkID0gImNvX2ZpbGVuYW1lICVyIGNoYW5nZWQgdG8gJXIiICUgKG9sZF9wYXRoLCBuZXdfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgb3V0cHV0KQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTW9kdWxlRmluZGVyVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CmluZGV4IDY4ODkxODQuLmVhNTkyYzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQpAQCAtMTc1LDU3ICsxNzUsMjggQEAKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTikKIAogY2xhc3MgVGVzdF9TdHJlYW1Xcml0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGlmIGxlbignXFUwMDAxMjM0NScpID09IDI6ICMgVUNTMgotICAgICAgICBkZWYgdGVzdF9nYjE4MDMwKHNlbGYpOgotICAgICAgICAgICAgcz0gaW8uQnl0ZXNJTygpCi0gICAgICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcignZ2IxODAzMCcpKHMpCi0gICAgICAgICAgICBjLndyaXRlKCcxMjMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHg5MDdceDk1OScpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4OTA3XHg5NTknKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMV0gKyAnXFUwMDAxMjM0NScgKyAnXHVhYzAwXHUwMGFjJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDkwN1x4OTU5XHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjLnJlc2V0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQorICAgIGRlZiB0ZXN0X2diMTgwMzAoc2VsZik6CisgICAgICAgIHM9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcignZ2IxODAzMCcpKHMpCisgICAgICAgIGMud3JpdGUoJzEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyMycpCisgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceDkwN1x4OTU5JykKKyAgICAgICAgYy53cml0ZSgnXHVhYzAwXHUwMGFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQogCi0gICAgICAgIGRlZiB0ZXN0X3V0Zl84KHNlbGYpOgotICAgICAgICAgICAgcz0gaW8uQnl0ZXNJTygpCi0gICAgICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcigndXRmLTgnKShzKQotICAgICAgICAgICAgYy53cml0ZSgnMTIzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyMycpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQotCi0gICAgICAgICAgICAjIFB5dGhvbiB1dGYtOCBjb2RlYyBjYW4ndCBidWZmZXIgc3Vycm9nYXRlIHBhaXJzIHlldC4KLSAgICAgICAgICAgIGlmIDA6Ci0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHhmMFx4OTJceDhkXHg4NScpCi0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMV0gKyAnXFUwMDAxMjM0NScgKyAnXHVhYzAwXHUwMGFjJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWMnKQotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhYycpCi0gICAgICAgICAgICAgICAgYy5yZXNldCgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjXHhlZFx4YTBceDg4JykKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWNceGVkXHhhMFx4ODhceGVkXHhiZFx4ODUnKQotCi0gICAgZWxzZTogIyBVQ1M0Ci0gICAgICAgIHBhc3MKKyAgICBkZWYgdGVzdF91dGZfOChzZWxmKToKKyAgICAgICAgcz0gaW8uQnl0ZXNJTygpCisgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpKHMpCisgICAgICAgIGMud3JpdGUoJzEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyMycpCisgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceGYwXHg5Mlx4OGRceDg1JykKKyAgICAgICAgYy53cml0ZSgnXHVhYzAwXHUwMGFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnCisgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKIAogICAgIGRlZiB0ZXN0X3N0cmVhbXdyaXRlcl9zdHJ3cml0ZShzZWxmKToKICAgICAgICAgcyA9IGlvLkJ5dGVzSU8oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmNGU3NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsucHkKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZworCit0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZy5pbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KGdsb2JhbHMoKSwgJ2ZvcmsnKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYTA0YQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIucHkKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZworCit0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZy5pbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KGdsb2JhbHMoKSwgJ2ZvcmtzZXJ2ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfbWFpbl9oYW5kbGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX21haW5faGFuZGxpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1MzllMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX21haW5faGFuZGxpbmcucHkKQEAgLTAsMCArMSwyODkgQEAKKyMgdGVzdHMgX19tYWluX18gbW9kdWxlIGhhbmRsaW5nIGluIG11bHRpcHJvY2Vzc2luZworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisjIFNraXAgdGVzdHMgaWYgX3RocmVhZCBvciBfbXVsdGlwcm9jZXNzaW5nIHdhc24ndCBidWlsdC4KK3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RocmVhZCcpCitzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ19tdWx0aXByb2Nlc3NpbmcnKQorCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQoraW1wb3J0IHppcGltcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcHlfY29tcGlsZQorCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgKAorICAgIG1ha2VfcGtnLCBtYWtlX3NjcmlwdCwgbWFrZV96aXBfcGtnLCBtYWtlX3ppcF9zY3JpcHQsCisgICAgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlLCB0ZW1wX2RpciwKKyAgICBzcGF3bl9weXRob24sIGtpbGxfcHl0aG9uKQorCisjIExvb2sgdXAgd2hpY2ggc3RhcnQgbWV0aG9kcyBhcmUgYXZhaWxhYmxlIHRvIHRlc3QKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK0FWQUlMQUJMRV9TVEFSVF9NRVRIT0RTID0gc2V0KG11bHRpcHJvY2Vzc2luZy5nZXRfYWxsX3N0YXJ0X21ldGhvZHMoKSkKKworIyBJc3N1ZSAjMjIzMzI6IFNraXAgdGVzdHMgaWYgc2VtX29wZW4gaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLgorc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUnKQorCit2ZXJib3NlID0gc3VwcG9ydC52ZXJib3NlCisKK3Rlc3Rfc291cmNlID0gIiIiXAorIyBtdWx0aXByb2Nlc3NpbmcgaW5jbHVkZXMgYWxsIHNvcnRzIG9mIHNoZW5hbmlnYW5zIHRvIG1ha2UgX19tYWluX18KKyMgYXR0cmlidXRlcyBhY2Nlc3NpYmxlIGluIHRoZSBzdWJwcm9jZXNzIGluIGEgcGlja2xlIGNvbXBhdGlibGUgd2F5LgorCisjIFdlIHJ1biB0aGUgImRvZXNuJ3Qgd29yayBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIiIGV4YW1wbGUgZnJvbQorIyB0aGUgZG9jcyB0byBtYWtlIHN1cmUgaXQgKmRvZXMqIHdvcmsgZnJvbSBhbiBleGVjdXRlZCBfX21haW5fXywKKyMgcmVnYXJkbGVzcyBvZiB0aGUgaW52b2NhdGlvbiBtZWNoYW5pc20KKworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sLCBzZXRfc3RhcnRfbWV0aG9kCisKKyMgV2UgdXNlIHRoaXMgX19tYWluX18gZGVmaW5lZCBmdW5jdGlvbiBpbiB0aGUgbWFwIGNhbGwgYmVsb3cgaW4gb3JkZXIgdG8KKyMgY2hlY2sgdGhhdCBtdWx0aXByb2Nlc3NpbmcgaW4gY29ycmVjdGx5IHJ1bm5pbmcgdGhlIHVuZ3VhcmRlZAorIyBjb2RlIGluIGNoaWxkIHByb2Nlc3NlcyBhbmQgdGhlbiBtYWtpbmcgaXQgYXZhaWxhYmxlIGFzIF9fbWFpbl9fCitkZWYgZih4KToKKyAgICByZXR1cm4geCp4CisKKyMgQ2hlY2sgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cworaWYgImNoZWNrX3NpYmxpbmciIGluIF9fZmlsZV9fOgorICAgICMgV2UncmUgaW5zaWRlIGEgcGFja2FnZSBhbmQgbm90IGluIGEgX19tYWluX18ucHkgZmlsZQorICAgICMgc28gbWFrZSBzdXJlIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMgd29yayBjb3JyZWN0bHkKKyAgICBmcm9tIC4gaW1wb3J0IHNpYmxpbmcKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzdGFydF9tZXRob2QgPSBzeXMuYXJndlsxXQorICAgIHNldF9zdGFydF9tZXRob2Qoc3RhcnRfbWV0aG9kKQorICAgIHAgPSBQb29sKDUpCisgICAgcmVzdWx0cyA9IFtdCisgICAgcC5tYXBfYXN5bmMoZiwgWzEsIDIsIDNdLCBjYWxsYmFjaz1yZXN1bHRzLmV4dGVuZCkKKyAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgMTAgIyB1cCB0byAxMCBzIHRvIHJlcG9ydCB0aGUgcmVzdWx0cworICAgIHdoaWxlIG5vdCByZXN1bHRzOgorICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgIGlmIHRpbWUudGltZSgpID4gZGVhZGxpbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciByZXN1bHRzIikKKyAgICByZXN1bHRzLnNvcnQoKQorICAgIHByaW50KHN0YXJ0X21ldGhvZCwgIi0+IiwgcmVzdWx0cykKKyIiIgorCit0ZXN0X3NvdXJjZV9tYWluX3NraXBwZWRfaW5fY2hpbGRyZW4gPSAiIiJcCisjIF9fbWFpbl9fLnB5IGZpbGVzIGhhdmUgYW4gaW1wbGllZCAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIgc28KKyMgbXVsdGlwcm9jZXNzaW5nIHNob3VsZCBhbHdheXMgc2tpcCBydW5uaW5nIHRoZW0gaW4gY2hpbGQgcHJvY2Vzc2VzCisKKyMgVGhpcyBtZWFucyB3ZSBjYW4ndCB1c2UgX19tYWluX18gZGVmaW5lZCBmdW5jdGlvbnMgaW4gY2hpbGQgcHJvY2Vzc2VzLAorIyBzbyB3ZSBqdXN0IHVzZSAiaW50IiBhcyBhIHBhc3N0aHJvdWdoIG9wZXJhdGlvbiBiZWxvdworCitpZiBfX25hbWVfXyAhPSAiX19tYWluX18iOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFzIF9fbWFpbl9fISIpCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbCwgc2V0X3N0YXJ0X21ldGhvZAorCitzdGFydF9tZXRob2QgPSBzeXMuYXJndlsxXQorc2V0X3N0YXJ0X21ldGhvZChzdGFydF9tZXRob2QpCitwID0gUG9vbCg1KQorcmVzdWx0cyA9IFtdCitwLm1hcF9hc3luYyhpbnQsIFsxLCA0LCA5XSwgY2FsbGJhY2s9cmVzdWx0cy5leHRlbmQpCitkZWFkbGluZSA9IHRpbWUudGltZSgpICsgMTAgIyB1cCB0byAxMCBzIHRvIHJlcG9ydCB0aGUgcmVzdWx0cword2hpbGUgbm90IHJlc3VsdHM6CisgICAgdGltZS5zbGVlcCgwLjA1KQorICAgIGlmIHRpbWUudGltZSgpID4gZGVhZGxpbmU6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlc3VsdHMiKQorcmVzdWx0cy5zb3J0KCkKK3ByaW50KHN0YXJ0X21ldGhvZCwgIi0+IiwgcmVzdWx0cykKKyIiIgorCisjIFRoZXNlIGhlbHBlcnMgd2VyZSBjb3BpZWQgZnJvbSB0ZXN0X2NtZF9saW5lX3NjcmlwdCAmIHR3ZWFrZWQgYSBiaXQuLi4KKworZGVmIF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9dGVzdF9zb3VyY2UsIG9taXRfc3VmZml4PUZhbHNlKToKKyAgICB0b19yZXR1cm4gPSBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBvbWl0X3N1ZmZpeCkKKyAgICAjIEhhY2sgdG8gY2hlY2sgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cworICAgIGlmIHNjcmlwdF9iYXNlbmFtZSA9PSAiY2hlY2tfc2libGluZyI6CisgICAgICAgIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsICJzaWJsaW5nIiwgIiIpCisgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICByZXR1cm4gdG9fcmV0dXJuCisKK2RlZiBfbWFrZV90ZXN0X3ppcF9wa2coemlwX2RpciwgemlwX2Jhc2VuYW1lLCBwa2dfbmFtZSwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9dGVzdF9zb3VyY2UsIGRlcHRoPTEpOgorICAgIHRvX3JldHVybiA9IG1ha2VfemlwX3BrZyh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHBrZ19uYW1lLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVwdGgpCisgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICByZXR1cm4gdG9fcmV0dXJuCisKKyMgVGhlcmUncyBubyBlYXN5IHdheSB0byBwYXNzIHRoZSBzY3JpcHQgZGlyZWN0b3J5IGluIHRvIGdldAorIyAtbSB0byB3b3JrIChhdm9pZGluZyB0aGF0IGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtYWtpbmcKKyMgZGlyZWN0b3JpZXMgYW5kIHppcGZpbGVzIGV4ZWN1dGFibGUhKQorIyBTbyB3ZSBmYWtlIGl0IGZvciB0ZXN0aW5nIHB1cnBvc2VzIHdpdGggYSBjdXN0b20gbGF1bmNoIHNjcmlwdAorbGF1bmNoX3NvdXJjZSA9ICIiIlwKK2ltcG9ydCBzeXMsIG9zLnBhdGgsIHJ1bnB5CitzeXMucGF0aC5pbnNlcnQoMCwgJXMpCitydW5weS5fcnVuX21vZHVsZV9hc19tYWluKCVyKQorIiIiCisKK2RlZiBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgbW9kdWxlX25hbWUsIHBhdGg9Tm9uZSk6CisgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICBwYXRoID0gIm9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykiCisgICAgZWxzZToKKyAgICAgICAgcGF0aCA9IHJlcHIocGF0aCkKKyAgICBzb3VyY2UgPSBsYXVuY2hfc291cmNlICUgKHBhdGgsIG1vZHVsZV9uYW1lKQorICAgIHRvX3JldHVybiA9IG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQorICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgcmV0dXJuIHRvX3JldHVybgorCitjbGFzcyBNdWx0aVByb2Nlc3NpbmdDbWRMaW5lTWl4aW4oKToKKyAgICBtYXhEaWZmID0gTm9uZSAjIFNob3cgZnVsbCB0cmFjZWJhY2tzIG9uIHN1YnByb2Nlc3MgZmFpbHVyZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0YXJ0X21ldGhvZCBub3QgaW4gQVZBSUxBQkxFX1NUQVJUX01FVEhPRFM6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBzdGFydCBtZXRob2Qgbm90IGF2YWlsYWJsZSIgJSBzZWxmLnN0YXJ0X21ldGhvZCkKKworICAgIGRlZiBfY2hlY2tfb3V0cHV0KHNlbGYsIHNjcmlwdF9uYW1lLCBleGl0X2NvZGUsIG91dCwgZXJyKToKKyAgICAgICAgaWYgdmVyYm9zZSA+IDE6CisgICAgICAgICAgICBwcmludCgiT3V0cHV0IGZyb20gdGVzdCBzY3JpcHQgJXI6IiAlIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHJpbnQob3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRfY29kZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZGVjb2RlKCd1dGYtOCcpLCAnJykKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICIlcyAtPiBbMSwgNCwgOV0iICUgc2VsZi5zdGFydF9tZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZGVjb2RlKCd1dGYtOCcpLnN0cmlwKCksIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgX2NoZWNrX3NjcmlwdChzZWxmLCBzY3JpcHRfbmFtZSwgKmNtZF9saW5lX3N3aXRjaGVzKToKKyAgICAgICAgaWYgbm90IF9fZGVidWdfXzoKKyAgICAgICAgICAgIGNtZF9saW5lX3N3aXRjaGVzICs9ICgnLScgKyAnTycgKiBzeXMuZmxhZ3Mub3B0aW1pemUsKQorICAgICAgICBydW5fYXJncyA9IGNtZF9saW5lX3N3aXRjaGVzICsgKHNjcmlwdF9uYW1lLCBzZWxmLnN0YXJ0X21ldGhvZCkKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqcnVuX2FyZ3MsIF9faXNvbGF0ZWQ9RmFsc2UpCisgICAgICAgIHNlbGYuX2NoZWNrX291dHB1dChzY3JpcHRfbmFtZSwgcmMsIG91dCwgZXJyKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ3NjcmlwdCcpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X25hbWUpCisKKyAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHRfbm9fc3VmZml4KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ3NjcmlwdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9taXRfc3VmZml4PVRydWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X25hbWUpCisKKyAgICBkZWYgdGVzdF9pcHl0aG9uX3dvcmthcm91bmQoc2VsZik6CisgICAgICAgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSVB5dGhvbiBsYXVuY2ggc2NyaXB0IGFyZSBtaXNzaW5nIHRoZQorICAgICAgICAjIF9fbmFtZV9fID0gIl9fbWFpbl9fIiBndWFyZCwgYW5kIG11bHRpcHJvY2Vzc2luZyBoYXMgbG9uZyBoYWQKKyAgICAgICAgIyBhIHdvcmthcm91bmQgZm9yIHRoYXQgY2FzZQorICAgICAgICAjIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaXB5dGhvbi9pcHl0aG9uL2lzc3Vlcy80Njk4CisgICAgICAgIHNvdXJjZSA9IHRlc3Rfc291cmNlX21haW5fc2tpcHBlZF9pbl9jaGlsZHJlbgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ2lweXRob24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2NyaXB0X25vX3N1ZmZpeCA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdpcHl0aG9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9taXRfc3VmZml4PVRydWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X25vX3N1ZmZpeCkKKworICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBweWNfZmlsZSA9IHN1cHBvcnQubWFrZV9sZWdhY3lfcHljKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHB5Y19maWxlKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHB5Y19maWxlID0gc3VwcG9ydC5tYWtlX2xlZ2FjeV9weWMoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpcikKKworICAgIGRlZiB0ZXN0X3ppcGZpbGUoc2VsZik6CisgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUpCisKKyAgICBkZWYgdGVzdF96aXBmaWxlX2NvbXBpbGVkKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIGNvbXBpbGVkX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfaW5fcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnY2hlY2tfc2libGluZycpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfcGtnLmNoZWNrX3NpYmxpbmcnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2VfaW5femlwZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcF9wa2coc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgJ3Rlc3RfcGtnJywgJ3NjcmlwdCcpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy5zY3JpcHQnLCB6aXBfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9zdWJwYWNrYWdlX2luX3ppcGZpbGUoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXBfcGtnKHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsICd0ZXN0X3BrZycsICdzY3JpcHQnLCBkZXB0aD0yKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cudGVzdF9wa2cuc2NyaXB0JywgemlwX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSkKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnX19tYWluX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHljX2ZpbGUgPSBzdXBwb3J0Lm1ha2VfbGVnYWN5X3B5YyhzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSkKKworIyBUZXN0IGFsbCBzdXBwb3J0ZWQgc3RhcnQgbWV0aG9kcyAoc2V0dXBDbGFzcyBza2lwcyBhcyBhcHByb3ByaWF0ZSkKKworY2xhc3MgU3Bhd25DbWRMaW5lVGVzdChNdWx0aVByb2Nlc3NpbmdDbWRMaW5lTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGFydF9tZXRob2QgPSAnc3Bhd24nCisgICAgbWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UgPSB0ZXN0X3NvdXJjZV9tYWluX3NraXBwZWRfaW5fY2hpbGRyZW4KKworY2xhc3MgRm9ya0NtZExpbmVUZXN0KE11bHRpUHJvY2Vzc2luZ0NtZExpbmVNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXJ0X21ldGhvZCA9ICdmb3JrJworICAgIG1haW5faW5fY2hpbGRyZW5fc291cmNlID0gdGVzdF9zb3VyY2UKKworY2xhc3MgRm9ya1NlcnZlckNtZExpbmVUZXN0KE11bHRpUHJvY2Vzc2luZ0NtZExpbmVNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXJ0X21ldGhvZCA9ICdmb3Jrc2VydmVyJworICAgIG1haW5faW5fY2hpbGRyZW5fc291cmNlID0gdGVzdF9zb3VyY2VfbWFpbl9za2lwcGVkX2luX2NoaWxkcmVuCisKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgIHN1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNGFlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnc3Bhd24nKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CmluZGV4IDFkNTI3MTMuLjcxYTRlYzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKQEAgLTI2Niw3ICsyNjYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlcnZlci5oZWxwKCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weSBiL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQppbmRleCAyOGVkZTM0Li5hYjJlZWI3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RkYXRhID0gb3Blbl91cmxyZXNvdXJjZShURVNUREFUQVVSTCwgZW5jb2Rpbmc9InV0Zi04IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjaz1jaGVja192ZXJzaW9uKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIgKyBURVNUREFUQVVSTCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3RkYXRhLmNsb3NlKQogICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZGF0YToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKaW5kZXggZTllMWQ3MS4uMzc2ZjdlZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKQEAgLTI1OCw2ICsyNTgsNDEgQEAKICAgICAgICAgICAgIGNoZWNrKCclc3BhbSViYXInLCAnJXNiYXInICUgbm9uYXNjaWkpCiAgICAgICAgICAgICBjaGVjaygnJXt9JWJhcicuZm9ybWF0KG5vbmFzY2lpKSwgJ2hhbSVzYmFyJyAlIG5vbmFzY2lpKQogCisgICAgZGVmIHRlc3RfZXhwYW5kdXNlcihzZWxmKToKKyAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigidGVzdCIpJywgJ3Rlc3QnKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52LmNsZWFyKCkKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnfnRlc3QnKQorCisgICAgICAgICAgICBlbnZbJ0hPTUVQQVRIJ10gPSAnZXJpY1xcaWRsZScKKyAgICAgICAgICAgIGVudlsnSE9NRURSSVZFJ10gPSAnQzpcXCcKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnQzpcXGVyaWNcXHRlc3QnKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifiIpJywgJ0M6XFxlcmljXFxpZGxlJykKKworICAgICAgICAgICAgZGVsIGVudlsnSE9NRURSSVZFJ10KKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnZXJpY1xcdGVzdCcpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+IiknLCAnZXJpY1xcaWRsZScpCisKKyAgICAgICAgICAgIGVudi5jbGVhcigpCisgICAgICAgICAgICBlbnZbJ1VTRVJQUk9GSUxFJ10gPSAnQzpcXGVyaWNcXGlkbGUnCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+dGVzdCIpJywgJ0M6XFxlcmljXFx0ZXN0JykKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn4iKScsICdDOlxcZXJpY1xcaWRsZScpCisKKyAgICAgICAgICAgIGVudi5jbGVhcigpCisgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9ICdDOlxcaWRsZVxcZXJpYycKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnQzpcXGlkbGVcXHRlc3QnKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifiIpJywgJ0M6XFxpZGxlXFxlcmljJykKKworICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifnRlc3RcXGZvb1xcYmFyIiknLAorICAgICAgICAgICAgICAgICAgICdDOlxcaWRsZVxcdGVzdFxcZm9vXFxiYXInKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifnRlc3QvZm9vL2JhciIpJywKKyAgICAgICAgICAgICAgICAgICAnQzpcXGlkbGVcXHRlc3QvZm9vL2JhcicpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+XFxmb29cXGJhciIpJywKKyAgICAgICAgICAgICAgICAgICAnQzpcXGlkbGVcXGVyaWNcXGZvb1xcYmFyJykKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn4vZm9vL2JhciIpJywKKyAgICAgICAgICAgICAgICAgICAnQzpcXGlkbGVcXGVyaWMvZm9vL2JhcicpCisKICAgICBkZWYgdGVzdF9hYnNwYXRoKHNlbGYpOgogICAgICAgICAjIG50cGF0aC5hYnNwYXRoKCkgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHN5c3RlbSB3aXRoIHRoZSAibnQiIG1vZHVsZQogICAgICAgICAjIChyZWFzb25hYmx5KSwgc28gd2UgcHJvdGVjdCB0aGlzIHRlc3Qgd2l0aCAiaW1wb3J0IG50Ii4gIFRoaXMgYWxsb3dzCkBAIC0zMDYsNiArMzQxLDQwIEBACiAgICAgICAgICAgICAgICAgICAgICMgZGlhbG9ncyAoIzQ4MDQpCiAgICAgICAgICAgICAgICAgICAgIG50cGF0aC5zYW1lb3BlbmZpbGUoLTEsIC0xKQogCisgICAgZGVmIHRlc3RfaXNtb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiQzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoImM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIkM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFwuXFxjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXC5cXEM6XFwiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIkM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiYzovIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIkM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcLlxcYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcLlxcQzpcXCIpKQorCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIGQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGQpKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgZm9sZGVyIGlzbid0IHRoZSByb290IGZvbGRlcgorICAgICAgICAgICAgIyAob3IgYW55IG90aGVyIHZvbHVtZSByb290KS4gVGhlIGRyaXZlLXJlbGF0aXZlCisgICAgICAgICAgICAjIGxvY2F0aW9ucyBiZWxvdyBjYW5ub3QgdGhlbiByZWZlciB0byBtb3VudCBwb2ludHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGRyaXZlLCBwYXRoID0gbnRwYXRoLnNwbGl0ZHJpdmUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGRyaXZlLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobnRwYXRoLmlzbW91bnQoZHJpdmUudXBwZXIoKSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXGxvY2FsaG9zdFxcYyQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXGxvY2FsaG9zdFxcYyRcXCIpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcbG9jYWxob3N0XFxjJCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXGxvY2FsaG9zdFxcYyRcXCIpKQogCiBjbGFzcyBOdENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aG1vZHVsZSA9IG50cGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CmluZGV4IDYzODQzNzAuLjQ3ODUxMDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKQEAgLTQsNyArNCw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGlmIG5vdCBoYXNhdHRyKG9zLCAib3BlbnB0eSIpOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJObyBvcGVucHR5KCkgYXZhaWxhYmxlLiIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLm9wZW5wdHkoKSBub3QgYXZhaWxhYmxlLiIpCiAKIAogY2xhc3MgT3BlbnB0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKaW5kZXggZmE2MDhiOS4uYWI1OGE5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CkBAIC0xLDggKzEsMTAgQEAKLWltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCitweV9vcGVyYXRvciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnb3BlcmF0b3InLCBibG9ja2VkPVsnX29wZXJhdG9yJ10pCitjX29wZXJhdG9yID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdvcGVyYXRvcicsIGZyZXNoPVsnX29wZXJhdG9yJ10pCisKIGNsYXNzIFNlcTE6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CiAgICAgICAgIHNlbGYubHN0ID0gbHN0CkBAIC0zMiw4ICszNCw5IEBACiAgICAgICAgIHJldHVybiBvdGhlciAqIHNlbGYubHN0CiAKIAotY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBPcGVyYXRvclRlc3RDYXNlOgogICAgIGRlZiB0ZXN0X2x0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQsIDFqLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAwKSkKQEAgLTQ0LDYgKzQ3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmx0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9sZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlLCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubGUoMSwgMCkpCkBAIC01NCw2ICs1OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTY3LDYgKzcyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbmUoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTgwLDYgKzg2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9nZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlLCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAwKSkKQEAgLTkwLDYgKzk3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5nZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ3Qoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ3QoMSwgMCkpCkBAIC0xMDAsMjIgKzEwOCwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9hYnMoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hYnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmFicygtMSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuYWJzKDEpLCAxKQogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWRkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFkZCgzLCA0KSA9PSA3KQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9hbmQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFuZF8sIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hbmRfKDB4ZiwgMHhhKSA9PSAweGEpCiAKICAgICBkZWYgdGVzdF9jb25jYXQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KCdweScsICd0aG9uJykgPT0gJ3B5dGhvbicpCkBAIC0xMjUsMTIgKzEzNywxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgMTMsIDI5KQogCiAgICAgZGVmIHRlc3RfY291bnRPZihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY291bnRPZiwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCAzKSA9PSAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY291bnRPZihbMSwgMiwgMSwgMywgMSwgNF0sIDUpID09IDApCiAKICAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBbNCwgMywgMiwgMV0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbGl0ZW0sIGEsIE5vbmUpCkBAIC0xMzgsMzMgKzE1MiwzOSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbNCwgMiwgMV0pCiAKICAgICBkZWYgdGVzdF9mbG9vcmRpdihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZmxvb3JkaXYoNSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X3RydWVkaXYoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydWVkaXYsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci50cnVlZGl2KDUsIDIpID09IDIuNSkKIAogICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IHJhbmdlKDEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgYSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdldGl0ZW0oYSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X2luZGV4T2Yoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pbmRleE9mKFs0LCAzLCAyLCAxXSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZiwgWzQsIDMsIDIsIDFdLCAwKQogCiAgICAgZGVmIHRlc3RfaW52ZXJ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW52ZXJ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbnYoNCksIC01KQogCiAgICAgZGVmIHRlc3RfbHNoaWZ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHNoaWZ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sc2hpZnQoNSwgMSkgPT0gMTApCkBAIC0xNzIsMTYgKzE5MiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfbW9kKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubW9kKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tb2QoNSwgMikgPT0gMSkKIAogICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm11bCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tdWwoNSwgMikgPT0gMTApCiAKICAgICBkZWYgdGVzdF9uZWcoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLm5lZyg1KSwgLTUpCkBAIC0xOTAsMTEgKzIxMywxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLm5lZygtMCksIDApCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX29yKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm9yXygweGEsIDB4NSkgPT0gMHhmKQogCiAgICAgZGVmIHRlc3RfcG9zKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG9zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3MoNSksIDUpCkBAIC0yMDMsMTQgKzIyOCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLnBvcygtMCksIDApCiAKICAgICBkZWYgdGVzdF9wb3coc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3cpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLnBvdygzLDUpLCAzKio1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9fcG93X18oMyw1KSwgMyoqNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxLCAyLCAzKQogCiAgICAgZGVmIHRlc3RfcnNoaWZ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucnNoaWZ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yc2hpZnQoNSwgMSkgPT0gMikKQEAgLTIxOCwxMiArMjQ0LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgMiwgLTEpCiAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29udGFpbnMocmFuZ2UoNCksIDIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCA1KSkKIAogICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IGxpc3QocmFuZ2UoMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCBOb25lLCBOb25lKQpAQCAtMjMyLDExICsyNjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgNCwgMikKIAogICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnN1YikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5zdWIoNSwgMikgPT0gMykKIAogICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgpAQCAtMjQ4LDExICsyNzgsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci50cnV0aChbXSkpCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX3hvcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnhvcikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci54b3IoMHhiLCAweGMpID09IDB4NykKIAogICAgIGRlZiB0ZXN0X2lzKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBiID0gJ3h5enBkcScKICAgICAgICAgYyA9IGFbOjNdICsgYlszOl0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc18pCkBAIC0yNjAsNiArMjkyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc18oYSxjKSkKIAogICAgIGRlZiB0ZXN0X2lzX25vdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfbm90KQpAQCAtMjY3LDYgKzMwMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc19ub3QoYSxjKSkKIAogICAgIGRlZiB0ZXN0X2F0dHJnZXR0ZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtMzE2LDYgKzM1MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdhcnRodXInLCAndGhvbWFzJywgJ2pvaG5zb24nKSkKIAogICAgIGRlZiB0ZXN0X2l0ZW1nZXR0ZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9ICdBQkNERScKICAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAnQycpCkBAIC0zNTAsMTIgKzM4NSwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLml0ZW1nZXR0ZXIoMiwgJ3gnLCA1KSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X21ldGhvZGNhbGxlcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1ldGhvZGNhbGxlcikKICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF0gKyBhcmdzWzFdCiAgICAgICAgICAgICBkZWYgYmFyKHNlbGYsIGY9NDIpOgogICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBkZWYgYmF6KCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBrd2RzWyduYW1lJ10sIGt3ZHNbJ3NlbGYnXQogICAgICAgICBhID0gQSgpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGYsIGEpCkBAIC0zNjYsOCArNDA0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSwgYSkKICAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignYmFyJywgZj01KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDUpCisgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JheicsIG5hbWU9J3NwYW0nLCBzZWxmPSdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAoJ3NwYW0nLCAnZWdncycpKQogCiAgICAgZGVmIHRlc3RfaW5wbGFjZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19pYWRkX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFkZCIKICAgICAgICAgICAgIGRlZiBfX2lhbmRfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpYW5kIgpAQCAtMzk2LDM3ICs0MzcsNDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pdHJ1ZWRpdiAoYywgNSksICJpdHJ1ZWRpdiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXhvciAgICAgKGMsIDUpLCAiaXhvciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWNvbmNhdCAgKGMsIGMpLCAiaWFkZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pYWRkX18gICAgIChjLCA1KSwgImlhZGQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFuZF9fICAgICAoYywgNSksICJpYW5kIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lmbG9vcmRpdl9fKGMsIDUpLCAiaWZsb29yZGl2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lsc2hpZnRfXyAgKGMsIDUpLCAiaWxzaGlmdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbW9kX18gICAgIChjLCA1KSwgImltb2QiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW11bF9fICAgICAoYywgNSksICJpbXVsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lvcl9fICAgICAgKGMsIDUpLCAiaW9yIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lwb3dfXyAgICAgKGMsIDUpLCAiaXBvdyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcnNoaWZ0X18gIChjLCA1KSwgImlyc2hpZnQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXN1Yl9fICAgICAoYywgNSksICJpc3ViIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l0cnVlZGl2X18gKGMsIDUpLCAiaXRydWVkaXYiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXhvcl9fICAgICAoYywgNSksICJpeG9yIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ljb25jYXRfXyAgKGMsIGMpLCAiaWFkZCIpCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBpbXBvcnQgc3lzCi0gICAgdGVzdF9jbGFzc2VzID0gKAotICAgICAgICBPcGVyYXRvclRlc3RDYXNlLAotICAgICkKKyAgICBkZWYgdGVzdF9sZW5ndGhfaGludChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQorICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgdHlwZShzZWxmLnZhbHVlKSBpcyB0eXBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBzZWxmLnZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKIAotICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgotICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgY291bnRzID0gW05vbmVdICogNQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6Ci0gICAgICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChbXSwgMiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoaXRlcihbMSwgMiwgM10pKSwgMykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoMikpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoTm90SW1wbGVtZW50ZWQpLCA0KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKFR5cGVFcnJvciksIDEyKSwgMTIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoImFiYyIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgb3BlcmF0b3IubGVuZ3RoX2hpbnQoWCgtMikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IpOgorICAgICAgICAgICAgb3BlcmF0b3IubGVuZ3RoX2hpbnQoWChMb29rdXBFcnJvcikpCisKKyAgICBkZWYgdGVzdF9kdW5kZXJfaXNfb3JpZ2luYWwoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKKworICAgICAgICBuYW1lcyA9IFtuYW1lIGZvciBuYW1lIGluIGRpcihvcGVyYXRvcikgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpXQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIG9yaWcgPSBnZXRhdHRyKG9wZXJhdG9yLCBuYW1lKQorICAgICAgICAgICAgZHVuZGVyID0gZ2V0YXR0cihvcGVyYXRvciwgJ19fJyArIG5hbWUuc3RyaXAoJ18nKSArICdfXycsIE5vbmUpCisgICAgICAgICAgICBpZiBkdW5kZXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkdW5kZXIsIG9yaWcpCisKK2NsYXNzIFB5T3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gcHlfb3BlcmF0b3IKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19vcGVyYXRvciwgJ3JlcXVpcmVzIF9vcGVyYXRvcicpCitjbGFzcyBDT3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gY19vcGVyYXRvcgogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQppbmRleCBlYWVlNTA0Li43NjIxYzI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKQEAgLTM5NSw2ICszOTUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLnBhcnNlci5yZW1vdmVfb3B0aW9uLCAoJ2ZvbycsKSwgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwgIm5vIHN1Y2ggb3B0aW9uICdmb28nIikKIAorICAgIEBzdXBwb3J0LmltcGxfZGV0YWlsKCdSZWxpZXMgb24gc3lzLmdldHJlZmNvdW50JywgY3B5dGhvbj1UcnVlKQogICAgIGRlZiB0ZXN0X3JlZmxlYWsoc2VsZik6CiAgICAgICAgICMgSWYgYW4gT3B0aW9uUGFyc2VyIGlzIGNhcnJ5aW5nIGFyb3VuZCBhIHJlZmVyZW5jZSB0byBhIGxhcmdlCiAgICAgICAgICMgb2JqZWN0LCB2YXJpb3VzIGN5Y2xlcyBjYW4gcHJldmVudCBpdCBmcm9tIGJlaW5nIEdDJ2QgaW4KQEAgLTczMCw3ICs3MzEsNyBAQAogICAgIGRlZiB0ZXN0X3Nob3J0X2FuZF9sb25nX29wdGlvbl9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAieHl6IiwgIi0tZm9vIiwgImJhciJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJ3h5eicsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9sb25nX29wdGlvbl9hcHBlbmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vPWJhciIsICItYiIsICIxMjMiLCAiLS1mb28iLCAiYmF6Il0sCkBAIC03NDAsMTUgKzc0MSwxNSBAQAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9vbmVfcG9zaXRpb25hbF9hcmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgImZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICJmb28iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmV9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiYXIiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImJhciJdKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfb3B0aW9uX2NvbnN1bWVzX3NlcGFyYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiZm9vIiwgImJhciJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogIi0tIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKQogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICItLSIsICItLWZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9qb2luZWRfYW5kX3NlcGFyYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWFiIiwgIi0tIiwgIi0tZm9vIiwgImJhciJdLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcy5weSBiL0xpYi90ZXN0L3Rlc3Rfb3MucHkKaW5kZXggNTYzMDliZi4uZTEyOWJlZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X29zLnB5CkBAIC0yNCw2ICsyNCw5IEBACiBpbXBvcnQgc3RhdAogaW1wb3J0IGxvY2FsZQogaW1wb3J0IGNvZGVjcworaW1wb3J0IGRlY2ltYWwKK2ltcG9ydCBmcmFjdGlvbnMKK2ltcG9ydCBwaWNrbGUKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0zMiw2ICszNSwxMCBAQAogICAgIGltcG9ydCByZXNvdXJjZQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHJlc291cmNlID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBmY250bAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZjbnRsID0gTm9uZQogCiBmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCkBAIC0yNTYsNiArMjYzLDEzIEBACiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RhdF9hdHRyaWJ1dGVzKGZuYW1lKQogCisgICAgZGVmIHRlc3Rfc3RhdF9yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBvcy5zdGF0KHNlbGYuZm5hbWUpCisgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEluKGInXHgwM2Nvc1xuc3RhdF9yZXN1bHRcbicsIHApCisgICAgICAgIHVucGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgdW5waWNrbGVkKQorCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N0YXR2ZnMnKSwgJ3Rlc3QgbmVlZHMgb3Muc3RhdHZmcygpJykKICAgICBkZWYgdGVzdF9zdGF0dmZzX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTI2Myw3ICsyNzcsNyBAQAogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBPbiBBdGhlT1MsIGdsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUwogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTIG9uIEF0aGVPUycpCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3Muc3RhdHZmcygpIGZhaWxlZCB3aXRoIEVOT1NZUycpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5mX2JmcmVlLCByZXN1bHRbM10pCkBAIC0zMDAsNiArMzE0LDIxIEBACiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3RhdHZmcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIG9zLnN0YXR2ZnMoKSIpCisgICAgZGVmIHRlc3Rfc3RhdHZmc19yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBvcy5zdGF0dmZzKHNlbGYuZm5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAjIE9uIEF0aGVPUywgZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTCisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NZUzoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5zdGF0dmZzKCkgZmFpbGVkIHdpdGggRU5PU1lTJykKKworICAgICAgICBwID0gcGlja2xlLmR1bXBzKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4MDNjb3NcbnN0YXR2ZnNfcmVzdWx0XG4nLCBwKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKKwogICAgIGRlZiB0ZXN0X3V0aW1lX2RpcihzZWxmKToKICAgICAgICAgZGVsdGEgPSAxMDAwMDAwCiAgICAgICAgIHN0ID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKQEAgLTQ3OCw5ICs1MDcsOSBAQAogICAgICAgICAjIFZlcmlmeSB0aGF0IGFuIG9wZW4gZmlsZSBjYW4gYmUgc3RhdCdlZAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5zdGF0KHIiYzpccGFnZWZpbGUuc3lzIikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAyOiAjIGZpbGUgZG9lcyBub3QgZXhpc3Q7IGNhbm5vdCBydW4gdGVzdAotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QocidjOlxwYWdlZmlsZS5zeXMgZG9lcyBub3QgZXhpc3QnKQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KHInYzpccGFnZWZpbGUuc3lzIGRvZXMgbm90IGV4aXN0JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ291bGQgbm90IHN0YXQgcGFnZWZpbGUuc3lzIikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQpAQCAtODc2LDYgKzkwNSwxNyBAQAogICAgICAgICBvcy5tYWtlZGlycyhwYXRoLCBtb2RlPW1vZGUsIGV4aXN0X29rPVRydWUpCiAgICAgICAgIG9zLnVtYXNrKG9sZF9tYXNrKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2Nob3duJyksICd0ZXN0IG5lZWRzIG9zLmNob3duJykKKyAgICBkZWYgdGVzdF9jaG93bl91aWRfZ2lkX2FyZ3VtZW50c19tdXN0X2JlX2luZGV4KHNlbGYpOgorICAgICAgICBzdGF0ID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgdWlkID0gc3RhdC5zdF91aWQKKyAgICAgICAgZ2lkID0gc3RhdC5zdF9naWQKKyAgICAgICAgZm9yIHZhbHVlIGluICgtMS4wLCAtMWosIGRlY2ltYWwuRGVjaW1hbCgtMSksIGZyYWN0aW9ucy5GcmFjdGlvbigtMiwgMikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5jaG93biwgc3VwcG9ydC5URVNURk4sIHZhbHVlLCBnaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLmNob3duLCBzdXBwb3J0LlRFU1RGTiwgdWlkLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob3MuY2hvd24oc3VwcG9ydC5URVNURk4sIHVpZCwgZ2lkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob3MuY2hvd24oc3VwcG9ydC5URVNURk4sIC0xLCAtMSkpCisKICAgICBkZWYgdGVzdF9leGlzdF9va19zX2lzZ2lkX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgJ2RpcjEnKQogICAgICAgICBTX0lTR0lEID0gc3RhdC5TX0lTR0lECkBAIC0xMDMwLDYgKzEwNzAsNDkgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAKKyAgICBkZWYgdGVzdF91cmFuZG9tX2ZkX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjEyMDc6IHVyYW5kb20oKSBzaG91bGQgcmVvcGVuIGl0cyBmZCB0byAvZGV2L3VyYW5kb20gaWYKKyAgICAgICAgIyBjbG9zZWQuCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBvcy51cmFuZG9tKDQpCisgICAgICAgICAgICBvcy5jbG9zZXJhbmdlKDMsIDI1NikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKG9zLnVyYW5kb20oNCkpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLVNjJywgY29kZSkKKworICAgIGRlZiB0ZXN0X3VyYW5kb21fZmRfcmVvcGVuZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxMjA3OiB1cmFuZG9tKCkgc2hvdWxkIGRldGVjdCBpdHMgZmQgdG8gL2Rldi91cmFuZG9tCisgICAgICAgICMgY2hhbmdlZCB0byBzb21ldGhpbmcgZWxzZSwgYW5kIHJlb3BlbiBpdC4KKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiIngiICogMjU2KQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG9zLnVyYW5kb20oNCkKKyAgICAgICAgICAgIGZvciBmZCBpbiByYW5nZSgzLCAyNTYpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEZvdW5kIHRoZSB1cmFuZG9tIGZkIChYWFggaG9wZWZ1bGx5KQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgb3MuY2xvc2VyYW5nZSgzLCAyNTYpCisgICAgICAgICAgICB3aXRoIG9wZW4oe1RFU1RGTiFyfSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBvcy5kdXAyKGYuZmlsZW5vKCksIGZkKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKG9zLnVyYW5kb20oNCkpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUob3MudXJhbmRvbSg0KSkKKyAgICAgICAgICAgICIiIi5mb3JtYXQoVEVTVEZOPXN1cHBvcnQuVEVTVEZOKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctU2MnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQpLCA4KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG91dFswOjRdLCBvdXRbNDo4XSkKKyAgICAgICAgcmMsIG91dDIsIGVycjIgPSBhc3NlcnRfcHl0aG9uX29rKCctU2MnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQyKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvdXQyLCBvdXQpCisKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKIGRlZiBfZXhlY3ZwZV9tb2NrdXAoZGVmcGF0aD1Ob25lKToKQEAgLTExMzIsMjcgKzEyMTUsMjcgQEAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgV2luMzJFcnJvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MucmVuYW1lLCBzdXBwb3J0LlRFU1RGTiwgc3VwcG9ydC5URVNURk4rIi5iYWsiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZW5hbWUsIHN1cHBvcnQuVEVTVEZOLCBzdXBwb3J0LlRFU1RGTisiLmJhayIpCiAKICAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MucmVtb3ZlLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVtb3ZlLCBzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2NoZGlyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNoZGlyLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MuY2hkaXIsIHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfbWtkaXIoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MubWtkaXIsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWtkaXIsIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF91dGltZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy51dGltZSwgc3VwcG9ydC5URVNURk4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnV0aW1lLCBzdXBwb3J0LlRFU1RGTiwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2NobW9kKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNobW9kLCBzdXBwb3J0LlRFU1RGTiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MuY2htb2QsIHN1cHBvcnQuVEVTVEZOLCAwKQogCiBjbGFzcyBUZXN0SW52YWxpZEZEKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzaW5nbGVzID0gWyJmY2hkaXIiLCAiZHVwIiwgImZkb3BlbiIsICJmZGF0YXN5bmMiLCAiZnN0YXQiLApAQCAtMTI4Niw0MSArMTM2OSw1NyBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXR1aWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0dWlkKCknKQogICAgIGRlZiB0ZXN0X3NldHVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXR1aWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXR1aWQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHVpZCwgMTw8MzIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0Z2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldGdpZCgpJykKICAgICBkZWYgdGVzdF9zZXRnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGdpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldGdpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0Z2lkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldGV1aWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0ZXVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRldWlkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0ZXVpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0ZXVpZCwgMTw8MzIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0ZWdpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRlZ2lkKCknKQogICAgIGRlZiB0ZXN0X3NldGVnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGVnaWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRlZ2lkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRlZ2lkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZXVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZXVpZCgpJykKICAgICBkZWYgdGVzdF9zZXRyZXVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRyZXVpZCwgMCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZXVpZCwgMTw8MzIsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAwLCAxPDwzMikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZXVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZXVpZCgpJykKKyAgICBkZWYgdGVzdF9zZXRyZXVpZF9uZWcxKHNlbGYpOgorICAgICAgICAjIE5lZWRzIHRvIGFjY2VwdCAtMS4gIFdlIHJ1biB0aGlzIGluIGEgc3VicHJvY2VzcyB0byBhdm9pZAorICAgICAgICAjIGFsdGVyaW5nIHRoZSB0ZXN0IHJ1bm5lcidzIHByb2Nlc3Mgc3RhdGUgKGlzc3VlODA0NSkuCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBvcyxzeXM7b3Muc2V0cmV1aWQoLTEsLTEpO3N5cy5leGl0KDApJ10pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0cmVnaWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0cmVnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJlZ2lkLCAwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJlZ2lkLCAxPDwzMiwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDAsIDE8PDMyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJlZ2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJlZ2lkKCknKQorICAgIGRlZiB0ZXN0X3NldHJlZ2lkX25lZzEoc2VsZik6CisgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCisgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZWdpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKKwogQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIlBvc2l4IHNwZWNpZmljIHRlc3RzIikKIGNsYXNzIFBlcDM4M1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xNTEwLDYgKzE2MDksNTIgQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFdpbjMyTGlzdGRpclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGxpc3RkaXIgb24gV2luZG93cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CisgICAgICAgICAgICBkaXJfbmFtZSA9ICdTVUIlZCcgJSBpCisgICAgICAgICAgICBkaXJfcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgZGlyX25hbWUpCisgICAgICAgICAgICBmaWxlX25hbWUgPSAnRklMRSVkJyAlIGkKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgZmlsZV9uYW1lKQorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlyX3BhdGgpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiSSdtICVzIGFuZCBwcm91ZCBvZiBpdC4gQmxhbWUgdGVzdF9vcy5cbiIgJSBmaWxlX3BhdGgpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMuZXh0ZW5kKFtkaXJfbmFtZSwgZmlsZV9uYW1lXSkKKyAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzLnNvcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfbGlzdGRpcl9ub19leHRlbmRlZF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdoZW4gdGhlIHBhdGggaXMgbm90IGFuICJleHRlbmRlZCIgcGF0aC4iIiIKKyAgICAgICAgIyB1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIoc3VwcG9ydC5URVNURk4pKSwKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMpCisgICAgICAgICMgYnl0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihvcy5mc2VuY29kZShzdXBwb3J0LlRFU1RGTikpKSwKKyAgICAgICAgICAgICAgICBbb3MuZnNlbmNvZGUocGF0aCkgZm9yIHBhdGggaW4gc2VsZi5jcmVhdGVkX3BhdGhzXSkKKworICAgIGRlZiB0ZXN0X2xpc3RkaXJfZXh0ZW5kZWRfcGF0aChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aGVuIHRoZSBwYXRoIHN0YXJ0cyB3aXRoICdcXFxcP1xcJy4iIiIKKyAgICAgICAgIyBTZWU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcodj12cy44NSkuYXNweCNtYXhwYXRoCisgICAgICAgICMgdW5pY29kZQorICAgICAgICBwYXRoID0gJ1xcXFw/XFwnICsgb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKHBhdGgpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMpCisgICAgICAgICMgYnl0ZXMKKyAgICAgICAgcGF0aCA9IGInXFxcXD9cXCcgKyBvcy5mc2VuY29kZShvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKHBhdGgpKSwKKyAgICAgICAgICAgICAgICBbb3MuZnNlbmNvZGUocGF0aCkgZm9yIHBhdGggaW4gc2VsZi5jcmVhdGVkX3BhdGhzXSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKIGNsYXNzIFdpbjMyU3ltbGlua1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmaWxlbGluayA9ICdmaWxlbGlua3Rlc3QnCkBAIC0yMTc0LDYgKzIzMTksMTk3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKIAogCitjbGFzcyBPU0Vycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgU3RyKHN0cik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5ieXRlc19maWxlbmFtZXMgPSBbXQorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzID0gW10KKyAgICAgICAgaWYgc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWNvZGVkID0gc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlY29kZWQgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLmFwcGVuZChkZWNvZGVkKQorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLmFwcGVuZChTdHIoZGVjb2RlZCkpCisgICAgICAgIGlmIHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW5jb2RlZCA9IHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbmNvZGVkID0gb3MuZnNlbmNvZGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYnl0ZXNfZmlsZW5hbWVzLmFwcGVuZChlbmNvZGVkKQorICAgICAgICBzZWxmLmJ5dGVzX2ZpbGVuYW1lcy5hcHBlbmQobWVtb3J5dmlldyhlbmNvZGVkKSkKKworICAgICAgICBzZWxmLmZpbGVuYW1lcyA9IHNlbGYuYnl0ZXNfZmlsZW5hbWVzICsgc2VsZi51bmljb2RlX2ZpbGVuYW1lcworCisgICAgZGVmIHRlc3Rfb3NlcnJvcl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgZnVuY3MgPSBbCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmNoZGlyLCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmNobW9kLCAwbzc3NyksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxzdGF0LCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLm9wZW4sIG9zLk9fUkRPTkxZKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Mucm1kaXIsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Muc3RhdCwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy51bmxpbmssKSwKKyAgICAgICAgXQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIGZ1bmNzLmV4dGVuZCgoCisgICAgICAgICAgICAgICAgKHNlbGYuYnl0ZXNfZmlsZW5hbWVzLCBvcy5yZW5hbWUsIGIiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYuYnl0ZXNfZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCBiImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZW5hbWUsICJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi51bmljb2RlX2ZpbGVuYW1lcywgb3MucmVwbGFjZSwgImRzdCIpLAorICAgICAgICAgICAgICAgICMgSXNzdWUgIzE2NDE0OiBEb24ndCB0ZXN0IHVuZGVjb2RhYmxlIG5hbWVzIHdpdGggbGlzdGRpcigpCisgICAgICAgICAgICAgICAgIyBiZWNhdXNlIG9mIGEgV2luZG93cyBidWcuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgV2l0aCB0aGUgQU5TSSBjb2RlIHBhZ2UgOTMyLCBvcy5saXN0ZGlyKGInXHhlNycpIHJldHVybiBhbgorICAgICAgICAgICAgICAgICMgZW1wdHkgbGlzdCAoaW5zdGVhZCBvZiBmYWlsaW5nKSwgd2hlcmVhcyBvcy5saXN0ZGlyKGInXHhmZicpCisgICAgICAgICAgICAgICAgIyByYWlzZXMgYSBGaWxlTm90Rm91bmRFcnJvci4gSXQgbG9va3MgbGlrZSBhIFdpbmRvd3MgYnVnOgorICAgICAgICAgICAgICAgICMgYidceGU3JyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsIEZpbmRGaXJzdEZpbGVBKGInXHhlNycpCisgICAgICAgICAgICAgICAgIyBmYWlscyB3aXRoIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EICgyKSwgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICMgRVJST1JfUEFUSF9OT1RfRk9VTkQgKDMpLgorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5saXN0ZGlyLCksCisgICAgICAgICAgICApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxpc3RkaXIsKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJlbmFtZSwgImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MucmVwbGFjZSwgImRzdCIpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImNob3duIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaG93biwgMCwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsY2hvd24iKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmxjaG93biwgMCwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJ0cnVuY2F0ZSIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MudHJ1bmNhdGUsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hmbGFncyIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MuY2hmbGFncywgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsY2hmbGFncyIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNoZmxhZ3MsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hyb290Iik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaHJvb3QsKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLmxpbmssIGIiZHN0IikpCisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5saW5rLCAiZHN0IikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmxpbmssICJkc3QiKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxpc3R4YXR0ciIpOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxpc3R4YXR0ciwpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuZ2V0eGF0dHIsICJ1c2VyLnRlc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnNldHhhdHRyLCAidXNlci50ZXN0IiwgYid1c2VyJyksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5yZW1vdmV4YXR0ciwgInVzZXIudGVzdCIpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaG1vZCIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNobW9kLCAwbzc3NykpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJyZWFkbGluayIpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZWFkbGluaywpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5yZWFkbGluaywpKQorCisgICAgICAgIGZvciBmaWxlbmFtZXMsIGZ1bmMsICpmdW5jX2FyZ3MgaW4gZnVuY3M6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmdW5jKG5hbWUsICpmdW5jX2FyZ3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGVyci5maWxlbmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiB0aHJvd24gYnkge30iLmZvcm1hdChmdW5jKSkKKworY2xhc3MgQ1BVQ291bnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY3B1X2NvdW50KHNlbGYpOgorICAgICAgICBjcHVzID0gb3MuY3B1X2NvdW50KCkKKyAgICAgICAgaWYgY3B1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjcHVzLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoY3B1cywgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBDUFVzIikKKworCitjbGFzcyBGREluaGVyaXRhbmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2dldF9zZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgRmFsc2UpCisKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9nZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBGYWxzZSkKKworICAgICAgICAjIGNsZWFyIEZEX0NMT0VYRUMgZmxhZworICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICBmbGFncyAmPSB+ZmNudGwuRkRfQ0xPRVhFQworICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3Rfc2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GRF9DTE9FWEVDKQorCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgIDApCisKKyAgICBkZWYgdGVzdF9vcGVuKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3BpcGUnKSwgIm5lZWQgb3MucGlwZSgpIikKKyAgICBkZWYgdGVzdF9waXBlKHNlbGYpOgorICAgICAgICByZmQsIHdmZCA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHJmZCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3ZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHJmZCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZSh3ZmQpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2R1cChzZWxmKToKKyAgICAgICAgZmQxID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQxKQorCisgICAgICAgIGZkMiA9IG9zLmR1cChmZDEpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZDIpLCBGYWxzZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdkdXAyJyksICJuZWVkIG9zLmR1cDIoKSIpCisgICAgZGVmIHRlc3RfZHVwMihzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKworICAgICAgICAjIGluaGVyaXRhYmxlIGJ5IGRlZmF1bHQKKyAgICAgICAgZmQyID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmR1cDIoZmQsIGZkMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMiksIFRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShmZDIpCisKKyAgICAgICAgIyBmb3JjZSBub24taW5oZXJpdGFibGUKKyAgICAgICAgZmQzID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmR1cDIoZmQsIGZkMywgaW5oZXJpdGFibGU9RmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZDMpLCBGYWxzZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdvcGVucHR5JyksICJuZWVkIG9zLm9wZW5wdHkoKSIpCisgICAgZGVmIHRlc3Rfb3BlbnB0eShzZWxmKToKKyAgICAgICAgbWFzdGVyX2ZkLCBzbGF2ZV9mZCA9IG9zLm9wZW5wdHkoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIG1hc3Rlcl9mZCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBzbGF2ZV9mZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkKSwgRmFsc2UpCisKKwogQHN1cHBvcnQucmVhcF90aHJlYWRzCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCkBAIC0yMTkxLDYgKzI1MjcsNyBAQAogICAgICAgICBQb3NpeFVpZEdpZFRlc3RzLAogICAgICAgICBQZXAzODNUZXN0cywKICAgICAgICAgV2luMzJLaWxsVGVzdHMsCisgICAgICAgIFdpbjMyTGlzdGRpclRlc3RzLAogICAgICAgICBXaW4zMlN5bWxpbmtUZXN0cywKICAgICAgICAgTm9uTG9jYWxTeW1saW5rVGVzdHMsCiAgICAgICAgIEZTRW5jb2RpbmdUZXN0cywKQEAgLTIyMDMsNyArMjU0MCwxMCBAQAogICAgICAgICBFeHRlbmRlZEF0dHJpYnV0ZVRlc3RzLAogICAgICAgICBXaW4zMkRlcHJlY2F0ZWRCeXRlc0FQSSwKICAgICAgICAgVGVybXNpemVUZXN0cywKKyAgICAgICAgT1NFcnJvclRlc3RzLAogICAgICAgICBSZW1vdmVEaXJzVGVzdHMsCisgICAgICAgIENQVUNvdW50VGVzdHMsCisgICAgICAgIEZESW5oZXJpdGFuY2VUZXN0cywKICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5IGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQppbmRleCAzOTA4YTA1Li5jOWUyYTI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBkZWYgcGxheV9zb3VuZF9maWxlKHNlbGYsIGRhdGEsIHJhdGUsIHNzaXplLCBuY2hhbm5lbHMpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCd3JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQpAQCAtMTkwLDcgKzE5MCw3IEBACiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCd3JykKLSAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBJT0Vycm9yKSBhcyBtc2c6CisgICAgZXhjZXB0IChvc3NhdWRpb2Rldi5lcnJvciwgT1NFcnJvcikgYXMgbXNnOgogICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGF0aGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGF0aGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjZhNjZkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5CkBAIC0wLDAgKzEsMTg4NCBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorVEVTVEZOID0gc3VwcG9ydC5URVNURk4KKwordHJ5OgorICAgIGltcG9ydCBncnAsIHB3ZAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdycCA9IHB3ZCA9IE5vbmUKKworCitjbGFzcyBfQmFzZUZsYXZvdXJUZXN0KG9iamVjdCk6CisKKyAgICBkZWYgX2NoZWNrX3BhcnNlX3BhcnRzKHNlbGYsIGFyZywgZXhwZWN0ZWQpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnBhcnNlX3BhcnRzCisgICAgICAgIHNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgYWx0c2VwID0gc2VsZi5mbGF2b3VyLmFsdHNlcAorICAgICAgICBhY3R1YWwgPSBmKFt4LnJlcGxhY2UoJy8nLCBzZXApIGZvciB4IGluIGFyZ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgaWYgYWx0c2VwOgorICAgICAgICAgICAgYWN0dWFsID0gZihbeC5yZXBsYWNlKCcvJywgYWx0c2VwKSBmb3IgeCBpbiBhcmddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHNfY29tbW9uKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX3BhcnNlX3BhcnRzCisgICAgICAgIHNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgIyBVbmFuY2hvcmVkIHBhcnRzCisgICAgICAgIGNoZWNrKFtdLCAgICAgICAgICAgICAgICAgICAoJycsICcnLCBbXSkpCisgICAgICAgIGNoZWNrKFsnYSddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYS8nXSwgICAgICAgICAgICAgICAoJycsICcnLCBbJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiJ10sICAgICAgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgIyBFeHBhbnNpb24KKyAgICAgICAgY2hlY2soWydhL2InXSwgICAgICAgICAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJ2EvYi8nXSwgICAgICAgICAgICAgKCcnLCAnJywgWydhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiL2MnLCAnZCddLCAgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgICMgQ29sbGFwc2luZyBhbmQgc3RyaXBwaW5nIGV4Y2VzcyBzbGFzaGVzCisgICAgICAgIGNoZWNrKFsnYScsICdiLy9jJywgJ2QnXSwgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiL2MvJywgJ2QnXSwgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgICMgRWxpbWluYXRpbmcgc3RhbmRhbG9uZSBkb3RzCisgICAgICAgIGNoZWNrKFsnLiddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbXSkpCisgICAgICAgIGNoZWNrKFsnLicsICcuJywgJ2InXSwgICAgICAoJycsICcnLCBbJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYScsICcuJywgJ2InXSwgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy4nLCAnLiddLCAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgIyBUaGUgZmlyc3QgcGFydCBpcyBhbmNob3JlZAorICAgICAgICBjaGVjayhbJy9hL2InXSwgICAgICAgICAgICAgKCcnLCBzZXAsIFtzZXAsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnL2EnLCAnYiddLCAgICAgICAgICAoJycsIHNlcCwgW3NlcCwgJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWycvYS8nLCAnYiddLCAgICAgICAgICgnJywgc2VwLCBbc2VwLCAnYScsICdiJ10pKQorICAgICAgICAjIElnbm9yaW5nIHBhcnRzIGJlZm9yZSBhbiBhbmNob3JlZCBwYXJ0CisgICAgICAgIGNoZWNrKFsnYScsICcvYicsICdjJ10sICAgICAoJycsIHNlcCwgW3NlcCwgJ2InLCAnYyddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy9iJywgJy9jJ10sICAgICgnJywgc2VwLCBbc2VwLCAnYyddKSkKKworCitjbGFzcyBQb3NpeEZsYXZvdXJUZXN0KF9CYXNlRmxhdm91clRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBmbGF2b3VyID0gcGF0aGxpYi5fcG9zaXhfZmxhdm91cgorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHMoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgIyBDb2xsYXBzaW5nIG9mIGV4Y2VzcyBsZWFkaW5nIHNsYXNoZXMsIGV4Y2VwdCBmb3IgdGhlIGRvdWJsZS1zbGFzaAorICAgICAgICAjIHNwZWNpYWwgY2FzZS4KKyAgICAgICAgY2hlY2soWycvL2EnLCAnYiddLCAgICAgICAgICAgICAoJycsICcvLycsIFsnLy8nLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy8vL2EnLCAnYiddLCAgICAgICAgICAgICgnJywgJy8nLCBbJy8nLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy8vLy9hJywgJ2InXSwgICAgICAgICAgICgnJywgJy8nLCBbJy8nLCAnYScsICdiJ10pKQorICAgICAgICAjIFBhdGhzIHdoaWNoIGxvb2sgbGlrZSBOVCBwYXRocyBhcmVuJ3QgdHJlYXRlZCBzcGVjaWFsbHkKKyAgICAgICAgY2hlY2soWydjOmEnXSwgICAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2M6YSddKSkKKyAgICAgICAgY2hlY2soWydjOlxcYSddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2M6XFxhJ10pKQorICAgICAgICBjaGVjayhbJ1xcYSddLCAgICAgICAgICAgICAgICAgICgnJywgJycsIFsnXFxhJ10pKQorCisgICAgZGVmIHRlc3Rfc3BsaXRyb290KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnNwbGl0cm9vdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJycpLCAoJycsICcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYScpLCAoJycsICcnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2EvYicpLCAoJycsICcnLCAnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYS9iLycpLCAoJycsICcnLCAnYS9iLycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hJyksICgnJywgJy8nLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hL2InKSwgKCcnLCAnLycsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvYS9iLycpLCAoJycsICcvJywgJ2EvYi8nKSkKKyAgICAgICAgIyBUaGUgcm9vdCBpcyBjb2xsYXBzZWQgd2hlbiB0aGVyZSBhcmUgcmVkdW5kYW50IHNsYXNoZXMKKyAgICAgICAgIyBleGNlcHQgd2hlbiB0aGVyZSBhcmUgZXhhY3RseSB0d28gbGVhZGluZyBzbGFzaGVzLCB3aGljaAorICAgICAgICAjIGlzIGEgc3BlY2lhbCBjYXNlIGluIFBPU0lYLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy8vYScpLCAoJycsICcvLycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignLy8vYScpLCAoJycsICcvJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvLy9hL2InKSwgKCcnLCAnLycsICdhL2InKSkKKyAgICAgICAgIyBQYXRocyB3aGljaCBsb29rIGxpa2UgTlQgcGF0aHMgYXJlbid0IHRyZWF0ZWQgc3BlY2lhbGx5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzovYS9iJyksICgnJywgJycsICdjOi9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXC9hL2InKSwgKCcnLCAnJywgJ1xcL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYVxcYicpLCAoJycsICcnLCAnXFxhXFxiJykpCisKKworY2xhc3MgTlRGbGF2b3VyVGVzdChfQmFzZUZsYXZvdXJUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZmxhdm91ciA9IHBhdGhsaWIuX3dpbmRvd3NfZmxhdm91cgorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHMoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgIyBGaXJzdCBwYXJ0IGlzIGFuY2hvcmVkCisgICAgICAgIGNoZWNrKFsnYzonXSwgICAgICAgICAgICAgICAgICAgKCdjOicsICcnLCBbJ2M6J10pKQorICAgICAgICBjaGVjayhbJ2M6XFwnXSwgICAgICAgICAgICAgICAgICgnYzonLCAnXFwnLCBbJ2M6XFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFwnXSwgICAgICAgICAgICAgICAgICAgKCcnLCAnXFwnLCBbJ1xcJ10pKQorICAgICAgICBjaGVjayhbJ2M6YSddLCAgICAgICAgICAgICAgICAgICgnYzonLCAnJywgWydjOicsICdhJ10pKQorICAgICAgICBjaGVjayhbJ2M6XFxhJ10sICAgICAgICAgICAgICAgICgnYzonLCAnXFwnLCBbJ2M6XFwnLCAnYSddKSkKKyAgICAgICAgY2hlY2soWydcXGEnXSwgICAgICAgICAgICAgICAgICAoJycsICdcXCcsIFsnXFwnLCAnYSddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydcXFxcYVxcYiddLCAgICAgICAgICAgICAoJ1xcXFxhXFxiJywgJ1xcJywgWydcXFxcYVxcYlxcJ10pKQorICAgICAgICBjaGVjayhbJ1xcXFxhXFxiXFwnXSwgICAgICAgICAgICgnXFxcXGFcXGInLCAnXFwnLCBbJ1xcXFxhXFxiXFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFxcXGFcXGJcXGMnXSwgICAgICAgICAgKCdcXFxcYVxcYicsICdcXCcsIFsnXFxcXGFcXGJcXCcsICdjJ10pKQorICAgICAgICAjIFNlY29uZCBwYXJ0IGlzIGFuY2hvcmVkLCBzbyB0aGF0IHRoZSBmaXJzdCBwYXJ0IGlzIGlnbm9yZWQKKyAgICAgICAgY2hlY2soWydhJywgJ1o6YicsICdjJ10sICAgICAgICAoJ1o6JywgJycsIFsnWjonLCAnYicsICdjJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnWjpcXGInLCAnYyddLCAgICAgICgnWjonLCAnXFwnLCBbJ1o6XFwnLCAnYicsICdjJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnXFxiJywgJ2MnXSwgICAgICAgICgnJywgJ1xcJywgWydcXCcsICdiJywgJ2MnXSkpCisgICAgICAgICMgVU5DIHBhdGhzCisgICAgICAgIGNoZWNrKFsnYScsICdcXFxcYlxcYycsICdkJ10sICAgKCdcXFxcYlxcYycsICdcXCcsIFsnXFxcXGJcXGNcXCcsICdkJ10pKQorICAgICAgICAjIENvbGxhcHNpbmcgYW5kIHN0cmlwcGluZyBleGNlc3Mgc2xhc2hlcworICAgICAgICBjaGVjayhbJ2EnLCAnWjpcXFxcYlxcXFxjXFwnLCAnZFxcJ10sICgnWjonLCAnXFwnLCBbJ1o6XFwnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgICMgVU5DIHBhdGhzCisgICAgICAgIGNoZWNrKFsnYScsICdcXFxcYlxcY1xcXFwnLCAnZCddLCAoJ1xcXFxiXFxjJywgJ1xcJywgWydcXFxcYlxcY1xcJywgJ2QnXSkpCisgICAgICAgICMgRXh0ZW5kZWQgcGF0aHMKKyAgICAgICAgY2hlY2soWydcXFxcP1xcYzpcXCddLCAgICAgICAgICAoJ1xcXFw/XFxjOicsICdcXCcsIFsnXFxcXD9cXGM6XFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFxcXD9cXGM6XFxhJ10sICAgICAgICAgKCdcXFxcP1xcYzonLCAnXFwnLCBbJ1xcXFw/XFxjOlxcJywgJ2EnXSkpCisgICAgICAgICMgRXh0ZW5kZWQgVU5DIHBhdGhzIChmb3JtYXQgaXMgIlxcP1xVTkNcc2VydmVyXHNoYXJlIikKKyAgICAgICAgY2hlY2soWydcXFxcP1xcVU5DXFxiXFxjJ10sICAgICAoJ1xcXFw/XFxVTkNcXGJcXGMnLCAnXFwnLCBbJ1xcXFw/XFxVTkNcXGJcXGNcXCddKSkKKyAgICAgICAgY2hlY2soWydcXFxcP1xcVU5DXFxiXFxjXFxkJ10sICAoJ1xcXFw/XFxVTkNcXGJcXGMnLCAnXFwnLCBbJ1xcXFw/XFxVTkNcXGJcXGNcXCcsICdkJ10pKQorCisgICAgZGVmIHRlc3Rfc3BsaXRyb290KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnNwbGl0cm9vdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJycpLCAoJycsICcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYScpLCAoJycsICcnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2FcXGInKSwgKCcnLCAnJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXGEnKSwgKCcnLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYVxcYicpLCAoJycsICdcXCcsICdhXFxiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzphXFxiJyksICgnYzonLCAnJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOlxcYVxcYicpLCAoJ2M6JywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgIyBSZWR1bmRhbnQgc2xhc2hlcyBpbiB0aGUgcm9vdCBhcmUgY29sbGFwc2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGEnKSwgKCcnLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxcXGEvYicpLCAoJycsICdcXCcsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOlxcXFxhJyksICgnYzonLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxcXFxcYS9iJyksICgnYzonLCAnXFwnLCAnYS9iJykpCisgICAgICAgICMgVmFsaWQgVU5DIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGFcXGInKSwgKCdcXFxcYVxcYicsICdcXCcsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYlxcJyksICgnXFxcXGFcXGInLCAnXFwnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGFcXGJcXGNcXGQnKSwgKCdcXFxcYVxcYicsICdcXCcsICdjXFxkJykpCisgICAgICAgICMgVGhlc2UgYXJlIG5vbi1VTkMgcGF0aHMgKGFjY29yZGluZyB0byBudHBhdGgucHkgYW5kIHRlc3RfbnRwYXRoKQorICAgICAgICAjIEhvd2V2ZXIsIGNvbW1hbmQuY29tIHNheXMgc3VjaCBwYXRocyBhcmUgaW52YWxpZCwgc28gaXQncworICAgICAgICAjIGRpZmZpY3VsdCB0byBrbm93IHdoYXQgdGhlIHJpZ2h0IHNlbWFudGljcyBhcmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcXFxhXFxiJyksICgnJywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYScpLCAoJycsICdcXCcsICdhJykpCisKKworIworIyBUZXN0cyBmb3IgdGhlIHB1cmUgY2xhc3NlcworIworCitjbGFzcyBfQmFzZVB1cmVQYXRoVGVzdChvYmplY3QpOgorCisgICAgIyBrZXlzIGFyZSBjYW5vbmljYWwgcGF0aHMsIHZhbHVlcyBhcmUgbGlzdCBvZiB0dXBsZXMgb2YgYXJndW1lbnRzCisgICAgIyBzdXBwb3NlZCB0byBwcm9kdWNlIGVxdWFsIHBhdGhzCisgICAgZXF1aXZhbGVuY2VzID0geworICAgICAgICAnYS9iJzogWworICAgICAgICAgICAgKCdhJywgJ2InKSwgKCdhLycsICdiJyksICgnYScsICdiLycpLCAoJ2EvJywgJ2IvJyksCisgICAgICAgICAgICAoJ2EvYi8nLCksICgnYS8vYicsKSwgKCdhLy9iLy8nLCksCisgICAgICAgICAgICAjIGVtcHR5IGNvbXBvbmVudHMgZ2V0IHJlbW92ZWQKKyAgICAgICAgICAgICgnJywgJ2EnLCAnYicpLCAoJ2EnLCAnJywgJ2InKSwgKCdhJywgJ2InLCAnJyksCisgICAgICAgICAgICBdLAorICAgICAgICAnL2IvYy9kJzogWworICAgICAgICAgICAgKCdhJywgJy9iL2MnLCAnZCcpLCAoJ2EnLCAnLy8vYi8vYycsICdkLycpLAorICAgICAgICAgICAgKCcvYScsICcvYi9jJywgJ2QnKSwKKyAgICAgICAgICAgICMgZW1wdHkgY29tcG9uZW50cyBnZXQgcmVtb3ZlZAorICAgICAgICAgICAgKCcvJywgJ2InLCAnJywgJ2MvZCcpLCAoJy8nLCAnJywgJ2IvYy9kJyksICgnJywgJy9iL2MvZCcpLAorICAgICAgICAgICAgXSwKKyAgICB9CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYScpCisgICAgICAgIHNlbGYuZmxhdm91ciA9IHAuX2ZsYXZvdXIKKyAgICAgICAgc2VsZi5zZXAgPSBzZWxmLmZsYXZvdXIuc2VwCisgICAgICAgIHNlbGYuYWx0c2VwID0gc2VsZi5mbGF2b3VyLmFsdHNlcAorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocCwgUCkKKyAgICAgICAgUCgnYScsICdiJywgJ2MnKQorICAgICAgICBQKCcvYScsICdiJywgJ2MnKQorICAgICAgICBQKCdhL2IvYycpCisgICAgICAgIFAoJy9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJykpLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJyksICdiJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoUCgnYScpLCBQKCdiJykpLCBQKCdhL2InKSkKKworICAgIGRlZiBfY2hlY2tfc3RyX3N1YmNsYXNzKHNlbGYsICphcmdzKToKKyAgICAgICAgIyBJc3N1ZSAjMjExMjc6IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgYSBQdXJlUGF0aCBvYmplY3QKKyAgICAgICAgIyBmcm9tIGFuIHN0ciBzdWJjbGFzcyBpbnN0YW5jZSwgYW5kIGl0IHRoZW4gZ2V0cyBjb252ZXJ0ZWQgdG8KKyAgICAgICAgIyBhIHB1cmUgc3RyIG9iamVjdC4KKyAgICAgICAgY2xhc3MgU3RyU3ViY2xhc3Moc3RyKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCooU3RyU3ViY2xhc3MoeCkgZm9yIHggaW4gYXJncykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCgqYXJncykpCisgICAgICAgIGZvciBwYXJ0IGluIHAucGFydHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocGFydCksIHN0cikKKworICAgIGRlZiB0ZXN0X3N0cl9zdWJjbGFzc19jb21tb24oc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCcuJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdhJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdhL2IudHh0JykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCcvYS9iLnR4dCcpCisKKyAgICBkZWYgdGVzdF9qb2luX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocHApLCB0eXBlKHApKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2MnLCAnZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jL2QnKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKFAoJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MnKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCcvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKyAgICBkZWYgdGVzdF9kaXZfY29tbW9uKHNlbGYpOgorICAgICAgICAjIEJhc2ljYWxseSB0aGUgc2FtZSBhcyBqb2lucGF0aCgpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgcHAgPSBwIC8gJ2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwcCksIHR5cGUocCkpCisgICAgICAgIHBwID0gcCAvICdjL2QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jL2QnKSkKKyAgICAgICAgcHAgPSBwIC8gJ2MnIC8gJ2QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jL2QnKSkKKyAgICAgICAgcHAgPSAnYycgLyBwIC8gJ2QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2MvYS9iL2QnKSkKKyAgICAgICAgcHAgPSBwIC8gUCgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHBwID0gcC8gJy9jJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisgICAgZGVmIF9jaGVja19zdHIoc2VsZiwgZXhwZWN0ZWQsIGFyZ3MpOgorICAgICAgICBwID0gc2VsZi5jbHMoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBleHBlY3RlZC5yZXBsYWNlKCcvJywgc2VsZi5zZXApKQorCisgICAgZGVmIHRlc3Rfc3RyX2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBDYW5vbmljYWxpemVkIHBhdGhzIHJvdW5kdHJpcAorICAgICAgICBmb3IgcGF0aHN0ciBpbiAoJ2EnLCAnYS9iJywgJ2EvYi9jJywgJy8nLCAnL2EvYicsICcvYS9iL2MnKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3N0cihwYXRoc3RyLCAocGF0aHN0ciwpKQorICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgdGhlIGVtcHR5IHBhdGgKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyKCcuJywgKCcnLCkpCisgICAgICAgICMgT3RoZXIgdGVzdHMgZm9yIHN0cigpIGFyZSBpbiB0ZXN0X2VxdWl2YWxlbmNlcygpCisKKyAgICBkZWYgdGVzdF9hc19wb3NpeF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBmb3IgcGF0aHN0ciBpbiAoJ2EnLCAnYS9iJywgJ2EvYi9jJywgJy8nLCAnL2EvYicsICcvYS9iL2MnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChwYXRoc3RyKS5hc19wb3NpeCgpLCBwYXRoc3RyKQorICAgICAgICAjIE90aGVyIHRlc3RzIGZvciBhc19wb3NpeCgpIGFyZSBpbiB0ZXN0X2VxdWl2YWxlbmNlcygpCisKKyAgICBkZWYgdGVzdF9hc19ieXRlc19jb21tb24oc2VsZik6CisgICAgICAgIHNlcCA9IG9zLmZzZW5jb2RlKHNlbGYuc2VwKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhQKCdhL2InKSksIGInYScgKyBzZXAgKyBiJ2InKQorCisgICAgZGVmIHRlc3RfYXNfdXJpX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCdhJykuYXNfdXJpKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIFAoKS5hc191cmkoKQorCisgICAgZGVmIHRlc3RfcmVwcl9jb21tb24oc2VsZik6CisgICAgICAgIGZvciBwYXRoc3RyIGluICgnYScsICdhL2InLCAnYS9iL2MnLCAnLycsICcvYS9iJywgJy9hL2IvYycpOgorICAgICAgICAgICAgcCA9IHNlbGYuY2xzKHBhdGhzdHIpCisgICAgICAgICAgICBjbHNuYW1lID0gcC5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIHIgPSByZXByKHApCisgICAgICAgICAgICAjIFRoZSByZXByKCkgaXMgaW4gdGhlIGZvcm0gQ2xhc3NOYW1lKCJmb3J3YXJkLXNsYXNoZXMgcGF0aCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoci5zdGFydHN3aXRoKGNsc25hbWUgKyAnKCcpLCByKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJyknKSwgcikKKyAgICAgICAgICAgIGlubmVyID0gcltsZW4oY2xzbmFtZSkgKyAxIDogLTFdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoaW5uZXIpLCBwLmFzX3Bvc2l4KCkpCisgICAgICAgICAgICAjIFRoZSByZXByKCkgcm91bmR0cmlwcworICAgICAgICAgICAgcSA9IGV2YWwociwgcGF0aGxpYi5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fX2NsYXNzX18sIHAuX19jbGFzc19fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHEpLCByKQorCisgICAgZGVmIHRlc3RfZXFfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJyksIFAoJ2EnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJy9hL2InKSwgUCgnLycpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwgUCgnLycpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksIGludCkKKworICAgIGRlZiB0ZXN0X21hdGNoX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EnKS5tYXRjaCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EnKS5tYXRjaCwgJy4nKQorICAgICAgICAjIFNpbXBsZSByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdiLnB5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2EvYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhLnB5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiL3B5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weS9jJykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgIyBXaWxjYXJkIHJlbGF0aXZlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2IucHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYS9iLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hL2IucHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHljJykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLi9weScpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weS9jJykubWF0Y2goJyoucHknKSkKKyAgICAgICAgIyBNdWx0aS1wYXJ0IHJlbGF0aXZlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2FiL2MucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2QvYWIvYy5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2RhYi9jLnB5JykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhYi9jLnB5L2QnKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICAjIEFic29sdXRlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EvYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hL2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgIyBNdWx0aS1wYXJ0IGFic29sdXRlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hL2IucHknKS5tYXRjaCgnL2EvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hYi5weScpLm1hdGNoKCcvYS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EvYi9jLnB5JykubWF0Y2goJy9hLyoucHknKSkKKworICAgIGRlZiB0ZXN0X29yZGVyaW5nX2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBPcmRlcmluZyBpcyB0dXBsZS1hbGlrZQorICAgICAgICBkZWYgYXNzZXJ0TGVzcyhhLCBiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGIsIGEpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBhID0gUCgnYScpCisgICAgICAgIGIgPSBQKCdhL2InKQorICAgICAgICBjID0gUCgnYWJjJykKKyAgICAgICAgZCA9IFAoJ2InKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGIpCisgICAgICAgIGFzc2VydExlc3MoYSwgYykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBkKQorICAgICAgICBhc3NlcnRMZXNzKGIsIGMpCisgICAgICAgIGFzc2VydExlc3MoYywgZCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIGEgPSBQKCcvYScpCisgICAgICAgIGIgPSBQKCcvYS9iJykKKyAgICAgICAgYyA9IFAoJy9hYmMnKQorICAgICAgICBkID0gUCgnL2InKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGIpCisgICAgICAgIGFzc2VydExlc3MoYSwgYykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBkKQorICAgICAgICBhc3NlcnRMZXNzKGIsIGMpCisgICAgICAgIGFzc2VydExlc3MoYywgZCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgUCgpIDwge30KKworICAgIGRlZiB0ZXN0X3BhcnRzX2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBgcGFydHNgIHJldHVybnMgYSB0dXBsZQorICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2EnLCAnYicpKQorICAgICAgICAjIFRoZSBvYmplY3QgZ2V0cyByZXVzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwYXJ0cywgcC5wYXJ0cykKKyAgICAgICAgIyBXaGVuIHRoZSBwYXRoIGlzIGFic29sdXRlLCB0aGUgYW5jaG9yIGlzIGEgc2VwYXJhdGUgcGFydAorICAgICAgICBwID0gUCgnL2EvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoc2VwLCAnYScsICdiJykpCisKKyAgICBkZWYgdGVzdF9lcXVpdmFsZW5jZXMoc2VsZik6CisgICAgICAgIGZvciBrLCB0dXBsZXMgaW4gc2VsZi5lcXVpdmFsZW5jZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGNhbm9uID0gay5yZXBsYWNlKCcvJywgc2VsZi5zZXApCisgICAgICAgICAgICBwb3NpeCA9IGsucmVwbGFjZShzZWxmLnNlcCwgJy8nKQorICAgICAgICAgICAgaWYgY2Fub24gIT0gcG9zaXg6CisgICAgICAgICAgICAgICAgdHVwbGVzID0gdHVwbGVzICsgWworICAgICAgICAgICAgICAgICAgICB0dXBsZShwYXJ0LnJlcGxhY2UoJy8nLCBzZWxmLnNlcCkgZm9yIHBhcnQgaW4gdCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdHVwbGVzCisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB0dXBsZXMuYXBwZW5kKChwb3NpeCwgKSkKKyAgICAgICAgICAgIHBjYW5vbiA9IHNlbGYuY2xzKGNhbm9uKQorICAgICAgICAgICAgZm9yIHQgaW4gdHVwbGVzOgorICAgICAgICAgICAgICAgIHAgPSBzZWxmLmNscygqdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHBjYW5vbiwgImZhaWxlZCB3aXRoIGFyZ3Mge30iLmZvcm1hdCh0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocCksIGhhc2gocGNhbm9uKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgY2Fub24pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFzX3Bvc2l4KCksIHBvc2l4KQorCisgICAgZGVmIHRlc3RfcGFyZW50X2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBSZWxhdGl2ZQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudCwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCkpCisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgcCA9IFAoJy9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJy9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCcvJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRzX2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBSZWxhdGl2ZQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYi9jJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMl0sIFAoJy4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCdhL2InKSwgUCgnYScpLCBQKCcuJyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWy0xXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzNdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHBhclswXSA9IHAKKyAgICAgICAgIyBBbmNob3JlZAorICAgICAgICBwID0gUCgnL2EvYi9jJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCcvYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsyXSwgUCgnLycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJy9hL2InKSwgUCgnL2EnKSwgUCgnLycpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclszXQorCisgICAgZGVmIHRlc3RfZHJpdmVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5kcml2ZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLmRyaXZlLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5kcml2ZSwgJycpCisKKyAgICBkZWYgdGVzdF9yb290X2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlcCA9IHNlbGYuc2VwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnJvb3QsIHNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykucm9vdCwgc2VwKQorCisgICAgZGVmIHRlc3RfYW5jaG9yX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlcCA9IHNlbGYuc2VwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuYW5jaG9yLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5hbmNob3IsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5hbmNob3IsIHNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykuYW5jaG9yLCBzZXApCisKKyAgICBkZWYgdGVzdF9uYW1lX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLicpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLy4nKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS5uYW1lLCAnYi5weScpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4uJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IvLicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykuc3VmZml4LCAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnB5Jykuc3VmZml4LCAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGdyYycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hLy5oZy5yYycpLnN1ZmZpeCwgJy5yYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnRhci5neicpLnN1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4LCAnJykKKworICAgIGRlZiB0ZXN0X3N1ZmZpeGVzX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLy4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykuc3VmZml4ZXMsIFsnLnB5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhncmMnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhncmMnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IudGFyLmd6Jykuc3VmZml4ZXMsIFsnLnRhcicsICcuZ3onXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKworICAgIGRlZiB0ZXN0X3N0ZW1fY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLi4nKS5zdGVtLCAnLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykuc3RlbSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhncmMnKS5zdGVtLCAnLmhncmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3RlbSwgJy5oZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnRhci5neicpLnN0ZW0sICdiLnRhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykKKworICAgIGRlZiB0ZXN0X3dpdGhfbmFtZV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJy9hL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCdhL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnL2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL0RvdCBlbmRpbmcuJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCdhL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJy9hL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJycpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLicpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLycpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9uYW1lLCAnL2MnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX25hbWUsICdjLycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfbmFtZSwgJ2MvZCcpCisKKyAgICBkZWYgdGVzdF93aXRoX3N1ZmZpeF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICAjIFN0cmlwcGluZyBzdWZmaXgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS53aXRoX3N1ZmZpeCgnJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS53aXRoX3N1ZmZpeCgnJyksIFAoJy9hL2InKSkKKyAgICAgICAgIyBQYXRoIGRvZXNuJ3QgaGF2ZSBhICJmaWxlbmFtZSIgY29tcG9uZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLicpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgIyBJbnZhbGlkIHN1ZmZpeAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX3N1ZmZpeCwgJ2d6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcvLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICdjL2QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX3N1ZmZpeCwgJy5jLy5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcuLy5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcuZC8uJykKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3RvX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHAucmVsYXRpdmVfdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcC5yZWxhdGl2ZV90bywgYidhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJycpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2EnKSksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdhJyksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdhLycpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdhL2InKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdhL2InKSwgUCgpKQorICAgICAgICAjIFdpdGggc2V2ZXJhbCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYScsICdiJyksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdhL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdhL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EnKSkKKyAgICAgICAgcCA9IFAoJy9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnLycpKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnLycpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy9hJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnL2EnKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy9hLycpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvYS9iJykpLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnL2EvYicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYS9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2EnKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvYS9iJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMocCwgcHJvdG8pCisgICAgICAgICAgICBwcCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBwLl9fY2xhc3NfXywgcC5fX2NsYXNzX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHBwKSwgaGFzaChwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHBwKSwgc3RyKHApKQorCisKK2NsYXNzIFB1cmVQb3NpeFBhdGhUZXN0KF9CYXNlUHVyZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QdXJlUG9zaXhQYXRoCisKKyAgICBkZWYgdGVzdF9yb290KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykucm9vdCwgJy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vL2EvYicpLnJvb3QsICcvJykKKyAgICAgICAgIyBQT1NJWCBzcGVjaWFsIGNhc2UgZm9yIHR3byBsZWFkaW5nIHNsYXNoZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLnJvb3QsICcvLycpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoJ0EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hJyksIFAoJy8vL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCcvYScpLCBQKCcvL2EnKSkKKworICAgIGRlZiB0ZXN0X2FzX3VyaShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLmFzX3VyaSgpLCAnZmlsZTovLy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IuYycpLmFzX3VyaSgpLCAnZmlsZTovLy9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYiUjYycpLmFzX3VyaSgpLCAnZmlsZTovLy9hL2IlMjUlMjNjJykKKworICAgIGRlZiB0ZXN0X2FzX3VyaV9ub25fYXNjaWkoc2VsZik6CisgICAgICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZV9mcm9tX2J5dGVzCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5mc2VuY29kZSgnXHhlOScpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJcXHhlOSBjYW5ub3QgYmUgZW5jb2RlZCB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYlx4ZTknKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovLy9hL2InICsgcXVvdGVfZnJvbV9ieXRlcyhvcy5mc2VuY29kZSgnXHhlOScpKSkKKworICAgIGRlZiB0ZXN0X21hdGNoKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdBLnB5JykubWF0Y2goJ2EuUFknKSkKKworICAgIGRlZiB0ZXN0X2lzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCkuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iJykuaXNfYWJzb2x1dGUoKSkKKworICAgIGRlZiB0ZXN0X2lzX3Jlc2VydmVkKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnLycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy9mb28vYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnL2Rldi9jb24vUFJOL05VTCcpLmlzX3Jlc2VydmVkKCkpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJy8vYScpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYS9iJykpCisgICAgICAgIHBwID0gUCgnL2EnKS5qb2lucGF0aCgnLy9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9jJykpCisgICAgICAgIHBwID0gUCgnLy9hJykuam9pbnBhdGgoJy9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworICAgIGRlZiB0ZXN0X2RpdihzZWxmKToKKyAgICAgICAgIyBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgam9pbnBhdGgoKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJy8vYScpCisgICAgICAgIHBwID0gcCAvICdiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2EvYicpKQorICAgICAgICBwcCA9IFAoJy9hJykgLyAnLy9jJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2MnKSkKKyAgICAgICAgcHAgPSBQKCcvL2EnKSAvICcvYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworCitjbGFzcyBQdXJlV2luZG93c1BhdGhUZXN0KF9CYXNlUHVyZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QdXJlV2luZG93c1BhdGgKKworICAgIGVxdWl2YWxlbmNlcyA9IF9CYXNlUHVyZVBhdGhUZXN0LmVxdWl2YWxlbmNlcy5jb3B5KCkKKyAgICBlcXVpdmFsZW5jZXMudXBkYXRlKHsKKyAgICAgICAgJ2M6YSc6IFsgKCdjOicsICdhJyksICgnYzonLCAnYS8nKSwgKCcvJywgJ2M6JywgJ2EnKSBdLAorICAgICAgICAnYzovYSc6IFsKKyAgICAgICAgICAgICgnYzovJywgJ2EnKSwgKCdjOicsICcvJywgJ2EnKSwgKCdjOicsICcvYScpLAorICAgICAgICAgICAgKCcveicsICdjOi8nLCAnYScpLCAoJy8veC95JywgJ2M6LycsICdhJyksCisgICAgICAgICAgICBdLAorICAgICAgICAnLy9hL2IvJzogWyAoJy8vYS9iJywpIF0sCisgICAgICAgICcvL2EvYi9jJzogWworICAgICAgICAgICAgKCcvL2EvYicsICdjJyksICgnLy9hL2IvJywgJ2MnKSwKKyAgICAgICAgICAgIF0sCisgICAgfSkKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnYVxcYlxcYycpCisgICAgICAgIHAgPSBzZWxmLmNscygnYzovYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ2M6XFxhXFxiXFxjJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcvL2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnXFxcXGFcXGJcXCcpCisgICAgICAgIHAgPSBzZWxmLmNscygnLy9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnXFxcXGFcXGJcXGMnKQorICAgICAgICBwID0gc2VsZi5jbHMoJy8vYS9iL2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnXFxcXGFcXGJcXGNcXGQnKQorCisgICAgZGVmIHRlc3Rfc3RyX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ2M6JykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdjOmEnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ2M6YVxcYi50eHQnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ2M6XFwnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ2M6XFxhJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdjOlxcYVxcYi50eHQnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ1xcXFxzb21lXFxzaGFyZScpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnXFxcXHNvbWVcXHNoYXJlXFxhJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdcXFxcc29tZVxcc2hhcmVcXGFcXGIudHh0JykKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLCBQKCdjOmEvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2M6JywgJ2EnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2Q6YS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYzphL2InKSwgUCgnYzovYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnL2EvYicpLCBQKCdjOi9hL2InKSkKKyAgICAgICAgIyBDYXNlLWluc2Vuc2l0aXZpdHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL0InKSwgUCgnQS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnQzphL0InKSwgUCgnYzpBL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL1NvbWUvU0hBUkUvYS9CJyksIFAoJy8vc29tRS9zaGFyZS9BL2InKSkKKworICAgIGRlZiB0ZXN0X2FzX3VyaShzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCcvYS9iJykuYXNfdXJpKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIFAoJ2M6YS9iJykuYXNfdXJpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IuYycpLmFzX3VyaSgpLCAnZmlsZTovLy9jOi9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJSNjJykuYXNfdXJpKCksICdmaWxlOi8vL2M6L2EvYiUyNSUyM2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYlx4ZTknKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovYS9iJUMzJUE5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL3NvbWUvc2hhcmUvJykuYXNfdXJpKCksICdmaWxlOi8vc29tZS9zaGFyZS8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vc29tZS9zaGFyZS9hL2IuYycpLmFzX3VyaSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vc29tZS9zaGFyZS9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9zb21lL3NoYXJlL2EvYiUjY1x4ZTknKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL3NvbWUvc2hhcmUvYS9iJTI1JTIzYyVDMyVBOScpCisKKyAgICBkZWYgdGVzdF9tYXRjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIEFic29sdXRlIHBhdHRlcm5zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9iLnB5JykubWF0Y2goJ2M6Ki5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnZDovYi5weScpLm1hdGNoKCdjOi8qLnB5JykpICAjIHdyb25nIGRyaXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnYzoqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzpiLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzpiLnB5JykubWF0Y2goJ2M6LyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYi5weScpLm1hdGNoKCdjOioucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgICMgVU5DIHBhdHRlcm5zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL3NvbWUvc2hhcmUvYS5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9zb21lL3NoYXJlL2EucHknKS5tYXRjaCgnLy9zb21lL3NoYXJlLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvL290aGVyL3NoYXJlL2EucHknKS5tYXRjaCgnLy9zb21lL3NoYXJlLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvL3NvbWUvc2hhcmUvYS9iLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdCLnB5JykubWF0Y2goJ2IuUFknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2EvQi5QeScpLm1hdGNoKCdDOi9BLyoucFknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vU29tZS9TaGFyZS9CLlB5JykubWF0Y2goJy8vc29tRS9zaGFyRS8qLnBZJykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmluZ19jb21tb24oc2VsZik6CisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIGRlZiBhc3NlcnRPcmRlcmVkRXF1YWwoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYiwgYSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdjOkEvYicpCisgICAgICAgIHEgPSBQKCdDOmEvQicpCisgICAgICAgIGFzc2VydE9yZGVyZWRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPiBxKQorICAgICAgICBwID0gUCgnLy9zb21lL1NoYXJlL0EvYicpCisgICAgICAgIHEgPSBQKCcvL1NvbWUvU0hBUkUvYS9CJykKKyAgICAgICAgYXNzZXJ0T3JkZXJlZEVxdWFsKHAsIHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCA8IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCA+IHEpCisKKyAgICBkZWYgdGVzdF9wYXJ0cyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdjOmEvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2M6JywgJ2EnLCAnYicpKQorICAgICAgICBwID0gUCgnYzovYS9iJykKKyAgICAgICAgcGFydHMgPSBwLnBhcnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydHMsICgnYzpcXCcsICdhJywgJ2InKSkKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ1xcXFxhXFxiXFwnLCAnYycsICdkJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnQoc2VsZik6CisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCd6OmEvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudCwgUCgnejphL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJ3o6YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6JykpCisgICAgICAgIHAgPSBQKCd6Oi9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ3o6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnejovYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6LycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6Oi8nKSkKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJy8vYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJy8vYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLy9hL2InKSkKKworICAgIGRlZiB0ZXN0X3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCd6OmEvYi8nKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ3o6YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnejonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCd6OmEnKSwgUCgnejonKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbMl0KKyAgICAgICAgcCA9IFAoJ3o6L2EvYi8nKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ3o6L2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ3o6LycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJ3o6L2EnKSwgUCgnejovJyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzJdCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJy8vYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJy8vYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnLy9hL2IvYycpLCBQKCcvL2EvYicpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclsyXQorCisgICAgZGVmIHRlc3RfZHJpdmUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5kcml2ZSwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5kcml2ZSwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5kcml2ZSwgJ1xcXFxhXFxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5kcml2ZSwgJ1xcXFxhXFxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5kcml2ZSwgJ1xcXFxhXFxiJykKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5yb290LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iL2MvZCcpLnJvb3QsICdcXCcpCisKKyAgICBkZWYgdGVzdF9hbmNob3Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykuYW5jaG9yLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuYW5jaG9yLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLmFuY2hvciwgJ2M6XFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi8nKS5hbmNob3IsICdjOlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iLycpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iL2MvZCcpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorCisgICAgZGVmIHRlc3RfbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5uYW1lLCAnYi5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAvYS9iJykubmFtZSwgJ2InKQorCisgICAgZGVmIHRlc3Rfc3VmZml4KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5Jykuc3VmZml4LCAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLnN1ZmZpeCwgJycpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhlcyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZy5yYycpLnN1ZmZpeGVzLCBbJy5yYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAvYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4ZXMsIFtdKQorCisgICAgZGVmIHRlc3Rfc3RlbShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi4nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi4uJykuc3RlbSwgJy4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdGVtLCAnLmhncmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdGVtLCAnLmhnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdGVtLCAnYi50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykKKworICAgIGRlZiB0ZXN0X3dpdGhfbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6YS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzovYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzphL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzovYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOicpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzovJykud2l0aF9uYW1lLCAnZC54bWwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvL015L1NoYXJlJykud2l0aF9uYW1lLCAnZC54bWwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfbmFtZSwgJ2Q6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX25hbWUsICdkOmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfbmFtZSwgJ2Q6L2UnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfbmFtZSwgJy8vTXkvU2hhcmUnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9zdWZmaXgoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOmEvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzovYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2M6YS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5Jykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOi9hL2IuZ3onKSkKKyAgICAgICAgIyBQYXRoIGRvZXNuJ3QgaGF2ZSBhICJmaWxlbmFtZSIgY29tcG9uZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLicpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLy9NeS9TaGFyZScpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgIyBJbnZhbGlkIHN1ZmZpeAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICcvLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJ1xcLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJ2M6Lmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJ2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdjXFxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJy5jL2QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnLmNcXGQnKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfdG8oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnQzpGb28vQmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6JykpLCBQKCdGb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzonKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzpmb08nKSksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6Zm9PJyksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6Zm9PLycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6Zm9PL2JhUicpKSwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6Zm9PL2JhUicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9Gb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnQzovRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6Rm9vL0Jhci9CYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnQzpGb28vQmF6JykpCisgICAgICAgIHAgPSBQKCdDOi9Gb28vQmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6JykpLCBQKCcvRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6JyksIFAoJy9Gb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAucmVsYXRpdmVfdG8oUCgnYzonKSkpLCAnXFxGb29cXEJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAucmVsYXRpdmVfdG8oJ2M6JykpLCAnXFxGb29cXEJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi8nKSksIFAoJ0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOi8nKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzovZm9PJykpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOi9mb08nKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzovZm9PLycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6L2ZvTy9iYVInKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOi9mb08vYmFSJyksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnQzovQmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6L0Zvby9CYXIvQmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6L0Zvby9CYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnQzpGb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnZDonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnZDovJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvL0MvRm9vJykpCisgICAgICAgICMgVU5DIHBhdGhzCisgICAgICAgIHAgPSBQKCcvL1NlcnZlci9TaGFyZS9Gb28vQmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vc0VydmVyL3NIYXJlJykpLCBQKCdGb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnLy9zRXJ2ZXIvc0hhcmUnKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8vc0VydmVyL3NIYXJlLycpLCBQKCdGb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvL3NFcnZlci9zSGFyZS9Gb28nKSksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8vc0VydmVyL3NIYXJlL0ZvbycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvL3NFcnZlci9zSGFyZS9Gb28vJyksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnLy9zRXJ2ZXIvc0hhcmUvRm9vL0JhcicpKSwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8vc0VydmVyL3NIYXJlL0Zvby9CYXInKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvU2VydmVyL1NoYXJlL0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOi9TZXJ2ZXIvU2hhcmUvRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8vei9TaGFyZS9Gb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnLy9TZXJ2ZXIvei9Gb28nKSkKKworICAgIGRlZiB0ZXN0X2lzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgIyBVbmRlciBOVCwgb25seSBwYXRocyB3aXRoIGJvdGggYSBkcml2ZSBhbmQgYSByb290IGFyZSBhYnNvbHV0ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzonKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6YScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzphL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6LycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICAjIFVOQyBwYXRocyBhcmUgYWJzb2x1dGUgYnkgZGVmaW5pdGlvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2InKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iL2MnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2IvYy9kJykuaXNfYWJzb2x1dGUoKSkKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnQzovYS9iJykKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCd4L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnL3gveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0M6L3gveScpKQorICAgICAgICAjIEpvaW5pbmcgd2l0aCBhIGRpZmZlcmVudCBkcml2ZSA9PiB0aGUgZmlyc3QgcGF0aCBpcyBpZ25vcmVkLCBldmVuCisgICAgICAgICMgaWYgdGhlIHNlY29uZCBwYXRoIGlzIHJlbGF0aXZlLgorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ0Q6eC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnRDp4L3knKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdEOi94L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdEOi94L3knKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCcvL2hvc3Qvc2hhcmUveC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9ob3N0L3NoYXJlL3gveScpKQorICAgICAgICAjIEpvaW5pbmcgd2l0aCB0aGUgc2FtZSBkcml2ZSA9PiB0aGUgZmlyc3QgcGF0aCBpcyBhcHBlbmRlZCB0byBpZgorICAgICAgICAjIHRoZSBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjOngveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0M6L2EvYi94L3knKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjOi94L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdDOi94L3knKSkKKworICAgIGRlZiB0ZXN0X2RpdihzZWxmKToKKyAgICAgICAgIyBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgam9pbnBhdGgoKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ0M6L2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICd4L3knLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICd4JyAvICd5JywgUCgnQzovYS9iL3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnL3gveScsIFAoJ0M6L3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnL3gnIC8gJ3knLCBQKCdDOi94L3knKSkKKyAgICAgICAgIyBKb2luaW5nIHdpdGggYSBkaWZmZXJlbnQgZHJpdmUgPT4gdGhlIGZpcnN0IHBhdGggaXMgaWdub3JlZCwgZXZlbgorICAgICAgICAjIGlmIHRoZSBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ0Q6eC95JywgUCgnRDp4L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ0Q6JyAvICd4L3knLCBQKCdEOngveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnRDoveC95JywgUCgnRDoveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdEOicgLyAnL3gveScsIFAoJ0Q6L3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnLy9ob3N0L3NoYXJlL3gveScsIFAoJy8vaG9zdC9zaGFyZS94L3knKSkKKyAgICAgICAgIyBKb2luaW5nIHdpdGggdGhlIHNhbWUgZHJpdmUgPT4gdGhlIGZpcnN0IHBhdGggaXMgYXBwZW5kZWQgdG8gaWYKKyAgICAgICAgIyB0aGUgc2Vjb25kIHBhdGggaXMgcmVsYXRpdmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdjOngveScsIFAoJ0M6L2EvYi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ2M6L3gveScsIFAoJ0M6L3gveScpKQorCisgICAgZGVmIHRlc3RfaXNfcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnL2Zvby9iYXInKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2NvbicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnTlVMJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdOVUwudHh0JykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdjb20xJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdjb205LmJhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJ2Jhci5jb205JykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdscHQxJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdscHQ5LmJhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJ2Jhci5scHQ5JykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgIyBPbmx5IHRoZSBsYXN0IGNvbXBvbmVudCBtYXR0ZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJ2M6L05VTC9jb24vYmF6JykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgIyBVTkMgcGF0aHMgYXJlIG5ldmVyIHJlc2VydmVkCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy8vbXkvc2hhcmUvbnVsL2Nvbi9hdXgnKS5pc19yZXNlcnZlZCgpKQorCisKK2NsYXNzIFB1cmVQYXRoVGVzdChfQmFzZVB1cmVQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUHVyZVBhdGgKKworICAgIGRlZiB0ZXN0X2NvbmNyZXRlX2NsYXNzKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksCisgICAgICAgICAgICBwYXRobGliLlB1cmVXaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBwYXRobGliLlB1cmVQb3NpeFBhdGgpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbnRfZmxhdm91cnNfdW5lcXVhbChzZWxmKToKKyAgICAgICAgcCA9IHBhdGhsaWIuUHVyZVBvc2l4UGF0aCgnYScpCisgICAgICAgIHEgPSBwYXRobGliLlB1cmVXaW5kb3dzUGF0aCgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocCwgcSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9mbGF2b3Vyc191bm9yZGVyZWQoc2VsZik6CisgICAgICAgIHAgPSBwYXRobGliLlB1cmVQb3NpeFBhdGgoJ2EnKQorICAgICAgICBxID0gcGF0aGxpYi5QdXJlV2luZG93c1BhdGgoJ2EnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwIDwgcQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwIDw9IHEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcCA+IHEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcCA+PSBxCisKKworIworIyBUZXN0cyBmb3IgdGhlIGNvbmNyZXRlIGNsYXNzZXMKKyMKKworIyBNYWtlIHN1cmUgYW55IHN5bWJvbGljIGxpbmtzIGluIHRoZSBiYXNlIHRlc3QgcGF0aCBhcmUgcmVzb2x2ZWQKK0JBU0UgPSBvcy5wYXRoLnJlYWxwYXRoKFRFU1RGTikKK2pvaW4gPSBsYW1iZGEgKng6IG9zLnBhdGguam9pbihCQVNFLCAqeCkKK3JlbF9qb2luID0gbGFtYmRhICp4OiBvcy5wYXRoLmpvaW4oVEVTVEZOLCAqeCkKKworZGVmIHN5bWxpbmtfc2tpcF9yZWFzb24oKToKKyAgICBpZiBub3QgcGF0aGxpYi5zdXBwb3J0c19zeW1saW5rczoKKyAgICAgICAgcmV0dXJuICJubyBzeXN0ZW0gc3VwcG9ydCBmb3Igc3ltbGlua3MiCisgICAgdHJ5OgorICAgICAgICBvcy5zeW1saW5rKF9fZmlsZV9fLCBCQVNFKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybiBzdHIoZSkKKyAgICBlbHNlOgorICAgICAgICBzdXBwb3J0LnVubGluayhCQVNFKQorICAgIHJldHVybiBOb25lCisKK3N5bWxpbmtfc2tpcF9yZWFzb24gPSBzeW1saW5rX3NraXBfcmVhc29uKCkKKworb25seV9udCA9IHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lICE9ICdudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIGEgV2luZG93cy1jb21wYXRpYmxlIHN5c3RlbScpCitvbmx5X3Bvc2l4ID0gdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgYSBQT1NJWC1jb21wYXRpYmxlIHN5c3RlbScpCit3aXRoX3N5bWxpbmtzID0gdW5pdHRlc3Quc2tpcElmKHN5bWxpbmtfc2tpcF9yZWFzb24sIHN5bWxpbmtfc2tpcF9yZWFzb24pCisKKworQG9ubHlfcG9zaXgKK2NsYXNzIFBvc2l4UGF0aEFzUHVyZVRlc3QoUHVyZVBvc2l4UGF0aFRlc3QpOgorICAgIGNscyA9IHBhdGhsaWIuUG9zaXhQYXRoCisKK0Bvbmx5X250CitjbGFzcyBXaW5kb3dzUGF0aEFzUHVyZVRlc3QoUHVyZVdpbmRvd3NQYXRoVGVzdCk6CisgICAgY2xzID0gcGF0aGxpYi5XaW5kb3dzUGF0aAorCisKK2NsYXNzIF9CYXNlUGF0aFRlc3Qob2JqZWN0KToKKyAgICAiIiJUZXN0cyBmb3IgdGhlIEZTLWFjY2Vzc2luZyBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFBhdGggY2xhc3Nlcy4iIiIKKworICAgICMgKEJBU0UpCisgICAgIyAgfAorICAgICMgIHwtLSBkaXJBLworICAgICMgICAgICAgfC0tIGxpbmtDIC0+ICIuLi9kaXJCIgorICAgICMgIHwtLSBkaXJCLworICAgICMgIHwgICAgfC0tIGZpbGVCCisgICAgIyAgICAgICB8LS0gbGlua0QgLT4gIi4uL2RpckIiCisgICAgIyAgfC0tIGRpckMvCisgICAgIyAgfCAgICB8LS0gZmlsZUMKKyAgICAjICB8ICAgIHwtLSBmaWxlRAorICAgICMgIHwtLSBmaWxlQQorICAgICMgIHwtLSBsaW5rQSAtPiAiZmlsZUEiCisgICAgIyAgfC0tIGxpbmtCIC0+ICJkaXJCIgorICAgICMKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MubWtkaXIoQkFTRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQucm10cmVlLCBCQVNFKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJBJykpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oJ2RpckInKSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQycpKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJDJywgJ2RpckQnKSkKKyAgICAgICAgd2l0aCBvcGVuKGpvaW4oJ2ZpbGVBJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIEFcbiIpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdkaXJCJywgJ2ZpbGVCJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIEJcbiIpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdkaXJDJywgJ2ZpbGVDJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIENcbiIpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdkaXJDJywgJ2RpckQnLCAnZmlsZUQnKSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJ0aGlzIGlzIGZpbGUgRFxuIikKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICAjIFJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgICAgICBvcy5zeW1saW5rKCdmaWxlQScsIGpvaW4oJ2xpbmtBJykpCisgICAgICAgICAgICBvcy5zeW1saW5rKCdub24tZXhpc3RpbmcnLCBqb2luKCdicm9rZW5MaW5rJykpCisgICAgICAgICAgICBzZWxmLmRpcmxpbmsoJ2RpckInLCBqb2luKCdsaW5rQicpKQorICAgICAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignLi4nLCAnZGlyQicpLCBqb2luKCdkaXJBJywgJ2xpbmtDJykpCisgICAgICAgICAgICAjIFRoaXMgb25lIGdvZXMgdXB3YXJkcyBidXQgZG9lc24ndCBjcmVhdGUgYSBsb29wCisgICAgICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCcuLicsICdkaXJCJyksIGpvaW4oJ2RpckInLCAnbGlua0QnKSkKKworICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTM3NzIKKyAgICAgICAgZGVmIGRpcmxpbmsoc2VsZiwgc3JjLCBkZXN0KToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PVRydWUpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGRpcmxpbmsoc2VsZiwgc3JjLCBkZXN0KToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQorCisgICAgZGVmIGFzc2VydFNhbWUoc2VsZiwgcGF0aF9hLCBwYXRoX2IpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5zYW1lZmlsZShzdHIocGF0aF9hKSwgc3RyKHBhdGhfYikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVyIGFuZCAlciBkb24ndCBwb2ludCB0byB0aGUgc2FtZSBmaWxlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAocGF0aF9hLCBwYXRoX2IpKQorCisgICAgZGVmIGFzc2VydEZpbGVOb3RGb3VuZChzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorCisgICAgZGVmIF90ZXN0X2N3ZChzZWxmLCBwKToKKyAgICAgICAgcSA9IHNlbGYuY2xzKG9zLmdldGN3ZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBzdHIocSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwKSwgdHlwZShxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfYWJzb2x1dGUoKSkKKworICAgIGRlZiB0ZXN0X2N3ZChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzLmN3ZCgpCisgICAgICAgIHNlbGYuX3Rlc3RfY3dkKHApCisKKyAgICBkZWYgdGVzdF9lbXB0eV9wYXRoKHNlbGYpOgorICAgICAgICAjIFRoZSBlbXB0eSBwYXRoIHBvaW50cyB0byAnLicKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLCBvcy5zdGF0KCcuJykpCisKKyAgICBkZWYgdGVzdF9leGlzdHMoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgKHAgLyAnZGlyQScpLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIChwIC8gJ2ZpbGVBJykuZXhpc3RzKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQScpLmV4aXN0cygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQicpLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCAocCAvICdmb28nKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnL3h5enp5JykuZXhpc3RzKCkpCisKKyAgICBkZWYgdGVzdF9vcGVuX2NvbW1vbihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHdpdGggKHAgLyAnZmlsZUEnKS5vcGVuKCdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5UZXh0SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgInRoaXMgaXMgZmlsZSBBXG4iKQorICAgICAgICB3aXRoIChwIC8gJ2ZpbGVBJykub3BlbigncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLkJ1ZmZlcmVkSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5zdHJpcCgpLCBiInRoaXMgaXMgZmlsZSBBIikKKyAgICAgICAgd2l0aCAocCAvICdmaWxlQScpLm9wZW4oJ3JiJywgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgaW8uUmF3SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5zdHJpcCgpLCBiInRoaXMgaXMgZmlsZSBBIikKKworICAgIGRlZiB0ZXN0X2l0ZXJkaXIoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBpdCA9IHAuaXRlcmRpcigpCisgICAgICAgIHBhdGhzID0gc2V0KGl0KQorICAgICAgICBleHBlY3RlZCA9IFsnZGlyQScsICdkaXJCJywgJ2RpckMnLCAnZmlsZUEnXQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIGV4cGVjdGVkICs9IFsnbGlua0EnLCAnbGlua0InLCAnYnJva2VuTGluayddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMsIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9pdGVyZGlyX3N5bWxpbmsoc2VsZik6CisgICAgICAgICMgX19pdGVyX18gb24gYSBzeW1saW5rIHRvIGEgZGlyZWN0b3J5CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFLCAnbGlua0InKQorICAgICAgICBwYXRocyA9IHNldChwLml0ZXJkaXIoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSB7IFAoQkFTRSwgJ2xpbmtCJywgcSkgZm9yIHEgaW4gWydmaWxlQicsICdsaW5rRCddIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRocywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pdGVyZGlyX25vZGlyKHNlbGYpOgorICAgICAgICAjIF9faXRlcl9fIG9uIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGRpcmVjdG9yeQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG5leHQocC5pdGVyZGlyKCkpCisgICAgICAgICMgRU5PRU5UIG9yIEVJTlZBTCB1bmRlciBXaW5kb3dzLCBFTk9URElSIG90aGVyd2lzZQorICAgICAgICAjIChzZWUgaXNzdWUgIzEyODAyKQorICAgICAgICBzZWxmLmFzc2VydEluKGNtLmV4Y2VwdGlvbi5lcnJubywgKGVycm5vLkVOT1RESVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PRU5ULCBlcnJuby5FSU5WQUwpKQorCisgICAgZGVmIHRlc3RfZ2xvYl9jb21tb24oc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2soZ2xvYiwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZ2xvYiksIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLmdsb2IoImZpbGVBIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5JdGVyYXRvcikKKyAgICAgICAgX2NoZWNrKGl0LCBbImZpbGVBIl0pCisgICAgICAgIF9jaGVjayhwLmdsb2IoImZpbGVCIiksIFtdKQorICAgICAgICBfY2hlY2socC5nbG9iKCJkaXIqL2ZpbGUqIiksIFsiZGlyQi9maWxlQiIsICJkaXJDL2ZpbGVDIl0pCisgICAgICAgIGlmIHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQSIpLCBbJ2RpckEnLCAnZmlsZUEnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipBIiksIFsnZGlyQScsICdmaWxlQScsICdsaW5rQSddKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKkIvKiIpLCBbJ2RpckIvZmlsZUInXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipCLyoiKSwgWydkaXJCL2ZpbGVCJywgJ2RpckIvbGlua0QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmtCL2ZpbGVCJywgJ2xpbmtCL2xpbmtEJ10pCisgICAgICAgIGlmIHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqL2ZpbGVCIiksIFsnZGlyQi9maWxlQiddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKi9maWxlQiIpLCBbJ2RpckIvZmlsZUInLCAnbGlua0IvZmlsZUInXSkKKworICAgIGRlZiB0ZXN0X3JnbG9iX2NvbW1vbihzZWxmKToKKyAgICAgICAgZGVmIF9jaGVjayhnbG9iLCBleHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChnbG9iKSwgeyBQKEJBU0UsIHEpIGZvciBxIGluIGV4cGVjdGVkIH0pCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBpdCA9IHAucmdsb2IoImZpbGVBIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5JdGVyYXRvcikKKyAgICAgICAgIyBYWFggY2Fubm90IHRlc3QgYmVjYXVzZSBvZiBzeW1saW5rIGxvb3BzIGluIHRoZSB0ZXN0IHNldHVwCisgICAgICAgICNfY2hlY2soaXQsIFsiZmlsZUEiXSkKKyAgICAgICAgI19jaGVjayhwLnJnbG9iKCJmaWxlQiIpLCBbImRpckIvZmlsZUIiXSkKKyAgICAgICAgI19jaGVjayhwLnJnbG9iKCIqL2ZpbGVBIiksIFsiIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiKi9maWxlQiIpLCBbImRpckIvZmlsZUIiXSkKKyAgICAgICAgI19jaGVjayhwLnJnbG9iKCJmaWxlKiIpLCBbImZpbGVBIiwgImRpckIvZmlsZUIiXSkKKyAgICAgICAgIyBObyBzeW1saW5rIGxvb3BzIGhlcmUKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBfY2hlY2socC5yZ2xvYigiZmlsZSoiKSwgWyJkaXJDL2ZpbGVDIiwgImRpckMvZGlyRC9maWxlRCJdKQorICAgICAgICBfY2hlY2socC5yZ2xvYigiKi8qIiksIFsiZGlyQy9kaXJEL2ZpbGVEIl0pCisKKyAgICBkZWYgdGVzdF9nbG9iX2RvdGRvdChzZWxmKToKKyAgICAgICAgIyAiLi4iIGlzIG5vdCBzcGVjaWFsIGluIGdsb2JzCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIi4uIikpLCB7IFAoQkFTRSwgIi4uIikgfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCJkaXJBLy4uL2ZpbGUqIikpLCB7IFAoQkFTRSwgImRpckEvLi4vZmlsZUEiKSB9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIi4uL3h5enp5IikpLCBzZXQoKSkKKworICAgIGRlZiBfY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShzZWxmLCBwLCBleHBlY3RlZCk6CisgICAgICAgIHEgPSBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIGV4cGVjdGVkKQorCisgICAgZGVmIF9jaGVja19yZXNvbHZlX2Fic29sdXRlKHNlbGYsIHAsIGV4cGVjdGVkKToKKyAgICAgICAgcSA9IHAucmVzb2x2ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgZXhwZWN0ZWQpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3Jlc29sdmVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2ZvbycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICAjIFRoZXNlIGFyZSBhbGwgcmVsYXRpdmUgc3ltbGlua3MKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2RpckInLCAnZmlsZUInKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIHApCisgICAgICAgIHAgPSBQKEJBU0UsICdsaW5rQScpCisgICAgICAgIHNlbGYuX2NoZWNrX3Jlc29sdmVfcmVsYXRpdmUocCwgUChCQVNFLCAnZmlsZUEnKSkKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2RpckEnLCAnbGlua0MnLCAnZmlsZUInKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2RpckInLCAnZmlsZUInKSkKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2RpckInLCAnbGlua0QnLCAnZmlsZUInKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2RpckInLCAnZmlsZUInKSkKKyAgICAgICAgIyBOb3cgY3JlYXRlIGFic29sdXRlIHN5bWxpbmtzCisgICAgICAgIGQgPSB0ZW1wZmlsZS5ta2R0ZW1wKHN1ZmZpeD0nLWRpckQnKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC5ybXRyZWUsIGQpCisgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKGQpLCBqb2luKCdkaXJBJywgJ2xpbmtYJykpCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignZGlyQicpLCBvcy5wYXRoLmpvaW4oZCwgJ2xpbmtZJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtYJywgJ2xpbmtZJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3Jlc29sdmVfZG90KHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvOS9wYXRocmVzb2x2ZS1mYWlscy1vbi1jb21wbGV4LXN5bWxpbmtzCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmRpcmxpbmsoJy4nLCBqb2luKCcwJykpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJzAnLCAnMCcpLCBqb2luKCcxJykpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJzEnLCAnMScpLCBqb2luKCcyJykpCisgICAgICAgIHEgPSBwIC8gJzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5yZXNvbHZlKCksIHApCisKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBpdDIgPSBwLml0ZXJkaXIoKQorICAgICAgICBuZXh0KGl0MikKKyAgICAgICAgd2l0aCBwOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIEkvTyBvcGVyYXRpb24gb24gY2xvc2VkIHBhdGgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGl0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5vcGVuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlc29sdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAuYWJzb2x1dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAuX19lbnRlcl9fKQorCisgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgbW9kZSA9IHAuc3RhdCgpLnN0X21vZGUKKyAgICAgICAgIyBDbGVhciB3cml0YWJsZSBiaXQKKyAgICAgICAgbmV3X21vZGUgPSBtb2RlICYgfjBvMjIyCisgICAgICAgIHAuY2htb2QobmV3X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCkuc3RfbW9kZSwgbmV3X21vZGUpCisgICAgICAgICMgU2V0IHdyaXRhYmxlIGJpdAorICAgICAgICBuZXdfbW9kZSA9IG1vZGUgfCAwbzIyMgorICAgICAgICBwLmNobW9kKG5ld19tb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLnN0X21vZGUsIG5ld19tb2RlKQorCisgICAgIyBYWFggYWxzbyBuZWVkIGEgdGVzdCBmb3IgbGNobW9kCisKKyAgICBkZWYgdGVzdF9zdGF0KHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgc3QpCisgICAgICAgICMgQ2hhbmdlIGZpbGUgbW9kZSBieSBmbGlwcGluZyB3cml0ZSBiaXQKKyAgICAgICAgcC5jaG1vZChzdC5zdF9tb2RlIF4gMG8yMjIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLmNobW9kLCBzdC5zdF9tb2RlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAuc3RhdCgpLCBzdCkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfbHN0YXQoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKS8gJ2xpbmtBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3QsIHAubHN0YXQoKSkKKworICAgIGRlZiB0ZXN0X2xzdGF0X25vc3ltbGluayhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3QsIHAubHN0YXQoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHB3ZCwgInRoZSBwd2QgbW9kdWxlIGlzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9vd25lcihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICB1aWQgPSBwLnN0YXQoKS5zdF91aWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZCh1aWQpLnB3X25hbWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAidXNlciAlZCBkb2Vzbid0IGhhdmUgYW4gZW50cnkgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZSIgJSB1aWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgcC5vd25lcigpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ3JwLCAidGhlIGdycCBtb2R1bGUgaXMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIGdpZCA9IHAuc3RhdCgpLnN0X2dpZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gZ3JwLmdldGdyZ2lkKGdpZCkuZ3JfbmFtZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KAorICAgICAgICAgICAgICAgICJncm91cCAlZCBkb2Vzbid0IGhhdmUgYW4gZW50cnkgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZSIgJSBnaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgcC5ncm91cCgpKQorCisgICAgZGVmIHRlc3RfdW5saW5rKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHAudW5saW5rKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnVubGluaykKKworICAgIGRlZiB0ZXN0X3JtZGlyKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZGlyQScKKyAgICAgICAgZm9yIHEgaW4gcC5pdGVyZGlyKCk6CisgICAgICAgICAgICBxLnVubGluaygpCisgICAgICAgIHAucm1kaXIoKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAudW5saW5rKQorCisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHNpemUgPSBwLnN0YXQoKS5zdF9zaXplCisgICAgICAgICMgUmVuYW1pbmcgdG8gYW5vdGhlciBwYXRoCisgICAgICAgIHEgPSBQIC8gJ2RpckEnIC8gJ2ZpbGVBQScKKyAgICAgICAgcC5yZW5hbWUocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnN0YXQoKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgICMgUmVuYW1pbmcgdG8gYSBzdHIgb2YgYSByZWxhdGl2ZSBwYXRoCisgICAgICAgIHIgPSByZWxfam9pbignZmlsZUFBQScpCisgICAgICAgIHEucmVuYW1lKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChyKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChxLnN0YXQpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHNpemUgPSBwLnN0YXQoKS5zdF9zaXplCisgICAgICAgICMgUmVwbGFjaW5nIGEgbm9uLWV4aXN0aW5nIHBhdGgKKyAgICAgICAgcSA9IFAgLyAnZGlyQScgLyAnZmlsZUFBJworICAgICAgICBwLnJlcGxhY2UocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnN0YXQoKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgICMgUmVwbGFjaW5nIGFub3RoZXIgKGV4aXN0aW5nKSBwYXRoCisgICAgICAgIHIgPSByZWxfam9pbignZGlyQicsICdmaWxlQicpCisgICAgICAgIHEucmVwbGFjZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocikuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocS5zdGF0KQorCisgICAgZGVmIHRlc3RfdG91Y2hfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnbmV3ZmlsZUEnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIG9sZF9tdGltZSA9IHN0LnN0X210aW1lCisgICAgICAgIG9sZF9tdGltZV9ucyA9IHN0LnN0X210aW1lX25zCisgICAgICAgICMgUmV3aW5kIHRoZSBtdGltZSBzdWZmaWNpZW50bHkgZmFyIGluIHRoZSBwYXN0IHRvIHdvcmsgYXJvdW5kCisgICAgICAgICMgZmlsZXN5c3RlbS1zcGVjaWZpYyB0aW1lc3RhbXAgZ3JhbnVsYXJpdHkuCisgICAgICAgIG9zLnV0aW1lKHN0cihwKSwgKG9sZF9tdGltZSAtIDEwLCBvbGRfbXRpbWUgLSAxMCkpCisgICAgICAgICMgVGhlIGZpbGUgbXRpbWUgc2hvdWxkIGJlIHJlZnJlc2hlZCBieSBjYWxsaW5nIHRvdWNoKCkgYWdhaW4KKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3Quc3RfbXRpbWVfbnMsIG9sZF9tdGltZV9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3Quc3RfbXRpbWUsIG9sZF9tdGltZSkKKyAgICAgICAgIyBOb3cgd2l0aCBleGlzdF9vaz1GYWxzZQorICAgICAgICBwID0gUCAvICduZXdmaWxlQicKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmV4aXN0cygpKQorICAgICAgICBwLnRvdWNoKG1vZGU9MG83MDAsIGV4aXN0X29rPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcC50b3VjaCwgZXhpc3Rfb2s9RmFsc2UpCisKKyAgICBkZWYgdGVzdF90b3VjaF9ub2NoYW5nZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ2ZpbGVBJworICAgICAgICBwLnRvdWNoKCkKKyAgICAgICAgd2l0aCBwLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ25ld2RpckEnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC5ta2RpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19kaXIoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUVYSVNUKQorCisgICAgZGVmIHRlc3RfbWtkaXJfcGFyZW50cyhzZWxmKToKKyAgICAgICAgIyBDcmVhdGluZyBhIGNoYWluIG9mIGRpcmVjdG9yaWVzCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFLCAnbmV3ZGlyQicsICduZXdkaXJDJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmV4aXN0cygpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCisgICAgICAgIHAubWtkaXIocGFyZW50cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfZGlyKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBwLm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVFWElTVCkKKyAgICAgICAgIyB0ZXN0IGBtb2RlYCBhcmcKKyAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShwLnN0YXQoKS5zdF9tb2RlKSAjIGRlZmF1bHQgbW9kZQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ25ld2RpckQnLCAnbmV3ZGlyRScpCisgICAgICAgIHAubWtkaXIoMG81NTUsIHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2RpcigpKQorICAgICAgICBpZiBvcy5uYW1lICE9ICdudCc6CisgICAgICAgICAgICAjIHRoZSBkaXJlY3RvcnkncyBwZXJtaXNzaW9ucyBmb2xsb3cgdGhlIG1vZGUgYXJndW1lbnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHAuc3RhdCgpLnN0X21vZGUpLCAwbzc1NTUgJiBtb2RlKQorICAgICAgICAjIHRoZSBwYXJlbnQncyBwZXJtaXNzaW9ucyBmb2xsb3cgdGhlIGRlZmF1bHQgcHJvY2VzcyBzZXR0aW5ncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShwLnBhcmVudC5zdGF0KCkuc3RfbW9kZSksIG1vZGUpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3N5bWxpbmtfdG8oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB0YXJnZXQgPSBQIC8gJ2ZpbGVBJworICAgICAgICAjIFN5bWxpbmtpbmcgYSBwYXRoIHRhcmdldAorICAgICAgICBsaW5rID0gUCAvICdkaXJBJyAvICdsaW5rQUEnCisgICAgICAgIGxpbmsuc3ltbGlua190byh0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICAjIFN5bWxpbmtpbmcgYSBzdHIgdGFyZ2V0CisgICAgICAgIGxpbmsgPSBQIC8gJ2RpckEnIC8gJ2xpbmtBQUEnCisgICAgICAgIGxpbmsuc3ltbGlua190byhzdHIodGFyZ2V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rLnN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsaW5rLmxzdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGluay5pc19kaXIoKSkKKyAgICAgICAgIyBTeW1saW5raW5nIHRvIGEgZGlyZWN0b3J5CisgICAgICAgIHRhcmdldCA9IFAgLyAnZGlyQicKKyAgICAgICAgbGluayA9IFAgLyAnZGlyQScgLyAnbGlua0FBQUEnCisgICAgICAgIGxpbmsuc3ltbGlua190byh0YXJnZXQsIHRhcmdldF9pc19kaXJlY3Rvcnk9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rLnN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsaW5rLmxzdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5rLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGlzdChsaW5rLml0ZXJkaXIoKSkpCisKKyAgICBkZWYgdGVzdF9pc19kaXIoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnZGlyQScpLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfZGlyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfZGlyKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdsaW5rQScpLmlzX2RpcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtCJykuaXNfZGlyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQLyAnYnJva2VuTGluaycpLmlzX2RpcigpKQorCisgICAgZGVmIHRlc3RfaXNfZmlsZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUCAvICdmaWxlQScpLmlzX2ZpbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdkaXJBJykuaXNfZmlsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2ZpbGUoKSkKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0EnKS5pc19maWxlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2xpbmtCJykuaXNfZmlsZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUC8gJ2Jyb2tlbkxpbmsnKS5pc19maWxlKCkpCisKKyAgICBkZWYgdGVzdF9pc19zeW1saW5rKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdkaXJBJykuaXNfc3ltbGluaygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0EnKS5pc19zeW1saW5rKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0InKS5pc19zeW1saW5rKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAvICdicm9rZW5MaW5rJykuaXNfc3ltbGluaygpKQorCisgICAgZGVmIHRlc3RfaXNfZmlmb19mYWxzZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2ZpZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19maWZvKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAibWtmaWZvIiksICJvcy5ta2ZpZm8oKSByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfaXNfZmlmb190cnVlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSwgJ215ZmlmbycpCisgICAgICAgIG9zLm1rZmlmbyhzdHIoUCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQLmlzX2ZpZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfc29ja2V0X2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19zb2NrZXQoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpLCAiVW5peCBzb2NrZXRzIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF9pc19zb2NrZXRfdHJ1ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UsICdteXNvY2snKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jay5iaW5kKHN0cihQKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmICJBRl9VTklYIHBhdGggdG9vIGxvbmciIGluIHN0cihlKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3QgYmluZCBVbml4IHNvY2tldDogIiArIHN0cihlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWxlKCkpCisKKyAgICBkZWYgdGVzdF9pc19ibG9ja19kZXZpY2VfZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfYmxvY2tfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2Jsb2NrX2RldmljZSgpKQorCisgICAgZGVmIHRlc3RfaXNfY2hhcl9kZXZpY2VfZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdkaXJBJykuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19jaGFyX2RldmljZSgpKQorCisgICAgZGVmIHRlc3RfaXNfY2hhcl9kZXZpY2VfdHJ1ZShzZWxmKToKKyAgICAgICAgIyBVbmRlciBVbml4LCAvZGV2L251bGwgc2hvdWxkIGdlbmVyYWxseSBiZSBhIGNoYXIgZGV2aWNlCisgICAgICAgIFAgPSBzZWxmLmNscygnL2Rldi9udWxsJykKKyAgICAgICAgaWYgbm90IFAuZXhpc3RzKCk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIvZGV2L251bGwgcmVxdWlyZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUC5pc19jaGFyX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfYmxvY2tfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWxlKCkpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19jb21tb24oc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFLCAnZmlsZUEnKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyhwLCBwcm90bykKKyAgICAgICAgICAgIHBwID0gcGlja2xlLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAuc3RhdCgpLCBwLnN0YXQoKSkKKworICAgIGRlZiB0ZXN0X3BhcnRzX2ludGVybmluZyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvdXNyL2Jpbi9mb28nKQorICAgICAgICBxID0gUCgnL3Vzci9sb2NhbC9iaW4nKQorICAgICAgICAjICd1c3InCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocC5wYXJ0c1sxXSwgcS5wYXJ0c1sxXSkKKyAgICAgICAgIyAnYmluJworICAgICAgICBzZWxmLmFzc2VydElzKHAucGFydHNbMl0sIHEucGFydHNbM10pCisKKyAgICBkZWYgX2NoZWNrX2NvbXBsZXhfc3ltbGlua3Moc2VsZiwgbGluazBfdGFyZ2V0KToKKyAgICAgICAgIyBUZXN0IHNvbHZpbmcgYSBub24tbG9vcGluZyBjaGFpbiBvZiBzeW1saW5rcyAoaXNzdWUgIzE5ODg3KQorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignbGluazAnLCAnbGluazAnKSwgam9pbignbGluazEnKSkKKyAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignbGluazEnLCAnbGluazEnKSwgam9pbignbGluazInKSkKKyAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignbGluazInLCAnbGluazInKSwgam9pbignbGluazMnKSkKKyAgICAgICAgc2VsZi5kaXJsaW5rKGxpbmswX3RhcmdldCwgam9pbignbGluazAnKSkKKworICAgICAgICAjIFJlc29sdmUgYWJzb2x1dGUgcGF0aHMKKyAgICAgICAgcCA9IChQIC8gJ2xpbmswJykucmVzb2x2ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgIHAgPSAoUCAvICdsaW5rMScpLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICBwID0gKFAgLyAnbGluazInKS5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgcCA9IChQIC8gJ2xpbmszJykucmVzb2x2ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisKKyAgICAgICAgIyBSZXNvbHZlIHJlbGF0aXZlIHBhdGhzCisgICAgICAgIG9sZF9wYXRoID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoQkFTRSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHNlbGYuY2xzKCdsaW5rMCcpLnJlc29sdmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgICAgICBwID0gc2VsZi5jbHMoJ2xpbmsxJykucmVzb2x2ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscygnbGluazInKS5yZXNvbHZlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICAgICAgcCA9IHNlbGYuY2xzKCdsaW5rMycpLnJlc29sdmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfY29tcGxleF9zeW1saW5rc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29tcGxleF9zeW1saW5rcyhCQVNFKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9jb21wbGV4X3N5bWxpbmtzX3JlbGF0aXZlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19jb21wbGV4X3N5bWxpbmtzKCcuJykKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfY29tcGxleF9zeW1saW5rc19yZWxhdGl2ZV9kb3RfZG90KHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19jb21wbGV4X3N5bWxpbmtzKG9zLnBhdGguam9pbignZGlyQScsICcuLicpKQorCisKK2NsYXNzIFBhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlBhdGgKKworICAgIGRlZiB0ZXN0X2NvbmNyZXRlX2NsYXNzKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksCisgICAgICAgICAgICBwYXRobGliLldpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIHBhdGhsaWIuUG9zaXhQYXRoKQorCisgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfZmxhdm91cihzZWxmKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGF0aGxpYi5Qb3NpeFBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwYXRobGliLldpbmRvd3NQYXRoKQorCisKK0Bvbmx5X3Bvc2l4CitjbGFzcyBQb3NpeFBhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlBvc2l4UGF0aAorCisgICAgZGVmIF9jaGVja19zeW1saW5rX2xvb3Aoc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXRoID0gc2VsZi5jbHMoKmFyZ3MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHByaW50KHBhdGgucmVzb2x2ZSgpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9tb2RlKHNlbGYpOgorICAgICAgICBvbGRfbWFzayA9IG9zLnVtYXNrKDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy51bWFzaywgb2xkX21hc2spCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ25ld19maWxlJykub3Blbignd2InKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY2NikKKyAgICAgICAgb3MudW1hc2soMG8wMjIpCisgICAgICAgIHdpdGggKHAgLyAnb3RoZXJfbmV3X2ZpbGUnKS5vcGVuKCd3YicpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignb3RoZXJfbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNjQ0KQorCisgICAgZGVmIHRlc3RfdG91Y2hfbW9kZShzZWxmKToKKyAgICAgICAgb2xkX21hc2sgPSBvcy51bWFzaygwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW1hc2ssIG9sZF9tYXNrKQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgKHAgLyAnbmV3X2ZpbGUnKS50b3VjaCgpCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCduZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NjYpCisgICAgICAgIG9zLnVtYXNrKDBvMDIyKQorICAgICAgICAocCAvICdvdGhlcl9uZXdfZmlsZScpLnRvdWNoKCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ290aGVyX25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY0NCkKKyAgICAgICAgKHAgLyAnbWFza2VkX25ld19maWxlJykudG91Y2gobW9kZT0wbzc1MCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ21hc2tlZF9uZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG83NTApCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3Jlc29sdmVfbG9vcChzZWxmKToKKyAgICAgICAgIyBMb29wIGRldGVjdGlvbiBmb3IgYnJva2VuIHN5bWxpbmtzIHVuZGVyIFBPU0lYCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIExvb3BzIHdpdGggcmVsYXRpdmUgc3ltbGlua3MKKyAgICAgICAgb3Muc3ltbGluaygnbGlua1gvaW5zaWRlJywgam9pbignbGlua1gnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWCcpCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtZJywgam9pbignbGlua1knKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWScpCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtaLy4uL2xpbmtaJywgam9pbignbGlua1onKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWicpCisgICAgICAgICMgTG9vcHMgd2l0aCBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBvcy5zeW1saW5rKGpvaW4oJ2xpbmtVL2luc2lkZScpLCBqb2luKCdsaW5rVScpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtVJykKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVicpLCBqb2luKCdsaW5rVicpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtWJykKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVy8uLi9saW5rVycpLCBqb2luKCdsaW5rVycpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtXJykKKworICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBnaXZlbiA9IHNldChwLmdsb2IoIkZJTEVhIikpCisgICAgICAgIGV4cGVjdCA9IHNldCgpIGlmIG5vdCBzdXBwb3J0LmZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUoQkFTRSkgZWxzZSBnaXZlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiRklMRWEqIikpLCBzZXQoKSkKKworICAgIGRlZiB0ZXN0X3JnbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBnaXZlbiA9IHNldChwLnJnbG9iKCJGSUxFZCIpKQorICAgICAgICBleHBlY3QgPSBzZXQoKSBpZiBub3Qgc3VwcG9ydC5mc19pc19jYXNlX2luc2Vuc2l0aXZlKEJBU0UpIGVsc2UgZ2l2ZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXZlbiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCoiKSksIHNldCgpKQorCisKK0Bvbmx5X250CitjbGFzcyBXaW5kb3dzUGF0aFRlc3QoX0Jhc2VQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuV2luZG93c1BhdGgKKworICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIkZJTEVhIikpLCB7IFAoQkFTRSwgImZpbGVBIikgfSkKKworICAgIGRlZiB0ZXN0X3JnbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCIpKSwgeyBQKEJBU0UsICJkaXJDL2RpckQvZmlsZUQiKSB9KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BkYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CmluZGV4IDAzMDg0ZTQuLjg5NWJlMDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CkBAIC0xLDkgKzEsOSBAQAogIyBBIHRlc3Qgc3VpdGUgZm9yIHBkYjsgbm90IHZlcnkgY29tcHJlaGVuc2l2ZSBhdCB0aGUgbW9tZW50LgogCiBpbXBvcnQgZG9jdGVzdAotaW1wb3J0IGltcAogaW1wb3J0IHBkYgogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGV4dHdyYXAKQEAgLTIwNSw3ICsyMDUsOCBAQAogICAgIC4uLiAgICAgJ2VuYWJsZSAxJywKICAgICAuLi4gICAgICdjbGVhciAxJywKICAgICAuLi4gICAgICdjb21tYW5kcyAyJywKLSAgICAuLi4gICAgICdwcmludCA0MicsCisgICAgLi4uICAgICAncCAiNDIiJywKKyAgICAuLi4gICAgICdwcmludCgiNDIiLCA3KjYpJywgICAgICMgSXNzdWUgMTg3NjQgKG5vdCBhYm91dCBicmVha3BvaW50cykKICAgICAuLi4gICAgICdlbmQnLAogICAgIC4uLiAgICAgJ2NvbnRpbnVlJywgICMgd2lsbCBzdG9wIGF0IGJyZWFrcG9pbnQgMiAobGluZSA0KQogICAgIC4uLiAgICAgJ2NsZWFyJywgICAgICMgY2xlYXIgYWxsIQpAQCAtMjUyLDExICsyNTMsMTMgQEAKICAgICAoUGRiKSBjbGVhciAxCiAgICAgRGVsZXRlZCBicmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCiAgICAgKFBkYikgY29tbWFuZHMgMgotICAgIChjb20pIHByaW50IDQyCisgICAgKGNvbSkgcCAiNDIiCisgICAgKGNvbSkgcHJpbnQoIjQyIiwgNyo2KQogICAgIChjb20pIGVuZAogICAgIChQZGIpIGNvbnRpbnVlCiAgICAgMQotICAgIDQyCisgICAgJzQyJworICAgIDQyIDQyCiAgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDQpdGVzdF9mdW5jdGlvbigpCiAgICAgLT4gcHJpbnQoMikKICAgICAoUGRiKSBjbGVhcgpAQCAtNDY0LDcgKzQ2Nyw3IEBACiAKIAogIyBNb2R1bGUgZm9yIHRlc3Rpbmcgc2tpcHBpbmcgb2YgbW9kdWxlIHRoYXQgbWFrZXMgYSBjYWxsYmFjawotbW9kID0gaW1wLm5ld19tb2R1bGUoJ21vZHVsZV90b19za2lwJykKK21vZCA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZHVsZV90b19za2lwJykKIGV4ZWMoJ2RlZiBmb29fcG9ueShjYWxsYmFjayk6IHggPSAxOyBjYWxsYmFjaygpOyByZXR1cm4gTm9uZScsIG1vZC5fX2RpY3RfXykKIAogCkBAIC01OTcsNiArNjAwLDMxMyBAQAogICAgIChQZGIpIGNvbnRpbnVlCiAgICAgIiIiCiAKK2RlZiB0ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudCgpOgorICAgICIiIlRlc3QgdGhhdCBwZGIgc3RvcHMgYWZ0ZXIgYSBuZXh0L3VudGlsL3JldHVybiBpc3N1ZWQgYXQgYSByZXR1cm4gZGVidWcgZXZlbnQuCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb25fMigpOgorICAgIC4uLiAgICAgeCA9IDEKKyAgICAuLi4gICAgIHggPSAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb25fMigpCisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAuLi4gICAgIGVuZCA9IDEKKworICAgID4+PiBmcm9tIGJkYiBpbXBvcnQgQnJlYWtwb2ludAorICAgID4+PiBCcmVha3BvaW50Lm5leHQgPSAxCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnYnJlYWsgdGVzdF9mdW5jdGlvbl8yJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZScsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZScsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICd1bnRpbCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIChQZGIpIGJyZWFrIHRlc3RfZnVuY3Rpb25fMgorICAgIEJyZWFrcG9pbnQgMSBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPjoxCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDQpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBjb250aW51ZQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT4oMil0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC0+IHggPSAxCisgICAgKFBkYikgcmV0dXJuCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT4oMyl0ZXN0X2Z1bmN0aW9uXzIoKS0+Tm9uZQorICAgIC0+IHggPSAyCisgICAgKFBkYikgdW50aWwKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBjb250aW51ZQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT4oMil0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC0+IHggPSAxCisgICAgKFBkYikgcmV0dXJuCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT4oMyl0ZXN0X2Z1bmN0aW9uXzIoKS0+Tm9uZQorICAgIC0+IHggPSAyCisgICAgKFBkYikgcmV0dXJuCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig2KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGVuZCA9IDEKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCitkZWYgdGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIHNraXAgdW53aW5kbmcgc3RhY2sgb24geWllbGQgZm9yIGdlbmVyYXRvcnMgZm9yICJuZXh0IiBjb21tYW5kCisKKyAgICA+Pj4gZGVmIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICB5aWVsZCAwCisgICAgLi4uICAgICByZXR1cm4gMQorICAgIC4uLiAgICAgeWllbGQgMgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBpdCA9IHRlc3RfZ2VuKCkKKyAgICAuLi4gICAgIHRyeToKKyAgICAuLi4gICAgICAgICBhc3NlcnQgbmV4dChpdCkgPT0gMAorICAgIC4uLiAgICAgICAgIG5leHQoaXQpCisgICAgLi4uICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAuLi4gICAgICAgICBhc3NlcnQgZXgudmFsdWUgPT0gMQorICAgIC4uLiAgICAgcHJpbnQoImZpbmlzaGVkIikKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGl0ID0gdGVzdF9nZW4oKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDQpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdHJ5OgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAoUGRiKSBzdGVwCisgICAgLS1DYWxsLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDIpdGVzdF9nZW4oKQorICAgIC0+IHlpZWxkIDAKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigzKXRlc3RfZ2VuKCkKKyAgICAtPiByZXR1cm4gMQorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigzKXRlc3RfZ2VuKCktPjEKKyAgICAtPiByZXR1cm4gMQorICAgIChQZGIpIHN0ZXAKKyAgICBTdG9wSXRlcmF0aW9uOiAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig2KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IG5leHQoaXQpCisgICAgKFBkYikgY29udGludWUKKyAgICBmaW5pc2hlZAorICAgICIiIgorCitkZWYgdGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvcigpOgorICAgICIiIlRlc3Rpbmcgbm8gdW53aW5kbmcgc3RhY2sgb24geWllbGQgZm9yIGdlbmVyYXRvcnMKKyAgICAgICBmb3IgInJldHVybiIgY29tbWFuZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKyAgICAuLi4gICAgIHlpZWxkIDIKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgaXQgPSB0ZXN0X2dlbigpCisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAuLi4gICAgICAgICBuZXh0KGl0KQorICAgIC4uLiAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXg6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IGV4LnZhbHVlID09IDEKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gaXQgPSB0ZXN0X2dlbigpCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRyeToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAoUGRiKSBzdGVwCisgICAgLS1DYWxsLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMSl0ZXN0X2dlbigpCisgICAgLT4gZGVmIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgcmV0dXJuCisgICAgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig2KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IG5leHQoaXQpCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig3KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oOCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBhc3NlcnQgZXgudmFsdWUgPT0gMQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvcigpOgorICAgICIiIlRlc3Rpbmcgbm8gdW53aW5kbmcgc3RhY2sgb24geWllbGQgZm9yIGdlbmVyYXRvcnMKKyAgICAgICBmb3IgInVudGlsIiBjb21tYW5kIGlmIHRhcmdldCBicmVha3BvaW5nIGlzIG5vdCByZWFjaGVkCisKKyAgICA+Pj4gZGVmIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICB5aWVsZCAwCisgICAgLi4uICAgICB5aWVsZCAxCisgICAgLi4uICAgICB5aWVsZCAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICAgICAgcHJpbnQoaSkKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICd1bnRpbCA0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAoUGRiKSBzdGVwCisgICAgLS1DYWxsLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigxKXRlc3RfZ2VuKCkKKyAgICAtPiBkZWYgdGVzdF9nZW4oKToKKyAgICAoUGRiKSB1bnRpbCA0CisgICAgMAorICAgIDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPig0KXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAyCisgICAgKFBkYikgc3RlcAorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPig0KXRlc3RfZ2VuKCktPjIKKyAgICAtPiB5aWVsZCAyCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDQpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoaSkKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDIKKyAgICBmaW5pc2hlZAorICAgICIiIgorCitkZWYgdGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcCgpOgorICAgICIiIlRoZSBuZXh0IGNvbW1hbmQgb24gcmV0dXJuaW5nIGZyb20gYSBnZW5lcmF0b3IgY29udHJvbGVkIGJ5IGEgZm9yIGxvb3AuCisKKyAgICA+Pj4gZGVmIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICB5aWVsZCAwCisgICAgLi4uICAgICByZXR1cm4gMQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgICAgIHByaW50KCd2YWx1ZScsIGkpCisgICAgLi4uICAgICB4ID0gMTIzCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydicmVhayB0ZXN0X2dlbicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3BbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAoUGRiKSBicmVhayB0ZXN0X2dlbgorICAgIEJyZWFrcG9pbnQgNiBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3BbMF0+OjEKKyAgICAoUGRiKSBjb250aW51ZQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzBdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAwCisgICAgKFBkYikgbmV4dAorICAgIHZhbHVlIDAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFswXT4oMyl0ZXN0X2dlbigpCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBuZXh0CisgICAgSW50ZXJuYWwgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHggPSAxMjMKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCitkZWYgdGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yKCk6CisgICAgIiIiVGhlIG5leHQgY29tbWFuZCBpbiBhIGdlbmVyYXRvciB3aXRoIGEgc3ViaXRlcmF0b3IuCisKKyAgICA+Pj4gZGVmIHRlc3Rfc3ViZ2VuZXJhdG9yKCk6CisgICAgLi4uICAgICB5aWVsZCAwCisgICAgLi4uICAgICByZXR1cm4gMQorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeCA9IHlpZWxkIGZyb20gdGVzdF9zdWJnZW5lcmF0b3IoKQorICAgIC4uLiAgICAgcmV0dXJuIHgKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAuLi4gICAgICAgICBwcmludCgndmFsdWUnLCBpKQorICAgIC4uLiAgICAgeCA9IDEyMworCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzJdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsxXT4oMSl0ZXN0X2dlbigpCisgICAgLT4gZGVmIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMV0+KDIpdGVzdF9nZW4oKQorICAgIC0+IHggPSB5aWVsZCBmcm9tIHRlc3Rfc3ViZ2VuZXJhdG9yKCkKKyAgICAoUGRiKSBuZXh0CisgICAgdmFsdWUgMAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMV0+KDMpdGVzdF9nZW4oKQorICAgIC0+IHJldHVybiB4CisgICAgKFBkYikgbmV4dAorICAgIEludGVybmFsIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzJdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMl0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4geCA9IDEyMworICAgIChQZGIpIGNvbnRpbnVlCisgICAgIiIiCisKIAogY2xhc3MgUGRiVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC02MTcsNiArOTI3LDM2IEBACiAgICAgICAgIHN0ZGVyciA9IHN0ZGVyciBhbmQgYnl0ZXMuZGVjb2RlKHN0ZGVycikKICAgICAgICAgcmV0dXJuIHN0ZG91dCwgc3RkZXJyCiAKKyAgICBkZWYgX2Fzc2VydF9maW5kX2Z1bmN0aW9uKHNlbGYsIGZpbGVfY29udGVudCwgZnVuY19uYW1lLCBleHBlY3RlZCk6CisgICAgICAgIGZpbGVfY29udGVudCA9IHRleHR3cmFwLmRlZGVudChmaWxlX2NvbnRlbnQpCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGZpbGVfY29udGVudCkKKworICAgICAgICBleHBlY3RlZCA9IE5vbmUgaWYgbm90IGV4cGVjdGVkIGVsc2UgKAorICAgICAgICAgICAgZXhwZWN0ZWRbMF0sIHN1cHBvcnQuVEVTVEZOLCBleHBlY3RlZFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGV4cGVjdGVkLCBwZGIuZmluZF9mdW5jdGlvbihmdW5jX25hbWUsIHN1cHBvcnQuVEVTVEZOKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZnVuY3Rpb25fZW1wdHlfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2ZpbmRfZnVuY3Rpb24oJycsICdmb28nLCBOb25lKQorCisgICAgZGVmIHRlc3RfZmluZF9mdW5jdGlvbl9mb3VuZChzZWxmKToKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2ZpbmRfZnVuY3Rpb24oCisgICAgICAgICAgICAiIiJcCisgICAgICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgYmFyKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgcXV1eCgpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIiwKKyAgICAgICAgICAgICdiYXInLAorICAgICAgICAgICAgKCdiYXInLCA0KSwKKyAgICAgICAgKQorCiAgICAgZGVmIHRlc3RfaXNzdWU3OTY0KHNlbGYpOgogICAgICAgICAjIG9wZW4gdGhlIGZpbGUgYXMgYmluYXJ5IHNvIHdlIGNhbiBmb3JjZSBcclxuIG5ld2xpbmUKICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkgYi9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQppbmRleCAxY2FjZGVhLi41MDI1NzkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQpAQCAtNSw0NCArNSwyOCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIG1hdGggaW1wb3J0IGNvcHlzaWduCiAKLWRlZiBkaXNhc3NlbWJsZShmdW5jKToKLSAgICBmID0gU3RyaW5nSU8oKQotICAgIHRtcCA9IHN5cy5zdGRvdXQKLSAgICBzeXMuc3Rkb3V0ID0gZgotICAgIHRyeToKLSAgICAgICAgZGlzLmRpcyhmdW5jKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHN5cy5zdGRvdXQgPSB0bXAKLSAgICByZXN1bHQgPSBmLmdldHZhbHVlKCkKLSAgICBmLmNsb3NlKCkKLSAgICByZXR1cm4gcmVzdWx0Citmcm9tIHRlc3QuYnl0ZWNvZGVfaGVscGVyIGltcG9ydCBCeXRlY29kZVRlc3RDYXNlCiAKLWRlZiBkaXNfc2luZ2xlKGxpbmUpOgotICAgIHJldHVybiBkaXNhc3NlbWJsZShjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykpCi0KLQotY2xhc3MgVGVzdFRyYW5mb3Jtcyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBUZXN0VHJhbmZvcm1zKEJ5dGVjb2RlVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdW5vdChzZWxmKToKICAgICAgICAgIyBVTkFSWV9OT1QgUE9QX0pVTVBfSUZfRkFMU0UgIC0tPiAgUE9QX0pVTVBfSUZfVFJVRScKICAgICAgICAgZGVmIHVub3QoeCk6CiAgICAgICAgICAgICBpZiBub3QgeCA9PSAyOgogICAgICAgICAgICAgICAgIGRlbCB4Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKHVub3QpCi0gICAgICAgIGZvciBlbGVtIGluICgnVU5BUllfTk9UJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKLSAgICAgICAgZm9yIGVsZW0gaW4gKCdQT1BfSlVNUF9JRl9UUlVFJywpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZSh1bm90LCAnVU5BUllfTk9UJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKHVub3QsICdQT1BfSlVNUF9JRl9GQUxTRScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZSh1bm90LCAnUE9QX0pVTVBfSUZfVFJVRScpCiAKICAgICBkZWYgdGVzdF9lbGltX2ludmVyc2lvbl9vZl9pc19vcl9pbihzZWxmKToKLSAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCdub3QgYSBpcyBiJywgJyhpcyBub3QpJywpLAotICAgICAgICAgICAgKCdub3QgYSBpbiBiJywgJyhub3QgaW4pJywpLAotICAgICAgICAgICAgKCdub3QgYSBpcyBub3QgYicsICcoaXMpJywpLAotICAgICAgICAgICAgKCdub3QgYSBub3QgaW4gYicsICcoaW4pJywpLAorICAgICAgICBmb3IgbGluZSwgY21wX29wIGluICgKKyAgICAgICAgICAgICgnbm90IGEgaXMgYicsICdpcyBub3QnLCksCisgICAgICAgICAgICAoJ25vdCBhIGluIGInLCAnbm90IGluJywpLAorICAgICAgICAgICAgKCdub3QgYSBpcyBub3QgYicsICdpcycsKSwKKyAgICAgICAgICAgICgnbm90IGEgbm90IGluIGInLCAnaW4nLCksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0NPTVBBUkVfT1AnLCBjbXBfb3ApCiAKICAgICBkZWYgdGVzdF9nbG9iYWxfYXNfY29uc3RhbnQoc2VsZik6CiAgICAgICAgICMgTE9BRF9HTE9CQUwgTm9uZS9UcnVlL0ZhbHNlICAtLT4gIExPQURfQ09OU1QgTm9uZS9UcnVlL0ZhbHNlCkBAIC01NiwxNyArNDAsMTQgQEAKICAgICAgICAgZGVmIGgoeCk6CiAgICAgICAgICAgICBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIHgKLSAgICAgICAgZm9yIGZ1bmMsIG5hbWUgaW4gKChmLCAnTm9uZScpLCAoZywgJ1RydWUnKSwgKGgsICdGYWxzZScpKToKLSAgICAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGZ1bmMpCi0gICAgICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfR0xPQkFMJywpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQotICAgICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJygnK25hbWUrJyknKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgZm9yIGZ1bmMsIGVsZW0gaW4gKChmLCBOb25lKSwgKGcsIFRydWUpLCAoaCwgRmFsc2UpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmdW5jLCAnTE9BRF9HTE9CQUwnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGZ1bmMsICdMT0FEX0NPTlNUJywgZWxlbSkKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgICdBZGRpbmcgYSBkb2NzdHJpbmcgbWFkZSB0aGlzIHRlc3QgZmFpbCBpbiBQeTIuNS4wJwogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc2VsZi5hc3NlcnRJbignTE9BRF9DT05TVCcsIGRpc2Fzc2VtYmxlKGYpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdMT0FEX0dMT0JBTCcsIGRpc2Fzc2VtYmxlKGYpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0xPQURfR0xPQkFMJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGYsICdMT0FEX0NPTlNUJywgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3doaWxlX29uZShzZWxmKToKICAgICAgICAgIyBTa2lwIG92ZXI6ICBMT0FEX0NPTlNUIHRydWVjb25zdCAgUE9QX0pVTVBfSUZfRkFMU0UgeHgKQEAgLTc0LDExICs1NSwxMCBAQAogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gbGlzdAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfQ09OU1QnLCAnUE9QX0pVTVBfSUZfRkFMU0UnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsIGVsZW0pCiAgICAgICAgIGZvciBlbGVtIGluICgnSlVNUF9BQlNPTFVURScsKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGYsIGVsZW0pCiAKICAgICBkZWYgdGVzdF9wYWNrX3VucGFjayhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtODYsMjggKzY2LDMwIEBACiAgICAgICAgICAgICAoJ2EsIGIgPSBhLCBiJywgJ1JPVF9UV08nLCksCiAgICAgICAgICAgICAoJ2EsIGIsIGMgPSBhLCBiLCBjJywgJ1JPVF9USFJFRScsKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5QQUNLX1RVUExFJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwnJywnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9UVVBMRScpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ1VOUEFDS19UVVBMRScpCiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3R1cGxlc19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnYSA9IDEsMiwzJywgJygoMSwgMiwgMykpJyksCi0gICAgICAgICAgICAoJygiYSIsImIiLCJjIiknLCAiKCgnYScsICdiJywgJ2MnKSkiKSwKLSAgICAgICAgICAgICgnYSxiLGMgPSAxLDIsMycsICcoKDEsIDIsIDMpKScpLAotICAgICAgICAgICAgKCcoTm9uZSwgMSwgTm9uZSknLCAnKChOb25lLCAxLCBOb25lKSknKSwKLSAgICAgICAgICAgICgnKCgxLCAyKSwgMywgNCknLCAnKCgoMSwgMiksIDMsIDQpKScpLAorICAgICAgICAgICAgKCdhID0gMSwyLDMnLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCcoImEiLCJiIiwiYyIpJywgKCdhJywgJ2InLCAnYycpKSwKKyAgICAgICAgICAgICgnYSxiLGMgPSAxLDIsMycsICgxLCAyLCAzKSksCisgICAgICAgICAgICAoJyhOb25lLCAxLCBOb25lKScsIChOb25lLCAxLCBOb25lKSksCisgICAgICAgICAgICAoJygoMSwgMiksIDMsIDQpJywgKCgxLCAyKSwgMywgNCkpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCcnLCdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQogCiAgICAgICAgICMgTG9uZyB0dXBsZXMgc2hvdWxkIGJlIGZvbGRlZCB0b28uCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUocmVwcih0dXBsZShyYW5nZSgxMDAwMCkpKSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUocmVwcih0dXBsZShyYW5nZSgxMDAwMCkpKSwnJywnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9UVVBMRScpCiAgICAgICAgICMgT25lIExPQURfQ09OU1QgZm9yIHRoZSB0dXBsZSwgb25lIGZvciB0aGUgTm9uZSByZXR1cm4gdmFsdWUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uY291bnQoJ0xPQURfQ09OU1QnKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCisgICAgICAgIGxvYWRfY29uc3RzID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdMT0FEX0NPTlNUJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9hZF9jb25zdHMpLCAyKQogCiAgICAgICAgICMgQnVnIDEwNTM4MTk6ICBUdXBsZSBvZiBjb25zdGFudHMgbWlzaWRlbnRpZmllZCB3aGVuIHByZXNlbnRlZCB3aXRoOgogICAgICAgICAjIC4gLiAuIG9wY29kZV93aXRoX2FyZyAxMDAgICB1bmFyeV9vcGNvZGUgICBCVUlMRF9UVVBMRSAxICAuIC4gLgpAQCAtMTI5LDE0ICsxMTEsMTQgQEAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX2xpc3RzX29mX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAogICAgICAgICAgICAgIyBpbi9ub3QgaW4gY29uc3RhbnRzIHdpdGggQlVJTERfTElTVCBzaG91bGQgYmUgZm9sZGVkIHRvIGEgdHVwbGU6Ci0gICAgICAgICAgICAoJ2EgaW4gWzEsMiwzXScsICcoMSwgMiwgMyknKSwKLSAgICAgICAgICAgICgnYSBub3QgaW4gWyJhIiwiYiIsImMiXScsICIoKCdhJywgJ2InLCAnYycpKSIpLAotICAgICAgICAgICAgKCdhIGluIFtOb25lLCAxLCBOb25lXScsICcoKE5vbmUsIDEsIE5vbmUpKScpLAotICAgICAgICAgICAgKCdhIG5vdCBpbiBbKDEsIDIpLCAzLCA0XScsICcoKCgxLCAyKSwgMywgNCkpJyksCisgICAgICAgICAgICAoJ2EgaW4gWzEsMiwzXScsICgxLCAyLCAzKSksCisgICAgICAgICAgICAoJ2Egbm90IGluIFsiYSIsImIiLCJjIl0nLCAoJ2EnLCAnYicsICdjJykpLAorICAgICAgICAgICAgKCdhIGluIFtOb25lLCAxLCBOb25lXScsIChOb25lLCAxLCBOb25lKSksCisgICAgICAgICAgICAoJ2Egbm90IGluIFsoMSwgMiksIDMsIDRdJywgKCgxLCAyKSwgMywgNCkpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfTElTVCcsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX0xJU1QnKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9zZXRzX29mX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtMTQ3LDE4ICsxMjksOSBAQAogICAgICAgICAgICAgKCdhIG5vdCBpbiB7KDEsIDIpLCAzLCA0fScsIGZyb3plbnNldCh7KDEsIDIpLCAzLCA0fSkpLAogICAgICAgICAgICAgKCdhIGluIHsxLCAyLCAzLCAzLCAyLCAxfScsIGZyb3plbnNldCh7MSwgMiwgM30pKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9TRVQnLCBhc20pCi0KLSAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIGZyb3plbnNldCAnZWxlbScgaXMgaW4gdGhlIGRpc2Fzc2VtYmx5Ci0gICAgICAgICAgICAjIFRoZSBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMgaW4gcmVwciggZnJvemVuc2V0ICkgaXNuJ3QKLSAgICAgICAgICAgICMgZ3VhcmFudGVlZCwgc28gd2UganVtcCB0aHJvdWdoIHNvbWUgaG9vcHMgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZQotICAgICAgICAgICAgIyB0aGUgZnJvemVuc2V0IHdlIGV4cGVjdDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Zyb3plbnNldCcsIGFzbSkKLSAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZnJvemVuc2V0IGxpdGVyYWwgZnJvbSB0aGUgZGlzYXNzZW1ibHk6Ci0gICAgICAgICAgICBtID0gcmUubWF0Y2gocicuKihmcm96ZW5zZXRcKHsuKn1cKSkuKicsIGFzbSwgcmUuRE9UQUxMKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwobS5ncm91cCgxKSksIGVsZW0pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1NFVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQogCiAgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHJlc3VsdGluZyBjb2RlIGFjdHVhbGx5IHdvcmtzOgogICAgICAgICBkZWYgZihhKToKQEAgLTE3Niw5OCArMTQ5LDEwMyBAQAogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9iaW5vcHNfb25fY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJ2EgPSAyKzMrNCcsICcoOSknKSwgICAgICAgICAgICAgICAgICAgIyBjaGFpbmVkIGZvbGQKLSAgICAgICAgICAgICgnIkAiKjQnLCAiKCdAQEBAJykiKSwgICAgICAgICAgICAgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKLSAgICAgICAgICAgICgnYT0iYWJjIiArICJkZWYiJywgIignYWJjZGVmJykiKSwgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKLSAgICAgICAgICAgICgnYSA9IDMqKjQnLCAnKDgxKScpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBwb3dlcgotICAgICAgICAgICAgKCdhID0gMyo0JywgJygxMiknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG11bHRpcGx5Ci0gICAgICAgICAgICAoJ2EgPSAxMy8vNCcsICcoMyknKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgZmxvb3IgZGl2aWRlCi0gICAgICAgICAgICAoJ2EgPSAxNCU0JywgJygyKScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbW9kdWxvCi0gICAgICAgICAgICAoJ2EgPSAyKzMnLCAnKDUpJyksICAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYWRkCi0gICAgICAgICAgICAoJ2EgPSAxMy00JywgJyg5KScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgc3VidHJhY3QKLSAgICAgICAgICAgICgnYSA9ICgxMiwxMylbMV0nLCAnKDEzKScpLCAgICAgICAgICAgICAjIGJpbmFyeSBzdWJzY3IKLSAgICAgICAgICAgICgnYSA9IDEzIDw8IDInLCAnKDUyKScpLCAgICAgICAgICAgICAgICAjIGJpbmFyeSBsc2hpZnQKLSAgICAgICAgICAgICgnYSA9IDEzID4+IDInLCAnKDMpJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSByc2hpZnQKLSAgICAgICAgICAgICgnYSA9IDEzICYgNycsICcoNSknKSwgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhbmQKLSAgICAgICAgICAgICgnYSA9IDEzIF4gNycsICcoMTApJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSB4b3IKLSAgICAgICAgICAgICgnYSA9IDEzIHwgNycsICcoMTUpJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSBvcgorICAgICAgICAgICAgKCdhID0gMiszKzQnLCA5KSwgICAgICAgICAgICAgICAgICAgIyBjaGFpbmVkIGZvbGQKKyAgICAgICAgICAgICgnIkAiKjQnLCAnQEBAQCcpLCAgICAgICAgICAgICAgICAgICMgY2hlY2sgc3RyaW5nIG9wcworICAgICAgICAgICAgKCdhPSJhYmMiICsgImRlZiInLCAnYWJjZGVmJyksICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCisgICAgICAgICAgICAoJ2EgPSAzKio0JywgODEpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBwb3dlcgorICAgICAgICAgICAgKCdhID0gMyo0JywgMTIpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbXVsdGlwbHkKKyAgICAgICAgICAgICgnYSA9IDEzLy80JywgMyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGZsb29yIGRpdmlkZQorICAgICAgICAgICAgKCdhID0gMTQlNCcsIDIpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbW9kdWxvCisgICAgICAgICAgICAoJ2EgPSAyKzMnLCA1KSwgICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhZGQKKyAgICAgICAgICAgICgnYSA9IDEzLTQnLCA5KSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHN1YnRyYWN0CisgICAgICAgICAgICAoJ2EgPSAoMTIsMTMpWzFdJywgMTMpLCAgICAgICAgICAgICAjIGJpbmFyeSBzdWJzY3IKKyAgICAgICAgICAgICgnYSA9IDEzIDw8IDInLCA1MiksICAgICAgICAgICAgICAgICMgYmluYXJ5IGxzaGlmdAorICAgICAgICAgICAgKCdhID0gMTMgPj4gMicsIDMpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcnNoaWZ0CisgICAgICAgICAgICAoJ2EgPSAxMyAmIDcnLCA1KSwgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhbmQKKyAgICAgICAgICAgICgnYSA9IDEzIF4gNycsIDEwKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHhvcgorICAgICAgICAgICAgKCdhID0gMTMgfCA3JywgMTUpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgb3IKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnQklOQVJZXycpKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnYT0yKyJiIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJygyKScsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdiJykiLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCdhPTIrImIiJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAyKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnYicpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCBsYXJnZSBzZXF1ZW5jZXMgZG8gbm90IHJlc3VsdCBmcm9tIGZvbGRpbmcKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnYT0ieCIqMTAwMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJygxMDAwKScsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJ2E9IngiKjEwMDAnLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIDEwMDApCiAKICAgICBkZWYgdGVzdF9iaW5hcnlfc3Vic2NyX29uX3VuaWNvZGUoc2VsZik6CiAgICAgICAgICMgdmFsaWQgY29kZSBnZXQgb3B0aW1pemVkCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJyJmb28iWzBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdmJykiLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJyJcdTAwNjFcdWZmZmYiWzFdJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdcXHVmZmZmJykiLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJyJcVTAwMDEyMzQ1YWJjZGVmIlszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignYycpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnImZvbyJbMF0nLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsICdmJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCSU5BUllfU1VCU0NSJykKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJcdTAwNjFcdWZmZmYiWzFdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnXHVmZmZmJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsJ0JJTkFSWV9TVUJTQ1InKQorCisgICAgICAgICMgV2l0aCBQRVAgMzkzLCBub24tQk1QIGNoYXIgZ2V0IG9wdGltaXplZAorICAgICAgICBjb2RlID0gY29tcGlsZSgnIlxVMDAwMTIzNDUiWzBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQklOQVJZX1NVQlNDUicpCiAKICAgICAgICAgIyBpbnZhbGlkIGNvZGUgZG9lc24ndCBnZXQgb3B0aW1pemVkCiAgICAgICAgICMgb3V0IG9mIHJhbmdlCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJyJmdXUiWzEwXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciZnV1IlsxMF0nLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnQklOQVJZX1NVQlNDUicpCiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3VuYXJ5b3BzX29uX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCctMC41JywgJygtMC41KScpLCAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKLSAgICAgICAgICAgICgnLTAuMCcsICcoLTAuMCknKSwgICAgICAgICAgICAgICAgICAgICAjIC0wLjAKLSAgICAgICAgICAgICgnLSgxLjAtMS4wKScsJygtMC4wKScpLCAgICAgICAgICAgICAgICAjIC0wLjAgYWZ0ZXIgZm9sZGluZwotICAgICAgICAgICAgKCctMCcsICcoMCknKSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgLTAKLSAgICAgICAgICAgICgnfi0yJywgJygxKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAotICAgICAgICAgICAgKCcrMScsICcoMSknKSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgcG9zaXRpdmUKKyAgICAgICAgICAgICgnLTAuNScsIC0wLjUpLCAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKKyAgICAgICAgICAgICgnLTAuMCcsIC0wLjApLCAgICAgICAgICAgICAgICAgICAgICMgLTAuMAorICAgICAgICAgICAgKCctKDEuMC0xLjApJywgLTAuMCksICAgICAgICAgICAgICAgIyAtMC4wIGFmdGVyIGZvbGRpbmcKKyAgICAgICAgICAgICgnLTAnLCAwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgLTAKKyAgICAgICAgICAgICgnfi0yJywgMSksICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0CisgICAgICAgICAgICAoJysxJywgMSksICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IHBvc2l0aXZlCiAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5BUllfJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdVTkFSWV8nKSkKIAogICAgICAgICAjIENoZWNrIHRoYXQgLTAuMCB3b3JrcyBhZnRlciBtYXJzaGFsaW5nCiAgICAgICAgIGRlZiBuZWd6ZXJvKCk6CiAgICAgICAgICAgICByZXR1cm4gLSgxLjAtMS4wKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGRpc2Fzc2VtYmxlKG5lZ3plcm8pKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weXNpZ24oMS4wLCBuZWd6ZXJvKCkpIDwgMCkKKyAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAotICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJy0iYWJjIicsICIoJ2FiYycpIiksICAgICAgICAgICAgICAgICAgIyB1bmFyeSBuZWdhdGl2ZQotICAgICAgICAgICAgKCd+ImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0CisgICAgICAgIGZvciBsaW5lLCBlbGVtLCBvcG5hbWUgaW4gKAorICAgICAgICAgICAgKCctImFiYyInLCAnYWJjJywgJ1VOQVJZX05FR0FUSVZFJyksCisgICAgICAgICAgICAoJ34iYWJjIicsICdhYmMnLCAnVU5BUllfSU5WRVJUJyksCiAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignVU5BUllfJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCBvcG5hbWUpCiAKICAgICBkZWYgdGVzdF9lbGltX2V4dHJhX3JldHVybihzZWxmKToKICAgICAgICAgIyBSRVRVUk4gTE9BRF9DT05TVCBOb25lIFJFVFVSTiAgLS0+ICBSRVRVUk4KICAgICAgICAgZGVmIGYoeCk6CiAgICAgICAgICAgICByZXR1cm4geAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdMT0FEX0NPTlNUJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCcoTm9uZSknLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0xPQURfQ09OU1QnLCBOb25lKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAxKQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX3RvX3JldHVybihzZWxmKToKICAgICAgICAgIyBKVU1QX0ZPUldBUkQgdG8gUkVUVVJOIC0tPiAgUkVUVVJOCiAgICAgICAgIGRlZiBmKGNvbmQsIHRydWVfdmFsdWUsIGZhbHNlX3ZhbHVlKToKICAgICAgICAgICAgIHJldHVybiB0cnVlX3ZhbHVlIGlmIGNvbmQgZWxzZSBmYWxzZV92YWx1ZQotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfRk9SV0FSRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9BQlNPTFVURScpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDIpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMShzZWxmKToKICAgICAgICAgIyBFbGltaW5hdGUgZGVhZCBjb2RlOiBqdW1wcyBpbW1lZGlhdGVseSBhZnRlciByZXR1cm5zIGNhbid0IGJlIHJlYWNoZWQKQEAgLTI4MCw0OCArMjU4LDUzIEBACiAgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0CiAgICAgICAgICAgICAgICAgcmV0dXJuIDUKICAgICAgICAgICAgIHJldHVybiA2Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9BQlNPTFVURScsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9GT1JXQVJEJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0FCU09MVVRFJykKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgNikKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF9hZnRlcl9yZXR1cm4yKHNlbGYpOgogICAgICAgICAjIEVsaW1pbmF0ZSBkZWFkIGNvZGU6IGp1bXBzIGltbWVkaWF0ZWx5IGFmdGVyIHJldHVybnMgY2FuJ3QgYmUgcmVhY2hlZAogICAgICAgICBkZWYgZihjb25kMSwgY29uZDIpOgogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICBpZiBjb25kMTogcmV0dXJuIDQKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfRk9SV0FSRCcpCiAgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG9uZSBqdW1wIGZvciB0aGUgd2hpbGUgbG9vcC4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnSlVNUF9BQlNPTFVURScpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdKVU1QX0FCU09MVVRFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDEpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDIpCiAKICAgICBkZWYgdGVzdF9tYWtlX2Z1bmN0aW9uX2RvZXNudF9iYWlsKHNlbGYpOgogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgZGVmIGcoKS0+MSsxOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJldHVybiBnCi0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV9BREQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnQklOQVJZX0FERCcpCiAKICAgICBkZWYgdGVzdF9jb25zdGFudF9mb2xkaW5nKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMTI0NDogYWdncmVzc2l2ZSBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICBleHBycyA9IFsKLSAgICAgICAgICAgICIzICogLTUiLAotICAgICAgICAgICAgIi0zICogNSIsCi0gICAgICAgICAgICAiMiAqICgzICogNCkiLAotICAgICAgICAgICAgIigyICogMykgKiA0IiwKLSAgICAgICAgICAgICIoLTEsIDIsIDMpIiwKLSAgICAgICAgICAgICIoMSwgLTIsIDMpIiwKLSAgICAgICAgICAgICIoMSwgMiwgLTMpIiwKLSAgICAgICAgICAgICIoMSwgMiwgLTMpICogNiIsCi0gICAgICAgICAgICAibGFtYmRhIHg6IHggaW4geygzICogLTUpICsgKC0xIC0gNiksICgxLCAtMiwgMykgKiAyLCBOb25lfSIsCisgICAgICAgICAgICAnMyAqIC01JywKKyAgICAgICAgICAgICctMyAqIDUnLAorICAgICAgICAgICAgJzIgKiAoMyAqIDQpJywKKyAgICAgICAgICAgICcoMiAqIDMpICogNCcsCisgICAgICAgICAgICAnKC0xLCAyLCAzKScsCisgICAgICAgICAgICAnKDEsIC0yLCAzKScsCisgICAgICAgICAgICAnKDEsIDIsIC0zKScsCisgICAgICAgICAgICAnKDEsIDIsIC0zKSAqIDYnLAorICAgICAgICAgICAgJ2xhbWJkYSB4OiB4IGluIHsoMyAqIC01KSArICgtMSAtIDYpLCAoMSwgLTIsIDMpICogMiwgTm9uZX0nLAogICAgICAgICBdCiAgICAgICAgIGZvciBlIGluIGV4cHJzOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5BUllfJywgYXNtLCBlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZXycsIGFzbSwgZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEXycsIGFzbSwgZSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdVTkFSWV8nKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdCSU5BUllfJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnQlVJTERfJykpCisKIAogY2xhc3MgVGVzdEJ1Z2xldHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zNDMsNyArMzI2LDcgQEAKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogCiAgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6CiAgICAgICAgIGltcG9ydCBnYwogICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CiAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKaW5kZXggN2YxMDQ3Mi4uYjg1YTI2YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKQEAgLTE1LDEyICsxNSwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUobW9kdWxlLmRpZ2VzdF9zaXplIGlzIE5vbmUgb3IgbW9kdWxlLmRpZ2VzdF9zaXplID4gMCkKICAgICAgICAgc2VsZi5jaGVja19vYmplY3QobW9kdWxlLm5ldywgbW9kdWxlLmRpZ2VzdF9zaXplLCBrZXkpCiAKLSAgICBkZWYgY2hlY2tfb2JqZWN0KHNlbGYsIGNscywgZGlnZXN0X3NpemUsIGtleSk6CisgICAgZGVmIGNoZWNrX29iamVjdChzZWxmLCBjbHMsIGRpZ2VzdF9zaXplLCBrZXksIGRpZ2VzdG1vZD1Ob25lKToKICAgICAgICAgaWYga2V5IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgb2JqMSA9IGNscyhrZXkpCi0gICAgICAgICAgICBvYmoyID0gY2xzKGtleSwgYidzdHJpbmcnKQotICAgICAgICAgICAgaDEgPSBjbHMoa2V5LCBiJ3N0cmluZycpLmRpZ2VzdCgpCi0gICAgICAgICAgICBvYmozID0gY2xzKGtleSkKKyAgICAgICAgICAgIGlmIGRpZ2VzdG1vZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRpZ2VzdG1vZCA9IG1kNQorICAgICAgICAgICAgb2JqMSA9IGNscyhrZXksIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpCisgICAgICAgICAgICBvYmoyID0gY2xzKGtleSwgYidzdHJpbmcnLCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKQorICAgICAgICAgICAgaDEgPSBjbHMoa2V5LCBiJ3N0cmluZycsIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpLmRpZ2VzdCgpCisgICAgICAgICAgICBvYmozID0gY2xzKGtleSwgZGlnZXN0bW9kPWRpZ2VzdG1vZCkKICAgICAgICAgICAgIG9iajMudXBkYXRlKGInc3RyaW5nJykKICAgICAgICAgICAgIGgyID0gb2JqMy5kaWdlc3QoKQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0YWUzODYuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0KLQotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLQotY2xhc3MgUEVQMjYzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAi8MnUz84iLmVuY29kZSgidXRmLTgiKSwKLSAgICAgICAgICAgIGInXHhkMFx4OWZceGQwXHhiOFx4ZDFceDgyXHhkMFx4YmVceGQwXHhiZCcKLSAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgIlzwIi5lbmNvZGUoInV0Zi04IiksCi0gICAgICAgICAgICBiJ1xcXHhkMFx4OWYnCi0gICAgICAgICkKLQotICAgIGRlZiB0ZXN0X2NvbXBpbGVzdHJpbmcoc2VsZik6Ci0gICAgICAgICMgc2VlICMxODgyCi0gICAgICAgIGMgPSBjb21waWxlKGIiXG4jIGNvZGluZzogdXRmLThcbnUgPSAnXHhjM1x4YjMnXG4iLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGMsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndSddLCAnXHhmMycpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTIzMDEoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbXBpbGUoYiIjIGNvZGluZzogY3A5MzJcbnByaW50ICdceDk0XHg0ZSciLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyB2OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRleHQsICJwcmludCAnXHU1ZTc0J1xuIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTQ2MjYoc2VsZik6Ci0gICAgICAgIGMgPSBjb21waWxlKCIjIGNvZGluZz1sYXRpbi0xXG5cdTAwYzYgPSAnXHUwMGM2JyIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydceGM2J10sICdceGM2JykKLQotICAgIGRlZiB0ZXN0X2lzc3VlMzI5NyhzZWxmKToKLSAgICAgICAgYyA9IGNvbXBpbGUoImEsIGIgPSAnXFUwMDAxMDEwRicsICdcXFUwMDAxMDEwRiciLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGMsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCBkWydiJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRbJ2EnXSksIGxlbihkWydiJ10pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKGRbJ2EnXSksIGFzY2lpKGRbJ2InXSkpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTc4MjAoc2VsZik6Ci0gICAgICAgICMgRW5zdXJlIHRoYXQgY2hlY2tfYm9tKCkgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlciBpZgotICAgICAgICAjIGNoZWNrX2JvbSgpIGZhaWxzIGluIHB5ZGVidWcgbW9kZTogYSBidWZmZXIgc3RhcnRzIHdpdGggdGhlIGZpcnN0Ci0gICAgICAgICMgYnl0ZSBvZiBhIHZhbGlkIEJPTSwgYnV0IG5leHQgYnl0ZXMgYXJlIGRpZmZlcmVudAotCi0gICAgICAgICMgb25lIGJ5dGUgaW4gY29tbW9uIHdpdGggdGhlIFVURi0xNi1MRSBCT00KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGInXHhmZlx4MjAnKQotCi0gICAgICAgICMgdHdvIGJ5dGVzIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtOCBCT00KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGInXHhlZlx4YmJceDIwJykKLQotICAgIGRlZiB0ZXN0X2Vycm9yX21lc3NhZ2Uoc2VsZik6Ci0gICAgICAgIGNvbXBpbGUoYicjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdpc28tODg1OS0xNScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLAotICAgICAgICAgICAgICAgICAgICAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ0JPTScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLAotICAgICAgICAgICAgICAgICAgICAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2Zha2UnKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ0JPTScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUEVQMjYzVGVzdCkKLQotaWYgX19uYW1lX189PSJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkKaW5kZXggNGIxNmNiYi4uNmM4MzNhOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkKQEAgLTU2LDE3ICs1Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmljb2RlLWZyaWVuZGx5IGZpbGVzeXN0ZW0gZW5jb2RpbmciKQogCiAKLSMgRGVzdHJveSBkaXJlY3RvcnkgZGlybmFtZSBhbmQgYWxsIGZpbGVzIHVuZGVyIGl0LCB0byBvbmUgbGV2ZWwuCi1kZWYgZGVsdHJlZShkaXJuYW1lKToKLSAgICAjIERvbid0IGhpZGUgbGVnaXRpbWF0ZSBlcnJvcnM6ICBpZiBvbmUgb2YgdGhlc2Ugc3Vja2VycyBleGlzdHMsIGl0J3MKLSAgICAjIGFuIGVycm9yIGlmIHdlIGNhbid0IHJlbW92ZSBpdC4KLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhkaXJuYW1lKToKLSAgICAgICAgIyBtdXN0IHBhc3MgdW5pY29kZSB0byBvcy5saXN0ZGlyKCkgc28gd2UgZ2V0IGJhY2sgdW5pY29kZSByZXN1bHRzLgotICAgICAgICBmb3IgZm5hbWUgaW4gb3MubGlzdGRpcihzdHIoZGlybmFtZSkpOgotICAgICAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbihkaXJuYW1lLCBmbmFtZSkpCi0gICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCi0KLQogY2xhc3MgVW5pY29kZUZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZmlsZXMgPSBzZXQoZmlsZW5hbWVzKQogICAgIG5vcm1hbF9mb3JtID0gTm9uZQpAQCAtNzYsNiArNjUsOCBAQAogICAgICAgICAgICAgb3MubWtkaXIoc3VwcG9ydC5URVNURk4pCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnJtdHJlZSwgc3VwcG9ydC5URVNURk4pCisKICAgICAgICAgZmlsZXMgPSBzZXQoKQogICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmZpbGVzOgogICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5ub3JtKG5hbWUpKQpAQCAtODUsOSArNzYsNiBAQAogICAgICAgICAgICAgZmlsZXMuYWRkKG5hbWUpCiAgICAgICAgIHNlbGYuZmlsZXMgPSBmaWxlcwogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBkZWx0cmVlKHN1cHBvcnQuVEVTVEZOKQotCiAgICAgZGVmIG5vcm0oc2VsZiwgcyk6CiAgICAgICAgIGlmIHNlbGYubm9ybWFsX2Zvcm06CiAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKHNlbGYubm9ybWFsX2Zvcm0sIHMpCkBAIC05OSwxMCArODcsNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkX2V4Y2VwdGlvbikgYXMgYzoKICAgICAgICAgICAgIGZuKGZpbGVuYW1lKQogICAgICAgICBleGNfZmlsZW5hbWUgPSBjLmV4Y2VwdGlvbi5maWxlbmFtZQotICAgICAgICAjIGxpc3RkaXIgbWF5IGFwcGVuZCBhIHdpbGRjYXJkIHRvIHRoZSBmaWxlbmFtZQotICAgICAgICBpZiBmbiBpcyBvcy5saXN0ZGlyIGFuZCBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIGV4Y19maWxlbmFtZSwgXywgd2lsZGNhcmQgPSBleGNfZmlsZW5hbWUucnBhcnRpdGlvbihvcy5zZXApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbGRjYXJkLCAnKi4qJykKICAgICAgICAgaWYgY2hlY2tfZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y19maWxlbmFtZSwgZmlsZW5hbWUsICJGdW5jdGlvbiAnJXMoJWEpIGZhaWxlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGJhZCBmaWxlbmFtZSBpbiB0aGUgZXhjZXB0aW9uOiAlYSIgJQpAQCAtMjA0LDE2ICsxODgsMTMgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdHJ5OgotICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgIFVuaWNvZGVGaWxlVGVzdHMsCi0gICAgICAgICAgICBVbmljb2RlTkZDRmlsZVRlc3RzLAotICAgICAgICAgICAgVW5pY29kZU5GREZpbGVUZXN0cywKLSAgICAgICAgICAgIFVuaWNvZGVORktDRmlsZVRlc3RzLAotICAgICAgICAgICAgVW5pY29kZU5GS0RGaWxlVGVzdHMsCi0gICAgICAgICkKLSAgICBmaW5hbGx5OgotICAgICAgICBkZWx0cmVlKHN1cHBvcnQuVEVTVEZOKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBVbmljb2RlRmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZDRmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZERmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZLQ0ZpbGVUZXN0cywKKyAgICAgICAgVW5pY29kZU5GS0RGaWxlVGVzdHMsCisgICAgKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkKaW5kZXggMjc5MmMxMC4uN2Q0YTVkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzMTUxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMzE1MS5weQpAQCAtMTU3LDggKzE1Nyw2IEBACiAgICAgICAgIGUuY2hhcmFjdGVyc193cml0dGVuID0gNQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuY2hhcmFjdGVyc193cml0dGVuLCA1KQogCi0gICAgIyBYWFggVk1TRXJyb3Igbm90IHRlc3RlZAotCiAKIGNsYXNzIEV4cGxpY2l0U3ViY2xhc3NpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQppbmRleCA1NThjZGI1Li43Yzk4YzQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCBvcwogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgc3lzdGVtIGFzIHBsYXRmb3JtX3N5c3RlbQogCkBAIC0xODAsOCArMTc5LDYgQEAKICAgICAgICAgIyBDYXRjaGluZyBhIHN0cmluZyBpcyBiYWQuCiAgICAgICAgIHNlbGYuY2F0Y2hfZmFpbHMoInNwYW0iKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvbkNsYXNzVGVzdHMsIFVzYWdlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzgwLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKaW5kZXggNGE0M2I3ZC4uNjkxOTRkZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKQEAgLTk5Myw2ICs5OTMsMjUgQEAKICAgICAgICAgICAgIGRlbCBpbm5lcl9nZW4KICAgICAgICAgICAgIGdjX2NvbGxlY3QoKQogCisgICAgZGVmIHRlc3Rfc2VuZF90dXBsZV93aXRoX2N1c3RvbV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICMyMTIwOS4KKyAgICAgICAgY2xhc3MgTXlHZW46CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIHdoYXQpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHYKKyAgICAgICAgICAgICAgICB2ID0gd2hhdAorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgdiA9IHlpZWxkIGZyb20gTXlHZW4oKQorICAgICAgICBnID0gb3V0ZXIoKQorICAgICAgICBuZXh0KGcpCisgICAgICAgIHYgPSBOb25lCisgICAgICAgIGcuc2VuZCgoMSwgMiwgMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgKDEsIDIsIDMsIDQpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5IGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKaW5kZXggZmJlOTZhYy4uMGIyZmUxZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKQEAgLTgzLDEzICs4MywxNyBAQAogCiAKIGNsYXNzIFB5RGlzcGF0Y2hUYWJsZVRlc3RzKEFic3RyYWN0RGlzcGF0Y2hUYWJsZVRlc3RzKToKKwogICAgIHBpY2tsZXJfY2xhc3MgPSBwaWNrbGUuX1BpY2tsZXIKKwogICAgIGRlZiBnZXRfZGlzcGF0Y2hfdGFibGUoc2VsZik6CiAgICAgICAgIHJldHVybiBwaWNrbGUuZGlzcGF0Y2hfdGFibGUuY29weSgpCiAKIAogY2xhc3MgUHlDaGFpbkRpc3BhdGNoVGFibGVUZXN0cyhBYnN0cmFjdERpc3BhdGNoVGFibGVUZXN0cyk6CisKICAgICBwaWNrbGVyX2NsYXNzID0gcGlja2xlLl9QaWNrbGVyCisKICAgICBkZWYgZ2V0X2Rpc3BhdGNoX3RhYmxlKHNlbGYpOgogICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuQ2hhaW5NYXAoe30sIHBpY2tsZS5kaXNwYXRjaF90YWJsZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2cucHkgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQppbmRleCAzNTVlZmU3Li45ODgzMDAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BrZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQpAQCAtMTk5LDE0ICsxOTksMTQgQEAKICAgICAgICAgaW1wb3J0IHQ1CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnZm9vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsICd0NSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vJywgJ3N0cmluZycsICd0NSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuZm9vKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdzdHJpbmcnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fc3BlY19fJywgJ3N0cmluZyddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuc3RyaW5nKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3NwZWNfXycsICdzcGFtJ10pCiAKICAgICBkZWYgdGVzdF82KHNlbGYpOgogICAgICAgICBoaWVyID0gWwpAQCAtMjIyLDE0ICsyMjIsMTUgQEAKICAgICAgICAgaW1wb3J0IHQ2CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3NwZWNfXyddKQogICAgICAgICBzID0gIiIiCiAgICAgICAgICAgICBpbXBvcnQgdDYKICAgICAgICAgICAgIGZyb20gdDYgaW1wb3J0ICoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fYWxsX18nLCAnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXycsICdlZ2dzJywgJ2hhbScsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nLCAnX19zcGVjX18nLCAnZWdncycsICdoYW0nLCAnc3BhbSddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoKSwgWydlZ2dzJywgJ2hhbScsICdzZWxmJywgJ3NwYW0nLCAndDYnXSkKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLnJ1bl9jb2RlKHMpCkBAIC0yNTYsMTggKzI1NywxOSBAQAogICAgICAgICBpbXBvcnQgdDcgYXMgdGFzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0YXMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXyddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBmcm9tIHQ3IGltcG9ydCBzdWIgYXMgc3VicGFyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJwYXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXyddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgZnJvbSB0Ny5zdWIgaW1wb3J0IHN1YnN1YiBhcyBzdWJzdWJzdWIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnN1YnN1YikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnc3BhbSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbSddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWJzdWIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CmluZGV4IGE4NDI2YjUuLjM3MGIyYWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBpbXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUKIAogY2xhc3MgVGVzdEltcG9ydCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKaW5kZXggZmQwNjYxNC4uZTBjODYzNWRlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CkBAIC0xLDEyICsxLDEzIEBACi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCB1bmxvYWQsIGNoZWNrX3dhcm5pbmdzCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCB1bmxvYWQsIGNoZWNrX3dhcm5pbmdzLCBDbGVhbkltcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbgogaW1wb3J0IHBrZ3V0aWwKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgemlwZmlsZQogCkBAIC0xMDMsMjMgKzEwNCwyMCBAQAogY2xhc3MgUGtndXRpbFBFUDMwMlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGNsYXNzIE15VGVzdExvYWRlcihvYmplY3QpOgotICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgIyBDcmVhdGUgYW4gZW1wdHkgbW9kdWxlCi0gICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCBpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCi0gICAgICAgICAgICBtb2QuX19maWxlX18gPSAiPCVzPiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwotICAgICAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgICAgICAjIE1ha2UgaXQgYSBwYWNrYWdlCi0gICAgICAgICAgICBtb2QuX19wYXRoX18gPSBbXQorICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kKToKICAgICAgICAgICAgICMgQ291bnQgaG93IG1hbnkgdGltZXMgdGhlIG1vZHVsZSBpcyByZWxvYWRlZAotICAgICAgICAgICAgbW9kLl9fZGljdF9fWydsb2FkcyddID0gbW9kLl9fZGljdF9fLmdldCgnbG9hZHMnLDApICsgMQotICAgICAgICAgICAgcmV0dXJuIG1vZAorICAgICAgICAgICAgbW9kLl9fZGljdF9fWydsb2FkcyddID0gbW9kLl9fZGljdF9fLmdldCgnbG9hZHMnLCAwKSArIDEKIAogICAgICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CiAgICAgICAgICAgICByZXR1cm4gIkhlbGxvLCB3b3JsZCEiCiAKICAgICBjbGFzcyBNeVRlc3RJbXBvcnRlcihvYmplY3QpOgotICAgICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICAgICByZXR1cm4gUGtndXRpbFBFUDMwMlRlc3RzLk15VGVzdExvYWRlcigpCisgICAgICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAgICAgbG9hZGVyID0gUGtndXRpbFBFUDMwMlRlc3RzLk15VGVzdExvYWRlcigpCisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwlcz4nICUgbG9hZGVyLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9bG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVtdKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzeXMubWV0YV9wYXRoLmluc2VydCgwLCBzZWxmLk15VGVzdEltcG9ydGVyKCkpCkBAIC0yMDAsNiArMTk4LDggQEAKICAgICAgICAgZGlybmFtZSA9IHNlbGYuY3JlYXRlX2luaXQocGtnbmFtZSkKICAgICAgICAgcGF0aGl0ZW0gPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgcGtnbmFtZSkKICAgICAgICAgZnVsbG5hbWUgPSAne30ue30nLmZvcm1hdChwa2duYW1lLCBtb2RuYW1lKQorICAgICAgICBzeXMubW9kdWxlcy5wb3AoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChwa2duYW1lLCBOb25lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zdWJtb2R1bGUoZGlybmFtZSwgcGtnbmFtZSwgbW9kbmFtZSwgMCkKIApAQCAtMjA4LDExICsyMDgsMTkgQEAKICAgICAgICAgICAgIGltcG9ydGVycyA9IGxpc3QoaXRlcl9pbXBvcnRlcnMoZnVsbG5hbWUpKQogICAgICAgICAgICAgZXhwZWN0ZWRfaW1wb3J0ZXIgPSBnZXRfaW1wb3J0ZXIocGF0aGl0ZW0pCiAgICAgICAgICAgICBmb3IgZmluZGVyIGluIGltcG9ydGVyczoKKyAgICAgICAgICAgICAgICBzcGVjID0gcGtndXRpbC5fZ2V0X3NwZWMoZmluZGVyLCBmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyLmxvYWRlcgorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBGb3Igbm93IHdlIHN0aWxsIGFsbG93IHJhdyBsb2FkZXJzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgIyBmaW5kX21vZHVsZSgpLgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpbmRlciwgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGVyLCBleHBlY3RlZF9pbXBvcnRlcikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmluZGVyLmZpbmRfbW9kdWxlKHBrZ25hbWUpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBrZ3V0aWwuX2dldF9zcGVjKGZpbmRlciwgcGtnbmFtZSkpCiAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgICAgIGxpc3QoaXRlcl9pbXBvcnRlcnMoJ2ludmFsaWQubW9kdWxlJykpCkBAIC0yMjIsOCArMjMwLDExIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpcm5hbWUpCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbSddCi0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0uZWdncyddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydzcGFtJ10KKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0uZWdncyddCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogCiAKICAgICBkZWYgdGVzdF9taXhlZF9uYW1lc3BhY2Uoc2VsZik6CkBAIC0zMjMsNiArMzM0LDU2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwa2d1dGlsLmdldF9sb2FkZXIoInRlc3Quc3VwcG9ydCIpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDApCiAKKyAgICBkZWYgdGVzdF9nZXRfbG9hZGVyX2hhbmRsZXNfbWlzc2luZ19sb2FkZXJfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBnbG9iYWwgX19sb2FkZXJfXworICAgICAgICB0aGlzX2xvYWRlciA9IF9fbG9hZGVyX18KKyAgICAgICAgZGVsIF9fbG9hZGVyX18KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocGtndXRpbC5nZXRfbG9hZGVyKF9fbmFtZV9fKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9fbG9hZGVyX18gPSB0aGlzX2xvYWRlcgorCisgICAgZGVmIHRlc3RfZ2V0X2xvYWRlcl9oYW5kbGVzX21pc3Npbmdfc3BlY19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgbW9kID0gdHlwZShzeXMpKG5hbWUpCisgICAgICAgIGRlbCBtb2QuX19zcGVjX18KKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChuYW1lKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kCisgICAgICAgICAgICBsb2FkZXIgPSBwa2d1dGlsLmdldF9sb2FkZXIobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQorCisgICAgZGVmIHRlc3RfZ2V0X2xvYWRlcl9oYW5kbGVzX3NwZWNfYXR0cmlidXRlX25vbmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgbW9kID0gdHlwZShzeXMpKG5hbWUpCisgICAgICAgIG1vZC5fX3NwZWNfXyA9IE5vbmUKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChuYW1lKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kCisgICAgICAgICAgICBsb2FkZXIgPSBwa2d1dGlsLmdldF9sb2FkZXIobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQorCisgICAgZGVmIHRlc3RfZ2V0X2xvYWRlcl9Ob25lX2luX3N5c19tb2R1bGVzKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3RvdGFsbHkgYm9ndXMnCisgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIgPSBwa2d1dGlsLmdldF9sb2FkZXIobmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCisKKyAgICBkZWYgdGVzdF9maW5kX2xvYWRlcl9taXNzaW5nX21vZHVsZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICd0b3RhbGx5IGJvZ3VzJworICAgICAgICBsb2FkZXIgPSBwa2d1dGlsLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKKworICAgIGRlZiB0ZXN0X2ZpbmRfbG9hZGVyX2F2b2lkc19lbXVsYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocGtndXRpbC5maW5kX2xvYWRlcigic3lzIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwa2d1dGlsLmZpbmRfbG9hZGVyKCJvcyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocGtndXRpbC5maW5kX2xvYWRlcigidGVzdC5zdXBwb3J0IikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMCkKKwogICAgIGRlZiB0ZXN0X2dldF9pbXBvcnRlcl9hdm9pZHNfZW11bGF0aW9uKHNlbGYpOgogICAgICAgICAjIFdlIHVzZSBhbiBpbGxlZ2FsIHBhdGggc28gKm5vbmUqIG9mIHRoZSBwYXRoIGhvb2tzIHNob3VsZCBmaXJlCiAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKaW5kZXggOWU4NmIzZC4uZmVmOWYzOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CkBAIC0xLDk0ICsxLDk1IEBACi0jIENvcHlyaWdodCAoQykgMjAwMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgogCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBwbGlzdGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgc3RydWN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8KIAorQUxMX0ZPUk1BVFM9KHBsaXN0bGliLkZNVF9YTUwsIHBsaXN0bGliLkZNVF9CSU5BUlkpCiAKLSMgVGhpcyB0ZXN0IGRhdGEgd2FzIGdlbmVyYXRlZCB0aHJvdWdoIENvY29hJ3MgTlNEaWN0aW9uYXJ5IGNsYXNzCi1URVNUREFUQSA9IGIiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiBcCi0iaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotICAgICAgICA8a2V5PmFEYXRlPC9rZXk+Ci0gICAgICAgIDxkYXRlPjIwMDQtMTAtMjZUMTA6MzM6MzNaPC9kYXRlPgotICAgICAgICA8a2V5PmFEaWN0PC9rZXk+Ci0gICAgICAgIDxkaWN0PgotICAgICAgICAgICAgICAgIDxrZXk+YUZhbHNlVmFsdWU8L2tleT4KLSAgICAgICAgICAgICAgICA8ZmFsc2UvPgotICAgICAgICAgICAgICAgIDxrZXk+YVRydWVWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDx0cnVlLz4KLSAgICAgICAgICAgICAgICA8a2V5PmFVbmljb2RlVmFsdWU8L2tleT4KLSAgICAgICAgICAgICAgICA8c3RyaW5nPk1ceGMzXHhhNHNzaWcsIE1hXHhjM1x4OWY8L3N0cmluZz4KLSAgICAgICAgICAgICAgICA8a2V5PmFub3RoZXJTdHJpbmc8L2tleT4KLSAgICAgICAgICAgICAgICA8c3RyaW5nPiZsdDtoZWxsbyAmYW1wOyAnaGknIHRoZXJlISZndDs8L3N0cmluZz4KLSAgICAgICAgICAgICAgICA8a2V5PmRlZXBlckRpY3Q8L2tleT4KLSAgICAgICAgICAgICAgICA8ZGljdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+YTwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MTc8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8a2V5PmI8L2tleT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxyZWFsPjMyLjU8L3JlYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8a2V5PmM8L2tleT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhcnJheT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MTwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MjwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz50ZXh0PC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2FycmF5PgotICAgICAgICAgICAgICAgIDwvZGljdD4KLSAgICAgICAgPC9kaWN0PgotICAgICAgICA8a2V5PmFGbG9hdDwva2V5PgotICAgICAgICA8cmVhbD4wLjU8L3JlYWw+Ci0gICAgICAgIDxrZXk+YUxpc3Q8L2tleT4KLSAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+QTwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxzdHJpbmc+Qjwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjEyPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgIDxyZWFsPjMyLjU8L3JlYWw+Ci0gICAgICAgICAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MTwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjI8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4zPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgIDwvYXJyYXk+Ci0gICAgICAgIDwvYXJyYXk+Ci0gICAgICAgIDxrZXk+YVN0cmluZzwva2V5PgotICAgICAgICA8c3RyaW5nPkRvb2RhaDwvc3RyaW5nPgotICAgICAgICA8a2V5PmFuRW1wdHlEaWN0PC9rZXk+Ci0gICAgICAgIDxkaWN0Lz4KLSAgICAgICAgPGtleT5hbkVtcHR5TGlzdDwva2V5PgotICAgICAgICA8YXJyYXkvPgotICAgICAgICA8a2V5PmFuSW50PC9rZXk+Ci0gICAgICAgIDxpbnRlZ2VyPjcyODwvaW50ZWdlcj4KLSAgICAgICAgPGtleT5uZXN0ZWREYXRhPC9rZXk+Ci0gICAgICAgIDxhcnJheT4KLSAgICAgICAgICAgICAgICA8ZGF0YT4KLSAgICAgICAgICAgICAgICBQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXIKLSAgICAgICAgICAgICAgICBQZ0FCQWdNOGJHOTBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjUKLSAgICAgICAgICAgICAgICBJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmkKLSAgICAgICAgICAgICAgICBhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnoKLSAgICAgICAgICAgICAgICBJRzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSUQKLSAgICAgICAgICAgICAgICBQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F3PT0KLSAgICAgICAgICAgICAgICA8L2RhdGE+Ci0gICAgICAgIDwvYXJyYXk+Ci0gICAgICAgIDxrZXk+c29tZURhdGE8L2tleT4KLSAgICAgICAgPGRhdGE+Ci0gICAgICAgIFBHSnBibUZ5ZVNCbmRXNXJQZz09Ci0gICAgICAgIDwvZGF0YT4KLSAgICAgICAgPGtleT5zb21lTW9yZURhdGE8L2tleT4KLSAgICAgICAgPGRhdGE+Ci0gICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ci0gICAgICAgIGJHOTBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzCi0gICAgICAgIGIzUnpJRzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2Ci0gICAgICAgIGRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwCi0gICAgICAgIGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F3PT0KLSAgICAgICAgPC9kYXRhPgotICAgICAgICA8a2V5Plx4YzNceDg1YmVucmFhPC9rZXk+Ci0gICAgICAgIDxzdHJpbmc+VGhhdCB3YXMgYSB1bmljb2RlIGtleS48L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+Ci0iIiIucmVwbGFjZShiIiAiICogOCwgYiJcdCIpICAjIEFwcGxlIGFzIHdlbGwgYXMgcGxpc3RsaWIucHkgb3V0cHV0IGhhcmQgdGFicworIyBUaGUgdGVzdGRhdGEgaXMgZ2VuZXJhdGVkIHVzaW5nIE1hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weQorIyAod2hpY2ggdXNpbmcgUHlPYmpDIHRvIGNvbnRyb2wgdGhlIENvY29hIGNsYXNzZXMgZm9yIGdlbmVyYXRpbmcgcGxpc3RzKQorVEVTVERBVEE9eworICAgIHBsaXN0bGliLkZNVF9YTUw6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJworICAgICAgICBQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpVlZSR0xUZ2lQejRLUENGRVQwTlUKKyAgICAgICAgV1ZCRklIQnNhWE4wSUZCVlFreEpReUFpTFM4dlFYQndiR1V2TDBSVVJDQlFURWxUVkNBeExqQXZMMFZPCisgICAgICAgIElpQWlhSFIwY0RvdkwzZDNkeTVoY0hCc1pTNWpiMjB2UkZSRWN5OVFjbTl3WlhKMGVVeHBjM1F0TVM0dworICAgICAgICBMbVIwWkNJK0NqeHdiR2x6ZENCMlpYSnphVzl1UFNJeExqQWlQZ284WkdsamRENEtDVHhyWlhrK1lVSnAKKyAgICAgICAgWjBsdWREd3ZhMlY1UGdvSlBHbHVkR1ZuWlhJK09USXlNek0zTWpBek5qZzFORGMzTlRjMk5Ed3ZhVzUwCisgICAgICAgIFpXZGxjajRLQ1R4clpYaytZVUpwWjBsdWRESThMMnRsZVQ0S0NUeHBiblJsWjJWeVBqa3lNak16TnpJdworICAgICAgICBNelk0TlRRM056VTROVEk4TDJsdWRHVm5aWEkrQ2drOGEyVjVQbUZFWVhSbFBDOXJaWGsrQ2drOFpHRjAKKyAgICAgICAgWlQ0eU1EQTBMVEV3TFRJMlZERXdPak16T2pNeldqd3ZaR0YwWlQ0S0NUeHJaWGsrWVVScFkzUThMMnRsCisgICAgICAgIGVUNEtDVHhrYVdOMFBnb0pDVHhyWlhrK1lVWmhiSE5sVm1Gc2RXVThMMnRsZVQ0S0NRazhabUZzYzJVdgorICAgICAgICBQZ29KQ1R4clpYaytZVlJ5ZFdWV1lXeDFaVHd2YTJWNVBnb0pDVHgwY25WbEx6NEtDUWs4YTJWNVBtRlYKKyAgICAgICAgYm1samIyUmxWbUZzZFdVOEwydGxlVDRLQ1FrOGMzUnlhVzVuUGszRHBITnphV2NzSUUxaHc1ODhMM04wCisgICAgICAgIGNtbHVaejRLQ1FrOGEyVjVQbUZ1YjNSb1pYSlRkSEpwYm1jOEwydGxlVDRLQ1FrOGMzUnlhVzVuUGlacworICAgICAgICBkRHRvWld4c2J5QW1ZVzF3T3lBbmFHa25JSFJvWlhKbElTWm5kRHM4TDNOMGNtbHVaejRLQ1FrOGEyVjUKKyAgICAgICAgUG1SbFpYQmxja1JwWTNROEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVoUEM5clpYaytDZ2tKCisgICAgICAgIENUeHBiblJsWjJWeVBqRTNQQzlwYm5SbFoyVnlQZ29KQ1FrOGEyVjVQbUk4TDJ0bGVUNEtDUWtKUEhKbAorICAgICAgICBZV3crTXpJdU5Ud3ZjbVZoYkQ0S0NRa0pQR3RsZVQ1alBDOXJaWGsrQ2drSkNUeGhjbkpoZVQ0S0NRa0oKKyAgICAgICAgQ1R4cGJuUmxaMlZ5UGpFOEwybHVkR1ZuWlhJK0Nna0pDUWs4YVc1MFpXZGxjajR5UEM5cGJuUmxaMlZ5CisgICAgICAgIFBnb0pDUWtKUEhOMGNtbHVaejUwWlhoMFBDOXpkSEpwYm1jK0Nna0pDVHd2WVhKeVlYaytDZ2tKUEM5aworICAgICAgICBhV04wUGdvSlBDOWthV04wUGdvSlBHdGxlVDVoUm14dllYUThMMnRsZVQ0S0NUeHlaV0ZzUGpBdU5Ud3YKKyAgICAgICAgY21WaGJENEtDVHhyWlhrK1lVeHBjM1E4TDJ0bGVUNEtDVHhoY25KaGVUNEtDUWs4YzNSeWFXNW5Qa0U4CisgICAgICAgIEwzTjBjbWx1Wno0S0NRazhjM1J5YVc1blBrSThMM04wY21sdVp6NEtDUWs4YVc1MFpXZGxjajR4TWp3dgorICAgICAgICBhVzUwWldkbGNqNEtDUWs4Y21WaGJENHpNaTQxUEM5eVpXRnNQZ29KQ1R4aGNuSmhlVDRLQ1FrSlBHbHUKKyAgICAgICAgZEdWblpYSStNVHd2YVc1MFpXZGxjajRLQ1FrSlBHbHVkR1ZuWlhJK01qd3ZhVzUwWldkbGNqNEtDUWtKCisgICAgICAgIFBHbHVkR1ZuWlhJK016d3ZhVzUwWldkbGNqNEtDUWs4TDJGeWNtRjVQZ29KUEM5aGNuSmhlVDRLQ1R4cgorICAgICAgICBaWGsrWVU1bFoyRjBhWFpsUW1sblNXNTBQQzlyWlhrK0NnazhhVzUwWldkbGNqNHRPREF3TURBd01EQXcKKyAgICAgICAgTURBOEwybHVkR1ZuWlhJK0NnazhhMlY1UG1GT1pXZGhkR2wyWlVsdWREd3ZhMlY1UGdvSlBHbHVkR1ZuCisgICAgICAgIFpYSStMVFU4TDJsdWRHVm5aWEkrQ2drOGEyVjVQbUZUZEhKcGJtYzhMMnRsZVQ0S0NUeHpkSEpwYm1jKworICAgICAgICBSRzl2WkdGb1BDOXpkSEpwYm1jK0NnazhhMlY1UG1GdVJXMXdkSGxFYVdOMFBDOXJaWGsrQ2drOFpHbGoKKyAgICAgICAgZEM4K0NnazhhMlY1UG1GdVJXMXdkSGxNYVhOMFBDOXJaWGsrQ2drOFlYSnlZWGt2UGdvSlBHdGxlVDVoCisgICAgICAgIGJrbHVkRHd2YTJWNVBnb0pQR2x1ZEdWblpYSStOekk0UEM5cGJuUmxaMlZ5UGdvSlBHdGxlVDV1WlhOMAorICAgICAgICBaV1JFWVhSaFBDOXJaWGsrQ2drOFlYSnlZWGsrQ2drSlBHUmhkR0UrQ2drSlVFZDRkbVJJVFdkaU1sbG4KKyAgICAgICAgV1cxc2RWbFlTalZKUjJReFltMXpLMEZCUlVOQmVuaHpZak5TZWtsSE9XMUpSMHB3WW0xR2VXVlRRbTVrCisgICAgICAgIFZ6VnlDZ2tKVUdkQlFrRm5UVGhpUnprd1kzbENkbHBwUW1saFZ6Vm9ZMjVyWjFvelZuVmhlalJCUVZGSgorICAgICAgICBSRkJIZUhaa1NFMW5ZakpaWjFsdGJIVlpXRW8xQ2drSlNVZGtNV0p0Y3l0QlFVVkRRWHA0YzJJelVucEoKKyAgICAgICAgUnpsdFNVZEtjR0p0Um5sbFUwSnVaRmMxY2xCblFVSkJaMDA0WWtjNU1HTjVRblphYVVKcENna0pZVmMxCisgICAgICAgIGFHTnVhMmRhTTFaMVlYbzBRVUZSU1VSUVIzaDJaRWhOWjJJeVdXZFpiV3gxV1ZoS05VbEhaREZpYlhNcgorICAgICAgICBRVUZGUTBGNmVITmlNMUo2Q2drSlNVYzViVWxIU25CaWJVWjVaVk5DYm1SWE5YSlFaMEZDUVdkTk9HSkgKKyAgICAgICAgT1RCamVVSjJXbWxDYVdGWE5XaGpibXRuV2pOV2RXRjZORUZCVVVsRUNna0pVRWQ0ZG1SSVRXZGlNbGxuCisgICAgICAgIFdXMXNkVmxZU2pWSlIyUXhZbTF6SzBGQlJVTkJkejA5Q2drSlBDOWtZWFJoUGdvSlBDOWhjbkpoZVQ0SworICAgICAgICBDVHhyWlhrK2MyOXRaVVJoZEdFOEwydGxlVDRLQ1R4a1lYUmhQZ29KVUVkS2NHSnRSbmxsVTBKdVpGYzEKKyAgICAgICAgY2xCblBUMEtDVHd2WkdGMFlUNEtDVHhyWlhrK2MyOXRaVTF2Y21WRVlYUmhQQzlyWlhrK0NnazhaR0YwCisgICAgICAgIFlUNEtDVkJIZUhaa1NFMW5ZakpaWjFsdGJIVlpXRW8xU1Vka01XSnRjeXRCUVVWRFFYcDRjMkl6VW5wSgorICAgICAgICBSemx0U1VkS2NHSnRSbmxsVTBKdVpGYzFjbEJuUVVKQlowMDRDZ2xpUnprd1kzbENkbHBwUW1saFZ6Vm8KKyAgICAgICAgWTI1cloxb3pWblZoZWpSQlFWRkpSRkJIZUhaa1NFMW5ZakpaWjFsdGJIVlpXRW8xU1Vka01XSnRjeXRCCisgICAgICAgIFFVVkRRWHA0Y3dvSllqTlNla2xIT1cxSlIwcHdZbTFHZVdWVFFtNWtWelZ5VUdkQlFrRm5UVGhpUnprdworICAgICAgICBZM2xDZGxwcFFtbGhWelZvWTI1cloxb3pWblZoZWpSQlFWRkpSRkJIZUhZS0NXUklUV2RpTWxsbldXMXMKKyAgICAgICAgZFZsWVNqVkpSMlF4WW0xekswRkJSVU5CZW5oellqTlNla2xIT1cxSlIwcHdZbTFHZVdWVFFtNWtWelZ5CisgICAgICAgIFVHZEJRa0ZuVFRoaVJ6a3dDZ2xqZVVKMldtbENhV0ZYTldoamJtdG5Xak5XZFdGNk5FRkJVVWxFVUVkNAorICAgICAgICBkbVJJVFdkaU1sbG5XVzFzZFZsWVNqVkpSMlF4WW0xekswRkJSVU5CZHowOUNnazhMMlJoZEdFK0NnazgKKyAgICAgICAgYTJWNVBzT0ZZbVZ1Y21GaFBDOXJaWGsrQ2drOGMzUnlhVzVuUGxSb1lYUWdkMkZ6SUdFZ2RXNXBZMjlrCisgICAgICAgIFpTQnJaWGt1UEM5emRISnBibWMrQ2p3dlpHbGpkRDRLUEM5d2JHbHpkRDRLJycnKSwKKyAgICBwbGlzdGxpYi5GTVRfQklOQVJZOiBiaW5hc2NpaS5hMmJfYmFzZTY0KGInJycKKyAgICAgICAgWW5Cc2FYTjBNRERmRUJBQkFnTUVCUVlIQ0FrS0N3d05EZzhRRVJJVEZDZ3BMekF4TWpNME5UYzJPRmRoCisgICAgICAgIFFtbG5TVzUwV0dGQ2FXZEpiblF5VldGRVlYUmxWV0ZFYVdOMFZtRkdiRzloZEZWaFRHbHpkRjhRRDJGTworICAgICAgICBaV2RoZEdsMlpVSnBaMGx1ZEZ4aFRtVm5ZWFJwZG1WSmJuUlhZVk4wY21sdVoxdGhia1Z0Y0hSNVJHbGoKKyAgICAgICAgZEZ0aGJrVnRjSFI1VEdsemRGVmhia2x1ZEZwdVpYTjBaV1JFWVhSaFdITnZiV1ZFWVhSaFhITnZiV1ZOCisgICAgICAgIGIzSmxSR0YwWVdjQXhRQmlBR1VBYmdCeUFHRUFZUk4vLy8vLy8vLy8xQlFBQUFBQUFBQUFBSUFBQUFBQQorICAgICAgICBBQUFzTTBHY3VYMzBBQUFBMVJVV0Z4Z1pHaHNjSFI1YllVWmhiSE5sVm1Gc2RXVmFZVlJ5ZFdWV1lXeDEKKyAgICAgICAgWlYxaFZXNXBZMjlrWlZaaGJIVmxYV0Z1YjNSb1pYSlRkSEpwYm1kYVpHVmxjR1Z5UkdsamRBZ0phd0JOCisgICAgICAgIEFPUUFjd0J6QUdrQVp3QXNBQ0FBVFFCaEFOOWZFQlU4YUdWc2JHOGdKaUFuYUdrbklIUm9aWEpsSVQ3VAorICAgICAgICBIeUFoSWlNa1VXRlJZbEZqRUJFalFFQkFBQUFBQUFDakpTWW5FQUVRQWxSMFpYaDBJei9nQUFBQUFBQUEKKyAgICAgICAgcFNvckxDTXRVVUZSUWhBTW95VW1MaEFERS8vLy8rMWZvT0FBRS8vLy8vLy8vLy83VmtSdmIyUmhhTkNnCisgICAgICAgIEVRTFlvVFpQRVBvOGJHOTBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdQorICAgICAgICBZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MGN5QnYKKyAgICAgICAgWmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzCisgICAgICAgIGIzUnpJRzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QQorICAgICAgICBBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm4KKyAgICAgICAgZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURUVHhpYVc1aGNua2daM1Z1CisgICAgICAgIGF6NWZFQmRVYUdGMElIZGhjeUJoSUhWdWFXTnZaR1VnYTJWNUxnQUlBQ3NBTXdBOEFFSUFTQUJQQUZVQQorICAgICAgICBad0IwQUh3QWlBQ1VBSm9BcFFDdUFMc0F5Z0RUQU9RQTdRRDRBUVFCRHdFZEFTc0JOZ0UzQVRnQlR3Rm4KKyAgICAgICAgQVc0QmNBRnlBWFFCZGdGL0FZTUJoUUdIQVl3QmxRR2JBWjBCbndHaEFhVUJwd0d3QWJrQndBSEJBY0lCCisgICAgICAgIHhRSEhBc1FDMGdBQUFBQUFBQUlCQUFBQUFBQUFBRGtBQUFBQUFBQUFBQUFBQUFBQUFBTHMnJycpLAorfQogCiAKIGNsYXNzIFRlc3RQbGlzdGxpYih1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC05OSwxMiArMTAwLDE2IEBACiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgIGRlZiBfY3JlYXRlKHNlbGYsIGZtdD1Ob25lKToKICAgICAgICAgcGwgPSBkaWN0KAogICAgICAgICAgICAgYVN0cmluZz0iRG9vZGFoIiwKICAgICAgICAgICAgIGFMaXN0PVsiQSIsICJCIiwgMTIsIDMyLjUsIFsxLCAyLCAzXV0sCiAgICAgICAgICAgICBhRmxvYXQgPSAwLjUsCiAgICAgICAgICAgICBhbkludCA9IDcyOCwKKyAgICAgICAgICAgIGFCaWdJbnQgPSAyICoqIDYzIC0gNDQsCisgICAgICAgICAgICBhQmlnSW50MiA9IDIgKiogNjMgKyA0NCwKKyAgICAgICAgICAgIGFOZWdhdGl2ZUludCA9IC01LAorICAgICAgICAgICAgYU5lZ2F0aXZlQmlnSW50ID0gLTgwMDAwMDAwMDAwLAogICAgICAgICAgICAgYURpY3Q9ZGljdCgKICAgICAgICAgICAgICAgICBhbm90aGVyU3RyaW5nPSI8aGVsbG8gJiAnaGknIHRoZXJlIT4iLAogICAgICAgICAgICAgICAgIGFVbmljb2RlVmFsdWU9J01ceGU0c3NpZywgTWFceGRmJywKQEAgLTExMiw5ICsxMTcsOSBAQAogICAgICAgICAgICAgICAgIGFGYWxzZVZhbHVlPUZhbHNlLAogICAgICAgICAgICAgICAgIGRlZXBlckRpY3Q9ZGljdChhPTE3LCBiPTMyLjUsIGM9WzEsIDIsICJ0ZXh0Il0pLAogICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIHNvbWVEYXRhID0gcGxpc3RsaWIuRGF0YShiIjxiaW5hcnkgZ3Vuaz4iKSwKLSAgICAgICAgICAgIHNvbWVNb3JlRGF0YSA9IHBsaXN0bGliLkRhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz5cMFwxXDJcMyIgKiAxMCksCi0gICAgICAgICAgICBuZXN0ZWREYXRhID0gW3BsaXN0bGliLkRhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz5cMFwxXDJcMyIgKiAxMCldLAorICAgICAgICAgICAgc29tZURhdGEgPSBiIjxiaW5hcnkgZ3Vuaz4iLAorICAgICAgICAgICAgc29tZU1vcmVEYXRhID0gYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz5cMFwxXDJcMyIgKiAxMCwKKyAgICAgICAgICAgIG5lc3RlZERhdGEgPSBbYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz5cMFwxXDJcMyIgKiAxMF0sCiAgICAgICAgICAgICBhRGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDQsIDEwLCAyNiwgMTAsIDMzLCAzMyksCiAgICAgICAgICAgICBhbkVtcHR5RGljdCA9IGRpY3QoKSwKICAgICAgICAgICAgIGFuRW1wdHlMaXN0ID0gbGlzdCgpCkBAIC0xMjksNDkgKzEzNCwyMjAgQEAKIAogICAgIGRlZiB0ZXN0X2lvKHNlbGYpOgogICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCi0gICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGwsIHN1cHBvcnQuVEVTVEZOKQotICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3Qoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBwbGlzdGxpYi5kdW1wKHBsLCBmcCkKKworICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpIGFzIGZwOgorICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZChmcCkKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHBsaXN0bGliLmR1bXAsIHBsLCAnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgcGxpc3RsaWIubG9hZCwgJ2ZpbGVuYW1lJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfdHlwZShzZWxmKToKKyAgICAgICAgcGwgPSBbIG9iamVjdCgpIF0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwbGlzdGxpYi5kdW1wcywgcGwsIGZtdD1mbXQpCisKKyAgICBkZWYgdGVzdF9pbnQoc2VsZik6CisgICAgICAgIGZvciBwbCBpbiBbMCwgMioqOC0xLCAyKio4LCAyKioxNi0xLCAyKioxNiwgMioqMzItMSwgMioqMzIsCisgICAgICAgICAgICAgICAgICAgMioqNjMtMSwgMioqNjQtMSwgMSwgLTIqKjYzXToKKyAgICAgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocGw9cGwsIGZtdD1mbXQpOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwbDIsIGludCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbCwgcGwyKQorICAgICAgICAgICAgICAgICAgICBkYXRhMiA9IHBsaXN0bGliLmR1bXBzKHBsMiwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkYXRhMikKKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgZm9yIHBsIGluICgyICoqIDY0ICsgMSwgMiAqKiAxMjctMSwgLTIqKjY0LCAtMiAqKiAxMjcpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBsPXBsLCBmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcGxpc3RsaWIuZHVtcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsLCBmbXQ9Zm10KQorCiAgICAgZGVmIHRlc3RfYnl0ZXMoc2VsZik6CiAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgZGF0YSA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsKQotICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSkKKyAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsKQorICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UocGwsIHBsaXN0bGliLl9JbnRlcm5hbERpY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKLSAgICAgICAgZGF0YTIgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbDIpCisgICAgICAgIGRhdGEyID0gcGxpc3RsaWIuZHVtcHMocGwyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyKQogCiAgICAgZGVmIHRlc3RfaW5kZW50YXRpb25fYXJyYXkoc2VsZik6Ci0gICAgICAgIGRhdGEgPSBbW1tbW1tbW3sndGVzdCc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX1dXV1dXV1dXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhkYXRhKSksIGRhdGEpCisgICAgICAgIGRhdGEgPSBbW1tbW1tbW3sndGVzdCc6IGInYWFhYWFhJ31dXV1dXV1dXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKGRhdGEpKSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX2RpY3Qoc2VsZik6Ci0gICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiB7JzMnOiB7JzQnOiB7JzUnOiB7JzYnOiB7JzcnOiB7JzgnOiB7JzknOiBwbGlzdGxpYi5EYXRhKGInYWFhYWFhJyl9fX19fX19fX0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMoZGF0YSkpLCBkYXRhKQorICAgICAgICBkYXRhID0geycxJzogeycyJzogeyczJzogeyc0Jzogeyc1Jzogeyc2Jzogeyc3Jzogeyc4Jzogeyc5JzogYidhYWFhYWEnfX19fX19fX19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHMoZGF0YSkpLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfaW5kZW50YXRpb25fZGljdF9taXgoc2VsZik6Ci0gICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiBbeyczJzogW1tbW1t7J3Rlc3QnOiBwbGlzdGxpYi5EYXRhKGInYWFhYWFhJyl9XV1dXV19XX19Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IFt7JzMnOiBbW1tbW3sndGVzdCc6IGInYWFhYWFhJ31dXV1dXX1dfX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyhkYXRhKSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9hcHBsZWZvcm1hdHRpbmcoc2VsZik6Ci0gICAgICAgIHBsID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKFRFU1REQVRBKQotICAgICAgICBkYXRhID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgVEVTVERBVEEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCBkYXRhIHdhcyBub3QgaWRlbnRpY2FsIHRvIEFwcGxlJ3Mgb3V0cHV0IikKKyAgICAgICAgZm9yIHVzZV9idWlsdGluX3R5cGVzIGluIChUcnVlLCBGYWxzZSk6CisgICAgICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQsIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzKToKKyAgICAgICAgICAgICAgICAgICAgcGwgPSBwbGlzdGxpYi5sb2FkcyhURVNUREFUQVtmbXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMpCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBURVNUREFUQVtmbXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCBkYXRhIHdhcyBub3QgaWRlbnRpY2FsIHRvIEFwcGxlJ3Mgb3V0cHV0IikKKwogCiAgICAgZGVmIHRlc3RfYXBwbGVmb3JtYXR0aW5nZnJvbWxpdGVyYWwoc2VsZik6Ci0gICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKFRFU1REQVRBKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCBkYXRhIHdhcyBub3QgaWRlbnRpY2FsIHRvIEFwcGxlJ3Mgb3V0cHV0IikKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhURVNUREFUQVtmbXRdLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSwKKyAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCBkYXRhIHdhcyBub3QgaWRlbnRpY2FsIHRvIEFwcGxlJ3Mgb3V0cHV0IikKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhURVNUREFUQVtmbXRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSwKKyAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCBkYXRhIHdhcyBub3QgaWRlbnRpY2FsIHRvIEFwcGxlJ3Mgb3V0cHV0IikKIAogICAgIGRlZiB0ZXN0X2J5dGVzaW8oc2VsZik6Ci0gICAgICAgIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KLSAgICAgICAgYiA9IEJ5dGVzSU8oKQotICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCi0gICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGwsIGIpCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChCeXRlc0lPKGIuZ2V0dmFsdWUoKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGIgPSBCeXRlc0lPKCkKKyAgICAgICAgICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZShmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXAocGwsIGIsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZChCeXRlc0lPKGIuZ2V0dmFsdWUoKSksIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWQoQnl0ZXNJTyhiLmdldHZhbHVlKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKworICAgIGRlZiB0ZXN0X2tleXNvcnRfYnl0ZXNpbyhzZWxmKToKKyAgICAgICAgcGwgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHBsWydiJ10gPSAxCisgICAgICAgIHBsWydhJ10gPSAyCisgICAgICAgIHBsWydjJ10gPSAzCisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIGZvciBzb3J0X2tleXMgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKToKKyAgICAgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorCisgICAgICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXAocGwsIGIsIGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWQoQnl0ZXNJTyhiLmdldHZhbHVlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc29ydF9rZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYicsICdhJywgJ2MnXSkKKworICAgIGRlZiB0ZXN0X2tleXNvcnQoc2VsZik6CisgICAgICAgIHBsID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBwbFsnYiddID0gMQorICAgICAgICBwbFsnYSddID0gMgorICAgICAgICBwbFsnYyddID0gMworCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICBmb3Igc29ydF9rZXlzIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cyk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSwgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc29ydF9rZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYicsICdhJywgJ2MnXSkKKworICAgIGRlZiB0ZXN0X2tleXNfbm9fc3RyaW5nKHNlbGYpOgorICAgICAgICBwbCA9IHsgNDI6ICdhTnVtYmVyJyB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGxpc3RsaWIuZHVtcHMsIHBsLCBmbXQ9Zm10KQorCisgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGxpc3RsaWIuZHVtcCwgcGwsIGIsIGZtdD1mbXQpCisKKyAgICBkZWYgdGVzdF9za2lwa2V5cyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICA0MjogJ2FOdW1iZXInLAorICAgICAgICAgICAgJ3NuYWtlJzogJ2FXb3JkJywKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMoCisgICAgICAgICAgICAgICAgICAgIHBsLCBmbXQ9Zm10LCBza2lwa2V5cz1UcnVlLCBzb3J0X2tleXM9RmFsc2UpCisKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7J3NuYWtlJzogJ2FXb3JkJ30pCisKKyAgICAgICAgICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXAoCisgICAgICAgICAgICAgICAgICAgIHBsLCBmcCwgZm10PWZtdCwgc2tpcGtleXM9VHJ1ZSwgc29ydF9rZXlzPUZhbHNlKQorICAgICAgICAgICAgICAgIGRhdGEgPSBmcC5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZnAuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeydzbmFrZSc6ICdhV29yZCd9KQorCisgICAgZGVmIHRlc3RfdHVwbGVfbWVtYmVycyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAnZmlyc3QnOiAoMSwgMiksCisgICAgICAgICAgICAnc2Vjb25kJzogKDEsIDIpLAorICAgICAgICAgICAgJ3RoaXJkJzogKDMsIDQpLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7CisgICAgICAgICAgICAgICAgICAgICdmaXJzdCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3NlY29uZCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3RoaXJkJzogWzMsIDRdLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwbDJbJ2ZpcnN0J10sIHBsMlsnc2Vjb25kJ10pCisKKyAgICBkZWYgdGVzdF9saXN0X21lbWJlcnMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2ZpcnN0JzogWzEsIDJdLAorICAgICAgICAgICAgJ3NlY29uZCc6IFsxLCAyXSwKKyAgICAgICAgICAgICd0aGlyZCc6IFszLCA0XSwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeworICAgICAgICAgICAgICAgICAgICAnZmlyc3QnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICdzZWNvbmQnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IFszLCA0XSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocGwyWydmaXJzdCddLCBwbDJbJ3NlY29uZCddKQorCisgICAgZGVmIHRlc3RfZGljdF9tZW1iZXJzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdmaXJzdCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgJ3NlY29uZCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgJ3RoaXJkJzogeydiJzogMiB9LAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7CisgICAgICAgICAgICAgICAgICAgICdmaXJzdCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAnc2Vjb25kJzogeydhJzogMX0sCisgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IHsnYic6IDIgfSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocGwyWydmaXJzdCddLCBwbDJbJ3NlY29uZCddKQogCiAgICAgZGVmIHRlc3RfY29udHJvbGNoYXJhY3RlcnMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEyOCk6CkBAIC0xNzksMjUgKzM1NSwyNyBAQAogICAgICAgICAgICAgdGVzdFN0cmluZyA9ICJzdHJpbmcgY29udGFpbmluZyAlcyIgJSBjCiAgICAgICAgICAgICBpZiBpID49IDMyIG9yIGMgaW4gIlxyXG5cdCI6CiAgICAgICAgICAgICAgICAgIyBcciwgXG4gYW5kIFx0IGFyZSB0aGUgb25seSBsZWdhbCBjb250cm9sIGNoYXJzIGluIFhNTAotICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHRlc3RTdHJpbmcpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcHModGVzdFN0cmluZywgZm10PXBsaXN0bGliLkZNVF9YTUwpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFN0cmluZykKIAogICAgIGRlZiB0ZXN0X25vbmRpY3Ryb290KHNlbGYpOgotICAgICAgICB0ZXN0MSA9ICJhYmMiCi0gICAgICAgIHRlc3QyID0gWzEsIDIsIDMsICJhYmMiXQotICAgICAgICByZXN1bHQxID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHRlc3QxKSkKLSAgICAgICAgcmVzdWx0MiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyh0ZXN0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDEsIHJlc3VsdDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDIsIHJlc3VsdDIpCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICB0ZXN0MSA9ICJhYmMiCisgICAgICAgICAgICAgICAgdGVzdDIgPSBbMSwgMiwgMywgImFiYyJdCisgICAgICAgICAgICAgICAgcmVzdWx0MSA9IHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKHRlc3QxLCBmbXQ9Zm10KSkKKyAgICAgICAgICAgICAgICByZXN1bHQyID0gcGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHModGVzdDIsIGZtdD1mbXQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDEsIHJlc3VsdDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MiwgcmVzdWx0MikKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRhcnJheShzZWxmKToKICAgICAgICAgZm9yIGkgaW4gWyI8a2V5PmtleSBpbnNpZGUgYW4gYXJyYXk8L2tleT4iLAogICAgICAgICAgICAgICAgICAgIjxrZXk+a2V5IGluc2lkZSBhbiBhcnJheTI8L2tleT48cmVhbD4zPC9yZWFsPiIsCiAgICAgICAgICAgICAgICAgICAiPHRydWUvPjxrZXk+a2V5IGluc2lkZSBhbiBhcnJheTM8L2tleT4iXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI8cGxpc3Q+PGFycmF5PiVzPC9hcnJheT48L3BsaXN0PiIlaSkuZW5jb2RlKCkpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkZGljdChzZWxmKToKQEAgLTIwNiwyMiArMzg0LDE0MiBAQAogICAgICAgICAgICAgICAgICAgIjxzdHJpbmc+bWlzc2luZyBrZXk8L3N0cmluZz4iLAogICAgICAgICAgICAgICAgICAgIjxrZXk+azE8L2tleT48c3RyaW5nPnYxPC9zdHJpbmc+PHJlYWw+NS4zPC9yZWFsPiIKICAgICAgICAgICAgICAgICAgICI8a2V5PmsxPC9rZXk+PGtleT5rMjwva2V5PjxzdHJpbmc+ZG91YmxlIGtleTwvc3RyaW5nPiJdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjxwbGlzdD48ZGljdD4lczwvZGljdD48L3BsaXN0PiIlaSkuZW5jb2RlKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiPHBsaXN0PjxhcnJheT48ZGljdD4lczwvZGljdD48L2FycmF5PjwvcGxpc3Q+IiVpKS5lbmNvZGUoKSkKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRpbnRlZ2VyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjxwbGlzdD48aW50ZWdlcj5ub3QgaW50ZWdlcjwvaW50ZWdlcj48L3BsaXN0PiIpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkcmVhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8cGxpc3Q+PGludGVnZXI+bm90IHJlYWw8L2ludGVnZXI+PC9wbGlzdD4iKQogCisgICAgZGVmIHRlc3RfeG1sX2VuY29kaW5ncyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFRFU1REQVRBW3BsaXN0bGliLkZNVF9YTUxdCisKKyAgICAgICAgZm9yIHhtbF9lbmNvZGluZywgZW5jb2RpbmcsIGJvbSBpbiBbCisgICAgICAgICAgICAgICAgICAgIChiJ3V0Zi04JywgJ3V0Zi04JywgY29kZWNzLkJPTV9VVEY4KSwKKyAgICAgICAgICAgICAgICAgICAgKGIndXRmLTE2JywgJ3V0Zi0xNi1sZScsIGNvZGVjcy5CT01fVVRGMTZfTEUpLAorICAgICAgICAgICAgICAgICAgICAoYid1dGYtMTYnLCAndXRmLTE2LWJlJywgY29kZWNzLkJPTV9VVEYxNl9CRSksCisgICAgICAgICAgICAgICAgICAgICMgRXhwYXQgZG9lcyBub3Qgc3VwcG9ydCBVVEYtMzIKKyAgICAgICAgICAgICAgICAgICAgIyhiJ3V0Zi0zMicsICd1dGYtMzItbGUnLCBjb2RlY3MuQk9NX1VURjMyX0xFKSwKKyAgICAgICAgICAgICAgICAgICAgIyhiJ3V0Zi0zMicsICd1dGYtMzItYmUnLCBjb2RlY3MuQk9NX1VURjMyX0JFKSwKKyAgICAgICAgICAgICAgICBdOgorCisgICAgICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZShmbXQ9cGxpc3RsaWIuRk1UX1hNTCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBkYXRhID0gYmFzZS5yZXBsYWNlKGInVVRGLTgnLCB4bWxfZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgZGF0YSA9IGJvbSArIGRhdGEuZGVjb2RlKCd1dGYtOCcpLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKworICAgIGRlZiB0ZXN0X25vbnN0YW5kYXJkX3JlZnNfc2l6ZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjE1Mzg6IFJlZnMgYW5kIG9mZnNldHMgYXJlIDI0LWJpdCBpbnRlZ2VycworICAgICAgICBkYXRhID0gKGInYnBsaXN0MDAnCisgICAgICAgICAgICAgICAgYidceGQxXHgwMFx4MDBceDAxXHgwMFx4MDBceDAyUWFRYicKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwZlx4MDBceDAwXHgxMScKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDNceDAzJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDMnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDEzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhkYXRhKSwgeydhJzogJ2InfSkKKworCitjbGFzcyBUZXN0UGxpc3RsaWJEZXByZWNhdGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pb19kZXByZWNhdGVkKHNlbGYpOgorICAgICAgICBwbF9pbiA9IHsKKyAgICAgICAgICAgICdrZXknOiA0MiwKKyAgICAgICAgICAgICdzdWInOiB7CisgICAgICAgICAgICAgICAgJ2tleSc6IDksCisgICAgICAgICAgICAgICAgJ2FsdCc6ICd2YWx1ZScsCisgICAgICAgICAgICAgICAgJ2RhdGEnOiBiJ2J1ZmZlcicsCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGxfb3V0ID0gcGxpc3RsaWIuX0ludGVybmFsRGljdCh7CisgICAgICAgICAgICAna2V5JzogNDIsCisgICAgICAgICAgICAnc3ViJzogcGxpc3RsaWIuX0ludGVybmFsRGljdCh7CisgICAgICAgICAgICAgICAgJ2tleSc6IDksCisgICAgICAgICAgICAgICAgJ2FsdCc6ICd2YWx1ZScsCisgICAgICAgICAgICAgICAgJ2RhdGEnOiBwbGlzdGxpYi5EYXRhKGInYnVmZmVyJyksCisgICAgICAgICAgICB9KQorICAgICAgICB9KQorCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbF9pbiwgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3Qoc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbF9vdXQsIHBsMikKKworICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGxfaW4sIGZwKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3QoZnApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbF9vdXQsIHBsMikKKworICAgIGRlZiB0ZXN0X2J5dGVzX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2tleSc6IDQyLAorICAgICAgICAgICAgJ3N1Yic6IHsKKyAgICAgICAgICAgICAgICAna2V5JzogOSwKKyAgICAgICAgICAgICAgICAnYWx0JzogJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAnZGF0YSc6IGInYnVmZmVyJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwbDIsIHBsaXN0bGliLl9JbnRlcm5hbERpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KAorICAgICAgICAgICAga2V5PTQyLAorICAgICAgICAgICAgc3ViPXBsaXN0bGliLl9JbnRlcm5hbERpY3QoCisgICAgICAgICAgICAgICAga2V5PTksCisgICAgICAgICAgICAgICAgYWx0PSd2YWx1ZScsCisgICAgICAgICAgICAgICAgZGF0YT1wbGlzdGxpYi5EYXRhKGInYnVmZmVyJyksCisgICAgICAgICAgICApCisgICAgICAgICkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBkYXRhMiA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkYXRhMikKKworICAgIGRlZiB0ZXN0X2RhdGFvYmplY3RfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgaW5fZGF0YSA9IHsgJ2tleSc6IHBsaXN0bGliLkRhdGEoYidoZWxsbycpIH0KKyAgICAgICAgb3V0X2RhdGEgPSB7ICdrZXknOiBiJ2hlbGxvJyB9CisKKyAgICAgICAgYnVmID0gcGxpc3RsaWIuZHVtcHMoaW5fZGF0YSkKKworICAgICAgICBjdXIgPSBwbGlzdGxpYi5sb2FkcyhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIGluX2RhdGEpCisKKyAgICAgICAgY3VyID0gcGxpc3RsaWIubG9hZHMoYnVmLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIG91dF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgaW5fZGF0YSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGN1ciA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIGluX2RhdGEpCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQbGlzdGxpYikKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGxpc3RsaWIsIFRlc3RQbGlzdGxpYkRlcHJlY2F0ZWQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQppbmRleCBhMDdhNzE5Li5hMGEzMzJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CkBAIC0xLDYgKzEsNyBAQAogIyBUZXN0IGNhc2UgZm9yIHRoZSBvcy5wb2xsKCkgZnVuY3Rpb24KIAogaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNlbGVjdAogdHJ5OgpAQCAtMTQsNyArMTUsNyBAQAogdHJ5OgogICAgIHNlbGVjdC5wb2xsCiBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5wb2xsIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3RfcG9sbCIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5wb2xsIG5vdCBkZWZpbmVkIikKIAogCiBkZWYgZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgZmxhZyk6CkBAIC03NSwxMyArNzYsMTEgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZnMsIFtNU0ddICogTlVNX1BJUEVTKQogCi0gICAgZGVmIHBvbGxfdW5pdF90ZXN0cyhzZWxmKToKKyAgICBkZWYgdGVzdF9wb2xsX3VuaXRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgcmV0dXJucyBOVkFMIGZvciBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgotICAgICAgICBGRCA9IDQyCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmNsb3NlKEZEKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgRkQsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgb3MuY2xvc2UoRkQpCisgICAgICAgIG9zLmNsb3NlKHcpCiAgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCiAgICAgICAgIHAucmVnaXN0ZXIoRkQpCiAgICAgICAgIHIgPSBwLnBvbGwoKQpAQCAtMTI0LDcgKzEyMyw5IEBACiAKICAgICBkZWYgdGVzdF9wb2xsMihzZWxmKToKICAgICAgICAgY21kID0gJ2ZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIGVjaG8gdGVzdGluZy4uLjsgc2xlZXAgMTsgZG9uZScKLSAgICAgICAgcCA9IG9zLnBvcGVuKGNtZCwgJ3InKQorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnNpemU9MCkKKyAgICAgICAgcCA9IHByb2Muc3Rkb3V0CiAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQogICAgICAgICBwb2xsc3Rlci5yZWdpc3RlciggcCwgc2VsZWN0LlBPTExJTiApCiAgICAgICAgIGZvciB0b3V0IGluICgwLCAxMDAwLCAyMDAwLCA0MDAwLCA4MDAwLCAxNjAwMCkgKyAoLTEsKSoxMDoKQEAgLTEzNCw3ICsxMzUsNyBAQAogICAgICAgICAgICAgZmQsIGZsYWdzID0gZmRsaXN0WzBdCiAgICAgICAgICAgICBpZiBmbGFncyAmIHNlbGVjdC5QT0xMSFVQOgogICAgICAgICAgICAgICAgIGxpbmUgPSBwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICIiOgorICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gYiIiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Vycm9yOiBwaXBlIHNlZW1zIHRvIGJlIGNsb3NlZCwgYnV0IHN0aWxsIHJldHVybnMgZGF0YScpCiAgICAgICAgICAgICAgICAgY29udGludWUKIApAQCAtMTQyLDYgKzE0Myw3IEBACiAgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQogICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgYid0ZXN0aW5nLi4uXG4nKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgZnJvbSBzZWxlY3QucG9sbDogJXMnICUgZmRsaXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQppbmRleCA1ODA5YmU2Li5kMDc2ZmMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQpAQCAtMTgsNiArMTgsMTkgQEAKIEhPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAogUE9SVCA9IDAKIAorU1VQUE9SVFNfU1NMID0gRmFsc2UKK2lmIGhhc2F0dHIocG9wbGliLCAnUE9QM19TU0wnKToKKyAgICBpbXBvcnQgc3NsCisgICAgZnJvbSBzc2wgaW1wb3J0IEhBU19TTkkKKworICAgIFNVUFBPUlRTX1NTTCA9IFRydWUKKyAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwgImtleWNlcnQzLnBlbSIpCisgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAicHljYWNlcnQucGVtIikKK2Vsc2U6CisgICAgSEFTX1NOSSA9IEZhbHNlCisKK3JlcXVpcmVzX3NzbCA9IHNraXBVbmxlc3MoU1VQUE9SVFNfU1NMLCAnU1NMIG5vdCBzdXBwb3J0ZWQnKQorCiAjIHRoZSBkdW1teSBkYXRhIHJldHVybmVkIGJ5IHNlcnZlciB3aGVuIExJU1QgYW5kIFJFVFIgY29tbWFuZHMgYXJlIGlzc3VlZAogTElTVF9SRVNQID0gYicxIDFcclxuMiAyXHJcbjMgM1xyXG40IDRcclxuNSA1XHJcbi5cclxuJwogUkVUUl9SRVNQID0gYiIiIkZyb206IHBvc3RtYXN0ZXJAcHl0aG9uLm9yZ1wKQEAgLTMzLDExICs0NiwxNSBAQAogCiBjbGFzcyBEdW1teVBPUDNIYW5kbGVyKGFzeW5jaGF0LmFzeW5jX2NoYXQpOgogCisgICAgQ0FQQVMgPSB7J1VJREwnOiBbXSwgJ0lNUExFTUVOVEFUSU9OJzogWydweXRob24tdGVzdGxpYi1wb3Atc2VydmVyJ119CisKICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CiAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKICAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcihiIlxyXG4iKQogICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCiAgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LiA8dGltZXN0YW1wPicpCisgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IEZhbHNlCisgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gRmFsc2UKIAogICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgIHNlbGYuaW5fYnVmZmVyLmFwcGVuZChkYXRhKQpAQCAtMTEyLDYgKzEyOSw2NSBAQAogICAgICAgICBzZWxmLnB1c2goJytPSyBjbG9zaW5nLicpCiAgICAgICAgIHNlbGYuY2xvc2Vfd2hlbl9kb25lKCkKIAorICAgIGRlZiBfZ2V0X2NhcGFzKHNlbGYpOgorICAgICAgICBfY2FwYXMgPSBkaWN0KHNlbGYuQ0FQQVMpCisgICAgICAgIGlmIG5vdCBzZWxmLnRsc19hY3RpdmUgYW5kIFNVUFBPUlRTX1NTTDoKKyAgICAgICAgICAgIF9jYXBhc1snU1RMUyddID0gW10KKyAgICAgICAgcmV0dXJuIF9jYXBhcworCisgICAgZGVmIGNtZF9jYXBhKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LIENhcGFiaWxpdHkgbGlzdCBmb2xsb3dzJykKKyAgICAgICAgaWYgc2VsZi5fZ2V0X2NhcGFzKCk6CisgICAgICAgICAgICBmb3IgY2FwLCBwYXJhbXMgaW4gc2VsZi5fZ2V0X2NhcGFzKCkuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBfbG4gPSBbY2FwXQorICAgICAgICAgICAgICAgIGlmIHBhcmFtczoKKyAgICAgICAgICAgICAgICAgICAgX2xuLmV4dGVuZChwYXJhbXMpCisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcgJy5qb2luKF9sbikpCisgICAgICAgIHNlbGYucHVzaCgnLicpCisKKyAgICBpZiBTVVBQT1JUU19TU0w6CisKKyAgICAgICAgZGVmIGNtZF9zdGxzKHNlbGYsIGFyZyk6CisgICAgICAgICAgICBpZiBzZWxmLnRsc19hY3RpdmUgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcrT0sgQmVnaW4gVExTIG5lZ290aWF0aW9uJykKKyAgICAgICAgICAgICAgICB0bHNfc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2tldCwgY2VydGZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwcmVzc19yYWdnZWRfZW9mcz1GYWxzZSkKKyAgICAgICAgICAgICAgICBzZWxmLmRlbF9jaGFubmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQodGxzX3NvY2spCisgICAgICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCctRVJSIENvbW1hbmQgbm90IHBlcm1pdHRlZCB3aGVuIFRMUyBhY3RpdmUnKQorCisgICAgICAgIGRlZiBfZG9fdGxzX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBGYWxzZQorCisgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYudGxzX3N0YXJ0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3Rsc19oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuaGFuZGxlX3JlYWQoc2VsZikKKyAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVPRkVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCiAKIGNsYXNzIER1bW15UE9QM1NlcnZlcihhc3luY29yZS5kaXNwYXRjaGVyLCB0aHJlYWRpbmcuVGhyZWFkKToKIApAQCAtMjM2LDE5ICszMTIsNDMgQEAKICAgICAgICAgc2VsZi5jbGllbnQudWlkbCgpCiAgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoJ2ZvbycpCiAKKyAgICBkZWYgdGVzdF9jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnSU1QTEVNRU5UQVRJT04nIGluIGNhcGEua2V5cygpKQorCiAgICAgZGVmIHRlc3RfcXVpdChzZWxmKToKICAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnF1aXQoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcCkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5jbGllbnQuc29jaykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5jbGllbnQuZmlsZSkKIAorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzX2NhcGEoc2VsZik6CisgICAgICAgIGNhcGEgPSBzZWxmLmNsaWVudC5jYXBhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTVExTJyBpbiBjYXBhLmtleXMoKSkKIAotU1VQUE9SVFNfU1NMID0gRmFsc2UKLWlmIGhhc2F0dHIocG9wbGliLCAnUE9QM19TU0wnKToKLSAgICBpbXBvcnQgc3NsCisgICAgQHJlcXVpcmVzX3NzbAorICAgIGRlZiB0ZXN0X3N0bHMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gYicrT0sgQmVnaW4gVExTIG5lZ290aWF0aW9uJworICAgICAgICByZXNwID0gc2VsZi5jbGllbnQuc3RscygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgZXhwZWN0ZWQpCiAKLSAgICBTVVBQT1JUU19TU0wgPSBUcnVlCi0gICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJrZXljZXJ0LnBlbSIpCisgICAgQHJlcXVpcmVzX3NzbAorICAgIEBza2lwVW5sZXNzKEhBU19TTkksICdObyBTTkkgc3VwcG9ydCBpbiBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9zdGxzX2NvbnRleHQoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gYicrT0sgQmVnaW4gVExTIG5lZ290aWF0aW9uJworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0FGSUxFKQorICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoY29udGV4dD1jdHgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoImxvY2FsaG9zdCIsIHNlbGYuc2VydmVyLnBvcnQsIHRpbWVvdXQ9MykKKyAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoY29udGV4dD1jdHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgZXhwZWN0ZWQpCisKKworaWYgU1VQUE9SVFNfU1NMOgogCiAgICAgY2xhc3MgRHVtbXlQT1AzX1NTTEhhbmRsZXIoRHVtbXlQT1AzSGFuZGxlcik6CiAKQEAgLTI2MCwzNSArMzYwLDEzIEBACiAgICAgICAgICAgICBzZWxmLmRlbF9jaGFubmVsKCkKICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldChzc2xfc29ja2V0KQogICAgICAgICAgICAgIyBNdXN0IHRyeSBoYW5kc2hha2UgYmVmb3JlIGNhbGxpbmcgcHVzaCgpCi0gICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2RvX3Rsc19oYW5kc2hha2UoKQogICAgICAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcihiIlxyXG4iKQogICAgICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQogICAgICAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuIDx0aW1lc3RhbXA+JykKIAotICAgICAgICBkZWYgX2RvX3NzbF9oYW5kc2hha2Uoc2VsZik6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gRmFsc2UKLQotICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgotICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBEdW1teVBPUDNIYW5kbGVyLmhhbmRsZV9yZWFkKHNlbGYpCi0KLXJlcXVpcmVzX3NzbCA9IHNraXBVbmxlc3MoU1VQUE9SVFNfU1NMLCAnU1NMIG5vdCBzdXBwb3J0ZWQnKQogCiBAcmVxdWlyZXNfc3NsCiBjbGFzcyBUZXN0UE9QM19TU0xDbGFzcyhUZXN0UE9QM0NsYXNzKToKQEAgLTMwNiwyMCArMzg0LDYwIEBACiAgICAgZGVmIHRlc3RfY29udGV4dChzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBjZXJ0ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvcGxpYi5QT1AzX1NTTCwgc2VsZi5zZXJ2ZXIuaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucG9ydCwga2V5ZmlsZT1DRVJURklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogCiAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQogICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzX1NTTChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PWN0eCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5jbGllbnQuc29jay5jb250ZXh0LCBjdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaWVudC5ub29wKCkuc3RhcnRzd2l0aChiJytPSycpKQogCisgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5zdGxzKQorCisgICAgdGVzdF9zdGxzX2NvbnRleHQgPSB0ZXN0X3N0bHMKKworICAgIGRlZiB0ZXN0X3N0bHNfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdTVExTJyBpbiBjYXBhLmtleXMoKSkKKworCitAcmVxdWlyZXNfc3NsCitjbGFzcyBUZXN0UE9QM19UTFNDbGFzcyhUZXN0UE9QM0NsYXNzKToKKyAgICAjIHJlcGVhdCBwcmV2aW91cyB0ZXN0cyBieSB1c2luZyBwb3BsaWIuUE9QMy5zdGxzKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVBPUDNTZXJ2ZXIoKEhPU1QsIFBPUlQpKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwgdGltZW91dD0zKQorICAgICAgICBzZWxmLmNsaWVudC5zdGxzKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jbGllbnQuZmlsZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5jbGllbnQuc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBwb3BsaWIuZXJyb3JfcHJvdG86CisgICAgICAgICAgICAgICAgIyBoYXBwZW5zIGluIHRoZSB0ZXN0X3Rvb19sb25nX2xpbmVzIGNhc2U7IHRoZSBvdmVybG9uZworICAgICAgICAgICAgICAgICMgcmVzcG9uc2Ugd2lsbCBiZSB0cmVhdGVkIGFzIHJlc3BvbnNlIHRvIFFVSVQgYW5kIHJhaXNlCisgICAgICAgICAgICAgICAgIyB0aGlzIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhwb3BsaWIuZXJyb3JfcHJvdG8sIHNlbGYuY2xpZW50LnN0bHMpCisKKyAgICB0ZXN0X3N0bHNfY29udGV4dCA9IHRlc3Rfc3RscworCisgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYidTVExTJyBpbiBjYXBhLmtleXMoKSkKKwogCiBjbGFzcyBUZXN0VGltZW91dHMoVGVzdENhc2UpOgogCkBAIC0zNzcsNyArNDk1LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3RzID0gW1Rlc3RQT1AzQ2xhc3MsIFRlc3RUaW1lb3V0cywKLSAgICAgICAgICAgICBUZXN0UE9QM19TU0xDbGFzc10KKyAgICAgICAgICAgICBUZXN0UE9QM19TU0xDbGFzcywgVGVzdFBPUDNfVExTQ2xhc3NdCiAgICAgdGhyZWFkX2luZm8gPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKICAgICB0cnk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKaW5kZXggNWMwOWViZi4uM2ZhZTJiMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CkBAIC02MDMsOCArNjAzLDEwIEBACiAgICAgICAgIHIsIHcgPSBvcy5waXBlMihvcy5PX0NMT0VYRUN8b3MuT19OT05CTE9DSykKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCByKQogICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MuZ2V0X2luaGVyaXRhYmxlKHIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZSh3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfR0VURkwpICYgb3MuT19OT05CTE9DSykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZjbnRsLmZjbnRsKHcsIGZjbnRsLkZfR0VURkwpICYgb3MuT19OT05CTE9DSykKICAgICAgICAgIyB0cnkgcmVhZGluZyBmcm9tIGFuIGVtcHR5IHBpcGU6IHRoaXMgc2hvdWxkIGZhaWwsIG5vdCBibG9jawogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZWFkLCByLCAxKQogICAgICAgICAjIHRyeSBhIHdyaXRlIGJpZyBlbm91Z2ggdG8gZmlsbC11cCB0aGUgcGlwZTogdGhpcyBzaG91bGQgZWl0aGVyCkBAIC02NTIsNyArNjU0LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Quc3RfZmxhZ3MgfCBzdGF0LlVGX0lNTVVUQUJMRSwgbmV3X3N0LnN0X2ZsYWdzKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkID0gb3Blbih0YXJnZXRfZmlsZSwgJ3crJykKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRVBFUk0pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBwb3NpeC5jaGZsYWdzKHRhcmdldF9maWxlLCBzdC5zdF9mbGFncykKQEAgLTcxMCw0MSArNzEyLDM5IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnZ2V0Y3dkJyksICd0ZXN0IG5lZWRzIHBvc2l4LmdldGN3ZCgpJykKICAgICBkZWYgdGVzdF9nZXRjd2RfbG9uZ19wYXRobmFtZXMoc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdnZXRjd2QnKToKLSAgICAgICAgICAgIGRpcm5hbWUgPSAnZ2V0Y3dkLXRlc3QtZGlyZWN0b3J5LTAxMjM0NTY3ODlhYmNkZWYtMDEyMzQ1Njc4OTBhYmNkZWYnCi0gICAgICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJworICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJworICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBiYXNlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pICsgJy5nZXRjd2QnCiAKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5ta2RpcihiYXNlX3BhdGgpCi0gICAgICAgICAgICAgICAgb3MuY2hkaXIoYmFzZV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0OgotIyAgICAgICAgICAgICAgIEp1c3QgcmV0dXJuaW5nIG5vdGhpbmcgaW5zdGVhZCBvZiB0aGUgU2tpcFRlc3QgZXhjZXB0aW9uLAotIyAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHRlc3QgcmVzdWx0cyBpbiBFcnJvciBpbiB0aGF0IGNhc2UuCi0jICAgICAgICAgICAgICAgSXMgdGhhdCBvaz8KLSMgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciB0ZXN0aW5nIikKLSAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQorICAgICAgICAgICAgb3MuY2hkaXIoYmFzZV9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwgYmVjYXVzZQorICAgICAgICAgICAgIyAgdGhlIHRlc3QgcmVzdWx0cyBpbiBFcnJvciBpbiB0aGF0IGNhc2UuICBJcyB0aGF0IG9rPworICAgICAgICAgICAgIyAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciB0ZXN0aW5nIikKKyAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICAgICAgICAgZGVmIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoID0gMCk6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiKQorICAgICAgICAgICAgZGVmIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoID0gMCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm1rZGlyIGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IHN1ZmZpY2llbnRseSBkZWVwIGZvciBnZXRjd2QgdGVzdCIpCiAKLSAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoZGlybmFtZSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfcGF0aF9sZW5ndGggPCAxMDI3OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoICsgbGVuKGRpcm5hbWUpICsgMSkKLSAgICAgICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKCcuLicpCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5nZXRjd2QoKQorICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgMTAyNzoKKyAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoICsgbGVuKGRpcm5hbWUpICsgMSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQorICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQogCi0gICAgICAgICAgICAgICAgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUpCisgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSkKIAotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy5jaGRpcihjdXJkaXIpCi0gICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUoYmFzZV9wYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUoYmFzZV9wYXRoKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2dldGdyb3VwbGlzdCcpLCAidGVzdCBuZWVkcyBwb3NpeC5nZXRncm91cGxpc3QoKSIpCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwd2QsICdnZXRwd3VpZCcpLCAidGVzdCBuZWVkcyBwd2QuZ2V0cHd1aWQoKSIpCkBAIC03NTcsNyArNzU3LDcgQEAKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdnZXRlZ2lkJyksICJ0ZXN0IG5lZWRzIG9zLmdldGVnaWQoKSIpCiAgICAgZGVmIHRlc3RfZ2V0Z3JvdXBzKHNlbGYpOgotICAgICAgICB3aXRoIG9zLnBvcGVuKCdpZCAtRycpIGFzIGlkZzoKKyAgICAgICAgd2l0aCBvcy5wb3BlbignaWQgLUcgMj4vZGV2L251bGwnKSBhcyBpZGc6CiAgICAgICAgICAgICBncm91cHMgPSBpZGcucmVhZCgpLnN0cmlwKCkKICAgICAgICAgICAgIHJldCA9IGlkZy5jbG9zZSgpCiAKQEAgLTc2OCw3ICs3NjgsNyBAQAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICBpbXBvcnQgc3lzY29uZmlnCiAgICAgICAgICAgICBkdCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJykgb3IgJzEwLjAnCi0gICAgICAgICAgICBpZiBmbG9hdChkdCkgPCAxMC42OgorICAgICAgICAgICAgaWYgdHVwbGUoaW50KG4pIGZvciBuIGluIGR0LnNwbGl0KCcuJylbMDoyXSkgPCAoMTAsIDYpOgogICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJnZXRncm91cHMoMikgaXMgYnJva2VuIHByaW9yIHRvIDEwLjYiKQogCiAgICAgICAgICMgJ2lkIC1HJyBhbmQgJ29zLmdldGdyb3VwcygpJyBzaG91bGQgcmV0dXJuIHRoZSBzYW1lCkBAIC0xMTIxLDYgKzExMjEsMjMgQEAKICAgICAgICAgICAgICAgICAjIGh0dHA6Ly9saXN0cy5mcmVlYnNkLm9yZy9waXBlcm1haWwvZnJlZWJzZC1hbWQ2NC8yMDEyLUphbnVhcnkvMDE0MzMyLmh0bWwKICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiT1NFcnJvciByYWlzZWQhIikKIAorICAgIGRlZiB0ZXN0X3BhdGhfZXJyb3IyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBmdW5jdGlvbnMgdGhhdCBjYWxsIHBhdGhfZXJyb3IyKCksIHByb3ZpZGluZyB0d28gZmlsZW5hbWVzIGluIHRoZWlyIGV4Y2VwdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICBmb3IgbmFtZSBpbiAoInJlbmFtZSIsICJyZXBsYWNlIiwgImxpbmsiLCAic3ltbGluayIpOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBnZXRhdHRyKG9zLCBuYW1lLCBOb25lKQorCisgICAgICAgICAgICBpZiBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICBmb3IgZHN0IGluICgibm9vZGx5MiIsIHN1cHBvcnQuVEVTVEZOKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJ2RvZXNub3RleGlzdGZpbGVuYW1lJywgZHN0KQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiJ2RvZXNub3RleGlzdGZpbGVuYW1lJyAtPiAne30nIi5mb3JtYXQoZHN0KSwgc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIHZhbGlkIHBhdGhfZXJyb3IyKCkgdGVzdCBmb3Igb3MuIiArIG5hbWUpCisKIGNsYXNzIFBvc2l4R3JvdXBzVGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKaW5kZXggMGU3ZDg2Ni4uZWMyZmJhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKQEAgLTU3LDIxICs1NywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5qb2luKGIiL2Zvby8iLCBiImJhci8iLCBiImJhei8iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiIi9mb28vYmFyL2Jhei8iKQogCi0gICAgICAgIGRlZiBjaGVja19lcnJvcl9tc2cobGlzdF9vZl9hcmdzLCBtc2cpOgotICAgICAgICAgICAgIiIiQ2hlY2sgcG9zaXhwYXRoLmpvaW4gcmFpc2VzIGZyaWVuZGx5IFR5cGVFcnJvcnMuIiIiCi0gICAgICAgICAgICBmb3IgYXJncyBpbiAoaXRlbSBmb3IgcGVybSBpbiBsaXN0X29mX2FyZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMocGVybSkpOgotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICAgICAgcG9zaXhwYXRoLmpvaW4oKmFyZ3MpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGNtLmV4Y2VwdGlvbi5hcmdzWzBdKQotCi0gICAgICAgIGNoZWNrX2Vycm9yX21zZyhbW2InYnl0ZXMnLCAnc3RyJ10sIFtieXRlYXJyYXkoYidieXRlcycpLCAnc3RyJ11dLAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IG1peCBzdHJpbmdzIGFuZCBieXRlcyBpbiBwYXRoIGNvbXBvbmVudHMuIikKKyAgICBkZWYgdGVzdF9qb2luX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBwb3NpeHBhdGguam9pbiByYWlzZXMgZnJpZW5kbHkgVHlwZUVycm9ycy4KKyAgICAgICAgZXJybXNnID0gIkNhbid0IG1peCBzdHJpbmdzIGFuZCBieXRlcyBpbiBwYXRoIGNvbXBvbmVudHMiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyk6CisgICAgICAgICAgICBwb3NpeHBhdGguam9pbihiJ2J5dGVzJywgJ3N0cicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyk6CisgICAgICAgICAgICBwb3NpeHBhdGguam9pbignc3RyJywgYidieXRlcycpCiAgICAgICAgICMgcmVncmVzc2lvbiwgc2VlICMxNTM3NwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBwb3NpeHBhdGguam9pbihOb25lLCAnc3RyJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgiQ2FuJ3QgbWl4IHN0cmluZ3MgYW5kIGJ5dGVzIGluIHBhdGggY29tcG9uZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtLmV4Y2VwdGlvbi5hcmdzWzBdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzBdLCBlcnJtc2cpCiAKICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi9mb28vYmFyIiksICgiL2ZvbyIsICJiYXIiKSkKQEAgLTE4Niw2MyArMTgyLDYgQEAKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9jcmVhdGVfZmlsZShmaWxlbmFtZSk6Ci0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoYidmb28nKQotCi0gICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6Ci0gICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4sIHRlc3RfZm4pKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zYW1lZmlsZSkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgInBvc2l4cGF0aC5zYW1lZmlsZSBkb2VzIG5vdCB3b3JrIG9uIGxpbmtzIGluIFdpbmRvd3MiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJzeW1saW5rIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgc3ltbGluayBpbXBsZW1lbnRhdGlvbiIpCi0gICAgZGVmIHRlc3Rfc2FtZWZpbGVfb25fbGlua3Moc2VsZik6Ci0gICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKLQotICAgICAgICBvcy5zeW1saW5rKHRlc3RfZm4xLCB0ZXN0X2ZuMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQotICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCi0KLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCi0KLQotICAgIGRlZiB0ZXN0X3NhbWVzdGF0KHNlbGYpOgotICAgICAgICB0ZXN0X2ZuID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKLSAgICAgICAgdGVzdF9mbnMgPSBbdGVzdF9mbl0qMgotICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAicG9zaXhwYXRoLnNhbWVzdGF0IGRvZXMgbm90IHdvcmsgb24gbGlua3MgaW4gV2luZG93cyIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKLSAgICBkZWYgdGVzdF9zYW1lc3RhdF9vbl9saW5rcyhzZWxmKToKLSAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQotICAgICAgICB0ZXN0X2ZucyA9ICh0ZXN0X2ZuMSwgdGVzdF9mbjIpCi0gICAgICAgIG9zLnN5bWxpbmsoKnRlc3RfZm5zKQotICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCi0KLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVzdGF0KQotCiAgICAgZGVmIHRlc3RfaXNtb3VudChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNtb3VudCgiLyIpLCBUcnVlKQogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CkBAIC01OTUsMTEgKzUzNCw2IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5nZXRjd2RiID0gcmVhbF9nZXRjd2RiCiAKLSAgICBkZWYgdGVzdF9zYW1lb3BlbmZpbGUoc2VsZik6Ci0gICAgICAgIGZuYW1lID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAid2IiKSBhcyBhLCBvcGVuKGZuYW1lLCAid2IiKSBhcyBiOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lb3BlbmZpbGUoYS5maWxlbm8oKSwgYi5maWxlbm8oKSkpCi0KIAogY2xhc3MgUG9zaXhDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHBhdGhtb2R1bGUgPSBwb3NpeHBhdGgKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKaW5kZXggYTg1Mjk4ZS4uM2QzNjRjNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKQEAgLTEsMyArMSw1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgdGVzdC5zdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKQEAgLTUzMCw2ICs1MzIsNTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkaWN0LmZyb21rZXlzKGtleXMsIDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAneyVyOiAwLCAlcjogMH0nICUgdHVwbGUoc29ydGVkKGtleXMsIGtleT1pZCkpKQogCisgICAgZGVmIHRlc3Rfc3RyX3dyYXAoc2VsZik6CisgICAgICAgICMgcHByaW50IHRyaWVzIHRvIHdyYXAgc3RyaW5ncyBpbnRlbGxpZ2VudGx5CisgICAgICAgIGZveCA9ICd0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIGEgbGF6eSBkb2cnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZm94LCB3aWR0aD0yMCksICIiIlwKKyd0aGUgcXVpY2sgYnJvd24gJworJ2ZveCBqdW1wZWQgb3ZlciAnCisnYSBsYXp5IGRvZyciIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoeydhJzogMSwgJ2InOiBmb3gsICdjJzogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9MjYpLCAiIiJcCit7J2EnOiAxLAorICdiJzogJ3RoZSBxdWljayBicm93biAnCisgICAgICAnZm94IGp1bXBlZCBvdmVyICcKKyAgICAgICdhIGxhenkgZG9nJywKKyAnYyc6IDJ9IiIiKQorICAgICAgICAjIFdpdGggc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMKKyAgICAgICAgIyAtIFxuIGFsd2F5cyB0cmlnZ2VycyBhIG5ldyBsaW5lIGluIHRoZSBwcHJpbnQKKyAgICAgICAgIyAtIFx0IGFuZCBcbiBhcmUgZXNjYXBlZAorICAgICAgICAjIC0gbm9uLUFTQ0lJIGlzIGFsbG93ZWQKKyAgICAgICAgIyAtIGFuIGFwb3N0cm9waGUgZG9lc24ndCBkaXNydXB0IHRoZSBwcHJpbnQKKyAgICAgICAgc3BlY2lhbCA9ICJQb3J0b25zIGRpeCBib25zIFwid2hpc2t5c1wiXG7DoCBsJ2F2b2NhdCBnb3VqYXRcdCBxdWkgZnVtYWl0IGF1IHpvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD0yMCksICIiIlwKKydQb3J0b25zIGRpeCBib25zICcKKycid2hpc2t5cyJcXG4nCisiw6AgbCdhdm9jYXQgIgorJ2dvdWphdFxcdCBxdWkgJworJ2Z1bWFpdCBhdSB6b28nIiIiKQorICAgICAgICAjIEFuIHVud3JhcHBhYmxlIHN0cmluZyBpcyBmb3JtYXR0ZWQgYXMgaXRzIHJlcHIKKyAgICAgICAgdW53cmFwcGFibGUgPSAieCIgKiAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh1bndyYXBwYWJsZSwgd2lkdGg9ODApLCByZXByKHVud3JhcHBhYmxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCgnJyksICInJyIpCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgcHByaW50IGlzIGEgdXNhYmxlIHJlcHIKKyAgICAgICAgc3BlY2lhbCAqPSAxMAorICAgICAgICBmb3Igd2lkdGggaW4gcmFuZ2UoMywgNDApOgorICAgICAgICAgICAgZm9ybWF0dGVkID0gcHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9d2lkdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIigiICsgZm9ybWF0dGVkICsgIikiKSwgc3BlY2lhbCkKKworICAgIGRlZiB0ZXN0X2NvbXBhY3Qoc2VsZik6CisgICAgICAgIG8gPSAoW2xpc3QocmFuZ2UoaSAqIGkpKSBmb3IgaSBpbiByYW5nZSg1KV0gKworICAgICAgICAgICAgIFtsaXN0KHJhbmdlKGkpKSBmb3IgaSBpbiByYW5nZSg2KV0pCisgICAgICAgIGV4cGVjdGVkID0gIiIiXAorW1tdLCBbMF0sIFswLCAxLCAyLCAzXSwKKyBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOF0sCisgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLAorICAxNCwgMTVdLAorIFtdLCBbMF0sIFswLCAxXSwgWzAsIDEsIDJdLCBbMCwgMSwgMiwgM10sCisgWzAsIDEsIDIsIDMsIDRdXSIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KG8sIHdpZHRoPTQ4LCBjb21wYWN0PVRydWUpLCBleHBlY3RlZCkKKwogCiBjbGFzcyBEb3R0ZWRQcmV0dHlQcmludGVyKHBwcmludC5QcmV0dHlQcmludGVyKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcmludC5weSBiL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKaW5kZXggOWQ2ZGJlYS4uN2VlYTM0OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcmludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CkBAIC0xLDYyICsxLDU1IEBACi0iIiJUZXN0IGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBwcmludCBmdW5jdGlvbi4KLSIiIgotCi0jIEluIDIuNiwgdGhpcyBnaXZlcyB1cyB0aGUgYmVoYXZpb3Igd2Ugd2FudC4gIEluIDMuMCwgaXQgaGFzCi0jICBubyBmdW5jdGlvbiwgYnV0IGl0IHN0aWxsIG11c3QgcGFyc2UgY29ycmVjdGx5LgotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgotCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAotdHJ5OgotICAgICMgMy54Ci0gICAgZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIDIueAotICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogTm90RGVmaW5lZCA9IG9iamVjdCgpCiAKICMgQSBkaXNwYXRjaCB0YWJsZSBhbGwgOCBjb21iaW5hdGlvbnMgb2YgcHJvdmlkaW5nCi0jICBzZXAsIGVuZCwgYW5kIGZpbGUKKyMgc2VwLCBlbmQsIGFuZCBmaWxlLgogIyBJIHVzZSB0aGlzIG1hY2hpbmVyeSBzbyB0aGF0IEknbSBub3QganVzdCBwYXNzaW5nIGRlZmF1bHQKLSMgIHZhbHVlcyB0byBwcmludCwgSSdtIGVpdGhlciBwYXNzaW5nIG9yIG5vdCBwYXNzaW5nIGluIHRoZQotIyAgYXJndW1lbnRzCisjIHZhbHVlcyB0byBwcmludCwgSSdtIGVpdGhlciBwYXNzaW5nIG9yIG5vdCBwYXNzaW5nIGluIHRoZQorIyBhcmd1bWVudHMuCiBkaXNwYXRjaCA9IHsKICAgICAoRmFsc2UsIEZhbHNlLCBGYWxzZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KCphcmdzKSwKICAgICAoRmFsc2UsIEZhbHNlLCBUcnVlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChmaWxlPWZpbGUsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChmaWxlPWZpbGUsICphcmdzKSwKICAgICAoRmFsc2UsIFRydWUsICBGYWxzZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsICphcmdzKSwKICAgICAoRmFsc2UsIFRydWUsICBUcnVlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCBmaWxlPWZpbGUsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCBmaWxlPWZpbGUsICphcmdzKSwKICAgICAoVHJ1ZSwgIEZhbHNlLCBGYWxzZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsICphcmdzKSwKICAgICAoVHJ1ZSwgIEZhbHNlLCBUcnVlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBmaWxlPWZpbGUsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBmaWxlPWZpbGUsICphcmdzKSwKICAgICAoVHJ1ZSwgIFRydWUsICBGYWxzZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsICphcmdzKSwKICAgICAoVHJ1ZSwgIFRydWUsICBUcnVlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCBmaWxlPWZpbGUsICphcmdzKSwKLSAgICB9CisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCit9CisKIAogIyBDbGFzcyB1c2VkIHRvIHRlc3QgX19zdHJfXyBhbmQgcHJpbnQKIGNsYXNzIENsYXNzV2l0aF9fc3RyX186CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgogICAgICAgICBzZWxmLnggPSB4CisKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYueAogCi1jbGFzcyBUZXN0UHJpbnQodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBjaGVjayhzZWxmLCBleHBlY3RlZCwgYXJncywKLSAgICAgICAgICAgIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCwgZmlsZT1Ob3REZWZpbmVkKToKLSAgICAgICAgIyBDYXB0dXJlIHN5cy5zdGRvdXQgaW4gYSBTdHJpbmdJTy4gIENhbGwgcHJpbnQgd2l0aCBhcmdzLAotICAgICAgICAjICBhbmQgd2l0aCBzZXAsIGVuZCwgYW5kIGZpbGUsIGlmIHRoZXkncmUgZGVmaW5lZC4gIFJlc3VsdAotICAgICAgICAjICBtdXN0IG1hdGNoIGV4cGVjdGVkLgogCi0gICAgICAgICMgTG9vayB1cCB0aGUgYWN0dWFsIGZ1bmN0aW9uIHRvIGNhbGwsIGJhc2VkIG9uIGlmIHNlcCwgZW5kLCBhbmQgZmlsZQotICAgICAgICAjICBhcmUgZGVmaW5lZAorY2xhc3MgVGVzdFByaW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBwcmludCBmdW5jdGlvbi4iIiIKKworICAgIGRlZiBjaGVjayhzZWxmLCBleHBlY3RlZCwgYXJncywKKyAgICAgICAgICAgICAgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkLCBmaWxlPU5vdERlZmluZWQpOgorICAgICAgICAjIENhcHR1cmUgc3lzLnN0ZG91dCBpbiBhIFN0cmluZ0lPLiAgQ2FsbCBwcmludCB3aXRoIGFyZ3MsCisgICAgICAgICMgYW5kIHdpdGggc2VwLCBlbmQsIGFuZCBmaWxlLCBpZiB0aGV5J3JlIGRlZmluZWQuICBSZXN1bHQKKyAgICAgICAgIyBtdXN0IG1hdGNoIGV4cGVjdGVkLgorCisgICAgICAgICMgTG9vayB1cCB0aGUgYWN0dWFsIGZ1bmN0aW9uIHRvIGNhbGwsIGJhc2VkIG9uIGlmIHNlcCwgZW5kLAorICAgICAgICAjIGFuZCBmaWxlIGFyZSBkZWZpbmVkLgogICAgICAgICBmbiA9IGRpc3BhdGNoWyhzZXAgaXMgbm90IE5vdERlZmluZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpcyBub3QgTm90RGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyBub3QgTm90RGVmaW5lZCldCkBAIC02OSw3ICs2Miw3IEBACiAgICAgZGVmIHRlc3RfcHJpbnQoc2VsZik6CiAgICAgICAgIGRlZiB4KGV4cGVjdGVkLCBhcmdzLCBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQpOgogICAgICAgICAgICAgIyBSdW4gdGhlIHRlc3QgMiB3YXlzOiBub3QgdXNpbmcgZmlsZSwgYW5kIHVzaW5nCi0gICAgICAgICAgICAjICBmaWxlIGRpcmVjdGVkIHRvIGEgU3RyaW5nSU8KKyAgICAgICAgICAgICMgZmlsZSBkaXJlY3RlZCB0byBhIFN0cmluZ0lPLgogCiAgICAgICAgICAgICBzZWxmLmNoZWNrKGV4cGVjdGVkLCBhcmdzLCBzZXA9c2VwLCBlbmQ9ZW5kKQogCkBAIC0xMDEsMTEgKzk0LDYgQEAKICAgICAgICAgeCgnKlxuJywgKENsYXNzV2l0aF9fc3RyX18oJyonKSwpKQogICAgICAgICB4KCdhYmMgMVxuJywgKENsYXNzV2l0aF9fc3RyX18oJ2FiYycpLCAxKSkKIAotIyAgICAgICAgIyAyLnggdW5pY29kZSB0ZXN0cwotIyAgICAgICAgeCh1JzEgMlxuJywgKCcxJywgdScyJykpCi0jICAgICAgICB4KHUndVwxMjM0XG4nLCAodSd1XDEyMzQnLCkpCi0jICAgICAgICB4KHUnICBhYmMgMVxuJywgKCcgJywgQ2xhc3NXaXRoX19zdHJfXyh1J2FiYycpLCAxKSkKLQogICAgICAgICAjIGVycm9ycwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByaW50LCAnJywgc2VwPTMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJpbnQsICcnLCBlbmQ9MykKQEAgLTExMywxMiArMTAxLDE0IEBACiAKICAgICBkZWYgdGVzdF9wcmludF9mbHVzaChzZWxmKToKICAgICAgICAgIyBvcGVyYXRpb24gb2YgdGhlIGZsdXNoIGZsYWcKLSAgICAgICAgY2xhc3MgZmlsZWxpa2UoKToKKyAgICAgICAgY2xhc3MgZmlsZWxpa2U6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0dGVuID0gJycKICAgICAgICAgICAgICAgICBzZWxmLmZsdXNoZWQgPSAwCisKICAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBzdHIpOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdHRlbiArPSBzdHIKKwogICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgogICAgICAgICAgICAgICAgIHNlbGYuZmx1c2hlZCArPSAxCiAKQEAgLTEzMCwxNSArMTIwLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5mbHVzaGVkLCAyKQogCiAgICAgICAgICMgZW5zdXJlIGV4Y2VwdGlvbnMgZnJvbSBmbHVzaCBhcmUgcGFzc2VkIHRocm91Z2gKLSAgICAgICAgY2xhc3Mgbm9mbHVzaCgpOgorICAgICAgICBjbGFzcyBub2ZsdXNoOgogICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIHN0cik6CiAgICAgICAgICAgICAgICAgcGFzcworCiAgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcHJpbnQsIDEsIGZpbGU9bm9mbHVzaCgpLCBmbHVzaD1UcnVlKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFByaW50KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKaW5kZXggY2Q3ZWM1OC4uMWZjM2M0MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQpAQCAtMyw5ICszLDExIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgcHN0YXRzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcwogZnJvbSBkaWZmbGliIGltcG9ydCB1bmlmaWVkX2RpZmYKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIHVubGluaworZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgogCiBpbXBvcnQgcHJvZmlsZQogZnJvbSB0ZXN0LnByb2ZpbGVlIGltcG9ydCB0ZXN0ZnVuYywgdGltZXIKQEAgLTE0LDkgKzE2LDEzIEBACiBjbGFzcyBQcm9maWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBwcm9maWxlcmNsYXNzID0gcHJvZmlsZS5Qcm9maWxlCisgICAgcHJvZmlsZXJtb2R1bGUgPSBwcm9maWxlCiAgICAgbWV0aG9kbmFtZXMgPSBbJ3ByaW50X3N0YXRzJywgJ3ByaW50X2NhbGxlcnMnLCAncHJpbnRfY2FsbGVlcyddCiAgICAgZXhwZWN0ZWRfbWF4X291dHB1dCA9ICc6MChtYXgpJwogCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB1bmxpbmsoVEVTVEZOKQorCiAgICAgZGVmIGdldF9leHBlY3RlZF9vdXRwdXQoc2VsZik6CiAgICAgICAgIHJldHVybiBfUHJvZmlsZU91dHB1dAogCkBAIC03NCw2ICs4MCwxOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmV4cGVjdGVkX21heF9vdXRwdXQsIHJlcywKICAgICAgICAgICAgICAgICAiUHJvZmlsaW5nIHswIXJ9IGRpZG4ndCByZXBvcnQgbWF4OlxuezF9Ii5mb3JtYXQoc3RtdCwgcmVzKSkKIAorICAgIGRlZiB0ZXN0X3J1bihzZWxmKToKKyAgICAgICAgd2l0aCBzaWxlbnQoKToKKyAgICAgICAgICAgIHNlbGYucHJvZmlsZXJtb2R1bGUucnVuKCJpbnQoJzEnKSIpCisgICAgICAgIHNlbGYucHJvZmlsZXJtb2R1bGUucnVuKCJpbnQoJzEnKSIsIGZpbGVuYW1lPVRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKFRFU1RGTikpCisKKyAgICBkZWYgdGVzdF9ydW5jdHgoc2VsZik6CisgICAgICAgIHdpdGggc2lsZW50KCk6CisgICAgICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bmN0eCgidGVzdGZ1bmMoKSIsIGdsb2JhbHMoKSwgbG9jYWxzKCkpCisgICAgICAgIHNlbGYucHJvZmlsZXJtb2R1bGUucnVuY3R4KCJ0ZXN0ZnVuYygpIiwgZ2xvYmFscygpLCBsb2NhbHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT1URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQorCiAKIGRlZiByZWdlbmVyYXRlX2V4cGVjdGVkX291dHB1dChmaWxlbmFtZSwgY2xzKToKICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJzdHJpcCgnY28nKQpAQCAtOTUsNiArMTE0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCwgcmVzdWx0c1tpKzFdKSkKICAgICAgICAgZi53cml0ZSgnXG5pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOlxuICAgIG1haW4oKVxuJykKIAorQGNvbnRleHRtYW5hZ2VyCitkZWYgc2lsZW50KCk6CisgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgIHRyeToKKyAgICAgICAgc3lzLnN0ZG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoUHJvZmlsZVRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B0eS5weSBiL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CmluZGV4IDI5Mjk3ZjguLjg5MTY4NjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CkBAIC0xODcsNyArMTg3LDcgQEAKICAgICAgICAgICAgICMjZGVidWcoIlJlYWRpbmcgZnJvbSBtYXN0ZXJfZmQgbm93IHRoYXQgdGhlIGNoaWxkIGhhcyBleGl0ZWQiKQogICAgICAgICAgICAgIyN0cnk6CiAgICAgICAgICAgICAjIyAgICBzMSA9IG9zLnJlYWQobWFzdGVyX2ZkLCAxMDI0KQotICAgICAgICAgICAgIyNleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAjI2V4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyMgICAgcGFzcwogICAgICAgICAgICAgIyNlbHNlOgogICAgICAgICAgICAgIyMgICAgcmFpc2UgVGVzdEZhaWxlZCgiUmVhZCBmcm9tIG1hc3Rlcl9mZCBkaWQgbm90IHJhaXNlIGV4Y2VwdGlvbiIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKaW5kZXggZjNjMWE2YS4uMTM4ZjE3MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQpAQCAtMSwxMSArMSwxMyBAQAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKwogCiBjbGFzcyBQeUNvbXBpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTEzLDcgKzE1LDcgQEAKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKICAgICAgICAgc2VsZi5weWNfcGF0aCA9IHNlbGYuc291cmNlX3BhdGggKyAnYycKLSAgICAgICAgc2VsZi5jYWNoZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuY2FjaGVfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHNlbGYuY3dkX2RyaXZlID0gb3MucGF0aC5zcGxpdGRyaXZlKG9zLmdldGN3ZCgpKVswXQogICAgICAgICAjIEluIHRoZXNlIHRlc3RzIHdlIGNvbXB1dGUgcmVsYXRpdmUgcGF0aHMuICBXaGVuIHVzaW5nIFdpbmRvd3MsIHRoZQogICAgICAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgcGF0aCBhbmQgdGhlICdzZWxmLnNvdXJjZV9wYXRoJyBtaWdodCBiZQpAQCAtMzUsNiArMzcsMjYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucHljX3BhdGgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVfcGF0aCkpCiAKKyAgICBkZWYgdGVzdF9kb19ub3Rfb3ZlcndyaXRlX3N5bWxpbmtzKHNlbGYpOgorICAgICAgICAjIEluIHRoZSBmYWNlIG9mIGEgY2ZpbGUgYXJndW1lbnQgYmVpbmcgYSBzeW1saW5rLCBiYWlsIG91dC4KKyAgICAgICAgIyBJc3N1ZSAjMTcyMjIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Muc3ltbGluayhzZWxmLnB5Y19wYXRoICsgJy5hY3R1YWwnLCBzZWxmLnB5Y19wYXRoKQorICAgICAgICBleGNlcHQgKE5vdEltcGxlbWVudGVkRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbmVlZCB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIHN5bWxpbmsgZm9yIGEgZmlsZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2xpbmsoc2VsZi5weWNfcGF0aCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgc2VsZi5weWNfcGF0aCkKKworICAgIEB1bml0dGVzdC5za2lwSWYobm90IG9zLnBhdGguZXhpc3RzKG9zLmRldm51bGwpIG9yIG9zLnBhdGguaXNmaWxlKG9zLmRldm51bGwpLAorICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIG9zLmRldm51bGwgYW5kIGZvciBpdCB0byBiZSBhIG5vbi1yZWd1bGFyIGZpbGUnKQorICAgIGRlZiB0ZXN0X2RvX25vdF9vdmVyd3JpdGVfbm9ucmVndWxhcl9maWxlcyhzZWxmKToKKyAgICAgICAgIyBJbiB0aGUgZmFjZSBvZiBhIGNmaWxlIGFyZ3VtZW50IGJlaW5nIGEgbm9uLXJlZ3VsYXIgZmlsZSwgYmFpbCBvdXQuCisgICAgICAgICMgSXNzdWUgIzE3MjIyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBvcy5kZXZudWxsKQorCiAgICAgZGVmIHRlc3RfY2FjaGVfcGF0aChzZWxmKToKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLmNhY2hlX3BhdGgpKQpAQCAtNTQsOCArNzYsMjggQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucHljX3BhdGgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVfcGF0aCkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQeUNvbXBpbGVUZXN0cykKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIob3MsICdnZXRldWlkJykgYW5kIG9zLmdldGV1aWQoKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgJ25vbi1yb290IHVzZXIgcmVxdWlyZWQnKQorICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLAorICAgICAgICAgICAgICAgICAgICAgJ2Nhbm5vdCBjb250cm9sIGRpcmVjdG9yeSBwZXJtaXNzaW9ucyBvbiBXaW5kb3dzJykKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zX3Byb3BhZ2F0ZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBleGNlcHRpb25zIHJhaXNlZCB0aGFua3MgdG8gaXNzdWVzIHdpdGggd3JpdGluZworICAgICAgICAjIGJ5dGVjb2RlLgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzI0NAorICAgICAgICBtb2RlID0gb3Muc3RhdChzZWxmLmRpcmVjdG9yeSkKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5kaXJlY3RvcnksIHN0YXQuU19JUkVBRCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgc2VsZi5weWNfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNobW9kKHNlbGYuZGlyZWN0b3J5LCBtb2RlLnN0X21vZGUpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBiYWRfY29kaW5nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdiYWRfY29kaW5nMi5weScpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHB5X2NvbXBpbGUuY29tcGlsZShiYWRfY29kaW5nLCBkb3JhaXNlPUZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cygKKyAgICAgICAgICAgIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhZF9jb2RpbmcpKSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkgYi9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQppbmRleCBlODM5ODllLi44OGFmZjg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ3B5Y2xicicpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2FzdCcpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RvY3Rlc3QnLCBpZ25vcmU9KCJUZXN0UmVzdWx0cyIsICJfU3Bvb2ZPdXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG9jVGVzdENhc2UiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvY1Rlc3RDYXNlIiwgJ19Eb2NUZXN0U3VpdGUnKSkKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZGlmZmxpYicsIGlnbm9yZT0oIk1hdGNoIiwpKQogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9ycyhzZWxmKToKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgICBjbSgncmFuZG9tJywgaWdub3JlPSgnUmFuZG9tJywpKSAgIyBmcm9tIF9yYW5kb20gaW1wb3J0IFJhbmRvbSBhcyBDb3JlR2VuZXJhdG9yCiAgICAgICAgIGNtKCdjZ2knLCBpZ25vcmU9KCdsb2cnLCkpICAgICAgIyBzZXQgd2l0aCA9IGluIG1vZHVsZQogICAgICAgICBjbSgncGlja2xlJykKLSAgICAgICAgY20oJ2FpZmMnLCBpZ25vcmU9KCdvcGVuZnAnLCkpICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCisgICAgICAgIGNtKCdhaWZjJywgaWdub3JlPSgnb3BlbmZwJywgJ19haWZjX3BhcmFtcycpKSAgIyBzZXQgd2l0aCA9IGluIG1vZHVsZQogICAgICAgICBjbSgnc3JlX3BhcnNlJywgaWdub3JlPSgnZHVtcCcsKSkgIyBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKICAgICAgICAgY20oJ3BkYicpCiAgICAgICAgIGNtKCdweWRvYycpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5IGIvTGliL3Rlc3QvdGVzdF9weWRvYy5weQppbmRleCBjZTQ2ZDYwLi44YmY5YjIwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKQEAgLTYsMTIgKzYsMTUgQEAKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgcHlkb2MKIGltcG9ydCBrZXl3b3JkCitpbXBvcnQgX3BpY2tsZQogaW1wb3J0IHBrZ3V0aWwKIGltcG9ydCByZQogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHRpbWUKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdXJsbGliLnBhcnNlCiBpbXBvcnQgeG1sLmV0cmVlCiBpbXBvcnQgdGV4dHdyYXAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCkBAIC0yMCw3ICsyMyw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKAogICAgIFRFU1RGTiwgcm10cmVlLAogICAgIHJlYXBfY2hpbGRyZW4sIHJlYXBfdGhyZWFkcywgY2FwdHVyZWRfb3V0cHV0LCBjYXB0dXJlZF9zdGRvdXQsCi0gICAgY2FwdHVyZWRfc3RkZXJyLCB1bmxpbmsKKyAgICBjYXB0dXJlZF9zdGRlcnIsIHVubGluaywgcmVxdWlyZXNfZG9jc3RyaW5ncwogKQogZnJvbSB0ZXN0IGltcG9ydCBweWRvY19tb2QKIApAQCAtMjksMTAgKzMyLDYgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKLSMgSnVzdCBpbiBjYXNlIHN5cy5tb2R1bGVzWyJ0ZXN0Il0gaGFzIHRoZSBvcHRpb25hbCBhdHRyaWJ1dGUgX19sb2FkZXJfXy4KLWlmIGhhc2F0dHIocHlkb2NfbW9kLCAiX19sb2FkZXJfXyIpOgotICAgIGRlbCBweWRvY19tb2QuX19sb2FkZXJfXwotCiBpZiB0ZXN0LnN1cHBvcnQuSEFWRV9ET0NTVFJJTkdTOgogICAgIGV4cGVjdGVkX2RhdGFfZG9jc3RyaW5ncyA9ICgKICAgICAgICAgJ2RpY3Rpb25hcnkgZm9yIGluc3RhbmNlIHZhcmlhYmxlcyAoaWYgZGVmaW5lZCknLApAQCAtNDksNiArNDgsNyBAQAogICAgIGJ1aWx0aW5zLm9iamVjdAogICAgICAgICBBCiAgICAgICAgIEIKKyAgICAgICAgQwogXHgyMFx4MjBceDIwXHgyMAogICAgIGNsYXNzIEEoYnVpbHRpbnMub2JqZWN0KQogICAgICB8ICBIZWxsbyBhbmQgZ29vZGJ5ZQpAQCAtNzYsNiArNzYsMjYgQEAKICAgICAgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CiAgICAgIHxceDIwXHgyMAogICAgICB8ICBOT19NRUFOSU5HID0gJ2VnZ3MnCitceDIwXHgyMFx4MjBceDIwCisgICAgY2xhc3MgQyhidWlsdGlucy5vYmplY3QpCisgICAgIHwgIE1ldGhvZHMgZGVmaW5lZCBoZXJlOgorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgZ2V0X2Fuc3dlcihzZWxmKQorICAgICB8ICAgICAgUmV0dXJuIHNheV9ubygpCisgICAgIHxceDIwXHgyMAorICAgICB8ICBpc19pdF90cnVlKHNlbGYpCisgICAgIHwgICAgICBSZXR1cm4gc2VsZi5nZXRfYW5zd2VyKCkKKyAgICAgfFx4MjBceDIwCisgICAgIHwgIHNheV9ubyhzZWxmKQorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICB8ICBEYXRhIGRlc2NyaXB0b3JzIGRlZmluZWQgaGVyZToKKyAgICAgfFx4MjBceDIwCisgICAgIHwgIF9fZGljdF9fCisgICAgIHwgICAgICBkaWN0aW9uYXJ5IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMgKGlmIGRlZmluZWQpCisgICAgIHxceDIwXHgyMAorICAgICB8ICBfX3dlYWtyZWZfXworICAgICB8ICAgICAgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gdGhlIG9iamVjdCAoaWYgZGVmaW5lZCkKIAogRlVOQ1RJT05TCiAgICAgZG9jX2Z1bmMoKQpAQCAtMTI2LDYgKzE0Niw3IEBACiA8ZGw+CiA8ZHQ+PGZvbnQgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgaHJlZj0idGVzdC5weWRvY19tb2QuaHRtbCNBIj5BPC9hPgogPC9mb250PjwvZHQ+PGR0Pjxmb250IGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPjxhIGhyZWY9InRlc3QucHlkb2NfbW9kLmh0bWwjQiI+QjwvYT4KKzwvZm9udD48L2R0PjxkdD48Zm9udCBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YSBocmVmPSJ0ZXN0LnB5ZG9jX21vZC5odG1sI0MiPkM8L2E+CiA8L2ZvbnQ+PC9kdD48L2RsPgogPC9kZD4KIDwvZGw+CkBAIC0xNjcsNiArMTg4LDI4IEBACiBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZTo8YnI+CiA8ZGw+PGR0PjxzdHJvbmc+Tk9fTUVBTklORzwvc3Ryb25nPiA9ICdlZ2dzJzwvZGw+CiAKKzwvdGQ+PC90cj48L3RhYmxlPiA8cD4KKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KKzx0ciBiZ2NvbG9yPSIjZmZjOGQ4Ij4KKzx0ZCBjb2xzcGFuPTMgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgbmFtZT0iQyI+Y2xhc3MgPHN0cm9uZz5DPC9zdHJvbmc+PC9hPig8YSBocmVmPSJidWlsdGlucy5odG1sI29iamVjdCI+YnVpbHRpbnMub2JqZWN0PC9hPik8L2ZvbnQ+PC90ZD48L3RyPgorXHgyMFx4MjBceDIwXHgyMAorPHRyPjx0ZCBiZ2NvbG9yPSIjZmZjOGQ4Ij48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90dD48L3RkPjx0ZD4mbmJzcDs8L3RkPgorPHRkIHdpZHRoPSIxMDAlJSI+TWV0aG9kcyBkZWZpbmVkIGhlcmU6PGJyPgorPGRsPjxkdD48YSBuYW1lPSJDLWdldF9hbnN3ZXIiPjxzdHJvbmc+Z2V0X2Fuc3dlcjwvc3Ryb25nPjwvYT4oc2VsZik8L2R0PjxkZD48dHQ+UmV0dXJuJm5ic3A7PGEgaHJlZj0iI0Mtc2F5X25vIj5zYXlfbm88L2E+KCk8L3R0PjwvZGQ+PC9kbD4KKworPGRsPjxkdD48YSBuYW1lPSJDLWlzX2l0X3RydWUiPjxzdHJvbmc+aXNfaXRfdHJ1ZTwvc3Ryb25nPjwvYT4oc2VsZik8L2R0PjxkZD48dHQ+UmV0dXJuJm5ic3A7c2VsZi48YSBocmVmPSIjQy1nZXRfYW5zd2VyIj5nZXRfYW5zd2VyPC9hPigpPC90dD48L2RkPjwvZGw+CisKKzxkbD48ZHQ+PGEgbmFtZT0iQy1zYXlfbm8iPjxzdHJvbmc+c2F5X25vPC9zdHJvbmc+PC9hPihzZWxmKTwvZHQ+PC9kbD4KKworPGhyPgorRGF0YSBkZXNjcmlwdG9ycyBkZWZpbmVkIGhlcmU6PGJyPgorPGRsPjxkdD48c3Ryb25nPl9fZGljdF9fPC9zdHJvbmc+PC9kdD4KKzxkZD48dHQ+ZGljdGlvbmFyeSZuYnNwO2ZvciZuYnNwO2luc3RhbmNlJm5ic3A7dmFyaWFibGVzJm5ic3A7KGlmJm5ic3A7ZGVmaW5lZCk8L3R0PjwvZGQ+Cis8L2RsPgorPGRsPjxkdD48c3Ryb25nPl9fd2Vha3JlZl9fPC9zdHJvbmc+PC9kdD4KKzxkZD48dHQ+bGlzdCZuYnNwO29mJm5ic3A7d2VhayZuYnNwO3JlZmVyZW5jZXMmbmJzcDt0byZuYnNwO3RoZSZuYnNwO29iamVjdCZuYnNwOyhpZiZuYnNwO2RlZmluZWQpPC90dD48L2RkPgorPC9kbD4KIDwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPjxwPgogPHRhYmxlIHdpZHRoPSIxMDAlJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGJvcmRlcj0wIHN1bW1hcnk9InNlY3Rpb24iPgogPHRyIGJnY29sb3I9IiNlZWFhNzciPgpAQCAtMjEyLDYgKzI1NSw3NSBAQAogIyBvdXRwdXQgcGF0dGVybiBmb3IgbW9kdWxlIHdpdGggYmFkIGltcG9ydHMKIGJhZGltcG9ydF9wYXR0ZXJuID0gInByb2JsZW0gaW4gJXMgLSBJbXBvcnRFcnJvcjogTm8gbW9kdWxlIG5hbWVkICVyIgogCitleHBlY3RlZF9keW5hbWljYXR0cmlidXRlX3BhdHRlcm4gPSAiIiIKK0hlbHAgb24gY2xhc3MgREEgaW4gbW9kdWxlICVzOgorCitjbGFzcyBEQShidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgX19kaWN0X18lcworIHxceDIwXHgyMAorIHwgIF9fd2Vha3JlZl9fJXMKKyB8XHgyMFx4MjAKKyB8ICBoYW0KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhOgorIHxceDIwXHgyMAorIHwgIGhhbSA9ICdzcGFtJworIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMSA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzcyBpbiBtb2R1bGUgJXM6CisKK2NsYXNzIENsYXNzKGJ1aWx0aW5zLm9iamVjdCkKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGE6CisgfFx4MjBceDIwCisgfCAgTElGRSA9IDQyCisiIiIuc3RyaXAoKQorCitleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4yID0gIiIiCitIZWxwIG9uIGNsYXNzIENsYXNzMSBpbiBtb2R1bGUgJXM6CisKK2NsYXNzIENsYXNzMShidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhMToKKyB8XHgyMFx4MjAKKyB8ICBvbmUgPSAxCisiIiIuc3RyaXAoKQorCitleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4zID0gIiIiCitIZWxwIG9uIGNsYXNzIENsYXNzMiBpbiBtb2R1bGUgJXM6CisKK2NsYXNzIENsYXNzMihDbGFzczEpCisgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CisgfCAgICAgIENsYXNzMgorIHwgICAgICBDbGFzczEKKyB8ICAgICAgYnVpbHRpbnMub2JqZWN0CisgfFx4MjBceDIwCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhMToKKyB8XHgyMFx4MjAKKyB8ICBvbmUgPSAxCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTM6CisgfFx4MjBceDIwCisgfCAgdGhyZWUgPSAzCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTI6CisgfFx4MjBceDIwCisgfCAgdHdvID0gMgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfbWlzc2luZ2F0dHJpYnV0ZV9wYXR0ZXJuID0gIiIiCitIZWxwIG9uIGNsYXNzIEMgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDKGJ1aWx0aW5zLm9iamVjdCkKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyB8XHgyMFx4MjAKKyB8ICBoZXJlID0gJ3ByZXNlbnQhJworIiIiLnN0cmlwKCkKKwogZGVmIHJ1bl9weWRvYyhtb2R1bGVfbmFtZSwgKmFyZ3MsICoqZW52KToKICAgICAiIiIKICAgICBSdW5zIHB5ZG9jIG9uIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBSZXR1cm5zIHRoZSBzdHJpcHBlZApAQCAtMjkxLDE0ICs0MDMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfaHRtbF9kb2Moc2VsZik6CiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY19odG1sKHB5ZG9jX21vZCkKICAgICAgICAgbW9kX2ZpbGUgPSBpbnNwZWN0LmdldGFic2ZpbGUocHlkb2NfbW9kKQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIGltcG9ydCBudHVybDJwYXRoCi0gICAgICAgICAgICBtb2RfdXJsID0gbnR1cmwycGF0aC5wYXRobmFtZTJ1cmwobW9kX2ZpbGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2RfdXJsID0gbW9kX2ZpbGUKKyAgICAgICAgbW9kX3VybCA9IHVybGxpYi5wYXJzZS5xdW90ZShtb2RfZmlsZSkKICAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IGV4cGVjdGVkX2h0bWxfcGF0dGVybiAlICgKICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RfdXJsLCBtb2RfZmlsZSwgZG9jX2xvYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaHRtbF9kYXRhX2RvY3N0cmluZ3MpCkBAIC0zMTAsNiArNDE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfdGV4dF9kb2Moc2VsZik6CiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHB5ZG9jX21vZCkKICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX3RleHRfcGF0dGVybiAlICgKQEAgLTMyMCwxMSArNDMwLDI5IEBACiAgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQogCisgICAgZGVmIHRlc3RfdGV4dF9lbnVtX21lbWJlcl93aXRoX3ZhbHVlX3plcm8oc2VsZik6CisgICAgICAgICMgVGVzdCBpc3N1ZSAjMjA2NTQgdG8gZW5zdXJlIGVudW0gbWVtYmVyIHdpdGggdmFsdWUgMCBjYW4gYmUKKyAgICAgICAgIyBkaXNwbGF5ZWQuIEl0IHVzZWQgdG8gdGhyb3cgS2V5RXJyb3I6ICd6ZXJvJy4KKyAgICAgICAgaW1wb3J0IGVudW0KKyAgICAgICAgY2xhc3MgQmluYXJ5SW50ZWdlcihlbnVtLkludEVudW0pOgorICAgICAgICAgICAgemVybyA9IDAKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgZG9jID0gcHlkb2MucmVuZGVyX2RvYyhCaW5hcnlJbnRlZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEluKCc8QmluYXJ5SW50ZWdlci56ZXJvOiAwPicsIGRvYykKKwogICAgIGRlZiB0ZXN0X2lzc3VlODIyNShzZWxmKToKICAgICAgICAgIyBUZXN0IGlzc3VlODIyNSB0byBlbnN1cmUgbm8gZG9jIGxpbmsgYXBwZWFycyBmb3IgeG1sLmV0cmVlCiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHhtbC5ldHJlZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb2NfbG9jLCAiIiwgIk1PRFVMRSBET0NTIGluY29ycmVjdGx5IGluY2x1ZGVzIGEgbGluayIpCiAKKyAgICBkZWYgdGVzdF9nZXRwYWdlcl93aXRoX3N0ZGluX25vbmUoc2VsZik6CisgICAgICAgIHByZXZpb3VzX3N0ZGluID0gc3lzLnN0ZGluCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IE5vbmUKKyAgICAgICAgICAgIHB5ZG9jLmdldHBhZ2VyKCkgIyBTaG91bGRuJ3QgZmFpbC4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IHByZXZpb3VzX3N0ZGluCisKICAgICBkZWYgdGVzdF9ub25fc3RyX25hbWUoc2VsZik6CiAgICAgICAgICMgaXNzdWUxNDYzOAogICAgICAgICAjIFRyZWF0IGlsbGVnYWwgKG5vbi1zdHIpIG5hbWUgbGlrZSBubyBuYW1lCkBAIC0zNjYsNiArNDk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICdEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZScpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfaGVscF9vdXRwdXRfcmVkaXJlY3Qoc2VsZik6CiAgICAgICAgICMgaXNzdWUgOTQwMjg2LCBpZiBvdXRwdXQgaXMgc2V0IGluIEhlbHBlciwgdGhlbiBhbGwgb3V0cHV0IGZyb20KICAgICAgICAgIyBIZWxwZXIuaGVscCBzaG91bGQgYmUgcmVkaXJlY3RlZApAQCAtNDIxLDYgKzU1MCwzOCBAQAogICAgICAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhURVNURk4sIHt9KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeW5vcHNpcywgJ2xpbmUgMTogaFx4ZTknKQogCisgICAgZGVmIHRlc3Rfc3lub3BzaXNfc291cmNlbGVzcyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSBvcy5fX2RvY19fLnNwbGl0bGluZXMoKVswXQorICAgICAgICBmaWxlbmFtZSA9IG9zLl9fY2FjaGVkX18KKyAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhmaWxlbmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5bm9wc2lzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NwbGl0ZG9jX3dpdGhfZGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIGV4YW1wbGVfc3RyaW5nID0gIkkgQW0gQSBEb2NcblxuXG5IZXJlIGlzIG15IGRlc2NyaXB0aW9uIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLnNwbGl0ZG9jKGV4YW1wbGVfc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ0kgQW0gQSBEb2MnLCAnXG5IZXJlIGlzIG15IGRlc2NyaXB0aW9uJykpCisKKyAgICBkZWYgdGVzdF9pc19vYmplY3Rfb3JfbWV0aG9kKHNlbGYpOgorICAgICAgICBkb2MgPSBweWRvYy5Eb2MoKQorICAgICAgICAjIEJvdW5kIE1ldGhvZAorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuX2lzX3NvbWVfbWV0aG9kKGRvYy5mYWlsKSkKKyAgICAgICAgIyBNZXRob2QgRGVzY3JpcHRvcgorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuX2lzX3NvbWVfbWV0aG9kKGludC5fX2FkZF9fKSkKKyAgICAgICAgIyBTdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShweWRvYy5faXNfc29tZV9tZXRob2QoIkkgYW0gbm90IGEgbWV0aG9kIikpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlX3doZW5fbm90X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdGVzdF9kaXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB5ZG9jLmlzcGFja2FnZSh0ZXN0X2RpcikpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlX3doZW5faXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0ZXN0X2RpcjoKKyAgICAgICAgICAgIGluaXRfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgIG9wZW4oaW5pdF9wYXRoLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShweWRvYy5pc3BhY2thZ2UodGVzdF9kaXIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKGluaXRfcGF0aCkKKwogICAgIGRlZiB0ZXN0X2FsbG1ldGhvZHMoc2VsZik6CiAgICAgICAgICMgaXNzdWUgMTc0NzY6IGFsbG1ldGhvZHMgd2FzIG5vIGxvbmdlciByZXR1cm5pbmcgdW5ib3VuZCBtZXRob2RzLgogICAgICAgICAjIFRoaXMgdGVzdCBpcyBhIGJpdCBmcmFnaWxlIGluIHRoZSBmYWNlIG9mIGNoYW5nZXMgdG8gb2JqZWN0IGFuZCB0eXBlLApAQCAtNTA5LDYgKzY3MCw1NSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0dmFsdWUoKSwgJycpCiAKKyAgICBAdW5pdHRlc3Quc2tpcCgnY2F1c2VzIHVuZGVzaXJlYWJsZSBzaWRlLWVmZmVjdHMgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXMoc2VsZik6CisgICAgICAgICMgU2VlIEhlbHBlci5saXN0bW9kdWxlcygpLgorICAgICAgICBudW1faGVhZGVyX2xpbmVzID0gMgorICAgICAgICBudW1fbW9kdWxlX2xpbmVzX21pbiA9IDUgICMgUGxheWluZyBpdCBzYWZlLgorICAgICAgICBudW1fZm9vdGVyX2xpbmVzID0gMworICAgICAgICBleHBlY3RlZCA9IG51bV9oZWFkZXJfbGluZXMgKyBudW1fbW9kdWxlX2xpbmVzX21pbiArIG51bV9mb290ZXJfbGluZXMKKworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoJ21vZHVsZXMnKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIG51bV9saW5lcyA9IGxlbihyZXN1bHQuc3BsaXRsaW5lcygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bV9saW5lcywgZXhwZWN0ZWQpCisKKyAgICBAdW5pdHRlc3Quc2tpcCgnY2F1c2VzIHVuZGVzaXJlYWJsZSBzaWRlLWVmZmVjdHMgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXNfc2VhcmNoKHNlbGYpOgorICAgICAgICAjIFNlZSBIZWxwZXIubGlzdG1vZHVsZXMoKS4KKyAgICAgICAgZXhwZWN0ZWQgPSAncHlkb2MgLSAnCisKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBoZWxwX2lvOgorICAgICAgICAgICAgaGVscGVyKCdtb2R1bGVzIHB5ZG9jJykKKyAgICAgICAgcmVzdWx0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgcmVzdWx0KQorCisgICAgQHVuaXR0ZXN0LnNraXAoJ3NvbWUgYnVpbGRib3RzIGFyZSBub3QgY29vcGVyYXRpbmcgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXNfc2VhcmNoX2J1aWx0aW4oc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ2djIC0gJworCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgaGVscF9pbzoKKyAgICAgICAgICAgIGhlbHBlcignbW9kdWxlcyBnYXJiYWdlJykKKyAgICAgICAgcmVzdWx0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zdGFydHN3aXRoKGV4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X2ltcG9ydGZpbGUoc2VsZik6CisgICAgICAgIGxvYWRlZF9weWRvYyA9IHB5ZG9jLmltcG9ydGZpbGUocHlkb2MuX19maWxlX18pCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb2FkZWRfcHlkb2MsIHB5ZG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9weWRvYy5fX25hbWVfXywgJ3B5ZG9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWRfcHlkb2MuX19maWxlX18sIHB5ZG9jLl9fZmlsZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9weWRvYy5fX3NwZWNfXywgcHlkb2MuX19zcGVjX18pCisKIAogY2xhc3MgVGVzdERlc2NyaXB0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTUzNiw3ICs3NDYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB5ZG9jLnJlbmRlcl9kb2MobmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZpbmRpbmcgdGhlIGRvYyBvZiB7IXJ9IGZhaWxlZCcuZm9ybWF0KG8pKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmluZGluZyB0aGUgZG9jIG9mIHshcn0gZmFpbGVkJy5mb3JtYXQobmFtZSkpCiAKICAgICAgICAgZm9yIG5hbWUgaW4gKCdub3RidWlsdGlucycsICdzdHJycicsICdzdHJyLnRyYW5zbGF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAnc3RyLnRycnJyYW5zbGF0ZScsICdidWlsdGlucy5zdHJycicsCkBAIC01NDQsNiArNzU0LDQyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShweWRvYy5sb2NhdGUobmFtZSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgcHlkb2MucmVuZGVyX2RvYywgbmFtZSkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9zdW1tYXJ5X2xpbmUobyk6CisgICAgICAgIHRleHQgPSBweWRvYy5wbGFpbihweWRvYy5yZW5kZXJfZG9jKG8pKQorICAgICAgICBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJykKKyAgICAgICAgYXNzZXJ0IGxlbihsaW5lcykgPj0gMgorICAgICAgICByZXR1cm4gbGluZXNbMl0KKworICAgICMgdGhlc2Ugc2hvdWxkIGluY2x1ZGUgInNlbGYiCisgICAgZGVmIHRlc3RfdW5ib3VuZF9weXRob25fbWV0aG9kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUodGV4dHdyYXAuVGV4dFdyYXBwZXIud3JhcCksCisgICAgICAgICAgICAid3JhcChzZWxmLCB0ZXh0KSIpCisKKyAgICBAcmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X3VuYm91bmRfYnVpbHRpbl9tZXRob2Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZ2V0X3N1bW1hcnlfbGluZShfcGlja2xlLlBpY2tsZXIuZHVtcCksCisgICAgICAgICAgICAiZHVtcChzZWxmLCBvYmosIC8pIikKKworICAgICMgdGhlc2Ugbm8gbG9uZ2VyIGluY2x1ZGUgInNlbGYiCisgICAgZGVmIHRlc3RfYm91bmRfcHl0aG9uX21ldGhvZChzZWxmKToKKyAgICAgICAgdCA9IHRleHR3cmFwLlRleHRXcmFwcGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZXRfc3VtbWFyeV9saW5lKHQud3JhcCksCisgICAgICAgICAgICAid3JhcCh0ZXh0KSBtZXRob2Qgb2YgdGV4dHdyYXAuVGV4dFdyYXBwZXIgaW5zdGFuY2UiKQorCisgICAgQHJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9ib3VuZF9idWlsdGluX21ldGhvZChzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgcCA9IF9waWNrbGUuUGlja2xlcihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUocC5kdW1wKSwKKyAgICAgICAgICAgICJkdW1wKG9iaiwgLykgbWV0aG9kIG9mIF9waWNrbGUuUGlja2xlciBpbnN0YW5jZSIpCisKKyAgICAjIHRoaXMgc2hvdWxkICpuZXZlciogaW5jbHVkZSBzZWxmIQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfbW9kdWxlX2xldmVsX2NhbGxhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUob3Muc3RhdCksCisgICAgICAgICAgICAic3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpIikKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgUHlkb2NTZXJ2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTYxNyw2ICs4NjMsMTI4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHB5ZG9jLkhlbHBlci5rZXl3b3JkcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkKGtleXdvcmQua3dsaXN0KSkKIAorY2xhc3MgUHlkb2NXaXRoTWV0YUNsYXNzZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF9EeW5hbWljQ2xhc3NBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnaGFtJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzcGFtJworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIERBKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIEB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBoYW0oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdlZ2dzJworICAgICAgICBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5ncyA9IHR1cGxlKCdcbiB8ICAgICAgJyArIHMgaWYgcyBlbHNlICcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIGV4cGVjdGVkX2RhdGFfZG9jc3RyaW5ncykKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKERBKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfZHluYW1pY2F0dHJpYnV0ZV9wYXR0ZXJuICUgKAorICAgICAgICAgICAgICAgIChfX25hbWVfXywpICsgZXhwZWN0ZWRfdGV4dF9kYXRhX2RvY3N0cmluZ3NbOjJdKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF92aXJ0dWFsQ2xhc3NBdHRyaWJ1dGVXaXRoT25lTWV0YShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnTElGRSddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSdMSUZFJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyKG5hbWUpCisgICAgICAgIGNsYXNzIENsYXNzKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMSAlIF9fbmFtZV9fCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X3ZpcnR1YWxDbGFzc0F0dHJpYnV0ZVdpdGhUd29NZXRhKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhMSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnb25lJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J29uZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTIodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3R3byddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0d28nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIE1ldGEzKE1ldGExLCBNZXRhMik6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KHNvcnRlZChzZXQoCisgICAgICAgICAgICAgICAgICAgIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndGhyZWUnXSArCisgICAgICAgICAgICAgICAgICAgIE1ldGExLl9fZGlyX18oY2xzKSArIE1ldGEyLl9fZGlyX18oY2xzKSkpKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0ndGhyZWUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIENsYXNzMShtZXRhY2xhc3M9TWV0YTEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDbGFzczIoQ2xhc3MxLCBtZXRhY2xhc3M9TWV0YTMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmYWlsMSA9IGZhaWwyID0gRmFsc2UKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzMSkKKyAgICAgICAgZXhwZWN0ZWRfdGV4dDEgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4yICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0MSA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0MSAhPSBleHBlY3RlZF90ZXh0MToKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQxLCByZXN1bHQxKQorICAgICAgICAgICAgZmFpbDEgPSBUcnVlCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDbGFzczIpCisgICAgICAgIGV4cGVjdGVkX3RleHQyID0gZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyAlIF9fbmFtZV9fCisgICAgICAgIHJlc3VsdDIgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdDIgIT0gZXhwZWN0ZWRfdGV4dDI6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0MiwgcmVzdWx0MikKKyAgICAgICAgICAgIGZhaWwyID0gVHJ1ZQorICAgICAgICBpZiBmYWlsMSBvciBmYWlsMjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfYnVnZ3lfZGlyKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19uYW1lX18nLCAnbWlzc2luZycsICdoZXJlJ10KKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBoZXJlID0gJ3ByZXNlbnQhJworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQykKKyAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX21pc3NpbmdhdHRyaWJ1dGVfcGF0dGVybiAlIF9fbmFtZV9fCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisKIEByZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CkBAIC02MjYsNiArOTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1NlcnZlclRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlkb2NVcmxIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jV2l0aE1ldGFDbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICByZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weSBiL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQppbmRleCA4ZWYzOTE3Li45NWE2MTRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CkBAIC0yMzYsNiArMjM2LDE4IEBACiAgICAgICAgIG9wZXJhdGlvbnMgPSBvdXQub3V0CiAgICAgICAgIHNlbGYuX3ZlcmlmeV9wYXJzZV9vdXRwdXQob3BlcmF0aW9ucykKIAorICAgIGRlZiB0ZXN0X3BhcnNlX2FnYWluKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBmaWxlID0gQnl0ZXNJTyhkYXRhKQorICAgICAgICBwYXJzZXIuUGFyc2VGaWxlKGZpbGUpCisgICAgICAgICMgSXNzdWUgNjY3NjogZW5zdXJlIGEgbWVhbmluZ2Z1bCBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYXR0ZW1wdGluZworICAgICAgICAjIHRvIHBhcnNlIG1vcmUgdGhhbiBvbmUgWE1MIGRvY3VtZW50IHBlciB4bWxwYXJzZXIgaW5zdGFuY2UsCisgICAgICAgICMgYSBsaW1pdGF0aW9uIG9mIHRoZSBFeHBhdCBsaWJyYXJ5LgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGF0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHBhcnNlci5QYXJzZUZpbGUoZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhdC5FcnJvclN0cmluZyhjbS5leGNlcHRpb24uY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGF0LmVycm9ycy5YTUxfRVJST1JfRklOSVNIRUQpCisKIGNsYXNzIE5hbWVzcGFjZVNlcGFyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2xlZ2FsKHNlbGYpOgogICAgICAgICAjIFRlc3RzIHRoYXQgbWFrZSBzdXJlIHdlIGdldCBlcnJvcnMgd2hlbiB0aGUgbmFtZXNwYWNlX3NlcGFyYXRvciB2YWx1ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQppbmRleCBhNDc1MjA3Li4xMDNkNDYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQpAQCAtMSw4ICsxLDEwIEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHdhcm5pbmdzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAogZnJvbSBtYXRoIGltcG9ydCBsb2csIGV4cCwgcGksIGZzdW0sIHNpbgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTQ0LDYgKzQ2LDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2VlZCwgMSwgMiwgMywgNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlKHNlbGYuZ2VuKSwgW10pCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLl91cmFuZG9tJykgIyBvcy51cmFuZG9tCisgICAgZGVmIHRlc3Rfc2VlZF93aGVuX3JhbmRvbW5lc3Nfc291cmNlX25vdF9mb3VuZChzZWxmLCB1cmFuZG9tX21vY2spOgorICAgICAgICAjIFJhbmRvbS5zZWVkKCkgdXNlcyB0aW1lLnRpbWUoKSB3aGVuIGFuIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMKKyAgICAgICAgIyByYW5kb21uZXNzIHNvdXJjZSBpcyBub3QgZm91bmQuIFRvIHRlc3QgdGhpcyBvbiBtYWNoaW5lcyB3ZXJlIGl0CisgICAgICAgICMgZXhpc3RzLCBydW4gdGhlIGFib3ZlIHRlc3QsIHRlc3Rfc2VlZGFyZ3MoKSwgYWdhaW4gYWZ0ZXIgbW9ja2luZworICAgICAgICAjIG9zLnVyYW5kb20oKSBzbyB0aGF0IGl0IHJhaXNlcyB0aGUgZXhjZXB0aW9uIGV4cGVjdGVkIHdoZW4gdGhlCisgICAgICAgICMgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgdXJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZWxmLnRlc3Rfc2VlZGFyZ3MoKQorCisgICAgZGVmIHRlc3Rfc2h1ZmZsZShzZWxmKToKKyAgICAgICAgc2h1ZmZsZSA9IHNlbGYuZ2VuLnNodWZmbGUKKyAgICAgICAgbHN0ID0gW10KKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbXSkKKyAgICAgICAgbHN0ID0gWzM3XQorICAgICAgICBzaHVmZmxlKGxzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFszN10pCisgICAgICAgIHNlcXMgPSBbbGlzdChyYW5nZShuKSkgZm9yIG4gaW4gcmFuZ2UoMTApXQorICAgICAgICBzaHVmZmxlZF9zZXFzID0gW2xpc3QocmFuZ2UobikpIGZvciBuIGluIHJhbmdlKDEwKV0KKyAgICAgICAgZm9yIHNodWZmbGVkX3NlcSBpbiBzaHVmZmxlZF9zZXFzOgorICAgICAgICAgICAgc2h1ZmZsZShzaHVmZmxlZF9zZXEpCisgICAgICAgIGZvciAoc2VxLCBzaHVmZmxlZF9zZXEpIGluIHppcChzZXFzLCBzaHVmZmxlZF9zZXFzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIGxlbihzaHVmZmxlZF9zZXEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VxKSwgc2V0KHNodWZmbGVkX3NlcSkpCisgICAgICAgICMgVGhlIGFib3ZlIHRlc3RzIGFsbCB3b3VsZCBwYXNzIGlmIHRoZSBzaHVmZmxlIHdhcyBhCisgICAgICAgICMgbm8tb3AuIFRoZSBmb2xsb3dpbmcgbm9uLWRldGVybWluaXN0aWMgdGVzdCBjb3ZlcnMgdGhhdC4gIEl0CisgICAgICAgICMgYXNzZXJ0cyB0aGF0IHRoZSBzaHVmZmxlZCBzZXF1ZW5jZSBvZiAxMDAwIGRpc3RpbmN0IGVsZW1lbnRzCisgICAgICAgICMgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLiBBbHRob3VnaCB0aGVyZSBpcworICAgICAgICAjIG1hdGhlbWF0aWNhbGx5IGEgbm9uLXplcm8gcHJvYmFiaWxpdHkgdGhhdCB0aGlzIGNvdWxkCisgICAgICAgICMgYWN0dWFsbHkgaGFwcGVuIGluIGEgZ2VudWluZWx5IHJhbmRvbSBzaHVmZmxlLCBpdCBpcworICAgICAgICAjIGNvbXBsZXRlbHkgbmVnbGlnaWJsZSwgZ2l2ZW4gdGhhdCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlCisgICAgICAgICMgcGVybXV0YXRpb25zIG9mIDEwMDAgb2JqZWN0cyBpcyAxMDAwISAoZmFjdG9yaWFsIG9mIDEwMDApLAorICAgICAgICAjIHdoaWNoIGlzIGNvbnNpZGVyYWJseSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF0b21zIGluIHRoZQorICAgICAgICAjIHVuaXZlcnNlLi4uCisgICAgICAgIGxzdCA9IGxpc3QocmFuZ2UoMTAwMCkpCisgICAgICAgIHNodWZmbGVkX2xzdCA9IGxpc3QocmFuZ2UoMTAwMCkpCisgICAgICAgIHNodWZmbGUoc2h1ZmZsZWRfbHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHN0ICE9IHNodWZmbGVkX2xzdCkKKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc3QgIT0gc2h1ZmZsZWRfbHN0KQorCiAgICAgZGVmIHRlc3RfY2hvaWNlKHNlbGYpOgogICAgICAgICBjaG9pY2UgPSBzZWxmLmdlbi5jaG9pY2UKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKQEAgLTYzLDYgKzEwNyw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1bmlxKSwgaykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmlxIDw9IHNldChwb3B1bGF0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdlbi5zYW1wbGUoW10sIDApLCBbXSkgICMgdGVzdCBlZGdlIGNhc2UgTj09az09MAorICAgICAgICAjIEV4Y2VwdGlvbiByYWlzZWQgaWYgc2l6ZSBvZiBzYW1wbGUgZXhjZWVkcyB0aGF0IG9mIHBvcHVsYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uc2FtcGxlLCBwb3B1bGF0aW9uLCBOKzEpCiAKICAgICBkZWYgdGVzdF9zYW1wbGVfZGlzdHJpYnV0aW9uKHNlbGYpOgogICAgICAgICAjIEZvciB0aGUgZW50aXJlIGFsbG93YWJsZSByYW5nZSBvZiAwIDw9IGsgPD0gTiwgdmFsaWRhdGUgdGhhdApAQCAtMjAzLDYgKzI0OSwyNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocmFuZ2Uoc3RhcnQsc3RvcCkpLAogICAgICAgICAgICAgICAgIHNldChbc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LHN0b3ApIGZvciBpIGluIHJhbmdlKDEwMCldKSkKIAorICAgIGRlZiB0ZXN0X3JhbmRyYW5nZV9ub251bml0X3N0ZXAoc2VsZik6CisgICAgICAgIHJpbnQgPSBzZWxmLmdlbi5yYW5kcmFuZ2UoMCwgMTAsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmludCwgKDAsIDIsIDQsIDYsIDgpKQorICAgICAgICByaW50ID0gc2VsZi5nZW4ucmFuZHJhbmdlKDAsIDIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmludCwgMCkKKworICAgIGRlZiB0ZXN0X3JhbmRyYW5nZV9lcnJvcnMoc2VsZik6CisgICAgICAgIHJhaXNlcyA9IHBhcnRpYWwoc2VsZi5hc3NlcnRSYWlzZXMsIFZhbHVlRXJyb3IsIHNlbGYuZ2VuLnJhbmRyYW5nZSkKKyAgICAgICAgIyBFbXB0eSByYW5nZQorICAgICAgICByYWlzZXMoMywgMykKKyAgICAgICAgcmFpc2VzKC03MjEpCisgICAgICAgIHJhaXNlcygwLCAxMDAsIC0xMikKKyAgICAgICAgIyBOb24taW50ZWdlciBzdGFydC9zdG9wCisgICAgICAgIHJhaXNlcygzLjE0MTU5KQorICAgICAgICByYWlzZXMoMCwgMi43MTgyOCkKKyAgICAgICAgIyBaZXJvIGFuZCBub24taW50ZWdlciBzdGVwCisgICAgICAgIHJhaXNlcygwLCA0MiwgMCkKKyAgICAgICAgcmFpc2VzKDAsIDQyLCAzLjE0MTU5KQorCiAgICAgZGVmIHRlc3RfZ2VucmFuZGJpdHMoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHJhbmdlcwogICAgICAgICBmb3IgayBpbiByYW5nZSgxLCAxMDAwKToKQEAgLTI3Miw2ICszMzcsMTYgQEAKICAgICAgICAgIyBMYXN0IGVsZW1lbnQgcy9iIGFuIGludCBhbHNvCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCAoMCwpKjYyNCsoJ2EnLCksIE5vbmUpKQogCisgICAgICAgICMgTGl0dGxlIHRyaWNrIHRvIG1ha2UgInR1cGxlKHggJSAoMioqMzIpIGZvciB4IGluIGludGVybmFsc3RhdGUpIgorICAgICAgICAjIHJhaXNlIFZhbHVlRXJyb3IuIEkgY2Fubm90IHRoaW5rIG9mIGEgc2ltcGxlIHdheSB0byBhY2hpZXZlIHRoaXMsIHNvCisgICAgICAgICMgSSBhbSBvcHRpbmcgZm9yIHVzaW5nIGEgZ2VuZXJhdG9yIGFzIHRoZSBtaWRkbGUgYXJndW1lbnQgb2Ygc2V0c3RhdGUKKyAgICAgICAgIyB3aGljaCBhdHRlbXB0cyB0byBjYXN0IGEgTmFOIHRvIGludGVnZXIuCisgICAgICAgIHN0YXRlX3ZhbHVlcyA9IHNlbGYuZ2VuLmdldHN0YXRlKClbMV0KKyAgICAgICAgc3RhdGVfdmFsdWVzID0gbGlzdChzdGF0ZV92YWx1ZXMpCisgICAgICAgIHN0YXRlX3ZhbHVlc1stMV0gPSBmbG9hdCgnbmFuJykKKyAgICAgICAgc3RhdGUgPSAoaW50KHgpIGZvciB4IGluIHN0YXRlX3ZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsIHN0YXRlLCBOb25lKSkKKwogICAgIGRlZiB0ZXN0X3JlZmVyZW5jZUltcGxlbWVudGF0aW9uKHNlbGYpOgogICAgICAgICAjIENvbXBhcmUgdGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIHJlc3VsdHMgZnJvbSB0aGUgb3JpZ2luYWwKICAgICAgICAgIyBjb2RlLiAgQ3JlYXRlIDIwMDAgNTMtYml0IHByZWNpc2lvbiByYW5kb20gZmxvYXRzLiAgQ29tcGFyZSBvbmx5CkBAIC00MTEsNiArNDg2LDM4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIG51bWJpdHMpICAgICAgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKmsgPiBuID4gMioqKGstMSkpICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KIAorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdyYW5kb20uUmFuZG9tLnJhbmRvbScpCisgICAgZGVmIHRlc3RfcmFuZGJlbG93X292ZXJyaWRlbl9yYW5kb20oc2VsZiwgcmFuZG9tX21vY2spOgorICAgICAgICAjIFJhbmRvbS5fcmFuZGJlbG93KCkgY2FuIG9ubHkgdXNlIHJhbmRvbSgpIHdoZW4gdGhlIGJ1aWx0LWluIG9uZQorICAgICAgICAjIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnV0IG5vIG5ldyBnZXRyYW5kYml0cygpIG1ldGhvZCB3YXMgc3VwcGxpZWQuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gcmFuZG9tLlN5c3RlbVJhbmRvbSgpLnJhbmRvbQorICAgICAgICBtYXhzaXplID0gMTw8cmFuZG9tLkJQRgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgIyBQb3B1bGF0aW9uIHJhbmdlIHRvbyBsYXJnZSAobiA+PSBtYXhzaXplKQorICAgICAgICAgICAgc2VsZi5nZW4uX3JhbmRiZWxvdyhtYXhzaXplKzEsIG1heHNpemUgPSBtYXhzaXplKQorICAgICAgICBzZWxmLmdlbi5fcmFuZGJlbG93KDU2NDAsIG1heHNpemUgPSBtYXhzaXplKQorCisgICAgICAgICMgVGhpcyBtaWdodCBiZSBnb2luZyB0b28gZmFyIHRvIHRlc3QgYSBzaW5nbGUgbGluZSwgYnV0IGJlY2F1c2Ugb2Ygb3VyCisgICAgICAgICMgbm9ibGUgYWltIG9mIGFjaGlldmluZyAxMDAlIHRlc3QgY292ZXJhZ2Ugd2UgbmVlZCB0byB3cml0ZSBhIGNhc2UgaW4KKyAgICAgICAgIyB3aGljaCB0aGUgZm9sbG93aW5nIGxpbmUgaW4gUmFuZG9tLl9yYW5kYmVsb3coKSBnZXRzIGV4ZWN1dGVkOgorICAgICAgICAjCisgICAgICAgICMgcmVtID0gbWF4c2l6ZSAlIG4KKyAgICAgICAgIyBsaW1pdCA9IChtYXhzaXplIC0gcmVtKSAvIG1heHNpemUKKyAgICAgICAgIyByID0gcmFuZG9tKCkKKyAgICAgICAgIyB3aGlsZSByID49IGxpbWl0OgorICAgICAgICAjICAgICByID0gcmFuZG9tKCkgIyA8PT0gKlRoaXMgbGluZSogPD09PAorICAgICAgICAjCisgICAgICAgICMgVGhlcmVmb3JlLCB0byBndWFyYW50ZWUgdGhhdCB0aGUgd2hpbGUgbG9vcCBpcyBleGVjdXRlZCBhdCBsZWFzdAorICAgICAgICAjIG9uY2UsIHdlIG5lZWQgdG8gbW9jayByYW5kb20oKSBzbyB0aGF0IGl0IHJldHVybnMgYSBudW1iZXIgZ3JlYXRlcgorICAgICAgICAjIHRoYW4gJ2xpbWl0JyB0aGUgZmlyc3QgdGltZSBpdCBnZXRzIGNhbGxlZC4KKworICAgICAgICBuID0gNDIKKyAgICAgICAgZXBzaWxvbiA9IDAuMDEKKyAgICAgICAgbGltaXQgPSAobWF4c2l6ZSAtIChtYXhzaXplICUgbikpIC8gbWF4c2l6ZQorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFtsaW1pdCArIGVwc2lsb24sIGxpbWl0IC0gZXBzaWxvbl0KKyAgICAgICAgc2VsZi5nZW4uX3JhbmRiZWxvdyhuLCBtYXhzaXplID0gbWF4c2l6ZSkKKwogICAgIGRlZiB0ZXN0X3JhbmRyYW5nZV9idWdfMTU5MDg5MShzZWxmKToKICAgICAgICAgc3RhcnQgPSAxMDAwMDAwMDAwMDAwCiAgICAgICAgIHN0b3AgPSAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwCkBAIC00OTUsNyArNjAyLDcgQEAKICAgICAgICAgZm9yIHZhcmlhdGUsIGFyZ3MsIGV4cGVjdGVkIGluIFsKICAgICAgICAgICAgICAgICAoZy51bmlmb3JtLCAoMTAuMCwgMTAuMCksIDEwLjApLAogICAgICAgICAgICAgICAgIChnLnRyaWFuZ3VsYXIsICgxMC4wLCAxMC4wKSwgMTAuMCksCi0gICAgICAgICAgICAgICAgIyhnLnRyaWFuZ3VsYXIsICgxMC4wLCAxMC4wLCAxMC4wKSwgMTAuMCksCisgICAgICAgICAgICAgICAgKGcudHJpYW5ndWxhciwgKDEwLjAsIDEwLjAsIDEwLjApLCAxMC4wKSwKICAgICAgICAgICAgICAgICAoZy5leHBvdmFyaWF0ZSwgKGZsb2F0KCdpbmYnKSwpLCAwLjApLAogICAgICAgICAgICAgICAgIChnLnZvbm1pc2VzdmFyaWF0ZSwgKDMuMCwgZmxvYXQoJ2luZicpKSwgMy4wKSwKICAgICAgICAgICAgICAgICAoZy5nYXVzcywgKDEwLjAsIDAuMCksIDEwLjApLApAQCAtNTI4LDYgKzYzNSwxMDYgQEAKICAgICAgICAgcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgwLCAxZTE1KQogICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTAwKQogCisgICAgZGVmIHRlc3RfZ2FtbWF2YXJpYXRlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBCb3RoIGFscGhhIGFuZCBiZXRhIG11c3QgYmUgPiAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDAsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDEsIC0zKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20ucmFuZG9tJykKKyAgICBkZWYgdGVzdF9nYW1tYXZhcmlhdGVfZnVsbF9jb2RlX2NvdmVyYWdlKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBvZiByYW5kb20uZ2FtbWF2YXJpYXRlKCksIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgJ2FscGhhJy4gV2hhdCB3ZQorICAgICAgICAjIGFyZSBnb2luZyB0byBkbyBoZXJlIGlzIHRvIGZpeCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHJhbmRvbSgpIHRvCisgICAgICAgICMgZ2VuZXJhdGUgdGVzdCBjYXNlcyB0aGF0IHByb3ZpZGUgMTAwJSBsaW5lIGNvdmVyYWdlIG9mIHRoZSBtZXRob2QuCisKKyAgICAgICAgIyAjMTogYWxwaGEgPiAxLjA6IHdlIHdhbnQgdGhlIGZpcnN0IHJhbmRvbSBudW1iZXIgdG8gYmUgb3V0c2lkZSB0aGUKKyAgICAgICAgIyBbMWUtNywgLjk5OTk5OTldIHJhbmdlLCBzbyB0aGF0IHRoZSBjb250aW51ZSBzdGF0ZW1lbnQgZXhlY3V0ZXMKKyAgICAgICAgIyBvbmNlLiBUaGUgdmFsdWVzIG9mIHUxIGFuZCB1MiB3aWxsIGJlIDAuNSBhbmQgMC4zLCByZXNwZWN0aXZlbHkuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gWzFlLTgsIDAuNSwgMC4zXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4xLCAyLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDIuNTMpCisKKyAgICAgICAgIyAjMjogYWxwaGEgPT0gMTogZmlyc3QgcmFuZG9tIG51bWJlciBsZXNzIHRoYW4gMWUtNyB0byB0aGF0IHRoZSBib2R5CisgICAgICAgICMgb2YgdGhlIHdoaWxlIGxvb3AgZXhlY3V0ZXMgb25jZS4gVGhlbiByYW5kb20ucmFuZG9tKCkgcmV0dXJucyAwLjQ1LAorICAgICAgICAjIHdoaWNoIGNhdXNlcyB3aGlsZSB0byBzdG9wIGxvb3BpbmcgYW5kIHRoZSBhbGdvcml0aG0gdG8gdGVybWluYXRlLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFsxZS04LCAwLjQ1XQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4wLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJldHVybmVkX3ZhbHVlLCAyLjUwNzMxNDE2NjEyMzgwMykKKworICAgICAgICAjICMzOiAwIDwgYWxwaGEgPCAxLiBUaGlzIGlzIHRoZSBtb3N0IGNvbXBsZXggcmVnaW9uIG9mIGNvZGUgdG8gY292ZXIsCisgICAgICAgICMgYXMgdGhlcmUgYXJlIG11bHRpcGxlIGlmLWVsc2Ugc3RhdGVtZW50cy4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlCisgICAgICAgICMgc291cmNlIGNvZGUsIGFuZCBkZXRlcm1pbmUgdGhlIHZhbHVlcyB0aGF0IHdlIG5lZWQgYWNjb3JkaW5nbHk6CisgICAgICAgICMKKyAgICAgICAgIyB3aGlsZSAxOgorICAgICAgICAjICAgICB1ID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgYiA9IChfZSArIGFscGhhKS9fZQorICAgICAgICAjICAgICBwID0gYip1CisgICAgICAgICMgICAgIGlmIHAgPD0gMS4wOiAjIDw9PT0gKEEpCisgICAgICAgICMgICAgICAgICB4ID0gcCAqKiAoMS4wL2FscGhhKQorICAgICAgICAjICAgICBlbHNlOiAjIDw9PT0gKEIpCisgICAgICAgICMgICAgICAgICB4ID0gLV9sb2coKGItcCkvYWxwaGEpCisgICAgICAgICMgICAgIHUxID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgaWYgcCA+IDEuMDogIyA8PT09IChDKQorICAgICAgICAjICAgICAgICAgaWYgdTEgPD0geCAqKiAoYWxwaGEgLSAxLjApOiAjIDw9PT0gKEQpCisgICAgICAgICMgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyAgICAgZWxpZiB1MSA8PSBfZXhwKC14KTogIyA8PT09IChFKQorICAgICAgICAjICAgICAgICAgYnJlYWsKKyAgICAgICAgIyByZXR1cm4geCAqIGJldGEKKyAgICAgICAgIworICAgICAgICAjIEZpcnN0LCB3ZSB3YW50IChBKSB0byBiZSBUcnVlLiBGb3IgdGhhdCB3ZSBuZWVkIHRoYXQ6CisgICAgICAgICMgYipyYW5kb20oKSA8PSAxLjAKKyAgICAgICAgIyByMSA9IHJhbmRvbSgpIDw9IDEuMCAvIGIKKyAgICAgICAgIworICAgICAgICAjIFdlIG5vdyBnZXQgdG8gdGhlIHNlY29uZCBpZi1lbHNlIGJyYW5jaCwgYW5kIGhlcmUsIHNpbmNlIHAgPD0gMS4wLAorICAgICAgICAjIChDKSBpcyBGYWxzZSBhbmQgd2UgdGFrZSB0aGUgZWxpZiBicmFuY2gsIChFKS4gRm9yIGl0IHRvIGJlIFRydWUsCisgICAgICAgICMgc28gdGhhdCB0aGUgYnJlYWsgaXMgZXhlY3V0ZWQsIHdlIG5lZWQgdGhhdDoKKyAgICAgICAgIyByMiA9IHJhbmRvbSgpIDw9IF9leHAoLXgpCisgICAgICAgICMgcjIgPD0gX2V4cCgtKHAgKiogKDEuMC9hbHBoYSkpKQorICAgICAgICAjIHIyIDw9IF9leHAoLSgoYipyMSkgKiogKDEuMC9hbHBoYSkpKQorCisgICAgICAgIF9lID0gcmFuZG9tLl9lCisgICAgICAgIF9leHAgPSByYW5kb20uX2V4cAorICAgICAgICBfbG9nID0gcmFuZG9tLl9sb2cKKyAgICAgICAgYWxwaGEgPSAwLjM1CisgICAgICAgIGJldGEgPSAxLjQ1CisgICAgICAgIGIgPSAoX2UgKyBhbHBoYSkvX2UKKyAgICAgICAgZXBzaWxvbiA9IDAuMDEKKworICAgICAgICByMSA9IDAuODg1OTI5NjQ0MTU2NiAjIDEuMCAvIGIKKyAgICAgICAgcjIgPSAwLjM2Nzg3OTQ0MTE3MTQgIyBfZXhwKC0oKGIqcjEpICoqICgxLjAvYWxwaGEpKSkKKworICAgICAgICAjIFRoZXNlIGZvdXIgInJhbmRvbSIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChBKSBUcnVlLCAoRSkgRmFsc2UgLS0+IFtuZXh0IGl0ZXJhdGlvbiBvZiB3aGlsZV0KKyAgICAgICAgIyAoQSkgVHJ1ZSwgKEUpIFRydWUgLS0+IFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNDQ5OTk5OTk5OTk5NzU0NCkKKworICAgICAgICAjIExldCdzIG5vdyBtYWtlIChBKSBiZSBGYWxzZS4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2hlbiB3ZSBnZXQgdG8gdGhlCisgICAgICAgICMgc2Vjb25kIGlmLWVsc2UgJ3AnIGlzIGdyZWF0ZXIgdGhhbiAxLCBzbyAoQykgZXZhbHVhdGVzIHRvIFRydWUuIFdlCisgICAgICAgICMgbm93IGVuY291bnRlciBhIHNlY29uZCBpZiBzdGF0ZW1lbnQsIChEKSwgd2hpY2ggaW4gb3JkZXIgdG8gZXhlY3V0ZQorICAgICAgICAjIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjoKKyAgICAgICAgIyByMiA8PSB4ICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgIyByMiA8PSAoLV9sb2coKGItcCkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgICMgcjIgPD0gKC1fbG9nKChiLShiKnIxKSkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgIHIxID0gMC44OTU5Mjk2NDQxNTY2ICMgKDEuMCAvIGIpICsgZXBzaWxvbiAtLSBzbyB0aGF0IChBKSBpcyBGYWxzZQorICAgICAgICByMiA9IDAuOTQ0NTQwMDQwODg5ODE0MQorCisgICAgICAgICMgQW5kIHRoZXNlIGZvdXIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBGYWxzZSAtLT4gW25leHQgaXRlcmF0aW9uIG9mIHdoaWxlXQorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBUcnVlIFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNTgzMDM0OTU2MTc2MDc4MSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdyYW5kb20uUmFuZG9tLmdhbW1hdmFyaWF0ZScpCisgICAgZGVmIHRlc3RfYmV0YXZhcmlhdGVfcmV0dXJuX3plcm8oc2VsZiwgZ2FtbWF2YXJpYXRlX21vY2spOgorICAgICAgICAjIGJldGF2YXJpYXRlKCkgcmV0dXJucyB6ZXJvIHdoZW4gdGhlIEdhbW1hIGRpc3RyaWJ1dGlvbgorICAgICAgICAjIHRoYXQgaXQgdXNlcyBpbnRlcm5hbGx5IHJldHVybnMgdGhpcyBzYW1lIHZhbHVlLgorICAgICAgICBnYW1tYXZhcmlhdGVfbW9jay5yZXR1cm5fdmFsdWUgPSAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLjAsIHJhbmRvbS5iZXRhdmFyaWF0ZSgyLjcxODI4LCAzLjE0MTU5KSkKIAogY2xhc3MgVGVzdE1vZHVsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RNYWdpY0NvbnN0YW50cyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CmluZGV4IGFhYjk4YWIuLmZlY2RhMWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIElOKCkpCiAKICAgICAgICAgIyBUZXN0IHVzZSBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcyBpbiBzbGljZSBpbmRpY2VzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMTApWzpJKDUpXSksIGxpc3QocmFuZ2UoNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKVs6SSg1KV0sIHJhbmdlKDUpKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKICAgICAgICAgICAgIHJhbmdlKDAsIDEwKVs6SVgoKV0KQEAgLTM1Myw5ICszNTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICgxMywgMjEsIDMpLCAoLTIsIDIsIDIpLCAoMioqNjUsIDIqKjY1KzIpXQogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKLSAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHIpKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCB0ZXN0PXQpOgorICAgICAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHIsIHByb3RvKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKICAgICAgICAgdGVzdGNhc2VzID0gWygxMywpLCAoMCwgMTEpLCAoLTIyLCAxMCksICgyMCwgMywgLTEpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKaW5kZXggNTQ2NmIyMC4uMDExZmJhOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC0zLDEwICszLDEyIEBACiBpbXBvcnQgaW8KIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgoraW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX2NvbnN0YW50cwogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtMTUsMTAgKzE3LDI2IEBACiAjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KICMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KIAotaW1wb3J0IHVuaXR0ZXN0CitjbGFzcyBTKHN0cik6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIFMoc3VwZXIoKS5fX2dldGl0ZW1fXyhpbmRleCkpCisKK2NsYXNzIEIoYnl0ZXMpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBCKHN1cGVyKCkuX19nZXRpdGVtX18oaW5kZXgpKQogCiBjbGFzcyBSZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3QsIG1zZykKKyAgICAgICAgZGVmIHJlY3Vyc2UoYWN0dWFsLCBleHBlY3QpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciB4LCB5IGluIHppcChhY3R1YWwsIGV4cGVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoeCwgeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGFjdHVhbCksIHR5cGUoZXhwZWN0KSwgbXNnKQorICAgICAgICByZWN1cnNlKGFjdHVhbCwgZXhwZWN0KQorCiAgICAgZGVmIHRlc3Rfa2VlcF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1ZyAxNDIxMgogICAgICAgICBiID0gYnl0ZWFycmF5KGIneCcpCkBAIC00MSwxOCArNTksMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goJ3gqJywgJ2F4eCcpLnNwYW4oKSwgKDAsIDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigwKSwgKDEsIDMpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigpLCAoMSwgMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKCd4JywgJ2FhYScpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2goJ3gnLCAnYWFhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EqJywgJ3h4eCcpLnNwYW4oMCksICgwLCAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYSonLCAneHh4Jykuc3BhbigpLCAoMCwgMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKDApLCAoMCwgMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKCksICgwLCAzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYSsnLCAneHh4JyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdhKycsICd4eHgnKSkKIAogICAgIGRlZiBidW1wX251bShzZWxmLCBtYXRjaG9iaik6CiAgICAgICAgIGludF92YWx1ZSA9IGludChtYXRjaG9iai5ncm91cCgwKSkKICAgICAgICAgcmV0dXJuIHN0cihpbnRfdmFsdWUgKyAxKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfcmVfc3ViKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKCd5JywgJ2EnLCAneHl6JyksICd4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKCd5JywgUygnYScpLCBTKCd4eXonKSksICd4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIGInYScsIGIneHl6JyksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBCKGInYScpLCBCKGIneHl6JykpLCBiJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoYid5JywgYnl0ZWFycmF5KGInYScpLCBieXRlYXJyYXkoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBtZW1vcnl2aWV3KGInYScpLCBtZW1vcnl2aWV3KGIneHl6JykpLCBiJ3hheicpCisgICAgICAgIGZvciB5IGluICgiXHhlMCIsICJcdTA0MzAiLCAiXFUwMDAxZDQ5YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoeSwgJ2EnLCAneCVzeicgJSB5KSwgJ3hheicpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoIig/aSliKyIsICJ4IiwgImJiYmIgQkJCQiIpLCAneCB4JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIocidcZCsnLCBzZWxmLmJ1bXBfbnVtLCAnMDguMiAtMiAyM3g5OXknKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnOS4zIC0zIDI0eDEwMHknKQpAQCAtMjEwLDEwICsyMzcsMjkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWJuKCJiKiIsICJ4IiwgInh5eiIsIDIpLCAoJ3h4eHl6JywgMikpCiAKICAgICBkZWYgdGVzdF9yZV9zcGxpdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICdjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KikiLCAiOmE6Yjo6YyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOjonLCAnYyddKQorICAgICAgICBmb3Igc3RyaW5nIGluICI6YTpiOjpjIiwgUygiOmE6Yjo6YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICdhJywgJ2InLCAnJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIig6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOjonLCAnYyddKQorICAgICAgICBmb3Igc3RyaW5nIGluIChiIjphOmI6OmMiLCBCKGIiOmE6Yjo6YyIpLCBieXRlYXJyYXkoYiI6YTpiOjpjIiksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiI6YTpiOjpjIikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOiIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYidhJywgYidiJywgYicnLCBiJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIjoqIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIig6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJycsIGInOicsIGInYScsIGInOicsIGInYicsIGInOjonLCBiJ2MnXSkKKyAgICAgICAgZm9yIGEsIGIsIGMgaW4gKCJceGUwXHhkZlx4ZTciLCAiXHUwNDMwXHUwNDMxXHUwNDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJcVTAwMDFkNDljXFUwMDAxZDQ5ZVxVMDAwMWQ0YjUiKToKKyAgICAgICAgICAgIHN0cmluZyA9ICI6JXM6JXM6OiVzIiAlIChhLCBiLCBjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsIHN0cmluZyksIFsnJywgYSwgYiwgJycsIGNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOioiLCBzdHJpbmcpLCBbJycsIGEsIGIsIGNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCBhLCAnOicsIGIsICc6OicsIGNdKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig/OjoqKSIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICdjJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KSoiLCAiOmE6Yjo6YyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOicsICdjJ10pCkBAIC0yMzUsMjIgKzI4MSw1MyBAQAogCiAgICAgZGVmIHRlc3RfcmVfZmluZGFsbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhYmMiKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiOisiLCAiYTpiOjpjOjo6ZCIpLCBbIjoiLCAiOjoiLCAiOjo6Il0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKDorKSIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgImE6Yjo6Yzo6OmQiKSwgWygiOiIsICIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjoiLCAiOjoiKV0pCisgICAgICAgIGZvciBzdHJpbmcgaW4gImE6Yjo6Yzo6OmQiLCBTKCJhOmI6OmM6OjpkIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbCgiOisiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIjoiLCAiOjoiLCAiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbCgiKDopKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygiOiIsICIiKSwgKCI6IiwgIjoiKSwgKCI6IiwgIjo6IildKQorICAgICAgICBmb3Igc3RyaW5nIGluIChiImE6Yjo6Yzo6OmQiLCBCKGIiYTpiOjpjOjo6ZCIpLCBieXRlYXJyYXkoYiJhOmI6OmM6OjpkIiksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJhOmI6OmM6OjpkIikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoYiI6KyIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2IiOiIsIGIiOjoiLCBiIjo6OiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoYiIoOispIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYiI6IiwgYiI6OiIsIGIiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIig6KSg6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoYiI6IiwgYiIiKSwgKGIiOiIsIGIiOiIpLCAoYiI6IiwgYiI6OiIpXSkKKyAgICAgICAgZm9yIHggaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICB4eCA9IHggKiAyCisgICAgICAgICAgICB4eHggPSB4ICogMworICAgICAgICAgICAgc3RyaW5nID0gImElc2Ilc2Mlc2QiICUgKHgsIHh4LCB4eHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIiVzKyIgJSB4LCBzdHJpbmcpLCBbeCwgeHgsIHh4eF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIiglcyspIiAlIHgsIHN0cmluZyksIFt4LCB4eCwgeHh4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKCVzKSglcyopIiAlICh4LCB4KSwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh4LCAiIiksICh4LCB4KSwgKHgsIHh4KV0pCiAKICAgICBkZWYgdGVzdF9idWdfMTE3NjEyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwociIoYXwoYikpIiwgImFiYSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsoImEiLCAiIiksKCJiIiwgImIiKSwoImEiLCAiIildKQogCiAgICAgZGVmIHRlc3RfcmVfbWF0Y2goc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EnLCAnYScpLmdyb3VwcygpLCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgJ2EnKS5ncm91cHMoKSwgKCdhJywpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgwKSwgJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgxKSwgJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAnYScsIFMoJ2EnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EnLCBzdHJpbmcpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXBzKCksICgnYScsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMCksICdhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMSksICdhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMSwgMSksICgnYScsICdhJykpCisgICAgICAgIGZvciBzdHJpbmcgaW4gYidhJywgQihiJ2EnKSwgYnl0ZWFycmF5KGInYScpLCBtZW1vcnl2aWV3KGInYScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJ2EnLCBzdHJpbmcpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwcygpLCAoYidhJywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXAoMCksIGInYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInKGEpJywgc3RyaW5nKS5ncm91cCgxKSwgYidhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwKDEsIDEpLCAoYidhJywgYidhJykpCisgICAgICAgIGZvciBhIGluICgiXHhlMCIsICJcdTA0MzAiLCAiXFUwMDAxZDQ5YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChhLCBhKS5ncm91cHMoKSwgKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwcygpLCAoYSwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKCVzKScgJSBhLCBhKS5ncm91cCgwKSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXAoMSksIGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwKDEsIDEpLCAoYSwgYSkpCiAKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnKChhKXwoYikpKGMpPycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdhJykuZ3JvdXBzKCksICgnYScsICdhJywgTm9uZSwgTm9uZSkpCkBAIC0yNzIsMTMgKzM0OSw0MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCAnYicsIE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYWMnKS5ncm91cCgxLCAnYjInLCAzKSwgKCdhJywgTm9uZSwgJ2MnKSkKIAorICAgIGRlZiB0ZXN0X3JlX2Z1bGxtYXRjaChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNjIwMzogUHJvcG9zYWw6IGFkZCByZS5mdWxsbWF0Y2goKSBtZXRob2QuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYSIsICJhIikuc3BhbigpLCAoMCwgMSkpCisgICAgICAgIGZvciBzdHJpbmcgaW4gImFiIiwgUygiYWIiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYXxhYiIsIHN0cmluZykuc3BhbigpLCAoMCwgMikpCisgICAgICAgIGZvciBzdHJpbmcgaW4gYiJhYiIsIEIoYiJhYiIpLCBieXRlYXJyYXkoYiJhYiIpLCBtZW1vcnl2aWV3KGIiYWIiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKGJyImF8YWIiLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBmb3IgYSwgYiBpbiAiXHhlMFx4ZGYiLCAiXHUwNDMwXHUwNDMxIiwgIlxVMDAwMWQ0OWNcVTAwMDFkNDllIjoKKyAgICAgICAgICAgIHIgPSByIiVzfCVzIiAlIChhLCBhICsgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIsIGEgKyBiKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociIuKj8kIiwgImFiYyIpLnNwYW4oKSwgKDAsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyIi4qPyIsICJhYmMiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJhYiIpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEuKj9iIiwgImFiYiIpLnNwYW4oKSwgKDAsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEuKj9iIiwgImF4eGIiKS5zcGFuKCksICgwLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYSsiLCAiYWIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYWJjJCIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5mdWxsbWF0Y2gociJhYmNcWiIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5mdWxsbWF0Y2gociIoP20pYWJjJCIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImFiKD89YyljZCIsICJhYmNkIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYWIoPzw9YiljZCIsICJhYmNkIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiKD89YXxhYilhYiIsICJhYiIpLnNwYW4oKSwgKDAsIDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZS5jb21waWxlKHIiYmMiKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyIi4qPyQiKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyIi4qPyIpLmZ1bGxtYXRjaCgiYWJjZCIsIHBvcz0xLCBlbmRwb3M9Mykuc3BhbigpLCAoMSwgMykpCisKICAgICBkZWYgdGVzdF9yZV9ncm91cHJlZl9leGlzdHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJyhhKScpLmdyb3VwcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnKCcsICdhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJ2EnKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXihcKCk/KFteKCldKykoPygxKVwpKSQnLCAnYSknKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXihcKCk/KFteKCldKykoPygxKVwpKSQnLCAnKGEnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJ2EpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICcoYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKD86KGEpfGMpKCg/KDEpYnxkKSkkJywgJ2FiJykuZ3JvdXBzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgJ2InKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXig/OihhKXxjKSgoPygxKWJ8ZCkpJCcsICdjZCcpLmdyb3VwcygpLApAQCAtMjk0LDggKzQwMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgJ2InLCAnYycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubWF0Y2goJ2FkJykuZ3JvdXBzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgTm9uZSwgJ2QnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYmQnKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYycpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLm1hdGNoKCdhYmQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5tYXRjaCgnYWMnKSkKIAogCiAgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWYoc2VsZik6CkBAIC0zMDMsOCArNDEwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3wnLCAnYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMT8kJywgJ2EnKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDEkJywgJ2F8JyksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKFx8KT8oW14oKV0rKVwxJCcsICd8YScpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDEkJywgJ2F8JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMSQnLCAnfGEnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oPzooYSl8YykoXDEpJCcsICdhYScpLmdyb3VwcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsICdhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKD86KGEpfGMpKFwxKT8kJywgJ2MnKS5ncm91cHMoKSwKQEAgLTMyMiwxMCArNDI5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBmaXJzdCBzZWNvbmQgZmlyc3QiKQogCiAgICAgZGVmIHRlc3RfcmVwZWF0X21pbm1heChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MX0kIiwgImFiYyIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxfT8kIiwgImFiYyIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDJ9JCIsICJhYmMiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSwyfT8kIiwgImFiYyIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MX0kIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MX0/JCIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl4oXHcpezEsMn0kIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MSwyfT8kIiwgImFiYyIpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezN9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDN9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQpAQCAtMzM2LDIyICs0NDMsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSw0fT8kIiwgImFiYyIpLmdyb3VwKDEpLCAiYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezMsNH0/JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezF9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXnh7MX0/JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXnh7MSwyfSQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezEsMn0/JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezF9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezF9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCJeeHsxLDJ9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezEsMn0/JCIsICJ4eHgiKSkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHszfSQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezEsM30kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDR9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7Myw0fT8kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHszfT8kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDN9PyQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezEsNH0/JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7Myw0fT8kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIl54ezN9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDN9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDR9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHszLDR9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgiXnh7M30/JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDN9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgiXnh7MSw0fT8kIiwgInh4eCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIl54ezMsNH0/JCIsICJ4eHgiKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeeHt9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7fSQiLCAieHt9IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCJeeHt9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHt9JCIsICJ4e30iKSkKIAogICAgIGRlZiB0ZXN0X2dldGF0dHIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZSgiKD9pKShhKShiKSIpLnBhdHRlcm4sICIoP2kpKGEpKGIpIikKQEAgLTM2NSw3ICs0NzIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLmVuZHBvcywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5zdHJpbmcsICJhIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5yZWdzLCAoKDAsIDEpLCAoMCwgMSkpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLnJlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIihhKSIsICJhIikucmUpCiAKICAgICBkZWYgdGVzdF9zcGVjaWFsX2VzY2FwZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGIoYi4pXGIiLApAQCAtMzczLDI5ICs0ODAsMzcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiKS5ncm91cCgxKSwgImJ4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5BU0NJSSkuZ3JvdXAoMSksICJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuQVNDSUkpLmdyb3VwKDEpLCAiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiKGIuKVxiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiY2QgYWJjIGJjZCBieCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksICJieCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuTE9DQUxFKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5VTklDT0RFKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiLCByZS5VTklDT0RFKS5ncm91cCgxKSwgImJ4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsICJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJhYmMiLCByZS5NKS5ncm91cCgwKSwgImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsICJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJhYmMiLCByZS5NKS5ncm91cCgwKSwgImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGIoYi4pXGIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY2QgYWJjIGJjZCBieCIpLmdyb3VwKDEpLCBiImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiYyBiY2QgYmMgYWJ4ZCIpLmdyb3VwKDEpLCBiImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGIoYi4pXGIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY2QgYWJjIGJjZCBieCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksIGIiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChiciJcQihiLilcQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWJjIGJjZCBiYyBhYnhkIiwgcmUuTE9DQUxFKS5ncm91cCgxKSwgYiJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKGJyIl5hYmMkIiwgYiJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksIGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXlxBYWJjXFokIiwgYiJhYmMiLCByZS5NKS5ncm91cCgwKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2goYnIiXlxBYWJjXFokIiwgYiJcbmFiY1xuIiwgcmUuTSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGRcRFx3XFdcc1xTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjFhYSEgYSIpLmdyb3VwKDApLCAiMWFhISBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGRcRFx3XFdcc1xTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIxYWEhIGEiKS5ncm91cCgwKSwgYiIxYWEhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiLCByZS5BU0NJSSkuZ3JvdXAoMCksICIxYWEhIGEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiLCByZS5MT0NBTEUpLmdyb3VwKDApLCAiMWFhISBhIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcZFxEXHdcV1xzXFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMWFhISBhIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMCksICIxYWEhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChiciJcZFxEXHdcV1xzXFMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjFhYSEgYSIsIHJlLkxPQ0FMRSkuZ3JvdXAoMCksIGIiMWFhISBhIikKIAogICAgIGRlZiB0ZXN0X3N0cmluZ19ib3VuZGFyaWVzKHNlbGYpOgogICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTA3MTMKQEAgLTQwOSwxMCArNTI0LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmUubWF0Y2gociJcQiIsICJhYmMiKSkKICAgICAgICAgIyBIb3dldmVyLCBhbiBlbXB0eSBzdHJpbmcgY29udGFpbnMgbm8gd29yZCBib3VuZGFyaWVzLCBhbmQgYWxzbyBubwogICAgICAgICAjIG5vbi1ib3VuZGFyaWVzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxCIiwgIiIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2gociJcQiIsICIiKSkKICAgICAgICAgIyBUaGlzIG9uZSBpcyBxdWVzdGlvbmFibGUgYW5kIGRpZmZlcmVudCBmcm9tIHRoZSBwZXJscmUgYmVoYXZpb3VyLAogICAgICAgICAjIGJ1dCBkZXNjcmliZXMgY3VycmVudCBiZWhhdmlvci4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYiIsICIiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuc2VhcmNoKHIiXGIiLCAiIikpCiAgICAgICAgICMgQSBzaW5nbGUgd29yZC1jaGFyYWN0ZXIgc3RyaW5nIGhhcyB0d28gYm91bmRhcmllcywgYnV0IG5vCiAgICAgICAgICMgbm9uLWJvdW5kYXJ5IGdhcHMuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlLmZpbmRhbGwociJcYiIsICJhIikpLCAyKQpAQCAtNDI2LDE3ICs1NDEsMTQgQEAKICAgICBkZWYgdGVzdF9iaWdjaGFyc2V0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoW1x1MjIyMlx1MjIyM10pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUyMjIyIikuZ3JvdXAoMSksICJcdTIyMjIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoW1x1MjIyMlx1MjIyM10pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUyMjIyIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMSksICJcdTIyMjIiKQogICAgICAgICByID0gJ1slc10nICUgJycuam9pbihtYXAoY2hyLCByYW5nZSgyNTYsIDIqKjE2LCAyNTUpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZmMDEiLCByZS5VTklDT0RFKS5ncm91cCgpLCAiXHVmZjAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyLCAiXHVmZjAxIikuZ3JvdXAoKSwgIlx1ZmYwMSIpCiAKICAgICBkZWYgdGVzdF9iaWdfY29kZXNpemUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzExNjAKICAgICAgICAgciA9IHJlLmNvbXBpbGUoJ3wnLmpvaW4oKCclZCcleCBmb3IgeCBpbiByYW5nZSgxMDAwMCkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoci5tYXRjaCgnMTAwMCcpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyLm1hdGNoKCc5OTk5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLm1hdGNoKCcxMDAwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLm1hdGNoKCc5OTk5JykpCiAKICAgICBkZWYgdGVzdF9hbnlhbGwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImEuYiIsICJhXG5iIiwgcmUuRE9UQUxMKS5ncm91cCgwKSwKQEAgLTQ2MCw3ICs1NzIsNyBAQAogCiAgICAgZGVmIHRlc3RfaWdub3JlX2Nhc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImFiYyIsICJBQkMiLCByZS5JKS5ncm91cCgwKSwgIkFCQyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImFiYyIsICJBQkMiLCByZS5JKS5ncm91cCgwKSwgIkFCQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYiJhYmMiLCBiIkFCQyIsIHJlLkkpLmdyb3VwKDApLCBiIkFCQyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYVxzW15hXSkiLCAiYSBiIiwgcmUuSSkuZ3JvdXAoMSksICJhIGIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGFcc1teYV0qKSIsICJhIGJiIiwgcmUuSSkuZ3JvdXAoMSksICJhIGJiIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhXHNbYWJjXSkiLCAiYSBiIiwgcmUuSSkuZ3JvdXAoMSksICJhIGIiKQpAQCAtNDgwLDcgKzU5Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3NyZS5nZXRsb3dlcihvcmQoJ0EnKSwgcmUuVU5JQ09ERSksIG9yZCgnYScpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImFiYyIsICJBQkMiLCByZS5JKS5ncm91cCgwKSwgIkFCQyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImFiYyIsICJBQkMiLCByZS5JKS5ncm91cCgwKSwgIkFCQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYiJhYmMiLCBiIkFCQyIsIHJlLkkpLmdyb3VwKDApLCBiIkFCQyIpCiAKICAgICBkZWYgdGVzdF9ub3RfbGl0ZXJhbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goIlxzKFteYV0pIiwgIiBiIikuZ3JvdXAoMSksICJiIikKQEAgLTU0NywxMSArNjU5LDE1IEBACiAgICAgICAgIHJlcyA9IHJlLmZpbmRhbGwocmUuZXNjYXBlKCdcdTI2MjAnLmVuY29kZSgndXRmLTgnKSksIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDIpCiAKLSAgICBkZWYgcGlja2xlX3Rlc3Qoc2VsZiwgcGlja2xlKToKLSAgICAgICAgb2xkcGF0ID0gcmUuY29tcGlsZSgnYSg/OmJ8KGN8ZSl7MSwyfT98ZCkrPyguKScpCi0gICAgICAgIHMgPSBwaWNrbGUuZHVtcHMob2xkcGF0KQotICAgICAgICBuZXdwYXQgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvbGRwYXQsIG5ld3BhdCkKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBvbGRwYXQgPSByZS5jb21waWxlKCdhKD86YnwoY3xlKXsxLDJ9P3xkKSs/KC4pJywgcmUuVU5JQ09ERSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKG9sZHBhdCwgcHJvdG8pCisgICAgICAgICAgICBuZXdwYXQgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3cGF0LCBvbGRwYXQpCisgICAgICAgICMgY3VycmVudCBwaWNrbGUgZXhwZWN0cyB0aGUgX2NvbXBpbGUoKSByZWNvbnN0cnVjdG9yIGluIHJlIG1vZHVsZQorICAgICAgICBmcm9tIHJlIGltcG9ydCBfY29tcGlsZQogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLkksIHJlLklHTk9SRUNBU0UpCkBAIC01NjIsMjkgKzY3OCwyOSBAQAogCiAgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CiAgICAgICAgIGZvciBmbGFnIGluIFtyZS5JLCByZS5NLCByZS5YLCByZS5TLCByZS5MXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUuY29tcGlsZSgnXnBhdHRlcm4kJywgZmxhZyksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuY29tcGlsZSgnXnBhdHRlcm4kJywgZmxhZykpCiAKICAgICBkZWYgdGVzdF9zcmVfY2hhcmFjdGVyX2xpdGVyYWxzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiBbMCwgOCwgMTYsIDMyLCA2NCwgMTI3LCAxMjgsIDI1NSwgMjU2LCAweEZGRkYsIDB4MTAwMDAsIDB4MTBGRkZGXToKICAgICAgICAgICAgIGlmIGkgPCAyNTY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcJTAzbyIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXCUwM28wIiAlIGksIGNocihpKSsiMCIpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXCUwM284IiAlIGksIGNocihpKSsiOCIpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXHglMDJ4IiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJceCUwMngwIiAlIGksIGNocihpKSsiMCIpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXHglMDJ4eiIgJSBpLCBjaHIoaSkrInoiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcJTAzbyIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwlMDNvMCIgJSBpLCBjaHIoaSkrIjAiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcJTAzbzgiICUgaSwgY2hyKGkpKyI4IikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXHglMDJ4IiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXHglMDJ4MCIgJSBpLCBjaHIoaSkrIjAiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJceCUwMnh6IiAlIGksIGNocihpKSsieiIpKQogICAgICAgICAgICAgaWYgaSA8IDB4MTAwMDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcdSUwNHgiICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlx1JTA0eDAiICUgaSwgY2hyKGkpKyIwIikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcdSUwNHh6IiAlIGksIGNocihpKSsieiIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcVSUwOHgiICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXFUlMDh4MCIgJSBpLCBjaHIoaSkrIjAiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXFUlMDh4eiIgJSBpLCBjaHIoaSkrInoiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcMCIsICJcMDAwIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXDA4IiwgIlwwMDA4IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXDAxIiwgIlwwMDEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcMDE4IiwgIlwwMDE4IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXDU2NyIsIGNocigwbzE2NykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlx1JTA0eCIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlx1JTA0eDAiICUgaSwgY2hyKGkpKyIwIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXHUlMDR4eiIgJSBpLCBjaHIoaSkrInoiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlxVJTA4eCIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXFUlMDh4MCIgJSBpLCBjaHIoaSkrIjAiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlxVJTA4eHoiICUgaSwgY2hyKGkpKyJ6IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwwIiwgIlwwMDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDA4IiwgIlwwMDA4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwwMSIsICJcMDAxIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwwMTgiLCAiXDAwMTgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDU2NyIsIGNocigwbzE2NykpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiXDkxMSIsICIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiXHgxIiwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJceDF6IiwgIiIpCkBAIC01OTcsMjIgKzcxMywyMiBAQAogICAgIGRlZiB0ZXN0X3NyZV9jaGFyYWN0ZXJfY2xhc3NfbGl0ZXJhbHMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIFswLCA4LCAxNiwgMzIsIDY0LCAxMjcsIDEyOCwgMjU1LCAyNTYsIDB4RkZGRiwgMHgxMDAwMCwgMHgxMEZGRkZdOgogICAgICAgICAgICAgaWYgaSA8IDI1NjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcJW9dIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXCVvOF0iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcJTAzb10iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcJTAzbzBdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXCUwM284XSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1x4JTAyeF0iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltceCUwMngwXSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1x4JTAyeHpdIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1wlb10iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXCVvOF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXCUwM29dIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1wlMDNvMF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXCUwM284XSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltceCUwMnhdIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1x4JTAyeDBdIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1x4JTAyeHpdIiAlIGksIGNocihpKSkpCiAgICAgICAgICAgICBpZiBpIDwgMHgxMDAwMDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcdSUwNHhdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXHUlMDR4MF0iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcdSUwNHh6XSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXFUlMDh4XSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXFUlMDh4MF0iICUgaSwgY2hyKGkpKyIwIikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcVSUwOHh6XSIgJSBpLCBjaHIoaSkrInoiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXFUwMDAxZDQ5Yy1cVTAwMDFkNGI1XSIsICJcVTAwMDFkNDllIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1x1JTA0eF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXHUlMDR4MF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXHUlMDR4el0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVSUwOHhdIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXFUlMDh4MF0iICUgaSwgY2hyKGkpKyIwIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXFUlMDh4el0iICUgaSwgY2hyKGkpKyJ6IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVTAwMDFkNDljLVxVMDAwMWQ0YjVdIiwgIlxVMDAwMWQ0OWUiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCByIltcOTExXSIsICIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiW1x4MXpdIiwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJbXHUxMjN6XSIsICIiKQpAQCAtNjIxLDM1ICs3MzcsMzUgQEAKIAogICAgIGRlZiB0ZXN0X3NyZV9ieXRlX2xpdGVyYWxzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiBbMCwgOCwgMTYsIDMyLCA2NCwgMTI3LCAxMjgsIDI1NV06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJcJTAzbyIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJcJTAzbzAiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkrYiIwIikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJcJTAzbzgiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkrYiI4IikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJceCUwMngiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiXHglMDJ4MCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjAiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlx4JTAyeHoiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkrYiJ6IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKGJyIlx1IiwgYid1JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKGJyIlxVIiwgYidVJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKGJyIlwwIiwgYiJcMDAwIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKGJyIlwwOCIsIGIiXDAwMDgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDAxIiwgYiJcMDAxIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKGJyIlwwMTgiLCBiIlwwMDE4IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKGJyIlw1NjciLCBieXRlcyhbMG8xNjddKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiXCUwM28iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIlwlMDNvMCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjAiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJcJTAzbzgiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkrYiI4IikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiXHglMDJ4IiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJceCUwMngwIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pK2IiMCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIlx4JTAyeHoiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkrYiJ6IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiciJcdSIsIGIndScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXFUiLCBiJ1UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlwwIiwgYiJcMDAwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiciJcMDgiLCBiIlwwMDA4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiciJcMDEiLCBiIlwwMDEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlwwMTgiLCBiIlwwMDE4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiciJcNTY3IiwgYnl0ZXMoWzBvMTY3XSkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIGJyIlw5MTEiLCBiIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiXHgxIiwgYiIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIGJyIlx4MXoiLCBiIiIpCiAKICAgICBkZWYgdGVzdF9zcmVfYnl0ZV9jbGFzc19saXRlcmFscyhzZWxmKToKICAgICAgICAgZm9yIGkgaW4gWzAsIDgsIDE2LCAzMiwgNjQsIDEyNywgMTI4LCAyNTVdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1wlb10iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1wlbzhdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIltcJTAzb10iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1wlMDNvMF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1wlMDNvOF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1x4JTAyeF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1x4JTAyeDBdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIltceCUwMnh6XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKGJyIltcdV0iLCBiJ3UnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiW1xVXSIsIGInVScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIltcJW9dIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJbXCVvOF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIltcJTAzb10iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIltcJTAzbzBdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJbXCUwM284XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1x4JTAyeF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIltceCUwMngwXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1x4JTAyeHpdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIltcdV0iLCBiJ3UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIltcVV0iLCBiJ1UnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJbXDkxMV0iLCAiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJbXHgxel0iLCAiIikKIApAQCAtNjYwLDcgKzc3Niw3IEBACiAKICAgICBkZWYgdGVzdF9idWdfNTI3MzcxKHNlbGYpOgogICAgICAgICAjIGJ1ZyBkZXNjcmliZWQgaW4gcGF0Y2hlcyA1MjczNzEvNjcyNDkxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSk/YScsJ2EnKS5sYXN0aW5kZXgsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKGEpP2EnLCdhJykubGFzdGluZGV4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpKGIpP2InLCdhYicpLmxhc3RpbmRleCwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJyg/UDxhPmEpKD9QPGI+Yik/YicsJ2FiJykubGFzdGdyb3VwLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIig/UDxhPmEoYikpIiwgImFiIikubGFzdGdyb3VwLCAnYScpCkBAIC03MTcsNyArODMzLDcgQEAKICAgICAgICAgICAgIChyIlxzKyIsIE5vbmUpLAogICAgICAgICAgICAgXSkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNjYW5uZXIuc2Nhbm5lci5zY2FubmVyKCIiKS5wYXR0ZXJuLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2Nhbm5lci5zY2FubmVyLnNjYW5uZXIoIiIpLnBhdHRlcm4pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FubmVyLnNjYW4oInN1bSA9IDMqZm9vICsgMzEyLjUwICsgYmFyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKFsnc3VtJywgJ29wPScsIDMsICdvcConLCAnZm9vJywgJ29wKycsIDMxMi41LApAQCAtNzYyLDcgKzg3OCw3IEBACiAgICAgICAgICMgYnVnIDc2NDU0OCwgcmUuY29tcGlsZSgpIGJhcmZzIG9uIHN0ci91bmljb2RlIHN1YmNsYXNzZXMKICAgICAgICAgY2xhc3MgbXlfdW5pY29kZShzdHIpOiBwYXNzCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUobXlfdW5pY29kZSgiYWJjIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCJ4eXoiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKCJ4eXoiKSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRpdGVyKHNlbGYpOgogICAgICAgICBpdGVyID0gcmUuZmluZGl0ZXIociI6KyIsICJhOmI6OmM6OjpkIikKQEAgLTc5MCwxMSArOTA2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgWyI6OiIsICI6OiJdKQogCiAgICAgZGVmIHRlc3RfYnVnXzkyNjA3NShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLmNvbXBpbGUoJ2J1Z185MjYwNzUnKSBpcyBub3QKLSAgICAgICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUoYididWdfOTI2MDc1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocmUuY29tcGlsZSgnYnVnXzkyNjA3NScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUoYididWdfOTI2MDc1JykpCiAKICAgICBkZWYgdGVzdF9idWdfOTMxODQ4KHNlbGYpOgotICAgICAgICBwYXR0ZXJuID0gZXZhbCgnIltcdTAwMkVcdTMwMDJcdUZGMEVcdUZGNjFdIicpCisgICAgICAgIHBhdHRlcm4gPSAiW1x1MDAyRVx1MzAwMlx1RkYwRVx1RkY2MV0iCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZShwYXR0ZXJuKS5zcGxpdCgiYS5iLmMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2EnLCdiJywnYyddKQogCkBAIC04MDUsNyArOTIxLDcgQEAKIAogICAgICAgICBzY2FubmVyID0gcmUuY29tcGlsZShyIlxzIikuc2Nhbm5lcigiYSBiIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FubmVyLnNlYXJjaCgpLnNwYW4oKSwgKDEsIDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYW5uZXIuc2VhcmNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNjYW5uZXIuc2VhcmNoKCkpCiAKICAgICBkZWYgdGVzdF9idWdfODE3MjM0KHNlbGYpOgogICAgICAgICBpdGVyID0gcmUuZmluZGl0ZXIociIuKiIsICJhc2RmIikKQEAgLTgzOSw3ICs5NTUsNyBAQAogICAgICAgICBpbXBvcnQgYXJyYXkKICAgICAgICAgZm9yIHR5cGVjb2RlIGluICdiQnVoSGlJbExmZCc6CiAgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkodHlwZWNvZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUoYiJibGEiKS5tYXRjaChhKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmNvbXBpbGUoYiJibGEiKS5tYXRjaChhKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZShiIiIpLm1hdGNoKGEpLmdyb3VwcygpLCAoKSkKIAogICAgIGRlZiB0ZXN0X2lubGluZV9mbGFncyhzZWxmKToKQEAgLTg0OSwyNyArOTY1LDI3IEBACiAKICAgICAgICAgcCA9IHJlLmNvbXBpbGUodXBwZXJfY2hhciwgcmUuSSB8IHJlLlUpCiAgICAgICAgIHEgPSBwLm1hdGNoKGxvd2VyX2NoYXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEpCiAKICAgICAgICAgcCA9IHJlLmNvbXBpbGUobG93ZXJfY2hhciwgcmUuSSB8IHJlLlUpCiAgICAgICAgIHEgPSBwLm1hdGNoKHVwcGVyX2NoYXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEpCiAKICAgICAgICAgcCA9IHJlLmNvbXBpbGUoJyg/aSknICsgdXBwZXJfY2hhciwgcmUuVSkKICAgICAgICAgcSA9IHAubWF0Y2gobG93ZXJfY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSkKIAogICAgICAgICBwID0gcmUuY29tcGlsZSgnKD9pKScgKyBsb3dlcl9jaGFyLCByZS5VKQogICAgICAgICBxID0gcC5tYXRjaCh1cHBlcl9jaGFyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxKQogCiAgICAgICAgIHAgPSByZS5jb21waWxlKCcoP2l1KScgKyB1cHBlcl9jaGFyKQogICAgICAgICBxID0gcC5tYXRjaChsb3dlcl9jaGFyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxKQogCiAgICAgICAgIHAgPSByZS5jb21waWxlKCcoP2l1KScgKyBsb3dlcl9jaGFyKQogICAgICAgICBxID0gcC5tYXRjaCh1cHBlcl9jaGFyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxKQogCiAgICAgZGVmIHRlc3RfZG9sbGFyX21hdGNoZXNfdHdpY2Uoc2VsZik6CiAgICAgICAgICIkIG1hdGNoZXMgdGhlIGVuZCBvZiBzdHJpbmcsIGFuZCBqdXN0IGJlZm9yZSB0aGUgdGVybWluYXRpbmcgXG4iCkBAIC05MDAsMjMgKzEwMTYsMjMgQEAKICAgICAgICAgIyBTdHJpbmcgcGF0dGVybnMKICAgICAgICAgZm9yIGZsYWdzIGluICgwLCByZS5VTklDT0RFKToKICAgICAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoJ1x4YzAnLCBmbGFncyB8IHJlLklHTk9SRUNBU0UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBhdC5tYXRjaCgnXHhlMCcpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdC5tYXRjaCgnXHhlMCcpKQogICAgICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnXHcnLCBmbGFncykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGF0Lm1hdGNoKCdceGUwJyksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0Lm1hdGNoKCdceGUwJykpCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoJ1x4YzAnLCByZS5BU0NJSSB8IHJlLklHTk9SRUNBU0UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdceGUwJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhdC5tYXRjaCgnXHhlMCcpKQogICAgICAgICBwYXQgPSByZS5jb21waWxlKCcoP2EpXHhjMCcsIHJlLklHTk9SRUNBU0UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdceGUwJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhdC5tYXRjaCgnXHhlMCcpKQogICAgICAgICBwYXQgPSByZS5jb21waWxlKCdcdycsIHJlLkFTQ0lJKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnXHhlMCcpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXQubWF0Y2goJ1x4ZTAnKSkKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnKD9hKVx3JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ1x4ZTAnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKCdceGUwJykpCiAgICAgICAgICMgQnl0ZXMgcGF0dGVybnMKICAgICAgICAgZm9yIGZsYWdzIGluICgwLCByZS5BU0NJSSk6Ci0gICAgICAgICAgICBwYXQgPSByZS5jb21waWxlKGInXHhjMCcsIHJlLklHTk9SRUNBU0UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaChiJ1x4ZTAnKSwgTm9uZSkKLSAgICAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoYidcdycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaChiJ1x4ZTAnKSwgTm9uZSkKKyAgICAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoYidceGMwJywgZmxhZ3MgfCByZS5JR05PUkVDQVNFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKGInXHhlMCcpKQorICAgICAgICAgICAgcGF0ID0gcmUuY29tcGlsZShiJ1x3JywgZmxhZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXQubWF0Y2goYidceGUwJykpCiAgICAgICAgICMgSW5jb21wYXRpYmlsaXRpZXMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmUuY29tcGlsZSwgYidcdycsIHJlLlVOSUNPREUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJlLmNvbXBpbGUsIGInKD91KVx3JykKQEAgLTk1NiwxMSArMTA3MiwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9zcmUuY29tcGlsZSwge30sIDAsIFtdKQogCiAgICAgZGVmIHRlc3Rfc2VhcmNoX2RvdF91bmljb2RlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNhYmMtJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1x4ZTktJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1x1MjBhYy0nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzXFUwMDEwZmZmZi0nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzXHhlOVx1MjBhY1xVMDAxMGZmZmYtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNhYmMtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNceGU5LScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzXHUyMGFjLScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzXFUwMDEwZmZmZi0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1x4ZTlcdTIwYWNcVTAwMTBmZmZmLScpKQogCiAgICAgZGVmIHRlc3RfY29tcGlsZShzZWxmKToKICAgICAgICAgIyBUZXN0IHJldHVybiB2YWx1ZSB3aGVuIGdpdmVuIHN0cmluZyBhbmQgcGF0dGVybiBhcyBwYXJhbWV0ZXIKQEAgLTEwNTMsNiArMTE2OSwyOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZShwYXR0ZXJuLCByZS5TKS5maW5kYWxsKGIneHl6JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYid4eXonXSwgbXNnPXBhdHRlcm4pCiAKKyAgICBkZWYgdGVzdF9tYXRjaF9yZXByKHNlbGYpOgorICAgICAgICBmb3Igc3RyaW5nIGluICdbYWJyYWNhZGFicmFdJywgUygnW2FicmFjYWRhYnJhXScpOgorICAgICAgICAgICAgbSA9IHJlLnNlYXJjaChyJyguKykoLio/KVwxJywgc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhbj0oMSwgMTIpLCBtYXRjaD0nYWJyYWNhZGFicmEnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShtKS5fX21vZHVsZV9fLCB0eXBlKG0pLl9fcXVhbG5hbWVfXykpCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGInW2FicmFjYWRhYnJhXScsIEIoYidbYWJyYWNhZGFicmFdJyksCisgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiJ1thYnJhY2FkYWJyYV0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiJ1thYnJhY2FkYWJyYV0nKSk6CisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKHJiJyguKykoLio/KVwxJywgc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhbj0oMSwgMTIpLCBtYXRjaD1iJ2FicmFjYWRhYnJhJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUobSkuX19tb2R1bGVfXywgdHlwZShtKS5fX3F1YWxuYW1lX18pKQorCisgICAgICAgIGZpcnN0LCBzZWNvbmQgPSBsaXN0KHJlLmZpbmRpdGVyKCIoYWEpfChiYikiLCAiYWEgYmIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZpcnN0KSwgIjwlcy4lcyBvYmplY3Q7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhbj0oMCwgMiksIG1hdGNoPSdhYSc+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUoc2Vjb25kKS5fX21vZHVsZV9fLCB0eXBlKGZpcnN0KS5fX3F1YWxuYW1lX18pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2Vjb25kKSwgIjwlcy4lcyBvYmplY3Q7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhbj0oMywgNSksIG1hdGNoPSdiYic+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUoc2Vjb25kKS5fX21vZHVsZV9fLCB0eXBlKHNlY29uZCkuX19xdWFsbmFtZV9fKSkKKwogCiAgICAgZGVmIHRlc3RfYnVnXzI1Mzcoc2VsZik6CiAgICAgICAgICMgaXNzdWUgMjUzNzogZW1wdHkgc3VibWF0Y2hlcwpAQCAtMTA4Miw2ICsxMjIwLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHBhdC5tYXRjaChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTcsIGVuZHBvcz0xMCkuc3BhbigpLCAoNywgOSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXQuZnVsbG1hdGNoKHN0cmluZz0nYWJyYWNhZGFicmEnLCBwb3M9NywgZW5kcG9zPTkpLnNwYW4oKSwgKDcsIDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgcGF0LnNlYXJjaChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTMsIGVuZHBvcz0xMCkuc3BhbigpLCAoNywgOSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBwYXQuZmluZGFsbChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTMsIGVuZHBvcz0xMCksIFsnYWInXSkKQEAgLTEwOTIsNiArMTIzMiw4OCBAQAogICAgICAgICAgICAgcGF0LnNjYW5uZXIoc3RyaW5nPSdhYnJhY2FkYWJyYScsIHBvcz0zLCBlbmRwb3M9MTApLnNlYXJjaCgpLnNwYW4oKSwKICAgICAgICAgICAgICg3LCA5KSkKIAorICAgIGRlZiB0ZXN0X2J1Z18yMDk5OChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjA5OTg6IEZ1bGxtYXRjaCBvZiByZXBlYXRlZCBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4KKyAgICAgICAgIyB3aXRoIGlnbm9yZSBjYXNlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaCgnW2EtY10rJywgJ0FCQycsIHJlLkkpLnNwYW4oKSwgKDAsIDMpKQorCisKK2NsYXNzIFBhdHRlcm5SZXByVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVjayhzZWxmLCBwYXR0ZXJuLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZS5jb21waWxlKHBhdHRlcm4pKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgY2hlY2tfZmxhZ3Moc2VsZiwgcGF0dGVybiwgZmxhZ3MsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3MpKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF93aXRob3V0X2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdyYW5kb20gcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJykiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2ZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSUdOT1JFQ0FTRSwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0UpIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIHJlLkl8cmUuU3xyZS5YLAorICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgIgorICAgICAgICAgICAgInJlLklHTk9SRUNBU0V8cmUuRE9UQUxMfHJlLlZFUkJPU0UpIikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5VLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicpIikKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5JfHJlLlN8cmUuVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLklHTk9SRUNBU0V8cmUuRE9UQUxMKSIpCisKKyAgICBkZWYgdGVzdF9pbmxpbmVfZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJyg/aSlwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgnKD9pKXBhdHRlcm4nLCByZS5JR05PUkVDQVNFKSIpCisKKyAgICBkZWYgdGVzdF91bmtub3duX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgMHgxMjMwMDB8cmUuSSwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0V8MHgxMjMwMDApIikKKworICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKGInYnl0ZXMgcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJykiKQorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKGInYnl0ZXMgcGF0dGVybicsIHJlLkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJywgcmUuQVNDSUkpIikKKworICAgIGRlZiB0ZXN0X3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygncmFuZG9tICJkb3VibGUgcXVvdGVkIiBwYXR0ZXJuJywKKyAgICAgICAgICAgICcnJ3JlLmNvbXBpbGUoJ3JhbmRvbSAiZG91YmxlIHF1b3RlZCIgcGF0dGVybicpJycnKQorICAgICAgICBzZWxmLmNoZWNrKCJyYW5kb20gJ3NpbmdsZSBxdW90ZWQnIHBhdHRlcm4iLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgicmFuZG9tICdzaW5nbGUgcXVvdGVkJyBwYXR0ZXJuIiknJycpCisgICAgICAgIHNlbGYuY2hlY2soJycnYm90aCAnc2luZ2xlJyBhbmQgImRvdWJsZSIgcXVvdGVzJycnLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgnYm90aCBcXCdzaW5nbGVcXCcgYW5kICJkb3VibGUiIHF1b3RlcycpJycnKQorCisgICAgZGVmIHRlc3RfbG9uZ19wYXR0ZXJuKHNlbGYpOgorICAgICAgICBwYXR0ZXJuID0gJ1ZlcnkgJXNwYXR0ZXJuJyAlICgnbG9uZyAnICogMTAwMCkKKyAgICAgICAgciA9IHJlcHIocmUuY29tcGlsZShwYXR0ZXJuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGxlbihyKSwgMzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjMwXSwgInJlLmNvbXBpbGUoJ1ZlcnkgbG9uZyBsb25nIGxvbiIpCisgICAgICAgIHIgPSByZXByKHJlLmNvbXBpbGUocGF0dGVybiwgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhsZW4ociksIDMwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzozMF0sICJyZS5jb21waWxlKCdWZXJ5IGxvbmcgbG9uZyBsb24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLTE2Ol0sICIsIHJlLklHTk9SRUNBU0UpIikKKworCitjbGFzcyBJbXBsZW1lbnRhdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgcmUgbW9kdWxlLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfb3ZlcmxhcF90YWJsZShzZWxmKToKKyAgICAgICAgZiA9IHNyZV9jb21waWxlLl9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiIiksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImEiKSwgWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiY2QiKSwgWzAsIDAsIDAsIDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFhYWEiKSwgWzAsIDEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiYWJiYSIpLCBbMCwgMCwgMSwgMiwgMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYWJjYWJkYWMiKSwgWzAsIDAsIDAsIDEsIDIsIDAsIDEsIDBdKQorCiAKIGRlZiBydW5fcmVfdGVzdHMoKToKICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKQEAgLTEyMjIsNyArMTQ0NCw3IEBACiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChSZVRlc3RzKQorICAgIHJ1bl91bml0dGVzdChfX25hbWVfXykKICAgICBydW5fcmVfdGVzdHMoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKaW5kZXggNTQ4M2RkMy4uOGI3NzgxOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CkBAIC0xLDE3ICsxLDIwIEBACiAiIiIKIFZlcnkgbWluaW1hbCB1bml0dGVzdHMgZm9yIHBhcnRzIG9mIHRoZSByZWFkbGluZSBtb2R1bGUuCi0KLVRoZXNlIHRlc3RzIHdlcmUgYWRkZWQgdG8gY2hlY2sgdGhhdCB0aGUgbGliZWRpdCBlbXVsYXRpb24gb24gT1NYIGFuZAotdGhlICJyZWFsIiByZWFkbGluZSBoYXZlIHRoZSBzYW1lIGludGVyZmFjZSBmb3IgaGlzdG9yeSBtYW5pcHVsYXRpb24uIFRoYXQncwotd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCiAiIiIKK2ltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiAjIFNraXAgdGVzdHMgaWYgdGhlcmUgaXMgbm8gcmVhZGxpbmUgbW9kdWxlCiByZWFkbGluZSA9IGltcG9ydF9tb2R1bGUoJ3JlYWRsaW5lJykKIAogY2xhc3MgVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24gKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUaGVzZSB0ZXN0cyB3ZXJlIGFkZGVkIHRvIGNoZWNrIHRoYXQgdGhlIGxpYmVkaXQgZW11bGF0aW9uIG9uIE9TWCBhbmQgdGhlCisgICAgInJlYWwiIHJlYWRsaW5lIGhhdmUgdGhlIHNhbWUgaW50ZXJmYWNlIGZvciBoaXN0b3J5IG1hbmlwdWxhdGlvbi4gVGhhdCdzCisgICAgd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCisgICAgIiIiCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKHJlYWRsaW5lLCAnY2xlYXJfaGlzdG9yeScpLAogICAgICAgICAgICAgICAgICAgICAgIlRoZSBoaXN0b3J5IHVwZGF0ZSB0ZXN0IGNhbm5vdCBiZSBydW4gYmVjYXVzZSB0aGUgIgpAQCAtNDAsOCArNDMsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCgpLCAxKQogCiAKK2NsYXNzIFRlc3RSZWFkbGluZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTk4ODQ6IEVuc3VyZSB0aGF0IHRoZSBBTlNJIHNlcXVlbmNlICJcMDMzWzEwMzRoIiBpcyBub3QKKyAgICAgICAgIyB3cml0dGVuIGludG8gc3Rkb3V0IHdoZW4gdGhlIHJlYWRsaW5lIG1vZHVsZSBpcyBpbXBvcnRlZCBhbmQgc3Rkb3V0CisgICAgICAgICMgaXMgcmVkaXJlY3RlZCB0byBhIHBpcGUuCisgICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCByZWFkbGluZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVSTT0neHRlcm0tMjU2Y29sb3InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicnKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24pCisgICAgcnVuX3VuaXR0ZXN0KFRlc3RIaXN0b3J5TWFuaXB1bGF0aW9uLCBUZXN0UmVhZGxpbmUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVncnRlc3QucHkgYi9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOThhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5CkBAIC0wLDAgKzEsMjc1IEBACisiIiIKK1Rlc3RzIG9mIHJlZ3J0ZXN0LnB5LgorIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGZhdWx0aGFuZGxlcgoraW1wb3J0IGdldG9wdAoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorCitjbGFzcyBQYXJzZUFyZ3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHJlZ3J0ZXN0J3MgYXJndW1lbnQgcGFyc2luZy4iIiIKKworICAgIGRlZiBjaGVja0Vycm9yKHNlbGYsIGFyZ3MsIG1zZyk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnIsIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgcmVncnRlc3QuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtc2csIGVyci5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLWgnLCAnLS1oZWxwJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXQsIFwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgICAgICByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdSdW4gUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuJywgb3V0LmdldHZhbHVlKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgImZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlcigpIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS10aW1lb3V0JywgJzQuMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRpbWVvdXQsIDQuMikKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10aW1lb3V0J10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXRpbWVvdXQnLCAnZm9vJ10sICdpbnZhbGlkIGZsb2F0IHZhbHVlJykKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXdhaXQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLndhaXQpCisKKyAgICBkZWYgdGVzdF9zbGF2ZWFyZ3Moc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXNsYXZlYXJncycsICdbW10sIHt9XSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnNsYXZlYXJncywgJ1tbXSwge31dJykKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS1zbGF2ZWFyZ3MnXSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9zdGFydChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVMnLCAnLS1zdGFydCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnN0YXJ0LCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy12J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMSkKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy12dnYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAzKQorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS12ZXJib3NlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMSkKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdmVyYm9zZSddICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAzKQorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDApCisKKyAgICBkZWYgdGVzdF92ZXJib3NlMihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXcnLCAnLS12ZXJib3NlMic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy52ZXJib3NlMikKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2UzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctVycsICctLXZlcmJvc2UzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnZlcmJvc2UzKQorCisgICAgZGVmIHRlc3RfcXVpZXQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1xJywgJy0tcXVpZXQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3Rfc2xvdyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW8nLCAnLS1zbG93JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnByaW50X3Nsb3cpCisKKyAgICBkZWYgdGVzdF9oZWFkZXIoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLWhlYWRlciddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuaGVhZGVyKQorCisgICAgZGVmIHRlc3RfcmFuZG9taXplKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctcicsICctLXJhbmRvbWl6ZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5yYW5kb21pemUpCisKKyAgICBkZWYgdGVzdF9yYW5kc2VlZChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcmFuZHNlZWQnLCAnMTIzNDUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5yYW5kb21fc2VlZCwgMTIzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5yYW5kb21pemUpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tcmFuZHNlZWQnXSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tcmFuZHNlZWQnLCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9mcm9tZmlsZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLWYnLCAnLS1mcm9tZmlsZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmZyb21maWxlLCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJywgJy1zJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9leGNsdWRlKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICcteCcsICctLWV4Y2x1ZGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZXhjbHVkZSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXMnLCAnLS1zaW5nbGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuc2luZ2xlKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnLWYnLCAnZm9vJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9tYXRjaChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW0nLCAnLS1tYXRjaCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdwYXR0ZXJuJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5tYXRjaF90ZXN0cywgJ3BhdHRlcm4nKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9mYWlsZmFzdChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUcnLCAnLS1mYWlsZmFzdCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICctdiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mYWlsZmFzdCkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICctVyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mYWlsZmFzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICctRy8tLWZhaWxmYXN0IG5lZWRzIGVpdGhlciAtdiBvciAtVycpCisKKyAgICBkZWYgdGVzdF91c2Uoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy11JywgJy0tdXNlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2d1aSxuZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy51c2VfcmVzb3VyY2VzLCBbJ2d1aScsICduZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZ3VpLG5vbmUsbmV0d29yayddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgWyduZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsaXN0KHJlZ3J0ZXN0LlJFU09VUkNFX05BTUVTKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkLnJlbW92ZSgnZ3VpJykKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdhbGwsLWd1aSddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbyddLCAnaW52YWxpZCByZXNvdXJjZScpCisKKyAgICBkZWYgdGVzdF9tZW1saW1pdChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLU0nLCAnLS1tZW1saW1pdCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc0RyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMubWVtbGltaXQsICc0RycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3Rlc3RkaXIoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXRlc3RkaXInLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudGVzdGRpciwgb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsICdmb28nKSkKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10ZXN0ZGlyJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfcnVubGVha3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1MJywgJy0tcnVubGVha3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucnVubGVha3MpCisKKyAgICBkZWYgdGVzdF9odW50cmxlYWtzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctUicsICctLWh1bnRybGVha3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnOiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDUsIDQsICdyZWZsb2cudHh0JykpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNjonXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmh1bnRybGVha3MsICg2LCA0LCAncmVmbG9nLnR4dCcpKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzozJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNSwgMywgJ3JlZmxvZy50eHQnKSkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc2OjM6bGVha3MubG9nJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNiwgMywgJ2xlYWtzLmxvZycpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICc2J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb286J10sICdpbnZhbGlkIGh1bnRybGVha3MgdmFsdWUnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnNjpmb28nXSwgJ2ludmFsaWQgaHVudHJsZWFrcyB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9tdWx0aXByb2Nlc3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1qJywgJy0tbXVsdGlwcm9jZXNzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzInXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9tcCwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1UJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1sJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1NJywgJzRHJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmFnZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVQnLCAnLS1jb3ZlcmFnZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy50cmFjZSkKKworICAgIGRlZiB0ZXN0X2NvdmVyZGlyKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctRCcsICctLWNvdmVyZGlyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2ZvbyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuY292ZXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgJ2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9ub2NvdmVyZGlyKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctTicsICctLW5vY292ZXJkaXInOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShucy5jb3ZlcmRpcikKKworICAgIGRlZiB0ZXN0X3RocmVzaG9sZChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXQnLCAnLS10aHJlc2hvbGQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnMTAwMCddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudGhyZXNob2xkLCAxMDAwKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb28nXSwgJ2ludmFsaWQgaW50IHZhbHVlJykKKworICAgIGRlZiB0ZXN0X25vd2luZG93cyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW4nLCAnLS1ub3dpbmRvd3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMubm93aW5kb3dzKQorCisgICAgZGVmIHRlc3RfZm9yZXZlcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUYnLCAnLS1mb3JldmVyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmZvcmV2ZXIpCisKKworICAgIGRlZiB0ZXN0X3VucmVjb2duaXplZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS14eHgnXSwgJ3VzYWdlOicpCisKKyAgICBkZWYgdGVzdF9sb25nX29wdGlvbl9fcGFydGlhbChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcXVpJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5xdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3RfdHdvX29wdGlvbnMoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aWV0JywgJy0tZXhjbHVkZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmV4Y2x1ZGUpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fd2l0aF9lbXB0eV9zdHJpbmdfdmFsdWUoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXN0YXJ0JywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnN0YXJ0LCAnJykKKworICAgIGRlZiB0ZXN0X2FyZyhzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmFyZ3MsIFsnZm9vJ10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fYW5kX2FyZyhzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcXVpZXQnLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5xdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmFyZ3MsIFsnZm9vJ10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQppbmRleCBjMjMzYjFkLi5hZTY3ZjA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CkBAIC0zLDExICszLDExIEBACiAgIE5pY2sgTWF0aGV3c29uCiAiIiIKIAotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjcmVhdGVfZW1wdHlfZmlsZSwgdmVyYm9zZQpAQCAtMjQ4LDcgKzI0OCw4IEBACiAgICAgICAgIHNvdXJjZV9wYXRoX2xlbiArPSAyICogKGxlbihzZWxmLmxvbmduYW1lKSArIDEpCiAgICAgICAgICMgYSBwYXRoIHNlcGFyYXRvciArIGBtb2R1bGVfbmFtZWAgKyAiLnB5IgogICAgICAgICBzb3VyY2VfcGF0aF9sZW4gKz0gbGVuKG1vZHVsZV9uYW1lKSArIDEgKyBsZW4oIi5weSIpCi0gICAgICAgIGNhY2hlZF9wYXRoX2xlbiA9IHNvdXJjZV9wYXRoX2xlbiArIGxlbihpbXAuY2FjaGVfZnJvbV9zb3VyY2UoIngucHkiKSkgLSBsZW4oIngucHkiKQorICAgICAgICBjYWNoZWRfcGF0aF9sZW4gPSAoc291cmNlX3BhdGhfbGVuICsKKyAgICAgICAgICAgIGxlbihpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgieC5weSIpKSAtIGxlbigieC5weSIpKQogICAgICAgICBpZiBvcy5uYW1lID09ICdudCcgYW5kIGNhY2hlZF9wYXRoX2xlbiA+PSAyNTg6CiAgICAgICAgICAgICAjIFVuZGVyIFdpbmRvd3MsIHRoZSBtYXggcGF0aCBsZW4gaXMgMjYwIGluY2x1ZGluZyBDJ3MgdGVybWluYXRpbmcKICAgICAgICAgICAgICMgTlVMIGNoYXJhY3Rlci4KQEAgLTI1OSw2ICsyNjAsNyBAQAogICAgICAgICAgICAgcHJpbnQoImNhY2hlZF9wYXRoX2xlbiA9IiwgY2FjaGVkX3BhdGhfbGVuKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCiAgICAgICAgIHNlbGYuX2NoZWNrX3BhdGhfbGltaXRhdGlvbnMoc2VsZi5wa2duYW1lKQogICAgICAgICBjcmVhdGVfZW1wdHlfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCBzZWxmLnBrZ25hbWUgKyAnLnB5JykpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQppbmRleCAwY2Y2MWNiLi4yZWNhZTBmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKQEAgLTEsMyArMSw2IEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHN5cworaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHRpbWUKQEAgLTYxLDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW1pdF9zZXQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgaWYgbGltaXRfc2V0OgpAQCAtMTI5LDYgKzEzMiwzMyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGFnZXNpemUsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGFnZXNpemUsIDApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ3Rlc3QgcmVxdWlyZXMgTGludXgnKQorICAgIGRlZiB0ZXN0X2xpbnV4X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgZm9yIGF0dHIgaW4gWydNU0dRVUVVRScsICdOSUNFJywgJ1JUUFJJTycsICdSVFRJTUUnLCAnU0lHUEVORElORyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEBzdXBwb3J0LnJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbig5KQorICAgIGRlZiB0ZXN0X2ZyZWVic2RfY29udGFudHMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIFsnU1dBUCcsICdTQlNJWkUnLCAnTlBUUyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocmVzb3VyY2UsICdwcmxpbWl0JyksICdubyBwcmxpbWl0JykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDM2KQorICAgIGRlZiB0ZXN0X3BybGltaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2UucHJsaW1pdCkKKyAgICAgICAgaWYgb3MuZ2V0ZXVpZCgpICE9IDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IsIHJlc291cmNlLnBybGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCByZXNvdXJjZS5STElNSVRfQVMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb2Nlc3NMb29rdXBFcnJvciwgcmVzb3VyY2UucHJsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHJlc291cmNlLlJMSU1JVF9BUykKKyAgICAgICAgbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0FTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc291cmNlLnBybGltaXQoMCwgcmVzb3VyY2UuUkxJTUlUX0FTKSwgbGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzb3VyY2UucHJsaW1pdCgwLCByZXNvdXJjZS5STElNSVRfQVMsIGxpbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCkKKworCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUmVzb3VyY2VUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9yb2JvdHBhcnNlci5weQppbmRleCBlYmM4MTljLi5kMDEyNjZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkKQEAgLTQsNiArNCwxMiBAQAogZnJvbSB1cmxsaWIuZXJyb3IgaW1wb3J0IFVSTEVycm9yLCBIVFRQRXJyb3IKIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgSFRUUFNlcnZlcgordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKIAogY2xhc3MgUm9ib3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGV4PU5vbmUsIHBhcnNlcj1Ob25lLCB1cmw9Tm9uZSwgZ29vZD1Ob25lLCBhZ2VudD1Ob25lKToKQEAgLTI0NywzMyArMjUzLDUyIEBACiBSb2JvdFRlc3QoMTYsIGRvYywgZ29vZCwgYmFkKQogCiAKLWNsYXNzIE5ldHdvcmtUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBSb2JvdEhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDAzLCAiRm9yYmlkZGVuIGFjY2VzcyIpCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIHBhc3MKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICd0aHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCitjbGFzcyBQYXNzd29yZFByb3RlY3RlZFNpdGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gSFRUUFNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgUm9ib3RIYW5kbGVyKQorCisgICAgICAgIHNlbGYudCA9IHRocmVhZGluZy5UaHJlYWQoCisgICAgICAgICAgICBuYW1lPSdIVFRQU2VydmVyIHNlcnZpbmcnLAorICAgICAgICAgICAgdGFyZ2V0PXNlbGYuc2VydmVyLnNlcnZlX2ZvcmV2ZXIsCisgICAgICAgICAgICAjIFNob3J0IHBvbGwgaW50ZXJ2YWwgdG8gbWFrZSB0aGUgdGVzdCBmaW5pc2ggcXVpY2tseS4KKyAgICAgICAgICAgICMgVGltZSBiZXR3ZWVuIHJlcXVlc3RzIGlzIHNob3J0IGVub3VnaCB0aGF0IHdlIHdvbid0IHdha2UKKyAgICAgICAgICAgICMgdXAgc3B1cmlvdXNseSB0b28gbWFueSB0aW1lcy4KKyAgICAgICAgICAgIGt3YXJncz17J3BvbGxfaW50ZXJ2YWwnOjAuMDF9KQorICAgICAgICBzZWxmLnQuZGFlbW9uID0gVHJ1ZSAgIyBJbiBjYXNlIHRoaXMgZnVuY3Rpb24gcmFpc2VzLgorICAgICAgICBzZWxmLnQuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlci5zaHV0ZG93bigpCisgICAgICAgIHNlbGYudC5qb2luKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RQYXNzd29yZFByb3RlY3RlZFNpdGUoKQogCiAgICAgZGVmIHRlc3RQYXNzd29yZFByb3RlY3RlZFNpdGUoc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdtdWVibGVzbW9yYWxlZGEuY29tJyk6Ci0gICAgICAgICAgICB1cmwgPSAnaHR0cDovL211ZWJsZXNtb3JhbGVkYS5jb20nCi0gICAgICAgICAgICByb2JvdHNfdXJsID0gdXJsICsgIi9yb2JvdHMudHh0IgotICAgICAgICAgICAgIyBGaXJzdCBjaGVjayB0aGUgVVJMIGlzIHVzYWJsZSBmb3Igb3VyIHB1cnBvc2VzLCBzaW5jZSB0aGUKLSAgICAgICAgICAgICMgdGVzdCBzaXRlIGlzIGEgYml0IGZsYWt5LgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHVybG9wZW4ocm9ib3RzX3VybCkKLSAgICAgICAgICAgIGV4Y2VwdCBIVFRQRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmNvZGUgbm90IGluIHs0MDEsIDQwM306Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXIgc2hvdWxkIHJldHVybiBhIDQwMSBvciA0MDMgSFRUUCBlcnJvciwgbm90ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgJSAocm9ib3RzX3VybCwgZS5jb2RlKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKLSAgICAgICAgICAgICAgICAgICAgIiVyIHNob3VsZCByZXR1cm4gYSA0MDEgb3IgNDAzIEhUVFAgZXJyb3IsIG5vdCBzdWNjZWVkIgotICAgICAgICAgICAgICAgICAgICAlIChyb2JvdHNfdXJsKSkKLSAgICAgICAgICAgIHBhcnNlciA9IHVybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIoKQotICAgICAgICAgICAgcGFyc2VyLnNldF91cmwodXJsKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhcnNlci5yZWFkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBVUkxFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCclcyBpcyB1bmF2YWlsYWJsZScgJSB1cmwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5jYW5fZmV0Y2goIioiLCByb2JvdHNfdXJsKSwgRmFsc2UpCisgICAgICAgIGFkZHIgPSBzZWxmLnNlcnZlci5zZXJ2ZXJfYWRkcmVzcworICAgICAgICB1cmwgPSAnaHR0cDovLycgKyBzdXBwb3J0LkhPU1QgKyAnOicgKyBzdHIoYWRkclsxXSkKKyAgICAgICAgcm9ib3RzX3VybCA9IHVybCArICIvcm9ib3RzLnR4dCIKKyAgICAgICAgcGFyc2VyID0gdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfdXJsKHVybCkKKyAgICAgICAgcGFyc2VyLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhcnNlci5jYW5fZmV0Y2goIioiLCByb2JvdHNfdXJsKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzJyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKK2NsYXNzIE5ldHdvcmtUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBAdW5pdHRlc3Quc2tpcCgnZG9lcyBub3QgaGFuZGxlIHRoZSBnemlwIGVuY29kaW5nIGRlbGl2ZXJlZCBieSBweWRvdG9yZycpCiAgICAgZGVmIHRlc3RQeXRob25Pcmcoc2VsZik6CkBAIC0yODgsOCArMzEzLDggQEAKIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3VpdGUsIHBhdHRlcm4pOgogICAgIHN1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKE5ldHdvcmtUZXN0Q2FzZSkKICAgICBzdWl0ZS5hZGRUZXN0KHRlc3RzKQorICAgIHN1aXRlLmFkZFRlc3QoUGFzc3dvcmRQcm90ZWN0ZWRTaXRlVGVzdENhc2UoKSkKICAgICByZXR1cm4gc3VpdGUKIAogaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWyduZXR3b3JrJ10KICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CmluZGV4IDJkZGJhMzQuLjc4NmI4MTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLCBpbXBvcnRsaWIubWFjaGluZXJ5LCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHB5X2NvbXBpbGUKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoCiAgICAgZm9yZ2V0LCBtYWtlX2xlZ2FjeV9weWMsIHJ1bl91bml0dGVzdCwgdW5sb2FkLCB2ZXJib3NlLCBub190cmFjaW5nLApAQCAtNDcsNiArNDcsNyBAQAogICAgICJfX2NhY2hlZF9fIjogTm9uZSwKICAgICAiX19wYWNrYWdlX18iOiBOb25lLAogICAgICJfX2RvY19fIjogTm9uZSwKKyAgICAiX19zcGVjX18iOiBOb25lCiB9CiBleGFtcGxlX25hbWVzcGFjZSA9ICB7CiAgICAgInN5cyI6IHN5cywKQEAgLTY3LDExICs2OCwxOSBAQAogICAgICMgdGVzdGluZyBvY2N1cnMgYXQgdGhvc2UgdXBwZXIgbGF5ZXJzIGFzIHdlbGwsIG5vdCBqdXN0IGF0IHRoZSB1dGlsaXR5CiAgICAgIyBsYXllcgogCisgICAgIyBGaWd1cmluZyBvdXQgdGhlIGxvYWRlciBkZXRhaWxzIGluIGFkdmFuY2UgaXMgaGFyZCB0byBkbywgc28gd2Ugc2tpcAorICAgICMgY2hlY2tpbmcgdGhlIGZ1bGwgZGV0YWlscyBvZiBsb2FkZXIgYW5kIGxvYWRlcl9zdGF0ZQorICAgIENIRUNLRURfU1BFQ19BVFRSSUJVVEVTID0gWyJuYW1lIiwgInBhcmVudCIsICJvcmlnaW4iLCAiY2FjaGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzX2xvY2F0aW9uIiwgInN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIl0KKwogICAgIGRlZiBhc3NlcnROYW1lc3BhY2VNYXRjaGVzKHNlbGYsIHJlc3VsdF9ucywgZXhwZWN0ZWRfbnMpOgogICAgICAgICAiIiJDaGVjayB0d28gbmFtZXNwYWNlcyBtYXRjaC4KIAogICAgICAgICAgICBJZ25vcmVzIGFueSB1bnNwZWNpZmllZCBpbnRlcnByZXRlciBjcmVhdGVkIG5hbWVzCiAgICAgICAgICIiIgorICAgICAgICAjIEF2b2lkIHNpZGUgZWZmZWN0cworICAgICAgICByZXN1bHRfbnMgPSByZXN1bHRfbnMuY29weSgpCisgICAgICAgIGV4cGVjdGVkX25zID0gZXhwZWN0ZWRfbnMuY29weSgpCiAgICAgICAgICMgSW1wbHMgYXJlIHBlcm1pdHRlZCB0byBhZGQgZXh0cmEgbmFtZXMsIHNvIGZpbHRlciB0aGVtIG91dAogICAgICAgICBmb3IgayBpbiBsaXN0KHJlc3VsdF9ucyk6CiAgICAgICAgICAgICBpZiBrLnN0YXJ0c3dpdGgoIl9fIikgYW5kIGsuZW5kc3dpdGgoIl9fIik6CkBAIC03OSw3ICs4OCwyNSBAQAogICAgICAgICAgICAgICAgICAgICByZXN1bHRfbnMucG9wKGspCiAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gZXhwZWN0ZWRfbnNbIm5lc3RlZCJdOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRfbnNbIm5lc3RlZCJdLnBvcChrKQotICAgICAgICAjIERvbid0IHVzZSBkaXJlY3QgZGljdCBjb21wYXJpc29uIC0gdGhlIGRpZmZzIGFyZSB0b28gaGFyZCB0byBkZWJ1ZworICAgICAgICAjIFNwZWMgZXF1YWxpdHkgaW5jbHVkZXMgdGhlIGxvYWRlciwgc28gd2UgdGFrZSB0aGUgc3BlYyBvdXQgb2YgdGhlCisgICAgICAgICMgcmVzdWx0IG5hbWVzcGFjZSBhbmQgY2hlY2sgdGhhdCBzZXBhcmF0ZWx5CisgICAgICAgIHJlc3VsdF9zcGVjID0gcmVzdWx0X25zLnBvcCgiX19zcGVjX18iKQorICAgICAgICBleHBlY3RlZF9zcGVjID0gZXhwZWN0ZWRfbnMucG9wKCJfX3NwZWNfXyIpCisgICAgICAgIGlmIGV4cGVjdGVkX3NwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdF9zcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiBhbiBleHBlY3RlZCBsb2FkZXIgaXMgc2V0LCB3ZSBqdXN0IGNoZWNrIHdlIGdvdCB0aGUgcmlnaHQKKyAgICAgICAgICAgICMgdHlwZSwgcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIGZ1bGwgZXF1YWxpdHkKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX3NwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHRfc3BlYy5sb2FkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShleHBlY3RlZF9zcGVjLmxvYWRlcikpCisgICAgICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLkNIRUNLRURfU1BFQ19BVFRSSUJVVEVTOgorICAgICAgICAgICAgICAgIGsgPSAiX19zcGVjX18uIiArIGF0dHIKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSAoaywgZ2V0YXR0cihyZXN1bHRfc3BlYywgYXR0cikpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoaywgZ2V0YXR0cihleHBlY3RlZF9zcGVjLCBhdHRyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICMgRm9yIHRoZSByZXN0LCB3ZSBzdGlsbCBkb24ndCB1c2UgZGlyZWN0IGRpY3QgY29tcGFyaXNvbiBvbiB0aGUKKyAgICAgICAgIyBuYW1lc3BhY2UsIGFzIHRoZSBkaWZmcyBhcmUgdG9vIGhhcmQgdG8gZGVidWcgaWYgYW55dGhpbmcgYnJlYWtzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJlc3VsdF9ucyksIHNldChleHBlY3RlZF9ucykpCiAgICAgICAgIGZvciBrIGluIHJlc3VsdF9uczoKICAgICAgICAgICAgIGFjdHVhbCA9IChrLCByZXN1bHRfbnNba10pCkBAIC0xMzAsMTIgKzE1NywxNiBAQAogICAgICAgICBtb2RfZm5hbWUgPSAiU29tZSBvdGhlciBub25zZW5zZSIKICAgICAgICAgbW9kX2xvYWRlciA9ICJOb3cgeW91J3JlIGp1c3QgYmVpbmcgc2lsbHkiCiAgICAgICAgIG1vZF9wYWNrYWdlID0gJycgIyBUcmVhdCBhcyBhIHRvcCBsZXZlbCBtb2R1bGUKKyAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMobW9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1tb2RfZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1tb2RfbG9hZGVyKQogICAgICAgICBleHBlY3RlZF9ucyA9IGV4YW1wbGVfbmFtZXNwYWNlLmNvcHkoKQogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogbW9kX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBtb2RfZm5hbWUsCiAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IG1vZF9sb2FkZXIsCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiBtb2RfcGFja2FnZSwKKyAgICAgICAgICAgICJfX3NwZWNfXyI6IG1vZF9zcGVjLAogICAgICAgICAgICAgInJ1bl9hcmd2MCI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJydW5fbmFtZV9pbl9zeXNfbW9kdWxlcyI6IFRydWUsCiAgICAgICAgICAgICAibW9kdWxlX2luX3N5c19tb2R1bGVzIjogVHJ1ZSwKQEAgLTE0NCw5ICsxNzUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoZXhhbXBsZV9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2dsb2JhbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9mbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9sb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfcGFja2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9zcGVjKQogICAgICAgICBzZWxmLmNoZWNrX2NvZGVfZXhlY3V0aW9uKGNyZWF0ZV9ucywgZXhwZWN0ZWRfbnMpCiAKICMgVE9ETzogVXNlIHNlbGYuYWRkQ2xlYW51cCB0byBnZXQgcmlkIG9mIGEgbG90IG9mIHRyeS1maW5hbGx5IGJsb2NrcwpAQCAtMTc2LDMxICsyMDUsNDMgQEAKICAgICBkZWYgdGVzdF9saWJyYXJ5X21vZHVsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fbW9kdWxlKCJydW5weSIpWyJfX25hbWVfXyJdLCAicnVucHkiKQogCi0gICAgZGVmIF9hZGRfcGtnX2RpcihzZWxmLCBwa2dfZGlyKToKKyAgICBkZWYgX2FkZF9wa2dfZGlyKHNlbGYsIHBrZ19kaXIsIG5hbWVzcGFjZT1GYWxzZSk6CiAgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCisgICAgICAgIGlmIG5hbWVzcGFjZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHBrZ19mbmFtZSA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAiX19pbml0X18ucHkiKQogICAgICAgICBjcmVhdGVfZW1wdHlfZmlsZShwa2dfZm5hbWUpCiAgICAgICAgIHJldHVybiBwa2dfZm5hbWUKIAotICAgIGRlZiBfbWFrZV9wa2coc2VsZiwgc291cmNlLCBkZXB0aCwgbW9kX2Jhc2U9InJ1bnB5X3Rlc3QiKToKKyAgICBkZWYgX21ha2VfcGtnKHNlbGYsIHNvdXJjZSwgZGVwdGgsIG1vZF9iYXNlPSJydW5weV90ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICosIG5hbWVzcGFjZT1GYWxzZSwgcGFyZW50X25hbWVzcGFjZXM9RmFsc2UpOgorICAgICAgICAjIEVuZm9yY2UgYSBjb3VwbGUgb2YgaW50ZXJuYWwgc2FuaXR5IGNoZWNrcyBvbiB0ZXN0IGNhc2VzCisgICAgICAgIGlmIChuYW1lc3BhY2Ugb3IgcGFyZW50X25hbWVzcGFjZXMpIGFuZCBub3QgZGVwdGg6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IG1hcmsgdG9wIGxldmVsIG1vZHVsZSBhcyBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXNwYWNlIHBhY2thZ2UiKQogICAgICAgICBwa2dfbmFtZSA9ICJfX3J1bnB5X3BrZ19fIgogICAgICAgICB0ZXN0X2ZuYW1lID0gbW9kX2Jhc2Urb3MuZXh0c2VwKyJweSIKICAgICAgICAgcGtnX2RpciA9IHN1Yl9kaXIgPSBvcy5wYXRoLnJlYWxwYXRoKHRlbXBmaWxlLm1rZHRlbXAoKSkKICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIFBhY2thZ2UgdHJlZSBpbjoiLCBzdWJfZGlyKQogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGtnX2RpcikKICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIFVwZGF0ZWQgc3lzLnBhdGg6Iiwgc3lzLnBhdGhbMF0pCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoKToKLSAgICAgICAgICAgIHN1Yl9kaXIgPSBvcy5wYXRoLmpvaW4oc3ViX2RpciwgcGtnX25hbWUpCi0gICAgICAgICAgICBwa2dfZm5hbWUgPSBzZWxmLl9hZGRfcGtnX2RpcihzdWJfZGlyKQotICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIE5leHQgbGV2ZWwgaW46Iiwgc3ViX2RpcikKLSAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIHBrZ19mbmFtZSkKKyAgICAgICAgaWYgZGVwdGg6CisgICAgICAgICAgICBuYW1lc3BhY2VfZmxhZ3MgPSBbcGFyZW50X25hbWVzcGFjZXNdICogZGVwdGgKKyAgICAgICAgICAgIG5hbWVzcGFjZV9mbGFnc1stMV0gPSBuYW1lc3BhY2UKKyAgICAgICAgICAgIGZvciBuYW1lc3BhY2VfZmxhZyBpbiBuYW1lc3BhY2VfZmxhZ3M6CisgICAgICAgICAgICAgICAgc3ViX2RpciA9IG9zLnBhdGguam9pbihzdWJfZGlyLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBwa2dfZm5hbWUgPSBzZWxmLl9hZGRfcGtnX2RpcihzdWJfZGlyLCBuYW1lc3BhY2VfZmxhZykKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIiAgTmV4dCBsZXZlbCBpbjoiLCBzdWJfZGlyKQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIHBrZ19mbmFtZSkKICAgICAgICAgbW9kX2ZuYW1lID0gb3MucGF0aC5qb2luKHN1Yl9kaXIsIHRlc3RfZm5hbWUpCiAgICAgICAgIG1vZF9maWxlID0gb3Blbihtb2RfZm5hbWUsICJ3IikKICAgICAgICAgbW9kX2ZpbGUud3JpdGUoc291cmNlKQogICAgICAgICBtb2RfZmlsZS5jbG9zZSgpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIG1vZF9mbmFtZSkKICAgICAgICAgbW9kX25hbWUgPSAocGtnX25hbWUrIi4iKSpkZXB0aCArIG1vZF9iYXNlCi0gICAgICAgIHJldHVybiBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lCisgICAgICAgIG1vZF9zcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obW9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX2ZuYW1lKQorICAgICAgICByZXR1cm4gcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMKIAogICAgIGRlZiBfZGVsX3BrZyhzZWxmLCB0b3AsIGRlcHRoLCBtb2RfbmFtZSk6CiAgICAgICAgIGZvciBlbnRyeSBpbiBsaXN0KHN5cy5tb2R1bGVzKToKQEAgLTIzMCwxOSArMjcxLDI5IEBACiAgICAgZGVmIF9maXhfbnNfZm9yX2xlZ2FjeV9weWMoc2VsZiwgbnMsIGFsdGVyX3N5cyk6CiAgICAgICAgIGNoYXJfdG9fYWRkID0gImMiIGlmIF9fZGVidWdfXyBlbHNlICJvIgogICAgICAgICBuc1siX19maWxlX18iXSArPSBjaGFyX3RvX2FkZAorICAgICAgICBuc1siX19jYWNoZWRfXyJdID0gbnNbIl9fZmlsZV9fIl0KKyAgICAgICAgc3BlYyA9IG5zWyJfX3NwZWNfXyJdCisgICAgICAgIG5ld19zcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc3BlYy5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zWyJfX2ZpbGVfXyJdKQorICAgICAgICBuc1siX19zcGVjX18iXSA9IG5ld19zcGVjCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIG5zWyJydW5fYXJndjAiXSArPSBjaGFyX3RvX2FkZAogCiAKLSAgICBkZWYgX2NoZWNrX21vZHVsZShzZWxmLCBkZXB0aCwgYWx0ZXJfc3lzPUZhbHNlKToKLSAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKLSAgICAgICAgICAgICAgIHNlbGYuX21ha2VfcGtnKGV4YW1wbGVfc291cmNlLCBkZXB0aCkpCisgICAgZGVmIF9jaGVja19tb2R1bGUoc2VsZiwgZGVwdGgsIGFsdGVyX3N5cz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLCBuYW1lc3BhY2U9RmFsc2UsIHBhcmVudF9uYW1lc3BhY2VzPUZhbHNlKToKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9bmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X25hbWVzcGFjZXM9cGFyZW50X25hbWVzcGFjZXMpKQogICAgICAgICBmb3JnZXQobW9kX25hbWUpCiAgICAgICAgIGV4cGVjdGVkX25zID0gZXhhbXBsZV9uYW1lc3BhY2UuY29weSgpCiAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKKyAgICAgICAgICAgICJfX2NhY2hlZF9fIjogbW9kX3NwZWMuY2FjaGVkLAogICAgICAgICAgICAgIl9fcGFja2FnZV9fIjogbW9kX25hbWUucnBhcnRpdGlvbigiLiIpWzBdLAorICAgICAgICAgICAgIl9fc3BlY19fIjogbW9kX3NwZWMsCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC0yNjksMTYgKzMyMCwyMSBAQAogICAgICAgICAgICAgc2VsZi5fZGVsX3BrZyhwa2dfZGlyLCBkZXB0aCwgbW9kX25hbWUpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiTW9kdWxlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSIpCiAKLSAgICBkZWYgX2NoZWNrX3BhY2thZ2Uoc2VsZiwgZGVwdGgsIGFsdGVyX3N5cz1GYWxzZSk6Ci0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCi0gICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsICJfX21haW5fXyIpKQorICAgIGRlZiBfY2hlY2tfcGFja2FnZShzZWxmLCBkZXB0aCwgYWx0ZXJfc3lzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAqLCBuYW1lc3BhY2U9RmFsc2UsIHBhcmVudF9uYW1lc3BhY2VzPUZhbHNlKToKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsICJfX21haW5fXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9bmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X25hbWVzcGFjZXM9cGFyZW50X25hbWVzcGFjZXMpKQogICAgICAgICBwa2dfbmFtZSA9IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXQogICAgICAgICBmb3JnZXQobW9kX25hbWUpCiAgICAgICAgIGV4cGVjdGVkX25zID0gZXhhbXBsZV9uYW1lc3BhY2UuY29weSgpCiAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKKyAgICAgICAgICAgICJfX2NhY2hlZF9fIjogaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobW9kX2ZuYW1lKSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IHBrZ19uYW1lLAorICAgICAgICAgICAgIl9fc3BlY19fIjogbW9kX3NwZWMsCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC0zMzQsNyArMzkwLDcgQEAKIGZyb20gLiBpbXBvcnQgc2libGluZwogZnJvbSAuLnVuY2xlLmNvdXNpbiBpbXBvcnQgbmVwaGV3CiAiIiIKLSAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCiAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhjb250ZW50cywgZGVwdGgpKQogICAgICAgICBpZiBydW5fbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZSA9IG1vZF9uYW1lCkBAIC0zNzMsMTEgKzQyOSwzMSBAQAogICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19tb2R1bGUoZGVwdGgpCiAKKyAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2luX25hbWVzcGFjZV9wYWNrYWdlKHNlbGYpOgorICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vZHVsZShkZXB0aCwgbmFtZXNwYWNlPVRydWUsIHBhcmVudF9uYW1lc3BhY2VzPVRydWUpCisKICAgICBkZWYgdGVzdF9ydW5fcGFja2FnZShzZWxmKToKICAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgogICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoKQogCisgICAgZGVmIHRlc3RfcnVuX3BhY2thZ2VfaW5fbmFtZXNwYWNlX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGFja2FnZShkZXB0aCwgcGFyZW50X25hbWVzcGFjZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3J1bl9uYW1lc3BhY2VfcGFja2FnZShzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCisgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoLCBuYW1lc3BhY2U9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3J1bl9uYW1lc3BhY2VfcGFja2FnZV9pbl9uYW1lc3BhY2VfcGFja2FnZShzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCisgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoLCBuYW1lc3BhY2U9VHJ1ZSwgcGFyZW50X25hbWVzcGFjZXM9VHJ1ZSkKKwogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfYWx0ZXJfc3lzKHNlbGYpOgogICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoNCk6CiAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKQEAgLTQwMSwxNCArNDc3LDE2IEBACiAgICAgZGVmIHRlc3RfcnVuX25hbWUoc2VsZik6CiAgICAgICAgIGRlcHRoID0gMQogICAgICAgICBydW5fbmFtZSA9ICJBbmQgbm93IGZvciBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQiCi0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAogICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coZXhhbXBsZV9zb3VyY2UsIGRlcHRoKSkKICAgICAgICAgZm9yZ2V0KG1vZF9uYW1lKQogICAgICAgICBleHBlY3RlZF9ucyA9IGV4YW1wbGVfbmFtZXNwYWNlLmNvcHkoKQogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogcnVuX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBtb2RfZm5hbWUsCisgICAgICAgICAgICAiX19jYWNoZWRfXyI6IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1vZF9mbmFtZSksCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiBtb2RfbmFtZS5ycGFydGl0aW9uKCIuIilbMF0sCisgICAgICAgICAgICAiX19zcGVjX18iOiBtb2Rfc3BlYywKICAgICAgICAgfSkKICAgICAgICAgZGVmIGNyZWF0ZV9ucyhpbml0X2dsb2JhbHMpOgogICAgICAgICAgICAgcmV0dXJuIHJ1bl9tb2R1bGUobW9kX25hbWUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUpCkBAIC00MzcsNyArNTE1LDcgQEAKICAgICAgICAgcGtnX25hbWUgPSAiLiIuam9pbihbYmFzZV9uYW1lXSAqIG1heF9kZXB0aCkKICAgICAgICAgZXhwZWN0ZWRfcGFja2FnZXMuYWRkKHBrZ19uYW1lKQogICAgICAgICBleHBlY3RlZF9tb2R1bGVzLmFkZChwa2dfbmFtZSArICIucnVucHlfdGVzdCIpCi0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAogICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coIiIsIG1heF9kZXB0aCkpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLl9kZWxfcGtnLCBwa2dfZGlyLCBtYXhfZGVwdGgsIG1vZF9uYW1lKQogICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMiwgbWF4X2RlcHRoKzEpOgpAQCAtNDU1LDIxICs1MzMsMzkgQEAKIGNsYXNzIFJ1blBhdGhUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgQ29kZUV4ZWN1dGlvbk1peGluKToKICAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5ydW5fcGF0aCIiIgogCi0gICAgZGVmIF9tYWtlX3Rlc3Rfc2NyaXB0KHNlbGYsIHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlPU5vbmUpOgorICAgIGRlZiBfbWFrZV90ZXN0X3NjcmlwdChzZWxmLCBzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1Ob25lLCBvbWl0X3N1ZmZpeD1GYWxzZSk6CiAgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgogICAgICAgICAgICAgc291cmNlID0gZXhhbXBsZV9zb3VyY2UKLSAgICAgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBvbWl0X3N1ZmZpeCkKIAogICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9uYW1lLCBleHBlY3RlZF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgbW9kX25hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rfc3BlYz1UcnVlLCBjaGVja19sb2FkZXI9VHJ1ZSk6CiAgICAgICAgICMgRmlyc3QgY2hlY2sgaXMgd2l0aG91dCBydW5fbmFtZQogICAgICAgICBkZWYgY3JlYXRlX25zKGluaXRfZ2xvYmFscyk6CiAgICAgICAgICAgICByZXR1cm4gcnVuX3BhdGgoc2NyaXB0X25hbWUsIGluaXRfZ2xvYmFscykKICAgICAgICAgZXhwZWN0ZWRfbnMgPSBleGFtcGxlX25hbWVzcGFjZS5jb3B5KCkKKyAgICAgICAgaWYgbW9kX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHNwZWNfbmFtZSA9IGV4cGVjdGVkX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwZWNfbmFtZSA9IG1vZF9uYW1lCisgICAgICAgIGlmIGV4cGVjdF9zcGVjOgorICAgICAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzcGVjX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGUpCisgICAgICAgICAgICBtb2RfY2FjaGVkID0gbW9kX3NwZWMuY2FjaGVkCisgICAgICAgICAgICBpZiBub3QgY2hlY2tfbG9hZGVyOgorICAgICAgICAgICAgICAgIG1vZF9zcGVjLmxvYWRlciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZF9zcGVjID0gbW9kX2NhY2hlZCA9IE5vbmUKKwogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogZXhwZWN0ZWRfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IGV4cGVjdGVkX2ZpbGUsCisgICAgICAgICAgICAiX19jYWNoZWRfXyI6IG1vZF9jYWNoZWQsCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiAiIiwKKyAgICAgICAgICAgICJfX3NwZWNfXyI6IG1vZF9zcGVjLAogICAgICAgICAgICAgInJ1bl9hcmd2MCI6IGV4cGVjdGVkX2FyZ3YwLAogICAgICAgICAgICAgInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzIjogVHJ1ZSwKICAgICAgICAgICAgICJtb2R1bGVfaW5fc3lzX21vZHVsZXMiOiBUcnVlLApAQCAtNDc5LDYgKzU3NSwxMiBAQAogICAgICAgICBydW5fbmFtZSA9ICJwcm92ZS5pc3N1ZTE1MjMwLmlzLmZpeGVkIgogICAgICAgICBkZWYgY3JlYXRlX25zKGluaXRfZ2xvYmFscyk6CiAgICAgICAgICAgICByZXR1cm4gcnVuX3BhdGgoc2NyaXB0X25hbWUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUpCisgICAgICAgIGlmIGV4cGVjdF9zcGVjIGFuZCBtb2RfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihydW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBjaGVja19sb2FkZXI6CisgICAgICAgICAgICAgICAgbW9kX3NwZWMubG9hZGVyID0gTm9uZQorICAgICAgICAgICAgZXhwZWN0ZWRfbnNbIl9fc3BlY19fIl0gPSBtb2Rfc3BlYwogICAgICAgICBleHBlY3RlZF9uc1siX19uYW1lX18iXSA9IHJ1bl9uYW1lCiAgICAgICAgIGV4cGVjdGVkX25zWyJfX3BhY2thZ2VfXyJdID0gcnVuX25hbWUucnBhcnRpdGlvbigiLiIpWzBdCiAgICAgICAgIHNlbGYuY2hlY2tfY29kZV9leGVjdXRpb24oY3JlYXRlX25zLCBleHBlY3RlZF9ucykKQEAgLTQ5Miw3ICs1OTQsMTUgQEAKICAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSwgIjxydW5fcGF0aD4iLCBzY3JpcHRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgZXhwZWN0X3NwZWM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHRfbm9fc3VmZml4KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0X3N1ZmZpeD1UcnVlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lLCAiPHJ1bl9wYXRoPiIsIHNjcmlwdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBleHBlY3Rfc3BlYz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01MDEsMTQgKzYxMSwxNCBAQAogICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGNvbXBpbGVkX25hbWUsICI8cnVuX3BhdGg+IiwgY29tcGlsZWRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUsIGV4cGVjdF9zcGVjPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJwogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsICI8cnVuX3BhdGg+Iiwgc2NyaXB0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfZGlyLCBtb2RfbmFtZT1tb2RfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01MTksNyArNjI5LDcgQEAKICAgICAgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKICAgICAgICAgICAgICAgICBsZWdhY3lfcHljID0gbWFrZV9sZWdhY3lfcHljKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCAiPHJ1bl9wYXRoPiIsIGxlZ2FjeV9weWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIsIG1vZF9uYW1lPW1vZF9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2Vycm9yKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKQEAgLTUzMyw3ICs2NDMsOCBAQAogICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCiAgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1tb2RfbmFtZSwgY2hlY2tfbG9hZGVyPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01NDIsNyArNjUzLDggQEAKICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKICAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1tb2RfbmFtZSwgY2hlY2tfbG9hZGVyPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9lcnJvcihzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01NzUsMTIgKzY4Nyw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsncyddLCAibm9uLUFTQ0lJOiBoXHhlOSIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgICAgICAgRXhlY3V0aW9uTGF5ZXJUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgUnVuTW9kdWxlVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgIFJ1blBhdGhUZXN0Q2FzZQotICAgICAgICAgICAgICAgICApCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkgYi9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CmluZGV4IDc5ZmE3ZDMuLmZlOGU3ODUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zY2hlZC5weQpAQCAtMTk1LDggKzE5NSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgW10pCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5IGIvTGliL3Rlc3QvdGVzdF9zY29wZS5weQppbmRleCAyNmNlMDQyLi5iMzI1NTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKQEAgLTcxNSw2ICs3MTUsMTkgQEAKICAgICAgICAgZGVmIGIoKToKICAgICAgICAgICAgIGdsb2JhbCBhCiAKKyAgICBkZWYgdGVzdENsYXNzTmFtZXNwYWNlT3ZlcnJpZGVzQ2xvc3VyZShzZWxmKToKKyAgICAgICAgIyBTZWUgIzE3ODUzLgorICAgICAgICB4ID0gNDIKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGxvY2FscygpWyJ4Il0gPSA0MworICAgICAgICAgICAgeSA9IHgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnksIDQzKQorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgbG9jYWxzKClbIngiXSA9IDQzCisgICAgICAgICAgICBkZWwgeAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoWCwgIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCA0MikKKwogICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdENlbGxMZWFrKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3OTI3LgpAQCAtNzQzLDEwICs3NTYsNiBAQAogICAgICAgICBkZWwgdGVzdGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZigpKQogCi0gICAgZGVmIHRlc3RfX0NsYXNzX19HbG9iYWwoc2VsZik6Ci0gICAgICAgIHMgPSAiY2xhc3MgWDpcbiAgICBnbG9iYWwgX19jbGFzc19fXG4gICAgZGVmIGYoc2VsZik6IHN1cGVyKCkiCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBleGVjLCBzKQotCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoU2NvcGVUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKaW5kZXggZGRiOWEwZi4uOGY5YTFjOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKQEAgLTUsNyArNSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJywgJ3Jpc2NvcycpLAorQHVuaXR0ZXN0LnNraXBJZigoc3lzLnBsYXRmb3JtWzozXT09J3dpbicpLAogICAgICAgICAgICAgICAgICAiY2FuJ3QgZWFzaWx5IHRlc3Qgb24gdGhpcyBzeXN0ZW0iKQogY2xhc3MgU2VsZWN0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbZmRdLCBbXSwgW10sIDApCi0gICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCByYWlzZWQiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkgYi9MaWIvdGVzdC90ZXN0X3NlbGVjdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjAyNmJlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKQEAgLTAsMCArMSw0NTMgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2VsZWN0b3JzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGltZSBpbXBvcnQgc2xlZXAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK3RyeToKKyAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyB0aW1lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIHRpbWUKK3RyeToKKyAgICBpbXBvcnQgcmVzb3VyY2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICByZXNvdXJjZSA9IE5vbmUKKworCitpZiBoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKToKKyAgICBzb2NrZXRwYWlyID0gc29ja2V0LnNvY2tldHBhaXIKK2Vsc2U6CisgICAgZGVmIHNvY2tldHBhaXIoZmFtaWx5PXNvY2tldC5BRl9JTkVULCB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89MCk6CisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKSBhcyBsOgorICAgICAgICAgICAgbC5iaW5kKChzdXBwb3J0LkhPU1QsIDApKQorICAgICAgICAgICAgbC5saXN0ZW4oMykKKyAgICAgICAgICAgIGMgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYy5jb25uZWN0KGwuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgICAgICAgICBjYWRkciA9IGMuZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGEsIGFkZHIgPSBsLmFjY2VwdCgpCisgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSd2ZSBnb3QgdGhlIGNvcnJlY3QgY2xpZW50CisgICAgICAgICAgICAgICAgICAgIGlmIGFkZHIgPT0gY2FkZHI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYywgYQorICAgICAgICAgICAgICAgICAgICBhLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGMuY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKworZGVmIGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIGZsYWcpOgorICAgIG1hdGNoID0gW10KKyAgICBmb3Iga2V5LCBldmVudHMgaW4gcmVhZHk6CisgICAgICAgIGlmIGV2ZW50cyAmIGZsYWc6CisgICAgICAgICAgICBtYXRjaC5hcHBlbmQoa2V5LmZpbGVvYmopCisgICAgcmV0dXJuIG1hdGNoCisKKworY2xhc3MgQmFzZVNlbGVjdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIG1ha2Vfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorICAgICAgICByZXR1cm4gcmQsIHdyCisKKyAgICBkZWYgdGVzdF9yZWdpc3RlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsICJkYXRhIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtleSwgc2VsZWN0b3JzLlNlbGVjdG9yS2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5maWxlb2JqLCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZmQsIHJkLmZpbGVubygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5ldmVudHMsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5kYXRhLCAiZGF0YSIpCisKKyAgICAgICAgIyByZWdpc3RlciBhbiB1bmtub3duIGV2ZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmVnaXN0ZXIsIDAsIDk5OTk5OSkKKworICAgICAgICAjIHJlZ2lzdGVyIGFuIGludmFsaWQgRkQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWdpc3RlciwgLTEwLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIHJlZ2lzdGVyIHR3aWNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnJlZ2lzdGVyLCByZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyByZWdpc3RlciB0aGUgc2FtZSBGRCwgYnV0IHdpdGggYSBkaWZmZXJlbnQgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnJlZ2lzdGVyLCByZC5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorCisgICAgICAgICMgdW5yZWdpc3RlciBhbiB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnVucmVnaXN0ZXIsIDk5OTk5OSkKKworICAgICAgICAjIHVucmVnaXN0ZXIgdHdpY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMudW5yZWdpc3RlciwgcmQpCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyX2FmdGVyX2ZkX2Nsb3NlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisgICAgICAgIHIsIHcgPSByZC5maWxlbm8oKSwgd3IuZmlsZW5vKCkKKyAgICAgICAgcy5yZWdpc3RlcihyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3LCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgIHJkLmNsb3NlKCkKKyAgICAgICAgd3IuY2xvc2UoKQorICAgICAgICBzLnVucmVnaXN0ZXIocikKKyAgICAgICAgcy51bnJlZ2lzdGVyKHcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICJyZXF1aXJlcyBwb3NpeCIpCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9hZnRlcl9mZF9jbG9zZV9hbmRfcmV1c2Uoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKyAgICAgICAgciwgdyA9IHJkLmZpbGVubygpLCB3ci5maWxlbm8oKQorICAgICAgICBzLnJlZ2lzdGVyKHIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzLnJlZ2lzdGVyKHcsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgcmQyLCB3cjIgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisgICAgICAgIHJkLmNsb3NlKCkKKyAgICAgICAgd3IuY2xvc2UoKQorICAgICAgICBvcy5kdXAyKHJkMi5maWxlbm8oKSwgcikKKyAgICAgICAgb3MuZHVwMih3cjIuZmlsZW5vKCksIHcpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBzLnVucmVnaXN0ZXIocikKKyAgICAgICAgcy51bnJlZ2lzdGVyKHcpCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyX2FmdGVyX3NvY2tldF9jbG9zZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICByZC5jbG9zZSgpCisgICAgICAgIHdyLmNsb3NlKCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorICAgICAgICBzLnVucmVnaXN0ZXIod3IpCisKKyAgICBkZWYgdGVzdF9tb2RpZnkoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgbW9kaWZ5IGV2ZW50cworICAgICAgICBrZXkyID0gcy5tb2RpZnkocmQsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuZXZlbnRzLCBrZXkyLmV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkyLCBzLmdldF9rZXkocmQpKQorCisgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKworICAgICAgICAjIG1vZGlmeSBkYXRhCisgICAgICAgIGQxID0gb2JqZWN0KCkKKyAgICAgICAgZDIgPSBvYmplY3QoKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMSkKKyAgICAgICAga2V5MiA9IHMubW9kaWZ5KHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmV2ZW50cywga2V5Mi5ldmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmRhdGEsIGtleTIuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkyLCBzLmdldF9rZXkocmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIuZGF0YSwgZDIpCisKKyAgICAgICAgIyBtb2RpZnkgdW5rbm93biBmaWxlIG9iagorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5tb2RpZnksIDk5OTk5OSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyBtb2RpZnkgdXNlIGEgc2hvcnRjdXQKKyAgICAgICAgZDMgPSBvYmplY3QoKQorICAgICAgICBzLnJlZ2lzdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcy51bnJlZ2lzdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzLm1vZGlmeShyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMudW5yZWdpc3Rlci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHdyKQorCisgICAgZGVmIHRlc3RfZ2V0X2tleShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsICJkYXRhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXksIHMuZ2V0X2tleShyZCkpCisKKyAgICAgICAgIyB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIDk5OTk5OSkKKworICAgIGRlZiB0ZXN0X2dldF9tYXAoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIGtleXMgPSBzLmdldF9tYXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoa2V5cyksIFtdKQorICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydEluKHJkLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwga2V5c1tyZF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoa2V5cyksIFtyZC5maWxlbm8oKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzLnZhbHVlcygpKSwgW2tleV0pCisKKyAgICAgICAgIyB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAga2V5c1s5OTk5OTldCisKKyAgICAgICAgIyBSZWFkLW9ubHkgbWFwcGluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkZWwga2V5c1tyZF0KKworICAgIGRlZiB0ZXN0X3NlbGVjdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHdyX2tleSA9IHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICByZXN1bHQgPSBzLnNlbGVjdCgpCisgICAgICAgIGZvciBrZXksIGV2ZW50cyBpbiByZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShrZXksIHNlbGVjdG9ycy5TZWxlY3RvcktleSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZlbnRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldmVudHMgJiB+KHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyh3cl9rZXksIHNlbGVjdG9ycy5FVkVOVF9XUklURSldLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIHdpdGggcyBhcyBzZWw6CisgICAgICAgICAgICBzZWwucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgc2VsLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHdyKQorCisgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIGlmIGhhc2F0dHIocywgJ2ZpbGVubycpOgorICAgICAgICAgICAgZmQgPSBzLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmZCwgaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGZkLCAwKQorCisgICAgZGVmIHRlc3Rfc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgTlVNX1NPQ0tFVFMgPSAxMgorICAgICAgICBNU0cgPSBiIiBUaGlzIGlzIGEgdGVzdC4iCisgICAgICAgIE1TR19MRU4gPSBsZW4oTVNHKQorICAgICAgICByZWFkZXJzID0gW10KKyAgICAgICAgd3JpdGVycyA9IFtdCisgICAgICAgIHIydyA9IHt9CisgICAgICAgIHcyciA9IHt9CisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX1NPQ0tFVFMpOgorICAgICAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICByZWFkZXJzLmFwcGVuZChyZCkKKyAgICAgICAgICAgIHdyaXRlcnMuYXBwZW5kKHdyKQorICAgICAgICAgICAgcjJ3W3JkXSA9IHdyCisgICAgICAgICAgICB3MnJbd3JdID0gcmQKKworICAgICAgICBidWZzID0gW10KKworICAgICAgICB3aGlsZSB3cml0ZXJzOgorICAgICAgICAgICAgcmVhZHkgPSBzLnNlbGVjdCgpCisgICAgICAgICAgICByZWFkeV93cml0ZXJzID0gZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgaWYgbm90IHJlYWR5X3dyaXRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBzb2NrZXRzIHJlYWR5IGZvciB3cml0aW5nIikKKyAgICAgICAgICAgIHdyID0gcmFuZG9tLmNob2ljZShyZWFkeV93cml0ZXJzKQorICAgICAgICAgICAgd3Iuc2VuZChNU0cpCisKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICByZWFkeSA9IHMuc2VsZWN0KCkKKyAgICAgICAgICAgICAgICByZWFkeV9yZWFkZXJzID0gZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgICAgICBpZiByZWFkeV9yZWFkZXJzOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICMgdGhlcmUgbWlnaHQgYmUgYSBkZWxheSBiZXR3ZWVuIHRoZSB3cml0ZSB0byB0aGUgd3JpdGUgZW5kIGFuZAorICAgICAgICAgICAgICAgICMgdGhlIHJlYWQgZW5kIGlzIHJlcG9ydGVkIHJlYWR5CisgICAgICAgICAgICAgICAgc2xlZXAoMC4xKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIHNvY2tldHMgcmVhZHkgZm9yIHJlYWRpbmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbdzJyW3dyXV0sIHJlYWR5X3JlYWRlcnMpCisgICAgICAgICAgICByZCA9IHJlYWR5X3JlYWRlcnNbMF0KKyAgICAgICAgICAgIGJ1ZiA9IHJkLnJlY3YoTVNHX0xFTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIE1TR19MRU4pCisgICAgICAgICAgICBidWZzLmFwcGVuZChidWYpCisgICAgICAgICAgICBzLnVucmVnaXN0ZXIocjJ3W3JkXSkKKyAgICAgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKyAgICAgICAgICAgIHdyaXRlcnMucmVtb3ZlKHIyd1tyZF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZzLCBbTVNHXSAqIE5VTV9TT0NLRVRTKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICB0ID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHMuc2VsZWN0KDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocy5zZWxlY3QoLTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRpbWUoKSAtIHQsIDAuNSkKKworICAgICAgICBzLnVucmVnaXN0ZXIod3IpCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICB0ID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoLTEpKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgMC41KQorCisgICAgICAgIHQwID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoMSkpCisgICAgICAgIHQxID0gdGltZSgpCisgICAgICAgIGR0ID0gdDEgLSB0MAorICAgICAgICBzZWxmLmFzc2VydFRydWUoMC44IDw9IGR0IDw9IDEuNiwgZHQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgImFsYXJtIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbC5hbGFybSgpIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQorICAgIGRlZiB0ZXN0X3NlbGVjdF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIG9yaWdfYWxybV9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgbGFtYmRhICphcmdzOiBOb25lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLnNpZ25hbCwgc2lnbmFsLlNJR0FMUk0sIG9yaWdfYWxybV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLmFsYXJtLCAwKQorCisgICAgICAgIHNpZ25hbC5hbGFybSgxKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICB0ID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAyLjUpCisKKworY2xhc3MgU2NhbGFibGVTZWxlY3Rvck1peEluOgorCisgICAgIyBzZWUgaXNzdWUgIzE4OTYzIGZvciB3aHkgaXQncyBza2lwcGVkIG9uIG9sZGVyIE9TIFggdmVyc2lvbnMKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA1KQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHJlc291cmNlLCAiVGVzdCBuZWVkcyByZXNvdXJjZSBtb2R1bGUiKQorICAgIGRlZiB0ZXN0X2Fib3ZlX2ZkX3NldHNpemUoc2VsZik6CisgICAgICAgICMgQSBzY2FsYWJsZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIHdpdGggbW9yZSB0aGFuCisgICAgICAgICMgRkRfU0VUU0laRSBmaWxlIGRlc2NyaXB0b3JzLiBTaW5jZSB3ZSBkb24ndCBrbm93IHRoZSB2YWx1ZSwgd2UganVzdAorICAgICAgICAjIHRyeSB0byBzZXQgdGhlIHNvZnQgUkxJTUlUX05PRklMRSB0byB0aGUgaGFyZCBSTElNSVRfTk9GSUxFIGNlaWxpbmcuCisgICAgICAgIHNvZnQsIGhhcmQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUsIChoYXJkLCBoYXJkKSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXNvdXJjZS5zZXRybGltaXQsIHJlc291cmNlLlJMSU1JVF9OT0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvZnQsIGhhcmQpKQorICAgICAgICAgICAgTlVNX0ZEUyA9IG1pbihoYXJkLCAyKioxNikKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIE5VTV9GRFMgPSBzb2Z0CisKKyAgICAgICAgIyBndWFyZCBmb3IgYWxyZWFkeSBhbGxvY2F0ZWQgRkRzIChzdGRpbiwgc3Rkb3V0Li4uKQorICAgICAgICBOVU1fRkRTIC09IDMyCisKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fRkRTIC8vIDIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgRkRzLCBza2lwIC0gbm90ZSB0aGF0IHdlIHNob3VsZCBvbmx5IGNhdGNoIEVNRklMRQorICAgICAgICAgICAgICAgICMgaGVyZSwgYnV0IGFwcGFyZW50bHkgKkJTRCBhbmQgU29sYXJpcyBjYW4gZmFpbCB1cG9uIGNvbm5lY3QoKQorICAgICAgICAgICAgICAgICMgb3IgYmluZCgpIHdpdGggRUFERFJOT1RBVkFJTCwgc28gbGV0J3MgYmUgc2FmZQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkZEIGxpbWl0IHJlYWNoZWQiKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NQQzoKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGNhbiBiZSByYWlzZWQgYnkgZXBvbGwgaWYgd2UgZ28gb3ZlcgorICAgICAgICAgICAgICAgICAgICAjIGZzLmVwb2xsLm1heF91c2VyX3dhdGNoZXMgc3lzY3RsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkZEIGxpbWl0IHJlYWNoZWQiKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOVU1fRkRTIC8vIDIsIGxlbihzLnNlbGVjdCgpKSkKKworCitjbGFzcyBEZWZhdWx0U2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSk6CisKKyAgICBTRUxFQ1RPUiA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IKKworCitjbGFzcyBTZWxlY3RTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlKToKKworICAgIFNFTEVDVE9SID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IiKQorY2xhc3MgUG9sbFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UsIFNjYWxhYmxlU2VsZWN0b3JNaXhJbik6CisKKyAgICBTRUxFQ1RPUiA9IGdldGF0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJywgTm9uZSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ0Vwb2xsU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5FcG9sbFNlbGVjdG9yIikKK2NsYXNzIEVwb2xsU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJywgTm9uZSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ0txdWV1ZVNlbGVjdG9yJyksCisgICAgICAgICAgICAgICAgICAgICAiVGVzdCBuZWVkcyBzZWxlY3RvcnMuS3F1ZXVlU2VsZWN0b3IpIikKK2NsYXNzIEtxdWV1ZVNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UsIFNjYWxhYmxlU2VsZWN0b3JNaXhJbik6CisKKyAgICBTRUxFQ1RPUiA9IGdldGF0dHIoc2VsZWN0b3JzLCAnS3F1ZXVlU2VsZWN0b3InLCBOb25lKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IFtEZWZhdWx0U2VsZWN0b3JUZXN0Q2FzZSwgU2VsZWN0U2VsZWN0b3JUZXN0Q2FzZSwKKyAgICAgICAgICAgICBQb2xsU2VsZWN0b3JUZXN0Q2FzZSwgRXBvbGxTZWxlY3RvclRlc3RDYXNlLAorICAgICAgICAgICAgIEtxdWV1ZVNlbGVjdG9yVGVzdENhc2VdCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorICAgIHN1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NldC5weQppbmRleCBjMGJjYTJmLi5iZmVmNjIxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NldC5weQpAQCAtODQ4LDggKzg0OCw2IEBACiAgICAgICAgIGZvciB2IGluIHNlbGYuc2V0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBzZWxmLnZhbHVlcykKICAgICAgICAgc2V0aXRlciA9IGl0ZXIoc2VsZi5zZXQpCi0gICAgICAgICMgbm90ZTogX19sZW5ndGhfaGludF9fIGlzIGFuIGludGVybmFsIHVuZG9jdW1lbnRlZCBBUEksCi0gICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldGl0ZXIuX19sZW5ndGhfaGludF9fKCksIGxlbihzZWxmLnNldCkpCiAKICAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5IGIvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKaW5kZXggMTNjMTI2NS4uYmQ1MWQ4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKQEAgLTE0OCw2ICsxNDgsMTkgQEAKICAgICAgICAgcDIgPSBkW2VuY29kZWRrZXldCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocDEsIHAyKSAgIyBXcml0ZSBjcmVhdGVzIG5ldyBvYmplY3QgaW4gc3RvcmUKIAorICAgIGRlZiB0ZXN0X3dpdGgoc2VsZik6CisgICAgICAgIGQxID0ge30KKyAgICAgICAgd2l0aCBzaGVsdmUuU2hlbGYoZDEsIHByb3RvY29sPTIsIHdyaXRlYmFjaz1GYWxzZSkgYXMgczoKKyAgICAgICAgICAgIHNbJ2tleTEnXSA9IFsxLDIsMyw0XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sIFsxLDIsMyw0XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsZW4sIHMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNbJ2tleTEnXQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnQ2xvc2VkIHNoZWxmIHNob3VsZCBub3QgZmluZCBhIGtleScpCiAKIGZyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CmluZGV4IGMzZmI4YTcuLjY2YjNmYjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CkBAIC0xMCw2ICsxMCw3IEBACiBpbXBvcnQgZXJybm8KIGltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBzdWJwcm9jZXNzCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IEV4aXRTdGFjawogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOCiBmcm9tIG9zLnBhdGggaW1wb3J0IHNwbGl0ZHJpdmUKQEAgLTE4LDcgKzE5LDggQEAKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIGdldF9hcmNoaXZlX2Zvcm1hdHMsIEVycm9yLCB1bnBhY2tfYXJjaGl2ZSwKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgUmVnaXN0cnlFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBnZXRfdW5wYWNrX2Zvcm1hdHMpCisgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgZ2V0X3VucGFja19mb3JtYXRzLAorICAgICAgICAgICAgICAgICAgICBTYW1lRmlsZUVycm9yKQogaW1wb3J0IHRhcmZpbGUKIGltcG9ydCB3YXJuaW5ncwogCkBAIC0xMTUsNyArMTE3LDkgQEAKICAgICAgICAgd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4odmljdGltLCAnc29tZWZpbGUnKSwgJ2ZvbycpCiAgICAgICAgIHZpY3RpbSA9IG9zLmZzZW5jb2RlKHZpY3RpbSkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpY3RpbSwgYnl0ZXMpCi0gICAgICAgIHNodXRpbC5ybXRyZWUodmljdGltKQorICAgICAgICB3aW4gPSAob3MubmFtZSA9PSAnbnQnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKSBpZiB3aW4gZWxzZSBFeGl0U3RhY2soKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodmljdGltKQogCiAgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluawogICAgIGRlZiB0ZXN0X3JtdHJlZV9mYWlsc19vbl9zeW1saW5rKHNlbGYpOgpAQCAtNzQ2LDEzICs3NTAsMTMgQEAKICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzcmNfZGlyKS5zdF9tb2RlLCBvcy5zdGF0KGRzdF9kaXIpLnN0X21vZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdwZXJtaXNzaXZlLnR4dCcpKS5zdF9tb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQob3MucGF0aC5qb2luKHNyY19kaXIsICdyZXN0cmljdGl2ZS50eHQnKSkuc3RfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KG9zLnBhdGguam9pbihkc3RfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdyZXN0cmljdGl2ZS50eHQnKSkuc3RfbW9kZSkKICAgICAgICAgcmVzdHJpY3RpdmVfc3ViZGlyX2RzdCA9IG9zLnBhdGguam9pbihkc3RfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguc3BsaXQocmVzdHJpY3RpdmVfc3ViZGlyKVsxXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHJlc3RyaWN0aXZlX3N1YmRpcikuc3RfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QpLnN0X21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyX2RzdCkuc3RfbW9kZSkKIAogICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAndGVtcG9yYXJpbHkgZGlzYWJsZWQgb24gV2luZG93cycpCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2xpbmsnKSwgJ3JlcXVpcmVzIG9zLmxpbmsnKQpAQCAtNzY1LDcgKzc2OSw3IEBACiAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAndycpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgnY2hlZGRhcicpCiAgICAgICAgICAgICBvcy5saW5rKHNyYywgZHN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2NoZWRkYXInKQogICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKQEAgLTc4NSw3ICs3ODksNyBAQAogICAgICAgICAgICAgIyB0byBURVNURk4vVEVTVEZOL2NoZWVzZSwgd2hpbGUgaXQgc2hvdWxkIHBvaW50IGF0CiAgICAgICAgICAgICAjIFRFU1RGTi9jaGVlc2UuCiAgICAgICAgICAgICBvcy5zeW1saW5rKCdjaGVlc2UnLCBkc3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuU2FtZUZpbGVFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCiAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQpAQCAtMTI5Myw2ICsxMjk3LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhydikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF9maWxlKHNyY19maWxlKSwgcmVhZF9maWxlKGRzdF9maWxlKSkKIAorICAgIGRlZiB0ZXN0X2NvcHlmaWxlX3NhbWVfZmlsZShzZWxmKToKKyAgICAgICAgIyBjb3B5ZmlsZSgpIHNob3VsZCByYWlzZSBTYW1lRmlsZUVycm9yIGlmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisgICAgICAgICMgYXJlIHRoZSBzYW1lLgorICAgICAgICBzcmNfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc3JjX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ2ZvbycpCisgICAgICAgIHdyaXRlX2ZpbGUoc3JjX2ZpbGUsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTYW1lRmlsZUVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyY19maWxlLCBzcmNfZmlsZSkKKyAgICAgICAgIyBCdXQgRXJyb3Igc2hvdWxkIHdvcmsgdG9vLCB0byBzdGF5IGJhY2t3YXJkIGNvbXBhdGlibGUuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyY19maWxlLCBzcmNfZmlsZSkKKwogICAgIGRlZiB0ZXN0X2NvcHl0cmVlX3JldHVybl92YWx1ZShzZWxmKToKICAgICAgICAgIyBjb3B5dHJlZSByZXR1cm5zIGl0cyBkZXN0aW5hdGlvbiBwYXRoLgogICAgICAgICBzcmNfZGlyID0gc2VsZi5ta2R0ZW1wKCkKQEAgLTE2MDEsNyArMTYxNSw3IEBACiAgICAgICAgICAgICBzZWxmLl9leGl0ZWRfd2l0aCA9IGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIKICAgICAgICAgICAgIGlmIHNlbGYuX3JhaXNlX2luX2V4aXQ6CiAgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VkID0gVHJ1ZQotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkNhbm5vdCBjbG9zZSIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ2Fubm90IGNsb3NlIikKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdXBwcmVzc19hdF9leGl0CiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC0xNjE1LDEyICsxNjI5LDEyIEBACiAgICAgZGVmIHRlc3Rfd19zb3VyY2Vfb3Blbl9mYWlscyhzZWxmKToKICAgICAgICAgZGVmIF9vcGVuKGZpbGVuYW1lLCBtb2RlPSdyJyk6CiAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnc3JjZmlsZSc6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignQ2Fubm90IG9wZW4gInNyY2ZpbGUiJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdDYW5ub3Qgb3BlbiAic3JjZmlsZSInKQogICAgICAgICAgICAgYXNzZXJ0IDAgICMgc2hvdWxkbid0IHJlYWNoIGhlcmUuCiAKICAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzaHV0aWwuY29weWZpbGUsICdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKIAogICAgIGRlZiB0ZXN0X3dfZGVzdF9vcGVuX2ZhaWxzKHNlbGYpOgogCkBAIC0xNjMwLDE0ICsxNjQ0LDE0IEBACiAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnc3JjZmlsZSc6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNyY2ZpbGUKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdkZXN0ZmlsZSc6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignQ2Fubm90IG9wZW4gImRlc3RmaWxlIicpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignQ2Fubm90IG9wZW4gImRlc3RmaWxlIicpCiAgICAgICAgICAgICBhc3NlcnQgMCAgIyBzaG91bGRuJ3QgcmVhY2ggaGVyZS4KIAogICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCiAKICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2VudGVyZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBJT0Vycm9yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgT1NFcnJvcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNmaWxlLl9leGl0ZWRfd2l0aFsxXS5hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnQ2Fubm90IG9wZW4gImRlc3RmaWxlIicsKSkKIApAQCAtMTY1OSw3ICsxNjczLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2VudGVyZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXN0ZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9yYWlzZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBJT0Vycm9yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgT1NFcnJvcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNmaWxlLl9leGl0ZWRfd2l0aFsxXS5hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnQ2Fubm90IGNsb3NlJywpKQogCkBAIC0xNjc3LDcgKzE2OTEsNyBAQAogCiAgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUsICdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2VudGVyZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXN0ZmlsZS5fZW50ZXJlZCkKQEAgLTE3NDgsOSArMTc2Miw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFNodXRpbCwgVGVzdE1vdmUsIFRlc3RDb3B5RmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtc2l6ZVRlc3RzLCBUZXN0V2hpY2gpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5IGIvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkKaW5kZXggMTkxZDRjZi4uNzRmNzRhZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkKQEAgLTE1LDkgKzE1LDYgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKLWlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMicsICdyaXNjb3MnKToKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgc3lzLnBsYXRmb3JtKQotCiAKIGNsYXNzIEhhbmRsZXJCQ2FsbGVkKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpAQCAtMzYsNyArMzMsNyBAQAogZGVmIGlnbm9yaW5nX2VpbnRyKF9fZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBfX2Z1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIHJldHVybiBOb25lCkBAIC0yNzgsNiArMjc1LDU3IEBACiAKICAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQogCisgICAgZGVmIHRlc3Rfd2FrZXVwX3dyaXRlX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjEwNTogd3JpdGUoKSBlcnJvcnMgaW4gdGhlIEMgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIG5vdAorICAgICAgICAjIHBhc3Mgc2lsZW50bHkuCisgICAgICAgICMgVXNlIGEgc3VicHJvY2VzcyB0byBoYXZlIG9ubHkgb25lIHRocmVhZC4KKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpbXBvcnQgZmNudGwKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3RkZXJyCisKKyAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICAxLzAKKworICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGTCwgMCkKKyAgICAgICAgZmNudGwuZmNudGwociwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCisgICAgICAgICMgU2V0IHdha2V1cF9mZCBhIHJlYWQtb25seSBmaWxlIGRlc2NyaXB0b3IgdG8gdHJpZ2dlciB0aGUgZXJyb3IKKyAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQocikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnI6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1LjApCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICMgQW4gaWdub3JlZCBleGNlcHRpb24gc2hvdWxkIGhhdmUgYmVlbiBwcmludGVkIG91dCBvbiBzdGRlcnIKKyAgICAgICAgICAgIGVyciA9IGVyci5nZXR2YWx1ZSgpCisgICAgICAgICAgICBpZiAoJ0V4Y2VwdGlvbiBpZ25vcmVkIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIHRoZSBzaWduYWwgd2FrZXVwIGZkJworICAgICAgICAgICAgICAgIG5vdCBpbiBlcnIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKGVycikKKyAgICAgICAgICAgIGlmICgnT1NFcnJvcjogW0Vycm5vICVkXScgJSBlcnJuby5FQkFERikgbm90IGluIGVycjoKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiWmVyb0RpdmlzaW9uRXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgICIiIgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLndyaXRlKHIsIGIneCcpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiT1MgZG9lc24ndCByZXBvcnQgd3JpdGUoKSBlcnJvciBvbiB0aGUgcmVhZCBlbmQgb2YgYSBwaXBlIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorCisgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKwogICAgIGRlZiB0ZXN0X3dha2V1cF9mZF9lYXJseShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja193YWtldXAoIiIiZGVmIHRlc3QoKToKICAgICAgICAgICAgIGltcG9ydCBzZWxlY3QKQEAgLTMxNSwxMCArMzYzLDEwIEBACiAgICAgICAgICAgICAjIFdlIGF0dGVtcHQgdG8gZ2V0IGEgc2lnbmFsIGR1cmluZyB0aGUgc2VsZWN0IGNhbGwKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtyZWFkXSwgW10sIFtdLCBUSU1FT1VUX0ZVTEwpCi0gICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInNlbGVjdC5lcnJvciBub3QgcmFpc2VkIikKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk9TRXJyb3Igbm90IHJhaXNlZCIpCiAgICAgICAgICAgICBhZnRlcl90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgICAgIGR0ID0gYWZ0ZXJfdGltZSAtIGJlZm9yZV90aW1lCiAgICAgICAgICAgICBpZiBkdCA+PSBUSU1FT1VUX0hBTEY6CkBAIC00MDYsNyArNDU0LDcgQEAKICAgICAgICAgICAgICAgICBzdGRvdXQgPSBmaXJzdF9saW5lICsgc3Rkb3V0CiAgICAgICAgICAgICAgICAgZXhpdGNvZGUgPSBwcm9jZXNzLndhaXQoKQogICAgICAgICAgICAgICAgIGlmIGV4aXRjb2RlIG5vdCBpbiAoMiwgMyk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2hpbGQgZXJyb3IgKGV4aXQgY29kZSAlcyk6ICVzIgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNoaWxkIGVycm9yIChleGl0IGNvZGUgJXMpOiAlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV4aXRjb2RlLCBzdGRvdXQpKQogICAgICAgICAgICAgICAgIHJldHVybiAoZXhpdGNvZGUgPT0gMykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaXRlLnB5IGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CmluZGV4IGYzYmQxNjguLjgzMjUyMjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpdGUucHkKQEAgLTIzMCwxMSArMjMwLDcgQEAKICAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsneG94byddCiAgICAgICAgIGRpcnMgPSBzaXRlLmdldHNpdGVwYWNrYWdlcygpCiAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDEpCi0gICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnTGliJywgJ3NpdGUtcGFja2FnZXMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCi0gICAgICAgIGVsaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIikpOgogICAgICAgICAgICAgIyBPUyBYIGZyYW1ld29yayBidWlsZHMKICAgICAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ1B5dGhvbi5mcmFtZXdvcmsnXQpAQCAtNDE4LDYgKzQxNCw4IEBACiAgICAgQHRlc3Quc3VwcG9ydC5yZXF1aXJlc19yZXNvdXJjZSgnbmV0d29yaycpCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnZlcnNpb25faW5mb1szXSA9PSAnZmluYWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IGZvciByZWxlYXNlZCB2ZXJzaW9ucycpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cih1cmxsaWIucmVxdWVzdCwgIkhUVFBTSGFuZGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkIFNTTCBzdXBwb3J0IHRvIGRvd25sb2FkIGxpY2Vuc2UnKQogICAgIGRlZiB0ZXN0X2xpY2Vuc2VfZXhpc3RzX2F0X3VybChzZWxmKToKICAgICAgICAgIyBUaGlzIHRlc3QgaXMgYSBiaXQgZnJhZ2lsZSBzaW5jZSBpdCBkZXBlbmRzIG9uIHRoZSBmb3JtYXQgb2YgdGhlCiAgICAgICAgICMgc3RyaW5nIGRpc3BsYXllZCBieSBsaWNlbnNlIGluIHRoZSBhYnNlbmNlIG9mIGEgTElDRU5TRSBmaWxlLgpAQCAtNDMyLDUgKzQzMCwzOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIDIwMCwgbXNnPSJDYW4ndCBmaW5kICIgKyB1cmwpCiAKIAorY2xhc3MgU3RhcnR1cEltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YXJ0dXBfaW1wb3J0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3RzIGNoZWNrcyB3aGljaCBtb2R1bGVzIGFyZSBsb2FkZWQgYnkgUHl0aG9uIHdoZW4gaXQKKyAgICAgICAgIyBpbml0aWFsbHkgc3RhcnRzIHVwb24gc3RhcnR1cC4KKyAgICAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1JJywgJy12JywgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoc2V0KHN5cy5tb2R1bGVzKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZSgndXRmLTgnKQorICAgICAgICBzdGRlcnIgPSBzdGRlcnIuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIG1vZHVsZXMgPSBldmFsKHN0ZG91dCkKKworICAgICAgICBzZWxmLmFzc2VydEluKCdzaXRlJywgbW9kdWxlcykKKworICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTIwNQorICAgICAgICByZV9tb2RzID0geydyZScsICdfc3JlJywgJ3NyZV9jb21waWxlJywgJ3NyZV9jb25zdGFudHMnLCAnc3JlX3BhcnNlJ30KKyAgICAgICAgIyBfb3N4X3N1cHBvcnQgdXNlcyB0aGUgcmUgbW9kdWxlIGluIG1hbnkgcGxhY3MKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2R1bGVzLmludGVyc2VjdGlvbihyZV9tb2RzKSwgc3RkZXJyKQorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU5NTQ4CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xvY2FsZScsIG1vZHVsZXMsIHN0ZGVycikKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkyMDkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2NvcHlyZWcnLCBtb2R1bGVzLCBzdGRlcnIpCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5MjE4PgorICAgICAgICBjb2xsZWN0aW9uX21vZHMgPSB7J19jb2xsZWN0aW9ucycsICdjb2xsZWN0aW9ucycsICdmdW5jdG9vbHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYXBxJywgJ2l0ZXJ0b29scycsICdrZXl3b3JkJywgJ29wZXJhdG9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBybGliJywgJ3R5cGVzJywgJ3dlYWtyZWYnCisgICAgICAgICAgICAgICAgICAgICAgICAgIH0uZGlmZmVyZW5jZShzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9kdWxlcy5pbnRlcnNlY3Rpb24oY29sbGVjdGlvbl9tb2RzKSwgc3RkZXJyKQorCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5IGIvTGliL3Rlc3QvdGVzdF9zbGljZS5weQppbmRleCAyZGY5MjcxLi45MjAzZDVlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKQEAgLTQsOCArNCw3MCBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHBpY2tsZSBpbXBvcnQgbG9hZHMsIGR1bXBzCiAKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHN5cwogCisKK2RlZiBldmFsdWF0ZV9zbGljZV9pbmRleChhcmcpOgorICAgICIiIgorICAgIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgc2xpY2UgYXJndW1lbnQgdG8gYW4gaW50ZWdlciwgYW5kIHJhaXNlCisgICAgVHlwZUVycm9yIHdpdGggYSBzdWl0YWJsZSBtZXNzYWdlIG9uIGZhaWx1cmUuCisKKyAgICAiIiIKKyAgICBpZiBoYXNhdHRyKGFyZywgJ19faW5kZXhfXycpOgorICAgICAgICByZXR1cm4gb3BlcmF0b3IuaW5kZXgoYXJnKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgorICAgICAgICAgICAgIk5vbmUgb3IgaGF2ZSBhbiBfX2luZGV4X18gbWV0aG9kIikKKworZGVmIHNsaWNlX2luZGljZXMoc2xpY2UsIGxlbmd0aCk6CisgICAgIiIiCisgICAgUmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgc2xpY2UuaW5kaWNlcyBtZXRob2QuCisKKyAgICAiIiIKKyAgICAjIENvbXB1dGUgc3RlcCBhbmQgbGVuZ3RoIGFzIGludGVnZXJzLgorICAgIGxlbmd0aCA9IG9wZXJhdG9yLmluZGV4KGxlbmd0aCkKKyAgICBzdGVwID0gMSBpZiBzbGljZS5zdGVwIGlzIE5vbmUgZWxzZSBldmFsdWF0ZV9zbGljZV9pbmRleChzbGljZS5zdGVwKQorCisgICAgIyBSYWlzZSBWYWx1ZUVycm9yIGZvciBuZWdhdGl2ZSBsZW5ndGggb3IgemVybyBzdGVwLgorICAgIGlmIGxlbmd0aCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxlbmd0aCBzaG91bGQgbm90IGJlIG5lZ2F0aXZlIikKKyAgICBpZiBzdGVwID09IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNsaWNlIHN0ZXAgY2Fubm90IGJlIHplcm8iKQorCisgICAgIyBGaW5kIGxvd2VyIGFuZCB1cHBlciBib3VuZHMgZm9yIHN0YXJ0IGFuZCBzdG9wLgorICAgIGxvd2VyID0gLTEgaWYgc3RlcCA8IDAgZWxzZSAwCisgICAgdXBwZXIgPSBsZW5ndGggLSAxIGlmIHN0ZXAgPCAwIGVsc2UgbGVuZ3RoCisKKyAgICAjIENvbXB1dGUgc3RhcnQuCisgICAgaWYgc2xpY2Uuc3RhcnQgaXMgTm9uZToKKyAgICAgICAgc3RhcnQgPSB1cHBlciBpZiBzdGVwIDwgMCBlbHNlIGxvd2VyCisgICAgZWxzZToKKyAgICAgICAgc3RhcnQgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzbGljZS5zdGFydCkKKyAgICAgICAgc3RhcnQgPSBtYXgoc3RhcnQgKyBsZW5ndGgsIGxvd2VyKSBpZiBzdGFydCA8IDAgZWxzZSBtaW4oc3RhcnQsIHVwcGVyKQorCisgICAgIyBDb21wdXRlIHN0b3AuCisgICAgaWYgc2xpY2Uuc3RvcCBpcyBOb25lOgorICAgICAgICBzdG9wID0gbG93ZXIgaWYgc3RlcCA8IDAgZWxzZSB1cHBlcgorICAgIGVsc2U6CisgICAgICAgIHN0b3AgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzbGljZS5zdG9wKQorICAgICAgICBzdG9wID0gbWF4KHN0b3AgKyBsZW5ndGgsIGxvd2VyKSBpZiBzdG9wIDwgMCBlbHNlIG1pbihzdG9wLCB1cHBlcikKKworICAgIHJldHVybiBzdGFydCwgc3RvcCwgc3RlcAorCisKKyMgQ2xhc3MgcHJvdmlkaW5nIGFuIF9faW5kZXhfXyBtZXRob2QuICBVc2VkIGZvciB0ZXN0aW5nIHNsaWNlLmluZGljZXMuCisKK2NsYXNzIE15SW5kZXhhYmxlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisKIGNsYXNzIFNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKQEAgLTc1LDYgKzEzNywyMiBAQAogICAgICAgICBzID0gc2xpY2Uob2JqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdG9wIGlzIG9iaikKIAorICAgIGRlZiBjaGVja19pbmRpY2VzKHNlbGYsIHNsaWNlLCBsZW5ndGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhY3R1YWwgPSBzbGljZS5pbmRpY2VzKGxlbmd0aCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBhY3R1YWwgPSAidmFsdWVlcnJvciIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzbGljZV9pbmRpY2VzKHNsaWNlLCBsZW5ndGgpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAidmFsdWVlcnJvciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgICAgIGlmIGxlbmd0aCA+PSAwIGFuZCBzbGljZS5zdGVwICE9IDA6CisgICAgICAgICAgICBhY3R1YWwgPSByYW5nZSgqc2xpY2UuaW5kaWNlcyhsZW5ndGgpKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByYW5nZShsZW5ndGgpW3NsaWNlXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCiAgICAgZGVmIHRlc3RfaW5kaWNlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lICAgICAgICAgICApLmluZGljZXMoMTApLCAoMCwgMTAsICAxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAgTm9uZSwgIDIpLmluZGljZXMoMTApLCAoMCwgMTAsICAyKSkKQEAgLTEwOCw3ICsxODYsNDEgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMTApKVs6OnN5cy5tYXhzaXplIC0gMV0sIFswXSkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzbGljZShOb25lKS5pbmRpY2VzLCAxPDwxMDApCisgICAgICAgICMgQ2hlY2sgYSB2YXJpZXR5IG9mIHN0YXJ0LCBzdG9wLCBzdGVwIGFuZCBsZW5ndGggdmFsdWVzLCBpbmNsdWRpbmcKKyAgICAgICAgIyB2YWx1ZXMgZXhjZWVkaW5nIHN5cy5tYXhzaXplIChzZWUgaXNzdWUgIzE0Nzk0KS4KKyAgICAgICAgdmFscyA9IFtOb25lLCAtMioqMTAwLCAtMioqMzAsIC01MywgLTcsIC0xLCAwLCAxLCA3LCA1MywgMioqMzAsIDIqKjEwMF0KKyAgICAgICAgbGVuZ3RocyA9IFswLCAxLCA3LCA1MywgMioqMzAsIDIqKjEwMF0KKyAgICAgICAgZm9yIHNsaWNlX2FyZ3MgaW4gaXRlcnRvb2xzLnByb2R1Y3QodmFscywgcmVwZWF0PTMpOgorICAgICAgICAgICAgcyA9IHNsaWNlKCpzbGljZV9hcmdzKQorICAgICAgICAgICAgZm9yIGxlbmd0aCBpbiBsZW5ndGhzOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfaW5kaWNlcyhzLCBsZW5ndGgpCisgICAgICAgIHNlbGYuY2hlY2tfaW5kaWNlcyhzbGljZSgwLCAxMCwgMSksIC0zKQorCisgICAgICAgICMgTmVnYXRpdmUgbGVuZ3RoIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzbGljZShOb25lKS5pbmRpY2VzKC0xKQorCisgICAgICAgICMgWmVybyBzdGVwIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMCwgMCkuaW5kaWNlcyg1KQorCisgICAgICAgICMgVXNpbmcgYSBzdGFydCwgc3RvcCBvciBzdGVwIG9yIGxlbmd0aCB0aGF0IGNhbid0IGJlIGludGVycHJldGVkIGFzIGFuCisgICAgICAgICMgaW50ZWdlciBzaG91bGQgZ2l2ZSBhIFR5cGVFcnJvciAuLi4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMC4wLCAxMCwgMSkuaW5kaWNlcyg1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMC4wLCAxKS5pbmRpY2VzKDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLCAxLjApLmluZGljZXMoNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAsIDEpLmluZGljZXMoNS4wKQorCisgICAgICAgICMgLi4uIGJ1dCBpdCBzaG91bGQgYmUgZmluZSB0byB1c2UgYSBjdXN0b20gY2xhc3MgdGhhdCBwcm92aWRlcyBpbmRleC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgwLCAxMCwgMSkuaW5kaWNlcyg1KSwgKDAsIDUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE15SW5kZXhhYmxlKDApLCAxMCwgMSkuaW5kaWNlcyg1KSwgKDAsIDUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIE15SW5kZXhhYmxlKDEwKSwgMSkuaW5kaWNlcyg1KSwgKDAsIDUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIDEwLCBNeUluZGV4YWJsZSgxKSkuaW5kaWNlcyg1KSwgKDAsIDUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIDEwLCAxKS5pbmRpY2VzKE15SW5kZXhhYmxlKDUpKSwgKDAsIDUsIDEpKQogCiAgICAgZGVmIHRlc3Rfc2V0c2xpY2Vfd2l0aG91dF9nZXRzbGljZShzZWxmKToKICAgICAgICAgdG1wID0gW10KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQppbmRleCAzYmJjNmI3Li45NWE5ZGJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5zb3VyY2VfYWRkcmVzcywgKCcxMjcuMC4wLjEnLCBwb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5sb2NhbF9ob3N0bmFtZSwgJ2xvY2FsaG9zdCcpCiAgICAgICAgICAgICBzbXRwLnF1aXQoKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNvdWxkbid0IGJpbmQgdG8gcG9ydCAlZCIgJSBwb3J0KQogICAgICAgICAgICAgcmFpc2UKQEAgLTUyNCwxMiArNTI0LDYgQEAKIAogY2xhc3MgTm9uQ29ubmVjdGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc210cGxpYi5zb2NrZXQgPSBtb2NrX3NvY2tldAotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzbXRwbGliLnNvY2tldCA9IHNvY2tldAotCiAgICAgZGVmIHRlc3ROb3RDb25uZWN0ZWQoc2VsZik6CiAgICAgICAgICMgVGVzdCB2YXJpb3VzIG9wZXJhdGlvbnMgb24gYW4gdW5jb25uZWN0ZWQgU01UUCBvYmplY3QgdGhhdAogICAgICAgICAjIHNob3VsZCByYWlzZSBleGNlcHRpb25zIChhdCBwcmVzZW50IHRoZSBhdHRlbXB0IGluIFNNVFAuc2VuZApAQCAtNTQxLDEwICs1MzUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC5zZW5kLCAndGVzdCBtc2cnKQogCiAgICAgZGVmIHRlc3ROb25udW1lcmljUG9ydChzZWxmKToKLSAgICAgICAgIyBjaGVjayB0aGF0IG5vbi1udW1lcmljIHBvcnQgcmFpc2VzIHNvY2tldC5lcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtb2NrX3NvY2tldC5lcnJvciwgc210cGxpYi5TTVRQLAorICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLW51bWVyaWMgcG9ydCByYWlzZXMgT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzbXRwbGliLlNNVFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbGhvc3QiLCAiYm9ndXMiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtb2NrX3NvY2tldC5lcnJvciwgc210cGxpYi5TTVRQLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzbXRwbGliLlNNVFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbGhvc3Q6Ym9ndXMiKQogCiAKQEAgLTYyNSw2ICs2MTksNyBAQAogICAgIGRhdGFfcmVzcG9uc2UgPSBOb25lCiAgICAgcmNwdF9jb3VudCA9IDAKICAgICByc2V0X2NvdW50ID0gMAorICAgIGRpc2Nvbm5lY3QgPSAwCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0cmFfZmVhdHVyZXMsICphcmdzLCAqKmt3KToKICAgICAgICAgc2VsZi5fZXh0cmFmZWF0dXJlcyA9ICcnLmpvaW4oCkBAIC02OTAsNiArNjg1LDggQEAKICAgICAgICAgICAgIHN1cGVyKCkuc210cF9NQUlMKGFyZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucHVzaChzZWxmLm1haWxfcmVzcG9uc2UpCisgICAgICAgICAgICBpZiBzZWxmLmRpc2Nvbm5lY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV93aGVuX2RvbmUoKQogCiAgICAgZGVmIHNtdHBfUkNQVChzZWxmLCBhcmcpOgogICAgICAgICBpZiBzZWxmLnJjcHRfcmVzcG9uc2UgaXMgTm9uZToKQEAgLTg1Miw2ICs4NDksMzAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2ltX2F1dGhfY3JlZGVudGlhbHNbJ2NyYW0tbWQ1J10sIHN0cihlcnIpKQogICAgICAgICBzbXRwLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0QVVUSF9tdWx0aXBsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgbXVsdGlwbGUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBhcmUgdHJpZWQuCisgICAgICAgIHNlbGYuc2Vydi5hZGRfZmVhdHVyZSgiQVVUSCBCT0dVUyBQTEFJTiBMT0dJTiBDUkFNLU1ENSIpCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKyAgICAgICAgdHJ5OiBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKKyAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9sb2dpbl9wYXNzd29yZCwgc3RyKGVycikpCisgICAgICAgIHNtdHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcXVpdF9yZXNldHNfZ3JlZXRpbmcoc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTUpCisgICAgICAgIGNvZGUsIG1lc3NhZ2UgPSBzbXRwLmVobG8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIDI1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc2l6ZScsIHNtdHAuZXNtdHBfZmVhdHVyZXMpCisgICAgICAgIHNtdHAucXVpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3NpemUnLCBzbXRwLmVzbXRwX2ZlYXR1cmVzKQorICAgICAgICBzbXRwLmNvbm5lY3QoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdzaXplJywgc210cC5lc210cF9mZWF0dXJlcykKKyAgICAgICAgc210cC5laGxvX29yX2hlbG9faWZfbmVlZGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc2l6ZScsIHNtdHAuZXNtdHBfZmVhdHVyZXMpCisgICAgICAgIHNtdHAucXVpdCgpCisKICAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKICAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0KSBhcyBzbXRwOgogICAgICAgICAgICAgY29kZSwgbWVzc2FnZSA9IHNtdHAubm9vcCgpCkBAIC04NzIsNiArODkzLDE2IEBACiAgICAgI1RPRE86IGFkZCB0ZXN0cyBmb3IgY29ycmVjdCBBVVRIIG1ldGhvZCBmYWxsYmFjayBub3cgdGhhdCB0aGUKICAgICAjdGVzdCBpbmZyYXN0cnVjdHVyZSBjYW4gc3VwcG9ydCBpdC4KIAorICAgICMgSXNzdWUgMTc0OTg6IG1ha2Ugc3VyZSBfcnNldCBkb2VzIG5vdCByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVjdGVkIGV4Y2VwdGlvbgorICAgIGRlZiB0ZXN0X19yZXN0X2Zyb21fbWFpbF9jbWQoc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKyAgICAgICAgc210cC5ub29wKCkKKyAgICAgICAgc2VsZi5zZXJ2Ll9TTVRQY2hhbm5lbC5tYWlsX3Jlc3BvbnNlID0gJzQ1MSBSZXF1ZXN0ZWQgYWN0aW9uIGFib3J0ZWQnCisgICAgICAgIHNlbGYuc2Vydi5fU01UUGNoYW5uZWwuZGlzY29ubmVjdCA9IFRydWUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzbXRwbGliLlNNVFBTZW5kZXJSZWZ1c2VkKToKKyAgICAgICAgICAgIHNtdHAuc2VuZG1haWwoJ0pvaG4nLCAnU2FsbHknLCAndGVzdCBtZXNzYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc210cC5zb2NrKQorCiAgICAgIyBJc3N1ZSA1NzEzOiBtYWtlIHN1cmUgY2xvc2UsIG5vdCByc2V0LCBpcyBjYWxsZWQgaWYgd2UgZ2V0IGEgNDIxIGVycm9yCiAgICAgZGVmIHRlc3RfNDIxX2Zyb21fbWFpbF9jbWQoc2VsZik6CiAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQppbmRleCBlOTdjZjM2Li4wM2JmOTNiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CkBAIC0xLDIzICsxLDM1IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHNtdHBsaWIKK2ltcG9ydCBzb2NrZXQKIAogc3NsID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJzc2wiKQogCiBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKIAorZGVmIGNoZWNrX3NzbF92ZXJpZml5KGhvc3QsIHBvcnQpOgorICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpKSBhcyBzb2NrOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfaG9zdG5hbWU9aG9zdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCiAKIGNsYXNzIFNtdHBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICB0ZXN0U2VydmVyID0gJ3NtdHAuZ21haWwuY29tJwogICAgIHJlbW90ZVBvcnQgPSAyNQotICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogCiAgICAgZGVmIHRlc3RfY29ubmVjdF9zdGFydHRscyhzZWxmKToKICAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYudGVzdFNlcnZlcik6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFAoc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VydmVyLnN0YXJ0dGxzKGNvbnRleHQ9c2VsZi5jb250ZXh0KQorICAgICAgICAgICAgICAgIHNlcnZlci5zdGFydHRscyhjb250ZXh0PWNvbnRleHQpCiAgICAgICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09ICdTVEFSVFRMUyBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIuJzoKICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Quc2tpcChlLmFyZ3NbMF0pCkBAIC0zMCw3ICs0Miw2IEBACiBjbGFzcyBTbXRwU1NMVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdGVzdFNlcnZlciA9ICdzbXRwLmdtYWlsLmNvbScKICAgICByZW1vdGVQb3J0ID0gNDY1Ci0gICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCiAKICAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgogICAgICAgICBzdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKQEAgLTQ3LDkgKzU4LDIzIEBACiAgICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCiAKICAgICBkZWYgdGVzdF9jb25uZWN0X3VzaW5nX3NzbGNvbnRleHQoc2VsZik6CisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgICAgICBzdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLnRlc3RTZXJ2ZXIpOgotICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQX1NTTChzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCwgY29udGV4dD1zZWxmLmNvbnRleHQpCisgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0LCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgICAgICBzZXJ2ZXIuZWhsbygpCisgICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X3VzaW5nX3NzbGNvbnRleHRfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKKyAgICAgICAgICAgIGNhbl92ZXJpZnkgPSBjaGVja19zc2xfdmVyaWZpeShzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCkKKyAgICAgICAgICAgIGlmIG5vdCBjYW5fdmVyaWZ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlNTTCBjZXJ0aWZpY2F0ZSBjYW4ndCBiZSB2ZXJpZmllZCIpCisKKyAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCisgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKKyAgICAgICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUF9TU0woc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQsIGNvbnRleHQ9Y29udGV4dCkKICAgICAgICAgICAgIHNlcnZlci5laGxvKCkKICAgICAgICAgICAgIHNlcnZlci5xdWl0KCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbmRoZHIucHkgYi9MaWIvdGVzdC90ZXN0X3NuZGhkci5weQppbmRleCAxMDA0Njg4Li41ZTBhYmUwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NuZGhkci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NuZGhkci5weQpAQCAtMTIsNyArMTIsNyBAQAogICAgICAgICAgICAgKCdzbmRoZHIuaGNvbScsICgnaGNvbScsIDIyMDUwLjAsIDEsIC0xLCA4KSksCiAgICAgICAgICAgICAoJ3NuZGhkci5zbmR0JywgKCdzbmR0JywgNDQxMDAsIDEsIDUsIDgpKSwKICAgICAgICAgICAgICgnc25kaGRyLnZvYycsICgndm9jJywgMCwgMSwgLTEsIDgpKSwKLSAgICAgICAgICAgICgnc25kaGRyLndhdicsICgnd2F2JywgNDQxMDAsIDIsIC0xLCAxNikpLAorICAgICAgICAgICAgKCdzbmRoZHIud2F2JywgKCd3YXYnLCA0NDEwMCwgMiwgNSwgMTYpKSwKICAgICAgICAgKToKICAgICAgICAgICAgIGZpbGVuYW1lID0gZmluZGZpbGUoZmlsZW5hbWUsIHN1YmRpcj0ic25kaGRyZGF0YSIpCiAgICAgICAgICAgICB3aGF0ID0gc25kaGRyLndoYXQoZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CmluZGV4IDQ1MGFlZTEuLjI4YmY4ZjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CkBAIC0xLDkgKzEsOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdW5pdHRlc3QuY2FzZSBpbXBvcnQgX0V4cGVjdGVkRmFpbHVyZQogCiBpbXBvcnQgZXJybm8KIGltcG9ydCBpbworaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHRlbXBmaWxlCkBAIC0yMSwxMyArMjEsMTMgQEAKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBzdHJ1Y3QKIHRyeToKLSAgICBpbXBvcnQgZmNudGwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBmY250bCA9IEZhbHNlCi10cnk6CiAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vzc2luZyA9IEZhbHNlCit0cnk6CisgICAgaW1wb3J0IGZjbnRsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZmNudGwgPSBOb25lCiAKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIE1TRyA9ICdNaWNoYWVsIEdpbGZpeCB3YXMgaGVyZVx1MTIzNFxyXG4nLmVuY29kZSgndXRmLTgnKSAjIyB0ZXN0IHVuaWNvZGUgc3RyaW5nIGFuZCBjYXJyaWFnZSByZXR1cm4KQEAgLTM4LDEyICszOCwxNyBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZCA9IE5vbmUKICAgICB0aHJlYWRpbmcgPSBOb25lCit0cnk6CisgICAgaW1wb3J0IF9zb2NrZXQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfc29ja2V0ID0gTm9uZQorCiAKIGRlZiBfaGF2ZV9zb2NrZXRfY2FuKCk6CiAgICAgIiIiQ2hlY2sgd2hldGhlciBDQU4gc29ja2V0cyBhcmUgc3VwcG9ydGVkIG9uIHRoaXMgaG9zdC4iIiIKICAgICB0cnk6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCi0gICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgc29ja2V0LmVycm9yLCBPU0Vycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgZWxzZToKICAgICAgICAgcy5jbG9zZSgpCkBAIC0xMTgsMTIgKzEyMyw0MiBAQAogICAgIGludGVyZmFjZSA9ICd2Y2FuMCcKICAgICBidWZzaXplID0gMTI4CiAKKyAgICAiIiJUaGUgQ0FOIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIDxsaW51eC9jYW4uaD46CisKKyAgICBzdHJ1Y3QgY2FuX2ZyYW1lIHsKKyAgICAgICAgY2FuaWRfdCBjYW5faWQ7ICAvKiAzMiBiaXQgQ0FOX0lEICsgRUZGL1JUUi9FUlIgZmxhZ3MgKi8KKyAgICAgICAgX191OCAgICBjYW5fZGxjOyAvKiBkYXRhIGxlbmd0aCBjb2RlOiAwIC4uIDggKi8KKyAgICAgICAgX191OCAgICBkYXRhWzhdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKyAgICB9OworICAgICIiIgorICAgIGNhbl9mcmFtZV9mbXQgPSAiPUlCM3g4cyIKKyAgICBjYW5fZnJhbWVfc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShjYW5fZnJhbWVfZm10KQorCisgICAgIiIiVGhlIEJyb2FkY2FzdCBNYW5hZ2VtZW50IENvbW1hbmQgZnJhbWUgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAgICBpbiA8bGludXgvY2FuL2JjbS5oPjoKKworICAgIHN0cnVjdCBiY21fbXNnX2hlYWQgeworICAgICAgICBfX3UzMiBvcGNvZGU7CisgICAgICAgIF9fdTMyIGZsYWdzOworICAgICAgICBfX3UzMiBjb3VudDsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgaXZhbDEsIGl2YWwyOworICAgICAgICBjYW5pZF90IGNhbl9pZDsKKyAgICAgICAgX191MzIgbmZyYW1lczsKKyAgICAgICAgc3RydWN0IGNhbl9mcmFtZSBmcmFtZXNbMF07CisgICAgfQorCisgICAgYGJjbV9tc2dfaGVhZGAgbXVzdCBiZSA4IGJ5dGVzIGFsaWduZWQgYmVjYXVzZSBvZiB0aGUgYGZyYW1lc2AgbWVtYmVyIChzZWUKKyAgICBgc3RydWN0IGNhbl9mcmFtZWAgZGVmaW5pdGlvbikuIE11c3QgdXNlIG5hdGl2ZSBub3Qgc3RhbmRhcmQgdHlwZXMgZm9yIHBhY2tpbmcuCisgICAgIiIiCisgICAgYmNtX2NtZF9tc2dfZm10ID0gIkAzSTRsMkkiCisgICAgYmNtX2NtZF9tc2dfZm10ICs9ICJ4IiAqIChzdHJ1Y3QuY2FsY3NpemUoYmNtX2NtZF9tc2dfZm10KSAlIDgpCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYucyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuQ0FOX1JBVykKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYucy5jbG9zZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zLmJpbmQoKHNlbGYuaW50ZXJmYWNlLCkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbmV0d29yayBpbnRlcmZhY2UgYCVzYCBkb2VzIG5vdCBleGlzdCcgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnRlcmZhY2UpCiAKQEAgLTIzOSw5ICsyNzQsNiBAQAogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0ZXN0X2Z1bmMgbXVzdCBiZSBhIGNhbGxhYmxlIGZ1bmN0aW9uIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdF9mdW5jKCkKLSAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmU6Ci0gICAgICAgICAgICAjIFdlIGRlbGliZXJhdGVseSBpZ25vcmUgZXhwZWN0ZWQgZmFpbHVyZXMKLSAgICAgICAgICAgIHBhc3MKICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHNlbGYucXVldWUucHV0KGUpCiAgICAgICAgIGZpbmFsbHk6CkBAIC0yOTIsNyArMzI0LDcgQEAKICAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY2xpLmJpbmQoKHNlbGYuaW50ZXJmYWNlLCkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBza2lwVGVzdCBzaG91bGQgbm90IGJlIGNhbGxlZCBoZXJlLCBhbmQgd2lsbCBiZSBjYWxsZWQgaW4gdGhlCiAgICAgICAgICAgICAjIHNlcnZlciBpbnN0ZWFkCiAgICAgICAgICAgICBwYXNzCkBAIC01NDAsMTEgKzU3Miw3IEBACiBjbGFzcyBJbmV0NlRlc3RCYXNlKEluZXRUZXN0QmFzZSk6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgSVB2NiBzb2NrZXQgdGVzdHMuIiIiCiAKLSAgICAjIERvbid0IHVzZSAibG9jYWxob3N0IiBoZXJlIC0gaXQgbWF5IG5vdCBoYXZlIGFuIElQdjYgYWRkcmVzcwotICAgICMgYXNzaWduZWQgdG8gaXQgYnkgZGVmYXVsdCAoZS5nLiBpbiAvZXRjL2hvc3RzKSwgYW5kIGlmIHNvbWVvbmUKLSAgICAjIGhhcyBhc3NpZ25lZCBpdCBhbiBJUHY0LW1hcHBlZCBhZGRyZXNzLCB0aGVuIGl0J3MgdW5saWtlbHkgdG8KLSAgICAjIHdvcmsgd2l0aCB0aGUgZnVsbCBJUHY2IEFQSS4KLSAgICBob3N0ID0gIjo6MSIKKyAgICBob3N0ID0gc3VwcG9ydC5IT1NUdjYKIAogY2xhc3MgVURQNlRlc3RCYXNlKEluZXQ2VGVzdEJhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIFVEUC1vdmVyLUlQdjYgdGVzdHMuIiIiCkBAIC02MDUsNyArNjMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIG9iaiBpbiBhcmdzXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgqY2FsbGFyZ3MpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgWFhYOiBjaGVjayBlcnJubz8KICAgICAgICAgICAgIGVyciA9IHN0cihlKQogICAgICAgICBlbHNlOgpAQCAtNjIzLDggKzY1MSwzMCBAQAogCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHMpLnN0YXJ0c3dpdGgoIjxzb2NrZXQuc29ja2V0IG9iamVjdCIpKQorICAgICAgICB3aXRoIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmZD0laScgJSBzLmZpbGVubygpLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmFtaWx5PSVzJyAlIHNvY2tldC5BRl9JTkVULCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigndHlwZT0lcycgJSBzb2NrZXQuU09DS19TVFJFQU0sIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwcm90bz0wJywgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3JhZGRyJywgcmVwcihzKSkKKyAgICAgICAgICAgIHMuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignbGFkZHInLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdHIocy5nZXRzb2NrbmFtZSgpKSwgcmVwcihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignW2Nsb3NlZF0nLCByZXByKHMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsYWRkcicsIHJlcHIocykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhfc29ja2V0IGlzIG5vdCBOb25lLCAnbmVlZCBfc29ja2V0IG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3NvY2tldF9yZXByKHNlbGYpOgorICAgICAgICBzID0gX3NvY2tldC5zb2NrZXQoX3NvY2tldC5BRl9JTkVULCBfc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBleHBlY3RlZCA9ICgnPHNvY2tldCBvYmplY3QsIGZkPSVzLCBmYW1pbHk9JXMsIHR5cGU9JXMsIHByb3RvPSVzPicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKHMuZmlsZW5vKCksIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHMpLCBleHBlY3RlZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBleHBlY3RlZCA9ICgnPHNvY2tldCBvYmplY3QsIGZkPS0xLCBmYW1pbHk9JXMsIHR5cGU9JXMsIHByb3RvPSVzPicKKyAgICAgICAgICAgICAgICAgICAgJSAocy5mYW1pbHksIHMudHlwZSwgcy5wcm90bykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQpAQCAtNjQyLDExICs2OTIsMTEgQEAKICAgICBkZWYgdGVzdFNvY2tldEVycm9yKHNlbGYpOgogICAgICAgICAjIFRlc3Rpbmcgc29ja2V0IG1vZHVsZSBleGNlcHRpb25zCiAgICAgICAgIG1zZyA9ICJFcnJvciByYWlzaW5nIHNvY2tldCBleGNlcHRpb24gKCVzKS4iCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5lcnJvcicpOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5oZXJyb3InKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtc2c9bXNnICUgJ09TRXJyb3InKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5oZXJyb3InKToKICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5oZXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmdhaWVycm9yJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuZ2FpZXJyb3InKToKICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5nYWllcnJvcgogCiAgICAgZGVmIHRlc3RTZW5kdG9FcnJvcnMoc2VsZik6CkBAIC03MDksMTMgKzc1OSwxMyBAQAogICAgICAgICBob3N0bmFtZSA9IHNvY2tldC5nZXRob3N0bmFtZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlwID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdG5hbWUpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBQcm9iYWJseSBuYW1lIGxvb2t1cCB3YXNuJ3Qgc2V0IHVwIHJpZ2h0OyBza2lwIHRoaXMgdGVzdAogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbmFtZSBsb29rdXAgZmFpbHVyZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcC5maW5kKCcuJykgPj0gMCwgIkVycm9yIHJlc29sdmluZyBob3N0IHRvIGlwLiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGhuYW1lLCBhbGlhc2VzLCBpcGFkZHJzID0gc29ja2V0LmdldGhvc3RieWFkZHIoaXApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBQcm9iYWJseSBhIHNpbWlsYXIgcHJvYmxlbSBhcyBhYm92ZTsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25hbWUgbG9va3VwIGZhaWx1cmUnKQogICAgICAgICBhbGxfaG9zdF9uYW1lcyA9IFtob3N0bmFtZSwgaG5hbWVdICsgYWxpYXNlcwpAQCAtNzIzLDEzICs3NzMsMjcgQEAKICAgICAgICAgaWYgbm90IGZxaG4gaW4gYWxsX2hvc3RfbmFtZXM6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRlc3RpbmcgaG9zdCByZXNvbHV0aW9uIG1lY2hhbmlzbXMuIChmcWRuOiAlcywgYWxsOiAlcykiICUgKGZxaG4sIHJlcHIoYWxsX2hvc3RfbmFtZXMpKSkKIAorICAgIGRlZiB0ZXN0X2hvc3RfcmVzb2x1dGlvbihzZWxmKToKKyAgICAgICAgZm9yIGFkZHIgaW4gWycwLjEuMS5+MScsICcxKy4xLjEuMScsICc6OjFxJywgJzo6MTo6MicsCisgICAgICAgICAgICAgICAgICAgICAnMToxOjE6MToxOjE6MToxOjEnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRob3N0YnluYW1lLCBhZGRyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmdldGhvc3RieWFkZHIsIGFkZHIpCisKKyAgICAgICAgZm9yIGFkZHIgaW4gW3N1cHBvcnQuSE9TVCwgJzEwLjAuMC4xJywgJzI1NS4yNTUuMjU1LjI1NSddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrZXQuZ2V0aG9zdGJ5bmFtZShhZGRyKSwgYWRkcikKKworICAgICAgICAjIHdlIGRvbid0IHRlc3Qgc3VwcG9ydC5IT1NUdjYgYmVjYXVzZSB0aGVyZSdzIGEgY2hhbmNlIGl0IGRvZXNuJ3QgaGF2ZQorICAgICAgICAjIGEgbWF0Y2hpbmcgbmFtZSBlbnRyeSAoZS5nLiAnaXA2LWxvY2FsaG9zdCcpCisgICAgICAgIGZvciBob3N0IGluIFtzdXBwb3J0LkhPU1RdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihob3N0LCBzb2NrZXQuZ2V0aG9zdGJ5YWRkcihob3N0KVsyXSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnc2V0aG9zdG5hbWUnKSwgInRlc3QgbmVlZHMgc29ja2V0LnNldGhvc3RuYW1lKCkiKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnZ2V0aG9zdG5hbWUnKSwgInRlc3QgbmVlZHMgc29ja2V0LmdldGhvc3RuYW1lKCkiKQogICAgIGRlZiB0ZXN0X3NldGhvc3RuYW1lKHNlbGYpOgogICAgICAgICBvbGRobiA9IHNvY2tldC5nZXRob3N0bmFtZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2tldC5zZXRob3N0bmFtZSgnbmV3JykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUEVSTToKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IHNob3VsZCBiZSBydW4gYXMgcm9vdCIpCiAgICAgICAgICAgICBlbHNlOgpAQCAtNzYzLDggKzgyNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5pZl9uYW1laW5kZXgoKSBub3QgYXZhaWxhYmxlLicpCiAgICAgZGVmIHRlc3RJbnZhbGlkSW50ZXJmYWNlTmFtZUluZGV4KHNlbGYpOgogICAgICAgICAjIHRlc3Qgbm9uZXhpc3RlbnQgaW50ZXJmYWNlIGluZGV4L25hbWUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrZXQuaWZfaW5kZXh0b25hbWUsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmlmX25hbWV0b2luZGV4LCAnX0RFQURCRUVGJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgsICdfREVBREJFRUYnKQogICAgICAgICAjIHRlc3Qgd2l0aCBpbnZhbGlkIHZhbHVlcwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNvY2tldC5pZl9uYW1ldG9pbmRleCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzb2NrZXQuaWZfaW5kZXh0b25hbWUsICdfREVBREJFRUYnKQpAQCAtNzg2LDcgKzg1MCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgT24gc29tZSB2ZXJzaW9ucywgdGhpcyBjcmFzaGVzIHRoZSBpbnRlcnByZXRlci4KICAgICAgICAgICAgIHNvY2tldC5nZXRuYW1laW5mbygoJ3gnLCAwLCAwLCAwKSwgMCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdE50b0goc2VsZik6CkBAIC04MjIsNyArODg2LDcgQEAKICAgICAgICAgIyBGaW5kIG9uZSBzZXJ2aWNlIHRoYXQgZXhpc3RzLCB0aGVuIGNoZWNrIGFsbCB0aGUgcmVsYXRlZCBpbnRlcmZhY2VzLgogICAgICAgICAjIEkndmUgb3JkZXJlZCB0aGlzIGJ5IHByb3RvY29scyB0aGF0IGhhdmUgYm90aCBhIHRjcCBhbmQgdWRwCiAgICAgICAgICMgcHJvdG9jb2wsIGF0IGxlYXN0IGZvciBtb2Rlcm4gTGludXhlcy4KLSAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgnZnJlZWJzZCcsICduZXRic2QnKSkKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgnZnJlZWJzZCcsICduZXRic2QnLCAnZ251a2ZyZWVic2QnKSkKICAgICAgICAgICAgIG9yIHN5cy5wbGF0Zm9ybSBpbiAoJ2xpbnV4JywgJ2RhcndpbicpKToKICAgICAgICAgICAgICMgYXZvaWQgdGhlICdlY2hvJyBzZXJ2aWNlIG9uIHRoaXMgcGxhdGZvcm0sIGFzIHRoZXJlIGlzIGFuCiAgICAgICAgICAgICAjIGFzc3VtcHRpb24gYnJlYWtpbmcgbm9uLXN0YW5kYXJkIHBvcnQvcHJvdG9jb2wgZW50cnkKQEAgLTgzMywxNyArODk3LDE3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UsICd0Y3AnKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAgICAgICAgICMgVHJ5IHNhbWUgY2FsbCB3aXRoIG9wdGlvbmFsIHByb3RvY29sIG9taXR0ZWQKICAgICAgICAgcG9ydDIgPSBzb2NrZXQuZ2V0c2VydmJ5bmFtZShzZXJ2aWNlKQogICAgICAgICBlcShwb3J0LCBwb3J0MikKICAgICAgICAgIyBUcnkgdWRwLCBidXQgZG9uJ3QgYmFyZiBpZiBpdCBkb2Vzbid0IGV4aXN0CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHVkcHBvcnQgPSBzb2NrZXQuZ2V0c2VydmJ5bmFtZShzZXJ2aWNlLCAndWRwJykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICB1ZHBwb3J0ID0gTm9uZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXEodWRwcG9ydCwgcG9ydCkKQEAgLTg5OSw3ICs5NjMsNyBAQAogICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVULCBhKQogCiAgICAgICAgIGFzc2VydEludmFsaWQgPSBsYW1iZGEgZnVuYyxhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDAwXHgwMFx4MDBceDAwJywgZignMC4wLjAuMCcpKQpAQCAtOTMyLDkgKzk5NiwxNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ0lQdjYgbm90IGF2YWlsYWJsZScpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2NvdWxkIG5vdCBpbXBvcnQgbmVlZGVkIHN5bWJvbHMgZnJvbSBzb2NrZXQnKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgJzo6JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSAxMDAyMjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnSVB2NiBtaWdodCBub3QgYmUgc3VwcG9ydGVkJykKKwogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDAwJyAqIDE2LCBmKCc6OicpKQpAQCAtOTgzLDcgKzEwNTUsNyBAQAogICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9udG9hIGFzIGYsIGluZXRfbnRvcCwgQUZfSU5FVAogICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVULCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGZ1bmMsYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZihiJ1x4MDFceDAwXHgwMVx4MDAnKSkKQEAgLTEwMTAsOSArMTA4MiwxNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ0lQdjYgbm90IGF2YWlsYWJsZScpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2NvdWxkIG5vdCBpbXBvcnQgbmVlZGVkIHN5bWJvbHMgZnJvbSBzb2NrZXQnKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgYidceDAwJyAqIDE2KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yID09IDEwMDIyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdJUHY2IG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQnKQorCiAgICAgICAgIGYgPSBsYW1iZGEgYTogaW5ldF9udG9wKEFGX0lORVQ2LCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGYsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZiwgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnOjonLCBmKGInXHgwMCcgKiAxNikpCkBAIC0xMDQwLDcgKzExMjAsNyBAQAogICAgICAgICAjIEF0IGxlYXN0IGZvciBlQ29zLiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIFMvMzkwIHRvIHBhc3MuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG15X2lwX2FkZHIgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIFByb2JhYmx5IG5hbWUgbG9va3VwIHdhc24ndCBzZXQgdXAgcmlnaHQ7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduYW1lIGxvb2t1cCBmYWlsdXJlJykKICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lWzBdLCAoIjAuMC4wLjAiLCBteV9pcF9hZGRyKSwgJyVzIGludmFsaWQnICUgbmFtZVswXSkKQEAgLTEwNjcsMjggKzExNDcsNDEgQEAKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEpCiAgICAgICAgIHNvY2suY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2suc2VuZCwgYiJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kLCBiInNwYW0iKQogCiAgICAgZGVmIHRlc3ROZXdBdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIHRlc3RpbmcgLmZhbWlseSwgLnR5cGUgYW5kIC5wcm90b2NvbAorCiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5mYW1pbHksIHNvY2tldC5BRl9JTkVUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfQ0xPRVhFQycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzb2NrLnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrZXQuU09DS19TVFJFQU0gfCBzb2NrZXQuU09DS19DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay50eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5wcm90bywgMCkKICAgICAgICAgc29jay5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9nZXRzb2NrYWRkcmFyZyhzZWxmKToKLSAgICAgICAgaG9zdCA9ICcwLjAuMC4wJworICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKICAgICAgICAgYmlnX3BvcnQgPSBwb3J0ICsgNjU1MzYKICAgICAgICAgbmVnX3BvcnQgPSBwb3J0IC0gNjU1MzYKLSAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrLmJpbmQsIChob3N0LCBiaWdfcG9ydCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrLmJpbmQsIChob3N0LCBuZWdfcG9ydCkpCi0gICAgICAgICAgICBzb2NrLmJpbmQoKGhvc3QsIHBvcnQpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2suYmluZCwgKEhPU1QsIGJpZ19wb3J0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29jay5iaW5kLCAoSE9TVCwgbmVnX3BvcnQpKQorICAgICAgICAjIFNpbmNlIGZpbmRfdW51c2VkX3BvcnQoKSBpcyBpbmhlcmVudGx5IHN1YmplY3QgdG8gcmFjZSBjb25kaXRpb25zLCB3ZQorICAgICAgICAjIGNhbGwgaXQgYSBjb3VwbGUgdGltZXMgaWYgbmVjZXNzYXJ5LgorICAgICAgICBmb3IgaSBpbiBpdGVydG9vbHMuY291bnQoKToKKyAgICAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2suYmluZCgoSE9TVCwgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFERFJJTlVTRSBvciBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICJudCIsICJXaW5kb3dzIHNwZWNpZmljIikKICAgICBkZWYgdGVzdF9zb2NrX2lvY3RsKHNlbGYpOgpAQCAtMTEyNiw5ICsxMjE5LDEyIEBACiAgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCA4MCkKICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUpCiAgICAgICAgICMgdGVzdCBmYW1pbHkgYW5kIHNvY2t0eXBlIGZpbHRlcnMKLSAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgc29ja2V0LkFGX0lORVQpCi0gICAgICAgIGZvciBmYW1pbHksIF8sIF8sIF8sIF8gaW4gaW5mb3M6CisgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBfLCBfLCBfIGluIGluZm9zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmFtaWx5KSwgJ0FkZHJlc3NGYW1pbHkuQUZfSU5FVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHR5cGUpLCAnU29ja2V0VHlwZS5TT0NLX1NUUkVBTScpCiAgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgZm9yIF8sIHNvY2t0eXBlLCBfLCBfLCBfIGluIGluZm9zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrdHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQpAQCAtMTE3Niw3ICsxMjcyLDcgQEAKIAogICAgIGRlZiB0ZXN0X2dldG5hbWVpbmZvKHNlbGYpOgogICAgICAgICAjIG9ubHkgSVAgYWRkcmVzc2VzIGFyZSBhbGxvd2VkCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLCAoJ21haWwucHl0aG9uLm9yZycsMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywgKCdtYWlsLnB5dGhvbi5vcmcnLDApLCAwKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmsgaXMgbm90IGVuYWJsZWQnKQpAQCAtMTI5MSwxMCArMTM4NywzMSBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiAgICAgZGVmIHRlc3RfZmxvd2luZm8oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCc6OjEnLDAsIDB4ZmZmZmZmZmYpLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydC5IT1NUdjYsIDAsIDB4ZmZmZmZmZmYpLCAwKQogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzLmJpbmQsICgnOjoxJywgMCwgLTEwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHMuYmluZCwgKHN1cHBvcnQuSE9TVHY2LCAwLCAtMTApKQogCisgICAgZGVmIHRlc3Rfc3RyX2Zvcl9lbnVtcyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgQUZfKiBhbmQgU09DS18qIGNvbnN0YW50cyBoYXZlIGVudW0tbGlrZSBzdHJpbmcKKyAgICAgICAgIyByZXBycy4KKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzLmZhbWlseSksICdBZGRyZXNzRmFtaWx5LkFGX0lORVQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocy50eXBlKSwgJ1NvY2tldFR5cGUuU09DS19TVFJFQU0nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdXaWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X3Vrbm93bl9zb2NrZXRfZmFtaWx5X3JlcHIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdoZW4gY3JlYXRlZCB3aXRoIGEgZmFtaWx5IHRoYXQncyBub3Qgb25lIG9mIHRoZSBrbm93bgorICAgICAgICAjIEFGXyovU09DS18qIGNvbnN0YW50cywgc29ja2V0LmZhbWlseSBqdXN0IHJldHVybnMgdGhlIG51bWJlci4KKyAgICAgICAgIworICAgICAgICAjIFRvIGRvIHRoaXMgd2UgZm9vbCBzb2NrZXQuc29ja2V0IGludG8gYmVsaWV2aW5nIGl0IGFscmVhZHkgaGFzIGFuCisgICAgICAgICMgb3BlbiBmZCBiZWNhdXNlIG9uIHRoaXMgcGF0aCBpdCBkb2Vzbid0IGFjdHVhbGx5IHZlcmlmeSB0aGUgZmFtaWx5IGFuZAorICAgICAgICAjIHR5cGUgYW5kIHBvcHVsYXRlcyB0aGUgc29ja2V0IG9iamVjdC4KKyAgICAgICAgIworICAgICAgICAjIE9uIFdpbmRvd3MgdGhpcyB0cmljayB3b24ndCB3b3JrLCBzbyB0aGUgdGVzdCBpcyBza2lwcGVkLgorICAgICAgICBmZCwgXyA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5PTQyNDI0LCB0eXBlPTEzMzMxLCBmaWxlbm89ZmQpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmFtaWx5LCA0MjQyNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy50eXBlLCAxMzMzMSkKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9TT0NLRVRfQ0FOLCAnU29ja2V0Q2FuIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljQ0FOVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMzA0LDEwICsxNDIxLDM1IEBACiAgICAgICAgIHNvY2tldC5QRl9DQU4KICAgICAgICAgc29ja2V0LkNBTl9SQVcKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RCQ01Db25zdGFudHMoc2VsZik6CisgICAgICAgIHNvY2tldC5DQU5fQkNNCisKKyAgICAgICAgIyBvcGNvZGVzCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NFVFVQICAgICAjIGNyZWF0ZSAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzaworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9ERUxFVEUgICAgIyByZW1vdmUgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfUkVBRCAgICAgICMgcmVhZCBwcm9wZXJ0aWVzIG9mIChjeWNsaWMpIHRyYW5zbWlzc2lvbiB0YXNrCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NFTkQgICAgICAjIHNlbmQgb25lIENBTiBmcmFtZQorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9TRVRVUCAgICAgIyBjcmVhdGUgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX0RFTEVURSAgICAjIHJlbW92ZSBSWCBjb250ZW50IGZpbHRlciBzdWJzY3JpcHRpb24KKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfUkVBRCAgICAgICMgcmVhZCBwcm9wZXJ0aWVzIG9mIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbgorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9TVEFUVVMgICAgIyByZXBseSB0byBUWF9SRUFEIHJlcXVlc3QKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfRVhQSVJFRCAgICMgbm90aWZpY2F0aW9uIG9uIHBlcmZvcm1lZCB0cmFuc21pc3Npb25zIChjb3VudD0wKQorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9TVEFUVVMgICAgIyByZXBseSB0byBSWF9SRUFEIHJlcXVlc3QKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfVElNRU9VVCAgICMgY3ljbGljIG1lc3NhZ2UgaXMgYWJzZW50CisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX0NIQU5HRUQgICAjIHVwZGF0ZWQgQ0FOIGZyYW1lIChkZXRlY3RlZCBjb250ZW50IGNoYW5nZSkKKwogICAgIGRlZiB0ZXN0Q3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuQ0FOX1JBVykgYXMgczoKICAgICAgICAgICAgIHBhc3MKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RDcmVhdGVCQ01Tb2NrZXQoc2VsZik6CisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pIGFzIHM6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdEJpbmRBbnkoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgogICAgICAgICAgICAgcy5iaW5kKCgnJywgKSkKQEAgLTEzMTUsNyArMTQ1Nyw3IEBACiAgICAgZGVmIHRlc3RUb29Mb25nSW50ZXJmYWNlTmFtZShzZWxmKToKICAgICAgICAgIyBtb3N0IHN5c3RlbXMgbGltaXQgSUZOQU1TSVogdG8gMTYsIHRha2UgMTAyNCB0byBiZSBzdXJlCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzb2NrZXQuZXJyb3IsICdpbnRlcmZhY2UgbmFtZSB0b28gbG9uZycsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsICdpbnRlcmZhY2UgbmFtZSB0b28gbG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYmluZCwgKCd4JyAqIDEwMjQsKSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX1JBV19MT09QQkFDSyIpLApAQCAtMTM0MywxNiArMTQ4NSw2IEBACiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQ0FOVGVzdChUaHJlYWRlZENBTlNvY2tldFRlc3QpOgogCi0gICAgIiIiVGhlIENBTiBmcmFtZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2FuLmg+OgotCi0gICAgc3RydWN0IGNhbl9mcmFtZSB7Ci0gICAgICAgIGNhbmlkX3QgY2FuX2lkOyAgLyogMzIgYml0IENBTl9JRCArIEVGRi9SVFIvRVJSIGZsYWdzICovCi0gICAgICAgIF9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCi0gICAgICAgIF9fdTggICAgZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Ci0gICAgfTsKLSAgICAiIiIKLSAgICBjYW5fZnJhbWVfZm10ID0gIj1JQjN4OHMiCi0KICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgogICAgICAgICBUaHJlYWRlZENBTlNvY2tldFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQogCkBAIC0xNDAxLDYgKzE1MzMsNDYgQEAKICAgICAgICAgc2VsZi5jZjIgPSBzZWxmLmJ1aWxkX2Nhbl9mcmFtZSgweDEyLCBiJ1x4OTlceDIyXHgzMycpCiAgICAgICAgIHNlbGYuY2xpLnNlbmQoc2VsZi5jZjIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkNBTl9CQ00iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LkNBTl9CQ00gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiBfdGVzdEJDTShzZWxmKToKKyAgICAgICAgY2YsIGFkZHIgPSBzZWxmLmNsaS5yZWN2ZnJvbShzZWxmLmJ1ZnNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jZiwgY2YpCisgICAgICAgIGNhbl9pZCwgY2FuX2RsYywgZGF0YSA9IHNlbGYuZGlzc2VjdF9jYW5fZnJhbWUoY2YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYW5faWQsIGNhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRhdGEsIGRhdGEpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkNBTl9CQ00iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LkNBTl9CQ00gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0QkNNKHNlbGYpOgorICAgICAgICBiY20gPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX0RHUkFNLCBzb2NrZXQuQ0FOX0JDTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJjbS5jbG9zZSkKKyAgICAgICAgYmNtLmNvbm5lY3QoKHNlbGYuaW50ZXJmYWNlLCkpCisgICAgICAgIHNlbGYuY2FuX2lkID0gMHgxMjMKKyAgICAgICAgc2VsZi5kYXRhID0gYnl0ZXMoWzB4YzAsIDB4ZmYsIDB4ZWVdKQorICAgICAgICBzZWxmLmNmID0gc2VsZi5idWlsZF9jYW5fZnJhbWUoc2VsZi5jYW5faWQsIHNlbGYuZGF0YSkKKyAgICAgICAgb3Bjb2RlID0gc29ja2V0LkNBTl9CQ01fVFhfU0VORAorICAgICAgICBmbGFncyA9IDAKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGl2YWwxX3NlY29uZHMgPSBpdmFsMV91c2VjID0gaXZhbDJfc2Vjb25kcyA9IGl2YWwyX3VzZWMgPSAwCisgICAgICAgIGJjbV9jYW5faWQgPSAweDAyMjIKKyAgICAgICAgbmZyYW1lcyA9IDEKKyAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmNmKSA9PSAxNgorICAgICAgICBoZWFkZXIgPSBzdHJ1Y3QucGFjayhzZWxmLmJjbV9jbWRfbXNnX2ZtdCwKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLAorICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgIGl2YWwxX3NlY29uZHMsCisgICAgICAgICAgICAgICAgICAgIGl2YWwxX3VzZWMsCisgICAgICAgICAgICAgICAgICAgIGl2YWwyX3NlY29uZHMsCisgICAgICAgICAgICAgICAgICAgIGl2YWwyX3VzZWMsCisgICAgICAgICAgICAgICAgICAgIGJjbV9jYW5faWQsCisgICAgICAgICAgICAgICAgICAgIG5mcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgaGVhZGVyX3BsdXNfZnJhbWUgPSBoZWFkZXIgKyBzZWxmLmNmCisgICAgICAgIGJ5dGVzX3NlbnQgPSBiY20uc2VuZChoZWFkZXJfcGx1c19mcmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlc19zZW50LCBsZW4oaGVhZGVyX3BsdXNfZnJhbWUpKQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfU09DS0VUX1JEUywgJ1JEUyBzb2NrZXRzIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljUkRTVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNjIzLDcgKzE3OTUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYsIGZpbGVubykKICAgICAgICAgIyBjbGlfY29ubiBjYW5ub3QgYmUgdXNlZCBhbnltb3JlLi4uCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaV9jb25uLl9jbG9zZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCiAgICAgICAgIHNlbGYuY2xpX2Nvbm4uY2xvc2UoKQogICAgICAgICAjIC4uLmJ1dCB3ZSBjYW4gY3JlYXRlIGFub3RoZXIgc29ja2V0IHVzaW5nIHRoZSAoc3RpbGwgb3BlbikKICAgICAgICAgIyBmaWxlIGRlc2NyaXB0b3IKQEAgLTE5OTIsNyArMjE2NCw3IEBACiAgICAgZGVmIF90ZXN0U2VuZG1zZ0V4Y2Vzc0Ntc2dSZWplY3Qoc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgIkNNU0dfU1BBQ0UiKToKICAgICAgICAgICAgICMgQ2FuIG9ubHkgc2VuZCBvbmUgaXRlbQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRtc2dUb1NlcnZlcihbTVNHXSwgWygwLCAwLCBiIiIpLCAoMCwgMCwgYiIiKV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjbS5leGNlcHRpb24uZXJybm8pCiAgICAgICAgIHNlbGYuc2VuZFRvU2VydmVyKGIiZG9uZSIpCkBAIC0yMDAzLDcgKzIxNzUsNyBAQAogCiAgICAgZGVmIF90ZXN0U2VuZG1zZ0FmdGVyQ2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuY2xpX3NvY2suY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc2VuZG1zZ1RvU2VydmVyLCBbTVNHXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIsIFtNU0ddKQogCiAKIGNsYXNzIFNlbmRtc2dTdHJlYW1UZXN0cyhTZW5kbXNnVGVzdHMpOgpAQCAtMjA0Nyw3ICsyMjE5LDcgQEAKICAgICBAdGVzdFNlbmRtc2dEb250V2FpdC5jbGllbnRfc2tpcAogICAgIGRlZiBfdGVzdFNlbmRtc2dEb250V2FpdChzZWxmKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRtc2dUb1NlcnZlcihbYiJhIio1MTJdLCBbXSwgc29ja2V0Lk1TR19ET05UV0FJVCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY20uZXhjZXB0aW9uLmVycm5vLApAQCAtMjA2Nyw5ICsyMjM5LDkgQEAKICAgICAgICAgcGFzcwogCiAgICAgZGVmIF90ZXN0U2VuZG1zZ05vRGVzdEFkZHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtNU0ddKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbTVNHXSwgW10sIDAsIE5vbmUpCiAKIApAQCAtMjE1NSw3ICsyMzI3LDcgQEAKICAgICBkZWYgdGVzdFJlY3Ztc2dBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgcmVjdm1zZ1tfaW50b10oKSBmYWlscyBvbiBhIGNsb3NlZCBzb2NrZXQuCiAgICAgICAgIHNlbGYuc2Vydl9zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmRvUmVjdm1zZywgc2VsZi5zZXJ2X3NvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuZG9SZWN2bXNnLCBzZWxmLnNlcnZfc29jaywgMTAyNCkKIAogICAgIGRlZiBfdGVzdFJlY3Ztc2dBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC0yNjA2LDcgKzI3NzgsNyBAQAogICAgICAgICAjIGNhbGwgZmFpbHMsIGp1c3Qgc2VuZCBtc2cgd2l0aCBubyBhbmNpbGxhcnkgZGF0YS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmJ5dGVzID0gc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW21zZ10sIGFuY2RhdGEpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBpdCB3YXMgdGhlIHN5c3RlbSBjYWxsIHRoYXQgZmFpbGVkCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5lcnJubywgaW50KQogICAgICAgICAgICAgbmJ5dGVzID0gc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW21zZ10pCkBAIC0yOTg0LDcgKzMxNTYsNyBAQAogICAgICAgICAgICAgICAgICAgYXJyYXkuYXJyYXkoImkiLCBbc2VsZi50cmFmZmljX2NsYXNzXSkudG9ieXRlcygpICsgYiJceDAwIiksCiAgICAgICAgICAgICAgICAgIChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BMSU1JVCwKICAgICAgICAgICAgICAgICAgIGFycmF5LmFycmF5KCJpIiwgW3NlbGYuaG9wX2xpbWl0XSkpXSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuZXJybm8sIGludCkKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKAogICAgICAgICAgICAgICAgIFtNU0ddLApAQCAtMzQ0MiwxMCArMzYxNCwxMCBAQAogICAgICAgICBzZWxmLnNlcnYuc2V0dGltZW91dChzZWxmLnRpbWVvdXQpCiAKICAgICBkZWYgY2hlY2tJbnRlcnJ1cHRlZFJlY3Yoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgIyBDaGVjayB0aGF0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSByYWlzZXMgc29ja2V0LmVycm9yIHdpdGggYW4KKyAgICAgICAgIyBDaGVjayB0aGF0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSByYWlzZXMgT1NFcnJvciB3aXRoIGFuCiAgICAgICAgICMgZXJybm8gb2YgRUlOVFIgd2hlbiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KICAgICAgICAgc2VsZi5zZXRBbGFybShzZWxmLmFsYXJtX3RpbWUpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoY20uZXhjZXB0aW9uLCBzb2NrZXQudGltZW91dCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVJTlRSKQpAQCAtMzUwMiw5ICszNjc0LDkgQEAKIAogICAgIGRlZiBjaGVja0ludGVycnVwdGVkU2VuZChzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAjIENoZWNrIHRoYXQgZnVuYygqYXJncywgKiprd2FyZ3MpLCBydW4gaW4gYSBsb29wLCByYWlzZXMKLSAgICAgICAgIyBzb2NrZXQuZXJyb3Igd2l0aCBhbiBlcnJubyBvZiBFSU5UUiB3aGVuIGludGVycnVwdGVkIGJ5IGEKKyAgICAgICAgIyBPU0Vycm9yIHdpdGggYW4gZXJybm8gb2YgRUlOVFIgd2hlbiBpbnRlcnJ1cHRlZCBieSBhCiAgICAgICAgICMgc2lnbmFsLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIHNlbGYuc2V0QWxhcm0oc2VsZi5hbGFybV90aW1lKQogICAgICAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQpAQCAtMzYwMyw3ICszNzc1LDcgQEAKICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnNlcnYuYWNjZXB0KCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZW5kIC0gc3RhcnQpIDwgMS4wLCAiRXJyb3Igc2V0dGluZyBub24tYmxvY2tpbmcgbW9kZS4iKQpAQCAtMzYzOCw3ICszODEwLDcgQEAKICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnNlcnYuYWNjZXB0KCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZW5kIC0gc3RhcnQpIDwgMS4wLCAiRXJyb3IgY3JlYXRpbmcgd2l0aCBub24tYmxvY2tpbmcgbW9kZS4iKQpAQCAtMzY2OCw3ICszODQwLDcgQEAKICAgICAgICAgc2VsZi5zZXJ2LnNldGJsb2NraW5nKDApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBub24tYmxvY2tpbmcgYWNjZXB0LiIpCkBAIC0zNjk4LDcgKzM4NzAsNyBAQAogICAgICAgICBjb25uLnNldGJsb2NraW5nKDApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdihsZW4oTVNHKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBub24tYmxvY2tpbmcgcmVjdi4iKQpAQCAtMzc4MSw3ICszOTUzLDcgQEAKICAgICAgICAgIyBGaXJzdCByZWFkIHJhaXNlcyBhIHRpbWVvdXQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LnRpbWVvdXQsIHNlbGYucmVhZF9maWxlLnJlYWQsIDEpCiAgICAgICAgICMgU2Vjb25kIHJlYWQgaXMgZGlzYWxsb3dlZAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGN0eDoKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjdHg6CiAgICAgICAgICAgICBzZWxmLnJlYWRfZmlsZS5yZWFkKDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIsIHN0cihjdHguZXhjZXB0aW9uKSkKIApAQCAtMzg3Myw3ICs0MDQ1LDcgQEAKICAgICAgICAgc2VsZi5yZWFkX2ZpbGUuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJlYWRfZmlsZS5maWxlbm8pCiAgICAgICAgIHNlbGYuY2xpX2Nvbm4uY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX2Nvbm4uZ2V0c29ja25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX2Nvbm4uZ2V0c29ja25hbWUpCiAKICAgICBkZWYgX3Rlc3RSZWFsQ2xvc2Uoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTM5MTAsNyArNDA4Miw3IEBACiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9yYWlzZV9laW50cigpOgotICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJybm8uRUlOVFIsICJpbnRlcnJ1cHRlZCIpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUlOVFIsICJpbnRlcnJ1cHRlZCIpCiAKICAgICBkZWYgX3RleHRpb3dyYXBfbW9ja19zb2NrZXQoc2VsZiwgbW9jaywgYnVmZmVyaW5nPS0xKToKICAgICAgICAgcmF3ID0gc29ja2V0LlNvY2tldElPKG1vY2ssICJyIikKQEAgLTQwMjIsNyArNDE5NCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBzZWxmLnJlYWRfbXNnKQogICAgICAgICAjIC4uLnVudGlsIHRoZSBmaWxlIGlzIGl0c2VsZiBjbG9zZWQKICAgICAgICAgc2VsZi5yZWFkX2ZpbGUuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQogCiAgICAgZGVmIF90ZXN0TWFrZWZpbGVDbG9zZShzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV9maWxlLndyaXRlKHNlbGYud3JpdGVfbXNnKQpAQCAtNDE3MSw3ICs0MzQzLDcgQEAKICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCiAgICAgICAgIGNsaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsaS5jbG9zZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY2xpLmNvbm5lY3QoKEhPU1QsIHBvcnQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUNPTk5SRUZVU0VEKQogCkBAIC00MTc5LDcgKzQzNTEsNyBAQAogICAgICAgICAjIElzc3VlICM5NzkyOiBlcnJvcnMgcmFpc2VkIGJ5IGNyZWF0ZV9jb25uZWN0aW9uKCkgc2hvdWxkIGhhdmUKICAgICAgICAgIyBhIHByb3BlciBlcnJubyBhdHRyaWJ1dGUuCiAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHBvcnQpKQogCiAgICAgICAgICMgSXNzdWUgIzE2MjU3OiBjcmVhdGVfY29ubmVjdGlvbigpIGNhbGxzIGdldGFkZHJpbmZvKCkgYWdhaW5zdApAQCAtNDMyNyw3ICs0NDk5LDcgQEAKICAgICAgICAgICAgIGZvbyA9IHNlbGYuc2Vydi5hY2NlcHQoKQogICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB0aW1lb3V0IGluc3RlYWQgb2YgZXJyb3IgKFRDUCkiKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG9rID0gVHJ1ZQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoVENQKSIpCkBAIC00Mzg0LDcgKzQ1NTYsNyBAQAogICAgICAgICAgICAgZm9vID0gc2VsZi5zZXJ2LnJlY3YoMTAyNCkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIGVycm9yIChVRFApIikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBvayA9IFRydWUKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb24gKFVEUCkiKQpAQCAtNDM5NCwxMCArNDU2NiwxMCBAQAogY2xhc3MgVGVzdEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RFeGNlcHRpb25UcmVlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZXJyb3IsIEV4Y2VwdGlvbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5oZXJyb3IsIHNvY2tldC5lcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5nYWllcnJvciwgc29ja2V0LmVycm9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIHNvY2tldC5lcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE9TRXJyb3IsIEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5oZXJyb3IsIE9TRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZ2FpZXJyb3IsIE9TRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQudGltZW91dCwgT1NFcnJvcikpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnbGludXgnLCAnTGludXggc3BlY2lmaWMgdGVzdCcpCiBjbGFzcyBUZXN0TGludXhBYnN0cmFjdE5hbWVzcGFjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00NDI0LDcgKzQ1OTYsNyBAQAogICAgIGRlZiB0ZXN0TmFtZU92ZXJmbG93KHNlbGYpOgogICAgICAgICBhZGRyZXNzID0gIlx4MDAiICsgImgiICogc2VsZi5VTklYX1BBVEhfTUFYCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzLmJpbmQsIGFkZHJlc3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzLmJpbmQsIGFkZHJlc3MpCiAKICAgICBkZWYgdGVzdFN0ck5hbWUoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBhbiBhYnN0cmFjdCBuYW1lIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcuCkBAIC00NjgxLDcgKzQ4NTMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5fY2xvc2VkKQogICAgICAgICAjIGV4Y2VwdGlvbiBpbnNpZGUgd2l0aCBibG9jawogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5fY2xvc2VkKQogCiAgICAgZGVmIHRlc3RDcmVhdGVDb25uZWN0aW9uQmFzZShzZWxmKToKQEAgLTQ3MDksMTkgKzQ4ODEsNzYgQEAKICAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcykgYXMgc29jazoKICAgICAgICAgICAgIHNvY2suY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5fY2xvc2VkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKIAogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIlNPQ0tfQ0xPRVhFQyIpLAotICAgICAgICAgICAgICAgICAgICAgIlNPQ0tfQ0xPRVhFQyBub3QgZGVmaW5lZCIpCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhmY250bCwgIm1vZHVsZSBmY250bCBub3QgYXZhaWxhYmxlIikKLWNsYXNzIENsb2V4ZWNDb25zdGFudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgSW5oZXJpdGFuY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIlNPQ0tfQ0xPRVhFQyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJTT0NLX0NMT0VYRUMgbm90IGRlZmluZWQiKQogICAgIEBzdXBwb3J0LnJlcXVpcmVzX2xpbnV4X3ZlcnNpb24oMiwgNiwgMjgpCiAgICAgZGVmIHRlc3RfU09DS19DTE9FWEVDKHNlbGYpOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09DS19TVFJFQU0gfCBzb2NrZXQuU09DS19DTE9FWEVDKSBhcyBzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMudHlwZSAmIHNvY2tldC5TT0NLX0NMT0VYRUMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwocywgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmdldF9pbmhlcml0YWJsZSgpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZHVwKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIG5ld3NvY2sgPSBzb2NrLmR1cCgpCisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggbmV3c29jazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3NvY2suZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorCisgICAgZGVmIHRlc3Rfc2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIHNvY2suc2V0X2luaGVyaXRhYmxlKFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIFRydWUpCisKKyAgICAgICAgICAgIHNvY2suc2V0X2luaGVyaXRhYmxlKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X2dldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgICAgICAgICAgIyBjbGVhciBGRF9DTE9FWEVDIGZsYWcKKyAgICAgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpCisgICAgICAgICAgICBmbGFncyAmPSB+ZmNudGwuRkRfQ0xPRVhFQworICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIGZsYWdzKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9zZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNudGwuRkRfQ0xPRVhFQykKKworICAgICAgICAgICAgc29jay5zZXRfaW5oZXJpdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkKKworCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJzb2NrZXRwYWlyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWQgc29ja2V0LnNvY2tldHBhaXIoKSIpCisgICAgZGVmIHRlc3Rfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgczEsIHMyID0gc29ja2V0LnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoczEuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzMi5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMS5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczIuZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiU09DS19OT05CTE9DSyIpLApAQCAtNDg5MCw3ICs1MTE5LDcgQEAKICAgICAgICAgTmV0d29ya0Nvbm5lY3Rpb25BdHRyaWJ1dGVzVGVzdCwKICAgICAgICAgTmV0d29ya0Nvbm5lY3Rpb25CZWhhdmlvdXJUZXN0LAogICAgICAgICBDb250ZXh0TWFuYWdlcnNUZXN0LAotICAgICAgICBDbG9leGVjQ29uc3RhbnRUZXN0LAorICAgICAgICBJbmhlcml0YW5jZVRlc3QsCiAgICAgICAgIE5vbmJsb2NrQ29uc3RhbnRUZXN0CiAgICAgXSkKICAgICB0ZXN0cy5hcHBlbmQoQmFzaWNTb2NrZXRQYWlyVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkKaW5kZXggNTlkOGU1ZC4uMDYxN2IzMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkKQEAgLTIsOCArMiw4IEBACiBUZXN0IHN1aXRlIGZvciBzb2NrZXRzZXJ2ZXIuCiAiIiIKIAoraW1wb3J0IF9pbXAgYXMgaW1wCiBpbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgc2lnbmFsCkBAIC0yOSw3ICsyOSw3IEBACiBIQVZFX1VOSVhfU09DS0VUUyA9IGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpCiByZXF1aXJlc191bml4X3NvY2tldHMgPSB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfVU5JWF9TT0NLRVRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgVW5peCBzb2NrZXRzJykKLUhBVkVfRk9SS0lORyA9IGhhc2F0dHIob3MsICJmb3JrIikgYW5kIG9zLm5hbWUgIT0gIm9zMiIKK0hBVkVfRk9SS0lORyA9IGhhc2F0dHIob3MsICJmb3JrIikKIHJlcXVpcmVzX2ZvcmtpbmcgPSB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfRk9SS0lORywgJ3JlcXVpcmVzIGZvcmtpbmcnKQogCiBkZWYgc2lnbmFsX2FsYXJtKG4pOgpAQCAtODUsNyArODUsNyBAQAogICAgICAgICBmb3IgZm4gaW4gc2VsZi50ZXN0X2ZpbGVzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzWzpdID0gW10KIApAQCAtOTYsMjEgKzk2LDcgQEAKICAgICAgICAgICAgICMgWFhYOiBXZSBuZWVkIGEgd2F5IHRvIHRlbGwgQUZfVU5JWCB0byBwaWNrIGl0cyBvd24gbmFtZQogICAgICAgICAgICAgIyBsaWtlIEFGX0lORVQgcHJvdmlkZXMgcG9ydD09MC4KICAgICAgICAgICAgIGRpciA9IE5vbmUKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICAgICAgZGlyID0gJ1xzb2NrZXQnCiAgICAgICAgICAgICBmbiA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3VuaXhfc29ja2V0LicsIGRpcj1kaXIpCi0gICAgICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgICAgICMgQUZfVU5JWCBzb2NrZXQgbmFtZXMgb24gT1MvMiByZXF1aXJlIGEgc3BlY2lmaWMgcHJlZml4Ci0gICAgICAgICAgICAgICAgIyB3aGljaCBjYW4ndCBpbmNsdWRlIGEgZHJpdmUgbGV0dGVyIGFuZCBtdXN0IGFsc28gdXNlCi0gICAgICAgICAgICAgICAgIyBiYWNrc2xhc2hlcyBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9ycwotICAgICAgICAgICAgICAgIGlmIGZuWzFdID09ICc6JzoKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmblsyOl0KLSAgICAgICAgICAgICAgICBpZiBmblswXSBpbiAob3Muc2VwLCBvcy5hbHRzZXApOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzE6XQotICAgICAgICAgICAgICAgIGlmIG9zLnNlcCA9PSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm4ucmVwbGFjZShvcy5zZXAsIG9zLmFsdHNlcCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuLnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCiAgICAgICAgICAgICBzZWxmLnRlc3RfZmlsZXMuYXBwZW5kKGZuKQogICAgICAgICAgICAgcmV0dXJuIGZuCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0MWU1MAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CkBAIC0wLDAgKzEsMTQ1IEBACisjIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssIHVubG9hZAoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworCitjbGFzcyBTb3VyY2VFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICBiJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJc8CIuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgYidcXFx4ZDBceDlmJworICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg4MgorICAgICAgICBjID0gY29tcGlsZShiIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gJ1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgJ1x4ZjMnKQorCisgICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21waWxlKGIiIyBjb2Rpbmc6IGNwOTMyXG5wcmludCAnXHg5NFx4NGUnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi50ZXh0LCAicHJpbnQgJ1x1NWU3NCdcbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfaXNzdWU0NjI2KHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZSgiIyBjb2Rpbmc9bGF0aW4tMVxuXHUwMGM2ID0gJ1x1MDBjNiciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnXHhjNiddLCAnXHhjNicpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaShkWydhJ10pLCBhc2NpaShkWydiJ10pKQorCisgICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKKyAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAorICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKKworICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKKworICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCisKKyAgICBkZWYgdGVzdF8yMDczMShzZWxmKToKKyAgICAgICAgc3ViID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kaW5nMjA3MzEucHknKV0sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBlcnIgPSBzdWIuY29tbXVuaWNhdGUoKVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5yZXR1cm5jb2RlLCAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInU3ludGF4RXJyb3InLCBlcnIpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZlxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgorICAgICAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6CisgICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKKworICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQorCisgICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGInIyBjb2Rpbmc6IGNwOTQ5XG5hID0gIlx4YWFceGE3IlxuJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sICdcdTMwNDcnKQorCisgICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCisgICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0iY3AxMjUyIikKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgLSotIGNvZGluZzogY3AxMjUyIC0qLVxuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydBIHNob3J0IHN0cmluZ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiJ0EgdmVyeSBsb25nIHN0cmluZyAlcydcbiIgJSAoIlgiICogMTAwMCkpCisKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgImMiKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgIm8iKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQorICAgICAgICBpbnB1dCA9ICIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKKyAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKKyAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9Yy5leGNlcHRpb24uYXJnc1swXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zcHdkLnB5IGIvTGliL3Rlc3QvdGVzdF9zcHdkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYTdhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3Nwd2QucHkKQEAgLTAsMCArMSw2MCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCitzcHdkID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdzcHdkJykKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpIGFuZCBvcy5nZXRldWlkKCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICdyb290IHByaXZpbGVnZXMgcmVxdWlyZWQnKQorY2xhc3MgVGVzdFNwd2RSb290KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2dldHNwYWxsKHNlbGYpOgorICAgICAgICBlbnRyaWVzID0gc3B3ZC5nZXRzcGFsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyaWVzLCBsaXN0KQorICAgICAgICBmb3IgZW50cnkgaW4gZW50cmllczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeSwgc3B3ZC5zdHJ1Y3Rfc3B3ZCkKKworICAgIGRlZiB0ZXN0X2dldHNwbmFtKHNlbGYpOgorICAgICAgICBlbnRyaWVzID0gc3B3ZC5nZXRzcGFsbCgpCisgICAgICAgIGlmIG5vdCBlbnRyaWVzOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnZW1wdHkgc2hhZG93IHBhc3N3b3JkIGRhdGFiYXNlJykKKyAgICAgICAgcmFuZG9tX25hbWUgPSBlbnRyaWVzWzBdLnNwX25hbXAKKyAgICAgICAgZW50cnkgPSBzcHdkLmdldHNwbmFtKHJhbmRvbV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnksIHNwd2Quc3RydWN0X3Nwd2QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfbmFtcCwgcmFuZG9tX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfbmFtcCwgZW50cnlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfbmFtcCwgZW50cnkuc3BfbmFtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnkuc3BfcHdkcCwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX3B3ZHAsIGVudHJ5WzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX3B3ZHAsIGVudHJ5LnNwX3B3ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LnNwX2xzdGNoZywgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX2xzdGNoZywgZW50cnlbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeS5zcF9taW4sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9taW4sIGVudHJ5WzNdKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnkuc3BfbWF4LCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfbWF4LCBlbnRyeVs0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LnNwX3dhcm4sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF93YXJuLCBlbnRyeVs1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LnNwX2luYWN0LCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfaW5hY3QsIGVudHJ5WzZdKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnkuc3BfZXhwaXJlLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfZXhwaXJlLCBlbnRyeVs3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LnNwX2ZsYWcsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9mbGFnLCBlbnRyeVs4XSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgY3g6CisgICAgICAgICAgICBzcHdkLmdldHNwbmFtKCdpbnZhbGlkIHVzZXIgbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGN4LmV4Y2VwdGlvbiksICInZ2V0c3BuYW0oKTogbmFtZSBub3QgZm91bmQnIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzcHdkLmdldHNwbmFtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNwd2QuZ2V0c3BuYW0sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3B3ZC5nZXRzcG5hbSwgcmFuZG9tX25hbWUsIDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJ5dGVzX25hbWUgPSBvcy5mc2VuY29kZShyYW5kb21fbmFtZSkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3B3ZC5nZXRzcG5hbSwgYnl0ZXNfbmFtZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zc2wucHkgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQppbmRleCBlNTJhNzFjLi5kMWNmNWIyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NzbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQpAQCAtNiw2ICs2LDcgQEAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKIGltcG9ydCB0aW1lCitpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBnYwogaW1wb3J0IG9zCiBpbXBvcnQgZXJybm8KQEAgLTE3LDE5ICsxOCwxNSBAQAogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IGZ1bmN0b29scworZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCiBzc2wgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNzbCIpCiAKLVBST1RPQ09MUyA9IFsKLSAgICBzc2wuUFJPVE9DT0xfU1NMdjMsCi0gICAgc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxCi1dCi1pZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6Ci0gICAgUFJPVE9DT0xTLmFwcGVuZChzc2wuUFJPVE9DT0xfU1NMdjIpCi0KK1BST1RPQ09MUyA9IHNvcnRlZChzc2wuX1BST1RPQ09MX05BTUVTKQogSE9TVCA9IHN1cHBvcnQuSE9TVAogCi1kYXRhX2ZpbGUgPSBsYW1iZGEgbmFtZTogb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG5hbWUpCitkZWYgZGF0YV9maWxlKCpuYW1lKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICpuYW1lKQogCiAjIFRoZSBjdXN0b20ga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlcyB1c2VkIGluIHRlc3Rfc3NsIGFyZSBnZW5lcmF0ZWQKICMgdXNpbmcgTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkuCkBAIC00Nyw2ICs0NCwxNyBAQAogS0VZX1BBU1NXT1JEID0gInNvbWVwYXNzIgogQ0FQQVRIID0gZGF0YV9maWxlKCJjYXBhdGgiKQogQllURVNfQ0FQQVRIID0gb3MuZnNlbmNvZGUoQ0FQQVRIKQorQ0FGSUxFX05FVVJPTklPID0gZGF0YV9maWxlKCJjYXBhdGgiLCAiNGUxMjk1YTMuMCIpCitDQUZJTEVfQ0FDRVJUID0gZGF0YV9maWxlKCJjYXBhdGgiLCAiNWVkMzZmOTkuMCIpCisKKworIyBlbXB0eSBDUkwKK0NSTEZJTEUgPSBkYXRhX2ZpbGUoInJldm9jYXRpb24uY3JsIikKKworIyBUd28ga2V5cyBhbmQgY2VydHMgc2lnbmVkIGJ5IHRoZSBzYW1lIENBIChmb3IgU05JIHRlc3RzKQorU0lHTkVEX0NFUlRGSUxFID0gZGF0YV9maWxlKCJrZXljZXJ0My5wZW0iKQorU0lHTkVEX0NFUlRGSUxFMiA9IGRhdGFfZmlsZSgia2V5Y2VydDQucGVtIikKK1NJR05JTkdfQ0EgPSBkYXRhX2ZpbGUoInB5Y2FjZXJ0LnBlbSIpCiAKIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCA9IGRhdGFfZmlsZSgiaHR0cHNfc3ZuX3B5dGhvbl9vcmdfcm9vdC5wZW0iKQogCkBAIC02MCw2ICs2OCw3IEBACiBESEZJTEUgPSBkYXRhX2ZpbGUoImRoNTEyLnBlbSIpCiBCWVRFU19ESEZJTEUgPSBvcy5mc2VuY29kZShESEZJTEUpCiAKKwogZGVmIGhhbmRsZV9lcnJvcihwcmVmaXgpOgogICAgIGV4Y19mb3JtYXQgPSAnICcuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpKQogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTczLDYgKzgyLDIzIEBACiAgICAgIyAwLjkuN2ggb3IgaGlnaGVyCiAgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgNywgOCwgMTUpCiAKK2RlZiBoYXZlX3ZlcmlmeV9mbGFncygpOgorICAgICMgMC45Ljggb3IgaGlnaGVyCisgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgOCwgMCwgMTUpCisKK2RlZiBhc24xdGltZShjZXJ0X3RpbWUpOgorICAgICMgU29tZSB2ZXJzaW9ucyBvZiBPcGVuU1NMIGlnbm9yZSBzZWNvbmRzLCBzZWUgIzE4MjA3CisgICAgIyAwLjkuOC5pCisgICAgaWYgc3NsLl9PUEVOU1NMX0FQSV9WRVJTSU9OID09ICgwLCA5LCA4LCA5LCAxNSk6CisgICAgICAgIGZtdCA9ICIlYiAlZCAlSDolTTolUyAlWSBHTVQiCisgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWUoY2VydF90aW1lLCBmbXQpCisgICAgICAgIGR0ID0gZHQucmVwbGFjZShzZWNvbmQ9MCkKKyAgICAgICAgY2VydF90aW1lID0gZHQuc3RyZnRpbWUoZm10KQorICAgICAgICAjICVkIGFkZHMgbGVhZGluZyB6ZXJvIGJ1dCBBU04xX1RJTUVfcHJpbnQoKSB1c2VzIGxlYWRpbmcgc3BhY2UKKyAgICAgICAgaWYgY2VydF90aW1lWzRdID09ICIwIjoKKyAgICAgICAgICAgIGNlcnRfdGltZSA9IGNlcnRfdGltZVs6NF0gKyAiICIgKyBjZXJ0X3RpbWVbNTpdCisKKyAgICByZXR1cm4gY2VydF90aW1lCiAKICMgSXNzdWUgIzk0MTU6IFVidW50dSBoaWphY2tzIHRoZWlyIE9wZW5TU0wgYW5kIGZvcmNlZnVsbHkgZGlzYWJsZXMgU1NMdjIKIGRlZiBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsKGZ1bmMpOgpAQCAtOTAsMTQgKzExNiwxMiBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBmdW5jCiAKK25lZWRzX3NuaSA9IHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLkhBU19TTkksICJTTkkgc3VwcG9ydCBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisKIAogY2xhc3MgQmFzaWNTb2NrZXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6Ci0gICAgICAgICNzc2wuUFJPVE9DT0xfU1NMdjIKLSAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYyMwotICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjMKLSAgICAgICAgc3NsLlBST1RPQ09MX1RMU3YxCiAgICAgICAgIHNzbC5DRVJUX05PTkUKICAgICAgICAgc3NsLkNFUlRfT1BUSU9OQUwKICAgICAgICAgc3NsLkNFUlRfUkVRVUlSRUQKQEAgLTE3OSw4ICsyMDMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uJyksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdsb2NhbGhvc3QnKSwpKQogICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sICdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEJlZm9yZSddLCAnT2N0ICA4IDIzOjAxOjU2IDIwMTAgR01UJykKKyAgICAgICAgIyBOb3RlIHRoZSBuZXh0IHRocmVlIGFzc2VydHMgd2lsbCBmYWlsIGlmIHRoZSBrZXlzIGFyZSByZWdlbmVyYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sIGFzbjF0aW1lKCdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RCZWZvcmUnXSwgYXNuMXRpbWUoJ09jdCAgOCAyMzowMTo1NiAyMDEwIEdNVCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ3NlcmlhbE51bWJlciddLCAnRDdDNzM4MTkxOUFGQzI0RScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnc3ViamVjdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjb3VudHJ5TmFtZScsICdYWScpLCksCkBAIC0xOTgsNiArMjIzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnRE5TJywgJ3Byb2plY3RzLmRldmVsb3Blci5ub2tpYS5jb20nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHJvamVjdHMuZm9ydW0ubm9raWEuY29tJykpCiAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICMgZXh0cmEgT0NTUCBhbmQgQUlBIGZpZWxkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ09DU1AnXSwgKCdodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY2FJc3N1ZXJzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1haWEudmVyaXNpZ24uY29tL1NWUkludGxHMy5jZXInLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1jcmwudmVyaXNpZ24uY29tL1NWUkludGxHMy5jcmwnLCkpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9jZXJ0X0NWRV8yMDEzXzQyMzgoc2VsZik6CiAgICAgICAgIHAgPSBzc2wuX3NzbC5fdGVzdF9kZWNvZGVfY2VydChOVUxMQllURUNFUlQpCkBAIC0yNTAsMTEgKzI4MSwxMSBAQAogICAgICAgICAjIFNvbWUgc2FuaXR5IGNoZWNrcyBmb2xsb3cKICAgICAgICAgIyA+PSAwLjkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobiwgMHg5MDAwMDApCi0gICAgICAgICMgPCAyLjAKLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG4sIDB4MjAwMDAwMDApCisgICAgICAgICMgPCAzLjAKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG4sIDB4MzAwMDAwMDApCiAgICAgICAgIG1ham9yLCBtaW5vciwgZml4LCBwYXRjaCwgc3RhdHVzID0gdAogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChtYWpvciwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG1ham9yLCAyKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobWFqb3IsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1pbm9yLCAwKQogICAgICAgICBzZWxmLmFzc2VydExlc3MobWlub3IsIDI1NikKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZml4LCAwKQpAQCAtMjYzLDkgKzI5NCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChwYXRjaCwgMjYpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0YXR1cywgMCkKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RhdHVzLCAxNSkKLSAgICAgICAgIyBWZXJzaW9uIHN0cmluZyBhcyByZXR1cm5lZCBieSBPcGVuU1NMLCB0aGUgZm9ybWF0IG1pZ2h0IGNoYW5nZQotICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJPcGVuU1NMIHs6ZH0uezpkfS57OmR9Ii5mb3JtYXQobWFqb3IsIG1pbm9yLCBmaXgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChzLCB0KSkKKyAgICAgICAgIyBWZXJzaW9uIHN0cmluZyBhcyByZXR1cm5lZCBieSB7T3BlbixMaWJyZX1TU0wsIHRoZSBmb3JtYXQgbWlnaHQgY2hhbmdlCisgICAgICAgIGlmICJMaWJyZVNTTCIgaW4gczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkxpYnJlU1NMIHs6ZH0uezpkfSIuZm9ybWF0KG1ham9yLCBtaW5vcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLCB0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIk9wZW5TU0wgezpkfS57OmR9Lns6ZH0iLmZvcm1hdChtYWpvciwgbWlub3IsIGZpeCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLCB0KSkKIAogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X3JlZmN5Y2xlKHNlbGYpOgpAQCAtMjgwLDE1ICszMTUsMTUgQEAKIAogICAgIGRlZiB0ZXN0X3dyYXBwZWRfdW5jb25uZWN0ZWQoc2VsZik6CiAgICAgICAgICMgTWV0aG9kcyBvbiBhbiB1bmNvbm5lY3RlZCBTU0xTb2NrZXQgcHJvcGFnYXRlIHRoZSBvcmlnaW5hbAotICAgICAgICAjIHNvY2tldC5lcnJvciByYWlzZSBieSB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgorICAgICAgICAjIE9TRXJyb3IgcmFpc2UgYnkgdGhlIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdC4KICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCiAgICAgICAgIHdpdGggc3NsLndyYXBfc29ja2V0KHMpIGFzIHNzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2LCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2X2ludG8sIGJ5dGVhcnJheShiJ3gnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb20sIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3Zmcm9tX2ludG8sIGJ5dGVhcnJheShiJ3gnKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3Muc2VuZCwgYid4JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3Muc2VuZHRvLCBiJ3gnLCAoJzAuMC4wLjAnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3YsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2X2ludG8sIGJ5dGVhcnJheShiJ3gnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3Zmcm9tLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdmZyb21faW50bywgYnl0ZWFycmF5KGIneCcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3Muc2VuZCwgYid4JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnNlbmR0bywgYid4JywgKCcwLjAuMC4wJywgMCkpCiAKICAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgogICAgICAgICAjIElzc3VlICM4NTI0OiB3aGVuIGNyZWF0aW5nIGFuIFNTTCBzb2NrZXQsIHRoZSB0aW1lb3V0IG9mIHRoZQpAQCAtMzEzLDE1ICszNDgsMTUgQEAKICAgICAgICAgd2l0aCBzc2wud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSwgY2VydGZpbGU9Q0VSVEZJTEUpIGFzIHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYW4ndCBjb25uZWN0IGluIHNlcnZlci1zaWRlIG1vZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0LCAoSE9TVCwgODA4MCkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1DRVJURklMRSwga2V5ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1XUk9OR0NFUlQsIGtleWZpbGU9V1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQpAQCAtNDkzLDYgKzUyOCwxMTQgQEAKICAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ociwgc3RyKGNtLndhcm5pbmcuYXJnc1swXSkpCiAKKyAgICBkZWYgdGVzdF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhdGhzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhdGhzLCBzc2wuRGVmYXVsdFZlcmlmeVBhdGhzKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9ESVIiXSA9IENBUEFUSAorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9GSUxFIl0gPSBDRVJURklMRQorICAgICAgICAgICAgcGF0aHMgPSBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FmaWxlLCBDRVJURklMRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FwYXRoLCBDQVBBVEgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY2VydGlmaWNhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJDQSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJST09UIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgc3NsLmVudW1fY2VydGlmaWNhdGVzLCAiIikKKworICAgICAgICB0cnVzdF9vaWRzID0gc2V0KCkKKyAgICAgICAgZm9yIHN0b3JlbmFtZSBpbiAoIkNBIiwgIlJPT1QiKToKKyAgICAgICAgICAgIHN0b3JlID0gc3NsLmVudW1fY2VydGlmaWNhdGVzKHN0b3JlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdG9yZSwgbGlzdCkKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIHN0b3JlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbGVtZW50KSwgMykKKyAgICAgICAgICAgICAgICBjZXJ0LCBlbmMsIHRydXN0ID0gZWxlbWVudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjZXJ0LCBieXRlcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVuYywgeyJ4NTA5X2FzbiIsICJwa2NzXzdfYXNuIn0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRydXN0LCAoc2V0LCBib29sKSkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRydXN0LCBzZXQpOgorICAgICAgICAgICAgICAgICAgICB0cnVzdF9vaWRzLnVwZGF0ZSh0cnVzdCkKKworICAgICAgICBzZXJ2ZXJBdXRoID0gIjEuMy42LjEuNS41LjcuMy4xIgorICAgICAgICBzZWxmLmFzc2VydEluKHNlcnZlckF1dGgsIHRydXN0X29pZHMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY3JscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNzbC5lbnVtX2NybHMoIkNBIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLmVudW1fY3JscykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBzc2wuZW51bV9jcmxzLCAiIikKKworICAgICAgICBjcmxzID0gc3NsLmVudW1fY3JscygiQ0EiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY3JscywgbGlzdCkKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gY3JsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVsZW1lbnQpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVsZW1lbnRbMF0sIGJ5dGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtZW50WzFdLCB7Ing1MDlfYXNuIiwgInBrY3NfN19hc24ifSkKKworCisgICAgZGVmIHRlc3RfYXNuMW9iamVjdChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAoMTI5LCAnc2VydmVyQXV0aCcsICdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMScpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0KCcxLjMuNi4xLjUuNS43LjMuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwubmlkLCAxMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLnNob3J0bmFtZSwgJ3NlcnZlckF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5sb25nbmFtZSwgJ1RMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwub2lkLCAnMS4zLjYuMS41LjUuNy4zLjEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdCwgJ3NlcnZlckF1dGgnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAxMDAwMDAiKToKKyAgICAgICAgICAgIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEwMDAwMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2JqID0gc3NsLl9BU04xT2JqZWN0LmZyb21uaWQoaSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iai5uaWQsIGludCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLnNob3J0bmFtZSwgc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmoubG9uZ25hbWUsIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLm9pZCwgKHN0ciwgdHlwZShOb25lKSkpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0LmZyb21uYW1lKCdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5fQVNOMU9iamVjdC5mcm9tbmFtZSgnc2VydmVyQXV0aCcpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJzEuMy42LjEuNS41LjcuMy4xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAidW5rbm93biBvYmplY3QgJ3NlcnZlcmF1dGgnIik6CisgICAgICAgICAgICBzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJ3NlcnZlcmF1dGgnKQorCisgICAgZGVmIHRlc3RfcHVycG9zZV9lbnVtKHNlbGYpOgorICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QoJzEuMy42LjEuNS41LjcuMy4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgsIHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5uaWQsIDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5zaG9ydG5hbWUsICdzZXJ2ZXJBdXRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjEnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdCgnMS4zLjYuMS41LjUuNy4zLjInKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm5pZCwgMTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILnNob3J0bmFtZSwgJ2NsaWVudEF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMicpCisKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9kdGxzKHNlbGYpOgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQpAQCAtNTA5LDExICs2NTIsOCBAQAogCiAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgotICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjMpCi0gICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgZm9yIHByb3RvY29sIGluIFBST1RPQ09MUzoKKyAgICAgICAgICAgIHNzbC5TU0xDb250ZXh0KHByb3RvY29sKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5TU0xDb250ZXh0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuU1NMQ29udGV4dCwgLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5TU0xDb250ZXh0LCA0MikKQEAgLTU1MCw3ICs2OTAsNyBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICBjdHgub3B0aW9ucyA9IDAKIAotICAgIGRlZiB0ZXN0X3ZlcmlmeShzZWxmKToKKyAgICBkZWYgdGVzdF92ZXJpZnlfbW9kZShzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICAjIERlZmF1bHQgdmFsdWUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCkBAIC01NjUsMTMgKzcwNSwzMiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gNDIKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfdmVyaWZ5X2ZsYWdzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgInZlcmlmeV9mbGFncyBuZWVkIE9wZW5TU0wgPiAwLjkuOCIpCisgICAgZGVmIHRlc3RfdmVyaWZ5X2ZsYWdzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICMgZGVmYXVsdCB2YWx1ZSBieSBPcGVuU1NMCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywgc3NsLlZFUklGWV9ERUZBVUxUKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYpCisgICAgICAgIGN0eC52ZXJpZnlfZmxhZ3MgPSBzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0NIQUlOKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9ERUZBVUxUCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywgc3NsLlZFUklGWV9ERUZBVUxUKQorICAgICAgICAjIHN1cHBvcnRzIGFueSB2YWx1ZQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRiB8IHNzbC5WRVJJRllfWDUwOV9TVFJJQ1QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYgfCBzc2wuVkVSSUZZX1g1MDlfU1RSSUNUKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gTm9uZQorCiAgICAgZGVmIHRlc3RfbG9hZF9jZXJ0X2NoYWluKHNlbGYpOgogICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCiAgICAgICAgICMgQ29tYmluZWQga2V5IGFuZCBjZXJ0IGluIGEgc2luZ2xlIGZpbGUKICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSwga2V5ZmlsZT1DRVJURklMRSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF9jZXJ0X2NoYWluLCBrZXlmaWxlPUNFUlRGSUxFKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihXUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CkBAIC02NTUsOCArODE0LDggQEAKICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhCWVRFU19DRVJURklMRSkKICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGU9QllURVNfQ0VSVEZJTEUsIGNhcGF0aD1Ob25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgTm9uZSwgTm9uZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhXUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CkBAIC02NjcsNiArODI2LDY0IEBACiAgICAgICAgICMgSXNzdWUgIzEwOTg5OiBjcmFzaCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IHR5cGUgaXMgaW52YWxpZAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIE5vbmUsIFRydWUpCiAKKyAgICBkZWYgdGVzdF9sb2FkX3ZlcmlmeV9jYWRhdGEoc2VsZik6CisgICAgICAgICMgdGVzdCBjYWRhdGEKKyAgICAgICAgd2l0aCBvcGVuKENBRklMRV9DQUNFUlQpIGFzIGY6CisgICAgICAgICAgICBjYWNlcnRfcGVtID0gZi5yZWFkKCkKKyAgICAgICAgY2FjZXJ0X2RlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChjYWNlcnRfcGVtKQorICAgICAgICB3aXRoIG9wZW4oQ0FGSUxFX05FVVJPTklPKSBhcyBmOgorICAgICAgICAgICAgbmV1cm9uaW9fcGVtID0gZi5yZWFkKCkKKyAgICAgICAgbmV1cm9uaW9fZGVyID0gc3NsLlBFTV9jZXJ0X3RvX0RFUl9jZXJ0KG5ldXJvbmlvX3BlbSkKKworICAgICAgICAjIHRlc3QgUEVNCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDApCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAxKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorICAgICAgICAjIGNlcnQgYWxyZWFkeSBpbiBoYXNoIHRhYmxlCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPW5ldXJvbmlvX3BlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBjb21iaW5lZAorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gIlxuIi5qb2luKChjYWNlcnRfcGVtLCBuZXVyb25pb19wZW0pKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jb21iaW5lZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyB3aXRoIGp1bmsgYXJvdW5kIHRoZSBjZXJ0cworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gWyJoZWFkIiwgY2FjZXJ0X3BlbSwgIm90aGVyIiwgbmV1cm9uaW9fcGVtLCAiYWdhaW4iLAorICAgICAgICAgICAgICAgICAgICBuZXVyb25pb19wZW0sICJ0YWlsIl0KKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9IlxuIi5qb2luKGNvbWJpbmVkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyB0ZXN0IERFUgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9kZXIpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPW5ldXJvbmlvX2RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisgICAgICAgICMgY2VydCBhbHJlYWR5IGluIGhhc2ggdGFibGUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2FjZXJ0X2RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBjb21iaW5lZAorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gYiIiLmpvaW4oKGNhY2VydF9kZXIsIG5ldXJvbmlvX2RlcikpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNvbWJpbmVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKworICAgICAgICAjIGVycm9yIGNhc2VzCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBjYWRhdGE9b2JqZWN0KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJubyBzdGFydCBsaW5lIik6CisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT0iYnJva2VuIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIm5vdCBlbm91Z2ggZGF0YSIpOgorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9YiJicm9rZW4iKQorCisKICAgICBkZWYgdGVzdF9sb2FkX2RoX3BhcmFtcyhzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICBjdHgubG9hZF9kaF9wYXJhbXMoREhGSUxFKQpAQCAtNzE0LDYgKzkzMSwxNzggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9lY2RoX2N1cnZlLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9lY2RoX2N1cnZlLCBiImZvbyIpCiAKKyAgICBAbmVlZHNfc25pCisgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisKKyAgICAgICAgIyBzZXRfc2VydmVybmFtZV9jYWxsYmFjayBleHBlY3RzIGEgY2FsbGFibGUsIG9yIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCBjdHgpCisKKyAgICAgICAgZGVmIGR1bW15Y2FsbGJhY2soc29jaywgc2VydmVybmFtZSwgY3R4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKE5vbmUpCisgICAgICAgIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhkdW1teWNhbGxiYWNrKQorCisgICAgQG5lZWRzX3NuaQorICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBSZWZlcmVuY2UgY3ljbGVzIHRocm91Z2ggdGhlIHNlcnZlcm5hbWUgY2FsbGJhY2sgYXJlIGRldGVjdGVkCisgICAgICAgICMgYW5kIGNsZWFyZWQuCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgZGVmIGR1bW15Y2FsbGJhY2soc29jaywgc2VydmVybmFtZSwgY3R4LCBjeWNsZT1jdHgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soZHVtbXljYWxsYmFjaykKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjdHgpCisgICAgICAgIGRlbCBjdHgsIGR1bW15Y2FsbGJhY2sKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NlcnRfc3RvcmVfc3RhdHMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLAorICAgICAgICAgICAgeyd4NTA5X2NhJzogMCwgJ2NybCc6IDAsICd4NTA5JzogMH0pCisgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDAsICdjcmwnOiAwLCAneDUwOSc6IDB9KQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAwLCAnY3JsJzogMCwgJ3g1MDknOiAxfSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDEsICdjcmwnOiAwLCAneDUwOSc6IDJ9KQorCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgIyBDRVJURklMRSBpcyBub3QgZmxhZ2dlZCBhcyBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IENBOlRSVUUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksIFtdKQorICAgICAgICAjIGJ1dCBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQgaXMgYSBDQSBjZXJ0CisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwKKyAgICAgICAgICAgIFt7J2lzc3Vlcic6ICgoKCdvcmdhbml6YXRpb25OYW1lJywgJ1Jvb3QgQ0EnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbmFsVW5pdE5hbWUnLCAnaHR0cDovL3d3dy5jYWNlcnQub3JnJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ0NBIENlcnQgU2lnbmluZyBBdXRob3JpdHknKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2VtYWlsQWRkcmVzcycsICdzdXBwb3J0QGNhY2VydC5vcmcnKSwpKSwKKyAgICAgICAgICAgICAgJ25vdEFmdGVyJzogYXNuMXRpbWUoJ01hciAyOSAxMjoyOTo0OSAyMDMzIEdNVCcpLAorICAgICAgICAgICAgICAnbm90QmVmb3JlJzogYXNuMXRpbWUoJ01hciAzMCAxMjoyOTo0OSAyMDAzIEdNVCcpLAorICAgICAgICAgICAgICAnc2VyaWFsTnVtYmVyJzogJzAwJywKKyAgICAgICAgICAgICAgJ2NybERpc3RyaWJ1dGlvblBvaW50cyc6ICgnaHR0cHM6Ly93d3cuY2FjZXJ0Lm9yZy9yZXZva2UuY3JsJywpLAorICAgICAgICAgICAgICAnc3ViamVjdCc6ICgoKCdvcmdhbml6YXRpb25OYW1lJywgJ1Jvb3QgQ0EnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuY2FjZXJ0Lm9yZycpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eScpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2VtYWlsQWRkcmVzcycsICdzdXBwb3J0QGNhY2VydC5vcmcnKSwpKSwKKyAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAzfV0pCisKKyAgICAgICAgd2l0aCBvcGVuKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIHBlbSA9IGYucmVhZCgpCisgICAgICAgIGRlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cyhUcnVlKSwgW2Rlcl0pCisKKyAgICBkZWYgdGVzdF9sb2FkX2RlZmF1bHRfY2VydHMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRIKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKCkKKworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cywgJ1NFUlZFUl9BVVRIJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kZWZhdWx0X2NvbnRleHQoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY3R4Lm9wdGlvbnMgJiBnZXRhdHRyKHNzbCwgIk9QX05PX0NPTVBSRVNTSU9OIiwgMCksCisgICAgICAgICAgICBnZXRhdHRyKHNzbCwgIk9QX05PX0NPTVBSRVNTSU9OIiwgMCksCisgICAgICAgICkKKworICAgICAgICB3aXRoIG9wZW4oU0lHTklOR19DQSkgYXMgZjoKKyAgICAgICAgICAgIGNhZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGN0eCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KGNhZmlsZT1TSUdOSU5HX0NBLCBjYXBhdGg9Q0FQQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRhdGE9Y2FkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjdHgub3B0aW9ucyAmIGdldGF0dHIoc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKSwKKyAgICAgICAgICAgIGdldGF0dHIoc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKSwKKyAgICAgICAgKQorCisgICAgICAgIGN0eCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRIKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGN0eC5vcHRpb25zICYgZ2V0YXR0cihzc2wsICJPUF9OT19DT01QUkVTU0lPTiIsIDApLAorICAgICAgICAgICAgZ2V0YXR0cihzc2wsICJPUF9OT19DT01QUkVTU0lPTiIsIDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjdHgub3B0aW9ucyAmIGdldGF0dHIoc3NsLCAiT1BfU0lOR0xFX0RIX1VTRSIsIDApLAorICAgICAgICAgICAgZ2V0YXR0cihzc2wsICJPUF9TSU5HTEVfREhfVVNFIiwgMCksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGN0eC5vcHRpb25zICYgZ2V0YXR0cihzc2wsICJPUF9TSU5HTEVfRUNESF9VU0UiLCAwKSwKKyAgICAgICAgICAgIGdldGF0dHIoc3NsLCAiT1BfU0lOR0xFX0VDREhfVVNFIiwgMCksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X19jcmVhdGVfc3RkbGliX2NvbnRleHQoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGN0eC5jaGVja19ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKworICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3R4LmNoZWNrX2hvc3RuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQocHVycG9zZT1zc2wuUHVycG9zZS5DTElFTlRfQVVUSCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICBkZWYgdGVzdF9jaGVja19ob3N0bmFtZShzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGN0eC5jaGVja19ob3N0bmFtZSkKKworICAgICAgICAjIFJlcXVpcmVzIENFUlRfUkVRVUlSRUQgb3IgQ0VSVF9PUFRJT05BTAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGN0eC5jaGVja19ob3N0bmFtZSkKKyAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3R4LmNoZWNrX2hvc3RuYW1lKQorCisgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX09QVElPTkFMCisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKworICAgICAgICAjIENhbm5vdCBzZXQgQ0VSVF9OT05FIHdpdGggY2hlY2tfaG9zdG5hbWUgZW5hYmxlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfTk9ORQorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBGYWxzZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGN0eC5jaGVja19ob3N0bmFtZSkKKwogCiBjbGFzcyBTU0xFcnJvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtOTE5LDYgKzEzMDgsMjggQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jb25uZWN0X2NhZGF0YShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKENBRklMRV9DQUNFUlQpIGFzIGY6CisgICAgICAgICAgICBwZW0gPSBmLnJlYWQoKQorICAgICAgICBkZXIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQocGVtKQorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1wZW0pCisgICAgICAgICAgICB3aXRoIGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkgYXMgczoKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorCisgICAgICAgICAgICAjIHNhbWUgd2l0aCBERVIKKyAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9ZGVyKQorICAgICAgICAgICAgd2l0aCBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpIGFzIHM6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCkKKwogICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAibnQiLCAiQ2FuJ3QgdXNlIGEgc29ja2V0IGFzIGEgZmlsZSB1bmRlciBXaW5kb3dzIikKICAgICBkZWYgdGVzdF9tYWtlZmlsZV9jbG9zZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNTIzODogY3JlYXRpbmcgYSBmaWxlLWxpa2Ugb2JqZWN0IHdpdGggbWFrZWZpbGUoKSBzaG91bGRuJ3QKQEAgLTEwMzYsNiArMTQ0NywzNiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2dldF9jYV9jZXJ0c19jYXBhdGgoc2VsZik6CisgICAgICAgICMgY2FwYXRoIGNlcnRzIGFyZSBsb2FkZWQgb24gcmVxdWVzdAorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhcGF0aD1DQVBBVEgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwgW10pCisgICAgICAgICAgICBzID0gY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKQorICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjdHguZ2V0X2NhX2NlcnRzKCkpLCAxKQorCisgICAgQG5lZWRzX3NuaQorICAgIGRlZiB0ZXN0X2NvbnRleHRfc2V0Z2V0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGNvbnRleHQgb2YgYSBjb25uZWN0ZWQgc29ja2V0IGNhbiBiZSByZXBsYWNlZC4KKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIGN0eDEgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBjdHgyID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgd2l0aCBjdHgxLndyYXBfc29ja2V0KHMpIGFzIHNzOgorICAgICAgICAgICAgICAgIHNzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzcy5jb250ZXh0LCBjdHgxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuX3NzbG9iai5jb250ZXh0LCBjdHgxKQorICAgICAgICAgICAgICAgIHNzLmNvbnRleHQgPSBjdHgyCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzcy5jb250ZXh0LCBjdHgyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuX3NzbG9iai5jb250ZXh0LCBjdHgyKQogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwpAQCAtMTE2Myw3ICsxNjA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIHNlcnZlcjogcmVhZCAlciAoJXMpLCBzZW5kaW5nIGJhY2sgJXIgKCVzKS4uLlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG1zZywgY3R5cGUsIG1zZy5sb3dlcigpLCBjdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShtc2cubG93ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5jaGF0dHk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2Vycm9yKCJUZXN0IHNlcnZlciBmYWlsdXJlOlxuIikKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQpAQCAtMTI3Myw3ICsxNzE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xMzc3LDE5ICsxODE4LDE5IEBACiAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcblNTTEVycm9yIGlzICVzXG4iICUgeC5hcmdzWzFdKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB4OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuc29ja2V0LmVycm9yIGlzICVzXG4iICUgeC5hcmdzWzFdKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgeDoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5PU0Vycm9yIGlzICVzXG4iICUgeC5hcmdzWzFdKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICBpZiB4LmVycm5vICE9IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxJT0Vycm9yIGlzICVzXG4iICUgc3RyKHgpKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcT1NFcnJvciBpcyAlc1xuIiAlIHN0cih4KSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlVzZSBvZiBpbnZhbGlkIGNlcnQgc2hvdWxkIGhhdmUgZmFpbGVkISIpCiAKICAgICBkZWYgc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwgaW5kYXRhPWIiRk9PXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UsIHNuaV9uYW1lPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgTGF1bmNoIGEgc2VydmVyLCBjb25uZWN0IGEgY2xpZW50IHRvIGl0IGFuZCB0cnkgdmFyaW91cyByZWFkcwogICAgICAgICBhbmQgd3JpdGVzLgpAQCAtMTM5OSw3ICsxODQwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1jaGF0dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKQogICAgICAgICB3aXRoIHNlcnZlcjoKLSAgICAgICAgICAgIHdpdGggY2xpZW50X2NvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgd2l0aCBjbGllbnRfY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zbmlfbmFtZSkgYXMgczoKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIFtpbmRhdGEsIGJ5dGVhcnJheShpbmRhdGEpLCBtZW1vcnl2aWV3KGluZGF0YSldOgogICAgICAgICAgICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgpAQCAtMTQyMyw2ICsxODY1LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0cy51cGRhdGUoewogICAgICAgICAgICAgICAgICAgICAnY29tcHJlc3Npb24nOiBzLmNvbXByZXNzaW9uKCksCiAgICAgICAgICAgICAgICAgICAgICdjaXBoZXInOiBzLmNpcGhlcigpLAorICAgICAgICAgICAgICAgICAgICAncGVlcmNlcnQnOiBzLmdldHBlZXJjZXJ0KCksCiAgICAgICAgICAgICAgICAgICAgICdjbGllbnRfbnBuX3Byb3RvY29sJzogcy5zZWxlY3RlZF9ucG5fcHJvdG9jb2woKQogICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCkBAIC0xNDQ4LDEyICsxODkxLDE1IEBACiAgICAgICAgIGNsaWVudF9jb250ZXh0Lm9wdGlvbnMgfD0gY2xpZW50X29wdGlvbnMKICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzZXJ2ZXJfcHJvdG9jb2wpCiAgICAgICAgIHNlcnZlcl9jb250ZXh0Lm9wdGlvbnMgfD0gc2VydmVyX29wdGlvbnMKKworICAgICAgICAjIE5PVEU6IHdlIG11c3QgZW5hYmxlICJBTEwiIGNpcGhlcnMgb24gdGhlIGNsaWVudCwgb3RoZXJ3aXNlIGFuCisgICAgICAgICMgU1NMdjIzIGNsaWVudCB3aWxsIHNlbmQgYW4gU1NMdjMgaGVsbG8gKHJhdGhlciB0aGFuIFNTTHYyKQorICAgICAgICAjIHN0YXJ0aW5nIGZyb20gT3BlblNTTCAxLjAuMCAoc2VlIGlzc3VlICM4MzIyKS4KKyAgICAgICAgaWYgY2xpZW50X2NvbnRleHQucHJvdG9jb2wgPT0gc3NsLlBST1RPQ09MX1NTTHYyMzoKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LnNldF9jaXBoZXJzKCJBTEwiKQorCiAgICAgICAgIGZvciBjdHggaW4gKGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCk6CiAgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBjZXJ0c3JlcXMKLSAgICAgICAgICAgICMgTk9URTogd2UgbXVzdCBlbmFibGUgIkFMTCIgY2lwaGVycywgb3RoZXJ3aXNlIGFuIFNTTHYyMyBjbGllbnQKLSAgICAgICAgICAgICMgd2lsbCBzZW5kIGFuIFNTTHYzIGhlbGxvIChyYXRoZXIgdGhhbiBTU0x2Mikgc3RhcnRpbmcgZnJvbQotICAgICAgICAgICAgIyBPcGVuU1NMIDEuMC4wIChzZWUgaXNzdWUgIzgzMjIpLgotICAgICAgICAgICAgY3R4LnNldF9jaXBoZXJzKCJBTEwiKQogICAgICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKICAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCiAgICAgICAgIHRyeToKQEAgLTE0NjQsNyArMTkxMCw3IEBACiAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CiAgICAgICAgICAgICBpZiBleHBlY3Rfc3VjY2VzczoKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBleHBlY3Rfc3VjY2VzcyBvciBlLmVycm5vICE9IGVycm5vLkVDT05OUkVTRVQ6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZWxzZToKQEAgLTE0ODMsMTAgKzE5MjksMTEgQEAKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCiAgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gUFJPVE9DT0xTOgotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChwcm90b2NvbCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKLSAgICAgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY29udGV4dCwgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90b2NvbD1zc2wuX1BST1RPQ09MX05BTUVTW3Byb3RvY29sXSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChwcm90b2NvbCkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9wYXJhbXNfdGVzdChjb250ZXh0LCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9VHJ1ZSkKIAogICAgICAgICBkZWYgdGVzdF9nZXRwZWVyY2VydChzZWxmKToKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTE0OTcsOCArMTk0NCwxNCBAQAogICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjaGF0dHk9RmFsc2UpCiAgICAgICAgICAgICB3aXRoIHNlcnZlcjoKLSAgICAgICAgICAgICAgICBzID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICAgICAgcyA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlKQogICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICMgZ2V0cGVlcmNlcnQoKSByYWlzZSBWYWx1ZUVycm9yIHdoaWxlIHRoZSBoYW5kc2hha2UgaXNuJ3QKKyAgICAgICAgICAgICAgICAjIGRvbmUuCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgcy5kb19oYW5kc2hha2UoKQogICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCwgIkNhbid0IGdldCBwZWVyIGNlcnRpZmljYXRlLiIpCiAgICAgICAgICAgICAgICAgY2lwaGVyID0gcy5jaXBoZXIoKQpAQCAtMTUyMCw2ICsxOTczLDg3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGJlZm9yZSwgYWZ0ZXIpCiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGF2ZV92ZXJpZnlfZmxhZ3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyaWZ5X2ZsYWdzIG5lZWQgT3BlblNTTCA+IDAuOS44IikKKyAgICAgICAgZGVmIHRlc3RfY3JsX2NoZWNrKHNlbGYpOgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKworICAgICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTSUdOSU5HX0NBKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZXh0LnZlcmlmeV9mbGFncywgc3NsLlZFUklGWV9ERUZBVUxUKQorCisgICAgICAgICAgICAjIFZFUklGWV9ERUZBVUxUIHNob3VsZCBwYXNzCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCwgIkNhbid0IGdldCBwZWVyIGNlcnRpZmljYXRlLiIpCisKKyAgICAgICAgICAgICMgVkVSSUZZX0NSTF9DSEVDS19MRUFGIHdpdGhvdXQgYSBsb2FkZWQgQ1JMIGZpbGUgZmFpbHMKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X2ZsYWdzIHw9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYKKworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkIik6CisgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKworICAgICAgICAgICAgIyBub3cgbG9hZCBhIENSTCBmaWxlLiBUaGUgQ1JMIGZpbGUgaXMgc2lnbmVkIGJ5IHRoZSBDQS4KKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENSTEZJTEUpCisKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X2NoZWNrX2hvc3RuYW1lKHNlbGYpOgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKworICAgICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU0lHTklOR19DQSkKKworICAgICAgICAgICAgIyBjb3JyZWN0IGhvc3RuYW1lIHNob3VsZCB2ZXJpZnkKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ibG9jYWxob3N0IikgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQorCisgICAgICAgICAgICAjIGluY29ycmVjdCBob3N0bmFtZSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9ImludmFsaWQiKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLkNlcnRpZmljYXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgJ2ludmFsaWQnIGRvZXNuJ3QgbWF0Y2ggJ2xvY2FsaG9zdCciKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorCisgICAgICAgICAgICAjIG1pc3Npbmcgc2VydmVyX2hvc3RuYW1lIGFyZyBzaG91bGQgY2F1c2UgYW4gZXhjZXB0aW9uLCB0b28KKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrX2hvc3RuYW1lIHJlcXVpcmVzIHNlcnZlcl9ob3N0bmFtZSIpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cmFwX3NvY2tldChzKQorCiAgICAgICAgIGRlZiB0ZXN0X2VtcHR5X2NlcnQoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYW4gZW1wdHkgY2VydCBmaWxlIiIiCiAgICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKQEAgLTE1MzgsNyArMjA3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFka2V5LnBlbSIpKQogCiAgICAgICAgIGRlZiB0ZXN0X3J1ZGVfc2h1dGRvd24oc2VsZik6Ci0gICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBJT0Vycm9yCisgICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBPU0Vycm9yCiAgICAgICAgICAgICBpbiB0aGUgY2xpZW50IHdoZW4gYXR0ZW1wdGluZyBoYW5kc2hha2UuCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKQEAgLTE1NjYsNyArMjEwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUud2FpdCgpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrID0gc3NsLndyYXBfc29ja2V0KGMpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnY29ubmVjdGluZyB0byBjbG9zZWQgU1NMIHNvY2tldCBzaG91bGQgaGF2ZSBmYWlsZWQnKQpAQCAtMTYwOSw3ICsyMTQzLDcgQEAKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgeDoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMgb24gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuU1NMICgwLjkuN2wsIGZvciBpbnN0YW5jZSkKICAgICAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKQEAgLTE2NjksNiArMjIwMyw0OSBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3NsLCAiUFJPVE9DT0xfVExTdjFfMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVExTIHZlcnNpb24gMS4xIG5vdCBzdXBwb3J0ZWQuIikKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjFfMShzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MS4xIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMuCisgICAgICAgICAgICAgICBUZXN0aW5nIGFnYWluc3Qgb2xkZXIgVExTIHZlcnNpb25zLiIiIgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIFRydWUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjFfMSkKKworICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorCisKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzc2wsICJQUk9UT0NPTF9UTFN2MV8yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUTFMgdmVyc2lvbiAxLjIgbm90IHN1cHBvcnRlZC4iKQorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MV8yKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxLjIgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgIFRlc3RpbmcgYWdhaW5zdCBvbGRlciBUTFMgdmVyc2lvbnMuIiIiCisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjN8c3NsLk9QX05PX1NTTHYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19TU0x2M3xzc2wuT1BfTk9fU1NMdjIsKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxXzIpCisKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgRmFsc2UpCisKICAgICAgICAgZGVmIHRlc3Rfc3RhcnR0bHMoc2VsZik6CiAgICAgICAgICAgICAiIiJTd2l0Y2hpbmcgZnJvbSBjbGVhciB0ZXh0IHRvIGVuY3J5cHRlZCBhbmQgYmFjayBhZ2Fpbi4iIiIKICAgICAgICAgICAgIG1zZ3MgPSAoYiJtc2cgMSIsIGIiTVNHIDIiLCBiIlNUQVJUVExTIiwgYiJNU0cgMyIsIGIibXNnIDQiLCBiIkVORFRMUyIsIGIibXNnIDUiLCBiIm1zZyA2IikKQEAgLTE3MjksNyArMjMwNiw3IEBACiAKICAgICAgICAgZGVmIHRlc3Rfc29ja2V0c2VydmVyKHNlbGYpOgogICAgICAgICAgICAgIiIiVXNpbmcgYSBTb2NrZXRTZXJ2ZXIgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgU1NMIGNvbm5lY3Rpb25zLiIiIgotICAgICAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1DRVJURklMRSkKICAgICAgICAgICAgICMgdHJ5IHRvIGNvbm5lY3QKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCkBAIC0xOTg1LDYgKzI1NjIsMjAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZW1vdGUsIHNzbC5TU0xTb2NrZXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlZXIsIGNsaWVudF9hZGRyKQogCisgICAgICAgIGRlZiB0ZXN0X2dldHBlZXJjZXJ0X2Vub3Rjb25uKHNlbGYpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHNvY2suZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9UQ09OTikKKworICAgICAgICBkZWYgdGVzdF9kb19oYW5kc2hha2VfZW5vdGNvbm4oc2VsZik6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgc29jay5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9UQ09OTikKKwogICAgICAgICBkZWYgdGVzdF9kZWZhdWx0X2NpcGhlcnMoc2VsZik6CiAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgICAgICAgICAgIHRyeToKQEAgLTE5OTYsMTAgKzI1ODcsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UpIGFzIHNlcnZlcjoKICAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgotICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChPU0Vycm9yLCBzc2wuU1NMRXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKICAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibm8gc2hhcmVkIGNpcGhlciIsIHN0cihzZXJ2ZXIuY29ubl9lcnJvcnNbMF0pKQogCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHNzbC5IQVNfRUNESCwgInRlc3QgcmVxdWlyZXMgRUNESC1lbmFibGVkIE9wZW5TU0wiKQorICAgICAgICBkZWYgdGVzdF9kZWZhdWx0X2VjZGhfY3VydmUoc2VsZik6CisgICAgICAgICAgICAjIElzc3VlICMyMTAxNTogZWxsaXB0aWMgY3VydmUtYmFzZWQgRGlmZmllIEhlbGxtYW4ga2V5IGV4Y2hhbmdlCisgICAgICAgICAgICAjIHNob3VsZCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gU1NMIGNvbnRleHRzLgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgICAgICMgUHJpb3IgdG8gT3BlblNTTCAxLjAuMCwgRUNESCBjaXBoZXJzIGhhdmUgdG8gYmUgZW5hYmxlZAorICAgICAgICAgICAgIyBleHBsaWNpdGx5IHVzaW5nIHRoZSAnRUNDZHJhZnQnIGNpcGhlciBhbGlhcy4gIE90aGVyd2lzZSwKKyAgICAgICAgICAgICMgb3VyIGRlZmF1bHQgY2lwaGVyIGxpc3Qgc2hvdWxkIHByZWZlciBFQ0RILWJhc2VkIGNpcGhlcnMKKyAgICAgICAgICAgICMgYXV0b21hdGljYWxseS4KKyAgICAgICAgICAgIGlmIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA8ICgxLCAwLCAwKToKKyAgICAgICAgICAgICAgICBjb250ZXh0LnNldF9jaXBoZXJzKCJFQ0NkcmFmdDpFQ0RIIikKKyAgICAgICAgICAgIHdpdGggVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCkgYXMgc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJFQ0RIIiwgcy5jaXBoZXIoKVswXSkKKwogICAgICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcygidGxzLXVuaXF1ZSIgaW4gc3NsLkNIQU5ORUxfQklORElOR19UWVBFUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIid0bHMtdW5pcXVlJyBjaGFubmVsIGJpbmRpbmcgbm90IGF2YWlsYWJsZSIpCiAgICAgICAgIGRlZiB0ZXN0X3Rsc191bmlxdWVfY2hhbm5lbF9iaW5kaW5nKHNlbGYpOgpAQCAtMjEyOSw2ICsyNzM3LDEyNCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdHNbJ3NlcnZlcl9ucG5fcHJvdG9jb2xzJ10pIGVsc2UgJ25vdGhpbmcnCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfcmVzdWx0LCBleHBlY3RlZCwgbXNnICUgKHNlcnZlcl9yZXN1bHQsICJzZXJ2ZXIiKSkKIAorICAgICAgICBkZWYgc25pX2NvbnRleHRzKHNlbGYpOgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFKQorICAgICAgICAgICAgb3RoZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIG90aGVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRTIpCisgICAgICAgICAgICBjbGllbnRfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTSUdOSU5HX0NBKQorICAgICAgICAgICAgcmV0dXJuIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dAorCisgICAgICAgIGRlZiBjaGVja19jb21tb25fbmFtZShzZWxmLCBzdGF0cywgbmFtZSk6CisgICAgICAgICAgICBjZXJ0ID0gc3RhdHNbJ3BlZXJjZXJ0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCgnY29tbW9uTmFtZScsIG5hbWUpLCksIGNlcnRbJ3N1YmplY3QnXSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIHNlcnZlcm5hbWVfY2Ioc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIGNhbGxzLmFwcGVuZCgoc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCkpCisgICAgICAgICAgICAgICAgaWYgc2VydmVyX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrLmNvbnRleHQgPSBvdGhlcl9jb250ZXh0CisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJuYW1lX2NiKQorCisgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgIyBUaGUgaG9zdG5hbWUgd2FzIGZldGNoZWQgcHJvcGVybHksIGFuZCB0aGUgY2VydGlmaWNhdGUgd2FzCisgICAgICAgICAgICAjIGNoYW5nZWQgZm9yIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgWygic3VwZXJtZXNzYWdlIiwgc2VydmVyX2NvbnRleHQpXSkKKyAgICAgICAgICAgICMgQ0VSVEZJTEU0IHdhcyBzZWxlY3RlZAorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2Zha2Vob3N0bmFtZScpCisKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgICMgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHNlcnZlcl9uYW1lPU5vbmUKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFsoTm9uZSwgc2VydmVyX2NvbnRleHQpXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29tbW9uX25hbWUoc3RhdHMsICdsb2NhbGhvc3QnKQorCisgICAgICAgICAgICAjIENoZWNrIGRpc2FibGluZyB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKE5vbmUpCisKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J25vdGZ1bm55JykKKyAgICAgICAgICAgICMgQ2VydGlmaWNhdGUgZGlkbid0IGNoYW5nZQorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2xvY2FsaG9zdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbXSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19hbGVydChzZWxmKToKKyAgICAgICAgICAgICMgUmV0dXJuaW5nIGEgVExTIGFsZXJ0IGlzIHJlZmxlY3RlZCB0byB0aGUgY29ubmVjdGluZyBjbGllbnQKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3JldHVybmluZ19hbGVydChzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNzbC5BTEVSVF9ERVNDUklQVElPTl9BQ0NFU1NfREVOSUVECisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9yZXR1cm5pbmdfYWxlcnQpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnVExTVjFfQUxFUlRfQUNDRVNTX0RFTklFRCcpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfcmFpc2luZyhzZWxmKToKKyAgICAgICAgICAgICMgUmFpc2luZyBmYWlscyB0aGUgY29ubmVjdGlvbiB3aXRoIGEgVExTIGhhbmRzaGFrZSBmYWlsdXJlIGFsZXJ0LgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgY2JfcmFpc2luZyhzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9yYWlzaW5nKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1NTTFYzX0FMRVJUX0hBTkRTSEFLRV9GQUlMVVJFJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgc3RkZXJyLmdldHZhbHVlKCkpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfd3JvbmdfcmV0dXJuX3R5cGUoc2VsZik6CisgICAgICAgICAgICAjIFJldHVybmluZyB0aGUgd3JvbmcgcmV0dXJuIHR5cGUgdGVybWluYXRlcyB0aGUgVExTIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICMgd2l0aCBhbiBpbnRlcm5hbCBlcnJvciBhbGVydC4KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3dyb25nX3JldHVybl90eXBlKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3dyb25nX3JldHVybl90eXBlKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1RMU1YxX0FMRVJUX0lOVEVSTkFMX0VSUk9SJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlR5cGVFcnJvciIsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWRfd3JpdGVfYWZ0ZXJfY2xvc2VfcmFpc2VzX3ZhbHVlcnJvcihzZWxmKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2hhdHR5PUZhbHNlKQorCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBzID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlYWQsIDEwMjQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy53cml0ZSwgYidoZWxsbycpCisKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPUZhbHNlKToKICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC0yMTQ4LDEwICsyODc0LDE2IEBACiAgICAgICAgICAgICAoc3NsLk9QRU5TU0xfVkVSU0lPTiwgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPKSkKICAgICAgICAgcHJpbnQoIiAgICAgICAgICB1bmRlciAlcyIgJSBwbGF0KQogICAgICAgICBwcmludCgiICAgICAgICAgIEhBU19TTkkgPSAlciIgJSBzc2wuSEFTX1NOSSkKKyAgICAgICAgcHJpbnQoIiAgICAgICAgICBPUF9BTEwgPSAweCU4eCIgJSBzc2wuT1BfQUxMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCgiICAgICAgICAgIE9QX05PX1RMU3YxXzEgPSAweCU4eCIgJSBzc2wuT1BfTk9fVExTdjFfMSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcwogCiAgICAgZm9yIGZpbGVuYW1lIGluIFsKICAgICAgICAgQ0VSVEZJTEUsIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCwgQllURVNfQ0VSVEZJTEUsCiAgICAgICAgIE9OTFlDRVJULCBPTkxZS0VZLCBCWVRFU19PTkxZQ0VSVCwgQllURVNfT05MWUtFWSwKKyAgICAgICAgU0lHTkVEX0NFUlRGSUxFLCBTSUdORURfQ0VSVEZJTEUyLCBTSUdOSU5HX0NBLAogICAgICAgICBCQURDRVJULCBCQURLRVksIEVNUFRZQ0VSVF06CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CiAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgY2VydGlmaWNhdGUgZmlsZSAlciIgJSBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQppbmRleCBlYjNmMDdhLi5hZjZjZWQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0YXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CkBAIC0xLDkgKzEsMTMgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9mcmVzaF9tb2R1bGUKLWltcG9ydCBzdGF0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBpbXBvcnRfZnJlc2hfbW9kdWxlCiAKLWNsYXNzIFRlc3RGaWxlbW9kZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjX3N0YXQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdzdGF0JywgZnJlc2g9Wydfc3RhdCddKQorcHlfc3RhdCA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3N0YXQnLCBibG9ja2VkPVsnX3N0YXQnXSkKKworY2xhc3MgVGVzdEZpbGVtb2RlOgorICAgIHN0YXRtb2QgPSBOb25lCisKICAgICBmaWxlX2ZsYWdzID0geydTRl9BUFBFTkQnLCAnU0ZfQVJDSElWRUQnLCAnU0ZfSU1NVVRBQkxFJywgJ1NGX05PVU5MSU5LJywKICAgICAgICAgICAgICAgICAgICdTRl9TTkFQU0hPVCcsICdVRl9BUFBFTkQnLCAnVUZfQ09NUFJFU1NFRCcsICdVRl9ISURERU4nLAogICAgICAgICAgICAgICAgICAgJ1VGX0lNTVVUQUJMRScsICdVRl9OT0RVTVAnLCAnVUZfTk9VTkxJTksnLCAnVUZfT1BBUVVFJ30KQEAgLTYzLDE3ICs2NywxNyBAQAogICAgICAgICAgICAgc3RfbW9kZSA9IG9zLmxzdGF0KGZuYW1lKS5zdF9tb2RlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdF9tb2RlID0gb3Muc3RhdChmbmFtZSkuc3RfbW9kZQotICAgICAgICBtb2Rlc3RyID0gc3RhdC5maWxlbW9kZShzdF9tb2RlKQorICAgICAgICBtb2Rlc3RyID0gc2VsZi5zdGF0bW9kLmZpbGVtb2RlKHN0X21vZGUpCiAgICAgICAgIHJldHVybiBzdF9tb2RlLCBtb2Rlc3RyCiAKICAgICBkZWYgYXNzZXJ0U19JUyhzZWxmLCBuYW1lLCBtb2RlKToKICAgICAgICAgIyB0ZXN0IGZvcm1hdCwgbHN0cmlwIGlzIGZvciBTX0lGSUZPCi0gICAgICAgIGZtdCA9IGdldGF0dHIoc3RhdCwgIlNfSUYiICsgbmFtZS5sc3RyaXAoIkYiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSUZNVChtb2RlKSwgZm10KQorICAgICAgICBmbXQgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwgIlNfSUYiICsgbmFtZS5sc3RyaXAoIkYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JRk1UKG1vZGUpLCBmbXQpCiAgICAgICAgICMgdGVzdCB0aGF0IGp1c3Qgb25lIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgICAgICB0ZXN0bmFtZSA9ICJTX0lTIiArIG5hbWUKICAgICAgICAgZm9yIGZ1bmNuYW1lIGluIHNlbGYuZm9ybWF0X2Z1bmNzOgotICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoc3RhdCwgZnVuY25hbWUsIE5vbmUpCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGZ1bmNuYW1lLCBOb25lKQogICAgICAgICAgICAgaWYgZnVuYyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGlmIGZ1bmNuYW1lID09IHRlc3RuYW1lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGZ1bmNuYW1lKQpAQCAtOTEsMzUgKzk1LDM1IEBACiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctcnd4LS0tLS0tJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJXWFUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JUldYVSkKIAogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzA3MCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy0tLS1yd3gtLS0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUldYRykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lSV1hHKQogCiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvMDA3KQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLS0tLS0tLXJ3eCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSV1hPKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSVJXWE8pCiAKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG80NDQpCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctci0tci0tci0tJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLCAwbzQ0NCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksIDBvNDQ0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzcwMCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0cls6M10sICctcncnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSUZNVChzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lGUkVHKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JRk1UKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JRlJFRykKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgb3MubWtkaXIoVEVTVEZOKQpAQCAtMTY1LDI1ICsxNjksMzQgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnN0YXRfc3RydWN0Lml0ZW1zKCk6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbW9kdmFsdWUsIGtleSkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5wZXJtaXNzaW9uX2JpdHMuaXRlbXMoKToKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBtb2R2YWx1ZSwga2V5KQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZmlsZV9mbGFnczoKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdmFsdWUsIGludCkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHZhbHVlLCBpbnQpCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5mb3JtYXRfZnVuY3M6Ci0gICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShmdW5jKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygwKSwgMCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RGaWxlbW9kZSkKK2NsYXNzIFRlc3RGaWxlbW9kZUNTdGF0KFRlc3RGaWxlbW9kZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXRtb2QgPSBjX3N0YXQKKworICAgIGZvcm1hdHMgPSBUZXN0RmlsZW1vZGUuZm9ybWF0cyB8IHsnU19JRkRPT1InLCAnU19JRlBPUlQnLCAnU19JRldIVCd9CisgICAgZm9ybWF0X2Z1bmNzID0gVGVzdEZpbGVtb2RlLmZvcm1hdF9mdW5jcyB8IHsnU19JU0RPT1InLCAnU19JU1BPUlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NfSVNXSFQnfQorCisKK2NsYXNzIFRlc3RGaWxlbW9kZVB5U3RhdChUZXN0RmlsZW1vZGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGF0bW9kID0gcHlfc3RhdAorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjVjOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5CkBAIC0wLDAgKzEsMTU3NCBAQAorIiIiVGVzdCBzdWl0ZSBmb3Igc3RhdGlzdGljcyBtb2R1bGUsIGluY2x1ZGluZyBoZWxwZXIgTnVtZXJpY1Rlc3RDYXNlIGFuZAorYXBwcm94X2VxdWFsIGZ1bmN0aW9uLgorCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZGVjaW1hbAoraW1wb3J0IGRvY3Rlc3QKK2ltcG9ydCBtYXRoCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKK2Zyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbgorCisKKyMgTW9kdWxlIHRvIGJlIHRlc3RlZC4KK2ltcG9ydCBzdGF0aXN0aWNzCisKKworIyA9PT0gSGVscGVyIGZ1bmN0aW9ucyBhbmQgY2xhc3MgPT09CisKK2RlZiBfY2FsY19lcnJvcnMoYWN0dWFsLCBleHBlY3RlZCk6CisgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3JzIGJldHdlZW4gdHdvIG51bWJlcnMuCisKKyAgICA+Pj4gX2NhbGNfZXJyb3JzKDEwMCwgNzUpCisgICAgKDI1LCAwLjI1KQorICAgID4+PiBfY2FsY19lcnJvcnMoMTAwLCAxMDApCisgICAgKDAsIDAuMCkKKworICAgIFJldHVybnMgdGhlIChhYnNvbHV0ZSBlcnJvciwgcmVsYXRpdmUgZXJyb3IpIGJldHdlZW4gdGhlIHR3byBhcmd1bWVudHMuCisgICAgIiIiCisgICAgYmFzZSA9IG1heChhYnMoYWN0dWFsKSwgYWJzKGV4cGVjdGVkKSkKKyAgICBhYnNfZXJyID0gYWJzKGFjdHVhbCAtIGV4cGVjdGVkKQorICAgIHJlbF9lcnIgPSBhYnNfZXJyL2Jhc2UgaWYgYmFzZSBlbHNlIGZsb2F0KCdpbmYnKQorICAgIHJldHVybiAoYWJzX2VyciwgcmVsX2VycikKKworCitkZWYgYXBwcm94X2VxdWFsKHgsIHksIHRvbD0xZS0xMiwgcmVsPTFlLTcpOgorICAgICIiImFwcHJveF9lcXVhbCh4LCB5IFssIHRvbCBbLCByZWxdXSkgPT4gVHJ1ZXxGYWxzZQorCisgICAgUmV0dXJuIFRydWUgaWYgbnVtYmVycyB4IGFuZCB5IGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLCB0byB3aXRoaW4gc29tZQorICAgIG1hcmdpbiBvZiBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4gTnVtYmVycyB3aGljaCBjb21wYXJlIGVxdWFsCisgICAgd2lsbCBhbHNvIGNvbXBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIHggaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byB5IGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcyBsZXNzIHRoYW4KKyAgICBhbiBhYnNvbHV0ZSBlcnJvciB0b2wgb3IgYSByZWxhdGl2ZSBlcnJvciByZWwsIHdoaWNoZXZlciBpcyBiaWdnZXIuCisKKyAgICBJZiBnaXZlbiwgYm90aCB0b2wgYW5kIHJlbCBtdXN0IGJlIGZpbml0ZSwgbm9uLW5lZ2F0aXZlIG51bWJlcnMuIElmIG5vdAorICAgIGdpdmVuLCBkZWZhdWx0IHZhbHVlcyBhcmUgdG9sPTFlLTEyIGFuZCByZWw9MWUtNy4KKworICAgID4+PiBhcHByb3hfZXF1YWwoMS4yNTg5LCAxLjI1ODcsIHRvbD0wLjAwMDMsIHJlbD0wKQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEuMjU4OSwgMS4yNTg3LCB0b2w9MC4wMDAxLCByZWw9MCkKKyAgICBGYWxzZQorCisgICAgQWJzb2x1dGUgZXJyb3IgaXMgZGVmaW5lZCBhcyBhYnMoeC15KTsgaWYgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAgICB0b2wsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIFJlbGF0aXZlIGVycm9yIGlzIGRlZmluZWQgYXMgYWJzKCh4LXkpL3gpIG9yIGFicygoeC15KS95KSwgd2hpY2hldmVyIGlzCisgICAgc21hbGxlciwgcHJvdmlkZWQgeCBvciB5IGFyZSBub3QgemVyby4gSWYgdGhhdCBmaWd1cmUgaXMgbGVzcyB0aGFuIG9yCisgICAgZXF1YWwgdG8gcmVsLCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICBDb21wbGV4IG51bWJlcnMgYXJlIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQuIElmIHlvdSB3aXNoIHRvIGNvbXBhcmUgdG8KKyAgICBjb21wbGV4IG51bWJlcnMsIGV4dHJhY3QgdGhlaXIgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGFuZCBjb21wYXJlIHRoZW0KKyAgICBpbmRpdmlkdWFsbHkuCisKKyAgICBOQU5zIGFsd2F5cyBjb21wYXJlIHVuZXF1YWwsIGV2ZW4gd2l0aCB0aGVtc2VsdmVzLiBJbmZpbml0aWVzIGNvbXBhcmUKKyAgICBhcHByb3hpbWF0ZWx5IGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduIChib3RoIHBvc2l0aXZlIG9yIGJvdGgKKyAgICBuZWdhdGl2ZSkuIEluZmluaXRpZXMgd2l0aCBkaWZmZXJlbnQgc2lnbnMgY29tcGFyZSB1bmVxdWFsOyBzbyBkbworICAgIGNvbXBhcmlzb25zIG9mIGluZmluaXRpZXMgd2l0aCBmaW5pdGUgbnVtYmVycy4KKyAgICAiIiIKKyAgICBpZiB0b2wgPCAwIG9yIHJlbCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Vycm9yIHRvbGVyYW5jZXMgbXVzdCBiZSBub24tbmVnYXRpdmUnKQorICAgICMgTkFOcyBhcmUgbmV2ZXIgZXF1YWwgdG8gYW55dGhpbmcsIGFwcHJveGltYXRlbHkgb3Igb3RoZXJ3aXNlLgorICAgIGlmIG1hdGguaXNuYW4oeCkgb3IgbWF0aC5pc25hbih5KToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBOdW1iZXJzIHdoaWNoIGNvbXBhcmUgZXF1YWwgYWxzbyBjb21wYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisgICAgaWYgeCA9PSB5OgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YgdHdvIGluZmluaXRpZXMgd2l0aCB0aGUgc2FtZSBzaWduLgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGlmIG1hdGguaXNpbmYoeCkgb3IgbWF0aC5pc2luZih5KToKKyAgICAgICAgIyBUaGlzIGluY2x1ZGVzIHRoZSBjYXNlIG9mIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24sIG9yCisgICAgICAgICMgb25lIGluZmluaXR5IGFuZCBvbmUgZmluaXRlIG51bWJlci4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBUd28gZmluaXRlIG51bWJlcnMuCisgICAgYWN0dWFsX2Vycm9yID0gYWJzKHggLSB5KQorICAgIGFsbG93ZWRfZXJyb3IgPSBtYXgodG9sLCByZWwqbWF4KGFicyh4KSwgYWJzKHkpKSkKKyAgICByZXR1cm4gYWN0dWFsX2Vycm9yIDw9IGFsbG93ZWRfZXJyb3IKKworCisjIFRoaXMgY2xhc3MgZXhpc3RzIG9ubHkgYXMgc29tZXdoZXJlIHRvIHN0aWNrIGEgZG9jc3RyaW5nIGNvbnRhaW5pbmcKKyMgZG9jdGVzdHMuIFRoZSBmb2xsb3dpbmcgZG9jc3RyaW5nIGFuZCB0ZXN0cyB3ZXJlIG9yaWdpbmFsbHkgaW4gYSBzZXBhcmF0ZQorIyBtb2R1bGUuIE5vdyB0aGF0IGl0IGhhcyBiZWVuIG1lcmdlZCBpbiBoZXJlLCBJIG5lZWQgc29tZXdoZXJlIHRvIGhhbmcgdGhlLgorIyBkb2NzdHJpbmcuIFVsdGltYXRlbHksIHRoaXMgY2xhc3Mgd2lsbCBkaWUsIGFuZCB0aGUgaW5mb3JtYXRpb24gYmVsb3cgd2lsbAorIyBlaXRoZXIgYmVjb21lIHJlZHVuZGFudCwgb3IgYmUgbW92ZWQgaW50byBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlcy4KK2NsYXNzIF9Eb05vdGhpbmc6CisgICAgIiIiCisgICAgV2hlbiBkb2luZyBudW1lcmljIHdvcmssIGVzcGVjaWFsbHkgd2l0aCBmbG9hdHMsIGV4YWN0IGVxdWFsaXR5IGlzIG9mdGVuCisgICAgbm90IHdoYXQgeW91IHdhbnQuIER1ZSB0byByb3VuZC1vZmYgZXJyb3IsIGl0IGlzIG9mdGVuIGEgYmFkIGlkZWEgdG8gdHJ5CisgICAgdG8gY29tcGFyZSBmbG9hdHMgd2l0aCBlcXVhbGl0eS4gSW5zdGVhZCB0aGUgdXN1YWwgcHJvY2VkdXJlIGlzIHRvIHRlc3QKKyAgICB0aGVtIHdpdGggc29tZSAoaG9wZWZ1bGx5IHNtYWxsISkgYWxsb3dhbmNlIGZvciBlcnJvci4KKworICAgIFRoZSBgYGFwcHJveF9lcXVhbGBgIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBlaXRoZXIgYW4gYWJzb2x1dGUKKyAgICBlcnJvciB0b2xlcmFuY2UsIG9yIGEgcmVsYXRpdmUgZXJyb3IsIG9yIGJvdGguCisKKyAgICBBYnNvbHV0ZSBlcnJvciB0b2xlcmFuY2VzIGFyZSBzaW1wbGUsIGJ1dCB5b3UgbmVlZCB0byBrbm93IHRoZSBtYWduaXR1ZGUKKyAgICBvZiB0aGUgcXVhbnRpdGllcyBiZWluZyBjb21wYXJlZDoKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1LCAxMi4zNDYsIHRvbD0xZS0zKQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NWU2LCAxMi4zNDZlNiwgdG9sPTFlLTMpICAjIHRvbCBpcyB0b28gc21hbGwuCisgICAgRmFsc2UKKworICAgIFJlbGF0aXZlIGVycm9ycyBhcmUgbW9yZSBzdWl0YWJsZSB3aGVuIHRoZSB2YWx1ZXMgeW91IGFyZSBjb21wYXJpbmcgY2FuCisgICAgdmFyeSBpbiBtYWduaXR1ZGU6CisKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NSwgMTIuMzQ2LCByZWw9MWUtNCkKKyAgICBUcnVlCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDVlNiwgMTIuMzQ2ZTYsIHJlbD0xZS00KQorICAgIFRydWUKKworICAgIGJ1dCBhIG5haXZlIGltcGxlbWVudGF0aW9uIG9mIHJlbGF0aXZlIGVycm9yIHRlc3RpbmcgY2FuIHJ1biBpbnRvIHRyb3VibGUKKyAgICBhcm91bmQgemVyby4KKworICAgIElmIHlvdSBzdXBwbHkgYm90aCBhbiBhYnNvbHV0ZSB0b2xlcmFuY2UgYW5kIGEgcmVsYXRpdmUgZXJyb3IsIHRoZQorICAgIGNvbXBhcmlzb24gc3VjY2VlZHMgaWYgZWl0aGVyIGluZGl2aWR1YWwgdGVzdCBzdWNjZWVkczoKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1ZTYsIDEyLjM0NmU2LCB0b2w9MWUtMywgcmVsPTFlLTQpCisgICAgVHJ1ZQorCisgICAgIiIiCisgICAgcGFzcworCisKKworIyBXZSBwcmVmZXIgdGhpcyBmb3IgdGVzdGluZyBudW1lcmljIHZhbHVlcyB0aGF0IG1heSBub3QgYmUgZXhhY3RseSBlcXVhbCwKKyMgYW5kIGF2b2lkIHVzaW5nIFRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsLCBiZWNhdXNlIGl0IHN1Y2tzIDotKQorCitjbGFzcyBOdW1lcmljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlVuaXQgdGVzdCBjbGFzcyBmb3IgbnVtZXJpYyB3b3JrLgorCisgICAgVGhpcyBzdWJjbGFzc2VzIFRlc3RDYXNlLiBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgbWV0aG9kCisgICAgYGBUZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbGBgLCAgYGBhc3NlcnRBcHByb3hFcXVhbGBgIGlzIHByb3ZpZGVkLgorICAgICIiIgorICAgICMgQnkgZGVmYXVsdCwgd2UgZXhwZWN0IGV4YWN0IGVxdWFsaXR5LCB1bmxlc3Mgb3ZlcnJpZGRlbi4KKyAgICB0b2wgPSByZWwgPSAwCisKKyAgICBkZWYgYXNzZXJ0QXBwcm94RXF1YWwoCisgICAgICAgICAgICBzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2w9Tm9uZSwgcmVsPU5vbmUsIG1zZz1Ob25lCisgICAgICAgICAgICApOgorICAgICAgICAiIiJUZXN0IHBhc3NlcyBpZiBgYGZpcnN0YGAgYW5kIGBgc2Vjb25kYGAgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICAgICAgVGhpcyB0ZXN0IHBhc3NlcyBpZiBgYGZpcnN0YGAgYW5kIGBgc2Vjb25kYGAgYXJlIGVxdWFsIHRvCisgICAgICAgIHdpdGhpbiBgYHRvbGBgLCBhbiBhYnNvbHV0ZSBlcnJvciwgb3IgYGByZWxgYCwgYSByZWxhdGl2ZSBlcnJvci4KKworICAgICAgICBJZiBlaXRoZXIgYGB0b2xgYCBvciBgYHJlbGBgIGFyZSBOb25lIG9yIG5vdCBnaXZlbiwgdGhleSBkZWZhdWx0IHRvCisgICAgICAgIHRlc3QgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lIChieSBkZWZhdWx0LCAwKS4KKworICAgICAgICBUaGUgb2JqZWN0cyBtYXkgYmUgZWl0aGVyIG51bWJlcnMsIG9yIHNlcXVlbmNlcyBvZiBudW1iZXJzLiBTZXF1ZW5jZXMKKyAgICAgICAgYXJlIHRlc3RlZCBlbGVtZW50LWJ5LWVsZW1lbnQuCisKKyAgICAgICAgPj4+IGNsYXNzIE15VGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgICAgICAuLi4gICAgIGRlZiB0ZXN0X251bWJlcihzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgeCA9IDEuMC82CisgICAgICAgIC4uLiAgICAgICAgIHkgPSBzdW0oW3hdKjYpCisgICAgICAgIC4uLiAgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoeSwgMS4wLCB0b2w9MWUtMTUpCisgICAgICAgIC4uLiAgICAgZGVmIHRlc3Rfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIC4uLiAgICAgICAgIGEgPSBbMS4wMDEsIDEuMDAxZS0xMCwgMS4wMDFlMTBdCisgICAgICAgIC4uLiAgICAgICAgIGIgPSBbMS4wLCAxZS0xMCwgMWUxMF0KKyAgICAgICAgLi4uICAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChhLCBiLCByZWw9MWUtMykKKyAgICAgICAgLi4uCisgICAgICAgID4+PiBpbXBvcnQgdW5pdHRlc3QKKyAgICAgICAgPj4+IGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPICAjIFN1cHByZXNzIHRlc3QgcnVubmVyIG91dHB1dC4KKyAgICAgICAgPj4+IHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShNeVRlc3QpCisgICAgICAgID4+PiB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSkucnVuKHN1aXRlKQorICAgICAgICA8dW5pdHRlc3QucnVubmVyLlRleHRUZXN0UmVzdWx0IHJ1bj0yIGVycm9ycz0wIGZhaWx1cmVzPTA+CisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHRvbCBpcyBOb25lOgorICAgICAgICAgICAgdG9sID0gc2VsZi50b2wKKyAgICAgICAgaWYgcmVsIGlzIE5vbmU6CisgICAgICAgICAgICByZWwgPSBzZWxmLnJlbAorICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShmaXJzdCwgY29sbGVjdGlvbnMuU2VxdWVuY2UpIGFuZAorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2Uoc2Vjb25kLCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX2FwcHJveF9zZXEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfYXBwcm94X251bQorICAgICAgICBjaGVjayhmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgbXNnKQorCisgICAgZGVmIF9jaGVja19hcHByb3hfc2VxKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBtc2cpOgorICAgICAgICBpZiBsZW4oZmlyc3QpICE9IGxlbihzZWNvbmQpOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAoCisgICAgICAgICAgICAgICAgInNlcXVlbmNlcyBkaWZmZXIgaW4gbGVuZ3RoOiAlZCBpdGVtcyAhPSAlZCBpdGVtcyIKKyAgICAgICAgICAgICAgICAlIChsZW4oZmlyc3QpLCBsZW4oc2Vjb25kKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorICAgICAgICBmb3IgaSwgKGEsZSkgaW4gZW51bWVyYXRlKHppcChmaXJzdCwgc2Vjb25kKSk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19hcHByb3hfbnVtKGEsIGUsIHRvbCwgcmVsLCBtc2csIGkpCisKKyAgICBkZWYgX2NoZWNrX2FwcHJveF9udW0oc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIG1zZywgaWR4PU5vbmUpOgorICAgICAgICBpZiBhcHByb3hfZXF1YWwoZmlyc3QsIHNlY29uZCwgdG9sLCByZWwpOgorICAgICAgICAgICAgIyBUZXN0IHBhc3Nlcy4gUmV0dXJuIGVhcmx5LCB3ZSBhcmUgZG9uZS4KKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgT3RoZXJ3aXNlIHdlIGZhaWxlZC4KKyAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl9tYWtlX3N0ZF9lcnJfbXNnKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpCisgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2Vfc3RkX2Vycl9tc2coZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCk6CisgICAgICAgICMgQ3JlYXRlIHRoZSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBhcHByb3hfZXF1YWwgZmFpbHVyZXMuCisgICAgICAgIGFzc2VydCBmaXJzdCAhPSBzZWNvbmQKKyAgICAgICAgdGVtcGxhdGUgPSAoCisgICAgICAgICAgICAnICAlciAhPSAlclxuJworICAgICAgICAgICAgJyAgdmFsdWVzIGRpZmZlciBieSBtb3JlIHRoYW4gdG9sPSVyIGFuZCByZWw9JXJcbicKKyAgICAgICAgICAgICcgIC0+IGFic29sdXRlIGVycm9yID0gJXJcbicKKyAgICAgICAgICAgICcgIC0+IHJlbGF0aXZlIGVycm9yID0gJXInCisgICAgICAgICAgICApCisgICAgICAgIGlmIGlkeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGhlYWRlciA9ICdudW1lcmljIHNlcXVlbmNlcyBmaXJzdCBkaWZmZXIgYXQgaW5kZXggJWQuXG4nICUgaWR4CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGhlYWRlciArIHRlbXBsYXRlCisgICAgICAgICMgQ2FsY3VsYXRlIGFjdHVhbCBlcnJvcnM6CisgICAgICAgIGFic19lcnIsIHJlbF9lcnIgPSBfY2FsY19lcnJvcnMoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlICUgKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBhYnNfZXJyLCByZWxfZXJyKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisjID09PSBUZXN0IHRoZSBoZWxwZXJzID09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKworCisjIC0tLSBUZXN0cyBmb3IgYXBwcm94X2VxdWFsIC0tLQorCitjbGFzcyBBcHByb3hFcXVhbFN5bW1ldHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHN5bW1ldHJ5IG9mIGFwcHJveF9lcXVhbC4KKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3N5bW1ldHJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYXBwcm94X2VxdWFsIHRyZWF0cyByZWxhdGl2ZSBlcnJvciBzeW1tZXRyaWNhbGx5LgorICAgICAgICAjIChhLWIpL2EgaXMgdXN1YWxseSBub3QgZXF1YWwgdG8gKGEtYikvYi4gRW5zdXJlIHRoYXQgdGhpcworICAgICAgICAjIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICAjCisgICAgICAgICMgICBOb3RlOiB0aGUgcmVhc29uIGZvciB0aGlzIHRlc3QgaXMgdGhhdCBhbiBlYXJseSB2ZXJzaW9uCisgICAgICAgICMgICBvZiBhcHByb3hfZXF1YWwgd2FzIG5vdCBzeW1tZXRyaWMuIEEgcmVsYXRpdmUgZXJyb3IgdGVzdAorICAgICAgICAjICAgd291bGQgcGFzcywgb3IgZmFpbCwgZGVwZW5kaW5nIG9uIHdoaWNoIHZhbHVlIHdhcyBwYXNzZWQKKyAgICAgICAgIyAgIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICAgICAgIworICAgICAgICBhcmdzMSA9IFsyNDU2LCAzNy44LCAtMTIuNDUsIERlY2ltYWwoJzIuNTQnKSwgRnJhY3Rpb24oMTcsIDU0KV0KKyAgICAgICAgYXJnczIgPSBbMjQ1OSwgMzcuMiwgLTEyLjQxLCBEZWNpbWFsKCcyLjU5JyksIEZyYWN0aW9uKDE1LCA1NCldCisgICAgICAgIGFzc2VydCBsZW4oYXJnczEpID09IGxlbihhcmdzMikKKyAgICAgICAgZm9yIGEsIGIgaW4gemlwKGFyZ3MxLCBhcmdzMik6CisgICAgICAgICAgICBzZWxmLmRvX3JlbGF0aXZlX3N5bW1ldHJ5KGEsIGIpCisKKyAgICBkZWYgZG9fcmVsYXRpdmVfc3ltbWV0cnkoc2VsZiwgYSwgYik6CisgICAgICAgIGEsIGIgPSBtaW4oYSwgYiksIG1heChhLCBiKQorICAgICAgICBhc3NlcnQgYSA8IGIKKyAgICAgICAgZGVsdGEgPSBiIC0gYSAgIyBUaGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2YWx1ZXMuCisgICAgICAgIHJlbF9lcnIxLCByZWxfZXJyMiA9IGFicyhkZWx0YS9hKSwgYWJzKGRlbHRhL2IpCisgICAgICAgICMgQ2hvb3NlIGFuIGVycm9yIG1hcmdpbiBoYWxmd2F5IGJldHdlZW4gdGhlIHR3by4KKyAgICAgICAgcmVsID0gKHJlbF9lcnIxICsgcmVsX2VycjIpLzIKKyAgICAgICAgIyBOb3cgc2VlIHRoYXQgdmFsdWVzIGEgYW5kIGIgY29tcGFyZSBhcHByb3ggZXF1YWwgcmVnYXJkbGVzcyBvZgorICAgICAgICAjIHdoaWNoIGlzIGdpdmVuIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGEsIGIsIHRvbD0wLCByZWw9cmVsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChiLCBhLCB0b2w9MCwgcmVsPXJlbCkpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyeShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYXBwcm94X2VxdWFsKGEsIGIpID09IGFwcHJveF9lcXVhbChiLCBhKQorICAgICAgICBhcmdzID0gWy0yMywgLTIsIDUsIDEwNywgOTM1NjhdCisgICAgICAgIGRlbHRhID0gMgorICAgICAgICBmb3IgYSBpbiBhcmdzOgorICAgICAgICAgICAgZm9yIHR5cGVfIGluIChpbnQsIGZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbik6CisgICAgICAgICAgICAgICAgeCA9IHR5cGVfKGEpKjEwMAorICAgICAgICAgICAgICAgIHkgPSB4ICsgZGVsdGEKKyAgICAgICAgICAgICAgICByID0gYWJzKGRlbHRhL21heCh4LCB5KSkKKyAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBmaXZlIGNhc2VzIHRvIGNoZWNrOgorICAgICAgICAgICAgICAgICMgMSkgYWN0dWFsIGVycm9yIDw9IHRvbCwgPD0gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSwgcmVsPXIpCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSsxLCByZWw9MipyKQorICAgICAgICAgICAgICAgICMgMikgYWN0dWFsIGVycm9yID4gdG9sLCA+IHJlbAorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEtMSwgcmVsPXIvMikKKyAgICAgICAgICAgICAgICAjIDMpIGFjdHVhbCBlcnJvciA8PSB0b2wsID4gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSwgcmVsPXIvMikKKyAgICAgICAgICAgICAgICAjIDQpIGFjdHVhbCBlcnJvciA+IHRvbCwgPD0gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YS0xLCByZWw9cikKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLTEsIHJlbD0yKnIpCisgICAgICAgICAgICAgICAgIyA1KSBleGFjdCBlcXVhbGl0eSB0ZXN0CisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHgsIHRvbD0wLCByZWw9MCkKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPTAsIHJlbD0wKQorCisgICAgZGVmIGRvX3N5bW1ldHJ5X3Rlc3Qoc2VsZiwgYSwgYiwgdG9sLCByZWwpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJhcHByb3hfZXF1YWwgY29tcGFyaXNvbnMgZG9uJ3QgbWF0Y2ggZm9yICVyIgorICAgICAgICBmbGFnMSA9IGFwcHJveF9lcXVhbChhLCBiLCB0b2wsIHJlbCkKKyAgICAgICAgZmxhZzIgPSBhcHByb3hfZXF1YWwoYiwgYSwgdG9sLCByZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZzEsIGZsYWcyLCB0ZW1wbGF0ZS5mb3JtYXQoKGEsIGIsIHRvbCwgcmVsKSkpCisKKworY2xhc3MgQXBwcm94RXF1YWxFeGFjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGUgYXBwcm94X2VxdWFsIGZ1bmN0aW9uIHdpdGggZXhhY3RseSBlcXVhbCB2YWx1ZXMuCisgICAgIyBFcXVhbCB2YWx1ZXMgc2hvdWxkIGNvbXBhcmUgYXMgYXBwcm94aW1hdGVseSBlcXVhbC4KKyAgICAjIFRlc3QgY2FzZXMgZm9yIGV4YWN0bHkgZXF1YWwgdmFsdWVzLCB3aGljaCBzaG91bGQgY29tcGFyZSBhcHByb3gKKyAgICAjIGVxdWFsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIHRvbGVyYW5jZXMgZ2l2ZW4uCisKKyAgICBkZWYgZG9fZXhhY3RseV9lcXVhbF90ZXN0KHNlbGYsIHgsIHRvbCwgcmVsKToKKyAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKHgsIHgsIHRvbD10b2wsIHJlbD1yZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICdlcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIHgpCisgICAgICAgIHJlc3VsdCA9IGFwcHJveF9lcXVhbCgteCwgLXgsIHRvbD10b2wsIHJlbD1yZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICdlcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIC14KQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBpbnQgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBmb3IgbiBpbiBbNDIsIDE5NzQwLCAxNDk3NCwgMjMwLCAxNzk1LCA3MDAyNDUsIDM2NTg3XToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4sIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgZmxvYXQgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBmb3IgeCBpbiBbMC40MiwgMS45NzQwLCAxNDk3LjQsIDIzLjAsIDE3OS41LCA3MC4wMjQ1LCAzNi41ODddOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBGcmFjdGlvbiB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBmb3IgZiBpbiBbRigxLCAyKSwgRigwKSwgRig1LCAzKSwgRig5LCA3KSwgRigzNSwgMzYpLCBGKDMsIDcpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGYsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBEZWNpbWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZm9yIGQgaW4gbWFwKEQsICI4LjIgMzEuMjc0IDkxMi4wNCAxNi43NDUgMS4yMDQ3Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGQsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Fic29sdXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIG4gaW4gWzE2LCAxMDEzLCAxMzcyLCAxMTk4LCA5NzEsIDRdOgorICAgICAgICAgICAgIyBUZXN0IGFzIGludHMuCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChuLCAwLjAxLCAwKQorICAgICAgICAgICAgIyBUZXN0IGFzIGZsb2F0cy4KKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4vMTAsIDAuMDEsIDApCisgICAgICAgICAgICAjIFRlc3QgYXMgRnJhY3Rpb25zLgorICAgICAgICAgICAgZiA9IEZyYWN0aW9uKG4sIDEyMzQpCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChmLCAwLjAxLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9hYnNvbHV0ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGVxdWFsIERlY2ltYWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KERlY2ltYWwoIjMuNTcxIiksIERlY2ltYWwoIjAuMDEiKSwgMCkKKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoLURlY2ltYWwoIjgxLjM5NzEiKSwgRGVjaW1hbCgiMC4wMSIpLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9yZWxhdGl2ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWzgzNDcsIDEwMS4zLCAtNzkxMC4yOCwgRnJhY3Rpb24oNSwgMjEpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KHgsIDAsIDAuMDEpCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KERlY2ltYWwoIjExLjY4IiksIDAsIERlY2ltYWwoIjAuMDEiKSkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfYm90aChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBlcXVhbCB3aGVuIGJvdGggdG9sIGFuZCByZWwgYXJlIGdpdmVuLgorICAgICAgICBmb3IgeCBpbiBbNDEwMTcsIDE2Ljc0MiwgLTgxMy4wMiwgRnJhY3Rpb24oMywgOCldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMC4xLCAwLjAxKQorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChEKCI3LjIiKSwgRCgiMC4xIiksIEQoIjAuMDEiKSkKKworCitjbGFzcyBBcHByb3hFcXVhbFVuZXF1YWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFVuZXF1YWwgdmFsdWVzIHNob3VsZCBjb21wYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZXMuCisgICAgIyBUZXN0IGNhc2VzIGZvciB1bmVxdWFsIHZhbHVlcywgd2l0aCBleGFjdCBlcXVhbGl0eSB0ZXN0LgorCisgICAgZGVmIGRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KHNlbGYsIHgpOgorICAgICAgICBmb3IgYSBpbiAoeCwgLXgpOgorICAgICAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKGEsIGErMSwgdG9sPTAsIHJlbD0wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQsICdpbmVxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgYSkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdW5lcXVhbCBpbnQgdmFsdWVzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciBuIGluIFs5NTEsIDU3MjMwNSwgNDc4LCA5MTcsIDE3MjQwXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QobikKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCB1bmVxdWFsIGZsb2F0IHZhbHVlcyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBmb3IgeCBpbiBbOS41MSwgNTcyMy4wNSwgNDcuOCwgOS4xNywgMTcuMjRdOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdCh4KQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdW5lcXVhbCBGcmFjdGlvbnMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGZvciBmIGluIFtGKDEsIDUpLCBGKDcsIDkpLCBGKDEyLCAxMSksIEYoMTAxLCA5OTAyMyldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChmKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB1bmVxdWFsIERlY2ltYWxzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMy4xNDE1IDI5OC4xMiAzLjQ3IDE4Ljk5NiAwLjAwMjQ1Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QoZCkKKworCitjbGFzcyBBcHByb3hFcXVhbEluZXhhY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEluZXhhY3QgdGVzdCBjYXNlcyBmb3IgYXBwcm94X2Vycm9yLgorICAgICMgVGVzdCBjYXNlcyB3aGVuIGNvbXBhcmluZyB0d28gdmFsdWVzIHRoYXQgYXJlIG5vdCBleGFjdGx5IGVxdWFsLgorCisgICAgIyA9PT0gQWJzb2x1dGUgZXJyb3IgdGVzdHMgPT09CisKKyAgICBkZWYgZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHNlbGYsIHgsIGRlbHRhKToKKyAgICAgICAgdGVtcGxhdGUgPSAiVGVzdCBmYWlsdXJlIGZvciB4PXshcn0sIHk9eyFyfSIKKyAgICAgICAgZm9yIHkgaW4gKHggKyBkZWx0YSwgeCAtIGRlbHRhKToKKyAgICAgICAgICAgIG1zZyA9IHRlbXBsYXRlLmZvcm1hdCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9MipkZWx0YSwgcmVsPTApLCBtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9ZGVsdGEvMiwgcmVsPTApLCBtc2cpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGludHMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIG4gaW4gWy0xMDczNywgLTE5NzUsIC03LCAtMiwgMCwgMSwgOSwgMzcsIDQyMywgOTg3NCwgMjM3ODkxMTBdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QobiwgMTApCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChuLCAyKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGZsb2F0cyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbLTI4NC4xMjYsIC05Ny4xLCAtMy40LCAtMi4xNSwgMC41LCAxLjAsIDcuOCwgNC4yMywgMzgxNy40XToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDEuNSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDAuMDEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCh4LCAwLjAwMDEpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRnJhY3Rpb25zIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGRlbHRhID0gRnJhY3Rpb24oMSwgMjkpCisgICAgICAgIG51bWVyYXRvcnMgPSBbLTg0LCAtMTUsIC0yLCAtMSwgMCwgMSwgNSwgMTcsIDIzLCAzNCwgNzFdCisgICAgICAgIGZvciBmIGluIChGcmFjdGlvbihuLCAyOSkgZm9yIG4gaW4gbnVtZXJhdG9ycyk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChmLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KGYsIGZsb2F0KGRlbHRhKSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIERlY2ltYWxzIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGRlbHRhID0gRGVjaW1hbCgiMC4wMSIpCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMS4wIDMuNSAzNi4wOCA2MS43OSA3OTEyLjM2NDgiLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoZCwgZGVsdGEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCgtZCwgZGVsdGEpCisKKyAgICBkZWYgdGVzdF9jcm9zc196ZXJvKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBjYXNlIG9mIHRoZSB0d28gdmFsdWVzIGhhdmluZyBvcHBvc2l0ZSBzaWducy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCgxZS01LCAtMWUtNSwgdG9sPTFlLTQsIHJlbD0wKSkKKworICAgICMgPT09IFJlbGF0aXZlIGVycm9yIHRlc3RzID09PQorCisgICAgZGVmIGRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChzZWxmLCB4LCBkZWx0YSk6CisgICAgICAgIHRlbXBsYXRlID0gIlRlc3QgZmFpbHVyZSBmb3IgeD17IXJ9LCB5PXshcn0iCisgICAgICAgIGZvciB5IGluICh4KigxK2RlbHRhKSwgeCooMS1kZWx0YSkpOgorICAgICAgICAgICAgbXNnID0gdGVtcGxhdGUuZm9ybWF0KHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0wLCByZWw9MipkZWx0YSksIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0wLCByZWw9ZGVsdGEvMiksIG1zZykKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgaW50cyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNjQsIDQ3LCB0b2w9MCwgcmVsPTAuMzYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDY0LCA0NywgdG9sPTAsIHJlbD0wLjM3KSkKKyAgICAgICAgIyAtLS0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg0NDksIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNDQ4LCA1MTIsIHRvbD0wLCByZWw9MC4xMjUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCg0NDcsIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgZmxvYXRzIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWy0xNzguMzQsIC0wLjEsIDAuMSwgMS4wLCAzNi45NywgMjg0Ny4xMzYsIDkxNDUuMDc0XToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHgsIDAuMDIpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCh4LCAwLjAwMDEpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRnJhY3Rpb25zIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRlbHRhID0gRnJhY3Rpb24oMywgOCkKKyAgICAgICAgZm9yIGYgaW4gW0YoMywgODQpLCBGKDE3LCAzMCksIEYoNDksIDUwKSwgRig5MiwgODUpXToKKyAgICAgICAgICAgIGZvciBkIGluIChkZWx0YSwgZmxvYXQoZGVsdGEpKToKKyAgICAgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChmLCBkKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KC1mLCBkKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRGVjaW1hbHMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgZCBpbiBtYXAoRGVjaW1hbCwgIjAuMDIgMS4wIDUuNyAxMy42NyA5NC4xMzggOTEwMjcuOTMyMSIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChkLCBEZWNpbWFsKCIwLjAwMSIpKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoLWQsIERlY2ltYWwoIjAuMDUiKSkKKworICAgICMgPT09IEJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yIHRlc3RzID09PQorCisgICAgIyBUaGVyZSBhcmUgZm91ciBjYXNlcyB0byBjb25zaWRlcjoKKyAgICAjICAgMSkgYWN0dWFsIGVycm9yIDw9IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yCisgICAgIyAgIDIpIGFjdHVhbCBlcnJvciA8PSBhYnNvbHV0ZSBlcnJvciBidXQgPiByZWxhdGl2ZSBlcnJvcgorICAgICMgICAzKSBhY3R1YWwgZXJyb3IgPD0gcmVsYXRpdmUgZXJyb3IgYnV0ID4gYWJzb2x1dGUgZXJyb3IKKyAgICAjICAgNCkgYWN0dWFsIGVycm9yID4gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IKKworICAgIGRlZiBkb19jaGVja19ib3RoKHNlbGYsIGEsIGIsIHRvbCwgcmVsLCB0b2xfZmxhZywgcmVsX2ZsYWcpOgorICAgICAgICBjaGVjayA9IHNlbGYuYXNzZXJ0VHJ1ZSBpZiB0b2xfZmxhZyBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD10b2wsIHJlbD0wKSkKKyAgICAgICAgY2hlY2sgPSBzZWxmLmFzc2VydFRydWUgaWYgcmVsX2ZsYWcgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9MCwgcmVsPXJlbCkpCisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRUcnVlIGlmICh0b2xfZmxhZyBvciByZWxfZmxhZykgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9dG9sLCByZWw9cmVsKSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMShzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDQsIDMuOGUtNCwgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKC03LjM4NywgLTcuMzg2LCAwLjAwMiwgMC4wMDAyLCBUcnVlLCBUcnVlKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgyKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IGFic29sdXRlIGVycm9yIGJ1dCA+IHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwNCwgMy43ZS00LCBUcnVlLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSByZWxhdGl2ZSBlcnJvciBidXQgPiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDEsIDMuOGUtNCwgRmFsc2UsIFRydWUpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDQoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPiBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDIuNzgsIDIuNzUsIDAuMDEsIDAuMDAxLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg5NzEuNDQsIDk3MS40NywgMC4wMiwgM2UtNSwgRmFsc2UsIEZhbHNlKQorCisKK2NsYXNzIEFwcHJveEVxdWFsU3BlY2lhbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgYXBwcm94X2VxdWFsIHdpdGggTkFOcyBhbmQgSU5GcyBhbmQgemVyb2VzLgorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICBmb3IgdHlwZV8gaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGluZiA9IHR5cGVfKCdpbmYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChpbmYsIGluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGluZiwgaW5mLCAwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoaW5mLCBpbmYsIDEsIDAuMDEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCgtaW5mLCAtaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKGluZiwgLWluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbChpbmYsIDEwMDApKQorCisgICAgZGVmIHRlc3RfbmFuKHNlbGYpOgorICAgICAgICBmb3IgdHlwZV8gaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIG5hbiA9IHR5cGVfKCduYW4nKQorICAgICAgICAgICAgZm9yIG90aGVyIGluIChuYW4sIHR5cGVfKCdpbmYnKSwgMTAwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwobmFuLCBvdGhlcikpCisKKyAgICBkZWYgdGVzdF9mbG9hdF96ZXJvZXMoc2VsZik6CisgICAgICAgIG56ZXJvID0gbWF0aC5jb3B5c2lnbigwLjAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKG56ZXJvLCAwLjAsIHRvbD0wLjEsIHJlbD0wLjEpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF96ZXJvZXMoc2VsZik6CisgICAgICAgIG56ZXJvID0gRGVjaW1hbCgiLTAuMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwobnplcm8sIERlY2ltYWwoMCksIHRvbD0wLjEsIHJlbD0wLjEpKQorCisKK2NsYXNzIFRlc3RBcHByb3hFcXVhbEVycm9ycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGVycm9yIGNvbmRpdGlvbnMgb2YgYXBwcm94X2VxdWFsLgorCisgICAgZGVmIHRlc3RfYmFkX3RvbChzZWxmKToKKyAgICAgICAgIyBUZXN0IG5lZ2F0aXZlIHRvbCByYWlzZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFwcHJveF9lcXVhbCwgMTAwLCAxMDAsIC0xLCAwLjEpCisKKyAgICBkZWYgdGVzdF9iYWRfcmVsKHNlbGYpOgorICAgICAgICAjIFRlc3QgbmVnYXRpdmUgcmVsIHJhaXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXBwcm94X2VxdWFsLCAxMDAsIDEwMCwgMSwgLTAuMSkKKworCisjIC0tLSBUZXN0cyBmb3IgTnVtZXJpY1Rlc3RDYXNlIC0tLQorCisjIFRoZSBmb3JtYXR0aW5nIHJvdXRpbmUgdGhhdCBnZW5lcmF0ZXMgdGhlIGVycm9yIG1lc3NhZ2VzIGlzIGNvbXBsZXggZW5vdWdoCisjIHRoYXQgaXQgdG9vIG5lZWRzIHRlc3RpbmcuCisKK2NsYXNzIFRlc3ROdW1lcmljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIGV4YWN0IHdvcmRpbmcgb2YgTnVtZXJpY1Rlc3RDYXNlIGVycm9yIG1lc3NhZ2VzIGlzICpub3QqIGd1YXJhbnRlZWQsCisgICAgIyBidXQgd2UgbmVlZCB0byBnaXZlIHRoZW0gc29tZSBzb3J0IG9mIHRlc3QgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUKKyAgICAjIGdlbmVyYXRlZCBjb3JyZWN0bHkuIEFzIGEgY29tcHJvbWlzZSwgd2UgbG9vayBmb3Igc3BlY2lmaWMgc3Vic3RyaW5ncworICAgICMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgZm91bmQgZXZlbiBpZiB0aGUgb3ZlcmFsbCBlcnJvciBtZXNzYWdlIGNoYW5nZXMuCisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCBhcmdzKToKKyAgICAgICAgYWN0dWFsX21zZyA9IE51bWVyaWNUZXN0Q2FzZS5fbWFrZV9zdGRfZXJyX21zZygqYXJncykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmdlbmVyYXRlX3N1YnN0cmluZ3MoKmFyZ3MpCisgICAgICAgIGZvciBzdWJzdHJpbmcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN1YnN0cmluZywgYWN0dWFsX21zZykKKworICAgIGRlZiB0ZXN0X251bWVyaWN0ZXN0Y2FzZV9pc190ZXN0Y2FzZShzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBOdW1lcmljVGVzdENhc2UgYWN0dWFsbHkgaXMgYSBUZXN0Q2FzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTnVtZXJpY1Rlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tc2dfbnVtZXJpYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmb3IgbnVtZXJpYyBjb21wYXJpc29ucy4KKyAgICAgICAgYXJncyA9ICgyLjUsIDQuMCwgMC41LCAwLjI1LCBOb25lKQorICAgICAgICBzZWxmLmRvX3Rlc3QoYXJncykKKworICAgIGRlZiB0ZXN0X2Vycm9yX21zZ19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmb3Igc2VxdWVuY2UgY29tcGFyaXNvbnMuCisgICAgICAgIGFyZ3MgPSAoMy43NSwgOC4yNSwgMS4yNSwgMC41LCA3KQorICAgICAgICBzZWxmLmRvX3Rlc3QoYXJncykKKworICAgIGRlZiBnZW5lcmF0ZV9zdWJzdHJpbmdzKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpOgorICAgICAgICAiIiJSZXR1cm4gc3Vic3RyaW5ncyB3ZSBleHBlY3QgdG8gc2VlIGluIGVycm9yIG1lc3NhZ2VzLiIiIgorICAgICAgICBhYnNfZXJyLCByZWxfZXJyID0gX2NhbGNfZXJyb3JzKGZpcnN0LCBzZWNvbmQpCisgICAgICAgIHN1YnN0cmluZ3MgPSBbCisgICAgICAgICAgICAgICAgJ3RvbD0lcicgJSB0b2wsCisgICAgICAgICAgICAgICAgJ3JlbD0lcicgJSByZWwsCisgICAgICAgICAgICAgICAgJ2Fic29sdXRlIGVycm9yID0gJXInICUgYWJzX2VyciwKKyAgICAgICAgICAgICAgICAncmVsYXRpdmUgZXJyb3IgPSAlcicgJSByZWxfZXJyLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgaWR4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3Vic3RyaW5ncy5hcHBlbmQoJ2RpZmZlciBhdCBpbmRleCAlZCcgJSBpZHgpCisgICAgICAgIHJldHVybiBzdWJzdHJpbmdzCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09IFRlc3RzIGZvciB0aGUgc3RhdGlzdGljcyBtb2R1bGUgPT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK2NsYXNzIEdsb2JhbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBzdGF0aXN0aWNzCisgICAgZXhwZWN0ZWRfbWV0YWRhdGEgPSBbIl9fZG9jX18iLCAiX19hbGxfXyJdCisKKyAgICBkZWYgdGVzdF9tZXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgbWV0YWRhdGEuCisgICAgICAgIGZvciBtZXRhIGluIHNlbGYuZXhwZWN0ZWRfbWV0YWRhdGE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLm1vZHVsZSwgbWV0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIG5vdCBwcmVzZW50IiAlIG1ldGEpCisKKyAgICBkZWYgdGVzdF9jaGVja19hbGwoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZXZlcnl0aGluZyBpbiBfX2FsbF9fIGV4aXN0cyBhbmQgaXMgcHVibGljLgorICAgICAgICBtb2R1bGUgPSBzZWxmLm1vZHVsZQorICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGUuX19hbGxfXzoKKyAgICAgICAgICAgICMgTm8gcHJpdmF0ZSBuYW1lcyBpbiBfX2FsbF9fOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuYW1lLnN0YXJ0c3dpdGgoIl8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaXZhdGUgbmFtZSAiJXMiIGluIF9fYWxsX18nICUgbmFtZSkKKyAgICAgICAgICAgICMgQW5kIGFueXRoaW5nIGluIF9fYWxsX18gbXVzdCBleGlzdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcgbmFtZSAiJXMiIGluIF9fYWxsX18nICUgbmFtZSkKKworCitjbGFzcyBEb2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU9PIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jX3Rlc3RzKHNlbGYpOgorICAgICAgICBmYWlsZWQsIHRyaWVkID0gZG9jdGVzdC50ZXN0bW9kKHN0YXRpc3RpY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih0cmllZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYWlsZWQsIDApCisKK2NsYXNzIFN0YXRpc3RpY3NFcnJvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2hhc19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVycm1zZyA9ICgKKyAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgU3RhdGlzdGljc0Vycm9yIHRvIGJlIGEgVmFsdWVFcnJvciwgYnV0IGdvdCBhIgorICAgICAgICAgICAgICAgICIgc3ViY2xhc3Mgb2YgJXIgaW5zdGVhZC4iCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzdGF0aXN0aWNzLCAnU3RhdGlzdGljc0Vycm9yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICBlcnJtc2cgJSBzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvci5fX2Jhc2VfXworICAgICAgICAgICAgICAgICkKKworCisjID09PSBUZXN0cyBmb3IgcHJpdmF0ZSB1dGlsaXR5IGZ1bmN0aW9ucyA9PT0KKworY2xhc3MgRXhhY3RSYXRpb1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBfZXhhY3RfcmF0aW8gdXRpbGl0eS4KKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gKC0yMCwgLTMsIDAsIDUsIDk5LCAxMCoqMjApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbyhpKSwgKGksIDEpKQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb24oc2VsZik6CisgICAgICAgIG51bWVyYXRvcnMgPSAoLTUsIDEsIDEyLCAzOCkKKyAgICAgICAgZm9yIG4gaW4gbnVtZXJhdG9yczoKKyAgICAgICAgICAgIGYgPSBGcmFjdGlvbihuLCAzNykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oZiksIChuLCAzNykpCisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbygwLjEyNSksICgxLCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbygxLjEyNSksICg5LCA4KSkKKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTAwLCAxMDApIGZvciBfIGluIHJhbmdlKDEwMCldCisgICAgICAgIGZvciB4IGluIGRhdGE6CisgICAgICAgICAgICBudW0sIGRlbiA9IHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIG51bS9kZW4pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsKHNlbGYpOgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBfZXhhY3RfcmF0aW8gPSBzdGF0aXN0aWNzLl9leGFjdF9yYXRpbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9leGFjdF9yYXRpbyhEKCIwLjEyNSIpKSwgKDEyNSwgMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2V4YWN0X3JhdGlvKEQoIjEyLjM0NSIpKSwgKDEyMzQ1LCAxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZXhhY3RfcmF0aW8oRCgiLTEuOTgiKSksICgtMTk4LCAxMDApKQorCisKK2NsYXNzIERlY2ltYWxUb1JhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9kZWNpbWFsX3RvX3JhdGlvIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdFNwZWNpYWxzUmFpc2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5BTnMgYW5kIElORnMgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIyBOb24tc3BlY2lhbCB2YWx1ZXMgYXJlIGNvdmVyZWQgYnkgX2V4YWN0X3JhdGlvIGFib3ZlLgorICAgICAgICBmb3IgZCBpbiAoRGVjaW1hbCgnTkFOJyksIERlY2ltYWwoJ3NOQU4nKSwgRGVjaW1hbCgnSU5GJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbywgZCkKKworICAgIGRlZiB0ZXN0X3NpZ24oc2VsZik6CisgICAgICAgICMgVGVzdCBzaWduIGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5LgorICAgICAgICBudW1iZXJzID0gW0RlY2ltYWwoIjkuODc2NWUxMiIpLCBEZWNpbWFsKCI5Ljg3NjVlLTEyIildCisgICAgICAgIGZvciBkIGluIG51bWJlcnM6CisgICAgICAgICAgICAjIEZpcnN0IHRlc3QgcG9zaXRpdmUgZGVjaW1hbHMuCisgICAgICAgICAgICBhc3NlcnQgZCA+IDAKKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobnVtLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGRlbiwgMCkKKyAgICAgICAgICAgICMgVGhlbiB0ZXN0IG5lZ2F0aXZlIGRlY2ltYWxzLgorICAgICAgICAgICAgbnVtLCBkZW4gPSBzdGF0aXN0aWNzLl9kZWNpbWFsX3RvX3JhdGlvKC1kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobnVtLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGRlbiwgMCkKKworICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2V4cG9uZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgcmVzdWx0IHdoZW4gdGhlIGV4cG9uZW50IGlzIG5lZ2F0aXZlLgorICAgICAgICB0ID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhEZWNpbWFsKCIwLjEyMzQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTIzNCwgMTAwMDApKQorCisgICAgZGVmIHRlc3RfcG9zaXRpdmVfZXhwb25lbnQoc2VsZik6CisgICAgICAgICMgVGVzdCByZXN1bHRzIHdoZW4gdGhlIGV4cG9uZW50IGlzIHBvc2l0aXZlLgorICAgICAgICB0ID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhEZWNpbWFsKCIxLjIzNGU3IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDEyMzQwMDAwLCAxKSkKKworICAgIGRlZiB0ZXN0X3JlZ3Jlc3Npb25fMjA1MzYoc2VsZik6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBpc3N1ZSAyMDUzNi4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwNTM2CisgICAgICAgIHQgPSBzdGF0aXN0aWNzLl9kZWNpbWFsX3RvX3JhdGlvKERlY2ltYWwoIjFlMiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxMDAsIDEpKQorICAgICAgICB0ID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhEZWNpbWFsKCIxLjQ3ZTUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTQ3MDAwLCAxKSkKKworCitjbGFzcyBDaGVja1R5cGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgX2NoZWNrX3R5cGUgcHJpdmF0ZSBmdW5jdGlvbi4KKworICAgIGRlZiB0ZXN0X2FsbG93ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGEgdHlwZSB3aGljaCBzaG91bGQgYmUgYWxsb3dlZCBpcyBhbGxvd2VkLgorICAgICAgICBhbGxvd2VkID0gc2V0KFtpbnQsIGZsb2F0XSkKKyAgICAgICAgc3RhdGlzdGljcy5fY2hlY2tfdHlwZShpbnQsIGFsbG93ZWQpCisgICAgICAgIHN0YXRpc3RpY3MuX2NoZWNrX3R5cGUoZmxvYXQsIGFsbG93ZWQpCisKKyAgICBkZWYgdGVzdF9ub3RfYWxsb3dlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYSB0eXBlIHdoaWNoIHNob3VsZCBub3QgYmUgYWxsb3dlZCByYWlzZXMuCisgICAgICAgIGFsbG93ZWQgPSBzZXQoW2ludCwgZmxvYXRdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0YXRpc3RpY3MuX2NoZWNrX3R5cGUsIERlY2ltYWwsIGFsbG93ZWQpCisKKyAgICBkZWYgdGVzdF9hZGRfdG9fYWxsb3dlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYSBzZWNvbmQgdHlwZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBhbGxvd2VkIHNldC4KKyAgICAgICAgYWxsb3dlZCA9IHNldChbaW50XSkKKyAgICAgICAgc3RhdGlzdGljcy5fY2hlY2tfdHlwZShmbG9hdCwgYWxsb3dlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxvd2VkLCBzZXQoW2ludCwgZmxvYXRdKSkKKworCisjID09PSBUZXN0cyBmb3IgcHVibGljIGZ1bmN0aW9ucyA9PT0KKworY2xhc3MgVW5pdmFyaWF0ZUNvbW1vbk1peGluOgorICAgICMgQ29tbW9uIHRlc3RzIGZvciBtb3N0IHVuaXZhcmlhdGUgZnVuY3Rpb25zIHRoYXQgdGFrZSBhIGRhdGEgYXJndW1lbnQuCisKKyAgICBkZWYgdGVzdF9ub19hcmdzKHNlbGYpOgorICAgICAgICAjIEZhaWwgaWYgZ2l2ZW4gbm8gYXJndW1lbnRzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYykKKworICAgIGRlZiB0ZXN0X2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgICMgRmFpbCB3aGVuIHRoZSBkYXRhIGFyZ3VtZW50IChmaXJzdCBhcmd1bWVudCkgaXMgZW1wdHkuCisgICAgICAgIGZvciBlbXB0eSBpbiAoW10sICgpLCBpdGVyKFtdKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBlbXB0eSkKKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgICIiIlJldHVybiBpbnQgZGF0YSBmb3IgdmFyaW91cyB0ZXN0cy4iIiIKKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTApKQorICAgICAgICB3aGlsZSBkYXRhID09IHNvcnRlZChkYXRhKToKKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgdGVzdF9ub19pbnBsYWNlX21vZGlmaWNhdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkgaXRzIGlucHV0IGRhdGEuCisgICAgICAgIGRhdGEgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSkgIT0gMSAgIyBOZWNlc3NhcnkgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgYXNzZXJ0IGRhdGEgIT0gc29ydGVkKGRhdGEpCisgICAgICAgIHNhdmVkID0gZGF0YVs6XQorICAgICAgICBhc3NlcnQgZGF0YSBpcyBub3Qgc2F2ZWQKKyAgICAgICAgXyA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChkYXRhLCBzYXZlZCwgImRhdGEgaGFzIGJlZW4gbW9kaWZpZWQiKQorCisgICAgZGVmIHRlc3Rfb3JkZXJfZG9lc250X21hdHRlcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIG9yZGVyIG9mIGRhdGEgcG9pbnRzIGRvZXNuJ3QgY2hhbmdlIHRoZSByZXN1bHQuCisKKyAgICAgICAgIyBDQVVUSU9OOiBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzLCB0aGUgcmVzdWx0IGFjdHVhbGx5CisgICAgICAgICMgbWF5IGRlcGVuZCBvbiB0aGUgb3JkZXIuIENvbnNpZGVyIHRoaXMgdGVzdCByZXByZXNlbnRpbmcgYW4gaWRlYWwuCisgICAgICAgICMgVG8gYXZvaWQgdGhpcyB0ZXN0IGZhaWxpbmcsIG9ubHkgdGVzdCB3aXRoIGV4YWN0IHZhbHVlcyBzdWNoIGFzIGludHMKKyAgICAgICAgIyBvciBGcmFjdGlvbnMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgMywgMywgNCwgNSwgNl0qMTAwCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIGFjdHVhbCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCisKKyAgICBkZWYgdGVzdF90eXBlX29mX2RhdGFfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIHR5cGUgb2YgaXRlcmFibGUgZGF0YSBkb2Vzbid0IGVmZmVjdCB0aGUgcmVzdWx0LgorICAgICAgICBjbGFzcyBNeUxpc3QobGlzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE15VHVwbGUodHVwbGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgZ2VuZXJhdG9yKGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIChvYmogZm9yIG9iaiBpbiBkYXRhKQorICAgICAgICBkYXRhID0gc2VsZi5wcmVwYXJlX2RhdGEoKQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBmb3Iga2luZCBpbiAobGlzdCwgdHVwbGUsIGl0ZXIsIE15TGlzdCwgTXlUdXBsZSwgZ2VuZXJhdG9yKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhraW5kKGRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmFuZ2VfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZnVuY3Rpb25zIHdvcmsgd2l0aCByYW5nZSBvYmplY3RzLgorICAgICAgICBkYXRhID0gcmFuZ2UoMjAsIDUwLCAzKQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhsaXN0KGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9iYWRfYXJnX3R5cGVzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmdW5jdGlvbiByYWlzZXMgd2hlbiBnaXZlbiBkYXRhIG9mIHRoZSB3cm9uZyB0eXBlLgorCisgICAgICAgICMgRG9uJ3Qgcm9sbCB0aGUgZm9sbG93aW5nIGludG8gYSBsb29wIGxpa2UgdGhpczoKKyAgICAgICAgIyAgIGZvciBiYWQgaW4gbGlzdF9vZl9iYWQ6CisgICAgICAgICMgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcihiYWQpCisgICAgICAgICMKKyAgICAgICAgIyBTaW5jZSBhc3NlcnRSYWlzZXMgZG9lc24ndCBzaG93IHRoZSBhcmd1bWVudHMgdGhhdCBjYXVzZWQgdGhlIHRlc3QKKyAgICAgICAgIyBmYWlsdXJlLCBpdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byBkZWJ1ZyB0aGVzZSB0ZXN0IGZhaWx1cmVzIHdoZW4gdGhlCisgICAgICAgICMgZm9sbG93aW5nIGFyZSBpbiBhIGxvb3AuCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcigyMykKKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcig0Mi4wKQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKG9iamVjdCgpKQorCisgICAgZGVmIGNoZWNrX2Zvcl90eXBlX2Vycm9yKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsICphcmdzKQorCisgICAgZGVmIHRlc3RfdHlwZV9vZl9kYXRhX2VsZW1lbnQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhlIHR5cGUgb2YgZGF0YSBlbGVtZW50cyBkb2Vzbid0IGFmZmVjdCB0aGUgbnVtZXJpYyByZXN1bHQuCisgICAgICAgICMgVGhpcyBpcyBhIHdlYWtlciB0ZXN0IHRoYW4gVW5pdmFyaWF0ZVR5cGVNaXhpbi50ZXN0VHlwZXNDb25zZXJ2ZWQsCisgICAgICAgICMgYmVjYXVzZSBpdCBjaGVja3MgdGhlIG51bWVyaWMgcmVzdWx0IGJ5IGVxdWFsaXR5LCBidXQgbm90IGJ5IHR5cGUuCisgICAgICAgIGNsYXNzIE15RmxvYXQoZmxvYXQpOgorICAgICAgICAgICAgZGVmIF9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fdHJ1ZWRpdl9fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fYWRkX18ob3RoZXIpKQorICAgICAgICAgICAgX19yYWRkX18gPSBfX2FkZF9fCisKKyAgICAgICAgcmF3ID0gc2VsZi5wcmVwYXJlX2RhdGEoKQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhyYXcpCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgTXlGbG9hdCwgRGVjaW1hbCwgRnJhY3Rpb24pOgorICAgICAgICAgICAgZGF0YSA9IFtraW5kKHgpIGZvciB4IGluIHJhd10KKyAgICAgICAgICAgIHJlc3VsdCA9IHR5cGUoZXhwZWN0ZWQpKHNlbGYuZnVuYyhkYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworCitjbGFzcyBVbml2YXJpYXRlVHlwZU1peGluOgorICAgICIiIk1peGluIGNsYXNzIGZvciB0eXBlLWNvbnNlcnZpbmcgZnVuY3Rpb25zLgorCisgICAgVGhpcyBtaXhpbiBjbGFzcyBob2xkcyB0ZXN0KHMpIGZvciBmdW5jdGlvbnMgd2hpY2ggY29uc2VydmUgdGhlIHR5cGUgb2YKKyAgICBpbmRpdmlkdWFsIGRhdGEgcG9pbnRzLiBFLmcuIHRoZSBtZWFuIG9mIGEgbGlzdCBvZiBGcmFjdGlvbnMgc2hvdWxkIGl0c2VsZgorICAgIGJlIGEgRnJhY3Rpb24uCisKKyAgICBOb3QgYWxsIHRlc3RzIHRvIGRvIHdpdGggdHlwZXMgbmVlZCBnbyBpbiB0aGlzIGNsYXNzLiBPbmx5IHRob3NlIHRoYXQKKyAgICByZWx5IG9uIHRoZSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHNhbWUgdHlwZSBhcyBpdHMgaW5wdXQgZGF0YS4KKyAgICAiIiIKKyAgICBkZWYgdGVzdF90eXBlc19jb25zZXJ2ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZ1bmN0aW9ucyBrZWVwcyB0aGUgc2FtZSB0eXBlIGFzIHRoZWlyIGRhdGEgcG9pbnRzLgorICAgICAgICAjIChFeGNsdWRlcyBtaXhlZCBkYXRhIHR5cGVzLikgVGhpcyBvbmx5IHRlc3RzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4KKyAgICAgICAgIyByZXN1bHQsIG5vdCB0aGUgdmFsdWUuCisgICAgICAgIGNsYXNzIE15RmxvYXQoZmxvYXQpOgorICAgICAgICAgICAgZGVmIF9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fdHJ1ZWRpdl9fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fc3ViX18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fcnN1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fcnN1Yl9fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX3Bvd19fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fcG93X18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19hZGRfXyhvdGhlcikpCisgICAgICAgICAgICBfX3JhZGRfXyA9IF9fYWRkX18KKworICAgICAgICBkYXRhID0gc2VsZi5wcmVwYXJlX2RhdGEoKQorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIERlY2ltYWwsIEZyYWN0aW9uLCBNeUZsb2F0KToKKyAgICAgICAgICAgIGQgPSBba2luZCh4KSBmb3IgeCBpbiBkYXRhXQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocmVzdWx0KSwga2luZCkKKworCitjbGFzcyBUZXN0U3VtKE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZUNvbW1vbk1peGluLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3QgY2FzZXMgZm9yIHN0YXRpc3RpY3MuX3N1bSgpIGZ1bmN0aW9uLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLl9zdW0KKworICAgIGRlZiB0ZXN0X2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgdGVzdCBmb3IgZW1wdHkgZGF0YS4KKyAgICAgICAgZm9yIGRhdGEgaW4gKFtdLCAoKSwgaXRlcihbXSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyMyksIDIzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMi4zKSwgMi4zKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoWzEsIDUsIDMsIC00LCAtOCwgMjAsIDQyLCAxXSksIDYwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbNCwgMiwgMywgLTgsIDddLCAxMDAwKSwgMTAwOCkKKworICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoWzAuMjVdKjIwKSwgNS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMC4xMjUsIDAuMjUsIDAuNSwgMC43NV0sIDEuNSksIDMuMTI1KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoW0ZyYWN0aW9uKDEsIDEwMDApXSo1MDApLCBGcmFjdGlvbigxLCAyKSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxzKHNlbGYpOgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoIjAuMDAxIiksIEQoIjUuMjQ2IiksIEQoIjEuNzAyIiksIEQoIi0wLjAyNSIpLAorICAgICAgICAgICAgICAgIEQoIjMuOTc0IiksIEQoIjIuMzI4IiksIEQoIjQuNjE3IiksIEQoIjIuODQzIiksCisgICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRGVjaW1hbCgiMjAuNjg2IikpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3dpdGhfbWF0aF9mc3VtKHNlbGYpOgorICAgICAgICAjIENvbXBhcmUgd2l0aCB0aGUgbWF0aC5mc3VtIGZ1bmN0aW9uLgorICAgICAgICAjIElkZWFsbHkgd2Ugb3VnaHQgdG8gZ2V0IHRoZSBleGFjdCBzYW1lIHJlc3VsdCwgYnV0IHNvbWV0aW1lcworICAgICAgICAjIHdlIGRpZmZlciBieSBhIHZlcnkgc2xpZ2h0IGFtb3VudCA6LSgKKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTAwLCAxMDAwKSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSksIG1hdGguZnN1bShkYXRhKSwgcmVsPTJlLTE2KQorCisgICAgZGVmIHRlc3Rfc3RhcnRfYXJndW1lbnQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBvcHRpb25hbCBzdGFydCBhcmd1bWVudCB3b3JrcyBjb3JyZWN0bHkuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oMSwgMTAwMCkgZm9yIF8gaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAgdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQrNDIsIHNlbGYuZnVuYyhkYXRhLCA0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC0yMywgc2VsZi5mdW5jKGRhdGEsIC0yMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCsxZTIwLCBzZWxmLmZ1bmMoZGF0YSwgMWUyMCkpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdzX2ZhaWwoc2VsZik6CisgICAgICAgICMgU3VtIG9mIHN0cmluZ3Mgc2hvdWxkIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgM10sICc5OTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIsIDMsICc5OTknXSkKKworICAgIGRlZiB0ZXN0X2J5dGVzX2ZhaWwoc2VsZik6CisgICAgICAgICMgU3VtIG9mIGJ5dGVzIHNob3VsZCBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIsIDNdLCBiJzk5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgMywgYic5OTknXSkKKworICAgIGRlZiB0ZXN0X21peGVkX3N1bShzZWxmKToKKyAgICAgICAgIyBNaXhlZCBpbnB1dCB0eXBlcyBhcmUgbm90IChjdXJyZW50bHkpIGFsbG93ZWQuCisgICAgICAgICMgQ2hlY2sgdGhhdCBtaXhlZCBkYXRhIHR5cGVzIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMi4wLCBGcmFjdGlvbigxLCAyKV0pCisgICAgICAgICMgQW5kIHNvIGRvZXMgbWl4ZWQgc3RhcnQgYXJndW1lbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMi4wXSwgRGVjaW1hbCgxKSkKKworCitjbGFzcyBTdW1Ub3J0dXJlVGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RvcnR1cmUoc2VsZik6CisgICAgICAgICMgVGltIFBldGVycycgdG9ydHVyZSB0ZXN0IGZvciBzdW0sIGFuZCB2YXJpYW50cyBvZiBzYW1lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX3N1bShbMSwgMWUxMDAsIDEsIC0xZTEwMF0qMTAwMDApLCAyMDAwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX3N1bShbMWUxMDAsIDEsIDEsIC0xZTEwMF0qMTAwMDApLCAyMDAwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKAorICAgICAgICAgICAgc3RhdGlzdGljcy5fc3VtKFsxZS0xMDAsIDEsIDFlLTEwMCwgLTFdKjEwMDAwKSwgMi4wZS05NiwgcmVsPTVlLTE2CisgICAgICAgICAgICApCisKKworY2xhc3MgU3VtU3BlY2lhbFZhbHVlcyhOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGF0IHN1bSB3b3JrcyBjb3JyZWN0bHkgd2l0aCBJRUVFLTc1NCBzcGVjaWFsIHZhbHVlcy4KKworICAgIGRlZiB0ZXN0X25hbihzZWxmKToKKyAgICAgICAgZm9yIHR5cGVfIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBuYW4gPSB0eXBlXygnbmFuJykKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgbmFuLCAyXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyZXN1bHQpLCB0eXBlXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgY2hlY2tfaW5maW5pdHkoc2VsZiwgeCwgaW5mKToKKyAgICAgICAgIiIiQ2hlY2sgeCBpcyBhbiBpbmZpbml0eSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBzaWduIGFzIGluZi4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh4KSwgdHlwZShpbmYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPiAwLCBpbmYgPiAwKQorICAgICAgICBhc3NlcnQgeCA9PSBpbmYKKworICAgIGRlZiBkb190ZXN0X2luZihzZWxmLCBpbmYpOgorICAgICAgICAjIEFkZGluZyBhIHNpbmdsZSBpbmZpbml0eSBnaXZlcyBpbmZpbml0eS4KKyAgICAgICAgcmVzdWx0ID0gc3RhdGlzdGljcy5fc3VtKFsxLCAyLCBpbmYsIDNdKQorICAgICAgICBzZWxmLmNoZWNrX2luZmluaXR5KHJlc3VsdCwgaW5mKQorICAgICAgICAjIEFkZGluZyB0d28gaW5maW5pdGllcyBvZiB0aGUgc2FtZSBzaWduIGFsc28gZ2l2ZXMgaW5maW5pdHkuCisgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgMiwgaW5mLCAzLCBpbmYsIDRdKQorICAgICAgICBzZWxmLmNoZWNrX2luZmluaXR5KHJlc3VsdCwgaW5mKQorCisgICAgZGVmIHRlc3RfZmxvYXRfaW5mKHNlbGYpOgorICAgICAgICBpbmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgZm9yIHNpZ24gaW4gKCsxLCAtMSk6CisgICAgICAgICAgICBzZWxmLmRvX3Rlc3RfaW5mKHNpZ24qaW5mKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9pbmYoc2VsZik6CisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGZvciBzaWduIGluICgrMSwgLTEpOgorICAgICAgICAgICAgc2VsZi5kb190ZXN0X2luZihzaWduKmluZikKKworICAgIGRlZiB0ZXN0X2Zsb2F0X21pc21hdGNoZWRfaW5mcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWRkaW5nIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24gZ2l2ZXMgYSBOQU4uCisgICAgICAgIGluZiA9IGZsb2F0KCdpbmYnKQorICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIDIsIGluZiwgMywgLWluZiwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX21pc21hdGNoZWRfaW5mc190b19uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgRGVjaW1hbCBJTkZzIHdpdGggb3Bwb3NpdGUgc2lnbiByZXR1cm5zIE5BTi4KKyAgICAgICAgaW5mID0gRGVjaW1hbCgnaW5mJykKKyAgICAgICAgZGF0YSA9IFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdCisgICAgICAgIHdpdGggZGVjaW1hbC5sb2NhbGNvbnRleHQoZGVjaW1hbC5FeHRlbmRlZENvbnRleHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oc3RhdGlzdGljcy5fc3VtKGRhdGEpKSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfbWlzbWF0Y2hlZF9pbmZzX3RvX25hbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGFkZGluZyBEZWNpbWFsIElORnMgd2l0aCBvcHBvc2l0ZSBzaWduIHJhaXNlcyBJbnZhbGlkT3BlcmF0aW9uLgorICAgICAgICBpbmYgPSBEZWNpbWFsKCdpbmYnKQorICAgICAgICBkYXRhID0gWzEsIDIsIGluZiwgMywgLWluZiwgNF0KKyAgICAgICAgd2l0aCBkZWNpbWFsLmxvY2FsY29udGV4dChkZWNpbWFsLkJhc2ljQ29udGV4dCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkZWNpbWFsLkludmFsaWRPcGVyYXRpb24sIHN0YXRpc3RpY3MuX3N1bSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfc25hbl9yYWlzZXMoc2VsZik6CisgICAgICAgICMgQWRkaW5nIHNOQU4gc2hvdWxkIHJhaXNlIEludmFsaWRPcGVyYXRpb24uCisgICAgICAgIHNOQU4gPSBEZWNpbWFsKCdzTkFOJykKKyAgICAgICAgZGF0YSA9IFsxLCBzTkFOLCAyXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkZWNpbWFsLkludmFsaWRPcGVyYXRpb24sIHN0YXRpc3RpY3MuX3N1bSwgZGF0YSkKKworCisjID09PSBUZXN0cyBmb3IgYXZlcmFnZXMgPT09CisKK2NsYXNzIEF2ZXJhZ2VNaXhpbihVbml2YXJpYXRlQ29tbW9uTWl4aW4pOgorICAgICMgTWl4aW4gY2xhc3MgaG9sZGluZyBjb21tb24gdGVzdHMgZm9yIGF2ZXJhZ2VzLgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIEF2ZXJhZ2Ugb2YgYSBzaW5nbGUgdmFsdWUgaXMgdGhlIHZhbHVlIGl0c2VsZi4KKyAgICAgICAgZm9yIHggaW4gKDIzLCA0Mi41LCAxLjNlMTUsIEZyYWN0aW9uKDE1LCAxOSksIERlY2ltYWwoJzAuMjgnKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbeF0pLCB4KQorCisgICAgZGVmIHRlc3RfcmVwZWF0ZWRfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIFRoZSBhdmVyYWdlIG9mIGEgc2luZ2xlIHJlcGVhdGVkIHZhbHVlIGlzIHRoZSB2YWx1ZSBpdHNlbGYuCisgICAgICAgIGZvciB4IGluICgzLjUsIDE3LCAyLjVlMTUsIEZyYWN0aW9uKDYxLCA2NyksIERlY2ltYWwoJzQuOTcxMicpKToKKyAgICAgICAgICAgIGZvciBjb3VudCBpbiAoMiwgNSwgMTAsIDIwKToKKyAgICAgICAgICAgICAgICBkYXRhID0gW3hdKmNvdW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIHgpCisKKworY2xhc3MgVGVzdE1lYW4oTnVtZXJpY1Rlc3RDYXNlLCBBdmVyYWdlTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWFuCisKKyAgICBkZWYgdGVzdF90b3J0dXJlX3BlcChzZWxmKToKKyAgICAgICAgIyAiVG9ydHVyZSBUZXN0IiBmcm9tIFBFUC00NTAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFsxZTEwMCwgMSwgMywgLTFlMTAwXSksIDEpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGludHMuCisgICAgICAgIGRhdGEgPSBbMCwgMSwgMiwgMywgMywgMywgNCwgNSwgNSwgNiwgNywgNywgNywgNywgOCwgOV0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQuODEyNSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBmbG9hdHMuCisgICAgICAgIGRhdGEgPSBbMTcuMjUsIDE5Ljc1LCAyMC4wLCAyMS41LCAyMS43NSwgMjMuMjUsIDI1LjEyNSwgMjcuNV0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDIyLjAxNTYyNSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGludHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMS42MzQiKSwgRCgiMi41MTciKSwgRCgiMy45MTIiKSwgRCgiNC4wNzIiKSwgRCgiNS44MTMiKV0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoIjMuNTg5NiIpKQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCAyKSwgRigyLCAzKSwgRigzLCA0KSwgRig0LCA1KSwgRig1LCA2KSwgRig2LCA3KSwgRig3LCA4KV0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMTQ3OSwgMTk2MCkpCisKKyAgICBkZWYgdGVzdF9pbmYoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW5maW5pdGllcy4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDUsIDcsIDldICAjIFVzZSBvbmx5IGludHMsIHRvIGF2b2lkIFR5cGVFcnJvciBsYXRlci4KKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGZvciBzaWduIGluICgxLCAtMSk6CisgICAgICAgICAgICAgICAgaW5mID0ga2luZCgiaW5mIikqc2lnbgorICAgICAgICAgICAgICAgIGRhdGEgPSByYXcgKyBbaW5mXQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGluZikKKworICAgIGRlZiB0ZXN0X21pc21hdGNoZWRfaW5mcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24uCisgICAgICAgIGRhdGEgPSBbMiwgNCwgNiwgZmxvYXQoJ2luZicpLCAxLCAzLCA1LCBmbG9hdCgnLWluZicpXQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X25hbihzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBOQU5zLgorICAgICAgICByYXcgPSBbMSwgMywgNSwgNywgOV0gICMgVXNlIG9ubHkgaW50cywgdG8gYXZvaWQgVHlwZUVycm9yIGxhdGVyLgorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgaW5mID0ga2luZCgibmFuIikKKyAgICAgICAgICAgIGRhdGEgPSByYXcgKyBbaW5mXQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfYmlnX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgYSBsYXJnZSBjb25zdGFudCB0byBldmVyeSBkYXRhIHBvaW50LgorICAgICAgICBjID0gMWU5CisgICAgICAgIGRhdGEgPSBbMy40LCA0LjUsIDQuOSwgNi43LCA2LjgsIDcuMiwgOC4wLCA4LjEsIDkuNF0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkgKyBjCisgICAgICAgIGFzc2VydCBleHBlY3RlZCAhPSBjCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhbeCtjIGZvciB4IGluIGRhdGFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kb3VibGVkX2RhdGEoc2VsZik6CisgICAgICAgICMgTWVhbiBvZiBbYSxiLGMuLi56XSBzaG91bGQgYmUgc2FtZSBhcyBmb3IgW2EsYSxiLGIsYyxjLi4ueix6XS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMywgNSkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIGFjdHVhbCA9IHNlbGYuZnVuYyhkYXRhKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlZ3Jlc3Npb25fMjA1NjEoc2VsZik6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBpc3N1ZSAyMDU2MS4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwNTYxCisgICAgICAgIGQgPSBEZWNpbWFsKCcxZTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MubWVhbihbZF0pLCBkKQorCisKK2NsYXNzIFRlc3RNZWRpYW4oTnVtZXJpY1Rlc3RDYXNlLCBBdmVyYWdlTWl4aW4pOgorICAgICMgQ29tbW9uIHRlc3RzIGZvciBtZWRpYW4gYW5kIGFsbCBtZWRpYW4uKiBmdW5jdGlvbnMuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbgorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiT3ZlcmxvYWQgbWV0aG9kIGZyb20gVW5pdmFyaWF0ZUNvbW1vbk1peGluLiIiIgorICAgICAgICBkYXRhID0gc3VwZXIoKS5wcmVwYXJlX2RhdGEoKQorICAgICAgICBpZiBsZW4oZGF0YSklMiAhPSAxOgorICAgICAgICAgICAgZGF0YS5hcHBlbmQoMikKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X2V2ZW5faW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludCBkYXRhIHBvaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy41KQorCisgICAgZGVmIHRlc3Rfb2RkX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd2l0aCBhbiBvZGQgbnVtYmVyIG9mIGludCBkYXRhIHBvaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA5XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNCkKKworICAgIGRlZiB0ZXN0X29kZF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMywgNykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KSwgRig2LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMSwgMikpCisKKyAgICBkZWYgdGVzdF9vZGRfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzIuNScpLCBEKCczLjEnKSwgRCgnNC4yJyksIEQoJzUuNycpLCBEKCc1LjgnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzQuMicpKQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzEuMicpLCBEKCcyLjUnKSwgRCgnMy4xJyksIEQoJzQuMicpLCBEKCc1LjcnKSwgRCgnNS44JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCczLjY1JykpCisKKworY2xhc3MgVGVzdE1lZGlhbkRhdGFUeXBlKE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0IGNvbnNlcnZhdGlvbiBvZiBkYXRhIGVsZW1lbnQgdHlwZSBmb3IgbWVkaWFuLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW4KKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDE1KSkKKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgd2hpbGUgZGF0YSA9PSBzb3J0ZWQoZGF0YSk6CisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICByZXR1cm4gZGF0YQorCisKK2NsYXNzIFRlc3RNZWRpYW5Mb3coVGVzdE1lZGlhbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbl9sb3cKKworICAgIGRlZiB0ZXN0X2V2ZW5faW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd2l0aCBhbiBldmVuIG51bWJlciBvZiBpbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzKQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fbG93IHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigzLCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fbG93IHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMS4xJyksIEQoJzIuMicpLCBEKCczLjMnKSwgRCgnNC40JyksIEQoJzUuNScpLCBEKCc2LjYnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzMuMycpKQorCisKK2NsYXNzIFRlc3RNZWRpYW5IaWdoKFRlc3RNZWRpYW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW5faGlnaAorCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2hpZ2ggd2l0aCBhbiBldmVuIG51bWJlciBvZiBpbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0KQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KSwgRig2LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoNCwgNykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2hpZ2ggd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcxLjEnKSwgRCgnMi4yJyksIEQoJzMuMycpLCBEKCc0LjQnKSwgRCgnNS41JyksIEQoJzYuNicpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnNC40JykpCisKKworY2xhc3MgVGVzdE1lZGlhbkdyb3VwZWQoVGVzdE1lZGlhbik6CisgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkLgorICAgICMgRG9lc24ndCBjb25zZXJ2ZSBkYXRhIGVsZW1lbnQgdHlwZXMsIHNvIGRvbid0IHVzZSBUZXN0TWVkaWFuVHlwZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuX2dyb3VwZWQKKworICAgIGRlZiB0ZXN0X29kZF9udW1iZXJfcmVwZWF0ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4uZ3JvdXBlZCB3aXRoIHJlcGVhdGVkIG1lZGlhbiB2YWx1ZXMuCisgICAgICAgIGRhdGEgPSBbMTIsIDEzLCAxNCwgMTQsIDE0LCAxNSwgMTVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAxNCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzEyLCAxMywgMTQsIDE0LCAxNCwgMTQsIDE1XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMTMuODc1KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbNSwgMTAsIDEwLCAxNSwgMjAsIDIwLCAyMCwgMjAsIDI1LCAyNSwgMzBdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDUpLCAxOS4zNzUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsxNiwgMTgsIDE4LCAxOCwgMTgsIDIwLCAyMCwgMjAsIDIyLCAyMiwgMjIsIDI0LCAyNCwgMjYsIDI4XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyKSwgMjAuNjY2NjY2NjcsIHRvbD0xZS04KQorCisgICAgZGVmIHRlc3RfZXZlbl9udW1iZXJfcmVwZWF0ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4uZ3JvdXBlZCB3aXRoIHJlcGVhdGVkIG1lZGlhbiB2YWx1ZXMuCisgICAgICAgIGRhdGEgPSBbNSwgMTAsIDEwLCAxNSwgMjAsIDIwLCAyMCwgMjUsIDI1LCAzMF0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSwgNSksIDE5LjE2NjY2NjY3LCB0b2w9MWUtOCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzIsIDMsIDQsIDQsIDQsIDVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjgzMzMzMzMzLCB0b2w9MWUtOCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzIsIDMsIDMsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDYsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0LjUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFszLCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA2LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNC43NSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSBtZXRob2QgZnJvbSBBdmVyYWdlTWl4aW4uCisgICAgICAgICMgWWV0IGFnYWluLCBmYWlsdXJlIG9mIG1lZGlhbl9ncm91cGVkIHRvIGNvbnNlcnZlIHRoZSBkYXRhIHR5cGUKKyAgICAgICAgIyBjYXVzZXMgbWUgaGVhZGFjaGVzIDotKAorICAgICAgICBmb3IgeCBpbiAoNS4zLCA2OCwgNC4zZTE3LCBGcmFjdGlvbigyOSwgMTAxKSwgRGVjaW1hbCgnMzIuOTcxNCcpKToKKyAgICAgICAgICAgIGZvciBjb3VudCBpbiAoMiwgNSwgMTAsIDIwKToKKyAgICAgICAgICAgICAgICBkYXRhID0gW3hdKmNvdW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGZsb2F0KHgpKQorCisgICAgZGVmIHRlc3Rfb2RkX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoNSwgNCksIEYoOSwgNCksIEYoMTMsIDQpLCBGKDEzLCA0KSwgRigxNywgNCldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjApCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDUsIDQpLCBGKDksIDQpLCBGKDEzLCA0KSwgRigxMywgNCksIEYoMTcsIDQpLCBGKDE3LCA0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuMjUpCisKKyAgICBkZWYgdGVzdF9vZGRfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnNS41JyksIEQoJzYuNScpLCBEKCc2LjUnKSwgRCgnNy41JyksIEQoJzguNScpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNi43NSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzUuNScpLCBEKCc1LjUnKSwgRCgnNi41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA2LjUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFtEKCc1LjUnKSwgRCgnNS41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnNy41JyksIEQoJzguNScpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNy4wKQorCisgICAgZGVmIHRlc3RfaW50ZXJ2YWwoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3aXRoIGludGVydmFsIGFyZ3VtZW50LgorICAgICAgICBkYXRhID0gWzIuMjUsIDIuNSwgMi41LCAyLjc1LCAyLjc1LCAzLjAsIDMuMCwgMy4yNSwgMy41LCAzLjc1XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAwLjI1KSwgMi44NzUpCisgICAgICAgIGRhdGEgPSBbMi4yNSwgMi41LCAyLjUsIDIuNzUsIDIuNzUsIDIuNzUsIDMuMCwgMy4wLCAzLjI1LCAzLjUsIDMuNzVdCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDAuMjUpLCAyLjgzMzMzMzMzLCB0b2w9MWUtOCkKKyAgICAgICAgZGF0YSA9IFsyMjAsIDIyMCwgMjQwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI4MCwgMjgwLCAzMDAsIDMyMCwgMzQwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyMCksIDI2NS4wKQorCisKK2NsYXNzIFRlc3RNb2RlKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3QgY2FzZXMgZm9yIHRoZSBkaXNjcmV0ZSB2ZXJzaW9uIG9mIG1vZGUuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1vZGUKKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgICIiIk92ZXJsb2FkIG1ldGhvZCBmcm9tIFVuaXZhcmlhdGVDb21tb25NaXhpbi4iIiIKKyAgICAgICAgIyBNYWtlIHN1cmUgdGVzdCBkYXRhIGhhcyBleGFjdGx5IG9uZSBtb2RlLgorICAgICAgICByZXR1cm4gWzEsIDEsIDEsIDEsIDMsIDQsIDcsIDksIDAsIDgsIDJdCisKKyAgICBkZWYgdGVzdF9yYW5nZV9kYXRhKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIHRlc3QgZnJvbSBVbml2YXJpYXRlQ29tbW9uTWl4aW4uCisgICAgICAgIGRhdGEgPSByYW5nZSgyMCwgNTAsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9ub21pbmFsX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggbm9taW5hbCBkYXRhLgorICAgICAgICBkYXRhID0gJ2FiY2JkYicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksICdiJykKKyAgICAgICAgZGF0YSA9ICdmZSBmaSBmbyBmdW0gZmkgZmknLnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksICdmaScpCisKKyAgICBkZWYgdGVzdF9kaXNjcmV0ZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSB3aXRoIGRpc2NyZXRlIG51bWVyaWMgZGF0YS4KKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTApKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBkID0gZGF0YSArIFtpXQorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGQpLCBpKQorCisgICAgZGVmIHRlc3RfYmltb2RhbF9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSB3aXRoIGJpbW9kYWwgZGF0YS4KKyAgICAgICAgZGF0YSA9IFsxLCAxLCAyLCAyLCAyLCAyLCAzLCA0LCA1LCA2LCA2LCA2LCA2LCA3LCA4LCA5LCA5XQorICAgICAgICBhc3NlcnQgZGF0YS5jb3VudCgyKSA9PSBkYXRhLmNvdW50KDYpID09IDQKKyAgICAgICAgIyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdW5pcXVlX2RhdGFfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgZXhjZXB0aW9uIHdoZW4gZGF0YSBwb2ludHMgYXJlIGFsbCB1bmlxdWUuCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworICAgIGRlZiB0ZXN0X25vbmVfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgbW9kZSByYWlzZXMgVHlwZUVycm9yIGlmIGdpdmVuIE5vbmUgYXMgZGF0YS4KKworICAgICAgICAjIFRoaXMgdGVzdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgbW9kZSB1c2VzCisgICAgICAgICMgY29sbGVjdGlvbnMuQ291bnRlciwgd2hpY2ggYWNjZXB0cyBOb25lIGFuZCByZXR1cm5zIGFuIGVtcHR5IGRpY3QuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBOb25lKQorCisgICAgZGVmIHRlc3RfY291bnRlcl9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhIENvdW50ZXIgaXMgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBpdGVyYWJsZS4KKyAgICAgICAgZGF0YSA9IGNvbGxlY3Rpb25zLkNvdW50ZXIoWzEsIDEsIDEsIDJdKQorICAgICAgICAjIFNpbmNlIHRoZSBrZXlzIG9mIHRoZSBjb3VudGVyIGFyZSB0cmVhdGVkIGFzIGRhdGEgcG9pbnRzLCBub3QgdGhlCisgICAgICAgICMgY291bnRzLCB0aGlzIHNob3VsZCByYWlzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworCisKKyMgPT09IFRlc3RzIGZvciB2YXJpYW5jZXMgYW5kIHN0YW5kYXJkIGRldmlhdGlvbnMgPT09CisKK2NsYXNzIFZhcmlhbmNlU3RkZXZNaXhpbihVbml2YXJpYXRlQ29tbW9uTWl4aW4pOgorICAgICMgTWl4aW4gY2xhc3MgaG9sZGluZyBjb21tb24gdGVzdHMgZm9yIHZhcmlhbmNlIGFuZCBzdGQgZGV2LgorCisgICAgIyBTdWJjbGFzc2VzIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcyBiZWZvcmUgTnVtZXJpY1Rlc3RDbGFzcywgaW4gb3JkZXIKKyAgICAjIHRvIHNlZSB0aGUgcmVsIGF0dHJpYnV0ZSBiZWxvdy4gU2VlIHRlc3RTaGlmdERhdGEgZm9yIGFuIGV4cGxhbmF0aW9uLgorCisgICAgcmVsID0gMWUtMTIKKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBEZXZpYXRpb24gb2YgYSBzaW5nbGUgdmFsdWUgaXMgemVyby4KKyAgICAgICAgZm9yIHggaW4gKDExLCAxOS44LCA0LjZlMTQsIEZyYWN0aW9uKDIxLCAzNCksIERlY2ltYWwoJzguMzkyJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoW3hdKSwgMCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUaGUgZGV2aWF0aW9uIG9mIGEgc2luZ2xlIHJlcGVhdGVkIHZhbHVlIGlzIHplcm8uCisgICAgICAgIGZvciB4IGluICg3LjIsIDQ5LCA4LjFlMTUsIEZyYWN0aW9uKDMsIDcpLCBEZWNpbWFsKCc2Mi40ODAyJykpOgorICAgICAgICAgICAgZm9yIGNvdW50IGluICgyLCAzLCA1LCAxNSk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAwKQorCisgICAgZGVmIHRlc3RfZG9tYWluX2Vycm9yX3JlZ3Jlc3Npb24oc2VsZik6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBhIGRvbWFpbiBlcnJvciBleGNlcHRpb24uCisgICAgICAgICMgKFRoYW5rcyB0byBHZXJlbXkgQ29uZHJhLikKKyAgICAgICAgZGF0YSA9IFswLjEyMzQ1Njc4OTAxMjM0NV0qMTAwMDAKKyAgICAgICAgIyBBbGwgdGhlIGl0ZW1zIGFyZSBpZGVudGljYWwsIHNvIHZhcmlhbmNlIHNob3VsZCBiZSBleGFjdGx5IHplcm8uCisgICAgICAgICMgV2UgYWxsb3cgc29tZSBzbWFsbCByb3VuZC1vZmYgZXJyb3IsIGJ1dCBub3QgbXVjaC4KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwocmVzdWx0LCAwLjAsIHRvbD01ZS0xNykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocmVzdWx0LCAwKSAgIyBBIG5lZ2F0aXZlIHJlc3VsdCBtdXN0IGZhaWwuCisKKyAgICBkZWYgdGVzdF9zaGlmdF9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzaGlmdGluZyB0aGUgZGF0YSBieSBhIGNvbnN0YW50IGFtb3VudCBkb2VzIG5vdCBhZmZlY3QKKyAgICAgICAgIyB0aGUgdmFyaWFuY2Ugb3Igc3RkZXYuIE9yIGF0IGxlYXN0IG5vdCBtdWNoLgorCisgICAgICAgICMgRHVlIHRvIHJvdW5kaW5nLCB0aGlzIHRlc3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gaWRlYWwuIFdlIGFsbG93CisgICAgICAgICMgc29tZSB0b2xlcmFuY2UgYXdheSBmcm9tICJubyBjaGFuZ2UgYXQgYWxsIiBieSBzZXR0aW5nIHRvbCBhbmQvb3IgcmVsCisgICAgICAgICMgYXR0cmlidXRlcy4gU3ViY2xhc3NlcyBtYXkgc2V0IHRpZ2h0ZXIgb3IgbG9vc2VyIGVycm9yIHRvbGVyYW5jZXMuCisgICAgICAgIHJhdyA9IFsxLjAzLCAxLjI3LCAxLjk0LCAyLjA0LCAyLjU4LCAzLjE0LCA0Ljc1LCA0Ljk4LCA1LjQyLCA2Ljc4XQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhyYXcpCisgICAgICAgICMgRG9uJ3Qgc2V0IHNoaWZ0IHRvbyBoaWdoLCB0aGUgYmlnZ2VyIGl0IGlzLCB0aGUgbW9yZSByb3VuZGluZyBlcnJvci4KKyAgICAgICAgc2hpZnQgPSAxZTUKKyAgICAgICAgZGF0YSA9IFt4ICsgc2hpZnQgZm9yIHggaW4gcmF3XQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zaGlmdF9kYXRhX2V4YWN0KHNlbGYpOgorICAgICAgICAjIExpa2UgdGVzdF9zaGlmdF9kYXRhLCBidXQgcmVzdWx0IGlzIGFsd2F5cyBleGFjdC4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDMsIDQsIDUsIDcsIDksIDEwLCAxMSwgMTZdCisgICAgICAgIGFzc2VydCBhbGwoeD09aW50KHgpIGZvciB4IGluIHJhdykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICBzaGlmdCA9IDEwKio5CisgICAgICAgIGRhdGEgPSBbeCArIHNoaWZ0IGZvciB4IGluIHJhd10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaXRlcl9saXN0X3NhbWUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGl0ZXIgZGF0YSBhbmQgbGlzdCBkYXRhIGdpdmUgdGhlIHNhbWUgcmVzdWx0LgorCisgICAgICAgICMgVGhpcyBpcyBhbiBleHBsaWNpdCB0ZXN0IHRoYXQgaXRlcmF0b3JzIGFuZCBsaXN0cyBhcmUgdHJlYXRlZCB0aGUKKyAgICAgICAgIyBzYW1lOyBqdXN0aWZpY2F0aW9uIGZvciB0aGlzIHRlc3Qgb3ZlciBhbmQgYWJvdmUgdGhlIHNpbWlsYXIgdGVzdAorICAgICAgICAjIGluIFVuaXZhcmlhdGVDb21tb25NaXhpbiBpcyB0aGF0IGFuIGVhcmxpZXIgZGVzaWduIGhhZCB2YXJpYW5jZSBhbmQKKyAgICAgICAgIyBmcmllbmRzIHN3YXAgYmV0d2VlbiBvbmUtIGFuZCB0d28tcGFzcyBhbGdvcml0aG1zLCB3aGljaCB3b3VsZAorICAgICAgICAjIHNvbWV0aW1lcyBnaXZlIGRpZmZlcmVudCByZXN1bHRzLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0zLCA4KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoaXRlcihkYXRhKSksIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RQVmFyaWFuY2UoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdHMgZm9yIHBvcHVsYXRpb24gdmFyaWFuY2UuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnB2YXJpYW5jZQorCisgICAgZGVmIHRlc3RfZXhhY3RfdW5pZm9ybShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSB2YXJpYW5jZSBhZ2FpbnN0IGFuIGV4YWN0IHJlc3VsdCBmb3IgdW5pZm9ybSBkYXRhLgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMDAwMCkpCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIGV4cGVjdGVkID0gKDEwMDAwKioyIC0gMSkvMTIgICMgRXhhY3QgdmFsdWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggaW50IGRhdGEuCisgICAgICAgIGRhdGEgPSBbNCwgNywgMTMsIDE2XQorICAgICAgICBleGFjdCA9IDIyLjUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4YWN0KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgcG9wdWxhdGlvbiB2YXJpYW5jZSB3aXRoIEZyYWN0aW9uIGRhdGEuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNCksIEYoMSwgNCksIEYoMywgNCksIEYoNywgNCldCisgICAgICAgIGV4YWN0ID0gRigzLCA4KQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBGcmFjdGlvbikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgcG9wdWxhdGlvbiB2YXJpYW5jZSB3aXRoIERlY2ltYWwgZGF0YS4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCIxMi4xIiksIEQoIjEyLjIiKSwgRCgiMTIuNSIpLCBEKCIxMi45IildCisgICAgICAgIGV4YWN0ID0gRCgnMC4wOTY4NzUnKQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBEZWNpbWFsKQorCisKK2NsYXNzIFRlc3RWYXJpYW5jZShWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0cyBmb3Igc2FtcGxlIHZhcmlhbmNlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy52YXJpYW5jZQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIFZhcmlhbmNlU3RkZXZNaXhpbi4KKyAgICAgICAgZm9yIHggaW4gKDM1LCAyNC43LCA4LjJlMTUsIEZyYWN0aW9uKDE5LCAzMCksIERlY2ltYWwoJzQuMjA4NCcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIFt4XSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBpbnQgZGF0YS4KKyAgICAgICAgZGF0YSA9IFs0LCA3LCAxMywgMTZdCisgICAgICAgIGV4YWN0ID0gMzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4YWN0KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2FtcGxlIHZhcmlhbmNlIHdpdGggRnJhY3Rpb24gZGF0YS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA0KSwgRigxLCA0KSwgRigzLCA0KSwgRig3LCA0KV0KKyAgICAgICAgZXhhY3QgPSBGKDEsIDIpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIEZyYWN0aW9uKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBEZWNpbWFsIGRhdGEuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgyKSwgRCgyKSwgRCg3KSwgRCg5KV0KKyAgICAgICAgZXhhY3QgPSA0KkQoJzkuNScpL0QoMykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRGVjaW1hbCkKKworCitjbGFzcyBUZXN0UFN0ZGV2KFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MucHN0ZGV2CisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvX3ZhcmlhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzdGRldiBpcywgaW4gZmFjdCwgdGhlIHNxdWFyZSByb290IG9mIHZhcmlhbmNlLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xNywgMjQpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IG1hdGguc3FydChzdGF0aXN0aWNzLnB2YXJpYW5jZShkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RTdGRldihWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3Igc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3Muc3RkZXYKKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSBtZXRob2QgZnJvbSBWYXJpYW5jZVN0ZGV2TWl4aW4uCisgICAgICAgIGZvciB4IGluICg4MSwgMjAzLjc0LCAzLjllMTQsIEZyYWN0aW9uKDUsIDIxKSwgRGVjaW1hbCgnMzUuNzE5JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgW3hdKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV90b192YXJpYW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc3RkZXYgaXMsIGluIGZhY3QsIHRoZSBzcXVhcmUgcm9vdCBvZiB2YXJpYW5jZS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMiwgOSkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gbWF0aC5zcXJ0KHN0YXRpc3RpY3MudmFyaWFuY2UoZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworCisjID09PSBSdW4gdGVzdHMgPT09CisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIGlnbm9yZSk6CisgICAgIiIiVXNlZCBmb3IgZG9jdGVzdC91bml0dGVzdCBpbnRlZ3JhdGlvbi4iIiIKKyAgICB0ZXN0cy5hZGRUZXN0cyhkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgpKQorICAgIHJldHVybiB0ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQppbmRleCA0ZjM5Y2M3Li43NzJjZDA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKQEAgLTE4MiwxNSArMTgyLDE1IEBACiAgICAgYSBkYXRlIGJlZm9yZSAxOTAwIGlzIHBhc3NlZCB3aXRoIGEgZm9ybWF0IHN0cmluZyBjb250YWluaW5nICIleSIKICAgICAiIiIKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiT25seSBhcHBsaWVzIHRvIFdpbmRvd3MiKQotICAgIGRlZiB0ZXN0X3lfYmVmb3JlXzE5MDBfd2luKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJXkiLCAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiRG9lc24ndCBhcHBseSBvbiBXaW5kb3dzIikKLSAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwX25vbndpbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjk5IikKKyAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMzY3NCwgIzE5NjM0CisgICAgICAgIHQgPSAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiCisgICAgICAgIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgiYWl4IiwgInN1bm9zIiwgInNvbGFyaXMiKSkpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsIHQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuc3RyZnRpbWUoIiV5IiwgdCksICI5OSIpCiAKICAgICBkZWYgdGVzdF95XzE5MDAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCkBAIC0yMDAsOCArMjAwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDIwMTMsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjEzIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cmZ0aW1lVGVzdCwgWTE5MDBUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQppbmRleCBjMmJkZmRiLi4zZTY1MDcxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQpAQCAtMzIsNiArMzIsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJmb297MH0iLCAiYmFyIiksICJmb29iYXIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoImZvb3sxfXswfS17MX0iLCAiYmFyIiwgNiksICJmb282YmFyLTYiKQogCisgICAgZGVmIHRlc3RfYXV0b19udW1iZXJpbmcoc2VsZik6CisgICAgICAgIGZtdCA9IHN0cmluZy5Gb3JtYXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoJ2Zvb3t9e30nLCAnYmFyJywgNiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvb3t9e30nLmZvcm1hdCgnYmFyJywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnZm9vezF9e251bX17MX0nLCBOb25lLCAnYmFyJywgbnVtPTYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmb297MX17bnVtfXsxfScuZm9ybWF0KE5vbmUsICdiYXInLCBudW09NikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnezpee319JywgJ2JhcicsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7Ol57fX0nLmZvcm1hdCgnYmFyJywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnezpee3BhZH19e30nLCAnZm9vJywgJ2JhcicsIHBhZD02KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezpee3BhZH19e30nLmZvcm1hdCgnZm9vJywgJ2JhcicsIHBhZD02KSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZm10LmZvcm1hdCgnZm9vezF9e30nLCAnYmFyJywgNikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZm10LmZvcm1hdCgnZm9ve317MX0nLCAnYmFyJywgNikKKwogICAgIGRlZiB0ZXN0X2NvbnZlcnNpb25fc3BlY2lmaWVycyhzZWxmKToKICAgICAgICAgZm10ID0gc3RyaW5nLkZvcm1hdHRlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiLXthcmchcn0tIiwgYXJnPSd0ZXN0JyksICItJ3Rlc3QnLSIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CmluZGV4IGM1OTc5ZmMuLjQxYjZlNWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgImV4cGVjdGVkIFZhbHVlRXJyb3IiCiAKLSAgICBAdGVzdC5zdXBwb3J0LmJpZ21lbXRlc3Qoc2l6ZT10ZXN0LnN1cHBvcnQuXzJHKzEwLCBtZW11c2U9NCwgZHJ5X3J1bj1GYWxzZSkKKyAgICBAdGVzdC5zdXBwb3J0LmJpZ21lbXRlc3Qoc2l6ZT10ZXN0LnN1cHBvcnQuXzJHKzEwLCBtZW11c2U9MywgZHJ5X3J1bj1GYWxzZSkKICAgICBkZWYgdGVzdF9vdmVyc2l6ZWRfZGlnaXRfc3RyaW5ncyhzZWxmLCBtYXhzaXplKToKICAgICAgICAgIyBJbnB1dCBzdHJpbmcgd2hvc2UgbGVuZ3RoIGRvZXNuJ3QgZml0IGluIGFuIElOVC4KICAgICAgICAgcyA9ICIxLiIgKyAiMSIgKiBtYXhzaXplCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CmluZGV4IDUwY2FlMDUuLjAxMDdlZWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CkBAIC0xLDQgKzEsNiBAQAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgYWJjCiBpbXBvcnQgYXJyYXkKK2ltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCkBAIC02LDcgKzgsNiBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIElTQklHRU5ESUFOID0gc3lzLmJ5dGVvcmRlciA9PSAiYmlnIgotSVMzMkJJVCA9IHN5cy5tYXhzaXplID09IDB4N2ZmZmZmZmYKIAogaW50ZWdlcl9jb2RlcyA9ICdiJywgJ0InLCAnaCcsICdIJywgJ2knLCAnSScsICdsJywgJ0wnLCAncScsICdRJywgJ24nLCAnTicKIGJ5dGVvcmRlcnMgPSAnJywgJ0AnLCAnPScsICc8JywgJz4nLCAnIScKQEAgLTQ4OSw3ICs0OTAsNyBAQAogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CiAgICAgICAgIGNsYXNzIEV4cGxvZGluZ0Jvb2wob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICBmb3IgcHJlZml4IGluIHR1cGxlKCI8PiE9IikrKCcnLCk6CiAgICAgICAgICAgICBmYWxzZSA9ICgpLCBbXSwgW10sICcnLCAwCiAgICAgICAgICAgICB0cnVlID0gWzFdLCAndGVzdCcsIDUsIC0xLCAweGZmZmZmZmZmKzEsIDB4ZmZmZmZmZmYvMgpAQCAtNTIwLDEwICs1MjEsMTAgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKHByZWZpeCArICc/JywgRXhwbG9kaW5nQm9vbCgpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgSU9FcnJvcjogc3RydWN0LnBhY2soJXIsICIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIE9TRXJyb3I6IHN0cnVjdC5wYWNrKCVyLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBsb2RpbmdCb29sKCkpIiAlIChwcmVmaXggKyAnPycpKQogCiAgICAgICAgIGZvciBjIGluIFtiJ1x4MDEnLCBiJ1x4N2YnLCBiJ1x4ZmYnLCBiJ1x4MGYnLCBiJ1x4ZjAnXToKQEAgLTUzNiwxMCArNTM3LDYgQEAKICAgICAgICAgaHVnZWNvdW50MiA9ICd7fWJ7fUgnLmZvcm1hdChzeXMubWF4c2l6ZS8vMiwgc3lzLm1heHNpemUvLzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LmNhbGNzaXplLCBodWdlY291bnQyKQogCi0gICAgaWYgSVMzMkJJVDoKLSAgICAgICAgZGVmIHRlc3RfY3Jhc2hlcihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBzdHJ1Y3QucGFjaywgIjM1NzkxMzk0MWIiLCAiYSIpCi0KICAgICBkZWYgdGVzdF90cmFpbGluZ19jb3VudGVyKHNlbGYpOgogICAgICAgICBzdG9yZSA9IGFycmF5LmFycmF5KCdiJywgYicgJyoxMDApCiAKQEAgLTU3Niw3ICs1NzMsNyBAQAogICAgICAgICAjIFRoZSBzaXplIG9mICdQeVN0cnVjdE9iamVjdCcKICAgICAgICAgdG90YWxzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnMm4zUCcpCiAgICAgICAgICMgVGhlIHNpemUgdGFrZW4gdXAgYnkgdGhlICdmb3JtYXRjb2RlJyBkeW5hbWljIGFycmF5Ci0gICAgICAgIHRvdGFsc2l6ZSArPSBzdHJ1Y3QuY2FsY3NpemUoJ1AybjBQJykgKiAobnVtYmVyX29mX2NvZGVzICsgMSkKKyAgICAgICAgdG90YWxzaXplICs9IHN0cnVjdC5jYWxjc2l6ZSgnUDNuMFAnKSAqIChudW1iZXJfb2ZfY29kZXMgKyAxKQogICAgICAgICBzdXBwb3J0LmNoZWNrX3NpemVvZihzZWxmLCBzdHJ1Y3QuU3RydWN0KGZvcm1hdF9zdHIpLCB0b3RhbHNpemUpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKQEAgLTU4NywxNCArNTg0LDg0IEBACiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdCJyAqIDEyMzQsIDEyMzQpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdmZCcsIDIpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCd4eHh4eHh4eHh4eHh4eCcsIDApCi0gICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcxMDBIJywgMTAwKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTAwSCcsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcxODdzJywgMSkKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzIwcCcsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcwcycsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcwYycsIDApCiAKKworY2xhc3MgVW5wYWNrSXRlcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0cyBmb3IgaXRlcmF0aXZlIHVucGFja2luZyAoc3RydWN0LlN0cnVjdC5pdGVyX3VucGFjaykuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Qoc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2tfaXRlcmF0b3IoaXQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBhYmMuSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXQsIGFiYy5JdGVyYWJsZSkKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5pYmNwJykKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIiIikKKyAgICAgICAgX2NoZWNrX2l0ZXJhdG9yKGl0KQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYiIxMjM0NTY3IikKKyAgICAgICAgX2NoZWNrX2l0ZXJhdG9yKGl0KQorICAgICAgICAjIFdyb25nIGJ5dGVzIGxlbmd0aAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICBzLml0ZXJfdW5wYWNrKGIiMTIzNDU2IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyMzQ1Njc4IikKKyAgICAgICAgIyBaZXJvLWxlbmd0aCBzdHJ1Y3QKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz4nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICBzLml0ZXJfdW5wYWNrKGIiIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyIikKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGUoc2VsZik6CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+SUInKQorICAgICAgICBiID0gYnl0ZXMocmFuZ2UoMSwgMTYpKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDEwMjAzMDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwNjA3MDgwOSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwYjBjMGQwZSwgMTUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKyAgICBkZWYgdGVzdF9hcmJpdHJhcnlfYnVmZmVyKHNlbGYpOgorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPklCJykKKyAgICAgICAgYiA9IGJ5dGVzKHJhbmdlKDEsIDExKSkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKG1lbW9yeXZpZXcoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDAxMDIwMzA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDYwNzA4MDksIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisgICAgZGVmIHRlc3RfbGVuZ3RoX2hpbnQoc2VsZik6CisgICAgICAgIGxoID0gb3BlcmF0b3IubGVuZ3RoX2hpbnQKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5JQicpCisgICAgICAgIGIgPSBieXRlcyhyYW5nZSgxLCAxNikpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMykKKyAgICAgICAgbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDIpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAxKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAwKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2Z1bmMoc2VsZik6CisgICAgICAgICMgU2FuaXR5IGNoZWNrIGZvciB0aGUgZ2xvYmFsIHN0cnVjdC5pdGVyX3VucGFjaygpCisgICAgICAgIGl0ID0gc3RydWN0Lml0ZXJfdW5wYWNrKCc+SUInLCBieXRlcyhyYW5nZSgxLCAxMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwMTAyMDMwNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDA2MDcwODA5LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RydWN0VGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQppbmRleCBhODllOTU1Li4zNTNkMGVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAjIG9zLnN0YXQoKSBnaXZlcyBhIGNvbXBsaWNhdGVkIHN0cnVjdCBzZXF1ZW5jZS4KICAgICAgICAgc3QgPSBvcy5zdGF0KF9fZmlsZV9fKQogICAgICAgICByZXAgPSByZXByKHN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgob3MubmFtZSArICIuc3RhdF9yZXN1bHQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5zdGFydHN3aXRoKCJvcy5zdGF0X3Jlc3VsdCIpKQogICAgICAgICBzZWxmLmFzc2VydEluKCJzdF9tb2RlPSIsIHJlcCkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfaW5vPSIsIHJlcCkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfZGV2PSIsIHJlcCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQppbmRleCBmNWE3MGEzLi5kMGFiNzE4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CkBAIC0xMSw2ICsxMSw3IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgcmUKK2ltcG9ydCBzZWxlY3RvcnMKIGltcG9ydCBzeXNjb25maWcKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHNlbGVjdApAQCAtMTksMTAgKzIwLDYgQEAKIGltcG9ydCB0ZXh0d3JhcAogCiB0cnk6Ci0gICAgaW1wb3J0IHJlc291cmNlCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcmVzb3VyY2UgPSBOb25lCi10cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKQEAgLTE2Miw4ICsxNTksMjggQEAKICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidCREZMJywgb3V0cHV0KQogCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZGluX2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBjYW4gYmUgY2FsbGVkIHdpdGggc3RkaW4gc2V0IHRvIGEgZmlsZQorICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGYuY2xvc2UpCisgICAgICAgIHRmLndyaXRlKGIncGVhcicpCisgICAgICAgIHRmLnNlZWsoMCkKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpLnVwcGVyKCkpIl0sCisgICAgICAgICAgICAgICAgc3RkaW49dGYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidQRUFSJywgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X2lucHV0X2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBjYW4gYmUgY2FsbGVkIHdpdGggaW5wdXQgc2V0IHRvIGEgc3RyaW5nCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoKS51cHBlcigpKSJdLAorICAgICAgICAgICAgICAgIGlucHV0PWIncGVhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidQRUFSJywgb3V0cHV0KQorCiAgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZG91dF9hcmcoc2VsZik6Ci0gICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gc3RkZXJyIHJlZGlyZWN0ZWQgdG8gc3Rkb3V0CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgcmVmdXNlcyB0byBhY2NlcHQgJ3N0ZG91dCcgYXJndW1lbnQKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjOgogICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInByaW50KCd3aWxsIG5vdCBiZSBydW4nKSJdLApAQCAtMTcxLDYgKzE4OCwyMCBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIHdoZW4gc3Rkb3V0IGFyZyBzdXBwbGllZC4iKQogICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRvdXQnLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQogCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZGluX3dpdGhfaW5wdXRfYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIHJlZnVzZXMgdG8gYWNjZXB0ICdzdGRpbicgd2l0aCAnaW5wdXQnCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKKyAgICAgICAgdGYud3JpdGUoYidwZWFyJykKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGM6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoJ3dpbGwgbm90IGJlIHJ1bicpIl0sCisgICAgICAgICAgICAgICAgICAgIHN0ZGluPXRmLCBpbnB1dD1iJ2hhcmUnKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIHdoZW4gc3RkaW4gYW5kIGlucHV0IGFyZ3Mgc3VwcGxpZWQuIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3RkaW4nLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbnB1dCcsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCisKICAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfdGltZW91dChzZWxmKToKICAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiB3aXRoIHRpbWVvdXQgYXJnCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZCkgYXMgYzoKQEAgLTc1NSw2ICs3ODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9MSkKICAgICAgICAgcC5zdGRpbi53cml0ZSgibGluZTFcbiIpCisgICAgICAgIHAuc3RkaW4uZmx1c2goKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWRsaW5lKCksICJsaW5lMVxuIikKICAgICAgICAgcC5zdGRpbi53cml0ZSgibGluZTNcbiIpCiAgICAgICAgIHAuc3RkaW4uY2xvc2UoKQpAQCAtODUzLDggKzg4NSw5IEBACiAgICAgICAgICMKICAgICAgICAgIyBVVEYtMTYgYW5kIFVURi0zMi1CRSBhcmUgc3VmZmljaWVudCB0byBjaGVjayBib3RoIHdpdGggQk9NIGFuZAogICAgICAgICAjIHdpdGhvdXQsIGFuZCBVVEYtMTYgYW5kIFVURi0zMi4KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBbJ3V0Zi0xNicsICd1dGYtMzItYmUnXToKLSAgICAgICAgICAgIG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZworICAgICAgICAgICAgb2xkX2dldHByZWZlcnJlZGVuY29kaW5nID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcKICAgICAgICAgICAgICMgSW5kaXJlY3RseSB2aWEgaW8uVGV4dElPV3JhcHBlciwgUG9wZW4oKSBkZWZhdWx0cyB0bwogICAgICAgICAgICAgIyBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpIGFuZCBlYXJsaWVyIGluIFB5dGhvbiAzLjIgdG8KICAgICAgICAgICAgICMgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkuCkBAIC04NjUsNyArODk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcpCiAgICAgICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGdldHByZWZlcnJlZGVuY29kaW5nCisgICAgICAgICAgICAgICAgX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBnZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgICAgICMgV2Ugc2V0IHN0ZGluIHRvIGJlIG5vbi1Ob25lIGJlY2F1c2UsIGFzIG9mIHRoaXMgd3JpdGluZywKICAgICAgICAgICAgICAgICAjIGEgZGlmZmVyZW50IGNvZGUgcGF0aCBpcyB1c2VkIHdoZW4gdGhlIG51bWJlciBvZiBwaXBlcyBpcwogICAgICAgICAgICAgICAgICMgemVybyBvciBvbmUuCkBAIC04NzQsNyArOTA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKGlucHV0PScnKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICcxXG4yXG4zXG40JykKIAogICAgIGRlZiB0ZXN0X25vX2xlYWtpbmcoc2VsZik6CkBAIC05ODIsOCArMTAxNSw3IEBACiAgICAgICAgICMgdmFsdWUgZm9yIHRoYXQgbGltaXQsIGJ1dCBXaW5kb3dzIGhhcyAyMDQ4LCBzbyB3ZSBsb29wCiAgICAgICAgICMgMTAyNCB0aW1lcyAoZWFjaCBjYWxsIGxlYWtlZCB0d28gZmRzKS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAyNCk6Ci0gICAgICAgICAgICAjIFdpbmRvd3MgcmFpc2VzIElPRXJyb3IuICBPdGhlcnMgcmFpc2UgT1NFcnJvci4KLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRW52aXJvbm1lbnRFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgYzoKICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsnbm9uZXhpc3RpbmdfaV9ob3BlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKQEAgLTEwMjEsNiArMTA1Myw1OSBAQAogICAgICAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHJhaXNlIGV4YwogCisgICAgQHVuaXR0ZXN0LnNraXBJZih0aHJlYWRpbmcgaXMgTm9uZSwgInRocmVhZGluZyByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfdGhyZWFkc2FmZV93YWl0KHNlbGYpOgorICAgICAgICAiIiJJc3N1ZTIxMjkxOiBQb3Blbi53YWl0KCkgbmVlZHMgdG8gYmUgdGhyZWFkc2FmZSBmb3IgcmV0dXJuY29kZS4iIiIKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCB0aW1lOyB0aW1lLnNsZWVwKDEyKSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgTm9uZSkKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGtpbGxfcHJvY190aW1lcl90aHJlYWQoKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCgndGhyZWFkLXN0YXJ0LXBvbGwtcmVzdWx0JywgcHJvYy5wb2xsKCkpKQorICAgICAgICAgICAgIyB0ZXJtaW5hdGUgaXQgZnJvbSB0aGUgdGhyZWFkIGFuZCB3YWl0IGZvciB0aGUgcmVzdWx0LgorICAgICAgICAgICAgcHJvYy5raWxsKCkKKyAgICAgICAgICAgIHByb2Mud2FpdCgpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoJ3RocmVhZC1hZnRlci1raWxsLWFuZC13YWl0JywgcHJvYy5yZXR1cm5jb2RlKSkKKyAgICAgICAgICAgICMgdGhpcyB3YWl0IHNob3VsZCBiZSBhIG5vLW9wIGdpdmVuIHRoZSBhYm92ZS4KKyAgICAgICAgICAgIHByb2Mud2FpdCgpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoJ3RocmVhZC1hZnRlci1zZWNvbmQtd2FpdCcsIHByb2MucmV0dXJuY29kZSkpCisKKyAgICAgICAgIyBUaGlzIGlzIGEgdGltaW5nIHNlbnNpdGl2ZSB0ZXN0LCB0aGUgZmFpbHVyZSBtb2RlIGlzCisgICAgICAgICMgdHJpZ2dlcmVkIHdoZW4gYm90aCB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoaXMgdGhyZWFkIGFyZSBpbgorICAgICAgICAjIHRoZSB3YWl0KCkgY2FsbCBhdCBvbmNlLiAgVGhlIGRlbGF5IGhlcmUgaXMgdG8gYWxsb3cgdGhlCisgICAgICAgICMgbWFpbiB0aHJlYWQgdG8gbW9zdCBsaWtlbHkgYmUgYmxvY2tlZCBpbiBpdHMgd2FpdCgpIGNhbGwuCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGltZXIoMC4yLCBraWxsX3Byb2NfdGltZXJfdGhyZWFkKQorICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICBpZiBtc3dpbmRvd3M6CisgICAgICAgICAgICBleHBlY3RlZF9lcnJvcmNvZGUgPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFNob3VsZCBiZSAtOSBiZWNhdXNlIG9mIHRoZSBwcm9jLmtpbGwoKSBmcm9tIHRoZSB0aHJlYWQuCisgICAgICAgICAgICBleHBlY3RlZF9lcnJvcmNvZGUgPSAtOQorCisgICAgICAgICMgV2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gZmluaXNoOyB0aGUgdGhyZWFkIHNob3VsZCBraWxsIGl0CisgICAgICAgICMgbG9uZyBiZWZvcmUgaXQgZmluaXNoZXMgb24gaXRzIG93bi4gIFN1cHBseWluZyBhIHRpbWVvdXQKKyAgICAgICAgIyB0cmlnZ2VycyBhIGRpZmZlcmVudCBjb2RlIHBhdGggZm9yIGJldHRlciBjb3ZlcmFnZS4KKyAgICAgICAgcHJvYy53YWl0KHRpbWVvdXQ9MjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvYy5yZXR1cm5jb2RlLCBleHBlY3RlZF9lcnJvcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJ1bmV4cGVjdGVkIHJlc3VsdCBpbiB3YWl0IGZyb20gbWFpbiB0aHJlYWQiKQorCisgICAgICAgICMgVGhpcyBzaG91bGQgYmUgYSBuby1vcCB3aXRoIG5vIGNoYW5nZSBpbiByZXR1cm5jb2RlLgorICAgICAgICBwcm9jLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgZXhwZWN0ZWRfZXJyb3Jjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0idW5leHBlY3RlZCByZXN1bHQgaW4gc2Vjb25kIG1haW4gd2FpdC4iKQorCisgICAgICAgIHQuam9pbigpCisgICAgICAgICMgRW5zdXJlIHRoYXQgYWxsIG9mIHRoZSB0aHJlYWQgcmVzdWx0cyBhcmUgYXMgZXhwZWN0ZWQuCisgICAgICAgICMgV2hlbiBhIHJhY2UgY29uZGl0aW9uIG9jY3VycyBpbiB3YWl0KCksIHRoZSByZXR1cm5jb2RlIGNvdWxkCisgICAgICAgICMgYmUgc2V0IGJ5IHRoZSB3cm9uZyB0aHJlYWQgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IGhhdmUgaXQKKyAgICAgICAgIyBsZWFkaW5nIHRvIGFuIGluY29ycmVjdCB2YWx1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKCd0aHJlYWQtc3RhcnQtcG9sbC1yZXN1bHQnLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCd0aHJlYWQtYWZ0ZXIta2lsbC1hbmQtd2FpdCcsIGV4cGVjdGVkX2Vycm9yY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgndGhyZWFkLWFmdGVyLXNlY29uZC13YWl0JywgZXhwZWN0ZWRfZXJyb3Jjb2RlKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cykKKwogICAgIGRlZiB0ZXN0X2lzc3VlODc4MChzZWxmKToKICAgICAgICAgIyBFbnN1cmUgdGhhdCBzdGRvdXQgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudAogICAgICAgICAjIGlmIHN0ZG91dD1QSVBFIGlzIG5vdCB1c2VkCkBAIC0xMTE0LDQ3ICsxMTk5LDYgQEAKICAgICAgICAgZmRzX2FmdGVyX2V4Y2VwdGlvbiA9IG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkc19iZWZvcmVfcG9wZW4sIGZkc19hZnRlcl9leGNlcHRpb24pCiAKLQotIyBjb250ZXh0IG1hbmFnZXIKLWNsYXNzIF9TdXBwcmVzc0NvcmVGaWxlcyhvYmplY3QpOgotICAgICIiIlRyeSB0byBwcmV2ZW50IGNvcmUgZmlsZXMgZnJvbSBiZWluZyBjcmVhdGVkLiIiIgotICAgIG9sZF9saW1pdCA9IE5vbmUKLQotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgICIiIlRyeSB0byBzYXZlIHByZXZpb3VzIHVsaW1pdCwgdGhlbiBzZXQgaXQgdG8gKDAsIDApLiIiIgotICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLm9sZF9saW1pdCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSkKLSAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsICgwLCAwKSkKLSAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAotICAgICAgICAgICAgIyBpbiAnRGV2ZWxvcGVyJyBtb2RlIGFuZCB3YXJuIHRoYXQgaXQgd2lsbCBnZXQgdHJpZ2dlcmVkCi0gICAgICAgICAgICAjIHdoZW4gaXQgaXMuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgaW4gdGVzdHMKLSAgICAgICAgICAgICMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZSBuZXh0IG1hbmFnZXIuCi0gICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKLSAgICAgICAgICAgICAgICAgICAgJ2NvbS5hcHBsZS5DcmFzaFJlcG9ydGVyJywgJ0RpYWxvZ1R5cGUnXSwKLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQotICAgICAgICAgICAgaWYgdmFsdWUuc3RyaXAoKSA9PSBiJ2RldmVsb3Blcic6Ci0gICAgICAgICAgICAgICAgcHJpbnQoInRoaXMgdGVzdHMgdHJpZ2dlcnMgdGhlIENyYXNoIFJlcG9ydGVyLCAiCi0gICAgICAgICAgICAgICAgICAgICAgInRoYXQgaXMgaW50ZW50aW9uYWwiLCBlbmQ9JycpCi0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICAiIiJSZXR1cm4gY29yZSBmaWxlIGJlaGF2aW9yIHRvIGRlZmF1bHQuIiIiCi0gICAgICAgIGlmIHNlbGYub2xkX2xpbWl0IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCBzZWxmLm9sZF9saW1pdCkKLSAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotCiBAdW5pdHRlc3Quc2tpcElmKG1zd2luZG93cywgIlBPU0lYIHNwZWNpZmljIHRlc3RzIikKIGNsYXNzIFBPU0lYUHJvY2Vzc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CiAKQEAgLTEyNDMsNyArMTI4Nyw3IEBACiAKICAgICBkZWYgdGVzdF9ydW5fYWJvcnQoc2VsZik6CiAgICAgICAgICMgcmV0dXJuY29kZSBoYW5kbGVzIHNpZ25hbCB0ZXJtaW5hdGlvbgotICAgICAgICB3aXRoIF9TdXBwcmVzc0NvcmVGaWxlcygpOgorICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgb3M7IG9zLmFib3J0KCknXSkKICAgICAgICAgICAgIHAud2FpdCgpCkBAIC0xMjY2LDcgKzEzMTAsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49cmFpc2VfaXQpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcywKICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgVmFsdWVFcnJvciBmcm9tIHRoZSBwcmVleGVjX2ZuIikKQEAgLTEzMDYsOSArMTM1MCwxMCBAQAogICAgICAgICAiIiJJc3N1ZTE2MTQwOiBEb24ndCBkb3VibGUgY2xvc2UgcGlwZXMgb24gcHJlZXhlYyBlcnJvci4iIiIKIAogICAgICAgICBkZWYgcmFpc2VfaXQoKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZm9yY2UgdGhlIF9leGVjdXRlX2NoaWxkKCkgZXJycGlwZV9kYXRhIHBhdGguIikKKyAgICAgICAgICAgIHJhaXNlIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAiZm9yY2UgdGhlIF9leGVjdXRlX2NoaWxkKCkgZXJycGlwZV9kYXRhIHBhdGguIikKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5fVGVzdEV4ZWN1dGVDaGlsZFBvcGVuKAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicGFzcyJdLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLApAQCAtMTUwNywxNiArMTU1MiwyOCBAQAogICAgICAgICAjIFRlcm1pbmF0aW5nIGEgZGVhZCBwcm9jZXNzCiAgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQogCisgICAgZGVmIF9zYXZlX2ZkcyhzZWxmLCBzYXZlX2Zkcyk6CisgICAgICAgIGZkcyA9IFtdCisgICAgICAgIGZvciBmZCBpbiBzYXZlX2ZkczoKKyAgICAgICAgICAgIGluaGVyaXRhYmxlID0gb3MuZ2V0X2luaGVyaXRhYmxlKGZkKQorICAgICAgICAgICAgc2F2ZWQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBmZHMuYXBwZW5kKChmZCwgc2F2ZWQsIGluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIGZkcworCisgICAgZGVmIF9yZXN0b3JlX2ZkcyhzZWxmLCBmZHMpOgorICAgICAgICBmb3IgZmQsIHNhdmVkLCBpbmhlcml0YWJsZSBpbiBmZHM6CisgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBmZCwgaW5oZXJpdGFibGU9aW5oZXJpdGFibGUpCisgICAgICAgICAgICBvcy5jbG9zZShzYXZlZCkKKwogICAgIGRlZiBjaGVja19jbG9zZV9zdGRfZmRzKHNlbGYsIGZkcyk6CiAgICAgICAgICMgSXNzdWUgIzk5MDU6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAogICAgICAgICAjIHNvbWUgc3RhbmRhcmQgZmRzIGNsb3NlZAogICAgICAgICBzdGRpbiA9IDAKLSAgICAgICAgbmV3ZmRzID0gW10KLSAgICAgICAgZm9yIGEgaW4gZmRzOgotICAgICAgICAgICAgYiA9IG9zLmR1cChhKQotICAgICAgICAgICAgbmV3ZmRzLmFwcGVuZChiKQotICAgICAgICAgICAgaWYgYSA9PSAwOgotICAgICAgICAgICAgICAgIHN0ZGluID0gYgorICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhmZHMpCisgICAgICAgIGZvciBmZCwgc2F2ZWQsIGluaGVyaXRhYmxlIGluIHNhdmVkX2ZkczoKKyAgICAgICAgICAgIGlmIGZkID09IDA6CisgICAgICAgICAgICAgICAgc3RkaW4gPSBzYXZlZAorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6CiAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCkBAIC0xNTMxLDEwICsxNTg4LDcgQEAKICAgICAgICAgICAgIGVyciA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChvdXQsIGVyciksIChiJ2FwcGxlJywgYidvcmFuZ2UnKSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZvciBiLCBhIGluIHppcChuZXdmZHMsIGZkcyk6Ci0gICAgICAgICAgICAgICAgb3MuZHVwMihiLCBhKQotICAgICAgICAgICAgZm9yIGIgaW4gbmV3ZmRzOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKGIpCisgICAgICAgICAgICBzZWxmLl9yZXN0b3JlX2ZkcyhzYXZlZF9mZHMpCiAKICAgICBkZWYgdGVzdF9jbG9zZV9mZF8wKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzBdKQpAQCAtMTU5NSw3ICsxNjQ5LDcgQEAKICAgICAgICAgICAgIG9zLmxzZWVrKHRlbXBfZmRzWzFdLCAwLCAwKQogCiAgICAgICAgICAgICAjIG1vdmUgdGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMgb3V0IG9mIHRoZSB3YXkKLSAgICAgICAgICAgIHNhdmVkX2ZkcyA9IFtvcy5kdXAoZmQpIGZvciBmZCBpbiByYW5nZSgzKV0KKyAgICAgICAgICAgIHNhdmVkX2ZkcyA9IHNlbGYuX3NhdmVfZmRzKHJhbmdlKDMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgZHVwbGljYXRlIHRoZSBmaWxlIG9iamVjdHMgb3ZlciB0aGUgc3RhbmRhcmQgZmQncwogICAgICAgICAgICAgICAgIGZvciBmZCwgdGVtcF9mZCBpbiBlbnVtZXJhdGUodGVtcF9mZHMpOgpAQCAtMTYxMSwxMCArMTY2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj10ZW1wX2Zkc1swXSkKICAgICAgICAgICAgICAgICBwLndhaXQoKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAjIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGZkJ3MgdW5kZXJuZWF0aCBzeXMuc3RkaW4sIGV0Yy4KLSAgICAgICAgICAgICAgICBmb3Igc3RkLCBzYXZlZCBpbiBlbnVtZXJhdGUoc2F2ZWRfZmRzKToKLSAgICAgICAgICAgICAgICAgICAgb3MuZHVwMihzYXZlZCwgc3RkKQotICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShzYXZlZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXN0b3JlX2ZkcyhzYXZlZF9mZHMpCiAKICAgICAgICAgICAgIGZvciBmZCBpbiB0ZW1wX2ZkczoKICAgICAgICAgICAgICAgICBvcy5sc2VlayhmZCwgMCwgMCkKQEAgLTE2MzgsNyArMTY4OSw3IEBACiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQogCiAgICAgICAgICAgICAjIHNhdmUgYSBjb3B5IG9mIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzCi0gICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCisgICAgICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhyYW5nZSgzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgdGVtcCBmaWxlcyBvdmVyIHRoZSBzdGFuZGFyZCBmZCdzIDAsIDEsIDIKICAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKQEAgLTE2NjQsOSArMTcxNSw3IEBACiAgICAgICAgICAgICAgICAgb3V0ID0gb3MucmVhZChzdGRvdXRfbm8sIDEwMjQpCiAgICAgICAgICAgICAgICAgZXJyID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKG9zLnJlYWQoc3RkZXJyX25vLCAxMDI0KSkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYiJnb3QgU1RESU4iKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiZXJyIikKQEAgLTE2OTgsNDAgKzE3NDcsNDcgQEAKICAgICAgICAgICAgICMgUHVyZSBQeXRob24gaW1wbGVtZW50YXRpb25zIGtlZXBzIHRoZSBtZXNzYWdlCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAic3Vycm9nYXRlOlx1RENmZiIpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgIyBfcG9zaXhzdWJwcm9jZXNzIHVzZXMgYSBkZWZhdWx0IG1lc3NhZ2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJFeGNlcHRpb24gb2NjdXJyZWQgaW4gcHJlZXhlY19mbi4iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIG9yIFJ1bnRpbWVFcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igb3Igc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IiKQogCiAgICAgZGVmIHRlc3RfdW5kZWNvZGFibGVfZW52KHNlbGYpOgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAoKCd0ZXN0JywgJ2FiY1x1RENGRicpLCAoJ3Rlc3RcdURDRkYnLCAnNDInKSk6CisgICAgICAgICAgICBlbmNvZGVkX3ZhbHVlID0gdmFsdWUuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQorCiAgICAgICAgICAgICAjIHRlc3Qgc3RyIHdpdGggc3Vycm9nYXRlcwogICAgICAgICAgICAgc2NyaXB0ID0gImltcG9ydCBvczsgcHJpbnQoYXNjaWkob3MuZ2V0ZW52KCVzKSkpIiAlIHJlcHIoa2V5KQogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKLSAgICAgICAgICAgICMgVXNlIEMgbG9jYWxlIHRvIGdldCBhc2NpaSBmb3IgdGhlIGxvY2FsZSBlbmNvZGluZyB0byBmb3JjZQorICAgICAgICAgICAgIyBVc2UgQyBsb2NhbGUgdG8gZ2V0IEFTQ0lJIGZvciB0aGUgbG9jYWxlIGVuY29kaW5nIHRvIGZvcmNlCiAgICAgICAgICAgICAjIHN1cnJvZ2F0ZS1lc2NhcGluZyBvZiBceEZGIGluIHRoZSBjaGlsZCBwcm9jZXNzOyBvdGhlcndpc2UgaXQgY2FuCiAgICAgICAgICAgICAjIGJlIGRlY29kZWQgYXMtaXMgaWYgdGhlIGRlZmF1bHQgbG9jYWxlIGlzIGxhdGluLTEuCiAgICAgICAgICAgICBlbnZbJ0xDX0FMTCddID0gJ0MnCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4Iik6CisgICAgICAgICAgICAgICAgIyBPbiBBSVgsIHRoZSBDIGxvY2FsZSB1c2VzIHRoZSBMYXRpbjEgZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBkZWNvZGVkX3ZhbHVlID0gZW5jb2RlZF92YWx1ZS5kZWNvZGUoImxhdGluMSIsICJzdXJyb2dhdGVlc2NhcGUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE9uIG90aGVyIFVOSVhlcywgdGhlIEMgbG9jYWxlIHVzZXMgdGhlIEFTQ0lJIGVuY29kaW5nCisgICAgICAgICAgICAgICAgZGVjb2RlZF92YWx1ZSA9IHZhbHVlCiAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsIHNjcmlwdF0sCiAgICAgICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoYidcblxyJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkodmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaShkZWNvZGVkX3ZhbHVlKSkKIAogICAgICAgICAgICAgIyB0ZXN0IGJ5dGVzCiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5lbmNvZGUoImFzY2lpIiwgInN1cnJvZ2F0ZWVzY2FwZSIpCiAgICAgICAgICAgICBzY3JpcHQgPSAiaW1wb3J0IG9zOyBwcmludChhc2NpaShvcy5nZXRlbnZiKCVzKSkpIiAlIHJlcHIoa2V5KQogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGVudltrZXldID0gZW5jb2RlZF92YWx1ZQogICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAogICAgICAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKGInXG5ccicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkoZW5jb2RlZF92YWx1ZSkpCiAKICAgICBkZWYgdGVzdF9ieXRlc19wcm9ncmFtKHNlbGYpOgogICAgICAgICBhYnNfcHJvZ3JhbSA9IG9zLmZzZW5jb2RlKHN5cy5leGVjdXRhYmxlKQpAQCAtMTgzNyw2ICsxODkzLDkgQEAKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCiAgICAgICAgICAgICBvcGVuX2Zkcy5hZGQoZmQpCiAKKyAgICAgICAgZm9yIGZkIGluIG9wZW5fZmRzOgorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgZmRfc3RhdHVzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPUZhbHNlKQogICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKQEAgLTE4NjcsNiArMTkyNiw4NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJTb21lIGZkcyBub3QgaW4gcGFzc19mZHMgd2VyZSBsZWZ0IG9wZW4iKQogICAgICAgICBzZWxmLmFzc2VydEluKDEsIHJlbWFpbmluZ19mZHMsICJTdWJwcm9jZXNzIGZhaWxlZCIpCiAKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImZyZWVic2QiKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQoIi9kZXYiKS5zdF9kZXYgPT0gb3Muc3RhdCgiL2Rldi9mZCIpLnN0X2RldiwKKyAgICAgICAgICAgICAgICAgICAgICJSZXF1aXJlcyBmZGVzY2ZzIG1vdW50ZWQgb24gL2Rldi9mZCBvbiBGcmVlQlNELiIpCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzX3doZW5fbWF4X2ZkX2lzX2xvd2VyZWQoc2VsZik6CisgICAgICAgICIiIkNvbmZpcm0gdGhhdCBpc3N1ZTIxNjE4IGlzIGZpeGVkIChtYXkgZmFpbCB1bmRlciB2YWxncmluZCkuIiIiCisgICAgICAgIGZkX3N0YXR1cyA9IHN1cHBvcnQuZmluZGZpbGUoImZkX3N0YXR1cy5weSIsIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorCisgICAgICAgICMgVGhpcyBsYXVuY2hlcyB0aGUgbWVhdCBvZiB0aGUgdGVzdCBpbiBhIGNoaWxkIHByb2Nlc3MgdG8KKyAgICAgICAgIyBhdm9pZCBtZXNzaW5nIHdpdGggdGhlIGxhcmdlciB1bml0dGVzdCBwcm9jZXNzZXMgbWF4aW11bQorICAgICAgICAjIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzLgorICAgICAgICAjICBUaGlzIHByb2Nlc3MgbGF1bmNoZXM6CisgICAgICAgICMgICstLT4gUHJvY2VzcyB0aGF0IGxvd2VycyBpdHMgUkxJTUlUX05PRklMRSBhZnRyIHNldHRpbmcgdXAKKyAgICAgICAgIyAgICBhIGJ1bmNoIG9mIGhpZ2ggb3BlbiBmZHMgYWJvdmUgdGhlIG5ldyBsb3dlciBybGltaXQuCisgICAgICAgICMgICAgVGhvc2UgYXJlIHJlcG9ydGVkIHZpYSBzdGRvdXQgYmVmb3JlIGxhdW5jaGluZyBhIG5ldworICAgICAgICAjICAgIHByb2Nlc3Mgd2l0aCBjbG9zZV9mZHM9RmFsc2UgdG8gcnVuIHRoZSBhY3R1YWwgdGVzdDoKKyAgICAgICAgIyAgICArLS0+IFRoZSBURVNUOiBUaGlzIG9uZSBsYXVuY2hlcyBhIGZkX3N0YXR1cy5weQorICAgICAgICAjICAgICAgc3VicHJvY2VzcyB3aXRoIGNsb3NlX2Zkcz1UcnVlIHNvIHdlIGNhbiBmaW5kIG91dCBpZgorICAgICAgICAjICAgICAgYW55IG9mIHRoZSBmZHMgYWJvdmUgdGhlIGxvd2VyZWQgcmxpbWl0IGFyZSBzdGlsbCBvcGVuLgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIHRleHR3cmFwLmRlZGVudCgKKyAgICAgICAgJycnCisgICAgICAgIGltcG9ydCBvcywgcmVzb3VyY2UsIHN1YnByb2Nlc3MsIHN5cywgdGV4dHdyYXAKKyAgICAgICAgb3Blbl9mZHMgPSBzZXQoKQorICAgICAgICAjIEFkZCBhIGJ1bmNoIG1vcmUgZmRzIHRvIHBhc3MgZG93bi4KKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoNDApOgorICAgICAgICAgICAgZmQgPSBvcy5vcGVuKCIvZGV2L251bGwiLCBvcy5PX1JET05MWSkKKyAgICAgICAgICAgIG9wZW5fZmRzLmFkZChmZCkKKworICAgICAgICAjIExlYXZlIGEgdHdvIHBhaXJzIG9mIGxvdyBvbmVzIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZQorICAgICAgICAjIGludGVybmFsIGNoaWxkIGVycm9yIHBpcGUgYW5kIHRoZSBzdGRvdXQgcGlwZS4KKyAgICAgICAgIyBXZSBhbHNvIGxlYXZlIDEwIG1vcmUgb3BlbiBhcyBzb21lIFB5dGhvbiBidWlsZGJvdHMgcnVuIGludG8KKyAgICAgICAgIyAidG9vIG1hbnkgb3BlbiBmaWxlcyIgZXJyb3JzIGR1cmluZyB0aGUgdGVzdCBpZiB3ZSBkbyBub3QuCisgICAgICAgIGZvciBmZCBpbiBzb3J0ZWQob3Blbl9mZHMpWzoxNF06CisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIG9wZW5fZmRzLnJlbW92ZShmZCkKKworICAgICAgICBmb3IgZmQgaW4gb3Blbl9mZHM6CisgICAgICAgICAgICAjc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZCwgVHJ1ZSkKKworICAgICAgICBtYXhfZmRfb3BlbiA9IG1heChvcGVuX2ZkcykKKworICAgICAgICAjIENvbW11bmljYXRlIHRoZSBvcGVuX2ZkcyB0byB0aGUgcGFyZW50IHVuaXR0ZXN0LlRlc3RDYXNlIHByb2Nlc3MuCisgICAgICAgIHByaW50KCcsJy5qb2luKG1hcChzdHIsIHNvcnRlZChvcGVuX2ZkcykpKSkKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisKKyAgICAgICAgcmxpbV9jdXIsIHJsaW1fbWF4ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgMjkgaXMgbG93ZXIgdGhhbiB0aGUgaGlnaGVzdCBmZHMgd2UgYXJlIGxlYXZpbmcgb3Blbi4KKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFLCAoMjksIHJsaW1fbWF4KSkKKyAgICAgICAgICAgICMgTGF1bmNoIGEgbmV3IFB5dGhvbiBpbnRlcnByZXRlciB3aXRoIG91ciBsb3cgZmQgcmxpbV9jdXIgdGhhdAorICAgICAgICAgICAgIyBpbmhlcml0cyBvcGVuIGZkcyBhYm92ZSB0aGF0IGxpbWl0LiAgSXQgdGhlbiB1c2VzIHN1YnByb2Nlc3MKKyAgICAgICAgICAgICMgd2l0aCBjbG9zZV9mZHM9VHJ1ZSB0byBnZXQgYSByZXBvcnQgb2Ygb3BlbiBmZHMgaW4gdGhlIGNoaWxkLgorICAgICAgICAgICAgIyBBbiBleHBsaWNpdCBsaXN0IG9mIGZkcyB0byBjaGVjayBpcyBwYXNzZWQgdG8gZmRfc3RhdHVzLnB5IGFzCisgICAgICAgICAgICAjIGxldHRpbmcgZmRfc3RhdHVzIHJlbHkgb24gaXRzIGRlZmF1bHQgbG9naWMgd291bGQgbWlzcyB0aGUKKyAgICAgICAgICAgICMgZmRzIGFib3ZlIHJsaW1fY3VyIGFzIGl0IG5vcm1hbGx5IG9ubHkgY2hlY2tzIHVwIHRvIHRoYXQgbGltaXQuCisgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MsIHN5cworICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICVyXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHIoeCkgZm9yIHggaW4gcmFuZ2Uoe21heF9mZH0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUpLndhaXQoKQorICAgICAgICAgICAgICAgICAgICAgIiIiLmZvcm1hdChtYXhfZmQ9bWF4X2ZkX29wZW4rMSkpXSwKKyAgICAgICAgICAgICAgICBjbG9zZV9mZHM9RmFsc2UpLndhaXQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUsIChybGltX2N1ciwgcmxpbV9tYXgpKQorICAgICAgICAnJycgJSBmZF9zdGF0dXMpXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKworICAgICAgICBvdXRwdXQsIHVudXNlZF9zdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgb3V0cHV0X2xpbmVzID0gb3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXRwdXRfbGluZXMpLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXhwZWN0ZWQgZXhhY3RseSB0d28gbGluZXMgb2Ygb3V0cHV0OlxuJXIiICUgb3V0cHV0KQorICAgICAgICBvcGVuZWRfZmRzID0gc2V0KG1hcChpbnQsIG91dHB1dF9saW5lc1swXS5zdHJpcCgpLnNwbGl0KGInLCcpKSkKKyAgICAgICAgcmVtYWluaW5nX2ZkcyA9IHNldChtYXAoaW50LCBvdXRwdXRfbGluZXNbMV0uc3RyaXAoKS5zcGxpdChiJywnKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1haW5pbmdfZmRzICYgb3BlbmVkX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlNvbWUgZmRzIHdlcmUgbGVmdCBvcGVuLiIpCisKKwogICAgICMgTWFjIE9TIFggVGlnZXIgKDEwLjQpIGhhcyBhIGtlcm5lbCBidWc6IHNvbWV0aW1lcywgdGhlIGZpbGUKICAgICAjIGRlc2NyaXB0b3Igb2YgYSBwaXBlIGNsb3NlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgdmFsaWQgaW4gdGhlCiAgICAgIyBjaGlsZCBwcm9jZXNzIGFjY29yZGluZyB0byBmc3RhdCgpLCBidXQgdGhlIG1vZGUgb2YgdGhlIGZpbGUKQEAgLTE4ODEsNiArMjAyMCw4IEBACiAgICAgICAgICAgICBmZHMgPSBvcy5waXBlKCkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmRzWzBdKQogICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZHNbMV0pCisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmRzWzBdLCBUcnVlKQorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkc1sxXSwgVHJ1ZSkKICAgICAgICAgICAgIG9wZW5fZmRzLnVwZGF0ZShmZHMpCiAKICAgICAgICAgZm9yIGZkIGluIG9wZW5fZmRzOgpAQCAtMTkwMyw2ICsyMDQ0LDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9RmFsc2UsIHBhc3NfZmRzPShmZCwgKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdvdmVycmlkaW5nIGNsb3NlX2ZkcycsIHN0cihjb250ZXh0Lndhcm5pbmcpKQogCisgICAgZGVmIHRlc3RfcGFzc19mZHNfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNjcmlwdCA9IHN1cHBvcnQuZmluZGZpbGUoImZkX3N0YXR1cy5weSIsIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorCisgICAgICAgIGluaGVyaXRhYmxlLCBub25faW5oZXJpdGFibGUgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBpbmhlcml0YWJsZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBub25faW5oZXJpdGFibGUpCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSwgVHJ1ZSkKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKG5vbl9pbmhlcml0YWJsZSwgRmFsc2UpCisgICAgICAgIHBhc3NfZmRzID0gKGluaGVyaXRhYmxlLCBub25faW5oZXJpdGFibGUpCisgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsIHNjcmlwdF0KKyAgICAgICAgYXJncyArPSBsaXN0KG1hcChzdHIsIHBhc3NfZmRzKSkKKworICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBjbG9zZV9mZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc19mZHM9cGFzc19mZHMpCisgICAgICAgIG91dHB1dCwgaWdub3JlZCA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBmZHMgPSBzZXQobWFwKGludCwgb3V0cHV0LnNwbGl0KGInLCcpKSkKKworICAgICAgICAjIHRoZSBpbmhlcml0YWJsZSBmaWxlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbmhlcml0ZWQsIHNvIGl0cyBpbmhlcml0YWJsZQorICAgICAgICAjIGZsYWcgbXVzdCBiZSBzZXQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgYWZ0ZXIgZm9yaygpIGFuZCBiZWZvcmUgZXhlYygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRzLCBzZXQocGFzc19mZHMpLCAib3V0cHV0PSVhIiAlIG91dHB1dCkKKworICAgICAgICAjIGluaGVyaXRhYmxlIGZsYWcgbXVzdCBub3QgYmUgY2hhbmdlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoaW5oZXJpdGFibGUpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShub25faW5oZXJpdGFibGUpLCBGYWxzZSkKKwogICAgIGRlZiB0ZXN0X3N0ZG91dF9zdGRpbl9hcmVfc2luZ2xlX2lub3V0X2ZkKHNlbGYpOgogICAgICAgICB3aXRoIGlvLm9wZW4ob3MuZGV2bnVsbCwgInIrIikgYXMgaW5vdXQ6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSJdLApAQCAtMTk5MCw3ICsyMTU3LDcgQEAKICAgICAgICAgIyBsZXQgc29tZSB0aW1lIGZvciB0aGUgcHJvY2VzcyB0byBleGl0LCBhbmQgY3JlYXRlIGEgbmV3IFBvcGVuOiB0aGlzCiAgICAgICAgICMgc2hvdWxkIHRyaWdnZXIgdGhlIHdhaXQoKSBvZiBwCiAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVudmlyb25tZW50RXJyb3IpIGFzIGM6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgYzoKICAgICAgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihbJ25vbmV4aXN0aW5nX2lfaG9wZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkgYXMgcHJvYzoKQEAgLTIxNzUsMTUgKzIzNDIsMTYgQEAKICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzdWJwcm9jZXNzLCAnX2hhc19wb2xsJywgRmFsc2UpLAotICAgICAgICAgICAgICAgICAgICAgInBvbGwgc3lzdGVtIGNhbGwgbm90IHN1cHBvcnRlZCIpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCiBjbGFzcyBQcm9jZXNzVGVzdENhc2VOb1BvbGwoUHJvY2Vzc1Rlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1YnByb2Nlc3MuX2hhc19wb2xsID0gRmFsc2UKKyAgICAgICAgc2VsZi5vcmlnX3NlbGVjdG9yID0gc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvcgorICAgICAgICBzdWJwcm9jZXNzLl9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCiAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS5zZXRVcChzZWxmKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IFRydWUKKyAgICAgICAgc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvciA9IHNlbGYub3JpZ19zZWxlY3RvcgogICAgICAgICBQcm9jZXNzVGVzdENhc2UudGVhckRvd24oc2VsZikKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5IGIvTGliL3Rlc3QvdGVzdF9zdW5hdS5weQppbmRleCAxNjU1MzE3Li4wZjQxMzRlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgYXVkaW90ZXN0cworZnJvbSBhdWRpb29wIGltcG9ydCBieXRlc3dhcAogaW1wb3J0IHN5cwogaW1wb3J0IHN1bmF1CiAKQEAgLTQ2LDYgKzQ3LDMxIEBACiAgICAgICAiIiIpCiAKIAorY2xhc3MgU3VuYXVQQ00yNFRlc3QoU3VuYXVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stcGNtMjQuYXUnCisgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CisgICAgbmNoYW5uZWxzID0gMgorICAgIHNhbXB3aWR0aCA9IDMKKyAgICBmcmFtZXJhdGUgPSAxMTAyNQorICAgIG5mcmFtZXMgPSA0OAorICAgIGNvbXB0eXBlID0gJ05PTkUnCisgICAgY29tcG5hbWUgPSAnbm90IGNvbXByZXNzZWQnCisgICAgZnJhbWVzID0gYnl0ZXMuZnJvbWhleCgiIiJcCisgICAgICAwMjJENjVGRkVCOUQgNEI1QTBGMDBGQTU0IDMxMTNDMzA0RUUyQiA4MERDRDYwODQzMDMgXAorICAgICAgQ0JERUMwMDZCMjYxIDQ4QTk5ODAzRjJGOCBCRkU4MjQwMUIwN0QgMDM2QkZCRkU3QjVEIFwKKyAgICAgIEI4NTc1NkZBM0VDOSBCNEIwNTVGMzUwMkIgMjk5ODMwRUJDQjYyIDFBNUNBN0U2RDk5QSBcCisgICAgICBFREZBM0VFNDkxQkQgQzYyNUVCRTI3ODg0IDBFMDVBOUUwQjZDRiBFRjI5MjlFMDI5MjIgXAorICAgICAgNTc1OEQ4RTI3MDY3IEZCMzU1N0U4M0UxNiAxMzc3QkZFRjg0MDIgRDgyQzVCRjcyNzJBIFwKKyAgICAgIDk3OEYxNkZCNzc0NSBGNUY4NjVGQzEwMTMgMDg2NjM1RkI5QzRFIERGMzBGQ0ZCNDBFRSBcCisgICAgICAxMTdGRTBGQTM0MzggM0VFNkI4RkI1QUMzIEJDNzdBM0ZDQjJGNCA2NkQ2REFGRjVGMzIgXAorICAgICAgQ0YxM0I5MDQxMjc1IDQzMUQ2OTA5N0E4QyBDMUJCNjAwRUM3NEUgNTEyMEI5MTJBMkJBIFwKKyAgICAgIEVFREY2NDE3NTRDMCA4MjA3MDAxNjY0QjcgN0ZGRkZGMTQ0NTNGIDgwMDAwMDEyOTRFNiBcCisgICAgICA0OTlDMUIwRUIzQjIgNTJCNzNFMERCQ0EwIEVGQjJCMjBGNUZEOCBDRTNDREIwRkJFMTIgXAorICAgICAgRTRCNDlDMENFQTJEIDYzNDRBODBBNUE3QyAwOEM4RkUwQTFGRkUgMkJCOTg2MEIwQTBFIFwKKyAgICAgIDUxNDg2RjBFNDRFMSA4QkNDNjQxMTNCMDUgQjZGNEVDMEVFQjM2IDQ0MTMxNzBBNUI0OCBcCisgICAgICAiIiIpCisKKwogY2xhc3MgU3VuYXVQQ00zMlRlc3QoU3VuYXVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stcGNtMzIuYXUnCiAgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CkBAIC04OSw3ICsxMTUsNyBAQAogICAgICAgRTUwNDBDQkMgNjE3QzBBM0MgMDhCQzBBM0MgMkM3QzBCM0MgNTE3QzBFM0MgOEE4NDEwRkMgQjY4NDBFQkMgNDU3QzBBM0MgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CmluZGV4IDg4MDhjNDcuLmU5OWNhOWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CkBAIC0xLDE5ICsxLDI2IEBACiAiIiJEbyBhIG1pbmltYWwgdGVzdCBvZiBhbGwgdGhlIG1vZHVsZXMgdGhhdCBhcmVuJ3Qgb3RoZXJ3aXNlIHRlc3RlZC4iIiIKLQotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogCiBjbGFzcyBUZXN0VW50ZXN0ZWRNb2R1bGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9hdF9sZWFzdF9pbXBvcnRfdW50ZXN0ZWRfbW9kdWxlcyhzZWxmKToKKyAgICBkZWYgdGVzdF91bnRlc3RlZF9tb2R1bGVzX2Nhbl9iZV9pbXBvcnRlZChzZWxmKToKKyAgICAgICAgdW50ZXN0ZWQgPSAoJ2JkYicsICdlbmNvZGluZ3MnLCAnZm9ybWF0dGVyJywKKyAgICAgICAgICAgICAgICAgICAgJ250dXJsMnBhdGgnLCAndGFibmFubnknKQogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6Ci0gICAgICAgICAgICBpbXBvcnQgYmRiCi0gICAgICAgICAgICBpbXBvcnQgY2dpdGIKKyAgICAgICAgICAgIGZvciBuYW1lIGluIHVudGVzdGVkOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0ZXN0LnRlc3Rfe30nLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3Q6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd7fSBoYXMgdGVzdHMgZXZlbiB0aG91Z2ggdGVzdF9zdW5kcnkgY2xhaW1zICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdGhlcndpc2UnLmZvcm1hdChuYW1lKSkKIAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5iY3BwY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY2NvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmN5Z3dpbmNjb21waWxlcgotICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5lbXhjY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuZmlsZWxpc3QKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKICAgICAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLm1zdmNjb21waWxlcgpAQCAtMzksMjYgKzQ2LDE0IEBACiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC51cGxvYWQKIAotICAgICAgICAgICAgaW1wb3J0IGVuY29kaW5ncwotICAgICAgICAgICAgaW1wb3J0IGZvcm1hdHRlcgogICAgICAgICAgICAgaW1wb3J0IGh0bWwuZW50aXRpZXMKLSAgICAgICAgICAgIGltcG9ydCBrZXl3b3JkCi0gICAgICAgICAgICBpbXBvcnQgbWFpbGNhcAotICAgICAgICAgICAgaW1wb3J0IG50dXJsMnBhdGgKLSAgICAgICAgICAgIGltcG9ydCBvczJlbXhwYXRoCi0gICAgICAgICAgICBpbXBvcnQgcHN0YXRzCi0gICAgICAgICAgICBpbXBvcnQgcHlfY29tcGlsZQotICAgICAgICAgICAgaW1wb3J0IHNuZGhkcgotICAgICAgICAgICAgaW1wb3J0IHRhYm5hbm55CisKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgdHR5ICAgICAjIG5vdCBhdmFpbGFibGUgb24gV2luZG93cworICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICMgTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBwcmludCgic2tpcHBpbmcgdHR5IikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFVudGVzdGVkTW9kdWxlcykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdXBlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKaW5kZXggMWUyNzJlZS4uMzdmYzJkOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CkBAIC00NCw2ICs0NCwxMSBAQAogCiBjbGFzcyBUZXN0U3VwZXIodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIFRoaXMgZml4ZXMgdGhlIGRhbWFnZSB0aGF0IHRlc3RfdmFyaW91c19fX2NsYXNzX19fcGF0aG9sb2dpZXMgZG9lcy4KKyAgICAgICAgbm9ubG9jYWwgX19jbGFzc19fCisgICAgICAgIF9fY2xhc3NfXyA9IFRlc3RTdXBlcgorCiAgICAgZGVmIHRlc3RfYmFzaWNzX3dvcmtpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRCgpLmYoKSwgJ0FCQ0QnKQogCkBAIC04MSw4ICs4Niw3IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFKCkuZigpLCAnQUUnKQogCi0gICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgIGRlZiB0ZXN0X19fY2xhc3NfX19zZXQoc2VsZik6CisgICAgZGVmIHRlc3RfdmFyaW91c19fX2NsYXNzX19fcGF0aG9sb2dpZXMoc2VsZik6CiAgICAgICAgICMgU2VlIGlzc3VlICMxMjM3MAogICAgICAgICBjbGFzcyBYKEEpOgogICAgICAgICAgICAgZGVmIGYoc2VsZik6CkBAIC05MSw2ICs5NSwzMSBAQAogICAgICAgICB4ID0gWCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mKCksICdBJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fY2xhc3NfXywgNDEzKQorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgeCA9IF9fY2xhc3NfXworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhYLngsIHR5cGUoc2VsZikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlOgorICAgICAgICAgICAgZXhlYygiIiJjbGFzcyBYOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NfXyIiIiwgZ2xvYmFscygpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUuZXhjZXB0aW9uKSwgTmFtZUVycm9yKSAjIE5vdCBVbmJvdW5kTG9jYWxFcnJvcgorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgZ2xvYmFsIF9fY2xhc3NfXworICAgICAgICAgICAgX19jbGFzc19fID0gNDIKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFscygpWyJfX2NsYXNzX18iXSwgNDIpCisgICAgICAgIGRlbCBnbG9iYWxzKClbIl9fY2xhc3NfXyJdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIl9fY2xhc3NfXyIsIFguX19kaWN0X18pCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBub25sb2NhbCBfX2NsYXNzX18KKyAgICAgICAgICAgIF9fY2xhc3NfXyA9IDQyCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fY2xhc3NfXywgNDIpCiAKICAgICBkZWYgdGVzdF9fX2NsYXNzX19faW5zdGFuY2VtZXRob2Qoc2VsZik6CiAgICAgICAgICMgU2VlIGlzc3VlICMxNDg1NwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CmluZGV4IGNiNmY4NGUuLjliZDBhMDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKQEAgLTMwNCw2ICszMDQsNyBAQAogICAgICMgYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzCiAgICAgIyBjYW5fc3ltbGluawogICAgICMgc2tpcF91bmxlc3Nfc3ltbGluaworICAgICMgU3VwcHJlc3NDcmFzaFJlcG9ydAogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5IGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKaW5kZXggNTkyNmI2OS4uYTlkMzYyOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKQEAgLTMzLDcgKzMzLDcgQEAKIAogPj4+IE5vbmUgPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogYXNzaWdubWVudCB0byBrZXl3b3JkCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGtleXdvcmQKIAogSXQncyBhIHN5bnRheCBlcnJvciB0byBhc3NpZ24gdG8gdGhlIGVtcHR5IHR1cGxlLiAgV2h5IGlzbid0IGl0IGFuCiBlcnJvciB0byBhc3NpZ24gdG8gdGhlIGVtcHR5IGxpc3Q/ICBJdCB3aWxsIGFsd2F5cyByYWlzZSBzb21lIGVycm9yIGF0CkBAIC0yMzMsNyArMjMzLDcgQEAKIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZ2VuZXJhdG9yIGV4cHJlc3Npb24KID4+PiBOb25lICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIGtleXdvcmQKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8ga2V5d29yZAogPj4+IGYoKSArPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXMucHkKaW5kZXggZjc2OGU5Yi4uOTM5NjBjZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXMucHkKQEAgLTcsNiArNyw5IEBACiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IGNvZGVjcworaW1wb3J0IGdjCitpbXBvcnQgc3lzY29uZmlnCitpbXBvcnQgcGxhdGZvcm0KIAogIyBjb3VudCB0aGUgbnVtYmVyIG9mIHRlc3QgcnVucywgdXNlZCB0byBjcmVhdGUgdW5pcXVlCiAjIHN0cmluZ3MgdG8gaW50ZXJuIGluIHRlc3RfaW50ZXJuKCkKQEAgLTIyNyw3ICsyMzAsNyBAQAogCiAgICAgICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoJWQpCiAgICAgICAgICAgICBmKCkiIiIpCi0gICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIGZvciBpIGluICg1MCwgMTAwMCk6CiAgICAgICAgICAgICAgICAgc3ViID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGUgJSBpXSwKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKQEAgLTQwOCw3ICs0MTEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3lzLmludF9pbmZvLnNpemVvZl9kaWdpdCksIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oZXh2ZXJzaW9uLCBpbnQpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3lzLmhhc2hfaW5mbyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5oYXNoX2luZm8pLCA5KQogICAgICAgICBzZWxmLmFzc2VydExlc3Moc3lzLmhhc2hfaW5mby5tb2R1bHVzLCAyKipzeXMuaGFzaF9pbmZvLndpZHRoKQogICAgICAgICAjIHN5cy5oYXNoX2luZm8ubW9kdWx1cyBzaG91bGQgYmUgYSBwcmltZTsgd2UgZG8gYSBxdWljawogICAgICAgICAjIHByb2JhYmxlIHByaW1hbGl0eSB0ZXN0IChkb2Vzbid0IGV4Y2x1ZGUgdGhlIHBvc3NpYmlsaXR5IG9mCkBAIC00MjMsNiArNDI2LDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGFzaF9pbmZvLmluZiwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhhc2hfaW5mby5uYW4sIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oYXNoX2luZm8uaW1hZywgaW50KQorICAgICAgICBhbGdvID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJQeV9IQVNIX0FMR09SSVRITSIpCisgICAgICAgIGlmIHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtIGluIHsiZm52IiwgInNpcGhhc2gyNCJ9OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuaGFzaF9pbmZvLmhhc2hfYml0cywgezMyLCA2NH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5oYXNoX2luZm8uc2VlZF9iaXRzLCB7MzIsIDY0LCAxMjh9KQorCisgICAgICAgICAgICBpZiBhbGdvID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwgInNpcGhhc2gyNCIpCisgICAgICAgICAgICBlbGlmIGFsZ28gPT0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAiZm52IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwgeyJmbnYiLCAic2lwaGFzaDI0In0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFBZX0hBU0hfRVhURVJOQUwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxnbywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3lzLmhhc2hfaW5mby5jdXRvZmYsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuaGFzaF9pbmZvLmN1dG9mZiwgOCkKIAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHNpemUsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5tYXh1bmljb2RlLCBpbnQpCkBAIC00NjAsNyArNDc5LDcgQEAKICAgICBkZWYgdGVzdF90aHJlYWRfaW5mbyhzZWxmKToKICAgICAgICAgaW5mbyA9IHN5cy50aHJlYWRfaW5mbwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbmZvKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRJbihpbmZvLm5hbWUsICgnbnQnLCAnb3MyJywgJ3B0aHJlYWQnLCAnc29sYXJpcycsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubmFtZSwgKCdudCcsICdwdGhyZWFkJywgJ3NvbGFyaXMnLCBOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihpbmZvLmxvY2ssICgnc2VtYXBob3JlJywgJ211dGV4K2NvbmQnLCBOb25lKSkKIAogICAgIGRlZiB0ZXN0XzQzNTgxKHNlbGYpOgpAQCAtNDkzLDEzICs1MTIsMzMgQEAKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwKICAgICAgICAgICAgICAgICAgImluc3BlY3QiLCAiaW50ZXJhY3RpdmUiLCAib3B0aW1pemUiLCAiZG9udF93cml0ZV9ieXRlY29kZSIsCiAgICAgICAgICAgICAgICAgICJub191c2VyX3NpdGUiLCAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidmVyYm9zZSIsCi0gICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIpCisgICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIsICJpc29sYXRlZCIpCiAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHN5cy5mbGFncykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5mbGFncyksIGxlbihhdHRycykpCiAKKyAgICBkZWYgYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzZWxmLCBzeXNfYXR0cik6CisgICAgICAgICMgVXNlcnMgYXJlIGludGVudGlvbmFsbHkgcHJldmVudGVkIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyBvZgorICAgICAgICAjIHN5cy5mbGFncywgc3lzLnZlcnNpb25faW5mbywgYW5kIHN5cy5nZXR3aW5kb3dzdmVyc2lvbi4KKyAgICAgICAgYXR0cl90eXBlID0gdHlwZShzeXNfYXR0cikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYXR0cl90eXBlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYXR0cl90eXBlLl9fbmV3X18oYXR0cl90eXBlKQorCisgICAgZGVmIHRlc3Rfc3lzX2ZsYWdzX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzeXMuZmxhZ3MpCisKKyAgICBkZWYgdGVzdF9zeXNfdmVyc2lvbl9pbmZvX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzeXMudmVyc2lvbl9pbmZvKQorCisgICAgZGVmIHRlc3Rfc3lzX2dldHdpbmRvd3N2ZXJzaW9uX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgICMgU2tpcCBpZiBub3QgYmVpbmcgcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIHRlc3Quc3VwcG9ydC5nZXRfYXR0cmlidXRlKHN5cywgImdldHdpbmRvd3N2ZXJzaW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRfcmFpc2Vfb25fbmV3X3N5c190eXBlKHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpKQorCiAgICAgZGVmIHRlc3RfY2xlYXJfdHlwZV9jYWNoZShzZWxmKToKICAgICAgICAgc3lzLl9jbGVhcl90eXBlX2NhY2hlKCkKIApAQCAtNTIyLDYgKzU2MSw0MiBAQAogICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYic/JykKIAorICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaSIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQoY2hyKDB4YTIpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInVW5pY29kZUVuY29kZUVycm9yOicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyYiInXHhhMiciLCBlcnIpCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiYXNjaWk6IgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludChjaHIoMHhhMikpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmljb2RlRW5jb2RlRXJyb3I6JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJiIidceGEyJyIsIGVycikKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICI6c3Vycm9nYXRlZXNjYXBlIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludChjaHIoMHhkY2JkKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInXHhiZCcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0ZXN0LnN1cHBvcnQuRlNfTk9OQVNDSUksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIE9TIHN1cHBvcnQgb2Ygbm9uLUFTQ0lJIGVuY29kaW5ncycpCisgICAgZGVmIHRlc3RfaW9lbmNvZGluZ19ub25hc2NpaShzZWxmKToKKyAgICAgICAgZW52ID0gZGljdChvcy5lbnZpcm9uKQorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gIiIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpbnQoJWEpJyAlIHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYpCisgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBvcy5mc2VuY29kZSh0ZXN0LnN1cHBvcnQuRlNfTk9OQVNDSUkpKQorCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuYmFzZV9wcmVmaXggIT0gc3lzLnByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICdUZXN0IGlzIG5vdCB2ZW52LWNvbXBhdGlibGUnKQogICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGUoc2VsZik6CkBAIC01ODIsNiArNjU3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuaW1wbGVtZW50YXRpb24ubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuaW1wbGVtZW50YXRpb24ubmFtZS5sb3dlcigpKQogCisgICAgQHRlc3Quc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9kZWJ1Z21hbGxvY3N0YXRzKHNlbGYpOgogICAgICAgICAjIFRlc3Qgc3lzLl9kZWJ1Z21hbGxvY3N0YXRzKCkKICAgICAgICAgZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKQEAgLTU4OSw2ICs2NjUsMzkgQEAKICAgICAgICAgcmV0LCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJmcmVlIFB5RGljdE9iamVjdHMiLCBlcnIpCiAKKyAgICAgICAgIyBUaGUgZnVuY3Rpb24gaGFzIG5vIHBhcmFtZXRlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5fZGVidWdtYWxsb2NzdGF0cywgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3lzLCAiZ2V0YWxsb2NhdGVkYmxvY2tzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5nZXRhbGxvY2F0ZWRibG9ja3MgdW5hdmFpbGFibGUgb24gdGhpcyBidWlsZCIpCisgICAgZGVmIHRlc3RfZ2V0YWxsb2NhdGVkYmxvY2tzKHNlbGYpOgorICAgICAgICAjIFNvbWUgc2FuaXR5IGNoZWNrcworICAgICAgICB3aXRoX3B5bWFsbG9jID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX1BZTUFMTE9DJykKKyAgICAgICAgYSA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYSksIGludCkKKyAgICAgICAgaWYgd2l0aF9weW1hbGxvYzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihhLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXaGVuIFdJVEhfUFlNQUxMT0MgaXNuJ3QgYXZhaWxhYmxlLCB3ZSBkb24ndCBrbm93IGFueXRoaW5nCisgICAgICAgICAgICAjIGFib3V0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uOiB0aGUgZnVuY3Rpb24gbWlnaHQKKyAgICAgICAgICAgICMgcmV0dXJuIDAgb3Igc29tZXRoaW5nIGdyZWF0ZXIuCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChhLCAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdoaWxlIHdlIGNvdWxkIGltYWdpbmUgYSBQeXRob24gc2Vzc2lvbiB3aGVyZSB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAjIG11bHRpcGxlIGJ1ZmZlciBvYmplY3RzIHdvdWxkIGV4Y2VlZCB0aGUgc2hhcmluZyBvZiByZWZlcmVuY2VzLAorICAgICAgICAgICAgIyBpdCBpcyB1bmxpa2VseSB0byBoYXBwZW4gaW4gYSBub3JtYWwgdGVzdCBydW4uCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYSwgc3lzLmdldHRvdGFscmVmY291bnQoKSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBnZXR0b3RhbHJlZmNvdW50KCkgbm90IGF2YWlsYWJsZQorICAgICAgICAgICAgcGFzcworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgYiA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChiLCBhKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgYyA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydEluKGMsIHJhbmdlKGIgLSA1MCwgYiArIDUwKSkKKworCiBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQogY2xhc3MgU2l6ZW9mVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTYzNCw3ICs3NDMsNyBAQAogICAgICAgICBzYW1wbGVzID0gW2InJywgYid1JyoxMDAwMDBdCiAgICAgICAgIGZvciBzYW1wbGUgaW4gc2FtcGxlczoKICAgICAgICAgICAgIHggPSBieXRlYXJyYXkoc2FtcGxlKQotICAgICAgICAgICAgY2hlY2soeCwgdnNpemUoJ2luUCcpICsgeC5fX2FsbG9jX18oKSkKKyAgICAgICAgICAgIGNoZWNrKHgsIHZzaXplKCduMlBpJykgKyB4Ll9fYWxsb2NfXygpKQogICAgICAgICAjIGJ5dGVhcnJheV9pdGVyYXRvcgogICAgICAgICBjaGVjayhpdGVyKGJ5dGVhcnJheSgpKSwgc2l6ZSgnblAnKSkKICAgICAgICAgIyBjZWxsCkBAIC03MTMsNyArODIyLDcgQEAKICAgICAgICAgbmZyZWVzID0gbGVuKHguZl9jb2RlLmNvX2ZyZWV2YXJzKQogICAgICAgICBleHRyYXMgPSB4LmZfY29kZS5jb19zdGFja3NpemUgKyB4LmZfY29kZS5jb19ubG9jYWxzICtcCiAgICAgICAgICAgICAgICAgICBuY2VsbHMgKyBuZnJlZXMgLSAxCi0gICAgICAgIGNoZWNrKHgsIHZzaXplKCcxMlAzaScgKyBDT19NQVhCTE9DS1MqJzNpJyArICdQJyArIGV4dHJhcyonUCcpKQorICAgICAgICBjaGVjayh4LCB2c2l6ZSgnMTJQM2ljJyArIENPX01BWEJMT0NLUyonM2knICsgJ1AnICsgZXh0cmFzKidQJykpCiAgICAgICAgICMgZnVuY3Rpb24KICAgICAgICAgZGVmIGZ1bmMoKTogcGFzcwogICAgICAgICBjaGVjayhmdW5jLCBzaXplKCcxMlAnKSkKQEAgLTc1OSw3ICs4NjgsNyBAQAogICAgICAgICAjIG1lbW9yeXZpZXcKICAgICAgICAgY2hlY2sobWVtb3J5dmlldyhiJycpLCBzaXplKCdQbmluIDJQMm4yaTVQIDNjUG4nKSkKICAgICAgICAgIyBtb2R1bGUKLSAgICAgICAgY2hlY2sodW5pdHRlc3QsIHNpemUoJ1BuUCcpKQorICAgICAgICBjaGVjayh1bml0dGVzdCwgc2l6ZSgnUG5QUFAnKSkKICAgICAgICAgIyBOb25lCiAgICAgICAgIGNoZWNrKE5vbmUsIHNpemUoJycpKQogICAgICAgICAjIE5vdEltcGxlbWVudGVkVHlwZQpAQCAtODEzLDExICs5MjIsMTEgQEAKICAgICAgICAgY2hlY2soKDEsMiwzKSwgdnNpemUoJycpICsgMypzZWxmLlApCiAgICAgICAgICMgdHlwZQogICAgICAgICAjIHN0YXRpYyB0eXBlOiBQeVR5cGVPYmplY3QKLSAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSScpCisgICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUElQJykKICAgICAgICAgY2hlY2soaW50LCBzKQogICAgICAgICAjIChQeVR5cGVPYmplY3QgKyBQeU51bWJlck1ldGhvZHMgKyBQeU1hcHBpbmdNZXRob2RzICsKICAgICAgICAgIyAgUHlTZXF1ZW5jZU1ldGhvZHMgKyBQeUJ1ZmZlclByb2NzICsgNFApCi0gICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUEknKSArIHN0cnVjdC5jYWxjc2l6ZSgnMzRQIDNQIDEwUCAyUCA0UCcpCisgICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUElQJykgKyBzdHJ1Y3QuY2FsY3NpemUoJzM0UCAzUCAxMFAgMlAgNFAnKQogICAgICAgICAjIFNlcGFyYXRlIGJsb2NrIGZvciBQeURpY3RLZXlzT2JqZWN0IHdpdGggNCBlbnRyaWVzCiAgICAgICAgIHMgKz0gc3RydWN0LmNhbGNzaXplKCIyblBuIikgKyA0KnN0cnVjdC5jYWxjc2l6ZSgibjJQIikKICAgICAgICAgIyBjbGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQppbmRleCAwM2Y2N2ZkLi44MDRjNDQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCBzaHV0aWwKIGZyb20gY29weSBpbXBvcnQgY29weQogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGNoZWNrX3dhcm5pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIHNraXBfdW5sZXNzX3N5bWxpbmspCiAKIGltcG9ydCBzeXNjb25maWcKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9zY2hlbWVfbmFtZXMoc2VsZik6Ci0gICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvczInLCAnb3MyX2hvbWUnLCAnb3N4X2ZyYW1ld29ya191c2VyJywKKyAgICAgICAgd2FudGVkID0gKCdudCcsICdudF91c2VyJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCiAgICAgICAgICAgICAgICAgICAncG9zaXhfaG9tZScsICdwb3NpeF9wcmVmaXgnLCAncG9zaXhfdXNlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3NjaGVtZV9uYW1lcygpLCB3YW50ZWQpCiAKQEAgLTMwNSwxNCArMzA1LDEzIEBACiAgICAgICAgIGlmICdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnIGluIGVudjoKICAgICAgICAgICAgIGRlbCBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnLCAndycpIGFzIGRldm51bGxfZnA6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCi0gICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsX2ZwLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCkBAIC0zMjUsMjAgKzMyNCwxOSBAQAogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjEnCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnKSBhcyBkZXZfbnVsbDoKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKLSAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCi0gICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgc3RkZXJyPWRldl9udWxsLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCi0gICAgICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQotICAgICAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHRlc3RfcGxhdGZvcm0gPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15X3BsYXRmb3JtLCB0ZXN0X3BsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKIAogICAgIGRlZiB0ZXN0X3NyY2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgSXNzdWVzICMxNTMyMiwgIzE1MzY0LgpAQCAtMzcxLDYgKzM2OSwyNiBAQAogICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2Rpciwgc3JjZGlyMikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIsICdTTycpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT192YWx1ZShzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09faW5fdmFycyhzZWxmKToKKyAgICAgICAgdmFycyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh2YXJzWydTTyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnNbJ1NPJ10sIHZhcnNbJ0VYVF9TVUZGSVgnXSkKKwogCiBjbGFzcyBNYWtlZmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkgYi9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQppbmRleCA0ZTc2MjFlNS4uYjdmZDJiZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkKQEAgLTMyLDYgKzMyLDEwIEBACiAgICAgZGVmIHRlc3RfbG9nX3VwdG8oc2VsZik6CiAgICAgICAgIHN5c2xvZy5MT0dfVVBUTyhzeXNsb2cuTE9HX0lORk8pCiAKKyAgICBkZWYgdGVzdF9vcGVubG9nX25vYXJncyhzZWxmKToKKyAgICAgICAgc3lzbG9nLm9wZW5sb2coKQorICAgICAgICBzeXNsb2cuc3lzbG9nKCd0ZXN0IG1lc3NhZ2UgZnJvbSBweXRob24gdGVzdF9zeXNsb2cnKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQppbmRleCA2OGZlNjA4Li5lNTI3ZTQwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC0xLDEzICsxLDEyIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBpbwotaW1wb3J0IHNodXRpbAogZnJvbSBoYXNobGliIGltcG9ydCBtZDUKIAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGFyZmlsZQogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgogCiAjIENoZWNrIGZvciBvdXIgY29tcHJlc3Npb24gbW9kdWxlcy4KIHRyeToKQEAgLTI3LDExICsyNiwxMyBAQAogICAgIHJldHVybiBtZDUoZGF0YSkuaGV4ZGlnZXN0KCkKIAogVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAiLXRhcmRpciIKK3RhcmV4dGRpciA9IFRFTVBESVIgKyAnLWV4dHJhY3QtdGVzdCcKIHRhcm5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCJ0ZXN0dGFyLnRhciIpCiBnemlwbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuZ3oiKQogYnoybmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuYnoyIikKIHh6bmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIueHoiKQogdG1wbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidG1wLnRhciIpCitkb3RsZXNzbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhciIpCiAKIG1kNV9yZWd0eXBlID0gIjY1ZjQ3N2M4MThhZDllMTVmN2ZlYWIwYzZkMzc3NDJmIgogbWQ1X3NwYXJzZSA9ICJhNTRmYmM0Y2E0ZjQzOTlhOTBlMWIyNzE2NDAxMmZjNiIKQEAgLTI3MSw3ICsyNzIsNyBAQAogICAgICAgICAjID9ydy1yLS1yLS0gdGFyZmlsZS90YXJmaWxlICAgICA3MDExIDIwMDMtMDEtMDYgMDc6MTk6NDMgdXN0YXIvY29udHR5cGUKICAgICAgICAgIyA/cnctci0tci0tIHRhcmZpbGUvdGFyZmlsZSAgICAgNzAxMSAyMDAzLTAxLTA2IDA3OjE5OjQzIHVzdGFyL3JlZ3R5cGUKICAgICAgICAgIyAuLi4KLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIChicictcnctci0tci0tIHRhcmZpbGUvdGFyZmlsZVxzKzcwMTEgJworICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgKGJyJ1w/cnctci0tci0tIHRhcmZpbGUvdGFyZmlsZVxzKzcwMTEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ1xkezR9LVxkXGQtXGRcZFxzK1xkXGQ6XGRcZDpcZFxkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicid1c3Rhci9cdyt0eXBlID9ccj9cbicpICogMikKICAgICAgICAgIyBNYWtlIHN1cmUgaXQgcHJpbnRzIHRoZSBzb3VyY2Ugb2YgbGluayB3aXRoIHZlcmJvc2UgZmxhZwpAQCAtMzE5LDEyICszMjAsNyBAQAogICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF90YXJmaWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yIGlzc3VlMTE1MTM6IHByZXZlbnQgbm9uLWV4aXN0ZW50IGd6aXBwZWQgdGFyZmlsZXMgcmFpc2luZwogICAgICAgICAjIG11bHRpcGxlIGV4Y2VwdGlvbnMuCi0gICAgICAgIHRlc3QgPSAneHh4JwotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgJ3wnIGluIHNlbGYubW9kZToKLSAgICAgICAgICAgICMgSXNzdWUgIzIwMzg0OiBPbiBXaW5kb3dzIG9zLm9wZW4oKSBlcnJvciBtZXNzYWdlIGRvZXNuJ3QKLSAgICAgICAgICAgICMgY29udGFpbiBmaWxlIG5hbWUuCi0gICAgICAgICAgICB0ZXN0ID0gJycKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEZpbGVOb3RGb3VuZEVycm9yLCB0ZXN0KToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEZpbGVOb3RGb3VuZEVycm9yLCAieHh4Iik6CiAgICAgICAgICAgICB0YXJmaWxlLm9wZW4oInh4eCIsIHNlbGYubW9kZSkKIAogICAgIGRlZiB0ZXN0X251bGxfdGFyZmlsZShzZWxmKToKQEAgLTM1NSwxMCArMzUxLDE2IEBACiAKIAogY2xhc3MgTWlzY1JlYWRUZXN0QmFzZShDb21tb25SZWFkVGVzdCk6CisgICAgZGVmIHJlcXVpcmVzX25hbWVfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF9ub19uYW1lX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBzZWxmLnJlcXVpcmVzX25hbWVfYXR0cmlidXRlKCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYudGFybmFtZSwgInJiIikgYXMgZm9iajoKLSAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgb3MucGF0aC5hYnNwYXRoKGZvYmoubmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm9iai5uYW1lLCBzdHIpCisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRhci5uYW1lLCBzdHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgb3MucGF0aC5hYnNwYXRoKGZvYmoubmFtZSkpCiAKICAgICBkZWYgdGVzdF9ub19uYW1lX2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKHNlbGYudGFybmFtZSwgInJiIikgYXMgZm9iajoKQEAgLTM2Niw3ICszNjgsNyBAQAogICAgICAgICBmb2JqID0gaW8uQnl0ZXNJTyhkYXRhKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgZm9iaiwgIm5hbWUiKQogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodGFyLm5hbWUpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9uYW1lX2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKHNlbGYudGFybmFtZSwgInJiIikgYXMgZm9iajoKQEAgLTM3NCw3ICszNzYsMjUgQEAKICAgICAgICAgZm9iaiA9IGlvLkJ5dGVzSU8oZGF0YSkKICAgICAgICAgZm9iai5uYW1lID0gIiIKICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkgYXMgdGFyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRhci5uYW1lKQorCisgICAgZGVmIHRlc3RfaW50X25hbWVfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDIxMDQ0OiB0YXJmaWxlLm9wZW4oKSBzaG91bGQgaGFuZGxlIGZpbGVvYmogd2l0aCBhbiBpbnRlZ2VyCisgICAgICAgICMgJ25hbWUnIGF0dHJpYnV0ZS4KKyAgICAgICAgZmQgPSBvcy5vcGVuKHNlbGYudGFybmFtZSwgb3MuT19SRE9OTFkpCisgICAgICAgIHdpdGggb3BlbihmZCwgJ3JiJykgYXMgZm9iajoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb2JqLm5hbWUsIGludCkKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0YXIubmFtZSkKKworICAgIGRlZiB0ZXN0X2J5dGVzX25hbWVfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLnJlcXVpcmVzX25hbWVfYXR0cmlidXRlKCkKKyAgICAgICAgdGFybmFtZSA9IG9zLmZzZW5jb2RlKHNlbGYudGFybmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHRhcm5hbWUsICdyYicpIGFzIGZvYmo6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm9iai5uYW1lLCBieXRlcykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGFyLm5hbWUsIGJ5dGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLm5hbWUsIG9zLnBhdGguYWJzcGF0aChmb2JqLm5hbWUpKQogCiAgICAgZGVmIHRlc3RfaWxsZWdhbF9tb2RlX2FyZyhzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICd3YicpOgpAQCAtNDU5LDE2ICs0NzksMTYgQEAKICAgICAgICAgIyBUZXN0IGhhcmRsaW5rIGV4dHJhY3Rpb24gKGUuZy4gYnVnICM4NTcyOTcpLgogICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJuYW1lLCBlcnJvcmxldmVsPTEsIGVuY29kaW5nPSJpc284ODU5LTEiKSBhcyB0YXI6CiAgICAgICAgICAgICB0YXIuZXh0cmFjdCgidXN0YXIvcmVndHlwZSIsIFRFTVBESVIpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgb3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9yZWd0eXBlIikpCiAKICAgICAgICAgICAgIHRhci5leHRyYWN0KCJ1c3Rhci9sbmt0eXBlIiwgVEVNUERJUikKLSAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL2xua3R5cGUiKSkKICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL2xua3R5cGUiKSwgInJiIikgYXMgZjoKICAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWQ1c3VtKGRhdGEpLCBtZDVfcmVndHlwZSkKIAogICAgICAgICAgICAgdGFyLmV4dHJhY3QoInVzdGFyL3N5bXR5cGUiLCBURU1QRElSKQotICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9zeW10eXBlIikpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvc3ltdHlwZSIpKQogICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvc3ltdHlwZSIpLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZDVzdW0oZGF0YSksIG1kNV9yZWd0eXBlKQpAQCAtNTAxLDcgKzUyMSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLm10aW1lLCBmaWxlX210aW1lLCBlcnJtc2cpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0YXIuY2xvc2UoKQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShESVIpCisgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZShESVIpCiAKICAgICBkZWYgdGVzdF9leHRyYWN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgZGlydHlwZSA9ICJ1c3Rhci9kaXJ0eXBlIgpAQCAtNTE2LDcgKzUzNiw3IEBACiAgICAgICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChleHRyYWN0ZWQpLnN0X21vZGUgJiAwbzc3NywgMG83NTUpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKERJUikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKERJUikKIAogICAgIGRlZiB0ZXN0X2luaXRfY2xvc2VfZm9iaihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNzM0MTogQ2xvc2UgdGhlIGludGVybmFsIGZpbGUgb2JqZWN0IGluIHRoZSBUYXJGaWxlCkBAIC01NTIsMTEgKzU3MiwxMSBAQAogICAgIHBhc3MKIAogY2xhc3MgQnoyTWlzY1JlYWRUZXN0KEJ6MlRlc3QsIE1pc2NSZWFkVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9ub19uYW1lX2FyZ3VtZW50KHNlbGYpOgorICAgIGRlZiByZXF1aXJlc19uYW1lX2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgc2VsZi5za2lwVGVzdCgiQloyRmlsZSBoYXZlIG5vIG5hbWUgYXR0cmlidXRlIikKIAogY2xhc3MgTHptYU1pc2NSZWFkVGVzdChMem1hVGVzdCwgTWlzY1JlYWRUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X25vX25hbWVfYXJndW1lbnQoc2VsZik6CisgICAgZGVmIHJlcXVpcmVzX25hbWVfYXR0cmlidXRlKHNlbGYpOgogICAgICAgICBzZWxmLnNraXBUZXN0KCJMWk1BRmlsZSBoYXZlIG5vIG5hbWUgYXR0cmlidXRlIikKIAogCkBAIC04ODAsNyArOTAwLDcgQEAKICAgICAgICAgICAgICAgICBmb2JqLnNlZWsoNDA5NikKICAgICAgICAgICAgICAgICBmb2JqLnRydW5jYXRlKCkKICAgICAgICAgICAgIHMgPSBvcy5zdGF0KG5hbWUpCi0gICAgICAgICAgICBvcy5yZW1vdmUobmFtZSkKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gcy5zdF9ibG9ja3MgPT0gMAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC0xMDEzLDcgKzEwMzMsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3Mucm1kaXIocGF0aCkKKyAgICAgICAgICAgIHN1cHBvcnQucm1kaXIocGF0aCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJsaW5rIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3NpbmcgaGFyZGxpbmsgaW1wbGVtZW50YXRpb24iKQpAQCAtMTAzMyw4ICsxMDUzLDggQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnJlbW92ZSh0YXJnZXQpCi0gICAgICAgICAgICBvcy5yZW1vdmUobGluaykKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRhcmdldCkKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKGxpbmspCiAKICAgICBAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCiAgICAgZGVmIHRlc3Rfc3ltbGlua19zaXplKHNlbGYpOgpAQCAtMTA0OCw3ICsxMDY4LDcgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsocGF0aCkKIAogICAgIGRlZiB0ZXN0X2FkZF9zZWxmKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yICMxMjU3MjU1LgpAQCAtMTA5NSw3ICsxMTE1LDcgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRlbXBkaXIpCiAKICAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6CiAgICAgICAgIHRlbXBkaXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImZpbHRlciIpCkBAIC0xMTMxLDcgKzExNTEsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGVtcGRpcikKIAogICAgICMgR3VhcmFudGVlIHRoYXQgc3RvcmVkIHBhdGhuYW1lcyBhcmUgbm90IG1vZGlmaWVkLiBEb24ndAogICAgICMgcmVtb3ZlIC4vIG9yIC4uLyBvciBkb3VibGUgc2xhc2hlcy4gU3RpbGwgbWFrZSBhYnNvbHV0ZQpAQCAtMTE1OSw5ICsxMTc5LDkgQEAKICAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgaWYgbm90IGRpcjoKLSAgICAgICAgICAgIG9zLnJlbW92ZShmb28pCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhmb28pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvcy5ybWRpcihmb28pCisgICAgICAgICAgICBzdXBwb3J0LnJtZGlyKGZvbykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubmFtZSwgY21wX3BhdGggb3IgcGF0aC5yZXBsYWNlKG9zLnNlcCwgIi8iKSkKIApAQCAtMTE5Miw4ICsxMjEyLDggQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnVubGluayh0ZW1wYXJjaGl2ZSkKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRlbXBhcmNoaXZlKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGVtcGRpcikKIAogICAgIGRlZiB0ZXN0X3BhdGhuYW1lcyhzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiZm9vIikKQEAgLTEyOTMsNyArMTMxMyw3IEBACiAgICAgICAgICMgVGVzdCBmb3IgaXNzdWUgIzg0NjQ6IENyZWF0ZSBmaWxlcyB3aXRoIGNvcnJlY3QKICAgICAgICAgIyBwZXJtaXNzaW9ucy4KICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG1wbmFtZSk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUodG1wbmFtZSkKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRtcG5hbWUpCiAKICAgICAgICAgb3JpZ2luYWxfdW1hc2sgPSBvcy51bWFzaygwbzAyMikKICAgICAgICAgdHJ5OgpAQCAtMTY0Nyw3ICsxNjY3LDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYudGFybmFtZSA9IHRtcG5hbWUKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi50YXJuYW1lKToKLSAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLnRhcm5hbWUpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLnRhcm5hbWUpCiAKICAgICBkZWYgX2NyZWF0ZV90ZXN0dGFyKHNlbGYsIG1vZGU9Inc6Iik6CiAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKSBhcyBzcmM6CkBAIC0xODQ3LDYgKzE4NjcsMTcxIEBACiAgICAgICAgICAgICB0YXJmaWxlLml0bigweDEwMDAwMDAwMDAwLCA2LCB0YXJmaWxlLkdOVV9GT1JNQVQpCiAKIAorY2xhc3MgQ29tbWFuZExpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0YXJmaWxlY21kKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGFyZmlsZScsICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiBvdXQucmVwbGFjZShvcy5saW5lc2VwLmVuY29kZSgpLCBiJ1xuJykKKworICAgIGRlZiB0YXJmaWxlY21kX2ZhaWx1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3RhcmZpbGUnLCAqYXJncykKKworICAgIGRlZiBtYWtlX3NpbXBsZV90YXJmaWxlKHNlbGYsIHRhcl9uYW1lKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyksCisgICAgICAgICAgICAgICAgIHN1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLW5vLWNvZGluZy1jb29raWUtJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQtdXRmOC1ib20tc2lnLW9ubHkudHh0JyldCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgdGFyX25hbWUpCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lLCAndycpIGFzIHRmOgorICAgICAgICAgICAgZm9yIHRhcmRhdGEgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgdGYuYWRkKHRhcmRhdGEsIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZSh0YXJkYXRhKSkKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIGZvciBvcHQgaW4gJy10JywgJy0tdGVzdCc6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdGFyX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLXQnLCB0YXJfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInaXMgYSB0YXIgYXJjaGl2ZS5cbicsIG91dCkKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZF9pbnZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgIHppcG5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCd6aXBkaXIuemlwJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi50YXJmaWxlY21kX2ZhaWx1cmUoJy10JywgemlwbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBpcyBub3QgYSB0YXIgYXJjaGl2ZS4nLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHRhcl9uYW1lPXRhcl9uYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGFyX25hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGFbOjUxMV0pCisgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctdCcsIHRtcG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodG1wbmFtZSkKKworICAgIGRlZiB0ZXN0X2xpc3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyB0OgorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lLCAncicpIGFzIHRmOgorICAgICAgICAgICAgICAgICAgICB0Zi5saXN0KHZlcmJvc2U9RmFsc2UpCisgICAgICAgICAgICBleHBlY3RlZCA9IHQuZ2V0dmFsdWUoKS5lbmNvZGUoJ2FzY2lpJywgJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLWwnLCAnLS1saXN0JzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0YXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OSU9FTkNPRElORz0nYXNjaWknKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2xpc3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHQ6CisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUsICdyJykgYXMgdGY6CisgICAgICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1UcnVlKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJykKKyAgICAgICAgICAgIGZvciBvcHQgaW4gJy12JywgJy0tdmVyYm9zZSc6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgJy1sJywgdGFyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTklPRU5DT0RJTkc9J2FzY2lpJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfaW52YWxpZF9maWxlKHNlbGYpOgorICAgICAgICB6aXBuYW1lID0gc3VwcG9ydC5maW5kZmlsZSgnemlwZGlyLnppcCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctbCcsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIGZpbGVzID0gW3N1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLnR4dCcpLAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy1uby1jb2RpbmctY29va2llLScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kLXV0ZjgtYm9tLXNpZy1vbmx5LnR4dCcpXQorICAgICAgICBmb3Igb3B0IGluICctYycsICctLWNyZWF0ZSc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdG1wbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRtcG5hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWMnLCB0bXBuYW1lLCAqZmlsZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBmaWxlIGNyZWF0ZWQuJywgb3V0KQorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmRfZG90bGVzc19maWxlbmFtZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCBkb3RsZXNzbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGRvdGxlc3NuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoZG90bGVzc25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9kb3Rfc3RhcnRlZF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgdGFyX25hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgIi50ZXN0dGFyIikKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCB0YXJfbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGFyX25hbWUpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2NvbW1hbmQoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICBmb3Igb3B0IGluICctZScsICctLWV4dHJhY3QnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0bXBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRhcmV4dGRpcikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2Vfc2ltcGxlX3RhcmZpbGUodG1wbmFtZSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgJy1lJywgdG1wbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInIGZpbGUgaXMgZXh0cmFjdGVkLicsIG91dCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX2RpZmZlcmVudF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQoJy1lJywgdG1wbmFtZSwgJ3NwYW1kaXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRhcmV4dGRpcikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZF9pbnZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgIHppcG5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCd6aXBkaXIuemlwJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHRhcmV4dGRpcik6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLnRhcmZpbGVjbWRfZmFpbHVyZSgnLWUnLCB6aXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGInIGlzIG5vdCBhIHRhciBhcmNoaXZlLicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworCiBjbGFzcyBDb250ZXh0TWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CkBAIC0xODU1LDIwICsyMDQwLDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9jbG9zZWQoc2VsZik6Ci0gICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBJT0Vycm9yCisgICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBPU0Vycm9yCiAgICAgICAgICMgaWYgdGhlIFRhckZpbGUgb2JqZWN0IGlzIGFscmVhZHkgY2xvc2VkLgogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSkKICAgICAgICAgdGFyLmNsb3NlKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKICAgICAgICAgICAgIHdpdGggdGFyOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IGlmIHRoZSBJT0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KKyAgICAgICAgIyBUZXN0IGlmIHRoZSBPU0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGV4YzoKICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUpIGFzIHRhcjoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBJT0Vycm9yLAorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgZXhjZXB0aW9uIHJhaXNlZCBpbiBjb250ZXh0IG1hbmFnZXIiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQogCkBAIC0xOTc0LDYgKzIxNTksOCBAQAogICAgIHN1cHBvcnQudW5saW5rKFRFTVBESVIpCiAgICAgb3MubWFrZWRpcnMoVEVNUERJUikKIAorICAgIGdsb2JhbCB0ZXN0dGFybmFtZXMKKyAgICB0ZXN0dGFybmFtZXMgPSBbdGFybmFtZV0KICAgICB3aXRoIG9wZW4odGFybmFtZSwgInJiIikgYXMgZm9iajoKICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCiAKQEAgLTE5ODEsMTIgKzIxNjgsMTMgQEAKICAgICBmb3IgYyBpbiBHemlwVGVzdCwgQnoyVGVzdCwgTHptYVRlc3Q6CiAgICAgICAgIGlmIGMub3BlbjoKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKGMudGFybmFtZSkKKyAgICAgICAgICAgIHRlc3R0YXJuYW1lcy5hcHBlbmQoYy50YXJuYW1lKQogICAgICAgICAgICAgd2l0aCBjLm9wZW4oYy50YXJuYW1lLCAid2IiKSBhcyB0YXI6CiAgICAgICAgICAgICAgICAgdGFyLndyaXRlKGRhdGEpCiAKIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgogICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFTVBESVIpOgotICAgICAgICBzaHV0aWwucm10cmVlKFRFTVBESVIpCisgICAgICAgIHN1cHBvcnQucm10cmVlKFRFTVBESVIpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RjbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CmluZGV4IDUyMjZlZTYuLmRhOGY2MjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CkBAIC03LDcgKzcsNyBAQAogX3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKIAogIyBNYWtlIHN1cmUgdGtpbnRlci5fZml4IHJ1bnMgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudAotc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd0a2ludGVyJykKK3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXInKQogCiBmcm9tIHRraW50ZXIgaW1wb3J0IFRjbAogZnJvbSBfdGtpbnRlciBpbXBvcnQgVGNsRXJyb3IKQEAgLTEzMyw2ICsxMzMsNTAgQEAKICAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLnVuc2V0dmFyLCdhJykKIAorICAgIGRlZiB0ZXN0X2dldGludChzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAudGsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0aW50KCcgNDIgJyksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5nZXRpbnQoNDIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0aW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRpbnQsICc0MicsICcxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGludCwgYic0MicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGludCwgNDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHRjbC5nZXRpbnQsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgVmFsdWVFcnJvciwgVGNsRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2wuZ2V0aW50LCAnNDJcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChVbmljb2RlRW5jb2RlRXJyb3IsIFZhbHVlRXJyb3IsIFRjbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGNsLmdldGludCwgJzQyXHVkODAwJykKKworICAgIGRlZiB0ZXN0X2dldGRvdWJsZShzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAudGsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0ZG91YmxlKCcgNDIgJyksIDQyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGRvdWJsZSgnIDQyLjUgJyksIDQyLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGRvdWJsZSg0Mi41KSwgNDIuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0ZG91YmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRkb3VibGUsICc0Mi41JywgJzEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0ZG91YmxlLCBiJzQyLjUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRkb3VibGUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmdldGRvdWJsZSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBWYWx1ZUVycm9yLCBUY2xFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbC5nZXRkb3VibGUsICc0Mi41XDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVW5pY29kZUVuY29kZUVycm9yLCBWYWx1ZUVycm9yLCBUY2xFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbC5nZXRkb3VibGUsICc0Mi41XHVkODAwJykKKworICAgIGRlZiB0ZXN0X2dldGJvb2xlYW4oc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwLnRrCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGNsLmdldGJvb2xlYW4oJ29uJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGNsLmdldGJvb2xlYW4oJzEnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0Ym9vbGVhbig0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRib29sZWFuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRib29sZWFuLCAnb24nLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGJvb2xlYW4sIGInb24nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRib29sZWFuLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wuZ2V0Ym9vbGVhbiwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBWYWx1ZUVycm9yLCBUY2xFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbC5nZXRib29sZWFuLCAnb25cMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChVbmljb2RlRW5jb2RlRXJyb3IsIFZhbHVlRXJyb3IsIFRjbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGNsLmdldGJvb2xlYW4sICdvblx1ZDgwMCcpCisKICAgICBkZWYgdGVzdEV2YWxGaWxlKHNlbGYpOgogICAgICAgICB0Y2wgPSBzZWxmLmludGVycAogICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3JykgYXMgZjoKQEAgLTM0NSw4ICszODksMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoJ3N0clx4MDBpbmcnKSwgJ3N0clx4MDBpbmcnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZSgnc3RyXHgwMGluZ1x4YmQnKSwgJ3N0clx4MDBpbmdceGJkJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoJ3N0clx4MDBpbmdcdTIwYWMnKSwgJ3N0clx4MDBpbmdcdTIwYWMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShiJ3N0clx4MDBpbmcnKSwgJ3N0clx4MDBpbmcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShiJ3N0clx4YzBceDgwaW5nJyksICdzdHJceDAwaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoYidzdHJceDAwaW5nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJceDAwaW5nJyBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UgJ3N0clx4MDBpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShiJ3N0clx4YzBceDgwaW5nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJceGMwXHg4MGluZycgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICdzdHJceGMwXHg4MGluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKGInc3RyXHhiZGluZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyXHhiZGluZycgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICdzdHJceGJkaW5nJykKICAgICAgICAgZm9yIGkgaW4gKDAsIDEsIC0xLCAyKiozMS0xLCAtMioqMzEpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoaSksIGkgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlIHN0cihpKSkKICAgICAgICAgZm9yIGYgaW4gKDAuMCwgMS4wLCAtMS4wLCAxLzMsCkBAIC0zNjIsMTAgKzQxMCw5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShmbG9hdCgnaW5mJykpLCBmbG9hdCgnaW5mJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZSgtZmxvYXQoJ2luZicpKSwgLWZsb2F0KCdpbmYnKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGYgPSBmbG9hdChwYXNzVmFsdWUoZmxvYXQoJ25hbicpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQocGFzc1ZhbHVlKGZsb2F0KCdpbmYnKSkpLCBmbG9hdCgnaW5mJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHBhc3NWYWx1ZSgtZmxvYXQoJ2luZicpKSksIC1mbG9hdCgnaW5mJykpCisgICAgICAgICAgICAjIFhYWCBOYU4gcmVwcmVzZW50YXRpb24gY2FuIGJlIG5vdCBwYXJzYWJsZSBieSBmbG9hdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKCgxLCAnMicsICgzLjQsKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnMicsICgzLjQsKSkgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICcxIDIgMy40JykKIApAQCAtMzc3LDQyICs0MjQsNDYgQEAKICAgICAgICAgICAgIHJldHVybiBhcmcKICAgICAgICAgc2VsZi5pbnRlcnAuY3JlYXRlY29tbWFuZCgndGVzdGZ1bmMnLCB0ZXN0ZnVuYykKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuaW50ZXJwLnRrLmRlbGV0ZWNvbW1hbmQsICd0ZXN0ZnVuYycpCi0gICAgICAgIGRlZiBjaGVjayh2YWx1ZSwgZXhwZWN0ZWQsIGVxPXNlbGYuYXNzZXJ0RXF1YWwpOgorICAgICAgICBkZWYgY2hlY2sodmFsdWUsIGV4cGVjdGVkPU5vbmUsICosIGVxPXNlbGYuYXNzZXJ0RXF1YWwpOgorICAgICAgICAgICAgaWYgZXhwZWN0ZWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHZhbHVlCisgICAgICAgICAgICBub25sb2NhbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKICAgICAgICAgICAgIHIgPSBzZWxmLmludGVycC5jYWxsKCd0ZXN0ZnVuYycsIHZhbHVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgc3RyKQogICAgICAgICAgICAgZXEocmVzdWx0LCBleHBlY3RlZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBzdHIpCiAgICAgICAgICAgICBlcShyLCBleHBlY3RlZCkKICAgICAgICAgZGVmIGZsb2F0X2VxKGFjdHVhbCwgZXhwZWN0ZWQpOgotICAgICAgICAgICAgZXhwZWN0ZWQgPSBmbG9hdChleHBlY3RlZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoYWN0dWFsKSwgZXhwZWN0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhPWFicyhleHBlY3RlZCkgKiAxZS0xMCkKLSAgICAgICAgZGVmIG5hbl9lcShhY3R1YWwsIGV4cGVjdGVkKToKLSAgICAgICAgICAgIGFjdHVhbCA9IGZsb2F0KGFjdHVhbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYWN0dWFsLCBhY3R1YWwpCiAKICAgICAgICAgY2hlY2soVHJ1ZSwgJzEnKQogICAgICAgICBjaGVjayhGYWxzZSwgJzAnKQotICAgICAgICBjaGVjaygnc3RyaW5nJywgJ3N0cmluZycpCi0gICAgICAgIGNoZWNrKCdzdHJpbmdceGJkJywgJ3N0cmluZ1x4YmQnKQotICAgICAgICBjaGVjaygnc3RyaW5nXHUyMGFjJywgJ3N0cmluZ1x1MjBhYycpCisgICAgICAgIGNoZWNrKCdzdHJpbmcnKQorICAgICAgICBjaGVjaygnc3RyaW5nXHhiZCcpCisgICAgICAgIGNoZWNrKCdzdHJpbmdcdTIwYWMnKQorICAgICAgICBjaGVjaygnJykKICAgICAgICAgY2hlY2soYidzdHJpbmcnLCAnc3RyaW5nJykKLSAgICAgICAgY2hlY2soYidzdHJpbmdceGUyXHg4Mlx4YWMnLCAnc3RyaW5nXHUyMGFjJykKLSAgICAgICAgY2hlY2soJ3N0clx4MDBpbmcnLCAnc3RyXHgwMGluZycpCi0gICAgICAgIGNoZWNrKCdzdHJceDAwaW5nXHhiZCcsICdzdHJceDAwaW5nXHhiZCcpCi0gICAgICAgIGNoZWNrKCdzdHJceDAwaW5nXHUyMGFjJywgJ3N0clx4MDBpbmdcdTIwYWMnKQotICAgICAgICBjaGVjayhiJ3N0clx4YzBceDgwaW5nJywgJ3N0clx4MDBpbmcnKQotICAgICAgICBjaGVjayhiJ3N0clx4YzBceDgwaW5nXHhlMlx4ODJceGFjJywgJ3N0clx4MDBpbmdcdTIwYWMnKQorICAgICAgICBjaGVjayhiJ3N0cmluZ1x4ZTJceDgyXHhhYycsICdzdHJpbmdceGUyXHg4Mlx4YWMnKQorICAgICAgICBjaGVjayhiJ3N0cmluZ1x4YmQnLCAnc3RyaW5nXHhiZCcpCisgICAgICAgIGNoZWNrKGInJywgJycpCisgICAgICAgIGNoZWNrKCdzdHJceDAwaW5nJykKKyAgICAgICAgY2hlY2soJ3N0clx4MDBpbmdceGJkJykKKyAgICAgICAgY2hlY2soJ3N0clx4MDBpbmdcdTIwYWMnKQorICAgICAgICBjaGVjayhiJ3N0clx4MDBpbmcnLCAnc3RyXHgwMGluZycpCisgICAgICAgIGNoZWNrKGInc3RyXHhjMFx4ODBpbmcnLCAnc3RyXHhjMFx4ODBpbmcnKQorICAgICAgICBjaGVjayhiJ3N0clx4YzBceDgwaW5nXHhlMlx4ODJceGFjJywgJ3N0clx4YzBceDgwaW5nXHhlMlx4ODJceGFjJykKICAgICAgICAgZm9yIGkgaW4gKDAsIDEsIC0xLCAyKiozMS0xLCAtMioqMzEpOgogICAgICAgICAgICAgY2hlY2soaSwgc3RyKGkpKQogICAgICAgICBmb3IgZiBpbiAoMC4wLCAxLjAsIC0xLjApOgogICAgICAgICAgICAgY2hlY2soZiwgcmVwcihmKSkKICAgICAgICAgZm9yIGYgaW4gKDEvMy4wLCBzeXMuZmxvYXRfaW5mby5taW4sIHN5cy5mbG9hdF9pbmZvLm1heCwKICAgICAgICAgICAgICAgICAgIC1zeXMuZmxvYXRfaW5mby5taW4sIC1zeXMuZmxvYXRfaW5mby5tYXgpOgotICAgICAgICAgICAgY2hlY2soZiwgZiwgZXE9ZmxvYXRfZXEpCi0gICAgICAgIGNoZWNrKGZsb2F0KCdpbmYnKSwgJ0luZicsIGVxPWZsb2F0X2VxKQotICAgICAgICBjaGVjaygtZmxvYXQoJ2luZicpLCAnLUluZicsIGVxPWZsb2F0X2VxKQotICAgICAgICBjaGVjayhmbG9hdCgnbmFuJyksICdOYU4nLCBlcT1uYW5fZXEpCisgICAgICAgICAgICBjaGVjayhmLCBlcT1mbG9hdF9lcSkKKyAgICAgICAgY2hlY2soZmxvYXQoJ2luZicpLCBlcT1mbG9hdF9lcSkKKyAgICAgICAgY2hlY2soLWZsb2F0KCdpbmYnKSwgZXE9ZmxvYXRfZXEpCisgICAgICAgICMgWFhYIE5hTiByZXByZXNlbnRhdGlvbiBjYW4gYmUgbm90IHBhcnNhYmxlIGJ5IGZsb2F0KCkKICAgICAgICAgY2hlY2soKCksICcnKQogICAgICAgICBjaGVjaygoMSwgKDIsKSwgKDMsIDQpLCAnNSA2JywgKCkpLCAnMSAyIHszIDR9IHs1IDZ9IHt9JykKIApAQCAtNDQ3LDkgKzQ5OCw5IEBACiAgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLndhbnRvYmplY3RzIG9yIGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNSwgNSk6CiAgICAgICAgICAgICAgICAgIyBCZWZvcmUgOC41LjUgZGljdHMgd2VyZSBjb252ZXJ0ZWQgdG8gbGlzdHMgdGhyb3VnaCBzdHJpbmcKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgnMTInLCAnXHUyMGFjJywgJ1x1MjBhYycsICczLjQnKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKCcxMicsICdcdTIwYWMnLCAnXHhlMlx4ODJceGFjJywgJzMuNCcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKDEyLCAnXHUyMGFjJywgJ1x1MjBhYycsICgzLjQsKSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgxMiwgJ1x1MjBhYycsIGInXHhlMlx4ODJceGFjJywgKDMuNCwpKQogICAgICAgICAgICAgdGVzdGNhc2VzICs9IFsKICAgICAgICAgICAgICAgICAoY2FsbCgnZGljdCcsICdjcmVhdGUnLCAxMiwgJ1x1MjBhYycsIGInXHhlMlx4ODJceGFjJywgKDMuNCwpKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpLApAQCAtNDk0LDkgKzU0NSw5IEBACiAgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLndhbnRvYmplY3RzIG9yIGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNSwgNSk6CiAgICAgICAgICAgICAgICAgIyBCZWZvcmUgOC41LjUgZGljdHMgd2VyZSBjb252ZXJ0ZWQgdG8gbGlzdHMgdGhyb3VnaCBzdHJpbmcKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgnMTInLCAnXHUyMGFjJywgJ1x1MjBhYycsICczLjQnKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKCcxMicsICdcdTIwYWMnLCAnXHhlMlx4ODJceGFjJywgJzMuNCcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKDEyLCAnXHUyMGFjJywgJ1x1MjBhYycsICgzLjQsKSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgxMiwgJ1x1MjBhYycsIGInXHhlMlx4ODJceGFjJywgKDMuNCwpKQogICAgICAgICAgICAgdGVzdGNhc2VzICs9IFsKICAgICAgICAgICAgICAgICAoY2FsbCgnZGljdCcsICdjcmVhdGUnLCAxMiwgJ1x1MjBhYycsIGInXHhlMlx4ODJceGFjJywgKDMuNCwpKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpLApAQCAtNTA0LDM5ICs1NTUsNDAgQEAKICAgICAgICAgZm9yIGFyZywgcmVzIGluIHRlc3RjYXNlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoYXJnKSwgcmVzLCBtc2c9YXJnKQogCi0gICAgZGVmIHRlc3RfbWVyZ2Uoc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJ21lcmdlIGlzIGRlcHJlY2F0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgotICAgICAgICAgICAgbWVyZ2UgPSBzZWxmLmludGVycC50ay5tZXJnZQotICAgICAgICAgICAgY2FsbCA9IHNlbGYuaW50ZXJwLnRrLmNhbGwKLSAgICAgICAgICAgIHRlc3RjYXNlcyA9IFsKLSAgICAgICAgICAgICAgICAoKCksICcnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywpLCAnYScpLAotICAgICAgICAgICAgICAgICgoMiwpLCAnMicpLAotICAgICAgICAgICAgICAgICgoJycsKSwgJ3t9JyksCi0gICAgICAgICAgICAgICAgKCd7JywgJ1xceycpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnYicsICdjJyksICdhIGIgYycpLAotICAgICAgICAgICAgICAgICgoJyAnLCAnXHQnLCAnXHInLCAnXG4nKSwgJ3sgfSB7XHR9IHtccn0ge1xufScpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnICcsICdjJyksICdhIHsgfSBjJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICfigqwnKSwgJ2Eg4oKsJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICdcVTAwMDEwNGEyJyksICdhIFxVMDAwMTA0YTInKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgYidceGUyXHg4Mlx4YWMnKSwgJ2Eg4oKsJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICgnYicsICdjJykpLCAnYSB7YiBjfScpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAyKSwgJ2EgMicpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAzLjQpLCAnYSAzLjQnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgKDIsIDMuNCkpLCAnYSB7MiAzLjR9JyksCi0gICAgICAgICAgICAgICAgKCgpLCAnJyksCi0gICAgICAgICAgICAgICAgKChjYWxsKCdsaXN0JywgMSwgJzInLCAoMy40LCkpLCksICd7MSAyIDMuNH0nKSwKLSAgICAgICAgICAgIF0KLSAgICAgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKLSAgICAgICAgICAgICAgICB0ZXN0Y2FzZXMgKz0gWwotICAgICAgICAgICAgICAgICAgICAoKGNhbGwoJ2RpY3QnLCAnY3JlYXRlJywgMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSksKSwKLSAgICAgICAgICAgICAgICAgICAgICd7MTIg4oKsIOKCrCAzLjR9JyksCi0gICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgZm9yIGFyZ3MsIHJlcyBpbiB0ZXN0Y2FzZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXJnZSgqYXJncyksIHJlcywgbXNnPWFyZ3MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIG1lcmdlLCBiJ1x4ODAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBtZXJnZSwgJ1x1ZGM4MCcpCisgICAgZGVmIHRlc3Rfc3BsaXRkaWN0KHNlbGYpOgorICAgICAgICBzcGxpdGRpY3QgPSB0a2ludGVyLl9zcGxpdGRpY3QKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAudGsKKworICAgICAgICBhcmcgPSAnLWEgezEgMiAzfSAtc29tZXRoaW5nIGZvbyBzdGF0dXMge30nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkaWN0KHRjbCwgYXJnLCBGYWxzZSksCisgICAgICAgICAgICB7Jy1hJzogJzEgMiAzJywgJy1zb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICcnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcpLAorICAgICAgICAgICAgeydhJzogJzEgMiAzJywgJ3NvbWV0aGluZyc6ICdmb28nLCAnc3RhdHVzJzogJyd9KQorCisgICAgICAgIGFyZyA9ICgnLWEnLCAoMSwgMiwgMyksICctc29tZXRoaW5nJywgJ2ZvbycsICdzdGF0dXMnLCAne30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZGljdCh0Y2wsIGFyZywgRmFsc2UpLAorICAgICAgICAgICAgeyctYSc6ICgxLCAyLCAzKSwgJy1zb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICd7fSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZGljdCh0Y2wsIGFyZyksCisgICAgICAgICAgICB7J2EnOiAoMSwgMiwgMyksICdzb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICd7fSd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc3BsaXRkaWN0LCB0Y2wsICctYSBiIC1jICcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc3BsaXRkaWN0LCB0Y2wsICgnLWEnLCAnYicsICctYycpKQorCisgICAgICAgIGFyZyA9IHRjbC5jYWxsKCdsaXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICctYScsICgxLCAyLCAzKSwgJy1zb21ldGhpbmcnLCAnZm9vJywgJ3N0YXR1cycsICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZGljdCh0Y2wsIGFyZyksCisgICAgICAgICAgICB7J2EnOiAoMSwgMiwgMykgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICcxIDIgMycsCisgICAgICAgICAgICAgJ3NvbWV0aGluZyc6ICdmb28nLCAnc3RhdHVzJzogJyd9KQorCisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgICAgIGFyZyA9IHRjbC5jYWxsKCdkaWN0JywgJ2NyZWF0ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWEnLCAoMSwgMiwgMyksICctc29tZXRoaW5nJywgJ2ZvbycsICdzdGF0dXMnLCAoKSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLndhbnRvYmplY3RzIG9yIGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNSwgNSk6CisgICAgICAgICAgICAgICAgIyBCZWZvcmUgOC41LjUgZGljdHMgd2VyZSBjb252ZXJ0ZWQgdG8gbGlzdHMgdGhyb3VnaCBzdHJpbmcKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnYSc6ICcxIDIgMycsICdzb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICcnfQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnYSc6ICgxLCAyLCAzKSwgJ3NvbWV0aGluZyc6ICdmb28nLCAnc3RhdHVzJzogJyd9CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZGljdCh0Y2wsIGFyZyksIGV4cGVjdGVkKQogCiAKIGNsYXNzIEJpZ21lbVRjbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNTQ3LDEwICs1OTksMzUgQEAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJTlRfTUFYIDwgUFlfU1NJWkVfVF9NQVgsICJuZWVkcyBVSU5UX01BWCA8IFNJWkVfTUFYIikKICAgICBAc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9SU5UX01BWCArIDEsIG1lbXVzZT01LCBkcnlfcnVuPUZhbHNlKQotICAgIGRlZiB0ZXN0X2h1Z2Vfc3RyaW5nKHNlbGYsIHNpemUpOgorICAgIGRlZiB0ZXN0X2h1Z2Vfc3RyaW5nX2NhbGwoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHZhbHVlID0gJyAnICogc2l6ZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5jYWxsLCAnc2V0JywgJ18nLCB2YWx1ZSkKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKElOVF9NQVggPCBQWV9TU0laRV9UX01BWCwgIm5lZWRzIFVJTlRfTUFYIDwgU0laRV9NQVgiKQorICAgIEBzdXBwb3J0LmJpZ21lbXRlc3Qoc2l6ZT1JTlRfTUFYICsgMSwgbWVtdXNlPTksIGRyeV9ydW49RmFsc2UpCisgICAgZGVmIHRlc3RfaHVnZV9zdHJpbmdfYnVpbHRpbnMoc2VsZiwgc2l6ZSk6CisgICAgICAgIHZhbHVlID0gJzEnICsgJyAnICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC50ay5nZXRpbnQsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC50ay5nZXRkb3VibGUsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC50ay5nZXRib29sZWFuLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuZXZhbCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmV2YWxmaWxlLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAucmVjb3JkLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuYWRkZXJyb3JpbmZvLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuc2V0dmFyLCB2YWx1ZSwgJ3gnLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLnNldHZhciwgJ3gnLCB2YWx1ZSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC51bnNldHZhciwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLnVuc2V0dmFyLCAneCcsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5hZGRlcnJvcmluZm8sIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5leHByc3RyaW5nLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuZXhwcmxvbmcsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5leHByYm9vbGVhbiwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLnNwbGl0bGlzdCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLnNwbGl0LCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuY3JlYXRlY29tbWFuZCwgdmFsdWUsIG1heCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuZGVsZXRlY29tbWFuZCwgdmFsdWUpCisKIAogZGVmIHNldFVwTW9kdWxlKCk6CiAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weQppbmRleCBjOWYyY2NiLi5lZTFjMzU3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weQpAQCAtMSwxMCArMSw5IEBACiBpbXBvcnQgc29ja2V0Ci1pbXBvcnQgc2VsZWN0CitpbXBvcnQgc2VsZWN0b3JzCiBpbXBvcnQgdGVsbmV0bGliCiBpbXBvcnQgdGltZQogaW1wb3J0IGNvbnRleHRsaWIKIAotaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCkBAIC0xMTIsNDAgKzExMSwzNyBAQAogICAgICAgICBzZWxmLl9tZXNzYWdlcyArPSBvdXQuZ2V0dmFsdWUoKQogICAgICAgICByZXR1cm4KIAotZGVmIG1vY2tfc2VsZWN0KCpzX2FyZ3MpOgotICAgIGJsb2NrID0gRmFsc2UKLSAgICBmb3IgbCBpbiBzX2FyZ3M6Ci0gICAgICAgIGZvciBmb2IgaW4gbDoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm9iLCBUZWxuZXRBbGlrZSk6Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSBmb2Iuc29jay5ibG9jawotICAgIGlmIGJsb2NrOgotICAgICAgICByZXR1cm4gW1tdLCBbXSwgW11dCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHNfYXJncwotCi1jbGFzcyBNb2NrUG9sbGVyKG9iamVjdCk6Ci0gICAgdGVzdF9jYXNlID0gTm9uZSAgIyBTZXQgZHVyaW5nIFRlc3RDYXNlIHNldFVwLgorY2xhc3MgTW9ja1NlbGVjdG9yKHNlbGVjdG9ycy5CYXNlU2VsZWN0b3IpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9maWxlX29ianMgPSBbXQorICAgICAgICBzZWxmLmtleXMgPSB7fQogCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZkLCBldmVudG1hc2spOgotICAgICAgICBzZWxmLnRlc3RfY2FzZS5hc3NlcnRUcnVlKGhhc2F0dHIoZmQsICdmaWxlbm8nKSwgZmQpCi0gICAgICAgIHNlbGYudGVzdF9jYXNlLmFzc2VydEVxdWFsKGV2ZW50bWFzaywgc2VsZWN0LlBPTExJTnxzZWxlY3QuUE9MTFBSSSkKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzLmFwcGVuZChmZCkKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVzb2x1dGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIDFlLTMKIAotICAgIGRlZiBwb2xsKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAga2V5ID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KGZpbGVvYmosIDAsIGV2ZW50cywgZGF0YSkKKyAgICAgICAgc2VsZi5rZXlzW2ZpbGVvYmpdID0ga2V5CisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5rZXlzLnBvcChmaWxlb2JqKQorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgogICAgICAgICBibG9jayA9IEZhbHNlCi0gICAgICAgIGZvciBmb2IgaW4gc2VsZi5fZmlsZV9vYmpzOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmb2IsIFRlbG5ldEFsaWtlKToKLSAgICAgICAgICAgICAgICBibG9jayA9IGZvYi5zb2NrLmJsb2NrCisgICAgICAgIGZvciBmaWxlb2JqIGluIHNlbGYua2V5czoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZW9iaiwgVGVsbmV0QWxpa2UpOgorICAgICAgICAgICAgICAgIGJsb2NrID0gZmlsZW9iai5zb2NrLmJsb2NrCisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgYmxvY2s6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB6aXAoc2VsZi5fZmlsZV9vYmpzLCBbc2VsZWN0LlBPTExJTl0qbGVuKHNlbGYuX2ZpbGVfb2JqcykpCisgICAgICAgICAgICByZXR1cm4gWyhrZXksIGtleS5ldmVudHMpIGZvciBrZXkgaW4gc2VsZi5rZXlzLnZhbHVlcygpXQogCi0gICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmQpOgotICAgICAgICBzZWxmLl9maWxlX29ianMucmVtb3ZlKGZkKQorICAgIGRlZiBnZXRfbWFwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5rZXlzCisKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKIGRlZiB0ZXN0X3NvY2tldChyZWFkcyk6CkBAIC0xNTksNyArMTU1LDcgQEAKICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uID0gb2xkX2Nvbm4KICAgICByZXR1cm4KIAotZGVmIHRlc3RfdGVsbmV0KHJlYWRzPSgpLCBjbHM9VGVsbmV0QWxpa2UsIHVzZV9wb2xsPU5vbmUpOgorZGVmIHRlc3RfdGVsbmV0KHJlYWRzPSgpLCBjbHM9VGVsbmV0QWxpa2UpOgogICAgICcnJyByZXR1cm4gYSB0ZWxuZXRsaWIuVGVsbmV0IG9iamVjdCB0aGF0IHVzZXMgYSBTb2NrZXRTdHViIHdpdGgKICAgICAgICAgcmVhZHMgcXVldWVkIHVwIHRvIGJlIHJlYWQgJycnCiAgICAgZm9yIHggaW4gcmVhZHM6CkBAIC0xNjcsMjkgKzE2MywxNCBAQAogICAgIHdpdGggdGVzdF9zb2NrZXQocmVhZHMpOgogICAgICAgICB0ZWxuZXQgPSBjbHMoJ2R1bW15JywgMCkKICAgICAgICAgdGVsbmV0Ll9tZXNzYWdlcyA9ICcnICMgZGVidWdsZXZlbCBvdXRwdXQKLSAgICAgICAgaWYgdXNlX3BvbGwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiB1c2VfcG9sbCBhbmQgbm90IHRlbG5ldC5faGFzX3BvbGw6Ci0gICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NlbGVjdC5wb2xsKCkgcmVxdWlyZWQuJykKLSAgICAgICAgICAgIHRlbG5ldC5faGFzX3BvbGwgPSB1c2VfcG9sbAogICAgIHJldHVybiB0ZWxuZXQKIAotCiBjbGFzcyBFeHBlY3RBbmRSZWFkVGVzdENhc2UoVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5vbGRfc2VsZWN0ID0gc2VsZWN0LnNlbGVjdAotICAgICAgICBzZWxlY3Quc2VsZWN0ID0gbW9ja19zZWxlY3QKLSAgICAgICAgc2VsZi5vbGRfcG9sbCA9IEZhbHNlCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgotICAgICAgICAgICAgc2VsZi5vbGRfcG9sbCA9IHNlbGVjdC5wb2xsCi0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IE1vY2tQb2xsZXIKLSAgICAgICAgICAgIE1vY2tQb2xsZXIudGVzdF9jYXNlID0gc2VsZgotCisgICAgICAgIHNlbGYub2xkX3NlbGVjdG9yID0gdGVsbmV0bGliLl9UZWxuZXRTZWxlY3RvcgorICAgICAgICB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yID0gTW9ja1NlbGVjdG9yCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpZiBzZWxmLm9sZF9wb2xsOgotICAgICAgICAgICAgTW9ja1BvbGxlci50ZXN0X2Nhc2UgPSBOb25lCi0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IHNlbGYub2xkX3BvbGwKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IHNlbGYub2xkX3NlbGVjdAotCisgICAgICAgIHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IgPSBzZWxmLm9sZF9zZWxlY3RvcgogCiBjbGFzcyBSZWFkVGVzdHMoRXhwZWN0QW5kUmVhZFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZWFkX3VudGlsKHNlbGYpOgpAQCAtMjA4LDIyICsxODksNiBAQAogICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoYidtYXRjaCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0KQogCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3BvbGwoc2VsZik6Ci0gICAgICAgICIiIlVzZSBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0ZWxuZXQucmVhZF91bnRpbCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9VHJ1ZSkKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHNlbGVjdCgpIGNhbGwuJykKLSAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKGInbWF0Y2gnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInJy5qb2luKHdhbnRbOi0xXSkpCi0KLSAgICBkZWYgdGVzdF9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnNlbGVjdCgpIHRvIGltcGxlbWVudCB0ZWxuZXQucmVhZF91bnRpbCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9RmFsc2UpCi0gICAgICAgIGlmIHNlbGYub2xkX3BvbGw6Ci0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHBvbGwoKSBjYWxsLicpCi0gICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbChiJ21hdGNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQogCiAgICAgZGVmIHRlc3RfcmVhZF9hbGwoc2VsZik6CiAgICAgICAgICIiIgpAQCAtNDI3LDIzICszOTIsNiBAQAogICAgICAgICAoXyxfLGRhdGEpID0gdGVsbmV0LmV4cGVjdChbYidtYXRjaCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInJy5qb2luKHdhbnRbOi0xXSkpCiAKLSAgICBkZWYgdGVzdF9leHBlY3Rfd2l0aF9wb2xsKHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9VHJ1ZSkKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHNlbGVjdCgpIGNhbGwuJykKLSAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCi0gICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfc2VsZWN0KHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnNlbGVjdCgpIHRvIGltcGxlbWVudCB0ZWxuZXQuZXhwZWN0KCkuIiIiCi0gICAgICAgIHdhbnQgPSBbYid4JyAqIDEwLCBiJ21hdGNoJywgYid5JyAqIDEwXQotICAgICAgICB0ZWxuZXQgPSB0ZXN0X3RlbG5ldCh3YW50LCB1c2VfcG9sbD1GYWxzZSkKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9sbDoKLSAgICAgICAgICAgIHNlbGVjdC5wb2xsID0gbGFtYmRhICpfOiBzZWxmLmZhaWwoJ3VuZXhwZWN0ZWQgcG9sbCgpIGNhbGwuJykKLSAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmFsVGVzdHMsIFJlYWRUZXN0cywgV3JpdGVUZXN0cywgT3B0aW9uVGVzdHMsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQppbmRleCA1YTk3MDM1Li5lYzk3NWY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgd2Vha3JlZgorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgpAQCAtMzcsNyArMzgsNyBAQAogIyBDb21tb24gZnVuY3Rpb25hbGl0eS4KIGNsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBzdHJfY2hlY2sgPSByZS5jb21waWxlKHIiW2EtekEtWjAtOV8tXXs2fSQiKQorICAgIHN0cl9jaGVjayA9IHJlLmNvbXBpbGUociJeW2EtejAtOV8tXXs4fSQiKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLl93YXJuaW5nc19tYW5hZ2VyID0gc3VwcG9ydC5jaGVja193YXJuaW5ncygpCkBAIC02NCw3ICs2NSw3IEBACiAKICAgICAgICAgbmJhc2UgPSBuYmFzZVtsZW4ocHJlKTpsZW4obmJhc2UpLWxlbihzdWYpXQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zdHJfY2hlY2subWF0Y2gobmJhc2UpLAotICAgICAgICAgICAgICAgICAgICAgInJhbmRvbSBzdHJpbmcgJyVzJyBkb2VzIG5vdCBtYXRjaCAvXlthLXpBLVowLTlfLV17Nn0kLyIKKyAgICAgICAgICAgICAgICAgICAgICJyYW5kb20gc3RyaW5nICclcycgZG9lcyBub3QgbWF0Y2ggXlthLXowLTlfLV17OH0kIgogICAgICAgICAgICAgICAgICAgICAgJSBuYmFzZSkKIAogCkBAIC0xNTMsNyArMTU0LDcgQEAKICAgICAgICAgICAgICAgICAjIHZpYSBhbnkgYnVncyBhYm92ZQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBvcy5jbG9zZShyZWFkX2ZkKQogICAgICAgICAgICAgb3MuY2xvc2Uod3JpdGVfZmQpCkBAIC0xOTIsNyArMTkzLDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgb3MuZXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmN1cmRpcgogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRpcm5hbWUsIGNhbmQpCkBAIC0zMzIsNyArMzMzLDcgQEAKICAgICAgICAgZmlsZSA9IHNlbGYuZG9fY3JlYXRlKCkKICAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KGZpbGUubmFtZSkuc3RfbW9kZSkKICAgICAgICAgZXhwZWN0ZWQgPSAwbzYwMAotICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gZGlzdGluY3Rpb24gYW1vbmcgJ3VzZXInLCAnZ3JvdXAnIGFuZCAnd29ybGQnOwogICAgICAgICAgICAgIyByZXBsaWNhdGUgdGhlICd1c2VyJyBiaXRzLgogICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKQEAgLTM0OSw2ICszNTAsNyBAQAogICAgICAgICAgICAgdj0icSIKIAogICAgICAgICBmaWxlID0gc2VsZi5kb19jcmVhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmaWxlLmZkKSwgRmFsc2UpCiAgICAgICAgIGZkID0gIiVkIiAlIGZpbGUuZmQKIAogICAgICAgICB0cnk6CkBAIC0zNjUsNyArMzY3LDcgQEAKICAgICAgICAgIyBPbiBXaW5kb3dzIGEgc3Bhd24qIC9wYXRoLyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBzaG91bGRuJ3QgYmUgcXVvdGVkLAogICAgICAgICAjIGJ1dCBhbiBhcmcgd2l0aCBlbWJlZGRlZCBzcGFjZXMgc2hvdWxkIGJlIGRlY29yYXRlZCB3aXRoIGRvdWJsZQogICAgICAgICAjIHF1b3RlcyBvbiBlYWNoIGVuZAotICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICBkZWNvcmF0ZWQgPSAnIiVzIicgJSBzeXMuZXhlY3V0YWJsZQogICAgICAgICAgICAgdGVzdGVyID0gJyIlcyInICUgdGVzdGVyCiAgICAgICAgIGVsc2U6CkBAIC00NzUsNiArNDc3LDIwIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKIAorICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZlKHNlbGYpOgorICAgICAgICAjIGdldHRlbXBkaXIgc2hvdWxkIG5vdCBmbGF0dGVuIGl0cyBjYXNlCisgICAgICAgICMgZXZlbiBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0KKyAgICAgICAgY2FzZV9zZW5zaXRpdmVfdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoIi1UZW1wIikKKyAgICAgICAgX3RlbXBkaXIsIHRlbXBmaWxlLnRlbXBkaXIgPSB0ZW1wZmlsZS50ZW1wZGlyLCBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgICAgICMgRmFrZSB0aGUgZmlyc3QgZW52IHZhciB3aGljaCBpcyBjaGVja2VkIGFzIGEgY2FuZGlkYXRlCisgICAgICAgICAgICAgICAgZW52WyJUTVBESVIiXSA9IGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgY2FzZV9zZW5zaXRpdmVfdGVtcGRpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBfdGVtcGRpcgorICAgICAgICAgICAgc3VwcG9ydC5ybWRpcihjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyKQorCiAKIGNsYXNzIFRlc3RNa3N0ZW1wKEJhc2VUZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCBta3N0ZW1wKCkuIiIiCkBAIC01NjMsNyArNTc5LDcgQEAKICAgICAgICAgICAgIG1vZGUgPSBzdGF0LlNfSU1PREUob3Muc3RhdChkaXIpLnN0X21vZGUpCiAgICAgICAgICAgICBtb2RlICY9IDBvNzc3ICMgTWFzayBvZmYgc3RpY2t5IGJpdHMgaW5oZXJpdGVkIGZyb20gL3RtcAogICAgICAgICAgICAgZXhwZWN0ZWQgPSAwbzcwMAotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gZGlzdGluY3Rpb24gYW1vbmcgJ3VzZXInLCAnZ3JvdXAnIGFuZCAnd29ybGQnOwogICAgICAgICAgICAgICAgICMgcmVwbGljYXRlIHRoZSAndXNlcicgYml0cy4KICAgICAgICAgICAgICAgICB1c2VyID0gZXhwZWN0ZWQgPj4gNgpAQCAtNzQzLDYgKzc1OSwxOSBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXNlX2Nsb3NlZCkKIAorICAgIGRlZiB0ZXN0X25vX2xlYWtfZmQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxMDU4OiBkb24ndCBsZWFrIGZpbGUgZGVzY3JpcHRvciB3aGVuIGlvLm9wZW4oKSBmYWlscworICAgICAgICBjbG9zZWQgPSBbXQorICAgICAgICBvc19jbG9zZSA9IG9zLmNsb3NlCisgICAgICAgIGRlZiBjbG9zZShmZCk6CisgICAgICAgICAgICBjbG9zZWQuYXBwZW5kKGZkKQorICAgICAgICAgICAgb3NfY2xvc2UoZmQpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5jbG9zZScsIHNpZGVfZWZmZWN0PWNsb3NlKToKKyAgICAgICAgICAgIHdpdGggbW9jay5wYXRjaCgnaW8ub3BlbicsIHNpZGVfZWZmZWN0PVZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbG9zZWQpLCAxKQorCiAgICAgIyBIb3cgdG8gdGVzdCB0aGUgbW9kZSBhbmQgYnVmc2l6ZSBwYXJhbWV0ZXJzPwogCiAKQEAgLTEwNDYsNiArMTA3NSwyMCBAQAogICAgICAgICAgICAgcm91bmR0cmlwKCJcdTAzOUIiLCAidysiLCBlbmNvZGluZz0idXRmLTE2IikKICAgICAgICAgICAgIHJvdW5kdHJpcCgiZm9vXHJcbiIsICJ3KyIsIG5ld2xpbmU9IiIpCiAKKyAgICAgICAgZGVmIHRlc3Rfbm9fbGVha19mZChzZWxmKToKKyAgICAgICAgICAgICMgSXNzdWUgIzIxMDU4OiBkb24ndCBsZWFrIGZpbGUgZGVzY3JpcHRvciB3aGVuIGlvLm9wZW4oKSBmYWlscworICAgICAgICAgICAgY2xvc2VkID0gW10KKyAgICAgICAgICAgIG9zX2Nsb3NlID0gb3MuY2xvc2UKKyAgICAgICAgICAgIGRlZiBjbG9zZShmZCk6CisgICAgICAgICAgICAgICAgY2xvc2VkLmFwcGVuZChmZCkKKyAgICAgICAgICAgICAgICBvc19jbG9zZShmZCkKKworICAgICAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5jbG9zZScsIHNpZGVfZWZmZWN0PWNsb3NlKToKKyAgICAgICAgICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2lvLm9wZW4nLCBzaWRlX2VmZmVjdD1WYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2xvc2VkKSwgMSkKKworCiAKICMgSGVscGVyIGZvciB0ZXN0X2RlbF9vbl9zaHV0ZG93bgogY2xhc3MgTnVsbGVkTW9kdWxlczoKQEAgLTExMzksOCArMTE4Miw5IEBACiAgICAgZGVmIHRlc3RfZGVsX29uX3NodXRkb3duKHNlbGYpOgogICAgICAgICAjIEEgVGVtcG9yYXJ5RGlyZWN0b3J5IG1heSBiZSBjbGVhbmVkIHVwIGR1cmluZyBzaHV0ZG93bgogICAgICAgICB3aXRoIHNlbGYuZG9fY3JlYXRlKCkgYXMgZGlyOgotICAgICAgICAgICAgZm9yIG1vZCBpbiAoJ29zJywgJ3NodXRpbCcsICdzeXMnLCAndGVtcGZpbGUnLCAnd2FybmluZ3MnKToKKyAgICAgICAgICAgIGZvciBtb2QgaW4gKCdidWlsdGlucycsICdvcycsICdzaHV0aWwnLCAnc3lzJywgJ3RlbXBmaWxlJywgJ3dhcm5pbmdzJyk6CiAgICAgICAgICAgICAgICAgY29kZSA9ICIiImlmIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBidWlsdGlucwogICAgICAgICAgICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHNodXRpbAogICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCkBAIC0xMTY1LDYgKzEyMDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZW1wb3JhcnlEaXJlY3RvcnkgJXMgZXhpc3RzIGFmdGVyIGNsZWFudXAiICUgdG1wX25hbWUpCiAgICAgICAgICAgICAgICAgZXJyID0gZXJyLmRlY29kZSgndXRmLTgnLCAnYmFja3NsYXNocmVwbGFjZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiRXhjZXB0aW9uICIsIGVycikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJSZXNvdXJjZVdhcm5pbmc6IEltcGxpY2l0bHkgY2xlYW5pbmcgdXAiLCBlcnIpCiAKICAgICBkZWYgdGVzdF93YXJuaW5nc19vbl9jbGVhbnVwKHNlbGYpOgogICAgICAgICAjIFJlc291cmNlV2FybmluZyB3aWxsIGJlIHRyaWdnZXJlZCBieSBfX2RlbF9fCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5IGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQppbmRleCBjODZmNWNmLi4xYmJhNzdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKQEAgLTksOSArOSw4IEBACiAjCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKLWZyb20gdGV4dHdyYXAgaW1wb3J0IFRleHRXcmFwcGVyLCB3cmFwLCBmaWxsLCBkZWRlbnQsIGluZGVudAorZnJvbSB0ZXh0d3JhcCBpbXBvcnQgVGV4dFdyYXBwZXIsIHdyYXAsIGZpbGwsIGRlZGVudCwgaW5kZW50LCBzaG9ydGVuCiAKIAogY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQzMCw2ICs0MjksOTAgQEAKICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDcsIFsiYWEgXHhlNFx4ZTQtIiwgIlx4ZTRceGU0Il0pCiAKIAorY2xhc3MgTWF4TGluZXNUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MikKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyAgSSdtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xhZCB0byBoZWFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaXQhIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NikKKworICAgIGRlZiB0ZXN0X3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBzdHJpcCBzcGFjZXMgYmVmb3JlIHBsYWNlaG9sZGVyCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz00KQorICAgICAgICAjIHBsYWNlaG9sZGVyIGF0IHRoZSBzdGFydCBvZiBsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yKQorICAgICAgICAjIGZpbmFsIHNwYWNlcworICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0ICsgJyAnICogMTAsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gIEknbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImdsYWQgdG8gaGVhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIml0ISJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTYpCisKKyAgICBkZWYgdGVzdF9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScuLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nLi4uJykKKyAgICAgICAgIyBsb25nIHBsYWNlaG9sZGVyIGFuZCBpbmRlbnRhdGlvbgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgd3JhcChzZWxmLnRleHQsIDE2LCBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLCBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHdyYXAoc2VsZi50ZXh0LCAxNiwgc3Vic2VxdWVudF9pbmRlbnQ9JyAgICAnLAorICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgICAgSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICBbdHJ1bmNhdGVkXS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgIFt0cnVuY2F0ZWRdLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PScgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBwbGFjZWhvbGRlcj0nLicgKiAxMDAwKQorCisKIGNsYXNzIExvbmdXb3JkVGVzdENhc2UgKEJhc2VUZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLndyYXBwZXIgPSBUZXh0V3JhcHBlcigpCkBAIC00OTAsNiArNTczLDE0IEBACiAgICAgICAgIHJlc3VsdCA9IHdyYXAoc2VsZi50ZXh0LCB3aWR0aD0zMCwgYnJlYWtfbG9uZ193b3Jkcz0wKQogICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQogCisgICAgZGVmIHRlc3RfbWF4X2xpbmVzX2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWydEaWQgeW91IHNheSAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcic3VwZXJjYWxpZnInLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhZ2lsaXN0aWNleHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdbLi4uXSddLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTQpCisKIAogY2xhc3MgSW5kZW50VGVzdENhc2VzKEJhc2VUZXN0Q2FzZSk6CiAKQEAgLTc3NywxMiArODY4LDYyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGVudCh0ZXh0LCBwcmVmaXgsIHByZWRpY2F0ZSksIGV4cGVjdCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoV3JhcFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9uZ1dvcmRUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudFRlc3RDYXNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZGVudFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZW50VGVzdENhc2UpCitjbGFzcyBTaG9ydGVuVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja19zaG9ydGVuKHNlbGYsIHRleHQsIHdpZHRoLCBleHBlY3QsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gc2hvcnRlbih0ZXh0LCB3aWR0aCwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgICMgU2ltcGxlIGNhc2U6IGp1c3Qgd29yZHMsIHNwYWNlcywgYW5kIGEgYml0IG9mIHB1bmN0dWF0aW9uCisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/IEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCBbLi4uXSIpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCkgLSAxLAorICAgICAgICAgICAgIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyAiCisgICAgICAgICAgICAiSSdtIGdsYWQgdG8gWy4uLl0iKQorCisgICAgZGVmIHRlc3RfcGxhY2Vob2xkZXIoc2VsZik6CisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/IEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxNywgIkhlbGxvIHRoZXJlLCQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE4LCAiSGVsbG8gdGhlcmUsIGhvdyQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE4LCAiSGVsbG8gdGhlcmUsICQkIiwgcGxhY2Vob2xkZXI9JyAkJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCksIHRleHQsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCkgLSAxLAorICAgICAgICAgICAgIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyAiCisgICAgICAgICAgICAiSSdtIGdsYWQgdG8gaGVhciQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCIiLCA2LCAiIikKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgICMgV2hpdGVzcGFjZSBjb2xsYXBzaW5nCisgICAgICAgIHRleHQgPSAiIiIKKyAgICAgICAgICAgIFRoaXMgaXMgYSAgcGFyYWdyYXBoIHRoYXQgIGFscmVhZHkgaGFzCisgICAgICAgICAgICBsaW5lIGJyZWFrcyBhbmQgXHQgdGFicyB0b28uIiIiCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCA2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcyBsaW5lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyZWFrcyBhbmQgdGFicyB0b28uIikKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDYxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGFscmVhZHkgaGFzIGxpbmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJlYWtzIGFuZCBbLi4uXSIpCisKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTIsICJoZWxsbyB3b3JsZCEiKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oImhlbGxvICAgICAgd29ybGQhICAiLCAxMSwgImhlbGxvIFsuLi5dIikKKyAgICAgICAgIyBUaGUgbGVhZGluZyBzcGFjZSBpcyB0cmltbWVkIGZyb20gdGhlIHBsYWNlaG9sZGVyCisgICAgICAgICMgKGl0IHdvdWxkIGJlIHVnbHkgb3RoZXJ3aXNlKS4KKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTAsICJbLi4uXSIpCisKKyAgICBkZWYgdGVzdF93aWR0aF90b29fc21hbGxfZm9yX3BsYWNlaG9sZGVyKHNlbGYpOgorICAgICAgICBzaG9ydGVuKCJ4IiAqIDIwLCB3aWR0aD04LCBwbGFjZWhvbGRlcj0iKC4uLi4uLikiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2hvcnRlbigieCIgKiAyMCwgd2lkdGg9OCwgcGxhY2Vob2xkZXI9IiguLi4uLi4uKSIpCisKKyAgICBkZWYgdGVzdF9maXJzdF93b3JkX3Rvb19sb25nX2J1dF9wbGFjZWhvbGRlcl9maXRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oIkhlbGxvbyIsIDUsICJbLi4uXSIpCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQppbmRleCA1NDM3MjgxLi42MTQ0OTAxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSgwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5zdGFja19zaXplKCksIDAsICJzdGFja19zaXplIG5vdCByZXNldCB0byBkZWZhdWx0IikKIAotICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSBub3QgaW4gKCJudCIsICJvczIiLCAicG9zaXgiKSwgJ3Rlc3QgbWVhbnQgZm9yIG50LCBvczIsIGFuZCBwb3NpeCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lIG5vdCBpbiAoIm50IiwgInBvc2l4IiksICd0ZXN0IG1lYW50IGZvciBudCBhbmQgcG9zaXgnKQogICAgIGRlZiB0ZXN0X250X2FuZF9wb3NpeF9zdGFja19zaXplKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSg0MDk2KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQppbmRleCA2YzI5NjViLi5jN2JmZWEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQpAQCAtNSw4ICs1LDggQEAKICMgY29tcGxhaW5zIHNldmVyYWwgdGltZXMgYWJvdXQgbW9kdWxlIHJhbmRvbSBoYXZpbmcgbm8gYXR0cmlidXRlCiAjIHJhbmRyYW5nZSwgYW5kIHRoZW4gUHl0aG9uIGhhbmdzLgogCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKQEAgLTU3LDcgKzU3LDcgQEAKIH0KIAogY2xhc3MgRmluZGVyOgotICAgICIiIkEgZHVtbXkgZmluZGVyIHRvIGRldGVjdCBjb25jdXJyZW50IGFjY2VzcyB0byBpdHMgZmluZF9tb2R1bGUoKQorICAgICIiIkEgZHVtbXkgZmluZGVyIHRvIGRldGVjdCBjb25jdXJyZW50IGFjY2VzcyB0byBpdHMgZmluZF9zcGVjKCkKICAgICBtZXRob2QuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC02NSw4ICs2NSw4IEBACiAgICAgICAgIHNlbGYueCA9IDAKICAgICAgICAgc2VsZi5sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICMgU2ltdWxhdGUgc29tZSB0aHJlYWQtdW5zYWZlIGJlaGF2aW91ci4gSWYgY2FsbHMgdG8gZmluZF9tb2R1bGUoKQorICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICMgU2ltdWxhdGUgc29tZSB0aHJlYWQtdW5zYWZlIGJlaGF2aW91ci4gSWYgY2FsbHMgdG8gZmluZF9zcGVjKCkKICAgICAgICAgIyBhcmUgcHJvcGVybHkgc2VyaWFsaXplZCwgYHhgIHdpbGwgZW5kIHVwIHRoZSBzYW1lIGFzIGBudW1jYWxsc2AuCiAgICAgICAgICMgT3RoZXJ3aXNlIG5vdC4KICAgICAgICAgYXNzZXJ0IGltcC5sb2NrX2hlbGQoKQpAQCAtODAsNyArODAsNyBAQAogICAgICIiIkEgZHVtbXkgZmluZGVyIHdoaWNoIGZsdXNoZXMgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUgd2hlbiBpdCBnZXRzCiAgICAgY2FsbGVkLiIiIgogCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKICAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQogCiAKQEAgLTE0NSwxMyArMTQ1LDEzIEBACiAgICAgICAgICMgZGVkaWNhdGVkIG1ldGFfcGF0aCBlbnRyeS4KICAgICAgICAgZmx1c2hpbmdfZmluZGVyID0gRmx1c2hpbmdGaW5kZXIoKQogICAgICAgICBkZWYgcGF0aF9ob29rKHBhdGgpOgotICAgICAgICAgICAgZmluZGVyLmZpbmRfbW9kdWxlKCcnKQorICAgICAgICAgICAgZmluZGVyLmZpbmRfc3BlYygnJykKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCiAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBwYXRoX2hvb2spCiAgICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGZsdXNoaW5nX2ZpbmRlcikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBGbHVzaCB0aGUgY2FjaGUgYSBmaXJzdCB0aW1lCi0gICAgICAgICAgICBmbHVzaGluZ19maW5kZXIuZmluZF9tb2R1bGUoJycpCisgICAgICAgICAgICBmbHVzaGluZ19maW5kZXIuZmluZF9zcGVjKCcnKQogICAgICAgICAgICAgbnVtdGVzdHMgPSBzZWxmLmNoZWNrX3BhcmFsbGVsX21vZHVsZV9pbml0KCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihmaW5kZXIubnVtY2FsbHMsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmRlci54LCBmaW5kZXIubnVtY2FsbHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5CmluZGV4IDExYzg5NzkuLjcxNzBmNjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5CkBAIC0xNywxMyArMTcsMTggQEAKIGltcG9ydCBvcwogZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQogaW1wb3J0IHN1YnByb2Nlc3MKLXRyeToKLSAgICBpbXBvcnQgX3Rlc3RjYXBpCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgX3Rlc3RjYXBpID0gTm9uZQogCiBmcm9tIHRlc3QgaW1wb3J0IGxvY2tfdGVzdHMKIAorCisjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcworIyAjMTIzMTYgYW5kICMxMTg3MCksIGFuZCBmb3JrKCkgZnJvbSBhIHdvcmtlciB0aHJlYWQgaXMga25vd24gdG8gdHJpZ2dlcgorIyBwcm9ibGVtcyB3aXRoIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgKGlzc3VlICMzODYzKTogc2tpcCBwcm9ibGVtYXRpYyB0ZXN0cworIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgorcGxhdGZvcm1zX3RvX3NraXAgPSAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ25ldGJzZDUnLAorICAgICAgICAgICAgICAgICAgICAgJ2hwLXV4MTEnKQorCisKICMgQSB0cml2aWFsIG11dGFibGUgY291bnRlci4KIGNsYXNzIENvdW50ZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC0xMDMsNyArMTA4LDcgQEAKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCd3YWl0aW5nIGZvciBhbGwgdGFza3MgdG8gY29tcGxldGUnKQogICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdC5qb2luKE5VTVRBU0tTKQorICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdC5pc19hbGl2ZSgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0LmlkZW50LCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmlkZW50IGlzIE5vbmUpCkBAIC00NzEsNiArNDc2LDEyNyBAQAogICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCiAKKyAgICBkZWYgdGVzdF9tYWluX3RocmVhZChzZWxmKToKKyAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5uYW1lLCAnTWFpblRocmVhZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5pZGVudCwgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5pZGVudCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRocmVhZGluZy5tYWluX3RocmVhZCgpLmlkZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0aC5zdGFydCgpCisgICAgICAgIHRoLmpvaW4oKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgInRlc3QgbmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnd2FpdHBpZCcpLCAidGVzdCBuZWVkcyBvcy53YWl0cGlkKCkiKQorICAgIGRlZiB0ZXN0X21haW5fdGhyZWFkX2FmdGVyX2Zvcmsoc2VsZik6CisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zLCB0aHJlYWRpbmcKKworICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICBtYWluID0gdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICBwcmludChtYWluLm5hbWUpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICIiIgorICAgICAgICBfLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJNYWluVGhyZWFkXG5UcnVlXG5UcnVlXG4iKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAidGVzdCBuZWVkcyBvcy5mb3JrKCkiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICd3YWl0cGlkJyksICJ0ZXN0IG5lZWRzIG9zLndhaXRwaWQoKSIpCisgICAgZGVmIHRlc3RfbWFpbl90aHJlYWRfYWZ0ZXJfZm9ya19mcm9tX25vbm1haW5fdGhyZWFkKHNlbGYpOgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGhyZWFkaW5nLCBzeXMKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4ubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgICAgICAgICAgICAgICMgc3Rkb3V0IGlzIGZ1bGx5IGJ1ZmZlcmVkIGJlY2F1c2Ugbm90IGEgdHR5LAorICAgICAgICAgICAgICAgICAgICAjIHdlIGhhdmUgdG8gZmx1c2ggYmVmb3JlIGV4aXQuCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorCisgICAgICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgICAgICB0aC5zdGFydCgpCisgICAgICAgICAgICB0aC5qb2luKCkKKyAgICAgICAgIiIiCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorICAgICAgICBkYXRhID0gb3V0LmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIlRocmVhZC0xXG5UcnVlXG5UcnVlXG4iKQorCisgICAgZGVmIHRlc3RfdHN0YXRlX2xvY2soc2VsZik6CisgICAgICAgICMgVGVzdCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgVGhyZWFkIG9iamVjdHMuCisgICAgICAgIHN0YXJ0ZWQgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBmaW5pc2ggPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzdGFydGVkLnJlbGVhc2UoKQorICAgICAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAjIFRoZSB0c3RhdGUgbG9jayBpcyBOb25lIHVudGlsIHRoZSB0aHJlYWQgaXMgc3RhcnRlZAorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll90c3RhdGVfbG9jaywgTm9uZSkKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgVGhlIHRzdGF0ZSBsb2NrIGNhbid0IGJlIGFjcXVpcmVkIHdoZW4gdGhlIHRocmVhZCBpcyBydW5uaW5nCisgICAgICAgICMgKG9yIHN1c3BlbmRlZCkuCisgICAgICAgIHRzdGF0ZV9sb2NrID0gdC5fdHN0YXRlX2xvY2sKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0c3RhdGVfbG9jay5hY3F1aXJlKHRpbWVvdXQ9MCksIEZhbHNlKQorICAgICAgICBmaW5pc2gucmVsZWFzZSgpCisgICAgICAgICMgV2hlbiB0aGUgdGhyZWFkIGVuZHMsIHRoZSBzdGF0ZV9sb2NrIGNhbiBiZSBzdWNjZXNzZnVsbHkKKyAgICAgICAgIyBhY3F1aXJlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRzdGF0ZV9sb2NrLmFjcXVpcmUodGltZW91dD01KSwgRmFsc2UpCisgICAgICAgICMgQnV0IGlzX2FsaXZlKCkgaXMgc3RpbGwgVHJ1ZTogIHdlIGhvbGQgX3RzdGF0ZV9sb2NrIG5vdywgd2hpY2gKKyAgICAgICAgIyBwcmV2ZW50cyBpc19hbGl2ZSgpIGZyb20ga25vd2luZyB0aGUgdGhyZWFkJ3MgZW5kLW9mLWxpZmUgQyBjb2RlCisgICAgICAgICMgaXMgZG9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuaXNfYWxpdmUoKSkKKyAgICAgICAgIyBMZXQgaXNfYWxpdmUoKSBmaW5kIG91dCB0aGUgQyBjb2RlIGlzIGRvbmUuCisgICAgICAgIHRzdGF0ZV9sb2NrLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuaXNfYWxpdmUoKSkKKyAgICAgICAgIyBBbmQgdmVyaWZ5IHRoZSB0aHJlYWQgZGlzcG9zZWQgb2YgX3RzdGF0ZV9sb2NrLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5fdHN0YXRlX2xvY2sgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHJfc3RvcHBlZChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCAic3RvcHBlZCIgc2hvd3MgdXAgaW4gcmVwcihUaHJlYWQpIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIHN0YXJ0ZWQgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBmaW5pc2ggPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzdGFydGVkLnJlbGVhc2UoKQorICAgICAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0YXJ0ZWQiLCByZXByKHQpKQorICAgICAgICBmaW5pc2gucmVsZWFzZSgpCisgICAgICAgICMgInN0b3BwZWQiIHNob3VsZCBhcHBlYXIgaW4gdGhlIHJlcHIgaW4gYSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLgorICAgICAgICAjIEltcGxlbWVudGF0aW9uIGRldGFpbDogIGFzIG9mIHRoaXMgd3JpdGluZywgdGhhdCdzIHRyaXZpYWxseSB0cnVlCisgICAgICAgICMgaWYgLmpvaW4oKSBpcyBjYWxsZWQsIGFuZCBhbG1vc3QgdHJpdmlhbGx5IHRydWUgaWYgLmlzX2FsaXZlKCkgaXMKKyAgICAgICAgIyBjYWxsZWQuICBUaGUgZGV0YWlsIHdlJ3JlIHRlc3RpbmcgaGVyZSBpcyB0aGF0ICJzdG9wcGVkIiBzaG93cyB1cAorICAgICAgICAjICJhbGwgb24gaXRzIG93biIuCisgICAgICAgIExPT0tJTkdfRk9SID0gInN0b3BwZWQiCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUwMCk6CisgICAgICAgICAgICBpZiBMT09LSU5HX0ZPUiBpbiByZXByKHQpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oTE9PS0lOR19GT1IsIHJlcHIodCkpICMgd2Ugd2FpdGVkIGF0IGxlYXN0IDUgc2Vjb25kcwogCiAgICAgZGVmIHRlc3RfQm91bmRlZFNlbWFwaG9yZV9saW1pdChzZWxmKToKICAgICAgICAgIyBCb3VuZGVkU2VtYXBob3JlIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yIGlmIHJlbGVhc2VkIHRvbyBvZnRlbi4KQEAgLTQ5MCwxNCArNjE2LDQ4IEBACiAgICAgICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJzLnJlbGVhc2UpCiAKLWNsYXNzIFRocmVhZEpvaW5PblNodXRkb3duKEJhc2VUZXN0Q2FzZSk6CisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2ZyYW1lX3RzdGF0ZV90cmFjaW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNDQzMjogQ3Jhc2ggd2hlbiBhIGdlbmVyYXRvciBpcyBjcmVhdGVkIGluIGEgQyB0aHJlYWQgdGhhdCBpcworICAgICAgICAjIGRlc3Ryb3llZCB3aGlsZSB0aGUgZ2VuZXJhdG9yIGlzIHN0aWxsIHVzZWQuIFRoZSBpc3N1ZSB3YXMgdGhhdCBhCisgICAgICAgICMgZ2VuZXJhdG9yIGNvbnRhaW5zIGEgZnJhbWUsIGFuZCB0aGUgZnJhbWUga2VwdCBhIHJlZmVyZW5jZSB0byB0aGUKKyAgICAgICAgIyBQeXRob24gc3RhdGUgb2YgdGhlIGRlc3Ryb3llZCBDIHRocmVhZC4gVGhlIGNyYXNoIG9jY3VycyB3aGVuIGEgdHJhY2UKKyAgICAgICAgIyBmdW5jdGlvbiBpcyBzZXR1cC4KIAotICAgICMgQmV0d2VlbiBmb3JrKCkgYW5kIGV4ZWMoKSwgb25seSBhc3luYy1zYWZlIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCAoaXNzdWVzCi0gICAgIyAjMTIzMTYgYW5kICMxMTg3MCksIGFuZCBmb3JrKCkgZnJvbSBhIHdvcmtlciB0aHJlYWQgaXMga25vd24gdG8gdHJpZ2dlcgotICAgICMgcHJvYmxlbXMgd2l0aCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIChpc3N1ZSAjMzg2Myk6IHNraXAgcHJvYmxlbWF0aWMgdGVzdHMKLSAgICAjIG9uIHBsYXRmb3JtcyBrbm93biB0byBiZWhhdmUgYmFkbHkuCi0gICAgcGxhdGZvcm1zX3RvX3NraXAgPSAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ25ldGJzZDUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdvczJlbXgnLCAnaHAtdXgxMScpCisgICAgICAgIGRlZiBub29wX3RyYWNlKGZyYW1lLCBldmVudCwgYXJnKToKKyAgICAgICAgICAgICMgbm8gb3BlcmF0aW9uCisgICAgICAgICAgICByZXR1cm4gbm9vcF90cmFjZQorCisgICAgICAgIGRlZiBnZW5lcmF0b3IoKToKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgeWllbGQgImdlbmVyZWF0b3IiCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICBpZiBjYWxsYmFjay5nZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5nZW4gPSBnZW5lcmF0b3IoKQorICAgICAgICAgICAgcmV0dXJuIG5leHQoY2FsbGJhY2suZ2VuKQorICAgICAgICBjYWxsYmFjay5nZW4gPSBOb25lCisKKyAgICAgICAgb2xkX3RyYWNlID0gc3lzLmdldHRyYWNlKCkKKyAgICAgICAgc3lzLnNldHRyYWNlKG5vb3BfdHJhY2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgSW5zdGFsbCBhIHRyYWNlIGZ1bmN0aW9uCisgICAgICAgICAgICB0aHJlYWRpbmcuc2V0dHJhY2Uobm9vcF90cmFjZSkKKworICAgICAgICAgICAgIyBDcmVhdGUgYSBnZW5lcmF0b3IgaW4gYSBDIHRocmVhZCB3aGljaCBleGl0cyBhZnRlciB0aGUgY2FsbAorICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICAgICAgX3Rlc3RjYXBpLmNhbGxfaW5fdGVtcG9yYXJ5X2NfdGhyZWFkKGNhbGxiYWNrKQorCisgICAgICAgICAgICAjIENhbGwgdGhlIGdlbmVyYXRvciBpbiBhIGRpZmZlcmVudCBQeXRob24gdGhyZWFkLCBjaGVjayB0aGF0IHRoZQorICAgICAgICAgICAgIyBnZW5lcmF0b3IgZGlkbid0IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGRlc3Ryb3llZCB0aHJlYWQgc3RhdGUKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHJhbmdlKDMpOgorICAgICAgICAgICAgICAgICMgVGhlIHRyYWNlIGZ1bmN0aW9uIGlzIHN0aWxsIGNhbGxlZCBoZXJlCisgICAgICAgICAgICAgICAgY2FsbGJhY2soKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnNldHRyYWNlKG9sZF90cmFjZSkKKworCitjbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgogCiAgICAgZGVmIF9ydW5fYW5kX2pvaW4oc2VsZiwgc2NyaXB0KToKICAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKQEAgLTU3MCwxNDQgKzczMCw4IEBACiAgICAgICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcnVuX2FuZF9qb2luKHNjcmlwdCkKIAotICAgIGRlZiBhc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2VsZiwgc2NyaXB0LCBleHBlY3RlZF9vdXRwdXQpOgotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIHNjcmlwdCkKLSAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX291dHB1dCkKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNF9qb2luaW5nX2Fjcm9zc19mb3JrX2luX3dvcmtlcl90aHJlYWQoc2VsZik6Ci0gICAgICAgICMgVGhlcmUgdXNlZCB0byBiZSBhIHBvc3NpYmxlIGRlYWRsb2NrIHdoZW4gZm9ya2luZyBmcm9tIGEgY2hpbGQKLSAgICAgICAgIyB0aHJlYWQuICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY2NDMuCi0KLSAgICAgICAgIyBUaGUgc2NyaXB0IHRha2VzIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0gICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHN0YXJ0cyBhIG5ldyB0aHJlYWQgYW5kIHRoZW4KLSAgICAgICAgIyAgIHRyaWVzIHRvIGpvaW4gaXQuCi0gICAgICAgICMgLSBUaGUgam9pbiBvcGVyYXRpb24gYWNxdWlyZXMgdGhlIExvY2sgaW5zaWRlIHRoZSB0aHJlYWQncyBfYmxvY2sKLSAgICAgICAgIyAgIENvbmRpdGlvbi4gIChTZWUgdGhyZWFkaW5nLnB5OlRocmVhZC5qb2luKCkuKQotICAgICAgICAjIC0gV2Ugc3R1YiBvdXQgdGhlIGFjcXVpcmUgbWV0aG9kIG9uIHRoZSBjb25kaXRpb24gdG8gZm9yY2UgaXQgdG8gd2FpdAotICAgICAgICAjICAgdW50aWwgdGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBBQ1FVSVJFRCBIRVJFKQotICAgICAgICAjIC0gVGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBIRUxEIGFuZCBXT1JLRVIgVEhSRUFEIEZPUktTCi0gICAgICAgICMgICBIRVJFKQotICAgICAgICAjIC0gVGhlIG1haW4gdGhyZWFkIG9mIHRoZSBwYXJlbnQgcHJvY2VzcyBlbnRlcnMgQ29uZGl0aW9uLndhaXQoKSwKLSAgICAgICAgIyAgIHdoaWNoIHJlbGVhc2VzIHRoZSBsb2NrIG9uIHRoZSBjaGlsZCB0aHJlYWQuCi0gICAgICAgICMgLSBUaGUgY2hpbGQgcHJvY2VzcyByZXR1cm5zLiAgV2l0aG91dCB0aGUgbmVjZXNzYXJ5IGZpeCwgd2hlbiB0aGUKLSAgICAgICAgIyAgIG1haW4gdGhyZWFkIG9mIHRoZSBjaGlsZCBwcm9jZXNzICh3aGljaCB1c2VkIHRvIGJlIHRoZSBjaGlsZCB0aHJlYWQKLSAgICAgICAgIyAgIGluIHRoZSBwYXJlbnQgcHJvY2VzcykgYXR0ZW1wdHMgdG8gZXhpdCwgaXQgd2lsbCB0cnkgdG8gYWNxdWlyZSB0aGUKLSAgICAgICAgIyAgIGxvY2sgaW4gdGhlIFRocmVhZC5fYmxvY2sgQ29uZGl0aW9uIG9iamVjdCBhbmQgaGFuZywgYmVjYXVzZSB0aGUKLSAgICAgICAgIyAgIGxvY2sgd2FzIGhlbGQgYWNyb3NzIHRoZSBmb3JrLgotCi0gICAgICAgIHNjcmlwdCA9ICIiImlmIDE6Ci0gICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZwotCi0gICAgICAgICAgICBmaW5pc2hfam9pbiA9IEZhbHNlCi0gICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKLQotICAgICAgICAgICAgZGVmIHdvcmtlcigpOgotICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGlzIHRocmVhZCdzIGxvY2sgaXMgYWNxdWlyZWQgYmVmb3JlIGZvcmtpbmcgdG8KLSAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgZGVhZGxvY2suCi0gICAgICAgICAgICAgICAgZ2xvYmFsIGZpbmlzaF9qb2luCi0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgICAgICAjIExPQ0sgSEVMRDogTWFpbiB0aHJlYWQgaG9sZHMgbG9jayBhY3Jvc3MgdGhpcyBjYWxsLgotICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBUcnVlCi0gICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKLSAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgotCi0gICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQotCi0gICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIGxvY2sgYWNxdWlyZSBtZXRob2QuCi0gICAgICAgICAgICAjIFRoaXMgYWNxdWlyZXMgdGhlIGxvY2sgYW5kIHRoZW4gd2FpdHMgdW50aWwgdGhlIGNoaWxkIGhhcyBmb3JrZWQKLSAgICAgICAgICAgICMgYmVmb3JlIHJldHVybmluZywgd2hpY2ggd2lsbCByZWxlYXNlIHRoZSBsb2NrIHNvb24gYWZ0ZXIuICBJZgotICAgICAgICAgICAgIyBzb21lb25lIGVsc2UgdHJpZXMgdG8gZml4IHRoaXMgdGVzdCBjYXNlIGJ5IGFjcXVpcmluZyB0aGlzIGxvY2sKLSAgICAgICAgICAgICMgYmVmb3JlIGZvcmtpbmcgaW5zdGVhZCBvZiByZXNldHRpbmcgaXQsIHRoZSB0ZXN0IGNhc2Ugd2lsbAotICAgICAgICAgICAgIyBkZWFkbG9jayB3aGVuIGl0IHNob3VsZG4ndC4KLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCi0gICAgICAgICAgICBvcmlnX2FjcXVpcmUgPSBjb25kaXRpb24uYWNxdWlyZQotICAgICAgICAgICAgY2FsbF9jb3VudF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgICAgICAgICAgY2FsbF9jb3VudCA9IDAKLSAgICAgICAgICAgIGRlZiBteV9hY3F1aXJlKCk6Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIGNhbGxfY291bnQKLSAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yawotICAgICAgICAgICAgICAgIG9yaWdfYWNxdWlyZSgpICAjIExPQ0sgQUNRVUlSRUQgSEVSRQotICAgICAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBUcnVlCi0gICAgICAgICAgICAgICAgaWYgY2FsbF9jb3VudCA9PSAwOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSBub3QgZmluaXNoX2pvaW46Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIFdPUktFUiBUSFJFQUQgRk9SS1MgSEVSRQotICAgICAgICAgICAgICAgIHdpdGggY2FsbF9jb3VudF9sb2NrOgotICAgICAgICAgICAgICAgICAgICBjYWxsX2NvdW50ICs9IDEKLSAgICAgICAgICAgIGNvbmRpdGlvbi5hY3F1aXJlID0gbXlfYWNxdWlyZQotCi0gICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIHcuam9pbigpCi0gICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4nKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgImVuZCBvZiBtYWluXG4iKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKLSAgICBkZWYgdGVzdF81X2NsZWFyX3dhaXRlcl9sb2Nrc190b19hdm9pZF9jcmFzaChzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IGEgc3Bhd25lZCB0aHJlYWQgdGhhdCBmb3JrcyBkb2Vzbid0IHNlZ2ZhdWx0IG9uIGNlcnRhaW4KLSAgICAgICAgIyBwbGF0Zm9ybXMsIG5hbWVseSBPUyBYLiAgVGhpcyB1c2VkIHRvIGhhcHBlbiBpZiB0aGVyZSB3YXMgYSB3YWl0ZXIKLSAgICAgICAgIyBsb2NrIGluIHRoZSB0aHJlYWQncyBjb25kaXRpb24gdmFyaWFibGUncyB3YWl0ZXJzIGxpc3QuICBFdmVuIHRob3VnaAotICAgICAgICAjIHdlIGtub3cgdGhlIGxvY2sgd2lsbCBiZSBoZWxkIGFjcm9zcyB0aGUgZm9yaywgaXQgaXMgbm90IHNhZmUgdG8KLSAgICAgICAgIyByZWxlYXNlIGxvY2tzIGhlbGQgYWNyb3NzIGZvcmtzIG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHJlbGVhc2luZyB0aGUKLSAgICAgICAgIyB3YWl0ZXIgbG9jayBjYXVzZWQgYSBzZWdmYXVsdCBvbiBPUyBYLiAgRnVydGhlcm1vcmUsIHNpbmNlIGxvY2tzIG9uCi0gICAgICAgICMgT1MgWCBhcmUgKGFzIG9mIHRoaXMgd3JpdGluZykgaW1wbGVtZW50ZWQgd2l0aCBhIG11dGV4ICsgY29uZGl0aW9uCi0gICAgICAgICMgdmFyaWFibGUgaW5zdGVhZCBvZiBhIHNlbWFwaG9yZSwgd2hpbGUgd2Uga25vdyB0aGF0IHRoZSBQeXRob24tbGV2ZWwKLSAgICAgICAgIyBsb2NrIHdpbGwgYmUgYWNxdWlyZWQsIHdlIGNhbid0IGtub3cgaWYgdGhlIGludGVybmFsIG11dGV4IHdpbGwgYmUKLSAgICAgICAgIyBhY3F1aXJlZCBhdCB0aGUgdGltZSBvZiB0aGUgZm9yay4KLQotICAgICAgICBzY3JpcHQgPSAiIiJpZiBUcnVlOgotICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lLCB0aHJlYWRpbmcKLQotICAgICAgICAgICAgc3RhcnRfZm9yayA9IEZhbHNlCi0KLSAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKLSAgICAgICAgICAgICAgICAjIFdhaXQgdW50aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBhdHRlbXB0ZWQgdG8gam9pbiB0aGlzIHRocmVhZAotICAgICAgICAgICAgICAgICMgYmVmb3JlIGNvbnRpbnVpbmcuCi0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQotICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MganVzdCB3YWl0cyBmb3IgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgIChjcGlkLCByYykgPSBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgY3BpZCA9PSBjaGlsZHBpZAotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmMgPT0gMAotICAgICAgICAgICAgICAgICAgICBwcmludCgnZW5kIG9mIHdvcmtlciB0aHJlYWQnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBzaG91bGQganVzdCByZXR1cm4uCi0gICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKLQotICAgICAgICAgICAgIyBTdHViIG91dCB0aGUgcHJpdmF0ZSBjb25kaXRpb24gdmFyaWFibGUncyBfcmVsZWFzZV9zYXZlIG1ldGhvZC4KLSAgICAgICAgICAgICMgVGhpcyByZWxlYXNlcyB0aGUgY29uZGl0aW9uJ3MgbG9jayBhbmQgZmxpcHMgdGhlIGdsb2JhbCB0aGF0Ci0gICAgICAgICAgICAjIGNhdXNlcyB0aGUgd29ya2VyIHRvIGZvcmsuICBBdCB0aGlzIHBvaW50LCB0aGUgcHJvYmxlbWF0aWMgd2FpdGVyCi0gICAgICAgICAgICAjIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQgb25jZSBieSB0aGUgd2FpdGVyIGFuZCBoYXMgYmVlbiBwdXQgb250bwotICAgICAgICAgICAgIyB0aGUgd2FpdGVycyBsaXN0LgotICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKLSAgICAgICAgICAgIG9yaWdfcmVsZWFzZV9zYXZlID0gY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUKLSAgICAgICAgICAgIGRlZiBteV9yZWxlYXNlX3NhdmUoKToKLSAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yawotICAgICAgICAgICAgICAgIG9yaWdfcmVsZWFzZV9zYXZlKCkKLSAgICAgICAgICAgICAgICAjIFdhaXRlciBsb2NrIGhlbGQgaGVyZSwgY29uZGl0aW9uIGxvY2sgcmVsZWFzZWQuCi0gICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKLSAgICAgICAgICAgIGNvbmRpdGlvbi5fcmVsZWFzZV9zYXZlID0gbXlfcmVsZWFzZV9zYXZlCi0KLSAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgdy5qb2luKCkKLSAgICAgICAgICAgIHByaW50KCdlbmQgb2YgbWFpbiB0aHJlYWQnKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIG91dHB1dCA9ICJlbmQgb2Ygd29ya2VyIHRocmVhZFxuZW5kIG9mIG1haW4gdGhyZWFkXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgb3V0cHV0KQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKLSAgICBkZWYgdGVzdF82X2RhZW1vbl90aHJlYWRzKHNlbGYpOgorICAgIGRlZiB0ZXN0XzRfZGFlbW9uX3RocmVhZHMoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBhIGRhZW1vbiB0aHJlYWQgY2Fubm90IGNyYXNoIHRoZSBpbnRlcnByZXRlciBvbiBzaHV0ZG93bgogICAgICAgICAjIGJ5IG1hbmlwdWxhdGluZyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGJlaW5nIGRpc3Bvc2VkIG9mIGluCiAgICAgICAgICMgdGhlIG1haW4gdGhyZWFkLgpAQCAtNzczLDQ1ICs3OTcsMTExIEBACiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgZGVmIHRlc3RfY2xlYXJfdGhyZWFkc19zdGF0ZXNfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcwOTQ6IGNoZWNrIHRoYXQgdGhyZWFkcyBzdGF0ZXMgYXJlIGNsZWFyZWQgYWZ0ZXIgZm9yaygpCisKKyAgICAgICAgIyBzdGFydCBhIGJ1bmNoIG9mIHRocmVhZHMKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDE2KToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGEgOiB0aW1lLnNsZWVwKDAuMykpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRocmVhZHMgc3RhdGVzIGhhdmUgYmVlbiBjbGVhcmVkCisgICAgICAgICAgICBpZiBsZW4oc3lzLl9jdXJyZW50X2ZyYW1lcygpKSA9PSAxOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisKK2NsYXNzIFN1YmludGVycFRocmVhZGluZ1Rlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90aHJlYWRzX2pvaW4oc2VsZik6CisgICAgICAgICMgTm9uLWRhZW1vbiB0aHJlYWRzIHNob3VsZCBiZSBqb2luZWQgYXQgc3ViaW50ZXJwcmV0ZXIgc2h1dGRvd24KKyAgICAgICAgIyAoaXNzdWUgIzE4ODA4KQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgIyBTbGVlcCBhIGJpdCBzbyB0aGF0IHRoZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyB3aGVuCisgICAgICAgICAgICAgICAgIyBQeV9FbmRJbnRlcnByZXRlciBpcyBjYWxsZWQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICAgICAgICAgIG9zLndyaXRlKCVkLCBiIngiKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Zikuc3RhcnQoKQorICAgICAgICAgICAgIiIiICUgKHcsKQorICAgICAgICByZXQgPSB0ZXN0LnN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgIyBUaGUgdGhyZWFkIHdhcyBqb2luZWQgcHJvcGVybHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChyLCAxKSwgYiJ4IikKKworICAgIGRlZiB0ZXN0X3RocmVhZHNfam9pbl8yKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIGRlbGF5IGdldHMgaW50cm9kdWNlZCBhZnRlciB0aGUgdGhyZWFkJ3MKKyAgICAgICAgIyBQeXRob24gY29kZSByZXR1cm5lZCBidXQgYmVmb3JlIHRoZSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZC4KKyAgICAgICAgIyBUbyBhY2hpZXZlIHRoaXMsIHdlIHJlZ2lzdGVyIGEgdGhyZWFkLWxvY2FsIG9iamVjdCB3aGljaCBzbGVlcHMKKyAgICAgICAgIyBhIGJpdCB3aGVuIGRlYWxsb2NhdGVkLgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGNsYXNzIFNsZWVwZXI6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKworICAgICAgICAgICAgdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIFNsZWVwIGEgYml0IHNvIHRoYXQgdGhlIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgICAgICAgICAgdGxzLnggPSBTbGVlcGVyKCkKKyAgICAgICAgICAgICAgICBvcy53cml0ZSglZCwgYiJ4IikKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIiAlICh3LCkKKyAgICAgICAgcmV0ID0gdGVzdC5zdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgICMgVGhlIHRocmVhZCB3YXMgam9pbmVkIHByb3Blcmx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQociwgMSksIGIieCIpCisKICAgICBAY3B5dGhvbl9vbmx5Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihfdGVzdGNhcGkgaXMgTm9uZSwgIm5lZWQgX3Rlc3RjYXBpIG1vZHVsZSIpCi0gICAgZGVmIHRlc3RfZnJhbWVfdHN0YXRlX3RyYWNpbmcoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NDMyOiBDcmFzaCB3aGVuIGEgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgaW4gYSBDIHRocmVhZCB0aGF0IGlzCi0gICAgICAgICMgZGVzdHJveWVkIHdoaWxlIHRoZSBnZW5lcmF0b3IgaXMgc3RpbGwgdXNlZC4gVGhlIGlzc3VlIHdhcyB0aGF0IGEKLSAgICAgICAgIyBnZW5lcmF0b3IgY29udGFpbnMgYSBmcmFtZSwgYW5kIHRoZSBmcmFtZSBrZXB0IGEgcmVmZXJlbmNlIHRvIHRoZQotICAgICAgICAjIFB5dGhvbiBzdGF0ZSBvZiB0aGUgZGVzdHJveWVkIEMgdGhyZWFkLiBUaGUgY3Jhc2ggb2NjdXJzIHdoZW4gYSB0cmFjZQotICAgICAgICAjIGZ1bmN0aW9uIGlzIHNldHVwLgorICAgIGRlZiB0ZXN0X2RhZW1vbl90aHJlYWRzX2ZhdGFsX2Vycm9yKHNlbGYpOgorICAgICAgICBzdWJpbnRlcnBfY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgdGltZQogCi0gICAgICAgIGRlZiBub29wX3RyYWNlKGZyYW1lLCBldmVudCwgYXJnKToKLSAgICAgICAgICAgICMgbm8gb3BlcmF0aW9uCi0gICAgICAgICAgICByZXR1cm4gbm9vcF90cmFjZQorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGFlbW9uIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZiwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKIAotICAgICAgICBkZWYgZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgIHlpZWxkICJnZW5lcmVhdG9yIgotCi0gICAgICAgIGRlZiBjYWxsYmFjaygpOgotICAgICAgICAgICAgaWYgY2FsbGJhY2suZ2VuIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2suZ2VuID0gZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0KGNhbGxiYWNrLmdlbikKLSAgICAgICAgY2FsbGJhY2suZ2VuID0gTm9uZQotCi0gICAgICAgIG9sZF90cmFjZSA9IHN5cy5nZXR0cmFjZSgpCi0gICAgICAgIHN5cy5zZXR0cmFjZShub29wX3RyYWNlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIEluc3RhbGwgYSB0cmFjZSBmdW5jdGlvbgotICAgICAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKG5vb3BfdHJhY2UpCi0KLSAgICAgICAgICAgICMgQ3JlYXRlIGEgZ2VuZXJhdG9yIGluIGEgQyB0aHJlYWQgd2hpY2ggZXhpdHMgYWZ0ZXIgdGhlIGNhbGwKLSAgICAgICAgICAgIF90ZXN0Y2FwaS5jYWxsX2luX3RlbXBvcmFyeV9jX3RocmVhZChjYWxsYmFjaykKLQotICAgICAgICAgICAgIyBDYWxsIHRoZSBnZW5lcmF0b3IgaW4gYSBkaWZmZXJlbnQgUHl0aG9uIHRocmVhZCwgY2hlY2sgdGhhdCB0aGUKLSAgICAgICAgICAgICMgZ2VuZXJhdG9yIGRpZG4ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXN0cm95ZWQgdGhyZWFkIHN0YXRlCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiByYW5nZSgzKToKLSAgICAgICAgICAgICAgICAjIFRoZSB0cmFjZSBmdW5jdGlvbiBpcyBzdGlsbCBjYWxsZWQgaGVyZQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zZXR0cmFjZShvbGRfdHJhY2UpCisgICAgICAgICAgICBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycCglcikKKyAgICAgICAgICAgICIiIiAlIChzdWJpbnRlcnBfY29kZSwpCisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgiLWMiLCBzY3JpcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkZhdGFsIFB5dGhvbiBlcnJvcjogUHlfRW5kSW50ZXJwcmV0ZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IHRoZSBsYXN0IHRocmVhZCIsIGVyci5kZWNvZGUoKSkKIAogCiBjbGFzcyBUaHJlYWRpbmdFeGNlcHRpb25UZXN0cyhCYXNlVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CmluZGV4IGY5NzVhNzUuLjlkOTI3NDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKQEAgLTgsNyArOCw3IEBACiB0aHJlYWQgPSBpbXBvcnRfbW9kdWxlKCdfdGhyZWFkJykKIGltcG9ydCB0aW1lCiAKLWlmIHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJykgb3Igc3lzLnBsYXRmb3JtPT0ncmlzY29zJzoKK2lmIChzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nKToKICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgc3lzLnBsYXRmb3JtKQogCiBwcm9jZXNzX3BpZCA9IG9zLmdldHBpZCgpCkBAIC03NCw2ICs3NCw5IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcElmKFVTSU5HX1BUSFJFQURfQ09ORCwKICAgICAgICAgICAgICAgICAgICAgICdQT1NJWCBjb25kaXRpb24gdmFyaWFibGVzIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCcpCisgICAgIyBJc3N1ZSAjMjA1NjQ6IHNlbV90aW1lZHdhaXQoKSBjYW5ub3QgYmUgaW50ZXJydXB0ZWQgb24gT3BlbkJTRAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ29wZW5ic2QnKSwKKyAgICAgICAgICAgICAgICAgICAgICdsb2NrIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBvbiBPcGVuQlNEJykKICAgICBkZWYgdGVzdF9sb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKHNlbGYpOgogICAgICAgICAjIE1pbWljIHJlY2VpdmluZyBhIFNJR0lOVCAoS2V5Ym9hcmRJbnRlcnJ1cHQpIHdpdGggU0lHQUxSTSB3aGlsZSBzdHVjawogICAgICAgICAjIGluIGEgZGVhZGxvY2suCkBAIC05Nyw2ICsxMDAsOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihVU0lOR19QVEhSRUFEX0NPTkQsCiAgICAgICAgICAgICAgICAgICAgICAnUE9TSVggY29uZGl0aW9uIHZhcmlhYmxlcyBjYW5ub3QgYmUgaW50ZXJydXB0ZWQnKQorICAgICMgSXNzdWUgIzIwNTY0OiBzZW1fdGltZWR3YWl0KCkgY2Fubm90IGJlIGludGVycnVwdGVkIG9uIE9wZW5CU0QKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdvcGVuYnNkJyksCisgICAgICAgICAgICAgICAgICAgICAnbG9jayBjYW5ub3QgYmUgaW50ZXJydXB0ZWQgb24gT3BlbkJTRCcpCiAgICAgZGVmIHRlc3RfcmxvY2tfYWNxdWlyZV9pbnRlcnJ1cHRpb24oc2VsZik6CiAgICAgICAgICMgTWltaWMgcmVjZWl2aW5nIGEgU0lHSU5UIChLZXlib2FyZEludGVycnVwdCkgd2l0aCBTSUdBTFJNIHdoaWxlIHN0dWNrCiAgICAgICAgICMgaW4gYSBkZWFkbG9jay4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQppbmRleCAxYTRkODczLi5iZTdkZGNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CkBAIC0xNCw2ICsxNCw4IEBACiBTSVpFT0ZfSU5UID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTSVpFT0ZfSU5UJykgb3IgNAogVElNRV9NQVhZRUFSID0gKDEgPDwgOCAqIFNJWkVPRl9JTlQgLSAxKSAtIDEKIFRJTUVfTUlOWUVBUiA9IC1USU1FX01BWFlFQVIgLSAxCitfUHlUaW1lX1JPVU5EX0RPV04gPSAwCitfUHlUaW1lX1JPVU5EX1VQID0gMQogCiAKIGNsYXNzIFRpbWVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yMjYsNyArMjI4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmN0aW1lKHQpLCAnU3VuIFNlcCAxNiAwMTowMzo1MiAxOTczJykKICAgICAgICAgdCA9IHRpbWUubWt0aW1lKCgyMDAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAtMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5jdGltZSh0KSwgJ1NhdCBKYW4gIDEgMDA6MDA6MDAgMjAwMCcpCi0gICAgICAgIGZvciB5ZWFyIGluIFstMTAwLCAxMDAsIDEwMDAsIDIwMDAsIDEwMDAwXToKKyAgICAgICAgZm9yIHllYXIgaW4gWy0xMDAsIDEwMCwgMTAwMCwgMjAwMCwgMjA1MCwgMTAwMDBdOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRlc3R2YWwgPSB0aW1lLm1rdGltZSgoeWVhciwgMSwgMTApICsgKDAsKSo2KQogICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKToKQEAgLTM0NCw2ICszNDYsMTMgQEAKICAgICBkZWYgdGVzdF9ta3RpbWUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE3MjY2ODcKICAgICAgICAgZm9yIHQgaW4gKC0yLCAtMSwgMCwgMSk6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnYWl4JykgYW5kIHQgPT0gLTE6CisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTExODgsICMxOTc0ODogbWt0aW1lKCkgcmV0dXJucyAtMSBvbiBlcnJvci4gT24gTGludXgsCisgICAgICAgICAgICAgICAgIyB0aGUgdG1fd2RheSBmaWVsZCBpcyB1c2VkIGFzIGEgc2VudGluZWwgKCkgdG8gZGV0ZWN0IGlmIC0xIGlzCisgICAgICAgICAgICAgICAgIyByZWFsbHkgYW4gZXJyb3Igb3IgYSB2YWxpZCB0aW1lc3RhbXAuIE9uIEFJWCwgdG1fd2RheSBpcworICAgICAgICAgICAgICAgICMgdW5jaGFuZ2VkIGV2ZW4gb24gc3VjY2VzcyBhbmQgc28gY2Fubm90IGJlIHVzZWQgYXMgYQorICAgICAgICAgICAgICAgICMgc2VudGluZWwuCisgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0dCA9IHRpbWUubG9jYWx0aW1lKHQpCiAgICAgICAgICAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIE9TRXJyb3IpOgpAQCAtMzcxLDYgKzM4MCwxNCBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIodGltZSwgJ21vbm90b25pYycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkIHRpbWUubW9ub3RvbmljJykKICAgICBkZWYgdGVzdF9tb25vdG9uaWMoc2VsZik6CisgICAgICAgICMgbW9ub3RvbmljKCkgc2hvdWxkIG5vdCBnbyBiYWNrd2FyZAorICAgICAgICB0aW1lcyA9IFt0aW1lLm1vbm90b25pYygpIGZvciBuIGluIHJhbmdlKDEwMCldCisgICAgICAgIHQxID0gdGltZXNbMF0KKyAgICAgICAgZm9yIHQyIGluIHRpbWVzWzE6XToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHQyLCB0MSwgInRpbWVzPSVzIiAlIHRpbWVzKQorICAgICAgICAgICAgdDEgPSB0MgorCisgICAgICAgICMgbW9ub3RvbmljKCkgaW5jbHVkZXMgdGltZSBlbGFwc2VkIGR1cmluZyBhIHNsZWVwCiAgICAgICAgIHQxID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICB0aW1lLnNsZWVwKDAuNSkKICAgICAgICAgdDIgPSB0aW1lLm1vbm90b25pYygpCkBAIC0zNzksNiArMzk2LDcgQEAKICAgICAgICAgIyBJc3N1ZSAjMjAxMDE6IE9uIHNvbWUgV2luZG93cyBtYWNoaW5lcywgZHQgbWF5IGJlIHNsaWdodGx5IGxvdwogICAgICAgICBzZWxmLmFzc2VydFRydWUoMC40NSA8PSBkdCA8PSAxLjAsIGR0KQogCisgICAgICAgICMgbW9ub3RvbmljKCkgaXMgYSBtb25vdG9uaWMgYnV0IG5vbiBhZGp1c3RhYmxlIGNsb2NrCiAgICAgICAgIGluZm8gPSB0aW1lLmdldF9jbG9ja19pbmZvKCdtb25vdG9uaWMnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5tb25vdG9uaWMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5hZGp1c3RhYmxlKQpAQCAtNTc2LDU4ICs1OTQsMTE2IEBACiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfdGltZV90KHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgcHl0aW1lX29iamVjdF90b190aW1lX3QKLSAgICAgICAgZm9yIG9iaiwgdGltZV90IGluICgKLSAgICAgICAgICAgICgwLCAwKSwKLSAgICAgICAgICAgICgtMSwgLTEpLAotICAgICAgICAgICAgKC0xLjAsIC0xKSwKLSAgICAgICAgICAgICgtMS45LCAtMSksCi0gICAgICAgICAgICAoMS4wLCAxKSwKLSAgICAgICAgICAgICgxLjksIDEpLAorICAgICAgICBmb3Igb2JqLCB0aW1lX3QsIHJuZCBpbiAoCisgICAgICAgICAgICAjIFJvdW5kIHRvd2FyZHMgemVybworICAgICAgICAgICAgKDAsIDAsIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEsIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjAsIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjksIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMCwgMSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxLjksIDEsIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAjIFJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgICAoMCwgMCwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEsIC0xLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMS4wLCAtMSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuOSwgLTIsIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMCwgMSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMS45LCAyLCBfUHlUaW1lX1JPVU5EX1VQKSwKICAgICAgICAgKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lX3Qob2JqKSwgdGltZV90KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweXRpbWVfb2JqZWN0X3RvX3RpbWVfdChvYmosIHJuZCksIHRpbWVfdCkKIAorICAgICAgICBybmQgPSBfUHlUaW1lX1JPVU5EX0RPV04KICAgICAgICAgZm9yIGludmFsaWQgaW4gc2VsZi5pbnZhbGlkX3ZhbHVlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHB5dGltZV9vYmplY3RfdG9fdGltZV90LCBpbnZhbGlkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5dGltZV9vYmplY3RfdG9fdGltZV90LCBpbnZhbGlkLCBybmQpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90aW1ldmFsKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgcHl0aW1lX29iamVjdF90b190aW1ldmFsCi0gICAgICAgIGZvciBvYmosIHRpbWV2YWwgaW4gKAotICAgICAgICAgICAgKDAsICgwLCAwKSksCi0gICAgICAgICAgICAoLTEsICgtMSwgMCkpLAotICAgICAgICAgICAgKC0xLjAsICgtMSwgMCkpLAotICAgICAgICAgICAgKDFlLTYsICgwLCAxKSksCi0gICAgICAgICAgICAoLTFlLTYsICgtMSwgOTk5OTk5KSksCi0gICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDApKSwKLSAgICAgICAgICAgICgxLjEyMzQ1NjAsICgxLCAxMjM0NTYpKSwKLSAgICAgICAgICAgICgxLjEyMzQ1NjksICgxLCAxMjM0NTYpKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTYwLCAoLTIsIDg3NjU0NCkpLAotICAgICAgICAgICAgKC0xLjEyMzQ1NjEsICgtMiwgODc2NTQzKSksCisgICAgICAgIGZvciBvYmosIHRpbWV2YWwsIHJuZCBpbiAoCisgICAgICAgICAgICAjIFJvdW5kIHRvd2FyZHMgemVybworICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4wLCAoLTEsIDApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDFlLTYsICgwLCAxKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxZS03LCAoMCwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTFlLTYsICgtMSwgOTk5OTk5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMWUtNywgKC0xLCA5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgwLjk5OTk5OTksICgwLCA5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDAuMDAwMDA0MSwgKDAsIDQpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMTIzNDU2MCwgKDEsIDEyMzQ1NiksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMS4xMjM0NTY5LCAoMSwgMTIzNDU2KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMC4wMDAwMDQwLCAoLTEsIDk5OTk5NiksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTAuMDAwMDA0MSwgKC0xLCA5OTk5OTUpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjEyMzQ1NjAsICgtMiwgODc2NTQ0KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTYxLCAoLTIsIDg3NjU0MyksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAjIFJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgICAoMCwgKDAsIDApLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMCwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMWUtNiwgKDAsIDEpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxZS03LCAoMCwgMSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xZS02LCAoLTEsIDk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xZS03LCAoLTEsIDk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMC45OTk5OTk5LCAoMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDAuMDAwMDA0MSwgKDAsIDUpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxLjEyMzQ1NjAsICgxLCAxMjM0NTcpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxLjEyMzQ1NjksICgxLCAxMjM0NTcpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMC4wMDAwMDQwLCAoLTEsIDk5OTk5NiksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0wLjAwMDAwNDEsICgtMSwgOTk5OTk1KSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMTIzNDU2MCwgKC0yLCA4NzY1NDQpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTYxLCAoLTIsIDg3NjU0MyksIF9QeVRpbWVfUk9VTkRfVVApLAogICAgICAgICApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwob2JqKSwgdGltZXZhbCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmosIHJvdW5kPXJuZCwgdGltZXZhbD10aW1ldmFsKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGltZV9vYmplY3RfdG9fdGltZXZhbChvYmosIHJuZCksIHRpbWV2YWwpCiAKKyAgICAgICAgcm5kID0gX1B5VGltZV9ST1VORF9ET1dOCiAgICAgICAgIGZvciBpbnZhbGlkIGluIHNlbGYuaW52YWxpZF92YWx1ZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwsIGludmFsaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHl0aW1lX29iamVjdF90b190aW1ldmFsLCBpbnZhbGlkLCBybmQpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90aW1lc3BlYyhzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMKLSAgICAgICAgZm9yIG9iaiwgdGltZXNwZWMgaW4gKAotICAgICAgICAgICAgKDAsICgwLCAwKSksCi0gICAgICAgICAgICAoLTEsICgtMSwgMCkpLAotICAgICAgICAgICAgKC0xLjAsICgtMSwgMCkpLAotICAgICAgICAgICAgKDFlLTksICgwLCAxKSksCi0gICAgICAgICAgICAoLTFlLTksICgtMSwgOTk5OTk5OTk5KSksCi0gICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDAwMDApKSwKLSAgICAgICAgICAgICgxLjEyMzQ1Njc4OTAsICgxLCAxMjM0NTY3ODkpKSwKLSAgICAgICAgICAgICgxLjEyMzQ1Njc4OTksICgxLCAxMjM0NTY3ODkpKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTY3ODkwLCAoLTIsIDg3NjU0MzIxMSkpLAotICAgICAgICAgICAgKC0xLjEyMzQ1Njc4OTEsICgtMiwgODc2NTQzMjEwKSksCisgICAgICAgIGZvciBvYmosIHRpbWVzcGVjLCBybmQgaW4gKAorICAgICAgICAgICAgIyBSb3VuZCB0b3dhcmRzIHplcm8KKyAgICAgICAgICAgICgwLCAoMCwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEuMCwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxZS05LCAoMCwgMSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMWUtMTAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMWUtOSwgKC0xLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xZS0xMCwgKC0xLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwMDAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgwLjk5OTk5OTk5OTksICgwLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5MCwgKDEsIDEyMzQ1Njc4OSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMS4xMjM0NTY3ODk5LCAoMSwgMTIzNDU2Nzg5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTY3ODkwLCAoLTIsIDg3NjU0MzIxMSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MSwgKC0yLCA4NzY1NDMyMTApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgIyBSb3VuZCBhd2F5IGZyb20gemVybworICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjAsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDFlLTksICgwLCAxKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMWUtMTAsICgwLCAxKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTFlLTksICgtMSwgOTk5OTk5OTk5KSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTFlLTEwLCAoLTEsIDk5OTk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwMDAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMC45OTk5OTk5OTk5LCAoMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5MCwgKDEsIDEyMzQ1Njc5MCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5OSwgKDEsIDEyMzQ1Njc5MCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjEyMzQ1Njc4OTAsICgtMiwgODc2NTQzMjExKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MSwgKC0yLCA4NzY1NDMyMTApLCBfUHlUaW1lX1JPVU5EX1VQKSwKICAgICAgICAgKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lc3BlYyhvYmopLCB0aW1lc3BlYykKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmosIHJvdW5kPXJuZCwgdGltZXNwZWM9dGltZXNwZWMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lc3BlYyhvYmosIHJuZCksIHRpbWVzcGVjKQogCisgICAgICAgIHJuZCA9IF9QeVRpbWVfUk9VTkRfRE9XTgogICAgICAgICBmb3IgaW52YWxpZCBpbiBzZWxmLmludmFsaWRfdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcHl0aW1lX29iamVjdF90b190aW1lc3BlYywgaW52YWxpZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjLCBpbnZhbGlkLCBybmQpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aW1lLl9TVFJVQ1RfVE1fSVRFTVMgPT0gMTEsICJuZWVkcyB0bV96b25lIHN1cHBvcnQiKQogICAgIGRlZiB0ZXN0X2xvY2FsdGltZV90aW1lem9uZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQppbmRleCBkY2YyMDFiLi43MDNjNDNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgICAgIHNvY2suY29ubmVjdCgod2hpdGVob2xlKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQ6CiAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RrLnB5IGIvTGliL3Rlc3QvdGVzdF90ay5weQppbmRleCA3NTUxYTdmLi42MjcyOWYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGsucHkKQEAgLTYsMjAgKzYsMTMgQEAKIHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgndGtpbnRlcicpCiAKICMgU2tpcCB0ZXN0IGlmIHRrIGNhbm5vdCBiZSBpbml0aWFsaXplZC4KLWZyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3RrX2F2YWlsYWJpbGl0eQotY2hlY2tfdGtfYXZhaWxhYmlsaXR5KCkKK3N1cHBvcnQucmVxdWlyZXMoJ2d1aScpCiAKIGZyb20gdGtpbnRlci50ZXN0IGltcG9ydCBydW50a3Rlc3RzCiAKLWRlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6Ci0gICAgaWYgZW5hYmxlX2d1aToKLSAgICAgICAgaWYgc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCi0gICAgICAgIGVsaWYgJ2d1aScgbm90IGluIHN1cHBvcnQudXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCi0KK2RlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKICAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdGtpbnRlciddKSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGM4NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDI1IEBACisiIiJTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBzY3JpcHRzIGluIHRoZSBUb29scyBkaXJlY3RvcnkuIiIiCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGltcG9ydGxpYgorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gKKworYmFzZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUoICAgICAgICAgICAgICAgICAjIDxzcmMvaW5zdGFsbCBkaXI+CisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKCAgICAgICAgICAgICAgICAjIExpYgorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoICAgICAgICAgICAgICAgICMgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpKSAgICAjIHRlc3RfdG9vbHMKKwordG9vbHNkaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdUb29scycpCitzY3JpcHRzZGlyID0gb3MucGF0aC5qb2luKHRvb2xzZGlyLCAnc2NyaXB0cycpCisKK2RlZiBza2lwX2lmX21pc3NpbmcoKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY3JpcHRzZGlyKToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NjcmlwdHMgZGlyZWN0b3J5IGNvdWxkIG5vdCBiZSBmb3VuZCcpCisKK2RlZiBpbXBvcnRfdG9vbCh0b29sbmFtZSk6CisgICAgd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgoc2NyaXB0c2Rpcik6CisgICAgICAgIHJldHVybiBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSh0b29sbmFtZSkKKworZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgIHJldHVybiBzdXBwb3J0LmxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjEzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSB0ZXN0LnRlc3RfdG9vbHMgaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9ncHJvZjJodG1sLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X2dwcm9mMmh0bWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1YTJhOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9ncHJvZjJodG1sLnB5CkBAIC0wLDAgKzEsMzYgQEAKKyIiIlRlc3RzIGZvciB0aGUgZ3Byb2YyaHRtbCBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2Rpciwgc2tpcF9pZl9taXNzaW5nLCBpbXBvcnRfdG9vbAorCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBHcHJvZjJodG1sVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmdwcm9mID0gaW1wb3J0X3Rvb2woJ2dwcm9mMmh0bWwnKQorICAgICAgICBvbGRhcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgZGVmIGZpeHVwKCk6CisgICAgICAgICAgICBzeXMuYXJndiA9IG9sZGFyZ3YKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZpeHVwKQorICAgICAgICBzeXMuYXJndiA9IFtdCisKKyAgICBkZWYgdGVzdF9ncHJvZihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ1MDg6IHRoaXMgdXNlZCB0byBmYWlsIHdpdGggYW4gTmFtZUVycm9yLgorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuZ3Byb2YsICd3ZWJicm93c2VyJykgYXMgd21vY2ssIFwKKyAgICAgICAgICAgICAgICB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdhYmMnKQorICAgICAgICAgICAgb3BlbihmbiwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBzeXMuYXJndiA9IFsnZ3Byb2YyaHRtbCcsIGZuXQorICAgICAgICAgICAgc2VsZi5ncHJvZi5tYWluKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2NrLm9wZW4uY2FsbGVkKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfbWQ1c3VtLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X21kNXN1bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWVhMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X21kNXN1bS5weQpAQCAtMCwwICsxLDc3IEBACisiIiJUZXN0cyBmb3IgdGhlIG1kNXN1bSBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2RpciwgaW1wb3J0X3Rvb2wsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBNRDVTdW1UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnNjcmlwdCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAnbWQ1c3VtLnB5JykKKyAgICAgICAgb3MubWtkaXIoc3VwcG9ydC5URVNURk4pCisgICAgICAgIGNscy5mb2RkZXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdtZDVzdW0uZm9kZGVyJykKKyAgICAgICAgd2l0aCBvcGVuKGNscy5mb2RkZXIsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInbWQ1c3VtXHJcbnRlc3QgZmlsZVxyXG4nKQorICAgICAgICBjbHMuZm9kZGVyX21kNSA9IGInZDM4ZGFlMmViMWFiMzQ2YTI5MmVmNjg1MGY5ZTFhMGQnCisgICAgICAgIGNscy5mb2RkZXJfdGV4dG1vZGVfbWQ1ID0gYidhOGIwNzg5NGUyY2EzZjJhNGMzMDk0MDY1ZmE2ZTBhNScKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIHN1cHBvcnQucm10cmVlKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBvdXQuc3RhcnRzd2l0aChiJ2Q0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIDxzdGRpbj4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIpCisKKyAgICBkZWYgdGVzdF9jaGVja3N1bV9mb2RkZXIoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQsIHNlbGYuZm9kZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LnN0YXJ0c3dpdGgoc2VsZi5mb2RkZXJfbWQ1KSkKKyAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5mb2RkZXIuc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJ0LmVuY29kZSgpLCBvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyKQorCisgICAgZGVmIHRlc3RfZGFzaF9sKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWwnLCBzZWxmLmZvZGRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmZvZGRlcl9tZDUsIG91dCkKKyAgICAgICAgcGFydHMgPSBzZWxmLmZvZGRlci5zcGxpdChvcy5wYXRoLnNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJ0c1stMV0uZW5jb2RlKCksIG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwYXJ0c1stMl0uZW5jb2RlKCksIG91dCkKKworICAgIGRlZiB0ZXN0X2Rhc2hfdChzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy10Jywgc2VsZi5mb2RkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuc3RhcnRzd2l0aChzZWxmLmZvZGRlcl90ZXh0bW9kZV9tZDUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuZm9kZGVyX21kNSwgb3V0KQorCisgICAgZGVmIHRlc3RfZGFzaF9zKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLXMnLCAnNTEyJywgc2VsZi5mb2RkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5mb2RkZXJfbWQ1LCBvdXQpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9maWxlcyhzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgc2VsZi5mb2RkZXIsIHNlbGYuZm9kZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBsaW5lcyA9IG91dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCpsaW5lcykKKworICAgIGRlZiB0ZXN0X3VzYWdlKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoc2VsZi5zY3JpcHQsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihlcnIsIGInJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BkZXBzLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BkZXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MWZhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcGRlcHMucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiVGVzdHMgZm9yIHRoZSBwZGVwcyBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKK2Zyb20gdGVzdC50ZXN0X3Rvb2xzIGltcG9ydCBzY3JpcHRzZGlyLCBza2lwX2lmX21pc3NpbmcsIGltcG9ydF90b29sCisKK3NraXBfaWZfbWlzc2luZygpCisKKworY2xhc3MgUGRlcHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wZGVwcyA9IGltcG9ydF90b29sKCdwZGVwcycpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ0OTI6IG1faW1wb3J0Lm1hdGNoKGxpbmUpIGNhbiBiZSBOb25lLgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRtcGRpcjoKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2ZvbycpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICd3JykgYXMgc3RyZWFtOgorICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSgiIyEvdGhpcy93aWxsL2ZhaWwiKQorICAgICAgICAgICAgc2VsZi5wZGVwcy5wcm9jZXNzKGZuLCB7fSkKKworICAgIGRlZiB0ZXN0X2ludmVyc2VfYXR0cmlidXRlX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNDQ5MjogdGhpcyB1c2VkIHRvIGZhaWwgd2l0aCBhbiBBdHRyaWJ1dGVFcnJvci4KKyAgICAgICAgc2VsZi5wZGVwcy5pbnZlcnNlKHsnYSc6IFtdfSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIExpYi90ZXN0L3Rlc3RfdG9vbHMucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CmluZGV4IGY5NzE1MTUuLjE0YTBhYTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BpbmRlbnQucHkKQEAgLTEsNDIgKzEsMTYgQEAKLSIiIlRlc3RzIGZvciBzY3JpcHRzIGluIHRoZSBUb29scyBkaXJlY3RvcnkuCi0KLVRoaXMgZmlsZSBjb250YWlucyByZWdyZXNzaW9uIHRlc3RzIGZvciBzb21lIG9mIHRoZSBzY3JpcHRzIGZvdW5kIGluIHRoZQotVG9vbHMgZGlyZWN0b3J5IG9mIGEgUHl0aG9uIGNoZWNrb3V0IG9yIHRhcmJhbGwsIHN1Y2ggYXMgcmVpbmRlbnQucHkuCi0iIiIKKyIiIlRlc3RzIGZvciB0aGUgcGluZGVudCBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCi1pbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5c2NvbmZpZwotaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGV4dHdyYXAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIHRlbXBfZGlyCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCi1pZiBub3Qgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgotICAgICMgWFhYIHNvbWUgaW5zdGFsbGVycyBkbyBjb250YWluIHRoZSB0b29scywgc2hvdWxkIHdlIGRldGVjdCB0aGF0Ci0gICAgIyBhbmQgcnVuIHRoZSB0ZXN0cyBpbiB0aGF0IGNhc2UgdG9vPwotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCd0ZXN0IGlycmVsZXZhbnQgZm9yIGFuIGluc3RhbGxlZCBQeXRob24nKQorZnJvbSB0ZXN0LnRlc3RfdG9vbHMgaW1wb3J0IHNjcmlwdHNkaXIsIHNraXBfaWZfbWlzc2luZwogCi1iYXNlcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdUb29scycpCi1zY3JpcHRzZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnc2NyaXB0cycpCi0KLQotY2xhc3MgUmVpbmRlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgc2NyaXB0ID0gb3MucGF0aC5qb2luKHNjcmlwdHNkaXIsICdyZWluZGVudC5weScpCi0KLSAgICBkZWYgdGVzdF9ub2FyZ3Moc2VsZik6Ci0gICAgICAgIGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQpCi0KLSAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQotICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZXJyLCBiJycpCitza2lwX2lmX21pc3NpbmcoKQogCiAKIGNsYXNzIFBpbmRlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC02MCw3ICszNCw3IEBACiAKICAgICBkZWYgdGVzdF9zZWxmdGVzdChzZWxmKToKICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZGlyZWN0b3J5OgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBkaXJlY3Rvcnk6CiAgICAgICAgICAgICBkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAnX3Rlc3QucHknKQogICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuc2NyaXB0KSBhcyBmOgogICAgICAgICAgICAgICAgIGNsb3NlZCA9IGYucmVhZCgpCkBAIC0zNjEsMTA0ICszMzUsNSBAQAogICAgICAgICBzZWxmLnBpbmRlbnRfdGVzdChjbGVhbiwgY2xvc2VkKQogCiAKLWNsYXNzIFRlc3RTdW5kcnlTY3JpcHRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIEF0IGxlYXN0IG1ha2Ugc3VyZSB0aGUgcmVzdCBkb24ndCBoYXZlIHN5bnRheCBlcnJvcnMuICBXaGVuIHRlc3RzIGFyZQotICAgICMgYWRkZWQgZm9yIGEgc2NyaXB0IGl0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgd2hpdGVsaXN0IGJlbG93LgotCi0gICAgIyBzY3JpcHRzIHRoYXQgaGF2ZSBpbmRlcGVuZGVudCB0ZXN0cy4KLSAgICB3aGl0ZWxpc3QgPSBbJ3JlaW5kZW50LnB5JywgJ3BkZXBzLnB5JywgJ2dwcm9mMmh0bWwnXQotICAgICMgc2NyaXB0cyB0aGF0IGNhbid0IGJlIGltcG9ydGVkIHdpdGhvdXQgcnVubmluZwotICAgIGJsYWNrbGlzdCA9IFsnbWFrZV9jdHlwZS5weSddCi0gICAgIyBzY3JpcHRzIHRoYXQgdXNlIHdpbmRvd3Mtb25seSBtb2R1bGVzCi0gICAgd2luZG93c19vbmx5ID0gWyd3aW5fYWRkMnBhdGgucHknXQotICAgICMgYmxhY2tsaXN0ZWQgZm9yIG90aGVyIHJlYXNvbnMKLSAgICBvdGhlciA9IFsnYW5hbHl6ZV9keHAucHknXQotCi0gICAgc2tpcGxpc3QgPSBibGFja2xpc3QgKyB3aGl0ZWxpc3QgKyB3aW5kb3dzX29ubHkgKyBvdGhlcgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBjbSA9IHN1cHBvcnQuRGlyc09uU3lzUGF0aChzY3JpcHRzZGlyKQotICAgICAgICBjbS5fX2VudGVyX18oKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoY20uX19leGl0X18pCi0KLSAgICBkZWYgdGVzdF9zdW5kcnkoc2VsZik6Ci0gICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHNjcmlwdHNkaXIpOgotICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoJy5weScpIGFuZCBmbiBub3QgaW4gc2VsZi5za2lwbGlzdDoKLSAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKGZuWzotM10pCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiLCAiV2luZG93cy1vbmx5IHRlc3QiKQotICAgIGRlZiB0ZXN0X3N1bmRyeV93aW5kb3dzKHNlbGYpOgotICAgICAgICBmb3IgZm4gaW4gc2VsZi53aW5kb3dzX29ubHk6Ci0gICAgICAgICAgICBfX2ltcG9ydF9fKGZuWzotM10pCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBzdXBwb3J0LnRocmVhZGluZywgInRlc3QgcmVxdWlyZXMgX3RocmVhZCBtb2R1bGUiKQotICAgIGRlZiB0ZXN0X2FuYWx5emVfZHhwX2ltcG9ydChzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXRkeHAnKToKLSAgICAgICAgICAgIGltcG9ydCBhbmFseXplX2R4cAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydCBhbmFseXplX2R4cAotCi0KLWNsYXNzIFBkZXBzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6Ci0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0c2RpciwgJ3BkZXBzLnB5JykKLSAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdwZGVwcycsIHBhdGgpCi0gICAgICAgIHNlbGYucGRlcHMgPSBsb2FkZXIubG9hZF9tb2R1bGUoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6Ci0gICAgICAgIGlmICdwZGVwcycgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3BkZXBzJ10KLQotICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXJyb3JzKHNlbGYpOgotICAgICAgICAjIElzc3VlICMxNDQ5MjogbV9pbXBvcnQubWF0Y2gobGluZSkgY2FuIGJlIE5vbmUuCi0gICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlyOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZm9vJykKLSAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBzdHJlYW06Ci0gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKCIjIS90aGlzL3dpbGwvZmFpbCIpCi0gICAgICAgICAgICBzZWxmLnBkZXBzLnByb2Nlc3MoZm4sIHt9KQotCi0gICAgZGVmIHRlc3RfaW52ZXJzZV9hdHRyaWJ1dGVfZXJyb3Ioc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NDkyOiB0aGlzIHVzZWQgdG8gZmFpbCB3aXRoIGFuIEF0dHJpYnV0ZUVycm9yLgotICAgICAgICBzZWxmLnBkZXBzLmludmVyc2UoeydhJzogW119KQotCi0KLWNsYXNzIEdwcm9mMmh0bWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0c2RpciwgJ2dwcm9mMmh0bWwucHknKQotICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ2dwcm9mMmh0bWwnLCBwYXRoKQotICAgICAgICBzZWxmLmdwcm9mID0gbG9hZGVyLmxvYWRfbW9kdWxlKCkKLSAgICAgICAgb2xkYXJndiA9IHN5cy5hcmd2Ci0gICAgICAgIGRlZiBmaXh1cCgpOgotICAgICAgICAgICAgc3lzLmFyZ3YgPSBvbGRhcmd2Ci0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChmaXh1cCkKLSAgICAgICAgc3lzLmFyZ3YgPSBbXQotCi0gICAgZGVmIHRlc3RfZ3Byb2Yoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NTA4OiB0aGlzIHVzZWQgdG8gZmFpbCB3aXRoIGFuIE5hbWVFcnJvci4KLSAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLmdwcm9mLCAnd2ViYnJvd3NlcicpIGFzIHdtb2NrLCBcCi0gICAgICAgICAgICAgICAgdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlyOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYWJjJykKLSAgICAgICAgICAgIG9wZW4oZm4sICd3JykuY2xvc2UoKQotICAgICAgICAgICAgc3lzLmFyZ3YgPSBbJ2dwcm9mMmh0bWwnLCBmbl0KLSAgICAgICAgICAgIHNlbGYuZ3Byb2YubWFpbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9jay5vcGVuLmNhbGxlZCkKLQotCi0jIFJ1biB0aGUgdGVzdHMgaW4gVG9vbHMvcGFyc2VyL3Rlc3RfdW5wYXJzZS5weQotd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgob3MucGF0aC5qb2luKGJhc2VwYXRoLCAncGFyc2VyJykpOgotICAgIGZyb20gdGVzdF91bnBhcnNlIGltcG9ydCBVbnBhcnNlVGVzdENhc2UKLSAgICBmcm9tIHRlc3RfdW5wYXJzZSBpbXBvcnQgRGlyZWN0b3J5VGVzdENhc2UKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKltvYmogZm9yIG9iaiBpbiBnbG9iYWxzKCkudmFsdWVzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSldKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcmVpbmRlbnQucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcmVpbmRlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZWJmNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9yZWluZGVudC5weQpAQCAtMCwwICsxLDI4IEBACisiIiJUZXN0cyBmb3Igc2NyaXB0cyBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCitUaGlzIGZpbGUgY29udGFpbnMgcmVncmVzc2lvbiB0ZXN0cyBmb3Igc29tZSBvZiB0aGUgc2NyaXB0cyBmb3VuZCBpbiB0aGUKK1Rvb2xzIGRpcmVjdG9yeSBvZiBhIFB5dGhvbiBjaGVja291dCBvciB0YXJiYWxsLCBzdWNoIGFzIHJlaW5kZW50LnB5LgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2Rpciwgc2tpcF9pZl9taXNzaW5nCisKK3NraXBfaWZfbWlzc2luZygpCisKK2NsYXNzIFJlaW5kZW50VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHNjcmlwdCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAncmVpbmRlbnQucHknKQorCisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0KQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGVyciwgYicnKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3Rfc3VuZHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3N1bmRyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWU1NDFiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3N1bmRyeS5weQpAQCAtMCwwICsxLDUzIEBACisiIiJUZXN0cyBmb3Igc2NyaXB0cyBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCitUaGlzIGZpbGUgY29udGFpbnMgZXh0cmVtZWx5IGJhc2ljIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBzY3JpcHRzIGZvdW5kIGluCit0aGUgVG9vbHMgZGlyZWN0b3J5IG9mIGEgUHl0aG9uIGNoZWNrb3V0IG9yIHRhcmJhbGwgd2hpY2ggZG9uJ3QgaGF2ZSBzZXBhcmF0ZQordGVzdHMgb2YgdGhlaXIgb3duLCBzdWNoIGFzIGgycHkucHkuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2RpciwgaW1wb3J0X3Rvb2wsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBUZXN0U3VuZHJ5U2NyaXB0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBBdCBsZWFzdCBtYWtlIHN1cmUgdGhlIHJlc3QgZG9uJ3QgaGF2ZSBzeW50YXggZXJyb3JzLiAgV2hlbiB0ZXN0cyBhcmUKKyAgICAjIGFkZGVkIGZvciBhIHNjcmlwdCBpdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHdoaXRlbGlzdCBiZWxvdy4KKworICAgICMgc2NyaXB0cyB0aGF0IGhhdmUgaW5kZXBlbmRlbnQgdGVzdHMuCisgICAgd2hpdGVsaXN0ID0gWydyZWluZGVudCcsICdwZGVwcycsICdncHJvZjJodG1sJywgJ21kNXN1bSddCisgICAgIyBzY3JpcHRzIHRoYXQgY2FuJ3QgYmUgaW1wb3J0ZWQgd2l0aG91dCBydW5uaW5nCisgICAgYmxhY2tsaXN0ID0gWydtYWtlX2N0eXBlJ10KKyAgICAjIHNjcmlwdHMgdGhhdCB1c2Ugd2luZG93cy1vbmx5IG1vZHVsZXMKKyAgICB3aW5kb3dzX29ubHkgPSBbJ3dpbl9hZGQycGF0aCddCisgICAgIyBibGFja2xpc3RlZCBmb3Igb3RoZXIgcmVhc29ucworICAgIG90aGVyID0gWydhbmFseXplX2R4cCddCisKKyAgICBza2lwbGlzdCA9IGJsYWNrbGlzdCArIHdoaXRlbGlzdCArIHdpbmRvd3Nfb25seSArIG90aGVyCisKKyAgICBkZWYgdGVzdF9zdW5kcnkoc2VsZik6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHNjcmlwdHNkaXIpOgorICAgICAgICAgICAgbmFtZSA9IGZuWzotM10KKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHknKSBhbmQgbmFtZSBub3QgaW4gc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgICAgICBpbXBvcnRfdG9vbChuYW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gIT0gIndpbjMyIiwgIldpbmRvd3Mtb25seSB0ZXN0IikKKyAgICBkZWYgdGVzdF9zdW5kcnlfd2luZG93cyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi53aW5kb3dzX29ubHk6CisgICAgICAgICAgICBpbXBvcnRfdG9vbChuYW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgc3VwcG9ydC50aHJlYWRpbmcsICJ0ZXN0IHJlcXVpcmVzIF90aHJlYWQgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9hbmFseXplX2R4cF9pbXBvcnQoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0ZHhwJyk6CisgICAgICAgICAgICBpbXBvcnRfdG9vbCgnYW5hbHl6ZV9keHAnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIGltcG9ydF90b29sKCdhbmFseXplX2R4cCcpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3BhcnNlci90ZXN0X3VucGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfdW5wYXJzZS5weQpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBUb29scy9wYXJzZXIvdGVzdF91bnBhcnNlLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfdW5wYXJzZS5weQppbmRleCBiZTg0NDAwLi45NzZhNmM1IDEwMDY0NAotLS0gYS9Ub29scy9wYXJzZXIvdGVzdF91bnBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF91bnBhcnNlLnB5CkBAIC0xLDEyICsxLDIyIEBACisiIiJUZXN0cyBmb3IgdGhlIHVucGFyc2UucHkgc2NyaXB0IGluIHRoZSBUb29scy9wYXJzZXIgZGlyZWN0b3J5LiIiIgorCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdG9rZW5pemUKLWltcG9ydCB1bnBhcnNlCiBpbXBvcnQgYXN0CiAKK2Zyb20gdGVzdC50ZXN0X3Rvb2xzIGltcG9ydCBiYXNlcGF0aCwgdG9vbHNkaXIsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitwYXJzZXJfcGF0aCA9IG9zLnBhdGguam9pbih0b29sc2RpciwgInBhcnNlciIpCisKK3dpdGggdGVzdC5zdXBwb3J0LkRpcnNPblN5c1BhdGgocGFyc2VyX3BhdGgpOgorICAgIGltcG9ydCB1bnBhcnNlCisKIGRlZiByZWFkX3B5ZmlsZShmaWxlbmFtZSk6CiAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHRoZSBjb250ZW50cyBvZiBhIFB5dGhvbiBzb3VyY2UgZmlsZSAoYXMgYQogICAgIHN0cmluZyksIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZpbGUgZW5jb2RpbmcuIiIiCkBAIC0yNDksMTEgKzI1OSwxMCBAQAogCiAgICAgZGVmIHRlc3RfZmlsZXMoc2VsZik6CiAgICAgICAgICMgZ2V0IG5hbWVzIG9mIGZpbGVzIHRvIHRlc3QKLSAgICAgICAgZGlzdF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGFyZGlyLCBvcy5wYXJkaXIpCiAKICAgICAgICAgbmFtZXMgPSBbXQogICAgICAgICBmb3IgZCBpbiBzZWxmLnRlc3RfZGlyZWN0b3JpZXM6Ci0gICAgICAgICAgICB0ZXN0X2RpciA9IG9zLnBhdGguam9pbihkaXN0X2RpciwgZCkKKyAgICAgICAgICAgIHRlc3RfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCBkKQogICAgICAgICAgICAgZm9yIG4gaW4gb3MubGlzdGRpcih0ZXN0X2Rpcik6CiAgICAgICAgICAgICAgICAgaWYgbi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBuLnN0YXJ0c3dpdGgoJ2JhZCcpOgogICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQob3MucGF0aC5qb2luKHRlc3RfZGlyLCBuKSkKQEAgLTI2OSw4ICsyNzgsNSBAQAogICAgICAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoc291cmNlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KFVucGFyc2VUZXN0Q2FzZSwgRGlyZWN0b3J5VGVzdENhc2UpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKaW5kZXggYzM4YzY1Yi4uYzI5NTU2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKQEAgLTE3MiwzMiArMTcyLDc2IEBACiAKIGNsYXNzIFRyYWNlYmFja0Zvcm1hdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBzb21lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2JsYWgnKQorCiAgICAgQGNweXRob25fb25seQotICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgZGVmIGNoZWNrX3RyYWNlYmFja19mb3JtYXQoc2VsZiwgY2xlYW51cF9mdW5jPU5vbmUpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgdHJhY2ViYWNrX3ByaW50CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdibGFoJykKKyAgICAgICAgICAgIHNlbGYuc29tZV9leGNlcHRpb24oKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGNsZWFudXBfZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIENsZWFyIHRoZSBpbm5lciBmcmFtZXMsIG5vdCB0aGlzIG9uZQorICAgICAgICAgICAgICAgIGNsZWFudXBfZnVuYyh0Yi50Yl9uZXh0KQogICAgICAgICAgICAgdHJhY2ViYWNrX2ZtdCA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF90Yih0YikpCiAgICAgICAgICAgICBmaWxlXyA9IFN0cmluZ0lPKCkKICAgICAgICAgICAgIHRyYWNlYmFja19wcmludCh0YiwgZmlsZV8pCiAgICAgICAgICAgICBweXRob25fZm10ICA9IGZpbGVfLmdldHZhbHVlKCkKKyAgICAgICAgICAgICMgQ2FsbCBhbGwgX3RiIGFuZCBfZXhjIGZ1bmN0aW9ucworICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHRic3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YikKKyAgICAgICAgICAgIHRiZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YiwgZmlsZT10YmZpbGUpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXhjc3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgZXhjZm10ID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgZXhjZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1leGNmaWxlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoInVuYWJsZSB0byBjcmVhdGUgdGVzdCB0cmFjZWJhY2sgc3RyaW5nIikKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IFB5dGhvbiBhbmQgdGhlIHRyYWNlYmFjayBtb2R1bGUgZm9ybWF0IHRoZSBzYW1lIHRoaW5nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrX2ZtdCwgcHl0aG9uX2ZtdCkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfdGIgZnVuYyBvdXRwdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YnN0ZGVyci5nZXR2YWx1ZSgpLCB0YmZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfZXhjIGZ1bmMgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjc3RkZXJyLmdldHZhbHVlKCksIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNmbXQsIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgaXMgcHJvcGVybHkgaW5kZW50ZWQuCiAgICAgICAgIHRiX2xpbmVzID0gcHl0aG9uX2ZtdC5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGJfbGluZXMpLCAzKQotICAgICAgICBiYW5uZXIsIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgNSkKKyAgICAgICAgYmFubmVyID0gdGJfbGluZXNbMF0KKyAgICAgICAgbG9jYXRpb24sIHNvdXJjZV9saW5lID0gdGJfbGluZXNbLTI6XQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFubmVyLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jYXRpb24uc3RhcnRzd2l0aCgnICBGaWxlJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VyY2VfbGluZS5zdGFydHN3aXRoKCcgICAgcmFpc2UnKSkKIAorICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdHJhY2ViYWNrX2Zvcm1hdCgpCisKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0X3dpdGhfY2xlYXJlZF9mcmFtZXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCB0cmFjZWJhY2sgZm9ybWF0dGluZyBhbHNvIHdvcmtzIHdpdGggYSBjbGVhcigpZWQgZnJhbWUKKyAgICAgICAgZGVmIGNsZWFudXBfdGIodGIpOgorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmNoZWNrX3RyYWNlYmFja19mb3JtYXQoY2xlYW51cF90YikKKworICAgIGRlZiB0ZXN0X3N0YWNrX2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgX3N0YWNrIGZ1bmN0aW9ucy4gTm90ZSB3ZSBoYXZlIHRvIHVzZSBfZ2V0ZnJhbWUoMSkgdG8KKyAgICAgICAgIyBjb21wYXJlIHRoZW0gd2l0aG91dCB0aGlzIGZyYW1lIGFwcGVhcmluZyBpbiB0aGUgb3V0cHV0CisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdHN0ZGVycjoKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpKQorICAgICAgICBzdGZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpLCBmaWxlPXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHN0ZGVyci5nZXR2YWx1ZSgpLCBzdGZpbGUuZ2V0dmFsdWUoKSkKKworICAgICAgICBzdGZtdCA9IHRyYWNlYmFjay5mb3JtYXRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0c3RkZXJyLmdldHZhbHVlKCksICIiLmpvaW4oc3RmbXQpKQorCiAKIGNhdXNlX21lc3NhZ2UgPSAoCiAgICAgIlxuVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSAiCkBAIC0zNzAsNiArNDE0LDM2IEBACiAgICAgICAgIHJldHVybiBzLmdldHZhbHVlKCkKIAogCitjbGFzcyBNaXNjVHJhY2ViYWNrQ2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMKKyAgICAjIENoZWNrIG5vbi1wcmludGluZyBmdW5jdGlvbnMgaW4gdHJhY2ViYWNrIG1vZHVsZQorICAgICMKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG1pZGRsZSgpCisgICAgICAgIGRlZiBtaWRkbGUoKToKKyAgICAgICAgICAgIGlubmVyKCkKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBpID0gMQorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0ZXIoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKworICAgICAgICAjIEluaXRpYWwgYXNzZXJ0aW9uOiB0aGVyZSdzIG9uZSBsb2NhbCBpbiB0aGUgaW5uZXIgZnJhbWUuCisgICAgICAgIGlubmVyX2ZyYW1lID0gdGIudGJfbmV4dC50Yl9uZXh0LnRiX25leHQudGJfZnJhbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaW5uZXJfZnJhbWUuZl9sb2NhbHMpLCAxKQorCisgICAgICAgICMgQ2xlYXIgdHJhY2ViYWNrIGZyYW1lcworICAgICAgICB0cmFjZWJhY2suY2xlYXJfZnJhbWVzKHRiKQorCisgICAgICAgICMgTG9jYWwgdmFyaWFibGUgZGljdCBzaG91bGQgbm93IGJlIGVtcHR5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbm5lcl9mcmFtZS5mX2xvY2FscyksIDApCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChfX25hbWVfXykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90cmFjZW1hbGxvYy5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiMGRjMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkKQEAgLTAsMCArMSw4MjYgQEAKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZW1hbGxvYworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IHBhdGNoCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCitFTVBUWV9TVFJJTkdfU0laRSA9IHN5cy5nZXRzaXplb2YoYicnKQorCitkZWYgZ2V0X2ZyYW1lcyhuZnJhbWUsIGxpbmVub19kZWx0YSk6CisgICAgZnJhbWVzID0gW10KKyAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkKKyAgICBmb3IgaW5kZXggaW4gcmFuZ2UobmZyYW1lKToKKyAgICAgICAgY29kZSA9IGZyYW1lLmZfY29kZQorICAgICAgICBsaW5lbm8gPSBmcmFtZS5mX2xpbmVubyArIGxpbmVub19kZWx0YQorICAgICAgICBmcmFtZXMuYXBwZW5kKChjb2RlLmNvX2ZpbGVuYW1lLCBsaW5lbm8pKQorICAgICAgICBsaW5lbm9fZGVsdGEgPSAwCisgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgIGlmIGZyYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiB0dXBsZShmcmFtZXMpCisKK2RlZiBhbGxvY2F0ZV9ieXRlcyhzaXplKToKKyAgICBuZnJhbWUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkKKyAgICBieXRlc19sZW4gPSAoc2l6ZSAtIEVNUFRZX1NUUklOR19TSVpFKQorICAgIGZyYW1lcyA9IGdldF9mcmFtZXMobmZyYW1lLCAxKQorICAgIGRhdGEgPSBiJ3gnICogYnl0ZXNfbGVuCisgICAgcmV0dXJuIGRhdGEsIHRyYWNlbWFsbG9jLlRyYWNlYmFjayhmcmFtZXMpCisKK2RlZiBjcmVhdGVfc25hcHNob3RzKCk6CisgICAgdHJhY2ViYWNrX2xpbWl0ID0gMgorCisgICAgcmF3X3RyYWNlcyA9IFsKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICg2NiwgKCgnYi5weScsIDEpLCkpLAorCisgICAgICAgICg3LCAoKCc8dW5rbm93bj4nLCAwKSwpKSwKKyAgICBdCisgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdChyYXdfdHJhY2VzLCB0cmFjZWJhY2tfbGltaXQpCisKKyAgICByYXdfdHJhY2VzMiA9IFsKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoNTAwMCwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICg0MDAsICgoJ2MucHknLCA1NzgpLCkpLAorICAgIF0KKyAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdChyYXdfdHJhY2VzMiwgdHJhY2ViYWNrX2xpbWl0KQorCisgICAgcmV0dXJuIChzbmFwc2hvdCwgc25hcHNob3QyKQorCitkZWYgZnJhbWUoZmlsZW5hbWUsIGxpbmVubyk6CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jLl9GcmFtZSgoZmlsZW5hbWUsIGxpbmVubykpCisKK2RlZiB0cmFjZWJhY2soKmZyYW1lcyk6CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jLlRyYWNlYmFjayhmcmFtZXMpCisKK2RlZiB0cmFjZWJhY2tfbGluZW5vKGZpbGVuYW1lLCBsaW5lbm8pOgorICAgIHJldHVybiB0cmFjZWJhY2soKGZpbGVuYW1lLCBsaW5lbm8pKQorCitkZWYgdHJhY2ViYWNrX2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICByZXR1cm4gdHJhY2ViYWNrX2xpbmVubyhmaWxlbmFtZSwgMCkKKworCitjbGFzcyBUZXN0VHJhY2VtYWxsb2NFbmFibGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRyYWNlbWFsbG9jIG11c3QgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIHRlc3QiKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeShzZWxmKToKKyAgICAgICAgZGF0YSA9IFthbGxvY2F0ZV9ieXRlcygxMjMpIGZvciBjb3VudCBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZW1hbGxvY19tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplLCAwKQorCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHNpemUyID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUyLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplMiwgc2l6ZSkKKworICAgIGRlZiB0ZXN0X2dldF9vYmplY3RfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICBvYmpfc2l6ZSA9IDEyMzQ1CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrLCBvYmpfdHJhY2ViYWNrKQorCisgICAgZGVmIHRlc3Rfc2V0X3RyYWNlYmFja19saW1pdChzZWxmKToKKyAgICAgICAgb2JqX3NpemUgPSAxMAorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0cmFjZW1hbGxvYy5zdGFydCwgLTEpCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDEwKQorICAgICAgICBvYmoyLCBvYmoyX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZWJhY2spLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9iajJfdHJhY2ViYWNrKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgxKQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZWJhY2spLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqX3RyYWNlYmFjaykKKworICAgIGRlZiBmaW5kX3RyYWNlKHNlbGYsIHRyYWNlcywgdHJhY2ViYWNrKToKKyAgICAgICAgZm9yIHRyYWNlIGluIHRyYWNlczoKKyAgICAgICAgICAgIGlmIHRyYWNlWzFdID09IHRyYWNlYmFjay5fZnJhbWVzOgorICAgICAgICAgICAgICAgIHJldHVybiB0cmFjZQorCisgICAgICAgIHNlbGYuZmFpbCgidHJhY2Ugbm90IGZvdW5kIikKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZXMoc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisKKyAgICAgICAgdHJhY2VzID0gdHJhY2VtYWxsb2MuX2dldF90cmFjZXMoKQorICAgICAgICB0cmFjZSA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9ial90cmFjZWJhY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYWNlLCB0dXBsZSkKKyAgICAgICAgc2l6ZSwgdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBvYmpfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9ial90cmFjZWJhY2suX2ZyYW1lcykKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpLCBbXSkKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZXNfaW50ZXJuX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgIyBkdW1teSB3cmFwcGVycyB0byBnZXQgbW9yZSB1c2VmdWwgYW5kIGlkZW50aWNhbCBmcmFtZXMgaW4gdGhlIHRyYWNlYmFjaworICAgICAgICBkZWYgYWxsb2NhdGVfYnl0ZXMyKHNpemUpOgorICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlX2J5dGVzKHNpemUpCisgICAgICAgIGRlZiBhbGxvY2F0ZV9ieXRlczMoc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVfYnl0ZXMyKHNpemUpCisgICAgICAgIGRlZiBhbGxvY2F0ZV9ieXRlczQoc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVfYnl0ZXMzKHNpemUpCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0d28gaWRlbnRpY2FsIHRyYWNlYmFja3MgYXJlIG5vdCBkdXBsaWNhdGVkCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCg0KQorICAgICAgICBvYmpfc2l6ZSA9IDEyMworICAgICAgICBvYmoxLCBvYmoxX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzNChvYmpfc2l6ZSkKKyAgICAgICAgb2JqMiwgb2JqMl90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlczQob2JqX3NpemUpCisKKyAgICAgICAgdHJhY2VzID0gdHJhY2VtYWxsb2MuX2dldF90cmFjZXMoKQorCisgICAgICAgIHRyYWNlMSA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9iajFfdHJhY2ViYWNrKQorICAgICAgICB0cmFjZTIgPSBzZWxmLmZpbmRfdHJhY2UodHJhY2VzLCBvYmoyX3RyYWNlYmFjaykKKyAgICAgICAgc2l6ZTEsIHRyYWNlYmFjazEgPSB0cmFjZTEKKyAgICAgICAgc2l6ZTIsIHRyYWNlYmFjazIgPSB0cmFjZTIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2syLCB0cmFjZWJhY2sxKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYWNlYmFjazIsIHRyYWNlYmFjazEpCisKKyAgICBkZWYgdGVzdF9nZXRfdHJhY2VkX21lbW9yeShzZWxmKToKKyAgICAgICAgIyBQeXRob24gYWxsb2NhdGVzIHNvbWUgaW50ZXJuYWxzIG9iamVjdHMsIHNvIHRoZSB0ZXN0IG11c3QgdG9sZXJhdGUKKyAgICAgICAgIyBhIHNtYWxsIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZXhwZWN0ZWQgc2l6ZSBhbmQgdGhlIHJlYWwgdXNhZ2UKKyAgICAgICAgbWF4X2Vycm9yID0gMjA0OAorCisgICAgICAgICMgYWxsb2NhdGUgb25lIG9iamVjdAorICAgICAgICBvYmpfc2l6ZSA9IDEwMjQgKiAxMDI0CisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICBzaXplLCBwZWFrX3NpemUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUsIG9ial9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChwZWFrX3NpemUsIHNpemUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2l6ZSAtIG9ial9zaXplLCBtYXhfZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHBlYWtfc2l6ZSAtIHNpemUsIG1heF9lcnJvcikKKworICAgICAgICAjIGRlc3Ryb3kgdGhlIG9iamVjdAorICAgICAgICBvYmogPSBOb25lCisgICAgICAgIHNpemUyLCBwZWFrX3NpemUyID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydExlc3Moc2l6ZTIsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUgLSBzaXplMiwgb2JqX3NpemUgLSBtYXhfZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBlYWtfc2l6ZTIsIHBlYWtfc2l6ZSkKKworICAgICAgICAjIGNsZWFyX3RyYWNlcygpIG11c3QgcmVzZXQgdHJhY2VkIG1lbW9yeSBjb3VudGVycworICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCksICgwLCAwKSkKKworICAgICAgICAjIGFsbG9jYXRlIGFub3RoZXIgb2JqZWN0CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICBzaXplLCBwZWFrX3NpemUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUsIG9ial9zaXplKQorCisgICAgICAgICMgc3RvcCgpIGFsc28gcmVzZXRzIHRyYWNlZCBtZW1vcnkgY291bnRlcnMKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKSwgKDAsIDApKQorCisgICAgZGVmIHRlc3RfY2xlYXJfdHJhY2VzKHNlbGYpOgorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcygxMjMpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHJhY2ViYWNrKQorCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHRyYWNlYmFjazIgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYWNlYmFjazIpCisKKyAgICBkZWYgdGVzdF9pc190cmFjaW5nKHNlbGYpOgorICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3Qoc2VsZik6CisgICAgICAgIG9iaiwgc291cmNlID0gYWxsb2NhdGVfYnl0ZXMoMTIzKQorCisgICAgICAgICMgdGFrZSBhIHNuYXBzaG90CisgICAgICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisKKyAgICAgICAgIyB3cml0ZSBvbiBkaXNrCisgICAgICAgIHNuYXBzaG90LmR1bXAoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgIyBsb2FkIGZyb20gZGlzaworICAgICAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdC5sb2FkKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90Mi50cmFjZXMsIHNuYXBzaG90LnRyYWNlcykKKworICAgICAgICAjIHRyYWNlbWFsbG9jIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgdG8gdGFrZSBhIHNuYXBzaG90CisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgY206CisgICAgICAgICAgICB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsb2NhdGlvbnMgdG8gdGFrZSBhIHNuYXBzaG90IikKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X3NhdmVfYXR0cihzZWxmKToKKyAgICAgICAgIyB0YWtlIGEgc25hcHNob3Qgd2l0aCBhIG5ldyBhdHRyaWJ1dGUKKyAgICAgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAgICAgc25hcHNob3QudGVzdF9hdHRyID0gIm5ldyIKKyAgICAgICAgc25hcHNob3QuZHVtcChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKworICAgICAgICAjIGxvYWQoKSBzaG91bGQgcmVjcmVhdGVzIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MuU25hcHNob3QubG9hZChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDIudGVzdF9hdHRyLCAibmV3IikKKworICAgIGRlZiBmb3JrX2NoaWxkKHNlbGYpOgorICAgICAgICBpZiBub3QgdHJhY2VtYWxsb2MuaXNfdHJhY2luZygpOgorICAgICAgICAgICAgcmV0dXJuIDIKKworICAgICAgICBvYmpfc2l6ZSA9IDEyMzQ1CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIGlmIHRyYWNlYmFjayBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDMKKworICAgICAgICAjIGV2ZXJ5dGhpbmcgaXMgZmluZQorICAgICAgICByZXR1cm4gMAorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgJ25lZWQgb3MuZm9yaygpJykKKyAgICBkZWYgdGVzdF9mb3JrKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgdHJhY2VtYWxsb2MgaXMgc3RpbGwgd29ya2luZyBhZnRlciBmb3JrCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgIyBjaGlsZAorICAgICAgICAgICAgZXhpdGNvZGUgPSAxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhpdGNvZGUgPSBzZWxmLmZvcmtfY2hpbGQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdChleGl0Y29kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBpZDIsIHN0YXR1cyA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLldJRkVYSVRFRChzdGF0dXMpKQorICAgICAgICAgICAgZXhpdGNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdGF0dXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRjb2RlLCAwKQorCisKK2NsYXNzIFRlc3RTbmFwc2hvdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWF4RGlmZiA9IDQwMDAKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zbmFwc2hvdChzZWxmKToKKyAgICAgICAgcmF3X3RyYWNlcyA9IFsoNSwgKCgnYS5weScsIDIpLCkpXQorCisgICAgICAgIHdpdGggY29udGV4dGxpYi5FeGl0U3RhY2soKSBhcyBzdGFjazoKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocGF0Y2gub2JqZWN0KHRyYWNlbWFsbG9jLCAnaXNfdHJhY2luZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9VHJ1ZSkpCisgICAgICAgICAgICBzdGFjay5lbnRlcl9jb250ZXh0KHBhdGNoLm9iamVjdCh0cmFjZW1hbGxvYywgJ2dldF90cmFjZWJhY2tfbGltaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPTUpKQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChwYXRjaC5vYmplY3QodHJhY2VtYWxsb2MsICdfZ2V0X3RyYWNlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9cmF3X3RyYWNlcykpCisKKyAgICAgICAgICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90LnRyYWNlYmFja19saW1pdCwgNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNuYXBzaG90LnRyYWNlcyksIDEpCisgICAgICAgICAgICB0cmFjZSA9IHNuYXBzaG90LnRyYWNlc1swXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZS5zaXplLCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHJhY2UudHJhY2ViYWNrKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UudHJhY2ViYWNrWzBdLmZpbGVuYW1lLCAnYS5weScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLnRyYWNlYmFja1swXS5saW5lbm8sIDIpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfdHJhY2VzKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIGZpbHRlcjEgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJiLnB5IikKKyAgICAgICAgZmlsdGVyMiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYS5weSIsIDIpCisgICAgICAgIGZpbHRlcjMgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImEucHkiLCA1KQorCisgICAgICAgIG9yaWdpbmFsX3RyYWNlcyA9IGxpc3Qoc25hcHNob3QudHJhY2VzLl90cmFjZXMpCisKKyAgICAgICAgIyBleGNsdWRlIGIucHkKKyAgICAgICAgc25hcHNob3QzID0gc25hcHNob3QuZmlsdGVyX3RyYWNlcygoZmlsdGVyMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90My50cmFjZXMuX3RyYWNlcywgWworICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICg3LCAoKCc8dW5rbm93bj4nLCAwKSwpKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIGZpbHRlcl90cmFjZXMoKSBtdXN0IG5vdCB0b3VjaCB0aGUgb3JpZ2luYWwgc25hcHNob3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdC50cmFjZXMuX3RyYWNlcywgb3JpZ2luYWxfdHJhY2VzKQorCisgICAgICAgICMgb25seSBpbmNsdWRlIHR3byBsaW5lcyBvZiBhLnB5CisgICAgICAgIHNuYXBzaG90NCA9IHNuYXBzaG90My5maWx0ZXJfdHJhY2VzKChmaWx0ZXIyLCBmaWx0ZXIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDQudHJhY2VzLl90cmFjZXMsIFsKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgyLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBObyBmaWx0ZXI6IGp1c3QgZHVwbGljYXRlIHRoZSBzbmFwc2hvdAorICAgICAgICBzbmFwc2hvdDUgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHNuYXBzaG90NSwgc25hcHNob3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc25hcHNob3Q1LnRyYWNlcywgc25hcHNob3QudHJhY2VzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90NS50cmFjZXMsIHNuYXBzaG90LnRyYWNlcykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNuYXBzaG90LmZpbHRlcl90cmFjZXMsIGZpbHRlcjEpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9ncm91cF9ieV9saW5lKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHRiXzAgPSB0cmFjZWJhY2tfbGluZW5vKCc8dW5rbm93bj4nLCAwKQorICAgICAgICB0Yl9hXzIgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgMikKKyAgICAgICAgdGJfYV81ID0gdHJhY2ViYWNrX2xpbmVubygnYS5weScsIDUpCisgICAgICAgIHRiX2JfMSA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCAxKQorICAgICAgICB0Yl9jXzU3OCA9IHRyYWNlYmFja19saW5lbm8oJ2MucHknLCA1NzgpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSBhbmQgbGluZQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfMSwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfNSwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSBhbmQgbGluZSAoMikKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMyLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCA1MDAyLCAyKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9jXzU3OCwgNDAwLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzIsIDMwLCAzKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIGRpZmYgcGVyIGZpbGUgYW5kIGxpbmUKKyAgICAgICAgc3RhdGlzdGljcyA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90LCAnbGluZW5vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2FfNSwgNTAwMiwgNTAwMCwgMiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2NfNTc4LCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2JfMSwgMCwgLTY2LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiXzAsIDAsIC03LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2FfMiwgMzAsIDAsIDMsIDApLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfZmlsZShzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0Yl8wID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCc8dW5rbm93bj4nKQorICAgICAgICB0Yl9hID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdhLnB5JykKKyAgICAgICAgdGJfYiA9IHRyYWNlYmFja19maWxlbmFtZSgnYi5weScpCisgICAgICAgIHRiX2MgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2MucHknKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUKKyAgICAgICAgc3RhdHMxID0gc25hcHNob3Quc3RhdGlzdGljcygnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2IsIDY2LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hLCAzMiwgNCksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSAoMikKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czIsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hLCA1MDMyLCA1KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9jLCA0MDAsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZQorICAgICAgICBkaWZmID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9hLCA1MDMyLCA1MDAwLCA1LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYywgNDAwLCA0MDAsIDEsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9iLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfMCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUKKyAgICAgICAgdGIxID0gdHJhY2ViYWNrKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkKKyAgICAgICAgdGIyID0gdHJhY2ViYWNrKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkKKyAgICAgICAgdGIzID0gdHJhY2ViYWNrKCgnYi5weScsIDEpKQorICAgICAgICB0YjQgPSB0cmFjZWJhY2soKCc8dW5rbm93bj4nLCAwKSkKKyAgICAgICAgc3RhdHMxID0gc25hcHNob3Quc3RhdGlzdGljcygndHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czEsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjMsIDY2LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjEsIDMwLCAzKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjQsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMiwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSAoMikKKyAgICAgICAgdGI1ID0gdHJhY2ViYWNrKCgnYy5weScsIDU3OCkpCisgICAgICAgIHN0YXRzMiA9IHNuYXBzaG90Mi5zdGF0aXN0aWNzKCd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMiwgNTAwMiwgMiksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGI1LCA0MDAsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMSwgMzAsIDMpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZQorICAgICAgICBkaWZmID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIyLCA1MDAyLCA1MDAwLCAyLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGI1LCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiMywgMCwgLTY2LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiNCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIxLCAzMCwgMCwgMywgMCksCisgICAgICAgIF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3Quc3RhdGlzdGljcywgJ3RyYWNlYmFjaycsIGN1bXVsYXRpdmU9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X2N1bXVsYXRpdmUoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdGJfMCA9IHRyYWNlYmFja19maWxlbmFtZSgnPHVua25vd24+JykKKyAgICAgICAgdGJfYSA9IHRyYWNlYmFja19maWxlbmFtZSgnYS5weScpCisgICAgICAgIHRiX2IgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2IucHknKQorICAgICAgICB0Yl9hXzIgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgMikKKyAgICAgICAgdGJfYV81ID0gdHJhY2ViYWNrX2xpbmVubygnYS5weScsIDUpCisgICAgICAgIHRiX2JfMSA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCAxKQorICAgICAgICB0Yl9iXzQgPSB0cmFjZWJhY2tfbGluZW5vKCdiLnB5JywgNCkKKworICAgICAgICAjIHBlciBmaWxlCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnZmlsZW5hbWUnLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYiwgOTgsIDUpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDMyLCA0KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl8wLCA3LCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHBlciBsaW5lCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0cywgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfMSwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfNCwgMzIsIDQpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfNSwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF90cmFjZV9mb3JtYXQoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdHJhY2UgPSBzbmFwc2hvdC50cmFjZXNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHJhY2UpLCAnYS5weToyOiAxMCBCJykKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2UudHJhY2ViYWNrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHRyYWNlYmFjayksICdhLnB5OjInKQorICAgICAgICBmcmFtZSA9IHRyYWNlYmFja1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmcmFtZSksICdhLnB5OjInKQorCisgICAgZGVmIHRlc3Rfc3RhdGlzdGljX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICBzdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHN0YXQgPSBzdGF0c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdGF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYi5weToxOiBzaXplPTY2IEIsIGNvdW50PTEsIGF2ZXJhZ2U9NjYgQicpCisKKyAgICBkZWYgdGVzdF9zdGF0aXN0aWNfZGlmZl9mb3JtYXQoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ2xpbmVubycpCisgICAgICAgIHN0YXQgPSBzdGF0c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdGF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYS5weTo1OiBzaXplPTUwMDIgQiAoKzUwMDAgQiksIGNvdW50PTIgKCsxKSwgYXZlcmFnZT0yNTAxIEInKQorCisgICAgZGVmIHRlc3Rfc2xpY2VzKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QudHJhY2VzWzoyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc25hcHNob3QudHJhY2VzWzBdLCBzbmFwc2hvdC50cmFjZXNbMV0pKQorCisgICAgICAgIHRyYWNlYmFjayA9IHNuYXBzaG90LnRyYWNlc1swXS50cmFjZWJhY2sKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2tbOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICh0cmFjZWJhY2tbMF0sIHRyYWNlYmFja1sxXSkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIGRlZiBnZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pOgorICAgICAgICAgICAgcmV0dXJuICcgIDwlcywgJXM+JyAlIChmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3RyYWNlbWFsbG9jLmxpbmVjYWNoZS5nZXRsaW5lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVfZWZmZWN0PWdldGxpbmUpOgorICAgICAgICAgICAgdGIgPSBzbmFwc2hvdC50cmFjZXNbMF0udHJhY2ViYWNrCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRiLmZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgRmlsZSAiYS5weSIsIGxpbmUgMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIDxhLnB5LCAyPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBGaWxlICJiLnB5IiwgbGluZSA0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgPGIucHksIDQ+J10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGIuZm9ybWF0KGxpbWl0PTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgRmlsZSAiYS5weSIsIGxpbmUgMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIDxhLnB5LCAyPiddKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRiLmZvcm1hdChsaW1pdD0tMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisKK2NsYXNzIFRlc3RGaWx0ZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYXhEaWZmID0gMjA0OAorCisgICAgZGVmIHRlc3RfZmlsdGVyX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgdGVzdCBkZWZhdWx0IHZhbHVlcworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaW5jbHVzaXZlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmlsZW5hbWVfcGF0dGVybiwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYubGluZW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxsX2ZyYW1lcywgRmFsc2UpCisKKyAgICAgICAgIyB0ZXN0IGN1c3RvbSB2YWx1ZXMKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgInRlc3QucHkiLCAxMjMsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pbmNsdXNpdmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmlsZW5hbWVfcGF0dGVybiwgInRlc3QucHkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubGluZW5vLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGxfZnJhbWVzLCBUcnVlKQorCisgICAgICAgICMgcGFyYW1ldGVycyBwYXNzZWQgYnkga2V5d29yZAorICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKGluY2x1c2l2ZT1GYWxzZSwgZmlsZW5hbWVfcGF0dGVybj0idGVzdC5weSIsIGxpbmVubz0xMjMsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmluY2x1c2l2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAidGVzdC5weSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5saW5lbm8sIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsbF9mcmFtZXMsIFRydWUpCisKKyAgICAgICAgIyByZWFkLW9ubHkgYXR0cmlidXRlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBmLCAiZmlsZW5hbWVfcGF0dGVybiIsICJhYmMiKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoKHNlbGYpOgorICAgICAgICAjIGZpbHRlciB3aXRob3V0IGxpbmUgbnVtYmVyCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgICMgZmlsdGVyIHdpdGggbGluZSBudW1iZXIgPiAwCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiLCA1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgICMgZmlsdGVyIHdpdGggbGluZSBudW1iZXIgMAorICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhYmMiLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYWJjIiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl9tYXRjaF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgZGVmIGZubWF0Y2goaW5jbHVzaXZlLCBmaWxlbmFtZSwgcGF0dGVybik6CisgICAgICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKGluY2x1c2l2ZSwgcGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiBmLl9tYXRjaF9mcmFtZShmaWxlbmFtZSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChUcnVlLCAiYWJjIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goVHJ1ZSwgIjEyMzU2IiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goVHJ1ZSwgIjx1bmtub3duPiIsICJhYmMiKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goRmFsc2UsICJhYmMiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKEZhbHNlLCAiMTIzNTYiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKEZhbHNlLCAiPHVua25vd24+IiwgImFiYyIpKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX2ZpbGVuYW1lX2pva2VyKHNlbGYpOgorICAgICAgICBkZWYgZm5tYXRjaChmaWxlbmFtZSwgcGF0dGVybik6CisgICAgICAgICAgICBmaWx0ZXIgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgcGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXIuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCAwKQorCisgICAgICAgICMgZW1wdHkgc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJycsICcqJykpCisKKyAgICAgICAgIyBubyAqCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2FiY2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnZGVmJykpCisKKyAgICAgICAgIyBhKgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjJywgJ2EqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYWJjKicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdiKicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdhYmNkKicpKQorCisgICAgICAgICMgYSpiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYSpjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmNkY3gnLCAnYSpjeCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYicsICdhKmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmNkY2UnLCAnYSpjeCcpKQorCisgICAgICAgICMgYSpiKmMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2RlJywgJ2EqYyplJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmNiZGVmZWcnLCAnYSpiZCplZycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiY2RkJywgJ2EqYyplJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjYmRlZmVmJywgJ2EqYmQqZWcnKSkKKworICAgICAgICAjIHJlcGxhY2UgLnB5YyBhbmQgLnB5byBzdWZmaXggd2l0aCAucHkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHljJywgJ2EucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHlvJywgJ2EucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHknLCAnYS5weWMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHknLCAnYS5weW8nKSkKKworICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICAjIGNhc2UgaW5zZW5zaXRpdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhQkMnLCAnQUJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYUJjRGUnLCAnQWIqZEUnKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHljJywgJ2EuUFknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLlBZTycsICdhLnB5JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLlBZQycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EuUFknLCAnYS5weW8nKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY2FzZSBzZW5zaXRpdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYUJDJywgJ0FCYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhQmNEZScsICdBYipkRScpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EucHljJywgJ2EuUFknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5QWU8nLCAnYS5weScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLnB5JywgJ2EuUFlDJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EuUFknLCAnYS5weW8nKSkKKworICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICAjIG5vcm1hbGl6ZSBhbHRlcm5hdGUgc2VwYXJhdG9yICIvIiB0byB0aGUgc3RhbmRhcmQgc2VwYXJhdG9yICJcIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhL2InLCByJ2FcYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhXGInLCByJ2EvYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhL2JcYycsIHInYVxiL2MnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKHInYS9iL2MnLCByJ2FcYlxjJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSBzZXBhcmF0b3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2EvYicsIHInYVxiJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhXGInLCByJ2EvYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYS9iXGMnLCByJ2FcYi9jJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhL2IvYycsIHInYVxiXGMnKSkKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl9tYXRjaF90cmFjZShzZWxmKToKKyAgICAgICAgdDEgPSAoKCJhLnB5IiwgMiksICgiYi5weSIsIDMpKQorICAgICAgICB0MiA9ICgoImIucHkiLCA0KSwgKCJiLnB5IiwgNSkpCisgICAgICAgIHQzID0gKCgiYy5weSIsIDUpLCAoJzx1bmtub3duPicsIDApKQorICAgICAgICB1bmtub3duID0gKCgnPHVua25vd24+JywgMCksKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImIucHkiLCBhbGxfZnJhbWVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJiLnB5IiwgYWxsX2ZyYW1lcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYi5weSIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJiLnB5IiwgYWxsX2ZyYW1lcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIsIGFsbF9mcmFtZXM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgIjx1bmtub3duPiIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iLCBhbGxfZnJhbWVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworCitjbGFzcyBUZXN0Q29tbWFuZExpbmUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Vudl92YXIoc2VsZik6CisgICAgICAgICMgbm90IHRyYWNpbmcgYnkgZGVmYXVsdAorICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInRmFsc2UnKQorCisgICAgICAgICMgUFlUSE9OKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbXVzdCBiZSBpZ25vcmVkIHdoZW4gLUUgb3B0aW9uIGlzCisgICAgICAgICMgcHJlc2VudAorICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUUnLCAnLWMnLCBjb2RlLCBQWVRIT05UUkFDRU1BTExPQz0nMScpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidGYWxzZScpCisKKyAgICAgICAgIyB0cmFjaW5nIGF0IHN0YXJ0dXAKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSknCisgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwgUFlUSE9OVFJBQ0VNQUxMT0M9JzEnKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInVHJ1ZScpCisKKyAgICAgICAgIyBzdGFydCBhbmQgc2V0IHRoZSBudW1iZXIgb2YgZnJhbWVzCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxMCcpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicxMCcpCisKKyAgICBkZWYgdGVzdF9lbnZfdmFyX2ludmFsaWQoc2VsZik6CisgICAgICAgIGZvciBuZnJhbWUgaW4gKC0xLCAwLCAyKiozMCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuZnJhbWU9bmZyYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCAncGFzcycsCisgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05UUkFDRU1BTExPQz1zdHIobmZyYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BZVEhPTlRSQUNFTUFMTE9DOiBpbnZhbGlkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciBvZiBmcmFtZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycikKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIHhvcHRpb25zLCBuZnJhbWUgaW4gKAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYycsIDEpLAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYz0xJywgMSksCisgICAgICAgICAgICAoJ3RyYWNlbWFsbG9jPTE1JywgMTUpLAorICAgICAgICApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeG9wdGlvbnM9eG9wdGlvbnMsIG5mcmFtZT1uZnJhbWUpOgorICAgICAgICAgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1YJywgeG9wdGlvbnMsICctYycsIGNvZGUpCisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHN0cihuZnJhbWUpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9uc19pbnZhbGlkKHNlbGYpOgorICAgICAgICBmb3IgbmZyYW1lIGluICgtMSwgMCwgMioqMzApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmZyYW1lPW5mcmFtZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9ICgnLVgnLCAndHJhY2VtYWxsb2M9JXMnICUgbmZyYW1lLCAnLWMnLCAncGFzcycpCisgICAgICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJy1YIHRyYWNlbWFsbG9jPU5GUkFNRTogaW52YWxpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIgb2YgZnJhbWVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIpCisKKyAgICBkZWYgdGVzdF9weW1lbV9hbGxvYzAoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxNjM5OiBDaGVjayB0aGF0IFB5TWVtX01hbGxvYygwKSB3aXRoIHRyYWNlbWFsbG9jIGVuYWJsZWQKKyAgICAgICAgIyBkb2VzIG5vdCBjcmFzaC4KKyAgICAgICAgY29kZSA9ICdpbXBvcnQgX3Rlc3RjYXBpOyBfdGVzdGNhcGkudGVzdF9weW1lbV9hbGxvYzAoKTsgMScKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLVgnLCAndHJhY2VtYWxsb2MnLCAnLWMnLCBjb2RlKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdFRyYWNlbWFsbG9jRW5hYmxlZCwKKyAgICAgICAgVGVzdFNuYXBzaG90LAorICAgICAgICBUZXN0RmlsdGVycywKKyAgICAgICAgVGVzdENvbW1hbmRMaW5lLAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weSBiL0xpYi90ZXN0L3Rlc3RfdHRrX2d1aW9ubHkucHkKaW5kZXggM2EzNDU5Yi4uZmNkZWRhYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5CkBAIC02LDM1ICs2LDMyIEBACiBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKIAogIyBNYWtlIHN1cmUgdGtpbnRlci5fZml4IHJ1bnMgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudAotc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd0a2ludGVyJykKK3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXInKQogCiAjIFNraXAgdGVzdCBpZiB0ayBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuCi1mcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBjaGVja190a19hdmFpbGFiaWxpdHkKLWNoZWNrX3RrX2F2YWlsYWJpbGl0eSgpCitzdXBwb3J0LnJlcXVpcmVzKCdndWknKQogCiBmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgogZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKIGZyb20gdGtpbnRlci50ZXN0IGltcG9ydCBydW50a3Rlc3RzCi1mcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBnZXRfdGtfcm9vdAogCityb290ID0gTm9uZQogdHJ5OgotICAgIHR0ay5CdXR0b24oKQorICAgIHJvb3QgPSB0a2ludGVyLlRrKCkKKyAgICBidXR0b24gPSB0dGsuQnV0dG9uKHJvb3QpCisgICAgYnV0dG9uLmRlc3Ryb3koKQorICAgIGRlbCBidXR0b24KIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6CiAgICAgIyBhc3N1bWluZyB0dGsgaXMgbm90IGF2YWlsYWJsZQogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0dGsgbm90IGF2YWlsYWJsZTogJXMiICUgbXNnKQorZmluYWxseToKKyAgICBpZiByb290IGlzIG5vdCBOb25lOgorICAgICAgICByb290LmRlc3Ryb3koKQorICAgIGRlbCByb290CiAKLWRlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6Ci0gICAgaWYgZW5hYmxlX2d1aToKLSAgICAgICAgaWYgc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCi0gICAgICAgIGVsaWYgJ2d1aScgbm90IGluIHN1cHBvcnQudXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCi0KLSAgICB0cnk6Ci0gICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdHRrJ10pKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGdldF90a19yb290KCkuZGVzdHJveSgpCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAqcnVudGt0ZXN0cy5nZXRfdGVzdHModGV4dD1GYWxzZSwgcGFja2FnZXM9Wyd0ZXN0X3R0ayddKSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5IGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQppbmRleCAzZWU0YzZiLi5lYzEwNzUyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKQEAgLTIsNiArMiw3IEBACiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJ1bl93aXRoX2xvY2FsZQogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKQEAgLTEwNzcsOSArMTA3OCwxOSBAQAogICAgICAgICBuczIgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKQogICAgICAgICBuczIueCA9ICJzcGFtIgogICAgICAgICBuczIuX3kgPSA1CisgICAgICAgIG5hbWUgPSAibmFtZXNwYWNlIgogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczEpLCAibmFtZXNwYWNlKHc9MywgeD0xLCB5PTIpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMiksICJuYW1lc3BhY2UoX3k9NSwgeD0nc3BhbScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksICJ7bmFtZX0odz0zLCB4PTEsIHk9MikiLmZvcm1hdChuYW1lPW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgIntuYW1lfShfeT01LCB4PSdzcGFtJykiLmZvcm1hdChuYW1lPW5hbWUpKQorCisgICAgZGVmIHRlc3RfZXF1YWwoc2VsZik6CisgICAgICAgIG5zMSA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSh4PTEpCisgICAgICAgIG5zMiA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCisgICAgICAgIG5zMi54ID0gMQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZXMuU2ltcGxlTmFtZXNwYWNlKCksIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zMSwgbnMyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMiwgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkpCiAKICAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CiAgICAgICAgIG5zMSA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZShhPTEsIGI9MikKQEAgLTExMTcsMTEgKzExMjgsMTIgQEAKICAgICAgICAgbnMxLnNwYW0gPSBuczEKICAgICAgICAgbnMyLnNwYW0gPSBuczMKICAgICAgICAgbnMzLnNwYW0gPSBuczIKKyAgICAgICAgbmFtZSA9ICJuYW1lc3BhY2UiCisgICAgICAgIHJlcHIxID0gIntuYW1lfShjPSdjb29raWUnLCBzcGFtPXtuYW1lfSguLi4pKSIuZm9ybWF0KG5hbWU9bmFtZSkKKyAgICAgICAgcmVwcjIgPSAie25hbWV9KHNwYW09e25hbWV9KHNwYW09e25hbWV9KC4uLiksIHg9MSkpIi5mb3JtYXQobmFtZT1uYW1lKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lc3BhY2UoYz0nY29va2llJywgc3BhbT1uYW1lc3BhY2UoLi4uKSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXNwYWNlKHNwYW09bmFtZXNwYWNlKHNwYW09bmFtZXNwYWNlKC4uLiksIHg9MSkpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksIHJlcHIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgcmVwcjIpCiAKICAgICBkZWYgdGVzdF9hc19kaWN0KHNlbGYpOgogICAgICAgICBucyA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZShzcGFtPSdzcGFtc3BhbXNwYW0nKQpAQCAtMTE0NCw2ICsxMTU2LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzcGFtKSwgU3BhbSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKHNwYW0pLCB7J2hhbSc6IDgsICdlZ2dzJzogOX0pCiAKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIG5zID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKGJyZWFrZmFzdD0ic3BhbSIsIGx1bmNoPSJzcGFtIikKKworICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBuYW1lID0gInByb3RvY29sIHt9Ii5mb3JtYXQocHJvdG9jb2wpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbnNfcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhucywgcHJvdG9jb2wpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHBuYW1lKSBmcm9tIGUKKyAgICAgICAgICAgIG5zX3JvdW5kdHJpcCA9IHBpY2tsZS5sb2Fkcyhuc19waWNrbGVkKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBuc19yb3VuZHRyaXAsIHBuYW1lKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVHlwZXNUZXN0cywgTWFwcGluZ1Byb3h5VGVzdHMsIENsYXNzQ3JlYXRpb25UZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5IGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKaW5kZXggZGU3MTY4MC4uYmU3ZTljZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91Y24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXN0ZGF0YSA9IHN1cHBvcnQub3Blbl91cmxyZXNvdXJjZSh1cmwsIGVuY29kaW5nPSJ1dGYtOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjaz1jaGVja192ZXJzaW9uKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIgKyB1cmwpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0ZGF0YS5jbG9zZSkKICAgICAgICAgZm9yIGxpbmUgaW4gdGVzdGRhdGE6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggYzJlZGUwNy4uOWFlMzFkMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtNyw2ICs3LDcgQEAKICIiIiMiCiBpbXBvcnQgX3N0cmluZwogaW1wb3J0IGNvZGVjcworaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CkBAIC0zMSw2ICszMiwxNiBAQAogICAgICAgICByZXR1cm4gTm9uZQogY29kZWNzLnJlZ2lzdGVyKHNlYXJjaF9mdW5jdGlvbikKIAorZGVmIGR1cGxpY2F0ZV9zdHJpbmcodGV4dCk6CisgICAgIiIiCisgICAgVHJ5IHRvIGdldCBhIGZyZXNoIGNsb25lIG9mIHRoZSBzcGVjaWZpZWQgdGV4dDoKKyAgICBuZXcgb2JqZWN0IHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YgMS4KKworICAgIFRoaXMgaXMgYSBiZXN0LWVmZm9ydDogbGF0aW4xIHNpbmdsZSBsZXR0ZXJzIGFuZCB0aGUgZW1wdHkKKyAgICBzdHJpbmcgKCcnKSBhcmUgc2luZ2xldG9ucyBhbmQgY2Fubm90IGJlIGNsb25lZC4KKyAgICAiIiIKKyAgICByZXR1cm4gdGV4dC5lbmNvZGUoKS5kZWNvZGUoKQorCiBjbGFzcyBVbmljb2RlVGVzdChzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdCwKICAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LAogICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVGVzdCwKQEAgLTgzNCw2ICs4NDUsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDB9Jy5mb3JtYXQoJycpLCAnICcgKiAxMDAwMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDAwMDB9Jy5mb3JtYXQoJycpLCAnICcgKiAxMDAwMDAwMCkKIAorICAgICAgICAjIGlzc3VlIDEyNTQ2OiB1c2UgXHgwMCBhcyBhIGZpbGwgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDA8NnN9Jy5mb3JtYXQoJ2ZvbycpLCAnZm9vXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMTw2c30nLmZvcm1hdCgnZm9vJyksICdmb29ceDAxXHgwMVx4MDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwXjZzfScuZm9ybWF0KCdmb28nKSwgJ1x4MDBmb29ceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl42c30nLmZvcm1hdCgnZm9vJyksICcgZm9vICAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDA8Nn0nLmZvcm1hdCgzKSwgJzNceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDE8Nn0nLmZvcm1hdCgzKSwgJzNceDAxXHgwMVx4MDFceDAxXHgwMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDBeNn0nLmZvcm1hdCgzKSwgJ1x4MDBceDAwM1x4MDBceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjw2fScuZm9ybWF0KDMpLCAnMyAgICAgJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwPDZ9Jy5mb3JtYXQoMy4xNCksICczLjE0XHgwMFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAxPDZ9Jy5mb3JtYXQoMy4xNCksICczLjE0XHgwMVx4MDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwXjZ9Jy5mb3JtYXQoMy4xNCksICdceDAwMy4xNFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeNn0nLmZvcm1hdCgzLjE0KSwgJyAzLjE0ICcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMDwxMn0nLmZvcm1hdCgzKzIuMGopLCAnKDMrMmopXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMTwxMn0nLmZvcm1hdCgzKzIuMGopLCAnKDMrMmopXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMF4xMn0nLmZvcm1hdCgzKzIuMGopLCAnXHgwMFx4MDBceDAwKDMrMmopXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEyfScuZm9ybWF0KDMrMi4waiksICcgICAoMysyaikgICAnKQorCiAgICAgICAgICMgZm9ybWF0IHNwZWNpZmllcnMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmFiY30nLmZvcm1hdChDKCkpLCAnYWJjJykKIApAQCAtODYzLDExICs4OTUsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpkfScuZm9ybWF0KEcoJ2RhdGEnKSksICdHKGRhdGEpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhc30nLmZvcm1hdChHKCdkYXRhJykpLCAnc3RyaW5nIGlzIGRhdGEnKQogCi0gICAgICAgIG1zZyA9ICdvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMgZGVwcmVjYXRlZCcKLSAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKChtc2csIERlcHJlY2F0aW9uV2FybmluZykpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjE1c30nLmZvcm1hdChHKCdkYXRhJykpLCAnIHN0cmluZyBpcyBkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnezA6XjEwfScuZm9ybWF0LCBFKCdkYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOl4xMHN9Jy5mb3JtYXQsIEUoJ2RhdGEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnezA6PjE1c30nLmZvcm1hdCwgRygnZGF0YScpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswOmRhdGU6ICVZLSVtLSVkfSIuZm9ybWF0KEkoeWVhcj0yMDA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPTgsCkBAIC05MDMsNyArOTMzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswIi5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7MC59Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MC59Ii5mb3JtYXQsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7MFt9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFt9Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFt9Ii5mb3JtYXQsIFtdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgICAiezBdfSIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAuW119Ii5mb3JtYXQsIDApCkBAIC05NTUsNiArOTg1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t7fV19Ii5mb3JtYXQoeyJ7fSI6IDV9KSwgIjUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W3t9XX0iLmZvcm1hdCh7Int9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbe119Ii5mb3JtYXQoeyJ7IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbfV19Ii5mb3JtYXQoeyJ9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbW119Ii5mb3JtYXQoeyJbIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbIV19Ii5mb3JtYXQoeyIhIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXt9Yn0iLmZvcm1hdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXtifSIuZm9ybWF0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIntbfSIuZm9ybWF0LCA0MikKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIweHs6MHs6ZH1YfSIuZm9ybWF0KDB4MCwxNiksICIweDAwMDAwMDAwMDAwMDAwMDAiKQogCiAgICAgZGVmIHRlc3RfZm9ybWF0X21hcChzZWxmKToKQEAgLTExMDgsNiArMTE0Nyw2NyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclLjFzJyAlICJhXHhlOVx1MjBhYyIsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJS4ycycgJSAiYVx4ZTlcdTIwYWMiLCAnYVx4ZTknKQogCisgICAgICAgICNpc3N1ZSAxOTk5NQorICAgICAgICBjbGFzcyBQc3VlZG9JbnQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSBpbnQodmFsdWUpCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICBjbGFzcyBQc3VlZG9GbG9hdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGZsb2F0KHZhbHVlKQorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLnZhbHVlKQorICAgICAgICBwaSA9IFBzdWVkb0Zsb2F0KDMuMTQxNSkKKyAgICAgICAgbGV0dGVyX20gPSBQc3VlZG9JbnQoMTA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcleCcgJSA0MiwgJzJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJVgnICUgMTUsICdGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJW8nICUgOSwgJzExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWMnICUgMTA5LCAnbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyV4JyAlIGxldHRlcl9tLCAnNmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclWCcgJSBsZXR0ZXJfbSwgJzZEJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJW8nICUgbGV0dGVyX20sICcxNTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclYycgJSBsZXR0ZXJfbSwgJ20nKQorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyV4Jy5fX21vZF9fLCBwaSksCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJXgnLl9fbW9kX18sIDMuMTQpLAorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyVYJy5fX21vZF9fLCAyLjExKSwKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsICclbycuX19tb2RfXywgMS43OSksCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJWMnLl9fbW9kX18sIHBpKSwKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfd2l0aF9lbnVtKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTg3ODAKKyAgICAgICAgaW1wb3J0IGVudW0KKyAgICAgICAgY2xhc3MgRmxvYXQoZmxvYXQsIGVudW0uRW51bSk6CisgICAgICAgICAgICBQSSA9IDMuMTQxNTkyNgorICAgICAgICBjbGFzcyBJbnQoZW51bS5JbnRFbnVtKToKKyAgICAgICAgICAgIElERVMgPSAxNQorICAgICAgICBjbGFzcyBTdHIoc3RyLCBlbnVtLkVudW0pOgorICAgICAgICAgICAgQUJDID0gJ2FiYycKKyAgICAgICAgIyBUZXN0aW5nIFVuaWNvZGUgZm9ybWF0dGluZyBzdHJpbmdzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzLCAlcyIgJSAoU3RyLkFCQywgU3RyLkFCQyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ci5BQkMsIFN0ci5BQkMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlcywgJXMsICVkLCAlaSwgJXUsICVmLCAlNS4yZiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKFN0ci5BQkMsIFN0ci5BQkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgSW50LklERVMsIEludC5JREVTLCBJbnQuSURFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdC5QSSwgRmxvYXQuUEkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTdHIuQUJDLCBTdHIuQUJDLCAxNSwgMTUsIDE1LCAzLjE0MTU5MywgIDMuMTQnKQorCisgICAgICAgICMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOlN0ci5BQkN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5TdHIuQUJDLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6SW50LklERVN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5JbnQuSURFUy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWkuLi4nICUgeydmb28nOkludC5JREVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylkLi4uJyAlIHsnZm9vJzpJbnQuSURFU30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjE1Li4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pdS4uLicgJSB7J2Zvbyc6SW50LklERVMsICdkZWYnOkZsb2F0LlBJfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylmLi4uJyAlIHsnZm9vJzpGbG9hdC5QSSwnZGVmJzoxMjN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4zLjE0MTU5My4uLicpCisKICAgICBkZWYgdGVzdF9mb3JtYXR0aW5nX2h1Z2VfcHJlY2lzaW9uKHNlbGYpOgogICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiUue31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgpAQCAtMTc4OCwxMCArMTg4OCwxMCBAQAogICAgICAgICAjIDAtMTI3CiAgICAgICAgIHMgPSBieXRlcyhyYW5nZSgxMjgpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAotICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCisgICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywgJ2NwMjczJywKICAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCiAgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDExMjUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMTAnLCAnaXNvODg1OV8xMycsICdpc284ODU5XzE0JywgJ2lzbzg4NTlfMTUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMicsICdpc284ODU5XzMnLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsICdpc284ODU5XzYnLAogICAgICAgICAgICAgJ2lzbzg4NTlfNycsICdpc284ODU5XzknLCAna29pOF9yJywgJ2xhdGluXzEnLApAQCAtMTgxNiwxMCArMTkxNiwxMCBAQAogICAgICAgICAjIDEyOC0yNTUKICAgICAgICAgcyA9IGJ5dGVzKHJhbmdlKDEyOCwgMjU2KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgKLSAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLAorICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsICdjcDI3MycsCiAgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAogICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKLSAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCisgICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLCAnY3AxMTI1JywKICAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKICAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsCiAgICAgICAgICAgICAnaXNvODg1OV85JywgJ2tvaThfcicsICdsYXRpbl8xJywKQEAgLTIwMTAsOSArMjExMCwxMCBAQAogICAgICMgVGVzdCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpCiAgICAgZGVmIHRlc3RfZnJvbV9mb3JtYXQoc2VsZik6CiAgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKLSAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IChweXRob25hcGksIHB5X29iamVjdCwKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0ICgKKyAgICAgICAgICAgIHB5dGhvbmFwaSwgcHlfb2JqZWN0LCBzaXplb2YsCiAgICAgICAgICAgICBjX2ludCwgY19sb25nLCBjX2xvbmdsb25nLCBjX3NzaXplX3QsCi0gICAgICAgICAgICBjX3VpbnQsIGNfdWxvbmcsIGNfdWxvbmdsb25nLCBjX3NpemVfdCkKKyAgICAgICAgICAgIGNfdWludCwgY191bG9uZywgY191bG9uZ2xvbmcsIGNfc2l6ZV90LCBjX3ZvaWRfcCkKICAgICAgICAgbmFtZSA9ICJQeVVuaWNvZGVfRnJvbUZvcm1hdCIKICAgICAgICAgX1B5VW5pY29kZV9Gcm9tRm9ybWF0ID0gZ2V0YXR0cihweXRob25hcGksIG5hbWUpCiAgICAgICAgIF9QeVVuaWNvZGVfRnJvbUZvcm1hdC5yZXN0eXBlID0gcHlfb2JqZWN0CkBAIC0yMDIzLDkgKzIxMjQsMTMgQEAKICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmNhcmdzKQogCisgICAgICAgIGRlZiBjaGVja19mb3JtYXQoZXhwZWN0ZWQsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCB0ZXh0KQorCiAgICAgICAgICMgYXNjaWkgZm9ybWF0LCBub24tYXNjaWkgYXJndW1lbnQKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInYXNjaWlceDdmPSVVJywgJ3VuaWNvZGVceGU5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAnYXNjaWlceDdmPXVuaWNvZGVceGU5JykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhc2NpaVx4N2Y9dW5pY29kZVx4ZTknLAorICAgICAgICAgICAgICAgICAgICAgYidhc2NpaVx4N2Y9JVUnLCAndW5pY29kZVx4ZTknKQogCiAgICAgICAgICMgbm9uLWFzY2lpIGZvcm1hdCwgYXNjaWkgYXJndW1lbnQ6IGVuc3VyZSB0aGF0IFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpCiAgICAgICAgICMgcmFpc2VzIGFuIGVycm9yCkBAIC0yMDM1LDY0ICsyMTQwLDIwNSBAQAogICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQsIGIndW5pY29kZVx4ZTk9JXMnLCAnYXNjaWknKQogCiAgICAgICAgICMgdGVzdCAiJWMiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYycsIGNfaW50KDB4YWJjZCkpLCAnXHVhYmNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMGZmZmYpKSwgJ1xVMDAxMGZmZmYnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1x1YWJjZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyVjJywgY19pbnQoMHhhYmNkKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcVTAwMTBmZmZmJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMnLCBjX2ludCgweDEwZmZmZikpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMTAwMDApKQogICAgICAgICAjIElzc3VlICMxODE4MwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYyVjJywgY19pbnQoMHgxMDAwMCksIGNfaW50KDB4MTAwMDAwKSksCi0gICAgICAgICAgICAnXFUwMDAxMDAwMFxVMDAxMDAwMDAnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1xVMDAwMTAwMDBcVTAwMTAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMlYycsIGNfaW50KDB4MTAwMDApLCBjX2ludCgweDEwMDAwMCkpCiAKICAgICAgICAgIyB0ZXN0ICIlIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJScpLCAnJScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJScpLCAnJScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJXMnKSwgJyVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ1slJV0nKSwgJ1slXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJSVzJywgYidhYmMnKSwgJyVhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUnLAorICAgICAgICAgICAgICAgICAgICAgYiclJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSUnKQorICAgICAgICBjaGVja19mb3JtYXQoJyVzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSVzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdbJV0nLAorICAgICAgICAgICAgICAgICAgICAgYidbJSVdJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclYWJjJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSUlcycsIGInYWJjJykKKworICAgICAgICAjIHRydW5jYXRlZCBzdHJpbmcKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhYmMnLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNzJywgYidhYmNkZWYnKQorICAgICAgICBjaGVja19mb3JtYXQoJ2FiY1tcdWZmZmQnLAorICAgICAgICAgICAgICAgICAgICAgYiclLjVzJywgJ2FiY1tcdTIwYWNdJy5lbmNvZGUoJ3V0ZjgnKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXFx1MjBhY0FCQyciLAorICAgICAgICAgICAgICAgICAgICAgYiclQScsICdcdTIwYWNBQkMnKQorICAgICAgICBjaGVja19mb3JtYXQoIidcXHUyMCIsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNUEnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXHUyMGFjQUJDJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyVSJywgJ1x1MjBhY0FCQycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgiJ1x1MjBhY0EiLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNSJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNTJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNVJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNWJywgJ1x1MjBhY0FCQ0RFRicsIE5vbmUpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnYWJjW1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNVYnLCBOb25lLCAnYWJjW1x1MjBhY10nLmVuY29kZSgndXRmOCcpKQorCisgICAgICAgICMgZm9sbG93aW5nIHRlc3RzIGNvbWVzIGZyb20gIzczMzAKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlUworICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1UycsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlMnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yUycsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJVIKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgICdhYmMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lOFInLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4zUicsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAnYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjNSJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlQQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgJ2FiYyciLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU4QScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9J2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjNBJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuM0EnLCAnYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVzCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVzJywgYidhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMnMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICBhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuMnMnLCBiJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlVQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlUnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yVScsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJVYKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgYWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNVYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJWJywgJ2FiYycsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgMTIzIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNVYnLCBOb25lLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0xMiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVicsIE5vbmUsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIDEyIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yVicsIE5vbmUsIGInMTIzJykKIAogICAgICAgICAjIHRlc3QgaW50ZWdlciBmb3JtYXRzICglaSwgJWQsICV1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTAzaScsIGNfaW50KDEwKSksICcwMTAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTAuNGknLCBjX2ludCgxMCkpLCAnMDAxMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclaScsIGNfaW50KC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxpJywgY19sb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsaScsIGNfbG9uZ2xvbmcoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclemknLCBjX3NzaXplX3QoLTEyMykpLCAnLTEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMDEwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTAzaScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcwMDEwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTAuNGknLCBjX2ludCgxMCkpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVpJywgY19pbnQoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsaScsIGNfbG9uZygtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsaScsIGNfbG9uZ2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV6aScsIGNfc3NpemVfdCgtMTIzKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWQnLCBjX2ludCgtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsZCcsIGNfbG9uZygtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsbGQnLCBjX2xvbmdsb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJXpkJywgY19zc2l6ZV90KC0xMjMpKSwgJy0xMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclZCcsIGNfaW50KC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGQnLCBjX2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclemQnLCBjX3NzaXplX3QoLTEyMykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV1JywgY191aW50KDEyMykpLCAnMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsdScsIGNfdWxvbmcoMTIzKSksICcxMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsdScsIGNfdWxvbmdsb25nKDEyMykpLCAnMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV6dScsIGNfc2l6ZV90KDEyMykpLCAnMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYicldScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsdScsIGNfdWxvbmcoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGx1JywgY191bG9uZ2xvbmcoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclenUnLCBjX3NpemVfdCgxMjMpKQorCisgICAgICAgICMgdGVzdCBsb25nIG91dHB1dAorICAgICAgICBtaW5fbG9uZ2xvbmcgPSAtKDIgKiogKDggKiBzaXplb2YoY19sb25nbG9uZykgLSAxKSkKKyAgICAgICAgbWF4X2xvbmdsb25nID0gLW1pbl9sb25nbG9uZyAtIDEKKyAgICAgICAgY2hlY2tfZm9ybWF0KHN0cihtaW5fbG9uZ2xvbmcpLAorICAgICAgICAgICAgICAgICAgICAgYiclbGxkJywgY19sb25nbG9uZyhtaW5fbG9uZ2xvbmcpKQorICAgICAgICBjaGVja19mb3JtYXQoc3RyKG1heF9sb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKG1heF9sb25nbG9uZykpCisgICAgICAgIG1heF91bG9uZ2xvbmcgPSAyICoqICg4ICogc2l6ZW9mKGNfdWxvbmdsb25nKSkgLSAxCisgICAgICAgIGNoZWNrX2Zvcm1hdChzdHIobWF4X3Vsb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbHUnLCBjX3Vsb25nbG9uZyhtYXhfdWxvbmdsb25nKSkKKyAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclcCcsIGNfdm9pZF9wKC0xKSkKKworICAgICAgICAjIHRlc3QgcGFkZGluZyAod2lkdGggYW5kL29yIHByZWNpc2lvbikKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDAsICcwJyksCisgICAgICAgICAgICAgICAgICAgICBiJyUuMTAwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgwaScsIGNfaW50KDEyMykpCisKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEwdScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTEwMHUnLCBjX3VpbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB1JywgY191aW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgwdScsIGNfdWludCgxMjMpKQorCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTAxMHgnLCBjX2ludCgweDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAweCcsIGNfaW50KDB4MTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB4JywgY19pbnQoMHgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoODAsICcwJykucmp1c3QoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTEwMC44MHgnLCBjX2ludCgweDEyMykpCiAKICAgICAgICAgIyB0ZXN0ICVBCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlQTolQScsICdhYmNceGU5XHVhYmNkXFUwMDEwZmZmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgciIlQTonYWJjXHhlOVx1YWJjZFxVMDAxMGZmZmYnIikKKyAgICAgICAgY2hlY2tfZm9ybWF0KHIiJUE6J2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyUlQTolQScsICdhYmNceGU5XHVhYmNkXFUwMDEwZmZmZicpCiAKICAgICAgICAgIyB0ZXN0ICVWCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCAnYWJjJywgYid4eXonKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1hYmMnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgJ2FiYycsIGIneHl6JykKIAogICAgICAgICAjIFRlc3Qgc3RyaW5nIGRlY29kZSBmcm9tIHBhcmFtZXRlciBvZiAlcyB1c2luZyB1dGYtOC4KICAgICAgICAgIyBiJ1x4ZTRceGJhXHhiYVx4ZTZceGIwXHg5MScgaXMgdXRmLTggZW5jb2RlZCBieXRlIHNlcXVlbmNlIG9mCiAgICAgICAgICMgJ1x1NGViYVx1NmMxMScKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGIncmVwcj0lVicsIE5vbmUsIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAncmVwcj1cdTRlYmFcdTZjMTEnKQorICAgICAgICBjaGVja19mb3JtYXQoJ3JlcHI9XHU0ZWJhXHU2YzExJywKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lVicsIE5vbmUsIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJykKIAogICAgICAgICAjVGVzdCByZXBsYWNlIGVycm9yIGhhbmRsZXIuCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCBOb25lLCBiJ2FiY1x4ZmYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiY1x1ZmZmZCcpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1hYmNcdWZmZmQnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgTm9uZSwgYidhYmNceGZmJykKIAogICAgICAgICAjIG5vdCBzdXBwb3J0ZWQ6IGNvcHkgdGhlIHJhdyBmb3JtYXQgc3RyaW5nLiB0aGVzZSB0ZXN0cyBhcmUganVzdCBoZXJlCiAgICAgICAgICMgdG8gY2hlY2sgZm9yIGNyYXNocyBhbmQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFzIHNwZWNpZmljYXRpb25zCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclMSVzJywgYidhYmMnKSwgJyVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUxYWJjJyksICclMWFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclK2knLCBjX2ludCgxMCkpLCAnJStpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUuJXMnLCBiJ2FiYycpLCAnJS4lcycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJXMnLAorICAgICAgICAgICAgICAgICAgICAgYiclMSVzJywgYidhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUxYWJjJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTFhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUraScsCisgICAgICAgICAgICAgICAgICAgICBiJyUraScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclLiVzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJS4lcycsIGInYWJjJykKIAogICAgICMgVGVzdCBQeVVuaWNvZGVfQXNXaWRlQ2hhcigpCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CkBAIC0yMjIwLDYgKzI0NjYsODAgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGFiYywgYWJjZGVmKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJjZGVmLmRlY29kZSgndW5pY29kZV9pbnRlcm5hbCcpLCB0ZXh0KQogCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTc2MTUKKyAgICAgICAgTiA9IDEwCisgICAgICAgIGFzY2lpID0gJ2EnICogTgorICAgICAgICBhc2NpaTIgPSAneicgKiBOCisgICAgICAgIGxhdGluID0gJ1x4ODAnICogTgorICAgICAgICBsYXRpbjIgPSAnXHhmZicgKiBOCisgICAgICAgIGJtcCA9ICdcdTAxMDAnICogTgorICAgICAgICBibXAyID0gJ1x1ZmZmZicgKiBOCisgICAgICAgIGFzdHJhbCA9ICdcVTAwMTAwMDAwJyAqIE4KKyAgICAgICAgYXN0cmFsMiA9ICdcVTAwMTBmZmZmJyAqIE4KKyAgICAgICAgc3RyaW5ncyA9ICgKKyAgICAgICAgICAgIGFzY2lpLCBhc2NpaTIsCisgICAgICAgICAgICBsYXRpbiwgbGF0aW4yLAorICAgICAgICAgICAgYm1wLCBibXAyLAorICAgICAgICAgICAgYXN0cmFsLCBhc3RyYWwyKQorICAgICAgICBmb3IgdGV4dDEsIHRleHQyIGluIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoc3RyaW5ncywgMik6CisgICAgICAgICAgICBlcXVhbCA9ICh0ZXh0MSBpcyB0ZXh0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dDEgPT0gdGV4dDIsIGVxdWFsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0MSAhPSB0ZXh0Miwgbm90IGVxdWFsKQorCisgICAgICAgICAgICBpZiBlcXVhbDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGV4dDEgPD0gdGV4dDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRleHQxID49IHRleHQyKQorCisgICAgICAgICAgICAgICAgIyB0ZXh0MSBpcyB0ZXh0MjogZHVwbGljYXRlIHN0cmluZ3MgdG8gc2tpcCB0aGUgInN0cjEgPT0gc3RyMiIKKyAgICAgICAgICAgICAgICAjIG9wdGltaXphdGlvbiBpbiB1bmljb2RlX2NvbXBhcmVfZXEoKSBhbmQgcmVhbGx5IGNvbXBhcmUKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBwZXIgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgY29weTEgPSBkdXBsaWNhdGVfc3RyaW5nKHRleHQxKQorICAgICAgICAgICAgICAgIGNvcHkyID0gZHVwbGljYXRlX3N0cmluZyh0ZXh0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGNvcHkxLCBjb3B5MikKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5MSA9PSBjb3B5MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvcHkxICE9IGNvcHkyKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkxIDw9IGNvcHkyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5MiA+PSBjb3B5MikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYXNjaWkgPCBhc2NpaTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXNjaWkgPCBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGFzdHJhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBhc2NpaTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gYm1wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGFzdHJhbCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluIDwgYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA8IGxhdGluMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluIDwgYm1wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPCBhc3RyYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA+PSBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA+PSBsYXRpbjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPj0gYm1wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluID49IGFzdHJhbCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA8IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA8IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wIDwgYm1wMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJtcCA8IGFzdHJhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJtcCA+PSBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJtcCA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShibXAgPj0gYm1wMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShibXAgPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmFsIDwgYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmFsIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmFsIDwgYm1wMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA8IGFzdHJhbDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3RyYWwgPj0gYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3RyYWwgPj0gbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3RyYWwgPj0gYm1wMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPj0gYXN0cmFsMikKKwogCiBjbGFzcyBTdHJpbmdNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfcGFyc2VyKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKaW5kZXggOTlhYTAwMy4uNzA3YjMwZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CkBAIC0yMSw3ICsyMSw3IEBACiBjbGFzcyBVbmljb2RlTWV0aG9kc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgIyB1cGRhdGUgdGhpcywgaWYgdGhlIGRhdGFiYXNlIGNoYW5nZXMKLSAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2JmN2E3OGYxYTUzMjQyMWI1MDMzNjAwMTAyZTIzYTkyMDQ0ZGJiYTknCisgICAgZXhwZWN0ZWRjaGVja3N1bSA9ICdlNzRlODc4ZGU3MWI2ZTc4MGZmYWMyNzE3ODVjM2NiNThmNjI1MWYzJwogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2NoZWNrc3VtKHNlbGYpOgogICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKQEAgLTgwLDcgKzgwLDcgQEAKIGNsYXNzIFVuaWNvZGVGdW5jdGlvbnNUZXN0KFVuaWNvZGVEYXRhYmFzZVRlc3QpOgogCiAgICAgIyB1cGRhdGUgdGhpcywgaWYgdGhlIGRhdGFiYXNlIGNoYW5nZXMKLSAgICBleHBlY3RlZGNoZWNrc3VtID0gJzE3ZmUyZjEyYjc4OGU0ZmZmNTQ3OWI0NjljNDQwNGJiNmVjZjg0MWYnCisgICAgZXhwZWN0ZWRjaGVja3N1bSA9ICdmMGI3NGQyNjc3NjMzMWNjN2JkYzNhNDY5OGYwMzdkNzNmMmNlZTJiJwogICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2NoZWNrc3VtKHNlbGYpOgogICAgICAgICBkYXRhID0gW10KICAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CmluZGV4IDJkZWM0ZTkuLjdlYjM0YzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CkBAIC03LDYgKzcsNyBAQAogaW1wb3J0IGVtYWlsLm1lc3NhZ2UKIGltcG9ydCBpbwogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IHBhdGNoCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpAQCAtMTYsNiArMTcsNyBAQAogZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQogaW1wb3J0IGNvbGxlY3Rpb25zCiAKKwogZGVmIGhleGVzY2FwZShjaGFyKToKICAgICAiIiJFc2NhcGUgY2hhciBhcyBSRkMgMjM5NiBzcGVjaWZpZXMiIiIKICAgICBoZXhfcmVwciA9IGhleChvcmQoY2hhcikpWzI6XS51cHBlcigpCkBAIC00Niw0OCArNDgsNzMgQEAKICAgICAgICAgcmV0dXJuIG9wZW5lci5vcGVuKHVybCwgZGF0YSkKIAogCitkZWYgZmFrZWh0dHAoZmFrZWRhdGEpOgorICAgIGNsYXNzIEZha2VTb2NrZXQoaW8uQnl0ZXNJTyk6CisgICAgICAgIGlvX3JlZnMgPSAxCisKKyAgICAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBGYWtlSFRUUENvbm5lY3Rpb24uYnVmID0gZGF0YQorCisgICAgICAgIGRlZiBtYWtlZmlsZShzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHNlbGYuaW9fcmVmcyArPSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGRlZiByZWFkKHNlbGYsIGFtdD1Ob25lKToKKyAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgICAgIHJldHVybiBiIiIKKyAgICAgICAgICAgIHJldHVybiBpby5CeXRlc0lPLnJlYWQoc2VsZiwgYW10KQorCisgICAgICAgIGRlZiByZWFkbGluZShzZWxmLCBsZW5ndGg9Tm9uZSk6CisgICAgICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYiIiCisgICAgICAgICAgICByZXR1cm4gaW8uQnl0ZXNJTy5yZWFkbGluZShzZWxmLCBsZW5ndGgpCisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5pb19yZWZzIC09IDEKKyAgICAgICAgICAgIGlmIHNlbGYuaW9fcmVmcyA9PSAwOgorICAgICAgICAgICAgICAgIGlvLkJ5dGVzSU8uY2xvc2Uoc2VsZikKKworICAgIGNsYXNzIEZha2VIVFRQQ29ubmVjdGlvbihodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbik6CisKKyAgICAgICAgIyBidWZmZXIgdG8gc3RvcmUgZGF0YSBmb3IgdmVyaWZpY2F0aW9uIGluIHVybG9wZW4gdGVzdHMuCisgICAgICAgIGJ1ZiA9IE5vbmUKKyAgICAgICAgZmFrZXNvY2sgPSBGYWtlU29ja2V0KGZha2VkYXRhKQorCisgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5mYWtlc29jaworCisgICAgcmV0dXJuIEZha2VIVFRQQ29ubmVjdGlvbgorCisKIGNsYXNzIEZha2VIVFRQTWl4aW4ob2JqZWN0KToKICAgICBkZWYgZmFrZWh0dHAoc2VsZiwgZmFrZWRhdGEpOgotICAgICAgICBjbGFzcyBGYWtlU29ja2V0KGlvLkJ5dGVzSU8pOgotICAgICAgICAgICAgaW9fcmVmcyA9IDEKLQotICAgICAgICAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6Ci0gICAgICAgICAgICAgICAgRmFrZUhUVFBDb25uZWN0aW9uLmJ1ZiA9IGRhdGEKLQotICAgICAgICAgICAgZGVmIG1ha2VmaWxlKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICAgICAgICAgIHNlbGYuaW9fcmVmcyArPSAxCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICAgICAgZGVmIHJlYWQoc2VsZiwgYW10PU5vbmUpOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlvLkJ5dGVzSU8ucmVhZChzZWxmLCBhbXQpCi0KLSAgICAgICAgICAgIGRlZiByZWFkbGluZShzZWxmLCBsZW5ndGg9Tm9uZSk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgICAgICAgICByZXR1cm4gaW8uQnl0ZXNJTy5yZWFkbGluZShzZWxmLCBsZW5ndGgpCi0KLSAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLmlvX3JlZnMgLT0gMQotICAgICAgICAgICAgICAgIGlmIHNlbGYuaW9fcmVmcyA9PSAwOgotICAgICAgICAgICAgICAgICAgICBpby5CeXRlc0lPLmNsb3NlKHNlbGYpCi0KLSAgICAgICAgY2xhc3MgRmFrZUhUVFBDb25uZWN0aW9uKGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKToKLQotICAgICAgICAgICAgIyBidWZmZXIgdG8gc3RvcmUgZGF0YSBmb3IgdmVyaWZpY2F0aW9uIGluIHVybG9wZW4gdGVzdHMuCi0gICAgICAgICAgICBidWYgPSBOb25lCi0KLSAgICAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IEZha2VTb2NrZXQoZmFrZWRhdGEpCi0KICAgICAgICAgc2VsZi5fY29ubmVjdGlvbl9jbGFzcyA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uCi0gICAgICAgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uID0gRmFrZUhUVFBDb25uZWN0aW9uCisgICAgICAgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uID0gZmFrZWh0dHAoZmFrZWRhdGEpCiAKICAgICBkZWYgdW5mYWtlaHR0cChzZWxmKToKICAgICAgICAgaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24gPSBzZWxmLl9jb25uZWN0aW9uX2NsYXNzCiAKIAorY2xhc3MgRmFrZUZUUE1peGluKG9iamVjdCk6CisgICAgZGVmIGZha2VmdHAoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VGdHBXcmFwcGVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgIHVzZXIsIHBhc3N3ZCwgaG9zdCwgcG9ydCwgZGlycywgdGltZW91dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdGVudD1UcnVlKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGRlZiByZXRyZmlsZShzZWxmLCBmaWxlLCB0eXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW8uQnl0ZXNJTygpLCAwCisKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5fZnRwd3JhcHBlcl9jbGFzcyA9IHVybGxpYi5yZXF1ZXN0LmZ0cHdyYXBwZXIKKyAgICAgICAgdXJsbGliLnJlcXVlc3QuZnRwd3JhcHBlciA9IEZha2VGdHBXcmFwcGVyCisKKyAgICBkZWYgdW5mYWtlZnRwKHNlbGYpOgorICAgICAgICB1cmxsaWIucmVxdWVzdC5mdHB3cmFwcGVyID0gc2VsZi5fZnRwd3JhcHBlcl9jbGFzcworCisKIGNsYXNzIHVybG9wZW5fRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0IHVybG9wZW4oKSBvcGVuaW5nIGEgdGVtcG9yYXJ5IGZpbGUuCiAKQEAgLTE5NCw3ICsyMjEsNyBAQAogICAgICAgICBzZWxmLmVudi5zZXQoJ05PX1BST1hZJywgJ2xvY2FsaG9zdCwgYW5vdGhlcmRvbWFpbi5jb20sIG5ld2RvbWFpbi5jb20nKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsbGliLnJlcXVlc3QucHJveHlfYnlwYXNzX2Vudmlyb25tZW50KCdhbm90aGVyZG9tYWluLmNvbScpKQogCi1jbGFzcyB1cmxvcGVuX0h0dHBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSwgRmFrZUhUVFBNaXhpbik6CitjbGFzcyB1cmxvcGVuX0h0dHBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSwgRmFrZUhUVFBNaXhpbiwgRmFrZUZUUE1peGluKToKICAgICAiIiJUZXN0IHVybG9wZW4oKSBvcGVuaW5nIGEgZmFrZSBodHRwIGNvbm5lY3Rpb24uIiIiCiAKICAgICBkZWYgY2hlY2tfcmVhZChzZWxmLCB2ZXIpOgpAQCAtMjM4LDcgKzI2NSw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfcmVhZChiIjEuMSIpCiAKICAgICBkZWYgdGVzdF9yZWFkX2JvZ3VzKHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgSU9FcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIE9TRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCiAgICAgICAgIHNlbGYuZmFrZWh0dHAoYicnJ0hUVFAvMS4xIDQwMSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZAogRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKIFNlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKQEAgLTI0NiwxMiArMjczLDEyIEBACiBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCiAnJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vcHl0aG9uLm9yZy8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9yZWRpcmVjdChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIElPRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCisgICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBPU0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgogICAgICAgICBzZWxmLmZha2VodHRwKGInJydIVFRQLzEuMSAzMDIgRm91bmQKIERhdGU6IFdlZCwgMDIgSmFuIDIwMDggMDM6MDM6NTQgR01UCiBTZXJ2ZXI6IEFwYWNoZS8xLjMuMzMgKERlYmlhbiBHTlUvTGludXgpIG1vZF9zc2wvMi44LjIyIE9wZW5TU0wvMC45LjdlCkBAIC0yNjYsMTkgKzI5MywyMCBAQAogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3NvY2tldChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgcmFpc2VzIElPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRvZXMgbm90IHNlbmQgYW55CisgICAgICAgICMgdXJsb3BlbigpIHJhaXNlcyBPU0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBkb2VzIG5vdCBzZW5kIGFueQogICAgICAgICAjIGRhdGEuICgjMTY4MDIzMCkKICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKICAgICBkZWYgdGVzdF9taXNzaW5nX2xvY2FsZmlsZShzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciAjMTA4MzYKLSAgICAgICAgIyAzLjMgLSBVUkxFcnJvciBpcyBub3QgY2FwdHVyZWQsIGV4cGxpY2l0IElPRXJyb3IgaXMgcmFpc2VkLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4oJ2ZpbGU6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQogCiAgICAgZGVmIHRlc3RfZmlsZV9ub3RleGlzdHMoc2VsZik6CiAgICAgICAgIGZkLCB0bXBfZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQpAQCAtMjkxLDIwICszMTksMzAgQEAKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICAgICAgb3MudW5saW5rKHRtcF9maWxlKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHRtcF9maWxlKSkKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpOgogICAgICAgICAgICAgdXJsb3Blbih0bXBfZmlsZXVybCkKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub2hvc3Qoc2VsZik6CiAgICAgICAgIHRlc3RfZnRwX3VybCA9ICdmdHA6Ly8vcGF0aCcKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKHRlc3RfZnRwX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub25leGlzdGluZyhzZWxmKToKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKCdmdHA6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKKworICAgIEBwYXRjaC5vYmplY3QodXJsbGliLnJlcXVlc3QsICdNQVhGVFBDQUNIRScsIDApCisgICAgZGVmIHRlc3RfZnRwX2NhY2hlX3BydW5pbmcoc2VsZik6CisgICAgICAgIHNlbGYuZmFrZWZ0cCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LmZ0cGNhY2hlWyd0ZXN0J10gPSB1cmxsaWIucmVxdWVzdC5mdHB3cmFwcGVyKCd1c2VyJywgJ3Bhc3MnLCAnbG9jYWxob3N0JywgMjEsIFtdKQorICAgICAgICAgICAgdXJsb3BlbignZnRwOi8vbG9jYWxob3N0JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudW5mYWtlZnRwKCkKIAogCiAgICAgZGVmIHRlc3RfdXNlcnBhc3NfaW51cmwoc2VsZik6CkBAIC0zNDEsNiArMzc5LDc5IEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIoKQogCitjbGFzcyB1cmxvcGVuX0RhdGFUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIGRhdGEgVVJMLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIHRleHQgY29udGFpbmluZyBVUkwgc3BlY2lhbC0gYW5kIHVuaWNvZGUtY2hhcmFjdGVycworICAgICAgICBzZWxmLnRleHQgPSAidGVzdCBkYXRhIFVSTHMgOjssJT0mIFx1MDBmNiBcdTAwYzQgIgorICAgICAgICAjIDJ4MSBwaXhlbCBSR0IgUE5HIGltYWdlIHdpdGggb25lIGJsYWNrIGFuZCBvbmUgd2hpdGUgcGl4ZWwKKyAgICAgICAgc2VsZi5pbWFnZSA9ICgKKyAgICAgICAgICAgIGInXHg4OVBOR1xyXG5ceDFhXG5ceDAwXHgwMFx4MDBccklIRFJceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAxXHgwOFx4MDJceDAwXHgwMFx4MDB7QFx4ZThceGRkXHgwMFx4MDBceDAwXHgwMXNSR0JceDAwXHhhZScKKyAgICAgICAgICAgIGInXHhjZVx4MWNceGU5XHgwMFx4MDBceDAwXHgwZklEQVRceDA4XHhkN2NgYGBceGY4XHhmZlx4ZmY/XHgwMCcKKyAgICAgICAgICAgIGInXHgwNlx4MDFceDAyXHhmZVxuby9ceDFlXHgwMFx4MDBceDAwXHgwMElFTkRceGFlQmBceDgyJykKKworICAgICAgICBzZWxmLnRleHRfdXJsID0gKAorICAgICAgICAgICAgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVURi04LHRlc3QlMjBkYXRhJTIwVVJMcyUyMCUzQSUzQiUyQyUyNSUzIgorICAgICAgICAgICAgIkQlMjYlMjAlQzMlQjYlMjAlQzMlODQlMjAiKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NCA9ICgKKyAgICAgICAgICAgICJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1JU08tODg1OS0xO2Jhc2U2NCxkR1Z6ZENCa1lYUmhJRlZTVEhNZ09qcyIKKyAgICAgICAgICAgICJzSlQwbUlQWWd4Q0ElM0QiKQorICAgICAgICAjIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMIHRoYXQgY29udGFpbnMgaWdub3JhYmxlIHNwYWNlcywKKyAgICAgICAgIyBzdWNoIGFzICJcbiIsICIgIiwgIiUwQSIsIGFuZCAiJTIwIi4KKyAgICAgICAgc2VsZi5pbWFnZV91cmwgPSAoCisgICAgICAgICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFCQ0FJQUFBQjdcbiIKKyAgICAgICAgICAgICJRT2pkQUFBQUFYTlNSMElBcnM0YzZRQUFBQTlKUkVGVUNOZGolMEFZR0JnJTJCUC8vUHdBR0FRTCUyQkNtOCAiCisgICAgICAgICAgICAidkhnQUFBQUJKUlU1RXJrSmdnZyUzRCUzRCUwQSUyMCIpCisKKyAgICAgICAgc2VsZi50ZXh0X3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLnRleHRfdXJsKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0KQorICAgICAgICBzZWxmLmltYWdlX3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLmltYWdlX3VybCkKKworICAgIGRlZiB0ZXN0X2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgb2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBoYXMgdGhlIHNwZWNpZmllZCBtZXRob2RzCisgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLAorICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIiwgImdldGNvZGUiLCAiX19pdGVyX18iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYudGV4dF91cmxfcmVzcCwgYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgbGFja3MgJXMgYXR0cmlidXRlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cikKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRleHRfdXJsX3Jlc3AuaW5mbygpLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ0lTTy04ODU5LTEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5pbmZvKClbJ2NvbnRlbnQtbGVuZ3RoJ10sCisgICAgICAgICAgICBzdHIobGVuKHNlbGYuaW1hZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJkYXRhOiwiKS5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ1VTLUFTQ0lJJyldKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi50ZXh0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLmdldHVybCgpLAorICAgICAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi5pbWFnZV91cmwpCisKKyAgICBkZWYgdGVzdF9yZWFkX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpKVsnY2hhcnNldCddKSwgc2VsZi50ZXh0KQorCisgICAgZGVmIHRlc3RfcmVhZF90ZXh0X2Jhc2U2NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AuaW5mbygpLmdldF9wYXJhbXMoKSlbJ2NoYXJzZXQnXSksCisgICAgICAgICAgICBzZWxmLnRleHQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2ltYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW1hZ2VfdXJsX3Jlc3AucmVhZCgpLCBzZWxmLmltYWdlKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19jb21tYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcix1cmxsaWIucmVxdWVzdC51cmxvcGVuLCdkYXRhOnRleHQvcGxhaW4nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9iYXNlNjRfZGF0YShzZWxmKToKKyAgICAgICAgIyBtaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsdXJsbGliLnJlcXVlc3QudXJsb3BlbiwnZGF0YTo7YmFzZTY0LENnPScpCisKIGNsYXNzIHVybHJldHJpZXZlX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB1cmxsaWIudXJscmV0cmlldmUoKSBvbiBsb2NhbCBmaWxlcyIiIgogCkBAIC0xMjkxLDYgKzE0MDIsNyBAQAogIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLmZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAjICAgICAgICAgZnRwLmNsb3NlKCkKIAorCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlVuaXQgdGVzdHMgZm9yIHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQppbmRleCBkMDY5MTM5Li45ZWEzOWE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF91cmxsaWIKIAogaW1wb3J0IG9zCiBpbXBvcnQgaW8KQEAgLTEwLDggKzExLDEwIEBACiBpbXBvcnQgdXJsbGliLnJlcXVlc3QKICMgVGhlIHByb3h5IGJ5cGFzcyBtZXRob2QgaW1wb3J0ZWQgYmVsb3cgaGFzIGxvZ2ljIHNwZWNpZmljIHRvIHRoZSBPU1gKICMgcHJveHkgY29uZmlnIGRhdGEgc3RydWN0dXJlIGJ1dCBpcyB0ZXN0YWJsZSBvbiBhbGwgcGxhdGZvcm1zLgotZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdCwgT3BlbmVyRGlyZWN0b3IsIF9wcm94eV9ieXBhc3NfbWFjb3N4X3N5c2NvbmYKK2Zyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IFJlcXVlc3QsIE9wZW5lckRpcmVjdG9yLCBfcGFyc2VfcHJveHksIF9wcm94eV9ieXBhc3NfbWFjb3N4X3N5c2NvbmYKK2Zyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQogaW1wb3J0IHVybGxpYi5lcnJvcgoraW1wb3J0IGh0dHAuY2xpZW50CiAKICMgWFhYCiAjIFJlcXVlc3QKQEAgLTExOCw2ICsxMjEsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVxLmdldF9oZWFkZXIoIk5vdC10aGVyZSIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCiAKKyAgICAgICAgcmVxLnJlbW92ZV9oZWFkZXIoIlNwYW0tZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVxLmhhc19oZWFkZXIoIlNwYW0tZWdncyIpKQorCisgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iLCAiRWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXEuaGFzX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKSkKKworICAgICAgICByZXEucmVtb3ZlX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5oYXNfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpKQorCiAKICAgICBkZWYgdGVzdF9wYXNzd29yZF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICBtZ3IgPSB1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3IoKQpAQCAtMzExLDggKzMyMyw3IEBACiAgICAgICAgIGlmIGJvZHk6CiAgICAgICAgICAgICBzZWxmLmRhdGEgPSBib2R5CiAgICAgICAgIGlmIHNlbGYucmFpc2Vfb25fZW5kaGVhZGVyczoKLSAgICAgICAgICAgIGltcG9ydCBzb2NrZXQKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6CiAgICAgICAgIHJldHVybiBNb2NrSFRUUFJlc3BvbnNlKE1vY2tGaWxlKCksIHt9LCAyMDAsICJPSyIpCiAKQEAgLTU5NywyNyArNjA4LDYgQEAKICAgICAgICAgICAgICAgICBpZiBhcmdzWzFdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXJnc1sxXSwgTW9ja1Jlc3BvbnNlKQogCi0gICAgZGVmIHRlc3RfbWV0aG9kX2RlcHJlY2F0aW9ucyhzZWxmKToKLSAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpCi0KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuYWRkX2RhdGEoImRhdGEiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfZGF0YSgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmhhc19kYXRhKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X2hvc3QoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfc2VsZWN0b3IoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5pc191bnZlcmlmaWFibGUoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfb3JpZ2luX3JlcV9ob3N0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X3R5cGUoKQotCi0KIGRlZiBzYW5lcGF0aG5hbWUydXJsKHBhdGgpOgogICAgIHRyeToKICAgICAgICAgcGF0aC5lbmNvZGUoInV0Zi04IikKQEAgLTY5MCw3ICs2ODAsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoaGVhZGVyc1siQ29udGVudC1sZW5ndGgiXSksIGxlbihkYXRhKSkKIAogICAgIGRlZiB0ZXN0X2ZpbGUoc2VsZik6Ci0gICAgICAgIGltcG9ydCBlbWFpbC51dGlscywgc29ja2V0CisgICAgICAgIGltcG9ydCBlbWFpbC51dGlscwogICAgICAgICBoID0gdXJsbGliLnJlcXVlc3QuRmlsZUhhbmRsZXIoKQogICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKIApAQCAtNzM3LDYgKzcyNyw3IEBACiAgICAgICAgIGZvciB1cmwgaW4gWwogICAgICAgICAgICAgImZpbGU6Ly9sb2NhbGhvc3Q6ODAlcyIgJSB1cmxwYXRoLAogICAgICAgICAgICAgImZpbGU6Ly8vZmlsZV9kb2VzX25vdF9leGlzdC50eHQiLAorICAgICAgICAgICAgImZpbGU6Ly9ub3QtYS1sb2NhbC1ob3N0LmNvbS8vZGlyL2ZpbGUudHh0IiwKICAgICAgICAgICAgICJmaWxlOi8vJXM6ODAlcy8lcyIgJSAoc29ja2V0LmdldGhvc3RieW5hbWUoJ2xvY2FsaG9zdCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5nZXRjd2QoKSwgVEVTVEZOKSwKICAgICAgICAgICAgICJmaWxlOi8vc29tZXJhbmRvbWhvc3Qub250aGVpbnRlcm5ldC5jb20lcy8lcyIgJQpAQCAtODEyLDcgKzgwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkZvbyIsICJiYXIiKSwgKCJTcGFtIiwgImVnZ3MiKV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAuZGF0YSwgZGF0YSkKIAotICAgICAgICAjIGNoZWNrIHNvY2tldC5lcnJvciBjb252ZXJ0ZWQgdG8gVVJMRXJyb3IKKyAgICAgICAgIyBjaGVjayBPU0Vycm9yIGNvbnZlcnRlZCB0byBVUkxFcnJvcgogICAgICAgICBodHRwLnJhaXNlX29uX2VuZGhlYWRlcnMgPSBUcnVlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvciwgaC5kb19vcGVuLCBodHRwLCByZXEpCiAKQEAgLTkxNyw2ICs5MDgsMzYgQEAKICAgICAgICAgICAgIHBfZHNfcmVxID0gaC5kb19yZXF1ZXN0Xyhkc19yZXEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sImV4YW1wbGUuY29tIikKIAorICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX3NldHRlcihzZWxmKToKKyAgICAgICAgIyBDaGVja3MgdG8gZW5zdXJlIHRoYXQgY29tcG9uZW50cyBhcmUgc2V0IGNvcnJlY3RseSBhZnRlciBzZXR0aW5nIHRoZQorICAgICAgICAjIGZ1bGxfdXJsIG9mIGEgUmVxdWVzdCBvYmplY3QKKworICAgICAgICB1cmxzID0gWworICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyI2JheicsCisgICAgICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXImc3BhbT1lZ2dzI2Jhc2gnLAorICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgIF0KKworICAgICAgICAjIHRlc3RpbmcgYSByZXVzYWJsZSByZXF1ZXN0IGluc3RhbmNlLCBidXQgdGhlIHVybCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgIyByZXF1aXJlZCwgc28ganVzdCB1c2UgYSBkdW1teSBvbmUgdG8gaW5zdGFudGlhdGUKKyAgICAgICAgciA9IFJlcXVlc3QoJ2h0dHA6Ly9leGFtcGxlLmNvbScpCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHIuZnVsbF91cmwgPSB1cmwKKyAgICAgICAgICAgIHBhcnNlZCA9IHVybHBhcnNlKHVybCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldF9mdWxsX3VybCgpLCB1cmwpCisgICAgICAgICAgICAjIGZ1bGxfdXJsIHNldHRlciB1c2VzIHNwbGl0dGFnIHRvIHNwbGl0IGludG8gY29tcG9uZW50cy4KKyAgICAgICAgICAgICMgc3BsaXR0YWcgc2V0cyB0aGUgZnJhZ21lbnQgYXMgTm9uZSB3aGlsZSB1cmxwYXJzZSBzZXRzIGl0IHRvICcnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZnJhZ21lbnQgb3IgJycsIHBhcnNlZC5mcmFnbWVudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2Uoci5nZXRfZnVsbF91cmwoKSkucXVlcnksIHBhcnNlZC5xdWVyeSkKKworICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX2RlbGV0ZXIoc2VsZik6CisgICAgICAgIHIgPSBSZXF1ZXN0KCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykKKyAgICAgICAgZGVsIHIuZnVsbF91cmwKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mdWxsX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNlbGVjdG9yLCAnJykKKwogICAgIGRlZiB0ZXN0X2ZpeHBhdGhfaW5fd2VpcmR1cmxzKHNlbGYpOgogICAgICAgICAjIElzc3VlNDQ5MzogdXJsbGliMiB0byBzdXBwbHkgJy8nIHdoZW4gdG8gdXJscyB3aGVyZSBwYXRoIGRvZXMgbm90CiAgICAgICAgICMgc3RhcnQgd2l0aCcvJwpAQCAtMTM3NCw2ICsxMzk1LDMzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGh0dHBfaGFuZGxlci5yZXF1ZXN0cyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaHR0cF9oYW5kbGVyLnJlcXVlc3RzWzBdLmhhc19oZWFkZXIoYXV0aF9oZWFkZXIpKQogCisgICAgZGVmIHRlc3RfaHR0cF9jbG9zZWQoc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhlIGNvbm5lY3Rpb24gaXMgY2xlYW5lZCB1cCB3aGVuIHRoZSByZXNwb25zZSBpcyBjbG9zZWQiIiIKKyAgICAgICAgZm9yICh0cmFuc2ZlciwgZGF0YSkgaW4gKAorICAgICAgICAgICAgKCJDb25uZWN0aW9uOiBjbG9zZSIsIGIiZGF0YSIpLAorICAgICAgICAgICAgKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIsIGIiNFxyXG5kYXRhXHJcbjBcclxuXHJcbiIpLAorICAgICAgICAgICAgKCJDb250ZW50LUxlbmd0aDogNCIsIGIiZGF0YSIpLAorICAgICAgICApOgorICAgICAgICAgICAgaGVhZGVyID0gIkhUVFAvMS4xIDIwMCBPS1xyXG57fVxyXG5cclxuIi5mb3JtYXQodHJhbnNmZXIpCisgICAgICAgICAgICBjb25uID0gdGVzdF91cmxsaWIuZmFrZWh0dHAoaGVhZGVyLmVuY29kZSgpICsgZGF0YSkKKyAgICAgICAgICAgIGhhbmRsZXIgPSB1cmxsaWIucmVxdWVzdC5BYnN0cmFjdEhUVFBIYW5kbGVyKCkKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9kdW1teS8iKQorICAgICAgICAgICAgcmVxLnRpbWVvdXQgPSBOb25lCisgICAgICAgICAgICB3aXRoIGhhbmRsZXIuZG9fb3Blbihjb25uLCByZXEpIGFzIHJlc3A6CisgICAgICAgICAgICAgICAgcmVzcC5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25uLmZha2Vzb2NrLmNsb3NlZCwKKyAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiBub3QgY2xvc2VkIHdpdGggeyFyfSIuZm9ybWF0KHRyYW5zZmVyKSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoZSBjb25uZWN0aW9uIGlzIGNsZWFuZWQgdXAgYWZ0ZXIgYW4gaW52YWxpZCByZXNwb25zZSIiIgorICAgICAgICBjb25uID0gdGVzdF91cmxsaWIuZmFrZWh0dHAoYiIiKQorICAgICAgICBoYW5kbGVyID0gdXJsbGliLnJlcXVlc3QuQWJzdHJhY3RIVFRQSGFuZGxlcigpCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9kdW1teS8iKQorICAgICAgICByZXEudGltZW91dCA9IE5vbmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhodHRwLmNsaWVudC5CYWRTdGF0dXNMaW5lKToKKyAgICAgICAgICAgIGhhbmRsZXIuZG9fb3Blbihjb25uLCByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25uLmZha2Vzb2NrLmNsb3NlZCwgIkNvbm5lY3Rpb24gbm90IGNsb3NlZCIpCisKIAogY2xhc3MgTWlzY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTQxOCw2ICsxNDY2LDIxIEBACiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15SFRUUEhhbmRsZXIpCiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15T3RoZXJIVFRQSGFuZGxlcikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIG5ldHdvcmsgYWNjZXNzJykKKyAgICBkZWYgdGVzdF9pc3N1ZTE2NDY0KHNlbGYpOgorICAgICAgICBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoKQorICAgICAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlcXVlc3QuZGF0YSkKKworICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0LCAiMSIuZW5jb2RlKCJ1cy1hc2NpaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMSIsIHJlcXVlc3QuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMSIsIHJlcXVlc3QuZ2V0X2hlYWRlcigiQ29udGVudC1sZW5ndGgiKSkKKworICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0LCAiMTIzNDU2Nzg5MCIuZW5jb2RlKCJ1cy1hc2NpaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMTIzNDU2Nzg5MCIsIHJlcXVlc3QuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTAiLCByZXF1ZXN0LmdldF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpCisKICAgICBkZWYgdGVzdF9IVFRQRXJyb3JfaW50ZXJmYWNlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgSXNzdWUgMTMyMTEgcmV2ZWFscyB0aGF0IEhUVFBFcnJvciBkaWRuJ3QgaW1wbGVtZW50IHRoZSBVUkxFcnJvcgpAQCAtMTQyOSwyMyArMTQ5Miw2OCBAQAogICAgICAgICBlcnIgPSB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKHVybCwgY29kZSwgbXNnLCBoZHJzLCBmcCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAncmVhc29uJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnJlYXNvbiwgJ3NvbWV0aGluZyBiYWQgaGFwcGVuZWQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdoZHJzJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmhkcnMsICdDb250ZW50LUxlbmd0aDogNDInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdoZWFkZXJzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmhlYWRlcnMsICdDb250ZW50LUxlbmd0aDogNDInKQogICAgICAgICBleHBlY3RlZF9lcnJtc2cgPSAnSFRUUCBFcnJvciAlczogJXMnICUgKGVyci5jb2RlLCBlcnIubXNnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCBleHBlY3RlZF9lcnJtc2cpCiAKKyAgICBkZWYgdGVzdF9wYXJzZV9wcm94eShzZWxmKToKKyAgICAgICAgcGFyc2VfcHJveHlfdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgncHJveHkuZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb20nKSksCisgICAgICAgICAgICAoJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnLAorICAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpKSwKKyAgICAgICAgICAgICgncHJveHkuZXhhbXBsZS5jb20nLCAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgKCdwcm94eS5leGFtcGxlLmNvbTozMTI4JywKKyAgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKSksCisgICAgICAgICAgICAjIFRoZSBhdXRob3JpdHkgY29tcG9uZW50IG1heSBvcHRpb25hbGx5IGluY2x1ZGUgdXNlcmluZm8KKyAgICAgICAgICAgICMgKGFzc3VtZWQgdG8gYmUgIyB1c2VybmFtZTpwYXNzd29yZCk6CisgICAgICAgICAgICAoJ2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbScsCisgICAgICAgICAgICAgKE5vbmUsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb20nKSksCisgICAgICAgICAgICAoJ2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbTozMTI4JywKKyAgICAgICAgICAgICAoTm9uZSwgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykpLAorICAgICAgICAgICAgI0V4YW1wbGVzIHdpdGggVVJMUworICAgICAgICAgICAgKCdodHRwOi8vcHJveHkuZXhhbXBsZS5jb20vJywKKyAgICAgICAgICAgICAoJ2h0dHAnLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb20nKSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9wcm94eS5leGFtcGxlLmNvbTozMTI4LycsCisgICAgICAgICAgICAgKCdodHRwJywgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9qb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb20vJywKKyAgICAgICAgICAgICAoJ2h0dHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgKCdodHRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tOjMxMjgnLAorICAgICAgICAgICAgICgnaHR0cCcsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpKSwKKyAgICAgICAgICAgICMgRXZlcnl0aGluZyBhZnRlciB0aGUgYXV0aG9yaXR5IGlzIGlnbm9yZWQKKyAgICAgICAgICAgICgnZnRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tL3J1YmJpc2g6MzEyOCcsCisgICAgICAgICAgICAgKCdmdHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgIyBUZXN0IGZvciBubyB0cmFpbGluZyAnLycgY2FzZQorICAgICAgICAgICAgKCdodHRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tJywKKyAgICAgICAgICAgICAoJ2h0dHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykpCisgICAgICAgIF0KKworICAgICAgICBmb3IgdGMsIGV4cGVjdGVkIGluIHBhcnNlX3Byb3h5X3Rlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9wYXJzZV9wcm94eSh0YyksIGV4cGVjdGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9wYXJzZV9wcm94eSwgJ2ZpbGU6L2Z0cC5leGFtcGxlLmNvbScpLAogCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIFB1dFJlcXVlc3QoUmVxdWVzdCk6CisgICAgICAgIG1ldGhvZD0nUFVUJwogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmdldCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIpCiAgICAgICAgIHNlbGYucG9zdCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJYLVRlc3QiOiAidGVzdCJ9KQorICAgICAgICBzZWxmLmhlYWQgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLCBtZXRob2Q9J0hFQUQnKQorICAgICAgICBzZWxmLnB1dCA9IHNlbGYuUHV0UmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKKyAgICAgICAgc2VsZi5mb3JjZV9wb3N0ID0gc2VsZi5QdXRSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLAorICAgICAgICAgICAgbWV0aG9kPSJQT1NUIikKIAogICAgIGRlZiB0ZXN0X21ldGhvZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYucG9zdC5nZXRfbWV0aG9kKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkdFVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiSEVBRCIsIHNlbGYuaGVhZC5nZXRfbWV0aG9kKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBVVCIsIHNlbGYucHV0LmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYuZm9yY2VfcG9zdC5nZXRfbWV0aG9kKCkpCiAKICAgICBkZWYgdGVzdF9kYXRhKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZ2V0LmRhdGEpCkBAIC0xNDU0LDYgKzE1NjIsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZ2V0LmRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBPU1QiLCBzZWxmLmdldC5nZXRfbWV0aG9kKCkpCiAKKyAgICAjIGlzc3VlIDE2NDY0CisgICAgIyBpZiB3ZSBjaGFuZ2UgZGF0YSB3ZSBuZWVkIHRvIHJlbW92ZSBjb250ZW50LWxlbmd0aCBoZWFkZXIKKyAgICAjIChjYXVzZSBpdCdzIG1vc3QgcHJvYmFibHkgY2FsY3VsYXRlZCBmb3IgcHJldmlvdXMgdmFsdWUpCisgICAgZGVmIHRlc3Rfc2V0dGluZ19kYXRhX3Nob3VsZF9yZW1vdmVfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgIHNlbGYuZ2V0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC1sZW5ndGgiXSkKKyAgICAgICAgc2VsZi5nZXQuZGF0YSA9ICJzcGFtIgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorCisgICAgIyBpc3N1ZSAxNzQ4NSBzYW1lIGZvciBkZWxldGluZyBkYXRhLgorICAgIGRlZiB0ZXN0X2RlbGV0aW5nX2RhdGFfc2hvdWxkX3JlbW92ZV9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgc2VsZi5nZXQuZGF0YSA9ICdmb28nCisgICAgICAgIHNlbGYuZ2V0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtbGVuZ3RoIl0pCisgICAgICAgIGRlbCBzZWxmLmdldC5kYXRhCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisKICAgICBkZWYgdGVzdF9nZXRfZnVsbF91cmwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQuZ2V0X2Z1bGxfdXJsKCkpCkBAIC0xNDk1LDIxICsxNjIyLDEzIEBACiAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfZnVsbF91cmwoKSwgdXJsKQogCi0gICAgZGVmIHRlc3RfSFRUUEVycm9yX2ludGVyZmFjZV9jYWxsKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgSXNzdWUgMTU3MDEgLSBIVFRQRXJyb3IgaW50ZXJmYWNlIGhhcyBpbmZvIG1ldGhvZCBhdmFpbGFibGUgZnJvbSBVUkxFcnJvcgotICAgICAgICAiIiIKLSAgICAgICAgZXJyID0gdXJsbGliLnJlcXVlc3QuSFRUUEVycm9yKG1zZz0ic29tZXRoaW5nIGJhZCBoYXBwZW5lZCIsIHVybD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlPU5vbmUsIGhkcnM9J0NvbnRlbnQtTGVuZ3RoOjQyJywgZnA9Tm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAncmVhc29uJykpCi0gICAgICAgIGFzc2VydCBoYXNhdHRyKGVyciwgJ3JlYXNvbicpCi0gICAgICAgIGFzc2VydCBoYXNhdHRyKGVyciwgJ2luZm8nKQotICAgICAgICBhc3NlcnQgY2FsbGFibGUoZXJyLmluZm8pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVyci5pbmZvKCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnIuaW5mbyBjYWxsIGZhaWxlZC4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5pbmZvKCksICJDb250ZW50LUxlbmd0aDo0MiIpCisgICAgZGVmIHRlc3RfdXJsX2Z1bGx1cmxfZ2V0X2Z1bGxfdXJsKHNlbGYpOgorICAgICAgICB1cmxzID0gWydodHRwOi8vZG9jcy5weXRob24ub3JnJywKKyAgICAgICAgICAgICAgICAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3VybGxpYjIuaHRtbCNPSycsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8/cXM9cXVlcnkjZnJhZ21lbnQ9dHJ1ZScgXQorICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9mdWxsX3VybCgpLCByZXEuZnVsbF91cmwpCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdXJsbGliMgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CmluZGV4IDMxYzYzOGYuLmQwYThhMGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKQEAgLTEsMyArMSw0IEBACitpbXBvcnQgYmFzZTY0CiBpbXBvcnQgb3MKIGltcG9ydCBlbWFpbAogaW1wb3J0IHVybGxpYi5wYXJzZQpAQCAtNSw5ICs2LDE1IEBACiBpbXBvcnQgaHR0cC5zZXJ2ZXIKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGhhc2hsaWIKKwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCiAKIGhlcmUgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCiAjIFNlbGYtc2lnbmVkIGNlcnQgZmlsZSBmb3IgJ2xvY2FsaG9zdCcKQEAgLTE1LDYgKzIyLDcgQEAKICMgU2VsZi1zaWduZWQgY2VydCBmaWxlIGZvciAnZmFrZWhvc3RuYW1lJwogQ0VSVF9mYWtlaG9zdG5hbWUgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ2tleWNlcnQyLnBlbScpCiAKKwogIyBMb29wYmFjayBodHRwIHNlcnZlciBpbmZyYXN0cnVjdHVyZQogCiBjbGFzcyBMb29wYmFja0h0dHBTZXJ2ZXIoaHR0cC5zZXJ2ZXIuSFRUUFNlcnZlcik6CkBAIC01MywxNCArNjEsMTEgQEAKICAgICAgICAgcmVxdWVzdF9oYW5kbGVyLnByb3RvY29sX3ZlcnNpb24gPSAiSFRUUC8xLjAiCiAgICAgICAgIHNlbGYuaHR0cGQgPSBMb29wYmFja0h0dHBTZXJ2ZXIoKCIxMjcuMC4wLjEiLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hhbmRsZXIpCi0gICAgICAgICNwcmludCAiU2VydmluZyBIVFRQIG9uICVzIHBvcnQgJXMiICUgKHNlbGYuaHR0cGQuc2VydmVyX25hbWUsCi0gICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaHR0cGQuc2VydmVyX3BvcnQpCiAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuaHR0cGQuc2VydmVyX3BvcnQKIAogICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgICAiIiJTdG9wcyB0aGUgd2Vic2VydmVyIGlmIGl0J3MgY3VycmVudGx5IHJ1bm5pbmcuIiIiCiAKLSAgICAgICAgIyBTZXQgdGhlIHN0b3AgZmxhZy4KICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXIgPSBUcnVlCiAKICAgICAgICAgc2VsZi5qb2luKCkKQEAgLTE5Myw2ICsxOTgsNDkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV0dXJuX2F1dGhfY2hhbGxlbmdlKHJlcXVlc3RfaGFuZGxlcikKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKKworY2xhc3MgQmFzaWNBdXRoSGFuZGxlcihodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICAiIiJIYW5kbGVyIGZvciBwZXJmb3JtaW5nIGJhc2ljIGF1dGhlbnRpY2F0aW9uLiIiIgorICAgICMgU2VydmVyIHNpZGUgdmFsdWVzCisgICAgVVNFUiA9ICd0ZXN0VXNlcicKKyAgICBQQVNTV0QgPSAndGVzdFBhc3MnCisgICAgUkVBTE0gPSAnVGVzdCcKKyAgICBVU0VSX1BBU1NXRCA9ICIlczolcyIgJSAoVVNFUiwgUEFTU1dEKQorICAgIEVOQ09ERURfQVVUSCA9IGJhc2U2NC5iNjRlbmNvZGUoVVNFUl9QQVNTV0QuZW5jb2RlKCdhc2NpaScpKS5kZWNvZGUoJ2FzY2lpJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKKyAgICAgICAgIyBTdXBwcmVzcyBjb25zb2xlIGxvZyBtZXNzYWdlCisgICAgICAgIHBhc3MKKworICAgIGRlZiBkb19IRUFEKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC9odG1sIikKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisKKyAgICBkZWYgZG9fQVVUSEhFQUQoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSg0MDEpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIldXVy1BdXRoZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCIlc1wiIiAlIHNlbGYuUkVBTE0pCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0ZXh0L2h0bWwiKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKworICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmhlYWRlcnMuZ2V0KCJBdXRob3JpemF0aW9uIiwgIiIpOgorICAgICAgICAgICAgc2VsZi5kb19BVVRISEVBRCgpCisgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGIiTm8gQXV0aCBoZWFkZXIgcmVjZWl2ZWQiKQorICAgICAgICBlbGlmIHNlbGYuaGVhZGVycy5nZXQoCisgICAgICAgICAgICAgICAgIkF1dGhvcml6YXRpb24iLCAiIikgPT0gIkJhc2ljICIgKyBzZWxmLkVOQ09ERURfQVVUSDoKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoYiJJdCB3b3JrcyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFJlcXVlc3QgVW5hdXRob3JpemVkCisgICAgICAgICAgICBzZWxmLmRvX0FVVEhIRUFEKCkKKworCisKICMgUHJveHkgdGVzdCBpbmZyYXN0cnVjdHVyZQogCiBjbGFzcyBGYWtlUHJveHlIYW5kbGVyKGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIpOgpAQCAtMjI4LDYgKzI3Niw0NCBAQAogCiAjIFRlc3QgY2FzZXMKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAiVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuIikKK2NsYXNzIEJhc2ljQXV0aFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBVU0VSID0gInRlc3RVc2VyIgorICAgIFBBU1NXRCA9ICJ0ZXN0UGFzcyIKKyAgICBJTkNPUlJFQ1RfUEFTU1dEID0gIkluY29ycmVjdCIKKyAgICBSRUFMTSA9ICJUZXN0IgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihCYXNpY0F1dGhUZXN0cywgc2VsZikuc2V0VXAoKQorICAgICAgICAjIFdpdGggQmFzaWMgQXV0aGVudGljYXRpb24KKyAgICAgICAgZGVmIGh0dHBfc2VydmVyX3dpdGhfYmFzaWNfYXV0aF9oYW5kbGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByZXR1cm4gQmFzaWNBdXRoSGFuZGxlcigqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuc2VydmVyID0gTG9vcGJhY2tIdHRwU2VydmVyVGhyZWFkKGh0dHBfc2VydmVyX3dpdGhfYmFzaWNfYXV0aF9oYW5kbGVyKQorICAgICAgICBzZWxmLnNlcnZlcl91cmwgPSAnaHR0cDovLzEyNy4wLjAuMTolcycgJSBzZWxmLnNlcnZlci5wb3J0CisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIucmVhZHkud2FpdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorICAgICAgICBzdXBlcihCYXNpY0F1dGhUZXN0cywgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXV0aF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBhaCA9IHVybGxpYi5yZXF1ZXN0LkhUVFBCYXNpY0F1dGhIYW5kbGVyKCkKKyAgICAgICAgYWguYWRkX3Bhc3N3b3JkKHNlbGYuUkVBTE0sIHNlbGYuc2VydmVyX3VybCwgc2VsZi5VU0VSLCBzZWxmLlBBU1NXRCkKKyAgICAgICAgdXJsbGliLnJlcXVlc3QuaW5zdGFsbF9vcGVuZXIodXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKGFoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oc2VsZi5zZXJ2ZXJfdXJsKSkKKyAgICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5IVFRQRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkJhc2ljIGF1dGggZmFpbGVkIGZvciB0aGUgdXJsOiAlcyIsIHNlbGYuc2VydmVyX3VybCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F1dGhfaHR0cGVycm9yKHNlbGYpOgorICAgICAgICBhaCA9IHVybGxpYi5yZXF1ZXN0LkhUVFBCYXNpY0F1dGhIYW5kbGVyKCkKKyAgICAgICAgYWguYWRkX3Bhc3N3b3JkKHNlbGYuUkVBTE0sIHNlbGYuc2VydmVyX3VybCwgc2VsZi5VU0VSLCBzZWxmLklOQ09SUkVDVF9QQVNTV0QpCisgICAgICAgIHVybGxpYi5yZXF1ZXN0Lmluc3RhbGxfb3BlbmVyKHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcihhaCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5IVFRQRXJyb3IsIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4sIHNlbGYuc2VydmVyX3VybCkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4iKQogY2xhc3MgUHJveHlBdXRoVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIFVSTCA9ICJodHRwOi8vbG9jYWxob3N0IgogCkBAIC0yNDAsNiArMzI2LDcgQEAKICAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyID0gRGlnZXN0QXV0aEhhbmRsZXIoKQogICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3VzZXJzKHtzZWxmLlVTRVI6IHNlbGYuUEFTU1dEfSkKICAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9yZWFsbShzZWxmLlJFQUxNKQorICAgICAgICAjIFdpdGggRGlnZXN0IEF1dGhlbnRpY2F0aW9uLgogICAgICAgICBkZWYgY3JlYXRlX2Zha2VfcHJveHlfaGFuZGxlcigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmV0dXJuIEZha2VQcm94eUhhbmRsZXIoc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLCAqYXJncywgKiprd2FyZ3MpCiAKQEAgLTMzOSw2ICs0MjYsNyBAQAogICAgIHJldHVybiBGYWtlSFRUUFJlcXVlc3RIYW5kbGVyCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAiVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuIikKIGNsYXNzIFRlc3RVcmxvcGVuKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0cyB1cmxsaWIucmVxdWVzdC51cmxvcGVuIHVzaW5nIHRoZSBuZXR3b3JrLgogCkBAIC0zODcsMTQgKzQ3NSwxNCBAQAogICAgICAgICBoYW5kbGVyLnBvcnQgPSBwb3J0CiAgICAgICAgIHJldHVybiBoYW5kbGVyCiAKLSAgICBkZWYgc3RhcnRfaHR0cHNfc2VydmVyKHNlbGYsIHJlc3BvbnNlcz1Ob25lLCBjZXJ0ZmlsZT1DRVJUX2xvY2FsaG9zdCk6CisgICAgZGVmIHN0YXJ0X2h0dHBzX3NlcnZlcihzZWxmLCByZXNwb25zZXM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgICBpZiBub3QgaGFzYXR0cih1cmxsaWIucmVxdWVzdCwgJ0hUVFBTSGFuZGxlcicpOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnc3NsIHN1cHBvcnQgcmVxdWlyZWQnKQogICAgICAgICBmcm9tIHRlc3Quc3NsX3NlcnZlcnMgaW1wb3J0IG1ha2VfaHR0cHNfc2VydmVyCiAgICAgICAgIGlmIHJlc3BvbnNlcyBpcyBOb25lOgogICAgICAgICAgICAgcmVzcG9uc2VzID0gWygyMDAsIFtdLCBiIndlIGNhcmUgYSBiaXQiKV0KICAgICAgICAgaGFuZGxlciA9IEdldFJlcXVlc3RIYW5kbGVyKHJlc3BvbnNlcykKLSAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGU9Y2VydGZpbGUsIGhhbmRsZXJfY2xhc3M9aGFuZGxlcikKKyAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgaGFuZGxlcl9jbGFzcz1oYW5kbGVyLCAqKmt3YXJncykKICAgICAgICAgaGFuZGxlci5wb3J0ID0gc2VydmVyLnBvcnQKICAgICAgICAgcmV0dXJuIGhhbmRsZXIKIApAQCAtNDg0LDYgKzU3MiwyMSBAQAogICAgICAgICAgICAgc2VsZi51cmxvcGVuKCJodHRwczovL2xvY2FsaG9zdDolcy9iaXphcnJlIiAlIGhhbmRsZXIucG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRlZmF1bHQ9VHJ1ZSkKIAorICAgIGRlZiB0ZXN0X2h0dHBzX3NuaShzZWxmKToKKyAgICAgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzc2wgbW9kdWxlIHJlcXVpcmVkIikKKyAgICAgICAgaWYgbm90IHNzbC5IQVNfU05JOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiU05JIHN1cHBvcnQgcmVxdWlyZWQgaW4gT3BlblNTTCIpCisgICAgICAgIHNuaV9uYW1lID0gTm9uZQorICAgICAgICBkZWYgY2Jfc25pKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHNuaV9uYW1lCisgICAgICAgICAgICBzbmlfbmFtZSA9IHNlcnZlcl9uYW1lCisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2Jfc25pKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9odHRwc19zZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjZXJ0ZmlsZT1DRVJUX2xvY2FsaG9zdCkKKyAgICAgICAgc2VsZi51cmxvcGVuKCJodHRwczovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25pX25hbWUsICJsb2NhbGhvc3QiKQorCiAgICAgZGVmIHRlc3Rfc2VuZGluZ19oZWFkZXJzKHNlbGYpOgogICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoKQogICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KCJodHRwOi8vbG9jYWxob3N0OiVzLyIgJSBoYW5kbGVyLnBvcnQsCkBAIC01MzAsNyArNjMzLDcgQEAKICAgICAgICAgIyBzbyB3ZSBydW4gdGhlIHRlc3Qgb25seSB3aGVuIC11bmV0d29yay8tdWFsbCBpcyBzcGVjaWZpZWQgdG8KICAgICAgICAgIyBtaXRpZ2F0ZSB0aGUgcHJvYmxlbSBhIGJpdCAoc2VlICMxNzU2NCkKICAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2l2ZW4gdGhhdCBib3RoIFZlcmlTaWduIGFuZCB2YXJpb3VzIElTUHMgaGF2ZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBwYXN0IG9yIGFyZSBwcmVzZW50bHkgaGlqYWNraW5nIHZhcmlvdXMgaW52YWxpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbWFpbiBuYW1lIHJlcXVlc3RzIGluIGFuIGF0dGVtcHQgdG8gYm9vc3QgdHJhZmZpYwpAQCAtNTcxLDkgKzY3NCwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4ICsgMSwgbGVuKGxpbmVzKSkKIAogCi1Ac3VwcG9ydC5yZWFwX3RocmVhZHMKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQcm94eUF1dGhUZXN0cywgVGVzdFVybG9wZW4pCit0aHJlYWRzX2tleSA9IE5vbmUKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgIyBTdG9yZSB0aGUgdGhyZWFkaW5nX3NldHVwIGluIGEga2V5IGFuZCBlbnN1cmUgdGhhdCBpdCBpcyBjbGVhbmVkIHVwCisgICAgIyBpbiB0aGUgdGVhckRvd24KKyAgICBnbG9iYWwgdGhyZWFkc19rZXkKKyAgICB0aHJlYWRzX2tleSA9IHN1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKworZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgaWYgdGhyZWFkc19rZXk6CisgICAgICAgIHN1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAodGhyZWFkc19rZXkpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQppbmRleCBmNTBhMmJiLi4yNjYyNzU2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CkBAIC0xMiw2ICsxMiw4IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgc3NsID0gTm9uZQogCitzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKKwogVElNRU9VVCA9IDYwICAjIHNlY29uZHMKIAogCkBAIC04MSw3ICs4Myw3IEBACiAgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CiAgICAgICAgICMgY2FsbGluZyAuY2xvc2UoKSBvbiB1cmxsaWIyJ3MgcmVzcG9uc2Ugb2JqZWN0cyBzaG91bGQgY2xvc2UgdGhlCiAgICAgICAgICMgdW5kZXJseWluZyBzb2NrZXQKLSAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgogICAgICAgICAgICAgcmVzcG9uc2UgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCkKICAgICAgICAgICAgIHNvY2sgPSByZXNwb25zZS5mcApAQCAtMTAxLDkgKzEwMyw5IEBACiAKICAgICBkZWYgdGVzdF9mdHAoc2VsZik6CiAgICAgICAgIHVybHMgPSBbCi0gICAgICAgICAgICAnZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9SRUFETUUnLAotICAgICAgICAgICAgJ2Z0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvbm9uLWV4aXN0ZW50LWZpbGUnLAotICAgICAgICAgICAgIydmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGVlbm94L2tlcm5lbC90ZXN0JywKKyAgICAgICAgICAgICdmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vUkVBRE1FJywKKyAgICAgICAgICAgICgnZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL25vbi1leGlzdGVudC1maWxlJywKKyAgICAgICAgICAgICBOb25lLCB1cmxsaWIuZXJyb3IuVVJMRXJyb3IpLAogICAgICAgICAgICAgJ2Z0cDovL2dhdGVrZWVwZXIucmVzZWFyY2guY29tcGFxLmNvbS9wdWIvREVDL1NSQycKICAgICAgICAgICAgICAgICAnL3Jlc2VhcmNoLXJlcG9ydHMvMDBSRUFETUUtTGVnYWwtUnVsZXMtUmVncycsCiAgICAgICAgICAgICBdCkBAIC0xNjIsNiArMTY0LDE0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXR1cmwoKSwKICAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCNnbG9zc2FyeSIpCiAKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF91cmxfd2l0aGZyYWcoc2VsZik6CisgICAgICAgIHJlZGlyZWN0X3VybF93aXRoX2ZyYWcgPSAiaHR0cDovL2JpdC5seS8xaVNIVG9UIgorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHJlZGlyZWN0X3VybF93aXRoX2ZyYWcpOgorICAgICAgICAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChyZWRpcmVjdF91cmxfd2l0aF9mcmFnKQorICAgICAgICAgICAgcmVzID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXR1cmwoKSwKKyAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuNC9nbG9zc2FyeS5odG1sI3Rlcm0tZ2xvYmFsLWludGVycHJldGVyLWxvY2siKQorCiAgICAgZGVmIHRlc3RfY3VzdG9tX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CkBAIC0yMDUsMzkgKzIxNSwzOSBAQAogICAgICAgICAgICAgdXJsb3BlbiA9IF93cmFwX3dpdGhfcmV0cnlfdGhyaWNlKHVybG9wZW4sIHVybGxpYi5lcnJvci5VUkxFcnJvcikKIAogICAgICAgICBmb3IgdXJsIGluIHVybHM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVybCwgdHVwbGUpOgotICAgICAgICAgICAgICAgIHVybCwgcmVxLCBleHBlY3RlZF9lcnIgPSB1cmwKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVxID0gZXhwZWN0ZWRfZXJyID0gTm9uZQotCi0gICAgICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6Ci0gICAgICAgICAgICAgICAgZGVidWcodXJsKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZiA9IHVybG9wZW4odXJsLCByZXEsIFRJTUVPVVQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhlcnIpCi0gICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2VycjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlczogJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfZXJyLCB1cmwsIHJlcSwgdHlwZShlcnIpLCBlcnIpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyciwgZXhwZWN0ZWRfZXJyLCBtc2cpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyWzBdLCBzb2NrZXQudGltZW91dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiPHRpbWVvdXQ6ICVzPiIgJSB1cmwsIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodXJsPXVybCk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh1cmwsIHR1cGxlKToKKyAgICAgICAgICAgICAgICAgICAgdXJsLCByZXEsIGV4cGVjdGVkX2VyciA9IHVybAogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlcSA9IGV4cGVjdGVkX2VyciA9IE5vbmUKKworICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRpbWVfb3V0LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuc29ja2V0X3BlZXJfcmVzZXQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5pb2Vycm9yX3BlZXJfcmVzZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gZi5yZWFkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygicmVhZCAlZCBieXRlcyIgJSBsZW4oYnVmKSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIjx0aW1lb3V0OiAlcz4iICUgdXJsLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZGVidWcoIioqKioqKioqIG5leHQgdXJsIGNvbWluZyB1cC4uLiIpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSB1cmxvcGVuKHVybCwgcmVxLCBUSU1FT1VUKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9lcnI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gKCJEaWRuJ3QgZ2V0IGV4cGVjdGVkIGVycm9yKHMpICVzIGZvciAlcyAlcywgZ290ICVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfZXJyLCB1cmwsIHJlcSwgdHlwZShlcnIpLCBlcnIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlcnIsIGV4cGVjdGVkX2VyciwgbXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgdXJsbGliLmVycm9yLlVSTEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyWzBdLCBzb2NrZXQudGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIjx0aW1lb3V0OiAlcz4iICUgdXJsLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGltZV9vdXQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuc29ja2V0X3BlZXJfcmVzZXQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuaW9lcnJvcl9wZWVyX3Jlc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygicmVhZCAlZCBieXRlcyIgJSBsZW4oYnVmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiPHRpbWVvdXQ6ICVzPiIgJSB1cmwsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogCiAgICAgZGVmIF9leHRyYV9oYW5kbGVycyhzZWxmKToKICAgICAgICAgaGFuZGxlcnMgPSBbXQpAQCAtMjUzLDcgKzI2Myw3IEBACiBjbGFzcyBUaW1lb3V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfaHR0cF9iYXNpYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkpCi0gICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCwgdGltZW91dD1Ob25lKToKICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1LmNsb3NlKQpAQCAtMjYxLDcgKzI3MSw3IEBACiAKICAgICBkZWYgdGVzdF9odHRwX2RlZmF1bHRfdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkpCi0gICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCiAgICAgICAgICAgICB0cnk6CkBAIC0yNzMsNyArMjgzLDcgQEAKIAogICAgIGRlZiB0ZXN0X2h0dHBfbm9fdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkpCi0gICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCiAgICAgICAgICAgICB0cnk6CkBAIC0yODQsNyArMjk0LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHUuZnAucmF3Ll9zb2NrLmdldHRpbWVvdXQoKSkKIAogICAgIGRlZiB0ZXN0X2h0dHBfdGltZW91dChzZWxmKToKLSAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCwgdGltZW91dD0xMjApCiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAodS5jbG9zZSkKQEAgLTMyOCwzNSArMzM4LDUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5mcC5yYXcuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKIAogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICJyZXF1aXJlcyBTU0wgc3VwcG9ydCIpCi1jbGFzcyBIVFRQU1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3NuaShzZWxmKToKLSAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBkaXNhYmxlZCAtIHRlc3Qgc2VydmVyIG5lZWRlZCIpCi0gICAgICAgICMgQ2hlY2tzIHRoYXQgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiB3b3JrcywgaWYgc3VwcG9ydGVkIGJ5IHRoZQotICAgICAgICAjIE9wZW5TU0wgbGlua2VkIHRvLgotICAgICAgICAjIFRoZSBzc2wgbW9kdWxlIGl0c2VsZiBkb2Vzbid0IGhhdmUgc2VydmVyLXNpZGUgc3VwcG9ydCBmb3IgU05JLAotICAgICAgICAjIHNvIHdlIHJlbHkgb24gYSB0aGlyZC1wYXJ0eSB0ZXN0IHNpdGUuCi0gICAgICAgIGV4cGVjdF9zbmkgPSBzc2wuSEFTX1NOSQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJYWFgiKToKLSAgICAgICAgICAgIHUgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJYWFgiKQotICAgICAgICAgICAgY29udGVudHMgPSB1LnJlYWRhbGwoKQotICAgICAgICAgICAgaWYgZXhwZWN0X3NuaToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiR3JlYXQiLCBjb250ZW50cykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIiVW5mb3J0dW5hdGVseSIsIGNvbnRlbnRzKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIiR3JlYXQiLCBjb250ZW50cykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiVW5mb3J0dW5hdGVseSIsIGNvbnRlbnRzKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBdXRoVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFNUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlck5ldHdvcmtUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVNvY2tldFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGltZW91dFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYl9yZXNwb25zZS5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliX3Jlc3BvbnNlLnB5CmluZGV4IGZkZDMzMjUuLjBlYjU5NDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliX3Jlc3BvbnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliX3Jlc3BvbnNlLnB5CkBAIC0xLDQyICsxLDU5IEBACiAiIiJVbml0IHRlc3RzIGZvciBjb2RlIGluIHVybGxpYi5yZXNwb25zZS4iIiIKIAotaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdXJsbGliLnJlc3BvbnNlCiBpbXBvcnQgdW5pdHRlc3QKIAotY2xhc3MgVGVzdEZpbGUob2JqZWN0KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQotCi0gICAgZGVmIHJlYWQoc2VsZiwgYnl0ZXMpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCi0KLWNsYXNzIFRlc3RhZGRiYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICMgVE9ETyhqaHlsdG9uKTogV3JpdGUgdGVzdHMgZm9yIG90aGVyIGZ1bmN0aW9uYWxpdHkgb2YgYWRkYmFzZSgpCitjbGFzcyBUZXN0UmVzcG9uc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmZwID0gVGVzdEZpbGUoKQotICAgICAgICBzZWxmLmFkZGJhc2UgPSB1cmxsaWIucmVzcG9uc2UuYWRkYmFzZShzZWxmLmZwKQorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuZnAgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKKyAgICAgICAgc2VsZi50ZXN0X2hlYWRlcnMgPSB7Ikhvc3QiOiAid3d3LnB5dGhvbi5vcmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiI6ICJjbG9zZSJ9CiAKICAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBhZGRiYXNlID0gdXJsbGliLnJlc3BvbnNlLmFkZGJhc2Uoc2VsZi5mcCkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYWRkYmFzZSwgdGVtcGZpbGUuX1RlbXBvcmFyeUZpbGVXcmFwcGVyKQorCiAgICAgICAgIGRlZiBmKCk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYWRkYmFzZSBhcyBzcGFtOgorICAgICAgICAgICAgd2l0aCBhZGRiYXNlIGFzIHNwYW06CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZnAuY2xvc2VkKQogICAgICAgICBmKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZnAuY2xvc2VkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0YWRkYmFzZSkKKyAgICBkZWYgdGVzdF9hZGRjbG9zZWhvb2soc2VsZik6CisgICAgICAgIGNsb3NlaG9va19jYWxsZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBjbG9zZWhvb2soKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNsb3NlaG9va19jYWxsZWQKKyAgICAgICAgICAgIGNsb3NlaG9va19jYWxsZWQgPSBUcnVlCisKKyAgICAgICAgY2xvc2Vob29rID0gdXJsbGliLnJlc3BvbnNlLmFkZGNsb3NlaG9vayhzZWxmLmZwLCBjbG9zZWhvb2spCisgICAgICAgIGNsb3NlaG9vay5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZnAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xvc2Vob29rX2NhbGxlZCkKKworICAgIGRlZiB0ZXN0X2FkZGluZm8oc2VsZik6CisgICAgICAgIGluZm8gPSB1cmxsaWIucmVzcG9uc2UuYWRkaW5mbyhzZWxmLmZwLCBzZWxmLnRlc3RfaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmluZm8oKSwgc2VsZi50ZXN0X2hlYWRlcnMpCisKKyAgICBkZWYgdGVzdF9hZGRpbmZvdXJsKHNlbGYpOgorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorICAgICAgICBjb2RlID0gMjAwCisgICAgICAgIGluZm91cmwgPSB1cmxsaWIucmVzcG9uc2UuYWRkaW5mb3VybChzZWxmLmZwLCBzZWxmLnRlc3RfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCwgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvdXJsLmluZm8oKSwgc2VsZi50ZXN0X2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb3VybC5nZXR1cmwoKSwgdXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm91cmwuZ2V0Y29kZSgpLCBjb2RlKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CmluZGV4IDMxYjYxZjEuLjRjOGJhMmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CkBAIC0xMCw2ICsxMCw4IEBACiBpbXBvcnQgdGltZQogCiAKK3N1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorCiBjbGFzcyBVUkxUaW1lb3V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBYWFggdGhpcyB0ZXN0IGRvZXNuJ3Qgc2VlbSB0byB0ZXN0IGFueXRoaW5nIHVzZWZ1bC4KIApAQCAtMjIsOCArMjQsOCBAQAogICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKIAogICAgIGRlZiB0ZXN0VVJMcmVhZChzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgid3d3LnB5dGhvbi5vcmciKToKLSAgICAgICAgICAgIGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgid3d3LmV4YW1wbGUuY29tIik6CisgICAgICAgICAgICBmID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKQogICAgICAgICAgICAgeCA9IGYucmVhZCgpCiAKIApAQCAtMzYsNyArMzgsNyBAQAogICAgIGZvciB0cmFuc3BhcmVudCByZWRpcmVjdGlvbiBoYXZlIGJlZW4gd3JpdHRlbi4KIAogICAgIHNldFVwIGlzIG5vdCB1c2VkIGZvciBhbHdheXMgY29uc3RydWN0aW5nIGEgY29ubmVjdGlvbiB0bwotICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8gc2luY2UgdGhlcmUgYSBmZXcgdGVzdHMgdGhhdCBkb24ndCB1c2UgdGhhdCBhZGRyZXNzCisgICAgaHR0cDovL3d3dy5leGFtcGxlLmNvbS8gc2luY2UgdGhlcmUgYSBmZXcgdGVzdHMgdGhhdCBkb24ndCB1c2UgdGhhdCBhZGRyZXNzCiAgICAgYW5kIG1ha2luZyBhIGNvbm5lY3Rpb24gaXMgZXhwZW5zaXZlIGVub3VnaCB0byB3YXJyYW50IG1pbmltaXppbmcgdW5uZWVkZWQKICAgICBjb25uZWN0aW9ucy4KIApAQCAtNTQsNyArNTYsNyBAQAogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgICMgU2ltcGxlIHRlc3QgZXhwZWN0ZWQgdG8gcGFzcy4KLSAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBmb3IgYXR0ciBpbiAoInJlYWQiLCAicmVhZGxpbmUiLCAicmVhZGxpbmVzIiwgImZpbGVubyIsICJjbG9zZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImluZm8iLCAiZ2V0dXJsIik6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob3Blbl91cmwsIGF0dHIpLCAib2JqZWN0IHJldHVybmVkIGZyb20gIgpAQCAtNjMsNyArNjUsNyBAQAogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgYm90aCByZWFkbGluZSBhbmQgcmVhZGxpbmVzLgotICAgICAgICB3aXRoIHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpIGFzIG9wZW5fdXJsOgorICAgICAgICB3aXRoIHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKSBhcyBvcGVuX3VybDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcGVuX3VybC5yZWFkbGluZSgpLCBieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmUgZGlkIG5vdCByZXR1cm4gYSBzdHJpbmciKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lcygpLCBsaXN0LApAQCAtNzEsNyArNzMsNyBAQAogCiAgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKICAgICAgICAgIyBUZXN0ICdpbmZvJy4KLSAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBpbmZvX29iaiA9IG9wZW5fdXJsLmluZm8oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm9fb2JqLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSAnaW5mbycgaXMgbm90IGFuICIKQEAgLTgwLDE0ICs4MiwxNCBAQAogCiAgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBzYW1lIFVSTCBhcyBvcGVuZWQgaXMgcmV0dXJuZWQgYnkgZ2V0dXJsLgotICAgICAgICBVUkwgPSAiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy8iCisgICAgICAgIFVSTCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIKICAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oVVJMKSBhcyBvcGVuX3VybDoKICAgICAgICAgICAgIGdvdHRlbl91cmwgPSBvcGVuX3VybC5nZXR1cmwoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3R0ZW5fdXJsLCBVUkwpCiAKICAgICBkZWYgdGVzdF9nZXRjb2RlKHNlbGYpOgogICAgICAgICAjIHRlc3QgZ2V0Y29kZSgpIHdpdGggdGhlIGZhbmN5IG9wZW5lciB0byBnZXQgNDA0IGVycm9yIGNvZGVzCi0gICAgICAgIFVSTCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvWFhYaW52YWxpZFhYWCIKKyAgICAgICAgVVJMID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vWFhYaW52YWxpZFhYWCIKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChVUkwpOgogICAgICAgICAgICAgb3Blbl91cmwgPSB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcigpLm9wZW4oVVJMKQogICAgICAgICAgICAgdHJ5OgpAQCAtMTAxLDcgKzEwMyw3IEBACiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsKSwgJ25vdCBhcHByb3ByaWF0ZSBmb3IgV2luZG93cycpCiAgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBmZCByZXR1cm5lZCBieSBmaWxlbm8gaXMgdmFsaWQuCi0gICAgICAgIHdpdGggc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIiwgdGltZW91dD1Ob25lKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCB0aW1lb3V0PU5vbmUpIGFzIG9wZW5fdXJsOgogICAgICAgICAgICAgZmQgPSBvcGVuX3VybC5maWxlbm8oKQogICAgICAgICAgICAgd2l0aCBvcy5mZG9wZW4oZmQsICdyYicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYucmVhZCgpLCAicmVhZGluZyBmcm9tIGZpbGUgY3JlYXRlZCB1c2luZyBmZCAiCkBAIC0xMjEsMTYgKzEyMywxNSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBUaGlzIGhhcHBlbnMgd2l0aCBzb21lIG92ZXJ6ZWFsb3VzIEROUyBwcm92aWRlcnMgc3VjaCBhcyBPcGVuRE5TCiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBzaG91bGQgbm90IHJlc29sdmUgZm9yIHRlc3QgdG8gd29yayIgJSBib2d1c19kb21haW4pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgU0YgcGF0Y2ggODA5OTE1OiAgSW4gU2VwIDIwMDMsIFZlcmlTaWduIHN0YXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBoaWdoamFja2luZyBpbnZhbGlkIC5jb20gYW5kIC5uZXQgYWRkcmVzc2VzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgYm9vc3QgdHJhZmZpYyB0byB0aGVpciBvd24gc2l0ZS4gIFRoaXMgdGVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0ZWQgZmFpbGluZyB0aGVuLiAgT25lIGhvcGVzIHRoZSAuaW52YWxpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbWFpbiB3aWxsIGJlIHNwYXJlZCB0byBzZXJ2ZSBpdHMgZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHB1cnBvc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgdXJsbGliLnVybG9wZW4sICJodHRwOi8vd3d3LnNhZGZsa2pzYXNhZGYuY29tLyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLyIpCisgICAgICAgIGZhaWx1cmVfZXhwbGFuYXRpb24gPSAoJ29wZW5pbmcgYW4gaW52YWxpZCBVUkwgZGlkIG5vdCByYWlzZSBPU0Vycm9yOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbiBiZSBjYXVzZWQgYnkgYSBicm9rZW4gRE5TIHNlcnZlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhlLmcuIHJldHVybnMgNDA0IG9yIGhpamFja3MgcGFnZSknKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1mYWlsdXJlX2V4cGxhbmF0aW9uKToKKyAgICAgICAgICAgICMgU0YgcGF0Y2ggODA5OTE1OiAgSW4gU2VwIDIwMDMsIFZlcmlTaWduIHN0YXJ0ZWQgaGlnaGphY2tpbmcKKyAgICAgICAgICAgICMgaW52YWxpZCAuY29tIGFuZCAubmV0IGFkZHJlc3NlcyB0byBib29zdCB0cmFmZmljIHRvIHRoZWlyIG93bgorICAgICAgICAgICAgIyBzaXRlLiAgVGhpcyB0ZXN0IHN0YXJ0ZWQgZmFpbGluZyB0aGVuLiAgT25lIGhvcGVzIHRoZSAuaW52YWxpZAorICAgICAgICAgICAgIyBkb21haW4gd2lsbCBiZSBzcGFyZWQgdG8gc2VydmUgaXRzIGRlZmluZWQgcHVycG9zZS4KKyAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQvIikKIAogCiBjbGFzcyB1cmxyZXRyaWV2ZU5ldHdvcmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNDgsNyArMTQ5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFRlc3QgYmFzaWMgZnVuY3Rpb25hbGl0eS4KLSAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikgYXMgKGZpbGVfbG9jYXRpb24sIGluZm8pOgorICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikgYXMgKGZpbGVfbG9jYXRpb24sIGluZm8pOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pLCAiZmlsZSBsb2NhdGlvbiByZXR1cm5lZCBieSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHVybHJldHJpZXZlIGlzIG5vdCBhIHZhbGlkIHBhdGgiKQogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVfbG9jYXRpb24sICdyYicpIGFzIGY6CkBAIC0xNTcsNyArMTU4LDcgQEAKIAogICAgIGRlZiB0ZXN0X3NwZWNpZmllZF9wYXRoKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHNwZWNpZnlpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHRvIHdyaXRlIHRvIHdvcmtzLgotICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iLAorICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOKSBhcyAoZmlsZV9sb2NhdGlvbiwgaW5mbyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbG9jYXRpb24sIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pKQpAQCAtMTY2LDExICsxNjcsMTEgQEAKIAogICAgIGRlZiB0ZXN0X2hlYWRlcihzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgaGVhZGVyIHJldHVybmVkIGFzIDJuZCB2YWx1ZSBmcm9tIHVybHJldHJpZXZlIGlzIGdvb2QuCi0gICAgICAgIHdpdGggc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIpIGFzIChmaWxlX2xvY2F0aW9uLCBpbmZvKToKKyAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpIGFzIChmaWxlX2xvY2F0aW9uLCBpbmZvKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZm8gaXMgbm90IGFuIGluc3RhbmNlIG9mIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSIpCiAKLSAgICBsb2dvID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9zdGF0aWMvY29tbXVuaXR5X2xvZ29zL3B5dGhvbi1sb2dvLW1hc3Rlci12My1UTS5wbmciCisgICAgbG9nbyA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIKIAogICAgIGRlZiB0ZXN0X2RhdGFfaGVhZGVyKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoc2VsZi5sb2dvKSBhcyAoZmlsZV9sb2NhdGlvbiwgZmlsZWhlYWRlcnMpOgpAQCAtMjA3LDExICsyMDgsNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiID49IHRvdGFsIHNpemUgaW4gJXMiICUgcmVjb3Jkc19yZXByKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVUkxUaW1lb3V0VGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1cmxvcGVuTmV0d29ya1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVybHJldHJpZXZlTmV0d29ya1Rlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQppbmRleCBkNjdjZjI1Li4zOTM0ODExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKQEAgLTg2Myw2ICs4NjMsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnODYzLTEyMzQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhcmFtcywgJ3Bob25lLWNvbnRleHQ9KzEtOTE0LTU1NScpCiAKKyAgICBkZWYgdGVzdF91bndyYXAoc2VsZik6CisgICAgICAgIHVybCA9IHVybGxpYi5wYXJzZS51bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybCwgJ3R5cGU6Ly9ob3N0L3BhdGgnKQorCisgICAgZGVmIHRlc3RfUXVvdGVyX3JlcHIoc2VsZik6CisgICAgICAgIHF1b3RlciA9IHVybGxpYi5wYXJzZS5RdW90ZXIodXJsbGliLnBhcnNlLl9BTFdBWVNfU0FGRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUXVvdGVyJywgcmVwcihxdW90ZXIpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVcmxQYXJzZVRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKaW5kZXggMTM3YzQ0NS4uMmNhOTkyOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CkBAIC00NSw3ICs0NSw4IEBACiAgICAgICAgICMgVGVzdCBfX3JlcHJfXwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1MCksIHN0cihkMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1MSksIHJlcHIoZDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodTIpLCByZXByKGQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXByKHUyKSwgKCJ7J29uZSc6IDEsICd0d28nOiAyfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyd0d28nOiAyLCAnb25lJzogMX0iKSkKIAogICAgICAgICAjIFRlc3QgcmljaCBjb21wYXJpc29uIGFuZCBfX2xlbl9fCiAgICAgICAgIGFsbCA9IFtkMCwgZDEsIGQyLCB1LCB1MCwgdTEsIHUyLCB1dSwgdXUwLCB1dTEsIHV1Ml0KQEAgLTg5LDkgKzkwLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChtMmEsIG0yKQogCiAgICAgICAgICMgVGVzdCBrZXlzLCBpdGVtcywgdmFsdWVzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIua2V5cygpLCBkMi5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIuaXRlbXMoKSwgZDIuaXRlbXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHUyLnZhbHVlcygpKSwgbGlzdChkMi52YWx1ZXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHUyLmtleXMoKSksIHNvcnRlZChkMi5rZXlzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh1Mi5pdGVtcygpKSwgc29ydGVkKGQyLml0ZW1zKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh1Mi52YWx1ZXMoKSksIHNvcnRlZChkMi52YWx1ZXMoKSkpCiAKICAgICAgICAgIyBUZXN0ICJpbiIuCiAgICAgICAgIGZvciBpIGluIHUyLmtleXMoKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdmVudi5weSBiL0xpYi90ZXN0L3Rlc3RfdmVudi5weQppbmRleCAwZmFlODhiLi44ZGZmZjUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF92ZW52LnB5CkBAIC01LDE3ICs1LDM3IEBACiBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgogIiIiCiAKK2ltcG9ydCBlbnN1cmVwaXAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoY2FwdHVyZWRfc3Rkb3V0LCBjYXB0dXJlZF9zdGRlcnIsIHJ1bl91bml0dGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX3N5bWxpbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbl9zeW1saW5rLCBFbnZpcm9ubWVudFZhckd1YXJkKQoraW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB2ZW52CiAKKyMgcGlwIGN1cnJlbnRseSByZXF1aXJlcyBzc2wgc3VwcG9ydCwgc28gd2UgZW5zdXJlIHdlIGhhbmRsZQorIyBpdCBiZWluZyBtaXNzaW5nIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworc2tpcEluVmVudiA9IHVuaXR0ZXN0LnNraXBJZihzeXMucHJlZml4ICE9IHN5cy5iYXNlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3Qgbm90IGFwcHJvcHJpYXRlIGluIGEgdmVudicpCisKKyMgb3MucGF0aC5leGlzdHMoJ251bCcpIGlzIEZhbHNlOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjA1NDEKK2lmIG9zLmRldm51bGwubG93ZXIoKSA9PSAnbnVsJzoKKyAgICBmYWlsc09uV2luZG93cyA9IHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorZWxzZToKKyAgICBkZWYgZmFpbHNPbldpbmRvd3MoZik6CisgICAgICAgIHJldHVybiBmCisKIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciB2ZW52IHRlc3RzLiIiIgogCkBAIC02OCw2ICs4OCwxNCBAQAogICAgICAgICBzZWxmLmlzZGlyKHNlbGYuYmluZGlyKQogICAgICAgICBzZWxmLmlzZGlyKHNlbGYuaW5jbHVkZSkKICAgICAgICAgc2VsZi5pc2Rpcigqc2VsZi5saWIpCisgICAgICAgICMgSXNzdWUgMjExOTcKKyAgICAgICAgcCA9IHNlbGYuZ2V0X2Vudl9maWxlKCdsaWI2NCcpCisgICAgICAgIGNvbmRpdGlvbnMgPSAoKHN0cnVjdC5jYWxjc2l6ZSgnUCcpID09IDgpIGFuZCAob3MubmFtZSA9PSAncG9zaXgnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAoc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nKSkKKyAgICAgICAgaWYgY29uZGl0aW9uczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzbGluayhwKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocCkpCiAgICAgICAgIGRhdGEgPSBzZWxmLmdldF90ZXh0X2ZpbGVfY29udGVudHMoJ3B5dmVudi5jZmcnKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicgYW5kICgnX19QWVZFTlZfTEFVTkNIRVJfXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3MuZW52aXJvbik6CkBAIC04Myw4ICsxMTEsNyBAQAogICAgICAgICAgICAgcHJpbnQoJyAgICAlcicgJSBvcy5saXN0ZGlyKGJkKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZuKSwgJ0ZpbGUgJXIgc2hvdWxkIGV4aXN0LicgJSBmbikKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnByZWZpeCAhPSBzeXMuYmFzZV9wcmVmaXgsICdUZXN0IG5vdCBhcHByb3ByaWF0ZSAnCi0gICAgICAgICAgICAgICAgICAgICAnaW4gYSB2ZW52JykKKyAgICBAc2tpcEluVmVudgogICAgIGRlZiB0ZXN0X3ByZWZpeGVzKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBwcmVmaXggdmFsdWVzIGFyZSBhcyBleHBlY3RlZC4KQEAgLTEwOSwyOSArMTM2LDg5IEBACiAgICAgICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZXhwZWN0ZWQuZW5jb2RlKCkpCiAKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgRU5WX1NVQkRJUlMgPSAoCisgICAgICAgICAgICAoJ1NjcmlwdHMnLCksCisgICAgICAgICAgICAoJ0luY2x1ZGUnLCksCisgICAgICAgICAgICAoJ0xpYicsKSwKKyAgICAgICAgICAgICgnTGliJywgJ3NpdGUtcGFja2FnZXMnKSwKKyAgICAgICAgKQorICAgIGVsc2U6CisgICAgICAgIEVOVl9TVUJESVJTID0gKAorICAgICAgICAgICAgKCdiaW4nLCksCisgICAgICAgICAgICAoJ2luY2x1ZGUnLCksCisgICAgICAgICAgICAoJ2xpYicsKSwKKyAgICAgICAgICAgICgnbGliJywgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdKSwKKyAgICAgICAgICAgICgnbGliJywgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLCAnc2l0ZS1wYWNrYWdlcycpLAorICAgICAgICApCisKKyAgICBkZWYgY3JlYXRlX2NvbnRlbnRzKHNlbGYsIHBhdGhzLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgc29tZSBmaWxlcyBpbiB0aGUgZW52aXJvbm1lbnQgd2hpY2ggYXJlIHVucmVsYXRlZAorICAgICAgICB0byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBzdWJkaXJzIGluIHBhdGhzOgorICAgICAgICAgICAgZCA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICpzdWJkaXJzKQorICAgICAgICAgICAgb3MubWtkaXIoZCkKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGQsIGZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYidTdGlsbCBoZXJlPycpCisKICAgICBkZWYgdGVzdF9vdmVyd3JpdGVfZXhpc3Rpbmcoc2VsZik6CiAgICAgICAgICIiIgotICAgICAgICBUZXN0IGNvbnRyb2wgb2Ygb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZW52aXJvbm1lbnQgZGlyZWN0b3J5LgorICAgICAgICBUZXN0IGNyZWF0aW5nIGVudmlyb25tZW50IGluIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYuY3JlYXRlX2NvbnRlbnRzKHNlbGYuRU5WX1NVQkRJUlMsICdmb28nKQorICAgICAgICB2ZW52LmNyZWF0ZShzZWxmLmVudl9kaXIpCisgICAgICAgIGZvciBzdWJkaXJzIGluIHNlbGYuRU5WX1NVQkRJUlM6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICooc3ViZGlycyArICgnZm9vJywpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYidTdGlsbCBoZXJlPycpCisKICAgICAgICAgYnVpbGRlciA9IHZlbnYuRW52QnVpbGRlcihjbGVhcj1UcnVlKQogICAgICAgICBidWlsZGVyLmNyZWF0ZShzZWxmLmVudl9kaXIpCisgICAgICAgIGZvciBzdWJkaXJzIGluIHNlbGYuRU5WX1NVQkRJUlM6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICooc3ViZGlycyArICgnZm9vJywpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZm4pKQorCisgICAgZGVmIGNsZWFyX2RpcmVjdG9yeShzZWxmLCBwYXRoKToKKyAgICAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwYXRoLCBmbikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZuKSBvciBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZuKToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGZuKQorCisgICAgZGVmIHRlc3RfdW5vdmVyd3JpdGFibGVfZmFpbHMoc2VsZik6CisgICAgICAgICNjcmVhdGUgYSBmaWxlIGNsYXNoaW5nIHdpdGggZGlyZWN0b3JpZXMgaW4gdGhlIGVudiBkaXIKKyAgICAgICAgZm9yIHBhdGhzIGluIHNlbGYuRU5WX1NVQkRJUlNbOjNdOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqcGF0aHMpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksIHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgICAgICBzZWxmLmNsZWFyX2RpcmVjdG9yeShzZWxmLmVudl9kaXIpCiAKICAgICBkZWYgdGVzdF91cGdyYWRlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB1cGdyYWRpbmcgYW4gZXhpc3RpbmcgZW52aXJvbm1lbnQgZGlyZWN0b3J5LgogICAgICAgICAiIiIKLSAgICAgICAgYnVpbGRlciA9IHZlbnYuRW52QnVpbGRlcih1cGdyYWRlPVRydWUpCi0gICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZShidWlsZGVyLmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQotICAgICAgICBzZWxmLmlzZGlyKHNlbGYuYmluZGlyKQotICAgICAgICBzZWxmLmlzZGlyKHNlbGYuaW5jbHVkZSkKLSAgICAgICAgc2VsZi5pc2Rpcigqc2VsZi5saWIpCi0gICAgICAgIGZuID0gc2VsZi5nZXRfZW52X2ZpbGUoc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOiAgIyBkaWFnbm9zdGljcyBmb3IgV2luZG93cyBidWlsZGJvdCBmYWlsdXJlcwotICAgICAgICAgICAgYmQgPSBzZWxmLmdldF9lbnZfZmlsZShzZWxmLmJpbmRpcikKLSAgICAgICAgICAgIHByaW50KCdDb250ZW50cyBvZiAlcjonICUgYmQpCi0gICAgICAgICAgICBwcmludCgnICAgICVyJyAlIG9zLmxpc3RkaXIoYmQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm4pLCAnRmlsZSAlciBzaG91bGQgZXhpc3QuJyAlIGZuKQorICAgICAgICAjIFNlZSBJc3N1ZSAjMjE2NDM6IHRoZSBsb29wIG5lZWRzIHRvIHJ1biB0d2ljZSB0byBlbnN1cmUKKyAgICAgICAgIyB0aGF0IGV2ZXJ5dGhpbmcgd29ya3Mgb24gdGhlIHVwZ3JhZGUgKHRoZSBmaXJzdCBydW4ganVzdCBjcmVhdGVzCisgICAgICAgICMgdGhlIHZlbnYpLgorICAgICAgICBmb3IgdXBncmFkZSBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgYnVpbGRlciA9IHZlbnYuRW52QnVpbGRlcih1cGdyYWRlPXVwZ3JhZGUpCisgICAgICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUoYnVpbGRlci5jcmVhdGUsIHNlbGYuZW52X2RpcikKKyAgICAgICAgICAgIHNlbGYuaXNkaXIoc2VsZi5iaW5kaXIpCisgICAgICAgICAgICBzZWxmLmlzZGlyKHNlbGYuaW5jbHVkZSkKKyAgICAgICAgICAgIHNlbGYuaXNkaXIoKnNlbGYubGliKQorICAgICAgICAgICAgZm4gPSBzZWxmLmdldF9lbnZfZmlsZShzZWxmLmJpbmRpciwgc2VsZi5leGUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICAgICAgICAgICMgZGlhZ25vc3RpY3MgZm9yIFdpbmRvd3MgYnVpbGRib3QgZmFpbHVyZXMKKyAgICAgICAgICAgICAgICBiZCA9IHNlbGYuZ2V0X2Vudl9maWxlKHNlbGYuYmluZGlyKQorICAgICAgICAgICAgICAgIHByaW50KCdDb250ZW50cyBvZiAlcjonICUgYmQpCisgICAgICAgICAgICAgICAgcHJpbnQoJyAgICAlcicgJSBvcy5saXN0ZGlyKGJkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbiksICdGaWxlICVyIHNob3VsZCBleGlzdC4nICUgZm4pCiAKICAgICBkZWYgdGVzdF9pc29sYXRpb24oc2VsZik6CiAgICAgICAgICIiIgpAQCAtMTYyLDggKzI0OSw3IEBACiAgICAgIyBydW4gdGhlIHRlc3QsIHRoZSBweXZlbnYuY2ZnIGluIHRoZSB2ZW52IGNyZWF0ZWQgaW4gdGhlIHRlc3Qgd2lsbAogICAgICMgcG9pbnQgdG8gdGhlIHZlbnYgYmVpbmcgdXNlZCB0byBydW4gdGhlIHRlc3QsIGFuZCB3ZSBsb3NlIHRoZSBsaW5rCiAgICAgIyB0byB0aGUgc291cmNlIGJ1aWxkIC0gc28gUHl0aG9uIGNhbid0IGluaXRpYWxpc2UgcHJvcGVybHkuCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucHJlZml4ICE9IHN5cy5iYXNlX3ByZWZpeCwgJ1Rlc3Qgbm90IGFwcHJvcHJpYXRlICcKLSAgICAgICAgICAgICAgICAgICAgICdpbiBhIHZlbnYnKQorICAgIEBza2lwSW5WZW52CiAgICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhhdCB0aGUgc3lzLmV4ZWN1dGFibGUgdmFsdWUgaXMgYXMgZXhwZWN0ZWQuCkBAIC0xOTIsOCArMjc4LDEyOSBAQAogICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBlbnZweS5lbmNvZGUoKSkKIAorCitAc2tpcEluVmVudgorY2xhc3MgRW5zdXJlUGlwVGVzdChCYXNlVGVzdCk6CisgICAgIiIiVGVzdCB2ZW52IG1vZHVsZSBpbnN0YWxsYXRpb24gb2YgcGlwLiIiIgorICAgIGRlZiBhc3NlcnRfcGlwX25vdF9pbnN0YWxsZWQoc2VsZik6CisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICB0cnlfaW1wb3J0ID0gJ3RyeTpcbiBpbXBvcnQgcGlwXG5leGNlcHQgSW1wb3J0RXJyb3I6XG4gcHJpbnQoIk9LIiknCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1jJywgdHJ5X2ltcG9ydF0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgIk9LIikKKworCisgICAgZGVmIHRlc3Rfbm9fcGlwX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRfcGlwX25vdF9pbnN0YWxsZWQoKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfbm9fcGlwKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIsIHdpdGhfcGlwPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydF9waXBfbm90X2luc3RhbGxlZCgpCisKKyAgICBAZmFpbHNPbldpbmRvd3MKKyAgICBkZWYgdGVzdF9kZXZudWxsX2V4aXN0c19hbmRfaXNfZW1wdHkoc2VsZik6CisgICAgICAgICMgRml4IGZvciBpc3N1ZSAjMjAwNTMgdXNlcyBvcy5kZXZudWxsIHRvIGZvcmNlIGEgY29uZmlnIGZpbGUgdG8KKyAgICAgICAgIyBhcHBlYXIgZW1wdHkuIEhvd2V2ZXIgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwNTQxIG1lYW5zCisgICAgICAgICMgdGhhdCBkb2Vzbid0IGN1cnJlbnRseSB3b3JrIHByb3Blcmx5IG9uIFdpbmRvd3MuIE9uY2UgdGhhdCBpcworICAgICAgICAjIGZpeGVkLCB0aGUgIndpbl9sb2NhdGlvbiIgcGFydCBvZiB0ZXN0X3dpdGhfcGlwIHNob3VsZCBiZSByZXN0b3JlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MuZGV2bnVsbCkpCisgICAgICAgIHdpdGggb3Blbihvcy5kZXZudWxsLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiIiKQorCisgICAgIyBSZXF1ZXN0aW5nIHBpcCBmYWlscyB3aXRob3V0IFNTTCAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzQ0KQorICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsIGVuc3VyZXBpcC5fTUlTU0lOR19TU0xfTUVTU0FHRSkKKyAgICBkZWYgdGVzdF93aXRoX3BpcChzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHdpdGggRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudnZhcnM6CisgICAgICAgICAgICAjIHBpcCdzIGNyb3NzLXZlcnNpb24gY29tcGF0aWJpbGl0eSBtYXkgdHJpZ2dlciBkZXByZWNhdGlvbgorICAgICAgICAgICAgIyB3YXJuaW5ncyBpbiBjdXJyZW50IHZlcnNpb25zIG9mIFB5dGhvbi4gRW5zdXJlIHJlbGF0ZWQKKyAgICAgICAgICAgICMgZW52aXJvbm1lbnQgc2V0dGluZ3MgZG9uJ3QgY2F1c2UgdmVudiB0byBmYWlsLgorICAgICAgICAgICAgZW52dmFyc1siUFlUSE9OV0FSTklOR1MiXSA9ICJlIgorICAgICAgICAgICAgIyBlbnN1cmVwaXAgaXMgZGlmZmVyZW50IGVub3VnaCBmcm9tIGEgbm9ybWFsIHBpcCBpbnZvY2F0aW9uCisgICAgICAgICAgICAjIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgaXQgaWdub3JlcyB0aGUgbm9ybWFsIHBpcCBlbnZpcm9ubWVudAorICAgICAgICAgICAgIyB2YXJpYWJsZSBzZXR0aW5ncy4gV2Ugc2V0IFBJUF9OT19JTlNUQUxMIGhlcmUgc3BlY2lmaWNhbGx5CisgICAgICAgICAgICAjIHRvIGNoZWNrIHRoYXQgZW5zdXJlcGlwIChhbmQgaGVuY2UgdmVudikgaWdub3JlcyBpdC4KKyAgICAgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTczNAorICAgICAgICAgICAgZW52dmFyc1siUElQX05PX0lOU1RBTEwiXSA9ICIxIgorICAgICAgICAgICAgIyBBbHNvIGNoZWNrIHRoYXQgd2UgaWdub3JlIHRoZSBwaXAgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAwNTMKKyAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgaG9tZV9kaXI6CisgICAgICAgICAgICAgICAgZW52dmFyc1siSE9NRSJdID0gaG9tZV9kaXIKKyAgICAgICAgICAgICAgICBiYWRfY29uZmlnID0gIltnbG9iYWxdXG5uby1pbnN0YWxsPTEiCisgICAgICAgICAgICAgICAgIyBXcml0ZSB0byBib3RoIGNvbmZpZyBmaWxlIG5hbWVzIG9uIGFsbCBwbGF0Zm9ybXMgdG8gcmVkdWNlCisgICAgICAgICAgICAgICAgIyBjcm9zcy1wbGF0Zm9ybSB2YXJpYXRpb24gaW4gdGVzdCBjb2RlIGJlaGF2aW91cgorICAgICAgICAgICAgICAgIHdpbl9sb2NhdGlvbiA9ICgicGlwIiwgInBpcC5pbmkiKQorICAgICAgICAgICAgICAgIHBvc2l4X2xvY2F0aW9uID0gKCIucGlwIiwgInBpcC5jb25mIikKKyAgICAgICAgICAgICAgICAjIFNraXBzIHdpbl9sb2NhdGlvbiBkdWUgdG8gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwNTQxCisgICAgICAgICAgICAgICAgZm9yIGRpcm5hbWUsIGZuYW1lIGluIChwb3NpeF9sb2NhdGlvbiwpOgorICAgICAgICAgICAgICAgICAgICBkaXJwYXRoID0gb3MucGF0aC5qb2luKGhvbWVfZGlyLCBkaXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJwYXRoKQorICAgICAgICAgICAgICAgICAgICBmcGF0aCA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZwYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGJhZF9jb25maWcpCisKKyAgICAgICAgICAgICAgICAjIEFjdHVhbGx5IHJ1biB0aGUgY3JlYXRlIGNvbW1hbmQgd2l0aCBhbGwgdGhhdCB1bmhlbHBmdWwKKyAgICAgICAgICAgICAgICAjIGNvbmZpZyBpbiBwbGFjZSB0byBlbnN1cmUgd2UgaWdub3JlIGl0CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhfcGlwPVRydWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgb3V0cHV0IHRoaXMgcHJvZHVjZXMgY2FuIGJlIGEgbGl0dGxlIGhhcmQgdG8gcmVhZCwKKyAgICAgICAgICAgICAgICAgICAgIyBidXQgYXQgbGVhc3QgaXQgaGFzIGFsbCB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gZXhjLm91dHB1dC5kZWNvZGUoZXJyb3JzPSJyZXBsYWNlIikKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gInt9XG5cbioqU3VicHJvY2VzcyBPdXRwdXQqKlxue30iCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KGV4YywgZGV0YWlscykpCisgICAgICAgICMgRW5zdXJlIHBpcCBpcyBhdmFpbGFibGUgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQKKyAgICAgICAgZW52cHkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWFscGF0aChzZWxmLmVudl9kaXIpLCBzZWxmLmJpbmRpciwgc2VsZi5leGUpCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1JbScsICdwaXAnLCAnLS12ZXJzaW9uJ10KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgV2UgZm9yY2UgZXZlcnl0aGluZyB0byB0ZXh0LCBzbyB1bml0dGVzdCBnaXZlcyB0aGUgZGV0YWlsZWQgZGlmZgorICAgICAgICAjIGlmIHdlIGdldCB1bmV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgZXJyID0gZXJyLmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsICIiKQorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCJsYXRpbi0xIikgIyBGb3JjZSB0byB0ZXh0LCBwcmV2ZW50IGRlY29kaW5nIGVycm9ycworICAgICAgICBleHBlY3RlZF92ZXJzaW9uID0gInBpcCB7fSIuZm9ybWF0KGVuc3VyZXBpcC52ZXJzaW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0WzpsZW4oZXhwZWN0ZWRfdmVyc2lvbildLCBleHBlY3RlZF92ZXJzaW9uKQorICAgICAgICBlbnZfZGlyID0gb3MuZnNlbmNvZGUoc2VsZi5lbnZfZGlyKS5kZWNvZGUoImxhdGluLTEiKQorICAgICAgICBzZWxmLmFzc2VydEluKGVudl9kaXIsIG91dCkKKworICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTcyOAorICAgICAgICAjIENoZWNrIHRoZSBwcml2YXRlIHVuaW5zdGFsbCBjb21tYW5kIHByb3ZpZGVkIGZvciB0aGUgV2luZG93cworICAgICAgICAjIGluc3RhbGxlcnMgd29ya3MgKGF0IGxlYXN0IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCkKKyAgICAgICAgY21kID0gW2VudnB5LCAnLUltJywgJ2Vuc3VyZXBpcC5fdW5pbnN0YWxsJ10KKyAgICAgICAgd2l0aCBFbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52dmFyczoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgV2UgZm9yY2UgZXZlcnl0aGluZyB0byB0ZXh0LCBzbyB1bml0dGVzdCBnaXZlcyB0aGUgZGV0YWlsZWQgZGlmZgorICAgICAgICAjIGlmIHdlIGdldCB1bmV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgZXJyID0gZXJyLmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsICIiKQorICAgICAgICAjIEJlaW5nIGZhaXJseSBzcGVjaWZpYyByZWdhcmRpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW91ciBmb3IgdGhlCisgICAgICAgICMgaW5pdGlhbCBidW5kbGluZyBwaGFzZSBpbiBQeXRob24gMy40LiBJZiB0aGUgb3V0cHV0IGNoYW5nZXMgaW4KKyAgICAgICAgIyBmdXR1cmUgcGlwIHZlcnNpb25zLCB0aGlzIHRlc3QgY2FuIGxpa2VseSBiZSByZWxheGVkIGZ1cnRoZXIuCisgICAgICAgIG91dCA9IG91dC5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZCBwaXAiLCBvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZCBzZXR1cHRvb2xzIiwgb3V0KQorICAgICAgICAjIENoZWNrIHBpcCBpcyBub3cgZ29uZSBmcm9tIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50CisgICAgICAgIHNlbGYuYXNzZXJ0X3BpcF9ub3RfaW5zdGFsbGVkKCkKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEJhc2ljVGVzdCkKKyAgICBydW5fdW5pdHRlc3QoQmFzaWNUZXN0LCBFbnN1cmVQaXBUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5IGIvTGliL3Rlc3QvdGVzdF93YWl0My5weQppbmRleCBiZDA2YzhkLi5mNmEwNjVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKQEAgLTcsMTUgKzcsMTEgQEAKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCiAKLXRyeToKLSAgICBvcy5mb3JrCi1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLmZvcmsgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIpCitpZiBub3QgaGFzYXR0cihvcywgJ2ZvcmsnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3MuZm9yayBub3QgZGVmaW5lZCIpCiAKLXRyeToKLSAgICBvcy53YWl0MwotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy53YWl0MyBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIikKK2lmIG5vdCBoYXNhdHRyKG9zLCAnd2FpdDMnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3Mud2FpdDMgbm90IGRlZmluZWQiKQogCiBjbGFzcyBXYWl0M1Rlc3QoRm9ya1dhaXQpOgogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5IGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQppbmRleCAxMDA3NmFmLi40M2IzYjljIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKQEAgLTYxLDYgKzYxLDI1IEBACiAgICAgICAgIHN5cy5tb2R1bGVzWyd3YXJuaW5ncyddID0gb3JpZ2luYWxfd2FybmluZ3MKICAgICAgICAgc3VwZXIoQmFzZVRlc3QsIHNlbGYpLnRlYXJEb3duKCkKIAorY2xhc3MgUHVibGljQVBJVGVzdHMoQmFzZVRlc3QpOgorCisgICAgIiIiRW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IHZhbHVlcyBhcmUgZXhwb3NlZCBpbiB0aGUKKyAgICBwdWJsaWMgQVBJLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfbW9kdWxlX2FsbF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYubW9kdWxlLCAnX19hbGxfXycpKQorICAgICAgICB0YXJnZXRfYXBpID0gWyJ3YXJuIiwgIndhcm5fZXhwbGljaXQiLCAic2hvd3dhcm5pbmciLAorICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXR3YXJuaW5nIiwgImZpbHRlcndhcm5pbmdzIiwgInNpbXBsZWZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgInJlc2V0d2FybmluZ3MiLCAiY2F0Y2hfd2FybmluZ3MiXQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHNldChzZWxmLm1vZHVsZS5fX2FsbF9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQodGFyZ2V0X2FwaSkpCisKK2NsYXNzIENQdWJsaWNBUElUZXN0cyhQdWJsaWNBUElUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKKworY2xhc3MgUHlQdWJsaWNBUElUZXN0cyhQdWJsaWNBUElUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCiAKIGNsYXNzIEZpbHRlclRlc3RzKEJhc2VUZXN0KToKIApAQCAtMzI5LDYgKzM0OCwxOSBAQAogICAgICAgICAgICAgd2FybmluZ190ZXN0cy5fX25hbWVfXyA9IG1vZHVsZV9uYW1lCiAgICAgICAgICAgICBzeXMuYXJndiA9IGFyZ3YKIAorICAgIGRlZiB0ZXN0X3dhcm5fZXhwbGljaXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluICgibm9uYXNjaWlceGU5XHUyMGFjIiwgInN1cnJvZ2F0ZVx1ZGM4MCIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuZnNlbmNvZGUoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KCJ0ZXh0IiwgVXNlcldhcm5pbmcsIGZpbGVuYW1lLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0uZmlsZW5hbWUsIGZpbGVuYW1lKQorCiAgICAgZGVmIHRlc3Rfd2Fybl9leHBsaWNpdF90eXBlX2Vycm9ycyhzZWxmKToKICAgICAgICAgIyB3YXJuX2V4cGxpY2l0KCkgc2hvdWxkIGVycm9yIG91dCBncmFjZWZ1bGx5IGlmIGl0IGlzIGdpdmVuIG9iamVjdHMKICAgICAgICAgIyBvZiB0aGUgd3JvbmcgdHlwZXMuCkBAIC03NjYsNiArNzk4LDI1IEBACiAgICAgICAgICAgICAjIFVzZSAtVyB0byBsb2FkIHdhcm5pbmdzIG1vZHVsZSBhdCBzdGFydHVwCiAgICAgICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsICdwYXNzJywgJy1XJywgJ2Fsd2F5cycsIFBZVEhPTlBBVEg9Y3dkKQogCitjbGFzcyBGaW5hbGl6YXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maW5hbGl6YXRpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5NDIxOiB3YXJuaW5ncy53YXJuKCkgc2hvdWxkIG5vdCBjcmFzaAorICAgICAgICAjIGR1cmluZyBQeXRob24gZmluYWxpemF0aW9uCisgICAgICAgIGNvZGUgPSAiIiIKK2ltcG9ydCB3YXJuaW5ncword2FybiA9IHdhcm5pbmdzLndhcm4KKworY2xhc3MgQToKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgd2FybigidGVzdCIpCisKK2E9QSgpCisgICAgICAgICIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgICMgbm90ZTogIl9fbWFpbl9fIiBmaWxlbmFtZSBpcyBub3QgY29ycmVjdCwgaXQgc2hvdWxkIGJlIHRoZSBuYW1lCisgICAgICAgICMgb2YgdGhlIHNjcmlwdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYidfX21haW5fXzo3OiBVc2VyV2FybmluZzogdGVzdCcpCisKIAogZGVmIHNldFVwTW9kdWxlKCk6CiAgICAgcHlfd2FybmluZ3Mub25jZXJlZ2lzdHJ5LmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weQppbmRleCBmNjQyMDFmLi4zZWZmNzczIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhdmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93YXZlLnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBzeXMKIGltcG9ydCB3YXZlCiAKQEAgLTgsOSArOSw2IEBACiBjbGFzcyBXYXZlVGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKICAgICAgICAgICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlKToKICAgICBtb2R1bGUgPSB3YXZlCi0gICAgdGVzdF91bnNlZWthYmxlX3dyaXRlID0gTm9uZQotICAgIHRlc3RfdW5zZWVrYWJsZV9vdmVyZmxvd2VkX3dyaXRlID0gTm9uZQotICAgIHRlc3RfdW5zZWVrYWJsZV9pbmNvbXBsZXRlZF93cml0ZSA9IE5vbmUKIAogCiBjbGFzcyBXYXZlUENNOFRlc3QoV2F2ZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQ4LDEzICs0Niw3IEBACiAgICAgICBFNEI1MENFQiA2MzQ0MEE1QSAwOENBMEExRiAyQkJBMEIwQiA1MTQ2MEU0NyA4QkNCMTEzQyBCNkY1MEVFQSA0NDE1MEE1OSBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQotCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMikKIAogCiBjbGFzcyBXYXZlUENNMjRUZXN0KFdhdmVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC04MSw3ICs3Myw3IEBACiAgICAgICA1MTQ4NkYwRTQ0RTEgOEJDQzY0MTEzQjA1IEI2RjRFQzBFRUIzNiA0NDEzMTcwQTVCNDggXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAzKGZyYW1lcykKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAzKQogCiAKIGNsYXNzIFdhdmVQQ00zMlRlc3QoV2F2ZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEwOCwxMiArMTAwLDcgQEAKICAgICAgIDUxNDg2RjgwMEU0NEUxOTAgOEJDQzY0ODAxMTNCMDU4MCBCNkY0RUMwMDBFRUIzNjMwIDQ0MTMxNzgwMEE1QjQ4QTAgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXA0KGZyYW1lcykKLQotICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKLSAgICAgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV9pbmNvbXBsZXRlZF93cml0ZShzZWxmKToKLSAgICAgICAgICAgIHN1cGVyKCkudGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKCkKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCA0KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkgYi9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKaW5kZXggODVhYjcxNy4uMGE1OTEyMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQpAQCAtNywxMSArNywxNSBAQAogaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBjb3B5CiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCiAKICMgVXNlZCBpbiBSZWZlcmVuY2VzVGVzdENhc2UudGVzdF9yZWZfY3JlYXRlZF9kdXJpbmdfZGVsKCkgLgogcmVmX2Zyb21fZGVsID0gTm9uZQogCisjIFVzZWQgYnkgRmluYWxpemVUZXN0Q2FzZSBhcyBhIGdsb2JhbCB0aGF0IG1heSBiZSByZXBsYWNlZCBieSBOb25lCisjIHdoZW4gdGhlIGludGVycHJldGVyIHNodXRzIGRvd24uCitfZ2xvYmFsX3ZhciA9ICdmb29iYXInCisKIGNsYXNzIEM6CiAgICAgZGVmIG1ldGhvZChzZWxmKToKICAgICAgICAgcGFzcwpAQCAtNDcsNiArNTEsMTEgQEAKICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gaGFzaChzZWxmLmFyZykKKyAgICBkZWYgc29tZV9tZXRob2Qoc2VsZik6CisgICAgICAgIHJldHVybiA0CisgICAgZGVmIG90aGVyX21ldGhvZChzZWxmKToKKyAgICAgICAgcmV0dXJuIDUKKwogCiBjbGFzcyBSZWZDeWNsZToKICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC03OTQsNiArODAzLDMwIEBACiAgICAgICAgIGRlbCByb290CiAgICAgICAgIGdjLmNvbGxlY3QoKQogCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhIHJlZjogTm9uZQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYoeCwgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVmMS5fX2NhbGxiYWNrX18sIGNhbGxiYWNrKQorCisgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnJlZih4KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWYyLl9fY2FsbGJhY2tfXykKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2F0dHJpYnV0ZV9hZnRlcl9kZWxldGlvbihzZWxmKToKKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICByZWYgPSB3ZWFrcmVmLnJlZih4LCBzZWxmLmNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZWYuX19jYWxsYmFja19fKQorICAgICAgICBkZWwgeAorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWYuX19jYWxsYmFja19fKQorCisgICAgZGVmIHRlc3Rfc2V0X2NhbGxiYWNrX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICBjYWxsYmFjayA9IGxhbWJkYSByZWY6IE5vbmUKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKHgsIGNhbGxiYWNrKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHJlZjEuX19jYWxsYmFja19fID0gbGFtYmRhIHJlZjogTm9uZQorCiAKIGNsYXNzIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZShUZXN0QmFzZSk6CiAKQEAgLTg5OCw2ICs5MzEsMTQwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYmNhbGxlZCwgMCkKIAogCitjbGFzcyBXZWFrTWV0aG9kVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgT2JqZWN0IHN1YmNsYXNzIG92ZXJyaWRpbmcgYHNvbWVfbWV0aG9kYC4iIiIKKyAgICAgICAgY2xhc3MgQyhPYmplY3QpOgorICAgICAgICAgICAgZGVmIHNvbWVfbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA2CisgICAgICAgIHJldHVybiBDCisKKyAgICBkZWYgdGVzdF9hbGl2ZShzZWxmKToKKyAgICAgICAgbyA9IE9iamVjdCgxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCB3ZWFrcmVmLlJlZmVyZW5jZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyKCksIHR5cGUoby5zb21lX21ldGhvZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLl9fc2VsZl9fLCBvKQorICAgICAgICBzZWxmLmFzc2VydElzKHIoKS5fX2Z1bmNfXywgby5zb21lX21ldGhvZC5fX2Z1bmNfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyKCkoKSwgNCkKKworICAgIGRlZiB0ZXN0X29iamVjdF9kZWFkKHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLCBOb25lKQorCisgICAgZGVmIHRlc3RfbWV0aG9kX2RlYWQoc2VsZik6CisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIG8gPSBDKDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgZGVsIEMuc29tZV9tZXRob2QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfd2hlbl9vYmplY3RfZGVhZChzZWxmKToKKyAgICAgICAgIyBUZXN0IGNhbGxiYWNrIGJlaGF2aW91ciB3aGVuIG9iamVjdCBkaWVzIGZpcnN0LgorICAgICAgICBDID0gc2VsZi5fc3ViY2xhc3MoKQorICAgICAgICBjYWxscyA9IFtdCisgICAgICAgIGRlZiBjYihhcmcpOgorICAgICAgICAgICAgY2FsbHMuYXBwZW5kKGFyZykKKyAgICAgICAgbyA9IEMoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kLCBjYikKKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKyAgICAgICAgIyBDYWxsYmFjayBpcyBvbmx5IGNhbGxlZCBvbmNlLgorICAgICAgICBDLnNvbWVfbWV0aG9kID0gT2JqZWN0LnNvbWVfbWV0aG9kCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193aGVuX21ldGhvZF9kZWFkKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FsbGJhY2sgYmVoYXZpb3VyIHdoZW4gbWV0aG9kIGRpZXMgZmlyc3QuCisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorICAgICAgICBvID0gQygxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICBkZWwgQy5zb21lX21ldGhvZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorICAgICAgICAjIENhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIG9uY2UuCisgICAgICAgIGRlbCBvCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9ub19jeWNsZXMoc2VsZik6CisgICAgICAgICMgQSBXZWFrTWV0aG9kIGRvZXNuJ3QgY3JlYXRlIGFueSByZWZlcmVuY2UgY3ljbGUgdG8gaXRzZWxmLgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIGRlZiBjYihfKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kLCBjYikKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihyKQorICAgICAgICBkZWwgcgorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgZGVmIF9lcShhLCBiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEgIT0gYikKKyAgICAgICAgZGVmIF9uZShhLCBiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICE9IGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEgPT0gYikKKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICB5ID0gT2JqZWN0KDEpCisgICAgICAgIGEgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5zb21lX21ldGhvZCkKKyAgICAgICAgYiA9IHdlYWtyZWYuV2Vha01ldGhvZCh5LnNvbWVfbWV0aG9kKQorICAgICAgICBjID0gd2Vha3JlZi5XZWFrTWV0aG9kKHgub3RoZXJfbWV0aG9kKQorICAgICAgICBkID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkub3RoZXJfbWV0aG9kKQorICAgICAgICAjIE9iamVjdHMgZXF1YWwsIHNhbWUgbWV0aG9kCisgICAgICAgIF9lcShhLCBiKQorICAgICAgICBfZXEoYywgZCkKKyAgICAgICAgIyBPYmplY3RzIGVxdWFsLCBkaWZmZXJlbnQgbWV0aG9kCisgICAgICAgIF9uZShhLCBjKQorICAgICAgICBfbmUoYSwgZCkKKyAgICAgICAgX25lKGIsIGMpCisgICAgICAgIF9uZShiLCBkKQorICAgICAgICAjIE9iamVjdHMgdW5lcXVhbCwgc2FtZSBvciBkaWZmZXJlbnQgbWV0aG9kCisgICAgICAgIHogPSBPYmplY3QoMikKKyAgICAgICAgZSA9IHdlYWtyZWYuV2Vha01ldGhvZCh6LnNvbWVfbWV0aG9kKQorICAgICAgICBmID0gd2Vha3JlZi5XZWFrTWV0aG9kKHoub3RoZXJfbWV0aG9kKQorICAgICAgICBfbmUoYSwgZSkKKyAgICAgICAgX25lKGEsIGYpCisgICAgICAgIF9uZShiLCBlKQorICAgICAgICBfbmUoYiwgZikKKyAgICAgICAgZGVsIHgsIHksIHoKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICMgRGVhZCBXZWFrTWV0aG9kcyBjb21wYXJlIGJ5IGlkZW50aXR5CisgICAgICAgIHJlZnMgPSBhLCBiLCBjLCBkLCBlLCBmCisgICAgICAgIGZvciBxIGluIHJlZnM6CisgICAgICAgICAgICBmb3IgciBpbiByZWZzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSA9PSByLCBxIGlzIHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxICE9IHIsIHEgaXMgbm90IHIpCisKKyAgICBkZWYgdGVzdF9oYXNoaW5nKHNlbGYpOgorICAgICAgICAjIEFsaXZlIFdlYWtNZXRob2RzIGFyZSBoYXNoYWJsZSBpZiB0aGUgdW5kZXJseWluZyBvYmplY3QgaXMKKyAgICAgICAgIyBoYXNoYWJsZS4KKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICB5ID0gT2JqZWN0KDEpCisgICAgICAgIGEgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5zb21lX21ldGhvZCkKKyAgICAgICAgYiA9IHdlYWtyZWYuV2Vha01ldGhvZCh5LnNvbWVfbWV0aG9kKQorICAgICAgICBjID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkub3RoZXJfbWV0aG9kKQorICAgICAgICAjIFNpbmNlIFdlYWtNZXRob2Qgb2JqZWN0cyBhcmUgZXF1YWwsIHRoZSBoYXNoZXMgc2hvdWxkIGJlIGVxdWFsLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goYikpCisgICAgICAgIGhhID0gaGFzaChhKQorICAgICAgICAjIERlYWQgV2Vha01ldGhvZHMgcmV0YWluIHRoZWlyIG9sZCBoYXNoIHZhbHVlCisgICAgICAgIGRlbCB4LCB5CisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYiksIGhhKQorICAgICAgICAjIElmIGl0IHdhc24ndCBoYXNoZWQgd2hlbiBhbGl2ZSwgYSBkZWFkIFdlYWtNZXRob2QgY2Fubm90IGJlIGhhc2hlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBjKQorCisKIGNsYXNzIE1hcHBpbmdUZXN0Q2FzZShUZXN0QmFzZSk6CiAKICAgICBDT1VOVCA9IDEwCkBAIC0xMTUwLDYgKzEzMTcsNyBAQAogICAgICAgICAgICAgICAgIHlpZWxkIE9iamVjdCh2KSwgdgogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpdCA9IE5vbmUgICAgICAgICAgICMgc2hvdWxkIGNvbW1pdCBhbGwgcmVtb3ZhbHMKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgc2VsZi5jaGVja193ZWFrX2Rlc3Ryb3lfYW5kX211dGF0ZV93aGlsZV9pdGVyYXRpbmcoZGljdCwgdGVzdGNvbnRleHQpCiAKICAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlc19kZXN0cm95X3doaWxlX2l0ZXJhdGluZyhzZWxmKToKQEAgLTExNzIsNiArMTM0MCw3IEBACiAgICAgICAgICAgICAgICAgeWllbGQgaywgT2JqZWN0KGspCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGl0ID0gTm9uZSAgICAgICAgICAgIyBzaG91bGQgY29tbWl0IGFsbCByZW1vdmFscworICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICBzZWxmLmNoZWNrX3dlYWtfZGVzdHJveV9hbmRfbXV0YXRlX3doaWxlX2l0ZXJhdGluZyhkaWN0LCB0ZXN0Y29udGV4dCkKIAogICAgIGRlZiB0ZXN0X21ha2Vfd2Vha19rZXllZF9kaWN0X2Zyb21fZGljdChzZWxmKToKQEAgLTEzODUsNiArMTU1NCwxNTEgQEAKICAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX19yZWYuY29weSgpCiAKKworY2xhc3MgRmluYWxpemVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBBOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KHNlbGYpOgorICAgICAgICAjIHdlIGNyZWF0ZSBubyByZWYtY3ljbGVzIHNvIGluIENQeXRob24gbm8gZ2Mgc2hvdWxkIGJlIG5lZWRlZAorICAgICAgICBpZiBzeXMuaW1wbGVtZW50YXRpb24ubmFtZSAhPSAnY3B5dGhvbic6CisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfZmluYWxpemUoc2VsZik6CisgICAgICAgIGRlZiBhZGQoeCx5LHopOgorICAgICAgICAgICAgcmVzLmFwcGVuZCh4ICsgeSArIHopCisgICAgICAgICAgICByZXR1cm4geCArIHkgKyB6CisKKyAgICAgICAgYSA9IHNlbGYuQSgpCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZiA9IHdlYWtyZWYuZmluYWxpemUoYSwgYWRkLCA2NywgNDMsIHo9ODkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzKSwgeyd6Jzo4OX0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgMTk5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxOTldKQorCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGYgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIGFkZCwgNjcsIDQzLCA4OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzLDg5KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIChhLCBhZGQsICg2Nyw0Myw4OSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmID0gd2Vha3JlZi5maW5hbGl6ZShhLCBhZGQsIHg9NjcsIHk9NDMsIHo9ODkpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMTk5XSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKworICAgICAgICBmMSA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2YxJykKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmMicpCisgICAgICAgIGYzID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjMnKQorICAgICAgICBmNCA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2Y0JykKKyAgICAgICAgZjUgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmNScpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgZmluYWxpemVycyBjYW4ga2VlcCB0aGVtc2VsdmVzIGFsaXZlCisgICAgICAgIGRlbCBmMSwgZjQKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMy5hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGY1LmFsaXZlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmNS5kZXRhY2goKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmNS5hbGl2ZSkKKworICAgICAgICBmNSgpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IHVucmVnaXN0ZXJlZAorICAgICAgICByZXMuYXBwZW5kKCdBJykKKyAgICAgICAgZjMoKSAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjMuYWxpdmUpCisgICAgICAgIHJlcy5hcHBlbmQoJ0InKQorICAgICAgICBmMygpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IGNhbGxlZAorICAgICAgICByZXMuYXBwZW5kKCdDJykKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2Y0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyLmFsaXZlKQorICAgICAgICByZXMuYXBwZW5kKCdEJykKKyAgICAgICAgZjIoKSAgICAgICAgICAgICAgICAgICAgICAgIyBub3RoaW5nIGJlY2F1c2UgcHJldmlvdXNseSBjYWxsZWQgYnkgZ2MKKworICAgICAgICBleHBlY3RlZCA9IFsnQScsICdmMycsICdCJywgJ0MnLCAnZjQnLCAnZjInLCAnZjEnLCAnRCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2FsbF9mcmVlZChzZWxmKToKKyAgICAgICAgIyB3ZSB3YW50IGEgd2Vha3JlZmFibGUgc3ViY2xhc3Mgb2Ygd2Vha3JlZi5maW5hbGl6ZQorICAgICAgICBjbGFzcyBNeUZpbmFsaXplcih3ZWFrcmVmLmZpbmFsaXplKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByZXMuYXBwZW5kKDEyMykKKyAgICAgICAgZiA9IE15RmluYWxpemVyKGEsIGNhbGxiYWNrKQorCisgICAgICAgIHdyX2NhbGxiYWNrID0gd2Vha3JlZi5yZWYoY2FsbGJhY2spCisgICAgICAgIHdyX2YgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgY2FsbGJhY2ssIGYKKworICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9jYWxsYmFjaygpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9mKCkpCisKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2NhbGxiYWNrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxMjNdKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJ1bl9pbl9jaGlsZChjbHMpOgorICAgICAgICBkZWYgZXJyb3IoKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGFuIGF0ZXhpdCBmaW5hbGl6ZXIgZnJvbSBpbnNpZGUgYSBmaW5hbGl6ZXIgY2FsbGVkCisgICAgICAgICAgICAjIGF0IGV4aXQuICBUaGlzIHNob3VsZCBiZSB0aGUgbmV4dCB0byBiZSBydW4uCisgICAgICAgICAgICBnMSA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2cxJykKKyAgICAgICAgICAgIHByaW50KCdmMyBlcnJvcicpCisgICAgICAgICAgICAxLzAKKworICAgICAgICAjIGNscyBzaG91bGQgc3RheSBhbGl2ZSB0aWxsIGF0ZXhpdCBjYWxsYmFja3MgcnVuCisgICAgICAgIGYxID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZjEnLCBfZ2xvYmFsX3ZhcikKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmMicsIF9nbG9iYWxfdmFyKQorICAgICAgICBmMyA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBlcnJvcikKKyAgICAgICAgZjQgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmNCcsIF9nbG9iYWxfdmFyKQorCisgICAgICAgIGFzc2VydCBmMS5hdGV4aXQgPT0gVHJ1ZQorICAgICAgICBmMi5hdGV4aXQgPSBGYWxzZQorICAgICAgICBhc3NlcnQgZjMuYXRleGl0ID09IFRydWUKKyAgICAgICAgYXNzZXJ0IGY0LmF0ZXhpdCA9PSBUcnVlCisKKyAgICBkZWYgdGVzdF9hdGV4aXQoc2VsZik6CisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC50ZXN0X3dlYWtyZWYgaW1wb3J0IEZpbmFsaXplVGVzdENhc2U7JysKKyAgICAgICAgICAgICAgICAnRmluYWxpemVUZXN0Q2FzZS5ydW5faW5fY2hpbGQoKScpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBwcm9nKQorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCdhc2NpaScpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgWydmNCBmb29iYXInLCAnZjMgZXJyb3InLCAnZzEnLCAnZjEgZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ1plcm9EaXZpc2lvbkVycm9yJyBpbiBlcnIpCisKKwogbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IHdlYWtyZWYucnN0CiAKID4+PiBpbXBvcnQgd2Vha3JlZgpAQCAtMTQ3MywxMCArMTc4NywxMiBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBSZWZlcmVuY2VzVGVzdENhc2UsCisgICAgICAgIFdlYWtNZXRob2RUZXN0Q2FzZSwKICAgICAgICAgTWFwcGluZ1Rlc3RDYXNlLAogICAgICAgICBXZWFrVmFsdWVEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFdlYWtLZXlEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZSwKKyAgICAgICAgRmluYWxpemVUZXN0Q2FzZSwKICAgICAgICAgKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3Qoc3lzLm1vZHVsZXNbX19uYW1lX19dKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CmluZGV4IGNiNGNkZTkuLjJjNGFjMDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CkBAIC04LDcgKzgsNyBAQAogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgbWFjaGluZQogCiAjIERvIHRoaXMgZmlyc3Qgc28gdGVzdCB3aWxsIGJlIHNraXBwZWQgaWYgbW9kdWxlIGRvZXNuJ3QgZXhpc3QKLXN1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJykKK3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJywgcmVxdWlyZWRfb249Wyd3aW4nXSkKICMgTm93IGltcG9ydCBldmVyeXRoaW5nCiBmcm9tIHdpbnJlZyBpbXBvcnQgKgogCkBAIC01NywxMyArNTcsMTMgQEAKICAgICBkZWYgZGVsZXRlX3RyZWUoc2VsZiwgcm9vdCwgc3Via2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaGtleSA9IE9wZW5LZXkocm9vdCwgc3Via2V5LCBLRVlfQUxMX0FDQ0VTUykKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIHN1YmtleSBkb2VzIG5vdCBleGlzdAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3Vic3Via2V5ID0gRW51bUtleShoa2V5LCAwKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgbm8gbW9yZSBzdWJrZXlzCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHNlbGYuZGVsZXRlX3RyZWUoaGtleSwgc3Vic3Via2V5KQpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICBRdWVyeUluZm9LZXkoaW50X3N1Yl9rZXkpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkl0IGFwcGVhcnMgdGhlIENsb3NlS2V5KCkgZnVuY3Rpb24gZG9lcyAiCiAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBjbG9zZSB0aGUgYWN0dWFsIGtleSEiKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgLi4uIGFuZCBjbG9zZSB0aGF0IGtleSB0aGF0IHdheSA6LSkKICAgICAgICAgaW50X2tleSA9IGludChrZXkpCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfa2V5KQogICAgICAgICAgICAgc2VsZi5mYWlsKCJJdCBhcHBlYXJzIHRoZSBrZXkuQ2xvc2UoKSBmdW5jdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfcmVhZF90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIsIE9wZW5LZXk9T3BlbktleSk6CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gRW51bVZhbHVlKHN1Yl9rZXksIGluZGV4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSBpbiB0ZXN0X2RhdGEsIFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgYmFjayB0aGUgY29ycmVjdCB0ZXN0IGRhdGEiKQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIEVudW1LZXkoa2V5LCAxKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJXYXMgYWJsZSB0byBnZXQgYSBzZWNvbmQga2V5IHdoZW4gSSBvbmx5IGhhdmUgb25lISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBrZXkuQ2xvc2UoKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAjIFNob3VsZG50IGJlIGFibGUgdG8gZGVsZXRlIGl0IHR3aWNlIQogICAgICAgICAgICAgRGVsZXRlS2V5KGtleSwgc3Via2V5c3RyKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJEZWxldGluZyB0aGUga2V5IHR3aWNlIHN1Y2NlZWRlZCIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAga2V5LkNsb3NlKCkKICAgICAgICAgRGVsZXRlS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtleSA9IE9wZW5LZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG9wZW4gdGhlIG5vbi1leGlzdGVudCBrZXkiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgX3Rlc3RfYWxsKHNlbGYsIHJvb3Rfa2V5LCBzdWJrZXlzdHI9InN1Yl9rZXkiKToKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiAgICAgZGVmIHRlc3RfaW5leGlzdGFudF9yZW1vdGVfcmVnaXN0cnkoc2VsZik6CiAgICAgICAgIGNvbm5lY3QgPSBsYW1iZGE6IENvbm5lY3RSZWdpc3RyeSgiYWJjZGVmZ2hpamtsIiwgSEtFWV9DVVJSRU5UX1VTRVIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29ubmVjdCkKIAogICAgIGRlZiB0ZXN0RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKHNlbGYpOgogICAgICAgICByID0gRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKCIld2luZGlyJVxcdGVzdCIpCkBAIC0yNDIsOCArMjQyLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKSBhcyBoOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5oYW5kbGUsIDApCi0gICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCiAKICAgICBkZWYgdGVzdF9jaGFuZ2luZ192YWx1ZShzZWxmKToKQEAgLTM0MSw3ICszNDEsNyBAQAogICAgIGRlZiB0ZXN0X3F1ZXJ5dmFsdWVleF9yZXR1cm5fdmFsdWUoc2VsZik6CiAgICAgICAgICMgVGVzdCBmb3IgSXNzdWUgIzE2NzU5LCByZXR1cm4gdW5zaWduZWQgaW50IGZyb20gUXVlcnlWYWx1ZUV4LgogICAgICAgICAjIFJlZzJQeSwgd2hpY2ggZ2V0cyBjYWxsZWQgYnkgUXVlcnlWYWx1ZUV4LCB3YXMgcmV0dXJuaW5nIGEgdmFsdWUKLSAgICAgICAgIyBnZW5lcmF0ZWQgYnkgUHlMb25nX0Zyb21Mb25nLiBUaGUgaW1wbG1lbnRhdGlvbiBub3cgdXNlcworICAgICAgICAjIGdlbmVyYXRlZCBieSBQeUxvbmdfRnJvbUxvbmcuIFRoZSBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcwogICAgICAgICAjIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nIHRvIG1hdGNoIERXT1JEJ3Mgc2l6ZS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpIGFzIGNrOgpAQCAtMzU0LDYgKzM1NCwxOSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQogCisgICAgZGVmIHRlc3Rfc2V0dmFsdWVleF9jcmFzaF93aXRoX25vbmVfYXJnKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIElzc3VlICMyMTE1MSwgc2VnZmF1bHQgd2hlbiBOb25lIGlzIHBhc3NlZCB0byBTZXRWYWx1ZUV4CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKSBhcyBjazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNrLmhhbmRsZSwgMCkKKyAgICAgICAgICAgICAgICB0ZXN0X3ZhbCA9IE5vbmUKKyAgICAgICAgICAgICAgICBTZXRWYWx1ZUV4KGNrLCAidGVzdF9uYW1lIiwgMCwgUkVHX0JJTkFSWSwgdGVzdF92YWwpCisgICAgICAgICAgICAgICAgcmV0X3ZhbCwgcmV0X3R5cGUgPSBRdWVyeVZhbHVlRXgoY2ssICJ0ZXN0X25hbWUiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0X3R5cGUsIFJFR19CSU5BUlkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXRfdmFsLCB0ZXN0X3ZhbCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKwogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKFJFTU9URV9OQU1FLCAiU2tpcHBpbmcgcmVtb3RlIHJlZ2lzdHJ5IHRlc3RzIikKQEAgLTQwNyw3ICs0MjAsNyBAQAogICAgICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcGVuX2ZhaWwpCiAKICAgICAgICAgICAgICMgTm93IGV4cGxpY2l0bHkgb3BlbiB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGtleQogICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCkBAIC00NDcsNyArNDYwLDcgQEAKICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9wZW5fZmFpbCkKIAogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIDMyLWJpdCBrZXkgaXMgYWN0dWFsbHkgdGhlcmUKICAgICAgICAgICAgIHdpdGggT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQppbmRleCAwNjlhZGMzLi44MzYxOGI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAga2V5ID0gd2lucmVnLk9wZW5LZXlFeCh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgIkFwcEV2ZW50c1xTY2hlbWVzXEFwcHNcLkRlZmF1bHRcezB9XC5EZWZhdWx0Ii5mb3JtYXQoc291bmQpKQogICAgICAgICByZXR1cm4gd2lucmVnLkVudW1WYWx1ZShrZXksIDApWzFdICE9ICIiCi0gICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIGNsYXNzIEJlZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKaW5kZXggN2JkOGEyYy4uODk5NzFmMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKQEAgLTEwLDYgKzEwLDcgQEAKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiAKQEAgLTI0MCw3ICsyNDEsNiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MLCBFVC5mcm9tc3RyaW5nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVULlBJLCBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MUGFyc2VyLCBFVC5YTUxUcmVlQnVpbGRlcikKIAogICAgIGRlZiB0ZXN0X3NpbXBsZW9wcyhzZWxmKToKICAgICAgICAgIyBCYXNpYyBtZXRob2Qgc2FuaXR5IGNoZWNrcy4KQEAgLTQzMywxNSArNDMzLDYgQEAKICAgICAgICAgICAgICAgICAnICAgPGVtcHR5LWVsZW1lbnQgLz5cbicKICAgICAgICAgICAgICAgICAnPC9yb290PicpCiAKLSAgICAgICAgcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKSAjIDEuMiBjb21wYXRpYmlsaXR5Ci0gICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgIHNlbGYuc2VyaWFsaXplX2NoZWNrKHBhcnNlci5jbG9zZSgpLAotICAgICAgICAgICAgICAgICc8cm9vdD5cbicKLSAgICAgICAgICAgICAgICAnICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD5cbicKLSAgICAgICAgICAgICAgICAnICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4nCi0gICAgICAgICAgICAgICAgJyAgIDxlbXB0eS1lbGVtZW50IC8+XG4nCi0gICAgICAgICAgICAgICAgJzwvcm9vdD4nKQotCiAgICAgICAgIHRhcmdldCA9IEVULlRyZWVCdWlsZGVyKCkKICAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD10YXJnZXQpCiAgICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCkBAIC03MDYsOSArNjk3LDkgQEAKICAgICAgICAgICAgICdpc284ODU5LTEzJywgJ2lzbzg4NTktMTQnLCAnaXNvODg1OS0xNScsICdpc284ODU5LTE2JywKICAgICAgICAgICAgICdjcDQzNycsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsICdjcDg1MicsCiAgICAgICAgICAgICAnY3A4NTUnLCAnY3A4NTYnLCAnY3A4NTcnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwODY5JywgJ2NwODc0JywgJ2NwMTAwNicsICdjcDEyNTAnLAotICAgICAgICAgICAgJ2NwMTI1MScsICdjcDEyNTInLCAnY3AxMjUzJywgJ2NwMTI1NCcsICdjcDEyNTUnLCAnY3AxMjU2JywKLSAgICAgICAgICAgICdjcDEyNTcnLCAnY3AxMjU4JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDg2OScsICdjcDg3NCcsICdjcDEwMDYnLCAnY3AxMTI1JywKKyAgICAgICAgICAgICdjcDEyNTAnLCAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsCisgICAgICAgICAgICAnY3AxMjU2JywgJ2NwMTI1NycsICdjcDEyNTgnLAogICAgICAgICAgICAgJ21hYy1jeXJpbGxpYycsICdtYWMtZ3JlZWsnLCAnbWFjLWljZWxhbmQnLCAnbWFjLWxhdGluMicsCiAgICAgICAgICAgICAnbWFjLXJvbWFuJywgJ21hYy10dXJraXNoJywKICAgICAgICAgICAgICdpc28yMDIyLWpwJywgJ2lzbzIwMjItanAtMScsICdpc28yMDIyLWpwLTInLCAnaXNvMjAyMi1qcC0yMDA0JywKQEAgLTk2NCw2ICs5NTUsMTYwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemVkLCBleHBlY3RlZCkKIAogCitjbGFzcyBYTUxQdWxsUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2ZlZWQoc2VsZiwgcGFyc2VyLCBkYXRhLCBjaHVua19zaXplPU5vbmUpOgorICAgICAgICBpZiBjaHVua19zaXplIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBjaHVua19zaXplKToKKyAgICAgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhW2k6aStjaHVua19zaXplXSkKKworICAgIGRlZiBhc3NlcnRfZXZlbnRfdGFncyhzZWxmLCBwYXJzZXIsIGV4cGVjdGVkKToKKyAgICAgICAgZXZlbnRzID0gcGFyc2VyLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGFjdGlvbiwgZWxlbS50YWcpIGZvciBhY3Rpb24sIGVsZW0gaW4gZXZlbnRzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWwoc2VsZik6CisgICAgICAgIGZvciBjaHVua19zaXplIGluIChOb25lLCAxLCA1KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNodW5rX3NpemU9Y2h1bmtfc2l6ZSk6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHJvb3Q+XG4gIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICAgICAgICAgKCdlbmQnLCAnZWxlbWVudCcpLAorICAgICAgICAgICAgICAgICAgICAoJ2VuZCcsICdlbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAncm9vdCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2ZlZWRfd2hpbGVfaXRlcmF0aW5nKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKCkKKyAgICAgICAgaXQgPSBwYXJzZXIucmVhZF9ldmVudHMoKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50PlxuIikKKyAgICAgICAgYWN0aW9uLCBlbGVtID0gbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYWN0aW9uLCBlbGVtLnRhZyksICgnZW5kJywgJ2VsZW1lbnQnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iKQorICAgICAgICBhY3Rpb24sIGVsZW0gPSBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhY3Rpb24sIGVsZW0udGFnKSwgKCdlbmQnLCAncm9vdCcpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgorICAgICAgICAgICAgbmV4dChpdCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWxfd2l0aF9ucyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QgeG1sbnM9J25hbWVzcGFjZSc+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVtcHR5LWVsZW1lbnQvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICgnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne25hbWVzcGFjZX1lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAne25hbWVzcGFjZX1yb290JyldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X25zX2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydC1ucycsICdlbmQtbnMnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290IHhtbG5zPSduYW1lc3BhY2UnPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxpc3QocGFyc2VyLnJlYWRfZXZlbnRzKCkpLAorICAgICAgICAgICAgWygnc3RhcnQtbnMnLCAoJycsICduYW1lc3BhY2UnKSldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKSwgWygnZW5kLW5zJywgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCAnZW5kJykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tmb299ZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne2Zvb31lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ2VuZCcsICdyb290JyldKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5jbG9zZSgpKQorCisgICAgZGVmIHRlc3RfZXZlbnRzX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBldmVudHMgY2FuIGJlIHNvbWUgc2VxdWVuY2UgdGhhdCdzIG5vdCBqdXN0IGEgdHVwbGUgb3IgbGlzdAorICAgICAgICBldmVudHNldCA9IHsnZW5kJywgJ3N0YXJ0J30KKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9ZXZlbnRzZXQpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGZvbz5iYXI8L2Zvbz4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZm9vJyksICgnZW5kJywgJ2ZvbycpXSkKKworICAgICAgICBjbGFzcyBEdW1teUl0ZXI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5ldmVudHMgPSBpdGVyKFsnc3RhcnQnLCAnZW5kJywgJ3N0YXJ0LW5zJ10pCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmV2ZW50cykKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz1EdW1teUl0ZXIoKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8Zm9vPmJhcjwvZm9vPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdmb28nKSwgKCdlbmQnLCAnZm9vJyldKQorCisKKyAgICBkZWYgdGVzdF91bmtub3duX2V2ZW50KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydCcsICdlbmQnLCAnYm9ndXMnKSkKKworCiAjCiAjIHhpbmNsdWRlIHRlc3RzIChzYW1wbGVzIGZyb20gYXBwZW5kaXggQyBvZiB0aGUgeGluY2x1ZGUgc3BlY2lmaWNhdGlvbikKIApAQCAtMTMwNSw3ICsxNDUwLDcgQEAKICAgICAgICAgIyBEb24ndCBjcmFzaCB3aGVuIHVzaW5nIGN1c3RvbSBlbnRpdGllcy4KIAogICAgICAgICBFTlRJVElFUyA9IHsncnNxdW8nOiAnXHUyMDE5JywgJ2xzcXVvJzogJ1x1MjAxOCd9Ci0gICAgICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKICAgICAgICAgcGFyc2VyLmVudGl0eS51cGRhdGUoRU5USVRJRVMpCiAgICAgICAgIHBhcnNlci5mZWVkKCIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uIFNZU1RFTSAicGFwLXYxNS0yMDAxLTAxLTMxLmR0ZCIgW10+CkBAIC0xNjQzLDYgKzE3ODgsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbmQoJy4vdGFnW2xhc3QoKS0xXScpLmF0dHJpYlsnY2xhc3MnXSwgJ2MnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmluZCgnLi90YWdbbGFzdCgpLTJdJykuYXR0cmliWydjbGFzcyddLCAnYicpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1stMV0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCktMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCkrMV0nKQorCiAgICAgZGVmIHRlc3RfZmluZGFsbChzZWxmKToKICAgICAgICAgZSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgICAgICBlWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQpAQCAtMTkwMiw3ICsyMDUyLDcgQEAKICAgICAgICAgIyBNaW1pY2sgU2ltcGxlVEFMJ3MgYmVoYXZpb3VyIChpc3N1ZSAjMTYwODkpOiBib3RoIHZlcnNpb25zIG9mCiAgICAgICAgICMgVHJlZUJ1aWxkZXIgc2hvdWxkIGJlIGFibGUgdG8gY29wZSB3aXRoIGEgc3ViY2xhc3Mgb2YgdGhlCiAgICAgICAgICMgcHVyZSBQeXRob24gRWxlbWVudCBjbGFzcy4KLSAgICAgICAgYmFzZSA9IEVULl9FbGVtZW50CisgICAgICAgIGJhc2UgPSBFVC5fRWxlbWVudF9QeQogICAgICAgICAjIE5vdCBmcm9tIGEgQyBleHRlbnNpb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQogICAgICAgICAjIEZvcmNlIHNvbWUgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugd2l0aCBhIEMgY2xhc3MgdG8gbWFrZSB0aGluZ3MKQEAgLTIyNjEsNiArMjQxMSwxOCBAQAogICAgICAgICAgICAgRVQudG9zdHJpbmcocm9vdCwgJ3V0Zi0xNicpLAogICAgICAgICAgICAgYicnLmpvaW4oRVQudG9zdHJpbmdsaXN0KHJvb3QsICd1dGYtMTYnKSkpCiAKKyAgICBkZWYgdGVzdF9zaG9ydF9lbXB0eV9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgcm9vdCA9IEVULmZyb21zdHJpbmcoJzx0YWc+YTx4IC8+Yjx5PjwveT5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJyksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9RmFsc2UpLAorICAgICAgICAgICAgJzx0YWc+YTx4PjwveD5iPHk+PC95PmM8L3RhZz4nKQorCiAKIGNsYXNzIFBhcnNlRXJyb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKQEAgLTIzMjYsOCArMjQ4OCwxMSBAQAogCiAgICAgIyBUZXN0IHRoYXQgdGhlIEMgYWNjZWxlcmF0b3Igd2FzIG5vdCBpbXBvcnRlZCBmb3IgcHlFVAogICAgIGRlZiB0ZXN0X2NvcnJlY3RfaW1wb3J0X3B5RVQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlFVC5FbGVtZW50Ll9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5RVQuU3ViRWxlbWVudC5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKKyAgICAgICAgIyBUaGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW4gUHl0aG9uIGNvZGUgaXMgdHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICAjIHdoaWxlIHRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgX2VsZW1lbnR0cmVlIGlzCisgICAgICAgICMgPGNsYXNzICd3cmFwcGVyX2Rlc2NyaXB0b3InPgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlFVC5FbGVtZW50Ll9faW5pdF9fLCB0eXBlcy5GdW5jdGlvblR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweUVULlhNTFBhcnNlci5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzOTcsNiArMjU2Miw3IEBACiAgICAgICAgIEVsZW1lbnRJdGVyVGVzdCwKICAgICAgICAgVHJlZUJ1aWxkZXJUZXN0LAogICAgICAgICBYTUxQYXJzZXJUZXN0LAorICAgICAgICBYTUxQdWxsUGFyc2VyVGVzdCwKICAgICAgICAgQnVnc1Rlc3QsCiAgICAgICAgIF0KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKaW5kZXggZDA0YjdkYy4uODE2YWE4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cywgc3RydWN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfZnJlc2hfbW9kdWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCiBjRVQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLApAQCAtMzEsMTQgKzMyLDIyIEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoY0VULCAncmVxdWlyZXMgX2VsZW1lbnR0cmVlJykKK0BzdXBwb3J0LmNweXRob25fb25seQogY2xhc3MgVGVzdEFjY2VsZXJhdG9ySW1wb3J0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGF0IHRoZSBDIGFjY2VsZXJhdG9yIHdhcyBpbXBvcnRlZCwgYXMgZXhwZWN0ZWQKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVQoc2VsZik6CisgICAgICAgICMgU3ViRWxlbWVudCBpcyBhIGZ1bmN0aW9uIHNvIGl0IHJldGFpbnMgX2VsZW1lbnR0cmVlIGFzIGl0cyBtb2R1bGUuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VULlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVRfYWxpYXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VUX2FsaWFzLlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKKyAgICBkZWYgdGVzdF9wYXJzZXJfY29tZXNfZnJvbV9DKHNlbGYpOgorICAgICAgICAjIFRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbiBQeXRob24gY29kZSBpcyB0eXBlcy5GdW5jdGlvblR5cGUsCisgICAgICAgICMgd2hpbGUgdGhlIHR5cGUgb2YgbWV0aG9kcyBkZWZpbmVkIGluc2lkZSBfZWxlbWVudHRyZWUgaXMKKyAgICAgICAgIyA8Y2xhc3MgJ3dyYXBwZXJfZGVzY3JpcHRvcic+CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjRVQuRWxlbWVudC5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCiBAc3VwcG9ydC5jcHl0aG9uX29ubHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggY2M1MjI1OS4uOTliM2VkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTE1LDYgKzE1LDEwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogdHJ5OgorICAgIGltcG9ydCBnemlwCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3ppcCA9IE5vbmUKK3RyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQpAQCAtMjE2LDcgKzIyMCw3IEBACiAgICAgICAgICAgICB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5KCdodHRwczovL2xvY2FsaG9zdDo5OTk5JykuYmFkX2Z1bmN0aW9uKCkKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19zc2wsICJ4bWxycGMgY2xpZW50J3MgZXJyb3Igd2l0aCBTU0wgc3VwcG9ydCIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19zc2wpCiAKIGNsYXNzIEhlbHBlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM3Niw2ICszODAsMTEgQEAKICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Rpdic6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nCiAKKyAgICAgICAgY2xhc3MgRml4dHVyZToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXREYXRhKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICc0MicKKwogICAgIGRlZiBteV9mdW5jdGlvbigpOgogICAgICAgICAnJydUaGlzIGlzIG15IGZ1bmN0aW9uJycnCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC00MDcsNyArNDE2LDggQEAKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihwb3cpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihteV9mdW5jdGlvbikKLSAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnN0YW5jZShUZXN0SW5zdGFuY2VDbGFzcygpKQorICAgICAgICB0ZXN0SW5zdGFuY2UgPSBUZXN0SW5zdGFuY2VDbGFzcygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UodGVzdEluc3RhbmNlLCBhbGxvd19kb3R0ZWRfbmFtZXM9VHJ1ZSkKICAgICAgICAgZXZ0LnNldCgpCiAKICAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cwpAQCAtNTAwLDcgKzUxMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBleGNfbWVzcyA9IGUuaGVhZGVycy5nZXQoJ1gtZXhjZXB0aW9uJykKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICMgSWdub3JlIHNvY2tldC5lcnJvcnMgaGVyZS4KKyAgICAgICAgIyBJZ25vcmUgT1NFcnJvcnMgaGVyZS4KICAgICAgICAgZXhjX21lc3MgPSBzdHIoZSkKIAogICAgIGlmIGV4Y19tZXNzIGFuZCAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIGluIGV4Y19tZXNzLmxvd2VyKCk6CkBAIC01MTUsNyArNTI1LDcgQEAKICAgICAgICAgZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcChzZWxmKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKS5teV9mdW5jdGlvbigpCi0gICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCkBAIC01NTMsNyArNTYzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNTY2LDcgKzU3Niw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoc3RhcnRfc3RyaW5nLCBlbmRfc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc3RyaW5nICsgZW5kX3N0cmluZykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC01ODcsMTIgKzU5NywxMyBAQAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24xKHNlbGYpOgogICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLmxpc3RNZXRob2RzJywgJ3N5c3RlbS5tZXRob2RIZWxwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLm1ldGhvZFNpZ25hdHVyZScsICdzeXN0ZW0ubXVsdGljYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpeHR1cmUnXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBtZXRoID0gcC5zeXN0ZW0ubGlzdE1ldGhvZHMoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobWV0aCksIGV4cGVjdGVkX21ldGhvZHMpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjA1LDcgKzYxNiw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02MTksNyArNjMwLDcgQEAKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbXlmdW5jdGlvbiA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ215X2Z1bmN0aW9uJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlmdW5jdGlvbiwgJ1RoaXMgaXMgbXkgZnVuY3Rpb24nKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTYzMiw3ICs2NDMsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZzaWcgPSBwLnN5c3RlbS5tZXRob2RTaWduYXR1cmUoJ2RpdicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdnNpZywgJ3NpZ25hdHVyZXMgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjQ5LDcgKzY2MCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZF9yZXN1bHQsIDIrMykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93X3Jlc3VsdCwgNioqOCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2X3Jlc3VsdCwgMTI3Ly80MikKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02NzAsNyArNjgxLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnJlc3VsdHNbMF1bJ2ZhdWx0U3RyaW5nJ10sCiAgICAgICAgICAgICAgICAgJzxjbGFzcyBcJ0V4Y2VwdGlvblwnPjptZXRob2QgInRoaXNfaXNfbm90X2V4aXN0cyIgJwogICAgICAgICAgICAgICAgICdpcyBub3Qgc3VwcG9ydGVkJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02ODYsNiArNjk3LDEyIEBACiAgICAgICAgICMgVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0aW1lb3V0LgogICAgICAgICBzZWxmLnRlc3Rfc2ltcGxlMSgpCiAKKyAgICBkZWYgdGVzdF9hbGxvd19kb3R0ZWRfbmFtZXNfdHJ1ZShzZWxmKToKKyAgICAgICAgIyBYWFggYWxzbyBuZWVkIGFsbG93X2RvdHRlZF9uYW1lc19mYWxzZSB0ZXN0LgorICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC9SUEMyIiAlIChBRERSLCBQT1JUKSkKKyAgICAgICAgZGF0YSA9IHNlcnZlci5GaXh0dXJlLmdldERhdGEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICc0MicpCisKICAgICBkZWYgdGVzdF91bmljb2RlX2hvc3Qoc2VsZik6CiAgICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovLyVzOiVkL1JQQzIiICUgKEFERFIsIFBPUlQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5hZGQoImEiLCAiXHhlOSIpLCAiYVx4ZTkiKQpAQCAtNzkzLDYgKzgxMCw3IEBACiAKICNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgZ3ppcCBlbmNvZGluZyB3b3JrcyBpbiBib3RoIGRpcmVjdGlvbnMKICMoZm9yIGEgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlKQorQHVuaXR0ZXN0LnNraXBJZihnemlwIGlzIE5vbmUsICdyZXF1aXJlcyBnemlwJykKIGNsYXNzIEd6aXBTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgogICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCiAgICAgI2NsYXNzIHZhcmlhYmxlCkBAIC05MjMsNyArOTQxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtOTM2LDcgKzk1NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgcC5wb3coNiw4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgogICAgICAgICAgICAgICAgICMgVGhlIHR3byBzZXJ2ZXItc2lkZSBlcnJvciBoZWFkZXJzIHNob3VsZG4ndCBiZSBzZW50IGJhY2sgaW4gdGhpcyBjYXNlCkBAIC05NTYsNyArOTc0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBwLnBvdyg2LDgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpIGFuZCBoYXNhdHRyKGUsICJoZWFkZXJzIik6CiAgICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgZ2V0IGVycm9yIGluZm8gaW4gdGhlIHJlc3BvbnNlCkBAIC0xMDg0LDIzICsxMTAyLDEzIEBACiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgotICAgIHhtbHJwY190ZXN0cyA9IFtYTUxSUENUZXN0Q2FzZSwgSGVscGVyVGVzdENhc2UsIERhdGVUaW1lVGVzdENhc2UsCi0gICAgICAgICBCaW5hcnlUZXN0Q2FzZSwgRmF1bHRUZXN0Q2FzZV0KLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2ltcGxlU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIpCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgZ3ppcAotICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEd6aXBTZXJ2ZXJUZXN0Q2FzZSkKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgI2d6aXAgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNlcnZlclByb3h5VGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChGYWlsaW5nU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChDR0lIYW5kbGVyVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAorICAgICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlU2VydmVyVGVzdENhc2UsIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSwKKyAgICAgICAgICAgIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMiwgR3ppcFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgTXVsdGlQYXRoU2VydmVyVGVzdENhc2UsIFNlcnZlclByb3h5VGVzdENhc2UsIEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgIENHSUhhbmRsZXJUZXN0Q2FzZSkKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp4bWxycGNfdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQppbmRleCA3N2Y2NmVhLi5iNjBiODJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CkBAIC03LDMxICs3LDcgQEAKIAogaW1wb3J0IHhtbHJwYy5jbGllbnQgYXMgeG1scnBjbGliCiAKLWNsYXNzIEN1cnJlbnRUaW1lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9jdXJyZW50X3RpbWUoc2VsZik6Ci0gICAgICAgICMgR2V0IHRoZSBjdXJyZW50IHRpbWUgZnJvbSB4bWxycGMuY29tLiAgVGhpcyBjb2RlIGV4ZXJjaXNlcwotICAgICAgICAjIHRoZSBtaW5pbWFsIEhUVFAgZnVuY3Rpb25hbGl0eSBpbiB4bWxycGNsaWIuCi0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWUueG1scnBjLmNvbSBpcyB1bnJlbGlhYmxlIikKLSAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vdGltZS54bWxycGMuY29tL1JQQzIiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0MCA9IHNlcnZlci5jdXJyZW50VGltZS5nZXRDdXJyZW50VGltZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5ldHdvcmsgZXJyb3I6ICVzIiAlIGUpCi0KLSAgICAgICAgIyBQZXJmb3JtIGEgbWluaW1hbCBzYW5pdHkgY2hlY2sgb24gdGhlIHJlc3VsdCwganVzdCB0byBiZSBzdXJlCi0gICAgICAgICMgdGhlIHJlcXVlc3QgbWVhbnMgd2hhdCB3ZSB0aGluayBpdCBtZWFucy4KLSAgICAgICAgdDEgPSB4bWxycGNsaWIuRGF0ZVRpbWUoKQotCi0gICAgICAgIGR0MCA9IHhtbHJwY2xpYi5fZGF0ZXRpbWVfdHlwZSh0MC52YWx1ZSkKLSAgICAgICAgZHQxID0geG1scnBjbGliLl9kYXRldGltZV90eXBlKHQxLnZhbHVlKQotICAgICAgICBpZiBkdDAgPiBkdDE6Ci0gICAgICAgICAgICBkZWx0YSA9IGR0MCAtIGR0MQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsdGEgPSBkdDEgLSBkdDAKLSAgICAgICAgIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzeXN0ZW0gdGltZSBoZXJlIGFuZCB0aGUgc3lzdGVtCi0gICAgICAgICMgdGltZSBvbiB0aGUgc2VydmVyIHNob3VsZCBub3QgYmUgdG9vIGJpZy4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlbHRhLmRheXMgPD0gMSkKK2NsYXNzIFB5dGhvbkJ1aWxkZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9weXRob25fYnVpbGRlcnMoc2VsZik6CiAgICAgICAgICMgR2V0IHRoZSBsaXN0IG9mIGJ1aWxkZXJzIGZyb20gdGhlIFhNTFJQQyBidWlsZGJvdCBpbnRlcmZhY2UgYXQKQEAgLTM5LDcgKzE1LDcgQEAKICAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vYnVpbGRib3QucHl0aG9uLm9yZy9hbGwveG1scnBjLyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGJ1aWxkZXJzID0gc2VydmVyLmdldEFsbEJ1aWxkZXJzKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibmV0d29yayBlcnJvcjogJXMiICUgZSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2VydmVyKCdjbG9zZScpKCkpCiAKQEAgLTUxLDcgKzI3LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEN1cnJlbnRUaW1lVGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQeXRob25CdWlsZGVyc1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQppbmRleCAxMmEwZjcxLi44ZGFlMmViIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CkBAIC0xLDkgKzEsOCBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHRpbWUKLWltcG9ydCBzaHV0aWwKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCB6aXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEyLDkgKzExLDkgQEAKIGZyb20gdGVtcGZpbGUgaW1wb3J0IFRlbXBvcmFyeUZpbGUKIGZyb20gcmFuZG9tIGltcG9ydCByYW5kaW50LCByYW5kb20sIGdldHJhbmRiaXRzCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBmaW5kZmlsZSwgdW5saW5rLAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIGZpbmRmaWxlLCB1bmxpbmssIHJtdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemxpYiwgcmVxdWlyZXNfYnoyLCByZXF1aXJlc19sem1hLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCwgY2hlY2tfd2FybmluZ3MpCiAKIFRFU1RGTjIgPSBURVNURk4gKyAiMiIKIFRFU1RGTkRJUiA9IFRFU1RGTiArICJkIgpAQCAtMzUsNiArMzQsMTAgQEAKICAgICAgICAgeWllbGQgZgogICAgICAgICB0ZXN0LmFzc2VydEZhbHNlKGYuY2xvc2VkKQogCitkZWYgb3BlblUoemlwZnAsIGZuKToKKyAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJldHVybiB6aXBmcC5vcGVuKGZuLCAnclUnKQorCiBjbGFzcyBBYnN0cmFjdFRlc3RzV2l0aFNvdXJjZUZpbGU6CiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKQEAgLTUzNywxMiArNTQwLDEyIEBACiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9TVE9SRUQKIAogICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9RmFsc2UpIGFzIHppcGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBmcC53cml0ZSwgVEVTVEZOLCAiYW5vdGhlci5uYW1lIikKIAogICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0MihzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PUZhbHNlKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIsICJhbm90aGVyLm5hbWUiLCBzZWxmLmRhdGEpCiAKQEAgLTU4OCw3ICs1OTEsNyBAQAogICAgICAgICAgICAgICAgIGlmIG9zLmFsdHNlcCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcGF0aF9zcGxpdC5leHRlbmQoZm4uc3BsaXQob3MuYWx0c2VwKSkKICAgICAgICAgICAgICAgICBpZiAnX19weWNhY2hlX18nIGluIHBhdGhfc3BsaXQ6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gaW1wLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQorICAgICAgICAgICAgICAgICAgICBmbiA9IGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGZuID0gZm5bOi0xXQogCkBAIC02MjIsNiArNjI1LDM0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ2VtYWlsL19faW5pdF9fLnB5JywgbmFtZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ2VtYWlsL21pbWUvdGV4dC5weScsIG5hbWVzKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfZmlsdGVyZWRfcHl0aG9uX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGltcG9ydCB0ZXN0CisgICAgICAgIHBhY2thZ2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUodGVzdC5fX2ZpbGVfXykKKworICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgorCisgICAgICAgICAgICAjIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IGZvbGRlciBnaXZlcyBlcnJvciBtZXNzYWdlcworICAgICAgICAgICAgIyAob24gdGhlIGJhZHN5bnRheF8uLi4gZmlsZXMpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCisgICAgICAgICAgICByZXBvcnRTdHIgPSByZXBvcnRTSU8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgaW4gcmVwb3J0U3RyKQorCisgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhhdCB0aGUgZmlsdGVyIHdvcmtzIG9uIHRoZSB3aG9sZSBwYWNrYWdlCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIsIGZpbHRlcmZ1bmM9bGFtYmRhIHdoYXRldmVyOiBGYWxzZSkKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBub3QgaW4gcmVwb3J0U3RyKQorCisgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhhdCB0aGUgZmlsdGVyIHdvcmtzIG9uIGluZGl2aWR1YWwgZmlsZXMKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgcmVwb3J0U0lPLCBzZWxmLmFzc2VydFdhcm5zKFVzZXJXYXJuaW5nKToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIsIGZpbHRlcmZ1bmM9bGFtYmRhIGZuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkJyBub3QgaW4gZm4pCisgICAgICAgICAgICByZXBvcnRTdHIgPSByZXBvcnRTSU8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgcmVwb3J0U3RyOgorICAgICAgICAgICAgICAgIHByaW50KHJlcG9ydFN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU3ludGF4RXJyb3InIG5vdCBpbiByZXBvcnRTdHIpCisKICAgICBkZWYgdGVzdF93cml0ZV93aXRoX29wdGltaXphdGlvbihzZWxmKToKICAgICAgICAgaW1wb3J0IGVtYWlsCiAgICAgICAgIHBhY2thZ2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZW1haWwuX19maWxlX18pCkBAIC02MzEsNyArNjYyLDcgQEAKICAgICAgICAgZXh0ID0gJy5weW8nIGlmIG9wdGxldmVsID09IDEgZWxzZSAnLnB5YycKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCBcCi0gICAgICAgICAgICAgICAgIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3Iiwgb3B0aW1pemU9b3B0bGV2ZWwpIGFzIHppcGZwOgorICAgICAgICAgICAgIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3Iiwgb3B0aW1pemU9b3B0bGV2ZWwpIGFzIHppcGZwOgogICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyKQogCiAgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKQEAgLTY1OSwxNCArNjkwLDM0IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbW9kMi50eHQnLCBuYW1lcykKIAogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQorICAgICAgICAgICAgcm10cmVlKFRFU1RGTjIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9weXRob25fZGlyZWN0b3J5X2ZpbHRlcmVkKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihURVNURk4yKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QxLnB5IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoInByaW50KDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MiAqIDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KFRFU1RGTjIsIGZpbHRlcmZ1bmM9bGFtYmRhIGZuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZm4uZW5kc3dpdGgoJ21vZDIucHknKSkKKworICAgICAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWRJbignbW9kMS5weScsIG5hbWVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21vZDIucHknLCBuYW1lcykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcm10cmVlKFRFU1RGTjIpCiAKICAgICBkZWYgdGVzdF93cml0ZV9ub25fcHlmaWxlKHNlbGYpOgogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgogICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoJ21vc3QgZGVmaW5pdGVseSBub3QgYSBweXRob24gZmlsZScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlcHksIFRFU1RGTikKLSAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfcHlmaWxlX2JhZF9zeW50YXgoc2VsZik6CiAgICAgICAgIG9zLm1rZGlyKFRFU1RGTjIpCkBAIC02ODksNyArNzQwLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtb2QxLnB5bycsIG5hbWVzKQogCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCisgICAgICAgICAgICBybXRyZWUoVEVTVEZOMikKIAogCiBjbGFzcyBFeHRyYWN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNzEyLDEwICs3NjMsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4od3JpdHRlbmZpbGUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRhdGEuZW5jb2RlKCksIGYucmVhZCgpKQogCi0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHdyaXR0ZW5maWxlKQorICAgICAgICAgICAgICAgIHVubGluayh3cml0dGVuZmlsZSkKIAogICAgICAgICAjIHJlbW92ZSB0aGUgdGVzdCBmaWxlIHN1YmRpcmVjdG9yaWVzCi0gICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnemlwdGVzdDJkaXInKSkKKyAgICAgICAgcm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCiAKICAgICBkZWYgdGVzdF9leHRyYWN0X2FsbChzZWxmKToKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgpAQCAtNzMwLDEwICs3ODEsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3V0ZmlsZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZGF0YS5lbmNvZGUoKSwgZi5yZWFkKCkpCiAKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3V0ZmlsZSkKKyAgICAgICAgICAgICAgICB1bmxpbmsob3V0ZmlsZSkKIAogICAgICAgICAjIHJlbW92ZSB0aGUgdGVzdCBmaWxlIHN1YmRpcmVjdG9yaWVzCi0gICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnemlwdGVzdDJkaXInKSkKKyAgICAgICAgcm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCiAKICAgICBkZWYgY2hlY2tfZmlsZShzZWxmLCBmaWxlbmFtZSwgY29udGVudCk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSkpCkBAIC03NjQsMjUgKzgxNSwyNSBAQAogICAgIGRlZiB0ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lc193aW5kb3dzX29ubHkoc2VsZik6CiAgICAgICAgICIiIlRlc3QgY29tYmluYXRpb24gb2YgcGF0aCBmaXhpbmcgYW5kIHdpbmRvd3MgbmFtZSBzYW5pdGl6YXRpb24uIiIiCiAgICAgICAgIHdpbmRvd3NfaGFja25hbWVzID0gWwotICAgICAgICAgICAgICAgIChyJy4uXGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy4uXC9mb29cL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInZm9vL1wuLlwvYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidmb29cLy4uL1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6Zm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovL2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6XGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFxjb25reVxcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vPy9DOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXD9cQzpcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovLi4vQzovZm9vL2JhcicsICdDXy9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInYTpiXGM8ZD5lfGYiZz9oKmknLCAnYi9jX2RfZV9mX2dfaF9pJyksCi0gICAgICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKKyAgICAgICAgICAgIChyJy4uXGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLi5cL2Zvb1wvYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2Zvby9cLi5cL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidmb29cLy4uL1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzpmb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzovL2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicvL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicvLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocidcXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocidcXGNvbmt5XFxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocicvLz8vQzovZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidcXD9cQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOi8uLi9DOi9mb28vYmFyJywgJ0NfL2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2E6YlxjPGQ+ZXxmImc/aCppJywgJ2IvY19kX2VfZl9nX2hfaScpLAorICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKICAgICAgICAgXQogICAgICAgICBzZWxmLl90ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lcyh3aW5kb3dzX2hhY2tuYW1lcykKIApAQCAtODE1LDEyICs4NjYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nZXh0cmFjdCAlcjogJXIgIT0gJXInICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNuYW1lLCB3cml0dGVuZmlsZSwgY29ycmVjdGZpbGUpKQogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgndGFyZ2V0JykKKyAgICAgICAgICAgIHJtdHJlZSgndGFyZ2V0JykKIAogICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmcDoKICAgICAgICAgICAgICAgICB6aXBmcC5leHRyYWN0YWxsKHRhcmdldHBhdGgpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoY29ycmVjdGZpbGUsIGNvbnRlbnQpCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKCd0YXJnZXQnKQorICAgICAgICAgICAgcm10cmVlKCd0YXJnZXQnKQogCiAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgKmZpeGVkbmFtZS5zcGxpdCgnLycpKQogCkBAIC04MjksMTQgKzg4MCwxNCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdHRlbmZpbGUsIGNvcnJlY3RmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHRyYWN0ICVyIiAlIGFyY25hbWUpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoY29ycmVjdGZpbGUsIGNvbnRlbnQpCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKGZpeGVkbmFtZS5zcGxpdCgnLycpWzBdKQorICAgICAgICAgICAgcm10cmVlKGZpeGVkbmFtZS5zcGxpdCgnLycpWzBdKQogCiAgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAncicpIGFzIHppcGZwOgogICAgICAgICAgICAgICAgIHppcGZwLmV4dHJhY3RhbGwoKQogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmaXhlZG5hbWUuc3BsaXQoJy8nKVswXSkKKyAgICAgICAgICAgIHJtdHJlZShmaXhlZG5hbWUuc3BsaXQoJy8nKVswXSkKIAotICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTjIpCisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOMikKIAogCiBjbGFzcyBPdGhlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg2MCw2ICs5MTEsMTcgQEAKICAgICAgICAgICAgICAgICBkYXRhICs9IHppcGZwLnJlYWQoaW5mbykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGF0YSwge2IiZm9vYmFyIiwgYiJiYXJmb28ifSkKIAorICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ3NwYW0udHh0JywgYidhYmFiYWdhbGFtYWdhJykKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIG1vZGUgaW4gJ1UnLCAnclUnOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgICAgICB6aXBvcGVuID0gemlwZnAub3Blbignc3BhbS50eHQnLCBtb2RlKQorICAgICAgICAgICAgICAgIHppcG9wZW4uY2xvc2UoKQorCiAgICAgZGVmIHRlc3RfdW5pdmVyc2FsX3JlYWRhaGVhZHMoc2VsZik6CiAgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKIApAQCAtODY5LDcgKzkzMSw3IEBACiAKICAgICAgICAgZGF0YTIgPSBiJycKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgJ3InKSBhcyB6aXBmcCwgXAotICAgICAgICAgICAgIHppcGZwLm9wZW4oVEVTVEZOLCAnclUnKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgIG9wZW5VKHppcGZwLCBURVNURk4pIGFzIHppcG9wZW46CiAgICAgICAgICAgICBmb3IgbGluZSBpbiB6aXBvcGVuOgogICAgICAgICAgICAgICAgIGRhdGEyICs9IGxpbmUKIApAQCAtOTEwLDEwICs5NzIsMTAgQEAKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF92ZXJzaW9uKHNlbGYpOgogICAgICAgICAjIEZpbGUgaGFzIGFuIGV4dHJhY3RfdmVyc2lvbiBvZiAxMjAKICAgICAgICAgZGF0YSA9IChiJ1BLXHgwM1x4MDR4XHgwMFx4MDBceDAwXHgwMFx4MDAhcFx4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4UEtceDAxXHgwMnhceDAzeFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMCFwXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDYnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAvXHgwMFx4MDBceDAwXHgxZlx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4UEtceDAxXHgwMnhceDAzeFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDAwIXBceGExQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2JworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAvXHgwMFx4MDBceDAwXHgxZlx4MDBceDAwXHgwMFx4MDBceDAwJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB6aXBmaWxlLlppcEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvLkJ5dGVzSU8oZGF0YSksICdyJykKQEAgLTk0Niw3ICsxMDA4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAnYScpIGFzIHpmOgogICAgICAgICAgICAgICAgIHpmLndyaXRlc3RyKGZpbGVuYW1lLCBjb250ZW50KQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmZhaWwoJ0NvdWxkIG5vdCBhcHBlbmQgZGF0YSB0byBhIG5vbi1leGlzdGVudCB6aXAgZmlsZS4nKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQpAQCAtMTAxOCw3ICsxMDgwLDcgQEAKICAgICAgICAgZnAuc2VlaygwLCAwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZmlsZS5pc196aXBmaWxlKGZwKSkKIAotICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19JT0Vycm9yKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19PU0Vycm9yKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkCiAgICAgICAgICMgWmlwRmlsZSBpbnN0YW5jZSBpcyBmaW5hbGl6ZWQ7IHRoaXMgdGVzdHMgZm9yIHJlZ3Jlc3Npb24gb24gU0YgdHJhY2tlcgogICAgICAgICAjIGJ1ZyAjNDAzODcxLgpAQCAtMTAzMCw3ICsxMDkyLDcgQEAKICAgICAgICAgIyBpdCBpcyBpZ25vcmVkLCBidXQgdGhlIHVzZXIgc2hvdWxkIGJlIHN1ZmZpY2llbnRseSBhbm5veWVkIGJ5CiAgICAgICAgICMgdGhlIG1lc3NhZ2Ugb24gdGhlIG91dHB1dCB0aGF0IHJlZ3Jlc3Npb24gd2lsbCBiZSBub3RpY2VkCiAgICAgICAgICMgcXVpY2tseS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZV9yYWlzZXNfQmFkWmlwRmlsZShzZWxmKToKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCkBAIC0xMDk5LDExICsxMTYxLDExIEBACiAgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfY29tcHJlc3Npb24oc2VsZik6CiAgICAgICAgICMgZGF0YSBpcyBkZWNsYXJlZCBhcyBzaHJ1bmssIGJ1dCBhY3R1YWxseSBkZWZsYXRlZAogICAgICAgICBkYXRhID0gKGInUEtceDAzXHgwNC5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhceDAzXHgwMFBLXHgwMScKLSAgICAgICAgYidceDAyLlx4MDMuXHgwMFx4MDBceDAwXHgwMVx4MDBceGU0Q1x4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwJwotICAgICAgICBiJy9ceDAwXHgwMFx4MDAhXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICAgICAgICAgIGInXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhceDAzXHgwMFBLXHgwMScKKyAgICAgICAgICAgICAgICBiJ1x4MDIuXHgwMy5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwJworICAgICAgICAgICAgICAgIGInL1x4MDBceDAwXHgwMCFceDAwXHgwMFx4MDBceDAwXHgwMCcpCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oZGF0YSksICdyJykgYXMgemlwZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHppcGYub3BlbiwgJ3gnKQogCkBAIC0xMjE4LDcgKzEyODAsNyBAQAogICAgIGRlZiB0ZXN0X29wZW5fZW1wdHlfZmlsZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNzEwNzAzOiBDaGVjayB0aGF0IG9wZW5pbmcgYSBmaWxlIHdpdGggbGVzcyB0aGFuIDIyIGJ5dGVzCiAgICAgICAgICMgcmFpc2VzIGEgQmFkWmlwRmlsZSBleGNlcHRpb24gKHJhdGhlciB0aGFuIHRoZSBwcmV2aW91c2x5IHVuaGVscGZ1bAotICAgICAgICAjIElPRXJyb3IpCisgICAgICAgICMgT1NFcnJvcikKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcEZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOLCAncicpCkBAIC0xMjI3LDYgKzEyODksMjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZmlsZS5aaXBJbmZvLCAnc2V2ZW50aWVzJywgKDE5NzksIDEsIDEsIDAsIDAsIDApKQogCisgICAgZGVmIHRlc3RfemlwZmlsZV93aXRoX3Nob3J0X2V4dHJhX2ZpZWxkKHNlbGYpOgorICAgICAgICAiIiJJZiBhbiBleHRyYSBmaWVsZCBpbiB0aGUgaGVhZGVyIGlzIGxlc3MgdGhhbiA0IGJ5dGVzLCBza2lwIGl0LiIiIgorICAgICAgICB6aXBkYXRhID0gKAorICAgICAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAwXHgwMFx4MDBceDAwXHg5M1x4OWJceGFkQFx4OGJceDllJworICAgICAgICAgICAgYidceGQ5XHhkM1x4MDFceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwM1x4MDBceDAzXHgwMGFiJworICAgICAgICAgICAgYidjXHgwMFx4MDBceDAwQVBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAwXHg5M1x4OWJceGFkQFx4OGJceDllXHhkOVx4ZDNceDAxXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwJworICAgICAgICAgICAgYidceDAwXHgwM1x4MDBceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhhNFx4ODFceDAwJworICAgICAgICAgICAgYidceDAwXHgwMFx4MDBhYmNceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwXHgwMCVceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKHppcGRhdGEpLCAncicpIGFzIHppcGY6CisgICAgICAgICAgICAjIHRlc3R6aXAgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgY29ycnVwdCBmaWxlLCBvciBOb25lCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh6aXBmLnRlc3R6aXAoKSkKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdW5saW5rKFRFU1RGTikKICAgICAgICAgdW5saW5rKFRFU1RGTjIpCkBAIC0xMjY2LDU3ICsxMzQzLDU3IEBACiBjbGFzcyBTdG9yZWRCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9TVE9SRUQKICAgICB6aXBfd2l0aF9iYWRfY3JjID0gKAotICAgICAgICAgICAgYidQS1wwMDNcMDA0XDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OnInCi0gICAgICAgICAgICBiJ1wyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDAwMGFmJwotICAgICAgICAgICAgYidpbGVoZWxsbyxBd29ybGRQJwotICAgICAgICAgICAgYidLXDAwMVwwMDJcMDI0XDAwM1wwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzonCi0gICAgICAgICAgICBiJ3JcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwXDAnCi0gICAgICAgICAgICBiJ1wwXDBcMFwwXDBcMFwwXDIwMFwwMDFcMFwwXDBcMDAwYWZpJwotICAgICAgICAgICAgYidsZVBLXDAwNVwwMDZcMFwwXDBcMFwwMDFcMFwwMDFcMDAwM1wwMDAnCi0gICAgICAgICAgICBiJ1wwXDAvXDBcMFwwXDBcMCcpCisgICAgICAgIGInUEtcMDAzXDAwNFwwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzpyJworICAgICAgICBiJ1wyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDAwMGFmJworICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCisgICAgICAgIGInS1wwMDFcMDAyXDAyNFwwMDNcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6JworICAgICAgICBiJ3JcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwXDAnCisgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCisgICAgICAgIGInbGVQS1wwMDVcMDA2XDBcMFwwXDBcMDAxXDBcMDAxXDAwMDNcMDAwJworICAgICAgICBiJ1wwXDAvXDBcMFwwXDBcMCcpCiAKIEByZXF1aXJlc196bGliCiBjbGFzcyBEZWZsYXRlQmFkQ3JjVGVzdHMoQWJzdHJhY3RCYWRDcmNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfREVGTEFURUQKICAgICB6aXBfd2l0aF9iYWRfY3JjID0gKAotICAgICAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbn1ceDBjPUZBJwotICAgICAgICAgICAgYidLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJwotICAgICAgICAgICAgYidpbGVceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4YzlceGEwJwotICAgICAgICAgICAgYic9XHgxM1x4MDBQS1x4MDFceDAyXHgxNFx4MDNceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBuJwotICAgICAgICAgICAgYid9XHgwYz1GQUtFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1JwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgYidceDAwYWZpbGVQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwJwotICAgICAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCisgICAgICAgIGInS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKKyAgICAgICAgYidpbGVceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4YzlceGEwJworICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCisgICAgICAgIGInfVx4MGM9RkFLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNScKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCisgICAgICAgIGInXHgwMVx4MDAzXHgwMFx4MDBceDAwM1x4MDBceDAwXHgwMFx4MDBceDAwJykKIAogQHJlcXVpcmVzX2J6MgogY2xhc3MgQnppcDJCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9CWklQMgogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFOFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZUJaaDkxQVkmU1lceGQ0XHhhOFx4Y2EnCi0gICAgICAgICAgICBiJ1x4N2ZceDAwXHgwMFx4MGZceDExXHg4MEBceDAwXHgwNkRceDkwXHg4MCBceDAwIFx4YTUnCi0gICAgICAgICAgICBiJ1BceGQ5IVx4MDNceDAzXHgxM1x4MTNceDEzXHg4OVx4YTlceGE5XHhjMnU1Olx4OWYnCi0gICAgICAgICAgICBiJ1x4OGJceGI5Ilx4OWMoSGpUZT9ceDgwUEtceDAxXHgwMlx4MTQnCi0gICAgICAgICAgICBiJ1x4MDNceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkFLRTgnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWxlUEsnCi0gICAgICAgICAgICBiJ1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDBceDAwW1x4MDAnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkEnCisgICAgICAgIGInS0U4XHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKKyAgICAgICAgYidpbGVCWmg5MUFZJlNZXHhkNFx4YThceGNhJworICAgICAgICBiJ1x4N2ZceDAwXHgwMFx4MGZceDExXHg4MEBceDAwXHgwNkRceDkwXHg4MCBceDAwIFx4YTUnCisgICAgICAgIGInUFx4ZDkhXHgwM1x4MDNceDEzXHgxM1x4MTNceDg5XHhhOVx4YTlceGMydTU6XHg5ZicKKyAgICAgICAgYidceDhiXHhiOSJceDljKEhqVGU/XHg4MFBLXHgwMVx4MDJceDE0JworICAgICAgICBiJ1x4MDNceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkFLRTgnCisgICAgICAgIGInXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsZVBLJworICAgICAgICBiJ1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDBceDAwW1x4MDAnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCcpCiAKIEByZXF1aXJlc19sem1hCiBjbGFzcyBMem1hQmFkQ3JjVGVzdHMoQWJzdHJhY3RCYWRDcmNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfTFpNQQogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwZVx4MDBudVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZVx0XHgwNFx4MDVceDAwXVx4MDBceDAwXHgwMFx4MDRceDAwNFx4MTlJJwotICAgICAgICAgICAgYidceGVlXHg4ZFx4ZTlceDE3XHg4OTozYFx0cSEuOFx4MDBQSycKLSAgICAgICAgICAgIGInXHgwMVx4MDJceDE0XHgwM1x4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbCcKLSAgICAgICAgICAgIGInZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMD5ceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZVx0XHgwNFx4MDVceDAwXVx4MDBceDAwXHgwMFx4MDRceDAwNFx4MTlJJworICAgICAgICBiJ1x4ZWVceDhkXHhlOVx4MTdceDg5OjNgXHRxIS44XHgwMFBLJworICAgICAgICBiJ1x4MDFceDAyXHgxNFx4MDNceDE0XHgwM1x4MDBceDAwXHgwZVx4MDBudVx4MGM9RkEnCisgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsJworICAgICAgICBiJ2VQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDAnCisgICAgICAgIGInXHgwMD5ceDAwXHgwMFx4MDBceDAwXHgwMCcpCiAKIAogY2xhc3MgRGVjcnlwdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEzMjUsMjIgKzE0MDIsMjIgQEAKICAgICBaSVAgZmlsZS4iIiIKIAogICAgIGRhdGEgPSAoCi0gICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwXHgxYVx4MDAnCi0gICAgYidceDAwXHgwMFx4MDhceDAwXHgwMFx4MDB0ZXN0LnR4dFx4ZmFceDEwXHhhMGdseXxceGZhLVx4YzVceGMwPVx4Zjl5JwotICAgIGInXHgxOFx4ZTBceGE4clx4YjNafUxnXHhiY1x4YWVceGY5fFx4OWJceDE5XHhlNFx4OGJceGJhXHhiYilceDhjXHhiMFx4ZGJsJwotICAgIGInUEtceDAxXHgwMlx4MTRceDAwXHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwJwotICAgIGInXHgxYVx4MDBceDAwXHgwMFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAgXHgwMFx4YjZceDgxJwotICAgIGInXHgwMFx4MDBceDAwXHgwMHRlc3QudHh0UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwNlx4MDAnCi0gICAgYidceDAwXHgwMExceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDBceDFhXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDhceDAwXHgwMFx4MDB0ZXN0LnR4dFx4ZmFceDEwXHhhMGdseXxceGZhLVx4YzVceGMwPVx4Zjl5JworICAgICAgICBiJ1x4MThceGUwXHhhOHJceGIzWn1MZ1x4YmNceGFlXHhmOXxceDliXHgxOVx4ZTRceDhiXHhiYVx4YmIpXHg4Y1x4YjBceGRibCcKKyAgICAgICAgYidQS1x4MDFceDAyXHgxNFx4MDBceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgxYVx4MDBceDAwXHgwMFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAgXHgwMFx4YjZceDgxJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDB0ZXN0LnR4dFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDZceDAwJworICAgICAgICBiJ1x4MDBceDAwTFx4MDBceDAwXHgwMFx4MDBceDAwJyApCiAgICAgZGF0YTIgPSAoCi0gICAgYidQS1x4MDNceDA0XHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyJwotICAgIGInXHgwMFx4MDBceDA0XHgwMFx4MTVceDAwemVyb1VUXHRceDAwXHgwM1x4ZDZceDhiXHg5MkdceGRhXHg4Ylx4OTJHVXhceDA0JwotICAgIGInXHgwMFx4ZThceDAzXHhlOFx4MDNceGM3PE1ceGI1YVx4Y2VYXHhhM1kmXHg4YntvRVx4ZDdceDlkXHg4Y1x4OThceDAyXHhjMCcKLSAgICBiJ1BLXHgwN1x4MDh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBQS1x4MDFceDAyXHgxN1x4MDMnCi0gICAgYidceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKLSAgICBiJ1x4MDRceDAwXHJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceGE0XHg4MVx4MDBceDAwXHgwMFx4MDB6ZScKLSAgICBiJ3JvVVRceDA1XHgwMFx4MDNceGQ2XHg4Ylx4OTJHVXhceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMScKLSAgICBiJ1x4MDBceDAxXHgwMD9ceDAwXHgwMFx4MDBbXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyJworICAgICAgICBiJ1x4MDBceDAwXHgwNFx4MDBceDE1XHgwMHplcm9VVFx0XHgwMFx4MDNceGQ2XHg4Ylx4OTJHXHhkYVx4OGJceDkyR1V4XHgwNCcKKyAgICAgICAgYidceDAwXHhlOFx4MDNceGU4XHgwM1x4Yzc8TVx4YjVhXHhjZVhceGEzWSZceDhie29FXHhkN1x4OWRceDhjXHg5OFx4MDJceGMwJworICAgICAgICBiJ1BLXHgwN1x4MDh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBQS1x4MDFceDAyXHgxN1x4MDMnCisgICAgICAgIGInXHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgICAgIGInXHgwNFx4MDBcclx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4YTRceDgxXHgwMFx4MDBceDAwXHgwMHplJworICAgICAgICBiJ3JvVVRceDA1XHgwMFx4MDNceGQ2XHg4Ylx4OTJHVXhceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMScKKyAgICAgICAgYidceDAwXHgwMVx4MDA/XHgwMFx4MDBceDAwW1x4MDBceDAwXHgwMFx4MDBceDAwJyApCiAKICAgICBwbGFpbiA9IGInemlwZmlsZS5weSBlbmNyeXB0aW9uIHRlc3QnCiAgICAgcGxhaW4yID0gYidceDAwJyo1MTIKQEAgLTE1NjUsNyArMTY0Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmLmZpbGVsaXN0WzBdLmZpbGVuYW1lLmVuZHN3aXRoKCJ4LyIpKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCisgICAgICAgIHJtdHJlZShURVNURk4yKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgogICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKIApAQCAtMTU5OSw3ICsxNjc2LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgZnA6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICB6aXBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyY2RhdGFbc2VwXSwgemlwZGF0YSkKIApAQCAtMTYxMyw3ICsxNjkwLDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgemlwb3BlbjoKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGInJwogICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZGxpbmUoKQpAQCAtMTYzOCw3ICsxNzE1LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgemlwb3BlbjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lX2dlbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVkYXRhLCBsaW5lICsgYidcbicpCkBAIC0xNjUzLDcgKzE3MzAsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHppcGxpbmVzID0gZnAucmVhZGxpbmVzKCkKICAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyBiJ1xuJykKQEAgLTE2NjgsNyArMTc0NSw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIGZwKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArIGInXG4nKQogCkBAIC0xNjc4LDcgKzE3NTUsNyBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICB1bmxpbmsoZm4pCiAgICAgICAgIHVubGluayhURVNURk4pCiAgICAgICAgIHVubGluayhURVNURk4yKQogCkBAIC0xNzAyLDYgKzE3NzksNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKaW5kZXggYThmYjdhYi4uNDk4ZDQ2NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIGRlZiB6aXBUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlLgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PVRydWUpCisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBJdCB3aWxsIGNvbnRhaW4gZW5vdWdoIGNvcGllcyBvZiBzZWxmLmRhdGEgdG8gcmVhY2ggYWJvdXQgNkdCIG9mCiAgICAgICAgICMgcmF3IGRhdGEgdG8gc3RvcmUuCkBAIC05Miw3ICs5Miw3IEBACiAgICAgZGVmIHRlc3RNb3JlVGhhbjY0a0ZpbGVzKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBtb3JlIHRoYW4gNjRrIGZpbGVzIGNhbiBiZSBhZGRlZCB0byBhbiBhcmNoaXZlLAogICAgICAgICAjIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgYXJjaGl2ZSBjYW4gYmUgcmVhZCBwcm9wZXJseSBieSBaaXBGaWxlCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciLCBhbGxvd1ppcDY0PUZhbHNlKQogICAgICAgICB6aXBmLmRlYnVnID0gMTAwCiAgICAgICAgIG51bWZpbGVzID0gKDEgPDwgMTYpICogMy8vMgogICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlcyk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CmluZGV4IDM3NjAzYjkuLjFlMzUxYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CkBAIC0xLDEzICsxLDEyIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBtYXJzaGFsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9pbXBvcnRob29rcyBpbXBvcnQgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UsIHRlc3Rfc3JjLCB0ZXN0X2NvCiAKIGZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZSwgWmlwSW5mbywgWklQX1NUT1JFRCwgWklQX0RFRkxBVEVECiAKQEAgLTE3LDYgKzE2LDE0IEBACiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IGlvCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZXh0cmFjdF90YiwgZXh0cmFjdF9zdGFjaywgcHJpbnRfdGIKKwordGVzdF9zcmMgPSAiIiJcCitkZWYgZ2V0X25hbWUoKToKKyAgICByZXR1cm4gX19uYW1lX18KK2RlZiBnZXRfZmlsZSgpOgorICAgIHJldHVybiBfX2ZpbGVfXworIiIiCit0ZXN0X2NvID0gY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQogcmFpc2Vfc3JjID0gJ2RlZiBkb19yYWlzZSgpOiByYWlzZSBUeXBlRXJyb3JcbicKIAogZGVmIG1ha2VfcHljKGNvLCBtdGltZSwgc2l6ZSk6CkBAIC0yNyw3ICszNCw4IEBACiAgICAgICAgICAgICBtdGltZSA9IGludChtdGltZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG10aW1lID0gaW50KC0weDEwMDAwMDAwMCArIGludChtdGltZSkpCi0gICAgcHljID0gaW1wLmdldF9tYWdpYygpICsgc3RydWN0LnBhY2soIjxpaSIsIGludChtdGltZSksIHNpemUgJiAweEZGRkZGRkZGKSArIGRhdGEKKyAgICBweWMgPSAoaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSICsKKyAgICAgICAgc3RydWN0LnBhY2soIjxpaSIsIGludChtdGltZSksIHNpemUgJiAweEZGRkZGRkZGKSArIGRhdGEpCiAgICAgcmV0dXJuIHB5YwogCiBkZWYgbW9kdWxlX3BhdGhfdG9fZG90dGVkX25hbWUocGF0aCk6CkBAIC00MiwxMCArNTAsMjcgQEAKIFRFU1RQQUNLMiA9ICJ6aXB0ZXN0cGFja2FnZTIiCiBURU1QX1pJUCA9IG9zLnBhdGguYWJzcGF0aCgianVuazk1MTQyLnppcCIpCiAKLXB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKFRFU1RNT0QgKyAnLnB5JykKK3B5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVE1PRCArICcucHknKQogcHljX2V4dCA9ICgnLnB5YycgaWYgX19kZWJ1Z19fIGVsc2UgJy5weW8nKQogCiAKK2NsYXNzIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tZXRhX3BhdGggPSBzeXMubWV0YV9wYXRoWzpdCisgICAgICAgIHNlbGYucGF0aF9ob29rcyA9IHN5cy5wYXRoX2hvb2tzWzpdCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgc2VsZi5tb2R1bGVzX2JlZm9yZSA9IHN1cHBvcnQubW9kdWxlc19zZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5wYXRoCisgICAgICAgIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLm1ldGFfcGF0aAorICAgICAgICBzeXMucGF0aF9ob29rc1s6XSA9IHNlbGYucGF0aF9ob29rcworICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCisgICAgICAgIHN1cHBvcnQubW9kdWxlc19jbGVhbnVwKCpzZWxmLm1vZHVsZXNfYmVmb3JlKQorCisKIGNsYXNzIFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKIAogICAgIGNvbXByZXNzaW9uID0gWklQX1NUT1JFRApAQCAtMTk2LDYgKzIyMSw3IEBACiAgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCiAgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6aW5mby5jb21tZW50ID0gYiJzcGFtIgogICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKIApAQCAtMjQ1LDYgKzI3MSw3IEBACiAgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCiAgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6aW5mby5jb21tZW50ID0gYiJlZ2dzIgogICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKIApAQCAtNDU5LDcgKzQ4Niw3IEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmxvYWRfbW9kdWxlLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmdldF9jb2RlLCAnYWJjJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHouZ2V0X2RhdGEsICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgei5nZXRfZGF0YSwgJ2FiYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5nZXRfc291cmNlLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmlzX3BhY2thZ2UsICdhYmMnKQogICAgICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKaW5kZXggZjdmMzM5OC4uODRiYTVlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CkBAIC0yMjcsMTMgKzIyNywxNSBAQAogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbihzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgInRlc3RfemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAnX19tYWluX18ucHknKQogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbih6aXBfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weSBiL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKaW5kZXggOTJlYmQ5NS4uYWZlNTBkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQorKysgYi9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIG9zLndyaXRlKGZkLCBiImJsYXQiKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBTdWNjZXNzIC0tIGNvdWxkIG5vdCB3cml0ZSB0byBmZC4KICAgICAgICAgc3lzLmV4aXQoMCkKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3RleHR3cmFwLnB5IGIvTGliL3RleHR3cmFwLnB5CmluZGV4IDcwMjRkNGQuLjI0ODkxODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXh0d3JhcC5weQorKysgYi9MaWIvdGV4dHdyYXAucHkKQEAgLTcsNyArNyw3IEBACiAKIGltcG9ydCByZQogCi1fX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCddCitfX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCcsICdzaG9ydGVuJ10KIAogIyBIYXJkY29kZSB0aGUgcmVjb2duaXplZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gdGhlIFVTLUFTQ0lJCiAjIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIFRoZSBtYWluIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBpcyB0aGF0IGluCkBAIC02Miw2ICs2MiwxMCBAQAogICAgICAgICBjb21wb3VuZCB3b3Jkcy4KICAgICAgIGRyb3Bfd2hpdGVzcGFjZSAoZGVmYXVsdDogdHJ1ZSkKICAgICAgICAgRHJvcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gbGluZXMuCisgICAgICBtYXhfbGluZXMgKGRlZmF1bHQ6IE5vbmUpCisgICAgICAgIFRydW5jYXRlIHdyYXBwZWQgbGluZXMuCisgICAgICBwbGFjZWhvbGRlciAoZGVmYXVsdDogJyBbLi4uXScpCisgICAgICAgIEFwcGVuZCB0byB0aGUgbGFzdCBsaW5lIG9mIHRydW5jYXRlZCB0ZXh0LgogICAgICIiIgogCiAgICAgdW5pY29kZV93aGl0ZXNwYWNlX3RyYW5zID0ge30KQEAgLTEwNCw3ICsxMDgsMTAgQEAKICAgICAgICAgICAgICAgICAgYnJlYWtfbG9uZ193b3Jkcz1UcnVlLAogICAgICAgICAgICAgICAgICBkcm9wX3doaXRlc3BhY2U9VHJ1ZSwKICAgICAgICAgICAgICAgICAgYnJlYWtfb25faHlwaGVucz1UcnVlLAotICAgICAgICAgICAgICAgICB0YWJzaXplPTgpOgorICAgICAgICAgICAgICAgICB0YWJzaXplPTgsCisgICAgICAgICAgICAgICAgICosCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz1Ob25lLAorICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFsuLi5dJyk6CiAgICAgICAgIHNlbGYud2lkdGggPSB3aWR0aAogICAgICAgICBzZWxmLmluaXRpYWxfaW5kZW50ID0gaW5pdGlhbF9pbmRlbnQKICAgICAgICAgc2VsZi5zdWJzZXF1ZW50X2luZGVudCA9IHN1YnNlcXVlbnRfaW5kZW50CkBAIC0xMTUsNiArMTIyLDggQEAKICAgICAgICAgc2VsZi5kcm9wX3doaXRlc3BhY2UgPSBkcm9wX3doaXRlc3BhY2UKICAgICAgICAgc2VsZi5icmVha19vbl9oeXBoZW5zID0gYnJlYWtfb25faHlwaGVucwogICAgICAgICBzZWxmLnRhYnNpemUgPSB0YWJzaXplCisgICAgICAgIHNlbGYubWF4X2xpbmVzID0gbWF4X2xpbmVzCisgICAgICAgIHNlbGYucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcgogCiAKICAgICAjIC0tIFByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjIzLDYgKzIzMiwxMyBAQAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGlmIHNlbGYud2lkdGggPD0gMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2lkdGggJXIgKG11c3QgYmUgPiAwKSIgJSBzZWxmLndpZHRoKQorICAgICAgICBpZiBzZWxmLm1heF9saW5lcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYubWF4X2xpbmVzID4gMToKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSBzZWxmLnN1YnNlcXVlbnRfaW5kZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZGVudCA9IHNlbGYuaW5pdGlhbF9pbmRlbnQKKyAgICAgICAgICAgIGlmIGxlbihpbmRlbnQpICsgbGVuKHNlbGYucGxhY2Vob2xkZXIubHN0cmlwKCkpID4gc2VsZi53aWR0aDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwbGFjZWhvbGRlciB0b28gbGFyZ2UgZm9yIG1heCB3aWR0aCIpCiAKICAgICAgICAgIyBBcnJhbmdlIGluIHJldmVyc2Ugb3JkZXIgc28gaXRlbXMgY2FuIGJlIGVmZmljaWVudGx5IHBvcHBlZAogICAgICAgICAjIGZyb20gYSBzdGFjayBvZiBjaHVja3MuCkBAIC0yNjUsMTggKzI4MSw0NyBAQAogICAgICAgICAgICAgIyBmaXQgb24gKmFueSogbGluZSAobm90IGp1c3QgdGhpcyBvbmUpLgogICAgICAgICAgICAgaWYgY2h1bmtzIGFuZCBsZW4oY2h1bmtzWy0xXSkgPiB3aWR0aDoKICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfbG9uZ193b3JkKGNodW5rcywgY3VyX2xpbmUsIGN1cl9sZW4sIHdpZHRoKQorICAgICAgICAgICAgICAgIGN1cl9sZW4gPSBzdW0obWFwKGxlbiwgY3VyX2xpbmUpKQogCiAgICAgICAgICAgICAjIElmIHRoZSBsYXN0IGNodW5rIG9uIHRoaXMgbGluZSBpcyBhbGwgd2hpdGVzcGFjZSwgZHJvcCBpdC4KICAgICAgICAgICAgIGlmIHNlbGYuZHJvcF93aGl0ZXNwYWNlIGFuZCBjdXJfbGluZSBhbmQgY3VyX2xpbmVbLTFdLnN0cmlwKCkgPT0gJyc6CisgICAgICAgICAgICAgICAgY3VyX2xlbiAtPSBsZW4oY3VyX2xpbmVbLTFdKQogICAgICAgICAgICAgICAgIGRlbCBjdXJfbGluZVstMV0KIAotICAgICAgICAgICAgIyBDb252ZXJ0IGN1cnJlbnQgbGluZSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbiBsaXN0Ci0gICAgICAgICAgICAjIG9mIGFsbCBsaW5lcyAocmV0dXJuIHZhbHVlKS4KICAgICAgICAgICAgIGlmIGN1cl9saW5lOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnJy5qb2luKGN1cl9saW5lKSkKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5tYXhfbGluZXMgaXMgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICBsZW4obGluZXMpICsgMSA8IHNlbGYubWF4X2xpbmVzIG9yCisgICAgICAgICAgICAgICAgICAgIChub3QgY2h1bmtzIG9yCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmRyb3Bfd2hpdGVzcGFjZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGxlbihjaHVua3MpID09IDEgYW5kCisgICAgICAgICAgICAgICAgICAgICBub3QgY2h1bmtzWzBdLnN0cmlwKCkpIGFuZCBjdXJfbGVuIDw9IHdpZHRoKToKKyAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IGN1cnJlbnQgbGluZSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbgorICAgICAgICAgICAgICAgICAgICAjIGxpc3Qgb2YgYWxsIGxpbmVzIChyZXR1cm4gdmFsdWUpLgorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgJycuam9pbihjdXJfbGluZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgY3VyX2xpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyX2xpbmVbLTFdLnN0cmlwKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xlbiArIGxlbihzZWxmLnBsYWNlaG9sZGVyKSA8PSB3aWR0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xpbmUuYXBwZW5kKHNlbGYucGxhY2Vob2xkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcnLmpvaW4oY3VyX2xpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGVuIC09IGxlbihjdXJfbGluZVstMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY3VyX2xpbmVbLTFdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2xpbmUgPSBsaW5lc1stMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKHByZXZfbGluZSkgKyBsZW4oc2VsZi5wbGFjZWhvbGRlcikgPD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1stMV0gPSBwcmV2X2xpbmUgKyBzZWxmLnBsYWNlaG9sZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgc2VsZi5wbGFjZWhvbGRlci5sc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICByZXR1cm4gbGluZXMKIAorICAgIGRlZiBfc3BsaXRfY2h1bmtzKHNlbGYsIHRleHQpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0KQorICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXQodGV4dCkKIAogICAgICMgLS0gUHVibGljIGludGVyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI4OSw4ICszMzQsNyBAQAogICAgICAgICBhbmQgYWxsIG90aGVyIHdoaXRlc3BhY2UgY2hhcmFjdGVycyAoaW5jbHVkaW5nIG5ld2xpbmUpIGFyZQogICAgICAgICBjb252ZXJ0ZWQgdG8gc3BhY2UuCiAgICAgICAgICIiIgotICAgICAgICB0ZXh0ID0gc2VsZi5fbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0KQotICAgICAgICBjaHVua3MgPSBzZWxmLl9zcGxpdCh0ZXh0KQorICAgICAgICBjaHVua3MgPSBzZWxmLl9zcGxpdF9jaHVua3ModGV4dCkKICAgICAgICAgaWYgc2VsZi5maXhfc2VudGVuY2VfZW5kaW5nczoKICAgICAgICAgICAgIHNlbGYuX2ZpeF9zZW50ZW5jZV9lbmRpbmdzKGNodW5rcykKICAgICAgICAgcmV0dXJuIHNlbGYuX3dyYXBfY2h1bmtzKGNodW5rcykKQEAgLTMzMiw2ICszNzYsMjEgQEAKICAgICB3ID0gVGV4dFdyYXBwZXIod2lkdGg9d2lkdGgsICoqa3dhcmdzKQogICAgIHJldHVybiB3LmZpbGwodGV4dCkKIAorZGVmIHNob3J0ZW4odGV4dCwgd2lkdGgsICoqa3dhcmdzKToKKyAgICAiIiJDb2xsYXBzZSBhbmQgdHJ1bmNhdGUgdGhlIGdpdmVuIHRleHQgdG8gZml0IGluIHRoZSBnaXZlbiB3aWR0aC4KKworICAgIFRoZSB0ZXh0IGZpcnN0IGhhcyBpdHMgd2hpdGVzcGFjZSBjb2xsYXBzZWQuICBJZiBpdCB0aGVuIGZpdHMgaW4KKyAgICB0aGUgKndpZHRoKiwgaXQgaXMgcmV0dXJuZWQgYXMgaXMuICBPdGhlcndpc2UsIGFzIG1hbnkgd29yZHMKKyAgICBhcyBwb3NzaWJsZSBhcmUgam9pbmVkIGFuZCB0aGVuIHRoZSBwbGFjZWhvbGRlciBpcyBhcHBlbmRlZDo6CisKKyAgICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMikKKyAgICAgICAgJ0hlbGxvIHdvcmxkIScKKyAgICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMSkKKyAgICAgICAgJ0hlbGxvIFsuLi5dJworICAgICIiIgorICAgIHcgPSBUZXh0V3JhcHBlcih3aWR0aD13aWR0aCwgbWF4X2xpbmVzPTEsICoqa3dhcmdzKQorICAgIHJldHVybiB3LmZpbGwoJyAnLmpvaW4odGV4dC5zdHJpcCgpLnNwbGl0KCkpKQorCiAKICMgLS0gTG9vc2VseSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9MaWIvdGhyZWFkaW5nLnB5IGIvTGliL3RocmVhZGluZy5weQppbmRleCA2MjVjOWI5Li5kZmU5ZDQxIDEwMDY0NAotLS0gYS9MaWIvdGhyZWFkaW5nLnB5CisrKyBiL0xpYi90aHJlYWRpbmcucHkKQEAgLTMsMTMgKzMsMTcgQEAKIGltcG9ydCBzeXMgYXMgX3N5cwogaW1wb3J0IF90aHJlYWQKIAotZnJvbSB0aW1lIGltcG9ydCBzbGVlcCBhcyBfc2xlZXAKIHRyeToKICAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyBfdGltZQogZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMgYXMgX2Zvcm1hdF9leGMKIGZyb20gX3dlYWtyZWZzZXQgaW1wb3J0IFdlYWtTZXQKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBpc2xpY2UgYXMgX2lzbGljZQordHJ5OgorICAgIGZyb20gX2NvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSBhcyBfZGVxdWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSBhcyBfZGVxdWUKIAogIyBOb3RlIHJlZ2FyZGluZyBQRVAgOCBjb21wbGlhbnQgbmFtZXMKICMgIFRoaXMgdGhyZWFkaW5nIG1vZGVsIHdhcyBvcmlnaW5hbGx5IGluc3BpcmVkIGJ5IEphdmEsIGFuZCBpbmhlcml0ZWQKQEAgLTI4LDYgKzMyLDcgQEAKICMgUmVuYW1lIHNvbWUgc3R1ZmYgc28gImZyb20gdGhyZWFkaW5nIGltcG9ydCAqIiBpcyBzYWZlCiBfc3RhcnRfbmV3X3RocmVhZCA9IF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZAogX2FsbG9jYXRlX2xvY2sgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2sKK19zZXRfc2VudGluZWwgPSBfdGhyZWFkLl9zZXRfc2VudGluZWwKIGdldF9pZGVudCA9IF90aHJlYWQuZ2V0X2lkZW50CiBUaHJlYWRFcnJvciA9IF90aHJlYWQuZXJyb3IKIHRyeToKQEAgLTEzMiw3ICsxMzcsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgbWUgPSBnZXRfaWRlbnQoKQogICAgICAgICBpZiBzZWxmLl9vd25lciA9PSBtZToKLSAgICAgICAgICAgIHNlbGYuX2NvdW50ID0gc2VsZi5fY291bnQgKyAxCisgICAgICAgICAgICBzZWxmLl9jb3VudCArPSAxCiAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICByYyA9IHNlbGYuX2Jsb2NrLmFjcXVpcmUoYmxvY2tpbmcsIHRpbWVvdXQpCiAgICAgICAgIGlmIHJjOgpAQCAtMjI0LDcgKzIyOSw3IEBACiAgICAgICAgICAgICBzZWxmLl9pc19vd25lZCA9IGxvY2suX2lzX293bmVkCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5fd2FpdGVycyA9IFtdCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBfZGVxdWUoKQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19lbnRlcl9fKCkKQEAgLTI3OSw2ICsyODQsNyBAQAogICAgICAgICB3YWl0ZXIuYWNxdWlyZSgpCiAgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKHdhaXRlcikKICAgICAgICAgc2F2ZWRfc3RhdGUgPSBzZWxmLl9yZWxlYXNlX3NhdmUoKQorICAgICAgICBnb3RpdCA9IEZhbHNlCiAgICAgICAgIHRyeTogICAgIyByZXN0b3JlIHN0YXRlIG5vIG1hdHRlciB3aGF0IChlLmcuLCBLZXlib2FyZEludGVycnVwdCkKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICB3YWl0ZXIuYWNxdWlyZSgpCkBAIC0yODgsMTQgKzI5NCwxNCBAQAogICAgICAgICAgICAgICAgICAgICBnb3RpdCA9IHdhaXRlci5hY3F1aXJlKFRydWUsIHRpbWVvdXQpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgZ290aXQgPSB3YWl0ZXIuYWNxdWlyZShGYWxzZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgZ290aXQ6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gZ290aXQKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuX2FjcXVpcmVfcmVzdG9yZShzYXZlZF9zdGF0ZSkKKyAgICAgICAgICAgIGlmIG5vdCBnb3RpdDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHdhaXRfZm9yKHNlbGYsIHByZWRpY2F0ZSwgdGltZW91dD1Ob25lKToKICAgICAgICAgIiIiV2FpdCB1bnRpbCBhIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gVHJ1ZS4KQEAgLTMzMiwxNCArMzM4LDE0IEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBub3Qgc2VsZi5faXNfb3duZWQoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IG5vdGlmeSBvbiB1bi1hY3F1aXJlZCBsb2NrIikKLSAgICAgICAgX193YWl0ZXJzID0gc2VsZi5fd2FpdGVycwotICAgICAgICB3YWl0ZXJzID0gX193YWl0ZXJzWzpuXQotICAgICAgICBpZiBub3Qgd2FpdGVyczoKKyAgICAgICAgYWxsX3dhaXRlcnMgPSBzZWxmLl93YWl0ZXJzCisgICAgICAgIHdhaXRlcnNfdG9fbm90aWZ5ID0gX2RlcXVlKF9pc2xpY2UoYWxsX3dhaXRlcnMsIG4pKQorICAgICAgICBpZiBub3Qgd2FpdGVyc190b19ub3RpZnk6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZm9yIHdhaXRlciBpbiB3YWl0ZXJzOgorICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnNfdG9fbm90aWZ5OgogICAgICAgICAgICAgd2FpdGVyLnJlbGVhc2UoKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIF9fd2FpdGVycy5yZW1vdmUod2FpdGVyKQorICAgICAgICAgICAgICAgIGFsbF93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKQEAgLTQxNCw3ICs0MjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgc2VsZi5fY29uZC53YWl0KHRpbWVvdXQpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gc2VsZi5fdmFsdWUgLSAxCisgICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgLT0gMQogICAgICAgICAgICAgICAgIHJjID0gVHJ1ZQogICAgICAgICByZXR1cm4gcmMKIApAQCAtNDI4LDcgKzQzNCw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggc2VsZi5fY29uZDoKLSAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gc2VsZi5fdmFsdWUgKyAxCisgICAgICAgICAgICBzZWxmLl92YWx1ZSArPSAxCiAgICAgICAgICAgICBzZWxmLl9jb25kLm5vdGlmeSgpCiAKICAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgpAQCAtNzIzLDE1ICs3MjksMTMgQEAKIF9jb3VudGVyID0gMAogZGVmIF9uZXduYW1lKHRlbXBsYXRlPSJUaHJlYWQtJWQiKToKICAgICBnbG9iYWwgX2NvdW50ZXIKLSAgICBfY291bnRlciA9IF9jb3VudGVyICsgMQorICAgIF9jb3VudGVyICs9IDEKICAgICByZXR1cm4gdGVtcGxhdGUgJSBfY291bnRlcgogCiAjIEFjdGl2ZSB0aHJlYWQgYWRtaW5pc3RyYXRpb24KIF9hY3RpdmVfbGltYm9fbG9jayA9IF9hbGxvY2F0ZV9sb2NrKCkKIF9hY3RpdmUgPSB7fSAgICAjIG1hcHMgdGhyZWFkIGlkIHRvIFRocmVhZCBvYmplY3QKIF9saW1ibyA9IHt9Ci0KLSMgRm9yIGRlYnVnIGFuZCBsZWFrIHRlc3RpbmcKIF9kYW5nbGluZyA9IFdlYWtTZXQoKQogCiAjIE1haW4gY2xhc3MgZm9yIHRocmVhZHMKQEAgLTc5MCwyOCArNzk0LDM1IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9kYWVtb25pYyA9IGN1cnJlbnRfdGhyZWFkKCkuZGFlbW9uCiAgICAgICAgIHNlbGYuX2lkZW50ID0gTm9uZQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IE5vbmUKICAgICAgICAgc2VsZi5fc3RhcnRlZCA9IEV2ZW50KCkKLSAgICAgICAgc2VsZi5fc3RvcHBlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2Jsb2NrID0gQ29uZGl0aW9uKExvY2soKSkKKyAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2luaXRpYWxpemVkID0gVHJ1ZQogICAgICAgICAjIHN5cy5zdGRlcnIgaXMgbm90IHN0b3JlZCBpbiB0aGUgY2xhc3MgbGlrZQogICAgICAgICAjIHN5cy5leGNfaW5mbyBzaW5jZSBpdCBjYW4gYmUgY2hhbmdlZCBiZXR3ZWVuIGluc3RhbmNlcwogICAgICAgICBzZWxmLl9zdGRlcnIgPSBfc3lzLnN0ZGVycgorICAgICAgICAjIEZvciBkZWJ1Z2dpbmcgYW5kIF9hZnRlcl9mb3JrKCkKICAgICAgICAgX2RhbmdsaW5nLmFkZChzZWxmKQogCi0gICAgZGVmIF9yZXNldF9pbnRlcm5hbF9sb2NrcyhzZWxmKToKKyAgICBkZWYgX3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYsIGlzX2FsaXZlKToKICAgICAgICAgIyBwcml2YXRlISAgQ2FsbGVkIGJ5IF9hZnRlcl9mb3JrKCkgdG8gcmVzZXQgb3VyIGludGVybmFsIGxvY2tzIGFzCiAgICAgICAgICMgdGhleSBtYXkgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSBsZWFkaW5nIHRvIGEgZGVhZGxvY2sgb3IgY3Jhc2guCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19ibG9jaycpOiAgIyBEdW1teVRocmVhZCBkZWxldGVzIF9ibG9jawotICAgICAgICAgICAgc2VsZi5fYmxvY2suX19pbml0X18oKQogICAgICAgICBzZWxmLl9zdGFydGVkLl9yZXNldF9pbnRlcm5hbF9sb2NrcygpCisgICAgICAgIGlmIGlzX2FsaXZlOgorICAgICAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlIHRocmVhZCBpc24ndCBhbGl2ZSBhZnRlciBmb3JrOiBpdCBkb2Vzbid0IGhhdmUgYSB0c3RhdGUKKyAgICAgICAgICAgICMgYW55bW9yZS4KKyAgICAgICAgICAgIHNlbGYuX2lzX3N0b3BwZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IE5vbmUKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgYXNzZXJ0IHNlbGYuX2luaXRpYWxpemVkLCAiVGhyZWFkLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQiCiAgICAgICAgIHN0YXR1cyA9ICJpbml0aWFsIgogICAgICAgICBpZiBzZWxmLl9zdGFydGVkLmlzX3NldCgpOgogICAgICAgICAgICAgc3RhdHVzID0gInN0YXJ0ZWQiCi0gICAgICAgIGlmIHNlbGYuX3N0b3BwZWQ6CisgICAgICAgIHNlbGYuaXNfYWxpdmUoKSAjIGVhc3kgd2F5IHRvIGdldCAuX2lzX3N0b3BwZWQgc2V0IHdoZW4gYXBwcm9wcmlhdGUKKyAgICAgICAgaWYgc2VsZi5faXNfc3RvcHBlZDoKICAgICAgICAgICAgIHN0YXR1cyA9ICJzdG9wcGVkIgogICAgICAgICBpZiBzZWxmLl9kYWVtb25pYzoKICAgICAgICAgICAgIHN0YXR1cyArPSAiIGRhZW1vbiIKQEAgLTg4NCw5ICs4OTUsMTggQEAKICAgICBkZWYgX3NldF9pZGVudChzZWxmKToKICAgICAgICAgc2VsZi5faWRlbnQgPSBnZXRfaWRlbnQoKQogCisgICAgZGVmIF9zZXRfdHN0YXRlX2xvY2soc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZXQgYSBsb2NrIG9iamVjdCB3aGljaCB3aWxsIGJlIHJlbGVhc2VkIGJ5IHRoZSBpbnRlcnByZXRlciB3aGVuCisgICAgICAgIHRoZSB1bmRlcmx5aW5nIHRocmVhZCBzdGF0ZSAoc2VlIHB5c3RhdGUuaCkgZ2V0cyBkZWxldGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBfc2V0X3NlbnRpbmVsKCkKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2suYWNxdWlyZSgpCisKICAgICBkZWYgX2Jvb3RzdHJhcF9pbm5lcihzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fc2V0X2lkZW50KCkKKyAgICAgICAgICAgIHNlbGYuX3NldF90c3RhdGVfbG9jaygpCiAgICAgICAgICAgICBzZWxmLl9zdGFydGVkLnNldCgpCiAgICAgICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKICAgICAgICAgICAgICAgICBfYWN0aXZlW3NlbGYuX2lkZW50XSA9IHNlbGYKQEAgLTk0MSw3ICs5NjEsNiBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgotICAgICAgICAgICAgICAgIHNlbGYuX3N0b3AoKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNlbGYuX2RlbGV0ZSgpIGJlY2F1c2UgaXQgYWxzbwogICAgICAgICAgICAgICAgICAgICAjIGdyYWJzIF9hY3RpdmVfbGltYm9fbG9jay4KQEAgLTk1MCwxMCArOTY5LDI3IEBACiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfc3RvcChzZWxmKToKLSAgICAgICAgc2VsZi5fYmxvY2suYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuX3N0b3BwZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuX2Jsb2NrLm5vdGlmeV9hbGwoKQotICAgICAgICBzZWxmLl9ibG9jay5yZWxlYXNlKCkKKyAgICAgICAgIyBBZnRlciBjYWxsaW5nIC5fc3RvcCgpLCAuaXNfYWxpdmUoKSByZXR1cm5zIEZhbHNlIGFuZCAuam9pbigpIHJldHVybnMKKyAgICAgICAgIyBpbW1lZGlhdGVseS4gIC5fdHN0YXRlX2xvY2sgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgY2FsbGluZyAuX3N0b3AoKS4KKyAgICAgICAgIworICAgICAgICAjIE5vcm1hbCBjYXNlOiAgQyBjb2RlIGF0IHRoZSBlbmQgb2YgdGhlIHRocmVhZCdzIGxpZmUKKyAgICAgICAgIyAocmVsZWFzZV9zZW50aW5lbCBpbiBfdGhyZWFkbW9kdWxlLmMpIHJlbGVhc2VzIC5fdHN0YXRlX2xvY2ssIGFuZAorICAgICAgICAjIHRoYXQncyBkZXRlY3RlZCBieSBvdXIgLl93YWl0X2Zvcl90c3RhdGVfbG9jaygpLCBjYWxsZWQgYnkgLmpvaW4oKQorICAgICAgICAjIGFuZCAuaXNfYWxpdmUoKS4gIEFueSBudW1iZXIgb2YgdGhyZWFkcyBfbWF5XyBjYWxsIC5fc3RvcCgpCisgICAgICAgICMgc2ltdWx0YW5lb3VzbHkgKGZvciBleGFtcGxlLCBpZiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBibG9ja2VkIGluCisgICAgICAgICMgLmpvaW4oKSBjYWxscyksIGFuZCB0aGV5J3JlIG5vdCBzZXJpYWxpemVkLiAgVGhhdCdzIGhhcm1sZXNzIC0KKyAgICAgICAgIyB0aGV5J2xsIGp1c3QgbWFrZSByZWR1bmRhbnQgcmViaW5kaW5ncyBvZiAuX2lzX3N0b3BwZWQgYW5kCisgICAgICAgICMgLl90c3RhdGVfbG9jay4gIE9ic2N1cmU6ICB3ZSByZWJpbmQgLl90c3RhdGVfbG9jayBsYXN0IHNvIHRoYXQgdGhlCisgICAgICAgICMgImFzc2VydCBzZWxmLl9pc19zdG9wcGVkIiBpbiAuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCkgYWx3YXlzIHdvcmtzCisgICAgICAgICMgKHRoZSBhc3NlcnQgaXMgZXhlY3V0ZWQgb25seSBpZiAuX3RzdGF0ZV9sb2NrIGlzIE5vbmUpLgorICAgICAgICAjCisgICAgICAgICMgU3BlY2lhbCBjYXNlOiAgX21haW5fdGhyZWFkIHJlbGVhc2VzIC5fdHN0YXRlX2xvY2sgdmlhIHRoaXMKKyAgICAgICAgIyBtb2R1bGUncyBfc2h1dGRvd24oKSBmdW5jdGlvbi4KKyAgICAgICAgbG9jayA9IHNlbGYuX3RzdGF0ZV9sb2NrCisgICAgICAgIGlmIGxvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgbm90IGxvY2subG9ja2VkKCkKKyAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBOb25lCiAKICAgICBkZWYgX2RlbGV0ZShzZWxmKToKICAgICAgICAgIlJlbW92ZSBjdXJyZW50IHRocmVhZCBmcm9tIHRoZSBkaWN0IG9mIGN1cnJlbnRseSBydW5uaW5nIHRocmVhZHMuIgpAQCAtMTAyMSwyMCArMTA1NywyNiBAQAogICAgICAgICBpZiBzZWxmIGlzIGN1cnJlbnRfdGhyZWFkKCk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBqb2luIGN1cnJlbnQgdGhyZWFkIikKIAotICAgICAgICBzZWxmLl9ibG9jay5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wcGVkOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ibG9jay53YWl0KCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVhZGxpbmUgPSBfdGltZSgpICsgdGltZW91dAotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wcGVkOgotICAgICAgICAgICAgICAgICAgICBkZWxheSA9IGRlYWRsaW5lIC0gX3RpbWUoKQotICAgICAgICAgICAgICAgICAgICBpZiBkZWxheSA8PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmxvY2sud2FpdChkZWxheSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2Jsb2NrLnJlbGVhc2UoKQorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jaygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZSBiZWhhdmlvciBvZiBhIG5lZ2F0aXZlIHRpbWVvdXQgaXNuJ3QgZG9jdW1lbnRlZCwgYnV0CisgICAgICAgICAgICAjIGhpc3RvcmljYWxseSAuam9pbih0aW1lb3V0PXgpIGZvciB4PDAgaGFzIGFjdGVkIGFzIGlmIHRpbWVvdXQ9MAorICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfdHN0YXRlX2xvY2sodGltZW91dD1tYXgodGltZW91dCwgMCkpCisKKyAgICBkZWYgX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9LTEpOgorICAgICAgICAjIElzc3VlICMxODgwODogd2FpdCBmb3IgdGhlIHRocmVhZCBzdGF0ZSB0byBiZSBnb25lLgorICAgICAgICAjIEF0IHRoZSBlbmQgb2YgdGhlIHRocmVhZCdzIGxpZmUsIGFmdGVyIGFsbCBrbm93bGVkZ2Ugb2YgdGhlIHRocmVhZAorICAgICAgICAjIGlzIHJlbW92ZWQgZnJvbSBDIGRhdGEgc3RydWN0dXJlcywgQyBjb2RlIHJlbGVhc2VzIG91ciBfdHN0YXRlX2xvY2suCisgICAgICAgICMgVGhpcyBtZXRob2QgcGFzc2VzIGl0cyBhcmd1bWVudHMgdG8gX3RzdGF0ZV9sb2NrLmFxdWlyZSgpLgorICAgICAgICAjIElmIHRoZSBsb2NrIGlzIGFjcXVpcmVkLCB0aGUgQyBjb2RlIGlzIGRvbmUsIGFuZCBzZWxmLl9zdG9wKCkgaXMKKyAgICAgICAgIyBjYWxsZWQuICBUaGF0IHNldHMgLl9pc19zdG9wcGVkIHRvIFRydWUsIGFuZCAuX3RzdGF0ZV9sb2NrIHRvIE5vbmUuCisgICAgICAgIGxvY2sgPSBzZWxmLl90c3RhdGVfbG9jaworICAgICAgICBpZiBsb2NrIGlzIE5vbmU6ICAjIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0IHRoZSBDIGNvZGUgaXMgZG9uZQorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX2lzX3N0b3BwZWQKKyAgICAgICAgZWxpZiBsb2NrLmFjcXVpcmUoYmxvY2ssIHRpbWVvdXQpOgorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgICAgIHNlbGYuX3N0b3AoKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIG5hbWUoc2VsZik6CkBAIC0xMDczLDcgKzExMTUsMTAgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgYXNzZXJ0IHNlbGYuX2luaXRpYWxpemVkLCAiVGhyZWFkLl9faW5pdF9fKCkgbm90IGNhbGxlZCIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCkgYW5kIG5vdCBzZWxmLl9zdG9wcGVkCisgICAgICAgIGlmIHNlbGYuX2lzX3N0b3BwZWQgb3Igbm90IHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fd2FpdF9mb3JfdHN0YXRlX2xvY2soRmFsc2UpCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5faXNfc3RvcHBlZAogCiAgICAgaXNBbGl2ZSA9IGlzX2FsaXZlCiAKQEAgLTEwOTgsNyArMTE0Myw3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9pbml0aWFsaXplZDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGhyZWFkLl9faW5pdF9fKCkgbm90IGNhbGxlZCIpCiAgICAgICAgIGlmIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBzZXQgZGFlbW9uIHN0YXR1cyBvZiBhY3RpdmUgdGhyZWFkIik7CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBzZXQgZGFlbW9uIHN0YXR1cyBvZiBhY3RpdmUgdGhyZWFkIikKICAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb25pYwogCiAgICAgZGVmIGlzRGFlbW9uKHNlbGYpOgpAQCAtMTE0OSwyNSArMTE5NCwxMiBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT0iTWFpblRocmVhZCIsIGRhZW1vbj1GYWxzZSkKKyAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgogCi0gICAgZGVmIF9leGl0ZnVuYyhzZWxmKToKLSAgICAgICAgc2VsZi5fc3RvcCgpCi0gICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICB3aGlsZSB0OgotICAgICAgICAgICAgdC5qb2luKCkKLSAgICAgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICBzZWxmLl9kZWxldGUoKQotCi1kZWYgX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCk6Ci0gICAgZm9yIHQgaW4gZW51bWVyYXRlKCk6Ci0gICAgICAgIGlmIG5vdCB0LmRhZW1vbiBhbmQgdC5pc19hbGl2ZSgpOgotICAgICAgICAgICAgcmV0dXJuIHQKLSAgICByZXR1cm4gTm9uZQotCiAKICMgRHVtbXkgdGhyZWFkIGNsYXNzIHRvIHJlcHJlc2VudCB0aHJlYWRzIG5vdCBzdGFydGVkIGhlcmUuCiAjIFRoZXNlIGFyZW4ndCBnYXJiYWdlIGNvbGxlY3RlZCB3aGVuIHRoZXkgZGllLCBub3IgY2FuIHRoZXkgYmUgd2FpdGVkIGZvci4KQEAgLTExODIsMTEgKzEyMTQsNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9X25ld25hbWUoIkR1bW15LSVkIiksIGRhZW1vbj1UcnVlKQogCi0gICAgICAgICMgVGhyZWFkLl9ibG9jayBjb25zdW1lcyBhbiBPUy1sZXZlbCBsb2NraW5nIHByaW1pdGl2ZSwgd2hpY2gKLSAgICAgICAgIyBjYW4gbmV2ZXIgYmUgdXNlZCBieSBhIF9EdW1teVRocmVhZC4gIFNpbmNlIGEgX0R1bW15VGhyZWFkCi0gICAgICAgICMgaW5zdGFuY2UgaXMgaW1tb3J0YWwsIHRoYXQncyBiYWQsIHNvIHJlbGVhc2UgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgZGVsIHNlbGYuX2Jsb2NrCi0KICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKQEAgLTEyNDgsNyArMTI3NSw0MCBAQAogIyBhbmQgbWFrZSBpdCBhdmFpbGFibGUgZm9yIHRoZSBpbnRlcnByZXRlcgogIyAoUHlfTWFpbikgYXMgdGhyZWFkaW5nLl9zaHV0ZG93bi4KIAotX3NodXRkb3duID0gX01haW5UaHJlYWQoKS5fZXhpdGZ1bmMKK19tYWluX3RocmVhZCA9IF9NYWluVGhyZWFkKCkKKworZGVmIF9zaHV0ZG93bigpOgorICAgICMgT2JzY3VyZTogIG90aGVyIHRocmVhZHMgbWF5IGJlIHdhaXRpbmcgdG8gam9pbiBfbWFpbl90aHJlYWQuICBUaGF0J3MKKyAgICAjIGR1YmlvdXMsIGJ1dCBzb21lIGNvZGUgZG9lcyBpdC4gIFdlIGNhbid0IHdhaXQgZm9yIEMgY29kZSB0byByZWxlYXNlCisgICAgIyB0aGUgbWFpbiB0aHJlYWQncyB0c3RhdGVfbG9jayAtIHRoYXQgd29uJ3QgaGFwcGVuIHVudGlsIHRoZSBpbnRlcnByZXRlcgorICAgICMgaXMgbmVhcmx5IGRlYWQuICBTbyB3ZSByZWxlYXNlIGl0IGhlcmUuICBOb3RlIHRoYXQganVzdCBjYWxsaW5nIF9zdG9wKCkKKyAgICAjIGlzbid0IGVub3VnaDogIG90aGVyIHRocmVhZHMgbWF5IGFscmVhZHkgYmUgd2FpdGluZyBvbiBfdHN0YXRlX2xvY2suCisgICAgdGxvY2sgPSBfbWFpbl90aHJlYWQuX3RzdGF0ZV9sb2NrCisgICAgIyBUaGUgbWFpbiB0aHJlYWQgaXNuJ3QgZmluaXNoZWQgeWV0LCBzbyBpdHMgdGhyZWFkIHN0YXRlIGxvY2sgY2FuJ3QgaGF2ZQorICAgICMgYmVlbiByZWxlYXNlZC4KKyAgICBhc3NlcnQgdGxvY2sgaXMgbm90IE5vbmUKKyAgICBhc3NlcnQgdGxvY2subG9ja2VkKCkKKyAgICB0bG9jay5yZWxlYXNlKCkKKyAgICBfbWFpbl90aHJlYWQuX3N0b3AoKQorICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIHdoaWxlIHQ6CisgICAgICAgIHQuam9pbigpCisgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIF9tYWluX3RocmVhZC5fZGVsZXRlKCkKKworZGVmIF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpOgorICAgIGZvciB0IGluIGVudW1lcmF0ZSgpOgorICAgICAgICBpZiBub3QgdC5kYWVtb24gYW5kIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJldHVybiB0CisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1haW5fdGhyZWFkKCk6CisgICAgIiIiUmV0dXJuIHRoZSBtYWluIHRocmVhZCBvYmplY3QuCisKKyAgICBJbiBub3JtYWwgY29uZGl0aW9ucywgdGhlIG1haW4gdGhyZWFkIGlzIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUKKyAgICBQeXRob24gaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQuCisgICAgIiIiCisgICAgcmV0dXJuIF9tYWluX3RocmVhZAogCiAjIGdldCB0aHJlYWQtbG9jYWwgaW1wbGVtZW50YXRpb24sIGVpdGhlciBmcm9tIHRoZSB0aHJlYWQKICMgbW9kdWxlLCBvciBmcm9tIHRoZSBweXRob24gZmFsbGJhY2sKQEAgLTEyNjYsMjUgKzEzMjYsMzEgQEAKIAogICAgICMgUmVzZXQgX2FjdGl2ZV9saW1ib19sb2NrLCBpbiBjYXNlIHdlIGZvcmtlZCB3aGlsZSB0aGUgbG9jayB3YXMgaGVsZAogICAgICMgYnkgYW5vdGhlciAobm9uLWZvcmtlZCkgdGhyZWFkLiAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg3NDkwMAotICAgIGdsb2JhbCBfYWN0aXZlX2xpbWJvX2xvY2sKKyAgICBnbG9iYWwgX2FjdGl2ZV9saW1ib19sb2NrLCBfbWFpbl90aHJlYWQKICAgICBfYWN0aXZlX2xpbWJvX2xvY2sgPSBfYWxsb2NhdGVfbG9jaygpCiAKICAgICAjIGZvcmsoKSBvbmx5IGNvcGllZCB0aGUgY3VycmVudCB0aHJlYWQ7IGNsZWFyIHJlZmVyZW5jZXMgdG8gb3RoZXJzLgogICAgIG5ld19hY3RpdmUgPSB7fQogICAgIGN1cnJlbnQgPSBjdXJyZW50X3RocmVhZCgpCisgICAgX21haW5fdGhyZWFkID0gY3VycmVudAogICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgotICAgICAgICBmb3IgdGhyZWFkIGluIF9lbnVtZXJhdGUoKToKKyAgICAgICAgIyBEYW5nbGluZyB0aHJlYWQgaW5zdGFuY2VzIG11c3Qgc3RpbGwgaGF2ZSB0aGVpciBsb2NrcyByZXNldCwKKyAgICAgICAgIyBiZWNhdXNlIHNvbWVvbmUgbWF5IGpvaW4oKSB0aGVtLgorICAgICAgICB0aHJlYWRzID0gc2V0KF9lbnVtZXJhdGUoKSkKKyAgICAgICAgdGhyZWFkcy51cGRhdGUoX2RhbmdsaW5nKQorICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAjIEFueSBsb2NrL2NvbmRpdGlvbiB2YXJpYWJsZSBtYXkgYmUgY3VycmVudGx5IGxvY2tlZCBvciBpbiBhbgogICAgICAgICAgICAgIyBpbnZhbGlkIHN0YXRlLCBzbyB3ZSByZWluaXRpYWxpemUgdGhlbS4KLSAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoKQogICAgICAgICAgICAgaWYgdGhyZWFkIGlzIGN1cnJlbnQ6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSBpcyBvbmx5IG9uZSBhY3RpdmUgdGhyZWFkLiBXZSByZXNldCB0aGUgaWRlbnQgdG8KICAgICAgICAgICAgICAgICAjIGl0cyBuZXcgdmFsdWUgc2luY2UgaXQgY2FuIGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKFRydWUpCiAgICAgICAgICAgICAgICAgaWRlbnQgPSBnZXRfaWRlbnQoKQogICAgICAgICAgICAgICAgIHRocmVhZC5faWRlbnQgPSBpZGVudAogICAgICAgICAgICAgICAgIG5ld19hY3RpdmVbaWRlbnRdID0gdGhyZWFkCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgQWxsIHRoZSBvdGhlcnMgYXJlIGFscmVhZHkgc3RvcHBlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKEZhbHNlKQogICAgICAgICAgICAgICAgIHRocmVhZC5fc3RvcCgpCiAKICAgICAgICAgX2xpbWJvLmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90aW1laXQucHkgYi9MaWIvdGltZWl0LnB5CmluZGV4IDRmN2QyOGYuLmVhZDIwMzAgMTAwNzU1Ci0tLSBhL0xpYi90aW1laXQucHkKKysrIGIvTGliL3RpbWVpdC5weQpAQCAtMzEsMzggKzMxLDI5IEBACiBJZiAtbiBpcyBub3QgZ2l2ZW4sIGEgc3VpdGFibGUgbnVtYmVyIG9mIGxvb3BzIGlzIGNhbGN1bGF0ZWQgYnkgdHJ5aW5nCiBzdWNjZXNzaXZlIHBvd2VycyBvZiAxMCB1bnRpbCB0aGUgdG90YWwgdGltZSBpcyBhdCBsZWFzdCAwLjIgc2Vjb25kcy4KIAotVGhlIGRpZmZlcmVuY2UgaW4gZGVmYXVsdCB0aW1lciBmdW5jdGlvbiBpcyBiZWNhdXNlIG9uIFdpbmRvd3MsCi1jbG9jaygpIGhhcyBtaWNyb3NlY29uZCBncmFudWxhcml0eSBidXQgdGltZSgpJ3MgZ3JhbnVsYXJpdHkgaXMgMS82MHRoCi1vZiBhIHNlY29uZDsgb24gVW5peCwgY2xvY2soKSBoYXMgMS8xMDB0aCBvZiBhIHNlY29uZCBncmFudWxhcml0eSBhbmQKLXRpbWUoKSBpcyBtdWNoIG1vcmUgcHJlY2lzZS4gIE9uIGVpdGhlciBwbGF0Zm9ybSwgdGhlIGRlZmF1bHQgdGltZXIKLWZ1bmN0aW9ucyBtZWFzdXJlIHdhbGwgY2xvY2sgdGltZSwgbm90IHRoZSBDUFUgdGltZS4gIFRoaXMgbWVhbnMgdGhhdAotb3RoZXIgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgY29tcHV0ZXIgbWF5IGludGVyZmVyZSB3aXRoIHRoZQotdGltaW5nLiAgVGhlIGJlc3QgdGhpbmcgdG8gZG8gd2hlbiBhY2N1cmF0ZSB0aW1pbmcgaXMgbmVjZXNzYXJ5IGlzIHRvCi1yZXBlYXQgdGhlIHRpbWluZyBhIGZldyB0aW1lcyBhbmQgdXNlIHRoZSBiZXN0IHRpbWUuICBUaGUgLXIgb3B0aW9uIGlzCi1nb29kIGZvciB0aGlzOyB0aGUgZGVmYXVsdCBvZiAzIHJlcGV0aXRpb25zIGlzIHByb2JhYmx5IGVub3VnaCBpbiBtb3N0Ci1jYXNlcy4gIE9uIFVuaXgsIHlvdSBjYW4gdXNlIGNsb2NrKCkgdG8gbWVhc3VyZSBDUFUgdGltZS4KLQogTm90ZTogdGhlcmUgaXMgYSBjZXJ0YWluIGJhc2VsaW5lIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBleGVjdXRpbmcgYQotcGFzcyBzdGF0ZW1lbnQuICBUaGUgY29kZSBoZXJlIGRvZXNuJ3QgdHJ5IHRvIGhpZGUgaXQsIGJ1dCB5b3Ugc2hvdWxkCi1iZSBhd2FyZSBvZiBpdC4gIFRoZSBiYXNlbGluZSBvdmVyaGVhZCBjYW4gYmUgbWVhc3VyZWQgYnkgaW52b2tpbmcgdGhlCi1wcm9ncmFtIHdpdGhvdXQgYXJndW1lbnRzLgorcGFzcyBzdGF0ZW1lbnQuICBJdCBkaWZmZXJzIGJldHdlZW4gdmVyc2lvbnMuICBUaGUgY29kZSBoZXJlIGRvZXNuJ3QgdHJ5Cit0byBoaWRlIGl0LCBidXQgeW91IHNob3VsZCBiZSBhd2FyZSBvZiBpdC4gIFRoZSBiYXNlbGluZSBvdmVyaGVhZCBjYW4gYmUKK21lYXN1cmVkIGJ5IGludm9raW5nIHRoZSBwcm9ncmFtIHdpdGhvdXQgYXJndW1lbnRzLgogCi1UaGUgYmFzZWxpbmUgb3ZlcmhlYWQgZGlmZmVycyBiZXR3ZWVuIFB5dGhvbiB2ZXJzaW9ucyEgIEFsc28sIHRvCi1mYWlybHkgY29tcGFyZSBvbGRlciBQeXRob24gdmVyc2lvbnMgdG8gUHl0aG9uIDIuMywgeW91IG1heSB3YW50IHRvCi11c2UgcHl0aG9uIC1PIGZvciB0aGUgb2xkZXIgdmVyc2lvbnMgdG8gYXZvaWQgdGltaW5nIFNFVF9MSU5FTk8KLWluc3RydWN0aW9ucy4KK0NsYXNzZXM6CisKKyAgICBUaW1lcgorCitGdW5jdGlvbnM6CisKKyAgICB0aW1laXQoc3RyaW5nLCBzdHJpbmcpIC0+IGZsb2F0CisgICAgcmVwZWF0KHN0cmluZywgc3RyaW5nKSAtPiBsaXN0CisgICAgZGVmYXVsdF90aW1lcigpIC0+IGZsb2F0CisKICIiIgogCiBpbXBvcnQgZ2MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi10cnk6Ci0gICAgaW1wb3J0IGl0ZXJ0b29scwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgTXVzdCBiZSBhbiBvbGRlciBQeXRob24gdmVyc2lvbiAoc2VlIHRpbWVpdCgpIGJlbG93KQotICAgIGl0ZXJ0b29scyA9IE5vbmUKK2ltcG9ydCBpdGVydG9vbHMKIAotX19hbGxfXyA9IFsiVGltZXIiXQorX19hbGxfXyA9IFsiVGltZXIiLCAidGltZWl0IiwgInJlcGVhdCIsICJkZWZhdWx0X3RpbWVyIl0KIAogZHVtbXlfc3JjX25hbWUgPSAiPHRpbWVpdC1zcmM+IgogZGVmYXVsdF9udW1iZXIgPSAxMDAwMDAwCkBAIC0xODAsMTAgKzE3MSw3IEBACiAgICAgICAgIHRvIG9uZSBtaWxsaW9uLiAgVGhlIG1haW4gc3RhdGVtZW50LCB0aGUgc2V0dXAgc3RhdGVtZW50IGFuZAogICAgICAgICB0aGUgdGltZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGl0ZXJ0b29sczoKLSAgICAgICAgICAgIGl0ID0gaXRlcnRvb2xzLnJlcGVhdChOb25lLCBudW1iZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdCA9IFtOb25lXSAqIG51bWJlcgorICAgICAgICBpdCA9IGl0ZXJ0b29scy5yZXBlYXQoTm9uZSwgbnVtYmVyKQogICAgICAgICBnY29sZCA9IGdjLmlzZW5hYmxlZCgpCiAgICAgICAgIGdjLmRpc2FibGUoKQogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9fX2luaXRfXy5weSBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CmluZGV4IGI5ZTVkMmUuLmExZmZjYTEgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5CisrKyBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CkBAIC0zNSw4ICszNSw2IEBACiAgICAgIyBBdHRlbXB0IHRvIGNvbmZpZ3VyZSBUY2wvVGsgd2l0aG91dCByZXF1aXJpbmcgUEFUSAogICAgIGZyb20gdGtpbnRlciBpbXBvcnQgX2ZpeAogCi1pbXBvcnQgd2FybmluZ3MKLQogaW1wb3J0IF90a2ludGVyICMgSWYgdGhpcyBmYWlscyB5b3VyIFB5dGhvbiBtYXkgbm90IGJlIGNvbmZpZ3VyZWQgZm9yIFRrCiBUY2xFcnJvciA9IF90a2ludGVyLlRjbEVycm9yCiBmcm9tIHRraW50ZXIuY29uc3RhbnRzIGltcG9ydCAqCkBAIC0xMTQsNiArMTEyLDI5IEBACiB0cnk6IF9jbmZtZXJnZSA9IF90a2ludGVyLl9jbmZtZXJnZQogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOiBwYXNzCiAKK2RlZiBfc3BsaXRkaWN0KHRrLCB2LCBjdXRfbWludXM9VHJ1ZSwgY29udj1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBwcm9wZXJseSBmb3JtYXR0ZWQgZGljdCBidWlsdCBmcm9tIFRjbCBsaXN0IHBhaXJzLgorCisgICAgSWYgY3V0X21pbnVzIGlzIFRydWUsIHRoZSBzdXBwb3NlZCAnLScgcHJlZml4IHdpbGwgYmUgcmVtb3ZlZCBmcm9tCisgICAga2V5cy4gSWYgY29udiBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgdG8gY29udmVydCB2YWx1ZXMuCisKKyAgICBUY2wgbGlzdCBpcyBleHBlY3RlZCB0byBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICIiIgorICAgIHQgPSB0ay5zcGxpdGxpc3QodikKKyAgICBpZiBsZW4odCkgJSAyOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RjbCBsaXN0IHJlcHJlc2VudGluZyBhIGRpY3QgaXMgZXhwZWN0ZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgZWxlbWVudHMnKQorICAgIGl0ID0gaXRlcih0KQorICAgIGRpY3QgPSB7fQorICAgIGZvciBrZXksIHZhbHVlIGluIHppcChpdCwgaXQpOgorICAgICAgICBrZXkgPSBzdHIoa2V5KQorICAgICAgICBpZiBjdXRfbWludXMgYW5kIGtleVswXSA9PSAnLSc6CisgICAgICAgICAgICBrZXkgPSBrZXlbMTpdCisgICAgICAgIGlmIGNvbnY6CisgICAgICAgICAgICB2YWx1ZSA9IGNvbnYodmFsdWUpCisgICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIGRpY3QKKwogY2xhc3MgRXZlbnQ6CiAgICAgIiIiQ29udGFpbmVyIGZvciB0aGUgcHJvcGVydGllcyBvZiBhbiBldmVudC4KIApAQCAtMTkzLDYgKzIxNCw3IEBACiAgICAgdGhhdCBjb25zdHJhaW4gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gZ2V0KCkuIiIiCiAgICAgX2RlZmF1bHQgPSAiIgogICAgIF90ayA9IE5vbmUKKyAgICBfdGNsQ29tbWFuZHMgPSBOb25lCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCB2YWx1ZT1Ob25lLCBuYW1lPU5vbmUpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSB2YXJpYWJsZQogCkBAIC0yMTEsNyArMjMzLDcgQEAKICAgICAgICAgZ2xvYmFsIF92YXJudW0KICAgICAgICAgaWYgbm90IG1hc3RlcjoKICAgICAgICAgICAgIG1hc3RlciA9IF9kZWZhdWx0X3Jvb3QKLSAgICAgICAgc2VsZi5fbWFzdGVyID0gbWFzdGVyCisgICAgICAgIHNlbGYuX3Jvb3QgPSBtYXN0ZXIuX3Jvb3QoKQogICAgICAgICBzZWxmLl90ayA9IG1hc3Rlci50awogICAgICAgICBpZiBuYW1lOgogICAgICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKQEAgLTIyNCw5ICsyNDYsMTUgQEAKICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZShzZWxmLl9kZWZhdWx0KQogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICAiIiJVbnNldCB0aGUgdmFyaWFibGUgaW4gVGNsLiIiIgotICAgICAgICBpZiAoc2VsZi5fdGsgaXMgbm90IE5vbmUgYW5kCi0gICAgICAgICAgICBzZWxmLl90ay5nZXRib29sZWFuKHNlbGYuX3RrLmNhbGwoImluZm8iLCAiZXhpc3RzIiwgc2VsZi5fbmFtZSkpKToKKyAgICAgICAgaWYgc2VsZi5fdGsgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl90ay5nZXRib29sZWFuKHNlbGYuX3RrLmNhbGwoImluZm8iLCAiZXhpc3RzIiwgc2VsZi5fbmFtZSkpOgogICAgICAgICAgICAgc2VsZi5fdGsuZ2xvYmFsdW5zZXR2YXIoc2VsZi5fbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fdGNsQ29tbWFuZHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLl90Y2xDb21tYW5kczoKKyAgICAgICAgICAgICAgICAjcHJpbnQgJy0gVGtpbnRlcjogZGVsZXRlZCBjb21tYW5kJywgbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX3RrLmRlbGV0ZWNvbW1hbmQobmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzID0gTm9uZQogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGluIFRjbC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKQEAgLTI0Niw3ICsyNzQsMjAgQEAKIAogICAgICAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrLgogICAgICAgICAiIiIKLSAgICAgICAgY2JuYW1lID0gc2VsZi5fbWFzdGVyLl9yZWdpc3RlcihjYWxsYmFjaykKKyAgICAgICAgZiA9IENhbGxXcmFwcGVyKGNhbGxiYWNrLCBOb25lLCBzZWxmKS5fX2NhbGxfXworICAgICAgICBjYm5hbWUgPSByZXByKGlkKGYpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrLl9fZnVuY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2JuYW1lID0gY2JuYW1lICsgY2FsbGJhY2suX19uYW1lX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl90ay5jcmVhdGVjb21tYW5kKGNibmFtZSwgZikKKyAgICAgICAgaWYgc2VsZi5fdGNsQ29tbWFuZHMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzID0gW10KKyAgICAgICAgc2VsZi5fdGNsQ29tbWFuZHMuYXBwZW5kKGNibmFtZSkKICAgICAgICAgc2VsZi5fdGsuY2FsbCgidHJhY2UiLCAidmFyaWFibGUiLCBzZWxmLl9uYW1lLCBtb2RlLCBjYm5hbWUpCiAgICAgICAgIHJldHVybiBjYm5hbWUKICAgICB0cmFjZSA9IHRyYWNlX3ZhcmlhYmxlCkBAIC0yNTcsNyArMjk4LDExIEBACiAgICAgICAgIENCTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgZnJvbSB0cmFjZV92YXJpYWJsZSBvciB0cmFjZS4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3RrLmNhbGwoInRyYWNlIiwgInZkZWxldGUiLCBzZWxmLl9uYW1lLCBtb2RlLCBjYm5hbWUpCi0gICAgICAgIHNlbGYuX21hc3Rlci5kZWxldGVjb21tYW5kKGNibmFtZSkKKyAgICAgICAgc2VsZi5fdGsuZGVsZXRlY29tbWFuZChjYm5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzLnJlbW92ZShjYm5hbWUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcwogICAgIGRlZiB0cmFjZV92aW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFsbCB0cmFjZSBjYWxsYmFjayBpbmZvcm1hdGlvbi4iIiIKICAgICAgICAgcmV0dXJuIFtzZWxmLl90ay5zcGxpdCh4KSBmb3IgeCBpbiBzZWxmLl90ay5zcGxpdGxpc3QoCkBAIC00MjMsNyArNDY4LDEwIEBACiAgICAgICAgICAgICAgICsgX2ZsYXR0ZW4oYXJncykgKyBfZmxhdHRlbihsaXN0KGt3Lml0ZW1zKCkpKSkKICAgICBkZWYgdGtfbWVudUJhcihzZWxmLCAqYXJncyk6CiAgICAgICAgICIiIkRvIG5vdCB1c2UuIE5lZWRlZCBpbiBUayAzLjYgYW5kIGVhcmxpZXIuIiIiCi0gICAgICAgIHBhc3MgIyBvYnNvbGV0ZSBzaW5jZSBUayA0LjAKKyAgICAgICAgIyBvYnNvbGV0ZSBzaW5jZSBUayA0LjAKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ3RrX21lbnVCYXIoKSBkb2VzIG5vdGhpbmcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjYnLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgIGRlZiB3YWl0X3ZhcmlhYmxlKHNlbGYsIG5hbWU9J1BZX1ZBUicpOgogICAgICAgICAiIiJXYWl0IHVudGlsIHRoZSB2YXJpYWJsZSBpcyBtb2RpZmllZC4KIApAQCAtNTM3LDYgKzU4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZWNvbW1hbmQobmFtZSkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgY2FsbGl0Ll9fbmFtZV9fID0gZnVuYy5fX25hbWVfXwogICAgICAgICAgICAgbmFtZSA9IHNlbGYuX3JlZ2lzdGVyKGNhbGxpdCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoJ2FmdGVyJywgbXMsIG5hbWUpCiAgICAgZGVmIGFmdGVyX2lkbGUoc2VsZiwgZnVuYywgKmFyZ3MpOgpAQCAtMTM2NSwxNSArMTQxNCwxMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMoY25mLCBrdykKICAgICAgICAgaWYgbm90IG9wdGlvbnM6Ci0gICAgICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoJ2dyaWQnLAotICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBzZWxmLl93LCBpbmRleCkKLSAgICAgICAgICAgIHdvcmRzID0gc2VsZi50ay5zcGxpdGxpc3QocmVzKQotICAgICAgICAgICAgZGljdCA9IHt9Ci0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4od29yZHMpLCAyKToKLSAgICAgICAgICAgICAgICBrZXkgPSB3b3Jkc1tpXVsxOl0KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHdvcmRzW2krMV0KLSAgICAgICAgICAgICAgICBkaWN0W2tleV0gPSBzZWxmLl9ncmlkY29udnZhbHVlKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGRpY3QKKyAgICAgICAgICAgIHJldHVybiBfc3BsaXRkaWN0KAorICAgICAgICAgICAgICAgIHNlbGYudGssCisgICAgICAgICAgICAgICAgc2VsZi50ay5jYWxsKCdncmlkJywgY29tbWFuZCwgc2VsZi5fdywgaW5kZXgpLAorICAgICAgICAgICAgICAgIGNvbnY9c2VsZi5fZ3JpZGNvbnZ2YWx1ZSkKICAgICAgICAgcmVzID0gc2VsZi50ay5jYWxsKAogICAgICAgICAgICAgICAgICAgKCdncmlkJywgY29tbWFuZCwgc2VsZi5fdywgaW5kZXgpCiAgICAgICAgICAgICAgICAgICArIG9wdGlvbnMpCkBAIC0xODczLDkgKzE5MTcsMTIgQEAKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoYmFzZV9weSk6CiAgICAgICAgICAgICBleGVjKG9wZW4oYmFzZV9weSkucmVhZCgpLCBkaXIpCiAgICAgZGVmIHJlcG9ydF9jYWxsYmFja19leGNlcHRpb24oc2VsZiwgZXhjLCB2YWwsIHRiKToKLSAgICAgICAgIiIiSW50ZXJuYWwgZnVuY3Rpb24uIEl0IHJlcG9ydHMgZXhjZXB0aW9uIG9uIHN5cy5zdGRlcnIuIiIiCisgICAgICAgICIiIlJlcG9ydCBjYWxsYmFjayBleGNlcHRpb24gb24gc3lzLnN0ZGVyci4KKworICAgICAgICBBcHBsaWNhdGlvbnMgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbiwgYW5kCisgICAgICAgIHNob3VsZCB3aGVuIHN5cy5zdGRlcnIgaXMgTm9uZS4iIiIKICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFeGNlcHRpb24gaW4gVGtpbnRlciBjYWxsYmFja1xuIikKKyAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiBpbiBUa2ludGVyIGNhbGxiYWNrIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICBzeXMubGFzdF90eXBlID0gZXhjCiAgICAgICAgIHN5cy5sYXN0X3ZhbHVlID0gdmFsCiAgICAgICAgIHN5cy5sYXN0X3RyYWNlYmFjayA9IHRiCkBAIC0xOTMzLDE2ICsxOTgwLDEwIEBACiAgICAgZGVmIHBhY2tfaW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNraW5nIG9wdGlvbnMKICAgICAgICAgZm9yIHRoaXMgd2lkZ2V0LiIiIgotICAgICAgICB3b3JkcyA9IHNlbGYudGsuc3BsaXRsaXN0KAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKCdwYWNrJywgJ2luZm8nLCBzZWxmLl93KSkKLSAgICAgICAgZGljdCA9IHt9Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbih3b3JkcyksIDIpOgotICAgICAgICAgICAga2V5ID0gd29yZHNbaV1bMTpdCi0gICAgICAgICAgICB2YWx1ZSA9IHdvcmRzW2krMV0KLSAgICAgICAgICAgIGlmIHN0cih2YWx1ZSlbOjFdID09ICcuJzoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX25hbWV0b3dpZGdldCh2YWx1ZSkKLSAgICAgICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlCi0gICAgICAgIHJldHVybiBkaWN0CisgICAgICAgIGQgPSBfc3BsaXRkaWN0KHNlbGYudGssIHNlbGYudGsuY2FsbCgncGFjaycsICdpbmZvJywgc2VsZi5fdykpCisgICAgICAgIGlmICdpbicgaW4gZDoKKyAgICAgICAgICAgIGRbJ2luJ10gPSBzZWxmLm5hbWV0b3dpZGdldChkWydpbiddKQorICAgICAgICByZXR1cm4gZAogICAgIGluZm8gPSBwYWNrX2luZm8KICAgICBwcm9wYWdhdGUgPSBwYWNrX3Byb3BhZ2F0ZSA9IE1pc2MucGFja19wcm9wYWdhdGUKICAgICBzbGF2ZXMgPSBwYWNrX3NsYXZlcyA9IE1pc2MucGFja19zbGF2ZXMKQEAgLTE5ODQsMTYgKzIwMjUsMTAgQEAKICAgICBkZWYgcGxhY2VfaW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwbGFjaW5nIG9wdGlvbnMKICAgICAgICAgZm9yIHRoaXMgd2lkZ2V0LiIiIgotICAgICAgICB3b3JkcyA9IHNlbGYudGsuc3BsaXRsaXN0KAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKCdwbGFjZScsICdpbmZvJywgc2VsZi5fdykpCi0gICAgICAgIGRpY3QgPSB7fQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4od29yZHMpLCAyKToKLSAgICAgICAgICAgIGtleSA9IHdvcmRzW2ldWzE6XQotICAgICAgICAgICAgdmFsdWUgPSB3b3Jkc1tpKzFdCi0gICAgICAgICAgICBpZiBzdHIodmFsdWUpWzoxXSA9PSAnLic6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9uYW1ldG93aWRnZXQodmFsdWUpCi0gICAgICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZQotICAgICAgICByZXR1cm4gZGljdAorICAgICAgICBkID0gX3NwbGl0ZGljdChzZWxmLnRrLCBzZWxmLnRrLmNhbGwoJ3BsYWNlJywgJ2luZm8nLCBzZWxmLl93KSkKKyAgICAgICAgaWYgJ2luJyBpbiBkOgorICAgICAgICAgICAgZFsnaW4nXSA9IHNlbGYubmFtZXRvd2lkZ2V0KGRbJ2luJ10pCisgICAgICAgIHJldHVybiBkCiAgICAgaW5mbyA9IHBsYWNlX2luZm8KICAgICBzbGF2ZXMgPSBwbGFjZV9zbGF2ZXMgPSBNaXNjLnBsYWNlX3NsYXZlcwogCkBAIC0yMDMzLDE2ICsyMDY4LDEwIEBACiAgICAgZGVmIGdyaWRfaW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcHRpb25zCiAgICAgICAgIGZvciBwb3NpdGlvbmluZyB0aGlzIHdpZGdldCBpbiBhIGdyaWQuIiIiCi0gICAgICAgIHdvcmRzID0gc2VsZi50ay5zcGxpdGxpc3QoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ2dyaWQnLCAnaW5mbycsIHNlbGYuX3cpKQotICAgICAgICBkaWN0ID0ge30KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHdvcmRzKSwgMik6Ci0gICAgICAgICAgICBrZXkgPSB3b3Jkc1tpXVsxOl0KLSAgICAgICAgICAgIHZhbHVlID0gd29yZHNbaSsxXQotICAgICAgICAgICAgaWYgc3RyKHZhbHVlKVs6MV0gPT0gJy4nOgotICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fbmFtZXRvd2lkZ2V0KHZhbHVlKQotICAgICAgICAgICAgZGljdFtrZXldID0gdmFsdWUKLSAgICAgICAgcmV0dXJuIGRpY3QKKyAgICAgICAgZCA9IF9zcGxpdGRpY3Qoc2VsZi50aywgc2VsZi50ay5jYWxsKCdncmlkJywgJ2luZm8nLCBzZWxmLl93KSkKKyAgICAgICAgaWYgJ2luJyBpbiBkOgorICAgICAgICAgICAgZFsnaW4nXSA9IHNlbGYubmFtZXRvd2lkZ2V0KGRbJ2luJ10pCisgICAgICAgIHJldHVybiBkCiAgICAgaW5mbyA9IGdyaWRfaW5mbwogICAgIGxvY2F0aW9uID0gZ3JpZF9sb2NhdGlvbiA9IE1pc2MuZ3JpZF9sb2NhdGlvbgogICAgIHByb3BhZ2F0ZSA9IGdyaWRfcHJvcGFnYXRlID0gTWlzYy5ncmlkX3Byb3BhZ2F0ZQpAQCAtMjE5OSw0NSArMjIyOCw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbnZva2UnKQogCi0KLSMgSW5kaWNlczoKLSMgWFhYIEkgZG9uJ3QgbGlrZSB0aGVzZSAtLSB0YWtlIHRoZW0gYXdheQotZGVmIEF0RW5kKCk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdEVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnZW5kJwotCi0KLWRlZiBBdEluc2VydCgqYXJncyk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdEluc2VydCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHMgPSAnaW5zZXJ0JwotICAgIGZvciBhIGluIGFyZ3M6Ci0gICAgICAgIGlmIGE6IHMgPSBzICsgKCcgJyArIGEpCi0gICAgcmV0dXJuIHMKLQotCi1kZWYgQXRTZWxGaXJzdCgpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRTZWxGaXJzdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnc2VsLmZpcnN0JwotCi0KLWRlZiBBdFNlbExhc3QoKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0U2VsTGFzdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnc2VsLmxhc3QnCi0KLQotZGVmIEF0KHgsIHk9Tm9uZSk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIGlmIHkgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuICdAJXInICUgKHgsKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnQCVyLCVyJyAlICh4LCB5KQotCi0KIGNsYXNzIENhbnZhcyhXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiQ2FudmFzIHdpZGdldCB0byBkaXNwbGF5IGdyYXBoaWNhbCBlbGVtZW50cyBsaWtlIGxpbmVzIG9yIHRleHQuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgpAQCAtMjYyNywyMiArMjYxNywxOSBAQAogICAgIGRlZiBhY3RpdmF0ZShzZWxmLCBpbmRleCk6CiAgICAgICAgICIiIkFjdGl2YXRlIGl0ZW0gaWRlbnRpZmllZCBieSBJTkRFWC4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdhY3RpdmF0ZScsIGluZGV4KQotICAgIGRlZiBiYm94KHNlbGYsICphcmdzKToKKyAgICBkZWYgYmJveChzZWxmLCBpbmRleCk6CiAgICAgICAgICIiIlJldHVybiBhIHR1cGxlIG9mIFgxLFkxLFgyLFkyIGNvb3JkaW5hdGVzIGZvciBhIHJlY3RhbmdsZQotICAgICAgICB3aGljaCBlbmNsb3NlcyB0aGUgaXRlbSBpZGVudGlmaWVkIGJ5IGluZGV4IGluIEFSR1MuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAnYmJveCcpICsgYXJncykpIG9yIE5vbmUKKyAgICAgICAgd2hpY2ggZW5jbG9zZXMgdGhlIGl0ZW0gaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gaW5kZXguIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKHNlbGYudGsuY2FsbChzZWxmLl93LCAnYmJveCcsIGluZGV4KSkgb3IgTm9uZQogICAgIGRlZiBjdXJzZWxlY3Rpb24oc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBsaXN0IG9mIGluZGljZXMgb2YgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uIiIiCi0gICAgICAgICMgWFhYIE91Z2h0IHRvIGFwcGx5IHNlbGYuX2dldGludHMoKS4uLgotICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdGxpc3Qoc2VsZi50ay5jYWxsKAotICAgICAgICAgICAgc2VsZi5fdywgJ2N1cnNlbGVjdGlvbicpKQorICAgICAgICAiIiJSZXR1cm4gdGhlIGluZGljZXMgb2YgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKHNlbGYudGsuY2FsbChzZWxmLl93LCAnY3Vyc2VsZWN0aW9uJykpIG9yICgpCiAgICAgZGVmIGRlbGV0ZShzZWxmLCBmaXJzdCwgbGFzdD1Ob25lKToKLSAgICAgICAgIiIiRGVsZXRlIGl0ZW1zIGZyb20gRklSU1QgdG8gTEFTVCAobm90IGluY2x1ZGVkKS4iIiIKKyAgICAgICAgIiIiRGVsZXRlIGl0ZW1zIGZyb20gRklSU1QgdG8gTEFTVCAoaW5jbHVkZWQpLiIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2RlbGV0ZScsIGZpcnN0LCBsYXN0KQogICAgIGRlZiBnZXQoc2VsZiwgZmlyc3QsIGxhc3Q9Tm9uZSk6Ci0gICAgICAgICIiIkdldCBsaXN0IG9mIGl0ZW1zIGZyb20gRklSU1QgdG8gTEFTVCAobm90IGluY2x1ZGVkKS4iIiIKLSAgICAgICAgaWYgbGFzdDoKKyAgICAgICAgIiIiR2V0IGxpc3Qgb2YgaXRlbXMgZnJvbSBGSVJTVCB0byBMQVNUIChpbmNsdWRlZCkuIiIiCisgICAgICAgIGlmIGxhc3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdGxpc3Qoc2VsZi50ay5jYWxsKAogICAgICAgICAgICAgICAgIHNlbGYuX3csICdnZXQnLCBmaXJzdCwgbGFzdCkpCiAgICAgICAgIGVsc2U6CkBAIC0yNjc1LDcgKzI2NjIsNyBAQAogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NlbGVjdGlvbicsICdhbmNob3InLCBpbmRleCkKICAgICBzZWxlY3RfYW5jaG9yID0gc2VsZWN0aW9uX2FuY2hvcgogICAgIGRlZiBzZWxlY3Rpb25fY2xlYXIoc2VsZiwgZmlyc3QsIGxhc3Q9Tm9uZSk6Ci0gICAgICAgICIiIkNsZWFyIHRoZSBzZWxlY3Rpb24gZnJvbSBGSVJTVCB0byBMQVNUIChub3QgaW5jbHVkZWQpLiIiIgorICAgICAgICAiIiJDbGVhciB0aGUgc2VsZWN0aW9uIGZyb20gRklSU1QgdG8gTEFTVCAoaW5jbHVkZWQpLiIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywKICAgICAgICAgICAgICAgICAgJ3NlbGVjdGlvbicsICdjbGVhcicsIGZpcnN0LCBsYXN0KQogICAgIHNlbGVjdF9jbGVhciA9IHNlbGVjdGlvbl9jbGVhcgpAQCAtMjY4NSw3ICsyNjcyLDcgQEAKICAgICAgICAgICAgIHNlbGYuX3csICdzZWxlY3Rpb24nLCAnaW5jbHVkZXMnLCBpbmRleCkpCiAgICAgc2VsZWN0X2luY2x1ZGVzID0gc2VsZWN0aW9uX2luY2x1ZGVzCiAgICAgZGVmIHNlbGVjdGlvbl9zZXQoc2VsZiwgZmlyc3QsIGxhc3Q9Tm9uZSk6Ci0gICAgICAgICIiIlNldCB0aGUgc2VsZWN0aW9uIGZyb20gRklSU1QgdG8gTEFTVCAobm90IGluY2x1ZGVkKSB3aXRob3V0CisgICAgICAgICIiIlNldCB0aGUgc2VsZWN0aW9uIGZyb20gRklSU1QgdG8gTEFTVCAoaW5jbHVkZWQpIHdpdGhvdXQKICAgICAgICAgY2hhbmdpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50cy4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdzZWxlY3Rpb24nLCAnc2V0JywgZmlyc3QsIGxhc3QpCiAgICAgc2VsZWN0X3NldCA9IHNlbGVjdGlvbl9zZXQKQEAgLTI3MTgsNyArMjcwNSwxMSBAQAogICAgICAgICBzZWxlY3Rjb2xvciwgdGFrZWZvY3VzLCB0ZWFyb2ZmLCB0ZWFyb2ZmY29tbWFuZCwgdGl0bGUsIHR5cGUuIiIiCiAgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICdtZW51JywgY25mLCBrdykKICAgICBkZWYgdGtfYmluZEZvclRyYXZlcnNhbChzZWxmKToKLSAgICAgICAgcGFzcyAjIG9ic29sZXRlIHNpbmNlIFRrIDQuMAorICAgICAgICAjIG9ic29sZXRlIHNpbmNlIFRrIDQuMAorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybigndGtfYmluZEZvclRyYXZlcnNhbCgpIGRvZXMgbm90aGluZyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICd3aWxsIGJlIHJlbW92ZWQgaW4gMy42JywKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKICAgICBkZWYgdGtfbWJQb3N0KHNlbGYpOgogICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX21iUG9zdCcsIHNlbGYuX3cpCiAgICAgZGVmIHRrX21iVW5wb3N0KHNlbGYpOgpAQCAtMjk2OCwxMSArMjk1OSwxMSBAQAogCiAgICAgICAgICIiIgogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAndGV4dCcsIGNuZiwga3cpCi0gICAgZGVmIGJib3goc2VsZiwgKmFyZ3MpOgorICAgIGRlZiBiYm94KHNlbGYsIGluZGV4KToKICAgICAgICAgIiIiUmV0dXJuIGEgdHVwbGUgb2YgKHgseSx3aWR0aCxoZWlnaHQpIHdoaWNoIGdpdmVzIHRoZSBib3VuZGluZwotICAgICAgICBib3ggb2YgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBpbmRleCBpbiBBUkdTLiIiIgorICAgICAgICBib3ggb2YgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGludHMoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICdiYm94JykgKyBhcmdzKSkgb3IgTm9uZQorICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnYmJveCcsIGluZGV4KSkgb3IgTm9uZQogICAgIGRlZiB0a190ZXh0U2VsZWN0VG8oc2VsZiwgaW5kZXgpOgogICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX3RleHRTZWxlY3RUbycsIHNlbGYuX3csIGluZGV4KQogICAgIGRlZiB0a190ZXh0QmFja3NwYWNlKHNlbGYpOgpAQCAtMzM2NCw3ICszMzU1LDcgQEAKICAgICAgICAgICAgIG1hc3RlciA9IF9kZWZhdWx0X3Jvb3QKICAgICAgICAgICAgIGlmIG5vdCBtYXN0ZXI6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUb28gZWFybHkgdG8gY3JlYXRlIGltYWdlJykKLSAgICAgICAgc2VsZi50ayA9IG1hc3Rlci50aworICAgICAgICBzZWxmLnRrID0gZ2V0YXR0cihtYXN0ZXIsICd0aycsIG1hc3RlcikKICAgICAgICAgaWYgbm90IG5hbWU6CiAgICAgICAgICAgICBJbWFnZS5fbGFzdF9pZCArPSAxCiAgICAgICAgICAgICBuYW1lID0gInB5aW1hZ2UlciIgJSAoSW1hZ2UuX2xhc3RfaWQsKSAjIHRrIGl0c2VsZiB3b3VsZCB1c2UgaW1hZ2U8eD4KQEAgLTM0MzUsMjAgKzM0MjYsMjAgQEAKICAgICAjIFhYWCBjb3B5IC1mcm9tLCAtdG8sIC4uLj8KICAgICBkZWYgY29weShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgbmV3IFBob3RvSW1hZ2Ugd2l0aCB0aGUgc2FtZSBpbWFnZSBhcyB0aGlzIHdpZGdldC4iIiIKLSAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZSgpCisgICAgICAgIGRlc3RJbWFnZSA9IFBob3RvSW1hZ2UobWFzdGVyPXNlbGYudGspCiAgICAgICAgIHNlbGYudGsuY2FsbChkZXN0SW1hZ2UsICdjb3B5Jywgc2VsZi5uYW1lKQogICAgICAgICByZXR1cm4gZGVzdEltYWdlCiAgICAgZGVmIHpvb20oc2VsZix4LHk9JycpOgogICAgICAgICAiIiJSZXR1cm4gYSBuZXcgUGhvdG9JbWFnZSB3aXRoIHRoZSBzYW1lIGltYWdlIGFzIHRoaXMgd2lkZ2V0CiAgICAgICAgIGJ1dCB6b29tIGl0IHdpdGggWCBhbmQgWS4iIiIKLSAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZSgpCisgICAgICAgIGRlc3RJbWFnZSA9IFBob3RvSW1hZ2UobWFzdGVyPXNlbGYudGspCiAgICAgICAgIGlmIHk9PScnOiB5PXgKICAgICAgICAgc2VsZi50ay5jYWxsKGRlc3RJbWFnZSwgJ2NvcHknLCBzZWxmLm5hbWUsICctem9vbScseCx5KQogICAgICAgICByZXR1cm4gZGVzdEltYWdlCiAgICAgZGVmIHN1YnNhbXBsZShzZWxmLHgseT0nJyk6CiAgICAgICAgICIiIlJldHVybiBhIG5ldyBQaG90b0ltYWdlIGJhc2VkIG9uIHRoZSBzYW1lIGltYWdlIGFzIHRoaXMgd2lkZ2V0CiAgICAgICAgIGJ1dCB1c2Ugb25seSBldmVyeSBYdGggb3IgWXRoIHBpeGVsLiIiIgotICAgICAgICBkZXN0SW1hZ2UgPSBQaG90b0ltYWdlKCkKKyAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZShtYXN0ZXI9c2VsZi50aykKICAgICAgICAgaWYgeT09Jyc6IHk9eAogICAgICAgICBzZWxmLnRrLmNhbGwoZGVzdEltYWdlLCAnY29weScsIHNlbGYubmFtZSwgJy1zdWJzYW1wbGUnLHgseSkKICAgICAgICAgcmV0dXJuIGRlc3RJbWFnZQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weSBiL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkKaW5kZXggM2ZmYjI1Mi4uYTcxYWZiMiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weQorKysgYi9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgICAgZGlyLCBwYXQgPSBzZWxmLmdldF9maWx0ZXIoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5tYXN0ZXIuYmVsbCgpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSBkaXIKQEAgLTIwOSw3ICsyMDksNyBAQAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhkaXIpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwd2QgPSBOb25lCiAgICAgICAgICAgICBpZiBwd2Q6CiAgICAgICAgICAgICAgICAgZGlyID0gb3MucGF0aC5qb2luKHB3ZCwgZGlyKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvZm9udC5weSBiL0xpYi90a2ludGVyL2ZvbnQucHkKaW5kZXggNDkyOTI0MS4uYjk2NjczMiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvZm9udC5weQorKysgYi9MaWIvdGtpbnRlci9mb250LnB5CkBAIC02OSw5ICs2OSwxMCBAQAogICAgICAgICAgICAgICAgICAqKm9wdGlvbnMpOgogICAgICAgICBpZiBub3Qgcm9vdDoKICAgICAgICAgICAgIHJvb3QgPSB0a2ludGVyLl9kZWZhdWx0X3Jvb3QKKyAgICAgICAgdGsgPSBnZXRhdHRyKHJvb3QsICd0aycsIHJvb3QpCiAgICAgICAgIGlmIGZvbnQ6CiAgICAgICAgICAgICAjIGdldCBhY3R1YWwgc2V0dGluZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZm9udAotICAgICAgICAgICAgZm9udCA9IHJvb3QudGsuc3BsaXRsaXN0KHJvb3QudGsuY2FsbCgiZm9udCIsICJhY3R1YWwiLCBmb250KSkKKyAgICAgICAgICAgIGZvbnQgPSB0ay5zcGxpdGxpc3QodGsuY2FsbCgiZm9udCIsICJhY3R1YWwiLCBmb250KSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvbnQgPSBzZWxmLl9zZXQob3B0aW9ucykKICAgICAgICAgaWYgbm90IG5hbWU6CkBAIC04MSwyMCArODIsMTkgQEAKICAgICAgICAgaWYgZXhpc3RzOgogICAgICAgICAgICAgc2VsZi5kZWxldGVfZm9udCA9IEZhbHNlCiAgICAgICAgICAgICAjIGNvbmZpcm0gZm9udCBleGlzdHMKLSAgICAgICAgICAgIGlmIHNlbGYubmFtZSBub3QgaW4gcm9vdC50ay5jYWxsKCJmb250IiwgIm5hbWVzIik6CisgICAgICAgICAgICBpZiBzZWxmLm5hbWUgbm90IGluIHRrLnNwbGl0bGlzdCh0ay5jYWxsKCJmb250IiwgIm5hbWVzIikpOgogICAgICAgICAgICAgICAgIHJhaXNlIHRraW50ZXIuX3RraW50ZXIuVGNsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICJuYW1lZCBmb250ICVzIGRvZXMgbm90IGFscmVhZHkgZXhpc3QiICUgKHNlbGYubmFtZSwpKQogICAgICAgICAgICAgIyBpZiBmb250IGNvbmZpZyBpbmZvIHN1cHBsaWVkLCBhcHBseSBpdAogICAgICAgICAgICAgaWYgZm9udDoKLSAgICAgICAgICAgICAgICByb290LnRrLmNhbGwoImZvbnQiLCAiY29uZmlndXJlIiwgc2VsZi5uYW1lLCAqZm9udCkKKyAgICAgICAgICAgICAgICB0ay5jYWxsKCJmb250IiwgImNvbmZpZ3VyZSIsIHNlbGYubmFtZSwgKmZvbnQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGNyZWF0ZSBuZXcgZm9udCAocmFpc2VzIFRjbEVycm9yIGlmIHRoZSBmb250IGV4aXN0cykKLSAgICAgICAgICAgIHJvb3QudGsuY2FsbCgiZm9udCIsICJjcmVhdGUiLCBzZWxmLm5hbWUsICpmb250KQorICAgICAgICAgICAgdGsuY2FsbCgiZm9udCIsICJjcmVhdGUiLCBzZWxmLm5hbWUsICpmb250KQogICAgICAgICAgICAgc2VsZi5kZWxldGVfZm9udCA9IFRydWUKLSAgICAgICAgIyBiYWNrbGlua3MhCi0gICAgICAgIHNlbGYuX3Jvb3QgID0gcm9vdAotICAgICAgICBzZWxmLl9zcGxpdCA9IHJvb3QudGsuc3BsaXRsaXN0Ci0gICAgICAgIHNlbGYuX2NhbGwgID0gcm9vdC50ay5jYWxsCisgICAgICAgIHNlbGYuX3RrID0gdGsKKyAgICAgICAgc2VsZi5fc3BsaXQgPSB0ay5zcGxpdGxpc3QKKyAgICAgICAgc2VsZi5fY2FsbCAgPSB0ay5jYWxsCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQpAQCAtMTE5LDcgKzExOSw3IEBACiAKICAgICBkZWYgY29weShzZWxmKToKICAgICAgICAgIlJldHVybiBhIGRpc3RpbmN0IGNvcHkgb2YgdGhlIGN1cnJlbnQgZm9udCIKLSAgICAgICAgcmV0dXJuIEZvbnQoc2VsZi5fcm9vdCwgKipzZWxmLmFjdHVhbCgpKQorICAgICAgICByZXR1cm4gRm9udChzZWxmLl90aywgKipzZWxmLmFjdHVhbCgpKQogCiAgICAgZGVmIGFjdHVhbChzZWxmLCBvcHRpb249Tm9uZSwgZGlzcGxheW9mPU5vbmUpOgogICAgICAgICAiUmV0dXJuIGFjdHVhbCBmb250IGF0dHJpYnV0ZXMiCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3J1bnRrdGVzdHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3J1bnRrdGVzdHMucHkKaW5kZXggZTIxZWNhNC4uY2NiMzc1NSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC9ydW50a3Rlc3RzLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvcnVudGt0ZXN0cy5weQpAQCAtNjgsNSArNjgsNCBAQAogICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0LnN1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10KICAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KCpnZXRfdGVzdHMoKSkKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3Qvc3VwcG9ydC5weSBiL0xpYi90a2ludGVyL3Rlc3Qvc3VwcG9ydC5weQppbmRleCBmY2Q5ZmZjLi4wMTc2ODFmIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3N1cHBvcnQucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC9zdXBwb3J0LnB5CkBAIC0xLDc0ICsxLDQ1IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdGtpbnRlcgogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKIAotX3RrX3VuYXZhaWxhYmxlID0gTm9uZQorY2xhc3MgQWJzdHJhY3RUa1Rlc3Q6CiAKLWRlZiBjaGVja190a19hdmFpbGFiaWxpdHkoKToKLSAgICAiIiJDaGVjayB0aGF0IFRrIGlzIGluc3RhbGxlZCBhbmQgYXZhaWxhYmxlLiIiIgotICAgIGdsb2JhbCBfdGtfdW5hdmFpbGFibGUKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMuX29sZF9zdXBwb3J0X2RlZmF1bHRfcm9vdCA9IHRraW50ZXIuX3N1cHBvcnRfZGVmYXVsdF9yb290CisgICAgICAgIGRlc3Ryb3lfZGVmYXVsdF9yb290KCkKKyAgICAgICAgdGtpbnRlci5Ob0RlZmF1bHRSb290KCkKKyAgICAgICAgY2xzLnJvb3QgPSB0a2ludGVyLlRrKCkKKyAgICAgICAgY2xzLndhbnRvYmplY3RzID0gY2xzLnJvb3Qud2FudG9iamVjdHMoKQorICAgICAgICAjIERlLW1heGltaXplIG1haW4gd2luZG93LgorICAgICAgICAjIFNvbWUgd2luZG93IG1hbmFnZXJzIGNhbiBtYXhpbWl6ZSBuZXcgd2luZG93cy4KKyAgICAgICAgY2xzLnJvb3Qud21fc3RhdGUoJ25vcm1hbCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNscy5yb290LndtX2F0dHJpYnV0ZXMoJy16b29tZWQnLCBGYWxzZSkKKyAgICAgICAgZXhjZXB0IHRraW50ZXIuVGNsRXJyb3I6CisgICAgICAgICAgICBwYXNzCiAKLSAgICBpZiBfdGtfdW5hdmFpbGFibGUgaXMgTm9uZToKLSAgICAgICAgX3RrX3VuYXZhaWxhYmxlID0gRmFsc2UKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgIyBUaGUgQXF1YSBUayBpbXBsZW1lbnRhdGlvbnMgb24gT1MgWCBjYW4gYWJvcnQgdGhlIHByb2Nlc3MgaWYKLSAgICAgICAgICAgICMgYmVpbmcgY2FsbGVkIGluIGFuIGVudmlyb25tZW50IHdoZXJlIGEgd2luZG93IHNlcnZlciBjb25uZWN0aW9uCi0gICAgICAgICAgICAjIGNhbm5vdCBiZSBtYWRlLCBmb3IgaW5zdGFuY2Ugd2hlbiBpbnZva2VkIGJ5IGEgYnVpbGRib3Qgb3Igc3NoCi0gICAgICAgICAgICAjIHByb2Nlc3Mgbm90IHJ1bm5pbmcgdW5kZXIgdGhlIHNhbWUgdXNlciBpZCBhcyB0aGUgY3VycmVudCBjb25zb2xlCi0gICAgICAgICAgICAjIHVzZXIuICBUbyBhdm9pZCB0aGF0LCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIHdpbmRvdyBtYW5hZ2VyCi0gICAgICAgICAgICAjIGNvbm5lY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBjZGxsLCBjX2ludCwgcG9pbnRlciwgU3RydWN0dXJlCi0gICAgICAgICAgICBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgY2xzLnJvb3QgPSBOb25lCisgICAgICAgIHRraW50ZXIuX2RlZmF1bHRfcm9vdCA9IE5vbmUKKyAgICAgICAgdGtpbnRlci5fc3VwcG9ydF9kZWZhdWx0X3Jvb3QgPSBjbHMuX29sZF9zdXBwb3J0X2RlZmF1bHRfcm9vdAogCi0gICAgICAgICAgICBhcHBfc2VydmljZXMgPSBjZGxsLkxvYWRMaWJyYXJ5KGZpbmRfbGlicmFyeSgiQXBwbGljYXRpb25TZXJ2aWNlcyIpKQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yb290LmRlaWNvbmlmeSgpCiAKLSAgICAgICAgICAgIGlmIGFwcF9zZXJ2aWNlcy5DR01haW5EaXNwbGF5SUQoKSA9PSAwOgotICAgICAgICAgICAgICAgIF90a191bmF2YWlsYWJsZSA9ICJjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCB3aW5kb3cgbWFuYWdlciIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2xhc3MgUHJvY2Vzc1NlcmlhbE51bWJlcihTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImhpZ2hMb25nT2ZQU04iLCBjX2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibG93TG9uZ09mUFNOIiwgY19pbnQpXQotICAgICAgICAgICAgICAgIHBzbiA9IFByb2Nlc3NTZXJpYWxOdW1iZXIoKQotICAgICAgICAgICAgICAgIHBzbl9wID0gcG9pbnRlcihwc24pCi0gICAgICAgICAgICAgICAgaWYgKCAgKGFwcF9zZXJ2aWNlcy5HZXRDdXJyZW50UHJvY2Vzcyhwc25fcCkgPCAwKSBvcgotICAgICAgICAgICAgICAgICAgICAgIChhcHBfc2VydmljZXMuU2V0RnJvbnRQcm9jZXNzKHBzbl9wKSA8IDApICk6Ci0gICAgICAgICAgICAgICAgICAgIF90a191bmF2YWlsYWJsZSA9ICJjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCBndWkgcHJvY2VzcyIKLSAgICAgICAgZWxzZTogICAjIG5vdCBPUyBYCi0gICAgICAgICAgICBpbXBvcnQgdGtpbnRlcgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRraW50ZXIuQnV0dG9uKCkKLSAgICAgICAgICAgIGV4Y2VwdCB0a2ludGVyLlRjbEVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICAjIGFzc3VtaW5nIHRrIGlzIG5vdCBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICBfdGtfdW5hdmFpbGFibGUgPSAidGsgbm90IGF2YWlsYWJsZTogJXMiICUgbXNnCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiBzZWxmLnJvb3Qud2luZm9fY2hpbGRyZW4oKToKKyAgICAgICAgICAgIHcuZGVzdHJveSgpCisgICAgICAgIHNlbGYucm9vdC53aXRoZHJhdygpCiAKLSAgICBpZiBfdGtfdW5hdmFpbGFibGU6Ci0gICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KF90a191bmF2YWlsYWJsZSkKLSAgICByZXR1cm4KLQotZGVmIGdldF90a19yb290KCk6Ci0gICAgY2hlY2tfdGtfYXZhaWxhYmlsaXR5KCkgICAgICMgcmFpc2UgZXhjZXB0aW9uIGlmIHRrIHVuYXZhaWxhYmxlCi0gICAgdHJ5OgotICAgICAgICByb290ID0gdGtpbnRlci5fZGVmYXVsdF9yb290Ci0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAjIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgZGVmYXVsdCByb290IGluIFRraW50ZXIsIGFsdGhvdWdoCi0gICAgICAgICMgSSBoYXZlbid0IHNlZW4gcGVvcGxlIGRvaW5nIGl0IChidXQgYXBwYXJlbnRseSBzb21lb25lIGRpZCBpdAotICAgICAgICAjIGhlcmUpLgotICAgICAgICByb290ID0gTm9uZQotCi0gICAgaWYgcm9vdCBpcyBOb25lOgotICAgICAgICAjIGNyZWF0ZSBhIG5ldyBtYXN0ZXIgb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeQotICAgICAgICByb290ID0gdGtpbnRlci5UaygpCi0KLSAgICByZXR1cm4gcm9vdAotCi1kZWYgcm9vdF9kZWljb25pZnkoKToKLSAgICByb290ID0gZ2V0X3RrX3Jvb3QoKQotICAgIHJvb3QuZGVpY29uaWZ5KCkKLQotZGVmIHJvb3Rfd2l0aGRyYXcoKToKLSAgICByb290ID0gZ2V0X3RrX3Jvb3QoKQotICAgIHJvb3Qud2l0aGRyYXcoKQotCitkZWYgZGVzdHJveV9kZWZhdWx0X3Jvb3QoKToKKyAgICBpZiBnZXRhdHRyKHRraW50ZXIsICdfZGVmYXVsdF9yb290JywgTm9uZSk6CisgICAgICAgIHRraW50ZXIuX2RlZmF1bHRfcm9vdC51cGRhdGVfaWRsZXRhc2tzKCkKKyAgICAgICAgdGtpbnRlci5fZGVmYXVsdF9yb290LmRlc3Ryb3koKQorICAgICAgICB0a2ludGVyLl9kZWZhdWx0X3Jvb3QgPSBOb25lCiAKIGRlZiBzaW11bGF0ZV9tb3VzZV9jbGljayh3aWRnZXQsIHgsIHkpOgogICAgICIiIkdlbmVyYXRlIHByb3BlciBldmVudHMgdG8gY2xpY2sgYXQgdGhlIHgsIHkgcG9zaXRpb24gKHRyaWVzIHRvIGFjdApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9mb250LnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9mb250LnB5CmluZGV4IGRmZDYzMGIuLjA5Yzk2M2UgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZm9udC5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2ZvbnQucHkKQEAgLTIsMjYgKzIsMjAgQEAKIGltcG9ydCB0a2ludGVyCiBmcm9tIHRraW50ZXIgaW1wb3J0IGZvbnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgcnVuX3VuaXR0ZXN0Ci1pbXBvcnQgdGtpbnRlci50ZXN0LnN1cHBvcnQgYXMgc3VwcG9ydAorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgQWJzdHJhY3RUa1Rlc3QKIAogcmVxdWlyZXMoJ2d1aScpCiAKLWNsYXNzIEZvbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCitjbGFzcyBGb250VGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZm9udF9lcShzZWxmKToKICAgICAgICAgZm9udG5hbWUgPSAiVGtEZWZhdWx0Rm9udCIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IGZvbnQuRm9udChuYW1lPWZvbnRuYW1lLCBleGlzdHM9VHJ1ZSkKKyAgICAgICAgICAgIGYgPSBmb250LkZvbnQocm9vdD1zZWxmLnJvb3QsIG5hbWU9Zm9udG5hbWUsIGV4aXN0cz1UcnVlKQogICAgICAgICBleGNlcHQgdGtpbnRlci5fdGtpbnRlci5UY2xFcnJvcjoKLSAgICAgICAgICAgIGYgPSBmb250LkZvbnQobmFtZT1mb250bmFtZSwgZXhpc3RzPUZhbHNlKQotICAgICAgICBmb250MSA9IGZvbnQubmFtZXRvZm9udChmb250bmFtZSkKLSAgICAgICAgZm9udDIgPSBmb250Lm5hbWV0b2ZvbnQoZm9udG5hbWUpCisgICAgICAgICAgICBmID0gZm9udC5Gb250KHJvb3Q9c2VsZi5yb290LCBuYW1lPWZvbnRuYW1lLCBleGlzdHM9RmFsc2UpCisgICAgICAgIGZvbnQxID0gZm9udC5Gb250KHJvb3Q9c2VsZi5yb290LCBuYW1lPWZvbnRuYW1lLCBleGlzdHM9VHJ1ZSkKKyAgICAgICAgZm9udDIgPSBmb250LkZvbnQocm9vdD1zZWxmLnJvb3QsIG5hbWU9Zm9udG5hbWUsIGV4aXN0cz1UcnVlKQogICAgICAgICBzZWxmLmFzc2VydElzTm90KGZvbnQxLCBmb250MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb250MSwgZm9udDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm9udDEsIGZvbnQxLmNvcHkoKSkKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZ2VvbWV0cnlfbWFuYWdlcnMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2dlb21ldHJ5X21hbmFnZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MmIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2dlb21ldHJ5X21hbmFnZXJzLnB5CkBAIC0wLDAgKzEsOTAwIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQoraW1wb3J0IHRraW50ZXIKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGNsRXJyb3IKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworCitmcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBwaXhlbHNfY29udiwgdGNsX3ZlcnNpb24sIHJlcXVpcmVzX3RjbAorZnJvbSB0a2ludGVyLnRlc3Qud2lkZ2V0X3Rlc3RzIGltcG9ydCBBYnN0cmFjdFdpZGdldFRlc3QKKworcmVxdWlyZXMoJ2d1aScpCisKKworY2xhc3MgUGFja1Rlc3QoQWJzdHJhY3RXaWRnZXRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY3JlYXRlMihzZWxmKToKKyAgICAgICAgcGFjayA9IHRraW50ZXIuVG9wbGV2ZWwoc2VsZi5yb290LCBuYW1lPSdwYWNrJykKKyAgICAgICAgcGFjay53bV9nZW9tZXRyeSgnMzAweDIwMCswKzAnKQorICAgICAgICBwYWNrLndtX21pbnNpemUoMSwgMSkKKyAgICAgICAgYSA9IHRraW50ZXIuRnJhbWUocGFjaywgbmFtZT0nYScsIHdpZHRoPTIwLCBoZWlnaHQ9NDAsIGJnPSdyZWQnKQorICAgICAgICBiID0gdGtpbnRlci5GcmFtZShwYWNrLCBuYW1lPSdiJywgd2lkdGg9NTAsIGhlaWdodD0zMCwgYmc9J2JsdWUnKQorICAgICAgICBjID0gdGtpbnRlci5GcmFtZShwYWNrLCBuYW1lPSdjJywgd2lkdGg9ODAsIGhlaWdodD04MCwgYmc9J2dyZWVuJykKKyAgICAgICAgZCA9IHRraW50ZXIuRnJhbWUocGFjaywgbmFtZT0nZCcsIHdpZHRoPTQwLCBoZWlnaHQ9MzAsIGJnPSd5ZWxsb3cnKQorICAgICAgICByZXR1cm4gcGFjaywgYSwgYiwgYywgZAorCisgICAgZGVmIHRlc3RfcGFja19jb25maWd1cmVfYWZ0ZXIoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICd3aW5kb3cgIiVzIiBpc25cJ3QgcGFja2VkJyAlIGIpOgorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShhZnRlcj1iKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgd2luZG93IHBhdGggbmFtZSAiLmZvbyInKToKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoYWZ0ZXI9Jy5mb28nKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGIucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgYy5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBkLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYSwgYiwgYywgZF0pCisgICAgICAgIGEucGFja19jb25maWd1cmUoYWZ0ZXI9YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFtiLCBhLCBjLCBkXSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShhZnRlcj1hKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2IsIGEsIGMsIGRdKQorCisgICAgZGVmIHRlc3RfcGFja19jb25maWd1cmVfYW5jaG9yKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZGVmIGNoZWNrKGFuY2hvciwgZ2VvbSk6CisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcsIGlwYWR4PTUsIHBhZHg9MTAsIGlwYWR5PTE1LCBwYWR5PTIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmQ9VHJ1ZSwgYW5jaG9yPWFuY2hvcikKKyAgICAgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLndpbmZvX2dlb21ldHJ5KCksIGdlb20pCisgICAgICAgIGNoZWNrKCduJywgJzMweDcwKzEzNSsyMCcpCisgICAgICAgIGNoZWNrKCduZScsICczMHg3MCsyNjArMjAnKQorICAgICAgICBjaGVjaygnZScsICczMHg3MCsyNjArNjUnKQorICAgICAgICBjaGVjaygnc2UnLCAnMzB4NzArMjYwKzExMCcpCisgICAgICAgIGNoZWNrKCdzJywgJzMweDcwKzEzNSsxMTAnKQorICAgICAgICBjaGVjaygnc3cnLCAnMzB4NzArMTArMTEwJykKKyAgICAgICAgY2hlY2soJ3cnLCAnMzB4NzArMTArNjUnKQorICAgICAgICBjaGVjaygnbncnLCAnMzB4NzArMTArMjAnKQorICAgICAgICBjaGVjaygnY2VudGVyJywgJzMweDcwKzEzNSs2NScpCisKKyAgICBkZWYgdGVzdF9wYWNrX2NvbmZpZ3VyZV9iZWZvcmUoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICd3aW5kb3cgIiVzIiBpc25cJ3QgcGFja2VkJyAlIGIpOgorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShiZWZvcmU9YikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHdpbmRvdyBwYXRoIG5hbWUgIi5mb28iJyk6CisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKGJlZm9yZT0nLmZvbycpCisgICAgICAgIGEucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBjLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGQucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFthLCBiLCBjLCBkXSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShiZWZvcmU9ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFtiLCBjLCBhLCBkXSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShiZWZvcmU9YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFtiLCBjLCBhLCBkXSkKKworICAgIGRlZiB0ZXN0X3BhY2tfY29uZmlndXJlX2V4cGFuZChzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGRlZiBjaGVjaygqZ2VvbXMpOgorICAgICAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbXNbMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbXNbMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbXNbM10pCisgICAgICAgIGEucGFja19jb25maWd1cmUoc2lkZT0nbGVmdCcpCisgICAgICAgIGIucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgYy5wYWNrX2NvbmZpZ3VyZShzaWRlPSdyaWdodCcpCisgICAgICAgIGQucGFja19jb25maWd1cmUoc2lkZT0nYm90dG9tJykKKyAgICAgICAgY2hlY2soJzIweDQwKzArODAnLCAnNTB4MzArMTM1KzAnLCAnODB4ODArMjIwKzc1JywgJzQweDMwKzEwMCsxNzAnKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKHNpZGU9J2xlZnQnLCBleHBhbmQ9J3llcycpCisgICAgICAgIGIucGFja19jb25maWd1cmUoc2lkZT0ndG9wJywgZXhwYW5kPSdvbicpCisgICAgICAgIGMucGFja19jb25maWd1cmUoc2lkZT0ncmlnaHQnLCBleHBhbmQ9VHJ1ZSkKKyAgICAgICAgZC5wYWNrX2NvbmZpZ3VyZShzaWRlPSdib3R0b20nLCBleHBhbmQ9MSkKKyAgICAgICAgY2hlY2soJzIweDQwKzQwKzgwJywgJzUweDMwKzE3NSszNScsICc4MHg4MCsxODArMTEwJywgJzQweDMwKzEwMCsxMzUnKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKHNpZGU9J2xlZnQnLCBleHBhbmQ9J3llcycsIGZpbGw9J2JvdGgnKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcsIGV4cGFuZD0nb24nLCBmaWxsPSdib3RoJykKKyAgICAgICAgYy5wYWNrX2NvbmZpZ3VyZShzaWRlPSdyaWdodCcsIGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKKyAgICAgICAgZC5wYWNrX2NvbmZpZ3VyZShzaWRlPSdib3R0b20nLCBleHBhbmQ9MSwgZmlsbD0nYm90aCcpCisgICAgICAgIGNoZWNrKCcxMDB4MjAwKzArMCcsICcyMDB4MTAwKzEwMCswJywgJzE2MHgxMDArMTQwKzEwMCcsICc0MHgxMDArMTAwKzEwMCcpCisKKyAgICBkZWYgdGVzdF9wYWNrX2NvbmZpZ3VyZV9pbihzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGEucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBjLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGQucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShpbl89cGFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFtiLCBjLCBkLCBhXSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShpbl89YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFtiLCBjLCBkXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBhY2tfc2xhdmVzKCksIFthXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhblwndCBwYWNrICVzIGluc2lkZSBpdHNlbGYnICUgKGEsKSk6CisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKGluXz1hKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgd2luZG93IHBhdGggbmFtZSAiLmZvbyInKToKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoaW5fPScuZm9vJykKKworICAgIGRlZiB0ZXN0X3BhY2tfY29uZmlndXJlX3BhZHhfaXBhZHhfZmlsbChzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGRlZiBjaGVjayhnZW9tMSwgZ2VvbTIsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGEucGFja19mb3JnZXQoKQorICAgICAgICAgICAgYi5wYWNrX2ZvcmdldCgpCisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKCoqa3dhcmdzKQorICAgICAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShleHBhbmQ9VHJ1ZSwgZmlsbD0nYm90aCcpCisgICAgICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS53aW5mb19nZW9tZXRyeSgpLCBnZW9tMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi53aW5mb19nZW9tZXRyeSgpLCBnZW9tMikKKyAgICAgICAgY2hlY2soJzIweDQwKzI2MCs4MCcsICcyNDB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgcGFkeD0yMCkKKyAgICAgICAgY2hlY2soJzIweDQwKzI1MCs4MCcsICcyNDB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgcGFkeD0oMTAsIDMwKSkKKyAgICAgICAgY2hlY2soJzYweDQwKzI0MCs4MCcsICcyNDB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgaXBhZHg9MjApCisgICAgICAgIGNoZWNrKCczMHg0MCsyNjArODAnLCAnMjUweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIGlwYWR4PTUsIHBhZHg9MTApCisgICAgICAgIGNoZWNrKCcyMHg0MCsyNjArODAnLCAnMjQweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIHBhZHg9MjAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjB4NDArMjQ5KzgwJywgJzI0MHgyMDArMCswJywKKyAgICAgICAgICAgICAgc2lkZT0ncmlnaHQnLCBwYWR4PSg5LCAzMSksIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnNjB4NDArMjQwKzgwJywgJzI0MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBpcGFkeD0yMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCczMHg0MCsyNjArODAnLCAnMjUweDIwMCswKzAnLAorICAgICAgICAgICAgICBzaWRlPSdyaWdodCcsIGlwYWR4PTUsIHBhZHg9MTAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMzB4NDArMjU1KzgwJywgJzI1MHgyMDArMCswJywKKyAgICAgICAgICAgICAgc2lkZT0ncmlnaHQnLCBpcGFkeD01LCBwYWR4PSg1LCAxNSksIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjB4NDArMTQwKzAnLCAnMzAweDE2MCswKzQwJywgc2lkZT0ndG9wJywgcGFkeD0yMCkKKyAgICAgICAgY2hlY2soJzIweDQwKzEyMCswJywgJzMwMHgxNjArMCs0MCcsIHNpZGU9J3RvcCcsIHBhZHg9KDAsIDQwKSkKKyAgICAgICAgY2hlY2soJzYweDQwKzEyMCswJywgJzMwMHgxNjArMCs0MCcsIHNpZGU9J3RvcCcsIGlwYWR4PTIwKQorICAgICAgICBjaGVjaygnMzB4NDArMTM1KzAnLCAnMzAweDE2MCswKzQwJywgc2lkZT0ndG9wJywgaXBhZHg9NSwgcGFkeD0xMCkKKyAgICAgICAgY2hlY2soJzMweDQwKzEzMCswJywgJzMwMHgxNjArMCs0MCcsIHNpZGU9J3RvcCcsIGlwYWR4PTUsIHBhZHg9KDUsIDE1KSkKKyAgICAgICAgY2hlY2soJzI2MHg0MCsyMCswJywgJzMwMHgxNjArMCs0MCcsIHNpZGU9J3RvcCcsIHBhZHg9MjAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjYweDQwKzI1KzAnLCAnMzAweDE2MCswKzQwJywKKyAgICAgICAgICAgICAgc2lkZT0ndG9wJywgcGFkeD0oMjUsIDE1KSwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCczMDB4NDArMCswJywgJzMwMHgxNjArMCs0MCcsIHNpZGU9J3RvcCcsIGlwYWR4PTIwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzI4MHg0MCsxMCswJywgJzMwMHgxNjArMCs0MCcsCisgICAgICAgICAgICAgIHNpZGU9J3RvcCcsIGlwYWR4PTUsIHBhZHg9MTAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjgweDQwKzUrMCcsICczMDB4MTYwKzArNDAnLAorICAgICAgICAgICAgICBzaWRlPSd0b3AnLCBpcGFkeD01LCBwYWR4PSg1LCAxNSksIGZpbGw9J3gnKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKHBhZHg9JzFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnBhY2tfaW5mbygpWydwYWR4J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyKHBhY2sud2luZm9fcGl4ZWxzKCcxYycpKSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShpcGFkeD0nMWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucGFja19pbmZvKClbJ2lwYWR4J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyKHBhY2sud2luZm9fcGl4ZWxzKCcxYycpKSkKKworICAgIGRlZiB0ZXN0X3BhY2tfY29uZmlndXJlX3BhZHlfaXBhZHlfZmlsbChzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGRlZiBjaGVjayhnZW9tMSwgZ2VvbTIsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGEucGFja19mb3JnZXQoKQorICAgICAgICAgICAgYi5wYWNrX2ZvcmdldCgpCisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKCoqa3dhcmdzKQorICAgICAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShleHBhbmQ9VHJ1ZSwgZmlsbD0nYm90aCcpCisgICAgICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS53aW5mb19nZW9tZXRyeSgpLCBnZW9tMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi53aW5mb19nZW9tZXRyeSgpLCBnZW9tMikKKyAgICAgICAgY2hlY2soJzIweDQwKzI4MCs4MCcsICcyODB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgcGFkeT0yMCkKKyAgICAgICAgY2hlY2soJzIweDQwKzI4MCs3MCcsICcyODB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgcGFkeT0oMTAsIDMwKSkKKyAgICAgICAgY2hlY2soJzIweDgwKzI4MCs2MCcsICcyODB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgaXBhZHk9MjApCisgICAgICAgIGNoZWNrKCcyMHg1MCsyODArNzUnLCAnMjgweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIGlwYWR5PTUsIHBhZHk9MTApCisgICAgICAgIGNoZWNrKCcyMHg0MCsyODArODAnLCAnMjgweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIHBhZHk9MjAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjB4NDArMjgwKzY5JywgJzI4MHgyMDArMCswJywKKyAgICAgICAgICAgICAgc2lkZT0ncmlnaHQnLCBwYWR5PSg5LCAzMSksIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjB4ODArMjgwKzYwJywgJzI4MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBpcGFkeT0yMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyMHg1MCsyODArNzUnLCAnMjgweDIwMCswKzAnLAorICAgICAgICAgICAgICBzaWRlPSdyaWdodCcsIGlwYWR5PTUsIHBhZHk9MTAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjB4NTArMjgwKzcwJywgJzI4MHgyMDArMCswJywKKyAgICAgICAgICAgICAgc2lkZT0ncmlnaHQnLCBpcGFkeT01LCBwYWR5PSg1LCAxNSksIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjB4NDArMTQwKzIwJywgJzMwMHgxMjArMCs4MCcsIHNpZGU9J3RvcCcsIHBhZHk9MjApCisgICAgICAgIGNoZWNrKCcyMHg0MCsxNDArMCcsICczMDB4MTIwKzArODAnLCBzaWRlPSd0b3AnLCBwYWR5PSgwLCA0MCkpCisgICAgICAgIGNoZWNrKCcyMHg4MCsxNDArMCcsICczMDB4MTIwKzArODAnLCBzaWRlPSd0b3AnLCBpcGFkeT0yMCkKKyAgICAgICAgY2hlY2soJzIweDUwKzE0MCsxMCcsICczMDB4MTMwKzArNzAnLCBzaWRlPSd0b3AnLCBpcGFkeT01LCBwYWR5PTEwKQorICAgICAgICBjaGVjaygnMjB4NTArMTQwKzUnLCAnMzAweDEzMCswKzcwJywgc2lkZT0ndG9wJywgaXBhZHk9NSwgcGFkeT0oNSwgMTUpKQorICAgICAgICBjaGVjaygnMzAweDQwKzArMjAnLCAnMzAweDEyMCswKzgwJywgc2lkZT0ndG9wJywgcGFkeT0yMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCczMDB4NDArMCsyNScsICczMDB4MTIwKzArODAnLAorICAgICAgICAgICAgICBzaWRlPSd0b3AnLCBwYWR5PSgyNSwgMTUpLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzMwMHg4MCswKzAnLCAnMzAweDEyMCswKzgwJywgc2lkZT0ndG9wJywgaXBhZHk9MjAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMzAweDUwKzArMTAnLCAnMzAweDEzMCswKzcwJywKKyAgICAgICAgICAgICAgc2lkZT0ndG9wJywgaXBhZHk9NSwgcGFkeT0xMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCczMDB4NTArMCs1JywgJzMwMHgxMzArMCs3MCcsCisgICAgICAgICAgICAgIHNpZGU9J3RvcCcsIGlwYWR5PTUsIHBhZHk9KDUsIDE1KSwgZmlsbD0neCcpCisgICAgICAgIGEucGFja19jb25maWd1cmUocGFkeT0nMWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucGFja19pbmZvKClbJ3BhZHknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHIocGFjay53aW5mb19waXhlbHMoJzFjJykpKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKGlwYWR5PScxYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5wYWNrX2luZm8oKVsnaXBhZHknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHIocGFjay53aW5mb19waXhlbHMoJzFjJykpKQorCisgICAgZGVmIHRlc3RfcGFja19jb25maWd1cmVfc2lkZShzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGRlZiBjaGVjayhzaWRlLCBnZW9tMSwgZ2VvbTIpOgorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShzaWRlPXNpZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucGFja19pbmZvKClbJ3NpZGUnXSwgc2lkZSkKKyAgICAgICAgICAgIGIucGFja19jb25maWd1cmUoZXhwYW5kPVRydWUsIGZpbGw9J2JvdGgnKQorICAgICAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbTIpCisgICAgICAgIGNoZWNrKCd0b3AnLCAnMjB4NDArMTQwKzAnLCAnMzAweDE2MCswKzQwJykKKyAgICAgICAgY2hlY2soJ2JvdHRvbScsICcyMHg0MCsxNDArMTYwJywgJzMwMHgxNjArMCswJykKKyAgICAgICAgY2hlY2soJ2xlZnQnLCAnMjB4NDArMCs4MCcsICcyODB4MjAwKzIwKzAnKQorICAgICAgICBjaGVjaygncmlnaHQnLCAnMjB4NDArMjgwKzgwJywgJzI4MHgyMDArMCswJykKKworICAgIGRlZiB0ZXN0X3BhY2tfZm9yZ2V0KHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZSgpCisgICAgICAgIGIucGFja19jb25maWd1cmUoKQorICAgICAgICBjLnBhY2tfY29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFthLCBiLCBjXSkKKyAgICAgICAgYi5wYWNrX2ZvcmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYSwgY10pCisgICAgICAgIGIucGFja19mb3JnZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2EsIGNdKQorICAgICAgICBkLnBhY2tfZm9yZ2V0KCkKKworICAgIGRlZiB0ZXN0X3BhY2tfaW5mbyhzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ3dpbmRvdyAiJXMiIGlzblwndCBwYWNrZWQnICUgYSk6CisgICAgICAgICAgICBhLnBhY2tfaW5mbygpCisgICAgICAgIGEucGFja19jb25maWd1cmUoKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKHNpZGU9J3JpZ2h0JywgaW5fPWEsIGFuY2hvcj0ncycsIGV4cGFuZD1UcnVlLCBmaWxsPSd4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkeD01LCBwYWR4PTEwLCBpcGFkeT0yLCBwYWR5PSg1LCAxNSkpCisgICAgICAgIGluZm8gPSBhLnBhY2tfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2FuY2hvciddLCAnY2VudGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydleHBhbmQnXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2ZpbGwnXSwgJ25vbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2luJ10sIHBhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snaXBhZHgnXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2lwYWR5J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR4J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR5J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydzaWRlJ10sICd0b3AnKQorICAgICAgICBpbmZvID0gYi5wYWNrX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW5mbywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydhbmNob3InXSwgJ3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2V4cGFuZCddLCBzZWxmLl9zdHIoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snZmlsbCddLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snaW4nXSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydpcGFkeCddLCBzZWxmLl9zdHIoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snaXBhZHknXSwgc2VsZi5fc3RyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHgnXSwgc2VsZi5fc3RyKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR5J10sIHNlbGYuX3N0cigoNSwgMTUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydzaWRlJ10sICdyaWdodCcpCisKKyAgICBkZWYgdGVzdF9wYWNrX3Byb3BhZ2F0ZShzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHBhY2suY29uZmlndXJlKHdpZHRoPTMwMCwgaGVpZ2h0PTIwMCkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZSgpCisgICAgICAgIHBhY2sucGFja19wcm9wYWdhdGUoRmFsc2UpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sud2luZm9fcmVxd2lkdGgoKSwgMzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sud2luZm9fcmVxaGVpZ2h0KCksIDIwMCkKKyAgICAgICAgcGFjay5wYWNrX3Byb3BhZ2F0ZShUcnVlKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLndpbmZvX3JlcXdpZHRoKCksIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sud2luZm9fcmVxaGVpZ2h0KCksIDQwKQorCisgICAgZGVmIHRlc3RfcGFja19zbGF2ZXMoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW10pCisgICAgICAgIGEucGFja19jb25maWd1cmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2FdKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFthLCBiXSkKKworCitjbGFzcyBQbGFjZVRlc3QoQWJzdHJhY3RXaWRnZXRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY3JlYXRlMihzZWxmKToKKyAgICAgICAgdCA9IHRraW50ZXIuVG9wbGV2ZWwoc2VsZi5yb290LCB3aWR0aD0zMDAsIGhlaWdodD0yMDAsIGJkPTApCisgICAgICAgIHQud21fZ2VvbWV0cnkoJzMwMHgyMDArMCswJykKKyAgICAgICAgZiA9IHRraW50ZXIuRnJhbWUodCwgd2lkdGg9MTU0LCBoZWlnaHQ9ODQsIGJkPTIsIHJlbGllZj0ncmFpc2VkJykKKyAgICAgICAgZi5wbGFjZV9jb25maWd1cmUoeD00OCwgeT0zOCkKKyAgICAgICAgZjIgPSB0a2ludGVyLkZyYW1lKHQsIHdpZHRoPTMwLCBoZWlnaHQ9NjAsIGJkPTIsIHJlbGllZj0ncmFpc2VkJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHJldHVybiB0LCBmLCBmMgorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX2luKHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9fbWFuYWdlcigpLCAnJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAiY2FuJ3QgcGxhY2UgJXMgcmVsYXRpdmUgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIml0c2VsZiIgJSByZS5lc2NhcGUoc3RyKGYyKSkpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mMikKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb19tYW5hZ2VyKCksICcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgd2luZG93IHBhdGggbmFtZScpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz0nc3BhbScpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb19tYW5hZ2VyKCksICdwbGFjZScpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfeChzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWyd4J10sICcwJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feCgpLCA1MCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHg9MTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsneCddLCAnMTAwJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feCgpLCAxNTApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZSh4PS0xMCwgcmVseD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsneCddLCAnLTEwJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feCgpLCAxOTApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgInNwYW0iJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIHg9J3NwYW0nKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX3koc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsneSddLCAnMCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3koKSwgNDApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZSh5PTUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsneSddLCAnNTAnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb195KCksIDkwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoeT0tMTAsIHJlbHk9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3knXSwgJy0xMCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3koKSwgMTEwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJzcGFtIicpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCB5PSdzcGFtJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV9yZWx4KHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3JlbHgnXSwgJzAnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb194KCksIDUwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUocmVseD0wLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWydyZWx4J10sICcwLjUnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb194KCksIDEyNSkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHJlbHg9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3JlbHgnXSwgJzEnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb194KCksIDIwMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgZmxvYXRpbmctcG9pbnQgbnVtYmVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgZ290ICJzcGFtIicpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCByZWx4PSdzcGFtJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV9yZWx5KHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3JlbHknXSwgJzAnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb195KCksIDQwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUocmVseT0wLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWydyZWx5J10sICcwLjUnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb195KCksIDgwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUocmVseT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsncmVseSddLCAnMScpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3koKSwgMTIwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBmbG9hdGluZy1wb2ludCBudW1iZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1dCBnb3QgInNwYW0iJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIHJlbHk9J3NwYW0nKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX2FuY2hvcihzZWxmKToKKyAgICAgICAgZiA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgYW5jaG9yICJqIicpOgorICAgICAgICAgICAgZi5wbGFjZV9jb25maWd1cmUoYW5jaG9yPSdqJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYW1iaWd1b3VzIGFuY2hvciAiIicpOgorICAgICAgICAgICAgZi5wbGFjZV9jb25maWd1cmUoYW5jaG9yPScnKQorICAgICAgICBmb3IgdmFsdWUgaW4gJ24nLCAnbmUnLCAnZScsICdzZScsICdzJywgJ3N3JywgJ3cnLCAnbncnLCAnY2VudGVyJzoKKyAgICAgICAgICAgIGYucGxhY2VfY29uZmlndXJlKGFuY2hvcj12YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wbGFjZV9pbmZvKClbJ2FuY2hvciddLCB2YWx1ZSkKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV93aWR0aChzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIHdpZHRoPTEyMCkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9fd2lkdGgoKSwgMTIwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUod2lkdGg9JycpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3dpZHRoKCksIDMwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJhYmNkIicpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHdpZHRoPSdhYmNkJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV9oZWlnaHQoc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCBoZWlnaHQ9MTIwKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb19oZWlnaHQoKSwgMTIwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaGVpZ2h0PScnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb19oZWlnaHQoKSwgNjApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImFiY2QiJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaGVpZ2h0PSdhYmNkJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV9yZWx3aWR0aChzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIHJlbHdpZHRoPTAuNSkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9fd2lkdGgoKSwgNzUpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShyZWx3aWR0aD0nJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9fd2lkdGgoKSwgMzApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGZsb2F0aW5nLXBvaW50IG51bWJlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IGdvdCAiYWJjZCInKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShyZWx3aWR0aD0nYWJjZCcpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfcmVsaGVpZ2h0KHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZiwgcmVsaGVpZ2h0PTAuNSkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9faGVpZ2h0KCksIDQwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUocmVsaGVpZ2h0PScnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb19oZWlnaHQoKSwgNjApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGZsb2F0aW5nLXBvaW50IG51bWJlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IGdvdCAiYWJjZCInKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShyZWxoZWlnaHQ9J2FiY2QnKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX2JvcmRlcm1vZGUoc2VsZik6CisgICAgICAgIGYgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIGJvcmRlcm1vZGUgImoiJyk6CisgICAgICAgICAgICBmLnBsYWNlX2NvbmZpZ3VyZShib3JkZXJtb2RlPSdqJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYW1iaWd1b3VzIGJvcmRlcm1vZGUgIiInKToKKyAgICAgICAgICAgIGYucGxhY2VfY29uZmlndXJlKGJvcmRlcm1vZGU9JycpCisgICAgICAgIGZvciB2YWx1ZSBpbiAnaW5zaWRlJywgJ291dHNpZGUnLCAnaWdub3JlJzoKKyAgICAgICAgICAgIGYucGxhY2VfY29uZmlndXJlKGJvcmRlcm1vZGU9dmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGxhY2VfaW5mbygpWydib3JkZXJtb2RlJ10sIHZhbHVlKQorCisgICAgZGVmIHRlc3RfcGxhY2VfZm9yZ2V0KHNlbGYpOgorICAgICAgICBmb28gPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCkKKyAgICAgICAgZm9vLnBsYWNlX2NvbmZpZ3VyZSh3aWR0aD01MCwgaGVpZ2h0PTUwKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgZm9vLnBsYWNlX2ZvcmdldCgpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZvby53aW5mb19pc21hcHBlZCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBmb28ucGxhY2VfZm9yZ2V0KDApCisKKyAgICBkZWYgdGVzdF9wbGFjZV9pbmZvKHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZiwgeD0xLCB5PTIsIHdpZHRoPTMsIGhlaWdodD00LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVseD0wLjEsIHJlbHk9MC4yLCByZWx3aWR0aD0wLjMsIHJlbGhlaWdodD0wLjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3I9J3NlJywgYm9yZGVybW9kZT0nb3V0c2lkZScpCisgICAgICAgIGluZm8gPSBmMi5wbGFjZV9pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm8sIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sneCddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sneSddLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snd2lkdGgnXSwgJzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2hlaWdodCddLCAnNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncmVseCddLCAnMC4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyZWx5J10sICcwLjInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3JlbHdpZHRoJ10sICcwLjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3JlbGhlaWdodCddLCAnMC40JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydhbmNob3InXSwgJ3NlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydib3JkZXJtb2RlJ10sICdvdXRzaWRlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWyd4J10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWyd4J10sICcxJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjIucGxhY2VfaW5mbygwKQorCisgICAgZGVmIHRlc3RfcGxhY2Vfc2xhdmVzKHNlbGYpOgorICAgICAgICBmb28gPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCkKKyAgICAgICAgYmFyID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnBsYWNlX3NsYXZlcygpLCBbXSkKKyAgICAgICAgYmFyLnBsYWNlX2NvbmZpZ3VyZShpbl89Zm9vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5wbGFjZV9zbGF2ZXMoKSwgW2Jhcl0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGZvby5wbGFjZV9zbGF2ZXMoMCkKKworCitjbGFzcyBHcmlkVGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgY29scywgcm93cyA9IHNlbGYucm9vdC5ncmlkX3NpemUoKQorICAgICAgICBmb3IgaSBpbiByYW5nZShjb2xzICsgMSk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoaSwgd2VpZ2h0PTAsIG1pbnNpemU9MCwgcGFkPTAsIHVuaWZvcm09JycpCisgICAgICAgIGZvciBpIGluIHJhbmdlKHJvd3MgKyAxKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZShpLCB3ZWlnaHQ9MCwgbWluc2l6ZT0wLCBwYWQ9MCwgdW5pZm9ybT0nJykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfcHJvcGFnYXRlKDEpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2FuY2hvcignbncnKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlKHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKCksIHt9KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydpbiddLCBzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnY29sdW1uJ10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydyb3cnXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHsnY29sdW1uJzogMX0sIHJvdz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2NvbHVtbiddLCBzZWxmLl9zdHIoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncm93J10sIHNlbGYuX3N0cigyKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX2NvbHVtbihzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIGNvbHVtbiB2YWx1ZSAiLTEiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk6CisgICAgICAgICAgICBiLmdyaWRfY29uZmlndXJlKGNvbHVtbj0tMSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShjb2x1bW49MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydjb2x1bW4nXSwgc2VsZi5fc3RyKDIpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfY29sdW1uc3BhbihzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIGNvbHVtbnNwYW4gdmFsdWUgIjAiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKToKKyAgICAgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoY29sdW1uc3Bhbj0wKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGNvbHVtbnNwYW49MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydjb2x1bW5zcGFuJ10sIHNlbGYuX3N0cigyKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX2luKHNlbGYpOgorICAgICAgICBmID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QpCisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKSwge30pCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2luJ10sIHNlbGYucm9vdCkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShpbl89ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydpbiddLCBmKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHsnaW4nOiBzZWxmLnJvb3R9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2luJ10sIHNlbGYucm9vdCkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX2lwYWR4KHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgaXBhZHggdmFsdWUgIi0xIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgcG9zaXRpdmUgc2NyZWVuIGRpc3RhbmNlJyk6CisgICAgICAgICAgICBiLmdyaWRfY29uZmlndXJlKGlwYWR4PS0xKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGlwYWR4PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnaXBhZHgnXSwgc2VsZi5fc3RyKDEpKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGlwYWR4PScuNWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2lwYWR4J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyKHJvdW5kKHBpeGVsc19jb252KCcuNWMnKSAqIHNlbGYuc2NhbGluZykpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfaXBhZHkoc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBpcGFkeSB2YWx1ZSAiLTEiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBwb3NpdGl2ZSBzY3JlZW4gZGlzdGFuY2UnKToKKyAgICAgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoaXBhZHk9LTEpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoaXBhZHk9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydpcGFkeSddLCBzZWxmLl9zdHIoMSkpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoaXBhZHk9Jy41YycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnaXBhZHknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHIocm91bmQocGl4ZWxzX2NvbnYoJy41YycpICogc2VsZi5zY2FsaW5nKSkpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9wYWR4KHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgcGFkIHZhbHVlICItMSI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIHBvc2l0aXZlIHNjcmVlbiBkaXN0YW5jZScpOgorICAgICAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShwYWR4PS0xKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHBhZHg9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydwYWR4J10sIHNlbGYuX3N0cigxKSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShwYWR4PSgxMCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncGFkeCddLCBzZWxmLl9zdHIoKDEwLCA1KSkpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocGFkeD0nLjVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydwYWR4J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyKHJvdW5kKHBpeGVsc19jb252KCcuNWMnKSAqIHNlbGYuc2NhbGluZykpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfcGFkeShzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHBhZCB2YWx1ZSAiLTEiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBwb3NpdGl2ZSBzY3JlZW4gZGlzdGFuY2UnKToKKyAgICAgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocGFkeT0tMSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShwYWR5PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncGFkeSddLCBzZWxmLl9zdHIoMSkpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocGFkeT0oMTAsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3BhZHknXSwgc2VsZi5fc3RyKCgxMCwgNSkpKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHBhZHk9Jy41YycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncGFkeSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cihyb3VuZChwaXhlbHNfY29udignLjVjJykgKiBzZWxmLnNjYWxpbmcpKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX3JvdyhzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIChyb3d8Z3JpZCkgdmFsdWUgIi0xIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpOgorICAgICAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3c9LTEpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93PTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncm93J10sIHNlbGYuX3N0cigyKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX3Jvd25zcGFuKHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgcm93c3BhbiB2YWx1ZSAiMCI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpOgorICAgICAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3dzcGFuPTApCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93c3Bhbj0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3Jvd3NwYW4nXSwgc2VsZi5fc3RyKDIpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfc3RpY2t5KHNlbGYpOgorICAgICAgICBmID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QsIGJnPSdyZWQnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc3RpY2t5bmVzcyB2YWx1ZSAiZ2x1ZSInKToKKyAgICAgICAgICAgIGYuZ3JpZF9jb25maWd1cmUoc3RpY2t5PSdnbHVlJykKKyAgICAgICAgZi5ncmlkX2NvbmZpZ3VyZShzdGlja3k9J25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdyaWRfaW5mbygpWydzdGlja3knXSwgJ25lJykKKyAgICAgICAgZi5ncmlkX2NvbmZpZ3VyZShzdGlja3k9J24scyxlLHcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ3JpZF9pbmZvKClbJ3N0aWNreSddLCAnbmVzdycpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbHVtbmNvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydtaW5zaXplJzogMCwgJ3BhZCc6IDAsICd1bmlmb3JtJzogTm9uZSwgJ3dlaWdodCc6IDB9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgb3B0aW9uICItZm9vIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsICdmb28nKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoKDAsIDMpLCB3ZWlnaHQ9MikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3Qgc3BlY2lmeSBhIHNpbmdsZSBlbGVtZW50IG9uIHJldHJpZXZhbCcpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKCgwLCAzKSkKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShjb2x1bW49MCwgcm93PTApCisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgnYWxsJywgd2VpZ2h0PTMpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBpbnRlZ2VyIGJ1dCBnb3QgImFsbCInKToKKyAgICAgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoJ2FsbCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCAnd2VpZ2h0JyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDMsICd3ZWlnaHQnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMjY1LCAnd2VpZ2h0JyksIDApCisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZShiLCB3ZWlnaHQ9NCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsICd3ZWlnaHQnKSwgNCkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29sdW1uY29uZmlndXJlX21pbnNpemUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImZvbyInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCBtaW5zaXplPSdmb28nKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgbWluc2l6ZT0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgJ21pbnNpemUnKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDApWydtaW5zaXplJ10sIDEwKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb2x1bW5jb25maWd1cmVfd2VpZ2h0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBpbnRlZ2VyIGJ1dCBnb3QgImJhZCInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9J2JhZCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2ludmFsaWQgYXJnICItd2VpZ2h0IjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBub24tbmVnYXRpdmUnKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9LTMpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgJ3dlaWdodCcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwKVsnd2VpZ2h0J10sIDMpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbHVtbmNvbmZpZ3VyZV9wYWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImZvbyInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCBwYWQ9J2ZvbycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2ludmFsaWQgYXJnICItcGFkIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBub24tbmVnYXRpdmUnKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCBwYWQ9LTMpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCBwYWQ9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgJ3BhZCcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwKVsncGFkJ10sIDMpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbHVtbmNvbmZpZ3VyZV91bmlmb3JtKHNlbGYpOgorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgdW5pZm9ybT0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgJ3VuaWZvcm0nKSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDApWyd1bmlmb3JtJ10sICdmb28nKQorCisgICAgZGVmIHRlc3RfZ3JpZF9yb3djb25maWd1cmUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnbWluc2l6ZSc6IDAsICdwYWQnOiAwLCAndW5pZm9ybSc6IE5vbmUsICd3ZWlnaHQnOiAwfSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIG9wdGlvbiAiLWZvbyInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCAnZm9vJykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKCgwLCAzKSwgd2VpZ2h0PTIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IHNwZWNpZnkgYSBzaW5nbGUgZWxlbWVudCBvbiByZXRyaWV2YWwnKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgoMCwgMykpCisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoY29sdW1uPTAsIHJvdz0wKQorICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoJ2FsbCcsIHdlaWdodD0zKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgaW50ZWdlciBidXQgZ290ICJhbGwiJyk6CisgICAgICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKCdhbGwnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgJ3dlaWdodCcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgzLCAnd2VpZ2h0JyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDI2NSwgJ3dlaWdodCcpLCAwKQorICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoYiwgd2VpZ2h0PTQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCAnd2VpZ2h0JyksIDQpCisKKyAgICBkZWYgdGVzdF9ncmlkX3Jvd2NvbmZpZ3VyZV9taW5zaXplKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJmb28iJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgbWluc2l6ZT0nZm9vJykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIG1pbnNpemU9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsICdtaW5zaXplJyksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwKVsnbWluc2l6ZSddLCAxMCkKKworICAgIGRlZiB0ZXN0X2dyaWRfcm93Y29uZmlndXJlX3dlaWdodChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgaW50ZWdlciBidXQgZ290ICJiYWQiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgd2VpZ2h0PSdiYWQnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdpbnZhbGlkIGFyZyAiLXdlaWdodCI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgYmUgbm9uLW5lZ2F0aXZlJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgd2VpZ2h0PS0zKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgd2VpZ2h0PTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsICd3ZWlnaHQnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMClbJ3dlaWdodCddLCAzKQorCisgICAgZGVmIHRlc3RfZ3JpZF9yb3djb25maWd1cmVfcGFkKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJmb28iJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgcGFkPSdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdpbnZhbGlkIGFyZyAiLXBhZCI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgYmUgbm9uLW5lZ2F0aXZlJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgcGFkPS0zKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgcGFkPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsICdwYWQnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMClbJ3BhZCddLCAzKQorCisgICAgZGVmIHRlc3RfZ3JpZF9yb3djb25maWd1cmVfdW5pZm9ybShzZWxmKToKKyAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHVuaWZvcm09J2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsICd1bmlmb3JtJyksICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwKVsndW5pZm9ybSddLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2dyaWRfZm9yZ2V0KHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBjID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvdz0yLCBjb2x1bW49Miwgcm93c3Bhbj0yLCBjb2x1bW5zcGFuPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkeD0zLCBwYWR5PTQsIHN0aWNreT0nbnMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcygpLCBbYl0pCisgICAgICAgIGIuZ3JpZF9mb3JnZXQoKQorICAgICAgICBjLmdyaWRfZm9yZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKSwge30pCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93PTAsIGNvbHVtbj0wKQorICAgICAgICBpbmZvID0gYi5ncmlkX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3JvdyddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snY29sdW1uJ10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyb3dzcGFuJ10sIHNlbGYuX3N0cigxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydjb2x1bW5zcGFuJ10sIHNlbGYuX3N0cigxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR4J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR5J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydzdGlja3knXSwgJycpCisKKyAgICBkZWYgdGVzdF9ncmlkX3JlbW92ZShzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgYyA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3c9MiwgY29sdW1uPTIsIHJvd3NwYW49MiwgY29sdW1uc3Bhbj0yLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhZHg9MywgcGFkeT00LCBzdGlja3k9J25zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMoKSwgW2JdKQorICAgICAgICBiLmdyaWRfcmVtb3ZlKCkKKyAgICAgICAgYy5ncmlkX3JlbW92ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKCksIHt9KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvdz0wLCBjb2x1bW49MCkKKyAgICAgICAgaW5mbyA9IGIuZ3JpZF9pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyb3cnXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2NvbHVtbiddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncm93c3BhbiddLCBzZWxmLl9zdHIoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snY29sdW1uc3BhbiddLCBzZWxmLl9zdHIoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeCddLCBzZWxmLl9zdHIoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeSddLCBzZWxmLl9zdHIoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snc3RpY2t5J10sICducycpCisKKyAgICBkZWYgdGVzdF9ncmlkX2luZm8oc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKSwge30pCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93PTIsIGNvbHVtbj0yLCByb3dzcGFuPTIsIGNvbHVtbnNwYW49MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWR4PTMsIHBhZHk9NCwgc3RpY2t5PSducycpCisgICAgICAgIGluZm8gPSBiLmdyaWRfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2luJ10sIHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyb3cnXSwgc2VsZi5fc3RyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2NvbHVtbiddLCBzZWxmLl9zdHIoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncm93c3BhbiddLCBzZWxmLl9zdHIoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snY29sdW1uc3BhbiddLCBzZWxmLl9zdHIoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeCddLCBzZWxmLl9zdHIoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeSddLCBzZWxmLl9zdHIoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snc3RpY2t5J10sICducycpCisKKyAgICBAcmVxdWlyZXNfdGNsKDgsIDUpCisgICAgZGVmIHRlc3RfZ3JpZF9hbmNob3Ioc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBhbmNob3IgIngiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9hbmNob3IoJ3gnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdhbWJpZ3VvdXMgYW5jaG9yICIiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9hbmNob3IoJycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2FuY2hvcignc2UnLCAnbncnKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9hbmNob3IoJ3NlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QudGsuY2FsbCgnZ3JpZCcsICdhbmNob3InLCBzZWxmLnJvb3QpLCAnc2UnKQorCisgICAgZGVmIHRlc3RfZ3JpZF9iYm94KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2Jib3goKSwgKDAsIDAsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2Jib3goMCwgMCksICgwLCAwLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9iYm94KDAsIDAsIDEsIDEpLCAoMCwgMCwgMCwgMCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGludGVnZXIgYnV0IGdvdCAieCInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2Jib3goJ3gnLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBpbnRlZ2VyIGJ1dCBnb3QgIngiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9iYm94KDAsICd4JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgaW50ZWdlciBidXQgZ290ICJ4IicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYmJveCgwLCAwLCAneCcsIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGludGVnZXIgYnV0IGdvdCAieCInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2Jib3goMCwgMCwgMCwgJ3gnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9iYm94KDAsIDAsIDAsIDAsIDApCisgICAgICAgIHQgPSBzZWxmLnJvb3QKKyAgICAgICAgIyBkZS1tYXhpbWl6ZQorICAgICAgICB0LndtX2dlb21ldHJ5KCcxeDErMCswJykKKyAgICAgICAgdC53bV9nZW9tZXRyeSgnJykKKyAgICAgICAgZjEgPSB0a2ludGVyLkZyYW1lKHQsIHdpZHRoPTc1LCBoZWlnaHQ9NzUsIGJnPSdyZWQnKQorICAgICAgICBmMiA9IHRraW50ZXIuRnJhbWUodCwgd2lkdGg9OTAsIGhlaWdodD05MCwgYmc9J2JsdWUnKQorICAgICAgICBmMS5ncmlkX2NvbmZpZ3VyZShyb3c9MCwgY29sdW1uPTApCisgICAgICAgIGYyLmdyaWRfY29uZmlndXJlKHJvdz0xLCBjb2x1bW49MSkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2Jib3goKSwgKDAsIDAsIDE2NSwgMTY1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfYmJveCgwLCAwKSwgKDAsIDAsIDc1LCA3NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2Jib3goMCwgMCwgMSwgMSksICgwLCAwLCAxNjUsIDE2NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2Jib3goMSwgMSksICg3NSwgNzUsIDkwLCA5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2Jib3goMTAsIDEwLCAwLCAwKSwgKDAsIDAsIDE2NSwgMTY1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfYmJveCgtMiwgLTIsIC0xLCAtMSksICgwLCAwLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfYmJveCgxMCwgMTAsIDEyLCAxMiksICgxNjUsIDE2NSwgMCwgMCkpCisKKyAgICBkZWYgdGVzdF9ncmlkX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9sb2NhdGlvbigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2xvY2F0aW9uKDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2xvY2F0aW9uKDAsIDAsIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgIngiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9sb2NhdGlvbigneCcsICd5JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAieSInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2xvY2F0aW9uKCcxYycsICd5JykKKyAgICAgICAgdCA9IHNlbGYucm9vdAorICAgICAgICAjIGRlLW1heGltaXplCisgICAgICAgIHQud21fZ2VvbWV0cnkoJzF4MSswKzAnKQorICAgICAgICB0LndtX2dlb21ldHJ5KCcnKQorICAgICAgICBmID0gdGtpbnRlci5GcmFtZSh0LCB3aWR0aD0yMDAsIGhlaWdodD0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodHRoaWNrbmVzcz0wLCBiZz0ncmVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdyaWRfbG9jYXRpb24oMTAsIDEwKSwgKC0xLCAtMSkpCisgICAgICAgIGYuZ3JpZF9jb25maWd1cmUoKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oLTEwLCAtMTApLCAoLTEsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oLTEwLCAwKSwgKC0xLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oLTEsIDApLCAoLTEsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigwLCAtMTApLCAoMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigwLCAtMSksICgwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKDAsIDApLCAoMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKDIwMCwgMCksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oMjAxLCAwKSwgKDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigwLCAxMDApLCAoMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKDAsIDEwMSksICgwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oMjAxLCAxMDEpLCAoMSwgMSkpCisKKyAgICBkZWYgdGVzdF9ncmlkX3Byb3BhZ2F0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9wcm9wYWdhdGUoKSwgVHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcHJvcGFnYXRlKEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5yb290LmdyaWRfcHJvcGFnYXRlKEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucm9vdC5ncmlkX3Byb3BhZ2F0ZSgpKQorICAgICAgICBmID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QsIHdpZHRoPTEwMCwgaGVpZ2h0PTEwMCwgYmc9J3JlZCcpCisgICAgICAgIGYuZ3JpZF9jb25maWd1cmUocm93PTAsIGNvbHVtbj0wKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndpbmZvX3dpZHRoKCksIDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndpbmZvX2hlaWdodCgpLCAxMDApCisgICAgICAgIGYuZ3JpZF9wcm9wYWdhdGUoRmFsc2UpCisgICAgICAgIGcgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCwgd2lkdGg9NzUsIGhlaWdodD04NSwgYmc9J2dyZWVuJykKKyAgICAgICAgZy5ncmlkX2NvbmZpZ3VyZShpbl89Ziwgcm93PTAsIGNvbHVtbj0wKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndpbmZvX3dpZHRoKCksIDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndpbmZvX2hlaWdodCgpLCAxMDApCisgICAgICAgIGYuZ3JpZF9wcm9wYWdhdGUoVHJ1ZSkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53aW5mb193aWR0aCgpLCA3NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndpbmZvX2hlaWdodCgpLCA4NSkKKworICAgIGRlZiB0ZXN0X2dyaWRfc2l6ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfc2l6ZSgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NpemUoKSwgKDAsIDApKQorICAgICAgICBmID0gdGtpbnRlci5TY2FsZShzZWxmLnJvb3QpCisgICAgICAgIGYuZ3JpZF9jb25maWd1cmUocm93PTAsIGNvbHVtbj0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NpemUoKSwgKDEsIDEpKQorICAgICAgICBmLmdyaWRfY29uZmlndXJlKHJvdz00LCBjb2x1bW49NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zaXplKCksICg2LCA1KSkKKworICAgIGRlZiB0ZXN0X2dyaWRfc2xhdmVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcygpLCBbXSkKKyAgICAgICAgYSA9IHRraW50ZXIuTGFiZWwoc2VsZi5yb290KQorICAgICAgICBhLmdyaWRfY29uZmlndXJlKHJvdz0wLCBjb2x1bW49MSkKKyAgICAgICAgYiA9IHRraW50ZXIuTGFiZWwoc2VsZi5yb290KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvdz0xLCBjb2x1bW49MCkKKyAgICAgICAgYyA9IHRraW50ZXIuTGFiZWwoc2VsZi5yb290KQorICAgICAgICBjLmdyaWRfY29uZmlndXJlKHJvdz0xLCBjb2x1bW49MSkKKyAgICAgICAgZCA9IHRraW50ZXIuTGFiZWwoc2VsZi5yb290KQorICAgICAgICBkLmdyaWRfY29uZmlndXJlKHJvdz0xLCBjb2x1bW49MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMoKSwgW2QsIGMsIGIsIGFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcyhyb3c9MCksIFthXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMocm93PTEpLCBbZCwgYywgYl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKGNvbHVtbj0wKSwgW2JdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcyhjb2x1bW49MSksIFtkLCBjLCBhXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMocm93PTEsIGNvbHVtbj0xKSwgW2QsIGNdKQorCisKK3Rlc3RzX2d1aSA9ICgKKyAgICBQYWNrVGVzdCwgUGxhY2VUZXN0LCBHcmlkVGVzdCwKKykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfaW1hZ2VzLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9pbWFnZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhOGNkMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfaW1hZ2VzLnB5CkBAIC0wLDAgKzEsMzI3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0a2ludGVyCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IEFic3RyYWN0VGtUZXN0LCByZXF1aXJlc190Y2wKKworc3VwcG9ydC5yZXF1aXJlcygnZ3VpJykKKworCitjbGFzcyBNaXNjVGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW1hZ2VfdHlwZXMoc2VsZik6CisgICAgICAgIGltYWdlX3R5cGVzID0gc2VsZi5yb290LmltYWdlX3R5cGVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGltYWdlX3R5cGVzLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncGhvdG8nLCBpbWFnZV90eXBlcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYml0bWFwJywgaW1hZ2VfdHlwZXMpCisKKyAgICBkZWYgdGVzdF9pbWFnZV9uYW1lcyhzZWxmKToKKyAgICAgICAgaW1hZ2VfbmFtZXMgPSBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW1hZ2VfbmFtZXMsIHR1cGxlKQorCisKK2NsYXNzIEJpdG1hcEltYWdlVGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgQWJzdHJhY3RUa1Rlc3Quc2V0VXBDbGFzcy5fX2Z1bmNfXyhjbHMpCisgICAgICAgIGNscy50ZXN0ZmlsZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3B5dGhvbi54Ym0nLCBzdWJkaXI9J2ltZ2hkcmRhdGEnKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fZmlsZShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLkJpdG1hcEltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kPSd5ZWxsb3cnLCBiYWNrZ3JvdW5kPSdibHVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c2VsZi50ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW1hZ2UpLCAnOjppbWc6OnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLnR5cGUoKSwgJ2JpdG1hcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEluKCc6OmltZzo6dGVzdCcsIHNlbGYucm9vdC5pbWFnZV9uYW1lcygpKQorICAgICAgICBkZWwgaW1hZ2UKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignOjppbWc6OnRlc3QnLCBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2RhdGEoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihzZWxmLnRlc3RmaWxlLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGltYWdlID0gdGtpbnRlci5CaXRtYXBJbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZD0neWVsbG93JywgYmFja2dyb3VuZD0nYmx1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGltYWdlKSwgJzo6aW1nOjp0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS50eXBlKCksICdiaXRtYXAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignOjppbWc6OnRlc3QnLCBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKSkKKyAgICAgICAgZGVsIGltYWdlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJzo6aW1nOjp0ZXN0Jywgc2VsZi5yb290LmltYWdlX25hbWVzKCkpCisKKyAgICBkZWYgYXNzZXJ0RXF1YWxTdHJMaXN0KHNlbGYsIGFjdHVhbCwgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYWN0dWFsLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LnNwbGl0bGlzdChhY3R1YWwpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9kYXRhKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuQml0bWFwSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZGF0YSddLCAnLWRhdGEge30ge30ge30ge30nKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoZGF0YT1kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsU3RyTGlzdChpbWFnZVsnZGF0YSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJy1kYXRhJywgJycsICcnLCAnJywgZGF0YS5kZWNvZGUoJ2FzY2lpJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydtYXNrZGF0YSddLCAnLW1hc2tkYXRhIHt9IHt9IHt9IHt9JykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKG1hc2tkYXRhPWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxTdHJMaXN0KGltYWdlWydtYXNrZGF0YSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJy1tYXNrZGF0YScsICcnLCAnJywgJycsIGRhdGEuZGVjb2RlKCdhc2NpaScpKSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9maWxlKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuQml0bWFwSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZmlsZSddLCAnLWZpbGUge30ge30ge30ge30nKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoZmlsZT1zZWxmLnRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsU3RyTGlzdChpbWFnZVsnZmlsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJy1maWxlJywgJycsICcnLCAnJyxzZWxmLnRlc3RmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnbWFza2ZpbGUnXSwgJy1tYXNrZmlsZSB7fSB7fSB7fSB7fScpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShtYXNrZmlsZT1zZWxmLnRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsU3RyTGlzdChpbWFnZVsnbWFza2ZpbGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCctbWFza2ZpbGUnLCAnJywgJycsICcnLCBzZWxmLnRlc3RmaWxlKSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9iYWNrZ3JvdW5kKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuQml0bWFwSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnYmFja2dyb3VuZCddLCAnLWJhY2tncm91bmQge30ge30ge30ge30nKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoYmFja2dyb3VuZD0nYmx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2JhY2tncm91bmQnXSwgJy1iYWNrZ3JvdW5kIHt9IHt9IHt9IGJsdWUnKQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX2ZvcmVncm91bmQoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5CaXRtYXBJbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmb3JlZ3JvdW5kJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy1mb3JlZ3JvdW5kIHt9IHt9ICMwMDAwMDAgIzAwMDAwMCcpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShmb3JlZ3JvdW5kPSd5ZWxsb3cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmb3JlZ3JvdW5kJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy1mb3JlZ3JvdW5kIHt9IHt9ICMwMDAwMDAgeWVsbG93JykKKworCitjbGFzcyBQaG90b0ltYWdlVGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgQWJzdHJhY3RUa1Rlc3Quc2V0VXBDbGFzcy5fX2Z1bmNfXyhjbHMpCisgICAgICAgIGNscy50ZXN0ZmlsZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3B5dGhvbi5naWYnLCBzdWJkaXI9J2ltZ2hkcmRhdGEnKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c2VsZi50ZXN0ZmlsZSkKKworICAgIGRlZiBjb2xvcmxpc3Qoc2VsZiwgKmFyZ3MpOgorICAgICAgICBpZiB0a2ludGVyLlRrVmVyc2lvbiA+PSA4LjYgYW5kIHNlbGYud2FudG9iamVjdHM6CisgICAgICAgICAgICByZXR1cm4gYXJncworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHRraW50ZXIuX2pvaW4oYXJncykKKworICAgIGRlZiBjaGVja19jcmVhdGVfZnJvbV9maWxlKHNlbGYsIGV4dCk6CisgICAgICAgIHRlc3RmaWxlID0gc3VwcG9ydC5maW5kZmlsZSgncHl0aG9uLicgKyBleHQsIHN1YmRpcj0naW1naGRyZGF0YScpCisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9dGVzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGltYWdlKSwgJzo6aW1nOjp0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS50eXBlKCksICdwaG90bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydkYXRhJ10sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmaWxlJ10sIHRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEluKCc6OmltZzo6dGVzdCcsIHNlbGYucm9vdC5pbWFnZV9uYW1lcygpKQorICAgICAgICBkZWwgaW1hZ2UKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignOjppbWc6OnRlc3QnLCBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKSkKKworICAgIGRlZiBjaGVja19jcmVhdGVfZnJvbV9kYXRhKHNlbGYsIGV4dCk6CisgICAgICAgIHRlc3RmaWxlID0gc3VwcG9ydC5maW5kZmlsZSgncHl0aG9uLicgKyBleHQsIHN1YmRpcj0naW1naGRyZGF0YScpCisgICAgICAgIHdpdGggb3Blbih0ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGltYWdlKSwgJzo6aW1nOjp0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS50eXBlKCksICdwaG90bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydkYXRhJ10sIGRhdGEgaWYgc2VsZi53YW50b2JqZWN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGF0YS5kZWNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmaWxlJ10sICcnKQorICAgICAgICBzZWxmLmFzc2VydEluKCc6OmltZzo6dGVzdCcsIHNlbGYucm9vdC5pbWFnZV9uYW1lcygpKQorICAgICAgICBkZWwgaW1hZ2UKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignOjppbWc6OnRlc3QnLCBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX3BwbV9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2NyZWF0ZV9mcm9tX2ZpbGUoJ3BwbScpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9wcG1fZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jcmVhdGVfZnJvbV9kYXRhKCdwcG0nKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fcGdtX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY3JlYXRlX2Zyb21fZmlsZSgncGdtJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX3BnbV9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2NyZWF0ZV9mcm9tX2RhdGEoJ3BnbScpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9naWZfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jcmVhdGVfZnJvbV9maWxlKCdnaWYnKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fZ2lmX2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY3JlYXRlX2Zyb21fZGF0YSgnZ2lmJykKKworICAgIEByZXF1aXJlc190Y2woOCwgNikKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9wbmdfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jcmVhdGVfZnJvbV9maWxlKCdwbmcnKQorCisgICAgQHJlcXVpcmVzX3RjbCg4LCA2KQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX3BuZ19kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2NyZWF0ZV9mcm9tX2RhdGEoJ3BuZycpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfZGF0YShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZGF0YSddLCAnJykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGVzdGZpbGUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGRhdGE9ZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZGF0YSddLCBkYXRhIGlmIHNlbGYud2FudG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRhdGEuZGVjb2RlKCdsYXRpbjEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfZm9ybWF0KHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmb3JtYXQnXSwgJycpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShmaWxlPXNlbGYudGVzdGZpbGUsIGZvcm1hdD0nZ2lmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZm9ybWF0J10sICgnZ2lmJywpIGlmIHNlbGYud2FudG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgJ2dpZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX2ZpbGUoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2ZpbGUnXSwgJycpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShmaWxlPXNlbGYudGVzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2ZpbGUnXSwgc2VsZi50ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfZ2FtbWEoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2dhbW1hJ10sICcxLjAnKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoZ2FtbWE9Mi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydnYW1tYSddLCAnMi4wJykKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV93aWR0aF9oZWlnaHQoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ3dpZHRoJ10sICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnaGVpZ2h0J10sICcwJykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKHdpZHRoPTIwKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoaGVpZ2h0PTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWyd3aWR0aCddLCAnMjAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydoZWlnaHQnXSwgJzEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTApCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfcGFsZXR0ZShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsncGFsZXR0ZSddLCAnJykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKHBhbGV0dGU9MjU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydwYWxldHRlJ10sICcyNTYnKQorICAgICAgICBpbWFnZS5jb25maWd1cmUocGFsZXR0ZT0nMy80LzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydwYWxldHRlJ10sICczLzQvMicpCisKKyAgICBkZWYgdGVzdF9ibGFuayhzZWxmKToKKyAgICAgICAgaW1hZ2UgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGltYWdlLmJsYW5rKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDQsIDYpLCBzZWxmLmNvbG9ybGlzdCgwLCAwLCAwKSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGltYWdlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBpbWFnZTIgPSBpbWFnZS5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmhlaWdodCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoNCwgNiksIGltYWdlLmdldCg0LCA2KSkKKworICAgIGRlZiB0ZXN0X3N1YnNhbXBsZShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGltYWdlMiA9IGltYWdlLnN1YnNhbXBsZSgyLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi53aWR0aCgpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5oZWlnaHQoKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuZ2V0KDIsIDIpLCBpbWFnZS5nZXQoNCwgNikpCisKKyAgICAgICAgaW1hZ2UyID0gaW1hZ2Uuc3Vic2FtcGxlKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLndpZHRoKCksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmhlaWdodCgpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5nZXQoMiwgMyksIGltYWdlLmdldCg0LCA2KSkKKworICAgIGRlZiB0ZXN0X3pvb20oc2VsZik6CisgICAgICAgIGltYWdlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBpbWFnZTIgPSBpbWFnZS56b29tKDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLndpZHRoKCksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5oZWlnaHQoKSwgNDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmdldCg4LCAxOCksIGltYWdlLmdldCg0LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuZ2V0KDksIDIwKSwgaW1hZ2UuZ2V0KDQsIDYpKQorCisgICAgICAgIGltYWdlMiA9IGltYWdlLnpvb20oMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIud2lkdGgoKSwgMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmhlaWdodCgpLCAzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuZ2V0KDgsIDEyKSwgaW1hZ2UuZ2V0KDQsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5nZXQoOSwgMTMpLCBpbWFnZS5nZXQoNCwgNikpCisKKyAgICBkZWYgdGVzdF9wdXQoc2VsZik6CisgICAgICAgIGltYWdlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBpbWFnZS5wdXQoJ3tyZWQgZ3JlZW59IHtibHVlIHllbGxvd30nLCB0bz0oNCwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDQsIDYpLCBzZWxmLmNvbG9ybGlzdCgyNTUsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCg1LCA2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbG9ybGlzdCgwLCAxMjggaWYgdGtpbnRlci5Ua1ZlcnNpb24gPj0gOC42CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAyNTUsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCg0LCA3KSwgc2VsZi5jb2xvcmxpc3QoMCwgMCwgMjU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoNSwgNyksIHNlbGYuY29sb3JsaXN0KDI1NSwgMjU1LCAwKSkKKworICAgICAgICBpbWFnZS5wdXQoKCgnI2YwMCcsICcjMDBmZjAwJyksICgnIzAwMDAwMGZmZicsICcjZmZmZmZmZmYwMDAwJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCgwLCAwKSwgc2VsZi5jb2xvcmxpc3QoMjU1LCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoMSwgMCksIHNlbGYuY29sb3JsaXN0KDAsIDI1NSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDAsIDEpLCBzZWxmLmNvbG9ybGlzdCgwLCAwLCAyNTUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCgxLCAxKSwgc2VsZi5jb2xvcmxpc3QoMjU1LCAyNTUsIDApKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBpbWFnZSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoNCwgNiksIHNlbGYuY29sb3JsaXN0KDYyLCAxMTYsIDE2MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDAsIDApLCBzZWxmLmNvbG9ybGlzdCgwLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoMTUsIDE1KSwgc2VsZi5jb2xvcmxpc3QoMCwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIGltYWdlLmdldCwgLTEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIGltYWdlLmdldCwgMCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIGltYWdlLmdldCwgMTYsIDE1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBpbWFnZS5nZXQsIDE1LCAxNikKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKworICAgICAgICBpbWFnZS53cml0ZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgaW1hZ2UyID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdDInLCBtYXN0ZXI9c2VsZi5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdwcG0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW1hZ2UyKSwgJzo6aW1nOjp0ZXN0MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLnR5cGUoKSwgJ3Bob3RvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmhlaWdodCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuZ2V0KDAsIDApLCBpbWFnZS5nZXQoMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmdldCgxNSwgOCksIGltYWdlLmdldCgxNSwgOCkpCisKKyAgICAgICAgaW1hZ2Uud3JpdGUoc3VwcG9ydC5URVNURk4sIGZvcm1hdD0nZ2lmJywgZnJvbV9jb29yZHM9KDQsIDYsIDYsIDkpKQorICAgICAgICBpbWFnZTMgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0MycsIG1hc3Rlcj1zZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J2dpZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbWFnZTMpLCAnOjppbWc6OnRlc3QzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTMudHlwZSgpLCAncGhvdG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMy53aWR0aCgpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMy5oZWlnaHQoKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTMuZ2V0KDAsIDApLCBpbWFnZS5nZXQoNCwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UzLmdldCgxLCAyKSwgaW1hZ2UuZ2V0KDUsIDgpKQorCisKK3Rlc3RzX2d1aSA9IChNaXNjVGVzdCwgQml0bWFwSW1hZ2VUZXN0LCBQaG90b0ltYWdlVGVzdCwpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzX2d1aSkKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbWlzYy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbWlzYy5weQppbmRleCBkMzI1YjMxLi5kOGRlOTQ5IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X21pc2MucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9taXNjLnB5CkBAIC0xLDE0ICsxLDExIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0a2ludGVyCi1mcm9tIHRraW50ZXIgaW1wb3J0IHR0awogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBBYnN0cmFjdFRrVGVzdAogCiBzdXBwb3J0LnJlcXVpcmVzKCdndWknKQogCi1jbGFzcyBNaXNjVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdCA9IHR0ay5zZXR1cF9tYXN0ZXIoKQorY2xhc3MgTWlzY1Rlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3RrX3NldFBhbGV0dGUoc2VsZik6CiAgICAgICAgIHJvb3QgPSBzZWxmLnJvb3QKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdGV4dC5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdGV4dC5weQppbmRleCA0YzNmYTA0Li4xM2I3YzU2IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF90ZXh0LnB5CkBAIC0xLDE5ICsxLDE2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0a2ludGVyCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAotZnJvbSB0a2ludGVyLnR0ayBpbXBvcnQgc2V0dXBfbWFzdGVyCitmcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBBYnN0cmFjdFRrVGVzdAogCiByZXF1aXJlcygnZ3VpJykKIAotY2xhc3MgVGV4dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVGV4dFRlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5yb290ID0gc2V0dXBfbWFzdGVyKCkKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCiAgICAgICAgIHNlbGYudGV4dCA9IHRraW50ZXIuVGV4dChzZWxmLnJvb3QpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYudGV4dC5kZXN0cm95KCkKLQogICAgIGRlZiB0ZXN0X2RlYnVnKHNlbGYpOgogICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CiAgICAgICAgIG9sZGRlYnVnID0gdGV4dC5kZWJ1ZygpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdmFyaWFibGVzLnB5CmluZGV4IDlkOTEwYWMuLjdiN2UyOTkgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdmFyaWFibGVzLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdmFyaWFibGVzLnB5CkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gdGtpbnRlciBpbXBvcnQgVmFyaWFibGUsIFN0cmluZ1ZhciwgSW50VmFyLCBEb3VibGVWYXIsIEJvb2xlYW5WYXIsIFRrCitmcm9tIHRraW50ZXIgaW1wb3J0IFZhcmlhYmxlLCBTdHJpbmdWYXIsIEludFZhciwgRG91YmxlVmFyLCBCb29sZWFuVmFyLCBUY2wKIAogCiBjbGFzcyBWYXIoVmFyaWFibGUpOgpAQCAtMTYsMTAgKzE2LDEwIEBACiBjbGFzcyBUZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdCA9IFRrKCkKKyAgICAgICAgc2VsZi5yb290ID0gVGNsKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5yb290LmRlc3Ryb3koKQorICAgICAgICBkZWwgc2VsZi5yb290CiAKIAogY2xhc3MgVGVzdFZhcmlhYmxlKFRlc3RCYXNlKToKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgIHNlbGYucm9vdC5zZXR2YXIoYid2YXJceDAwbmFtZScsICJ2YWx1ZSIpCiAKICAgICBkZWYgdGVzdF9pbml0aWFsaXplKHNlbGYpOgotICAgICAgICB2ID0gVmFyKCkKKyAgICAgICAgdiA9IFZhcihzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uodi5zaWRlX2VmZmVjdCkKICAgICAgICAgdi5zZXQoInZhbHVlIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYuc2lkZV9lZmZlY3QpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkKaW5kZXggNmVmNzc1MC4uNThjOGVhMSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHRraW50ZXIKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGNsRXJyb3IKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCkBAIC02NSw3ICs2Niw3IEBACiAgICAgICAgICd0YWtlZm9jdXMnLCAndXNlJywgJ3Zpc3VhbCcsICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5Ub3BsZXZlbChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfbWVudShzZWxmKToKQEAgLTEwNCw3ICsxMDUsNyBAQAogICAgICAgICAncmVsaWVmJywgJ3Rha2Vmb2N1cycsICd2aXN1YWwnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuRnJhbWUoc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC0xMTksNyArMTIwLDcgQEAKICAgICAgICAgJ3Rha2Vmb2N1cycsICd0ZXh0JywgJ3Zpc3VhbCcsICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5MYWJlbEZyYW1lKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9sYWJlbGFuY2hvcihzZWxmKToKQEAgLTE1Nyw3ICsxNTgsNyBAQAogICAgICAgICAndW5kZXJsaW5lJywgJ3dpZHRoJywgJ3dyYXBsZW5ndGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuTGFiZWwoc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC0xNzQsNyArMTc1LDcgQEAKICAgICAgICAgJ3N0YXRlJywgJ3Rha2Vmb2N1cycsICd0ZXh0JywgJ3RleHR2YXJpYWJsZScsCiAgICAgICAgICd1bmRlcmxpbmUnLCAnd2lkdGgnLCAnd3JhcGxlbmd0aCcpCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKQEAgLTE5OCw3ICsxOTksNyBAQAogICAgICAgICAndW5kZXJsaW5lJywgJ3ZhcmlhYmxlJywgJ3dpZHRoJywgJ3dyYXBsZW5ndGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuQ2hlY2tidXR0b24oc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC0yMjYsNyArMjI3LDcgQEAKICAgICAgICAgJ3VuZGVybGluZScsICd2YWx1ZScsICd2YXJpYWJsZScsICd3aWR0aCcsICd3cmFwbGVuZ3RoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlJhZGlvYnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF92YWx1ZShzZWxmKToKQEAgLTI0OSw3ICsyNTAsNyBAQAogICAgICkKICAgICBfY29udl9waXhlbHMgPSBzdGF0aWNtZXRob2QocGl4ZWxzX3JvdW5kKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5NZW51YnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9kaXJlY3Rpb24oc2VsZik6CkBAIC0yNjcsNyArMjY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICdjcmFzaGVzIHdpdGggQ29jb2EgVGsgKGlzc3VlMTk3MzMpJykKICAgICBkZWYgdGVzdF9pbWFnZShzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnaW1hZ2UxJykKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UobWFzdGVyPXNlbGYucm9vdCwgbmFtZT0naW1hZ2UxJykKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgJ2ltYWdlJywgaW1hZ2UsIGNvbnY9c3RyKQogICAgICAgICBlcnJtc2cgPSAnaW1hZ2UgInNwYW0iIGRvZXNuXCd0IGV4aXN0JwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IpIGFzIGNtOgpAQCAtMzAyLDcgKzMwMyw3IEBACiAKIGNsYXNzIE9wdGlvbk1lbnVUZXN0KE1lbnVidXR0b25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCBkZWZhdWx0PSdiJywgdmFsdWVzPSgnYScsICdiJywgJ2MnKSwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgZGVmYXVsdD0nYicsIHZhbHVlcz0oJ2EnLCAnYicsICdjJyksICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuT3B0aW9uTWVudShzZWxmLnJvb3QsIE5vbmUsIGRlZmF1bHQsICp2YWx1ZXMsICoqa3dhcmdzKQogCiAKQEAgLTMyMSw3ICszMjIsNyBAQAogICAgICAgICAndmFsaWRhdGUnLCAndmFsaWRhdGVjb21tYW5kJywgJ3dpZHRoJywgJ3hzY3JvbGxjb21tYW5kJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLkVudHJ5KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9kaXNhYmxlZGJhY2tncm91bmQoc2VsZik6CkBAIC0zOTUsNyArMzk2LDcgQEAKICAgICAgICAgJ3dpZHRoJywgJ3dyYXAnLCAneHNjcm9sbGNvbW1hbmQnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuU3BpbmJveChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgdGVzdF9zaG93ID0gTm9uZQpAQCAtNDY2LDExICs0NjcsNyBAQAogCiAgICAgZGVmIHRlc3RfYmJveChzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICBiYm94ID0gd2lkZ2V0LmJib3goMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYmJveCksIDQpCi0gICAgICAgIGZvciBpdGVtIGluIGJib3g6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbSwgaW50KQotCisgICAgICAgIHNlbGYuYXNzZXJ0SXNCb3VuZGluZ0JveCh3aWRnZXQuYmJveCgwKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsICdub2luZGV4JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2lkZ2V0LmJib3gpCkBAIC00OTMsOSArNDkwLDkgQEAKICAgICAgICAgJ3hzY3JvbGxjb21tYW5kJywgJ3lzY3JvbGxjb21tYW5kJywKICAgICApCiAgICAgaWYgdGNsX3ZlcnNpb24gPCAoOCwgNSk6Ci0gICAgICAgIHdhbnRvYmplY3RzID0gRmFsc2UKKyAgICAgICAgX3N0cmluZ2lmeSA9IFRydWUKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuVGV4dChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfYXV0b3NlcGFyYXRvcnMoc2VsZik6CkBAIC02MjMsMTYgKzYyMCwxMiBAQAogCiAgICAgZGVmIHRlc3RfYmJveChzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICBiYm94ID0gd2lkZ2V0LmJib3goJzEuMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJib3gpLCA0KQotICAgICAgICBmb3IgaXRlbSBpbiBiYm94OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW0sIGludCkKLQorICAgICAgICBzZWxmLmFzc2VydElzQm91bmRpbmdCb3god2lkZ2V0LmJib3goJzEuMScpKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aWRnZXQuYmJveCgnZW5kJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCAnbm9pbmRleCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsICcxLjEnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aWRnZXQuYmJveCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aWRnZXQuYmJveCwgJzEuMScsICdlbmQnKQogCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhQaXhlbFNpemVUZXN0cywgU3RhbmRhcmRPcHRpb25zVGVzdHMpCkBAIC02NTEsOSArNjQ0LDkgQEAKICAgICApCiAKICAgICBfY29udl9waXhlbHMgPSByb3VuZAotICAgIHdhbnRvYmplY3RzID0gRmFsc2UKKyAgICBfc3RyaW5naWZ5ID0gVHJ1ZQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5DYW52YXMoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZW5vdWdoKHNlbGYpOgpAQCAtNzA2LDcgKzY5OSw3IEBACiAgICAgICAgICd0YWtlZm9jdXMnLCAnd2lkdGgnLCAneHNjcm9sbGNvbW1hbmQnLCAneXNjcm9sbGNvbW1hbmQnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuTGlzdGJveChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfYWN0aXZlc3R5bGUoc2VsZik6CkBAIC03MTYsNyArNzA5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2xpc3R2YXJpYWJsZShzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICB2YXIgPSB0a2ludGVyLkRvdWJsZVZhcigpCisgICAgICAgIHZhciA9IHRraW50ZXIuRG91YmxlVmFyKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5jaGVja1ZhcmlhYmxlUGFyYW0od2lkZ2V0LCAnbGlzdHZhcmlhYmxlJywgdmFyKQogCiAgICAgZGVmIHRlc3Rfc2VsZWN0bW9kZShzZWxmKToKQEAgLTczMCw2ICs3MjMsMTAxIEBACiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKICAgICAgICAgc2VsZi5jaGVja0VudW1QYXJhbSh3aWRnZXQsICdzdGF0ZScsICdkaXNhYmxlZCcsICdub3JtYWwnKQogCisgICAgZGVmIHRlc3RfaXRlbWNvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdpdGVtIG51bWJlciAiMCIgb3V0IG9mIHJhbmdlJyk6CisgICAgICAgICAgICB3aWRnZXQuaXRlbWNvbmZpZ3VyZSgwKQorICAgICAgICBjb2xvcnMgPSAncmVkIG9yYW5nZSB5ZWxsb3cgZ3JlZW4gYmx1ZSB3aGl0ZSB2aW9sZXQnLnNwbGl0KCkKKyAgICAgICAgd2lkZ2V0Lmluc2VydCgnZW5kJywgKmNvbG9ycykKKyAgICAgICAgZm9yIGksIGNvbG9yIGluIGVudW1lcmF0ZShjb2xvcnMpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoaSwgYmFja2dyb3VuZD1jb2xvcikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgbGlzdGJveCBpbmRleCAicmVkIicpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoJ3JlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0Lml0ZW1jb25maWd1cmUoMCwgJ2JhY2tncm91bmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2JhY2tncm91bmQnLCAnYmFja2dyb3VuZCcsICdCYWNrZ3JvdW5kJywgJycsICdyZWQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aWRnZXQuaXRlbWNvbmZpZ3VyZSgnZW5kJywgJ2JhY2tncm91bmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2JhY2tncm91bmQnLCAnYmFja2dyb3VuZCcsICdCYWNrZ3JvdW5kJywgJycsICd2aW9sZXQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aWRnZXQuaXRlbWNvbmZpZ3VyZSgnQDAsMCcsICdiYWNrZ3JvdW5kJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQnLCAnQmFja2dyb3VuZCcsICcnLCAncmVkJykpCisKKyAgICAgICAgZCA9IHdpZGdldC5pdGVtY29uZmlndXJlKDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBkaWN0KQorICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGxlbih2KSwgKDIsIDUpKQorICAgICAgICAgICAgaWYgbGVuKHYpID09IDU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCB3aWRnZXQuaXRlbWNvbmZpZ3VyZSgwLCBrKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbNF0sIHdpZGdldC5pdGVtY2dldCgwLCBrKSkKKworICAgIGRlZiBjaGVja19pdGVtY29uZmlndXJlKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB3aWRnZXQuaW5zZXJ0KCdlbmQnLCAnYScsICdiJywgJ2MnLCAnZCcpCisgICAgICAgIHdpZGdldC5pdGVtY29uZmlndXJlKDAsICoqe25hbWU6IHZhbHVlfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aWRnZXQuaXRlbWNvbmZpZ3VyZSgwLCBuYW1lKVs0XSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0Lml0ZW1jZ2V0KDAsIG5hbWUpLCB2YWx1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAndW5rbm93biBjb2xvciBuYW1lICJzcGFtIicpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoMCwgKip7bmFtZTogJ3NwYW0nfSkKKworICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmVfYmFja2dyb3VuZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVtY29uZmlndXJlKCdiYWNrZ3JvdW5kJywgJyNmZjAwMDAnKQorCisgICAgZGVmIHRlc3RfaXRlbWNvbmZpZ3VyZV9iZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVtY29uZmlndXJlKCdiZycsICcjZmYwMDAwJykKKworICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmVfZmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbWNvbmZpZ3VyZSgnZmcnLCAnIzExMDAyMicpCisKKyAgICBkZWYgdGVzdF9pdGVtY29uZmlndXJlX2ZvcmVncm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbWNvbmZpZ3VyZSgnZm9yZWdyb3VuZCcsICcjMTEwMDIyJykKKworICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmVfc2VsZWN0YmFja2dyb3VuZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVtY29uZmlndXJlKCdzZWxlY3RiYWNrZ3JvdW5kJywgJyMxMTAwMjInKQorCisgICAgZGVmIHRlc3RfaXRlbWNvbmZpZ3VyZV9zZWxlY3Rmb3JlZ3JvdW5kKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2l0ZW1jb25maWd1cmUoJ3NlbGVjdGZvcmVncm91bmQnLCAnIzY1NDMyMScpCisKKyAgICBkZWYgdGVzdF9ib3goc2VsZik6CisgICAgICAgIGxiID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBsYi5pbnNlcnQoMCwgKignZWwlZCcgJSBpIGZvciBpIGluIHJhbmdlKDgpKSkKKyAgICAgICAgbGIucGFjaygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNCb3VuZGluZ0JveChsYi5iYm94KDApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsYi5iYm94KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobGIuYmJveCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBsYi5iYm94LCAnbm9pbmRleCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBsYi5iYm94LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxiLmJib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGIuYmJveCwgMCwgMSkKKworICAgIGRlZiB0ZXN0X2N1cnNlbGVjdGlvbihzZWxmKToKKyAgICAgICAgbGIgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGxiLmluc2VydCgwLCAqKCdlbCVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoOCkpKQorICAgICAgICBsYi5zZWxlY3Rpb25fY2xlYXIoMCwgdGtpbnRlci5FTkQpCisgICAgICAgIGxiLnNlbGVjdGlvbl9zZXQoMiwgNCkKKyAgICAgICAgbGIuc2VsZWN0aW9uX3NldCg2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmN1cnNlbGVjdGlvbigpLCAoMiwgMywgNCwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGIuY3Vyc2VsZWN0aW9uLCAwKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBsYiA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgbGIuaW5zZXJ0KDAsICooJ2VsJWQnICUgaSBmb3IgaSBpbiByYW5nZSg4KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDApLCAnZWwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYi5nZXQoMyksICdlbDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCgnZW5kJyksICdlbDcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCg4KSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KC0xKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDMsIDUpLCAoJ2VsMycsICdlbDQnLCAnZWw1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDUsICdlbmQnKSwgKCdlbDUnLCAnZWw2JywgJ2VsNycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCg1LCAwKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDAsIDApLCAoJ2VsMCcsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIGxiLmdldCwgJ25vaW5kZXgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgbGIuZ2V0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxiLmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIGxiLmdldCwgJ2VuZCcsICdub2luZGV4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYi5nZXQsIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBsYi5nZXQsIDIuNCkKKworCiBAYWRkX3N0YW5kYXJkX29wdGlvbnMoUGl4ZWxTaXplVGVzdHMsIFN0YW5kYXJkT3B0aW9uc1Rlc3RzKQogY2xhc3MgU2NhbGVUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIE9QVElPTlMgPSAoCkBAIC03NDMsNyArODMxLDcgQEAKICAgICApCiAgICAgZGVmYXVsdF9vcmllbnQgPSAndmVydGljYWwnCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlNjYWxlKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9iaWdpbmNyZW1lbnQoc2VsZik6CkBAIC04MDksMTAgKzg5NywxMCBAQAogICAgICAgICAndGFrZWZvY3VzJywgJ3Ryb3VnaGNvbG9yJywgJ3dpZHRoJywKICAgICApCiAgICAgX2NvbnZfcGl4ZWxzID0gcm91bmQKLSAgICB3YW50b2JqZWN0cyA9IEZhbHNlCisgICAgX3N0cmluZ2lmeSA9IFRydWUKICAgICBkZWZhdWx0X29yaWVudCA9ICd2ZXJ0aWNhbCcKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuU2Nyb2xsYmFyKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9hY3RpdmVyZWxpZWYoc2VsZik6CkBAIC04MjgsNiArOTE2LDI0IEBACiAgICAgICAgIHNlbGYuY2hlY2tFbnVtUGFyYW0od2lkZ2V0LCAnb3JpZW50JywgJ3ZlcnRpY2FsJywgJ2hvcml6b250YWwnLAogICAgICAgICAgICAgICAgIGVycm1zZz0nYmFkIG9yaWVudGF0aW9uICJ7fSI6IG11c3QgYmUgdmVydGljYWwgb3IgaG9yaXpvbnRhbCcpCiAKKyAgICBkZWYgdGVzdF9hY3RpdmF0ZShzZWxmKToKKyAgICAgICAgc2IgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGZvciBlIGluICgnYXJyb3cxJywgJ3NsaWRlcicsICdhcnJvdzInKToKKyAgICAgICAgICAgIHNiLmFjdGl2YXRlKGUpCisgICAgICAgIHNiLmFjdGl2YXRlKCcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNiLmFjdGl2YXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNiLmFjdGl2YXRlLCAnYXJyb3cxJywgJ2Fycm93MicpCisKKyAgICBkZWYgdGVzdF9zZXQoc2VsZik6CisgICAgICAgIHNiID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBzYi5zZXQoMC4yLCAwLjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2IuZ2V0KCksICgwLjIsIDAuNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzYi5zZXQsICdhYmMnLCAnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHNiLnNldCwgMC42LCAnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHNiLnNldCwgMC42LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgc2Iuc2V0LCAwLjYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzYi5zZXQsIDAuNiwgMC43LCAwLjgpCisKIAogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFN0YW5kYXJkT3B0aW9uc1Rlc3RzKQogY2xhc3MgUGFuZWRXaW5kb3dUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODQwLDcgKzk0Niw3IEBACiAgICAgKQogICAgIGRlZmF1bHRfb3JpZW50ID0gJ2hvcml6b250YWwnCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlBhbmVkV2luZG93KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9oYW5kbGVwYWQoc2VsZik6CkBAIC04ODcsNiArOTkzLDEwNSBAQAogICAgICAgICBzZWxmLmNoZWNrUGl4ZWxzUGFyYW0od2lkZ2V0LCAnd2lkdGgnLCA0MDIsIDQwMy40LCA0MDQuNiwgLTQwMiwgMCwgJzVpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnY9bm9jb252KQogCisgICAgZGVmIGNyZWF0ZTIoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihwKQorICAgICAgICBjID0gdGtpbnRlci5CdXR0b24ocCkKKyAgICAgICAgcC5hZGQoYikKKyAgICAgICAgcC5hZGQoYykKKyAgICAgICAgcmV0dXJuIHAsIGIsIGMKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmUoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHAucGFuZWNvbmZpZ3VyZSkKKyAgICAgICAgZCA9IHAucGFuZWNvbmZpZ3VyZShiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIHAucGFuZWNvbmZpZ3VyZShiLCBrKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodls0XSwgcC5wYW5lY2dldChiLCBrKSkKKworICAgIGRlZiBjaGVja19wYW5lY29uZmlndXJlKHNlbGYsIHAsIGIsIG5hbWUsIHZhbHVlLCBleHBlY3RlZCwgc3RyaW5naWZ5PUZhbHNlKToKKyAgICAgICAgY29udiA9IGxhbWJkYSB4OiB4CisgICAgICAgIGlmIG5vdCBzZWxmLndhbnRvYmplY3RzIG9yIHN0cmluZ2lmeToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc3RyKGV4cGVjdGVkKQorICAgICAgICBpZiBzZWxmLndhbnRvYmplY3RzIGFuZCBzdHJpbmdpZnk6CisgICAgICAgICAgICBjb252ID0gc3RyCisgICAgICAgIHAucGFuZWNvbmZpZ3VyZShiLCAqKntuYW1lOiB2YWx1ZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udihwLnBhbmVjb25maWd1cmUoYiwgbmFtZSlbNF0pLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb252KHAucGFuZWNnZXQoYiwgbmFtZSkpLCBleHBlY3RlZCkKKworICAgIGRlZiBjaGVja19wYW5lY29uZmlndXJlX2JhZChzZWxmLCBwLCBiLCBuYW1lLCBtc2cpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBwLnBhbmVjb25maWd1cmUoYiwgKip7bmFtZTogJ2JhZFZhbHVlJ30pCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX2FmdGVyKHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdhZnRlcicsIGMsIHN0cihjKSkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnYWZ0ZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQgd2luZG93IHBhdGggbmFtZSAiYmFkVmFsdWUiJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfYmVmb3JlKHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdiZWZvcmUnLCBjLCBzdHIoYykpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ2JlZm9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCB3aW5kb3cgcGF0aCBuYW1lICJiYWRWYWx1ZSInKQorCisgICAgZGVmIHRlc3RfcGFuZWNvbmZpZ3VyZV9oZWlnaHQoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ2hlaWdodCcsIDEwLCAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ2lmeT10Y2xfdmVyc2lvbiA8ICg4LCA1KSkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnaGVpZ2h0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiYmFkVmFsdWUiJykKKworICAgIEByZXF1aXJlc190Y2woOCwgNSkKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX2hpZGUoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ2hpZGUnLCBGYWxzZSwgMCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnaGlkZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkIGJvb2xlYW4gdmFsdWUgYnV0IGdvdCAiYmFkVmFsdWUiJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfbWluc2l6ZShzZWxmKToKKyAgICAgICAgcCwgYiwgYyA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZShwLCBiLCAnbWluc2l6ZScsIDEwLCAxMCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnbWluc2l6ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImJhZFZhbHVlIicpCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX3BhZHgoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ3BhZHgnLCAxLjMsIDEpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ3BhZHgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQgc2NyZWVuIGRpc3RhbmNlICJiYWRWYWx1ZSInKQorCisgICAgZGVmIHRlc3RfcGFuZWNvbmZpZ3VyZV9wYWR5KHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdwYWR5JywgMS4zLCAxKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmVfYmFkKHAsIGIsICdwYWR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiYmFkVmFsdWUiJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfc3RpY2t5KHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdzdGlja3knLCAnbnNldycsICduZXN3JykKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnc3RpY2t5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIHN0aWNreW5lc3MgdmFsdWUgImJhZFZhbHVlIjogbXVzdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlIGEgc3RyaW5nIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIG9mICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbiwgZSwgcywgYW5kIHcnKQorCisgICAgQHJlcXVpcmVzX3RjbCg4LCA1KQorICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfc3RyZXRjaChzZWxmKToKKyAgICAgICAgcCwgYiwgYyA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZShwLCBiLCAnc3RyZXRjaCcsICdhbHcnLCAnYWx3YXlzJykKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnc3RyZXRjaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzdHJldGNoICJiYWRWYWx1ZSI6IG11c3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHdheXMsIGZpcnN0LCBsYXN0LCBtaWRkbGUsIG9yIG5ldmVyJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfd2lkdGgoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ3dpZHRoJywgMTAsIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5PXRjbF92ZXJzaW9uIDwgKDgsIDUpKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmVfYmFkKHAsIGIsICd3aWR0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImJhZFZhbHVlIicpCisKIAogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFN0YW5kYXJkT3B0aW9uc1Rlc3RzKQogY2xhc3MgTWVudVRlc3QoQWJzdHJhY3RXaWRnZXRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC04OTksNyArMTEwNCw3IEBACiAgICAgKQogICAgIF9jb252X3BpeGVscyA9IG5vY29udgogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5NZW51KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9wb3N0Y29tbWFuZChzZWxmKToKQEAgLTkyMyw2ICsxMTI4LDM5IEBACiAgICAgICAgIHNlbGYuY2hlY2tFbnVtUGFyYW0od2lkZ2V0LCAndHlwZScsCiAgICAgICAgICAgICAgICAgJ25vcm1hbCcsICd0ZWFyb2ZmJywgJ21lbnViYXInKQogCisgICAgZGVmIHRlc3RfZW50cnljb25maWd1cmUoc2VsZik6CisgICAgICAgIG0xID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBtMS5hZGRfY29tbWFuZChsYWJlbD0ndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbTEuZW50cnljb25maWd1cmUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBtZW51IGVudHJ5IGluZGV4ICJmb28iJyk6CisgICAgICAgICAgICBtMS5lbnRyeWNvbmZpZ3VyZSgnZm9vJykKKyAgICAgICAgZCA9IG0xLmVudHJ5Y29uZmlndXJlKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBkaWN0KQorICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoaywgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYsIHR1cGxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbMF0sIGspCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLmVudHJ5Y2dldCgxLCBrKSwgdls0XSkKKyAgICAgICAgbTEuZGVzdHJveSgpCisKKyAgICBkZWYgdGVzdF9lbnRyeWNvbmZpZ3VyZV9sYWJlbChzZWxmKToKKyAgICAgICAgbTEgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIG0xLmFkZF9jb21tYW5kKGxhYmVsPSd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5lbnRyeWNnZXQoMSwgJ2xhYmVsJyksICd0ZXN0JykKKyAgICAgICAgbTEuZW50cnljb25maWd1cmUoMSwgbGFiZWw9J2NoYW5nZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLmVudHJ5Y2dldCgxLCAnbGFiZWwnKSwgJ2NoYW5nZWQnKQorCisgICAgZGVmIHRlc3RfZW50cnljb25maWd1cmVfdmFyaWFibGUoc2VsZik6CisgICAgICAgIG0xID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB2MSA9IHRraW50ZXIuQm9vbGVhblZhcihzZWxmLnJvb3QpCisgICAgICAgIHYyID0gdGtpbnRlci5Cb29sZWFuVmFyKHNlbGYucm9vdCkKKyAgICAgICAgbTEuYWRkX2NoZWNrYnV0dG9uKHZhcmlhYmxlPXYxLCBvbnZhbHVlPVRydWUsIG9mZnZhbHVlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J05vbnNlbnNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobTEuZW50cnljZ2V0KDEsICd2YXJpYWJsZScpKSwgc3RyKHYxKSkKKyAgICAgICAgbTEuZW50cnljb25maWd1cmUoMSwgdmFyaWFibGU9djIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0xLmVudHJ5Y2dldCgxLCAndmFyaWFibGUnKSksIHN0cih2MikpCisKIAogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFBpeGVsU2l6ZVRlc3RzLCBTdGFuZGFyZE9wdGlvbnNUZXN0cykKIGNsYXNzIE1lc3NhZ2VUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTM1LDcgKzExNzMsNyBAQAogICAgICkKICAgICBfY29udl9wYWRfcGl4ZWxzID0gbm9jb252CiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLk1lc3NhZ2Uoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2FzcGVjdChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKaW5kZXggZDY5OTU0Ni4uYzNhZjA2YyAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKQEAgLTIsMzQgKzIsMzAgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHRraW50ZXIKIGZyb20gdGtpbnRlciBpbXBvcnQgdHRrCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAotCi1pbXBvcnQgdGtpbnRlci50ZXN0LnN1cHBvcnQgYXMgc3VwcG9ydAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QsIHN3YXBfYXR0cgorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgQWJzdHJhY3RUa1Rlc3QsIGRlc3Ryb3lfZGVmYXVsdF9yb290CiAKIHJlcXVpcmVzKCdndWknKQogCi1jbGFzcyBMYWJlbGVkU2NhbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCitjbGFzcyBMYWJlbGVkU2NhbGVUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0KKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZV9pZGxldGFza3MoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKIAogICAgIGRlZiB0ZXN0X3dpZGdldF9kZXN0cm95KHNlbGYpOgogICAgICAgICAjIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB2YXJpYWJsZQotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCkKICAgICAgICAgdmFyID0geC5fdmFyaWFibGUuX25hbWUKICAgICAgICAgeC5kZXN0cm95KCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgeC50ay5nbG9iYWxnZXR2YXIsIHZhcikKIAogICAgICAgICAjIG1hbnVhbGx5IGNyZWF0ZWQgdmFyaWFibGUKLSAgICAgICAgbXl2YXIgPSB0a2ludGVyLkRvdWJsZVZhcigpCisgICAgICAgIG15dmFyID0gdGtpbnRlci5Eb3VibGVWYXIoc2VsZi5yb290KQogICAgICAgICBuYW1lID0gbXl2YXIuX25hbWUKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgdmFyaWFibGU9bXl2YXIpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIGlmIHgudGsud2FudG9iamVjdHMoKToKKyAgICAgICAgaWYgc2VsZi53YW50b2JqZWN0czoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC50ay5nbG9iYWxnZXR2YXIobmFtZSksIG15dmFyLmdldCgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh4LnRrLmdsb2JhbGdldHZhcihuYW1lKSksIG15dmFyLmdldCgpKQpAQCAtMzcsMjYgKzMzLDM2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHgudGsuZ2xvYmFsZ2V0dmFyLCBuYW1lKQogCiAgICAgICAgICMgY2hlY2tpbmcgdGhhdCB0aGUgdHJhY2luZyBjYWxsYmFjayBpcyBwcm9wZXJseSByZW1vdmVkCi0gICAgICAgIG15dmFyID0gdGtpbnRlci5JbnRWYXIoKQorICAgICAgICBteXZhciA9IHRraW50ZXIuSW50VmFyKHNlbGYucm9vdCkKICAgICAgICAgIyBMYWJlbGVkU2NhbGUgd2lsbCBzdGFydCB0cmFjaW5nIG15dmFyCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIHZhcmlhYmxlPW15dmFyKQogICAgICAgICB4LmRlc3Ryb3koKQogICAgICAgICAjIFVubGVzcyB0aGUgdHJhY2luZyBjYWxsYmFjayB3YXMgcmVtb3ZlZCwgY3JlYXRpbmcgYSBuZXcKICAgICAgICAgIyBMYWJlbGVkU2NhbGUgd2l0aCB0aGUgc2FtZSB2YXIgd2lsbCBjYXVzZSBhbiBlcnJvciBub3cuIFRoaXMKICAgICAgICAgIyBoYXBwZW5zIGJlY2F1c2UgdGhlIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIChwb3NzaWJseSkgYSBuZXcKICAgICAgICAgIyB2YWx1ZSB3aGljaCBjYXVzZXMgdGhlIHRyYWNpbmcgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFuZCB0aGVuCiAgICAgICAgICMgaXQgdHJpZXMgY2FsbGluZyBpbnN0YW5jZSBhdHRyaWJ1dGVzIG5vdCB5ZXQgZGVmaW5lZC4KLSAgICAgICAgdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhcikKKyAgICAgICAgdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIHZhcmlhYmxlPW15dmFyKQogICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ2xhc3RfdHlwZScpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzeXMubGFzdF90eXBlLCB0a2ludGVyLlRjbEVycm9yKQogCiAKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbl9ub19tYXN0ZXIoc2VsZik6CisgICAgICAgICMgbm8gbWFzdGVyIHBhc3NpbmcKKyAgICAgICAgd2l0aCBzd2FwX2F0dHIodGtpbnRlciwgJ19kZWZhdWx0X3Jvb3QnLCBOb25lKSwgXAorICAgICAgICAgICAgIHN3YXBfYXR0cih0a2ludGVyLCAnX3N1cHBvcnRfZGVmYXVsdF9yb290JywgVHJ1ZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRraW50ZXIuX2RlZmF1bHRfcm9vdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubWFzdGVyLCB0a2ludGVyLl9kZWZhdWx0X3Jvb3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnRrLCB0a2ludGVyLl9kZWZhdWx0X3Jvb3QudGspCisgICAgICAgICAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZGVzdHJveV9kZWZhdWx0X3Jvb3QoKQorCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CiAgICAgICAgICMgbWFzdGVyIHBhc3NpbmcKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubWFzdGVyLCB0a2ludGVyLl9kZWZhdWx0X3Jvb3QpCi0gICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIG1hc3RlciA9IHRraW50ZXIuRnJhbWUoKQorICAgICAgICBtYXN0ZXIgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCkKICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUobWFzdGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubWFzdGVyLCBtYXN0ZXIpCiAgICAgICAgIHguZGVzdHJveSgpCkBAIC02NCwyNSArNzAsMjUgQEAKICAgICAgICAgIyB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi9wYXNzaW5nCiAgICAgICAgIHBhc3NlZF9leHBlY3RlZCA9ICgoJzAnLCAwKSwgKDAsIDApLCAoMTAsIDEwKSwKICAgICAgICAgICAgICgtMSwgLTEpLCAoc3lzLm1heHNpemUgKyAxLCBzeXMubWF4c2l6ZSArIDEpKQotICAgICAgICBpZiB4LnRrLndhbnRvYmplY3RzKCk6CisgICAgICAgIGlmIHNlbGYud2FudG9iamVjdHM6CiAgICAgICAgICAgICBwYXNzZWRfZXhwZWN0ZWQgKz0gKCgyLjUsIDIpLCkKICAgICAgICAgZm9yIHBhaXIgaW4gcGFzc2VkX2V4cGVjdGVkOgotICAgICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89cGFpclswXSkKKyAgICAgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgZnJvbV89cGFpclswXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWx1ZSwgcGFpclsxXSkKICAgICAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPScyLjUnKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIGZyb21fPScyLjUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB4Ll92YXJpYWJsZS5nZXQpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPU5vbmUpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgZnJvbV89Tm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgeC5fdmFyaWFibGUuZ2V0KQogICAgICAgICB4LmRlc3Ryb3koKQogICAgICAgICAjIHZhcmlhYmxlIHNob3VsZCBoYXZlIGl0cyBkZWZhdWx0IHZhbHVlIHNldCB0byB0aGUgZnJvbV8gdmFsdWUKLSAgICAgICAgbXl2YXIgPSB0a2ludGVyLkRvdWJsZVZhcih2YWx1ZT0yMCkKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIG15dmFyID0gdGtpbnRlci5Eb3VibGVWYXIoc2VsZi5yb290LCB2YWx1ZT0yMCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCB2YXJpYWJsZT1teXZhcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCAwKQogICAgICAgICB4LmRlc3Ryb3koKQogICAgICAgICAjIGNoZWNrIHRoYXQgaXQgaXMgcmVhbGx5IHVzaW5nIGEgRG91YmxlVmFyCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyLCBmcm9tXz0wLjUpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgdmFyaWFibGU9bXl2YXIsIGZyb21fPTAuNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCAwLjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fdmFyaWFibGUuX25hbWUsIG15dmFyLl9uYW1lKQogICAgICAgICB4LmRlc3Ryb3koKQpAQCAtOTEsMjUgKzk3LDI2IEBACiAgICAgICAgIGRlZiBjaGVja19wb3NpdGlvbnMoc2NhbGUsIHNjYWxlX3BvcywgbGFiZWwsIGxhYmVsX3Bvcyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYWxlLnBhY2tfaW5mbygpWydzaWRlJ10sIHNjYWxlX3BvcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGFiZWwucGxhY2VfaW5mbygpWydhbmNob3InXSwgbGFiZWxfcG9zKQotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShjb21wb3VuZD0ndG9wJykKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBjb21wb3VuZD0ndG9wJykKICAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICdib3R0b20nLCB4LmxhYmVsLCAnbicpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGNvbXBvdW5kPSdib3R0b20nKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIGNvbXBvdW5kPSdib3R0b20nKQogICAgICAgICBjaGVja19wb3NpdGlvbnMoeC5zY2FsZSwgJ3RvcCcsIHgubGFiZWwsICdzJykKICAgICAgICAgeC5kZXN0cm95KCkKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoY29tcG91bmQ9J3Vua25vd24nKSAjIGludmVydCBkZWZhdWx0IHBvc2l0aW9ucworICAgICAgICAjIGludmVydCBkZWZhdWx0IHBvc2l0aW9ucworICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIGNvbXBvdW5kPSd1bmtub3duJykKICAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICd0b3AnLCB4LmxhYmVsLCAncycpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkgIyB0YWtlIGRlZmF1bHQgcG9zaXRpb25zCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCkgIyB0YWtlIGRlZmF1bHQgcG9zaXRpb25zCiAgICAgICAgIGNoZWNrX3Bvc2l0aW9ucyh4LnNjYWxlLCAnYm90dG9tJywgeC5sYWJlbCwgJ24nKQogICAgICAgICB4LmRlc3Ryb3koKQogCiAgICAgICAgICMgZXh0cmEsIGFuZCBpbnZhbGlkLCBrd2FyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgdHRrLkxhYmVsZWRTY2FsZSwgYT0nYicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHR0ay5MYWJlbGVkU2NhbGUsIG1hc3RlciwgYT0nYicpCiAKIAogICAgIGRlZiB0ZXN0X2hvcml6b250YWxfcmFuZ2Uoc2VsZik6Ci0gICAgICAgIGxzY2FsZSA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89MCwgdG89MTApCisgICAgICAgIGxzY2FsZSA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBmcm9tXz0wLCB0bz0xMCkKICAgICAgICAgbHNjYWxlLnBhY2soKQogICAgICAgICBsc2NhbGUud2FpdF92aXNpYmlsaXR5KCkKICAgICAgICAgbHNjYWxlLnVwZGF0ZSgpCkBAIC0xMjgsNyArMTM1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwcmV2X3hjb29yZCwgY3Vycl94Y29vcmQpCiAgICAgICAgICMgdGhlIGxhYmVsIHdpZGdldCBzaG91bGQgaGF2ZSBiZWVuIHJlcG9zaXRpb25lZCB0b28KICAgICAgICAgbGluZm9fMiA9IGxzY2FsZS5sYWJlbC5wbGFjZV9pbmZvKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc2NhbGUubGFiZWxbJ3RleHQnXSwgMCBpZiBsc2NhbGUudGsud2FudG9iamVjdHMoKSBlbHNlICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc2NhbGUubGFiZWxbJ3RleHQnXSwgMCBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UgJzAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJfeGNvb3JkLCBpbnQobGluZm9fMlsneCddKSkKICAgICAgICAgIyBjaGFuZ2UgdGhlIHJhbmdlIGJhY2sKICAgICAgICAgbHNjYWxlLnNjYWxlLmNvbmZpZ3VyZShmcm9tXz0wLCB0bz0xMCkKQEAgLTEzOSw3ICsxNDYsNyBAQAogCiAKICAgICBkZWYgdGVzdF92YXJpYWJsZV9jaGFuZ2Uoc2VsZik6Ci0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290KQogICAgICAgICB4LnBhY2soKQogICAgICAgICB4LndhaXRfdmlzaWJpbGl0eSgpCiAgICAgICAgIHgudXBkYXRlKCkKQEAgLTE1MSwxMyArMTU4LDEzIEBACiAgICAgICAgICMgYXQgdGhlIHNhbWUgdGltZSB0aGlzIHNob3VsZG4ndCBhZmZlY3QgdGVzdCBvdXRjb21lCiAgICAgICAgIHgudXBkYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxhYmVsWyd0ZXh0J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsIGlmIHgudGsud2FudG9iamVjdHMoKSBlbHNlIHN0cihuZXd2YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbCBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2Ugc3RyKG5ld3ZhbCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih4LnNjYWxlLmNvb3JkcygpWzBdLCBjdXJyX3hjb29yZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnNjYWxlLmNvb3JkcygpWzBdLAogICAgICAgICAgICAgaW50KHgubGFiZWwucGxhY2VfaW5mbygpWyd4J10pKQogCiAgICAgICAgICMgdmFsdWUgb3V0c2lkZSByYW5nZQotICAgICAgICBpZiB4LnRrLndhbnRvYmplY3RzKCk6CisgICAgICAgIGlmIHNlbGYud2FudG9iamVjdHM6CiAgICAgICAgICAgICBjb252ID0gbGFtYmRhIHg6IHgKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbnYgPSBpbnQKQEAgLTE3MSw3ICsxNzgsNyBAQAogCiAKICAgICBkZWYgdGVzdF9yZXNpemUoc2VsZik6Ci0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290KQogICAgICAgICB4LnBhY2soZXhwYW5kPVRydWUsIGZpbGw9J2JvdGgnKQogICAgICAgICB4LndhaXRfdmlzaWJpbGl0eSgpCiAgICAgICAgIHgudXBkYXRlKCkKQEAgLTE5MCwyMCArMTk3LDIwIEBACiAgICAgICAgIHguZGVzdHJveSgpCiAKIAotY2xhc3MgT3B0aW9uTWVudVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgT3B0aW9uTWVudVRlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCi0gICAgICAgIHNlbGYudGV4dHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKCkKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIHNlbGYudGV4dHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKHNlbGYucm9vdCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgZGVsIHNlbGYudGV4dHZhcgotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKIAogCiAgICAgZGVmIHRlc3Rfd2lkZ2V0X2Rlc3Ryb3koc2VsZik6Ci0gICAgICAgIHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKCkKLSAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHZhcikKKyAgICAgICAgdmFyID0gdGtpbnRlci5TdHJpbmdWYXIoc2VsZi5yb290KQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoc2VsZi5yb290LCB2YXIpCiAgICAgICAgIG5hbWUgPSB2YXIuX25hbWUKICAgICAgICAgb3B0bWVudS51cGRhdGVfaWRsZXRhc2tzKCkKICAgICAgICAgb3B0bWVudS5kZXN0cm95KCkKQEAgLTIxNCw5ICsyMjEsOSBAQAogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsCi0gICAgICAgICAgICB0dGsuT3B0aW9uTWVudSwgTm9uZSwgc2VsZi50ZXh0dmFyLCBpbnZhbGlkPSd0aGluZycpCisgICAgICAgICAgICB0dGsuT3B0aW9uTWVudSwgc2VsZi5yb290LCBzZWxmLnRleHR2YXIsIGludmFsaWQ9J3RoaW5nJykKIAotICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCAnYicsICdhJywgJ2InKQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoc2VsZi5yb290LCBzZWxmLnRleHR2YXIsICdiJywgJ2EnLCAnYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0bWVudS5fdmFyaWFibGUuZ2V0KCksICdiJykKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0bWVudVsnbWVudSddKQpAQCAtMjI4LDcgKzIzNSw3IEBACiAgICAgZGVmIHRlc3RfbWVudShzZWxmKToKICAgICAgICAgaXRlbXMgPSAoJ2EnLCAnYicsICdjJykKICAgICAgICAgZGVmYXVsdCA9ICdhJwotICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCBkZWZhdWx0LCAqaXRlbXMpCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShzZWxmLnJvb3QsIHNlbGYudGV4dHZhciwgZGVmYXVsdCwgKml0ZW1zKQogICAgICAgICBmb3VuZF9kZWZhdWx0ID0gRmFsc2UKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGl0ZW1zKSk6CiAgICAgICAgICAgICB2YWx1ZSA9IG9wdG1lbnVbJ21lbnUnXS5lbnRyeWNnZXQoaSwgJ3ZhbHVlJykKQEAgLTI0MCw3ICsyNDcsNyBAQAogCiAgICAgICAgICMgZGVmYXVsdCBzaG91bGRuJ3QgYmUgaW4gbWVudSBpZiBpdCBpcyBub3QgcGFydCBvZiB2YWx1ZXMKICAgICAgICAgZGVmYXVsdCA9ICdkJwotICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCBkZWZhdWx0LCAqaXRlbXMpCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShzZWxmLnJvb3QsIHNlbGYudGV4dHZhciwgZGVmYXVsdCwgKml0ZW1zKQogICAgICAgICBjdXJyID0gTm9uZQogICAgICAgICBpID0gMAogICAgICAgICB3aGlsZSBUcnVlOgpAQCAtMjY5LDcgKzI3Niw3IEBACiAgICAgICAgIGRlZiBjYl90ZXN0KGl0ZW0pOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCBpdGVtc1sxXSkKICAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKFRydWUpCi0gICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShOb25lLCBzZWxmLnRleHR2YXIsICdhJywgY29tbWFuZD1jYl90ZXN0LAorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoc2VsZi5yb290LCBzZWxmLnRleHR2YXIsICdhJywgY29tbWFuZD1jYl90ZXN0LAogICAgICAgICAgICAgKml0ZW1zKQogICAgICAgICBvcHRtZW51WydtZW51J10uaW52b2tlKDEpCiAgICAgICAgIGlmIG5vdCBzdWNjZXNzOgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkKaW5kZXggMTk4NmU2Ni4uYzlkY2Y5NyAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3RfZnVuY3Rpb25zLnB5CkBAIC0xLDcgKzEsMTkgQEAKICMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRraW50ZXIKIGZyb20gdGtpbnRlciBpbXBvcnQgdHRrCiAKK2NsYXNzIE1vY2tUa0FwcDoKKworICAgIGRlZiBzcGxpdGxpc3Qoc2VsZiwgYXJnKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIHR1cGxlKToKKyAgICAgICAgICAgIHJldHVybiBhcmcKKyAgICAgICAgcmV0dXJuIGFyZy5zcGxpdCgnOicpCisKKyAgICBkZWYgd2FudG9iamVjdHMoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKwogY2xhc3MgTW9ja1RjbE9iaihvYmplY3QpOgogICAgIHR5cGVuYW1lID0gJ3Rlc3QnCiAKQEAgLTMxMiwyNiArMzI0LDEzIEBACiAgICAgICAgICAgICAiLW9wdCB7MyAybX0iKQogCiAKLSAgICBkZWYgdGVzdF9kaWN0X2Zyb21fdGNsdHVwbGUoc2VsZik6Ci0gICAgICAgIGZha2V0dHVwbGUgPSAoJy1hJywgJ3sxIDIgM30nLCAnLXNvbWV0aGluZycsICdmb28nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoZmFrZXR0dXBsZSwgRmFsc2UpLAotICAgICAgICAgICAgeyctYSc6ICd7MSAyIDN9JywgJy1zb21ldGhpbmcnOiAnZm9vJ30pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZShmYWtldHR1cGxlKSwKLSAgICAgICAgICAgIHsnYSc6ICd7MSAyIDN9JywgJ3NvbWV0aGluZyc6ICdmb28nfSkKLQotICAgICAgICAjIHBhc3NpbmcgYSB0dXBsZSB3aXRoIGEgc2luZ2xlIGl0ZW0gc2hvdWxkIHJldHVybiBhbiBlbXB0eSBkaWN0LAotICAgICAgICAjIHNpbmNlIGl0IHRyaWVzIHRvIGJyZWFrIHRoZSB0dXBsZSBieSBwYWlycy4KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZSgoJ3NpbmdsZScsICkpKQotCi0gICAgICAgIHNzcGVjID0gTW9ja1N0YXRlU3BlYygnYScsICdiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZSgoJy1hJywgKHNzcGVjLCAndmFsJykpKSwKLSAgICAgICAgICAgIHsnYSc6IFsoJ2EnLCAnYicsICd2YWwnKV19KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKE1vY2tUY2xPYmooJy1wYWRkaW5nJyksCi0gICAgICAgICAgICBbTW9ja1RjbE9iaignMScpLCAyLCBNb2NrVGNsT2JqKCczbScpXSkpLAotICAgICAgICAgICAgeydwYWRkaW5nJzogWzEsIDIsICczbSddfSkKKyAgICBkZWYgdGVzdF90Y2xvYmpfdG9fcHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB0dGsuX3RjbG9ial90b19weSgoTW9ja1N0YXRlU3BlYygnYScsICdiJyksICd2YWwnKSksCisgICAgICAgICAgICBbKCdhJywgJ2InLCAndmFsJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdHRrLl90Y2xvYmpfdG9fcHkoW01vY2tUY2xPYmooJzEnKSwgMiwgTW9ja1RjbE9iaignM20nKV0pLAorICAgICAgICAgICAgWzEsIDIsICczbSddKQogCiAKICAgICBkZWYgdGVzdF9saXN0X2Zyb21fc3RhdGVzcGVjKHNlbGYpOgpAQCAtMzUyLDIwICszNTEsMjIgQEAKIAogCiAgICAgZGVmIHRlc3RfbGlzdF9mcm9tX2xheW91dHR1cGxlKHNlbGYpOgorICAgICAgICB0ayA9IE1vY2tUa0FwcCgpCisKICAgICAgICAgIyBlbXB0eSBsYXlvdXQgdHVwbGUKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSgoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUodGssICgpKSkKIAogICAgICAgICAjIHNob3J0ZXN0IGxheW91dCB0dXBsZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKCgnbmFtZScsICkpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCAoJ25hbWUnLCApKSwKICAgICAgICAgICAgIFsoJ25hbWUnLCB7fSldKQogCiAgICAgICAgICMgbm90IHNvIGludGVyZXN0aW5nIGx0dXBsZQogICAgICAgICBzYW1wbGVfbHR1cGxlID0gKCduYW1lJywgJy1vcHRpb24nLCAndmFsdWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHNhbXBsZV9sdHVwbGUpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCBzYW1wbGVfbHR1cGxlKSwKICAgICAgICAgICAgIFsoJ25hbWUnLCB7J29wdGlvbic6ICd2YWx1ZSd9KV0pCiAKICAgICAgICAgIyBlbXB0eSBjaGlsZHJlbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLAogICAgICAgICAgICAgKCdzb21ldGhpbmcnLCAnLWNoaWxkcmVuJywgKCkpKSwKICAgICAgICAgICAgIFsoJ3NvbWV0aGluZycsIHsnY2hpbGRyZW4nOiBbXX0pXQogICAgICAgICApCkBAIC0zNzgsNyArMzc5LDcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICApCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShsdHVwbGUpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCBsdHVwbGUpLAogICAgICAgICAgICAgWygnbmFtZScsIHsnb3B0aW9uJzogJ25pY2VvbmUnLCAnY2hpbGRyZW4nOgogICAgICAgICAgICAgICAgIFsoJ290aGVyb25lJywgeydvdGhlcm9wdCc6ICdvdGhlcnZhbHVlJywgJ2NoaWxkcmVuJzoKICAgICAgICAgICAgICAgICAgICAgWygnY2hpbGQnLCB7fSldCkBAIC0zODcsMjkgKzM4OCwzNSBAQAogICAgICAgICApCiAKICAgICAgICAgIyBiYWQgdHVwbGVzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwgdGssCiAgICAgICAgICAgICAoJ25hbWUnLCAnbm9fbWludXMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLCB0aywKICAgICAgICAgICAgICgnbmFtZScsICdub19taW51cycsICd2YWx1ZScpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsIHRrLAogICAgICAgICAgICAgKCdzb21ldGhpbmcnLCAnLWNoaWxkcmVuJykpICMgbm8gY2hpbGRyZW4KLSAgICAgICAgaW1wb3J0IHRraW50ZXIKLSAgICAgICAgaWYgbm90IHRraW50ZXIuX2RlZmF1bHRfcm9vdCBvciB0a2ludGVyLl9kZWZhdWx0X3Jvb3Qud2FudG9iamVjdHMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLAotICAgICAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicsICd2YWx1ZScpKSAjIGludmFsaWQgY2hpbGRyZW4KIAogCiAgICAgZGVmIHRlc3RfdmFsX29yX2RpY3Qoc2VsZik6Ci0gICAgICAgIGRlZiBmdW5jKG9wdCwgdmFsPU5vbmUpOgorICAgICAgICBkZWYgZnVuYyhyZXMsIG9wdD1Ob25lLCB2YWw9Tm9uZSk6CisgICAgICAgICAgICBpZiBvcHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzCiAgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToKICAgICAgICAgICAgICAgICByZXR1cm4gInRlc3QgdmFsIgogICAgICAgICAgICAgcmV0dXJuIChvcHQsIHZhbCkKIAotICAgICAgICBvcHRpb25zID0geyd0ZXN0JzogTm9uZX0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3ZhbF9vcl9kaWN0KG9wdGlvbnMsIGZ1bmMpLCAidGVzdCB2YWwiKQorICAgICAgICB0ayA9IE1vY2tUa0FwcCgpCisgICAgICAgIHRrLmNhbGwgPSBmdW5jCiAKLSAgICAgICAgb3B0aW9ucyA9IHsndGVzdCc6IDN9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdChvcHRpb25zLCBmdW5jKSwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3ZhbF9vcl9kaWN0KHRrLCB7fSwgJy10ZXN0OjMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3Rlc3QnOiAnMyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fdmFsX29yX2RpY3QodGssIHt9LCAoJy10ZXN0JywgMykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsndGVzdCc6IDN9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdCh0aywgeyd0ZXN0JzogTm9uZX0sICd4OnknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCB2YWwnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdCh0aywgeyd0ZXN0JzogM30sICd4OnknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3Rlc3QnOiAzfSkKIAogCiAgICAgZGVmIHRlc3RfY29udmVydF9zdHJpbmd2YWwoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfc3R5bGUucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfc3R5bGUucHkKaW5kZXggMGRhMGU1ZC4uMzUzNzUzNiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3N0eWxlLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9zdHlsZS5weQpAQCAtMiwxNSArMiwxNSBAQAogaW1wb3J0IHRraW50ZXIKIGZyb20gdGtpbnRlciBpbXBvcnQgdHRrCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAotCi1pbXBvcnQgdGtpbnRlci50ZXN0LnN1cHBvcnQgYXMgc3VwcG9ydAorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgQWJzdHJhY3RUa1Rlc3QKIAogcmVxdWlyZXMoJ2d1aScpCiAKLWNsYXNzIFN0eWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTdHlsZVRlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5zdHlsZSA9IHR0ay5TdHlsZSgpCisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBzZWxmLnN0eWxlID0gdHRrLlN0eWxlKHNlbGYucm9vdCkKIAogCiAgICAgZGVmIHRlc3RfY29uZmlndXJlKHNlbGYpOgpAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICBzdHlsZSA9IHNlbGYuc3R5bGUKICAgICAgICAgc3R5bGUubWFwKCdUQnV0dG9uJywgYmFja2dyb3VuZD1bKCdhY3RpdmUnLCAnYmFja2dyb3VuZCcsICdibHVlJyldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLm1hcCgnVEJ1dHRvbicsICdiYWNrZ3JvdW5kJyksCi0gICAgICAgICAgICBbKCdhY3RpdmUnLCAnYmFja2dyb3VuZCcsICdibHVlJyldIGlmIHN0eWxlLnRrLndhbnRvYmplY3RzKCkgZWxzZQorICAgICAgICAgICAgWygnYWN0aXZlJywgJ2JhY2tncm91bmQnLCAnYmx1ZScpXSBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UKICAgICAgICAgICAgIFsoJ2FjdGl2ZSBiYWNrZ3JvdW5kJywgJ2JsdWUnKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdHlsZS5tYXAoJ1RCdXR0b24nKSwgZGljdCkKIApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQppbmRleCAzYWMxNGJlLi5mNzNhYzc5IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtNCw5ICs0LDkgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcwogaW1wb3J0IHN5cwogCi1pbXBvcnQgdGtpbnRlci50ZXN0LnN1cHBvcnQgYXMgc3VwcG9ydAogZnJvbSB0a2ludGVyLnRlc3QudGVzdF90dGsudGVzdF9mdW5jdGlvbnMgaW1wb3J0IE1vY2tUY2xPYmoKLWZyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IHRjbF92ZXJzaW9uLCBnZXRfdGtfcGF0Y2hsZXZlbAorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgKEFic3RyYWN0VGtUZXN0LCB0Y2xfdmVyc2lvbiwgZ2V0X3RrX3BhdGNobGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGVfbW91c2VfY2xpY2spCiBmcm9tIHRraW50ZXIudGVzdC53aWRnZXRfdGVzdHMgaW1wb3J0IChhZGRfc3RhbmRhcmRfb3B0aW9ucywgbm9jb252LAogICAgIEFic3RyYWN0V2lkZ2V0VGVzdCwgU3RhbmRhcmRPcHRpb25zVGVzdHMsIEludGVnZXJTaXplVGVzdHMsIFBpeGVsU2l6ZVRlc3RzLAogICAgIHNldFVwTW9kdWxlKQpAQCAtNTMsMTkgKzUzLDE1IEBACiAgICAgICAgIHBhc3MKIAogCi1jbGFzcyBXaWRnZXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFdpZGdldFRlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0cyBtZXRob2RzIGF2YWlsYWJsZSBpbiBldmVyeSB0dGsgd2lkZ2V0LiIiIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKLSAgICAgICAgc2VsZi53aWRnZXQgPSB0dGsuQnV0dG9uKHdpZHRoPTAsIHRleHQ9IlRleHQiKQorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgc2VsZi53aWRnZXQgPSB0dGsuQnV0dG9uKHNlbGYucm9vdCwgd2lkdGg9MCwgdGV4dD0iVGV4dCIpCiAgICAgICAgIHNlbGYud2lkZ2V0LnBhY2soKQogICAgICAgICBzZWxmLndpZGdldC53YWl0X3Zpc2liaWxpdHkoKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLndpZGdldC5kZXN0cm95KCkKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKLQogCiAgICAgZGVmIHRlc3RfaWRlbnRpZnkoc2VsZik6CiAgICAgICAgIHNlbGYud2lkZ2V0LnVwZGF0ZV9pZGxldGFza3MoKQpAQCAtMTI4LDcgKzEyNCw3IEBACiAgICAgICAgICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLkZyYW1lKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKIApAQCAtMTQxLDcgKzEzNyw3IEBACiAgICAgICAgICd0ZXh0JywgJ3VuZGVybGluZScsICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLkxhYmVsRnJhbWUoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2xhYmVsYW5jaG9yKHNlbGYpOgpAQCAtMTYxLDggKzE1Nyw4IEBACiBjbGFzcyBBYnN0cmFjdExhYmVsVGVzdChBYnN0cmFjdFdpZGdldFRlc3QpOgogCiAgICAgZGVmIGNoZWNrSW1hZ2VQYXJhbShzZWxmLCB3aWRnZXQsIG5hbWUpOgotICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnaW1hZ2UxJykKLSAgICAgICAgaW1hZ2UyID0gdGtpbnRlci5QaG90b0ltYWdlKCdpbWFnZTInKQorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZShtYXN0ZXI9c2VsZi5yb290LCBuYW1lPSdpbWFnZTEnKQorICAgICAgICBpbWFnZTIgPSB0a2ludGVyLlBob3RvSW1hZ2UobWFzdGVyPXNlbGYucm9vdCwgbmFtZT0naW1hZ2UyJykKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgbmFtZSwgaW1hZ2UsIGV4cGVjdGVkPSgnaW1hZ2UxJywpKQogICAgICAgICBzZWxmLmNoZWNrUGFyYW0od2lkZ2V0LCBuYW1lLCAnaW1hZ2UxJywgZXhwZWN0ZWQ9KCdpbWFnZTEnLCkpCiAgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsIG5hbWUsIChpbWFnZSwpLCBleHBlY3RlZD0oJ2ltYWdlMScsKSkKQEAgLTE5OSw3ICsxOTUsNyBAQAogICAgICkKICAgICBfY29udl9waXhlbHMgPSBub2NvbnYKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5MYWJlbChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfZm9udChzZWxmKToKQEAgLTIxNiw3ICsyMTIsNyBAQAogICAgICAgICAndW5kZXJsaW5lJywgJ3dpZHRoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuQnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgpAQCAtMjI1LDcgKzIyMSw3IEBACiAKICAgICBkZWYgdGVzdF9pbnZva2Uoc2VsZik6CiAgICAgICAgIHN1Y2Nlc3MgPSBbXQotICAgICAgICBidG4gPSB0dGsuQnV0dG9uKGNvbW1hbmQ9bGFtYmRhOiBzdWNjZXNzLmFwcGVuZCgxKSkKKyAgICAgICAgYnRuID0gdHRrLkJ1dHRvbihzZWxmLnJvb3QsIGNvbW1hbmQ9bGFtYmRhOiBzdWNjZXNzLmFwcGVuZCgxKSkKICAgICAgICAgYnRuLmludm9rZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQogCkBAIC0yNDEsNyArMjM3LDcgQEAKICAgICAgICAgJ3VuZGVybGluZScsICd2YXJpYWJsZScsICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLkNoZWNrYnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9vZmZ2YWx1ZShzZWxmKToKQEAgLTI1OCw3ICsyNTQsNyBAQAogICAgICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoMSkKICAgICAgICAgICAgIHJldHVybiAiY2IgdGVzdCBjYWxsZWQiCiAKLSAgICAgICAgY2J0biA9IHR0ay5DaGVja2J1dHRvbihjb21tYW5kPWNiX3Rlc3QpCisgICAgICAgIGNidG4gPSB0dGsuQ2hlY2tidXR0b24oc2VsZi5yb290LCBjb21tYW5kPWNiX3Rlc3QpCiAgICAgICAgICMgdGhlIHZhcmlhYmxlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0dGsuQ2hlY2tidXR0b24gaXMgYWN0dWFsbHkKICAgICAgICAgIyB1bmRlZmluZWQgdGlsbCB3ZSBpbnZva2UgdGhlIENoZWNrYnV0dG9uCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2J0bi5zdGF0ZSgpLCAoJ2FsdGVybmF0ZScsICkpCkBAIC0yODksMTUgKzI4NSw5IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKCkuc2V0VXAoKQotICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKICAgICAgICAgc2VsZi5jb21ibyA9IHNlbGYuY3JlYXRlKCkKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5jb21iby5kZXN0cm95KCkKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKLSAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCi0KLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuQ29tYm9ib3goc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2hlaWdodChzZWxmKToKQEAgLTQwNSw3ICszOTUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLmNvbWJvLmN1cnJlbnQsICcnKQogCiAgICAgICAgICMgdGVzdGluZyBjcmVhdGluZyBjb21ib2JveCB3aXRoIGVtcHR5IHN0cmluZyBpbiB2YWx1ZXMKLSAgICAgICAgY29tYm8yID0gdHRrLkNvbWJvYm94KHZhbHVlcz1bMSwgMiwgJyddKQorICAgICAgICBjb21ibzIgPSB0dGsuQ29tYm9ib3goc2VsZi5yb290LCB2YWx1ZXM9WzEsIDIsICcnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21ibzJbJ3ZhbHVlcyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnMScsICcyJywgJycpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSAnMSAyIHt9JykKICAgICAgICAgY29tYm8yLmRlc3Ryb3koKQpAQCAtNDIzLDE1ICs0MTMsOSBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCiAgICAgICAgIHNlbGYuZW50cnkgPSBzZWxmLmNyZWF0ZSgpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuZW50cnkuZGVzdHJveSgpCi0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0gICAgICAgIHN1cGVyKCkudGVhckRvd24oKQotCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLkVudHJ5KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkY29tbWFuZChzZWxmKToKQEAgLTQ2MCwxMCArNDQ0LDcgQEAKIAogCiAgICAgZGVmIHRlc3RfYmJveChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5lbnRyeS5iYm94KDApKSwgNCkKLSAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5lbnRyeS5iYm94KDApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW0sIGludCkKLQorICAgICAgICBzZWxmLmFzc2VydElzQm91bmRpbmdCb3goc2VsZi5lbnRyeS5iYm94KDApKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLmVudHJ5LmJib3gsICdub2luZGV4JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5iYm94LCBOb25lKQogCkBAIC01NjEsMTUgKzU0Miw5IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKCkuc2V0VXAoKQotICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKICAgICAgICAgc2VsZi5wYW5lZCA9IHNlbGYuY3JlYXRlKCkKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5wYW5lZC5kZXN0cm95KCkKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKLSAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCi0KLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuUGFuZWRXaW5kb3coc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X29yaWVudChzZWxmKToKQEAgLTU5MSwxMyArNTY2LDEzIEBACiAgICAgICAgIGxhYmVsLmRlc3Ryb3koKQogICAgICAgICBjaGlsZC5kZXN0cm95KCkKICAgICAgICAgIyBhbm90aGVyIGF0dGVtcHQKLSAgICAgICAgbGFiZWwgPSB0dGsuTGFiZWwoKQorICAgICAgICBsYWJlbCA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCiAgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKGxhYmVsKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmFkZCwgY2hpbGQpCiAgICAgICAgIGNoaWxkLmRlc3Ryb3koKQogICAgICAgICBsYWJlbC5kZXN0cm95KCkKIAotICAgICAgICBnb29kX2NoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgZ29vZF9jaGlsZCA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYucGFuZWQuYWRkKGdvb2RfY2hpbGQpCiAgICAgICAgICMgcmUtYWRkaW5nIGEgY2hpbGQgaXMgbm90IGFjY2VwdGVkCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuYWRkLCBnb29kX2NoaWxkKQpAQCAtNjE1LDcgKzU5MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuZm9yZ2V0LCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmZvcmdldCwgMCkKIAotICAgICAgICBzZWxmLnBhbmVkLmFkZCh0dGsuTGFiZWwoKSkKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQodHRrLkxhYmVsKHNlbGYucm9vdCkpCiAgICAgICAgIHNlbGYucGFuZWQuZm9yZ2V0KDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuZm9yZ2V0LCAwKQogCkBAIC02MjUsOSArNjAwLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5pbnNlcnQsIDAsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCAwLCAwKQogCi0gICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKCkKLSAgICAgICAgY2hpbGQyID0gdHRrLkxhYmVsKCkKLSAgICAgICAgY2hpbGQzID0gdHRrLkxhYmVsKCkKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoc2VsZi5yb290KQorICAgICAgICBjaGlsZDIgPSB0dGsuTGFiZWwoc2VsZi5yb290KQorICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoc2VsZi5yb290KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCAwLCBjaGlsZCkKIApAQCAtNjU4LDcgKzYzMyw3IEBACiAgICAgZGVmIHRlc3RfcGFuZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5wYW5lLCAwKQogCi0gICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoc2VsZi5yb290KQogICAgICAgICBzZWxmLnBhbmVkLmFkZChjaGlsZCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucGFuZWQucGFuZSgwKSwgZGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmUoMCwgd2VpZ2h0PU5vbmUpLApAQCAtNzAzLDcgKzY3OCw3IEBACiAgICAgICAgICd1bmRlcmxpbmUnLCAndmFsdWUnLCAndmFyaWFibGUnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5SYWRpb2J1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfdmFsdWUoc2VsZik6CkBAIC03MTYsOSArNjkxLDExIEBACiAgICAgICAgICAgICBzdWNjZXNzLmFwcGVuZCgxKQogICAgICAgICAgICAgcmV0dXJuICJjYiB0ZXN0IGNhbGxlZCIKIAotICAgICAgICBteXZhciA9IHRraW50ZXIuSW50VmFyKCkKLSAgICAgICAgY2J0biA9IHR0ay5SYWRpb2J1dHRvbihjb21tYW5kPWNiX3Rlc3QsIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0wKQotICAgICAgICBjYnRuMiA9IHR0ay5SYWRpb2J1dHRvbihjb21tYW5kPWNiX3Rlc3QsIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0xKQorICAgICAgICBteXZhciA9IHRraW50ZXIuSW50VmFyKHNlbGYucm9vdCkKKyAgICAgICAgY2J0biA9IHR0ay5SYWRpb2J1dHRvbihzZWxmLnJvb3QsIGNvbW1hbmQ9Y2JfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1teXZhciwgdmFsdWU9MCkKKyAgICAgICAgY2J0bjIgPSB0dGsuUmFkaW9idXR0b24oc2VsZi5yb290LCBjb21tYW5kPWNiX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0xKQogCiAgICAgICAgIGlmIHNlbGYud2FudG9iamVjdHM6CiAgICAgICAgICAgICBjb252ID0gbGFtYmRhIHg6IHgKQEAgLTc1MSw3ICs3MjgsNyBAQAogICAgICAgICAndW5kZXJsaW5lJywgJ3dpZHRoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuTWVudWJ1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0aW9uKHNlbGYpOgpAQCAtNzc3LDE3ICs3NTQsMTEgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCi0gICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQogICAgICAgICBzZWxmLnNjYWxlID0gc2VsZi5jcmVhdGUoKQogICAgICAgICBzZWxmLnNjYWxlLnBhY2soKQogICAgICAgICBzZWxmLnNjYWxlLnVwZGF0ZSgpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuc2NhbGUuZGVzdHJveSgpCi0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0gICAgICAgIHN1cGVyKCkudGVhckRvd24oKQotCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLlNjYWxlKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9mcm9tKHNlbGYpOgpAQCAtODU5LDcgKzgzMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udihzZWxmLnNjYWxlLmdldCgpKSwgbWluKQogCiAgICAgICAgICMgY2hhbmdpbmcgZGlyZWN0bHkgdGhlIHZhcmlhYmxlIGRvZXNuJ3QgaW1wb3NlIHRoaXMgbGltaXRhdGlvbiB0aG8KLSAgICAgICAgdmFyID0gdGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICB2YXIgPSB0a2ludGVyLkRvdWJsZVZhcihzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYuc2NhbGVbJ3ZhcmlhYmxlJ10gPSB2YXIKICAgICAgICAgdmFyLnNldChtYXggKyA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnYoc2VsZi5zY2FsZS5nZXQoKSksIHZhci5nZXQoKSkKQEAgLTg4OSw3ICs4NjAsNyBAQAogICAgIF9jb252X3BpeGVscyA9IG5vY29udgogICAgIGRlZmF1bHRfb3JpZW50ID0gJ2hvcml6b250YWwnCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuUHJvZ3Jlc3NiYXIoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2xlbmd0aChzZWxmKToKQEAgLTkyMyw3ICs4OTQsNyBAQAogICAgICkKICAgICBkZWZhdWx0X29yaWVudCA9ICd2ZXJ0aWNhbCcKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5TY3JvbGxiYXIoc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC05MzUsMjEgKzkwNiwxMyBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCiAgICAgICAgIHNlbGYubmIgPSBzZWxmLmNyZWF0ZShwYWRkaW5nPTApCi0gICAgICAgIHNlbGYuY2hpbGQxID0gdHRrLkxhYmVsKCkKLSAgICAgICAgc2VsZi5jaGlsZDIgPSB0dGsuTGFiZWwoKQorICAgICAgICBzZWxmLmNoaWxkMSA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuY2hpbGQyID0gdHRrLkxhYmVsKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDEsIHRleHQ9J2EnKQogICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMiwgdGV4dD0nYicpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuY2hpbGQxLmRlc3Ryb3koKQotICAgICAgICBzZWxmLmNoaWxkMi5kZXN0cm95KCkKLSAgICAgICAgc2VsZi5uYi5kZXN0cm95KCkKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKLSAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCi0KLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuTm90ZWJvb2soc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X3RhYl9pZGVudGlmaWVycyhzZWxmKToKQEAgLTk4OCw3ICs5NTEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmhpZGUsICdoaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaGlkZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5hZGQsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuYWRkLCB0dGsuTGFiZWwoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5hZGQsIHR0ay5MYWJlbChzZWxmLnJvb3QpLAogICAgICAgICAgICAgdW5rbm93bj0nb3B0aW9uJykKIAogICAgICAgICB0YWJzID0gc2VsZi5uYi50YWJzKCkKQEAgLTk5Niw3ICs5NTksNyBAQAogICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgdGFicykKIAotICAgICAgICBjaGlsZCA9IHR0ay5MYWJlbCgpCisgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5uYi5hZGQoY2hpbGQsIHRleHQ9J2MnKQogICAgICAgICB0YWJzID0gc2VsZi5uYi50YWJzKCkKIApAQCAtMTA1NCw3ICsxMDE3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsIC0xLCB0YWJzWzBdKQogCiAgICAgICAgICMgbmV3IHRhYgotICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoc2VsZi5yb290KQogICAgICAgICBzZWxmLm5iLmluc2VydCgxLCBjaGlsZDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksICh0YWJzWzBdLCBzdHIoY2hpbGQzKSwgdGFic1sxXSkpCiAgICAgICAgIHNlbGYubmIuZm9yZ2V0KGNoaWxkMykKQEAgLTExMjAsNyArMTA4Myw3IEBACiAKICAgICAgICAgc2VsZi5uYi5zZWxlY3QoMCkKIAotICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYubmIsIDUsIDUpCisgICAgICAgIHNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYubmIsIDUsIDUpCiAgICAgICAgIHNlbGYubmIuZm9jdXNfZm9yY2UoKQogICAgICAgICBzZWxmLm5iLmV2ZW50X2dlbmVyYXRlKCc8Q29udHJvbC1UYWI+JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnNlbGVjdCgpLCBzdHIoc2VsZi5jaGlsZDIpKQpAQCAtMTEzNCw3ICsxMDk3LDcgQEAKICAgICAgICAgc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEsIHRleHQ9J2EnLCB1bmRlcmxpbmU9MCkKICAgICAgICAgc2VsZi5uYi5lbmFibGVfdHJhdmVyc2FsKCkKICAgICAgICAgc2VsZi5uYi5mb2N1c19mb3JjZSgpCi0gICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi5uYiwgNSwgNSkKKyAgICAgICAgc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi5uYiwgNSwgNSkKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgc2VsZi5uYi5ldmVudF9nZW5lcmF0ZSgnPE9wdGlvbi1hPicpCiAgICAgICAgIGVsc2U6CkBAIC0xMTUyLDE1ICsxMTE1LDkgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCi0gICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQogICAgICAgICBzZWxmLnR2ID0gc2VsZi5jcmVhdGUocGFkZGluZz0wKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLnR2LmRlc3Ryb3koKQotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQotICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKLQotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5UcmVldmlldyhzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfY29sdW1ucyhzZWxmKToKQEAgLTEyMTYsMTIgKzExNzMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGRyZW4pCiAKICAgICAgICAgYmJveCA9IHNlbGYudHYuYmJveChjaGlsZHJlblswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYmJveCksIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiYm94LCB0dXBsZSkKLSAgICAgICAgZm9yIGl0ZW0gaW4gYmJveDoKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0sIGludCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnZhbGlkIGJvdW5kaW5nIGJveDogJXMiICUgYmJveCkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydElzQm91bmRpbmdCb3goYmJveCkKIAogICAgICAgICAjIGNvbXBhcmUgd2lkdGggaW4gYmJveGVzCiAgICAgICAgIHNlbGYudHZbJ2NvbHVtbnMnXSA9IFsndGVzdCddCkBAIC0xNDAxLDcgKzEzNTMsNyBAQAogCiAgICAgZGVmIHRlc3RfaGVhZGluZ19jYWxsYmFjayhzZWxmKToKICAgICAgICAgZGVmIHNpbXVsYXRlX2hlYWRpbmdfY2xpY2soeCwgeSk6Ci0gICAgICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYudHYsIHgsIHkpCisgICAgICAgICAgICBzaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLnR2LCB4LCB5KQogICAgICAgICAgICAgc2VsZi50di51cGRhdGUoKQogCiAgICAgICAgIHN1Y2Nlc3MgPSBbXSAjIG5vIHN1Y2Nlc3MgZm9yIG5vdwpAQCAtMTU5MCw3ICsxNTQyLDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwb3NfeSksIDIpICMgaXRlbTEgYW5kIGl0ZW0yIHkgcG9zCiAgICAgICAgIGZvciB5IGluIHBvc195OgotICAgICAgICAgICAgc3VwcG9ydC5zaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLnR2LCAwLCB5KQorICAgICAgICAgICAgc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi50diwgMCwgeSkKIAogICAgICAgICAjIGJ5IG5vdyB0aGVyZSBzaG91bGQgYmUgNCB0aGluZ3MgaW4gdGhlIGV2ZW50cyBsaXN0LCBzaW5jZSBlYWNoCiAgICAgICAgICMgaXRlbSBoYWQgYSBiaW5kIGZvciB0d28gZXZlbnRzIHRoYXQgd2VyZSBzaW11bGF0ZWQgYWJvdmUKQEAgLTE2MjAsNyArMTU3Miw3IEBACiAgICAgKQogICAgIGRlZmF1bHRfb3JpZW50ID0gJ2hvcml6b250YWwnCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuU2VwYXJhdG9yKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKIApAQCAtMTYzMSw3ICsxNTgzLDcgQEAKICAgICAgICAgIyAnc3RhdGUnPwogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5TaXplZ3JpcChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiB0ZXN0c19ndWkgPSAoCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3dpZGdldF90ZXN0cy5weSBiL0xpYi90a2ludGVyL3Rlc3Qvd2lkZ2V0X3Rlc3RzLnB5CmluZGV4IGE5ODIwYTcuLjc3OTUzOGQgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3Qvd2lkZ2V0X3Rlc3RzLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3Qvd2lkZ2V0X3Rlc3RzLnB5CkBAIC0zLDkgKzMsOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdGtpbnRlcgotZnJvbSB0a2ludGVyLnR0ayBpbXBvcnQgc2V0dXBfbWFzdGVyLCBTY2FsZQotZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgKHRjbF92ZXJzaW9uLCByZXF1aXJlc190Y2wsIGdldF90a19wYXRjaGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc19jb252LCB0Y2xfb2JqX2VxKQorZnJvbSB0a2ludGVyLnR0ayBpbXBvcnQgU2NhbGUKK2Zyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IChBYnN0cmFjdFRrVGVzdCwgdGNsX3ZlcnNpb24sIHJlcXVpcmVzX3RjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdGtfcGF0Y2hsZXZlbCwgcGl4ZWxzX2NvbnYsIHRjbF9vYmpfZXEpCiBpbXBvcnQgdGVzdC5zdXBwb3J0CiAKIApAQCAtMjIsMjEgKzIyLDI1IEBACiAKIF9zZW50aW5lbCA9IG9iamVjdCgpCiAKLWNsYXNzIEFic3RyYWN0V2lkZ2V0VGVzdDoKK2NsYXNzIEFic3RyYWN0V2lkZ2V0VGVzdChBYnN0cmFjdFRrVGVzdCk6CiAgICAgX2NvbnZfcGl4ZWxzID0gc3RhdGljbWV0aG9kKHBpeGVsc19yb3VuZCkKICAgICBfY29udl9wYWRfcGl4ZWxzID0gTm9uZQotICAgIHdhbnRvYmplY3RzID0gVHJ1ZQorICAgIF9zdHJpbmdpZnkgPSBGYWxzZQogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLnJvb3QgPSBzZXR1cF9tYXN0ZXIoKQotICAgICAgICBzZWxmLnNjYWxpbmcgPSBmbG9hdChzZWxmLnJvb3QuY2FsbCgndGsnLCAnc2NhbGluZycpKQotICAgICAgICBpZiBub3Qgc2VsZi5yb290LndhbnRvYmplY3RzKCk6Ci0gICAgICAgICAgICBzZWxmLndhbnRvYmplY3RzID0gRmFsc2UKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2NhbGluZyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NjYWxpbmcKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc2NhbGluZyA9IGZsb2F0KHNlbGYucm9vdC5jYWxsKCd0aycsICdzY2FsaW5nJykpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2NhbGluZwogCi0gICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6Ci0gICAgICAgIHdpZGdldCA9IHNlbGYuX2NyZWF0ZSgqKmt3YXJncykKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdpZGdldC5kZXN0cm95KQotICAgICAgICByZXR1cm4gd2lkZ2V0CisgICAgZGVmIF9zdHIoc2VsZiwgdmFsdWUpOgorICAgICAgICBpZiBub3Qgc2VsZi5fc3RyaW5naWZ5IGFuZCBzZWxmLndhbnRvYmplY3RzIGFuZCB0Y2xfdmVyc2lvbiA+PSAoOCwgNik6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpOgorICAgICAgICAgICAgcmV0dXJuICcgJy5qb2luKG1hcChzZWxmLl9zdHIsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0cih2YWx1ZSkKIAogICAgIGRlZiBhc3NlcnRFcXVhbDIoc2VsZiwgYWN0dWFsLCBleHBlY3RlZCwgbXNnPU5vbmUsIGVxPW9iamVjdC5fX2VxX18pOgogICAgICAgICBpZiBlcShhY3R1YWwsIGV4cGVjdGVkKToKQEAgLTUwLDcgKzU0LDcgQEAKICAgICAgICAgICAgIGV4cGVjdGVkID0gdmFsdWUKICAgICAgICAgaWYgY29udjoKICAgICAgICAgICAgIGV4cGVjdGVkID0gY29udihleHBlY3RlZCkKLSAgICAgICAgaWYgbm90IHNlbGYud2FudG9iamVjdHM6CisgICAgICAgIGlmIHNlbGYuX3N0cmluZ2lmeSBvciBub3Qgc2VsZi53YW50b2JqZWN0czoKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIHR1cGxlKToKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRraW50ZXIuX2pvaW4oZXhwZWN0ZWQpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMTgyLDcgKzE4Niw3IEBACiAgICAgICAgICAgICAgICAgZXJybXNnPWVycm1zZykKIAogICAgIGRlZiBjaGVja0ltYWdlUGFyYW0oc2VsZiwgd2lkZ2V0LCBuYW1lKToKLSAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJ2ltYWdlMScpCisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKG1hc3Rlcj1zZWxmLnJvb3QsIG5hbWU9J2ltYWdlMScpCiAgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsIG5hbWUsIGltYWdlLCBjb252PXN0cikKICAgICAgICAgc2VsZi5jaGVja0ludmFsaWRQYXJhbSh3aWRnZXQsIG5hbWUsICdzcGFtJywKICAgICAgICAgICAgICAgICBlcnJtc2c9J2ltYWdlICJzcGFtIiBkb2VzblwndCBleGlzdCcpCkBAIC0xOTEsNiArMTk1LDE2IEBACiAgICAgZGVmIGNoZWNrVmFyaWFibGVQYXJhbShzZWxmLCB3aWRnZXQsIG5hbWUsIHZhcik6CiAgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsIG5hbWUsIHZhciwgY29udj1zdHIpCiAKKyAgICBkZWYgYXNzZXJ0SXNCb3VuZGluZ0JveChzZWxmLCBiYm94KToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYmJveCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJib3gsIHR1cGxlKQorICAgICAgICBpZiBsZW4oYmJveCkgIT0gNDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnSW52YWxpZCBib3VuZGluZyBib3g6ICVyJyAlIChiYm94LCkpCisgICAgICAgIGZvciBpdGVtIGluIGJib3g6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdGVtLCBpbnQpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnSW52YWxpZCBib3VuZGluZyBib3g6ICVyJyAlIChiYm94LCkpCisgICAgICAgICAgICAgICAgYnJlYWsKKwogCiBjbGFzcyBTdGFuZGFyZE9wdGlvbnNUZXN0czoKICAgICBTVEFOREFSRF9PUFRJT05TID0gKApAQCAtMzkzLDcgKzQwNyw3IEBACiAKICAgICBkZWYgdGVzdF90ZXh0dmFyaWFibGUoc2VsZik6CiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKLSAgICAgICAgdmFyID0gdGtpbnRlci5TdHJpbmdWYXIoKQorICAgICAgICB2YXIgPSB0a2ludGVyLlN0cmluZ1ZhcihzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYuY2hlY2tWYXJpYWJsZVBhcmFtKHdpZGdldCwgJ3RleHR2YXJpYWJsZScsIHZhcikKIAogICAgIGRlZiB0ZXN0X3Ryb3VnaGNvbG9yKHNlbGYpOgpAQCAtNDU0LDcgKzQ2OCw3IEBACiAKICAgICBkZWYgdGVzdF92YXJpYWJsZShzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICB2YXIgPSB0a2ludGVyLkRvdWJsZVZhcigpCisgICAgICAgIHZhciA9IHRraW50ZXIuRG91YmxlVmFyKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5jaGVja1ZhcmlhYmxlUGFyYW0od2lkZ2V0LCAndmFyaWFibGUnLCB2YXIpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGl4LnB5IGIvTGliL3RraW50ZXIvdGl4LnB5CmluZGV4IDEzMWFhMDYuLmMxY2RmYTcgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3RpeC5weQorKysgYi9MaWIvdGtpbnRlci90aXgucHkKQEAgLTI3LDcgKzI3LDcgQEAKICMKIAogZnJvbSB0a2ludGVyIGltcG9ydCAqCi1mcm9tIHRraW50ZXIgaW1wb3J0IF9mbGF0dGVuLCBfY25mbWVyZ2UsIF9kZWZhdWx0X3Jvb3QKK2Zyb20gdGtpbnRlciBpbXBvcnQgX2NuZm1lcmdlLCBfZGVmYXVsdF9yb290CiAKICMgV0FSTklORyAtIFRrVmVyc2lvbiBpcyBhIGxpbWl0ZWQgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcgogaWYgVGtWZXJzaW9uIDwgMy45OTk6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90dGsucHkgYi9MaWIvdGtpbnRlci90dGsucHkKaW5kZXggY2E5MDI3My4uMjlkMjI1YyAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdHRrLnB5CisrKyBiL0xpYi90a2ludGVyL3R0ay5weQpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICAgICAidGNsb2Jqc190b19weSIsICJzZXR1cF9tYXN0ZXIiXQogCiBpbXBvcnQgdGtpbnRlcgotZnJvbSB0a2ludGVyIGltcG9ydCBfZmxhdHRlbiwgX2pvaW4sIF9zdHJpbmdpZnkKK2Zyb20gdGtpbnRlciBpbXBvcnQgX2ZsYXR0ZW4sIF9qb2luLCBfc3RyaW5naWZ5LCBfc3BsaXRkaWN0CiAKICMgVmVyaWZ5IGlmIFRrIGlzIG5ldyBlbm91Z2ggdG8gbm90IG5lZWQgdGhlIFRpbGUgcGFja2FnZQogX1JFUVVJUkVfVElMRSA9IFRydWUgaWYgdGtpbnRlci5Ua1ZlcnNpb24gPCA4LjUgZWxzZSBGYWxzZQpAQCAtMjQwLDIxICsyNDAsNiBAQAogCiAgICAgcmV0dXJuICdcbicuam9pbihzY3JpcHQpCiAKLWRlZiBfZGljdF9mcm9tX3RjbHR1cGxlKHR0dXBsZSwgY3V0X21pbnVzPVRydWUpOgotICAgICIiIkJyZWFrIHR1cGxlIGluIHBhaXJzLCBmb3JtYXQgaXQgcHJvcGVybHksIHRoZW4gYnVpbGQgdGhlIHJldHVybgotICAgIGRpY3QuIElmIGN1dF9taW51cyBpcyBUcnVlLCB0aGUgc3VwcG9zZWQgJy0nIHByZWZpeGluZyBvcHRpb25zIHdpbGwKLSAgICBiZSByZW1vdmVkLgotCi0gICAgdHR1cGxlIGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgZWxlbWVudHMuIiIiCi0gICAgb3B0X3N0YXJ0ID0gMSBpZiBjdXRfbWludXMgZWxzZSAwCi0KLSAgICByZXRkaWN0ID0ge30KLSAgICBpdCA9IGl0ZXIodHR1cGxlKQotICAgIGZvciBvcHQsIHZhbCBpbiB6aXAoaXQsIGl0KToKLSAgICAgICAgcmV0ZGljdFtzdHIob3B0KVtvcHRfc3RhcnQ6XV0gPSB2YWwKLQotICAgIHJldHVybiB0Y2xvYmpzX3RvX3B5KHJldGRpY3QpCi0KIGRlZiBfbGlzdF9mcm9tX3N0YXRlc3BlYyhzdHVwbGUpOgogICAgICIiIkNvbnN0cnVjdCBhIGxpc3QgZnJvbSB0aGUgZ2l2ZW4gc3RhdGVzcGVjIHR1cGxlIGFjY29yZGluZyB0byB0aGUKICAgICBhY2NlcHRlZCBzdGF0ZXNwZWMgYWNjZXB0ZWQgYnkgX2Zvcm1hdF9tYXBkaWN0LiIiIgpAQCAtMjcyLDkgKzI1NywxMCBAQAogICAgIGl0ID0gaXRlcihudmFsKQogICAgIHJldHVybiBbX2ZsYXR0ZW4oc3BlYykgZm9yIHNwZWMgaW4gemlwKGl0LCBpdCldCiAKLWRlZiBfbGlzdF9mcm9tX2xheW91dHR1cGxlKGx0dXBsZSk6CitkZWYgX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSh0aywgbHR1cGxlKToKICAgICAiIiJDb25zdHJ1Y3QgYSBsaXN0IGZyb20gdGhlIHR1cGxlIHJldHVybmVkIGJ5IHR0azo6bGF5b3V0LCB0aGlzIGlzCiAgICAgc29tZXdoYXQgdGhlIHJldmVyc2Ugb2YgX2Zvcm1hdF9sYXlvdXRsaXN0LiIiIgorICAgIGx0dXBsZSA9IHRrLnNwbGl0bGlzdChsdHVwbGUpCiAgICAgcmVzID0gW10KIAogICAgIGluZHggPSAwCkBAIC0yOTMsMTcgKzI3OSwxNCBAQAogICAgICAgICAgICAgaW5keCArPSAyCiAKICAgICAgICAgICAgIGlmIG9wdCA9PSAnY2hpbGRyZW4nOgotICAgICAgICAgICAgICAgIGlmICh0a2ludGVyLl9kZWZhdWx0X3Jvb3QgYW5kCi0gICAgICAgICAgICAgICAgICAgIG5vdCB0a2ludGVyLl9kZWZhdWx0X3Jvb3Qud2FudG9iamVjdHMoKSk6Ci0gICAgICAgICAgICAgICAgICAgIHZhbCA9IHRraW50ZXIuX2RlZmF1bHRfcm9vdC5zcGxpdGxpc3QodmFsKQotICAgICAgICAgICAgICAgIHZhbCA9IF9saXN0X2Zyb21fbGF5b3V0dHVwbGUodmFsKQorICAgICAgICAgICAgICAgIHZhbCA9IF9saXN0X2Zyb21fbGF5b3V0dHVwbGUodGssIHZhbCkKIAogICAgICAgICAgICAgb3B0c1tvcHRdID0gdmFsCiAKICAgICByZXR1cm4gcmVzCiAKLWRlZiBfdmFsX29yX2RpY3Qob3B0aW9ucywgZnVuYywgKmFyZ3MpOgotICAgICIiIkZvcm1hdCBvcHRpb25zIHRoZW4gY2FsbCBmdW5jIHdpdGggYXJncyBhbmQgb3B0aW9ucyBhbmQgcmV0dXJuCitkZWYgX3ZhbF9vcl9kaWN0KHRrLCBvcHRpb25zLCAqYXJncyk6CisgICAgIiIiRm9ybWF0IG9wdGlvbnMgdGhlbiBjYWxsIFRrIGNvbW1hbmQgd2l0aCBhcmdzIGFuZCBvcHRpb25zIGFuZCByZXR1cm4KICAgICB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0LgogCiAgICAgSWYgbm8gb3B0aW9uIGlzIHNwZWNpZmllZCwgYSBkaWN0IGlzIHJldHVybmVkLiBJZiBhIG9wdGlvbiBpcwpAQCAtMzExLDE0ICsyOTQsMTIgQEAKICAgICBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiBqdXN0IHNldHMgdGhlIHBhc3NlZCBvcHRpb25zIGFuZCB0aGUgY2FsbGVyCiAgICAgc2hvdWxkbid0IGJlIGV4cGVjdGluZyBhIHJldHVybiB2YWx1ZSBhbnl3YXkuIiIiCiAgICAgb3B0aW9ucyA9IF9mb3JtYXRfb3B0ZGljdChvcHRpb25zKQotICAgIHJlcyA9IGZ1bmMoKihhcmdzICsgb3B0aW9ucykpCisgICAgcmVzID0gdGsuY2FsbCgqKGFyZ3MgKyBvcHRpb25zKSkKIAogICAgIGlmIGxlbihvcHRpb25zKSAlIDI6ICMgb3B0aW9uIHNwZWNpZmllZCB3aXRob3V0IGEgdmFsdWUsIHJldHVybiBpdHMgdmFsdWUKICAgICAgICAgcmV0dXJuIHJlcwogCi0gICAgaWYgdGtpbnRlci5fZGVmYXVsdF9yb290OgotICAgICAgICByZXMgPSB0a2ludGVyLl9kZWZhdWx0X3Jvb3Quc3BsaXRsaXN0KHJlcykKLSAgICByZXR1cm4gX2RpY3RfZnJvbV90Y2x0dXBsZShyZXMpCisgICAgcmV0dXJuIF9zcGxpdGRpY3QodGssIHJlcywgY29udj1fdGNsb2JqX3RvX3B5KQogCiBkZWYgX2NvbnZlcnRfc3RyaW5ndmFsKHZhbHVlKToKICAgICAiIiJDb252ZXJ0cyBhIHZhbHVlIHRvLCBob3BlZnVsbHksIGEgbW9yZSBhcHByb3ByaWF0ZSBQeXRob24gb2JqZWN0LiIiIgpAQCAtMzM4LDIwICszMTksMjQgQEAKICAgICAgICAgICAgIHggPSBpbnQoeCkKICAgICByZXR1cm4geAogCitkZWYgX3RjbG9ial90b19weSh2YWwpOgorICAgICIiIlJldHVybiB2YWx1ZSBjb252ZXJ0ZWQgZnJvbSBUY2wgb2JqZWN0IHRvIFB5dGhvbiBvYmplY3QuIiIiCisgICAgaWYgdmFsIGFuZCBoYXNhdHRyKHZhbCwgJ19fbGVuX18nKSBhbmQgbm90IGlzaW5zdGFuY2UodmFsLCBzdHIpOgorICAgICAgICBpZiBnZXRhdHRyKHZhbFswXSwgJ3R5cGVuYW1lJywgTm9uZSkgPT0gJ1N0YXRlU3BlYyc6CisgICAgICAgICAgICB2YWwgPSBfbGlzdF9mcm9tX3N0YXRlc3BlYyh2YWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWwgPSBsaXN0KG1hcChfY29udmVydF9zdHJpbmd2YWwsIHZhbCkpCisKKyAgICBlbGlmIGhhc2F0dHIodmFsLCAndHlwZW5hbWUnKTogIyBzb21lIG90aGVyIChzaW5nbGUpIFRjbCBvYmplY3QKKyAgICAgICAgdmFsID0gX2NvbnZlcnRfc3RyaW5ndmFsKHZhbCkKKworICAgIHJldHVybiB2YWwKKwogZGVmIHRjbG9ianNfdG9fcHkoYWRpY3QpOgogICAgICIiIlJldHVybnMgYWRpY3Qgd2l0aCBpdHMgdmFsdWVzIGNvbnZlcnRlZCBmcm9tIFRjbCBvYmplY3RzIHRvIFB5dGhvbgogICAgIG9iamVjdHMuIiIiCiAgICAgZm9yIG9wdCwgdmFsIGluIGFkaWN0Lml0ZW1zKCk6Ci0gICAgICAgIGlmIHZhbCBhbmQgaGFzYXR0cih2YWwsICdfX2xlbl9fJykgYW5kIG5vdCBpc2luc3RhbmNlKHZhbCwgc3RyKToKLSAgICAgICAgICAgIGlmIGdldGF0dHIodmFsWzBdLCAndHlwZW5hbWUnLCBOb25lKSA9PSAnU3RhdGVTcGVjJzoKLSAgICAgICAgICAgICAgICB2YWwgPSBfbGlzdF9mcm9tX3N0YXRlc3BlYyh2YWwpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHZhbCA9IGxpc3QobWFwKF9jb252ZXJ0X3N0cmluZ3ZhbCwgdmFsKSkKLQotICAgICAgICBlbGlmIGhhc2F0dHIodmFsLCAndHlwZW5hbWUnKTogIyBzb21lIG90aGVyIChzaW5nbGUpIFRjbCBvYmplY3QKLSAgICAgICAgICAgIHZhbCA9IF9jb252ZXJ0X3N0cmluZ3ZhbCh2YWwpCi0KLSAgICAgICAgYWRpY3Rbb3B0XSA9IHZhbAorICAgICAgICBhZGljdFtvcHRdID0gX3RjbG9ial90b19weSh2YWwpCiAKICAgICByZXR1cm4gYWRpY3QKIApAQCAtMzk2LDcgKzM4MSw3IEBACiAgICAgICAgIGEgc2VxdWVuY2UgaWRlbnRpZnlpbmcgdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbi4iIiIKICAgICAgICAgaWYgcXVlcnlfb3B0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dbcXVlcnlfb3B0XSA9IE5vbmUKLSAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl9uYW1lLCAiY29uZmlndXJlIiwgc3R5bGUpCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoc2VsZi50aywga3csIHNlbGYuX25hbWUsICJjb25maWd1cmUiLCBzdHlsZSkKIAogCiAgICAgZGVmIG1hcChzZWxmLCBzdHlsZSwgcXVlcnlfb3B0PU5vbmUsICoqa3cpOgpAQCAtNDExLDggKzM5NiwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIF9saXN0X2Zyb21fc3RhdGVzcGVjKHNlbGYudGsuc3BsaXRsaXN0KAogICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAibWFwIiwgc3R5bGUsICctJXMnICUgcXVlcnlfb3B0KSkpCiAKLSAgICAgICAgcmV0dXJuIF9kaWN0X2Zyb21fdGNsdHVwbGUoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgIm1hcCIsIHN0eWxlLCAqKF9mb3JtYXRfbWFwZGljdChrdykpKSkKKyAgICAgICAgcmV0dXJuIF9zcGxpdGRpY3QoCisgICAgICAgICAgICBzZWxmLnRrLAorICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJtYXAiLCBzdHlsZSwgKl9mb3JtYXRfbWFwZGljdChrdykpLAorICAgICAgICAgICAgY29udj1fdGNsb2JqX3RvX3B5KQogCiAKICAgICBkZWYgbG9va3VwKHNlbGYsIHN0eWxlLCBvcHRpb24sIHN0YXRlPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CkBAIC00NjYsOCArNDUzLDggQEAKICAgICAgICAgICAgIGxzcGVjID0gIm51bGwiICMgY291bGQgYmUgYW55IG90aGVyIHdvcmQsIGJ1dCB0aGlzIG1heSBtYWtlIHNlbnNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdoZW4gY2FsbGluZyBsYXlvdXQoc3R5bGUpIGxhdGVyCiAKLSAgICAgICAgcmV0dXJuIF9saXN0X2Zyb21fbGF5b3V0dHVwbGUoc2VsZi50ay5zcGxpdGxpc3QoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgImxheW91dCIsIHN0eWxlLCBsc3BlYykpKQorICAgICAgICByZXR1cm4gX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShzZWxmLnRrLAorICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJsYXlvdXQiLCBzdHlsZSwgbHNwZWMpKQogCiAKICAgICBkZWYgZWxlbWVudF9jcmVhdGUoc2VsZiwgZWxlbWVudG5hbWUsIGV0eXBlLCAqYXJncywgKiprdyk6CkBAIC05MDcsNyArODk0LDcgQEAKICAgICAgICAgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIiIiCiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCi0gICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgInRhYiIsIHRhYl9pZCkKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChzZWxmLnRrLCBrdywgc2VsZi5fdywgInRhYiIsIHRhYl9pZCkKIAogCiAgICAgZGVmIHRhYnMoc2VsZik6CkBAIC05ODQsNyArOTcxLDcgQEAKICAgICAgICAgT3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4iIiIKICAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKLSAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAicGFuZSIsIHBhbmUpCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoc2VsZi50aywga3csIHNlbGYuX3csICJwYW5lIiwgcGFuZSkKIAogCiAgICAgZGVmIHNhc2hwb3Moc2VsZiwgaW5kZXgsIG5ld3Bvcz1Ob25lKToKQEAgLTEyMjMsNyArMTIxMCw3IEBACiAgICAgICAgIE90aGVyd2lzZSwgc2V0cyB0aGUgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIiIiCiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCi0gICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgImNvbHVtbiIsIGNvbHVtbikKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChzZWxmLnRrLCBrdywgc2VsZi5fdywgImNvbHVtbiIsIGNvbHVtbikKIAogCiAgICAgZGVmIGRlbGV0ZShzZWxmLCAqaXRlbXMpOgpAQCAtMTI4Miw3ICsxMjY5LDcgQEAKICAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKIAotICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX3csICdoZWFkaW5nJywgY29sdW1uKQorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KHNlbGYudGssIGt3LCBzZWxmLl93LCAnaGVhZGluZycsIGNvbHVtbikKIAogCiAgICAgZGVmIGlkZW50aWZ5KHNlbGYsIGNvbXBvbmVudCwgeCwgeSk6CkBAIC0xMzYxLDcgKzEzNDgsNyBAQAogICAgICAgICB2YWx1ZXMgYXMgZ2l2ZW4gYnkga3cuIiIiCiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCi0gICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgIml0ZW0iLCBpdGVtKQorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KHNlbGYudGssIGt3LCBzZWxmLl93LCAiaXRlbSIsIGl0ZW0pCiAKIAogICAgIGRlZiBtb3ZlKHNlbGYsIGl0ZW0sIHBhcmVudCwgaW5kZXgpOgpAQCAtMTQyOSwxMyArMTQxNiwxNiBAQAogCiAKICAgICBkZWYgc2V0KHNlbGYsIGl0ZW0sIGNvbHVtbj1Ob25lLCB2YWx1ZT1Ob25lKToKLSAgICAgICAgIiIiV2l0aCBvbmUgYXJndW1lbnQsIHJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGNvbHVtbi92YWx1ZSBwYWlycwotICAgICAgICBmb3IgdGhlIHNwZWNpZmllZCBpdGVtLiBXaXRoIHR3byBhcmd1bWVudHMsIHJldHVybnMgdGhlIGN1cnJlbnQKLSAgICAgICAgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBjb2x1bW4uIFdpdGggdGhyZWUgYXJndW1lbnRzLCBzZXRzIHRoZQorICAgICAgICAiIiJRdWVyeSBvciBzZXQgdGhlIHZhbHVlIG9mIGdpdmVuIGl0ZW0uCisKKyAgICAgICAgV2l0aCBvbmUgYXJndW1lbnQsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgY29sdW1uL3ZhbHVlIHBhaXJzCisgICAgICAgIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0uIFdpdGggdHdvIGFyZ3VtZW50cywgcmV0dXJuIHRoZSBjdXJyZW50CisgICAgICAgIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY29sdW1uLiBXaXRoIHRocmVlIGFyZ3VtZW50cywgc2V0IHRoZQogICAgICAgICB2YWx1ZSBvZiBnaXZlbiBjb2x1bW4gaW4gZ2l2ZW4gaXRlbSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiIiIgogICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNldCIsIGl0ZW0sIGNvbHVtbiwgdmFsdWUpCiAgICAgICAgIGlmIGNvbHVtbiBpcyBOb25lIGFuZCB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIF9kaWN0X2Zyb21fdGNsdHVwbGUoc2VsZi50ay5zcGxpdGxpc3QocmVzKSwgRmFsc2UpCisgICAgICAgICAgICByZXR1cm4gX3NwbGl0ZGljdChzZWxmLnRrLCByZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXRfbWludXM9RmFsc2UsIGNvbnY9X3RjbG9ial90b19weSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiByZXMKIApAQCAtMTQ1Niw3ICsxNDQ2LDcgQEAKICAgICAgICAgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdGFnbmFtZS4iIiIKICAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKLSAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAidGFnIiwgImNvbmZpZ3VyZSIsCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoc2VsZi50aywga3csIHNlbGYuX3csICJ0YWciLCAiY29uZmlndXJlIiwKICAgICAgICAgICAgIHRhZ25hbWUpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rva2VuLnB5IGIvTGliL3Rva2VuLnB5CmluZGV4IDMxZmFlMGEuLjc0NzBjOGMgMTAwNjQ0Ci0tLSBhL0xpYi90b2tlbi5weQorKysgYi9MaWIvdG9rZW4ucHkKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgb3V0RmlsZU5hbWUgPSBhcmdzWzFdCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oaW5GaWxlTmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgbGluZXMgPSBmcC5yZWFkKCkuc3BsaXQoIlxuIikKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICMgbG9hZCB0aGUgb3V0cHV0IHNrZWxldG9uIGZyb20gdGhlIHRhcmdldDoKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihvdXRGaWxlTmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDIpCiAgICAgZm9ybWF0ID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICBmb3JtYXRbc3RhcnQ6ZW5kXSA9IGxpbmVzCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4ob3V0RmlsZU5hbWUsICd3JykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDQpCiAgICAgZnAud3JpdGUoIlxuIi5qb2luKGZvcm1hdCkpCmRpZmYgLS1naXQgYS9MaWIvdG9rZW5pemUucHkgYi9MaWIvdG9rZW5pemUucHkKaW5kZXggNTMwNGRlNS4uOThlOTEyMiAxMDA2NDQKLS0tIGEvTGliL3Rva2VuaXplLnB5CisrKyBiL0xpYi90b2tlbml6ZS5weQpAQCAtNjc5LDcgKzY3OSw3IEBACiAgICAgICAgIGVycm9yKGVyci5hcmdzWzBdLCBmaWxlbmFtZSwgKGxpbmUsIGNvbHVtbikpCiAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGVycjoKICAgICAgICAgZXJyb3IoZXJyLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBlcnJvcihlcnIpCiAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICBwcmludCgiaW50ZXJydXB0ZWRcbiIpCmRpZmYgLS1naXQgYS9MaWIvdHJhY2UucHkgYi9MaWIvdHJhY2UucHkKaW5kZXggYzA5YjM2NS4uMDlmZTllZSAxMDA3NTUKLS0tIGEvTGliL3RyYWNlLnB5CisrKyBiL0xpYi90cmFjZS5weQpAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgICAgICAgICAgICAgY291bnRzLCBjYWxsZWRmdW5jcywgY2FsbGVycyA9IFwKICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkKG9wZW4oc2VsZi5pbmZpbGUsICdyYicpKQogICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlKHNlbGYuX19jbGFzc19fKGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMpKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvciwgVmFsdWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvciwgVmFsdWVFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCgiU2tpcHBpbmcgY291bnRzIGZpbGUgJXI6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmluZmlsZSwgZXJyKSksIGZpbGU9c3lzLnN0ZGVycikKIApAQCAtMzQ4LDcgKzM0OCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGlja2xlLmR1bXAoKHNlbGYuY291bnRzLCBzZWxmLmNhbGxlZGZ1bmNzLCBzZWxmLmNhbGxlcnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oc2VsZi5vdXRmaWxlLCAnd2InKSwgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgc2F2ZSBjb3VudHMgZmlsZXMgYmVjYXVzZSAlcyIgJSBlcnIsIGZpbGU9c3lzLnN0ZGVycikKIAogICAgIGRlZiB3cml0ZV9yZXN1bHRzX2ZpbGUoc2VsZiwgcGF0aCwgbGluZXMsIGxub3RhYiwgbGluZXNfaGl0LCBlbmNvZGluZz1Ob25lKToKQEAgLTM1Niw3ICszNTYsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG91dGZpbGUgPSBvcGVuKHBhdGgsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcHJpbnQoKCJ0cmFjZTogQ291bGQgbm90IG9wZW4gJXIgZm9yIHdyaXRpbmc6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIHNraXBwaW5nIiAlIChwYXRoLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgcmV0dXJuIDAsIDAKQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgICAgICB3aXRoIHRva2VuaXplLm9wZW4oZmlsZW5hbWUpIGFzIGY6CiAgICAgICAgICAgICBwcm9nID0gZi5yZWFkKCkKICAgICAgICAgICAgIGVuY29kaW5nID0gZi5lbmNvZGluZwotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHByaW50KCgiTm90IHByaW50aW5nIGNvdmVyYWdlIGRhdGEgZm9yICVyOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICByZXR1cm4ge30KQEAgLTgwMiw3ICs4MDIsNyBAQAogICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogTm9uZSwKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHQucnVuY3R4KGNvZGUsIGdsb2JzLCBnbG9icykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBfZXJyX2V4aXQoIkNhbm5vdCBydW4gZmlsZSAlciBiZWNhdXNlOiAlcyIgJSAoc3lzLmFyZ3ZbMF0sIGVycikpCiAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgogICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3RyYWNlYmFjay5weSBiL0xpYi90cmFjZWJhY2sucHkKaW5kZXggZjMzZmNlZC4uZmFmNTkzYSAxMDA2NDQKLS0tIGEvTGliL3RyYWNlYmFjay5weQorKysgYi9MaWIvdHJhY2ViYWNrLnB5CkBAIC0yLDI2ICsyLDMyIEBACiAKIGltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBzeXMKK2ltcG9ydCBvcGVyYXRvcgogCiBfX2FsbF9fID0gWydleHRyYWN0X3N0YWNrJywgJ2V4dHJhY3RfdGInLCAnZm9ybWF0X2V4Y2VwdGlvbicsCiAgICAgICAgICAgICdmb3JtYXRfZXhjZXB0aW9uX29ubHknLCAnZm9ybWF0X2xpc3QnLCAnZm9ybWF0X3N0YWNrJywKICAgICAgICAgICAgJ2Zvcm1hdF90YicsICdwcmludF9leGMnLCAnZm9ybWF0X2V4YycsICdwcmludF9leGNlcHRpb24nLAotICAgICAgICAgICAncHJpbnRfbGFzdCcsICdwcmludF9zdGFjaycsICdwcmludF90YiddCisgICAgICAgICAgICdwcmludF9sYXN0JywgJ3ByaW50X3N0YWNrJywgJ3ByaW50X3RiJywKKyAgICAgICAgICAgJ2NsZWFyX2ZyYW1lcyddCiAKLWRlZiBfcHJpbnQoZmlsZSwgc3RyPScnLCB0ZXJtaW5hdG9yPSdcbicpOgotICAgIGZpbGUud3JpdGUoc3RyK3Rlcm1pbmF0b3IpCisjCisjIEZvcm1hdHRpbmcgYW5kIHByaW50aW5nIGxpc3RzIG9mIHRyYWNlYmFjayBsaW5lcy4KKyMKIAorZGVmIF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KToKKyAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKKyAgICAgICAgaXRlbSA9ICcgIEZpbGUgInt9IiwgbGluZSB7fSwgaW4ge31cbicuZm9ybWF0KGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBpdGVtID0gaXRlbSArICcgICAge31cbicuZm9ybWF0KGxpbmUuc3RyaXAoKSkKKyAgICAgICAgeWllbGQgaXRlbQogCiBkZWYgcHJpbnRfbGlzdChleHRyYWN0ZWRfbGlzdCwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCB0aGUgbGlzdCBvZiB0dXBsZXMgYXMgcmV0dXJuZWQgYnkgZXh0cmFjdF90YigpIG9yCiAgICAgZXh0cmFjdF9zdGFjaygpIGFzIGEgZm9ybWF0dGVkIHN0YWNrIHRyYWNlIHRvIHRoZSBnaXZlbiBmaWxlLiIiIgogICAgIGlmIGZpbGUgaXMgTm9uZToKICAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKLSAgICAgICAgX3ByaW50KGZpbGUsCi0gICAgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSxsaW5lbm8sbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgJyAgICAlcycgJSBsaW5lLnN0cmlwKCkpCisgICAgZm9yIGl0ZW0gaW4gX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpOgorICAgICAgICBwcmludChpdGVtLCBmaWxlPWZpbGUsIGVuZD0iIikKIAogZGVmIGZvcm1hdF9saXN0KGV4dHJhY3RlZF9saXN0KToKICAgICAiIiJGb3JtYXQgYSBsaXN0IG9mIHRyYWNlYmFjayBlbnRyeSB0dXBsZXMgZm9yIHByaW50aW5nLgpAQCAtMzMsMTQgKzM5LDQ0IEBACiAgICAgdGhlIHN0cmluZ3MgbWF5IGNvbnRhaW4gaW50ZXJuYWwgbmV3bGluZXMgYXMgd2VsbCwgZm9yIHRob3NlIGl0ZW1zCiAgICAgd2hvc2Ugc291cmNlIHRleHQgbGluZSBpcyBub3QgTm9uZS4KICAgICAiIiIKLSAgICBsaXN0ID0gW10KLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKLSAgICAgICAgaXRlbSA9ICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXNcbicgJSAoZmlsZW5hbWUsbGluZW5vLG5hbWUpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBpdGVtID0gaXRlbSArICcgICAgJXNcbicgJSBsaW5lLnN0cmlwKCkKLSAgICAgICAgbGlzdC5hcHBlbmQoaXRlbSkKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KSkKIAorIworIyBQcmludGluZyBhbmQgRXh0cmFjdGluZyBUcmFjZWJhY2tzLgorIworCisjIGV4dHJhY3RvciB0YWtlcyBjdXJyIGFuZCBuZWVkcyB0byByZXR1cm4gYSB0dXBsZSBvZjoKKyMgLSBGcmFtZSBvYmplY3QKKyMgLSBMaW5lIG51bWJlcgorIyAtIE5leHQgaXRlbSAoc2FtZSB0eXBlIGFzIGN1cnIpCisjIEluIHByYWN0aWNlLCBjdXJyIGlzIGVpdGhlciBhIHRyYWNlYmFjayBvciBhIGZyYW1lLgorZGVmIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoY3VyciwgbGltaXQsIGV4dHJhY3Rvcik6CisgICAgaWYgbGltaXQgaXMgTm9uZToKKyAgICAgICAgbGltaXQgPSBnZXRhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0JywgTm9uZSkKKworICAgIG4gPSAwCisgICAgd2hpbGUgY3VyciBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKKyAgICAgICAgZiwgbGluZW5vLCBuZXh0X2l0ZW0gPSBleHRyYWN0b3IoY3VycikKKyAgICAgICAgY28gPSBmLmZfY29kZQorICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCisgICAgICAgIG5hbWUgPSBjby5jb19uYW1lCisKKyAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCisgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKKworICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZSA9IE5vbmUKKworICAgICAgICB5aWVsZCAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkKKyAgICAgICAgY3VyciA9IG5leHRfaXRlbQorICAgICAgICBuICs9IDEKKworZGVmIF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0KToKKyAgICByZXR1cm4gX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcigKKyAgICAgICAgICAgICAgICB0YiwgbGltaXQsCisgICAgICAgICAgICAgICAgb3BlcmF0b3IuYXR0cmdldHRlcigidGJfZnJhbWUiLCAidGJfbGluZW5vIiwgInRiX25leHQiKSkKIAogZGVmIHByaW50X3RiKHRiLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpOgogICAgICIiIlByaW50IHVwIHRvICdsaW1pdCcgc3RhY2sgdHJhY2UgZW50cmllcyBmcm9tIHRoZSB0cmFjZWJhY2sgJ3RiJy4KQEAgLTUwLDI5ICs4NiwxMSBAQAogICAgICdmaWxlJyBzaG91bGQgYmUgYW4gb3BlbiBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCBhIHdyaXRlKCkKICAgICBtZXRob2QuCiAgICAgIiIiCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbiA9IDAKLSAgICB3aGlsZSB0YiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgZiA9IHRiLnRiX2ZyYW1lCi0gICAgICAgIGxpbmVubyA9IHRiLnRiX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgX3ByaW50KGZpbGUsCi0gICAgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogX3ByaW50KGZpbGUsICcgICAgJyArIGxpbmUuc3RyaXAoKSkKLSAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIG4gPSBuKzEKKyAgICBwcmludF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0PWxpbWl0KSwgZmlsZT1maWxlKQogCiBkZWYgZm9ybWF0X3RiKHRiLCBsaW1pdD1Ob25lKToKICAgICAiIiJBIHNob3J0aGFuZCBmb3IgJ2Zvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0KSknLiIiIgotICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdCkpCisgICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0PWxpbWl0KSkKIAogZGVmIGV4dHJhY3RfdGIodGIsIGxpbWl0PU5vbmUpOgogICAgICIiIlJldHVybiBsaXN0IG9mIHVwIHRvIGxpbWl0IHByZS1wcm9jZXNzZWQgZW50cmllcyBmcm9tIHRyYWNlYmFjay4KQEAgLTg1LDI2ICsxMDMsMTEgQEAKICAgICBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHN0cmlwcGVkOyBpZiB0aGUgc291cmNlIGlzIG5vdAogICAgIGF2YWlsYWJsZSBpdCBpcyBOb25lLgogICAgICIiIgotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbGlzdCA9IFtdCi0gICAgbiA9IDAKLSAgICB3aGlsZSB0YiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgZiA9IHRiLnRiX2ZyYW1lCi0gICAgICAgIGxpbmVubyA9IHRiLnRiX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOiBsaW5lID0gTm9uZQotICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCi0gICAgICAgIHRiID0gdGIudGJfbmV4dAotICAgICAgICBuID0gbisxCi0gICAgcmV0dXJuIGxpc3QKKyAgICByZXR1cm4gbGlzdChfZXh0cmFjdF90Yl9pdGVyKHRiLCBsaW1pdD1saW1pdCkpCiAKKyMKKyMgRXhjZXB0aW9uIGZvcm1hdHRpbmcgYW5kIG91dHB1dC4KKyMKIAogX2NhdXNlX21lc3NhZ2UgPSAoCiAgICAgIlxuVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSAiCkBAIC0xMzIsOSArMTM1LDIzIEBACiAgICAgaXRzLmFwcGVuZChbKGV4YywgY3VzdG9tX3RiIG9yIGV4Yy5fX3RyYWNlYmFja19fKV0pCiAgICAgIyBpdGVydG9vbHMuY2hhaW4gaXMgaW4gYW4gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgbWF5IGJlIHVuYXZhaWxhYmxlCiAgICAgZm9yIGl0IGluIGl0czoKLSAgICAgICAgZm9yIHggaW4gaXQ6Ci0gICAgICAgICAgICB5aWVsZCB4CisgICAgICAgIHlpZWxkIGZyb20gaXQKIAorZGVmIF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKToKKyAgICBpZiBjaGFpbjoKKyAgICAgICAgdmFsdWVzID0gX2l0ZXJfY2hhaW4odmFsdWUsIHRiKQorICAgIGVsc2U6CisgICAgICAgIHZhbHVlcyA9IFsodmFsdWUsIHRiKV0KKworICAgIGZvciB2YWx1ZSwgdGIgaW4gdmFsdWVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgIyBUaGlzIGlzIGEgY2F1c2UvY29udGV4dCBtZXNzYWdlIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIHZhbHVlICsgJ1xuJworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgdGI6CisgICAgICAgICAgICB5aWVsZCAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJworICAgICAgICAgICAgeWllbGQgZnJvbSBfZm9ybWF0X2xpc3RfaXRlcihfZXh0cmFjdF90Yl9pdGVyKHRiLCBsaW1pdD1saW1pdCkpCisgICAgICAgIHlpZWxkIGZyb20gX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKHR5cGUodmFsdWUpLCB2YWx1ZSkKIAogZGVmIHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlByaW50IGV4Y2VwdGlvbiB1cCB0byAnbGltaXQnIHN0YWNrIHRyYWNlIGVudHJpZXMgZnJvbSAndGInIHRvICdmaWxlJy4KQEAgLTE0OSwyMCArMTY2LDggQEAKICAgICAiIiIKICAgICBpZiBmaWxlIGlzIE5vbmU6CiAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgaWYgY2hhaW46Ci0gICAgICAgIHZhbHVlcyA9IF9pdGVyX2NoYWluKHZhbHVlLCB0YikKLSAgICBlbHNlOgotICAgICAgICB2YWx1ZXMgPSBbKHZhbHVlLCB0YildCi0gICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgdmFsdWUpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiB0YjoKLSAgICAgICAgICAgIF9wcmludChmaWxlLCAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicpCi0gICAgICAgICAgICBwcmludF90Yih0YiwgbGltaXQsIGZpbGUpCi0gICAgICAgIGxpbmVzID0gZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHR5cGUodmFsdWUpLCB2YWx1ZSkKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgbGluZSwgJycpCisgICAgZm9yIGxpbmUgaW4gX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pOgorICAgICAgICBwcmludChsaW5lLCBmaWxlPWZpbGUsIGVuZD0iIikKIAogZGVmIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiRm9ybWF0IGEgc3RhY2sgdHJhY2UgYW5kIHRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24uCkBAIC0xNzMsMjAgKzE3OCw3IEBACiAgICAgdGhlc2UgbGluZXMgYXJlIGNvbmNhdGVuYXRlZCBhbmQgcHJpbnRlZCwgZXhhY3RseSB0aGUgc2FtZSB0ZXh0IGlzCiAgICAgcHJpbnRlZCBhcyBkb2VzIHByaW50X2V4Y2VwdGlvbigpLgogICAgICIiIgotICAgIGxpc3QgPSBbXQotICAgIGlmIGNoYWluOgotICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCi0gICAgZWxzZToKLSAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQotICAgIGZvciB2YWx1ZSwgdGIgaW4gdmFsdWVzOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgbGlzdC5hcHBlbmQodmFsdWUgKyAnXG4nKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgdGI6Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCgnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJykKLSAgICAgICAgICAgIGxpc3QuZXh0ZW5kKGZvcm1hdF90Yih0YiwgbGltaXQpKQotICAgICAgICBsaXN0LmV4dGVuZChmb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZSh2YWx1ZSksIHZhbHVlKSkKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKSkKIAogZGVmIGZvcm1hdF9leGNlcHRpb25fb25seShldHlwZSwgdmFsdWUpOgogICAgICIiIkZvcm1hdCB0aGUgZXhjZXB0aW9uIHBhcnQgb2YgYSB0cmFjZWJhY2suCkBAIC0yMDQsMTAgKzE5NiwxNCBAQAogICAgIHN0cmluZyBpbiB0aGUgbGlzdC4KIAogICAgICIiIgorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfZXhjZXB0aW9uX29ubHlfaXRlcihldHlwZSwgdmFsdWUpKQorCitkZWYgX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKGV0eXBlLCB2YWx1ZSk6CiAgICAgIyBHcmFjZWZ1bGx5IGhhbmRsZSAodGhlIHdheSBQeXRob24gMi40IGFuZCBlYXJsaWVyIGRpZCkgdGhlIGNhc2Ugb2YKICAgICAjIGJlaW5nIGNhbGxlZCB3aXRoIChOb25lLCBOb25lKS4KICAgICBpZiBldHlwZSBpcyBOb25lOgotICAgICAgICByZXR1cm4gW19mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKV0KKyAgICAgICAgeWllbGQgX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpCisgICAgICAgIHJldHVybgogCiAgICAgc3R5cGUgPSBldHlwZS5fX25hbWVfXwogICAgIHNtb2QgPSBldHlwZS5fX21vZHVsZV9fCkBAIC0yMTUsMjcgKzIxMSwyNyBAQAogICAgICAgICBzdHlwZSA9IHNtb2QgKyAnLicgKyBzdHlwZQogCiAgICAgaWYgbm90IGlzc3ViY2xhc3MoZXR5cGUsIFN5bnRheEVycm9yKToKLSAgICAgICAgcmV0dXJuIFtfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCB2YWx1ZSldCisgICAgICAgIHlpZWxkIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKQorICAgICAgICByZXR1cm4KIAogICAgICMgSXQgd2FzIGEgc3ludGF4IGVycm9yOyBzaG93IGV4YWN0bHkgd2hlcmUgdGhlIHByb2JsZW0gd2FzIGZvdW5kLgotICAgIGxpbmVzID0gW10KICAgICBmaWxlbmFtZSA9IHZhbHVlLmZpbGVuYW1lIG9yICI8c3RyaW5nPiIKICAgICBsaW5lbm8gPSBzdHIodmFsdWUubGluZW5vKSBvciAnPycKLSAgICBsaW5lcy5hcHBlbmQoJyAgRmlsZSAiJXMiLCBsaW5lICVzXG4nICUgKGZpbGVuYW1lLCBsaW5lbm8pKQorICAgIHlpZWxkICcgIEZpbGUgInt9IiwgbGluZSB7fVxuJy5mb3JtYXQoZmlsZW5hbWUsIGxpbmVubykKKwogICAgIGJhZGxpbmUgPSB2YWx1ZS50ZXh0CiAgICAgb2Zmc2V0ID0gdmFsdWUub2Zmc2V0CiAgICAgaWYgYmFkbGluZSBpcyBub3QgTm9uZToKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXNcbicgJSBiYWRsaW5lLnN0cmlwKCkpCisgICAgICAgIHlpZWxkICcgICAge31cbicuZm9ybWF0KGJhZGxpbmUuc3RyaXAoKSkKICAgICAgICAgaWYgb2Zmc2V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgY2FyZXRzcGFjZSA9IGJhZGxpbmUucnN0cmlwKCdcbicpCiAgICAgICAgICAgICBvZmZzZXQgPSBtaW4obGVuKGNhcmV0c3BhY2UpLCBvZmZzZXQpIC0gMQogICAgICAgICAgICAgY2FyZXRzcGFjZSA9IGNhcmV0c3BhY2VbOm9mZnNldF0ubHN0cmlwKCkKICAgICAgICAgICAgICMgbm9uLXNwYWNlIHdoaXRlc3BhY2UgKGxpa2VzIHRhYnMpIG11c3QgYmUga2VwdCBmb3IgYWxpZ25tZW50CiAgICAgICAgICAgICBjYXJldHNwYWNlID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAnICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlc15cbicgJSAnJy5qb2luKGNhcmV0c3BhY2UpKQorICAgICAgICAgICAgeWllbGQgJyAgICB7fV5cbicuZm9ybWF0KCcnLmpvaW4oY2FyZXRzcGFjZSkpCiAgICAgbXNnID0gdmFsdWUubXNnIG9yICI8bm8gZGV0YWlsIGF2YWlsYWJsZT4iCi0gICAgbGluZXMuYXBwZW5kKCIlczogJXNcbiIgJSAoc3R5cGUsIG1zZykpCi0gICAgcmV0dXJuIGxpbmVzCisgICAgeWllbGQgInt9OiB7fVxuIi5mb3JtYXQoc3R5cGUsIG1zZykKIAogZGVmIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKToKICAgICB2YWx1ZXN0ciA9IF9zb21lX3N0cih2YWx1ZSkKQEAgLTI1MSwzOCArMjQ3LDM0IEBACiAgICAgZXhjZXB0OgogICAgICAgICByZXR1cm4gJzx1bnByaW50YWJsZSAlcyBvYmplY3Q+JyAlIHR5cGUodmFsdWUpLl9fbmFtZV9fCiAKLQogZGVmIHByaW50X2V4YyhsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlNob3J0aGFuZCBmb3IgJ3ByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCksIGxpbWl0LCBmaWxlKScuIiIiCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIHRyeToKLSAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgZmlsZSwgY2hhaW4pCi0gICAgZmluYWxseToKLSAgICAgICAgZXR5cGUgPSB2YWx1ZSA9IHRiID0gTm9uZQotCisgICAgcHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGZpbGU9ZmlsZSwgY2hhaW49Y2hhaW4pCiAKIGRlZiBmb3JtYXRfZXhjKGxpbWl0PU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIkxpa2UgcHJpbnRfZXhjKCkgYnV0IHJldHVybiBhIHN0cmluZy4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICByZXR1cm4gJycuam9pbigKLSAgICAgICAgICAgIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKSkKLSAgICBmaW5hbGx5OgotICAgICAgICBldHlwZSA9IHZhbHVlID0gdGIgPSBOb25lCi0KKyAgICByZXR1cm4gIiIuam9pbihmb3JtYXRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGNoYWluPWNoYWluKSkKIAogZGVmIHByaW50X2xhc3QobGltaXQ9Tm9uZSwgZmlsZT1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKHN5cy5sYXN0X3R5cGUsCiAgICAgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywgbGltaXQsIGZpbGUpJy4iIiIKICAgICBpZiBub3QgaGFzYXR0cihzeXMsICJsYXN0X3R5cGUiKToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gbGFzdCBleGNlcHRpb24iKQotICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKICAgICBwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywKICAgICAgICAgICAgICAgICAgICAgbGltaXQsIGZpbGUsIGNoYWluKQogCisjCisjIFByaW50aW5nIGFuZCBFeHRyYWN0aW5nIFN0YWNrcy4KKyMKKworZGVmIF9leHRyYWN0X3N0YWNrX2l0ZXIoZiwgbGltaXQ9Tm9uZSk6CisgICAgcmV0dXJuIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoCisgICAgICAgICAgICAgICAgZiwgbGltaXQsIGxhbWJkYSBmOiAoZiwgZi5mX2xpbmVubywgZi5mX2JhY2spKQorCitkZWYgX2dldF9zdGFjayhmKToKKyAgICBpZiBmIGlzIE5vbmU6CisgICAgICAgIGYgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfYmFjaworICAgIHJldHVybiBmCiAKIGRlZiBwcmludF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgYSBzdGFjayB0cmFjZSBmcm9tIGl0cyBpbnZvY2F0aW9uIHBvaW50LgpAQCAtMjkxLDIxICsyODMsMTEgQEAKICAgICBzdGFjayBmcmFtZSBhdCB3aGljaCB0byBzdGFydC4gVGhlIG9wdGlvbmFsICdsaW1pdCcgYW5kICdmaWxlJwogICAgIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHByaW50X2V4Y2VwdGlvbigpLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIHByaW50X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCksIGZpbGUpCisgICAgcHJpbnRfbGlzdChleHRyYWN0X3N0YWNrKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSwgZmlsZT1maWxlKQogCiBkZWYgZm9ybWF0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpJy4iIiIKLSAgICBpZiBmIGlzIE5vbmU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpCisgICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpKQogCiBkZWYgZXh0cmFjdF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUpOgogICAgICIiIkV4dHJhY3QgdGhlIHJhdyB0cmFjZWJhY2sgZnJvbSB0aGUgY3VycmVudCBzdGFjayBmcmFtZS4KQEAgLTMxNiwyNyArMjk4LDE2IEBACiAgICAgbGluZSBudW1iZXIsIGZ1bmN0aW9uIG5hbWUsIHRleHQpLCBhbmQgdGhlIGVudHJpZXMgYXJlIGluIG9yZGVyCiAgICAgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0IHN0YWNrIGZyYW1lLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKKyAgICBzdGFjayA9IGxpc3QoX2V4dHJhY3Rfc3RhY2tfaXRlcihfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCisgICAgc3RhY2sucmV2ZXJzZSgpCisgICAgcmV0dXJuIHN0YWNrCisKK2RlZiBjbGVhcl9mcmFtZXModGIpOgorICAgICJDbGVhciBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIGZyYW1lcyBvZiBhIHRyYWNlYmFjay4iCisgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIGxpc3QgPSBbXQotICAgIG4gPSAwCi0gICAgd2hpbGUgZiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOiBsaW5lID0gTm9uZQotICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCi0gICAgICAgIGYgPSBmLmZfYmFjawotICAgICAgICBuID0gbisxCi0gICAgbGlzdC5yZXZlcnNlKCkKLSAgICByZXR1cm4gbGlzdAorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBJZ25vcmUgdGhlIGV4Y2VwdGlvbiByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZy4KKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CmRpZmYgLS1naXQgYS9MaWIvdHJhY2VtYWxsb2MucHkgYi9MaWIvdHJhY2VtYWxsb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlZGZjNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90cmFjZW1hbGxvYy5weQpAQCAtMCwwICsxLDQ4NyBAQAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UsIEl0ZXJhYmxlCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgdG90YWxfb3JkZXJpbmcKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHBpY2tsZQorCisjIEltcG9ydCB0eXBlcyBhbmQgZnVuY3Rpb25zIGltcGxlbWVudGVkIGluIEMKK2Zyb20gX3RyYWNlbWFsbG9jIGltcG9ydCAqCitmcm9tIF90cmFjZW1hbGxvYyBpbXBvcnQgX2dldF9vYmplY3RfdHJhY2ViYWNrLCBfZ2V0X3RyYWNlcworCisKK2RlZiBfZm9ybWF0X3NpemUoc2l6ZSwgc2lnbik6CisgICAgZm9yIHVuaXQgaW4gKCdCJywgJ0tpQicsICdNaUInLCAnR2lCJywgJ1RpQicpOgorICAgICAgICBpZiBhYnMoc2l6ZSkgPCAxMDAgYW5kIHVuaXQgIT0gJ0InOgorICAgICAgICAgICAgIyAzIGRpZ2l0cyAoeHgueCBVTklUKQorICAgICAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiUrLjFmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiUuMWYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgIGlmIGFicyhzaXplKSA8IDEwICogMTAyNCBvciB1bml0ID09ICdUaUInOgorICAgICAgICAgICAgIyA0IG9yIDUgZGlnaXRzICh4eHh4IFVOSVQpCisgICAgICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgICAgIHJldHVybiAiJSsuMGYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiJS4wZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgc2l6ZSAvPSAxMDI0CisKKworY2xhc3MgU3RhdGlzdGljOgorICAgICIiIgorICAgIFN0YXRpc3RpYyBkaWZmZXJlbmNlIG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIHR3byBTbmFwc2hvdCBpbnN0YW5jZS4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgndHJhY2ViYWNrJywgJ3NpemUnLCAnY291bnQnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlYmFjaywgc2l6ZSwgY291bnQpOgorICAgICAgICBzZWxmLnRyYWNlYmFjayA9IHRyYWNlYmFjaworICAgICAgICBzZWxmLnNpemUgPSBzaXplCisgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5jb3VudCkpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnRyYWNlYmFjayA9PSBvdGhlci50cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5zaXplID09IG90aGVyLnNpemUKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5jb3VudCA9PSBvdGhlci5jb3VudCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICB0ZXh0ID0gKCIlczogc2l6ZT0lcywgY291bnQ9JWkiCisgICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICBfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQpKQorICAgICAgICBpZiBzZWxmLmNvdW50OgorICAgICAgICAgICAgYXZlcmFnZSA9IHNlbGYuc2l6ZSAvIHNlbGYuY291bnQKKyAgICAgICAgICAgIHRleHQgKz0gIiwgYXZlcmFnZT0lcyIgJSBfZm9ybWF0X3NpemUoYXZlcmFnZSwgRmFsc2UpCisgICAgICAgIHJldHVybiB0ZXh0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzxTdGF0aXN0aWMgdHJhY2ViYWNrPSVyIHNpemU9JWkgY291bnQ9JWk+JworICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLCBzZWxmLnNpemUsIHNlbGYuY291bnQpKQorCisgICAgZGVmIF9zb3J0X2tleShzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnNpemUsIHNlbGYuY291bnQsIHNlbGYudHJhY2ViYWNrKQorCisKK2NsYXNzIFN0YXRpc3RpY0RpZmY6CisgICAgIiIiCisgICAgU3RhdGlzdGljIGRpZmZlcmVuY2Ugb24gbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gYW4gb2xkIGFuZCBhIG5ldworICAgIFNuYXBzaG90IGluc3RhbmNlLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgndHJhY2ViYWNrJywgJ3NpemUnLCAnc2l6ZV9kaWZmJywgJ2NvdW50JywgJ2NvdW50X2RpZmYnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlYmFjaywgc2l6ZSwgc2l6ZV9kaWZmLCBjb3VudCwgY291bnRfZGlmZik6CisgICAgICAgIHNlbGYudHJhY2ViYWNrID0gdHJhY2ViYWNrCisgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKKyAgICAgICAgc2VsZi5zaXplX2RpZmYgPSBzaXplX2RpZmYKKyAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CisgICAgICAgIHNlbGYuY291bnRfZGlmZiA9IGNvdW50X2RpZmYKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHNlbGYudHJhY2ViYWNrLCBzZWxmLnNpemUsIHNlbGYuc2l6ZV9kaWZmLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCwgc2VsZi5jb3VudF9kaWZmKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYudHJhY2ViYWNrID09IG90aGVyLnRyYWNlYmFjaworICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNpemUgPT0gb3RoZXIuc2l6ZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNpemVfZGlmZiA9PSBvdGhlci5zaXplX2RpZmYKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5jb3VudCA9PSBvdGhlci5jb3VudAorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNvdW50X2RpZmYgPT0gb3RoZXIuY291bnRfZGlmZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICB0ZXh0ID0gKCIlczogc2l6ZT0lcyAoJXMpLCBjb3VudD0laSAoJStpKSIKKyAgICAgICAgICAgICAgICAlIChzZWxmLnRyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICBfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZV9kaWZmLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50LAorICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnRfZGlmZikpCisgICAgICAgIGlmIHNlbGYuY291bnQ6CisgICAgICAgICAgICBhdmVyYWdlID0gc2VsZi5zaXplIC8gc2VsZi5jb3VudAorICAgICAgICAgICAgdGV4dCArPSAiLCBhdmVyYWdlPSVzIiAlIF9mb3JtYXRfc2l6ZShhdmVyYWdlLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHRleHQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgnPFN0YXRpc3RpY0RpZmYgdHJhY2ViYWNrPSVyIHNpemU9JWkgKCUraSkgY291bnQ9JWkgKCUraSk+JworICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLCBzZWxmLnNpemUsIHNlbGYuc2l6ZV9kaWZmLAorICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQsIHNlbGYuY291bnRfZGlmZikpCisKKyAgICBkZWYgX3NvcnRfa2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gKGFicyhzZWxmLnNpemVfZGlmZiksIHNlbGYuc2l6ZSwKKyAgICAgICAgICAgICAgICBhYnMoc2VsZi5jb3VudF9kaWZmKSwgc2VsZi5jb3VudCwKKyAgICAgICAgICAgICAgICBzZWxmLnRyYWNlYmFjaykKKworCitkZWYgX2NvbXBhcmVfZ3JvdXBlZF9zdGF0cyhvbGRfZ3JvdXAsIG5ld19ncm91cCk6CisgICAgc3RhdGlzdGljcyA9IFtdCisgICAgZm9yIHRyYWNlYmFjaywgc3RhdCBpbiBuZXdfZ3JvdXAuaXRlbXMoKToKKyAgICAgICAgcHJldmlvdXMgPSBvbGRfZ3JvdXAucG9wKHRyYWNlYmFjaywgTm9uZSkKKyAgICAgICAgaWYgcHJldmlvdXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUsIHN0YXQuc2l6ZSAtIHByZXZpb3VzLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50LCBzdGF0LmNvdW50IC0gcHJldmlvdXMuY291bnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUsIHN0YXQuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQsIHN0YXQuY291bnQpCisgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKHN0YXQpCisKKyAgICBmb3IgdHJhY2ViYWNrLCBzdGF0IGluIG9sZF9ncm91cC5pdGVtcygpOgorICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssIDAsIC1zdGF0LnNpemUsIDAsIC1zdGF0LmNvdW50KQorICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChzdGF0KQorICAgIHJldHVybiBzdGF0aXN0aWNzCisKKworQHRvdGFsX29yZGVyaW5nCitjbGFzcyBGcmFtZToKKyAgICAiIiIKKyAgICBGcmFtZSBvZiBhIHRyYWNlYmFjay4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoIl9mcmFtZSIsKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgIyBmcmFtZSBpcyBhIHR1cGxlOiAoZmlsZW5hbWU6IHN0ciwgbGluZW5vOiBpbnQpCisgICAgICAgIHNlbGYuX2ZyYW1lID0gZnJhbWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmaWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZyYW1lWzBdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGluZW5vKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJhbWVbMV0KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2ZyYW1lID09IG90aGVyLl9mcmFtZSkKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2ZyYW1lIDwgb3RoZXIuX2ZyYW1lKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9mcmFtZSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzOiVzIiAlIChzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8RnJhbWUgZmlsZW5hbWU9JXIgbGluZW5vPSVyPiIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8pCisKKworQHRvdGFsX29yZGVyaW5nCitjbGFzcyBUcmFjZWJhY2soU2VxdWVuY2UpOgorICAgICIiIgorICAgIFNlcXVlbmNlIG9mIEZyYW1lIGluc3RhbmNlcyBzb3J0ZWQgZnJvbSB0aGUgbW9zdCByZWNlbnQgZnJhbWUKKyAgICB0byB0aGUgb2xkZXN0IGZyYW1lLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgiX2ZyYW1lcyIsKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lcyk6CisgICAgICAgIFNlcXVlbmNlLl9faW5pdF9fKHNlbGYpCisgICAgICAgICMgZnJhbWVzIGlzIGEgdHVwbGUgb2YgZnJhbWUgdHVwbGVzOiBzZWUgRnJhbWUgY29uc3RydWN0b3IgZm9yIHRoZQorICAgICAgICAjIGZvcm1hdCBvZiBhIGZyYW1lIHR1cGxlCisgICAgICAgIHNlbGYuX2ZyYW1lcyA9IGZyYW1lcworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZnJhbWVzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShpbmRleCwgc2xpY2UpOgorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKEZyYW1lKHRyYWNlKSBmb3IgdHJhY2UgaW4gc2VsZi5fZnJhbWVzW2luZGV4XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGcmFtZShzZWxmLl9mcmFtZXNbaW5kZXhdKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBmcmFtZSk6CisgICAgICAgIHJldHVybiBmcmFtZS5fZnJhbWUgaW4gc2VsZi5fZnJhbWVzCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2ZyYW1lcykKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2ZyYW1lcyA9PSBvdGhlci5fZnJhbWVzKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWVzIDwgb3RoZXIuX2ZyYW1lcykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGZbMF0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFRyYWNlYmFjayAlcj4iICUgKHR1cGxlKHNlbGYpLCkKKworICAgIGRlZiBmb3JtYXQoc2VsZiwgbGltaXQ9Tm9uZSk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmUgYW5kIGxpbWl0IDwgMDoKKyAgICAgICAgICAgIHJldHVybiBsaW5lcworICAgICAgICBmb3IgZnJhbWUgaW4gc2VsZls6bGltaXRdOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgIEZpbGUgIiVzIiwgbGluZSAlcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChmcmFtZS5maWxlbmFtZSwgZnJhbWUubGluZW5vKSkKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmcmFtZS5maWxlbmFtZSwgZnJhbWUubGluZW5vKS5zdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzJyAlIGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lcworCisKK2RlZiBnZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopOgorICAgICIiIgorICAgIEdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0ICpvYmoqIHdhcyBhbGxvY2F0ZWQuCisgICAgUmV0dXJuIGEgVHJhY2ViYWNrIGluc3RhbmNlLgorCisgICAgUmV0dXJuIE5vbmUgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBub3QgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IKKyAgICBkaWQgbm90IHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBvYmplY3QuCisgICAgIiIiCisgICAgZnJhbWVzID0gX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICBpZiBmcmFtZXMgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soZnJhbWVzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgVHJhY2U6CisgICAgIiIiCisgICAgVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2suCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCJfdHJhY2UiLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgICMgdHJhY2UgaXMgYSB0dXBsZTogKHNpemUsIHRyYWNlYmFjayksIHNlZSBUcmFjZWJhY2sgY29uc3RydWN0b3IKKyAgICAgICAgIyBmb3IgdGhlIGZvcm1hdCBvZiB0aGUgdHJhY2ViYWNrIHR1cGxlCisgICAgICAgIHNlbGYuX3RyYWNlID0gdHJhY2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhY2VbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmFjZWJhY2soc2VsZik6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soc2VsZi5fdHJhY2VbMV0pCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl90cmFjZSA9PSBvdGhlci5fdHJhY2UpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX3RyYWNlKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChzZWxmLnRyYWNlYmFjaywgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCI8VHJhY2Ugc2l6ZT0lcywgdHJhY2ViYWNrPSVyPiIKKyAgICAgICAgICAgICAgICAlIChfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksIHNlbGYudHJhY2ViYWNrKSkKKworCitjbGFzcyBfVHJhY2VzKFNlcXVlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2VzKToKKyAgICAgICAgU2VxdWVuY2UuX19pbml0X18oc2VsZikKKyAgICAgICAgIyB0cmFjZXMgaXMgYSB0dXBsZSBvZiB0cmFjZSB0dXBsZXM6IHNlZSBUcmFjZSBjb25zdHJ1Y3RvcgorICAgICAgICBzZWxmLl90cmFjZXMgPSB0cmFjZXMKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3RyYWNlcykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5kZXgsIHNsaWNlKToKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShUcmFjZSh0cmFjZSkgZm9yIHRyYWNlIGluIHNlbGYuX3RyYWNlc1tpbmRleF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJhY2Uoc2VsZi5fdHJhY2VzW2luZGV4XSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdHJhY2UpOgorICAgICAgICByZXR1cm4gdHJhY2UuX3RyYWNlIGluIHNlbGYuX3RyYWNlcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fdHJhY2VzID09IG90aGVyLl90cmFjZXMpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFRyYWNlcyBsZW49JXM+IiAlIGxlbihzZWxmKQorCisKK2RlZiBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGgubm9ybWNhc2UoZmlsZW5hbWUpCisgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi0xXQorICAgIHJldHVybiBmaWxlbmFtZQorCisKK2NsYXNzIEZpbHRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5jbHVzaXZlLCBmaWxlbmFtZV9wYXR0ZXJuLAorICAgICAgICAgICAgICAgICBsaW5lbm89Tm9uZSwgYWxsX2ZyYW1lcz1GYWxzZSk6CisgICAgICAgIHNlbGYuaW5jbHVzaXZlID0gaW5jbHVzaXZlCisgICAgICAgIHNlbGYuX2ZpbGVuYW1lX3BhdHRlcm4gPSBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lX3BhdHRlcm4pCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisgICAgICAgIHNlbGYuYWxsX2ZyYW1lcyA9IGFsbF9mcmFtZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmaWxlbmFtZV9wYXR0ZXJuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZW5hbWVfcGF0dGVybgorCisgICAgZGVmIF9fbWF0Y2hfZnJhbWUoc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIGZpbGVuYW1lID0gX25vcm1hbGl6ZV9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgaWYgbm90IGZubWF0Y2guZm5tYXRjaChmaWxlbmFtZSwgc2VsZi5fZmlsZW5hbWVfcGF0dGVybik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5saW5lbm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKGxpbmVubyA9PSBzZWxmLmxpbmVubykKKworICAgIGRlZiBfbWF0Y2hfZnJhbWUoc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIHJldHVybiBzZWxmLl9fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIGxpbmVubykgXiAobm90IHNlbGYuaW5jbHVzaXZlKQorCisgICAgZGVmIF9tYXRjaF90cmFjZWJhY2soc2VsZiwgdHJhY2ViYWNrKToKKyAgICAgICAgaWYgc2VsZi5hbGxfZnJhbWVzOgorICAgICAgICAgICAgaWYgYW55KHNlbGYuX19tYXRjaF9mcmFtZShmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSwgbGluZW5vIGluIHRyYWNlYmFjayk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5jbHVzaXZlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAobm90IHNlbGYuaW5jbHVzaXZlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRyYWNlYmFja1swXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pCisKKworY2xhc3MgU25hcHNob3Q6CisgICAgIiIiCisgICAgU25hcHNob3Qgb2YgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZXMsIHRyYWNlYmFja19saW1pdCk6CisgICAgICAgICMgdHJhY2VzIGlzIGEgdHVwbGUgb2YgdHJhY2UgdHVwbGVzOiBzZWUgX1RyYWNlcyBjb25zdHJ1Y3RvciBmb3IKKyAgICAgICAgIyB0aGUgZXhhY3QgZm9ybWF0CisgICAgICAgIHNlbGYudHJhY2VzID0gX1RyYWNlcyh0cmFjZXMpCisgICAgICAgIHNlbGYudHJhY2ViYWNrX2xpbWl0ID0gdHJhY2ViYWNrX2xpbWl0CisKKyAgICBkZWYgZHVtcChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBXcml0ZSB0aGUgc25hcHNob3QgaW50byBhIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgcGlja2xlLmR1bXAoc2VsZiwgZnAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkKGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIExvYWQgYSBzbmFwc2hvdCBmcm9tIGEgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CisgICAgICAgICAgICByZXR1cm4gcGlja2xlLmxvYWQoZnApCisKKyAgICBkZWYgX2ZpbHRlcl90cmFjZShzZWxmLCBpbmNsdWRlX2ZpbHRlcnMsIGV4Y2x1ZGVfZmlsdGVycywgdHJhY2UpOgorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZVsxXQorICAgICAgICBpZiBpbmNsdWRlX2ZpbHRlcnM6CisgICAgICAgICAgICBpZiBub3QgYW55KHRyYWNlX2ZpbHRlci5fbWF0Y2hfdHJhY2ViYWNrKHRyYWNlYmFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRyYWNlX2ZpbHRlciBpbiBpbmNsdWRlX2ZpbHRlcnMpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBleGNsdWRlX2ZpbHRlcnM6CisgICAgICAgICAgICBpZiBhbnkobm90IHRyYWNlX2ZpbHRlci5fbWF0Y2hfdHJhY2ViYWNrKHRyYWNlYmFjaykKKyAgICAgICAgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGV4Y2x1ZGVfZmlsdGVycyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZmlsdGVyX3RyYWNlcyhzZWxmLCBmaWx0ZXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIG5ldyBTbmFwc2hvdCBpbnN0YW5jZSB3aXRoIGEgZmlsdGVyZWQgdHJhY2VzIHNlcXVlbmNlLCBmaWx0ZXJzCisgICAgICAgIGlzIGEgbGlzdCBvZiBGaWx0ZXIgaW5zdGFuY2VzLiAgSWYgZmlsdGVycyBpcyBhbiBlbXB0eSBsaXN0LCByZXR1cm4gYQorICAgICAgICBuZXcgU25hcHNob3QgaW5zdGFuY2Ugd2l0aCBhIGNvcHkgb2YgdGhlIHRyYWNlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbHRlcnMsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZmlsdGVycyBtdXN0IGJlIGEgbGlzdCBvZiBmaWx0ZXJzLCBub3QgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB0eXBlKGZpbHRlcnMpLl9fbmFtZV9fKQorICAgICAgICBpZiBmaWx0ZXJzOgorICAgICAgICAgICAgaW5jbHVkZV9maWx0ZXJzID0gW10KKyAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVycyA9IFtdCisgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGZpbHRlcnM6CisgICAgICAgICAgICAgICAgaWYgdHJhY2VfZmlsdGVyLmluY2x1c2l2ZToKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9maWx0ZXJzLmFwcGVuZCh0cmFjZV9maWx0ZXIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXJzLmFwcGVuZCh0cmFjZV9maWx0ZXIpCisgICAgICAgICAgICBuZXdfdHJhY2VzID0gW3RyYWNlIGZvciB0cmFjZSBpbiBzZWxmLnRyYWNlcy5fdHJhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2ZpbHRlcl90cmFjZShpbmNsdWRlX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZSldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdfdHJhY2VzID0gc2VsZi50cmFjZXMuX3RyYWNlcy5jb3B5KCkKKyAgICAgICAgcmV0dXJuIFNuYXBzaG90KG5ld190cmFjZXMsIHNlbGYudHJhY2ViYWNrX2xpbWl0KQorCisgICAgZGVmIF9ncm91cF9ieShzZWxmLCBrZXlfdHlwZSwgY3VtdWxhdGl2ZSk6CisgICAgICAgIGlmIGtleV90eXBlIG5vdCBpbiAoJ3RyYWNlYmFjaycsICdmaWxlbmFtZScsICdsaW5lbm8nKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24ga2V5X3R5cGU6ICVyIiAlIChrZXlfdHlwZSwpKQorICAgICAgICBpZiBjdW11bGF0aXZlIGFuZCBrZXlfdHlwZSBub3QgaW4gKCdsaW5lbm8nLCAnZmlsZW5hbWUnKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImN1bXVsYXRpdmUgbW9kZSBjYW5ub3QgYnkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGtleSB0eXBlICVyIiAlIGtleV90eXBlKQorCisgICAgICAgIHN0YXRzID0ge30KKyAgICAgICAgdHJhY2ViYWNrcyA9IHt9CisgICAgICAgIGlmIG5vdCBjdW11bGF0aXZlOgorICAgICAgICAgICAgZm9yIHRyYWNlIGluIHNlbGYudHJhY2VzLl90cmFjZXM6CisgICAgICAgICAgICAgICAgc2l6ZSwgdHJhY2VfdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja3NbdHJhY2VfdHJhY2ViYWNrXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5X3R5cGUgPT0gJ3RyYWNlYmFjayc6CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSB0cmFjZV90cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXlfdHlwZSA9PSAnbGluZW5vJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9IHRyYWNlX3RyYWNlYmFja1s6MV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZTogIyBrZXlfdHlwZSA9PSAnZmlsZW5hbWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gKCh0cmFjZV90cmFjZWJhY2tbMF1bMF0sIDApLCkKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gVHJhY2ViYWNrKGZyYW1lcykKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrc1t0cmFjZV90cmFjZWJhY2tdID0gdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGF0ID0gc3RhdHNbdHJhY2ViYWNrXQorICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUgKz0gc2l6ZQorICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHN0YXRzW3RyYWNlYmFja10gPSBTdGF0aXN0aWModHJhY2ViYWNrLCBzaXplLCAxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjdW11bGF0aXZlIHN0YXRpc3RpY3MKKyAgICAgICAgICAgIGZvciB0cmFjZSBpbiBzZWxmLnRyYWNlcy5fdHJhY2VzOgorICAgICAgICAgICAgICAgIHNpemUsIHRyYWNlX3RyYWNlYmFjayA9IHRyYWNlCisgICAgICAgICAgICAgICAgZm9yIGZyYW1lIGluIHRyYWNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrc1tmcmFtZV0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5X3R5cGUgPT0gJ2xpbmVubyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gKGZyYW1lLCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6ICMga2V5X3R5cGUgPT0gJ2ZpbGVuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSAoKGZyYW1lWzBdLCAwKSwpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSBUcmFjZWJhY2soZnJhbWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrc1tmcmFtZV0gPSB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9IHN0YXRzW3RyYWNlYmFja10KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSArPSBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHNbdHJhY2ViYWNrXSA9IFN0YXRpc3RpYyh0cmFjZWJhY2ssIHNpemUsIDEpCisgICAgICAgIHJldHVybiBzdGF0cworCisgICAgZGVmIHN0YXRpc3RpY3Moc2VsZiwga2V5X3R5cGUsIGN1bXVsYXRpdmU9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgR3JvdXAgc3RhdGlzdGljcyBieSBrZXlfdHlwZS4gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgU3RhdGlzdGljCisgICAgICAgIGluc3RhbmNlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGdyb3VwZWQgPSBzZWxmLl9ncm91cF9ieShrZXlfdHlwZSwgY3VtdWxhdGl2ZSkKKyAgICAgICAgc3RhdGlzdGljcyA9IGxpc3QoZ3JvdXBlZC52YWx1ZXMoKSkKKyAgICAgICAgc3RhdGlzdGljcy5zb3J0KHJldmVyc2U9VHJ1ZSwga2V5PVN0YXRpc3RpYy5fc29ydF9rZXkpCisgICAgICAgIHJldHVybiBzdGF0aXN0aWNzCisKKyAgICBkZWYgY29tcGFyZV90byhzZWxmLCBvbGRfc25hcHNob3QsIGtleV90eXBlLCBjdW11bGF0aXZlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIHdpdGggYW4gb2xkIHNuYXBzaG90IG9sZF9zbmFwc2hvdC4gR2V0CisgICAgICAgIHN0YXRpc3RpY3MgYXMgYSBzb3J0ZWQgbGlzdCBvZiBTdGF0aXN0aWNEaWZmIGluc3RhbmNlcywgZ3JvdXBlZCBieQorICAgICAgICBncm91cF9ieS4KKyAgICAgICAgIiIiCisgICAgICAgIG5ld19ncm91cCA9IHNlbGYuX2dyb3VwX2J5KGtleV90eXBlLCBjdW11bGF0aXZlKQorICAgICAgICBvbGRfZ3JvdXAgPSBvbGRfc25hcHNob3QuX2dyb3VwX2J5KGtleV90eXBlLCBjdW11bGF0aXZlKQorICAgICAgICBzdGF0aXN0aWNzID0gX2NvbXBhcmVfZ3JvdXBlZF9zdGF0cyhvbGRfZ3JvdXAsIG5ld19ncm91cCkKKyAgICAgICAgc3RhdGlzdGljcy5zb3J0KHJldmVyc2U9VHJ1ZSwga2V5PVN0YXRpc3RpY0RpZmYuX3NvcnRfa2V5KQorICAgICAgICByZXR1cm4gc3RhdGlzdGljcworCisKK2RlZiB0YWtlX3NuYXBzaG90KCk6CisgICAgIiIiCisgICAgVGFrZSBhIHNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisgICAgIiIiCisgICAgaWYgbm90IGlzX3RyYWNpbmcoKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbG9jYXRpb25zIHRvIHRha2UgYSBzbmFwc2hvdCIpCisgICAgdHJhY2VzID0gX2dldF90cmFjZXMoKQorICAgIHRyYWNlYmFja19saW1pdCA9IGdldF90cmFjZWJhY2tfbGltaXQoKQorICAgIHJldHVybiBTbmFwc2hvdCh0cmFjZXMsIHRyYWNlYmFja19saW1pdCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGUucHkgYi9MaWIvdHVydGxlLnB5CmluZGV4IGM2ZWJmYTUuLmY0NDAwYzkgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGUucHkKKysrIGIvTGliL3R1cnRsZS5weQpAQCAtMTA5LDYgKzEwOSw3IEBACiBpbXBvcnQgbWF0aAogaW1wb3J0IHRpbWUKIGltcG9ydCBpbnNwZWN0CitpbXBvcnQgc3lzCiAKIGZyb20gb3MucGF0aCBpbXBvcnQgaXNmaWxlLCBzcGxpdCwgam9pbgogZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpAQCAtMTM5LDcgKzE0MCw3IEBACiBfdGdfdXRpbGl0aWVzID0gWyd3cml0ZV9kb2NzdHJpbmdkaWN0JywgJ2RvbmUnXQogCiBfX2FsbF9fID0gKF90Z19jbGFzc2VzICsgX3RnX3NjcmVlbl9mdW5jdGlvbnMgKyBfdGdfdHVydGxlX2Z1bmN0aW9ucyArCi0gICAgICAgICAgIF90Z191dGlsaXRpZXMpICMgKyBfbWF0aF9mdW5jdGlvbnMpCisgICAgICAgICAgIF90Z191dGlsaXRpZXMgKyBbJ1Rlcm1pbmF0b3InXSkgIyArIF9tYXRoX2Z1bmN0aW9ucykKIAogX2FsaWFzX2xpc3QgPSBbJ2FkZHNoYXBlJywgJ2JhY2t3YXJkJywgJ2JrJywgJ2ZkJywgJ2h0JywgJ2x0JywgJ3BkJywgJ3BvcycsCiAgICAgICAgICAgICAgICAncHUnLCAncnQnLCAnc2V0aCcsICdzZXRwb3MnLCAnc2V0cG9zaXRpb24nLCAnc3QnLApAQCAtOTkyLDYgKzk5MywxMyBAQAogICAgICAgICBzZWxmLl9jb2xvcm1vZGUgPSBfQ0ZHWyJjb2xvcm1vZGUiXQogICAgICAgICBzZWxmLl9rZXlzID0gW10KICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgRm9yY2UgVHVydGxlIHdpbmRvdyB0byB0aGUgZnJvbnQgb24gT1MgWC4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZQorICAgICAgICAgICAgIyB0aGUgVHVydGxlIHdpbmRvdyB3aWxsIHNob3cgYmVoaW5kIHRoZSBUZXJtaW5hbCB3aW5kb3cgd2hlbiB5b3UKKyAgICAgICAgICAgICMgc3RhcnQgdGhlIGRlbW8gZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgcm9vdHdpbmRvdyA9IGN2LndpbmZvX3RvcGxldmVsKCkKKyAgICAgICAgICAgIHJvb3R3aW5kb3cuY2FsbCgnd20nLCAnYXR0cmlidXRlcycsICcuJywgJy10b3Btb3N0JywgJzEnKQorICAgICAgICAgICAgcm9vdHdpbmRvdy5jYWxsKCd3bScsICdhdHRyaWJ1dGVzJywgJy4nLCAnLXRvcG1vc3QnLCAnMCcpCiAKICAgICBkZWYgY2xlYXIoc2VsZik6CiAgICAgICAgICIiIkRlbGV0ZSBhbGwgZHJhd2luZ3MgYW5kIGFsbCB0dXJ0bGVzIGZyb20gdGhlIFR1cnRsZVNjcmVlbi4KQEAgLTI1ODcsNyArMjU5NSw3IEBACiAgICAgICAgIEV4YW1wbGUgKGZvciBhIFR1cnRsZSBpbnN0YW5jZSBuYW1lZCB0dXJ0bGUpOgogICAgICAgICA+Pj4gdHVydGxlLnNldHVuZG9idWZmZXIoNDIpCiAgICAgICAgICIiIgotICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZSBvciBzaXplIDw9IDA6CiAgICAgICAgICAgICBzZWxmLnVuZG9idWZmZXIgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnVuZG9idWZmZXIgPSBUYnVmZmVyKHNpemUpCkBAIC0yOTM4LDcgKzI5NDYsNyBAQAogICAgICAgICBzZWxmLl9zdHJldGNoZmFjdG9yID0gYTExLCBhMjIKICAgICAgICAgc2VsZi5fc2hlYXJmYWN0b3IgPSBhMTIvYTIyCiAgICAgICAgIHNlbGYuX3RpbHQgPSBhbGZhCi0gICAgICAgIHNlbGYuX3VwZGF0ZSgpCisgICAgICAgIHNlbGYucGVuKHJlc2l6ZW1vZGU9InVzZXIiKQogCiAKICAgICBkZWYgX3BvbHl0cmFmbyhzZWxmLCBwb2x5KToKQEAgLTM4NDMsMTggKzM4NTEsMTggQEAKICAgICAgICAga2V5ID0gIlR1cnRsZS4iK21ldGhvZG5hbWUKICAgICAgICAgZG9jc2RpY3Rba2V5XSA9IGV2YWwoa2V5KS5fX2RvY19fCiAKLSAgICBmID0gb3BlbigiJXMucHkiICUgZmlsZW5hbWUsInciKQotICAgIGtleXMgPSBzb3J0ZWQoW3ggZm9yIHggaW4gZG9jc2RpY3Qua2V5cygpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKLSAgICBmLndyaXRlKCdkb2NzZGljdCA9IHtcblxuJykKLSAgICBmb3Iga2V5IGluIGtleXNbOi0xXToKKyAgICB3aXRoIG9wZW4oIiVzLnB5IiAlIGZpbGVuYW1lLCJ3IikgYXMgZjoKKyAgICAgICAga2V5cyA9IHNvcnRlZChbeCBmb3IgeCBpbiBkb2NzZGljdC5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKKyAgICAgICAgZi53cml0ZSgnZG9jc2RpY3QgPSB7XG5cbicpCisgICAgICAgIGZvciBrZXkgaW4ga2V5c1s6LTFdOgorICAgICAgICAgICAgZi53cml0ZSgnJXMgOlxuJyAlIHJlcHIoa2V5KSkKKyAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGtleSA9IGtleXNbLTFdCiAgICAgICAgIGYud3JpdGUoJyVzIDpcbicgJSByZXByKGtleSkpCi0gICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCi0gICAga2V5ID0ga2V5c1stMV0KLSAgICBmLndyaXRlKCclcyA6XG4nICUgcmVwcihrZXkpKQotICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIlxuXG4nICUgZG9jc2RpY3Rba2V5XSkKLSAgICBmLndyaXRlKCJ9XG4iKQotICAgIGYuY2xvc2UoKQorICAgICAgICBmLndyaXRlKCcgICAgICAgICIiIiVzXG4iIiJcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGYud3JpdGUoIn1cbiIpCisgICAgICAgIGYuY2xvc2UoKQogCiBkZWYgcmVhZF9kb2NzdHJpbmdzKGxhbmcpOgogICAgICIiIlJlYWQgaW4gZG9jc3RyaW5ncyBmcm9tIGxhbmctc3BlY2lmaWMgZG9jc3RyaW5nIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9fX2luaXRfXy5weSBiL0xpYi90dXJ0bGVkZW1vL19faW5pdF9fLnB5CmluZGV4IGU2OWRlMjkuLjc3MTUwZTIgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL19faW5pdF9fLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTQgQEAKKyIiIgorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEFib3V0IHRoaXMgdmlld2VyCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRpbnkgZGVtbyB2aWV3ZXIgdG8gdmlldyB0dXJ0bGUgZ3JhcGhpY3MgZXhhbXBsZSBzY3JpcHRzLgorCisgICAgUXVpY2tseSBhbmQgZGlydHlseSBhc3NlbWJsZWQgYnkgR3JlZ29yIExpbmdsLgorICAgIEp1bmUsIDIwMDYKKworICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogdHVydGxlZGVtbyAtIEhlbHAKKworICAgIEhhdmUgZnVuIQorIiIiCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weSBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CmluZGV4IGNiZjNhZWIuLjRiNmUzODkgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CkBAIC0xLDE3ICsxLDEwNCBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCisiIiIKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgdHVydGxlRGVtbyAtIEhlbHAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgZG9jdW1lbnQgaGFzIHR3byBzZWN0aW9uczoKKworICAoMSkgSG93IHRvIHVzZSB0aGUgZGVtbyB2aWV3ZXIKKyAgKDIpIEhvdyB0byBhZGQgeW91ciBvd24gZGVtb3MgdG8gdGhlIGRlbW8gcmVwb3NpdG9yeQorCisKKyAgKDEpIEhvdyB0byB1c2UgdGhlIGRlbW8gdmlld2VyLgorCisgIFNlbGVjdCBhIGRlbW9zY3JpcHQgZnJvbSB0aGUgZXhhbXBsZSBtZW51LgorICBUaGUgKHN5bnRheCBjb2xvdXJlZCkgc291cmNlIGNvZGUgYXBwZWFycyBpbiB0aGUgbGVmdAorICBzb3VyY2UgY29kZSB3aW5kb3cuIElUIENBTk5PVCBCRSBFRElURUQsIGJ1dCBPTkxZIFZJRVdFRCEKKworICBUaGUgZGVtbyB2aWV3ZXIgd2luZG93cyBjYW4gYmUgcmVzaXplZC4gVGhlIGRpdmlkZXIgYmV0d2VlbiB0ZXh0CisgIGFuZCBjYW52YXMgY2FuIGJlIG1vdmVkIGJ5IGdyYWJiaW5nIGl0IHdpdGggdGhlIG1vdXNlLiBUaGUgdGV4dCBmb250CisgIHNpemUgY2FuIGJlIGNoYW5nZWQgZnJvbSB0aGUgbWVudSBhbmQgd2l0aCBDb250cm9sL0NvbW1hbmQgJy0nLycrJy4KKyAgSXQgY2FuIGFsc28gYmUgY2hhbmdlZCBvbiBtb3N0IHN5c3RlbXMgd2l0aCBDb250cm9sLW1vdXNld2hlZWwKKyAgd2hlbiB0aGUgbW91c2UgaXMgb3ZlciB0aGUgdGV4dC4KKworICBQcmVzcyBTVEFSVCBidXR0b24gdG8gc3RhcnQgdGhlIGRlbW8uCisgIFN0b3AgZXhlY3V0aW9uIGJ5IHByZXNzaW5nIHRoZSBTVE9QIGJ1dHRvbi4KKyAgQ2xlYXIgc2NyZWVuIGJ5IHByZXNzaW5nIHRoZSBDTEVBUiBidXR0b24uCisgIFJlc3RhcnQgYnkgcHJlc3NpbmcgdGhlIFNUQVJUIGJ1dHRvbiBhZ2Fpbi4KKworICBTUEVDSUFMIGRlbW9zLCBzdWNoIGFzIGNsb2NrLnB5IGFyZSB0aG9zZSB3aGljaCBydW4gRVZFTlREUklWRU4uCisKKyAgICAgIFByZXNzIFNUQVJUIGJ1dHRvbiB0byBzdGFydCB0aGUgZGVtby4KKworICAgICAgLSBVbnRpbCB0aGUgRVZFTlRMT09QIGlzIGVudGVyZWQgZXZlcnl0aGluZyB3b3JrcworICAgICAgYXMgaW4gYW4gb3JkaW5hcnkgZGVtbyBzY3JpcHQuCisKKyAgICAgIC0gV2hlbiB0aGUgRVZFTlRMT09QIGlzIGVudGVyZWQsIHlvdSBjb250cm9sIHRoZQorICAgICAgYXBwbGljYXRpb24gYnkgdXNpbmcgdGhlIG1vdXNlIGFuZC9vciBrZXlzIChvciBpdCdzCisgICAgICBjb250cm9sbGVkIGJ5IHNvbWUgdGltZXIgZXZlbnRzKQorICAgICAgVG8gc3RvcCBpdCB5b3UgY2FuIGFuZCBtdXN0IHByZXNzIHRoZSBTVE9QIGJ1dHRvbi4KKworICAgICAgV2hpbGUgdGhlIEVWRU5UTE9PUCBpcyBydW5uaW5nLCB0aGUgZXhhbXBsZXMgbWVudSBpcyBkaXNhYmxlZC4KKworICAgICAgLSBPbmx5IGFmdGVyIGhhdmluZyBwcmVzc2VkIHRoZSBTVE9QIGJ1dHRvbiwgeW91IG1heQorICAgICAgcmVzdGFydCBpdCBvciBjaG9vc2UgYW5vdGhlciBleGFtcGxlIHNjcmlwdC4KKworICAgKiAqICogKiAqICogKiAqCisgICBJbiBzb21lIHJhcmUgc2l0dWF0aW9ucyB0aGVyZSBtYXkgb2NjdXIgaW50ZXJmZXJlbmNlcy9jb25mbGljdHMKKyAgIGJldHdlZW4gZXZlbnRzIGNvbmNlcm5pbmcgdGhlIGRlbW8gc2NyaXB0IGFuZCB0aG9zZSBjb25jZXJuaW5nIHRoZQorICAgZGVtby12aWV3ZXIuIChUaGV5IHJ1biBpbiB0aGUgc2FtZSBwcm9jZXNzLikgU3RyYW5nZSBiZWhhdmlvdXIgbWF5IGJlCisgICB0aGUgY29uc2VxdWVuY2UgYW5kIGluIHRoZSB3b3JzdCBjYXNlIHlvdSBtdXN0IGNsb3NlIGFuZCByZXN0YXJ0IHRoZQorICAgdmlld2VyLgorICAgKiAqICogKiAqICogKiAqCisKKworICAgKDIpIEhvdyB0byBhZGQgeW91ciBvd24gZGVtb3MgdG8gdGhlIGRlbW8gcmVwb3NpdG9yeQorCisgICAtIFBsYWNlIHRoZSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0dXJ0bGVkZW1vL19fbWFpbl9fLnB5CisgICAgIElNUE9SVEFOVCEgV2hlbiBpbXBvcnRlZCwgdGhlIGRlbW8gc2hvdWxkIG5vdCBtb2RpZnkgdGhlIHN5c3RlbQorICAgICBieSBjYWxsaW5nIGZ1bmN0aW9ucyBpbiBvdGhlciBtb2R1bGVzLCBzdWNoIGFzIHN5cywgdGtpbnRlciwgb3IKKyAgICAgdHVydGxlLiBHbG9iYWwgdmFyaWFibGVzIHNob3VsZCBiZSBpbml0aWFsaXplZCBpbiBtYWluKCkuCisKKyAgIC0gVGhlIGNvZGUgbXVzdCBjb250YWluIGEgbWFpbigpIGZ1bmN0aW9uIHdoaWNoIHdpbGwKKyAgICAgYmUgZXhlY3V0ZWQgYnkgdGhlIHZpZXdlciAoc2VlIHByb3ZpZGVkIGV4YW1wbGUgc2NyaXB0cykuCisgICAgIEl0IG1heSByZXR1cm4gYSBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIExhYmVsIGJlbG93CisgICAgIHRoZSBzb3VyY2UgY29kZSB3aW5kb3cgKHdoZW4gZXhlY3V0aW9uIGhhcyBmaW5pc2hlZC4pCisKKyAgIC0gSW4gb3JkZXIgdG8gcnVuIG15ZGVtby5weSBieSBpdHNlbGYsIHN1Y2ggYXMgZHVyaW5nIGRldmVsb3BtZW50LAorICAgICBhZGQgdGhlIGZvbGxvd2luZyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlOgorCisgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgbWFpbigpCisgICAgICAgIG1haW5sb29wKCkgICMga2VlcCB3aW5kb3cgb3BlbgorCisgICAgcHl0aG9uIC1tIHR1cnRsZWRlbW8ubXlkZW1vICAjIHdpbGwgdGhlbiBydW4gaXQKKworICAgLSBJZiB0aGUgZGVtbyBpcyBFVkVOVCBEUklWRU4sIG1haW4gbXVzdCByZXR1cm4gdGhlIHN0cmluZworICAgICAiRVZFTlRMT09QIi4gVGhpcyBpbmZvcm1zIHRoZSBkZW1vIHZpZXdlciB0aGF0IHRoZSBzY3JpcHQgaXMKKyAgICAgc3RpbGwgcnVubmluZyBhbmQgbXVzdCBiZSBzdG9wcGVkIGJ5IHRoZSB1c2VyIQorCisgICAgIElmIGFuICJFVkVOVExPT1AiIGRlbW8gcnVucyBieSBpdHNlbGYsIGFzIHdpdGggY2xvY2ssIHdoaWNoIHVzZXMKKyAgICAgb250aW1lciwgb3IgbWluaW1hbF9oYW5vaSwgd2hpY2ggbG9vcHMgYnkgcmVjdXJzaW9uLCB0aGVuIHRoZQorICAgICBjb2RlIHNob3VsZCBjYXRjaCB0aGUgdHVydGxlLlRlcm1pbmF0b3IgZXhjZXB0aW9uIHRoYXQgd2lsbCBiZQorICAgICByYWlzZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBTVE9QIGJ1dHRvbi4gIChQYWludCBpcyBub3Qgc3VjaAorICAgICBhIGRlbW87IGl0IG9ubHkgYWN0cyBpbiByZXNwb25zZSB0byBtb3VzZSBjbGlja3MgYW5kIG1vdmVtZW50cy4pCisiIiIKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogCiBmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGZyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCiBmcm9tIGlkbGVsaWIuQ29sb3JEZWxlZ2F0b3IgaW1wb3J0IENvbG9yRGVsZWdhdG9yCi1mcm9tIGlkbGVsaWIudGV4dFZpZXcgaW1wb3J0IHZpZXdfZmlsZSAjIFRleHRWaWV3ZXIKLWZyb20gaW1wIGltcG9ydCByZWxvYWQKK2Zyb20gaWRsZWxpYi50ZXh0VmlldyBpbXBvcnQgdmlld190ZXh0Citmcm9tIHR1cnRsZWRlbW8gaW1wb3J0IF9fZG9jX18gYXMgYWJvdXRfdHVydGxlZGVtbwogCiBpbXBvcnQgdHVydGxlCiBpbXBvcnQgdGltZQogCiBkZW1vX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorZGFyd2luID0gc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nCiAKIFNUQVJUVVAgPSAxCiBSRUFEWSA9IDIKQEAgLTIxLDE3MCArMTA4LDIxMyBAQAogCiBtZW51Zm9udCA9ICgiQXJpYWwiLCAxMiwgTk9STUFMKQogYnRuZm9udCA9ICgiQXJpYWwiLCAxMiwgJ2JvbGQnKQotdHh0Zm9udCA9ICgnTHVjaWRhIENvbnNvbGUnLCA4LCAnbm9ybWFsJykKK3R4dGZvbnQgPSBbJ0x1Y2lkYSBDb25zb2xlJywgMTAsICdub3JtYWwnXQorCitNSU5JTVVNX0ZPTlRfU0laRSA9IDYKK01BWElNVU1fRk9OVF9TSVpFID0gMTAwCitmb250X3NpemVzID0gWzgsIDksIDEwLCAxMSwgMTIsIDE0LCAxOCwgMjAsIDIyLCAyNCwgMzBdCiAKIGRlZiBnZXRFeGFtcGxlRW50cmllcygpOgogICAgIHJldHVybiBbZW50cnlbOi0zXSBmb3IgZW50cnkgaW4gb3MubGlzdGRpcihkZW1vX2RpcikgaWYKICAgICAgICAgICAgIGVudHJ5LmVuZHN3aXRoKCIucHkiKSBhbmQgZW50cnlbMF0gIT0gJ18nXQogCi1kZWYgc2hvd0RlbW9IZWxwKCk6Ci0gICAgdmlld19maWxlKGRlbW8ucm9vdCwgIkhlbHAgb24gdHVydGxlRGVtbyIsCi0gICAgICAgICAgICAgIG9zLnBhdGguam9pbihkZW1vX2RpciwgImRlbW9oZWxwLnR4dCIpKQotCi1kZWYgc2hvd0Fib3V0RGVtbygpOgotICAgIHZpZXdfZmlsZShkZW1vLnJvb3QsICJBYm91dCB0dXJ0bGVEZW1vIiwKLSAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRlbW9fZGlyLCAiYWJvdXRfdHVydGxlZGVtby50eHQiKSkKLQotZGVmIHNob3dBYm91dFR1cnRsZSgpOgotICAgIHZpZXdfZmlsZShkZW1vLnJvb3QsICJBYm91dCB0aGUgbmV3IHR1cnRsZSBtb2R1bGUuIiwKLSAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRlbW9fZGlyLCAiYWJvdXRfdHVydGxlLnR4dCIpKQoraGVscF9lbnRyaWVzID0gKCAgIyAoaGVscF9sYWJlbCwgIGhlbHBfZG9jKQorICAgICgnVHVydGxlZGVtbyBoZWxwJywgX19kb2NfXyksCisgICAgKCdBYm91dCB0dXJ0bGVkZW1vJywgYWJvdXRfdHVydGxlZGVtbyksCisgICAgKCdBYm91dCB0dXJ0bGUgbW9kdWxlJywgdHVydGxlLl9fZG9jX18pLAorICAgICkKIAogY2xhc3MgRGVtb1dpbmRvdyhvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOiAgICMsIHJvb3Q9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgogICAgICAgICBzZWxmLnJvb3QgPSByb290ID0gdHVydGxlLl9yb290ID0gVGsoKQorICAgICAgICByb290LnRpdGxlKCdQeXRob24gdHVydGxlLWdyYXBoaWNzIGV4YW1wbGVzJykKICAgICAgICAgcm9vdC53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIHNlbGYuX2Rlc3Ryb3kpCiAKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgc2VsZi5tQmFyID0gRnJhbWUocm9vdCwgcmVsaWVmPVJBSVNFRCwgYm9yZGVyd2lkdGg9MikKLSAgICAgICAgc2VsZi5tQmFyLnBhY2soZmlsbD1YKQorICAgICAgICBpZiBkYXJ3aW46CisgICAgICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgYXJlIHRoZSBjdXJyZW50bHkgYWN0aXZhdGVkIE9TIFggYXBwbGljYXRpb24KKyAgICAgICAgICAgICMgc28gdGhhdCBvdXIgbWVudSBiYXIgYXBwZWFycy4KKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAnb3Nhc2NyaXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICctZScsICd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIicsCisgICAgICAgICAgICAgICAgICAgICAgICAnLWUnLCAnc2V0IGZyb250bW9zdCBvZiB0aGUgZmlyc3QgcHJvY2VzcyB3aG9zZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5peCBpZCBpcyB7fSB0byB0cnVlJy5mb3JtYXQob3MuZ2V0cGlkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgJy1lJywgJ2VuZCB0ZWxsJywKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwpCiAKLSAgICAgICAgc2VsZi5FeGFtcGxlc0J0biA9IHNlbGYubWFrZUxvYWREZW1vTWVudSgpCi0gICAgICAgIHNlbGYuT3B0aW9uc0J0biA9IHNlbGYubWFrZUhlbHBNZW51KCkKLSAgICAgICAgc2VsZi5tQmFyLnRrX21lbnVCYXIoc2VsZi5FeGFtcGxlc0J0biwgc2VsZi5PcHRpb25zQnRuKSAjLCBRdWl0QnRuKQorICAgICAgICByb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICByb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICByb290LmdyaWRfY29sdW1uY29uZmlndXJlKDEsIG1pbnNpemU9OTAsIHdlaWdodD0xKQorICAgICAgICByb290LmdyaWRfY29sdW1uY29uZmlndXJlKDIsIG1pbnNpemU9OTAsIHdlaWdodD0xKQorICAgICAgICByb290LmdyaWRfY29sdW1uY29uZmlndXJlKDMsIG1pbnNpemU9OTAsIHdlaWdodD0xKQogCi0gICAgICAgIHJvb3QudGl0bGUoJ1B5dGhvbiB0dXJ0bGUtZ3JhcGhpY3MgZXhhbXBsZXMnKQotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICBzZWxmLmxlZnRfZnJhbWUgPSBsZWZ0X2ZyYW1lID0gRnJhbWUocm9vdCkKLSAgICAgICAgc2VsZi50ZXh0X2ZyYW1lID0gdGV4dF9mcmFtZSA9IEZyYW1lKGxlZnRfZnJhbWUpCi0gICAgICAgIHNlbGYudmJhciA9IHZiYXIgPVNjcm9sbGJhcih0ZXh0X2ZyYW1lLCBuYW1lPSd2YmFyJykKLSAgICAgICAgc2VsZi50ZXh0ID0gdGV4dCA9IFRleHQodGV4dF9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0ndGV4dCcsIHBhZHg9NSwgd3JhcD0nbm9uZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTQ1KQotICAgICAgICB2YmFyWydjb21tYW5kJ10gPSB0ZXh0Lnl2aWV3Ci0gICAgICAgIHZiYXIucGFjayhzaWRlPUxFRlQsIGZpbGw9WSkKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgIHNlbGYuaGJhciA9IGhiYXIgPVNjcm9sbGJhcih0ZXh0X2ZyYW1lLCBuYW1lPSdoYmFyJywgb3JpZW50PUhPUklaT05UQUwpCi0gICAgICAgIGhiYXJbJ2NvbW1hbmQnXSA9IHRleHQueHZpZXcKLSAgICAgICAgaGJhci5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPVgpCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICB0ZXh0Wyd5c2Nyb2xsY29tbWFuZCddID0gdmJhci5zZXQKLSAgICAgICAgdGV4dC5jb25maWcoZm9udD10eHRmb250KQotICAgICAgICB0ZXh0LmNvbmZpZyh4c2Nyb2xsY29tbWFuZD1oYmFyLnNldCkKLSAgICAgICAgdGV4dC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1ZLCBleHBhbmQ9MSkKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgIHNlbGYub3V0cHV0X2xibCA9IExhYmVsKGxlZnRfZnJhbWUsIGhlaWdodD0gMSx0ZXh0PSIgLS0tICIsIGJnID0gIiNkZGYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gKCJBcmlhbCIsIDE2LCAnbm9ybWFsJykpCi0gICAgICAgIHNlbGYub3V0cHV0X2xibC5wYWNrKHNpZGU9Qk9UVE9NLCBleHBhbmQ9MCwgZmlsbD1YKQotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgdGV4dF9mcmFtZS5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MCkKLSAgICAgICAgbGVmdF9mcmFtZS5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MCkKLSAgICAgICAgc2VsZi5ncmFwaF9mcmFtZSA9IGdfZnJhbWUgPSBGcmFtZShyb290KQorICAgICAgICBzZWxmLm1CYXIgPSBNZW51KHJvb3QsIHJlbGllZj1SQUlTRUQsIGJvcmRlcndpZHRoPTIpCisgICAgICAgIHNlbGYubUJhci5hZGRfY2FzY2FkZShtZW51PXNlbGYubWFrZUxvYWREZW1vTWVudShzZWxmLm1CYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J0V4YW1wbGVzJywgdW5kZXJsaW5lPTApCisgICAgICAgIHNlbGYubUJhci5hZGRfY2FzY2FkZShtZW51PXNlbGYubWFrZUZvbnRNZW51KHNlbGYubUJhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nRm9udHNpemUnLCB1bmRlcmxpbmU9MCkKKyAgICAgICAgc2VsZi5tQmFyLmFkZF9jYXNjYWRlKG1lbnU9c2VsZi5tYWtlSGVscE1lbnUoc2VsZi5tQmFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdIZWxwJywgdW5kZXJsaW5lPTApCisgICAgICAgIHJvb3RbJ21lbnUnXSA9IHNlbGYubUJhcgogCi0gICAgICAgIHR1cnRsZS5fU2NyZWVuLl9yb290ID0gZ19mcmFtZQotICAgICAgICB0dXJ0bGUuX1NjcmVlbi5fY2FudmFzID0gdHVydGxlLlNjcm9sbGVkQ2FudmFzKGdfZnJhbWUsIDgwMCwgNjAwLCAxMDAwLCA4MDApCi0gICAgICAgICN4dHVydGxlLlNjcmVlbi5fY2FudmFzLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQotICAgICAgICBzZWxmLnNjcmVlbiA9IF9zXyA9IHR1cnRsZS5TY3JlZW4oKQotIyMjIyMKLSAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fX2luaXRfXyhfc18sIF9zXy5fY2FudmFzKQotIyMjIyMKLSAgICAgICAgc2VsZi5zY2FudmFzID0gX3NfLl9jYW52YXMKLSAgICAgICAgI3h0dXJ0bGUuUmF3VHVydGxlLmNhbnZhc2VzID0gW3NlbGYuc2NhbnZhc10KLSAgICAgICAgdHVydGxlLlJhd1R1cnRsZS5zY3JlZW5zID0gW19zX10KKyAgICAgICAgcGFuZSA9IFBhbmVkV2luZG93KG9yaWVudD1IT1JJWk9OVEFMLCBzYXNod2lkdGg9NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhc2hyZWxpZWY9U09MSUQsIGJnPScjZGRkJykKKyAgICAgICAgcGFuZS5hZGQoc2VsZi5tYWtlVGV4dEZyYW1lKHBhbmUpKQorICAgICAgICBwYW5lLmFkZChzZWxmLm1ha2VHcmFwaEZyYW1lKHBhbmUpKQorICAgICAgICBwYW5lLmdyaWQocm93PTAsIGNvbHVtbnNwYW49NCwgc3RpY2t5PSduZXdzJykKIAotICAgICAgICBzZWxmLnNjYW52YXMucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKKyAgICAgICAgc2VsZi5vdXRwdXRfbGJsID0gTGFiZWwocm9vdCwgaGVpZ2h0PSAxLCB0ZXh0PSIgLS0tICIsIGJnPSIjZGRmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udD0oIkFyaWFsIiwgMTYsICdub3JtYWwnKSwgYm9yZGVyd2lkdGg9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPVJJREdFKQorICAgICAgICBzZWxmLnN0YXJ0X2J0biA9IEJ1dHRvbihyb290LCB0ZXh0PSIgU1RBUlQgIiwgZm9udD1idG5mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZz0id2hpdGUiLCBkaXNhYmxlZGZvcmVncm91bmQgPSAiI2ZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5zdGFydERlbW8pCisgICAgICAgIHNlbGYuc3RvcF9idG4gPSBCdXR0b24ocm9vdCwgdGV4dD0iIFNUT1AgIiwgZm9udD1idG5mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnPSJ3aGl0ZSIsIGRpc2FibGVkZm9yZWdyb3VuZCA9ICIjZmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuc3RvcEl0KQorICAgICAgICBzZWxmLmNsZWFyX2J0biA9IEJ1dHRvbihyb290LCB0ZXh0PSIgQ0xFQVIgIiwgZm9udD1idG5mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZz0id2hpdGUiLCBkaXNhYmxlZGZvcmVncm91bmQ9IiNmZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi5jbGVhckNhbnZhcykKKyAgICAgICAgc2VsZi5vdXRwdXRfbGJsLmdyaWQocm93PTEsIGNvbHVtbj0wLCBzdGlja3k9J25ld3MnLCBwYWR4PSgwLDUpKQorICAgICAgICBzZWxmLnN0YXJ0X2J0bi5ncmlkKHJvdz0xLCBjb2x1bW49MSwgc3RpY2t5PSdldycpCisgICAgICAgIHNlbGYuc3RvcF9idG4uZ3JpZChyb3c9MSwgY29sdW1uPTIsIHN0aWNreT0nZXcnKQorICAgICAgICBzZWxmLmNsZWFyX2J0bi5ncmlkKHJvdz0xLCBjb2x1bW49Mywgc3RpY2t5PSdldycpCiAKLSAgICAgICAgc2VsZi5idG5fZnJhbWUgPSBidG5fZnJhbWUgPSBGcmFtZShnX2ZyYW1lLCBoZWlnaHQ9MTAwKQotICAgICAgICBzZWxmLnN0YXJ0X2J0biA9IEJ1dHRvbihidG5fZnJhbWUsIHRleHQ9IiBTVEFSVCAiLCBmb250PWJ0bmZvbnQsIGZnID0gIndoaXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRmb3JlZ3JvdW5kID0gIiNmZWQiLCBjb21tYW5kPXNlbGYuc3RhcnREZW1vKQotICAgICAgICBzZWxmLnN0YXJ0X2J0bi5wYWNrKHNpZGU9TEVGVCwgZmlsbD1YLCBleHBhbmQ9MSkKLSAgICAgICAgc2VsZi5zdG9wX2J0biA9IEJ1dHRvbihidG5fZnJhbWUsIHRleHQ9IiBTVE9QICIsICBmb250PWJ0bmZvbnQsIGZnID0gIndoaXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRmb3JlZ3JvdW5kID0gIiNmZWQiLCBjb21tYW5kID0gc2VsZi5zdG9wSXQpCi0gICAgICAgIHNlbGYuc3RvcF9idG4ucGFjayhzaWRlPUxFRlQsIGZpbGw9WCwgZXhwYW5kPTEpCi0gICAgICAgIHNlbGYuY2xlYXJfYnRuID0gQnV0dG9uKGJ0bl9mcmFtZSwgdGV4dD0iIENMRUFSICIsICBmb250PWJ0bmZvbnQsIGZnID0gIndoaXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRmb3JlZ3JvdW5kID0gIiNmZWQiLCBjb21tYW5kID0gc2VsZi5jbGVhckNhbnZhcykKLSAgICAgICAgc2VsZi5jbGVhcl9idG4ucGFjayhzaWRlPUxFRlQsIGZpbGw9WCwgZXhwYW5kPTEpCi0KLSAgICAgICAgc2VsZi5idG5fZnJhbWUucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9MCkKLSAgICAgICAgc2VsZi5ncmFwaF9mcmFtZS5wYWNrKHNpZGU9VE9QLCBmaWxsPUJPVEgsIGV4cGFuZD0xKQotCi0gICAgICAgIFBlcmNvbGF0b3IodGV4dCkuaW5zZXJ0ZmlsdGVyKENvbG9yRGVsZWdhdG9yKCkpCisgICAgICAgIFBlcmNvbGF0b3Ioc2VsZi50ZXh0KS5pbnNlcnRmaWx0ZXIoQ29sb3JEZWxlZ2F0b3IoKSkKICAgICAgICAgc2VsZi5kaXJ0eSA9IEZhbHNlCiAgICAgICAgIHNlbGYuZXhpdGZsYWcgPSBGYWxzZQogICAgICAgICBpZiBmaWxlbmFtZToKICAgICAgICAgICAgIHNlbGYubG9hZGZpbGUoZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVELCBESVNBQkxFRCwKKyAgICAgICAgc2VsZi5jb25maWdHVUkoRElTQUJMRUQsIERJU0FCTEVELCBESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgIkNob29zZSBleGFtcGxlIGZyb20gbWVudSIsICJibGFjayIpCiAgICAgICAgIHNlbGYuc3RhdGUgPSBTVEFSVFVQCiAKLSAgICBkZWYgX2Rlc3Ryb3koc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKLSAgICAgICAgc3lzLmV4aXQoKQogCi0gICAgZGVmIGNvbmZpZ0dVSShzZWxmLCBtZW51LCBzdGFydCwgc3RvcCwgY2xlYXIsIHR4dD0iIiwgY29sb3I9ImJsdWUiKToKLSAgICAgICAgc2VsZi5FeGFtcGxlc0J0bi5jb25maWcoc3RhdGU9bWVudSkKKyAgICBkZWYgb25SZXNpemUoc2VsZiwgZXZlbnQpOgorICAgICAgICBjd2lkdGggPSBzZWxmLl9jYW52YXMud2luZm9fd2lkdGgoKQorICAgICAgICBjaGVpZ2h0ID0gc2VsZi5fY2FudmFzLndpbmZvX2hlaWdodCgpCisgICAgICAgIHNlbGYuX2NhbnZhcy54dmlld19tb3ZldG8oMC41KihzZWxmLmNhbnZ3aWR0aC1jd2lkdGgpL3NlbGYuY2FudndpZHRoKQorICAgICAgICBzZWxmLl9jYW52YXMueXZpZXdfbW92ZXRvKDAuNSooc2VsZi5jYW52aGVpZ2h0LWNoZWlnaHQpL3NlbGYuY2FudmhlaWdodCkKIAotICAgICAgICBzZWxmLnN0YXJ0X2J0bi5jb25maWcoc3RhdGU9c3RhcnQpCi0gICAgICAgIGlmIHN0YXJ0ID09IE5PUk1BTDoKLSAgICAgICAgICAgIHNlbGYuc3RhcnRfYnRuLmNvbmZpZyhiZz0iI2QwMCIpCisgICAgZGVmIG1ha2VUZXh0RnJhbWUoc2VsZiwgcm9vdCk6CisgICAgICAgIHNlbGYudGV4dF9mcmFtZSA9IHRleHRfZnJhbWUgPSBGcmFtZShyb290KQorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0ID0gVGV4dCh0ZXh0X2ZyYW1lLCBuYW1lPSd0ZXh0JywgcGFkeD01LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwPSdub25lJywgd2lkdGg9NDUpCisKKyAgICAgICAgc2VsZi52YmFyID0gdmJhciA9IFNjcm9sbGJhcih0ZXh0X2ZyYW1lLCBuYW1lPSd2YmFyJykKKyAgICAgICAgdmJhclsnY29tbWFuZCddID0gdGV4dC55dmlldworICAgICAgICB2YmFyLnBhY2soc2lkZT1MRUZULCBmaWxsPVkpCisgICAgICAgIHNlbGYuaGJhciA9IGhiYXIgPSBTY3JvbGxiYXIodGV4dF9mcmFtZSwgbmFtZT0naGJhcicsIG9yaWVudD1IT1JJWk9OVEFMKQorICAgICAgICBoYmFyWydjb21tYW5kJ10gPSB0ZXh0Lnh2aWV3CisgICAgICAgIGhiYXIucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YKQorICAgICAgICB0ZXh0Wyd5c2Nyb2xsY29tbWFuZCddID0gdmJhci5zZXQKKyAgICAgICAgdGV4dFsneHNjcm9sbGNvbW1hbmQnXSA9IGhiYXIuc2V0CisKKyAgICAgICAgdGV4dFsnZm9udCddID0gdHVwbGUodHh0Zm9udCkKKyAgICAgICAgc2hvcnRjdXQgPSAnQ29tbWFuZCcgaWYgZGFyd2luIGVsc2UgJ0NvbnRyb2wnCisgICAgICAgIHRleHQuYmluZF9hbGwoJzwlcy1taW51cz4nICUgc2hvcnRjdXQsIHNlbGYuZGVjcmVhc2Vfc2l6ZSkKKyAgICAgICAgdGV4dC5iaW5kX2FsbCgnPCVzLXVuZGVyc2NvcmU+JyAlIHNob3J0Y3V0LCBzZWxmLmRlY3JlYXNlX3NpemUpCisgICAgICAgIHRleHQuYmluZF9hbGwoJzwlcy1lcXVhbD4nICUgc2hvcnRjdXQsIHNlbGYuaW5jcmVhc2Vfc2l6ZSkKKyAgICAgICAgdGV4dC5iaW5kX2FsbCgnPCVzLXBsdXM+JyAlIHNob3J0Y3V0LCBzZWxmLmluY3JlYXNlX3NpemUpCisgICAgICAgIHRleHQuYmluZCgnPENvbnRyb2wtTW91c2VXaGVlbD4nLCBzZWxmLnVwZGF0ZV9tb3VzZXdoZWVsKQorICAgICAgICB0ZXh0LmJpbmQoJzxDb250cm9sLUJ1dHRvbi00PicsIHNlbGYuaW5jcmVhc2Vfc2l6ZSkKKyAgICAgICAgdGV4dC5iaW5kKCc8Q29udHJvbC1CdXR0b24tNT4nLCBzZWxmLmRlY3JlYXNlX3NpemUpCisKKyAgICAgICAgdGV4dC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKKyAgICAgICAgcmV0dXJuIHRleHRfZnJhbWUKKworICAgIGRlZiBtYWtlR3JhcGhGcmFtZShzZWxmLCByb290KToKKyAgICAgICAgdHVydGxlLl9TY3JlZW4uX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuY2FudndpZHRoID0gMTAwMAorICAgICAgICBzZWxmLmNhbnZoZWlnaHQgPSA4MDAKKyAgICAgICAgdHVydGxlLl9TY3JlZW4uX2NhbnZhcyA9IHNlbGYuX2NhbnZhcyA9IGNhbnZhcyA9IHR1cnRsZS5TY3JvbGxlZENhbnZhcygKKyAgICAgICAgICAgICAgICByb290LCA4MDAsIDYwMCwgc2VsZi5jYW52d2lkdGgsIHNlbGYuY2FudmhlaWdodCkKKyAgICAgICAgY2FudmFzLmFkanVzdFNjcm9sbHMoKQorICAgICAgICBjYW52YXMuX3Jvb3R3aW5kb3cuYmluZCgnPENvbmZpZ3VyZT4nLCBzZWxmLm9uUmVzaXplKQorICAgICAgICBjYW52YXMuX2NhbnZhc1snYm9yZGVyd2lkdGgnXSA9IDAKKworICAgICAgICBzZWxmLnNjcmVlbiA9IF9zXyA9IHR1cnRsZS5TY3JlZW4oKQorICAgICAgICB0dXJ0bGUuVHVydGxlU2NyZWVuLl9faW5pdF9fKF9zXywgX3NfLl9jYW52YXMpCisgICAgICAgIHNlbGYuc2NhbnZhcyA9IF9zXy5fY2FudmFzCisgICAgICAgIHR1cnRsZS5SYXdUdXJ0bGUuc2NyZWVucyA9IFtfc19dCisgICAgICAgIHJldHVybiBjYW52YXMKKworICAgIGRlZiBzZXRfdHh0c2l6ZShzZWxmLCBzaXplKToKKyAgICAgICAgdHh0Zm9udFsxXSA9IHNpemUKKyAgICAgICAgc2VsZi50ZXh0Wydmb250J10gPSB0dXBsZSh0eHRmb250KQorICAgICAgICBzZWxmLm91dHB1dF9sYmxbJ3RleHQnXSA9ICdGb250IHNpemUgJWQnICUgc2l6ZQorCisgICAgZGVmIGRlY3JlYXNlX3NpemUoc2VsZiwgZHVtbXk9Tm9uZSk6CisgICAgICAgIHNlbGYuc2V0X3R4dHNpemUobWF4KHR4dGZvbnRbMV0gLSAxLCBNSU5JTVVNX0ZPTlRfU0laRSkpCisgICAgICAgIHJldHVybiAnYnJlYWsnCisKKyAgICBkZWYgaW5jcmVhc2Vfc2l6ZShzZWxmLCBkdW1teT1Ob25lKToKKyAgICAgICAgc2VsZi5zZXRfdHh0c2l6ZShtaW4odHh0Zm9udFsxXSArIDEsIE1BWElNVU1fRk9OVF9TSVpFKSkKKyAgICAgICAgcmV0dXJuICdicmVhaycKKworICAgIGRlZiB1cGRhdGVfbW91c2V3aGVlbChzZWxmLCBldmVudCk6CisgICAgICAgICMgRm9yIHdoZWVsIHVwLCBldmVudC5kZWx0ZSA9IDEyMCBvbiBXaW5kb3dzLCAtMSBvbiBkYXJ3aW4uCisgICAgICAgICMgWC0xMSBzZW5kcyBDb250cm9sLUJ1dHRvbi00IGV2ZW50IGluc3RlYWQuCisgICAgICAgIGlmIChldmVudC5kZWx0YSA8IDApID09IChub3QgZGFyd2luKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY3JlYXNlX3NpemUoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdGFydF9idG4uY29uZmlnKGJnPSIjZmNhIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmluY3JlYXNlX3NpemUoKQogCi0gICAgICAgIHNlbGYuc3RvcF9idG4uY29uZmlnKHN0YXRlPXN0b3ApCi0gICAgICAgIGlmIHN0b3AgPT0gTk9STUFMOgotICAgICAgICAgICAgc2VsZi5zdG9wX2J0bi5jb25maWcoYmc9IiNkMDAiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdG9wX2J0bi5jb25maWcoYmc9IiNmY2EiKQotICAgICAgICBzZWxmLmNsZWFyX2J0bi5jb25maWcoc3RhdGU9Y2xlYXIpCi0KLSAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKHN0YXRlPWNsZWFyKQotICAgICAgICBpZiBjbGVhciA9PSBOT1JNQUw6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyX2J0bi5jb25maWcoYmc9IiNkMDAiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKGJnPSIjZmNhIikKLQorICAgIGRlZiBjb25maWdHVUkoc2VsZiwgc3RhcnQsIHN0b3AsIGNsZWFyLCB0eHQ9IiIsIGNvbG9yPSJibHVlIik6CisgICAgICAgIHNlbGYuc3RhcnRfYnRuLmNvbmZpZyhzdGF0ZT1zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPSIjZDAwIiBpZiBzdGFydCA9PSBOT1JNQUwgZWxzZSAiI2ZjYSIpCisgICAgICAgIHNlbGYuc3RvcF9idG4uY29uZmlnKHN0YXRlPXN0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPSIjZDAwIiBpZiBzdG9wID09IE5PUk1BTCBlbHNlICIjZmNhIikKKyAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKHN0YXRlPWNsZWFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmc9IiNkMDAiIGlmIGNsZWFyID09IE5PUk1BTCBlbHNlIiNmY2EiKQogICAgICAgICBzZWxmLm91dHB1dF9sYmwuY29uZmlnKHRleHQ9dHh0LCBmZz1jb2xvcikKIAotCi0gICAgZGVmIG1ha2VMb2FkRGVtb01lbnUoc2VsZik6Ci0gICAgICAgIENtZEJ0biA9IE1lbnVidXR0b24oc2VsZi5tQmFyLCB0ZXh0PSdFeGFtcGxlcycsIHVuZGVybGluZT0wLCBmb250PW1lbnVmb250KQotICAgICAgICBDbWRCdG4ucGFjayhzaWRlPUxFRlQsIHBhZHg9IjJtIikKLSAgICAgICAgQ21kQnRuLm1lbnUgPSBNZW51KENtZEJ0bikKKyAgICBkZWYgbWFrZUxvYWREZW1vTWVudShzZWxmLCBtYXN0ZXIpOgorICAgICAgICBtZW51ID0gTWVudShtYXN0ZXIpCiAKICAgICAgICAgZm9yIGVudHJ5IGluIGdldEV4YW1wbGVFbnRyaWVzKCk6Ci0gICAgICAgICAgICBkZWYgbG9hZGV4YW1wbGUoeCk6Ci0gICAgICAgICAgICAgICAgZGVmIGVtaXQoKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkZmlsZSh4KQotICAgICAgICAgICAgICAgIHJldHVybiBlbWl0Ci0gICAgICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD1lbnRyeSwgdW5kZXJsaW5lPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PW1lbnVmb250LCBjb21tYW5kPWxvYWRleGFtcGxlKGVudHJ5KSkKKyAgICAgICAgICAgIGRlZiBsb2FkKGVudHJ5PWVudHJ5KToKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRmaWxlKGVudHJ5KQorICAgICAgICAgICAgbWVudS5hZGRfY29tbWFuZChsYWJlbD1lbnRyeSwgdW5kZXJsaW5lPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9bWVudWZvbnQsIGNvbW1hbmQ9bG9hZCkKKyAgICAgICAgcmV0dXJuIG1lbnUKIAotICAgICAgICBDbWRCdG5bJ21lbnUnXSA9IENtZEJ0bi5tZW51Ci0gICAgICAgIHJldHVybiBDbWRCdG4KKyAgICBkZWYgbWFrZUZvbnRNZW51KHNlbGYsIG1hc3Rlcik6CisgICAgICAgIG1lbnUgPSBNZW51KG1hc3RlcikKKyAgICAgICAgbWVudS5hZGRfY29tbWFuZChsYWJlbD0iRGVjcmVhc2UgKEMtJy0nKSIsIGNvbW1hbmQ9c2VsZi5kZWNyZWFzZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9bWVudWZvbnQpCisgICAgICAgIG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9IkluY3JlYXNlIChDLScrJykiLCBjb21tYW5kPXNlbGYuaW5jcmVhc2Vfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb250PW1lbnVmb250KQorICAgICAgICBtZW51LmFkZF9zZXBhcmF0b3IoKQogCi0gICAgZGVmIG1ha2VIZWxwTWVudShzZWxmKToKLSAgICAgICAgQ21kQnRuID0gTWVudWJ1dHRvbihzZWxmLm1CYXIsIHRleHQ9J0hlbHAnLCB1bmRlcmxpbmU9MCwgZm9udD1tZW51Zm9udCkKLSAgICAgICAgQ21kQnRuLnBhY2soc2lkZT1MRUZULCBwYWR4PScybScpCi0gICAgICAgIENtZEJ0bi5tZW51ID0gTWVudShDbWRCdG4pCisgICAgICAgIGZvciBzaXplIGluIGZvbnRfc2l6ZXM6CisgICAgICAgICAgICBkZWYgcmVzaXplKHNpemU9c2l6ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfdHh0c2l6ZShzaXplKQorICAgICAgICAgICAgbWVudS5hZGRfY29tbWFuZChsYWJlbD1zdHIoc2l6ZSksIHVuZGVybGluZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PW1lbnVmb250LCBjb21tYW5kPXJlc2l6ZSkKKyAgICAgICAgcmV0dXJuIG1lbnUKIAotICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nQWJvdXQgdHVydGxlLnB5JywgZm9udD1tZW51Zm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zaG93QWJvdXRUdXJ0bGUpCi0gICAgICAgIENtZEJ0bi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSd0dXJ0bGVEZW1vIC0gSGVscCcsIGZvbnQ9bWVudWZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2hvd0RlbW9IZWxwKQotICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nQWJvdXQgdHVydGxlRGVtbycsIGZvbnQ9bWVudWZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2hvd0Fib3V0RGVtbykKKyAgICBkZWYgbWFrZUhlbHBNZW51KHNlbGYsIG1hc3Rlcik6CisgICAgICAgIG1lbnUgPSBNZW51KG1hc3RlcikKIAotICAgICAgICBDbWRCdG5bJ21lbnUnXSA9IENtZEJ0bi5tZW51Ci0gICAgICAgIHJldHVybiBDbWRCdG4KKyAgICAgICAgZm9yIGhlbHBfbGFiZWwsIGhlbHBfZmlsZSBpbiBoZWxwX2VudHJpZXM6CisgICAgICAgICAgICBkZWYgc2hvdyhoZWxwX2xhYmVsPWhlbHBfbGFiZWwsIGhlbHBfZmlsZT1oZWxwX2ZpbGUpOgorICAgICAgICAgICAgICAgIHZpZXdfdGV4dChzZWxmLnJvb3QsIGhlbHBfbGFiZWwsIGhlbHBfZmlsZSkKKyAgICAgICAgICAgIG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9aGVscF9sYWJlbCwgZm9udD1tZW51Zm9udCwgY29tbWFuZD1zaG93KQorICAgICAgICByZXR1cm4gbWVudQogCiAgICAgZGVmIHJlZnJlc2hDYW52YXMoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmRpcnR5OiByZXR1cm4KLSAgICAgICAgc2VsZi5zY3JlZW4uY2xlYXIoKQotICAgICAgICAjc2VsZi5zY3JlZW4ubW9kZSgic3RhbmRhcmQiKQotICAgICAgICBzZWxmLmRpcnR5PUZhbHNlCisgICAgICAgIGlmIHNlbGYuZGlydHk6CisgICAgICAgICAgICBzZWxmLnNjcmVlbi5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmRpcnR5PUZhbHNlCiAKICAgICBkZWYgbG9hZGZpbGUoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICBzZWxmLnJlZnJlc2hDYW52YXMoKQorICAgICAgICBzZWxmLmNsZWFyQ2FudmFzKCkKKyAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fUlVOTklORyA9IEZhbHNlCiAgICAgICAgIG1vZG5hbWUgPSAndHVydGxlZGVtby4nICsgZmlsZW5hbWUKICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQogICAgICAgICBzZWxmLm1vZHVsZSA9IHN5cy5tb2R1bGVzW21vZG5hbWVdCkBAIC0xOTMsOCArMzIzLDcgQEAKICAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgiMS4wIiwgImVuZCIpCiAgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoIjEuMCIsIGNoYXJzKQogICAgICAgICBzZWxmLnJvb3QudGl0bGUoZmlsZW5hbWUgKyAiIC0gYSBQeXRob24gdHVydGxlIGdyYXBoaWNzIGV4YW1wbGUiKQotICAgICAgICByZWxvYWQoc2VsZi5tb2R1bGUpCi0gICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgTk9STUFMLCBESVNBQkxFRCwgRElTQUJMRUQsCisgICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVELAogICAgICAgICAgICAgICAgICAgICAgICAiUHJlc3Mgc3RhcnQgYnV0dG9uIiwgInJlZCIpCiAgICAgICAgIHNlbGYuc3RhdGUgPSBSRUFEWQogCkBAIC0yMDIsNyArMzMxLDcgQEAKICAgICAgICAgc2VsZi5yZWZyZXNoQ2FudmFzKCkKICAgICAgICAgc2VsZi5kaXJ0eSA9IFRydWUKICAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fUlVOTklORyA9IFRydWUKLSAgICAgICAgc2VsZi5jb25maWdHVUkoRElTQUJMRUQsIERJU0FCTEVELCBOT1JNQUwsIERJU0FCTEVELAorICAgICAgICBzZWxmLmNvbmZpZ0dVSShESVNBQkxFRCwgTk9STUFMLCBESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgImRlbW8gcnVubmluZy4uLiIsICJibGFjayIpCiAgICAgICAgIHNlbGYuc2NyZWVuLmNsZWFyKCkKICAgICAgICAgc2VsZi5zY3JlZW4ubW9kZSgic3RhbmRhcmQiKQpAQCAtMjE4LDQ5ICszNDcsMzQgQEAKICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBET05FCiAgICAgICAgICAgICByZXN1bHQgPSAic3RvcHBlZCEiCiAgICAgICAgIGlmIHNlbGYuc3RhdGUgPT0gRE9ORToKLSAgICAgICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgTk9STUFMLCBESVNBQkxFRCwgTk9STUFMLAorICAgICAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBESVNBQkxFRCwgTk9STUFMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQogICAgICAgICBlbGlmIHNlbGYuc3RhdGUgPT0gRVZFTlREUklWRU46CiAgICAgICAgICAgICBzZWxmLmV4aXRmbGFnID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5jb25maWdHVUkoRElTQUJMRUQsIERJU0FCTEVELCBOT1JNQUwsIERJU0FCTEVELAorICAgICAgICAgICAgc2VsZi5jb25maWdHVUkoRElTQUJMRUQsIE5PUk1BTCwgRElTQUJMRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIG1vdXNlL2tleXMgb3IgU1RPUCIsICJyZWQiKQogCiAgICAgZGVmIGNsZWFyQ2FudmFzKHNlbGYpOgogICAgICAgICBzZWxmLnJlZnJlc2hDYW52YXMoKQogICAgICAgICBzZWxmLnNjcmVlbi5fZGVsZXRlKCJhbGwiKQogICAgICAgICBzZWxmLnNjYW52YXMuY29uZmlnKGN1cnNvcj0iIikKLSAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCkKKyAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBESVNBQkxFRCwgRElTQUJMRUQpCiAKICAgICBkZWYgc3RvcEl0KHNlbGYpOgogICAgICAgICBpZiBzZWxmLmV4aXRmbGFnOgogICAgICAgICAgICAgc2VsZi5jbGVhckNhbnZhcygpCiAgICAgICAgICAgICBzZWxmLmV4aXRmbGFnID0gRmFsc2UKLSAgICAgICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgTk9STUFMLCBESVNBQkxFRCwgRElTQUJMRUQsCisgICAgICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTVE9QUEVEISIsICJyZWQiKQotICAgICAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fUlVOTklORyA9IEZhbHNlCi0gICAgICAgICAgICAjcHJpbnQgInN0b3BJVDogZXhpdGZsYWcgPSBUcnVlIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fUlVOTklORyA9IEZhbHNlCi0gICAgICAgICAgICAjcHJpbnQgInN0b3BJdDogZXhpdGZsYWcgPSBGYWxzZSIKKyAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fUlVOTklORyA9IEZhbHNlCisKKyAgICBkZWYgX2Rlc3Ryb3koc2VsZik6CisgICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKKworCitkZWYgbWFpbigpOgorICAgIGRlbW8gPSBEZW1vV2luZG93KCkKKyAgICBkZW1vLnJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGRlbW8gPSBEZW1vV2luZG93KCkKLSAgICBSVU4gPSBUcnVlCi0gICAgd2hpbGUgUlVOOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjcHJpbnQoIkVOVEVSSU5HIG1haW5sb29wIikKLSAgICAgICAgICAgIGRlbW8ucm9vdC5tYWlubG9vcCgpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICNwcmludCgiQXR0cmlidXRlRXJyb3IhLSBXQUlUIEEgTU9NRU5UISIpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMykKLSAgICAgICAgICAgIHByaW50KCJHT0lORyBPTiAuLiIpCi0gICAgICAgICAgICBkZW1vLmNrZWFyQ2FudmFzKCkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIGRlbW8uc2NyZWVuLl9kZWxldGUoImFsbCIpCi0gICAgICAgICAgICAjcHJpbnQoIkNSQVNIISEhLSBXQUlUIEEgTU9NRU5UISIpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMykKLSAgICAgICAgICAgICNwcmludCgiR09JTkcgT04gLi4iKQotICAgICAgICAgICAgZGVtby5jbGVhckNhbnZhcygpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHByaW50KCJCWUUhIikKLSAgICAgICAgICAgIFJVTiA9IEZhbHNlCisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9hYm91dF90dXJ0bGUudHh0IGIvTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyYzdiMy4uMDAwMDAwMAotLS0gYS9MaWIvdHVydGxlZGVtby9hYm91dF90dXJ0bGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIEEgbmV3IHR1cnRsZSBtb2R1bGUgZm9yIFB5dGhvbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVHVydGxlIGdyYXBoaWNzIGlzIGEgcG9wdWxhciB3YXkgZm9yIGludHJvZHVjaW5nIHByb2dyYW1taW5nIHRvCi1raWRzLiBJdCB3YXMgcGFydCBvZiB0aGUgb3JpZ2luYWwgTG9nbyBwcm9ncmFtbWluZyBsYW5ndWFnZSBkZXZlbG9wZWQKLWJ5IFdhbGx5IEZldXJ6aWcgYW5kIFNleW1vdXIgUGFwZXJ0IGluIDE5NjYuCi0KLUltYWdpbmUgYSByb2JvdGljIHR1cnRsZSBzdGFydGluZyBhdCAoMCwgMCkgaW4gdGhlIHgteSBwbGFuZS4gQWZ0ZXIgYW4gYGBpbXBvcnQgdHVydGxlYGAsIGdpdmUgaXQKLXRoZSBjb21tYW5kIHR1cnRsZS5mb3J3YXJkKDE1KSwgYW5kIGl0IG1vdmVzIChvbi1zY3JlZW4hKSAxNSBwaXhlbHMgaW4KLXRoZSBkaXJlY3Rpb24gaXQgaXMgZmFjaW5nLCBkcmF3aW5nIGEgbGluZSBhcyBpdCBtb3Zlcy4gR2l2ZSBpdCB0aGUKLWNvbW1hbmQgdHVydGxlLnJpZ2h0KDI1KSwgYW5kIGl0IHJvdGF0ZXMgaW4tcGxhY2UgMjUgZGVncmVlcyBjbG9ja3dpc2UuCi0KLUJ5IGNvbWJpbmluZyB0b2dldGhlciB0aGVzZSBhbmQgc2ltaWxhciBjb21tYW5kcywgaW50cmljYXRlIHNoYXBlcyBhbmQKLXBpY3R1cmVzIGNhbiBlYXNpbHkgYmUgZHJhd24uCi0KLS0tLS0tIHR1cnRsZS5weQotCi1UaGlzIG1vZHVsZSBpcyBhbiBleHRlbmRlZCByZWltcGxlbWVudGF0aW9uIG9mIHR1cnRsZS5weSBmcm9tIHRoZQotUHl0aG9uIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiB1cCB0byBQeXRob24gMi41LiAoU2VlOiBodHRwOlxcd3d3LnB5dGhvbi5vcmcpCi0KLUl0IHRyaWVzIHRvIGtlZXAgdGhlIG1lcml0cyBvZiB0dXJ0bGUucHkgYW5kIHRvIGJlIChuZWFybHkpIDEwMCUKLWNvbXBhdGlibGUgd2l0aCBpdC4gVGhpcyBtZWFucyBpbiB0aGUgZmlyc3QgcGxhY2UgdG8gZW5hYmxlIHRoZQotbGVhcm5pbmcgcHJvZ3JhbW1lciB0byB1c2UgYWxsIHRoZSBjb21tYW5kcywgY2xhc3NlcyBhbmQgbWV0aG9kcwotaW50ZXJhY3RpdmVseSB3aGVuIHVzaW5nIHRoZSBtb2R1bGUgZnJvbSB3aXRoaW4gSURMRSBydW4gd2l0aAotdGhlIC1uIHN3aXRjaC4KLQotUm91Z2hseSBpdCBoYXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhZGRlZDoKLQotLSBCZXR0ZXIgYW5pbWF0aW9uIG9mIHRoZSB0dXJ0bGUgbW92ZW1lbnRzLCBlc3BlY2lhbGx5IG9mIHR1cm5pbmcgdGhlCi0gICAgdHVydGxlLiBTbyB0aGUgdHVydGxlcyBjYW4gbW9yZSBlYXNpbHkgYmUgdXNlZCBhcyBhIHZpc3VhbCBmZWVkYmFjawotICAgIGluc3RydW1lbnQgYnkgdGhlIChiZWdpbm5pbmcpIHByb2dyYW1tZXIuCi0KLS0gRGlmZmVyZW50IHR1cnRsZSBzaGFwZXMsIGdpZi1pbWFnZXMgYXMgdHVydGxlIHNoYXBlcywgdXNlciBkZWZpbmVkCi0gICAgYW5kIHVzZXIgY29udHJvbGxhYmxlIHR1cnRsZSBzaGFwZXMsIGFtb25nIHRoZW0gY29tcG91bmQKLSAgICAobXVsdGljb2xvcmVkKSBzaGFwZXMuIFR1cnRsZSBzaGFwZXMgY2FuIGJlIHN0Z3JldGNoZWQgYW5kIHRpbHRlZCwgd2hpY2gKLSAgICBtYWtlcyB0dXJ0bGVzIHp1IHZlcnkgdmVyc2F0aWxlIGdlb21ldHJpY2FsIG9iamVjdHMuCi0KLS0gRmluZSBjb250cm9sIG92ZXIgdHVydGxlIG1vdmVtZW50IGFuZCBzY3JlZW4gdXBkYXRlcyB2aWEgZGVsYXkoKSwKLSAgICBhbmQgZW5oYW5jZWQgdHJhY2VyKCkgYW5kIHNwZWVkKCkgbWV0aG9kcy4KLQotLSBBbGlhc2VzIGZvciB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNvbW1hbmRzLCBsaWtlIGZkIGZvciBmb3J3YXJkIGV0Yy4sCi0gICAgZm9sbG93aW5nIHRoZSBlYXJseSBMb2dvIHRyYWRpdGlvbnMuIFRoaXMgcmVkdWNlcyB0aGUgYm9yaW5nIHdvcmsgb2YKLSAgICB0eXBpbmcgbG9uZyBzZXF1ZW5jZXMgb2YgY29tbWFuZHMsIHdoaWNoIG9mdGVuIG9jY3VyIGluIGEgbmF0dXJhbCB3YXkKLSAgICB3aGVuIGtpZHMgdHJ5IHRvIHByb2dyYW0gZmFuY3kgcGljdHVyZXMgb24gdGhlaXIgZmlyc3QgZW5jb3VudGVyIHdpdGgKLSAgICB0dXJ0bGUgZ3JhcGhjaXMuCi0KLS0gVHVydGxlcyBub3cgaGF2ZSBhbiB1bmRvKCktbWV0aG9kIHdpdGggY29uZmlndXJhYmxlIHVuZG8tYnVmZmVyLgotCi0tIFNvbWUgc2ltcGxlIGNvbW1hbmRzL21ldGhvZHMgZm9yIGNyZWF0aW5nIGV2ZW50IGRyaXZlbiBwcm9ncmFtcwotICAgIChtb3VzZS0sIGtleS0sIHRpbWVyLWV2ZW50cykuIEVzcGVjaWFsbHkgdXNlZnVsIGZvciBwcm9ncmFtbWluZyBnYW1lcy4KLQotLSBBIHNjcm9sbGFibGUgQ2FudmFzIGNsYXNzLiBUaGUgZGVmYXVsdCBzY3JvbGxhYmxlIENhbnZhcyBjYW4gYmUKLSAgICBleHRlbmRlZCBpbnRlcmFjdGl2ZWx5IGFzIG5lZWRlZCB3aGlsZSBwbGF5aW5nIGFyb3VuZCB3aXRoIHRoZSB0dXJ0bGUocykuCi0KLS0gQSBUdXJ0bGVTY3JlZW4gY2xhc3Mgd2l0aCBtZXRob2RzIGNvbnRyb2xsaW5nIGJhY2tncm91bmQgY29sb3Igb3IKLSAgICBiYWNrZ3JvdW5kIGltYWdlLCB3aW5kb3cgYW5kIGNhbnZhcyBzaXplIGFuZCBvdGhlciBwcm9wZXJ0aWVzIG9mIHRoZQotICAgIFR1cnRsZVNjcmVlbi4KLQotLSBUaGVyZSBpcyBhIG1ldGhvZCwgc2V0d29ybGRjb29yZGluYXRlcygpLCB0byBpbnN0YWxsIGEgdXNlciBkZWZpbmVkCi0gICAgY29vcmRpbmF0ZS1zeXN0ZW0gZm9yIHRoZSBUdXJ0bGVTY3JlZW4uCi0KLS0gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYSAyLXZlY3RvciBjbGFzcyBuYW1lZCBWZWMyRCwgZGVyaXZlZCBmcm9tIHR1cGxlLgotICAgIFRoaXMgY2xhc3MgaXMgcHVibGljLCBzbyBpdCBjYW4gYmUgaW1wb3J0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIsCi0gICAgd2hpY2ggbWFrZXMgY2VydGFpbiB0eXBlcyBvZiBjb21wdXRhdGlvbnMgdmVyeSBuYXR1cmFsIGFuZCBjb21wYWN0LgotCi0tIEFwcGVhcmFuY2Ugb2YgdGhlIFR1cnRsZVNjcmVlbiBhbmQgdGhlIFR1cnRsZXMgYXQgc3RhcnR1cC9pbXBvcnQgY2FuIGJlCi0gICAgY29uZmlndXJlZCBieSBtZWFucyBvZiBhIHR1cnRsZS5jZmcgY29uZmlndXJhdGlvbiBmaWxlLgotICAgIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gbWltaWNzIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBvbGQgdHVydGxlIG1vZHVsZS4KLQotLSBJZiBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkgdGhlIG1vZHVsZSByZWFkcyBpbiBkb2NzdHJpbmdzIGZyb20gYSBkb2NzdHJpbmcKLSAgICBkaWN0aW9uYXJ5IGluIHNvbWUgZGlmZmVyZW50IGxhbmd1YWdlLCBzdXBwbGllZCBzZXBhcmF0ZWx5ICBhbmQgcmVwbGFjZXMKLSAgICB0aGUgZW5nbGlzaCBvbmVzIGJ5IHRob3NlIHJlYWQgaW4uIFRoZXJlIGlzIGEgdXRpbGl0eSBmdW5jdGlvbgotICAgIHdyaXRlX2RvY3N0cmluZ2RpY3QoKSB0byB3cml0ZSBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgb3JpZ2luYWwgKGVuZ2xpc2gpCi0gICAgZG9jc3RyaW5ncyB0byBkaXNjLCBzbyBpdCBjYW4gc2VydmUgYXMgYSB0ZW1wbGF0ZSBmb3IgdHJhbnNsYXRpb25zLgpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlZGVtby50eHQgYi9MaWIvdHVydGxlZGVtby9hYm91dF90dXJ0bGVkZW1vLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwMDliZC4uMDAwMDAwMAotLS0gYS9MaWIvdHVydGxlZGVtby9hYm91dF90dXJ0bGVkZW1vLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLQotICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIEFib3V0IHRoaXMgdmlld2VyCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIFRpbnkgZGVtbyB2aWV3ZXIgdG8gdmlldyB0dXJ0bGUgZ3JhcGhpY3MgZXhhbXBsZSBzY3JpcHRzLgotCi0gICAgUXVpY2tseSBhbmQgZGlydHlseSBhc3NlbWJsZWQgYnkgR3JlZ29yIExpbmdsLgotICAgIEp1bmUsIDIwMDYKLQotICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogdHVydGxlRGVtbyAtIEhlbHAKLQotICAgIEhhdmUgZnVuIQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vY2xvY2sucHkgYi9MaWIvdHVydGxlZGVtby9jbG9jay5weQppbmRleCBhMGQxNTdiLi42MmM4ODUxIDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby9jbG9jay5weQorKysgYi9MaWIvdHVydGxlZGVtby9jbG9jay5weQpAQCAtMTMsOCArMTMsNiBAQAogZnJvbSB0dXJ0bGUgaW1wb3J0ICoKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiAKLW1vZGUoImxvZ28iKQotCiBkZWYganVtcChkaXN0YW56LCB3aW5rZWw9MCk6CiAgICAgcGVudXAoKQogICAgIHJpZ2h0KHdpbmtlbCkKQEAgLTQyLDcgKzQwLDYgQEAKICAgICBoYW5kX2Zvcm0gPSBnZXRfcG9seSgpCiAgICAgcmVnaXN0ZXJfc2hhcGUobmFtZSwgaGFuZF9mb3JtKQogCi0KIGRlZiBjbG9ja2ZhY2UocmFkaXVzKToKICAgICByZXNldCgpCiAgICAgcGVuc2l6ZSg3KQpAQCAtODMsNyArODAsNiBAQAogICAgIHdyaXRlci5wdSgpCiAgICAgd3JpdGVyLmJrKDg1KQogCi0KIGRlZiB3b2NoZW50YWcodCk6CiAgICAgd29jaGVudGFnID0gWyJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLAogICAgICAgICAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5IiwgIlN1bmRheSJdCkBAIC0xMDIsMjIgKzk4LDI1IEBACiAgICAgc2VrdW5kZSA9IHQuc2Vjb25kICsgdC5taWNyb3NlY29uZCowLjAwMDAwMQogICAgIG1pbnV0ZSA9IHQubWludXRlICsgc2VrdW5kZS82MC4wCiAgICAgc3R1bmRlID0gdC5ob3VyICsgbWludXRlLzYwLjAKLSAgICB0cmFjZXIoRmFsc2UpCi0gICAgd3JpdGVyLmNsZWFyKCkKLSAgICB3cml0ZXIuaG9tZSgpCi0gICAgd3JpdGVyLmZvcndhcmQoNjUpCi0gICAgd3JpdGVyLndyaXRlKHdvY2hlbnRhZyh0KSwKLSAgICAgICAgICAgICAgICAgYWxpZ249ImNlbnRlciIsIGZvbnQ9KCJDb3VyaWVyIiwgMTQsICJib2xkIikpCi0gICAgd3JpdGVyLmJhY2soMTUwKQotICAgIHdyaXRlci53cml0ZShkYXR1bSh0KSwKLSAgICAgICAgICAgICAgICAgYWxpZ249ImNlbnRlciIsIGZvbnQ9KCJDb3VyaWVyIiwgMTQsICJib2xkIikpCi0gICAgd3JpdGVyLmZvcndhcmQoODUpCi0gICAgdHJhY2VyKFRydWUpCi0gICAgc2Vjb25kX2hhbmQuc2V0aGVhZGluZyg2KnNla3VuZGUpCi0gICAgbWludXRlX2hhbmQuc2V0aGVhZGluZyg2Km1pbnV0ZSkKLSAgICBob3VyX2hhbmQuc2V0aGVhZGluZygzMCpzdHVuZGUpCi0gICAgdHJhY2VyKFRydWUpCi0gICAgb250aW1lcih0aWNrLCAxMDApCisgICAgdHJ5OgorICAgICAgICB0cmFjZXIoRmFsc2UpICAjIFRlcm1pbmF0b3IgY2FuIG9jY3VyIGhlcmUKKyAgICAgICAgd3JpdGVyLmNsZWFyKCkKKyAgICAgICAgd3JpdGVyLmhvbWUoKQorICAgICAgICB3cml0ZXIuZm9yd2FyZCg2NSkKKyAgICAgICAgd3JpdGVyLndyaXRlKHdvY2hlbnRhZyh0KSwKKyAgICAgICAgICAgICAgICAgICAgIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE0LCAiYm9sZCIpKQorICAgICAgICB3cml0ZXIuYmFjaygxNTApCisgICAgICAgIHdyaXRlci53cml0ZShkYXR1bSh0KSwKKyAgICAgICAgICAgICAgICAgICAgIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE0LCAiYm9sZCIpKQorICAgICAgICB3cml0ZXIuZm9yd2FyZCg4NSkKKyAgICAgICAgdHJhY2VyKFRydWUpCisgICAgICAgIHNlY29uZF9oYW5kLnNldGhlYWRpbmcoNipzZWt1bmRlKSAgIyBvciBoZXJlCisgICAgICAgIG1pbnV0ZV9oYW5kLnNldGhlYWRpbmcoNiptaW51dGUpCisgICAgICAgIGhvdXJfaGFuZC5zZXRoZWFkaW5nKDMwKnN0dW5kZSkKKyAgICAgICAgdHJhY2VyKFRydWUpCisgICAgICAgIG9udGltZXIodGljaywgMTAwKQorICAgIGV4Y2VwdCBUZXJtaW5hdG9yOgorICAgICAgICBwYXNzICAjIHR1cnRsZWRlbW8gdXNlciBwcmVzc2VkIFNUT1AKIAogZGVmIG1haW4oKToKICAgICB0cmFjZXIoRmFsc2UpCkBAIC0xMjcsNiArMTI2LDcgQEAKICAgICByZXR1cm4gIkVWRU5UTE9PUCIKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtb2RlKCJsb2dvIikKICAgICBtc2cgPSBtYWluKCkKICAgICBwcmludChtc2cpCiAgICAgbWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vY29sb3JtaXhlci5weSBiL0xpYi90dXJ0bGVkZW1vL2NvbG9ybWl4ZXIucHkKaW5kZXggZjVkMzA4ZC4uNDQ4ZGI4MyAxMDA2NDQKLS0tIGEvTGliL3R1cnRsZWRlbW8vY29sb3JtaXhlci5weQorKysgYi9MaWIvdHVydGxlZGVtby9jb2xvcm1peGVyLnB5CkBAIC0xLDggKzEsNiBAQAogIyBjb2xvcm1peGVyCiAKIGZyb20gdHVydGxlIGltcG9ydCBTY3JlZW4sIFR1cnRsZSwgbWFpbmxvb3AKLWltcG9ydCBzeXMKLXN5cy5zZXRyZWN1cnNpb25saW1pdCgyMDAwMCkgICAjIG92ZXJjb21lcywgZm9yIG5vdywgYW4gaW5zdGFiaWxpdHkgb2YgUHl0aG9uIDMuMAogCiBjbGFzcyBDb2xvclR1cnRsZShUdXJ0bGUpOgogCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9kZW1vaGVscC50eHQgYi9MaWIvdHVydGxlZGVtby9kZW1vaGVscC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODNiYzcuLjAwMDAwMDAKLS0tIGEvTGliL3R1cnRsZWRlbW8vZGVtb2hlbHAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICB0dXJ0bGVEZW1vIC0gSGVscAotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBUaGlzIGRvY3VtZW50IGhhcyB0d28gc2VjdGlvbnM6Ci0KLSAgKDEpIEhvdyB0byB1c2UgdGhlIGRlbW8gdmlld2VyCi0gICgyKSBIb3cgdG8gYWRkIHlvdXIgb3duIGRlbW9zIHRvIHRoZSBkZW1vIHJlcG9zaXRvcnkKLQotCi0gICgxKSBIb3cgdG8gdXNlIHRoZSBkZW1vIHZpZXdlci4KLQotICBTZWxlY3QgYSBkZW1vc2NyaXB0IGZyb20gdGhlIGV4YW1wbGUgbWVudS4KLSAgVGhlIChzeW50YXggY29sb3VyZWQpIHNvdXJjZSBjb2RlIGFwcGVhcnMgaW4gdGhlIGxlZnQKLSAgc291cmNlIGNvZGUgd2luZG93LiBJVCBDQU5OT1QgQkUgRURJVEVELCBidXQgT05MWSBWSUVXRUQhCi0KLSAgLSBQcmVzcyBTVEFSVCBidXR0b24gdG8gc3RhcnQgdGhlIGRlbW8uCi0gIC0gU3RvcCBleGVjdXRpb24gYnkgcHJlc3NpbmcgdGhlIFNUT1AgYnV0dG9uLgotICAtIENsZWFyIHNjcmVlbiBieSBwcmVzc2luZyB0aGUgQ0xFQVIgYnV0dG9uLgotICAtIFJlc3RhcnQgYnkgcHJlc3NpbmcgdGhlIFNUQVJUIGJ1dHRvbiBhZ2Fpbi4KLQotICBTUEVDSUFMIGRlbW9zIGFyZSB0aG9zZSB3aGljaCBydW4gRVZFTlREUklWRU4uCi0gIChGb3IgZXhhbXBsZSBjbG9jay5weSAtIG9yIG9sZFR1cnRsZURlbW8ucHkgd2hpY2gKLSAgaW4gdGhlIGVuZCBleHBlY3RzIGEgbW91c2UgY2xpY2suKToKLQotICAgICAgUHJlc3MgU1RBUlQgYnV0dG9uIHRvIHN0YXJ0IHRoZSBkZW1vLgotCi0gICAgICAtIFVudGlsIHRoZSBFVkVOVExPT1AgaXMgZW50ZXJlZCBldmVyeXRoaW5nIHdvcmtzCi0gICAgICBhcyBpbiBhbiBvcmRpbmFyeSBkZW1vIHNjcmlwdC4KLQotICAgICAgLSBXaGVuIHRoZSBFVkVOVExPT1AgaXMgZW50ZXJlZCwgeW91IGNvbnRyb2wgdGhlCi0gICAgICBhcHBsaWNhdGlvbiBieSB1c2luZyB0aGUgbW91c2UgYW5kL29yIGtleXMgKG9yIGl0J3MKLSAgICAgIGNvbnRyb2xsZWQgYnkgc29tZSB0aW1lciBldmVudHMpCi0gICAgICBUbyBzdG9wIGl0IHlvdSBjYW4gYW5kIG11c3QgcHJlc3MgdGhlIFNUT1AgYnV0dG9uLgotCi0gICAgICBXaGlsZSB0aGUgRVZFTlRMT09QIGlzIHJ1bm5pbmcsIHRoZSBleGFtcGxlcyBtZW51IGlzIGRpc2FibGVkLgotCi0gICAgICAtIE9ubHkgYWZ0ZXIgaGF2aW5nIHByZXNzZWQgdGhlIFNUT1AgYnV0dG9uLCB5b3UgbWF5Ci0gICAgICByZXN0YXJ0IGl0IG9yIGNob29zZSBhbm90aGVyIGV4YW1wbGUgc2NyaXB0LgotCi0gICAqICogKiAqICogKiAqICoKLSAgIEluIHNvbWUgcmFyZSBzaXR1YXRpb25zIHRoZXJlIG1heSBvY2N1ciBpbnRlcmZlcmVuY2VzL2NvbmZsaWN0cwotICAgYmV0d2VlbiBldmVudHMgY29uY2VybmluZyB0aGUgZGVtbyBzY3JpcHQgYW5kIHRob3NlIGNvbmNlcm5pbmcgdGhlCi0gICBkZW1vLXZpZXdlci4gKFRoZXkgcnVuIGluIHRoZSBzYW1lIHByb2Nlc3MuKSBTdHJhbmdlIGJlaGF2aW91ciBtYXkgYmUKLSAgIHRoZSBjb25zZXF1ZW5jZSBhbmQgaW4gdGhlIHdvcnN0IGNhc2UgeW91IG11c3QgY2xvc2UgYW5kIHJlc3RhcnQgdGhlCi0gICB2aWV3ZXIuCi0gICAqICogKiAqICogKiAqICoKLQotCi0gICAoMikgSG93IHRvIGFkZCB5b3VyIG93biBkZW1vcyB0byB0aGUgZGVtbyByZXBvc2l0b3J5Ci0KLSAgIC0gcGxhY2U6IHNhbWUgZGlyZWN0b3J5IGFzIHR1cnRsZWRlbW8vX19tYWluX18ucHkKLQotICAgLSByZXF1aXJlbWVudHMgb24gc291cmNlIGNvZGU6Ci0gICAgICAgY29kZSBtdXN0IGNvbnRhaW4gYSBtYWluKCkgZnVuY3Rpb24gd2hpY2ggd2lsbAotICAgICAgIGJlIGV4ZWN1dGVkIGJ5IHRoZSB2aWV3ZXIgKHNlZSBwcm92aWRlZCBleGFtcGxlIHNjcmlwdHMpCi0gICAgICAgbWFpbigpIG1heSByZXR1cm4gYSBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQKLSAgICAgICBpbiB0aGUgTGFiZWwgYmVsb3cgdGhlIHNvdXJjZSBjb2RlIHdpbmRvdyAod2hlbiBleGVjdXRpb24KLSAgICAgICBoYXMgZmluaXNoZWQuKSAKLQotICAgICAgICEhIEZvciBwcm9ncmFtcywgd2hpY2ggYXJlIEVWRU5UIERSSVZFTiwgbWFpbiBtdXN0IHJldHVybgotICAgICAgICEhIHRoZSBzdHJpbmcgIkVWRU5UTE9PUCIuIFRoaXMgaW5mb3JtcyB0aGUgdmlld2VyLCB0aGF0IHRoZQotICAgICAgICEhIHNjcmlwdCBpcyBzdGlsbCBydW5uaW5nIGFuZCBtdXN0IGJlIHN0b3BwZWQgYnkgdGhlIHVzZXIhCi0KLSAgICAgICAgCi0gIApkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vZm9yZXN0LnB5IGIvTGliL3R1cnRsZWRlbW8vZm9yZXN0LnB5CmluZGV4IGE4MzdkODQuLjdmZTA4MGUgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL2ZvcmVzdC5weQorKysgYi9MaWIvdHVydGxlZGVtby9mb3Jlc3QucHkKQEAgLTMsMTIgKzMsMTIgQEAKIAogICAgICAgICAgICAgIHRkZW1vX2ZvcmVzdC5weQogCi1EaXNwbGF5cyBhICdmb3Jlc3QnIG9mIDMgJ2JyZWFkdGgtZmlyc3QtdHJlZXMnCi1zaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBleGFtcGxlIHRyZWUuCi1Gb3IgZnVydGhlciByZW1hcmtzIHNlZSB4dHhfdHJlZS5weQorRGlzcGxheXMgYSAnZm9yZXN0JyBvZiAzIGJyZWFkdGgtZmlyc3QtdHJlZXMKK3NpbWlsYXIgdG8gdGhlIG9uZSBpbiB0cmVlLgorRm9yIGZ1cnRoZXIgcmVtYXJrcyBzZWUgdHJlZS5weQogCiBUaGlzIGV4YW1wbGUgaXMgYSAnYnJlYWR0aC1maXJzdCctcmV3cml0ZSBvZgotYSBMb2dvIHByb2dyYW0gd3JpdHRlbiBieSBFcmljaCBOZXV3aXJ0aC4gU2VlOgorYSBMb2dvIHByb2dyYW0gd3JpdHRlbiBieSBFcmljaCBOZXV3aXJ0aC4gU2VlCiBodHRwOi8vaG9tZXBhZ2UudW5pdmllLmFjLmF0L2VyaWNoLm5ldXdpcnRoLwogIiIiCiBmcm9tIHR1cnRsZSBpbXBvcnQgVHVydGxlLCBjb2xvcm1vZGUsIHRyYWNlciwgbWFpbmxvb3AKQEAgLTEwNCw2ICsxMDQsNSBAQAogICAgIHJldHVybiAicnVudGltZTogJS4yZiBzZWMuIiAlIChiLWEpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbXNnID0gbWFpbigpCi0gICAgcHJpbnQobXNnKQorICAgIG1haW4oKQogICAgIG1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL21pbmltYWxfaGFub2kucHkgYi9MaWIvdHVydGxlZGVtby9taW5pbWFsX2hhbm9pLnB5CmluZGV4IGNmYjc4ZGMuLjRhNDMyZjIgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL21pbmltYWxfaGFub2kucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vbWluaW1hbF9oYW5vaS5weQpAQCAtNTAsOSArNTAsMTIgQEAKIGRlZiBwbGF5KCk6CiAgICAgb25rZXkoTm9uZSwic3BhY2UiKQogICAgIGNsZWFyKCkKLSAgICBoYW5vaSg2LCB0MSwgdDIsIHQzKQotICAgIHdyaXRlKCJwcmVzcyBTVE9QIGJ1dHRvbiB0byBleGl0IiwKLSAgICAgICAgICBhbGlnbj0iY2VudGVyIiwgZm9udD0oIkNvdXJpZXIiLCAxNiwgImJvbGQiKSkKKyAgICB0cnk6CisgICAgICAgIGhhbm9pKDYsIHQxLCB0MiwgdDMpCisgICAgICAgIHdyaXRlKCJwcmVzcyBTVE9QIGJ1dHRvbiB0byBleGl0IiwKKyAgICAgICAgICAgICAgYWxpZ249ImNlbnRlciIsIGZvbnQ9KCJDb3VyaWVyIiwgMTYsICJib2xkIikpCisgICAgZXhjZXB0IFRlcm1pbmF0b3I6CisgICAgICAgIHBhc3MgICMgdHVydGxlZGVtbyB1c2VyIHByZXNzZWQgU1RPUAogCiBkZWYgbWFpbigpOgogICAgIGdsb2JhbCB0MSwgdDIsIHQzCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9uaW0ucHkgYi9MaWIvdHVydGxlZGVtby9uaW0ucHkKaW5kZXggNzkyYmE1MS4uOWFlNmNjNSAxMDA2NDQKLS0tIGEvTGliL3R1cnRsZWRlbW8vbmltLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL25pbS5weQpAQCAtMTQzLDcgKzE0Myw2IEBACiAgICAgICAgIHNlbGYud3JpdGVyLndyaXRlKG1zZzEsIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsMTQsImJvbGQiKSkKICAgICAgICAgc2VsZi5zY3JlZW4udHJhY2VyKFRydWUpCiAKLQogICAgIGRlZiBzZXR1cChzZWxmKToKICAgICAgICAgc2VsZi5zY3JlZW4udHJhY2VyKEZhbHNlKQogICAgICAgICBmb3Igcm93IGluIHJhbmdlKDMpOgpAQCAtMTgxLDYgKzE4MCw3IEBACiAgICAgICAgIGlmIHNlbGYuZ2FtZS5zdGF0ZSA9PSBOaW0uT1ZFUjoKICAgICAgICAgICAgIHNlbGYuc2NyZWVuLmNsZWFyKCkKIAorCiBjbGFzcyBOaW1Db250cm9sbGVyKG9iamVjdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZ2FtZSk6CkBAIC0yMDEsNiArMjAxLDcgQEAKICAgICAgICAgc2VsZi5nYW1lLm1vZGVsLm5vdGlmeV9tb3ZlKHJvdywgY29sKQogICAgICAgICBzZWxmLkJVU1kgPSBGYWxzZQogCisKIGNsYXNzIE5pbShvYmplY3QpOgogICAgIENSRUFURUQgPSAwCiAgICAgUlVOTklORyA9IDEKQEAgLTIxMywxMyArMjE0LDEyIEBACiAgICAgICAgIHNlbGYuY29udHJvbGxlciA9IE5pbUNvbnRyb2xsZXIoc2VsZikKIAogCi1tYWluc2NyZWVuID0gdHVydGxlLlNjcmVlbigpCi1tYWluc2NyZWVuLm1vZGUoInN0YW5kYXJkIikKLW1haW5zY3JlZW4uc2V0dXAoU0NSRUVOV0lEVEgsIFNDUkVFTkhFSUdIVCkKLQogZGVmIG1haW4oKToKKyAgICBtYWluc2NyZWVuID0gdHVydGxlLlNjcmVlbigpCisgICAgbWFpbnNjcmVlbi5tb2RlKCJzdGFuZGFyZCIpCisgICAgbWFpbnNjcmVlbi5zZXR1cChTQ1JFRU5XSURUSCwgU0NSRUVOSEVJR0hUKQogICAgIG5pbSA9IE5pbShtYWluc2NyZWVuKQotICAgIHJldHVybiAiRVZFTlRMT09QISIKKyAgICByZXR1cm4gIkVWRU5UTE9PUCIKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL3BhaW50LnB5IGIvTGliL3R1cnRsZWRlbW8vcGFpbnQucHkKaW5kZXggNjgwNThhYi4uZGRlMTY5MSAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vcGFpbnQucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vcGFpbnQucHkKQEAgLTMsMTEgKzMsMTUgQEAKIAogICAgICAgICAgICAgdGRlbW9fcGFpbnQucHkKIAotQSBzaW1wbGUgIGV2ZW50ZHJpdmVuIHBhaW50IHByb2dyYW0KK0Egc2ltcGxlICBldmVudC1kcml2ZW4gcGFpbnQgcHJvZ3JhbQogCi0tIHVzZSBsZWZ0IG1vdXNlIGJ1dHRvbiB0byBtb3ZlIHR1cnRsZQotLSBtaWRkbGUgbW91c2UgYnV0dG9uIHRvIGNoYW5nZSBjb2xvcgotLSByaWdodCBtb3VzZSBidXR0b24gZG8gdHVybiBmaWxsaW5nIG9uL29mZgorLSBsZWZ0IG1vdXNlIGJ1dHRvbiBtb3ZlcyB0dXJ0bGUKKy0gbWlkZGxlIG1vdXNlIGJ1dHRvbiBjaGFuZ2VzIGNvbG9yCistIHJpZ2h0IG1vdXNlIGJ1dHRvbiB0b29nbGVzIGJldHdlZW0gcGVuIHVwCisobm8gbGluZSBkcmF3biB3aGVuIHRoZSB0dXJ0bGUgbW92ZXMpIGFuZAorcGVuIGRvd24gKGxpbmUgaXMgZHJhd24pLiBJZiBwZW4gdXAgZm9sbG93cworYXQgbGVhc3QgdHdvIHBlbi1kb3duIG1vdmVzLCB0aGUgcG9seWdvbiB0aGF0CitpbmNsdWRlcyB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgZmlsbGVkLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBQbGF5IGFyb3VuZCBieSBjbGlja2luZyBpbnRvIHRoZSBjYW52YXMKICB1c2luZyBhbGwgdGhyZWUgbW91c2UgYnV0dG9ucy4KZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL3BlYWNlLnB5IGIvTGliL3R1cnRsZWRlbW8vcGVhY2UucHkKaW5kZXggNjNjZjdjYy4uZTJiYTkyOCAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vcGVhY2UucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vcGVhY2UucHkKQEAgLTMsMTQgKzMsMTAgQEAKIAogICAgICAgICAgICAgICB0ZGVtb19wZWFjZS5weQogCi1BIHZlcnkgc2ltcGxlIGRyYXdpbmcgc3VpdGFibGUgYXMgYSBiZWdpbm5lcidzCi1wcm9ncmFtbWluZyBleGFtcGxlLgotCi1Vc2VzIG9ubHkgY29tbWFuZHMsIHdoaWNoIGFyZSBhbHNvIGF2YWlsYWJsZSBpbgotb2xkIHR1cnRsZS5weS4KLQotSW50ZW50aW9uYWxseSBubyB2YXJpYWJsZXMgYXJlIHVzZWQgZXhjZXB0IGZvciB0aGUKLWNvbG9ybG9vcDoKK0Egc2ltcGxlIGRyYXdpbmcgc3VpdGFibGUgYXMgYSBiZWdpbm5lcidzCitwcm9ncmFtbWluZyBleGFtcGxlLiBBc2lkZSBmcm9tIHRoZQorcGVhY2Vjb2xvcnMgYXNzaWdubWVudCBhbmQgdGhlIGZvciBsb29wLAoraXQgb25seSB1c2VzIHR1cnRsZSBjb21tYW5kcy4KICIiIgogCiBmcm9tIHR1cnRsZSBpbXBvcnQgKgpAQCAtMjEsNyArMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICJyb3lhbGJsdWUxIiwgImRvZGdlcmJsdWU0IikKIAogICAgIHJlc2V0KCkKLSAgICBzID0gU2NyZWVuKCkKKyAgICBTY3JlZW4oKQogICAgIHVwKCkKICAgICBnb3RvKC0zMjAsLTE5NSkKICAgICB3aWR0aCg3MCkKQEAgLTU4LDcgKzU0LDcgQEAKICAgICB1cCgpCiAKICAgICBnb3RvKDAsMzAwKSAjIHZhbmlzaCBpZiBoaWRldHVydGxlKCkgaXMgbm90IGF2YWlsYWJsZSA7LSkKLSAgICByZXR1cm4gIkRvbmUhISIKKyAgICByZXR1cm4gIkRvbmUhIgogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vcGxhbmV0X2FuZF9tb29uLnB5IGIvTGliL3R1cnRsZWRlbW8vcGxhbmV0X2FuZF9tb29uLnB5CmluZGV4IDE0YzRiYmMuLjI2YWJmZGIgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL3BsYW5ldF9hbmRfbW9vbi5weQorKysgYi9MaWIvdHVydGxlZGVtby9wbGFuZXRfYW5kX21vb24ucHkKQEAgLTEyLDkgKzEyLDkgQEAKIFBsYW5ldCBoYXMgYSBjaXJjdWxhciBvcmJpdCwgbW9vbiBhIHN0YWJsZQogb3JiaXQgYXJvdW5kIHRoZSBwbGFuZXQuCiAKLVlvdSBjYW4gaG9sZCB0aGUgbW92ZW1lbnQgdGVtcG9yYXJpbHkgYnkgcHJlc3NpbmcKLXRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiB3aXRoIG1vdXNlIG92ZXIgdGhlCi1zY3JvbGxiYXIgb2YgdGhlIGNhbnZhcy4KK1lvdSBjYW4gaG9sZCB0aGUgbW92ZW1lbnQgdGVtcG9yYXJpbHkgYnkKK3ByZXNzaW5nIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiB3aXRoIHRoZQorbW91c2Ugb3ZlciB0aGUgc2Nyb2xsYmFyIG9mIHRoZSBjYW52YXMuCiAKICIiIgogZnJvbSB0dXJ0bGUgaW1wb3J0IFNoYXBlLCBUdXJ0bGUsIG1haW5sb29wLCBWZWMyRCBhcyBWZWMKQEAgLTEwOCw2ICsxMDgsNSBAQAogICAgIHJldHVybiAiRG9uZSEiCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbXNnID0gbWFpbigpCi0gICAgcHJpbnQobXNnKQotICAgICNtYWlubG9vcCgpCisgICAgbWFpbigpCisgICAgbWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vdHJlZS5weSBiL0xpYi90dXJ0bGVkZW1vL3RyZWUucHkKaW5kZXggOWMwYjFmNy4uNzFmZmYzNSAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vdHJlZS5weQorKysgYi9MaWIvdHVydGxlZGVtby90cmVlLnB5CkBAIC0xMSw5ICsxMSw5IEBACiAoMSkgYSB0cmVlLWdlbmVyYXRvciwgd2hlcmUgdGhlIGRyYXdpbmcgaXMKIHF1YXNpIHRoZSBzaWRlLWVmZmVjdCwgd2hlcmVhcyB0aGUgZ2VuZXJhdG9yCiBhbHdheXMgeWllbGRzIE5vbmUuCi0oMikgVHVydGxlLWNsb25pbmc6IEF0IGVhY2ggYnJhbmNoaW5nIHBvaW50IHRoZQotY3VycmVudCBwZW4gaXMgY2xvbmVkLiBTbyBpbiB0aGUgZW5kIHRoZXJlCi1hcmUgMTAyNCB0dXJ0bGVzLgorKDIpIFR1cnRsZS1jbG9uaW5nOiBBdCBlYWNoIGJyYW5jaGluZyBwb2ludAordGhlIGN1cnJlbnQgcGVuIGlzIGNsb25lZC4gU28gaW4gdGhlIGVuZAordGhlcmUgYXJlIDEwMjQgdHVydGxlcy4KICIiIgogZnJvbSB0dXJ0bGUgaW1wb3J0IFR1cnRsZSwgbWFpbmxvb3AKIGZyb20gdGltZSBpbXBvcnQgY2xvY2sKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL3R3b19jYW52YXNlcy5weSBiL0xpYi90dXJ0bGVkZW1vL3R3b19jYW52YXNlcy5weQppbmRleCAwMmQ4OWRiLi5kNTc5ODc2IDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby90d29fY2FudmFzZXMucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vdHdvX2NhbnZhc2VzLnB5CkBAIC0xLDUyICsxLDU0IEBACi0jIS91c3IvYmluL2VudiBweXRob24zCi0jIyBERU1PTlNUUkFURVMgVVNFIE9GIDIgQ0FOVkFTRVMsIFNPIENBTk5PVCBCRSBSVU4gSU4gREVNT1ZJRVdFUiEKLSIiInR1cnRsZSBleGFtcGxlOiBVc2luZyBUdXJ0bGVTY3JlZW4gYW5kIFJhd1R1cnRsZQotZm9yIGRyYXdpbmcgb24gdHdvIGRpc3RpbmN0IGNhbnZhc2VzLgorIiIidHVydGxlZGVtby50d29fY2FudmFzZXMKKworVXNlIFR1cnRsZVNjcmVlbiBhbmQgUmF3VHVydGxlIHRvIGRyYXcgb24gdHdvCitkaXN0aW5jdCBjYW52YXNlcyBpbiBhIHNlcGFyYXRlIHdpbmRvd3MuIFRoZQorbmV3IHdpbmRvdyBtdXN0IGJlIHNlcGFyYXRlbHkgY2xvc2VkIGluCithZGRpdGlvbiB0byBwcmVzc2luZyB0aGUgU1RPUCBidXR0b24uCiAiIiIKKwogZnJvbSB0dXJ0bGUgaW1wb3J0IFR1cnRsZVNjcmVlbiwgUmF3VHVydGxlLCBUSwogCi1yb290ID0gVEsuVGsoKQotY3YxID0gVEsuQ2FudmFzKHJvb3QsIHdpZHRoPTMwMCwgaGVpZ2h0PTIwMCwgYmc9IiNkZGZmZmYiKQotY3YyID0gVEsuQ2FudmFzKHJvb3QsIHdpZHRoPTMwMCwgaGVpZ2h0PTIwMCwgYmc9IiNmZmVlZWUiKQotY3YxLnBhY2soKQotY3YyLnBhY2soKQorZGVmIG1haW4oKToKKyAgICByb290ID0gVEsuVGsoKQorICAgIGN2MSA9IFRLLkNhbnZhcyhyb290LCB3aWR0aD0zMDAsIGhlaWdodD0yMDAsIGJnPSIjZGRmZmZmIikKKyAgICBjdjIgPSBUSy5DYW52YXMocm9vdCwgd2lkdGg9MzAwLCBoZWlnaHQ9MjAwLCBiZz0iI2ZmZWVlZSIpCisgICAgY3YxLnBhY2soKQorICAgIGN2Mi5wYWNrKCkKIAotczEgPSBUdXJ0bGVTY3JlZW4oY3YxKQotczEuYmdjb2xvcigwLjg1LCAwLjg1LCAxKQotczIgPSBUdXJ0bGVTY3JlZW4oY3YyKQotczIuYmdjb2xvcigxLCAwLjg1LCAwLjg1KQorICAgIHMxID0gVHVydGxlU2NyZWVuKGN2MSkKKyAgICBzMS5iZ2NvbG9yKDAuODUsIDAuODUsIDEpCisgICAgczIgPSBUdXJ0bGVTY3JlZW4oY3YyKQorICAgIHMyLmJnY29sb3IoMSwgMC44NSwgMC44NSkKIAotcCA9IFJhd1R1cnRsZShzMSkKLXEgPSBSYXdUdXJ0bGUoczIpCisgICAgcCA9IFJhd1R1cnRsZShzMSkKKyAgICBxID0gUmF3VHVydGxlKHMyKQogCi1wLmNvbG9yKCJyZWQiLCAoMSwgMC44NSwgMC44NSkpCi1wLndpZHRoKDMpCi1xLmNvbG9yKCJibHVlIiwgKDAuODUsIDAuODUsIDEpKQotcS53aWR0aCgzKQorICAgIHAuY29sb3IoInJlZCIsICgxLCAwLjg1LCAwLjg1KSkKKyAgICBwLndpZHRoKDMpCisgICAgcS5jb2xvcigiYmx1ZSIsICgwLjg1LCAwLjg1LCAxKSkKKyAgICBxLndpZHRoKDMpCiAKLWZvciB0IGluIHAscToKLSAgICB0LnNoYXBlKCJ0dXJ0bGUiKQotICAgIHQubHQoMzYpCisgICAgZm9yIHQgaW4gcCxxOgorICAgICAgICB0LnNoYXBlKCJ0dXJ0bGUiKQorICAgICAgICB0Lmx0KDM2KQogCi1xLmx0KDE4MCkKKyAgICBxLmx0KDE4MCkKIAotZm9yIHQgaW4gcCwgcToKLSAgICB0LmJlZ2luX2ZpbGwoKQotZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgZm9yIHQgaW4gcCwgcToKLSAgICAgICAgdC5mZCg1MCkKLSAgICAgICAgdC5sdCg3MikKLWZvciB0IGluIHAscToKLSAgICB0LmVuZF9maWxsKCkKLSAgICB0Lmx0KDU0KQotICAgIHQucHUoKQotICAgIHQuYmsoNTApCisgICAgICAgIHQuYmVnaW5fZmlsbCgpCisgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgIGZvciB0IGluIHAsIHE6CisgICAgICAgICAgICB0LmZkKDUwKQorICAgICAgICAgICAgdC5sdCg3MikKKyAgICBmb3IgdCBpbiBwLHE6CisgICAgICAgIHQuZW5kX2ZpbGwoKQorICAgICAgICB0Lmx0KDU0KQorICAgICAgICB0LnB1KCkKKyAgICAgICAgdC5iayg1MCkKIAotIyMgV2FudCB0byBnZXQgc29tZSBpbmZvPworICAgIHJldHVybiAiRVZFTlRMT09QIgogCi0jcHJpbnQoczEsIHMyKQotI3ByaW50KHAsIHEpCi0jcHJpbnQoczEudHVydGxlcygpKQotI3ByaW50KHMyLnR1cnRsZXMoKSkKIAotVEsubWFpbmxvb3AoKQoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKKyAgICBUSy5tYWlubG9vcCgpICAjIGtlZXAgd2luZG93IG9wZW4gdW50aWwgdXNlciBjbG9zZXMgaXQKZGlmZiAtLWdpdCBhL0xpYi90eXBlcy5weSBiL0xpYi90eXBlcy5weQppbmRleCBjZmQwOWVhLi43ZTRmZWMyIDEwMDY0NAotLS0gYS9MaWIvdHlwZXMucHkKKysrIGIvTGliL3R5cGVzLnB5CkBAIC05OSwzICs5OSw2MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgYSAobm9uLXN0cmljdCkgc3ViY2xhc3MgIgogICAgICAgICAgICAgICAgICAgICAgICAgIm9mIHRoZSBtZXRhY2xhc3NlcyBvZiBhbGwgaXRzIGJhc2VzIikKICAgICByZXR1cm4gd2lubmVyCisKK2NsYXNzIER5bmFtaWNDbGFzc0F0dHJpYnV0ZToKKyAgICAiIiJSb3V0ZSBhdHRyaWJ1dGUgYWNjZXNzIG9uIGEgY2xhc3MgdG8gX19nZXRhdHRyX18uCisKKyAgICBUaGlzIGlzIGEgZGVzY3JpcHRvciwgdXNlZCB0byBkZWZpbmUgYXR0cmlidXRlcyB0aGF0IGFjdCBkaWZmZXJlbnRseSB3aGVuCisgICAgYWNjZXNzZWQgdGhyb3VnaCBhbiBpbnN0YW5jZSBhbmQgdGhyb3VnaCBhIGNsYXNzLiAgSW5zdGFuY2UgYWNjZXNzIHJlbWFpbnMKKyAgICBub3JtYWwsIGJ1dCBhY2Nlc3MgdG8gYW4gYXR0cmlidXRlIHRocm91Z2ggYSBjbGFzcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUKKyAgICBjbGFzcydzIF9fZ2V0YXR0cl9fIG1ldGhvZDsgdGhpcyBpcyBkb25lIGJ5IHJhaXNpbmcgQXR0cmlidXRlRXJyb3IuCisKKyAgICBUaGlzIGFsbG93cyBvbmUgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFjdGl2ZSBvbiBhbiBpbnN0YW5jZSwgYW5kIGhhdmUgdmlydHVhbAorICAgIGF0dHJpYnV0ZXMgb24gdGhlIGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSAoc2VlIEVudW0gZm9yIGFuIGV4YW1wbGUpLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZnZXQ9Tm9uZSwgZnNldD1Ob25lLCBmZGVsPU5vbmUsIGRvYz1Ob25lKToKKyAgICAgICAgc2VsZi5mZ2V0ID0gZmdldAorICAgICAgICBzZWxmLmZzZXQgPSBmc2V0CisgICAgICAgIHNlbGYuZmRlbCA9IGZkZWwKKyAgICAgICAgIyBuZXh0IHR3byBsaW5lcyBtYWtlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBhY3QgdGhlIHNhbWUgYXMgcHJvcGVydHkKKyAgICAgICAgc2VsZi5fX2RvY19fID0gZG9jIG9yIGZnZXQuX19kb2NfXworICAgICAgICBzZWxmLm92ZXJ3cml0ZV9kb2MgPSBkb2MgaXMgTm9uZQorICAgICAgICAjIHN1cHBvcnQgZm9yIGFic3RyYWN0IG1ldGhvZHMKKyAgICAgICAgc2VsZi5fX2lzYWJzdHJhY3RtZXRob2RfXyA9IGJvb2woZ2V0YXR0cihmZ2V0LCAnX19pc2Fic3RyYWN0bWV0aG9kX18nLCBGYWxzZSkpCisKKyAgICBkZWYgX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXJjbGFzcz1Ob25lKToKKyAgICAgICAgaWYgaW5zdGFuY2UgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX19pc2Fic3RyYWN0bWV0aG9kX186CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCkKKyAgICAgICAgZWxpZiBzZWxmLmZnZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJ1bnJlYWRhYmxlIGF0dHJpYnV0ZSIpCisgICAgICAgIHJldHVybiBzZWxmLmZnZXQoaW5zdGFuY2UpCisKKyAgICBkZWYgX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpOgorICAgICAgICBpZiBzZWxmLmZzZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJjYW4ndCBzZXQgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mc2V0KGluc3RhbmNlLCB2YWx1ZSkKKworICAgIGRlZiBfX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKToKKyAgICAgICAgaWYgc2VsZi5mZGVsIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiY2FuJ3QgZGVsZXRlIGF0dHJpYnV0ZSIpCisgICAgICAgIHNlbGYuZmRlbChpbnN0YW5jZSkKKworICAgIGRlZiBnZXR0ZXIoc2VsZiwgZmdldCk6CisgICAgICAgIGZkb2MgPSBmZ2V0Ll9fZG9jX18gaWYgc2VsZi5vdmVyd3JpdGVfZG9jIGVsc2UgTm9uZQorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKGZnZXQsIHNlbGYuZnNldCwgc2VsZi5mZGVsLCBmZG9jIG9yIHNlbGYuX19kb2NfXykKKyAgICAgICAgcmVzdWx0Lm92ZXJ3cml0ZV9kb2MgPSBzZWxmLm92ZXJ3cml0ZV9kb2MKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHNldHRlcihzZWxmLCBmc2V0KToKKyAgICAgICAgcmVzdWx0ID0gdHlwZShzZWxmKShzZWxmLmZnZXQsIGZzZXQsIHNlbGYuZmRlbCwgc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZGVsZXRlcihzZWxmLCBmZGVsKToKKyAgICAgICAgcmVzdWx0ID0gdHlwZShzZWxmKShzZWxmLmZnZXQsIHNlbGYuZnNldCwgZmRlbCwgc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKaW5kZXggNzk4ZWJjMC4uMjY2MzE3OCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CisrKyBiL0xpYi91bml0dGVzdC9fX21haW5fXy5weQpAQCAtMTMsNyArMTMsNiBAQAogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCi1mcm9tIC5tYWluIGltcG9ydCBtYWluLCBUZXN0UHJvZ3JhbSwgVVNBR0VfQVNfTUFJTgotVGVzdFByb2dyYW0uVVNBR0UgPSBVU0FHRV9BU19NQUlOCitmcm9tIC5tYWluIGltcG9ydCBtYWluLCBUZXN0UHJvZ3JhbQogCiBtYWluKG1vZHVsZT1Ob25lKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L2Nhc2UucHkgYi9MaWIvdW5pdHRlc3QvY2FzZS5weQppbmRleCBmNTZhZjU1Li5hYTAwYjdhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvY2FzZS5weQorKysgYi9MaWIvdW5pdHRlc3QvY2FzZS5weQpAQCAtMywxNCArMywxNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBsb2dnaW5nCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIC4gaW1wb3J0IHJlc3VsdAogZnJvbSAudXRpbCBpbXBvcnQgKHN0cmNsYXNzLCBzYWZlX3JlcHIsIF9jb3VudF9kaWZmX2FsbF9wdXJwb3NlLAotICAgICAgICAgICAgICAgICAgIF9jb3VudF9kaWZmX2hhc2hhYmxlKQorICAgICAgICAgICAgICAgICAgIF9jb3VudF9kaWZmX2hhc2hhYmxlLCBfY29tbW9uX3Nob3J0ZW5fcmVwcikKIAogX191bml0dGVzdCA9IFRydWUKIApAQCAtMjYsMTcgKzI5LDExIEBACiAgICAgaW5zdGVhZCBvZiByYWlzaW5nIHRoaXMgZGlyZWN0bHkuCiAgICAgIiIiCiAKLWNsYXNzIF9FeHBlY3RlZEZhaWx1cmUoRXhjZXB0aW9uKToKK2NsYXNzIF9TaG91bGRTdG9wKEV4Y2VwdGlvbik6CiAgICAgIiIiCi0gICAgUmFpc2UgdGhpcyB3aGVuIGEgdGVzdCBpcyBleHBlY3RlZCB0byBmYWlsLgotCi0gICAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgVGhlIHRlc3Qgc2hvdWxkIHN0b3AuCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjX2luZm8pOgotICAgICAgICBzdXBlcihfRXhwZWN0ZWRGYWlsdXJlLCBzZWxmKS5fX2luaXRfXygpCi0gICAgICAgIHNlbGYuZXhjX2luZm8gPSBleGNfaW5mbwotCiBjbGFzcyBfVW5leHBlY3RlZFN1Y2Nlc3MoRXhjZXB0aW9uKToKICAgICAiIiIKICAgICBUaGUgdGVzdCB3YXMgc3VwcG9zZWQgdG8gZmFpbCwgYnV0IGl0IGRpZG4ndCEKQEAgLTQ0LDEzICs0MSw0MyBAQAogCiAKIGNsYXNzIF9PdXRjb21lKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXN1bHQ9Tm9uZSk6CisgICAgICAgIHNlbGYuZXhwZWN0aW5nX2ZhaWx1cmUgPSBGYWxzZQorICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLnJlc3VsdF9zdXBwb3J0c19zdWJ0ZXN0cyA9IGhhc2F0dHIocmVzdWx0LCAiYWRkU3ViVGVzdCIpCiAgICAgICAgIHNlbGYuc3VjY2VzcyA9IFRydWUKLSAgICAgICAgc2VsZi5za2lwcGVkID0gTm9uZQotICAgICAgICBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzID0gTm9uZQorICAgICAgICBzZWxmLnNraXBwZWQgPSBbXQogICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZSA9IE5vbmUKICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQotICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3RQYXJ0RXhlY3V0b3Ioc2VsZiwgdGVzdF9jYXNlLCBpc1Rlc3Q9RmFsc2UpOgorICAgICAgICBvbGRfc3VjY2VzcyA9IHNlbGYuc3VjY2VzcworICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBTa2lwVGVzdCBhcyBlOgorICAgICAgICAgICAgc2VsZi5zdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuc2tpcHBlZC5hcHBlbmQoKHRlc3RfY2FzZSwgc3RyKGUpKSkKKyAgICAgICAgZXhjZXB0IF9TaG91bGRTdG9wOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBzZWxmLmV4cGVjdGluZ19mYWlsdXJlOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoKHRlc3RfY2FzZSwgZXhjX2luZm8pKQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGJyZWFrIGEgcmVmZXJlbmNlIGN5Y2xlOgorICAgICAgICAgICAgIyBleGNfaW5mbyAtPiBmcmFtZSAtPiBleGNfaW5mbworICAgICAgICAgICAgZXhjX2luZm8gPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLnJlc3VsdF9zdXBwb3J0c19zdWJ0ZXN0cyBhbmQgc2VsZi5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdF9jYXNlLCBOb25lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IHNlbGYuc3VjY2VzcyBhbmQgb2xkX3N1Y2Nlc3MKIAogCiBkZWYgX2lkKG9iaik6CkBAIC04OCwyMiArMTE1LDI2IEBACiAgICAgICAgIHJldHVybiBza2lwKHJlYXNvbikKICAgICByZXR1cm4gX2lkCiAKLQotZGVmIGV4cGVjdGVkRmFpbHVyZShmdW5jKToKLSAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCi0gICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICByYWlzZSBfRXhwZWN0ZWRGYWlsdXJlKHN5cy5leGNfaW5mbygpKQotICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MKLSAgICByZXR1cm4gd3JhcHBlcgorZGVmIGV4cGVjdGVkRmFpbHVyZSh0ZXN0X2l0ZW0pOgorICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X2V4cGVjdGluZ19mYWlsdXJlX18gPSBUcnVlCisgICAgcmV0dXJuIHRlc3RfaXRlbQogCiAKLWNsYXNzIF9Bc3NlcnRSYWlzZXNCYXNlQ29udGV4dChvYmplY3QpOgorY2xhc3MgX0Jhc2VUZXN0Q2FzZUNvbnRleHQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKToKKyAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKworICAgIGRlZiBfcmFpc2VGYWlsdXJlKHNlbGYsIHN0YW5kYXJkTXNnKToKKyAgICAgICAgbXNnID0gc2VsZi50ZXN0X2Nhc2UuX2Zvcm1hdE1lc3NhZ2Uoc2VsZi5tc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLnRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworCitjbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkLCB0ZXN0X2Nhc2UsIGNhbGxhYmxlX29iaj1Ob25lLAogICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleD1Ob25lKToKKyAgICAgICAgX0Jhc2VUZXN0Q2FzZUNvbnRleHQuX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKQogICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKICAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKICAgICAgICAgaWYgY2FsbGFibGVfb2JqIGlzIG5vdCBOb25lOgpAQCAtMTEzLDE1ICsxNDQsMTEgQEAKICAgICAgICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gc3RyKGNhbGxhYmxlX29iaikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYub2JqX25hbWUgPSBOb25lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfcmVnZXgsIChieXRlcywgc3RyKSk6CisgICAgICAgIGlmIGV4cGVjdGVkX3JlZ2V4IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXggPSByZS5jb21waWxlKGV4cGVjdGVkX3JlZ2V4KQogICAgICAgICBzZWxmLmV4cGVjdGVkX3JlZ2V4ID0gZXhwZWN0ZWRfcmVnZXgKICAgICAgICAgc2VsZi5tc2cgPSBOb25lCiAKLSAgICBkZWYgX3JhaXNlRmFpbHVyZShzZWxmLCBzdGFuZGFyZE1zZyk6Ci0gICAgICAgIG1zZyA9IHNlbGYudGVzdF9jYXNlLl9mb3JtYXRNZXNzYWdlKHNlbGYubXNnLCBzdGFuZGFyZE1zZykKLSAgICAgICAgcmFpc2Ugc2VsZi50ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCi0KICAgICBkZWYgaGFuZGxlKHNlbGYsIG5hbWUsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIElmIGNhbGxhYmxlX29iaiBpcyBOb25lLCBhc3NlcnRSYWlzZXMvV2FybnMgaXMgYmVpbmcgdXNlZCBhcyBhCkBAIC0xMzUsNyArMTYyLDYgQEAKICAgICAgICAgICAgIGNhbGxhYmxlX29iaigqYXJncywgKiprd2FyZ3MpCiAKIAotCiBjbGFzcyBfQXNzZXJ0UmFpc2VzQ29udGV4dChfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQpOgogICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydFJhaXNlcyogbWV0aG9kcy4iIiIKIApAQCAtMTUzLDYgKzE3OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vYmpfbmFtZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgie30gbm90IHJhaXNlZCIuZm9ybWF0KGV4Y19uYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyYWNlYmFjay5jbGVhcl9mcmFtZXModGIpCiAgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGV4Y190eXBlLCBzZWxmLmV4cGVjdGVkKToKICAgICAgICAgICAgICMgbGV0IHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2gKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtMjE3LDYgKzI0NSw3NCBAQAogICAgICAgICAgICAgc2VsZi5fcmFpc2VGYWlsdXJlKCJ7fSBub3QgdHJpZ2dlcmVkIi5mb3JtYXQoZXhjX25hbWUpKQogCiAKKworX0xvZ2dpbmdXYXRjaGVyID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0xvZ2dpbmdXYXRjaGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJyZWNvcmRzIiwgIm91dHB1dCJdKQorCisKK2NsYXNzIF9DYXB0dXJpbmdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgIiIiCisgICAgQSBsb2dnaW5nIGhhbmRsZXIgY2FwdHVyaW5nIGFsbCAocmF3IGFuZCBmb3JtYXR0ZWQpIGxvZ2dpbmcgb3V0cHV0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gX0xvZ2dpbmdXYXRjaGVyKFtdLCBbXSkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgc2VsZi53YXRjaGVyLnJlY29yZHMuYXBwZW5kKHJlY29yZCkKKyAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQorICAgICAgICBzZWxmLndhdGNoZXIub3V0cHV0LmFwcGVuZChtc2cpCisKKworCitjbGFzcyBfQXNzZXJ0TG9nc0NvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgorICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydExvZ3MoKS4iIiIKKworICAgIExPR0dJTkdfRk9STUFUID0gIiUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlLCBsb2dnZXJfbmFtZSwgbGV2ZWwpOgorICAgICAgICBfQmFzZVRlc3RDYXNlQ29udGV4dC5fX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UpCisgICAgICAgIHNlbGYubG9nZ2VyX25hbWUgPSBsb2dnZXJfbmFtZQorICAgICAgICBpZiBsZXZlbDoKKyAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBsb2dnaW5nLl9uYW1lVG9MZXZlbC5nZXQobGV2ZWwsIGxldmVsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICBzZWxmLm1zZyA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5sb2dnZXJfbmFtZSwgbG9nZ2luZy5Mb2dnZXIpOgorICAgICAgICAgICAgbG9nZ2VyID0gc2VsZi5sb2dnZXIgPSBzZWxmLmxvZ2dlcl9uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIgPSBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKHNlbGYubG9nZ2VyX25hbWUpCisgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKHNlbGYuTE9HR0lOR19GT1JNQVQpCisgICAgICAgIGhhbmRsZXIgPSBfQ2FwdHVyaW5nSGFuZGxlcigpCisgICAgICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gaGFuZGxlci53YXRjaGVyCisgICAgICAgIHNlbGYub2xkX2hhbmRsZXJzID0gbG9nZ2VyLmhhbmRsZXJzWzpdCisgICAgICAgIHNlbGYub2xkX2xldmVsID0gbG9nZ2VyLmxldmVsCisgICAgICAgIHNlbGYub2xkX3Byb3BhZ2F0ZSA9IGxvZ2dlci5wcm9wYWdhdGUKKyAgICAgICAgbG9nZ2VyLmhhbmRsZXJzID0gW2hhbmRsZXJdCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChzZWxmLmxldmVsKQorICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIud2F0Y2hlcgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRiKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaGFuZGxlcnMgPSBzZWxmLm9sZF9oYW5kbGVycworICAgICAgICBzZWxmLmxvZ2dlci5wcm9wYWdhdGUgPSBzZWxmLm9sZF9wcm9wYWdhdGUKKyAgICAgICAgc2VsZi5sb2dnZXIuc2V0TGV2ZWwoc2VsZi5vbGRfbGV2ZWwpCisgICAgICAgIGlmIGV4Y190eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBsZXQgdW5leHBlY3RlZCBleGNlcHRpb25zIHBhc3MgdGhyb3VnaAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGxlbihzZWxmLndhdGNoZXIucmVjb3JkcykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgKKyAgICAgICAgICAgICAgICAibm8gbG9ncyBvZiBsZXZlbCB7fSBvciBoaWdoZXIgdHJpZ2dlcmVkIG9uIHt9IgorICAgICAgICAgICAgICAgIC5mb3JtYXQobG9nZ2luZy5nZXRMZXZlbE5hbWUoc2VsZi5sZXZlbCksIHNlbGYubG9nZ2VyLm5hbWUpKQorCisKIGNsYXNzIFRlc3RDYXNlKG9iamVjdCk6CiAgICAgIiIiQSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHNpbmdsZSB0ZXN0IGNhc2VzLgogCkBAIC0yNzAsNyArMzY2LDcgQEAKICAgICAgICAgICAgbm90IGhhdmUgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUKLSAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBOb25lCisgICAgICAgIHNlbGYuX291dGNvbWUgPSBOb25lCiAgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSAnTm8gdGVzdCcKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgbWV0aG9kTmFtZSkKQEAgLTI4Myw2ICszNzksNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZERvYyA9IHRlc3RNZXRob2QuX19kb2NfXwogICAgICAgICBzZWxmLl9jbGVhbnVwcyA9IFtdCisgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBOb25lCiAKICAgICAgICAgIyBNYXAgdHlwZXMgdG8gY3VzdG9tIGFzc2VydEVxdWFsIGZ1bmN0aW9ucyB0aGF0IHdpbGwgY29tcGFyZQogICAgICAgICAjIGluc3RhbmNlcyBvZiBzYWlkIHR5cGUgaW4gbW9yZSBkZXRhaWwgdG8gZ2VuZXJhdGUgYSBtb3JlIHVzZWZ1bApAQCAtMzcwLDQ0ICs0NjcsODAgQEAKICAgICAgICAgcmV0dXJuICI8JXMgdGVzdE1ldGhvZD0lcz4iICUgXAogICAgICAgICAgICAgICAgKHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCiAKLSAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCByZWFzb24pOgorICAgIGRlZiBfYWRkU2tpcChzZWxmLCByZXN1bHQsIHRlc3RfY2FzZSwgcmVhc29uKToKICAgICAgICAgYWRkU2tpcCA9IGdldGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCiAgICAgICAgIGlmIGFkZFNraXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBhZGRTa2lwKHNlbGYsIHJlYXNvbikKKyAgICAgICAgICAgIGFkZFNraXAodGVzdF9jYXNlLCByZWFzb24pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRTa2lwIG1ldGhvZCwgc2tpcHMgbm90IHJlcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIDIpCi0gICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3ModGVzdF9jYXNlKQogCi0gICAgZGVmIF9leGVjdXRlVGVzdFBhcnQoc2VsZiwgZnVuY3Rpb24sIG91dGNvbWUsIGlzVGVzdD1GYWxzZSk6CisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgc3ViVGVzdChzZWxmLCBtc2c9Tm9uZSwgKipwYXJhbXMpOgorICAgICAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgZW5jbG9zZWQgYmxvY2sKKyAgICAgICAgb2YgY29kZSBpbiBhIHN1YnRlc3QgaWRlbnRpZmllZCBieSB0aGUgb3B0aW9uYWwgbWVzc2FnZSBhbmQKKyAgICAgICAga2V5d29yZCBwYXJhbWV0ZXJzLiAgQSBmYWlsdXJlIGluIHRoZSBzdWJ0ZXN0IG1hcmtzIHRoZSB0ZXN0CisgICAgICAgIGNhc2UgYXMgZmFpbGVkIGJ1dCByZXN1bWVzIGV4ZWN1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NlZAorICAgICAgICBibG9jaywgYWxsb3dpbmcgZnVydGhlciB0ZXN0IGNvZGUgdG8gYmUgZXhlY3V0ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHM6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhcmVudCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICBwYXJhbXNfbWFwID0gY29sbGVjdGlvbnMuQ2hhaW5NYXAocGFyYW1zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyYW1zX21hcCA9IHBhcmVudC5wYXJhbXMubmV3X2NoaWxkKHBhcmFtcykKKyAgICAgICAgc2VsZi5fc3VidGVzdCA9IF9TdWJUZXN0KHNlbGYsIG1zZywgcGFyYW1zX21hcCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuY3Rpb24oKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBvdXRjb21lLnNraXBwZWQgPSBzdHIoZSkKLSAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBpZiBpc1Rlc3Q6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcyA9IGV4Y19pbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKLSAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmU6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgaWYgaXNUZXN0OgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKGV4Y19pbmZvKQotICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIG91dGNvbWUuZmFpbHVyZXMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgd2l0aCBzZWxmLl9vdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZi5fc3VidGVzdCwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX291dGNvbWUucmVzdWx0CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lIGFuZCByZXN1bHQuZmFpbGZhc3Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9TaG91bGRTdG9wCisgICAgICAgICAgICBlbGlmIHNlbGYuX291dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIHRlc3QgaXMgZXhwZWN0aW5nIGEgZmFpbHVyZSwgd2UgcmVhbGx5IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAjIHN0b3Agbm93IGFuZCByZWdpc3RlciB0aGUgZXhwZWN0ZWQgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICByYWlzZSBfU2hvdWxkU3RvcAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3VidGVzdCA9IHBhcmVudAorCisgICAgZGVmIF9mZWVkRXJyb3JzVG9SZXN1bHQoc2VsZiwgcmVzdWx0LCBlcnJvcnMpOgorICAgICAgICBmb3IgdGVzdCwgZXhjX2luZm8gaW4gZXJyb3JzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0LCBfU3ViVGVzdCk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1YlRlc3QodGVzdC50ZXN0X2Nhc2UsIHRlc3QsIGV4Y19pbmZvKQorICAgICAgICAgICAgZWxpZiBleGNfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGV4Y19pbmZvWzBdLCBzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBleGNfaW5mbykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3IodGVzdCwgZXhjX2luZm8pCisKKyAgICBkZWYgX2FkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCByZXN1bHQsIGV4Y19pbmZvKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlID0gcmVzdWx0LmFkZEV4cGVjdGVkRmFpbHVyZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRFeHBlY3RlZEZhaWx1cmUgbWV0aG9kLCByZXBvcnRpbmcgYXMgcGFzc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIGV4Y19pbmZvKQorCisgICAgZGVmIF9hZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCByZXN1bHQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IHJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2VzcworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBhbiBhY3R1YWwgZXhjZXB0aW9uIGFuZCB0cmFjZWJhY2sgdG8gYWRkRmFpbHVyZSwKKyAgICAgICAgICAgICMgb3RoZXJ3aXNlIHRoZSBsZWdhY3kgcmVzdWx0IGNhbiBjaG9rZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MgZnJvbSBOb25lCisgICAgICAgICAgICBleGNlcHQgX1VuZXhwZWN0ZWRTdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZikKIAogICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0PU5vbmUpOgogICAgICAgICBvcmlnX3Jlc3VsdCA9IHJlc3VsdApAQCAtNDI2LDQ2ICs1NTksMzggQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBza2lwX3doeSA9IChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ2V0YXR0cih0ZXN0TWV0aG9kLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpKQotICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBza2lwX3doeSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2VsZiwgc2tpcF93aHkpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4cGVjdGluZ19mYWlsdXJlID0gZ2V0YXR0cih0ZXN0TWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdW5pdHRlc3RfZXhwZWN0aW5nX2ZhaWx1cmVfXyIsIEZhbHNlKQorICAgICAgICBvdXRjb21lID0gX091dGNvbWUocmVzdWx0KQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRjb21lID0gX091dGNvbWUoKQotICAgICAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBvdXRjb21lCisgICAgICAgICAgICBzZWxmLl9vdXRjb21lID0gb3V0Y29tZQogCi0gICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQoc2VsZi5zZXRVcCwgb3V0Y29tZSkKKyAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0VXAoKQogICAgICAgICAgICAgaWYgb3V0Y29tZS5zdWNjZXNzOgotICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGVUZXN0UGFydCh0ZXN0TWV0aG9kLCBvdXRjb21lLCBpc1Rlc3Q9VHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQoc2VsZi50ZWFyRG93biwgb3V0Y29tZSkKKyAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGluZ19mYWlsdXJlID0gZXhwZWN0aW5nX2ZhaWx1cmUKKyAgICAgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmLCBpc1Rlc3Q9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RNZXRob2QoKQorICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0aW5nX2ZhaWx1cmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRlYXJEb3duKCkKIAogICAgICAgICAgICAgc2VsZi5kb0NsZWFudXBzKCkKKyAgICAgICAgICAgIGZvciB0ZXN0LCByZWFzb24gaW4gb3V0Y29tZS5za2lwcGVkOgorICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCB0ZXN0LCByZWFzb24pCisgICAgICAgICAgICBzZWxmLl9mZWVkRXJyb3JzVG9SZXN1bHQocmVzdWx0LCBvdXRjb21lLmVycm9ycykKICAgICAgICAgICAgIGlmIG91dGNvbWUuc3VjY2VzczoKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBvdXRjb21lLnNraXBwZWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBvdXRjb21lLnNraXBwZWQpCi0gICAgICAgICAgICAgICAgZm9yIGV4Y19pbmZvIGluIG91dGNvbWUuZXJyb3JzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3Ioc2VsZiwgZXhjX2luZm8pCi0gICAgICAgICAgICAgICAgZm9yIGV4Y19pbmZvIGluIG91dGNvbWUuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIGV4Y19pbmZvKQotICAgICAgICAgICAgICAgIGlmIG91dGNvbWUudW5leHBlY3RlZFN1Y2Nlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzID0gZ2V0YXR0cihyZXN1bHQsICdhZGRVbmV4cGVjdGVkU3VjY2VzcycsIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGFkZFVuZXhwZWN0ZWRTdWNjZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgICAgICBpZiBleHBlY3RpbmdfZmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRFeHBlY3RlZEZhaWx1cmUocmVzdWx0LCBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZFVuZXhwZWN0ZWRTdWNjZXNzIG1ldGhvZCwgcmVwb3J0aW5nIGFzIGZhaWx1cmVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBvdXRjb21lLnVuZXhwZWN0ZWRTdWNjZXNzKQotCi0gICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZSA9IGdldGF0dHIocmVzdWx0LCAnYWRkRXhwZWN0ZWRGYWlsdXJlJywgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgYWRkRXhwZWN0ZWRGYWlsdXJlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkRXhwZWN0ZWRGYWlsdXJlIG1ldGhvZCwgcmVwb3J0aW5nIGFzIHBhc3NlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFVuZXhwZWN0ZWRTdWNjZXNzKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCkBAIC00NzQsMTQgKzU5OSwyMyBAQAogICAgICAgICAgICAgICAgIGlmIHN0b3BUZXN0UnVuIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBzdG9wVGVzdFJ1bigpCiAKKyAgICAgICAgICAgICMgZXhwbGljaXRseSBicmVhayByZWZlcmVuY2UgY3ljbGVzOgorICAgICAgICAgICAgIyBvdXRjb21lLmVycm9ycyAtPiBmcmFtZSAtPiBvdXRjb21lIC0+IG91dGNvbWUuZXJyb3JzCisgICAgICAgICAgICAjIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlIC0+IGZyYW1lIC0+IG91dGNvbWUgLT4gb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmNsZWFyKCkKKyAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlID0gTm9uZQorCisgICAgICAgICAgICAjIGNsZWFyIHRoZSBvdXRjb21lLCBubyBtb3JlIG5lZWRlZAorICAgICAgICAgICAgc2VsZi5fb3V0Y29tZSA9IE5vbmUKKwogICAgIGRlZiBkb0NsZWFudXBzKHNlbGYpOgogICAgICAgICAiIiJFeGVjdXRlIGFsbCBjbGVhbnVwIGZ1bmN0aW9ucy4gTm9ybWFsbHkgY2FsbGVkIGZvciB5b3UgYWZ0ZXIKICAgICAgICAgdGVhckRvd24uIiIiCi0gICAgICAgIG91dGNvbWUgPSBzZWxmLl9vdXRjb21lRm9yRG9DbGVhbnVwcyBvciBfT3V0Y29tZSgpCisgICAgICAgIG91dGNvbWUgPSBzZWxmLl9vdXRjb21lIG9yIF9PdXRjb21lKCkKICAgICAgICAgd2hpbGUgc2VsZi5fY2xlYW51cHM6CiAgICAgICAgICAgICBmdW5jdGlvbiwgYXJncywga3dhcmdzID0gc2VsZi5fY2xlYW51cHMucG9wKCkKLSAgICAgICAgICAgIHBhcnQgPSBsYW1iZGE6IGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGVUZXN0UGFydChwYXJ0LCBvdXRjb21lKQorICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZik6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgICAgICMgcmV0dXJuIHRoaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgICAgICMgZXZlbiB0aG91Z2ggd2Ugbm8gbG9uZ2VyIHVzIGl0IGludGVybmFsbHkKQEAgLTYwMCw2ICs3MzQsMjggQEAKICAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRXYXJuc0NvbnRleHQoZXhwZWN0ZWRfd2FybmluZywgc2VsZiwgY2FsbGFibGVfb2JqKQogICAgICAgICByZXR1cm4gY29udGV4dC5oYW5kbGUoJ2Fzc2VydFdhcm5zJywgY2FsbGFibGVfb2JqLCBhcmdzLCBrd2FyZ3MpCiAKKyAgICBkZWYgYXNzZXJ0TG9ncyhzZWxmLCBsb2dnZXI9Tm9uZSwgbGV2ZWw9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgdW5sZXNzIGEgbG9nIG1lc3NhZ2Ugb2YgbGV2ZWwgKmxldmVsKiBvciBoaWdoZXIgaXMgZW1pdHRlZAorICAgICAgICBvbiAqbG9nZ2VyX25hbWUqIG9yIGl0cyBjaGlsZHJlbi4gIElmIG9taXR0ZWQsICpsZXZlbCogZGVmYXVsdHMgdG8KKyAgICAgICAgSU5GTyBhbmQgKmxvZ2dlciogZGVmYXVsdHMgdG8gdGhlIHJvb3QgbG9nZ2VyLgorCisgICAgICAgIFRoaXMgbWV0aG9kIG11c3QgYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciwgYW5kIHdpbGwgeWllbGQKKyAgICAgICAgYSByZWNvcmRpbmcgb2JqZWN0IHdpdGggdHdvIGF0dHJpYnV0ZXM6IGBvdXRwdXRgIGFuZCBgcmVjb3Jkc2AuCisgICAgICAgIEF0IHRoZSBlbmQgb2YgdGhlIGNvbnRleHQgbWFuYWdlciwgdGhlIGBvdXRwdXRgIGF0dHJpYnV0ZSB3aWxsCisgICAgICAgIGJlIGEgbGlzdCBvZiB0aGUgbWF0Y2hpbmcgZm9ybWF0dGVkIGxvZyBtZXNzYWdlcyBhbmQgdGhlCisgICAgICAgIGByZWNvcmRzYCBhdHRyaWJ1dGUgd2lsbCBiZSBhIGxpc3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcgTG9nUmVjb3JkCisgICAgICAgIG9iamVjdHMuCisKKyAgICAgICAgRXhhbXBsZTo6CisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdmb28nLCBsZXZlbD0nSU5GTycpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKS5pbmZvKCdmaXJzdCBtZXNzYWdlJykKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vLmJhcicpLmVycm9yKCdzZWNvbmQgbWVzc2FnZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWydJTkZPOmZvbzpmaXJzdCBtZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfQXNzZXJ0TG9nc0NvbnRleHQoc2VsZiwgbG9nZ2VyLCBsZXZlbCkKKwogICAgIGRlZiBfZ2V0QXNzZXJ0RXF1YWxpdHlGdW5jKHNlbGYsIGZpcnN0LCBzZWNvbmQpOgogICAgICAgICAiIiJHZXQgYSBkZXRhaWxlZCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB0aGUgdHlwZXMgb2YgdGhlIHR3byBhcmdzLgogCkBAIC02MjksNyArNzg1LDcgQEAKICAgICBkZWYgX2Jhc2VBc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6CiAgICAgICAgICIiIlRoZSBkZWZhdWx0IGFzc2VydEVxdWFsIGltcGxlbWVudGF0aW9uLCBub3QgdHlwZSBzcGVjaWZpYy4iIiIKICAgICAgICAgaWYgbm90IGZpcnN0ID09IHNlY29uZDoKLSAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIChzYWZlX3JlcHIoZmlyc3QpLCBzYWZlX3JlcHIoc2Vjb25kKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGZpcnN0LCBzZWNvbmQpCiAgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCiAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQogCkBAIC03NjQsMTQgKzkyMCw5IEBACiAgICAgICAgICAgICBpZiBzZXExID09IHNlcTI6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgICAgIHNlcTFfcmVwciA9IHNhZmVfcmVwcihzZXExKQotICAgICAgICAgICAgc2VxMl9yZXByID0gc2FmZV9yZXByKHNlcTIpCi0gICAgICAgICAgICBpZiBsZW4oc2VxMV9yZXByKSA+IDMwOgotICAgICAgICAgICAgICAgIHNlcTFfcmVwciA9IHNlcTFfcmVwcls6MzBdICsgJy4uLicKLSAgICAgICAgICAgIGlmIGxlbihzZXEyX3JlcHIpID4gMzA6Ci0gICAgICAgICAgICAgICAgc2VxMl9yZXByID0gc2VxMl9yZXByWzozMF0gKyAnLi4uJwotICAgICAgICAgICAgZWxlbWVudHMgPSAoc2VxX3R5cGVfbmFtZS5jYXBpdGFsaXplKCksIHNlcTFfcmVwciwgc2VxMl9yZXByKQotICAgICAgICAgICAgZGlmZmVyaW5nID0gJyVzcyBkaWZmZXI6ICVzICE9ICVzXG4nICUgZWxlbWVudHMKKyAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCkgKworICAgICAgICAgICAgICAgICAgICBfY29tbW9uX3Nob3J0ZW5fcmVwcihzZXExLCBzZXEyKSkKIAogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbjEsIGxlbjIpKToKICAgICAgICAgICAgICAgICB0cnk6CkBAIC05MjksNyArMTA4MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkMiwgZGljdCwgJ1NlY29uZCBhcmd1bWVudCBpcyBub3QgYSBkaWN0aW9uYXJ5JykKIAogICAgICAgICBpZiBkMSAhPSBkMjoKLSAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIChzYWZlX3JlcHIoZDEsIFRydWUpLCBzYWZlX3JlcHIoZDIsIFRydWUpKQorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgX2NvbW1vbl9zaG9ydGVuX3JlcHIoZDEsIGQyKQogICAgICAgICAgICAgZGlmZiA9ICgnXG4nICsgJ1xuJy5qb2luKGRpZmZsaWIubmRpZmYoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChkMSkuc3BsaXRsaW5lcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDIpLnNwbGl0bGluZXMoKSkpKQpAQCAtMTAxMyw4ICsxMTY0LDcgQEAKICAgICAgICAgICAgIGlmIGxlbihmaXJzdGxpbmVzKSA9PSAxIGFuZCBmaXJzdC5zdHJpcCgnXHJcbicpID09IGZpcnN0OgogICAgICAgICAgICAgICAgIGZpcnN0bGluZXMgPSBbZmlyc3QgKyAnXG4nXQogICAgICAgICAgICAgICAgIHNlY29uZGxpbmVzID0gW3NlY29uZCArICdcbiddCi0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0LCBUcnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoc2Vjb25kLCBUcnVlKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGZpcnN0LCBzZWNvbmQpCiAgICAgICAgICAgICBkaWZmID0gJ1xuJyArICcnLmpvaW4oZGlmZmxpYi5uZGlmZihmaXJzdGxpbmVzLCBzZWNvbmRsaW5lcykpCiAgICAgICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZShzdGFuZGFyZE1zZywgZGlmZikKICAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQpAQCAtMTIxMiwzICsxMzYyLDM5IEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3JpcHRpb24KICAgICAgICAgZG9jID0gc2VsZi5fdGVzdEZ1bmMuX19kb2NfXwogICAgICAgICByZXR1cm4gZG9jIGFuZCBkb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKSBvciBOb25lCisKKworY2xhc3MgX1N1YlRlc3QoVGVzdENhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSwgbWVzc2FnZSwgcGFyYW1zKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX21lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisgICAgICAgIHNlbGYucGFyYW1zID0gcGFyYW1zCisgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiA9IHRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3VidGVzdHMgY2Fubm90IGJlIHJ1biBkaXJlY3RseSIpCisKKyAgICBkZWYgX3N1YkRlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIGlmIHNlbGYuX21lc3NhZ2U6CisgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoIlt7fV0iLmZvcm1hdChzZWxmLl9tZXNzYWdlKSkKKyAgICAgICAgaWYgc2VsZi5wYXJhbXM6CisgICAgICAgICAgICBwYXJhbXNfZGVzYyA9ICcsICcuam9pbigKKyAgICAgICAgICAgICAgICAie309eyFyfSIuZm9ybWF0KGssIHYpCisgICAgICAgICAgICAgICAgZm9yIChrLCB2KSBpbiBzb3J0ZWQoc2VsZi5wYXJhbXMuaXRlbXMoKSkpCisgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoIih7fSkiLmZvcm1hdChwYXJhbXNfZGVzYykpCisgICAgICAgIHJldHVybiAiICIuam9pbihwYXJ0cykgb3IgJyg8c3VidGVzdD4pJworCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9IHt9Ii5mb3JtYXQoc2VsZi50ZXN0X2Nhc2UuaWQoKSwgc2VsZi5fc3ViRGVzY3JpcHRpb24oKSkKKworICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHN1YnRlc3QsIG9yIE5vbmUgaWYgbm8KKyAgICAgICAgZGVzY3JpcHRpb24gaGFzIGJlZW4gcHJvdmlkZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi50ZXN0X2Nhc2Uuc2hvcnREZXNjcmlwdGlvbigpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSB7fSIuZm9ybWF0KHNlbGYudGVzdF9jYXNlLCBzZWxmLl9zdWJEZXNjcmlwdGlvbigpKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L2xvYWRlci5weSBiL0xpYi91bml0dGVzdC9sb2FkZXIucHkKaW5kZXggOWFiMjZjMS4uODA4YzUwZSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L2xvYWRlci5weQorKysgYi9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CkBAIC0zNCw2ICszNCwxNCBAQAogICAgIFRlc3RDbGFzcyA9IHR5cGUoY2xhc3NuYW1lLCAoY2FzZS5UZXN0Q2FzZSwpLCBhdHRycykKICAgICByZXR1cm4gc3VpdGVDbGFzcygoVGVzdENsYXNzKG1ldGhvZG5hbWUpLCkpCiAKK2RlZiBfbWFrZV9za2lwcGVkX3Rlc3QobWV0aG9kbmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKToKKyAgICBAY2FzZS5za2lwKHN0cihleGNlcHRpb24pKQorICAgIGRlZiB0ZXN0U2tpcHBlZChzZWxmKToKKyAgICAgICAgcGFzcworICAgIGF0dHJzID0ge21ldGhvZG5hbWU6IHRlc3RTa2lwcGVkfQorICAgIFRlc3RDbGFzcyA9IHR5cGUoIk1vZHVsZVNraXBwZWQiLCAoY2FzZS5UZXN0Q2FzZSwpLCBhdHRycykKKyAgICByZXR1cm4gc3VpdGVDbGFzcygoVGVzdENsYXNzKG1ldGhvZG5hbWUpLCkpCisKIGRlZiBfanl0aG9uX2F3YXJlX3NwbGl0ZXh0KHBhdGgpOgogICAgIGlmIHBhdGgubG93ZXIoKS5lbmRzd2l0aCgnJHB5LmNsYXNzJyk6CiAgICAgICAgIHJldHVybiBwYXRoWzotOV0KQEAgLTUzLDggKzYxLDkgQEAKICAgICBkZWYgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgogICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRlc3RDYXNlQ2xhc3MiIiIKICAgICAgICAgaWYgaXNzdWJjbGFzcyh0ZXN0Q2FzZUNsYXNzLCBzdWl0ZS5UZXN0U3VpdGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUZXN0IGNhc2VzIHNob3VsZCBub3QgYmUgZGVyaXZlZCBmcm9tIFRlc3RTdWl0ZS4iIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBNYXliZSB5b3UgbWVhbnQgdG8gZGVyaXZlIGZyb20gVGVzdENhc2U/IikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCBjYXNlcyBzaG91bGQgbm90IGJlIGRlcml2ZWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RTdWl0ZS4gTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdENhc2U/IikKICAgICAgICAgdGVzdENhc2VOYW1lcyA9IHNlbGYuZ2V0VGVzdENhc2VOYW1lcyh0ZXN0Q2FzZUNsYXNzKQogICAgICAgICBpZiBub3QgdGVzdENhc2VOYW1lcyBhbmQgaGFzYXR0cih0ZXN0Q2FzZUNsYXNzLCAncnVuVGVzdCcpOgogICAgICAgICAgICAgdGVzdENhc2VOYW1lcyA9IFsncnVuVGVzdCddCkBAIC0xNjksNiArMTc4LDkgQEAKICAgICAgICAgVGhlIHBhdHRlcm4gaXMgZGVsaWJlcmF0ZWx5IG5vdCBzdG9yZWQgYXMgYSBsb2FkZXIgYXR0cmlidXRlIHNvIHRoYXQKICAgICAgICAgcGFja2FnZXMgY2FuIGNvbnRpbnVlIGRpc2NvdmVyeSB0aGVtc2VsdmVzLiB0b3BfbGV2ZWxfZGlyIGlzIHN0b3JlZCBzbwogICAgICAgICBsb2FkX3Rlc3RzIGRvZXMgbm90IG5lZWQgdG8gcGFzcyB0aGlzIGFyZ3VtZW50IGluIHRvIGxvYWRlci5kaXNjb3ZlcigpLgorCisgICAgICAgIFBhdGhzIGFyZSBzb3J0ZWQgYmVmb3JlIGJlaW5nIGltcG9ydGVkIHRvIGVuc3VyZSByZXByb2R1Y2libGUgZXhlY3V0aW9uCisgICAgICAgIG9yZGVyIGV2ZW4gb24gZmlsZXN5c3RlbXMgd2l0aCBub24tYWxwaGFiZXRpY2FsIG9yZGVyaW5nIGxpa2UgZXh0My80LgogICAgICAgICAiIiIKICAgICAgICAgc2V0X2ltcGxpY2l0X3RvcCA9IEZhbHNlCiAgICAgICAgIGlmIHRvcF9sZXZlbF9kaXIgaXMgTm9uZSBhbmQgc2VsZi5fdG9wX2xldmVsX2RpciBpcyBub3QgTm9uZToKQEAgLTE4OSw2ICsyMDEsOCBAQAogICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gdG9wX2xldmVsX2RpcgogCiAgICAgICAgIGlzX25vdF9pbXBvcnRhYmxlID0gRmFsc2UKKyAgICAgICAgaXNfbmFtZXNwYWNlID0gRmFsc2UKKyAgICAgICAgdGVzdHMgPSBbXQogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpKToKICAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpCiAgICAgICAgICAgICBpZiBzdGFydF9kaXIgIT0gdG9wX2xldmVsX2RpcjoKQEAgLTIwMiwxNSArMjE2LDUyIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBzeXMubW9kdWxlc1tzdGFydF9kaXJdCiAgICAgICAgICAgICAgICAgdG9wX3BhcnQgPSBzdGFydF9kaXIuc3BsaXQoJy4nKVswXQotICAgICAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoKHRoZV9tb2R1bGUuX19maWxlX18pKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIGxvb2sgZm9yIG5hbWVzcGFjZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjID0gdGhlX21vZHVsZS5fX3NwZWNfXworICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNwZWMgYW5kIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX25hbWVzcGFjZSA9IFRydWUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHRoZV9tb2R1bGUuX19wYXRoX186CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3Qgc2V0X2ltcGxpY2l0X3RvcCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwYXRoLnN0YXJ0c3dpdGgodG9wX2xldmVsX2RpcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoLnNwbGl0KHRoZV9tb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoIi4iLCBvcy5wYXRoLnNlcCkpWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy5leHRlbmQoc2VsZi5fZmluZF90ZXN0cyhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9VHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgdGhlX21vZHVsZS5fX25hbWVfXyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGJ1aWx0aW4gbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0NhbiBub3QgdXNlIGJ1aWx0aW4gbW9kdWxlcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzIGRvdHRlZCBtb2R1bGUgbmFtZXMnKSBmcm9tIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZG9uXCd0IGtub3cgaG93IHRvIGRpc2NvdmVyIGZyb20geyFyfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHRoZV9tb2R1bGUpKSBmcm9tIE5vbmUKKwogICAgICAgICAgICAgICAgIGlmIHNldF9pbXBsaWNpdF90b3A6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSBzZWxmLl9nZXRfZGlyZWN0b3J5X2NvbnRhaW5pbmdfbW9kdWxlKHRvcF9wYXJ0KQotICAgICAgICAgICAgICAgICAgICBzeXMucGF0aC5yZW1vdmUodG9wX2xldmVsX2RpcikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzX25hbWVzcGFjZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXRfZGlyZWN0b3J5X2NvbnRhaW5pbmdfbW9kdWxlKHRvcF9wYXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGF0aC5yZW1vdmUodG9wX2xldmVsX2RpcikKIAogICAgICAgICBpZiBpc19ub3RfaW1wb3J0YWJsZToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdTdGFydCBkaXJlY3RvcnkgaXMgbm90IGltcG9ydGFibGU6ICVyJyAlIHN0YXJ0X2RpcikKIAotICAgICAgICB0ZXN0cyA9IGxpc3Qoc2VsZi5fZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pKQorICAgICAgICBpZiBub3QgaXNfbmFtZXNwYWNlOgorICAgICAgICAgICAgdGVzdHMgPSBsaXN0KHNlbGYuX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyh0ZXN0cykKIAogICAgIGRlZiBfZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6CkBAIC0yNDMsOSArMjk0LDkgQEAKICAgICAgICAgIyBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byB1c2UgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgc3RyYXRlZ3kKICAgICAgICAgcmV0dXJuIGZubWF0Y2gocGF0aCwgcGF0dGVybikKIAotICAgIGRlZiBfZmluZF90ZXN0cyhzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgIGRlZiBfZmluZF90ZXN0cyhzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1GYWxzZSk6CiAgICAgICAgICIiIlVzZWQgYnkgZGlzY292ZXJ5LiBZaWVsZHMgdGVzdCBzdWl0ZXMgaXQgbG9hZHMuIiIiCi0gICAgICAgIHBhdGhzID0gb3MubGlzdGRpcihzdGFydF9kaXIpCisgICAgICAgIHBhdGhzID0gc29ydGVkKG9zLmxpc3RkaXIoc3RhcnRfZGlyKSkKIAogICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzdGFydF9kaXIsIHBhdGgpCkBAIC0yNTksNiArMzEwLDggQEAKICAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5fZ2V0X25hbWVfZnJvbV9wYXRoKGZ1bGxfcGF0aCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IGNhc2UuU2tpcFRlc3QgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgX21ha2Vfc2tpcHBlZF90ZXN0KG5hbWUsIGUsIHNlbGYuc3VpdGVDbGFzcykKICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX2ZhaWxlZF9pbXBvcnRfdGVzdChuYW1lLCBzZWxmLnN1aXRlQ2xhc3MpCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTI3NCw3ICszMjcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnICUgKG1vZF9uYW1lLCBtb2R1bGVfZGlyLCBleHBlY3RlZF9kaXIpKQogICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZ1bGxfcGF0aCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmdWxsX3BhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgICAgICBpZiAobm90IG5hbWVzcGFjZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmdWxsX3BhdGgsICdfX2luaXRfXy5weScpKSk6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgICAgICBsb2FkX3Rlc3RzID0gTm9uZQpAQCAtMjkxLDggKzM0NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3RzIGxvYWRlZCBmcm9tIHBhY2thZ2UgZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgdGVzdHMKICAgICAgICAgICAgICAgICAgICAgIyByZWN1cnNlIGludG8gdGhlIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fZmluZF90ZXN0cyhmdWxsX3BhdGgsIHBhdHRlcm4pOgotICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgdGVzdAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPW5hbWVzcGFjZSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBsb2FkX3Rlc3RzKHNlbGYsIHRlc3RzLCBwYXR0ZXJuKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21haW4ucHkgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQppbmRleCBlYWQ2NDkzLi4xODBkZjg2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbWFpbi5weQorKysgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlVuaXR0ZXN0IG1haW4gcHJvZ3JhbSIiIgogCiBpbXBvcnQgc3lzCi1pbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IG9zCiAKIGZyb20gLiBpbXBvcnQgbG9hZGVyLCBydW5uZXIKQEAgLTksNTMgKzksMjAgQEAKIAogX191bml0dGVzdCA9IFRydWUKIAotRkFJTEZBU1QgICAgID0gIiAgLWYsIC0tZmFpbGZhc3QgICBTdG9wIG9uIGZpcnN0IGZhaWx1cmVcbiIKLUNBVENIQlJFQUsgICA9ICIgIC1jLCAtLWNhdGNoICAgICAgQ2F0Y2ggY29udHJvbC1DIGFuZCBkaXNwbGF5IHJlc3VsdHNcbiIKLUJVRkZFUk9VVFBVVCA9ICIgIC1iLCAtLWJ1ZmZlciAgICAgQnVmZmVyIHN0ZG91dCBhbmQgc3RkZXJyIGR1cmluZyB0ZXN0IHJ1bnNcbiIKLQotVVNBR0VfQVNfTUFJTiA9ICIiIlwKLVVzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0c10KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgICAgICBTaG93IHRoaXMgbWVzc2FnZQotICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0Ci0gIC1xLCAtLXF1aWV0ICAgICAgTWluaW1hbCBvdXRwdXQKLSUoZmFpbGZhc3QpcyUoY2F0Y2hicmVhaylzJShidWZmZXIpcworTUFJTl9FWEFNUExFUyA9ICIiIlwKIEV4YW1wbGVzOgotICAlKHByb2dOYW1lKXMgdGVzdF9tb2R1bGUgICAgICAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIHRlc3RfbW9kdWxlCi0gICUocHJvZ05hbWUpcyBtb2R1bGUuVGVzdENsYXNzICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gbW9kdWxlLlRlc3RDbGFzcwotICAlKHByb2dOYW1lKXMgbW9kdWxlLkNsYXNzLnRlc3RfbWV0aG9kICAtIHJ1biBzcGVjaWZpZWQgdGVzdCBtZXRob2QKLQotW3Rlc3RzXSBjYW4gYmUgYSBsaXN0IG9mIGFueSBudW1iZXIgb2YgdGVzdCBtb2R1bGVzLCBjbGFzc2VzIGFuZCB0ZXN0Ci1tZXRob2RzLgotCi1BbHRlcm5hdGl2ZSBVc2FnZTogJShwcm9nTmFtZSlzIGRpc2NvdmVyIFtvcHRpb25zXQotCi1PcHRpb25zOgotICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMgIC1zIGRpcmVjdG9yeSAgICAgRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpCi0gIC1wIHBhdHRlcm4gICAgICAgUGF0dGVybiB0byBtYXRjaCB0ZXN0IGZpbGVzICgndGVzdCoucHknIGRlZmF1bHQpCi0gIC10IGRpcmVjdG9yeSAgICAgVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0IHRvCi0gICAgICAgICAgICAgICAgICAgc3RhcnQgZGlyZWN0b3J5KQotCi1Gb3IgdGVzdCBkaXNjb3ZlcnkgYWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlIGltcG9ydGFibGUgZnJvbSB0aGUgdG9wCi1sZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuCisgICUocHJvZylzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQorICAlKHByb2cpcyBtb2R1bGUuVGVzdENsYXNzICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gbW9kdWxlLlRlc3RDbGFzcworICAlKHByb2cpcyBtb2R1bGUuQ2xhc3MudGVzdF9tZXRob2QgIC0gcnVuIHNwZWNpZmllZCB0ZXN0IG1ldGhvZAogIiIiCiAKLVVTQUdFX0ZST01fTU9EVUxFID0gIiIiXAotVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RdIFsuLi5dCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK01PRFVMRV9FWEFNUExFUyA9ICIiIlwKIEV4YW1wbGVzOgotICAlKHByb2dOYW1lKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKLSAgJShwcm9nTmFtZSlzIE15VGVzdFN1aXRlICAgICAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgICAgIC0gcnVuIE15VGVzdENhc2UudGVzdFNvbWV0aGluZwotICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKKyAgJShwcm9nKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHJ1biBkZWZhdWx0IHNldCBvZiB0ZXN0cworICAlKHByb2cpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKKyAgJShwcm9nKXMgTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKKyAgJShwcm9nKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAtIHJ1biBhbGwgJ3Rlc3QqJyB0ZXN0IG1ldGhvZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKICIiIgogCiBkZWYgX2NvbnZlcnRfbmFtZShuYW1lKToKQEAgLTgyLDEwICs0OSwxMSBAQAogICAgICIiIkEgY29tbWFuZC1saW5lIHByb2dyYW0gdGhhdCBydW5zIGEgc2V0IG9mIHRlc3RzOyB0aGlzIGlzIHByaW1hcmlseQogICAgICAgIGZvciBtYWtpbmcgdGVzdCBtb2R1bGVzIGNvbnZlbmllbnRseSBleGVjdXRhYmxlLgogICAgICIiIgotICAgIFVTQUdFID0gVVNBR0VfRlJPTV9NT0RVTEUKLQogICAgICMgZGVmYXVsdHMgZm9yIHRlc3RpbmcKKyAgICBtb2R1bGU9Tm9uZQorICAgIHZlcmJvc2l0eSA9IDEKICAgICBmYWlsZmFzdCA9IGNhdGNoYnJlYWsgPSBidWZmZXIgPSBwcm9nTmFtZSA9IHdhcm5pbmdzID0gTm9uZQorICAgIF9kaXNjb3ZlcnlfcGFyc2VyID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZT0nX19tYWluX18nLCBkZWZhdWx0VGVzdD1Ob25lLCBhcmd2PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXI9Tm9uZSwgdGVzdExvYWRlcj1sb2FkZXIuZGVmYXVsdFRlc3RMb2FkZXIsCkBAIC0xMjcsNDQgKzk1LDQ3IEBACiAgICAgZGVmIHVzYWdlRXhpdChzZWxmLCBtc2c9Tm9uZSk6CiAgICAgICAgIGlmIG1zZzoKICAgICAgICAgICAgIHByaW50KG1zZykKLSAgICAgICAgdXNhZ2UgPSB7J3Byb2dOYW1lJzogc2VsZi5wcm9nTmFtZSwgJ2NhdGNoYnJlYWsnOiAnJywgJ2ZhaWxmYXN0JzogJycsCi0gICAgICAgICAgICAgICAgICdidWZmZXInOiAnJ30KLSAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCAhPSBGYWxzZToKLSAgICAgICAgICAgIHVzYWdlWydmYWlsZmFzdCddID0gRkFJTEZBU1QKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNlOgotICAgICAgICAgICAgdXNhZ2VbJ2NhdGNoYnJlYWsnXSA9IENBVENIQlJFQUsKLSAgICAgICAgaWYgc2VsZi5idWZmZXIgIT0gRmFsc2U6Ci0gICAgICAgICAgICB1c2FnZVsnYnVmZmVyJ10gPSBCVUZGRVJPVVRQVVQKLSAgICAgICAgcHJpbnQoc2VsZi5VU0FHRSAlIHVzYWdlKQorICAgICAgICBpZiBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgIHNlbGYuX3ByaW50X2hlbHAoKQogICAgICAgICBzeXMuZXhpdCgyKQogCisgICAgZGVmIF9wcmludF9oZWxwKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHNlbGYubW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludChzZWxmLl9tYWluX3BhcnNlci5mb3JtYXRfaGVscCgpKQorICAgICAgICAgICAgcHJpbnQoTUFJTl9FWEFNUExFUyAlIHsncHJvZyc6IHNlbGYucHJvZ05hbWV9KQorICAgICAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KHNlbGYuX21haW5fcGFyc2VyLmZvcm1hdF9oZWxwKCkpCisgICAgICAgICAgICBwcmludChNT0RVTEVfRVhBTVBMRVMgJSB7J3Byb2cnOiBzZWxmLnByb2dOYW1lfSkKKwogICAgIGRlZiBwYXJzZUFyZ3Moc2VsZiwgYXJndik6Ci0gICAgICAgIGlmICgobGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5sb3dlcigpID09ICdkaXNjb3ZlcicpIG9yCi0gICAgICAgICAgICAobGVuKGFyZ3YpID09IDEgYW5kIHNlbGYubW9kdWxlIGlzIE5vbmUpKToKLSAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzI6XSkKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgIGlmIHNlbGYubW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBsZW4oYXJndikgPiAxIGFuZCBhcmd2WzFdLmxvd2VyKCkgPT0gJ2Rpc2NvdmVyJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsyOl0pCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLl9tYWluX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdLCBzZWxmKQorICAgICAgICAgICAgaWYgbm90IHNlbGYudGVzdHM6CisgICAgICAgICAgICAgICAgIyB0aGlzIGFsbG93cyAicHl0aG9uIC1tIHVuaXR0ZXN0IC12IiB0byBzdGlsbCB3b3JrIGZvcgorICAgICAgICAgICAgICAgICMgdGVzdCBkaXNjb3ZlcnkuCisgICAgICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KFtdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2WzE6XSwgc2VsZikKIAotICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRPcHRQYXJzZXIoKQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCi0gICAgICAgIHNlbGYuX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhvcHRpb25zKQotCi0gICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLm1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgIyB0aGlzIGFsbG93cyAicHl0aG9uIC1tIHVuaXR0ZXN0IC12IiB0byBzdGlsbCB3b3JrIGZvcgotICAgICAgICAgICAgIyB0ZXN0IGRpc2NvdmVyeS4gVGhpcyBtZWFucyAtYyAvIC1iIC8gLXYgLyAtZiBvcHRpb25zIHdpbGwKLSAgICAgICAgICAgICMgYmUgaGFuZGxlZCB0d2ljZSwgd2hpY2ggaXMgaGFybWxlc3MgYnV0IG5vdCBpZGVhbC4KLSAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzE6XSkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLmRlZmF1bHRUZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICAjIGNyZWF0ZVRlc3RzIHdpbGwgbG9hZCB0ZXN0cyBmcm9tIHNlbGYubW9kdWxlCi0gICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKLSAgICAgICAgZWxpZiBsZW4oYXJncykgPiAwOgotICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBfY29udmVydF9uYW1lcyhhcmdzKQorICAgICAgICBpZiBzZWxmLnRlc3RzOgorICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBfY29udmVydF9uYW1lcyhzZWxmLnRlc3RzKQogICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgICAgICAgICAjIHRvIHN1cHBvcnQgcHl0aG9uIC1tIHVuaXR0ZXN0IC4uLgogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlID0gTm9uZQotICAgICAgICBlbHNlOgorICAgICAgICBlbGlmIHNlbGYuZGVmYXVsdFRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgICMgY3JlYXRlVGVzdHMgd2lsbCBsb2FkIHRlc3RzIGZyb20gc2VsZi5tb2R1bGUKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gTm9uZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0VGVzdCwgc3RyKToKICAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gKHNlbGYuZGVmYXVsdFRlc3QsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBsaXN0KHNlbGYuZGVmYXVsdFRlc3QpCiAgICAgICAgIHNlbGYuY3JlYXRlVGVzdHMoKQogCiAgICAgZGVmIGNyZWF0ZVRlc3RzKHNlbGYpOgpAQCAtMTc0LDc2ICsxNDUsODQgQEAKICAgICAgICAgICAgIHNlbGYudGVzdCA9IHNlbGYudGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZi50ZXN0TmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlKQogCi0gICAgZGVmIF9nZXRPcHRQYXJzZXIoc2VsZik6Ci0gICAgICAgIGltcG9ydCBvcHRwYXJzZQotICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQotICAgICAgICBwYXJzZXIucHJvZyA9IHNlbGYucHJvZ05hbWUKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcScsICctLXF1aWV0JywgZGVzdD0ncXVpZXQnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWlldCBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGRlZiBfaW5pdEFyZ1BhcnNlcnMoc2VsZik6CisgICAgICAgIHBhcmVudF9wYXJzZXIgPSBzZWxmLl9nZXRQYXJlbnRBcmdQYXJzZXIoKQorICAgICAgICBzZWxmLl9tYWluX3BhcnNlciA9IHNlbGYuX2dldE1haW5BcmdQYXJzZXIocGFyZW50X3BhcnNlcikKKyAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciA9IHNlbGYuX2dldERpc2NvdmVyeUFyZ1BhcnNlcihwYXJlbnRfcGFyc2VyKQogCi0gICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6Ci0gICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWYnLCAnLS1mYWlsZmFzdCcsIGRlc3Q9J2ZhaWxmYXN0JywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgIT0gRmFsc2U6Ci0gICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jYXRjaCcsIGRlc3Q9J2NhdGNoYnJlYWsnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2F0Y2ggY3RybC1DIGFuZCBkaXNwbGF5IHJlc3VsdHMgc28gZmFyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYnVmZmVyJywgZGVzdD0nYnVmZmVyJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBkZWYgX2dldFBhcmVudEFyZ1BhcnNlcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgZGVzdD0ndmVyYm9zaXR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBkZXN0PSd2ZXJib3NpdHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1F1aWV0IG91dHB1dCcpCisKKyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mYWlsZmFzdCcsIGRlc3Q9J2ZhaWxmYXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3RvcCBvbiBmaXJzdCBmYWlsIG9yIGVycm9yJykKKyAgICAgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1jJywgJy0tY2F0Y2gnLCBkZXN0PSdjYXRjaGJyZWFrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2F0Y2ggY3RybC1DIGFuZCBkaXNwbGF5IHJlc3VsdHMgc28gZmFyJykKKyAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1ZmZlcicsIGRlc3Q9J2J1ZmZlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdHMnKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBGYWxzZQorCiAgICAgICAgIHJldHVybiBwYXJzZXIKIAotICAgIGRlZiBfc2V0QXR0cmlidXRlc0Zyb21PcHRpb25zKHNlbGYsIG9wdGlvbnMpOgotICAgICAgICAjIG9ubHkgc2V0IG9wdGlvbnMgZnJvbSB0aGUgcGFyc2luZyBoZXJlCi0gICAgICAgICMgaWYgdGhleSB3ZXJlbid0IHNldCBleHBsaWNpdGx5IGluIHRoZSBjb25zdHJ1Y3RvcgotICAgICAgICBpZiBzZWxmLmZhaWxmYXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gb3B0aW9ucy5mYWlsZmFzdAotICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IG9wdGlvbnMuY2F0Y2hicmVhawotICAgICAgICBpZiBzZWxmLmJ1ZmZlciBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcgorICAgIGRlZiBfZ2V0TWFpbkFyZ1BhcnNlcihzZWxmLCBwYXJlbnQpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICBwYXJzZXIucHJvZyA9IHNlbGYucHJvZ05hbWUKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAgPSBzZWxmLl9wcmludF9oZWxwCiAKLSAgICAgICAgaWYgb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAyCi0gICAgICAgIGVsaWYgb3B0aW9ucy5xdWlldDoKLSAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMAorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd0ZXN0cycsIG5hcmdzPScqJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhIGxpc3Qgb2YgYW55IG51bWJlciBvZiB0ZXN0IG1vZHVsZXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NlcyBhbmQgdGVzdCBtZXRob2RzLicpCiAKLSAgICBkZWYgX2FkZERpc2NvdmVyeU9wdGlvbnMoc2VsZiwgcGFyc2VyKToKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLCBkZWZhdWx0PScuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpIikKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLCBkZWZhdWx0PSd0ZXN0Ki5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMgKCd0ZXN0Ki5weScgZGVmYXVsdCkiKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvIHN0YXJ0IGRpcmVjdG9yeSknKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBkZWYgX2dldERpc2NvdmVyeUFyZ1BhcnNlcihzZWxmLCBwYXJlbnQpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICBwYXJzZXIucHJvZyA9ICclcyBkaXNjb3ZlcicgJSBzZWxmLnByb2dOYW1lCisgICAgICAgIHBhcnNlci5lcGlsb2cgPSAoJ0ZvciB0ZXN0IGRpc2NvdmVyeSBhbGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAncHJvamVjdC4nKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMgKCd0ZXN0Ki5weScgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsICctLXRvcC1sZXZlbC1kaXJlY3RvcnknLCBkZXN0PSd0b3AnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdHMgdG8gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0IGRpcmVjdG9yeSknKQorICAgICAgICBmb3IgYXJnIGluICgnc3RhcnQnLCAncGF0dGVybicsICd0b3AnKToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoYXJnLCBuYXJncz0nPycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisKKyAgICAgICAgcmV0dXJuIHBhcnNlcgogCiAgICAgZGVmIF9kb19kaXNjb3Zlcnkoc2VsZiwgYXJndiwgTG9hZGVyPU5vbmUpOgotICAgICAgICBpZiBMb2FkZXIgaXMgTm9uZToKLSAgICAgICAgICAgIExvYWRlciA9IGxhbWJkYTogc2VsZi50ZXN0TG9hZGVyCisgICAgICAgIHNlbGYuc3RhcnQgPSAnLicKKyAgICAgICAgc2VsZi5wYXR0ZXJuID0gJ3Rlc3QqLnB5JworICAgICAgICBzZWxmLnRvcCA9IE5vbmUKKyAgICAgICAgaWYgYXJndiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgaGFuZGxlIGNvbW1hbmQgbGluZSBhcmdzIGZvciB0ZXN0IGRpc2NvdmVyeQorICAgICAgICAgICAgaWYgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgZm9yIHRlc3RpbmcKKyAgICAgICAgICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgICAgICBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyLnBhcnNlX2FyZ3MoYXJndiwgc2VsZikKIAotICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKLSAgICAgICAgc2VsZi5wcm9nTmFtZSA9ICclcyBkaXNjb3ZlcicgJSBzZWxmLnByb2dOYW1lCi0gICAgICAgIHBhcnNlciA9IHNlbGYuX2dldE9wdFBhcnNlcigpCi0gICAgICAgIHNlbGYuX2FkZERpc2NvdmVyeU9wdGlvbnMocGFyc2VyKQotCi0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQotICAgICAgICBpZiBsZW4oYXJncykgPiAzOgotICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQotCi0gICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB6aXAoKCdzdGFydCcsICdwYXR0ZXJuJywgJ3RvcCcpLCBhcmdzKToKLSAgICAgICAgICAgIHNldGF0dHIob3B0aW9ucywgbmFtZSwgdmFsdWUpCi0KLSAgICAgICAgc2VsZi5fc2V0QXR0cmlidXRlc0Zyb21PcHRpb25zKG9wdGlvbnMpCi0KLSAgICAgICAgc3RhcnRfZGlyID0gb3B0aW9ucy5zdGFydAotICAgICAgICBwYXR0ZXJuID0gb3B0aW9ucy5wYXR0ZXJuCi0gICAgICAgIHRvcF9sZXZlbF9kaXIgPSBvcHRpb25zLnRvcAotCi0gICAgICAgIGxvYWRlciA9IExvYWRlcigpCi0gICAgICAgIHNlbGYudGVzdCA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXIsIHBhdHRlcm4sIHRvcF9sZXZlbF9kaXIpCisgICAgICAgIGxvYWRlciA9IHNlbGYudGVzdExvYWRlciBpZiBMb2FkZXIgaXMgTm9uZSBlbHNlIExvYWRlcigpCisgICAgICAgIHNlbGYudGVzdCA9IGxvYWRlci5kaXNjb3ZlcihzZWxmLnN0YXJ0LCBzZWxmLnBhdHRlcm4sIHNlbGYudG9wKQogCiAgICAgZGVmIHJ1blRlc3RzKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWs6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbW9jay5weSBiL0xpYi91bml0dGVzdC9tb2NrLnB5CmluZGV4IDA3Mzg2OWEuLjU1NTU3NzQgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9tb2NrLnB5CisrKyBiL0xpYi91bml0dGVzdC9tb2NrLnB5CkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IHBwcmludAogaW1wb3J0IHN5cwotZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMsIHBhcnRpYWwKIAogCiBCYXNlRXhjZXB0aW9ucyA9IChCYXNlRXhjZXB0aW9uLCkKQEAgLTY2LDU1ICs2Niw0NSBAQAogKQogCiAKLWRlZiBfZ2V0c2lnbmF0dXJlKGZ1bmMsIHNraXBmaXJzdCwgaW5zdGFuY2U9RmFsc2UpOgotICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZSkgYW5kIG5vdCBpbnN0YW5jZToKK2RlZiBfZ2V0X3NpZ25hdHVyZV9vYmplY3QoZnVuYywgYXNfaW5zdGFuY2UsIGVhdF9zZWxmKToKKyAgICAiIiIKKyAgICBHaXZlbiBhbiBhcmJpdHJhcnksIHBvc3NpYmx5IGNhbGxhYmxlIG9iamVjdCwgdHJ5IHRvIGNyZWF0ZSBhIHN1aXRhYmxlCisgICAgc2lnbmF0dXJlIG9iamVjdC4KKyAgICBSZXR1cm4gYSAocmVkdWNlZCBmdW5jLCBzaWduYXR1cmUpIHR1cGxlLCBvciBOb25lLgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZSkgYW5kIG5vdCBhc19pbnN0YW5jZToKKyAgICAgICAgIyBJZiBpdCdzIGEgdHlwZSBhbmQgc2hvdWxkIGJlIG1vZGVsbGVkIGFzIGEgdHlwZSwgdXNlIF9faW5pdF9fLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jID0gZnVuYy5fX2luaXRfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2tpcGZpcnN0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBTa2lwIHRoZSBgc2VsZmAgYXJndW1lbnQgaW4gX19pbml0X18KKyAgICAgICAgZWF0X3NlbGYgPSBUcnVlCiAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShmdW5jLCBGdW5jdGlvblR5cGVzKToKLSAgICAgICAgIyBmb3IgY2xhc3NlcyB3aGVyZSBpbnN0YW5jZSBpcyBUcnVlIHdlIGVuZCB1cCBoZXJlIHRvbworICAgICAgICAjIElmIHdlIHJlYWxseSB3YW50IHRvIG1vZGVsIGFuIGluc3RhbmNlIG9mIHRoZSBwYXNzZWQgdHlwZSwKKyAgICAgICAgIyBfX2NhbGxfXyBzaG91bGQgYmUgbG9va2VkIHVwLCBub3QgX19pbml0X18uCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ1bmMgPSBmdW5jLl9fY2FsbF9fCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgIGlmIGVhdF9zZWxmOgorICAgICAgICBzaWdfZnVuYyA9IHBhcnRpYWwoZnVuYywgTm9uZSkKKyAgICBlbHNlOgorICAgICAgICBzaWdfZnVuYyA9IGZ1bmMKICAgICB0cnk6Ci0gICAgICAgIGFyZ3NwZWMgPSBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKGZ1bmMpCi0gICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgIyBDIGZ1bmN0aW9uIC8gbWV0aG9kLCBwb3NzaWJseSBpbmhlcml0ZWQgb2JqZWN0KCkuX19pbml0X18KLSAgICAgICAgcmV0dXJuCi0KLSAgICByZWdhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seSwga3dvbmx5ZGVmLCBhbm4gPSBhcmdzcGVjCi0KLQotICAgICMgaW5zdGFuY2UgbWV0aG9kcyBhbmQgY2xhc3NtZXRob2RzIG5lZWQgdG8gbG9zZSB0aGUgc2VsZiBhcmd1bWVudAotICAgIGlmIGdldGF0dHIoZnVuYywgJ19fc2VsZl9fJywgTm9uZSkgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJlZ2FyZ3MgPSByZWdhcmdzWzE6XQotICAgIGlmIHNraXBmaXJzdDoKLSAgICAgICAgIyB0aGlzIGNvbmRpdGlvbiBhbmQgdGhlIGFib3ZlIG9uZSBhcmUgbmV2ZXIgYm90aCBUcnVlIC0gd2h5PwotICAgICAgICByZWdhcmdzID0gcmVnYXJnc1sxOl0KLQotICAgIHNpZ25hdHVyZSA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgcmVnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLAotICAgICAgICBrd29ubHksIGt3b25seWRlZiwgYW5uLCBmb3JtYXR2YWx1ZT1sYW1iZGEgdmFsdWU6ICIiKQotICAgIHJldHVybiBzaWduYXR1cmVbMTotMV0sIGZ1bmMKKyAgICAgICAgcmV0dXJuIGZ1bmMsIGluc3BlY3Quc2lnbmF0dXJlKHNpZ19mdW5jKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAjIENlcnRhaW4gY2FsbGFibGUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgaW5zcGVjdC5zaWduYXR1cmUoKQorICAgICAgICByZXR1cm4gTm9uZQogCiAKIGRlZiBfY2hlY2tfc2lnbmF0dXJlKGZ1bmMsIG1vY2ssIHNraXBmaXJzdCwgaW5zdGFuY2U9RmFsc2UpOgotICAgIGlmIG5vdCBfY2FsbGFibGUoZnVuYyk6CisgICAgc2lnID0gX2dldF9zaWduYXR1cmVfb2JqZWN0KGZ1bmMsIGluc3RhbmNlLCBza2lwZmlyc3QpCisgICAgaWYgc2lnIGlzIE5vbmU6CiAgICAgICAgIHJldHVybgotCi0gICAgcmVzdWx0ID0gX2dldHNpZ25hdHVyZShmdW5jLCBza2lwZmlyc3QsIGluc3RhbmNlKQotICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICByZXR1cm4KLSAgICBzaWduYXR1cmUsIGZ1bmMgPSByZXN1bHQKLQotICAgICMgY2FuJ3QgdXNlIHNlbGYgYmVjYXVzZSAic2VsZiIgaXMgY29tbW9uIGFzIGFuIGFyZ3VtZW50IG5hbWUKLSAgICAjIHVuZm9ydHVuYXRlbHkgZXZlbiBub3QgaW4gdGhlIGZpcnN0IHBsYWNlCi0gICAgc3JjID0gImxhbWJkYSBfbW9ja19zZWxmLCAlczogTm9uZSIgJSBzaWduYXR1cmUKLSAgICBjaGVja3NpZyA9IGV2YWwoc3JjLCB7fSkKKyAgICBmdW5jLCBzaWcgPSBzaWcKKyAgICBkZWYgY2hlY2tzaWcoX21vY2tfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQogICAgIF9jb3B5X2Z1bmNfZGV0YWlscyhmdW5jLCBjaGVja3NpZykKICAgICB0eXBlKG1vY2spLl9tb2NrX2NoZWNrX3NpZyA9IGNoZWNrc2lnCiAKQEAgLTEyMiwxMSArMTEyLDI0IEBACiBkZWYgX2NvcHlfZnVuY19kZXRhaWxzKGZ1bmMsIGZ1bmNvcHkpOgogICAgIGZ1bmNvcHkuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCiAgICAgZnVuY29weS5fX2RvY19fID0gZnVuYy5fX2RvY19fCisgICAgdHJ5OgorICAgICAgICBmdW5jb3B5Ll9fdGV4dF9zaWduYXR1cmVfXyA9IGZ1bmMuX190ZXh0X3NpZ25hdHVyZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCiAgICAgIyB3ZSBleHBsaWNpdGx5IGRvbid0IGNvcHkgZnVuYy5fX2RpY3RfXyBpbnRvIHRoaXMgY29weSBhcyBpdCB3b3VsZAogICAgICMgZXhwb3NlIG9yaWdpbmFsIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgbW9ja2VkCi0gICAgZnVuY29weS5fX21vZHVsZV9fID0gZnVuYy5fX21vZHVsZV9fCi0gICAgZnVuY29weS5fX2RlZmF1bHRzX18gPSBmdW5jLl9fZGVmYXVsdHNfXwotICAgIGZ1bmNvcHkuX19rd2RlZmF1bHRzX18gPSBmdW5jLl9fa3dkZWZhdWx0c19fCisgICAgdHJ5OgorICAgICAgICBmdW5jb3B5Ll9fbW9kdWxlX18gPSBmdW5jLl9fbW9kdWxlX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIGZ1bmNvcHkuX19kZWZhdWx0c19fID0gZnVuYy5fX2RlZmF1bHRzX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIGZ1bmNvcHkuX19rd2RlZmF1bHRzX18gPSBmdW5jLl9fa3dkZWZhdWx0c19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCiAKIAogZGVmIF9jYWxsYWJsZShvYmopOgpAQCAtMTY2LDE1ICsxNjksMTIgQEAKICAgICAgICAgcmV0dXJuCiAKICAgICBza2lwZmlyc3QgPSBpc2luc3RhbmNlKG9yaWdpbmFsLCB0eXBlKQotICAgIHJlc3VsdCA9IF9nZXRzaWduYXR1cmUob3JpZ2luYWwsIHNraXBmaXJzdCwgaW5zdGFuY2UpCisgICAgcmVzdWx0ID0gX2dldF9zaWduYXR1cmVfb2JqZWN0KG9yaWdpbmFsLCBpbnN0YW5jZSwgc2tpcGZpcnN0KQogICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAjIHdhcyBhIEMgZnVuY3Rpb24gKGUuZy4gb2JqZWN0KCkuX19pbml0X18gKSB0aGF0IGNhbid0IGJlIG1vY2tlZAogICAgICAgICByZXR1cm4KLQotICAgIHNpZ25hdHVyZSwgZnVuYyA9IHJlc3VsdAotCi0gICAgc3JjID0gImxhbWJkYSAlczogTm9uZSIgJSBzaWduYXR1cmUKLSAgICBjaGVja3NpZyA9IGV2YWwoc3JjLCB7fSkKKyAgICBmdW5jLCBzaWcgPSByZXN1bHQKKyAgICBkZWYgY2hlY2tzaWcoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQogICAgIF9jb3B5X2Z1bmNfZGV0YWlscyhmdW5jLCBjaGVja3NpZykKIAogICAgIG5hbWUgPSBvcmlnaW5hbC5fX25hbWVfXwpAQCAtMzQzLDcgKzM0MywxNCBAQAogICAgICAgICB2YWx1ZS5fbW9ja19uYW1lID0gbmFtZQogICAgIHJldHVybiBUcnVlCiAKLQorIyBJbnRlcm5hbCBjbGFzcyB0byBpZGVudGlmeSBpZiB3ZSB3cmFwcGVkIGFuIGl0ZXJhdG9yIG9iamVjdCBvciBub3QuCitjbGFzcyBfTW9ja0l0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqKToKKyAgICAgICAgc2VsZi5vYmogPSBpdGVyKG9iaikKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbmV4dChzZWxmLm9iaikKIAogY2xhc3MgQmFzZShvYmplY3QpOgogICAgIF9tb2NrX3JldHVybl92YWx1ZSA9IERFRkFVTFQKQEAgLTM2OCw3ICszNzUsNyBAQAogICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgIHNlbGYsIHNwZWM9Tm9uZSwgd3JhcHM9Tm9uZSwgbmFtZT1Ob25lLCBzcGVjX3NldD1Ob25lLAogICAgICAgICAgICAgcGFyZW50PU5vbmUsIF9zcGVjX3N0YXRlPU5vbmUsIF9uZXdfbmFtZT0nJywgX25ld19wYXJlbnQ9Tm9uZSwKLSAgICAgICAgICAgICoqa3dhcmdzCisgICAgICAgICAgICBfc3BlY19hc19pbnN0YW5jZT1GYWxzZSwgX2VhdF9zZWxmPU5vbmUsICoqa3dhcmdzCiAgICAgICAgICk6CiAgICAgICAgIGlmIF9uZXdfcGFyZW50IGlzIE5vbmU6CiAgICAgICAgICAgICBfbmV3X3BhcmVudCA9IHBhcmVudApAQCAtMzgyLDggKzM4OSwxMCBAQAogICAgICAgICBpZiBzcGVjX3NldCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNwZWMgPSBzcGVjX3NldAogICAgICAgICAgICAgc3BlY19zZXQgPSBUcnVlCisgICAgICAgIGlmIF9lYXRfc2VsZiBpcyBOb25lOgorICAgICAgICAgICAgX2VhdF9zZWxmID0gcGFyZW50IGlzIG5vdCBOb25lCiAKLSAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCkKKyAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCwgX3NwZWNfYXNfaW5zdGFuY2UsIF9lYXRfc2VsZikKIAogICAgICAgICBfX2RpY3RfX1snX21vY2tfY2hpbGRyZW4nXSA9IHt9CiAgICAgICAgIF9fZGljdF9fWydfbW9ja193cmFwcyddID0gd3JhcHMKQEAgLTQyOCwyMCArNDM3LDI2IEBACiAgICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQpCiAKIAotICAgIGRlZiBfbW9ja19hZGRfc3BlYyhzZWxmLCBzcGVjLCBzcGVjX3NldCk6CisgICAgZGVmIF9tb2NrX2FkZF9zcGVjKHNlbGYsIHNwZWMsIHNwZWNfc2V0LCBfc3BlY19hc19pbnN0YW5jZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX2VhdF9zZWxmPUZhbHNlKToKICAgICAgICAgX3NwZWNfY2xhc3MgPSBOb25lCisgICAgICAgIF9zcGVjX3NpZ25hdHVyZSA9IE5vbmUKIAogICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBub3QgX2lzX2xpc3Qoc3BlYyk6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNwZWMsIHR5cGUpOgogICAgICAgICAgICAgICAgIF9zcGVjX2NsYXNzID0gc3BlYwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBfc3BlY19jbGFzcyA9IF9nZXRfY2xhc3Moc3BlYykKKyAgICAgICAgICAgIHJlcyA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zcGVjX2FzX2luc3RhbmNlLCBfZWF0X3NlbGYpCisgICAgICAgICAgICBfc3BlY19zaWduYXR1cmUgPSByZXMgYW5kIHJlc1sxXQogCiAgICAgICAgICAgICBzcGVjID0gZGlyKHNwZWMpCiAKICAgICAgICAgX19kaWN0X18gPSBzZWxmLl9fZGljdF9fCiAgICAgICAgIF9fZGljdF9fWydfc3BlY19jbGFzcyddID0gX3NwZWNfY2xhc3MKICAgICAgICAgX19kaWN0X19bJ19zcGVjX3NldCddID0gc3BlY19zZXQKKyAgICAgICAgX19kaWN0X19bJ19zcGVjX3NpZ25hdHVyZSddID0gX3NwZWNfc2lnbmF0dXJlCiAgICAgICAgIF9fZGljdF9fWydfbW9ja19tZXRob2RzJ10gPSBzcGVjCiAKIApAQCAtNDg3LDcgKzUwMiwxMSBAQAogICAgICAgICBkZWxlZ2F0ZWQgPSBzZWxmLl9tb2NrX2RlbGVnYXRlCiAgICAgICAgIGlmIGRlbGVnYXRlZCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21vY2tfc2lkZV9lZmZlY3QKLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlZC5zaWRlX2VmZmVjdAorICAgICAgICBzZiA9IGRlbGVnYXRlZC5zaWRlX2VmZmVjdAorICAgICAgICBpZiBzZiBpcyBub3QgTm9uZSBhbmQgbm90IGNhbGxhYmxlKHNmKSBhbmQgbm90IGlzaW5zdGFuY2Uoc2YsIF9Nb2NrSXRlcik6CisgICAgICAgICAgICBzZiA9IF9Nb2NrSXRlcihzZikKKyAgICAgICAgICAgIGRlbGVnYXRlZC5zaWRlX2VmZmVjdCA9IHNmCisgICAgICAgIHJldHVybiBzZgogCiAgICAgZGVmIF9fc2V0X3NpZGVfZWZmZWN0KHNlbGYsIHZhbHVlKToKICAgICAgICAgdmFsdWUgPSBfdHJ5X2l0ZXIodmFsdWUpCkBAIC02OTUsNyArNzE0LDYgQEAKICAgICAgICAgc2VsZi5fbW9ja19jaGlsZHJlbltuYW1lXSA9IF9kZWxldGVkCiAKIAotCiAgICAgZGVmIF9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShzZWxmLCBhcmdzLCBrd2FyZ3MpOgogICAgICAgICBuYW1lID0gc2VsZi5fbW9ja19uYW1lIG9yICdtb2NrJwogICAgICAgICByZXR1cm4gX2Zvcm1hdF9jYWxsX3NpZ25hdHVyZShuYW1lLCBhcmdzLCBrd2FyZ3MpCkBAIC03MTEsNiArNzI5LDI4IEBACiAgICAgICAgIHJldHVybiBtZXNzYWdlICUgKGV4cGVjdGVkX3N0cmluZywgYWN0dWFsX3N0cmluZykKIAogCisgICAgZGVmIF9jYWxsX21hdGNoZXIoc2VsZiwgX2NhbGwpOgorICAgICAgICAiIiIKKyAgICAgICAgR2l2ZW4gYSBjYWxsIChvciBzaW1wbHkgYSAoYXJncywga3dhcmdzKSB0dXBsZSksIHJldHVybiBhCisgICAgICAgIGNvbXBhcmlzb24ga2V5IHN1aXRhYmxlIGZvciBtYXRjaGluZyB3aXRoIG90aGVyIGNhbGxzLgorICAgICAgICBUaGlzIGlzIGEgYmVzdCBlZmZvcnQgbWV0aG9kIHdoaWNoIHJlbGllcyBvbiB0aGUgc3BlYydzIHNpZ25hdHVyZSwKKyAgICAgICAgaWYgYXZhaWxhYmxlLCBvciBmYWxscyBiYWNrIG9uIHRoZSBhcmd1bWVudHMgdGhlbXNlbHZlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNpZyA9IHNlbGYuX3NwZWNfc2lnbmF0dXJlCisgICAgICAgIGlmIHNpZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGxlbihfY2FsbCkgPT0gMjoKKyAgICAgICAgICAgICAgICBuYW1lID0gJycKKyAgICAgICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSBfY2FsbAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lLCBhcmdzLCBrd2FyZ3MgPSBfY2FsbAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBuYW1lLCBzaWcuYmluZCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGUud2l0aF90cmFjZWJhY2soTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBfY2FsbAorCisKICAgICBkZWYgYXNzZXJ0X2NhbGxlZF93aXRoKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiImFzc2VydCB0aGF0IHRoZSBtb2NrIHdhcyBjYWxsZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy4KIApAQCAtNzIxLDkgKzc2MSwxNCBAQAogICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShhcmdzLCBrd2FyZ3MpCiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRXhwZWN0ZWQgY2FsbDogJXNcbk5vdCBjYWxsZWQnICUgKGV4cGVjdGVkLCkpCiAKLSAgICAgICAgaWYgc2VsZi5jYWxsX2FyZ3MgIT0gKGFyZ3MsIGt3YXJncyk6CisgICAgICAgIGRlZiBfZXJyb3JfbWVzc2FnZSgpOgogICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0X21vY2tfZmFpbHVyZV9tZXNzYWdlKGFyZ3MsIGt3YXJncykKLSAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKG1zZykKKyAgICAgICAgICAgIHJldHVybiBtc2cKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9jYWxsX21hdGNoZXIoKGFyZ3MsIGt3YXJncykpCisgICAgICAgIGFjdHVhbCA9IHNlbGYuX2NhbGxfbWF0Y2hlcihzZWxmLmNhbGxfYXJncykKKyAgICAgICAgaWYgZXhwZWN0ZWQgIT0gYWN0dWFsOgorICAgICAgICAgICAgY2F1c2UgPSBleHBlY3RlZCBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBFeGNlcHRpb24pIGVsc2UgTm9uZQorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoX2Vycm9yX21lc3NhZ2UoKSkgZnJvbSBjYXVzZQogCiAKICAgICBkZWYgYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoX21vY2tfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTc0NywxOCArNzkyLDIxIEBACiAKICAgICAgICAgSWYgYGFueV9vcmRlcmAgaXMgVHJ1ZSB0aGVuIHRoZSBjYWxscyBjYW4gYmUgaW4gYW55IG9yZGVyLCBidXQKICAgICAgICAgdGhleSBtdXN0IGFsbCBhcHBlYXIgaW4gYG1vY2tfY2FsbHNgLiIiIgorICAgICAgICBleHBlY3RlZCA9IFtzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gY2FsbHNdCisgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKKyAgICAgICAgYWxsX2NhbGxzID0gX0NhbGxMaXN0KHNlbGYuX2NhbGxfbWF0Y2hlcihjKSBmb3IgYyBpbiBzZWxmLm1vY2tfY2FsbHMpCiAgICAgICAgIGlmIG5vdCBhbnlfb3JkZXI6Ci0gICAgICAgICAgICBpZiBjYWxscyBub3QgaW4gc2VsZi5tb2NrX2NhbGxzOgorICAgICAgICAgICAgaWYgZXhwZWN0ZWQgbm90IGluIGFsbF9jYWxsczoKICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgJ0NhbGxzIG5vdCBmb3VuZC5cbkV4cGVjdGVkOiAlclxuJwogICAgICAgICAgICAgICAgICAgICAnQWN0dWFsOiAlcicgJSAoY2FsbHMsIHNlbGYubW9ja19jYWxscykKLSAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSBmcm9tIGNhdXNlCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBhbGxfY2FsbHMgPSBsaXN0KHNlbGYubW9ja19jYWxscykKKyAgICAgICAgYWxsX2NhbGxzID0gbGlzdChhbGxfY2FsbHMpCiAKICAgICAgICAgbm90X2ZvdW5kID0gW10KLSAgICAgICAgZm9yIGthbGwgaW4gY2FsbHM6CisgICAgICAgIGZvciBrYWxsIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFsbF9jYWxscy5yZW1vdmUoa2FsbCkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgpAQCAtNzY2LDcgKzgxNCw3IEBACiAgICAgICAgIGlmIG5vdF9mb3VuZDoKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgICAgICclciBub3QgYWxsIGZvdW5kIGluIGNhbGwgbGlzdCcgJSAodHVwbGUobm90X2ZvdW5kKSwpCi0gICAgICAgICAgICApCisgICAgICAgICAgICApIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIGFzc2VydF9hbnlfY2FsbChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNzc1LDEyICs4MjMsMTQgQEAKICAgICAgICAgVGhlIGFzc2VydCBwYXNzZXMgaWYgdGhlIG1vY2sgaGFzICpldmVyKiBiZWVuIGNhbGxlZCwgdW5saWtlCiAgICAgICAgIGBhc3NlcnRfY2FsbGVkX3dpdGhgIGFuZCBgYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhgIHRoYXQgb25seSBwYXNzIGlmCiAgICAgICAgIHRoZSBjYWxsIGlzIHRoZSBtb3N0IHJlY2VudCBvbmUuIiIiCi0gICAgICAgIGthbGwgPSBjYWxsKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYga2FsbCBub3QgaW4gc2VsZi5jYWxsX2FyZ3NfbGlzdDoKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9jYWxsX21hdGNoZXIoKGFyZ3MsIGt3YXJncykpCisgICAgICAgIGFjdHVhbCA9IFtzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gc2VsZi5jYWxsX2FyZ3NfbGlzdF0KKyAgICAgICAgaWYgZXhwZWN0ZWQgbm90IGluIGFjdHVhbDoKKyAgICAgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKICAgICAgICAgICAgIGV4cGVjdGVkX3N0cmluZyA9IHNlbGYuX2Zvcm1hdF9tb2NrX2NhbGxfc2lnbmF0dXJlKGFyZ3MsIGt3YXJncykKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgICAgICclcyBjYWxsIG5vdCBmb3VuZCcgJSBleHBlY3RlZF9zdHJpbmcKLSAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgZnJvbSBjYXVzZQogCiAKICAgICBkZWYgX2dldF9jaGlsZF9tb2NrKHNlbGYsICoqa3cpOgpAQCAtODUwLDExICs5MDAsMTIgQEAKICAgICAgICAgc2VsZiA9IF9tb2NrX3NlbGYKICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCiAgICAgICAgIHNlbGYuY2FsbF9jb3VudCArPSAxCi0gICAgICAgIHNlbGYuY2FsbF9hcmdzID0gX0NhbGwoKGFyZ3MsIGt3YXJncyksIHR3bz1UcnVlKQotICAgICAgICBzZWxmLmNhbGxfYXJnc19saXN0LmFwcGVuZChfQ2FsbCgoYXJncywga3dhcmdzKSwgdHdvPVRydWUpKQotCiAgICAgICAgIF9uZXdfbmFtZSA9IHNlbGYuX21vY2tfbmV3X25hbWUKICAgICAgICAgX25ld19wYXJlbnQgPSBzZWxmLl9tb2NrX25ld19wYXJlbnQKKworICAgICAgICBfY2FsbCA9IF9DYWxsKChhcmdzLCBrd2FyZ3MpLCB0d289VHJ1ZSkKKyAgICAgICAgc2VsZi5jYWxsX2FyZ3MgPSBfY2FsbAorICAgICAgICBzZWxmLmNhbGxfYXJnc19saXN0LmFwcGVuZChfY2FsbCkKICAgICAgICAgc2VsZi5tb2NrX2NhbGxzLmFwcGVuZChfQ2FsbCgoJycsIGFyZ3MsIGt3YXJncykpKQogCiAgICAgICAgIHNlZW4gPSBzZXQoKQpAQCAtOTA5LDggKzk2MCw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgICAgICAgICByZXRfdmFsID0gZWZmZWN0KCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIGlmIHJldF92YWwgaXMgREVGQVVMVDoKLSAgICAgICAgICAgICAgICByZXRfdmFsID0gc2VsZi5yZXR1cm5fdmFsdWUKIAogICAgICAgICBpZiAoc2VsZi5fbW9ja193cmFwcyBpcyBub3QgTm9uZSBhbmQKICAgICAgICAgICAgICBzZWxmLl9tb2NrX3JldHVybl92YWx1ZSBpcyBERUZBVUxUKToKQEAgLTEwMDEsNyArMTA1MCw3IEBACiBjbGFzcyBfcGF0Y2gob2JqZWN0KToKIAogICAgIGF0dHJpYnV0ZV9uYW1lID0gTm9uZQotICAgIF9hY3RpdmVfcGF0Y2hlcyA9IHNldCgpCisgICAgX2FjdGl2ZV9wYXRjaGVzID0gW10KIAogICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgIHNlbGYsIGdldHRlciwgYXR0cmlidXRlLCBuZXcsIHNwZWMsIGNyZWF0ZSwKQEAgLTEyNzQsMTMgKzEzMjMsMTggQEAKICAgICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgICIiIkFjdGl2YXRlIGEgcGF0Y2gsIHJldHVybmluZyBhbnkgY3JlYXRlZCBtb2NrLiIiIgogICAgICAgICByZXN1bHQgPSBzZWxmLl9fZW50ZXJfXygpCi0gICAgICAgIHNlbGYuX2FjdGl2ZV9wYXRjaGVzLmFkZChzZWxmKQorICAgICAgICBzZWxmLl9hY3RpdmVfcGF0Y2hlcy5hcHBlbmQoc2VsZikKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgIiIiU3RvcCBhbiBhY3RpdmUgcGF0Y2guIiIiCi0gICAgICAgIHNlbGYuX2FjdGl2ZV9wYXRjaGVzLmRpc2NhcmQoc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fYWN0aXZlX3BhdGNoZXMucmVtb3ZlKHNlbGYpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgIyBJZiB0aGUgcGF0Y2ggaGFzbid0IGJlZW4gc3RhcnRlZCB0aGlzIHdpbGwgZmFpbAorICAgICAgICAgICAgcGFzcworCiAgICAgICAgIHJldHVybiBzZWxmLl9fZXhpdF9fKCkKIAogCkBAIC0xNTczLDggKzE2MjcsOCBAQAogCiAKIGRlZiBfcGF0Y2hfc3RvcGFsbCgpOgotICAgICIiIlN0b3AgYWxsIGFjdGl2ZSBwYXRjaGVzLiIiIgotICAgIGZvciBwYXRjaCBpbiBsaXN0KF9wYXRjaC5fYWN0aXZlX3BhdGNoZXMpOgorICAgICIiIlN0b3AgYWxsIGFjdGl2ZSBwYXRjaGVzLiBMSUZPIHRvIHVucm9sbCBuZXN0ZWQgcGF0Y2hlcy4iIiIKKyAgICBmb3IgcGF0Y2ggaW4gcmV2ZXJzZWQoX3BhdGNoLl9hY3RpdmVfcGF0Y2hlcyk6CiAgICAgICAgIHBhdGNoLnN0b3AoKQogCiAKQEAgLTE1OTYsNyArMTY1MCw5IEBACiAgICAgImJvb2wgbmV4dCAiCiApCiAKLW51bWVyaWNzID0gImFkZCBzdWIgbXVsIGRpdiBmbG9vcmRpdiBtb2QgbHNoaWZ0IHJzaGlmdCBhbmQgeG9yIG9yIHBvdyAiCitudW1lcmljcyA9ICgKKyAgICAiYWRkIHN1YiBtdWwgZGl2IGZsb29yZGl2IG1vZCBsc2hpZnQgcnNoaWZ0IGFuZCB4b3Igb3IgcG93IHRydWVkaXYiCispCiBpbnBsYWNlID0gJyAnLmpvaW4oJ2klcycgJSBuIGZvciBuIGluIG51bWVyaWNzLnNwbGl0KCkpCiByaWdodCA9ICcgJy5qb2luKCdyJXMnICUgbiBmb3IgbiBpbiBudW1lcmljcy5zcGxpdCgpKQogCkBAIC0yMDMwLDYgKzIwODYsOCBAQAogICAgIGVsaWYgc3BlYyBpcyBOb25lOgogICAgICAgICAjIE5vbmUgd2UgbW9jayB3aXRoIGEgbm9ybWFsIG1vY2sgd2l0aG91dCBhIHNwZWMKICAgICAgICAgX2t3YXJncyA9IHt9CisgICAgaWYgX2t3YXJncyBhbmQgaW5zdGFuY2U6CisgICAgICAgIF9rd2FyZ3NbJ19zcGVjX2FzX2luc3RhbmNlJ10gPSBUcnVlCiAKICAgICBfa3dhcmdzLnVwZGF0ZShrd2FyZ3MpCiAKQEAgLTIwNDMsNiArMjEwMSw4IEBACiAgICAgZWxpZiBpc190eXBlIGFuZCBpbnN0YW5jZSBhbmQgbm90IF9pbnN0YW5jZV9jYWxsYWJsZShzcGVjKToKICAgICAgICAgS2xhc3MgPSBOb25DYWxsYWJsZU1hZ2ljTW9jawogCisgICAgX25hbWUgPSBfa3dhcmdzLnBvcCgnbmFtZScsIF9uYW1lKQorCiAgICAgX25ld19uYW1lID0gX25hbWUKICAgICBpZiBfcGFyZW50IGlzIE5vbmU6CiAgICAgICAgICMgZm9yIGEgdG9wIGxldmVsIG9iamVjdCBubyBfbmV3X25hbWUgc2hvdWxkIGJlIHNldApAQCAtMjA5NiwxMCArMjE1NiwxMiBAQAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzcGVjLCBGdW5jdGlvblR5cGVzKToKICAgICAgICAgICAgICAgICBwYXJlbnQgPSBtb2NrLm1vY2sKIAotICAgICAgICAgICAgbmV3ID0gTWFnaWNNb2NrKHBhcmVudD1wYXJlbnQsIG5hbWU9ZW50cnksIF9uZXdfbmFtZT1lbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV3X3BhcmVudD1wYXJlbnQsICoqa3dhcmdzKQotICAgICAgICAgICAgbW9jay5fbW9ja19jaGlsZHJlbltlbnRyeV0gPSBuZXcKICAgICAgICAgICAgIHNraXBmaXJzdCA9IF9tdXN0X3NraXAoc3BlYywgZW50cnksIGlzX3R5cGUpCisgICAgICAgICAgICBrd2FyZ3NbJ19lYXRfc2VsZiddID0gc2tpcGZpcnN0CisgICAgICAgICAgICBuZXcgPSBNYWdpY01vY2socGFyZW50PXBhcmVudCwgbmFtZT1lbnRyeSwgX25ld19uYW1lPWVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXdfcGFyZW50PXBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICAgICAgICAgIG1vY2suX21vY2tfY2hpbGRyZW5bZW50cnldID0gbmV3CiAgICAgICAgICAgICBfY2hlY2tfc2lnbmF0dXJlKG9yaWdpbmFsLCBuZXcsIHNraXBmaXJzdD1za2lwZmlyc3QpCiAKICAgICAgICAgIyBzbyBmdW5jdGlvbnMgY3JlYXRlZCB3aXRoIF9zZXRfc2lnbmF0dXJlIGJlY29tZSBpbnN0YW5jZSBhdHRyaWJ1dGVzLApAQCAtMjExMyw2ICsyMTc1LDEwIEBACiAKIAogZGVmIF9tdXN0X3NraXAoc3BlYywgZW50cnksIGlzX3R5cGUpOgorICAgICIiIgorICAgIFJldHVybiB3aGV0aGVyIHdlIHNob3VsZCBza2lwIHRoZSBmaXJzdCBhcmd1bWVudCBvbiBzcGVjJ3MgYGVudHJ5YAorICAgIGF0dHJpYnV0ZS4KKyAgICAiIiIKICAgICBpZiBub3QgaXNpbnN0YW5jZShzcGVjLCB0eXBlKToKICAgICAgICAgaWYgZW50cnkgaW4gZ2V0YXR0cihzcGVjLCAnX19kaWN0X18nLCB7fSk6CiAgICAgICAgICAgICAjIGluc3RhbmNlIGF0dHJpYnV0ZSAtIHNob3VsZG4ndCBza2lwCkBAIC0yMTI1LDcgKzIxOTEsMTIgQEAKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCAoc3RhdGljbWV0aG9kLCBjbGFzc21ldGhvZCkpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBpc190eXBlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShnZXRhdHRyKHJlc3VsdCwgJ19fZ2V0X18nLCBOb25lKSwgTWV0aG9kV3JhcHBlclR5cGVzKToKKyAgICAgICAgICAgICMgTm9ybWFsIG1ldGhvZCA9PiBza2lwIGlmIGxvb2tlZCB1cCBvbiB0eXBlCisgICAgICAgICAgICAjIChpZiBsb29rZWQgdXAgb24gaW5zdGFuY2UsIHNlbGYgaXMgYWxyZWFkeSBza2lwcGVkKQorICAgICAgICAgICAgcmV0dXJuIGlzX3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgIyBzaG91bGRuJ3QgZ2V0IGhlcmUgdW5sZXNzIGZ1bmN0aW9uIGlzIGEgZHluYW1pY2FsbHkgcHJvdmlkZWQgYXR0cmlidXRlCiAgICAgIyBYWFhYIHVudGVzdGVkIGJlaGF2aW91cgpAQCAtMjE1OSw5ICsyMjMwLDMxIEBACiAgICAgdHlwZShBTlkuX19lcV9fKSwKICkKIAorTWV0aG9kV3JhcHBlclR5cGVzID0gKAorICAgIHR5cGUoQU5ZLl9fZXFfXy5fX2dldF9fKSwKKykKKwogCiBmaWxlX3NwZWMgPSBOb25lCiAKK2RlZiBfaXRlcmF0ZV9yZWFkX2RhdGEocmVhZF9kYXRhKToKKyAgICAjIEhlbHBlciBmb3IgbW9ja19vcGVuOgorICAgICMgUmV0cmlldmUgbGluZXMgZnJvbSByZWFkX2RhdGEgdmlhIGEgZ2VuZXJhdG9yIHNvIHRoYXQgc2VwYXJhdGUgY2FsbHMgdG8KKyAgICAjIHJlYWRsaW5lLCByZWFkLCBhbmQgcmVhZGxpbmVzIGFyZSBwcm9wZXJseSBpbnRlcmxlYXZlZAorICAgIGRhdGFfYXNfbGlzdCA9IFsne31cbicuZm9ybWF0KGwpIGZvciBsIGluIHJlYWRfZGF0YS5zcGxpdCgnXG4nKV0KKworICAgIGlmIGRhdGFfYXNfbGlzdFstMV0gPT0gJ1xuJzoKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBsaW5lIGVuZGVkIGluIGEgbmV3bGluZSwgdGhlIGxpc3QgY29tcHJlaGVuc2lvbiB3aWxsIGhhdmUgYW4KKyAgICAgICAgIyBleHRyYSBlbnRyeSB0aGF0J3MganVzdCBhIG5ld2xpbmUuICBSZW1vdmUgdGhpcy4KKyAgICAgICAgZGF0YV9hc19saXN0ID0gZGF0YV9hc19saXN0WzotMV0KKyAgICBlbHNlOgorICAgICAgICAjIElmIHRoZXJlIHdhc24ndCBhbiBleHRyYSBuZXdsaW5lIGJ5IGl0c2VsZiwgdGhlbiB0aGUgZmlsZSBiZWluZworICAgICAgICAjIGVtdWxhdGVkIGRvZXNuJ3QgaGF2ZSBhIG5ld2xpbmUgdG8gZW5kIHRoZSBsYXN0IGxpbmUgIHJlbW92ZSB0aGUKKyAgICAgICAgIyBuZXdsaW5lIHRoYXQgb3VyIG5haXZlIGZvcm1hdCgpIGFkZGVkCisgICAgICAgIGRhdGFfYXNfbGlzdFstMV0gPSBkYXRhX2FzX2xpc3RbLTFdWzotMV0KKworICAgIGZvciBsaW5lIGluIGRhdGFfYXNfbGlzdDoKKyAgICAgICAgeWllbGQgbGluZQogCiBkZWYgbW9ja19vcGVuKG1vY2s9Tm9uZSwgcmVhZF9kYXRhPScnKToKICAgICAiIiIKQEAgLTIxNzIsOSArMjI2NSwyNyBAQAogICAgIGRlZmF1bHQpIHRoZW4gYSBgTWFnaWNNb2NrYCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSwgd2l0aCB0aGUgQVBJIGxpbWl0ZWQKICAgICB0byBtZXRob2RzIG9yIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIG9uIHN0YW5kYXJkIGZpbGUgaGFuZGxlcy4KIAotICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYHJlYWRgIG1ldGhvZCBvZiB0aGUgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLgotICAgIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCisgICAgYHJlYWRfZGF0YWAgaXMgYSBzdHJpbmcgZm9yIHRoZSBgcmVhZGAgbWV0aG9kZGxpbmVgLCBhbmQgYHJlYWRsaW5lc2Agb2YgdGhlCisgICAgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLiAgVGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KICAgICAiIiIKKyAgICBkZWYgX3JlYWRsaW5lc19zaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZQorICAgICAgICByZXR1cm4gbGlzdChfZGF0YSkKKworICAgIGRlZiBfcmVhZF9zaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlCisgICAgICAgIHJldHVybiAnJy5qb2luKF9kYXRhKQorCisgICAgZGVmIF9yZWFkbGluZV9zaWRlX2VmZmVjdCgpOgorICAgICAgICBpZiBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB5aWVsZCBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlCisgICAgICAgIGZvciBsaW5lIGluIF9kYXRhOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisKICAgICBnbG9iYWwgZmlsZV9zcGVjCiAgICAgaWYgZmlsZV9zcGVjIGlzIE5vbmU6CiAgICAgICAgIGltcG9ydCBfaW8KQEAgLTIxODQsOSArMjI5NSwxOCBAQAogICAgICAgICBtb2NrID0gTWFnaWNNb2NrKG5hbWU9J29wZW4nLCBzcGVjPW9wZW4pCiAKICAgICBoYW5kbGUgPSBNYWdpY01vY2soc3BlYz1maWxlX3NwZWMpCi0gICAgaGFuZGxlLndyaXRlLnJldHVybl92YWx1ZSA9IE5vbmUKICAgICBoYW5kbGUuX19lbnRlcl9fLnJldHVybl92YWx1ZSA9IGhhbmRsZQotICAgIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSA9IHJlYWRfZGF0YQorCisgICAgX2RhdGEgPSBfaXRlcmF0ZV9yZWFkX2RhdGEocmVhZF9kYXRhKQorCisgICAgaGFuZGxlLndyaXRlLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZSA9IE5vbmUKKworICAgIGhhbmRsZS5yZWFkLnNpZGVfZWZmZWN0ID0gX3JlYWRfc2lkZV9lZmZlY3QKKyAgICBoYW5kbGUucmVhZGxpbmUuc2lkZV9lZmZlY3QgPSBfcmVhZGxpbmVfc2lkZV9lZmZlY3QoKQorICAgIGhhbmRsZS5yZWFkbGluZXMuc2lkZV9lZmZlY3QgPSBfcmVhZGxpbmVzX3NpZGVfZWZmZWN0CiAKICAgICBtb2NrLnJldHVybl92YWx1ZSA9IGhhbmRsZQogICAgIHJldHVybiBtb2NrCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5IGIvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQppbmRleCA5N2U1NDI2Li5iOTY3YTYwIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CisrKyBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKQEAgLTEyMSw2ICsxMjEsMjIgQEAKICAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKICAgICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gVHJ1ZQogCisgICAgQGZhaWxmYXN0CisgICAgZGVmIGFkZFN1YlRlc3Qoc2VsZiwgdGVzdCwgc3VidGVzdCwgZXJyKToKKyAgICAgICAgIiIiQ2FsbGVkIGF0IHRoZSBlbmQgb2YgYSBzdWJ0ZXN0LgorICAgICAgICAnZXJyJyBpcyBOb25lIGlmIHRoZSBzdWJ0ZXN0IGVuZGVkIHN1Y2Nlc3NmdWxseSwgb3RoZXJ3aXNlIGl0J3MgYQorICAgICAgICB0dXBsZSBvZiB2YWx1ZXMgYXMgcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCkuCisgICAgICAgICIiIgorICAgICAgICAjIEJ5IGRlZmF1bHQsIHdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggc3VjY2Vzc2Z1bCBzdWJ0ZXN0cywgYnV0CisgICAgICAgICMgbW9yZSBzb3BoaXN0aWNhdGVkIHRlc3QgcmVzdWx0cyBtaWdodCB3YW50IHRvIHJlY29yZCB0aGVtLgorICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGVyclswXSwgdGVzdC5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSBzZWxmLmZhaWx1cmVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVycm9ycyA9IHNlbGYuZXJyb3JzCisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzdWJ0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisgICAgICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCisKICAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKICAgICAgICAgIkNhbGxlZCB3aGVuIGEgdGVzdCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIKICAgICAgICAgcGFzcwpAQCAtMTQwLDExICsxNTYsMTYgQEAKICAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzLmFwcGVuZCh0ZXN0KQogCiAgICAgZGVmIHdhc1N1Y2Nlc3NmdWwoc2VsZik6Ci0gICAgICAgICJUZWxscyB3aGV0aGVyIG9yIG5vdCB0aGlzIHJlc3VsdCB3YXMgYSBzdWNjZXNzIgotICAgICAgICByZXR1cm4gbGVuKHNlbGYuZmFpbHVyZXMpID09IGxlbihzZWxmLmVycm9ycykgPT0gMAorICAgICAgICAiIiJUZWxscyB3aGV0aGVyIG9yIG5vdCB0aGlzIHJlc3VsdCB3YXMgYSBzdWNjZXNzLiIiIgorICAgICAgICAjIFRoZSBoYXNhdHRyIGNoZWNrIGlzIGZvciB0ZXN0X3Jlc3VsdCdzIE9sZFJlc3VsdCB0ZXN0LiAgVGhhdAorICAgICAgICAjIHdheSB0aGlzIG1ldGhvZCB3b3JrcyBvbiBvYmplY3RzIHRoYXQgbGFjayB0aGUgYXR0cmlidXRlLgorICAgICAgICAjICh3aGVyZSB3b3VsZCBzdWNoIHJlc3VsdCBpbnRhbmNlcyBjb21lIGZyb20/IG9sZCBzdG9yZWQgcGlja2xlcz8pCisgICAgICAgIHJldHVybiAoKGxlbihzZWxmLmZhaWx1cmVzKSA9PSBsZW4oc2VsZi5lcnJvcnMpID09IDApIGFuZAorICAgICAgICAgICAgICAgIChub3QgaGFzYXR0cihzZWxmLCAndW5leHBlY3RlZFN1Y2Nlc3NlcycpIG9yCisgICAgICAgICAgICAgICAgIGxlbihzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzZXMpID09IDApKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgICJJbmRpY2F0ZXMgdGhhdCB0aGUgdGVzdHMgc2hvdWxkIGJlIGFib3J0ZWQiCisgICAgICAgICIiIkluZGljYXRlcyB0aGF0IHRoZSB0ZXN0cyBzaG91bGQgYmUgYWJvcnRlZC4iIiIKICAgICAgICAgc2VsZi5zaG91bGRTdG9wID0gVHJ1ZQogCiAgICAgZGVmIF9leGNfaW5mb190b19zdHJpbmcoc2VsZiwgZXJyLCB0ZXN0KToKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9zdWl0ZS5weSBiL0xpYi91bml0dGVzdC9zdWl0ZS5weQppbmRleCBjZGU1ZDM4Li40OTk3ZDgxIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CkBAIC0xNiw4ICsxNiwxMSBAQAogY2xhc3MgQmFzZVRlc3RTdWl0ZShvYmplY3QpOgogICAgICIiIkEgc2ltcGxlIHRlc3Qgc3VpdGUgdGhhdCBkb2Vzbid0IHByb3ZpZGUgY2xhc3Mgb3IgbW9kdWxlIHNoYXJlZCBmaXh0dXJlcy4KICAgICAiIiIKKyAgICBfY2xlYW51cCA9IFRydWUKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cz0oKSk6CiAgICAgICAgIHNlbGYuX3Rlc3RzID0gW10KKyAgICAgICAgc2VsZi5fcmVtb3ZlZF90ZXN0cyA9IDAKICAgICAgICAgc2VsZi5hZGRUZXN0cyh0ZXN0cykKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKQEAgLTM1LDkgKzM4LDEwIEBACiAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX3Rlc3RzKQogCiAgICAgZGVmIGNvdW50VGVzdENhc2VzKHNlbGYpOgotICAgICAgICBjYXNlcyA9IDAKKyAgICAgICAgY2FzZXMgPSBzZWxmLl9yZW1vdmVkX3Rlc3RzCiAgICAgICAgIGZvciB0ZXN0IGluIHNlbGY6Ci0gICAgICAgICAgICBjYXNlcyArPSB0ZXN0LmNvdW50VGVzdENhc2VzKCkKKyAgICAgICAgICAgIGlmIHRlc3Q6CisgICAgICAgICAgICAgICAgY2FzZXMgKz0gdGVzdC5jb3VudFRlc3RDYXNlcygpCiAgICAgICAgIHJldHVybiBjYXNlcwogCiAgICAgZGVmIGFkZFRlc3Qoc2VsZiwgdGVzdCk6CkBAIC01NywxMiArNjEsMjggQEAKICAgICAgICAgICAgIHNlbGYuYWRkVGVzdCh0ZXN0KQogCiAgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICBmb3IgaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHNlbGYpOgogICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICAgICAgaWYgc2VsZi5fY2xlYW51cDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVUZXN0QXRJbmRleChpbmRleCkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCisgICAgZGVmIF9yZW1vdmVUZXN0QXRJbmRleChzZWxmLCBpbmRleCk6CisgICAgICAgICIiIlN0b3AgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgVGVzdENhc2UgYXQgaW5kZXguIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QgPSBzZWxmLl90ZXN0c1tpbmRleF0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgc3VwcG9ydCBmb3Igc3VpdGUgaW1wbGVtZW50YXRpb25zIHRoYXQgaGF2ZSBvdmVycmlkZW4gc2VsZi5fdGVzdHMKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgU29tZSB1bml0dGVzdCB0ZXN0cyBhZGQgbm9uIFRlc3RDYXNlL1Rlc3RTdWl0ZSBvYmplY3RzIHRvCisgICAgICAgICAgICAjIHRoZSBzdWl0ZS4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIodGVzdCwgJ2NvdW50VGVzdENhc2VzJyk6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlZF90ZXN0cyArPSB0ZXN0LmNvdW50VGVzdENhc2VzKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzW2luZGV4XSA9IE5vbmUKKwogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKICAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzLCAqKmt3ZHMpCiAKQEAgLTg3LDcgKzEwNyw3IEBACiAgICAgICAgIGlmIGdldGF0dHIocmVzdWx0LCAnX3Rlc3RSdW5FbnRlcmVkJywgRmFsc2UpIGlzIEZhbHNlOgogICAgICAgICAgICAgcmVzdWx0Ll90ZXN0UnVuRW50ZXJlZCA9IHRvcExldmVsID0gVHJ1ZQogCi0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgIGZvciBpbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZik6CiAgICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKICAgICAgICAgICAgICAgICBicmVhawogCkBAIC0xMDYsNiArMTI2LDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGVzdC5kZWJ1ZygpCiAKKyAgICAgICAgICAgIGlmIHNlbGYuX2NsZWFudXA6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlVGVzdEF0SW5kZXgoaW5kZXgpCisKICAgICAgICAgaWYgdG9wTGV2ZWw6CiAgICAgICAgICAgICBzZWxmLl90ZWFyRG93blByZXZpb3VzQ2xhc3MoTm9uZSwgcmVzdWx0KQogICAgICAgICAgICAgc2VsZi5faGFuZGxlTW9kdWxlVGVhckRvd24ocmVzdWx0KQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGQwNTkxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAjIHRvcCBsZXZlbCBkaXJlY3RvcnkgY2FjaGVkIG9uIGxvYWRlciBpbnN0YW5jZQorICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIHBhdHRlcm4gPSBwYXR0ZXJuIG9yICJ0ZXN0XyoucHkiCisgICAgIyBXZSBhcmUgaW5zaWRlIHVuaXR0ZXN0LnRlc3QsIHNvIHRoZSB0b3AtbGV2ZWwgaXMgdHdvIG5vdGNoZXMgdXAKKyAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh0aGlzX2RpcikpCisgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9kaXI9dG9wX2xldmVsX2RpcikKKyAgICBzdGFuZGFyZF90ZXN0cy5hZGRUZXN0cyhwYWNrYWdlX3Rlc3RzKQorICAgIHJldHVybiBzdGFuZGFyZF90ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQppbmRleCBkYmU0ZGRjLi4wMmU4ZjNhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JsZW0gaGFzaGluZyAlcyBhbmQgJXM6ICVzIiAlIChvYmpfMSwgb2JqXzIsIGUpKQogCiAKLWNsYXNzIExvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CitjbGFzcyBfQmFzZUxvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cyA9IGxvZwogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0YXJ0VGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdFJ1bigpCisgICAgICAgIHN1cGVyKCkuc3RhcnRUZXN0UnVuKCkKIAogICAgIGRlZiBzdG9wVGVzdChzZWxmLCB0ZXN0KToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RvcFRlc3QnKQpAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0UnVuKCkKKyAgICAgICAgc3VwZXIoKS5zdG9wVGVzdFJ1bigpCiAKICAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEZhaWx1cmUnKQpAQCAtNjgsNyArNjgsNyBAQAogCiAgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU3VjY2VzcygqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRTdWNjZXNzKCphcmdzKQogCiAgICAgZGVmIGFkZEVycm9yKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXJyb3InKQpAQCAtNzYsMTUgKzc2LDM5IEBACiAKICAgICBkZWYgYWRkU2tpcChzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFNraXAnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTa2lwKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZFNraXAoKmFyZ3MpCiAKICAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXhwZWN0ZWRGYWlsdXJlJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkRXhwZWN0ZWRGYWlsdXJlKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKIAogICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisKKworY2xhc3MgTGVnYWN5TG9nZ2luZ1Jlc3VsdChfQmFzZUxvZ2dpbmdSZXN1bHQpOgorICAgICIiIgorICAgIEEgbGVnYWN5IFRlc3RSZXN1bHQgaW1wbGVtZW50YXRpb24sIHdpdGhvdXQgYW4gYWRkU3ViVGVzdCBtZXRob2QsCisgICAgd2hpY2ggcmVjb3JkcyBpdHMgbWV0aG9kIGNhbGxzLgorICAgICIiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFkZFN1YlRlc3Qoc2VsZik6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKworY2xhc3MgTG9nZ2luZ1Jlc3VsdChfQmFzZUxvZ2dpbmdSZXN1bHQpOgorICAgICIiIgorICAgIEEgVGVzdFJlc3VsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCByZWNvcmRzIGl0cyBtZXRob2QgY2FsbHMuCisgICAgIiIiCisKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmLCB0ZXN0LCBzdWJ0ZXN0LCBlcnIpOgorICAgICAgICBpZiBlcnIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1YlRlc3RTdWNjZXNzJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1YlRlc3RGYWlsdXJlJykKKyAgICAgICAgc3VwZXIoKS5hZGRTdWJUZXN0KHRlc3QsIHN1YnRlc3QsIGVycikKIAogCiBjbGFzcyBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CmluZGV4IDc5MzFjYWQuLmMzNDlhOTUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCB3YXJuaW5ncworaW1wb3J0IHdlYWtyZWYKIGltcG9ydCB1bml0dGVzdAogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHByb2R1Y3QKIApAQCAtOTcsNiArOTgsMzYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGxldCBleGNlcHRpb24gcGFzcyB0aHJvdWdoIikKIAorICAgIGRlZiB0ZXN0X2Fzc2VydFJhaXNlc19mcmFtZXNfc3Vydml2YWwoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk4MTU6IGFzc2VydFJhaXNlcyBzaG91bGQgYXZvaWQga2VlcGluZyBsb2NhbCB2YXJpYWJsZXMKKyAgICAgICAgIyBpbiBhIHRyYWNlYmFjayBhbGl2ZS4KKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd3IgPSBOb25lCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBub25sb2NhbCB3cgorICAgICAgICAgICAgICAgIGEgPSBBKCkKKyAgICAgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGEpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgICAgICAgICAgZGVmIHRlc3RfZnVuY3Rpb25hbChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmZvbykKKworICAgICAgICAgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZvbygpCisKKyAgICAgICAgRm9vKCJ0ZXN0X2Z1bmN0aW9uYWwiKS5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cigpKQorICAgICAgICBGb28oInRlc3Rfd2l0aCIpLnJ1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCisKICAgICBkZWYgdGVzdEFzc2VydE5vdFJlZ2V4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4KCdBbGEgbWEga290YScsIHIncisnKQogICAgICAgICB0cnk6CkBAIC0zNjEsMyArMzkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIkJywgJ15vb3BzJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iIDogb29wcyQnXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKaW5kZXggNzU1MzJmNC4uMGJmMWEyMiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CkBAIC0yODIsMyArMjgyLDcgQEAKICAgICAiaWYgdGhyZWFkcyBoYXZlIGJlZW4gdXNlZCIpCiBjbGFzcyBUZXN0QnJlYWtTaWduYWxEZWZhdWx0KFRlc3RCcmVhayk6CiAgICAgaW50X2hhbmRsZXIgPSBzaWduYWwuU0lHX0RGTAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKaW5kZXggYjhjYjBjNy4uZTcwZGQ1YiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQpAQCAtMSw4ICsxLDEwIEBACitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGRpZmZsaWIKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBwaWNrbGUKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBpbnNwZWN0CkBAIC0xMiwxMCArMTQsMTYgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gLnN1cHBvcnQgaW1wb3J0ICgKLSAgICBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nLCBMb2dnaW5nUmVzdWx0LAorZnJvbSB1bml0dGVzdC50ZXN0LnN1cHBvcnQgaW1wb3J0ICgKKyAgICBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nLCBMb2dnaW5nUmVzdWx0LCBMZWdhY3lMb2dnaW5nUmVzdWx0LAogICAgIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuCiApCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3RkZXJyCisKKworbG9nX2ZvbyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKQorbG9nX2Zvb2JhciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28uYmFyJykKK2xvZ19xdXV4ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3F1dXgnKQogCiAKIGNsYXNzIFRlc3Qob2JqZWN0KToKQEAgLTI5Nyw2ICszMDUsOTggQEAKIAogICAgICAgICBGb28oJ3Rlc3QnKS5ydW4oKQogCisgICAgZGVmIF9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0cyhzZWxmLCByZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKToKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gWzEsIDIsIDNdOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiBbMiwgM106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoaj1qKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSAqIGogPT0gNjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZXN0JykKKyAgICAgICAgICAgICAgICAxIC8gMAorCisgICAgICAgICMgT3JkZXIgaXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgIyBpPTEgPT4gc3VidGVzdCBmYWlsdXJlCisgICAgICAgICMgaT0yLCBqPTIgPT4gc3VidGVzdCBzdWNjZXNzCisgICAgICAgICMgaT0yLCBqPTMgPT4gc3VidGVzdCBlcnJvcgorICAgICAgICAjIGk9Mywgaj0yID0+IHN1YnRlc3QgZXJyb3IKKyAgICAgICAgIyBpPTMsIGo9MyA9PiBzdWJ0ZXN0IHN1Y2Nlc3MKKyAgICAgICAgIyB0b3BsZXZlbCA9PiBlcnJvcgorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RGYWlsdXJlJywgJ2FkZFN1YlRlc3RTdWNjZXNzJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RGYWlsdXJlJywgJ2FkZFN1YlRlc3RGYWlsdXJlJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RTdWNjZXNzJywgJ2FkZEVycm9yJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX2xlZ2FjeShzZWxmKToKKyAgICAgICAgIyBXaXRoIGEgbGVnYWN5IHJlc3VsdCBvYmplY3QgKHdpdGhvdXQgYSBhZGRTdWJUZXN0IG1ldGhvZCksCisgICAgICAgICMgdGV4dCBleGVjdXRpb24gc3RvcHMgYWZ0ZXIgdGhlIGZpcnN0IHN1YnRlc3QgZmFpbHVyZS4KKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTGVnYWN5TG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIF9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHNlbGYsIHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpOgorICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBbMSwgMl06CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9aSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiBbMiwgM106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoaj1qKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgICMgVGhlIDYgc3VidGVzdCBzdWNjZXNzZXMgYXJlIGluZGl2aWR1YWxseSByZWNvcmRlZCwgaW4gYWRkaXRpb24KKyAgICAgICAgIyB0byB0aGUgd2hvbGUgdGVzdCBzdWNjZXNzLgorICAgICAgICBleHBlY3RlZCA9IChbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJ10KKyAgICAgICAgICAgICAgICAgICAgKyA2ICogWydhZGRTdWJUZXN0U3VjY2VzcyddCisgICAgICAgICAgICAgICAgICAgICsgWydhZGRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3MocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3NfbGVnYWN5KHNlbGYpOgorICAgICAgICAjIFdpdGggYSBsZWdhY3kgcmVzdWx0LCBvbmx5IHRoZSB3aG9sZSB0ZXN0IHN1Y2Nlc3MgaXMgcmVjb3JkZWQuCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExlZ2FjeUxvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3VjY2VzcycsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3MocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX2ZhaWxmYXN0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9MSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT0yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdzdG9wVGVzdCddCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKwogICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgogICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCiAgICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCkBAIC03MjksMTggKzgyOSwxOCBAQAogCiAgICAgICAgICMgc2V0IGEgbG93ZXIgdGhyZXNob2xkIHZhbHVlIGFuZCBhZGQgYSBjbGVhbnVwIHRvIHJlc3RvcmUgaXQKICAgICAgICAgb2xkX3RocmVzaG9sZCA9IHNlbGYuX2RpZmZUaHJlc2hvbGQKLSAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDIqKjgKKyAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDIqKjUKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2V0YXR0cihzZWxmLCAnX2RpZmZUaHJlc2hvbGQnLCBvbGRfdGhyZXNob2xkKSkKIAogICAgICAgICAjIHVuZGVyIHRoZSB0aHJlc2hvbGQ6IGRpZmYgbWFya2VyICheKSBpbiBlcnJvciBtZXNzYWdlCi0gICAgICAgIHMgPSAneCcgKiAoMioqNykKKyAgICAgICAgcyA9ICd4JyAqICgyKio0KQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ14nLCBzdHIoY20uZXhjZXB0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQogCiAgICAgICAgICMgb3ZlciB0aGUgdGhyZXNob2xkOiBkaWZmIG5vdCB1c2VkIGFuZCBtYXJrZXIgKF4pIG5vdCBpbiBlcnJvciBtZXNzYWdlCi0gICAgICAgIHMgPSAneCcgKiAoMioqOSkKKyAgICAgICAgcyA9ICd4JyAqICgyKio2KQogICAgICAgICAjIGlmIHRoZSBwYXRoIHRoYXQgdXNlcyBkaWZmbGliIGlzIHRha2VuLCBfdHJ1bmNhdGVNZXNzYWdlIHdpbGwgYmUKICAgICAgICAgIyBjYWxsZWQgLS0gcmVwbGFjZSBpdCB3aXRoIGV4cGxvZGluZ1RydW5jYXRpb24gdG8gdmVyaWZ5IHRoYXQgdGhpcwogICAgICAgICAjIGRvZXNuJ3QgaGFwcGVuCkBAIC03NTcsNiArODU3LDM1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICclciAhPSAlcicgJSAoczEsIHMyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQogCisgICAgZGVmIHRlc3RBc3NlcnRFcXVhbF9zaG9ydGVuKHNlbGYpOgorICAgICAgICAjIHNldCBhIGxvd2VyIHRocmVzaG9sZCB2YWx1ZSBhbmQgYWRkIGEgY2xlYW51cCB0byByZXN0b3JlIGl0CisgICAgICAgIG9sZF90aHJlc2hvbGQgPSBzZWxmLl9kaWZmVGhyZXNob2xkCisgICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAwCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNldGF0dHIoc2VsZiwgJ19kaWZmVGhyZXNob2xkJywgb2xkX3RocmVzaG9sZCkpCisKKyAgICAgICAgcyA9ICd4JyAqIDEwMAorICAgICAgICBzMSwgczIgPSBzICsgJ2EnLCBzICsgJ2InCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbMzUgY2hhcnNdJyArICd4JyAqIDYxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJyAhPSAnJXNiJyIgJSAoYywgYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKKworICAgICAgICBwID0gJ3knICogNTAKKyAgICAgICAgczEsIHMyID0gcyArICdhJyArIHAsIHMgKyAnYicgKyBwCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbODUgY2hhcnNdeHh4eHh4eHh4eHgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJXMnICE9ICclc2IlcyciICUgKGMsIHAsIGMsIHApKQorCisgICAgICAgIHAgPSAneScgKiAxMDAKKyAgICAgICAgczEsIHMyID0gcyArICdhJyArIHAsIHMgKyAnYicgKyBwCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbOTEgY2hhcnNdeHh4eHgnCisgICAgICAgIGQgPSAneScgKiA0MCArICdbNTYgY2hhcnNdeXl5eScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIiclc2ElcycgIT0gJyVzYiVzJyIgJSAoYywgZCwgYywgZCkpCisKICAgICBkZWYgdGVzdEFzc2VydENvdW50RXF1YWwoc2VsZik6CiAgICAgICAgIGEgPSBvYmplY3QoKQogICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWzEsIDIsIDNdLCBbMywgMiwgMV0pCkBAIC05OTcsNiArMTEyNiwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgsIEV4Y2VwdGlvbiwgJ3gnLAogICAgICAgICAgICAgICAgIGxhbWJkYTogTm9uZSkKIAorICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhJbnZhbGlkUmVnZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjAxNDUuCisgICAgICAgIGNsYXNzIE15RXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCwgTXlFeGMsIGxhbWJkYTogVHJ1ZSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0V2FybnNSZWdleEludmFsaWRSZWdleChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyMDE0NS4KKyAgICAgICAgY2xhc3MgTXlXYXJuKFdhcm5pbmcpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuYXNzZXJ0V2FybnNSZWdleCwgTXlXYXJuLCBsYW1iZGE6IFRydWUpCisKICAgICBkZWYgdGVzdEFzc2VydFJhaXNlc1JlZ2V4TWlzbWF0Y2goc2VsZik6CiAgICAgICAgIGRlZiBTdHViKCk6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQnKQpAQCAtMTE1OSw2ICsxMzAwLDk0IEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUnVudGltZVdhcm5pbmcsICJvKyIpOgogICAgICAgICAgICAgICAgICAgICBfcnVudGltZV93YXJuKCJiYXJ6IikKIAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIGFzc2VydE5vU3RkZXJyKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGJ1ZjoKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksICIiKQorCisgICAgZGVmIGFzc2VydExvZ1JlY29yZHMoc2VsZiwgcmVjb3JkcywgbWF0Y2hlcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlY29yZHMpLCBsZW4obWF0Y2hlcykpCisgICAgICAgIGZvciByZWMsIG1hdGNoIGluIHppcChyZWNvcmRzLCBtYXRjaGVzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZWMsIGxvZ2dpbmcuTG9nUmVjb3JkKQorICAgICAgICAgICAgZm9yIGssIHYgaW4gbWF0Y2guaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocmVjLCBrKSwgdikKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0RlZmF1bHRzKHNlbGYpOgorICAgICAgICAjIGRlZmF1bHRzOiByb290IGxvZ2dlciwgbGV2ZWwgSU5GTworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmRlYnVnKCIyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLCBbeyduYW1lJzogJ2Zvbyd9XSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc1R3b01hdGNoaW5nTWVzc2FnZXMoc2VsZik6CisgICAgICAgICMgU2FtZSwgYnV0IHdpdGggdHdvIG1hdGNoaW5nIGxvZyBtZXNzYWdlcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmRlYnVnKCIyIikKKyAgICAgICAgICAgICAgICBsb2dfcXV1eC53YXJuaW5nKCIzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiLCAiV0FSTklORzpxdXV4OjMiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyduYW1lJzogJ2Zvbyd9LCB7J25hbWUnOiAncXV1eCd9XSkKKworICAgIGRlZiBjaGVja0Fzc2VydExvZ3NQZXJMZXZlbChzZWxmLCBsZXZlbCk6CisgICAgICAgICMgQ2hlY2sgbGV2ZWwgZmlsdGVyaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9bGV2ZWwpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ19mb28ud2FybmluZygiMSIpCisgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5lcnJvcigiMiIpCisgICAgICAgICAgICAgICAgbG9nX3F1dXguY3JpdGljYWwoIjMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiRVJST1I6Zm9vLmJhcjoyIiwgIkNSSVRJQ0FMOnF1dXg6MyJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vLmJhcid9LCB7J25hbWUnOiAncXV1eCd9XSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc1BlckxldmVsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxldmVsKGxvZ2dpbmcuRVJST1IpCisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTGV2ZWwoJ0VSUk9SJykKKworICAgIGRlZiBjaGVja0Fzc2VydExvZ3NQZXJMb2dnZXIoc2VsZiwgbG9nZ2VyKToKKyAgICAgICAgIyBDaGVjayBwZXItbG9nZ2VyIGZpdGVyaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9J0RFQlVHJykgYXMgb3V0ZXJfY206CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobG9nZ2VyLCBsZXZlbD0nREVCVUcnKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5kZWJ1ZygiMiIpCisgICAgICAgICAgICAgICAgICAgIGxvZ19xdXV4Lndhcm5pbmcoIjMiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiLCAiREVCVUc6Zm9vLmJhcjoyIl0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyduYW1lJzogJ2Zvbyd9LCB7J25hbWUnOiAnZm9vLmJhcid9XSkKKyAgICAgICAgICAgICMgVGhlIG91dGVyIGNhdGNoYWxsIGNhdWdodCB0aGUgcXV1eCBsb2cKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0ZXJfY20ub3V0cHV0LCBbIldBUk5JTkc6cXV1eDozIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NQZXJMb2dnZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTG9nZ2VyKGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKSkKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMb2dnZXIoJ2ZvbycpCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NGYWlsdXJlTm9Mb2dzKHNlbGYpOgorICAgICAgICAjIEZhaWx1cmUgZHVlIHRvIG5vIGxvZ3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZUxldmVsVG9vSGlnaChzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBsZXZlbCB0b28gaGlnaAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsZXZlbD0nV0FSTklORycpOgorICAgICAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZU1pc21hdGNoaW5nTG9nZ2VyKHNlbGYpOgorICAgICAgICAjIEZhaWx1cmUgZHVlIHRvIG1pc21hdGNoaW5nIGxvZ2dlciAoYW5kIHRoZSBsb2dnZWQgbWVzc2FnZSBpcworICAgICAgICAjIHBhc3NlZCB0aHJvdWdoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygncXV1eCcsIGxldmVsPSdFUlJPUicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdmb28nKToKKyAgICAgICAgICAgICAgICAgICAgbG9nX3F1dXguZXJyb3IoIjEiKQorCiAgICAgZGVmIHRlc3REZXByZWNhdGVkTWV0aG9kTmFtZXMoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUZXN0IHRoYXQgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kcyByYWlzZSBhIERlcHJlY2F0aW9uV2FybmluZy4gU2VlICM5NDI0LgpAQCAtMTMxMywzICsxNTQyLDMzIEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CiAgICAgICAgICAgICBkZWwgY2FzZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3cigpKQorCisgICAgZGVmIHRlc3Rfbm9fZXhjZXB0aW9uX2xlYWsoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5ODgwOiBUZXN0Q2FzZS5ydW4oKSBzaG91bGQgbm90IGtlZXAgYSByZWZlcmVuY2UKKyAgICAgICAgIyB0byB0aGUgZXhjZXB0aW9uCisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBuaW5zdGFuY2UgPSAwCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBNeUV4Y2VwdGlvbi5uaW5zdGFuY2UgKz0gMQorICAgICAgICAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmKQorCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBNeUV4Y2VwdGlvbi5uaW5zdGFuY2UgLT0gMQorCisgICAgICAgIGNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0MShzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbigpCisKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0MihzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbigpCisKKyAgICAgICAgZm9yIG1ldGhvZF9uYW1lIGluICgndGVzdDEnLCAndGVzdDInKToKKyAgICAgICAgICAgIHRlc3RjYXNlID0gVGVzdENhc2UobWV0aG9kX25hbWUpCisgICAgICAgICAgICB0ZXN0Y2FzZS5ydW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNeUV4Y2VwdGlvbi5uaW5zdGFuY2UsIDApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKaW5kZXggY2NjN2RiMi4uYWJiOTA2NiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKQEAgLTEsMTIgKzEsMTYgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCBidWlsdGlucworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0LnRlc3QKIAogCiBjbGFzcyBUZXN0YWJsZVRlc3RQcm9ncmFtKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKToKLSAgICBtb2R1bGUgPSAnX19tYWluX18nCisgICAgbW9kdWxlID0gTm9uZQogICAgIGV4aXQgPSBUcnVlCiAgICAgZGVmYXVsdFRlc3QgPSBmYWlsZmFzdCA9IGNhdGNoYnJlYWsgPSBidWZmZXIgPSBOb25lCiAgICAgdmVyYm9zaXR5ID0gMQpAQCAtNDYsOSArNTAsOSBAQAogICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgogICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCiAKLSAgICAgICAgcGF0aF9saXN0cyA9IFtbJ3Rlc3QxLnB5JywgJ3Rlc3QyLnB5JywgJ25vdF9hX3Rlc3QucHknLCAndGVzdF9kaXInLAorICAgICAgICBwYXRoX2xpc3RzID0gW1sndGVzdDIucHknLCAndGVzdDEucHknLCAnbm90X2FfdGVzdC5weScsICd0ZXN0X2RpcicsCiAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmZvbycsICd0ZXN0LW5vdC1hLW1vZHVsZS5weScsICdhbm90aGVyX2RpciddLAotICAgICAgICAgICAgICAgICAgICAgIFsndGVzdDMucHknLCAndGVzdDQucHknLCBdXQorICAgICAgICAgICAgICAgICAgICAgIFsndGVzdDQucHknLCAndGVzdDMucHknLCBdXQogICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIHBhdGg6IHBhdGhfbGlzdHMucG9wKDApCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2xpc3RkaXIpCiAKQEAgLTcwLDYgKzc0LDggQEAKICAgICAgICAgbG9hZGVyLl90b3BfbGV2ZWxfZGlyID0gdG9wX2xldmVsCiAgICAgICAgIHN1aXRlID0gbGlzdChsb2FkZXIuX2ZpbmRfdGVzdHModG9wX2xldmVsLCAndGVzdCoucHknKSkKIAorICAgICAgICAjIFRoZSB0ZXN0IHN1aXRlcyBmb3VuZCBzaG91bGQgYmUgc29ydGVkIGFscGhhYmV0aWNhbGx5IGZvciByZWxpYWJsZQorICAgICAgICAjIGV4ZWN1dGlvbiBvcmRlci4KICAgICAgICAgZXhwZWN0ZWQgPSBbbmFtZSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgogICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QxJywgJ3Rlc3QyJyldCiAgICAgICAgIGV4cGVjdGVkLmV4dGVuZChbKCd0ZXN0X2Rpci4lcycgJSBuYW1lKSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgpAQCAtMTMyLDYgKzEzOCw3IEBACiAgICAgICAgICMgYW5kIGRpcmVjdGx5IGZyb20gdGhlIHRlc3RfZGlyZWN0b3J5MiBwYWNrYWdlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydsb2FkX3Rlc3RzJywgJ3Rlc3RfZGlyZWN0b3J5MicgKyAnIG1vZHVsZSB0ZXN0cyddKQorICAgICAgICAjIFRoZSB0ZXN0IG1vZHVsZSBwYXRocyBzaG91bGQgYmUgc29ydGVkIGZvciByZWxpYWJsZSBleGVjdXRpb24gb3JkZXIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUucGF0aHMsIFsndGVzdF9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnkyJ10pCiAKICAgICAgICAgIyBsb2FkX3Rlc3RzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2Ugd2l0aCBsb2FkZXIsIHRlc3RzIGFuZCBwYXR0ZXJuCkBAIC0xNjksNyArMTc2LDcgQEAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCiAKICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncyA9IFtdCi0gICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgICAgICAgICBfZmluZF90ZXN0c19hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKICAgICAgICAgICAgIHJldHVybiBbJ3Rlc3RzJ10KICAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKQEAgLTE4NCwxMSArMTkxLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZmluZF90ZXN0c19hcmdzLCBbKHN0YXJ0X2RpciwgJ3BhdHRlcm4nKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4odG9wX2xldmVsX2Rpciwgc3lzLnBhdGgpCiAKLSAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX21vZHVsZXNfdGhhdF9mYWlsX3RvX2ltcG9ydChzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KKyAgICBkZWYgc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKHNlbGYsIGZha2VmaWxlKToKICAgICAgICAgbGlzdGRpciA9IG9zLmxpc3RkaXIKLSAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBfOiBbJ3Rlc3RfdGhpc19kb2VzX25vdF9leGlzdC5weSddCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogW2Zha2VmaWxlXQogICAgICAgICBpc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQogICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBfOiBUcnVlCiAgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQpAQCAtMTk4LDYgKzIwMywxMSBAQAogICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQogCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHNlbGYuc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKCd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknKQorCiAgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCcuJykKICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5nZXRjd2QoKSwgc3lzLnBhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKQEAgLTIwNiw2MiArMjE2LDc0IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgdGVzdC50ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QoKQogCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVfdGhhdF9yYWlzZXNfU2tpcFRlc3Rfb25faW1wb3J0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBkZWYgX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NraXBwZXJvbycpCisgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBfZ2V0X21vZHVsZV9mcm9tX25hbWUKKworICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cygndGVzdF9za2lwX2R1bW15LnB5JykKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAxKQorCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX3BhcnNlQXJncyhzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQogCiAgICAgICAgIGFyZ3MgPSBbXQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgYXJncy5leHRlbmQoYXJndikKLSAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGFyZ3MuYXBwZW5kCiAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1tdXSkKIAorICAgICAgICBhcmdzWzpdID0gW10KICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInLCAnZm9vJywgJ2JhciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnZm9vJywgJ2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbJ2ZvbycsICdiYXInXV0pCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZGlzY292ZXJfYnlfZGVmYXVsdChzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLm1vZHVsZSA9IE5vbmUKIAotICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCi0gICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6Ci0gICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJndiwgW10pCi0gICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQorICAgICAgICBhcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5idWZmZXIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uY2F0Y2hicmVhaywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5mYWlsZmFzdCwgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZGlzY292ZXJfYnlfZGVmYXVsdF93aXRoX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKLSAgICAgICAgcHJvZ3JhbS5tb2R1bGUgPSBOb25lCiAKLSAgICAgICAgYXJncyA9IFsnc29tZXRoaW5nJywgJy12JywgJy1iJywgJy12JywgJy1jJywgJy1mJ10KLSAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3YsIGFyZ3NbMTpdKQotICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKLSAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorICAgICAgICBhcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnLXYnLCAnLWInLCAnLXYnLCAnLWMnLCAnLWYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAyKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uYnVmZmVyLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uY2F0Y2hicmVhaywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmZhaWxmYXN0LCBUcnVlKQogCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZG9fZGlzY292ZXJ5X3Rvb19tYW55X2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAgY2xhc3MgU3RvcChFeGNlcHRpb24pOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBkZWYgdXNhZ2VFeGl0KCk6Ci0gICAgICAgICAgICByYWlzZSBTdG9wCi0KICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLnVzYWdlRXhpdCA9IHVzYWdlRXhpdAogICAgICAgICBwcm9ncmFtLnRlc3RMb2FkZXIgPSBOb25lCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgogICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCiAgICAgICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndXNhZ2U6Jywgc3RkZXJyLmdldHZhbHVlKCkpCiAKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfdXNlc19kZWZhdWx0X2xvYWRlcihzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9pbml0QXJnUGFyc2VycygpCiAKICAgICAgICAgY2xhc3MgTG9hZGVyKG9iamVjdCk6CiAgICAgICAgICAgICBhcmdzID0gW10KQEAgLTQxNyw3ICs0MzksNyBAQAogICAgICAgICBleHBlY3RlZFBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHVuaXR0ZXN0LnRlc3QuX19maWxlX18pKQogCiAgICAgICAgIHNlbGYud2FzUnVuID0gRmFsc2UKLSAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1Ob25lKToKICAgICAgICAgICAgIHNlbGYud2FzUnVuID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF9kaXIsIGV4cGVjdGVkUGF0aCkKICAgICAgICAgICAgIHJldHVybiB0ZXN0cwpAQCAtNDI3LDUgKzQ0OSw3OSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLl90ZXN0cywgdGVzdHMpCiAKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mcm9tX2RvdHRlZF9wYXRoX2J1aWx0aW5fbW9kdWxlcyhzZWxmKToKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBsaXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFsndGVzdF90aGlzX2RvZXNfbm90X2V4aXN0LnB5J10KKyAgICAgICAgaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisgICAgICAgIG9zLnBhdGguaXNkaXIgPSBsYW1iZGEgXzogRmFsc2UKKyAgICAgICAgb3JpZ19zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIGRlZiByZXN0b3JlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGlzZmlsZQorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IGlzZGlyCisgICAgICAgICAgICBvcy5saXN0ZGlyID0gbGlzdGRpcgorICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGxvYWRlci5kaXNjb3Zlcignc3lzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQ2FuIG5vdCB1c2UgYnVpbHRpbiBtb2R1bGVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXMgZG90dGVkIG1vZHVsZSBuYW1lcycpCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZnJvbV9kb3R0ZWRfbmFtZXNwYWNlX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnX2ltcG9ydCA9IF9faW1wb3J0X18KKyAgICAgICAgcGFja2FnZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BhY2thZ2UnKQorICAgICAgICBwYWNrYWdlLl9fcGF0aF9fID0gWycvYScsICcvYiddCisgICAgICAgIHBhY2thZ2UuX19zcGVjX18gPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoCisgICAgICAgICAgIGxvYWRlcj1Ob25lLAorICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1bJy9hJywgJy9iJ10KKyAgICAgICAgKQorCisgICAgICAgIGRlZiBfaW1wb3J0KHBhY2thZ2VuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbcGFja2FnZW5hbWVdID0gcGFja2FnZQorICAgICAgICAgICAgcmV0dXJuIHBhY2thZ2UKKworICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IG9yaWdfaW1wb3J0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQorICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gX2ltcG9ydAorCisgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MgPSBbXQorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgICAgICBfZmluZF90ZXN0c19hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiBbJyVzL3Rlc3RzJyAlIHN0YXJ0X2Rpcl0KKworICAgICAgICBsb2FkZXIuX2ZpbmRfdGVzdHMgPSBfZmluZF90ZXN0cworICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJ3BhY2thZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLCBbJy9hL3Rlc3RzJywgJy9iL3Rlc3RzJ10pCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZmFpbGVkX2Rpc2NvdmVyeShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHBhY2thZ2UgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwYWNrYWdlJykKKyAgICAgICAgb3JpZ19pbXBvcnQgPSBfX2ltcG9ydF9fCisKKyAgICAgICAgZGVmIF9pbXBvcnQocGFja2FnZW5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzeXMubW9kdWxlc1twYWNrYWdlbmFtZV0gPSBwYWNrYWdlCisgICAgICAgICAgICByZXR1cm4gcGFja2FnZQorCisgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gb3JpZ19pbXBvcnQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBfaW1wb3J0CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbG9hZGVyLmRpc2NvdmVyKCdwYWNrYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9uXCd0IGtub3cgaG93IHRvIGRpc2NvdmVyIGZyb20geyFyfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhY2thZ2UpKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKaW5kZXggOWNlNWVlMy4uYzVmMmJjYiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQpAQCAtMSw2ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0Citmcm9tIHVuaXR0ZXN0LnRlc3Quc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdAogCiAKIGNsYXNzIFRlc3RfRnVuY3Rpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNDIsMyArMTQyLDcgQEAKICAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lLCBkZXNjcmlwdGlvbj1kZXNjKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksICJ0aGlzIHRlc3RzIGZvbyIpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKaW5kZXggZmNkMmUwNy4uYjYyYTFiNSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKQEAgLTEzMDYsMyArMTMwNiw3IEBACiAgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fZGVmYXVsdF92YWx1ZShzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLnN1aXRlQ2xhc3MsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CmluZGV4IDhhNGIzZmEuLjcyNWQ2N2YgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKQEAgLTIsNyArMiw5IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC50ZXN0CiAKIAogY2xhc3MgVGVzdF9UZXN0UHJvZ3JhbSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC02NCw2ICs2Niw0MSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcygKICAgICAgICAgICAgICAgICBbc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdF9UZXN0UHJvZ3JhbS5Gb29CYXIpXSkKIAorICAgICAgICBkZWYgbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYsIG5hbWVzLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcygKKyAgICAgICAgICAgICAgICBbc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdF9UZXN0UHJvZ3JhbS5Gb29CYXIpXSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRUZXN0X3dpdGhfc3RyaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIG9sZF9hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ2Zha2V0ZXN0J10KKyAgICAgICAgcnVubmVyID0gRmFrZVJ1bm5lcigpCisgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5UZXN0UHJvZ3JhbSh0ZXN0UnVubmVyPXJ1bm5lciwgZXhpdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUZXN0PSd1bml0dGVzdC50ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKyAgICAgICAgc3lzLmFyZ3YgPSBvbGRfYXJndgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndW5pdHRlc3QudGVzdCcsKSwgcHJvZ3JhbS50ZXN0TmFtZXMpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0VGVzdF93aXRoX2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIG9sZF9hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ2Zha2V0ZXN0J10KKyAgICAgICAgcnVubmVyID0gRmFrZVJ1bm5lcigpCisgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5UZXN0UHJvZ3JhbSgKKyAgICAgICAgICAgIHRlc3RSdW5uZXI9cnVubmVyLCBleGl0PUZhbHNlLAorICAgICAgICAgICAgZGVmYXVsdFRlc3Q9Wyd1bml0dGVzdC50ZXN0JywgJ3VuaXR0ZXN0LnRlc3QyJ10sCisgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisgICAgICAgIHN5cy5hcmd2ID0gb2xkX2FyZ3YKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ3VuaXR0ZXN0LnRlc3QnLCAndW5pdHRlc3QudGVzdDInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50ZXN0TmFtZXMpCiAKICAgICBkZWYgdGVzdF9Ob25FeGl0KHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QubWFpbihleGl0PUZhbHNlLApAQCAtMTUxLDIwICsxODgsMzggQEAKICAgICAgICAgICAgIGlmIGF0dHIgPT0gJ2NhdGNoJyBhbmQgbm90IGhhc0luc3RhbGxIYW5kbGVyOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKKyAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgTm9uZSkKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgRmFsc2UpCisKKyAgICAgICAgICAgIGZhbHNlID0gW10KKyAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgZmFsc2UpCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIGZhbHNlKQorCisgICAgICAgICAgICB0cnVlID0gWzQyXQorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCB0cnVlKQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCB0cnVlKQorCiAgICAgICAgICAgICBzaG9ydF9vcHQgPSAnLSVzJyAlIGFyZ1swXQogICAgICAgICAgICAgbG9uZ19vcHQgPSAnLS0lcycgJSBhcmcKICAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKICAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIE5vbmUpCi0KICAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIFRydWUpCiAKLSAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKLSAgICAgICAgICAgICAgICBub3Rfbm9uZSA9IG9iamVjdCgpCi0gICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBub3Rfbm9uZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIEZhbHNlKQorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnIsIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3MsICgyLCkpCiAKLSAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIG5vdF9ub25lKQorICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyLCBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzLCAoMiwpKQogCiAgICAgZGVmIHRlc3RXYXJuaW5nKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHRoZSB3YXJuaW5ncyBhcmd1bWVudCIiIgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQppbmRleCA3ZDQwNzI1Li40ODlmZTE3IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQpAQCAtMjI3LDYgKzIyNyw0MCBAQAogICAgICAgICBzZWxmLmFzc2VydElzKHRlc3RfY2FzZSwgdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikKIAorICAgIGRlZiB0ZXN0X2FkZFN1YlRlc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHN1YnRlc3QKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSk6CisgICAgICAgICAgICAgICAgICAgIHN1YnRlc3QgPSBzZWxmLl9zdWJ0ZXN0CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mb190dXBsZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgICAgICMgUmVnaXN0ZXIgYW4gZXJyb3IgYnkgaGFuZCAodG8gY2hlY2sgdGhlIEFQSSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1YlRlc3QodGVzdCwgc3VidGVzdCwgZXhjX2luZm9fdHVwbGUpCisgICAgICAgICAgICAgICAgICAgICMgTm93IHRyaWdnZXIgYSBmYWlsdXJlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic29tZSByZWNvZ25pemFibGUgZmFpbHVyZSIpCisKKyAgICAgICAgc3VidGVzdCA9IE5vbmUKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICAgICB0ZXN0X2Nhc2UsIGZvcm1hdHRlZF9leGMgPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCBzdWJ0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJaZXJvRGl2aXNpb25FcnJvciIsIGZvcm1hdHRlZF9leGMpCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5mYWlsdXJlc1swXQorICAgICAgICBzZWxmLmFzc2VydElzKHRlc3RfY2FzZSwgc3VidGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic29tZSByZWNvZ25pemFibGUgZmFpbHVyZSIsIGZvcm1hdHRlZF9leGMpCisKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTIzNCw2ICsyNjgsMzcgQEAKICAgICAgICAgICAgICAgICAndGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKICAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCknKQogCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICgnICsgX19uYW1lX18gKworICAgICAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSknKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgnc29tZSBtZXNzYWdlJyk6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KSBbc29tZSBtZXNzYWdlXScpCisKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmdBbmRQYXJhbXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmdBbmRQYXJhbXMgJworICAgICAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoPHN1YnRlc3Q+KScpCisKKyAgICBkZWYgdGVzdEdldE5lc3RlZFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGJhcj0yKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAndGVzdEdldE5lc3RlZFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSknKQorCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgpAQCAtMjQ3LDYgKzMxMiwxOCBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4iIiIKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEsIGJhcj0yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgKCd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBkb2NzdHJpbmcuJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyhzZWxmKToKICAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciBkb2NzdHJpbmcuCiAgICAgICAgIFRoZSBzZWNvbmQgbGluZSBvZiB0aGUgZG9jc3RyaW5nLgpAQCAtMjU5LDYgKzMzNiwyMSBAQAogICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKICAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KKyAgICAgICAgVGhlIHNlY29uZCBsaW5lIG9mIHRoZSBkb2NzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKVxuJworICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKKyAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpKQorCiAgICAgZGVmIHRlc3RTdGFja0ZyYW1lVHJpbW1pbmcoc2VsZik6CiAgICAgICAgIGNsYXNzIEZyYW1lKG9iamVjdCk6CiAgICAgICAgICAgICBjbGFzcyB0Yl9mcmFtZShvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQppbmRleCBlMjJlNmJjLi43YzBiZDUxIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQpAQCAtNSw4ICs1LDEwIEBACiBpbXBvcnQgc3VicHJvY2VzcwogCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QuY2FzZSBpbXBvcnQgX091dGNvbWUKIAotZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KK2Zyb20gdW5pdHRlc3QudGVzdC5zdXBwb3J0IGltcG9ydCAoTG9nZ2luZ1Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4pCiAKIAogY2xhc3MgVGVzdENsZWFuVXAodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDIsMTIgKzQ0LDggQEAKICAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgY2xhc3MgTW9ja091dGNvbWUob2JqZWN0KToKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCi0gICAgICAgICAgICBlcnJvcnMgPSBbXQotCiAgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKLSAgICAgICAgdGVzdC5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBNb2NrT3V0Y29tZQorICAgICAgICBvdXRjb21lID0gdGVzdC5fb3V0Y29tZSA9IF9PdXRjb21lKCkKIAogICAgICAgICBleGMxID0gRXhjZXB0aW9uKCdmb28nKQogICAgICAgICBleGMyID0gRXhjZXB0aW9uKCdiYXInKQpAQCAtNjEsOSArNTksMTAgQEAKICAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGVzdC5kb0NsZWFudXBzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTW9ja091dGNvbWUuc3VjY2VzcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXRjb21lLnN1Y2Nlc3MpCiAKLSAgICAgICAgKFR5cGUxLCBpbnN0YW5jZTEsIF8pLCAoVHlwZTIsIGluc3RhbmNlMiwgXykgPSByZXZlcnNlZChNb2NrT3V0Y29tZS5lcnJvcnMpCisgICAgICAgICgoXywgKFR5cGUxLCBpbnN0YW5jZTEsIF8pKSwKKyAgICAgICAgIChfLCAoVHlwZTIsIGluc3RhbmNlMiwgXykpKSA9IHJldmVyc2VkKG91dGNvbWUuZXJyb3JzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChUeXBlMSwgaW5zdGFuY2UxKSwgKEV4Y2VwdGlvbiwgZXhjMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKFR5cGUyLCBpbnN0YW5jZTIpLCAoRXhjZXB0aW9uLCBleGMyKSkKIApAQCAtMzQxLDMgKzM0MCw3IEBACiAgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuc3RyZWFtLnN0cmVhbSBpcyBmKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CmluZGV4IGI4ZDVhYTQuLjM5MmY5NWUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CkBAIC00OTQsMTQgKzQ5NCwxMyBAQAogICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJwogICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKIAotICAgICAgICBfc3VpdGUgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdCkKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBzdWl0ZS5hZGRUZXN0KF9zdWl0ZSkKLQogICAgICAgICBtZXNzYWdlcyA9ICgnc2V0VXBNb2R1bGUnLCAndGVhckRvd25Nb2R1bGUnLCAnc2V0VXBDbGFzcycsICd0ZWFyRG93bkNsYXNzJywgJ3Rlc3Rfc29tZXRoaW5nJykKICAgICAgICAgZm9yIHBoYXNlLCBtc2cgaW4gZW51bWVyYXRlKG1lc3NhZ2VzKToKKyAgICAgICAgICAgIF9zdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQorICAgICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW19zdWl0ZV0pCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpOgogICAgICAgICAgICAgICAgIHN1aXRlLmRlYnVnKCkKIAorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKaW5kZXggOTUyMjQwZS4uODA3NTEwZiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQKK2Zyb20gdW5pdHRlc3QudGVzdC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0CiAKIAogY2xhc3MgVGVzdF9UZXN0U2tpcHBpbmcodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjksNiArMjksMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCiAKKyAgICBkZWYgdGVzdF9za2lwcGluZ19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NraXBfbWUoc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYT0xKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYj0yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMSIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMiIpCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic2tpcCAzIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3Rfc2tpcF9tZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnYWRkU2tpcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFNraXAnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAzKQorICAgICAgICBzdWJ0ZXN0LCBtc2cgPSByZXN1bHQuc2tpcHBlZFswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgInNraXAgMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJ0ZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzdWJ0ZXN0LCB0ZXN0KQorICAgICAgICBzdWJ0ZXN0LCBtc2cgPSByZXN1bHQuc2tpcHBlZFsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgInNraXAgMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJ0ZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzdWJ0ZXN0LCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkWzJdLCAodGVzdCwgInNraXAgMyIpKQorCiAgICAgZGVmIHRlc3Rfc2tpcHBpbmdfZGVjb3JhdG9ycyhzZWxmKToKICAgICAgICAgb3BfdGFibGUgPSAoKHVuaXR0ZXN0LnNraXBVbmxlc3MsIEZhbHNlLCBUcnVlKSwKICAgICAgICAgICAgICAgICAgICAgKHVuaXR0ZXN0LnNraXBJZiwgVHJ1ZSwgRmFsc2UpKQpAQCAtOTUsNiArMTIwLDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXNbMF1bMF0sIHRlc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQogCisgICAgZGVmIHRlc3RfZXhwZWN0ZWRfZmFpbHVyZV9zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgIyBBIGZhaWx1cmUgaW4gYW55IHN1YnRlc3QgY291bnRzIGFzIHRoZSBleHBlY3RlZCBmYWlsdXJlIG9mIHRoZQorICAgICAgICAjIHdob2xlIHRlc3QuCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdF9kaWUoc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG9uZSBzdWNjZWVkcworICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJoZWxwIG1lISIpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG9uZSBkb2Vzbid0IGdldCBleGVjdXRlZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBjb21lIGhlcmUiKQorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZFN1YlRlc3RTdWNjZXNzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZEV4cGVjdGVkRmFpbHVyZScsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXNbMF1bMF0sIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorCiAgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9zdWNjZXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQpAQCAtMTA4LDcgKzE1OCwzMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmZhaWx1cmVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLCBbdGVzdF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX3N1Y2Nlc3Nfc3VidGVzdHMoc2VsZik6CisgICAgICAgICMgU3VjY2VzcyBpbiBhbGwgc3VidGVzdHMgY291bnRzIGFzIHRoZSB1bmV4cGVjdGVkIHN1Y2Nlc3Mgb2YKKyAgICAgICAgIyB0aGUgd2hvbGUgdGVzdC4KKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgb25lIHN1Y2NlZWRzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFNvIGRvZXMgdGhpcyBvbmUKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RTdWNjZXNzJywgJ2FkZFN1YlRlc3RTdWNjZXNzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmZhaWx1cmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLCBbdGVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKIAogICAgIGRlZiB0ZXN0X3NraXBfZG9lc250X3J1bl9zZXR1cChzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0NywzICsyMjEsNyBAQAogICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdF0pCiAgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWQsIFsodGVzdCwgInRlc3RpbmciKV0pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CmluZGV4IDJkYjk3OGQuLjA1NTFhMTYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQpAQCAtMSw3ICsxLDkgQEAKIGltcG9ydCB1bml0dGVzdAogCitpbXBvcnQgZ2MKIGltcG9ydCBzeXMKLWZyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQsIFRlc3RFcXVhbGl0eQoraW1wb3J0IHdlYWtyZWYKK2Zyb20gdW5pdHRlc3QudGVzdC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBUZXN0RXF1YWxpdHkKIAogCiAjIyMgU3VwcG9ydCBjb2RlIGZvciBUZXN0X1Rlc3RTdWl0ZQpAQCAtNDksNiArNTEsOSBAQAogICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCiAKICAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCiAgICAgIyAuLi4KQEAgLTYxLDYgKzY2LDkgQEAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW10pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCiAKICAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCiAgICAgIyAuLi4KQEAgLTgyLDYgKzkwLDE0IEBACiAgICAgICAgIHN1aXRlXzMgPSB1bml0dGVzdC5UZXN0U3VpdGUoc2V0KHN1aXRlXzEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzMuY291bnRUZXN0Q2FzZXMoKSwgMikKIAorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZV8xLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMS5jb3VudFRlc3RDYXNlcygpLCAyKQorICAgICAgICBzdWl0ZV8yLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMi5jb3VudFRlc3RDYXNlcygpLCAyKQorICAgICAgICBzdWl0ZV8zLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMy5jb3VudFRlc3RDYXNlcygpLCAyKQorCiAgICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgogICAgICMgLi4uCiAgICAgIyAiSWYgdGVzdHMgaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYW4gaXRlcmFibGUgb2YgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCkBAIC05Nyw2ICsxMTMsOSBAQAogCiAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKHRlc3RzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgICMjIyAvVGVzdHMgZm9yIFRlc3RTdWl0ZS5fX2luaXRfXwpAQCAtMTQzLDYgKzE2Miw5IEBACiAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MSwgdGVzdDIpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQogCiAgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCiAgICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgpAQCAtMTYwLDYgKzE4MiwxMCBAQAogICAgICAgICBwYXJlbnQgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QzLCBjaGlsZCwgVGVzdDEoJ3Rlc3QxJykpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LmNvdW50VGVzdENhc2VzKCksIDQpCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHBhcmVudC5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5jb3VudFRlc3RDYXNlcygpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkLmNvdW50VGVzdENhc2VzKCksIDIpCiAKICAgICAjICJSdW4gdGhlIHRlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1aXRlLCBjb2xsZWN0aW5nIHRoZSByZXN1bHQgaW50bwogICAgICMgdGhlIHRlc3QgcmVzdWx0IG9iamVjdCBwYXNzZWQgYXMgcmVzdWx0LiIKQEAgLTIxOCw2ICsyNDQsOSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RdKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCiAKICAgICAjICJBZGQgYSAuLi4gVGVzdFN1aXRlIHRvIHRoZSBzdWl0ZSIKICAgICBkZWYgdGVzdF9hZGRUZXN0X19UZXN0U3VpdGUoc2VsZik6CkBAIC0yMzEsNiArMjYwLDkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtzdWl0ZV8yXSkKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQogCiAgICAgIyAiQWRkIGFsbCB0aGUgdGVzdHMgZnJvbSBhbiBpdGVyYWJsZSBvZiBUZXN0Q2FzZSBhbmQgVGVzdFN1aXRlCiAgICAgIyBpbnN0YW5jZXMgdG8gdGhpcyB0ZXN0IHN1aXRlLiIKQEAgLTMwMCw3ICszMzIsNTQgQEAKICAgICAgICAgIyB3aGVuIHRoZSBidWcgaXMgZml4ZWQgdGhpcyBsaW5lIHdpbGwgbm90IGNyYXNoCiAgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCiAKKyAgICBkZWYgdGVzdF9yZW1vdmVfdGVzdF9hdF9pbmRleChzZWxmKToKKyAgICAgICAgaWYgbm90IHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXA6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiU3VpdGUgY2xlYW51cCBpcyBkaXNhYmxlZCIpCiAKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHN1aXRlLl90ZXN0cyA9IFsxLCAyLCAzXQorICAgICAgICBzdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXgoMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCBOb25lLCAzXSwgc3VpdGUuX3Rlc3RzKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3Rlc3RfYXRfaW5kZXhfbm90X2luZGV4YWJsZShzZWxmKToKKyAgICAgICAgaWYgbm90IHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXA6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiU3VpdGUgY2xlYW51cCBpcyBkaXNhYmxlZCIpCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5fdGVzdHMgPSBOb25lCisKKyAgICAgICAgIyBpZiBfcmVtb3ZlQXRJbmRleCByYWlzZXMgZm9yIG5vbml0ZXJhYmxlcyB0aGlzIG5leHQgbGluZSB3aWxsIGJyZWFrCisgICAgICAgIHN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleCgyKQorCisgICAgZGVmIGFzc2VydF9nYXJiYWdlX2NvbGxlY3RfdGVzdF9hZnRlcl9ydW4oc2VsZiwgVGVzdFN1aXRlQ2xhc3MpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF9ub3RoaW5nJykKKyAgICAgICAgd3JlZiA9IHdlYWtyZWYucmVmKHRlc3QpCisKKyAgICAgICAgc3VpdGUgPSBUZXN0U3VpdGVDbGFzcyhbd3JlZigpXSkKKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKworICAgICAgICBkZWwgdGVzdAorCisgICAgICAgICMgZm9yIHRoZSBiZW5lZml0IG9mIG5vbi1yZWZlcmVuY2UgY291bnRpbmcgaW1wbGVtZW50YXRpb25zCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuX3Rlc3RzLCBbTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyZWYoKSkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bl9CYXNlVGVzdFN1aXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlX2NvbGxlY3RfdGVzdF9hZnRlcl9ydW4odW5pdHRlc3QuQmFzZVRlc3RTdWl0ZSkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bl9UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bih1bml0dGVzdC5UZXN0U3VpdGUpCiAKICAgICBkZWYgdGVzdF9iYXNldGVzdHN1aXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM0Myw2ICs0MjIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKIAogCiAgICAgZGVmIHRlc3Rfb3ZlcnJpZGluZ19jYWxsKHNlbGYpOgpAQCAtMzYzLDYgKzQ0Myw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Ll90ZXN0UnVuRW50ZXJlZCkKIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzYzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICMgdG9wIGxldmVsIGRpcmVjdG9yeSBjYWNoZWQgb24gbG9hZGVyIGluc3RhbmNlCisgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcGF0dGVybiA9IHBhdHRlcm4gb3IgInRlc3QqLnB5IgorICAgICMgV2UgYXJlIGluc2lkZSB1bml0dGVzdC50ZXN0LnRlc3Rtb2NrLCBzbyB0aGUgdG9wLWxldmVsIGlzIHRocmVlIG5vdGNoZXMgdXAKKyAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUodGhpc19kaXIpKSkKKyAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX2xldmVsX2Rpcj10b3BfbGV2ZWxfZGlyKQorICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCisgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weQppbmRleCA3YjJkZDAwLi41MzkwYTRlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5CkBAIC0xNDUsMyArMTQ1LDcgQEAKICAgICAgICAgbW9jay53aWJibGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jay53aWJibGUsICdzb21lJywgICdhcmdzJykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQppbmRleCBhMzYyYTJmLi4xZGJjMGI2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQpAQCAtMzM3LDkgKzMzNywxMCBAQAogCiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgZm9yIHNwZWMgaW4gKFNvbWVDbGFzcywgU29tZUNsYXNzKCkpOgotICAgICAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhzcGVjKQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfc29tZWNsYXNzX21vY2sobW9jaykKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhTb21lQ2xhc3MpCisgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoU29tZUNsYXNzKCkpCisgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCiAKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9hdXRvc3BlY19yZXR1cm5fdmFsdWUoc2VsZik6CkBAIC01NzYsMTAgKzU3NywxMCBAQAogCiAgICAgZGVmIHRlc3Rfc3BlY19pbmhlcml0YW5jZV9mb3JfY2xhc3NlcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgYShzZWxmKToKKyAgICAgICAgICAgIGRlZiBhKHNlbGYsIHgpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGNsYXNzIEJhcihvYmplY3QpOgotICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYsIHkpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgY2xhc3NfbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhGb28pCkBAIC01ODcsMjYgKzU4OCwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm90KGNsYXNzX21vY2ssIGNsYXNzX21vY2soKSkKIAogICAgICAgICBmb3IgdGhpc19tb2NrIGluIGNsYXNzX21vY2ssIGNsYXNzX21vY2soKToKLSAgICAgICAgICAgIHRoaXNfbW9jay5hKCkKLSAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRoaXNfbW9jay5hLCAnZm9vJykKKyAgICAgICAgICAgIHRoaXNfbW9jay5hKHg9NSkKKyAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCh4PTUpCisgICAgICAgICAgICB0aGlzX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGhpc19tb2NrLmEsICdmb28nLCAnYmFyJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCB0aGlzX21vY2ssICdiJykKIAogICAgICAgICBpbnN0YW5jZV9tb2NrID0gY3JlYXRlX2F1dG9zcGVjKEZvbygpKQotICAgICAgICBpbnN0YW5jZV9tb2NrLmEoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrLmEsICdmb28nKQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEoNSkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCg1KQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKHg9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrLmEsICdmb28nLCAnYmFyJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGluc3RhbmNlX21vY2ssICdiJykKIAogICAgICAgICAjIFRoZSByZXR1cm4gdmFsdWUgaXNuJ3QgaXNuJ3QgY2FsbGFibGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrKQogCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoeT02KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgaW5zdGFuY2VfbW9jay5CYXIsICdnJykKIAotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZi5hc3NlcnRfY2FsbGVkX3dpdGgoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mLmFzc2VydF9jYWxsZWRfd2l0aCh5PTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBpbnN0YW5jZV9tb2NrLkJhcigpLCAnZycpCiAKIApAQCAtNjYzLDEyICs2NjgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQogICAgICAgICBtb2NrKDEsIDIpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIGI9MikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIpCiAKICAgICAgICAgZi5mID0gZgogICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jay5mKQogICAgICAgICBtb2NrLmYoMywgNCkKICAgICAgICAgbW9jay5mLmFzc2VydF9jYWxsZWRfd2l0aCgzLCA0KQorICAgICAgICBtb2NrLmYuYXNzZXJ0X2NhbGxlZF93aXRoKGE9MywgYj00KQogCiAKICAgICBkZWYgdGVzdF9za2lwX2F0dHJpYnV0ZWVycm9ycyhzZWxmKToKQEAgLTcwNCw5ICs3MTIsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQogICAgICAgICBtb2NrKDEpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSkKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLCAyKQogCiAgICAgICAgIG1vY2soNCwgNSkKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoNCwgNSkKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT00LCBiPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwgYT01LCBiPTQpCiAKIAogICAgIGRlZiB0ZXN0X2NsYXNzX3dpdGhfbm9faW5pdChzZWxmKToKQEAgLTcxOSwyNCArNzMxLDI3IEBACiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfY2FsbGFibGUoc2VsZik6CiAgICAgICAgIGNsYXNzIENhbGxhYmxlKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGEpOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKENhbGxhYmxlKQotICAgICAgICBtb2NrKCkKLSAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCisgICAgICAgIG1vY2soMSwgMikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxLCAyKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHg9MSwgeT0yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2ssICdhJykKIAotICAgICAgICBpbnN0YW5jZSA9IG1vY2soKQorICAgICAgICBpbnN0YW5jZSA9IG1vY2soMSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZSkKICAgICAgICAgaW5zdGFuY2UoYT0nYScpCisgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdhJykKICAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0nYScpCiAgICAgICAgIGluc3RhbmNlKCdhJykKICAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF93aXRoKCdhJykKKyAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF93aXRoKGE9J2EnKQogCi0gICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoQ2FsbGFibGUoKSkKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhDYWxsYWJsZSgxLCAyKSkKICAgICAgICAgbW9jayhhPSdhJykKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPSdhJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQpAQCAtNzc5LDcgKzc5NCwxMSBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBhID0gY3JlYXRlX2F1dG9zcGVjKEZvbykKKyAgICAgICAgYS5mKDEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGY9MTApCiAgICAgICAgIGEuZihzZWxmPTEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQogICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGY9MTApCiAKIApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1hZ2ljbWV0aG9kcy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RtYWdpY21ldGhvZHMucHkKaW5kZXggNWZmMTU4ZC4uY2MwZTcwNyAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1hZ2ljbWV0aG9kcy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bWFnaWNtZXRob2RzLnB5CkBAIC0xMjYsNiArMTI2LDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNyArIG1vY2ssIG1vY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay52YWx1ZSwgMTYpCiAKKyAgICBkZWYgdGVzdF9kaXZpc2lvbihzZWxmKToKKyAgICAgICAgb3JpZ2luYWwgPSBtb2NrID0gTW9jaygpCisgICAgICAgIG1vY2sudmFsdWUgPSAzMgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbW9jayAvIDIpCisKKyAgICAgICAgZGVmIHRydWVkaXYoc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgbW9jay52YWx1ZSAvPSBvdGhlcgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgbW9jay5fX3RydWVkaXZfXyA9IHRydWVkaXYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrIC8gMiwgbW9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLnZhbHVlLCAxNikKKworICAgICAgICBkZWwgbW9jay5fX3RydWVkaXZfXworICAgICAgICBkZWYgaXRydWVkaXYobW9jayk6CisgICAgICAgICAgICBtb2NrIC89IDQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpdHJ1ZWRpdiwgbW9jaykKKyAgICAgICAgbW9jay5fX2l0cnVlZGl2X18gPSB0cnVlZGl2CisgICAgICAgIG1vY2sgLz0gOAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2ssIG9yaWdpbmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2sudmFsdWUsIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDggLyBtb2NrKQorICAgICAgICBtb2NrLl9fcnRydWVkaXZfXyA9IHRydWVkaXYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLjUgLyBtb2NrLCBtb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2sudmFsdWUsIDQpCiAKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CmluZGV4IGNlZjU0MDUuLjIzNjc1YjkgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CkBAIC0yNSw2ICsyNSwxOCBAQAogICAgIF9fbmV4dF9fID0gbmV4dAogCiAKK2NsYXNzIFNvbWV0aGluZyhvYmplY3QpOgorICAgIGRlZiBtZXRoKHNlbGYsIGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjbWV0aChjbHMsIGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc21ldGgoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgcGFzcworCiAKIGNsYXNzIE1vY2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTQyLDYgKzE1NCwyNCBAQAogICAgICAgICBtb2NrID0gTW9jayhzaWRlX2VmZmVjdD1zaWRlX2VmZmVjdCwgcmV0dXJuX3ZhbHVlPXNlbnRpbmVsLlJFVFVSTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrKCksIHNlbnRpbmVsLlJFVFVSTikKIAorICAgIGRlZiB0ZXN0X2F1dG9zcGVjX3NpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlMTc4MjYKKyAgICAgICAgcmVzdWx0cyA9IFsxLCAyLCAzXQorICAgICAgICBkZWYgZWZmZWN0KCk6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5wb3AoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoZikKKyAgICAgICAgbW9jay5zaWRlX2VmZmVjdCA9IFsxLCAyLCAzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFttb2NrKCksIG1vY2soKSwgbW9jaygpXSwgWzEsIDIsIDNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAic2lkZSBlZmZlY3Qgbm90IHVzZWQgY29ycmVjdGx5IGluIGNyZWF0ZV9hdXRvc3BlYyIpCisgICAgICAgICMgVGVzdCB3aGVyZSBzaWRlIGVmZmVjdCBpcyBhIGNhbGxhYmxlCisgICAgICAgIHJlc3VsdHMgPSBbMSwgMiwgM10KKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhmKQorICAgICAgICBtb2NrLnNpZGVfZWZmZWN0ID0gZWZmZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW21vY2soKSwgbW9jaygpLCBtb2NrKCldLCBbMywgMiwgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxsYWJsZSBzaWRlIGVmZmVjdCBub3QgdXNlZCBjb3JyZWN0bHkiKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoJ2phdmEnIGluIHN5cy5wbGF0Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoaXMgdGVzdCBvbmx5IGFwcGxpZXMgdG8gSnl0aG9uJykKQEAgLTI3Myw2ICszMDMsNDMgQEAKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMywgYT0nZmlzaCcsIGI9J25vdGhpbmcnKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKyAgICAgICAgIyBFeHBlY3RlZCBjYWxsIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWMncyBzaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfd2l0aF9tZXRob2Rfc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIF9jaGVjayhtb2NrKToKKyAgICAgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzKQorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nKCkubWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nLmNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5jbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nLnNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5zbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisKKwogICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfb25jZV93aXRoKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIG1vY2soKQpAQCAtMjk3LDYgKzM2NCwyOSBAQAogICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfb25jZV93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPTEsIGI9MiwgYz0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisgICAgICAgICMgRXhwZWN0ZWQgY2FsbCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisgICAgICAgICMgTW9jayBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgPT4gYWx3YXlzIGZhaWxzCisgICAgICAgIG1vY2soNCwgNSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2KQorCisKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfYWNjZXNzX3JldHVybnNfbW9ja3Moc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgc29tZXRoaW5nID0gbW9jay5zb21ldGhpbmcKQEAgLTk5NSw2ICsxMDg1LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9oYXNfY2FsbHNfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrKDQsIDUsIGM9NiwgZD03KQorICAgICAgICBtb2NrKDEwLCAxMSwgYz0xMikKKyAgICAgICAgY2FsbHMgPSBbCisgICAgICAgICAgICAoJycsICgxLCAyLCAzKSwge30pLAorICAgICAgICAgICAgKCcnLCAoNCwgNSwgNiksIHsnZCc6IDd9KSwKKyAgICAgICAgICAgICgoMTAsIDExLCAxMiksIHt9KSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMsIGFueV9vcmRlcj1UcnVlKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgIyBSZXZlcnNlZCBvcmRlcgorICAgICAgICBjYWxscyA9IGxpc3QocmV2ZXJzZWQoY2FsbHMpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscykKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0sIGFueV9vcmRlcj1UcnVlKQorCisKICAgICBkZWYgdGVzdF9hc3NlcnRfYW55X2NhbGwoc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgbW9jaygxLCAyKQpAQCAtMTAyMSw2ICsxMTQ0LDI2IEBACiAgICAgICAgICkKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2FueV9jYWxsX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jayg0LCA1LCBjPTYsIGQ9NykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoNCwgNSwgNiwgNykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoYT00LCBiPTUsIGM9NiwgZD03KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfYW55X2NhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorICAgICAgICAjIEV4cGVjdGVkIGNhbGwgZG9lc24ndCBtYXRjaCB0aGUgc3BlYydzIHNpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKGU9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbi5fX2NhdXNlX18sIFR5cGVFcnJvcikKKworCiAgICAgZGVmIHRlc3RfbW9ja19jYWxsc19jcmVhdGVfYXV0b3NwZWMoc2VsZik6CiAgICAgICAgIGRlZiBmKGEsIGIpOgogICAgICAgICAgICAgcGFzcwpAQCAtMTAzOSw2ICsxMTgyLDEwIEBACiAgICAgICAgICAgICAgICAgZnVuYy5tb2NrX2NhbGxzLCBbY2FsbCgxLCAyKSwgY2FsbCgzLCA0KV0KICAgICAgICAgICAgICkKIAorICAgICNJc3N1ZTIxMjIyCisgICAgZGVmIHRlc3RfY3JlYXRlX2F1dG9zcGVjX3dpdGhfbmFtZShzZWxmKToKKyAgICAgICAgbSA9IG1vY2suY3JlYXRlX2F1dG9zcGVjKG9iamVjdCgpLCBuYW1lPSdzd2VldF9mdW5jJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3dlZXRfZnVuYycsIHJlcHIobSkpCiAKICAgICBkZWYgdGVzdF9tb2NrX2FkZF9zcGVjKHNlbGYpOgogICAgICAgICBjbGFzcyBfT25lKG9iamVjdCk6CkBAIC0xMTc3LDIwICsxMzI0LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tZXRob2RfY2FsbHMsIFtdKQogCiAKLSAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZGVsZXRpb24oc2VsZik6Ci0gICAgICAgICMgdGhpcyBiZWhhdmlvdXIgaXNuJ3QgKnVzZWZ1bCosIGJ1dCBhdCBsZWFzdCBpdCdzIG5vdyB0ZXN0ZWQuLi4KLSAgICAgICAgZm9yIEtsYXNzIGluIE1vY2ssIE1hZ2ljTW9jaywgTm9uQ2FsbGFibGVNYWdpY01vY2ssIE5vbkNhbGxhYmxlTW9jazoKLSAgICAgICAgICAgIG0gPSBLbGFzcygpCi0gICAgICAgICAgICBvcmlnaW5hbCA9IG0uZm9vCi0gICAgICAgICAgICBtLmZvbyA9IDMKLSAgICAgICAgICAgIGRlbCBtLmZvbwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZvbywgb3JpZ2luYWwpCi0KLSAgICAgICAgICAgIG5ldyA9IG0uZm9vID0gTW9jaygpCi0gICAgICAgICAgICBkZWwgbS5mb28KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5mb28sIG5ldykKLQotCiAgICAgZGVmIHRlc3RfbW9ja19wYXJlbnRzKHNlbGYpOgogICAgICAgICBmb3IgS2xhc3MgaW4gTW9jaywgTWFnaWNNb2NrOgogICAgICAgICAgICAgbSA9IEtsYXNzKCkKQEAgLTEyNTQsNyArMTM4Nyw4IEBACiAKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKLSAgICAgICAgZm9yIG1vY2sgaW4gTW9jaygpLCBNYWdpY01vY2soKToKKyAgICAgICAgZm9yIG1vY2sgaW4gKE1vY2soKSwgTWFnaWNNb2NrKCksIE5vbkNhbGxhYmxlTWFnaWNNb2NrKCksCisgICAgICAgICAgICAgICAgICAgICBOb25DYWxsYWJsZU1vY2soKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2NrLCAnbScpKQogCiAgICAgICAgICAgICBkZWwgbW9jay5tCkBAIC0xMjc0LDYgKzE0MDgsNSBAQAogICAgICAgICAgICAgbW9jay5mb28KIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKaW5kZXggYzEwOTFiNC4uYjUxNmY0MiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQpAQCAtMTIsNyArMTIsNyBAQAogZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCAoCiAgICAgTm9uQ2FsbGFibGVNb2NrLCBDYWxsYWJsZU1peGluLCBwYXRjaCwgc2VudGluZWwsCiAgICAgTWFnaWNNb2NrLCBNb2NrLCBOb25DYWxsYWJsZU1hZ2ljTW9jaywgcGF0Y2gsIF9wYXRjaCwKLSAgICBERUZBVUxULCBjYWxsLCBfZ2V0X3RhcmdldAorICAgIERFRkFVTFQsIGNhbGwsIF9nZXRfdGFyZ2V0LCBfcGF0Y2gKICkKIAogCkBAIC0xNzc5LDYgKzE3NzksMjIgQEAKICAgICAgICAgcGF0Y2hlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3MucGF0aCwgcGF0aCkKIAorICAgIGRlZiB0ZXN0X3N0b3BhbGxfbGlmbyhzZWxmKToKKyAgICAgICAgc3RvcHBlZCA9IFtdCisgICAgICAgIGNsYXNzIHRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICBvbmUgPSB0d28gPSB0aHJlZSA9IE5vbmUKKworICAgICAgICBkZWYgZ2V0X3BhdGNoKGF0dHJpYnV0ZSk6CisgICAgICAgICAgICBjbGFzcyBteXBhdGNoKF9wYXRjaCk6CisgICAgICAgICAgICAgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHN0b3BwZWQuYXBwZW5kKGF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKG15cGF0Y2gsIHNlbGYpLnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIG15cGF0Y2gobGFtYmRhOiB0aGluZywgYXR0cmlidXRlLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIE5vbmUsIE5vbmUsIE5vbmUsIHt9KQorICAgICAgICBbZ2V0X3BhdGNoKHZhbCkuc3RhcnQoKSBmb3IgdmFsIGluICgib25lIiwgInR3byIsICJ0aHJlZSIpXQorICAgICAgICBwYXRjaC5zdG9wYWxsKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0b3BwZWQsIFsidGhyZWUiLCAidHdvIiwgIm9uZSJdKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0d2l0aC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CmluZGV4IDBhMGNmYWQuLmY1NGUwNTEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CkBAIC0xNzIsNSArMTcyLDg4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKIAogCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGF0YShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlYWRsaW5lIHdpbGwgcmV0dXJuIGFsbCB0aGUgbGluZXMgZnJvbSB0aGUgZmFrZSBmaWxlCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICBsaW5lMiA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZTMgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMiwgJ2JhclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMywgJ2JhelxuJykKKworICAgICAgICAjIENoZWNrIHRoYXQgd2UgcHJvcGVybHkgZW11bGF0ZSBhIGZpbGUgdGhhdCBkb2Vzbid0IGVuZCBpbiBhIG5ld2xpbmUKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2ZvbycpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKKworCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVtdWxhdGluZyBhIGZpbGUgdGhhdCBlbmRzIGluIGEgbmV3bGluZSBjaGFyYWN0ZXIgd29ya3MKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmb29cbicsICdiYXJcbicsICdiYXpcbiddKQorCisgICAgICAgICMgVGVzdCB0aGF0IGZpbGVzIHdpdGhvdXQgYSBmaW5hbCBuZXdsaW5lIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkKKyAgICAgICAgIyBlbXVsYXRlZAorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJheicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2Zvb1xuJywgJ2JhclxuJywgJ2JheiddKQorCisKKyAgICBkZWYgdGVzdF9tb2NrX29wZW5fcmVhZF93aXRoX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIEF0IG9uZSBwb2ludCBjYWxsaW5nIHJlYWQgd2l0aCBhbiBhcmd1bWVudCB3YXMgYnJva2VuCisgICAgICAgICMgZm9yIG1vY2tzIHJldHVybmVkIGJ5IG1vY2tfb3BlbgorICAgICAgICBzb21lX2RhdGEgPSAnZm9vXG5iYXJcbmJheicKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9c29tZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2soKS5yZWFkKDEwKSwgc29tZV9kYXRhKQorCisKKyAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZF9yZWFkcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyByZWFkLCByZWFkbGluZSwgYW5kIHJlYWRsaW5lcyBwdWxscyBkYXRhCisgICAgICAgICMgc2VxdWVudGlhbGx5IGZyb20gdGhlIGRhdGEgd2UgcHJlbG9hZCB3aXRoCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICByZXN0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3QsIFsnYmFyXG4nLCAnYmF6XG4nXSkKKworICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICBsaW5lMSA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgcmVzdCA9IGgucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTEsICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdCwgJ2JhclxuYmF6XG4nKQorCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX3JldHVybl92YWx1ZXMoc2VsZik6CisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb28nKQorICAgICAgICBoYW5kbGUgPSBtb2NrKCkKKworICAgICAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSAnYmFyJworICAgICAgICBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gJ2JhcicKKyAgICAgICAgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgPSBbJ2JhciddCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZCgpLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmUoKSwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lcygpLCBbJ2JhciddKQorCisgICAgICAgICMgY2FsbCByZXBlYXRlZGx5IHRvIGNoZWNrIHRoYXQgYSBTdG9wSXRlcmF0aW9uIGlzIG5vdCBwcm9wYWdhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lKCksICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZSgpLCAnYmFyJykKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3V0aWwucHkgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQppbmRleCBjY2RmMGI4Li5hZWU0OThmIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdXRpbC5weQorKysgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQpAQCAtMSwxMCArMSw0NyBAQAogIiIiVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucy4iIiIKIAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgT3JkZXJlZERpY3QKK2Zyb20gb3MucGF0aCBpbXBvcnQgY29tbW9ucHJlZml4CiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKIF9NQVhfTEVOR1RIID0gODAKK19QTEFDRUhPTERFUl9MRU4gPSAxMgorX01JTl9CRUdJTl9MRU4gPSA1CitfTUlOX0VORF9MRU4gPSA1CitfTUlOX0NPTU1PTl9MRU4gPSA1CitfTUlOX0RJRkZfTEVOID0gX01BWF9MRU5HVEggLSBcCisgICAgICAgICAgICAgICAoX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9DT01NT05fTEVOICsKKyAgICAgICAgICAgICAgICBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9FTkRfTEVOKQorYXNzZXJ0IF9NSU5fRElGRl9MRU4gPj0gMAorCitkZWYgX3Nob3J0ZW4ocywgcHJlZml4bGVuLCBzdWZmaXhsZW4pOgorICAgIHNraXAgPSBsZW4ocykgLSBwcmVmaXhsZW4gLSBzdWZmaXhsZW4KKyAgICBpZiBza2lwID4gX1BMQUNFSE9MREVSX0xFTjoKKyAgICAgICAgcyA9ICclc1slZCBjaGFyc10lcycgJSAoc1s6cHJlZml4bGVuXSwgc2tpcCwgc1tsZW4ocykgLSBzdWZmaXhsZW46XSkKKyAgICByZXR1cm4gcworCitkZWYgX2NvbW1vbl9zaG9ydGVuX3JlcHIoKmFyZ3MpOgorICAgIGFyZ3MgPSB0dXBsZShtYXAoc2FmZV9yZXByLCBhcmdzKSkKKyAgICBtYXhsZW4gPSBtYXgobWFwKGxlbiwgYXJncykpCisgICAgaWYgbWF4bGVuIDw9IF9NQVhfTEVOR1RIOgorICAgICAgICByZXR1cm4gYXJncworCisgICAgcHJlZml4ID0gY29tbW9ucHJlZml4KGFyZ3MpCisgICAgcHJlZml4bGVuID0gbGVuKHByZWZpeCkKKworICAgIGNvbW1vbl9sZW4gPSBfTUFYX0xFTkdUSCAtIFwKKyAgICAgICAgICAgICAgICAgKG1heGxlbiAtIHByZWZpeGxlbiArIF9NSU5fQkVHSU5fTEVOICsgX1BMQUNFSE9MREVSX0xFTikKKyAgICBpZiBjb21tb25fbGVuID4gX01JTl9DT01NT05fTEVOOgorICAgICAgICBhc3NlcnQgX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9DT01NT05fTEVOICsgXAorICAgICAgICAgICAgICAgKG1heGxlbiAtIHByZWZpeGxlbikgPCBfTUFYX0xFTkdUSAorICAgICAgICBwcmVmaXggPSBfc2hvcnRlbihwcmVmaXgsIF9NSU5fQkVHSU5fTEVOLCBjb21tb25fbGVuKQorICAgICAgICByZXR1cm4gdHVwbGUocHJlZml4ICsgc1twcmVmaXhsZW46XSBmb3IgcyBpbiBhcmdzKQorCisgICAgcHJlZml4ID0gX3Nob3J0ZW4ocHJlZml4LCBfTUlOX0JFR0lOX0xFTiwgX01JTl9DT01NT05fTEVOKQorICAgIHJldHVybiB0dXBsZShwcmVmaXggKyBfc2hvcnRlbihzW3ByZWZpeGxlbjpdLCBfTUlOX0RJRkZfTEVOLCBfTUlOX0VORF9MRU4pCisgICAgICAgICAgICAgICAgIGZvciBzIGluIGFyZ3MpCisKIGRlZiBzYWZlX3JlcHIob2JqLCBzaG9ydD1GYWxzZSk6CiAgICAgdHJ5OgogICAgICAgICByZXN1bHQgPSByZXByKG9iaikKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvZXJyb3IucHkgYi9MaWIvdXJsbGliL2Vycm9yLnB5CmluZGV4IGI3MTJlYmIuLjQ1YjcxNjkgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvZXJyb3IucHkKKysrIGIvTGliL3VybGxpYi9lcnJvci5weQpAQCAtMSw2ICsxLDYgQEAKICIiIkV4Y2VwdGlvbiBjbGFzc2VzIHJhaXNlZCBieSB1cmxsaWIuCiAKLVRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBpcyBVUkxFcnJvciwgd2hpY2ggaW5oZXJpdHMgZnJvbSBJT0Vycm9yLiAgSXQKK1RoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBpcyBVUkxFcnJvciwgd2hpY2ggaW5oZXJpdHMgZnJvbSBPU0Vycm9yLiAgSXQKIGRvZXNuJ3QgZGVmaW5lIGFueSBiZWhhdmlvciBvZiBpdHMgb3duLCBidXQgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbAogZXhjZXB0aW9ucyBkZWZpbmVkIGluIHRoaXMgcGFja2FnZS4KIApAQCAtMTcsMTEgKzE3LDExIEBACiAKIAogIyBkbyB0aGVzZSBlcnJvciBjbGFzc2VzIG1ha2Ugc2Vuc2U/Ci0jIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIElPRXJyb3Igc3R1ZmYgaXMgb3ZlcnJpZGRlbi4gIHdlIGp1c3Qgd2FudCB0byBiZQorIyBtYWtlIHN1cmUgYWxsIG9mIHRoZSBPU0Vycm9yIHN0dWZmIGlzIG92ZXJyaWRkZW4uICB3ZSBqdXN0IHdhbnQgdG8gYmUKICMgc3VidHlwZXMuCiAKLWNsYXNzIFVSTEVycm9yKElPRXJyb3IpOgotICAgICMgVVJMRXJyb3IgaXMgYSBzdWItdHlwZSBvZiBJT0Vycm9yLCBidXQgaXQgZG9lc24ndCBzaGFyZSBhbnkgb2YKK2NsYXNzIFVSTEVycm9yKE9TRXJyb3IpOgorICAgICMgVVJMRXJyb3IgaXMgYSBzdWItdHlwZSBvZiBPU0Vycm9yLCBidXQgaXQgZG9lc24ndCBzaGFyZSBhbnkgb2YKICAgICAjIHRoZSBpbXBsZW1lbnRhdGlvbi4gIG5lZWQgdG8gb3ZlcnJpZGUgX19pbml0X18gYW5kIF9fc3RyX18uCiAgICAgIyBJdCBzZXRzIHNlbGYuYXJncyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIEVudmlyb25tZW50RXJyb3IKICAgICAjIHN1YmNsYXNzZXMsIGJ1dCBhcmdzIGRvZXNuJ3QgaGF2ZSB0aGUgdHlwaWNhbCBmb3JtYXQgd2l0aCBlcnJubyBpbgpAQCAtNjEsOSArNjEsMTMgQEAKICAgICBkZWYgcmVhc29uKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5tc2cKIAotICAgIGRlZiBpbmZvKHNlbGYpOgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoZWFkZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5oZHJzCiAKKyAgICBAaGVhZGVycy5zZXR0ZXIKKyAgICBkZWYgaGVhZGVycyhzZWxmLCBoZWFkZXJzKToKKyAgICAgICAgc2VsZi5oZHJzID0gaGVhZGVycwogCiAjIGV4Y2VwdGlvbiByYWlzZWQgd2hlbiBkb3dubG9hZGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGgKIGNsYXNzIENvbnRlbnRUb29TaG9ydEVycm9yKFVSTEVycm9yKToKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcGFyc2UucHkgYi9MaWIvdXJsbGliL3BhcnNlLnB5CmluZGV4IDk3NWM2ZmYuLmEyYTkxMmQgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcGFyc2UucHkKKysrIGIvTGliL3VybGxpYi9wYXJzZS5weQpAQCAtNDcyLDggKzQ3Miw3IEBACiAgICAgcmV0dXJuIF9jb2VyY2VfcmVzdWx0KERlZnJhZ1Jlc3VsdChkZWZyYWcsIGZyYWcpKQogCiBfaGV4ZGlnID0gJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnCi1faGV4dG9ieXRlID0geyhhICsgYikuZW5jb2RlKCk6IGJ5dGVzKFtpbnQoYSArIGIsIDE2KV0pCi0gICAgICAgICAgICAgIGZvciBhIGluIF9oZXhkaWcgZm9yIGIgaW4gX2hleGRpZ30KK19oZXh0b2J5dGUgPSBOb25lCiAKIGRlZiB1bnF1b3RlX3RvX2J5dGVzKHN0cmluZyk6CiAgICAgIiIidW5xdW90ZV90b19ieXRlcygnYWJjJTIwZGVmJykgLT4gYidhYmMgZGVmJy4iIiIKQEAgLTQ5MCw2ICs0ODksMTIgQEAKICAgICAgICAgcmV0dXJuIHN0cmluZwogICAgIHJlcyA9IFtiaXRzWzBdXQogICAgIGFwcGVuZCA9IHJlcy5hcHBlbmQKKyAgICAjIERlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgdGFibGUgdG8gbm90IHdhc3RlIG1lbW9yeQorICAgICMgaWYgdGhlIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZAorICAgIGdsb2JhbCBfaGV4dG9ieXRlCisgICAgaWYgX2hleHRvYnl0ZSBpcyBOb25lOgorICAgICAgICBfaGV4dG9ieXRlID0geyhhICsgYikuZW5jb2RlKCk6IGJ5dGVzKFtpbnQoYSArIGIsIDE2KV0pCisgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgaW4gX2hleGRpZyBmb3IgYiBpbiBfaGV4ZGlnfQogICAgIGZvciBpdGVtIGluIGJpdHNbMTpdOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBhcHBlbmQoX2hleHRvYnl0ZVtpdGVtWzoyXV0pCkBAIC04NDYsNyArODUxLDYgQEAKICAgICAiIiJzcGxpdHR5cGUoJ3R5cGU6b3BhcXVlc3RyaW5nJykgLS0+ICd0eXBlJywgJ29wYXF1ZXN0cmluZycuIiIiCiAgICAgZ2xvYmFsIF90eXBlcHJvZwogICAgIGlmIF90eXBlcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3R5cGVwcm9nID0gcmUuY29tcGlsZSgnXihbXi86XSspOicpCiAKICAgICBtYXRjaCA9IF90eXBlcHJvZy5tYXRjaCh1cmwpCkBAIC04NjAsNyArODY0LDYgQEAKICAgICAiIiJzcGxpdGhvc3QoJy8vaG9zdFs6cG9ydF0vcGF0aCcpIC0tPiAnaG9zdFs6cG9ydF0nLCAnL3BhdGgnLiIiIgogICAgIGdsb2JhbCBfaG9zdHByb2cKICAgICBpZiBfaG9zdHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9ob3N0cHJvZyA9IHJlLmNvbXBpbGUoJ14vLyhbXi8/XSopKC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfaG9zdHByb2cubWF0Y2godXJsKQpAQCAtODc3LDcgKzg4MCw2IEBACiAgICAgIiIic3BsaXR1c2VyKCd1c2VyWzpwYXNzd2RdQGhvc3RbOnBvcnRdJykgLS0+ICd1c2VyWzpwYXNzd2RdJywgJ2hvc3RbOnBvcnRdJy4iIiIKICAgICBnbG9iYWwgX3VzZXJwcm9nCiAgICAgaWYgX3VzZXJwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdXNlcnByb2cgPSByZS5jb21waWxlKCdeKC4qKUAoLiopJCcpCiAKICAgICBtYXRjaCA9IF91c2VycHJvZy5tYXRjaChob3N0KQpAQCAtODg5LDcgKzg5MSw2IEBACiAgICAgIiIic3BsaXRwYXNzd2QoJ3VzZXI6cGFzc3dkJykgLT4gJ3VzZXInLCAncGFzc3dkJy4iIiIKICAgICBnbG9iYWwgX3Bhc3N3ZHByb2cKICAgICBpZiBfcGFzc3dkcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3Bhc3N3ZHByb2cgPSByZS5jb21waWxlKCdeKFteOl0qKTooLiopJCcscmUuUykKIAogICAgIG1hdGNoID0gX3Bhc3N3ZHByb2cubWF0Y2godXNlcikKQEAgLTkwMiw3ICs5MDMsNiBAQAogICAgICIiInNwbGl0cG9ydCgnaG9zdDpwb3J0JykgLS0+ICdob3N0JywgJ3BvcnQnLiIiIgogICAgIGdsb2JhbCBfcG9ydHByb2cKICAgICBpZiBfcG9ydHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopOihbMC05XSopJCcpCiAKICAgICBtYXRjaCA9IF9wb3J0cHJvZy5tYXRjaChob3N0KQpAQCAtOTIwLDcgKzkyMCw2IEBACiAgICAgUmV0dXJuIE5vbmUgaWYgJzonIGJ1dCBub3QgYSB2YWxpZCBudW1iZXIuIiIiCiAgICAgZ2xvYmFsIF9ucG9ydHByb2cKICAgICBpZiBfbnBvcnRwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfbnBvcnRwcm9nID0gcmUuY29tcGlsZSgnXiguKik6KC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfbnBvcnRwcm9nLm1hdGNoKGhvc3QpCkBAIC05MzksNyArOTM4LDYgQEAKICAgICAiIiJzcGxpdHF1ZXJ5KCcvcGF0aD9xdWVyeScpIC0tPiAnL3BhdGgnLCAncXVlcnknLiIiIgogICAgIGdsb2JhbCBfcXVlcnlwcm9nCiAgICAgaWYgX3F1ZXJ5cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3F1ZXJ5cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopXD8oW14/XSopJCcpCiAKICAgICBtYXRjaCA9IF9xdWVyeXByb2cubWF0Y2godXJsKQpAQCAtOTUxLDcgKzk0OSw2IEBACiAgICAgIiIic3BsaXR0YWcoJy9wYXRoI3RhZycpIC0tPiAnL3BhdGgnLCAndGFnJy4iIiIKICAgICBnbG9iYWwgX3RhZ3Byb2cKICAgICBpZiBfdGFncHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3RhZ3Byb2cgPSByZS5jb21waWxlKCdeKC4qKSMoW14jXSopJCcpCiAKICAgICBtYXRjaCA9IF90YWdwcm9nLm1hdGNoKHVybCkKQEAgLTk2OSw3ICs5NjYsNiBAQAogICAgICIiInNwbGl0dmFsdWUoJ2F0dHI9dmFsdWUnKSAtLT4gJ2F0dHInLCAndmFsdWUnLiIiIgogICAgIGdsb2JhbCBfdmFsdWVwcm9nCiAgICAgaWYgX3ZhbHVlcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3ZhbHVlcHJvZyA9IHJlLmNvbXBpbGUoJ14oW149XSopPSguKikkJykKIAogICAgIG1hdGNoID0gX3ZhbHVlcHJvZy5tYXRjaChhdHRyKQpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5IGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CmluZGV4IGVmNjJhY2MuLjY3Yzc1NjYgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcmVxdWVzdC5weQorKysgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKQEAgLTE4LDcgKzE4LDcgQEAKIHVybGxpYi4gIHBhc3MgdGhlIHVybCBhbmQgb3B0aW9uYWxseSBkYXRhIHRvIHBvc3QgdG8gYW4gSFRUUCBVUkwsIGFuZAogZ2V0IGEgZmlsZS1saWtlIG9iamVjdCBiYWNrLiAgT25lIGRpZmZlcmVuY2UgaXMgdGhhdCB5b3UgY2FuIGFsc28gcGFzcwogYSBSZXF1ZXN0IGluc3RhbmNlIGluc3RlYWQgb2YgVVJMLiAgUmFpc2VzIGEgVVJMRXJyb3IgKHN1YmNsYXNzIG9mCi1JT0Vycm9yKTsgZm9yIEhUVFAgZXJyb3JzLCByYWlzZXMgYW4gSFRUUEVycm9yLCB3aGljaCBjYW4gYWxzbyBiZQorT1NFcnJvcik7IGZvciBIVFRQIGVycm9ycywgcmFpc2VzIGFuIEhUVFBFcnJvciwgd2hpY2ggY2FuIGFsc28gYmUKIHRyZWF0ZWQgYXMgYSB2YWxpZCByZXNwb25zZS4KIAogYnVpbGRfb3BlbmVyIC0tIEZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBPcGVuZXJEaXJlY3RvciBpbnN0YW5jZS4KQEAgLTEwMyw3ICsxMDMsOCBAQAogZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0ICgKICAgICB1cmxwYXJzZSwgdXJsc3BsaXQsIHVybGpvaW4sIHVud3JhcCwgcXVvdGUsIHVucXVvdGUsCiAgICAgc3BsaXR0eXBlLCBzcGxpdGhvc3QsIHNwbGl0cG9ydCwgc3BsaXR1c2VyLCBzcGxpdHBhc3N3ZCwKLSAgICBzcGxpdGF0dHIsIHNwbGl0cXVlcnksIHNwbGl0dmFsdWUsIHNwbGl0dGFnLCB0b19ieXRlcywgdXJsdW5wYXJzZSkKKyAgICBzcGxpdGF0dHIsIHNwbGl0cXVlcnksIHNwbGl0dmFsdWUsIHNwbGl0dGFnLCB0b19ieXRlcywKKyAgICB1bnF1b3RlX3RvX2J5dGVzLCB1cmx1bnBhcnNlKQogZnJvbSB1cmxsaWIucmVzcG9uc2UgaW1wb3J0IGFkZGluZm91cmwsIGFkZGNsb3NlaG9vawogCiAjIGNoZWNrIGZvciBTU0wKQEAgLTEyMSw3ICsxMjIsNyBAQAogICAgICdIVFRQUGFzc3dvcmRNZ3InLCAnSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbScsCiAgICAgJ0Fic3RyYWN0QmFzaWNBdXRoSGFuZGxlcicsICdIVFRQQmFzaWNBdXRoSGFuZGxlcicsICdQcm94eUJhc2ljQXV0aEhhbmRsZXInLAogICAgICdBYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyJywgJ0hUVFBEaWdlc3RBdXRoSGFuZGxlcicsICdQcm94eURpZ2VzdEF1dGhIYW5kbGVyJywKLSAgICAnSFRUUEhhbmRsZXInLCAnRmlsZUhhbmRsZXInLCAnRlRQSGFuZGxlcicsICdDYWNoZUZUUEhhbmRsZXInLAorICAgICdIVFRQSGFuZGxlcicsICdGaWxlSGFuZGxlcicsICdGVFBIYW5kbGVyJywgJ0NhY2hlRlRQSGFuZGxlcicsICdEYXRhSGFuZGxlcicsCiAgICAgJ1Vua25vd25IYW5kbGVyJywgJ0hUVFBFcnJvclByb2Nlc3NvcicsCiAgICAgIyBGdW5jdGlvbnMKICAgICAndXJsb3BlbicsICdpbnN0YWxsX29wZW5lcicsICdidWlsZF9vcGVuZXInLApAQCAtMTQwLDEzICsxNDEsOSBAQAogICAgIGlmIGNhZmlsZSBvciBjYXBhdGggb3IgY2FkZWZhdWx0OgogICAgICAgICBpZiBub3QgX2hhdmVfc3NsOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1NMIHN1cHBvcnQgbm90IGF2YWlsYWJsZScpCi0gICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCi0gICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAotICAgICAgICBpZiBjYWZpbGUgb3IgY2FwYXRoOgotICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlLCBjYXBhdGgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Y2FmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoPWNhcGF0aCkKICAgICAgICAgaHR0cHNfaGFuZGxlciA9IEhUVFBTSGFuZGxlcihjb250ZXh0PWNvbnRleHQsIGNoZWNrX2hvc3RuYW1lPVRydWUpCiAgICAgICAgIG9wZW5lciA9IGJ1aWxkX29wZW5lcihodHRwc19oYW5kbGVyKQogICAgIGVsaWYgX29wZW5lciBpcyBOb25lOgpAQCAtMjI3LDcgKzIyNCw3IEBACiAgICAgZm9yIHRlbXBfZmlsZSBpbiBfdXJsX3RlbXBmaWxlczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBfZmlsZSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVsIF91cmxfdGVtcGZpbGVzWzpdCkBAIC0yNTgsMjQgKzI1NSw2MCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIGRhdGE9Tm9uZSwgaGVhZGVycz17fSwKICAgICAgICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0PU5vbmUsIHVudmVyaWZpYWJsZT1GYWxzZSwKICAgICAgICAgICAgICAgICAgbWV0aG9kPU5vbmUpOgotICAgICAgICAjIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKLSAgICAgICAgc2VsZi5mdWxsX3VybCA9IHVud3JhcCh1cmwpCi0gICAgICAgIHNlbGYuZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQgPSBzcGxpdHRhZyhzZWxmLmZ1bGxfdXJsKQotICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuZnVsbF91cmwgPSB1cmwKICAgICAgICAgc2VsZi5oZWFkZXJzID0ge30KKyAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycyA9IHt9CisgICAgICAgIHNlbGYuX2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKICAgICAgICAgc2VsZi5fdHVubmVsX2hvc3QgPSBOb25lCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGhlYWRlcnMuaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYuYWRkX2hlYWRlcihrZXksIHZhbHVlKQotICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzID0ge30KICAgICAgICAgaWYgb3JpZ2luX3JlcV9ob3N0IGlzIE5vbmU6CiAgICAgICAgICAgICBvcmlnaW5fcmVxX2hvc3QgPSByZXF1ZXN0X2hvc3Qoc2VsZikKICAgICAgICAgc2VsZi5vcmlnaW5fcmVxX2hvc3QgPSBvcmlnaW5fcmVxX2hvc3QKICAgICAgICAgc2VsZi51bnZlcmlmaWFibGUgPSB1bnZlcmlmaWFibGUKLSAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKKyAgICAgICAgaWYgbWV0aG9kOgorICAgICAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmdWxsX3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mcmFnbWVudDoKKyAgICAgICAgICAgIHJldHVybiAne30je30nLmZvcm1hdChzZWxmLl9mdWxsX3VybCwgc2VsZi5mcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Z1bGxfdXJsCisKKyAgICBAZnVsbF91cmwuc2V0dGVyCisgICAgZGVmIGZ1bGxfdXJsKHNlbGYsIHVybCk6CisgICAgICAgICMgdW53cmFwKCc8VVJMOnR5cGU6Ly9ob3N0L3BhdGg+JykgLS0+ICd0eXBlOi8vaG9zdC9wYXRoJworICAgICAgICBzZWxmLl9mdWxsX3VybCA9IHVud3JhcCh1cmwpCisgICAgICAgIHNlbGYuX2Z1bGxfdXJsLCBzZWxmLmZyYWdtZW50ID0gc3BsaXR0YWcoc2VsZi5fZnVsbF91cmwpCiAgICAgICAgIHNlbGYuX3BhcnNlKCkKIAorICAgIEBmdWxsX3VybC5kZWxldGVyCisgICAgZGVmIGZ1bGxfdXJsKHNlbGYpOgorICAgICAgICBzZWxmLl9mdWxsX3VybCA9IE5vbmUKKyAgICAgICAgc2VsZi5mcmFnbWVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZWxlY3RvciA9ICcnCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGF0YShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGEKKworICAgIEBkYXRhLnNldHRlcgorICAgIGRlZiBkYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhICE9IHNlbGYuX2RhdGE6CisgICAgICAgICAgICBzZWxmLl9kYXRhID0gZGF0YQorICAgICAgICAgICAgIyBpc3N1ZSAxNjQ2NAorICAgICAgICAgICAgIyBpZiB3ZSBjaGFuZ2UgZGF0YSB3ZSBuZWVkIHRvIHJlbW92ZSBjb250ZW50LWxlbmd0aCBoZWFkZXIKKyAgICAgICAgICAgICMgKGNhdXNlIGl0J3MgbW9zdCBwcm9iYWJseSBjYWxjdWxhdGVkIGZvciBwcmV2aW91cyB2YWx1ZSkKKyAgICAgICAgICAgIGlmIHNlbGYuaGFzX2hlYWRlcigiQ29udGVudC1sZW5ndGgiKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikKKworICAgIEBkYXRhLmRlbGV0ZXIKKyAgICBkZWYgZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorCiAgICAgZGVmIF9wYXJzZShzZWxmKToKLSAgICAgICAgc2VsZi50eXBlLCByZXN0ID0gc3BsaXR0eXBlKHNlbGYuZnVsbF91cmwpCisgICAgICAgIHNlbGYudHlwZSwgcmVzdCA9IHNwbGl0dHlwZShzZWxmLl9mdWxsX3VybCkKICAgICAgICAgaWYgc2VsZi50eXBlIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHVybCB0eXBlOiAlciIgJSBzZWxmLmZ1bGxfdXJsKQogICAgICAgICBzZWxmLmhvc3QsIHNlbGYuc2VsZWN0b3IgPSBzcGxpdGhvc3QocmVzdCkKQEAgLTI4NCw2MiArMzE3LDExIEBACiAKICAgICBkZWYgZ2V0X21ldGhvZChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIEhUVFAgcmVxdWVzdCBtZXRob2QuIiIiCi0gICAgICAgIGlmIHNlbGYubWV0aG9kIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubWV0aG9kCi0gICAgICAgIGVsaWYgc2VsZi5kYXRhIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuICJQT1NUIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICJHRVQiCisgICAgICAgIGRlZmF1bHRfbWV0aG9kID0gIlBPU1QiIGlmIHNlbGYuZGF0YSBpcyBub3QgTm9uZSBlbHNlICJHRVQiCisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsICdtZXRob2QnLCBkZWZhdWx0X21ldGhvZCkKIAogICAgIGRlZiBnZXRfZnVsbF91cmwoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6Ci0gICAgICAgICAgICByZXR1cm4gJyVzIyVzJyAlIChzZWxmLmZ1bGxfdXJsLCBzZWxmLmZyYWdtZW50KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVsbF91cmwKLQotICAgICMgQmVnaW4gZGVwcmVjYXRlZCBtZXRob2RzCi0KLSAgICBkZWYgYWRkX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmFkZF9kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCi0KLSAgICBkZWYgaGFzX2RhdGEoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0Lmhhc19kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5kYXRhIGlzIG5vdCBOb25lCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5kYXRhCi0KLSAgICBkZWYgZ2V0X3R5cGUoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF90eXBlIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi50eXBlCi0KLSAgICBkZWYgZ2V0X2hvc3Qoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9ob3N0IG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5ob3N0Ci0KLSAgICBkZWYgZ2V0X3NlbGVjdG9yKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfc2VsZWN0b3IgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLnNlbGVjdG9yCi0KLSAgICBkZWYgaXNfdW52ZXJpZmlhYmxlKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5pc191bnZlcmlmaWFibGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLnVudmVyaWZpYWJsZQotCi0gICAgZGVmIGdldF9vcmlnaW5fcmVxX2hvc3Qoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9vcmlnaW5fcmVxX2hvc3QgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLm9yaWdpbl9yZXFfaG9zdAotCi0gICAgIyBFbmQgZGVwcmVjYXRlZCBtZXRob2RzCisgICAgICAgIHJldHVybiBzZWxmLmZ1bGxfdXJsCiAKICAgICBkZWYgc2V0X3Byb3h5KHNlbGYsIGhvc3QsIHR5cGUpOgogICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ2h0dHBzJyBhbmQgbm90IHNlbGYuX3R1bm5lbF9ob3N0OgpAQCAtMzY5LDYgKzM1MSwxMCBAQAogICAgICAgICAgICAgaGVhZGVyX25hbWUsCiAgICAgICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLmdldChoZWFkZXJfbmFtZSwgZGVmYXVsdCkpCiAKKyAgICBkZWYgcmVtb3ZlX2hlYWRlcihzZWxmLCBoZWFkZXJfbmFtZSk6CisgICAgICAgIHNlbGYuaGVhZGVycy5wb3AoaGVhZGVyX25hbWUsIE5vbmUpCisgICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMucG9wKGhlYWRlcl9uYW1lLCBOb25lKQorCiAgICAgZGVmIGhlYWRlcl9pdGVtcyhzZWxmKToKICAgICAgICAgaGRycyA9IHNlbGYudW5yZWRpcmVjdGVkX2hkcnMuY29weSgpCiAgICAgICAgIGhkcnMudXBkYXRlKHNlbGYuaGVhZGVycykKQEAgLTUyNSwxOSArNTExLDE3IEBACiAgICAgSWYgYW55IG9mIHRoZSBoYW5kbGVycyBwYXNzZWQgYXMgYXJndW1lbnRzIGFyZSBzdWJjbGFzc2VzIG9mIHRoZQogICAgIGRlZmF1bHQgaGFuZGxlcnMsIHRoZSBkZWZhdWx0IGhhbmRsZXJzIHdpbGwgbm90IGJlIHVzZWQuCiAgICAgIiIiCi0gICAgZGVmIGlzY2xhc3Mob2JqKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqLCB0eXBlKSBvciBoYXNhdHRyKG9iaiwgIl9fYmFzZXNfXyIpCi0KICAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCiAgICAgZGVmYXVsdF9jbGFzc2VzID0gW1Byb3h5SGFuZGxlciwgVW5rbm93bkhhbmRsZXIsIEhUVFBIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICBIVFRQRGVmYXVsdEVycm9ySGFuZGxlciwgSFRUUFJlZGlyZWN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3Nvcl0KKyAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgRGF0YUhhbmRsZXJdCiAgICAgaWYgaGFzYXR0cihodHRwLmNsaWVudCwgIkhUVFBTQ29ubmVjdGlvbiIpOgogICAgICAgICBkZWZhdWx0X2NsYXNzZXMuYXBwZW5kKEhUVFBTSGFuZGxlcikKICAgICBza2lwID0gc2V0KCkKICAgICBmb3Iga2xhc3MgaW4gZGVmYXVsdF9jbGFzc2VzOgogICAgICAgICBmb3IgY2hlY2sgaW4gaGFuZGxlcnM6Ci0gICAgICAgICAgICBpZiBpc2NsYXNzKGNoZWNrKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hlY2ssIHR5cGUpOgogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoY2hlY2ssIGtsYXNzKToKICAgICAgICAgICAgICAgICAgICAgc2tpcC5hZGQoa2xhc3MpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoY2hlY2ssIGtsYXNzKToKQEAgLTU0OSw3ICs1MzMsNyBAQAogICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoa2xhc3MoKSkKIAogICAgIGZvciBoIGluIGhhbmRsZXJzOgotICAgICAgICBpZiBpc2NsYXNzKGgpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGgsIHR5cGUpOgogICAgICAgICAgICAgaCA9IGgoKQogICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaCkKICAgICByZXR1cm4gb3BlbmVyCkBAIC03MDMsNTAgKzY4Nyw3IEBACiAKICAgICBJZiBhIFVSTCBpcyBzdXBwbGllZCwgaXQgbXVzdCBoYXZlIGFuIGF1dGhvcml0eSAoaG9zdDpwb3J0KSBjb21wb25lbnQuCiAgICAgQWNjb3JkaW5nIHRvIFJGQyAzOTg2LCBoYXZpbmcgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCBtZWFucyB0aGUgVVJMIG11c3QKLSAgICBoYXZlIHR3byBzbGFzaGVzIGFmdGVyIHRoZSBzY2hlbWU6Ci0KLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdmaWxlOi9mdHAuZXhhbXBsZS5jb20vJykKLSAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgVmFsdWVFcnJvcjogcHJveHkgVVJMIHdpdGggbm8gYXV0aG9yaXR5OiAnZmlsZTovZnRwLmV4YW1wbGUuY29tLycKLQotICAgIFRoZSBmaXJzdCB0aHJlZSBpdGVtcyBvZiB0aGUgcmV0dXJuZWQgdHVwbGUgbWF5IGJlIE5vbmUuCi0KLSAgICBFeGFtcGxlcyBvZiBhdXRob3JpdHkgcGFyc2luZzoKLQotICAgID4+PiBfcGFyc2VfcHJveHkoJ3Byb3h5LmV4YW1wbGUuY29tJykKLSAgICAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tJykKLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLSAgICAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKQotCi0gICAgVGhlIGF1dGhvcml0eSBjb21wb25lbnQgbWF5IG9wdGlvbmFsbHkgaW5jbHVkZSB1c2VyaW5mbyAoYXNzdW1lZCB0byBiZQotICAgIHVzZXJuYW1lOnBhc3N3b3JkKToKLQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbScpCi0gICAgKE5vbmUsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb20nKQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLSAgICAoTm9uZSwgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLQotICAgIFNhbWUgZXhhbXBsZXMsIGJ1dCB3aXRoIFVSTHMgaW5zdGVhZDoKLQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2h0dHA6Ly9wcm94eS5leGFtcGxlLmNvbS8nKQotICAgICgnaHR0cCcsIE5vbmUsIE5vbmUsICdwcm94eS5leGFtcGxlLmNvbScpCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnaHR0cDovL3Byb3h5LmV4YW1wbGUuY29tOjMxMjgvJykKLSAgICAoJ2h0dHAnLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnaHR0cDovL2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbS8nKQotICAgICgnaHR0cCcsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb20nKQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2h0dHA6Ly9qb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb206MzEyOCcpCi0gICAgKCdodHRwJywgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLQotICAgIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGF1dGhvcml0eSBpcyBpZ25vcmVkOgotCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnZnRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tL3J1YmJpc2g6MzEyOCcpCi0gICAgKCdmdHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykKLQotICAgIFRlc3QgZm9yIG5vIHRyYWlsaW5nICcvJyBjYXNlOgotCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnaHR0cDovL2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbScpCi0gICAgKCdodHRwJywgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbScpCi0KKyAgICBoYXZlIHR3byBzbGFzaGVzIGFmdGVyIHRoZSBzY2hlbWUuCiAgICAgIiIiCiAgICAgc2NoZW1lLCByX3NjaGVtZSA9IHNwbGl0dHlwZShwcm94eSkKICAgICBpZiBub3Qgcl9zY2hlbWUuc3RhcnRzd2l0aCgiLyIpOgpAQCAtOTA1LDEwICs4NDYsNiBAQAogICAgICAgICAgICAgcGFzc3dvcmRfbWdyID0gSFRUUFBhc3N3b3JkTWdyKCkKICAgICAgICAgc2VsZi5wYXNzd2QgPSBwYXNzd29yZF9tZ3IKICAgICAgICAgc2VsZi5hZGRfcGFzc3dvcmQgPSBzZWxmLnBhc3N3ZC5hZGRfcGFzc3dvcmQKLSAgICAgICAgc2VsZi5yZXRyaWVkID0gMAotCi0gICAgZGVmIHJlc2V0X3JldHJ5X2NvdW50KHNlbGYpOgotICAgICAgICBzZWxmLnJldHJpZWQgPSAwCiAKICAgICBkZWYgaHR0cF9lcnJvcl9hdXRoX3JlcWVkKHNlbGYsIGF1dGhyZXEsIGhvc3QsIHJlcSwgaGVhZGVycyk6CiAgICAgICAgICMgaG9zdCBtYXkgYmUgYW4gYXV0aG9yaXR5ICh3aXRob3V0IHVzZXJpbmZvKSBvciBhIFVSTCB3aXRoIGFuCkBAIC05MTYsMTMgKzg1Myw2IEBACiAgICAgICAgICMgWFhYIGNvdWxkIGJlIG11bHRpcGxlIGhlYWRlcnMKICAgICAgICAgYXV0aHJlcSA9IGhlYWRlcnMuZ2V0KGF1dGhyZXEsIE5vbmUpCiAKLSAgICAgICAgaWYgc2VsZi5yZXRyaWVkID4gNToKLSAgICAgICAgICAgICMgcmV0cnkgc2VuZGluZyB0aGUgdXNlcm5hbWU6cGFzc3dvcmQgNSB0aW1lcyBiZWZvcmUgZmFpbGluZy4KLSAgICAgICAgICAgIHJhaXNlIEhUVFBFcnJvcihyZXEuZ2V0X2Z1bGxfdXJsKCksIDQwMSwgImJhc2ljIGF1dGggZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVycywgTm9uZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYucmV0cmllZCArPSAxCi0KICAgICAgICAgaWYgYXV0aHJlcToKICAgICAgICAgICAgIHNjaGVtZSA9IGF1dGhyZXEuc3BsaXQoKVswXQogICAgICAgICAgICAgaWYgc2NoZW1lLmxvd2VyKCkgIT0gJ2Jhc2ljJzoKQEAgLTkzNywxNyArODY3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJCYXNpYyBBdXRoIFJlYWxtIHdhcyB1bnF1b3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJXYXJuaW5nLCAyKQogICAgICAgICAgICAgICAgICAgICBpZiBzY2hlbWUubG93ZXIoKSA9PSAnYmFzaWMnOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJldHJ5X2h0dHBfYmFzaWNfYXV0aChob3N0LCByZXEsIHJlYWxtKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVzcG9uc2UgYW5kIHJlc3BvbnNlLmNvZGUgIT0gNDAxOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0cmllZCA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0cnlfaHR0cF9iYXNpY19hdXRoKGhvc3QsIHJlcSwgcmVhbG0pCiAKICAgICBkZWYgcmV0cnlfaHR0cF9iYXNpY19hdXRoKHNlbGYsIGhvc3QsIHJlcSwgcmVhbG0pOgogICAgICAgICB1c2VyLCBwdyA9IHNlbGYucGFzc3dkLmZpbmRfdXNlcl9wYXNzd29yZChyZWFsbSwgaG9zdCkKICAgICAgICAgaWYgcHcgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByYXcgPSAiJXM6JXMiICUgKHVzZXIsIHB3KQogICAgICAgICAgICAgYXV0aCA9ICJCYXNpYyAiICsgYmFzZTY0LmI2NGVuY29kZShyYXcuZW5jb2RlKCkpLmRlY29kZSgiYXNjaWkiKQotICAgICAgICAgICAgaWYgcmVxLmhlYWRlcnMuZ2V0KHNlbGYuYXV0aF9oZWFkZXIsIE5vbmUpID09IGF1dGg6CisgICAgICAgICAgICBpZiByZXEuZ2V0X2hlYWRlcihzZWxmLmF1dGhfaGVhZGVyLCBOb25lKSA9PSBhdXRoOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICByZXEuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoc2VsZi5hdXRoX2hlYWRlciwgYXV0aCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5vcGVuKHJlcSwgdGltZW91dD1yZXEudGltZW91dCkKQEAgLTk2Myw3ICs4OTAsNiBAQAogICAgICAgICB1cmwgPSByZXEuZnVsbF91cmwKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmh0dHBfZXJyb3JfYXV0aF9yZXFlZCgnd3d3LWF1dGhlbnRpY2F0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsIHJlcSwgaGVhZGVycykKLSAgICAgICAgc2VsZi5yZXNldF9yZXRyeV9jb3VudCgpCiAgICAgICAgIHJldHVybiByZXNwb25zZQogCiAKQEAgLTk3OSw3ICs5MDUsNiBAQAogICAgICAgICBhdXRob3JpdHkgPSByZXEuaG9zdAogICAgICAgICByZXNwb25zZSA9IHNlbGYuaHR0cF9lcnJvcl9hdXRoX3JlcWVkKCdwcm94eS1hdXRoZW50aWNhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5LCByZXEsIGhlYWRlcnMpCi0gICAgICAgIHNlbGYucmVzZXRfcmV0cnlfY291bnQoKQogICAgICAgICByZXR1cm4gcmVzcG9uc2UKIAogCkBAIC0xMjQ1LDE4ICsxMTcwLDIxIEBACiAgICAgICAgICAgICBoLnNldF90dW5uZWwocmVxLl90dW5uZWxfaG9zdCwgaGVhZGVycz10dW5uZWxfaGVhZGVycykKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLnNlbGVjdG9yLCByZXEuZGF0YSwgaGVhZGVycykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgotICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZSBVUkxFcnJvcihlcnIpCi0gICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaC5yZXF1ZXN0KHJlcS5nZXRfbWV0aG9kKCksIHJlcS5zZWxlY3RvciwgcmVxLmRhdGEsIGhlYWRlcnMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgorICAgICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKGVycikKICAgICAgICAgICAgIHIgPSBoLmdldHJlc3BvbnNlKCkKLSAgICAgICAgICAgICMgSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzZW5kIHVzIGEgJ0Nvbm5lY3Rpb246IGNsb3NlJyBoZWFkZXIsCi0gICAgICAgICAgICAjIEhUVFBDb25uZWN0aW9uIGFzc3VtZXMgdGhlIHNvY2tldCBzaG91bGQgYmUgbGVmdCBvcGVuLiBNYW51YWxseQotICAgICAgICAgICAgIyBtYXJrIHRoZSBzb2NrZXQgdG8gYmUgY2xvc2VkIHdoZW4gdGhpcyByZXNwb25zZSBvYmplY3QgZ29lcyBhd2F5LgotICAgICAgICAgICAgaWYgaC5zb2NrOgotICAgICAgICAgICAgICAgIGguc29jay5jbG9zZSgpCi0gICAgICAgICAgICAgICAgaC5zb2NrID0gTm9uZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgIyBJZiB0aGUgc2VydmVyIGRvZXMgbm90IHNlbmQgdXMgYSAnQ29ubmVjdGlvbjogY2xvc2UnIGhlYWRlciwKKyAgICAgICAgIyBIVFRQQ29ubmVjdGlvbiBhc3N1bWVzIHRoZSBzb2NrZXQgc2hvdWxkIGJlIGxlZnQgb3Blbi4gTWFudWFsbHkKKyAgICAgICAgIyBtYXJrIHRoZSBzb2NrZXQgdG8gYmUgY2xvc2VkIHdoZW4gdGhpcyByZXNwb25zZSBvYmplY3QgZ29lcyBhd2F5LgorICAgICAgICBpZiBoLnNvY2s6CisgICAgICAgICAgICBoLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgaC5zb2NrID0gTm9uZQogCiAgICAgICAgIHIudXJsID0gcmVxLmdldF9mdWxsX3VybCgpCiAgICAgICAgICMgVGhpcyBsaW5lIHJlcGxhY2VzIHRoZSAubXNnIGF0dHJpYnV0ZSBvZiB0aGUgSFRUUFJlc3BvbnNlCkBAIC0xMzc0LDcgKzEzMDIsNyBAQAogICAgICAgICB1cmwgPSByZXEuc2VsZWN0b3IKICAgICAgICAgaWYgdXJsWzoyXSA9PSAnLy8nIGFuZCB1cmxbMjozXSAhPSAnLycgYW5kIChyZXEuaG9zdCBhbmQKICAgICAgICAgICAgICAgICByZXEuaG9zdCAhPSAnbG9jYWxob3N0Jyk6Ci0gICAgICAgICAgICBpZiBub3QgcmVxLmhvc3QgaXMgc2VsZi5nZXRfbmFtZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCByZXEuaG9zdCBpbiBzZWxmLmdldF9uYW1lcygpOgogICAgICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKCJmaWxlOi8vIHNjaGVtZSBpcyBzdXBwb3J0ZWQgb25seSBvbiBsb2NhbGhvc3QiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYub3Blbl9sb2NhbF9maWxlKHJlcSkKQEAgLTE0NTEsNyArMTM3OSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaG9zdCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3QpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihtc2cpCiAgICAgICAgIHBhdGgsIGF0dHJzID0gc3BsaXRhdHRyKHJlcS5zZWxlY3RvcikKICAgICAgICAgZGlycyA9IHBhdGguc3BsaXQoJy8nKQpAQCAtMTUzNyw2ICsxNDY1LDM2IEBACiAgICAgICAgIHNlbGYuY2FjaGUuY2xlYXIoKQogICAgICAgICBzZWxmLnRpbWVvdXQuY2xlYXIoKQogCitjbGFzcyBEYXRhSGFuZGxlcihCYXNlSGFuZGxlcik6CisgICAgZGVmIGRhdGFfb3BlbihzZWxmLCByZXEpOgorICAgICAgICAjIGRhdGEgVVJMcyBhcyBzcGVjaWZpZWQgaW4gUkZDIDIzOTcuCisgICAgICAgICMKKyAgICAgICAgIyBpZ25vcmVzIFBPU1RlZCBkYXRhCisgICAgICAgICMKKyAgICAgICAgIyBzeW50YXg6CisgICAgICAgICMgZGF0YXVybCAgIDo9ICJkYXRhOiIgWyBtZWRpYXR5cGUgXSBbICI7YmFzZTY0IiBdICIsIiBkYXRhCisgICAgICAgICMgbWVkaWF0eXBlIDo9IFsgdHlwZSAiLyIgc3VidHlwZSBdICooICI7IiBwYXJhbWV0ZXIgKQorICAgICAgICAjIGRhdGEgICAgICA6PSAqdXJsY2hhcgorICAgICAgICAjIHBhcmFtZXRlciA6PSBhdHRyaWJ1dGUgIj0iIHZhbHVlCisgICAgICAgIHVybCA9IHJlcS5mdWxsX3VybAorCisgICAgICAgIHNjaGVtZSwgZGF0YSA9IHVybC5zcGxpdCgiOiIsMSkKKyAgICAgICAgbWVkaWF0eXBlLCBkYXRhID0gZGF0YS5zcGxpdCgiLCIsMSkKKworICAgICAgICAjIGV2ZW4gYmFzZTY0IGVuY29kZWQgZGF0YSBVUkxzIG1pZ2h0IGJlIHF1b3RlZCBzbyB1bnF1b3RlIGluIGFueSBjYXNlOgorICAgICAgICBkYXRhID0gdW5xdW90ZV90b19ieXRlcyhkYXRhKQorICAgICAgICBpZiBtZWRpYXR5cGUuZW5kc3dpdGgoIjtiYXNlNjQiKToKKyAgICAgICAgICAgIGRhdGEgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoZGF0YSkKKyAgICAgICAgICAgIG1lZGlhdHlwZSA9IG1lZGlhdHlwZVs6LTddCisKKyAgICAgICAgaWYgbm90IG1lZGlhdHlwZToKKyAgICAgICAgICAgIG1lZGlhdHlwZSA9ICJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkiCisKKyAgICAgICAgaGVhZGVycyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIkNvbnRlbnQtdHlwZTogJXNcbkNvbnRlbnQtbGVuZ3RoOiAlZFxuIiAlCisgICAgICAgICAgICAobWVkaWF0eXBlLCBsZW4oZGF0YSkpKQorCisgICAgICAgIHJldHVybiBhZGRpbmZvdXJsKGlvLkJ5dGVzSU8oZGF0YSksIGhlYWRlcnMsIHVybCkKKwogCiAjIENvZGUgbW92ZSBmcm9tIHRoZSBvbGQgdXJsbGliIG1vZHVsZQogCkBAIC0xNjYwLDIwICsxNjE4LDIwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgbmFtZSkodXJsKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKSh1cmwsIGRhdGEpCi0gICAgICAgIGV4Y2VwdCBIVFRQRXJyb3I6CisgICAgICAgIGV4Y2VwdCAoSFRUUEVycm9yLCBVUkxFcnJvcik6CiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCiAKICAgICBkZWYgb3Blbl91bmtub3duKHNlbGYsIGZ1bGx1cmwsIGRhdGE9Tm9uZSk6CiAgICAgICAgICIiIk92ZXJyaWRhYmxlIGludGVyZmFjZSB0byBvcGVuIHVua25vd24gVVJMIHR5cGUuIiIiCiAgICAgICAgIHR5cGUsIHVybCA9IHNwbGl0dHlwZShmdWxsdXJsKQotICAgICAgICByYWlzZSBJT0Vycm9yKCd1cmwgZXJyb3InLCAndW5rbm93biB1cmwgdHlwZScsIHR5cGUpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3VybCBlcnJvcicsICd1bmtub3duIHVybCB0eXBlJywgdHlwZSkKIAogICAgIGRlZiBvcGVuX3Vua25vd25fcHJveHkoc2VsZiwgcHJveHksIGZ1bGx1cmwsIGRhdGE9Tm9uZSk6CiAgICAgICAgICIiIk92ZXJyaWRhYmxlIGludGVyZmFjZSB0byBvcGVuIHVua25vd24gVVJMIHR5cGUuIiIiCiAgICAgICAgIHR5cGUsIHVybCA9IHNwbGl0dHlwZShmdWxsdXJsKQotICAgICAgICByYWlzZSBJT0Vycm9yKCd1cmwgZXJyb3InLCAnaW52YWxpZCBwcm94eSBmb3IgJXMnICUgdHlwZSwgcHJveHkpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3VybCBlcnJvcicsICdpbnZhbGlkIHByb3h5IGZvciAlcycgJSB0eXBlLCBwcm94eSkKIAogICAgICMgRXh0ZXJuYWwgaW50ZXJmYWNlCiAgICAgZGVmIHJldHJpZXZlKHNlbGYsIHVybCwgZmlsZW5hbWU9Tm9uZSwgcmVwb3J0aG9vaz1Ob25lLCBkYXRhPU5vbmUpOgpAQCAtMTY4OSw3ICsxNjQ3LDcgQEAKICAgICAgICAgICAgICAgICBoZHJzID0gZnAuaW5mbygpCiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiB1cmwycGF0aG5hbWUoc3BsaXRob3N0KHVybDEpWzFdKSwgaGRycwotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnAgPSBzZWxmLm9wZW4odXJsLCBkYXRhKQogICAgICAgICB0cnk6CkBAIC0xNzgyLDcgKzE3NDAsNyBAQAogICAgICAgICAgICAgICAgIGlmIHByb3h5X2J5cGFzcyhyZWFsaG9zdCk6CiAgICAgICAgICAgICAgICAgICAgIGhvc3QgPSByZWFsaG9zdAogCi0gICAgICAgIGlmIG5vdCBob3N0OiByYWlzZSBJT0Vycm9yKCdodHRwIGVycm9yJywgJ25vIGhvc3QgZ2l2ZW4nKQorICAgICAgICBpZiBub3QgaG9zdDogcmFpc2UgT1NFcnJvcignaHR0cCBlcnJvcicsICdubyBob3N0IGdpdmVuJykKIAogICAgICAgICBpZiBwcm94eV9wYXNzd2Q6CiAgICAgICAgICAgICBwcm94eV9wYXNzd2QgPSB1bnF1b3RlKHByb3h5X3Bhc3N3ZCkKQEAgLTE4NTUsNyArMTgxMyw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmh0dHBfZXJyb3JfZGVmYXVsdCh1cmwsIGZwLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMpCiAKICAgICBkZWYgaHR0cF9lcnJvcl9kZWZhdWx0KHNlbGYsIHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycyk6Ci0gICAgICAgICIiIkRlZmF1bHQgZXJyb3IgaGFuZGxlcjogY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHJhaXNlIElPRXJyb3IuIiIiCisgICAgICAgICIiIkRlZmF1bHQgZXJyb3IgaGFuZGxlcjogY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHJhaXNlIE9TRXJyb3IuIiIiCiAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgcmFpc2UgSFRUUEVycm9yKHVybCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBOb25lKQogCkBAIC0xOTQwLDcgKzE4OTgsNyBAQAogICAgICAgICAjIFhYWCB0aHJlYWQgdW5zYWZlIQogICAgICAgICBpZiBsZW4oc2VsZi5mdHBjYWNoZSkgPiBNQVhGVFBDQUNIRToKICAgICAgICAgICAgICMgUHJ1bmUgdGhlIGNhY2hlLCByYXRoZXIgYXJiaXRyYXJpbHkKLSAgICAgICAgICAgIGZvciBrIGluIHNlbGYuZnRwY2FjaGUua2V5cygpOgorICAgICAgICAgICAgZm9yIGsgaW4gbGlzdChzZWxmLmZ0cGNhY2hlKToKICAgICAgICAgICAgICAgICBpZiBrICE9IGtleToKICAgICAgICAgICAgICAgICAgICAgdiA9IHNlbGYuZnRwY2FjaGVba10KICAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuZnRwY2FjaGVba10KQEAgLTE5ODIsNyArMTk0MCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIFt0eXBlLCBkYXRhXSA9IHVybC5zcGxpdCgnLCcsIDEpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQogICAgICAgICBpZiBub3QgdHlwZToKICAgICAgICAgICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJJwogICAgICAgICBzZW1pID0gdHlwZS5yZmluZCgnOycpCkBAIC0yNDMxLDcgKzIzODksNyBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgaG9zdElQID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdG9ubHkpCiAgICAgICAgICAgICAgICAgICAgIGhvc3RJUCA9IGlwMm51bShob3N0SVApCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgYmFzZSA9IGlwMm51bShtLmdyb3VwKDEpKQpAQCAtMjUxNyw3ICsyNDc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3hpZXNbJ2h0dHBzJ10gPSAnaHR0cHM6Ly8lcycgJSBwcm94eVNlcnZlcgogICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllc1snZnRwJ10gPSAnZnRwOi8vJXMnICUgcHJveHlTZXJ2ZXIKICAgICAgICAgICAgIGludGVybmV0U2V0dGluZ3MuQ2xvc2UoKQotICAgICAgICBleGNlcHQgKFdpbmRvd3NFcnJvciwgVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgICAgIyBFaXRoZXIgcmVnaXN0cnkga2V5IG5vdCBmb3VuZCBldGMsIG9yIHRoZSB2YWx1ZSBpbiBhbgogICAgICAgICAgICAgIyB1bmV4cGVjdGVkIGZvcm1hdC4KICAgICAgICAgICAgICMgcHJveGllcyBhbHJlYWR5IHNldCB1cCB0byBiZSBlbXB0eSBzbyBub3RoaW5nIHRvIGRvCkBAIC0yNTQ3LDcgKzI1MDUsNyBAQAogICAgICAgICAgICAgcHJveHlPdmVycmlkZSA9IHN0cih3aW5yZWcuUXVlcnlWYWx1ZUV4KGludGVybmV0U2V0dGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm94eU92ZXJyaWRlJylbMF0pCiAgICAgICAgICAgICAjIF5eXl4gUmV0dXJuZWQgYXMgVW5pY29kZSBidXQgcHJvYmxlbXMgaWYgbm90IGNvbnZlcnRlZCB0byBBU0NJSQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIGlmIG5vdCBwcm94eUVuYWJsZSBvciBub3QgcHJveHlPdmVycmlkZToKICAgICAgICAgICAgIHJldHVybiAwCkBAIC0yNTU4LDEzICsyNTE2LDEzIEBACiAgICAgICAgICAgICBhZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUocmF3SG9zdCkKICAgICAgICAgICAgIGlmIGFkZHIgIT0gcmF3SG9zdDoKICAgICAgICAgICAgICAgICBob3N0LmFwcGVuZChhZGRyKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnFkbiA9IHNvY2tldC5nZXRmcWRuKHJhd0hvc3QpCiAgICAgICAgICAgICBpZiBmcWRuICE9IHJhd0hvc3Q6CiAgICAgICAgICAgICAgICAgaG9zdC5hcHBlbmQoZnFkbikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgbWFrZSBhIGNoZWNrIHZhbHVlIGxpc3QgZnJvbSB0aGUgcmVnaXN0cnkgZW50cnk6IHJlcGxhY2UgdGhlCiAgICAgICAgICMgJzxsb2NhbD4nIHN0cmluZyBieSB0aGUgbG9jYWxob3N0IGVudHJ5IGFuZCB0aGUgY29ycmVzcG9uZGluZwpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXNwb25zZS5weSBiL0xpYi91cmxsaWIvcmVzcG9uc2UucHkKaW5kZXggMWNmMWQxYS4uNGExNDNiMCAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9yZXNwb25zZS5weQorKysgYi9MaWIvdXJsbGliL3Jlc3BvbnNlLnB5CkBAIC02LDYwICs2LDM5IEBACiBoZWFkZXJzIGFuZCBhIGdldHVybCgpIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIHVybC4KICIiIgogCi1jbGFzcyBhZGRiYXNlKG9iamVjdCk6Ci0gICAgIiIiQmFzZSBjbGFzcyBmb3IgYWRkaW5mbyBhbmQgYWRkY2xvc2Vob29rLiIiIgoraW1wb3J0IHRlbXBmaWxlCisKK19fYWxsX18gPSBbJ2FkZGJhc2UnLCAnYWRkY2xvc2Vob29rJywgJ2FkZGluZm8nLCAnYWRkaW5mb3VybCddCisKKworY2xhc3MgYWRkYmFzZSh0ZW1wZmlsZS5fVGVtcG9yYXJ5RmlsZVdyYXBwZXIpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGFkZGluZm8gYW5kIGFkZGNsb3NlaG9vay4gSXMgYSBnb29kIGlkZWEgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4iIiIKIAogICAgICMgWFhYIEFkZCBhIG1ldGhvZCB0byBleHBvc2UgdGhlIHRpbWVvdXQgb24gdGhlIHVuZGVybHlpbmcgc29ja2V0PwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwKToKLSAgICAgICAgIyBUT0RPKGpoeWx0b24pOiBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gZGVsZWdhdGUgdXNpbmcgaW8/CisgICAgICAgIHN1cGVyKGFkZGJhc2UsICBzZWxmKS5fX2luaXRfXyhmcCwgJzx1cmxsaWIgcmVzcG9uc2U+JywgZGVsZXRlPUZhbHNlKQorICAgICAgICAjIEtlZXAgcmVmZXJlbmNlIGFyb3VuZCBhcyB0aGlzIHdhcyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBBUEkuCiAgICAgICAgIHNlbGYuZnAgPSBmcAotICAgICAgICBzZWxmLnJlYWQgPSBzZWxmLmZwLnJlYWQKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IHNlbGYuZnAucmVhZGxpbmUKLSAgICAgICAgIyBUT0RPKGpoeWx0b24pOiBNYWtlIHN1cmUgYW4gb2JqZWN0IHdpdGggcmVhZGxpbmVzKCkgaXMgYWxzbyBpdGVyYWJsZQotICAgICAgICBpZiBoYXNhdHRyKHNlbGYuZnAsICJyZWFkbGluZXMiKToKLSAgICAgICAgICAgIHNlbGYucmVhZGxpbmVzID0gc2VsZi5mcC5yZWFkbGluZXMKLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLmZwLCAiZmlsZW5vIik6Ci0gICAgICAgICAgICBzZWxmLmZpbGVubyA9IHNlbGYuZnAuZmlsZW5vCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZpbGVubyA9IGxhbWJkYTogTm9uZQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAjIEFzc2lnbmluZyBgX19pdGVyX19gIHRvIHRoZSBpbnN0YW5jZSBkb2Vzbid0IHdvcmsgYXMgaW50ZW5kZWQKLSAgICAgICAgIyBiZWNhdXNlIHRoZSBpdGVyIGJ1aWx0aW4gZG9lcyBzb21ldGhpbmcgbGlrZSBgY2xzLl9faXRlcl9fKG9iailgCi0gICAgICAgICMgYW5kIHRodXMgZmFpbHMgdG8gZmluZCB0aGUgX2JvdW5kXyBtZXRob2QgYG9iai5fX2l0ZXJfX2AuCi0gICAgICAgICMgUmV0dXJuaW5nIGp1c3QgYHNlbGYuZnBgIHdvcmtzIGZvciBidWlsdC1pbiBmaWxlIG9iamVjdHMgYnV0Ci0gICAgICAgICMgbWlnaHQgbm90IHdvcmsgZm9yIGdlbmVyYWwgZmlsZS1saWtlIG9iamVjdHMuCi0gICAgICAgIHJldHVybiBpdGVyKHNlbGYuZnApCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAnPCVzIGF0ICVyIHdob3NlIGZwID0gJXI+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKHNlbGYpLCBzZWxmLmZwKQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmZwOgotICAgICAgICAgICAgc2VsZi5mcC5jbG9zZSgpCi0gICAgICAgIHNlbGYuZnAgPSBOb25lCi0gICAgICAgIHNlbGYucmVhZCA9IE5vbmUKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IE5vbmUKLSAgICAgICAgc2VsZi5yZWFkbGluZXMgPSBOb25lCi0gICAgICAgIHNlbGYuZmlsZW5vID0gTm9uZQotICAgICAgICBzZWxmLl9faXRlcl9fID0gTm9uZQotICAgICAgICBzZWxmLl9fbmV4dF9fID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc2VsZiksIHNlbGYuZmlsZSkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZnAgaXMgTm9uZToKKyAgICAgICAgaWYgc2VsZi5mcC5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlIikKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICAgc2VsZi5jbG9zZSgpCiAKKwogY2xhc3MgYWRkY2xvc2Vob29rKGFkZGJhc2UpOgogICAgICIiIkNsYXNzIHRvIGFkZCBhIGNsb3NlIGhvb2sgdG8gYW4gb3BlbiBmaWxlLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBjbG9zZWhvb2ssICpob29rYXJncyk6Ci0gICAgICAgIGFkZGJhc2UuX19pbml0X18oc2VsZiwgZnApCisgICAgICAgIHN1cGVyKGFkZGNsb3NlaG9vaywgc2VsZikuX19pbml0X18oZnApCiAgICAgICAgIHNlbGYuY2xvc2Vob29rID0gY2xvc2Vob29rCiAgICAgICAgIHNlbGYuaG9va2FyZ3MgPSBob29rYXJncwogCkBAIC02OCwzMCArNDcsMjggQEAKICAgICAgICAgICAgIHNlbGYuY2xvc2Vob29rKCpzZWxmLmhvb2thcmdzKQogICAgICAgICAgICAgc2VsZi5jbG9zZWhvb2sgPSBOb25lCiAgICAgICAgICAgICBzZWxmLmhvb2thcmdzID0gTm9uZQotICAgICAgICBhZGRiYXNlLmNsb3NlKHNlbGYpCisgICAgICAgIHN1cGVyKGFkZGNsb3NlaG9vaywgc2VsZikuY2xvc2UoKQorCiAKIGNsYXNzIGFkZGluZm8oYWRkYmFzZSk6CiAgICAgIiIiY2xhc3MgdG8gYWRkIGFuIGluZm8oKSBtZXRob2QgdG8gYW4gb3BlbiBmaWxlLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBoZWFkZXJzKToKLSAgICAgICAgYWRkYmFzZS5fX2luaXRfXyhzZWxmLCBmcCkKKyAgICAgICAgc3VwZXIoYWRkaW5mbywgc2VsZikuX19pbml0X18oZnApCiAgICAgICAgIHNlbGYuaGVhZGVycyA9IGhlYWRlcnMKIAogICAgIGRlZiBpbmZvKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXJzCiAKLWNsYXNzIGFkZGluZm91cmwoYWRkYmFzZSk6CisKK2NsYXNzIGFkZGluZm91cmwoYWRkaW5mbyk6CiAgICAgIiIiY2xhc3MgdG8gYWRkIGluZm8oKSBhbmQgZ2V0dXJsKCkgbWV0aG9kcyB0byBhbiBvcGVuIGZpbGUuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnAsIGhlYWRlcnMsIHVybCwgY29kZT1Ob25lKToKLSAgICAgICAgYWRkYmFzZS5fX2luaXRfXyhzZWxmLCBmcCkKLSAgICAgICAgc2VsZi5oZWFkZXJzID0gaGVhZGVycworICAgICAgICBzdXBlcihhZGRpbmZvdXJsLCBzZWxmKS5fX2luaXRfXyhmcCwgaGVhZGVycykKICAgICAgICAgc2VsZi51cmwgPSB1cmwKICAgICAgICAgc2VsZi5jb2RlID0gY29kZQogCi0gICAgZGVmIGluZm8oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmhlYWRlcnMKLQogICAgIGRlZiBnZXRjb2RlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5jb2RlCiAKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcm9ib3RwYXJzZXIucHkgYi9MaWIvdXJsbGliL3JvYm90cGFyc2VyLnB5CmluZGV4IDk3OGJhNTguLjFkN2I3NTEgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcm9ib3RwYXJzZXIucHkKKysrIGIvTGliL3VybGxpYi9yb2JvdHBhcnNlci5weQpAQCAtNyw3ICs3LDcgQEAKICAgICAyKSBQU0YgbGljZW5zZSBmb3IgUHl0aG9uIDIuMgogCiAgICAgVGhlIHJvYm90cy50eHQgRXhjbHVzaW9uIFByb3RvY29sIGlzIGltcGxlbWVudGVkIGFzIHNwZWNpZmllZCBpbgotICAgIGh0dHA6Ly9pbmZvLndlYmNyYXdsZXIuY29tL21hay9wcm9qZWN0cy9yb2JvdHMvbm9yb2JvdHMtcmZjLmh0bWwKKyAgICBodHRwOi8vd3d3LnJvYm90c3R4dC5vcmcvbm9yb2JvdHMtcmZjLnR4dAogIiIiCiAKIGltcG9ydCB1cmxsaWIucGFyc2UsIHVybGxpYi5yZXF1ZXN0CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5jb2RlIGluICg0MDEsIDQwMyk6CiAgICAgICAgICAgICAgICAgc2VsZi5kaXNhbGxvd19hbGwgPSBUcnVlCi0gICAgICAgICAgICBlbGlmIGVyci5jb2RlID49IDQwMDoKKyAgICAgICAgICAgIGVsaWYgZXJyLmNvZGUgPj0gNDAwIGFuZCBlcnIuY29kZSA8IDUwMDoKICAgICAgICAgICAgICAgICBzZWxmLmFsbG93X2FsbCA9IFRydWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhdyA9IGYucmVhZCgpCkBAIC04NSw2ICs4NSw3IEBACiAgICAgICAgIHN0YXRlID0gMAogICAgICAgICBlbnRyeSA9IEVudHJ5KCkKIAorICAgICAgICBzZWxmLm1vZGlmaWVkKCkKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAxOgpAQCAtMTI5LDYgKzEzMCwxMiBAQAogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGlmIHNlbGYuYWxsb3dfYWxsOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBVbnRpbCB0aGUgcm9ib3RzLnR4dCBmaWxlIGhhcyBiZWVuIHJlYWQgb3IgZm91bmQgbm90CisgICAgICAgICMgdG8gZXhpc3QsIHdlIG11c3QgYXNzdW1lIHRoYXQgbm8gdXJsIGlzIGFsbG93YWJsZS4KKyAgICAgICAgIyBUaGlzIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyB3aGVuIGEgdXNlciBlcnJvbmVub3VzbHkKKyAgICAgICAgIyBjYWxscyBjYW5fZmV0Y2goKSBiZWZvcmUgY2FsbGluZyByZWFkKCkuCisgICAgICAgIGlmIG5vdCBzZWxmLmxhc3RfY2hlY2tlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAjIHNlYXJjaCBmb3IgZ2l2ZW4gdXNlciBhZ2VudCBtYXRjaGVzCiAgICAgICAgICMgdGhlIGZpcnN0IG1hdGNoIGNvdW50cwogICAgICAgICBwYXJzZWRfdXJsID0gdXJsbGliLnBhcnNlLnVybHBhcnNlKHVybGxpYi5wYXJzZS51bnF1b3RlKHVybCkpCmRpZmYgLS1naXQgYS9MaWIvdXVpZC5weSBiL0xpYi91dWlkLnB5CmluZGV4IDk5NDYwNDIuLjkwZjM2YWIgMTAwNjQ0Ci0tLSBhL0xpYi91dWlkLnB5CisrKyBiL0xpYi91dWlkLnB5CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIGlmIGxlbihieXRlcykgIT0gMTY6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYnl0ZXMgaXMgbm90IGEgMTYtY2hhciBzdHJpbmcnKQogICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnl0ZXMsIGJ5dGVzXyksIHJlcHIoYnl0ZXMpCi0gICAgICAgICAgICBpbnQgPSBpbnRfKCgnJTAyeCcqMTYpICUgdHVwbGUoYnl0ZXMpLCAxNikKKyAgICAgICAgICAgIGludCA9IGludF8uZnJvbV9ieXRlcyhieXRlcywgYnl0ZW9yZGVyPSdiaWcnKQogICAgICAgICBpZiBmaWVsZHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBsZW4oZmllbGRzKSAhPSA2OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ZpZWxkcyBpcyBub3QgYSA2LXR1cGxlJykKQEAgLTMyMSw4ICszMjEsOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIHRyeToKLSAgICAgICAgIyBMQ19BTEwgdG8gZW5zdXJlIEVuZ2xpc2ggb3V0cHV0LCAyPi9kZXYvbnVsbCB0bwotICAgICAgICAjIHByZXZlbnQgb3V0cHV0IG9uIHN0ZGVycgorICAgICAgICAjIExDX0FMTCB0byBlbnN1cmUgRW5nbGlzaCBvdXRwdXQsIDI+L2Rldi9udWxsIHRvIHByZXZlbnQgb3V0cHV0IG9uCisgICAgICAgICMgc3RkZXJyIChOb3RlOiB3ZSBkb24ndCBoYXZlIGFuIGV4YW1wbGUgd2hlcmUgdGhlIHdvcmRzIHdlIHNlYXJjaCBmb3IKKyAgICAgICAgIyBhcmUgYWN0dWFsbHkgbG9jYWxpemVkLCBidXQgaW4gdGhlb3J5IHNvbWUgc3lzdGVtIGNvdWxkIGRvIHNvLikKICAgICAgICAgY21kID0gJ0xDX0FMTD1DICVzICVzIDI+L2Rldi9udWxsJyAlIChleGVjdXRhYmxlLCBhcmdzKQogICAgICAgICB3aXRoIG9zLnBvcGVuKGNtZCkgYXMgcGlwZToKICAgICAgICAgICAgIGZvciBsaW5lIGluIHBpcGU6CkBAIC0zMzksNyArMzQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRhc2hlcy4gVGhlc2Ugc2hvdWxkIGJlIGlnbm9yZWQgaW4gZmF2b3Igb2YgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVhbCBNQUMgYWRkcmVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogCiBkZWYgX2lmY29uZmlnX2dldG5vZGUoKToKQEAgLTM4MCwxNSArMzgxLDEzIEBACiAgICAgZm9yIGRpciBpbiBkaXJzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwaXBlID0gb3MucG9wZW4ob3MucGF0aC5qb2luKGRpciwgJ2lwY29uZmlnJykgKyAnIC9hbGwnKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBlbHNlOgorICAgICAgICB3aXRoIHBpcGU6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgogICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpLmxvd2VyKCkKICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaCgnKFswLTlhLWZdWzAtOWEtZl0tKXs1fVswLTlhLWZdWzAtOWEtZl0nLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUucmVwbGFjZSgnLScsICcnKSwgMTYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBwaXBlLmNsb3NlKCkKIAogZGVmIF9uZXRiaW9zX2dldG5vZGUoKToKICAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gV2luZG93cyB1c2luZyBOZXRCSU9TIGNhbGxzLgpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvX19pbml0X18ucHkgYi9MaWIvdmVudi9fX2luaXRfXy5weQppbmRleCAzNjA2MzcwLi4zYTdlOGUyIDEwMDY0NAotLS0gYS9MaWIvdmVudi9fX2luaXRfXy5weQorKysgYi9MaWIvdmVudi9fX2luaXRfXy5weQpAQCAtMSw3ICsxLDcgQEAKICIiIgogVmlydHVhbCBlbnZpcm9ubWVudCAodmVudikgcGFja2FnZSBmb3IgUHl0aG9uLiBCYXNlZCBvbiBQRVAgNDA1LgogCi1Db3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBWaW5heSBTYWppcC4KK0NvcHlyaWdodCAoQykgMjAxMS0yMDE0IFZpbmF5IFNhamlwLgogTGljZW5zZWQgdG8gdGhlIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KIAogdXNhZ2U6IHB5dGhvbiAtbSB2ZW52IFstaF0gWy0tc3lzdGVtLXNpdGUtcGFja2FnZXNdIFstLXN5bWxpbmtzXSBbLS1jbGVhcl0KQEAgLTI0LDEyICsyNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkLgogICAtLXVwZ3JhZGUgICAgICAgICAgICAgVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uIGhhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLgorICAtLXdpdGhvdXQtcGlwICAgICAgICAgU2tpcHMgaW5zdGFsbGluZyBvciB1cGdyYWRpbmcgcGlwIGluIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCAocGlwIGlzIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KQogIiIiCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwotaW1wb3J0IHN5c2NvbmZpZwogaW1wb3J0IHR5cGVzCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNTYsMTQgKzU4LDE3IEBACiAgICAgOnBhcmFtIHN5bWxpbmtzOiBJZiBUcnVlLCBhdHRlbXB0IHRvIHN5bWxpbmsgcmF0aGVyIHRoYW4gY29weSBmaWxlcyBpbnRvCiAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGVudmlyb25tZW50LgogICAgIDpwYXJhbSB1cGdyYWRlOiBJZiBUcnVlLCB1cGdyYWRlIGFuIGV4aXN0aW5nIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgOnBhcmFtIHdpdGhfcGlwOiBJZiBUcnVlLCBlbnN1cmUgcGlwIGlzIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsCi0gICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlKToKKyAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UsIHdpdGhfcGlwPUZhbHNlKToKICAgICAgICAgc2VsZi5zeXN0ZW1fc2l0ZV9wYWNrYWdlcyA9IHN5c3RlbV9zaXRlX3BhY2thZ2VzCiAgICAgICAgIHNlbGYuY2xlYXIgPSBjbGVhcgogICAgICAgICBzZWxmLnN5bWxpbmtzID0gc3ltbGlua3MKICAgICAgICAgc2VsZi51cGdyYWRlID0gdXBncmFkZQorICAgICAgICBzZWxmLndpdGhfcGlwID0gd2l0aF9waXAKIAogICAgIGRlZiBjcmVhdGUoc2VsZiwgZW52X2Rpcik6CiAgICAgICAgICIiIgpAQCAtNzYsMTAgKzgxLDIwIEBACiAgICAgICAgIGNvbnRleHQgPSBzZWxmLmVuc3VyZV9kaXJlY3RvcmllcyhlbnZfZGlyKQogICAgICAgICBzZWxmLmNyZWF0ZV9jb25maWd1cmF0aW9uKGNvbnRleHQpCiAgICAgICAgIHNlbGYuc2V0dXBfcHl0aG9uKGNvbnRleHQpCisgICAgICAgIGlmIHNlbGYud2l0aF9waXA6CisgICAgICAgICAgICBzZWxmLl9zZXR1cF9waXAoY29udGV4dCkKICAgICAgICAgaWYgbm90IHNlbGYudXBncmFkZToKICAgICAgICAgICAgIHNlbGYuc2V0dXBfc2NyaXB0cyhjb250ZXh0KQogICAgICAgICAgICAgc2VsZi5wb3N0X3NldHVwKGNvbnRleHQpCiAKKyAgICBkZWYgY2xlYXJfZGlyZWN0b3J5KHNlbGYsIHBhdGgpOgorICAgICAgICBmb3IgZm4gaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHBhdGgsIGZuKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZm4pIG9yIG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZm4pOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZm4pCisKICAgICBkZWYgZW5zdXJlX2RpcmVjdG9yaWVzKHNlbGYsIGVudl9kaXIpOgogICAgICAgICAiIiIKICAgICAgICAgQ3JlYXRlIHRoZSBkaXJlY3RvcmllcyBmb3IgdGhlIGVudmlyb25tZW50LgpAQCAtOTEsMTEgKzEwNiwxMSBAQAogICAgICAgICBkZWYgY3JlYXRlX2lmX25lZWRlZChkKToKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkKToKICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzbGluayhkKSBvciBvcy5wYXRoLmlzZmlsZShkKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcicgJSBkKQogCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGVudl9kaXIpIGFuZCBub3QgKHNlbGYuY2xlYXIgb3Igc2VsZi51cGdyYWRlKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0RpcmVjdG9yeSBleGlzdHM6ICVzJyAlIGVudl9kaXIpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGVudl9kaXIpIGFuZCBzZWxmLmNsZWFyOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShlbnZfZGlyKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9kaXJlY3RvcnkoZW52X2RpcikKICAgICAgICAgY29udGV4dCA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCiAgICAgICAgIGNvbnRleHQuZW52X2RpciA9IGVudl9kaXIKICAgICAgICAgY29udGV4dC5lbnZfbmFtZSA9IG9zLnBhdGguc3BsaXQoZW52X2RpcilbMV0KQEAgLTExNywxMCArMTMyLDE5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBiaW5uYW1lID0gJ2JpbicKICAgICAgICAgICAgIGluY3BhdGggPSAnaW5jbHVkZScKLSAgICAgICAgICAgIGxpYnBhdGggPSBvcy5wYXRoLmpvaW4oZW52X2RpciwgJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgbGlicGF0aCA9IG9zLnBhdGguam9pbihlbnZfZGlyLCAnbGliJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCiAgICAgICAgIGNvbnRleHQuaW5jX3BhdGggPSBwYXRoID0gb3MucGF0aC5qb2luKGVudl9kaXIsIGluY3BhdGgpCiAgICAgICAgIGNyZWF0ZV9pZl9uZWVkZWQocGF0aCkKICAgICAgICAgY3JlYXRlX2lmX25lZWRlZChsaWJwYXRoKQorICAgICAgICAjIElzc3VlIDIxMTk3OiBjcmVhdGUgbGliNjQgYXMgYSBzeW1saW5rIHRvIGxpYiBvbiA2NC1iaXQgbm9uLU9TIFggUE9TSVgKKyAgICAgICAgaWYgKChzeXMubWF4c2l6ZSA+IDIqKjMyKSBhbmQgKG9zLm5hbWUgPT0gJ3Bvc2l4JykgYW5kCisgICAgICAgICAgICAoc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nKSk6CisgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKGVudl9kaXIsICdsaWInKQorICAgICAgICAgICAgbGlua19wYXRoID0gb3MucGF0aC5qb2luKGVudl9kaXIsICdsaWI2NCcpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGlua19wYXRoKTogICAjIElzc3VlICMyMTY0MworICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsocCwgbGlua19wYXRoKQogICAgICAgICBjb250ZXh0LmJpbl9wYXRoID0gYmlucGF0aCA9IG9zLnBhdGguam9pbihlbnZfZGlyLCBiaW5uYW1lKQogICAgICAgICBjb250ZXh0LmJpbl9uYW1lID0gYmlubmFtZQogICAgICAgICBjb250ZXh0LmVudl9leGUgPSBvcy5wYXRoLmpvaW4oYmlucGF0aCwgZXhlbmFtZSkKQEAgLTE4OCw3ICsyMTIsMTEgQEAKICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gKCdweXRob24nLCAncHl0aG9uMycpOgogICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oYmlucGF0aCwgc3VmZml4KQogICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhleGVuYW1lLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAjIElzc3VlIDE4ODA3OiBtYWtlIGNvcGllcyBpZgorICAgICAgICAgICAgICAgICAgICAjIHN5bWxpbmtzIGFyZSBub3Qgd2FudGVkCisgICAgICAgICAgICAgICAgICAgIGNvcGllcihjb250ZXh0LmVudl9leGUsIHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIDBvNzU1KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3ViZGlyID0gJ0RMTHMnCiAgICAgICAgICAgICBpbmNsdWRlID0gc2VsZi5pbmNsdWRlX2JpbmFyeQpAQCAtMjEwLDEyICsyMzgsMjIgQEAKICAgICAgICAgICAgICAgICBpZiAnaW5pdC50Y2wnIGluIGZpbGVzOgogICAgICAgICAgICAgICAgICAgICB0Y2xkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKHJvb3QpCiAgICAgICAgICAgICAgICAgICAgIHRjbGRpciA9IG9zLnBhdGguam9pbihjb250ZXh0LmVudl9kaXIsICdMaWInLCB0Y2xkaXIpCi0gICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRjbGRpcikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRjbGRpcik6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyh0Y2xkaXIpCiAgICAgICAgICAgICAgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihyb290LCAnaW5pdC50Y2wnKQogICAgICAgICAgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4odGNsZGlyLCAnaW5pdC50Y2wnKQogICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkc3QpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKKyAgICBkZWYgX3NldHVwX3BpcChzZWxmLCBjb250ZXh0KToKKyAgICAgICAgIiIiSW5zdGFsbHMgb3IgdXBncmFkZXMgcGlwIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCIiIgorICAgICAgICAjIFdlIHJ1biBlbnN1cmVwaXAgaW4gaXNvbGF0ZWQgbW9kZSB0byBhdm9pZCBzaWRlIGVmZmVjdHMgZnJvbQorICAgICAgICAjIGVudmlyb25tZW50IHZhcnMsIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgYW55dGhpbmcgZWxzZQorICAgICAgICAjIGludGVuZGVkIGZvciB0aGUgZ2xvYmFsIFB5dGhvbiBlbnZpcm9ubWVudAorICAgICAgICBjbWQgPSBbY29udGV4dC5lbnZfZXhlLCAnLUltJywgJ2Vuc3VyZXBpcCcsICctLXVwZ3JhZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWRlZmF1bHQtcGlwJ10KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisKICAgICBkZWYgc2V0dXBfc2NyaXB0cyhzZWxmLCBjb250ZXh0KToKICAgICAgICAgIiIiCiAgICAgICAgIFNldCB1cCBzY3JpcHRzIGludG8gdGhlIGNyZWF0ZWQgZW52aXJvbm1lbnQgZnJvbSBhIGRpcmVjdG9yeS4KQEAgLTI1Myw3ICsyOTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgcHJvY2Vzc2VkLgogICAgICAgICAiIiIKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX0RJUl9fJywgY29udGV4dC5lbnZfZGlyKQotICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfTkFNRV9fJywgY29udGV4dC5wcm9tcHQpCisgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9OQU1FX18nLCBjb250ZXh0LmVudl9uYW1lKQorICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfUFJPTVBUX18nLCBjb250ZXh0LnByb21wdCkKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX0JJTl9OQU1FX18nLCBjb250ZXh0LmJpbl9uYW1lKQogICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfUFlUSE9OX18nLCBjb250ZXh0LmVudl9leGUpCiAgICAgICAgIHJldHVybiB0ZXh0CkBAIC0zMDgsNyArMzQ3LDggQEAKICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHltb2RlKHNyY2ZpbGUsIGRzdGZpbGUpCiAKIAotZGVmIGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIHN5bWxpbmtzPUZhbHNlKToKK2RlZiBjcmVhdGUoZW52X2Rpciwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgd2l0aF9waXA9RmFsc2UpOgogICAgICIiIgogICAgIENyZWF0ZSBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gYSBkaXJlY3RvcnkuCiAKQEAgLTMyNCw5ICszNjQsMTEgQEAKICAgICAgICAgICAgICAgICAgIHJhaXNlZC4KICAgICA6cGFyYW0gc3ltbGlua3M6IElmIFRydWUsIGF0dGVtcHQgdG8gc3ltbGluayByYXRoZXIgdGhhbiBjb3B5IGZpbGVzIGludG8KICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgOnBhcmFtIHdpdGhfcGlwOiBJZiBUcnVlLCBlbnN1cmUgcGlwIGlzIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQKICAgICAiIiIKICAgICBidWlsZGVyID0gRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1zeXN0ZW1fc2l0ZV9wYWNrYWdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9Y2xlYXIsIHN5bWxpbmtzPXN5bWxpbmtzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPWNsZWFyLCBzeW1saW5rcz1zeW1saW5rcywgd2l0aF9waXA9d2l0aF9waXApCiAgICAgYnVpbGRlci5jcmVhdGUoZW52X2RpcikKIAogZGVmIG1haW4oYXJncz1Ob25lKToKQEAgLTM2MCwyOCArNDAyLDQwIEBACiAgICAgICAgICAgICB1c2Vfc3ltbGlua3MgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdXNlX3N5bWxpbmtzID0gVHJ1ZQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN5bWxpbmtzJywgZGVmYXVsdD11c2Vfc3ltbGlua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nc3ltbGlua3MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hlbiBzeW1saW5rcyBhcmUgbm90IHRoZSBkZWZhdWx0IGZvciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHBsYXRmb3JtLicpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc3ltbGlua3MnLCBkZWZhdWx0PXVzZV9zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3N5bWxpbmtzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHN5bWxpbmtzIGFyZSBub3QgdGhlIGRlZmF1bHQgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBwbGF0Zm9ybS4nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tY29waWVzJywgZGVmYXVsdD1ub3QgdXNlX3N5bWxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGRlc3Q9J3N5bWxpbmtzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2UgY29waWVzIHJhdGhlciB0aGFuIHN5bWxpbmtzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmVuIHdoZW4gc3ltbGlua3MgYXJlIHRoZSBkZWZhdWx0IGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcGxhdGZvcm0uJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jbGVhcicsIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY2xlYXInLCBoZWxwPSdEZWxldGUgdGhlIGVudmlyb25tZW50ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdG9yeSBpZiBpdCBhbHJlYWR5ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4aXN0cy4gSWYgbm90IHNwZWNpZmllZCBhbmQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIGRpcmVjdG9yeSBleGlzdHMsIGFuIGVycm9yJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGlzIHJhaXNlZC4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2NsZWFyJywgaGVscD0nRGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW52aXJvbm1lbnQgZGlyZWN0b3J5IGlmIGl0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FscmVhZHkgZXhpc3RzLCBiZWZvcmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW52aXJvbm1lbnQgY3JlYXRpb24uJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS11cGdyYWRlJywgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd1cGdyYWRlJywgaGVscD0nVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS13aXRob3V0LXBpcCcsIGRlc3Q9J3dpdGhfcGlwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NraXBzIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHBpcCBpbiB0aGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpcnR1YWwgZW52aXJvbm1lbnQgKHBpcCBpcyBib290c3RyYXBwZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J5IGRlZmF1bHQpJykKICAgICAgICAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCiAgICAgICAgIGlmIG9wdGlvbnMudXBncmFkZSBhbmQgb3B0aW9ucy5jbGVhcjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3lvdSBjYW5ub3Qgc3VwcGx5IC0tdXBncmFkZSBhbmQgLS1jbGVhciB0b2dldGhlci4nKQogICAgICAgICBidWlsZGVyID0gRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1vcHRpb25zLnN5c3RlbV9zaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1vcHRpb25zLmNsZWFyLCBzeW1saW5rcz1vcHRpb25zLnN5bWxpbmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlPW9wdGlvbnMudXBncmFkZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9b3B0aW9ucy5jbGVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9b3B0aW9ucy5zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZT1vcHRpb25zLnVwZ3JhZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhfcGlwPW9wdGlvbnMud2l0aF9waXApCiAgICAgICAgIGZvciBkIGluIG9wdGlvbnMuZGlyczoKICAgICAgICAgICAgIGJ1aWxkZXIuY3JlYXRlKGQpCiAKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKaW5kZXggMWM1ZWY5OC4uYjE1ZGVjYiAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKQEAgLTEsMjUgKzEsNDAgQEAKK2Z1bmN0aW9uIGdsb2JhbDpkZWFjdGl2YXRlIChbc3dpdGNoXSROb25EZXN0cnVjdGl2ZSkgew0KKyAgICAjIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCisgICAgaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQorICAgICAgICBjb3B5LWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCBmdW5jdGlvbjpwcm9tcHQNCisgICAgICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCisgICAgfQ0KKw0KKyAgICBpZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSkgew0KKyAgICAgICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQorICAgIH0NCisNCisgICAgaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCisgICAgICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCisgICAgICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSA0KKyAgICB9DQorDQorICAgIGlmIChUZXN0LVBhdGggZW52OlZJUlRVQUxfRU5WKSB7DQorICAgICAgICByZW1vdmUtaXRlbSBlbnY6VklSVFVBTF9FTlYNCisgICAgfQ0KKw0KKyAgICBpZiAoISROb25EZXN0cnVjdGl2ZSkgew0KKyAgICAgICAgIyBTZWxmIGRlc3RydWN0IQ0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246ZGVhY3RpdmF0ZQ0KKyAgICB9DQorfQ0KKw0KK2RlYWN0aXZhdGUgLW5vbmRlc3RydWN0aXZlDQorCiAkZW52OlZJUlRVQUxfRU5WPSJfX1ZFTlZfRElSX18iDQogDQotIyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVzDQotaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQotICAgIGNvcHktaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUIGZ1bmN0aW9uOnByb21wdA0KLSAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgZW52OlBZVEhPTkhPTUUNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QQVRIKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIDQotfQ0KLQ0KICMgU2V0IHRoZSBwcm9tcHQgdG8gaW5jbHVkZSB0aGUgZW52IG5hbWUNCisjIE1ha2Ugc3VyZSBfT0xEX1ZJUlRVQUxfUFJPTVBUIGlzIGdsb2JhbA0KK2Z1bmN0aW9uIGdsb2JhbDpfT0xEX1ZJUlRVQUxfUFJPTVBUIHsiIn0NCiBjb3B5LWl0ZW0gZnVuY3Rpb246cHJvbXB0IGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi1mdW5jdGlvbiBwcm9tcHQgew0KLSAgICBXcml0ZS1Ib3N0IC1Ob05ld2xpbmUgLUZvcmVncm91bmRDb2xvciBHcmVlbiAnW19fVkVOVl9OQU1FX19dJw0KK2Z1bmN0aW9uIGdsb2JhbDpwcm9tcHQgew0KKyAgICBXcml0ZS1Ib3N0IC1Ob05ld2xpbmUgLUZvcmVncm91bmRDb2xvciBHcmVlbiAnX19WRU5WX1BST01QVF9fJw0KICAgICBfT0xEX1ZJUlRVQUxfUFJPTVBUDQogfQ0KIA0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEgYi9MaWIvdmVudi9zY3JpcHRzL250L0RlYWN0aXZhdGUucHMxCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDFlOTZiLi4wMDAwMDAwCi0tLSBhL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCi1pZiAoVGVzdC1QYXRoIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQpIHsNCi0gICAgY29weS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQgZnVuY3Rpb246cHJvbXB0DQotICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCBlbnY6UEFUSA0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEgNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6VklSVFVBTF9FTlYpIHsNCi0gICAgcmVtb3ZlLWl0ZW0gZW52OlZJUlRVQUxfRU5WDQotfQ0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0IGIvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKaW5kZXggM2NlYmUyNi4uOWVhYjE0NyAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKQEAgLTE0LDcgKzE0LDcgQEAKICkNCiANCiBzZXQgIl9PTERfVklSVFVBTF9QUk9NUFQ9JVBST01QVCUiDQotc2V0ICJQUk9NUFQ9X19WRU5WX05BTUVfXyVQUk9NUFQlIg0KK3NldCAiUFJPTVBUPV9fVkVOVl9QUk9NUFRfXyVQUk9NUFQlIg0KIA0KIGlmIGRlZmluZWQgUFlUSE9OSE9NRSAoDQogICAgIHNldCAiX09MRF9WSVJUVUFMX1BZVEhPTkhPTUU9JVBZVEhPTkhPTUUlIg0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlCmluZGV4IGMyNDE0NTAuLjdiYmZmZDkgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZQpAQCAtNTQsOCArNTQsOCBAQAogCiBpZiBbIC16ICIkVklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiIF0gOyB0aGVuCiAgICAgX09MRF9WSVJUVUFMX1BTMT0iJFBTMSIKLSAgICBpZiBbICJ4X19WRU5WX05BTUVfXyIgIT0geCBdIDsgdGhlbgotCVBTMT0iX19WRU5WX05BTUVfXyRQUzEiCisgICAgaWYgWyAieF9fVkVOVl9QUk9NUFRfXyIgIT0geCBdIDsgdGhlbgorCVBTMT0iX19WRU5WX1BST01QVF9fJFBTMSIKICAgICBlbHNlCiAgICAgaWYgWyAiYGJhc2VuYW1lIFwiJFZJUlRVQUxfRU5WXCJgIiA9ICJfXyIgXSA7IHRoZW4KICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaCBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuY3NoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDc5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaApAQCAtMCwwICsxLDM3IEBACisjIFRoaXMgZmlsZSBtdXN0IGJlIHVzZWQgd2l0aCAic291cmNlIGJpbi9hY3RpdmF0ZS5jc2giICpmcm9tIGNzaCouCisjIFlvdSBjYW5ub3QgcnVuIGl0IGRpcmVjdGx5LgorIyBDcmVhdGVkIGJ5IERhdmlkZSBEaSBCbGFzaSA8ZGF2aWRlZGJAZ21haWwuY29tPi4KKyMgUG9ydGVkIHRvIFB5dGhvbiAzLjMgdmVudiBieSBBbmRyZXcgU3ZldGxvdiA8YW5kcmV3LnN2ZXRsb3ZAZ21haWwuY29tPgorCithbGlhcyBkZWFjdGl2YXRlICd0ZXN0ICQ/X09MRF9WSVJUVUFMX1BBVEggIT0gMCAmJiBzZXRlbnYgUEFUSCAiJF9PTERfVklSVFVBTF9QQVRIIiAmJiB1bnNldCBfT0xEX1ZJUlRVQUxfUEFUSDsgcmVoYXNoOyB0ZXN0ICQ/X09MRF9WSVJUVUFMX1BST01QVCAhPSAwICYmIHNldCBwcm9tcHQ9IiRfT0xEX1ZJUlRVQUxfUFJPTVBUIiAmJiB1bnNldCBfT0xEX1ZJUlRVQUxfUFJPTVBUOyB1bnNldGVudiBWSVJUVUFMX0VOVjsgdGVzdCAiXCE6KiIgIT0gIm5vbmRlc3RydWN0aXZlIiAmJiB1bmFsaWFzIGRlYWN0aXZhdGUnCisKKyMgVW5zZXQgaXJyZWxhdmVudCB2YXJpYWJsZXMuCitkZWFjdGl2YXRlIG5vbmRlc3RydWN0aXZlCisKK3NldGVudiBWSVJUVUFMX0VOViAiX19WRU5WX0RJUl9fIgorCitzZXQgX09MRF9WSVJUVUFMX1BBVEg9IiRQQVRIIgorc2V0ZW52IFBBVEggIiRWSVJUVUFMX0VOVi9fX1ZFTlZfQklOX05BTUVfXzokUEFUSCIKKworCitzZXQgX09MRF9WSVJUVUFMX1BST01QVD0iJHByb21wdCIKKworaWYgKCEgIiQ/VklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiKSB0aGVuCisgICAgaWYgKCJfX1ZFTlZfTkFNRV9fIiAhPSAiIikgdGhlbgorICAgICAgICBzZXQgZW52X25hbWUgPSAiX19WRU5WX05BTUVfXyIKKyAgICBlbHNlCisgICAgICAgIGlmIChgYmFzZW5hbWUgIlZJUlRVQUxfRU5WImAgPT0gIl9fIikgdGhlbgorICAgICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnpldGFkZXYuY29tL3NvZnR3YXJlL2FzcGVuLworICAgICAgICAgICAgc2V0IGVudl9uYW1lID0gYGJhc2VuYW1lIFxgZGlybmFtZSAiJFZJUlRVQUxfRU5WIlxgYAorICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXQgZW52X25hbWUgPSBgYmFzZW5hbWUgIiRWSVJUVUFMX0VOViJgCisgICAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgICBzZXQgcHJvbXB0ID0gIlskZW52X25hbWVdICRwcm9tcHQiCisgICAgdW5zZXQgZW52X25hbWUKK2VuZGlmCisKK2FsaWFzIHB5ZG9jIHB5dGhvbiAtbSBweWRvYworCityZWhhc2gKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaCBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTM5MWFhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5maXNoCkBAIC0wLDAgKzEsNzQgQEAKKyMgVGhpcyBmaWxlIG11c3QgYmUgdXNlZCB3aXRoICIuIGJpbi9hY3RpdmF0ZS5maXNoIiAqZnJvbSBmaXNoKiAoaHR0cDovL2Zpc2hzaGVsbC5vcmcpCisjIHlvdSBjYW5ub3QgcnVuIGl0IGRpcmVjdGx5CisKK2Z1bmN0aW9uIGRlYWN0aXZhdGUgIC1kICJFeGl0IHZpcnR1YWxlbnYgYW5kIHJldHVybiB0byBub3JtYWwgc2hlbGwgZW52aXJvbm1lbnQiCisgICAgIyByZXNldCBvbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgaWYgdGVzdCAtbiAiJF9PTERfVklSVFVBTF9QQVRIIgorICAgICAgICBzZXQgLWd4IFBBVEggJF9PTERfVklSVFVBTF9QQVRICisgICAgICAgIHNldCAtZSBfT0xEX1ZJUlRVQUxfUEFUSAorICAgIGVuZAorICAgIGlmIHRlc3QgLW4gIiRfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSIKKyAgICAgICAgc2V0IC1neCBQWVRIT05IT01FICRfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQorICAgICAgICBzZXQgLWUgX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUKKyAgICBlbmQKKworICAgIGlmIHRlc3QgLW4gIiRfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFIgorICAgICAgICBmdW5jdGlvbnMgLWUgZmlzaF9wcm9tcHQKKyAgICAgICAgc2V0IC1lIF9PTERfRklTSF9QUk9NUFRfT1ZFUlJJREUKKyAgICAgICAgLiAoIGJlZ2luCisgICAgICAgICAgICAgICAgcHJpbnRmICJmdW5jdGlvbiBmaXNoX3Byb21wdFxuXHQjIgorICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyBfb2xkX2Zpc2hfcHJvbXB0CisgICAgICAgICAgICBlbmQgfCBwc3ViICkKKyAgICAgICAgZnVuY3Rpb25zIC1lIF9vbGRfZmlzaF9wcm9tcHQKKyAgICBlbmQKKworICAgIHNldCAtZSBWSVJUVUFMX0VOVgorICAgIGlmIHRlc3QgIiRhcmd2WzFdIiAhPSAibm9uZGVzdHJ1Y3RpdmUiCisgICAgICAgICMgU2VsZiBkZXN0cnVjdCEKKyAgICAgICAgZnVuY3Rpb25zIC1lIGRlYWN0aXZhdGUKKyAgICBlbmQKK2VuZAorCisjIHVuc2V0IGlycmVsYXZlbnQgdmFyaWFibGVzCitkZWFjdGl2YXRlIG5vbmRlc3RydWN0aXZlCisKK3NldCAtZ3ggVklSVFVBTF9FTlYgIl9fVkVOVl9ESVJfXyIKKworc2V0IC1neCBfT0xEX1ZJUlRVQUxfUEFUSCAkUEFUSAorc2V0IC1neCBQQVRIICIkVklSVFVBTF9FTlYvX19WRU5WX0JJTl9OQU1FX18iICRQQVRICisKKyMgdW5zZXQgUFlUSE9OSE9NRSBpZiBzZXQKK2lmIHNldCAtcSBQWVRIT05IT01FCisgICAgc2V0IC1neCBfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSAkUFlUSE9OSE9NRQorICAgIHNldCAtZSBQWVRIT05IT01FCitlbmQKKworaWYgdGVzdCAteiAiJFZJUlRVQUxfRU5WX0RJU0FCTEVfUFJPTVBUIgorICAgICMgZmlzaCB1c2VzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhbiBlbnYgdmFyIHRvIGdlbmVyYXRlIHRoZSBwcm9tcHQuCisKKyAgICAjIHNhdmUgdGhlIGN1cnJlbnQgZmlzaF9wcm9tcHQgZnVuY3Rpb24gYXMgdGhlIGZ1bmN0aW9uIF9vbGRfZmlzaF9wcm9tcHQKKyAgICAuICggYmVnaW4KKyAgICAgICAgICAgIHByaW50ZiAiZnVuY3Rpb24gX29sZF9maXNoX3Byb21wdFxuXHQjIgorICAgICAgICAgICAgZnVuY3Rpb25zIGZpc2hfcHJvbXB0CisgICAgICAgIGVuZCB8IHBzdWIgKQorCisgICAgIyB3aXRoIHRoZSBvcmlnaW5hbCBwcm9tcHQgZnVuY3Rpb24gcmVuYW1lZCwgd2UgY2FuIG92ZXJyaWRlIHdpdGggb3VyIG93bi4KKyAgICBmdW5jdGlvbiBmaXNoX3Byb21wdAorICAgICAgICAjIFByb21wdCBvdmVycmlkZT8KKyAgICAgICAgaWYgdGVzdCAtbiAiX19WRU5WX1BST01QVF9fIgorICAgICAgICAgICAgcHJpbnRmICIlcyVzJXMiICJfX1ZFTlZfUFJPTVBUX18iIChzZXRfY29sb3Igbm9ybWFsKSAoX29sZF9maXNoX3Byb21wdCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKyAgICAgICAgIyAuLi5PdGhlcndpc2UsIHByZXBlbmQgZW52CisgICAgICAgIHNldCAtbCBfY2hlY2tiYXNlIChiYXNlbmFtZSAiJFZJUlRVQUxfRU5WIikKKyAgICAgICAgaWYgdGVzdCAkX2NoZWNrYmFzZSA9ICJfXyIKKyAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBc3BlbiBtYWdpYyBkaXJlY3RvcmllcworICAgICAgICAgICAgIyBzZWUgaHR0cDovL3d3dy56ZXRhZGV2LmNvbS9zb2Z0d2FyZS9hc3Blbi8KKyAgICAgICAgICAgIHByaW50ZiAiJXNbJXNdJXMgJXMiIChzZXRfY29sb3IgLWIgYmx1ZSB3aGl0ZSkgKGJhc2VuYW1lIChkaXJuYW1lICIkVklSVFVBTF9FTlYiKSkgKHNldF9jb2xvciBub3JtYWwpIChfb2xkX2Zpc2hfcHJvbXB0KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYgIiVzKCVzKSVzJXMiIChzZXRfY29sb3IgLWIgYmx1ZSB3aGl0ZSkgKGJhc2VuYW1lICIkVklSVFVBTF9FTlYiKSAoc2V0X2NvbG9yIG5vcm1hbCkgKF9vbGRfZmlzaF9wcm9tcHQpCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgc2V0IC1neCBfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFICIkVklSVFVBTF9FTlYiCitlbmQKZGlmZiAtLWdpdCBhL0xpYi93YXJuaW5ncy5weSBiL0xpYi93YXJuaW5ncy5weQppbmRleCBlZGJiYjVlLi5lZWViYTY1IDEwMDY0NAotLS0gYS9MaWIvd2FybmluZ3MucHkKKysrIGIvTGliL3dhcm5pbmdzLnB5CkBAIC0xLDEyICsxLDkgQEAKICIiIlB5dGhvbiBwYXJ0IG9mIHRoZSB3YXJuaW5ncyBzdWJzeXN0ZW0uIiIiCiAKLSMgTm90ZTogZnVuY3Rpb24gbGV2ZWwgaW1wb3J0cyBzaG91bGQgKm5vdCogYmUgdXNlZAotIyBpbiB0aGlzIG1vZHVsZSBhcyBpdCBtYXkgY2F1c2UgaW1wb3J0IGxvY2sgZGVhZGxvY2suCi0jIFNlZSBidWcgNjgzNjU4LgotaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IHN5cwogCi1fX2FsbF9fID0gWyJ3YXJuIiwgInNob3d3YXJuaW5nIiwgImZvcm1hdHdhcm5pbmciLCAiZmlsdGVyd2FybmluZ3MiLAorX19hbGxfXyA9IFsid2FybiIsICJ3YXJuX2V4cGxpY2l0IiwgInNob3d3YXJuaW5nIiwKKyAgICAgICAgICAgImZvcm1hdHdhcm5pbmciLCAiZmlsdGVyd2FybmluZ3MiLCAic2ltcGxlZmlsdGVyIiwKICAgICAgICAgICAgInJlc2V0d2FybmluZ3MiLCAiY2F0Y2hfd2FybmluZ3MiXQogCiAKQEAgLTE2LDExICsxMywxMiBAQAogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgogICAgIHRyeToKICAgICAgICAgZmlsZS53cml0ZShmb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lKSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcyAjIHRoZSBmaWxlIChwcm9iYWJseSBzdGRlcnIpIGlzIGludmFsaWQgLSB0aGlzIHdhcm5pbmcgZ2V0cyBsb3N0LgogCiBkZWYgZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgbGluZT1Ob25lKToKICAgICAiIiJGdW5jdGlvbiB0byBmb3JtYXQgYSB3YXJuaW5nIHRoZSBzdGFuZGFyZCB3YXkuIiIiCisgICAgaW1wb3J0IGxpbmVjYWNoZQogICAgIHMgPSAgIiVzOiVzOiAlczogJXNcbiIgJSAoZmlsZW5hbWUsIGxpbmVubywgY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UpCiAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pIGlmIGxpbmUgaXMgTm9uZSBlbHNlIGxpbmUKICAgICBpZiBsaW5lOgpAQCAtMjMzLDYgKzIzMSw3IEBACiAKICAgICAjIFByaW1lIHRoZSBsaW5lY2FjaGUgZm9yIGZvcm1hdHRpbmcsIGluIGNhc2UgdGhlCiAgICAgIyAiZmlsZSIgaXMgYWN0dWFsbHkgaW4gYSB6aXBmaWxlIG9yIHNvbWV0aGluZy4KKyAgICBpbXBvcnQgbGluZWNhY2hlCiAgICAgbGluZWNhY2hlLmdldGxpbmVzKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscykKIAogICAgIGlmIGFjdGlvbiA9PSAiZXJyb3IiOgpkaWZmIC0tZ2l0IGEvTGliL3dhdmUucHkgYi9MaWIvd2F2ZS5weQppbmRleCA0YTIyMzQ1Li5iNTYzOTVlIDEwMDY0NAotLS0gYS9MaWIvd2F2ZS5weQorKysgYi9MaWIvd2F2ZS5weQpAQCAtMTgsNyArMTgsNyBAQAogICAgICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIGZvciBsaW5lYXIgc2FtcGxlcykKICAgICAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIGxpbmVhciBzYW1wbGVzKQotICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKKyAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgICAgIGdldG1hcmtlcnMoKSAgICAtLSByZXR1cm5zIE5vbmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWlmYyBtb2R1bGUpCkBAIC04MiwxNSArODIsMTQgQEAKIAogX2FycmF5X2ZtdHMgPSBOb25lLCAnYicsICdoJywgTm9uZSwgJ2knCiAKK2ltcG9ydCBhdWRpb29wCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBmcm9tIGNodW5rIGltcG9ydCBDaHVuaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQogCi1kZWYgX2J5dGVzd2FwMyhkYXRhKToKLSAgICBiYSA9IGJ5dGVhcnJheShkYXRhKQotICAgIGJhWzo6M10gPSBkYXRhWzI6OjNdCi0gICAgYmFbMjo6M10gPSBkYXRhWzo6M10KLSAgICByZXR1cm4gYnl0ZXMoYmEpCitfd2F2ZV9wYXJhbXMgPSBuYW1lZHR1cGxlKCdfd2F2ZV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQogCiBjbGFzcyBXYXZlX3JlYWQ6CiAgICAgIiIiVmFyaWFibGVzIHVzZWQgaW4gdGhpcyBjbGFzczoKQEAgLTE2OSw2ICsxNjgsMTMgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTIwNyw5ICsyMTMsOSBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY29tcG5hbWUKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTIzMiwyOSArMjM4LDkgQEAKICAgICAgICAgICAgIHNlbGYuX2RhdGFfc2Vla19uZWVkZWQgPSAwCiAgICAgICAgIGlmIG5mcmFtZXMgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiJycKLSAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoIGluICgyLCA0KSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgZnJvbWZpbGUoKSBtZXRob2QgZG9lcyBub3QgdGFrZQotICAgICAgICAgICAgIyBzb21ldGhpbmcgdGhhdCBvbmx5IGxvb2tzIGxpa2UgYSBmaWxlIG9iamVjdCwgc28KLSAgICAgICAgICAgICMgd2UgaGF2ZSB0byByZWFjaCBpbnRvIHRoZSBpbm5hcmRzIG9mIHRoZSBjaHVuayBvYmplY3QKLSAgICAgICAgICAgIGltcG9ydCBhcnJheQotICAgICAgICAgICAgY2h1bmsgPSBzZWxmLl9kYXRhX2NodW5rCi0gICAgICAgICAgICBkYXRhID0gYXJyYXkuYXJyYXkoX2FycmF5X2ZtdHNbc2VsZi5fc2FtcHdpZHRoXSkKLSAgICAgICAgICAgIGFzc2VydCBkYXRhLml0ZW1zaXplID09IHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgbml0ZW1zID0gbmZyYW1lcyAqIHNlbGYuX25jaGFubmVscwotICAgICAgICAgICAgaWYgbml0ZW1zICogc2VsZi5fc2FtcHdpZHRoID4gY2h1bmsuY2h1bmtzaXplIC0gY2h1bmsuc2l6ZV9yZWFkOgotICAgICAgICAgICAgICAgIG5pdGVtcyA9IChjaHVuay5jaHVua3NpemUgLSBjaHVuay5zaXplX3JlYWQpIC8vIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgZGF0YS5mcm9tZmlsZShjaHVuay5maWxlLmZpbGUsIG5pdGVtcykKLSAgICAgICAgICAgICMgInRlbGwiIGRhdGEgY2h1bmsgaG93IG11Y2ggd2FzIHJlYWQKLSAgICAgICAgICAgIGNodW5rLnNpemVfcmVhZCA9IGNodW5rLnNpemVfcmVhZCArIG5pdGVtcyAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgIyBkbyB0aGUgc2FtZSBmb3IgdGhlIG91dGVybW9zdCBjaHVuawotICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5maWxlCi0gICAgICAgICAgICBjaHVuay5zaXplX3JlYWQgPSBjaHVuay5zaXplX3JlYWQgKyBuaXRlbXMgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuYnl0ZXN3YXAoKQotICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9ieXRlcygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fZGF0YV9jaHVuay5yZWFkKG5mcmFtZXMgKiBzZWxmLl9mcmFtZXNpemUpCi0gICAgICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPT0gMyBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICAgICBkYXRhID0gX2J5dGVzd2FwMyhkYXRhKQorICAgICAgICBkYXRhID0gc2VsZi5fZGF0YV9jaHVuay5yZWFkKG5mcmFtZXMgKiBzZWxmLl9mcmFtZXNpemUpCisgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCAhPSAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgorICAgICAgICAgICAgZGF0YSA9IGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YSwgc2VsZi5fc2FtcHdpZHRoKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0IGFuZCBkYXRhOgogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2NvbnZlcnQoZGF0YSkKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSBzZWxmLl9zb3VuZHBvcyArIGxlbihkYXRhKSAvLyAoc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoKQpAQCAtMzI4LDYgKzMxNCwxMiBAQAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTQwMiw4ICszOTQsOCBAQAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9uY2hhbm5lbHMgb3Igbm90IHNlbGYuX3NhbXB3aWR0aCBvciBub3Qgc2VsZi5fZnJhbWVyYXRlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ25vdCBhbGwgcGFyYW1ldGVycyBzZXQnKQotICAgICAgICByZXR1cm4gc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwgXAotICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLAorICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUpCiAKICAgICBkZWYgc2V0bWFyayhzZWxmLCBpZCwgcG9zLCBuYW1lKToKICAgICAgICAgcmFpc2UgRXJyb3IoJ3NldG1hcmsoKSBub3Qgc3VwcG9ydGVkJykKQEAgLTQxOCwyNCArNDEwLDE2IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbihsZW4oZGF0YSkpCiAgICAgICAgIG5mcmFtZXMgPSBsZW4oZGF0YSkgLy8gKHNlbGYuX3NhbXB3aWR0aCAqIHNlbGYuX25jaGFubmVscykKICAgICAgICAgaWYgc2VsZi5fY29udmVydDoKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb252ZXJ0KGRhdGEpCi0gICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCBpbiAoMiwgNCkgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShfYXJyYXlfZm10c1tzZWxmLl9zYW1wd2lkdGhdKQotICAgICAgICAgICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBhCi0gICAgICAgICAgICBhc3NlcnQgZGF0YS5pdGVtc2l6ZSA9PSBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuYnl0ZXN3YXAoKQotICAgICAgICAgICAgZGF0YS50b2ZpbGUoc2VsZi5fZmlsZSkKLSAgICAgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuID0gc2VsZi5fZGF0YXdyaXR0ZW4gKyBsZW4oZGF0YSkgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAzIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICAgICAgICAgIGRhdGEgPSBfYnl0ZXN3YXAzKGRhdGEpCi0gICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGRhdGEpCi0gICAgICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiA9IHNlbGYuX2RhdGF3cml0dGVuICsgbGVuKGRhdGEpCisgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCAhPSAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgorICAgICAgICAgICAgZGF0YSA9IGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YSwgc2VsZi5fc2FtcHdpZHRoKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuICs9IGxlbihkYXRhKQogICAgICAgICBzZWxmLl9uZnJhbWVzd3JpdHRlbiA9IHNlbGYuX25mcmFtZXN3cml0dGVuICsgbmZyYW1lcwogCiAgICAgZGVmIHdyaXRlZnJhbWVzKHNlbGYsIGRhdGEpOgpAQCAtNDc2LDE0ICs0NjAsMTggQEAKICAgICAgICAgaWYgbm90IHNlbGYuX25mcmFtZXM6CiAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzID0gaW5pdGxlbmd0aCAvLyAoc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoKQogICAgICAgICBzZWxmLl9kYXRhbGVuZ3RoID0gc2VsZi5fbmZyYW1lcyAqIHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyA9IE5vbmUKICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShzdHJ1Y3QucGFjaygnPEw0czRzTEhITExISDRzJywKICAgICAgICAgICAgIDM2ICsgc2VsZi5fZGF0YWxlbmd0aCwgYidXQVZFJywgYidmbXQgJywgMTYsCiAgICAgICAgICAgICBXQVZFX0ZPUk1BVF9QQ00sIHNlbGYuX25jaGFubmVscywgc2VsZi5fZnJhbWVyYXRlLAogICAgICAgICAgICAgc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fZnJhbWVyYXRlICogc2VsZi5fc2FtcHdpZHRoLAogICAgICAgICAgICAgc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoLAogICAgICAgICAgICAgc2VsZi5fc2FtcHdpZHRoICogOCwgYidkYXRhJykpCi0gICAgICAgIHNlbGYuX2RhdGFfbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIGlmIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RhdGFfbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3RydWN0LnBhY2soJzxMJywgc2VsZi5fZGF0YWxlbmd0aCkpCiAgICAgICAgIHNlbGYuX2hlYWRlcndyaXR0ZW4gPSBUcnVlCiAKZGlmZiAtLWdpdCBhL0xpYi93ZWFrcmVmLnB5IGIvTGliL3dlYWtyZWYucHkKaW5kZXggZmNiNmI3NC4uZjZhNDBjYSAxMDA2NDQKLS0tIGEvTGliL3dlYWtyZWYucHkKKysrIGIvTGliL3dlYWtyZWYucHkKQEAgLTIxLDEzICsyMSw2OSBAQAogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldCwgX0l0ZXJhdGlvbkd1YXJkCiAKIGltcG9ydCBjb2xsZWN0aW9ucyAgIyBJbXBvcnQgYWZ0ZXIgX3dlYWtyZWYgdG8gYXZvaWQgY2lyY3VsYXIgaW1wb3J0LgoraW1wb3J0IHN5cworaW1wb3J0IGl0ZXJ0b29scwogCiBQcm94eVR5cGVzID0gKFByb3h5VHlwZSwgQ2FsbGFibGVQcm94eVR5cGUpCiAKIF9fYWxsX18gPSBbInJlZiIsICJwcm94eSIsICJnZXR3ZWFrcmVmY291bnQiLCAiZ2V0d2Vha3JlZnMiLAogICAgICAgICAgICAiV2Vha0tleURpY3Rpb25hcnkiLCAiUmVmZXJlbmNlVHlwZSIsICJQcm94eVR5cGUiLAogICAgICAgICAgICAiQ2FsbGFibGVQcm94eVR5cGUiLCAiUHJveHlUeXBlcyIsICJXZWFrVmFsdWVEaWN0aW9uYXJ5IiwKLSAgICAgICAgICAgIldlYWtTZXQiXQorICAgICAgICAgICAiV2Vha1NldCIsICJXZWFrTWV0aG9kIiwgImZpbmFsaXplIl0KKworCitjbGFzcyBXZWFrTWV0aG9kKHJlZik6CisgICAgIiIiCisgICAgQSBjdXN0b20gYHdlYWtyZWYucmVmYCBzdWJjbGFzcyB3aGljaCBzaW11bGF0ZXMgYSB3ZWFrIHJlZmVyZW5jZSB0bworICAgIGEgYm91bmQgbWV0aG9kLCB3b3JraW5nIGFyb3VuZCB0aGUgbGlmZXRpbWUgcHJvYmxlbSBvZiBib3VuZCBtZXRob2RzLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gIl9mdW5jX3JlZiIsICJfbWV0aF90eXBlIiwgIl9hbGl2ZSIsICJfX3dlYWtyZWZfXyIKKworICAgIGRlZiBfX25ld19fKGNscywgbWV0aCwgY2FsbGJhY2s9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IG1ldGguX19zZWxmX18KKyAgICAgICAgICAgIGZ1bmMgPSBtZXRoLl9fZnVuY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgYm91bmQgbWV0aG9kLCBub3Qge30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKG1ldGgpKSkgZnJvbSBOb25lCisgICAgICAgIGRlZiBfY2IoYXJnKToKKyAgICAgICAgICAgICMgVGhlIHNlbGYtd2Vha3JlZiB0cmljayBpcyBuZWVkZWQgdG8gYXZvaWQgY3JlYXRpbmcgYSByZWZlcmVuY2UKKyAgICAgICAgICAgICMgY3ljbGUuCisgICAgICAgICAgICBzZWxmID0gc2VsZl93cigpCisgICAgICAgICAgICBpZiBzZWxmLl9hbGl2ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHNlbGYpCisgICAgICAgIHNlbGYgPSByZWYuX19uZXdfXyhjbHMsIG9iaiwgX2NiKQorICAgICAgICBzZWxmLl9mdW5jX3JlZiA9IHJlZihmdW5jLCBfY2IpCisgICAgICAgIHNlbGYuX21ldGhfdHlwZSA9IHR5cGUobWV0aCkKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBUcnVlCisgICAgICAgIHNlbGZfd3IgPSByZWYoc2VsZikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgb2JqID0gc3VwZXIoKS5fX2NhbGxfXygpCisgICAgICAgIGZ1bmMgPSBzZWxmLl9mdW5jX3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBOb25lIG9yIGZ1bmMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9tZXRoX3R5cGUoZnVuYywgb2JqKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFdlYWtNZXRob2QpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsaXZlIG9yIG5vdCBvdGhlci5fYWxpdmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKyAgICAgICAgICAgIHJldHVybiByZWYuX19lcV9fKHNlbGYsIG90aGVyKSBhbmQgc2VsZi5fZnVuY19yZWYgPT0gb3RoZXIuX2Z1bmNfcmVmCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFdlYWtNZXRob2QpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsaXZlIG9yIG5vdCBvdGhlci5fYWxpdmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgaXMgbm90IG90aGVyCisgICAgICAgICAgICByZXR1cm4gcmVmLl9fbmVfXyhzZWxmLCBvdGhlcikgb3Igc2VsZi5fZnVuY19yZWYgIT0gb3RoZXIuX2Z1bmNfcmVmCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBfX2hhc2hfXyA9IHJlZi5fX2hhc2hfXwogCiAKIGNsYXNzIFdlYWtWYWx1ZURpY3Rpb25hcnkoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgpAQCAtMTUzLDggKzIwOSw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggX0l0ZXJhdGlvbkd1YXJkKHNlbGYpOgotICAgICAgICAgICAgZm9yIHdyIGluIHNlbGYuZGF0YS52YWx1ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB3cgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmRhdGEudmFsdWVzKCkKIAogICAgIGRlZiB2YWx1ZXMoc2VsZik6CiAgICAgICAgIHdpdGggX0l0ZXJhdGlvbkd1YXJkKHNlbGYpOgpAQCAtMzgzLDMgKzQzOCwxNDAgQEAKICAgICAgICAgICAgICAgICBkW3JlZihrZXksIHNlbGYuX3JlbW92ZSldID0gdmFsdWUKICAgICAgICAgaWYgbGVuKGt3YXJncyk6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZShrd2FyZ3MpCisKKworY2xhc3MgZmluYWxpemU6CisgICAgIiIiQ2xhc3MgZm9yIGZpbmFsaXphdGlvbiBvZiB3ZWFrcmVmYWJsZSBvYmplY3RzCisKKyAgICBmaW5hbGl6ZShvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncykgcmV0dXJucyBhIGNhbGxhYmxlIGZpbmFsaXplcgorICAgIG9iamVjdCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIG9iaiBpcyBnYXJiYWdlIGNvbGxlY3RlZC4gVGhlCisgICAgZmlyc3QgdGltZSB0aGUgZmluYWxpemVyIGlzIGNhbGxlZCBpdCBldmFsdWF0ZXMgZnVuYygqYXJnLCAqKmt3YXJncykKKyAgICBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiBBZnRlciB0aGlzIHRoZSBmaW5hbGl6ZXIgaXMgZGVhZCwgYW5kCisgICAgY2FsbGluZyBpdCBqdXN0IHJldHVybnMgTm9uZS4KKworICAgIFdoZW4gdGhlIHByb2dyYW0gZXhpdHMgYW55IHJlbWFpbmluZyBmaW5hbGl6ZXJzIGZvciB3aGljaCB0aGUKKyAgICBhdGV4aXQgYXR0cmlidXRlIGlzIHRydWUgd2lsbCBiZSBydW4gaW4gcmV2ZXJzZSBvcmRlciBvZiBjcmVhdGlvbi4KKyAgICBCeSBkZWZhdWx0IGF0ZXhpdCBpcyB0cnVlLgorICAgICIiIgorCisgICAgIyBGaW5hbGl6ZXIgb2JqZWN0cyBkb24ndCBoYXZlIGFueSBzdGF0ZSBvZiB0aGVpciBvd24uICBUaGV5IGFyZQorICAgICMganVzdCB1c2VkIGFzIGtleXMgdG8gbG9va3VwIF9JbmZvIG9iamVjdHMgaW4gdGhlIHJlZ2lzdHJ5LiAgVGhpcworICAgICMgZW5zdXJlcyB0aGF0IHRoZXkgY2Fubm90IGJlIHBhcnQgb2YgYSByZWYtY3ljbGUuCisKKyAgICBfX3Nsb3RzX18gPSAoKQorICAgIF9yZWdpc3RyeSA9IHt9CisgICAgX3NodXRkb3duID0gRmFsc2UKKyAgICBfaW5kZXhfaXRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisgICAgX2RpcnR5ID0gRmFsc2UKKyAgICBfcmVnaXN0ZXJlZF93aXRoX2F0ZXhpdCA9IEZhbHNlCisKKyAgICBjbGFzcyBfSW5mbzoKKyAgICAgICAgX19zbG90c19fID0gKCJ3ZWFrcmVmIiwgImZ1bmMiLCAiYXJncyIsICJrd2FyZ3MiLCAiYXRleGl0IiwgImluZGV4IikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWdpc3RlcmVkX3dpdGhfYXRleGl0OgorICAgICAgICAgICAgIyBXZSBtYXkgcmVnaXN0ZXIgdGhlIGV4aXQgZnVuY3Rpb24gbW9yZSB0aGFuIG9uY2UgYmVjYXVzZQorICAgICAgICAgICAgIyBvZiBhIHRocmVhZCByYWNlLCBidXQgdGhhdCBpcyBoYXJtbGVzcworICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuX2V4aXRmdW5jKQorICAgICAgICAgICAgZmluYWxpemUuX3JlZ2lzdGVyZWRfd2l0aF9hdGV4aXQgPSBUcnVlCisgICAgICAgIGluZm8gPSBzZWxmLl9JbmZvKCkKKyAgICAgICAgaW5mby53ZWFrcmVmID0gcmVmKG9iaiwgc2VsZikKKyAgICAgICAgaW5mby5mdW5jID0gZnVuYworICAgICAgICBpbmZvLmFyZ3MgPSBhcmdzCisgICAgICAgIGluZm8ua3dhcmdzID0ga3dhcmdzIG9yIE5vbmUKKyAgICAgICAgaW5mby5hdGV4aXQgPSBUcnVlCisgICAgICAgIGluZm8uaW5kZXggPSBuZXh0KHNlbGYuX2luZGV4X2l0ZXIpCisgICAgICAgIHNlbGYuX3JlZ2lzdHJ5W3NlbGZdID0gaW5mbworICAgICAgICBmaW5hbGl6ZS5fZGlydHkgPSBUcnVlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgXz1Ob25lKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiBtYXJrIGFzIGRlYWQgYW5kIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncyk7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZSIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkucG9wKHNlbGYsIE5vbmUpCisgICAgICAgIGlmIGluZm8gYW5kIG5vdCBzZWxmLl9zaHV0ZG93bjoKKyAgICAgICAgICAgIHJldHVybiBpbmZvLmZ1bmMoKmluZm8uYXJncywgKiooaW5mby5rd2FyZ3Mgb3Ige30pKQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiBtYXJrIGFzIGRlYWQgYW5kIHJldHVybiAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpOworICAgICAgICBvdGhlcndpc2UgcmV0dXJuIE5vbmUiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBvYmogPSBpbmZvIGFuZCBpbmZvLndlYWtyZWYoKQorICAgICAgICBpZiBvYmogaXMgbm90IE5vbmUgYW5kIHNlbGYuX3JlZ2lzdHJ5LnBvcChzZWxmLCBOb25lKToKKyAgICAgICAgICAgIHJldHVybiAob2JqLCBpbmZvLmZ1bmMsIGluZm8uYXJncywgaW5mby5rd2FyZ3Mgb3Ige30pCisKKyAgICBkZWYgcGVlayhzZWxmKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiByZXR1cm4gKG9iaiwgZnVuYywgYXJncywga3dhcmdzKTsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lIiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgb2JqID0gaW5mbyBhbmQgaW5mby53ZWFrcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIChvYmosIGluZm8uZnVuYywgaW5mby5hcmdzLCBpbmZvLmt3YXJncyBvciB7fSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhbGl2ZShzZWxmKToKKyAgICAgICAgIiIiV2hldGhlciBmaW5hbGl6ZXIgaXMgYWxpdmUiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2VsZi5fcmVnaXN0cnkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhdGV4aXQoc2VsZik6CisgICAgICAgICIiIldoZXRoZXIgZmluYWxpemVyIHNob3VsZCBiZSBjYWxsZWQgYXQgZXhpdCIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIHJldHVybiBib29sKGluZm8pIGFuZCBpbmZvLmF0ZXhpdAorCisgICAgQGF0ZXhpdC5zZXR0ZXIKKyAgICBkZWYgYXRleGl0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBpZiBpbmZvOgorICAgICAgICAgICAgaW5mby5hdGV4aXQgPSBib29sKHZhbHVlKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIG9iaiA9IGluZm8gYW5kIGluZm8ud2Vha3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgb2JqZWN0IGF0ICUjeDsgZGVhZD4nICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGlkKHNlbGYpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgb2JqZWN0IGF0ICUjeDsgZm9yICVyIGF0ICUjeD4nICUgXAorICAgICAgICAgICAgICAgICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBpZChzZWxmKSwgdHlwZShvYmopLl9fbmFtZV9fLCBpZChvYmopKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zZWxlY3RfZm9yX2V4aXQoY2xzKToKKyAgICAgICAgIyBSZXR1cm4gbGl2ZSBmaW5hbGl6ZXJzIG1hcmtlZCBmb3IgZXhpdCwgb2xkZXN0IGZpcnN0CisgICAgICAgIEwgPSBbKGYsaSkgZm9yIChmLGkpIGluIGNscy5fcmVnaXN0cnkuaXRlbXMoKSBpZiBpLmF0ZXhpdF0KKyAgICAgICAgTC5zb3J0KGtleT1sYW1iZGEgaXRlbTppdGVtWzFdLmluZGV4KQorICAgICAgICByZXR1cm4gW2YgZm9yIChmLGkpIGluIExdCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2V4aXRmdW5jKGNscyk6CisgICAgICAgICMgQXQgc2h1dGRvd24gaW52b2tlIGZpbmFsaXplcnMgZm9yIHdoaWNoIGF0ZXhpdCBpcyB0cnVlLgorICAgICAgICAjIFRoaXMgaXMgY2FsbGVkIG9uY2UgYWxsIG90aGVyIG5vbi1kYWVtb25pYyB0aHJlYWRzIGhhdmUgYmVlbgorICAgICAgICAjIGpvaW5lZC4KKyAgICAgICAgcmVlbmFibGVfZ2MgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBjbHMuX3JlZ2lzdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgICAgIGlmIGdjLmlzZW5hYmxlZCgpOgorICAgICAgICAgICAgICAgICAgICByZWVuYWJsZV9nYyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZ2MuZGlzYWJsZSgpCisgICAgICAgICAgICAgICAgcGVuZGluZyA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBpZiBwZW5kaW5nIGlzIE5vbmUgb3IgZmluYWxpemUuX2RpcnR5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZyA9IGNscy5fc2VsZWN0X2Zvcl9leGl0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplLl9kaXJ0eSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwZW5kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZiA9IHBlbmRpbmcucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBnYyBpcyBkaXNhYmxlZCwgc28gKGFzc3VtaW5nIG5vIGRhZW1vbmljCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRocmVhZHMpIHRoZSBmb2xsb3dpbmcgaXMgdGhlIG9ubHkgbGluZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0IHRyaWdnZXIgY3JlYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICMgb2YgYSBuZXcgZmluYWxpemVyCisgICAgICAgICAgICAgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGYgbm90IGluIGNscy5fcmVnaXN0cnkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgcHJldmVudCBhbnkgbW9yZSBmaW5hbGl6ZXJzIGZyb20gZXhlY3V0aW5nIGR1cmluZyBzaHV0ZG93bgorICAgICAgICAgICAgZmluYWxpemUuX3NodXRkb3duID0gVHJ1ZQorICAgICAgICAgICAgaWYgcmVlbmFibGVfZ2M6CisgICAgICAgICAgICAgICAgZ2MuZW5hYmxlKCkKZGlmZiAtLWdpdCBhL0xpYi93ZWJicm93c2VyLnB5IGIvTGliL3dlYmJyb3dzZXIucHkKaW5kZXggOTQ1ZWRhNC4uODQ1ZjFkMCAxMDA3NTUKLS0tIGEvTGliL3dlYmJyb3dzZXIucHkKKysrIGIvTGliL3dlYmJyb3dzZXIucHkKQEAgLTIsMTMgKzIsMTEgQEAKICIiIkludGVyZmFjZXMgZm9yIGxhdW5jaGluZyBhbmQgcmVtb3RlbHkgY29udHJvbGxpbmcgV2ViIGJyb3dzZXJzLiIiIgogIyBNYWludGFpbmVkIGJ5IEdlb3JnIEJyYW5kbC4KIAotaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzaGxleAoraW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwotaW1wb3J0IHN0YXQKIGltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgdGltZQogCiBfX2FsbF9fID0gWyJFcnJvciIsICJvcGVuIiwgIm9wZW5fbmV3IiwgIm9wZW5fbmV3X3RhYiIsICJnZXQiLCAicmVnaXN0ZXIiXQogCkBAIC04Myw3ICs4MSw3IEBACiAKICAgICAiIiIKICAgICBjbWQgPSBicm93c2VyLnNwbGl0KClbMF0KLSAgICBpZiBub3QgX2lzY29tbWFuZChjbWQpOgorICAgIGlmIG5vdCBzaHV0aWwud2hpY2goY21kKToKICAgICAgICAgcmV0dXJuIFtOb25lLCBOb25lXQogICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGNtZCkKICAgICB0cnk6CkBAIC0xMDIsMzggKzEwMCw2IEBACiAgICAgcmV0dXJuIFtOb25lLCBOb25lXQogCiAKLWlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gIndpbiI6Ci0gICAgZGVmIF9pc2V4ZWN1dGFibGUoY21kKToKLSAgICAgICAgY21kID0gY21kLmxvd2VyKCkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKSBhbmQgY21kLmVuZHN3aXRoKCgiLmV4ZSIsICIuYmF0IikpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgZm9yIGV4dCBpbiAiLmV4ZSIsICIuYmF0IjoKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNtZCArIGV4dCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi1lbHNlOgotICAgIGRlZiBfaXNleGVjdXRhYmxlKGNtZCk6Ci0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNtZCk6Ci0gICAgICAgICAgICBtb2RlID0gb3Muc3RhdChjbWQpW3N0YXQuU1RfTU9ERV0KLSAgICAgICAgICAgIGlmIG1vZGUgJiBzdGF0LlNfSVhVU1Igb3IgbW9kZSAmIHN0YXQuU19JWEdSUCBvciBtb2RlICYgc3RhdC5TX0lYT1RIOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi1kZWYgX2lzY29tbWFuZChjbWQpOgotICAgICIiIlJldHVybiBUcnVlIGlmIGNtZCBpcyBleGVjdXRhYmxlIG9yIGNhbiBiZSBmb3VuZCBvbiB0aGUgZXhlY3V0YWJsZQotICAgIHNlYXJjaCBwYXRoLiIiIgotICAgIGlmIF9pc2V4ZWN1dGFibGUoY21kKToKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICBwYXRoID0gb3MuZW52aXJvbi5nZXQoIlBBVEgiKQotICAgIGlmIG5vdCBwYXRoOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICBmb3IgZCBpbiBwYXRoLnNwbGl0KG9zLnBhdGhzZXApOgotICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4oZCwgY21kKQotICAgICAgICBpZiBfaXNleGVjdXRhYmxlKGV4ZSk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHJldHVybiBGYWxzZQotCi0KICMgR2VuZXJhbCBwYXJlbnQgY2xhc3NlcwogCiBjbGFzcyBCYXNlQnJvd3NlcihvYmplY3QpOgpAQCAtMTkzLDEwICsxNTksOCBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKICAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsaW5lKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0c2lkJywgTm9uZSkKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2V0c2lkOgotICAgICAgICAgICAgICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0cGdycCcsIE5vbmUpCi0gICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbGluZSwgY2xvc2VfZmRzPVRydWUsIHByZWV4ZWNfZm49c2V0c2lkKQorICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZGxpbmUsIGNsb3NlX2Zkcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUpCiAgICAgICAgICAgICByZXR1cm4gKHAucG9sbCgpIGlzIE5vbmUpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC0zNTUsMTEgKzMxOSw2IEBACiAgICAgICAgICAgICBhY3Rpb24gPSAib3BlblVSTCIKIAogICAgICAgICBkZXZudWxsID0gc3VicHJvY2Vzcy5ERVZOVUxMCi0gICAgICAgICMgaWYgcG9zc2libGUsIHB1dCBicm93c2VyIGluIHNlcGFyYXRlIHByb2Nlc3MgZ3JvdXAsIHNvCi0gICAgICAgICMga2V5Ym9hcmQgaW50ZXJydXB0cyBkb24ndCBhZmZlY3QgYnJvd3NlciBhcyB3ZWxsIGFzIFB5dGhvbgotICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0c2lkJywgTm9uZSkKLSAgICAgICAgaWYgbm90IHNldHNpZDoKLSAgICAgICAgICAgIHNldHNpZCA9IGdldGF0dHIob3MsICdzZXRwZ3JwJywgTm9uZSkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbImtmbWNsaWVudCIsIGFjdGlvbiwgdXJsXSwKQEAgLTM3Nyw3ICszMzYsNyBAQAogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJrb25xdWVyb3IiLCAiLS1zaWxlbnQiLCB1cmxdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUsIHN0ZGluPWRldm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9ZGV2bnVsbCwgc3RkZXJyPWRldm51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPXNldHNpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBmYWxsIHRocm91Z2ggdG8gbmV4dCB2YXJpYW50CiAgICAgICAgICAgICBwYXNzCkBAIC0zOTAsNyArMzQ5LDcgQEAKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsia2ZtIiwgIi1kIiwgdXJsXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlLCBzdGRpbj1kZXZudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PWRldm51bGwsIHN0ZGVycj1kZXZudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1zZXRzaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9uZXdfc2Vzc2lvbj1UcnVlKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBlbHNlOgpAQCAtNDE4LDExICszNzcsMTEgQEAKICAgICAgICAgICAgICMgbmVlZCB0byBQSU5HIGVhY2ggb25lIHVudGlsIHdlIGZpbmQgb25lIHRoYXQncyBsaXZlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KGZuKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgbm8gZ29vZDsgYXR0ZW1wdCB0byBjbGVhbiBpdCBvdXQsIGJ1dCBkb24ndCBmYWlsOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBzCkBAIC00NTMsMjIgKzQxMiwyMiBAQAogZGVmIHJlZ2lzdGVyX1hfYnJvd3NlcnMoKToKIAogICAgICMgdXNlIHhkZy1vcGVuIGlmIGFyb3VuZAotICAgIGlmIF9pc2NvbW1hbmQoInhkZy1vcGVuIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ4ZGctb3BlbiIpOgogICAgICAgICByZWdpc3RlcigieGRnLW9wZW4iLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigieGRnLW9wZW4iKSkKIAogICAgICMgVGhlIGRlZmF1bHQgR05PTUUzIGJyb3dzZXIKLSAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBfaXNjb21tYW5kKCJndmZzLW9wZW4iKToKKyAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBzaHV0aWwud2hpY2goImd2ZnMtb3BlbiIpOgogICAgICAgICByZWdpc3RlcigiZ3Zmcy1vcGVuIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoImd2ZnMtb3BlbiIpKQogCiAgICAgIyBUaGUgZGVmYXVsdCBHTk9NRSBicm93c2VyCi0gICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgX2lzY29tbWFuZCgiZ25vbWUtb3BlbiIpOgorICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgiZ25vbWUtb3BlbiIpOgogICAgICAgICByZWdpc3RlcigiZ25vbWUtb3BlbiIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJnbm9tZS1vcGVuIikpCiAKICAgICAjIFRoZSBkZWZhdWx0IEtERSBicm93c2VyCi0gICAgaWYgIktERV9GVUxMX1NFU1NJT04iIGluIG9zLmVudmlyb24gYW5kIF9pc2NvbW1hbmQoImtmbWNsaWVudCIpOgorICAgIGlmICJLREVfRlVMTF9TRVNTSU9OIiBpbiBvcy5lbnZpcm9uIGFuZCBzaHV0aWwud2hpY2goImtmbWNsaWVudCIpOgogICAgICAgICByZWdpc3Rlcigia2ZtY2xpZW50IiwgS29ucXVlcm9yLCBLb25xdWVyb3IoImtmbWNsaWVudCIpKQogCi0gICAgaWYgX2lzY29tbWFuZCgieC13d3ctYnJvd3NlciIpOgorICAgIGlmIHNodXRpbC53aGljaCgieC13d3ctYnJvd3NlciIpOgogICAgICAgICByZWdpc3RlcigieC13d3ctYnJvd3NlciIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJ4LXd3dy1icm93c2VyIikpCiAKICAgICAjIFRoZSBNb3ppbGxhL05ldHNjYXBlIGJyb3dzZXJzCkBAIC00NzYsMzkgKzQzNSwzOSBAQAogICAgICAgICAgICAgICAgICAgICAibW96aWxsYS1maXJlYmlyZCIsICJmaXJlYmlyZCIsCiAgICAgICAgICAgICAgICAgICAgICJpY2V3ZWFzZWwiLCAiaWNlYXBlIiwKICAgICAgICAgICAgICAgICAgICAgInNlYW1vbmtleSIsICJtb3ppbGxhIiwgIm5ldHNjYXBlIik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIE1vemlsbGEoYnJvd3NlcikpCiAKICAgICAjIEtvbnF1ZXJvci9rZm0sIHRoZSBLREUgYnJvd3Nlci4KLSAgICBpZiBfaXNjb21tYW5kKCJrZm0iKToKKyAgICBpZiBzaHV0aWwud2hpY2goImtmbSIpOgogICAgICAgICByZWdpc3Rlcigia2ZtIiwgS29ucXVlcm9yLCBLb25xdWVyb3IoImtmbSIpKQotICAgIGVsaWYgX2lzY29tbWFuZCgia29ucXVlcm9yIik6CisgICAgZWxpZiBzaHV0aWwud2hpY2goImtvbnF1ZXJvciIpOgogICAgICAgICByZWdpc3Rlcigia29ucXVlcm9yIiwgS29ucXVlcm9yLCBLb25xdWVyb3IoImtvbnF1ZXJvciIpKQogCiAgICAgIyBHbm9tZSdzIEdhbGVvbiBhbmQgRXBpcGhhbnkKICAgICBmb3IgYnJvd3NlciBpbiAoImdhbGVvbiIsICJlcGlwaGFueSIpOgotICAgICAgICBpZiBfaXNjb21tYW5kKGJyb3dzZXIpOgorICAgICAgICBpZiBzaHV0aWwud2hpY2goYnJvd3Nlcik6CiAgICAgICAgICAgICByZWdpc3Rlcihicm93c2VyLCBOb25lLCBHYWxlb24oYnJvd3NlcikpCiAKICAgICAjIFNraXBzdG9uZSwgYW5vdGhlciBHdGsvTW96aWxsYSBiYXNlZCBicm93c2VyCi0gICAgaWYgX2lzY29tbWFuZCgic2tpcHN0b25lIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJza2lwc3RvbmUiKToKICAgICAgICAgcmVnaXN0ZXIoInNraXBzdG9uZSIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJza2lwc3RvbmUiKSkKIAogICAgICMgR29vZ2xlIENocm9tZS9DaHJvbWl1bSBicm93c2VycwogICAgIGZvciBicm93c2VyIGluICgiZ29vZ2xlLWNocm9tZSIsICJjaHJvbWUiLCAiY2hyb21pdW0iLCAiY2hyb21pdW0tYnJvd3NlciIpOgotICAgICAgICBpZiBfaXNjb21tYW5kKGJyb3dzZXIpOgorICAgICAgICBpZiBzaHV0aWwud2hpY2goYnJvd3Nlcik6CiAgICAgICAgICAgICByZWdpc3Rlcihicm93c2VyLCBOb25lLCBDaHJvbWUoYnJvd3NlcikpCiAKICAgICAjIE9wZXJhLCBxdWl0ZSBwb3B1bGFyCi0gICAgaWYgX2lzY29tbWFuZCgib3BlcmEiKToKKyAgICBpZiBzaHV0aWwud2hpY2goIm9wZXJhIik6CiAgICAgICAgIHJlZ2lzdGVyKCJvcGVyYSIsIE5vbmUsIE9wZXJhKCJvcGVyYSIpKQogCiAgICAgIyBOZXh0LCBNb3NhaWMgLS0gb2xkIGJ1dCBzdGlsbCBpbiB1c2UuCi0gICAgaWYgX2lzY29tbWFuZCgibW9zYWljIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJtb3NhaWMiKToKICAgICAgICAgcmVnaXN0ZXIoIm1vc2FpYyIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJtb3NhaWMiKSkKIAogICAgICMgR3JhaWwsIHRoZSBQeXRob24gYnJvd3Nlci4gRG9lcyBhbnlib2R5IHN0aWxsIHVzZSBpdD8KLSAgICBpZiBfaXNjb21tYW5kKCJncmFpbCIpOgorICAgIGlmIHNodXRpbC53aGljaCgiZ3JhaWwiKToKICAgICAgICAgcmVnaXN0ZXIoImdyYWlsIiwgR3JhaWwsIE5vbmUpCiAKICMgUHJlZmVyIFggYnJvd3NlcnMgaWYgcHJlc2VudApAQCAtNTE3LDE4ICs0NzYsMTggQEAKIAogIyBBbHNvIHRyeSBjb25zb2xlIGJyb3dzZXJzCiBpZiBvcy5lbnZpcm9uLmdldCgiVEVSTSIpOgotICAgIGlmIF9pc2NvbW1hbmQoInd3dy1icm93c2VyIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ3d3ctYnJvd3NlciIpOgogICAgICAgICByZWdpc3Rlcigid3d3LWJyb3dzZXIiLCBOb25lLCBHZW5lcmljQnJvd3Nlcigid3d3LWJyb3dzZXIiKSkKICAgICAjIFRoZSBMaW5rcy9lbGlua3MgYnJvd3NlcnMgPGh0dHA6Ly9hcnRheC5rYXJsaW4ubWZmLmN1bmkuY3ovfm1pa3VsYXMvbGlua3MvPgotICAgIGlmIF9pc2NvbW1hbmQoImxpbmtzIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJsaW5rcyIpOgogICAgICAgICByZWdpc3RlcigibGlua3MiLCBOb25lLCBHZW5lcmljQnJvd3NlcigibGlua3MiKSkKLSAgICBpZiBfaXNjb21tYW5kKCJlbGlua3MiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImVsaW5rcyIpOgogICAgICAgICByZWdpc3RlcigiZWxpbmtzIiwgTm9uZSwgRWxpbmtzKCJlbGlua3MiKSkKICAgICAjIFRoZSBMeW54IGJyb3dzZXIgPGh0dHA6Ly9seW54LmlzYy5vcmcvPiwgPGh0dHA6Ly9seW54LmJyb3dzZXIub3JnLz4KLSAgICBpZiBfaXNjb21tYW5kKCJseW54Iik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJseW54Iik6CiAgICAgICAgIHJlZ2lzdGVyKCJseW54IiwgTm9uZSwgR2VuZXJpY0Jyb3dzZXIoImx5bngiKSkKICAgICAjIFRoZSB3M20gYnJvd3NlciA8aHR0cDovL3czbS5zb3VyY2Vmb3JnZS5uZXQvPgotICAgIGlmIF9pc2NvbW1hbmQoInczbSIpOgorICAgIGlmIHNodXRpbC53aGljaCgidzNtIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ3M20iLCBOb25lLCBHZW5lcmljQnJvd3NlcigidzNtIikpCiAKICMKQEAgLTU0MCw3ICs0OTksNyBAQAogICAgICAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3Muc3RhcnRmaWxlKHVybCkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIFtFcnJvciAyMl0gTm8gYXBwbGljYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKICAgICAgICAgICAgICAgICAjIGZpbGUgZm9yIHRoaXMgb3BlcmF0aW9uOiAnPFVSTD4nCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC01NTgsNyArNTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJuZXQgRXhwbG9yZXJcXElFWFBMT1JFLkVYRSIpCiAgICAgZm9yIGJyb3dzZXIgaW4gKCJmaXJlZm94IiwgImZpcmViaXJkIiwgInNlYW1vbmtleSIsICJtb3ppbGxhIiwKICAgICAgICAgICAgICAgICAgICAgIm5ldHNjYXBlIiwgIm9wZXJhIiwgaWV4cGxvcmUpOgotICAgICAgICBpZiBfaXNjb21tYW5kKGJyb3dzZXIpOgorICAgICAgICBpZiBzaHV0aWwud2hpY2goYnJvd3Nlcik6CiAgICAgICAgICAgICByZWdpc3Rlcihicm93c2VyLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3Nlcihicm93c2VyKSkKIAogIwpAQCAtNjQ0LDE3ICs2MDMsNiBAQAogICAgIHJlZ2lzdGVyKCJNYWNPU1giLCBOb25lLCBNYWNPU1hPU0FTY3JpcHQoJ2RlZmF1bHQnKSwgLTEpCiAKIAotIwotIyBQbGF0Zm9ybSBzdXBwb3J0IGZvciBPUy8yCi0jCi0KLWlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gIm9zMiIgYW5kIF9pc2NvbW1hbmQoIm5ldHNjYXBlIik6Ci0gICAgX3RyeW9yZGVyID0gW10KLSAgICBfYnJvd3NlcnMgPSB7fQotICAgIHJlZ2lzdGVyKCJvczJuZXRzY2FwZSIsIE5vbmUsCi0gICAgICAgICAgICAgR2VuZXJpY0Jyb3dzZXIoWyJzdGFydCIsICJuZXRzY2FwZSIsICIlcyJdKSwgLTEpCi0KLQogIyBPSywgbm93IHRoYXQgd2Uga25vdyB3aGF0IHRoZSBkZWZhdWx0IHByZWZlcmVuY2Ugb3JkZXJzIGZvciBlYWNoCiAjIHBsYXRmb3JtIGFyZSwgYWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGVtIHdpdGggdGhlIEJST1dTRVIgdmFyaWFibGUuCiBpZiAiQlJPV1NFUiIgaW4gb3MuZW52aXJvbjoKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL19faW5pdF9fLnB5IGIvTGliL3dzZ2lyZWYvX19pbml0X18ucHkKaW5kZXggNDZjNTc5Zi4uMWVmYmJhMCAxMDA2NDQKLS0tIGEvTGliL3dzZ2lyZWYvX19pbml0X18ucHkKKysrIGIvTGliL3dzZ2lyZWYvX19pbml0X18ucHkKQEAgLTEsNCArMSw0IEBACi0iIiJ3c2dpcmVmIC0tIGEgV1NHSSAoUEVQIDMzMykgUmVmZXJlbmNlIExpYnJhcnkKKyIiIndzZ2lyZWYgLS0gYSBXU0dJIChQRVAgMzMzMykgUmVmZXJlbmNlIExpYnJhcnkKIAogQ3VycmVudCBDb250ZW50czoKIApkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5IGIvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CmluZGV4IGYwNzRhYjkuLjg5NzYxNDQgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQorKysgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKQEAgLTEyMSwxMCArMTIxLDEyIEBACiAgICAgICAgIHFuYW1lID0gIiVzOiVzIiAlIChwcmVmaXgsIGxvY2FsbmFtZSkKICAgICAgICAgcW5hbWUgPSBpbnRlcm4ocW5hbWUsIHFuYW1lKQogICAgICAgICBsb2NhbG5hbWUgPSBpbnRlcm4obG9jYWxuYW1lLCBsb2NhbG5hbWUpCi0gICAgZWxzZToKKyAgICBlbGlmIGxlbihwYXJ0cykgPT0gMjoKICAgICAgICAgdXJpLCBsb2NhbG5hbWUgPSBwYXJ0cwogICAgICAgICBwcmVmaXggPSBFTVBUWV9QUkVGSVgKICAgICAgICAgcW5hbWUgPSBsb2NhbG5hbWUgPSBpbnRlcm4obG9jYWxuYW1lLCBsb2NhbG5hbWUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgc3ludGF4OiBzcGFjZXMgaW4gVVJJcyBub3Qgc3VwcG9ydGVkOiAlciIgJSBuYW1lKQogICAgIHJldHVybiBpbnRlcm4odXJpLCB1cmkpLCBsb2NhbG5hbWUsIHByZWZpeCwgcW5hbWUKIAogCkBAIC05MDUsMTEgKzkwNyw4IEBACiAgICAgICAgIGJ1aWxkZXIgPSBFeHBhdEJ1aWxkZXIoKQogCiAgICAgaWYgaXNpbnN0YW5jZShmaWxlLCBzdHIpOgotICAgICAgICBmcCA9IG9wZW4oZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3JiJykgYXMgZnA6CiAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmcCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICBlbHNlOgogICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmaWxlKQogICAgIHJldHVybiByZXN1bHQKQEAgLTkzOSwxMSArOTM4LDggQEAKICAgICAgICAgYnVpbGRlciA9IEZyYWdtZW50QnVpbGRlcihjb250ZXh0KQogCiAgICAgaWYgaXNpbnN0YW5jZShmaWxlLCBzdHIpOgotICAgICAgICBmcCA9IG9wZW4oZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3JiJykgYXMgZnA6CiAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmcCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICBlbHNlOgogICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmaWxlKQogICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi94bWwvZG9tL21pbmlkb20ucHkgYi9MaWIveG1sL2RvbS9taW5pZG9tLnB5CmluZGV4IDZmNzE2MzEuLmMzNzlhMzMgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZG9tL21pbmlkb20ucHkKKysrIGIvTGliL3htbC9kb20vbWluaWRvbS5weQpAQCAtOTc2LDcgKzk3Niw3IEBACiAgICAgZGVmIF9nZXRfbm9kZVZhbHVlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5kYXRhCiAgICAgZGVmIF9zZXRfbm9kZVZhbHVlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLmRhdGEgPSB2YWx1ZQogICAgIG5vZGVWYWx1ZSA9IHByb3BlcnR5KF9nZXRfbm9kZVZhbHVlLCBfc2V0X25vZGVWYWx1ZSkKIAogICAgICMgbm9kZU5hbWUgaXMgYW4gYWxpYXMgZm9yIHRhcmdldApkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKaW5kZXggNzFlZWIwNS4uOTYzNDcwZSAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CkBAIC03MSw4ICs3MSw4IEBACiAjIEByZXR1cm4gVGhlIGV4cGFuZGVkIHJlc291cmNlLiAgSWYgdGhlIHBhcnNlIG1vZGUgaXMgInhtbCIsIHRoaXMKICMgICAgaXMgYW4gRWxlbWVudFRyZWUgaW5zdGFuY2UuICBJZiB0aGUgcGFyc2UgbW9kZSBpcyAidGV4dCIsIHRoaXMKICMgICAgaXMgYSBVbmljb2RlIHN0cmluZy4gIElmIHRoZSBsb2FkZXIgZmFpbHMsIGl0IGNhbiByZXR1cm4gTm9uZQotIyAgICBvciByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbi4KLSMgQHRocm93cyBJT0Vycm9yIElmIHRoZSBsb2FkZXIgZmFpbHMgdG8gbG9hZCB0aGUgcmVzb3VyY2UuCisjICAgIG9yIHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uLgorIyBAdGhyb3dzIE9TRXJyb3IgSWYgdGhlIGxvYWRlciBmYWlscyB0byBsb2FkIHRoZSByZXNvdXJjZS4KIAogZGVmIGRlZmF1bHRfbG9hZGVyKGhyZWYsIHBhcnNlLCBlbmNvZGluZz1Ob25lKToKICAgICBpZiBwYXJzZSA9PSAieG1sIjoKQEAgLTk0LDcgKzk0LDcgQEAKICMgICAgIHRoYXQgaW1wbGVtZW50cyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgPGI+ZGVmYXVsdF9sb2FkZXI8L2I+LgogIyBAdGhyb3dzIEZhdGFsSW5jbHVkZUVycm9yIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBpbmNsdWRlIGEgZ2l2ZW4KICMgICAgIHJlc291cmNlLCBvciBpZiB0aGUgdHJlZSBjb250YWlucyBtYWxmb3JtZWQgWEluY2x1ZGUgZWxlbWVudHMuCi0jIEB0aHJvd3MgSU9FcnJvciBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdG8gbG9hZCBhIGdpdmVuIHJlc291cmNlLgorIyBAdGhyb3dzIE9TRXJyb3IgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRvIGxvYWQgYSBnaXZlbiByZXNvdXJjZS4KIAogZGVmIGluY2x1ZGUoZWxlbSwgbG9hZGVyPU5vbmUpOgogICAgIGlmIGxvYWRlciBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKaW5kZXggZTcwMTVjNy4uZDkxNGRkYiAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CkBAIC0xMDUsMTQgKzEwNSwxMiBAQAogZGVmIHByZXBhcmVfc3RhcihuZXh0LCB0b2tlbik6CiAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgogICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6Ci0gICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgotICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZWxlbQogICAgIHJldHVybiBzZWxlY3QKIAogZGVmIHByZXBhcmVfc2VsZihuZXh0LCB0b2tlbik6CiAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgotICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6Ci0gICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgICAgIHlpZWxkIGZyb20gcmVzdWx0CiAgICAgcmV0dXJuIHNlbGVjdAogCiBkZWYgcHJlcGFyZV9kZXNjZW5kYW50KG5leHQsIHRva2VuKToKQEAgLTE3Niw3ICsxNzQsNyBAQAogICAgICAgICAgICAgICAgIGlmIGVsZW0uZ2V0KGtleSkgPT0gdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgcmV0dXJuIHNlbGVjdAotICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgYW5kIG5vdCByZS5tYXRjaCgiXGQrJCIsIHByZWRpY2F0ZVswXSk6CisgICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcLT9cZCskIiwgcHJlZGljYXRlWzBdKToKICAgICAgICAgIyBbdGFnXQogICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KICAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgpAQCAtMTg0LDcgKzE4Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgZWxlbS5maW5kKHRhZykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgcmV0dXJuIHNlbGVjdAotICAgIGlmIHNpZ25hdHVyZSA9PSAiLT0nIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICBpZiBzaWduYXR1cmUgPT0gIi09JyIgYW5kIG5vdCByZS5tYXRjaCgiXC0/XGQrJCIsIHByZWRpY2F0ZVswXSk6CiAgICAgICAgICMgW3RhZz0ndmFsdWUnXQogICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KICAgICAgICAgdmFsdWUgPSBwcmVkaWNhdGVbLTFdCkBAIC0xOTgsNyArMTk2LDEwIEBACiAgICAgaWYgc2lnbmF0dXJlID09ICItIiBvciBzaWduYXR1cmUgPT0gIi0oKSIgb3Igc2lnbmF0dXJlID09ICItKCktIjoKICAgICAgICAgIyBbaW5kZXhdIG9yIFtsYXN0KCldIG9yIFtsYXN0KCktaW5kZXhdCiAgICAgICAgIGlmIHNpZ25hdHVyZSA9PSAiLSI6CisgICAgICAgICAgICAjIFtpbmRleF0KICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVswXSkgLSAxCisgICAgICAgICAgICBpZiBpbmRleCA8IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIlhQYXRoIHBvc2l0aW9uID49IDEgZXhwZWN0ZWQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgcHJlZGljYXRlWzBdICE9ICJsYXN0IjoKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidW5zdXBwb3J0ZWQgZnVuY3Rpb24iKQpAQCAtMjA3LDYgKzIwOCw4IEBACiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVsyXSkgLSAxCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBleHByZXNzaW9uIikKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA+IC0yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiWFBhdGggb2Zmc2V0IGZyb20gbGFzdCgpIG11c3QgYmUgbmVnYXRpdmUiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpbmRleCA9IC0xCiAgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CmluZGV4IGE4ZTU3MjkuLmQ5ZTk4MDcgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQpAQCAtMSwyOCArMSw0NyBAQAorIiIiTGlnaHR3ZWlnaHQgWE1MIHN1cHBvcnQgZm9yIFB5dGhvbi4KKworIFhNTCBpcyBhbiBpbmhlcmVudGx5IGhpZXJhcmNoaWNhbCBkYXRhIGZvcm1hdCwgYW5kIHRoZSBtb3N0IG5hdHVyYWwgd2F5IHRvCisgcmVwcmVzZW50IGl0IGlzIHdpdGggYSB0cmVlLiAgVGhpcyBtb2R1bGUgaGFzIHR3byBjbGFzc2VzIGZvciB0aGlzIHB1cnBvc2U6CisKKyAgICAxLiBFbGVtZW50VHJlZSByZXByZXNlbnRzIHRoZSB3aG9sZSBYTUwgZG9jdW1lbnQgYXMgYSB0cmVlIGFuZAorCisgICAgMi4gRWxlbWVudCByZXByZXNlbnRzIGEgc2luZ2xlIG5vZGUgaW4gdGhpcyB0cmVlLgorCisgSW50ZXJhY3Rpb25zIHdpdGggdGhlIHdob2xlIGRvY3VtZW50IChyZWFkaW5nIGFuZCB3cml0aW5nIHRvL2Zyb20gZmlsZXMpIGFyZQorIHVzdWFsbHkgZG9uZSBvbiB0aGUgRWxlbWVudFRyZWUgbGV2ZWwuICBJbnRlcmFjdGlvbnMgd2l0aCBhIHNpbmdsZSBYTUwgZWxlbWVudAorIGFuZCBpdHMgc3ViLWVsZW1lbnRzIGFyZSBkb25lIG9uIHRoZSBFbGVtZW50IGxldmVsLgorCisgRWxlbWVudCBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QgZGVzaWduZWQgdG8gc3RvcmUgaGllcmFyY2hpY2FsIGRhdGEKKyBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gSXQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGNyb3NzIGJldHdlZW4gYSBsaXN0IGFuZCBhCisgZGljdGlvbmFyeS4gIEVhY2ggRWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6CisKKyAgICAndGFnJyAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyBuYW1lLgorCisgICAgJ2F0dHJpYnV0ZXMnIC0gYSBQeXRob24gZGljdGlvbmFyeSBzdG9yaW5nIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4KKworICAgICd0ZXh0JyAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyB0ZXh0IGNvbnRlbnQuCisKKyAgICAndGFpbCcgLSBhbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyB0ZXh0IGFmdGVyIHRoZSBlbGVtZW50J3MgZW5kIHRhZy4KKworICAgIEFuZCBhIG51bWJlciBvZiBjaGlsZCBlbGVtZW50cyBzdG9yZWQgaW4gYSBQeXRob24gc2VxdWVuY2UuCisKKyBUbyBjcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSwgdXNlIHRoZSBFbGVtZW50IGNvbnN0cnVjdG9yLAorIG9yIHRoZSBTdWJFbGVtZW50IGZhY3RvcnkgZnVuY3Rpb24uCisKKyBZb3UgY2FuIGFsc28gdXNlIHRoZSBFbGVtZW50VHJlZSBjbGFzcyB0byB3cmFwIGFuIGVsZW1lbnQgc3RydWN0dXJlCisgYW5kIGNvbnZlcnQgaXQgdG8gYW5kIGZyb20gWE1MLgorCisiIiIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogIwogIyBFbGVtZW50VHJlZQotIyAkSWQ6IEVsZW1lbnRUcmVlLnB5IDM0NDAgMjAwOC0wNy0xOCAxNDo0NTowMVogZnJlZHJpayAkCi0jCi0jIGxpZ2h0LXdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uIDIuMyBhbmQgbGF0ZXIuCi0jCi0jIGhpc3RvcnkgKHNpbmNlIDEuMi42KToKLSMgMjAwNS0xMS0xMiBmbCAgIGFkZGVkIHRvc3RyaW5nbGlzdC9mcm9tc3RyaW5nbGlzdCBoZWxwZXJzCi0jIDIwMDYtMDctMDUgZmwgICBtZXJnZWQgaW4gc2VsZWN0ZWQgY2hhbmdlcyBmcm9tIHRoZSAxLjMgc2FuZGJveAotIyAyMDA2LTA3LTA1IGZsICAgcmVtb3ZlZCBzdXBwb3J0IGZvciAyLjEgYW5kIGVhcmxpZXIKLSMgMjAwNy0wNi0yMSBmbCAgIGFkZGVkIGRlcHJlY2F0aW9uL2Z1dHVyZSB3YXJuaW5ncwotIyAyMDA3LTA4LTI1IGZsICAgYWRkZWQgZG9jdHlwZSBob29rLCBhZGRlZCBwYXJzZXIgdmVyc2lvbiBhdHRyaWJ1dGUgZXRjCi0jIDIwMDctMDgtMjYgZmwgICBhZGRlZCBuZXcgc2VyaWFsaXplciBjb2RlIChiZXR0ZXIgbmFtZXNwYWNlIGhhbmRsaW5nLCBldGMpCi0jIDIwMDctMDgtMjcgZmwgICB3YXJuIGZvciBicm9rZW4gL3RhZyBzZWFyY2hlcyBvbiB0cmVlIGxldmVsCi0jIDIwMDctMDktMDIgZmwgICBhZGRlZCBodG1sL3RleHQgbWV0aG9kcyB0byBzZXJpYWxpemVyIChleHBlcmltZW50YWwpCi0jIDIwMDctMDktMDUgZmwgICBhZGRlZCBtZXRob2QgYXJndW1lbnQgdG8gdG9zdHJpbmcvdG9zdHJpbmdsaXN0Ci0jIDIwMDctMDktMDYgZmwgICBpbXByb3ZlZCBlcnJvciBoYW5kbGluZwotIyAyMDA3LTA5LTEzIGZsICAgYWRkZWQgaXRlcnRleHQsIGl0ZXJmaW5kOyBhc3NvcnRlZCBjbGVhbnVwcwotIyAyMDA3LTEyLTE1IGZsICAgYWRkZWQgQzE0TiBob29rcywgY29weSBtZXRob2QgKGV4cGVyaW1lbnRhbCkKLSMKICMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggYnkgRnJlZHJpayBMdW5kaC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIGZyZWRyaWtAcHl0aG9ud2FyZS5jb20KICMgaHR0cDovL3d3dy5weXRob253YXJlLmNvbQotIwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgRWxlbWVudFRyZWUgdG9vbGtpdCBpcwogIwpAQCAtNTEsOSArNzAsNiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCi0KIF9fYWxsX18gPSBbCiAgICAgIyBwdWJsaWMgc3ltYm9scwogICAgICJDb21tZW50IiwKQEAgLTY5LDM0ICs4NSwxMiBAQAogICAgICJUcmVlQnVpbGRlciIsCiAgICAgIlZFUlNJT04iLAogICAgICJYTUwiLCAiWE1MSUQiLAotICAgICJYTUxQYXJzZXIiLCAiWE1MVHJlZUJ1aWxkZXIiLAorICAgICJYTUxQYXJzZXIiLAogICAgICJyZWdpc3Rlcl9uYW1lc3BhY2UiLAogICAgIF0KIAogVkVSU0lPTiA9ICIxLjMuMCIKIAotIyMKLSMgVGhlIDxiPkVsZW1lbnQ8L2I+IHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0bwotIyBzdG9yZSBoaWVyYXJjaGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gVGhlIHR5cGUgY2FuIGJlCi0jIGRlc2NyaWJlZCBhcyBhIGNyb3NzIGJldHdlZW4gYSBsaXN0IGFuZCBhIGRpY3Rpb25hcnkuCi0jIDxwPgotIyBFYWNoIGVsZW1lbnQgaGFzIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIGl0OgotIyA8dWw+Ci0jIDxsaT5hIDxpPnRhZzwvaT4uIFRoaXMgaXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgd2hhdCBraW5kIG9mIGRhdGEKLSMgdGhpcyBlbGVtZW50IHJlcHJlc2VudHMgKHRoZSBlbGVtZW50IHR5cGUsIGluIG90aGVyIHdvcmRzKS48L2xpPgotIyA8bGk+YSBudW1iZXIgb2YgPGk+YXR0cmlidXRlczwvaT4sIHN0b3JlZCBpbiBhIFB5dGhvbiBkaWN0aW9uYXJ5LjwvbGk+Ci0jIDxsaT5hIDxpPnRleHQ8L2k+IHN0cmluZy48L2xpPgotIyA8bGk+YW4gb3B0aW9uYWwgPGk+dGFpbDwvaT4gc3RyaW5nLjwvbGk+Ci0jIDxsaT5hIG51bWJlciBvZiA8aT5jaGlsZCBlbGVtZW50czwvaT4sIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZTwvbGk+Ci0jIDwvdWw+Ci0jCi0jIFRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIHtAbGluayAjRWxlbWVudH0gY29uc3RydWN0b3IKLSMgb3IgdGhlIHtAbGluayAjU3ViRWxlbWVudH0gZmFjdG9yeSBmdW5jdGlvbi4KLSMgPHA+Ci0jIFRoZSB7QGxpbmsgI0VsZW1lbnRUcmVlfSBjbGFzcyBjYW4gYmUgdXNlZCB0byB3cmFwIGFuIGVsZW1lbnQKLSMgc3RydWN0dXJlLCBhbmQgY29udmVydCBpdCBmcm9tIGFuZCB0byBYTUwuCi0jIwotCiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncwpAQCAtMTA2LDgxICsxMDAsNjggQEAKIGZyb20gLiBpbXBvcnQgRWxlbWVudFBhdGgKIAogCi0jIwotIyBQYXJzZXIgZXJyb3IuICBUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgPGI+U3ludGF4RXJyb3I8L2I+LgotIyA8cD4KLSMgSW4gYWRkaXRpb24gdG8gdGhlIGV4Y2VwdGlvbiB2YWx1ZSwgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGNvbnRhaW5zIGEKLSMgc3BlY2lmaWMgZXhjZXB0aW9uIGNvZGUgaW4gdGhlIDxiPmNvZGU8L2I+IGF0dHJpYnV0ZSwgYW5kIHRoZSBsaW5lIGFuZAotIyBjb2x1bW4gb2YgdGhlIGVycm9yIGluIHRoZSA8Yj5wb3NpdGlvbjwvYj4gYXR0cmlidXRlLgotCiBjbGFzcyBQYXJzZUVycm9yKFN5bnRheEVycm9yKToKKyAgICAiIiJBbiBlcnJvciB3aGVuIHBhcnNpbmcgYW4gWE1MIGRvY3VtZW50LgorCisgICAgSW4gYWRkaXRpb24gdG8gaXRzIGV4Y2VwdGlvbiB2YWx1ZSwgYSBQYXJzZUVycm9yIGNvbnRhaW5zCisgICAgdHdvIGV4dHJhIGF0dHJpYnV0ZXM6CisgICAgICAgICdjb2RlJyAgICAgLSB0aGUgc3BlY2lmaWMgZXhjZXB0aW9uIGNvZGUKKyAgICAgICAgJ3Bvc2l0aW9uJyAtIHRoZSBsaW5lIGFuZCBjb2x1bW4gb2YgdGhlIGVycm9yCisKKyAgICAiIiIKICAgICBwYXNzCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgQ2hlY2tzIGlmIGFuIG9iamVjdCBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgZWxlbWVudCBvYmplY3QuCi0jCi0jIEBwYXJhbSBBbiBlbGVtZW50IGluc3RhbmNlLgotIyBAcmV0dXJuIEEgdHJ1ZSB2YWx1ZSBpZiB0aGlzIGlzIGFuIGVsZW1lbnQgb2JqZWN0LgotIyBAZGVmcmV0dXJuIGZsYWcKIAogZGVmIGlzZWxlbWVudChlbGVtZW50KToKLSAgICAjIEZJWE1FOiBub3Qgc3VyZSBhYm91dCB0aGlzOwotICAgICMgaXNpbnN0YW5jZShlbGVtZW50LCBFbGVtZW50KSBvciBsb29rIGZvciB0YWcvYXR0cmliL3RleHQgYXR0cmlidXRlcworICAgICIiIlJldHVybiBUcnVlIGlmICplbGVtZW50KiBhcHBlYXJzIHRvIGJlIGFuIEVsZW1lbnQuIiIiCiAgICAgcmV0dXJuIGhhc2F0dHIoZWxlbWVudCwgJ3RhZycpCiAKLSMjCi0jIEVsZW1lbnQgY2xhc3MuICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLCBhbmQKLSMgcHJvdmlkZXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpbnRlcmZhY2UuCi0jIDxwPgotIyBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZQotIyBlaXRoZXIgQVNDSUkgc3RyaW5ncyAob3JkaW5hcnkgUHl0aG9uIHN0cmluZ3MgY29udGFpbmluZyBvbmx5IDctYml0Ci0jIEFTQ0lJIGNoYXJhY3RlcnMpIG9yIFVuaWNvZGUgc3RyaW5ncy4KLSMKLSMgQHBhcmFtIHRhZyBUaGUgZWxlbWVudCBuYW1lLgotIyBAcGFyYW0gYXR0cmliIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotIyBAcGFyYW0gKipleHRyYSBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotIyBAc2VlIEVsZW1lbnQKLSMgQHNlZSBTdWJFbGVtZW50Ci0jIEBzZWUgQ29tbWVudAotIyBAc2VlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgogCiBjbGFzcyBFbGVtZW50OgotICAgICMgPHRhZyBhdHRyaWI+dGV4dDxjaGlsZC8+Li4uPC90YWc+dGFpbAorICAgICIiIkFuIFhNTCBlbGVtZW50LgogCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIEVsZW1lbnQgdGFnLgorICAgIFRoaXMgY2xhc3MgaXMgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWxlbWVudCBpbnRlcmZhY2UuCisKKyAgICBBbiBlbGVtZW50J3MgbGVuZ3RoIGlzIGl0cyBudW1iZXIgb2Ygc3ViZWxlbWVudHMuICBUaGF0IG1lYW5zIGlmIHlvdQorICAgIHlvdSB3YW50IHRvIGNoZWNrIGlmIGFuIGVsZW1lbnQgaXMgdHJ1bHkgZW1wdHksIHlvdSBzaG91bGQgY2hlY2sgQk9USAorICAgIGl0cyBsZW5ndGggQU5EIGl0cyB0ZXh0IGF0dHJpYnV0ZS4KKworICAgIFRoZSBlbGVtZW50IHRhZywgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyCisgICAgYnl0ZXMgb3Igc3RyaW5ncy4KKworICAgICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuICAqYXR0cmliKiBpcyBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcKKyAgICBlbGVtZW50IGF0dHJpYnV0ZXMuICpleHRyYSogYXJlIGFkZGl0aW9uYWwgZWxlbWVudCBhdHRyaWJ1dGVzIGdpdmVuIGFzCisgICAga2V5d29yZCBhcmd1bWVudHMuCisKKyAgICBFeGFtcGxlIGZvcm06CisgICAgICAgIDx0YWcgYXR0cmliPnRleHQ8Y2hpbGQvPi4uLjwvdGFnPnRhaWwKKworICAgICIiIgogCiAgICAgdGFnID0gTm9uZQotCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIEVsZW1lbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkuICBXaGVyZSBwb3NzaWJsZSwgdXNlCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQuZ2V0fSwKLSAgICAjIHtAbGluayAjRWxlbWVudC5zZXR9LAotICAgICMge0BsaW5rICNFbGVtZW50LmtleXN9LCBhbmQKLSAgICAjIHtAbGluayAjRWxlbWVudC5pdGVtc30gdG8gYWNjZXNzCi0gICAgIyBlbGVtZW50IGF0dHJpYnV0ZXMuCisgICAgIiIiVGhlIGVsZW1lbnQncyBuYW1lLiIiIgogCiAgICAgYXR0cmliID0gTm9uZQotCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIFRleHQgYmVmb3JlIGZpcnN0IHN1YmVsZW1lbnQuICBUaGlzIGlzIGVpdGhlciBhCi0gICAgIyBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUuICBOb3RlIHRoYXQgaWYgdGhlcmUgd2FzIG5vIHRleHQsIHRoaXMKLSAgICAjIGF0dHJpYnV0ZSBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZXBlbmRpbmcgb24KLSAgICAjIHRoZSBwYXJzZXIuCisgICAgIiIiRGljdGlvbmFyeSBvZiB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuIiIiCiAKICAgICB0ZXh0ID0gTm9uZQorICAgICIiIgorICAgIFRleHQgYmVmb3JlIGZpcnN0IHN1YmVsZW1lbnQuIFRoaXMgaXMgZWl0aGVyIGEgc3RyaW5nIG9yIHRoZSB2YWx1ZSBOb25lLgorICAgIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZSBtYXkgYmUgZWl0aGVyCisgICAgTm9uZSBvciB0aGUgZW1wdHkgc3RyaW5nLCBkZXBlbmRpbmcgb24gdGhlIHBhcnNlci4KIAotICAgICMjCi0gICAgIyAoQXR0cmlidXRlKSBUZXh0IGFmdGVyIHRoaXMgZWxlbWVudCdzIGVuZCB0YWcsIGJ1dCBiZWZvcmUgdGhlCi0gICAgIyBuZXh0IHNpYmxpbmcgZWxlbWVudCdzIHN0YXJ0IHRhZy4gIFRoaXMgaXMgZWl0aGVyIGEgc3RyaW5nIG9yCi0gICAgIyB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZSB3YXMgbm8gdGV4dCwgdGhpcyBhdHRyaWJ1dGUKLSAgICAjIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgorICAgICIiIgogCi0gICAgdGFpbCA9IE5vbmUgIyB0ZXh0IGFmdGVyIGVuZCB0YWcsIGlmIGFueQorICAgIHRhaWwgPSBOb25lCisgICAgIiIiCisgICAgVGV4dCBhZnRlciB0aGlzIGVsZW1lbnQncyBlbmQgdGFnLCBidXQgYmVmb3JlIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCdzCisgICAgc3RhcnQgdGFnLiAgVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUuICBOb3RlIHRoYXQgaWYgdGhlcmUKKyAgICB3YXMgbm8gdGV4dCwgdGhpcyBhdHRyaWJ1dGUgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywKKyAgICBkZXBlbmRpbmcgb24gdGhlIHBhcnNlci4KIAotICAgICMgY29uc3RydWN0b3IKKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIGF0dHJpYj17fSwgKipleHRyYSk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHJpYiwgZGljdCk6CkBAIC0xOTUsMzYgKzE3NiwzMCBAQAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICI8RWxlbWVudCAlcyBhdCAweCV4PiIgJSAocmVwcihzZWxmLnRhZyksIGlkKHNlbGYpKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGlzIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBFbGVtZW50IHRhZy4KLSAgICAjIEBwYXJhbSBhdHRyaWIgRWxlbWVudCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBhIGRpY3Rpb25hcnkuCi0gICAgIyBAcmV0dXJuIEEgbmV3IGVsZW1lbnQgaW5zdGFuY2UuCi0KICAgICBkZWYgbWFrZWVsZW1lbnQoc2VsZiwgdGFnLCBhdHRyaWIpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgZWxlbWVudCB3aXRoIHRoZSBzYW1lIHR5cGUuCisKKyAgICAgICAgKnRhZyogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZWxlbWVudCBuYW1lLgorICAgICAgICAqYXR0cmliKiBpcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgZWxlbWVudCBhdHRyaWJ1dGVzLgorCisgICAgICAgIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kLCB1c2UgdGhlIFN1YkVsZW1lbnQgZmFjdG9yeSBmdW5jdGlvbiBpbnN0ZWFkLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18odGFnLCBhdHRyaWIpCiAKLSAgICAjIwotICAgICMgKEV4cGVyaW1lbnRhbCkgQ29waWVzIHRoZSBjdXJyZW50IGVsZW1lbnQuICBUaGlzIGNyZWF0ZXMgYQotICAgICMgc2hhbGxvdyBjb3B5OyBzdWJlbGVtZW50cyB3aWxsIGJlIHNoYXJlZCB3aXRoIHRoZSBvcmlnaW5hbCB0cmVlLgotICAgICMKLSAgICAjIEByZXR1cm4gQSBuZXcgZWxlbWVudCBpbnN0YW5jZS4KLQogICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gY29weSBvZiBjdXJyZW50IGVsZW1lbnQuCisKKyAgICAgICAgVGhpcyBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5LiBTdWJlbGVtZW50cyB3aWxsIGJlIHNoYXJlZCB3aXRoIHRoZQorICAgICAgICBvcmlnaW5hbCB0cmVlLgorCisgICAgICAgICIiIgogICAgICAgICBlbGVtID0gc2VsZi5tYWtlZWxlbWVudChzZWxmLnRhZywgc2VsZi5hdHRyaWIpCiAgICAgICAgIGVsZW0udGV4dCA9IHNlbGYudGV4dAogICAgICAgICBlbGVtLnRhaWwgPSBzZWxmLnRhaWwKICAgICAgICAgZWxlbVs6XSA9IHNlbGYKICAgICAgICAgcmV0dXJuIGVsZW0KIAotICAgICMjCi0gICAgIyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3ViZWxlbWVudHMuICBOb3RlIHRoYXQgdGhpcyBvbmx5IGNvdW50cwotICAgICMgZnVsbCBlbGVtZW50czsgdG8gY2hlY2sgaWYgdGhlcmUncyBhbnkgY29udGVudCBpbiBhbiBlbGVtZW50LCB5b3UKLSAgICAjIGhhdmUgdG8gY2hlY2sgYm90aCB0aGUgbGVuZ3RoIGFuZCB0aGUgPGI+dGV4dDwvYj4gYXR0cmlidXRlLgotICAgICMKLSAgICAjIEByZXR1cm4gVGhlIG51bWJlciBvZiBzdWJlbGVtZW50cy4KLQogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2NoaWxkcmVuKQogCkBAIC0yMzYsMjMgKzIxMSw5IEBACiAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fY2hpbGRyZW4pICE9IDAgIyBlbXVsYXRlIG9sZCBiZWhhdmlvdXIsIGZvciBub3cKIAotICAgICMjCi0gICAgIyBSZXR1cm5zIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KLSAgICAjCi0gICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIHJldHVybi4KLSAgICAjIEByZXR1cm4gVGhlIGdpdmVuIHN1YmVsZW1lbnQuCi0gICAgIyBAZXhjZXB0aW9uIEluZGV4RXJyb3IgSWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCi0KICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW5baW5kZXhdCiAKLSAgICAjIwotICAgICMgUmVwbGFjZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gcmVwbGFjZS4KLSAgICAjIEBwYXJhbSBlbGVtZW50IFRoZSBuZXcgZWxlbWVudCB2YWx1ZS4KLSAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KLQogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgZWxlbWVudCk6CiAgICAgICAgICMgaWYgaXNpbnN0YW5jZShpbmRleCwgc2xpY2UpOgogICAgICAgICAjICAgICBmb3IgZWx0IGluIGVsZW1lbnQ6CkBAIC0yNjEsNzYgKzIyMiw2MiBAQAogICAgICAgICAjICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuW2luZGV4XSA9IGVsZW1lbnQKIAotICAgICMjCi0gICAgIyBEZWxldGVzIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KLSAgICAjCi0gICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIGRlbGV0ZS4KLSAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KLQogICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgIGRlbCBzZWxmLl9jaGlsZHJlbltpbmRleF0KIAotICAgICMjCi0gICAgIyBBZGRzIGEgc3ViZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoaXMgZWxlbWVudC4gIEluIGRvY3VtZW50IG9yZGVyLAotICAgICMgdGhlIG5ldyBlbGVtZW50IHdpbGwgYXBwZWFyIGFmdGVyIHRoZSBsYXN0IGV4aXN0aW5nIHN1YmVsZW1lbnQgKG9yCi0gICAgIyBkaXJlY3RseSBhZnRlciB0aGUgdGV4dCwgaWYgaXQncyB0aGUgZmlyc3Qgc3ViZWxlbWVudCksIGJ1dCBiZWZvcmUKLSAgICAjIHRoZSBlbmQgdGFnIGZvciB0aGlzIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gYWRkLgorICAgIGRlZiBhcHBlbmQoc2VsZiwgc3ViZWxlbWVudCk6CisgICAgICAgICIiIkFkZCAqc3ViZWxlbWVudCogdG8gdGhlIGVuZCBvZiB0aGlzIGVsZW1lbnQuCiAKLSAgICBkZWYgYXBwZW5kKHNlbGYsIGVsZW1lbnQpOgotICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChlbGVtZW50KQotICAgICAgICBzZWxmLl9jaGlsZHJlbi5hcHBlbmQoZWxlbWVudCkKKyAgICAgICAgVGhlIG5ldyBlbGVtZW50IHdpbGwgYXBwZWFyIGluIGRvY3VtZW50IG9yZGVyIGFmdGVyIHRoZSBsYXN0IGV4aXN0aW5nCisgICAgICAgIHN1YmVsZW1lbnQgKG9yIGRpcmVjdGx5IGFmdGVyIHRoZSB0ZXh0LCBpZiBpdCdzIHRoZSBmaXJzdCBzdWJlbGVtZW50KSwKKyAgICAgICAgYnV0IGJlZm9yZSB0aGUgZW5kIHRhZyBmb3IgdGhpcyBlbGVtZW50LgogCi0gICAgIyMKLSAgICAjIEFwcGVuZHMgc3ViZWxlbWVudHMgZnJvbSBhIHNlcXVlbmNlLgotICAgICMKLSAgICAjIEBwYXJhbSBlbGVtZW50cyBBIHNlcXVlbmNlIG9iamVjdCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cy4KLSAgICAjIEBzaW5jZSAxLjMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KHN1YmVsZW1lbnQpCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLmFwcGVuZChzdWJlbGVtZW50KQogCiAgICAgZGVmIGV4dGVuZChzZWxmLCBlbGVtZW50cyk6CisgICAgICAgICIiIkFwcGVuZCBzdWJlbGVtZW50cyBmcm9tIGEgc2VxdWVuY2UuCisKKyAgICAgICAgKmVsZW1lbnRzKiBpcyBhIHNlcXVlbmNlIHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgorCisgICAgICAgICIiIgogICAgICAgICBmb3IgZWxlbWVudCBpbiBlbGVtZW50czoKICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuLmV4dGVuZChlbGVtZW50cykKIAotICAgICMjCi0gICAgIyBJbnNlcnRzIGEgc3ViZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGVyZSB0byBpbnNlcnQgdGhlIG5ldyBzdWJlbGVtZW50LgotCi0gICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgZWxlbWVudCk6Ci0gICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuLmluc2VydChpbmRleCwgZWxlbWVudCkKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCBzdWJlbGVtZW50KToKKyAgICAgICAgIiIiSW5zZXJ0ICpzdWJlbGVtZW50KiBhdCBwb3NpdGlvbiAqaW5kZXgqLiIiIgorICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChzdWJlbGVtZW50KQorICAgICAgICBzZWxmLl9jaGlsZHJlbi5pbnNlcnQoaW5kZXgsIHN1YmVsZW1lbnQpCiAKICAgICBkZWYgX2Fzc2VydF9pc19lbGVtZW50KHNlbGYsIGUpOgogICAgICAgICAjIE5lZWQgdG8gcmVmZXIgdG8gdGhlIGFjdHVhbCBQeXRob24gaW1wbGVtZW50YXRpb24sIG5vdCB0aGUKICAgICAgICAgIyBzaGFkb3dpbmcgQyBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgX0VsZW1lbnQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBfRWxlbWVudF9QeSk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkIGFuIEVsZW1lbnQsIG5vdCAlcycgJSB0eXBlKGUpLl9fbmFtZV9fKQogCi0gICAgIyMKLSAgICAjIFJlbW92ZXMgYSBtYXRjaGluZyBzdWJlbGVtZW50LiAgVW5saWtlIHRoZSA8Yj5maW5kPC9iPiBtZXRob2RzLAotICAgICMgdGhpcyBtZXRob2QgY29tcGFyZXMgZWxlbWVudHMgYmFzZWQgb24gaWRlbnRpdHksIG5vdCBvbiB0YWcKLSAgICAjIHZhbHVlIG9yIGNvbnRlbnRzLiAgVG8gcmVtb3ZlIHN1YmVsZW1lbnRzIGJ5IG90aGVyIG1lYW5zLCB0aGUKLSAgICAjIGVhc2llc3Qgd2F5IGlzIG9mdGVuIHRvIHVzZSBhIGxpc3QgY29tcHJlaGVuc2lvbiB0byBzZWxlY3Qgd2hhdAotICAgICMgZWxlbWVudHMgdG8ga2VlcCwgYW5kIHVzZSBzbGljZSBhc3NpZ25tZW50IHRvIHVwZGF0ZSB0aGUgcGFyZW50Ci0gICAgIyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBlbGVtZW50IFdoYXQgZWxlbWVudCB0byByZW1vdmUuCi0gICAgIyBAZXhjZXB0aW9uIFZhbHVlRXJyb3IgSWYgYSBtYXRjaGluZyBlbGVtZW50IGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHN1YmVsZW1lbnQpOgorICAgICAgICAiIiJSZW1vdmUgbWF0Y2hpbmcgc3ViZWxlbWVudC4KIAotICAgIGRlZiByZW1vdmUoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIFVubGlrZSB0aGUgZmluZCBtZXRob2RzLCB0aGlzIG1ldGhvZCBjb21wYXJlcyBlbGVtZW50cyBiYXNlZCBvbgorICAgICAgICBpZGVudGl0eSwgTk9UIE9OIHRhZyB2YWx1ZSBvciBjb250ZW50cy4gIFRvIHJlbW92ZSBzdWJlbGVtZW50cyBieQorICAgICAgICBvdGhlciBtZWFucywgdGhlIGVhc2llc3Qgd2F5IGlzIHRvIHVzZSBhIGxpc3QgY29tcHJlaGVuc2lvbiB0bworICAgICAgICBzZWxlY3Qgd2hhdCBlbGVtZW50cyB0byBrZWVwLCBhbmQgdGhlbiB1c2Ugc2xpY2UgYXNzaWdubWVudCB0byB1cGRhdGUKKyAgICAgICAgdGhlIHBhcmVudCBlbGVtZW50LgorCisgICAgICAgIFZhbHVlRXJyb3IgaXMgcmFpc2VkIGlmIGEgbWF0Y2hpbmcgZWxlbWVudCBjb3VsZCBub3QgYmUgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQotICAgICAgICBzZWxmLl9jaGlsZHJlbi5yZW1vdmUoZWxlbWVudCkKLQotICAgICMjCi0gICAgIyAoRGVwcmVjYXRlZCkgUmV0dXJucyBhbGwgc3ViZWxlbWVudHMuICBUaGUgZWxlbWVudHMgYXJlIHJldHVybmVkCi0gICAgIyBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvZiBzdWJlbGVtZW50cy4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBFbGVtZW50IGluc3RhbmNlcworICAgICAgICBzZWxmLl9jaGlsZHJlbi5yZW1vdmUoc3ViZWxlbWVudCkKIAogICAgIGRlZiBnZXRjaGlsZHJlbihzZWxmKToKKyAgICAgICAgIiIiKERlcHJlY2F0ZWQpIFJldHVybiBhbGwgc3ViZWxlbWVudHMuCisKKyAgICAgICAgRWxlbWVudHMgYXJlIHJldHVybmVkIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICB3YXJuaW5ncy53YXJuKAogICAgICAgICAgICAgIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCiAgICAgICAgICAgICAiVXNlICdsaXN0KGVsZW0pJyBvciBpdGVyYXRpb24gb3ZlciBlbGVtIGluc3RlYWQuIiwKQEAgLTMzOCwxMzEgKzI4NSwxMjggQEAKICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuCiAKLSAgICAjIwotICAgICMgRmluZHMgdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIFRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50IG9yIE5vbmUKLQogICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyB0ZXh0IGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcgc3ViZWxlbWVudCwgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZQotICAgICMgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQKLSAgICAjICAgICBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4KLSAgICAjICAgICBlbXB0eSBzdHJpbmcuCi0gICAgIyBAZGVmcmV0dXJuIHN0cmluZwotCiAgICAgZGVmIGZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCB0ZXh0IGZvciBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpkZWZhdWx0KiBpcyB0aGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRleHQgY29udGVudCBvZiBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBkZWZhdWx0IHZhbHVlIGlmCisgICAgICAgIG5vbmUgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIGFuIGVsZW1lbnQgaXMgZm91bmQgaGF2aW5nIG5vIHRleHQKKyAgICAgICAgY29udGVudCwgdGhlIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBIGxpc3Qgb3Igb3RoZXIgc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCi0gICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm5zIGxpc3QgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBvciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBhIGdlbmVyYXRlZCBzZXF1ZW5jZSBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGl0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhYmxlIHlpZWxkaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLml0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgUmVzZXRzIGFuIGVsZW1lbnQuICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMKLSAgICAjIGFsbCBhdHRyaWJ1dGVzLCBhbmQgc2V0cyB0aGUgPGI+dGV4dDwvYj4gYW5kIDxiPnRhaWw8L2I+IGF0dHJpYnV0ZXMKLSAgICAjIHRvIE5vbmUuCi0KICAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlJlc2V0IGVsZW1lbnQuCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBzdWJlbGVtZW50cywgY2xlYXJzIGFsbCBhdHRyaWJ1dGVzLCBhbmQgc2V0cworICAgICAgICB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIHRvIE5vbmUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYXR0cmliLmNsZWFyKCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBbXQogICAgICAgICBzZWxmLnRleHQgPSBzZWxmLnRhaWwgPSBOb25lCiAKLSAgICAjIwotICAgICMgR2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLmdldDwvYj4sIGJ1dAotICAgICMgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgIwotICAgICMgQHBhcmFtIGtleSBXaGF0IGF0dHJpYnV0ZSB0byBsb29rIGZvci4KLSAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KLSAgICAjIEByZXR1cm4gVGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3IgdGhlIGRlZmF1bHQgdmFsdWUsIGlmIHRoZQotICAgICMgICAgIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgotICAgICMgQGRlZnJldHVybiBzdHJpbmcgb3IgTm9uZQotCiAgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICIiIkdldCBlbGVtZW50IGF0dHJpYnV0ZS4KKworICAgICAgICBFcXVpdmFsZW50IHRvIGF0dHJpYi5nZXQsIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYQorICAgICAgICBiaXQgbW9yZSBlZmZpY2llbnRseS4gICprZXkqIGlzIHdoYXQgYXR0cmlidXRlIHRvIGxvb2sgZm9yLCBhbmQKKyAgICAgICAgKmRlZmF1bHQqIGlzIHdoYXQgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KKworICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3IgdGhlIGRlZmF1bHQgaWYKKyAgICAgICAgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmF0dHJpYi5nZXQoa2V5LCBkZWZhdWx0KQogCi0gICAgIyMKLSAgICAjIFNldHMgYW4gZWxlbWVudCBhdHRyaWJ1dGUuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYltrZXldID0gdmFsdWU8L2I+LAotICAgICMgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudGx5LgotICAgICMKLSAgICAjIEBwYXJhbSBrZXkgV2hhdCBhdHRyaWJ1dGUgdG8gc2V0LgotICAgICMgQHBhcmFtIHZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWUuCi0KICAgICBkZWYgc2V0KHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAiIiJTZXQgZWxlbWVudCBhdHRyaWJ1dGUuCisKKyAgICAgICAgRXF1aXZhbGVudCB0byBhdHRyaWJba2V5XSA9IHZhbHVlLCBidXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZQorICAgICAgICB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuICAqa2V5KiBpcyB3aGF0IGF0dHJpYnV0ZSB0byBzZXQsIGFuZAorICAgICAgICAqdmFsdWUqIGlzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgdG8gc2V0IGl0IHRvLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmF0dHJpYltrZXldID0gdmFsdWUKIAotICAgICMjCi0gICAgIyBHZXRzIGEgbGlzdCBvZiBhdHRyaWJ1dGUgbmFtZXMuICBUaGUgbmFtZXMgYXJlIHJldHVybmVkIGluIGFuCi0gICAgIyBhcmJpdHJhcnkgb3JkZXIgKGp1c3QgbGlrZSBmb3IgYW4gb3JkaW5hcnkgUHl0aG9uIGRpY3Rpb25hcnkpLgotICAgICMgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIua2V5cygpPC9iPi4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvZiBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcy4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBzdHJpbmdzCi0KICAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgIiIiR2V0IGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzLgorCisgICAgICAgIE5hbWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcmJpdHJhcnkgb3JkZXIsIGp1c3QgbGlrZSBhbiBvcmRpbmFyeQorICAgICAgICBQeXRob24gZGljdC4gIEVxdWl2YWxlbnQgdG8gYXR0cmliLmtleXMoKQorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hdHRyaWIua2V5cygpCiAKLSAgICAjIwotICAgICMgR2V0cyBlbGVtZW50IGF0dHJpYnV0ZXMsIGFzIGEgc2VxdWVuY2UuICBUaGUgYXR0cmlidXRlcyBhcmUKLSAgICAjIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlci4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLml0ZW1zKCk8L2I+LgotICAgICMKLSAgICAjIEByZXR1cm4gQSBsaXN0IG9mIChuYW1lLCB2YWx1ZSkgdHVwbGVzIGZvciBhbGwgYXR0cmlidXRlcy4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiAoc3RyaW5nLCBzdHJpbmcpIHR1cGxlcwotCiAgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICAiIiJHZXQgZWxlbWVudCBhdHRyaWJ1dGVzIGFzIGEgc2VxdWVuY2UuCisKKyAgICAgICAgVGhlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkIGluIGFyYml0cmFyeSBvcmRlci4gIEVxdWl2YWxlbnQgdG8KKyAgICAgICAgYXR0cmliLml0ZW1zKCkuCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcy4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXR0cmliLml0ZW1zKCkKIAotICAgICMjCi0gICAgIyBDcmVhdGVzIGEgdHJlZSBpdGVyYXRvci4gIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoaXMgZWxlbWVudAotICAgICMgYW5kIGFsbCBzdWJlbGVtZW50cywgaW4gZG9jdW1lbnQgb3JkZXIsIGFuZCByZXR1cm5zIGFsbCBlbGVtZW50cwotICAgICMgd2l0aCBhIG1hdGNoaW5nIHRhZy4KLSAgICAjIDxwPgotICAgICMgSWYgdGhlIHRyZWUgc3RydWN0dXJlIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24sIG5ldyBvciByZW1vdmVkCi0gICAgIyBlbGVtZW50cyBtYXkgb3IgbWF5IG5vdCBiZSBpbmNsdWRlZC4gIFRvIGdldCBhIHN0YWJsZSBzZXQsIHVzZSB0aGUKLSAgICAjIGxpc3QoKSBmdW5jdGlvbiBvbiB0aGUgaXRlcmF0b3IsIGFuZCBsb29wIG92ZXIgdGhlIHJlc3VsdGluZyBsaXN0LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgV2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpLgotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBjb250YWluaW5nIGFsbCB0aGUgbWF0Y2hpbmcgZWxlbWVudHMuCi0gICAgIyBAZGVmcmV0dXJuIGl0ZXJhdG9yCi0KICAgICBkZWYgaXRlcihzZWxmLCB0YWc9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSB0cmVlIGl0ZXJhdG9yLgorCisgICAgICAgIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoZSBlbGVtZW50IGFuZCBhbGwgc3ViZWxlbWVudHMgaW4gZG9jdW1lbnQKKyAgICAgICAgb3JkZXIsIHJldHVybmluZyBhbGwgZWxlbWVudHMgd2l0aCBhIG1hdGNoaW5nIHRhZy4KKworICAgICAgICBJZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgbmV3IG9yIHJlbW92ZWQKKyAgICAgICAgZWxlbWVudHMgbWF5IG9yIG1heSBub3QgYmUgaW5jbHVkZWQuICBUbyBnZXQgYSBzdGFibGUgc2V0LCB1c2UgdGhlCisgICAgICAgIGxpc3QoKSBmdW5jdGlvbiBvbiB0aGUgaXRlcmF0b3IsIGFuZCBsb29wIG92ZXIgdGhlIHJlc3VsdGluZyBsaXN0LgorCisgICAgICAgICp0YWcqIGlzIHdoYXQgdGFncyB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKQorCisgICAgICAgIFJldHVybiBhbiBpdGVyYXRvciBjb250YWluaW5nIGFsbCB0aGUgbWF0Y2hpbmcgZWxlbWVudHMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIHRhZyA9PSAiKiI6CiAgICAgICAgICAgICB0YWcgPSBOb25lCiAgICAgICAgIGlmIHRhZyBpcyBOb25lIG9yIHNlbGYudGFnID09IHRhZzoKICAgICAgICAgICAgIHlpZWxkIHNlbGYKICAgICAgICAgZm9yIGUgaW4gc2VsZi5fY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3IgZSBpbiBlLml0ZXIodGFnKToKLSAgICAgICAgICAgICAgICB5aWVsZCBlCisgICAgICAgICAgICB5aWVsZCBmcm9tIGUuaXRlcih0YWcpCiAKICAgICAjIGNvbXBhdGliaWxpdHkKICAgICBkZWYgZ2V0aXRlcmF0b3Ioc2VsZiwgdGFnPU5vbmUpOgpAQCAtNDc0LDc4ICs0MTgsNjcgQEAKICAgICAgICAgKQogICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXIodGFnKSkKIAotICAgICMjCi0gICAgIyBDcmVhdGVzIGEgdGV4dCBpdGVyYXRvci4gIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoaXMgZWxlbWVudAotICAgICMgYW5kIGFsbCBzdWJlbGVtZW50cywgaW4gZG9jdW1lbnQgb3JkZXIsIGFuZCByZXR1cm5zIGFsbCBpbm5lcgotICAgICMgdGV4dC4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIGlubmVyIHRleHQuCi0gICAgIyBAZGVmcmV0dXJuIGl0ZXJhdG9yCi0KICAgICBkZWYgaXRlcnRleHQoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSB0ZXh0IGl0ZXJhdG9yLgorCisgICAgICAgIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoZSBlbGVtZW50IGFuZCBhbGwgc3ViZWxlbWVudHMgaW4gZG9jdW1lbnQKKyAgICAgICAgb3JkZXIsIHJldHVybmluZyBhbGwgaW5uZXIgdGV4dC4KKworICAgICAgICAiIiIKICAgICAgICAgdGFnID0gc2VsZi50YWcKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGFnLCBzdHIpIGFuZCB0YWcgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi50ZXh0OgogICAgICAgICAgICAgeWllbGQgc2VsZi50ZXh0CiAgICAgICAgIGZvciBlIGluIHNlbGY6Ci0gICAgICAgICAgICBmb3IgcyBpbiBlLml0ZXJ0ZXh0KCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcworICAgICAgICAgICAgeWllbGQgZnJvbSBlLml0ZXJ0ZXh0KCkKICAgICAgICAgICAgIGlmIGUudGFpbDoKICAgICAgICAgICAgICAgICB5aWVsZCBlLnRhaWwKIAotIyBjb21wYXRpYmlsaXR5Ci1fRWxlbWVudCA9IF9FbGVtZW50SW50ZXJmYWNlID0gRWxlbWVudAotCi0jIwotIyBTdWJlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZWxlbWVudCBpbnN0YW5jZSwgYW5kCi0jIGFwcGVuZHMgaXQgdG8gYW4gZXhpc3RpbmcgZWxlbWVudC4KLSMgPHA+Ci0jIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlCi0jIGVpdGhlciA4LWJpdCBBU0NJSSBzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4KLSMKLSMgQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGVsZW1lbnQuCi0jIEBwYXJhbSB0YWcgVGhlIHN1YmVsZW1lbnQgbmFtZS4KLSMgQHBhcmFtIGF0dHJpYiBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KLSMgQHBhcmFtICoqZXh0cmEgQWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KLSMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIFN1YkVsZW1lbnQocGFyZW50LCB0YWcsIGF0dHJpYj17fSwgKipleHRyYSk6CisgICAgIiIiU3ViZWxlbWVudCBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgYW4gZWxlbWVudCBpbnN0YW5jZSwgYW5kIGFwcGVuZHMgaXQKKyAgICB0byBhbiBleGlzdGluZyBwYXJlbnQuCisKKyAgICBUaGUgZWxlbWVudCB0YWcsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlIGVpdGhlcgorICAgIGJ5dGVzIG9yIFVuaWNvZGUgc3RyaW5ncy4KKworICAgICpwYXJlbnQqIGlzIHRoZSBwYXJlbnQgZWxlbWVudCwgKnRhZyogaXMgdGhlIHN1YmVsZW1lbnRzIG5hbWUsICphdHRyaWIqIGlzCisgICAgYW4gb3B0aW9uYWwgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLCAqZXh0cmEqIGFyZQorICAgIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgICIiIgogICAgIGF0dHJpYiA9IGF0dHJpYi5jb3B5KCkKICAgICBhdHRyaWIudXBkYXRlKGV4dHJhKQogICAgIGVsZW1lbnQgPSBwYXJlbnQubWFrZWVsZW1lbnQodGFnLCBhdHRyaWIpCiAgICAgcGFyZW50LmFwcGVuZChlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50CiAKLSMjCi0jIENvbW1lbnQgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsCi0jIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIGNvbW1lbnQgYnkgdGhlIHN0YW5kYXJkCi0jIHNlcmlhbGl6ZXIuCi0jIDxwPgotIyBUaGUgY29tbWVudCBzdHJpbmcgY2FuIGJlIGVpdGhlciBhbiA4LWJpdCBBU0NJSSBzdHJpbmcgb3IgYSBVbmljb2RlCi0jIHN0cmluZy4KLSMKLSMgQHBhcmFtIHRleHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudCBzdHJpbmcuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIGEgY29tbWVudC4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBDb21tZW50KHRleHQ9Tm9uZSk6CisgICAgIiIiQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgd2hpY2ggdGhlIHN0YW5kYXJkIHNlcmlhbGl6ZXIKKyAgICBzZXJpYWxpemVzIGFzIGFuIFhNTCBjb21tZW50LgorCisgICAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1lbnQgc3RyaW5nLgorCisgICAgIiIiCiAgICAgZWxlbWVudCA9IEVsZW1lbnQoQ29tbWVudCkKICAgICBlbGVtZW50LnRleHQgPSB0ZXh0CiAgICAgcmV0dXJuIGVsZW1lbnQKIAotIyMKLSMgUEkgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQKLSMgdGhhdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gYnkgdGhlIHN0YW5kYXJkCi0jIHNlcmlhbGl6ZXIuCi0jCi0jIEBwYXJhbSB0YXJnZXQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgUEkgdGFyZ2V0LgotIyBAcGFyYW0gdGV4dCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSBjb250ZW50cywgaWYgYW55LgotIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIFBJLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIFByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIHRleHQ9Tm9uZSk6CisgICAgIiIiUHJvY2Vzc2luZyBJbnN0cnVjdGlvbiBlbGVtZW50IGZhY3RvcnkuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgd2hpY2ggdGhlIHN0YW5kYXJkIHNlcmlhbGl6ZXIKKyAgICBzZXJpYWxpemVzIGFzIGFuIFhNTCBjb21tZW50LgorCisgICAgKnRhcmdldCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiwgKnRleHQqIGlzIGEKKyAgICBzdHJpbmcgY29udGFpbmluZyB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBjb250ZW50cywgaWYgYW55LgorCisgICAgIiIiCiAgICAgZWxlbWVudCA9IEVsZW1lbnQoUHJvY2Vzc2luZ0luc3RydWN0aW9uKQogICAgIGVsZW1lbnQudGV4dCA9IHRhcmdldAogICAgIGlmIHRleHQ6CkBAIC01NTQsMTcgKzQ4NywyMSBAQAogCiBQSSA9IFByb2Nlc3NpbmdJbnN0cnVjdGlvbgogCi0jIwotIyBRTmFtZSB3cmFwcGVyLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB3cmFwIGEgUU5hbWUgYXR0cmlidXRlIHZhbHVlLCBpbgotIyBvcmRlciB0byBnZXQgcHJvcGVyIG5hbWVzcGFjZSBoYW5kbGluZyBvbiBvdXRwdXQuCi0jCi0jIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFFOYW1lIHZhbHVlLCBpbiB0aGUgZm9ybSB7dXJpfWxvY2FsLAotIyAgICAgb3IsIGlmIHRoZSB0YWcgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBVUkkgcGFydCBvZiBhIFFOYW1lLgotIyBAcGFyYW0gdGFnIE9wdGlvbmFsIHRhZy4gIElmIGdpdmVuLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMKLSMgICAgIGFuIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgotIyBAcmV0dXJuIEFuIG9wYXF1ZSBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgUU5hbWUuCiAKIGNsYXNzIFFOYW1lOgorICAgICIiIlF1YWxpZmllZCBuYW1lIHdyYXBwZXIuCisKKyAgICBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYSBRTmFtZSBhdHRyaWJ1dGUgdmFsdWUgaW4gb3JkZXIgdG8gZ2V0CisgICAgcHJvcGVyIG5hbWVzcGFjZSBoYW5kaW5nIG9uIG91dHB1dC4KKworICAgICp0ZXh0X29yX3VyaSogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgUU5hbWUgdmFsdWUgZWl0aGVyIGluIHRoZSBmb3JtCisgICAge3VyaX1sb2NhbCwgb3IgaWYgdGhlIHRhZyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIFVSSSBwYXJ0IG9mIGEgUU5hbWUuCisKKyAgICAqdGFnKiBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB3aGljaCBpZiBnaXZlbiwgd2lsbCBtYWtlIHRoZSBmaXJzdAorICAgIGFyZ3VtZW50ICh0ZXh0X29yX3VyaSkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBVUkksIGFuZCB0aGlzIGFyZ3VtZW50ICh0YWcpCisgICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgorCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHRfb3JfdXJpLCB0YWc9Tm9uZSk6CiAgICAgICAgIGlmIHRhZzoKICAgICAgICAgICAgIHRleHRfb3JfdXJpID0gInslc30lcyIgJSAodGV4dF9vcl91cmksIHRhZykKQEAgLTYwMiw2MyArNTM5LDY1IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgRWxlbWVudFRyZWUgd3JhcHBlciBjbGFzcy4gIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRpcmUgZWxlbWVudAotIyBoaWVyYXJjaHksIGFuZCBhZGRzIHNvbWUgZXh0cmEgc3VwcG9ydCBmb3Igc2VyaWFsaXphdGlvbiB0byBhbmQgZnJvbQotIyBzdGFuZGFyZCBYTUwuCi0jCi0jIEBwYXJhbSBlbGVtZW50IE9wdGlvbmFsIHJvb3QgZWxlbWVudC4KLSMgQGtleXBhcmFtIGZpbGUgT3B0aW9uYWwgZmlsZSBoYW5kbGUgb3IgZmlsZSBuYW1lLiAgSWYgZ2l2ZW4sIHRoZQotIyAgICAgdHJlZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGlzIFhNTCBmaWxlLgogCiBjbGFzcyBFbGVtZW50VHJlZToKKyAgICAiIiJBbiBYTUwgZWxlbWVudCBoaWVyYXJjaHkuCiAKKyAgICBUaGlzIGNsYXNzIGFsc28gcHJvdmlkZXMgc3VwcG9ydCBmb3Igc2VyaWFsaXphdGlvbiB0byBhbmQgZnJvbQorICAgIHN0YW5kYXJkIFhNTC4KKworICAgICplbGVtZW50KiBpcyBhbiBvcHRpb25hbCByb290IGVsZW1lbnQgbm9kZSwKKyAgICAqZmlsZSogaXMgYW4gb3B0aW9uYWwgZmlsZSBoYW5kbGUgb3IgZmlsZSBuYW1lIG9mIGFuIFhNTCBmaWxlIHdob3NlCisgICAgY29udGVudHMgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHRyZWUgd2l0aC4KKworICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgICAgICMgYXNzZXJ0IGVsZW1lbnQgaXMgTm9uZSBvciBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fcm9vdCA9IGVsZW1lbnQgIyBmaXJzdCBub2RlCiAgICAgICAgIGlmIGZpbGU6CiAgICAgICAgICAgICBzZWxmLnBhcnNlKGZpbGUpCiAKLSAgICAjIwotICAgICMgR2V0cyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgZ2V0cm9vdChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHJvb3QgZWxlbWVudCBvZiB0aGlzIHRyZWUuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290CiAKLSAgICAjIwotICAgICMgUmVwbGFjZXMgdGhlIHJvb3QgZWxlbWVudCBmb3IgdGhpcyB0cmVlLiAgVGhpcyBkaXNjYXJkcyB0aGUKLSAgICAjIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHRyZWUsIGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSBnaXZlbgotICAgICMgZWxlbWVudC4gIFVzZSB3aXRoIGNhcmUuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnQgQW4gZWxlbWVudCBpbnN0YW5jZS4KLQogICAgIGRlZiBfc2V0cm9vdChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgIiIiUmVwbGFjZSByb290IGVsZW1lbnQgb2YgdGhpcyB0cmVlLgorCisgICAgICAgIFRoaXMgd2lsbCBkaXNjYXJkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB0cmVlIGFuZCByZXBsYWNlIGl0CisgICAgICAgIHdpdGggdGhlIGdpdmVuIGVsZW1lbnQuICBVc2Ugd2l0aCBjYXJlIQorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fcm9vdCA9IGVsZW1lbnQKIAotICAgICMjCi0gICAgIyBMb2FkcyBhbiBleHRlcm5hbCBYTUwgZG9jdW1lbnQgaW50byB0aGlzIGVsZW1lbnQgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gc291cmNlIEEgZmlsZSBuYW1lIG9yIGZpbGUgb2JqZWN0LiAgSWYgYSBmaWxlIG9iamVjdCBpcwotICAgICMgICAgIGdpdmVuLCBpdCBvbmx5IGhhcyB0byBpbXBsZW1lbnQgYSA8Yj5yZWFkKG4pPC9iPiBtZXRob2QuCi0gICAgIyBAa2V5cGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0gICAgIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0gICAgIyBAcmV0dXJuIFRoZSBkb2N1bWVudCByb290IGVsZW1lbnQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLSAgICAjIEBleGNlcHRpb24gUGFyc2VFcnJvciBJZiB0aGUgcGFyc2VyIGZhaWxzIHRvIHBhcnNlIHRoZSBkb2N1bWVudC4KLQogICAgIGRlZiBwYXJzZShzZWxmLCBzb3VyY2UsIHBhcnNlcj1Ob25lKToKKyAgICAgICAgIiIiTG9hZCBleHRlcm5hbCBYTUwgZG9jdW1lbnQgaW50byBlbGVtZW50IHRyZWUuCisKKyAgICAgICAgKnNvdXJjZSogaXMgYSBmaWxlIG5hbWUgb3IgZmlsZSBvYmplY3QsICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlcgorICAgICAgICBpbnN0YW5jZSB0aGF0IGRlZmF1bHRzIHRvIFhNTFBhcnNlci4KKworICAgICAgICBQYXJzZUVycm9yIGlzIHJhaXNlZCBpZiB0aGUgcGFyc2VyIGZhaWxzIHRvIHBhcnNlIHRoZSBkb2N1bWVudC4KKworICAgICAgICBSZXR1cm5zIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNvdXJjZSBkb2N1bWVudC4KKworICAgICAgICAiIiIKICAgICAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAicmVhZCIpOgogICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCiAgICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIG5vdCBwYXJzZXI6Ci0gICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQotICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGlmIHBhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgSWYgbm8gcGFyc2VyIHdhcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIGRlZmF1bHQgWE1MUGFyc2VyCisgICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKCkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHBhcnNlciwgJ19wYXJzZV93aG9sZScpOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBkZWZhdWx0IFhNTFBhcnNlciwgd2hlbiBpdCBjb21lcyBmcm9tIGFuIGFjY2VsZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAjIGNhbiBkZWZpbmUgYW4gaW50ZXJuYWwgX3BhcnNlX3dob2xlIEFQSSBmb3IgZWZmaWNpZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgIyBJdCBjYW4gYmUgdXNlZCB0byBwYXJzZSB0aGUgd2hvbGUgc291cmNlIHdpdGhvdXQgZmVlZGluZworICAgICAgICAgICAgICAgICAgICAjIGl0IHdpdGggY2h1bmtzLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gcGFyc2VyLl9wYXJzZV93aG9sZShzb3VyY2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yb290CisgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZCg2NTUzNikKICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTY2OSwxNSArNjA4LDE1IEBACiAgICAgICAgICAgICBpZiBjbG9zZV9zb3VyY2U6CiAgICAgICAgICAgICAgICAgc291cmNlLmNsb3NlKCkKIAotICAgICMjCi0gICAgIyBDcmVhdGVzIGEgdHJlZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgZWxlbWVudC4gIFRoZSBpdGVyYXRvciBsb29wcwotICAgICMgb3ZlciBhbGwgZWxlbWVudHMgaW4gdGhpcyB0cmVlLCBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFdoYXQgdGFncyB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKQotICAgICMgQHJldHVybiBBbiBpdGVyYXRvci4KLSAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKLQogICAgIGRlZiBpdGVyKHNlbGYsIHRhZz1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIGFuZCByZXR1cm4gdHJlZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgZWxlbWVudC4KKworICAgICAgICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciBhbGwgZWxlbWVudHMgaW4gdGhpcyB0cmVlLCBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAqdGFnKiBpcyBhIHN0cmluZyB3aXRoIHRoZSB0YWcgbmFtZSB0byBpdGVyYXRlIG92ZXIKKyAgICAgICAgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuaXRlcih0YWcpCiAKQEAgLTY5MSwxNSArNjMwLDE3IEBACiAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVyKHRhZykpCiAKLSAgICAjIwotICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZChwYXRoKSwgc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIFRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50IG9yIE5vbmUKLQogICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmQocGF0aCksIHdoaWNoIGlzIEVsZW1lbnQuZmluZCgpCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03MTEsMTkgKzY1MiwxNyBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmR0ZXh0KHBhdGgpLCBzdGFydGluZyBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZQotICAgICMgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQKLSAgICAjICAgICBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4KLSAgICAjICAgICBlbXB0eSBzdHJpbmcuCi0gICAgIyBAZGVmcmV0dXJuIHN0cmluZwotCiAgICAgZGVmIGZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZHRleHQocGF0aCksICB3aGljaCBpcyBFbGVtZW50LmZpbmR0ZXh0KCkKKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTczNSwxNiArNjc0LDE3IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kdGV4dChwYXRoLCBkZWZhdWx0LCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmRhbGwocGF0aCksIHN0YXJ0aW5nIGF0IHRoZSByb290IG9mIHRoZSB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBIGxpc3Qgb3IgaXRlcmF0b3IgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCi0gICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5maW5kYWxsKHBhdGgpLCB3aGljaCBpcyBFbGVtZW50LmZpbmRhbGwoKS4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gbGlzdCBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzU2LDE3ICs2OTYsMTcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmRhbGwocGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5pdGVyZmluZChwYXRoKS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3Igb3Igc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCi0gICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjIEBkZWZyZXR1cm4gYSBnZW5lcmF0ZWQgc2VxdWVuY2Ugb2YgRWxlbWVudCBpbnN0YW5jZXMKLQogICAgIGRlZiBpdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLml0ZXJmaW5kKHBhdGgpLCB3aGljaCBpcyBlbGVtZW50Lml0ZXJmaW5kKCkKKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gYW4gaXRlcmFibGUgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03NzgsMjYgKzcxOCwzNSBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuaXRlcmZpbmQocGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBXcml0ZXMgdGhlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUsIGFzIFhNTC4KLSAgICAjCi0gICAgIyBAZGVmIHdyaXRlKGZpbGUsICoqb3B0aW9ucykKLSAgICAjIEBwYXJhbSBmaWxlIEEgZmlsZSBuYW1lLCBvciBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3Igd3JpdGluZy4KLSAgICAjIEBwYXJhbSAqKm9wdGlvbnMgT3B0aW9ucywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0gICAgIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KLSAgICAjICAgICBVc2UgInVuaWNvZGUiIHRvIHJldHVybiBhIFVuaWNvZGUgc3RyaW5nLgotICAgICMgQGtleXBhcmFtIHhtbF9kZWNsYXJhdGlvbiBDb250cm9scyBpZiBhbiBYTUwgZGVjbGFyYXRpb24gc2hvdWxkCi0gICAgIyAgICAgYmUgYWRkZWQgdG8gdGhlIGZpbGUuICBVc2UgRmFsc2UgZm9yIG5ldmVyLCBUcnVlIGZvciBhbHdheXMsCi0gICAgIyAgICAgTm9uZSBmb3Igb25seSBpZiBub3QgVVMtQVNDSUkgb3IgVVRGLTggb3IgVW5pY29kZS4gIE5vbmUgaXMgZGVmYXVsdC4KLSAgICAjIEBrZXlwYXJhbSBkZWZhdWx0X25hbWVzcGFjZSBTZXRzIHRoZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2UgKGZvciAieG1sbnMiKS4KLSAgICAjIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCi0gICAgIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KLQogICAgIGRlZiB3cml0ZShzZWxmLCBmaWxlX29yX2ZpbGVuYW1lLAogICAgICAgICAgICAgICBlbmNvZGluZz1Ob25lLAogICAgICAgICAgICAgICB4bWxfZGVjbGFyYXRpb249Tm9uZSwKICAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwKLSAgICAgICAgICAgICAgbWV0aG9kPU5vbmUpOgorICAgICAgICAgICAgICBtZXRob2Q9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSk6CisgICAgICAgICIiIldyaXRlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUgYXMgWE1MLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAqZmlsZV9vcl9maWxlbmFtZSogLS0gZmlsZSBuYW1lIG9yIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nCisKKyAgICAgICAgICAqZW5jb2RpbmcqIC0tIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQ6IFVTLUFTQ0lJKQorCisgICAgICAgICAgKnhtbF9kZWNsYXJhdGlvbiogLS0gYm9vbCBpbmRpY2F0aW5nIGlmIGFuIFhNTCBkZWNsYXJhdGlvbiBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgb3V0cHV0LiBJZiBOb25lLCBhbiBYTUwgZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhZGRlZCBpZiBlbmNvZGluZyBJUyBOT1QgZWl0aGVyIG9mOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTLUFTQ0lJLCBVVEYtOCwgb3IgVW5pY29kZQorCisgICAgICAgICAgKmRlZmF1bHRfbmFtZXNwYWNlKiAtLSBzZXRzIHRoZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2UgKGZvciAieG1sbnMiKQorCisgICAgICAgICAgKm1ldGhvZCogLS0gZWl0aGVyICJ4bWwiIChkZWZhdWx0KSwgImh0bWwsICJ0ZXh0Iiwgb3IgImMxNG4iCisKKyAgICAgICAgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIC0tIGNvbnRyb2xzIHRoZSBmb3JtYXR0aW5nIG9mIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW4gbm8gY29udGVudC4gSWYgVHJ1ZSAoZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXkgYXJlIGVtaXR0ZWQgYXMgYSBzaW5nbGUgc2VsZi1jbG9zZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZywgb3RoZXJ3aXNlIHRoZXkgYXJlIGVtaXR0ZWQgYXMgYSBwYWlyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzdGFydC9lbmQgdGFncworCisgICAgICAgICIiIgogICAgICAgICBpZiBub3QgbWV0aG9kOgogICAgICAgICAgICAgbWV0aG9kID0gInhtbCIKICAgICAgICAgZWxpZiBtZXRob2Qgbm90IGluIF9zZXJpYWxpemU6CkBAIC04MjUsNyArNzc0LDggQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcW5hbWVzLCBuYW1lc3BhY2VzID0gX25hbWVzcGFjZXMoc2VsZi5fcm9vdCwgZGVmYXVsdF9uYW1lc3BhY2UpCiAgICAgICAgICAgICAgICAgc2VyaWFsaXplID0gX3NlcmlhbGl6ZVttZXRob2RdCi0gICAgICAgICAgICAgICAgc2VyaWFsaXplKHdyaXRlLCBzZWxmLl9yb290LCBxbmFtZXMsIG5hbWVzcGFjZXMpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplKHdyaXRlLCBzZWxmLl9yb290LCBxbmFtZXMsIG5hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogCiAgICAgZGVmIHdyaXRlX2MxNG4oc2VsZiwgZmlsZSk6CiAgICAgICAgICMgbHhtbC5ldHJlZSBjb21wYXRpYmlsaXR5LiAgdXNlIG91dHB1dCBtZXRob2QgaW5zdGVhZApAQCAtOTQ3LDcgKzg5Nyw4IEBACiAgICAgICAgICAgICBhZGRfcW5hbWUodGV4dC50ZXh0KQogICAgIHJldHVybiBxbmFtZXMsIG5hbWVzcGFjZXMKIAotZGVmIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMpOgorZGVmIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHMsICoqa3dhcmdzKToKICAgICB0YWcgPSBlbGVtLnRhZwogICAgIHRleHQgPSBlbGVtLnRleHQKICAgICBpZiB0YWcgaXMgQ29tbWVudDoKQEAgLTk2MCw3ICs5MTEsOCBAQAogICAgICAgICAgICAgaWYgdGV4dDoKICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQpKQogICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKLSAgICAgICAgICAgICAgICBfc2VyaWFsaXplX3htbCh3cml0ZSwgZSwgcW5hbWVzLCBOb25lKQorICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3cml0ZSgiPCIgKyB0YWcpCiAgICAgICAgICAgICBpdGVtcyA9IGxpc3QoZWxlbS5pdGVtcygpKQpAQCAtOTgyLDEyICs5MzQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBfZXNjYXBlX2F0dHJpYih2KQogICAgICAgICAgICAgICAgICAgICB3cml0ZSgiICVzPVwiJXNcIiIgJSAocW5hbWVzW2tdLCB2KSkKLSAgICAgICAgICAgIGlmIHRleHQgb3IgbGVuKGVsZW0pOgorICAgICAgICAgICAgaWYgdGV4dCBvciBsZW4oZWxlbSkgb3Igbm90IHNob3J0X2VtcHR5X2VsZW1lbnRzOgogICAgICAgICAgICAgICAgIHdyaXRlKCI+IikKICAgICAgICAgICAgICAgICBpZiB0ZXh0OgogICAgICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQpKQogICAgICAgICAgICAgICAgIGZvciBlIGluIGVsZW06Ci0gICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgICAgICAgICAgICAgIHdyaXRlKCI8LyIgKyB0YWcgKyAiPiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHdyaXRlKCIgLz4iKQpAQCAtMTAwMiw3ICs5NTUsNyBAQAogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBwYXNzCiAKLWRlZiBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcyk6CitkZWYgX3NlcmlhbGl6ZV9odG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMsICoqa3dhcmdzKToKICAgICB0YWcgPSBlbGVtLnRhZwogICAgIHRleHQgPSBlbGVtLnRleHQKICAgICBpZiB0YWcgaXMgQ29tbWVudDoKQEAgLTEwNjYsMTggKzEwMTksMTkgQEAKICMgICAiYzE0biI6IF9zZXJpYWxpemVfYzE0biwKIH0KIAotIyMKLSMgUmVnaXN0ZXJzIGEgbmFtZXNwYWNlIHByZWZpeC4gIFRoZSByZWdpc3RyeSBpcyBnbG9iYWwsIGFuZCBhbnkKLSMgZXhpc3RpbmcgbWFwcGluZyBmb3IgZWl0aGVyIHRoZSBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkKLSMgd2lsbCBiZSByZW1vdmVkLgotIwotIyBAcGFyYW0gcHJlZml4IE5hbWVzcGFjZSBwcmVmaXguCi0jIEBwYXJhbSB1cmkgTmFtZXNwYWNlIHVyaS4gIFRhZ3MgYW5kIGF0dHJpYnV0ZXMgaW4gdGhpcyBuYW1lc3BhY2UKLSMgICAgIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHRoZSBnaXZlbiBwcmVmaXgsIGlmIGF0IGFsbCBwb3NzaWJsZS4KLSMgQGV4Y2VwdGlvbiBWYWx1ZUVycm9yIElmIHRoZSBwcmVmaXggaXMgcmVzZXJ2ZWQsIG9yIGlzIG90aGVyd2lzZQotIyAgICAgaW52YWxpZC4KIAogZGVmIHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSk6CisgICAgIiIiUmVnaXN0ZXIgYSBuYW1lc3BhY2UgcHJlZml4LgorCisgICAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueSBleGlzdGluZyBtYXBwaW5nIGZvciBlaXRoZXIgdGhlCisgICAgZ2l2ZW4gcHJlZml4IG9yIHRoZSBuYW1lc3BhY2UgVVJJIHdpbGwgYmUgcmVtb3ZlZC4KKworICAgICpwcmVmaXgqIGlzIHRoZSBuYW1lc3BhY2UgcHJlZml4LCAqdXJpKiBpcyBhIG5hbWVzcGFjZSB1cmkuIFRhZ3MgYW5kCisgICAgYXR0cmlidXRlcyBpbiB0aGlzIG5hbWVzcGFjZSB3aWxsIGJlIHNlcmlhbGl6ZWQgd2l0aCBwcmVmaXggaWYgcG9zc2libGUuCisKKyAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZCBpZiBwcmVmaXggaXMgcmVzZXJ2ZWQgb3IgaXMgaW52YWxpZC4KKworICAgICIiIgogICAgIGlmIHJlLm1hdGNoKCJuc1xkKyQiLCBwcmVmaXgpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQcmVmaXggZm9ybWF0IHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UiKQogICAgIGZvciBrLCB2IGluIGxpc3QoX25hbWVzcGFjZV9tYXAuaXRlbXMoKSk6CkBAIC0xMTUzLDQwICsxMTA3LDI3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCi0jIHN1YmVsZW1lbnRzLiAgSWYgZW5jb2RpbmcgaXMgInVuaWNvZGUiLCB0aGUgcmV0dXJuIHR5cGUgaXMgYSBzdHJpbmc7Ci0jIG90aGVyd2lzZSBpdCBpcyBhIGJ5dGVzIGFycmF5LgotIwotIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KLSMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCi0jIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCi0jICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgotIyBAcmV0dXJuIEFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzdHJpbmcKK2RlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSwgKiwKKyAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKKyAgICAiIiJHZW5lcmF0ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgWE1MIGVsZW1lbnQuCiAKLWRlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CisgICAgQWxsIHN1YmVsZW1lbnRzIGFyZSBpbmNsdWRlZC4gIElmIGVuY29kaW5nIGlzICJ1bmljb2RlIiwgYSBzdHJpbmcKKyAgICBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIGEgYnl0ZXN0cmluZyBpcyByZXR1cm5lZC4KKworICAgICplbGVtZW50KiBpcyBhbiBFbGVtZW50IGluc3RhbmNlLCAqZW5jb2RpbmcqIGlzIGFuIG9wdGlvbmFsIG91dHB1dAorICAgIGVuY29kaW5nIGRlZmF1bHRpbmcgdG8gVVMtQVNDSUksICptZXRob2QqIGlzIGFuIG9wdGlvbmFsIG91dHB1dCB3aGljaCBjYW4KKyAgICBiZSBvbmUgb2YgInhtbCIgKGRlZmF1bHQpLCAiaHRtbCIsICJ0ZXh0IiBvciAiYzE0biIuCisKKyAgICBSZXR1cm5zIGFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKworICAgICIiIgogICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkgaWYgZW5jb2RpbmcgPT0gJ3VuaWNvZGUnIGVsc2UgaW8uQnl0ZXNJTygpCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgIHJldHVybiBzdHJlYW0uZ2V0dmFsdWUoKQogCi0jIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuCi0jCi0jIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0jIEByZXR1cm4gQSBzZXF1ZW5jZSBvYmplY3QgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCi0jIEBkZWZyZXR1cm4gc2VxdWVuY2UKLSMgQHNpbmNlIDEuMwotCiBjbGFzcyBfTGlzdERhdGFTdHJlYW0oaW8uQnVmZmVyZWRJT0Jhc2UpOgotICAgICIiIiBBbiBhdXhpbGlhcnkgc3RyZWFtIGFjY3VtdWxhdGluZyBpbnRvIGEgbGlzdCByZWZlcmVuY2UKLSAgICAiIiIKKyAgICAiIiJBbiBhdXhpbGlhcnkgc3RyZWFtIGFjY3VtdWxhdGluZyBpbnRvIGEgbGlzdCByZWZlcmVuY2UuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CiAgICAgICAgIHNlbGYubHN0ID0gbHN0CiAKQEAgLTEyMDIsMjIgKzExNDMsMjUgQEAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmxzdCkKIAotZGVmIHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CitkZWYgdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKICAgICBsc3QgPSBbXQogICAgIHN0cmVhbSA9IF9MaXN0RGF0YVN0cmVhbShsc3QpCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgIHJldHVybiBsc3QKIAotIyMKLSMgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcwotIyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBmb3IgZGVidWdnaW5nIG9ubHkuCi0jIDxwPgotIyBUaGUgZXhhY3Qgb3V0cHV0IGZvcm1hdCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBJbiB0aGlzCi0jIHZlcnNpb24sIGl0J3Mgd3JpdHRlbiBhcyBhbiBvcmRpbmFyeSBYTUwgZmlsZS4KLSMKLSMgQHBhcmFtIGVsZW0gQW4gZWxlbWVudCB0cmVlIG9yIGFuIGluZGl2aWR1YWwgZWxlbWVudC4KIAogZGVmIGR1bXAoZWxlbSk6CisgICAgIiIiV3JpdGUgZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KKworICAgICplbGVtKiBpcyBlaXRoZXIgYW4gRWxlbWVudFRyZWUsIG9yIGEgc2luZ2xlIEVsZW1lbnQuICBUaGUgZXhhY3Qgb3V0cHV0CisgICAgZm9ybWF0IGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEluIHRoaXMgdmVyc2lvbiwgaXQncyB3cml0dGVuIGFzIGFuCisgICAgb3JkaW5hcnkgWE1MIGZpbGUuCisKKyAgICAiIiIKICAgICAjIGRlYnVnZ2luZwogICAgIGlmIG5vdCBpc2luc3RhbmNlKGVsZW0sIEVsZW1lbnRUcmVlKToKICAgICAgICAgZWxlbSA9IEVsZW1lbnRUcmVlKGVsZW0pCkBAIC0xMjI5LDE0NCArMTE3MywxNjkgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgcGFyc2luZwogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGludG8gYW4gZWxlbWVudCB0cmVlLgotIwotIyBAcGFyYW0gc291cmNlIEEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudFRyZWUgaW5zdGFuY2UKIAogZGVmIHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBpbnRvIGVsZW1lbnQgdHJlZS4KKworICAgICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YSwKKyAgICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UgZGVmYXVsdGluZyB0byBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm4gYW4gRWxlbWVudFRyZWUgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICB0cmVlID0gRWxlbWVudFRyZWUoKQogICAgIHRyZWUucGFyc2Uoc291cmNlLCBwYXJzZXIpCiAgICAgcmV0dXJuIHRyZWUKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LCBhbmQgcmVwb3J0cwotIyB3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gZXZlbnRzIEEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBJZiBvbWl0dGVkLCBvbmx5ICJlbmQiCi0jICAgICBldmVudHMgYXJlIHJlcG9ydGVkLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBIChldmVudCwgZWxlbSkgaXRlcmF0b3IuCiAKIGRlZiBpdGVycGFyc2Uoc291cmNlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIkluY3JlbWVudGFsbHkgcGFyc2UgWE1MIGRvY3VtZW50IGludG8gRWxlbWVudFRyZWUuCisKKyAgICBUaGlzIGNsYXNzIGFsc28gcmVwb3J0cyB3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIgYmFzZWQgb24gdGhlCisgICAgKmV2ZW50cyogaXQgaXMgaW5pdGlhbGl6ZWQgd2l0aC4gIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncworICAgICJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiIGFuZCAiZW5kLW5zIiAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldAorICAgIGRldGFpbGVkIG5hbWVzcGFjZSBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5CisgICAgImVuZCIgZXZlbnRzIGFyZSByZXBvcnRlZC4KKworICAgICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YSwgKmV2ZW50cyogaXMKKyAgICBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuCisKKyAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIHByb3ZpZGluZyAoZXZlbnQsIGVsZW0pIHBhaXJzLgorCisgICAgIiIiCiAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICJyZWFkIik6CiAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAicmIiKQogICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCi0gICAgaWYgbm90IHBhcnNlcjoKLSAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHJldHVybiBfSXRlclBhcnNlSXRlcmF0b3Ioc291cmNlLCBldmVudHMsIHBhcnNlciwgY2xvc2Vfc291cmNlKQogCisKK2NsYXNzIFhNTFB1bGxQYXJzZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzPU5vbmUsICosIF9wYXJzZXI9Tm9uZSk6CisgICAgICAgICMgVGhlIF9wYXJzZXIgYXJndW1lbnQgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtdXN0IG5vdCBiZSByZWxpZWQKKyAgICAgICAgIyB1cG9uIGluIHVzZXIgY29kZS4gSXQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzc0MSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgICMgX2VsZW1lbnR0cmVlLmMgZXhwZWN0cyBhIGxpc3QsIG5vdCBhIGRlcXVlCisgICAgICAgIHNlbGYuX2V2ZW50c19xdWV1ZSA9IFtdCisgICAgICAgIHNlbGYuX2luZGV4ID0gMAorICAgICAgICBzZWxmLl9wYXJzZXIgPSBfcGFyc2VyIG9yIFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKKyAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZworICAgICAgICBpZiBldmVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIGV2ZW50cyA9ICgiZW5kIiwpCisgICAgICAgIHNlbGYuX3BhcnNlci5fc2V0ZXZlbnRzKHNlbGYuX2V2ZW50c19xdWV1ZSwgZXZlbnRzKQorCisgICAgZGVmIGZlZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkZlZWQgZW5jb2RlZCBkYXRhIHRvIHBhcnNlci4iIiIKKyAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmZWVkKCkgY2FsbGVkIGFmdGVyIGVuZCBvZiBzdHJlYW0iKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50c19xdWV1ZS5hcHBlbmQoZXhjKQorCisgICAgZGVmIF9jbG9zZV9hbmRfcmV0dXJuX3Jvb3Qoc2VsZik6CisgICAgICAgICMgaXRlcnBhcnNlIG5lZWRzIHRoaXMgdG8gc2V0IGl0cyByb290IGF0dHJpYnV0ZSBwcm9wZXJseSA6KAorICAgICAgICByb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQorICAgICAgICByZXR1cm4gcm9vdAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGaW5pc2ggZmVlZGluZyBkYXRhIHRvIHBhcnNlci4KKworICAgICAgICBVbmxpa2UgWE1MUGFyc2VyLCBkb2VzIG5vdCByZXR1cm4gdGhlIHJvb3QgZWxlbWVudC4gVXNlCisgICAgICAgIHJlYWRfZXZlbnRzKCkgdG8gY29uc3VtZSBlbGVtZW50cyBmcm9tIFhNTFB1bGxQYXJzZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jbG9zZV9hbmRfcmV0dXJuX3Jvb3QoKQorCisgICAgZGVmIHJlYWRfZXZlbnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBjdXJyZW50bHkgYXZhaWxhYmxlIChldmVudCwgZWxlbSkgcGFpcnMuCisKKyAgICAgICAgRXZlbnRzIGFyZSBjb25zdW1lZCBmcm9tIHRoZSBpbnRlcm5hbCBldmVudCBxdWV1ZSBhcyB0aGV5IGFyZQorICAgICAgICByZXRyaWV2ZWQgZnJvbSB0aGUgaXRlcmF0b3IuCisgICAgICAgICIiIgorICAgICAgICBldmVudHMgPSBzZWxmLl9ldmVudHNfcXVldWUKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGluZGV4ID0gc2VsZi5faW5kZXgKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBldmVudCA9IGV2ZW50c1tzZWxmLl9pbmRleF0KKyAgICAgICAgICAgICAgICAjIEF2b2lkIHJldGFpbmluZyByZWZlcmVuY2VzIHRvIHBhc3QgZXZlbnRzCisgICAgICAgICAgICAgICAgZXZlbnRzW3NlbGYuX2luZGV4XSA9IE5vbmUKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpbmRleCArPSAxCisgICAgICAgICAgICAjIENvbXBhY3QgdGhlIGxpc3QgaW4gYSBPKDEpIGFtb3J0aXplZCBmYXNoaW9uCisgICAgICAgICAgICAjIEFzIG5vdGVkIGFib3ZlLCBfZWxlbWVudHJlZS5jIG5lZWRzIGEgbGlzdCwgbm90IGEgZGVxdWUKKyAgICAgICAgICAgIGlmIGluZGV4ICogMiA+PSBsZW4oZXZlbnRzKToKKyAgICAgICAgICAgICAgICBldmVudHNbOmluZGV4XSA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gaW5kZXgKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgcmFpc2UgZXZlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgZXZlbnQKKworCiBjbGFzcyBfSXRlclBhcnNlSXRlcmF0b3I6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlLCBldmVudHMsIHBhcnNlciwgY2xvc2Vfc291cmNlPUZhbHNlKToKKyAgICAgICAgIyBVc2UgdGhlIGludGVybmFsLCB1bmRvY3VtZW50ZWQgX3BhcnNlciBhcmd1bWVudCBmb3Igbm93OyBXaGVuIHRoZQorICAgICAgICAjIHBhcnNlciBhcmd1bWVudCBvZiBpdGVycGFyc2UgaXMgcmVtb3ZlZCwgdGhpcyBjYW4gYmUga2lsbGVkLgorICAgICAgICBzZWxmLl9wYXJzZXIgPSBYTUxQdWxsUGFyc2VyKGV2ZW50cz1ldmVudHMsIF9wYXJzZXI9cGFyc2VyKQogICAgICAgICBzZWxmLl9maWxlID0gc291cmNlCiAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBjbG9zZV9zb3VyY2UKLSAgICAgICAgc2VsZi5fZXZlbnRzID0gW10KLSAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQogICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290ID0gTm9uZQotICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKLSAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZwotICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXIuX3BhcnNlcgotICAgICAgICBhcHBlbmQgPSBzZWxmLl9ldmVudHMuYXBwZW5kCi0gICAgICAgIGlmIGV2ZW50cyBpcyBOb25lOgotICAgICAgICAgICAgZXZlbnRzID0gWyJlbmQiXQotICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgotICAgICAgICAgICAgaWYgZXZlbnQgPT0gInN0YXJ0IjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBhdHRyaWJfaW4sIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1zZWxmLl9wYXJzZXIuX3N0YXJ0X2xpc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3BhcnNlci5fc3RhcnQpOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJlbmQiOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kPXNlbGYuX3BhcnNlci5fZW5kKToKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgZW5kKHRhZykpKQotICAgICAgICAgICAgICAgIHBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gInN0YXJ0LW5zIjoKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIHVyaSwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQpOgotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkgb3IgIiIpKSkKLSAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gImVuZC1ucyI6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIE5vbmUpKQotICAgICAgICAgICAgICAgIHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBldmVudCAlciIgJSBldmVudCkKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpdGVtID0gc2VsZi5fZXZlbnRzW3NlbGYuX2luZGV4XQotICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ICs9IDEKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlbQotICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgaWYgc2VsZi5fZXJyb3I6Ci0gICAgICAgICAgICAgICAgZSA9IHNlbGYuX2Vycm9yCi0gICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgcmFpc2UgZQotICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5fcGFyc2VyLnJlYWRfZXZlbnRzKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50CisgICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIuX3BhcnNlciBpcyBOb25lOgogICAgICAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZV9maWxlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAgICAgICAgICAgICAjIGxvYWQgZXZlbnQgYnVmZmVyCi0gICAgICAgICAgICBkZWwgc2VsZi5fZXZlbnRzWzpdCi0gICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYzODQpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2ICogMTAyNCkKICAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gZXhjCisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHNlbGYuX3BhcnNlci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuX2Nsb3NlX2FuZF9yZXR1cm5fcm9vdCgpCiAKICAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFRoaXMgZnVuY3Rpb24gY2FuCi0jIGJlIHVzZWQgdG8gZW1iZWQgIlhNTCBsaXRlcmFscyIgaW4gUHl0aG9uIGNvZGUuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBYTUwodGV4dCwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHN0cmluZyBjb25zdGFudC4KKworICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW1iZWQgIlhNTCBMaXRlcmFscyIgaW4gUHl0aG9uIGNvZGUuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YSwgKnBhcnNlciogaXMgYW4KKyAgICBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YW5kYXJkIFhNTFBhcnNlci4KKworICAgIFJldHVybnMgYW4gRWxlbWVudCBpbnN0YW5jZS4KKworICAgICIiIgogICAgIGlmIG5vdCBwYXJzZXI6CiAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQogICAgIHJldHVybiBwYXJzZXIuY2xvc2UoKQogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQsIGFuZCBhbHNvIHJldHVybnMKLSMgYSBkaWN0aW9uYXJ5IHdoaWNoIG1hcHMgZnJvbSBlbGVtZW50IGlkOnMgdG8gZWxlbWVudHMuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIGFuIEVsZW1lbnQgaW5zdGFuY2UgYW5kIGEgZGljdGlvbmFyeS4KLSMgQGRlZnJldHVybiAoRWxlbWVudCwgZGljdGlvbmFyeSkKIAogZGVmIFhNTElEKHRleHQsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzdHJpbmcgY29uc3RhbnQgZm9yIGl0cyBJRHMuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YSwgKnBhcnNlciogaXMgYW4KKyAgICBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YW5kYXJkIFhNTFBhcnNlci4KKworICAgIFJldHVybnMgYW4gKEVsZW1lbnQsIGRpY3QpIHR1cGxlLCBpbiB3aGljaCB0aGUKKyAgICBkaWN0IG1hcHMgZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLgorCisgICAgIiIiCiAgICAgaWYgbm90IHBhcnNlcjoKICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHBhcnNlci5mZWVkKHRleHQpCkBAIC0xMzc4LDI3ICsxMzQ3LDE4IEBACiAgICAgICAgICAgICBpZHNbaWRdID0gZWxlbQogICAgIHJldHVybiB0cmVlLCBpZHMKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgU2FtZSBhcyB7QGxpbmsgI1hNTH0uCi0jCi0jIEBkZWYgZnJvbXN0cmluZyh0ZXh0KQotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50Ci0KKyMgUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc3RyaW5nIGNvbnN0YW50LiAgQWxpYXMgZm9yIFhNTCgpLgogZnJvbXN0cmluZyA9IFhNTAogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLgotIwotIyBAcGFyYW0gc2VxdWVuY2UgQSBsaXN0IG9yIG90aGVyIHNlcXVlbmNlIGNvbnRhaW5pbmcgWE1MIGRhdGEgZnJhZ21lbnRzLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKLSMgQHNpbmNlIDEuMwotCiBkZWYgZnJvbXN0cmluZ2xpc3Qoc2VxdWVuY2UsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLgorCisgICAgKnNlcXVlbmNlKiBpcyBhIGxpc3Qgb2Ygb3RoZXIgc2VxdWVuY2UsICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlcgorICAgIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICBpZiBub3QgcGFyc2VyOgogICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgZm9yIHRleHQgaW4gc2VxdWVuY2U6CkBAIC0xNDA3LDE5ICsxMzY3LDIwIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLiAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2UKLSMgb2Yge0BsaW5rICNUcmVlQnVpbGRlci5zdGFydH0sIHtAbGluayAjVHJlZUJ1aWxkZXIuZGF0YX0sIGFuZCB7QGxpbmsKLSMgI1RyZWVCdWlsZGVyLmVuZH0gbWV0aG9kIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuCi0jIDxwPgotIyBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTAotIyBwYXJzZXIsIG9yIGEgcGFyc2VyIGZvciBzb21lIG90aGVyIFhNTC1saWtlIGZvcm1hdC4KLSMKLSMgQHBhcmFtIGVsZW1lbnRfZmFjdG9yeSBPcHRpb25hbCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkKLSMgICAgaXMgY2FsbGVkIHRvIGNyZWF0ZSBuZXcgRWxlbWVudCBpbnN0YW5jZXMsIGFzIG5lY2Vzc2FyeS4KIAogY2xhc3MgVHJlZUJ1aWxkZXI6CisgICAgIiIiR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLgogCisgICAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2Ugb2Ygc3RhcnQsIGRhdGEsIGFuZCBlbmQgbWV0aG9kCisgICAgY2FsbHMgdG8gYSB3ZWxsLWZvcm1lZCBlbGVtZW50IHN0cnVjdHVyZS4KKworICAgIFlvdSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8gYnVpbGQgYW4gZWxlbWVudCBzdHJ1Y3R1cmUgdXNpbmcgYSBjdXN0b20gWE1MCisgICAgcGFyc2VyLCBvciBhIHBhcnNlciBmb3Igc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuCisKKyAgICAqZWxlbWVudF9mYWN0b3J5KiBpcyBhbiBvcHRpb25hbCBlbGVtZW50IGZhY3Rvcnkgd2hpY2ggaXMgY2FsbGVkCisgICAgdG8gY3JlYXRlIG5ldyBFbGVtZW50IGluc3RhbmNlcywgYXMgbmVjZXNzYXJ5LgorCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnRfZmFjdG9yeT1Ob25lKToKICAgICAgICAgc2VsZi5fZGF0YSA9IFtdICMgZGF0YSBjb2xsZWN0b3IKICAgICAgICAgc2VsZi5fZWxlbSA9IFtdICMgZWxlbWVudCBzdGFjawpAQCAtMTQyOSwxNCArMTM5MCw4IEBACiAgICAgICAgICAgICBlbGVtZW50X2ZhY3RvcnkgPSBFbGVtZW50CiAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBlbGVtZW50X2ZhY3RvcnkKIAotICAgICMjCi0gICAgIyBGbHVzaGVzIHRoZSBidWlsZGVyIGJ1ZmZlcnMsIGFuZCByZXR1cm5zIHRoZSB0b3BsZXZlbCBkb2N1bWVudAotICAgICMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiRmx1c2ggYnVpbGRlciBidWZmZXJzIGFuZCByZXR1cm4gdG9wbGV2ZWwgZG9jdW1lbnQgRWxlbWVudC4iIiIKICAgICAgICAgYXNzZXJ0IGxlbihzZWxmLl9lbGVtKSA9PSAwLCAibWlzc2luZyBlbmQgdGFncyIKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xhc3QgaXMgbm90IE5vbmUsICJtaXNzaW5nIHRvcGxldmVsIGVsZW1lbnQiCiAgICAgICAgIHJldHVybiBzZWxmLl9sYXN0CkBAIC0xNDUzLDI0ICsxNDA4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3QudGV4dCA9IHRleHQKICAgICAgICAgICAgIHNlbGYuX2RhdGEgPSBbXQogCi0gICAgIyMKLSAgICAjIEFkZHMgdGV4dCB0byB0aGUgY3VycmVudCBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBkYXRhIEEgc3RyaW5nLiAgVGhpcyBzaG91bGQgYmUgZWl0aGVyIGFuIDgtYml0IHN0cmluZwotICAgICMgICAgY29udGFpbmluZyBBU0NJSSB0ZXh0LCBvciBhIFVuaWNvZGUgc3RyaW5nLgotCiAgICAgZGVmIGRhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkFkZCB0ZXh0IHRvIGN1cnJlbnQgZWxlbWVudC4iIiIKICAgICAgICAgc2VsZi5fZGF0YS5hcHBlbmQoZGF0YSkKIAotICAgICMjCi0gICAgIyBPcGVucyBhIG5ldyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KLSAgICAjIEBwYXJhbSBhdHRyaWIgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotICAgICMgQHJldHVybiBUaGUgb3BlbmVkIGVsZW1lbnQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBzdGFydChzZWxmLCB0YWcsIGF0dHJzKToKKyAgICAgICAgIiIiT3BlbiBuZXcgZWxlbWVudCBhbmQgcmV0dXJuIGl0LgorCisgICAgICAgICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUsICphdHRycyogaXMgYSBkaWN0IGNvbnRhaW5pbmcgZWxlbWVudAorICAgICAgICBhdHRyaWJ1dGVzLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLl9mbHVzaCgpCiAgICAgICAgIHNlbGYuX2xhc3QgPSBlbGVtID0gc2VsZi5fZmFjdG9yeSh0YWcsIGF0dHJzKQogICAgICAgICBpZiBzZWxmLl9lbGVtOgpAQCAtMTQ3OSwxNCArMTQyNywxMiBAQAogICAgICAgICBzZWxmLl90YWlsID0gMAogICAgICAgICByZXR1cm4gZWxlbQogCi0gICAgIyMKLSAgICAjIENsb3NlcyB0aGUgY3VycmVudCBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KLSAgICAjIEByZXR1cm4gVGhlIGNsb3NlZCBlbGVtZW50LgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgZW5kKHNlbGYsIHRhZyk6CisgICAgICAgICIiIkNsb3NlIGFuZCByZXR1cm4gY3VycmVudCBFbGVtZW50LgorCisgICAgICAgICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2ZsdXNoKCkKICAgICAgICAgc2VsZi5fbGFzdCA9IHNlbGYuX2VsZW0ucG9wKCkKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xhc3QudGFnID09IHRhZyxcCkBAIC0xNDk1LDIwICsxNDQxLDE4IEBACiAgICAgICAgIHNlbGYuX3RhaWwgPSAxCiAgICAgICAgIHJldHVybiBzZWxmLl9sYXN0CiAKLSMjCi0jIEVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSwgYmFzZWQgb24gdGhlCi0jIDxiPmV4cGF0PC9iPiBwYXJzZXIuCi0jCi0jIEBrZXlwYXJhbSB0YXJnZXQgVGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZSBidWlsZGVyIHVzZXMgYW4KLSMgICAgIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCB7QGxpbmsgI1RyZWVCdWlsZGVyfSBjbGFzcy4KLSMgQGtleXBhcmFtIGh0bWwgUHJlZGVmaW5lIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZAotIyAgICAgYnkgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBlbmNvZGluZy4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzCi0jICAgICB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZS4KLSMgQHNlZSAjRWxlbWVudFRyZWUKLSMgQHNlZSAjVHJlZUJ1aWxkZXIKIAorIyBhbHNvIHNlZSBFbGVtZW50VHJlZSBhbmQgVHJlZUJ1aWxkZXIKIGNsYXNzIFhNTFBhcnNlcjoKKyAgICAiIiJFbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEgYmFzZWQgb24gdGhlIGV4cGF0IHBhcnNlci4KKworICAgICpodG1sKiBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzIChub3Qgc3VwcG9ydGVkIGN1cnJlbnRseSksCisgICAgKnRhcmdldCogaXMgYW4gb3B0aW9uYWwgdGFyZ2V0IG9iamVjdCB3aGljaCBkZWZhdWx0cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUKKyAgICBzdGFuZGFyZCBUcmVlQnVpbGRlciBjbGFzcywgKmVuY29kaW5nKiBpcyBhbiBvcHRpb25hbCBlbmNvZGluZyBzdHJpbmcKKyAgICB3aGljaCBpZiBnaXZlbiwgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIFhNTCBmaWxlOgorICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMKKworICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGh0bWw9MCwgdGFyZ2V0PU5vbmUsIGVuY29kaW5nPU5vbmUpOgogICAgICAgICB0cnk6CkBAIC0xNTQxLDE5ICsxNDg1LDEwIEBACiAgICAgICAgICAgICBwYXJzZXIuQ29tbWVudEhhbmRsZXIgPSB0YXJnZXQuY29tbWVudAogICAgICAgICBpZiBoYXNhdHRyKHRhcmdldCwgJ3BpJyk6CiAgICAgICAgICAgICBwYXJzZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciA9IHRhcmdldC5waQotICAgICAgICAjIGxldCBleHBhdCBkbyB0aGUgYnVmZmVyaW5nLCBpZiBzdXBwb3J0ZWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgICMgdXNlIG5ldy1zdHlsZSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGlmIHN1cHBvcnRlZAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgaWYgaGFzYXR0cih0YXJnZXQsICdzdGFydCcpOgotICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5fc3RhcnRfbGlzdAotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgICMgQ29uZmlndXJlIHB5ZXhwYXQ6IGJ1ZmZlcmluZywgbmV3LXN0eWxlIGF0dHJpYnV0ZSBoYW5kbGluZy4KKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCiAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAgICAgICAgIHNlbGYuZW50aXR5ID0ge30KICAgICAgICAgdHJ5OgpAQCAtMTU2MSw2ICsxNDk2LDM5IEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MgIyB1bmtub3duCiAKKyAgICBkZWYgX3NldGV2ZW50cyhzZWxmLCBldmVudHNfcXVldWUsIGV2ZW50c190b19yZXBvcnQpOgorICAgICAgICAjIEludGVybmFsIEFQSSBmb3IgWE1MUHVsbFBhcnNlcgorICAgICAgICAjIGV2ZW50c190b19yZXBvcnQ6IGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGR1cmluZyBwYXJzaW5nIChzYW1lIGFzCisgICAgICAgICMgdGhlICpldmVudHMqIG9mIFhNTFB1bGxQYXJzZXIncyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgIyBldmVudHNfcXVldWU6IGEgbGlzdCBvZiBhY3R1YWwgcGFyc2luZyBldmVudHMgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZAorICAgICAgICAjIGJ5IHRoZSB1bmRlcmx5aW5nIHBhcnNlci4KKyAgICAgICAgIworICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXIKKyAgICAgICAgYXBwZW5kID0gZXZlbnRzX3F1ZXVlLmFwcGVuZAorICAgICAgICBmb3IgZXZlbnRfbmFtZSBpbiBldmVudHNfdG9fcmVwb3J0OgorICAgICAgICAgICAgaWYgZXZlbnRfbmFtZSA9PSAic3RhcnQiOgorICAgICAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgYXR0cmliX2luLCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3N0YXJ0KToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfbmFtZSA9PSAiZW5kIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kPXNlbGYuX2VuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIGVuZCh0YWcpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbGlmIGV2ZW50X25hbWUgPT0gInN0YXJ0LW5zIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIHVyaSwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIChwcmVmaXggb3IgIiIsIHVyaSBvciAiIikpKQorICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxpZiBldmVudF9uYW1lID09ICJlbmQtbnMiOgorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIE5vbmUpKQorICAgICAgICAgICAgICAgIHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBldmVudCAlciIgJSBldmVudF9uYW1lKQorCiAgICAgZGVmIF9yYWlzZWVycm9yKHNlbGYsIHZhbHVlKToKICAgICAgICAgZXJyID0gUGFyc2VFcnJvcih2YWx1ZSkKICAgICAgICAgZXJyLmNvZGUgPSB2YWx1ZS5jb2RlCkBAIC0xNTc4LDIxICsxNTQ2LDE2IEBACiAgICAgICAgICAgICBzZWxmLl9uYW1lc1trZXldID0gbmFtZQogICAgICAgICByZXR1cm4gbmFtZQogCi0gICAgZGVmIF9zdGFydChzZWxmLCB0YWcsIGF0dHJpYl9pbik6CisgICAgZGVmIF9zdGFydChzZWxmLCB0YWcsIGF0dHJfbGlzdCk6CisgICAgICAgICMgSGFuZGxlciBmb3IgZXhwYXQncyBTdGFydEVsZW1lbnRIYW5kbGVyLiBTaW5jZSBvcmRlcmVkX2F0dHJpYnV0ZXMKKyAgICAgICAgIyBpcyBzZXQsIHRoZSBhdHRyaWJ1dGVzIGFyZSByZXBvcnRlZCBhcyBhIGxpc3Qgb2YgYWx0ZXJuYXRpbmcKKyAgICAgICAgIyBhdHRyaWJ1dGUgbmFtZSx2YWx1ZS4KICAgICAgICAgZml4bmFtZSA9IHNlbGYuX2ZpeG5hbWUKICAgICAgICAgdGFnID0gZml4bmFtZSh0YWcpCiAgICAgICAgIGF0dHJpYiA9IHt9Ci0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGF0dHJpYl9pbi5pdGVtcygpOgotICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoa2V5KV0gPSB2YWx1ZQotICAgICAgICByZXR1cm4gc2VsZi50YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCi0KLSAgICBkZWYgX3N0YXJ0X2xpc3Qoc2VsZiwgdGFnLCBhdHRyaWJfaW4pOgotICAgICAgICBmaXhuYW1lID0gc2VsZi5fZml4bmFtZQotICAgICAgICB0YWcgPSBmaXhuYW1lKHRhZykKLSAgICAgICAgYXR0cmliID0ge30KLSAgICAgICAgaWYgYXR0cmliX2luOgotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJpYl9pbiksIDIpOgotICAgICAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGF0dHJpYl9pbltpXSldID0gYXR0cmliX2luW2krMV0KKyAgICAgICAgaWYgYXR0cl9saXN0OgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJfbGlzdCksIDIpOgorICAgICAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGF0dHJfbGlzdFtpXSldID0gYXR0cl9saXN0W2krMV0KICAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQogCiAgICAgZGVmIF9lbmQoc2VsZiwgdGFnKToKQEAgLTE2NTAsMTUgKzE2MTMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW1bMTotMV0pCiAgICAgICAgICAgICAgICAgc2VsZi5fZG9jdHlwZSA9IE5vbmUKIAotICAgICMjCi0gICAgIyAoRGVwcmVjYXRlZCkgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uCi0gICAgIwotICAgICMgQHBhcmFtIG5hbWUgRG9jdHlwZSBuYW1lLgotICAgICMgQHBhcmFtIHB1YmlkIFB1YmxpYyBpZGVudGlmaWVyLgotICAgICMgQHBhcmFtIHN5c3RlbSBTeXN0ZW0gaWRlbnRpZmllci4KLQogICAgIGRlZiBkb2N0eXBlKHNlbGYsIG5hbWUsIHB1YmlkLCBzeXN0ZW0pOgotICAgICAgICAiIiJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4iIiIKKyAgICAgICAgIiIiKERlcHJlY2F0ZWQpICBIYW5kbGUgZG9jdHlwZSBkZWNsYXJhdGlvbgorCisgICAgICAgICpuYW1lKiBpcyB0aGUgRG9jdHlwZSBuYW1lLCAqcHViaWQqIGlzIHRoZSBwdWJsaWMgaWRlbnRpZmllciwKKyAgICAgICAgYW5kICpzeXN0ZW0qIGlzIHRoZSBzeXN0ZW0gaWRlbnRpZmllci4KKworICAgICAgICAiIiIKICAgICAgICAgd2FybmluZ3Mud2FybigKICAgICAgICAgICAgICJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4gIERlZmluZSBkb2N0eXBlKCkgIgogICAgICAgICAgICAgIm1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LiIsCkBAIC0xNjY4LDI0ICsxNjI5LDE1IEBACiAgICAgIyBzZW50aW5lbCwgaWYgZG9jdHlwZSBpcyByZWRlZmluZWQgaW4gYSBzdWJjbGFzcwogICAgIF9fZG9jdHlwZSA9IGRvY3R5cGUKIAotICAgICMjCi0gICAgIyBGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuCi0gICAgIwotICAgICMgQHBhcmFtIGRhdGEgRW5jb2RlZCBkYXRhLgotCiAgICAgZGVmIGZlZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkZlZWQgZW5jb2RlZCBkYXRhIHRvIHBhcnNlci4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoZGF0YSwgMCkKICAgICAgICAgZXhjZXB0IHNlbGYuX2Vycm9yIGFzIHY6CiAgICAgICAgICAgICBzZWxmLl9yYWlzZWVycm9yKHYpCiAKLSAgICAjIwotICAgICMgRmluaXNoZXMgZmVlZGluZyBkYXRhIHRvIHRoZSBwYXJzZXIuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBlbGVtZW50IHN0cnVjdHVyZS4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGaW5pc2ggZmVlZGluZyBkYXRhIHRvIHBhcnNlciBhbmQgcmV0dXJuIGVsZW1lbnQgc3RydWN0dXJlLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiIiwgMSkgIyBlbmQgb2YgZGF0YQogICAgICAgICBleGNlcHQgc2VsZi5fZXJyb3IgYXMgdjoKQEAgLTE3MDQsMTAzICsxNjU2LDEyIEBACiAKICMgSW1wb3J0IHRoZSBDIGFjY2VsZXJhdG9ycwogdHJ5OgorICAgICMgRWxlbWVudCBpcyBnb2luZyB0byBiZSBzaGFkb3dlZCBieSB0aGUgQyBpbXBsZW1lbnRhdGlvbi4gV2UgbmVlZCB0byBrZWVwCisgICAgIyB0aGUgUHl0aG9uIHZlcnNpb24gb2YgaXQgYWNjZXNzaWJsZSBmb3Igc29tZSAiY3JlYXRpdmUiIGJ5IGV4dGVybmFsIGNvZGUKKyAgICAjIChzZWUgdGVzdHMpCisgICAgX0VsZW1lbnRfUHkgPSBFbGVtZW50CisKICAgICAjIEVsZW1lbnQsIFN1YkVsZW1lbnQsIFBhcnNlRXJyb3IsIFRyZWVCdWlsZGVyLCBYTUxQYXJzZXIKICAgICBmcm9tIF9lbGVtZW50dHJlZSBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKLWVsc2U6Ci0gICAgIyBPdmVyd3JpdGUgJ0VsZW1lbnRUcmVlLnBhcnNlJyBhbmQgJ2l0ZXJwYXJzZScgdG8gdXNlIHRoZSBDIFhNTFBhcnNlcgotCi0gICAgY2xhc3MgRWxlbWVudFRyZWUoRWxlbWVudFRyZWUpOgotICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgc291cmNlLCBwYXJzZXI9Tm9uZSk6Ci0gICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAncmVhZCcpOgotICAgICAgICAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAncmInKQotICAgICAgICAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBwYXJzZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoNjU1MzYpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5fcGFyc2Uoc291cmNlKQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yb290Ci0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIGNsb3NlX3NvdXJjZToKLSAgICAgICAgICAgICAgICAgICAgc291cmNlLmNsb3NlKCkKLQotICAgIGNsYXNzIGl0ZXJwYXJzZToKLSAgICAgICAgIiIiUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHkuCi0KLSAgICAgICAgUmVwb3J0cyB3aGF04oCZcyBnb2luZyBvbiB0byB0aGUgdXNlci4gJ3NvdXJjZScgaXMgYSBmaWxlbmFtZSBvciBmaWxlCi0gICAgICAgIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLiAnZXZlbnRzJyBpcyBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLgotICAgICAgICBUaGUgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIgYW5kCi0gICAgICAgICJlbmQtbnMiICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkIG5hbWVzcGFjZQotICAgICAgICBpbmZvcm1hdGlvbikuIElmICdldmVudHMnIGlzIG9taXR0ZWQsIG9ubHkgImVuZCIgZXZlbnRzIGFyZSByZXBvcnRlZC4KLSAgICAgICAgJ3BhcnNlcicgaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiBJZiBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZAotICAgICAgICBYTUxQYXJzZXIgcGFyc2VyIGlzIHVzZWQuIFJldHVybnMgYW4gaXRlcmF0b3IgcHJvdmlkaW5nCi0gICAgICAgIChldmVudCwgZWxlbSkgcGFpcnMuCi0gICAgICAgICIiIgotCi0gICAgICAgIHJvb3QgPSBOb25lCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpOgotICAgICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihmaWxlLCAncmVhZCcpOgotICAgICAgICAgICAgICAgIGZpbGUgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgICAgICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCi0gICAgICAgICAgICBzZWxmLl9ldmVudHMgPSBbXQotICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QgPSBOb25lCi0gICAgICAgICAgICBpZiBwYXJzZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCi0gICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKLSAgICAgICAgICAgIHNlbGYuX3BhcnNlci5fc2V0ZXZlbnRzKHNlbGYuX2V2ZW50cywgZXZlbnRzKQotCi0gICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpdGVtID0gc2VsZi5fZXZlbnRzW3NlbGYuX2luZGV4XQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCArPSAxCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCi0gICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZSA9IHNlbGYuX2Vycm9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQotICAgICAgICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgIyBsb2FkIGV2ZW50IGJ1ZmZlcgotICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9ldmVudHNbOl0KLSAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2Mzg0KQotICAgICAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IGV4YwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCi0KLSAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotIyBjb21wYXRpYmlsaXR5Ci1YTUxUcmVlQnVpbGRlciA9IFhNTFBhcnNlcgotCi0jIHdvcmthcm91bmQgY2lyY3VsYXIgaW1wb3J0LgotdHJ5OgotICAgIGZyb20gRWxlbWVudEMxNE4gaW1wb3J0IF9zZXJpYWxpemVfYzE0bgotICAgIF9zZXJpYWxpemVbImMxNG4iXSA9IF9zZXJpYWxpemVfYzE0bgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi94bWxycGMvY2xpZW50LnB5IGIvTGliL3htbHJwYy9jbGllbnQucHkKaW5kZXggNDYxYzMwMC4uYzJhZTcwNyAxMDA2NDQKLS0tIGEvTGliL3htbHJwYy9jbGllbnQucHkKKysrIGIvTGliL3htbHJwYy9jbGllbnQucHkKQEAgLTEzNCw3ICsxMzQsNiBAQAogaW1wb3J0IGh0dHAuY2xpZW50CiBpbXBvcnQgdXJsbGliLnBhcnNlCiBmcm9tIHhtbC5wYXJzZXJzIGltcG9ydCBleHBhdAotaW1wb3J0IHNvY2tldAogaW1wb3J0IGVycm5vCiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCiB0cnk6CkBAIC0xMDQ1LDcgKzEwNDQsNyBAQAogICAgIGd6ZiA9IGd6aXAuR3ppcEZpbGUobW9kZT0icmIiLCBmaWxlb2JqPWYpCiAgICAgdHJ5OgogICAgICAgICBkZWNvZGVkID0gZ3pmLnJlYWQoKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGRhdGEiKQogICAgIGYuY2xvc2UoKQogICAgIGd6Zi5jbG9zZSgpCkBAIC0xMTMwLDggKzExMjksOSBAQAogICAgICAgICBmb3IgaSBpbiAoMCwgMSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2luZ2xlX3JlcXVlc3QoaG9zdCwgaGFuZGxlciwgcmVxdWVzdF9ib2R5LCB2ZXJib3NlKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGkgb3IgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVTRVQsIGVycm5vLkVDT05OQUJPUlRFRCwgZXJybm8uRVBJUEUpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBpIG9yIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FQ09OTkFCT1JURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRVBJUEUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZXhjZXB0IGh0dHAuY2xpZW50LkJhZFN0YXR1c0xpbmU6ICNjbG9zZSBhZnRlciB3ZSBzZW50IHJlcXVlc3QKICAgICAgICAgICAgICAgICBpZiBpOgpAQCAtMTM4NSw3ICsxMzg1LDcgQEAKICAgICAgICAgIyBnZXQgdGhlIHVybAogICAgICAgICB0eXBlLCB1cmkgPSB1cmxsaWIucGFyc2Uuc3BsaXR0eXBlKHVyaSkKICAgICAgICAgaWYgdHlwZSBub3QgaW4gKCJodHRwIiwgImh0dHBzIik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ1bnN1cHBvcnRlZCBYTUwtUlBDIHByb3RvY29sIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInVuc3VwcG9ydGVkIFhNTC1SUEMgcHJvdG9jb2wiKQogICAgICAgICBzZWxmLl9faG9zdCwgc2VsZi5fX2hhbmRsZXIgPSB1cmxsaWIucGFyc2Uuc3BsaXRob3N0KHVyaSkKICAgICAgICAgaWYgbm90IHNlbGYuX19oYW5kbGVyOgogICAgICAgICAgICAgc2VsZi5fX2hhbmRsZXIgPSAiL1JQQzIiCmRpZmYgLS1naXQgYS9MaWIveG1scnBjL3NlcnZlci5weSBiL0xpYi94bWxycGMvc2VydmVyLnB5CmluZGV4IGQyN2JmNWEuLjMwNGUyMTggMTAwNjQ0Ci0tLSBhL0xpYi94bWxycGMvc2VydmVyLnB5CisrKyBiL0xpYi94bWxycGMvc2VydmVyLnB5CkBAIC01ODQsMTMgKzU4NCw2IEBACiAgICAgICAgIFNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgYWxsb3dfbm9uZSwgZW5jb2RpbmcsIHVzZV9idWlsdGluX3R5cGVzKQogICAgICAgICBzb2NrZXRzZXJ2ZXIuVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIHJlcXVlc3RIYW5kbGVyLCBiaW5kX2FuZF9hY3RpdmF0ZSkKIAotICAgICAgICAjIFtCdWcgIzEyMjI3OTBdIElmIHBvc3NpYmxlLCBzZXQgY2xvc2Utb24tZXhlYyBmbGFnOyBpZiBhCi0gICAgICAgICMgbWV0aG9kIHNwYXducyBhIHN1YnByb2Nlc3MsIHRoZSBzdWJwcm9jZXNzIHNob3VsZG4ndCBoYXZlCi0gICAgICAgICMgdGhlIGxpc3RlbmluZyBzb2NrZXQgb3Blbi4KLSAgICAgICAgaWYgZmNudGwgaXMgbm90IE5vbmUgYW5kIGhhc2F0dHIoZmNudGwsICdGRF9DTE9FWEVDJyk6Ci0gICAgICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKHNlbGYuZmlsZW5vKCksIGZjbnRsLkZfR0VURkQpCi0gICAgICAgICAgICBmbGFncyB8PSBmY250bC5GRF9DTE9FWEVDCi0gICAgICAgICAgICBmY250bC5mY250bChzZWxmLmZpbGVubygpLCBmY250bC5GX1NFVEZELCBmbGFncykKIAogY2xhc3MgTXVsdGlQYXRoWE1MUlBDU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlcik6CiAgICAgIiIiTXVsdGlwYXRoIFhNTC1SUEMgU2VydmVyCmRpZmYgLS1naXQgYS9MaWIvemlwZmlsZS5weSBiL0xpYi96aXBmaWxlLnB5CmluZGV4IGZmNjRjOTAuLmM1Nzc2NTcgMTAwNjQ0Ci0tLSBhL0xpYi96aXBmaWxlLnB5CisrKyBiL0xpYi96aXBmaWxlLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCByZQotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHN0YXQKQEAgLTE2NCw3ICsxNjQsNyBAQAogICAgIHRyeToKICAgICAgICAgaWYgX0VuZFJlY0RhdGEoZnApOgogICAgICAgICAgICAgcmV0dXJuIFRydWUgICAgICAgICAjIGZpbGUgaGFzIGNvcnJlY3QgbWFnaWMgbnVtYmVyCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gRmFsc2UKIApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jaGVja196aXBmaWxlKGZwKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgcmV0dXJuIHJlc3VsdAogCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGZwaW4uc2VlayhvZmZzZXQgLSBzaXplRW5kQ2VudERpcjY0TG9jYXRvciwgMikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBJZiB0aGUgc2VlayBmYWlscywgdGhlIGZpbGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIGEgWklQNjQKICAgICAgICAgIyBlbmQtb2YtYXJjaGl2ZSByZWNvcmQsIHNvIGp1c3QgcmV0dXJuIHRoZSBlbmQgcmVjb3JkIHdlIHdlcmUgZ2l2ZW4uCiAgICAgICAgIHJldHVybiBlbmRyZWMKQEAgLTIxMSw4ICsyMTEsOCBAQAogICAgIGlmIGxlbihkYXRhKSAhPSBzaXplRW5kQ2VudERpcjY0OgogICAgICAgICByZXR1cm4gZW5kcmVjCiAgICAgc2lnLCBzeiwgY3JlYXRlX3ZlcnNpb24sIHJlYWRfdmVyc2lvbiwgZGlza19udW0sIGRpc2tfZGlyLCBcCi0gICAgICAgICAgICBkaXJjb3VudCwgZGlyY291bnQyLCBkaXJzaXplLCBkaXJvZmZzZXQgPSBcCi0gICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKHN0cnVjdEVuZEFyY2hpdmU2NCwgZGF0YSkKKyAgICAgICAgZGlyY291bnQsIGRpcmNvdW50MiwgZGlyc2l6ZSwgZGlyb2Zmc2V0ID0gXAorICAgICAgICBzdHJ1Y3QudW5wYWNrKHN0cnVjdEVuZEFyY2hpdmU2NCwgZGF0YSkKICAgICBpZiBzaWcgIT0gc3RyaW5nRW5kQXJjaGl2ZTY0OgogICAgICAgICByZXR1cm4gZW5kcmVjCiAKQEAgLTI0Miw3ICsyNDIsNyBAQAogICAgICMgZmlsZSBpZiB0aGlzIGlzIHRoZSBjYXNlKS4KICAgICB0cnk6CiAgICAgICAgIGZwaW4uc2Vlaygtc2l6ZUVuZENlbnREaXIsIDIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgZGF0YSA9IGZwaW4ucmVhZCgpCiAgICAgaWYgKGxlbihkYXRhKSA9PSBzaXplRW5kQ2VudERpciBhbmQKQEAgLTI5MiwyNiArMjkyLDI2IEBACiAgICAgIiIiQ2xhc3Mgd2l0aCBhdHRyaWJ1dGVzIGRlc2NyaWJpbmcgZWFjaCBmaWxlIGluIHRoZSBaSVAgYXJjaGl2ZS4iIiIKIAogICAgIF9fc2xvdHNfXyA9ICgKLSAgICAgICAgICAgICdvcmlnX2ZpbGVuYW1lJywKLSAgICAgICAgICAgICdmaWxlbmFtZScsCi0gICAgICAgICAgICAnZGF0ZV90aW1lJywKLSAgICAgICAgICAgICdjb21wcmVzc190eXBlJywKLSAgICAgICAgICAgICdjb21tZW50JywKLSAgICAgICAgICAgICdleHRyYScsCi0gICAgICAgICAgICAnY3JlYXRlX3N5c3RlbScsCi0gICAgICAgICAgICAnY3JlYXRlX3ZlcnNpb24nLAotICAgICAgICAgICAgJ2V4dHJhY3RfdmVyc2lvbicsCi0gICAgICAgICAgICAncmVzZXJ2ZWQnLAotICAgICAgICAgICAgJ2ZsYWdfYml0cycsCi0gICAgICAgICAgICAndm9sdW1lJywKLSAgICAgICAgICAgICdpbnRlcm5hbF9hdHRyJywKLSAgICAgICAgICAgICdleHRlcm5hbF9hdHRyJywKLSAgICAgICAgICAgICdoZWFkZXJfb2Zmc2V0JywKLSAgICAgICAgICAgICdDUkMnLAotICAgICAgICAgICAgJ2NvbXByZXNzX3NpemUnLAotICAgICAgICAgICAgJ2ZpbGVfc2l6ZScsCi0gICAgICAgICAgICAnX3Jhd190aW1lJywKLSAgICAgICAgKQorICAgICAgICAnb3JpZ19maWxlbmFtZScsCisgICAgICAgICdmaWxlbmFtZScsCisgICAgICAgICdkYXRlX3RpbWUnLAorICAgICAgICAnY29tcHJlc3NfdHlwZScsCisgICAgICAgICdjb21tZW50JywKKyAgICAgICAgJ2V4dHJhJywKKyAgICAgICAgJ2NyZWF0ZV9zeXN0ZW0nLAorICAgICAgICAnY3JlYXRlX3ZlcnNpb24nLAorICAgICAgICAnZXh0cmFjdF92ZXJzaW9uJywKKyAgICAgICAgJ3Jlc2VydmVkJywKKyAgICAgICAgJ2ZsYWdfYml0cycsCisgICAgICAgICd2b2x1bWUnLAorICAgICAgICAnaW50ZXJuYWxfYXR0cicsCisgICAgICAgICdleHRlcm5hbF9hdHRyJywKKyAgICAgICAgJ2hlYWRlcl9vZmZzZXQnLAorICAgICAgICAnQ1JDJywKKyAgICAgICAgJ2NvbXByZXNzX3NpemUnLAorICAgICAgICAnZmlsZV9zaXplJywKKyAgICAgICAgJ19yYXdfdGltZScsCisgICAgKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPSJOb05hbWUiLCBkYXRlX3RpbWU9KDE5ODAsMSwxLDAsMCwwKSk6CiAgICAgICAgIHNlbGYub3JpZ19maWxlbmFtZSA9IGZpbGVuYW1lICAgIyBPcmlnaW5hbCBmaWxlIG5hbWUgaW4gYXJjaGl2ZQpAQCAtMzc2LDcgKzM3Niw3IEBACiAgICAgICAgIGlmIHppcDY0OgogICAgICAgICAgICAgZm10ID0gJzxISFFRJwogICAgICAgICAgICAgZXh0cmEgPSBleHRyYSArIHN0cnVjdC5wYWNrKGZtdCwKLSAgICAgICAgICAgICAgICAgICAgMSwgc3RydWN0LmNhbGNzaXplKGZtdCktNCwgZmlsZV9zaXplLCBjb21wcmVzc19zaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHN0cnVjdC5jYWxjc2l6ZShmbXQpLTQsIGZpbGVfc2l6ZSwgY29tcHJlc3Nfc2l6ZSkKICAgICAgICAgaWYgZmlsZV9zaXplID4gWklQNjRfTElNSVQgb3IgY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgaWYgbm90IHppcDY0OgogICAgICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZSgiRmlsZXNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKQEAgLTM5NSwxMCArMzk1LDEwIEBACiAgICAgICAgIHNlbGYuY3JlYXRlX3ZlcnNpb24gPSBtYXgobWluX3ZlcnNpb24sIHNlbGYuY3JlYXRlX3ZlcnNpb24pCiAgICAgICAgIGZpbGVuYW1lLCBmbGFnX2JpdHMgPSBzZWxmLl9lbmNvZGVGaWxlbmFtZUZsYWdzKCkKICAgICAgICAgaGVhZGVyID0gc3RydWN0LnBhY2soc3RydWN0RmlsZUhlYWRlciwgc3RyaW5nRmlsZUhlYWRlciwKLSAgICAgICAgICAgICAgICAgc2VsZi5leHRyYWN0X3ZlcnNpb24sIHNlbGYucmVzZXJ2ZWQsIGZsYWdfYml0cywKLSAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLCBDUkMsCi0gICAgICAgICAgICAgICAgIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHRyYWN0X3ZlcnNpb24sIHNlbGYucmVzZXJ2ZWQsIGZsYWdfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLCBDUkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhKSkKICAgICAgICAgcmV0dXJuIGhlYWRlciArIGZpbGVuYW1lICsgZXh0cmEKIAogICAgIGRlZiBfZW5jb2RlRmlsZW5hbWVGbGFncyhzZWxmKToKQEAgLTQxMSw3ICs0MTEsNyBAQAogICAgICAgICAjIFRyeSB0byBkZWNvZGUgdGhlIGV4dHJhIGZpZWxkLgogICAgICAgICBleHRyYSA9IHNlbGYuZXh0cmEKICAgICAgICAgdW5wYWNrID0gc3RydWN0LnVucGFjawotICAgICAgICB3aGlsZSBleHRyYToKKyAgICAgICAgd2hpbGUgbGVuKGV4dHJhKSA+PSA0OgogICAgICAgICAgICAgdHAsIGxuID0gdW5wYWNrKCc8SEgnLCBleHRyYVs6NF0pCiAgICAgICAgICAgICBpZiB0cCA9PSAxOgogICAgICAgICAgICAgICAgIGlmIGxuID49IDI0OgpAQCAtNDc1LDEzICs0NzUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgY3JjID0gKChjcmMgPj4gMSkgJiAweDdGRkZGRkZGKQogICAgICAgICAgICAgdGFibGVbaV0gPSBjcmMKICAgICAgICAgcmV0dXJuIHRhYmxlCi0gICAgY3JjdGFibGUgPSBfR2VuZXJhdGVDUkNUYWJsZSgpCisgICAgY3JjdGFibGUgPSBOb25lCiAKICAgICBkZWYgX2NyYzMyKHNlbGYsIGNoLCBjcmMpOgogICAgICAgICAiIiJDb21wdXRlIHRoZSBDUkMzMiBwcmltaXRpdmUgb24gb25lIGJ5dGUuIiIiCiAgICAgICAgIHJldHVybiAoKGNyYyA+PiA4KSAmIDB4ZmZmZmZmKSBeIHNlbGYuY3JjdGFibGVbKGNyYyBeIGNoKSAmIDB4ZmZdCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHdkKToKKyAgICAgICAgaWYgX1ppcERlY3J5cHRlci5jcmN0YWJsZSBpcyBOb25lOgorICAgICAgICAgICAgX1ppcERlY3J5cHRlci5jcmN0YWJsZSA9IF9aaXBEZWNyeXB0ZXIuX0dlbmVyYXRlQ1JDVGFibGUoKQogICAgICAgICBzZWxmLmtleTAgPSAzMDU0MTk4OTYKICAgICAgICAgc2VsZi5rZXkxID0gNTkxNzUxMDQ5CiAgICAgICAgIHNlbGYua2V5MiA9IDg3ODA4MjE5MgpAQCAtNTExLDcgKzUxMyw3IEBACiAgICAgZGVmIF9pbml0KHNlbGYpOgogICAgICAgICBwcm9wcyA9IGx6bWEuX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyh7J2lkJzogbHptYS5GSUxURVJfTFpNQTF9KQogICAgICAgICBzZWxmLl9jb21wID0gbHptYS5MWk1BQ29tcHJlc3Nvcihsem1hLkZPUk1BVF9SQVcsIGZpbHRlcnM9WwotICAgICAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwgcHJvcHMpCisgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsIHByb3BzKQogICAgICAgICBdKQogICAgICAgICByZXR1cm4gc3RydWN0LnBhY2soJzxCQkgnLCA5LCA0LCBsZW4ocHJvcHMpKSArIHByb3BzCiAKQEAgLTU0Myw4ICs1NDUsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBiJycKIAogICAgICAgICAgICAgc2VsZi5fZGVjb21wID0gbHptYS5MWk1BRGVjb21wcmVzc29yKGx6bWEuRk9STUFUX1JBVywgZmlsdGVycz1bCi0gICAgICAgICAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkWzQ6NCArIHBzaXplXSkKKyAgICAgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWRbNDo0ICsgcHNpemVdKQogICAgICAgICAgICAgXSkKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl91bmNvbnN1bWVkWzQgKyBwc2l6ZTpdCiAgICAgICAgICAgICBkZWwgc2VsZi5fdW5jb25zdW1lZApAQCAtNTgwLDE1ICs1ODIsMTUgQEAKICAgICBlbGlmIGNvbXByZXNzaW9uID09IFpJUF9ERUZMQVRFRDoKICAgICAgICAgaWYgbm90IHpsaWI6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIHpsaWIgbW9kdWxlIikKKyAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSB6bGliIG1vZHVsZSIpCiAgICAgZWxpZiBjb21wcmVzc2lvbiA9PSBaSVBfQlpJUDI6CiAgICAgICAgIGlmIG5vdCBiejI6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGJ6MiBtb2R1bGUiKQorICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGJ6MiBtb2R1bGUiKQogICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0xaTUE6CiAgICAgICAgIGlmIG5vdCBsem1hOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBsem1hIG1vZHVsZSIpCisgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgbHptYSBtb2R1bGUiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGhhdCBjb21wcmVzc2lvbiBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCIpCiAKQEAgLTU5Niw3ICs1OTgsNyBAQAogZGVmIF9nZXRfY29tcHJlc3Nvcihjb21wcmVzc190eXBlKToKICAgICBpZiBjb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKICAgICAgICAgcmV0dXJuIHpsaWIuY29tcHJlc3NvYmooemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sCi0gICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwgLTE1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliLkRFRkxBVEVELCAtMTUpCiAgICAgZWxpZiBjb21wcmVzc190eXBlID09IFpJUF9CWklQMjoKICAgICAgICAgcmV0dXJuIGJ6Mi5CWjJDb21wcmVzc29yKCkKICAgICBlbGlmIGNvbXByZXNzX3R5cGUgPT0gWklQX0xaTUE6CkBAIC04MzYsOCArODM4LDggQEAKICAgICAgICAgICAgIG4gPSBtYXgobiwgc2VsZi5NSU5fUkVBRF9TSVpFKQogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKGRhdGEsIG4pCiAgICAgICAgICAgICBzZWxmLl9lb2YgPSAoc2VsZi5fZGVjb21wcmVzc29yLmVvZiBvcgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc19sZWZ0IDw9IDAgYW5kCi0gICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9kZWNvbXByZXNzb3IudW5jb25zdW1lZF90YWlsKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgPD0gMCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZGVjb21wcmVzc29yLnVuY29uc3VtZWRfdGFpbCkKICAgICAgICAgICAgIGlmIHNlbGYuX2VvZjoKICAgICAgICAgICAgICAgICBkYXRhICs9IHNlbGYuX2RlY29tcHJlc3Nvci5mbHVzaCgpCiAgICAgICAgIGVsc2U6CkBAIC04NzgsNyArODgwLDcgQEAKIGNsYXNzIFppcEZpbGU6CiAgICAgIiIiIENsYXNzIHdpdGggbWV0aG9kcyB0byBvcGVuLCByZWFkLCB3cml0ZSwgY2xvc2UsIGxpc3QgemlwIGZpbGVzLgogCi0gICAgeiA9IFppcEZpbGUoZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9RmFsc2UpCisgICAgeiA9IFppcEZpbGUoZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSkKIAogICAgIGZpbGU6IEVpdGhlciB0aGUgcGF0aCB0byB0aGUgZmlsZSwgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0LgogICAgICAgICAgIElmIGl0IGlzIGEgcGF0aCwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgYW5kIGNsb3NlZCBieSBaaXBGaWxlLgpAQCAtODk0LDcgKzg5Niw3IEBACiAgICAgZnAgPSBOb25lICAgICAgICAgICAgICAgICAgICMgU2V0IGhlcmUgc2luY2UgX19kZWxfXyBjaGVja3MgaXQKICAgICBfd2luZG93c19pbGxlZ2FsX25hbWVfdHJhbnNfdGFibGUgPSBOb25lCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlKToKICAgICAgICAgIiIiT3BlbiB0aGUgWklQIGZpbGUgd2l0aCBtb2RlIHJlYWQgInIiLCB3cml0ZSAidyIgb3IgYXBwZW5kICJhIi4iIiIKICAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJyIiwgInciLCAiYSIpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdaaXBGaWxlKCkgcmVxdWlyZXMgbW9kZSAiciIsICJ3Iiwgb3IgImEiJykKQEAgLTkxOSw3ICs5MjEsNyBAQAogICAgICAgICAgICAgbW9kZURpY3QgPSB7J3InIDogJ3JiJywgJ3cnOiAnd2InLCAnYScgOiAncitiJ30KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmZwID0gaW8ub3BlbihmaWxlLCBtb2RlRGljdFttb2RlXSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgaWYgbW9kZSA9PSAnYSc6CiAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBrZXkgPSAndycKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcCA9IGlvLm9wZW4oZmlsZSwgbW9kZURpY3RbbW9kZV0pCkBAIC05NzAsNyArOTcyLDcgQEAKICAgICAgICAgZnAgPSBzZWxmLmZwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVuZHJlYyA9IF9FbmRSZWNEYXRhKGZwKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBCYWRaaXBGaWxlKCJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIikKICAgICAgICAgaWYgbm90IGVuZHJlYzoKICAgICAgICAgICAgIHJhaXNlIEJhZFppcEZpbGUoIkZpbGUgaXMgbm90IGEgemlwIGZpbGUiKQpAQCAtMTAxOCw4ICsxMDIwLDggQEAKICAgICAgICAgICAgIHguY29tbWVudCA9IGZwLnJlYWQoY2VudGRpcltfQ0RfQ09NTUVOVF9MRU5HVEhdKQogICAgICAgICAgICAgeC5oZWFkZXJfb2Zmc2V0ID0gY2VudGRpcltfQ0RfTE9DQUxfSEVBREVSX09GRlNFVF0KICAgICAgICAgICAgICh4LmNyZWF0ZV92ZXJzaW9uLCB4LmNyZWF0ZV9zeXN0ZW0sIHguZXh0cmFjdF92ZXJzaW9uLCB4LnJlc2VydmVkLAotICAgICAgICAgICAgICAgIHguZmxhZ19iaXRzLCB4LmNvbXByZXNzX3R5cGUsIHQsIGQsCi0gICAgICAgICAgICAgICAgeC5DUkMsIHguY29tcHJlc3Nfc2l6ZSwgeC5maWxlX3NpemUpID0gY2VudGRpclsxOjEyXQorICAgICAgICAgICAgIHguZmxhZ19iaXRzLCB4LmNvbXByZXNzX3R5cGUsIHQsIGQsCisgICAgICAgICAgICAgeC5DUkMsIHguY29tcHJlc3Nfc2l6ZSwgeC5maWxlX3NpemUpID0gY2VudGRpclsxOjEyXQogICAgICAgICAgICAgaWYgeC5leHRyYWN0X3ZlcnNpb24gPiBNQVhfRVhUUkFDVF9WRVJTSU9OOgogICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInppcCBmaWxlIHZlcnNpb24gJS4xZiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHguZXh0cmFjdF92ZXJzaW9uIC8gMTApKQpAQCAtMTAyNyw3ICsxMDI5LDcgQEAKICAgICAgICAgICAgICMgQ29udmVydCBkYXRlL3RpbWUgY29kZSB0byAoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWluLCBzZWMpCiAgICAgICAgICAgICB4Ll9yYXdfdGltZSA9IHQKICAgICAgICAgICAgIHguZGF0ZV90aW1lID0gKCAoZD4+OSkrMTk4MCwgKGQ+PjUpJjB4RiwgZCYweDFGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ+PjExLCAodD4+NSkmMHgzRiwgKHQmMHgxRikgKiAyICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Pj4xMSwgKHQ+PjUpJjB4M0YsICh0JjB4MUYpICogMiApCiAKICAgICAgICAgICAgIHguX2RlY29kZUV4dHJhKCkKICAgICAgICAgICAgIHguaGVhZGVyX29mZnNldCA9IHguaGVhZGVyX29mZnNldCArIGNvbmNhdApAQCAtMTExOSwxMSArMTEyMSwxNSBAQAogICAgICAgICAiIiJSZXR1cm4gZmlsZS1saWtlIG9iamVjdCBmb3IgJ25hbWUnLiIiIgogICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAiVSIsICJyVSIpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdvcGVuKCkgcmVxdWlyZXMgbW9kZSAiciIsICJVIiwgb3IgInJVIicpCisgICAgICAgIGlmICdVJyBpbiBtb2RlOgorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCInVScgbW9kZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBpZiBwd2QgYW5kIG5vdCBpc2luc3RhbmNlKHB3ZCwgYnl0ZXMpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJwd2Q6IGV4cGVjdGVkIGJ5dGVzLCBnb3QgJXMiICUgdHlwZShwd2QpKQogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHJlYWQgWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHJlYWQgWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogCiAgICAgICAgICMgT25seSBvcGVuIGEgbmV3IGZpbGUgZm9yIGluc3RhbmNlcyB3aGVyZSB3ZSB3ZXJlIG5vdAogICAgICAgICAjIGdpdmVuIGEgZmlsZSBvYmplY3QgaW4gdGhlIGNvbnN0cnVjdG9yCkBAIC0xMjk2LDcgKzEzMDIsNyBAQAogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd3cml0ZSgpIHJlcXVpcmVzIG1vZGUgInciIG9yICJhIicpCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKICAgICAgICAgX2NoZWNrX2NvbXByZXNzaW9uKHppbmZvLmNvbXByZXNzX3R5cGUpCiAgICAgICAgIGlmIHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6CkBAIC0xMzA0LDE0ICsxMzEwLDE0IEBACiAgICAgICAgIGlmIHppbmZvLmhlYWRlcl9vZmZzZXQgPiBaSVA2NF9MSU1JVDoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgogICAgICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZSgKLSAgICAgICAgICAgICAgICAgICAgICAiWmlwZmlsZSBzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCisgICAgICAgICAgICAgICAgICAgICJaaXBmaWxlIHNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKIAogICAgIGRlZiB3cml0ZShzZWxmLCBmaWxlbmFtZSwgYXJjbmFtZT1Ob25lLCBjb21wcmVzc190eXBlPU5vbmUpOgogICAgICAgICAiIiJQdXQgdGhlIGJ5dGVzIGZyb20gZmlsZW5hbWUgaW50byB0aGUgYXJjaGl2ZSB1bmRlciB0aGUgbmFtZQogICAgICAgICBhcmNuYW1lLiIiIgogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQogICAgICAgICBpc2RpciA9IHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKQpAQCAtMTM1OCw3ICsxMzY0LDcgQEAKICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplID0gMAogICAgICAgICAgICAgIyBDb21wcmVzc2VkIHNpemUgY2FuIGJlIGxhcmdlciB0aGFuIHVuY29tcHJlc3NlZCBzaXplCiAgICAgICAgICAgICB6aXA2NCA9IHNlbGYuX2FsbG93WmlwNjQgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplICogMS4wNSA+IFpJUDY0X0xJTUlUCisgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplICogMS4wNSA+IFpJUDY0X0xJTUlUCiAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQogICAgICAgICAgICAgZmlsZV9zaXplID0gMAogICAgICAgICAgICAgd2hpbGUgMToKQEAgLTE0MTIsNyArMTQxOCw3IEBACiAKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogCiAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSA9IGxlbihkYXRhKSAgICAgICAgICAgICMgVW5jb21wcmVzc2VkIHNpemUKICAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGRhdGEKQEAgLTE0MzIsNyArMTQzOCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gemluZm8uZmlsZV9zaXplCiAgICAgICAgIHppcDY0ID0gemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQgb3IgXAotICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVAorICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUCiAgICAgICAgIGlmIHppcDY0IGFuZCBub3Qgc2VsZi5fYWxsb3daaXA2NDoKICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZSgiRmlsZXNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKICAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKHppcDY0KSkKQEAgLTE0NDEsNyArMTQ0Nyw3IEBACiAgICAgICAgICAgICAjIFdyaXRlIENSQyBhbmQgZmlsZSBzaXplcyBhZnRlciB0aGUgZmlsZSBkYXRhCiAgICAgICAgICAgICBmbXQgPSAnPExRUScgaWYgemlwNjQgZWxzZSAnPExMTCcKICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoc3RydWN0LnBhY2soZm10LCB6aW5mby5DUkMsIHppbmZvLmNvbXByZXNzX3NpemUsCi0gICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUpKQogICAgICAgICBzZWxmLmZwLmZsdXNoKCkKICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoemluZm8pCiAgICAgICAgIHNlbGYuTmFtZVRvSW5mb1t6aW5mby5maWxlbmFtZV0gPSB6aW5mbwpAQCAtMTQ2Nyw3ICsxNDczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZG9zdGltZSA9IGR0WzNdIDw8IDExIHwgZHRbNF0gPDwgNSB8IChkdFs1XSAvLyAyKQogICAgICAgICAgICAgICAgICAgICBleHRyYSA9IFtdCiAgICAgICAgICAgICAgICAgICAgIGlmIHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQ6CisgICAgICAgICAgICAgICAgICAgICAgIG9yIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmFwcGVuZCh6aW5mby5maWxlX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5hcHBlbmQoemluZm8uY29tcHJlc3Nfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IDB4ZmZmZmZmZmYKQEAgLTE0ODcsOCArMTQ5Myw4IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIGV4dHJhOgogICAgICAgICAgICAgICAgICAgICAgICAgIyBBcHBlbmQgYSBaSVA2NCBmaWVsZCB0byB0aGUgZXh0cmEncwogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGF0YSA9IHN0cnVjdC5wYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEhIJyArICdRJypsZW4oZXh0cmEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCA4KmxlbihleHRyYSksICpleHRyYSkgKyBleHRyYV9kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxISCcgKyAnUScqbGVuKGV4dHJhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCA4KmxlbihleHRyYSksICpleHRyYSkgKyBleHRyYV9kYXRhCiAKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl92ZXJzaW9uID0gWklQNjRfVkVSU0lPTgogCkBAIC0xNTAyLDIxICsxNTA4LDIxIEBACiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBmbGFnX2JpdHMgPSB6aW5mby5fZW5jb2RlRmlsZW5hbWVGbGFncygpCiAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZGlyID0gc3RydWN0LnBhY2soc3RydWN0Q2VudHJhbERpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoKHN0cnVjdENlbnRyYWxEaXIsIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih6aW5mby5maWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCksIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oemluZm8uZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGNlbnRkaXIpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoZmlsZW5hbWUpCkBAIC0xNTMzLDIyICsxNTM5LDIyIEBACiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplID4gWklQNjRfTElNSVQpOgogICAgICAgICAgICAgICAgICAgICAjIE5lZWQgdG8gd3JpdGUgdGhlIFpJUDY0IGVuZC1vZi1hcmNoaXZlIHJlY29yZHMKICAgICAgICAgICAgICAgICAgICAgemlwNjRlbmRyZWMgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjQsIHN0cmluZ0VuZEFyY2hpdmU2NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NCwgNDUsIDQ1LCAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NCwgc3RyaW5nRW5kQXJjaGl2ZTY0LAorICAgICAgICAgICAgICAgICAgICAgICAgNDQsIDQ1LCA0NSwgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aXA2NGVuZHJlYykKIAogICAgICAgICAgICAgICAgICAgICB6aXA2NGxvY3JlYyA9IHN0cnVjdC5wYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NExvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nRW5kQXJjaGl2ZTY0TG9jYXRvciwgMCwgcG9zMiwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NExvY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdFbmRBcmNoaXZlNjRMb2NhdG9yLCAwLCBwb3MyLCAxKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppcDY0bG9jcmVjKQogICAgICAgICAgICAgICAgICAgICBjZW50RGlyQ291bnQgPSBtaW4oY2VudERpckNvdW50LCAweEZGRkYpCiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplID0gbWluKGNlbnREaXJTaXplLCAweEZGRkZGRkZGKQogICAgICAgICAgICAgICAgICAgICBjZW50RGlyT2Zmc2V0ID0gbWluKGNlbnREaXJPZmZzZXQsIDB4RkZGRkZGRkYpCiAKICAgICAgICAgICAgICAgICBlbmRyZWMgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RFbmRBcmNoaXZlLCBzdHJpbmdFbmRBcmNoaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCwgbGVuKHNlbGYuX2NvbW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0LCBsZW4oc2VsZi5fY29tbWVudCkpCiAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShlbmRyZWMpCiAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShzZWxmLl9jb21tZW50KQogICAgICAgICAgICAgICAgIHNlbGYuZnAuZmx1c2goKQpAQCAtMTU2MywxMiArMTU2OSwxMiBAQAogICAgICIiIkNsYXNzIHRvIGNyZWF0ZSBaSVAgYXJjaGl2ZXMgd2l0aCBQeXRob24gbGlicmFyeSBmaWxlcyBhbmQgcGFja2FnZXMuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsCi0gICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9RmFsc2UsIG9wdGltaXplPS0xKToKKyAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1UcnVlLCBvcHRpbWl6ZT0tMSk6CiAgICAgICAgIFppcEZpbGUuX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT1tb2RlLCBjb21wcmVzc2lvbj1jb21wcmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PWFsbG93WmlwNjQpCiAgICAgICAgIHNlbGYuX29wdGltaXplID0gb3B0aW1pemUKIAotICAgIGRlZiB3cml0ZXB5KHNlbGYsIHBhdGhuYW1lLCBiYXNlbmFtZT0iIik6CisgICAgZGVmIHdyaXRlcHkoc2VsZiwgcGF0aG5hbWUsIGJhc2VuYW1lPSIiLCBmaWx0ZXJmdW5jPU5vbmUpOgogICAgICAgICAiIiJBZGQgYWxsIGZpbGVzIGZyb20gInBhdGhuYW1lIiB0byB0aGUgWklQIGFyY2hpdmUuCiAKICAgICAgICAgSWYgcGF0aG5hbWUgaXMgYSBwYWNrYWdlIGRpcmVjdG9yeSwgc2VhcmNoIHRoZSBkaXJlY3RvcnkgYW5kCkBAIC0xNTc5LDcgKzE1ODUsMTQgQEAKICAgICAgICAgYXJjaGl2ZS4gIEFkZGVkIG1vZHVsZXMgYXJlIGFsd2F5cyBtb2R1bGUucHlvIG9yIG1vZHVsZS5weWMuCiAgICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgY29tcGlsZSB0aGUgbW9kdWxlLnB5IGludG8gbW9kdWxlLnB5YyBpZgogICAgICAgICBuZWNlc3NhcnkuCisgICAgICAgIElmIGZpbHRlcmZ1bmMocGF0aG5hbWUpIGlzIGdpdmVuLCBpdCBpcyBjYWxsZWQgd2l0aCBldmVyeSBhcmd1bWVudC4KKyAgICAgICAgV2hlbiBpdCBpcyBGYWxzZSwgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGlzIHNraXBwZWQuCiAgICAgICAgICIiIgorICAgICAgICBpZiBmaWx0ZXJmdW5jIGFuZCBub3QgZmlsdGVyZnVuYyhwYXRobmFtZSk6CisgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgIGxhYmVsID0gJ3BhdGgnIGlmIG9zLnBhdGguaXNkaXIocGF0aG5hbWUpIGVsc2UgJ2ZpbGUnCisgICAgICAgICAgICAgICAgcHJpbnQoJyVzICIlcyIgc2tpcHBlZCBieSBmaWx0ZXJmdW5jJyAlIChsYWJlbCwgcGF0aG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGRpciwgbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aG5hbWUpCiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aG5hbWUpOgogICAgICAgICAgICAgaW5pdG5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aG5hbWUsICJfX2luaXRfXy5weSIpCkBAIC0xNjA0LDEwICsxNjE3LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ocGF0aCwgIl9faW5pdF9fLnB5IikpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIHBhY2thZ2UgZGlyZWN0b3J5LCBhZGQgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlcHkocGF0aCwgYmFzZW5hbWUpICAjIFJlY3Vyc2l2ZSBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZXB5KHBhdGgsIGJhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJmdW5jPWZpbHRlcmZ1bmMpICAjIFJlY3Vyc2l2ZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgIGVsaWYgZXh0ID09ICIucHkiOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmlsdGVyZnVuYyBhbmQgbm90IGZpbHRlcmZ1bmMocGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZpbGUgIiVzIiBza2lwcGVkIGJ5IGZpbHRlcmZ1bmMnICUgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGFyY25hbWUgPSBzZWxmLl9nZXRfY29kZW5hbWUocGF0aFswOi0zXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkFkZGluZyIsIGFyY25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGZuYW1lLCBhcmNuYW1lKQpAQCAtMTYxOSwxNSArMTYzNywxOSBAQAogICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGhuYW1lLCBmaWxlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgcm9vdCwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgaWYgZXh0ID09ICIucHkiOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmlsdGVyZnVuYyBhbmQgbm90IGZpbHRlcmZ1bmMocGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZpbGUgIiVzIiBza2lwcGVkIGJ5IGZpbHRlcmZ1bmMnICUgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGFyY25hbWUgPSBzZWxmLl9nZXRfY29kZW5hbWUocGF0aFswOi0zXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkFkZGluZyIsIGFyY25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGZuYW1lLCBhcmNuYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgcGF0aG5hbWVbLTM6XSAhPSAiLnB5IjoKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgJ0ZpbGVzIGFkZGVkIHdpdGggd3JpdGVweSgpIG11c3QgZW5kIHdpdGggIi5weSInKQorICAgICAgICAgICAgICAgICAgICAnRmlsZXMgYWRkZWQgd2l0aCB3cml0ZXB5KCkgbXVzdCBlbmQgd2l0aCAiLnB5IicpCiAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRobmFtZVswOi0zXSwgYmFzZW5hbWUpCiAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgIHByaW50KCJBZGRpbmcgZmlsZSIsIGFyY25hbWUpCkBAIC0xNjU0LDggKzE2NzYsOCBAQAogICAgICAgICBmaWxlX3B5ICA9IHBhdGhuYW1lICsgIi5weSIKICAgICAgICAgZmlsZV9weWMgPSBwYXRobmFtZSArICIucHljIgogICAgICAgICBmaWxlX3B5byA9IHBhdGhuYW1lICsgIi5weW8iCi0gICAgICAgIHB5Y2FjaGVfcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIFRydWUpCi0gICAgICAgIHB5Y2FjaGVfcHlvID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIEZhbHNlKQorICAgICAgICBweWNhY2hlX3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIFRydWUpCisgICAgICAgIHB5Y2FjaGVfcHlvID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgRmFsc2UpCiAgICAgICAgIGlmIHNlbGYuX29wdGltaXplID09IC0xOgogICAgICAgICAgICAgIyBsZWdhY3kgbW9kZTogdXNlIHdoYXRldmVyIGZpbGUgaXMgcHJlc2VudAogICAgICAgICAgICAgaWYgKG9zLnBhdGguaXNmaWxlKGZpbGVfcHlvKSBhbmQKQEAgLTE3NDIsMTggKzE3NjQsNyBAQAogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICAgICB3aXRoIFppcEZpbGUoYXJnc1sxXSwgJ3InKSBhcyB6ZjoKLSAgICAgICAgICAgIG91dCA9IGFyZ3NbMl0KLSAgICAgICAgICAgIGZvciBwYXRoIGluIHpmLm5hbWVsaXN0KCk6Ci0gICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCcuLycpOgotICAgICAgICAgICAgICAgICAgICB0Z3QgPSBvcy5wYXRoLmpvaW4ob3V0LCBwYXRoWzI6XSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0Z3QgPSBvcy5wYXRoLmpvaW4ob3V0LCBwYXRoKQotCi0gICAgICAgICAgICAgICAgdGd0ZGlyID0gb3MucGF0aC5kaXJuYW1lKHRndCkKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGd0ZGlyKToKLSAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnModGd0ZGlyKQotICAgICAgICAgICAgICAgIHdpdGggb3Blbih0Z3QsICd3YicpIGFzIGZwOgotICAgICAgICAgICAgICAgICAgICBmcC53cml0ZSh6Zi5yZWFkKHBhdGgpKQorICAgICAgICAgICAgemYuZXh0cmFjdGFsbChhcmdzWzJdKQogCiAgICAgZWxpZiBhcmdzWzBdID09ICctYyc6CiAgICAgICAgIGlmIGxlbihhcmdzKSA8IDM6CkBAIC0xNzY2LDEwICsxNzc3LDEwIEBACiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgZm9yIG5tIGluIG9zLmxpc3RkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvWmlwKHpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCiAgICAgICAgICAgICAjIGVsc2U6IGlnbm9yZQogCi0gICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAndycsIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemY6CisgICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAndycpIGFzIHpmOgogICAgICAgICAgICAgZm9yIHNyYyBpbiBhcmdzWzI6XToKICAgICAgICAgICAgICAgICBhZGRUb1ppcCh6Ziwgc3JjLCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCiAKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0IGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKaW5kZXggNTZjNzY5YS4uM2NlZDA2NiAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKQEAgLTgsMTMgKzgsMTMgQEAKIGFuIEluc3RhbGxlciBwYWNrYWdlIGZyb20gdGhlIGluc3RhbGxhdGlvbiBwbHVzIG90aGVyIGZpbGVzIGluIGBgcmVzb3VyY2VzYGAgCiBhbmQgYGBzY3JpcHRzYGAgYW5kIHBsYWNlZCB0aGF0IG9uIGEgYGAuZG1nYGAgZGlzayBpbWFnZS4KIAotQXMgb2YgUHl0aG9uIDMuMy4wLCBQU0YgcHJhY3RpY2UgaXMgdG8gYnVpbGQgdHdvIGluc3RhbGxlciB2YXJpYW50cworRm9yIFB5dGhvbiAzLjQuMCwgUFNGIHByYWN0aWNlIGlzIHRvIGJ1aWxkIHR3byBpbnN0YWxsZXIgdmFyaWFudHMKIGZvciBlYWNoIHJlbGVhc2UuCiAKIDEuICAzMi1iaXQtb25seSwgaTM4NiBhbmQgUFBDIHVuaXZlcnNhbCwgY2FwYWJsZSBvbiBydW5uaW5nIG9uIGFsbCBtYWNoaW5lcwotICAgIHN1cHBvcnRlZCBieSBNYWMgT1MgWCAxMC41IHRocm91Z2ggKGF0IGxlYXN0KSAxMC44OjoKKyAgICBzdXBwb3J0ZWQgYnkgTWFjIE9TIFggMTAuNSB0aHJvdWdoIChhdCBsZWFzdCkgMTAuOTo6CiAKLSAgICAgICAgL3Vzci9iaW4vcHl0aG9uIGJ1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgIC9wYXRoL3RvL2Jvb3RzdHJhcC9weXRob24yLjcgYnVpbGQtaW5zdGFsbGVyLnB5IFwKICAgICAgICAgICAgIC0tc2RrLXBhdGg9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjUuc2RrIFwKICAgICAgICAgICAgIC0tdW5pdmVyc2FsLWFyY2hzPTMyLWJpdCBcCiAgICAgICAgICAgICAtLWRlcC10YXJnZXQ9MTAuNQpAQCAtMjIsMTQgKzIyLDE0IEBACiAgICAgLSBidWlsZHMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAogICAgICAgICAqIE5DdXJzZXMgNS45IChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTUwMzcpCi0gICAgICAgICogU1FMaXRlIDMuNy4xMwotICAgICAgICAqIFhaIDUuMC4zCisgICAgICAgICogU1FMaXRlIDMuOC4zLjEKKyAgICAgICAgKiBYWiA1LjAuNQogCiAgICAgLSB1c2VzIHN5c3RlbS1zdXBwbGllZCB2ZXJzaW9ucyBvZiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAogICAgICAgICAqIHJlYWRsaW5lIG1vZHVsZSBsaW5rcyB3aXRoIEFwcGxlIEJTRCBlZGl0bGluZSAobGliZWRpdCkKIAotICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgYGBUY2wvVGsgOC40YGAgKGN1cnJlbnRseSA4LjQuMTkpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKyAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIGBgVGNsL1RrIDguNGBgIChjdXJyZW50bHkgOC40LjIwKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCiAKICAgICAtIHJlY29tbWVuZGVkIGJ1aWxkIGVudmlyb25tZW50OgogCkBAIC0zOCw3ICszOCw4IEBACiAgICAgICAgICogYGBNYWNPU1gxMC41YGAgU0RLCiAgICAgICAgICogYGBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9MTAuNWBgCiAgICAgICAgICogQXBwbGUgYGBnY2MtNC4yYGAKLSAgICAgICAgKiBzeXN0ZW0gUHl0aG9uIDIuNSBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAorICAgICAgICAqIGJvb3RzdHJhcCBub24tZnJhbWV3b3JrIFB5dGhvbiAyLjcgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgd2l0aAorICAgICAgICAgIFNwaGlueCAoYXMgb2YgMy40LjEpCiAKICAgICAtIGFsdGVybmF0ZSBidWlsZCBlbnZpcm9ubWVudHM6CiAKQEAgLTQ4LDcgKzQ5LDcgQEAKIAogMi4gIDY0LWJpdCAvIDMyLWJpdCwgeDg2XzY0IGFuZCBpMzg2IHVuaXZlcnNhbCwgZm9yIE9TIFggMTAuNiAoYW5kIGxhdGVyKTo6CiAKLSAgICAgICAgL3Vzci9iaW4vcHl0aG9uIGJ1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgIC9wYXRoL3RvL2Jvb3RzdHJhcC9weXRob24yLjcgYnVpbGQtaW5zdGFsbGVyLnB5IFwKICAgICAgICAgICAgIC0tc2RrLXBhdGg9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjYuc2RrIFwKICAgICAgICAgICAgIC0tdW5pdmVyc2FsLWFyY2hzPWludGVsIFwKICAgICAgICAgICAgIC0tZGVwLXRhcmdldD0xMC42CkBAIC01NiwxNCArNTcsMTQgQEAKICAgICAtIGJ1aWxkcyB0aGUgZm9sbG93aW5nIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCiAgICAgICAgICogTkN1cnNlcyA1LjkgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTAzNykKLSAgICAgICAgKiBTUUxpdGUgMy43LjEzCi0gICAgICAgICogWFogNS4wLjMKKyAgICAgICAgKiBTUUxpdGUgMy44LjMuMQorICAgICAgICAqIFhaIDUuMC41CiAKICAgICAtIHVzZXMgc3lzdGVtLXN1cHBsaWVkIHZlcnNpb25zIG9mIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCiAgICAgICAgICogcmVhZGxpbmUgbW9kdWxlIGxpbmtzIHdpdGggQXBwbGUgQlNEIGVkaXRsaW5lIChsaWJlZGl0KQogCi0gICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjkgKG9yIGxhdGVyKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCisgICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjE1LjEgKG9yIGxhdGVyKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCiAKICAgICAtIHJlY29tbWVuZGVkIGJ1aWxkIGVudmlyb25tZW50OgogCkBAIC03Miw3ICs3Myw4IEBACiAgICAgICAgICogYGBNYWNPU1gxMC42YGAgU0RLCiAgICAgICAgICogYGBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9MTAuNmBgCiAgICAgICAgICogQXBwbGUgYGBnY2MtNC4yYGAKLSAgICAgICAgKiBzeXN0ZW0gUHl0aG9uIDIuNiBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAorICAgICAgICAqIGJvb3RzdHJhcCBub24tZnJhbWV3b3JrIFB5dGhvbiAyLjcgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgd2l0aAorICAgICAgICAgIFNwaGlueCAoYXMgb2YgMy40LjEpCiAKICAgICAtIGFsdGVybmF0ZSBidWlsZCBlbnZpcm9ubWVudHM6CiAKQEAgLTgyLDEwICs4NCwxMCBAQAogICAgICAgICAgIGNvbnNpZGVyZWQgYSBtaWdyYXRpb24gYWlkIGJ5IEFwcGxlIGFuZCBpcyBub3QgbGlrZWx5IHRvIGJlIGZpeGVkLAogICAgICAgICAgIGl0cyB1c2Ugc2hvdWxkIGJlIGF2b2lkZWQuICBUaGUgb3RoZXIgY29tcGlsZXIsIGBgY2xhbmdgYCwgaGFzIGJlZW4KICAgICAgICAgICB1bmRlcmdvaW5nIHJhcGlkIGRldmVsb3BtZW50LiAgV2hpbGUgaXQgYXBwZWFycyB0byBoYXZlIGJlY29tZQotICAgICAgICAgIHByb2R1Y3Rpb24tcmVhZHkgaW4gdGhlIG1vc3QgcmVjZW50IFhjb2RlIDQgcmVsZWFzZXMgKFhjb2RlIDQuNi4zCi0gICAgICAgICAgYXMgb2YgdGhpcyB3cml0aW5nKSwgdGhlcmUgYXJlIHN0aWxsIHNvbWUgb3BlbiBpc3N1ZXMgd2hlbgotICAgICAgICAgIGJ1aWxkaW5nIFB5dGhvbiBhbmQgdGhlcmUgaGFzIG5vdCB5ZXQgYmVlbiB0aGUgbGV2ZWwgb2YgZXhwb3N1cmUgaW4KLSAgICAgICAgICBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB0aGF0IHRoZSBYY29kZSAzIGdjYy00LjIgY29tcGlsZXIgaGFzIGhhZC4KKyAgICAgICAgICBwcm9kdWN0aW9uLXJlYWR5IGluIHRoZSBtb3N0IHJlY2VudCBYY29kZSA1IHJlbGVhc2VzLCB0aGUgdmVyc2lvbnMKKyAgICAgICAgICBhdmFpbGFibGUgb24gdGhlIGRlcHJlY2F0ZWQgWGNvZGUgNC54IGZvciAxMC42IHdlcmUgZWFybHkgcmVsZWFzZXMKKyAgICAgICAgICBhbmQgZGlkIG5vdCByZWNlaXZlIHRoZSBsZXZlbCBvZiBleHBvc3VyZSBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50cworICAgICAgICAgIHRoYXQgdGhlIFhjb2RlIDMgZ2NjLTQuMiBjb21waWxlciBoYXMgaGFkLgogCiAKICogICBGb3IgUHl0aG9uIDIuNy54IGFuZCAzLjIueCwgdGhlIDMyLWJpdC1vbmx5IGluc3RhbGxlciB3YXMgY29uZmlndXJlZCB0bwpAQCAtMTExLDcgKzExMyw3IEBACiAgICAgICAgICogWmxpYiAxLjIuMwogICAgICAgICAqIE9yYWNsZSBTbGVlcHljYXQgREIgNC44IChQeXRob24gMi54IG9ubHkpCiAKLSAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIGBgVGNsL1RrIDguNGBgIChjdXJyZW50bHkgOC40LjE5KSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCisgICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBgYFRjbC9UayA4LjRgYCAoY3VycmVudGx5IDguNC4yMCkgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZwogCiAgICAgLSByZWNvbW1lbmRlZCBidWlsZCBlbnZpcm9ubWVudDoKICAgICAgICAgCkBAIC0xMzcsNyArMTM5LDEzIEBACiAgIGludGVyZmVyZSB3aXRoIHRoZSBidWlsZC4KIAogKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHJlbGVhc2UgaXMgYnVpbHQgdXNpbmcgU3BoaW54Ci0gIGJlY2F1c2UgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIGluc3RhbGxlci4KKyAgYmVjYXVzZSBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgaW5zdGFsbGVyLiAgRm9yIDIuNy54IGFuZCAzLngueCB1cCB0byBhbmQKKyAgaW5jbHVkaW5nIDMuNC4wLCB0aGUgYGBEb2MvTWFrZWZpbGVgYCB1c2VzIGBgc3ZuYGAgdG8gZG93bmxvYWQgcmVwb3Mgb2YKKyAgYGBTcGhpbnhgYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gIEJlZ2lubmluZyB3aXRoIDMuNC4xLCB0aGUgYGBEb2MvTWFrZWZpbGVgYAorICBhc3N1bWVzIHRoZXJlIGlzIGFuIGV4dGVybmFsbHktcHJvdmlkZWQgYGBzcGhpbngtYnVpbGRgYCBhbmQgcmVxdWlyZXMgYXQKKyAgbGVhc3QgUHl0aG9uIDIuNiB0byBydW4uICBCZWNhdXNlIG9mIHRoaXMsIGl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0bworICBidWlsZCBhIDMuNC4xIG9yIGxhdGVyIGluc3RhbGxlciBvbiBPUyBYIDEwLjUgdXNpbmcgdGhlIEFwcGxlLXN1cHBsaWVkCisgIFB5dGhvbiAyLjUuCiAKICogSXQgaXMgc2FmZXN0IHRvIHN0YXJ0IGVhY2ggdmFyaWFudCBidWlsZCB3aXRoIGFuIGVtcHR5IHNvdXJjZSBkaXJlY3RvcnkKICAgcG9wdWxhdGVkIHdpdGggYSBmcmVzaCBjb3B5IG9mIHRoZSB1bnRhcnJlZCBzb3VyY2UuCkBAIC0xOTUsOCArMjAzLDggQEAKIG9uIGFsbCBzdXBwb3J0ZWQgT1MgWCByZWxlYXNlcyBhbmQgYXJjaGl0ZWN0dXJlcy4gIEFzIGEgcHJhY3RpY2FsIG1hdHRlciwKIHRoYXQgaXMgZ2VuZXJhbGx5IG5vdCBwb3NzaWJsZS4gIEF0IGEgbWluaW11bSwgdmFyaWFudCAxIHNob3VsZCBiZSBydW4gb24KIGEgUFBDIEc0IHN5c3RlbSB3aXRoIE9TIFggMTAuNSBhbmQgYXQgbGVhc3Qgb25lIEludGVsIHN5c3RlbSBydW5uaW5nIE9TIFgKLTEwLjgsIDEwLjcsIDEwLjYsIG9yIDEwLjUuICBWYXJpYW50IDIgc2hvdWxkIGJlIHJ1biBvbiAxMC44LCAxMC43LCBhbmQgMTAuNgotc3lzdGVtcyBpbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0IG1vZGVzLjo6CisxMC45LCAxMC44LCAxMC43LCAxMC42LCBvciAxMC41LiAgVmFyaWFudCAyIHNob3VsZCBiZSBydW4gb24gMTAuOSwgMTAuOCwKKzEwLjcsIGFuZCAxMC42IHN5c3RlbXMgaW4gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBtb2Rlcy46OgogCiAgICAgL3Vzci9sb2NhbC9iaW4vcHl0aG9ubi5uIC1tIHRlc3QgLXcgLXUgYWxsLC1sYXJnZWZpbGUKICAgICAvdXNyL2xvY2FsL2Jpbi9weXRob25uLm4tMzIgLW0gdGVzdCAtdyAtdSBhbGwKQEAgLTIwNyw3ICsyMTUsNyBAQAogZHVyaW5nIHRlc3RpbmcgYW5kIGNhbiBiZSBpZ25vcmVkLgogCiBJdCBpcyBhbHNvIHJlY29tbWVuZCB0byBsYXVuY2ggSURMRSBhbmQgdmVyaWZ5IHRoYXQgaXQgaXMgYXQgbGVhc3QKLWZ1bmN0aW9uYWwuICBEb3VibGUtY2xpY2sgb24gdGhlIElETEUgYXBwIGljb24gaW4gYGAvQXBwbGljYXRpb25zL1B5dGhvbm4ubmBgLgorZnVuY3Rpb25hbC4gIERvdWJsZS1jbGljayBvbiB0aGUgSURMRSBhcHAgaWNvbiBpbiBgYC9BcHBsaWNhdGlvbnMvUHl0aG9uIG4ubmBgLgogSXQgc2hvdWxkIGFsc28gYmUgdGVzdGVkIGZyb20gdGhlIGNvbW1hbmQgbGluZTo6CiAKICAgICAvdXNyL2xvY2FsL2Jpbi9pZGxlbi5uCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5IGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQppbmRleCBmZDVkNWMzLi43MTBlODRkIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CisrKyBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKQEAgLTgsNyArOCw5IEBACiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhpcyBzY3JpcHQga2VlcHMgd29ya2luZyB3aXRoIFB5dGhvbiAyLjUsIHRvIGF2b2lkCiBib290c3RyYXAgaXNzdWVzICgvdXNyL2Jpbi9weXRob24gaXMgUHl0aG9uIDIuNSBvbiBPU1ggMTAuNSkuICBTcGhpbngsCiB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBkb2N1bWVudGF0aW9uLCBjdXJyZW50bHkgcmVxdWlyZXMgYXQgbGVhc3QKLVB5dGhvbiAyLjQuCitQeXRob24gMi40LiAgSG93ZXZlciwgYXMgb2YgUHl0aG9uIDMuNC4xLCBEb2MgYnVpbGRzIHJlcXVpcmUgYW4gZXh0ZXJuYWwKK3NwaGlueC1idWlsZCBhbmQgdGhlIGN1cnJlbnQgdmVyc2lvbnMgb2YgU3BoaW54IG5vdyByZXF1aXJlIGF0IGxlYXN0CitQeXRob24gMi42LgogCiBJbiBhZGRpdGlvbiB0byB3aGF0IGlzIHN1cHBsaWVkIHdpdGggT1MgWCAxMC41KyBhbmQgWGNvZGUgMyssIHRoZSBzY3JpcHQKIHJlcXVpcmVzIGFuIGluc3RhbGxlZCB2ZXJzaW9uIG9mIGhnIGFuZCBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YKQEAgLTIxLDggKzIzLDggQEAKIAogMzItYml0LW9ubHkgaW5zdGFsbGVyIGJ1aWxkcyBhcmUgc3RpbGwgcG9zc2libGUgb24gT1MgWCAxMC40IHdpdGggWGNvZGUgMi41CiBhbmQgdGhlIGluc3RhbGxhdGlvbiBvZiBhZGRpdGlvbmFsIGNvbXBvbmVudHMsIHN1Y2ggYXMgYSBuZXdlciBQeXRob24KLSgyLjUgaXMgbmVlZGVkIGZvciBQeXRob24gcGFyc2VyIHVwZGF0ZXMpLCBoZywgYW5kIHN2biAoZm9yIHRoZSBkb2N1bWVudGF0aW9uCi1idWlsZCkuCisoMi41IGlzIG5lZWRlZCBmb3IgUHl0aG9uIHBhcnNlciB1cGRhdGVzKSwgaGcsIGFuZCBmb3IgdGhlIGRvY3VtZW50YXRpb24KK2J1aWxkIGVpdGhlciBzdm4gKHByZS0zLjQuMSkgb3Igc3BoaW54LWJ1aWxkICgzLjQuMSBhbmQgbGF0ZXIpLgogCiBVc2FnZTogc2VlIFVTQUdFIHZhcmlhYmxlIGluIHRoZSBzY3JpcHQuCiAiIiIKQEAgLTE0OCwxNyArMTUwLDE5IEBACiAjICRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgLT4gbWluaW11bSBPUyBYIGxldmVsCiBERVBUQVJHRVQgPSAnMTAuMycKIAotdGFyZ2V0X2NjX21hcCA9IHsKK2RlZiBnZXREZXB0YXJnZXRUdXBsZSgpOgorICAgIHJldHVybiB0dXBsZShbaW50KG4pIGZvciBuIGluIERFUFRBUkdFVC5zcGxpdCgnLicpWzA6Ml1dKQorCitkZWYgZ2V0VGFyZ2V0Q29tcGlsZXJzKCk6CisgICAgdGFyZ2V0X2NjX21hcCA9IHsKICAgICAgICAgJzEwLjMnOiAoJ2djYy00LjAnLCAnZysrLTQuMCcpLAogICAgICAgICAnMTAuNCc6ICgnZ2NjLTQuMCcsICdnKystNC4wJyksCiAgICAgICAgICcxMC41JzogKCdnY2MtNC4yJywgJ2crKy00LjInKSwKICAgICAgICAgJzEwLjYnOiAoJ2djYy00LjInLCAnZysrLTQuMicpLAotICAgICAgICAnMTAuNyc6ICgnY2xhbmcnLCAnY2xhbmcrKycpLAotICAgICAgICAnMTAuOCc6ICgnY2xhbmcnLCAnY2xhbmcrKycpLAotICAgICAgICAnMTAuOSc6ICgnY2xhbmcnLCAnY2xhbmcrKycpLAotfQorICAgIH0KKyAgICByZXR1cm4gdGFyZ2V0X2NjX21hcC5nZXQoREVQVEFSR0VULCAoJ2NsYW5nJywgJ2NsYW5nKysnKSApCiAKLUNDLCBDWFggPSB0YXJnZXRfY2NfbWFwW0RFUFRBUkdFVF0KK0NDLCBDWFggPSBnZXRUYXJnZXRDb21waWxlcnMoKQogCiBQWVRIT05fMyA9IGdldFZlcnNpb25UdXBsZSgpID49ICgzLCAwKQogCkBAIC0xOTEsOSArMTk1LDEwIEBACiBkZWYgbGlicmFyeV9yZWNpcGVzKCk6CiAgICAgcmVzdWx0ID0gW10KIAotICAgIExUXzEwXzUgPSBib29sKERFUFRBUkdFVCA8ICcxMC41JykKKyAgICBMVF8xMF81ID0gYm9vbChnZXREZXB0YXJnZXRUdXBsZSgpIDwgKDEwLCA1KSkKIAotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKKyMgICBEaXNhYmxlIGZvciBub3cKKyAgICBpZiBGYWxzZTogICAjIGlmIChnZXREZXB0YXJnZXRUdXBsZSgpID4gKDEwLCA1KSkgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNSkpOgogICAgICAgICByZXN1bHQuZXh0ZW5kKFsKICAgICAgICAgICBkaWN0KAogICAgICAgICAgICAgICBuYW1lPSJUY2wgOC41LjE1IiwKQEAgLTIzNyw5ICsyNDIsOSBAQAogICAgIGlmIGdldFZlcnNpb25UdXBsZSgpID49ICgzLCAzKToKICAgICAgICAgcmVzdWx0LmV4dGVuZChbCiAgICAgICAgICAgZGljdCgKLSAgICAgICAgICAgICAgbmFtZT0iWFogNS4wLjMiLAotICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly90dWthYW5pLm9yZy94ei94ei01LjAuMy50YXIuZ3oiLAotICAgICAgICAgICAgICBjaGVja3N1bT0nZmVmZTUyZjllY2Q1MjFkZTJhOGNlMzhjMjFhMjc1NzQnLAorICAgICAgICAgICAgICBuYW1lPSJYWiA1LjAuNSIsCisgICAgICAgICAgICAgIHVybD0iaHR0cDovL3R1a2Fhbmkub3JnL3h6L3h6LTUuMC41LnRhci5neiIsCisgICAgICAgICAgICAgIGNoZWNrc3VtPScxOWQ5MjRlMDY2YjZmZmYwYmM5ZDE5ODFiNGU1MzE5NicsCiAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9wcmU9WwogICAgICAgICAgICAgICAgICAgICAnLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcnLAogICAgICAgICAgICAgICBdCkBAIC0yODIsOSArMjg3LDkgQEAKICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgKSwKICAgICAgICAgICBkaWN0KAotICAgICAgICAgICAgICBuYW1lPSJTUUxpdGUgMy43LjEzIiwKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvc3FsaXRlLWF1dG9jb25mLTMwNzEzMDAudGFyLmd6IiwKLSAgICAgICAgICAgICAgY2hlY2tzdW09J2M5N2RmNDAzZThhM2Q1YjY3YmI0MDhmY2Q2YWFiZDhlJywKKyAgICAgICAgICAgICAgbmFtZT0iU1FMaXRlIDMuOC4zLjEiLAorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy8yMDE0L3NxbGl0ZS1hdXRvY29uZi0zMDgwMzAxLnRhci5neiIsCisgICAgICAgICAgICAgIGNoZWNrc3VtPSc1MDlmZjk4ZDhkYzk3MjliNjE4YjdlOTY2MTIwNzljNicsCiAgICAgICAgICAgICAgIGV4dHJhX2NmbGFncz0oJy1PcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1EU1FMSVRFX0VOQUJMRV9GVFM0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURTUUxJVEVfRU5BQkxFX0ZUUzNfUEFSRU5USEVTSVMgJwpAQCAtMzAxLDcgKzMwNiw3IEBACiAgICAgICAgICAgKSwKICAgICAgICAgXSkKIAotICAgIGlmIERFUFRBUkdFVCA8ICcxMC41JzoKKyAgICBpZiBnZXREZXB0YXJnZXRUdXBsZSgpIDwgKDEwLCA1KToKICAgICAgICAgcmVzdWx0LmV4dGVuZChbCiAgICAgICAgICAgZGljdCgKICAgICAgICAgICAgICAgbmFtZT0iQnppcDIgMS4wLjYiLApAQCAtMzY0LDYgKzM2OSw4IEBACiAjIEluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgcGFja2FnZXMgaW5zaWRlIHRoZSAubXBrZy4KIGRlZiBwa2dfcmVjaXBlcygpOgogICAgIHVuc2VsZWN0ZWRfZm9yX3B5dGhvbjMgPSAoJ3NlbGVjdGVkJywgJ3Vuc2VsZWN0ZWQnKVtQWVRIT05fM10KKyAgICAjIHVuc2VsZWN0ZWQgaWYgMy4wIHRocm91Z2ggMy4zLCBzZWxlY3RlZCBvdGhlcndpc2UgKDIueCBvciA+PSAzLjQpCisgICAgdW5zZWxlY3RlZF9mb3JfbHRfcHl0aG9uMzQgPSAoJ3NlbGVjdGVkJywgJ3Vuc2VsZWN0ZWQnKVsoMywgMCkgPD0gZ2V0VmVyc2lvblR1cGxlKCkgPCAoMywgNCldCiAgICAgcmVzdWx0ID0gWwogICAgICAgICBkaWN0KAogICAgICAgICAgICAgbmFtZT0iUHl0aG9uRnJhbWV3b3JrIiwKQEAgLTQzMiwxMSArNDM5LDI4IEBACiAgICAgICAgICAgICB0b3BkaXI9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yayIsCiAgICAgICAgICAgICBzb3VyY2U9Ii9lbXB0eS1kaXIiLAogICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCi0gICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAorICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfbHRfcHl0aG9uMzQsCiAgICAgICAgICksCiAgICAgXQogCi0gICAgaWYgREVQVEFSR0VUIDwgJzEwLjQnIGFuZCBub3QgUFlUSE9OXzM6CisgICAgaWYgZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpOgorICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICBuYW1lPSJQeXRob25JbnN0YWxsUGlwIiwKKyAgICAgICAgICAgICAgICBsb25nX25hbWU9Ikluc3RhbGwgb3IgdXBncmFkZSBwaXAiLAorICAgICAgICAgICAgICAgIHJlYWRtZT0iIiJcCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFja2FnZSBpbnN0YWxscyAob3IgdXBncmFkZXMgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgIHBpcCwgYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICIiIiwKKyAgICAgICAgICAgICAgICBwb3N0ZmxpZ2h0PSJzY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwIiwKKyAgICAgICAgICAgICAgICB0b3BkaXI9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yayIsCisgICAgICAgICAgICAgICAgc291cmNlPSIvZW1wdHktZGlyIiwKKyAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICBzZWxlY3RlZD0nc2VsZWN0ZWQnLAorICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICBpZiBnZXREZXB0YXJnZXRUdXBsZSgpIDwgKDEwLCA0KSBhbmQgbm90IFBZVEhPTl8zOgogICAgICAgICByZXN1bHQuYXBwZW5kKAogICAgICAgICAgICAgZGljdCgKICAgICAgICAgICAgICAgICBuYW1lPSJQeXRob25TeXN0ZW1GaXhlcyIsCkBAIC00NTMsNiArNDc3LDcgQEAKICAgICAgICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAogICAgICAgICAgICAgKQogICAgICAgICApCisKICAgICByZXR1cm4gcmVzdWx0CiAKIGRlZiBmYXRhbChtc2cpOgpAQCAtNTY3LDIwICs1OTIsNiBAQAogICAgICAgICAgICAgICAgICUgZnJhbWV3b3Jrc1snVGsnXSwKICAgICAgICAgICAgIF0KIAotICAgICMgRm9yIDEwLjYrIGJ1aWxkcywgd2UgYnVpbGQgdHdvIHZlcnNpb25zIG9mIF90a2ludGVyOgotICAgICMgICAgLSB0aGUgdHJhZGl0aW9uYWwgdmVyc2lvbiAocmVuYW1lZCB0byBfdGtpbnRlcl9saWJyYXJ5LnNvKSBsaW5rZWQKLSAgICAjICAgICAgIHdpdGggL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNsLFRrfS5mcmFtZXdvcmsKLSAgICAjICAgIC0gdGhlIGRlZmF1bHQgdmVyc2lvbiBsaW5rZWQgd2l0aCBvdXIgYnVpbHRpbiBjb3BpZXMgb2YgVGNsIGFuZCBUawotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgRVhQRUNURURfU0hBUkVEX0xJQlNbJ190a2ludGVyX2xpYnJhcnkuc28nXSA9IFwKLSAgICAgICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlci5zbyddCi0gICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlci5zbyddID0gWwotICAgICAgICAgICAgICAgICIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJXMvbGliL2xpYnRjbCVzLmR5bGliIgotICAgICAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGZyYW1ld29ya3NbJ1RjbCddKSwKLSAgICAgICAgICAgICAgICAiL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyVzL2xpYi9saWJ0ayVzLmR5bGliIgotICAgICAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGZyYW1ld29ya3NbJ1RrJ10pLAotICAgICAgICAgICAgICAgIF0KLQogICAgICMgUmVtb3ZlIGluaGVyaXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggbWlnaHQgaW5mbHVlbmNlIGJ1aWxkCiAgICAgZW52aXJvbl92YXJfcHJlZml4ZXMgPSBbJ0NQQVRIJywgJ0NfSU5DTFVERV8nLCAnRFlMRF8nLCAnTEFORycsICdMQ18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMRF8nLCAnTElCUkFSWV8nLCAnUEFUSCcsICdQWVRIT04nXQpAQCAtNjAxLDcgKzYxMiwxMCBAQAogICAgICAgICBiYXNlX3BhdGggPSBiYXNlX3BhdGggKyAnOicgKyBPTERfREVWRUxPUEVSX1RPT0xTCiAgICAgb3MuZW52aXJvblsnUEFUSCddID0gYmFzZV9wYXRoCiAgICAgcHJpbnQoIlNldHRpbmcgZGVmYXVsdCBQQVRIOiAlcyIlKG9zLmVudmlyb25bJ1BBVEgnXSkpCi0KKyAgICAjIEVuc3VyZSB3cyBoYXZlIGFjY2VzcyB0byBoZyBhbmQgdG8gc3BoaW54LWJ1aWxkLgorICAgICMgWW91IG1heSBoYXZlIHRvIGNyZWF0ZSBsaW5rcyBpbiAvdXNyL2JpbiBmb3IgdGhlbS4KKyAgICBydW5Db21tYW5kKCdoZyAtLXZlcnNpb24nKQorICAgIHJ1bkNvbW1hbmQoJ3NwaGlueC1idWlsZCAtLXZlcnNpb24nKQogCiBkZWYgcGFyc2VPcHRpb25zKGFyZ3M9Tm9uZSk6CiAgICAgIiIiCkBAIC02NjYsNyArNjgwLDcgQEAKICAgICBTREtQQVRIPW9zLnBhdGguYWJzcGF0aChTREtQQVRIKQogICAgIERFUFNSQz1vcy5wYXRoLmFic3BhdGgoREVQU1JDKQogCi0gICAgQ0MsIENYWD10YXJnZXRfY2NfbWFwW0RFUFRBUkdFVF0KKyAgICBDQywgQ1hYID0gZ2V0VGFyZ2V0Q29tcGlsZXJzKCkKIAogICAgIHByaW50KCJTZXR0aW5nczoiKQogICAgIHByaW50KCIgKiBTb3VyY2UgZGlyZWN0b3J5OiIsIFNSQ0RJUikKQEAgLTg1NCw3ICs4NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJyAtYXJjaCAnLmpvaW4oYXJjaExpc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGxRdW90ZShTREtQQVRIKVsxOi0xXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsUXVvdGUoYmFzZWRpcilbMTotMV0sKSwKLSAgICAgICAgICAgICAgICAiTERGTEFHUz0tbW1hY29zeC12ZXJzaW9uLW1pbj0lcyAtc3lzbGlicm9vdCwlcyAtTCVzL3Vzci9sb2NhbC9saWIgLWFyY2ggJXMiJSgKKyAgICAgICAgICAgICAgICAiTERGTEFHUz0tbW1hY29zeC12ZXJzaW9uLW1pbj0lcyAtaXN5c3Jvb3QgJXMgLUwlcy91c3IvbG9jYWwvbGliIC1hcmNoICVzIiUoCiAgICAgICAgICAgICAgICAgICAgIERFUFRBUkdFVCwKICAgICAgICAgICAgICAgICAgICAgc2hlbGxRdW90ZShTREtQQVRIKVsxOi0xXSwKICAgICAgICAgICAgICAgICAgICAgc2hlbGxRdW90ZShiYXNlZGlyKVsxOi0xXSwKQEAgLTkxNCw4ICs5MjgsMTAgQEAKICAgICBkb2NkaXIgPSBvcy5wYXRoLmpvaW4ocm9vdERpciwgJ3B5ZG9jcycpCiAgICAgY3VyRGlyID0gb3MuZ2V0Y3dkKCkKICAgICBvcy5jaGRpcihidWlsZERpcikKLSAgICBydW5Db21tYW5kKCdtYWtlIHVwZGF0ZScpCi0gICAgcnVuQ29tbWFuZCgibWFrZSBodG1sIFBZVEhPTj0nJXMnIiAlIG9zLnBhdGguYWJzcGF0aChzeXMuZXhlY3V0YWJsZSkpCisgICAgIyBUaGUgRG9jIGJ1aWxkIGNoYW5nZWQgZm9yIDMuNCAodGVjaG5pY2FsbHksIGZvciAzLjQuMSkgYW5kIGZvciAyLjcuOQorICAgIHJ1bkNvbW1hbmQoJ21ha2UgY2xlYW4nKQorICAgICMgQXNzdW1lIHNwaGlueC1idWlsZCBpcyBvbiBvdXIgUEFUSCwgY2hlY2tlZCBpbiBjaGVja0Vudmlyb25tZW50CisgICAgcnVuQ29tbWFuZCgnbWFrZSBodG1sJykKICAgICBvcy5jaGRpcihjdXJEaXIpCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRvY2Rpcik6CiAgICAgICAgIG9zLm1rZGlyKGRvY2RpcikKQEAgLTk1NSwzNCArOTcxLDIyIEBACiAgICAgcnVuQ29tbWFuZCgiJXMgLUMgLS1lbmFibGUtZnJhbWV3b3JrIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz0lcyAiCiAgICAgICAgICAgICAgICAiLS13aXRoLXVuaXZlcnNhbC1hcmNocz0lcyAiCiAgICAgICAgICAgICAgICAiJXMgIgorICAgICAgICAgICAgICAgIiVzICIKICAgICAgICAgICAgICAgICJMREZMQUdTPSctZyAtTCVzL2xpYnJhcmllcy91c3IvbG9jYWwvbGliJyAiCiAgICAgICAgICAgICAgICAiQ0ZMQUdTPSctZyAtSSVzL2xpYnJhcmllcy91c3IvbG9jYWwvaW5jbHVkZScgMj4mMSIlKAogICAgICAgICBzaGVsbFF1b3RlKG9zLnBhdGguam9pbihTUkNESVIsICdjb25maWd1cmUnKSksIHNoZWxsUXVvdGUoU0RLUEFUSCksCiAgICAgICAgIFVOSVZFUlNBTEFSQ0hTLAogICAgICAgICAoJyAnLCAnLS13aXRoLWNvbXB1dGVkLWdvdG9zICcpW1BZVEhPTl8zXSwKKyAgICAgICAgKCcgJywgJy0td2l0aG91dC1lbnN1cmVwaXAgJylbZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpXSwKICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSwKICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSkpCiAKKyAgICBwcmludCgiUnVubmluZyBtYWtlIHRvdWNoIikKKyAgICBydW5Db21tYW5kKCJtYWtlIHRvdWNoIikKKwogICAgIHByaW50KCJSdW5uaW5nIG1ha2UiKQogICAgIHJ1bkNvbW1hbmQoIm1ha2UiKQogCi0gICAgIyBGb3IgZGVwbG95bWVudCB0YXJnZXRzIG9mIDEwLjYgYW5kIGhpZ2hlciwgd2UgYnVpbGQgb3VyIG93biB2ZXJzaW9uCi0gICAgIyBvZiBUY2wgYW5kIENvY29hIEFxdWEgVGsgbGlicyBiZWNhdXNlIHRoZSBBcHBsZS1zdXBwbGllZCBUayA4LjUgaXMKLSAgICAjIG91dC1vZi1kYXRlIGFuZCBoYXMgY3JpdGljYWwgYnVncy4gIFNhdmUgdGhlIF90a2ludGVyLnNvIHRoYXQgd2FzCi0gICAgIyBsaW5rZWQgd2l0aCAvTGlicmFyeS9GcmFtZXdvcmtzL3tUY2ssVGt9LmZyYW1ld29yayBhbmQgYnVpbGQKLSAgICAjIGFub3RoZXIgX3RraW50ZXIuc28gbGlua2VkIHdpdGggb3VyIGJ1aWx0aW4gVGNsIGFuZCBUayBsaWJzLgotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgcnVuQ29tbWFuZCgiZmluZCBidWlsZCAtbmFtZSAnX3RraW50ZXIuc28nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgLWV4ZWNkaXIgbXYgJ3t9JyBfdGtpbnRlcl9saWJyYXJ5LnNvIFw7IikKLSAgICAgICAgcHJpbnQoIlJ1bm5pbmcgbWFrZSB0byBidWlsZCBidWlsdGluIF90a2ludGVyIikKLSAgICAgICAgcnVuQ29tbWFuZCgibWFrZSBUQ0xUS19JTkNMVURFUz0nLUklcy9saWJyYXJpZXMvdXNyL2xvY2FsL2luY2x1ZGUnICIKLSAgICAgICAgICAgICAgICAiVENMVEtfTElCUz0nLUwlcy9saWJyYXJpZXMvdXNyL2xvY2FsL2xpYiAtbHRjbDguNSAtbHRrOC41JyIlKAotICAgICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSwKLSAgICAgICAgICAgIHNoZWxsUXVvdGUoV09SS0RJUilbMTotMV0pKQotICAgICAgICAjIG1ha2UgYSBjb3B5IHdoaWNoIHdpbGwgYmUgbW92ZWQgdG8gbGliLXRraW50ZXIgbGF0ZXIKLSAgICAgICAgcnVuQ29tbWFuZCgiZmluZCBidWlsZCAtbmFtZSAnX3RraW50ZXIuc28nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgLWV4ZWNkaXIgY3AgLXAgJ3t9JyBfdGtpbnRlcl9idWlsdGluLnNvIFw7IikKLQogICAgIHByaW50KCJSdW5uaW5nIG1ha2UgaW5zdGFsbCIpCiAgICAgcnVuQ29tbWFuZCgibWFrZSBpbnN0YWxsIERFU1RESVI9JXMiJSgKICAgICAgICAgc2hlbGxRdW90ZShyb290RGlyKSkpCkBAIC0xMDA3LDI3ICsxMDExLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQeXRob24uZnJhbWV3b3JrJywgJ1ZlcnNpb25zJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiwgJ2xpYicsICdweXRob24lcyclKHZlcnNpb24sKSkKIAotICAgICMgSWYgd2UgbWFkZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBfdGtpbnRlciwgbW92ZSB0aGVtIHRvCi0gICAgIyB0aGVpciBvd24gZGlyZWN0b3JpZXMgdW5kZXIgcHl0aG9uIGxpYi4gIFRoaXMgYWxsb3dzCi0gICAgIyB1c2VycyB0byBzZWxlY3Qgd2hpY2ggdG8gaW1wb3J0IGJ5IG1hbmlwdWxhdGluZyBzeXMucGF0aAotICAgICMgZGlyZWN0bHkgb3Igd2l0aCBQWVRIT05QQVRILgotCi0gICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgotICAgICAgICBUS0lOVEVSUyA9IFsnYnVpbHRpbicsICdsaWJyYXJ5J10KLSAgICAgICAgdGtpbnRlcl9tb3ZlcyA9IFsoJ190a2ludGVyXycgKyB0a24gKyAnLnNvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGhfdG9fbGliLCAnbGliLXRraW50ZXInLCB0a24pKQotICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0a24gaW4gVEtJTlRFUlNdCi0gICAgICAgICMgQ3JlYXRlIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcyB1bmRlciBsaWItdGtpbnRlci4KLSAgICAgICAgIyBUaGUgcGVybWlzc2lvbnMgYW5kIHVpZC9naWQgd2lsbCBiZSBmaXhlZCB1cCBuZXh0LgotICAgICAgICBmb3IgdGttIGluIHRraW50ZXJfbW92ZXM6Ci0gICAgICAgICAgICBvcy5tYWtlZGlycyh0a21bMV0pCi0KICAgICBwcmludCgiRml4IGZpbGUgbW9kZXMiKQogICAgIGZybURpciA9IG9zLnBhdGguam9pbihyb290RGlyLCAnTGlicmFyeScsICdGcmFtZXdvcmtzJywgJ1B5dGhvbi5mcmFtZXdvcmsnKQogICAgIGdpZCA9IGdycC5nZXRncm5hbSgnYWRtaW4nKS5ncl9naWQKIAogICAgIHNoYXJlZF9saWJfZXJyb3IgPSBGYWxzZQotICAgIG1vdmVzX2xpc3QgPSBbXQogICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoZnJtRGlyKToKICAgICAgICAgZm9yIGRuIGluIGRpcm5hbWVzOgogICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGRpcnBhdGgsIGRuKSwgU1RBVF8wbzc3NSkKQEAgLTEwNTMsMjUgKzEwNDEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzbCwgcCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfbGliX2Vycm9yID0gVHJ1ZQogCi0gICAgICAgICAgICAjIElmIHRoaXMgaXMgYSBfdGtpbnRlciB2YXJpYW50LCBtb3ZlIGl0IHRvIGl0cyBvd24gZGlyZWN0b3J5Ci0gICAgICAgICAgICAjIG5vdyB0aGF0IHdlIGhhdmUgZml4ZWQgaXRzIHBlcm1pc3Npb25zIGFuZCBjaGVja2VkIHRoYXQgaXQKLSAgICAgICAgICAgICMgd2FzIGxpbmtlZCBwcm9wZXJseS4gIFRoZSBkaXJlY3Rvcnkgd2FzIGNyZWF0ZWQgZWFybGllci4KLSAgICAgICAgICAgICMgVGhlIGZpbGVzIGFyZSBtb3ZlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gd2Fsa2VkCi0gICAgICAgICAgICAjIHNpbmNlIHRoZSBzaGFyZWQgbGlicmFyeSBjaGVja2luZyBkZXBlbmRzIG9uIHRoZSBmaWxlcwotICAgICAgICAgICAgIyBoYXZpbmcgdW5pcXVlIG5hbWVzLgotICAgICAgICAgICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgotICAgICAgICAgICAgICAgIGZvciB0a20gaW4gdGtpbnRlcl9tb3ZlczoKLSAgICAgICAgICAgICAgICAgICAgaWYgZm4gPT0gdGttWzBdOgotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZXNfbGlzdC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAsIG9zLnBhdGguam9pbih0a21bMV0sICdfdGtpbnRlci5zbycpKSkKLQogICAgIGlmIHNoYXJlZF9saWJfZXJyb3I6CiAgICAgICAgIGZhdGFsKCJVbmV4cGVjdGVkIHNoYXJlZCBsaWJyYXJ5IGVycm9ycy4iKQogCi0gICAgIyBOb3cgZG8gdGhlIG1vdmVzLgotICAgIGZvciBtbCBpbiBtb3Zlc19saXN0OgotICAgICAgICBzaHV0aWwubW92ZShtbFswXSwgbWxbMV0pCi0KICAgICBpZiBQWVRIT05fMzoKICAgICAgICAgTERWRVJTSU9OPU5vbmUKICAgICAgICAgVkVSU0lPTj1Ob25lCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKaW5kZXggMjEyZDk2My4uZTA2MWEwNiAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dApAQCAtMjgsNiArMjgsMzYgQEAKIGZvciBjdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMgb2YKIFRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgb2YgTWFjIE9TIFguCiAKKyAgICAgICAgICAgICAgKipORVcqIEFzIG9mIFB5dGhvbiAzLjQuMGIxOgorCitOZXcgSW5zdGFsbGF0aW9uIE9wdGlvbnMgYW5kIERlZmF1bHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBQeXRob24gaW5zdGFsbGVyIG5vdyBpbmNsdWRlcyBhbiBvcHRpb24gdG8gYXV0b21hdGljYWxseSBpbnN0YWxsCitvciB1cGdyYWRlIHBpcCwgYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIG5vIEludGVybmV0IGFjY2VzcyBpcyByZXF1aXJlZC4KK0lmIHlvdSBkbyBub3Qgd2FudCB0aGUgaW5zdGFsbGVyIHRvIGRvIHRoaXMsIHNlbGVjdCB0aGUgIkN1c3RvbWl6ZSIKK29wdGlvbiBhdCB0aGUgIkluc3RhbGxhdGlvbiBUeXBlIiBzdGVwIGFuZCB1bmNoZWNrIHRoZSAiSW5zdGFsbCBvcgordWdwcmFkZSBwaXAiIG9wdGlvbi4KKworVG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHNjcmlwdHMgaW5zdGFsbGVkIGJ5IHRoaXJkLXBhcnR5IFB5dGhvbgorcGFja2FnZXMsIHdpdGggcGlwIG9yIGJ5IG90aGVyIG1lYW5zLCB0aGUgIlNoZWxsIHByb2ZpbGUgdXBkYXRlciIKK29wdGlvbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyBoYXMgYmVlbiB0aGUgY2FzZSB3aXRoIFB5dGhvbgorMi43LnggaW5zdGFsbGVycy4gWW91IGNhbiBhbHNvIHR1cm4gdGhpcyBvcHRpb24gb2ZmIGJ5IHNlbGVjdGluZworIkN1c3RvbWl6ZSIgYW5kIHVuY2hlY2tpbmcgdGhlICJTaGVsbCBwcm9maWxlIHVwZGF0ZXIiIG9wdGlvbi4gWW91CitjYW4gYWxzbyB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIGxhdGVyIGJ5IGxhdW5jaGluZyB0aGUgIlVwZGF0ZQorU2hlbGwgUHJvZmlsZSIgY29tbWFuZCBmb3VuZCBpbiB0aGUgL0FwcGxpY2F0aW9ucy9QeXRob24gJFZFUlNJT04KK2ZvbGRlci4gIFlvdSBtYXkgbmVlZCB0byBzdGFydCBhIG5ldyB0ZXJtaW5hbCB3aW5kb3cgZm9yIHRoZQorY2hhbmdlcyB0byB0YWtlIGVmZmVjdC4KKworUHl0aG9uLm9yZyBQeXRob24gJFZFUlNJT04gYW5kIDIuNy54IHZlcnNpb25zIGNhbiBib3RoIGJlIGluc3RhbGxlZCBhbmQKK3dpbGwgbm90IGNvbmZsaWN0LiBDb21tYW5kIG5hbWVzIGZvciBQeXRob24gMyBjb250YWluIGEgMyBpbiB0aGVtLAorcHl0aG9uMyAob3IgcHl0aG9uJFZFUlNJT04pLCBpZGxlMyAob3IgaWRsZSRWRVJTSU9OKSwgcGlwMyAob3IgcGlwJFZFUlNJT04pLCBldGMuCitQeXRob24gMi43IGNvbW1hbmQgbmFtZXMgY29udGFpbiBhIDIgb3Igbm8gZGlnaXQ6IHB5dGhvbjIgKG9yCitweXRob24yLjcgb3IgcHl0aG9uKSwgaWRsZTIgKG9yIGlkbGUyLjcgb3IgaWRsZSksIGV0Yy4gSWYgeW91IHdhbnQgdG8KK3VzZSBwaXAgd2l0aCBQeXRob24gMi43LngsIHlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwgYQorc2VwYXJhdGUgY29weSBvZiBpdCBmcm9tIHRoZSBQeXRob24gUGFja2FnZSBJbmRleAorKGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkpLgogCiBVc2luZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIG9uIE9TIFgKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKaW5kZXggMjM5ZDc2ZS4uODg2ZWJmZSAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgorKysgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCkBAIC0xLDUgKzEsNSBAQAoge1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMTg3XGNvY29hc3VicnRmNDAwCi1cY29jb2FzY3JlZW5mb250czF7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7fQorXGNvY29hc2NyZWVuZm9udHMxe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO1xmMVxmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyTmV3UFNNVDt9CiB7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CiBccGFwZXJ3MTE5MDVccGFwZXJoMTY4MzdcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzk2NDBcdmlld2gxMDYyMFx2aWV3a2luZDAKIFxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDAKQEAgLTE2LDEzICsxNiwxNyBAQAogXGIgSURMRQogXGIwICBhbmQgYSBzZXQgb2YgcHJlLWJ1aWx0IGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvIFB5dGhvbiBwcm9ncmFtcy5cCiBcCi1TZWUgdGhlIFJlYWRNZSBmaWxlIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXAotXAogCi1cYiBOT1RFOiAKLVxiMCBUaGlzIHBhY2thZ2Ugd2lsbCBub3QgdXBkYXRlIHlvdXIgc2hlbGwgcHJvZmlsZSBieSBkZWZhdWx0LiAgRG91YmxlLWNsaWNrIAotXGIgVXBkYXRlIFNoZWxsIFByb2ZpbGUKLVxiMCAgYXQgYW55IHRpbWUgdG8gbWFrZSAkRlVMTF9WRVJTSU9OIHRoZSBkZWZhdWx0IFB5dGhvbiAzIHZlcnNpb24uICBUaGlzIHZlcnNpb24gY2FuIGNvLWV4aXN0IHdpdGggb3RoZXIgaW5zdGFsbGVkIHZlcnNpb25zIG9mIFB5dGhvbiAzIGFuZCBQeXRob24gMi5cCitcYiBORVcgZm9yIFB5dGhvbiAzLjQ6IAorXGIwIFRoaXMgcGFja2FnZSBub3cgdXBkYXRlcyB5b3VyIHNoZWxsIHByb2ZpbGUgYnkgZGVmYXVsdCB0byBtYWtlICRGVUxMX1ZFUlNJT04gdGhlIGRlZmF1bHQgUHl0aG9uIDMgdmVyc2lvbi4gIFRoaXMgdmVyc2lvbiBjYW4gY28tZXhpc3Qgd2l0aCBvdGhlciBpbnN0YWxsZWQgdmVyc2lvbnMgb2YgUHl0aG9uIDMgYW5kIFB5dGhvbiAyLiAgVGhpcyBwYWNrYWdlIGFsc28gaW5zdGFsbHMgYSB2ZXJzaW9uIG9mIAorXGYxIHBpcAorXGYwICwgdGhlIHJlY29tbWVuZGVkIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4gICBUeXBlXAorXAorCQorXGYxIHBpcDMuNCAtLWhlbHAKK1xmMCBcCitcCitmb3IgYW4gb3ZlcnZpZXcuICBTZWUgdGhlIFJlYWRNZSBmaWxlIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXAogXAogCiBcYiBJTVBPUlRBTlQ6CmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcCBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiOTdjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcApAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKyMKKyMgSW5zdGFsbC91cGdyYWRlIHBpcC4KKyMKKworUFlWRVI9IkBQWVZFUkAiCitQWU1BSk9SPSIzIgorRldLPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJHtQWVZFUn0iCitSRUxGV0tCSU49Ii4uLy4uLy4uJHtGV0t9L2JpbiIKKwordW1hc2sgMDIyCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtbSBlbnN1cmVwaXAgLS11cGdyYWRlCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyAgICAtZiAteCBiYWRzeW50YXggXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgLU8gXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyAgICAtZiAteCBiYWRzeW50YXggXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiCisKK2NoZ3JwIC1SIGFkbWluICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiICIke0ZXS30vYmluIgorY2htb2QgLVIgZyt3ICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiICIke0ZXS30vYmluIgorCisjIFdlIGRvIG5vdCBrbm93IGlmIHRoZSB1c2VyIHNlbGVjdGVkIHRoZSBQeXRob24gY29tbWFuZC1saW5lIHRvb2xzCisjIHBhY2thZ2UgdGhhdCBpbnN0YWxscyBzeW1saW5rcyB0byAvdXNyL2xvY2FsL2Jpbi4gIFNvIHdlIGFzc3VtZQorIyB0aGF0IHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgcGFja2FnZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgb3Igd2FzCisjIG5vdCBzZWxlY3RlZCBhbmQgd2Ugd2lsbCBvbmx5IGluc3RhbGwgL3Vzci9sb2NhbC9iaW4gc3ltbGlua3MgZm9yCisjIHBpcCBldCBhbCBpZiB0aGVyZSBhcmUgL3Vzci9sb2NhbC9iaW4vcHl0aG9uKiBzeW1saW5rcyB0byBvdXIKKyMgZnJhbWV3b3JrIGJpbiBkaXJlY3RvcnkuCisKK2lmIFsgLWQgL3Vzci9sb2NhbC9iaW4gXSA7IHRoZW4KKyAgICAoCisgICAgICAgIGNkIC91c3IvbG9jYWwvYmluCisgICAgICAgICMgQ3JlYXRlIHBpcHgueSBhbmQgZWFzeV9pbnN0YWxsLXgueSBsaW5rcyBpZiAvdXNyL2xvY2FsL2Jpbi9weXRob254LnkKKyAgICAgICAgIyAgIGlzIGxpbmtlZCB0byB0aGlzIGZyYW1ld29yayB2ZXJzaW9uCisgICAgICAgIGlmIFsgIiQocmVhZGxpbmsgLW4gLi9weXRob24ke1BZVkVSfSkiID0gIiR7UkVMRldLQklOfS9weXRob24ke1BZVkVSfSIgXSA7IHRoZW4KKyAgICAgICAgICAgIGZvciBmbiBpbiAicGlwJHtQWVZFUn0iICJlYXN5X2luc3RhbGwtJHtQWVZFUn0iIDsKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgaWYgWyAtZSAiJHtSRUxGV0tCSU59LyR7Zm59IiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBybSAtZiAuLyR7Zm59CisgICAgICAgICAgICAgICAgICAgIGxuIC1zICIke1JFTEZXS0JJTn0vJHtmbn0iICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBjaGdycCAtaCBhZG1pbiAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICAgICAgY2htb2QgLWggZyt3ICIuLyR7Zm59IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgICMgQ3JlYXRlIHBpcHggbGluayBpZiAvdXNyL2xvY2FsL2Jpbi9weXRob254IGlzIGxpbmtlZCB0byB0aGlzIHZlcnNpb24KKyAgICAgICAgaWYgWyAiJChyZWFkbGluayAtbiAuL3B5dGhvbiR7UFlNQUpPUn0pIiA9ICIke1JFTEZXS0JJTn0vcHl0aG9uJHtQWU1BSk9SfSIgXSA7IHRoZW4KKyAgICAgICAgICAgIGZvciBmbiBpbiAicGlwJHtQWU1BSk9SfSIgOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBpZiBbIC1lICIke1JFTEZXS0JJTn0vJHtmbn0iIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1mIC4vJHtmbn0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXMgIiR7UkVMRldLQklOfS8ke2ZufSIgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgICAgIGNoZ3JwIC1oIGFkbWluICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBjaG1vZCAtaCBnK3cgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICApCitmaQorZXhpdCAwCmRpZmYgLS1naXQgYS9NYWMvTWFrZWZpbGUuaW4gYi9NYWMvTWFrZWZpbGUuaW4KaW5kZXggNWNiNjY0ZC4uMDNlYzczOCAxMDA2NDQKLS0tIGEvTWFjL01ha2VmaWxlLmluCisrKyBiL01hYy9NYWtlZmlsZS5pbgpAQCAtMyw5ICszLDEzIEBACiAjIGNvbW1hbmRsaW5lIGluIHRoYXQgY2FzZS4KIAogVkVSU0lPTj1AVkVSU0lPTkAKK0FCSUZMQUdTPUBBQklGTEFHU0AKK0xEVkVSU0lPTj1ATERWRVJTSU9OQAorRU5TVVJFUElQPUBFTlNVUkVQSVBACiBidWlsZGRpciA9IC4uCiBzcmNkaXI9QHNyY2RpckAKIHByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAogTElCREVTVD0kKHByZWZpeCkvbGliL3B5dGhvbiQoVkVSU0lPTikKIFJVTlNIQVJFRD1AUlVOU0hBUkVEQAogQlVJTERFWEU9QEJVSUxERVhFRVhUQApAQCAtMjMsNyArMjcsNyBAQAogCiAKICMgVGhlc2UgYXJlIG5vcm1hbGx5IGdsaW1wc2VkIGZyb20gdGhlIHByZXZpb3VzIHNldAotYmluZGlyPSQocHJlZml4KS9iaW4KK0JJTkRJUj0JCUBiaW5kaXJACiBQWVRIT05BUFBTRElSPUBGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWEAvJChQWVRIT05GUkFNRVdPUkspICQoVkVSU0lPTikKIEFQUElOU1RBTExESVI9JChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwCiAKQEAgLTQ2LDE5ICs1MCw3IEBACiBBUFBTVUJESVJTPU1hY09TIFJlc291cmNlcwogY29tcGlsZWFsbD0kKHNyY2RpcikvLi4vTGliL2NvbXBpbGVhbGwucHkKIAotaW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfcHl0aG9udyBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIGluc3RhbGxfSURMRQotCi1pbnN0YWxsX3B5dGhvbnc6IHB5dGhvbncKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pIgotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udyAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKSIKLQlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uMyIKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTikgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnczIgotaWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQotCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udwotCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLTMyIHB5dGhvbncKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnczLTMyIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zLTMyIgotZW5kaWYKK2luc3RhbGxhcHBzOiBpbnN0YWxsX1B5dGhvbiBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIGluc3RhbGxfSURMRQogCiAjCiAjIEluc3RhbGwgdW5peCB0b29scyBpbiAvdXNyL2xvY2FsL2Jpbi4gVGhlc2UgYXJlIGp1c3QgYWxpYXNlcyBmb3IgdGhlIApAQCAtNjgsMjEgKzYwLDQ5IEBACiAJaWYgWyAhIC1kICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgXTsgdGhlbiAgXAogCQkkKElOU1RBTEwpIC1kIC1tICQoRElSTU9ERSkgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiA7XAogCWZpCi0JZm9yIGZuIGluIHB5dGhvbjMgcHl0aG9udzMgaWRsZTMgcHlkb2MzIHB5dGhvbjMtY29uZmlnIFwKLQkJICBweXRob24kKFZFUlNJT04pIHB5dGhvbnckKFZFUlNJT04pIGlkbGUkKFZFUlNJT04pIFwKLQkJICBweWRvYyQoVkVSU0lPTikgcHl0aG9uJChWRVJTSU9OKS1jb25maWcgMnRvMyBcCi0JCSAgMnRvMy0kKFZFUlNJT04pIHB5dmVudiBweXZlbnYtJChWRVJTSU9OKSA7XAorCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCWZvciBmbiBpbiBcCisJCQkydG8zIFwKKwkJCWlkbGUzIFwKKwkJCXB5ZG9jMyBcCisJCQlweXRob24zIFwKKwkJCXB5dGhvbjMtY29uZmlnIFwKKwkJCXB5dmVudiBcCisJCQk7IFwKIAlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCisJCXJtIC1mICQke2ZufSA7IFwKKwkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKIAlkb25lCi1pZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCi0JZm9yIGZuIGluIHB5dGhvbjMtMzIgcHl0aG9udzMtMzIgXAotCQkgIHB5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udyQoVkVSU0lPTiktMzIgO1wKLQlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCi0JZG9uZQotZW5kaWYKLQorCS1pZiB0ZXN0ICJ4JChWRVJTSU9OKSIgIT0gIngkKExEVkVSU0lPTikiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChWRVJTSU9OKS1jb25maWcgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uMy0zMiBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlwaXAzIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKIAogIwogIyBMaWtlIGluc3RhbGx1bml4dG9vbHMsIGJ1dCBvbmx5IGluc3RhbGwgbGlua3MgdG8gdGhlIHZlcnNpb25lZCBiaW5hcmllcy4KQEAgLTkxLDIwICsxMTEsNTUgQEAKIAlpZiBbICEgLWQgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiBdOyB0aGVuICBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIDtcCiAJZmkKLQlmb3IgZm4gaW4gcHl0aG9uJChWRVJTSU9OKSBweXRob253JChWRVJTSU9OKSBpZGxlJChWRVJTSU9OKSBcCi0JCSAgcHlkb2MkKFZFUlNJT04pIHB5dGhvbiQoVkVSU0lPTiktY29uZmlnIDJ0bzMtJChWRVJTSU9OKSBweXZlbnYtJChWRVJTSU9OKSA7XAorCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCWZvciBmbiBpbiBcCisJCQkydG8zLSQoVkVSU0lPTikgXAorCQkJaWRsZSQoVkVSU0lPTikgXAorCQkJcHlkb2MkKFZFUlNJT04pIFwKKwkJCXB5dGhvbiQoVkVSU0lPTikgXAorCQkJcHl0aG9uJChMRFZFUlNJT04pLWNvbmZpZyBcCisJCQlweXZlbnYtJChWRVJTSU9OKSBcCisJCQk7IFwKIAlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCisJCXJtIC1mICQke2ZufSA7XAorCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAogCWRvbmUKLWlmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKLQlmb3IgZm4gaW4gcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253JChWRVJTSU9OKS0zMiA7XAotCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKLQlkb25lCi1lbmRpZgorCS1pZiB0ZXN0ICJ4JChWRVJTSU9OKSIgIT0gIngkKExEVkVSU0lPTikiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChMRFZFUlNJT04pIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKKwktaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IjsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXB5dGhvbiQoVkVSU0lPTiktMzIgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChFTlNVUkVQSVApIiAhPSAieG5vIiAgOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJZWFzeV9pbnN0YWxsLSQoVkVSU0lPTikgXAorCQkJCXBpcCQoVkVSU0lPTikgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQogCiBweXRob253OiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCi0JJChDQykgJChMREZMQUdTKSAtRFBZVEhPTkZSQU1FV09SSz0nIiQoUFlUSE9ORlJBTUVXT1JLKSInIC1vICRAICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgLUkuLiAtSSQoc3JjZGlyKS8uLi9JbmNsdWRlIC4uLyQoUFlUSE9ORlJBTUVXT1JLKS5mcmFtZXdvcmsvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSykKKwkkKENDKSAkKExERkxBR1MpIC1EUFlUSE9ORlJBTUVXT1JLPSciJChQWVRIT05GUkFNRVdPUkspIicgLW8gJEAgXAorCQkkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIC1JLi4gLUkkKHNyY2RpcikvLi4vSW5jbHVkZSBcCisJCS4uLyQoUFlUSE9ORlJBTUVXT1JLKS5mcmFtZXdvcmsvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSykKIAogaW5zdGFsbF9QeXRob25MYXVuY2hlcjoKIAljZCBQeXRob25MYXVuY2hlciAmJiBtYWtlIGluc3RhbGwgREVTVERJUj0kKERFU1RESVIpCmRpZmYgLS1naXQgYS9NYWMvUkVBRE1FIGIvTWFjL1JFQURNRQppbmRleCA4ZDRlYjNiLi4wYTMxM2QxIDEwMDY0NAotLS0gYS9NYWMvUkVBRE1FCisrKyBiL01hYy9SRUFETUUKQEAgLTcsMTEgKzcsMTQgQEAKICAgICBSb25hbGQgT3Vzc29yZW4gKDIwMTAtMDQpLAogICAgIE5lZCBEZWlseSAoMjAxMi0wNikKIAotOlZlcnNpb246IDMuMy4wCis6VmVyc2lvbjogMy40LjAKIAogVGhpcyBkb2N1bWVudCBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHNvbWUgTWFjIE9TIFggc3BlY2lmaWMgZmVhdHVyZXMgaW4KIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgogCitPUyBYIHNwZWNpZmljIGFyZ3VtZW50cyB0byBjb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAqIGBgLS1lbmFibGUtZnJhbWV3b3JrWz1ESVJdYGAKIAogICBJZiB0aGlzIGFyZ3VtZW50IGlzIHNwZWNpZmllZCB0aGUgYnVpbGQgd2lsbCBjcmVhdGUgYSBQeXRob24uZnJhbWV3b3JrIHJhdGhlcgpAQCAtMTA2LDYgKzEwOSw4IEBACiAKICAgKiBgYGludGVsYGA6CSAgYGBpMzg2YGAsIGBgeDg2XzY0YGAKIAorICAqIGBgaW50ZWwtMzJgYDogYGBpMzg2YGAKKwogICAqIGBgMzItYml0YGA6ICAgYGBwcGNgYCwgYGBpMzg2YGAKIAogICAqIGBgMy13YXlgYDoJICBgYGkzODZgYCwgYGB4ODZfNjRgYCwgYGBwcGNgYApAQCAtMTE5LDcgKzEyNCw3IEBACiBvbmx5IGJlIGJ1aWx0IHdpdGggYW4gMTAuNSBTREsgYmVjYXVzZSBgYHBwYzY0YGAgc3VwcG9ydCB3YXMgb25seSBpbmNsdWRlZCB3aXRoCiBPUyBYIDEwLjUuICBBbHRob3VnaCBsZWdhY3kgYGBwcGNgYCBzdXBwb3J0IHdhcyBpbmNsdWRlZCB3aXRoIFhjb2RlIDMgb24gT1MgWAogMTAuNiwgaXQgd2FzIHJlbW92ZWQgaW4gWGNvZGUgNCwgdmVyc2lvbnMgb2Ygd2hpY2ggd2VyZSByZWxlYXNlZCBvbiBPUyBYIDEwLjYKLWFuZCB3aGljaCBpcyB0aGUgY3VycmVudCBzdGFuZGFyZCBmb3IgT1MgWCAxMC43IGFuZCAxMC44LiAgVG8gc3VtbWFyaXplLCB0aGUKK2FuZCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgZm9yIE9TIFggMTAuNy4gIFRvIHN1bW1hcml6ZSwgdGhlCiBmb2xsb3dpbmcgY29tYmluYXRpb25zIG9mIFNES3MgYW5kIHVuaXZlcnNhbC1hcmNocyBmbGF2b3JzIGFyZSBhdmFpbGFibGU6CiAKICAgKiAxMC40dSBTREsgd2l0aCBYY29kZSAyIHN1cHBvcnRzIGBgMzItYml0YGAgb25seQpAQCAtMTMyLDcgKzEzNyw5IEBACiAKICAgKiAxMC43IGFuZCAxMC44IFNES3Mgd2l0aCBYY29kZSA0IHN1cHBvcnQgYGBpbnRlbGBgIG9ubHkKIAotVGhlIG1ha2VmaWxlIGZvciBhIGZyYW1ld29yayBidWlsZCB3aWxsIGFsc28gaW5zdGFsbCBgYHB5dGhvbjMuMy0zMmBgCisgICogMTAuOCBhbmQgMTAuOSBTREtzIHdpdGggWGNvZGUgNSBzdXBwb3J0IGBgaW50ZWxgYCBvbmx5CisKK1RoZSBtYWtlZmlsZSBmb3IgYSBmcmFtZXdvcmsgYnVpbGQgd2lsbCBhbHNvIGluc3RhbGwgYGBweXRob24zLjQtMzJgYAogYmluYXJpZXMgd2hlbiB0aGUgdW5pdmVyc2FsIGFyY2hpdGVjdHVyZSBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgMzItYml0CiBhcmNoaXRlY3R1cmUgKHRoYXQgaXMsIGZvciBhbGwgZmxhdm9ycyBidXQgYGA2NC1iaXRgYCkuCiAKQEAgLTE1NiwxMCArMTYzLDkgQEAKIG5vdCBhdXRvbWF0aWNhbGx5IGNhcnJ5IHRocm91Z2ggdG8gc3VicHJvY2Vzc2VzIGxhdW5jaGVkIGJ5IHByb2dyYW1zIGFuZCB0ZXN0cwogdW5kZXIgdGhhdCBQeXRob24uICBJZiB5b3Ugd2FudCB0byBlbnN1cmUgdGhhdCBQeXRob24gaW50ZXJwcmV0ZXJzIGxhdW5jaGVkIGluCiBzdWJwcm9jZXNzZXMgYWxzbyBydW4gaW4gMzItYml0LW1vZGUgaWYgdGhlIG1haW4gaW50ZXJwcmV0ZXIgZG9lcywgdXNlCi1hIGBgcHl0aG9uMy4zLTMyYGAgYmluYXJ5IGFuZCB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmV4ZWN1dGFibGVgYCBhcyB0aGUKK2EgYGBweXRob24zLjQtMzJgYCBiaW5hcnkgYW5kIHVzZSB0aGUgdmFsdWUgb2YgYGBzeXMuZXhlY3V0YWJsZWBgIGFzIHRoZQogYGBzdWJwcm9jZXNzYGAgYGBQb3BlbmBgIGV4ZWN1dGFibGUgdmFsdWUuCiAKLQogQnVpbGRpbmcgYW5kIHVzaW5nIGEgZnJhbWV3b3JrLWJhc2VkIFB5dGhvbiBvbiBNYWMgT1MgWC4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTE2OSwxNCArMTc1LDE0IEBACiAKIFRoZSBtYWluIHJlYXNvbiBpcyBiZWNhdXNlIHlvdSB3YW50IHRvIGNyZWF0ZSBHVUkgcHJvZ3JhbXMgaW4gUHl0aG9uLiBXaXRoIHRoZQogZXhjZXB0aW9uIG9mIFgxMS9YRGFyd2luLWJhc2VkIEdVSSB0b29sa2l0cyBhbGwgR1VJIHByb2dyYW1zIG5lZWQgdG8gYmUgcnVuIAotZnJvbSBhIE1hYyBPU1ggYXBwbGljYXRpb24gYnVuZGxlICgiLmFwcCIpLgorZnJvbSBhIE1hYyBPUyBYIGFwcGxpY2F0aW9uIGJ1bmRsZSAoIi5hcHAiKS4KIAogV2hpbGUgaXQgaXMgdGVjaG5pY2FsbHkgcG9zc2libGUgdG8gY3JlYXRlIGEgLmFwcCB3aXRob3V0IHVzaW5nIGZyYW1ld29ya3MgeW91CiB3aWxsIGhhdmUgdG8gZG8gdGhlIHdvcmsgeW91cnNlbGYgaWYgeW91IHJlYWxseSB3YW50IHRoaXMuCiAKIEEgc2Vjb25kIHJlYXNvbiBmb3IgdXNpbmcgZnJhbWV3b3JrcyBpcyB0aGF0IHRoZXkgcHV0IFB5dGhvbi1yZWxhdGVkIGl0ZW1zIGluCiBvbmx5IHR3byBwbGFjZXM6ICIvTGlicmFyeS9GcmFtZXdvcmsvUHl0aG9uLmZyYW1ld29yayIgYW5kIAotIi9BcHBsaWNhdGlvbnMvUHl0aG9uIDxWRVJTSU9OPiIgd2hlcmUgYGA8VkVSU0lPTj5gYCBjYW4gYmUgZS5nLiAiMy4zIiwKKyIvQXBwbGljYXRpb25zL1B5dGhvbiA8VkVSU0lPTj4iIHdoZXJlIGBgPFZFUlNJT04+YGAgY2FuIGJlIGUuZy4gIjMuNCIsCiAiMi43IiwgZXRjLiAgVGhpcyBzaW1wbGlmaWVzIG1hdHRlcnMgZm9yIHVzZXJzIGluc3RhbGxpbmcKIFB5dGhvbiBmcm9tIGEgYmluYXJ5IGRpc3RyaWJ1dGlvbiBpZiB0aGV5IHdhbnQgdG8gZ2V0IHJpZCBvZiBpdCBhZ2Fpbi4gTW9yZW92ZXIsCiBkdWUgdG8gdGhlIHdheSBmcmFtZXdvcmtzIHdvcmssIGEgdXNlciB3aXRob3V0IGFkbWluIHByaXZpbGVnZXMgY2FuIGluc3RhbGwgYQpAQCAtMTk0LDcgKzIwMCw3IEBACiAzLiBEbyBJIG5lZWQgZXh0cmEgcGFja2FnZXM/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVllcywgcHJvYmFibHkuICBJZiB5b3Ugd2FudCBUa2ludGVyIHN1cHBvcnQgeW91IG5lZWQgdG8gZ2V0IHRoZSBPU1ggQXF1YVRrIAorWWVzLCBwcm9iYWJseS4gIElmIHlvdSB3YW50IFRraW50ZXIgc3VwcG9ydCB5b3UgbmVlZCB0byBnZXQgdGhlIE9TIFggQXF1YVRrCiBkaXN0cmlidXRpb24sIHRoaXMgaXMgaW5zdGFsbGVkIGJ5IGRlZmF1bHQgb24gTWFjIE9TIFggMTAuNCBvciBsYXRlci4gIEJlCiBhd2FyZSwgdGhvdWdoLCB0aGF0IHRoZSBDb2NvYS1iYXNlZCBBcXVhVGsncyBzdXBwbGllZCBzdGFydGluZyB3aXRoIE9TIFgKIDEwLjYgaGF2ZSBwcm92ZW4gdG8gYmUgdW5zdGFibGUuICBJZiBwb3NzaWJsZSwgeW91IHNob3VsZCBjb25zaWRlcgpAQCAtMjEwLDkgKzIxNiw5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgTWFrZWZpbGUgdGhhdCB3aWxsIGNyZWF0ZSBhIGNvdXBsZSBvZiBweXRob24tcmVsYXRlZAotYXBwbGljYXRpb25zIChmdWxsLWJsb3duIE9TWCAuYXBwIGFwcGxpY2F0aW9ucywgdGhhdCBpcykgaW4KK2FwcGxpY2F0aW9ucyAoZnVsbC1ibG93biBPUyBYIC5hcHAgYXBwbGljYXRpb25zLCB0aGF0IGlzKSBpbgogIi9BcHBsaWNhdGlvbnMvUHl0aG9uIDxWRVJTSU9OPiIsIGFuZCBhIGhpZGRlbiBoZWxwZXIgYXBwbGljYXRpb24gUHl0aG9uLmFwcAotaW5zaWRlIHRoZSBQeXRob24uZnJhbWV3b3JrLCBhbmQgdW5peCB0b29scyAicHl0aG9uIiBhbmQgInB5dGhvbnciIGludG8KK2luc2lkZSB0aGUgUHl0aG9uLmZyYW1ld29yaywgYW5kIHVuaXggdG9vbHMgaW5jbHVkaW5nICJweXRob24iIGludG8KIC91c3IvbG9jYWwvYmluLiAgSW4gYWRkaXRpb24gaXQgaGFzIGEgdGFyZ2V0ICJpbnN0YWxsbWFjc3VidHJlZSIgdGhhdCBpbnN0YWxscwogdGhlIHJlbGV2YW50IHBvcnRpb25zIG9mIHRoZSBNYWMgc3VidHJlZSBpbnRvIHRoZSBQeXRob24uZnJhbWV3b3JrLgogCkBAIC0yNTAsMTggKzI1NiwxOCBAQAogIklETEUuYXBwIiBpcyBhbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50IGZvciBQeXRob246IGVkaXRvciwKIGRlYnVnZ2VyLCBldGMuCiAKLSJQeXRob25MYXVuY2hlci5hcHAiIGlzIGEgaGVscGVyIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBoYW5kbGUgdGhpbmdzIHdoZW4geW91CisiUHl0aG9uIExhdW5jaGVyLmFwcCIgaXMgYSBoZWxwZXIgYXBwbGljYXRpb24gdGhhdCB3aWxsIGhhbmRsZSB0aGluZ3Mgd2hlbiB5b3UKIGRvdWJsZS1jbGljayBhIC5weSwgLnB5YyBvciAucHl3IGZpbGUuIEZvciB0aGUgZmlyc3QgdHdvIGl0IGNyZWF0ZXMgYSBUZXJtaW5hbAogd2luZG93IGFuZCBydW5zIHRoZSBzY3JpcHRzIHdpdGggdGhlIG5vcm1hbCBjb21tYW5kLWxpbmUgUHl0aG9uLiBGb3IgdGhlCiBsYXR0ZXIgaXQgcnVucyB0aGUgc2NyaXB0IGluIHRoZSBQeXRob24uYXBwIGludGVycHJldGVyIHNvIHRoZSBzY3JpcHQgY2FuIGRvCiBHVUktdGhpbmdzLiBLZWVwIHRoZSBgYE9wdGlvbmBgIGtleSBkZXByZXNzZWQgd2hpbGUgZHJhZ2dpbmcgb3IgZG91YmxlLWNsaWNraW5nCiBhIHNjcmlwdCB0byBzZXQgcnVudGltZSBvcHRpb25zLiBUaGVzZSBvcHRpb25zIGNhbiBiZSBzZXQgcGVyc2lzdGVudGx5Ci10aHJvdWdoIFB5dGhvbkxhdW5jaGVyJ3MgcHJlZmVyZW5jZXMgZGlhbG9nLgordGhyb3VnaCBQeXRob24gTGF1bmNoZXIncyBwcmVmZXJlbmNlcyBkaWFsb2cuCiAKLVRoZSBwcm9ncmFtIGBgcHl0aG9ueC54YGAgcnVucyBweXRob24gc2NyaXB0cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBWYXJpb3VzCi1jb21wYXRpYmlsaXR5IGFsaWFzZXMgYXJlIGFsc28gaW5zdGFsbGVkLCBpbmNsdWRpbmcgYGBweXRob253eC54YGAgd2hpY2gKLWluIGVhcmx5IHJlbGVhc2VzIG9mIFB5dGhvbiBvbiBPUyBYIHdhcyByZXF1aXJlZCB0byBydW4gR1VJIHByb2dyYW1zLiAgSW4KLWN1cnJlbnQgcmVsZWFzZXMsIHRoZSBgYHB5dGhvbngueGBgIGFuZCBgYHB5dGhvbnd4LnhgYCBjb21tYW5kcyBhcmUgaWRlbnRpY2FsLgorVGhlIHByb2dyYW0gYGBweXRob254LnhgYCBydW5zIHB5dGhvbiBzY3JpcHRzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KK1ByZXZpb3VzbHksIHZhcmlvdXMgY29tcGF0aWJpbGl0eSBhbGlhc2VzIHdlcmUgYWxzbyBpbnN0YWxsZWQsIGluY2x1ZGluZworYGBweXRob253eC54YGAgd2hpY2ggaW4gZWFybHkgcmVsZWFzZXMgb2YgUHl0aG9uIG9uIE9TIFggd2FzIHJlcXVpcmVkIHRvIHJ1bgorR1VJIHByb2dyYW1zLiAgQXMgb2YgMy40LjAsIHRoZSBgYHB5dGhvbnd4LnhgYCBhbGlhc2VzIGFyZSBubyBsb25nZXIgaW5zdGFsbGVkLgogCiBIb3cgZG8gSSBjcmVhdGUgYSBiaW5hcnkgZGlzdHJpYnV0aW9uPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMwNiw3ICszMTIsNyBAQAogICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8KICAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24KICAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiAgICAgc2VjdGlvbiAiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkIgotICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0ICAgCisgICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQKICAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UKICAgIGNvbmZpZ3VyZTogV0FSTklORzogICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAgICBjb25maWd1cmU6IFdBUk5JTkc6ICAgICAjIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vYnVncy5weXRob24ub3JnLyAjIwpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL0hlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliM2FjZTQuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL0hlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0iIiJTdWl0ZSBIZWxwIEluZGV4aW5nIFRvb2wgU3VpdGU6IFNwZWNpYWwgZXZlbnRzIHRoYXQganVzdCB0aGUgSGVscCBJbmRleGluZyBUb29sIHN1cHBvcnRzLgotTGV2ZWwgMCwgdmVyc2lvbiAwCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ0hJVCAnCi0KLWNsYXNzIEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZV9FdmVudHM6Ci0KLSAgICBkZWYgdHVybl9hbmNob3JfaW5kZXhpbmcoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInR1cm4gYW5jaG9yIGluZGV4aW5nOiBUdXJucyBhbmNob3IgaW5kZXhpbmcgb24gb3Igb2ZmLgotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogXHhkMm9uXHhkMyBvciBceGQyb2ZmXHhkMywgdG8gdHVybiBhbmNob3IgaW5kZXhpbmcgb24gb3Igb2ZmCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3RBbmMnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBfYXJnbWFwX3R1cm5fcmVtb3RlX3Jvb3QgPSB7Ci0gICAgICAgICd3aXRoX3Jvb3RfdXJsJyA6ICdyVVJMJywKLSAgICB9Ci0KLSAgICBkZWYgdHVybl9yZW1vdGVfcm9vdChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidHVybiByZW1vdGUgcm9vdDogVHVybiB1c2FnZSBvZiByZW1vdGUgcm9vdCBmb3IgY29udGVudCBvbiB0aGUgd2ViIG9uIG9yIG9mZi4gSWYgdHVybmluZyBceGQyb25ceGQzLCBzdXBwbHkgYSBzdHJpbmcgYXMgc2Vjb25kIHBhcmFtZXRlci4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFx4ZDJvblx4ZDMgb3IgXHhkMm9mZlx4ZDMsIHRvIHR1cm4gcmVtb3RlIHJvb3Qgb24gb3Igb2ZmCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9yb290X3VybDogVGhlIHJlbW90ZSByb290IHRvIHVzZSwgaW4gdGhlIGZvcm0gb2YgXHhkMmh0dHA6Ly93d3cuYXBwbGUuY29tL2hlbHAvXHhkMy4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnSElUICcKLSAgICAgICAgX3N1YmNvZGUgPSAndFJlbScKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF90dXJuX3JlbW90ZV9yb290KQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiB1c2VfdG9rZW5pemVyKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ1c2UgdG9rZW5pemVyOiBUZWxscyB0aGUgaW5kZXhpbmcgdG9vbCB3aGljaCB0b2tlbml6ZXIgdG8gdXNlLgotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogU3BlY2lmeSBceGQyRW5nbGlzaFx4ZDMsIFx4ZDJFdXJvcGVhblx4ZDMsIFx4ZDJKYXBhbmVzZVx4ZDMsIFx4ZDJLb3JlYW5ceGQzLCBvciBceGQyU2ltcGxlXHhkMy4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnSElUICcKLSAgICAgICAgX3N1YmNvZGUgPSAndVRvaycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi1jbGFzcyBhcHBsaWNhdGlvbihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotICAgICIiImFwcGxpY2F0aW9uIC0gQXBwbGljYXRpb24gY2xhc3MgIiIiCi0gICAgd2FudCA9ICdjYXBwJwotY2xhc3MgX1Byb3BfaWRsZVN0YXR1cyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiaWRsZVN0YXR1cyAtICAiIiIKLSAgICB3aGljaCA9ICdzSWRsJwotICAgIHdhbnQgPSAnYm9vbCcKLWFwcGxpY2F0aW9uLl9zdXBlcmNsYXNzbmFtZXMgPSBbXQotYXBwbGljYXRpb24uX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnaWRsZVN0YXR1cycgOiBfUHJvcF9pZGxlU3RhdHVzLAotfQotYXBwbGljYXRpb24uX3ByaXZlbGVtZGljdCA9IHsKLX0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2NhcHAnIDogYXBwbGljYXRpb24sCi19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotICAgICdzSWRsJyA6IF9Qcm9wX2lkbGVTdGF0dXMsCi19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9NaXNjZWxsYW5lb3VzX1N0YW5kYXJkcy5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9NaXNjZWxsYW5lb3VzX1N0YW5kYXJkcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2YWU3MC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0iIiJTdWl0ZSBNaXNjZWxsYW5lb3VzIFN0YW5kYXJkczogVXNlZnVsIGV2ZW50cyB0aGF0IGFyZW5ceGQ1dCBpbiBhbnkgb3RoZXIgc3VpdGUKLUxldmVsIDAsIHZlcnNpb24gMAotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdtaXNjJwotCi1jbGFzcyBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkc19FdmVudHM6Ci0KLSAgICBkZWYgcmV2ZXJ0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJyZXZlcnQ6IFJldmVydCBhbiBvYmplY3QgdG8gdGhlIG1vc3QgcmVjZW50bHkgc2F2ZWQgdmVyc2lvbgotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogb2JqZWN0IHRvIHJldmVydAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdtaXNjJwotICAgICAgICBfc3ViY29kZSA9ICdydnJ0JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1JlcXVpcmVkX1N1aXRlLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1JlcXVpcmVkX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjlmZWUwLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSIiIlN1aXRlIFJlcXVpcmVkIFN1aXRlOiBUZXJtcyB0aGF0IGV2ZXJ5IGFwcGxpY2F0aW9uIHNob3VsZCBzdXBwb3J0Ci1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAncmVxZCcKLQotZnJvbSBTdGRTdWl0ZXMuUmVxdWlyZWRfU3VpdGUgaW1wb3J0ICoKLWNsYXNzIFJlcXVpcmVkX1N1aXRlX0V2ZW50cyhSZXF1aXJlZF9TdWl0ZV9FdmVudHMpOgotCi0gICAgcGFzcwotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1N0YW5kYXJkX1N1aXRlLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1N0YW5kYXJkX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjBiNjNhLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0iIiJTdWl0ZSBTdGFuZGFyZCBTdWl0ZTogQ29tbW9uIHRlcm1zIGZvciBtb3N0IGFwcGxpY2F0aW9ucwotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ0NvUmUnCi0KLWZyb20gU3RkU3VpdGVzLlN0YW5kYXJkX1N1aXRlIGltcG9ydCAqCi1jbGFzcyBTdGFuZGFyZF9TdWl0ZV9FdmVudHMoU3RhbmRhcmRfU3VpdGVfRXZlbnRzKToKLQotICAgIF9hcmdtYXBfY2xvc2UgPSB7Ci0gICAgICAgICdzYXZpbmcnIDogJ3Nhdm8nLAotICAgICAgICAnaW5fJyA6ICdrZmlsJywKLSAgICB9Ci0KLSAgICBkZWYgY2xvc2Uoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImNsb3NlOiBDbG9zZSBhbiBvYmplY3QKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3RzIHRvIGNsb3NlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgc2F2aW5nOiBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgY2hhbmdlcyBzaG91bGQgYmUgc2F2ZWQgYmVmb3JlIGNsb3NpbmcKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBpbl86IHRoZSBmaWxlIGluIHdoaWNoIHRvIHNhdmUgdGhlIG9iamVjdAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdjbG9zJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2Nsb3NlKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLSAgICAgICAgYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ3Nhdm8nLCBfRW51bV9zYXZvKQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIGRhdGFfc2l6ZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiZGF0YSBzaXplOiBSZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHdob3NlIGRhdGEgc2l6ZSBpcyB0byBiZSByZXR1cm5lZAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IHRoZSBzaXplIG9mIHRoZSBvYmplY3QgaW4gYnl0ZXMKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ2RzaXonCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgZ2V0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJnZXQ6IEdldCB0aGUgZGF0YSBmb3IgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHdob3NlIGRhdGEgaXMgdG8gYmUgcmV0dXJuZWQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiBUaGUgZGF0YSBmcm9tIHRoZSBvYmplY3QKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ2dldGQnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBfYXJnbWFwX21ha2UgPSB7Ci0gICAgICAgICduZXcnIDogJ2tvY2wnLAotICAgICAgICAnYXQnIDogJ2luc2gnLAotICAgICAgICAnd2l0aF9kYXRhJyA6ICdkYXRhJywKLSAgICAgICAgJ3dpdGhfcHJvcGVydGllcycgOiAncHJkdCcsCi0gICAgfQotCi0gICAgZGVmIG1ha2Uoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIibWFrZTogTWFrZSBhIG5ldyBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgbmV3OiB0aGUgY2xhc3Mgb2YgdGhlIG5ldyBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgYXQ6IHRoZSBsb2NhdGlvbiBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCB3aXRoX2RhdGE6IHRoZSBpbml0aWFsIGRhdGEgZm9yIHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9wcm9wZXJ0aWVzOiB0aGUgaW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogT2JqZWN0IHNwZWNpZmllciBmb3IgdGhlIG5ldyBlbGVtZW50Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdjcmVsJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX21ha2UpCi0gICAgICAgIGlmIF9ub19vYmplY3QgaXMgbm90IE5vbmU6IHJhaXNlIFR5cGVFcnJvcignTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcpCi0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBvcGVuKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJvcGVuOiBPcGVuIHRoZSBzcGVjaWZpZWQgb2JqZWN0KHMpCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBPYmplY3RzIHRvIG9wZW4uIENhbiBiZSBhIGxpc3Qgb2YgZmlsZXMgb3IgYW4gb2JqZWN0IHNwZWNpZmllci4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnYWV2dCcKLSAgICAgICAgX3N1YmNvZGUgPSAnb2RvYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBwcmludF8oc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInByaW50OiBQcmludCB0aGUgc3BlY2lmaWVkIG9iamVjdChzKQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBwcmludC4gQ2FuIGJlIGEgbGlzdCBvZiBmaWxlcyBvciBhbiBvYmplY3Qgc3BlY2lmaWVyLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdhZXZ0JwotICAgICAgICBfc3ViY29kZSA9ICdwZG9jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9zYXZlID0gewotICAgICAgICAnaW5fJyA6ICdrZmlsJywKLSAgICAgICAgJ2FzJyA6ICdmbHRwJywKLSAgICB9Ci0KLSAgICBkZWYgc2F2ZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIic2F2ZTogc2F2ZSBhIHNldCBvZiBvYmplY3RzCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBPYmplY3RzIHRvIHNhdmUuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgaW5fOiB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBvYmplY3QocykKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBhczogdGhlIGZpbGUgdHlwZSBvZiB0aGUgZG9jdW1lbnQgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgZGF0YQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdzYXZlJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3NhdmUpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9zZXQgPSB7Ci0gICAgICAgICd0bycgOiAnZGF0YScsCi0gICAgfQotCi0gICAgZGVmIHNldChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIic2V0OiBTZXQgYW4gb2JqZWN0XHhkNXMgZGF0YQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB0byBjaGFuZ2UKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCB0bzogdGhlIG5ldyB2YWx1ZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdzZXRkJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3NldCkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotY2xhc3MgYXBwbGljYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJhcHBsaWNhdGlvbiAtIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gIiIiCi0gICAgd2FudCA9ICdjYXBwJwotIyAgICAgICAgZWxlbWVudCAnY3dpbicgYXMgWydpbmR4JywgJ25hbWUnLCAncmVsZSddCi0jICAgICAgICBlbGVtZW50ICdkb2N1JyBhcyBbJ25hbWUnXQotCi1jbGFzcyB3aW5kb3coYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJ3aW5kb3cgLSBBIFdpbmRvdyAiIiIKLSAgICB3YW50ID0gJ2N3aW4nCi1jbGFzcyBfUHJvcF9ib3VuZHMoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImJvdW5kcyAtIHRoZSBib3VuZGFyeSByZWN0YW5nbGUgZm9yIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncGJuZCcKLSAgICB3YW50ID0gJ3FkcnQnCi1jbGFzcyBfUHJvcF9jbG9zZWFibGUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImNsb3NlYWJsZSAtIERvZXMgdGhlIHdpbmRvdyBoYXZlIGEgY2xvc2UgYm94PyAiIiIKLSAgICB3aGljaCA9ICdoY2xiJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX2Zsb2F0aW5nKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJmbG9hdGluZyAtIERvZXMgdGhlIHdpbmRvdyBmbG9hdD8gIiIiCi0gICAgd2hpY2ggPSAnaXNmbCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9pbmRleChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiaW5kZXggLSB0aGUgbnVtYmVyIG9mIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncGlkeCcKLSAgICB3YW50ID0gJ2xvbmcnCi1jbGFzcyBfUHJvcF9tb2RhbChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIibW9kYWwgLSBJcyB0aGUgd2luZG93IG1vZGFsPyAiIiIKLSAgICB3aGljaCA9ICdwbW9kJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX25hbWUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm5hbWUgLSB0aGUgdGl0bGUgb2YgdGhlIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwbmFtJwotICAgIHdhbnQgPSAnaXR4dCcKLWNsYXNzIF9Qcm9wX3Bvc2l0aW9uKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJwb3NpdGlvbiAtIHVwcGVyIGxlZnQgY29vcmRpbmF0ZXMgb2Ygd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3Bwb3MnCi0gICAgd2FudCA9ICdRRHB0JwotY2xhc3MgX1Byb3BfcmVzaXphYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJyZXNpemFibGUgLSBJcyB0aGUgd2luZG93IHJlc2l6YWJsZT8gIiIiCi0gICAgd2hpY2ggPSAncHJzeicKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF90aXRsZWQoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInRpdGxlZCAtIERvZXMgdGhlIHdpbmRvdyBoYXZlIGEgdGl0bGUgYmFyPyAiIiIKLSAgICB3aGljaCA9ICdwdGl0JwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3Zpc2libGUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInZpc2libGUgLSBpcyB0aGUgd2luZG93IHZpc2libGU/ICIiIgotICAgIHdoaWNoID0gJ3B2aXMnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3Bfem9vbWFibGUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInpvb21hYmxlIC0gSXMgdGhlIHdpbmRvdyB6b29tYWJsZT8gIiIiCi0gICAgd2hpY2ggPSAnaXN6bScKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF96b29tZWQoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInpvb21lZCAtIElzIHRoZSB3aW5kb3cgem9vbWVkPyAiIiIKLSAgICB3aGljaCA9ICdwenVtJwotICAgIHdhbnQgPSAnYm9vbCcKLQotY2xhc3MgZG9jdW1lbnQoYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJkb2N1bWVudCAtIEEgRG9jdW1lbnQgIiIiCi0gICAgd2FudCA9ICdkb2N1JwotY2xhc3MgX1Byb3BfbW9kaWZpZWQoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm1vZGlmaWVkIC0gSGFzIHRoZSBkb2N1bWVudCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHNhdmU/ICIiIgotICAgIHdoaWNoID0gJ2ltb2QnCi0gICAgd2FudCA9ICdib29sJwotYXBwbGljYXRpb24uX3N1cGVyY2xhc3NuYW1lcyA9IFtdCi1hcHBsaWNhdGlvbi5fcHJpdnByb3BkaWN0ID0gewotfQotYXBwbGljYXRpb24uX3ByaXZlbGVtZGljdCA9IHsKLSAgICAnZG9jdW1lbnQnIDogZG9jdW1lbnQsCi0gICAgJ3dpbmRvdycgOiB3aW5kb3csCi19Ci13aW5kb3cuX3N1cGVyY2xhc3NuYW1lcyA9IFtdCi13aW5kb3cuX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnYm91bmRzJyA6IF9Qcm9wX2JvdW5kcywKLSAgICAnY2xvc2VhYmxlJyA6IF9Qcm9wX2Nsb3NlYWJsZSwKLSAgICAnZmxvYXRpbmcnIDogX1Byb3BfZmxvYXRpbmcsCi0gICAgJ2luZGV4JyA6IF9Qcm9wX2luZGV4LAotICAgICdtb2RhbCcgOiBfUHJvcF9tb2RhbCwKLSAgICAnbmFtZScgOiBfUHJvcF9uYW1lLAotICAgICdwb3NpdGlvbicgOiBfUHJvcF9wb3NpdGlvbiwKLSAgICAncmVzaXphYmxlJyA6IF9Qcm9wX3Jlc2l6YWJsZSwKLSAgICAndGl0bGVkJyA6IF9Qcm9wX3RpdGxlZCwKLSAgICAndmlzaWJsZScgOiBfUHJvcF92aXNpYmxlLAotICAgICd6b29tYWJsZScgOiBfUHJvcF96b29tYWJsZSwKLSAgICAnem9vbWVkJyA6IF9Qcm9wX3pvb21lZCwKLX0KLXdpbmRvdy5fcHJpdmVsZW1kaWN0ID0gewotfQotZG9jdW1lbnQuX3N1cGVyY2xhc3NuYW1lcyA9IFtdCi1kb2N1bWVudC5fcHJpdnByb3BkaWN0ID0gewotICAgICdtb2RpZmllZCcgOiBfUHJvcF9tb2RpZmllZCwKLSAgICAnbmFtZScgOiBfUHJvcF9uYW1lLAotfQotZG9jdW1lbnQuX3ByaXZlbGVtZGljdCA9IHsKLX0KLV9FbnVtX3Nhdm8gPSB7Ci0gICAgJ3llcycgOiAneWVzICcsICAgICAjIFNhdmUgb2JqZWN0cyBub3cKLSAgICAnbm8nIDogJ25vICAnLCAgICAgICMgRG8gbm90IHNhdmUgb2JqZWN0cwotICAgICdhc2snIDogJ2FzayAnLCAgICAgIyBBc2sgdGhlIHVzZXIgd2hldGhlciB0byBzYXZlCi19Ci0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2NhcHAnIDogYXBwbGljYXRpb24sCi0gICAgJ2N3aW4nIDogd2luZG93LAotICAgICdkb2N1JyA6IGRvY3VtZW50LAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLSAgICAnaGNsYicgOiBfUHJvcF9jbG9zZWFibGUsCi0gICAgJ2ltb2QnIDogX1Byb3BfbW9kaWZpZWQsCi0gICAgJ2lzZmwnIDogX1Byb3BfZmxvYXRpbmcsCi0gICAgJ2lzem0nIDogX1Byb3Bfem9vbWFibGUsCi0gICAgJ3BibmQnIDogX1Byb3BfYm91bmRzLAotICAgICdwaWR4JyA6IF9Qcm9wX2luZGV4LAotICAgICdwbW9kJyA6IF9Qcm9wX21vZGFsLAotICAgICdwbmFtJyA6IF9Qcm9wX25hbWUsCi0gICAgJ3Bwb3MnIDogX1Byb3BfcG9zaXRpb24sCi0gICAgJ3Byc3onIDogX1Byb3BfcmVzaXphYmxlLAotICAgICdwdGl0JyA6IF9Qcm9wX3RpdGxlZCwKLSAgICAncHZpcycgOiBfUHJvcF92aXNpYmxlLAotICAgICdwenVtJyA6IF9Qcm9wX3pvb21lZCwKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotICAgICdzYXZvJyA6IF9FbnVtX3Nhdm8sCi19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvX19pbml0X18ucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNTlkZjUuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotIiIiCi1QYWNrYWdlIGdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLSIiIgotaW1wb3J0IGFldG9vbHMKLUVycm9yID0gYWV0b29scy5FcnJvcgotaW1wb3J0IFN0YW5kYXJkX1N1aXRlCi1pbXBvcnQgSGVscF9JbmRleGluZ19Ub29sX1N1aXRlCi1pbXBvcnQgb2Rkc19hbmRfZW5kcwotaW1wb3J0IE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzCi1pbXBvcnQgUmVxdWlyZWRfU3VpdGUKLQotCi1fY29kZV90b19tb2R1bGUgPSB7Ci0gICAgJ0NvUmUnIDogU3RhbmRhcmRfU3VpdGUsCi0gICAgJ0hJVCAnIDogSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLAotICAgICdPZGRzJyA6IG9kZHNfYW5kX2VuZHMsCi0gICAgJ21pc2MnIDogTWlzY2VsbGFuZW91c19TdGFuZGFyZHMsCi0gICAgJ3JlcWQnIDogUmVxdWlyZWRfU3VpdGUsCi19Ci0KLQotCi1fY29kZV90b19mdWxsbmFtZSA9IHsKLSAgICAnQ29SZScgOiAoJ0hlbHBJbmRleGluZ1Rvb2wuU3RhbmRhcmRfU3VpdGUnLCAnU3RhbmRhcmRfU3VpdGUnKSwKLSAgICAnSElUICcgOiAoJ0hlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlJywgJ0hlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZScpLAotICAgICdPZGRzJyA6ICgnSGVscEluZGV4aW5nVG9vbC5vZGRzX2FuZF9lbmRzJywgJ29kZHNfYW5kX2VuZHMnKSwKLSAgICAnbWlzYycgOiAoJ0hlbHBJbmRleGluZ1Rvb2wuTWlzY2VsbGFuZW91c19TdGFuZGFyZHMnLCAnTWlzY2VsbGFuZW91c19TdGFuZGFyZHMnKSwKLSAgICAncmVxZCcgOiAoJ0hlbHBJbmRleGluZ1Rvb2wuUmVxdWlyZWRfU3VpdGUnLCAnUmVxdWlyZWRfU3VpdGUnKSwKLX0KLQotZnJvbSBTdGFuZGFyZF9TdWl0ZSBpbXBvcnQgKgotZnJvbSBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUgaW1wb3J0ICoKLWZyb20gb2Rkc19hbmRfZW5kcyBpbXBvcnQgKgotZnJvbSBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcyBpbXBvcnQgKgotZnJvbSBSZXF1aXJlZF9TdWl0ZSBpbXBvcnQgKgotCi1kZWYgZ2V0YmFzZWNsYXNzZXModik6Ci0gICAgaWYgbm90IGdldGF0dHIodiwgJ19wcm9wZGljdCcsIE5vbmUpOgotICAgICAgICB2Ll9wcm9wZGljdCA9IHt9Ci0gICAgICAgIHYuX2VsZW1kaWN0ID0ge30KLSAgICAgICAgZm9yIHN1cGVyY2xhc3NuYW1lIGluIGdldGF0dHIodiwgJ19zdXBlcmNsYXNzbmFtZXMnLCBbXSk6Ci0gICAgICAgICAgICBzdXBlcmNsYXNzID0gZXZhbChzdXBlcmNsYXNzbmFtZSkKLSAgICAgICAgICAgIGdldGJhc2VjbGFzc2VzKHN1cGVyY2xhc3MpCi0gICAgICAgICAgICB2Ll9wcm9wZGljdC51cGRhdGUoZ2V0YXR0cihzdXBlcmNsYXNzLCAnX3Byb3BkaWN0Jywge30pKQotICAgICAgICAgICAgdi5fZWxlbWRpY3QudXBkYXRlKGdldGF0dHIoc3VwZXJjbGFzcywgJ19lbGVtZGljdCcsIHt9KSkKLSAgICAgICAgdi5fcHJvcGRpY3QudXBkYXRlKGdldGF0dHIodiwgJ19wcml2cHJvcGRpY3QnLCB7fSkpCi0gICAgICAgIHYuX2VsZW1kaWN0LnVwZGF0ZShnZXRhdHRyKHYsICdfcHJpdmVsZW1kaWN0Jywge30pKQotCi1pbXBvcnQgU3RkU3VpdGVzCi0KLSMKLSMgU2V0IHByb3BlcnR5IGFuZCBlbGVtZW50IGRpY3Rpb25hcmllcyBub3cgdGhhdCBhbGwgY2xhc3NlcyBoYXZlIGJlZW4gZGVmaW5lZAotIwotZ2V0YmFzZWNsYXNzZXMod2luZG93KQotZ2V0YmFzZWNsYXNzZXMoYXBwbGljYXRpb24pCi1nZXRiYXNlY2xhc3Nlcyhkb2N1bWVudCkKLWdldGJhc2VjbGFzc2VzKGFwcGxpY2F0aW9uKQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLSAgICAnY3dpbicgOiB3aW5kb3csCi0gICAgJ2NhcHAnIDogYXBwbGljYXRpb24sCi0gICAgJ2RvY3UnIDogZG9jdW1lbnQsCi0gICAgJ2NhcHAnIDogYXBwbGljYXRpb24sCi19Ci0KLQotY2xhc3MgSGVscEluZGV4aW5nVG9vbChTdGFuZGFyZF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIG9kZHNfYW5kX2VuZHNfRXZlbnRzLAotICAgICAgICBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkc19FdmVudHMsCi0gICAgICAgIFJlcXVpcmVkX1N1aXRlX0V2ZW50cywKLSAgICAgICAgYWV0b29scy5UYWxrVG8pOgotICAgIF9zaWduYXR1cmUgPSAnaGl0aScKLQotICAgIF9tb2R1bGVOYW1lID0gJ0hlbHBJbmRleGluZ1Rvb2wnCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9vZGRzX2FuZF9lbmRzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmVjYjk1Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9vZGRzX2FuZF9lbmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIiIiU3VpdGUgb2RkcyBhbmQgZW5kczogVGhpbmdzIHRoYXQgc2hvdWxkIGJlIGluIHNvbWUgc3RhbmRhcmQgc3VpdGUsIGJ1dCBhcmVuXHhkNXQKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdPZGRzJwotCi1jbGFzcyBvZGRzX2FuZF9lbmRzX0V2ZW50czoKLQotICAgIGRlZiBzZWxlY3Qoc2VsZiwgX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIic2VsZWN0OiBTZWxlY3QgdGhlIHNwZWNpZmllZCBvYmplY3QKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gc2VsZWN0Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ21pc2MnCi0gICAgICAgIF9zdWJjb2RlID0gJ3NsY3QnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL1JFQURNRSBiL01hYy9Ub29scy9Eb2MvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjRkNTNkLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotSW4gdGhpcyBkaXJlY3RvcnkgeW91IGNhbiBidWlsZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gaW4gYSBmb3JtIHRoYXQKLWlzIHN1aXRhYmxlIGZvciBhY2Nlc3Mgd2l0aCBBcHBsZSBIZWxwIFZpZXdlci4gVGhpcyB3aWxsIGVuYWJsZSB0aGUKLSJQeXRob24gRG9jdW1lbnRhdGlvbiIgbWVudSBlbnRyaWVzIGluIHRoZSBNYWNQeXRob24gSURFIEhlbHAgbWVudS4KLQotVW5mb3J0dW5hdGVseSB0aGUgcHJvY2VkdXJlIHRvIGJ1aWxkIHRoZSBkb2NzIGlzIG5vdCB2ZXJ5IHN0cmVhbWxpbmVkLgotCi1GaXJzdCwgZWRpdCBzZXR1cC5weS4gQXQgdGhlIHRvcCwgZWRpdCBNQUpPUl9WRVJTSU9OIGFuZCBNSU5PUl9WRVJTSU9OLAotYW5kIGNoZWNrIHRoYXQgREVTVERJUiBtYWtlcyBzZW5zZS4gVGhlIGRvY3VtZW50YXRpb24gd2lsbCBiZSBpbnN0YWxsZWQKLWluc2lkZSBQeXRob25JREUuYXBwLgotCi1JbiBEb2NCdWlsZC5pbml0aWFsaXplX29wdGlvbnMsIHNldCBzZWxmLmRvd25sb2FkIHRvIFRydWUgaWYgeW91IHdhbnQgdG8KLWRvd25sb2FkIHRoZSBkb2NzLiBTZXQgaXQgdG8gRmFsc2UgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIGRvY3MgZnJvbQotdGhlIHNvdXJjZSB0cmVlLCBidXQgdGhpcyByZXF1aXJlcyBMYVRleCBhbmQgbG90cyBvZiBvdGhlciBzdHVmZi4KLURvYWJsZSwgYnV0IG5vdCBlYXN5LgotCi1TZWNvbmQsIGlmIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoZSBkb2NzIHlvdSBtYXkgbmVlZCB0byBkbyBhIGNvdXBsZQotbW9yZSBlZGl0cy4gVGhlIHdheSB0aGUgZG9jcyBhcmUgcGFja2FnZWQgd2lsbCBvZnRlbiBjaGFuZ2UgYmV0d2VlbgotbWFqb3IgcmVsZWFzZXMuIEZpZGRsZSBEb2NCdWlsZC5kb3dubG9hZERvY3MgdG8gbWFrZSBpdCBkbyB0aGUgcmlnaHQKLXRoaW5nIChkb3dubG9hZCB0aGUgZG9jcyBmcm9tIHB5dGhvbi5vcmcsIHVucGFjayB0aGVtLCByZW5hbWUgdGhlCi1kaXJlY3RvcnkgdG8gImJ1aWxkL2h0bWwiKS4KLQotQWZ0ZXIgdGhlc2UgZWRpdHMgeW91IHNob3VsZCBiZSByZWFkeSB0byByb2xsLiAicHl0aG9udyBzZXR1cC5weSBidWlsZCIKLXNob3VsZCBkb3dubG9hZCBhbmQgdW5wYWNrIChvciBidWlsZCkgdGhlIGRvY3MuIE5leHQsIGl0IHdpbGwgZG8gc29tZQotbWFnaWMgdG8gbWFrZSB0aGUgZG9jcyBpbmRleGFibGUuIEZpbmFsbHksIGl0IHdpbGwgcnVuIHRoZSBBcHBsZSBIZWxwCi1JbmRleGluZyBUb29sLiAoVGhpcyBsYXN0IHN0ZXAgaXMgdGhlIHJlYXNvbiB5b3UgbXVzdCB1c2UgInB5dGhvbnciIGFzCi1vcHBvc2VkIHRvICJweXRob24iKS4gVXN1YWxseSBpdCB3aWxsIHRpbWUgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIEFISVQgdG8KLWRvIGl0cyB3b3JrLiBXYWl0IHVudGlsIEFISVQgaXMgZG9uZS4KLQotTm93IHlvdSdyZSByZWFkeSB0byBpbnN0YWxsIHdpdGggInB5dGhvbiBzZXR1cC5weSBpbnN0YWxsIi4KLQotQWZ0ZXIgdGhpcyBpcyBkb25lIHRlc3QgeW91ciB3b3JrLiBGaXJlIHVwIFB5dGhvbklERSwgYW5kIGNoZWNrIHRoYXQKLUhlbHAtPlB5dGhvbiBEb2N1bWVudGF0aW9uIGJyaW5ncyB1cCB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgSGVscCBWaWV3ZXIuCi1BbHNvIG9wZW4gYW4gSURFIGVkaXQgd2luZG93LCB0eXBlIHNvbWV0aGluZyBsaWtlICJpbXBvcnQgc3lzIiwgc2VsZWN0Ci0iaW1wb3J0IiwgYW5kIHVzZSBIZWxwLT5Mb29rdXAgaW4gUHl0aG9uIERvY3VtZW50YXRpb24gdG8gY2hlY2sgdGhhdCB0aGUKLWluZGV4IGhhcyBiZWVuIGdlbmVyYXRlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL3NldHVwLnB5IGIvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM1MTUyYy4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL3NldHVwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLSMgQnVpbGQgYW5kIGluc3RhbGwgYW4gQXBwbGUgSGVscCBWaWV3ZXIgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHRoZSBQeXRob24KLSMgZG9jdW1lbnRhdGlvbiBpbnRvIHRoZSBmcmFtZXdvcmsuCi0jIENvZGUgYnkgQmlsbCBGYW5jaGVyLCB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyBieSBKYWNrIEphbnNlbi4KLSMKLSMgWW91IG11c3QgcnVuIHRoaXMgYXMgYSB0d28tc3RlcCBwcm9jZXNzCi0jIDEuIHB5dGhvbiBzZXR1cERvY3MucHkgYnVpbGQKLSMgMi4gV2FpdCBmb3IgQXBwbGUgSGVscCBJbmRleGluZyBUb29sIHRvIGZpbmlzaAotIyAzLiBweXRob24gc2V0dXBEb2NzLnB5IGluc3RhbGwKLSMKLSMgVG8gZG86Ci0jIC0gdGVzdCB3aGV0aGVyIHRoZSBkb2NzIGFyZSBhdmFpbGFibGUgbG9jYWxseSBiZWZvcmUgZG93bmxvYWRpbmcKLSMgLSBmaXggYnVpbGREb2NzRnJvbVNvdXJjZQotIyAtIEdldCBkb2N1bWVudGF0aW9uIHZlcnNpb24gZnJvbSBzeXMudmVyc2lvbiwgZmFsbGJhY2sgdG8gMi4yLjEKLSMgLSBTZWUgaWYgd2UgY2FuIHNvbWVob3cgZGV0ZWN0IHRoYXQgQXBwbGUgSGVscCBJbmRleGluZyBUb29sIGlzIGZpbmlzaGVkCi0jIC0gZGF0YV9maWxlcyB0byBzZXR1cCgpIGRvZXNuJ3Qgc2VlbSB0aGUgcmlnaHQgd2F5IHRvIHBhc3MgdGhlIGFyZ3VtZW50cwotIwotaW1wb3J0IHN5cywgb3MsIHJlCi1mcm9tIGRpc3R1dGlscy5jbWQgaW1wb3J0IENvbW1hbmQKLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGQgaW1wb3J0IGJ1aWxkCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAotZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBjb3B5X2ZpbGUKLWZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCBjb3B5X3RyZWUKLWZyb20gZGlzdHV0aWxzLmxvZyBpbXBvcnQgbG9nCi1mcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KLWZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcsIGRlcF91dGlsCi1mcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBjaGFuZ2Vfcm9vdAotaW1wb3J0IEhlbHBJbmRleGluZ1Rvb2wKLWltcG9ydCBDYXJib24uRmlsZQotaW1wb3J0IHRpbWUKLQotTUFKT1JfVkVSU0lPTj0nMi40JwotTUlOT1JfVkVSU0lPTj0nMi40LjEnCi1ERVNURElSPScvQXBwbGljYXRpb25zL01hY1B5dGhvbi0lcy9QeXRob25JREUuYXBwL0NvbnRlbnRzL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL1B5dGhvbkRvY3VtZW50YXRpb24nICUgTUFKT1JfVkVSU0lPTgotCi1jbGFzcyBEb2NCdWlsZChidWlsZCk6Ci0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgYnVpbGQuaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpCi0gICAgICAgIHNlbGYuYnVpbGRfaHRtbCA9IE5vbmUKLSAgICAgICAgc2VsZi5idWlsZF9kZXN0ID0gTm9uZQotICAgICAgICBzZWxmLmRvd25sb2FkID0gMQotICAgICAgICBzZWxmLmRvY192ZXJzaW9uID0gTUlOT1JfVkVSU0lPTiAjIE9ubHkgbmVlZGVkIGlmIGRvd25sb2FkIGlzIHRydWUKLQotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBidWlsZC5maW5hbGl6ZV9vcHRpb25zKHNlbGYpCi0gICAgICAgIGlmIHNlbGYuYnVpbGRfaHRtbCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5idWlsZF9odG1sID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfYmFzZSwgJ2h0bWwnKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2Rlc3QgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsICdQeXRob25Eb2N1bWVudGF0aW9uJykKLQotICAgIGRlZiBzcGF3bihzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNwYXduKGFyZ3MsIDEsICBzZWxmLnZlcmJvc2UsIHNlbGYuZHJ5X3J1bikKLQotICAgIGRlZiBkb3dubG9hZERvY3Moc2VsZik6Ci0gICAgICAgIHdvcmtkaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICAjIFhYWCBOb3RlOiB0aGUgbmV4dCBzdHJpbmdzIG1heSBjaGFuZ2UgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24KLSAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uL2RvYy8lcy9odG1sLSVzLnRhci5iejInICUgXAotICAgICAgICAgICAgICAgIChzZWxmLmRvY192ZXJzaW9uLHNlbGYuZG9jX3ZlcnNpb24pCi0gICAgICAgIHRhcmZpbGUgPSAnaHRtbC0lcy50YXIuYnoyJyAlIHNlbGYuZG9jX3ZlcnNpb24KLSAgICAgICAgZGlybmFtZSA9ICdQeXRob24tRG9jcy0lcycgJSBzZWxmLmRvY192ZXJzaW9uCi0KLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5idWlsZF9odG1sKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJXM6IGFscmVhZHkgZXhpc3RzLCBwbGVhc2UgcmVtb3ZlIGFuZCB0cnkgYWdhaW4nICUgc2VsZi5idWlsZF9odG1sKQotICAgICAgICBvcy5jaGRpcihzZWxmLmJ1aWxkX2Jhc2UpCi0gICAgICAgIHNlbGYuc3Bhd24oJ2N1cmwnLCctTycsIHVybCkKLSAgICAgICAgc2VsZi5zcGF3bigndGFyJywgJy14amYnLCB0YXJmaWxlKQotICAgICAgICBvcy5yZW5hbWUoZGlybmFtZSwgJ2h0bWwnKQotICAgICAgICBvcy5jaGRpcih3b3JrZGlyKQotIyMgICAgICAgIHByaW50ICIqKiBQbGVhc2UgdW5wYWNrICVzIiAlIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsIHRhcmZpbGUpCi0jIyAgICAgICAgcHJpbnQgIioqIFVucGFjayB0aGUgZmlsZXMgaW50byAlcyIgJSBzZWxmLmJ1aWxkX2h0bWwKLSMjICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJZb3UgbmVlZCB0byB1bnBhY2sgdGhlIGRvY3MgbWFudWFsbHkiCi0KLSAgICBkZWYgYnVpbGREb2NzRnJvbVNvdXJjZShzZWxmKToKLSAgICAgICAgc3JjZGlyID0gJy4uLy4uLy4uJwotICAgICAgICBkb2NkaXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCAnRG9jJykKLSAgICAgICAgaHRtbGRpciA9IG9zLnBhdGguam9pbihkb2NkaXIsICdodG1sJykKLSAgICAgICAgc3Bhd24oKCdtYWtlJywnLS1kaXJlY3RvcnknLCBkb2NkaXIsICdodG1sJyksIDEsIHNlbGYudmVyYm9zZSwgc2VsZi5kcnlfcnVuKQotICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2h0bWwpCi0gICAgICAgIGNvcHlfdHJlZShodG1sZGlyLCBzZWxmLmJ1aWxkX2h0bWwpCi0KLSAgICBkZWYgZW5zdXJlSHRtbChzZWxmKToKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICBpZiBzZWxmLmRvd25sb2FkOgotICAgICAgICAgICAgICAgIHNlbGYuZG93bmxvYWREb2NzKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5idWlsZERvY3NGcm9tU291cmNlKCkKLQotICAgIGRlZiBoYWNrSW5kZXgoc2VsZik6Ci0gICAgICAgIGluZF9odG1sID0gJ2luZGV4Lmh0bWwnCi0gICAgICAgICNwcmludCAnc2VsZi5idWlsZF9kZXN0ID0nLCBzZWxmLmJ1aWxkX2Rlc3QKLSAgICAgICAgaGFja2VkSW5kZXggPSBmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsIGluZF9odG1sKSwndycpCi0gICAgICAgIG9yaWdJbmRleCA9IGZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRfaHRtbCxpbmRfaHRtbCkpCi0gICAgICAgIHIgPSByZS5jb21waWxlKCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi4qPC9zdHlsZT4nLCByZS5ET1RBTEwpCi0gICAgICAgIGhhY2tlZEluZGV4LndyaXRlKHIuc3ViKCc8TUVUQSBOQU1FPSJBcHBsZVRpdGxlIiBDT05URU5UPSJQeXRob24gRG9jdW1lbnRhdGlvbiI+JyxvcmlnSW5kZXgucmVhZCgpKSkKLQotICAgIGRlZiBoYWNrRmlsZShzZWxmLGQsZik6Ci0gICAgICAgIG9yaWdQYXRoID0gb3MucGF0aC5qb2luKGQsZikKLSAgICAgICAgYXNzZXJ0KG9yaWdQYXRoWzpsZW4oc2VsZi5idWlsZF9odG1sKV0gPT0gc2VsZi5idWlsZF9odG1sKQotICAgICAgICBvdXRQYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfZGVzdCwgZFtsZW4oc2VsZi5idWlsZF9odG1sKSsxOl0sIGYpCi0gICAgICAgIChuYW1lLCBleHQpID0gb3MucGF0aC5zcGxpdGV4dChmKQotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9yaWdQYXRoKToKLSAgICAgICAgICAgIHNlbGYubWtwYXRoKG91dFBhdGgpCi0gICAgICAgIGVsaWYgZXh0ID09ICcuaHRtbCc6Ci0gICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6IHByaW50KCdoYWNraW5nICVzIHRvICVzJyAlIChvcmlnUGF0aCxvdXRQYXRoKSkKLSAgICAgICAgICAgIGhhY2tlZEZpbGUgPSBmaWxlKG91dFBhdGgsICd3JykKLSAgICAgICAgICAgIG9yaWdGaWxlID0gZmlsZShvcmlnUGF0aCwncicpCi0gICAgICAgICAgICBoYWNrZWRGaWxlLndyaXRlKHNlbGYuci5zdWIoJzxkbD48ZHQ+PGRkPicsIG9yaWdGaWxlLnJlYWQoKSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb3B5X2ZpbGUob3JpZ1BhdGgsIG91dFBhdGgpCi0KLSAgICBkZWYgaGFja0h0bWwoc2VsZik6Ci0gICAgICAgIHNlbGYuciA9IHJlLmNvbXBpbGUoJzxkbD48ZGQ+JykKLSAgICAgICAgb3Mud2FsayhzZWxmLmJ1aWxkX2h0bWwsIHNlbGYudmlzaXQsIE5vbmUpCi0KLSAgICBkZWYgdmlzaXQoc2VsZiwgZHVtbXksIGRpcm5hbWUsIGZpbGVuYW1lcyk6Ci0gICAgICAgIGZvciBmIGluIGZpbGVuYW1lczoKLSAgICAgICAgICAgIHNlbGYuaGFja0ZpbGUoZGlybmFtZSwgZikKLQotICAgIGRlZiBtYWtlSGVscEluZGV4KHNlbGYpOgotICAgICAgICBhcHAgPSAnL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcCcKLSAgICAgICAgc2VsZi5zcGF3bignb3BlbicsICctYScsIGFwcCAsIHNlbGYuYnVpbGRfZGVzdCkKLSAgICAgICAgcHJpbnQoIlBsZWFzZSB3YWl0IHVudGlsIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBmaW5pc2hlcyBiZWZvcmUgaW5zdGFsbGluZyIpCi0KLSAgICBkZWYgbWFrZUhlbHBJbmRleChzZWxmKToKLSAgICAgICAgYXBwID0gSGVscEluZGV4aW5nVG9vbC5IZWxwSW5kZXhpbmdUb29sKHN0YXJ0PTEpCi0gICAgICAgIGFwcC5vcGVuKENhcmJvbi5GaWxlLkZTU3BlYyhzZWxmLmJ1aWxkX2Rlc3QpKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJXYWl0aW5nIGZvciBIZWxwIEluZGV4aW5nIFRvb2wgdG8gc3RhcnQuLi4iKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgIyBUaGlzIGlzIGJhZCBkZXNpZ24gaW4gdGhlIHN1aXRlIGdlbmVyYXRpb24gY29kZSEKLSAgICAgICAgICAgIGlkbGUgPSBhcHAuX2dldChIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5fUHJvcF9pZGxlU3RhdHVzKCkpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQotICAgICAgICAgICAgaWYgbm90IGlkbGU6IGJyZWFrCi0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiXG4iKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJXYWl0aW5nIGZvciBIZWxwIEluZGV4aW5nIFRvb2wgdG8gZmluaXNoLi4uIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgVGhpcyBpcyBiYWQgZGVzaWduIGluIHRoZSBzdWl0ZSBnZW5lcmF0aW9uIGNvZGUhCi0gICAgICAgICAgICBpZGxlID0gYXBwLl9nZXQoSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUuX1Byb3BfaWRsZVN0YXR1cygpKQotICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKLSAgICAgICAgICAgIGlmIGlkbGU6IGJyZWFrCi0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiXG4iKQotCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Jhc2UpCi0gICAgICAgIHNlbGYuZW5zdXJlSHRtbCgpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IGZpbmQgc291cmNlIGZvbGRlciBmb3IgZG9jdW1lbnRhdGlvbi4iKQotICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgIGlmIGRlcF91dGlsLm5ld2VyKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2h0bWwsJ2luZGV4Lmh0bWwnKSwgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfZGVzdCwnaW5kZXguaHRtbCcpKToKLSAgICAgICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfZGVzdCkKLSAgICAgICAgICAgIHNlbGYuaGFja0h0bWwoKQotICAgICAgICAgICAgc2VsZi5oYWNrSW5kZXgoKQotICAgICAgICAgICAgc2VsZi5tYWtlSGVscEluZGV4KCkKLQotY2xhc3MgQUhWRG9jSW5zdGFsbChDb21tYW5kKToKLSAgICBkZXNjcmlwdGlvbiA9ICJpbnN0YWxsIEFwcGxlIEhlbHAgVmlld2VyIGh0bWwgZmlsZXMiCi0gICAgdXNlcl9vcHRpb25zID0gWygnaW5zdGFsbC1kb2M9JywgJ2QnLAotICAgICAgICAgICAgJ2RpcmVjdG9yeSB0byBpbnN0YWxsIEhUTUwgdHJlZScpLAotICAgICAgICAgICAgICgncm9vdD0nLCBOb25lLAotICAgICAgICAgICAgICJpbnN0YWxsIGV2ZXJ5dGhpbmcgcmVsYXRpdmUgdG8gdGhpcyBhbHRlcm5hdGUgcm9vdCBkaXJlY3RvcnkiKSwKLSAgICAgICAgICAgIF0KLQotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5pbnN0YWxsX2RvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5wcmVmaXggPSBOb25lCi0gICAgICAgIHNlbGYucm9vdCA9IE5vbmUKLQotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLnNldF91bmRlZmluZWRfb3B0aW9ucygnaW5zdGFsbCcsCi0gICAgICAgICAgICAgICAgKCdwcmVmaXgnLCAncHJlZml4JyksCi0gICAgICAgICAgICAgICAgKCdyb290JywgJ3Jvb3QnKSkKLSMgICAgICAgICAgICAgICBpbXBvcnQgcGRiIDsgcGRiLnNldF90cmFjZSgpCi0gICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCi0gICAgICAgIGlmIHNlbGYuYnVpbGRfZGVzdCBpcyBOb25lOgotICAgICAgICAgICAgYnVpbGRfY21kID0gc2VsZi5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkJykKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IGJ1aWxkX2NtZC5idWlsZF9kZXN0Ci0gICAgICAgIGlmIHNlbGYuaW5zdGFsbF9kb2MgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuaW5zdGFsbF9kb2MgPSBvcy5wYXRoLmpvaW4oc2VsZi5wcmVmaXgsIERFU1RESVIpCi0gICAgICAgIHByaW50KCdJTlNUQUxMJywgc2VsZi5idWlsZF9kZXN0LCAnLT4nLCBzZWxmLmluc3RhbGxfZG9jKQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgcHJpbnQoIlJ1bm5pbmcgSW5zdGFsbGVyIikKLSAgICAgICAgaW5zdGxvYyA9IHNlbGYuaW5zdGFsbF9kb2MKLSAgICAgICAgaWYgc2VsZi5yb290OgotICAgICAgICAgICAgaW5zdGxvYyA9IGNoYW5nZV9yb290KHNlbGYucm9vdCwgaW5zdGxvYykKLSAgICAgICAgc2VsZi5ta3BhdGgoaW5zdGxvYykKLSAgICAgICAgY29weV90cmVlKHNlbGYuYnVpbGRfZGVzdCwgaW5zdGxvYykKLSAgICAgICAgcHJpbnQoIkluc3RhbGxhdGlvbiBjb21wbGV0ZSIpCi0KLWRlZiBtdW5nZVZlcnNpb24oaW5maWxlLCBvdXRmaWxlKToKLSAgICBpID0gZmlsZShpbmZpbGUsJ3InKQotICAgIG8gPSBmaWxlKG91dGZpbGUsJ3cnKQotICAgIG8ud3JpdGUocmUuc3ViKCdcJFwoVkVSU0lPTlwpJyxzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1ZFUlNJT04nKSxpLnJlYWQoKSkpCi0gICAgaS5jbG9zZSgpCi0gICAgby5jbG9zZSgpCi0KLWRlZiBtYWluKCk6Ci0gICAgIyB0dXJuIG9mZiB3YXJuaW5ncyB3aGVuIGRlcHJlY2F0ZWQgbW9kdWxlcyBhcmUgaW1wb3J0ZWQKLSMjICAgICAgaW1wb3J0IHdhcm5pbmdzCi0jIyAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZykKLSAgICBzZXR1cChuYW1lID0gJ0RvY3VtZW50YXRpb24nLAotICAgICAgICAgICAgdmVyc2lvbiA9ICclZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwKLSAgICAgICAgICAgIGNtZGNsYXNzID0geydpbnN0YWxsX2RhdGEnOkFIVkRvY0luc3RhbGwsICdidWlsZCc6RG9jQnVpbGR9LAotICAgICAgICAgICAgZGF0YV9maWxlcyA9IFsnZHVtbXknXSwKLSAgICAgICAgICAgICkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5IGIvTWFjL1Rvb2xzL2J1bmRsZWJ1aWxkZXIucHkKaW5kZXggNmNjMTMwZi4uZjU2NzlkMyAxMDA3NTUKLS0tIGEvTWFjL1Rvb2xzL2J1bmRsZWJ1aWxkZXIucHkKKysrIGIvTWFjL1Rvb2xzL2J1bmRsZWJ1aWxkZXIucHkKQEAgLTI3MCw3ICsyNzAsNyBAQAogZGVsIF9fbG9hZAogIiIiCiAKLU1BWU1JU1NfTU9EVUxFUyA9IFsnbWFjJywgJ29zMicsICdudCcsICdudHBhdGgnLCAnZG9zJywgJ2Rvc3BhdGgnLAorTUFZTUlTU19NT0RVTEVTID0gWydtYWMnLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKICAgICAnd2luMzJhcGknLCAnY2UnLCAnX3dpbnJlZycsICdudHVybDJwYXRoJywgJ3NpdGVjdXN0b21pemUnLAogICAgICdvcmcucHl0aG9uLmNvcmUnLCAncmlzY29zJywgJ3Jpc2Nvc2Vudmlyb24nLCAncmlzY29zcGF0aCcKIF0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weSBiL01hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTdiNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5CkBAIC0wLDAgKzEsMTAzIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKK2Zyb20gQ29jb2EgaW1wb3J0IE5TTXV0YWJsZURpY3Rpb25hcnksIE5TTXV0YWJsZUFycmF5LCBOU1N0cmluZywgTlNEYXRlLCBOU051bWJlcgorZnJvbSBDb2NvYSBpbXBvcnQgTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uLCBOU1Byb3BlcnR5TGlzdE9wZW5TdGVwRm9ybWF0Citmcm9tIENvY29hIGltcG9ydCBOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wLCBOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wCitmcm9tIENvY29hIGltcG9ydCBDRlVVSURDcmVhdGVGcm9tU3RyaW5nLCBOU051bGwsIE5TVVVJRCwgQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVEYXRhCitmcm9tIENvY29hIGltcG9ydCBOU1VSTAorCitpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CitpbXBvcnQgYmluYXNjaWkKKworRk9STUFUUz1bCisjICAgICgnb3BlbnN0ZXAnLCBOU1Byb3BlcnR5TGlzdE9wZW5TdGVwRm9ybWF0KSwKKyAgICAoJ3BsaXN0bGliLkZNVF9YTUwnLCBOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wKSwKKyAgICAoJ3BsaXN0bGliLkZNVF9CSU5BUlknLCBOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wKSwKK10KKworZGVmIG5zc3RyKHZhbHVlKToKKyAgICByZXR1cm4gTlNTdHJpbmcuYWxsb2MoKS5pbml0V2l0aFN0cmluZ18odmFsdWUpCisKKworZGVmIG1haW4oKToKKyAgICBwbCA9IE9yZGVyZWREaWN0KCkKKworICAgICMgTm90ZTogcGwgaXMgYW4gT3JkZXJlZERpY3QgdG8gY29udHJvbCB0aGUgb3JkZXIKKyAgICAjIG9mIGtleXMsIGFuZCBoZW5jZSBoYXZlIHNvbWUgY29udHJvbCBvbiB0aGUgc3RydWN0dXJlCisgICAgIyBvZiB0aGUgb3V0cHV0IGZpbGUuCisgICAgIyBOZXcga2V5cyBzaG91bGQgYmUgYWRkZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorCisgICAgc2Vjb25kcyA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDQsIDEwLCAyNiwgMTAsIDMzLCAzMywgdHppbmZvPWRhdGV0aW1lLnRpbWV6b25lKGRhdGV0aW1lLnRpbWVkZWx0YSgwKSkpLnRpbWVzdGFtcCgpCisgICAgcGxbbnNzdHIoJ2FCaWdJbnQnKV0gPSAyICoqIDYzIC0gNDQKKyAgICBwbFtuc3N0cignYUJpZ0ludDInKV0gPSBOU051bWJlci5udW1iZXJXaXRoVW5zaWduZWRMb25nTG9uZ18oMiAqKiA2MyArIDQ0KQorICAgIHBsW25zc3RyKCdhRGF0ZScpXSA9IE5TRGF0ZS5kYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MF8oc2Vjb25kcykKKworICAgIHBsW25zc3RyKCdhRGljdCcpXSA9IGQgPSBPcmRlcmVkRGljdCgpCisgICAgZFtuc3N0cignYUZhbHNlVmFsdWUnKV0gPSBGYWxzZQorICAgIGRbbnNzdHIoJ2FUcnVlVmFsdWUnKV0gPSBUcnVlCisgICAgZFtuc3N0cignYVVuaWNvZGVWYWx1ZScpXSA9ICJNXHhlNHNzaWcsIE1hXHhkZiIKKyAgICBkW25zc3RyKCdhbm90aGVyU3RyaW5nJyldID0gIjxoZWxsbyAmICdoaScgdGhlcmUhPiIKKyAgICBkW25zc3RyKCdkZWVwZXJEaWN0JyldID0gZGQgPSBPcmRlcmVkRGljdCgpCisgICAgZGRbbnNzdHIoJ2EnKV0gPSAxNworICAgIGRkW25zc3RyKCdiJyldID0gMzIuNQorICAgIGRkW25zc3RyKCdjJyldID0gYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQoMSkKKyAgICBhLmFwcGVuZCgyKQorICAgIGEuYXBwZW5kKG5zc3RyKCd0ZXh0JykpCisKKyAgICBwbFtuc3N0cignYUZsb2F0JyldID0gMC41CisKKyAgICBwbFtuc3N0cignYUxpc3QnKV0gPSBhID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKyAgICBhLmFwcGVuZChuc3N0cignQScpKQorICAgIGEuYXBwZW5kKG5zc3RyKCdCJykpCisgICAgYS5hcHBlbmQoMTIpCisgICAgYS5hcHBlbmQoMzIuNSkKKyAgICBhYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQoYWEpCisgICAgYWEuYXBwZW5kKDEpCisgICAgYWEuYXBwZW5kKDIpCisgICAgYWEuYXBwZW5kKDMpCisKKyAgICBwbFtuc3N0cignYU5lZ2F0aXZlQmlnSW50JyldID0gLTgwMDAwMDAwMDAwCisgICAgcGxbbnNzdHIoJ2FOZWdhdGl2ZUludCcpXSA9IC01CisgICAgcGxbbnNzdHIoJ2FTdHJpbmcnKV0gPSBuc3N0cignRG9vZGFoJykKKworICAgIHBsW25zc3RyKCdhbkVtcHR5RGljdCcpXSA9IE5TTXV0YWJsZURpY3Rpb25hcnkuYWxsb2MoKS5pbml0KCkKKworICAgIHBsW25zc3RyKCdhbkVtcHR5TGlzdCcpXSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisKKyAgICBwbFtuc3N0cignYW5JbnQnKV0gPSA3MjgKKworICAgIHBsW25zc3RyKCduZXN0ZWREYXRhJyldID0gYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQoYicnJzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDMnJycpCisKKworICAgIHBsW25zc3RyKCdzb21lRGF0YScpXSA9IGInPGJpbmFyeSBndW5rPicKKworICAgIHBsW25zc3RyKCdzb21lTW9yZURhdGEnKV0gPSBiJycnPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMycnJworCisgICAgcGxbbnNzdHIoJ1x4YzViZW5yYWEnKV0gPSBuc3N0cigiVGhhdCB3YXMgYSB1bmljb2RlIGtleS4iKQorCisgICAgcHJpbnQoIlRFU1REQVRBPXsiKQorICAgIGZvciBmbXRfbmFtZSwgZm10X2tleSBpbiBGT1JNQVRTOgorICAgICAgICBkYXRhLCBlcnJvciA9IE5TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbi5kYXRhV2l0aFByb3BlcnR5TGlzdF9mb3JtYXRfb3B0aW9uc19lcnJvcl8oCisgICAgICAgICAgICBwbCwgZm10X2tleSwgMCwgTm9uZSkKKyAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgcHJpbnQoIkNhbm5vdCBzZXJpYWxpemUiLCBmbXRfbmFtZSwgZXJyb3IpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCIgICAgJXM6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJ1xuICAgICAgICAlcycnJyksIiUoZm10X25hbWUsIF9lbmNvZGVfYmFzZTY0KGJ5dGVzKGRhdGEpKS5kZWNvZGUoJ2FzY2lpJylbOi0xXSkpCisKKyAgICBwcmludCgifSIpCisgICAgcHJpbnQoKQorCitkZWYgX2VuY29kZV9iYXNlNjQocywgbWF4bGluZWxlbmd0aD02MCk6CisgICAgbWF4Ymluc2l6ZSA9IChtYXhsaW5lbGVuZ3RoLy80KSozCisgICAgcGllY2VzID0gW10KKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIG1heGJpbnNpemUpOgorICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBtYXhiaW5zaXplXQorICAgICAgICBwaWVjZXMuYXBwZW5kKGJpbmFzY2lpLmIyYV9iYXNlNjQoY2h1bmspKQorICAgIHJldHVybiBiJyAgICAgICAgJy5qb2luKHBpZWNlcykKKworbWFpbigpCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5wcmUuaW4gYi9NYWtlZmlsZS5wcmUuaW4KaW5kZXggZmRjYTM4ZS4uNjI5ODM1ZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKyBiL01ha2VmaWxlLnByZS5pbgpAQCAtNzEsMTIgKzcxLDE3IEBACiBCQVNFQ0ZMQUdTPQlAQkFTRUNGTEFHU0AKIEJBU0VDUFBGTEFHUz0JQEJBU0VDUFBGTEFHU0AKIENPTkZJR1VSRV9DRkxBR1M9CUBDRkxBR1NACisjIENGTEFHU19OT0RJU1QgaXMgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGludGVycHJldGVyIGFuZCBzdGRsaWIgQyBleHRlbnNpb25zLgorIyBVc2UgaXQgd2hlbiBhIGNvbXBpbGVyIGZsYWcgc2hvdWxkIF9ub3RfIGJlIHBhcnQgb2YgdGhlIGRpc3R1dGlscyBDRkxBR1MKKyMgb25jZSBQeXRob24gaXMgaW5zdGFsbGVkIChJc3N1ZSAjMjExMjEpLgorQ09ORklHVVJFX0NGTEFHU19OT0RJU1Q9QENGTEFHU19OT0RJU1RACiBDT05GSUdVUkVfQ1BQRkxBR1M9CUBDUFBGTEFHU0AKIENPTkZJR1VSRV9MREZMQUdTPQlATERGTEFHU0AKICMgQXZvaWQgYXNzaWduaW5nIENGTEFHUywgTERGTEFHUywgZXRjLiBzbyB1c2VycyBjYW4gdXNlIHRoZW0gb24gdGhlCiAjIGNvbW1hbmQgbGluZSB0byBhcHBlbmQgdG8gdGhlc2UgdmFsdWVzIHdpdGhvdXQgc3RvbXBpbmcgdGhlIHByZS1zZXQKICMgdmFsdWVzLgogUFlfQ0ZMQUdTPQkkKEJBU0VDRkxBR1MpICQoT1BUKSAkKENPTkZJR1VSRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykKK1BZX0NGTEFHU19OT0RJU1Q9JChDT05GSUdVUkVfQ0ZMQUdTX05PRElTVCkgJChDRkxBR1NfTk9ESVNUKQogIyBCb3RoIENQUEZMQUdTIGFuZCBMREZMQUdTIG5lZWQgdG8gY29udGFpbiB0aGUgc2hlbGwncyB2YWx1ZSBmb3Igc2V0dXAucHkgdG8KICMgYmUgYWJsZSB0byBidWlsZCBleHRlbnNpb24gbW9kdWxlcyB1c2luZyB0aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHRoZQogIyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKQEAgLTkxLDcgKzk2LDcgQEAKICMgRXh0cmEgQyBmbGFncyBhZGRlZCBmb3IgYnVpbGRpbmcgdGhlIGludGVycHJldGVyIG9iamVjdCBmaWxlcy4KIENGTEFHU0ZPUlNIQVJFRD1AQ0ZMQUdTRk9SU0hBUkVEQAogIyBDIGZsYWdzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbnRlcnByZXRlciBvYmplY3QgZmlsZXMKLVBZX0NPUkVfQ0ZMQUdTPQkkKFBZX0NGTEFHUykgJChQWV9DUFBGTEFHUykgJChDRkxBR1NGT1JTSEFSRUQpIC1EUHlfQlVJTERfQ09SRQorUFlfQ09SRV9DRkxBR1M9CSQoUFlfQ0ZMQUdTKSAkKFBZX0NGTEFHU19OT0RJU1QpICQoUFlfQ1BQRkxBR1MpICQoQ0ZMQUdTRk9SU0hBUkVEKSAtRFB5X0JVSUxEX0NPUkUKIAogCiAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCkBAIC0xMjcsNyArMTMyLDYgQEAKICMgU3ltYm9scyB1c2VkIGZvciB1c2luZyBzaGFyZWQgbGlicmFyaWVzCiBTSExJQl9TVUZGSVg9CUBTSExJQl9TVUZGSVhACiBFWFRfU1VGRklYPQlARVhUX1NVRkZJWEAKLVNPPQkJJChTSExJQl9TVUZGSVgpCiBMRFNIQVJFRD0JQExEU0hBUkVEQCAkKFBZX0xERkxBR1MpCiBCTERTSEFSRUQ9CUBCTERTSEFSRURAICQoUFlfTERGTEFHUykKIExEQ1hYU0hBUkVEPQlATERDWFhTSEFSRURACkBAIC0xNDksMTIgKzE1MywyMSBAQAogTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPUBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUQAogQEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRAZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAogCisjIE9wdGlvbiB0byBpbnN0YWxsIHRvIHN0cmlwIGJpbmFyaWVzCitTVFJJUEZMQUc9LXMKKworIyBGbGFncyB0byBsaXBvIHRvIHByb2R1Y2UgYSAzMi1iaXQtb25seSB1bml2ZXJzYWwgZXhlY3V0YWJsZQorTElQT18zMkJJVF9GTEFHUz1ATElQT18zMkJJVF9GTEFHU0AKKwogIyBPcHRpb25zIHRvIGVuYWJsZSBwcmViaW5kaW5nIChmb3IgZmFzdCBzdGFydHVwIHByaW9yIHRvIE1hYyBPUyBYIDEwLjMpCiBPVEhFUl9MSUJUT09MX09QVD1AT1RIRVJfTElCVE9PTF9PUFRACiAKICMgRW52aXJvbm1lbnQgdG8gcnVuIHNoYXJlZCBweXRob24gd2l0aG91dCBpbnN0YWxsZWQgbGlicmFyaWVzCiBSVU5TSEFSRUQ9ICAgICAgIEBSVU5TSEFSRURACiAKKyMgZW5zdXJlcGlwIG9wdGlvbnMKK0VOU1VSRVBJUD0gICAgICBARU5TVVJFUElQQAorCiAjIE1vZGVzIGZvciBkaXJlY3RvcmllcywgZXhlY3V0YWJsZXMgYW5kIGRhdGEgZmlsZXMgY3JlYXRlZCBieSB0aGUKICMgaW5zdGFsbCBwcm9jZXNzLiAgRGVmYXVsdCB0byB1c2VyLW9ubHktd3JpdGFibGUgZm9yIGFsbCBmaWxlIHR5cGVzLgogRElSTU9ERT0JNzU1CkBAIC0yMTYsNiArMjI5LDEyIEBACiBQUk9GSUxFX1RBU0s9CSQoc3JjZGlyKS9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkgLW4gMiAtLXdpdGgtZ2MgLS13aXRoLXN5c2NoZWNrCiAjUFJPRklMRV9UQVNLPQkkKHNyY2RpcikvTGliL3Rlc3QvcmVncnRlc3QucHkKIAorIyByZXBvcnQgZmlsZXMgZm9yIGdjb3YgLyBsY292IGNvdmVyYWdlIHJlcG9ydAorQ09WRVJBR0VfSU5GTz0JJChhYnNfYnVpbGRkaXIpL2NvdmVyYWdlLmluZm8KK0NPVkVSQUdFX1JFUE9SVD0kKGFic19idWlsZGRpcikvbGNvdi1yZXBvcnQKK0NPVkVSQUdFX1JFUE9SVF9PUFRJT05TPS0tbm8tYnJhbmNoLWNvdmVyYWdlIC0tdGl0bGUgIkNQeXRob24gbGNvdiByZXBvcnQiCisKKwogIyA9PT0gRGVmaW5pdGlvbnMgYWRkZWQgYnkgbWFrZXNldHVwID09PQogCiAKQEAgLTM2MSw2ICszODAsNyBAQAogCQlQeXRob24vcHlhcmVuYS5vIFwKIAkJUHl0aG9uL3B5Y3R5cGUubyBcCiAJCVB5dGhvbi9weWZwZS5vIFwKKwkJUHl0aG9uL3B5aGFzaC5vIFwKIAkJUHl0aG9uL3B5bWF0aC5vIFwKIAkJUHl0aG9uL3B5c3RhdGUubyBcCiAJCVB5dGhvbi9weXRob25ydW4ubyBcCkBAIC00NDQsNyArNDY0LDcgQEAKIAogIyBEZWZhdWx0IHRhcmdldAogYWxsOgkJYnVpbGRfYWxsCi1idWlsZF9hbGw6CSQoQlVJTERQWVRIT04pIG9sZHNoYXJlZG1vZHMgc2hhcmVkbW9kcyBnZGJob29rcyBNb2R1bGVzL190ZXN0ZW1iZWQKK2J1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIE1vZHVsZXMvX3Rlc3RlbWJlZCBweXRob24tY29uZmlnCiAKICMgQ29tcGlsZSBhIGJpbmFyeSB3aXRoIGdjYyBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24uCiBwcm9maWxlLW9wdDoKQEAgLTQ2OCwxMSArNDg4LDUzIEBACiBidWlsZF9hbGxfdXNlX3Byb2ZpbGU6CiAJJChNQUtFKSBhbGwgQ0ZMQUdTPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKIAorIyBDb21waWxlIGFuZCBydW4gd2l0aCBnY292CisuUEhPTlk9Y292ZXJhZ2UgY292ZXJhZ2UtbGNvdiBjb3ZlcmFnZS1yZXBvcnQKIGNvdmVyYWdlOgogCUBlY2hvICJCdWlsZGluZyB3aXRoIHN1cHBvcnQgZm9yIGNvdmVyYWdlIGNoZWNraW5nOiIKLQkkKE1BS0UpIGNsZWFuCisJJChNQUtFKSBjbGVhbiBwcm9maWxlLXJlbW92YWwKIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtTzAgLXBnIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIgTElCUz0iJChMSUJTKSAtbGdjb3YiCiAKK2NvdmVyYWdlLWxjb3Y6CisJQGVjaG8gIkNyZWF0aW5nIENvdmVyYWdlIEhUTUwgcmVwb3J0IHdpdGggTENPVjoiCisJQHJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlAcm0gLXJmICQoQ09WRVJBR0VfUkVQT1JUKQorCUBsY292IC0tY2FwdHVyZSAtLWRpcmVjdG9yeSAkKGFic19idWlsZGRpcikgXAorCSAgICAtLWJhc2UtZGlyZWN0b3J5ICQocmVhbHBhdGggJChhYnNfYnVpbGRkaXIpKSBcCisJICAgIC0tcGF0aCAkKHJlYWxwYXRoICQoYWJzX3NyY2RpcikpIFwKKwkgICAgLS1vdXRwdXQtZmlsZSAkKENPVkVSQUdFX0lORk8pCisJOiAjIHJlbW92ZSAzcmQgcGFydHkgbW9kdWxlcyBhbmQgc3lzdGVtIGhlYWRlcnMKKwlAbGNvdiAtLXJlbW92ZSAkKENPVkVSQUdFX0lORk8pIFwKKwkgICAgJyovTW9kdWxlcy9fY3R5cGVzL2xpYmZmaSovKicgXAorCSAgICAnKi9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjLyonIFwKKwkgICAgJyovTW9kdWxlcy9leHBhdC8qJyBcCisJICAgICcqL01vZHVsZXMvemxpYi8qJyBcCisJICAgICcqL0luY2x1ZGUvKicgXAorCSAgICAnL3Vzci9pbmNsdWRlLyonIFwKKwkgICAgJy91c3IvbG9jYWwvaW5jbHVkZS8qJyBcCisJICAgIC0tb3V0cHV0LWZpbGUgJChDT1ZFUkFHRV9JTkZPKQorCUBnZW5odG1sICQoQ09WRVJBR0VfSU5GTykgLS1vdXRwdXQtZGlyZWN0b3J5ICQoQ09WRVJBR0VfUkVQT1JUKSBcCisJICAgICQoQ09WRVJBR0VfUkVQT1JUX09QVElPTlMpCisJQGVjaG8KKwlAZWNobyAibGNvdiByZXBvcnQgYXQgJChDT1ZFUkFHRV9SRVBPUlQpL2luZGV4Lmh0bWwiCisJQGVjaG8KKworY292ZXJhZ2UtcmVwb3J0OgorCTogIyBmb3JjZSByZWJ1aWxkaW5nIG9mIHBhcnNlciBhbmQgaW1wb3J0bGliCisJQHRvdWNoICQoR1JBTU1BUl9JTlBVVCkKKwlAdG91Y2ggJChzcmNkaXIpL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQorCTogIyBidWlsZCB3aXRoIGNvdmVyYWdlIGluZm8KKwkkKE1BS0UpIGNvdmVyYWdlCisJOiAjIHJ1biB0ZXN0cywgaWdub3JlIGZhaWx1cmVzCisJJChURVNUUlVOTkVSKSAkKFRFU1RPUFRTKSB8fCB0cnVlCisJOiAjIGJ1aWxkIGxjb3YgcmVwb3J0CisJJChNQUtFKSBjb3ZlcmFnZS1sY292CisKKyMgUnVuICJBcmd1bWVudCBDbGluaWMiIG92ZXIgYWxsIHNvdXJjZSBmaWxlcworIyAoZGVwZW5kcyBvbiBweXRob24gaGF2aW5nIGFscmVhZHkgYmVlbiBidWlsdCkKKy5QSE9OWT1jbGluaWMKK2NsaW5pYzogJChCVUlMRFBZVEhPTikKKwkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAuL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkgLS1tYWtlCiAKICMgQnVpbGQgdGhlIGludGVycHJldGVyCiAkKEJVSUxEUFlUSE9OKToJTW9kdWxlcy9weXRob24ubyAkKExJQlJBUlkpICQoTERMSUJSQVJZKSAkKFBZM0xJQlJBUlkpCkBAIC00ODQsOCArNTQ2LDE4IEBACiAjIENyZWF0ZSBidWlsZCBkaXJlY3RvcnkgYW5kIGdlbmVyYXRlIHRoZSBzeXNjb25maWcgYnVpbGQtdGltZSBkYXRhIHRoZXJlLgogIyBweWJ1aWxkZGlyLnR4dCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYnVpbGQgZGlyIGFuZCBpcyB1c2VkIGZvcgogIyBzeXMucGF0aCBmaXh1cCAtLSBzZWUgTW9kdWxlcy9nZXRwYXRoLmMuCisjIFNpbmNlIHRoaXMgc3RlcCBydW5zIGJlZm9yZSBzaGFyZWQgbW9kdWxlcyBhcmUgYnVpbHQsIHRyeSB0byBhdm9pZCBib290c3RyYXAKKyMgcHJvYmxlbXMgYnkgY3JlYXRpbmcgYSBkdW1teSBweWJ1aWxkZGlyLnR4dCBqdXN0IHRvIGFsbG93IGludGVycHJldGVyCisjIGluaXRpYWxpemF0aW9uIHRvIHN1Y2NlZWQuICBJdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGdlbmVyYXRlLXBvc2l4LXZhcnMKKyMgb3IgcmVtb3ZlZCBpbiBjYXNlIG9mIGZhaWx1cmUuCiBweWJ1aWxkZGlyLnR4dDogJChCVUlMRFBZVEhPTikKLQkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtUyAtbSBzeXNjb25maWcgLS1nZW5lcmF0ZS1wb3NpeC12YXJzCisJQGVjaG8gIm5vbmUiID4gLi9weWJ1aWxkZGlyLnR4dAorCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1TIC1tIHN5c2NvbmZpZyAtLWdlbmVyYXRlLXBvc2l4LXZhcnMgO1wKKwlpZiB0ZXN0ICQkPyAtbmUgMCA7IHRoZW4gXAorCQllY2hvICJnZW5lcmF0ZS1wb3NpeC12YXJzIGZhaWxlZCIgOyBcCisJCXJtIC1mIC4vcHlidWlsZGRpci50eHQgOyBcCisJCWV4aXQgMSA7IFwKKwlmaQogCiAjIEJ1aWxkIHRoZSBzaGFyZWQgbW9kdWxlcwogIyBVbmRlciBHTlUgbWFrZSwgTUFLRUZMQUdTIGFyZSBzb3J0ZWQgYW5kIG5vcm1hbGl6ZWQ7IHRoZSAncycgZm9yCkBAIC02NDYsNiArNzE4LDggQEAKIE1vZHVsZXMvX3Rlc3RlbWJlZC5vOiAkKHNyY2RpcikvTW9kdWxlcy9fdGVzdGVtYmVkLmMKIAkkKE1BSU5DQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvX3Rlc3RlbWJlZC5jCiAKK01vZHVsZXMvX3NyZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9fc3JlLmMgJChzcmNkaXIpL01vZHVsZXMvc3JlLmggJChzcmNkaXIpL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oICQoc3JjZGlyKS9Nb2R1bGVzL3NyZV9saWIuaAorCiBNb2R1bGVzL3Bvc2l4bW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuaAogCiBNb2R1bGVzL2dycG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9ncnBtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCkBAIC03MTMsMjcgKzc4NywzMSBAQAogCQkJCSQoc3JjZGlyKS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKIAogQllURVNUUl9ERVBTID0gXAotCQkkKHNyY2RpcikvSW5jbHVkZS9ieXRlc19tZXRob2RzLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jdHlwZS5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2VxLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvam9pbi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCiAKLVVOSUNPREVfREVQUyA9ICQoQllURVNUUl9ERVBTKSBcCitVTklDT0RFX0RFUFMgPSBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2NvdW50LmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCiAKQEAgLTc1MSw5ICs4MjksNiBAQAogCiBQeXRob24vY2V2YWwubzogJChPUENPREVUQVJHRVRTX0gpICQoc3JjZGlyKS9QeXRob24vY2V2YWxfZ2lsLmgKIAotUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLm86ICQoc3JjZGlyKS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYyBcCi0JCQkJJChCWVRFU1RSX0RFUFMpCi0KIFB5dGhvbi9mcm96ZW4ubzogUHl0aG9uL2ltcG9ydGxpYi5oCiAKIE9iamVjdHMvdHlwZW9iamVjdC5vOiBPYmplY3RzL3R5cGVzbG90cy5pbmMKQEAgLTgyMyw2ICs4OTgsNyBAQAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWRlYnVnLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWVycm9ycy5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHlmcGUuaCBcCisJCSQoc3JjZGlyKS9JbmNsdWRlL3B5aGFzaC5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHltYXRoLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWdldG9wdC5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHltYWNyby5oIFwKQEAgLTkwMSwxNiArOTc3LDM4IEBACiAKIFFVSUNLVEVTVE9QVFM9CSQoVEVTVE9QVFMpIC14IHRlc3Rfc3VicHJvY2VzcyB0ZXN0X2lvIHRlc3RfbGliMnRvMyBcCiAJCXRlc3RfbXVsdGlieXRlY29kZWMgdGVzdF91cmxsaWIyX2xvY2FsbmV0IHRlc3RfaXRlcnRvb2xzIFwKLQkJdGVzdF9tdWx0aXByb2Nlc3NpbmcgdGVzdF9tYWlsYm94IHRlc3Rfc29ja2V0IHRlc3RfcG9sbCBcCisJCXRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsgdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24gXAorCQl0ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyIFwKKwkJdGVzdF9tYWlsYm94IHRlc3Rfc29ja2V0IHRlc3RfcG9sbCBcCiAJCXRlc3Rfc2VsZWN0IHRlc3RfemlwZmlsZSB0ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcwogcXVpY2t0ZXN0OglhbGwgcGxhdGZvcm0KIAkJJChURVNUUlVOTkVSKSAkKFFVSUNLVEVTVE9QVFMpCiAKIAotaW5zdGFsbDogYWx0aW5zdGFsbCBiaW5pbnN0YWxsIG1hbmluc3RhbGwKK2luc3RhbGw6IEBGUkFNRVdPUktJTlNUQUxMRklSU1RAIGNvbW1vbmluc3RhbGwgYmluaW5zdGFsbCBtYW5pbnN0YWxsIEBGUkFNRVdPUktJTlNUQUxMTEFTVEAKKwlpZiB0ZXN0ICJ4JChFTlNVUkVQSVApIiAhPSAieG5vIiAgOyB0aGVuIFwKKwkJY2FzZSAkKEVOU1VSRVBJUCkgaW4gXAorCQkJdXBncmFkZSkgZW5zdXJlcGlwPSItLXVwZ3JhZGUiIDs7IFwKKwkJCWluc3RhbGx8KikgZW5zdXJlcGlwPSIiIDs7IFwKKwkJZXNhYzsgXAorCQkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtbSBlbnN1cmVwaXAgXAorCQkJJCRlbnN1cmVwaXAgLS1yb290PSQoREVTVERJUikvIDsgXAorCWZpCiAKLWFsdGluc3RhbGw6CUBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1RAIGFsdGJpbmluc3RhbGwgbGliaW5zdGFsbCBpbmNsaW5zdGFsbCBsaWJhaW5zdGFsbCBcCi0gICAgICAgICAgICAgICAgc2hhcmVkaW5zdGFsbCBvbGRzaGFyZWRpbnN0YWxsIGFsdG1hbmluc3RhbGwgQEZSQU1FV09SS0FMVElOU1RBTExMQVNUQAorYWx0aW5zdGFsbDogY29tbW9uaW5zdGFsbAorCWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljYXNlICQoRU5TVVJFUElQKSBpbiBcCisJCQl1cGdyYWRlKSBlbnN1cmVwaXA9Ii0tYWx0aW5zdGFsbCAtLXVwZ3JhZGUiIDs7IFwKKwkJCWluc3RhbGx8KikgZW5zdXJlcGlwPSItLWFsdGluc3RhbGwiIDs7IFwKKwkJZXNhYzsgXAorCQkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtbSBlbnN1cmVwaXAgXAorCQkJJCRlbnN1cmVwaXAgLS1yb290PSQoREVTVERJUikvIDsgXAorCWZpCisKK2NvbW1vbmluc3RhbGw6ICBARlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUQCBcCisJCWFsdGJpbmluc3RhbGwgbGliaW5zdGFsbCBpbmNsaW5zdGFsbCBsaWJhaW5zdGFsbCBcCisJCXNoYXJlZGluc3RhbGwgb2xkc2hhcmVkaW5zdGFsbCBhbHRtYW5pbnN0YWxsIFwKKwkJQEZSQU1FV09SS0FMVElOU1RBTExMQVNUQAogCiAjIEluc3RhbGwgc2hhcmVkIGxpYnJhcmllcyBlbmFibGVkIGJ5IFNldHVwCiBERVNURElSUz0JJChleGVjX3ByZWZpeCkgJChMSUJESVIpICQoQklOTElCREVTVCkgJChERVNUU0hBUkVEKQpAQCAtOTM1LDcgKzEwMzMsNyBAQAogCiAjIEluc3RhbGwgdGhlIGludGVycHJldGVyIHdpdGggJChWRVJTSU9OKSBhZmZpeGVkCiAjIFRoaXMgZ29lcyBpbnRvICQoZXhlY19wcmVmaXgpCi1hbHRiaW5pbnN0YWxsOiAkKEJVSUxEUFlUSE9OKQorYWx0YmluaW5zdGFsbDogJChCVUlMRFBZVEhPTikgQEZSQU1FV09SS1BZVEhPTldACiAJQGZvciBpIGluICQoQklORElSKSAkKExJQkRJUik7IFwKIAlkbyBcCiAJCWlmIHRlc3QgISAtZCAkKERFU1RESVIpJCRpOyB0aGVuIFwKQEAgLTk0NCwxNCArMTA0MiwxOCBAQAogCQllbHNlCXRydWU7IFwKIAkJZmk7IFwKIAlkb25lCi0JJChJTlNUQUxMX1BST0dSQU0pICQoQlVJTERQWVRIT04pICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpCisJaWYgdGVzdCAiJChQWVRIT05GUkFNRVdPUktESVIpIiA9ICJuby1mcmFtZXdvcmsiIDsgdGhlbiBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkKEJVSUxEUFlUSE9OKSAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKSQoRVhFKTsgXAorCWVsc2UgXAorCQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIE1hYy9weXRob253ICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpOyBcCisJZmkKIAktaWYgdGVzdCAiJChWRVJTSU9OKSIgIT0gIiQoTERWRVJTSU9OKSI7IHRoZW4gXAogCQlpZiB0ZXN0IC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKSAtbyAtaCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSk7IFwKIAkJdGhlbiBybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSk7IFwKIAkJZmk7IFwKIAkJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIHB5dGhvbiQoTERWRVJTSU9OKSQoRVhFKSBweXRob24kKFZFUlNJT04pJChFWEUpKTsgXAogCWZpCi0JaWYgdGVzdCAtZiAkKExETElCUkFSWSk7IHRoZW4gXAorCWlmIHRlc3QgLWYgJChMRExJQlJBUlkpICYmIHRlc3QgIiQoUFlUSE9ORlJBTUVXT1JLRElSKSIgPSAibm8tZnJhbWV3b3JrIiA7IHRoZW4gXAogCQlpZiB0ZXN0IC1uICIkKERMTExJQlJBUlkpIiA7IHRoZW4gXAogCQkJJChJTlNUQUxMX1NIQVJFRCkgJChETExMSUJSQVJZKSAkKERFU1RESVIpJChCSU5ESVIpOyBcCiAJCWVsc2UgXApAQCAtOTY1LDYgKzEwNjcsMTIgQEAKIAkJZmk7IFwKIAllbHNlCXRydWU7IFwKIAlmaQorCWlmIHRlc3QgIngkKExJUE9fMzJCSVRfRkxBR1MpIiAhPSAieCIgOyB0aGVuIFwKKwkJcm0gLWYgJChERVNURElSKSQoQklORElSKXB5dGhvbiQoVkVSU0lPTiktMzIkKEVYRSk7IFwKKwkJbGlwbyAkKExJUE9fMzJCSVRfRkxBR1MpIFwKKwkJCS1vdXRwdXQgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pLTMyJChFWEUpIFwKKwkJCSQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKTsgXAorCWZpCiAKIGJpbmluc3RhbGw6IGFsdGJpbmluc3RhbGwKIAktaWYgdGVzdCAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMkKEVYRSkgLW8gLWggJChERVNURElSKSQoQklORElSKS9weXRob24zJChFWEUpOyBcCkBAIC05OTAsNiArMTA5OCwxMCBAQAogCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyAydG8zLSQoVkVSU0lPTikgMnRvMykKIAktcm0gLWYgJChERVNURElSKSQoQklORElSKS9weXZlbnYKIAkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgcHl2ZW52LSQoVkVSU0lPTikgcHl2ZW52KQorCWlmIHRlc3QgIngkKExJUE9fMzJCSVRfRkxBR1MpIiAhPSAieCIgOyB0aGVuIFwKKwkJcm0gLWYgJChERVNURElSKSQoQklORElSKS9weXRob24zLTMyJChFWEUpOyBcCisJCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyBweXRob24kKFZFUlNJT04pLTMyJChFWEUpIHB5dGhvbjMtMzIkKEVYRSkpIFwKKwlmaQogCiAjIEluc3RhbGwgdGhlIHZlcnNpb25lZCBtYW51YWwgcGFnZQogYWx0bWFuaW5zdGFsbDoKQEAgLTEwMjIsMjggKzExMzQsMzEgQEAKIAkJdGVzdC9pbWdoZHJkYXRhIFwKIAkJdGVzdC9zdWJwcm9jZXNzZGF0YSB0ZXN0L3NuZGhkcmRhdGEgdGVzdC9zdXBwb3J0IFwKIAkJdGVzdC90cmFjZWRtb2R1bGVzIHRlc3QvZW5jb2RlZF9tb2R1bGVzIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncyBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucyBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28gXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMSBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMiBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIvZm9vIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MSBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDEvcGFyZW50IFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QyIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QyL3BhcmVudC9jaGlsZCBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QzL3BhcmVudCBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkIFwKLSAgICAgICAgICAgICAgICB0ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UgXAotICAgICAgICAgICAgICAgIHRlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2ZvbyBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZyBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28gXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3BvcnRpb24xIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMS9mb28gXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3BvcnRpb24yIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMi9mb28gXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QxIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QxL3BhcmVudC9jaGlsZCBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QyL3BhcmVudCBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50L2NoaWxkIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MyBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50IFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQgXAorICAgICAgICAgICAgICAgIHRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZSBcCisgICAgICAgICAgICAgICAgdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdCBcCisJCWFzeW5jaW8gXAorCQl0ZXN0L3Rlc3RfYXN5bmNpbyBcCiAJCWNvbGxlY3Rpb25zIGNvbmN1cnJlbnQgY29uY3VycmVudC9mdXR1cmVzIGVuY29kaW5ncyBcCiAJCWVtYWlsIGVtYWlsL21pbWUgdGVzdC90ZXN0X2VtYWlsIHRlc3QvdGVzdF9lbWFpbC9kYXRhIFwKKwkJZW5zdXJlcGlwIGVuc3VyZXBpcC9fYnVuZGxlZCBcCiAJCWh0bWwganNvbiB0ZXN0L3Rlc3RfanNvbiBodHRwIGRibSB4bWxycGMgXAogCQlzcWxpdGUzIHNxbGl0ZTMvdGVzdCBcCiAJCWxvZ2dpbmcgY3N2IHdzZ2lyZWYgdXJsbGliIFwKQEAgLTExNjEsMTAgKzEyNzYsMTkgQEAKIAlmaTsgXAogCWNkICQoc3JjZGlyKS9MaWIvJChQTEFURElSKTsgJChSVU5TSEFSRUQpIC4vcmVnZW4KIAotcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbiBNaXNjL3B5dGhvbi1jb25maWcuc2gKIAkjIFN1YnN0aXR1dGlvbiBoYXBwZW5zIGhlcmUsIGFzIHRoZSBjb21wbGV0ZWx5LWV4cGFuZGVkIEJJTkRJUgogCSMgaXMgbm90IGF2YWlsYWJsZSBpbiBjb25maWd1cmUKLQlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcKKwlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcucHkKKwkjIFJlcGxhY2UgbWFrZWZpbGUgY29tcGF0LiB2YXJpYWJsZSByZWZlcmVuY2VzIHdpdGggc2hlbGwgc2NyaXB0IGNvbXBhdC4gb25lczsgJChWQVIpIC0+ICR7VkFSfQorCXNlZCAtZSAncyxcJCQoXChbQS1aYS16MC05X10qXCkpLFwkJFx7XDFcfSxnJyA8IE1pc2MvcHl0aG9uLWNvbmZpZy5zaCA+cHl0aG9uLWNvbmZpZworCSMgT24gRGFyd2luLCBhbHdheXMgdXNlIHRoZSBweXRob24gdmVyc2lvbiBvZiB0aGUgc2NyaXB0LCB0aGUgc2hlbGwKKwkjIHZlcnNpb24gZG9lc24ndCB1c2UgdGhlIGNvbXBpbGVyIGN1c3RvbWl6YXRpb25zIHRoYXQgYXJlIHByb3ZpZGVkCisJIyBpbiBweXRob24gKF9vc3hfc3VwcG9ydC5weSkuCisJaWYgdGVzdCBgdW5hbWUgLXNgID0gRGFyd2luOyB0aGVuIFwKKwkJY3AgcHl0aG9uLWNvbmZpZy5weSBweXRob24tY29uZmlnOyBcCisJZmkKKwogCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZmlsZXMKIElOQ0xESVJTVE9NQUtFPSQoSU5DTFVERURJUikgJChDT05GSU5DTFVERURJUikgJChJTkNMVURFUFkpICQoQ09ORklOQ0xVREVQWSkKQEAgLTEyMjIsOCArMTM0Niw4IEBACiAJJChJTlNUQUxMX0RBVEEpIE1pc2MvcHl0aG9uLnBjICQoREVTVERJUikkKExJQlBDKS9weXRob24tJChWRVJTSU9OKS5wYwogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9Nb2R1bGVzL21ha2VzZXR1cCAkKERFU1RESVIpJChMSUJQTCkvbWFrZXNldHVwCiAJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL2luc3RhbGwtc2ggJChERVNURElSKSQoTElCUEwpL2luc3RhbGwtc2gKKwkkKElOU1RBTExfU0NSSVBUKSBweXRob24tY29uZmlnLnB5ICQoREVTVERJUikkKExJQlBMKS9weXRob24tY29uZmlnLnB5CiAJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKS1jb25maWcKLQlybSBweXRob24tY29uZmlnCiAJQGlmIFsgLXMgTW9kdWxlcy9weXRob24uZXhwIC1hIFwKIAkJImBlY2hvICQoTUFDSERFUCkgfCBzZWQgJ3MvXlwoLi4uXCkuKi9cMS8nYCIgPSAiYWl4IiBdOyB0aGVuIFwKIAkJZWNobzsgZWNobyAiSW5zdGFsbGluZyBzdXBwb3J0IGZpbGVzIGZvciBidWlsZGluZyBzaGFyZWQgZXh0ZW5zaW9uIG1vZHVsZXMgb24gQUlYOiI7IFwKQEAgLTEzMDUsNyArMTQyOSwxNCBAQAogZnJhbWV3b3JraW5zdGFsbGFwcHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbGFwcHMgREVTVERJUj0iJChERVNURElSKSIKIAotIyBUaGlzIGluc3RhbGwgdGhlIHVuaXggcHl0aG9uIGFuZCBweXRob253IHRvb2xzIGluIC91c3IvbG9jYWwvYmluCisjIEJ1aWxkIHRoZSBib290c3RyYXAgZXhlY3V0YWJsZSB0aGF0IHdpbGwgc3Bhd24gdGhlIGludGVycHJldGVyIGluc2lkZQorIyBhbiBhcHAgYnVuZGxlIHdpdGhpbiB0aGUgZnJhbWV3b3JrLiAgVGhpcyBhbGxvd3MgdGhlIGludGVycHJldGVyIHRvCisjIHJ1biBPUyBYIEdVSSBBUElzLgorZnJhbWV3b3JrcHl0aG9udzoKKwljZCBNYWMgJiYgJChNQUtFKSBweXRob253CisKKyMgVGhpcyBpbnN0YWxscyB0aGUgcHl0aG9uKiBhbmQgb3RoZXIgYmluIHN5bWxpbmtzIGluICRwcmVmaXgvYmluIG9yIGluCisjIGEgYmluIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgZnJhbWV3b3JrIHJvb3QKIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbHVuaXh0b29scyBERVNURElSPSIkKERFU1RESVIpIgogCkBAIC0xMzcxLDYgKzE1MDIsNyBAQAogCiAjIFRvdWNoIGdlbmVyYXRlZCBmaWxlcwogdG91Y2g6CisJY2QgJChzcmNkaXIpOyBcCiAJaGcgLS1jb25maWcgZXh0ZW5zaW9ucy50b3VjaD1Ub29scy9oZy9oZ3RvdWNoLnB5IHRvdWNoIC12CiAKICMgU2FuaXRhdGlvbiB0YXJnZXRzIC0tIGNsZWFuIGxlYXZlcyBsaWJyYXJpZXMsIGV4ZWN1dGFibGVzIGFuZCB0YWdzCkBAIC0xNDAzLDYgKzE1MzUsOCBAQAogCiBwcm9maWxlLXJlbW92YWw6CiAJZmluZCAuIC1uYW1lICcqLmdjPz8nIC1leGVjIHJtIC1mIHt9ICc7JworCXJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCiAKIGNsb2JiZXI6IGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCS1ybSAtZiAkKEJVSUxEUFlUSE9OKSAkKFBHRU4pICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoRExMTElCUkFSWSkgXApAQCAtMTQxMCw2ICsxNTQ0LDcgQEAKIAkJY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgcHljb25maWcuaCBNb2R1bGVzL2NvbmZpZy5jCiAJLXJtIC1yZiBidWlsZCBwbGF0Zm9ybQogCS1ybSAtcmYgJChQWVRIT05GUkFNRVdPUktESVIpCisJLXJtIC1mIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZwogCiAjIE1ha2UgdGhpbmdzIGV4dHJhIGNsZWFuLCBiZWZvcmUgbWFraW5nIGEgZGlzdHJpYnV0aW9uOgogIyByZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcywgZXZlbiBNYWtlZmlsZVsucHJlXQpAQCAtMTQ4MSw3ICsxNjE2LDcgQEAKIC5QSE9OWTogZnJhbWV3b3JraW5zdGFsbCBmcmFtZXdvcmtpbnN0YWxsZnJhbWV3b3JrIGZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUKIC5QSE9OWTogZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzCiAuUEhPTlk6IGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHMgcmVjaGVjayBhdXRvY29uZiBjbGVhbiBjbG9iYmVyIGRpc3RjbGVhbgotLlBIT05ZOiBzbWVsbHkgZnVubnkgcGF0Y2hjaGVjayB0b3VjaCBhbHRtYW5pbnN0YWxsCisuUEhPTlk6IHNtZWxseSBmdW5ueSBwYXRjaGNoZWNrIHRvdWNoIGFsdG1hbmluc3RhbGwgY29tbW9uaW5zdGFsbAogLlBIT05ZOiBnZGJob29rcwogCiAjIElGIFlPVSBQVVQgQU5ZVEhJTkcgSEVSRSBJVCBXSUxMIEdPIEFXQVkKZGlmZiAtLWdpdCBhL01pc2MvQUNLUyBiL01pc2MvQUNLUwppbmRleCBkMWViYmE3Li4zZjRjY2NmIDEwMDY0NAotLS0gYS9NaXNjL0FDS1MKKysrIGIvTWlzYy9BQ0tTCkBAIC0xNywxOSArMTcsMjUgQEAKIERhdmlkIEFicmFoYW1zCiBNYXJjIEFicmFtb3dpdHoKIFJvbiBBZGFtCitBbnRvbiBBZmFuYXN5ZXYKIEFsaSBBZnNoYXIKK05pdGlrYSBBZ2Fyd2FsCiBKaW0gQWhsc3Ryb20KIEZhcmhhbiBBaG1hZAogTWF0dGhldyBBaHJlbnMKIE5pciBBaWRlcworQWtpcmEKIFlhbml2IEFrbmluCiBKeXJraSBBbGFrdWlqYWxhCiBTdGV2ZSBBbGV4YW5kZXIKIEZyZWQgQWxsZW4KK0plZmYgQWxsZW4KIFJheSBBbGxlbgogQmlsbHkgRy4gQWxsaWUKIEtldmluIEFsdGlzCitTa3lsZXIgTGVpZ2ggQW1hZG9yCiBKb2UgQW1lbnRhCitSb3NlIEFtZXMKIEEuIEFtb3Jvc28KIE1hcmsgQW5hY2tlcgogU2hhc2h3YXQgQW5hbmQKQEAgLTU3LDYgKzYzLDcgQEAKIERvbm92YW4gQmFhcmRhCiBBcm5lIEJhYmVuaGF1c2VyaGVpZGUKIEF0dGlsYSBCYWJvCitNYXR0IEJhY2htYW5uCiBNYXJjaW4gQmFjaHJ5CiBBbGZvbnNvIEJhY2llcm8KIER3YXluZSBCYWlsZXkKQEAgLTcxLDYgKzc4LDcgQEAKIERhbmllbCBCYXJjbGF5CiBOaWNvbGFzIEJhcmVpbAogQ2hyaXMgQmFya2VyCitTdGV2ZW4gQmFya2VyCiBBbnRvbiBCYXJrb3Zza3kKIE5pY2sgQmFybmVzCiBRdWVudGluIEJhcm5lcwpAQCAtMTI0LDYgKzEzMiw3IEBACiBNaWNoYWVsIEJpcnR3ZWxsCiBTdHVhcnQgQmlzaG9wCiBSb3kgQml4bGVyCitEYW5pZWwgQmxhY2sKIEpvbmF0aGFuIEJsYWNrCiBSZW5hdWQgQmxhbmNoCiBNaWtlIEJsYW5kCkBAIC0xNDIsNiArMTUxLDcgQEAKIEZvcmVzdCBCb25kCiBHcmVnb3J5IEJvbmQKIE1hdGlhcyBCb3JkZXNlCitKb25hcyBCb3Jnc3Ryw7ZtCiBKdXJqZW4gQm9zCiBQZXRlciBCb3NjaAogRGFuIEJvc3dlbGwKQEAgLTE1Niw4ICsxNjYsMTAgQEAKIENocmlzdG9waGVyIEJyYW5ub24KIFRlcnJlbmNlIEJyYW5ub24KIEdlcm3DoW4gTS4gQnJhdm8KK1N2ZW4gQnJhdWNoCiBFcmlrIEJyYXkKIEJyaWFuIEJyYXppbAorRGVtaWFuIEJyZWNodAogRGF2ZSBCcmVubmFuCiBUb20gQnJpZGdtYW4KIEFudGhvbnkgQnJpZ2dzCkBAIC0xNjUsNiArMTc3LDcgQEAKIFRvYmlhcyBCcmluawogUmljaGFyZCBCcm9kaWUKIE1pY2hhZWwgQnJvZ2h0b24KK0FtbWFyIEJyb2hpCiBEYW5pZWwgQnJvdHNreQogSmVhbiBCcm91d2VycwogR2FyeSBTLiBCcm93bgpAQCAtMTc0LDkgKzE4NywxMSBAQAogRnJhbmNpc2NvIE1hcnTDrW4gQnJ1Z3XDqQogSWFuIEJydW50bGV0dAogRmxvcmlzIEJydXlub29naGUKK01hdHQgQnJ5YW50CiBTdGFuIEJ1YnJvdXNraQogRXJpayBkZSBCdWVnZXIKIEphbi1IZWluIELDvGhybWFuCitMYXJzIEJ1aXRpbmNrCiBEaWNrIEJ1bHRlcm1hbgogQmlsbCBCdW1nYXJuZXIKIEppbW15IEJ1cmdldHQKQEAgLTE4Niw2ICsyMDEsNyBAQAogQWxhc3RhaXIgQnVydAogVGFybiBXZWlzbmVyIEJ1cnRvbgogTGVlIEJ1c2J5CitLYXRoZXJpbmUgQnVzY2gKIFJhbHBoIEJ1dGxlcgogWmFjaCBCeXJuZQogTmljb2xhcyBDYWRvdQpAQCAtMTk3LDYgKzIxMyw3IEBACiBNaWtlIENhcmx0b24KIFBpZXJyZSBDYXJyaWVyCiBUZXJyeSBDYXJyb2xsCitFZHdhcmQgQ2F0bXVyCiBMb3JlbnpvIE0uIENhdHVjY2kKIERvbm4gQ2F2ZQogQ2hhcmxlcyBDYXphYm9uCkBAIC0yMjMsMTQgKzI0MCwxOCBAQAogQWxiZXJ0IENoaW4tQS1Zb3VuZwogQWRhbCBDaGlyaWxpdWMKIE1hdHQgQ2hpc2hvbG0KK0xpdGEgQ2hvCiBBbmRlcnMgQ2hyaWdzdHLDtm0KIFRvbSBDaHJpc3RpYW5zZW4KK1JlbmVlIENodQogVmFkaW0gQ2h1Z3Vub3YKIE1hdXJvIENpY29nbmluaQogRGF2aWQgQ2luZWdlCiBDcmFpZyBDaXRybwogR2lsbGVzIENpdmFyaW8KIENocmlzIENsYXJrCitEaWFuYSBDbGFya2UKK0xhdXJpZSBDbGFyay1NaWNoYWxlawogTWlrZSBDbGFya3NvbgogQW5kcmV3IENsZWdnCiBCcmFkIENsZW1lbnRzCkBAIC0yODgsMTIgKzMwOSwxNCBAQAogSm9uYXRoYW4gRGFzdGVlbAogUGllcnJlLVl2ZXMgRGF2aWQKIEEuIEplc3NlIEppcnl1IERhdmlzCitNZXJsaWpuIHZhbiBEZWVuCiBKb2huIERlR29vZAogTmVkIERlaWx5CiBWaW5jZW50IERlbGZ0CiBBcm5hdWQgRGVsb2JlbGxlCiBLb25yYWQgRGVsb25nCiBFcmlrIERlbWFpbmUKK01hcnRpbiBEZW5nbGVyCiBKb2huIERlbm5pcwogTC4gUGV0ZXIgRGV1dHNjaAogUm9nZXIgRGV2CkBAIC0zMjMsMTEgKzM0NiwxMyBAQAogSm9obiBEdUJvaXMKIFBhdWwgRHVib2lzCiBKYWNxdWVzIER1Y2Fzc2UKK0FuZHJlaSBEb3JpYW4gRHVtYQogR3JhaGFtIER1bXBsZXRvbgogUXVpbm4gRHVua2FuCiBSb2JpbiBEdW5uCiBMdWtlIER1bnN0YW4KIFZpcmdpbCBEdXByYXMKK0JydW5vIER1cHVpcwogQW5keSBEdXN0bWFuCiBHYXJ5IER1emFuCiBFdWdlbmUgRHZ1cmVjaGVuc2tpCkBAIC0zMzYsNiArMzYxLDcgQEAKIFdhbHRlciBEw7Zyd2FsZAogSGFucyBFY2thcmR0CiBSb2RvbHBobyBFY2toYXJkdAorVWxyaWNoIEVja2hhcmR0CiBEYXZpZCBFZGVsc29obgogSm9obiBFZG1vbmRzCiBHcmFudCBFZHdhcmRzCkBAIC0zNTAsNiArMzc2LDcgQEAKIERhdmlkIEVseQogSmVmZiBFcGxlcgogVG9tIEVwcGVybHkKK0fDtmtjZW4gRXJhc2xhbgogU3RvZmZlbCBFcmFzbXVzCiBKw7xyZ2VuIEEuIEVyaGFyZAogTWljaGFlbCBFcm5zdApAQCAtMzg3LDYgKzQxNCw3IEBACiBEYW4gRmlubmllCiBOaWxzIEZpc2NoYmVjawogRnJlZGVyaWsgRml4CitUb20gRmxhbmFnYW4KIE1hdHQgRmxlbWluZwogSGVybsOhbiBNYXJ0w61uZXogRm9mZmFuaQogQXJ0ZW0gRm9raW4KQEAgLTM5NCw2ICs0MjIsNyBAQAogTWljaGFlbCBGb29yZAogQW1hdXJ5IEZvcmdlb3QgZCdBcmMKIERvdWcgRm9ydAorQ2hyaXMgRm9zdGVyCiBKb2huIEZvdWh5CiBBbmRyZXcgRnJhbmNpcwogU3RlZmFuIEZyYW5rZQpAQCAtNDQ2LDYgKzQ3NSw3IEBACiBNYXR0IEdpdWNhCiBXaW0gR2xlbm4KIE1pY2hhZWwgR29kZXJiYXVlcgorSmVyb2VuIFZhbiBHb2V5CiBDaHJpc3RvcGggR29obGtlCiBUaW0gR29sZGVuCiBHdWlsaGVybWUgR29uw6dhbHZlcwpAQCAtNDY0LDcgKzQ5NCw3IEBACiBEYWcgR3J1bmVhdQogRmlsaXAgR3J1c3pjennFhHNraQogVGhvbWFzIEd1ZXR0bGVyCi1Baml0ZXNoIEd1cHRhCitBbnVqIEd1cHRhCiBNaWNoYWVsIEd1cmF2YWdlCiBMYXJzIEd1c3TDpGJlbAogVGhvbWFzIEfDvHR0bGVyCkBAIC00NzUsNiArNTA1LDcgQEAKIFJhc211cyBIYWhuCiBQZXRlciBIYWlnaHQKIFbDoWNsYXYgSGFpc21hbgorWmJpZ25pZXcgSGFsYXMKIFdhbGtlciBIYWxlIElWCiBCb2IgSGFsbGV5CiBKZXNzZSBIYWxsaW8KQEAgLTQ5MCw2ICs1MjEsNyBAQAogTHluZGEgSGFyZG1hbgogRGVyZWsgSGFybGFuZAogSmFzb24gSGFycGVyCitEYXZpZCBIYXJyaWdhbgogQnJpYW4gSGFycmluZwogSm9uYXRoYW4gSGFydGxleQogVHJhdmlzIEIuIEhhcnR3ZWxsCkBAIC01MDAsNiArNTMyLDcgQEAKIFJ5Y2hhcmRlIEhhd2tlcwogQmVuIEhheWRlbgogSm9jaGVuIEhheWVrCitUaW0gSGVhbmV5CiBIZW5yaWsgSGVpbWJ1ZXJnZXIKIENocmlzdGlhbiBIZWltZXMKIFRob21hcyBIZWxsZXIKQEAgLTUxOSw2ICs1NTIsNyBAQAogTWFnbnVzIEwuIEhldGxhbmQKIFJheW1vbmQgSGV0dGluZ2VyCiBLZXZhbiBIZXlkb24KK1dvdXRlciB2YW4gSGV5c3QKIEtlbHNleSBIaWdodG93ZXIKIEphc29uIEhpbGRlYnJhbmQKIFJpY2hpZSBIaW5kbGUKQEAgLTUzMiw2ICs1NjYsNyBAQAogQWxiZXJ0IEhvZmthbXAKIFRvbWFzIEhvZ2VyCiBKb25hdGhhbiBIb2dnCitLYW1pbGxhIEhvbGFuZGEKIFN0ZXZlIEhvbGRlbgogQWtpbnRheW8gSG9sZGVyCiBUaG9tYXMgSG9sZW5zdGVpbgpAQCAtNTYwLDYgKzU5NSw3IEBACiBKaW0gSHVndW5pbgogR3JlZyBIdW1waHJleXMKIEVyaWMgSHVzcworTmVoYWwgSHVzc2FpbgogVGFpaHl1biBId2FuZwogSmVyZW15IEh5bHRvbgogTHVkd2lnIEjDpGhuZQpAQCAtNTcyLDYgKzYwOCw3IEBACiBMYXJzIEltbWlzY2gKIEJvYmJ5IEltcG9sbG9uaWEKIE1lYWRvciBJbmdlCitQZXRlciBJbmdlYnJldHNvbgogVG9ueSBJbmdyYWxkaQogSm9obiBJbnRlcnJhbnRlCiBCb2IgSXBwb2xpdG8KQEAgLTYwNSw2ICs2NDIsNyBAQAogRnJlZHJpayBKb2hhbnNzb24KIEdyZWdvcnkgSy4gSm9obnNvbgogS2VudCBKb2huc29uCitNaWNoYWVsIEpvaG5zb24KIFNpbW9uIEpvaG5zdG9uCiBNYXR0IEpvaW5lcgogVGhvbWFzIEpvbGxhbnMKQEAgLTYyNCwxMSArNjYyLDEzIEBACiBTYXJhaCBLLgogU3VubnkgSwogQm9odXNsYXYgS2FicmRhCitBbGV4ZXkgS2FjaGF5ZXYKIEJvYiBLYWhuCiBLdXJ0IEIuIEthaXNlcgogVGFtaXRvIEthaml5YW1hCiBKYW4gS2FsaXN6ZXdza2kKIFBldGVyIHZhbiBLYW1wZW4KK0phbiBLYW5pcwogUmFmZSBLYXBsYW4KIEphY29iIEthcGxhbi1Nb3NzCiBKYW5uZSBLYXJpbGEKQEAgLTY0NSwxMCArNjg1LDEyIEBACiBNYWdudXMgS2Vzc2xlcgogTGF3cmVuY2UgS2VzdGVsb290CiBWaXZlayBLaGVyYQorRGhpcnUgS2hvbGlhCiBNYWRzIEtpaWxlcmljaAogSmFzb24gS2lsbGVuCiBKYW4gS2ltCiBUYWVrIEpvbyBLaW0KK1NhbSBLaW1icmVsCiBXLiBUcmV2b3IgS2luZwogUGF1bCBLaXBwZXMKIFN0ZXZlIEtpcnNjaApAQCAtNzAxLDcgKzc0Myw5IEBACiBFcm5vIEt1dXNlbGEKIFJvc3MgTGFnZXJ3YWxsCiBDYW1lcm9uIExhaXJkCitEYXZpZCBMYW0KIFRob21hcyBMYW1iCitWYWxlcmllIExhbWJlcnQKIEplYW4tQmFwdGlzdGUgIkppYmEiIExhbXkKIFJvbmFuIExhbXkKIFRvcnN0ZW4gTGFuZHNjaG9mZgpAQCAtNzE5LDYgKzc2Myw4IEBACiBDaHJpcyBMYXdyZW5jZQogQnJpYW4gTGVhaXIKIE1hdGhpZXUgTGVkdWMtSGFtZWwKK0FtYW5kaW5lIExlZQorQW50b255IExlZQogQ2hyaXN0b3BoZXIgTGVlCiBJbnllb2wgTGVlCiBKYW1lcyBMZWUKQEAgLTczOSw5ICs3ODUsMTEgQEAKIE1hdGV1c3ogTGVuaWsKIEpvaG4gTGVudG9uCiBLb3N0eWFudHluIExlc2NoZW5rbworQmVubm8gTGVzbGllCiBDaHJpc3RvcGhlciBUdXIgTGVzbmlld3NraS1MYWFzCiBBbGFpbiBMZXVmcm95CiBNYXJrIExldmluc29uCitNYXJrIExldml0dAogV2lsbGlhbSBMZXdpcwogQWtpcmEgTGkKIFh1YW5qaSBMaQpAQCAtNzY1LDE0ICs4MTMsMTcgQEAKIEFubmUgTG9yZAogVG9tIExvcmVkbwogSnVzdGluIExvdmUKK05lZCBKYWNrc29uIExvdmVseQogSmFzb24gTG93ZQogVG9ueSBMb3duZHMKIFJheSBMb3l6YWdhCitLYW5nLUhhbyAoS2VubnkpIEx1CiBMdWthcyBMdWVnCiBMb3JlbiBMdWtlCiBGcmVkcmlrIEx1bmRoCiBaaG9uZ3l1ZSBMdW8KIE1hcmsgTHV0egorVGFyYXMgTHlhcHVuCiBKaW0gTHluY2gKIE1pa2FlbCBMeW5ndmlnCiBNYXJ0aW4gdm9uIEzDtndpcwpAQCAtNzgzLDkgKzgzNCwxNCBAQAogVGltIE1hY0tlbnppZQogTmljayBNYWNsYXJlbgogRG9uIE1hY01pbGxlbgorVG9tYXN6IE1hxIdrb3dpYWsKK1dvbGZnYW5nIE1haWVyCiBTdGV2ZSBNYWpld3NraQorTWFyZWsgTWFqa293c2tpCiBHcnplZ29yeiBNYWthcmV3aWN6CiBEYXZpZCBNYWxjb2xtCitHcmVnIE1hbGNvbG0KK1dpbGxpYW0gTWFsbGFyZAogS2VuIE1hbmhlaW1lcgogVmxhZGltaXIgTWFyYW5nb3pvdgogQ29saW4gTWFyYwpAQCAtODA4LDcgKzg2NCw5IEBACiBEaWV0ZXIgTWF1cmVyCiBEYW5pZWwgTWF5CiBNYWRpc29uIE1heQorTHVjYXMgTWF5c3RyZQogQXJuYXVkIE1hemluCitNYXR0IE1jQ2x1cmUKIFJlYmVjY2EgTWNDcmVhcnkKIEtpcmsgTWNEb25hbGQKIENocmlzIE1jRG9ub3VnaApAQCAtODQ4LDYgKzkwNiw3IEBACiBEYW1pZW4gTWlsbGVyCiBKYXNvbiBWLiBNaWxsZXIKIEpheSBULiBNaWxsZXIKK0thdGllIE1pbGxlcgogUm9tYW4gTWlsbmVyCiBKdWxpZW4gTWlvdHRlCiBBbmRyaWkgVi4gTWlzaGtvdnNreWkKQEAgLTg1Nyw2ICs5MTYsNyBAQAogRmxvcmlhbiBNbGFkaXRzY2gKIERvdWcgTW9lbgogVGhlIERyYWdvbiBEZSBNb25zeW5lCitCYXN0aWVuIE1vbnRhZ25lCiBTa2lwIE1vbnRhbmFybwogUGV0ZXIgTW9vZHkKIFBhdWwgTW9vcmUKQEAgLTg2NCw2ICs5MjQsNyBAQAogQmVuIE1vcmdhbgogRGVyZWsgTW9ycgogSmFtZXMgQSBNb3JyaXNvbgorTWFydGluIE1vcnJpc29uCiBEZXJlayBNY1RhdmlzaCBNb3VuY2UKIEFsZXNzYW5kcm8gTW91cmEKIFBhYmxvIE1vdXpvCkBAIC04NzgsNiArOTM5LDcgQEAKIExvdWlzIE11bnJvCiBSLiBEYXZpZCBNdXJyYXkKIE1hdHRpIE3DpGtpCitKw7ZyZyBNw7xsbGVyCiBEYWxlIE5hZ2F0YQogSm9obiBOYWdsZQogVGFrYWhpcm8gTmFrYXlhbWEKQEAgLTkxNiw2ICs5NzgsNyBAQAogSmFtZXMgT2FrbGV5CiBFbGVuYSBPYXQKIEpvbiBPYmVyaGVpZGUKK01pbGFuIE9iZXJraXJjaAogUGFzY2FsIE9iZXJuZG9lcmZlcgogSmVmZnJleSBPbGxpZQogQWRhbSBPbHNlbgpAQCAtOTI1LDYgKzk4OCw3IEBACiBUb21hcyBPcHBlbHN0cnVwCiBKYXNvbiBPcmVuZG9yZmYKIERvdWdsYXMgT3JyCitXaWxsaWFtIE9ycgogTWljaGVsZSBPcnLDuQogT2xlZyBPc2hteWFuCiBEZW5pcyBTLiBPdGtpZGFjaApAQCAtOTQwLDYgKzEwMDQsOCBAQAogVG9kZCBSLiBQYWxtZXIKIEp1YW4gRGF2aWQgSWLDocOxZXogUGFsb21hcgogSmFuIFBhbHVzCitNYXJ0aW4gUGFudGVyCitNYXRoaWFzIFBhbnplbmLDtmNrCiBNLiBQYXBpbGxvbgogUGV0ZXIgUGFyZW50ZQogQWxleGFuZHJlIFBhcmVudGVhdQpAQCAtOTQ4LDYgKzEwMTQsNyBAQAogSGVpa2tpIFBhcnRhbmVuCiBIYXJyaSBQYXNhbmVuCiBHYcOrbCBQYXNncmltYXVkCitBc2hpc2ggTml0aW4gUGF0aWwKIFJhbmR5IFBhdXNjaAogU2FtdWVsZSBQZWRyb25pCiBKdXN0aW4gUGVlbApAQCAtOTY2LDggKzEwMzMsMTAgQEAKIEJlbmphbWluIFBldGVyc29uCiBKb2UgUGV0ZXJzb24KIENocmlzIFBldHJpbGxpCitSb3VtZW4gUGV0cm92CiBCam9ybiBQZXR0ZXJzZW4KIEp1c3RpbiBELiBQZXR0aXQKK0VzYSBQZXVoYQogUm9ubnkgUGZhbm5zY2htaWR0CiBHZW9mZiBQaGlsYnJpY2sKIEdhdnJpZSBQaGlsaXBzb24KQEAgLTk4MSwxMiArMTA1MCwxNiBAQAogRnJhbsOnb2lzIFBpbmFyZAogVG9tIFBpbmNrbmV5CiBaYWNoIFBpbmN1cworWmVybyBQaXJhZXVzCiBNaWNoYWVsIFBpb3Ryb3dza2kKIEFudG9pbmUgUGl0cm91CiBKZWFuLUZyYW7Dp29pcyBQacOpcm9ubmUKIE9sZWcgUGxha2hvdG55dWsKIFJlbWkgUG9pbnRlbAorSm9uIFBvbGVyCitBcmllbCBQb2xpYWsKIEd1aWxoZXJtZSBQb2xvCitJbGxpYSBQb2xvc3VraGluCiBNaWNoYWVsIFBvbXJhbmluZwogTWFydGluIFBvb2wKIEl1c3RpbiBQb3AKQEAgLTk5NywxOCArMTA3MCwyMiBAQAogUGF1bCBQcmVzY29kCiBEb25vdmFuIFByZXN0b24KIFBhdWwgUHJpY2UKK0l1bGlpYSBQcm9za3VybmlhCiBKeXJraSBQdWxsaWFpbmVuCiBTdGV2ZSBQdXJjZWxsCiBFZHVhcmRvIFDDqXJlegogRmVybmFuZG8gUMOpcmV6CiBQaWVycmUgUXVlbnRlbAogQnJpYW4gUXVpbmxhbgorS2V2aW4gSmluZyBRaXUKIEFuZGVycyBRdmlzdAogVGhvbWFzIFJhY2hlbAorUmFtIFJhY2h1bQogSsOpcsO0bWUgUmFkaXgKIEJ1cnRvbiBSYWRvbnMKIEplZmYgUmFtbmFuaQogQnJvZGllIFJhbworU2Vua28gUmFzaWMKIEFudHRpIFJhc2luZW4KIE5pa29sYXVzIFJhdGgKIFNyaWRoYXIgUmF0bmFrdW1hcgpAQCAtMTA0MSw3ICsxMTE4LDcgQEAKIEplYW4tQ2xhdWRlIFJpbWJhdWx0CiBWbGFkIFJpc2N1dGlhCiBXZXMgUmlzaGVsCi1EYW4gUml0aQorRGFuaWVsIFJpdGkKIEp1YW4gTS4gQmVsbG8gUml2YXMKIERhdmlkZSBSaXp6bwogQW50aG9ueSBSb2FjaApAQCAtMTEwMSw2ICsxMTc4LDcgQEAKIFR5IFNhcm5hCiBIdWdoIFNhc3NlCiBCb2IgU2F2YWdlCitEYXZlIFNhd3llcgogQmVuIFNheWVyCiBzYnQKIE1hcmNvIFNjYXRhZ2xpbmkKQEAgLTExMjIsNiArMTIwMCw3IEBACiBDaGFkIEouIFNjaHJvZWRlcgogQ2hyaXN0aWFuIFNjaHViZXJ0CiBTYW0gU2NodWxlbmJ1cmcKK0FuZHJlYXMgU2Nod2FiCiBTdGVmYW4gU2Nod2FyemVyCiBEaWV0bWFyIFNjaHdlcnRiZXJnZXIKIEZlZGVyaWNvIFNjaHdpbmR0CkBAIC0xMTQzLDYgKzEyMjIsNyBAQAogSGEgU2hhbwogTWFyayBTaGFubm9uCiBSaWNoYXJkIFNoYXBpcm8KK1ZhcnVuIFNoYXJtYQogVmxhZCBTaGNoZXJiaW5hCiBKdXN0aW4gU2hlZWh5CiBDaGFybGllIFNoZXBoZXJkCkBAIC0xMTcyLDYgKzEyNTIsNyBAQAogS3JhZ2VuIFNpdGFrZXIKIE1pY2hhZWwgU2xvYW4KIE5pY2sgU2xvYW4KK1bDoWNsYXYgxaBtaWxhdWVyCiBDaHJpc3RvcGhlciBTbWl0aAogRXJpYyBWLiBTbWl0aAogR3JlZ29yeSBQLiBTbWl0aApAQCAtMTIwMCw2ICsxMjgxLDcgQEAKIEFudGhvbnkgU3RhcmtzCiBPbGl2ZXIgU3RlZWxlCiBHcmVnIFN0ZWluCitNYXJlayBTdGVwbmlvd3NraQogQmFydWNoIFN0ZXJpbgogQ2hyaXMgU3Rlcm4KIEFsZXggU3Rld2FydApAQCAtMTIxMSw2ICsxMjkzLDcgQEAKIFNlcmhpeSBTdG9yY2hha2EKIEtlbiBTdG94CiBEYW4gU3Ryb21iZXJnCitEb25hbGQgU3R1ZmZ0CiBEYW5pZWwgU3R1dHpiYWNoCiBBbmRyZWFzIFN0w7xocmsKIENvbGluIFN1CkBAIC0xMjI1LDggKzEzMDgsMTAgQEAKIFBhdWwgU3dhcnR6CiBUaGVuYXVsdCBTeWx2YWluCiBQw6l0ZXIgU3phYsOzCitKb2huIFN6YWttZWlzdGVyCiBBbWlyIFN6ZWtlbHkKIEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzCitIaWRlYWtpIFRha2FoYXNoaQogSW5kcmEgVGFsaXAKIE5laWwgVGFsbGltCiBHZW9mZiBUYWx2b2xhCkBAIC0xMjM4LDYgKzEzMjMsNyBAQAogTW9udHkgVGF5bG9yCiBBbmF0b2x5IFRlY2h0b25pawogTWlraGFpbCBUZXJla2hvdgorVmljdG9yIFRlcnLDs24KIFJpY2hhcmQgTS4gVGV3CiBUb2JpYXMgVGhlbGVuCiBGw6l2cnkgVGhpYmF1bHQKQEAgLTEyNDUsNiArMTMzMSw3IEBACiBOaWNvbGFzIE0uIFRoacOpcnkKIEphbWVzIFRob21hcwogUm9iaW4gVGhvbWFzCitCcmlhbiBUaG9ybmUKIFN0ZXBoZW4gVGhvcm5lCiBKZXJlbXkgVGh1cmdvb2QKIEVyaWMgVGllZGVtYW5uCkBAIC0xMzI1LDYgKzE0MTIsNyBAQAogUm9kcmlnbyBTdGVpbm11bGxlciBXYW5kZXJsZXkKIEtlIFdhbmcKIEdyZWcgV2FyZAorVG9tIFdhcmRpbGwKIFphY2hhcnkgV2FyZQogSm9uYXMgV2FnbmVyCiBCYXJyeSBXYXJzYXcKQEAgLTEzNTAsNiArMTQzOCw3IEBACiBGZWxpeCBXaWVtYW5uCiBHZXJyeSBXaWVuZXIKIEZyYW5rIFdpZXJ6Ymlja2kKK1NhbnRvc28gV2lqYXlhCiBCcnljZSAiWm9va28iIFdpbGNveC1PJ0hlYXJuCiBUaW1vdGh5IFdpbGQKIEpha3ViIFdpbGsKQEAgLTEzNTcsNiArMTQ0Niw3IEBACiBKYXNvbiBXaWxsaWFtcwogSm9obiBXaWxsaWFtcwogU3VlIFdpbGxpYW1zCitDYXJvbCBXaWxsaW5nCiBTdGV2ZW4gV2lsbGlzCiBGcmFuayBXaWxsaXNvbgogR2VvZmYgV2lsc29uCkBAIC0xMzgyLDYgKzE0NzIsNyBAQAogR29yZG9uIFdvcmxleQogRGFycmVuIFdvcnJhbGwKIFRob21hcyBXb3V0ZXJzCitEYW5pZWwgV296bmlhawogSGVpa28gV3VuZHJhbQogRG91ZyBXeWF0dAogUm9iZXJ0IFhpYW8KQEAgLTEzOTQsNiArMTQ4NSw3IEBACiBEYW5ueSBZb28KIFJvcnkgWW9ya2UKIEdlb3JnZSBZb3NoaWRhCitLYXp1aGlybyBZb3NoaWRhCiBNYXNhenVtaSBZb3NoaWthd2EKIEFybmF1ZCBZc21hbAogQmVybmFyZCBZdWUKQEAgLTE0MDksNCArMTUwMSw2IEBACiBDaGVuZyBaaGFuZwogS2FpIFpodQogVGFyZWsgWmlhZMOpCitHZW5uYWRpeSBabG9iaW4KK0RvdWcgWm9uZ2tlcgogUGV0ZXIgw4VzdHJhbmQKZGlmZiAtLWdpdCBhL01pc2MvSElTVE9SWSBiL01pc2MvSElTVE9SWQppbmRleCAwMWM2MzViLi44OGU4YTZiIDEwMDY0NAotLS0gYS9NaXNjL0hJU1RPUlkKKysrIGIvTWlzYy9ISVNUT1JZCkBAIC0zLDEzICszLDQxMTAgQEAKIAogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSByZWxlYXNlIG1lc3NhZ2VzIGZvciBwcmV2aW91cyBQeXRob24gcmVsZWFzZXMuCiBBcyB5b3UgcmVhZCBvbiB5b3UgZ28gYmFjayB0byB0aGUgZGFyayBhZ2VzIG9mIFB5dGhvbidzIGhpc3RvcnkuCi0oTm90ZTogbmV3cyBhYm91dCAyLjVjMiBhbmQgbGF0ZXIgMi41IHJlbGVhc2VzIGlzIGluIHRoZSBNaXNjL05FV1MKLWZpbGUgb2YgdGhlIHJlbGVhc2UyNS1tYWludCBicmFuY2guKQogCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMD8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyOS1TZXAtMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2MDQ2OiBGaXggbG9hZGluZyBzb3VyY2VsZXNzIGxlZ2FjeSAucHlvIGZpbGVzLgorCistIElzc3VlICMxNjA2MDogRml4IHJlZmNvdW50aW5nIGJ1ZyB3aGVuIF9fdHJ1bmNfXyByZXR1cm5zIGFuIG9iamVjdAorICB3aG9zZSBfX2ludF9fIGdpdmVzIGEgbm9uLWludGVnZXIuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTYwMTI6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gcHlleHBhdC4gVGhlIHBhcnNlcidzIFVzZUZvcmVpZ25EVEQoKQorICBtZXRob2QgZG9lc24ndCByZXF1aXJlIGFuIGFyZ3VtZW50IGFnYWluLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIFJlbGVhc2UgQ2FuZGlkYXRlIDM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyMy1TZXAtMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1OTAwOiBGaXggcmVmZXJlbmNlIGxlYWsgaW4gUHlVbmljb2RlX1RyYW5zbGF0ZUNoYXJtYXAoKS4KKworLSBJc3N1ZSAjMTU5MjY6IEZpeCBjcmFzaCBhZnRlciBtdWx0aXBsZSByZWluaXRpYWxpemF0aW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuCisKKy0gSXNzdWUgIzE1ODk1OiBGaXggRklMRSBwb2ludGVyIGxlYWsgaW4gb25lIGVycm9yIGJyYW5jaCBvZgorICBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncygpIHdoZW4gZmlsZW5hbWUgcG9pbnRzIHRvIGEgcHljL3B5byBmaWxlLCBjbG9zZWl0CisgIGlzIGZhbHNlIGFuIGFuZCBzZXRfbWFpbl9sb2FkZXIoKSBmYWlscy4KKworLSBGaXhlcyBmb3IgYSBmZXcgY3Jhc2ggYW5kIG1lbW9yeSBsZWFrIHJlZ3Jlc3Npb25zIGZvdW5kIGJ5IENvdmVyaXR5LgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE1ODgyOiBDaGFuZ2UgX2RlY2ltYWwgdG8gYWNjZXB0IGFueSBjb2VmZmljaWVudCB0dXBsZSB3aGVuCisgIGNvbnN0cnVjdGluZyBpbmZpbml0aWVzLiBUaGlzIGlzIGRvbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgIHdpdGggZGVjaW1hbC5weTogSW5maW5pdHkgY29lZmZpY2llbnRzIGFyZSB1bmRlZmluZWQgaW4gX2RlY2ltYWwKKyAgKGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWNhdGlvbikuCisKKy0gSXNzdWUgIzE1OTI1OiBGaXggYSByZWdyZXNzaW9uIGluIGVtYWlsLnV0aWwgd2hlcmUgdGhlIHBhcnNlZGF0ZSgpIGFuZAorICBwYXJzZWRhdGVfdHooKSBmdW5jdGlvbnMgZGlkIG5vdCByZXR1cm4gTm9uZSBhbnltb3JlIHdoZW4gdGhlIGFyZ3VtZW50IGNvdWxkCisgIG5vdCBiZSBwYXJzZWQuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTk3MzogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gY29tcGFyaW5nIGRhdGV0aW1lIHRpbWV6b25lCisgIG9iamVjdHMuCisKKy0gSXNzdWUgIzE1OTc3OiBGaXggbWVtb3J5IGxlYWsgaW4gTW9kdWxlcy9fc3NsLmMgd2hlbiB0aGUgZnVuY3Rpb24KKyAgX3NldF9ucG5fcHJvdG9jb2xzKCkgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCB0aGFua3MgdG8gRGFuaWVsIFNvbW1lcm1hbm4uCisKKy0gSXNzdWUgIzE1OTY5OiBmYXVsdGhhbmRsZXIgbW9kdWxlOiByZW5hbWUgZHVtcF90cmFjZWJhY2tzX2xhdGVyKCkgdG8KKyAgZHVtcF90cmFjZWJhY2tfbGF0ZXIoKSBhbmQgY2FuY2VsX2R1bXBfdHJhY2ViYWNrc19sYXRlcigpIHRvCisgIGNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcigpLgorCistIF9kZWNpbWFsIG1vZHVsZTogdXNlIG9ubHkgQyA4OSBzdHlsZSBjb21tZW50cy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBSZWxlYXNlIENhbmRpZGF0ZSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDktU2VwLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxMzk5MjogVGhlIHRyYXNoY2FuIG1lY2hhbmlzbSBpcyBub3cgdGhyZWFkLXNhZmUuICBUaGlzIGVsaW1pbmF0ZXMKKyAgc3BvcmFkaWMgY3Jhc2hlcyBpbiBtdWx0aS10aHJlYWQgcHJvZ3JhbXMgd2hlbiBzZXZlcmFsIGxvbmcgZGVhbGxvY2F0b3IKKyAgY2hhaW5zIHJhbiBjb25jdXJyZW50bHkgYW5kIGludm9sdmVkIHN1YmNsYXNzZXMgb2YgYnVpbHQtaW4gY29udGFpbmVyCisgIHR5cGVzLgorCistIElzc3VlICMxNTc4NDogTW9kaWZ5IE9TRXJyb3IuX19zdHJfXygpIHRvIGJldHRlciBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgIGVycm5vIGVycm9yIG51bWJlcnMgYW5kIFdpbmRvd3MgZXJyb3IgbnVtYmVycy4KKworLSBJc3N1ZSAjMTU3ODE6IEZpeCB0d28gc21hbGwgcmFjZSBjb25kaXRpb25zIGluIGltcG9ydCdzIG1vZHVsZSBsb2NraW5nLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE1ODQ3OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlLCB3aGljaCBkaWQgbm90IGFjY2VwdCB0dXBsZXMKKyAgYXMgYXJndW1lbnQgbGlzdHMgYW55bW9yZS4KKworLSBJc3N1ZSAjMTU4Mjg6IFJlc3RvcmUgc3VwcG9ydCBmb3IgQyBleHRlbnNpb25zIGluIGltcC5sb2FkX21vZHVsZSgpLgorCistIElzc3VlICMxNTM0MDogRml4IGltcG9ydGluZyB0aGUgcmFuZG9tIG1vZHVsZSB3aGVuIC9kZXYvdXJhbmRvbSBjYW5ub3QKKyAgYmUgb3BlbmVkLiAgVGhpcyB3YXMgYSByZWdyZXNzaW9uIGNhdXNlZCBieSB0aGUgaGFzaCByYW5kb21pemF0aW9uIHBhdGNoLgorCistIElzc3VlICMxMDY1MDogRGVwcmVjYXRlIHRoZSB3YXRjaGV4cCBwYXJhbWV0ZXIgb2YgdGhlIERlY2ltYWwucXVhbnRpemUoKQorICBtZXRob2QuCisKKy0gSXNzdWUgIzE1Nzg1OiBNb2RpZnkgd2luZG93LmdldF93Y2goKSBBUEkgb2YgdGhlIGN1cnNlcyBtb2R1bGU6IHJldHVybgorICBhIGNoYXJhY3RlciBmb3IgbW9zdCBrZXlzLCBhbmQgYW4gaW50ZWdlciBmb3Igc3BlY2lhbCBrZXlzLCBpbnN0ZWFkIG9mCisgIGFsd2F5cyByZXR1cm5pbmcgYW4gaW50ZWdlci4gU28gaXQgaXMgbm93IHBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHNwZWNpYWwKKyAga2V5cyBsaWtlIGtleXBhZCBrZXlzLgorCistIElzc3VlICMxNDIyMzogRml4IHdpbmRvdy5hZGRjaCgpIG9mIHRoZSBjdXJzZXMgbW9kdWxlIGZvciBzcGVjaWFsIGNoYXJhY3RlcnMKKyAgbGlrZSBjdXJzZXMuQUNTX0hMSU5FOiB0aGUgUHl0aG9uIGZ1bmN0aW9uIGFkZGNoKGludCkgYW5kIGFkZGNoKGJ5dGVzKSBpcyBub3cKKyAgY2FsbGluZyB0aGUgQyBmdW5jdGlvbiB3YWRkY2goKS9tdndhZGRjaCgpIChhcyBpdCB3YXMgZG9uZSBpbiBQeXRob24gMy4yKSwKKyAgaW5zdGVhZCBvZiB3YWRkX3djaCgpL212d2FkZF93Y2goKS4gVGhlIFB5dGhvbiBmdW5jdGlvbiBhZGRjaChzdHIpIGlzIHN0aWxsCisgIGNhbGxpbmcgdGhlIEMgZnVuY3Rpb24gd2FkZF93Y2goKS9tdndhZGRfd2NoKCkgaWYgdGhlIFB5dGhvbiBjdXJzZXMgaXMgbGlua2VkCisgIHRvIGxpYm5jdXJzZXN3LgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTU4MjI6IFJlYWxseSBlbnN1cmUgMnRvMyBncmFtbWFyIHBpY2tsZXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZAorICAocmVwbGFjZXMgZml4ZXMgZm9yIElzc3VlICMxNTY0NSkuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU4MTQ6IFRoZSBtZW1vcnl2aWV3IGVuaGFuY2VtZW50cyBpbiAzLjMuMCBhY2NpZGVudGFsbHkgcGVybWl0dGVkCisgIHRoZSBoYXNoaW5nIG9mIG11bHRpLWRpbWVuc2lvbmFsIG1lbW9ydmlld3MgYW5kIG1lbW9yeXZpZXdzIHdpdGggbXVsdGktYnl0ZQorICBpdGVtIGZvcm1hdHMuIFRoZSBpbnRlbmRlZCByZXN0cmljdGlvbnMgaGF2ZSBub3cgYmVlbiBkb2N1bWVudGVkIC0gdGhleQorICB3aWxsIGJlIGNvcnJlY3RseSBlbmZvcmNlZCBpbiAzLjMuMQorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIFJlbGVhc2UgQ2FuZGlkYXRlIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyNS1BdWctMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NTczOiBtZW1vcnl2aWV3IGNvbXBhcmlzb25zIGFyZSBub3cgcGVyZm9ybWVkIGJ5IHZhbHVlIHdpdGggZnVsbAorICBzdXBwb3J0IGZvciBhbnkgdmFsaWQgc3RydWN0IG1vZHVsZSBmb3JtYXQgZGVmaW5pdGlvbi4KKworLSBJc3N1ZSAjMTUzMTY6IFdoZW4gYW4gaXRlbSBpbiB0aGUgZnJvbWxpc3QgZm9yIF9faW1wb3J0X18gZG9lc24ndCBleGlzdCwKKyAgZG9uJ3QgcmFpc2UgYW4gZXJyb3IsIGJ1dCBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGFzIHBhcnQgb2YgYW4gaW1wb3J0IGRvCisgIGxldCB0aGF0IHByb3BhZ2F0ZS4KKworLSBJc3N1ZSAjMTU3Nzg6IGVuc3VyZSB0aGF0IHN0cihJbXBvcnRFcnJvcihtc2cpKSByZXR1cm5zIGEgc3RyCisgIGV2ZW4gd2hlbiBtc2cgaXNuJ3QgYSBzdHIuCisKKy0gSXNzdWUgIzIwNTE6IFNvdXJjZSBmaWxlIHBlcm1pc3Npb24gYml0cyBhcmUgb25jZSBhZ2FpbiBjb3JyZWN0bHkKKyAgY29waWVkIHRvIHRoZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZS4gKFRoZSBtaWdyYXRpb24gdG8gaW1wb3J0bGliCisgIHJlaW50cm9kdWNlZCB0aGlzIHByb2JsZW0gYmVjYXVzZSB0aGVzZSB3YXMgbm8gcmVncmVzc2lvbiB0ZXN0LiBBIHRlc3QKKyAgaGFzIGJlZW4gYWRkZWQgYXMgcGFydCBvZiB0aGlzIHBhdGNoKQorCistIElzc3VlICMxNTc2MTogRml4IGNyYXNoIHdoZW4gUFlUSE9ORVhFQ1VUQUJMRSBpcyBzZXQgb24gTWFjIE9TIFguCisKKy0gSXNzdWUgIzE1NzI2OiBGaXggaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZyBpbiBQeVN0YXRlX0ZpbmRNb2R1bGUuCisgIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTU2MDQ6IFVwZGF0ZSB1c2VzIG9mIFB5T2JqZWN0X0lzVHJ1ZSgpIHRvIGNoZWNrIGZvciBhbmQgaGFuZGxlCisgIGVycm9ycyBjb3JyZWN0bHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNDg0NjogaW1wb3J0bGliLkZpbGVGaW5kZXIgbm93IGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhlCisgIGRpcmVjdG9yeSBiZWluZyBzZWFyY2hlZCBpcyByZW1vdmVkIGFmdGVyIGEgcHJldmlvdXMgaW1wb3J0IGF0dGVtcHQKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxMzM3MDogRW5zdXJlIHRoYXQgY3R5cGVzIHdvcmtzIG9uIE1hYyBPUyBYIHdoZW4gUHl0aG9uIGlzCisgIGNvbXBpbGVkIHVzaW5nIHRoZSBjbGFuZyBjb21waWxlcgorCistIElzc3VlICMxMzA3MjogVGhlIGFycmF5IG1vZHVsZSdzICd1JyBmb3JtYXQgY29kZSBpcyBub3cgZGVwcmVjYXRlZCBhbmQKKyAgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiA0LjAuCisKKy0gSXNzdWUgIzE1NTQ0OiBGaXggRGVjaW1hbC5fX2Zsb2F0X18gdG8gd29yayB3aXRoIHBheWxvYWQtY2FycnlpbmcgTmFOcy4KKworLSBJc3N1ZSAjMTUyNDk6IEJ5dGVzR2VuZXJhdG9yIG5vdyBjb3JyZWN0bHkgbWFuZ2xlcyBGcm9tIGxpbmVzICh3aGVuCisgIHJlcXVlc3RlZCkgZXZlbiBpZiB0aGUgYm9keSBjb250YWlucyB1bmRlY29kYWJsZSBieXRlcy4KKworLSBJc3N1ZSAjMTU3Nzc6IEZpeCBhIHJlZmxlYWsgaW4gX3Bvc2l4c3VicHJvY2Vzcy4KKworLSBJc3N1ZSAjIzY2NTE5NDogVXBkYXRlIGVtYWlsLnV0aWxzLmxvY2FsdGltZSB0byB1c2UgZGF0ZXRpbWUuYXN0aW1lem9uZSBhbmQKKyAgY29ycmVjdGx5IGhhbmRsZSBoaXN0b3JpYyBjaGFuZ2VzIGluIFVUQyBvZmZzZXRzLgorCistIElzc3VlICMxNTE5OTogRml4IEphdmFTY3JpcHQncyBkZWZhdWx0IE1JTUUgdHlwZSB0byBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LgorICBQYXRjaCBieSBCb2h1c2xhdiBLYWJyZGEuCisKKy0gSXNzdWUgIzEyNjQzOiBjb2RlLkludGVyYWN0aXZlQ29uc29sZSBub3cgcmVzcGVjdHMgc3lzLmV4Y2VwdGhvb2sgd2hlbgorICBkaXNwbGF5aW5nIGV4Y2VwdGlvbnMgKFBhdGNoIGJ5IEFhcm9uIElsZXMpCisKKy0gSXNzdWUgIzEzNTc5OiBzdHJpbmcuRm9ybWF0dGVyIG5vdyB1bmRlcnN0YW5kcyB0aGUgJ2EnIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorCistIElzc3VlICMxNTc5MzogU3RhY2sgY29ycnVwdGlvbiBpbiBzc2wuUkFORF9lZ2QoKS4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU1OTU6IEZpeCBzdWJwcm9jZXNzLlBvcGVuKHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorICBmb3IgY2VydGFpbiBsb2NhbGVzICh1dGYtMTYgYW5kIHV0Zi0zMiBmYW1pbHkpLiBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KKworLSBJc3N1ZSAjMTU0Nzc6IEluIGNtYXRoIGFuZCBtYXRoIG1vZHVsZXMsIGFkZCB3b3JrYXJvdW5kIGZvciBwbGF0Zm9ybXMgd2hvc2UKKyAgc3lzdGVtLXN1cHBsaWVkIGxvZzFwIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzcGVjdCBzaWducyBvZiB6ZXJvcy4KKworLSBJc3N1ZSAjMTU3MTU6IGltcG9ydGxpYi5fX2ltcG9ydF9fKCkgd2lsbCBzaWxlbmNlIGFuIEltcG9ydEVycm9yIHdoZW4gdGhlIHVzZQorICBvZiBmcm9tbGlzdCBsZWFkcyB0byBhIGZhaWxlZCBpbXBvcnQuCisKKy0gSXNzdWUgIzE0NjY5OiBGaXggcGlja2xpbmcgb2YgY29ubmVjdGlvbnMgYW5kIHNvY2tldHMgb24gTWFjT1NYCisgIGJ5IHNlbmRpbmcvcmVjZWl2aW5nIGFuIGFja25vd2xlZGdtZW50IGFmdGVyIGZpbGUgZGVzY3JpcHRvciB0cmFuc2Zlci4KKyAgVGVzdFBpY2tsaW5nQ29ubmVjdGlvbiBoYXMgYmVlbiByZWVuYWJsZWQgZm9yIE1hY09TWC4KKworLSBJc3N1ZSAjMTEwNjI6IEZpeCBhZGRpbmcgYSBtZXNzYWdlIGZyb20gZmlsZSB0byBCYWJ5bCBtYWlsYm94LgorCistIElzc3VlICMxNTY0NjogUHJldmVudCBlcXVpdmFsZW50IG9mIGEgZm9yayBib21iIHdoZW4gdXNpbmcKKyAgbXVsdGlwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgd2l0aG91dCB0aGUgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyciCisgIGlkaW9tLgorCistIElzc3VlICMxNTY3ODogRml4IElETEUgbWVudXMgd2hlbiBzdGFydGVkIGZyb20gT1MgWCBjb21tYW5kIGxpbmUKKyAgKDMuMy4wYjIgcmVncmVzc2lvbikuCisKK0MgQVBJCistLS0tLQorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2NzQ6IEFkZCBhIGRpc2N1c3Npb24gb2YgdGhlIGpzb24gbW9kdWxlJ3Mgc3RhbmRhcmQgY29tcGxpYW5jZS4KKyAgUGF0Y2ggYnkgQ2hyaXMgUmViZXJ0LgorCistIENyZWF0ZSBhICdDb25jdXJyZW50IEV4ZWN1dGlvbicgc2VjdGlvbiBpbiB0aGUgZG9jcywgYW5kIHNwbGl0IHVwIHRoZQorICAnT3B0aW9uYWwgT3BlcmF0aW5nIFN5c3RlbSBTZXJ2aWNlcycgc2VjdGlvbiB0byB1c2UgYSBtb3JlIHVzZXItY2VudHJpYworICBjbGFzc2lmaWNhdGlvbiBzY2hlbWUgKHNwbGl0dGluZyB0aGVtIGFjcm9zcyB0aGUgbmV3IENFIHNlY3Rpb24sIElQQyBhbmQKKyAgdGV4dCBwcm9jZXNzaW5nKS4gT3BlcmF0aW5nIHN5c3RlbSBsaW1pdGF0b25zIGNhbiBiZSByZWZsZWN0ZWQgd2l0aAorICB0aGUgU3BoaW54IGBgOnBsYXRmb3JtOmBgIHRhZywgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGFzIHBhcnQgb2YgdGhlIFRhYmxlIG9mCisgIENvbnRlbnRzLgorCistIElzc3VlICM0OTY2OiBCcmluZyB0aGUgc2VxdWVuY2UgZG9jcyB1cCB0byBkYXRlIGZvciB0aGUgUHkzayB0cmFuc2l0aW9uCisgIGFuZCB0aGUgbWFueSBsYW5ndWFnZSBlbmhhbmNlbWVudHMgc2luY2UgdGhleSB3ZXJlIG9yaWdpbmFsIHdyaXR0ZW4KKworLSBUaGUgInBhdGggaW1wb3J0ZXIiIG1pc25vbWVyIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggRXJpYyBTbm93J3MKKyAgbW9yZS1hd2t3YXJkLWJ1dC1hdC1sZWFzdC1ub3Qtd3Jvbmcgc3VnZ2VzdGlvbiBvZiAicGF0aCBiYXNlZCBmaW5kZXIiIGluCisgIHRoZSBpbXBvcnQgc3lzdGVtIHJlZmVyZW5jZSBkb2NzCisKKy0gSXNzdWUgIzE1NjQwOiBEb2N1bWVudCBpbXBvcnRsaWIuYWJjLkZpbmRlciBhcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxNTYzMDogQWRkIGFuIGV4YW1wbGUgZm9yICJjb250aW51ZSIgc3RtdCBpbiB0aGUgdHV0b3JpYWwuIFBhdGNoIGJ5CisgIERhbmllbCBFbGxpcy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE1NzQ3OiBaRlMgYWx3YXlzIHJldHVybnMgRU9QTk9UU1VQUCB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IHRoZQorICBVRl9JTU1VVEFCTEUgZmxhZyAodmlhIGVpdGhlciBjaGZsYWdzIG9yIGxjaGZsYWdzKTsgcmVmYWN0b3IgYWZmZWN0ZWQKKyAgdGVzdHMgaW4gdGVzdF9wb3NpeC5weSB0byBhY2NvdW50IGZvciB0aGlzLgorCistIElzc3VlICMxNTI4NTogUmVmYWN0b3IgdGhlIGFwcHJvYWNoIGZvciB0ZXN0aW5nIGNvbm5lY3QgdGltZW91dHMgdXNpbmcKKyAgdHdvIGV4dGVybmFsIGhvc3RzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHR5cGUKKyAgb2YgdGVzdC4KKworLSBJc3N1ZSAjMTU3NDM6IFJlbW92ZSB0aGUgZGVwcmVjYXRlZCBtZXRob2QgdXNhZ2UgaW4gdXJsbGliIHRlc3RzLiBQYXRjaCBieQorICBKZWZmIEtudXBwLgorCistIElzc3VlICMxNTYxNTogQWRkIHNvbWUgdGVzdHMgZm9yIHRoZSBqc29uIG1vZHVsZSdzIGhhbmRsaW5nIG9mIGludmFsaWQKKyAgaW5wdXQgZGF0YS4gIFBhdGNoIGJ5IEt1c2hhbCBEYXMuCisKK0J1aWxkCistLS0tLQorCistIE91dHB1dCBsaWIgZmlsZXMgZm9yIFBHTyBidWlsZCBpbnRvIFBHTyBkaXJlY3RvcnkuCisKKy0gUGljayB1cCAzMi1iaXQgbGF1bmNoZXIgZnJvbSBQR08gZGlyZWN0b3J5IG9uIDY0LWJpdCBQR08gYnVpbGQuCisKKy0gRHJvcCBQQ1xweXRob25fbnQuaCBhcyBpdCdzIG5vdCB1c2VkLiBBZGQgaW5wdXQgZGVwZW5kZW5jeSBvbiBjdXN0b20KKyAgYnVpbGQgc3RlcC4KKworLSBJc3N1ZSAjMTU1MTE6IERyb3AgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBweXRob254eS5saWIgZnJvbSBfZGVjaW1hbAorICBhbWQ2NCBjb25maWd1cmF0aW9uLgorCistIEFkZCBtaXNzaW5nIFBHSS9QR08gY29uZmlndXJhdGlvbnMgZm9yIHB5d2xhdW5jaGVyLgorCistIElzc3VlICMxNTY0NTogRW5zdXJlIDJ0bzMgZ3JhbW1hciBwaWNrbGVzIGFyZSBwcm9wZXJseSBpbnN0YWxsZWQuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQmV0YSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAxMi1BdWctMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NTY4OiBGaXggdGhlIHJldHVybiB2YWx1ZSBvZiAieWllbGQgZnJvbSIgd2hlbiBTdG9wSXRlcmF0aW9uIGlzCisgIHJhaXNlZCBieSBhIGN1c3RvbSBpdGVyYXRvci4KKworLSBJc3N1ZSAjMTMxMTk6IHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnIgYXJlIG5vdyB1c2luZyAiXHJcbiIgbmV3bGluZSBvbgorICBXaW5kb3dzLCBhcyBQeXRob24gMi4KKworLSBJc3N1ZSAjMTU1MzQ6IEZpeCB0aGUgZmFzdC1zZWFyY2ggZnVuY3Rpb24gZm9yIG5vbi1BU0NJSSBVbmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE1NTA4OiBGaXggdGhlIGRvY3N0cmluZyBmb3IgX19pbXBvcnRfXyB0byBoYXZlIHRoZSBwcm9wZXIgZGVmYXVsdAorICB2YWx1ZSBvZiAwIGZvciAnbGV2ZWwnIGFuZCB0byBub3QgbWVudGlvbiBuZWdhdGl2ZSBsZXZlbHMgc2luY2UgdGhleSBhcmUgbm90CisgIHN1cHBvcnRlZC4KKworLSBJc3N1ZSAjMTU0MjU6IEVsaW1pbmF0ZWQgdHJhY2ViYWNrIG5vaXNlIGZyb20gbW9yZSBzaXR1YXRpb25zIGludm9sdmluZworICBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzE0NTc4OiBTdXBwb3J0IG1vZHVsZXMgcmVnaXN0ZXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeSBhZ2Fpbi4KKworLSBJc3N1ZSAjMTU0NjY6IFN0b3AgdXNpbmcgVFlQRV9JTlQ2NCBpbiBtYXJzaGFsLCB0byBtYWtlIGltcG9ydGxpYi5oIChhbmQgb3RoZXIKKyAgYnl0ZSBjb2RlIGZpbGVzKSBlcXVhbCBiZXR3ZWVuIDMyLWJpdCBhbmQgNjQtYml0IHN5c3RlbXMuCisKKy0gSXNzdWUgIzE2OTIzMzU6IE1vdmUgaW5pdGlhbCBleGNlcHRpb24gYXJncyBhc3NpZ25tZW50IHRvCisgICJCYXNlRXhjZXB0aW9uLl9fbmV3X18iIHRvIGhlbHAgcGlja2xpbmcgb2YgbmFpdmUgc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTI4MzQ6IEZpeCBQeUJ1ZmZlcl9Ub0NvbnRpZ3VvdXMoKSBmb3Igbm9uLWNvbnRpZ3VvdXMgYXJyYXlzLgorCistIElzc3VlICMxNTQ1NjogRml4IGNvZGUgX19zaXplb2ZfXyBhZnRlciAjMTIzOTkgY2hhbmdlLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0MDQ6IFJlZmxlYWsgaW4gUHlNZXRob2RPYmplY3QgcmVwci4KKworLSBJc3N1ZSAjMTUzOTQ6IEFuIGlzc3VlIGluIFB5TW9kdWxlX0NyZWF0ZSB0aGF0IGNhdXNlZCByZWZlcmVuY2VzIHRvIGJlIGxlYWtlZAorICBvbiBzb21lIGVycm9yIHBhdGhzIGhhcyBiZWVuIGZpeGVkLiAgUGF0Y2ggYnkgSnVsaWEgTGF3YWxsLgorCistIElzc3VlICMxNTM2ODogQW4gaXNzdWUgdGhhdCBjYXVzZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbiB0byBiZSBub24tZGV0ZXJtaW5pc3RpYworICBoYXMgYmVlbiBmaXhlZC4KKworLSBJc3N1ZSAjMTUyMDI6IENvbnNpc3RlbnRseSB1c2UgdGhlIG5hbWUgImZvbGxvd19zeW1saW5rcyIgZm9yIG5ldyBwYXJhbWV0ZXJzCisgIGluIG9zIGFuZCBzaHV0aWwgZnVuY3Rpb25zLgorCistIElzc3VlICMxNTMxNDogX19tYWluX18uX19sb2FkZXJfXyBpcyBub3cgc2V0IGNvcnJlY3RseSBkdXJpbmcgaW50ZXJwcmV0ZXIKKyAgc3RhcnR1cC4KKworLSBJc3N1ZSAjMTUxMTE6IFdoZW4gYSBtb2R1bGUgaW1wb3J0ZWQgdXNpbmcgJ2Zyb20gaW1wb3J0JyBoYXMgYW4gSW1wb3J0RXJyb3IKKyAgaW5zaWRlIGl0c2VsZiwgZG9uJ3QgbWFzayB0aGF0IGZhY3QgYmVoaW5kIGEgZ2VuZXJpYyBJbXBvcnRFcnJvciBmb3IgdGhlCisgIG1vZHVsZSBpdHNlbGYuCisKKy0gSXNzdWUgIzE1MjkzOiBBZGQgR0Mgc3VwcG9ydCB0byB0aGUgQVNUIGJhc2Ugbm9kZSB0eXBlLgorCistIElzc3VlICMxNTI5MTogRml4IGEgbWVtb3J5IGxlYWsgd2hlcmUgQVNUIG5vZGVzIHdoZXJlIG5vdCBwcm9wZXJseQorICBkZWFsbG9jYXRlZC4KKworLSBJc3N1ZSAjMTUxMTA6IEZpeCB0aGUgdHJhY2ViYWNrcyBnZW5lcmF0ZWQgYnkgImltcG9ydCB4eHgiIHRvIG5vdCBzaG93IHRoZQorICBpbXBvcnRsaWIgc3RhY2sgZnJhbWVzLgorCistIElzc3VlICMxNTAyMDogVGhlIHByb2dyYW0gbmFtZSB1c2VkIHRvIHNlYXJjaCBmb3IgUHl0aG9uJ3MgcGF0aCBpcyBub3cKKyAgInB5dGhvbjMiIHVuZGVyIFVuaXgsIG5vdCAicHl0aG9uIi4KKworLSBJc3N1ZSAjMTUwMzM6IEZpeCB0aGUgZXhpdCBzdGF0dXMgYnVnIHdoZW4gbW9kdWxlcyBpbnZva2VkIHVzaW5nIC1tIHN3aXRoLAorICByZXR1cm4gdGhlIHByb3BlciBmYWlsdXJlIHJldHVybiB2YWx1ZSAoMSkuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEplZmYgS251cHAuCisKKy0gSXNzdWUgIzE1MjI5OiBBbiBPU0Vycm9yIHN1YmNsYXNzIHdob3NlIF9faW5pdF9fIGRvZXNuJ3QgY2FsbCBiYWNrCisgIE9TRXJyb3IuX19pbml0X18gY291bGQgcHJvZHVjZSBpbmNvbXBsZXRlIGluc3RhbmNlcywgbGVhZGluZyB0byBjcmFzaGVzIHdoZW4KKyAgY2FsbGluZyBzdHIoKSBvbiB0aGVtLgorCistIElzc3VlIDE1MzA3OiBWaXJ0dWFsIGVudmlyb25tZW50cyBub3cgdXNlIHN5bWxpbmtzIHdpdGggZnJhbWV3b3JrIGJ1aWxkcyBvbgorICBNYWMgT1MgWCwgbGlrZSBvdGhlciBQT1NJWCBidWlsZHMuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU0MjQ6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGFycmF5IG9iamVjdHMuICBQYXRjaCBieQorICBMdWR3aWcgSMOkaG5lLgorCistIElzc3VlICMxNTU3NjogQWxsb3cgZXh0ZW5zaW9uIG1vZHVsZXMgdG8gYWN0IGFzIGEgcGFja2FnZSdzIF9faW5pdF9fIG1vZHVsZS4KKworLSBJc3N1ZSAjMTU1MDI6IEhhdmUgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgd29yayBvbiBzeXMubWV0YV9wYXRoIGluc3RlYWQKKyAgb2Ygc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuCisKKy0gSXNzdWUgIzE1MTYzOiBQeWRvYyBzaG91bGRuJ3QgbGlzdCBfX2xvYWRlcl9fIGFzIG1vZHVsZSBkYXRhLgorCistIElzc3VlICMxNTQ3MTogRG8gbm90IHVzZSBtdXRhYmxlIG9iamVjdHMgYXMgZGVmYXVsdHMgZm9yCisgIGltcG9ydGxpYi5fX2ltcG9ydF9fKCkuCisKKy0gSXNzdWUgIzE1NTU5OiBUbyBhdm9pZCBhIHByb2JsZW1hdGljIGZhaWx1cmUgbW9kZSB3aGVuIHBhc3NlZCB0byB0aGUgYnl0ZXMKKyAgY29uc3RydWN0b3IsIG9iamVjdHMgaW4gdGhlIGlwYWRkcmVzcyBtb2R1bGUgbm8gbG9uZ2VyIGltcGxlbWVudCBfX2luZGV4X18KKyAgKHRoZXkgc3RpbGwgaW1wbGVtZW50IF9faW50X18gYXMgYXBwcm9wcmlhdGUpCisKKy0gSXNzdWUgIzE1NTQ2OiBGaXggaGFuZGxpbmcgb2YgcGF0aG9sb2dpY2FsIGlucHV0IGRhdGEgaW4gdGhlIHBlZWsoKSBhbmQKKyAgcmVhZDEoKSBtZXRob2RzIG9mIHRoZSBCWjJGaWxlLCBHemlwRmlsZSBhbmQgTFpNQUZpbGUgY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTMwNTI6IEZpeCBJRExFIGNyYXNoaW5nIHdoZW4gcmVwbGFjZSBzdHJpbmcgaW4gU2VhcmNoL1JlcGxhY2UgZGlhbG9nCisgIGVuZGVkIHdpdGggJ1wnLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTI2NTU6IEluc3RlYWQgb2YgcmVxdWlyaW5nIGEgY3VzdG9tIHR5cGUsIG9zLnNjaGVkX2dldGFmZmluaXR5IGFuZAorICBvcy5zY2hlZF9zZXRhZmZpbml0eSBub3cgdXNlIHJlZ3VsYXIgc2V0cyBvZiBpbnRlZ2VycyB0byByZXByZXNlbnQgdGhlIENQVXMgYQorICBwcm9jZXNzIGlzIHJlc3RyaWN0ZWQgdG8uCisKKy0gSXNzdWUgIzE1NTM4OiBGaXggY29tcGlsYXRpb24gb2YgdGhlIGdldG5hbWVpbmZvKCkgLyBnZXRhZGRyaW5mbygpIGVtdWxhdGlvbgorICBjb2RlLiAgUGF0Y2ggYnkgUGhpbGlwcCBIYWdlbWVpc3Rlci4KKworLSBJc3N1ZSAjMTU1MTk6IFByb3Blcmx5IGV4cG9zZSBXaW5kb3dzUmVnaXN0cnlGaW5kZXIgaW4gaW1wb3J0bGliIChhbmQgdXNlIHRoZQorICBjb3JyZWN0IHRlcm0gZm9yIGl0KS4gT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgorCistIElzc3VlICMxNTUwMjogQnJpbmcgdGhlIGltcG9ydGxpYiBBQkNzIGludG8gbGluZSB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQorICBpbXBvcnQgcHJvdG9jb2xzIGdpdmVuIFBFUCA0MjAuIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWMgU25vdy4KKworLSBJc3N1ZSAjMTU0OTk6IExhdW5jaGluZyBhIHdlYmJyb3dzZXIgaW4gVW5peCB1c2VkIHRvIHNsZWVwIGZvciBhIGZldyBzZWNvbmRzLgorICBPcmlnaW5hbCBwYXRjaCBieSBBbnRvbiBCYXJrb3Zza3kuCisKKy0gSXNzdWUgIzE1NDYzOiBUaGUgZmF1bHRoYW5kbGVyIG1vZHVsZSB0cnVuY2F0ZXMgc3RyaW5ncyB0byA1MDAgY2hhcmFjdGVycywKKyAgaW5zdGVhZCBvZiAxMDAsIHRvIGJlIGFibGUgdG8gZGlzcGxheSBsb25nIGZpbGUgcGF0aHMuCisKKy0gSXNzdWUgIzYwNTY6IE1ha2UgbXVsdGlwcm9jZXNzaW5nIHVzZSBzZXRibG9ja2luZyhUcnVlKSBvbiB0aGUgc29ja2V0cyBpdAorICB1c2VzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgSiBEZXJlayBXaWxzb24uCisKKy0gSXNzdWUgIzE1MzY0OiBGaXggc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKSB0byBiZSBhbiBhYnNvbHV0ZSBwYXRoLgorCistIElzc3VlICMxNTA0MTogVXBkYXRlICJzZWUgYWxzbyIgbGlzdCBpbiB0a2ludGVyIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzE1NDEzOiBvcy50aW1lcygpIGhhZCBkaXNhcHBlYXJlZCB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxNTQwMjogQW4gaXNzdWUgaW4gdGhlIHN0cnVjdCBtb2R1bGUgdGhhdCBjYXVzZWQgc3lzLmdldHNpemVvZiB0bworICByZXR1cm4gaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHN0cnVjdC5TdHJ1Y3QgaW5zdGFuY2VzIGhhcyBiZWVuIGZpeGVkLiAgSW5pdGlhbAorICBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTIzMjogV2hlbiBtYW5nbGVfZnJvbSBpcyBUcnVlLCBlbWFpbC5HZW5lcmF0b3Igbm93IGNvcnJlY3RseSBtYW5nbGVzCisgIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCAnRnJvbSAnIHRoYXQgb2NjdXIgaW4gYSBNSU1FIHByZWFtYmxlIG9yIGVwaWxvZ3VlLgorCistIElzc3VlICMxNTA5NDogSW5jb3JyZWN0bHkgcGxhY2VkICNlbmRpZiBpbiBfdGtpbnRlci5jLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTM5MjI6IGFyZ3BhcnNlIG5vIGxvbmdlciBpbmNvcnJlY3RseSBzdHJpcHMgJy0tJ3MgdGhhdCBhcHBlYXIgYWZ0ZXIKKyAgdGhlIGZpcnN0IG9uZS4KKworLSBJc3N1ZSAjMTIzNTM6IGFyZ3BhcnNlIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBudWxsIGFyZ3VtZW50IHZhbHVlcy4KKworLSBJc3N1ZSAjMTAwMTcsIGlzc3VlICMxNDk5ODogRml4IFR5cGVFcnJvciB1c2luZyBwcHJpbnQgb24gZGljdGlvbmFyaWVzIHdpdGgKKyAgdXNlci1kZWZpbmVkIHR5cGVzIGFzIGtleXMgb3Igb3RoZXIgdW5vcmRlcmFibGUga2V5cy4KKworLSBJc3N1ZSAjMTUzOTc6IGluc3BlY3QuZ2V0bW9kdWxlbmFtZSgpIGlzIG5vdyBiYXNlZCBkaXJlY3RseSBvbiBpbXBvcnRsaWIgdmlhIGEKKyAgbmV3IGltcG9ydGxpYi5tYWNoaW5lcnkuYWxsX3N1ZmZpeGVzKCkgQVBJLgorCistIElzc3VlICMxNDYzNTogdGVsbmV0bGliIHdpbGwgdXNlIHBvbGwoKSByYXRoZXIgdGhhbiBzZWxlY3QoKSB3aGVuIHBvc3NpYmxlIHRvCisgIGF2b2lkIGZhaWxpbmcgZHVlIHRvIHRoZSBzZWxlY3QoKSBmaWxlIGRlc2NyaXB0b3IgbGltaXQuCisKKy0gSXNzdWUgIzE1MTgwOiBDbGFyaWZ5IHBvc2l4cGF0aC5qb2luKCkgZXJyb3IgbWVzc2FnZSB3aGVuIG1peGluZyBzdHIgJiBieXRlcy4KKworLSBJc3N1ZSAjMTUzNDM6IHBrZ3V0aWwgbm93IGluY2x1ZGVzIGFuIGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcyBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIChzaW1pbGFyIHRvIHRoZSB3YXkgaXQgYWxyZWFkeSBoYW5kbGVkCisgIHppcGltcG9ydC56aXBpbXBvcnRlcikuCisKKy0gSXNzdWUgIzE1MzE0OiBydW5weSBub3cgc2V0cyBfX21haW5fXy5fX2xvYWRlcl9fIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTUzNTc6IFRoZSBpbXBvcnQgZW11bGF0aW9uIGluIHBrZ3V0aWwgaXMgbm93IGRlcHJlY2F0ZWQuIHBrZ3V0aWwgdXNlcworICBpbXBvcnRsaWIgaW50ZXJuYWxseSByYXRoZXIgdGhhbiB0aGUgZW11bGF0aW9uLgorCistIElzc3VlICMxNTIzMzogUHl0aG9uIG5vdyBndWFyYW50ZWVzIHRoYXQgY2FsbGFibGVzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYXRleGl0CisgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbiBhIGRldGVybWluaXN0aWMgb3JkZXIuCisKKy0gSXNzdWUgIzE1MjM4OiBzaHV0aWwuY29weXN0YXQgbm93IGNvcGllcyBMaW51eCAiZXh0ZW5kZWQgYXR0cmlidXRlcyIuCisKKy0gSXNzdWUgIzE1MjMwOiBydW5weS5ydW5fcGF0aCBub3cgY29ycmVjdGx5IHNldHMgX19wYWNrYWdlX18gYXMgZGVzY3JpYmVkIGluCisgIHRoZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxNTMxNTogU3VwcG9ydCBWUyAyMDEwIGluIGRpc3R1dGlscyBjeWd3aW5jb21waWxlci4KKworLSBJc3N1ZSAjMTUyOTQ6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gcGtndXRpbC5leHRlbmRfcGF0aCgpJ3MgaGFuZGxpbmcgb2YgbmVzdGVkCisgIG5hbWVzcGFjZSBwYWNrYWdlcy4KKworLSBJc3N1ZSAjMTUwNTY6IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgpIGFuZCBzb3VyY2VfZnJvbV9jYWNoZSgpIHJhaXNlCisgIE5vdEltcGxlbWVudGVkRXJyb3Igd2hlbiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIHNldCB0byBOb25lLgorCistIElzc3VlICMxNTI1NjogR3JhbW1hdGljYWwgbWlzdGFrZSBpbiBleGNlcHRpb24gcmFpc2VkIGJ5IGltcC5maW5kX21vZHVsZSgpLgorCistIElzc3VlICM1OTMxOiB3c2dpcmVmIGVudmlyb24gdmFyaWFibGUgU0VSVkVSX1NPRlRXQVJFIHdpbGwgc3BlY2lmeSBhbgorICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyB0ZXJtIGxpa2UgQ1B5dGhvbiwgSnl0aG9uIGluc3RlYWQgb2YgZ2VuZXJpYyAiUHl0aG9uIi4KKworLSBJc3N1ZSAjMTMyNDg6IFJlbW92ZSBvYnNvbGV0ZSBhcmd1bWVudCAibWF4X2J1ZmZlcl9zaXplIiBvZiBCdWZmZXJlZFdyaXRlciBhbmQKKyAgQnVmZmVyZWRSV1BhaXIsIGZyb20gdGhlIGlvIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyNDg6IFJlbW92ZSBvYnNvbGV0ZSBhcmd1bWVudCAidmVyc2lvbiIgb2YgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuCisKKy0gSXNzdWUgIzE0ODE0OiBJbXBsZW1lbnQgbW9yZSBjb25zaXN0ZW50IG9yZGVyaW5nIGFuZCBzb3J0aW5nIGJlaGF2aW91ciBmb3IKKyAgaXBhZGRyZXNzIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0ODE0OiBpcGFkZHJlc3MgbmV0d29yayBvYmplY3RzIGNvcnJlY3RseSByZXR1cm4gTm90SW1wbGVtZW50ZWQgd2hlbgorICBjb21wYXJlZCB0byBhcmJpdHJhcnkgb2JqZWN0cyBpbnN0ZWFkIG9mIHJhaXNpbmcgVHlwZUVycm9yLgorCistIElzc3VlICMxNDk5MDogQ29ycmVjdGx5IGZhaWwgd2l0aCBTeW50YXhFcnJvciBvbiBpbnZhbGlkIGVuY29kaW5nIGRlY2xhcmF0aW9uLgorCistIElzc3VlICMxNDgxNDogaXBhZGRyZXNzIG5vdyBwcm92aWRlcyBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VzIHdoZW4KKyAgY29uc3RydWN0aW5nIGluc3RhbmNlcyBkaXJlY3RseSAoY2hhbmdlcyBwZXJtaXR0ZWQgZHVyaW5nIGJldGEgZHVlIHRvCisgIHByb3Zpc2lvbmFsIEFQSSBzdGF0dXMpLgorCistIElzc3VlICMxNTI0NzogRmlsZUlPIG5vdyByYWlzZXMgYW4gZXJyb3Igd2hlbiBnaXZlbiBhIGZpbGUgZGVzY3JpcHRvciBwb2ludGluZworICB0byBhIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTUyNjE6IFN0b3Agb3Muc3RhdChmZCkgY3Jhc2hpbmcgb24gV2luZG93cyB3aGVuIGZkIG5vdCBvcGVuLgorCistIElzc3VlICMxNTE2NjogSW1wbGVtZW50IGltcC5nZXRfdGFnKCkgdXNpbmcgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZy4KKworLSBJc3N1ZSAjMTUyMTA6IENhdGNoIEtleUVycm9yIHdoZW4gaW1wb3J0bGliLl9faW5pdF9fIGNhbid0IGZpbmQKKyAgX2Zyb3plbl9pbXBvcnRsaWIgaW4gc3lzLm1vZHVsZXMsIG5vdCBJbXBvcnRFcnJvci4KKworLSBJc3N1ZSAjMTUwMzA6IGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIgbm93IHN1cHBvcnRzIHRoZSBuZXcgc291cmNlIHNpemUKKyAgaGVhZGVyIGZpZWxkIGluIC5weWMgZmlsZXMuCisKKy0gSXNzdWUgIzUzNDY6IFByZXNlcnZlIHBlcm1pc3Npb25zIG9mIG1ib3gsIE1NREYgYW5kIEJhYnlsIG1haWxib3ggZmlsZXMgb24KKyAgZmx1c2goKS4KKworLSBJc3N1ZSAjMTA1NzE6IEZpeCB0aGUgIi0tc2lnbiIgb3B0aW9uIG9mIGRpc3R1dGlscycgdXBsb2FkIGNvbW1hbmQuICBQYXRjaCBieQorICBKYWt1YiBXaWxrLgorCistIElzc3VlICM5NTU5OiBJZiBtZXNzYWdlcyB3ZXJlIG9ubHkgYWRkZWQsIGEgbmV3IGZpbGUgaXMgbm8gbG9uZ2VyIGNyZWF0ZWQgYW5kCisgIHJlbmFtZWQgb3ZlciB0aGUgb2xkIGZpbGUgd2hlbiBmbHVzaCgpIGlzIGNhbGxlZCBvbiBhbiBtYm94LCBNTURGIG9yIEJhYnlsCisgIG1haWxib3guCisKKy0gSXNzdWUgMTA5MjQ6IEZpeGVkIGNyeXB0Lm1rc2FsdCgpIHRvIHVzZSBhIFJORyB0aGF0IGlzIHN1aXRhYmxlIGZvcgorICBjcnlwdG9ncmFwaGljIHB1cnBvc2UuCisKKy0gSXNzdWUgIzE1MTg0OiBFbnN1cmUgY29uc2lzdGVudCByZXN1bHRzIG9mIE9TIFggY29uZmlndXJhdGlvbiB0YWlsb3JpbmcgZm9yCisgIHVuaXZlcnNhbCBidWlsZHMgYnkgZmFjdG9yaW5nIG91dCBjb21tb24gT1MgWC1zcGVjaWZpYyBjdXN0b21pemF0aW9ucyBmcm9tCisgIHN5c2NvbmZpZywgZGlzdHV0aWxzLnN5c2NvbmZpZywgZGlzdHV0aWxzLnV0aWwsIGFuZCBkaXN0dXRpbHMudW5peGNjb21waWxlcgorICBpbnRvIGEgbmV3IG1vZHVsZSBfb3N4X3N1cHBvcnQuCisKK0MgQVBJCistLS0tLQorCistIElzc3VlICMxNTYxMDogUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgoKSBub3cgdXNlcyBhICdsZXZlbCcgb2YgMCBpbnN0ZWFkIG9mIC0xLgorCistIElzc3VlcyAjMTUxNjksICMxNDU5OTogU3RyaXAgb3V0IHRoZSBDIGltcGxlbWVudGF0aW9uIG9mCisgIGltcC5zb3VyY2VfZnJvbV9jYWNoZSgpIHVzZWQgYnkgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKCkgYW5kCisgIHVzZWQgdGhlIFB5dGhvbiBjb2RlIGluc3RlYWQuIExlYWRzIHRvIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KCkgdG8gbm90CisgIHRyeSB0byBpbmZlciB0aGUgc291cmNlIHBhdGggZnJvbSB0aGUgYnl0ZWNvZGUgcGF0aCBhcworICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSBkb2VzLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU2NzY6IE5vdyAibW1hcCIgY2hlY2sgZm9yIGVtcHR5IGZpbGVzIGJlZm9yZSBkb2luZyB0aGUKKyAgb2Zmc2V0IGNoZWNrLiAgUGF0Y2ggYnkgU3RldmVuIFdpbGxpcy4KKworLSBJc3N1ZSAjNjQ5MzogQW4gaXNzdWUgaW4gY3R5cGVzIG9uIFdpbmRvd3MgdGhhdCBjYXVzZWQgc3RydWN0dXJlIGJpdGZpZWxkcworICBvZiB0eXBlIGN0eXBlcy5jX3VpbnQzMiBhbmQgd2lkdGggMzIgdG8gaW5jb3JyZWN0bHkgYmUgc2V0IGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICMxNTE5NDogVXBkYXRlIGxpYmZmaSB0byB0aGUgMy4wLjExIHJlbGVhc2UuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxNTQ1ODogcHl0aG9uLWNvbmZpZyBnZXRzIGEgbmV3IG9wdGlvbiAtLWNvbmZpZ2RpciB0byBwcmludCB0aGUgJExJQlBMCisgIHZhbHVlLgorCistIE1vdmUgaW1wb3J0bGliLnRlc3QuYmVuY2htYXJrIHRvIFRvb2xzL2ltcG9ydGJlbmNoLgorCistIElzc3VlICMxMjYwNTogVGhlIGdkYiBob29rcyBmb3IgZGVidWdnaW5nIENQeXRob24gKHdpdGhpbiBUb29scy9nZGIpIGhhdmUgYmVlbgorICBlbmhhbmNlZCB0byBzaG93IGluZm9ybWF0aW9uIG9uIG1vcmUgQyBmcmFtZXMgcmVsZXZhbnQgdG8gQ1B5dGhvbiB3aXRoaW4gdGhlCisgICJweS1idCIgYW5kICJweS1idC1mdWxsIiBjb21tYW5kczoKKworICAqIEMgZnJhbWVzIHRoYXQgYXJlIHdhaXRpbmcgb24gdGhlIEdJTAorICAqIEMgZnJhbWVzIHRoYXQgYXJlIGdhcmJhZ2UtY29sbGVjdGluZworICAqIEMgZnJhbWVzIHRoYXQgYXJlIGR1ZSB0byB0aGUgaW52b2NhdGlvbiBvZiBhIFB5Q0Z1bmN0aW9uCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU0NDQ6IFVzZSBwcm9wZXIgc3BlbGxpbmcgZm9yIG5vbi1BU0NJSSBjb250cmlidXRvciBuYW1lcy4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1Mjk1OiBSZW9yZ2FuaXplIGFuZCByZXdyaXRlIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBpbXBvcnQgc3lzdGVtLgorCistIElzc3VlICMxNTIzMDogQ2xlYXJseSBkb2N1bWVudCBzb21lIG9mIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgcnVucHkgbW9kdWxlIGFuZAorICBudWRnZSByZWFkZXJzIHRvd2FyZHMgaW1wb3J0bGliIHdoZW4gYXBwcm9wcmlhdGUuCisKKy0gSXNzdWUgIzE1MDUzOiBDb3B5IFB5dGhvbiAzLjMgaW1wb3J0IGxvY2sgY2hhbmdlIG5vdGljZSB0byBhbGwgcmVsZXZhbnQKKyAgZnVuY3Rpb25zIGluIGltcCBpbnN0ZWFkIG9mIGp1c3QgYXQgdGhlIHRvcCBvZiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4KKworLSBJc3N1ZSAjMTUyODg6IExpbmsgdG8gdGhlIHRlcm0gImxvYWRlciIgaW4gbm90ZXMgaW4gcGtndXRpbCBhYm91dCBob3cgdGhpbmdzCisgIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQgaW4gUHl0aG9uIDMuMyBhbmQgbWFyayB0aGUgcmVxdWlzaXRlIGZ1bmN0aW9ucyBhcworICAiY2hhbmdlZCIgc2luY2UgdGhleSB3aWxsIG5vIGxvbmdlciB3b3JrIHdpdGggbW9kdWxlcyBkaXJlY3RseSBpbXBvcnRlZCBieQorICBpbXBvcnQgaXRzZWxmLgorCistIElzc3VlICMxMzU1NzogQ2xhcmlmeSBlZmZlY3Qgb2YgZ2l2aW5nIHR3byBkaWZmZXJlbnQgbmFtZXNwYWNlcyB0byBleGVjIG9yCisgIGV4ZWNmaWxlKCkuCisKKy0gSXNzdWUgIzE1MjUwOiBEb2N1bWVudCB0aGF0IGZpbGVjbXAuZGlyY21wIGNvbXBhcmVzIGZpbGVzIHNoYWxsb3dseS4gUGF0Y2gKKyAgY29udHJpYnV0ZWQgYnkgQ2hyaXMgSmVyZG9uZWsuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNTQ2NzogTW92ZSBoZWxwZXJzIGZvciBfX3NpemVvZl9fIHRlc3RzIGludG8gdGVzdF9zdXBwb3J0LiAgUGF0Y2ggYnkKKyAgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUzMjA6IE1ha2UgaXRlcmF0aW5nIHRoZSBsaXN0IG9mIHRlc3RzIHRocmVhZC1zYWZlIHdoZW4gcnVubmluZyB0ZXN0cworICBpbiBtdWx0aXByb2Nlc3MgbW9kZS4gUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCisKKy0gSXNzdWUgIzE1MTY4OiBNb3ZlIGltcG9ydGxpYi50ZXN0IHRvIHRlc3QudGVzdF9pbXBvcnRsaWIuCisKKy0gSXNzdWUgIzE1MDkxOiBSZWFjdGl2YXRlIGEgdGVzdCBvbiBVTklYIHdoaWNoIHdhcyBmYWlsaW5nIHRoYW5rcyB0byBhCisgIGZvcmdvdHRlbiBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSBjYWxsLgorCistIElzc3VlICMxNTIzMDogQWRvcHRlZCBhIG1vcmUgc3lzdGVtYXRpYyBhcHByb2FjaCBpbiB0aGUgcnVucHkgdGVzdHMuCisKKy0gSXNzdWUgIzE1MzAwOiBFbnN1cmUgdGhlIHRlbXBvcmFyeSB0ZXN0IHdvcmtpbmcgZGlyZWN0b3JpZXMgYXJlIGluIHRoZSBzYW1lCisgIHBhcmVudCBmb2xkZXIgd2hlbiBydW5uaW5nIHRlc3RzIGluIG11bHRpcHJvY2VzcyBtb2RlIGZyb20gYSBQeXRob24gYnVpbGQuCisgIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorCistIElzc3VlICMxNTI4NDogU2tpcCB7c2VuZCxyZWN2fW1zZyB0ZXN0cyBpbiB0ZXN0X3NvY2tldCB3aGVuIElQdjYgaXMgbm90CisgIGVuYWJsZWQuIFBhdGNoIGJ5IEJyaWFuIEJyYXppbC4KKworLSBJc3N1ZSAjMTUyNzc6IEZpeCBhIHJlc291cmNlIGxlYWsgaW4gc3VwcG9ydC5weSB3aGVuIElQdjYgaXMgZGlzYWJsZWQuICBQYXRjaAorICBieSBCcmlhbiBCcmF6aWwuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxMTcxNTogRml4IG11bHRpYXJjaCBkZXRlY3Rpb24gd2l0aG91dCBoYXZpbmcgRGViaWFuIGRldmVsb3BtZW50IHRvb2xzCisgIChkcGtnLWRldikgaW5zdGFsbGVkLgorCistIElzc3VlICMxNTAzNzogQnVpbGQgT1MgWCBpbnN0YWxsZXJzIHdpdGggbG9jYWwgY29weSBvZiBuY3Vyc2VzIDUuOSBsaWJyYXJpZXMKKyAgdG8gYXZvaWQgY3Vyc2VzLnVuZ2V0X3djaCBidWcgcHJlc2VudCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBuY3Vyc2VzIHN1Y2ggYXMKKyAgdGhvc2Ugc2hpcHBlZCB3aXRoIE9TIFguCisKKy0gSXNzdWUgIzE1NTYwOiBGaXggYnVpbGRpbmcgX3NxbGl0ZTMgZXh0ZW5zaW9uIG9uIE9TIFggd2l0aCBhbiBTREsuICBBbHNvLCBmb3IKKyAgT1MgWCBpbnN0YWxsZXJzLCBlbnN1cmUgY29uc2lzdGVudCBzcWxpdGUzIGJlaGF2aW9yIGFuZCBmZWF0dXJlIGF2YWlsYWJpbGl0eQorICBieSBidWlsZGluZyBhIGxvY2FsIGNvcHkgb2YgbGlic3FsaXRlMyByYXRoZXIgdGhhbiBkZXBlbmRpbmcgb24gdGhlIHdpZGUgcmFuZ2UKKyAgb2YgdmVyc2lvbnMgc3VwcGxpZWQgd2l0aCB2YXJpb3VzIE9TIFggcmVsZWFzZXMuCisKKy0gSXNzdWUgIzg4NDc6IERpc2FibGUgQ09NREFUIGZvbGRpbmcgaW4gV2luZG93cyBQR08gYnVpbGRzLgorCistIElzc3VlICMxNDAxODogRml4IE9TIFggVGNsL1RrIGZyYW1ld29yayBjaGVja2luZyB3aGVuIHVzaW5nIE9TIFggU0RLcy4KKworLSBJc3N1ZSAjMTU0MzE6IEFkZCBfZnJlZXplX2ltcG9ydGxpYiBwcm9qZWN0IHRvIHJlZ2VuZXJhdGUgaW1wb3J0bGliLmggb24KKyAgV2luZG93cy4gUGF0Y2ggYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uLgorCistIElzc3VlICMxNDE5NzogRm9yIE9TIFggZnJhbWV3b3JrIGJ1aWxkcywgZW5zdXJlIGxpbmtzIHRvIHRoZSBzaGFyZWQgbGlicmFyeQorICBhcmUgY3JlYXRlZCB3aXRoIHRoZSBwcm9wZXIgQUJJIHN1ZmZpeC4KKworLSBJc3N1ZSAjMTQzMzA6IEZvciBjcm9zcyBidWlsZHMsIGRvbid0IHVzZSBob3N0IHB5dGhvbiwgdXNlIGhvc3Qgc2VhcmNoIHBhdGhzCisgIGZvciBob3N0IGNvbXBpbGVyLgorCistIElzc3VlICMxNTIzNTogQWxsb3cgQmVya2xleSBEQiB2ZXJzaW9ucyB1cCB0byA1LjMgdG8gYnVpbGQgdGhlIGRibSBtb2R1bGUuCisKKy0gSXNzdWUgIzE1MjY4OiBTZWFyY2ggY3Vyc2VzLmggaW4gL3Vzci9pbmNsdWRlL25jdXJzZXN3LgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEJldGEgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjctSnVuLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIEZpeCBhIChtb3N0IGxpa2VseSkgdmVyeSByYXJlIG1lbW9yeSBsZWFrIHdoZW4gY2FsbGluZyBtYWluKCkgYW5kIG5vdCBiZWluZworICBhYmxlIHRvIGRlY29kZSBhIGNvbW1hbmQtbGluZSBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTQ4MTU6IFVzZSBQeV9zc2l6ZV90IGluc3RlYWQgb2YgbG9uZyBmb3IgdGhlIG9iamVjdCBoYXNoLCB0bworICBwcmVzZXJ2ZSBhbGwgNjQgYml0cyBvZiBoYXNoIG9uIFdpbjY0LgorCistIElzc3VlICMxMjI2ODogRmlsZSByZWFkbGluZSwgcmVhZGxpbmVzIGFuZCByZWFkKCkgb3IgcmVhZGFsbCgpIG1ldGhvZHMKKyAgbm8gbG9uZ2VyIGxvc2UgZGF0YSB3aGVuIGFuIHVuZGVybHlpbmcgcmVhZCBzeXN0ZW0gY2FsbCBpcyBpbnRlcnJ1cHRlZC4KKyAgSU9FcnJvciBpcyBubyBsb25nZXIgcmFpc2VkIGR1ZSB0byBhIHJlYWQgc3lzdGVtIGNhbGwgcmV0dXJuaW5nIEVJTlRSCisgIGZyb20gd2l0aGluIHRoZXNlIG1ldGhvZHMuCisKKy0gSXNzdWUgIzExNjI2OiBBZGQgX1NpemVUIGZ1bmN0aW9ucyB0byBzdGFibGUgQUJJLgorCistIElzc3VlICMxNTE0NjogQWRkIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcy4gUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNTE0MjogRml4IHJlZmVyZW5jZSBsZWFrIHdoZW4gZGVhbGxvY2F0aW5nIGluc3RhbmNlcyBvZiB0eXBlcworICBjcmVhdGVkIHVzaW5nIFB5VHlwZV9Gcm9tU3BlYygpLgorCistIElzc3VlICMxNTA0MjogQWRkIFB5U3RhdGVfQWRkTW9kdWxlIGFuZCBQeVN0YXRlX1JlbW92ZU1vZHVsZS4gQWRkIHZlcnNpb24KKyAgZ3VhcmQgZm9yIFB5X0xJTUlURURfQVBJIGFkZGl0aW9ucy4gUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxMDA1MzogRG9uJ3QgY2xvc2UgRkRzIHdoZW4gRmlsZUlPLl9faW5pdF9fIGZhaWxzLiBMb29zZWx5IGJhc2VkIG9uCisgIHRoZSB3b3JrIGJ5IEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICMxNTA5NjogUmVtb3ZlZCBzdXBwb3J0IGZvciB1cicnIGFzIHRoZSByYXcgbm90YXRpb24gaXNuJ3QKKyAgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLngncyByYXcgdW5pY29kZSBzdHJpbmdzLgorCistIElzc3VlICMxMzc4MzogR2VuZXJhdG9yIG9iamVjdHMgbm93IHVzZSB0aGUgaWRlbnRpZmllciBBUElzIGludGVybmFsbHkKKworLSBJc3N1ZSAjMTQ4NzQ6IFJlc3RvcmUgY2hhcm1hcCBkZWNvZGluZyBzcGVlZCB0byBwcmUtUEVQIDM5MyBsZXZlbHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MDI2OiB1dGYtMTYgZW5jb2RpbmcgaXMgbm93IHNpZ25pZmljYW50bHkgZmFzdGVyICh1cCB0byAxMHgpLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMTAyMjogb3BlbigpIGFuZCBpby5UZXh0SU9XcmFwcGVyIGFyZSBub3cgY2FsbGluZworICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpIGluc3RlYWQgb2YgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKKyAgaW4gdGV4dCBtb2RlIGlmIHRoZSBlbmNvZGluZyBpcyBub3Qgc3BlY2lmaWVkLiBEb24ndCBjaGFuZ2UgdGVtcG9yYXJ5IHRoZQorICBsb2NhbGUgZW5jb2RpbmcgdXNpbmcgbG9jYWxlLnNldGxvY2FsZSgpLCB1c2UgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nCisgIGluc3RlYWQgb2YgdGhlIHVzZXIgcHJlZmVycmVkIGVuY29kaW5nLgorCistIElzc3VlICMxNDY3MzogQWRkIEVyaWMgU25vdydzIHN5cy5pbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTUwMzg6IE9wdGltaXplIHB5dGhvbiBMb2NrcyBvbiBXaW5kb3dzLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzk4MDM6IERvbid0IGNsb3NlIElETEUgb24gc2F2aW5nIGlmIGJyZWFrcG9pbnQgaXMgb3Blbi4KKyAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEyMjg4OiBDb25zaWRlciAnMCcgYW5kICcwLjAnIGFzIHZhbGlkIGluaXRpYWx2YWx1ZQorICBmb3IgdGtpbnRlciBTaW1wbGVEaWFsb2cuCisKKy0gSXNzdWUgIzE1NTEyOiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBwYXJzZXIuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDY5OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBkZXF1ZSBvYmplY3RzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQ4OTogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgQnl0ZXNJTyBvYmplY3RzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQ4NzogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgYnVmZmVyZWQgSS9PIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NTE0OiBDb3JyZWN0IF9fc2l6ZW9mX18gc3VwcG9ydCBmb3IgY3B1X3NldC4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUxODc6IEJ1Z2ZpeDogcmVtb3ZlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyB0ZXN0X3NodXRpbCB3YXMgbGVhdmluZworICBiZWhpbmQuCisKKy0gSXNzdWUgIzE1MTc3OiBBZGRlZCBkaXJfZmQgcGFyYW1ldGVyIHRvIG9zLmZ3YWxrKCkuCisKKy0gSXNzdWUgIzE1MTc2OiBDbGFyaWZpZWQgYmVoYXZpb3IsIGRvY3VtZW50YXRpb24sIGFuZCBpbXBsZW1lbnRhdGlvbgorICBvZiBvcy5saXN0ZGlyKCkuCisKKy0gSXNzdWUgIzE1MDYxOiBSZS1pbXBsZW1lbnRlZCBobWFjLmNvbXBhcmVfZGlnZXN0KCkgaW4gQyB0byBwcmV2ZW50IGZ1cnRoZXIKKyAgdGltaW5nIGFuYWx5c2lzIGFuZCB0byBzdXBwb3J0IGFsbCBidWZmZXIgcHJvdG9jb2wgYXdhcmUgb2JqZWN0cyBhcyB3ZWxsIGFzCisgIEFTQ0lJIG9ubHkgc3RyIGluc3RhbmNlcyBzYWZlbHkuCisKKy0gSXNzdWUgIzE1MTY0OiBDaGFuZ2UgcmV0dXJuIHZhbHVlIG9mIHBsYXRmb3JtLnVuYW1lKCkgZnJvbSBhCisgIHBsYWluIHR1cGxlIHRvIGEgY29sbGVjdGlvbnMubmFtZWR0dXBsZS4KKworLSBTdXBwb3J0IE1hZ2VpYSBMaW51eCBpbiB0aGUgcGxhdGZvcm0gbW9kdWxlLgorCistIElzc3VlICMxMTY3ODogU3VwcG9ydCBBcmNoIGxpbnV4IGluIHRoZSBwbGF0Zm9ybSBtb2R1bGUuCisKKy0gSXNzdWUgIzE1MTE4OiBDaGFuZ2UgcmV0dXJuIHZhbHVlIG9mIG9zLnVuYW1lKCkgYW5kIG9zLnRpbWVzKCkgZnJvbQorICBwbGFpbiB0dXBsZXMgdG8gaW1tdXRhYmxlIGl0ZXJhYmxlIG9iamVjdHMgd2l0aCBuYW1lZCBhdHRyaWJ1dGVzCisgIChzdHJ1Y3RzZXEgb2JqZWN0cykuCisKKy0gU3BlZWQgdXAgX2RlY2ltYWwgYnkgYW5vdGhlciAxMC0xNSUgYnkgY2FjaGluZyB0aGUgdGhyZWFkIGxvY2FsIGNvbnRleHQKKyAgdGhhdCB3YXMgbGFzdCBhY2Nlc3NlZC4gSW4gdGhlIHBpIGJlbmNobWFyayAoNjQtYml0IHBsYXRmb3JtLCBwcmVjPTkpLAorICBfZGVjaW1hbCBpcyBub3cgb25seSAxLjV4IHNsb3dlciB0aGFuIGZsb2F0LgorCistIFJlbW92ZSB0aGUgcGFja2FnaW5nIG1vZHVsZSwgd2hpY2ggaXMgbm90IHJlYWR5IGZvciBwcmltZSB0aW1lLgorCistIElzc3VlICMxNTE1NDogQWRkICJkaXJfZmQiIHBhcmFtZXRlciB0byBvcy5ybWRpciwgcmVtb3ZlICJybWRpciIKKyAgcGFyYW1ldGVyIGZyb20gb3MucmVtb3ZlIC8gb3MudW5saW5rLgorCistIElzc3VlICM0NDg5OiBBZGQgYSBzaHV0aWwucm10cmVlIHRoYXQgaXNuJ3Qgc3VzY2VwdGlibGUgdG8gc3ltbGluayBhdHRhY2tzLgorICBJdCBpcyB1c2VkIGF1dG9tYXRpY2FsbHkgb24gcGxhdGZvcm1zIHN1cHBvcnRpbmcgdGhlIG5lY2Vzc2FyeSBvcy5vcGVuYXQoKQorICBhbmQgb3MudW5saW5rYXQoKSBmdW5jdGlvbnMuIE1haW4gY29kZSBieSBNYXJ0aW4gdm9uIEzDtndpcy4KKworLSBJc3N1ZSAjMTUxNTY6IEhUTUxQYXJzZXIgbm93IHVzZXMgdGhlIG5ldyAiaHRtbC5lbnRpdGllcy5odG1sNSIgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjMTExMTM6IGFkZCBhIG5ldyAiaHRtbDUiIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgbmFtZWQgY2hhcmFjdGVyCisgIHJlZmVyZW5jZXMgZGVmaW5lZCBieSB0aGUgSFRNTDUgc3RhbmRhcmQgYW5kIHRoZSBlcXVpdmFsZW50IFVuaWNvZGUKKyAgY2hhcmFjdGVyKHMpIHRvIHRoZSBodG1sLmVudGl0aWVzIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUxMTQ6IHRoZSBzdHJpY3QgbW9kZSBvZiBIVE1MUGFyc2VyIGFuZCB0aGUgSFRNTFBhcnNlRXJyb3IgZXhjZXB0aW9uCisgIGFyZSBkZXByZWNhdGVkIG5vdyB0aGF0IHRoZSBwYXJzZXIgaXMgYWJsZSB0byBwYXJzZSBpbnZhbGlkIG1hcmt1cC4KKworLSBJc3N1ZSAjMzY2NTogXHUgYW5kIFxVIGVzY2FwZXMgYXJlIG5vdyBzdXBwb3J0ZWQgaW4gdW5pY29kZSByZWd1bGFyCisgIGV4cHJlc3Npb25zLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUxNTM6IEFkZGVkIGluc3BlY3QuZ2V0Z2VuZXJhdG9ybG9jYWxzIHRvIHNpbXBsaWZ5IHdoaXRlIGJveAorICB0ZXN0aW5nIG9mIGdlbmVyYXRvciBzdGF0ZSB1cGRhdGVzCisKKy0gSXNzdWUgIzEzMDYyOiBBZGRlZCBpbnNwZWN0LmdldGNsb3N1cmV2YXJzIHRvIHNpbXBsaWZ5IHRlc3Rpbmcgc3RhdGVmdWwKKyAgY2xvc3VyZXMKKworLSBJc3N1ZSAjMTEwMjQ6IEZpeGVzIGFuZCBhZGRpdGlvbmFsIHRlc3RzIGZvciBUaW1lMkludGVybmFsZGF0ZS4KKworLSBJc3N1ZSAjMTQ2MjY6IExhcmdlIHJlZmFjdG9yaW5nIG9mIGZ1bmN0aW9ucyAvIHBhcmFtZXRlcnMgaW4gdGhlIG9zIG1vZHVsZS4KKyAgTWFueSBmdW5jdGlvbnMgbm93IHN1cHBvcnQgImRpcl9mZCIgYW5kICJmb2xsb3dfc3ltbGlua3MiIHBhcmFtZXRlcnM7CisgIHNvbWUgYWxzbyBzdXBwb3J0IGFjY2VwdGluZyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBpbiBwbGFjZSBvZiBhIHBhdGgKKyAgc3RyaW5nLiAgQWRkZWQgb3Muc3VwcG9ydF8qIGNvbGxlY3Rpb25zIGFzIExCWUwgaGVscGVycy4gIFJlbW92ZWQgbWFueQorICBmdW5jdGlvbnMgb25seSBwcmV2aW91c2x5IHNlZW4gaW4gMy4zIGFscGhhIHJlbGVhc2VzIChvZnRlbiBzdGFydGluZyB3aXRoCisgICJmIiBvciAibCIsIG9yIGVuZGluZyB3aXRoICJhdCIpLiAgT3JpZ2luYWxseSBzdWdnZXN0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYTsKKyAgaW1wbGVtZW50ZWQgYnkgTGFycnkgSGFzdGluZ3MuCisKKy0gSXNzdWUgIzE1MDA4OiBJbXBsZW1lbnQgUEVQIDM2MiAiU2lnbmF0dXJlIE9iamVjdHMiLgorICBQYXRjaCBieSBZdXJ5IFNlbGl2YW5vdi4KKworLSBJc3N1ZTogIzE1MTM4OiBiYXNlNjQudXJsc2FmZV97ZW4sZGV9Y29kZSgpIGFyZSBub3cgMy00eCBmYXN0ZXIuCisKKy0gSXNzdWUgIzQ0NDU4MjogQWRkIHNodXRpbC53aGljaCwgZm9yIGZpbmRpbmcgcHJvZ3JhbXMgb24gdGhlIHN5c3RlbSBwYXRoLgorICBPcmlnaW5hbCBwYXRjaCBieSBFcmlrIERlbWFpbmUsIHdpdGggbGF0ZXIgaXRlcmF0aW9ucyBieSBKYW4gS2lsbGlhbgorICBhbmQgQnJpYW4gQ3VydGluLgorCistIElzc3VlICMxNDgzNzogU1NMIGVycm9ycyBub3cgaGF2ZSBgYGxpYnJhcnlgYCBhbmQgYGByZWFzb25gYCBhdHRyaWJ1dGVzCisgIGRlc2NyaWJpbmcgcHJlY2lzZWx5IHdoYXQgaGFwcGVuZWQgYW5kIGluIHdoaWNoIE9wZW5TU0wgc3VibW9kdWxlLiAgVGhlCisgIHN0cigpIG9mIGEgU1NMRXJyb3IgaXMgYWxzbyBlbmhhbmNlZCBhY2NvcmRpbmdseS4KKworLSBJc3N1ZSAjOTUyNzogZGF0ZXRpbWUuYXN0aW1lem9uZSgpIG1ldGhvZCB3aWxsIG5vdyBzdXBwbHkgYSBjbGFzcworICB0aW1lem9uZSBpbnN0YW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzeXN0ZW0gbG9jYWwgdGltZXpvbmUgd2hlbgorICBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzE0NjUzOiBlbWFpbC51dGlscy5ta3RpbWVfdHooKSBubyBsb25nZXIgcmVsaWVzIG9uIHN5c3RlbQorICBta3RpbWUoKSB3aGVuIHRpbWV6b25lIG9mZmVzdCBpcyBzdXBwbGllZC4KKworLSBJc3N1ZSAjMTQ2ODQ6IHpsaWIuY29tcHJlc3NvYmooKSBhbmQgemxpYi5kZWNvbXByZXNzb2JqKCkgbm93IHN1cHBvcnQgdGhlIHVzZQorICBvZiBwcmVkZWZpbmVkIGNvbXByZXNzaW9uIGRpY3Rpb25hcmllcy4gT3JpZ2luYWwgcGF0Y2ggYnkgU2FtIFJ1c2hpbmcuCisKKy0gRml4IEd6aXBGaWxlJ3MgaGFuZGxpbmcgb2YgZmlsZW5hbWVzIGdpdmVuIGFzIGJ5dGVzIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NzcyOiBSZXR1cm4gZGVzdGluYXRpb24gdmFsdWVzIGZyb20gc29tZSBzaHV0aWwgZnVuY3Rpb25zLgorCistIElzc3VlICMxNTA2NDogSW1wbGVtZW50IGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCBmb3IgbXVsdGlwcm9jZXNzaW5nIHR5cGVzCisKKy0gSXNzdWUgIzE1MTAxOiBNYWtlIHBvb2wgZmluYWxpemVyIGF2b2lkIGpvaW5pbmcgY3VycmVudCB0aHJlYWQuCisKKy0gSXNzdWUgIzE0NjU3OiBUaGUgZnJvemVuIGluc3RhbmNlIG9mIGltcG9ydGxpYiB1c2VkIGZvciBib290c3RyYXAgaXMgbm93CisgIGFsc28gdGhlIG1vZHVsZSBpbXBvcnRlZCBhcyBpbXBvcnRsaWIuX2Jvb3RzdHJhcC4KKworLSBJc3N1ZSAjMTQwNTU6IEFkZCBfX3NpemVvZl9fIHN1cHBvcnQgdG8gX2VsZW1lbnR0cmVlLgorCistIElzc3VlICMxNTA1NDogQSBidWcgaW4gdG9rZW5pemUudG9rZW5pemUgdGhhdCBjYXVzZWQgc3RyaW5nIGxpdGVyYWxzCisgIHdpdGggJ2InIHByZWZpeGVzIHRvIGJlIGluY29ycmVjdGx5IHRva2VuaXplZCBoYXMgYmVlbiBmaXhlZC4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUwMDY6IEFsbG93IGVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiBuYWl2ZSBhbmQgYXdhcmUKKyAgdGltZSBvciBkYXRldGltZSBvYmplY3RzLgorCistIElzc3VlICMxNDk4MjogRG9jdW1lbnQgdGhhdCBwa2d1dGlsJ3MgaXRlcmF0aW9uIGZ1bmN0aW9ucyByZXF1aXJlIHRoZQorICBub24tc3RhbmRhcmQgaXRlcl9tb2R1bGVzKCkgbWV0aG9kIHRvIGJlIGRlZmluZWQgYnkgYW4gaW1wb3J0ZXIgKHNvbWV0aGluZworICB0aGUgaW1wb3J0bGliIGltcG9ydGVycyBkbyBub3QgZGVmaW5lKS4KKworLSBJc3N1ZSAjMTUwMzY6IE1haWxib3ggbm8gbG9uZ2VyIHRocm93cyBhbiBlcnJvciBpZiBhIGZsdXNoIGlzIGRvbmUKKyAgYmV0d2VlbiBvcGVyYXRpb25zIHdoZW4gcmVtb3Zpbmcgb3IgY2hhbmdpbmcgbXVsdGlwbGUgaXRlbXMgaW4gbWJveCwKKyAgTU1ERiwgb3IgQmFieWwgbWFpbGJveGVzLgorCistIElzc3VlICMxNDA1OTogSW1wbGVtZW50IG11bHRpcHJvY2Vzc2luZy5CYXJyaWVyLgorCistIElzc3VlICMxNTA2MTogVGhlIGluYXBwcm9wcmlhdGVseSBuYW1lZCBobWFjLnNlY3VyZV9jb21wYXJlIGhhcyBiZWVuCisgIHJlbmFtZWQgdG8gaG1hYy5jb21wYXJlX2RpZ2VzdCwgcmVzdHJpY3RlZCB0byBvcGVyYXRpbmcgb24gYnl0ZXMgaW5wdXRzCisgIG9ubHkgYW5kIGhhZCBpdHMgZG9jdW1lbnRhdGlvbiB1cGRhdGVkIHRvIG1vcmUgYWNjdXJhdGVseSByZWZsZWN0IGJvdGggaXRzCisgIGludGVudCBhbmQgaXRzIGxpbWl0YXRpb25zCisKKy0gSXNzdWUgIzEzODQxOiBNYWtlIGNoaWxkIHByb2Nlc3NlcyBleGl0IHVzaW5nIHN5cy5leGl0KCkgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTQ5MzY6IGN1cnNlc19wYW5lbCB3YXMgY29udmVydGVkIHRvIFBFUCAzMTIxIGFuZCBQRVAgMzg0IEFQSS4KKyAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNjY3NTQ2OiBPbiBwbGF0Zm9ybXMgc3VwcG9ydGluZyB0bV96b25lIGFuZCB0bV9nbXRvZmYgZmllbGRzCisgIGluIHN0cnVjdCB0bSwgdGltZS5zdHJ1Y3RfdGltZSBvYmplY3RzIHJldHVybmVkIGJ5IHRpbWUuZ210aW1lKCksCisgIHRpbWUubG9jYWx0aW1lKCkgYW5kIHRpbWUuc3RycHRpbWUoKSBmdW5jdGlvbnMgbm93IGhhdmUgdG1fem9uZSBhbmQKKyAgdG1fZ210b2ZmIGF0dHJpYnV0ZXMuICBPcmlnaW5hbCBwYXRjaCBieSBQYXVsIEJvZGRpZS4KKworLSBSZW5hbWUgYWRqdXN0ZWQgYXR0cmlidXRlIHRvIGFkanVzdGFibGUgaW4gdGltZS5nZXRfY2xvY2tfaW5mbygpIHJlc3VsdC4KKworLSBJc3N1ZSAjMzUxODogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gbm9uLWV4aXN0ZW50IEJhc2VNYW5hZ2VyLmZyb21fYWRkcmVzcygpCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTM4NTc6IEFkZGVkIHRleHR3cmFwLmluZGVudCgpIGZ1bmN0aW9uIChpbml0aWFsIHBhdGNoIGJ5IEV6cmEKKyAgQmVyY2gpCisKKy0gSXNzdWUgIzI3MzY6IEFkZGVkIGRhdGV0aW1lLnRpbWVzdGFtcCgpIG1ldGhvZC4KKworLSBJc3N1ZSAjMTM4NTQ6IE1ha2UgbXVsdGlwcm9jZXNzaW5nIHByb3Blcmx5IGhhbmRsZSBub24taW50ZWdlcgorICBub24tc3RyaW5nIGFyZ3VtZW50IHRvIFN5c3RlbUV4aXQuCisKKy0gSXNzdWUgIzEyMTU3OiBNYWtlIHBvb2wubWFwKCkgZW1wdHkgaXRlcmFibGVzIGNvcnJlY3RseS4gIEluaXRpYWwKKyAgcGF0Y2ggYnkgbW91YWQuCisKKy0gSXNzdWUgIzExODIzOiBkaXNhc3NlbWJseSBub3cgc2hvd3MgYXJndW1lbnQgY291bnRzIG9uIGNhbGxzIHdpdGgga2V5d29yZCBhcmdzLgorCistIElzc3VlICMxNDcxMTogb3Muc3RhdF9mbG9hdF90aW1lcygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCisKKy0gTFpNQUZpbGUgbm93IGFjY2VwdHMgdGhlIG1vZGVzICJyYiIvIndiIi8iYWIiIGFzIHN5bm9ueW1zIG9mICJyIi8idyIvImEiLgorCistIFRoZSBiejIgYW5kIGx6bWEgbW9kdWxlcyBub3cgZWFjaCBjb250YWluIGFuIG9wZW4oKSBmdW5jdGlvbiwgYWxsb3dpbmcKKyAgY29tcHJlc3NlZCBmaWxlcyB0byByZWFkaWx5IGJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUgYXMgd2VsbCBhcyBiaW5hcnkgbW9kZS4KKworLSBCWjJGaWxlLl9faW5pdF9fKCkgYW5kIExaTUFGaWxlLl9faW5pdF9fKCkgbm93IGFjY2VwdCBhIGZpbGUgb2JqZWN0IGFzIHRoZWlyCisgIGZpcnN0IGFyZ3VtZW50LCByYXRoZXIgdGhhbiByZXF1aXJpbmcgYSBzZXBhcmF0ZSAiZmlsZW9iaiIgYXJndW1lbnQuCisKKy0gZ3ppcC5vcGVuKCkgbm93IGFjY2VwdHMgZmlsZSBvYmplY3RzIGFzIHdlbGwgYXMgZmlsZW5hbWVzLgorCistIElzc3VlICMxNDk5Mjogb3MubWFrZWRpcnMocGF0aCwgZXhpc3Rfb2s9VHJ1ZSkgd291bGQgcmFpc2UgYW4gT1NFcnJvcgorICB3aGVuIHRoZSBwYXRoIGV4aXN0ZWQgYW5kIGhhZCB0aGUgU19JU0dJRCBtb2RlIGJpdCBzZXQgd2hlbiBpdCB3YXMKKyAgbm90IGV4cGxpY2l0bHkgYXNrZWQgZm9yLiAgVGhpcyBpcyBubyBsb25nZXIgYW4gZXhjZXB0aW9uIGFzIG1rZGlyCisgIGNhbm5vdCBjb250cm9sIGlmIHRoZSBPUyBzZXRzIHRoYXQgYml0IGZvciBpdCBvciBub3QuCisKKy0gSXNzdWUgIzE0OTg5OiBNYWtlIHRoZSBDR0kgZW5hYmxlIG9wdGlvbiB0byBodHRwLnNlcnZlciBhdmFpbGFibGUgdmlhIGNvbW1hbmQKKyAgbGluZS4KKworLSBJc3N1ZSAjMTQ5ODc6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHN0YXRlbWVudCB0byBpbnNwZWN0LgorCistIElzc3VlICMxMDc5OiBlbWFpbC5oZWFkZXIuZGVjb2RlX2hlYWRlciBub3cgY29ycmVjdGx5IHBhcnNlcyBhbGwgdGhlIGV4YW1wbGVzCisgIGluIFJGQzIwNDcuICBUaGVyZSBpcyBhIG5lY2Vzc2FyeSB2aXNpYmxlIGJlaGF2aW9yIGNoYW5nZTogdGhlIGxlYWRpbmcgYW5kL29yCisgIHRyYWlsaW5nIHdoaXRlc3BhY2Ugb24gQVNDSUkgcGFydHMgaXMgbm93IHByZXNlcnZlZC4KKworLSBJc3N1ZSAjMTQ5Njk6IEJldHRlciBoYW5kbGluZyBvZiBleGNlcHRpb24gY2hhaW5pbmcgaW4gY29udGV4dGxpYi5FeGl0U3RhY2sKKworLSBJc3N1ZSAjMTQ5NjI6IFVwZGF0ZSB0ZXh0IGNvbG9yaW5nIGluIElETEUgc2hlbGwgd2luZG93IGFmdGVyIGNoYW5naW5nCisgIG9wdGlvbnMuICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTQ5NjM6IENvbnZlcnQgY29udGV4dGxpYi5FeGl0U3RhY2suX19leGl0X18gdG8gdXNlIGFuIGl0ZXJhdGl2ZQorICBhbGdvcml0aG0gKFBhdGNoIGJ5IEFsb24gSG9yZXYpCisKKy0gSXNzdWUgIzE0Nzg1OiBBZGQgc3lzLl9kZWJ1Z21hbGxvY3N0YXRzKCkgdG8gaGVscCBkZWJ1ZyBsb3ctbGV2ZWwgbWVtb3J5CisgIGFsbG9jYXRpb24gaXNzdWVzCisKKy0gSXNzdWUgIzE0NDQzOiBFbnN1cmUgdGhhdCAucHkgZmlsZXMgYXJlIGJ5dGUtY29tcGlsZWQgd2l0aCB0aGUgY29ycmVjdCBQeXRob24KKyAgZXhlY3V0YWJsZSB3aXRoaW4gYmRpc3RfcnBtIGV2ZW4gb24gb2xkZXIgdmVyc2lvbnMgb2YgUlBNCisKK0MtQVBJCistLS0tLQorCistIElzc3VlICMxMzc4MzogSW5hZHZlcnRlbnQgYWRkaXRpb25zIHRvIHRoZSBwdWJsaWMgQyBBUEkgaW4gdGhlIFBFUCAzODAKKyAgaW1wbGVtZW50YXRpb24gaGF2ZSBlaXRoZXIgYmVlbiByZW1vdmVkIG9yIG1hcmtlZCBhcyBwcml2YXRlIGludGVyZmFjZXMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTAwMDogU3VwcG9ydCB0aGUgInVuaXF1ZSIgeDMyIGFyY2hpdGVjdHVyZSBpbiBfcG9zaXhzdWJwcm9jZXNzLmMuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTUwODE6IERvY3VtZW50IFB5U3RhdGVfRmluZE1vZHVsZS4KKyAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNDgxNDogQWRkZWQgZmlyc3QgZHJhZnQgb2YgaXBhZGRyZXNzIG1vZHVsZSBBUEkgcmVmZXJlbmNlCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNDc2OTogdGVzdF9jYXBpIG5vdyBoYXMgU2tpcGl0ZW1UZXN0LCB3aGljaCBjbGV2ZXJseSBjaGVja3MKKyAgZm9yICJwYXJpdHkiIGJldHdlZW4gUHlBcmdfUGFyc2VUdXBsZSgpIGFuZCB0aGUgUHl0aG9uL2dldGFyZ3MuYyBzdGF0aWMKKyAgZnVuY3Rpb24gc2tpcGl0ZW0oKSBmb3IgYWxsIHBvc3NpYmxlICJmb3JtYXQgdW5pdHMiLgorCistIHRlc3Rfbm50cGxpYiBub3cgdG9sZXJhdGVzIGJlaW5nIHJ1biBmcm9tIGJlaGluZCBOTlRQIGdhdGV3YXlzIHRoYXQgYWRkCisgICJYLUFudGl2aXJ1cyIgaGVhZGVycyB0byBhcnRpY2xlcworCistIElzc3VlICMxNTA0MzogdGVzdF9nZGIgaXMgbm93IHNraXBwZWQgZW50aXJlbHkgaWYgZ2RiIHNlY3VyaXR5IHNldHRpbmdzCisgIGJsb2NrIGxvYWRpbmcgb2YgdGhlIGdkYiBob29rcworCistIElzc3VlICMxNDk2MzogQWRkIHRlc3QgY2FzZXMgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZyBiZWhhdmlvdXIKKyAgaW4gY29udGV4dGxpYi5FeGl0U3RhY2sgKEluaXRpYWwgcGF0Y2ggYnkgQWxvbiBIb3JldikKKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzEzNTkwOiBJbXByb3ZlIHN1cHBvcnQgZm9yIE9TIFggWGNvZGUgNDoKKyAgICAqIFRyeSB0byBhdm9pZCBidWlsZGluZyBQeXRob24gb3IgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBwcm9ibGVtYXRpYworICAgICAgbGx2bS1nY2MgY29tcGlsZXIuCisgICAgKiBTaW5jZSBYY29kZSA0IHJlbW92ZXMgcHBjIHN1cHBvcnQsIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIG5vdworICAgICAgY2hlY2sgZm9yIHBwYyBjb21waWxlciBzdXBwb3J0IGFuZCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBwcGMgYW5kCisgICAgICBwcGM2NCBhcmNocyB3aGVuIG5vdCBhdmFpbGFibGUuCisgICAgKiBTaW5jZSBYY29kZSA0IG5vIGxvbmdlciBpbnN0YWxsIFNES3MgaW4gZGVmYXVsdCBsb2NhdGlvbnMsCisgICAgICBleHRlbnNpb24gbW9kdWxlIGJ1aWxkcyBub3cgcmV2ZXJ0IHRvIHVzaW5nIGluc3RhbGxlZCBoZWFkZXJzCisgICAgICBhbmQgbGlicyBpZiB0aGUgU0RLIHVzZWQgdG8gYnVpbGQgdGhlIGludGVycHJldGVyIGlzIG5vdAorICAgICAgYXZhaWxhYmxlLgorICAgICogVXBkYXRlIC4vY29uZmlndXJlIHRvIHVzZSBiZXR0ZXIgZGVmYXVsdHMgZm9yIHVuaXZlcnNhbCBidWlsZHM7CisgICAgICBpbiBwYXJ0aWN1bGFyLCAtLWVuYWJsZS11bml2ZXJzYWxzZGs9eWVzIHVzZXMgdGhlIFhjb2RlIGRlZmF1bHQKKyAgICAgIFNESyBhbmQgLS13aXRoLXVuaXZlcnNhbC1hcmNocyBub3cgZGVmYXVsdHMgdG8gImludGVsIiBpZiBwcGMKKyAgICAgIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE0MjI1OiBGaXggVW5pY29kZSBzdXBwb3J0IGZvciBjdXJzZXMgKCMxMjU2Nykgb24gT1MgWAorCistIElzc3VlICMxNDkyODogRml4IGltcG9ydGxpYiBib290c3RyYXAgaXNzdWVzIGJ5IHVzaW5nIGEgY3VzdG9tIGV4ZWN1dGFibGUKKyAgKE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIpIHRvIGJ1aWxkIFB5dGhvbi9pbXBvcnRsaWIuaC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSA0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMzEtTWF5LTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDgzNTogTWFrZSBwbGlzdGxpYiBvdXRwdXQgZW1wdHkgYXJyYXlzICYgZGljdHMgbGlrZSBPUyBYLgorICBQYXRjaCBieSBTaWRuZXkgU2FuIE1hcnTDrW4uCisKKy0gSXNzdWUgIzE0NzQ0OiBVc2UgdGhlIG5ldyBfUHlVbmljb2RlV3JpdGVyIGludGVybmFsIEFQSSB0byBzcGVlZCB1cAorICBzdHIlYXJncyBhbmQgc3RyLmZvcm1hdChhcmdzKS4KKworLSBJc3N1ZSAjMTQ5MzA6IE1ha2UgbWVtb3J5dmlldyBvYmplY3RzIHdlYWtyZWZhYmxlLgorCistIElzc3VlICMxNDc3NTogRml4IGEgcG90ZW50aWFsIHF1YWRyYXRpYyBkaWN0IGJ1aWxkLXVwIGR1ZSB0byB0aGUgZ2FyYmFnZQorICBjb2xsZWN0b3IgcmVwZWF0ZWRseSB0cnlpbmcgdG8gdW50cmFjayBkaWN0cy4KKworLSBJc3N1ZSAjMTQ4NTc6IGZpeCByZWdyZXNzaW9uIGluIHJlZmVyZW5jZXMgdG8gUEVQIDMxMzUgaW1wbGljaXQgX19jbGFzc19fCisgIGNsb3N1cmUgdmFyaWFibGUgKFJlb3BlbnMgaXNzdWUgIzEyMzcwKQorCistIElzc3VlICMxNDcxMiAoUEVQIDQwNSk6IFZpcnR1YWwgZW52aXJvbm1lbnRzLiBJbXBsZW1lbnRlZCBieSBWaW5heSBTYWppcC4KKworLSBJc3N1ZSAjMTQ2NjAgKFBFUCA0MjApOiBOYW1lc3BhY2UgcGFja2FnZXMuIEltcGxlbWVudGVkIGJ5IEVyaWMgU21pdGguCisKKy0gSXNzdWUgIzE0NDk0OiBGaXggX19mdXR1cmVfXy5weSBhbmQgaXRzIGRvY3VtZW50YXRpb24gdG8gbm90ZSB0aGF0CisgIGFic29sdXRlIGltcG9ydHMgYXJlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGluIDMuMCBpbnN0ZWFkIG9mIDIuNy4KKyAgUGF0Y2ggYnkgU3ZlbiBNYXJuYWNoLgorCistIElzc3VlICM5MjYwOiBBIGZpbmVyLWdyYWluZWQgaW1wb3J0IGxvY2suICBNb3N0IG9mIHRoZSBpbXBvcnQgc2VxdWVuY2UKKyAgbm93IHVzZXMgcGVyLW1vZHVsZSBsb2NrcyByYXRoZXIgdGhhbiB0aGUgZ2xvYmFsIGltcG9ydCBsb2NrLCBlbGltaW5hdGluZworICB3ZWxsLWtub3duIGlzc3VlcyB3aXRoIHRocmVhZHMgYW5kIGltcG9ydHMuCisKKy0gSXNzdWUgIzE0NjI0OiBVVEYtMTYgZGVjb2RpbmcgaXMgbm93IDN4IHRvIDR4IGZhc3RlciBvbiB2YXJpb3VzIGlucHV0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBhc2RsX3NlcSBhbmQgYXNkbF9pbnRfc2VxIGFyZSBub3cgUHlfc3NpemVfdCBzaXplZC4KKworLSBJc3N1ZSAjMTQxMzMgKFBFUCA0MTUpOiBJbXBsZW1lbnQgc3VwcHJlc3Npb24gb2YgX19jb250ZXh0X18gZGlzcGxheSB3aXRoIGFuCisgIGF0dHJpYnV0ZSBvbiBCYXNlRXhjZXB0aW9uLiBUaGlzIHJlcGxhY2VzIHRoZSBvcmlnaW5hbCBtZWNoYW5pc20gb2YgUEVQIDQwOS4KKworLSBJc3N1ZSAjMTQ0MTc6IE11dGF0aW5nIGEgZGljdCBkdXJpbmcgbG9va3VwIG5vdyByZXN0YXJ0cyB0aGUgbG9va3VwIGluc3RlYWQKKyAgb2YgcmFpc2luZyBhIFJ1bnRpbWVFcnJvciAodW5kb2VzIGlzc3VlICMxNDIwNSkuCisKKy0gSXNzdWUgIzE0NzM4OiBTcGVlZC11cCBVVEYtOCBkZWNvZGluZyBvbiBub24tQVNDSUkgZGF0YS4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0NzAwOiBGaXggdHdvIGJyb2tlbiBhbmQgdW5kZWZpbmVkLWJlaGF2aW91ci1pbmR1Y2luZyBvdmVyZmxvdyBjaGVja3MKKyAgaW4gb2xkLXN0eWxlIHN0cmluZyBmb3JtYXR0aW5nLgorCistIElzc3VlICMxNDcwNTogVGhlIFB5QXJnX1BhcnNlKCkgZmFtaWx5IG9mIGZ1bmN0aW9ucyBub3cgc3VwcG9ydCB0aGUgJ3AnIGZvcm1hdAorICB1bml0LCB3aGljaCBhY2NlcHRzIGEgImJvb2xlYW4gcHJlZGljYXRlIiBhcmd1bWVudC4gIEl0IGNvbnZlcnRzIGFueSBQeXRob24KKyAgdmFsdWUgaW50byBhbiBpbnRlZ2VyLS0wIGlmIGl0IGlzICJmYWxzZSIsIGFuZCAxIG90aGVyd2lzZS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDY5MDogVXNlIG1vbm90b25pYyBjbG9jayBpbnN0ZWFkIG9mIHN5c3RlbSBjbG9jayBpbiB0aGUgc2NoZWQsCisgIHN1YnByb2Nlc3MgYW5kIHRyYWNlIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE0OTU4OiBDaGFuZ2UgSURMRSBzeXN0YXggaGlnaGxpZ2h0aW5nIHRvIHJlY29nbml6ZSBhbGwgc3RyaW5nIGFuZAorICBieXRlIGxpdGVyYWxzIHN1cHBvcnRlZCBpbiBQeXRob24gMy4zLgorCistIElzc3VlICMxMDk5NzogUHJldmVudCBhIGR1cGxpY2F0ZSBlbnRyeSBpbiBJRExFJ3MgIlJlY2VudCBGaWxlcyIgbWVudS4KKworLSBJc3N1ZSAjMTQ0NDM6IFRlbGwgcnBtYnVpbGQgdG8gdXNlIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgUHl0aG9uIGluCisgIGJkaXN0X3JwbS4gSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjMTQ5Mjk6IFN0b3AgSWRsZSAzLnggZnJvbSBjbG9zaW5nIG9uIFVuaWNvZGUgZGVjb2RlIGVycm9ycyB3aGVuCisgIGdyZXBwaW5nLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTI1MTU6IGVtYWlsIG5vdyByZWdpc3RlcnMgYSBkZWZlY3QgaWYgaXQgZ2V0cyB0byBFT0Ygd2hpbGUgcGFyc2luZworICBhIE1JTUUgcGFydCB3aXRob3V0IHNlZWluZyB0aGUgY2xvc2luZyBNSU1FIGJvdW5kYXJ5LgorCistIElzc3VlICMxMjUxMDogQXR0ZW1wdGluZyB0byBnZXQgaW52YWxpZCB0b29sdGlwIG5vIGxvbmdlciBjbG9zZXMgSWRsZS4KKyAgT3RoZXIgdG9vbHRpcHNzIGhhdmUgYmVlbiBjb3JyZWN0ZWQgb3IgaW1wcm92ZWQgYW5kIHRoZSBudW1iZXIgb2YgdGVzdHMKKyAgaGFzIGJlZW4gdHJpcGxlZC4gT3JpZ2luYWwgcGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzE2NzI1Njg6IGVtYWlsIG5vdyBhbHdheXMgZGVjb2RlcyBiYXNlNjQgcGF5bG9hZHMsIGFkZGluZyBwYWRkaW5nIGFuZAorICBpZ25vcmluZyBub24tYmFzZTY0LWFscGhhYmV0IGNoYXJhY3RlcnMgaWYgbmVlZGVkLCBhbmQgcmVnaXN0ZXJpbmcgZGVmZWN0cworICBmb3IgYW55IHN1Y2ggcHJvYmxlbXMuCisKKy0gSXNzdWUgIzE0OTI1OiBlbWFpbCBub3cgcmVnaXN0ZXJzIGEgZGVmZWN0IHdoZW4gdGhlIHBhcnNlciBkZWNpZGVzIHRoYXQgdGhlcmUKKyAgaXMgYSBtaXNzaW5nIGhlYWRlci9ib2R5IHNlcGFyYXRvciBsaW5lLiAgTWFsZm9ybWVkSGVhZGVyRGVmZWN0LCB3aGljaCB0aGUKKyAgZXhpc3RpbmcgY29kZSB3b3VsZCBuZXZlciBhY3R1YWxseSBnZW5lcmF0ZSwgaXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTAzNjU6IEZpbGUgb3BlbiBkaWFsb2cgbm93IHdvcmtzIGluc3RlYWQgb2YgY3Jhc2hpbmcgZXZlbiB3aGVuCisgIHRoZSBwYXJlbnQgd2luZG93IGlzIGNsb3NlZCBiZWZvcmUgdGhlIGRpYWxvZy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzg3Mzk6IFVwZGF0ZWQgc210cGQgdG8gc3VwcG9ydCBSRkMgNTMyMSwgYW5kIGFkZGVkIHN1cHBvcnQgZm9yIHRoZQorICBSRkMgMTg3MCBTSVpFIGV4dGVuc2lvbi4KKworLSBJc3N1ZSAjNjY1MTk0OiBBZGRlZCBhIGxvY2FsdGltZSBmdW5jdGlvbiB0byBlbWFpbC51dGlscyB0byBwcm92aWRlIGFuCisgIGF3YXJlIGxvY2FsIGRhdGV0aW1lIGZvciB1c2UgaW4gc2V0dGluZyBEYXRlIGhlYWRlcnMuCisKKy0gSXNzdWUgIzEyNTg2OiBBZGRlZCBuZXcgcHJvdmlzaW9uYWwgcG9saWNpZXMgdGhhdCBpbXBsZW1lbnQgY29udmVuaWVudAorICB1bmljb2RlIHN1cHBvcnQgZm9yIGVtYWlsIGhlYWRlcnMuICBTZWUgV2hhdCdzIE5ldyBmb3IgZGV0YWlscy4KKworLSBJc3N1ZSAjMTQ3MzE6IFJlZmFjdG9yZWQgZW1haWwgUG9saWN5IGZyYW1ld29yayB0byBzdXBwb3J0IGZ1bGwgYmFja3dhcmQKKyAgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjIgYnkgZGVmYXVsdCB5ZXQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YKKyAgbmV3IGZlYXR1cmVzIHRocm91Z2ggbmV3IHBvbGljaWVzLiAgTm90ZSB0aGF0IFBvbGljeS5tdXN0X2JlXzdiaXQgaXMgcmVuYW1lZAorICB0byBjdGVfdHlwZS4KKworLSBJc3N1ZSAjMTQ4NzY6IFVzZSB1c2VyLXNlbGVjdGVkIGZvbnQgZm9yIGhpZ2hsaWdodCBjb25maWd1cmF0aW9uLgorCistIElzc3VlICMxNDkyMDogRml4IHRoZSBoZWxwKHVybGxpYi5wYXJzZSkgZmFpbHVyZSBvbiBsb2NhbGUgQyBvbiB0ZXJtaW5hbHMuCisgIEhhdmUgYXNjaWkgY2hhcmFjdGVycyBpbiBoZWxwLgorCistIElzc3VlICMxNDU0ODogTWFrZSBtdWx0aXByb2Nlc3NpbmcgZmluYWxpemVycyBjaGVjayBwaWQgYmVmb3JlCisgIHJ1bm5pbmcgdG8gY29wZSB3aXRoIHBvc3NpYmlsaXR5IG9mIGdjIHJ1bm5pbmcganVzdCBhZnRlciBmb3JrLgorCistIElzc3VlICMxNDg2MzogVXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uIG9mIG9zLmZkb3BlbigpIHRvIHJlZmxlY3QgdGhlCisgIGZhY3QgdGhhdCBpdCdzIG9ubHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIG9wZW4oKSBhbnltb3JlLgorCistIElzc3VlICMxNDAzNjogQWRkIGFuIGFkZGl0aW9uYWwgY2hlY2sgdG8gdmFsaWRhdGUgdGhhdCBwb3J0IGluIHVybHBhcnNlIGRvZXMKKyAgbm90IGdvIGluIGlsbGVnYWwgcmFuZ2UgYW5kIHJldHVybnMgTm9uZS4KKworLSBJc3N1ZSAjMTQ4NjI6IEFkZCBtaXNzaW5nIG5hbWVzIHRvIG9zLl9fYWxsX18KKworLSBJc3N1ZSAjMTQ4NzU6IFVzZSBmbG9hdCgnaW5mJykgaW5zdGVhZCBvZiBmbG9hdCgnMWU2NjY2NicpIGluIHRoZSBqc29uIG1vZHVsZS4KKworLSBJc3N1ZSAjMTM1ODU6IEFkZGVkIGNvbnRleHRsaWIuRXhpdFN0YWNrCisKKy0gUEVQIDMxNDQsIElzc3VlICMxNDgxNDogQWRkZWQgdGhlIGlwYWRkcmVzcyBtb2R1bGUKKworLSBJc3N1ZSAjMTQ0MjY6IENvcnJlY3QgdGhlIERhdGUgZm9ybWF0IGluIEV4cGlyZXMgYXR0cmlidXRlIG9mIFNldC1Db29raWUKKyAgSGVhZGVyIGluIENvb2tpZS5weS4KKworLSBJc3N1ZSAjMTQ1ODg6IFRoZSB0eXBlcyBtb2R1bGUgbm93IHByb3ZpZGUgbmV3X2NsYXNzKCkgYW5kIHByZXBhcmVfY2xhc3MoKQorICBmdW5jdGlvbnMgdG8gc3VwcG9ydCBQRVAgMzExNSBjb21wbGlhbnQgZHluYW1pYyBjbGFzcyBjcmVhdGlvbi4gUGF0Y2ggYnkKKyAgRGFuaWVsIFVyYmFuIGFuZCBOaWNrIENvZ2hsYW4uCisKKy0gSXNzdWUgIzEzMTUyOiBBbGxvdyB0byBzcGVjaWZ5IGEgY3VzdG9tIHRhYnNpemUgZm9yIGV4cGFuZGluZyB0YWJzIGluCisgIHRleHR3cmFwLiBQYXRjaCBieSBKb2huIEZldWVyc3RlaW4uCisKKy0gSXNzdWUgIzE0NzIxOiBTZW5kIHRoZSBjb3JyZWN0ICdDb250ZW50LWxlbmd0aDogMCcgaGVhZGVyIHdoZW4gdGhlIGJvZHkgaXMgYW4KKyAgZW1wdHkgc3RyaW5nICcnLiBJbml0aWFsIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEFydmUgS251ZHNlbi4KKworLSBJc3N1ZSAjMTQwNzI6IEZpeCBwYXJzaW5nIG9mICd0ZWwnIFVSSXMgaW4gdXJscGFyc2UgYnkgbWFraW5nIHRoZSBjaGVjayBmb3IKKyAgcG9ydHMgc3RyaWN0ZXIuCisKKy0gSXNzdWUgIzkzNzQ6IEdlbmVyaWMgcGFyc2luZyBvZiBxdWVyeSBhbmQgZnJhZ21lbnQgcG9ydGlvbnMgb2YgdXJsIGZvciBhbnkKKyAgc2NoZW1lLiBTdXBwb3J0ZWQgYm90aCBieSBSRkMzOTg2IGFuZCBSRkMyMzk2LgorCistIElzc3VlICMxNDc5ODogRml4IHRoZSBmdW5jdGlvbnMgaW4gcHljbGJyIHRvIHJhaXNlIGFuIEltcG9ydEVycm9yCisgIHdoZW4gdGhlIGZpcnN0IHBhcnQgb2YgYSBkb3R0ZWQgbmFtZSBpcyBub3QgYSBwYWNrYWdlLiBQYXRjaCBieQorICBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMTIwOTg6IG11bHRpcHJvY2Vzc2luZyBvbiBXaW5kb3dzIG5vdyBzdGFydHMgY2hpbGQgcHJvY2Vzc2VzCisgIHVzaW5nIHRoZSBzYW1lIHN5cy5mbGFncyBhcyB0aGUgY3VycmVudCBwcm9jZXNzLiAgSW5pdGlhbCBwYXRjaCBieQorICBTZXJnZXkgTWV6ZW50c2V2LgorCistIElzc3VlICMxMzAzMTogU21hbGwgc3BlZWQtdXAgZm9yIHRhcmZpbGUgd2hlbiB1bnppcHBpbmcgdGFyZmlsZXMuCisgIFBhdGNoIGJ5IEp1c3RpbiBQZWVsLgorCistIElzc3VlICMxNDc4MDogdXJsbGliLnJlcXVlc3QudXJsb3BlbigpIG5vdyBoYXMgYSBgYGNhZGVmYXVsdGBgIGFyZ3VtZW50CisgIHRvIHVzZSB0aGUgZGVmYXVsdCBjZXJ0aWZpY2F0ZSBzdG9yZS4gIEluaXRpYWwgcGF0Y2ggYnkgSmFtZXMgT2FrbGV5LgorCistIElzc3VlICMxNDgyOTogRml4IGJpc2VjdCBhbmQgcmFuZ2UoKSBpbmRleGluZyB3aXRoIGxhcmdlIGluZGljZXMKKyAgKD49IDIgKiogMzIpIHVuZGVyIDY0LWJpdCBXaW5kb3dzLgorCistIElzc3VlICMxNDczMjogVGhlIF9jc3YgbW9kdWxlIG5vdyB1c2VzIFBFUCAzMTIxIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KKyAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNDgwOTogQWRkIEhUVFAgc3RhdHVzIGNvZGVzIGludHJvZHVjZWQgYnkgUkZDIDY1ODUgdG8gaHR0cC5zZXJ2ZXIKKyAgYW5kIGh0dHAuY2xpZW50LiBQYXRjaCBieSBFdW5nSnVuIFlpLgorCistIElzc3VlICMxNDc3NzogdGtpbnRlciBtYXkgcmV0dXJuIHVuZGVjb2RlZCBVVEYtOCBieXRlcyBhcyBhIHN0cmluZyB3aGVuCisgIGFjY2Vzc2luZyB0aGUgVGsgY2xpcGJvYXJkLiAgTW9kaWZ5IGNsaXBib2FkX2dldCgpIHRvIGZpcnN0IHJlcXVlc3QgdHlwZQorICBVVEY4X1NUUklORyB3aGVuIG5vIHNwZWNpZmljIHR5cGUgaXMgcmVxdWVzdGVkIGluIGFuIFgxMSB3aW5kb3dpbmcKKyAgZW52aXJvbm1lbnQsIGZhbGxpbmcgYmFjayB0byB0aGUgY3VycmVudCBkZWZhdWx0IHR5cGUgU1RSSU5HIGlmIHRoYXQgZmFpbHMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFRob21hcyBLbHV5dmVyLgorCistIElzc3VlICMxNDc3MzogRml4IG9zLmZ3YWxrKCkgZmFpbGluZyBvbiBkYW5nbGluZyBzeW1saW5rcy4KKworLSBJc3N1ZSAjMTI1NDE6IEJlIGxlbmllbnQgd2l0aCBxdW90ZXMgYXJvdW5kIFJlYWxtIGZpZWxkIG9mIEhUVFAgQmFzaWMKKyAgQXV0aGVudGF0aW9uIGluIHVybGxpYjIuCisKKy0gSXNzdWUgIzE0ODA3OiBtb3ZlIHVuZG9jdW1lbnRlZCB0YXJmaWxlLmZpbGVtb2RlKCkgdG8gc3RhdC5maWxlbW9kZSgpIGFuZCBhZGQKKyAgZG9jIGVudHJ5LiBBZGQgdGFyZmlsZS5maWxlbW9kZSBhbGlhcyB3aXRoIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisKKy0gSXNzdWUgIzEzODE1OiBUYXJGaWxlLmV4dHJhY3RmaWxlKCkgbm93IHJldHVybnMgaW8uQnVmZmVyZWRSZWFkZXIgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ1MzI6IEFkZCBhIHNlY3VyZV9jb21wYXJlKCkgaGVscGVyIHRvIHRoZSBobWFjIG1vZHVsZSwgdG8gbWl0aWdhdGUKKyAgdGltaW5nIGF0dGFja3MuIFBhdGNoIGJ5IEpvbiBPYmVyaGVpZGUuCisKKy0gQWRkIGltcG9ydGxpYi51dGlsLnJlc29sdmVfbmFtZSgpLgorCistIElzc3VlICMxNDM2NjogU3VwcG9ydCBsem1hIGNvbXByZXNzaW9uIGluIHppcCBmaWxlcy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTM5NTk6IEludHJvZHVjZSBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSBhbmQgZG9jdW1lbnQKKyAgaW1wLmZpbmRfbW9kdWxlL2xvYWRfbW9kdWxlIGFzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE0MDgyOiBzaHV0aWwuY29weTIoKSBub3cgY29waWVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGlmIHBvc3NpYmxlLgorICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzOTU5OiBNYWtlIGltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5sb2FkX21vZHVsZSgpL2dldF9maWxlbmFtZSgpIGFuZAorICBpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIubG9hZF9tb2R1bGUoKSBoYXZlIHRoZWlyIHNpbmdsZQorICBhcmd1bWVudCBiZSBvcHRpb25hbC4gQWxsb3dzIGZvciB0aGUgcmVwbGFjZW1lbnQgKGFuZCB0aHVzIGRlcHJlY2F0aW9uKSBvZgorICBpbXAubG9hZF9zb3VyY2UoKS9sb2FkX3BhY2thZ2UoKS9sb2FkX2NvbXBpbGVkKCkuCisKKy0gSXNzdWUgIzEzOTU5OiBpbXAuZ2V0X3N1ZmZpeGVzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgdGhlIG5ldworICBhdHRyaWJ1dGVzIG9uIGltcG9ydGxpYi5tYWNoaW5lcnk6IFNPVVJDRV9TVUZGSVhFUywgREVCVUdfQllURUNPREVfU1VGRklYRVMsCisgIE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUywgQllURUNPREVfU1VGRklYRVMsIGFuZCBFWFRFTlNJT05fU1VGRklYRVMuIFRoaXMKKyAgbGVkIHRvIGFuIGluZGlyZWN0IGRlcHJlY2F0aW9uIG9mIGluc3BlY3QuZ2V0bW9kdWxlaW5mbygpLgorCistIElzc3VlICMxNDY2MjogUHJldmVudCBzaHV0aWwgZmFpbHVyZXMgb24gT1MgWCB3aGVuIGRlc3RpbmF0aW9uIGRvZXMgbm90CisgIHN1cHBvcnQgY2hmbGFnIG9wZXJhdGlvbnMuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzE0MTU3OiBGaXggdGltZS5zdHJwdGltZSBmYWlsaW5nIHdpdGhvdXQgYSB5ZWFyIG9uIEZlYnJ1YXJ5IDI5dGguCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTQ3NTM6IE1ha2UgbXVsdGlwcm9jZXNzaW5nJ3MgaGFuZGxpbmcgb2YgbmVnYXRpdmUgdGltZW91dHMKKyAgdGhlIHNhbWUgYXMgaXQgd2FzIGluIFB5dGhvbiAzLjIuCisKKy0gSXNzdWUgIzE0NTgzOiBGaXggaW1wb3J0bGliIGJ1ZyB3aGVuIGEgcGFja2FnZSdzIF9faW5pdF9fLnB5IHdvdWxkIGZpcnN0CisgIGltcG9ydCBvbmUgb2YgaXRzIG1vZHVsZXMgdGhlbiByYWlzZSBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTQ3NDE6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yIEVsbGlwc2lzICgnLi4uJykgaW4gcGFyc2VyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQ2OTc6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yIHNldCBkaXNwbGF5cyBhbmQgc2V0IGNvbXByZWhlbnNpb25zIGluCisgIHBhcnNlciBtb2R1bGUuCisKKy0gSXNzdWUgIzE0NzAxOiBGaXggbWlzc2luZyBzdXBwb3J0IGZvciAncmFpc2UgLi4uIGZyb20nIGluIHBhcnNlciBtb2R1bGUuCisKKy0gQWRkIHN1cHBvcnQgZm9yIHRpbWVvdXRzIHRvIHRoZSBhY3F1aXJlKCkgbWV0aG9kcyBvZgorICBtdWx0aXByb2Nlc3NpbmcncyBsb2NrL3NlbWFwaG9yZS9jb25kaXRpb24gcHJveGllcy4KKworLSBJc3N1ZSAjMTM5ODk6IEFkZCBzdXBwb3J0IGZvciB0ZXh0IG1vZGUgdG8gZ3ppcC5vcGVuKCkuCisKKy0gSXNzdWUgIzE0MTI3OiBUaGUgb3Muc3RhdCgpIHJlc3VsdCBvYmplY3Qgbm93IHByb3ZpZGVzIHRocmVlIGFkZGl0aW9uYWwKKyAgZmllbGRzOiBzdF9jdGltZV9ucywgc3RfbXRpbWVfbnMsIGFuZCBzdF9hdGltZV9ucywgcHJvdmlkaW5nIHRob3NlIHRpbWVzIGFzIGFuCisgIGludGVnZXIgd2l0aCBuYW5vc2Vjb25kIHJlc29sdXRpb24uICBUaGUgZnVuY3Rpb25zIG9zLnV0aW1lKCksIG9zLmx1dGltZXMoKSwKKyAgYW5kIG9zLmZ1dGltZXMoKSBub3cgYWNjZXB0IGEgbmV3IHBhcmFtZXRlciwgbnMsIHdoaWNoIGFjY2VwdHMgbXRpbWUgYW5kIGF0aW1lCisgIGFzIGludGVnZXJzIHdpdGggbmFub3NlY29uZCByZXNvbHV0aW9uLgorCistIElzc3VlICMxNDEyNyBhbmQgIzEwMTQ4OiBzaHV0aWwuY29weXN0YXQgbm93IHByZXNlcnZlcyBleGFjdCBtdGltZSBhbmQgYXRpbWUKKyAgb24gZmlsZXN5c3RlbXMgcHJvdmlkaW5nIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0Njk1OiBCcmluZyBUb29scy9wYXJzZXIvdW5wYXJzZS5weSBzdXBwb3J0IHVwIHRvIGRhdGUgd2l0aAorICB0aGUgUHl0aG9uIDMuMyBHcmFtbWFyLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTQ0NzI6IFVwZGF0ZSAuZ2l0aWdub3JlLiBQYXRjaCBieSBNYXRlaiBDZXBsLgorCistIFVwZ3JhZGUgV2luZG93cyBsaWJyYXJ5IHZlcnNpb25zOiBiemlwIDEuMC42LCBPcGVuU1NMIDEuMC4xYy4KKworLSBJc3N1ZSAjMTQ2OTM6IFVuZGVyIG5vbi1XaW5kb3dzIHBsYXRmb3JtcywgaGFzaGxpYidzIGZhbGxiYWNrIG1vZHVsZXMgYXJlCisgIGFsd2F5cyBjb21waWxlZCwgZXZlbiBpZiBPcGVuU1NMIGlzIHByZXNlbnQgYXQgYnVpbGQgdGltZS4KKworLSBJc3N1ZSAjMTMyMTA6IFdpbmRvd3MgYnVpbGQgbm93IHVzZXMgVlMyMDEwLCBwb3J0ZWQgZnJvbSBWUzIwMDguCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ1ODg6IFRoZSBsYW5ndWFnZSByZWZlcmVuY2Ugbm93IGFjY3VyYXRlbHkgZG9jdW1lbnRzIHRoZSBQeXRob24gMworICBjbGFzcyBkZWZpbml0aW9uIHByb2Nlc3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbi4KKworLSBJc3N1ZSAjMTQ5NDM6IENvcnJlY3QgYSBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlIGZvciB3aW5yZWcuT3BlbktleQorICBhbmQgY29ycmVjdGx5IGxpc3QgdGhlIGFyZ3VtZW50IG5hbWVzIGluIHRoZSBmdW5jdGlvbidzIGV4cGxhbmF0aW9uLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwMS1NYXktMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0Njk5OiBGaXggY2FsbGluZyB0aGUgY2xhc3NtZXRob2QgZGVzY3JpcHRvciBkaXJlY3RseS4KKworLSBJc3N1ZSAjMTQ0MzM6IFByZXZlbnQgbXN2Y3J0IGNyYXNoIGluIGludGVyYWN0aXZlIHByb21wdCB3aGVuIHN0ZGluIGlzIGNsb3NlZC4KKworLSBJc3N1ZSAjMTQ1MjE6IE1ha2UgcmVzdWx0IG9mIGZsb2F0KCduYW4nKSBhbmQgZmxvYXQoJy1uYW4nKSBtb3JlIGNvbnNpc3RlbnQKKyAgYWNyb3NzIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTQ2NDY6IF9faW1wb3J0X18oKSBzZXRzIF9fbG9hZGVyX18gaWYgdGhlIGxvYWRlciBkaWQgbm90LgorCistIElzc3VlICMxNDYwNTogTm8gbG9uZ2VyIGhhdmUgaW1wbGljaXQgZW50cmllcyBpbiBzeXMubWV0YV9wYXRoLiBJZgorICBzeXMubWV0YV9wYXRoIGlzIGZvdW5kIHRvIGJlIGVtcHR5LCByYWlzZSBJbXBvcnRXYXJuaW5nLgorCistIElzc3VlICMxNDYwNTogTm8gbG9uZ2VyIGhhdmUgaW1wbGljaXQgZW50cmllcyBpbiBzeXMucGF0aF9ob29rcy4gSWYKKyAgc3lzLnBhdGhfaG9va3MgaXMgZm91bmQgdG8gYmUgZW1wdHksIGEgd2FybmluZyB3aWxsIGJlIHJhaXNlZC4gTm9uZSBpcyBub3cKKyAgaW5zZXJ0ZWQgaW50byBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSBpZiBubyBmaW5kZXIgd2FzIGRpc2NvdmVyZWQuIFRoaXMgYWxzbworICBtZWFucyBpbXAuTnVsbEltcG9ydGVyIGlzIG5vIGxvbmdlciBpbXBsaWNpdGx5IHVzZWQuCisKKy0gSXNzdWUgIzEzOTAzOiBJbXBsZW1lbnQgUEVQIDQxMi4gSW5kaXZpZHVhbCBkaWN0aW9uYXJ5IGluc3RhbmNlcyBjYW4gbm93IHNoYXJlCisgIHRoZWlyIGtleXMgd2l0aCBvdGhlciBkaWN0aW9uYXJpZXMuIENsYXNzZXMgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyB0byBzaGFyZQorICB0aGVpciBpbnN0YW5jZSBkaWN0aW9uYXJ5IGtleXMgZm9yIGltcHJvdmVkIG1lbW9yeSBhbmQgcGVyZm9ybWFuY2UuCisKKy0gSXNzdWUgIzExNjAzIChhZ2Fpbik6IFNldHRpbmcgX19yZXByX18gdG8gX19zdHJfXyBub3cgcmFpc2VzIGEgUnVudGltZUVycm9yCisgIHdoZW4gcmVwcigpIG9yIHN0cigpIGlzIGNhbGxlZCBvbiBzdWNoIGFuIG9iamVjdC4KKworLSBJc3N1ZSAjMTQ2NTg6IEZpeCBiaW5kaW5nIGEgc3BlY2lhbCBtZXRob2QgdG8gYSBidWlsdGluIGltcGxlbWVudGF0aW9uIG9mIGEKKyAgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIGRpZmZlcmVudCBuYW1lLgorCistIElzc3VlICMxNDYzMDogRml4IGEgbWVtb3J5IGFjY2VzcyBidWcgZm9yIGluc3RhbmNlcyBvZiBhIHN1YmNsYXNzIG9mIGludAorICB3aXRoIHZhbHVlIDAuCisKKy0gSXNzdWUgIzE0MzM5OiBTcGVlZCBpbXByb3ZlbWVudHMgdG8gYmluLCBvY3QgYW5kIGhleCBmdW5jdGlvbnMuICBQYXRjaCBieQorICBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNDA5ODogTmV3IGZ1bmN0aW9ucyBQeUVycl9HZXRFeGNJbmZvIGFuZCBQeUVycl9TZXRFeGNJbmZvLgorICBQYXRjaCBieSBTdGVmYW4gQmVobmVsLgorCistIElzc3VlICMxNDM4NTogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSB0eXBlIGZvciB0aGUgX19idWlsdGluc19fCisgIG5hbWVzcGFjZSwgaW5zdGVhZCBvZiBhIGRpY3QuIEl0IGNhbiBiZSB1c2VkIGZvciBzYW5kYm94aW5nIGZvciBleGFtcGxlLgorICBSYWlzZSBhbHNvIGEgTmFtZUVycm9yIGluc3RlYWQgb2YgSW1wb3J0RXJyb3IgaWYgX19idWlsZF9jbGFzc19fIG5hbWUgaWYgbm90CisgIGZvdW5kIGluIF9fYnVpbHRpbnNfXy4KKworLSBJc3N1ZSAjMTI1OTk6IEJlIG1vcmUgc3RyaWN0IGluIGFjY2VwdGluZyBOb25lIGNvbXBhcmVkIHRvIGEgZmFsc2UtbGlrZQorICBvYmplY3QgZm9yIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyIGFuZAorICBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuCisKKy0gSXNzdWUgIzE0NjEyOiBGaXgganVtcGluZyBhcm91bmQgd2l0aCBibG9ja3MgYnkgc2V0dGluZyBmX2xpbmVuby4KKworLSBJc3N1ZSAjMTQ1OTI6IEF0dGVtcHRpbmcgYSByZWxhdGl2ZSBpbXBvcnQgdy9vIF9fcGFja2FnZV9fIG9yIF9fbmFtZV9fIHNldCBpbgorICBnbG9iYWxzIHJhaXNlcyBhIEtleUVycm9yLgorCistIElzc3VlICMxNDYwNzogRml4IGtleXdvcmQtb25seSBhcmd1bWVudHMgd2hpY2ggc3RhcnRlZCB3aXRoIGBgX19gYC4KKworLSBJc3N1ZSAjMTA4NTQ6IFRoZSBJbXBvcnRFcnJvciByYWlzZWQgd2hlbiBhbiBleHRlbnNpb24gbW9kdWxlIG9uIFdpbmRvd3MKKyAgZmFpbHMgdG8gaW1wb3J0IG5vdyB1c2VzIHRoZSBuZXcgcGF0aCBhbmQgbmFtZSBhdHRyaWJ1dGVzIGZyb20KKyAgSXNzdWUgIzE1NTk1NDkuCisKKy0gSXNzdWUgIzEzODg5OiBDaGVjayBhbmQgKGlmIG5lY2Vzc2FyeSkgc2V0IEZQVSBjb250cm9sIHdvcmQgYmVmb3JlIGNhbGxpbmcKKyAgYW55IG9mIHRoZSBkdG9hLmMgc3RyaW5nIDwtPiBmbG9hdCBjb252ZXJzaW9uIGZ1bmN0aW9ucywgb24gTVNWQyBidWlsZHMgb2YKKyAgUHl0aG9uLiAgVGhpcyBmaXhlcyBpc3N1ZXMgd2hlbiBlbWJlZGRpbmcgUHl0aG9uIGluIGEgRGVscGhpIGFwcC4KKworLSBfX2ltcG9ydF9fKCkgbm93IG1hdGNoZXMgUEVQIDMyOCBhbmQgZG9jdW1lbnRhdGlvbiBieSBkZWZhdWx0aW5nICdpbmRleCcgdG8gMAorICBpbnN0ZWFkIG9mIC0xIGFuZCByZW1vdmluZyBzdXBwb3J0IGZvciBuZWdhdGl2ZSB2YWx1ZXMuCisKKy0gSXNzdWUgIzIzNzc6IE1ha2UgaW1wb3J0bGliIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBfX2ltcG9ydF9fKCkuCisKKy0gSXNzdWUgIzE1NTk1NDk6IEltcG9ydEVycm9yIG5vdyBoYXMgJ25hbWUnIGFuZCAncGF0aCcgYXR0cmlidXRlcyB0aGF0IGFyZSBzZXQKKyAgdXNpbmcga2V5d29yZCBhcmd1bWVudHMgdG8gaXRzIGNvbnN0cnVjdG9yLiBUaGV5IGFyZSBjdXJyZW50bHkgbm90IHNldCBieQorICBpbXBvcnQgYXMgdGhleSBhcmUgbWVhbnQgZm9yIHVzZSBieSBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzE0NDc0OiBTYXZlIGFuZCByZXN0b3JlIGV4Y2VwdGlvbiBzdGF0ZSBpbiB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZCgpCisgIHdoaWxlIHdyaXRpbmcgZXJyb3IgbWVzc2FnZSBpZiB0aGUgdGhyZWFkIGxlYXZlcyBhIHVuaGFuZGxlZCBleGNlcHRpb24uCisKKy0gSXNzdWUgIzEzMDE5OiBGaXggcG90ZW50aWFsIHJlZmVyZW5jZSBsZWFrcyBpbiBieXRlYXJyYXkuZXh0ZW5kKCkuICBQYXRjaAorICBieSBTdW1hbiBTYWhhLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0NzY4OiBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vYScpIGRvZXNuJ3Qgd29ya3MgY29ycmVjdGx5IHdoZW4gSE9NRSBpcyAnLycuCisKKy0gSXNzdWUgIzE0MzcxOiBTdXBwb3J0IGJ6aXAyIGluIHppcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTMxODM6IEZpeCBwZGIgc2tpcHBpbmcgZnJhbWVzIGFmdGVyIGhpdHRpbmcgYSBicmVha3BvaW50IGFuZCBydW5uaW5nCisgIHN0ZXAuICBQYXRjaCBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMTQ2OTY6IEZpeCBwYXJzZXIgbW9kdWxlIHRvIHVuZGVyc3RhbmQgJ25vbmxvY2FsJyBkZWNsYXJhdGlvbnMuCisKKy0gSXNzdWUgIzEwOTQxOiBGaXggaW1hcGxpYi5JbnRlcm5hbGRhdGUydHVwbGUgdG8gcHJvZHVjZSBjb3JyZWN0IHJlc3VsdCBuZWFyCisgIHRoZSBEU1QgdHJhbnNpdGlvbi4gIFBhdGNoIGJ5IEpvZSBQZXRlcnNvbi4KKworLSBJc3N1ZSAjOTE1NDogRml4IHBhcnNlciBtb2R1bGUgdG8gdW5kZXJzdGFuZCBmdW5jdGlvbiBhbm5vdGF0aW9ucy4KKworLSBJc3N1ZSAjNjA4NTogSW4gaHR0cC5zZXJ2ZXIucHkgU2ltcGxlSFRUUFNlcnZlci5hZGRyZXNzX3N0cmluZyByZXR1cm5zIHRoZQorICBjbGllbnQgaXAgYWRkcmVzcyBpbnN0ZWFkIGNsaWVudCBob3N0bmFtZS4gUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxNDMwOTogRGVwcmVjYXRlIHRpbWUuY2xvY2soKSwgdXNlIHRpbWUucGVyZl9jb3VudGVyKCkgb3IKKyAgdGltZS5wcm9jZXNzX3RpbWUoKSBpbnN0ZWFkLgorCistIElzc3VlICMxNDQyODogSW1wbGVtZW50IHRoZSBQRVAgNDE4LiBBZGQgdGltZS5nZXRfY2xvY2tfaW5mbygpLAorICB0aW1lLnBlcmZfY291bnRlcigpIGFuZCB0aW1lLnByb2Nlc3NfdGltZSgpIGZ1bmN0aW9ucywgYW5kIHJlbmFtZQorICB0aW1lLnN0ZWFkeSgpIHRvIHRpbWUubW9ub3RvbmljKCkuCisKKy0gSXNzdWUgIzE0NjQ2OiBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcigpIG5vdyBzZXRzIF9fbG9hZGVyX18gYW5kCisgIF9fcGFja2FnZV9fICh3aGVuIHBvc3NpYmxlKS4KKworLSBJc3N1ZSAjMTQ2NjQ6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgQHVuaXR0ZXN0LnNraXB7SWYsVW5sZXNzfSBvbiBhCisgIHRlc3QgY2xhc3MgdGhhdCBkb2Vzbid0IGluaGVyaXQgZnJvbSBUZXN0Q2FzZSAoaS5lLiBhIG1peGluKS4KKworLSBJc3N1ZSAjNDg5MjogbXVsdGlwcm9jZXNzaW5nIENvbm5lY3Rpb25zIGNhbiBub3cgYmUgdHJhbnNmZXJyZWQgb3ZlcgorICBtdWx0aXByb2Nlc3NpbmcgQ29ubmVjdGlvbnMuICBQYXRjaCBieSBSaWNoYXJkIE91ZGtlcmsgKHNidCkuCisKKy0gSXNzdWUgIzE0MTYwOiBUYXJGaWxlLmV4dHJhY3RmaWxlKCkgZmFpbGVkIHRvIHJlc29sdmUgc3ltYm9saWMgbGlua3Mgd2hlbgorICB0aGUgbGlua3Mgd2VyZSBub3QgbG9jYXRlZCBpbiBhbiBhcmNoaXZlIHN1YmRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTQ2Mzg6IHB5ZG9jIG5vdyB0cmVhdHMgbm9uLXN0cmluZyBfX25hbWVfXyB2YWx1ZXMgYXMgaWYgdGhleQorICB3ZXJlIG1pc3NpbmcsIGluc3RlYWQgb2YgcmFpc2luZyBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTM2ODQ6IEZpeCBodHRwbGliIHR1bm5lbCBpc3N1ZSBvZiBpbmZpbml0ZSBsb29wcyBmb3IgY2VydGFpbiBzaXRlcworICB3aGljaCBzZW5kIEVPRiB3aXRob3V0IHRyYWlsaW5nIFxyXG4uCisKKy0gSXNzdWUgIzE0NjA1OiBBZGQgaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLCBpbXBvcnRsaWIubWFjaGluZXJ5LihGaWxlRmluZGVyLAorICBTb3VyY2VGaWxlTG9hZGVyLCBTb3VyY2VsZXNzRmlsZUxvYWRlciwgRXh0ZW5zaW9uRmlsZUxvYWRlcikuCisKKy0gSXNzdWUgIzEzOTU5OiBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoKS9zb3VyY2VfZnJvbV9jYWNoZSgpIG5vdyBmb2xsb3cKKyAgb3MucGF0aC5qb2luKCkvc3BsaXQoKSBzZW1hbnRpY3MgZm9yIHBhdGggbWFuaXB1bGF0aW9uIGluc3RlYWQgb2YgaXRzIHByaW9yLAorICBjdXN0b20gc2VtYW50aWNzIG9mIGNhcmluZyB0aGUgcmlnaHQtbW9zdCBwYXRoIHNlcGFyYXRvciBmb3J3YXJkIGluIHBhdGgKKyAgam9pbmluZy4KKworLSBJc3N1ZSAjMjE5MzogQWxsb3cgIjoiIGNoYXJhY3RlciBpbiBDb29raWUgTkFNRSB2YWx1ZXMuCisKKy0gSXNzdWUgIzE0NjI5OiB0b2tlbml6ZXIuZGV0ZWN0X2VuY29kaW5nIHdpbGwgc3BlY2lmeSB0aGUgZmlsZW5hbWUgaW4gdGhlCisgIFN5bnRheEVycm9yIGV4Y2VwdGlvbiBpZiBmb3VuZCBhdCByZWFkbGluZS5fX3NlbGZfXy5uYW1lLgorCistIElzc3VlICMxNDYyOTogUmFpc2UgU3ludGF4RXJyb3IgaW4gdG9rZW5pemVyLmRldGVjdF9lbmNvZGluZyBpZiB0aGUKKyAgZmlyc3QgdHdvIGxpbmVzIGhhdmUgbm9uLVVURi04IGNoYXJhY3RlcnMgd2l0aG91dCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbi4KKworLSBJc3N1ZSAjMTQzMDg6IEZpeCBhbiBleGNlcHRpb24gd2hlbiBhICJkdW1teSIgdGhyZWFkIGlzIGluIHRoZSB0aHJlYWRpbmcKKyAgbW9kdWxlJ3MgYWN0aXZlIGxpc3QgYWZ0ZXIgYSBmb3JrKCkuCisKKy0gSXNzdWUgIzExNzUwOiBUaGUgV2luZG93cyBBUEkgZnVuY3Rpb25zIHNjYXR0ZXJlZCBpbiB0aGUgX3N1YnByb2Nlc3MgYW5kCisgIF9tdWx0aXByb2Nlc3Npbmcud2luMzIgbW9kdWxlcyBub3cgbGl2ZSBpbiBhIHNpbmdsZSBtb2R1bGUgIl93aW5hcGkiLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MDg3OiBtdWx0aXByb2Nlc3Npbmc6IGFkZCBDb25kaXRpb24ud2FpdF9mb3IoKS4gUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxNDUzODogSFRNTFBhcnNlciBjYW4gbm93IHBhcnNlIGNvcnJlY3RseSBzdGFydCB0YWdzIHRoYXQgY29udGFpbgorICBhIGJhcmUgJy8nLgorCistIElzc3VlICMxNDQ1MjogU3lzTG9nSGFuZGxlciBubyBsb25nZXIgaW5zZXJ0cyBhIFVURi04IEJPTSBpbnRvIHRoZSBtZXNzYWdlLgorCistIElzc3VlICMxNDM4NjogRXhwb3NlIHRoZSBkaWN0X3Byb3h5IGludGVybmFsIHR5cGUgYXMgdHlwZXMuTWFwcGluZ1Byb3h5VHlwZS4KKworLSBJc3N1ZSAjMTM5NTk6IE1ha2UgaW1wLnJlbG9hZCgpIGFsd2F5cyB1c2UgYSBtb2R1bGUncyBfX2xvYWRlcl9fIHRvIHBlcmZvcm0KKyAgdGhlIHJlbG9hZC4KKworLSBJc3N1ZSAjMTM5NTk6IEFkZCBpbXAucHkgYW5kIHJlbmFtZSB0aGUgYnVpbHQtaW4gbW9kdWxlIHRvIF9pbXAsIGFsbG93aW5nIGZvcgorICByZS1pbXBsZW1lbnRpbmcgcGFydHMgb2YgdGhlIG1vZHVsZSBpbiBwdXJlIFB5dGhvbi4KKworLSBJc3N1ZSAjMTM0OTY6IEZpeCBwb3RlbnRpYWwgb3ZlcmZsb3cgaW4gYmlzZWN0LmJpc2VjdCBhbGdvcml0aG0gd2hlbiBhcHBsaWVkCisgIHRvIGEgY29sbGVjdGlvbiBvZiBzaXplID4gc3lzLm1heHNpemUgLyAyLgorCistIEhhdmUgaW1wb3J0bGliIHRha2UgYWR2YW50YWdlIG9mIEltcG9ydEVycm9yJ3MgbmV3ICduYW1lJyBhbmQgJ3BhdGgnCisgIGF0dHJpYnV0ZXMuCisKKy0gSXNzdWUgIzE0Mzk5OiB6aXBmaWxlIG5vdyByZWNvZ25pemVzIHRoYXQgdGhlIGFyY2hpdmUgaGFzIGJlZW4gbW9kaWZpZWQgZXZlbgorICBpZiBvbmx5IHRoZSBjb21tZW50IGlzIGNoYW5nZWQuICBJbiBhZGRpdGlvbiwgdGhlIFR5cGVFcnJvciB0aGF0IHJlc3VsdHMgZnJvbQorICB0cnlpbmcgdG8gc2V0IGEgbm9uLWJpbmFyeSB2YWx1ZSBhcyBhIGNvbW1lbnQgaXMgbm93IHJhaXNlZCBhdCB0aGUgdGltZQorICB0aGUgY29tbWVudCBpcyBzZXQgcmF0aGVyIHRoYW4gYXQgdGhlIHRpbWUgdGhlIHppcGZpbGUgaXMgd3JpdHRlbi4KKworLSB0cmFjZS5Db3ZlcmFnZVJlc3VsdHMuaXNfaWdub3JlZF9maWxlbmFtZSgpIG5vdyBpZ25vcmVzIGFueSBuYW1lIHRoYXQgc3RhcnRzCisgIHdpdGggIjwiIGFuZCBlbmRzIHdpdGggIj4iIGluc3RlYWQgb2Ygc3BlY2lhbC1jYXNpbmcgIjxzdHJpbmc+IiBhbmQKKyAgIjxkb2N0ZXN0ICIuCisKKy0gSXNzdWUgIzEyNTM3OiBUaGUgbWFpbGJveCBtb2R1bGUgbm8gbG9uZ2VyIGRlcGVuZHMgb24ga25vd2xlZGdlIG9mIGludGVybmFsCisgIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGVtYWlsIHBhY2thZ2UgTWVzc2FnZSBvYmplY3QuCisKKy0gSXNzdWUgIzc5Nzg6IHNvY2tldHNlcnZlciBub3cgcmVzdGFydHMgdGhlIHNlbGVjdCgpIGNhbGwgd2hlbiBFSU5UUiBpcworICByZXR1cm5lZC4gIFRoaXMgYXZvaWRzIGNyYXNoaW5nIHRoZSBzZXJ2ZXIgbG9vcCB3aGVuIGEgc2lnbmFsIGlzIHJlY2VpdmVkLgorICBQYXRjaCBieSBKZXJ6eSBLb3plcmEuCisKKy0gSXNzdWUgIzE0NTIyOiBBdm9pZCBkdXBsaWNhdGluZyBzb2NrZXQgaGFuZGxlcyBpbiBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi4KKyAgUGF0Y2ggYnkgc2J0LgorCistIERvbid0IFB5X0RFQ1JFRiBOVUxMIHZhcmlhYmxlIGluIGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIuCisKKy0gSXNzdWUgIzg1MTU6IFNldCBfX2ZpbGVfXyB3aGVuIHJ1biBmaWxlIGluIElETEUuCisgIEluaXRpYWwgcGF0Y2ggYnkgQnJ1Y2UgRnJlZGVyaWtzZW4uCisKKy0gSXNzdWUgIzE0NDk2OiBGaXggd3JvbmcgbmFtZSBpbiBpZGxlbGliL3RhYmJlZHBhZ2VzLnB5LgorICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzMwMzM6IEFkZCBkaXNwbGF5b2YgcGFyYW1ldGVyIHRvIHRraW50ZXIgZm9udC4gUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzE0NDgyOiBSYWlzZSBhIFZhbHVlRXJyb3IsIG5vdCBhIE5hbWVFcnJvciwgd2hlbiB0cnlpbmcgdG8gY3JlYXRlCisgIGEgbXVsdGlwcm9jZXNzaW5nIENsaWVudCBvciBMaXN0ZW5lciB3aXRoIGFuIEFGX1VOSVggdHlwZSBhZGRyZXNzIHVuZGVyCisgIFdpbmRvd3MuICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzgwMjMxMDogR2VuZXJhdGUgYWx3YXlzIHVuaXF1ZSB0a2ludGVyIGZvbnQgbmFtZXMgaWYgbm90IGRpcmVjdGx5IHBhc3NlZC4KKworLSBJc3N1ZSAjMTQxNTE6IFJhaXNlIGEgVmFsdWVFcnJvciwgbm90IGEgTmFtZUVycm9yLCB3aGVuIHRyeWluZyB0byBjcmVhdGUKKyAgYSBtdWx0aXByb2Nlc3NpbmcgQ2xpZW50IG9yIExpc3RlbmVyIHdpdGggYW4gQUZfUElQRSB0eXBlIGFkZHJlc3MgdW5kZXIKKyAgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgUG9wYSBDbGF1ZGl1LgorCistIElzc3VlICMxNDQ5MzogVXNlIGd2ZnMtb3BlbiBvciB4ZGctb3BlbiBpbiB3ZWJicm93c2VyLgorCitCdWlsZAorLS0tLS0KKworLSAibWFrZSB0b3VjaCIgd2lsbCBub3cgdG91Y2ggZ2VuZXJhdGVkIGZpbGVzIHRoYXQgYXJlIGNoZWNrZWQgaW50byBNZXJjdXJpYWwsCisgIGFmdGVyIGEgImhnIHVwZGF0ZSIgd2hpY2ggZmFpbGVkIHRvIGJyaW5nIHRoZSB0aW1lc3RhbXBzIGludG8gdGhlIHJpZ2h0IG9yZGVyLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTQwMjY6IEluIHRlc3RfY21kX2xpbmVfc2NyaXB0LCBjaGVjayB0aGF0IHN5cy5hcmd2IGlzIHBvcHVsYXRlZAorICBjb3JyZWN0bHkgZm9yIHRoZSB2YXJpb3VzIGludm9jYXRpb24gYXBwcm9hY2hlcyAoUGF0Y2ggYnkgSmFzb24gWWVvKQorCistIElzc3VlICMxNDAzMjogRml4IGluY29ycmVjdCB2YXJpYWJsZSBuYW1lIGluIHRlc3RfY21kX2xpbmVfc2NyaXB0IGRlYnVnZ2luZworICBtZXNzYWdlIChQYXRjaCBieSBKYXNvbiBZZW8pCisKKy0gSXNzdWUgIzE0NTg5OiBVcGRhdGUgY2VydGlmaWNhdGUgY2hhaW4gZm9yIHNoYTI1Ni50YnMtaW50ZXJuZXQuY29tLCBmaXhpbmcKKyAgYSB0ZXN0IGZhaWx1cmUgaW4gdGVzdF9zc2wuCisKKy0gSXNzdWUgIzE0MzU1OiBSZWdydGVzdCBub3cgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIHVuaXR0ZXN0IHRlc3QgbG9hZGluZywgYW5kCisgIHdpbGwgdXNlIGl0IGlmIGEgdGVzdCBmaWxlIGNvbnRhaW5zIG5vIGB0ZXN0X21haW5gIG1ldGhvZC4KKworVG9vbHMgLyBEZW1vcworLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMzNTYxOiBUaGUgV2luZG93cyBpbnN0YWxsZXIgbm93IGhhcyBhbiBvcHRpb24sIG9mZiBieSBkZWZhdWx0LCBmb3IKKyAgcGxhY2luZyB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiBpbnRvIHRoZSBzeXN0ZW0gIlBhdGgiIGVudmlyb25tZW50IHZhcmlhYmxlLgorCistIElzc3VlICMxMzE2NTogc3RyaW5nYmVuY2ggaXMgbm93IGF2YWlsYWJsZSBpbiB0aGUgVG9vbHMvc3RyaW5nYmVuY2ggZm9sZGVyLgorICBJdCB1c2VkIHRvIGxpdmUgaW4gaXRzIG93biBTVk4gcHJvamVjdC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDEtQXByLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjgzMzY4OiBvYmplY3QuX19uZXdfXyBhbmQgb2JqZWN0Ll9faW5pdF9fIHJhaXNlIGEgVHlwZUVycm9yIGlmIHRoZXkKKyAgYXJlIHBhc3NlZCBhcmd1bWVudHMgYW5kIHRoZWlyIGNvbXBsZW1lbnRhcnkgbWV0aG9kIGlzIG5vdCBvdmVycmlkZGVuLgorCistIElzc3VlICMxNDM3ODogRml4IGNvbXBpbGluZyBhc3QuSW1wb3J0RnJvbSBub2RlcyB3aXRoIGEgIl9fZnV0dXJlX18iIHN0cmluZyBhcworICB0aGUgbW9kdWxlIG5hbWUgdGhhdCB3YXMgbm90IGludGVybmVkLgorCistIElzc3VlICMxNDMzMTogVXNlIHNpZ25pZmljYW50bHkgbGVzcyBzdGFjayBzcGFjZSB3aGVuIGltcG9ydGluZyBtb2R1bGVzIGJ5CisgIGFsbG9jYXRpbmcgcGF0aCBidWZmZXJzIG9uIHRoZSBoZWFwIGluc3RlYWQgb2YgdGhlIHN0YWNrLgorCistIElzc3VlICMxNDMzNDogUHJldmVudCBpbiBhIHNlZ2ZhdWx0IGluIHR5cGUuX19nZXRhdHRyaWJ1dGVfXyB3aGVuIGl0IHdhcyBub3QKKyAgcGFzc2VkIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE0Njk2Mjk6IEFsbG93IGN5Y2xlcyB0aHJvdWdoIGFuIG9iamVjdCdzIF9fZGljdF9fIHNsb3QgdG8gYmUKKyAgY29sbGVjdGVkLiAoRm9yIGV4YW1wbGUgaWYgYGB4Ll9fZGljdF9fIGlzIHhgYCkuCisKKy0gSXNzdWUgIzE0MjA1OiBkaWN0IGxvb2t1cCByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlIGRpY3QgaXMgbW9kaWZpZWQKKyAgZHVyaW5nIGEgbG9va3VwLgorCistIElzc3VlICMxNDIyMDogV2hlbiBhIGdlbmVyYXRvciBpcyBkZWxlZ2F0aW5nIHRvIGFub3RoZXIgaXRlcmF0b3Igd2l0aCB0aGUKKyAgeWllbGQgZnJvbSBzeW50YXgsIGl0IG5lZWRzIHRvIGhhdmUgaXRzIGBgZ2lfcnVubmluZ2BgIGZsYWcgc2V0IHRvIFRydWUuCisKKy0gSXNzdWUgIzE0NDM1OiBSZW1vdmUgZGVkaWNhdGVkIGJsb2NrIGFsbG9jYXRvciBmcm9tIGZsb2F0b2JqZWN0LmMgYW5kIHJlbHkKKyAgb24gdGhlIFB5T2JqZWN0X01hbGxvYygpIGFwaSBsaWtlIGFsbCBvdGhlciBvYmplY3RzLgorCistIElzc3VlICMxNDQ3MTogRml4IGEgcG9zc2libGUgYnVmZmVyIG92ZXJydW4gaW4gdGhlIHdpbnJlZyBtb2R1bGUuCisKKy0gSXNzdWUgIzE0Mjg4OiBBbGxvdyB0aGUgc2VyaWFsaXphdGlvbiBvZiBidWlsdGluIGl0ZXJhdG9ycworCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0MzAwOiBVbmRlciBXaW5kb3dzLCBzb2NrZXRzIGNyZWF0ZWQgdXNpbmcgc29ja2V0LmR1cCgpIG5vdyBhbGxvdworICBvdmVybGFwcGVkIEkvTy4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTM4NzI6IHNvY2tldC5kZXRhY2goKSBub3cgbWFya3MgdGhlIHNvY2tldCBjbG9zZWQgKGFzIG1pcnJvcmVkCisgIGluIHRoZSBzb2NrZXQgcmVwcigpKS4gIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgorCistIElzc3VlICMxNDQwNjogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlbiB1c2luZyBgYGNvbmN1cnJlbnQuZnV0dXJlcy53YWl0KAorICByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKWBgLiAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCisKKy0gSXNzdWUgIzUxMzY6IGRlcHJlY2F0ZSBvbGQsIHVudXNlZCBmdW5jdGlvbnMgZnJvbSB0a2ludGVyLgorCistIElzc3VlICMxNDQwOTogSURMRSBub3cgcHJvcGVybHkgZXhlY3V0ZXMgY29tbWFuZHMgaW4gdGhlIFNoZWxsIHdpbmRvdworICB3aGVuIGl0IGNhbm5vdCByZWFkIHRoZSBub3JtYWwgY29uZmlnIGZpbGVzIG9uIHN0YXJ0dXAgYW5kCisgIGhhcyB0byB1c2UgdGhlIGJ1aWx0LWluIGRlZmF1bHQga2V5IGJpbmRpbmdzLgorICBUaGVyZSB3YXMgcHJldmlvdXNseSBhIGJ1ZyBpbiBvbmUgb2YgdGhlIGRlZmF1bHRzLgorCistIElzc3VlICMxNDQxNjogc3lzbG9nIG5vdyBkZWZpbmVzIHRoZSBMT0dfT0RFTEFZIGFuZCBMT0dfQVVUSFBSSVYgY29uc3RhbnRzCisgIGlmIHRoZXkgYXJlIGRlZmluZWQgaW4gPHN5c2xvZy5oPi4KKworLSBJRExFIGNhbiBiZSBsYXVuY2hlZCBhcyBweXRob24gLW0gaWRsZWxpYgorCistIElzc3VlICMxNDI5NTogQWRkIHVuaXR0ZXN0Lm1vY2sKKworLSBJc3N1ZSAjNzY1MjogQWRkIC0td2l0aC1zeXN0ZW0tbGlibXBkZWMgb3B0aW9uIHRvIGNvbmZpZ3VyZSBmb3IgbGlua2luZworICB0aGUgX2RlY2ltYWwgbW9kdWxlIGFnYWluc3QgYW4gaW5zdGFsbGVkIGxpYm1wZGVjLgorCistIElzc3VlICMxNDM4MDogTUlNRVRleHQgbm93IGRlZmF1bHRzIHRvIHV0Zi04IHdoZW4gcGFzc2VkIG5vbi1BU0NJSSB1bmljb2RlCisgIHdpdGggbm8gY2hhcnNldCBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzEwMzQwOiBhc3luY29yZSAtIHByb3Blcmx5IGhhbmRsZSBFSU5WQUwgaW4gZGlzcGF0Y2hlciBjb25zdHJ1Y3RvciBvbgorICBPU1g7IGF2b2lkIHRvIGNhbGwgaGFuZGxlX2Nvbm5lY3QgaW4gY2FzZSBvZiBhIGRpc2Nvbm5lY3RlZCBzb2NrZXQgd2hpY2gKKyAgd2FzIG5vdCBtZWFudCB0byBjb25uZWN0LgorCistIElzc3VlICMxNDIwNDogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciB0aGUgTmV4dCBQcm90b2NvbAorICBOZWdvdGlhdGlvbiBleHRlbnNpb24sIGlmIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBPcGVuU1NMIGxpYnJhcnkuCisgIFBhdGNoIGJ5IENvbGluIE1hcmMuCisKKy0gSXNzdWUgIzMwMzU6IFVudXNlZCBmdW5jdGlvbnMgZnJvbSB0a2ludGVyIGFyZSBtYXJrZWQgYXMgcGVuZGluZyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMjc1NzogRml4IHRoZSBza2lwcGluZyBvZiBkb2N0ZXN0cyB3aGVuIHB5dGhvbiBpcyBydW4gd2l0aCAtT08gc28KKyAgdGhhdCBpdCB3b3JrcyBpbiB1bml0dGVzdCdzIHZlcmJvc2UgbW9kZSBhcyB3ZWxsIGFzIG5vbi12ZXJib3NlIG1vZGUuCisKKy0gSXNzdWUgIzc2NTI6IEludGVncmF0ZSB0aGUgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBsaWJtcGRlYyBsaWJyYXJ5IHRvIHNwZWVkCisgIHVwIHRoZSBkZWNpbWFsIG1vZHVsZS4gUGVyZm9ybWFuY2UgZ2FpbnMgb2YgdGhlIG5ldyBDIGltcGxlbWVudGF0aW9uIGFyZQorICBiZXR3ZWVuIDEweCBhbmQgMTAweCwgZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbi4KKworLSBJc3N1ZSAjMzU3MzogSURMRSBoYW5ncyB3aGVuIHBhc3NpbmcgaW52YWxpZCBjb21tYW5kIGxpbmUgYXJncworICAoZGlyZWN0b3J5KGllcykgaW5zdGVhZCBvZiBmaWxlKHMpKSAoUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8pCisKKy0gSXNzdWUgIzE0MjY5OiBTTVRQRCBub3cgY29uZm9ybXMgdG8gdGhlIFJGQyBhbmQgcmVxdWlyZXMgYSBIRUxPIGNvbW1hbmQKKyAgYmVmb3JlIE1BSUwsIFJDUFQsIG9yIERBVEEuCisKKy0gSXNzdWUgIzEzNjk0OiBhc3luY2hyb25vdXMgY29ubmVjdCBpbiBhc3luY29yZS5kaXNwYXRjaGVyIGRvZXMgbm90IHNldCBhZGRyCisgIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMTQzNDQ6IGZpeGVkIHRoZSByZXByIG9mIGVtYWlsLnBvbGljeSBvYmplY3RzLgorCistIElzc3VlICMxMTY4NjogQWRkZWQgbWlzc2luZyBlbnRyaWVzIHRvIGVtYWlsIHBhY2thZ2UgX19hbGxfXyBsaXN0cworICAobW9zdGx5IHRoZSBuZXcgQnl0ZXMgY2xhc3NlcykuCisKKy0gSXNzdWUgIzE0MzM1OiBtdWx0aXByb2Nlc3NpbmcncyBjdXN0b20gUGlja2xlciBzdWJjbGFzcyBub3cgaW5oZXJpdHMgZnJvbQorICB0aGUgQy1hY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbi4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTA0ODQ6IEZpeCB0aGUgQ0dJSFRUUFNlcnZlcidzIFBBVEhfSU5GTyBoYW5kbGluZyBwcm9ibGVtLgorCistIElzc3VlICMxMTE5OTogRml4IHRoZSB3aXRoIHVybGxpYiB3aGljaCBoYW5ncyBvbiBwYXJ0aWN1bGFyIGZ0cCB1cmxzLgorCistIEltcHJvdmUgdGhlIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQgc3BlZWQgb2YgZnVuY3Rvb2xzLmxydV9jYWNoZS4KKworLSBJc3N1ZSAjMTQyMjI6IFVzZSB0aGUgbmV3IHRpbWUuc3RlYWR5KCkgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aW1lLnRpbWUoKSBmb3IKKyAgdGltZW91dCBpbiBxdWV1ZSBhbmQgdGhyZWFkaW5nIG1vZHVsZXMgdG8gbm90IGJlIGFmZmVjdGVkIG9mIHN5c3RlbSB0aW1lCisgIHVwZGF0ZS4KKworLSBJc3N1ZSAjMTMyNDg6IFJlbW92ZSBsaWIydG8zLnB5dHJlZS5CYXNlLmdldF9wcmVmaXgvc2V0X3ByZWZpeC4KKworLSBJc3N1ZSAjMTQyMzQ6IENWRS0yMDEyLTA4NzY6IFJhbmRvbWl6ZSBoYXNoZXMgb2YgeG1sIGF0dHJpYnV0ZXMgaW4gdGhlIGhhc2gKKyAgdGFibGUgaW50ZXJuYWwgdG8gdGhlIHB5ZXhwYXQgbW9kdWxlJ3MgY29weSBvZiB0aGUgZXhwYXQgbGlicmFyeSB0byBhdm9pZCBhCisgIGRlbmlhbCBvZiBzZXJ2aWNlIGR1ZSB0byBoYXNoIGNvbGxpc2lvbnMuICBQYXRjaCBieSBEYXZpZCBNYWxjb2xtIHdpdGggc29tZQorICBtb2RpZmljYXRpb25zIGJ5IHRoZSBleHBhdCBwcm9qZWN0LgorCistIElzc3VlICMxNDIwMDogSWRsZSBzaGVsbCBjcmFzaCBvbiBwcmludGluZyBub24tQk1QIHVuaWNvZGUgY2hhcmFjdGVyLgorCistIElzc3VlICMxMjgxODogZm9ybWF0IGFkZHJlc3Mgbm8gbG9uZ2VyIG5lZWRsZXNzbHkgXCBlc2NhcGVzICgpcyBpbiBuYW1lcyB3aGVuCisgIHRoZSBuYW1lIGVuZHMgdXAgYmVpbmcgcXVvdGVkLgorCistIElzc3VlICMxNDA2MjogQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBmb2xkcyBIZWFkZXIgb2JqZWN0cywKKyAgaW5jbHVkaW5nIHVzaW5nIGxpbmVzZXAgd2hlbiBmb2xkaW5nLgorCistIElzc3VlICMxMzgzOTogV2hlbiBpbnZva2VkIG9uIHRoZSBjb21tYW5kLWxpbmUsIHRoZSBwc3RhdHMgbW9kdWxlIG5vdworICBhY2NlcHRzIHNldmVyYWwgZmlsZW5hbWVzIG9mIHByb2ZpbGUgc3RhdCBmaWxlcyBhbmQgbWVyZ2VzIHRoZW0gYWxsLgorICBQYXRjaCBieSBNYXR0IEpvaW5lci4KKworLSBJc3N1ZSAjMTQyOTE6IEVtYWlsIG5vdyBkZWZhdWx0cyB0byB1dGYtOCBmb3Igbm9uLUFTQ0lJIHVuaWNvZGUgaGVhZGVycworICBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuICBUaGlzIGZpeGVzIGEgcmVncmVzc2lvbiByZWxhdGl2ZSB0byAyLjcuCisKKy0gSXNzdWUgIzk4OTcxMjogU3VwcG9ydCB1c2luZyBUayB3aXRob3V0IGEgbWFpbmxvb3AuCisKKy0gSXNzdWUgIzUyMTk6IFByZXZlbnQgZXZlbnQgaGFuZGxlciBjYXNjYWRlIGluIElETEUuCisKKy0gSXNzdWUgIzM4MzU6IFJlZnVzZSB0byB1c2UgdW50aHJlYWRlZCBUY2wgaW4gdGhyZWFkZWQgUHl0aG9uLgorCistIElzc3VlICMyODQzOiBBZGQgbmV3IFRrIEFQSSB0byBUa2ludGVyLgorCistIElzc3VlICMxNDE4NDogSW5jcmVhc2UgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3Igc2Vjb25kYXJ5IHRocmVhZHMgb24KKyAgTWFjIE9TIFggdG8gYXZvaWQgaW50ZXJwcmV0ZXIgY3Jhc2hlcyB3aGVuIHVzaW5nIHRocmVhZHMgb24gMTAuNy4KKworLSBJc3N1ZSAjMTQxODA6IGRhdGV0aW1lLmRhdGUuZnJvbXRpbWVzdGFtcCgpLAorICBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKCkgYW5kIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoKQorICBub3cgcmFpc2UgYW4gT1NFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3IgaWYgbG9jYWx0aW1lKCkgb3IgZ210aW1lKCkgZmFpbGVkLgorCistIElzc3VlICMxNDE4MDogdGltZS5jdGltZSgpLCBnbXRpbWUoKSwgdGltZS5sb2NhbHRpbWUoKSwKKyAgZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wKCksIGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQKKyAgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciwgaW5zdGVhZCBvZgorICBhIFZhbHVlRXJyb3IsIGlmIHRoZSB0aW1lc3RhbXAgZG9lcyBub3QgZml0IGluIHRpbWVfdC4KKworLSBJc3N1ZSAjMTQxODA6IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQKKyAgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpIG5vdyByb3VuZCBtaWNyb3NlY29uZHMgdG93YXJkcyB6ZXJvCisgIGluc3RlYWQgb2Ygcm91bmRpbmcgdG8gbmVhcmVzdCB3aXRoIHRpZXMgZ29pbmcgYXdheSBmcm9tIHplcm8uCisKKy0gSXNzdWUgIzEwNTQzOiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgd2l0aCBKeXRob24gYnl0ZWNvZGUgZmlsZXMuCisKKy0gSXNzdWUgIzExNzg4NjM6IFNlcGFyYXRlIGluaXRpYWxpc2F0aW9uIGZyb20gc2V0dGluZyB3aGVuIGluaXRpYWxpemluZworICBUa2ludGVyLlZhcmlhYmxlczsgaGFybW9uaXplIGV4Y2VwdGlvbnMgdG8gVmFsdWVFcnJvcjsgb25seSBkZWxldGUgdmFyaWFibGVzCisgIHRoYXQgaGF2ZSBub3QgYmVlbiBkZWxldGVkOyBhc3NlcnQgdGhhdCB2YXJpYWJsZSBuYW1lcyBhcmUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTQxMDQ6IEltcGxlbWVudCB0aW1lLm1vbm90b25pYygpIG9uIE1hYyBPUyBYLCBwYXRjaCB3cml0dGVuIGJ5CisgIE5pY2hvbGFzIFJpbGV5LgorCistIElzc3VlICMxMzM5NDogdGhlIGFpZmMgbW9kdWxlIG5vdyB1c2VzIHdhcm5pbmdzLndhcm4oKSB0byBzaWduYWwgd2FybmluZ3MuCisKKy0gSXNzdWUgIzE0MjUyOiBGaXggc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGUoKSB0byBub3QgcmFpc2UgYW4gZXJyb3IgdW5kZXIKKyAgV2luZG93cyB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBhbHJlYWR5IGV4aXRlZC4KKworLSBJc3N1ZSAjMTQyMjM6IGN1cnNlcy5hZGRjaCgpIGlzIG5vIG1vcmUgbGltaXRlZCB0byB0aGUgcmFuZ2UgMC0yNTUgd2hlbiB0aGUKKyAgUHl0aG9uIGN1cnNlcyBpcyBub3QgbGlua2VkIHRvIGxpYm5jdXJzZXN3LiBJdCB3YXMgYSByZWdyZXNzaW9uIGludHJvZHVjZWQKKyAgaW4gUHl0aG9uIDMuM2ExLgorCistIElzc3VlICMxNDE2ODogQ2hlY2sgZm9yIHByZXNlbmNlIG9mIEVsZW1lbnQuX2F0dHJzIGluIG1pbmlkb20gYmVmb3JlCisgIGFjY2Vzc2luZyBpdC4KKworLSBJc3N1ZSAjMTIzMjg6IEZpeCBtdWx0aXByb2Nlc3NpbmcncyB1c2Ugb2Ygb3ZlcmxhcHBlZCBJL08gb24gV2luZG93cy4KKyAgQWxzbywgYWRkIGEgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24ud2FpdChybGlzdCwgdGltZW91dD1Ob25lKSBmdW5jdGlvbgorICBmb3IgcG9sbGluZyBtdWx0aXBsZSBvYmplY3RzIGF0IG9uY2UuICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MDA3OiBBY2NlcHQgaW5jb21wbGV0ZSBUcmVlQnVpbGRlciBvYmplY3RzIChtaXNzaW5nIHN0YXJ0LCBlbmQsCisgIGRhdGEgb3IgY2xvc2UgbWV0aG9kKSBmb3IgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBhcyB3ZWxsLgorICBEcm9wIHRoZSBuby1vcCBUcmVlQnVpbGRlcigpLnhtbCgpIG1ldGhvZCBmcm9tIHRoZSBDIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNDIxMDogcGRiIG5vdyBoYXMgdGFiLWNvbXBsZXRpb24gbm90IG9ubHkgZm9yIGNvbW1hbmQgbmFtZXMsIGJ1dAorICBhbHNvIGZvciB0aGVpciBhcmd1bWVudHMsIHdoZXJldmVyIHBvc3NpYmxlLgorCistIElzc3VlICMxNDMxMDogU29ja2V0cyBjYW4gbm93IGJlIHdpdGggb3RoZXIgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgdXNpbmcKKyAgdGhlIGFwaSBzb2NrZXQuc29ja2V0LnNoYXJlKCkgYW5kIHNvY2tldC5mcm9tc2hhcmUoKS4KKworLSBJc3N1ZSAjMTA1NzY6IFRoZSBnYyBtb2R1bGUgbm93IGhhcyBhICdjYWxsYmFja3MnIG1lbWJlciB0aGF0IHdpbGwgZ2V0CisgIGNhbGxlZCB3aGVuIGdhcmJhZ2UgY29sbGVjdGlvbiB0YWtlcyBwbGFjZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE0NTU3OiBGaXggZXh0ZW5zaW9ucyBidWlsZCBvbiBIUC1VWC4gUGF0Y2ggYnkgQWRpIFJvaWJhbi4KKworLSBJc3N1ZSAjMTQzODc6IERvIG5vdCBpbmNsdWRlIGFjY3UuaCBmcm9tIFB5dGhvbi5oLgorCistIElzc3VlICMxNDM1OTogT25seSB1c2UgT19DTE9FWEVDIGluIF9wb3NpeG1vZHVsZS5jIGlmIGl0IGlzIGRlZmluZWQuCisgIEJhc2VkIG9uIHBhdGNoIGZyb20gSGVydsOpIENvYXRhbmhheS4KKworLSBJc3N1ZSAjMTQzMjE6IERvIG5vdCBydW4gcGdlbiBkdXJpbmcgdGhlIGJ1aWxkIGlmIGZpbGVzIGFyZSB1cCB0byBkYXRlLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0MDM0OiBhZGRlZCB0aGUgYXJncGFyc2UgdHV0b3JpYWwuCisKKy0gSXNzdWUgIzE0MzI0OiBGaXggY29uZmlndXJlIHRlc3RzIGZvciBjcm9zcyBidWlsZHMuCisKKy0gSXNzdWUgIzE0MzI3OiBDYWxsIEFDX0NBTk9OSUNBTF9IT1NUIGluIGNvbmZpZ3VyZS5hYyBhbmQgY2hlY2sgaW4KKyAgY29uZmlnLntndWVzcyxzdWJ9LiBEb24ndCB1c2UgdW5hbWUgY2FsbHMgZm9yIGNyb3NzIGJ1aWxkcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzkwNDE6IEFuIGlzc3VlIGluIGN0eXBlcy5jX2xvbmdkb3VibGUsIGN0eXBlcy5jX2RvdWJsZSwgYW5kCisgIGN0eXBlcy5jX2Zsb2F0IHRoYXQgY2F1c2VkIGFuIGluY29ycmVjdCBleGNlcHRpb24gdG8gYmUgcmV0dXJuZWQgaW4gdGhlCisgIGNhc2Ugb2Ygb3ZlcmZsb3cgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE0MjEyOiBUaGUgcmUgbW9kdWxlIGRpZG4ndCByZXRhaW4gYSByZWZlcmVuY2UgdG8gYnVmZmVycyBpdCB3YXMKKyAgc2Nhbm5pbmcsIHJlc3VsdGluZyBpbiBzZWdmYXVsdHMuCisKKy0gSXNzdWUgIzE0MjU5OiBUaGUgZmluZGl0ZXIoKSBtZXRob2Qgb2YgcmUgb2JqZWN0cyBkaWQgbm90IHRha2UgYW55CisgIGtleXdvcmQgYXJndW1lbnRzLCBjb250cmFyeSB0byB0aGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTAxNDI6IFN1cHBvcnQgZm9yIFNFRUtfSE9MRS9TRUVLX0RBVEEgKGZvciBleGFtcGxlLCB1bmRlciBaRlMpLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTQ0NDI6IEFkZCBtaXNzaW5nIGVycm5vIGltcG9ydCBpbiB0ZXN0X3NtdHBsaWIuCisKKy0gSXNzdWUgIzgzMTU6IChwYXJ0aWFsIGZpeCkgcHl0aG9uIC1tIHVuaXR0ZXN0IHRlc3QudGVzdF9lbWFpbCBub3cgd29ya3MuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDA1LU1hci0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQxNzI6IEZpeCByZWZlcmVuY2UgbGVhayB3aGVuIG1hcnNoYWxsaW5nIGEgYnVmZmVyLWxpa2Ugb2JqZWN0CisgIChvdGhlciB0aGFuIGEgYnl0ZXMgb2JqZWN0KS4KKworLSBJc3N1ZSAjMTM1MjE6IGRpY3Quc2V0ZGVmYXVsdCgpIG5vdyBkb2VzIG9ubHkgb25lIGxvb2t1cCBmb3IgdGhlIGdpdmVuIGtleSwKKyAgbWFraW5nIGl0ICJhdG9taWMiIGZvciBtYW55IHB1cnBvc2VzLiAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBQRVAgNDA5LCBJc3N1ZSAjNjIxMDogInJhaXNlIFggZnJvbSBOb25lIiBpcyBub3cgc3VwcG9ydGVkIGFzIGEgbWVhbnMgb2YKKyAgc3VwcHJlc3NpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIGNoYWluZWQgZXhjZXB0aW9uIGNvbnRleHQuIFRoZSBjaGFpbmVkCisgIGNvbnRleHQgc3RpbGwgcmVtYWlucyBhdmFpbGFibGUgYXMgdGhlIF9fY29udGV4dF9fIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMTAxODE6IE5ldyBtZW1vcnl2aWV3IGltcGxlbWVudGF0aW9uIGZpeGVzIG11bHRpcGxlIG93bmVyc2hpcAorICBhbmQgbGlmZXRpbWUgaXNzdWVzIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBQeV9idWZmZXIgbWVtYmVycyAoIzk5OTApCisgIGFzIHdlbGwgYXMgY3Jhc2hlcyAoIzgzMDUsICM3NDMzKS4gTWFueSBuZXcgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkCisgIChTZWUgd2hhdHNuZXcvMy4zKSwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgZXh0ZW5zaXZlbHkuCisgIFRoZSBuZGFycmF5IHRlc3Qgb2JqZWN0IGZyb20gX3Rlc3RidWZmZXIuYyBpbXBsZW1lbnRzIGFsbCBhc3BlY3RzIG9mCisgIFBFUC0zMTE4LCBzbyBmdXJ0aGVyIGRldmVsb3BtZW50IHRvd2FyZHMgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uCisgIG9mIHRoZSBQRVAgY2FuIHByb2NlZWQgaW4gYSB0ZXN0LWRyaXZlbiBtYW5uZXIuCisKKyAgVGhhbmtzIHRvIE5pY2sgQ29naGxhbiwgQW50b2luZSBQaXRyb3UgYW5kIFBhdWxpIFZpcnRhbmVuIGZvciByZXZpZXcKKyAgYW5kIG1hbnkgaWRlYXMuCisKKy0gSXNzdWUgIzEyODM0OiBGaXggaW5jb3JyZWN0IHJlc3VsdHMgb2YgbWVtb3J5dmlldy50b2J5dGVzKCkgZm9yCisgIG5vbi1jb250aWd1b3VzIGFycmF5cy4KKworLSBJc3N1ZSAjNTIzMTogSW50cm9kdWNlIG1lbW9yeXZpZXcuY2FzdCgpIG1ldGhvZCB0aGF0IGFsbG93cyBjaGFuZ2luZworICBmb3JtYXQgYW5kIHNoYXBlIHdpdGhvdXQgbWFraW5nIGEgY29weSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCisKKy0gSXNzdWUgIzE0MDg0OiBGaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSB3aXRoIGEKKyAgYmFkIGVuY29kaW5nLgorCistIFVwZ3JhZGUgVW5pY29kZSBkYXRhIHRvIFVuaWNvZGUgNi4xLgorCistIElzc3VlICMxNDA0MDogUmVtb3ZlIHJhcmVseSB1c2VkIGZpbGUgbmFtZSBzdWZmaXhlcyBmb3IgQyBleHRlbnNpb25zCisgICh1bmRlciBQT1NJWCBtYWlubHkpLgorCistIElzc3VlICMxNDA1MTogQWxsb3cgYXJiaXRyYXJ5IGF0dHJpYnV0ZXMgdG8gYmUgc2V0IG9mIGNsYXNzbWV0aG9kIGFuZAorICBzdGF0aWNtZXRob2QuCisKKy0gSXNzdWUgIzEzNzAzOiBvQ0VSVC0yMDExLTAwMzogUmFuZG9taXplIGhhc2hlcyBvZiBzdHIgYW5kIGJ5dGVzIHRvIHByb3RlY3QKKyAgYWdhaW5zdCBkZW5pYWwgb2Ygc2VydmljZSBhdHRhY2tzIGR1ZSB0byBoYXNoIGNvbGxpc2lvbnMgd2l0aGluIHRoZSBkaWN0IGFuZAorICBzZXQgdHlwZXMuICBQYXRjaCBieSBEYXZpZCBNYWxjb2xtLCBiYXNlZCBvbiB3b3JrIGJ5IFZpY3RvciBTdGlubmVyLgorCistIElzc3VlICMxMzAyMDogRml4IGEgcmVmZXJlbmNlIGxlYWsgd2hlbiBhbGxvY2F0aW5nIGEgc3RydWN0c2VxdWVuY2Ugb2JqZWN0CisgIGZhaWxzLiAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTM5MDg6IFJlYWR5IHR5cGVzIHJldHVybmVkIGZyb20gUHlUeXBlX0Zyb21TcGVjLgorCistIElzc3VlICMxMTIzNTogRml4IE92ZXJmbG93RXJyb3Igd2hlbiB0cnlpbmcgdG8gaW1wb3J0IGEgc291cmNlIGZpbGUgd2hvc2UKKyAgbW9kaWZpY2F0aW9uIHRpbWUgZG9lc24ndCBmaXQgaW4gYSAzMi1iaXQgdGltZXN0YW1wLgorCistIElzc3VlICMxMjcwNTogQSBTeW50YXhFcnJvciBleGNlcHRpb24gaXMgbm93IHJhaXNlZCB3aGVuIGF0dGVtcHRpbmcgdG8KKyAgY29tcGlsZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFzIGEgc2luZ2xlIGludGVyYWN0aXZlIHN0YXRlbWVudC4KKworLSBGaXggdGhlIGJ1aWx0aW4gbW9kdWxlIGluaXRpYWxpemF0aW9uIGNvZGUgdG8gc3RvcmUgdGhlIGluaXQgZnVuY3Rpb24gZm9yCisgIGZ1dHVyZSByZWluaXRpYWxpemF0aW9uLgorCistIElzc3VlICM4MDUyOiBUaGUgcG9zaXggc3VicHJvY2VzcyBtb2R1bGUgd291bGQgdGFrZSBhIGxvbmcgdGltZSBjbG9zaW5nCisgIGFsbCBwb3NzaWJsZSBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSBjaGlsZCBwcm9jZXNzIHJhdGhlciB0aGFuIGp1c3Qgb3BlbgorICBmaWxlIGRlc2NyaXB0b3JzLiAgSXQgbm93IGNsb3NlcyBvbmx5IHRoZSBvcGVuIGZkcyBpZiBwb3NzaWJsZSBmb3IgdGhlCisgIGRlZmF1bHQgY2xvc2VfZmRzPVRydWUgYmVoYXZpb3IuCisKKy0gSXNzdWUgIzEzNjI5OiBSZW51bWJlciB0aGUgdG9rZW5zIGluIHRva2VuLmggc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBpbmRleGVzCisgIGludG8gX1B5UGFyc2VyX1Rva2VuTmFtZXMuCisKKy0gSXNzdWUgIzEzNzUyOiBBZGQgYSBjYXNlZm9sZCgpIG1ldGhvZCB0byBzdHIuCisKKy0gSXNzdWUgIzEzNzYxOiBBZGQgYSAiZmx1c2giIGtleXdvcmQgYXJndW1lbnQgdG8gdGhlIHByaW50KCkgZnVuY3Rpb24sCisgIHVzZWQgdG8gZW5zdXJlIGZsdXNoaW5nIHRoZSBvdXRwdXQgc3RyZWFtLgorCistIElzc3VlICMxMzY0NTogcHljIGZpbGVzIG5vdyBjb250YWluIHRoZSBzaXplIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZQorICBjb2RlLCB0byBhdm9pZCB0aW1lc3RhbXAgY29sbGlzaW9ucyAoZXNwZWNpYWxseSBvbiBmaWxlc3lzdGVtcyB3aXRoIGEgbG93CisgIHRpbWVzdGFtcCByZXNvbHV0aW9uKSB3aGVuIGNoZWNraW5nIGZvciBmcmVzaG5lc3Mgb2YgdGhlIGJ5dGVjb2RlLgorCistIFBFUCAzODAsIElzc3VlICMxMTY4MjogQWRkICJ5aWVsZCBmcm9tIDx4PiIgdG8gc3VwcG9ydCBlYXN5IGRlbGVnYXRpb24gdG8KKyAgc3ViZ2VuZXJhdG9ycyAoaW5pdGlhbCBwYXRjaCBieSBHcmVnIEV3aW5nLCBpbnRlZ3JhdGlvbiBpbnRvIDMuMyBieQorICBSZW5hdWQgQmxhbmNoLCBSeWFuIEtlbGx5LCBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrIGFuZCBOaWNrIENvZ2hsYW4pCisKKy0gSXNzdWUgIzEzNzQ4OiBSYXcgYnl0ZXMgbGl0ZXJhbHMgY2FuIG5vdyBiZSB3cml0dGVuIHdpdGggdGhlIGBgcmJgYCBwcmVmaXgKKyAgYXMgd2VsbCBhcyBgYGJyYGAuCisKKy0gSXNzdWUgIzEyNzM2OiBVc2UgZnVsbCB1bmljb2RlIGNhc2UgbWFwcGluZ3MgZm9yIHVwcGVyLCBsb3dlciwgYW5kIHRpdGxlIGNhc2UuCisKKy0gSXNzdWUgIzEyNzYwOiBBZGQgYSBjcmVhdGUgbW9kZSB0byBvcGVuKCkuIFBhdGNoIGJ5IERhdmlkIFRvd25zaGVuZC4KKworLSBJc3N1ZSAjMTM3Mzg6IFNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIGJ5dGVzLmxvd2VyKCkgYW5kIGJ5dGVzLnVwcGVyKCkuCisKKy0gSXNzdWUgIzEzNTc3OiBCdWlsdC1pbiBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbm93IGhhdmUgYSBfX3F1YWxuYW1lX18uCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjNjY5NTogRnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gcnVucyBub3cgY2xlYXIgdGhlIGZyZWVsaXN0IG9mIHNldAorICBvYmplY3RzLiAgSW5pdGlhbCBwYXRjaCBieSBNYXR0aGlhcyBUcm9mZmFlcy4KKworLSBGaXggT1NFcnJvci5fX2luaXRfXyBhbmQgT1NFcnJvci5fX25ld19fIHNvIHRoYXQgZWFjaCBvZiB0aGVtIGNhbiBiZQorICBvdmVycmlkZW4gYW5kIHRha2UgYWRkaXRpb25hbCBhcmd1bWVudHMgKGZvbGxvd3VwIHRvIGlzc3VlICMxMjU1NSkuCisKKy0gRml4IHRoZSBmaXggZm9yIGlzc3VlICMxMjE0OTogaXQgd2FzIGluY29ycmVjdCwgYWx0aG91Z2ggaXQgaGFkIHRoZSBzaWRlCisgIGVmZmVjdCBvZiBhcHBlYXJpbmcgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuICBUaGFua3MgdG8gTWFyayBTaGFubm9uIGZvcgorICBub3RpY2luZy4KKworLSBJc3N1ZSAjMTM1MDU6IFBpY2tsZSBieXRlcyBvYmplY3RzIGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoCisgIFB5dGhvbiAyIHdoZW4gdXNpbmcgcHJvdG9jb2xzIDw9IDIuCisKKy0gSXNzdWUgIzExMTQ3OiBGaXggYW4gdW51c2VkIGFyZ3VtZW50IGluIF9QeV9BTk5PVEFURV9NRU1PUllfT1JERVIuICAoRml4CisgIGdpdmVuIGJ5IENhbXBiZWxsIEJhcnRvbikuCisKKy0gSXNzdWUgIzEzNTAzOiBVc2UgYSBtb3JlIGVmZmljaWVudCByZWR1Y3Rpb24gZm9ybWF0IGZvciBieXRlYXJyYXlzIHdpdGgKKyAgcGlja2xlIHByb3RvY29sID49IDMuICBUaGUgb2xkIHJlZHVjdGlvbiBmb3JtYXQgaXMga2VwdCB3aXRoIG9sZGVyIHByb3RvY29scworICBpbiBvcmRlciB0byBhbGxvdyB1bnBpY2tsaW5nIHVuZGVyIFB5dGhvbiAyLiAgUGF0Y2ggYnkgSXJtZW4gZGUgSm9uZy4KKworLSBJc3N1ZSAjNzExMTogUHl0aG9uIGNhbiBub3cgYmUgcnVuIHdpdGhvdXQgYSBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVycgorICBzdHJlYW0uICBJdCB3YXMgYWxyZWFkeSB0aGUgY2FzZSB3aXRoIFB5dGhvbiAyLiAgSG93ZXZlciwgdGhlIGNvcnJlc3BvbmRpbmcKKyAgc3lzIG1vZHVsZSBlbnRyaWVzIGFyZSBub3cgc2V0IHRvIE5vbmUgKGluc3RlYWQgb2YgYW4gdW51c2FibGUgZmlsZSBvYmplY3QpLgorCistIElzc3VlICMxMTg0OTogRW5zdXJlIHRoYXQgZnJlZSgpZCBtZW1vcnkgYXJlbmFzIGFyZSByZWFsbHkgcmVsZWFzZWQKKyAgb24gUE9TSVggc3lzdGVtcyBzdXBwb3J0aW5nIGFub255bW91cyBtZW1vcnkgbWFwcGluZ3MuICBQYXRjaCBieQorICBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEzNDUyOiBQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbCgpIGRvZXNuJ3Qgc3VwcG9ydCBlcnJvciBoYW5kbGVycworICBkaWZmZXJlbnQgdGhhbiAic3RyaWN0IiBhbnltb3JlLiBUaGUgY2FsbGVyIHdhcyB1bmFibGUgdG8gY29tcHV0ZSB0aGUKKyAgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcjogaXQgZGVwZW5kcyBvbiB0aGUgZXJyb3IgaGFuZGxlci4KKworLSBQRVAgMzE1NSAvIGlzc3VlICMxMzQ0ODogUXVhbGlmaWVkIG5hbWUgZm9yIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTM0MzY6IEZpeCBhIGJvZ3VzIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBBU1Qgb2JqZWN0IHdhcyBwYXNzZWQKKyAgYW4gaW52YWxpZCBpbnRlZ2VyIHZhbHVlLgorCistIElzc3VlICMxMzQxMTogbWVtb3J5dmlldyBvYmplY3RzIGFyZSBub3cgaGFzaGFibGUgd2hlbiB0aGUgdW5kZXJseWluZworICBvYmplY3QgaXMgaGFzaGFibGUuCisKKy0gSXNzdWUgIzEzMzM4OiBIYW5kbGUgYWxsIGVudW1lcmF0aW9ucyBpbiBfUHlfQU5OT1RBVEVfTUVNT1JZX09SREVSCisgIHRvIGFsbG93IGNvbXBpbGluZyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIC1Xc3dpdGNoLWVudW0gb24gZ2NjLgorICBJbml0aWFsIHBhdGNoIGJ5IEZsb3JpcyBCcnV5bm9vZ2hlLgorCistIElzc3VlICMxMDIyNzogQWRkIGFuIGFsbG9jYXRpb24gY2FjaGUgZm9yIGEgc2luZ2xlIHNsaWNlIG9iamVjdC4gIFBhdGNoIGJ5CisgIFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzEzMzkzOiBCdWZmZXJlZFJlYWRlci5yZWFkMSgpIG5vdyBhc2tzIHRoZSBmdWxsIHJlcXVlc3RlZCBzaXplIHRvCisgIHRoZSByYXcgc3RyZWFtIGluc3RlYWQgb2YgbGltaXRpbmcgaXRzZWxmIHRvIHRoZSBidWZmZXIgc2l6ZS4KKworLSBJc3N1ZSAjMTMzOTI6IFdyaXRpbmcgYSBweWMgZmlsZSBzaG91bGQgbm93IGJlIGF0b21pYyB1bmRlciBXaW5kb3dzIGFzIHdlbGwuCisKKy0gSXNzdWUgIzEzMzMzOiBUaGUgVVRGLTcgZGVjb2RlciBub3cgYWNjZXB0cyBsb25lIHN1cnJvZ2F0ZXMgKHRoZSBlbmNvZGVyCisgIGFscmVhZHkgYWNjZXB0cyB0aGVtKS4KKworLSBJc3N1ZSAjMTMzODk6IEZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3NlcyBub3cgY2xlYXIgdGhlIGZyZWVsaXN0cyBmb3IKKyAgbGlzdCBhbmQgZGljdCBvYmplY3RzLiAgVGhleSBhbHJlYWR5IGNsZWFyZWQgb3RoZXIgZnJlZWxpc3RzIGluIHRoZQorICBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTMzMjc6IFJlbW92ZSB0aGUgbmVlZCBmb3IgYW4gZXhwbGljaXQgTm9uZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50CisgIHRvIG9zLnV0aW1lLCBvcy5sdXRpbWVzLCBvcy5mdXRpbWVzLCBvcy5mdXRpbWVucywgb3MuZnV0aW1lc2F0LCBpbgorICBvcmRlciB0byB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgdGltZS4gQWxzbyBhZGRlZCBrZXl3b3JkIGFyZ3VtZW50CisgIGhhbmRsaW5nIHRvIG9zLnV0aW1lbnNhdCBpbiBvcmRlciB0byByZW1vdmUgdGhlIG5lZWQgZm9yIGV4cGxpY2l0IE5vbmUuCisKKy0gSXNzdWUgIzEzMzUwOiBTaW1wbGlmeSBzb21lIEMgY29kZSBieSByZXBsYWNpbmcgbW9zdCB1c2FnZXMgb2YKKyAgUHlVbmljb2RlX0Zvcm1hdCBieSBQeVVuaWNvZGVfRnJvbUZvcm1hdC4KKworLSBJc3N1ZSAjMTMzNDI6IGlucHV0KCkgdXNlZCB0byBpZ25vcmUgc3lzLnN0ZGluJ3MgYW5kIHN5cy5zdGRvdXQncyB1bmljb2RlCisgIGVycm9yIGhhbmRsZXIgaW4gaW50ZXJhY3RpdmUgbW9kZSAod2hlbiBjYWxsaW5nIGludG8gUHlPU19SZWFkbGluZSgpKS4KKworLSBJc3N1ZSAjOTg5NjogQWRkIHN0YXJ0LCBzdG9wLCBhbmQgc3RlcCBhdHRyaWJ1dGVzIHRvIHJhbmdlIG9iamVjdHMuCisKKy0gSXNzdWUgIzEzMzQzOiBGaXggYSBTeXN0ZW1FcnJvciB3aGVuIGEgbGFtYmRhIGV4cHJlc3Npb24gdXNlcyBhIGdsb2JhbAorICB2YXJpYWJsZSBpbiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGtleXdvcmQtb25seSBhcmd1bWVudDogYGBsYW1iZGEgKiwKKyAgYXJnPUdMT0JBTF9OQU1FOiBOb25lYGAKKworLSBJc3N1ZSAjMTI3OTc6IEFkZGVkIGN1c3RvbSBvcGVuZXIgcGFyYW1ldGVyIHRvIGJ1aWx0aW4gb3BlbigpIGFuZAorICBGaWxlSU8ub3BlbigpLgorCistIElzc3VlICMxMDUxOTogQXZvaWQgdW5uZWNlc3NhcnkgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGluCisgIHNldG9iamVjdC5jLgorCistIElzc3VlICMxMDM2MzogRGVhbGxvY2F0ZSBnbG9iYWwgbG9ja3MgaW4gUHlfRmluYWxpemUoKS4KKworLSBJc3N1ZSAjMTMwMTg6IEZpeCByZWZlcmVuY2UgbGVha3MgaW4gZXJyb3IgcGF0aHMgaW4gZGljdG9iamVjdC5jLgorICBQYXRjaCBieSBTdW1hbiBTYWhhLgorCistIElzc3VlICMxMzIwMTogRGVmaW5lICc9PScgYW5kICchPScgdG8gY29tcGFyZSByYW5nZSBvYmplY3RzIGJhc2VkIG9uCisgIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nIGJhc2VkIG9uCisgIG9iamVjdCBpZGVudGl0eSkuCisKKy0gSXNzdWUgIzEyOTQyMzI6IEluIGEgZmV3IGNhc2VzIGludm9sdmluZyBtZXRhY2xhc3MgaW5oZXJpdGFuY2UsIHRoZQorICBpbnRlcnByZXRlciB3b3VsZCBzb21ldGltZXMgaW52b2tlIHRoZSB3cm9uZyBtZXRhY2xhc3Mgd2hlbiBidWlsZGluZyBhIG5ldworICBjbGFzcyBvYmplY3QuIFRoZXNlIGNhc2VzIG5vdyBiZWhhdmUgY29ycmVjdGx5LiBQYXRjaCBieSBEYW5pZWwgVXJiYW4uCisKKy0gSXNzdWUgIzEyNzUzOiBBZGQgc3VwcG9ydCBmb3IgVW5pY29kZSBuYW1lIGFsaWFzZXMgYW5kIG5hbWVkIHNlcXVlbmNlcy4KKyAgQm90aCBgYHVuaWNvZGVkYXRhLmxvb2t1cCgpYGAgYW5kICdcTnsuLi59JyBub3cgcmVzb2x2ZSBhbGlhc2VzLAorICBhbmQgYGB1bmljb2RlZGF0YS5sb29rdXAoKWBgIHJlc29sdmVzIG5hbWVkIHNlcXVlbmNlcyB0b28uCisKKy0gSXNzdWUgIzEyMTcwOiBUaGUgY291bnQoKSwgZmluZCgpLCByZmluZCgpLCBpbmRleCgpIGFuZCByaW5kZXgoKSBtZXRob2RzCisgIG9mIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBub3cgYWNjZXB0IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyNTUKKyAgYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuICBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTI2MDQ6IFZUUkFDRSBtYWNybyBleHBhbmRlZCB0byBuby1vcCBpbiBfc3JlLmMgdG8gYXZvaWQgY29tcGlsZXIKKyAgd2FybmluZ3MuIFBhdGNoIGJ5IEpvc2ggVHJpcGxldHQgYW5kIFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMjI4MTogUmV3cml0ZSB0aGUgTUJDUyBjb2RlYyB0byBoYW5kbGUgY29ycmVjdGx5IHJlcGxhY2UgYW5kIGlnbm9yZQorICBlcnJvciBoYW5kbGVycyBvbiBhbGwgV2luZG93cyB2ZXJzaW9ucy4gVGhlIE1CQ1MgY29kZWMgaXMgbm93IHN1cHBvcnRpbmcgYWxsCisgIGVycm9yIGhhbmRsZXJzLCBpbnN0ZWFkIG9mIG9ubHkgcmVwbGFjZSB0byBlbmNvZGUgYW5kIGlnbm9yZSB0byBkZWNvZGUuCisKKy0gSXNzdWUgIzEzMTg4OiBXaGVuIGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IHRyYWNlYmFjayBhcmd1bWVudCwKKyAgZ2VuZXJhdG9yLnRocm93KCkgbm93IGdldHMgdGhlIHRyYWNlYmFjayBmcm9tIHRoZSBwYXNzZWQgZXhjZXB0aW9uJ3MKKyAgYGBfX3RyYWNlYmFja19fYGAgYXR0cmlidXRlLiAgUGF0Y2ggYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMTQ2OiBXcml0aW5nIGEgcHljIGZpbGUgaXMgbm93IGF0b21pYyB1bmRlciBQT1NJWC4KKworLSBJc3N1ZSAjNzgzMzogRXh0ZW5zaW9uIG1vZHVsZXMgYnVpbHQgdXNpbmcgZGlzdHV0aWxzIG9uIFdpbmRvd3Mgd2lsbCBubworICBsb25nZXIgaW5jbHVkZSBhICJtYW5pZmVzdCIgdG8gcHJldmVudCB0aGVtIGZhaWxpbmcgYXQgaW1wb3J0IHRpbWUgaW4gc29tZQorICBlbWJlZGRlZCBzaXR1YXRpb25zLgorCistIFBFUCAzMTUxIC8gaXNzdWUgIzEyNTU1OiByZXdvcmtpbmcgdGhlIE9TIGFuZCBJTyBleGNlcHRpb24gaGllcmFyY2h5LgorCistIElzc3VlICMxMzU2MDogQWRkIFB5VW5pY29kZV9EZWNvZGVMb2NhbGUoKSwgUHlVbmljb2RlX0RlY29kZUxvY2FsZUFuZFNpemUoKQorICBhbmQgUHlVbmljb2RlX0VuY29kZUxvY2FsZSgpIGZ1bmN0aW9ucyB0byB0aGUgQyBBUEkgdG8gZGVjb2RlL2VuY29kZSBmcm9tL3RvCisgIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZy4KKworLSBBZGQgaW50ZXJuYWwgQVBJIGZvciBzdGF0aWMgc3RyaW5ncyAoX1B5X2lkZW50aWZpZXIgZXQgYWwuKS4KKworLSBJc3N1ZSAjMTMwNjM6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX05PX0RBVEEgKG51bWJlcmVkIDIzMiBhbmQgZGVzY3JpYmVkCisgIGFzICJUaGUgcGlwZSBpcyBiZWluZyBjbG9zZWQiKSBpcyBub3cgbWFwcGVkIHRvIFBPU0lYIGVycm5vIEVQSVBFCisgIChwcmV2aW91c2x5IEVJTlZBTCkuCisKKy0gSXNzdWUgIzEyOTExOiBGaXggbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHJlcHIoKSBvZiBodWdlCisgIHR1cGxlcyBvciBsaXN0cy4KKworLSBQRVAgMzkzOiBmbGV4aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFRoYW5rcyB0byBUb3JzdGVuIEJlY2tlciBmb3IgdGhlCisgIGluaXRpYWwgaW1wbGVtZW50YXRpb24sIGFuZCBWaWN0b3IgU3Rpbm5lciBmb3IgdmFyaW91cyBidWcgZml4ZXMuCisKKy0gSXNzdWUgIzE0MDgxOiBUaGUgJ3NlcCcgYW5kICdtYXhzcGxpdCcgcGFyYW1ldGVyIHRvIHN0ci5zcGxpdCwgYnl0ZXMuc3BsaXQsCisgIGFuZCBieXRlYXJyYXkuc3BsaXQgbWF5IG5vdyBiZSBwYXNzZWQgYXMga2V5d29yZCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzEzMDEyOiBUaGUgJ2tlZXBlbmRzJyBwYXJhbWV0ZXIgdG8gc3RyLnNwbGl0bGluZXMgbWF5IG5vdyBiZSBwYXNzZWQKKyAgYXMgYSBrZXl3b3JkIGFyZ3VtZW50OiAgIm15X3N0cmluZy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpIi4gIFRoZSBzYW1lCisgIGNoYW5nZSBhbHNvIGFwcGxpZXMgdG8gYnl0ZXMuc3BsaXRsaW5lcyBhbmQgYnl0ZWFycmF5LnNwbGl0bGluZXMuCisKKy0gSXNzdWUgIzc3MzI6IERvbid0IG9wZW4gYSBkaXJlY3RvcnkgYXMgYSBmaWxlIGFueW1vcmUgd2hpbGUgaW1wb3J0aW5nIGEKKyAgbW9kdWxlLiBJZ25vcmUgdGhlIGRpcmVjb3RyeSBpZiBpdHMgbmFtZSBtYXRjaHMgdGhlIG1vZHVsZSBuYW1lIChlLmcuCisgICJfX2luaXRfXy5weSIpIGFuZCByYWlzZSBhIEltcG9ydEVycm9yIGluc3RlYWQuCisKKy0gSXNzdWUgIzEzMDIxOiBNaXNzaW5nIGRlY3JlZiBvbiBhbiBlcnJvciBwYXRoLiAgVGhhbmtzIHRvIFN1bWFuIFNhaGEgZm9yCisgIGZpbmRpbmcgdGhlIGJ1ZyBhbmQgcHJvdmlkaW5nIGEgcGF0Y2guCisKKy0gSXNzdWUgIzEyOTczOiBGaXggb3ZlcmZsb3cgY2hlY2tzIHRoYXQgcmVsaWVkIG9uIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4KKyAgbGlzdF9yZXBlYXQgKGxpc3RvYmplY3QuYykgYW5kIGlzbGljZV9uZXh0IChpdGVydG9vbHNtb2R1bGUuYykuICBUaGVzZSBidWdzCisgIGNhdXNlZCB0ZXN0IGZhaWx1cmVzIHdpdGggcmVjZW50IHZlcnNpb25zIG9mIENsYW5nLgorCistIElzc3VlICMxMjkwNDogb3MudXRpbWUsIG9zLmZ1dGltZXMsIG9zLmx1dGltZXMsIGFuZCBvcy5mdXRpbWVzYXQgbm93IHdyaXRlCisgIGF0aW1lIGFuZCBtdGltZSB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uIG9uIG1vZGVybiBQT1NJWCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEyODAyOiB0aGUgV2luZG93cyBlcnJvciBFUlJPUl9ESVJFQ1RPUlkgKG51bWJlcmVkIDI2NykgaXMgbm93CisgIG1hcHBlZCB0byBQT1NJWCBlcnJubyBFTk9URElSIChwcmV2aW91c2x5IEVJTlZBTCkuCisKKy0gSXNzdWUgIzkyMDA6IFRoZSBzdHIuaXMqIG1ldGhvZHMgbm93IHdvcmsgd2l0aCBzdHJpbmdzIHRoYXQgY29udGFpbiBub24tQk1QCisgIGNoYXJhY3RlcnMgZXZlbiBpbiBuYXJyb3cgVW5pY29kZSBidWlsZHMuCisKKy0gSXNzdWUgIzEyNzkxOiBCcmVhayByZWZlcmVuY2UgY3ljbGVzIGVhcmx5IHdoZW4gYSBnZW5lcmF0b3IgZXhpdHMgd2l0aAorICBhbiBleGNlcHRpb24uCisKKy0gSXNzdWUgIzEyNzczOiBNYWtlIF9fZG9jX18gbXV0YWJsZSBvbiB1c2VyLWRlZmluZWQgY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTI3NjY6IFJhaXNlIGEgVmFsdWVFcnJvciB3aGVuIGNyZWF0aW5nIGEgY2xhc3Mgd2l0aCBhIGNsYXNzIHZhcmlhYmxlCisgIHRoYXQgY29uZmxpY3RzIHdpdGggYSBuYW1lIGluIF9fc2xvdHNfXy4KKworLSBJc3N1ZSAjMTIyNjY6IEZpeCBzdHIuY2FwaXRhbGl6ZSgpIHRvIGNvcnJlY3RseSB1cHBlcmNhc2UvbG93ZXJjYXNlCisgIHRpdGxlY2FzZWQgYW5kIGNhc2VkIG5vbi1sZXR0ZXIgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTI3MzI6IEluIG5hcnJvdyB1bmljb2RlIGJ1aWxkcywgYWxsb3cgVW5pY29kZSBpZGVudGlmaWVycyB3aGljaCBmYWxsCisgIG91dHNpZGUgdGhlIEJNUC4KKworLSBJc3N1ZSAjMTI1NzU6IFZhbGlkYXRlIHVzZXItZ2VuZXJhdGVkIEFTVCBiZWZvcmUgaXQgaXMgY29tcGlsZWQuCisKKy0gTWFrZSB0eXBlKE5vbmUpLCB0eXBlKEVsbGlwc2lzKSwgYW5kIHR5cGUoTm90SW1wbGVtZW50ZWQpIGNhbGxhYmxlLiBUaGV5CisgIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBzaW5nbGV0b24gaW5zdGFuY2VzLgorCistIEZvcmJpZCBzdW1taW5nIGJ5dGVzIHdpdGggc3VtKCkuCisKKy0gVmVyaWZ5IHRoZSB0eXBlcyBvZiBBU1Qgc3RyaW5ncyBhbmQgaWRlbnRpZmllcnMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgYmVmb3JlCisgIGNvbXBpbGluZyB0aGVtLgorCistIElzc3VlICMxMjY0NzogVGhlIE5vbmUgb2JqZWN0IG5vdyBoYXMgYSBfX2Jvb2xfXygpIG1ldGhvZCB0aGF0IHJldHVybnMgRmFsc2UuCisgIEZvcm1lcmx5LCBib29sKE5vbmUpIHJldHVybmVkIEZhbHNlIG9ubHkgYmVjYXVzZSBvZiBzcGVjaWFsIGNhc2UgbG9naWMKKyAgaW4gUHlPYmplY3RfSXNUcnVlKCkuCisKKy0gSXNzdWUgIzEyNTc5OiBzdHIuZm9ybWF0X21hcCgpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHVzZWQgb24gYQorICBmb3JtYXQgc3RyaW5nIHRoYXQgY29udGFpbnMgcG9zaXRpb25hbCBmaWVsZHMuIEluaXRpYWwgcGF0Y2ggYnkKKyAgSnVsaWFuIEJlcm1hbi4KKworLSBJc3N1ZSAjMTAyNzE6IEFsbG93IHdhcm5pbmdzLnNob3d3YXJuaW5nKCkgYmUgYW55IGNhbGxhYmxlLgorCistIElzc3VlICMxMTYyNzogRml4IHNlZ2ZhdWx0IHdoZW4gX19uZXdfXyBvbiBhIGV4Y2VwdGlvbiByZXR1cm5zIGEKKyAgbm9uLWV4Y2VwdGlvbiBjbGFzcy4KKworLSBJc3N1ZSAjMTIxNDk6IFVwZGF0ZSB0aGUgbWV0aG9kIGNhY2hlIGFmdGVyIGEgdHlwZSdzIGRpY3Rpb25hcnkgZ2V0cworICBjbGVhcmVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gIFRoaXMgZml4ZXMgYSBzZWdmYXVsdCB3aGVuIGFuIGluc3RhbmNlCisgIGFuZCBpdHMgdHlwZSBnZXQgY2F1Z2h0IGluIGEgcmVmZXJlbmNlIGN5Y2xlLCBhbmQgdGhlIGluc3RhbmNlJ3MKKyAgZGVhbGxvY2F0b3IgY2FsbHMgb25lIG9mIHRoZSBtZXRob2RzIG9uIHRoZSB0eXBlIChlLmcuIHdoZW4gc3ViY2xhc3NpbmcKKyAgSU9CYXNlKS4gIERpYWdub3NpcyBhbmQgcGF0Y2ggYnkgRGF2aWRlIFJpenpvLgorCistIElzc3VlICM5NjExLCAjOTAxNTogRmlsZUlPLnJlYWQoKSBjbGFtcHMgdGhlIGxlbmd0aCB0byBJTlRfTUFYIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzk2NDI6IFVuaWZvcm1pemUgdGhlIHRlc3RzIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIG1iY3MgY29kZWMsIGFkZAorICBhIG5ldyBIQVZFX01CQ1MgZGVmaW5lLgorCistIElzc3VlICM5NjQyOiBGaXggZmlsZXN5c3RlbSBlbmNvZGluZyBpbml0aWFsaXphdGlvbjogdXNlIHRoZSBBTlNJIGNvZGUgcGFnZQorICBvbiBXaW5kb3dzIGlmIHRoZSBtYmNzIGNvZGVjIGlzIG5vdCBhdmFpbGFibGUsIGFuZCBmYWlsIHdpdGggYSBmYXRhbCBlcnJvciBpZgorICB3ZSBjYW5ub3QgZ2V0IHRoZSBsb2NhbGUgZW5jb2RpbmcgKGlmIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vdCBhdmFpbGFibGUpCisgIGluc3RlYWQgb2YgdXNpbmcgVVRGLTguCisKKy0gV2hlbiBhIGdlbmVyYXRvciB5aWVsZHMsIGRvIG5vdCByZXRhaW4gdGhlIGNhbGxlcidzIGV4Y2VwdGlvbiBzdGF0ZSBvbiB0aGUKKyAgZ2VuZXJhdG9yLgorCistIElzc3VlICMxMjQ3NTogUHJldmVudCBnZW5lcmF0b3JzIGZyb20gbGVha2luZyB0aGVpciBleGNlcHRpb24gc3RhdGUgaW50byB0aGUKKyAgY2FsbGVyJ3MgZnJhbWUgYXMgdGhleSByZXR1cm4gZm9yIHRoZSBsYXN0IHRpbWUuCisKKy0gSXNzdWUgIzEyMjkxOiBZb3UgY2FuIG5vdyBsb2FkIG11bHRpcGxlIG1hcnNoYWxsZWQgb2JqZWN0cyBmcm9tIGEgc3RyZWFtLAorICB3aXRoIG90aGVyIGRhdGEgaW50ZXJsZWF2ZWQgYmV0d2VlbiBtYXJzaGFsbGVkIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyMzU2OiBXaGVuIHJlcXVpcmVkIHBvc2l0aW9uYWwgb3Iga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhcmUgbm90CisgIGdpdmVuLCBwcm9kdWNlIGEgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSB3aGljaCBpbmNsdWRlcyB0aGUgbmFtZShzKSBvZiB0aGUKKyAgbWlzc2luZyBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzEyMzcwOiBGaXggc3VwZXIgd2l0aCBubyBhcmd1bWVudHMgd2hlbiBfX2NsYXNzX18gaXMgb3ZlcnJpZGVuIGluIHRoZQorICBjbGFzcyBib2R5LgorCistIElzc3VlICMxMjA4NDogb3Muc3RhdCBvbiBXaW5kb3dzIG5vdyB3b3JrcyBwcm9wZXJseSB3aXRoIHJlbGF0aXZlIHN5bWJvbGljCisgIGxpbmtzIHdoZW4gY2FsbGVkIGZyb20gYW55IGRpcmVjdG9yeS4KKworLSBMb29zZW4gdHlwZSByZXN0cmljdGlvbnMgb24gdGhlIF9fZGlyX18gbWV0aG9kLiBfX2Rpcl9fIGNhbiBub3cgcmV0dXJuIGFueQorICBzZXF1ZW5jZSwgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBsaXN0IGFuZCBzb3J0ZWQgYnkgZGlyKCkuCisKKy0gSXNzdWUgIzEyMjY1OiBNYWtlIGVycm9yIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IHBhc3NpbmcgYW4gaW52YWxpZCBzZXQgb2YKKyAgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24gbW9yZSBpbmZvcm1hdGl2ZS4KKworLSBJc3N1ZSAjMTIyMjU6IFN0aWxsIGFsbG93IFB5dGhvbiB0byBidWlsZCBpZiBQeXRob24gaXMgbm90IGluIGl0cyBoZyByZXBvIG9yCisgIG1lcmN1cmlhbCBpcyBub3QgaW5zdGFsbGVkLgorCistIElzc3VlICMxMTk1OiBteV9mZ2V0cygpIG5vdyBhbHdheXMgY2xlYXJzIGVycm9ycyBiZWZvcmUgY2FsbGluZyBmZ2V0cygpLiBGaXgKKyAgdGhlIGZvbGxvd2luZyBjYXNlOiBzeXMuc3RkaW4ucmVhZCgpIHN0b3BwZWQgd2l0aCBDVFJMK2QgKGVuZCBvZiBmaWxlKSwKKyAgcmF3X2lucHV0KCkgaW50ZXJydXB0ZWQgYnkgQ1RSTCtjLgorCistIElzc3VlICMxMjIxNjogQWxsb3cgdW5leHBlY3RlZCBFT0YgZXJyb3JzIHRvIGhhcHBlbiBvbiBhbnkgbGluZSBvZiB0aGUgZmlsZS4KKworLSBJc3N1ZSAjMTIxOTk6IFRoZSBUcnlFeGNlcHQgYW5kIFRyeUZpbmFsbHkgYW5kIEFTVCBub2RlcyBoYXZlIGJlZW4gdW5pZmllZAorICBpbnRvIGEgVHJ5IG5vZGUuCisKKy0gSXNzdWUgIzk2NzA6IEluY3JlYXNlIHRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIHNlY29uZGFyeSB0aHJlYWRzIG9uCisgIE1hYyBPUyBYIGFuZCBGcmVlQlNEIHRvIHJlZHVjZSB0aGUgY2hhbmNlcyBvZiBhIGNyYXNoIGluc3RlYWQgb2YgYQorICAibWF4aW11bSByZWN1cnNpb24gZGVwdGgiIFJ1bnRpbWVFcnJvciBleGNlcHRpb24uCisgIChwYXRjaCBieSBSb25hbGQgT3Vzc29yZW4pCisKKy0gSXNzdWUgIzEyMTA2OiBUaGUgdXNlIG9mIHRoZSBtdWx0aXBsZS13aXRoIHNob3J0aGFuZCBzeW50YXggaXMgbm93IHJlZmxlY3RlZAorICBpbiB0aGUgQVNULgorCistIElzc3VlICMxMjE5MDogVHJ5IHRvIHVzZSB0aGUgc2FtZSBmaWxlbmFtZSBvYmplY3Qgd2hlbiBjb21waWxpbmcgdW5tYXJzaGFsbGluZworICBhIGNvZGUgb2JqZWN0cyBpbiB0aGUgc2FtZSBmaWxlLgorCistIElzc3VlICMxMjE2NjogTW92ZSBpbXBsZW1lbnRhdGlvbnMgb2YgZGlyKCkgc3BlY2lhbGl6ZWQgZm9yIHZhcmlvdXMgdHlwZXMgaW50bworICB0aGUgX19kaXJfXygpIG1ldGhvZHMgb2YgdGhvc2UgdHlwZXMuCisKKy0gSXNzdWUgIzU3MTU6IEluIHNvY2tldHNlcnZlciwgY2xvc2UgdGhlIHNlcnZlciBzb2NrZXQgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCisKKy0gQ29ycmVjdCBsb29rdXAgb2YgX19kaXJfXyBvbiBvYmplY3RzLiBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgY2F1c2VzIGVycm9ycworICBiZXNpZGVzIEF0dHJpYnV0ZUVycm9yIGZvdW5kIG9uIGxvb2t1cCB0byBiZSBwcm9wYWdhdGVkLgorCistIElzc3VlICMxMjA2MDogVXNlIHNpZ19hdG9taWNfdCB0eXBlIGFuZCB2b2xhdGlsZSBrZXl3b3JkIGluIHRoZSBzaWduYWwKKyAgbW9kdWxlLiBQYXRjaCB3cml0dGVuIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTc0NjY1NjogQWRkZWQgdGhlIGlmX25hbWVpbmRleCwgaWZfaW5kZXh0b25hbWUsIGlmX25hbWV0b2luZGV4CisgIG1ldGhvZHMgdG8gdGhlIHNvY2tldCBtb2R1bGUuCisKKy0gSXNzdWUgIzEyMDQ0OiBGaXhlZCBzdWJwcm9jZXNzLlBvcGVuIHdoZW4gdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciB0bworICB3YWl0IGZvciB0aGUgcHJvY2VzcyB0byBlbmQgd2hlbiBleGl0aW5nIHRoZSBjb250ZXh0IHRvIGF2b2lkIHVuaW50ZW50aW9uYWxseQorICBsZWF2aW5nIHpvbWJpZSBwcm9jZXNzZXMgYXJvdW5kLgorCistIElzc3VlICMxMTk1OiBGaXggaW5wdXQoKSBpZiBpdCBpcyBpbnRlcnJ1cHRlZCBieSBDVFJMK2QgYW5kIHRoZW4gQ1RSTCtjLAorICBjbGVhciB0aGUgZW5kLW9mLWZpbGUgaW5kaWNhdG9yIGFmdGVyIENUUkwrZC4KKworLSBJc3N1ZSAjMTg1NjogQXZvaWQgY3Jhc2hlcyBhbmQgbG9ja3VwcyB3aGVuIGRhZW1vbiB0aHJlYWRzIHJ1biB3aGlsZSB0aGUKKyAgaW50ZXJwcmV0ZXIgaXMgc2h1dHRpbmcgZG93bjsgaW5zdGVhZCwgdGhlc2UgdGhyZWFkcyBhcmUgbm93IGtpbGxlZCB3aGVuCisgIHRoZXkgdHJ5IHRvIHRha2UgdGhlIEdJTC4KKworLSBJc3N1ZSAjOTc1NjogV2hlbiBjYWxsaW5nIGEgbWV0aG9kIGRlc2NyaXB0b3Igb3IgYSBzbG90IHdyYXBwZXIgZGVzY3JpcHRvciwKKyAgdGhlIGNoZWNrIG9mIHRoZSBvYmplY3QgdHlwZSBkb2Vzbid0IHJlYWQgdGhlIF9fY2xhc3NfXyBhdHRyaWJ1dGUgYW55bW9yZS4KKyAgRml4IGEgY3Jhc2ggaWYgYSBjbGFzcyBvdmVycmlkZSBpdHMgX19jbGFzc19fIGF0dHJpYnV0ZSAoZS5nLiBhIHByb3h5IG9mIHRoZQorICBzdHIgdHlwZSkuIFBhdGNoIHdyaXR0ZW4gYnkgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICMxMDUxNzogQWZ0ZXIgZm9yaygpLCByZWluaXRpYWxpemUgdGhlIFRMUyB1c2VkIGJ5IHRoZSBQeUdJTFN0YXRlXyoKKyAgQVBJcywgdG8gYXZvaWQgYSBjcmFzaCB3aXRoIHRoZSBwdGhyZWFkIGltcGxlbWVudGF0aW9uIGluIFJIRUwgNS4gIFBhdGNoCisgIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTA5MTQ6IEluaXRpYWxpemUgY29ycmVjdGx5IHRoZSBmaWxlc3lzdGVtIGNvZGVjIHdoZW4gY3JlYXRpbmcgYSBuZXcKKyAgc3ViaW50ZXJwcmV0ZXIgdG8gZml4IGEgYm9vdHN0cmFwIGlzc3VlIHdpdGggY29kZWNzIGltcGxlbWVudGVkIGluIFB5dGhvbiwgYXMKKyAgdGhlIElTTy04ODU5LTE1IGNvZGVjLgorCistIElzc3VlICMxMTkxODogT1MvMiBhbmQgVk1TIGFyZSBubyBtb3JlIHN1cHBvcnRlZCBiZWNhdXNlIG9mIHRoZSBsYWNrIG9mCisgIG1haW50YWluZXIuCisKKy0gSXNzdWUgIzY3ODA6IGZpeCBzdGFydHMvZW5kc3dpdGggZXJyb3IgbWVzc2FnZSB0byBtZW50aW9uIHRoYXQgdHVwbGVzIGFyZQorICBhY2NlcHRlZCB0b28uCisKKy0gSXNzdWUgIzUwNTc6IGZpeCBhIGJ1ZyBpbiB0aGUgcGVlcGhvbGVyIHRoYXQgbGVkIHRvIG5vbi1wb3J0YWJsZSBweWMgZmlsZXMKKyAgYmV0d2VlbiBuYXJyb3cgYW5kIHdpZGUgYnVpbGRzIHdoaWxlIG9wdGltaXppbmcgQklOQVJZX1NVQlNDUiBvbiBub24tQk1QCisgIGNoYXJzIChlLmcuICJcVTAwMDEyMzQ1IlswXSkuCisKKy0gSXNzdWUgIzExODQ1OiBGaXggdHlwbyBpbiByYW5nZW9iamVjdC5jIHRoYXQgY2F1c2VkIGEgY3Jhc2ggaW4KKyAgY29tcHV0ZV9zbGljZV9pbmRpY2VzLiAgUGF0Y2ggYnkgRGFuaWVsIFVyYmFuLgorCistIElzc3VlICM1NjczOiBBZGRlZCBhIGB0aW1lb3V0YCBrZXl3b3JkIGFyZ3VtZW50IHRvIHN1YnByb2Nlc3MuUG9wZW4ud2FpdCwKKyAgc3VicHJvY2Vzcy5Qb3Blbi5jb21tdW5pY2F0ZWQsIHN1YnByb2Nlc3MuY2FsbCwgc3VicHJvY2Vzcy5jaGVja19jYWxsLCBhbmQKKyAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQuICBJZiB0aGUgYmxvY2tpbmcgb3BlcmF0aW9uIHRha2VzIG1vcmUgdGhhbiBgdGltZW91dGAKKyAgc2Vjb25kcywgdGhlIGBzdWJwcm9jZXNzLlRpbWVvdXRFeHBpcmVkYCBleGNlcHRpb24gaXMgcmFpc2VkLgorCistIElzc3VlICMxMTY1MDogUHlPU19TdGRpb1JlYWRsaW5lKCkgcmV0cmllcyBmZ2V0cygpIGlmIGl0IHdhcyBpbnRlcnJ1cHRlZAorICAoRUlOVFIpLCBmb3IgZXhhbXBsZSBpZiB0aGUgcHJvZ3JhbSBpcyBzdG9wcGVkIHdpdGggQ1RSTCt6IG9uIE1hYyBPUyBYLiBQYXRjaAorICB3cml0dGVuIGJ5IENoYXJsZXMtRnJhbmNvaXMgTmF0YWxpLgorCistIElzc3VlICM5MzE5OiBJbmNsdWRlIHRoZSBmaWxlbmFtZSBpbiAiTm9uLVVURjggY29kZSAuLi4iIHN5bnRheCBlcnJvci4KKworLSBJc3N1ZSAjMTA3ODU6IFN0b3JlIHRoZSBmaWxlbmFtZSBhcyBVbmljb2RlIGluIHRoZSBQeXRob24gcGFyc2VyLgorCistIElzc3VlICMxMTYxOTogX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlKCkgZG9lc24ndCBlbmNvZGUgdGhlIHBhdGggdG8gYnl0ZXMKKyAgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTA5OTg6IFJlbW92ZSBtZW50aW9ucyBvZiAtUSwgc3lzLmZsYWdzLmRpdmlzaW9uX3dhcm5pbmcgYW5kCisgIFB5X0RpdmlzaW9uV2FybmluZ0ZsYWcgbGVmdCBvdmVyIGZyb20gUHl0aG9uIDIuCisKKy0gSXNzdWUgIzExMjQ0OiBSZW1vdmUgYW4gdW5uZWNlc3NhcnkgcGVlcGhvbGVyIGNoZWNrIHRoYXQgd2FzIHByZXZlbnRpbmcKKyAgbmVnYXRpdmUgemVyb3MgZnJvbSBiZWluZyBjb25zdGFudC1mb2xkZWQgcHJvcGVybHkuCisKKy0gSXNzdWUgIzExMzk1OiBpby5GaWxlSU8oKS53cml0ZSgpIGNsYW1wcyB0aGUgZGF0YSBsZW5ndGggdG8gMzIsNzY3IGJ5dGVzIG9uCisgIFdpbmRvd3MgaWYgdGhlIGZpbGUgaXMgYSBUVFkgdG8gd29ya2Fyb3VuZCBhIFdpbmRvd3MgYnVnLiBUaGUgV2luZG93cyBjb25zb2xlCisgIHJldHVybnMgYW4gZXJyb3IgKDEyOiBub3QgZW5vdWdoIHNwYWNlIGVycm9yKSBvbiB3cml0aW5nIGludG8gc3Rkb3V0IGlmCisgIHN0ZG91dCBtb2RlIGlzIGJpbmFyeSBhbmQgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNjYsMDAwIGJ5dGVzIChvciBsZXNzLAorICBkZXBlbmRpbmcgb24gaGVhcCB1c2FnZSkuCisKKy0gSXNzdWUgIzExMzIwOiBmaXggYm9ndXMgbWVtb3J5IG1hbmFnZW1lbnQgaW4gTW9kdWxlcy9nZXRwYXRoLmMsIGxlYWRpbmcgdG8KKyAgYSBwb3NzaWJsZSBjcmFzaCB3aGVuIGNhbGxpbmcgUHlfU2V0UGF0aCgpLgorCistIElzc3VlICMxMTQzMjogQSBidWcgd2FzIGludHJvZHVjZWQgaW4gc3VicHJvY2Vzcy5Qb3BlbiBvbiBwb3NpeCBzeXN0ZW1zIHdpdGgKKyAgMy4yLjAgd2hlcmUgdGhlIHN0ZG91dCBvciBzdGRlcnIgZmlsZSBkZXNjcmlwdG9yIGJlaW5nIHRoZSBzYW1lIGFzIHRoZSBzdGRpbgorICBmaWxlIGRlc2NyaXB0b3Igd291bGQgcmFpc2UgYW4gZXhjZXB0aW9uLiB3ZWJicm93c2VyLm9wZW4gd291bGQgZmFpbC4gZml4ZWQuCisKKy0gSXNzdWUgIzk4NTY6IENoYW5nZSBvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcKKyAgdG8gYmUgYSBEZXByZWNhdGlvbldhcm5pbmcuIEluIDMuMiBpdCB3YXMgYSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLgorICBJbiAzLjQgaXQgd2lsbCBiZSBhIFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTEyNDQ6IFRoZSBwZWVwaG9sZSBvcHRpbWl6ZXIgaXMgbm93IGFibGUgdG8gY29uc3RhbnQtZm9sZAorICBhcmJpdHJhcmlseSBjb21wbGV4IGV4cHJlc3Npb25zLiAgVGhpcyBhbHNvIGZpeGVzIGEgMy4yIHJlZ3Jlc3Npb24gd2hlcmUKKyAgb3BlcmF0aW9ucyBpbnZvbHZpbmcgbmVnYXRpdmUgbnVtYmVycyB3ZXJlIG5vdCBjb25zdGFudC1mb2xkZWQuCisKKy0gSXNzdWUgIzExNDUwOiBEb24ndCB0cnVuY2F0ZSBoZyB2ZXJzaW9uIGluZm8gaW4gUHlfR2V0QnVpbGRJbmZvKCkgd2hlbgorICB0aGVyZSBhcmUgbWFueSB0YWdzIChlLmcuIHdoZW4gdXNpbmcgbXEpLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTMzNTogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiBsaXN0LnNvcnQgd2hlbiB0aGUga2V5IGZ1bmN0aW9uCisgIHRocm93cyBhbiBleGNlcHRpb24uCisKKy0gSXNzdWUgIzg5MjM6IFdoZW4gYSBzdHJpbmcgaXMgZW5jb2RlZCB0byBVVEYtOCBpbiBzdHJpY3QgbW9kZSwgdGhlIHJlc3VsdCBpcworICBjYWNoZWQgaW50byB0aGUgb2JqZWN0LiBFeGFtcGxlczogc3RyLmVuY29kZSgpLCBzdHIuZW5jb2RlKCd1dGYtOCcpLAorICBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKCkgYW5kIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodW5pY29kZSwgInV0Zi04IiwKKyAgTlVMTCkuCisKKy0gSXNzdWUgIzEwODMxOiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIHN1cHBvcnRzICVsaSwgJWxsaSBhbmQgJXppIGZvcm1hdHMuCisKKy0gSXNzdWUgIzEwODI5OiBSZWZhY3RvciBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpLCB1c2UgdGhlIHNhbWUgZnVuY3Rpb24gdG8gcGFyc2UKKyAgdGhlIGZvcm1hdCBzdHJpbmcgaW4gdGhlIDMgc3RlcHMsIGZpeCBjcmFzaHMgb24gaW52YWxpZCBmb3JtYXQgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTMwMDc6IHdoaWNoZGIgc2hvdWxkIHJlY29nbml6ZSBnZGJtIDEuOSBtYWdpYyBudW1iZXJzLgorCistIElzc3VlICMxMTI0NjogRml4IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlViIpIHRvIGRlY29kZSB0aGUgYnl0ZSBzdHJpbmcgZnJvbQorICBVVEYtOCAod2l0aCByZXBsYWNlIGVycm9yIGhhbmRsZXIpIGluc3RlYWQgb2YgSVNPLTg4NTktMSAoaW4gc3RyaWN0IG1vZGUpLgorICBQYXRjaCB3cml0dGVuIGJ5IFJheSBBbGxlbi4KKworLSBJc3N1ZSAjMTEyODY6IFJhaXNlIGEgVmFsdWVFcnJvciBmcm9tIGNhbGxpbmcgUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIgd2l0aAorICBhIGJ1ZmZlciBzdHJ1Y3QgaGF2aW5nIGEgTlVMTCBkYXRhIHBvaW50ZXIuCisKKy0gSXNzdWUgIzExMjcyOiBPbiBXaW5kb3dzLCBpbnB1dCgpIHN0cmlwcyAnXHInIChhbmQgbm90IG9ubHkgJ1xuJyksIGFuZAorICBzeXMuc3RkaW4gdXNlcyB1bml2ZXJzYWwgbmV3bGluZSAocmVwbGFjZSAnXHJcbicgYnkgJ1xuJykuCisKKy0gSXNzdWUgIzExODI4OiBzdGFydHN3aXRoIGFuZCBlbmRzd2l0aCBub3cgYWNjZXB0IE5vbmUgYXMgc2xpY2UgaW5kZXguCisgIFBhdGNoIGJ5IFRvcnN0ZW4gQmVja2VyLgorCistIElzc3VlICMxMDgzMDogRml4IFB5VW5pY29kZV9Gcm9tRm9ybWF0VigiJWMiKSBmb3Igbm9uLUJNUCBjaGFyYWN0ZXJzIG9uCisgIG5hcnJvdyBidWlsZC4KKworLSBJc3N1ZSAjMTExNjg6IFJlbW92ZSBmaWxlbmFtZSBkZWJ1ZyB2YXJpYWJsZSBmcm9tIFB5RXZhbF9FdmFsRnJhbWVFeCgpLgorICBJdCBlbmNvZGVkIHRoZSBVbmljb2RlIGZpbGVuYW1lIHRvIFVURi04LCBidXQgdGhlIGVuY29kaW5nIGZhaWxzIG9uCisgIHVuZGVjb2RhYmxlIGZpbGVuYW1lIChvbiBzdXJyb2dhdGUgY2hhcmFjdGVycykgd2hpY2ggcmFpc2VzIGFuIHVuZXhwZWN0ZWQKKyAgVW5pY29kZUVuY29kZUVycm9yIG9uIHJlY3Vyc2lvbiBsaW1pdC4KKworLSBJc3N1ZSAjMTExODc6IFJlbW92ZSBib290c3RyYXAgY29kZSAodXNlIEFTQ0lJKSBvZgorICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKCksIGl0IHdhcyByZXBsYWNlZCBieSBhIGJldHRlciBmYWxsYmFjayAodXNlIHRoZQorICBsb2NhbGUgZW5jb2RpbmcpIGluIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoKS4KKworLSBDaGVjayBmb3IgTlVMTCByZXN1bHQgaW4gUHlUeXBlX0Zyb21TcGVjLgorCistIElzc3VlICMxMDUxNjogTmV3IGNvcHkoKSBhbmQgY2xlYXIoKSBtZXRob2RzIGZvciBsaXN0cyBhbmQgYnl0ZWFycmF5cy4KKworLSBJc3N1ZSAjMTEzODY6IGJ5dGVhcnJheS5wb3AoKSBub3cgdGhyb3dzIEluZGV4RXJyb3Igd2hlbiB0aGUgYnl0ZWFycmF5IGlzCisgIGVtcHR5LCBpbnN0ZWFkIG9mIE92ZXJmbG93RXJyb3IuCisKKy0gSXNzdWUgIzEyMzgwOiBUaGUgcmp1c3QsIGxqdXN0IGFuZCBjZW50ZXIgbWV0aG9kcyBvZiBieXRlcyBhbmQgYnl0ZWFycmF5CisgIG5vdyBhY2NlcHQgYSBieXRlYXJyYXkgYXJndW1lbnQuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQxOTU6IEFuIGlzc3VlIHRoYXQgY2F1c2VkIHdlYWtyZWYuV2Vha1NldCBpbnN0YW5jZXMgdG8gaW5jb3JyZWN0bHkKKyAgcmV0dXJuIFRydWUgZm9yIGEgV2Vha1NldCBpbnN0YW5jZSAnYScgaW4gYm90aCAnYSA8IGEnIGFuZCAnYSA+IGEnIGhhcyBiZWVuCisgIGZpeGVkLgorCistIElzc3VlICMxNDE2NjogUGlja2xlciBvYmplY3RzIG5vdyBoYXZlIGFuIG9wdGlvbmFsIGBgZGlzcGF0Y2hfdGFibGVgYAorICBhdHRyaWJ1dGUgd2hpY2ggYWxsb3dzIHRvIHNldCBjdXN0b20gcGVyLXBpY2tsZXIgcmVkdWN0aW9uIGZ1bmN0aW9ucy4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxNDE3NzogbWFyc2hhbC5sb2FkcygpIG5vdyByYWlzZXMgVHlwZUVycm9yIHdoZW4gZ2l2ZW4gYW4gdW5pY29kZQorICBzdHJpbmcuICBQYXRjaCBieSBHdWlsaGVybWUgR29uw6dhbHZlcy4KKworLSBJc3N1ZSAjMTM1NTA6IFJlbW92ZSB0aGUgZGVidWcgbWFjaGluZXJ5IGZyb20gdGhlIHRocmVhZGluZyBtb2R1bGU6IHJlbW92ZQorICB2ZXJib3NlIGFyZ3VtZW50cyBmcm9tIGFsbCB0aHJlYWRpbmcgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLgorCistIElzc3VlICMxNDE1OTogRml4IHRoZSBsZW4oKSBvZiB3ZWFrIGNvbnRhaW5lcnMgKFdlYWtTZXQsIFdlYWtLZXlEaWN0aW9uYXJ5LAorICBXZWFrVmFsdWVEaWN0aW9uYXJ5KSB0byByZXR1cm4gYSBiZXR0ZXIgYXBwcm94aW1hdGlvbiB3aGVuIHNvbWUgb2JqZWN0cworICBhcmUgZGVhZCBvciBkeWluZy4gIE1vcmVvdmVyLCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm93IE8oMSkgcmF0aGVyIHRoYW4KKyAgTyhuKS4KKworLSBJc3N1ZSAjMTMxMjU6IFNpbGVuY2Ugc3B1cmlvdXMgdGVzdF9saWIydG8zIG91dHB1dCB3aGVuIGluIG5vbi12ZXJib3NlIG1vZGUuCisgIFBhdGNoIGJ5IE1pa2hhaWwgTm92aWtvdi4KKworLSBJc3N1ZSAjMTE4NDE6IEZpeCBjb21wYXJpc29uIGJ1ZyB3aXRoICdyYycgdmVyc2lvbnMgaW4gcGFja2FnaW5nLnZlcnNpb24uCisgIFBhdGNoIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzEzNDQ3OiBBZGQgYSB0ZXN0IGZpbGUgdG8gaG9zdCByZWdyZXNzaW9uIHRlc3RzIGZvciBidWdzIGluIHRoZQorICBzY3JpcHRzIGZvdW5kIGluIHRoZSBUb29scyBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzY4ODQ6IEZpeCBsb25nLXN0YW5kaW5nIGJ1Z3Mgd2l0aCBNQU5JRkVTVC5pbiBwYXJzaW5nIGluIGRpc3R1dGlscworICBvbiBXaW5kb3dzLiAgQWxzbyBmaXhlZCBpbiBwYWNrYWdpbmcuCisKKy0gSXNzdWUgIzgwMzM6IHNxbGl0ZTM6IEZpeCA2NC1iaXQgaW50ZWdlciBoYW5kbGluZyBpbiB1c2VyIGZ1bmN0aW9ucworICBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcy4gSW5pdGlhbCBwYXRjaCBieSBQaGlsaXBwZSBEZXZhbGtlbmVlci4KKworLSBIVE1MUGFyc2VyIGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBzbGFzaGVzIGluIHRoZSBzdGFydCB0YWcuCisKKy0gSXNzdWUgIzEzNjQxOiBEZWNvZGluZyBmdW5jdGlvbnMgaW4gdGhlIGJhc2U2NCBtb2R1bGUgbm93IGFjY2VwdCBBU0NJSS1vbmx5CisgIHVuaWNvZGUgc3RyaW5ncy4gIFBhdGNoIGJ5IENhdGFsaW4gSWFjb2IuCisKKy0gSXNzdWUgIzE0MDQzOiBTcGVlZCB1cCBpbXBvcnRsaWIncyBfRmlsZUZpbmRlciBieSBhdCBsZWFzdCA4eCwgYW5kIGFkZCBhCisgIG5ldyBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTQwMDE6IENWRS0yMDEyLTA4NDU6IHhtbHJwYzogRml4IGFuIGVuZGxlc3MgbG9vcCBpbgorICBTaW1wbGVYTUxSUENTZXJ2ZXIgdXBvbiBtYWxmb3JtZWQgUE9TVCByZXF1ZXN0LgorCistIElzc3VlICMxMzk2MTogTW92ZSBpbXBvcnRsaWIgb3ZlciB0byB1c2luZyBvcy5yZXBsYWNlKCkgZm9yIGF0b21pYyByZW5hbWluZy4KKworLSBEbyBhd2F5IHdpdGggYW1iaWd1b3VzIGxldmVsIHZhbHVlcyAoYXMgc3VnZ2VzdGVkIGJ5IFBFUCAzMjgpIGluCisgIGltcG9ydGxpYi5fX2ltcG9ydF9fKCkgYnkgcmFpc2luZyBWYWx1ZUVycm9yIHdoZW4gbGV2ZWwgPCAwLgorCistIElzc3VlICMyNDg5OiBwdHkuc3Bhd24gY291bGQgY29uc3VtZSAxMDAlIGNwdSB3aGVuIGl0IGVuY291bnRlcmVkIGFuIEVPRi4KKworLSBJc3N1ZSAjMTMwMTQ6IEZpeCBhIHBvc3NpYmxlIHJlZmVyZW5jZSBsZWFrIGluIFNTTFNvY2tldC5nZXRwZWVyY2VydCgpLgorCistIElzc3VlICMxMzc3NzogQWRkIFBGX1NZU1RFTSBzb2NrZXRzIG9uIE9TIFguCisgIFBhdGNoIGJ5IE1pY2hhZWwgR29kZXJiYXVlci4KKworLSBJc3N1ZSAjMTMwMTU6IEZpeCBhIHBvc3NpYmxlIHJlZmVyZW5jZSBsZWFrIGluIGRlZmF1bHRkaWN0Ll9fcmVwcl9fLgorICBQYXRjaCBieSBTdW1hbiBTYWhhLgorCistIElzc3VlICMxMzI2MTEzOiBkaXN0dXRpbHMnIGFuZCBwYWNrYWdpbmcncyBidWlsZF9leHQgY29tbWFuZHMgb3B0aW9uIG5vdworICBjb3JyZWN0bHkgcGFyc2VzIG11bHRpcGxlIHZhbHVlcyAoc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2Ugb3IgY29tbWFzKSBnaXZlbgorICB0byB0aGVpciAtLWxpYnJhcmllcyBvcHRpb24uCisKKy0gSXNzdWUgIzEwMjg3OiBubnRwbGliIG5vdyBxdWVyaWVzIHRoZSBzZXJ2ZXIncyBDQVBBQklMSVRJRVMgZmlyc3QgYmVmb3JlCisgIHNlbmRpbmcgTU9ERSBSRUFERVIsIGFuZCBvbmx5IHNlbmRzIGl0IGlmIG5vdCBhbHJlYWR5IGluIFJFQURFUiBtb2RlLgorICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzOTkzOiBIVE1MUGFyc2VyIGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBicm9rZW4gZW5kIHRhZ3Mgd2hlbgorICBzdHJpY3Q9RmFsc2UuCisKKy0gSXNzdWUgIzEzOTMwOiBsaWIydG8zIG5vdyBzdXBwb3J0cyB3cml0aW5nIGNvbnZlcnRlZCBvdXRwdXQgZmlsZXMgdG8gYW5vdGhlcgorICBkaXJlY3RvcnkgdHJlZSBhcyB3ZWxsIGFzIGNvcHlpbmcgdW5jaGFuZ2VkIGZpbGVzIGFuZCBhbHRlcmluZyB0aGUgZmlsZQorICBzdWZmaXguCisKKy0gSXNzdWUgIzk3NTA6IEZpeCBzcWxpdGUzLkNvbm5lY3Rpb24uaXRlcmR1bXAgb24gdGFibGVzIGFuZCBmaWVsZHMKKyAgd2l0aCBhIG5hbWUgdGhhdCBpcyBhIGtleXdvcmQgb3IgY29udGFpbnMgcXVvdGVzLiBQYXRjaCBieSBNYXJrbworICBLb2h0YWxhLgorCistIElzc3VlICMxMDI4Nzogbm50cGxpYiBub3cgcXVlcmllcyB0aGUgc2VydmVyJ3MgQ0FQQUJJTElUSUVTIGFnYWluIGFmdGVyCisgIGF1dGhlbnRpY2F0aW5nIChzaW5jZSB0aGUgcmVzdWx0IG1heSBjaGFuZ2UsIGFjY29yZGluZyB0byBSRkMgNDY0MykuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5ODk6IERvY3VtZW50IHRoYXQgR3ppcEZpbGUgZG9lcyBub3Qgc3VwcG9ydCB0ZXh0IG1vZGUsIGFuZCBnaXZlIGEKKyAgbW9yZSBoZWxwZnVsIGVycm9yIG1lc3NhZ2Ugd2hlbiBvcGVuZWQgd2l0aCBhbiBpbnZhbGlkIG1vZGUgc3RyaW5nLgorCistIElzc3VlICMxMzU5MDogT24gT1MgWCAxMC43IGFuZCAxMC42IHdpdGggWGNvZGUgNC4yLCBidWlsZGluZworICBEaXN0dXRpbHMtYmFzZWQgcGFja2FnZXMgd2l0aCBDIGV4dGVuc2lvbiBtb2R1bGVzIG1heSBmYWlsIGJlY2F1c2UKKyAgQXBwbGUgaGFzIHJlbW92ZWQgZ2NjLTQuMiwgdGhlIHZlcnNpb24gdXNlZCB0byBidWlsZCBweXRob24ub3JnCisgIDY0LWJpdC8zMi1iaXQgUHl0aG9ucy4gIElmIHRoZSB1c2VyIGRvZXMgbm90IGV4cGxpY2l0bHkgb3ZlcnJpZGUKKyAgdGhlIGRlZmF1bHQgQyBjb21waWxlciBieSBzZXR0aW5nIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwKKyAgRGlzdHV0aWxzIHdpbGwgbm93IGF0dGVtcHQgdG8gY29tcGlsZSBleHRlbnNpb24gbW9kdWxlcyB3aXRoIGNsYW5nCisgIGlmIGdjYy00LjIgaXMgcmVxdWlyZWQgYnV0IG5vdCBmb3VuZC4gQWxzbyBhcyBhIGNvbnZlbmllbmNlLCBpZgorICB0aGUgdXNlciBkb2VzIGV4cGxpY2l0bHkgc2V0IENDLCBzdWJzdGl0dXRlIGl0cyB2YWx1ZSBhcyB0aGUgZGVmYXVsdAorICBjb21waWxlciBpbiB0aGUgRGlzdHV0aWxzIExEU0hBUkVEIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIE9TIFguCisgIChOb3RlLCB0aGUgcHl0aG9uLm9yZyAzMi1iaXQtb25seSBQeXRob25zIHVzZSBnY2MtNC4wIGFuZCB0aGUgMTAuNHUKKyAgU0RLLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBhdmFpbGFibGUgaW4gWGNvZGUgNC4gIFRoaXMgY2hhbmdlIGRvZXMgbm90CisgIGF0dGVtcHQgdG8gb3ZlcnJpZGUgc2V0dGluZ3MgdG8gc3VwcG9ydCB0aGVpciB1c2Ugd2l0aCBYY29kZSA0LikKKworLSBJc3N1ZSAjMTM5NjA6IEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIGJyb2tlbiBjb21tZW50cyB3aGVuCisgIHN0cmljdD1GYWxzZS4KKworLSBJc3N1ZSAjMTM5MjE6IFVuZG9jdW1lbnQgYW5kIGNsZWFuIHVwIHNxbGl0ZTMuT3B0aW1pemVkVW5pY29kZSwKKyAgd2hpY2ggaXMgb2Jzb2xldGUgaW4gUHl0aG9uIDMueC4gSXQncyBub3cgYWxpYXNlZCB0byBzdHIgZm9yCisgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCistIFdoZW4gJycgaXMgYSBwYXRoIChlLmcuIGluIHN5cy5wYXRoKSwgbWFrZSBzdXJlIF9fZmlsZV9fIHVzZXMgdGhlIGN1cnJlbnQKKyAgd29ya2luZyBkaXJlY3RvcnkgaW5zdGVhZCBvZiAnJyBpbiBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzEzNjA5OiBBZGQgdHdvIGZ1bmN0aW9ucyB0byBxdWVyeSB0aGUgdGVybWluYWwgc2l6ZToKKyAgb3MuZ2V0X3Rlcm1pbmFsX3NpemUgKGxvdyBsZXZlbCkgYW5kIHNodXRpbC5nZXRfdGVybWluYWxfc2l6ZSAoaGlnaCBsZXZlbCkuCisgIFBhdGNoIGJ5IFpiaWduaWV3IErEmWRyemVqZXdza2ktU3ptZWsuCisKKy0gSXNzdWUgIzEzODQ1OiBPbiBXaW5kb3dzLCB0aW1lLnRpbWUoKSBub3cgdXNlcyBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgpCisgIGluc3RlYWQgb2YgZnRpbWUoKSB0byBoYXZlIGEgcmVzb2x1dGlvbiBvZiAxMDAgbnMgaW5zdGVhZCBvZiAxIG1zICh0aGUgY2xvY2sKKyAgYWNjdXJhY3kgaXMgYmV0d2VlbiAwLjUgbXMgYW5kIDE1IG1zKS4KKworLSBJc3N1ZSAjMTM4NDY6IEFkZCB0aW1lLm1vbm90b25pYygpLCBtb25vdG9uaWMgY2xvY2suCisKKy0gSXNzdWUgIzgxODQ6IG11bHRpcHJvY2Vzc2luZzogT24gV2luZG93cywgZG9uJ3Qgc2V0IFNPX1JFVVNFQUREUiBvbgorICBDb25uZWN0aW9uIHNvY2tldHMsIGFuZCBzZXQgRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0Ugb24gbmFtZWQgcGlwZXMsIHRvCisgIG1ha2Ugc3VyZSB0d28gbGlzdGVuZXJzIGNhbid0IGJpbmQgdG8gdGhlIHNhbWUgc29ja2V0L3BpcGUgKG9yIGFueSBleGlzdGluZworICBzb2NrZXQvcGlwZSkuCisKKy0gSXNzdWUgIzEwODExOiBGaXggcmVjdXJzaXZlIHVzYWdlIG9mIGN1cnNvcnMuIEluc3RlYWQgb2YgY3Jhc2hpbmcsCisgIHJhaXNlIGEgUHJvZ3JhbW1pbmdFcnJvciBub3cuCisKKy0gSXNzdWUgIzEwODgxOiBGaXggdGVzdF9zaXRlIGZhaWx1cmUgd2l0aCBPUyBYIGZyYW1ld29yayBidWlsZHMuCisKKy0gSXNzdWUgIzk2NDQzNzogTWFrZSBJRExFIGhlbHAgd2luZG93IG5vbi1tb2RhbC4KKyAgUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8gYW5kIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMzczNDogQWRkIG9zLmZ3YWxrKCksIGEgZGlyZWN0b3J5IHdhbGtpbmcgZnVuY3Rpb24geWllbGRpbmcgZmlsZQorICBkZXNjcmlwdG9ycy4KKworLSBJc3N1ZSAjMjk0NTogTWFrZSB0aGUgZGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kIGF3YXJlIG9mIGJkaXN0X3JwbSBwcm9kdWN0cy4KKworLSBJc3N1ZSAjMTM3MTI6IHB5c2V0dXAgY3JlYXRlIHNob3VsZCBub3QgY29udmVydCBwYWNrYWdlX2RhdGEgdG8gZXh0cmFfZmlsZXMuCisKKy0gSXNzdWUgIzExODA1OiBwYWNrYWdlX2RhdGEgaW4gc2V0dXAuY2ZnIHNob3VsZCBhbGxvdyBtb3JlIHRoYW4gb25lIHZhbHVlLgorCistIElzc3VlICMxMzkzMzogSURMRSBhdXRvLWNvbXBsZXRlIGRpZCBub3Qgd29yayB3aXRoIHNvbWUgaW1wb3J0ZWQKKyAgbW9kdWxlLCBsaWtlIGhhc2hsaWIuICAoUGF0Y2ggYnkgUm9nZXIgU2Vyd3kpCisKKy0gSXNzdWUgIzEzOTAxOiBQcmV2ZW50IHRlc3RfZGlzdHV0aWxzIGZhaWx1cmVzIG9uIE9TIFggd2l0aCAtLWVuYWJsZS1zaGFyZWQuCisKKy0gSXNzdWUgIzEzNjc2OiBIYW5kbGUgc3RyaW5ncyB3aXRoIGVtYmVkZGVkIHplcm9zIGNvcnJlY3RseSBpbiBzcWxpdGUzLgorCistIElzc3VlICMxMzUwNjogQWRkICcnIHRvIHBhdGggZm9yIElETEUgU2hlbGwgd2hlbiBzdGFydGVkIGFuZCByZXN0YXJ0ZWQgd2l0aCBSZXN0YXJ0IFNoZWxsLgorICBPcmlnaW5hbCBwYXRjaGVzIGJ5IE1hcmNvIFNjYXRhZ2xpbmkgYW5kIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICM4ODI4OiBBZGQgbmV3IGZ1bmN0aW9uIG9zLnJlcGxhY2UoKSwgZm9yIGNyb3NzLXBsYXRmb3JtIHJlbmFtaW5nCisgIHdpdGggb3ZlcndyaXRpbmcuCisKKy0gSXNzdWUgIzEzODQ4OiBvcGVuKCkgYW5kIHRoZSBGaWxlSU8gY29uc3RydWN0b3Igbm93IGNoZWNrIGZvciBOVUwKKyAgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBuYW1lLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzgwNjogVGhlIHNpemUgY2hlY2sgaW4gYXVkaW9vcCBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucyB3YXMgdG9vCisgIHN0cmljdCBhbmQgY291bGQgcmVqZWN0IHZhbGlkIGNvbXByZXNzZWQgZGF0YS4gIFBhdGNoIGJ5IE9sZWcgUGxha2hvdG55dWsuCisKKy0gSXNzdWUgIzEzODEyOiBXaGVuIGEgbXVsdGlwcm9jZXNzaW5nIFByb2Nlc3MgY2hpbGQgcmFpc2VzIGFuIGV4Y2VwdGlvbiwKKyAgZmx1c2ggc3RkZXJyIGFmdGVyIHByaW50aW5nIHRoZSBleGNlcHRpb24gdHJhY2ViYWNrLgorCistIElzc3VlICMxMzg4NTogQ1ZFLTIwMTEtMzM4OTogdGhlIF9zc2wgbW9kdWxlIHdvdWxkIGFsd2F5cyBkaXNhYmxlIHRoZSBDQkMKKyAgSVYgYXR0YWNrIGNvdW50ZXJtZWFzdXJlLgorCistIElzc3VlICMxMzg0NzogdGltZS5sb2NhbHRpbWUoKSBhbmQgdGltZS5nbXRpbWUoKSBub3cgcmFpc2UgYW4gT1NFcnJvciBpbnN0ZWFkCisgIG9mIFZhbHVlRXJyb3Igb24gZmFpbHVyZS4gdGltZS5jdGltZSgpIGFuZCB0aW1lLmFzY3RpbWUoKSBub3cgcmFpc2VzIGFuCisgIE9TRXJyb3IgaWYgbG9jYWx0aW1lKCkgZmFpbGVkLiB0aW1lLmNsb2NrKCkgbm93IHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiB0aGUKKyAgcHJvY2Vzc29yIHRpbWUgdXNlZCBpcyBub3QgYXZhaWxhYmxlIG9yIGl0cyB2YWx1ZSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQKKworLSBJc3N1ZSAjMTM4NjI6IEZpeCBzcHVyaW91cyBmYWlsdXJlIGluIHRlc3RfemxpYiBkdWUgdG8gcnVudGltZS9jb21waWxlIHRpbWUKKyAgbWlub3IgdmVyc2lvbnMgbm90IG1hdGNoaW5nLgorCistIElzc3VlICMxMjgwNDogRml4IHRlc3Rfc29ja2V0IGFuZCB0ZXN0X3VybGxpYjJuZXQgZmFpbHVyZXMgd2hlbiBydW5uaW5nIHRlc3RzCisgIG9uIGEgc3lzdGVtIHdpdGhvdXQgaW50ZXJuZXQgYWNjZXNzLgorCistIElzc3VlICMxMzc3MjogSW4gb3Muc3ltbGluaygpIHVuZGVyIFdpbmRvd3MsIGRvIG5vdCB0cnkgdG8gZ3Vlc3MgdGhlIGxpbmsKKyAgdGFyZ2V0J3MgdHlwZSAoZmlsZSBvciBkaXJlY3RvcnkpLiAgVGhlIGRldGVjdGlvbiB3YXMgYnVnZ3kgYW5kIG1hZGUgdGhlCisgIGNhbGwgbm9uLWF0b21pYyAodGhlcmVmb3JlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucykuCisKKy0gSXNzdWUgIzY2MzE6IERpc2FsbG93IHJlbGF0aXZlIGZpbGUgcGF0aHMgaW4gdXJsbGliIHVybG9wZW4gbWV0aG9kcy4KKworLSBJc3N1ZSAjMTM3MjI6IEF2b2lkIHNpbGVuY2luZyBJbXBvcnRFcnJvcnMgd2hlbiBpbml0aWFsaXppbmcgdGhlIGNvZGVjcworICByZWdpc3RyeS4KKworLSBJc3N1ZSAjMTM3ODE6IEZpeCBHemlwRmlsZSBidWcgdGhhdCBjYXVzZWQgYW4gZXhjZXB0aW9uIHRvIGJlIHJhaXNlZCB3aGVuCisgIG9wZW5pbmcgZm9yIHdyaXRpbmcgdXNpbmcgYSBmaWxlb2JqIHJldHVybmVkIGJ5IG9zLmZkb3BlbigpLgorCistIElzc3VlICMxMzgwMzogVW5kZXIgU29sYXJpcywgZGlzdHV0aWxzIGRvZXNuJ3QgaW5jbHVkZSBiaXRuZXNzCisgIGluIHRoZSBkaXJlY3RvcnkgbmFtZS4KKworLSBJc3N1ZSAjMTAyNzg6IEFkZCB0aW1lLndhbGxjbG9jaygpIGZ1bmN0aW9uLCBtb25vdG9uaWMgY2xvY2suCisKKy0gSXNzdWUgIzEzODA5OiBGaXggcmVncmVzc2lvbiB3aGVyZSBiejIgbW9kdWxlIHdvdWxkbid0IHdvcmsgd2hlbiB0aHJlYWRzIGFyZQorICBkaXNhYmxlZC4gT3JpZ2luYWwgcGF0Y2ggYnkgQW1hdXJ5IEZvcmdlb3QgZCdBcmMuCisKKy0gSXNzdWUgIzEzNTg5OiBGaXggc29tZSBzZXJpYWxpemF0aW9uIHByaW1pdGl2ZXMgaW4gdGhlIGFpZmMgbW9kdWxlLgorICBQYXRjaCBieSBPbGVnIFBsYWtob3RueXVrLgorCistIElzc3VlICMxMzY0MjogVW5xdW90ZSBiZWZvcmUgYjY0ZW5jb2RpbmcgdXNlcjpwYXNzd29yZCBkdXJpbmcgQmFzaWMKKyAgQXV0aGVudGljYXRpb24uIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEpvb25hcyBLdW9yaWxlaHRvLgorCistIElzc3VlICMxMzcyNjogRml4IHRoZSBhbWJpZ3VvdXMgLVMgZmxhZyBpbiByZWdydGVzdC4gSXQgaXMgLW8vLS1zbG93IGZvciBzbG93CisgIHRlc3RzLgorCistIElzc3VlICMxMjM2NDogRml4IGEgaGFuZyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvci4KKyAgVGhlIGhhbmcgd291bGQgb2NjdXIgd2hlbiByZXRyaWV2aW5nIHRoZSByZXN1bHQgb2YgYSBzY2hlZHVsZWQgZnV0dXJlIGFmdGVyCisgIHRoZSBleGVjdXRvciBoYWQgYmVlbiBzaHV0IGRvd24uCisKKy0gSXNzdWUgIzEzNTAyOiB0aHJlYWRpbmc6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIEV2ZW50LndhaXQoKSB0aGF0IG1hZGUgaXQKKyAgcmV0dXJuIEZhbHNlIHdoZW4gdGhlIGV2ZW50IHdhcyBzZXQgYW5kIGNsZWFyZWQgcmlnaHQgYWZ0ZXIuCisKKy0gSXNzdWUgIzk5OTM6IFdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIG9uIGRpZmZlcmVudCBmaWxlc3lzdGVtcywKKyAgYW5kIHRoZSBzb3VyY2UgaXMgYSBzeW1saW5rLCBzaHV0aWwubW92ZSgpIG5vdyByZWNyZWF0ZXMgYSBzeW1saW5rIG9uIHRoZQorICBkZXN0aW5hdGlvbiBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlIGZpbGUgY29udGVudHMuICBQYXRjaCBieSBKb25hdGhhbiBOaWVob2YKKyAgYW5kIEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTI5MjY6IEZpeCBhIGJ1ZyBpbiB0YXJmaWxlJ3MgbGluayBleHRyYWN0aW9uLgorCistIElzc3VlICMxMzY5NjogRml4IHRoZSAzMDIgUmVsYXRpdmUgVVJMIFJlZGlyZWN0aW9uIHByb2JsZW0uCisKKy0gSXNzdWUgIzEzNjM2OiBXZWFrIGNpcGhlcnMgYXJlIG5vdyBkaXNhYmxlZCBieSBkZWZhdWx0IGluIHRoZSBzc2wgbW9kdWxlCisgIChleGNlcHQgd2hlbiBTU0x2MiBpcyBleHBsaWNpdGx5IGFza2VkIGZvcikuCisKKy0gSXNzdWUgIzEyNzE1OiBBZGQgYW4gb3B0aW9uYWwgc3ltbGlua3MgYXJndW1lbnQgdG8gc2h1dGlsIGZ1bmN0aW9ucworICAoY29weWZpbGUsIGNvcHltb2RlLCBjb3B5c3RhdCwgY29weSwgY29weTIpLiAgV2hlbiB0aGF0IHBhcmFtZXRlciBpcworICB0cnVlLCBzeW1saW5rcyBhcmVuJ3QgZGVyZWZlcmVuY2VkIGFuZCB0aGUgb3BlcmF0aW9uIGluc3RlYWQgYWN0cyBvbiB0aGUKKyAgc3ltbGluayBpdHNlbGYgKG9yIGNyZWF0ZXMgb25lLCBpZiByZWxldmFudCkuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gQWRkIGEgZmxhZ3MgcGFyYW1ldGVyIHRvIHNlbGVjdC5lcG9sbC4KKworLSBJc3N1ZSAjMTM2MjY6IEFkZCBzdXBwb3J0IGZvciBTU0wgRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlLCB0aHJvdWdoIHRoZQorICBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKCkgbWV0aG9kIGFuZCB0aGUgc3NsLk9QX1NJTkdMRV9ESF9VU0Ugb3B0aW9uLgorCistIElzc3VlICMxMTAwNjogRG9uJ3QgaXNzdWUgbG93IGxldmVsIHdhcm5pbmcgaW4gc3VicHJvY2VzcyB3aGVuIHBpcGUyKCkgZmFpbHMuCisKKy0gSXNzdWUgIzEzNjIwOiBTdXBwb3J0IGZvciBDaHJvbWUgYnJvd3NlciBpbiB3ZWJicm93c2VyLiAgUGF0Y2ggY29udHJpYnV0ZWQKKyAgYnkgQXJuYXVkIENhbG1ldHRlcy4KKworLSBJc3N1ZSAjMTE4Mjk6IEZpeCBjb2RlIGV4ZWN1dGlvbiBob2xlcyBpbiBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGZvcgorICBtZXRhY2xhc3NlcyB3aXRoIG1ldGFjbGFzc2VzLiBQYXRjaCBieSBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzEyNzA4OiBBZGQgc3Rhcm1hcCgpIGFuZCBzdGFybWFwX2FzeW5jKCkgbWV0aG9kcyAoc2ltaWxhciB0bworICBpdGVydG9vbHMuc3Rhcm1hcCgpKSB0byBtdWx0aXByb2Nlc3NpbmcuUG9vbC4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTc4NTogRml4IGluc3BlY3QgYW5kIHB5ZG9jIHdpdGggbWlzYmVoYXZpbmcgZGVzY3JpcHRvcnMuCisKKy0gSXNzdWUgIzEzNjM3OiAiYTJiIiBmdW5jdGlvbnMgaW4gdGhlIGJpbmFzY2lpIG1vZHVsZSBub3cgYWNjZXB0IEFTQ0lJLW9ubHkKKyAgdW5pY29kZSBzdHJpbmdzLgorCistIElzc3VlICMxMzYzNDogQWRkIHN1cHBvcnQgZm9yIHF1ZXJ5aW5nIGFuZCBkaXNhYmxpbmcgU1NMIGNvbXByZXNzaW9uLgorCistIElzc3VlICMxMzYyNzogQWRkIHN1cHBvcnQgZm9yIFNTTCBFbGxpcHRpYyBDdXJ2ZS1iYXNlZCBEaWZmaWUtSGVsbG1hbgorICBrZXkgZXhjaGFuZ2UsIHRocm91Z2ggdGhlIFNTTENvbnRleHQuc2V0X2VjZGhfY3VydmUoKSBtZXRob2QgYW5kIHRoZQorICBzc2wuT1BfU0lOR0xFX0VDREhfVVNFIG9wdGlvbi4KKworLSBJc3N1ZSAjMTM2MzU6IEFkZCBzc2wuT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFLCBzbyB0aGF0IFNTTCBzZXJ2ZXJzCisgIGNob29zZSB0aGUgY2lwaGVyIGJhc2VkIG9uIHRoZWlyIG93biBwcmVmZXJlbmNlcywgcmF0aGVyIHRoYW4gb24gdGhlCisgIGNsaWVudCdzLgorCistIElzc3VlICMxMTgxMzogRml4IGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgZm9yIG1vZHVsZXMuIFBhdGNoIGJ5IEFuZHJlYXMKKyAgU3TDvGhyay4KKworLSBJc3N1ZSAjNzUwMjogRml4IGVxdWFsaXR5IGNvbXBhcmlzb24gZm9yIERvY1Rlc3RDYXNlIGluc3RhbmNlcy4gIFBhdGNoIGJ5CisgIEPDqWRyaWMgS3JpZXIuCisKKy0gSXNzdWUgIzExODcwOiB0aHJlYWRpbmc6IFByb3Blcmx5IHJlaW5pdGlhbGl6ZSB0aHJlYWRzIGludGVybmFsIGxvY2tzIGFuZAorICBjb25kaXRpb24gdmFyaWFibGVzIHRvIGF2b2lkIGRlYWRsb2NrcyBpbiBjaGlsZCBwcm9jZXNzZXMuCisKKy0gSXNzdWUgIzgwMzU6IHVybGxpYjogRml4IGEgYnVnIHdoZXJlIHRoZSBjbGllbnQgY291bGQgcmVtYWluIHN0dWNrIGFmdGVyIGEKKyAgcmVkaXJlY3Rpb24gb3IgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzEzNTYwOiBvcy5zdHJlcnJvcigpIG5vdyB1c2VzIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZyBpbnN0ZWFkIG9mCisgIFVURi04LgorCistIElzc3VlICM4MzczOiBUaGUgZmlsZXN5c3RlbSBwYXRoIG9mIEFGX1VOSVggc29ja2V0cyBub3cgdXNlcyB0aGUgZmlsZXN5c3RlbQorICBlbmNvZGluZyBhbmQgdGhlIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyLCByYXRoZXIgdGhhbiBVVEYtOC4gIFBhdGNoCisgIGJ5IERhdmlkIFdhdHNvbi4KKworLSBJc3N1ZSAjMTAzNTA6IFJlYWQgYW5kIHNhdmUgZXJybm8gYmVmb3JlIGNhbGxpbmcgYSBmdW5jdGlvbiB3aGljaCBtaWdodAorICBvdmVyd3JpdGUgaXQuICBPcmlnaW5hbCBwYXRjaCBieSBIYWxsdmFyZCBCIEZ1cnVzZXRoLgorCistIElzc3VlICMxMTYxMDogSW50cm9kdWNlIGEgbW9yZSBnZW5lcmFsIHdheSB0byBkZWNsYXJlIGFic3RyYWN0IHByb3BlcnRpZXMuCisKKy0gSXNzdWUgIzEzNTkxOiBBIGJ1ZyBpbiBpbXBvcnRsaWIgaGFzIGJlZW4gZml4ZWQgdGhhdCBjYXVzZWQgaW1wb3J0X21vZHVsZQorICB0byBsb2FkIGEgbW9kdWxlIHR3aWNlLgorCistIElzc3VlICM0NjI1OiBJZiBJRExFIGNhbm5vdCB3cml0ZSB0byBpdHMgcmVjZW50IGZpbGUgb3IgYnJlYWtwb2ludCBmaWxlcywKKyAgZGlzcGxheSBhIG1lc3NhZ2UgcG9wdXAgYW5kIGNvbnRpbnVlIHJhdGhlciB0aGFuIGNyYXNoLiAgT3JpZ2luYWwgcGF0Y2ggYnkKKyAgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEzNDQ5IHNjaGVkLnNjaGVkdWxlci5ydW4oKSBtZXRob2QgaGFzIGEgbmV3ICJibG9ja2luZyIgcGFyYW1ldGVyIHdoaWNoCisgIHdoZW4gc2V0IHRvIEZhbHNlIG1ha2VzIHJ1bigpIGV4ZWN1dGUgdGhlIHNjaGVkdWxlZCBldmVudHMgZHVlIHRvIGV4cGlyZQorICBzb29uZXN0IChpZiBhbnkpIGFuZCB0aGVuIHJldHVybi4gIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbMOgLgorCistIElzc3VlICM4Njg0IHNjaGVkLnNjaGVkdWxlciBjbGFzcyBjYW4gYmUgc2FmZWx5IHVzZWQgaW4gbXVsdGktdGhyZWFkZWQKKyAgZW52aXJvbm1lbnRzLiAgUGF0Y2ggYnkgSm9zaWFoIENhcmxzb24gYW5kIEdpYW1wYW9sbyBSb2RvbMOgLgorCistIEFsaWFzIHJlc291cmNlLmVycm9yIHRvIE9TRXJyb3IgYWxhIFBFUCAzMTUxLgorCistIElzc3VlICM1Njg5OiBBZGQgc3VwcG9ydCBmb3IgbHptYSBjb21wcmVzc2lvbiB0byB0aGUgdGFyZmlsZSBtb2R1bGUuCisKKy0gSXNzdWUgIzEzMjQ4OiBUdXJuIDMuMidzIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgaW50byAzLjMncworICBEZXByZWNhdGlvbldhcm5pbmcuICBJdCBjb3ZlcnMgJ2NnaS5lc2NhcGUnLCAnaW1wb3J0bGliLmFiYy5QeUxvYWRlcicsCisgICdpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyJywgJ25udHBsaWIuTk5UUC54Z3RpdGxlJywgJ25udHBsaWIuTk5UUC54cGF0aCcsCisgIGFuZCBwcml2YXRlIGF0dHJpYnV0ZXMgb2YgJ3NtdHBkLlNNVFBDaGFubmVsJy4KKworLSBJc3N1ZSAjNTkwNSwgIzEzNTYwOiB0aW1lLnN0cmZ0aW1lKCkgaXMgbm93IHVzaW5nIHRoZSBjdXJyZW50IGxvY2FsZQorICBlbmNvZGluZywgaW5zdGVhZCBvZiBVVEYtOCwgaWYgdGhlIHdjc2Z0aW1lKCkgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjODY0MTogVXBkYXRlIElETEUgMyBzeW50YXggY29sb3JpbmcgdG8gcmVjb2duaXplIGIiLi4iIGFuZCBub3QgdSIuLiIuCisgIFBhdGNoIGJ5IFRhbCBFaW5hdC4KKworLSBJc3N1ZSAjMTM0NjQ6IEFkZCBhIHJlYWRpbnRvKCkgbWV0aG9kIHRvIGh0dHAuY2xpZW50LkhUVFBSZXNwb25zZS4gIFBhdGNoCisgIGJ5IEpvbiBLdWhuLgorCistIHRhcmZpbGUucHk6IENvcnJlY3RseSBkZXRlY3QgYnppcDIgY29tcHJlc3NlZCBzdHJlYW1zIHdpdGggYmxvY2tzaXplcworICBvdGhlciB0aGFuIDkwMGsuCisKKy0gSXNzdWUgIzEzNDM5OiBGaXggbWFueSBlcnJvcnMgaW4gdHVydGxlIGRvY3N0cmluZ3MuCisKKy0gSXNzdWUgIzY3MTU6IEFkZCBhIG1vZHVsZSAnbHptYScgZm9yIGNvbXByZXNzaW9uIHVzaW5nIHRoZSBMWk1BIGFsZ29yaXRobS4KKyAgVGhhbmtzIHRvIFBlciDDmHl2aW5kIEthcmxzZW4gZm9yIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxMzQ4NzogTWFrZSBpbnNwZWN0LmdldG1vZHVsZSByb2J1c3QgYWdhaW5zdCBjaGFuZ2VzIGRvbmUgdG8KKyAgc3lzLm1vZHVsZXMgd2hpbGUgaXQgaXMgaXRlcmF0aW5nIG92ZXIgaXQuCisKKy0gSXNzdWUgIzEyNjE4OiBGaXggYSBidWcgdGhhdCBwcmV2ZW50ZWQgcHlfY29tcGlsZSBmcm9tIGNyZWF0aW5nIGJ5dGUKKyAgY29tcGlsZWQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgSW5pdGlhbCBwYXRjaCBieSBTam9lcmQgZGUgVnJpZXMuCisKKy0gSXNzdWUgIzEzNDQ0OiBXaGVuIHN0ZG91dCBoYXMgYmVlbiBjbG9zZWQgZXhwbGljaXRseSwgd2Ugc2hvdWxkIG5vdCBhdHRlbXB0CisgIHRvIGZsdXNoIGl0IGF0IHNodXRkb3duIGFuZCBwcmludCBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTI1Njc6IFRoZSBjdXJzZXMgbW9kdWxlIHVzZXMgVW5pY29kZSBmdW5jdGlvbnMgZm9yIFVuaWNvZGUgYXJndW1lbnRzCisgIHdoZW4gaXQgaXMgbGlua2VkIHRvIHRoZSBuY3Vyc2VzIGxpYnJhcnkuIEl0IGVuY29kZXMgYWxzbyBVbmljb2RlIHN0cmluZ3MgdG8KKyAgdGhlIGxvY2FsZSBlbmNvZGluZyBpbnN0ZWFkIG9mIFVURi04LgorCistIElzc3VlICMxMjg1NjogRW5zdXJlIGNoaWxkIHByb2Nlc3NlcyBkbyBub3QgaW5oZXJpdCB0aGUgcGFyZW50J3MgcmFuZG9tCisgIHNlZWQgZm9yIGZpbGVuYW1lIGdlbmVyYXRpb24gaW4gdGhlIHRlbXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IEJyaWFuCisgIEhhcnJpbmcuCisKKy0gSXNzdWUgIzk5NTc6IFNwb29sZWRUZW1wb3JhcnlGaWxlLnRydW5jYXRlKCkgbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwgc2l6ZQorICBwYXJhbWV0ZXIsIGFzIG90aGVyIGZpbGUtbGlrZSBvYmplY3RzLiAgUGF0Y2ggYnkgUnlhbiBLZWxseS4KKworLSBJc3N1ZSAjMTM0NTg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIHRoZSBzc2wgbW9kdWxlIHdoZW4gZGVjb2RpbmcgYQorICBjZXJ0aWZpY2F0ZSB3aXRoIGEgc3ViamVjdEFsdE5hbWUuICBQYXRjaCBieSBSb2JlcnQgWGlhby4KKworLSBJc3N1ZSAjMTM0MTU6IG9zLnVuc2V0ZW52KCkgZG9lc24ndCBpZ25vcmUgZXJyb3JzIGFueW1vcmUuCisKKy0gSXNzdWUgIzEzMjQ1OiBzY2hlZC5zY2hlZHVsZXIgY2xhc3MgY29uc3RydWN0b3IncyB0aW1lZnVuYyBhbmQKKyAgZGVsYXlmdW5jdCBwYXJhbWV0ZXJzIGFyZSBub3cgb3B0aW9uYWwuCisgIHNjaGVkdWxlci5lbnRlciBhbmQgc2NoZWR1bGVyLmVudGVyYWJzIG1ldGhvZHMgZ2FpbmVkIGEgbmV3IGt3YXJncyBwYXJhbWV0ZXIuCisgIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IENocmlzIENsYXJrLgorCistIElzc3VlICMxMjMyODogVW5kZXIgV2luZG93cywgcmVmYWN0b3IgaGFuZGxpbmcgb2YgQ3RybC1DIGV2ZW50cyBhbmQKKyAgbWFrZSBfbXVsdGlwcm9jZXNzaW5nLndpbjMyLldhaXRGb3JNdWx0aXBsZU9iamVjdHMgaW50ZXJydXB0aWJsZSB3aGVuCisgIHRoZSB3YWl0X2ZsYWcgcGFyYW1ldGVyIGlzIGZhbHNlLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMzMyMjogRml4IEJ1ZmZlcmVkV3JpdGVyLndyaXRlKCkgdG8gZW5zdXJlIHRoYXQgQmxvY2tpbmdJT0Vycm9yIGlzCisgIHJhaXNlZCB3aGVuIHRoZSB3cmFwcGVkIHJhdyBmaWxlIGlzIG5vbi1ibG9ja2luZyBhbmQgdGhlIHdyaXRlIHdvdWxkIGJsb2NrLgorICBQcmV2aW91cyBjb2RlIGFzc3VtZWQgdGhhdCB0aGUgcmF3IHdyaXRlKCkgd291bGQgcmFpc2UgQmxvY2tpbmdJT0Vycm9yLCBidXQKKyAgUmF3SU9CYXNlLndyaXRlKCkgaXMgZGVmaW5lZCB0byByZXR1cm5lZCBOb25lIHdoZW4gdGhlIGNhbGwgd291bGQgYmxvY2suCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTMzNTg6IEhUTUxQYXJzZXIgbm93IGNhbGxzIGhhbmRsZV9kYXRhIG9ubHkgb25jZSBmb3IgZWFjaCBDREFUQS4KKworLSBJc3N1ZSAjNDE0NzogbWluaWRvbSdzIHRvcHJldHR5eG1sIG5vIGxvbmdlciBhZGRzIHdoaXRlc3BhY2UgYXJvdW5kIGEgdGV4dAorICBub2RlIHdoZW4gaXQgaXMgdGhlIG9ubHkgY2hpbGQgb2YgYW4gZWxlbWVudC4gIEluaXRpYWwgcGF0Y2ggYnkgRGFuCisgIEtlbmlnc2JlcmcuCisKKy0gSXNzdWUgIzEzMzc0OiBUaGUgV2luZG93cyBieXRlcyBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiB0aGUgb3MgbW9kdWxlLiBVc2UKKyAgVW5pY29kZSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBieXRlcyBmaWxlbmFtZXMgdG8gbm90IGRlcGVuZCBvbiB0aGUgQU5TSSBjb2RlCisgIHBhZ2UgYW55bW9yZSBhbmQgdG8gc3VwcG9ydCBhbnkgZmlsZW5hbWUuCisKKy0gSXNzdWUgIzEzMjk3OiBVc2UgYnl0ZXMgdHlwZSB0byBzZW5kIGFuZCByZWNlaXZlIGJpbmFyeSBkYXRhIHRocm91Z2ggWE1MUlBDLgorCistIElzc3VlICM2Mzk3OiBTdXBwb3J0ICIvZGV2L3BvbGwiIHBvbGxpbmcgb2JqZWN0cyBpbiBzZWxlY3QgbW9kdWxlLAorICB1bmRlciBTb2xhcmlzICYgZGVyaXZhdGl2ZXMuCisKKy0gSXNzdWVzICMxNzQ1NzYxLCAjNzU1NjcwLCAjMTMzNTcsICMxMjYyOSwgIzEyMDAzMTM6IEhUTUxQYXJzZXIgbm93IGNvcnJlY3RseQorICBoYW5kbGVzIG5vbi12YWxpZCBhdHRyaWJ1dGVzLCBpbmNsdWRpbmcgYWRqYWNlbnQgYW5kIHVucXVvdGVkIGF0dHJpYnV0ZXMuCisKKy0gSXNzdWUgIzEzMTkzOiBGaXggZGlzdHV0aWxzLmZpbGVsaXN0LkZpbGVMaXN0IGFuZCBwYWNrYWdpbmcubWFuaWZlc3QuTWFuaWZlc3QKKyAgdW5kZXIgV2luZG93cy4KKworLSBJc3N1ZSAjMTMzODQ6IFJlbW92ZSB1bm5lY2Vzc2FyeSBfX2Z1dHVyZV9fIGltcG9ydCBpbiBMaWIvcmFuZG9tLnB5CisKKy0gSXNzdWUgIzEzMTQ5OiBTcGVlZCB1cCBhcHBlbmQtb25seSBTdHJpbmdJTyBvYmplY3RzLgorCistIElzc3VlICMxMzM3MzogbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmdldCgpIGNvdWxkIHNvbWV0aW1lcyBibG9jayBpbmRlZmluaXRlbHkKKyAgd2hlbiBjYWxsZWQgd2l0aCBhIHRpbWVvdXQuICBQYXRjaCBieSBBcm5hdWQgWXNtYWwuCisKKy0gSXNzdWUgIzEzMjU0OiBGaXggTWFpbGRpciBpbml0aWFsaXphdGlvbiBzbyB0aGF0IG1haWxkaXIgY29udGVudHMKKyAgYXJlIHJlYWQgY29ycmVjdGx5LgorCistIElzc3VlICMzMDY3OiBsb2NhbGUuc2V0bG9jYWxlKCkgbm93IHJhaXNlcyBUeXBlRXJyb3IgaWYgdGhlIHNlY29uZAorICBhcmd1bWVudCBpcyBhbiBpbnZhbGlkIGl0ZXJhYmxlLiBJdHMgZG9jdW1lbnRhdGlvbiBhbmQgZG9jc3RyaW5nCisgIHdlcmUgYWxzbyB1cGRhdGVkLiBJbml0aWFsIHBhdGNoIGJ5IEp5cmtpIFB1bGxpYWluZW4uCisKKy0gSXNzdWUgIzEzMTQwOiBGaXggdGhlIGRhZW1vbl90aHJlYWRzIGF0dHJpYnV0ZSBvZiBUaHJlYWRpbmdNaXhJbi4KKworLSBJc3N1ZSAjMTMzMzk6IEZpeCBjb21waWxlIGVycm9yIGluIHBvc2l4bW9kdWxlLmMgZHVlIHRvIG1pc3Npbmcgc2VtaWNvbG9uLgorICBUaGFua3MgdG8gUm9iZXJ0IFhpYW8uCisKKy0gQnl0ZSBjb21waWxhdGlvbiBpbiBwYWNrYWdpbmcgaXMgbm93IGlzb2xhdGVkIGZyb20gdGhlIGNhbGxpbmcgUHl0aG9uIC1CIG9yCisgIC1PIG9wdGlvbnMsIGluc3RlYWQgb2YgYmVpbmcgZGlzYWxsb3dlZCB1bmRlciAtQiBvciBidWdneSB1bmRlciAtTy4KKworLSBJc3N1ZSAjMTA1NzA6IGN1cnNlcy5wdXRwKCkgYW5kIGN1cnNlcy50cGFybSgpIGFyZSBub3cgZXhwZWN0aW5nIGEgYnl0ZQorICBzdHJpbmcsIGluc3RlYWQgb2YgYSBVbmljb2RlIHN0cmluZy4KKworLSBJc3N1ZSAjMTMyOTU6IGh0dHAuc2VydmVyIG5vdyBwcm9kdWNlcyB2YWxpZCBIVE1MIDQuMDEgc3RyaWN0LgorCistIElzc3VlICMyODkyOiBwcmVzZXJ2ZSBpdGVycGFyc2UgZXZlbnRzIGluIGNhc2Ugb2YgU3ludGF4RXJyb3IuCisKKy0gSXNzdWUgIzEzMjg3OiB1cmxsaWIucmVxdWVzdCBhbmQgdXJsbGliLmVycm9yIG5vdyBjb250YWlucyBhbiBfX2FsbF9fCisgIGF0dHJpYnV0ZSB0byBleHBvc2Ugb25seSByZWxldmFudCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuICBQYXRjaCBieSBGbG9yZW50CisgIFhpY2x1bmEuCisKKy0gSXNzdWUgIzY3MDY2NDogRml4IEhUTUxQYXJzZXIgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgY29udGVudCBvZgorICBgYDxzY3JpcHQ+Li4uPC9zY3JpcHQ+YGAgYW5kIGBgPHN0eWxlPi4uLjwvc3R5bGU+YGAuCisKKy0gSXNzdWUgIzEwODE3OiBGaXggdXJscmV0cmlldmUgZnVuY3Rpb24gdG8gcmFpc2UgQ29udGVudFRvb1Nob3J0RXJyb3IgZXZlbgorICB3aGVuIHJlcG9ydGhvb2sgaXMgTm9uZS4gUGF0Y2ggYnkgSnlya2kgUHVsbGlhaW5lbi4KKworLSBJc3N1ZSAjMTMyOTY6IEZpeCBJRExFIHRvIGNsZWFyIGNvbXBpbGUgX19mdXR1cmVfXyBmbGFncyBvbiBzaGVsbCByZXN0YXJ0LgorICAoUGF0Y2ggYnkgUm9nZXIgU2Vyd3kpCisKKy0gRml4IHRoZSB4bWxycGMuY2xpZW50IHVzZXIgYWdlbnQgdG8gcmV0dXJuIHNvbWV0aGluZyBzaW1pbGFyIHRvCisgIHVybGxpYi5yZXF1ZXN0IHVzZXIgYWdlbnQ6ICJQeXRob24teG1scnBjLzMuMyIuCisKKy0gSXNzdWUgIzEzMjkzOiBCZXR0ZXIgZXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0byBtYXJzaGFsIGJ5dGVzIHVzaW5nCisgIHhtbHJwYy5jbGllbnQuCisKKy0gSXNzdWUgIzEzMjkxOiBOYW1lRXJyb3IgaW4geG1scnBjIHBhY2thZ2UuCisKKy0gSXNzdWUgIzEzMjU4OiBVc2UgY2FsbGFibGUoKSBidWlsdC1pbiBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4KKworLSBJc3N1ZSAjMTMyNzM6IGZpeCBhIGJ1ZyB0aGF0IHByZXZlbnRlZCBIVE1MUGFyc2VyIHRvIHByb3Blcmx5IGRldGVjdCBzb21lCisgIHRhZ3Mgd2hlbiBzdHJpY3Q9RmFsc2UuCisKKy0gSXNzdWUgIzExMTgzOiBBZGQgZmluZXItZ3JhaW5lZCBleGNlcHRpb25zIHRvIHRoZSBzc2wgbW9kdWxlLCBzbyB0aGF0CisgIHlvdSBkb24ndCBoYXZlIHRvIGluc3BlY3QgdGhlIGV4Y2VwdGlvbidzIGF0dHJpYnV0ZXMgaW4gdGhlIGNvbW1vbiBjYXNlLgorCistIElzc3VlICMxMzIxNjogQWRkIGNwNjUwMDEgY29kZWMsIHRoZSBXaW5kb3dzIFVURi04IChDUF9VVEY4KS4KKworLSBJc3N1ZSAjMTMyMjY6IEFkZCBSVExEX3h4eCBjb25zdGFudHMgdG8gdGhlIG9zIG1vZHVsZS4gVGhlc2UgY29uc3RhbnRzIGNhbiBiZQorICB1c2VkIHdpdGggc3lzLnNldGRsb3BlbmZsYWdzKCkuCisKKy0gSXNzdWUgIzEwMjc4OiBBZGQgY2xvY2tfZ2V0cmVzKCksIGNsb2NrX2dldHRpbWUoKSBhbmQgQ0xPQ0tfeHh4IGNvbnN0YW50cyB0bworICB0aGUgdGltZSBtb2R1bGUuIHRpbWUuY2xvY2tfZ2V0dGltZSh0aW1lLkNMT0NLX01PTk9UT05JQykgcHJvdmlkZXMgYQorICBtb25vdG9uaWMgY2xvY2sKKworLSBJc3N1ZSAjMTAzMzI6IG11bHRpcHJvY2Vzc2luZzogZml4IGEgcmFjZSBjb25kaXRpb24gd2hlbiBhIFBvb2wgaXMgY2xvc2VkCisgIGJlZm9yZSBhbGwgdGFza3MgaGF2ZSBjb21wbGV0ZWQuCisKKy0gSXNzdWUgIzEzMjU1OiB3cm9uZyBkb2NzdHJpbmdzIGluIGFycmF5IG1vZHVsZS4KKworLSBJc3N1ZSAjODU0MDogUmVtb3ZlIGRlcHJlY2F0ZWQgQ29udGV4dC5fY2xhbXAgYXR0cmlidXRlIGluIERlY2ltYWwgbW9kdWxlLgorCistIElzc3VlICMxMzIzNTogQWRkZWQgRGVwcmVjYXRpb25XYXJuaW5nIHRvIGxvZ2dpbmcud2FybigpIG1ldGhvZCBhbmQgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzkxNjg6IG5vdyBzbXRwZCBpcyBhYmxlIHRvIGJpbmQgcHJpdmlsZWdlZCBwb3J0LgorCistIElzc3VlICMxMjUyOTogZml4IGNnaS5wYXJzZV9oZWFkZXIgaXNzdWUgb24gc3RyaW5ncyB3aXRoIGRvdWJsZS1xdW90ZXMgYW5kCisgIHNlbWljb2xvbnMgdG9nZXRoZXIuIFBhdGNoIGJ5IEJlbiBEYXJuZWxsIGFuZCBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTMyMjc6IGZ1bmN0b29scy5scnVfY2FjaGUoKSBub3cgaGFzIGEgb3B0aW9uIHRvIGRpc3Rpbmd1aXNoCisgIGNhbGxzIHdpdGggZGlmZmVyZW50IGFyZ3VtZW50IHR5cGVzLgorCistIElzc3VlICM2MDkwOiB6aXBmaWxlIHJhaXNlcyBhIFZhbHVlRXJyb3Igd2hlbiBhIGRvY3VtZW50IHdpdGggYSB0aW1lc3RhbXAKKyAgZWFybGllciB0aGFuIDE5ODAgaXMgcHJvdmlkZWQuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMzE1MDogc3lzY29uZmlnIG5vIGxvbmdlciBwYXJzZXMgdGhlIE1ha2VmaWxlIGFuZCBjb25maWcuaCBmaWxlcworICB3aGVuIGltcG9ydGVkLCBpbnN0ZWFkIGRvaW5nIGl0IGF0IGJ1aWxkIHRpbWUuICBUaGlzIG1ha2VzIGltcG9ydGluZworICBzeXNjb25maWcgZmFzdGVyIGFuZCByZWR1Y2VzIFB5dGhvbiBzdGFydHVwIHRpbWUgYnkgMjAlLgorCistIElzc3VlICMxMjQ0ODogc210cGxpYiBub3cgZmx1c2hlcyBzdGRvdXQgd2hpbGUgcnVubmluZyBgYHB5dGhvbiAtbSBzbXRwbGliYGAKKyAgaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgcHJvbXB0IGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTI0NTQ6IFRoZSBtYWlsYm94IG1vZHVsZSBpcyBub3cgdXNpbmcgQVNDSUksIGluc3RlYWQgb2YgdGhlIGxvY2FsZQorICBlbmNvZGluZywgdG8gcmVhZCBhbmQgd3JpdGUgLm1oX3NlcXVlbmNlcyBmaWxlcy4KKworLSBJc3N1ZSAjMTMxOTQ6IHpsaWIuY29tcHJlc3NvYmooKS5jb3B5KCkgYW5kIHpsaWIuZGVjb21wcmVzc29iaigpLmNvcHkoKSBhcmUKKyAgbm93IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNjczMDA3OiB1cmxsaWIucmVxdWVzdCBub3cgc3VwcG9ydHMgSEVBRCByZXF1ZXN0IHZpYSBuZXcgbWV0aG9kIGFyZ3VtZW50LgorICBQYXRjaCBjb250cmlidXRpb25zIGJ5IERhdmlkIFN0YW5laywgUGF0cmljayBXZXN0ZXJob2ZmIGFuZCBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzEyMzg2OiBwYWNrYWdpbmcgZG9lcyBub3QgZmFpbCBhbnltb3JlIHdoZW4gd3JpdGluZyB0aGUgUkVTT1VSQ0VTCisgIGZpbGUuCisKKy0gSXNzdWUgIzEzMTU4OiBGaXggZGVjb2RpbmcgYW5kIGVuY29kaW5nIG9mIEdOVSB0YXIgc3BlY2lmaWMgYmFzZS0yNTYgbnVtYmVyCisgIGZpZWxkcyBpbiB0YXJmaWxlLgorCistIElzc3VlICMxMzAyNTogbWltZXR5cGVzIGlzIG5vdyByZWFkaW5nIE1JTUUgdHlwZXMgdXNpbmcgdGhlIFVURi04IGVuY29kaW5nLAorICBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzEwNjUzOiBPbiBXaW5kb3dzLCB1c2Ugc3RyZnRpbWUoKSBpbnN0ZWFkIG9mIHdjc2Z0aW1lKCkgYmVjYXVzZQorICB3Y3NmdGltZSgpIGRvZXNuJ3QgZm9ybWF0IHRpbWUgem9uZSBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzEzMTUwOiBUaGUgdG9rZW5pemUgbW9kdWxlIGRvZXNuJ3QgY29tcGlsZSBsYXJnZSByZWd1bGFyIGV4cHJlc3Npb25zCisgIGF0IHN0YXJ0dXAgYW55bW9yZS4KKworLSBJc3N1ZSAjMTExNzE6IEZpeCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZSB3aGVuIFB5dGhvbiB3YXMKKyAgY29uZmlndXJlZCB3aXRoIGRpZmZlcmVudCBwcmVmaXggYW5kIGV4ZWMtcHJlZml4LgorCistIElzc3VlICMxMTI1NDogVGVhY2ggZGlzdHV0aWxzIGFuZCBwYWNrYWdpbmcgdG8gY29tcGlsZSAucHljIGFuZCAucHlvIGZpbGVzIGluCisgIFBFUCAzMTQ3LWNvbXBsaWFudCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllcy4KKworLSBJc3N1ZSAjNzM2NzogRml4IHBrZ3V0aWwud2Fsa19wYXRocyB0byBza2lwIGRpcmVjdG9yaWVzIHdob3NlCisgIGNvbnRlbnRzIGNhbm5vdCBiZSByZWFkLgorCistIElzc3VlICMzMTYzOiBUaGUgc3RydWN0IG1vZHVsZSBnZXRzIG5ldyBmb3JtYXQgY2hhcmFjdGVycyAnbicgYW5kICdOJworICBzdXBwb3J0aW5nIEMgaW50ZWdlciB0eXBlcyBgYHNzaXplX3RgYCBhbmQgYGBzaXplX3RgYCwgcmVzcGVjdGl2ZWx5LgorCistIElzc3VlICMxMzA5OTogRml4IHNxbGl0ZTMuQ3Vyc29yLmxhc3Ryb3dpZCB1bmRlciBhIFR1cmtpc2ggbG9jYWxlLgorICBSZXBvcnRlZCBhbmQgZGlhZ25vc2VkIGJ5IFRob21hcyBLbHV5dmVyLgorCistIElzc3VlICMxMzA4NzogQnVmZmVyZWRSZWFkZXIuc2VlaygpIG5vdyBhbHdheXMgcmFpc2VzIFVuc3VwcG9ydGVkT3BlcmF0aW9uCisgIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgdW5zZWVrYWJsZSwgZXZlbiBpZiB0aGUgc2VlayBjb3VsZCBiZQorICBzYXRpc2ZpZWQgdXNpbmcgdGhlIGludGVybmFsIGJ1ZmZlci4gIFBhdGNoIGJ5IEpvaG4gTydDb25ub3IuCisKKy0gSXNzdWUgIzc2ODk6IEFsbG93IHBpY2tsaW5nIG9mIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY2xhc3NlcyB3aGVuIHRoZWlyCisgIG1ldGFjbGFzcyBpcyByZWdpc3RlcmVkIHdpdGggY29weXJlZy4gIFBhdGNoIGJ5IE5pY29sYXMgTS4gVGhpw6lyeSBhbmQgQ3JhaWcKKyAgQ2l0cm8uCisKKy0gSXNzdWUgIzEzMDM0OiBXaGVuIGRlY29kaW5nIHNvbWUgU1NMIGNlcnRpZmljYXRlcywgdGhlIHN1YmplY3RBbHROYW1lCisgIGV4dGVuc2lvbiBjb3VsZCBiZSB1bnJlcG9ydGVkLgorCistIElzc3VlICM5ODcxOiBQcmV2ZW50IElETEUgMyBjcmFzaCB3aGVuIGdpdmVuIGJ5dGUgc3RpbmdzCisgIHdpdGggaW52YWxpZCBoZXggZXNjYXBlIHNlcXVlbmNlcywgbGlrZSBiJ1x4MCcuCisgIChPcmlnaW5hbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuKQorCistIElzc3VlICMxMjMwNjogRXhwb3NlIHRoZSBydW50aW1lIHZlcnNpb24gb2YgdGhlIHpsaWIgQyBsaWJyYXJ5IGFzIGEgY29uc3RhbnQsCisgIFpMSUJfUlVOVElNRV9WRVJTSU9OLCBpbiB0aGUgemxpYiBtb2R1bGUuIFBhdGNoIGJ5IFRvcnN0ZW4gTGFuZHNjaG9mZi4KKworLSBJc3N1ZSAjMTI5NTk6IEFkZCBjb2xsZWN0aW9ucy5DaGFpbk1hcCB0byBjb2xsZWN0aW9ucy5fX2FsbF9fLgorCistIElzc3VlICM4OTMzOiBkaXN0dXRpbHMnIFBLRy1JTkZPIGZpbGVzIGFuZCBwYWNrYWdpbmcncyBNRVRBREFUQSBmaWxlcyB3aWxsCisgIG5vdyBjb3JyZWN0bHkgcmVwb3J0IE1ldGFkYXRhLVZlcnNpb246IDEuMSBpbnN0ZWFkIG9mIDEuMCBpZiBhIENsYXNzaWZpZXIgb3IKKyAgRG93bmxvYWQtVVJMIGZpZWxkIGlzIHByZXNlbnQuCisKKy0gSXNzdWUgIzEyNTY3OiBBZGQgY3Vyc2VzLnVuZ2V0X3djaCgpIGZ1bmN0aW9uLiBQdXNoIGEgY2hhcmFjdGVyIHNvIHRoZSBuZXh0CisgIGdldF93Y2goKSB3aWxsIHJldHVybiBpdC4KKworLSBJc3N1ZSAjOTU2MTogZGlzdHV0aWxzIGFuZCBwYWNrYWdpbmcgbm93IHdyaXRlcyBlZ2ctaW5mbyBmaWxlcyB1c2luZyBVVEYtOCwKKyAgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nLgorCistIElzc3VlICM4Mjg2OiBUaGUgZGlzdHV0aWxzIGNvbW1hbmQgc2Rpc3Qgd2lsbCBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSBpbnN0ZWFkCisgIG9mIGNyYXNoaW5nIHdoZW4gYW4gaW52YWxpZCBwYXRoIGlzIGdpdmVuIGluIHRoZSBtYW5pZmVzdCB0ZW1wbGF0ZS4KKworLSBJc3N1ZSAjMTI4NDE6IHRhcmZpbGUgdW5uZWNlc3NhcmlseSBjaGVja2VkIHRoZSBleGlzdGVuY2Ugb2YgbnVtZXJpY2FsIHVzZXIKKyAgYW5kIGdyb3VwIGlkcyBvbiBleHRyYWN0aW9uLiBJZiBvbmUgb2YgdGhlbSBkaWQgbm90IGV4aXN0IHRoZSByZXNwZWN0aXZlIGlkCisgIG9mIHRoZSBjdXJyZW50IHVzZXIgKGkuZS4gcm9vdCkgd2FzIHVzZWQgZm9yIHRoZSBmaWxlIGFuZCBvd25lcnNoaXAKKyAgaW5mb3JtYXRpb24gd2FzIGxvc3QuCisKKy0gSXNzdWUgIzEyODg4OiBGaXggYSBidWcgaW4gSFRNTFBhcnNlci51bmVzY2FwZSB0aGF0IHByZXZlbnRlZCBpdCB0byBlc2NhcGUKKyAgbW9yZSB0aGFuIDEyOCBlbnRpdGllcy4gIFBhdGNoIGJ5IFBldGVyIE90dGVuLgorCistIElzc3VlICMxMjg3ODogRXhwb3NlIGEgX19kaWN0X18gYXR0cmlidXRlIG9uIGlvLklPQmFzZSBhbmQgaXRzIHN1YmNsYXNzZXMuCisKKy0gSXNzdWUgIzEyNjM2OiBJRExFIHJlYWRzIHRoZSBjb2RpbmcgY29va2llIHdoZW4gZXhlY3V0aW5nIGEgUHl0aG9uIHNjcmlwdC4KKworLSBJc3N1ZSAjMTI0OTQ6IE9uIGVycm9yLCBjYWxsKCksIGNoZWNrX2NhbGwoKSwgY2hlY2tfb3V0cHV0KCkgYW5kCisgIGdldHN0YXR1c291dHB1dCgpIGZ1bmN0aW9ucyBvZiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgbm93IGtpbGwgdGhlIHByb2Nlc3MsCisgIHJlYWQgaXRzIHN0YXR1cyAodG8gYXZvaWQgem9tYmlzKSBhbmQgY2xvc2UgcGlwZXMuCisKKy0gSXNzdWUgIzEyNzIwOiBFeHBvc2UgbG93LWxldmVsIExpbnV4IGV4dGVuZGVkIGZpbGUgYXR0cmlidXRlIGZ1bmN0aW9ucyBpbiBvcy4KKworLSBJc3N1ZSAjMTA5NDY6IFRoZSBkaXN0dXRpbHMgY29tbWFuZHMgYmRpc3RfZHVtYiwgYmRpc3Rfd2luaW5zdCBhbmQgYmRpc3RfbXNpCisgIG5vdyByZXNwZWN0IGEgLS1za2lwLWJ1aWxkIG9wdGlvbiBnaXZlbiB0byBiZGlzdC4gIFRoZSBwYWNrYWdpbmcgY29tbWFuZHMKKyAgd2VyZSBmaXhlZCB0b28uCisKKy0gSXNzdWUgIzEyODQ3OiBGaXggYSBjcmFzaCB3aXRoIG5lZ2F0aXZlIFBVVCBhbmQgTE9OR19CSU5QVVQgYXJndW1lbnRzIGluCisgIHRoZSBDIHBpY2tsZSBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTE1NjQ6IEF2b2lkIGNyYXNoZXMgd2hlbiB0cnlpbmcgdG8gcGlja2xlIGh1Z2Ugb2JqZWN0cyBvciBjb250YWluZXJzCisgIChtb3JlIHRoYW4gMioqMzEgaXRlbXMpLiAgSW5zdGVhZCwgaW4gbW9zdCBjYXNlcywgYW4gT3ZlcmZsb3dFcnJvciBpcyByYWlzZWQuCisKKy0gSXNzdWUgIzEyMjg3OiBGaXggYSBzdGFjayBjb3JydXB0aW9uIGluIG9zc2F1ZGlvZGV2IG1vZHVsZSB3aGVuIHRoZSBGRCBpcworICBncmVhdGVyIHRoYW4gRkRfU0VUU0laRS4KKworLSBJc3N1ZSAjMTI4Mzk6IEZpeCBjcmFzaCBpbiB6bGliIG1vZHVsZSBkdWUgdG8gdmVyc2lvbiBtaXNtYXRjaC4KKyAgRml4IGJ5IFJpY2hhcmQgTS4gVGV3LgorCistIElzc3VlICM5OTIzOiBUaGUgbWFpbGNhcCBtb2R1bGUgbm93IGNvcnJlY3RseSB1c2VzIHRoZSBwbGF0Zm9ybSBwYXRoCisgIHNlcGFyYXRvciBmb3IgdGhlIE1BSUxDQVAgZW52aXJvbm1lbnQgdmFyaWFibGUgb24gbm9uLVBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI4MzU6IEZvbGxvdyB1cCB0byAjNjU2MCB0aGF0IHVuY29uZGl0aW9uYWxseSBwcmV2ZW50cyB1c2Ugb2YgdGhlCisgIHVuZW5jcnlwdGVkIHNlbmRtc2cvcmVjdm1zZyBBUElzIG9uIFNTTCB3cmFwcGVkIHNvY2tldHMuIFBhdGNoIGJ5IERhdmlkCisgIFdhdHNvbi4KKworLSBJc3N1ZSAjMTI4MDM6IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKCkgbm93IGFjY2VwdHMgYSBwYXNzd29yZCBhcmd1bWVudAorICB0byBiZSB1c2VkIGlmIHRoZSBwcml2YXRlIGtleSBpcyBlbmNyeXB0ZWQuICBQYXRjaCBieSBBZGFtIFNpbXBraW5zLgorCistIElzc3VlICMxMTY1NzogRml4IHNlbmRpbmcgZmlsZSBkZXNjcmlwdG9ycyBvdmVyIDI1NSBvdmVyIGEgbXVsdGlwcm9jZXNzaW5nCisgIFBpcGUuCisKKy0gSXNzdWUgIzEyODExOiB0YWJuYW5ueS5jaGVjaygpIG5vdyBwcm9tcHRseSBjbG9zZXMgY2hlY2tlZCBmaWxlcy4gUGF0Y2ggYnkKKyAgQW50aG9ueSBCcmlnZ3MuCisKKy0gSXNzdWUgIzY1NjA6IFRoZSBzZW5kbXNnL3JlY3Ztc2cgQVBJIGlzIG5vdyBleHBvc2VkIGJ5IHRoZSBzb2NrZXQgbW9kdWxlCisgIHdoZW4gcHJvdmlkZWQgYnkgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0sIHN1cHBvcnRpbmcgcHJvY2Vzc2luZyBvZgorICBhbmNpbGxhcnkgZGF0YSBpbiBwdXJlIFB5dGhvbiBjb2RlLiBQYXRjaCBieSBEYXZpZCBXYXRzb24gYW5kIEhlaWtvIFd1bmRyYW0uCisKKy0gSXNzdWUgIzEyMzI2OiBPbiBMaW51eCwgc3lzLnBsYXRmb3JtIGRvZXNuJ3QgY29udGFpbiB0aGUgbWFqb3IgdmVyc2lvbgorICBhbnltb3JlLiBJdCBpcyBub3cgYWx3YXlzICdsaW51eCcsIGluc3RlYWQgb2YgJ2xpbnV4Micgb3IgJ2xpbnV4MycgZGVwZW5kaW5nCisgIG9uIHRoZSBMaW51eCB2ZXJzaW9uIHVzZWQgdG8gYnVpbGQgUHl0aG9uLgorCistIElzc3VlICMxMjIxMzogRml4IGEgYnVmZmVyaW5nIGJ1ZyB3aXRoIGludGVybGVhdmVkIHJlYWRzIGFuZCB3cml0ZXMgdGhhdAorICBjb3VsZCBhcHBlYXIgb24gQnVmZmVyZWRSYW5kb20gc3RyZWFtcy4KKworLSBJc3N1ZSAjMTI3Nzg6IFJlZHVjZSBtZW1vcnkgY29uc3VtcHRpb24gd2hlbiBKU09OLWVuY29kaW5nIGEgbGFyZ2UKKyAgY29udGFpbmVyIG9mIG1hbnkgc21hbGwgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTI2NTA6IEZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgc3VicHJvY2Vzcy5Qb3BlbiBjb3VsZCBsZWFrCisgIHJlc291cmNlcyAoRkQvem9tYmllKSB3aGVuIGtpbGxlZCBhdCB0aGUgd3JvbmcgdGltZS4KKworLSBJc3N1ZSAjMTI3NDQ6IEZpeCBpbmVmZmljaWVudCByZXByZXNlbnRhdGlvbiBvZiBpbnRlZ2VycyBiZXR3ZWVuIDIqKjMxIGFuZAorICAyKio2MyBvbiBzeXN0ZW1zIHdpdGggYSA2NC1iaXQgQyAibG9uZyIuCisKKy0gSXNzdWUgIzEyNjQ2OiBBZGQgYW4gJ2VvZicgYXR0cmlidXRlIHRvIHpsaWIuRGVjb21wcmVzcywgdG8gbWFrZSBpdCBlYXNpZXIgdG8KKyAgZGV0ZWN0IHRydW5jYXRlZCBpbnB1dCBzdHJlYW1zLgorCistIElzc3VlICMxMTUxMzogRml4IGV4Y2VwdGlvbiBoYW5kbGluZyBgYHRhcmZpbGUuVGFyRmlsZS5nem9wZW4oKWBgIHdoZW4KKyAgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW5lZC4KKworLSBJc3N1ZSAjMTI2ODc6IEZpeCBhIHBvc3NpYmxlIGJ1ZmZlcmluZyBidWcgd2hlbiB1bnBpY2tsaW5nIHRleHQgbW9kZQorICAocHJvdG9jb2wgMCwgbW9zdGx5KSBwaWNrbGVzLgorCistIElzc3VlICMxMDA4NzogRml4IHRoZSBodG1sIG91dHB1dCBmb3JtYXQgb2YgdGhlIGNhbGVuZGFyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTI1NDA6IFByZXZlbnQgem9tYmllIElETEUgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgZHVlIHRvIGNoYW5nZXMKKyAgaW4gb3Mua2lsbCgpLgorCistIElzc3VlICMxMzEyMTogYWRkIHN1cHBvcnQgZm9yIGlucGxhY2UgbWF0aCBvcGVyYXRvcnMgdG8gY29sbGVjdGlvbnMuQ291bnRlci4KKworLSBBZGQgc3VwcG9ydCBmb3IgdW5hcnkgcGx1cyBhbmQgdW5hcnkgbWludXMgdG8gY29sbGVjdGlvbnMuQ291bnRlci4KKworLSBJc3N1ZSAjMTI2ODM6IHVybHBhcnNlIHVwZGF0ZWQgdG8gaW5jbHVkZSBzdm4gYXMgc2NoZW1lcyB0aGF0IHVzZXMgcmVsYXRpdmUKKyAgcGF0aHMuIChzdm4gZnJvbSAxLjUgb253YXJkcyBzdXBwb3J0IHJlbGF0aXZlIHBhdGgpLgorCistIElzc3VlICMxMjY1NTogRXhwb3NlIGZ1bmN0aW9ucyBmcm9tIHNjaGVkLmggaW4gdGhlIG9zIG1vZHVsZTogc2NoZWRfeWllbGQoKSwKKyAgc2NoZWRfc2V0c2NoZWR1bGVyKCksIHNjaGVkX2dldHNjaGVkdWxlcigpLCBzY2hlZF9zZXRwYXJhbSgpLAorICBzY2hlZF9nZXRfbWluX3ByaW9yaXR5KCksIHNjaGVkX2dldF9tYXhfcHJpb3JpdHkoKSwgc2NoZWRfcnJfZ2V0X2ludGVydmFsKCksCisgIHNjaGVkX2dldGFmZmluaXR5KCksIHNjaGVkX3NldGFmZmluaXR5KCkuCisKKy0gQWRkIFRocmVhZEVycm9yIHRvIHRocmVhZGluZy5fX2FsbF9fLgorCistIElzc3VlcyAjMTExMDQsICM4Njg4OiBGaXggdGhlIGJlaGF2aW9yIG9mIGRpc3R1dGlscycgc2Rpc3QgY29tbWFuZCB3aXRoCisgIG1hbnVhbGx5LW1haW50YWluZWQgTUFOSUZFU1QgZmlsZXMuCisKKy0gSXNzdWUgIzExMjgxOiBzbXRwbGliLlNUTVAgZ2V0cyBzb3VyY2VfYWRkcmVzcyBwYXJhbWV0ZXIsIHdoaWNoIGFkZHMgdGhlCisgIGFiaWxpdHkgdG8gYmluZCB0byBzcGVjaWZpYyBzb3VyY2UgYWRkcmVzcyBvbiBhIG1hY2hpbmUgd2l0aCBtdWx0aXBsZQorICBpbnRlcmZhY2VzLiBQYXRjaCBieSBQYXVsbyBTY2FyZGluZS4KKworLSBJc3N1ZSAjMTI0NjQ6IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeS5jbGVhbnVwKCkgc2hvdWxkIG5vdCBmb2xsb3cKKyAgc3ltbGlua3M6IGZpeCBpdC4gUGF0Y2ggYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzg4ODc6ICJweWRvYyBzb21lYnVpbHRpbi5zb21lbWV0aG9kIiAob3IgaGVscCgnc29tZWJ1aWx0aW4uc29tZW1ldGhvZCcpCisgIGluIFB5dGhvbiBjb2RlKSBub3cgZmluZHMgdGhlIGRvYyBvZiB0aGUgbWV0aG9kLgorCistIElzc3VlICMxMDk2ODogUmVtb3ZlIGluZGlyZWN0aW9uIGluIHRocmVhZGluZy4gIFRoZSBwdWJsaWMgbmFtZXMgKEV2ZW50LAorICBDb25kaXRpb24sIGV0Yy4pIHVzZWQgdG8gYmUgZmFjdG9yeSBmdW5jdGlvbnMgcmV0dXJuaW5nIGluc3RhbmNlcyBvZiBoaWRkZW4KKyAgY2xhc3NlcyAoX0V2ZW50LCBfQ29uZGl0aW9uLCBldGMuKSwgYmVjYXVzZSAoaWYgR3VpZG8gcmVjYWxscyBjb3JyZWN0bHkpIHRoaXMKKyAgY29kZSBwcmUtZGF0ZXMgdGhlIGFiaWxpdHkgdG8gc3ViY2xhc3MgZXh0ZW5zaW9uIHR5cGVzLiAgSXQgaXMgbm93IHBvc3NpYmxlCisgIHRvIGluaGVyaXQgZnJvbSB0aGVzZSBjbGFzc2VzIHdpdGhvdXQgaGF2aW5nIHRvIGltcG9ydCB0aGUgcHJpdmF0ZQorICB1bmRlcnNjb3JlZCBuYW1lcyBsaWtlIG11bHRpcHJvY2Vzc2luZyBkaWQuCisKKy0gSXNzdWUgIzk3MjM6IEFkZCBzaGxleC5xdW90ZSBmdW5jdGlvbnMsIHRvIGVzY2FwZSBmaWxlbmFtZXMgYW5kIGNvbW1hbmQKKyAgbGluZXMuCisKKy0gSXNzdWUgIzEyNjAzOiBGaXggcHlkb2Muc3lub3BzaXMoKSBvbiBmaWxlcyB3aXRoIG5vbi1uZWdhdGl2ZSBzdF9tdGltZS4KKworLSBJc3N1ZSAjMTI1MTQ6IFVzZSB0cnkvZmluYWxseSB0byBhc3N1cmUgdGhlIHRpbWVpdCBtb2R1bGUgcmVzdG9yZXMgZ2FyYmFnZQorICBjb2xsZWN0aW9ucyB3aGVuIGl0IGlzIGRvbmUuCisKKy0gSXNzdWUgIzEyNjA3OiBJbiBzdWJwcm9jZXNzLCBmaXggaXNzdWUgd2hlcmUgaWYgc3RkaW4sIHN0ZG91dCBvciBzdGRlcnIgaXMKKyAgZ2l2ZW4gYXMgYSBsb3cgZmQsIGl0IGdldHMgb3ZlcndyaXR0ZW4uCisKKy0gSXNzdWUgIzEyNTkwOiBJRExFIGVkaXRvciB3aW5kb3cgbm93IGFsd2F5cyBkaXNwbGF5cyB0aGUgZmlyc3QgbGluZQorICB3aGVuIG9wZW5pbmcgYSBsb25nIGZpbGUuICBXaXRoIFRrIDguNSwgdGhlIGZpcnN0IGxpbmUgd2FzIGhpZGRlbi4KKworLSBJc3N1ZSAjMTI1NzY6IEZpeCB1cmxvcGVuIGJlaGF2aW9yIG9uIHNpdGVzIHdoaWNoIGRvIG5vdCBzZW5kIChvciBvYmZ1c2NhdGVzKQorICBDb25uZWN0aW9uOmNsb3NlIGhlYWRlci4KKworLSBJc3N1ZSAjMTIxMDI6IERvY3VtZW50IHRoYXQgYnVmZmVyZWQgZmlsZXMgbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSBiZWluZyB1c2VkCisgIHdpdGggbW1hcC4gUGF0Y2ggYnkgU3RlZmZlbiBEYW9kZSBOdXJwbWVzby4KKworLSBJc3N1ZSAjMTI1NjA6IEJ1aWxkIGxpYnB5dGhvbi5zbyBvbiBPcGVuQlNELiBQYXRjaCBieSBTdGVmYW4gU3BlcmxpbmcuCisKKy0gSXNzdWUgIzE4MTM6IEZpeCBjb2RlYyBsb29rdXAgdW5kZXIgVHVya2lzaCBsb2NhbGVzLgorCistIElzc3VlICMxMjU5MTogSW1wcm92ZSBzdXBwb3J0IG9mICJ1bml2ZXJzYWwgbmV3bGluZXMiIGluIHRoZSBzdWJwcm9jZXNzCisgIG1vZHVsZTogdGhlIHBpcGVkIHN0cmVhbXMgY2FuIG5vdyBiZSBwcm9wZXJseSByZWFkIGZyb20gb3Igd3JpdHRlbiB0by4KKworLSBJc3N1ZSAjMTI1OTE6IEFsbG93IGlvLlRleHRJT1dyYXBwZXIgdG8gd29yayB3aXRoIHJhdyBJTyBvYmplY3RzICh3aXRob3V0CisgIGEgcmVhZDEoKSBtZXRob2QpLCBhbmQgYWRkIGEgKndyaXRlX3Rocm91Z2gqIHBhcmFtZXRlciB0byBtYW5kYXRlCisgIHVuYnVmZmVyZWQgd3JpdGVzLgorCistIElzc3VlICMxMDg4MzogRml4IHNvY2tldCBsZWFrcyBpbiB1cmxsaWIucmVxdWVzdCB3aGVuIHVzaW5nIEZUUC4KKworLSBJc3N1ZSAjMTI1OTI6IE1ha2UgUHl0aG9uIGJ1aWxkIG9uIE9wZW5CU0QgNSAoYW5kIGZ1dHVyZSBtYWpvciByZWxlYXNlcykuCisKKy0gSXNzdWUgIzEyMzcyOiBQT1NJWCBzZW1hcGhvcmVzIGFyZSBicm9rZW4gb24gQUlYOiBkb24ndCB1c2UgdGhlbS4KKworLSBJc3N1ZSAjMTI1NTE6IFByb3ZpZGUgYSBnZXRfY2hhbm5lbF9iaW5kaW5nKCkgbWV0aG9kIG9uIFNTTCBzb2NrZXRzIHNvIGFzCisgIHRvIGdldCBjaGFubmVsIGJpbmRpbmcgZGF0YSBmb3IgdGhlIGN1cnJlbnQgU1NMIHNlc3Npb24gKG9ubHkgdGhlCisgICJ0bHMtdW5pcXVlIiBjaGFubmVsIGJpbmRpbmcgaXMgaW1wbGVtZW50ZWQpLiAgVGhpcyBhbGxvd3MgdGhlIGltcGxlbWVudGF0aW9uCisgIG9mIGNlcnRhaW4gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBzdWNoIGFzIFNDUkFNLVNIQS0xLVBMVVMuICBQYXRjaCBieQorICBKYWNlayBLb25pZWN6bnkuCisKKy0gSXNzdWUgIzY2NTE5NDogZW1haWwudXRpbHMgbm93IGhhcyBmb3JtYXRfZGF0ZXRpbWUgYW5kIHBhcnNlZGF0ZV90b19kYXRldGltZQorICBmdW5jdGlvbnMsIGFsbG93aW5nIGZvciByb3VuZCB0cmlwcGluZyBvZiBSRkMyODIyIGZvcm1hdCBkYXRlcy4KKworLSBJc3N1ZSAjMTI1NzE6IEFkZCBhIHBsYXQtbGludXgzIGRpcmVjdG9yeSBtaXJyb3JpbmcgdGhlIHBsYXQtbGludXgyCisgIGRpcmVjdG9yeSwgc28gdGhhdCAiaW1wb3J0IERMRkNOIiBhbmQgb3RoZXIgc2ltaWxhciBpbXBvcnRzIHdvcmsgb24KKyAgTGludXggMy4wLgorCistIElzc3VlICM3NDg0OiBzbXRwbGliIG5vIGxvbmdlciBwdXRzIDw+IGFyb3VuZCBhZGRyZXNzZXMgaW4gVlJGWSBhbmQgRVhQTgorICBjb21tYW5kczsgdGhleSBhcmVuJ3QgcmVxdWlyZWQgYW5kIGluIGZhY3QgcG9zdGZpeCBkb2Vzbid0IHN1cHBvcnQgdGhhdCBmb3JtLgorCistIElzc3VlICMxMjI3MzogUmVtb3ZlIGFzdC5fX3ZlcnNpb25fXy4gQVNUIGNoYW5nZXMgY2FuIGJlIGFjY291bnRlZCBmb3IgYnkKKyAgY2hlY2tpbmcgc3lzLnZlcnNpb25faW5mbyBvciBzeXMuX21lcmN1cmlhbC4KKworLSBTaWxlbmNlIHNwdXJpb3VzICJicm9rZW4gcGlwZSIgdHJhY2ViYWNrcyB3aGVuIHNodXR0aW5nIGRvd24gYQorICBQcm9jZXNzUG9vbEV4ZWN1dG9yLgorCistIEZpeCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IKKyAgYnkgam9pbmluZyBhbGwgcXVldWVzIGFuZCBwcm9jZXNzZXMgd2hlbiBzaHV0ZG93bigpIGlzIGNhbGxlZC4KKworLSBJc3N1ZSAjMTE2MDM6IEZpeCBhIGNyYXNoIHdoZW4gX19zdHJfXyBpcyByZWJvdW5kIGFzIF9fcmVwcl9fLiAgUGF0Y2ggYnkKKyAgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICMxMTMyMTogRml4IGEgY3Jhc2ggd2l0aCBtdWx0aXBsZSBpbXBvcnRzIG9mIHRoZSBfcGlja2xlIG1vZHVsZSB3aGVuCisgIGVtYmVkZGluZyBQeXRob24uICBQYXRjaCBieSBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzY3NTU6IEFkZCBnZXRfd2NoKCkgbWV0aG9kIHRvIGN1cnNlcy53aW5kb3cgY2xhc3MuIFBhdGNoIGJ5IEnDsWlnbworICBTZXJuYS4KKworLSBBZGQgY2dpLmNsb3NlbG9nKCkgZnVuY3Rpb24gdG8gY2xvc2UgdGhlIGxvZyBmaWxlLgorCistIElzc3VlICMxMjUwMjogYXN5bmNvcmU6IGZpeCBwb2xsaW5nIGxvb3Agd2l0aCBBRl9VTklYIHNvY2tldHMuCisKKy0gSXNzdWUgIzQzNzY6IGN0eXBlcyBub3cgc3VwcG9ydHMgbmVzdGVkIHN0cnVjdHVyZXMgaW4gYSBlbmRpYW4gZGlmZmVyZW50IHRoYW4KKyAgdGhlIHBhcmVudCBzdHJ1Y3R1cmUuIFBhdGNoIGJ5IFZsYWQgUmlzY3V0aWEuCisKKy0gUmFpc2UgVmFsdWVFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IHRoZSBfQ0hVTktfU0laRSBhdHRyaWJ1dGUgb2YgYQorICBUZXh0SU9XcmFwcGVyIHRvIGEgaHVnZSB2YWx1ZSwgbm90IFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTI1MDQ6IENsb3NlIGZpbGUgaGFuZGxlcyBpbiBhIHRpbWVseSBtYW5uZXIgaW4gcGFja2FnaW5nLmRhdGFiYXNlLgorICBUaGlzIGZpeGVzIGEgYnVnIHdpdGggdGhlIHJlbW92ZSAodW5pbnN0YWxsKSBmZWF0dXJlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWVzICMxMjE2OSBhbmQgIzEwNTEwOiBGYWN0b3Igb3V0IGNvZGUgdXNlZCBieSB2YXJpb3VzIHBhY2thZ2luZyBjb21tYW5kcworICB0byBtYWtlIEhUVFAgUE9TVCByZXF1ZXN0cywgYW5kIG1ha2Ugc3VyZSBpdCB1c2VzIENSTEYuCisKKy0gSXNzdWUgIzEyMDE2OiBNdWx0aWJ5dGUgQ0pLIGRlY29kZXJzIG5vdyByZXN5bmNocm9uaXplIGZhc3Rlci4gVGhleSBvbmx5CisgIGlnbm9yZSB0aGUgZmlyc3QgYnl0ZSBvZiBhbiBpbnZhbGlkIGJ5dGUgc2VxdWVuY2UuIEZvciBleGFtcGxlLAorICBiJ1x4ZmZcbicuZGVjb2RlKCdnYjIzMTInLCAncmVwbGFjZScpIGdpdmVzICdcdWZmZmRcbicgaW5zdGVhZCBvZiAnXHVmZmZkJy4KKworLSBJc3N1ZSAjMTI0NTk6IHRpbWUuc2xlZXAoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiB0aGUgc2xlZXAgbGVuZ3RoIGlzCisgIG5lZ2F0aXZlLCBpbnN0ZWFkIG9mIGFuIGluZmluaXRlIHNsZWVwIG9uIFdpbmRvd3Mgb3IgcmFpc2luZyBhbiBJT0Vycm9yIG9uCisgIExpbnV4IGZvciBleGFtcGxlLCB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW91ciBvbiBhbGwgcGxhdGZvcm1zLgorCistIElzc3VlICMxMjQ1MTogcHlkb2M6IGh0bWxfZ2V0ZmlsZSgpIG5vdyB1c2VzIHRva2VuaXplLm9wZW4oKSB0byBzdXBwb3J0CisgIFB5dGhvbiBzY3JpcHRzIHVzaW5nIGEgZW5jb2RpbmcgZGlmZmVyZW50IHRoYW4gVVRGLTggKHJlYWQgdGhlIGNvZGluZyBjb29raWUKKyAgb2YgdGhlIHNjcmlwdCkuCisKKy0gSXNzdWUgIzEyNDkzOiBzdWJwcm9jZXNzOiBQb3Blbi5jb21tdW5pY2F0ZSgpIG5vdyBhbHNvIGhhbmRsZXMgRUlOVFIgZXJyb3JzCisgIGlmIHRoZSBwcm9jZXNzIGhhcyBvbmx5IG9uZSBwaXBlLgorCistIElzc3VlICMxMjQ2Nzogd2FybmluZ3M6IGZpeCBhIHJhY2UgY29uZGl0aW9uIGlmIGEgd2FybmluZyBpcyBlbWl0dGVkIGF0CisgIHNodXRkb3duLCBpZiBnbG9iYWxzKClbJ19fZmlsZV9fJ10gaXMgTm9uZS4KKworLSBJc3N1ZSAjMTI0NTE6IHB5ZG9jOiBpbXBvcnRmaWxlKCkgbm93IG9wZW5zIHRoZSBQeXRob24gc2NyaXB0IGluIGJpbmFyeSBtb2RlLAorICBpbnN0ZWFkIG9mIHRleHQgbW9kZSB1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nLCB0byBhdm9pZCBlbmNvZGluZyBpc3N1ZXMuCisKKy0gSXNzdWUgIzEyNDUxOiBydW5weTogcnVuX3BhdGgoKSBub3cgb3BlbnMgdGhlIFB5dGhvbiBzY3JpcHQgaW4gYmluYXJ5IG1vZGUsCisgIGluc3RlYWQgb2YgdGV4dCBtb2RlIHVzaW5nIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvIHN1cHBvcnQgb3RoZXIgZW5jb2RpbmdzCisgIHRoYW4gVVRGLTggKHNjcmlwdHMgdXNpbmcgdGhlIGNvZGluZyBjb29raWUpLgorCistIElzc3VlICMxMjQ1MTogeG1sLmRvbS5wdWxsZG9tOiBwYXJzZSgpIG5vdyBvcGVucyBmaWxlcyBpbiBiaW5hcnkgbW9kZSBpbnN0ZWFkCisgIG9mIHRoZSB0ZXh0IG1vZGUgKHVzaW5nIHRoZSBsb2NhbGUgZW5jb2RpbmcpIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTIxNDc6IEFkanVzdCB0aGUgbmV3LWluLTMuMiBzbXRwbGliLnNlbmRfbWVzc2FnZSBtZXRob2QgZm9yIGJldHRlcgorICBjb25mb3JtYW5jZSB0byB0aGUgUkZDczogIGNvcnJlY3RseSBoYW5kbGUgU2VuZGVyIGFuZCBSZXNlbnQtIGhlYWRlcnMuCisKKy0gSXNzdWUgIzEyMzUyOiBGaXggYSBkZWFkbG9jayBpbiBtdWx0aXByb2Nlc3NpbmcuSGVhcCB3aGVuIGEgYmxvY2sgaXMgZnJlZWQgYnkKKyAgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHdoaWxlIHRoZSBIZWFwIGxvY2sgaXMgaGVsZC4KKworLSBJc3N1ZSAjMTI0NjI6IHRpbWUuc2xlZXAoKSBub3cgaW1tZWRpYXRlbHkgY2FsbHMgdGhlIChQeXRob24pIHNpZ25hbCBoYW5kbGVyCisgIGlmIGl0IGlzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLCBpbnN0ZWFkIG9mIGhhdmluZyB0byB3YWl0IHVudGlsIHRoZSBuZXh0CisgIGluc3RydWN0aW9uLgorCistIElzc3VlICMxMjQ0MjogbmV3IHNodXRpbC5kaXNrX3VzYWdlIGZ1bmN0aW9uLCBwcm92aWRpbmcgdG90YWwsIHVzZWQgYW5kIGZyZWUKKyAgZGlzayBzcGFjZSBzdGF0aXN0aWNzLgorCistIElzc3VlICMxMjQ1MTogVGhlIFhJbmNsdWRlIGRlZmF1bHQgbG9hZGVyIG9mIHhtbC5ldHJlZSBub3cgZGVjb2RlcyBmaWxlcyBmcm9tCisgIFVURi04IGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZyBpZiB0aGUgZW5jb2RpbmcgaXMgbm90IHNwZWNpZmllZC4gSXQgbm93CisgIGFsc28gb3BlbnMgWE1MIGZpbGVzIGZvciB0aGUgcGFyc2VyIGluIGJpbmFyeSBtb2RlIGluc3RlYWQgb2YgdGhlIHRleHQgbW9kZQorICB0byBhdm9pZCBlbmNvZGluZyBpc3N1ZXMuCisKKy0gSXNzdWUgIzEyNDUxOiBkb2N0ZXN0LmRlYnVnX3NjcmlwdCgpIGRvZXNuJ3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUKKyAgYW55bW9yZSB0byBhdm9pZCBlbmNvZGluZyBpc3N1ZXMuCisKKy0gSXNzdWUgIzEyNDUxOiBweWRvYy5zeW5vcHNpcygpIG5vdyByZWFkcyB0aGUgZW5jb2RpbmcgY29va2llIGlmIGF2YWlsYWJsZSwKKyAgdG8gcmVhZCB0aGUgUHl0aG9uIHNjcmlwdCBmcm9tIHRoZSByaWdodCBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTI0NTE6IGRpc3R1dGlscyBub3cgb3BlbnMgdGhlIHNldHVwIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSB0byByZWFkIHRoZQorICBlbmNvZGluZyBjb29raWUsIGluc3RlYWQgb2Ygb3BlbmluZyBpdCBpbiBVVEYtOC4KKworLSBJc3N1ZSAjOTUxNjogT24gTWFjIE9TIFgsIGNoYW5nZSBEaXN0dXRpbHMgdG8gbm8gbG9uZ2VyIGdsb2JhbGx5IGF0dGVtcHQgdG8KKyAgY2hlY2sgb3Igc2V0IHRoZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHRoZQorICBpbnRlcnByZXRlciBwcm9jZXNzLiAgVGhpcyBjb3VsZCBjYXVzZSBmYWlsdXJlcyBpbiBub24tRGlzdHV0aWxzIHN1YnByb2Nlc3NlcworICBhbmQgd2FzIHVucmVsaWFibGUgc2luY2UgdGVzdHMgb3IgdXNlciBwcm9ncmFtcyBjb3VsZCBtb2RpZnkgdGhlIGludGVycHJldGVyCisgIGVudmlyb25tZW50IGFmdGVyIERpc3R1dGlscyBzZXQgaXQuICBJbnN0ZWFkLCBoYXZlIERpc3R1dGlscyBzZXQgdGhlCisgIGRlcGxveW1lbnQgdGFyZ2V0IG9ubHkgaW4gdGhlIGVudmlyb25tZW50IG9mIGVhY2ggYnVpbGQgc3VicHJvY2Vzcy4gIEl0IGlzCisgIHN0aWxsIHBvc3NpYmxlIHRvIGdsb2JhbGx5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJ5IHNldHRpbmcKKyAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGJlZm9yZSBsYXVuY2hpbmcgdGhlIGludGVycHJldGVyOyBpdHMgdmFsdWUgbXVzdCBiZQorICBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBkZWZhdWx0IHZhbHVlLCB0aGUgdmFsdWUgd2l0aCB3aGljaCB0aGUgaW50ZXJwcmV0ZXIKKyAgd2FzIGJ1aWx0LiAgQWxzbywgaW1wbGVtZW50IHRoZSBzYW1lIGhhbmRsaW5nIGluIHBhY2thZ2luZy4KKworLSBJc3N1ZSAjMTI0MjI6IEluIHRoZSBjb3B5IG1vZHVsZSwgZG9uJ3Qgc3RvcmUgb2JqZWN0cyB0aGF0IGFyZSB0aGVpciBvd24gY29weQorICBpbiB0aGUgbWVtbyBkaWN0LgorCistIElzc3VlICMxMjMwMzogQWRkIHNpZ3dhaXRpbmZvKCkgYW5kIHNpZ3RpbWVkd2FpdCgpIHRvIHRoZSBzaWduYWwgbW9kdWxlLgorCistIElzc3VlICMxMjQwNDogUmVtb3ZlIEM4OSBpbmNvbXBhdGlibGUgY29kZSBmcm9tIG1tYXAgbW9kdWxlLiBQYXRjaCBieSBBa2lyYQorICBLaXRhZGEuCisKKy0gSXNzdWUgIzE4NzQ6IGVtYWlsIG5vdyBkZXRlY3RzIGFuZCByZXBvcnRzIGFzIGEgZGVmZWN0IHRoZSBwcmVzZW5jZSBvZgorICBhbnkgQ1RFIG90aGVyIHRoYW4gN2JpdCwgOGJpdCwgb3IgYmluYXJ5IG9uIGEgbXVsdGlwYXJ0LgorCistIElzc3VlICMxMjM4MzogRml4IHN1YnByb2Nlc3MgbW9kdWxlIHdpdGggZW52PXt9OiBkb24ndCBjb3B5IHRoZSBlbnZpcm9ubWVudAorICB2YXJpYWJsZXMsIHN0YXJ0IHdpdGggYW4gZW1wdHkgZW52aXJvbm1lbnQuCisKKy0gSXNzdWUgIzExNjM3OiBGaXggc3VwcG9ydCBmb3IgaW1wb3J0aW5nIHBhY2thZ2luZyBzZXR1cCBob29rcyBmcm9tIHRoZQorICBwcm9qZWN0IGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjNjc3MTogTW92ZWQgdGhlIGN1cnNlcy53cmFwcGVyIGZ1bmN0aW9uIGZyb20gdGhlIHNpbmdsZS1mdW5jdGlvbgorICB3cmFwcGVyIG1vZHVsZSBpbnRvIF9faW5pdF9fLCBlbGltaW5hdGluZyB0aGUgbW9kdWxlLiAgU2luY2UgX19pbml0X18gd2FzCisgIGFscmVhZHkgaW1wb3J0aW5nIHRoZSBmdW5jdGlvbiB0byBjdXJzZXMud3JhcHBlciwgdGhlcmUgaXMgbm8gQVBJIGNoYW5nZS4KKworLSBJc3N1ZSAjMTE1ODQ6IGVtYWlsLmhlYWRlci5kZWNvZGVfaGVhZGVyIG5vIGxvbmdlciBmYWlscyBpZiB0aGUgaGVhZGVyCisgIHBhc3NlZCB0byBpdCBpcyBhIEhlYWRlciBvYmplY3QsIGFuZCBIZWFkZXIvbWFrZV9oZWFkZXIgbm8gbG9uZ2VyIGZhaWwKKyAgaWYgZ2l2ZW4gYmluYXJ5IHVua25vd24tOGJpdCBpbnB1dC4KKworLSBJc3N1ZSAjMTE3MDA6IG1haWxib3ggcHJveHkgb2JqZWN0IGNsb3NlIG1ldGhvZHMgY2FuIG5vdyBiZSBjYWxsZWQgbXVsdGlwbGUKKyAgdGltZXMgd2l0aG91dCBlcnJvci4KKworLSBJc3N1ZSAjMTE3Njc6IENvcnJlY3QgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gbWFpbGJveCdzIF9fZ2V0aXRlbV9fIG1ldGhvZC4KKworLSBJc3N1ZSAjMTIxMzM6IEFic3RyYWN0SFRUUEhhbmRsZXIuZG9fb3BlbigpIG9mIHVybGxpYi5yZXF1ZXN0IGNsb3NlcyB0aGUgSFRUUAorICBjb25uZWN0aW9uIGlmIGl0cyBnZXRyZXNwb25zZSgpIG1ldGhvZCBmYWlscyB3aXRoIGEgc29ja2V0IGVycm9yLiBQYXRjaAorICB3cml0dGVuIGJ5IEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjMTIyNDA6IEFsbG93IG11bHRpcGxlIHNldHVwIGhvb2tzIGluIHBhY2thZ2luZydzIHNldHVwLmNmZyBmaWxlcy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRXJpayBCcmF5LgorCistIElzc3VlICM5Mjg0OiBBbGxvdyBpbnNwZWN0LmZpbmRzb3VyY2UoKSB0byBmaW5kIHRoZSBzb3VyY2Ugb2YgZG9jdGVzdAorICBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzExNTk1OiBGaXggYXNzb3J0ZWQgYnVncyBpbiBwYWNrYWdpbmcudXRpbC5jZmdfdG9fYXJncywgYQorICBjb21wYXRpYmlsaXR5IGhlbHBlciBmb3IgdGhlIGRpc3R1dGlscy1wYWNrYWdpbmcgdHJhbnNpdGlvbi4gIE9yaWdpbmFsIHBhdGNoCisgIGJ5IEVyaWsgQnJheS4KKworLSBJc3N1ZSAjMTIyODc6IEluIG9zc2F1ZGlvZGV2LCBjaGVjayB0aGF0IHRoZSBkZXZpY2UgaXNuJ3QgY2xvc2VkIGluIHNldmVyYWwKKyAgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTIwMDk6IEZpeGVkIHJlZ3Jlc3Npb24gaW4gbmV0cmMgZmlsZSBjb21tZW50IGhhbmRsaW5nLgorCistIElzc3VlICMxMjI0NjogV2FybiBhbmQgZmFpbCB3aGVuIHRyeWluZyB0byBpbnN0YWxsIGEgdGhpcmQtcGFydHkgcHJvamVjdCBmcm9tCisgIGFuIHVuaW5zdGFsbGVkIFB5dGhvbiAoYnVpbHQgaW4gYSBzb3VyY2UgY2hlY2tvdXQpLiAgT3JpZ2luYWwgcGF0Y2ggYnkKKyAgVHNoZXBhbmcgTGVraG9ua2hvYmUuCisKKy0gSXNzdWUgIzEwNjk0OiB6aXBmaWxlIG5vdyBpZ25vcmVzIGdhcmJhZ2UgYXQgdGhlIGVuZCBvZiBhIHppcGZpbGUuCisKKy0gSXNzdWUgIzEyMjgzOiBGaXhlZCByZWdyZXNzaW9uIGluIHNtdHBsaWIgcXVvdGluZyBvZiBsZWFkaW5nIGRvdHMgaW4gREFUQS4KKworLSBJc3N1ZSAjMTA0MjQ6IEFyZ3BhcnNlIG5vdyBpbmNsdWRlcyB0aGUgbmFtZXMgb2YgdGhlIG1pc3NpbmcgcmVxdWlyZWQKKyAgYXJndW1lbnRzIGluIHRoZSBtaXNzaW5nIGFyZ3VtZW50cyBlcnJvciBtZXNzYWdlLgorCistIElzc3VlICMxMjE2ODogU3lzTG9nSGFuZGxlciBub3cgYWxsb3dzIE5VTCB0ZXJtaW5hdGlvbiB0byBiZSBjb250cm9sbGVkIHVzaW5nCisgIGEgbmV3ICdhcHBlbmRfbnVsJyBhdHRyaWJ1dGUgb24gdGhlIGhhbmRsZXIuCisKKy0gSXNzdWUgIzExNTgzOiBTcGVlZCB1cCBvcy5wYXRoLmlzZGlyIG9uIFdpbmRvd3MgYnkgdXNpbmcgR2V0RmlsZUF0dHJpYnV0ZXMKKyAgaW5zdGVhZCBvZiBvcy5zdGF0LgorCistIElzc3VlICMxMjAyMTogTWFrZSBtbWFwJ3MgcmVhZCgpIG1ldGhvZCBhcmd1bWVudCBvcHRpb25hbC4gUGF0Y2ggYnkgUGV0cmkKKyAgTGVodGluZW4uCisKKy0gSXNzdWUgIzkyMDU6IGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yIG5vdyBkZXRlY3RzIGtpbGxlZAorICBjaGlsZHJlbiBhbmQgcmFpc2VzIEJyb2tlblByb2Nlc3NQb29sIGluIHN1Y2ggYSBzaXR1YXRpb24uICBQcmV2aW91c2x5IGl0CisgIHdvdWxkIHJlbGlhYmx5IGZyZWV6ZS9kZWFkbG9jay4KKworLSBJc3N1ZSAjMTIwNDA6IEV4cG9zZSBhIG5ldyBhdHRyaWJ1dGUgYGBzZW50aW5lbGBgIG9uIGluc3RhbmNlcyBvZgorICBgYG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzYGAuICBBbHNvLCBmaXggUHJvY2Vzcy5qb2luKCkgdG8gbm90IHVzZSBwb2xsaW5nCisgIGFueW1vcmUsIHdoZW4gZ2l2ZW4gYSB0aW1lb3V0LgorCistIElzc3VlICMxMTg5MzogUmVtb3ZlIG9ic29sZXRlIGludGVybmFsIHdyYXBwZXIgY2xhc3MgYGBTU0xGYWtlRmlsZWBgIGluIHRoZQorICBzbXRwbGliIG1vZHVsZS4gIFBhdGNoIGJ5IENhdGFsaW4gSWFjb2IuCisKKy0gSXNzdWUgIzEyMDgwOiBGaXggYSBEZWNpbWFsLnBvd2VyKCkgY2FzZSB0aGF0IHRvb2sgYW4gdW5yZWFzb25hYmx5IGxvbmcgdGltZQorICB0byBjb21wdXRlLgorCistIElzc3VlICMxMjIyMTogUmVtb3ZlIF9fdmVyc2lvbl9fIGF0dHJpYnV0ZXMgZnJvbSBweWV4cGF0LCBwaWNrbGUsIHRhcmZpbGUsCisgIHB5ZG9jLCB0a2ludGVyLCBhbmQgeG1sLnBhcnNlcnMuZXhwYXQuIFRoaXMgd2VyZSB1c2VsZXNzIHZlcnNpb24gY29uc3RhbnRzCisgIGxlZnQgb3ZlciBmcm9tIHRoZSBNZXJjdXJpYWwgdHJhbnNpdGlvbgorCistIE5hbWVkIHR1cGxlcyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCB2YXJzKCkuCisKKy0gSXNzdWUgIzEyMDg1OiBGaXggYW4gYXR0cmlidXRlIGVycm9yIGluIHN1YnByb2Nlc3MuUG9wZW4gZGVzdHJ1Y3RvciBpZiB0aGUKKyAgY29uc3RydWN0b3IgaGFzIGZhaWxlZCwgZS5nLiBiZWNhdXNlIG9mIGFuIHVuZGVjbGFyZWQga2V5d29yZCBhcmd1bWVudC4gUGF0Y2gKKyAgd3JpdHRlbiBieSBPbGVnIE9zaG15YW4uCisKKy0gSXNzdWUgIzEyMDI4OiBNYWtlIHRocmVhZGluZy5fZ2V0X2lkZW50KCkgcHVibGljLCByZW5hbWUgaXQgdG8KKyAgdGhyZWFkaW5nLmdldF9pZGVudCgpIGFuZCBkb2N1bWVudCBpdC4gVGhpcyBmdW5jdGlvbiB3YXMgYWxyZWFkeSB1c2VkIHVzaW5nCisgIF90aHJlYWQuZ2V0X2lkZW50KCkuCisKKy0gSXNzdWUgIzEyMTcxOiBJbmNyZW1lbnRhbEVuY29kZXIucmVzZXQoKSBvZiBDSksgY29kZWNzIChtdWx0aWJ5dGVjb2RlYykgY2FsbHMKKyAgZW5jcmVzZXQoKSBpbnN0ZWFkIG9mIGRlY3Jlc2V0KCkuCisKKy0gSXNzdWUgIzEyMjE4OiBSZW1vdmVkIHdzZ2lyZWYuZWdnLWluZm8uCisKKy0gSXNzdWUgIzEyMTk2OiBBZGQgcGlwZTIoKSB0byB0aGUgb3MgbW9kdWxlLgorCistIElzc3VlICM5ODUwNjQ6IE1ha2UgcGxpc3RsaWIgbW9yZSByZXNpbGllbnQgdG8gZmF1bHR5IGlucHV0IHBsaXN0cy4KKyAgUGF0Y2ggYnkgTWhlciBNb3ZzaXN5YW4uCisKKy0gSXNzdWUgIzE2MjU6IEJaMkZpbGUgYW5kIGJ6Mi5kZWNvbXByZXNzKCkgbm93IHN1cHBvcnQgbXVsdGktc3RyZWFtIGZpbGVzLgorICBJbml0aWFsIHBhdGNoIGJ5IE5pciBBaWRlcy4KKworLSBJc3N1ZSAjMTIxNzU6IEJ1ZmZlcmVkUmVhZGVyLnJlYWQoLTEpIG5vdyBjYWxscyByYXcucmVhZGFsbCgpIGlmIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTIxNzU6IEZpbGVJTy5yZWFkYWxsKCkgbm93IG9ubHkgcmVhZHMgdGhlIGZpbGUgcG9zaXRpb24gYW5kIHNpemUKKyAgb25jZS4KKworLSBJc3N1ZSAjMTIxNzU6IFJhd0lPQmFzZS5yZWFkYWxsKCkgbm93IHJldHVybnMgTm9uZSBpZiByZWFkKCkgcmV0dXJucyBOb25lLgorCistIElzc3VlICMxMjE3NTogRmlsZUlPLnJlYWRhbGwoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpbnN0ZWFkIG9mIGFuIElPRXJyb3IKKyAgaWYgdGhlIGZpbGUgaXMgY2xvc2VkLgorCistIElzc3VlICMxMTEwOTogTmV3IHNlcnZpY2VfYWN0aW9uIG1ldGhvZCBmb3IgQmFzZVNlcnZlciwgdXNlZCBieSBGb3JraW5nTWl4SW4KKyAgY2xhc3MgZm9yIGNsZWFudXAuIEluaXRpYWwgUGF0Y2ggYnkgSnVzdGluIFdhcmtlbnRpbi4KKworLSBJc3N1ZSAjMTIwNDU6IEF2b2lkIGR1cGxpY2F0ZSBleGVjdXRpb24gb2YgY29tbWFuZCBpbgorICBjdHlwZXMudXRpbC5fZ2V0X3NvbmFtZSgpLiAgUGF0Y2ggYnkgU2lqaW4gSm9zZXBoLgorCistIElzc3VlICMxMDgxODogUmVtb3ZlIHRoZSBUayBHVUkgYW5kIHRoZSBzZXJ2ZSgpIGZ1bmN0aW9uIG9mIHRoZSBweWRvYyBtb2R1bGUsCisgIHB5ZG9jIC1nIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMiBhbmQgaXQgaGFzIGEgbmV3IGVuaGFuY2VkIHdlYgorICBzZXJ2ZXIuCisKKy0gSXNzdWUgIzE0NDE1MzA6IEluIGltYXBsaWIsIHJlYWQgdGhlIGRhdGEgaW4gb25lIGNodW5rIHRvIHNwZWVkIHVwIGxhcmdlCisgIHJlYWRzIGFuZCBzaW1wbGlmeSBjb2RlLgorCistIElzc3VlICMxMjA3MDogRml4IHRoZSBNYWtlZmlsZSBwYXJzZXIgb2YgdGhlIHN5c2NvbmZpZyBtb2R1bGUgdG8gaGFuZGxlCisgIGNvcnJlY3RseSByZWZlcmVuY2VzIHRvICJib2d1cyB2YXJpYWJsZSIgKGUuZy4gInByZWZpeD0kL29wdC9weXRob24iKS4KKworLSBJc3N1ZSAjMTIxMDA6IERvbid0IHJlc2V0IGluY3JlbWVudGFsIGVuY29kZXJzIG9mIENKSyBjb2RlY3MgYXQgZWFjaCBjYWxsIHRvCisgIHRoZWlyIGVuY29kZSgpIG1ldGhvZCBhbnltb3JlLCBidXQgY29udGludWUgdG8gY2FsbCB0aGUgcmVzZXQoKSBtZXRob2QgaWYgdGhlCisgIGZpbmFsIGFyZ3VtZW50IGlzIFRydWUuCisKKy0gSXNzdWUgIzEyMDQ5OiBBZGQgUkFORF9ieXRlcygpIGFuZCBSQU5EX3BzZXVkb19ieXRlcygpIGZ1bmN0aW9ucyB0byB0aGUgc3NsCisgIG1vZHVsZS4KKworLSBJc3N1ZSAjNjUwMTogb3MuZGV2aWNlX2VuY29kaW5nKCkgcmV0dXJucyBOb25lIG9uIFdpbmRvd3MgaWYgdGhlIGFwcGxpY2F0aW9uCisgIGhhcyBubyBjb25zb2xlLgorCistIElzc3VlICMxMjEwNTogQWRkIE9fQ0xPRVhFQyB0byB0aGUgb3MgbW9kdWxlLgorCistIElzc3VlICMxMjA3OTogRGVjaW1hbCgnSW5maW5pdHknKS5mbWEoRGVjaW1hbCgnMCcpLCAoMy45MTIyNDMxODEyNjc4NmUrMTkrMGopKQorICBub3cgcmFpc2VzIFR5cGVFcnJvciAocmVmbGVjdGluZyB0aGUgaW52YWxpZCB0eXBlIG9mIHRoZSAzcmQgYXJndW1lbnQpIHJhdGhlcgorICB0aGFuIERlY2ltYWwuSW52YWxpZE9wZXJhdGlvbi4KKworLSBJc3N1ZSAjMTIxMjQ6IHppcGltcG9ydCBkb2Vzbid0IGtlZXAgYSByZWZlcmVuY2UgdG8gemxpYi5kZWNvbXByZXNzKCkgYW55bW9yZQorICB0byBiZSBhYmxlIHRvIHVubG9hZCB0aGUgbW9kdWxlLgorCistIEFkZCB0aGUgcGFja2FnaW5nIG1vZHVsZSwgYW4gaW1wcm92ZWQgZm9yayBvZiBkaXN0dXRpbHMgKGFsc28ga25vd24gYXMKKyAgZGlzdHV0aWxzMikuCisKKy0gSXNzdWUgIzEyMDY1OiBjb25uZWN0X2V4KCkgb24gYW4gU1NMIHNvY2tldCBub3cgcmV0dXJucyB0aGUgb3JpZ2luYWwgZXJybm8KKyAgd2hlbiB0aGUgc29ja2V0J3MgdGltZW91dCBleHBpcmVzIChpdCB1c2VkIHRvIHJldHVybiBOb25lKS4KKworLSBJc3N1ZSAjODgwOTogVGhlIFNNVFBfU1NMIGNvbnN0cnVjdG9yIGFuZCBTTVRQLnN0YXJ0dGxzKCkgbm93IHN1cHBvcnQKKyAgcGFzc2luZyBhIGBgY29udGV4dGBgIGFyZ3VtZW50IHBvaW50aW5nIHRvIGFuIHNzbC5TU0xDb250ZXh0IGluc3RhbmNlLgorICBQYXRjaCBieSBLYXN1biBIZXJhdGguCisKKy0gSXNzdWUgIzExMDg4OiBkb24ndCBjcmFzaCB3aGVuIHVzaW5nIEY1IHRvIHJ1biBhIHNjcmlwdCBpbiBJRExFIG9uIE1hY09TWAorICB3aXRoIFRrIDguNS4KKworLSBJc3N1ZSAjOTUxNjogSXNzdWUgIzk1MTY6IGF2b2lkIGVycm9ycyBpbiBzeXNjb25maWcgd2hlbiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKKyAgaXMgc2V0IGluIHNoZWxsLgorCistIElzc3VlICM4NjUwOiBNYWtlIHpsaWIgbW9kdWxlIDY0LWJpdCBjbGVhbi4gY29tcHJlc3MoKSwgZGVjb21wcmVzcygpIGFuZAorICB0aGVpciBpbmNyZW1lbnRhbCBjb3VudGVycGFydHMgbm93IHJhaXNlIE92ZXJmbG93RXJyb3IgaWYgZ2l2ZW4gYW4gaW5wdXQKKyAgbGFyZ2VyIHRoYW4gNEdCLCBpbnN0ZWFkIG9mIHNpbGVudGx5IHRydW5jYXRpbmcgdGhlIGlucHV0IGFuZCByZXR1cm5pbmcKKyAgYW4gaW5jb3JyZWN0IHJlc3VsdC4KKworLSBJc3N1ZSAjMTIwNTA6IHpsaWIuZGVjb21wcmVzc29iaigpLmRlY29tcHJlc3MoKSBub3cgY2xlYXJzIHRoZSB1bmNvbnN1bWVkX3RhaWwKKyAgYXR0cmlidXRlIHdoZW4gY2FsbGVkIHdpdGhvdXQgYSBtYXhfbGVuZ3RoIGFyZ3VtZW50LgorCistIElzc3VlICMxMjA2MjogRml4IGEgZmx1c2hpbmcgYnVnIHdoZW4gZG9pbmcgYSBjZXJ0YWluIHR5cGUgb2YgSS9PIHNlcXVlbmNlCisgIG9uIGEgZmlsZSBvcGVuZWQgaW4gcmVhZCt3cml0ZSBtb2RlIChuYW1lbHk6IHJlYWRpbmcsIHNlZWtpbmcgYSBiaXQgZm9yd2FyZCwKKyAgd3JpdGluZywgdGhlbiBzZWVraW5nIGJlZm9yZSB0aGUgcHJldmlvdXMgd3JpdGUgYnV0IHN0aWxsIHdpdGhpbiBidWZmZXJlZAorICBkYXRhLCBhbmQgd3JpdGluZyBhZ2FpbikuCisKKy0gSXNzdWUgIzk5NzE6IFdyaXRlIGFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJlZFJlYWRlci5yZWFkaW50bygpLgorICBQYXRjaCBieSBKb2huIE8nQ29ubm9yLgorCistIElzc3VlICMxMDI4OiBUayByZXR1cm5zIGludmFsaWQgVW5pY29kZSBudWxsIGluICVBOiBVbmljb2RlRGVjb2RlRXJyb3IuCisgIFdpdGggVGsgPCA4LjUgX3RraW50ZXIuYzpQeXRob25DbWQoKSByYWlzZWQgVW5pY29kZURlY29kZUVycm9yLCBjYXVzZWQKKyAgSURMRSB0byBleGl0LiAgQ29udmVydGVkIHRvIHZhbGlkIFVuaWNvZGUgbnVsbCBpbiBQeXRob25DbWQoKS4KKworLSBJc3N1ZSAjMTE3OTk6IHVybGxpYi5yZXF1ZXN0IEF1dGhlbnRpY2F0aW9uIEhhbmRsZXJzIHdpbGwgcmFpc2UgYSBWYWx1ZUVycm9yCisgIHdoZW4gcHJlc2VudGVkIHdpdGggYW4gdW5zdXBwb3J0ZWQgQXV0aGVudGljYXRpb24gU2NoZW1lLiBQYXRjaCBjb250cmlidXRlZAorICBieSBZdXZhbCBHcmVlbmZpZWxkLgorCistIElzc3VlICMxMDQxOSwgIzYwMTE6IGJ1aWxkX3NjcmlwdHMgY29tbWFuZCBvZiBkaXN0dXRpbHMgaGFuZGxlcyBjb3JyZWN0bHkKKyAgbm9uLUFTQ0lJIHBhdGggKHBhdGggdG8gdGhlIFB5dGhvbiBleGVjdXRhYmxlKS4gT3BlbiBhbmQgd3JpdGUgdGhlIHNjcmlwdCBpbgorICBiaW5hcnkgbW9kZSwgYnV0IGVuc3VyZSB0aGF0IHRoZSBzaGViYW5nIGlzIGRlY29kYWJsZSBmcm9tIFVURi04IGFuZCBmcm9tIHRoZQorICBlbmNvZGluZyBvZiB0aGUgc2NyaXB0LgorCistIElzc3VlICM4NDk4OiBJbiBzb2NrZXQuYWNjZXB0KCksIGFsbG93IHRvIHNwZWNpZnkgMCBhcyBhIGJhY2tsb2cgdmFsdWUgaW4KKyAgb3JkZXIgdG8gYWNjZXB0IGV4YWN0bHkgb25lIGNvbm5lY3Rpb24uICBQYXRjaCBieSBEYW5pZWwgRXZlcnMuCisKKy0gSXNzdWUgIzEyMDExOiBzaWduYWwuc2lnbmFsKCkgYW5kIHNpZ25hbC5zaWdpbnRlcnJ1cHQoKSByYWlzZSBhbiBPU0Vycm9yLAorICBpbnN0ZWFkIG9mIGEgUnVudGltZUVycm9yOiBPU0Vycm9yIGhhcyBhbiBlcnJubyBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzM3MDk6IGFkZCBhIGZsdXNoX2hlYWRlcnMgbWV0aG9kIHRvIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsIHdoaWNoCisgIG1hbmFnZXMgdGhlIHNlbmRpbmcgb2YgaGVhZGVycyB0byBvdXRwdXQgc3RyZWFtIGFuZCBmbHVzaGluZyB0aGUgaW50ZXJuYWwKKyAgaGVhZGVycyBidWZmZXIuIFBhdGNoIGNvbnRyaWJ1dGlvbiBieSBBbmRyZXcgU2NoYWFmCisKKy0gSXNzdWUgIzExNzQzOiBSZXdyaXRlIG11bHRpcHJvY2Vzc2luZyBjb25uZWN0aW9uIGNsYXNzZXMgaW4gcHVyZSBQeXRob24uCisKKy0gSXNzdWUgIzExMTY0OiBTdG9wIHRyeWluZyB0byB1c2UgX3htbHBsdXMgaW4gdGhlIHhtbCBtb2R1bGUuCisKKy0gSXNzdWUgIzExODg4OiBBZGQgbG9nMiBmdW5jdGlvbiB0byBtYXRoIG1vZHVsZS4gUGF0Y2ggd3JpdHRlbiBieSBNYXJrCisgIERpY2tpbnNvbi4KKworLSBJc3N1ZSAjMTIwMTI6IHNzbC5QUk9UT0NPTF9TU0x2MiBiZWNvbWVzIG9wdGlvbmFsLgorCistIElzc3VlICM4NDA3OiBUaGUgc2lnbmFsIGhhbmRsZXIgd3JpdGVzIHRoZSBzaWduYWwgbnVtYmVyIGFzIGEgc2luZ2xlIGJ5dGUKKyAgaW5zdGVhZCBvZiBhIG51bCBieXRlIGludG8gdGhlIHdha2V1cCBmaWxlIGRlc2NyaXB0b3IuIFNvIGl0IGlzIHBvc3NpYmxlIHRvCisgIHdhaXQgbW9yZSB0aGFuIG9uZSBzaWduYWwgYW5kIGtub3cgd2hpY2ggc2lnbmFscyB3ZXJlIHJhaXNlZC4KKworLSBJc3N1ZSAjODQwNzogQWRkIHB0aHJlYWRfa2lsbCgpLCBzaWdwZW5kaW5nKCkgYW5kIHNpZ3dhaXQoKSBmdW5jdGlvbnMgdG8gdGhlCisgIHNpZ25hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzExOTI3OiBTTVRQX1NTTCBub3cgdXNlcyBwb3J0IDQ2NSBieSBkZWZhdWx0IGFzIGRvY3VtZW50ZWQuICBQYXRjaAorICBieSBLYXN1biBIZXJhdGguCisKKy0gSXNzdWUgIzEyMDAyOiBmdHBsaWIncyBhYm9ydCgpIG1ldGhvZCByYWlzZXMgVHlwZUVycm9yLgorCistIElzc3VlICMxMTkxNjogQWRkIGEgbnVtYmVyIG9mIE1hY09TWCBzcGVjaWZpYyBkZWZpbml0aW9ucyB0byB0aGUgZXJybm8gbW9kdWxlLgorICBQYXRjaCBieSBQaWVycmUgQ2Fycmllci4KKworLSBJc3N1ZSAjMTE5OTk6IGZpeGVkIHNwb3JhZGljIHN5bmMgZmFpbHVyZSBtYWlsYm94Lk1haWxkaXIgZHVlIHRvIGl0cyB0cnlpbmcgdG8KKyAgZGV0ZWN0IG10aW1lIGNoYW5nZXMgYnkgY29tcGFyaW5nIHRvIHRoZSBzeXN0ZW0gY2xvY2sgaW5zdGVhZCBvZiB0byB0aGUKKyAgcHJldmlvdXMgdmFsdWUgb2YgdGhlIG10aW1lLgorCistIElzc3VlICMxMTA3MjogYWRkZWQgTUxTRCBjb21tYW5kIChSRkMtMzY1OSkgc3VwcG9ydCB0byBmdHBsaWIuCisKKy0gSXNzdWUgIzg4MDg6IFRoZSBJTUFQNF9TU0wgY29uc3RydWN0b3Igbm93IGFsbG93cyBwYXNzaW5nIGFuIFNTTENvbnRleHQKKyAgcGFyYW1ldGVyIHRvIGNvbnRyb2wgcGFyYW1ldGVycyBvZiB0aGUgc2VjdXJlIGNoYW5uZWwuICBQYXRjaCBieSBTaWppbgorICBKb3NlcGguCisKKy0gbnRwYXRoLnNhbWVmaWxlIGZhaWxlZCB0byBub3RpY2UgdGhhdCAiYS50eHQiIGFuZCAiQS5UWFQiIHJlZmVyIHRvIHRoZSBzYW1lCisgIGZpbGUgb24gV2luZG93cyBYUC4gQXMgbm90aWNlZCBpbiBpc3N1ZSAjMTA2ODQuCisKKy0gSXNzdWUgIzEyMDAwOiBXaGVuIGEgU1NMIGNlcnRpZmljYXRlIGhhcyBhIHN1YmplY3RBbHROYW1lIHdpdGhvdXQgYW55CisgIGROU05hbWUgZW50cnksIHNzbC5tYXRjaF9ob3N0bmFtZSgpIHNob3VsZCB1c2UgdGhlIHN1YmplY3QncyBjb21tb25OYW1lLgorICBQYXRjaCBieSBOaWNvbGFzIEJhcmVpbC4KKworLSBJc3N1ZSAjMTA3NzU6IGFzc2VydFJhaXNlcywgYXNzZXJ0UmFpc2VzUmVnZXgsIGFzc2VydFdhcm5zLCBhbmQKKyAgYXNzZXJ0V2FybnNSZWdleCBub3cgYWNjZXB0IGEga2V5d29yZCBhcmd1bWVudCAnbXNnJyB3aGVuIHVzZWQgYXMgY29udGV4dAorICBtYW5hZ2Vycy4gIEluaXRpYWwgcGF0Y2ggYnkgV2luc3RvbiBFd2VydC4KKworLSBJc3N1ZSAjMTA2ODQ6IHNodXRpbC5tb3ZlIHVzZWQgdG8gZGVsZXRlIGEgZm9sZGVyIG9uIGNhc2UgaW5zZW5zaXRpdmUKKyAgZmlsZXN5c3RlbXMgd2hlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBuYW1lIHdoZXJlIHRoZSBzYW1lIGV4Y2VwdAorICBmb3IgdGhlIGNhc2UuCisKKy0gSXNzdWUgIzExNjQ3OiBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgY29udGV4dGxpYi5jb250ZXh0bWFuYWdlciBub3cgc3VwcG9ydAorICBtb3JlIHRoYW4gb25lIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHdoZW4gdXNlZCBhcyBhIGRlY29yYXRvci4gSW5pdGlhbCBwYXRjaAorICBieSBZc2ogUmF5LgorCistIElzc3VlICMxMTkzMDogUmVtb3ZlZCBkZXByZWNhdGVkIHRpbWUuYWNjZXB0MmR5ZWFyIHZhcmlhYmxlLgorICBSZW1vdmVkIHllYXIgPj0gMTAwMCByZXN0cmljdGlvbiBmcm9tIGRhdGV0aW1lLnN0cmZ0aW1lLgorCistIGxvZ2dpbmc6IGRvbid0IGRlZmluZSBRdWV1ZUxpc3RlbmVyIGlmIFB5dGhvbiBoYXMgbm8gdGhyZWFkIHN1cHBvcnQuCisKKy0gZnVuY3Rvb2xzLmNtcF90b19rZXkoKSBub3cgd29ya3Mgd2l0aCBjb2xsZWN0aW9ucy5IYXNoYWJsZSgpLgorCistIElzc3VlICMxMTI3NzogbW1hcC5tbWFwKCkgY2FsbHMgZmNudGwoZmQsIEZfRlVMTEZTWU5DKSBvbiBNYWMgT1MgWCB0byBnZXQKKyAgYXJvdW5kIGEgbW1hcCBidWcgd2l0aCBzcGFyc2UgZmlsZXMuIFBhdGNoIHdyaXR0ZW4gYnkgU3RlZmZlbiBEYW9kZSBOdXJwbWVzby4KKworLSBJc3N1ZSAjODQwNzogQWRkIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soKSBmdW5jdGlvbiB0byBmZXRjaCBhbmQvb3IgY2hhbmdlIHRoZQorICBzaWduYWwgbWFzayBvZiB0aGUgY2FsbGluZyB0aHJlYWQuCisKKy0gSXNzdWUgIzExODU4OiBjb25maWdwYXJzZXIuRXh0ZW5kZWRJbnRlcnBvbGF0aW9uIGV4cGVjdGVkIGxvd2VyLWNhc2Ugc2VjdGlvbgorICBuYW1lcy4KKworLSBJc3N1ZSAjMTEzMjQ6IENvbmZpZ1BhcnNlcihpbnRlcnBvbGF0aW9uPU5vbmUpIG5vdyB3b3JrcyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzExODExOiBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgpIGlzIG5vdyBJUHY2LWNvbXBhdGlibGUuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExNzYzOiBkb24ndCB1c2UgZGlmZmxpYiBpbiBUZXN0Q2FzZS5hc3NlcnRNdWx0aUxpbmVFcXVhbCBpZiB0aGUKKyAgc3RyaW5ncyBhcmUgdG9vIGxvbmcuCisKKy0gSXNzdWUgIzExMjM2OiBnZXRwYXNzLmdldHBhc3MgcmVzcG9uZHMgdG8gY3RybC1jIG9yIGN0cmwteiBvbiB0ZXJtaW5hbC4KKworLSBJc3N1ZSAjMTE4NTY6IFNwZWVkIHVwIHBhcnNpbmcgb2YgSlNPTiBudW1iZXJzLgorCistIElzc3VlICMxMTAwNTogdGhyZWFkaW5nLlJMb2NrKCkuX3JlbGVhc2Vfc2F2ZSgpIHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiB0aGUKKyAgbG9jayB3YXMgbm90IGFjcXVpcmVkLgorCistIElzc3VlICMxMTI1ODogU3BlZWQgdXAgY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KCkgdW5kZXIgTGludXggYnkgYSBmYWN0b3IKKyAgb2YgNSB0byAxMC4gIEluaXRpYWwgcGF0Y2ggYnkgSm9uYXMgSC4KKworLSBJc3N1ZSAjMTEzODI6IFRyaXZpYWwgc3lzdGVtIGNhbGxzLCBzdWNoIGFzIGR1cCgpIG9yIHBpcGUoKSwgbmVlZG4ndAorICByZWxlYXNlIHRoZSBHSUwuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExMjIzOiBBZGQgdGhyZWFkaW5nLl9pbmZvKCkgZnVuY3Rpb24gcHJvdmlkaW5nIGluZm9ybWF0aW9ucyBhYm91dAorICB0aGUgdGhyZWFkIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxMTczMTogc2ltcGxpZnkvZW5oYW5jZSBlbWFpbCBwYXJzZXIvZ2VuZXJhdG9yIEFQSSBieSBpbnRyb2R1Y2luZworICBwb2xpY3kgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTE3Njg6IFRoZSBzaWduYWwgaGFuZGxlciBvZiB0aGUgc2lnbmFsIG1vZHVsZSBvbmx5IGNhbGxzCisgIFB5X0FkZFBlbmRpbmdDYWxsKCkgZm9yIHRoZSBmaXJzdCBzaWduYWwgdG8gZml4IGEgZGVhZGxvY2sgb24gcmVlbnRyYW50IG9yCisgIHBhcmFsbGVsIGNhbGxzLiBQeUVycl9TZXRJbnRlcnJ1cHQoKSB3cml0ZXMgYWxzbyBpbnRvIHRoZSB3YWtlIHVwIGZpbGUuCisKKy0gSXNzdWUgIzExNDkyOiBmaXggc2V2ZXJhbCBpc3N1ZXMgd2l0aCBoZWFkZXIgZm9sZGluZyBpbiB0aGUgZW1haWwgcGFja2FnZS4KKworLSBJc3N1ZSAjMTE4NTI6IEFkZCBtaXNzaW5nIGltcG9ydHMgYW5kIHVwZGF0ZSB0ZXN0cy4KKworLSBJc3N1ZSAjMTE4NzU6IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0J3MgX19yZWR1Y2VfXyB3YXMgdGVtcG9yYXJpbHkKKyAgbXV0YXRpbmcgdGhlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3Qgd29ya2luZyBvbiBhIGNvcHkuCisKKy0gSXNzdWUgIzExNDY3OiBGaXggdXJscGFyc2UgYmVoYXZpb3Igd2hlbiBoYW5kbGluZyB1cmxzIHdoaWNoIGNvbnRhaW5zIHNjaGVtZQorICBzcGVjaWZpYyBwYXJ0IG9ubHkgZGlnaXRzLiBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKworLSBjb2xsZWN0aW9ucy5Db3VudGVyKCkuY29weSgpIG5vdyB3b3JrcyBjb3JyZWN0bHkgZm9yIHN1YmNsYXNzZXMuCisKKy0gSXNzdWUgIzExNDc0OiBGaXggdGhlIGJ1ZyB3aXRoIHVybDJwYXRobmFtZSgpIGhhbmRsaW5nIG9mICcvQ3wvJyBvbiBXaW5kb3dzLgorICBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKworLSBJc3N1ZSAjMTE2ODQ6IGNvbXBsZXRlIGVtYWlsLnBhcnNlciBieXRlcyBBUEkgYnkgYWRkaW5nIEJ5dGVzSGVhZGVyUGFyc2VyLgorCistIFRoZSBiejIgbW9kdWxlIG5vdyBoYW5kbGVzIDRHaUIrIGlucHV0IGJ1ZmZlcnMgY29ycmVjdGx5LgorCistIElzc3VlICM5MjMzOiBGaXgganNvbi5sb2Fkcygne30nKSB0byByZXR1cm4gYSBkaWN0IChpbnN0ZWFkIG9mIGEgbGlzdCksIHdoZW4KKyAgX2pzb24gaXMgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTE4MzA6IFJlbW92ZSB1bm5lY2Vzc2FyeSBpbnRyb3NwZWN0aW9uIGNvZGUgaW4gdGhlIGRlY2ltYWwgbW9kdWxlLgorCistIElzc3VlICMxMTcwMzogdXJsbGliMi5nZXR1cmwoKSBkb2VzIG5vdCByZXR1cm4gY29ycmVjdCB1cmwgd2hlbiB0aGUgb3JpZ2luYWwKKyAgdXJsIGNvbnRhaW5zICNmcmFnbWVudC4KKworLSBJc3N1ZSAjMTAwMTk6IEZpeGVkIHJlZ3Jlc3Npb24gaW4ganNvbiBtb2R1bGUgd2hlcmUgYW4gaW5kZW50IG9mIDAgc3RvcHBlZAorICBhZGRpbmcgbmV3bGluZXMgYW5kIGFjdGVkIGluc3RlYWQgbGlrZSAnTm9uZScuCisKKy0gSXNzdWUgIzExMTg2OiBweWRvYyBpZ25vcmVzIGEgbW9kdWxlIGlmIGl0cyBuYW1lIGNvbnRhaW5zIGEgc3Vycm9nYXRlCisgIGNoYXJhY3RlciBpbiB0aGUgaW5kZXggb2YgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTE4MTU6IFVzZSBhIGxpZ2h0LXdlaWdodCBTaW1wbGVRdWV1ZSBmb3IgdGhlIHJlc3VsdCBxdWV1ZSBpbgorICBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvci4KKworLSBJc3N1ZSAjNTE2MjogVHJlYXQgc2VydmljZXMgbGlrZSBmcm96ZW4gZXhlY3V0YWJsZXMgdG8gYWxsb3cgY2hpbGQgc3Bhd25pbmcKKyAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBvbiBXaW5kb3dzLgorCistIGxvZ2dpbmcuYmFzaWNDb25maWcgbm93IHN1cHBvcnRzIGFuIG9wdGlvbmFsICdoYW5kbGVycycgYXJndW1lbnQgdGFraW5nIGFuCisgIGl0ZXJhYmxlIG9mIGhhbmRsZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSByb290IGxvZ2dlci4gQWRkaXRpb25hbCBwYXJhbWV0ZXIKKyAgY2hlY2tzIHdlcmUgYWxzbyBhZGRlZCB0byBiYXNpY0NvbmZpZy4KKworLSBJc3N1ZSAjMTE4MTQ6IEZpeCBsaWtlbHkgdHlwbyBpbiBtdWx0aXByb2Nlc3NpbmcuUG9vbC5fdGVybWluYXRlKCkuCisKKy0gSXNzdWUgIzExNzQ3OiBGaXggcmFuZ2UgZm9ybWF0dGluZyBpbiBkaWZmbGliLmNvbnRleHRfZGlmZigpIGFuZAorICBkaWZmbGliLnVuaWZpZWRfZGlmZigpLgorCistIElzc3VlICM4NDI4OiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiBtdWx0aXByb2Nlc3NpbmcuUG9vbCB3aGVuIHRlcm1pbmF0aW5nCisgIHdvcmtlciBwcm9jZXNzZXM6IG5ldyBwcm9jZXNzZXMgd291bGQgYmUgc3Bhd25lZCB3aGlsZSB0aGUgcG9vbCBpcyBiZWluZworICBzaHV0IGRvd24uICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzI2NTA6IHJlLmVzY2FwZSgpIG5vIGxvbmdlciBlc2NhcGVzIHRoZSAnXycuCisKKy0gSXNzdWUgIzExNzU3OiBzZWxlY3Quc2VsZWN0KCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yIHdoZW4gYSBuZWdhdGl2ZSB0aW1lb3V0CisgIGlzIHBhc3NlZCAocHJldmlvdXNseSwgYSBzZWxlY3QuZXJyb3Igd2l0aCBFSU5WQUwgd291bGQgYmUgcmFpc2VkKS4gIFBhdGNoCisgIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjNzMxMTogZml4IGh0bWwucGFyc2VyIHRvIGFjY2VwdCBub24tQVNDSUkgYXR0cmlidXRlIHZhbHVlcy4KKworLSBJc3N1ZSAjMTE2MDU6IGVtYWlsLnBhcnNlci5CeXRlc0ZlZWRQYXJzZXIgd2FzIGluY29ycmVjdGx5IGNvbnZlcnRpbmcKKyAgbXVsdGlwYXJ0IHN1YnBhcnRzIHdpdGggYW4gOC1iaXQgQ1RFIGludG8gdW5pY29kZSBpbnN0ZWFkIG9mIHByZXNlcnZpbmcgdGhlCisgIGJ5dGVzLgorCistIElzc3VlICMxNjkwNjA4OiBlbWFpbC51dGlsLmZvcm1hdGFkZHIgaXMgbm93IFJGQyAyMDQ3IGF3YXJlOiAgaXQgbm93IGhhcyBhCisgIGNoYXJzZXQgcGFyYW1ldGVyIHRoYXQgZGVmYXVsdHMgdG8gdXRmLTggYW5kIGlzIHVzZWQgYXMgdGhlIGNoYXJzZXQgZm9yIFJGQworICAyMDQ3IGVuY29kaW5nIHdoZW4gdGhlIHJlYWxuYW1lIGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxMDk2MzogRW5zdXJlIHRoYXQgc3VicHJvY2Vzcy5jb21tdW5pY2F0ZSgpIG5ldmVyIHJhaXNlcyBFUElQRS4KKworLSBJc3N1ZSAjMTA3OTE6IEltcGxlbWVudCBtaXNzaW5nIG1ldGhvZCBHemlwRmlsZS5yZWFkMSgpLCBhbGxvd2luZyBHemlwRmlsZQorICB0byBiZSB3cmFwcGVkIGluIGEgVGV4dElPV3JhcHBlci4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KKworLSBJc3N1ZSAjMTE3MDc6IEFkZGVkIGEgZmFzdCBDIHZlcnNpb24gb2YgZnVuY3Rvb2xzLmNtcF90b19rZXkoKS4KKyAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTE2ODg6IEFkZCBzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X3RyYWNlX2NhbGxiYWNrKCkuICBQYXRjaCBieQorICBUb3JzdGVuIExhbmRzY2hvZmYuCisKKy0gSXNzdWUgIzExNzQ2OiBGaXggU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKSB0byBhY2NlcHQgZWxsaXB0aWMgY3VydmUKKyAgcHJpdmF0ZSBrZXlzLgorCistIElzc3VlICM1ODYzOiBSZXdyaXRlIEJaMkZpbGUgaW4gcHVyZSBQeXRob24sIGFuZCBhbGxvdyBpdCB0byBhY2NlcHQKKyAgZmlsZS1saWtlIG9iamVjdHMgdXNpbmcgYSBuZXcgYGBmaWxlb2JqYGAgY29uc3RydWN0b3IgYXJndW1lbnQuICBQYXRjaCBieQorICBOYWRlZW0gVmF3ZGEuCisKKy0gdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2FtZUVsZW1lbnRzIGhhcyBiZWVuIHJlbW92ZWQuCisKKy0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiBpbml0ZnNlbmNvZGluZygpIHdhcyBub3QKKyAgY2FsbGVkIHlldDogZGV0ZWN0IGJvb3RzdHJhcCAoc3RhcnR1cCkgaXNzdWVzIGVhcmxpZXIuCisKKy0gSXNzdWUgIzExMzkzOiBBZGQgdGhlIG5ldyBmYXVsdGhhbmRsZXIgbW9kdWxlLgorCistIElzc3VlICMxMTYxODogRml4IHRoZSB0aW1lb3V0IGxvZ2ljIGluIHRocmVhZGluZy5Mb2NrLmFjcXVpcmUoKSB1bmRlciBXaW5kb3dzLgorCistIFJlbW92ZWQgdGhlICdzdHJpY3QnIGFyZ3VtZW50IHRvIGVtYWlsLnBhcnNlci5QYXJzZXIsIHdoaWNoIGhhcyBiZWVuCisgIGRlcHJlY2F0ZWQgc2luY2UgUHl0aG9uIDIuNC4KKworLSBJc3N1ZSAjMTEyNTY6IEZpeCBpbnNwZWN0LmdldGNhbGxhcmdzIG9uIGZ1bmN0aW9ucyB0aGF0IHRha2Ugb25seSBrZXl3b3JkCisgIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTE2OTY6IEZpeCBJRCBnZW5lcmF0aW9uIGluIG1zaWxpYi4KKworLSBpdGVydG9vbHMuYWNjdW11bGF0ZSBub3cgc3VwcG9ydHMgYW4gb3B0aW9uYWwgKmZ1bmMqIGFyZ3VtZW50IGZvcgorICBhIHVzZXItc3VwcGxpZWQgYmluYXJ5IGZ1bmN0aW9uLgorCistIElzc3VlICMxMTY5MjogUmVtb3ZlIHVubmVjZXNzYXJ5IGRlbW8gZnVuY3Rpb25zIGluIHN1YnByb2Nlc3MgbW9kdWxlLgorCistIElzc3VlICM5Njk2OiBGaXggZXhjZXB0aW9uIGluY29ycmVjdGx5IHJhaXNlZCBieSB4ZHJsaWIuUGFja2VyLnBhY2tfaW50IHdoZW4KKyAgdHJ5aW5nIHRvIHBhY2sgYSBuZWdhdGl2ZSAoaW4tcmFuZ2UpIGludGVnZXIuCisKKy0gSXNzdWUgIzExNjc1OiBtdWx0aXByb2Nlc3NpbmcuW1Jhd11BcnJheSBvYmplY3RzIGNyZWF0ZWQgZnJvbSBhbiBpbnRlZ2VyIHNpemUKKyAgYXJlIG5vdyB6ZXJvZWQgb24gY3JlYXRpb24uICBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW91ciBzcGVjaWZpZWQgYnkgdGhlCisgIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzc2Mzk6IEZpeCBzaG9ydCBmaWxlIG5hbWUgZ2VuZXJhdGlvbiBpbiBiZGlzdF9tc2kKKworLSBJc3N1ZSAjMTE2NTk6IEZpeCBSZXNvdXJjZVdhcm5pbmcgaW4gdGVzdF9zdWJwcm9jZXNzIGludHJvZHVjZWQgYnkgIzExNDU5LgorICBQYXRjaCBieSBCZW4gSGF5ZGVuLgorCistIElzc3VlICMxMTYzNTogRG9uJ3QgdXNlIHBvbGxpbmcgaW4gd29ya2VyIHRocmVhZHMgYW5kIHByb2Nlc3NlcyBsYXVuY2hlZCBieQorICBjb25jdXJyZW50LmZ1dHVyZXMuCisKKy0gSXNzdWUgIzY4MTE6IEFsbG93IGltcG9ydGxpYiB0byBjaGFuZ2UgYSBjb2RlIG9iamVjdCdzIGNvX2ZpbGVuYW1lIGF0dHJpYnV0ZQorICB0byBtYXRjaCB0aGUgcGF0aCB0byB3aGVyZSB0aGUgc291cmNlIGNvZGUgY3VycmVudGx5IGlzLCBub3Qgd2hlcmUgdGhlIGNvZGUKKyAgb2JqZWN0IG9yaWdpbmFsbHkgY2FtZSBmcm9tLgorCistIElzc3VlICM4NzU0OiBIYXZlIGltcG9ydGxpYiB1c2UgdGhlIHJlcHIgb2YgYSBtb2R1bGUgbmFtZSBpbiBlcnJvciBtZXNzYWdlcy4KKworLSBJc3N1ZSAjMTE1OTE6IFByZXZlbnQgImltcG9ydCBzaXRlIiBmcm9tIG1vZGlmeWluZyBzeXMucGF0aCB3aGVuIHB5dGhvbgorICB3YXMgc3RhcnRlZCB3aXRoIC1TLgorCistIGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoKSBub3cgYWRkcyBhIF9zb3VyY2UgYXR0cmlidXRlIHRvIHRoZSBnZW5lcmF0ZWQKKyAgY2xhc3MuICBUaGlzIG1ha2UgdGhlIHNvdXJjZSBtb3JlIGFjY2Vzc2libGUgdGhhbiB0aGUgb3V0ZGF0ZWQKKyAgInZlcmJvc2UiIG9wdGlvbiB3aGljaCBwcmludHMgdG8gc3Rkb3V0IGJ1dCBkb2Vzbid0IG1ha2UgdGhlIHNvdXJjZQorICBzdHJpbmcgYXZhaWxhYmxlLgorCistIElzc3VlICMxMTM3MTogTWFyayBnZXRvcHQgZXJyb3IgbWVzc2FnZXMgYXMgbG9jYWxpemFibGUuICBQYXRjaCBieSBGaWxpcAorICBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxMTMzMzogQWRkIF9fc2xvdHNfXyB0byBjb2xsZWN0aW9ucyBBQkNzLgorCistIElzc3VlICMxMTYyODogY21wX3RvX2tleSBnZW5lcmF0ZWQgY2xhc3Mgc2hvdWxkIHVzZSBfX3Nsb3RzX18uCisKKy0gSXNzdWUgIzExNjY2OiBsZXQgaGVscCgpIGRpc3BsYXkgbmFtZWQgdHVwbGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcworICB0aGF0IHN0YXJ0IHdpdGggYSBsZWFkaW5nIHVuZGVyc2NvcmUuCisKKy0gSXNzdWUgIzExNjYyOiBNYWtlIHVybGxpYiBhbmQgdXJsbGliMiBpZ25vcmUgcmVkaXJlY3Rpb25zIGlmIHRoZQorICBzY2hlbWUgaXMgbm90IEhUVFAsIEhUVFBTIG9yIEZUUCAoQ1ZFLTIwMTEtMTUyMSkuCisKKy0gSXNzdWUgIzU1Mzc6IEZpeCB0aW1lMmlzb3ooKSBhbmQgdGltZTJuZXRzY2FwZSgpIGZ1bmN0aW9ucyBvZgorICBodHRwbGliLmNvb2tpZWphciBmb3IgZXhwaXJhdGlvbiB5ZWFyIGdyZWF0ZXIgdGhhbiAyMDM4IG9uIDMyLWJpdCBzeXN0ZW1zLgorCistIElzc3VlICM0MzkxOiBVc2UgcHJvcGVyIGdldHRleHQgcGx1cmFsIGZvcm1zIGluIG9wdHBhcnNlLgorCistIElzc3VlICMxMTEyNzogUmFpc2UgYSBUeXBlRXJyb3Igd2hlbiB0cnlpbmcgdG8gcGlja2xlIGEgc29ja2V0IG9iamVjdC4KKworLSBJc3N1ZSAjMTE1NjM6IENvbm5lY3Rpb246Y2xvc2UgaGVhZGVyIGlzIHNlbnQgYnkgcmVxdWVzdHMgdXNpbmcgVVJMT3BlbmVyCisgIGNsYXNzIHdoaWNoIGhlbHBzIGluIGNsb3Npbmcgb2Ygc29ja2V0cyBhZnRlciBjb25uZWN0aW9uIGlzIG92ZXIuIFBhdGNoCisgIGNvbnRyaWJ1dGlvbnMgYnkgSmVmZiBNY05laWwgYW5kIE5hZGVlbSBWYXdkYS4KKworLSBJc3N1ZSAjMTE0NTk6IEEgYGBidWZzaXplYGAgdmFsdWUgb2YgMCBpbiBzdWJwcm9jZXNzLlBvcGVuKCkgcmVhbGx5IGNyZWF0ZXMKKyAgdW5idWZmZXJlZCBwaXBlcywgc3VjaCB0aGF0IHNlbGVjdCgpIHdvcmtzIHByb3Blcmx5IG9uIHRoZW0uCisKKy0gSXNzdWUgIzU0MjE6IEZpeCBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2Ugd2hlbiBvbmUgb2Ygc29ja2V0LnNlbmR0bygpJ3MKKyAgYXJndW1lbnRzIGhhcyB0aGUgd3JvbmcgdHlwZS4gIFBhdGNoIGJ5IE5pa2l0YSBWZXRvc2hraW4uCisKKy0gSXNzdWUgIzEwODEyOiBBZGQgc29tZSBleHRyYSBwb3NpeCBmdW5jdGlvbnMgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTA5Nzk6IHVuaXR0ZXN0IHN0ZG91dCBidWZmZXJpbmcgbm93IHdvcmtzIHdpdGggY2xhc3MgYW5kIG1vZHVsZQorICBzZXR1cCBhbmQgdGVhcmRvd24uCisKKy0gSXNzdWUgIzExNTc3OiBmaXggUmVzb3VyY2VXYXJuaW5nIHRyaWdnZXJlZCBieSBpbXByb3ZlZCBiaW5oZXggdGVzdCBjb3ZlcmFnZQorCistIElzc3VlICMxMTI0MzogZml4IHRoZSBwYXJhbWV0ZXIgcXVlcnlpbmcgbWV0aG9kcyBvZiBNZXNzYWdlIHRvIHdvcmsgaWYKKyAgdGhlIGhlYWRlcnMgY29udGFpbiB1bi1lbmNvZGVkIG5vbi1BU0NJSSBkYXRhLgorCistIElzc3VlICMxMTQwMTogZml4IGhhbmRsaW5nIG9mIGhlYWRlcnMgd2l0aCBubyB2YWx1ZTsgdGhpcyBmaXhlcyBhIHJlZ3Jlc3Npb24KKyAgcmVsYXRpdmUgdG8gUHl0aG9uMiBhbmQgdGhlIHJlc3VsdCBpcyBub3cgdGhlIHNhbWUgYXMgaXQgd2FzIGluIFB5dGhvbjIuCisKKy0gSXNzdWUgIzkyOTg6IGJhc2U2NCBib2RpZXMgd2VyZW4ndCBiZWluZyBmb2xkZWQgdG8gbGluZSBsZW5ndGhzIGxlc3MgdGhhbiA3OCwKKyAgd2hpY2ggd2FzIGEgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yLiAgVW5saWtlIFB5dGhvbjIsIHRoZSBsYXN0IGxpbmUKKyAgb2YgdGhlIGZvbGRlZCBib2R5IG5vdyBlbmRzIHdpdGggYSBjYXJyaWFnZSByZXR1cm4uCisKKy0gSXNzdWUgIzExNTYwOiBzaHV0aWwudW5wYWNrX2FyY2hpdmUgbm93IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBmb3JtYXQKKyAgcGFyYW1ldGVyLiBQYXRjaCBieSBFdmFuIERhbmRyZWEuCisKKy0gSXNzdWUgIzU4NzA6IEFkZCBgc3VicHJvY2Vzcy5ERVZOVUxMYCBjb25zdGFudC4KKworLSBJc3N1ZSAjMTExMzM6IGZpeCB0d28gY2FzZXMgd2hlcmUgaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBjYW4gdHJpZ2dlciBjb2RlCisgIGV4ZWN1dGlvbi4gUGF0Y2ggYnkgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICMxMTU2OTogdXNlIGFic29sdXRlIHBhdGggdG8gdGhlIHN5c2N0bCBjb21tYW5kIGluIG11bHRpcHJvY2Vzc2luZyB0bworICBlbnN1cmUgdGhhdCBpdCB3aWxsIGJlIGZvdW5kIHJlZ2FyZGxlc3Mgb2YgdGhlIHNoZWxsIFBBVEguIFRoaXMgZW5zdXJlcworICB0aGF0IG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQgd29ya3Mgb24gZGVmYXVsdCBpbnN0YWxscyBvZiBNYWNPU1guCisKKy0gSXNzdWUgIzExNTAxOiBkaXN1dGlscy5hcmNoaXZlX3V0aWxzLm1ha2VfemlwZmlsZSBubyBsb25nZXIgZmFpbHMgaWYgemxpYiBpcworICBub3QgaW5zdGFsbGVkLiBJbnN0ZWFkLCB0aGUgemlwZmlsZS5aSVBfU1RPUkVEIGNvbXByZXNzaW9uIGlzIHVzZWQgdG8gY3JlYXRlCisgIHRoZSBaaXBGaWxlLiBQYXRjaCBieSBOYXRhbGlhIEIuIEJpZGFydC4KKworLSBJc3N1ZSAjMTEyODk6IGBzbXRwLlNNVFBgIGNsYXNzIGlzIG5vdyBhIGNvbnRleHQgbWFuYWdlciBzbyBpdCBjYW4gYmUgdXNlZAorICBpbiBhIGB3aXRoYCBzdGF0ZW1lbnQuICBDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2xhLgorCistIElzc3VlICMxMTU1NDogRml4ZWQgc3VwcG9ydCBmb3IgSmFwYW5lc2UgY29kZWNzOyBwcmV2aW91c2x5IHRoZSBib2R5IG91dHB1dAorICBlbmNvZGluZyB3YXMgbm90IGRvbmUgaWYgZXVjLWpwIG9yIHNoaWZ0LWppcyB3YXMgc3BlY2lmaWVkIGFzIHRoZSBjaGFyc2V0LgorCistIElzc3VlICMxMTUwOTogU2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0ZXN0IGNvdmVyYWdlIG9mIGZpbGVpbnB1dC4KKyAgUGF0Y2ggYnkgRGVudmVyIENvbmV5YmVhcmUgYXQgUHlDb24gMjAxMSBTcHJpbnRzLgorCistIElzc3VlICMxMTQwNzogYFRlc3RDYXNlLnJ1bmAgcmV0dXJucyB0aGUgcmVzdWx0IG9iamVjdCB1c2VkIG9yIGNyZWF0ZWQuCisgIENvbnRyaWJ1dGVkIGJ5IEphbmF0aGFuIEhhcnRsZXkuCisKKy0gSXNzdWUgIzExNTAwOiBGaXhlZCBhIGJ1ZyBpbiB0aGUgT1MgWCBwcm94eSBieXBhc3MgY29kZSBmb3IgZnVsbHkgcXVhbGlmaWVkCisgIElQIGFkZHJlc3NlcyBpbiB0aGUgcHJveHkgZXhjZXB0aW9uIGxpc3QuCisKKy0gSXNzdWUgIzExNDkxOiBkYm0uZXJyb3IgaXMgbm8gbG9uZ2VyIHJhaXNlZCB3aGVuIGRibS5vcGVuIGlzIGNhbGxlZCB3aXRoCisgIHRoZSAibiIgYXMgdGhlIGZsYWcgYXJndW1lbnQgYW5kIHRoZSBmaWxlIGV4aXN0cy4gVGhlIGJlaGF2aW9yIG1hdGNoZXMKKyAgdGhlIGRvY3VtZW50YXRpb24gYW5kIGdlbmVyYWwgbG9naWMuCisKKy0gSXNzdWUgIzExNjI0Nzc6IFBvc3RlbCBQcmluY2lwbGUgYWRqdXN0bWVudCB0byBlbWFpbCBkYXRlIHBhcnNpbmc6IGhhbmRsZSB0aGUKKyAgZmFjdCB0aGF0IHNvbWUgbm9uLWNvbXBsaWFudCBNVUFzIHVzZSAnLicgaW5zdGVhZCBvZiAnOicgaW4gdGltZSBzcGVjcy4KKworLSBJc3N1ZSAjMTExMzE6IEZpeCBzaWduIG9mIHplcm8gaW4gZGVjaW1hbC5EZWNpbWFsIHBsdXMgYW5kIG1pbnVzCisgIG9wZXJhdGlvbnMgd2hlbiB0aGUgcm91bmRpbmcgbW9kZSBpcyBST1VORF9GTE9PUi4KKworLSBJc3N1ZSAjOTkzNTogU3BlZWQgdXAgcGlja2xpbmcgb2YgaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzLgorCistIElzc3VlICM1NjIyOiBGaXggY3Vyc2VzLndyYXBwZXIgdG8gcmFpc2UgY29ycmVjdCBleGNlcHRpb24gaWYgY3Vyc2VzCisgIGluaXRpYWxpemF0aW9uIGZhaWxzLgorCistIElzc3VlICMxMTQwODogSW4gdGhyZWFkaW5nLkxvY2suYWNxdWlyZSgpLCBvbmx5IGNhbGwgZ2V0dGltZW9mZGF5KCkgd2hlbgorICByZWFsbHkgbmVjZXNzYXJ5LiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTM5MTogV3JpdGluZyB0byBhIG1tYXAgb2JqZWN0IGNyZWF0ZWQgd2l0aAorICBgYG1tYXAuUFJPVF9SRUFEfG1tYXAuUFJPVF9FWEVDYGAgd291bGQgc2VnZmF1bHQgaW5zdGVhZCBvZiByYWlzaW5nIGEKKyAgVHlwZUVycm9yLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICM5Nzk1OiBhZGQgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHN1cHBvcnQgZm9yIG5udHBsaWIuTk5UUCBjbGFzcy4KKworLSBJc3N1ZSAjMTEzMDY6IG1haWxib3ggaW4gY2VydGFpbiBjYXNlcyBhZGFwdHMgdG8gYW4gaW5hYmlsaXR5IHRvIG9wZW4KKyAgY2VydGFpbiBmaWxlcyBpbiByZWFkLXdyaXRlIG1vZGUuICBQcmV2aW91c2x5IGl0IGRldGVjdGVkIHRoaXMgYnkKKyAgY2hlY2tpbmcgZm9yIEVBQ0NFUywgbm93IGl0IGFsc28gY2hlY2tzIGZvciBFUk9GUy4KKworLSBJc3N1ZSAjMTEyNjU6IGFzeW5jb3JlIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBFUElQRSwgRUJBREYgYW5kIEVBR0FJTiBlcnJvcnMKKyAgb24gYWNjZXB0KCksIHNlbmQoKSBhbmQgcmVjdigpLgorCistIElzc3VlICMxMTM3NzogRGVwcmVjYXRlIHBsYXRmb3JtLnBvcGVuKCkgYW5kIHJlaW1wbGVtZW50IGl0IHdpdGggb3MucG9wZW4oKS4KKworLSBJc3N1ZSAjODUxMzogT24gVU5JWCwgc3VicHJvY2VzcyBzdXBwb3J0cyBieXRlcyBjb21tYW5kIHN0cmluZy4KKworLSBJc3N1ZSAjMTA4NjY6IEFkZCBzb2NrZXQuc2V0aG9zdG5hbWUoKS4gIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzExMTQwOiBMb2NrLnJlbGVhc2UoKSBub3cgcmFpc2VzIGEgUnVudGltZUVycm9yIHdoZW4gYXR0ZW1wdGluZworICB0byByZWxlYXNlIGFuIHVuYWNxdWlyZWQgbG9jaywgYXMgY2xhaW1lZCBpbiB0aGUgdGhyZWFkaW5nIGRvY3VtZW50YXRpb24uCisgIFRoZSBfdGhyZWFkLmVycm9yIGV4Y2VwdGlvbiBpcyBub3cgYW4gYWxpYXMgb2YgUnVudGltZUVycm9yLiAgUGF0Y2ggYnkKKyAgRmlsaXAgR3J1c3pjennFhHNraS4gIFBhdGNoIGZvciBfZHVtbXlfdGhyZWFkIGJ5IEF5bWVyaWMgQXVndXN0aW4uCisKKy0gSXNzdWUgIzg1OTQ6IGZ0cGxpYiBub3cgcHJvdmlkZXMgYSBzb3VyY2VfYWRkcmVzcyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB3aGljaAorICAoYWRkcmVzcywgcG9ydCkgdG8gYmluZCB0byBiZWZvcmUgY29ubmVjdGluZy4KKworLSBJc3N1ZSAjMTEzMjY6IEFkZCB0aGUgbWlzc2luZyBjb25uZWN0X2V4KCkgaW1wbGVtZW50YXRpb24gZm9yIFNTTCBzb2NrZXRzLAorICBhbmQgbWFrZSBpdCB3b3JrIGZvciBub24tYmxvY2tpbmcgY29ubmVjdHMuCisKKy0gSXNzdWUgIzExMjk3OiBBZGQgY29sbGVjdGlvbnMuQ2hhaW5NYXAoKS4KKworLSBJc3N1ZSAjMTA3NTU6IEFkZCB0aGUgcG9zaXguZmxpc3RkaXIoKSBmdW5jdGlvbi4gIFBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICM0NzYxOiBBZGQgdGhlIGBgKmF0KClgYCBmYW1pbHkgb2YgZnVuY3Rpb25zIChvcGVuYXQoKSwgZXRjLikgdG8gdGhlCisgIHBvc2l4IG1vZHVsZS4gIFBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICM3MzIyOiBUcnlpbmcgdG8gcmVhZCBmcm9tIGEgc29ja2V0J3MgZmlsZS1saWtlIG9iamVjdCBhZnRlciBhIHRpbWVvdXQKKyAgb2NjdXJyZWQgbm93IHJhaXNlcyBhbiBlcnJvciBpbnN0ZWFkIG9mIHNpbGVudGx5IGxvc2luZyBkYXRhLgorCistIElzc3VlICMxMTI5MTogcG9wbGliLlBPUCBubyBsb25nZXIgc3VwcHJlc3NlcyBlcnJvcnMgb24gcXVpdCgpLgorCistIElzc3VlICMxMTE3NzogYXN5bmNvcmUncyBjcmVhdGVfc29ja2V0KCkgYXJndW1lbnRzIGNhbiBub3cgYmUgb21pdHRlZC4KKworLSBJc3N1ZSAjNjA2NDogQWRkIGEgYGBkYWVtb25gYCBrZXl3b3JkIGFyZ3VtZW50IHRvIHRoZSB0aHJlYWRpbmcuVGhyZWFkCisgIGFuZCBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcyBjb25zdHJ1Y3RvcnMgaW4gb3JkZXIgdG8gb3ZlcnJpZGUgdGhlCisgIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGluaGVyaXRpbmcgdGhlIGRhZW1vbmljIHByb3BlcnR5IGZyb20gdGhlIGN1cnJlbnQKKyAgdGhyZWFkL3Byb2Nlc3MuCisKKy0gSXNzdWUgIzEwOTU2OiBCdWZmZXJlZCBJL08gY2xhc3NlcyByZXRyeSByZWFkaW5nIG9yIHdyaXRpbmcgYWZ0ZXIgYSBzaWduYWwKKyAgaGFzIGFycml2ZWQgYW5kIHRoZSBoYW5kbGVyIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4KKworLSBJc3N1ZSAjMTA3ODQ6IE5ldyBvcy5nZXRwcmlvcml0eSgpIGFuZCBvcy5zZXRwcmlvcml0eSgpIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTExMTQ6IEZpeCBjYXRhc3Ryb3BoaWMgcGVyZm9ybWFuY2Ugb2YgdGVsbCgpIG9uIHRleHQgZmlsZXMgKHVwCisgIHRvIDEwMDB4IGZhc3RlciBpbiBzb21lIGNhc2VzKS4gIEl0IGlzIHN0aWxsIG9uZSB0byB0d28gb3JkZXIgb2YgbWFnbml0dWRlcworICBzbG93ZXIgdGhhbiBiaW5hcnkgdGVsbCgpLgorCistIElzc3VlICMxMDg4MjogQWRkIG9zLnNlbmRmaWxlIGZ1bmN0aW9uLgorCistIElzc3VlICMxMDg2ODogQWxsb3cgdXNhZ2Ugb2YgdGhlIHJlZ2lzdGVyIG1ldGhvZCBvZiBhbiBBQkMgYXMgYSBjbGFzcworICBkZWNvcmF0b3IuCisKKy0gSXNzdWUgIzExMjI0OiBGaXhlZCBhIHJlZ3Jlc3Npb24gaW4gdGFyZmlsZSB0aGF0IGFmZmVjdGVkIHRoZSBmaWxlLWxpa2UKKyAgb2JqZWN0cyByZXR1cm5lZCBieSBUYXJGaWxlLmV4dHJhY3RmaWxlKCkgcmVnYXJkaW5nIHBlcmZvcm1hbmNlLCBtZW1vcnkKKyAgY29uc3VtcHRpb24gYW5kIGZhaWx1cmVzIHdpdGggdGhlIHN0cmVhbSBpbnRlcmZhY2UuCisKKy0gSXNzdWUgIzEwOTI0OiBBZGRpbmcgc2FsdCBhbmQgTW9kdWxhciBDcnlwdCBGb3JtYXQgdG8gY3J5cHQgbGlicmFyeS4KKyAgTW92ZWQgb2xkIEMgd3JhcHBlciB0byBfY3J5cHQsIGFuZCBhZGRlZCBhIFB5dGhvbiB3cmFwcGVyIHdpdGgKKyAgZW5oYW5jZWQgc2FsdCBnZW5lcmF0aW9uIGFuZCBzaW1wbGVyIEFQSSBmb3IgcGFzc3dvcmQgZ2VuZXJhdGlvbi4KKworLSBJc3N1ZSAjMTEwNzQ6IE1ha2UgJ3Rva2VuaXplJyBzbyBpdCBjYW4gYmUgcmVsb2FkZWQuCisKKy0gSXNzdWUgIzExMDg1OiBNb3ZlZCBjb2xsZWN0aW9ucyBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgaW50byBhIHNlcGFyYXRlCisgIG1vZHVsZSBjYWxsZWQgY29sbGVjdGlvbnMuYWJjLCBmb2xsb3dpbmcgdGhlIHBhdHRlcm4gdXNlZCBieSBpbXBvcnRsaWIuYWJjLgorICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBuYW1lcyBhcmUgaW1wb3J0ZWQgaW50byB0aGUgY29sbGVjdGlvbnMKKyAgbW9kdWxlLgorCistIElzc3VlICM0NjgxOiBBbGxvdyBtbWFwKCkgdG8gd29yayBvbiBmaWxlIHNpemVzIGFuZCBvZmZzZXRzIGxhcmdlciB0aGFuCisgIDRHQiwgZXZlbiBvbiAzMi1iaXQgYnVpbGRzLiAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbCwgYWRhcHRlZCBmb3IKKyAgMzItYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzExMTY5OiBjb21waWxlYWxsIG1vZHVsZSB1c2VzIHJlcHIoKSB0byBmb3JtYXQgZmlsZW5hbWVzIGFuZCBwYXRocyB0bworICBlc2NhcGUgc3Vycm9nYXRlIGNoYXJhY3RlcnMgYW5kIHNob3cgc3BhY2VzLgorCistIElzc3VlICMxMTA4OTogRml4IHBlcmZvcm1hbmNlIGlzc3VlIGxpbWl0aW5nIHRoZSB1c2Ugb2YgQ29uZmlnUGFyc2VyKCkKKyAgd2l0aCBsYXJnZSBjb25maWcgZmlsZXMuCisKKy0gSXNzdWUgIzEwMjc2OiBGaXggdGhlIHJlc3VsdHMgb2YgemxpYi5jcmMzMigpIGFuZCB6bGliLmFkbGVyMzIoKSBvbiBidWZmZXJzCisgIGxhcmdlciB0aGFuIDRHQi4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KKworLSBJc3N1ZSAjMTEzODg6IEFkZGVkIGEgY2xlYXIoKSBtZXRob2QgdG8gTXV0YWJsZVNlcXVlbmNlCisKKy0gSXNzdWUgIzExMTc0OiBBZGQgYXJncGFyc2UuTWV0YXZhclR5cGVIZWxwRm9ybWF0dGVyLCB3aGljaCB1c2VzIHR5cGUgbmFtZXMKKyAgZm9yIHRoZSBuYW1lcyBvZiBvcHRpb25hbCBhbmQgcG9zaXRpb25hbCBhcmd1bWVudHMgaW4gaGVscCBtZXNzYWdlcy4KKworLSBJc3N1ZSAjOTM0ODogUmFpc2UgYW4gZWFybHkgZXJyb3IgaWYgYXJncGFyc2UgbmFyZ3MgYW5kIG1ldGF2YXIgZG9uJ3QgbWF0Y2guCisKKy0gSXNzdWUgIzg5ODI6IEltcHJvdmUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBhcmdwYXJzZSBOYW1lc3BhY2Ugb2JqZWN0LgorCistIElzc3VlICM5MzQzOiBEb2N1bWVudCB0aGF0IGFyZ3BhcnNlIHBhcmVudCBwYXJzZXJzIG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUKKyAgdGhlaXIgY2hpbGRyZW4uCisKKy0gSXNzdWUgIzkwMjY6IEZpeCBvcmRlciBvZiBhcmdwYXJzZSBzdWItY29tbWFuZHMgaW4gaGVscCBtZXNzYWdlcy4KKworLSBJc3N1ZSAjOTM0NzogRml4IGZvcm1hdHRpbmcgZm9yIHR1cGxlcyBpbiBhcmdwYXJzZSB0eXBlPSBlcnJvciBtZXNzYWdlcy4KKworLSBJc3N1ZSAjMTIxOTE6IEFkZGVkIHNodXRpbC5jaG93bigpIHRvIGNoYW5nZSB1c2VyIGFuZC9vciBncm91cCBvd25lciBvZiBhCisgIGdpdmVuIHBhdGggYWxzbyBzcGVjaWZ5aW5nIHRoZWlyIG5hbWVzLgorCistIElzc3VlICMxMzk4ODogVGhlIF9lbGVtZW50dHJlZSBhY2NlbGVyYXRvciBpcyB1c2VkIHdoZW5ldmVyIGF2YWlsYWJsZS4KKyAgTm93IHhtbC5ldHJlZS5jRWxlbWVudFRyZWUgYmVjb21lcyBhIGRlcHJlY2F0ZWQgYWxpYXMgdG8gRWxlbWVudFRyZWUuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICM2ODA3OiBSdW4gbXNpc3VwcG9ydC5tYWsgZWFybGllci4KKworLSBJc3N1ZSAjMTA1ODA6IE1pbm9yIGdyYW1tYXIgY2hhbmdlIGluIFdpbmRvd3MgaW5zdGFsbGVyLgorCistIElzc3VlICMxMzMyNjogQ2xlYW4gX19weWNhY2hlX18gZGlyZWN0b3JpZXMgY29ycmVjdGx5IG9uIE9wZW5CU0QuCisKKy0gUEVQIDM5MzogdGhlIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLXdpZGUtdW5pY29kZSBpcyByZW1vdmVkLgorCistIElzc3VlICMxMjg1MjogU2V0IF9YT1BFTl9TT1VSQ0UgdG8gNzAwLCBpbnN0ZWFkIG9mIDYwMCwgdG8gZ2V0IFBPU0lYIDIwMDgKKyAgZnVuY3Rpb25zIG9uIE9wZW5CU0QgKGUuZy4gZmRvcGVuZGlyKS4KKworLSBJc3N1ZSAjMTE4NjM6IFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgc3lzdGVtcyBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIKKyAgKGZvbGxvd2luZyBQRVAgMTEpLiAgVGhlc2Ugc3lzdGVtcyBhcmUgc3lzdGVtcyB1c2luZyBNYWNoIEMgVGhyZWFkcywKKyAgU3VuT1MgbGlnaHR3ZWlnaHQgcHJvY2Vzc2VzLCBHTlUgcHRoIHRocmVhZHMgYW5kIElSSVggdGhyZWFkcy4KKworLSBJc3N1ZSAjODc0NjogQ29ycmVjdCBmYXVsdHkgY29uZmlndXJlIGNoZWNrcyBzbyB0aGF0IG9zLmNoZmxhZ3MoKSBhbmQKKyAgb3MubGNoZmxhZ3MoKSBhcmUgb25jZSBhZ2FpbiBidWlsdCBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGVzZQorICBmdW5jdGlvbnMgKEJTRCBhbmQgT1MgWCkuICBBbHNvIGFkZCBuZXcgc3RhdCBmaWxlIGZsYWdzIGZvciBPUyBYCisgIChVRl9ISURERU4gYW5kIFVGX0NPTVBSRVNTRUQpLgorCistIElzc3VlICMxMDY0NTogSW5zdGFsbGluZyBQeXRob24gbm8gbG9uZ2VyIGNyZWF0ZXMgYQorICBQeXRob24tWC5ZLlotcHlYLlkuZWdnLWluZm8gZmlsZSBpbiB0aGUgbGliLWR5bmxvYWQgZGlyZWN0b3J5LgorCistIERvIG5vdCBhY2NpZGVudGFsbHkgaW5jbHVkZSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc3FsaXRlLmggdHdpY2Ugd2hlbgorICBidWlsZGluZyBzcWxpdGUzLgorCistIElzc3VlICMxMTIxNzogRm9yIDY0LWJpdC8zMi1iaXQgTWFjIE9TIFggdW5pdmVyc2FsIGZyYW1ld29yayBidWlsZHMsCisgIGVuc3VyZSAibWFrZSBpbnN0YWxsIiBjcmVhdGVzIHN5bWxpbmtzIGluIC0tcHJlZml4IGJpbiBmb3IgdGhlICItMzIiCisgIGZpbGVzIGluIHRoZSBmcmFtZXdvcmsgYmluIGRpcmVjdG9yeSBsaWtlIHRoZSBpbnN0YWxsZXIgZG9lcy4KKworLSBJc3N1ZSAjMTEzNDc6IFVzZSAtLW5vLWFzLW5lZWRlZCB3aGVuIGxpbmtpbmcgbGlicHl0aG9uMy5zby4KKworLSBJc3N1ZSAjMTE0MTE6IEZpeCAnbWFrZSBERVNURElSPScgd2l0aCBhIHJlbGF0aXZlIGRlc3RpbmF0aW9uLgorCistIElzc3VlICMxMTI2ODogUHJldmVudCBNYWMgT1MgWCBJbnN0YWxsZXIgZmFpbHVyZSBpZiBEb2N1bWVudGF0aW9uCisgIHBhY2thZ2UgaGFkIHByZXZpb3VzbHkgYmVlbiBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzExNDk1OiBPU0Ygc3VwcG9ydCBpcyBlbGltaW5hdGVkLiBJdCB3YXMgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yLgorCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTE3MTg6IElETEUncyBvcGVuIG1vZHVsZSBkaWFsb2cgY291bGRuJ3QgZmluZCB0aGUgX19pbml0X18ucHkKKyAgZmlsZSBpbiBhIHBhY2thZ2UuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxNDA1MzogcGF0Y2hjaGVjay5weSAoIm1ha2UgcGF0Y2hjaGVjayIpIG5vdyB3b3JrcyB3aXRoIE1RIHBhdGNoZXMuCisgIFBhdGNoIGJ5IEZyYW5jaXNjbyBNYXJ0w61uIEJydWd1w6kuCisKKy0gSXNzdWUgIzEzOTMwOiAydG8zIGlzIG5vdyBhYmxlIHRvIHdyaXRlIGl0cyBjb252ZXJ0ZWQgb3V0cHV0IGZpbGVzIHRvIGFub3RoZXIKKyAgZGlyZWN0b3J5IHRyZWUgYXMgd2VsbCBhcyBjb3B5aW5nIHVuY2hhbmdlZCBmaWxlcyBhbmQgYWx0ZXJpbmcgdGhlIGZpbGUKKyAgc3VmZml4LiAgU2VlIGl0cyBuZXcgLW8sIC1XIGFuZCAtLWFkZC1zdWZmaXggb3B0aW9ucy4gIFRoaXMgbWFrZXMgaXQgbW9yZQorICB1c2VmdWwgaW4gbWFueSBhdXRvbWF0ZWQgY29kZSB0cmFuc2xhdGlvbiB3b3JrZmxvd3MuCisKKy0gSXNzdWUgIzEzNjI4OiBweXRob24tZ2RiLnB5IGlzIG5vdyBhYmxlIHRvIHJldHJpZXZlIG1vcmUgZnJhbWVzIGluIHRoZSBQeXRob24KKyAgdHJhY2ViYWNrIGlmIFB5dGhvbiBpcyBvcHRpbWl6ZWQuCisKKy0gSXNzdWUgIzExOTk2OiBsaWJweXRob24gKGdkYiksIHJlcGxhY2UgInB5LWJ0IiBjb21tYW5kIGJ5ICJweS1idC1mdWxsIiBhbmQKKyAgYWRkIGEgc21hcnRlciAicHktYnQiIGNvbW1hbmQgcHJpbnRpbmcgYSBjbGFzc2ljIFB5dGhvbiB0cmFjZWJhY2suCisKKy0gSXNzdWUgIzExMTc5OiBNYWtlIGNjYmVuY2ggd29yayB1bmRlciBQeXRob24gMy4xIGFuZCAyLjcgYWdhaW4uCisKKy0gSXNzdWUgIzEwNjM5OiByZWluZGVudC5weSBubyBsb25nZXIgY29udmVydHMgbmV3bGluZXMgYW5kIHdpbGwgcmFpc2UKKyAgYW4gZXJyb3IgaWYgYXR0ZW1wdGluZyB0byBjb252ZXJ0IGEgZmlsZSB3aXRoIG1peGVkIG5ld2xpbmVzLgorICAiLS1uZXdsaW5lIiBvcHRpb24gYWRkZWQgdG8gc3BlY2lmeSBuZXcgbGluZSBjaGFyYWN0ZXIuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxMzg0MDogVGhlIGVycm9yIG1lc3NhZ2UgcHJvZHVjZWQgYnkgY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyCisgIHdoZW4gZ2l2ZW4gYSBVbmljb2RlIHN0cmluZyBoYXMgYmVlbiBmaXhlZC4KKworLSBJc3N1ZSAjOTk3NTogc29ja2V0OiBGaXggaW5jb3JyZWN0IHVzZSBvZiBmbG93aW5mbyBhbmQgc2NvcGVfaWQuIFBhdGNoIGJ5CisgIFZpbG1vcyBOZWJlaGFqLgorCistIElzc3VlICM3Nzc3OiBzb2NrZXQ6IEFkZCBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChQRl9SRFMpIHN1cHBvcnQuCisKKy0gSXNzdWUgIzEzMTU5OiBGaWxlSU8gYW5kIEJaMkNvbXByZXNzb3IvQloyRGVjb21wcmVzc29yIG5vdyB1c2UgYSBsaW5lYXItdGltZQorICBidWZmZXIgZ3Jvd3RoIHN0cmF0ZWd5IGluc3RlYWQgb2YgYSBxdWFkcmF0aWMtdGltZSBvbmUuCisKKy0gSXNzdWUgIzEwMTQxOiBzb2NrZXQ6IEFkZCBTb2NrZXRDQU4gKFBGX0NBTikgc3VwcG9ydC4gSW5pdGlhbCBwYXRjaCBieQorICBNYXR0aGlhcyBGdWNocywgdXBkYXRlZCBieSBUaWFnbyBHb27Dp2FsdmVzLgorCistIElzc3VlICMxMzA3MDogRml4IGEgY3Jhc2ggd2hlbiBhIFRleHRJT1dyYXBwZXIgY2F1Z2h0IGluIGEgcmVmZXJlbmNlIGN5Y2xlCisgIHdvdWxkIGJlIGZpbmFsaXplZCBhZnRlciB0aGUgcmVmZXJlbmNlIHRvIGl0cyB1bmRlcmx5aW5nIEJ1ZmZlcmVkUldQYWlyJ3MKKyAgd3JpdGVyIGdvdCBjbGVhcmVkIGJ5IHRoZSBHQy4KKworLSBJc3N1ZSAjMTI4ODE6IGN0eXBlczogRml4IHNlZ2ZhdWx0IHdpdGggbGFyZ2Ugc3RydWN0dXJlIGZpZWxkIG5hbWVzLgorCistIElzc3VlICMxMzA1ODogb3NzYXVkaW9kZXY6IGZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIG9uIGVycm9yLiBQYXRjaCBieQorICBUaG9tYXMgSmFyb3NjaC4KKworLSBJc3N1ZSAjMTMwMTM6IGN0eXBlczogRml4IGEgcmVmZXJlbmNlIGxlYWsgaW4gUHlDQXJyYXlUeXBlX2Zyb21fY3R5cGUuCisgIFRoYW5rcyB0byBTdW1hbiBTYWhhIGZvciBmaW5kaW5nIHRoZSBidWcgYW5kIHByb3ZpZGluZyBhIHBhdGNoLgorCistIElzc3VlICMxMzAyMjogRml4OiBfbXVsdGlwcm9jZXNzaW5nLnJlY3ZmZCgpIGRvZXNuJ3QgY2hlY2sgdGhhdAorICBmaWxlIGRlc2NyaXB0b3Igd2FzIGFjdHVhbGx5IHJlY2VpdmVkLgorCistIElzc3VlICMxMTcyNzExOiBBZGQgJ2xvbmcgbG9uZycgc3VwcG9ydCB0byB0aGUgYXJyYXkgbW9kdWxlLgorICBJbml0aWFsIHBhdGNoIGJ5IE9yZW4gVGlyb3NoIGFuZCBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjMTI0ODM6IGN0eXBlczogRml4IGEgY3Jhc2ggd2hlbiB0aGUgZGVzdHJ1Y3Rpb24gb2YgYSBjYWxsYmFjaworICBvYmplY3QgdHJpZ2dlcnMgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgorCistIElzc3VlICMxMjk1MDogRml4IHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBpbiBtdWx0aXByb2Nlc3NpbmcsIHVuZGVyCisgIE9wZW5JbmRpYW5hL0lsbHVtb3MuCisKKy0gSXNzdWUgIzEyNzY0OiBGaXggYSBjcmFzaCBpbiBjdHlwZXMgd2hlbiB0aGUgbmFtZSBvZiBhIFN0cnVjdHVyZSBmaWVsZCBpcyBub3QKKyAgYSBzdHJpbmcuCisKKy0gSXNzdWUgIzExMjQxOiBzdWJjbGFzc2VzIG9mIGN0eXBlcy5BcnJheSBjYW4gbm93IGJlIHN1YmNsYXNzZWQuCisKKy0gSXNzdWUgIzk2NTE6IEZpeCBhIGNyYXNoIHdoZW4gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKDApIHdhcyBwYXNzZWQgdG8KKyAgc29tZSBmdW5jdGlvbnMgbGlrZSBmaWxlLndyaXRlKCkuCisKKy0gSXNzdWUgIzEwMzA5OiBEZWZpbmUgX0dOVV9TT1VSQ0Ugc28gdGhhdCBtcmVtYXAoKSBnZXRzIHRoZSBwcm9wZXIKKyAgc2lnbmF0dXJlLiAgV2l0aG91dCB0aGlzLCBhcmNoaXRlY3R1cmVzIHdoZXJlIHNpemVvZiB2b2lkKiAhPSBzaXplb2YgaW50IGFyZQorICBicm9rZW4uICBQYXRjaCBnaXZlbiBieSBIYWxsdmFyZCBCIEZ1cnVzZXRoLgorCistIElzc3VlICMxMjA1MTogRml4IHNlZ2ZhdWx0IGluIGpzb24uZHVtcHMoKSB3aGlsZSBlbmNvZGluZyBoaWdobHktbmVzdGVkCisgIG9iamVjdHMgdXNpbmcgdGhlIEMgYWNjZWxlcmF0aW9ucy4KKworLSBJc3N1ZSAjMTIwMTc6IEZpeCBzZWdmYXVsdCBpbiBqc29uLmxvYWRzKCkgd2hpbGUgZGVjb2RpbmcgaGlnaGx5LW5lc3RlZAorICBvYmplY3RzIHVzaW5nIHRoZSBDIGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzE4Mzg6IFByZXZlbnQgc2VnZmF1bHQgaW4gY3R5cGVzLCB3aGVuIF9hc19wYXJhbWV0ZXJfIG9uIGEgY2xhc3MgaXMgc2V0CisgIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzExNjg5OiBGaXggYSB2YXJpYWJsZSBzY29waW5nIGVycm9yIGluIGFuIHNxbGl0ZTMgdGVzdAorCistIElzc3VlICMxMzc4NjogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgJ3RyYWNlJyBsb25nIG9wdGlvbiBmcm9tIHJlZ3J0ZXN0LnB5LgorCistIElzc3VlICMxMzcyNTogRml4IHJlZ3J0ZXN0IHRvIHJlY29nbml6ZSB0aGUgZG9jdW1lbnRlZCAtZCBmbGFnLgorICBQYXRjaCBieSBFcm5vIFR1a2lhLgorCistIElzc3VlICMxMzMwNDogU2tpcCB0ZXN0IGNhc2UgaWYgdXNlciBzaXRlLXBhY2thZ2VzIGRpc2FibGVkICgtcyBvcgorICBQWVRIT05OT1VTRVJTSVRFKS4gIChQYXRjaCBieSBDYXJsIE1leWVyKQorCistIElzc3VlICM1NjYxOiBBZGQgYSB0ZXN0IGZvciBFQ09OTlJFU0VUL0VQSVBFIGhhbmRsaW5nIHRvIHRlc3RfYXN5bmNvcmUuIFBhdGNoCisgIGJ5IFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxMzIxODogRml4IHRlc3Rfc3NsIGZhaWx1cmVzIG9uIERlYmlhbi9VYnVudHUuCisKKy0gUmUtZW5hYmxlIGxpYjJ0bzMncyB0ZXN0X3BhcnNlci5weSB0ZXN0cywgdGhvdWdoIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZQorICAoc2VlIGlzc3VlIDEzMTI1KS4KKworLSBJc3N1ZSAjMTI2NTY6IEFkZCB0ZXN0cyBmb3IgSVB2NiBhbmQgVW5peCBzb2NrZXRzIHRvIHRlc3RfYXN5bmNvcmUuCisKKy0gSXNzdWUgIzY0ODQ6IEFkZCB1bml0IHRlc3RzIGZvciBtYWlsY2FwIG1vZHVsZSAocGF0Y2ggYnkgR3JlZ29yeSBOb2ZpKQorCistIElzc3VlICMxMTY1MTogSW1wcm92ZSB0aGUgTWFrZWZpbGUgdGVzdCB0YXJnZXRzIHRvIHJ1biBtb3JlIG9mIHRoZSB0ZXN0IHN1aXRlCisgIG1vcmUgcXVpY2tseS4gVGhlIC0tbXVsdGlwcm9jZXNzIG9wdGlvbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0LCByZWR1Y2luZworICB0aGUgYW1vdW50IG9mIHRpbWUgbmVlZGVkIHRvIHJ1biB0aGUgdGVzdHMuICJtYWtlIHRlc3QiIGFuZCAibWFrZSBxdWlja3Rlc3QiCisgIG5vdyBpbmNsdWRlIHNvbWUgcmVzb3VyY2UtaW50ZW5zaXZlIHRlc3RzLCBidXQgbm8gbG9uZ2VyIHJ1biB0aGUgdGVzdCBzdWl0ZQorICB0d2ljZSB0byBjaGVjayBmb3IgYnVncyBpbiAucHljIGdlbmVyYXRpb24uIFRvb2xzL3NjcmlwdHMvcnVuX3Rlc3QucHkgcHJvdmlkZXMKKyAgYW4gZWFzeSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB3YXkgdG8gcnVuIHRlc3Qgc3VpdGUgd2l0aCBzZW5zaWJsZSBkZWZhdWx0cy4KKworLSBJc3N1ZSAjMTIzMzE6IFRoZSB0ZXN0IHN1aXRlIGZvciB0aGUgcGFja2FnaW5nIG1vZHVsZSBjYW4gbm93IHJ1biBmcm9tIGFuCisgIGluc3RhbGxlZCBQeXRob24uCisKKy0gSXNzdWUgIzEyMzMxOiBUaGUgdGVzdCBzdWl0ZSBmb3IgbGliMnRvMyBjYW4gbm93IHJ1biBmcm9tIGFuIGluc3RhbGxlZAorICBQeXRob24uCisKKy0gSXNzdWUgIzEyNjI2OiBJbiByZWdydGVzdCwgYWxsb3cgdG8gZmlsdGVyIHRlc3RzIHVzaW5nIGEgZ2xvYiBmaWx0ZXIKKyAgd2l0aCB0aGUgYGAtbWBgIChvciBgYC0tbWF0Y2hgYCkgb3B0aW9uLiAgVGhpcyB3b3JrcyB3aXRoIGFsbCB0ZXN0IGNhc2VzCisgIHVzaW5nIHRoZSB1bml0dGVzdCBtb2R1bGUuICBUaGlzIGlzIHVzZWZ1bCB3aXRoIGxvbmcgdGVzdCBzdWl0ZXMKKyAgc3VjaCBhcyB0ZXN0X2lvIG9yIHRlc3Rfc3VicHJvY2Vzcy4KKworLSBJc3N1ZSAjMTI2MjQ6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byBmYWlsIGFmdGVyIHRoZSBmaXJzdCBmYWlsdXJlIHdoZW4KKyAgcnVubmluZyBpbiB2ZXJib3NlIG1vZGUgKGBgLXZgYCBvciBgYC1XYGApLCBieSB1c2luZyB0aGUgYGAtLWZhaWxmYXN0YGAKKyAgKG9yIGBgLUdgYCkgb3B0aW9uIHRvIHJlZ3J0ZXN0LiAgVGhpcyBpcyB1c2VmdWwgd2l0aCBsb25nIHRlc3Qgc3VpdGVzCisgIHN1Y2ggYXMgdGVzdF9pbyBvciB0ZXN0X3N1YnByb2Nlc3MuCisKKy0gSXNzdWUgIzEyNTg3OiBDb3JyZWN0IGZhdWx0eSB0ZXN0IGZpbGUgYW5kIHJlZmVyZW5jZSBpbiB0ZXN0X3Rva2VuaXplLgorICAoUGF0Y2ggYnkgUm9iZXJ0IFhpYW8pCisKKy0gSXNzdWUgIzEyNTczOiBBZGQgcmVzb3VyY2UgY2hlY2tzIGZvciBkYW5nbGluZyBUaHJlYWQgYW5kIFByb2Nlc3Mgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTI1NDk6IENvcnJlY3QgdGVzdF9wbGF0Zm9ybSB0byBub3QgZmFpbCB3aGVuIE9TIFggcmV0dXJucyAneDg2XzY0JworICBhcyB0aGUgcHJvY2Vzc29yIHR5cGUgb24gc29tZSBNYWMgc3lzdGVtcy4KKworLSBTa2lwIG5ldHdvcmsgdGVzdHMgd2hlbiBnZXRhZGRyaW5mbygpIHJldHVybnMgRUFJX0FHQUlOLCBtZWFuaW5nIGEgdGVtcG9yYXJ5CisgIGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uLgorCistIElzc3VlICMxMTgxMjogU29sdmUgdHJhbnNpZW50IHNvY2tldCBmYWlsdXJlIHRvIGNvbm5lY3QgdG8gJ2xvY2FsaG9zdCcKKyAgaW4gdGVzdF90ZWxuZXRsaWIucHkuCisKKy0gU29sdmVkIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIHRlc3RfdGVsbmV0bGliLnB5LiBSZWxhdGVkIHRvIGlzc3VlICMxMTgxMi4KKworLSBBdm9pZCBmYWlsaW5nIGluIHRlc3Rfcm9ib3RwYXJzZXIgd2hlbiBtdWVibGVzbW9yYWxlZGEuY29tIGlzIGZsYWt5IGFuZAorICBhbiBvdmVyemVhbG91cyBETlMgc2VydmljZSAoZS5nLiBPcGVuRE5TKSByZWRpcmVjdHMgdG8gYSBwbGFjZWhvbGRlcgorICBXZWIgc2l0ZS4KKworLSBBdm9pZCBmYWlsaW5nIGluIHRlc3RfdXJsbGlibmV0LnRlc3RfYmFkX2FkZHJlc3Mgd2hlbiBzb21lIG92ZXJ6ZWFsb3VzCisgIEROUyBzZXJ2aWNlIChlLmcuIE9wZW5ETlMpIHJlc29sdmVzIGEgbm9uLWV4aXN0ZW50IGRvbWFpbiBuYW1lLiAgVGhlIHRlc3QKKyAgaXMgbm93IHNraXBwZWQgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTI0NDA6IFdoZW4gdGVzdGluZyB3aGV0aGVyIHNvbWUgYml0cyBpbiBTU0xDb250ZXh0Lm9wdGlvbnMgY2FuIGJlCisgIHJlc2V0LCBjaGVjayB0aGUgdmVyc2lvbiBvZiB0aGUgT3BlblNTTCBoZWFkZXJzIFB5dGhvbiB3YXMgY29tcGlsZWQgYWdhaW5zdCwKKyAgcmF0aGVyIHRoYW4gdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgT3BlblNTTCBsaWJyYXJ5LgorCistIElzc3VlICMxMTUxMjogQWRkIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIGNnaXRiIG1vZHVsZS4gUGF0Y2ggYnkgUm9iYmllIENsZW1vbnMuCisKKy0gSXNzdWUgIzEyNDk3OiBJbnN0YWxsIHRlc3QvZGF0YSB0byBwcmV2ZW50IGZhaWx1cmVzIG9mIHRoZSB2YXJpb3VzIGNvZGVjbWFwcworICB0ZXN0cy4KKworLSBJc3N1ZSAjMTI0OTY6IEluc3RhbGwgdGVzdC9jYXBhdGggZGlyZWN0b3J5IHRvIHByZXZlbnQgdGVzdF9jb25uZWN0X2NhcGF0aAorICB0ZXN0Y2FzZSBmYWlsdXJlIGluIHRlc3Rfc3NsLgorCistIElzc3VlICMxMjQ2OTogUnVuIHdha2V1cCBhbmQgcGVuZGluZyBzaWduYWwgdGVzdHMgaW4gYSBzdWJwcm9jZXNzIHRvIHJ1biB0aGUKKyAgdGVzdCBpbiBhIGZyZXNoIHByb2Nlc3Mgd2l0aCBvbmx5IG9uZSB0aHJlYWQgYW5kIHRvIG5vdCBjaGFuZ2Ugc2lnbmFsCisgIGhhbmRsaW5nIG9mIHRoZSBwYXJlbnQgcHJvY2Vzcy4KKworLSBJc3N1ZSAjODcxNjogQXZvaWQgY3Jhc2hlcyBjYXVzZWQgYnkgQXF1YSBUayBvbiBPU1ggd2hlbiBhdHRlbXB0aW5nIHRvIHJ1bgorICB0ZXN0X3RrIG9yIHRlc3RfdHRrX2d1aW9ubHkgdW5kZXIgYSB1c2VybmFtZSB0aGF0IGlzIG5vdCBjdXJyZW50bHkgbG9nZ2VkCisgIGluIHRvIHRoZSBjb25zb2xlIHdpbmRvd3NlcnZlciAoYXMgbWF5IGJlIHRoZSBjYXNlIHVuZGVyIGJ1aWxkYm90IG9yIHNzaCkuCisKKy0gSXNzdWUgIzEyNDA3OiBFeHBsaWNpdGx5IHNraXAgdGVzdF9jYXBpLkVtYmVkZGluZ1Rlc3QgdW5kZXIgV2luZG93cy4KKworLSBJc3N1ZSAjMTI0MDA6IHJlZ3J0ZXN0IC1XIGRvZXNuJ3QgcmVydW4gdGhlIHRlc3RzIHR3aWNlIGFueW1vcmUsIGJ1dCBjYXB0dXJlcworICB0aGUgb3V0cHV0IGFuZCBkaXNwbGF5cyBpdCBvbiBmYWlsdXJlIGluc3RlYWQuIHJlZ3J0ZXN0IC12IGRvZXNuJ3QgcHJpbnQgdGhlCisgIGVycm9yIHR3aWNlIGFueW1vcmUgaWYgdGhlcmUgaXMgb25seSBvbmUgZXJyb3IuCisKKy0gSXNzdWUgIzEyMTQxOiBJbnN0YWxsIGNvcGllcyBvZiB0ZW1wbGF0ZSBDIG1vZHVsZSBmaWxlIHNvIHRoYXQKKyAgdGVzdF9idWlsZF9leHQgb2YgdGVzdF9kaXN0dXRpbHMgYW5kIHRlc3RfY29tbWFuZF9idWlsZF9leHQgb2YKKyAgdGVzdF9wYWNrYWdpbmcgYXJlIG5vIGxvbmdlciBzaWxlbnRseSBza2lwcGVkIHdoZW4KKyAgcnVuIG91dHNpZGUgb2YgYSBidWlsZCBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzg3NDY6IEFkZCBhZGRpdGlvbmFsIHRlc3RzIGZvciBvcy5jaGZsYWdzKCkgYW5kIG9zLmxjaGZsYWdzKCkuCisgIFBhdGNoIGJ5IEdhcnJldHQgQ29vcGVyLgorCistIElzc3VlICMxMDczNjogRml4IHRlc3RfdHRrIHRlc3Rfd2lkZ2V0cyBmYWlsdXJlcyB3aXRoIENvY29hIFRrIDguNS45CisgIDIuOCArICBvbiBNYWMgT1MgWC4gIChQYXRjaCBieSBSb25hbGQgT3Vzc29yZW4pCisKKy0gSXNzdWUgIzEyMDU3OiBBZGQgdGVzdHMgZm9yIElTTyAyMDIyIGNvZGVjcyAoaXNvMjAyMl9qcCwgaXNvMjAyMl9qcF8yLAorICBpc28yMDIyX2tyKS4KKworLSBJc3N1ZSAjMTIwOTY6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIHRlc3RfdGhyZWFkaW5nLnRlc3Rfd2FpdGZvcigpLiBQYXRjaAorICB3cml0dGVuIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTE2MTQ6IGltcG9ydCBfX2hlbGxvX18gcHJpbnRzICJIZWxsbyBXb3JsZCEiLiBQYXRjaCB3cml0dGVuIGJ5CisgIEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjNTcyMzogSW1wcm92ZSBqc29uIHRlc3RzIHRvIGJlIGV4ZWN1dGVkIHdpdGggYW5kIHdpdGhvdXQgYWNjZWxlcmF0aW9ucy4KKworLSBJc3N1ZSAjMTIwNDE6IE1ha2UgdGVzdF93YWl0MyBtb3JlIHJvYnVzdC4KKworLSBJc3N1ZSAjMTE4NzM6IENoYW5nZSByZWdleCBpbiB0ZXN0X2NvbXBpbGVhbGwgdG8gZml4IG9jY2FzaW9uYWwgZmFpbHVyZXMgd2hlbgorICB3aGVuIHRoZSByYW5kb21seSBnZW5lcmF0ZWQgdGVtcG9yYXJ5IHBhdGggaGFwcGVuZWQgdG8gbWF0Y2ggdGhlIHJlZ2V4LgorCistIElzc3VlICMxMTk1ODogRml4IEZUUCB0ZXN0cyBmb3IgSVB2NiwgYmluZCB0byAiOjoxIiBpbnN0ZWFkIG9mICJsb2NhbGhvc3QiLgorICBQYXRjaCB3cml0dGVuIGJ5IENoYXJsZXMtRnJhbmNvaXMgTmF0YWxpLgorCistIElzc3VlICM4NDA3LCAjMTE4NTk6IEZpeCB0ZXN0cyBvZiB0ZXN0X2lvIHVzaW5nIHRocmVhZHMgYW5kIGFuIGFsYXJtOiB1c2UKKyAgcHRocmVhZF9zaWdtYXNrKCkgdG8gZW5zdXJlIHRoYXQgdGhlIFNJR0FMUk0gc2lnbmFsIGlzIHJlY2VpdmVkIGJ5IHRoZSBtYWluCisgIHRocmVhZC4KKworLSBJc3N1ZSAjMTE4MTE6IEZhY3RvciBvdXQgZGV0ZWN0aW9uIG9mIElQdjYgc3VwcG9ydCBvbiB0aGUgY3VycmVudCBob3N0CisgIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBhcyBgYHRlc3Quc3VwcG9ydC5JUFY2X0VOQUJMRURgYC4gIFBhdGNoIGJ5CisgIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTA5MTQ6IEFkZCBhIG1pbmltYWwgZW1iZWRkaW5nIHRlc3QgdG8gdGVzdF9jYXBpLgorCistIElzc3VlICMxMTIyMzogU2tpcCB0ZXN0X2xvY2tfYWNxdWlyZV9pbnRlcnJ1cHRpb24oKSBhbmQKKyAgdGVzdF9ybG9ja19hY3F1aXJlX2ludGVycnVwdGlvbigpIG9mIHRlc3RfdGhyZWFkc2lnbmFscyBpZiBhIHRocmVhZCBsb2NrIGlzCisgIGltcGxlbWVudGVkIHVzaW5nIGEgUE9TSVggbXV0ZXggYW5kIGEgUE9TSVggY29uZGl0aW9uIHZhcmlhYmxlLiBBIFBPU0lYCisgIGNvbmRpdGlvbiB2YXJpYWJsZSBjYW5ub3QgYmUgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgKGUuZy4gb24gTGludXgsIHRoZQorICBmdXRleCBzeXN0ZW0gY2FsbCBpcyByZXN0YXJ0ZWQpLgorCistIElzc3VlICMxMTc5MDogRml4IHNwb3JhZGljIGZhaWx1cmVzIGluIHRlc3RfbXVsdGlwcm9jZXNzaW5nLldpdGhQcm9jZXNzZXNUZXN0Q29uZGl0aW9uLgorCistIEZpeCBwb3NzaWJsZSAiZmlsZSBhbHJlYWR5IGV4aXN0cyIgZXJyb3Igd2hlbiBydW5uaW5nIHRoZSB0ZXN0cyBpbiBwYXJhbGxlbC4KKworLSBJc3N1ZSAjMTE3MTk6IEZpeCBtZXNzYWdlIGFib3V0IHVuZXhwZWN0ZWQgdGVzdF9tc2lsaWIgc2tpcCBvbiBub24tV2luZG93cworICBwbGF0Zm9ybXMuIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KKworLSBJc3N1ZSAjMTE3Mjc6IEFkZCBhIC0tdGltZW91dCBvcHRpb24gdG8gcmVncnRlc3Q6IGlmIGEgdGVzdCB0YWtlcyBtb3JlIHRoYW4KKyAgVElNRU9VVCBzZWNvbmRzLCBkdW1wcyB0aGUgdHJhY2ViYWNrIG9mIGFsbCB0aHJlYWRzIGFuZCBleGl0cy4KKworLSBJc3N1ZSAjMTE2NTM6IGZpeCAtVyB3aXRoIC1qIGluIHJlZ3J0ZXN0LgorCistIFRoZSBlbWFpbCB0ZXN0IHN1aXRlIG5vdyBsaXZlcyBpbiB0aGUgTGliL3Rlc3QvdGVzdF9lbWFpbCBwYWNrYWdlLiAgVGhlIHRlc3QKKyAgaGFybmVzcyBjb2RlIGhhcyBhbHNvIGJlZW4gbW9kZXJuaXplZCB0byBhbGxvdyB1c2Ugb2YgbmV3IHVuaXR0ZXN0IGZlYXR1cmVzLgorCistIHJlZ3J0ZXN0IG5vdyBkaXNjb3ZlcnMgdGVzdCBwYWNrYWdlcyBhcyB3ZWxsIGFzIHRlc3QgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTE1Nzc6IGltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiBiaW5oZXgucHkuIFBhdGNoIGJ5IEFya2FkeSBLb3BseWFyb3YuCisKKy0gTmV3IHRlc3RfY3Jhc2hlcnMgYWRkZWQgdG8gZXhlcmNpc2UgdGhlIHNjcmlwdHMgaW4gdGhlIExpYi90ZXN0L2NyYXNoZXJzCisgIGRpcmVjdG9yeSBhbmQgY29uZmlybSB0aGV5IGZhaWwgYXMgZXhwZWN0ZWQKKworLSBJc3N1ZSAjMTE1Nzg6IGFkZGVkIHRlc3QgZm9yIHRoZSB0aW1laXQgbW9kdWxlLiAgUGF0Y2ggYnkgTWljaGFlbCBIZW5yeS4KKworLSBJc3N1ZSAjMTE1MDM6IGltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiBwb3NpeHBhdGgucHkuIFBhdGNoIGJ5IEV2YW4gRGFuZHJlYS4KKworLSBJc3N1ZSAjMTE1MDU6IGltcHJvdmVzIHRlc3QgY292ZXJhZ2Ugb2Ygc3RyaW5nLnB5LCBpbmNyZWFzZXMgZ3JhbnVsYXJpdHkgb2YKKyAgc3RyaW5nLkZvcm1hdHRlciB0ZXN0cy4gSW5pdGlhbCBwYXRjaCBieSBBbGljaWEgQXJsZW4uCisKKy0gSXNzdWUgIzExNTQ4OiBJbXByb3ZlIHRlc3QgY292ZXJhZ2Ugb2YgdGhlIHNodXRpbCBtb2R1bGUuIFBhdGNoIGJ5CisgIEV2YW4gRGFuZHJlYS4KKworLSBJc3N1ZSAjMTE1NTQ6IFJlYWN0aXZhdGVkIHRlc3RfZW1haWxfY29kZWNzLgorCistIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHkuIFBhdGNoIGJ5IEFsaWNpYQorICBBcmxlbgorCistIElzc3VlICMxMTQ5MDogdGVzdF9zdWJwcm9jZXNzOnRlc3RfbGVha2luZ19mZHNfb25fZXJyb3Igbm8gbG9uZ2VyIGdpdmVzIGEKKyAgZmFsc2UgcG9zaXRpdmUgaWYgdGhlIGxhc3QgZGlyZWN0b3J5IGluIHRoZSBwYXRoIGlzIGluYWNjZXNzaWJsZS4KKworLSBJc3N1ZSAjMTEyMjM6IEZpeCB0ZXN0X3RocmVhZHNpZ25hbHMgdG8gZmFpbCwgbm90IGhhbmcsIHdoZW4gdGhlCisgIG5vbi1zZW1hcGhvcmUgaW1wbGVtZW50YXRpb24gb2YgbG9ja3MgaXMgdXNlZCB1bmRlciBQT1NJWC4KKworLSBJc3N1ZSAjMTA5MTE6IEFkZCB0ZXN0cyBvbiBDR0kgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycy4gUGF0Y2ggd3JpdHRlbiBieQorICBQaWVycmUgUXVlbnRlbC4KKworLSBJc3N1ZSAjOTkzMTogRml4IGhhbmdzIGluIEdVSSB0ZXN0cyB1bmRlciBXaW5kb3dzIGluIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAgUGF0Y2ggYnkgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzEwNTEyOiBQcm9wZXJseSBjbG9zZSBzb2NrZXRzIHVuZGVyIHRlc3QudGVzdF9jZ2kuCisKKy0gSXNzdWUgIzEwOTkyOiBNYWtlIHRlc3RzIHBhc3MgdW5kZXIgY292ZXJhZ2UuCisKKy0gSXNzdWUgIzEwODI2OiBQcmV2ZW50IHNwb3JhZGljIGZhaWx1cmUgaW4gdGVzdF9zdWJwcm9jZXNzIG9uIFNvbGFyaXMgZHVlCisgIHRvIG9wZW4gZG9vciBmaWxlcy4KKworLSBJc3N1ZSAjMTA5OTA6IFByZXZlbnQgdGVzdHMgZnJvbSBjbG9iYmVyaW5nIGEgc2V0IHRyYWNlIGZ1bmN0aW9uLgorCitDLUFQSQorLS0tLS0KKworLSBBZGQgUHlPYmplY3RfR2VuZXJpY0dldERpY3QgYW5kIFB5T2JqZWN0X0dlbmVyaVNldERpY3QuIFRoZXkgYXJlIGdlbmVyaWMKKyAgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgZ2V0dGVyIGFuZCBzZXR0ZXIgb2YgYSBgYF9fZGljdF9fYGAgZGVzY3JpcHRvciBvZiBDCisgIHR5cGVzLgorCistIElzc3VlICMxMzcyNzogQWRkIDMgbWFjcm9zIHRvIGFjY2VzcyBQeURhdGVUaW1lX0RlbHRhIG1lbWJlcnM6CisgIFB5RGF0ZVRpbWVfREVMVEFfR0VUX0RBWVMsIFB5RGF0ZVRpbWVfREVMVEFfR0VUX1NFQ09ORFMsCisgIFB5RGF0ZVRpbWVfREVMVEFfR0VUX01JQ1JPU0VDT05EUy4KKworLSBJc3N1ZSAjMTA1NDI6IEFkZCA0IG1hY3JvcyB0byB3b3JrIHdpdGggc3Vycm9nYXRlczogUHlfVU5JQ09ERV9JU19TVVJST0dBVEUsCisgIFB5X1VOSUNPREVfSVNfSElHSF9TVVJST0dBVEUsIFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURSwKKyAgUHlfVU5JQ09ERV9KT0lOX1NVUlJPR0FURVMuCisKKy0gSXNzdWUgIzEyNzI0OiBBZGQgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEIG1hY3JvIGZvciByZXR1cm5pbmcgTm90SW1wbGVtZW50ZWQuCisKKy0gUFlfUEFUQ0hMRVZFTF9SRVZJU0lPTiBoYXMgYmVlbiByZW1vdmVkLCBzaW5jZSBpdCdzIG1lYW5pbmdsZXNzIHdpdGgKKyAgTWVyY3VyaWFsLgorCistIElzc3VlICMxMjE3MzogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsIGlzIG5vdyBgY29uc3QKKyAgY2hhciAqYCBpbnN0ZWFkIG9mIGBjaGFyICpgLgorCistIElzc3VlICMxMjM4MDogUHlBcmdfUGFyc2VUdXBsZSBub3cgYWNjZXB0cyBhIGJ5dGVhcnJheSBmb3IgdGhlICdjJyBmb3JtYXQuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZXMgIzEzNDkxIGFuZCAjMTM5OTU6IEZpeCBtYW55IGVycm9ycyBpbiBzcWxpdGUzIGRvY3VtZW50YXRpb24uCisgIEluaXRpYWwgcGF0Y2ggZm9yICMxMzQ5MSBieSBKb2hhbm5lcyBWb2dlbC4KKworLSBJc3N1ZSAjMTM0MDI6IERvY3VtZW50IGFic29sdXRlbmVzcyBvZiBzeXMuZXhlY3V0YWJsZS4KKworLSBJc3N1ZSAjMTM4ODM6IFBZVEhPTkNBU0VPSyBhbHNvIHdvcmtzIG9uIE9TIFguCisKKy0gSXNzdWUgIzkwMjE6IEFkZCBhbiBpbnRyb2R1Y3Rpb24gdG8gdGhlIGNvcHkgbW9kdWxlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzYwMDU6IEV4YW1wbGVzIGluIHRoZSBzb2NrZXQgbGlicmFyeSBkb2N1bWVudGF0aW9uIHVzZSBzZW5kYWxsLCB3aGVyZQorICByZWxldmFudCwgaW5zdGVhZCBzZW5kIG1ldGhvZC4KKworLSBJc3N1ZSAjMTI3OTg6IFVwZGF0ZWQgdGhlIG1pbWV0eXBlcyBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxMjk0OTogRG9jdW1lbnQgdGhlIGt3b25seWFyZ2NvdW50IGFyZ3VtZW50IGZvciB0aGUgUHlDb2RlX05ldworICBDIEFQSSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTM1MTM6IEZpeCBpby5JT0Jhc2UgZG9jdW1lbnRhdGlvbiB0byBjb3JyZWN0bHkgbGluayB0byB0aGUKKyAgaW8uSU9CYXNlLnJlYWRsaW5lIG1ldGhvZCBpbnN0ZWFkIG9mIHRoZSByZWFkbGluZSBtb2R1bGUuCisKKy0gSXNzdWUgIzEzMjM3OiBSZW9yZ2FuaXNlIHN1YnByb2Nlc3MgZG9jdW1lbnRhdGlvbiB0byBlbXBoYXNpc2UgY29udmVuaWVuY2UKKyAgZnVuY3Rpb25zIGFuZCB0aGUgbW9zdCBjb21tb25seSBuZWVkZWQgYXJndW1lbnRzIHRvIFBvcGVuLgorCistIElzc3VlICMxMzE0MTogRGVtb25zdHJhdGUgcmVjb21tZW5kZWQgc3R5bGUgZm9yIHNvY2tldHNlcnZlciBleGFtcGxlcy4KKworLSBJc3N1ZSAjMTE4MTg6IEZpeCB0ZW1wZmlsZSBleGFtcGxlcyBmb3IgUHl0aG9uIDMuCisKKwogV2hhdCdzIE5ldyBpbiBQeXRob24gMy4yPwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC03MDcsNyArNDgwNCw3IEBACiAtIElzc3VlICMxNDg2NzEzOiBIVE1MUGFyc2VyIG5vdyBoYXMgYW4gb3B0aW9uYWwgdG9sZXJhbnQgbW9kZSB3aGVyZSBpdCB0cmllcyB0bwogICBndWVzcyBhdCB0aGUgY29ycmVjdCBwYXJzaW5nIG9mIGludmFsaWQgaHRtbC4KIAotLSBJc3N1ZSAjMTA1NTQ6IEFkZCBjb250ZXh0IG1hbmFnZXIgc3VwcG9ydCB0byBzdWJwcm9jZXNzLlBvcGVuIG9iamVjdHMuCistIElzc3VlICMxMDU1NDogQWRkIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCBzdXBwb3J0IHRvIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0cy4KIAogLSBJc3N1ZSAjODk4OTogZW1haWwudXRpbHMubWFrZV9tc2dpZCBub3cgaGFzIGEgZG9tYWluIHBhcmFtZXRlciB0aGF0IGNhbgogICBvdmVycmlkZSB0aGUgZG9tYWluIG5hbWUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIG1zZ2lkLgpAQCAtMTA2OSw3ICs1MTY2LDcgQEAKIC0gSXNzdWUgIzEwMjUzOiBGaWxlSU8gbGVha3MgYSBmaWxlIGRlc2NyaXB0b3Igd2hlbiB0cnlpbmcgdG8gb3BlbiBhIGZpbGUgZm9yCiAgIGFwcGVuZCB0aGF0IGlzbid0IHNlZWthYmxlLiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgogCi0tIFN1cHBvcnQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIGZvciBmaWxlLWxpa2Ugb2JqZWN0cyByZXR1cm5lZCBieSBtYWlsYm94CistIFN1cHBvcnQgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIGZvciBmaWxlLWxpa2Ugb2JqZWN0cyByZXR1cm5lZCBieSBtYWlsYm94CiAgIGBgZ2V0X2ZpbGUoKWBgIG1ldGhvZHMuCiAKIC0gSXNzdWUgIzEwMjQ2OiB1dS5lbmNvZGUgZGlkbid0IGNsb3NlIGZpbGUgb2JqZWN0cyBleHBsaWNpdGx5IHdoZW4gZmlsZW5hbWVzCkBAIC0xMjAzLDcgKzUzMDAsNyBAQAogCiAtIElzc3VlICMxMDE0MzogVXBkYXRlICJvcy5wYXRoY29uZiIgdmFsdWVzLgogCi0tIElzc3VlICM2NTE4OiBTdXBwb3J0IGNvbnRleHQgbWFuYWdlciBwcm90Y29sIGZvciBvc3NhdWRpb2RldiB0eXBlcy4KKy0gSXNzdWUgIzY1MTg6IFN1cHBvcnQgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIGZvciBvc3NhdWRpb2RldiB0eXBlcy4KIAogLSBJc3N1ZSAjNjc4MjUwOiBNYWtlIG1tYXAgZmx1c2ggYSBub29wIG9uIEFDQ0VTU19SRUFEIGFuZCBBQ0NFU1NfQ09QWS4KIApAQCAtMTgxMiw3ICs1OTA5LDcgQEAKIAogLSBJc3N1ZSAjODEwNTogVmFsaWRhdGUgZmlsZSBkZXNjcmlwdG9yIHBhc3NlZCB0byBtbWFwLm1tYXAgb24gV2luZG93cy4KIAotLSBJc3N1ZSAjODA0NjogQWRkIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCBzdXBwb3J0IGFuZCAuY2xvc2VkIHByb3BlcnR5IHRvIG1tYXAKKy0gSXNzdWUgIzgwNDY6IEFkZCBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgc3VwcG9ydCBhbmQgLmNsb3NlZCBwcm9wZXJ0eSB0byBtbWFwCiAgIG9iamVjdHMuCiAKIExpYnJhcnkKQEAgLTI4MTksNyArNjkxNiw3IEBACiAtIFRoZSBhdWRpb29wIG1vZHVsZSBub3cgc3VwcG9ydHMgc291bmQgZnJhZ21lbnRzIG9mIGxlbmd0aCBncmVhdGVyIHRoYW4gMioqMzEKICAgYnl0ZXMgb24gNjQtYml0IG1hY2hpbmVzLCBhbmQgaXMgUFlfU1NJWkVfVF9DTEVBTi4KIAotLSBJc3N1ZSAjNDk3MjogQWRkIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgdG8gdGhlIGZ0cGxpYi5GVFAKKy0gSXNzdWUgIzQ5NzI6IEFkZCBzdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHRvIHRoZSBmdHBsaWIuRlRQCiAgIGNsYXNzLgogCiAtIElzc3VlICM4NjY0OiBJbiBweV9jb21waWxlLCBjcmVhdGUgX19weWNhY2hlX18gd2hlbiB0aGUgY29tcGlsZWQgcGF0aCBpcwpAQCAtMzEwNyw3ICs3MjA0LDcgQEAKIC0gSXNzdWUgIzc0OTQ6IGZpeCBhIGNyYXNoIGluIF9sc3Byb2YgKGNQcm9maWxlKSBhZnRlciBjbGVhcmluZyB0aGUgcHJvZmlsZXIsCiAgIHJlc2V0IGFsc28gdGhlIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgcG9pbnRlciBjb250ZXh0LgogCi0tIElzc3VlICM3MjMyOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCB0byB0aGUgVGFyRmlsZQorLSBJc3N1ZSAjNzIzMjogQWRkIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgdG8gdGhlIFRhckZpbGUKICAgY2xhc3MuCiAKIC0gSXNzdWUgIzcyNTA6IEZpeCBpbmZvIGxlYWsgb2Ygb3MuZW52aXJvbiBhY3Jvc3MgbXVsdGktcnVuIHVzZXMgb2YKQEAgLTUxNDUsNyArOTI0Miw3IEBACiAtIElzc3VlICMxNjk2MTk5OiAgQWRkIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSBmb3IgcmFwaWQgYW5kIGNvbnZlbmllbnQKICAgY291bnRpbmcuCiAKLS0gSXNzdWUgIzM4NjA6IEd6aXBGaWxlIGFuZCBCWjJGaWxlIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCistIElzc3VlICMzODYwOiBHemlwRmlsZSBhbmQgQloyRmlsZSBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgogCiAtIElzc3VlICM0ODY3OiBGaXhlZCBhIGNyYXNoIGluIGN0eXBlcyB3aGVuIHBhc3NpbmcgYSBzdHJpbmcgdG8gYQogICBmdW5jdGlvbiB3aXRob3V0IGRlZmluaW5nIGFyZ3R5cGVzLgpkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IDFmMzg5ZjguLmU0MTFjZGIgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTIsMTQgKzIsMzMgQEAKIFB5dGhvbiBOZXdzCiArKysrKysrKysrKwogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNiByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4yPworPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpSZWxlYXNlIGRhdGU6IFhYLVhYWC1YWFhYKgorUmVsZWFzZSBkYXRlOiBYWFhYLVhYLVhYCiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCistIElzc3VlICMyMjI1ODogRml4IHRoZSB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gc2V0X2luaGVyaXRhYmxlKCkgb24gSWxsdW1vcy4KKyAgVGhpcyBwbGF0Zm9ybSBleHBvc2VzIHRoZSBmdW5jdGlvbiBgYGlvY3RsKEZJT0NMRVgpYGAsIGJ1dCBjYWxsaW5nIGl0IGZhaWxzCisgIHdpdGggZXJybm8gaXMgRU5PVFRZOiAiSW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlIi4gc2V0X2luaGVyaXRhYmxlKCkKKyAgbm93IGZhbGxzIGJhY2sgdG8gdGhlIHNsb3dlciBgYGZjbnRsKClgYCAoYGBGX0dFVEZEYGAgYW5kIHRoZW4gYGBGX1NFVEZEYGApLgorCistIElzc3VlICMyMTY2OTogV2l0aCB0aGUgYWlkIG9mIGhldXJpc3RpY3MgaW4gU3ludGF4RXJyb3IuX19pbml0X18sIHRoZQorICBwYXJzZXIgbm93IGF0dGVtcHRzIHRvIGdlbmVyYXRlIG1vcmUgbWVhbmluZ2Z1bCAob3IgYXQgbGVhc3QgbW9yZSBzZWFyY2gKKyAgZW5naW5lIGZyaWVuZGx5KSBlcnJvciBtZXNzYWdlcyB3aGVuICJleGVjIiBhbmQgInByaW50IiBhcmUgdXNlZCBhcworICBzdGF0ZW1lbnRzLgorCistIElzc3VlICMyMTY0MjogSWYgdGhlIGNvbmRpdGlvbmFsIGlmLWVsc2UgZXhwcmVzc2lvbiwgYWxsb3cgYW4gaW50ZWdlciB3cml0dGVuCisgIHdpdGggbm8gc3BhY2UgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSBgYGVsc2VgYCBrZXl3b3JkIChlLmcuIGBgVHJ1ZSBpZiA0MmVsc2UKKyAgRmFsc2VgYCkgdG8gYmUgdmFsaWQgc3ludGF4LgorCistIElzc3VlICMyMTUyMzogRml4IG92ZXItcGVzc2ltaXN0aWMgY29tcHV0YXRpb24gb2YgdGhlIHN0YWNrIGVmZmVjdCBvZgorICBzb21lIG9wY29kZXMgaW4gdGhlIGNvbXBpbGVyLiAgVGhpcyBhbHNvIGZpeGVzIGEgcXVhZHJhdGljIGNvbXBpbGF0aW9uCisgIHRpbWUgaXNzdWUgbm90aWNlYWJsZSB3aGVuIGNvbXBpbGluZyBjb2RlIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgImFuZCIKKyAgYW5kICJvciIgb3BlcmF0b3JzLgorCiBMaWJyYXJ5CiAtLS0tLS0tCiAKQEAgLTE3LDE5ICszNiw2MDIgQEAKICAgd2l0aCBub24tc3RhbmRhcmQgY29va2llIGhhbmRsaW5nIGluIHNvbWUgV2ViIGJyb3dzZXJzLiAgUmVwb3J0ZWQgYnkKICAgU2VyZ2V5IEJvYnJvdi4KIAorLSBJc3N1ZSAjMjIzODQ6IEFuIGV4Y2VwdGlvbiBpbiBUa2ludGVyIGNhbGxiYWNrIG5vIGxvbmdlciBjcmFzaGVzIHRoZSBwcm9ncmFtCisgIHdoZW4gaXQgaXMgcnVuIHdpdGggcHl0aG9udy5leGUuCisKKy0gSXNzdWUgIzIyMTY4OiBQcmV2ZW50IHR1cnRsZSBBdHRyaWJ1dGVFcnJvciB3aXRoIG5vbi1kZWZhdWx0IENhbnZhcyBvbiBPUyBYLgorCistIElzc3VlICMyMTE0Nzogc3FsaXRlMyBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcmVxdWVzdCBjb250YWlucyBhIG51bGwKKyAgY2hhcmFjdGVyIGluc3RlYWQgb2YgdHJ1bmNhdGUgaXQuICBCYXNlZCBvbiBwYXRjaCBieSBWaWN0b3IgU3Rpbm5lci4KKworLSBJc3N1ZSAjMjE5NTE6IEZpeGVkIGEgY3Jhc2ggaW4gVGtpbnRlciBvbiBBSVggd2hlbiBjYWxsZWQgVGNsIGNvbW1hbmQgd2l0aAorICBlbXB0eSBzdHJpbmcgb3IgdHVwbGUgYXJndW1lbnQuCisKKy0gSXNzdWUgIzIxOTUxOiBUa2ludGVyIG5vdyBtb3N0IGxpa2VseSByYWlzZXMgTWVtb3J5RXJyb3IgaW5zdGVhZCBvZiBjcmFzaAorICBpZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCisKKy0gSXNzdWUgIzIyMzM4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKworLSBJc3N1ZSAjMjIyMjY6IEZpcnN0IGxldHRlciBubyBsb25nZXIgaXMgc3RyaXBwZWQgZnJvbSB0aGUgInN0YXR1cyIga2V5IGluCisgIHRoZSByZXN1bHQgb2YgVHJlZXZpZXcuaGVhZGluZygpLgorCistIElzc3VlICMxOTUyNDogRml4ZWQgcmVzb3VyY2UgbGVhayBpbiB0aGUgSFRUUCBjb25uZWN0aW9uIHdoZW4gYW4gaW52YWxpZAorICByZXNwb25zZSBpcyByZWNlaXZlZC4gIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzIyMDUxOiB0dXJ0bGVkZW1vIG5vIGxvbmdlciByZWxvYWRzIGV4YW1wbGVzIHRvIHJlLXJ1biB0aGVtLgorICBJbml0aWFsaXphdGlvbiBvZiB2YXJpYWJsZXMgYW5kIGd1aSBzZXR1cCBzaG91bGQgYmUgZG9uZSBpbiBtYWluKCksCisgIHdoaWNoIGlzIGNhbGxlZCBlYWNoIHRpbWUgYSBkZW1vIGlzIHJ1biwgYnV0IG5vdCBvbiBpbXBvcnQuCisKKy0gSXNzdWUgIzIxOTMzOiBUdXJ0bGVkZW1vIHVzZXJzIGNhbiBjaGFuZ2UgdGhlIGNvZGUgZm9udCBzaXplIHdpdGggYSBtZW51CisgIHNlbGVjdGlvbiBvciBjb250cm9sKGNvbW1hbmQpICctJyBvciAnKycgb3IgY29udHJvbC1tb3VzZXdoZWVsLgorICBPcmlnaW5hbCBwYXRjaCBieSBMaXRhIENoby4KKworXyBJc3N1ZSAjMjE1OTc6IFRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgdHVydGxlZGVtbyB0ZXh0IHBhbmUgYW5kIHRoZSBkcmF3aW5nCisgIGNhbnZhcyBjYW4gbm93IGJlIGdyYWJiZWQgYW5kIGRyYWdnZWQgd2l0aCBhIG1vdXNlLiAgVGhlIGNvZGUgdGV4dCBwYW5lIGNhbgorICBiZSB3aWRlbmVkIHRvIGVhc2lseSB2aWV3IG9yIGNvcHkgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIHRleHQuICBUaGUgY2FudmFzCisgIGNhbiBiZSB3aWRlbmVkIG9uIHNtYWxsIHNjcmVlbnMuICBPcmlnaW5hbCBwYXRjaGVzIGJ5IEphbiBLYW5pcyBhbmQgTGl0YSBDaG8uCisKKy0gSXNzdWUgIzE4MTMyOiBUdXJ0bGVkZW1vIGJ1dHRvbnMgbm8gbG9uZ2VyIGRpc2FwcGVhciB3aGVuIHRoZSB3aW5kb3cgaXMKKyAgc2hydW5rLiAgT3JpZ2luYWwgcGF0Y2hlcyBieSBKYW4gS2FuaXMgYW5kIExpdGEgQ2hvLgorCistIElzc3VlICMyMjIxNjogc210cGxpYiBub3cgcmVzZXRzIGl0cyBzdGF0ZSBtb3JlIGNvbXBsZXRlbHkgYWZ0ZXIgYSBxdWl0LiAgVGhlCisgIG1vc3Qgb2J2aW91cyBjb25zZXF1ZW5jZSBvZiB0aGUgcHJldmlvdXMgYmVoYXZpb3Igd2FzIGEgU1RBUlRUTFMgZmFpbHVyZQorICBkdXJpbmcgYSBjb25uZWN0L3N0YXJ0dGxzL3F1aXQvY29ubmVjdC9zdGFydHRscyBzZXF1ZW5jZS4KKworLSBJc3N1ZSAjMjIxODU6IEZpeCBhbiBvY2Nhc2lvbmFsIFJ1bnRpbWVFcnJvciBpbiB0aHJlYWRpbmcuQ29uZGl0aW9uLndhaXQoKQorICBjYXVzZWQgYnkgbXV0YXRpb24gb2YgdGhlIHdhaXRlcnMgcXVldWUgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiAgUGF0Y2gKKyAgYnkgRG91ZyBab25na2VyLgorCistIElzc3VlICMyMjE4MjogVXNlIGUuYXJncyB0byB1bnBhY2sgZXhjZXB0aW9ucyBjb3JyZWN0bHkgaW4KKyAgZGlzdHV0aWxzLmZpbGVfdXRpbC5tb3ZlX2ZpbGUuIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBUaGUgd2ViYnJvd3NlciBtb2R1bGUgbm93IHVzZXMgc3VicHJvY2VzcydzIHN0YXJ0X25ld19zZXNzaW9uPVRydWUgcmF0aGVyCisgIHRoYW4gYSBwb3RlbnRpYWxseSByaXNreSBwcmVleGVjX2ZuPW9zLnNldHNpZCBjYWxsLgorCistIElzc3VlICMyMjIzNjogRml4ZWQgVGtpbnRlciBpbWFnZXMgY29weWluZyBvcGVyYXRpb25zIGluIE5vRGVmYXVsdFJvb3QgbW9kZS4KKworLSBJc3N1ZSAjMjIxOTE6IEZpeCB3YXJuaW5ncy5fX2FsbF9fLgorCistIElzc3VlICMxNTY5NjogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgbW1hcCBvYmplY3RzIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzIyMDY4OiBBdm9pZGVkIHJlZmVyZW5jZSBsb29wcyB3aXRoIFZhcmlhYmxlcyBhbmQgRm9udHMgaW4gVGtpbnRlci4KKworLSBJc3N1ZSAjMjIxNjU6IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlciBub3cgc3VwcG9ydHMgdW5kZWNvZGFibGUgZmlsZSBuYW1lcy4KKworLSBJc3N1ZSAjODc5NzogUmFpc2UgSFRUUEVycm9yIG9uIGZhaWxlZCBCYXNpYyBBdXRoZW50aWNhdGlvbiBpbW1lZGlhdGVseS4KKyAgSW5pdGlhbCBwYXRjaCBieSBTYW0gQnVsbC4KKworLSBJc3N1ZSAjMjA3Mjk6IFJlc3RvcmVkIHRoZSB1c2Ugb2YgbGF6eSBpdGVya2V5cygpL2l0ZXJ2YWx1ZXMoKS9pdGVyaXRlbXMoKQorICBpbiB0aGUgbWFpbGJveCBtb2R1bGUuCisKKy0gSXNzdWUgIzIxNDQ4OiBDaGFuZ2VkIEZlZWRQYXJzZXIgZmVlZCgpIHRvIGF2b2lkIE8oTioqMikgYmVoYXZpb3Igd2hlbgorICBwYXJzaW5nIGxvbmcgbGluZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IFJheW1vbmQgSGV0dGluZ2VyLgorCistIElzc3VlICMyMjE4NDogIFRoZSBmdW5jdG9vbHMgTFJVIENhY2hlIGRlY29yYXRvciBmYWN0b3J5IG5vdyBnaXZlcyBhbiBlYXJsaWVyCisgIGFuZCBjbGVhcmVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgdXNlciBmb3JnZXRzIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorCistIElzc3VlICMxNzkyMzogZ2xvYigpIHBhdHRlcm5zIGVuZGluZyB3aXRoIGEgc2xhc2ggbm8gbG9uZ2VyIG1hdGNoIG5vbi1kaXJzIG9uCisgIEFJWC4gIEJhc2VkIG9uIHBhdGNoIGJ5IERlbGhhbGx0LgorCistIElzc3VlICMyMTEyMTogRG9uJ3QgZm9yY2UgM3JkIHBhcnR5IEMgZXh0ZW5zaW9ucyB0byBiZSBidWlsdCB3aXRoCisgIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50LgorCistIElzc3VlICMyMTk3NTogRml4ZWQgY3Jhc2ggd2hlbiB1c2luZyB1bmluaXRpYWxpemVkIHNxbGl0ZTMuUm93IChpbiBwYXJ0aWN1bGFyCisgIHdoZW4gdW5waWNrbGluZyBwaWNrbGVkIHNxbGl0ZTMuUm93KS4gIHNxbGl0ZTMuUm93IGlzIG5vdyBpbml0aWFsaXplZCBpbiB0aGUKKyAgX19uZXdfXygpIG1ldGhvZC4KKworLSBJc3N1ZSAjMjE1ODA6IE5vdyBUa2ludGVyIGNvcnJlY3RseSBoYW5kbGVzIGJ5dGVzIGFyZ3VtZW50cyBwYXNzZWQgdG8gVGsuCisgIEluIHBhcnRpY3VsYXIgdGhpcyBhbGxvd3MgdG8gaW5pdGlhbGl6ZSBpbWFnZXMgZnJvbSBiaW5hcnkgZGF0YS4KKworLSBJc3N1ZSAjMTcxNzI6IE1ha2UgdHVydGxlZGVtbyBzdGFydCBhcyBhY3RpdmUgb24gT1MgWCBldmVuIHdoZW4gcnVuIHdpdGgKKyAgc3VicHJvY2Vzcy4gIFBhdGNoIGJ5IExpdGEgQ2hvLgorCistIElzc3VlICMyMTcwNDogRml4IGJ1aWxkIGVycm9yIGZvciBfbXVsdGlwcm9jZXNzaW5nIHdoZW4gc2VtYXBob3JlcworICBhcmUgbm90IGF2YWlsYWJsZS4gIFBhdGNoIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzLgorCistIEZpeCByZXByKF9zb2NrZXQuc29ja2V0KSBvbiBXaW5kb3dzIDY0LWJpdDogZG9uJ3QgZmFpbCB3aXRoIE92ZXJmbG93RXJyb3IKKyAgb24gY2xvc2VkIHNvY2tldC4gcmVwcihzb2NrZXQuc29ja2V0KSBhbHJlYWR5IHdvcmtzIGZpbmUuCisKKy0gSXNzdWUgIzE2MTMzOiBUaGUgYXN5bmNoYXQuYXN5bmNfY2hhdC5oYW5kbGVfcmVhZCgpIG1ldGhvZCBub3cgaWdub3JlcworICBCbG9ja2luZ0lPRXJyb3IgZXhjZXB0aW9ucy4KKworLSBJc3N1ZSAjMjIwNDQ6IEZpeGVkIHByZW1hdHVyZSBERUNSRUYgaW4gY2FsbF90emluZm9fbWV0aG9kLgorICBQYXRjaCBieSBUb20gRmxhbmFnYW4uCisKKy0gSXNzdWUgIzE5ODg0OiByZWFkbGluZTogRGlzYWJsZSB0aGUgbWV0YSBtb2RpZmllciBrZXkgaWYgc3Rkb3V0IGlzIG5vdAorICBhIHRlcm1pbmFsIHRvIG5vdCB3cml0ZSB0aGUgQU5TSSBzZXF1ZW5jZSAiXDAzM1sxMDM0aCIgaW50byBzdGRvdXQuIFRoaXMKKyAgc2VxdWVuY2UgaXMgdXNlZCBvbiBzb21lIHRlcm1pbmFsIChleDogVEVSTT14dGVybS0yNTZjb2xvciIpIHRvIGVuYWJsZQorICBzdXBwb3J0IG9mIDggYml0IGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzIxODg4OiBwbGlzdGxpYidzIGxvYWQoKSBhbmQgbG9hZHMoKSBub3cgd29yayBpZiB0aGUgZm10IHBhcmFtZXRlciBpcworICBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzIxMDQ0OiB0YXJmaWxlLm9wZW4oKSBub3cgaGFuZGxlcyBmaWxlb2JqIHdpdGggYW4gaW50ZWdlciAnbmFtZScKKyAgYXR0cmlidXRlLiAgQmFzZWQgb24gcGF0Y2ggYnkgQW50b2luZSBQaWV0cmkuCisKKy0gSXNzdWUgIzIxODY3OiAgUHJldmVudCB0dXJ0bGUgY3Jhc2ggZHVlIHRvIGludmFsaWQgdW5kbyBidWZmZXIgc2l6ZS4KKworLSBJc3N1ZSAjMTkwNzY6IERvbid0IHBhc3MgdGhlIHJlZHVuZGFudCAnZmlsZScgYXJndW1lbnQgdG8gc2VsZi5lcnJvcigpLgorCistIElzc3VlICMyMTk0MjogRml4ZWQgc291cmNlIGZpbGUgdmlld2luZyBpbiBweWRvYydzIHNlcnZlciBtb2RlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzExMjU5OiBhc3luY2hhdC5hc3luY19jaGF0KCkuc2V0X3Rlcm1pbmF0b3IoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvcgorICBpZiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGlzIG5lZ2F0aXZlLgorCistIElzc3VlICMxMjUyMzogYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKCkgbm93IHJhaXNlcyBhIFR5cGVFcnJvciBpZiBpdCBkb2Vzbid0CisgIGdldCBhIGJ5dGVzIHN0cmluZworCistIElzc3VlICMyMTcwNzogQWRkIG1pc3Npbmcga3dvbmx5YXJnY291bnQgYXJndW1lbnQgdG8KKyAgTW9kdWxlRmluZGVyLnJlcGxhY2VfcGF0aHNfaW5fY29kZSgpLgorCistIElzc3VlICMyMDYzOTogY2FsbGluZyBQYXRoLndpdGhfc3VmZml4KCcnKSBhbGxvd3MgcmVtb3ZpbmcgdGhlIHN1ZmZpeAorICBhZ2Fpbi4gIFBhdGNoIGJ5IEp1bHkgVGlraG9ub3YuCisKKy0gSXNzdWUgIzIxNzE0OiBEaXNhbGxvdyB0aGUgY29uc3RydWN0aW9uIG9mIGludmFsaWQgcGF0aHMgdXNpbmcKKyAgUGF0aC53aXRoX25hbWUoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9ueSBMZWUuCisKKy0gSXNzdWUgIzIxODk3OiBGaXggYSBjcmFzaCB3aXRoIHRoZSBmX2xvY2FscyBhdHRyaWJ1dGUgd2l0aCBjbG9zdXJlCisgIHZhcmlhYmxlcyB3aGVuIGZyYW1lLmNsZWFyKCkgaGFzIGJlZW4gY2FsbGVkLgorCistIElzc3VlICMyMTE1MTogRml4ZWQgYSBzZWdmYXVsdCBpbiB0aGUgd2lucmVnIG1vZHVsZSB3aGVuIGBgTm9uZWBgIGlzIHBhc3NlZAorICBhcyBhIGBgUkVHX0JJTkFSWWBgIHZhbHVlIHRvIFNldFZhbHVlRXguICBQYXRjaCBieSBKb2huIEVocmVzbWFuLgorCistIElzc3VlICMyMTA5MDogaW8uRmlsZUlPLnJlYWRhbGwoKSBkb2VzIG5vdCBpZ25vcmUgSS9PIGVycm9ycyBhbnltb3JlLiBCZWZvcmUsCisgIGl0IGlnbm9yZWQgSS9PIGVycm9ycyBpZiBhdCBsZWFzdCB0aGUgZmlyc3QgQyBjYWxsIHJlYWQoKSBzdWNjZWVkLgorCistIElzc3VlICMyMTc4MTogc3NsLlJBTkRfYWRkKCkgbm93IHN1cHBvcnRzIHN0cmluZ3MgbG9uZ2VyIHRoYW4gMiBHQi4KKworLSBJc3N1ZSAjMTE0NTM6IGFzeW5jb3JlOiBlbWl0IGEgUmVzb3VyY2VXYXJuaW5nIHdoZW4gYW4gdW5jbG9zZWQgZmlsZV93cmFwcGVyCisgIG9iamVjdCBpcyBkZXN0cm95ZWQuIFRoZSBkZXN0cnVjdG9yIG5vdyBjbG9zZXMgdGhlIGZpbGUgaWYgbmVlZGVkLiBUaGUKKyAgY2xvc2UoKSBtZXRob2QgY2FuIG5vdyBiZSBjYWxsZWQgdHdpY2U6IHRoZSBzZWNvbmQgY2FsbCBkb2VzIG5vdGhpbmcuCisKKy0gSXNzdWUgIzIxODU4OiBCZXR0ZXIgaGFuZGxpbmcgb2YgUHl0aG9uIGV4Y2VwdGlvbnMgaW4gdGhlIHNxbGl0ZTMgbW9kdWxlLgorCistIElzc3VlICMyMTQ3NjogTWFrZSBzdXJlIHRoZSBlbWFpbC5wYXJzZXIuQnl0ZXNQYXJzZXIgVGV4dElPV3JhcHBlciBpcworICBkaXNjYXJkZWQgYWZ0ZXIgcGFyc2luZywgc28gdGhlIGlucHV0IGZpbGUgaXNuJ3QgdW5leHBlY3RlZGx5IGNsb3NlZC4KKworLSBJc3N1ZSAjMjE3Mjk6IFVzZWQgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgaW4gdGhlIGRibS5kdW1iIG1vZHVsZSB0byBlbnN1cmUKKyAgZmlsZXMgY2xvc2luZy4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMjE0OTE6IHNvY2tldHNlcnZlcjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gY2hpbGQgcHJvY2Vzc2VzIHJlYXBpbmcuCisKKy0gSXNzdWUgIzIxODMyOiAgUmVxdWlyZSBuYW1lZCB0dXBsZSBpbnB1dHMgdG8gYmUgZXhhY3Qgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTkxNDU6ICBUaGUgdGltZXMgYXJndW1lbnQgZm9yIGl0ZXJ0b29scy5yZXBlYXQgbm93IGhhbmRsZXMKKyAgbmVnYXRpdmUgdmFsdWVzIHRoZSBzYW1lIHdheSBmb3Iga2V5d29yZCBhcmd1bWVudHMgYXMgaXQgZG9lcyBmb3IKKyAgcG9zaXRpb25hbCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzIxODEyOiB0dXJ0bGUuc2hhcGV0cmFuc2Zvcm0gZGlkIG5vdCB0cmFuZm9ybSB0aGUgdHVydGxlIG9uIHRoZQorICBmaXJzdCBjYWxsLiAgKElzc3VlIGlkZW50aWZpZWQgYW5kIGZpeGVkIGJ5IExpdGEgQ2hvLikKKworLSBJc3N1ZSAjMjE2MzU6ICBUaGUgZGlmZmxpYiBTZXF1ZW5jZU1hdGNoZXIuZ2V0X21hdGNoaW5nX2Jsb2NrcygpIG1ldGhvZAorICBjYWNoZSBkaWRuJ3QgbWF0Y2ggdGhlIGFjdHVhbCByZXN1bHQuICBUaGUgZm9ybWVyIHdhcyBhIGxpc3Qgb2YgdHVwbGVzCisgIGFuZCB0aGUgbGF0dGVyIHdhcyBhIGxpc3Qgb2YgbmFtZWQgdHVwbGVzLgorCistIElzc3VlICMyMTcyMjogVGhlIGRpc3R1dGlscyAidXBsb2FkIiBjb21tYW5kIG5vdyBleGl0cyB3aXRoIGEgbm9uLXplcm8KKyAgcmV0dXJuIGNvZGUgd2hlbiB1cGxvYWRpbmcgZmFpbHMuICBQYXRjaCBieSBNYXJ0aW4gRGVuZ2xlci4KKworLSBJc3N1ZSAjMjE3MjM6IGFzeW5jaW8uUXVldWU6IHN1cHBvcnQgYW55IHR5cGUgb2YgbnVtYmVyIChleDogZmxvYXQpIGZvciB0aGUKKyAgbWF4aW11bSBzaXplLiBQYXRjaCB3cml0dGVuIGJ5IFZhanJhc2t5IEtvay4KKworLSBJc3N1ZSAjMjEzMjY6IEFkZCBhIG5ldyBpc19jbG9zZWQoKSBtZXRob2QgdG8gYXN5bmNpby5CYXNlRXZlbnRMb29wLgorICBydW5fZm9yZXZlcigpIGFuZCBydW5fdW50aWxfY29tcGxldGUoKSBtZXRob2RzIG9mIGFzeW5jaW8uQmFzZUV2ZW50TG9vcCBub3cKKyAgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBldmVudCBsb29wIHdhcyBjbG9zZWQuCisKKy0gSXNzdWUgIzIxNzc0OiBGaXhlZCBOYW1lRXJyb3IgZm9yIGFuIGluY29ycmVjdCB2YXJpYWJsZSByZWZlcmVuY2UgaW4gdGhlCisgIFhNTCBNaW5pZG9tIGNvZGUgZm9yIGNyZWF0aW5nIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLgorICAoRm91bmQgYW5kIGZpeGVkIGJ5IENsYXVkaXUgUG9wYS4pCisKIC0gSXNzdWUgIzIxNzY2OiBQcmV2ZW50IGEgc2VjdXJpdHkgaG9sZSBpbiBDR0lIVFRQU2VydmVyIGJ5IFVSTCB1bnF1b3RpbmcgcGF0aHMKICAgYmVmb3JlIGNoZWNraW5nIGZvciBhIENHSSBzY3JpcHQgYXQgdGhhdCBwYXRoLgogCistIElzc3VlICMyMTMxMDogRml4ZWQgcG9zc2libGUgcmVzb3VyY2UgbGVhayBpbiBmYWlsZWQgb3BlbigpLgorCistIElzc3VlICMyMTY3NzogRml4ZWQgY2hhaW5pbmcgbm9ubm9ybWFsaXplZCBleGNlcHRpb25zIGluIGlvIGNsb3NlKCkgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTE3MDk6IEZpeCB0aGUgcHlkb2MuaGVscCBmdW5jdGlvbiB0byBub3QgZmFpbCB3aGVuIHN5cy5zdGRpbiBpcyBub3QgYQorICB2YWxpZCBmaWxlLgorCistIElzc3VlICMxMzIyMzogRml4IHB5ZG9jLndyaXRlZG9jIHNvIHRoYXQgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbiBmb3IgbWV0aG9kcworICB0aGF0IHVzZSAnc2VsZicgaW4gdGhlIGV4YW1wbGUgY29kZSBpcyBnZW5lcmF0ZWQgY29ycmVjdGx5LgorCistIElzc3VlICMyMTQ2MzogSW4gdXJsbGliLnJlcXVlc3QsIGZpeCBwcnVuaW5nIG9mIHRoZSBGVFAgY2FjaGUuCisKKy0gSXNzdWUgIzIxNjE4OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgY291bGQgZmFpbCB0byBjbG9zZSBvcGVuIGZkcyB0aGF0IHdlcmUKKyAgaW5oZXJpdGVkIGJ5IHRoZSBjYWxsaW5nIHByb2Nlc3MgYW5kIGFscmVhZHkgaGlnaGVyIHRoYW4gUE9TSVggcmVzb3VyY2UKKyAgbGltaXRzIHdvdWxkIG90aGVyd2lzZSBhbGxvdy4gIE9uIHN5c3RlbXMgd2l0aCBhIGZ1bmN0aW9uaW5nIC9wcm9jL3NlbGYvZmQKKyAgb3IgL2Rldi9mZCBpbnRlcmZhY2UgdGhlIG1heCBpcyBub3cgaWdub3JlZCBhbmQgYWxsIGZkcyBhcmUgY2xvc2VkLgorCistIElzc3VlICMyMTU1MjogRml4ZWQgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBvZiB0b28gbG9uZyBzdHJpbmcgbGVuZ3RocyBpbgorICB0aGUgdGtpbnRlciBtb2R1bGUgb24gNjQtYml0IHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTQzMTU6IFRoZSB6aXBmaWxlIG1vZHVsZSBub3cgaWdub3JlcyBleHRyYSBmaWVsZHMgaW4gdGhlIGNlbnRyYWwKKyAgZGlyZWN0b3J5IHRoYXQgYXJlIHRvbyBzaG9ydCB0byBiZSBwYXJzZWQgaW5zdGVhZCBvZiBsZXR0aW5nIGEgc3RydWN0LnVucGFjaworICBlcnJvciBidWJibGUgdXAgYXMgdGhpcyAiYmFkIGRhdGEiIGFwcGVhcnMgaW4gbWFueSByZWFsIHdvcmxkIHppcCBmaWxlcyBpbgorICB0aGUgd2lsZCBhbmQgaXMgaWdub3JlZCBieSBvdGhlciB6aXAgdG9vbHMuCisKKy0gSXNzdWUgIzIxNDAyOiB0a2ludGVyLnR0ayBub3cgd29ya3Mgd2hlbiBkZWZhdWx0IHJvb3Qgd2luZG93IGlzIG5vdCBzZXQuCisKKy0gSXNzdWUgIzEwMjAzOiBzcWxpdGUzLlJvdyBub3cgdHJ1bHkgc3VwcG9ydHMgc2VxdWVuY2UgcHJvdG9jb2wuICBJbiBwYXJ0aWN1bHIKKyAgaXQgc3VwcG9ydHMgcmV2ZXJzZSgpIGFuZCBuZWdhdGl2ZSBpbmRpY2VzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxODgwNzogSWYgY29weWluZyAobm8gc3ltbGlua3MpIHNwZWNpZmllZCBmb3IgYSB2ZW52LCB0aGVuIHRoZSBweXRob24KKyAgaW50ZXJwcmV0ZXIgYWxpYXNlcyAocHl0aG9uLCBweXRob24zKSBhcmUgbm93IGNyZWF0ZWQgYnkgY29weWluZyByYXRoZXIgdGhhbgorICBzeW1saW5raW5nLgorCistIElzc3VlICMxNDcxMDogcGtndXRpbC5nZXRfbG9hZGVyKCkgbm8gbG9uZ2VyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBOb25lIGlzCisgIGZvdW5kIGluIHN5cy5tb2R1bGVzLgorCistIElzc3VlICMxNDcxMDogcGtndXRpbC5maW5kX2xvYWRlcigpIG5vIGxvbmdlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gYQorICBtb2R1bGUgZG9lc24ndCBleGlzdC4KKworLSBJc3N1ZSAjMjE0ODE6ICBBcmdwYXJzZSBlcXVhbGl0eSBhbmQgaW5lcXVhbGl0eSB0ZXN0cyBub3cgcmV0dXJuCisgIE5vdEltcGxlbWVudGVkIHdoZW4gY29tcGFyaW5nIHRvIGFuIHVua25vd24gdHlwZS4KKworLSBJc3N1ZSAjODc0MzogRml4IGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbiBzZXQgb2JqZWN0cyBhbmQgdGhlCisgIGNvbGxlY3Rpb25zLlNldCgpIGFic3RyYWN0IGJhc2UgY2xhc3MuCisKKy0gSXNzdWUgIzEzMzU1OiByYW5kb20udHJpYW5ndWxhcigpIG5vIGxvbmdlciBmYWlscyB3aXRoIGEgWmVyb0RpdmlzaW9uRXJyb3IKKyAgd2hlbiBsb3cgZXF1YWxzIGhpZ2guCisKKy0gSXNzdWUgIzIxNTM4OiBUaGUgcGxpc3RsaWIgbW9kdWxlIG5vdyBzdXBwb3J0cyBsb2FkaW5nIG9mIGJpbmFyeSBwbGlzdCBmaWxlcworICB3aGVuIHJlZmVyZW5jZSBvciBvZmZzZXQgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uCisKKy0gSXNzdWUgIzIxODAxOiBWYWxpZGF0ZSB0aGF0IF9fc2lnbmF0dXJlX18gaXMgTm9uZSBvciBhbiBpbnN0YW5jZSBvZiBTaWduYXR1cmUuCisKKy0gSXNzdWUgIzIxOTIzOiBQcmV2ZW50IEF0dHJpYnV0ZUVycm9yIGluIGRpc3R1dGlscy5zeXNjb25maWcuY3VzdG9taXplX2NvbXBpbGVyCisgIGR1ZSB0byBwb3NzaWJsZSB1bmluaXRpYWxpemVkIF9jb25maWdfdmFycy4KKworLSBJc3N1ZSAjMjEzMjM6IEZpeCBodHRwLnNlcnZlciB0byBhZ2FpbiBoYW5kbGUgc2NyaXB0cyBpbiBDR0kgc3ViZGlyZWN0b3JpZXMsCisgIGJyb2tlbiBieSB0aGUgZml4IGZvciBzZWN1cml0eSBpc3N1ZSAjMTk0MzUuICBQYXRjaCBieSBaYWNoIEJ5cm5lLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjIxNzY6IFVwZGF0ZSB0aGUgY3R5cGVzIG1vZHVsZSdzIGxpYmZmaSB0byB2My4xLiAgVGhpcyByZWxlYXNlCisgIGFkZHMgc3VwcG9ydCBmb3IgdGhlIExpbnV4IEFBcmNoNjQgYW5kIFBPV0VSUEMgRUxGIEFCSXYyIGxpdHRsZSBlbmRpYW4KKyAgYXJjaGl0ZWN0dXJlcy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzIxOTU4OiBEZWZpbmUgSEFWRV9ST1VORCB3aGVuIGJ1aWxkaW5nIHdpdGggVmlzdWFsIFN0dWRpbyAyMDEzIGFuZAorICBhYm92ZS4gIFBhdGNoIGJ5IFphY2hhcnkgVHVybmVyLgorCistIElzc3VlICMxNTc1OTogIm1ha2Ugc3VzcGljaW91cyIsICJtYWtlIGxpbmtjaGVjayIgYW5kICJtYWtlIGRvY3Rlc3QiIGluIERvYy8KKyAgbm93IGRpc3BsYXkgc3BlY2lhbCBtZXNzYWdlIHdoZW4gYW5kIG9ubHkgd2hlbiB0aGVyZSBhcmUgZmFpbHVyZXMuCisKKy0gSXNzdWUgIzE3MDk1OiBGaXggTW9kdWxlcy9TZXR1cCAqc2hhcmVkKiBzdXBwb3J0LgorCistIElzc3VlICMyMTgxMTogQW50aWNpcGF0ZWQgZml4ZXMgdG8gc3VwcG9ydCBPUyBYIHZlcnNpb25zID4gMTAuOS4KKworLSBJc3N1ZSAjMjExNjY6IFByZXZlbnQgcG9zc2libGUgc2VnZmF1bHRzIGFuZCBvdGhlciByYW5kb20gZmFpbHVyZXMgb2YKKyAgcHl0aG9uIC0tZ2VuZXJhdGUtcG9zaXgtdmFycyBpbiBweWJ1aWxkZGlyLnR4dCBidWlsZCB0YXJnZXQuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTczOTA6IEFkanVzdCBFZGl0b3Igd2luZG93IHRpdGxlOyByZW1vdmUgJ1B5dGhvbicsCisgIG1vdmUgdmVyc2lvbiB0byBlbmQuCisKKy0gSXNzdWUgIzE0MTA1OiBJZGxlIGRlYnVnZ2VyIGJyZWFrcG9pbnRzIG5vIGxvbmdlciBkaXNhcHBlYXIKKyAgd2hlbiBpbnNldGluZyBvciBkZWxldGluZyBsaW5lcy4KKworLSBJc3N1ZSAjMTcxNzI6IFR1cnRsZWRlbW8gY2FuIG5vdyBiZSBydW4gZnJvbSBJZGxlLgorICBDdXJyZW50bHksIHRoZSBlbnRyeSBpcyBvbiB0aGUgSGVscCBtZW51LCBidXQgaXQgbWF5IG1vdmUgdG8gUnVuLgorICBQYXRjaCBieSBSYW1jaGFuZHJhIEFwdCBhbmQgTGl0YSBDaG8uCisKKy0gSXNzdWUgIzIxNzY1OiBBZGQgc3VwcG9ydCBmb3Igbm9uLWFzY2lpIGlkZW50aWZpZXJzIHRvIEh5cGVyUGFyc2VyLgorCistIElzc3VlICMyMTk0MDogQWRkIHVuaXR0ZXN0IGZvciBXaWRnZXRSZWRpcmVjdG9yLiBJbml0aWFsIHBhdGNoIGJ5IFNhaW1hZGhhdgorICBIZWJsaWthci4KKworLSBJc3N1ZSAjMTg1OTI6IEFkZCB1bml0dGVzdCBmb3IgU2VhcmNoRGlhbG9nQmFzZS4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCistIElzc3VlICMyMTY5NDogQWRkIHVuaXR0ZXN0IGZvciBQYXJlbk1hdGNoLiBQYXRjaCBieSBTYWltYWRoYXYgSGVibGlrYXIuCisKKy0gSXNzdWUgIzIxNjg2OiBhZGQgdW5pdHRlc3QgZm9yIEh5cGVyUGFyc2VyLiBPcmlnaW5hbCBwYXRjaCBieSBTYWltYWRoYXYKKyAgSGVibGlrYXIuCisKKy0gSXNzdWUgIzEyMzg3OiBBZGQgbWlzc2luZyB1cHBlcihsb3dlciljYXNlIHZlcnNpb25zIG9mIGRlZmF1bHQgV2luZG93cyBrZXkKKyAgYmluZGluZ3MgZm9yIElkbGUgc28gQ2FwcyBMb2NrIGRvZXMgbm90IGRpc2FibGUgdGhlbS4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzIxNjk1OiBDbG9zaW5nIGEgRmluZC1pbi1maWxlcyBvdXRwdXQgd2luZG93IHdoaWxlIHRoZSBzZWFyY2ggaXMKKyAgc3RpbGwgaW4gcHJvZ3Jlc3Mgbm8gbG9uZ2VyIGNsb3NlcyBJZGxlLgorCistIElzc3VlICMxODkxMDogQWRkIHVuaXR0ZXN0IGZvciB0ZXh0Vmlldy4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCistIElzc3VlICMxODI5MjogQWRkIHVuaXR0ZXN0IGZvciBBdXRvRXhwYW5kLiBQYXRjaCBieSBTYWloYWRoYXYgSGVibGlrYXIuCisKKy0gSXNzdWUgIzE4NDA5OiBBZGQgdW5pdHRlc3QgZm9yIEF1dG9Db21wbGV0ZS4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjIxNjY6ICB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mIGEgbmV3IGludGVybmFsIF9jb2RlY3MuX2ZvcmdldF9jb2RlYworICBoZWxwaW5nIGZ1bmN0aW9uLCB0ZXN0X2NvZGVjcyBub3cgY2xlYXJzIHRoZSBlbmNvZGluZyBjYWNoZXMgdG8gYXZvaWQgdGhlCisgIGFwcGVhcmFuY2Ugb2YgYSByZWZlcmVuY2UgbGVhaworCistIElzc3VlICMyMjIzNjogVGtpbnRlciB0ZXN0cyBub3cgZG9uJ3QgcmV1c2UgZGVmYXVsdCByb290IHdpbmRvdy4gIE5ldyByb290CisgIHdpbmRvdyBpcyBjcmVhdGVkIGZvciBldmVyeSB0ZXN0IGNsYXNzLgorCistIElzc3VlICMyMDc0NjogRml4IHRlc3RfcGRiIHRvIHJ1biBpbiByZWZsZWFrIG1vZGUgKC1SKS4gIFBhdGNoIGJ5IFhhdmllcgorICBkZSBHYXllLgorCistIElzc3VlICMyMjA2MDogdGVzdF9jdHlwZXMgaGFzIGJlZW4gc29tZXdoYXQgY2xlYW5lZCB1cCBhbmQgc2ltcGxpZmllZDsgaXQKKyAgbm93IHVzZXMgdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgdG8gZmluZCBpdHMgdGVzdHMuCisKKy0gSXNzdWUgIzIyMTA0OiByZWdydGVzdC5weSBubyBsb25nZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIHN1aXRlIG9mIHRlc3RzCisgIGxvYWRlZCBmcm9tIHRlc3QgbW9kdWxlcyB0aGF0IGRvbid0IGRlZmluZSB0ZXN0X21haW4oKS4KKworLSBJc3N1ZSAjMjIwMDI6IEFkZGVkIGBgbG9hZF9wYWNrYWdlX3Rlc3RzYGAgZnVuY3Rpb24gdG8gdGVzdC5zdXBwb3J0IGFuZCB1c2VkCisgIGl0IHRvIGltcGxlbWVudC9hdWdtZW50IHRlc3QgZGlzY292ZXJ5IGluIHRlc3RfYXN5bmNpbywgdGVzdF9lbWFpbCwKKyAgdGVzdF9pbXBvcnRsaWIsIHRlc3RfanNvbiwgYW5kIHRlc3RfdG9vbHMuCisKKy0gSXNzdWUgIzIxOTc2OiBGaXggdGVzdF9zc2wgdG8gYWNjZXB0IExpYnJlU1NMIHZlcnNpb24gc3RyaW5ncy4gIFRoYW5rcworICB0byBXaWxsaWFtIE9yci4KKworLSBJc3N1ZSAjMjE5MTg6IENvbnZlcnRlZCB0ZXN0X3Rvb2xzIGZyb20gYSBtb2R1bGUgdG8gYSBwYWNrYWdlIGNvbnRhaW5pbmcKKyAgc2VwYXJhdGUgdGVzdCBmaWxlcyBmb3IgZWFjaCB0ZXN0ZWQgc2NyaXB0LgorCistIElzc3VlICMyMDE1NTogQ2hhbmdlZCBIVFRQIG1ldGhvZCBuYW1lcyBpbiBmYWlsaW5nIHRlc3RzIGluIHRlc3RfaHR0cHNlcnZlcnMKKyAgc28gdGhhdCBwYWNrZXQgZmlsdGVyaW5nIHNvZnR3YXJlIChzcGVjaWZpY2FsbHkgV2luZG93cyBCYXNlIEZpbHRlcmluZyBFbmdpbmUpCisgIGRvZXMgbm90IGludGVyZmVyZSB3aXRoIHRoZSB0cmFuc2FjdGlvbiBzZW1hbnRpY3MgZXhwZWN0ZWQgYnkgdGhlIHRlc3RzLgorCistIElzc3VlICMxOTQ5MzogUmVmYWN0b3JlZCB0aGUgY3R5cGVzIHRlc3QgcGFja2FnZSB0byBza2lwIHRlc3RzIGV4cGxpY2l0bHkKKyAgcmF0aGVyIHRoYW4gc2lsZW50bHkuCisKKy0gSXNzdWUgIzE4NDkyOiBBbGwgcmVzb3VyY2VzIGFyZSBub3cgYWxsb3dlZCB3aGVuIHRlc3RzIGFyZSBub3QgcnVuIGJ5CisgIHJlZ3J0ZXN0LnB5LgorCistIElzc3VlICMyMTYzNDogRml4IHB5c3RvbmUgbWljcm8tYmVuY2htYXJrOiB1c2UgZmxvb3IgZGl2aXNpb24gaW5zdGVhZCBvZiB0cnVlCisgIGRpdmlzaW9uIHRvIGJlbmNobWFyayBpbnRlZ2VycyBpbnN0ZWFkIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFNldCBweXN0b25lCisgIHZlcnNpb24gdG8gMS4yLiBQYXRjaCB3cml0dGVuIGJ5IExlbm5hcnQgUmVnZWJyby4KKworLSBJc3N1ZSAjMjE2MDU6IEFkZGVkIHRlc3RzIGZvciBUa2ludGVyIGltYWdlcy4KKworLSBJc3N1ZSAjMjE0OTM6IEFkZGVkIHRlc3QgZm9yIG50cGF0aC5leHBhbmR1c2VyKCkuICBPcmlnaW5hbCBwYXRjaCBieQorICBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE5OTI1OiBBZGRlZCB0ZXN0cyBmb3IgdGhlIHNwd2QgbW9kdWxlLiBPcmlnaW5hbCBwYXRjaCBieSBWYWpyYXNreSBLb2suCisKKy0gSXNzdWUgIzIxNTIyOiBBZGRlZCBUa2ludGVyIHRlc3RzIGZvciBMaXN0Ym94Lml0ZW1jb25maWd1cmUoKSwKKyAgUGFuZWRXaW5kb3cucGFuZWNvbmZpZ3VyZSgpLCBhbmQgTWVudS5lbnRyeWNvbmZpZ3VyZSgpLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIxNzc3OiBUaGUgYmluYXJ5IHNlcXVlbmNlIG1ldGhvZHMgb24gYnl0ZXMgYW5kIGJ5dGVhcnJheSBhcmUgbm93CisgIGRvY3VtZW50ZWQgZXhwbGljaXRseSwgcmF0aGVyIHRoYW4gYXNzdW1pbmcgdXNlcnMgd2lsbCBiZSBhYmxlIHRvIGRlcml2ZQorICB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyIGZyb20gdGhlIGJlaGF2aW91ciBvZiB0aGUgY29ycmVzcG9uZGluZyBzdHIgbWV0aG9kcy4KKworV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMyMTY3MSwgIzIyMTYwLCBDVkUtMjAxNC0wMjI0OiBUaGUgYnVuZGxlZCB2ZXJzaW9uIG9mIE9wZW5TU0wgaGFzIGJlZW4KKyAgdXBkYXRlZCB0byAxLjAuMWkuCisKKy0gSXNzdWUgIzEwNzQ3OiBVc2UgdmVyc2lvbmVkIGxhYmVscyBpbiB0aGUgV2luZG93cyBzdGFydCBtZW51LgorICBQYXRjaCBieSBPbGl2ZSBLaWxidXJuLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjIyMDE6IENvbW1hbmQtbGluZSBpbnRlcmZhY2Ugb2YgdGhlIHppcGZpbGUgbW9kdWxlIG5vdyBjb3JyZWN0bHkKKyAgZXh0cmFjdHMgWklQIGZpbGVzIHdpdGggZGlyZWN0b3J5IGVudHJpZXMuICBQYXRjaCBieSBSeWFuIFdpbHNvbi4KKworLSBJc3N1ZSAjMjE5MDY6IE1ha2UgVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkgd29yayBpbiBQeXRob24gMy4KKyAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCistIElzc3VlICMyMTYyOTogRml4IEFyZ3VtZW50IENsaW5pYydzICItLWNvbnZlcnRlcnMiIGZlYXR1cmUuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTA1LTE4CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMTQxODogRml4IGEgY3Jhc2ggaW4gdGhlIGJ1aWx0aW4gZnVuY3Rpb24gc3VwZXIoKSB3aGVuIGNhbGxlZCB3aXRob3V0CisgIGFyZ3VtZW50IGFuZCB3aXRob3V0IGN1cnJlbnQgZnJhbWUgKGV4OiBlbWJlZGRlZCBQeXRob24pLgorCistIElzc3VlICMyMTQyNTogRml4IGZsdXNoaW5nIG9mIHN0YW5kYXJkIHN0cmVhbXMgaW4gdGhlIGludGVyYWN0aXZlCisgIGludGVycHJldGVyLgorCistIElzc3VlICMyMTQzNTogSW4gcmFyZSBjYXNlcywgd2hlbiBydW5uaW5nIGZpbmFsaXplcnMgb24gb2JqZWN0cyBpbiBjeWNsaWMKKyAgdHJhc2ggYSBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZSBjb3VsZCBvY2N1ciBkdWUgdG8gYSBzdWJ0bGUgZmxhdyBpbgorICBpbnRlcm5hbCBpdGVyYXRpb24gbG9naWMuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTA3NDQ6IEZpeCBQRVAgMzExOCBmb3JtYXQgc3RyaW5ncyBvbiBjdHlwZXMgb2JqZWN0cyB3aXRoIGEgbm9udHJpdmlhbAorICBzaGFwZS4KKworLSBJc3N1ZSAjMjA5OTg6IEZpeGVkIHJlLmZ1bGxtYXRjaCgpIG9mIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybgorICB3aXRoIGlnbm9yZSBjYXNlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMyMTA3NTogZmlsZWlucHV0LkZpbGVJbnB1dCBub3cgcmVhZHMgYnl0ZXMgZnJvbSBzdGFuZGFyZCBzdHJlYW0gaWYKKyAgYmluYXJ5IG1vZGUgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2FtIEtpbWJyZWwuCisKKy0gSXNzdWUgIzIxMzk2OiBGaXggVGV4dElPV3JhcHBlciguLi4sIHdyaXRlX3Rocm91Z2g9VHJ1ZSkgdG8gbm90IGZvcmNlIGEKKyAgZmx1c2goKSBvbiB0aGUgdW5kZXJseWluZyBiaW5hcnkgc3RyZWFtLiAgUGF0Y2ggYnkgYWtpcmEuCisKKy0gSXNzdWUgIzIxNDcwOiBEbyBhIGJldHRlciBqb2Igc2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYnkKKyAgdXNpbmcgZW5vdWdoIGJ5dGVzIHRvIHNwYW4gdGhlIGZ1bGwgc3RhdGUgc3BhY2Ugb2YgdGhlIE1lcnNlbm5lIFR3aXN0ZXIuCisKKy0gSXNzdWUgIzIxMzk4OiBGaXggYW4gdW5pY29kZSBlcnJvciBpbiB0aGUgcHlkb2MgcGFnZXIgd2hlbiB0aGUgZG9jdW1lbnRhdGlvbgorICBjb250YWlucyBjaGFyYWN0ZXJzIG5vdCBlbmNvZGFibGUgdG8gdGhlIHN0ZG91dCBlbmNvZGluZy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE3NzU2OiBGaXggdGVzdF9jb2RlIHRlc3Qgd2hlbiBydW4gZnJvbSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uLgorCistIElzc3VlICMxNzc1MjogRml4IGRpc3R1dGlscyB0ZXN0cyB3aGVuIHJ1biBmcm9tIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24uCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTgxMDQ6IEFkZCBpZGxlbGliL2lkbGVfdGVzdC9odGVzdC5weSB3aXRoIGEgZmV3IHNhbXBsZSB0ZXN0cyB0byBiZWdpbgorICBjb25zb2xpZGF0aW5nIGFuZCBpbXByb3ZpbmcgaHVtYW4tdmFsaWRhdGVkIHRlc3RzIG9mIElkbGUuIENoYW5nZSBvdGhlciBmaWxlcworICBhcyBuZWVkZWQgdG8gd29yayB3aXRoIGh0ZXN0LiAgUnVubmluZyB0aGUgbW9kdWxlIGFzIF9fbWFpbl9fIHJ1bnMgYWxsIHRlc3RzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4xcmMxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNC0wNS0wNQorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjEyNzQ6IERlZmluZSBQQVRIX01BWCBmb3IgR05VL0h1cmQgaW4gUHl0aG9uL3B5dGhvbnJ1bi5jLgorCistIElzc3VlICMyMTIwOTogRml4IHNlbmRpbmcgdHVwbGVzIHRvIGN1c3RvbSBnZW5lcmF0b3Igb2JqZWN0cyB3aXRoIHRoZSB5aWVsZAorICBmcm9tIHN5bnRheC4KKworLSBJc3N1ZSAjMjExMzQ6IEZpeCBzZWdmYXVsdCB3aGVuIHN0ciBpcyBjYWxsZWQgb24gYW4gdW5pbml0aWFsaXplZAorICBVbmljb2RlRW5jb2RlRXJyb3IsIFVuaWNvZGVEZWNvZGVFcnJvciwgb3IgVW5pY29kZVRyYW5zbGF0ZUVycm9yIG9iamVjdC4KKworLSBJc3N1ZSAjMTk1Mzc6IEZpeCBQeVVuaWNvZGVfREFUQSgpIGFsaWdubWVudCB1bmRlciBtNjhrLiAgUGF0Y2ggYnkKKyAgQW5kcmVhcyBTY2h3YWIuCisKKy0gSXNzdWUgIzIwOTI5OiBBZGQgYSB0eXBlIGNhc3QgdG8gYXZvaWQgc2hpZnRpbmcgYSBuZWdhdGl2ZSBudW1iZXIuCisKKy0gSXNzdWUgIzIwNzMxOiBQcm9wZXJseSBwb3NpdGlvbiBpbiBzb3VyY2UgY29kZSBmaWxlcyBldmVuIGlmIHRoZXkKKyAgYXJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzIwNjM3OiBLZXktc2hhcmluZyBub3cgYWxzbyB3b3JrcyBmb3IgaW5zdGFuY2UgZGljdGlvbmFyaWVzIG9mCisgIHN1YmNsYXNzZXMuICBQYXRjaCBieSBQZXRlciBJbmdlYnJldHNvbi4KKworLSBJc3N1ZSAjMTI1NDY6IEFsbG93IFx4MDAgdG8gYmUgdXNlZCBhcyBhIGZpbGwgY2hhcmFjdGVyIHdoZW4gdXNpbmcgc3RyLCBpbnQsCisgIGZsb2F0LCBhbmQgY29tcGxleCBfX2Zvcm1hdF9fIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEzNTk4OiBNb2RpZnkgc3RyaW5nLkZvcm1hdHRlciB0byBzdXBwb3J0IGF1dG8tbnVtYmVyaW5nIG9mCisgIHJlcGxhY2VtZW50IGZpZWxkcy4gSXQgbm93IG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIHN0ci5mb3JtYXQoKSBpbgorICB0aGlzIHJlZ2FyZC4gUGF0Y2hlcyBieSBQaGlsIEVsc29uIGFuZCBSYW1jaGFuZHJhIEFwdGUuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjEwODg6IEJ1Z2ZpeCBmb3IgY3Vyc2VzLndpbmRvdy5hZGRjaCgpIHJlZ3Jlc3Npb24gaW4gMy40LjAuCisgIEluIHBvcnRpbmcgdG8gQXJndW1lbnQgQ2xpbmljLCB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyB3ZXJlIHJldmVyc2VkLgorCistIElzc3VlICMyMTQ2OTogIFJlZHVjZWQgdGhlIHJpc2sgb2YgZmFsc2UgcG9zaXRpdmVzIGluIHJvYm90cGFyc2VyIGJ5CisgIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHJvYm90cy50eHQgaGFzIGJlZW4gcmVhZCBvciBkb2VzIG5vdCBleGlzdAorICBwcmlvciB0byByZXR1cm5pbmcgVHJ1ZSBpbiBjYW5fZmV0Y2goKS4KKworLSBJc3N1ZSAjMjEzMjE6IGl0ZXJ0b29scy5pc2xpY2UoKSBub3cgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSB0byB0aGUgc291cmNlCisgIGl0ZXJhdG9yIHdoZW4gdGhlIHNsaWNlIGlzIGV4aGF1c3RlZC4gIFBhdGNoIGJ5IEFudG9uIEFmYW5hc3lldi4KKworLSBJc3N1ZSAjOTgxNTogYXNzZXJ0UmFpc2VzIG5vdyB0cmllcyB0byBjbGVhciByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcworICBpbiB0aGUgZXhjZXB0aW9uJ3MgdHJhY2ViYWNrLgorCistIElzc3VlICMxMzIwNDogQ2FsbGluZyBzeXMuZmxhZ3MuX19uZXdfXyB3b3VsZCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIsCisgIG5vdyBpdCByYWlzZXMgYSBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE5Mzg1OiBNYWtlIG9wZXJhdGlvbnMgb24gYSBjbG9zZWQgZGJtLmR1bWIgZGF0YWJhc2UgYWx3YXlzIHJhaXNlIHRoZQorICBzYW1lIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMjEyMDc6IERldGVjdCB3aGVuIHRoZSBvcy51cmFuZG9tIGNhY2hlZCBmZCBoYXMgYmVlbiBjbG9zZWQgb3IKKyAgcmVwbGFjZWQsIGFuZCBvcGVuIGl0IGFuZXcuCisKKy0gSXNzdWUgIzIxMjkxOiBzdWJwcm9jZXNzJ3MgUG9wZW4ud2FpdCgpIGlzIG5vdyB0aHJlYWQgc2FmZSBzbyB0aGF0CisgIG11bHRpcGxlIHRocmVhZHMgbWF5IGJlIGNhbGxpbmcgd2FpdCgpIG9yIHBvbGwoKSBvbiBhIFBvcGVuIGluc3RhbmNlCisgIGF0IHRoZSBzYW1lIHRpbWUgd2l0aG91dCBsb3NpbmcgdGhlIFBvcGVuLnJldHVybmNvZGUgdmFsdWUuCisKKy0gSXNzdWUgIzIxMTI3OiBQYXRoIG9iamVjdHMgY2FuIG5vdyBiZSBpbnN0YW50aWF0ZWQgZnJvbSBzdHIgc3ViY2xhc3MKKyAgaW5zdGFuY2VzIChzdWNoIGFzIGBgbnVtcHkuc3RyX2BgKS4KKworLSBJc3N1ZSAjMTUwMDI6IHVybGxpYi5yZXNwb25zZSBvYmplY3QgdG8gdXNlIF9UZW1wb3JhcnlGaWxlV3JhcHBlciAoYW5kCisgIF9UZW1wb3JhcnlGaWxlQ2xvc2VyKSBmYWNpbGl0eS4gUHJvdmlkZXMgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSBmaWxlCisgIGRlc2NyaXB0b3IgY2xvc2UuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBUaGV1bmUuCisKKy0gSXNzdWUgIzEyMjIwOiBtaW5kb20gbm93IHJhaXNlcyBhIGN1c3RvbSBWYWx1ZUVycm9yIGluZGljYXRpbmcgaXQgZG9lc24ndAorICBzdXBwb3J0IHNwYWNlcyBpbiBVUklzIGluc3RlYWQgb2YgbGV0dGluZyBhICdzcGxpdCcgVmFsdWVFcnJvciBidWJibGUgdXAuCisKKy0gSXNzdWUgIzIxMjM5OiBwYXRjaC5zdG9wYWxsKCkgZGlkbid0IHdvcmsgZGV0ZXJtaW5pc3RpY2FsbHkgd2hlbiB0aGUgc2FtZQorICBuYW1lIHdhcyBwYXRjaGVkIG1vcmUgdGhhbiBvbmNlLgorCistIElzc3VlICMyMTIyMjogUGFzc2luZyBuYW1lIGtleXdvcmQgYXJndW1lbnQgdG8gbW9jay5jcmVhdGVfYXV0b3NwZWMgbm93CisgIHdvcmtzLgorCistIElzc3VlICMyMTE5NzogQWRkIGxpYjY0IC0+IGxpYiBzeW1saW5rIGluIHZlbnZzIG9uIDY0LWJpdCBub24tT1MgWCBQT1NJWC4KKworLSBJc3N1ZSAjMTc0OTg6IFNvbWUgU01UUCBzZXJ2ZXJzIGRpc2Nvbm5lY3QgYWZ0ZXIgY2VydGFpbiBlcnJvcnMsIHZpb2xhdGluZworICBzdHJpY3QgUkZDIGNvbmZvcm1hbmNlLiAgSW5zdGVhZCBvZiBsb3NpbmcgdGhlIGVycm9yIGNvZGUgd2hlbiB3ZSBpc3N1ZSB0aGUKKyAgc3Vic2VxdWVudCBSU0VULCBzbXRwbGliIG5vdyByZXR1cm5zIHRoZSBlcnJvciBjb2RlIGFuZCBkZWZlcnMgcmFpc2luZyB0aGUKKyAgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCBlcnJvciB1bnRpbCB0aGUgbmV4dCBjb21tYW5kIGlzIGlzc3VlZC4KKworLSBJc3N1ZSAjMTc4MjY6IHNldHRpbmcgYW4gaXRlcmFibGUgc2lkZV9lZmZlY3Qgb24gYSBtb2NrIGZ1bmN0aW9uIGNyZWF0ZWQgYnkKKyAgY3JlYXRlX2F1dG9zcGVjIG5vdyB3b3Jrcy4gUGF0Y2ggYnkgS3VzaGFsIERhcy4KKworLSBJc3N1ZSAjNzc3NjogRml4IGBgSG9zdDpgYCBoZWFkZXIgYW5kIHJlY29ubmVjdGlvbiB3aGVuIHVzaW5nCisgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLnNldF90dW5uZWwoKS4gUGF0Y2ggYnkgTmlrb2xhdXMgUmF0aC4KKworLSBJc3N1ZSAjMjA5Njg6IHVuaXR0ZXN0Lm1vY2suTWFnaWNNb2NrIG5vdyBzdXBwb3J0cyBkaXZpc2lvbi4KKyAgUGF0Y2ggYnkgSm9oYW5uZXMgQmFpdGVyLgorCiAtIEZpeCBhcmJpdHJhcnkgbWVtb3J5IGFjY2VzcyBpbiBKU09ORGVjb2Rlci5yYXdfZGVjb2RlIHdpdGggYSBuZWdhdGl2ZSBzZWNvbmQKICAgcGFyYW1ldGVyLiBCdWcgcmVwb3J0ZWQgYnkgR3VpZG8gVnJhbmtlbi4KIAorLSBJc3N1ZSAjMjExNjk6IGdldHBhc3Mgbm93IGhhbmRsZXMgbm9uLWFzY2lpIGNoYXJhY3RlcnMgdGhhdCB0aGUKKyAgaW5wdXQgc3RyZWFtIGVuY29kaW5nIGNhbm5vdCBlbmNvZGUgYnkgcmUtZW5jb2RpbmcgdXNpbmcgdGhlCisgIHJlcGxhY2UgZXJyb3IgaGFuZGxlci4KKworLSBJc3N1ZSAjMjExNzE6IEZpeGVkIHVuZG9jdW1lbnRlZCBmaWx0ZXIgQVBJIG9mIHRoZSByb3QxMyBjb2RlYy4KKyAgUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMjExNzI6IGlzaW5zdGFuY2UgY2hlY2sgcmVsYXhlZCBmcm9tIGRpY3QgdG8gY29sbGVjdGlvbnMuTWFwcGluZy4KKworLSBJc3N1ZSAjMjExNTU6IGFzeW5jaW8uRXZlbnRMb29wLmNyZWF0ZV91bml4X3NlcnZlcigpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yCisgIGlmIHBhdGggYW5kIHNvY2sgYXJlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lLgorCistIElzc3VlICMyMTE0OTogSW1wcm92ZWQgdGhyZWFkLXNhZmV0eSBpbiBsb2dnaW5nIGNsZWFudXAgZHVyaW5nIGludGVycHJldGVyCisgIHNodXRkb3duLiBUaGFua3MgdG8gRGV2aW4gSmVhbnBpZXJyZSBmb3IgdGhlIHBhdGNoLgorCistIElzc3VlICMyMDE0NTogYGFzc2VydFJhaXNlc1JlZ2V4YCBhbmQgYGFzc2VydFdhcm5zUmVnZXhgIG5vdyByYWlzZSBhCisgIFR5cGVFcnJvciBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBhIHN0cmluZyBvciBjb21waWxlZCByZWdleC4KKworLSBJc3N1ZSAjMjEwNTg6IEZpeCBhIGxlYWsgb2YgZmlsZSBkZXNjcmlwdG9yIGluCisgIDpmdW5jOmB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGVgLCBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlmCisgIDpmdW5jOmBpby5vcGVuYCBmYWlscworCistIElzc3VlICMyMTIwMDogUmV0dXJuIE5vbmUgZnJvbSBwa2d1dGlsLmdldF9sb2FkZXIoKSB3aGVuIF9fc3BlY19fIGlzIG1pc3NpbmcuCisKKy0gSXNzdWUgIzIxMDEzOiBFbmhhbmNlIHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkgd2hlbiB1c2VkIGZvciBzZXJ2ZXIgc2lkZQorICBzb2NrZXRzIHRvIHByb3ZpZGUgYmV0dGVyIHNlY3VyaXR5IGJ5IGRlZmF1bHQuCisKIC0gSXNzdWUgIzIwNjMzOiBSZXBsYWNlIHJlbGF0aXZlIGltcG9ydCBieSBhYnNvbHV0ZSBpbXBvcnQuCiAKKy0gSXNzdWUgIzIwOTgwOiBTdG9wIHdyYXBwaW5nIGV4Y2VwdGlvbiB3aGVuIHVzaW5nIFRocmVhZFBvb2wuCisKIC0gSXNzdWUgIzIxMDgyOiBJbiBvcy5tYWtlZGlycywgZG8gbm90IHNldCB0aGUgcHJvY2Vzcy13aWRlIHVtYXNrLiBOb3RlIHRoaXMKICAgY2hhbmdlcyBiZWhhdmlvciBvZiBtYWtlZGlycyB3aGVuIGV4aXN0X29rPVRydWUuCiAKLS0gSXNzdWUgIzIwODc1OiBQcmV2ZW50IHBvc3NpYmxlIGd6aXAgIidyZWFkJyBpcyBub3QgZGVmaW5lZCIgTmFtZUVycm9yLgotICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCistIElzc3VlICMyMDk5MDogRml4IGlzc3VlcyBmb3VuZCBieSBweWZsYWtlcyBmb3IgbXVsdGlwcm9jZXNzaW5nLgorCistIElzc3VlICMyMTAxNTogU1NMIGNvbnRleHRzIHdpbGwgbm93IGF1dG9tYXRpY2FsbHkgc2VsZWN0IGFuIGVsbGlwdGljCisgIGN1cnZlIGZvciBFQ0RIIGtleSBleGNoYW5nZSBvbiBPcGVuU1NMIDEuMC4yIGFuZCBsYXRlciwgYW5kIG90aGVyd2lzZQorICBkZWZhdWx0IHRvICJwcmltZTI1NnYxIi4KKworLSBJc3N1ZSAjMjA5OTU6IEVuaGFuY2UgZGVmYXVsdCBjaXBoZXJzIHVzZWQgYnkgdGhlIHNzbCBtb2R1bGUgdG8gZW5hYmxlCisgIGJldHRlciBzZWN1cml0eSBhbiBwcmlvcml0aXplIHBlcmZlY3QgZm9yd2FyZCBzZWNyZWN5LgorCistIElzc3VlICMyMDg4NDogRG9uJ3QgYXNzdW1lIHRoYXQgX19maWxlX18gaXMgZGVmaW5lZCBvbiBpbXBvcnRsaWIuX19pbml0X18uCisKKy0gSXNzdWUgIzIxNDk5OiBJZ25vcmUgX19idWlsdGluc19fIGluIHNldmVyYWwgdGVzdF9pbXBvcnRsaWIudGVzdF9hcGkgdGVzdHMuCisKKy0gSXNzdWUgIzIwODc5OiBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHRhYmxlcyBmb3IKKyAgYmFzZTMyLCBhc2NpaTg1IGFuZCBiYXNlODUgY29kZWNzIGluIHRoZSBiYXNlNjQgbW9kdWxlLCBhbmQgZGVsYXkgdGhlCisgIGluaXRpYWxpemF0aW9uIG9mIHRoZSB1bnF1b3RlX3RvX2J5dGVzKCkgdGFibGUgb2YgdGhlIHVybGxpYi5wYXJzZSBtb2R1bGUsIHRvCisgIG5vdCB3YXN0ZSBtZW1vcnkgaWYgdGhlc2UgbW9kdWxlcyBhcmUgbm90IHVzZWQuCisKKy0gSXNzdWUgIzE5MTU3OiBJbmNsdWRlIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBpbiB0aGUgdXN1YWJsZSBob3N0cyBmb3IgSVB2NgorICBpbiBpcGFkZHJlc3MuCiAKIC0gSXNzdWUgIzExNTk5OiBXaGVuIGFuIGV4dGVybmFsIGNvbW1hbmQgKGUuZy4gY29tcGlsZXIpIGZhaWxzLCBkaXN0dXRpbHMgbm93CiAgIHByaW50cyBvdXQgdGhlIHdob2xlIGNvbW1hbmQgbGluZSAoaW5zdGVhZCBvZiBqdXN0IHRoZSBjb21tYW5kIG5hbWUpIGlmIHRoZQpAQCAtMzgsNjAgKzY0MCwzMTAgQEAKIC0gSXNzdWUgIzQ5MzE6IGRpc3R1dGlscyBzaG91bGQgbm90IHByb2R1Y2UgdW5oZWxwZnVsICJlcnJvcjogTm9uZSIgbWVzc2FnZXMKICAgYW55bW9yZS4gIGRpc3R1dGlscy51dGlsLmdyb2tfZW52aXJvbm1lbnRfZXJyb3IgaXMga2VwdCBidXQgZG9jLWRlcHJlY2F0ZWQuCiAKKy0gSXNzdWUgIzIwODc1OiBQcmV2ZW50IHBvc3NpYmxlIGd6aXAgIidyZWFkJyBpcyBub3QgZGVmaW5lZCIgTmFtZUVycm9yLgorICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzExNTU4OiBgYGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgYCBub3cgcmV0dXJucyBhIG1vcmUKKyAgdXNlZnVsIGVycm9yIG1lc3NhZ2UgaWYgYGBhdHRhY2hgYCBpcyBjYWxsZWQgb24gYSBtZXNzYWdlIGZvciB3aGljaAorICBgYGlzX211bHRpcGFydGBgIGlzIEZhbHNlLgorCiAtIElzc3VlICMyMDI4MzogUkUgcGF0dGVybiBtZXRob2RzIG5vdyBhY2NlcHQgdGhlIHN0cmluZyBrZXl3b3JkIHBhcmFtZXRlcnMKICAgYXMgZG9jdW1lbnRlZC4gIFRoZSBwYXR0ZXJuIGFuZCBzb3VyY2Uga2V5d29yZCBwYXJhbWV0ZXJzIGFyZSBsZWZ0IGFzCiAgIGRlcHJlY2F0ZWQgYWxpYXNlcy4KIAotLSBJc3N1ZSAjMjEzMjM6IEZpeCBodHRwLnNlcnZlciB0byBhZ2FpbiBoYW5kbGUgc2NyaXB0cyBpbiBDR0kgc3ViZGlyZWN0b3JpZXMsCi0gIGJyb2tlbiBieSB0aGUgZml4IGZvciBzZWN1cml0eSBpc3N1ZSAjMTk0MzUuICBQYXRjaCBieSBaYWNoIEJ5cm5lLgotCi1UZXN0cwotLS0tLS0KLQotLSBJc3N1ZSAjMTc3NTI6IEZpeCBkaXN0dXRpbHMgdGVzdHMgd2hlbiBydW4gZnJvbSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uLgotCi0tIElzc3VlICMyMDk0NjogQ29ycmVjdCBhbGlnbm1lbnQgYXNzdW1wdGlvbnMgb2Ygc29tZSBjdHlwZXMgdGVzdHMuCi0KLS0gSXNzdWUgIzIwOTM5OiBGaXggdGVzdF9nZXR1cmwgZmFpbHVyZSBpbiB0ZXN0X3VybGxpYm5ldCBkdWUgdG8KLSAgbmV3IHJlZGlyZWN0IG9mIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8gdG8gaHR0cHM6Ly93d3cucHl0aG9uLm9yZy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwOS1NYXItMjAxNCoKLQotTm8gY2hhbmdlcyBmcm9tIHJlbGVhc2UgY2FuZGlkYXRlIDIuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjUgcmVsZWFzZSBjYW5kaWRhdGUgMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDAyLU1hci0yMDE0KgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMjA3MzE6IFByb3Blcmx5IHBvc2l0aW9uIGluIHNvdXJjZSBjb2RlIGZpbGVzIGV2ZW4gaWYgdGhleQotICBhcmUgb3BlbmVkIGluIHRleHQgbW9kZS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTk2MTk6IHN0ci5lbmNvZGUsIGJ5dGVzLmRlY29kZSBhbmQgYnl0ZWFycmF5LmRlY29kZSBub3cgdXNlIGFuCi0gIGludGVybmFsIEFQSSB0byB0aHJvdyBMb29rdXBFcnJvciBmb3Iga25vd24gbm9uLXRleHQgZW5jb2RpbmdzLCByYXRoZXIKLSAgdGhhbiBhdHRlbXB0aW5nIHRoZSBlbmNvZGluZyBvciBkZWNvZGluZyBvcGVyYXRpb24gYW5kIHRoZW4gdGhyb3dpbmcgYQotICBUeXBlRXJyb3IgZm9yIGFuIHVuZXhwZWN0ZWQgb3V0cHV0IHR5cGUuIChUaGUgbGF0dGVyIG1lY2hhbmlzbSByZW1haW5zCi0gIGluIHBsYWNlIGZvciB0aGlyZCBwYXJ0eSBub24tdGV4dCBlbmNvZGluZ3MpCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQogLSBJc3N1ZSAjMjA3Nzg6IEZpeCBtb2R1bGVmaW5kZXIgdG8gd29yayB3aXRoIGJ5dGVjb2RlLW9ubHkgbW9kdWxlcy4KIAogLSBJc3N1ZSAjMjA3OTE6IGNvcHkuY29weSgpIG5vdyBkb2Vzbid0IG1ha2UgYSBjb3B5IHdoZW4gdGhlIGlucHV0IGlzCiAgIGEgYnl0ZXMgb2JqZWN0LiAgSW5pdGlhbCBwYXRjaCBieSBQZXRlciBPdHRlbi4KIAotLSBJc3N1ZSAjMjA2MjE6IEZpeGVzIGEgemlwaW1wb3J0IGJ1ZyBpbnRyb2R1Y2VkIGluIDMuMy40IHRoYXQgY291bGQgY2F1c2UKLSAgc3B1cmlvdXMgY3Jhc2hlcyBvciBTeXN0ZW1FcnJvcnMgd2hlbiBpbXBvcnRpbmcgbW9kdWxlcyBvciBwYWNrYWdlcyBmcm9tIGEKLSAgemlwIGZpbGUuICBUaGUgY2hhbmdlIGNhdXNpbmcgdGhlIHByb2JsZW0gd2FzIHJldmVydGVkLgorLSBJc3N1ZSAjMTk3NDg6IE9uIEFJWCwgdGltZS5ta3RpbWUoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgZm9yIHllYXIKKyAgb3V0c2l6ZSByYW5nZSBbMTkwMjsgMjAzN10uCisKKy0gSXNzdWUgIzIwODE2OiBGaXggaW5zcGVjdC5nZXRjYWxsYXJncygpIHRvIHJhaXNlIGNvcnJlY3QgVHlwZUVycm9yIGZvcgorICBtaXNzaW5nIGtleXdvcmQtb25seSBhcmd1bWVudHMuIFBhdGNoIGJ5IEplcmVtaWFoIExvd2luLgorCistIElzc3VlICMyMDgxNzogRml4IGluc3BlY3QuZ2V0Y2FsbGFyZ3MoKSB0byBmYWlsIGNvcnJlY3RseSBpZiBtb3JlCisgIHRoYW4gMyBhcmd1bWVudHMgYXJlIG1pc3NpbmcuIFBhdGNoIGJ5IEplcmVtaWFoIExvd2luLgorCistIElzc3VlICM2Njc2OiBFbnN1cmUgYSBtZWFuaW5nZnVsIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhdHRlbXB0aW5nCisgIHRvIHBhcnNlIG1vcmUgdGhhbiBvbmUgWE1MIGRvY3VtZW50IHBlciBweWV4cGF0IHhtbHBhcnNlciBpbnN0YW5jZS4KKyAgKE9yaWdpbmFsIHBhdGNoZXMgYnkgSGlyb2thenUgWWFtYW1vdG8gYW5kIEFtYXVyeSBGb3JnZW90IGQnQXJjLCB3aXRoCisgIHN1Z2dlc3RlZCB3b3JkaW5nIGJ5IERhdmlkIEd1dHRlcmlkZ2UpCisKKy0gSXNzdWUgIzIxMTE3OiBGaXggaW5zcGVjdC5zaWduYXR1cmUgdG8gYmV0dGVyIHN1cHBvcnQgZnVuY3Rvb2xzLnBhcnRpYWwuCisgIER1ZSB0byB0aGUgc3BlY2lmaWNzIG9mIGZ1bmN0b29scy5wYXJ0aWFsIGltcGxlbWVudGF0aW9uLAorICBwb3NpdGlvbmFsLW9yLWtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cyBiZWNvbWUKKyAga2V5d29yZC1vbmx5LgorCistIElzc3VlICMyMTIwOTogRml4IGFzeW5jaW8udGFza3MuQ29yb1dyYXBwZXIgdG8gd29ya2Fyb3VuZCBhIGJ1ZworICBpbiB5aWVsZC1mcm9tIGltcGxlbWVudGF0aW9uIGluIENQeXRob25zIHByaW9yIHRvIDMuNC4xLgorCistIGFzeW5jaW86IEFkZCBnaV97ZnJhbWUscnVubmluZyxjb2RlfSBwcm9wZXJ0aWVzIHRvIENvcm9XcmFwcGVyCisgICh1cHN0cmVhbSBpc3N1ZSAjMTYzKS4KKworLSBJc3N1ZSAjMjEzMTE6IEF2b2lkIGV4Y2VwdGlvbiBpbiBfb3N4X3N1cHBvcnQgd2l0aCBub24tc3RhbmRhcmQgY29tcGlsZXIKKyAgY29uZmlndXJhdGlvbnMuICBQYXRjaCBieSBKb2huIFN6YWttZWlzdGVyLgorCistIElzc3VlICMxMTU3MTogRW5zdXJlIHRoYXQgdGhlIHR1cnRsZSB3aW5kb3cgYmVjb21lcyB0aGUgdG9wbW9zdCB3aW5kb3cKKyAgd2hlbiBsYXVuY2hlZCBvbiBPUyBYLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjEyNzY6IHBvc2l4bW9kdWxlOiBEb24ndCBkZWZpbmUgVVNFX1hBVFRSUyBvbiBLRnJlZUJTRCBhbmQgdGhlIEh1cmQuCistIElzc3VlICMyMTIyNjogU2V0IHVwIG1vZHVsZXMgcHJvcGVybHkgaW4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QKKyAgKGFuZCBmcmllbmRzKS4KKworSURMRQorLS0tLQorCistIElzc3VlICMyMTEzOTogQ2hhbmdlIGRlZmF1bHQgcGFyYWdyYXBoIHdpZHRoIHRvIDcyLCB0aGUgUEVQIDggcmVjb21tZW5kYXRpb24uCisKKy0gSXNzdWUgIzIxMjg0OiBQYXJhZ3JhcGggcmVmb3JtYXQgdGVzdCBwYXNzZXMgYWZ0ZXIgdXNlciBjaGFuZ2VzIHJlZm9ybWF0IHdpZHRoLgorCistIElzc3VlICMxNzY1NDogRW5zdXJlIElETEUgbWVudXMgYXJlIGN1c3RvbWl6ZWQgcHJvcGVybHkgb24gT1MgWCBmb3IKKyAgbm9uLWZyYW1ld29yayBidWlsZHMgYW5kIGZvciBhbGwgdmFyaWFudHMgb2YgVGsuCisKK0J1aWxkCistLS0tLQorCistIFRoZSBXaW5kb3dzIGJ1aWxkIG5vdyBpbmNsdWRlcyBPcGVuU1NMIDEuMC4xZworCistIElzc3VlICMyMTI4NTogUmVmYWN0b3IgYW5kIGZpeCBjdXJzZXMgY29uZmlndXJlIGNoZWNrIHRvIGFsd2F5cyBzZWFyY2gKKyAgaW4gYSBuY3Vyc2VzdyBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE1MjM0OiBGb3IgQmVya2VseURCIGFuZCBTcWxpdGUsIG9ubHkgYWRkIHRoZSBmb3VuZCBsaWJyYXJ5IGFuZAorICBpbmNsdWRlIGRpcmVjdG9yaWVzIGlmIHRoZXkgYXJlbid0IGFscmVhZHkgYmVpbmcgc2VhcmNoZWQuIFRoaXMgYXZvaWRzCisgIGFuIGV4cGxpY2l0IHJ1bnRpbWUgbGlicmFyeSBkZXBlbmRlbmN5LgorCistIElzc3VlICMyMDY0NDogT1MgWCBpbnN0YWxsZXIgYnVpbGQgc3VwcG9ydCBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCBjaGFuZ2VzCisgIGluIDMuNC4xOiBhc3N1bWUgZXh0ZXJuYWxseSBzdXBwbGllZCBzcGhpbngtYnVpbGQgaXMgYXZhaWxhYmxlIGluIC91c3IvYmluLgorCitDIEFQSQorLS0tLS0KKy0gSXNzdWUgIzIwOTQyOiBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGVPYmplY3QoKSBubyBsb25nZXIgc2V0cyBfX2ZpbGVfXyB0bworICBtYXRjaCB3aGF0IGltcG9ydGxpYiBkb2VzOyB0aGlzIGFmZmVjdHMgX2Zyb3plbl9pbXBvcnRsaWIgYXMgd2VsbCBhcyBhbnkKKyAgbW9kdWxlIGxvYWRlZCB1c2luZyBpbXAuaW5pdF9mcm96ZW4oKS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNzM4NjogRXhwYW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYGBEb2MvbWFrZS5iYXRgYCBzY3JpcHQgdG8gbWFrZQorICBpdCBtdWNoIG1vcmUgY29tcGFyYWJsZSB0byBgYERvYy9NYWtlZmlsZWBgLgorCistIElzc3VlICMyMTA0MzogUmVtb3ZlIHRoZSByZWNvbW1lbmRhdGlvbiBmb3Igc3BlY2lmaWMgQ0Egb3JnYW5pemF0aW9ucyBhbmQgdG8KKyAgbWVudGlvbiB0aGUgYWJpbGl0eSB0byBsb2FkIHRoZSBPUyBjZXJ0aWZpY2F0ZXMuCisKKy0gSXNzdWUgIzIwNzY1OiBBZGQgbWlzc2luZyBkb2N1bWVudGF0aW9uIGZvciBQdXJlUGF0aC53aXRoX25hbWUoKSBhbmQKKyAgUHVyZVBhdGgud2l0aF9zdWZmaXgoKS4KKworLSBJc3N1ZSAjMTk0MDc6IE5ldyBwYWNrYWdlIGluc3RhbGxhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGd1aWRlcyBiYXNlZCBvbgorICB0aGUgUHl0aG9uIFBhY2thZ2luZyBBdXRob3JpdHkgdG9vbHMuIEV4aXN0aW5nIGd1aWRlcyBoYXZlIGJlZW4gcmV0YWluZWQKKyAgYXMgbGVnYWN5IGxpbmtzIGZyb20gdGhlIGRpc3R1dGlscyBkb2NzLCBhcyB0aGV5IHN0aWxsIGNvbnRhaW4gc29tZQorICByZXF1aXJlZCByZWZlcmVuY2UgbWF0ZXJpYWwgZm9yIHRvb2wgZGV2ZWxvcGVycyB0aGF0IGlzbid0IHJlY29yZGVkCisgIGFueXdoZXJlIGVsc2UuCisKKy0gSXNzdWUgIzE5Njk3OiBEb2N1bWVudCBjYXNlcyB3aGVyZSBfX21haW5fXy5fX3NwZWNfXyBpcyBOb25lLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTg2MDQ6IENvbnNvbGlkYXRlZCBjaGVja3MgZm9yIEdVSSBhdmFpbGFiaWxpdHkuICBBbGwgcGxhdGZvcm1zIG5vdworICBhdCBsZWFzdCBjaGVjayB3aGV0aGVyIFRrIGNhbiBiZSBpbnN0YW50aWF0ZWQgd2hlbiB0aGUgR1VJIHJlc291cmNlIGlzCisgIHJlcXVlc3RlZC4KKworLSBJc3N1ZSAjMjEyNzU6IEZpeCBhIHNvY2tldCB0ZXN0IG9uIEtGcmVlQlNELgorCistIElzc3VlICMyMTIyMzogUGFzcyB0ZXN0X3NpdGUvdGVzdF9zdGFydHVwX2ltcG9ydHMgd2hlbiBzb21lIG9mIHRoZSBleHRlbnNpb25zCisgIGFyZSBidWlsdCBhcyBidWlsdGlucy4KKworLSBJc3N1ZSAjMjA2MzU6IEFkZGVkIHRlc3RzIGZvciBUayBnZW9tZXRyeSBtYW5hZ2Vycy4KKworLSBBZGQgdGVzdCBjYXNlIGZvciBmcmVlemUuCisKKy0gSXNzdWUgIzIwNzQzOiBGaXggYSByZWZlcmVuY2UgbGVhayBpbiB0ZXN0X3RjbC4KKworLSBJc3N1ZSAjMjEwOTc6IE1vdmUgdGVzdF9uYW1lc3BhY2VfcGtncyBpbnRvIHRlc3RfaW1wb3J0bGliLgorCistIElzc3VlICMyMDkzOTogQXZvaWQgdmFyaW91cyBuZXR3b3JrIHRlc3QgZmFpbHVyZXMgZHVlIHRvIG5ldworICByZWRpcmVjdCBvZiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvIHRvIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmc6CisgIHVzZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tIGluc3RlYWQuCisKKy0gSXNzdWUgIzIwNjY4OiBhc3luY2lvIHRlc3RzIG5vIGxvbmdlciByZWx5IG9uIHRlc3RzLnR4dCBmaWxlLgorICAoUGF0Y2ggYnkgVmFqcmFza3kgS29rKQorCistIElzc3VlICMyMTA5MzogUHJldmVudCBmYWlsdXJlcyBvZiBjdHlwZXMgdGVzdF9tYWNob2xpYiBvbiBPUyBYIGlmIGEKKyAgY29weSBvZiBsaWJ6IGV4aXN0cyBpbiAkSE9NRS9saWIgb3IgL3Vzci9sb2NhbC9saWIuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIEFkZCBzdXBwb3J0IGZvciBgYHlpZWxkIGZyb21gYCB0byAydG8zLgorCistIEFkZCBzdXBwb3J0IGZvciB0aGUgUEVQIDQ2NSBtYXRyaXggbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgdG8gMnRvMy4KKworLSBJc3N1ZSAjMTYwNDc6IEZpeCBtb2R1bGUgZXhjZXB0aW9uIGxpc3QgYW5kIF9fZmlsZV9fIGhhbmRsaW5nIGluIGZyZWV6ZS4KKyAgUGF0Y2ggYnkgTWVhZG9yIEluZ2UuCisKKy0gSXNzdWUgIzExODI0OiBDb25zaWRlciBBQkkgdGFncyBpbiBmcmVlemUuIFBhdGNoIGJ5IE1lYWRvciBJbmdlLgorCistIElzc3VlICMyMDUzNTogUFlUSE9OV0FSTklORyBubyBsb25nZXIgYWZmZWN0cyB0aGUgcnVuX3Rlc3RzLnB5IHNjcmlwdC4KKyAgUGF0Y2ggYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTAzLTE2CisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjA5Mzk6IEZpeCB0ZXN0X2dldHVybCBmYWlsdXJlIGluIHRlc3RfdXJsbGlibmV0IGR1ZSB0bworICBuZXcgcmVkaXJlY3Qgb2YgaHR0cDovL3d3dy5weXRob24ub3JnLyB0byBodHRwczovL3d3dy5weXRob24ub3JnLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gTWVyZ2UgaW4gYWxsIGRvY3VtZW50YXRpb24gY2hhbmdlcyBzaW5jZSBicmFuY2hpbmcgMy40LjByYzEuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgcmVsZWFzZSBjYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNC0wMy0wOQorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjA3ODY6IEZpeCBzaWduYXR1cmVzIGZvciBkaWN0Ll9fZGVsaXRlbV9fIGFuZAorICBwcm9wZXJ0eS5fX2RlbGV0ZV9fIGJ1aWx0aW5zLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIwODM5OiBEb24ndCB0cmlnZ2VyIGEgRGVwcmVjYXRpb25XYXJuaW5nIGluIHRoZSBzdGlsbCBzdXBwb3J0ZWQKKyAgcGtndXRpbC5nZXRfbG9hZGVyKCkgQVBJIHdoZW4gX19sb2FkZXJfXyBpc24ndCBzZXQgb24gYSBtb2R1bGUgKG5vcgorICB3aGVuIHBrZ3V0aWwuZmluZF9sb2FkZXIoKSBpcyBjYWxsZWQgZGlyZWN0bHkpLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTQ1MTI6IExhdW5jaCBweWRvYyAtYiBpbnN0ZWFkIG9mIHB5ZG9jZ3VpLnB5dyBvbiBXaW5kb3dzLgorCistIElzc3VlICMyMDc0ODogVW5pbnN0YWxsaW5nIHBpcCBkb2VzIG5vdCBsZWF2ZSBiZWhpbmQgdGhlIHB5YyBvZgorICB0aGUgdW5pbnN0YWxsZXIgYW55bW9yZS4KKworLSBJc3N1ZSAjMjA1Njg6IFRoZSBXaW5kb3dzIGluc3RhbGxlciBub3cgaW5zdGFsbHMgdGhlIHVudmVyc2lvbmVkIGBgcGlwYGAKKyAgY29tbWFuZCBpbiBhZGRpdGlvbiB0byB0aGUgdmVyc2lvbmVkIGBgcGlwM2BgIGFuZCBgYHBpcDMuNGBgIGNvbW1hbmRzLgorCistIElzc3VlICMyMDc1NzogVGhlIGVuc3VyZXBpcCBoZWxwZXIgZm9yIHRoZSBXaW5kb3dzIHVuaW5zdGFsbGVyIG5vdyBza2lwcworICB1bmluc3RhbGxpbmcgcGlwIChyYXRoZXIgdGhhbiBmYWlsaW5nKSBpZiB0aGUgdXNlciBoYXMgdXBkYXRlZCBwaXAgdG8gYQorICBkaWZmZXJlbnQgdmVyc2lvbiBmcm9tIHRoZSBvbmUgYnVuZGxlZCB3aXRoIGVuc3VyZXBpcC4KKworLSBJc3N1ZSAjMjA0NjU6IFVwZGF0ZSBPUyBYIGFuZCBXaW5kb3dzIGluc3RhbGxlciBidWlsZHMgdG8gdXNlCisgIFNRTGl0ZSAzLjguMy4xLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIHJlbGVhc2UgY2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMDItMjMKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIwNjI1OiBQYXJhbWV0ZXIgbmFtZXMgaW4gX19hbm5vdGF0aW9uc19fIHdlcmUgbm90IG1hbmdsZWQgcHJvcGVybHkuCisgIERpc2NvdmVyZWQgYnkgSm9uYXMgV2llbGlja2ksIHBhdGNoIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlICMyMDI2MTogSW4gcGlja2xlLCBsb29rdXAgX19nZXRuZXdhcmdzX18gYW5kIF9fZ2V0bmV3YXJnc19leF9fIG9uIHRoZQorICB0eXBlIG9mIHRoZSBvYmplY3QuCisKKy0gSXNzdWUgIzIwNjE5OiBHaXZlIHRoZSBBU1Qgbm9kZXMgb2Yga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhIGNvbHVtbiBhbmQgbGluZQorICBudW1iZXIuCisKKy0gSXNzdWUgIzIwNTI2OiBSZXZlcnQgY2hhbmdlcyBvZiBpc3N1ZSAjMTk0NjYgd2hpY2ggaW50cm9kdWNlcyBhIHJlZ3Jlc3Npb246CisgIGRvbid0IGNsZWFyIGFueW1vcmUgdGhlIHN0YXRlIG9mIFB5dGhvbiB0aHJlYWRzIGVhcmx5IGR1cmluZyB0aGUgUHl0aG9uCisgIHNodXRkb3duLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIwNzEwOiBUaGUgcHlkb2Mgc3VtbWFyeSBsaW5lIG5vIGxvbmdlciBkaXNwbGF5cyB0aGUgInNlbGYiIHBhcmFtZXRlcgorICBmb3IgYm91bmQgbWV0aG9kcy4KKworLSBJc3N1ZSAjMjA1NjY6IENoYW5nZSBhc3luY2lvLmFzX2NvbXBsZXRlZCgpIHRvIHVzZSBhIFF1ZXVlLCB0bworICBhdm9pZCBPKE4qKjIpIGJlaGF2aW9yLgorCistIElzc3VlICMyMDcwNDogSW1wbGVtZW50IG5ldyBkZWJ1ZyBBUEkgaW4gYXN5bmNpby4gQWRkIG5ldyBtZXRob2RzCisgIEJhc2VFdmVudExvb3Auc2V0X2RlYnVnKCkgYW5kIEJhc2VFdmVudExvb3AuZ2V0X2RlYnVnKCkuCisgIEFkZCBzdXBwb3J0IGZvciBzZXR0aW5nICdhc3luY2lvLnRhc2tzLl9ERUJVRycgdmFyaWFibGUgd2l0aAorICAnUFlUSE9OQVNZTkNJT0RFQlVHJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworLSBhc3luY2lvOiBSZWZhY3RvcmluZyBhbmQgZml4ZXM6IEJhc2VFdmVudExvb3Auc29ja19jb25uZWN0KCkgcmFpc2VzIGFuCisgIGVycm9yIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNvbHZlZDsgdXNlIF9fc2xvdHNfXyBpbiBIYW5kbGUgYW5kCisgIFRpbWVySGFuZGxlOyBhc19jb21wbGV0ZWQoKSBhbmQgd2FpdCgpIHJhaXNlIFR5cGVFcnJvciBpZiB0aGUgcGFzc2VkCisgIGxpc3Qgb2YgRnV0dXJlcyBpcyBhIHNpbmdsZSBGdXR1cmU7IGNhbGxfc29vbigpIGFuZCBvdGhlciAnY2FsbF8qKCknCisgIGZ1bmN0aW9ucyByYWlzZSBUeXBlRXJyb3IgaWYgdGhlIHBhc3NlZCBjYWxsYmFjayBpcyBhIGNvcm91dGluZQorICBmdW5jdGlvbjsgX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQgdXNlcyBfRmxvd0NvbnRyb2xNaXhpbjsKKyAgV3JpdGVUcmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkgY2FsbHMgX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKyAgdG8gY29uc2lkZXIgcGF1c2luZyByZWNlaXZpbmcgaWYgdGhlIHdhdGVybWFyayBsaW1pdHMgaGF2ZSBjaGFuZ2VkOworICBmaXggX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3MoKSBmb3IgSVB2NiBhZGRyZXNzOyBhbmQgb3RoZXIgbWlub3IKKyAgaW1wcm92ZW1lbnRzLCBhbG9uZyB3aXRoIG11bHRpcGxlIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KKworLSBJc3N1ZSAjMjA2ODQ6IEZpeCBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKCkgdG8gbm90IHRvIGZvbGxvdyBfX3dyYXBwZWRfXworICBjaGFpbnMuIE1ha2UgaXRzIGJlaGF2aW91ciBjb25zaXN0ZW50IHdpdGggYm91bmQgbWV0aG9kcyBmaXJzdCBhcmd1bWVudC4KKyAgUGF0Y2ggYnkgTmljayBDb2dobGFuIGFuZCBZdXJ5IFNlbGl2YW5vdi4KKworLSBJc3N1ZSAjMjA2ODE6IEFkZCBuZXcgZXJyb3IgaGFuZGxpbmcgQVBJIGluIGFzeW5jaW8uIE5ldyBBUElzOgorICBsb29wLnNldF9leGNlcHRpb25faGFuZGxlcigpLCBsb29wLmRlZmF1bHRfZXhjZXB0aW9uX2hhbmRsZXIoKSwgYW5kCisgIGxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcigpLgorCistIElzc3VlICMyMDY3MzogSW1wbGVtZW50IHN1cHBvcnQgZm9yIFVOSVggRG9tYWluIFNvY2tldHMgaW4gYXN5bmNpby4KKyAgTmV3IEFQSXM6IGxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigpLCBsb29wLmNyZWF0ZV91bml4X3NlcnZlcigpLAorICBzdHJlYW1zLm9wZW5fdW5peF9jb25uZWN0aW9uKCksIGFuZCBzdHJlYW1zLnN0YXJ0X3VuaXhfc2VydmVyKCkuCisKKy0gSXNzdWUgIzIwNjE2OiBBZGQgYSBmb3JtYXQoKSBtZXRob2QgdG8gdHJhY2VtYWxsb2MuVHJhY2ViYWNrLgorCistIElzc3VlICMxOTc0NDogdGhlIGVuc3VyZXBpcCBpbnN0YWxsYXRpb24gc3RlcCBub3cganVzdCBwcmludHMgYSB3YXJuaW5nIHRvCisgIHN0ZGVyciByYXRoZXIgdGhhbiBmYWlsaW5nIG91dHJpZ2h0IGlmIFNTTC9UTFMgaXMgdW5hdmFpbGFibGUuIFRoaXMgYWxsb3dzCisgIGxvY2FsIGluc3RhbGxhdGlvbiBvZiBQT1NJWCBidWlsZHMgd2l0aG91dCBTU0wvVExTIHN1cHBvcnQuCisKKy0gSXNzdWUgIzIwNTk0OiBBdm9pZCBuYW1lIGNsYXNoIHdpdGggdGhlIGxpYmMgZnVuY3Rpb24gcG9zaXhfY2xvc2UuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMyMDY0MTogUnVuIE1TSSBjdXN0b20gYWN0aW9ucyAocGlwIGluc3RhbGxhdGlvbiwgcHljIGNvbXBpbGF0aW9uKQorICB3aXRoIHRoZSBOb0ltcGVyc29uYXRlIGZsYWcsIHRvIHN1cHBvcnQgZWxldmF0ZWQgZXhlY3V0aW9uIChVQUMpLgorCistIElzc3VlICMyMDIyMTogUmVtb3ZlZCBjb25mbGljdGluZyAob3IgY2lyY3VsYXIpIGh5cG90IGRlZmluaXRpb24gd2hlbgorICBjb21waWxlZCB3aXRoIFZTIDIwMTAgb3IgYWJvdmUuICBJbml0aWFsIHBhdGNoIGJ5IFRhYnJleiBNb2hhbW1lZC4KKworLSBJc3N1ZSAjMjA2MDk6IFJlc3RvcmVkIHRoZSBhYmlsaXR5IHRvIGJ1aWxkIDY0LWJpdCBXaW5kb3dzIGJpbmFyaWVzIG9uCisgIDMyLWJpdCBXaW5kb3dzLCB3aGljaCB3YXMgYnJva2VuIGJ5IHRoZSBjaGFuZ2UgaW4gaXNzdWUgIzE5Nzg4LgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIHJlbGVhc2UgY2FuZGlkYXRlIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMDItMTAKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE5MjU1OiBUaGUgYnVpbHRpbnMgbW9kdWxlIGlzIHJlc3RvcmVkIHRvIGluaXRpYWwgdmFsdWUgYmVmb3JlCisgIGNsZWFuaW5nIG90aGVyIG1vZHVsZXMuICBUaGUgc3lzIGFuZCBidWlsdGlucyBtb2R1bGVzIGFyZSBjbGVhbmVkIGxhc3QuCisKKy0gSXNzdWUgIzIwNTg4OiBNYWtlIFB5dGhvbi1hc3QuYyBDODkgY29tcGxpYW50LgorCistIElzc3VlICMyMDQzNzogRml4ZWQgMjIgcG90ZW50aWFsIGJ1Z3Mgd2hlbiBkZWxldGluZyBvYmplY3RzIHJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzIwNTAwOiBEaXNwbGF5aW5nIGFuIGV4Y2VwdGlvbiBhdCBpbnRlcnByZXRlciBzaHV0ZG93biBubyBsb25nZXIKKyAgcmlza3MgdHJpZ2dlcmluZyBhbiBhc3NlcnRpb24gZmFpbHVyZSBpbiBQeU9iamVjdF9TdHIuCisKKy0gSXNzdWUgIzIwNTM4OiBVVEYtNyBpbmNyZW1lbnRhbCBkZWNvZGVyIHByb2R1Y2VkIGluY29uc2lzdGVudCBzdHJpbmcgd2hlbgorICBpbnB1dCB3YXMgdHJ1bmNhdGVkIGluIEJBU0U2NCBzZWN0aW9uLgogCiAtIElzc3VlICMyMDQwNDogaW8uVGV4dElPV3JhcHBlciAoYW5kIGhlbmNlIHRoZSBvcGVuKCkgYnVpbHRpbikgbm93IHVzZXMgdGhlCiAgIGludGVybmFsIGNvZGVjIG1hcmtpbmcgc3lzdGVtIGFkZGVkIGZvciBpc3N1ZSAjMTk2MTkgdG8gdGhyb3cgTG9va3VwRXJyb3IKQEAgLTk5LDU2ICs5NTEsMjEgQEAKICAgb3V0cHV0IHR5cGUgY2hlY2tzIHJlbWFpbiBpbiBwbGFjZSB0byBkZWFsIHdpdGggdW5tYXJrZWQgdGhpcmQgcGFydHkKICAgY29kZWNzLgogCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzE3MTYyOiBBZGQgUHlUeXBlX0dldFNsb3QuCiAKLS0gSXNzdWUgIzIwNzQzOiBGaXggYSByZWZlcmVuY2UgbGVhayBpbiB0ZXN0X3RjbC4KLQotVG9vbHMvRGVtb3MKLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzIwNTM1OiBQWVRIT05XQVJOSU5HIG5vIGxvbmdlciBhZmZlY3RzIHRoZSBydW5fdGVzdHMucHkgc2NyaXB0LgotICBQYXRjaCBieSBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpcy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNSByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjMtRmViLTIwMTQqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMyMDU4ODogTWFrZSBQeXRob24tYXN0LmMgQzg5IGNvbXBsaWFudC4KLQotLSBJc3N1ZSAjMjA0Mzc6IEZpeGVkIDIxIHBvdGVudGlhbCBidWdzIHdoZW4gZGVsZXRpbmcgb2JqZWN0cyByZWZlcmVuY2VzLgotCi0tIElzc3VlICMyMDUzODogVVRGLTcgaW5jcmVtZW50YWwgZGVjb2RlciBwcm9kdWNlZCBpbmNvbnNpc3RhbnQgc3RyaW5nIHdoZW4KLSAgaW5wdXQgd2FzIHRydW5jYXRlZCBpbiBCQVNFNjQgc2VjdGlvbi4KKy0gSXNzdWUgIzIwMTYyOiBGaXggYW4gYWxpZ25tZW50IGlzc3VlIGluIHRoZSBzaXBoYXNoMjQoKSBoYXNoIGZ1bmN0aW9uIHdoaWNoCisgIGNhdXNlZCBhIGNyYXNoIG9uIFBvd2VyUEMgNjQtYml0IChwcGM2NCkuCiAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMjA2MzU6IEZpeGVkIGdyaWRfY29sdW1uY29uZmlndXJlKCkgYW5kIGdyaWRfcm93Y29uZmlndXJlKCkgbWV0aG9kcyBvZgotICBUa2ludGVyIHdpZGdldHMgdG8gd29yayBpbiB3YW50b2JqZWN0cz1UcnVlIG1vZGUuCistIElzc3VlICMyMDUzMDogVGhlIHNpZ25hdHVyZXMgZm9yIHNsb3QgYnVpbHRpbnMgaGF2ZSBiZWVuIHVwZGF0ZWQKKyAgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXkgb25seSBhY2NlcHQgcG9zaXRpb25hbC1vbmx5IGFyZ3VtZW50cy4KIAotLSBJc3N1ZSAjMTk2MTI6IE9uIFdpbmRvd3MsIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGUoKSBub3cgaWdub3JlcwotICBPU0Vycm9yKDIyLCAnSW52YWxpZCBhcmd1bWVudCcpIHdoZW4gd3JpdGluZyBpbnB1dCBkYXRhIGludG8gc3RkaW4sIHdoZXJlYXMKLSAgdGhlIHByb2Nlc3MgYWxyZWFkeSBleGl0ZWQuCistIElzc3VlICMyMDUxNzogRnVuY3Rpb25zIGluIHRoZSBvcyBtb2R1bGUgdGhhdCBhY2NlcHQgdHdvIGZpbGVuYW1lcworICBub3cgcmVnaXN0ZXIgYm90aCBmaWxlbmFtZXMgaW4gdGhlIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogCi0tIElzc3VlICM2ODE1OiBvcy5wYXRoLmV4cGFuZHZhcnMoKSBub3cgc3VwcG9ydHMgbm9uLUFTQ0lJIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlcyBuYW1lcyBhbmQgdmFsdWVzLgotCi0tIElzc3VlICMxNzY3MTogRml4ZWQgYSBjcmFzaCB3aGVuIHVzZSBub24taW5pdGlhbGl6ZWQgaW8uQnVmZmVyZWRSV1BhaXIuCi0gIEJhc2VkIG9uIHBhdGNoIGJ5IFN0ZXBoZW4gVHUuCi0KLS0gSXNzdWUgIzg0Nzg6IFVudG9rZW5pemVyLmNvbXBhdCBwcm9jZXNzZXMgZmlyc3QgdG9rZW4gZnJvbSBpdGVyYXRvciBpbnB1dC4KLSAgUGF0Y2ggYmFzZWQgb24gbGluZXMgZnJvbSBHZW9yZyBCcmFuZGwsIEVyaWMgU25vdywgYW5kIEdhcmV0aCBSZWVzLgotCi0tIElzc3VlICMyMDU5NDogQXZvaWQgbmFtZSBjbGFzaCB3aXRoIHRoZSBsaWJjIGZ1bmN0aW9uIHBvc2l4X2Nsb3NlLgotCi0tIElzc3VlICMxOTg1Njogc2h1dGlsLm1vdmUoKSBmYWlsZWQgdG8gbW92ZSBhIGRpcmVjdG9yeSB0byBvdGhlciBkaXJlY3RvcnkKLSAgb24gV2luZG93cyBpZiBzb3VyY2UgbmFtZSBlbmRzIHdpdGggb3MuYWx0c2VwLgorLSBJc3N1ZSAjMjA1NjM6IFRoZSBpcGFkZHJlc3MgbW9kdWxlIEFQSSBpcyBub3cgY29uc2lkZXJlZCBzdGFibGUuCiAKIC0gSXNzdWUgIzE0OTgzOiBlbWFpbC5nZW5lcmF0b3Igbm93IGFsd2F5cyBhZGRzIGEgbGluZSBlbmQgYWZ0ZXIgZWFjaCBNSU1FCiAgIGJvdW5kYXJ5IG1hcmtlciwgaW5zdGVhZCBvZiBkb2luZyBzbyBvbmx5IHdoZW4gdGhlcmUgaXMgYW4gZXBpbG9ndWUuICBUaGlzCkBAIC0xNjUsOSArOTgyLDIxIEBACiAtIElzc3VlICMxOTc3MjogZW1haWwuZ2VuZXJhdG9yIG5vIGxvbmdlciBtdXRhdGVzIHRoZSBtZXNzYWdlIG9iamVjdCB3aGVuCiAgIGRvaW5nIGEgZG93bi10cmFuc2Zvcm0gZnJvbSA4Yml0IHRvIDdiaXQgQ1RFcy4KIAorLSBJc3N1ZSAjMjA1MzY6IHRoZSBzdGF0aXN0aWNzIG1vZHVsZSBub3cgY29ycmVjdGx5IGhhbmRsZSBEZWNpbWFsIGluc3RhbmNlcworICB3aXRoIHBvc2l0aXZlIGV4cG9uZW50cworCiAtIElzc3VlICMxODgwNTogdGhlIG5ldG1hc2svaG9zdG1hc2sgcGFyc2luZyBpbiBpcGFkZHJlc3Mgbm93IG1vcmUgcmVsaWFibHkKICAgZmlsdGVycyBvdXQgaWxsZWdhbCB2YWx1ZXMgYW5kIGNvcnJlY3RseSBhbGxvd3MgYW55IHZhbGlkIHByZWZpeCBsZW5ndGguCiAKKy0gSXNzdWUgIzIwNDgxOiBGb3IgYXQgbGVhc3QgUHl0aG9uIDMuNCwgdGhlIHN0YXRpc3RpY3MgbW9kdWxlIHdpbGwgcmVxdWlyZQorICB0aGF0IGFsbCBpbnB1dHMgZm9yIGEgc2luZ2xlIG9wZXJhdGlvbiBiZSBvZiBhIHNpbmdsZSBjb25zaXN0ZW50IHR5cGUsIG9yCisgIGVsc2UgYSBtaXhlZCBvZiBpbnRzIGFuZCBhIHNpbmdsZSBvdGhlciBjb25zaXN0ZW50IHR5cGUuIFRoaXMgYXZvaWRzCisgIHNvbWUgaW50ZXJvcGVyYWJpbGl0eSBpc3N1ZXMgdGhhdCBhcm9zZSB3aXRoIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZgorICBjb2VyY2luZyB0byBhIHN1aXRhYmxlIGNvbW1vbiB0eXBlLgorCistIElzc3VlICMyMDQ3ODogdGhlIHN0YXRpc3RpY3MgbW9kdWxlIG5vdyB0cmVhdHMgY29sbGVjdGlvbnMuQ291bnRlciBpbnB1dHMKKyAgbGlrZSBhbnkgb3RoZXIgaXRlcmFibGUuCisKIC0gSXNzdWUgIzE3MzY5OiBnZXRfZmlsZW5hbWUgd2FzIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGlmIHRoZSBmaWxlbmFtZQogICBwYXJhbWV0ZXIncyBSRkMyMjMxIGVuY29kaW5nIHdhcyBicm9rZW4gaW4gY2VydGFpbiB3YXlzLiAgVGhpcyB3YXMKICAgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIHB5dGhvbjIuCkBAIC0xNzYsNiArMTAwNSwxNCBAQAogICBkZWxldGVkLCBhbmQgaW1hcGxpYiBkaWQgbm90IGhhbmRsZSB0aGF0IGNhc2UgZ3JhY2VmdWxseS4gIE5vdyBpdAogICBoYW5kbGVzIHRoZSAnYnllJyBjb3JyZWN0bHkuCiAKKy0gSXNzdWUgIzIwNTMxOiBSZXZlcnQgMy40IHZlcnNpb24gb2YgZml4IGZvciAjMTkwNjMsIGFuZCBhcHBseSB0aGUgMy4zCisgIHZlcnNpb24uICBUaGF0IGlzLCBkbyAqbm90KiByYWlzZSBhbiBlcnJvciBpZiB1bmljb2RlIGlzIHBhc3NlZCB0bworICBlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3BheWxvYWQuCisKKy0gSXNzdWUgIzIwNDc2OiBJZiBhIG5vbi1jb21wYXQzMiBwb2xpY3kgaXMgdXNlZCB3aXRoIGFueSBvZiB0aGUgZW1haWwgcGFyc2VycywKKyAgRW1haWxNZXNzYWdlIGlzIG5vdyB1c2VkIGFzIHRoZSBmYWN0b3J5IGNsYXNzLiAgVGhlIGZhY3RvcnkgY2xhc3Mgc2hvdWxkCisgIHJlYWxseSBjb21lIGZyb20gdGhlIHBvbGljeTsgdGhhdCB3aWxsIGdldCBmaXhlZCBpbiAzLjUuCisKIC0gSXNzdWUgIzE5OTIwOiBUYXJGaWxlLmxpc3QoKSBubyBsb25nZXIgZmFpbHMgd2hlbiBvdXRwdXRzIGEgbGlzdGluZwogICBjb250YWluaW5nIG5vbi1lbmNvZGFibGUgY2hhcmFjdGVycy4gIEJhc2VkIG9uIHBhdGNoIGJ5IFZhanJhc2t5IEtvay4KIApAQCAtMTgzLDYgKzEwMjAsOSBAQAogCiAtIElzc3VlICMxOTE4NjogUmVzdG9yZSBuYW1lc3BhY2luZyBvZiBleHBhdCBzeW1ib2xzIGluc2lkZSB0aGUgcHlleHBhdCBtb2R1bGUuCiAKKy0gSXNzdWUgIzIwMDUzOiBlbnN1cmVwaXAgKGFuZCBoZW5jZSB2ZW52KSBhcmUgbm8gbG9uZ2VyIGFmZmVjdGVkIGJ5IHRoZQorICBzZXR0aW5ncyBpbiB0aGUgZGVmYXVsdCBwaXAgY29uZmlndXJhdGlvbiBmaWxlLgorCiAtIElzc3VlICMyMDQyNjogV2hlbiBwYXNzaW5nIHRoZSByZS5ERUJVRyBmbGFnLCByZS5jb21waWxlKCkgZGlzcGxheXMgdGhlCiAgIGRlYnVnIG91dHB1dCBldmVyeSB0aW1lIGl0IGlzIGNhbGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgY29tcGlsYXRpb24gY2FjaGUuCiAKQEAgLTE5MiwxNyArMTAzMiw2MiBAQAogLSBJc3N1ZSAjMjA0MzU6IEZpeCBfcHlpby5TdHJpbmdJTy5nZXR2YWx1ZSgpIHRvIHRha2UgaW50byBhY2NvdW50IG5ld2xpbmUKICAgdHJhbnNsYXRpb24gc2V0dGluZ3MuCiAKKy0gdHJhY2VtYWxsb2M6IEZpeCBzbGljaW5nIHRyYWNlcyBhbmQgZml4IHNsaWNpbmcgYSB0cmFjZWJhY2suCisKKy0gSXNzdWUgIzIwMzU0OiBGaXggYW4gYWxpZ25tZW50IGlzc3VlIGluIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgb24gNjQtYml0CisgIHBsYXRmb3Jtcy4gQnVnIHNlZW4gb24gNjQtYml0IExpbnV4IHdoZW4gdXNpbmcgIm1ha2UgcHJvZmlsZS1vcHQiLgorCistIElzc3VlICMxNzE1OTogaW5zcGVjdC5zaWduYXR1cmUgbm93IGFjY2VwdHMgZHVjayB0eXBlcyBvZiBmdW5jdGlvbnMsCisgIHdoaWNoIGFkZHMgc3VwcG9ydCBmb3IgQ3l0aG9uIGZ1bmN0aW9ucy4gSW5pdGlhbCBwYXRjaCBieSBTdGVmYW4gQmVobmVsLgorCistIElzc3VlICMxODgwMTogRml4IGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMgdG8gY29ycmVjdGx5IGNsYXNzaWZ5CisgIG9iamVjdC5fX25ld19fIGFuZCBvYmplY3QuX19pbml0X18uCisKKy0gRml4ZWQgY21hdGguaXNpbmYncyBuYW1lIGluIGl0cyBhcmd1bWVudCBwYXJzaW5nIGNvZGUuCisKKy0gSXNzdWUgIzIwMzExLCAjMjA0NTI6IHBvbGwgYW5kIGVwb2xsIG5vdyByb3VuZCB0aGUgdGltZW91dCBhd2F5IGZyb20gemVybywKKyAgaW5zdGVhZCBvZiByb3VuZGluZyB0b3dhcmRzIHplcm8sIGluIHNlbGVjdCBhbmQgc2VsZWN0b3JzIG1vZHVsZXM6CisgIHNlbGVjdC5lcG9sbC5wb2xsKCksIHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IucG9sbCgpIGFuZAorICBzZWxlY3RvcnMuRXBvbGxTZWxlY3Rvci5wb2xsKCkuIEZvciBleGFtcGxlLCBhIHRpbWVvdXQgb2Ygb25lIG1pY3Jvc2Vjb25kCisgICgxZS02KSBpcyBub3cgcm91bmRlZCB0byBvbmUgbWlsbGlzZWNvbmRpICgxZS0zKSwgaW5zdGVhZCBvZiBiZWluZyByb3VuZGVkIHRvCisgIHplcm8uICBIb3dldmVyLCB0aGUgZ3JhbnVsYXJpdHkgcHJvcGVydHkgYW5kIGFzeW5jaW8ncyByZXNvbHV0aW9uIGZlYXR1cmUKKyAgd2VyZSByZW1vdmVkIGFnYWluLgorCistIGFzeW5jaW86IFNvbWUgcmVmYWN0b3Jpbmc7IHZhcmlvdXMgZml4ZXM7IGFkZCB3cml0ZSBmbG93IGNvbnRyb2wgdG8KKyAgdW5peCBwaXBlczsgRnV0dXJlLnNldF9leGNlcHRpb24oKSBpbnN0YW50aWF0ZXMgdGhlIGV4Y2VwdGlvbgorICBhcmd1bWVudCBpZiBpdCBpcyBhIGNsYXNzOyBpbXByb3ZlZCBwcm9hY3RvciBwaXBlIHRyYW5zcG9ydDsgc3VwcG9ydAorICB3YWl0X2ZvcihmLCBOb25lKTsgZG9uJ3QgbG9nIGJyb2tlbi9kaXNjb25uZWN0ZWQgcGlwZXM7IHVzZQorICBWYWx1ZUVycm9yIGluc3RlYWQgb2YgYXNzZXJ0IGZvciBmb3JiaWRkZW4gc3VicHJvY2Vzc197c2hlbGwsZXhlY30KKyAgYXJndW1lbnRzOyBhZGRlZCBhIGNvbnZlbmllbmNlIEFQSSBmb3Igc3VicHJvY2VzcyBtYW5hZ2VtZW50OyBhZGRlZAorICBTdHJlYW1SZWFkZXIuYXRfZW9mKCk7IHByb3Blcmx5IGhhbmRsZSBkdXBsaWNhdGUgY29yb3V0aW5lcy9mdXR1cmVzCisgIGluIGdhdGhlcigpLCB3YWl0KCksIGFzX2NvbXBsZXRlZCgpOyB1c2UgYSBieXRlYXJyYXkgZm9yIGJ1ZmZlcmluZworICBpbiBTdHJlYW1SZWFkZXI7IGFuZCBtb3JlLgorCiAtIElzc3VlICMyMDI4ODogZml4IGhhbmRsaW5nIG9mIGludmFsaWQgbnVtZXJpYyBjaGFycmVmcyBpbiBIVE1MUGFyc2VyLgogCiAtIElzc3VlICMyMDQyNDogUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGlvLlN0cmluZ0lPIG5vdyBzdXBwb3J0cyBsb25lIHN1cnJvZ2F0ZXMuCiAKKy0gSXNzdWUgIzIwMzA4OiBpbnNwZWN0LnNpZ25hdHVyZSBub3cgd29ya3Mgb24gY2xhc3NlcyB3aXRob3V0IHVzZXItZGVmaW5lZAorICBfX2luaXRfXyBvciBfX25ld19fIG1ldGhvZHMuCisKKy0gSXNzdWUgIzIwMzcyOiBpbnNwZWN0LmdldGZpbGUgKGFuZCBhIGJ1bmNoIG9mIG90aGVyIGluc3BlY3QgZnVuY3Rpb25zIHRoYXQKKyAgdXNlIGl0KSBkb2Vzbid0IGNyYXNoIHdpdGggdW5leHBlY3RlZCBBdHRyaWJ1dGVFcnJvciBvbiBjbGFzc2VzIGRlZmluZWQgaW4gQworICB3aXRob3V0IF9fbW9kdWxlX18uCisKKy0gSXNzdWUgIzIwMzU2OiBpbnNwZWN0LnNpZ25hdHVyZSBmb3JtYXR0aW5nIHVzZXMgJy8nIHRvIHNlcGFyYXRlCisgIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzIGZyb20gb3RoZXJzLgorCistIElzc3VlICMyMDIyMzogaW5zcGVjdC5zaWduYXR1cmUgbm93IHN1cHBvcnRzIG1ldGhvZHMgZGVmaW5lZCB3aXRoCisgIGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kcy4KKwogLSBJc3N1ZSAjMTk0NTY6IG50cGF0aC5qb2luKCkgbm93IGpvaW5zIHJlbGF0aXZlIHBhdGhzIGNvcnJlY3RseSB3aGVuIGEgZHJpdmUKICAgaXMgcHJlc2VudC4KIAotLSBJc3N1ZSAjMTkwNzc6IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSBjbGVhbnVwIGlzIG5vdyBtb3N0IGxpa2VseQotICBzdWNjZXNzZnVsIHdoZW4gY2FsbGVkIGR1cmluZyBudWxsaW5nIG91dCBvZiBtb2R1bGVzIGR1cmluZyBzaHV0ZG93bi4KLSAgTWlzbGVhZGluZyBleGNlcHRpb24gbm8gbG9uZ2VyIHJhaXNlZCB3aGVuIHJlc291cmNlIHdhcm5pbmcgaXMgZW1pdHRlZAotICBkdXJpbmcgc2h1dGRvd24uCistIElzc3VlICMxOTA3NzogdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5IGNsZWFudXAgbm8gbG9uZ2VyIGZhaWxzIHdoZW4KKyAgY2FsbGVkIGR1cmluZyBzaHV0ZG93bi4gIEVtaXR0aW5nIHJlc291cmNlIHdhcm5pbmcgaW4gX19kZWxfXyBubyBsb25nZXIgZmFpbHMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LgorCistIElzc3VlICMyMDM5NDogU2lsZW5jZSBDb3Zlcml0eSB3YXJuaW5nIGluIGF1ZGlvb3AgbW9kdWxlLgogCiAtIElzc3VlICMyMDM2NzogRml4IGJlaGF2aW9yIG9mIGNvbmN1cnJlbnQuZnV0dXJlcy5hc19jb21wbGV0ZWQoKSBmb3IKICAgZHVwbGljYXRlIGFyZ3VtZW50cy4gIFBhdGNoIGJ5IEdsZW5uIExhbmdmb3JkLgpAQCAtMjExLDYgKzEwOTYsMTggQEAKICAgY29kZWNzLlN0cmVhbVJlYWRlciByZXR1cm5lZCBpbmNvbXBsZXRlIGRhdGEgd2hlbiB3ZXJlIGNhbGxlZCBhZnRlcgogICByZWFkbGluZSgpIG9yIHJlYWQoc2l6ZSkuICBCYXNlZCBvbiBwYXRjaCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KIAorLSBJc3N1ZSAjMjAxMDU6IHRoZSBjb2RlYyBleGNlcHRpb24gY2hhaW5pbmcgbm93IGNvcnJlY3RseSBzZXRzIHRoZQorICB0cmFjZWJhY2sgb2YgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBhcyBpdHMgX190cmFjZWJhY2tfXyBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzE3NDgxOiBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKCkgbm93IHVzZXMgaW5zcGVjdC5zaWduYXR1cmUoKSBBUEkuCisKKy0gSXNzdWUgIzE1MzA0OiBjb25jdXJyZW50LmZ1dHVyZXMud2FpdCgpIGNhbiBibG9jayBmb3JldmVyIGV2ZW4gaWYKKyAgRnV0dXJlcyBoYXZlIGNvbXBsZXRlZC4gUGF0Y2ggYnkgR2xlbm4gTGFuZ2ZvcmQuCisKKy0gSXNzdWUgIzE0NDU1OiBwbGlzdGxpYjogZml4IHNlcmlhbGl6aW5nIGludGVnZXJzIGludGVnZXJzIGluIHRoZSByYW5nZQorICBvZiBhbiB1bnNpZ25lZCBsb25nIGxvbmcgYnV0IG91dHNpZGUgb2YgdGhlIHJhbmdlIG9mIHNpZ25lZCBsb25nIGxvbmcgZm9yCisgIGJpbmFyeSBwbGlzdCBmaWxlcy4KKwogSURMRQogLS0tLQogCkBAIC0yMjYsMTEgKzExMjMsNyBAQAogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzIwNTEwOiBSZXdyb3RlIHRlc3RfZXhpdCBpbiB0ZXN0X3N5cyB0byBtYXRjaCBleGlzdGluZyBjb21tZW50cywKLSAgdXNlIG1vZGVybiB1bml0dGVzdCBmZWF0dXJlcywgYW5kIHVzZSBoZWxwZXJzIGZyb20gdGVzdC5zY3JpcHRfaGVscGVyCi0gIGluc3RlYWQgb2YgdXNpbmcgc3VicHJvY2VzcyBkaXJlY3RseS4gIFBhdGNoIGJ5IEdhcmV0aCBSZWVzLgotCi0tIElzc3VlICMyMDUzMjogVGVzdHMgd2hpY2ggdXNlIF90ZXN0Y2FwaSBhcmUgbm93IG1hcmtlZCBhcyBDUHl0aG9uIG9ubHkuCistIElzc3VlICMyMDUzMjogVGVzdHMgd2hpY2ggdXNlIF90ZXN0Y2FwaSBub3cgYXJlIG1hcmtlZCBhcyBDUHl0aG9uIG9ubHkuCiAKIC0gSXNzdWUgIzE5OTIwOiBBZGRlZCB0ZXN0cyBmb3IgVGFyRmlsZS5saXN0KCkuICBCYXNlZCBvbiBwYXRjaCBieSBWYWpyYXNreSBLb2suCiAKQEAgLTIzOSw0MyArMTEzMiw3MyBAQAogCiAtIElzc3VlICMyMDQ3NDogRml4IHRlc3Rfc29ja2V0ICJ1bmV4cGVjdGVkIHN1Y2Nlc3MiIGZhaWx1cmVzIG9uIE9TIFggMTAuNysuCiAKLS0gSXNzdWUgIzIwNjA1OiBNYWtlIHRlc3Rfc29ja2V0IGdldGFkZHJpbmZvIE9TIFggc2VnZmF1bHQgdGVzdCBtb3JlIHJvYnVzdC4KK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQogCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tCistIElzc3VlICMyMDUzMDogQXJndW1lbnQgQ2xpbmljJ3Mgc2lnbmF0dXJlIGZvcm1hdCBoYXMgYmVlbiByZXZpc2VkIGFnYWluLgorICBUaGUgbmV3IHN5bnRheCBpcyBoaWdobHkgaHVtYW4gcmVhZGFibGUgd2hpbGUgc3RpbGwgcHJldmVudGluZyBmYWxzZQorICBwb3NpdGl2ZXMuICBUaGUgc3ludGF4IGFsc28gZXh0ZW5kcyBQeXRob24gc3ludGF4IHRvIGRlbm90ZSAic2VsZiIgYW5kCisgIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCBhbGxvd2luZyBpbnNwZWN0LlNpZ25hdHVyZSBvYmplY3RzIHRvIGJlCisgIHRvdGFsbHkgYWNjdXJhdGUgZm9yIGFsbCBzdXBwb3J0ZWQgYnVpbHRpbnMgaW4gUHl0aG9uIDMuNC4KIAotLSBJc3N1ZSAjMjA0ODg6IEltcG9ydGxpYiBpcyBubyBsb25nZXIgKmFuKiBpbXBsZW1lbnRhdGlvbiBvZiBpbXBvcnQsIGl0J3MgKnRoZSoKLSAgaW1wbGVtZW50YXRpb24uCistIElzc3VlICMyMDQ1NjogQXJndW1lbnQgQ2xpbmljIG5vdyBvYnNlcnZlcyB0aGUgQyBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwKKyAgY29tcGlsYXRpb24gc3RhdGVtZW50cyBvZiB0aGUgQyBmaWxlcyBpdCBwYXJzZXMuICBXaGVuIGEgQ2xpbmljIGJsb2NrIGlzCisgIGluc2lkZSBhIGNvbmRpdGlvbmFsIGNvZGUsIGl0IGFkanVzdHMgaXRzIG91dHB1dCB0byBtYXRjaCwgaW5jbHVkaW5nCisgIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGluZyBhbiBlbXB0eSBtZXRob2RkZWYgbWFjcm8uCisKKy0gSXNzdWUgIzIwNDU2OiBDbG9uZWQgZnVuY3Rpb25zIGluIEFyZ3VtZW50IENsaW5pYyBub3cgdXNlIHRoZSBjb3JyZWN0CisgIG5hbWUsIG5vdCB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdGhleSB3ZXJlIGNsb25lZCBmcm9tLCBmb3IgdGV4dAorICBzdHJpbmdzIGluc2lkZSBnZW5lcmF0ZWQgY29kZS4KKworLSBJc3N1ZSAjMjA0NTY6IEZpeGVkIEFyZ3VtZW50IENsaW5pYydzIHRlc3Qgc3VpdGUgYW5kICItLWNvbnZlcnRlcnMiIGZlYXR1cmUuCisKKy0gSXNzdWUgIzIwNDU2OiBBcmd1bWVudCBDbGluaWMgbm93IGFsbG93cyBzcGVjaWZ5aW5nIGRpZmZlcmVudCBuYW1lcworICBmb3IgYSBwYXJhbWV0ZXIgaW4gUHl0aG9uIGFuZCBDLCB1c2luZyAiYXMiIG9uIHRoZSBwYXJhbWV0ZXIgbGluZS4KKworLSBJc3N1ZSAjMjAzMjY6IEFyZ3VtZW50IENsaW5pYyBub3cgdXNlcyBhIHNpbXBsZSwgdW5pcXVlIHNpZ25hdHVyZSB0bworICBhbm5vdGF0ZSB0ZXh0IHNpZ25hdHVyZXMgaW4gZG9jc3RyaW5ncywgcmVzdWx0aW5nIGluIGZld2VyIGZhbHNlCisgIHBvc2l0aXZlcy4gICJzZWxmIiBwYXJhbWV0ZXJzIGFyZSBhbHNvIGV4cGxpY2l0bHkgbWFya2VkLCBhbGxvd2luZworICBpbnNwZWN0LlNpZ25hdHVyZSgpIHRvIGF1dGhvcml0YXRpdmVseSBkZXRlY3QgKGFuZCBza2lwKSBzYWlkIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzIwMzI2OiBBcmd1bWVudCBDbGluaWMgbm93IGdlbmVyYXRlcyBzZXBhcmF0ZSBjaGVja3N1bXMgZm9yIHRoZQorICBpbnB1dCBhbmQgb3V0cHV0IHNlY3Rpb25zIG9mIHRoZSBibG9jaywgYWxsb3dpbmcgZXh0ZXJuYWwgdG9vbHMgdG8gdmVyaWZ5CisgIHRoYXQgdGhlIGlucHV0IGhhcyBub3QgY2hhbmdlZCAoYW5kIHRodXMgdGhlIG91dHB1dCBpcyBub3Qgb3V0LW9mLWRhdGUpLgogCiBCdWlsZAogLS0tLS0KIAotLSBJc3N1ZSAjMjAyMjE6IFJlbW92ZWQgY29uZmxpY3RpbmcgKG9yIGNpcmN1bGFyKSBoeXBvdCBkZWZpbml0aW9uIHdoZW4KLSAgY29tcGlsZWQgd2l0aCBWUyAyMDEwIG9yIGFib3ZlLiAgSW5pdGlhbCBwYXRjaCBieSBUYWJyZXogTW9oYW1tZWQuCistIElzc3VlICMyMDQ2NTogVXBkYXRlIFNRTGl0ZSBzaGlwcGVkIHdpdGggT1MgWCBpbnN0YWxsZXIgdG8gMy44LjMuCiAKLS0gSXNzdWUgIzIwNjA5OiBSZXN0b3JlZCB0aGUgYWJpbGl0eSB0byBidWlsZCA2NC1iaXQgV2luZG93cyBiaW5hcmllcyBvbgotICAzMi1iaXQgV2luZG93cywgd2hpY2ggd2FzIGJyb2tlbiBieSB0aGUgY2hhbmdlIGluIGlzc3VlICMxOTc4OC4KK0MtQVBJCistLS0tLQorCistIElzc3VlICMyMDUxNzogQWRkZWQgbmV3IGZ1bmN0aW9ucyBhbGxvd2luZyBPU0Vycm9yIGV4Y2VwdGlvbnMgdG8gcmVmZXJlbmNlCisgIHR3byBmaWxlbmFtZXMgaW5zdGVhZCBvZiBvbmU6IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoKSBhbmQKKyAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKCkuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjA0ODg6IENoYW5nZSB3b3JkaW5nIHRvIHNheSBpbXBvcnRsaWIgaXMgKnRoZSogaW1wbGVtZW50YXRpb24gb2YKKyAgaW1wb3J0IGluc3RlYWQgb2YganVzdCAqYW4qIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICM2Mzg2OiBDbGFyaWZ5IGluIHRoZSB0dXRvcmlhbCB0aGF0IHNwZWNpZnlpbmcgYSBzeW1saW5rIHRvIGV4ZWN1dGUKKyAgbWVhbnMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRlZCBzY3JpcHQgYW5kIG5vdCB0aGUgc3ltbGluayBpcworICBhZGRlZCB0byBzeXMucGF0aC4KIAogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuND8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQorV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQmV0YSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAwOS1GZWItMjAxNCoKLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICMyMDM3NDogRml4IGJ1aWxkIHdhcm5pbmdzIG9mIHRoZSByZWFkbGluZSBtb2R1bGUgd2l0aCBsaWJlZGl0IG9uIE1hYy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNCByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjYtSmFuLTIwMTQqCitSZWxlYXNlIGRhdGU6IDIwMTQtMDEtMjYKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzIwMTg5OiBGb3VyIGFkZGl0aW9uYWwgYnVpbHRpbiB0eXBlcyAoUHlUeXBlT2JqZWN0LAorICBQeU1ldGhvZERlc2NyX1R5cGUsIF9QeU1ldGhvZFdyYXBwZXJfVHlwZSwgYW5kIFB5V3JhcHBlckRlc2NyX1R5cGUpCisgIGhhdmUgYmVlbiBtb2RpZmllZCB0byBwcm92aWRlIGludHJvc3BlY3Rpb24gaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zLgorCiAtIElzc3VlICMxNzgyNTogQ3Vyc29yICJeIiBpcyBjb3JyZWN0bHkgcG9zaXRpb25lZCBmb3IgU3ludGF4RXJyb3IgYW5kCiAgIEluZGVudGF0aW9uRXJyb3IuCiAKQEAgLTI5MCwyOSArMTIxMywyNiBAQAogICBzb3VyY2UgZW5jb2RpbmcgZGVjbGFyYXRpb25zLCBhbmQgY2FuIGJlIHVzZWQgdG8gbWFrZSBQeXRob24gYmF0Y2ggZmlsZXMKICAgb24gV2luZG93cy4KIAotLSBJc3N1ZSAjMTc0MzI6IERyb3AgVUNTMiBmcm9tIG5hbWVzIG9mIFVuaWNvZGUgZnVuY3Rpb25zIGluIHB5dGhvbjMuZGVmLgotCi0tIElzc3VlICMxOTk2OTogUHlCeXRlc19Gcm9tRm9ybWF0VigpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciBpZiAiJWMiCi0gIGFyZ3VtZW50IGlzIG5vdCBpbiByYW5nZSBbMDsgMjU1XS4KLQotLSBJc3N1ZSAjMTQ0MzI6IEdlbmVyYXRvciBub3cgY2xlYXJzIHRoZSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gdGhlIHRocmVhZAotICBzdGF0ZS4gRml4IGEgY3Jhc2ggd2hlbiBhIGdlbmVyYXRvciBpcyBjcmVhdGVkIGluIGEgQyB0aHJlYWQgdGhhdCBpcwotICBkZXN0cm95ZWQgd2hpbGUgdGhlIGdlbmVyYXRvciBpcyBzdGlsbCB1c2VkLiBUaGUgaXNzdWUgd2FzIHRoYXQgYSBnZW5lcmF0b3IKLSAgY29udGFpbnMgYSBmcmFtZSwgYW5kIHRoZSBmcmFtZSBrZXB0IGEgcmVmZXJlbmNlIHRvIHRoZSBQeXRob24gc3RhdGUgb2YgdGhlCi0gIGRlc3Ryb3llZCBDIHRocmVhZC4gVGhlIGNyYXNoIG9jY3VycyB3aGVuIGEgdHJhY2UgZnVuY3Rpb24gaXMgc2V0dXAuCi0KLS0gSXNzdWUgIzE5OTMyOiBGaXggdHlwbyBpbiBpbXBvcnQuaCwgbWlzc2luZyB3aGl0ZXNwYWNlcyBpbiBmdW5jdGlvbiBwcm90b3R5cGVzLgotCi0tIElzc3VlICMxOTcyOTogSW4gc3RyLmZvcm1hdCgpLCBmaXggcmVjdXJzaXZlIGV4cGFuc2lvbiBpbiBmb3JtYXQgc3BlYy4KLQotLSBJc3N1ZSAjMTk2Mzg6IEZpeCBwb3NzaWJsZSBjcmFzaCAvIHVuZGVmaW5lZCBiZWhhdmlvdXIgZnJvbSBodWdlIChtb3JlIHRoYW4gMgotICBiaWxsaW9uIGNoYXJhY3RlcnMpIGlucHV0IHN0cmluZ3MgaW4gX1B5X2RnX3N0cnRvZC4KLQogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICMxNjA0MjogQ1ZFLTIwMTMtMTc1Mjogc210cGxpYjogTGltaXQgYW1vdW50IG9mIGRhdGEgcmVhZCBieQotICBsaW1pdGluZyB0aGUgY2FsbCB0byByZWFkbGluZSgpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXN0aWFuIEhlaW1lcy4KKy0gYXN5bmNpbzogVmFyaW91cyBpbXByb3ZlbWVudHMgYW5kIHNtYWxsIGNoYW5nZXMgbm90IGFsbCBjb3ZlcmVkIGJ5CisgIGlzc3VlcyBsaXN0ZWQgYmVsb3cuICBFLmcuIHdhaXRfZm9yKCkgbm93IGNhbmNlbHMgdGhlIGlubmVyIHRhc2sgaWYKKyAgdGhlIHRpbWVvdXQgb2NjY3VyczsgdHdlYWtlZCB0aGUgc2V0IG9mIGV4cG9ydGVkIHN5bWJvbHM7IHJlbmFtZWQKKyAgRW1wdHkvRnVsbCB0byBRdWV1ZUVtcHR5L1F1ZXVlRnVsbDsgIndpdGggKHlpZWxkIGZyb20gbG9jaykiIG5vdworICB1c2VzIGEgc2VwYXJhdGUgY29udGV4dCBtYW5hZ2VyOyByZWFkZXhhY3RseSgpIHJhaXNlcyBpZiBub3QgZW5vdWdoCisgIGRhdGEgd2FzIHJlYWQ7IFBUWSBzdXBwb3J0IHR3ZWFrcy4KKworLSBJc3N1ZSAjMjAzMTE6IGFzeW5jaW86IEFkZCBhIGdyYW51bGFyaXR5IGF0dHJpYnV0ZSB0byBCYXNlRXZlbnRMb29wOiBtYXhpbXVtCisgIGJldHdlZW4gdGhlIHJlc29sdXRpb24gb2YgdGhlIEJhc2VFdmVudExvb3AudGltZSgpIG1ldGhvZCBhbmQgdGhlIHJlc29sdXRpb24KKyAgb2YgdGhlIHNlbGVjdG9yLiBUaGUgZ3JhbnVhcmlsaXR5IGlzIHVzZWQgaW4gdGhlIHNjaGVkdWxlciB0byByb3VuZCB0aW1lIGFuZAorICBkZWFkbGluZS4KKworLSBJc3N1ZSAjMjAzMTE6IHNlbGVjdG9yczogQWRkIGEgcmVzb2x1dGlvbiBhdHRyaWJ1dGUgdG8gQmFzZVNlbGVjdG9yLgorCistIElzc3VlICMyMDE4OTogdW5pdHRlc3QubW9jayBub3cgbm8gbG9uZ2VyIGFzc3VtZXMgdGhhdCBhbnkgb2JqZWN0IGZvcgorICB3aGljaCBpdCBjb3VsZCBnZXQgYW4gaW5zcGVjdC5TaWduYXR1cmUgaXMgYSBjYWxsYWJsZSB3cml0dGVuIGluIFB5dGhvbi4KKyAgRml4IGNvdXJ0ZXN5IG9mIE1pY2hhZWwgRm9vcmQuCiAKIC0gSXNzdWUgIzIwMzE3OiBFeGl0U3RhY2suX19leGl0X18gY291bGQgY3JlYXRlIGEgc2VsZi1yZWZlcmVudGlhbCBsb29wIGlmIGFuCiAgIGV4Y2VwdGlvbiByYWlzZWQgYnkgYSBjbGVhbnVwIG9wZXJhdGlvbiBhbHJlYWR5IGhhZCBpdHMgY29udGV4dCBzZXQKQEAgLTMyNSw2ICsxMjQ1LDkgQEAKIC0gSXNzdWUgIzIwMjYyOiBXYXJuaW5ncyBhcmUgcmFpc2VkIG5vdyB3aGVuIGR1cGxpY2F0ZSBuYW1lcyBhcmUgYWRkZWQgaW4gdGhlCiAgIFpJUCBmaWxlIG9yIHRvbyBsb25nIFpJUCBmaWxlIGNvbW1lbnQgaXMgdHJ1bmNhdGVkLgogCistIElzc3VlICMyMDE2NTogVGhlIHVuaXR0ZXN0IG1vZHVsZSBubyBsb25nZXIgY29uc2lkZXJzIHRlc3RzIG1hcmtlZCB3aXRoCisgIEBleHBlY3RlZEZhaWx1cmUgc3VjY2Vzc2Z1bCBpZiB0aGV5IHBhc3MuCisKIC0gSXNzdWUgIzE4NTc0OiBBZGRlZCBtaXNzaW5nIG5ld2xpbmUgaW4gMTAwLUNvbnRpbnVlIHJlcGx5IGZyb20KICAgaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci4gUGF0Y2ggYnkgTmlrb2xhdXMgUmF0aC4KIApAQCAtMzU2LDcgKzEyNzksNyBAQAogLSBJc3N1ZSAjMTkwOTc6IFJhaXNlIHRoZSBjb3JyZWN0IEV4Y2VwdGlvbiB3aGVuIGNnaS5GaWVsZFN0b3JhZ2UgaXMgZ2l2ZW4gYW4KICAgaW52YWxpZCBmaWxlb2JqLgogCi0tIElzc3VlICMyMDIxNzogRml4IGJ1aWxkIGluIFNDSEVEX1NQT1JBRElDIGlzIGRlZmluZWQuCistIElzc3VlICMyMDE1MjogUG9ydGVkIFB5dGhvbi9pbXBvcnQuYyBvdmVyIHRvIEFyZ3VtZW50IENsaW5pYy4KIAogLSBJc3N1ZSAjMTMxMDc6IGFyZ3BhcnNlIGFuZCBvcHRwYXJzZSBubyBsb25nZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGVuIG91dHB1dAogICBhIGhlbHAgb24gZW52aXJvbm1lbnQgd2l0aCB0b28gc21hbGwgQ09MVU1OUy4gIEJhc2VkIG9uIHBhdGNoIGJ5CkBAIC0zNzQsMjAgKzEyOTcsMjA1IEBACiAtIElzc3VlICMyMDExMzogb3MucmVhZHYoKSBhbmQgb3Mud3JpdGV2KCkgbm93IHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uIG9uCiAgIGVycm9yIGluc3RlYWQgb2YgcmV0dXJuaW5nIC0xLgogCistIElzc3VlICMxOTcxOTogTWFrZSBpbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfbW9kdWxlKCksCisgIFBhdGhFbnRyeUZpbmRlci5maW5kX2xvYWRlcigpLCBhbmQgTG9hZGVyLmxvYWRfbW9kdWxlKCkgdXNlIFBFUCA0NTEgQVBJcyB0bworICBoZWxwIHdpdGggYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuCisKKy0gSXNzdWUgIzIwMTQ0OiBpbnNwZWN0LlNpZ25hdHVyZSBub3cgc3VwcG9ydHMgcGFyc2luZyBzaW1wbGUgc3ltYm9saWMKKyAgY29uc3RhbnRzIGFzIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlcyBpbiBfX3RleHRfc2lnbmF0dXJlX18uCisKIC0gSXNzdWUgIzIwMDcyOiBGaXhlZCBtdWx0aXBsZSBlcnJvcnMgaW4gdGtpbnRlciB3aXRoIHdhbnRvYmplY3RzIGlzIEZhbHNlLgogCistIElzc3VlICMyMDIyOTogQXZvaWQgcGxpc3RsaWIgZGVwcmVjYXRpb24gd2FybmluZyBpbiBwbGF0Zm9ybS5tYWNfdmVyKCkuCisKKy0gSXNzdWUgIzE0NDU1OiBGaXggc29tZSBwcm9ibGVtcyB3aXRoIHRoZSBuZXcgYmluYXJ5IHBsaXN0IHN1cHBvcnQgaW4gcGxpc3RsaWIuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTczOTA6IEFkZCBQeXRob24gdmVyc2lvbiB0byBJZGxlIGVkaXRvciB3aW5kb3cgdGl0bGUgYmFyLgorICBPcmlnaW5hbCBwYXRjaGVzIGJ5IEVkbW9uZCBCdXJuZXR0IGFuZCBLZW50IEpvaG5zb24uCisKKy0gSXNzdWUgIzE4OTYwOiBJRExFIG5vdyBpZ25vcmVzIHRoZSBzb3VyY2UgZW5jb2RpbmcgZGVjbGFyYXRpb24gb24gdGhlIHNlY29uZAorICBsaW5lIGlmIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIGFueXRoaW5nIGV4Y2VwdCBhIGNvbW1lbnQuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMyMDM1ODogVGVzdHMgZm9yIGN1cnNlcy53aW5kb3cub3ZlcmxheSBhbmQgY3Vyc2VzLndpbmRvdy5vdmVyd3JpdGUKKyAgbm8gbG9uZ2VyIHNwZWNpZnkgbWlue3Jvdyxjb2x9ID4gbWF4e3Jvdyxjb2x9LgorCistIElzc3VlICMxOTgwNDogVGhlIHRlc3RfZmluZF9tYWMgdGVzdCBpbiB0ZXN0X3V1aWQgaXMgbm93IHNraXBwZWQgaWYgdGhlCisgIGlmY29uZmlnIGV4ZWN1dGFibGUgaXMgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTk4ODY6IFVzZSBiZXR0ZXIgZXN0aW1hdGVkIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGJpZ21lbSB0ZXN0cy4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIwMzkwOiBBcmd1bWVudCBDbGluaWMncyAiZmlsZSIgb3V0cHV0IHByZXNldCBub3cgZGVmYXVsdHMgdG8KKyAgIntkaXJuYW1lfS9jbGluaWMve2Jhc2VuYW1lfS5oIi4KKworLSBJc3N1ZSAjMjAzOTA6IEFyZ3VtZW50IENsaW5pYydzICJjbGFzcyIgZGlyZWN0aXZlIHN5bnRheCBoYXMgYmVlbiBleHRlbmRlZAorICB3aXRoIHR3byBuZXcgcmVxdWlyZWQgIGFyZ3VtZW50czogInR5cGVkZWYiIGFuZCAidHlwZV9vYmplY3QiLgorCistIElzc3VlICMyMDM5MDogQXJndW1lbnQgQ2xpbmljOiBJZiBfX25ld19fIG9yIF9faW5pdF9fIGZ1bmN0aW9ucyBkaWRuJ3QgdXNlCisgIGt3YXJncyAob3IgYXJncyksIHRoZSBQeUFyZ19Ob0tleXdvcmRzIChvciBQeUFyZ19Ob1Bvc2l0aW9uYWwpIGNhbGxzCisgIGdlbmVyYXRlZCBhcmUgb25seSBydW4gd2hlbiB0aGUgdHlwZSBvYmplY3QgaXMgYW4gZXhhY3QgbWF0Y2guCisKKy0gSXNzdWUgIzIwMzkwOiBBcmd1bWVudCBDbGluaWMgbm93IGZhaWxzIGlmIHlvdSBoYXZlIHJlcXVpcmVkIHBhcmFtZXRlcnMgYWZ0ZXIKKyAgb3B0aW9uYWwgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjMjAzOTA6IEFyZ3VtZW50IENsaW5pYyBjb252ZXJ0ZXJzIG5vdyBoYXZlIGEgbmV3IHRlbXBsYXRlIHRoZXkgY2FuCisgIGluamVjdCBjb2RlIGludG86ICJtb2RpZmllcnMiLiAgQ29kZSBwdXQgdGhlcmUgaXMgcnVuIGluIHRoZSBwYXJzaW5nCisgIGZ1bmN0aW9uIGFmdGVyIGFyZ3VtZW50IHBhcnNpbmcgYnV0IGJlZm9yZSB0aGUgY2FsbCB0byB0aGUgaW1wbC4KKworLSBJc3N1ZSAjMjAzNzY6IEFyZ3VtZW50IENsaW5pYyBub3cgZXNjYXBlcyBiYWNrc2xhc2hlcyBpbiBkb2NzdHJpbmdzLgorCistIElzc3VlICMyMDM4MTogQXJndW1lbnQgQ2xpbmljIG5vdyBzYW5pdHkgY2hlY2tzIHRoZSBkZWZhdWx0IGFyZ3VtZW50IHdoZW4KKyAgY19kZWZhdWx0IGlzIGFsc28gc3BlY2lmaWVkLCBwcm92aWRpbmcgYSBuaWNlIGZhaWx1cmUgbWVzc2FnZSBmb3IKKyAgZGlzYWxsb3dlZCB2YWx1ZXMuCisKKy0gSXNzdWUgIzIwMTg5OiBBcmd1bWVudCBDbGluaWMgbm93IGVuc3VyZXMgdGhhdCBwYXJzZXIgZnVuY3Rpb25zIGZvcgorICBfX25ld19fIGFyZSBhbHdheXMgb2YgdHlwZSBuZXdmdW5jLCB0aGUgdHlwZSBvZiB0aGUgdHBfbmV3IHNsb3QuCisgIFNpbWlsYXJseSwgcGFyc2VyIGZ1bmN0aW9ucyBmb3IgX19pbml0X18gYXJlIG5vdyBhbHdheXMgb2YgdHlwZSBpbml0cHJvYywKKyAgdGhlIHR5cGUgb2YgdHBfaW5pdC4KKworLSBJc3N1ZSAjMjAxODk6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcHJlc3NlcyB0aGUgZG9jc3RyaW5nIGZvciBfX25ld19fCisgIGFuZCBfX2luaXRfXyBmdW5jdGlvbnMgaWYgbm8gZG9jc3RyaW5nIGlzIHByb3ZpZGVkIGluIHRoZSBpbnB1dC4KKworLSBJc3N1ZSAjMjAxODk6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcHJlc3NlcyB0aGUgInNlbGYiIHBhcmFtZXRlciBpbiB0aGUKKyAgaW1wbCBmb3IgQHN0YXRpY21ldGhvZCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzIwMjk0OiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHBvcnRzIGFyZ3VtZW50IHBhcnNpbmcgZm9yIF9fbmV3X18gYW5kCisgIF9faW5pdF9fIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMjAyOTk6IEFyZ3VtZW50IENsaW5pYyBjdXN0b20gY29udmVydGVycyBtYXkgbm93IGNoYW5nZSB0aGUgZGVmYXVsdAorICB2YWx1ZSBvZiBjX2RlZmF1bHQgYW5kIHB5X2RlZmF1bHQgd2l0aCBhIGNsYXNzIG1lbWJlci4KKworLSBJc3N1ZSAjMjAyODc6IEFyZ3VtZW50IENsaW5pYydzIG91dHB1dCBpcyBub3cgY29uZmlndXJhYmxlLCBhbGxvd2luZworICBkZWxheWluZyBpdHMgb3V0cHV0IG9yIGV2ZW4gcmVkaXJlY3RpbmcgaXQgdG8gYSBzZXBhcmF0ZSBmaWxlLgorCistIElzc3VlICMyMDIyNjogQXJndW1lbnQgQ2xpbmljIG5vdyBwZXJtaXRzIHNpbXBsZSBleHByZXNzaW9ucworICAoZS5nLiAic3lzLm1heHNpemUgLSAxIikgYXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzE5OTM2OiBBZGRlZCBleGVjdXRhYmxlIGJpdHMgb3Igc2hlYmFuZyBsaW5lcyB0byBQeXRob24gc2NyaXB0cyB3aGljaAorICByZXF1aXJlcyB0aGVtLiAgRGlzYWJsZSBleGVjdXRhYmxlIGJpdHMgYW5kIHNoZWJhbmcgbGluZXMgaW4gdGVzdCBhbmQKKyAgYmVuY2htYXJrIGZpbGVzIGluIG9yZGVyIHRvIHByZXZlbnQgdXNpbmcgYSByYW5kb20gc3lzdGVtIHB5dGhvbiwgYW5kIGluCisgIHNvdXJjZSBmaWxlcyBvZiBtb2R1bGVzIHdoaWNoIGRvbid0IHByb3ZpZGUgY29tbWFuZCBsaW5lIGludGVyZmFjZS4gIEZpeGVkCisgIHNoZWJhbmcgbGluZXMgaW4gdGhlIHVuaXR0ZXN0Z3VpIGFuZCBjaGVja3BpcCBzY3JpcHRzLgorCistIElzc3VlICMyMDI2ODogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwb3J0cyBjbG9uaW5nIHRoZSBwYXJhbWV0ZXJzIGFuZAorICByZXR1cm4gY29udmVydGVyIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMjAyMjg6IEFyZ3VtZW50IENsaW5pYyBub3cgaGFzIHNwZWNpYWwgc3VwcG9ydCBmb3IgY2xhc3Mgc3BlY2lhbAorICBtZXRob2RzLgorCistIElzc3VlICMyMDIxNDogRml4ZWQgYSBudW1iZXIgb2Ygc21hbGwgaXNzdWVzIGFuZCBkb2N1bWVudGF0aW9uIGVycm9ycyBpbgorICBBcmd1bWVudCBDbGluaWMgKHNlZSBpc3N1ZSBmb3IgZGV0YWlscykuCisKKy0gSXNzdWUgIzIwMTk2OiBGaXhlZCBhIGJ1ZyB3aGVyZSBBcmd1bWVudCBDbGluaWMgZGlkIG5vdCBnZW5lcmF0ZSBjb3JyZWN0CisgIHBhcnNpbmcgY29kZSBmb3IgZnVuY3Rpb25zIHdpdGggcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMgd2hlcmUgYWxsIGFyZ3VtZW50cworICBhcmUgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzE4OTYwOiAydG8zIGFuZCB0aGUgZmluZG5vY29kaW5nLnB5IHNjcmlwdCBub3cgaWdub3JlIHRoZSBzb3VyY2UKKyAgZW5jb2RpbmcgZGVjbGFyYXRpb24gb24gdGhlIHNlY29uZCBsaW5lIGlmIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIGFueXRoaW5nCisgIGV4Y2VwdCBhIGNvbW1lbnQuCisKKy0gSXNzdWUgIzE5NzIzOiBUaGUgbWFya2VyIGNvbW1lbnRzIEFyZ3VtZW50IENsaW5pYyB1c2VzIGhhdmUgYmVlbiBjaGFuZ2VkCisgIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkuCisKKy0gSXNzdWUgIzIwMTU3OiBXaGVuIEFyZ3VtZW50IENsaW5pYyByZW5hbWVzIGEgcGFyYW1ldGVyIGJlY2F1c2UgaXRzIG5hbWUKKyAgY29sbGlkZXMgd2l0aCBhIEMga2V5d29yZCwgaXQgbm8gbG9uZ2VyIGV4cG9zZXMgdGhhdCByZW5hbWUgdG8gUHlBcmdfUGFyc2UuCisKKy0gSXNzdWUgIzIwMTQxOiBJbXByb3ZlZCBBcmd1bWVudCBDbGluaWMncyBzdXBwb3J0IGZvciB0aGUgUHlBcmdfUGFyc2UgIk8hIgorICBmb3JtYXQgdW5pdC4KKworLSBJc3N1ZSAjMjAxNDQ6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcG9ydHMgc2ltcGxlIHN5bWJvbGljIGNvbnN0YW50cworICBhcyBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMuCisKKy0gSXNzdWUgIzIwMTQzOiBUaGUgbGluZSBudW1iZXJzIHJlcG9ydGVkIGluIEFyZ3VtZW50IENsaW5pYyBlcnJvcnMgYXJlCisgIG5vdyBtb3JlIGFjY3VyYXRlLgorCistIElzc3VlICMyMDE0MjogUHlfYnVmZmVyIHZhcmlhYmxlcyBnZW5lcmF0ZWQgYnkgQXJndW1lbnQgQ2xpbmljIGFyZSBub3cKKyAgaW5pdGlhbGl6ZWQgd2l0aCBhIGRlZmF1bHQgdmFsdWUuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxMjgzNzogU2lsZW5jZSBhIHRhdXRvbG9naWNhbCBjb21wYXJpc29uIHdhcm5pbmcgb24gT1MgWCB1bmRlciBDbGFuZyBpbgorICBzb2NrZXRtb2R1bGUuYy4KKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQmV0YSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMDEtMDUKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE3NDMyOiBEcm9wIFVDUzIgZnJvbSBuYW1lcyBvZiBVbmljb2RlIGZ1bmN0aW9ucyBpbiBweXRob24zLmRlZi4KKworLSBJc3N1ZSAjMTk1MjY6IEV4Y2x1ZGUgYWxsIG5ldyBBUEkgZnJvbSB0aGUgc3RhYmxlIEFCSS4gRXhjZXB0aW9ucyBjYW4gYmUKKyAgbWFkZSBpZiBhIG5lZWQgaXMgZGVtb25zdHJhdGVkLgorCistIElzc3VlICMxOTk2OTogUHlCeXRlc19Gcm9tRm9ybWF0VigpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciBpZiAiJWMiCisgIGFyZ3VtZW50IGlzIG5vdCBpbiByYW5nZSBbMDsgMjU1XS4KKworLSBJc3N1ZSAjMTk5OTU6ICVjLCAlbywgJXgsIGFuZCAlWCBub3cgaXNzdWUgYSBEZXByZWNhdGlvbldhcm5pbmcgb24gbm9uLWludGVnZXIKKyAgaW5wdXQ7IHJld29yZGVkIGRvY3MgdG8gY2xhcmlmeSB0aGF0IGFuIGludGVnZXIgdHlwZSBzaG91bGQgZGVmaW5lIGJvdGggX19pbnRfXworICBhbmQgX19pbmRleF9fLgorCistIElzc3VlICMxOTc4NzogUHlUaHJlYWRfc2V0X2tleV92YWx1ZSgpIG5vdyBhbHdheXMgc2V0IHRoZSB2YWx1ZS4gSW4gUHl0aG9uCisgIDMuMywgdGhlIGZ1bmN0aW9uIGRpZCBub3RoaW5nIGlmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMgKGlmIHRoZSBjdXJyZW50IHZhbHVlCisgIGlzIGEgbm9uLU5VTEwgcG9pbnRlcikuCisKKy0gSXNzdWUgIzE0NDMyOiBSZW1vdmUgdGhlIHRocmVhZCBzdGF0ZSBmaWVsZCBmcm9tIHRoZSBmcmFtZSBzdHJ1Y3R1cmUuIEZpeCBhCisgIGNyYXNoIHdoZW4gYSBnZW5lcmF0b3IgaXMgY3JlYXRlZCBpbiBhIEMgdGhyZWFkIHRoYXQgaXMgZGVzdHJveWVkIHdoaWxlIHRoZQorICBnZW5lcmF0b3IgaXMgc3RpbGwgdXNlZC4gVGhlIGlzc3VlIHdhcyB0aGF0IGEgZ2VuZXJhdG9yIGNvbnRhaW5zIGEgZnJhbWUsIGFuZAorICB0aGUgZnJhbWUga2VwdCBhIHJlZmVyZW5jZSB0byB0aGUgUHl0aG9uIHN0YXRlIG9mIHRoZSBkZXN0cm95ZWQgQyB0aHJlYWQuIFRoZQorICBjcmFzaCBvY2N1cnMgd2hlbiBhIHRyYWNlIGZ1bmN0aW9uIGlzIHNldHVwLgorCistIElzc3VlICMxOTU3NjogUHlHSUxTdGF0ZV9FbnN1cmUoKSBub3cgaW5pdGlhbGl6ZXMgdGhyZWFkcy4gQXQgc3RhcnR1cCwgUHl0aG9uCisgIGhhcyBubyBjb25jcmV0ZSBHSUwuIElmIFB5R0lMU3RhdGVfRW5zdXJlKCkgaXMgY2FsbGVkIGZyb20gYSBuZXcgdGhyZWFkIGZvcgorICB0aGUgZmlyc3QgdGltZSBhbmQgUHlFdmFsX0luaXRUaHJlYWRzKCkgd2FzIG5vdCBjYWxsZWQgeWV0LCBhIEdJTCBuZWVkcyB0byBiZQorICBjcmVhdGVkLgorCistIElzc3VlICMxNzU3NjogRGVwcmVjYXRpb24gd2FybmluZyBlbWl0dGVkIG5vdyB3aGVuIF9faW50X18oKSBvciBfX2luZGV4X18oKQorICByZXR1cm4gbm90IGludCBpbnN0YW5jZS4KKworLSBJc3N1ZSAjMTk5MzI6IEZpeCB0eXBvIGluIGltcG9ydC5oLCBtaXNzaW5nIHdoaXRlc3BhY2VzIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisKKy0gSXNzdWUgIzE5NzM2OiBBZGQgbW9kdWxlLWxldmVsIHN0YXR2ZnMgY29uc3RhbnRzIGRlZmluZWQgZm9yIEdOVS9nbGliYworICBiYXNlZCBzeXN0ZW1zLgorCistIElzc3VlICMyMDA5NzogRml4IGJhZCB1c2Ugb2YgInNlbGYiIGluIGltcG9ydGxpYidzIFdpbmRvd3NSZWdpc3RyeUZpbmRlci4KKworLSBJc3N1ZSAjMTk3Mjk6IEluIHN0ci5mb3JtYXQoKSwgZml4IHJlY3Vyc2l2ZSBleHBhbnNpb24gaW4gZm9ybWF0IHNwZWMuCisKKy0gSXNzdWUgIzE5NjM4OiBGaXggcG9zc2libGUgY3Jhc2ggLyB1bmRlZmluZWQgYmVoYXZpb3VyIGZyb20gaHVnZSAobW9yZSB0aGFuIDIKKyAgYmlsbGlvbiBjaGFyYWN0ZXJzKSBpbnB1dCBzdHJpbmdzIGluIF9QeV9kZ19zdHJ0b2QuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjAxNTQ6IERlYWRsb2NrIGluIGFzeW5jaW8uU3RyZWFtUmVhZGVyLnJlYWRleGFjdGx5KCkuCisKKy0gSXNzdWUgIzE2MTEzOiBSZW1vdmUgc2hhMyBtb2R1bGUgYWdhaW4uCisKKy0gSXNzdWUgIzIwMTExOiBwYXRobGliLlBhdGgud2l0aF9zdWZmaXgoKSBub3cgc2FuaXR5IGNoZWNrcyB0aGUgZ2l2ZW4gc3VmZml4LgorCistIEZpeCBicmVha2FnZSBpbiBUZXN0U3VpdGUuY291bnRUZXN0Q2FzZXMoKSBpbnRyb2R1Y2VkIGJ5IGlzc3VlICMxMTc5OC4KKwogLSBJc3N1ZSAjMjAxMDg6IEF2b2lkIHBhcmFtZXRlciBuYW1lIGNsYXNoIGluIGluc3BlY3QuZ2V0Y2FsbGFyZ3MoKS4KIAotLSBJc3N1ZSAjMTI2OTI6IEJhY2twb3J0IHRoZSBmaXggZm9yIFJlc291cmNlV2FybmluZyBpbiB0ZXN0X3VybGxpYjJuZXQuIFRoaXMKLSAgYWxzbyBoZWxwcyBpbiBjbG9zaW5nIHRoZSBzb2NrZXQgd2hlbiBDb25uZWN0aW9uIENsb3NlIGhlYWRlciBpcyBub3Qgc2VudC4KKy0gSXNzdWUgIzE5OTE4OiBGaXggUHVyZVBhdGgucmVsYXRpdmVfdG8oKSB1bmRlciBXaW5kb3dzLgogCiAtIElzc3VlICMxOTQyMjogRXhwbGljaXRseSBkaXNhbGxvdyBub24tU09DS19TVFJFQU0gc29ja2V0cyBpbiB0aGUgc3NsCiAgIG1vZHVsZSwgcmF0aGVyIHRoYW4gc2lsZW50bHkgbGV0IHRoZW0gZW1pdCBjbGVhciB0ZXh0IGRhdGEuCiAKLS0gSXNzdWUgIzE4MTE2OiBnZXRwYXNzIHdhcyBhbHdheXMgZ2V0dGluZyBhbiBlcnJvciB3aGVuIHRlc3RpbmcgL2Rldi90dHksCi0gIGFuZCB0aHVzIHdhcyBhbHdheXMgZmFsbGluZyBiYWNrIHRvIHN0ZGluLCBhbmQgd291bGQgdGhlbiByYWlzZSBhbiBleGNlcHRpb24KLSAgaWYgc3RkaW4gY291bGQgbm90IGJlIHVzZWQgKHN1Y2ggYXMgL2Rldi9udWxsKS4gIEl0IGFsc28gbGVha2VkIGFuIG9wZW4gZmlsZS4KLSAgQWxsIG9mIHRoZXNlIGlzc3VlcyBhcmUgbm93IGZpeGVkLgorLSBJc3N1ZSAjMjAwNDY6IExvY2FsZSBhbGlhcyB0YWJsZSBubyBsb25nZXIgY29udGFpbnMgZW50aXRpZXMgd2hpY2ggY2FuIGJlCisgIGNhbGN1bGF0ZWQuICBHZW5lcmFsaXplZCBzdXBwb3J0IG9mIHRoZSBldXJvIG1vZGlmaWVyLgogCiAtIElzc3VlICMyMDAyNzogRml4ZWQgbG9jYWxlIGFsaWFzZXMgZm9yIGRldmFuYWdhcmkgbG9jYWxlcy4KIApAQCAtMzk2LDE1ICsxNTA0LDM3IEBACiAtIElzc3VlICMxOTAyMDogVGtpbnRlciBub3cgdXNlcyBzcGxpdGxpc3QoKSBpbnN0ZWFkIG9mIHNwbGl0KCkgaW4gY29uZmlndXJlCiAgIG1ldGhvZHMuCiAKLS0gRml4IFR5cGVFcnJvciBvbiAic2V0dXAucHkgdXBsb2FkIC0tc2hvdy1yZXNwb25zZSIuCistIElzc3VlICMxOTc0NDogZW5zdXJlcGlwIG5vdyBwcm92aWRlcyBhIGJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gUHl0aG9uIGlzCisgIGJ1aWx0IHdpdGhvdXQgU1NML1RMUyBzdXBwb3J0IChwaXAgY3VycmVudGx5IHJlcXVpcmVzIHRoYXQgc3VwcG9ydCB0byBydW4sCisgIGV2ZW4gaWYgb25seSBvcGVyYXRpbmcgd2l0aCBsb2NhbCB3aGVlbCBmaWxlcykKIAotLSBJc3N1ZSAjMTIyMjY6IEhUVFBTIGlzIG5vdyB1c2VkIGJ5IGRlZmF1bHQgd2hlbiBjb25uZWN0aW5nIHRvIFB5UEkuCistIElzc3VlICMxOTczNDogZW5zdXJlcGlwIG5vdyBpZ25vcmVzIGFsbCBwaXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGF2b2lkCisgIG9kZCBiZWhhdmlvdXIgYmFzZWQgb24gdXNlciBjb25maWd1cmF0aW9uIHNldHRpbmdzCisKKy0gRml4IFR5cGVFcnJvciBvbiAic2V0dXAucHkgdXBsb2FkIC0tc2hvdy1yZXNwb25zZSIuCiAKIC0gSXNzdWUgIzIwMDQ1OiBGaXggInNldHVwLnB5IHJlZ2lzdGVyIC0tbGlzdC1jbGFzc2lmaWVycyIuCiAKIC0gSXNzdWUgIzE4ODc5OiBXaGVuIGEgbWV0aG9kIGlzIGxvb2tlZCB1cCBvbiBhIHRlbXBvcmFyeSBmaWxlLCBhdm9pZCBjbG9zaW5nCiAgIHRoZSBmaWxlIGJlZm9yZSB0aGUgbWV0aG9kIGlzIHBvc3NpYmx5IGNhbGxlZC4KIAorLSBJc3N1ZSAjMjAwMzc6IEF2b2lkIGNyYXNoZXMgd2hlbiBvcGVuaW5nIGEgdGV4dCBmaWxlIGxhdGUgYXQgaW50ZXJwcmV0ZXIKKyAgc2h1dGRvd24uCisKKy0gSXNzdWUgIzE5OTY3OiBUaGFua3MgdG8gdGhlIFBFUCA0NDIsIGFzeW5jaW8uRnV0dXJlIG5vdyB1c2VzIGEKKyAgZGVzdHJ1Y3RvciB0byBsb2cgdW5jYXVnaHQgZXhjZXB0aW9ucywgaW5zdGVhZCBvZiB0aGUgZGVkaWNhdGVkCisgIF9UcmFjZWJhY2tMb2dnZXIgY2xhc3MuCisKKy0gQWRkZWQgYSBUYXNrLmN1cnJlbnRfdGFzaygpIGNsYXNzIG1ldGhvZCB0byBhc3luY2lvLgorCistIElzc3VlICMxOTg1MDogU2V0IFNBX1JFU1RBUlQgaW4gYXN5bmNpbyB3aGVuIHJlZ2lzdGVyaW5nIGEgc2lnbmFsCisgIGhhbmRsZXIgdG8gbGltaXQgRUlOVFIgb2NjdXJyZW5jZXMuCisKKy0gSW1wbGVtZW50ZWQgd3JpdGUgZmxvdyBjb250cm9sIGluIGFzeW5jaW8gZm9yIHByb2FjdG9yIGV2ZW50IGxvb3AgKFdpbmRvd3MpLgorCistIENoYW5nZSB3cml0ZSBidWZmZXIgaW4gYXN5bmNpbyB1c2UgdG8gYXZvaWQgTyhOKioyKSBiZWhhdmlvci4gIE1ha2UKKyAgd3JpdGUoKS9zZW5kdG8oKSBhY2NlcHQgYnl0ZWFycmF5L21lbW9yeXZpZXcuCisKIC0gSXNzdWUgIzIwMDM0OiBVcGRhdGVkIGFsaWFzIG1hcHBpbmcgdG8gbW9zdCByZWNlbnQgbG9jYWxlLmFsaWFzIGZpbGUKICAgZnJvbSBYLm9yZyBkaXN0cmlidXRpb24gdXNpbmcgbWFrZWxvY2FsZWFsaWFzLnB5LgogCkBAIC00MjQsNiArMTU1NCwxOSBAQAogLSBJc3N1ZSAjMjAwMDc6IEhUVFBSZXNwb25zZS5yZWFkKDApIG5vIG1vcmUgcHJlbWF0dXJlbHkgY2xvc2VzIGNvbm5lY3Rpb24uCiAgIE9yaWdpbmFsIHBhdGNoIGJ5IFNpbW9uIFNhcGluLgogCistIElzc3VlICMxOTk0NjogbXVsdGlwcm9jZXNzaW5nIG5vdyB1c2VzIHJ1bnB5IHRvIGluaXRpYWxpemUgX19tYWluX18gaW4KKyAgY2hpbGQgcHJvY2Vzc2VzIHdoZW4gbmVjZXNzYXJ5LCBhbGxvd2luZyBpdCB0byBjb3JyZWN0bHkgaGFuZGxlIHNjcmlwdHMKKyAgd2l0aG91dCBzdWZmaXhlcyBhbmQgc3VibW9kdWxlcyB0aGF0IHVzZSBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIG9yCisgIG90aGVyd2lzZSByZWx5IG9uIHBhcmVudCBtb2R1bGVzIGJlaW5nIGNvcnJlY3RseSBpbXBvcnRlZCBwcmlvciB0bworICBleGVjdXRpb24uCisKKy0gSXNzdWUgIzE5OTIxOiBXaGVuIFBhdGgubWtkaXIoKSBpcyBjYWxsZWQgd2l0aCBwYXJlbnRzPVRydWUsIGFueSBtaXNzaW5nCisgIHBhcmVudCBpcyBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQgcGVybWlzc2lvbnMsIGlnbm9yaW5nIHRoZSBtb2RlIGFyZ3VtZW50CisgIChtaW1pY2tpbmcgdGhlIFBPU0lYICJta2RpciAtcCIgY29tbWFuZCkuCisKKy0gSXNzdWUgIzE5ODg3OiBJbXByb3ZlIHRoZSBQYXRoLnJlc29sdmUoKSBhbGdvcml0aG0gdG8gc3VwcG9ydCBjZXJ0YWluCisgIHN5bWxpbmsgY2hhaW5zLgorCiAtIElzc3VlICMxOTkxMjogRml4ZWQgbnVtZXJvdXMgYnVncyBpbiBudHBhdGguc3BsaXR1bmMoKS4KIAogLSBJc3N1ZSAjMTk5MTE6IG50cGF0aC5zcGxpdGRyaXZlKCkgbm93IGNvcnJlY3RseSBwcm9jZXNzZXMgdGhlICfEsCcgY2hhcmFjdGVyCkBAIC00MzQsNiArMTU3Nyw5IEBACiAKIC0gSXNzdWUgIzE5NjIzOiBGaXhlZCB3cml0aW5nIHRvIHVuc2Vla2FibGUgZmlsZXMgaW4gdGhlIGFpZmMgbW9kdWxlLgogCistIElzc3VlICMxOTk0NjogbXVsdGlwcm9jZXNzaW5nLnNwYXduIG5vdyByYWlzZXMgSW1wb3J0RXJyb3Igd2hlbiB0aGUgbW9kdWxlIHRvCisgIGJlIHVzZWQgYXMgdGhlIG1haW4gbW9kdWxlIGNhbm5vdCBiZSBpbXBvcnRlZC4KKwogLSBJc3N1ZSAjMTc5MTk6IHNlbGVjdC5wb2xsLnJlZ2lzdGVyKCkgYWdhaW4gd29ya3Mgd2l0aCBwb2xsLlBPTExOVkFMIG9uIEFJWC4KICAgRml4ZWQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgZXZlbnRtYXNrIHBhcmFtZXRlci4KIApAQCAtNDQxLDExICsxNTg3LDE2IEBACiAgIHBhY2thZ2Ugd291bGQgZ2VuZXJhdGUgYSBtZXNzYWdlIGNsYWltaW5nIHRoZSBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nCiAgIHdhcyA3Yml0LCBhbmQgcHJvZHVjZSBnYXJiYWdlIG91dHB1dCBmb3IgdGhlIGNvbnRlbnQuICBUaGlzIG5vdyB3b3Jrcy4KICAgQSBjb3VwbGUgb2Ygb3RoZXIgc2V0X3BheWxvYWQgbWlzaGFuZGxpbmdzIG9mIG5vbi1BU0NJSSBhcmUgYWxzbyBmaXhlZC4KKyAgSW4gYWRkaXRpb24sIGNhbGxpbmcgc2V0X3BheWxvYWQgd2l0aCBhIHN0cmluZyBhcmd1bWVudCB3aXRob3V0CisgIHNwZWNpZnlpbmcgYSBjaGFyc2V0IG5vdyByYWlzZXMgYW4gZXJyb3IgKHRoaXMgaXMgYSBuZXcgZXJyb3IgaW4gMy40KS4KIAotLSBJc3N1ZSAjMTcyMDA6IHRlbG5ldGxpYidzIHJlYWRfdW50aWwgYW5kIGV4cGVjdCB0aW1lb3V0IHdhcyBicm9rZW4gYnkgdGhlCi0gIGZpeCB0byBJc3N1ZSAjMTQ2MzUgaW4gUHl0aG9uIDMuMy4wIHRvIGJlIGludGVycHJldGVkIGFzIG1pbGxpc2Vjb25kcwotICBpbnN0ZWFkIG9mIHNlY29uZHMgd2hlbiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgc2VsZWN0LnBvbGwgKGllOiBldmVyeXdoZXJlKS4KLSAgSXQgaXMgbm93IHRyZWF0ZWQgYXMgc2Vjb25kcyBvbmNlIGFnYWluLgorLSBJc3N1ZSAjMTU0NzU6IEFkZCBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9ucyBmb3IgaXRlcnRvb2xzIG9iamVjdHMuCisKKy0gSXNzdWUgIzE5OTQ0OiBGaXggaW1wb3J0bGliLmZpbmRfc3BlYygpIHNvIGl0IGltcG9ydHMgcGFyZW50cyBhcyBuZWVkZWQKKyAgYW5kIG1vdmUgdGhlIGZ1bmN0aW9uIHRvIGltcG9ydGxpYi51dGlsLgorCistIElzc3VlICMxOTg4MDogRml4IGEgcmVmZXJlbmNlIGxlYWsgaW4gdW5pdHRlc3QuVGVzdENhc2UuIEV4cGxpY2l0bHkgYnJlYWsKKyAgcmVmZXJlbmNlIGN5Y2xlcyBiZXR3ZWVuIGZyYW1lcyBhbmQgdGhlIF9PdXRjb21lIGluc3RhbmNlLgogCiAtIElzc3VlICMxNzQyOTogcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uKCkgbm93IGRlY29kZXMgZmlsZXMgZnJvbSB0aGUgVVRGLTgKICAgZW5jb2Rpbmcgd2l0aCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIsIGluc3RlYWQgb2YgZGVjb2RpbmcgZnJvbSB0aGUKQEAgLTQ1Myw2ICsxNjA0LDkgQEAKICAgcHJvYmFibHkgdGhlIGZpcnN0IG1ham9yIGRpc3RyaWJ1dGlvbiByZWxlYXNlIHdpdGggYSBub24tQVNDSUkgbmFtZS4gUGF0Y2gKICAgd3JpdHRlbiBieSBUb3NoaW8gS3VyYXRvbWkuCiAKKy0gSXNzdWUgIzE5MzQzOiBFeHBvc2UgRnJlZUJTRC1zcGVjaWZpYyBBUElzIGluIHJlc291cmNlIG1vZHVsZS4gIE9yaWdpbmFsCisgIHBhdGNoIGJ5IEtvb2JzLgorCiAtIElzc3VlICMxOTkyOTogQ2FsbCBvcy5yZWFkIHdpdGggMzI3Njggd2l0aGluIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGUKICAgcmF0aGVyIHRoYW4gNDA5NiBmb3IgZWZmaWNpZW5jeS4gIEEgbWljcm9iZW5jaG1hcmsgc2hvd3MgTGludXggYW5kIE9TIFgKICAgYm90aCB1c2luZyB+NTAlIGxlc3MgY3B1IHRpbWUgdGhpcyB3YXkuCkBAIC00NjAsMjEgKzE2MTQsNzMgQEAKIC0gSXNzdWUgIzE5NTA2OiBVc2UgYSBtZW1vcnl2aWV3IHRvIGF2b2lkIGEgZGF0YSBjb3B5IHdoZW4gcGlwaW5nIGRhdGEKICAgdG8gc3RkaW4gd2l0aGluIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGUuICA1LTEwJSBsZXNzIGNwdSB1c2FnZS4KIAorLSBJc3N1ZSAjMTk4NzY6IHNlbGVjdG9ycyB1bnJlZ2lzdGVyKCkgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yIG9yIE9TRXJyb3IKKyAgaWYgdGhlIEZEIGlzIGNsb3NlZCAoYXMgbG9uZyBhcyBpdCB3YXMgcmVnaXN0ZXJlZCkuCisKKy0gSXNzdWUgIzE5OTA4OiBwYXRobGliIG5vdyBqb2lucyByZWxhdGl2ZSBXaW5kb3dzIHBhdGhzIGNvcnJlY3RseSB3aGVuIGEgZHJpdmUKKyAgaXMgcHJlc2VudC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LgorCistIElzc3VlICMxOTI5NjogU2lsZW5jZSBjb21waWxlciB3YXJuaW5nIGluIGRibV9vcGVuCisKKy0gSXNzdWUgIzY3ODQ6IFN0cmluZ3MgZnJvbSBQeXRob24gMiBjYW4gbm93IGJlIHVucGlja2xlZCBhcyBieXRlcworICBvYmplY3RzIGJ5IHNldHRpbmcgdGhlIGVuY29kaW5nIGFyZ3VtZW50IG9mIFVucGlja2xlciB0byBiZSAnYnl0ZXMnLgorICBJbml0aWFsIHBhdGNoIGJ5IE1lcmxpam4gdmFuIERlZW4uCisKIC0gSXNzdWUgIzE5ODM5OiBGaXggcmVncmVzc2lvbiBpbiBiejIgbW9kdWxlJ3MgaGFuZGxpbmcgb2Ygbm9uLWJ6aXAyIGRhdGEgYXQKICAgRU9GLCBhbmQgYW5hbG9nb3VzIGJ1ZyBpbiBsem1hIG1vZHVsZS4KIAorLSBJc3N1ZSAjMTk4ODE6IEZpeCBwaWNrbGluZyBidWcgd2hlcmUgY3BpY2tsZSB3b3VsZCBlbWl0IGJhZCBwaWNrbGUgZGF0YSBmb3IKKyAgbGFyZ2UgYnl0ZXMgc3RyaW5nIChpLmUuLCB3aXRoIHNpemUgZ3JlYXRlciB0aGFuIDIqKjMyLTEpLgorCiAtIElzc3VlICMxOTEzODogZG9jdGVzdCdzIElHTk9SRV9FWENFUFRJT05fREVUQUlMIG5vdyBhbGxvd3MgYSBtYXRjaCB3aGVuCiAgIG5vIGV4Y2VwdGlvbiBkZXRhaWwgZXhpc3RzIChubyBjb2xvbiBmb2xsb3dpbmcgdGhlIGV4Y2VwdGlvbidzIG5hbWUsIG9yCiAgIGEgY29sb24gZG9lcyBmb2xsb3cgYnV0IG5vIHRleHQgZm9sbG93cyB0aGUgY29sb24pLgogCistIElzc3VlICMxOTkyNzogQWRkIF9fZXFfXyB0byBwYXRoLWJhc2VkIGxvYWRlcnMgaW4gaW1wb3J0bGliLgorCistIElzc3VlICMxOTgyNzogT24gVU5JWCwgc2V0YmxvY2tpbmcoKSBhbmQgc2V0dGltZW91dCgpIG1ldGhvZHMgb2YKKyAgc29ja2V0LnNvY2tldCBjYW4gbm93IGF2b2lkIGEgc2Vjb25kIHN5c2NhbGwgaWYgdGhlIGlvY3RsKCkgZnVuY3Rpb24gY2FuIGJlCisgIHVzZWQsIG9yIGlmIHRoZSBub24tYmxvY2tpbmcgZmxhZyBvZiB0aGUgc29ja2V0IGlzIHVuY2hhbmdlZC4KKworLSBJc3N1ZSAjMTk3ODU6IHNtdHBsaWIgbm93IHN1cHBvcnRzIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlcnZlciBuYW1lCisgIGluZGljYXRpb24gZm9yIFRMUy9TU0wgY29ubmVjdGlvbnMuCisKKy0gSXNzdWUgIzE5Nzg0OiBwb3BsaWIgbm93IHN1cHBvcnRzIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlcnZlciBuYW1lCisgIGluZGljYXRpb24gZm9yIFRMUy9TU0wgY29ubmVjdGlvbnMuCisKKy0gSXNzdWUgIzE5NzgzOiBubnRwbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTc4MjogaW1hcGxpYiBub3cgc3VwcG9ydHMgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgc2VydmVyIG5hbWUKKyAgaW5kaWNhdGlvbiBmb3IgVExTL1NTTCBjb25uZWN0aW9ucy4KKworLSBJc3N1ZSAyMDEyMzogRml4IHB5ZG9jLnN5bm9wc2lzKCkgZm9yICJiaW5hcnkiIG1vZHVsZXMuCisKIC0gSXNzdWUgIzE5ODM0OiBTdXBwb3J0IHVucGlja2xpbmcgb2YgZXhjZXB0aW9ucyBwaWNrbGVkIGJ5IFB5dGhvbiAyLgogCistIElzc3VlICMxOTc4MTogZnRwbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTUwOTogQWRkIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgdG8gbWF0Y2ggdGhlIHBlZXIncyBjZXJ0aWZpY2F0ZQorICB3aXRoIHNlcnZlcl9ob3N0bmFtZSBvbiBoYW5kc2hha2UuCisKIC0gSXNzdWUgIzE1Nzk4OiBGaXhlZCBzdWJwcm9jZXNzLlBvcGVuKCkgdG8gbm8gbG9uZ2VyIGZhaWwgaWYgZmlsZQogICBkZXNjcmlwdG9yIDAsIDEgb3IgMiBpcyBjbG9zZWQuCiAKKy0gSXNzdWUgIzE3ODk3OiBPcHRpbWl6ZWQgdW5waWNrbGUgcHJlZmV0Y2hpbmcuCisKKy0gSXNzdWUgIzM2OTM6IE1ha2UgdGhlIGVycm9yIG1lc3NhZ2UgbW9yZSBoZWxwZnVsIHdoZW4gdGhlIGFycmF5LmFycmF5KCkKKyAgY29uc3RydWN0b3IgaXMgZ2l2ZW4gYSBzdHIuIE1vdmUgdGhlIGFycmF5IG1vZHVsZSB0eXBlY29kZSBkb2N1bWVudGF0aW9uIHRvCisgIHRoZSBkb2NzdHJpbmcgb2YgdGhlIGNvbnN0cnVjdG9yLgorCiAtIElzc3VlICMxOTA4ODogRml4ZWQgaW5jb3JyZWN0IGNhY2hpbmcgb2YgdGhlIGNvcHlyZWcgbW9kdWxlIGluCiAgIG9iamVjdC5fX3JlZHVjZV9fKCkgYW5kIG9iamVjdC5fX3JlZHVjZV9leF9fKCkuCiAKKy0gSXNzdWUgIzE5Njk4OiBSZW1vdmVkIGV4ZWNfbW9kdWxlKCkgbWV0aG9kcyBmcm9tCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyIGFuZCBFeHRlbnNpb25GaWxlTG9hZGVyLgorCistIElzc3VlICMxODg2NDogQWRkZWQgYSBzZXR0ZXIgZm9yIE1vZHVsZVNwZWMuaGFzX2xvY2F0aW9uLgorCiAtIEZpeGVkIF9waWNrbGUuVW5waWNrbGVyIHRvIG5vdCBmYWlsIHdoZW4gbG9hZGluZyBlbXB0eSBzdHJpbmdzIGFzCiAgIHBlcnNpc3RlbnQgSURzLgogCkBAIC00ODQsNiArMTY5MCwxOSBAQAogLSBJc3N1ZSAjNjQ3NzogQWRkZWQgc3VwcG9ydCBmb3IgcGlja2xpbmcgdGhlIHR5cGVzIG9mIGJ1aWx0LWluIHNpbmdsZXRvbnMKICAgKGkuZS4sIEVsbGlwc2lzLCBOb3RJbXBsZW1lbnRlZCwgTm9uZSkuCiAKKy0gSXNzdWUgIzE5NzEzOiBBZGQgcmVtYWluaW5nIFBFUCA0NTEtcmVsYXRlZCBkZXByZWNhdGlvbnMgYW5kIG1vdmUgYXdheQorICBmcm9tIHVzaW5nIGZpbmRfbW9kdWxlL2ZpbmRfbG9hZXIvbG9hZF9tb2R1bGUuCisKKy0gSXNzdWUgIzE5NzA4OiBVcGRhdGUgcGtndXRpbCB0byB1c2UgdGhlIG5ldyBpbXBvcnRlciBBUElzLgorCistIElzc3VlICMxOTcwMzogVXBkYXRlIHB5ZG9jIHRvIHVzZSB0aGUgbmV3IGltcG9ydGVyIEFQSXMuCisKKy0gSXNzdWUgIzE5ODUxOiBGaXhlZCBhIHJlZ3Jlc3Npb24gaW4gcmVsb2FkaW5nIHN1Yi1tb2R1bGVzLgorCistIHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkgc2V0cyBPUF9OT19DT01QUkVTU0lPTiB0byBwcmV2ZW50IENSSU1FLgorCistIElzc3VlICMxOTgwMjogQWRkIHNvY2tldC5TT19QUklPUklUWS4KKwogLSBJc3N1ZSAjMTE1MDg6IEZpeGVkIHV1aWQuZ2V0bm9kZSgpIGFuZCB1dWlkLnV1aWQxKCkgb24gZW52aXJvbm1lbnQgd2l0aAogICB2aXJ0dWFsIGludGVyZmFjZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEtlbnQgRnJhemllci4KIApAQCAtNDkyLDU2ICsxNzExLDkgQEAKIC0gSXNzdWUgIzE5NTQ1OiBBdm9pZCBjaGFpbmVkIGV4Y2VwdGlvbnMgd2hpbGUgcGFzc2luZyBzdHJheSAlIHRvCiAgIHRpbWUuc3RycHRpbWUoKS4gIEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgogCi0tIElzc3VlICMxOTYzMzogRml4ZWQgd3JpdGluZyBub3QgY29tcHJlc3NlZCAxNi0gYW5kIDMyLWJpdCB3YXZlIGZpbGVzIG9uCi0gIGJpZy1lbmRpYW4gcGxhdGZvcm1zLgotCi0tIElzc3VlICMxOTQ0OTogaW4gY3N2J3Mgd3JpdGVyb3csIGhhbmRsZSBub24tc3RyaW5nIGtleXMgd2hlbiBnZW5lcmF0aW5nIHRoZQotICBlcnJvciBtZXNzYWdlIHRoYXQgY2VydGFpbiBrZXlzIGFyZSBub3QgaW4gdGhlICdmaWVsZG5hbWVzJyBsaXN0LgotCi0tIEZpeCB0ZXN0LnN1cHBvcnQuYmluZF9wb3J0KCkgdG8gbm90IGNhdXNlIGFuIGVycm9yIHdoZW4gUHl0aG9uIHdhcyBjb21waWxlZAotICBvbiBhIHN5c3RlbSB3aXRoIFNPX1JFVVNFUE9SVCBkZWZpbmVkIGluIHRoZSBoZWFkZXJzIGJ1dCBydW4gb24gYSBzeXN0ZW0KLSAgd2l0aCBhbiBPUyBrZXJuZWwgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoYXQgcmVhc29uYWJseSBuZXcgc29ja2V0IG9wdGlvbi4KLQotLSBGaXggY29tcGlsYXRpb24gZXJyb3IgdW5kZXIgZ2NjIG9mIHRoZSBjdHlwZXMgbW9kdWxlIGJ1bmRsZWQgbGliZmZpIGZvciBhcm0uCi0KLS0gSXNzdWUgIzE5NTIzOiBDbG9zZWQgRmlsZUhhbmRsZXIgbGVhayB3aGljaCBvY2N1cnJlZCB3aGVuIGRlbGF5IHdhcyBzZXQuCi0KLS0gSXNzdWUgIzEzNjc0OiBQcmV2ZW50ZWQgdGltZS5zdHJmdGltZSBmcm9tIGNyYXNoaW5nIG9uIFdpbmRvd3Mgd2hlbiBnaXZlbgotICBhIHllYXIgYmVmb3JlIDE5MDAgYW5kIGEgZm9ybWF0IG9mICV5LgotCi0tIElzc3VlICMxOTU0NCBhbmQgSXNzdWUgIzYyODY6IFJlc3RvcmUgdXNlIG9mIHVybGxpYiBvdmVyIGh0dHAgYWxsb3dpbmcgdXNlCi0gIG9mIGh0dHBfcHJveHkgZm9yIERpc3R1dGlscyB1cGxvYWQgY29tbWFuZCwgYSBmZWF0dXJlIGFjY2lkZW50YWxseSBsb3N0Ci0gIGluIHRoZSByb2xsYmFjayBvZiBkaXN0dXRpbHMyLgotCi0tIElzc3VlICMxOTU0NCBhbmQgSXNzdWUgIzc0NTc6IFJlc3RvcmUgdGhlIHJlYWRfcGtnX2ZpbGUgbWV0aG9kIHRvCi0gIGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbk1ldGFkYXRhIGFjY2lkZW50YWxseSByZW1vdmVkIGluIHRoZSB1bmRvIG9mCi0gIGRpc3R1dGlsczIuCi0KLS0gSXNzdWUgIzE1NzUwMjA6IEZpeGVkIHN1cHBvcnQgb2YgMjQtYml0IHdhdmUgZmlsZXMgb24gYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE5NDgwOiBIVE1MUGFyc2VyIG5vdyBhY2NlcHRzIGFsbCB2YWxpZCBzdGFydC10YWcgbmFtZXMgYXMgZGVmaW5lZAotICBieSB0aGUgSFRNTDUgc3RhbmRhcmQuCi0KLS0gSXNzdWUgIzYxNTc6IEZpeGVkIHRraW50ZXIuVGV4dC5kZWJ1ZygpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCi0KLS0gSXNzdWUgIzYxNjA6IFRoZSBiYm94KCkgbWV0aG9kIG9mIHRraW50ZXIuU3BpbmJveCBub3cgcmV0dXJucyBhIHR1cGxlIG9mCi0gIGludGVnZXJzIGluc3RlYWQgb2YgYSBzdHJpbmcuICBCYXNlZCBvbiBwYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotLSBJc3N1ZSAjMTAxOTc6IFJld29yayBzdWJwcm9jZXNzLmdldFtzdGF0dXNdb3V0cHV0IHRvIHVzZSBzdWJwcm9jZXNzCi0gIGZ1bmN0aW9uYWxpdHkgYW5kIHRodXMgdG8gd29yayBvbiBXaW5kb3dzLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4uCi0KLS0gSXNzdWUgIzE5Mjg2OiBEaXJlY3RvcmllcyBpbiBgYHBhY2thZ2VfZGF0YWBgIGFyZSBubyBsb25nZXIgYWRkZWQgdG8KLSAgdGhlIGZpbGVsaXN0LCBwcmV2ZW50aW5nIGZhaWx1cmUgb3V0bGluZWQgaW4gdGhlIHRpY2tldC4KLQogSURMRQogLS0tLQogCi0tIElzc3VlICMxNzM5MDogQWRkIFB5dGhvbiB2ZXJzaW9uIHRvIElkbGUgZWRpdG9yIHdpbmRvdyB0aXRsZSBiYXIuCi0gIE9yaWdpbmFsIHBhdGNoZXMgYnkgRWRtb25kIEJ1cm5ldHQgYW5kIEtlbnQgSm9obnNvbi4KLQotLSBJc3N1ZSAjMTg5NjA6IElETEUgbm93IGlnbm9yZXMgdGhlIHNvdXJjZSBlbmNvZGluZyBkZWNsYXJhdGlvbiBvbiB0aGUgc2Vjb25kCi0gIGxpbmUgaWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW55dGhpbmcgZXhjZXB0IGEgY29tbWVudC4KLQogLSBJc3N1ZSAjMjAwNTg6IHN5cy5zdGRpbi5yZWFkbGluZSgpIGluIElETEUgbm93IGFsd2F5cyByZXR1cm5zIG9ubHkgb25lIGxpbmUuCiAKIC0gSXNzdWUgIzE5NDgxOiBwcmludCgpIG9mIHN0cmluZyBzdWJjbGFzcyBpbnN0YW5jZSBpbiBJRExFIG5vIGxvbmdlciBoYW5ncy4KQEAgLTU1MiwyMSArMTcyNCwxNyBAQAogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzE5ODA0OiBUaGUgdGVzdF9maW5kX21hYyB0ZXN0IGluIHRlc3RfdXVpZCBpcyBub3cgc2tpcHBlZCBpZiB0aGUKLSAgaWZjb25maWcgZXhlY3V0YWJsZSBpcyBub3QgYXZhaWxhYmxlLgotCi0tIElzc3VlICMxOTg4NjogVXNlIGJldHRlciBlc3RpbWF0ZWQgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgYmlnbWVtIHRlc3RzLgotCiAtIElzc3VlICMyMDA1NTogRml4IHRlc3Rfc2h1dGlsIHVuZGVyIFdpbmRvd3Mgd2l0aCBzeW1saW5rIHByaXZpbGVnZXMgaGVsZC4KICAgUGF0Y2ggYnkgVmFqcmFza3kgS29rLgogCistIElzc3VlICMyMDA3MDogRG9uJ3QgcnVuIHRlc3RfdXJsbGliMm5ldCB3aGVuIG5ldHdvcmsgcmVzb3VyY2VzIGFyZSBub3QKKyAgZW5hYmxlZC4KKwogLSBJc3N1ZSAjMTk5Mzg6IFJlLWVuYWJsZWQgdGVzdF9idWdfMTMzMzk4MiBpbiB0ZXN0X2Rpcywgd2hpY2ggaGFkIGJlZW4KICAgZGlzYWJsZWQgc2luY2UgMy4wIGR1ZSB0byB0aGUgY2hhbmdlcyBpbiBsaXN0Y29tcCBoYW5kbGluZy4KIAogLSBJc3N1ZSAjMTkzMjA6IHRlc3RfdGNsIG5vIGxvbmdlciBmYWlscyB3aGVuIHdhbnRvYmplY3RzIGlzIGZhbHNlLgogCi0tIElzc3VlICMxOTY4MzogUmVtb3ZlZCBlbXB0eSB0ZXN0cyBmcm9tIHRlc3RfbWluaWRvbS4gIFBhdGNoIGJ5IEFqaXRlc2ggR3VwdGEuCi0KIC0gSXNzdWUgIzE5OTE5OiBGaXggZmxha3kgU1NMIHRlc3QuIGNvbm5lY3RfZXgoKSBzb21ldGltZXMgcmV0dXJucwogICBFV09VTERCTE9DSyBvbiBXaW5kb3dzIG9yIFZNcyBob3N0ZWQgb24gV2luZG93cy4KIApAQCAtNTc2LDI2ICsxNzQ0LDM1IEBACiAKIC0gSXNzdWUgIzE5OTI4OiBJbXBsZW1lbnRlZCBhIHRlc3QgZm9yIHJlcHIoKSBvZiBjZWxsIG9iamVjdHMuCiAKLS0gSXNzdWUgIzE5NTM1OiBGaXhlZCB0ZXN0X2RvY3htbHJwYyB3aGVuIHB5dGhvbiBpcyBydW4gd2l0aCAtT08uCistIElzc3VlICMxOTUzNTogRml4ZWQgdGVzdF9kb2N4bWxycGMsIHRlc3RfZnVuY3Rvb2xzLCB0ZXN0X2luc3BlY3QsIGFuZAorICB0ZXN0X3N0YXRpc3RpY3Mgd2hlbiBweXRob24gaXMgcnVuIHdpdGggLU9PLgogCiAtIElzc3VlICMxOTkyNjogUmVtb3ZlZCB1bm5lZWRlZCB0ZXN0X21haW4gZnJvbSB0ZXN0X2Fic3RyYWN0X251bWJlcnMuCiAgIFBhdGNoIGJ5IFZhanJhc2t5IEtvay4KIAorLSBJc3N1ZSAjMTk1NzI6IE1vcmUgc2tpcHBlZCB0ZXN0cyBleHBsaWNpdGx5IG1hcmtlZCBhcyBza2lwcGVkLgorCiAtIElzc3VlICMxOTU5NSwgIzE5OTg3OiBSZS1lbmFibGVkIGEgbG9uZy1kaXNhYmxlZCB0ZXN0IGluIHRlc3Rfd2luc291bmQuCiAKIC0gSXNzdWUgIzE5NTg4OiBGaXhlZCB0ZXN0cyBpbiB0ZXN0X3JhbmRvbSB0aGF0IHdlcmUgc2lsZW50bHkgc2tpcHBlZCBtb3N0CiAgIG9mIHRoZSB0aW1lLiAgUGF0Y2ggYnkgSnVsaWFuIEdpbmRpLgogCi0tIElzc3VlICMxOTU5NjogU2V0IHVudGVzdGFibGUgdGVzdHMgaW4gdGVzdF9pbXBvcnRsaWIgdG8gTm9uZSB0byBhdm9pZAotICByZXBvcnRpbmcgc3VjY2VzcyBvbiBlbXB0eSB0ZXN0cy4KK0J1aWxkCistLS0tLQogCi0tIElzc3VlICMxOTQ0MDogQ2xlYW4gdXAgdGVzdF9jYXBpIGJ5IHJlbW92aW5nIGFuIHVubmVjZXNzYXJ5IF9fZnV0dXJlX18KLSAgaW1wb3J0LCBjb252ZXJ0aW5nIGZyb20gdGVzdF9tYWluIHRvIHVuaXR0ZXN0Lm1haW4sIGFuZCBydW5uaW5nIHRoZQotICBfdGVzdGNhcGkgbW9kdWxlIHRlc3RzIHdpdGhpbiBhIHVuaXR0ZXN0IFRlc3RDYXNlLgorLSBJc3N1ZSAjMTk3Mjg6IEVuYWJsZSBwaXAgaW5zdGFsbGF0aW9uIGJ5IGRlZmF1bHQgb24gV2luZG93cy4KIAotLSBJc3N1ZSAjMTg3MDIsIDE5NTcyOiBBbGwgc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0ZWQgYXMgc2tpcHBlZC4KKy0gSXNzdWUgIzE2MTM2OiBSZW1vdmUgVk1TIHN1cHBvcnQKIAotLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KKy0gSXNzdWUgIzE4MjE1OiBBZGQgc2NyaXB0IFRvb2xzL3NzbC90ZXN0X211bHRpcGxlX3ZlcnNpb25zLnB5IHRvIGNvbXBpbGUgYW5kCisgIHJ1biBQeXRob24ncyB1bml0IHRlc3RzIHdpdGggbXVsdGlwbGUgdmVyc2lvbnMgb2YgT3BlblNTTC4KKworLSBJc3N1ZSAjMTk5MjI6IGRlZmluZSBfSU5DTFVERV9fU1REQ19BMV9TT1VSQ0UgaW4gSFAtVVggdG8gaW5jbHVkZSBtYnN0YXRlX3QKKyAgZm9yIG1icnRvd2MoKS4KKworLSBJc3N1ZSAjMTk3ODg6IGtpbGxfcHl0aG9uKF9kKS5leGUgaXMgbm93IHJ1biBhcyBhIFByZUJ1aWxkRXZlbnQgb24gdGhlCisgIHB5dGhvbmNvcmUgc3ViLXByb2plY3QuICBUaGlzIHNob3VsZCBwcmV2ZW50IGJ1aWxkIGVycm9ycyBkdWUgYSBwcmV2aW91cworICBidWlsZCdzIHB5dGhvbihfZCkuZXhlIHN0aWxsIHJ1bm5pbmcuCiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KQEAgLTYwOSw5ICsxNzg2LDYgQEAKIC0gSXNzdWUgIzIwMjUzOiBGaXhlZCBhIHR5cG8gaW4gdGhlIGlwYWRkcmVzcyBkb2NzIHRoYXQgYWR2ZXJ0aXNlZCBhbgogICBpbGxlZ2FsIGF0dHJpYnV0ZSBuYW1lLiAgRm91bmQgYnkgSU5BREEgTmFva2kuCiAKLS0gSXNzdWUgIzE5OTYzOiBEb2N1bWVudCB0aGF0IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkgbm8gbG9uZ2VyIHJlcXVpcmVzCi0gIGltcG9ydGluZyBwYXJlbnQgcGFja2FnZXMgc2VwYXJhdGVseS4KLQogLSBJc3N1ZSAjMTg4NDA6IEludHJvZHVjZSB0aGUganNvbiBtb2R1bGUgaW4gdGhlIHR1dG9yaWFsLCBhbmQgZGUtZW1waGFzaXplCiAgIHRoZSBwaWNrbGUgbW9kdWxlLgogCkBAIC02MTksMTQ5ICsxNzkzLDI5NCBAQAogCiAtIElzc3VlICMxOTc5NTogSW1wcm92ZWQgbWFya3VwIG9mIFRydWUvRmFsc2UgY29uc3RhbnRzLgogCi0tIElzc3VlICMxODMyNjogQ2xhcmlmeSB0aGF0IGxpc3Quc29ydCdzIGFyZ3VtZW50cyBhcmUga2V5d29yZC1vbmx5LiAgQWxzbywKLSAgYXR0ZW1wdCB0byByZWR1Y2UgY29uZnVzaW9uIGluIHRoZSBnbG9zc2FyeSBieSBub3Qgc2F5aW5nIHRoZXJlIGFyZQotICBkaWZmZXJlbnQgInR5cGVzIiBvZiBhcmd1bWVudHMgYW5kIHBhcmFtZXRlcnMuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxOTc4ODoga2lsbF9weXRob24oX2QpLmV4ZSBpcyBub3cgcnVuIGFzIGEgUHJlQnVpbGRFdmVudCBvbiB0aGUKLSAgcHl0aG9uY29yZSBzdWItcHJvamVjdC4gIFRoaXMgc2hvdWxkIHByZXZlbnQgYnVpbGQgZXJyb3JzIGR1ZSBhIHByZXZpb3VzCi0gIGJ1aWxkJ3MgcHl0aG9uKF9kKS5leGUgc3RpbGwgcnVubmluZy4KLQotLSBBZGQgd29ya2Fyb3VuZCBmb3IgVlMgMjAxMCBubWFrZSBjbGVhbiBpc3N1ZS4gVlMgMjAxMCBkb2Vzbid0IHNldCB1cCBQQVRICi0gIGZvciBubWFrZS5leGUgY29ycmVjdGx5LgotCiBUb29scy9EZW1vcwogLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAjMTk5MzY6IEFkZGVkIGV4ZWN1dGFibGUgYml0cyBvciBzaGViYW5nIGxpbmVzIHRvIFB5dGhvbiBzY3JpcHRzIHdoaWNoCi0gIHJlcXVpcmVzIHRoZW0uICBEaXNhYmxlIGV4ZWN1dGFibGUgYml0cyBhbmQgc2hlYmFuZyBsaW5lcyBpbiB0ZXN0IGFuZAotICBiZW5jaG1hcmsgZmlsZXMgaW4gb3JkZXIgdG8gcHJldmVudCB1c2luZyBhIHJhbmRvbSBzeXN0ZW0gcHl0aG9uLCBhbmQgaW4KLSAgc291cmNlIGZpbGVzIG9mIG1vZHVsZXMgd2hpY2ggZG9uJ3QgcHJvdmlkZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlLiAgRml4ZWQKLSAgc2hlYmFuZyBsaW5lIHRvIHVzZSBweXRob24zIGV4ZWN1dGFibGUgaW4gdGhlIHVuaXR0ZXN0Z3VpIHNjcmlwdC4KKy0gSXNzdWUgIzE5NjU5OiBBZGRlZCBkb2N1bWVudGF0aW9uIGZvciBBcmd1bWVudCBDbGluaWMuCiAKLS0gSXNzdWUgIzE4OTYwOiAydG8zIGFuZCB0aGUgZmluZG5vY29kaW5nLnB5IHNjcmlwdCBub3cgaWdub3JlIHRoZSBzb3VyY2UKLSAgZW5jb2RpbmcgZGVjbGFyYXRpb24gb24gdGhlIHNlY29uZCBsaW5lIGlmIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIGFueXRoaW5nCi0gIGV4Y2VwdCBhIGNvbW1lbnQuCistIElzc3VlICMxOTk3NjogQXJndW1lbnQgQ2xpbmljIE1FVEhfTk9BUkdTIGZ1bmN0aW9ucyBub3cgYWx3YXlzCisgIHRha2UgdHdvIHBhcmFtZXRlcnMuCiAKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEJldGEgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjM/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTctTm92LTIwMTMqCi0KLU5vIGNoYW5nZXMgZnJvbSByZWxlYXNlIGNhbmRpZGF0ZSAyLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4zIHJlbGVhc2UgY2FuZGlkYXRlIDI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxMS1Ob3YtMjAxMyoKLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICMxOTIyNzogQW55IHJlLXNlZWRpbmcgb2YgdGhlIE9wZW5TU0wgUk5HIG9uIGZvcmsgaGFzIGJlZW4gcmVtb3ZlZDsKLSAgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBPcGVuU1NMIGl0c2VsZiBvciBieSB0aGUgYXBwbGljYXRpb24uCi0KLS0gSXNzdWUgIzE5NDM1OiBGaXggZGlyZWN0b3J5IHRyYXZlcnNhbCBhdHRhY2sgb24gQ0dJSHR0cFJlcXVlc3RIYW5kbGVyLgotCi1UZXN0cwotLS0tLS0KLQotLSBJc3N1ZSAjMTg5NjQ6IEZpeCB0ZXN0X3RjbCB3aGVuIHJ1biB3aXRoIFRjbC9UayB2ZXJzaW9ucyAgPCA4LjUuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxNTY2MzogUmV2ZXJ0IE9TIFggaW5zdGFsbGVyIGJ1aWx0LWluIFRjbC9UayBzdXBwb3J0IGZvciAzLjMuMy4KLSAgU29tZSB0aGlyZC1wYXJ0eSBwcm9qZWN0cywgc3VjaCBhcyBNYXRwbG90bGliIGFuZCBQSUwvUGlsbG93LAotICBkZXBlbmRlZCBvbiBiZWluZyBhYmxlIHRvIGJ1aWxkIHdpdGggVGNsIGFuZCBUayBmcmFtZXdvcmtzIGluCi0gIC9MaWJyYXJ5L0ZyYW1ld29ya3MuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjMgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI3LU9jdC0yMDEzKgorUmVsZWFzZSBkYXRlOiAyMDEzLTExLTI0CiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCistIFVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIGluIG1vcmUgcGxhY2VzIGluIGltcG9ydCwgZXNwZWNpYWxseQorICBleGNlcHRpb25zLgorCistIElzc3VlICMxOTYxOTogc3RyLmVuY29kZSwgYnl0ZXMuZGVjb2RlIGFuZCBieXRlYXJyYXkuZGVjb2RlIG5vdyB1c2UgYW4KKyAgaW50ZXJuYWwgQVBJIHRvIHRocm93IExvb2t1cEVycm9yIGZvciBrbm93biBub24tdGV4dCBlbmNvZGluZ3MsIHJhdGhlcgorICB0aGFuIGF0dGVtcHRpbmcgdGhlIGVuY29kaW5nIG9yIGRlY29kaW5nIG9wZXJhdGlvbiBhbmQgdGhlbiB0aHJvd2luZyBhCisgIFR5cGVFcnJvciBmb3IgYW4gdW5leHBlY3RlZCBvdXRwdXQgdHlwZS4gKFRoZSBsYXR0ZXIgbWVjaGFuaXNtIHJlbWFpbnMKKyAgaW4gcGxhY2UgZm9yIHRoaXJkIHBhcnR5IG5vbi10ZXh0IGVuY29kaW5ncykKKworLSBJc3N1ZSAjMTkxODM6IEltcGxlbWVudCBQRVAgNDU2ICdzZWN1cmUgYW5kIGludGVyY2hhbmdlYWJsZSBoYXNoIGFsZ29yaXRobScuCisgIFB5dGhvbiBub3cgdXNlcyBTaXBIYXNoMjQgb24gYWxsIG1ham9yIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI4OTI6IFRoZSB1dGYtMTYqIGFuZCB1dGYtMzIqIGVuY29kZXJzIG5vIGxvbmdlciBhbGxvdyBzdXJyb2dhdGUgY29kZQorICBwb2ludHMgKFUrRDgwMC1VK0RGRkYpIHRvIGJlIGVuY29kZWQuICBUaGUgdXRmLTMyKiBkZWNvZGVycyBubyBsb25nZXIgZGVjb2RlCisgIGJ5dGUgc2VxdWVuY2VzIHRoYXQgY29ycmVzcG9uZCB0byBzdXJyb2dhdGUgY29kZSBwb2ludHMuICBUaGUgc3Vycm9nYXRlcGFzcworICBlcnJvciBoYW5kbGVyIG5vdyB3b3JrcyB3aXRoIHRoZSB1dGYtMTYqIGFuZCB1dGYtMzIqIGNvZGVjcy4gIEJhc2VkIG9uCisgIHBhdGNoZXMgYnkgVmljdG9yIFN0aW5uZXIgYW5kIEthbmctSGFvIChLZW5ueSkgTHUuCisKKy0gSXNzdWUgIzE3ODA2OiBBZGRlZCBrZXl3b3JkLWFyZ3VtZW50IHN1cHBvcnQgZm9yICJ0YWJzaXplIiB0bworICBzdHIvYnl0ZXMuZXhwYW5kdGFicygpLgorCistIElzc3VlICMxNzgyODogT3V0cHV0IHR5cGUgZXJyb3JzIGluIHN0ci5lbmNvZGUoKSwgYnl0ZXMuZGVjb2RlKCkgYW5kCisgIGJ5dGVhcnJheS5kZWNvZGUoKSBub3cgZGlyZWN0IHVzZXJzIHRvIGNvZGVjcy5lbmNvZGUoKSBvciBjb2RlY3MuZGVjb2RlKCkKKyAgYXMgYXBwcm9wcmlhdGUuCisKKy0gSXNzdWUgIzE3ODI4OiBUaGUgaW50ZXJwcmV0ZXIgbm93IGF0dGVtcHRzIHRvIGNoYWluIGVycm9ycyB0aGF0IG9jY3VyIGluCisgIGNvZGVjIHByb2Nlc3Npbmcgd2l0aCBhIHJlcGxhY2VtZW50IGV4Y2VwdGlvbiBvZiB0aGUgc2FtZSB0eXBlIHRoYXQKKyAgaW5jbHVkZXMgdGhlIGNvZGVjIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IGVuc3VyZXMgaXQgb25seSBkb2VzIHRoaXMKKyAgd2hlbiB0aGUgY3JlYXRpb24gb2YgdGhlIHJlcGxhY2VtZW50IGV4Y2VwdGlvbiB3b24ndCBsb3NlIGFueSBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTk0NjY6IENsZWFyIHRoZSBmcmFtZXMgb2YgZGFlbW9uIHRocmVhZHMgZWFybGllciBkdXJpbmcgdGhlCisgIFB5dGhvbiBzaHV0ZG93biB0byBjYWxsIG9iamVjdHMgZGVzdHJ1Y3RvcnMuIFNvICJ1bmNsb3NlZCBmaWxlIiByZXNvdXJjZQorICB3YXJuaW5ncyBhcmUgbm93IGNvcnJldGx5IGVtaXR0ZWQgZm9yIGRhZW1vbiB0aHJlYWRzLgorCistIElzc3VlICMxOTUxNDogRGVkdXBsaWNhdGUgc29tZSBfUHlfSURFTlRJRklFUiBkZWNsYXJhdGlvbnMuCisgIFBhdGNoIGJ5IEFuZHJlaSBEb3JpYW4gRHVtYS4KKworLSBJc3N1ZSAjMTc5MzY6IEZpeCBPKG4qKjIpIGJlaGF2aW91ciB3aGVuIGFkZGluZyBvciByZW1vdmluZyBtYW55IHN1YmNsYXNzZXMKKyAgb2YgYSBnaXZlbiB0eXBlLgorCistIElzc3VlICMxOTQyODogemlwaW1wb3J0IG5vdyBoYW5kbGVzIGVycm9ycyB3aGVuIHJlYWRpbmcgdHJ1bmNhdGVkIG9yIGludmFsaWQKKyAgWklQIGFyY2hpdmUuCisKKy0gSXNzdWUgIzE4NDA4OiBBZGQgYSBuZXcgUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoKSBmdW5jdGlvbiB0byBoYW5kbGUKKyAgZXhjZXB0aW9ucyB3aGVuIG1lcmdpbmcgZmFzdCBsb2NhbHMgaW50byBmX2xvY2FscyBvZiBhIGZyYW1lLgorICBQeUV2YWxfR2V0TG9jYWxzKCkgbm93IHJhaXNlcyBhbiBleGNlcHRpb24gYW5kIHJldHVybiBOVUxMIG9uIGZhaWx1cmUuCisKKy0gSXNzdWUgIzE5MzY5OiBPcHRpbWl6ZWQgdGhlIHVzYWdlIG9mIF9fbGVuZ3RoX2hpbnRfXygpLgorCiAtIElzc3VlICMxODYwMzogRW5zdXJlIHRoYXQgUHlPU19teXN0cmljbXAgYW5kIFB5T1NfbXlzdHJuaWNtcCBhcmUgaW4gdGhlCiAgIFB5dGhvbiBleGVjdXRhYmxlIGFuZCBub3QgcmVtb3ZlZCBieSB0aGUgbGlua2VyJ3Mgb3B0aW1pemVyLgogCi0tIElzc3VlICMxOTI3OTogVVRGLTcgZGVjb2RlciBubyBtb3JlIHByb2R1Y2VzIGlsbGVnYWwgc3RyaW5ncy4KLQotLSBGaXggbWFjcm8gZXhwYW5zaW9uIG9mIF9QeUVycl9PQ0NVUlJFRCgpLCBhbmQgbWFrZSBzdXJlIHRvIHVzZSBpdCBpbiBhdAotICBsZWFzdCBvbmUgcGxhY2Ugc28gYXMgdG8gYXZvaWQgcmVncmVzc2lvbnMuCi0KLS0gSXNzdWUgIzE5MDE0OiBtZW1vcnl2aWV3LmNhc3QoKSBpcyBub3cgYWxsb3dlZCBvbiB6ZXJvLWxlbmd0aCB2aWV3cy4KLQotLSBJc3N1ZSAjMTkwOTg6IFByZXZlbnQgb3ZlcmZsb3cgaW4gdGhlIGNvbXBpbGVyIHdoZW4gdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBzZXQKLSAgYWJzdXJkbHkgaGlnaC4KLQotLSBJc3N1ZSAjMTg5NDI6IHN5cy5fZGVidWdtYWxsb2NzdGF0cygpIG91dHB1dCB3YXMgZGFtYWdlZCBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxODY2NzogQWRkIG1pc3NpbmcgIkhBVkVfRkNIT1dOQVQiIHN5bWJvbCB0byBwb3NpeC5faGF2ZV9mdW5jdGlvbnMuCi0KLS0gSXNzdWUgIzE4MzY4OiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IHdoZW4gcmVhbGxvYygpCi0gIGZhaWxzLgotCi0tIElzc3VlICMxNjc0MTogRml4IGFuIGVycm9yIHJlcG9ydGluZyBpbiBpbnQoKS4KLQotLSBJc3N1ZSAjMTc4OTk6IEZpeCByYXJlIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG9zLmxpc3RkaXIoKS4KLQotLSBJc3N1ZSAjMTg1NTI6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBQeUFyZW5hX0FkZFB5T2JqZWN0KCkgaW4KLSAgb2JqMmFzdF9vYmplY3QoKS4KLQotLSBJc3N1ZSAjMTg1NjA6IEZpeCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHN1bSgpLgotCi0tIElzc3VlICMxNTkwNTogRml4IHRoZW9yZXRpY2FsIGJ1ZmZlciBvdmVyZmxvdyBpbiBoYW5kbGluZyBvZiBzeXMuYXJndlswXSwKLSAgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBpZiB0aGUgb3BlcmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBvYmV5IE1BWFBBVEhMRU4uCi0KLS0gSXNzdWUgIzE4MzQ0OiBGaXggcG90ZW50aWFsIHJlZi1sZWFrcyBpbiBfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoKS4KLQotLSBJc3N1ZSAjMTc4NzI6IEZpeCBhIHNlZ2ZhdWx0IGluIG1hcnNoYWwubG9hZCgpIHdoZW4gaW5wdXQgc3RyZWFtIHJldHVybnMKLSAgbW9yZSBieXRlcyB0aGFuIHJlcXVlc3RlZC4KLQotLSBJc3N1ZSAjMTg0MjY6IEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gQyBleHRlbnNpb24gaW1wb3J0IHdoZW4KLSAgUHlNb2R1bGVfR2V0RGVmKCkgcmV0dXJucyBhbiBlcnJvci4KLQotLSBJc3N1ZSAjMTgzMjg6IFJlb3JkZXIgb3BzIGluIFB5VGhyZWFkU3RhdGVfRGVsZXRlKigpIGZ1bmN0aW9ucy4gTm93IHRoZQotICB0c3RhdGUgaXMgZmlyc3QgcmVtb3ZlZCBmcm9tIFRMUyBhbmQgdGhlbiBkZWFsbG9jYXRlZC4KLQotLSBJc3N1ZSAjMTgxODQ6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgYW5kIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIG5vdyByYWlzZQotICBPdmVyZmxvd0Vycm9yIHdoZW4gYW4gYXJndW1lbnQgb2YgJWMgZm9ybWF0IGlzIG91dCBvZiByYW5nZS4KLQotLSBJc3N1ZSAjMTgxMzc6IERldGVjdCBpbnRlZ2VyIG92ZXJmbG93IG9uIHByZWNpc2lvbiBpbiBmbG9hdC5fX2Zvcm1hdF9fKCkKLSAgYW5kIGNvbXBsZXguX19mb3JtYXRfXygpLgotCi0tIElzc3VlICMxODE4MzogRml4IHZhcmlvdXMgdW5pY29kZSBvcGVyYXRpb25zIG9uIHN0cmluZ3Mgd2l0aCBsYXJnZSB1bmljb2RlCi0gIGNvZGVwb2ludHMuCi0KLS0gSXNzdWUgIzE4MTgwOiBGaXggcmVmIGxlYWsgaW4gX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKCkuCi0KLS0gSXNzdWUgIzE4MDM4OiBTeW50YXhFcnJvciByYWlzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIHNvdXJjZXMgd2l0aCBpbGxlZ2FsCi0gIGVuY29kaW5nIG5vdyBhbHdheXMgY29udGFpbnMgYW4gZW5jb2RpbmcgbmFtZS4KLQotLSBJc3N1ZSAjMTc2NDQ6IEZpeCBhIGNyYXNoIGluIHN0ci5mb3JtYXQgd2hlbiBjdXJseSBicmFjZXMgYXJlIHVzZWQgaW4gc3F1YXJlCi0gIGJyYWNrZXRzLgotCi0tIElzc3VlICMxNzk4MzogUmFpc2UgYSBTeW50YXhFcnJvciBmb3IgYSBgYGdsb2JhbCBfX2NsYXNzX19gYCBzdGF0ZW1lbnQgaW4gYQotICBjbGFzcyBib2R5LgotCi0tIElzc3VlICMxNzkyNzogRnJhbWUgb2JqZWN0cyBrZXB0IGFyZ3VtZW50cyBhbGl2ZSBpZiB0aGV5IGhhZCBiZWVuIGNvcGllZCBpbnRvCi0gIGEgY2VsbCwgZXZlbiBpZiB0aGUgY2VsbCB3YXMgY2xlYXJlZC4KKy0gSXNzdWUgIzE5MzA2OiBBZGQgZXh0cmEgaGludHMgdG8gdGhlIGZhdWx0aGFuZGxlciBtb2R1bGUncyBzdGFjaworICBkdW1wcyB0aGF0IHRoZXNlIGFyZSAidXBzaWRlIGRvd24iLgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE5Mzk1OiBSYWlzZSBhbiBleGNlcHRpb24gd2hlbiBhdHRlbXB0aW5nIHRvIHBpY2tsZSBhIGJ6MiBvciBsem1hCi0gIGNvbXByZXNzb3IvZGVjb21wcmVzc29yIG9iamVjdCwgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBwaWNrbGUgdGhhdCB3b3VsZAotICBjYXVzZSBhIHNlZ2ZhdWx0IHdoZW4gbG9hZGVkIGFuZCB1c2VkLgorLSBJc3N1ZSAjMzE1ODogZG9jdGVzdCBjYW4gbm93IGZpbmQgZG9jdGVzdHMgaW4gZnVuY3Rpb25zIGFuZCBtZXRob2RzCisgIHdyaXR0ZW4gaW4gQy4KKworLSBJc3N1ZSAjMTM0Nzc6IEFkZGVkIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gdGhlIHRhcmZpbGUgbW9kdWxlLgorICBPcmlnaW5hbCBwYXRjaCBieSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMxOTY3NDogaW5zcGVjdC5zaWduYXR1cmUoKSBub3cgcHJvZHVjZXMgYSBjb3JyZWN0IHNpZ25hdHVyZQorICBmb3Igc29tZSBidWlsdGlucy4KKworLSBJc3N1ZSAjMTk3MjI6IEFkZGVkIG9wY29kZS5zdGFja19lZmZlY3QoKSwgd2hpY2gKKyAgY29tcHV0ZXMgdGhlIHN0YWNrIGVmZmVjdCBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCisKKy0gSXNzdWUgIzE5NzM1OiBJbXBsZW1lbnQgcHJpdmF0ZSBmdW5jdGlvbiBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpIHRvCisgIGNyZWF0ZSBTU0xDb250ZXh0IG9iamVjdHMgaW4gUHl0aG9uJ3Mgc3RkbGliIG1vZHVsZS4gSXQgcHJvdmlkZXMgYSBzaW5nbGUKKyAgY29uZmlndXJhdGlvbiBwb2ludCBhbmQgbWFrZXMgdXNlIG9mIFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKCkuCisKKy0gSXNzdWUgIzE2MjAzOiBBZGQgcmUuZnVsbG1hdGNoKCkgZnVuY3Rpb24gYW5kIHJlZ2V4LmZ1bGxtYXRjaCgpIG1ldGhvZCwKKyAgd2hpY2ggYW5jaG9yIHRoZSBwYXR0ZXJuIGF0IGJvdGggZW5kcyBvZiB0aGUgc3RyaW5nIHRvIG1hdGNoLgorICBPcmlnaW5hbCBwYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCisKKy0gSXNzdWUgIzEzNTkyOiBJbXByb3ZlZCB0aGUgcmVwciBmb3IgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gb2JqZWN0cy4KKyAgQmFzZWQgb24gcGF0Y2ggYnkgSHVnbyBMb3BlcyBUYXZhcmVzLgorCistIElzc3VlICMxOTY0MTogQWRkZWQgdGhlIGF1ZGlvb3AuYnl0ZXN3YXAoKSBmdW5jdGlvbiB0byBjb252ZXJ0IGJpZy1lbmRpYW4KKyAgc2FtcGxlcyB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhLgorCistIElzc3VlICMxNTIwNDogRGVwcmVjYXRlZCB0aGUgJ1UnIG1vZGUgaW4gZmlsZS1saWtlIG9iamVjdHMuCisKKy0gSXNzdWUgIzE3ODEwOiBJbXBsZW1lbnQgUEVQIDMxNTQsIHBpY2tsZSBwcm90b2NvbCA0LgorCistIElzc3VlICMxOTY2ODogQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNwMTEyNSBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTk2ODk6IEFkZCBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpIGZhY3RvcnkgZnVuY3Rpb24uIEl0IGNyZWF0ZXMKKyAgYSBuZXcgU1NMQ29udGV4dCBvYmplY3Qgd2l0aCBzZWN1cmUgZGVmYXVsdCBzZXR0aW5ncy4KKworLSBJc3N1ZSAjMTk3Mjc6IG9zLnV0aW1lKC4uLiwgTm9uZSkgaXMgbm93IHBvdGVudGlhbGx5IG1vcmUgcHJlY2lzZQorICB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxNzIwMTogWklQNjQgZXh0ZW5zaW9ucyBub3cgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gIFBhdGNoIGJ5CisgIFdpbGxpYW0gTWFsbGFyZC4KKworLSBJc3N1ZSAjMTkyOTI6IEFkZCBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpIHRvIGxvYWQgZGVmYXVsdCByb290IENBCisgIGNlcnRpZmljYXRlcyBmcm9tIGRlZmF1bHQgc3RvcmVzIG9yIHN5c3RlbSBzdG9yZXMuIEJ5IGRlZmF1bHQgdGhlIG1ldGhvZAorICBsb2FkcyBDQSBjZXJ0cyBmb3IgYXV0aGVudGljYXRpb24gb2Ygc2VydmVyIGNlcnRzLgorCistIElzc3VlICMxOTY3MzogQWRkIHBhdGhsaWIgdG8gdGhlIHN0ZGxpYiBhcyBhIHByb3Zpc2lvbmFsIG1vZHVsZSAoUEVQIDQyOCkuCisKKy0gSXNzdWUgIzE2NTk2OiBwZGIgaW4gYSBnZW5lcmF0b3Igbm93IHByb3Blcmx5IHNraXBzIG92ZXIgeWllbGQgYW5kCisgIHlpZWxkIGZyb20gcmF0aGVyIHRoYW4gc3RlcHBpbmcgb3V0IG9mIHRoZSBnZW5lcmF0b3IgaW50byBpdHMKKyAgY2FsbGVyLiAgKFRoaXMgaXMgZXNzZW50aWFsIGZvciBzdGVwcGluZyB0aHJvdWdoIGFzeW5jaW8gY29yb3V0aW5lcy4pCisKKy0gSXNzdWUgIzE3OTE2OiBBZGRlZCBkaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2soKSBhbmQKKyAgZGlzLkJ5dGVjb2RlLmN1cnJlbnRfb2Zmc2V0IHRvIGVhc2lseSBkaXNwbGF5ICJjdXJyZW50IGluc3RydWN0aW9uIgorICBtYXJrZXJzIGluIHRoZSBuZXcgZGlzYXNzZW1ibHkgQVBJIChQYXRjaCBieSBDbGF1ZGl1IFBvcGEpLgorCistIElzc3VlICMxOTU1MjogdmVudiBub3cgc3VwcG9ydHMgYm9vdHN0cmFwcGluZyBwaXAgaW50byB2aXJ0dWFsIGVudmlyb25tZW50cworCistIElzc3VlICMxNzEzNDogRmluYWxpemUgaW50ZXJmYWNlIHRvIFdpbmRvd3MnIGNlcnRpZmljYXRlIHN0b3JlLiBDZXJ0IGFuZAorICBDUkwgZW51bWVyYXRpb24gYXJlIG5vdyB0d28gZnVuY3Rpb25zLiBlbnVtX2NlcnRpZmljYXRlcygpIGFsc28gcmV0dXJucworICBwdXJwb3NlIGZsYWdzIGFzIHNldCBvZiBPSURzLgorCistIElzc3VlICMxOTU1NTogUmVzdG9yZSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJyksIChhbmQgdGhlIGRpc3R1dGlscworICBlcXVpdmFsZW50KSB3aXRoIGEgRGVwcmVjYXRpb25XYXJuaW5nIHBvaW50aW5nIHBlb3BsZSBhdCAkRVhUX1NVRkZJWC4KKworLSBJc3N1ZSAjODgxMzogQWRkIFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzIHRvIGNoYW5nZSB0aGUgdmVyaWZpY2F0aW9uIGZsYWdzCisgIG9mIHRoZSBjb250ZXh0IGluIG9yZGVyIHRvIGVuYWJsZSBjZXJ0aWZpY2F0aW9uIHJldm9jYXRpb24gbGlzdCAoQ1JMKQorICBjaGVja3Mgb3Igc3RyaWN0IFg1MDkgcnVsZXMuCisKKy0gSXNzdWUgIzE4Mjk0OiBGaXggdGhlIHpsaWIgbW9kdWxlIHRvIG1ha2UgaXQgNjQtYml0IHNhZmUuCisKKy0gSXNzdWUgIzE5NjgyOiBGaXggY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIG9sZCB2ZXJzaW9uIG9mIE9wZW5TU0wgdGhhdAorICB3YXMgaW50cm9kdWNlZCBieSBJc3N1ZSAjMTgzNzkuCisKKy0gSXNzdWUgIzE0NDU1OiBwbGlzdGxpYiBub3cgc3VwcG9ydHMgYmluYXJ5IHBsaXN0cyBhbmQgaGFzIGFuIHVwZGF0ZWQgQVBJLgorCistIElzc3VlICMxOTYzMzogRml4ZWQgd3JpdGluZyBub3QgY29tcHJlc3NlZCAxNi0gYW5kIDMyLWJpdCB3YXZlIGZpbGVzIG9uCisgIGJpZy1lbmRpYW4gcGxhdGZvcm1zLgorCistIElzc3VlICMxODM3OTogU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkgcmV0dXJucyBDQSBpc3N1ZXIgQUlBIGZpZWxkcywgT0NTUAorICBhbmQgQ1JMIGRpc3RyaWJ1dGlvbiBwb2ludHMuCisKKy0gSXNzdWUgIzE4MTM4OiBJbXBsZW1lbnQgY2FkYXRhIGFyZ3VtZW50IG9mIFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb24oKQorICB0byBsb2FkIENBIGNlcnRpZmljYXRlcyBhbmQgQ1JMIGZyb20gbWVtb3J5LiBJdCBzdXBwb3J0cyBQRU0gYW5kIERFUgorICBlbmNvZGVkIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE4Nzc1OiBBZGQgbmFtZSBhbmQgYmxvY2tfc2l6ZSBhdHRyaWJ1dGUgdG8gSE1BQyBvYmplY3QuIFRoZXkgbm93CisgIHByb3ZpZGUgdGhlIHNhbWUgQVBJIGVsZW1lbnRzIGFzIG5vbi1rZXllZCBjcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb25zLgorCistIElzc3VlICMxNzI3NjogTUQ1IGFzIGRlZmF1bHQgZGlnZXN0bW9kIGZvciBITUFDIGlzIGRlcHJlY2F0ZWQuIFRoZSBITUFDCisgIG1vZHVsZSBzdXBwb3J0cyBkaWdlc3Rtb2QgbmFtZXMsIGUuZy4gaG1hYy5ITUFDKCdzaGExJykuCisKKy0gSXNzdWUgIzE5NDQ5OiBpbiBjc3YncyB3cml0ZXJvdywgaGFuZGxlIG5vbi1zdHJpbmcga2V5cyB3aGVuIGdlbmVyYXRpbmcgdGhlCisgIGVycm9yIG1lc3NhZ2UgdGhhdCBjZXJ0YWluIGtleXMgYXJlIG5vdCBpbiB0aGUgJ2ZpZWxkbmFtZXMnIGxpc3QuCisKKy0gSXNzdWUgIzEzNjMzOiBBZGRlZCBhIG5ldyBjb252ZXJ0X2NoYXJyZWZzIGtleXdvcmQgYXJnIHRvIEhUTUxQYXJzZXIgdGhhdCwKKyAgd2hlbiBUcnVlLCBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGFsbCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy4KKworLSBJc3N1ZSAjMjkyNzogQWRkZWQgdGhlIHVuZXNjYXBlKCkgZnVuY3Rpb24gdG8gdGhlIGh0bWwgbW9kdWxlLgorCistIElzc3VlICM4NDAyOiBBZGRlZCB0aGUgZXNjYXBlKCkgZnVuY3Rpb24gdG8gdGhlIGdsb2IgbW9kdWxlLgorCistIElzc3VlICMxNzYxODogQWRkIEJhc2U4NSBhbmQgQXNjaWk4NSBlbmNvZGluZy9kZWNvZGluZyB0byB0aGUgYmFzZTY0IG1vZHVsZS4KKworLSBJc3N1ZSAjMTk2MzQ6IHRpbWUuc3RyZnRpbWUoIiV5Iikgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3Igb24gQUlYIHdoZW4gZ2l2ZW4gYQorICB5ZWFyIGJlZm9yZSAxOTAwLgorCistIEZpeCB0ZXN0LnN1cHBvcnQuYmluZF9wb3J0KCkgdG8gbm90IGNhdXNlIGFuIGVycm9yIHdoZW4gUHl0aG9uIHdhcyBjb21waWxlZAorICBvbiBhIHN5c3RlbSB3aXRoIFNPX1JFVVNFUE9SVCBkZWZpbmVkIGluIHRoZSBoZWFkZXJzIGJ1dCBydW4gb24gYSBzeXN0ZW0KKyAgd2l0aCBhbiBPUyBrZXJuZWwgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoYXQgcmVhc29uYWJseSBuZXcgc29ja2V0IG9wdGlvbi4KKworLSBGaXggY29tcGlsYXRpb24gZXJyb3IgdW5kZXIgZ2NjIG9mIHRoZSBjdHlwZXMgbW9kdWxlIGJ1bmRsZWQgbGliZmZpIGZvciBhcm0uCisKKy0gSXNzdWUgIzE5NDQ4OiBBZGQgcHJpdmF0ZSBBUEkgdG8gU1NMIG1vZHVsZSB0byBsb29rdXAgQVNOLjEgb2JqZWN0cyBieSBPSUQsCisgIE5JRCwgc2hvcnQgbmFtZSBhbmQgbG9uZyBuYW1lLgorCistIElzc3VlICMxOTI4MjogZGJtLm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuIChJbml0YWwKKyAgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKQorCistIElzc3VlICM4MzExOiBBZGRlZCBzdXBwb3J0IGZvciB3cml0aW5nIGFueSBieXRlcy1saWtlIG9iamVjdHMgaW4gdGhlIGFpZmMsCisgIHN1bmF1LCBhbmQgd2F2ZSBtb2R1bGVzLgorCistIElzc3VlICM1MjAyOiBBZGRlZCBzdXBwb3J0IGZvciB1bnNlZWthYmxlIGZpbGVzIGluIHRoZSB3YXZlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICMxMTgwOiBSZXN0b3JlIGdsb2JhbCBvcHRpb24gdG8gaWdub3JlCisgIH4vLnB5ZGlzdHV0aWxzLmNmZyBpbiBEaXN0dXRpbHMsIGFjY2lkZW50YWxseSByZW1vdmVkIGluIGJhY2tvdXQgb2YKKyAgZGlzdHV0aWxzMiBjaGFuZ2VzLgorCistIElzc3VlICMxOTUyMzogQ2xvc2VkIEZpbGVIYW5kbGVyIGxlYWsgd2hpY2ggb2NjdXJyZWQgd2hlbiBkZWxheSB3YXMgc2V0LgorCistIElzc3VlICMxOTU0NCBhbmQgSXNzdWUgIzY1MTY6IFJlc3RvcmUgc3VwcG9ydCBmb3IgLS11c2VyIGFuZCAtLWdyb3VwCisgIHBhcmFtZXRlcnMgdG8gc2Rpc3QgY29tbWFuZCBhY2NpZGVudGFsbHkgcm9sbGVkIGJhY2sgYXMgcGFydCBvZiB0aGUKKyAgZGlzdHV0aWxzMiByb2xsYmFjay4KKworLSBJc3N1ZSAjMTM2NzQ6IFByZXZlbnRlZCB0aW1lLnN0cmZ0aW1lIGZyb20gY3Jhc2hpbmcgb24gV2luZG93cyB3aGVuIGdpdmVuCisgIGEgeWVhciBiZWZvcmUgMTkwMCBhbmQgYSBmb3JtYXQgb2YgJXkuCisKKy0gSXNzdWUgIzE5NDA2OiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZW5zdXJlcGlwIG1vZHVsZSAocGFydCBvZiBQRVAgNDUzKS4KKyAgUGF0Y2ggYnkgRG9uYWxkIFN0dWZmdCBhbmQgTmljayBDb2dobGFuLgorCistIElzc3VlICMxOTU0NCBhbmQgSXNzdWUgIzYyODY6IFJlc3RvcmUgdXNlIG9mIHVybGxpYiBvdmVyIGh0dHAgYWxsb3dpbmcgdXNlCisgIG9mIGh0dHBfcHJveHkgZm9yIERpc3R1dGlscyB1cGxvYWQgY29tbWFuZCwgYSBmZWF0dXJlIGFjY2lkZW50YWxseSBsb3N0CisgIGluIHRoZSByb2xsYmFjayBvZiBkaXN0dXRpbHMyLgorCistIElzc3VlICMxOTU0NCBhbmQgSXNzdWUgIzc0NTc6IFJlc3RvcmUgdGhlIHJlYWRfcGtnX2ZpbGUgbWV0aG9kIHRvCisgIGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbk1ldGFkYXRhIGFjY2lkZW50YWxseSByZW1vdmVkIGluIHRoZSB1bmRvIG9mCisgIGRpc3R1dGlsczIuCisKKy0gSXNzdWUgIzE2Njg1OiBBZGRlZCBzdXBwb3J0IGZvciBhbnkgYnl0ZXMtbGlrZSBvYmplY3RzIGluIHRoZSBhdWRpb29wIG1vZHVsZS4KKyAgUmVtb3ZlZCBzdXBwb3J0IGZvciBzdHJpbmdzLgorCistIElzc3VlICM3MTcxOiBBZGQgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBgYGluZXRfbnRvcGBgIGFuZCBgYGluZXRfcHRvbmBgCisgIHRvIHNvY2tldCBtb2R1bGUuIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxOTI2MTogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyAyNC1iaXQgc2FtcGxlcyBpbiB0aGUgc3VuYXUgbW9kdWxlLgorCistIElzc3VlICMxMDk3Nzk3OiBBZGRlZCBDUDI3MyBlbmNvZGluZywgdXNlZCBvbiBJQk0gbWFpbmZyYW1lcyBpbgorICBHZXJtYW55IGFuZCBBdXN0cmlhLiAgTWFwcGluZyBwcm92aWRlZCBieSBNaWNoYWVsIEJpZXJlbmZlbGQuCisKKy0gSXNzdWUgIzE1NzUwMjA6IEZpeGVkIHN1cHBvcnQgb2YgMjQtYml0IHdhdmUgZmlsZXMgb24gYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE5Mzc4OiBGaXhlZCBhIG51bWJlciBvZiBjYXNlcyBpbiB0aGUgZGlzIG1vZHVsZSB3aGVyZSB0aGUgbmV3CisgICJmaWxlIiBwYXJhbWV0ZXIgd2FzIG5vdCBiZWluZyBob25vdXJlZCBjb3JyZWN0bHkKKworLSBJc3N1ZSAjMTkzNzg6IFJlbW92ZWQgdGhlICJkaXMuQnl0ZWNvZGUuc2hvd19pbmZvIiBtZXRob2QKKworLSBJc3N1ZSAjMTkzNzg6IFJlbmFtZWQgdGhlICJkaXMuQnl0ZWNvZGUuZGlzcGxheV9jb2RlIiBtZXRob2QgdG8KKyAgImRpcy5CeXRlY29kZS5kaXMiIGFuZCBjb252ZXJ0ZWQgaXQgdG8gcmV0dXJuaW5nIGEgc3RyaW5nIHJhdGhlciB0aGFuCisgIHByaW50aW5nIG91dHB1dC4KKworLSBJc3N1ZSAjMTkzNzg6IHRoZSAibGluZV9vZmZzZXQiIHBhcmFtZXRlciBpbiB0aGUgbmV3ICJkaXMuZ2V0X2luc3RydWN0aW9ucyIKKyAgQVBJIGhhcyBiZWVuIHJlbmFtZWQgdG8gImZpcnN0X2xpbmUiIChhbmQgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHVzYWdlCisgIGNoYW5nZWQgYWNjb3JkaW5nbHkpLiBUaGlzIHNob3VsZCByZWR1Y2UgY29uZnVzaW9uIHdpdGggdGhlIG1vcmUgY29tbW9uIHVzZQorICBvZiAib2Zmc2V0IiBpbiB0aGUgZGlzIGRvY3MgdG8gcmVmZXIgdG8gYnl0ZWNvZGUgb2Zmc2V0cy4KKworLSBJc3N1ZSAjMTg2Nzg6IENvcnJlY3RlZCBzcHdkIHN0cnVjdCBtZW1iZXIgbmFtZXMgaW4gc3B3ZCBtb2R1bGU6CisgIHNwX25hbS0+c3BfbmFtcCwgYW5kIHNwX3B3ZC0+c3BfcHdkcC4gIFRoZSBvbGQgbmFtZXMgYXJlIGtlcHQgYXMgZXh0cmEKKyAgc3RydWN0c2VxIG1lbWJlcnMsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCistIElzc3VlICM2MTU3OiBGaXhlZCB0a2ludGVyLlRleHQuZGVidWcoKS4gIHRraW50ZXIuVGV4dC5iYm94KCkgbm93IHJhaXNlcworICBUeXBlRXJyb3IgaW5zdGVhZCBvZiBUY2xFcnJvciBvbiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiAgT3JpZ2luYWwgcGF0Y2gKKyAgYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzEwMTk3OiBSZXdvcmsgc3VicHJvY2Vzcy5nZXRbc3RhdHVzXW91dHB1dCB0byB1c2Ugc3VicHJvY2VzcworICBmdW5jdGlvbmFsaXR5IGFuZCB0aHVzIHRvIHdvcmsgb24gV2luZG93cy4gUGF0Y2ggYnkgTmljayBDb2dobGFuCisKKy0gSXNzdWUgIzYxNjA6IFRoZSBiYm94KCkgbWV0aG9kIG9mIHRraW50ZXIuU3BpbmJveCBub3cgcmV0dXJucyBhIHR1cGxlIG9mCisgIGludGVnZXJzIGluc3RlYWQgb2YgYSBzdHJpbmcuICBCYXNlZCBvbiBwYXRjaCBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTk0MDM6IGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0IGlzIG5vdyByZWVudHJhbnQKKworLSBJc3N1ZSAjMTkyODY6IERpcmVjdG9yaWVzIGluIGBgcGFja2FnZV9kYXRhYGAgYXJlIG5vIGxvbmdlciBhZGRlZCB0bworICB0aGUgZmlsZWxpc3QsIHByZXZlbnRpbmcgZmFpbHVyZSBvdXRsaW5lZCBpbiB0aGUgdGlja2V0LgorCistIElzc3VlICMxOTQ4MDogSFRNTFBhcnNlciBub3cgYWNjZXB0cyBhbGwgdmFsaWQgc3RhcnQtdGFnIG5hbWVzIGFzIGRlZmluZWQKKyAgYnkgdGhlIEhUTUw1IHN0YW5kYXJkLgorCistIElzc3VlICMxNTExNDogVGhlIGh0bWwucGFyc2VyIG1vZHVsZSBub3cgcmFpc2VzIGEgRGVwcmVjYXRpb25XYXJuaW5nIHdoZW4gdGhlCisgIHN0cmljdCBhcmd1bWVudCBvZiBIVE1MUGFyc2VyIG9yIHRoZSBIVE1MUGFyc2VyLmVycm9yIG1ldGhvZCBhcmUgdXNlZC4KKworLSBJc3N1ZSAjMTk0MTA6IFVuZG8gdGhlIHNwZWNpYWwtY2FzaW5nIHJlbW92YWwgb2YgJycgZm9yCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci4KKworLSBJc3N1ZSAjMTk0MjQ6IEZpeCB0aGUgd2FybmluZ3MgbW9kdWxlIHRvIGFjY2VwdCBmaWxlbmFtZSBjb250YWluaW5nIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxOTQzNTogRml4IGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrIG9uIENHSUh0dHBSZXF1ZXN0SGFuZGxlci4KKworLSBJc3N1ZSAjMTkyMjc6IFJlbW92ZSBwdGhyZWFkX2F0Zm9yaygpIGhhbmRsZXIuIFRoZSBoYW5kbGVyIHdhcyBhZGRlZCB0bworICBzb2x2ZSAjMTg3NDcgYnV0IGhhcyBjYXVzZWQgaXNzdWVzLgorCistIElzc3VlICMxOTQyMDogRml4IHJlZmVyZW5jZSBsZWFrIGluIG1vZHVsZSBpbml0YWxpemF0aW9uIGNvZGUgb2YKKyAgX2hhc2hvcGVuc3NsLmMKKworLSBJc3N1ZSAjMTkzMjk6IE9wdGltaXplZCBjb21waWxpbmcgY2hhcnNldHMgaW4gcmVndWxhciBleHByZXNzaW9ucy4KIAogLSBJc3N1ZSAjMTkyMjc6IFRyeSB0byBmaXggZGVhZGxvY2tzIGNhdXNlZCBieSByZS1zZWVkaW5nIHRoZW4gT3BlblNTTAogICBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb24gZm9yaygpLgpAQCAtNzg0LDEyICsyMTAzLDMwIEBACiAtIElzc3VlICMxNjAzOTogQ1ZFLTIwMTMtMTc1MjogQ2hhbmdlIHVzZSBvZiByZWFkbGluZSBpbiBpbWFwbGliIG1vZHVsZSB0byBsaW1pdAogICBsaW5lIGxlbmd0aC4gIFBhdGNoIGJ5IEVtaWwgTGluZC4KIAorLSBJc3N1ZSAjMTkzMzA6IHRoZSB1bm5lY2Vzc2FyeSB3cmFwcGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQorICBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dCBhbmQKKyAgY29udGV4dGxpYi5zdXBwcmVzcyBjb250ZXh0IG1hbmFnZXJzLCB3aGljaCBhbHNvIGVuc3VyZXMgdGhleSBwcm92aWRlCisgIHJlYXNvbmFibGUgaGVscCgpIG91dHB1dCBvbiBpbnN0YW5jZXMKKwogLSBJc3N1ZSAjMTkzOTM6IEZpeCBzeW10YWJsZS5zeW10YWJsZSBmdW5jdGlvbiB0byBub3QgYmUgY29uZnVzZWQgd2hlbiB0aGVyZSBhcmUKICAgZnVuY3Rpb25zIG9yIGNsYXNzZXMgbmFtZWQgInRvcCIuCiAKKy0gSXNzdWUgIzE4Njg1OiBSZXN0b3JlIHJlIHBlcmZvcm1hbmNlIHRvIHByZS1QRVAgMzkzIGxldmVscy4KKwogLSBJc3N1ZSAjMTkzMzk6IHRlbG5ldGxpYiBtb2R1bGUgaXMgbm93IHVzaW5nIHRpbWUubW9ub3RvbmljKCkgd2hlbiBhdmFpbGFibGUKICAgdG8gY29tcHV0ZSB0aW1lb3V0LgogCistIElzc3VlICMxOTM5OTogZml4IHNwb3JhZGljIHRlc3Rfc3VicHJvY2VzcyBmYWlsdXJlLgorCistIElzc3VlICMxMzIzNDogRml4IG9zLmxpc3RkaXIgdG8gd29yayB3aXRoIGV4dGVuZGVkIHBhdGhzIG9uIFdpbmRvd3MuCisgIFBhdGNoIGJ5IFNhbnRvc28gV2lqYXlhLgorCistIElzc3VlICMxOTM3NTogVGhlIHNpdGUgbW9kdWxlIGFkZGluZyBhICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHRvIHN5cy5wYXRoLAorICBpZiBpdCBleGlzdHMsIGlzIG5vdyBkZXByZWNhdGVkLgorCistIElzc3VlICMxOTM3OTogTGF6aWx5IGltcG9ydCBsaW5lY2FjaGUgaW4gdGhlIHdhcm5pbmdzIG1vZHVsZSwgdG8gbWFrZQorICBzdGFydHVwIHdpdGggd2FybmluZ3MgZmFzdGVyIHVudGlsIGEgd2FybmluZyBnZXRzIHByaW50ZWQuCisKIC0gSXNzdWUgIzE5Mjg4OiBGaXhlZCB0aGUgImluIiBvcGVyYXRvciBvZiBkYm0uZ251IGRhdGFiYXNlcyBmb3Igc3RyaW5nCiAgIGFyZ3VtZW50LiAgT3JpZ2luYWwgcGF0Y2ggYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMuCiAKQEAgLTc5OCw1MiArMjEzNSwzMDAgQEAKIAogLSBJc3N1ZSAjMTkzMjc6IEZpeGVkIHRoZSB3b3JraW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0aCB0b28gYmlnIGNoYXJzZXQuCiAKKy0gSXNzdWUgIzE3NDAwOiBOZXcgJ2lzX2dsb2JhbCcgYXR0cmlidXRlIGZvciBpcGFkZHJlc3MgdG8gdGVsbCBpZiBhbiBhZGRyZXNzCisgIGlzIGFsbG9jYXRlZCBieSBJQU5BIGZvciBnbG9iYWwgb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KKwogLSBJc3N1ZSAjMTkzNTA6IEluY3JlYXNpbmcgdGhlIHRlc3QgY292ZXJhZ2Ugb2YgbWFjdXJsMnBhdGguIFBhdGNoIGJ5IENvbGluCiAgIFdpbGxpYW1zLgogCistIElzc3VlICMxOTM2NTogT3B0aW1pemVkIHRoZSBwYXJzaW5nIG9mIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nIGluIHJlLnN1YiooKQorICBmdW5jdGlvbnMuCisKIC0gSXNzdWUgIzE5MzUyOiBGaXggdW5pdHRlc3QgZGlzY292ZXJ5IHdoZW4gYSBtb2R1bGUgY2FuIGJlIHJlYWNoZWQKICAgdGhyb3VnaCBzZXZlcmFsIHBhdGhzIChlLmcuIHVuZGVyIERlYmlhbi9VYnVudHUgd2l0aCB2aXJ0dWFsZW52KS4KIAogLSBJc3N1ZSAjMTUyMDc6IEZpeCBtaW1ldHlwZXMgdG8gcmVhZCBmcm9tIGNvcnJlY3QgcGFydCBvZiBXaW5kb3dzIHJlZ2lzdHJ5CiAgIE9yaWdpbmFsIHBhdGNoIGJ5IERhdmUgQ2hhbWJlcnMKIAorLSBJc3N1ZSAjMTY1OTU6IEFkZCBwcmxpbWl0KCkgdG8gcmVzb3VyY2UgbW9kdWxlLgorCistIElzc3VlICMxOTMyNDogRXhwb3NlIExpbnV4LXNwZWNpZmljIGNvbnN0YW50cyBpbiByZXNvdXJjZSBtb2R1bGUuCisKKy0gTG9hZCBTU0wncyBlcnJvciBzdHJpbmdzIGluIGhhc2hsaWIuCisKKy0gSXNzdWUgIzE4NTI3OiBVcGdyYWRlIGludGVybmFsIGNvcHkgb2YgemxpYiB0byAxLjIuOC4KKworLSBJc3N1ZSAjMTkyNzQ6IEFkZCBhIGZpbHRlcmZ1bmMgcGFyYW1ldGVyIHRvIFB5WmlwRmlsZS53cml0ZXB5LgorCiAtIElzc3VlICM4OTY0OiBmaXggcGxhdGZvcm0uX3N5c192ZXJzaW9uIHRvIGhhbmRsZSBJcm9uUHl0aG9uIDIuNisuCiAgIFBhdGNoIGJ5IE1hcnRpbiBNYXR1c2lhay4KIAorLSBJc3N1ZSAjMTk0MTM6IFJlc3RvcmUgcHJlLTMuMyByZWxvYWQoKSBzZW1hbnRpY3Mgb2YgcmUtZmluZGluZyBtb2R1bGVzLgorCistIElzc3VlICMxODk1ODogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBqc29uLmxvYWQocykgd2hpbGUgcGFzc2luZyBhIHN0cmluZworICB0aGF0IHN0YXJ0cyB3aXRoIGEgVVRGLTggQk9NLgorCistIElzc3VlICMxOTMwNzogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBqc29uLmxvYWQocykgd2hpbGUgcGFzc2luZyBvYmplY3RzCisgIG9mIHRoZSB3cm9uZyB0eXBlLgorCiAtIElzc3VlICMxNjAzODogQ1ZFLTIwMTMtMTc1MjogZnRwbGliOiBMaW1pdCBhbW91bnQgb2YgZGF0YSByZWFkIGJ5CiAgIGxpbWl0aW5nIHRoZSBjYWxsIHRvIHJlYWRsaW5lKCkuICBPcmlnaW5hbCBwYXRjaCBieSBNaWNoYcWCCiAgIEphc3RyesSZYnNraSBhbmQgR2lhbXBhb2xvIFJvZG9sYS4KIAorLSBJc3N1ZSAjMTcwODc6IEltcHJvdmVkIHRoZSByZXByIGZvciByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggb2JqZWN0cy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE5NjY0OiB0ZXN0X3VzZXJkaWN0J3MgcmVwciB0ZXN0IG5vIGxvbmdlciBkZXBlbmRzIG9uIHRoZSBvcmRlcgorICBvZiBkaWN0IGVsZW1lbnRzLgorCistIElzc3VlICMxOTQ0MDogQ2xlYW4gdXAgdGVzdF9jYXBpIGJ5IHJlbW92aW5nIGFuIHVubmVjZXNzYXJ5IF9fZnV0dXJlX18KKyAgaW1wb3J0LCBjb252ZXJ0aW5nIGZyb20gdGVzdF9tYWluIHRvIHVuaXR0ZXN0Lm1haW4sIGFuZCBydW5uaW5nIHRoZQorICBfdGVzdGNhcGkgbW9kdWxlIHRlc3RzIGFzIHN1YlRlc3RzIG9mIGEgdW5pdHRlc3QgVGVzdENhc2UgbWV0aG9kLgorCistIElzc3VlICMxOTM3ODogdGhlIG1haW4gZGlzIG1vZHVsZSB0ZXN0cyBhcmUgbm93IHJ1biB3aXRoIGJvdGggc3Rkb3V0CisgIHJlZGlyZWN0aW9uICphbmQqIHBhc3NpbmcgYW4gZXhwbGljaXQgZmlsZSBwYXJhbWV0ZXIKKworLSBJc3N1ZSAjMTkzNzg6IHJlbW92ZWQgdGhlIG5vdC1hY3R1YWxseS1oZWxwZnVsIGFzc2VydEluc3RydWN0aW9uTWF0Y2hlcworICBhbmQgYXNzZXJ0Qnl0ZWNvZGVFeGFjdGx5TWF0Y2hlcyBoZWxwZXJzIGZyb20gYnl0ZWNvZGVfaGVscGVyCisKKy0gSXNzdWUgIzE4NzAyOiBBbGwgc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0ZWQgYXMgc2tpcHBlZC4KKworLSBJc3N1ZSAjMTk0Mzk6IGludGVycHJldGVyIGVtYmVkZGluZyB0ZXN0cyBhcmUgbm93IGV4ZWN1dGVkIG9uIFdpbmRvd3MKKyAgKFBhdGNoIGJ5IFphY2hhcnkgV2FyZSkKKworLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KKworLSBJc3N1ZSAjMTkzODQ6IEZpeCB0ZXN0X3B5X2NvbXBpbGUgZm9yIHJvb3QgdXNlciwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4MzI2OiBDbGFyaWZ5IHRoYXQgbGlzdC5zb3J0J3MgYXJndW1lbnRzIGFyZSBrZXl3b3JkLW9ubHkuICBBbHNvLAorICBhdHRlbXB0IHRvIHJlZHVjZSBjb25mdXNpb24gaW4gdGhlIGdsb3NzYXJ5IGJ5IG5vdCBzYXlpbmcgdGhlcmUgYXJlCisgIGRpZmZlcmVudCAidHlwZXMiIG9mIGFyZ3VtZW50cyBhbmQgcGFyYW1ldGVycy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE5MzU4OiAibWFrZSBjbGluaWMiIG5vdyBydW5zIHRoZSBBcmd1bWVudCBDbGluaWMgcHJlcHJvY2Vzc29yCisgIG92ZXIgYWxsIENQeXRob24gc291cmNlIGZpbGVzLgorCistIFVwZGF0ZSBTUUxpdGUgdG8gMy44LjEsIHh6IHRvIDUuMC41LCBhbmQgVGNsL1RrIHRvIDguNi4xIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2NjMyOiBFbmFibGUgREVQIGFuZCBBU0xSIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3NzkxOiBEcm9wIFBSRUZJWCBhbmQgRVhFQ19QUkVGSVggZGVmaW5pdGlvbnMgZnJvbSBQQy9weWNvbmZpZy5oCisKKy0gQWRkIHdvcmthcm91bmQgZm9yIFZTIDIwMTAgbm1ha2UgY2xlYW4gaXNzdWUuIFZTIDIwMTAgZG9lc24ndCBzZXQgdXAgUEFUSAorICBmb3Igbm1ha2UuZXhlIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTk1NTA6IEltcGxlbWVudCBXaW5kb3dzIGluc3RhbGxlciBjaGFuZ2VzIG9mIFBFUCA0NTMgKGVuc3VyZXBpcCkuCisKKy0gSXNzdWUgIzE5NTIwOiBGaXggY29tcGlsZXIgd2FybmluZyBpbiB0aGUgX3NoYTMgbW9kdWxlIG9uIDMyYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzE5MzU2OiBBdm9pZCB1c2luZyBhIEMgdmFyaWFibGVkIG5hbWVkICJfc2VsZiIsIGl0J3MgYSByZXNlcnZlZAorICB3b3JkIGluIHNvbWUgQyBjb21waWxlcnMuCisKKy0gSXNzdWUgIzE1NzkyOiBDb3JyZWN0IGJ1aWxkIG9wdGlvbnMgb24gV2luNjQuIFBhdGNoIGJ5IEplcmVteSBLbG90aC4KKworLSBJc3N1ZSAjMTkzNzM6IEFwcGx5IHVwc3RyZWFtIGNoYW5nZSB0byBUayA4LjUuMTUgZml4aW5nIE9TIFggMTAuOQorICBzY3JlZW4gcmVmcmVzaCBwcm9ibGVtIGZvciBPUyBYIGluc3RhbGxlciBidWlsZC4KKworLSBJc3N1ZSAjMTk2NDk6IE9uIE9TIFgsIHRoZSBzYW1lIHNldCBvZiBmaWxlIG5hbWVzIGFyZSBub3cgaW5zdGFsbGVkCisgIGluIGJpbiBkaXJlY3RvcmllcyBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zOiBub24tZnJhbWV3b3JrIHZzIGZyYW1ld29yaywKKyAgYW5kIHNpbmdsZSBhcmNoIHZzIHVuaXZlcnNhbCBidWlsZHMuICBweXRob254LnktMzIgaXMgbm93IGFsd2F5cworICBpbnN0YWxsZWQgZm9yIDY0LWJpdC8zMi1iaXQgdW5pdmVyc2FsIGJ1aWxkcy4gIFRoZSBvYnNvbGV0ZSBhbmQKKyAgdW5kb2N1bWVudGVkIHB5dGhvbncqIHN5bWxpbmtzIGFyZSBubyBsb25nZXIgaW5zdGFsbGVkIGFueXdoZXJlLgorCistIElzc3VlICMxOTU1MzogUEVQIDQ1MyAtICJtYWtlIGluc3RhbGwiIGFuZCAibWFrZSBhbHRpbnN0YWxsIiBub3cgaW5zdGFsbCBvcgorICB1cGdyYWRlIHBpcCBieSBkZWZhdWx0LCB1c2luZyB0aGUgYnVuZGxlZCBwaXAgcHJvdmlkZWQgYnkgdGhlIG5ldyBlbnN1cmVwaXAKKyAgbW9kdWxlLiAgQSBuZXcgY29uZmlndXJlIG9wdGlvbiwgLS13aXRoLWVuc3VyZXBpcFs9dXBncmFkZXxpbnN0YWxsfG5vXSwgaXMKKyAgYXZhaWxhYmxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVuc3VyZXBpcCAiLS11cGdyYWRlIiBvcHRpb24uICBUaGUgb3B0aW9uCisgIGNhbiBhbHNvIGJlIHNldCB3aXRoICJtYWtlIFthbHRdaW5zdGFsbCBFTlNVUkVQSVA9W3VwZ3JhZGV8aW5zdGFsbFxub10iLgorCistIElzc3VlICMxOTU1MTogUEVQIDQ1MyAtIHRoZSBPUyBYIGluc3RhbGxlciBub3cgaW5zdGFsbHMgcGlwIGJ5IGRlZmF1bHQuCisKKy0gVXBkYXRlIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBmb3IgT1MgWCBpbnN0YWxsZXJzOiB4eiA1LjAuMyAtPiA1LjAuNSwKKyAgU1FMaXRlIDMuNy4xMyAtPiAzLjguMQorCistIElzc3VlICMxNTY2MzogUmV2ZXJ0IE9TIFggaW5zdGFsbGVyIGJ1aWx0LWluIFRjbC9UayBzdXBwb3J0IGZvciAzLjQuMGIxLgorICBTb21lIHRoaXJkLXBhcnR5IHByb2plY3RzLCBzdWNoIGFzIE1hdHBsb3RsaWIgYW5kIFBJTC9QaWxsb3csCisgIGRlcGVuZGVkIG9uIGJlaW5nIGFibGUgdG8gYnVpbGQgd2l0aCBUY2wgYW5kIFRrIGZyYW1ld29ya3MgaW4KKyAgL0xpYnJhcnkvRnJhbWV3b3Jrcy4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE5NzMwOiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHBvcnRzIGFsbCB0aGUgZXhpc3RpbmcgUHlBcmcKKyAgImZvcm1hdCB1bml0cyIgYXMgbGVnYWN5IGNvbnZlcnRlcnMsIGFzIHdlbGwgYXMgdHdvIG5ldyBmZWF0dXJlczoKKyAgInNlbGYgY29udmVydGVycyIgYW5kIHRoZSAidmVyc2lvbiIgZGlyZWN0aXZlLgorCistIElzc3VlICMxOTU1MjogcHl2ZW52IG5vdyBib290c3RyYXBzIHBpcCBpbnRvIHZpcnR1YWwgZW52aXJvbm1lbnRzIGJ5CisgIGRlZmF1bHQgKHBhc3MgLS13aXRob3V0LXBpcCB0byByZXF1ZXN0IHRoZSBvbGQgYmVoYXZpb3VyKQorCistIElzc3VlICMxOTM5MDogQXJndW1lbnQgQ2xpbmljIG5vIGxvbmdlciBhY2NlcHRzIG1hbGZvcm1lZCBQeXRob24KKyAgYW5kIEMgaWRzLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSA0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTEwLTIwCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxOTMwMTogR2l2ZSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBtYXJrZWQgZ2xvYmFsIGEKKyAgZ2xvYmFsIHF1YWxuYW1lLgorCistIElzc3VlICMxOTI3OTogVVRGLTcgZGVjb2RlciBubyBsb25nZXIgcHJvZHVjZXMgaWxsZWdhbCBzdHJpbmdzLgorCistIElzc3VlICMxNjYxMjogQWRkICJBcmd1bWVudCBDbGluaWMiLCBhIGNvbXBpbGUtdGltZSBwcmVwcm9jZXNzb3IgZm9yCisgIEMgZmlsZXMgdG8gZ2VuZXJhdGUgYXJndW1lbnQgcGFyc2luZyBjb2RlLiAgKFNlZSBQRVAgNDM2LikKKworLSBJc3N1ZSAjMTg4MTA6IFNoaWZ0IHN0YXQgY2FsbHMgaW4gaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIHN1Y2ggdGhhdAorICB0aGUgY29kZSBpcyBvcHRpbWlzdGljIHRoYXQgaWYgc29tZXRoaW5nIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSBuYW1lZCBleGFjdGx5CisgIGxpa2UgdGhlIHBvc3NpYmxlIHBhY2thZ2UgYmVpbmcgc2VhcmNoZWQgZm9yIHRoYXQgaXQncyBpbiBhY3R1YWxpdHkgYQorICBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE4NDE2OiBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIgbm93IHRyZWF0cyAnJyBhcyB0aGUgY3dkIGFuZAorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgbm8gbG9uZ2VyIHNwZWNpYWwtY2FzZXMgJycgdG8gJy4nLiBUaGlzIGxlYWRzCisgIHRvIG1vZHVsZXMgaW1wb3J0ZWQgZnJvbSBjd2QgdG8gbm93IHBvc3Nlc3MgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGZvcgorICBfX2ZpbGVfXyAodGhpcyBkb2VzIG5vdCBhZmZlY3QgbW9kdWxlcyBzcGVjaWZpZWQgYnkgcGF0aCBvbiB0aGUgQ0xJIGJ1dCBpdAorICBkb2VzIGFmZmVjdCAtbS9ydW5weSkuIEl0IGFsc28gYWxsb3dzIEZpbGVGaW5kZXIgdG8gYmUgbW9yZSBjb25zaXN0ZW50IGJ5IG5vdAorICBoYXZpbmcgYW4gZWRnZSBjYXNlLgorCistIElzc3VlICM0NTU1OiBBbGwgZXhwb3J0ZWQgQyBzeW1ib2xzIGFyZSBub3cgcHJlZml4ZWQgd2l0aCBlaXRoZXIKKyAgIlB5IiBvciAiX1B5Ii4KKworLSBJc3N1ZSAjMTkyMTk6IFNwZWVkIHVwIG1hcnNoYWwubG9hZHMoKSwgYW5kIG1ha2UgcHljIGZpbGVzIHNsaWdodGx5CisgICg1JSB0byAxMCUpIHNtYWxsZXIuCisKKy0gSXNzdWUgIzE5MjIxOiBVcGdyYWRlIFVuaWNvZGUgZGF0YWJhc2UgdG8gdmVyc2lvbiA2LjMuMC4KKworLSBJc3N1ZSAjMTY3NDI6IFRoZSByZXN1bHQgb2YgdGhlIEMgY2FsbGJhY2sgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciBtdXN0CisgIG5vdyBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgUHlNZW1fUmF3TWFsbG9jKCkgb3IgUHlNZW1fUmF3UmVhbGxvYygpIChvciBOVUxMCisgIGlmIGFuIGVycm9yIG9jY3VycmVkKSwgaW5zdGVhZCBvZiBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgUHlNZW1fTWFsbG9jKCkgb3IKKyAgUHlNZW1fUmVhbGxvYygpLgorCistIElzc3VlICMxOTE5OTogUmVtb3ZlIGBgUHlUaHJlYWRTdGF0ZS50aWNrX2NvdW50ZXJgYCBmaWVsZAorCistIEZpeCBtYWNybyBleHBhbnNpb24gb2YgX1B5RXJyX09DQ1VSUkVEKCksIGFuZCBtYWtlIHN1cmUgdG8gdXNlIGl0IGluIGF0CisgIGxlYXN0IG9uZSBwbGFjZSBzbyBhcyB0byBhdm9pZCByZWdyZXNzaW9ucy4KKworLSBJc3N1ZSAjMTkwODc6IEltcHJvdmUgYnl0ZWFycmF5IGFsbG9jYXRpb24gaW4gb3JkZXIgdG8gYWxsb3cgY2hlYXAgcG9wcGluZworICBvZiBkYXRhIGF0IHRoZSBmcm9udCAoc2xpY2UgZGVsZXRpb24pLgorCistIElzc3VlICMxOTAxNDogbWVtb3J5dmlldy5jYXN0KCkgaXMgbm93IGFsbG93ZWQgb24gemVyby1sZW5ndGggdmlld3MuCisKKy0gSXNzdWUgIzE4NjkwOiBtZW1vcnl2aWV3IGlzIG5vdyBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyZWQgd2l0aAorICBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UKKworLSBJc3N1ZSAjMTkwNzg6IG1lbW9yeXZpZXcgbm93IGNvcnJlY3RseSBzdXBwb3J0cyB0aGUgcmV2ZXJzZWQgYnVpbHRpbgorICAoUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKQorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE3NDU3OiB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBub3cgd29ya3Mgd2l0aCBuYW1lc3BhY2UgcGFja2FnZXMuCisgIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKwogLSBJc3N1ZSAjMTgyMzU6IEZpeCB0aGUgc3lzY29uZmlnIHZhcmlhYmxlcyBMRFNIQVJFRCBhbmQgQkxEU0hBUkVEIHVuZGVyIEFJWC4KICAgUGF0Y2ggYnkgRGF2aWQgRWRlbHNvaG4uCiAKKy0gSXNzdWUgIzE4NjA2OiBBZGQgdGhlIG5ldyAic3RhdGlzdGljcyIgbW9kdWxlIChQRVAgNDUwKS4gIENvbnRyaWJ1dGVkCisgIGJ5IFN0ZXZlbiBEJ0FwcmFuby4KKworLSBJc3N1ZSAjMTI4NjY6IFRoZSBhdWRpb29wIG1vZHVsZSBub3cgc3VwcG9ydHMgMjQtYml0IHNhbXBsZXMuCisKKy0gSXNzdWUgIzE5MjU0OiBQcm92aWRlIGFuIG9wdGltaXplZCBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgcGJrZGYyX2htYWMuCisKKy0gSXNzdWVzICMxOTIwMSwgSXNzdWUgIzE5MjIyLCBJc3N1ZSAjMTkyMjM6IEFkZCAieCIgbW9kZSAoZXhjbHVzaXZlIGNyZWF0aW9uKQorICBpbiBvcGVuaW5nIGZpbGUgdG8gYnoyLCBnemlwIGFuZCBsem1hIG1vZHVsZXMuIFBhdGNoZXMgYnkgVGltIEhlYW5leSBhbmQKKyAgVmFqcmFza3kgS29rLgorCistIEZpeCBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIGluIF9zcmUuCisKKy0gSXNzdWUgIzE5MjYyOiBJbml0aWFsIGNoZWNrIGluIG9mIHRoZSAnYXN5bmNpbycgcGFja2FnZSAoYS5rLmEuIFR1bGlwLAorICBhLmsuYS4gUEVQIDMxNTYpLiAgVGhlcmUgYXJlIG5vIGRvY3MgeWV0LCBhbmQgdGhlIFBFUCBpcyBzbGlnaHRseQorICBvdXQgb2YgZGF0ZSB3aXRoIHRoZSBjb2RlLiAgVGhpcyBtb2R1bGUgd2lsbCBoYXZlICpwcm92aXNpb25hbCogc3RhdHVzCisgIGluIFB5dGhvbiAzLjQuCisKIC0gSXNzdWUgIzE5Mjc2OiBGaXhlZCB0aGUgd2F2ZSBtb2R1bGUgb24gNjQtYml0IGJpZy1lbmRpYW4gcGxhdGZvcm1zLgogCistIElzc3VlICMxOTI2NjogUmVuYW1lIHRoZSBuZXctaW4tMy40IGBgY29udGV4dGxpYi5pZ25vcmVgYCBjb250ZXh0IG1hbmFnZXIKKyAgdG8gYGBjb250ZXh0bGliLnN1cHByZXNzYGAgaW4gb3JkZXIgdG8gYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcKKyAgZGVzY3JpcHRpb25zIG9mIHRoYXQgb3BlcmF0aW9uIGVsc2V3aGVyZSBpbiB0aGUgbGFuZ3VhZ2UgYW5kIHN0YW5kYXJkCisgIGxpYnJhcnkgZG9jdW1lbnRhdGlvbiAoUGF0Y2ggYnkgWmVybyBQaXJhZXVzKS4KKworLSBJc3N1ZSAjMTg4OTE6IENvbXBsZXRlZCB0aGUgbmV3IGVtYWlsIHBhY2thZ2UgKHByb3Zpc2lvbmFsKSBBUEkgYWRkaXRpb25zCisgIGJ5IGFkZGluZyBuZXcgY2xhc3NlcyBFbWFpbE1lc3NhZ2UsIE1JTUVQYXJ0LCBhbmQgQ29udGVudE1hbmFnZXIuCisKKy0gSXNzdWUgIzE4MjgxOiBVbnVzZWQgc3RhdCBjb25zdGFudHMgcmVtb3ZlZCBmcm9tIGB0YXJmaWxlYC4KKworLSBJc3N1ZSAjMTg5OTk6IE11bHRpcHJvY2Vzc2luZyBub3cgc3VwcG9ydHMgJ2NvbnRleHRzJyB3aXRoIHRoZSBzYW1lIEFQSQorICBhcyB0aGUgbW9kdWxlLCBidXQgYm91bmQgdG8gc3BlY2lmaWVkIHN0YXJ0IG1ldGhvZHMuCisKKy0gSXNzdWUgIzE4NDY4OiBUaGUgcmUuc3BsaXQsIHJlLmZpbmRhbGwsIGFuZCByZS5zdWIgZnVuY3Rpb25zIGFuZCB0aGUgZ3JvdXAoKQorICBhbmQgZ3JvdXBzKCkgbWV0aG9kcyBvZiBtYXRjaCBvYmplY3Qgbm93IGFsd2F5cyByZXR1cm4gYSBzdHJpbmcgb3IgYSBieXRlcworICBvYmplY3QuCisKKy0gSXNzdWUgIzE4NzI1OiBUaGUgdGV4dHdyYXAgbW9kdWxlIG5vdyBzdXBwb3J0cyB0cnVuY2F0aW5nIG11bHRpbGluZSB0ZXh0LgorCiAtIElzc3VlICMxODc3NjogYXRleGl0IGNhbGxiYWNrcyBub3cgZGlzcGxheSB0aGVpciBmdWxsIHRyYWNlYmFjayB3aGVuIHRoZXkKICAgcmFpc2UgYW4gZXhjZXB0aW9uLgogCiAtIElzc3VlICMxNzgyNzogQWRkIHRoZSBtaXNzaW5nIGRvY3VtZW50YXRpb24gZm9yIGBgY29kZWNzLmVuY29kZWBgIGFuZAogICBgYGNvZGVjcy5kZWNvZGVgYC4KIAotLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKLSAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgotICBPcmlnaW5hbCBwYXRjaCBieSBSb25hbGQgT3Vzc29yZW4uCistIElzc3VlICMxOTIxODogUmVuYW1lIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIGluIG9yZGVyIHRvCisgIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0LgogCi0tIElzc3VlICMxODkxOTogSWYgdGhlIGNsb3NlKCkgbWV0aG9kIG9mIGEgd3JpdGVyIGluIHRoZSBzdW5hdSBvciB3YXZlIG1vZHVsZQotICBmYWlsZWQsIHNlY29uZCBpbnZvY2F0aW9uIG9mIGNsb3NlKCkgYW5kIGRlc3RydWN0b3Igbm8gbW9yZSByYWlzZSBhbgotICBleGNlcHRpb24uCistIElzc3VlICMxODU4MjogQWRkICdwYmtkZjJfaG1hYycgdG8gdGhlIGhhc2hsaWIgbW9kdWxlLiBJdCBpbXBsZW1lbnRzIFBLQ1MjNQorICBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbnMgd2l0aCBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KIAogLSBJc3N1ZSAjMTkxMzE6IFRoZSBhaWZjIG1vZHVsZSBub3cgY29ycmVjdGx5IHJlYWRzIGFuZCB3cml0ZXMgc2FtcHdpZHRoIG9mCiAgIGNvbXByZXNzZWQgc3RyZWFtcy4KIAorLSBJc3N1ZSAjMTkyMDk6IFJlbW92ZSBpbXBvcnQgb2YgY29weXJlZyBmcm9tIHRoZSBvcyBtb2R1bGUgdG8gc3BlZWQgdXAKKyAgaW50ZXJwcmV0ZXIgc3RhcnR1cC4gc3RhdF9yZXN1bHQgYW5kIHN0YXR2ZnNfcmVzdWx0IGFyZSBub3cgaGFyZC1jb2RlZCB0bworICByZXNpZGUgaW4gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTkyMDU6IERvbid0IGltcG9ydCB0aGUgJ3JlJyBtb2R1bGUgaW4gc2l0ZSBhbmQgc3lzY29uZmlnIG1vZHVsZSB0bworICB0byBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydC4KKworLSBJc3N1ZSAjOTU0ODogQWRkIGEgbWluaW1hbCAiX2Jvb3Rsb2NhbGUiIG1vZHVsZSB0aGF0IGlzIGltcG9ydGVkIGJ5IHRoZQorICBfaW8gbW9kdWxlIGluc3RlYWQgb2YgdGhlIGZ1bGwgbG9jYWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg3NjQ6IHJlbW92ZSB0aGUgJ3ByaW50JyBhbGlhcyBmb3IgdGhlIFBEQiAncCcgY29tbWFuZCBzbyB0aGF0IGl0IG5vCisgIGxvbmdlciBzaGFkb3dzIHRoZSBwcmludCBmdW5jdGlvbi4KKwogLSBJc3N1ZSAjMTkxNTg6ICBhIHJhcmUgcmFjZSBpbiBCb3VuZGVkU2VtYXBob3JlIGNvdWxkIGFsbG93IC5yZWxlYXNlKCkgdG9vCiAgIG9mdGVuLgogCistIElzc3VlICMxNTgwNTogQWRkIGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0KCkuCisKKy0gSXNzdWUgIzE4NzE2OiBEZXByZWNhdGUgdGhlIGZvcm1hdHRlciBtb2R1bGUuCisKKy0gSXNzdWUgIzEwNzEyOiAydG8zIGhhcyBhIG5ldyAiYXNzZXJ0cyIgZml4ZXIgdGhhdCByZXBsYWNlcyBkZXByZWNhdGVkIG5hbWVzCisgIG9mIHVuaXR0ZXN0IG1ldGhvZHMgKGUuZy4gZmFpbFVubGVzc0VxdWFsIC0+IGFzc2VydEVxdWFsKS4KKwogLSBJc3N1ZSAjMTgwMzc6IDJ0bzMgbm93IGVzY2FwZXMgJ1x1JyBhbmQgJ1xVJyBpbiBuYXRpdmUgc3RyaW5ncy4KIAorLSBJc3N1ZSAjMTc4Mzk6IGJhc2U2NC5kZWNvZGVieXRlcyBhbmQgYmFzZTY0LmVuY29kZWJ5dGVzIG5vdyBhY2NlcHQgYW55CisgIG9iamVjdCB0aGF0IGV4cG9ydHMgYSAxIGRpbWVuc2lvbmFsIGFycmF5IG9mIGJ5dGVzICh0aGlzIG1lYW5zIHRoZSBzYW1lCisgIGlzIG5vdyBhbHNvIHRydWUgZm9yIGJhc2U2NF9jb2RlYykKKworLSBJc3N1ZSAjMTkxMzI6IFRoZSBwcHJpbnQgbW9kdWxlIG5vdyBzdXBwb3J0cyBjb21wYWN0IG1vZGUuCisKIC0gSXNzdWUgIzE5MTM3OiBUaGUgcHByaW50IG1vZHVsZSBub3cgY29ycmVjdGx5IGZvcm1hdHMgaW5zdGFuY2VzIG9mIHNldCBhbmQKICAgZnJvemVuc2V0IHN1YmNsYXNzZXMuCiAKKy0gSXNzdWUgIzEwMDQyOiBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcgbm93IGNvcnJlY3RseSBoYW5kbGVzCisgIE5vdEltcGxlbWVudGVkIGJlaW5nIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24gKFBhdGNoCisgIGJ5IEthdGllIE1pbGxlcikKKwogLSBJc3N1ZSAjMTkwOTI6IGNvbnRleHRsaWIuRXhpdFN0YWNrIG5vdyBjb3JyZWN0bHkgcmVyYWlzZXMgZXhjZXB0aW9ucwogICBmcm9tIHRoZSBfX2V4aXRfXyBjYWxsYmFja3Mgb2YgaW5uZXIgY29udGV4dCBtYW5hZ2VycyAoUGF0Y2ggYnkgSHJ2b2plCiAgIE5pa8WhacSHKQpAQCAtODUxLDE1ICsyNDM2LDg5IEBACiAtIElzc3VlICMxMjY0MTogQXZvaWQgcGFzc2luZyAiLW1uby1jeWd3aW4iIHRvIHRoZSBtaW5ndzMyIGNvbXBpbGVyLCBleGNlcHQKICAgd2hlbiBuZWNlc3NhcnkuICBQYXRjaCBieSBPc2NhciBCZW5qYW1pbi4KIAotLSBJc3N1ZSAjMTg1OTQ6IFRoZSBmYXN0IHBhdGggZm9yIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSB3YXMgbmV2ZXIgdGFrZW4KLSAgZHVlIHRvIGFuIG92ZXItcmVzdHJpY3RpdmUgdHlwZSBjaGVjay4gIEFuZCB0aGUgZmFsbGJhY2sgcGF0aCBkaWQKLSAgbm90IGltcGxlbWVudCB0aGUgc2FtZSBhbGdvcml0aG0gYXMgdGhlIHB1cmUgcHl0aG9uIGNvZGUuCistIElzc3VlICM1ODQ1OiBJbiBzaXRlLnB5LCBvbmx5IGxvYWQgcmVhZGxpbmUgaGlzdG9yeSBmcm9tIH4vLnB5dGhvbl9oaXN0b3J5CisgIGlmIG5vIGhpc3RvcnkgaGFzIGJlZW4gcmVhZCBhbHJlYWR5LiAgVGhpcyBhdm9pZHMgZG91YmxlIHdyaXRlcyB0byB0aGUKKyAgaGlzdG9yeSBmaWxlIGF0IHNodXRkb3duLgogCiAtIFByb3Blcmx5IGluaXRpYWxpemUgYWxsIGZpZWxkcyBvZiBhIFNTTCBvYmplY3QgYWZ0ZXIgYWxsb2NhdGlvbi4KIAorLSBJc3N1ZSAjMTkwOTU6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciB3aGVuIHRoZQorICBTU0wgaGFuZHNoYWtlIGhhc24ndCBiZWVuIGRvbmUuCisKIC0gSXNzdWUgIzQzNjY6IEZpeCBidWlsZGluZyBleHRlbnNpb25zIG9uIGFsbCBwbGF0Zm9ybXMgd2hlbiAtLWVuYWJsZS1zaGFyZWQKICAgaXMgdXNlZC4KIAorLSBJc3N1ZSAjMTkwMzA6IEZpeGVkIGBpbnNwZWN0LmdldG1lbWJlcnNgIGFuZCBgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRyc2AKKyAgdG8gYXR0ZW1wdCBhY3RpdmF0aW5nIGRlc2NyaXB0b3JzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYSBfX2RpY3RfXyBzZWFyY2gKKyAgZm9yIGZhdWx0eSBkZXNjcmlwdG9ycy4gIGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzYCBubyBsb25nZXIgcmV0dXJucworICBBdHRyaWJ1dGVzIHdob3NlIGhvbWUgY2xhc3MgaXMgTm9uZS4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzE3NzI2NzM6IFRoZSB0eXBlIG9mIGBjaGFyKmAgYXJndW1lbnRzIG5vdyBjaGFuZ2VkIHRvIGBjb25zdCBjaGFyKmAuCisKKy0gSXNzdWUgIzE2MTI5OiBBZGRlZCBhIGBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nYCBwcmUtaW5pdGlhbGl6YXRpb24gQVBJCisgIHRvIGFsbG93IGVtYmVkZGluZyBhcHBsaWNhdGlvbnMgbGlrZSBCbGVuZGVyIHRvIGZvcmNlIGEgcGFydGljdWxhcgorICBlbmNvZGluZyBhbmQgZXJyb3IgaGFuZGxlciBmb3IgdGhlIHN0YW5kYXJkIElPIHN0cmVhbXMgKGluaXRpYWwgcGF0Y2ggYnkKKyAgQmFzdGllbiBNb250YWduZSkKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE5Mjc1OiBGaXggdGVzdF9zaXRlIG9uIEFNRDY0IFNub3cgTGVvcGFyZAorCistIElzc3VlICMxNDQwNzogRml4IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IGluIHRlc3RfY29uY3VycmVudF9mdXR1cmVzLgorCistIElzc3VlICMxODkxOTogVW5pZmllZCBhbmQgZXh0ZW5kZWQgdGVzdHMgZm9yIGF1ZGlvIG1vZHVsZXM6IGFpZmMsIHN1bmF1IGFuZAorICB3YXZlLgorCistIElzc3VlICMxODcxNDogQWRkZWQgdGVzdHMgZm9yIGBgcGRiLmZpbmRfZnVuY3Rpb24oKWBgLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4NzU4OiBGaXhlZCBhbmQgaW1wcm92ZWQgY3Jvc3MtcmVmZXJlbmNlcy4KKworLSBJc3N1ZSAjMTg5NzI6IE1vZGVybml6ZSBlbWFpbCBleGFtcGxlcyBhbmQgdXNlIHRoZSBhcmdwYXJzZSBtb2R1bGUgaW4gdGhlbS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE5MTMwOiBDb3JyZWN0IFBDYnVpbGQvcmVhZG1lLnR4dCwgUHl0aG9uIDMuMyBhbmQgMy40IHJlcXVpcmUgVlMgMjAxMC4KKworLSBJc3N1ZSAjMTU2NjM6IFVwZGF0ZSBPUyBYIDEwLjYrIGluc3RhbGxlciB0byB1c2UgVGNsL1RrIDguNS4xNS4KKworLSBJc3N1ZSAjMTQ0OTk6IEZpeCBzZXZlcmFsIHByb2JsZW1zIHdpdGggT1MgWCB1bml2ZXJzYWwgYnVpbGQgc3VwcG9ydDoKKyAgICAxLiBwcGMgYXJjaCBkZXRlY3Rpb24gZm9yIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIGJyb2tlIHdpdGggWGNvZGUgNQorICAgIDIuIHBwYyBhcmNoIGRldGVjdGlvbiBpbiBjb25maWd1cmUgZGlkIG5vdCB3b3JrIG9uIE9TIFggMTAuNAorICAgIDMuIC1zeXNyb290IGFuZCAtYXJjaCBmbGFncyB3ZXJlIHVubmVjZXNzYXJpbHkgZHVwbGljYXRlZAorICAgIDQuIHRoZXJlIHdhcyBubyBvYnZpb3VzIHdheSB0byBjb25maWd1cmUgYW4gaW50ZWwtMzIgb25seSBidWlsZC4KKworLSBJc3N1ZSAjMTkwMTk6IENoYW5nZSB0aGUgT1MgWCBpbnN0YWxsZXIgYnVpbGQgc2NyaXB0IHRvIHVzZSBDRkxBR1MgaW5zdGVhZAorICBvZiBPUFQgZm9yIHNwZWNpYWwgYnVpbGQgb3B0aW9ucy4gIEJ5IHNldHRpbmcgT1BULCBzb21lIGNvbXBpbGVyLXNwZWNpZmljCisgIG9wdGlvbnMgbGlrZSAtZndyYXB2IHdlcmUgb3ZlcnJpZGRlbiBhbmQgdGh1cyBub3QgdXNlZCwgd2hpY2ggY291bGQgcmVzdWx0CisgIGluIGJyb2tlbiBpbnRlcnByZXRlcnMgd2hlbiBidWlsZGluZyB3aXRoIGNsYW5nLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA5LTI5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODgxODogVGhlICJlbmNvZGluZ25hbWUiIHBhcnQgb2YgUFlUSE9OSU9FTkNPRElORyBpcyBub3cgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzE5MDk4OiBQcmV2ZW50IG92ZXJmbG93IGluIHRoZSBjb21waWxlciB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgc2V0CisgIGFic3VyZGx5IGhpZ2guCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg5Mjk6IGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKClgIG5vdyBjb3JyZWN0bHkgZmluZHMgY2xhc3MKKyAgYXR0cmlidXRlcyByZXR1cm5lZCBieSBgZGlyKClgIHRoYXQgYXJlIGxvY2F0ZWQgaW4gdGhlIG1ldGFjbGFzcy4KKwogLSBJc3N1ZSAjMTg5NTA6IEZpeCBtaXNjZWxsYW5lb3VzIGJ1Z3MgaW4gdGhlIHN1bmF1IG1vZHVsZS4KICAgQXVfcmVhZC5yZWFkZnJhbWVzKCkgbm93IHVwZGF0ZXMgY3VycmVudCBmaWxlIHBvc2l0aW9uIGFuZCByZWFkcyBjb3JyZWN0CiAgIG51bWJlciBvZiBmcmFtZXMgZnJvbSBtdWx0aWNoYW5uZWwgc3RyZWFtLiAgQXVfd3JpdGUud3JpdGVmcmFtZXNyYXcoKSBub3cKQEAgLTg2NywxNyArMjUyNiwyOSBAQAogICBpbnRlZ2VyIChhcyBpbiBQeXRob24gMikuICBBdV9yZWFkIGFuZCBBdV93cml0ZSBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggZmlsZQogICBvYmplY3QgaWYgc3RhcnQgZmlsZSBwb3NpdGlvbiBpcyBub3QgYSB6ZXJvLgogCistIElzc3VlICMxODU5NDogVGhlIGZhc3QgcGF0aCBmb3IgY29sbGVjdGlvbnMuQ291bnRlcigpIHdhcyBuZXZlciB0YWtlbgorICBkdWUgdG8gYW4gb3Zlci1yZXN0cmljdGl2ZSB0eXBlIGNoZWNrLgorCiAtIElzc3VlICMxOTA1MzogWmlwRXh0RmlsZS5yZWFkMSgpIHdpdGggbm9uLXplcm8gYXJndW1lbnQgbm8gbW9yZSByZXR1cm5zIGVtcHR5CiAgIGJ5dGVzIHVudGlsIGVuZCBvZiBkYXRhLgogCi0tIElzc3VlICMxOTAyODogRml4ZWQgdGtpbnRlci5Ua2FwcC5tZXJnZSgpIGZvciBub24tc3RyaW5nIGFyZ3VtZW50cy4KKy0gbG9nZ2luZzogYWRkZWQgc3VwcG9ydCBmb3IgVW5peCBkb21haW4gc29ja2V0cyB0byBTb2NrZXRIYW5kbGVyIGFuZAorICBEYXRhZ3JhbUhhbmRsZXIuCisKKy0gSXNzdWUgIzE4OTk2OiBUZXN0Q2FzZS5hc3NlcnRFcXVhbCgpIG5vdyBtb3JlIGNsZXZlcmx5IHNob3J0ZW4gZGlmZmVyaW5nCisgIHN0cmluZ3MgaW4gZXJyb3IgcmVwb3J0LgorCistIElzc3VlICMxOTAzNDogcmVwcigpIGZvciB0a2ludGVyLlRjbF9PYmogbm93IGV4cG9zZXMgc3RyaW5nIHJlcGVyZXNlbnRhdGlvbi4KKworLSBJc3N1ZSAjMTg5Nzg6IGBgdXJsbGliLnJlcXVlc3QuUmVxdWVzdGBgIG5vdyBhbGxvd3MgdGhlIG1ldGhvZCB0byBiZQorICBpbmRpY2F0ZWQgb24gdGhlIGNsYXNzIGFuZCBubyBsb25nZXIgc2V0cyBpdCB0byBOb25lIGluIGBgX19pbml0X19gYC4KKworLSBJc3N1ZSAjMTg2MjY6IHRoZSBpbnNwZWN0IG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgY29tbWFuZCBsaW5lCisgIGludHJvc3BlY3Rpb24gaW50ZXJmYWNlIChJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKIAogLSBJc3N1ZSAjMzAxNTogRml4ZWQgdGtpbnRlciB3aXRoIHdhbnRvYmplY3Q9RmFsc2UuICBBbnkgVGNsIGNvbW1hbmQgY2FsbAogICByZXR1cm5lZCBlbXB0eSBzdHJpbmcuCiAKLS0gSXNzdWUgIzE4MDUwOiBGaXhlZCBhbiBpbmNvbXBhdGliaWxpdHkgb2YgdGhlIHJlIG1vZHVsZSB3aXRoIFB5dGhvbiAzLjMuMAotICBiaW5hcmllcy4KLQogLSBJc3N1ZSAjMTkwMzc6IFRoZSBtYWlsYm94IG1vZHVsZSBub3cgbWFrZXMgYWxsIGNoYW5nZXMgdG8gbWFpbGRpciBmaWxlcwogICBiZWZvcmUgbW92aW5nIHRoZW0gaW50byBwbGFjZSwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgcHJvZ3JhbXMKICAgdGhhdCBtYXkgYmUgYWNjZXNzaW5nIHRoZSBtYWlsZGlyIGRpcmVjdG9yeS4KQEAgLTg5MSw0MiArMjU2MiwxODEgQEAKIC0gSXNzdWUgIzE4ODczOiBUaGUgdG9rZW5pemUgbW9kdWxlIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZwogICBvbmx5IGluIGNvbW1lbnQgbGluZXMuCiAKKy0gSXNzdWUgIzE3NzY0OiBFbmFibGUgaHR0cC5zZXJ2ZXIgdG8gYmluZCB0byBhIHVzZXIgc3BlY2lmaWVkIG5ldHdvcmsKKyAgaW50ZXJmYWNlLiAgUGF0Y2ggY29udHJpYnV0ZWQgYnkgTWFsdGUgU3dhcnQuCisKKy0gSXNzdWUgIzE4OTM3OiBBZGQgYW4gYXNzZXJ0TG9ncygpIGNvbnRleHQgbWFuYWdlciB0byB1bml0dGVzdC5UZXN0Q2FzZQorICB0byBlbnN1cmUgdGhhdCBhIGJsb2NrIG9mIGNvZGUgZW1pdHMgYSBtZXNzYWdlIHVzaW5nIHRoZSBsb2dnaW5nIG1vZHVsZS4KKwogLSBJc3N1ZSAjMTczMjQ6IEZpeCBodHRwLnNlcnZlcidzIHJlcXVlc3QgaGFuZGxpbmcgY2FzZSBvbiB0cmFpbGluZyAnLycuIFBhdGNoCiAgIGNvbnRyaWJ1dGVkIGJ5IFZhanJhc2t5IEtvay4KIAogLSBJc3N1ZSAjMTkwMTg6IFRoZSBoZWFwcS5tZXJnZSgpIGZ1bmN0aW9uIG5vIGxvbmdlciBzdXBwcmVzc2VzIEluZGV4RXJyb3IKICAgaW4gdGhlIHVuZGVybHlpbmcgaXRlcmFibGVzLgogCi0tIElzc3VlICMxODc4NDogVGhlIHV1aWQgbW9kdWxlIG5vIG1vcmUgYXR0ZW1wdHMgdG8gbG9hZCBsaWJjIHZpYSBjdHlwZXMuQ0RMTCwKLSAgaWYgYWxsIG5lY2Vzc2FyeSBmdW5jdGlvbnMgYXJlIGFscmVhZHkgZm91bmQgaW4gbGlidXVpZC4KLSAgUGF0Y2ggYnkgRXZnZW55IFNvbG9ndWJvdi4KKy0gSXNzdWUgIzE4Nzg0OiBUaGUgdXVpZCBtb2R1bGUgbm8gbG9uZ2VyIGF0dGVtcHRzIHRvIGxvYWQgbGliYyB2aWEgY3R5cGVzLkNETEwKKyAgaWYgYWxsIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGZvdW5kIGluIGxpYnV1aWQuICBQYXRjaCBieQorICBFdmdlbnkgU29sb2d1Ym92LgorCistIFRoZSA6ZW52dmFyOmBQWVRIT05GQVVMVEhBTkRMRVJgIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdyBvbmx5IGVuYWJsZXMgdGhlCisgIGZhdWx0aGFuZGxlciBtb2R1bGUgaWYgdGhlIHZhcmlhYmxlIGlzIG5vbi1lbXB0eS4gU2FtZSBiZWhhdmlvdXIgdGhhbiBvdGhlcgorICB2YXJpYWJsZXMgbGlrZSA6ZW52dmFyOmBQWVRIT05ET05UV1JJVEVCWVRFQ09ERWAuCisKKy0gSXNzdWUgIzE1NjU1MjU6IE5ldyBmdW5jdGlvbiBgYHRyYWNlYmFjay5jbGVhcl9mcmFtZXNgYCB3aWxsIGNsZWFyCisgIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYWxsIHRoZSBzdGFjayBmcmFtZXMgcmVmZXJlbmNlZCBieSBhIHRyYWNlYmFjaworICBvYmplY3QuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxODk1MjogRml4IHJlZ3Jlc3Npb24gaW4gc3VwcG9ydCBkYXRhIGRvd25sb2FkcyBpbnRyb2R1Y2VkIHdoZW4KKyAgdGVzdC5zdXBwb3J0IHdhcyBjb252ZXJ0ZWQgdG8gYSBwYWNrYWdlLiBSZWdyZXNzaW9uIG5vdGljZWQgYnkgWmFjaGFyeQorICBXYXJlLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKKyAgbGluZXMuCisKKy0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTcwMDM6IFVuaWZpZWQgdGhlIHNpemUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGlvIG1vZHVsZSB3aXRoIGNvbW1vbgorICBwcmFjdGljZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE4NTk2OiBTdXBwb3J0IHRoZSB1c2Ugb2YgYWRkcmVzcyBzYW5pdHkgY2hlY2tpbmcgaW4gcmVjZW50IHZlcnNpb25zCisgIG9mIGNsYW5nIGFuZCBHQ0MgYnkgYXBwcm9wcmlhdGVseSBtYXJraW5nIGtub3duIGZhbHNlIGFsYXJtcyBpbiB0aGUgc21hbGwKKyAgb2JqZWN0IGFsbG9jYXRvci4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgRGhpcnUgS2hvbGlhLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg4NzM6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBkZXRlY3QgUHl0aG9uIHNvdXJjZQorICBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA5LTA5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODk0Mjogc3lzLl9kZWJ1Z21hbGxvY3N0YXRzKCkgb3V0cHV0IHdhcyBkYW1hZ2VkIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE4NTcxOiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEVQIDQ0NjogZmlsZSBkZXNjcmlwdG9ycyBhbmQgZmlsZQorICBoYW5kbGVzIGFyZSBub3cgY3JlYXRlZCBub24taW5oZXJpdGFibGU7IGFkZCBmdW5jdGlvbnMKKyAgb3MuZ2V0L3NldF9pbmhlcml0YWJsZSgpLCBvcy5nZXQvc2V0X2hhbmRsZV9pbmhlcml0YWJsZSgpIGFuZAorICBzb2NrZXQuc29ja2V0LmdldC9zZXRfaW5oZXJpdGFibGUoKS4KKworLSBJc3N1ZSAjMTE2MTk6IFRoZSBwYXJzZXIgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvIG5vdCBlbmNvZGUgVW5pY29kZQorICBmaWxlbmFtZXMgYW55bW9yZSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODgwODogTm9uLWRhZW1vbiB0aHJlYWRzIGFyZSBub3cgYXV0b21hdGljYWxseSBqb2luZWQgd2hlbgorICBhIHN1Yi1pbnRlcnByZXRlciBpcyBzaHV0ZG93biAoaXQgd291bGQgcHJldmlvdXNseSBkdW1wIGEgZmF0YWwgZXJyb3IpLgorCistIFJlbW92ZSBzdXBwb3J0IGZvciBjb21waWxpbmcgb24gc3lzdGVtcyB3aXRob3V0IGdldGN3ZCgpLgorCistIElzc3VlICMxODc3NDogUmVtb3ZlIGxhc3QgYml0cyBvZiBHTlUgUFRIIHRocmVhZCBjb2RlIGFuZCB0aHJlYWRfcHRoLmguCisKKy0gSXNzdWUgIzE4NzcxOiBBZGQgb3B0aW1pemF0aW9uIHRvIHNldCBvYmplY3QgbG9va3VwcyB0byByZWR1Y2UgdGhlIGNvc3QKKyAgb2YgaGFzaCBjb2xsaXNpb25zLiAgVGhlIGNvcmUgaWRlYSBpcyB0byBpbnNwZWN0IGEgc2Vjb25kIGtleS9oYXNoIHBhaXIKKyAgZm9yIGVhY2ggY2FjaGUgbGluZSByZXRyaWV2ZWQuCisKKy0gSXNzdWUgIzE2MTA1OiBXaGVuIGEgc2lnbmFsIGhhbmRsZXIgZmFpbHMgdG8gd3JpdGUgdG8gdGhlIGZpbGUgZGVzY3JpcHRvcgorICByZWdpc3RlcmVkIHdpdGggYGBzaWduYWwuc2V0X3dha2V1cF9mZCgpYGAsIHJlcG9ydCBhbiBleGNlcHRpb24gaW5zdGVhZAorICBvZiBpZ25vcmluZyB0aGUgZXJyb3IuCisKKy0gSXNzdWUgIzE4NzIyOiBSZW1vdmUgdXNlcyBvZiB0aGUgInJlZ2lzdGVyIiBrZXl3b3JkIGluIEMgY29kZS4KKworLSBJc3N1ZSAjMTg2Njc6IEFkZCBtaXNzaW5nICJIQVZFX0ZDSE9XTkFUIiBzeW1ib2wgdG8gcG9zaXguX2hhdmVfZnVuY3Rpb25zLgorCistIElzc3VlICMxNjQ5OTogQWRkIGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIGlzb2xhdGVkIG1vZGUuCisKKy0gSXNzdWUgIzE1MzAxOiBQYXJzaW5nIGZkLCB1aWQsIGFuZCBnaWQgcGFyYW1ldGVycyBmb3IgYnVpbHRpbnMKKyAgaW4gTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGlzIG5vdyBmYXIgbW9yZSByb2J1c3QuCisKKy0gSXNzdWUgIzE4MzY4OiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IHdoZW4gcmVhbGxvYygpCisgIGZhaWwuCisKKy0gSXNzdWUgIzE3OTM0OiBBZGQgYSBjbGVhcigpIG1ldGhvZCB0byBmcmFtZSBvYmplY3RzLCB0byBoZWxwIGNsZWFuIHVwCisgIGV4cGVuc2l2ZSBkZXRhaWxzIChsb2NhbCB2YXJpYWJsZXMpIGFuZCBicmVhayByZWZlcmVuY2UgY3ljbGVzLgorCistIElzc3VlICMxODc4MDogJS1mb3JtYXR0aW5nIGNvZGVzICVkLCAlaSwgYW5kICV1IG5vdyB0cmVhdCBpbnQtc3ViY2xhc3NlcworICBhcyBpbnQgKGRpc3BsYXlzIHZhbHVlIG9mIGludC1zdWJjbGFzcyBpbnN0ZWFkIG9mIHN0cihpbnQtc3ViY2xhc3MpICkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg4MDg6IFRocmVhZC5qb2luKCkgbm93IHdhaXRzIGZvciB0aGUgdW5kZXJseWluZyB0aHJlYWQgc3RhdGUgdG8KKyAgYmUgZGVzdHJveWVkIGJlZm9yZSByZXR1cm5pbmcuICBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgYWJvcnRzIGluCisgIFB5X0VuZEludGVycHJldGVyKCkgd2hlbiBzb21lIG5vbi1kYWVtb24gdGhyZWFkcyBhcmUgc3RpbGwgcnVubmluZy4KKworLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKKyAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgorCistIElzc3VlICMxODg1MjogSGFuZGxlIGNhc2Ugb2YgYGByZWFkbGluZS5fX2RvY19fYGAgYmVpbmcgYGBOb25lYGAgaW4gdGhlIG5ldworICByZWFkbGluZSBhY3RpdmF0aW9uIGNvZGUgaW4gYGBzaXRlLnB5YGAuCiAKIC0gSXNzdWUgIzE4NjcyOiBGaXhlZCBmb3JtYXQgc3BlY2lmaWVycyBmb3IgUHlfc3NpemVfdCBpbiBkZWJ1Z2dpbmcgb3V0cHV0IGluCiAgIHRoZSBfc3JlIG1vZHVsZS4KIAotLSBJc3N1ZSAjMTg4MzA6IGluc3BlY3QuZ2V0Y2xhc3N0cmVlKCkgbm8gbW9yZSBwcm9kdWNlcyBkdXBsaWNhdGVkIGVudHJpZXMgZXZlbgorLSBJc3N1ZSAjMTg4MzA6IGluc3BlY3QuZ2V0Y2xhc3N0cmVlKCkgbm8gbG9uZ2VyIHByb2R1Y2VzIGR1cGxpY2F0ZSBlbnRyaWVzIGV2ZW4KICAgd2hlbiBpbnB1dCBsaXN0IGNvbnRhaW5zIGR1cGxpY2F0ZXMuCiAKKy0gSXNzdWUgIzE4ODc4OiBzdW5hdS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgQmFzZWQgb24KKyAgcGF0Y2hlcyBieSBDbGF1ZGl1IFBvcGEgYW5kIFIuIERhdmlkIE11cnJheS4KKwogLSBJc3N1ZSAjMTg5MDk6IEZpeCBfdGtpbnRlci50a2FwcC5pbnRlcnBhZGRyKCkgb24gV2luZG93cyA2NC1iaXQsIGRvbid0IGNhc3QKICAgNjQtYml0IHBvaW50ZXIgdG8gbG9uZyAoMzIgYml0cykuCiAKIC0gSXNzdWUgIzE4ODc2OiBUaGUgRmlsZUlPLm1vZGUgYXR0cmlidXRlIG5vdyBiZXR0ZXIgcmVmbGVjdHMgdGhlIGFjdHVhbCBtb2RlCiAgIHVuZGVyIHdoaWNoIHRoZSBmaWxlIHdhcyBvcGVuZWQuICBQYXRjaCBieSBFcmlrIEJyYXkuCiAKKy0gSXNzdWUgIzE2ODUzOiBBZGQgbmV3IHNlbGVjdG9ycyBtb2R1bGUuCisKKy0gSXNzdWUgIzE4ODgyOiBBZGQgdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE4OTAxOiBUaGUgc3VuYXUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4KKyAgYSBwbGFpbiB0dXBsZS4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTc0ODc6IFRoZSByZXN1bHQgb2YgdGhlIHdhdmUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgaXMgcGlja2xlYWJsZSBhZ2Fpbi4KKyAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxODc1Njogb3MudXJhbmRvbSgpIG5vdyB1c2VzIGEgbGF6aWx5LW9wZW5lZCBwZXJzaXN0ZW50IGZpbGUKKyAgZGVzY3JpcHRvciwgc28gYXMgdG8gYXZvaWQgdXNpbmcgbWFueSBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gcnVuIGluCisgIHBhcmFsbGVsIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KKwogLSBJc3N1ZSAjMTg0MTg6IEFmdGVyIGZvcmsoKSwgcmVpbml0IGFsbCB0aHJlYWRzIHN0YXRlcywgbm90IG9ubHkgYWN0aXZlIG9uZXMuCiAgIFBhdGNoIGJ5IEEuIEplc3NlIEppcnl1IERhdmlzLgogCistIElzc3VlICMxNzk3NDogU3dpdGNoIHVuaXR0ZXN0IGZyb20gdXNpbmcgZ2V0b3B0IHRvIHVzaW5nIGFyZ3BhcnNlLgorCistIElzc3VlICMxMTc5ODogVGVzdFN1aXRlIG5vdyBkcm9wcyByZWZlcmVuY2VzIHRvIG93biB0ZXN0cyBhZnRlciBleGVjdXRpb24uCisKIC0gSXNzdWUgIzE2NjExOiBodHRwLmNvb2tpZSBub3cgY29ycmVjdGx5IHBhcnNlcyB0aGUgJ3NlY3VyZScgYW5kICdodHRwb25seScKICAgY29va2llIGZsYWdzLgogCiAtIElzc3VlICMxMTk3MzogRml4IGEgcHJvYmxlbSBpbiBrZXZlbnQuIFRoZSBmbGFncyBhbmQgZmZsYWdzIGZpZWxkcyBhcmUgbm93CiAgIHByb3Blcmx5IGhhbmRsZWQgYXMgdW5zaWduZWQuCiAKLS0gSXNzdWUgIzE3NzAyOiBPbiBlcnJvciwgb3MuZW52aXJvbmIgbm93IHJlbW92ZXMgc3VwcHJlc3MgdGhlIGV4Y2VwdCBjb250ZXh0Ci0gIHdoZW4gcmFpc2luZyBhIG5ldyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBrZXkuCistIElzc3VlICMxODgwNzogYGBweXZlbnZgYCBub3cgdGFrZXMgYSAtLWNvcGllcyBhcmd1bWVudCBhbGxvd2luZyBjb3BpZXMKKyAgaW5zdGVhZCBvZiBzeW1saW5rcyBldmVuIHdoZXJlIHN5bWxpbmtzIGFyZSBhdmFpbGFibGUgYW5kIHRoZSBkZWZhdWx0LgogCi0tIElzc3VlICMxODc1NTogRml4ZWQgdGhlIGxvYWRlciB1c2VkIGluIGltcCB0byBhbGxvdyBnZXRfZGF0YSgpIHRvIGJlIGNhbGxlZAotICBtdWx0aXBsZSB0aW1lcy4KKy0gSXNzdWUgIzE4NTM4OiBgYHB5dGhvbiAtbSBkaXNgYCBub3cgdXNlcyBhcmdwYXJzZSBmb3IgYXJndW1lbnQgcHJvY2Vzc2luZy4KKyAgUGF0Y2ggYnkgTWljaGVsZSBPcnLDuS4KKworLSBJc3N1ZSAjMTgzOTQ6IENsb3NlIGNnaS5GaWVsZFN0b3JhZ2UncyBvcHRpb25hbCBmaWxlLgorCistIElzc3VlICMxNzcwMjogT24gZXJyb3IsIG9zLmVudmlyb25iIG5vdyBzdXBwcmVzc2VzIHRoZSBleGNlcHRpb24gY29udGV4dAorICB3aGVuIHJhaXNpbmcgYSBuZXcgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwga2V5LgogCiAtIElzc3VlICMxNjgwOTogRml4ZWQgc29tZSB0a2ludGVyIGluY29tcGFiaWxpdGllcyB3aXRoIFRjbC9UayA4LjYuCiAKQEAgLTkzNiw2ICsyNzQ2LDkgQEAKIC0gSXNzdWUgIzE4MzI0OiBzZXRfcGF5bG9hZCBub3cgY29ycmVjdGx5IGhhbmRsZXMgYmluYXJ5IGlucHV0LiAgVGhpcyBhbHNvCiAgIHN1cGVyc2VkZXMgdGhlIHByZXZpb3VzIGZpeGVzIGZvciAjMTQzNjAsICMxNzE3LCBhbmQgIzE2NTY0LgogCistIElzc3VlICMxODc5NDogQWRkIGEgZmlsZW5vKCkgbWV0aG9kIGFuZCBhIGNsb3NlZCBhdHRyaWJ1dGUgdG8gc2VsZWN0LmRldnBvbGwKKyAgb2JqZWN0cy4KKwogLSBJc3N1ZSAjMTcxMTk6IEZpeGVkIGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gcHJvY2Vzc2luZyBsYXJnZSBzdHJpbmdzIGFuZCB0dXBsZXMKICAgaW4gdGhlIHRraW50ZXIgbW9kdWxlLgogCkBAIC05NDYsOSArMjc1OSw2IEBACiAtIElzc3VlICM4ODY1OiBDb25jdXJyZW50IGludm9jYXRpb24gb2Ygc2VsZWN0LnBvbGwucG9sbCgpIG5vdyByYWlzZXMgYQogICBSdW50aW1lRXJyb3IgZXhjZXB0aW9uLiAgUGF0Y2ggYnkgQ2hyaXN0aWFuIFNjaHViZXJ0LgogCi0tIElzc3VlICMxMzQ2MTogRml4IGEgY3Jhc2ggaW4gdGhlIFRleHRJT1dyYXBwZXIudGVsbCBtZXRob2Qgb24gNjQtYml0Ci0gIHBsYXRmb3Jtcy4gIFBhdGNoIGJ5IFlvZ2VzaCBDaGF1ZGhhcmkuCi0KIC0gSXNzdWUgIzE4Nzc3OiBUaGUgc3NsIG1vZHVsZSBub3cgdXNlcyB0aGUgbmV3IENSWVBUT19USFJFQURJRCBBUEkgb2YKICAgT3BlblNTTCAxLjAuMCsgaW5zdGVhZCBvZiB0aGUgZGVwcmVjYXRlZCBDUllQVE8gaWQgY2FsbGJhY2sgZnVuY3Rpb24uCiAKQEAgLTk2Myw1MCArMjc3Myw2MTEgQEAKICAgc3RyaW5ncyBmb3IgYGByZmM4MjJOYW1lYGAgKGVtYWlsKSwgYGBkTlNOYW1lYGAgKEROUykgYW5kCiAgIGBgdW5pZm9ybVJlc291cmNlSWRlbnRpZmllcmBgIChVUkkpLgogCistIElzc3VlICMxODcwMTogUmVtb3ZlIHN1cHBvcnQgb2Ygb2xkIENQeXRob24gdmVyc2lvbnMgKDwzLjApIGZyb20gQyBjb2RlLgorCiAtIElzc3VlICMxODc1NjogSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gb3MudXJhbmRvbSgpIHdoZW4gdGhlIGZhaWx1cmUKICAgaXMgZHVlIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gL2Rldi91cmFuZG9tIG5vdCBleGlzdGluZyAoZm9yIGV4YW1wbGUsCiAgIGV4aGF1c3RpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBsaW1pdCkuCiAKKy0gSXNzdWUgIzE4NjczOiBBZGQgT19UTVBGSUxFIHRvIG9zIG1vZHVsZS4gT19UTVBGSUxFIHJlcXVpcmVzIExpbnV4IGtlcm5lbAorICAzLjExIG9yIG5ld2VyLiBJdCdzIG9ubHkgZGVmaW5lZCBvbiBzeXN0ZW0gd2l0aCAzLjExIHVhcGkgaGVhZGVycywgdG9vLgorCistIElzc3VlICMxODUzMjogQ2hhbmdlIHRoZSBidWlsdGluIGhhc2ggYWxnb3JpdGhtcycgbmFtZXMgdG8gbG93ZXIgY2FzZSBuYW1lcworICBhcyBwcm9taXNlZCBieSBoYXNobGliJ3MgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjODcxMzogYWRkIG5ldyBzcHdhbiBhbmQgZm9ya3NlcnZlciBzdGFydCBtZXRob2RzLCBhbmQgbmV3IGZ1bmN0aW9ucworICBnZXRfYWxsX3N0YXJ0X21ldGhvZHMsIGdldF9zdGFydF9tZXRob2QsIGFuZCBzZXRfc3RhcnRfbWV0aG9kLCB0bworICBtdWx0aXByb2Nlc3NpbmcuCisKIC0gSXNzdWUgIzE4NDA1OiBJbXByb3ZlIHRoZSBlbnRyb3B5IG9mIGNyeXB0Lm1rc2FsdCgpLgogCistIElzc3VlICMxMjAxNTogVGhlIHRlbXBmaWxlIG1vZHVsZSBub3cgdXNlcyBhIHN1ZmZpeCBvZiA4IHJhbmRvbSBjaGFyYWN0ZXJzCisgIGluc3RlYWQgb2YgNiwgdG8gcmVkdWNlIHRoZSByaXNrIG9mIGZpbGVuYW1lIGNvbGxpc2lvbi4gVGhlIGVudHJvcHkgd2FzCisgIHJlZHVjZWQgd2hlbiB1cHBlcmNhc2UgbGV0dGVycyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgY2hhcnNldCB1c2VkIHRvIGdlbmVyYXRlCisgIHJhbmRvbSBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxODU4NTogQWRkIDpmdW5jOmB0ZXh0d3JhcC5zaG9ydGVuYCB0byBjb2xsYXBzZSBhbmQgdHJ1bmNhdGUgYQorICBwaWVjZSBvZiB0ZXh0IHRvIGEgZ2l2ZW4gbGVuZ3RoLgorCistIElzc3VlICMxODU5ODogVHdlYWsgZXhjZXB0aW9uIG1lc3NhZ2UgZm9yIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkgdG8KKyAgaW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgd2hlbiBhIGtleSBhcmd1bWVudCBpcyBtaXNzaW5nLgorCiAtIElzc3VlICMxOTE1MTogRml4IGRvY3N0cmluZyBhbmQgdXNlIG9mIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpIHRvCiAgIHJlZmxlY3QgMi10dXBsZXMuCiAKKy0gSXNzdWUgIzE5MTUyOiBBZGQgRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfZmlsZW5hbWUoKS4KKwogLSBJc3N1ZSAjMTg2NzY6IENoYW5nZSAncG9zaXRpdmUnIHRvICdub24tbmVnYXRpdmUnIGluIHF1ZXVlLnB5IHB1dCBhbmQgZ2V0CiAgIGRvY3N0cmluZ3MgYW5kIFZhbHVlRXJyb3IgbWVzc2FnZXMuIFBhdGNoIGJ5IFpob25neXVlIEx1bwogCi0tIElzc3VlICMxODY4MTogRml4IGEgTmFtZUVycm9yIGluIGltcC5yZWxvYWQoKSAobm90aWNlZCBieSBXZWl6aGFvIExpKS4KKy0gRml4IHJlZmNvdW50aW5nIGlzc3VlIHdpdGggZXh0ZW5zaW9uIHR5cGVzIGluIHRraW50ZXIuCiAKIC0gSXNzdWUgIzgxMTI6IHhsbXJwYy5zZXJ2ZXIncyBEb2NYTUxSUENTZXJ2ZXIgc2VydmVyIG5vIGxvbmdlciByYWlzZXMgYW4gZXJyb3IKICAgaWYgbWV0aG9kcyBoYXZlIGFubm90YXRpb25zOyBpdCBub3cgY29ycmVjdGx5IGRpc3BsYXlzIHRoZSBhbm5vdGF0aW9ucy4KIAorLSBJc3N1ZSAjMTg2MDA6IEFkZGVkIHBvbGljeSBhcmd1bWVudCB0byBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nLAorICBhbmQgYXNfYnl0ZXMgYW5kIF9fYnl0ZXNfXyBtZXRob2RzIHRvIE1lc3NhZ2UuCisKKy0gSXNzdWUgIzE4NjcxOiBPdXRwdXQgbW9yZSBpbmZvcm1hdGlvbiB3aGVuIGxvZ2dpbmcgZXhjZXB0aW9ucyBvY2N1ci4KKworLSBJc3N1ZSAjMTg2MjE6IFByZXZlbnQgdGhlIHNpdGUgbW9kdWxlJ3MgcGF0Y2hlZCBidWlsdGlucyBmcm9tIGtlZXBpbmcKKyAgdG9vIG1hbnkgcmVmZXJlbmNlcyBhbGl2ZSBmb3IgdG9vIGxvbmcuCisKKy0gSXNzdWUgIzQ4ODU6IEFkZCB3ZWFrcmVmIHN1cHBvcnQgdG8gbW1hcCBvYmplY3RzLiAgUGF0Y2ggYnkgVmFsZXJpZSBMYW1iZXJ0LgorCistIElzc3VlICM4ODYwOiBGaXhlZCByb3VuZGluZyBpbiB0aW1lZGVsdGEgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE4ODQ5OiBGaXhlZCBhIFdpbmRvd3Mtc3BlY2lmaWMgdGVtcGZpbGUgYnVnIHdoZXJlIGNvbGxpc2lvbiB3aXRoIGFuCisgIGV4aXN0aW5nIGRpcmVjdG9yeSBjYXVzZWQgbWtzdGVtcCBhbmQgcmVsYXRlZCBBUElzIHRvIGZhaWwgaW5zdGVhZCBvZgorICByZXRyeWluZy4gUmVwb3J0IGFuZCBmaXggYnkgVmxhZCBTaGNoZXJiaW5hLgorCistIElzc3VlICMxODkyMDogYXJncGFyc2UncyBkZWZhdWx0IGRlc3RpbmF0aW9uIGZvciB0aGUgdmVyc2lvbiBhY3Rpb24gKC12LAorICAtLXZlcnNpb24pIGhhcyBhbHNvIGJlZW4gY2hhbmdlZCB0byBzdGRvdXQsIHRvIG1hdGNoIHRoZSBQeXRob24gZXhlY3V0YWJsZS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE4NjIzOiBGYWN0b3Igb3V0IHRoZSBfU3VwcHJlc3NDb3JlRmlsZXMgY29udGV4dCBtYW5hZ2VyIGludG8KKyAgdGVzdC5zdXBwb3J0LiAgUGF0Y2ggYnkgVmFsZXJpZSBMYW1iZXJ0LgorCistIElzc3VlICMxMjAzNzogRml4IHRlc3RfZW1haWwgZm9yIGRlc2t0b3AgV2luZG93cy4KKworLSBJc3N1ZSAjMTU1MDc6IHRlc3Rfc3VicHJvY2VzcydzIHRlc3Rfc2VuZF9zaWduYWwgY291bGQgZmFpbCBpZiB0aGUgdGVzdAorICBydW5uZXIgd2VyZSBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIHByb2Nlc3MgaW5oZXJpdGVkIGFuIGlnbm9yZQorICBzZXR0aW5nIGZvciBTSUdJTlQuICBSZXN0b3JlIHRoZSBTSUdJTlQgaGFuZGxlciB0byB0aGUgZGVzaXJlZAorICBLZXlib2FyZEludGVycnVwdCByYWlzaW5nIG9uZSBkdXJpbmcgdGhhdCB0ZXN0LgorCistIElzc3VlICMxNjc5OTogU3dpdGNoZWQgZnJvbSBnZXRvcHQgdG8gYXJncGFyc2Ugc3R5bGUgaW4gcmVncnRlc3QncyBhcmd1bWVudAorICBwYXJzaW5nLiAgQWRkZWQgbW9yZSB0ZXN0cyBmb3IgcmVncnRlc3QncyBhcmd1bWVudCBwYXJzaW5nLgorCistIElzc3VlICMxODc5MjogVXNlICIxMjcuMC4wLjEiIG9yICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIgYXMgbXVjaCBhcworICBwb3NzaWJsZSwgc2luY2UgImxvY2FsaG9zdCIgZ29lcyB0aHJvdWdoIGEgRE5TIGxvb2t1cCB1bmRlciByZWNlbnQgV2luZG93cworICB2ZXJzaW9ucy4KKworSURMRQorLS0tLQorCistIElzc3VlICMxODQ4OTogQWRkIHRlc3RzIGZvciBTZWFyY2hFbmdpbmUuIE9yaWdpbmFsIHBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODc0MzogRml4IHJlZmVyZW5jZXMgdG8gbm9uLWV4aXN0YW50ICJTdHJpbmdJTyIgbW9kdWxlLgorCistIElzc3VlICMxODc4MzogUmVtb3ZlZCBleGlzdGluZyBtZW50aW9ucyBvZiBQeXRob24gbG9uZyB0eXBlIGluIGRvY3N0cmluZ3MsCisgIGVycm9yIG1lc3NhZ2VzIGFuZCBjb21tZW50cy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE1ODQ6IFByb3ZpZGUgY29uZmlndXJlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZm9yCisgIFRjbCBhbmQgVGsgd2hlbiBidWlsZGluZyBfdGtpbnRlci4KKworLSBJc3N1ZSAjMTU2NjM6IFRjbC9UayA4LjUuMTQgaXMgbm93IGluY2x1ZGVkIHdpdGggdGhlIE9TIFggMTAuNisgNjQtLzMyLWJpdAorICBpbnN0YWxsZXIuICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mCisgIFRjbC9UayA4LjUgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW1zIGluIHRoZSBBcHBsZS1zdXBwbGllZCBUY2wvVGsgOC41CisgIHNoaXBwZWQgaW4gT1MgWCAxMC42IGFuZCBsYXRlciByZWxlYXNlcy4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4OTIyOiBOb3cgVGhlIExpYi9zbXRwZC5weSBhbmQgVG9vbHMvaTE4bi9tc2dmbXQucHkgc2NyaXB0cyB3cml0ZQorICB0aGVpciB2ZXJzaW9uIHN0cmluZ3MgdG8gc3Rkb3V0LCBhbmQgbm90IHRvIHNkZXJyLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA4LTAzCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjc0MTogRml4IGFuIGVycm9yIHJlcG9ydGluZyBpbiBpbnQoKS4KKworLSBJc3N1ZSAjMTc4OTk6IEZpeCByYXJlIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTAyNDE6IENsZWFyIGV4dGVuc2lvbiBtb2R1bGUgZGljdCBjb3BpZXMgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgIFBhdGNoIGJ5IE5laWwgU2NoZW1lbmF1ZXIsIG1pbmltYWxseSBtb2RpZmllZC4KKworLSBJc3N1ZSAjOTAzNTogaXNtb3VudCBub3cgcmVjb2duaXNlcyB2b2x1bWVzIG1vdW50ZWQgYmVsb3cgYSBkcml2ZSByb290CisgIG9uIFdpbmRvd3MuIE9yaWdpbmFsIHBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxODIxNDogSW1wcm92ZSBmaW5hbGl6YXRpb24gb2YgUHl0aG9uIG1vZHVsZXMgdG8gYXZvaWQgc2V0dGluZworICB0aGVpciBnbG9iYWxzIHRvIE5vbmUsIGluIG1vc3QgY2FzZXMuCisKKy0gSXNzdWUgIzE4MTEyOiBQRVAgNDQyIGltcGxlbWVudGF0aW9uIChzYWZlIG9iamVjdCBmaW5hbGl6YXRpb24pLgorCistIElzc3VlICMxODU1MjogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIFB5QXJlbmFfQWRkUHlPYmplY3QoKSBpbgorICBvYmoyYXN0X29iamVjdCgpLgorCistIElzc3VlICMxODU2MDogRml4IHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gc3VtKCkuCisKKy0gSXNzdWUgIzE4NTIwOiBBZGQgYSBuZXcgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoKSBmdW5jdGlvbiwgc2FtZSB0aGFuCisgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoKSBleGNlcHQgdGhhdCBpdCBoYXMgYSByZXR1cm4gdmFsdWUgKDAgb24gc3VjY2VzcywKKyAgLTEgb24gZXJyb3IpLgorCistIElzc3VlICMxNTkwNTogRml4IHRoZW9yZXRpY2FsIGJ1ZmZlciBvdmVyZmxvdyBpbiBoYW5kbGluZyBvZiBzeXMuYXJndlswXSwKKyAgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBpZiB0aGUgb3BlcmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBvYmV5IE1BWFBBVEhMRU4uCisKKy0gSXNzdWUgIzE4NDA4OiBGaXggbWFueSB2YXJpb3VzIGJ1Z3MgaW4gY29kZSBoYW5kbGluZyBlcnJvcnMsIGVzcGVjaWFsbHkKKyAgb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAoTWVtb3J5RXJyb3IpLgorCistIElzc3VlICMxODM0NDogRml4IHBvdGVudGlhbCByZWYtbGVha3MgaW4gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfYWxsKCkuCisKKy0gSXNzdWUgIzE4MzQyOiBVc2UgdGhlIHJlcHIgb2YgYSBtb2R1bGUgbmFtZSB3aGVuIGFuIGltcG9ydCBmYWlscyB3aGVuIHVzaW5nCisgIGBgZnJvbSAuLi4gaW1wb3J0IC4uLmBgLgorCistIElzc3VlICMxNzg3MjogRml4IGEgc2VnZmF1bHQgaW4gbWFyc2hhbC5sb2FkKCkgd2hlbiBpbnB1dCBzdHJlYW0gcmV0dXJucworICBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgorCistIElzc3VlICMxODMzODogYHB5dGhvbiAtLXZlcnNpb25gIG5vdyBwcmludHMgdmVyc2lvbiBzdHJpbmcgdG8gc3Rkb3V0LCBhbmQKKyAgbm90IHRvIHN0ZGVyci4gIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcgYW5kIE1pY2hhZWwgRGlja2Vucy4KKworLSBJc3N1ZSAjMTg0MjY6IEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gQyBleHRlbnNpb24gaW1wb3J0IHdoZW4KKyAgUHlNb2R1bGVfR2V0RGVmKCkgcmV0dXJucyBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTcyMDY6IE9uIFdpbmRvd3MsIGluY3JlYXNlIHRoZSBzdGFjayBzaXplIGZyb20gMiBNQiB0byA0LjIgTUIgdG8gZml4CisgIGEgc3RhY2sgb3ZlcmZsb3cgaW4gdGhlIG1hcnNoYWwgbW9kdWxlIChmaXggYSBjcmFzaCBpbiB0ZXN0X21hcnNoYWwpLgorICBQYXRjaCB3cml0dGVuIGJ5IEplcmVteSBLbG90aC4KKworLSBJc3N1ZSAjMzMyOTogSW1wbGVtZW50IHRoZSBQRVAgNDQ1OiBBZGQgbmV3IEFQSXMgdG8gY3VzdG9taXplIFB5dGhvbiBtZW1vcnkKKyAgYWxsb2NhdG9ycy4KKworLSBJc3N1ZSAjMTgzMjg6IFJlb3JkZXIgb3BzIGluIFB5VGhyZWFkU3RhdGVfRGVsZXRlKigpIGZ1bmN0aW9ucy4gTm93IHRoZQorICB0c3RhdGUgaXMgZmlyc3QgcmVtb3ZlZCBmcm9tIFRMUyBhbmQgdGhlbiBkZWFsbG9jYXRlZC4KKworLSBJc3N1ZSAjMTM0ODM6IFVzZSBWaXJ0dWFsQWxsb2MgaW4gb2JtYWxsb2Mgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTgxODQ6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgYW5kIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIG5vdyByYWlzZQorICBPdmVyZmxvd0Vycm9yIHdoZW4gYW4gYXJndW1lbnQgb2YgJWMgZm9ybWF0IGlzIG91dCBvZiByYW5nZS4KKworLSBJc3N1ZSAjMTgxMTE6IFRoZSBtaW4oKSBhbmQgbWF4KCkgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IGEgZGVmYXVsdCBhcmd1bWVudAorICB0byBiZSByZXR1cm5lZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBWYWx1ZUVycm9yIG9uIGFuIGVtcHR5IHNlcXVlbmNlLgorICAoQ29udHJpYnV0ZWQgYnkgSnVsaWFuIEJlcm1hbi4pCisKKy0gSXNzdWUgIzE4MTM3OiBEZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBvbiBwcmVjaXNpb24gaW4gZmxvYXQuX19mb3JtYXRfXygpCisgIGFuZCBjb21wbGV4Ll9fZm9ybWF0X18oKS4KKworLSBJc3N1ZSAjMTgxODM6IEZpeCB2YXJpb3VzIHVuaWNvZGUgb3BlcmF0aW9ucyBvbiBzdHJpbmdzIHdpdGggbGFyZ2UgdW5pY29kZQorICBjb2RlcG9pbnRzLgorCistIElzc3VlICMxODE4MDogRml4IHJlZiBsZWFrIGluIF9QeUltcG9ydF9HZXREeW5Mb2FkV2luZG93cygpLgorCistIElzc3VlICMxODAzODogU3ludGF4RXJyb3IgcmFpc2VkIGR1cmluZyBjb21waWxhdGlvbiBzb3VyY2VzIHdpdGggaWxsZWdhbAorICBlbmNvZGluZyBub3cgYWx3YXlzIGNvbnRhaW5zIGFuIGVuY29kaW5nIG5hbWUuCisKKy0gSXNzdWUgIzE3OTMxOiBSZXNvbHZlIGNvbmZ1c2lvbiBvbiBXaW5kb3dzIGJldHdlZW4gcGlkcyBhbmQgcHJvY2VzcworICBoYW5kbGVzLgorCistIFR3ZWFrIHRoZSBleGNlcHRpb24gbWVzc2FnZSB3aGVuIHRoZSBtYWdpYyBudW1iZXIgb3Igc2l6ZSB2YWx1ZSBpbiBhIGJ5dGVjb2RlCisgIGZpbGUgaXMgdHJ1bmNhdGVkLgorCistIElzc3VlICMxNzkzMjogRml4IGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgb24gV2luZG93cyA2NC1iaXQgaW4gaXRlcmF0b3JzOgorICBjaGFuZ2UgdGhlIEMgdHlwZSBvZiBzZXFpdGVyb2JqZWN0Lml0X2luZGV4IGZyb20gbG9uZyB0byBQeV9zc2l6ZV90LgorCistIElzc3VlICMxODA2NTogRG9uJ3Qgc2V0IF9fcGF0aF9fIHRvIHRoZSBwYWNrYWdlIG5hbWUgZm9yIGZyb3plbiBwYWNrYWdlcy4KKworLSBJc3N1ZSAjMTgwODg6IFdoZW4gcmVsb2FkaW5nIGEgbW9kdWxlLCB1bmNvbmRpdGlvbmFsbHkgcmVzZXQgYWxsIHJlbGV2YW50CisgIGF0dHJpYnV0ZXMgb24gdGhlIG1vZHVsZSAoZS5nLiBfX25hbWVfXywgX19sb2FkZXJfXywgX19wYWNrYWdlX18sIF9fZmlsZV9fLAorICBfX2NhY2hlZF9fKS4KKworLSBJc3N1ZSAjMTc5Mzc6IFRyeSBoYXJkZXIgdG8gY29sbGVjdCBjeWNsaWMgZ2FyYmFnZSBhdCBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMTIzNzA6IFByZXZlbnQgY2xhc3MgYm9kaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgX19jbGFzc19fCisgIGNsb3N1cmUuCisKKy0gSXNzdWUgIzE3NjQ0OiBGaXggYSBjcmFzaCBpbiBzdHIuZm9ybWF0IHdoZW4gY3VybHkgYnJhY2VzIGFyZSB1c2VkIGluIHNxdWFyZQorICBicmFja2V0cy4KKworLSBJc3N1ZSAjMTcyMzc6IEZpeCBjcmFzaCBpbiB0aGUgQVNDSUkgZGVjb2RlciBvbiBtNjhrLgorCistIElzc3VlICMxNzkyNzogRnJhbWUgb2JqZWN0cyBrZXB0IGFyZ3VtZW50cyBhbGl2ZSBpZiB0aGV5IGhhZCBiZWVuCisgIGNvcGllZCBpbnRvIGEgY2VsbCwgZXZlbiBpZiB0aGUgY2VsbCB3YXMgY2xlYXJlZC4KKworLSBJc3N1ZSAjMTU0NTQ2MzogQXQgc2h1dGRvd24sIGRlZmVyIGZpbmFsaXphdGlvbiBvZiBjb2RlYyBtb2R1bGVzIHNvCisgIHRoYXQgc3RkZXJyIHJlbWFpbnMgdXNhYmxlLgorCistIElzc3VlICM3MzMwOiBJbXBsZW1lbnQgd2lkdGggYW5kIHByZWNpc2lvbiAoZXg6ICIlNS4zcyIpIGZvciB0aGUgZm9ybWF0CisgIHN0cmluZyBvZiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIGZ1bmN0aW9uLCBvcmlnaW5hbCBwYXRjaCB3cml0dGVuIGJ5IFlzaiBSYXkuCisKKy0gSXNzdWUgIzE1NDU0NjM6IEdsb2JhbCB2YXJpYWJsZXMgY2F1Z2h0IGluIHJlZmVyZW5jZSBjeWNsZXMgYXJlIG5vdworICBnYXJiYWdlLWNvbGxlY3RlZCBhdCBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMTcwOTQ6IENsZWFyIHN0YWxlIHRocmVhZCBzdGF0ZXMgYWZ0ZXIgZm9yaygpLiAgTm90ZSB0aGF0IHRoaXMKKyAgaXMgYSBwb3RlbnRpYWxseSBkaXNydXB0aXZlIGNoYW5nZSBzaW5jZSBpdCBtYXkgcmVsZWFzZSBzb21lIHN5c3RlbQorICByZXNvdXJjZXMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHJlbWFpbiBwZXJwZXR1YWxseSBhbGl2ZSAoZS5nLiBkYXRhYmFzZQorICBjb25uZWN0aW9ucyBrZXB0IGluIHRocmVhZC1sb2NhbCBzdG9yYWdlKS4KKworLSBJc3N1ZSAjMTc0MDg6IEF2b2lkIHVzaW5nIGFuIG9ic29sZXRlIGluc3RhbmNlIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSB3aGVuCisgIHRoZSBpbnRlcnByZXRlciBpcyBzaHV0ZG93biBhbmQgdGhlbiBzdGFydGVkIGFnYWluLgorCistIElzc3VlICM1ODQ1OiBFbmFibGUgdGFiLWNvbXBsZXRpb24gaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIGJ5CisgIGRlZmF1bHQsIHRoYW5rcyB0byBhIG5ldyBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXy4KKworLSBJc3N1ZSAjMTcxMTUsMTcxMTY6IE1vZHVsZSBpbml0aWFsaXphdGlvbiBub3cgaW5jbHVkZXMgc2V0dGluZyBfX3BhY2thZ2VfXyBhbmQKKyAgX19sb2FkZXJfXyBhdHRyaWJ1dGVzIHRvIE5vbmUuCisKKy0gSXNzdWUgIzE3ODUzOiBFbnN1cmUgbG9jYWxzIG9mIGEgY2xhc3MgdGhhdCBzaGFkb3cgZnJlZSB2YXJpYWJsZXMgYWx3YXlzIHdpbgorICBvdmVyIHRoZSBjbG9zdXJlcy4KKworLSBJc3N1ZSAjMTc4NjM6IEluIHRoZSBpbnRlcmFjdGl2ZSBjb25zb2xlLCBkb24ndCBsb29wIGZvcmV2ZXIgaWYgdGhlIGVuY29kaW5nCisgIGNhbid0IGJlIGZldGNoZWQgZnJvbSBzdGRpbi4KKworLSBJc3N1ZSAjMTc4Njc6IFJhaXNlIGFuIEltcG9ydEVycm9yIGlmIF9faW1wb3J0X18gaXMgbm90IGZvdW5kIGluIF9fYnVpbHRpbnNfXy4KKworLSBJc3N1ZSAjMTg2OTg6IEVuc3VyZSBpbXBvcnRsaWIucmVsb2FkKCkgcmV0dXJucyB0aGUgbW9kdWxlIG91dCBvZiBzeXMubW9kdWxlcy4KKworLSBJc3N1ZSAjMTc4NTc6IFByZXZlbnQgYnVpbGQgZmFpbHVyZXMgd2l0aCBwcmUtMy41LjAgdmVyc2lvbnMgb2Ygc3FsaXRlMywKKyAgc3VjaCBhcyB3YXMgc2hpcHBlZCB3aXRoIENlbnRvcyA1IGFuZCBNYWMgT1MgWCAxMC40LgorCistIElzc3VlICMxNzQxMzogc3lzLnNldHRyYWNlIGNhbGxiYWNrcyB3ZXJlIGJlaW5nIHBhc3NlZCBhIHN0cmluZyBpbnN0ZWFkIG9mIGFuCisgIGV4Y2VwdGlvbiBpbnN0YW5jZSBmb3IgdGhlICd2YWx1ZScgZWxlbWVudCBvZiB0aGUgYXJnIHR1cGxlIGlmIHRoZSBleGNlcHRpb24KKyAgb3JpZ2luYXRlZCBmcm9tIEMgY29kZTsgbm93IGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBpcyBhbHdheXMgcHJvdmlkZWQuCisKKy0gSXNzdWUgIzE3NzgyOiBGaXggdW5kZWZpbmVkIGJlaGF2aW91ciBvbiBwbGF0Zm9ybXMgd2hlcmUKKyAgYGBzdHJ1Y3QgdGltZXNwZWNgYCdzICJ0dl9uc2VjIiBtZW1iZXIgaXMgbm90IGEgQyBsb25nLgorCistIElzc3VlICMxNzcyMjogV2hlbiBsb29raW5nIHVwIF9fcm91bmRfXywgcmVzb2x2ZSBkZXNjcmlwdG9ycy4KKworLSBJc3N1ZSAjMTYwNjE6IFNwZWVkIHVwIHN0ci5yZXBsYWNlKCkgZm9yIHJlcGxhY2luZyAxLWNoYXJhY3RlciBzdHJpbmdzLgorCistIElzc3VlICMxNzcxNTogRml4IHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGluIGEgX190cnVuY19fCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTc2NDM6IEFkZCBfX2NhbGxiYWNrX18gYXR0cmlidXRlIHRvIHdlYWtyZWYucmVmLgorCistIElzc3VlICMxNjQ0NzogRml4ZWQgcG90ZW50aWFsIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHNldHRpbmcgX19uYW1lX18gb24gYQorICBjbGFzcy4KKworLSBJc3N1ZSAjMTc2Njk6IEZpeCBjcmFzaCBpbnZvbHZpbmcgZmluYWxpemF0aW9uIG9mIGdlbmVyYXRvcnMgdXNpbmcgeWllbGQgZnJvbS4KKworLSBJc3N1ZSAjMTQ0Mzk6IFB5dGhvbiBub3cgcHJpbnRzIHRoZSB0cmFjZWJhY2sgb24gcnVucHkgZmFpbHVyZSBhdCBzdGFydHVwLgorCistIElzc3VlICMxNzQ2OTogRml4IF9QeV9HZXRBbGxvY2F0ZWRCbG9ja3MoKSBhbmQgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgIHdoZW4gcnVubmluZyBvbiB2YWxncmluZC4KKworLSBJc3N1ZSAjMTc2MTk6IE1ha2UgaW5wdXQoKSBjaGVjayBmb3IgQ3RybC1DIGNvcnJlY3RseSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzM1NzogQWRkIG1pc3NpbmcgdmVyYm9zaXR5IG1lc3NhZ2VzIGZvciAtdi8tdnYgdGhhdCB3ZXJlIGxvc3QgZHVyaW5nCisgIHRoZSBpbXBvcnRsaWIgdHJhbnNpdGlvbi4KKworLSBJc3N1ZSAjMTc2MTA6IERvbid0IHJlbHkgb24gbm9uLXN0YW5kYXJkIGJlaGF2aW9yIG9mIHRoZSBDIHFzb3J0KCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE3MzIzOiBUaGUgIltYIHJlZnMsIFkgYmxvY2tzXSIgcHJpbnRlZCBieSBkZWJ1ZyBidWlsZHMgaGFzIGJlZW4KKyAgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEl0IGNhbiBiZSByZS1lbmFibGVkIHdpdGggdGhlIGAtWCBzaG93cmVmY291bnRgIG9wdGlvbi4KKworLSBJc3N1ZSAjMTczMjg6IEZpeCBwb3NzaWJsZSByZWZsZWFrIGluIGRpY3Quc2V0ZGVmYXVsdC4KKworLSBJc3N1ZSAjMTcyNzU6IENvcnJlY3RlZCBjbGFzcyBuYW1lIGluIGluaXQgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIEMgdmVyc2lvbiBvZgorICBCdWZmZXJlZFdyaXRlciBhbmQgQnVmZmVyZWRSYW5kb20uCisKKy0gSXNzdWUgIzc5NjM6IEZpeGVkIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSB0aGF0IGlzc3VlZCB3aGVuIG9iamVjdCBpcworICBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzg3NDU6IFNtYWxsIHNwZWVkIHVwIHppcGltcG9ydCBvbiBXaW5kb3dzLiBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICM1MzA4OiBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gbWFyc2hhbGxpbmcgdG9vIGxhcmdlIG9iamVjdCAoYSBzZXF1ZW5jZQorICB3aXRoIHNpemUgPj0gMioqMzEpLCBpbnN0ZWFkIG9mIHByb2R1Y2luZyBpbGxlZ2FsIG1hcnNoYWwgZGF0YS4KKworLSBJc3N1ZSAjMTI5ODM6IEJ5dGVzIGxpdGVyYWxzIHdpdGggaW52YWxpZCBceCBlc2NhcGUgbm93IHJhaXNlIGEgU3ludGF4RXJyb3IKKyAgYW5kIGEgZnVsbCB0cmFjZWJhY2sgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLgorCistIElzc3VlICMxNjk2NzogSW4gZnVuY3Rpb24gZGVmaW5pdGlvbiwgZXZhbHVhdGUgcG9zaXRpb25hbCBkZWZhdWx0cyBiZWZvcmUKKyAga2V5d29yZC1vbmx5IGRlZmF1bHRzLgorCistIElzc3VlICMxNzE3MzogUmVtb3ZlIHVzZXMgb2YgbG9jYWxlLWRlcGVuZGVudCBDIGZ1bmN0aW9ucyAoaXNhbHBoYSgpIGV0Yy4pCisgIGluIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYW4gVW5pY29kZSBzdHJpbmcgaXMgcmVzaXplZCwgdGhlIGludGVybmFsIHdpZGUgY2hhcmFjdGVyCisgIHN0cmluZyAod3N0cikgZm9ybWF0IGlzIG5vdyBjbGVhcmVkLgorCistIElzc3VlICMxNzA0MzogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZGVjb2RlciBubyBsb25nZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YKKyAgaW5wdXQgYnVmZmVyLgorCistIElzc3VlICMxNzA5ODogQWxsIG1vZHVsZXMgbm93IGhhdmUgX19sb2FkZXJfXyBzZXQgZXZlbiBpZiB0aGV5IHByZS1leGlzdCB0aGUKKyAgYm9vdHN0cmFwcGluZyBvZiBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzE2OTc5OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVncyBpbiB0aGUgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCisKKy0gSXNzdWUgIzE2NzcyOiBUaGUgYmFzZSBhcmd1bWVudCB0byB0aGUgaW50IGNvbnN0cnVjdG9yIG5vIGxvbmdlciBhY2NlcHRzCisgIGZsb2F0cywgb3Igb3RoZXIgbm9uLWludGVnZXIgb2JqZWN0cyB3aXRoIGFuIF9faW50X18gbWV0aG9kLiAgT2JqZWN0cworICB3aXRoIGFuIF9faW5kZXhfXyBtZXRob2QgYXJlIG5vdyBhY2NlcHRlZC4KKworLSBJc3N1ZSAjMTAxNTY6IEluIHRoZSBpbnRlcnByZXRlcidzIGluaXRpYWxpemF0aW9uIHBoYXNlLCB1bmljb2RlIGdsb2JhbHMKKyAgYXJlIG5vdyBpbml0aWFsaXplZCBkeW5hbWljYWxseSBhcyBuZWVkZWQuCisKKy0gSXNzdWUgIzE2OTgwOiBGaXggcHJvY2Vzc2luZyBvZiBlc2NhcGVkIG5vbi1hc2NpaSBieXRlcyBpbiB0aGUKKyAgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCisKKy0gSXNzdWUgIzE2OTc1OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVnIGluIHRoZSBlc2NhcGUtZGVjb2RlIGJ5dGVzIGRlY29kZXIuCisKKy0gSXNzdWUgIzE0ODUwOiBOb3cgYSBjaGFybWFwIGRlY29kZXIgdHJlYXRzIFUrRkZGRSBhcyAidW5kZWZpbmVkIG1hcHBpbmciCisgIGluIGFueSBtYXBwaW5nLCBub3Qgb25seSBpbiBhIHN0cmluZy4KKworLSBJc3N1ZSAjMTY2MTM6IEFkZCAqbSogYXJndW1lbnQgdG8gYGBjb2xsZWN0aW9ucy5DaGFpbm1hcC5uZXdfY2hpbGRgYCB0bworICBhbGxvdyB0aGUgbmV3IGNoaWxkIG1hcCB0byBiZSBzcGVjaWZpZWQgZXhwbGljaXRseS4KKworLSBJc3N1ZSAjMTY3MzA6IGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBub3cgbm8gbG9uZ2VycyByYWlzZXMgYW4KKyAgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIHBvcHVsYXRlIGl0cyBjYWNoZSBhbmQgaXQgZmluZHMgb3V0IHRoZSBkaXJlY3RvcnkgaXMKKyAgdW5yZWFkYWJsZSBvciBoYXMgdHVybmVkIGludG8gYSBmaWxlLiBSZXBvcnRlZCBhbmQgZGlhZ25vc2VkIGJ5CisgIERhdmlkIFByaXRjaGFyZC4KKworLSBJc3N1ZSAjMTY5MDY6IEZpeCBhIGxvZ2ljIGVycm9yIHRoYXQgcHJldmVudGVkIG1vc3Qgc3RhdGljIHN0cmluZ3MgZnJvbSBiZWluZworICBjbGVhcmVkLgorCistIElzc3VlICMxMTQ2MTogRml4IHRoZSBpbmNyZW1lbnRhbCBVVEYtMTYgZGVjb2Rlci4gT3JpZ2luYWwgcGF0Y2ggYnkKKyAgQW1hdXJ5IEZvcmdlb3QgZCdBcmMuCisKKy0gSXNzdWUgIzE2ODU2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgZnJvbSBjYWxsaW5nIHJlcHIoKSBvbiBhIGRpY3Qgd2l0aAorICBhIGtleSB3aG9zZSByZXByIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTYzNjc6IEZpeCBGaWxlSU8ucmVhZGFsbCgpIG9uIFdpbmRvd3MgZm9yIGZpbGVzIGxhcmdlciB0aGFuIDIgR0IuCisKKy0gSXNzdWUgIzE2NzYxOiBDYWxsaW5nIGludCgpIHdpdGggYmFzZSBhcmd1bWVudCBvbmx5IG5vdyByYWlzZXMgVHlwZUVycm9yLgorCistIElzc3VlICMxNjc1OTogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUmVnMlB5CisgIHdoZW4gcmV0cmlldmluZyBhIFJFR19EV09SRCB2YWx1ZS4gVGhpcyBjb3JyZWN0cyBmdW5jdGlvbnMgbGlrZQorICB3aW5yZWcuUXVlcnlWYWx1ZUV4IHRoYXQgbWF5IGhhdmUgYmVlbiByZXR1cm5pbmcgdHJ1bmNhdGVkIHZhbHVlcy4KKworLSBJc3N1ZSAjMTQ0MjA6IFN1cHBvcnQgdGhlIGZ1bGwgRFdPUkQgKHVuc2lnbmVkIGxvbmcpIHJhbmdlIGluIFB5MlJlZworICB3aGVuIHBhc3NlZCBhIFJFR19EV09SRCB2YWx1ZS4gRml4ZXMgT3ZlcmZsb3dFcnJvciBpbiB3aW5yZWcuU2V0VmFsdWVFeC4KKworLSBJc3N1ZSAjMTE5Mzk6IFNldCB0aGUgc3RfZGV2IGF0dHJpYnV0ZSBvZiBzdGF0X3Jlc3VsdCB0byBhbGxvdyBXaW5kb3dzIHRvCisgIHRha2UgYWR2YW50YWdlIG9mIHRoZSBvcy5wYXRoLnNhbWVmaWxlL3NhbWVvcGVuZmlsZS9zYW1lc3RhdCBpbXBsZW1lbnRhdGlvbnMKKyAgdXNlZCBieSBvdGhlciBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE2NzcyOiBUaGUgaW50KCkgY29uc3RydWN0b3IncyBzZWNvbmQgYXJndW1lbnQgKGJhc2UpIG5vIGxvbmdlcgorICBhY2NlcHRzIG5vbiBpbnRlZ2VyIHZhbHVlcy4gIENvbnNpc3RlbnQgd2l0aCB0aGUgYmVoYXZpb3IgaW4gUHl0aG9uIDIuCisKKy0gSXNzdWUgIzE0NDcwOiBSZW1vdmUgdzl4cG9wZW4gc3VwcG9ydCBwZXIgUEVQIDExLgorCistIElzc3VlICM5ODU2OiBSZXBsYWNlIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2l0aCByYWlzaW5nIFR5cGVFcnJvcgorICBpbiBvYmplY3QuX19mb3JtYXRfXy4gUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgorCistIElzc3VlICMxNjU5NzogSW4gYnVmZmVyZWQgYW5kIHRleHQgSU8sIGNhbGwgY2xvc2UoKSBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0KKyAgaWYgaW52b2tpbmcgZmx1c2goKSBmYWlscy4KKworLSBJc3N1ZSAjMTY3MjI6IEluIHRoZSBieXRlcygpIGNvbnN0cnVjdG9yLCB0cnkgdG8gY2FsbCBfX2J5dGVzX18gb24gdGhlCisgIGFyZ3VtZW50IGJlZm9yZSBfX2luZGV4X18uCisKKy0gSXNzdWUgIzE2NDIxOiBsb2FkaW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgc2hhcmVkIG9iamVjdCBpcyBub3cKKyAgaGFuZGxlZCBjb3JyZWN0bHkgKHByZXZpb3VzbHksIHRoZSBmaXJzdCBtb2R1bGUgbG9hZGVkIGZyb20gdGhhdCBmaWxlCisgIHdhcyBzaWxlbnRseSByZXR1cm5lZCkuIFBhdGNoIGJ5IFbDoWNsYXYgxaBtaWxhdWVyLgorCistIElzc3VlICMxNjYwMjogV2hlbiBhIHdlYWtyZWYncyB0YXJnZXQgd2FzIHBhcnQgb2YgYSBsb25nIGRlYWxsb2NhdGlvbgorICBjaGFpbiwgdGhlIG9iamVjdCBjb3VsZCByZW1haW4gcmVhY2hhYmxlIHRocm91Z2ggaXRzIHdlYWtyZWYgZXZlbiB0aG91Z2gKKyAgaXRzIHJlZmNvdW50IGhhZCBkcm9wcGVkIHRvIHplcm8uCisKKy0gSXNzdWUgIzE2NDk1OiBSZW1vdmUgZXh0cmFuZW91cyBOVUxMIGVuY29kaW5nIGNoZWNrIGZyb20gYnl0ZXNfZGVjb2RlKCkuCisKKy0gSXNzdWUgIzE2NjE5OiBDcmVhdGUgTmFtZUNvbnN0YW50IEFTVCBjbGFzcyB0byByZXByZXNlbnQgTm9uZSwgVHJ1ZSwgYW5kIEZhbHNlCisgIGxpdGVyYWxzLiBBcyBhIHJlc3VsdCwgdGhlc2UgY29uc3RhbnRzIGFyZSBuZXZlciBsb2FkZWQgYXQgcnVudGltZSBmcm9tCisgIGJ1aWx0aW5zLgorCistIElzc3VlICMxNjQ1NTogT24gRnJlZUJTRCBhbmQgU29sYXJpcywgaWYgdGhlIGxvY2FsZSBpcyBDLCB0aGUKKyAgQVNDSUkvc3Vycm9nYXRlZXNjYXBlIGNvZGVjIGlzIG5vdyB1c2VkIChpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcpIHRvCisgIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBjaGFuZ2UgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIHdpdGgKKyAgb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSwgYmVjYXVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcyBhbm5vdW5jZSBhbgorICBBU0NJSSBsb2NhbGUgZW5jb2RpbmcsIGJ1dCBhY3R1YWxseSB1c2UgdGhlIElTTy04ODU5LTEgZW5jb2RpbmcgaW4gcHJhY3RpY2UuCisKKy0gSXNzdWUgIzE2NTYyOiBPcHRpbWl6ZSBkaWN0IGVxdWFsaXR5IHRlc3RpbmcuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjU4ODogU2lsZW5jZSB1bnVzZWQtYnV0LXNldCB3YXJuaW5ncyBpbiBQeXRob24vdGhyZWFkX3B0aHJlYWQKKworLSBJc3N1ZSAjMTY1OTI6IHN0cmluZ2xpYl9ieXRlc19qb2luIGRvZXNuJ3QgcmFpc2UgTWVtb3J5RXJyb3Igb24gYWxsb2NhdGlvbgorICBmYWlsdXJlLgorCistIElzc3VlICMxNjU0NjogRml4OiBhc3QuWWllbGRGcm9tIGFyZ3VtZW50IGlzIG5vdyBtYW5kYXRvcnkuCisKKy0gSXNzdWUgIzE2NTE0OiBGaXggcmVncmVzc2lvbiBjYXVzaW5nIGEgdHJhY2ViYWNrIHdoZW4gc3lzLnBhdGhbMF0gaXMgTm9uZQorICAoYWN0dWFsbHksIGFueSBub24tc3RyaW5nIG9yIG5vbi1ieXRlcyB0eXBlKS4KKworLSBJc3N1ZSAjMTYzMDY6IEZpeCBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcyB3aGVuIHVua25vd24gY29tbWFuZCBsaW5lCisgIHBhcmFtZXRlcnMgd2hlcmUgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlci4gIFBhdGNoIGJ5IEhpZXUgTmd1eWVuLgorCistIElzc3VlICMxNjIxNTogRml4IHBvdGVudGlhbCBkb3VibGUgbWVtb3J5IGZyZWUgaW4gc3RyLnJlcGxhY2UoKS4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjkwOiBBIGZsb2F0IHJldHVybiB2YWx1ZSBmcm9tIHRoZSBfX2NvbXBsZXhfXyBzcGVjaWFsIG1ldGhvZCBpcyBubworICBsb25nZXIgYWNjZXB0ZWQgaW4gdGhlIGNvbXBsZXgoKSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTY0MTY6IE9uIE1hYyBPUyBYLCBvcGVyYXRpbmcgc3lzdGVtIGRhdGEgYXJlIG5vdyBhbHdheXMKKyAgZW5jb2RlZC9kZWNvZGVkIHRvL2Zyb20gVVRGLTgvc3Vycm9nYXRlZXNjYXBlLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcKKyAgKHdoaWNoIG1heSBiZSBBU0NJSSBpZiBubyBsb2NhbGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgdG8gYXZvaWQKKyAgaW5jb25zaXN0ZW5jaWVzIHdpdGggb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBmdW5jdGlvbnMgd2hpY2ggYXJlCisgIGFscmVhZHkgdXNpbmcgVVRGLTgvc3Vycm9nYXRlZXNjYXBlLgorCistIElzc3VlICMxNjQ1MzogRml4IGVxdWFsaXR5IHRlc3Rpbmcgb2YgZGVhZCB3ZWFrcmVmIG9iamVjdHMuCisKKy0gSXNzdWUgIzk1MzU6IEZpeCBwZW5kaW5nIHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnV0IG5vdCB5ZXQKKyAgaGFuZGxlZCBieSBQeXRob24gdG8gbm90IHBlcnNpc3QgYWZ0ZXIgb3MuZm9yaygpIGluIHRoZSBjaGlsZCBwcm9jZXNzLgorCistIElzc3VlICMxNDc5NDogRml4IHNsaWNlLmluZGljZXMgdG8gcmV0dXJuIGNvcnJlY3QgcmVzdWx0cyBmb3IgaHVnZSB2YWx1ZXMsCisgIHJhdGhlciB0aGFuIHJhaXNpbmcgT3ZlcmZsb3dFcnJvci4KKworLSBJc3N1ZSAjMTUwMDE6IGZpeCBzZWdmYXVsdCBvbiAiZGVsIHN5cy5tb2R1bGVzWydfX21haW5fXyddIi4gUGF0Y2ggYnkgVmljdG9yCisgIFN0aW5uZXIuCisKKy0gSXNzdWUgIzgyNzE6IHRoZSB1dGYtOCBkZWNvZGVyIG5vdyBvdXRwdXRzIHRoZSBjb3JyZWN0IG51bWJlciBvZiBVK0ZGRkQKKyAgY2hhcmFjdGVycyB3aGVuIHVzZWQgd2l0aCB0aGUgJ3JlcGxhY2UnIGVycm9yIGhhbmRsZXIgb24gaW52YWxpZCB1dGYtOAorICBzZXF1ZW5jZXMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLCB0ZXN0cyBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzU3NjU6IEFwcGx5IGEgaGFyZCByZWN1cnNpb24gbGltaXQgaW4gdGhlIGNvbXBpbGVyIGluc3RlYWQgb2YKKyAgYmxvd2luZyB0aGUgc3RhY2sgYW5kIHNlZ2ZhdWx0aW5nLiBJbml0aWFsIHBhdGNoIGJ5IEFuZHJlYSBHcmlmZmluaS4KKworLSBJc3N1ZSAjMTY0MDI6IFdoZW4gc2xpY2luZyBhIHJhbmdlLCBmaXggc2hhZG93aW5nIG9mIGV4Y2VwdGlvbnMgZnJvbQorICBfX2luZGV4X18uCisKKy0gSXNzdWUgIzE2MzM2OiBmaXggaW5wdXQgY2hlY2tpbmcgaW4gdGhlIHN1cnJvZ2F0ZXBhc3MgZXJyb3IgaGFuZGxlci4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjODQwMTogYXNzaWduaW5nIGFuIGludCB0byBhIGJ5dGVhcnJheSBzbGljZSAoZS5nLiBiWzM6NF0gPSA1KSBub3cKKyAgcmFpc2VzIGFuIGVycm9yLgorCistIElzc3VlICM3MzE3OiBEaXNwbGF5IGZ1bGwgdHJhY2ViYWNrcyB3aGVuIGFuIGVycm9yIG9jY3VycyBhc3luY2hyb25vdXNseS4KKyAgUGF0Y2ggYnkgQWxvbiBIb3JldiB3aXRoIHVwZGF0ZSBieSBBbGV4ZXkgS2FjaGF5ZXYuCisKKy0gSXNzdWUgIzE2MzA5OiBNYWtlIFBZVEhPTlBBVEg9IiIgYmVoYXZpb3IgdGhlIHNhbWUgYXMgaWYgUFlUSE9OUEFUSAorICBub3Qgc2V0IGF0IGFsbC4KKworLSBJc3N1ZSAjMTAxODk6IEltcHJvdmUgdGhlIGVycm9yIHJlcG9ydGluZyBvZiBTeW50YXhFcnJvcnMgcmVsYXRlZCB0byBnbG9iYWwKKyAgYW5kIG5vbmxvY2FsIHN0YXRlbWVudHMuCisKKy0gRml4IHNlZ2ZhdWx0cyBvbiBzZXR0aW5nIF9fcXVhbG5hbWVfXyBvbiBidWlsdGluIHR5cGVzIGFuZCBhdHRlbXB0aW5nIHRvCisgIGRlbGV0ZSBpdCBvbiBhbnkgdHlwZS4KKworLSBJc3N1ZSAjMTQ2MjU6IFJld3JpdGUgdGhlIFVURi0zMiBkZWNvZGVyLiBJdCBpcyBub3cgM3ggdG8gNHggZmFzdGVyLiBQYXRjaAorICB3cml0dGVuIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MzQ1OiBGaXggYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBgZnJvbWtleXNgYCBvbiBhIGRpY3Qgc3ViY2xhc3MKKyAgcmVjZWl2ZWQgYSBub25lbXB0eSBkaWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorCistIElzc3VlICMxNjI3MTogRml4IHN0cmFuZ2UgYnVncyB0aGF0IHJlc3VsdGVkIGZyb20gX19xdWFsbmFtZV9fIGFwcGVhcmluZyBpbiBhCisgIGNsYXNzJ3MgX19kaWN0X18gYW5kIG9uIHR5cGUuCisKKy0gSXNzdWUgIzEyODA1OiBNYWtlIGJ5dGVzLmpvaW4gYW5kIGJ5dGVhcnJheS5qb2luIGZhc3RlciB3aGVuIHRoZSBzZXBhcmF0b3IKKyAgaXMgZW1wdHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICM2MDc0OiBFbnN1cmUgY2FjaGVkIGJ5dGVjb2RlIGZpbGVzIGNhbiBhbHdheXMgYmUgdXBkYXRlZCBieSB0aGUKKyAgdXNlciB0aGF0IGNyZWF0ZWQgdGhlbSwgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZSBpcyByZWFkLW9ubHkuCisKKy0gSXNzdWUgIzE1OTU4OiBieXRlcy5qb2luIGFuZCBieXRlYXJyYXkuam9pbiBub3cgYWNjZXB0IGFyYml0cmFyeSBidWZmZXIKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ3ODM6IEltcHJvdmUgaW50KCkgZG9jc3RyaW5nIGFuZCBzd2l0Y2ggZG9jc3RyaW5ncyBmb3Igc3RyKCksCisgIHJhbmdlKCksIGFuZCBzbGljZSgpIHRvIHVzZSBtdWx0aS1saW5lIHNpZ25hdHVyZXMuCisKKy0gSXNzdWUgIzE2MTYwOiBTdWJjbGFzcyBzdXBwb3J0IG5vdyB3b3JrcyBmb3IgdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCistIElzc3VlICMxNjE0ODogSW1wbGVtZW50IFBFUCA0MjQsIGFkZGluZyBvcGVyYXRvci5sZW5ndGhfaGludCBhbmQKKyAgUHlPYmplY3RfTGVuZ3RoSGludC4KKworLSBVcGdyYWRlIFVuaWNvZGUgZGF0YSAoVUNEKSB0byB2ZXJzaW9uIDYuMi4KKworLSBJc3N1ZSAjMTUzNzk6IEZpeCBwYXNzaW5nIG9mIG5vbi1CTVAgY2hhcmFjdGVycyBhcyBpbnRlZ2VycyBmb3IgdGhlIGNoYXJtYXAKKyAgZGVjb2RlciAoYWxyZWFkeSB3b3JraW5nIGFzIHVuaWNvZGUgc3RyaW5ncykuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE0NDogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBoYW5kbGluZyBwb2ludGVycyBhcyBpbnRlZ2VyCisgIHZhbHVlcywgYnkgdXNpbmcgYFB5X3VpbnRwdHJfdGAgaW5zdGVhZCBvZiBgc2l6ZV90YC4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1OTY1OiBFeHBsaWNpdGx5IGNhc3QgYEFUX0ZEQ1dEYCBhcyAoaW50KS4gIFJlcXVpcmVkIG9uIFNvbGFyaXMgMTAKKyAgKHdoaWNoIGRlZmluZXMgYEFUX0ZEQ1dEYCBhcyBgYDB4ZmZkMTk1NTNgYCksIGhhcm1sZXNzIG9uIG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTU4Mzk6IENvbnZlcnQgU3lzdGVtRXJyb3JzIGluIGBzdXBlcigpYCB0byBSdW50aW1lRXJyb3JzLgorCistIElzc3VlICMxNTQ0ODogQnVmZmVyZWQgSU8gbm93IGZyZWVzIHRoZSBidWZmZXIgd2hlbiBjbG9zZWQsIGluc3RlYWQKKyAgb2Ygd2hlbiBkZWFsbG9jYXRpbmcuCisKKy0gSXNzdWUgIzE1ODQ2OiBGaXggU3lzdGVtRXJyb3Igd2hpY2ggaGFwcGVuZWQgd2hlbiB1c2luZyBgYXN0LnBhcnNlKClgIGluIGFuCisgIGV4Y2VwdGlvbiBoYW5kbGVyIG9uIGNvZGUgd2l0aCBzeW50YXggZXJyb3JzLgorCistIElzc3VlICMxNTg5NzogemlwaW1wb3J0LmMgZG9lc24ndCBjaGVjayByZXR1cm4gdmFsdWUgb2YgZnNlZWsoKS4KKyAgUGF0Y2ggYnkgRmVsaXBlIENydXouCisKKy0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQorICBzdWJzY3JpcHRhYmxlLgorCistIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgcHJvcGFnYXRlIEltcG9ydEVycm9yIHdoZW4gcmFpc2VkIGFzIGEKKyAgc2lkZS1lZmZlY3Qgb2YgYSBtb2R1bGUgdHJpZ2dlcmVkIGZyb20gdXNpbmcgZnJvbWxpc3QuCisKKy0gSXNzdWUgIzE1MDIyOiBBZGQgcGlja2xlIGFuZCBjb21wYXJpc29uIHN1cHBvcnQgdG8gdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzQzMzE6IEFkZGVkIGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kIChJbml0aWFsIHBhdGNoIGJ5IEFsb24gSG9yZXYpCisKKy0gSXNzdWUgIzEzNDYxOiBGaXggYSBjcmFzaCBpbiB0aGUgVGV4dElPV3JhcHBlci50ZWxsIG1ldGhvZCBvbiA2NC1iaXQKKyAgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaS4KKworLSBJc3N1ZSAjMTg2ODE6IEZpeCBhIE5hbWVFcnJvciBpbiBpbXBvcnRsaWIucmVsb2FkKCkgKG5vdGljZWQgYnkgV2VpemhhbyBMaSkuCisKKy0gSXNzdWUgIzE0MzIzOiBFeHBhbmRlZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUKKyAgUkdCIC0tIFlJUSBjb252ZXJzaW9ucyBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIEZDQyBOVFNDIHZlcnNpb25zLgorCiAtIElzc3VlICMxNzk5ODogRml4IGFuIGludGVybmFsIGVycm9yIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUuCiAKIC0gSXNzdWUgIzE3NTU3OiBGaXggb3MuZ2V0Z3JvdXBzKCkgdG8gd29yayB3aXRoIHRoZSBtb2RpZmllZCBiZWhhdmlvciBvZgogICBnZXRncm91cHMoMikgb24gT1MgWCAxMC44LiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0ZXVzeiBMZW5pay4KIAorLSBJc3N1ZSAjMTg2MDg6IEF2b2lkIGtlZXBpbmcgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbGUgbW9kdWxlCisgIGluc2lkZSB0aGUgX2lvIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg2MTk6IEZpeCBhdGV4aXQgbGVha2luZyBjYWxsYmFja3MgcmVnaXN0ZXJlZCBmcm9tIHN1Yi1pbnRlcnByZXRlcnMsCisgIGFuZCBtYWtlIGl0IEdDLWF3YXJlLgorCistIElzc3VlICMxNTY5OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgdXNlcyBQRVAgMzEyMS1zdHlsZSBtb2R1bGUKKyAgaW5pdGlhbGl6YXRpb24sIHNvIGFzIHRvIHJlY2xhaW0gYWxsb2NhdGVkIHJlc291cmNlcyAoUHl0aG9uIGNhbGxiYWNrcykKKyAgYXQgc2h1dGRvd24uICBPcmlnaW5hbCBwYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE3NjE2OiB3YXZlLm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCisKIC0gSXNzdWUgIzE4NTk5OiBGaXggbmFtZSBhdHRyaWJ1dGUgb2YgX3NoYTEuc2hhMSgpIG9iamVjdC4gSXQgbm93IHJldHVybnMKICAgJ1NIQTEnIGluc3RlYWQgb2YgJ1NIQScuCiAKKy0gSXNzdWUgIzEzMjY2OiBBZGRlZCBpbnNwZWN0LnVud3JhcCB0byBlYXNpbHkgdW5yYXZlbCBfX3dyYXBwZWRfXyBjaGFpbnMKKyAgKGluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFVyYmFuIGFuZCBBYXJvbiBJbGVzKQorCiAtIElzc3VlICMxODU2MTogU2tpcCBuYW1lIGluIGN0eXBlcycgX2J1aWxkX2NhbGxhcmdzKCkgaWYgbmFtZSBpcyBOVUxMLgogCiAtIElzc3VlICMxODU1OTogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBlcnJvciBpbiBfcGlja2xlIG1vZHVsZQogCi0tIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgY2FsbCBpbgotICBjdHlwZXMnIFVfc2V0KCkuCistIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB0eXBlIG9mIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgaW4gY3R5cGUncworICBVX3NldCgpLgorCistIElzc3VlICMxNzgxODogYWlmYy5nZXRwYXJhbXMgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlLgogCiAtIElzc3VlICMxODU0OTogRWxpbWluYXRlIGRlYWQgY29kZSBpbiBzb2NrZXRfbnRvaGwoKQogCistIElzc3VlICMxODUzMDogUmVtb3ZlIGFkZGl0aW9uYWwgc3RhdCBjYWxsIGZyb20gcG9zaXhwYXRoLmlzbW91bnQuCisgIFBhdGNoIGJ5IEFsZXggR2F5bm9yLgorCiAtIElzc3VlICMxODUxNDogRml4IHVucmVhY2hhYmxlIFB5X0RFQ1JFRigpIGNhbGwgaW4gUHlDRGF0YV9Gcm9tQmFzZU9iaigpCiAKKy0gSXNzdWUgIzkxNzc6IENhbGxpbmcgcmVhZCgpIG9yIHdyaXRlKCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yLCBub3QKKyAgQXR0cmlidXRlRXJyb3IsIG9uIGEgY2xvc2VkIFNTTCBzb2NrZXQuICBQYXRjaCBieSBTZW5rbyBSYXNpYy4KKwogLSBJc3N1ZSAjMTg1MTM6IEZpeCBiZWhhdmlvdXIgb2YgY21hdGgucmVjdCB3LnIudC4gc2lnbmVkIHplcm9zIG9uIE9TIFggMTAuOCArCiAgIGdjYy4KIAorLSBJc3N1ZSAjMTg0Nzk6IENoYW5nZWQgdmVudiBBY3RpdmF0ZS5wczEgdG8gbWFrZSBkZWFjdGl2YXRlIGEgZnVuY3Rpb24sIGFuZAorICByZW1vdmVkIERlYWN0aXZhdGUucHMxLgorCiAtIElzc3VlICMxODQ4MDogQWRkIG1pc3NpbmcgY2FsbCB0byBQeVR5cGVfUmVhZHkgdG8gdGhlIF9lbGVtZW50dHJlZSBleHRlbnNpb24uCiAKIC0gSXNzdWUgIzE3Nzc4OiBGaXggdGVzdCBkaXNjb3ZlcnkgZm9yIHRlc3RfbXVsdGlwcm9jZXNzaW5nLiAoUGF0Y2ggYnkKICAgWmFjaGFyeSBXYXJlLikKIAorLSBJc3N1ZSAjMTgzOTM6IFRoZSBwcml2YXRlIG1vZHVsZSBfZ2VzdGFsdCBhbmQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAgcGxhdGZvcm0uX21hY192ZXJfZ2VzdGFsdCwgcGxhdGZvcm0uX21hY192ZXJfbG9va3VwIGFuZAorICBwbGF0Zm9ybS5fYmNkMnN0ciBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYworICBpbnRlcmZhY2Ugb2YgdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc0ODI6IGZ1bmN0b29scy51cGRhdGVfd3JhcHBlciAoYW5kIGZ1bmN0b29scy53cmFwcykgbm93IHNldCB0aGUKKyAgX193cmFwcGVkX18gYXR0cmlidXRlIGNvcnJlY3RseSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGhhcyBhCisgIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSBzZXQuCisKIC0gSXNzdWUgIzE4NDMxOiBUaGUgbmV3IGVtYWlsIGhlYWRlciBwYXJzZXIgbm93IGRlY29kZXMgUkZDMjA0NyBlbmNvZGVkIHdvcmRzCiAgIGluIHN0cnVjdHVyZWQgaGVhZGVycy4KIApAQCAtMTAyMCwxMSArMzM5MSwxOSBAQAogLSBJc3N1ZSAjMTgxMDE6IFRjbC5zcGxpdCgpIG5vdyBwcm9jZXNzIHN0cmluZ3MgbmVzdGVkIGluIGEgdHVwbGUgYXMgaXQKICAgZG8gd2l0aCBieXRlIHN0cmluZ3MuCiAKKy0gSXNzdWUgIzE4MTE2OiBnZXRwYXNzIHdhcyBhbHdheXMgZ2V0dGluZyBhbiBlcnJvciB3aGVuIHRlc3RpbmcgL2Rldi90dHksCisgIGFuZCB0aHVzIHdhcyBhbHdheXMgZmFsbGluZyBiYWNrIHRvIHN0ZGluLCBhbmQgd291bGQgdGhlbiByYWlzZSBhbiBleGNlcHRpb24KKyAgaWYgc3RkaW4gY291bGQgbm90IGJlIHVzZWQgKHN1Y2ggYXMgL2Rldi9udWxsKS4gIEl0IGFsc28gbGVha2VkIGFuIG9wZW4gZmlsZS4KKyAgQWxsIG9mIHRoZXNlIGlzc3VlcyBhcmUgbm93IGZpeGVkLgorCiAtIElzc3VlICMxNzE5ODogRml4IGEgTmFtZUVycm9yIGluIHRoZSBkYm0gbW9kdWxlLiAgUGF0Y2ggYnkgVmFsZW50aW5hCiAgIE11a2hhbWVkemhhbm92YS4KIAogLSBJc3N1ZSAjMTgwMTM6IEZpeCBjZ2kuRmllbGRTdG9yYWdlIHRvIHBhcnNlIHRoZSBXM0Mgc2FtcGxlIGZvcm0uCiAKKy0gSXNzdWUgIzE4MDIwOiBpbXByb3ZlIGh0bWwuZXNjYXBlIHNwZWVkIGJ5IGFuIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgUGF0Y2ggYnkgTWF0dCBCcnlhbnQuCisKIC0gSXNzdWUgIzE4MzQ3OiBFbGVtZW50VHJlZSdzIGh0bWwgc2VyaWFsaXplciBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mCiAgIGNsb3NpbmcgdGFncy4KIApAQCAtMTAzOSw2ICszNDE4LDkgQEAKIC0gSXNzdWUgIzE4MzM5OiBOZWdhdGl2ZSBpbnRzIGtleXMgaW4gdW5waWNrbGVyLm1lbW8gZGljdCBubyBsb25nZXIgY2F1c2UgYQogICBzZWdmYXVsdCBpbnNpZGUgdGhlIF9waWNrbGUgQyBleHRlbnNpb24uCiAKKy0gSXNzdWUgIzE4MjQwOiBUaGUgSE1BQyBtb2R1bGUgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gYnl0ZXMgYW5kIGFjY2VwdHMKKyAgYW55IGJ5dGVzLWxpa2Ugb2JqZWN0LCBlLmcuIG1lbW9yeXZpZXcuIE9yaWdpbmFsIHBhdGNoIGJ5IEpvbmFzIEJvcmdzdHLDtm0uCisKIC0gSXNzdWUgIzE4MjI0OiBSZW1vdmVkIHB5ZG9jIHNjcmlwdCBmcm9tIGNyZWF0ZWQgdmVudiwgYXMgaXQgY2F1c2VzIHByb2JsZW1zCiAgIG9uIFdpbmRvd3MgYW5kIGFkZHMgbm8gdmFsdWUgb3ZlciBhbmQgYWJvdmUgcHl0aG9uIC1tIHB5ZG9jIC4uLgogCkBAIC0xMDQ5LDMxICszNDMxLDkyIEBACiAtIElzc3VlICMxNDM2MDogZW5jb2RlX3F1b3ByaSBjYW4gbm93IGJlIHN1Y2Nlc3NmdWxseSB1c2VkIGFzIGFuIGVuY29kZXIKICAgd2hlbiBjb25zdHJ1Y3RpbmcgYSBNSU1FQXBwbGljYXRpb24gb2JqZWN0LgogCistIElzc3VlICMxMTM5MDogQWRkIC1vIGFuZCAtZiBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB0aGUgZG9jdGVzdCBDTEkgdG8KKyAgc3BlY2lmeSBkb2N0ZXN0IG9wdGlvbnMgKGFuZCBjb252ZXJ0IGl0IHRvIHVzaW5nIGFyZ3BhcnNlKS4KKwogLSBJc3N1ZSAjMTgxMzU6IHNzbC5TU0xTb2NrZXQud3JpdGUoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaWYgdGhlIGlucHV0CiAgIHN0cmluZyBpbiBsb25nZXIgdGhhbiAyIGdpZ2FieXRlcywgYW5kIHNzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpCiAgIHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIHBhc3N3b3JkIGlzIGxvbmdlciB0aGFuIDIgZ2lnYWJ5dGVzLiBUaGUgc3NsCiAgIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpYWwgd3JpdGUuCiAKKy0gSXNzdWUgIzExMDE2OiBBZGQgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdCBtb2R1bGUgYXMgX3N0YXQuCisKIC0gSXNzdWUgIzE4MjQ4OiBGaXggbGliZmZpIGJ1aWxkIG9uIEFJWC4KIAogLSBJc3N1ZSAjMTgyNTk6IERlY2xhcmUgc2V0aG9zdG5hbWUgaW4gc29ja2V0bW9kdWxlLmMgZm9yIEFJWAogCistIElzc3VlICMxODE0NzogQWRkIGRpYWdub3N0aWMgZnVuY3Rpb25zIHRvIHNzbC5TU0xDb250ZXh0KCkuIGdldF9jYV9saXN0KCkKKyAgbGlzdHMgYWxsIGxvYWRlZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIGNlcnRfc3RvcmVfc3RhdHMoKSByZXR1cm5zIGFtb3VudCBvZgorICBsb2FkZWQgWC41MDkgY2VydHMsIFguNTA5IENBIGNlcnRzIGFuZCBDUkxzLgorCiAtIElzc3VlICMxODE2NzogY2dpLkZpZWxkU3RvcmFnZSBubyBsb25nZXIgZmFpbHMgdG8gaGFuZGxlIG11bHRpcGFydC9mb3JtLWRhdGEKICAgd2hlbiBcclxuIGFwcGVhcnMgYXQgZW5kIG9mIDY1NTM1IGJ5dGVzIHdpdGhvdXQgb3RoZXIgbmV3bGluZXMuCiAKKy0gSXNzdWUgIzE4MDc2OiBJbnRyb2R1Y2UgaW1wb3J0bGliLnV0aWwuZGVjb2RlX3NvdXJjZSgpLgorLSBJc3N1ZSAjMTgzNTc6IGFkZCB0ZXN0cyBmb3IgZGljdHZpZXcgc2V0IGRpZmZlcmVuY2UuCisgIFBhdGNoIGJ5IEZyYXNlciBUd2VlZGFsZS4KKworLSBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5nZXRfc291cmNlKCkgbm8gbG9uZ2VyIGNoYW5nZXMgU3ludGF4RXJyb3Igb3IKKyAgVW5pY29kZURlY29kZUVycm9yIGludG8gSW1wb3J0RXJyb3IuCisKKy0gSXNzdWUgIzE4MDU4LCAxODA1NzogTWFrZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UgbG9hZGVyIG1lZXQgdGhlCisgIGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlciBBQkMsIGFsbG93aW5nIGZvciBuYW1lc3BhY2UgcGFja2FnZXMgdG8gd29yayB3aXRoCisgIHJ1bnB5LgorCistIElzc3VlICMxNzE3NzogVGhlIGltcCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4KKwogLSBzdWJwcm9jZXNzOiBQcmV2ZW50IGEgcG9zc2libGUgZG91YmxlIGNsb3NlIG9mIHBhcmVudCBwaXBlIGZkcyB3aGVuIHRoZQogICBzdWJwcm9jZXNzIGV4ZWMgcnVucyBpbnRvIGFuIGVycm9yLiAgUHJldmVudCBhIHJlZ3VsYXIgbXVsdGktY2xvc2Ugb2YgdGhlCiAgIC9kZXYvbnVsbCBmZCB3aGVuIGFueSBvZiBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgd2FzIHNldCB0byBERVZOVUxMLgogCistIElzc3VlICMxODE5NDogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kCisgIHNvdXJjZV9mcm9tX2NhY2hlKCkgd2hpbGUgZG9jdW1lbnRpbmcgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb25zIGluIGltcCBhcworICBkZXByZWNhdGVkLgorCistIElzc3VlICMxNzkwNzogRG9jdW1lbnQgaW1wLm5ld19tb2R1bGUoKSBhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZgorICB0eXBlcy5Nb2R1bGVUeXBlLgorCistIElzc3VlICMxODE5MjogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiBhbmQgZG9jdW1lbnQgYXMgZGVwcmVjYXRlZAorICBpbXAuZ2V0X21hZ2ljKCkuCisKKy0gSXNzdWUgIzE4MTQ5OiBBZGQgZmlsZWNtcC5jbGVhcl9jYWNoZSgpIHRvIG1hbnVhbGx5IGNsZWFyIHRoZSBmaWxlY21wIGNhY2hlLgorICBQYXRjaCBieSBNYXJrIExldml0dAorCistIElzc3VlICMxODE5MzogQWRkIGltcG9ydGxpYi5yZWxvYWQoKS4KKworLSBJc3N1ZSAjMTgxNTc6IFN0b3AgdXNpbmcgaW1wLmxvYWRfbW9kdWxlKCkgaW4gcHlkb2MuCisKIC0gSXNzdWUgIzE2MTAyOiBNYWtlIHV1aWQuX25ldGJpb3NfZ2V0bm9kZSgpIHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCiAKKy0gSXNzdWUgIzE3MTM0OiBBZGQgc3NsLmVudW1fY2VydF9zdG9yZSgpIGFzIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0IHN0b3JlLgorCistIElzc3VlICMxODE0MzogSW1wbGVtZW50IHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSBpbiBvcmRlciB0byBkZWJ1ZworICB0aGUgZGVmYXVsdCBsb2NhdGlvbnMgZm9yIGNhZmlsZSBhbmQgY2FwYXRoLgorCistIElzc3VlICMxNzMxNDogTW92ZSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBvdmVyIHRvIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTE5NTk6IFNNVFBTZXJ2ZXIgYW5kIFNNVFBDaGFubmVsIG5vdyB0YWtlIGFuIG9wdGlvbmFsIG1hcCwgdXNlIG9mCisgIHdoaWNoIGF2b2lkcyBhZmZlY3RpbmcgZ2xvYmFsIHN0YXRlLgorCiAtIElzc3VlICMxODEwOTogb3MudW5hbWUoKSBub3cgZGVjb2RlcyBmaWVsZHMgZnJvbSB0aGUgbG9jYWxlIGVuY29kaW5nLCBhbmQKICAgc29ja2V0LmdldGhvc3RuYW1lKCkgbm93IGRlY29kZXMgdGhlIGhvc3RuYW1lIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZywKICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcgaW4gc3RyaWN0IG1vZGUuCiAKKy0gSXNzdWUgIzE4MDg5OiBJbXBsZW1lbnQgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlLgorCistIElzc3VlICMxODA4ODogSW50cm9kdWNlIGltcG9ydGxpYi5hYmMuTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzIGZvciBzZXR0aW5nCisgIG1vZHVsZSBhdHRyaWJ1dGVzLiBMZWFkcyB0byB0aGUgcGVuZGluZyBkZXByZWNhdGlvbiBvZgorICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKwogLSBJc3N1ZSAjMTc0MDM6IHVybGxpYi5wYXJzZS5yb2JvdHBhcnNlciBub3JtYWxpemVzIHRoZSB1cmxzIGJlZm9yZSBhZGRpbmcgdG8KICAgcnVsZWxpbmUuIFRoaXMgaGVscHMgaW4gaGFuZGxpbmcgY2VydGFpbiB0eXBlcyBpbnZhbGlkIHVybHMgaW4gYSBjb25zZXJ2YXRpdmUKLSAgbWFubmVyLgorICBtYW5uZXIuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxODA3MDogSGF2ZSBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcigpIHNldCBhdHRyaWJ1dGVzCisgIHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBwcm9wZXJseSBzdXBwb3J0IHJlbG9hZGluZy4KKworLSBBZGRlZCBpbXBvcnRsaWIudXRpbC5tb2R1bGVfdG9fbG9hZCB0byByZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdG8gcHJvdmlkZSB0aGUKKyAgcHJvcGVyIG1vZHVsZSBvYmplY3QgdG8gbG9hZC4KIAogLSBJc3N1ZSAjMTgwMjU6IEZpeGVkIGEgc2VnZmF1bHQgaW4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGludG8oKSB3aGVuIHJhdwogICBzdHJlYW0ncyByZWFkKCkgcmV0dXJucyBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgpAQCAtMTA4MiwyMCArMzUyNSw0MiBAQAogICBiaW5hc2NpaS5FcnJvciBpZiB0aGVyZSBhcmUgbm9uLWIzMi1hbHBoYWJldCBjaGFyYWN0ZXJzIHByZXNlbnQgaW4gdGhlIGlucHV0CiAgIHN0cmluZywgaW5zdGVhZCBvZiBhIFR5cGVFcnJvci4KIAotLSBJc3N1ZSAjMTM3NzI6IFJlc3RvcmVkIGRpcmVjdG9yeSBkZXRlY3Rpb24gb2YgdGFyZ2V0cyBpbiBgYG9zLnN5bWxpbmtgYCBvbgotICBXaW5kb3dzLCB3aGljaCB3YXMgdGVtcG9yYXJpbHkgcmVtb3ZlZCBpbiBQeXRob24gMy4yLjMgZHVlIHRvIGFuIGluY29tcGxldGUKLSAgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBub3cgd29ya3MgZXZlbiBpZiB0aGUgc3ltbGluayBpcyBjcmVhdGVkCi0gIGluIGEgbG9jYXRpb24gb3RoZXIgdGhhbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCistIElzc3VlICMxODA3MjogSW1wbGVtZW50IGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfY29kZSgpIGFuZAorICBpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlci5nZXRfY29kZSgpLgogCi0tIElzc3VlICMxNjk4NjogRWxlbWVudFRyZWUgbm93IGNvcnJlY3RseSBwYXJzZXMgYSBzdHJpbmcgaW5wdXQgbm90IG9ubHkgd2hlbgotICBhbiBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgVVRGLTggb3IgVVMtQVNDSUkuCistIElzc3VlICM4MjQwOiBTZXQgdGhlIFNTTF9NT0RFX0FDQ0VQVF9NT1ZJTkdfV1JJVEVfQlVGRkVSIGZsYWcgb24gU1NMCisgIHNvY2tldHMuCisKKy0gSXNzdWUgIzE3MjY5OiBXb3JrYXJvdW5kIGZvciBzb2NrZXQuZ2V0YWRkcmluZm8gY3Jhc2ggb24gTWFjT1MgWAorICB3aXRoIHBvcnQgTm9uZSBvciAiMCIgYW5kIGZsYWdzIEFJX05VTUVSSUNTRVJWLgorCistIElzc3VlICMxNjk4NjogRWxlbWVudFRyZWUgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIHN0cmluZyBpbnB1dCB3aGVuIHRoZQorICBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgbm90IFVURi04IG9yIFVTLUFTQ0lJLgorCistIElzc3VlICMxNzk5Njogc29ja2V0IG1vZHVsZSBub3cgZXhwb3NlcyBBRl9MSU5LIGNvbnN0YW50IG9uIEJTRCBhbmQgT1NYLgorCistIElzc3VlICMxNzkwMDogQWxsb3dlZCBwaWNrbGluZyBvZiByZWN1cnNpdmUgT3JkZXJlZERpY3RzLiAgRGVjcmVhc2VkIHBpY2tsZWQKKyAgc2l6ZSBhbmQgcGlja2xpbmcgdGltZS4KKworLSBJc3N1ZSAjMTc5MTQ6IEFkZCBvcy5jcHVfY291bnQoKS4gUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaSwgYmFzZWQgb24gYW4KKyAgaW5pdGlhbCBwYXRjaCBieSBUcmVudCBOZWxzb24uCiAKIC0gSXNzdWUgIzE3ODEyOiBGaXhlZCBxdWFkcmF0aWMgY29tcGxleGl0eSBvZiBiYXNlNjQuYjMyZW5jb2RlKCkuCisgIE9wdGltaXplIGJhc2U2NC5iMzJlbmNvZGUoKSBhbmQgYmFzZTY0LmIzMmRlY29kZSgpIChzcGVlZCB1cCB0byAzeCkuCiAKIC0gSXNzdWUgIzE3OTgwOiBGaXggcG9zc2libGUgYWJ1c2Ugb2Ygc3NsLm1hdGNoX2hvc3RuYW1lKCkgZm9yIGRlbmlhbCBvZgogICBzZXJ2aWNlIHVzaW5nIGNlcnRpZmljYXRlcyB3aXRoIG1hbnkgd2lsZGNhcmRzIChDVkUtMjAxMy0yMDk5KS4KIAotLSBJc3N1ZSAjMTc5ODE6IENsb3NlZCBzb2NrZXQgb24gZXJyb3IgaW4gU3lzTG9nSGFuZGxlci4KKy0gSXNzdWUgIzE1NzU4OiBGaXggRmlsZUlPLnJlYWRhbGwoKSBzbyBpdCBubyBsb25nZXIgaGFzIE8obioqMikgY29tcGxleGl0eS4KKworLSBJc3N1ZSAjMTQ1OTY6IFRoZSBzdHJ1Y3QuU3RydWN0KCkgb2JqZWN0cyBub3cgdXNlIGEgbW9yZSBjb21wYWN0CisgIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNzk4MTogbG9nZ2luZydzIFN5c0xvZ0hhbmRsZXIgbm93IGNsb3NlcyB0aGUgc29ja2V0IHdoZW4gaXQgY2F0Y2hlcworICBzb2NrZXQgT1NFcnJvcnMuCisKKy0gSXNzdWUgIzE3OTY0OiBGaXggb3Muc3lzY29uZigpOiB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIEMgc3lzY29uZigpIGZ1bmN0aW9uCisgIGlzIGxvbmcsIG5vdCBpbnQuCiAKIC0gRml4IHR5cG9zIGluIHRoZSBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlLgogCkBAIC0xMTAzLDEwICszNTY4LDE2MyBAQAogCiAtIElzc3VlICMxNzk2ODogRml4IG1lbW9yeSBsZWFrIGluIG9zLmxpc3R4YXR0cigpLgogCi0tIElzc3VlICMxNzI2OTogV29ya2Fyb3VuZCBmb3Igc29ja2V0LmdldGFkZHJpbmZvIGNyYXNoIG9uIE1hY09TIFgKLSAgd2l0aCBwb3J0IE5vbmUgb3IgIjAiIGFuZCBmbGFncyBBSV9OVU1FUklDU0VSVi4KKy0gSXNzdWUgIzE3NjA2OiBGaXhlZCBzdXBwb3J0IG9mIGVuY29kZWQgYnl0ZSBzdHJpbmdzIGluIHRoZSBYTUxHZW5lcmF0b3IKKyAgY2hhcmFjdGVycygpIGFuZCBpZ25vcmFibGVXaGl0ZXNwYWNlKCkgbWV0aG9kcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFNlYmFzdGlhbgorICBPcnRpeiBWYXNxdWV6LgogCi0tIElzc3VlICMxODY5ODogRW5zdXJlIGltcC5yZWxvYWQoKSByZXR1cm5zIHRoZSBtb2R1bGUgb3V0IG9mIHN5cy5tb2R1bGVzLgorLSBJc3N1ZSAjMTc3MzI6IElnbm9yZSBkaXN0dXRpbHMuY2ZnIG9wdGlvbnMgcGVydGFpbmluZyB0byBpbnN0YWxsIHBhdGhzIGlmIGEKKyAgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBhY3RpdmUuCisKKy0gSXNzdWUgIzE3OTE1OiBGaXggaW50ZXJvcGVyYWJpbGl0eSBvZiB4bWwuc2F4IHdpdGggZmlsZSBvYmplY3RzIHJldHVybmVkIGJ5CisgIGNvZGVjcy5vcGVuKCkuCisKKy0gSXNzdWUgIzE2NjAxOiBSZXN0YXJ0aW5nIGl0ZXJhdGlvbiBvdmVyIHRhcmZpbGUgcmVhbGx5IHJlc3RhcnRzIHJhdGhlcgorICB0aGFuIGNvbnRpbnVpbmcgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4gIFBhdGNoIGJ5IE1pY2hhZWwgQmlydHdlbGwuCisKKy0gSXNzdWUgIzE3Mjg5OiBUaGUgcmVhZGxpbmUgbW9kdWxlIG5vdyBwbGF5cyBuaWNlciB3aXRoIGV4dGVybmFsIG1vZHVsZXMKKyAgb3IgYXBwbGljYXRpb25zIGNoYW5naW5nIHRoZSBybF9jb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzIGdsb2JhbAorICB2YXJpYWJsZS4gIEluaXRpYWwgcGF0Y2ggYnkgQnJhZGxleSBGcm9laGxlLgorCistIElzc3VlICMxMjE4MTogc2VsZWN0IG1vZHVsZTogRml4IHN0cnVjdCBrZXZlbnQgZGVmaW5pdGlvbiBvbiBPcGVuQlNEIDY0LWJpdAorICBwbGF0Zm9ybXMuIFBhdGNoIGJ5IEZlZGVyaWNvIFNjaHdpbmR0LgorCistIElzc3VlICMxMTgxNjogbXVsdGlwbGUgaW1wcm92ZW1lbnRzIHRvIHRoZSBkaXMgbW9kdWxlOiBnZXRfaW5zdHJ1Y3Rpb25zCisgIGdlbmVyYXRvciwgYWJpbGl0eSB0byByZWRpcmVjdCBvdXRwdXQgdG8gYSBmaWxlLCBCeXRlY29kZSBhbmQgSW5zdHJ1Y3Rpb24KKyAgYWJzdHJhY3Rpb25zLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4sIFJ5YW4gS2VsbHkgYW5kIFRob21hcyBLbHV5dmVyLgorCistIElzc3VlICMxMzgzMTogRW1iZWQgc3RyaW5naWZpY2F0aW9uIG9mIHJlbW90ZSB0cmFjZWJhY2sgaW4gbG9jYWwKKyAgdHJhY2ViYWNrIHJhaXNlZCB3aGVuIHBvb2wgdGFzayByYWlzZXMgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNTUyODogQWRkIHdlYWtyZWYuZmluYWxpemUgdG8gc3VwcG9ydCBmaW5hbGl6YXRpb24gdXNpbmcKKyAgd2Vha3JlZiBjYWxsYmFja3MuCisKKy0gSXNzdWUgIzE0MTczOiBBdm9pZCBjcmFzaGluZyB3aGVuIHJlYWRpbmcgYSBzaWduYWwgaGFuZGxlciBkdXJpbmcKKyAgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisKKy0gSXNzdWUgIzE1OTAyOiBGaXggaW1wLmxvYWRfbW9kdWxlKCkgYWNjZXB0aW5nIE5vbmUgYXMgYSBmaWxlIHdoZW4gbG9hZGluZyBhbgorICBleHRlbnNpb24gbW9kdWxlLgorCistIElzc3VlICMxMzcyMTogU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkgYW5kIFNTTFNvY2tldC5kb19oYW5kc2hha2UoKSBub3cKKyAgcmFpc2UgYW4gT1NFcnJvciB3aXRoIEVOT1RDT05OLCBpbnN0ZWFkIG9mIGFuIEF0dHJpYnV0ZUVycm9yLCB3aGVuIHRoZQorICBTU0xTb2NrZXQgaXMgbm90IGNvbm5lY3RlZC4KKworLSBJc3N1ZSAjMTQ2Nzk6IGFkZCBhbiBfX2FsbF9fICh0aGF0IGNvbnRhaW5zIG9ubHkgSFRNTFBhcnNlcikgdG8gaHRtbC5wYXJzZXIuCisKKy0gSXNzdWUgIzE3ODAyOiBGaXggYW4gVW5ib3VuZExvY2FsRXJyb3IgaW4gaHRtbC5wYXJzZXIuICBJbml0aWFsIHRlc3RzIGJ5CisgIFRob21hcyBCYXJsb3cuCisKKy0gSXNzdWUgIzE3MzU4OiBNb2R1bGVzIGxvYWRlZCBieSBpbXAubG9hZF9zb3VyY2UoKSBhbmQgbG9hZF9jb21waWxlZCgpIChhbmQgYnkKKyAgZXh0ZW50aW9uIGxvYWRfbW9kdWxlKCkpIG5vdyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiB3b3JraW5nIHdoZW4gcmVsb2FkZWQuCisKKy0gSXNzdWUgIzE3ODA0OiBOZXcgZnVuY3Rpb24gYGBzdHJ1Y3QuaXRlcl91bnBhY2tgYCBhbGxvd3MgZm9yIHN0cmVhbWluZworICBzdHJ1Y3QgdW5wYWNraW5nLgorCistIElzc3VlICMxNzgzMDogV2hlbiBrZXl3b3JkLnB5IGlzIHVzZWQgdG8gdXBkYXRlIGEga2V5d29yZCBmaWxlLCBpdCBub3cKKyAgcHJlc2VydmVzIHRoZSBsaW5lIGVuZGluZ3Mgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisKKy0gSXNzdWUgIzE3MjcyOiBNYWtpbmcgdGhlIHVybGxpYi5yZXF1ZXN0J3MgUmVxdWVzdC5mdWxsX3VybCBhIGRlc2NyaXB0b3IuCisgIEZpeGVzIGJ1Z3Mgd2l0aCBhc3NpZ25tZW50IHRvIGZ1bGxfdXJsLiBQYXRjaCBieSBEZW1pYW4gQnJlY2h0LgorCistIElzc3VlICMxNzM1MzogUGxpc3RsaWIgZW1pdHRlZCBlbXB0eSBkYXRhIHRhZ3Mgd2l0aCBkZWVwbHkgbmVzdGVkIGRhdGFzdHJ1Y3R1cmVzCisKKy0gSXNzdWUgIzExNzE0OiBVc2UgJ3dpdGgnIHN0YXRlbWVudHMgdG8gYXNzdXJlIGEgU2VtYXBob3JlIHJlbGVhc2VzIGEKKyAgY29uZGl0aW9uIHZhcmlhYmxlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIFJhY2hlbC4KKworLSBJc3N1ZSAjMTY2MjQ6IGBzdWJwcm9jZXNzLmNoZWNrX291dHB1dGAgbm93IGFjY2VwdHMgYW4gYGlucHV0YCBhcmd1bWVudCwKKyAgYWxsb3dpbmcgdGhlIHN1YnByb2Nlc3MncyBzdGRpbiB0byBiZSBwcm92aWRlZCBhcyBhIChieXRlKSBzdHJpbmcuCisgIFBhdGNoIGJ5IFphY2sgV2VpbmJlcmcuCisKKy0gSXNzdWUgIzE3Nzk1OiBSZXZlcnRlZCBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZSBpbiBTeXNMb2dIYW5kbGVyIHdpdGgKKyAgVW5peCBkb21haW4gc29ja2V0cy4KKworLSBJc3N1ZSAjMTY2OTQ6IEFkZCBhIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvcGVyYXRvciBtb2R1bGUuCisgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTExODI6IHJlbW92ZSB0aGUgdW51c2VkIGFuZCB1bmRvY3VtZW50ZWQgcHlkb2MuU2Nhbm5lciBjbGFzcy4KKyAgUGF0Y2ggYnkgTWFydGluIE1vcnJpc29uLgorCistIElzc3VlICMxNzc0MTogQWRkIEVsZW1lbnRUcmVlLlhNTFB1bGxQYXJzZXIsIGFuIGV2ZW50LWRyaXZlbiBwYXJzZXIgZm9yCisgIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuCisKKy0gSXNzdWUgIzE3NTU1OiBGaXggRm9ya0F3YXJlVGhyZWFkTG9jayBzbyB0aGF0IHNpemUgb2YgYWZ0ZXIgZm9yaworICByZWdpc3RyeSBkb2VzIG5vdCBncm93IGV4cG9uZW50aWFsbHkgd2l0aCBnZW5lcmF0aW9uIG9mIHByb2Nlc3MuCisKKy0gSXNzdWUgIzE3NzA3OiBmaXggcmVncmVzc2lvbiBpbiBtdWx0aXByb2Nlc3NpbmcuUXVldWUncyBnZXQoKSBtZXRob2Qgd2hlcmUKKyAgaXQgZGlkIG5vdCBibG9jayBmb3Igc2hvcnQgdGltZW91dHMuCisKKy0gSXNzdWUgIzE3NzIwOiBGaXggdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuVW5waWNrbGVyIHRvIGNvcnJlY3RseQorICBwcm9jZXNzIHRoZSBBUFBFTkRTIG9wY29kZSB3aGVuIGl0IGlzIHVzZWQgb24gbm9uLWxpc3Qgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTcwMTI6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBmYWxscyBiYWNrIHRvIHRoZSBQQVRIIGVudmlyb25tZW50CisgIHZhcmlhYmxlIGlmIGFuIGVtcHR5IHBhdGggYXJndW1lbnQgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTc3MTA6IEZpeCBwaWNrbGUgcmFpc2luZyBhIFN5c3RlbUVycm9yIG9uIGJvZ3VzIGlucHV0LgorCistIElzc3VlICMxNzM0MTogSW5jbHVkZSB0aGUgaW52YWxpZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHJlIGFib3V0CisgIGludmFsaWQgZ3JvdXAgbmFtZXMuCisKKy0gSXNzdWUgIzE3NzAyOiBvcy5lbnZpcm9uIG5vdyByYWlzZXMgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgbmFtZSAoc3RyIG9uIFVOSVgpLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbmNvZGVkIG5hbWUgKGJ5dGVzIG9uCisgIFVOSVgpLgorCistIElzc3VlICMxNjE2MzogTWFrZSB0aGUgaW1wb3J0bGliIGJhc2VkIHZlcnNpb24gb2YgcGtndXRpbC5pdGVyX2ltcG9ydGVycworICB3b3JrIGZvciBzdWJtb2R1bGVzLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE2ODA0OiBGaXggYSBidWcgaW4gdGhlICdzaXRlJyBtb2R1bGUgdGhhdCBjYXVzZWQgcnVubmluZworICAncHl0aG9uIC1TIC1tIHNpdGUnIHRvIGluY29ycmVjdGx5IHRocm93IGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTU0ODA6IFJlbW92ZSB0aGUgZGVwcmVjYXRlZCBhbmQgdW51c2VkIFRZUEVfSU5UNjQgY29kZSBmcm9tIG1hcnNoYWwuCisgIEluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFJpdGkuCisKKy0gSXNzdWUgIzIxMTg6IFNNVFBFeGNlcHRpb24gaXMgbm93IGEgc3ViY2xhc3Mgb2YgT1NFcnJvci4KKworLSBJc3N1ZSAjMTcwMTY6IEdldCByaWQgb2YgcG9zc2libGUgcG9pbnRlciB3cmFwYXJvdW5kcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MKKyAgaW4gdGhlIHJlIG1vZHVsZS4gIFBhdGNoIGJ5IE5pY2tvbGFpIFplbGRvdmljaC4KKworLSBJc3N1ZSAjMTY2NTg6IGFkZCBtaXNzaW5nIHJldHVybiB0byBIVFRQQ29ubmVjdGlvbi5zZW5kKCkKKyAgUGF0Y2ggYnkgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjOTU1NjogdGhlIGxvZ2dpbmcgcGFja2FnZSBub3cgYWxsb3dzIHNwZWNpZnlpbmcgYSB0aW1lLW9mLWRheSBmb3IgYQorICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIgdG8gcm90YXRlLgorCistIElzc3VlICMxNDk3MTogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm8gbG9uZ2VyIGdldHMgY29uZnVzZWQgd2hlbiBhIGZ1bmN0aW9uCisgIGhhcyBhIGRpZmZlcmVudCBfX25hbWVfXyB0aGFuIGl0cyBuYW1lIGluIHRoZSBUZXN0Q2FzZSBjbGFzcyBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxNzQ4NzogVGhlIHdhdmUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4KKyAgYSBwbGFpbiB0dXBsZS4KKworLSBJc3N1ZSAjMTc2NzU6IHNvY2tldCByZXByKCkgcHJvdmlkZXMgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKGlmIGFueSkuCisgIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnCisKKy0gSXNzdWUgIzE3MDkzOiBNYWtlIHRoZSBBQkNzIGluIGltcG9ydGxpYi5hYmMgcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBvciByYWlzZQorICByZWFzb25hYmxlIGV4Y2VwdGlvbnMgZm9yIHRoZWlyIG1ldGhvZHMgdG8gbWFrZSB0aGVtIG1vcmUgYW1lbmFibGUgdG8gc3VwZXIoKQorICBjYWxscy4KKworLSBJc3N1ZSAjMTc1NjY6IE1ha2UgaW1wb3J0bGliLmFiYy5Mb2FkZXIubW9kdWxlX3JlcHIoKSBvcHRpb25hbCBpbnN0ZWFkIG9mIGFuCisgIGFic3RyYWN0bWV0aG9kOyBub3cgaXQgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3Igc28gYXMgdG8gYmUgaWdub3JlZCBieSBkZWZhdWx0LgorCistIElzc3VlICMxNzY3ODogUmVtb3ZlIHRoZSB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgaW4gaHR0cC9jb29raWVqYXIucHkgYnkKKyAgY2hhbmdpbmcgdGhlIGNhbGwgdG8gZ2V0X29yaWdpbl9yZXFfaG9zdCgpIHRvIG9yaWdpbl9yZXFfaG9zdC4KKworLSBJc3N1ZSAjMTc2NjY6IEZpeCByZWFkaW5nIGd6aXAgZmlsZXMgd2l0aCBhbiBleHRyYSBmaWVsZC4KKworLSBJc3N1ZSAjMTY0NzU6IFN1cHBvcnQgb2JqZWN0IGluc3RhbmNpbmcsIHJlY3Vyc2lvbiBhbmQgaW50ZXJuZWQgc3RyaW5ncworICBpbiBtYXJzaGFsCisKKy0gSXNzdWUgIzE3NTAyOiBQcm9jZXNzIERFRkFVTFQgdmFsdWVzIGluIG1vY2sgc2lkZV9lZmZlY3QgdGhhdCByZXR1cm5zIGl0ZXJhdG9yLgorCistIElzc3VlICMxNjc5NTogT24gdGhlIGFzdC5hcmd1bWVudHMgb2JqZWN0LCB1bmlmeSB2YXJhcmcgd2l0aCB2YXJhcmdhbm5vdGF0aW9uCisgIGFuZCBrd2FyZyBhbmQga3dhcmdhbm5vdGF0aW9uLiBDaGFuZ2UgdGhlIGNvbHVtbiBvZmZzZXQgb2YgYXN0LkF0dHJpYnV0ZSB0byBiZQorICBhdCB0aGUgYXR0cmlidXRlIG5hbWUuCisKKy0gSXNzdWUgIzE3NDM0OiBQcm9wZXJseSByYWlzZSBhIFN5bnRheEVycm9yIHdoZW4gYSBzdHJpbmcgb2NjdXJzIGJldHdlZW4gZnV0dXJlCisgIGltcG9ydHMuCisKKy0gSXNzdWUgIzE3MTE3OiBJbXBvcnQgYW5kIEBpbXBvcnRsaWIudXRpbC5zZXRfbG9hZGVyIG5vdyBzZXQgX19sb2FkZXJfXyB3aGVuCisgIGl0IGhhcyBhIHZhbHVlIG9mIE5vbmUgb3IgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0LgorCistIElzc3VlICMxNzAzMjogVGhlICJnbG9iYWwiIGluIHRoZSAiTmFtZUVycm9yOiBnbG9iYWwgbmFtZSAneCcgaXMgbm90IGRlZmluZWQiCisgIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gcmVtb3ZlZC4gIFBhdGNoIGJ5IFJhbSBSYWNodW0uCiAKIC0gSXNzdWUgIzE4MDgwOiBXaGVuIGJ1aWxkaW5nIGEgQyBleHRlbnNpb24gbW9kdWxlIG9uIE9TIFgsIGlmIHRoZSBjb21waWxlcgogICBpcyBvdmVycmlkZW4gd2l0aCB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsIHVzZSB0aGUgbmV3IGNvbXBpbGVyIGFzCkBAIC0xMTE2LDMxICszNzM0LDczMyBAQAogLSBJc3N1ZSAjMTgxMTM6IEZpeGVkIGEgcmVmY291bnQgbGVhayBpbiB0aGUgY3Vyc2VzLnBhbmVsIG1vZHVsZSdzCiAgIHNldF91c2VycHRyKCkgbWV0aG9kLiAgUmVwb3J0ZWQgYnkgQXRzdW8gSXNoaW1vdG8uCiAKLS0gSXNzdWUgIzE4ODQ5OiBGaXhlZCBhIFdpbmRvd3Mtc3BlY2lmaWMgdGVtcGZpbGUgYnVnIHdoZXJlIGNvbGxpc2lvbiB3aXRoIGFuCi0gIGV4aXN0aW5nIGRpcmVjdG9yeSBjYXVzZWQgbWtzdGVtcCBhbmQgcmVsYXRlZCBBUElzIHRvIGZhaWwgaW5zdGVhZCBvZgotICByZXRyeWluZy4gUmVwb3J0IGFuZCBmaXggYnkgVmxhZCBTaGNoZXJiaW5hLgorLSBJbXBsZW1lbnQgUEVQIDQ0MyAiU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb25zIi4KIAotLSBJc3N1ZSAjMTk0MDA6IFByZXZlbnQgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZCBmYWlsdXJlcyB3aXRoIFhjb2RlIDUgb24gT1MgWAotICAxMC44KyB3aGVuIHVzaW5nIGEgdW5pdmVyc2FsIFB5dGhvbiB0aGF0IGluY2x1ZGVkIGEgUFBDIGFyY2hpdGVjdHVyZSwKLSAgc3VjaCBhcyB3aXRoIGEgcHl0aG9uLm9yZyAzMi1iaXQtb25seSBiaW5hcnkgaW5zdGFsbGVyLgorLSBJbXBsZW1lbnQgUEVQIDQzNSAiQWRkaW5nIGFuIEVudW0gdHlwZSB0byB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkiLgogCi1DIEFQSQotLS0tLS0KKy0gSXNzdWUgIzE1NTk2OiBGYXN0ZXIgcGlja2xpbmcgb2YgdW5pY29kZSBzdHJpbmdzLgogCi0tIElzc3VlICMxODM1MTogRml4IHZhcmlvdXMgaXNzdWVzIHdpdGggYSBoZWxwZXIgZnVuY3Rpb24gaW4gaW1wb3J0bGliIHVzZWQKLSAgYnkgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKCkgKGFuZCB0aHVzIGJ5IGV4dGVuc2lvbgotICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZSgpIGFuZCBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KCkpLgorLSBJc3N1ZSAjMTc1NzI6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGVuIHBhc3NpbmcgYmFkIGRpcmVjdGl2ZXMgdG8KKyAgdGltZS5zdHJwdGltZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE3NDM1OiB0aHJlYWRpbmcuVGltZXIncyBfX2luaXRfXyBtZXRob2Qgbm8gbG9uZ2VyIHVzZXMgbXV0YWJsZQorICBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGFyZ3MgYW5kIGt3YXJncyBwYXJhbWV0ZXJzLgorCistIElzc3VlICMxNzUyNjogZml4IGFuIEluZGV4RXJyb3IgcmFpc2VkIHdoaWxlIHBhc3NpbmcgY29kZSB3aXRob3V0IGZpbGVuYW1lIHRvCisgIGluc3BlY3QuZmluZHNvdXJjZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBUeWxlciBEb3lsZS4KKworLSBJc3N1ZSAjMTc1NDA6IEFkZGVkIHN0eWxlIHBhcmFtZXRlciB0byBsb2dnaW5nIGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGJ5IGRpY3QuCisKKy0gSXNzdWUgIzE2NjkyOiBUaGUgc3NsIG1vZHVsZSBub3cgc3VwcG9ydHMgVExTIDEuMSBhbmQgVExTIDEuMi4gIEluaXRpYWwKKyAgcGF0Y2ggYnkgTWljaGVsZSBPcnLDuS4KKworLSBJc3N1ZSAjMTcwMjU6IG11bHRpcHJvY2Vzc2luZzogUmVkdWNlIFF1ZXVlIGFuZCBTaW1wbGVRdWV1ZSBjb250ZW50aW9uLgorCistIElzc3VlICMxNzUzNjogQWRkIHRvIHdlYmJyb3dzZXIncyBicm93c2VyIGxpc3Q6IHd3dy1icm93c2VyLCB4LXd3dy1icm93c2VyLAorICBpY2V3ZWFzZWwsIGljZWFwZS4KKworLSBJc3N1ZSAjMTcxNTA6IHBwcmludCBub3cgdXNlcyBsaW5lIGNvbnRpbnVhdGlvbnMgdG8gd3JhcCBsb25nIHN0cmluZworICBsaXRlcmFscy4KKworLSBJc3N1ZSAjMTc0ODg6IENoYW5nZSB0aGUgc3VicHJvY2Vzcy5Qb3BlbiBidWZzaXplIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlCisgIGZyb20gdW5idWZmZXJlZCAoMCkgdG8gYnVmZmVyaW5nICgtMSkgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIGV4aXN0aW5nIGNvZGUKKyAgZXhwZWN0cyBhbmQgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBpbiBQeXRob24gMiB0byBhdm9pZAorICBpbnRyb2R1Y2luZyBoYXJkIHRvIHRyYWNrIGRvd24gYnVncy4KKworLSBJc3N1ZSAjMTc1MjE6IENvcnJlY3RlZCBub24tZW5hYmxpbmcgb2YgbG9nZ2VyIGZvbGxvd2luZyB0d28gY2FsbHMgdG8KKyAgZmlsZUNvbmZpZygpLgorCistIElzc3VlICMxNzUwODogQ29ycmVjdGVkIGxvZ2dpbmcgTWVtb3J5SGFuZGxlciBjb25maWd1cmF0aW9uIGluIGRpY3RDb25maWcoKQorICB3aGVyZSB0aGUgdGFyZ2V0IGhhbmRsZXIgd2Fzbid0IGNvbmZpZ3VyZWQgZmlyc3QuCisKKy0gSXNzdWUgIzE3MjA5OiBjdXJzZXMud2luZG93LmdldF93Y2goKSBub3cgY29ycmVjdGx5IGhhbmRsZXMgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgKENUUkwrYykuCisKKy0gSXNzdWUgIzU3MTM6IHNtdHBsaWIgbm93IGhhbmRsZXMgNDIxIChjbG9zaW5nIGNvbm5lY3Rpb24pIGVycm9yIGNvZGVzIHdoZW4KKyAgc2VuZGluZyBtYWlsIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBhbmQgcmVwb3J0aW5nIHRoZSA0MjEgZXJyb3IgY29kZSB2aWEgdGhlCisgIGV4Y2VwdGlvbiBhcHByb3ByaWF0ZSB0byB0aGUgY29tbWFuZCB0aGF0IHJlY2VpdmVkIHRoZSBlcnJvciByZXNwb25zZS4KKworLSBJc3N1ZSAjMTY5OTc6IHVuaXR0ZXN0LlRlc3RDYXNlIG5vdyBwcm92aWRlcyBhIHN1YlRlc3QoKSBjb250ZXh0IG1hbmFnZXIKKyAgdG8gcHJvY2VkdXJhbGx5IGdlbmVyYXRlLCBpbiBhbiBlYXN5IHdheSwgc21hbGwgdGVzdCBpbnN0YW5jZXMuCisKKy0gSXNzdWUgIzE3NDg1OiBBbHNvIGRlbGV0ZSB0aGUgUmVxdWVzdCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgdGhlIGRhdGEKKyAgYXR0cmlidXRlIGlzIGRlbGV0ZWQuICAoRm9sbG93IG9uIHRvIGlzc3VlIElzc3VlICMxNjQ2NCkuCisKKy0gSXNzdWUgIzE1OTI3OiBDVlMgbm93IGNvcnJlY3RseSBwYXJzZXMgZXNjYXBlZCBuZXdsaW5lcyBhbmQgY2FycmlhZ2UKKyAgd2hlbiBwYXJzaW5nIHdpdGggcXVvdGluZyB0dXJuZWQgb2ZmLgorCistIElzc3VlICMxNzQ2NzogYWRkIHJlYWRsaW5lIGFuZCByZWFkbGluZXMgc3VwcG9ydCB0byBtb2NrX29wZW4gaW4KKyAgdW5pdHRlc3QubW9jay4KKworLSBJc3N1ZSAjMTMyNDg6IHJlbW92ZWQgZGVwcmVjYXRlZCBhbmQgdW5kb2N1bWVudGVkIGRpZmZsaWIuaXNianVuaywKKyAgaXNicG9wdWxhci4KKworLSBJc3N1ZSAjMTcxOTI6IFVwZGF0ZSB0aGUgY3R5cGVzIG1vZHVsZSdzIGxpYmZmaSB0byB2My4wLjEzLiAgVGhpcworICBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgc3RhY2sgbWlzYWxpZ25tZW50IGlzc3VlIG9uIHg4NiBhbmQgaXNzdWVzIG9uCisgIHNvbWUgbW9yZSByZWNlbnQgcGxhdGZvcm1zLgorCistIElzc3VlICM4ODYyOiBGaXhlZCBjdXJzZXMgY2xlYW51cCB3aGVuIGdldGtleSBpcyBpbnRlcnJwdXRlZCBieSBhIHNpZ25hbC4KKworLSBJc3N1ZSAjMTc0NDM6IGltYXBsaWIuSU1BUDRfc3RyZWFtIHdhcyB1c2luZyB0aGUgZGVmYXVsdCB1bmJ1ZmZlcmVkIElPCisgIGluIHN1YnByb2Nlc3MsIGJ1dCB0aGUgaW1hcCBjb2RlIGFzc3VtZXMgYnVmZmVyZWQgSU8uICBJbiBQeXRob24yIHRoaXMKKyAgd29ya2VkIGJ5IGFjY2lkZW50LiAgSU1BUDRfc3RyZWFtIG5vdyBleHBsaWNpdGx5IHVzZXMgYnVmZmVyZWQgSU8uCisKKy0gSXNzdWUgIzE3NDc2OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdW5kb2N1bWVudGVkIHB5ZG9jCisgICdhbGxtZXRob2RzJzsgaXQgd2FzIG1pc3NpbmcgdW5ib3VuZCBtZXRob2RzIG9uIHRoZSBjbGFzcy4KKworLSBJc3N1ZSAjMTc0NzQ6IFJlbW92ZSB0aGUgZGVwcmVjYXRlZCBtZXRob2RzIG9mIFJlcXVlc3QgY2xhc3MuCisKKy0gSXNzdWUgIzE2NzA5OiB1bml0dGVzdCBkaXNjb3ZlciBvcmRlciBpcyBuby1sb25nZXIgZmlsZXN5c3RlbSBzcGVjaWZpYy4gUGF0Y2gKKyAgYnkgSmVmZiBSYW1uYW5pLgorCistIFVzZSB0aGUgSFRUUFMgUHlQSSB1cmwgZm9yIHVwbG9hZCwgb3ZlcnJpZGluZyBhbnkgcGxhaW4gSFRUUCBVUkwgaW4gcHlwaXJjLgorCistIElzc3VlICM1MDI0OiBzbmRoZHIud2hpY2hoZHIgbm93IHJldHVybnMgdGhlIGZyYW1lIGNvdW50IGZvciBXQVYgZmlsZXMKKyAgcmF0aGVyIHRoYW4gLTEuCisKKy0gSXNzdWUgIzE3NDYwOiBSZW1vdmUgdGhlIHN0cmljdCBhcmd1bWVudCBvZiBIVFRQQ29ubmVjdGlvbiBhbmQgcmVtb3ZpbmcgdGhlCisgIERlcHJlY2F0aW9uV2FybmluZyBiZWluZyBpc3N1ZWQgZnJvbSAzLjIgb253YXJkcy4KKworLSBJc3N1ZSAjMTY4ODA6IERvIG5vdCBhc3N1bWUgX2ltcC5sb2FkX2R5bmFtaWMoKSBpcyBkZWZpbmVkIGluIHRoZSBpbXAgbW9kdWxlLgorCistIElzc3VlICMxNjM4OTogRml4ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbiAzLjEgaW4gdGhlCisgIGNhY2hpbmcgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4KKworLSBBZGRlZCBtaXNzaW5nIEZlZWRQYXJzZXIgYW5kIEJ5dGVzRmVlZFBhcnNlciB0byBlbWFpbC5wYXJzZXIuX19hbGxfXy4KKworLSBJc3N1ZSAjMTc0MzE6IEZpeCBtaXNzaW5nIGltcG9ydCBvZiBCeXRlc0ZlZWRQYXJzZXIgaW4gZW1haWwucGFyc2VyLgorCistIElzc3VlICMxMjkyMTogaHR0cC5zZXJ2ZXIncyBzZW5kX2Vycm9yIHRha2VzIGFuIGV4cGxhaW4gYXJndW1lbnQgdG8gc2VuZCBtb3JlCisgIGluZm9ybWF0aW9uIGluIHJlc3BvbnNlLiBQYXRjaCBjb250cmlidXRlZCBieSBLYXJsLgorCistIElzc3VlICMxNzQxNDogQWRkIHRpbWVpdCwgcmVwZWF0LCBhbmQgZGVmYXVsdF90aW1lciB0byB0aW1laXQuX19hbGxfXy4KKworLSBJc3N1ZSAjMTI4NTA4NjogR2V0IHJpZCBvZiB0aGUgcmVmY291bnRpbmcgaGFjayBhbmQgc3BlZWQgdXAKKyAgdXJsbGliLnBhcnNlLnVucXVvdGUoKSBhbmQgdXJsbGliLnBhcnNlLnVucXVvdGVfdG9fYnl0ZXMoKS4KKworLSBJc3N1ZSAjMTcwOTk6IEhhdmUgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgcmFpc2UgVmFsdWVFcnJvciB3aGVuIF9fbG9hZGVyX18KKyAgaXMgbm90IHNldCwgaGFybW9uaXppbmcgd2l0aCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgYXR0cmlidXRlIGlzIHNldCB0byBOb25lLgorCistIEV4cG9zZSB0aGUgT19QQVRIIGNvbnN0YW50IGluIHRoZSBvcyBtb2R1bGUgaWYgaXQgaXMgYXZhaWxhYmxlLgorCistIElzc3VlICMxNzM2ODogRml4IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIFB5dGhvbiBKU09OIGRlY29kZXIgdGhhdCBjYXVzZWQKKyAgYSBmYWlsdXJlIHdoaWxlIGRlY29kaW5nIGVtcHR5IG9iamVjdCBsaXRlcmFscyB3aGVuIG9iamVjdF9wYWlyc19ob29rIHdhcworICBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzE3Mzg1OiBGaXggcXVhZHJhdGljIGJlaGF2aW9yIGluIHRocmVhZGluZy5Db25kaXRpb24uICBUaGUgRklGTworICBxdWV1ZSBub3cgdXNlcyBhIGRlcXVlIGluc3RlYWQgb2YgYSBsaXN0LgorCistIElzc3VlICMxNTgwNjogQWRkIGNvbnRleHRsaWIuaWdub3JlKCkuICBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1hbmFnZXIgdG8KKyAgaWdub3JlIHNwZWNpZmllZCBleGNlcHRpb25zLCByZXBsYWNpbmcgdGhlICJleGNlcHQgU29tZUV4Y2VwdGlvbjogcGFzcyIgaWRpb20uCisKKy0gSXNzdWUgIzE0NjQ1OiBUaGUgZW1haWwgZ2VuZXJhdG9yIGNsYXNzZXMgbm93IHByb2R1Y2Ugb3V0cHV0IHVzaW5nIHRoZQorICBzcGVjaWZpZWQgbGluZXNlcCB0aHJvdWdob3V0LiAgUHJldmlvdXNseSBpZiB0aGUgcHJvbG9nLCBlcGlsb2csIG9yCisgIGJvZHkgd2VyZSBzdG9yZWQgd2l0aCBhIGRpZmZlcmVudCBsaW5lc2VwLCB0aGF0IGxpbmVzZXAgd2FzIHVzZWQuICBUaGlzCisgIGZpeCBjb3JyZWN0cyBhbiBSRkMgbm9uLWNvbXBsaWFuY2UgaXNzdWUgd2l0aCBzbXRwbGliLnNlbmRfbWVzc2FnZS4KKworLSBJc3N1ZSAjMTcyNzg6IEZpeCBhIGNyYXNoIGluIGhlYXBxLmhlYXBwdXNoKCkgYW5kIGhlYXBxLmhlYXBwb3AoKSB3aGVuCisgIHRoZSBsaXN0IGlzIGJlaW5nIHJlc2l6ZWQgY29uY3VycmVudGx5LgorCistIElzc3VlICMxNjk2MjogVXNlIGdldGRlbnRzNjQgaW5zdGVhZCBvZiB0aGUgb2Jzb2xldGUgZ2V0ZGVudHMgc3lzY2FsbAorICBpbiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgb24gTGludXguCisKKy0gSXNzdWUgIzE2OTM1OiB1bml0dGVzdCBub3cgY291bnRzIHRoZSBtb2R1bGUgYXMgc2tpcHBlZCBpZiBpdCByYWlzZXMgU2tpcFRlc3QsCisgIGluc3RlYWQgb2YgY291bnRpbmcgaXQgYXMgYW4gZXJyb3IuICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzE3MDE4OiBNYWtlIFByb2Nlc3Muam9pbigpIHJldHJ5IGlmIG9zLndhaXRwaWQoKSBmYWlscyB3aXRoIEVJTlRSLgorCistIElzc3VlICMxNzIyMzogYXJyYXkgbW9kdWxlOiBGaXggYSBjcmFzaGVyIHdoZW4gY29udmVydGluZyBhbiBhcnJheSBjb250YWluaW5nCisgIGludmFsaWQgY2hhcmFjdGVycyAob3V0c2lkZSByYW5nZSBbVSswMDAwOyBVKzEwZmZmZl0pIHRvIFVuaWNvZGU6CisgIHJlcHIoYXJyYXkpLCBzdHIoYXJyYXkpIGFuZCBhcnJheS50b3VuaWNvZGUoKS4gUGF0Y2ggd3JpdHRlbiBieSBNYW51ZWwgSmFjb2IuCisKKy0gSXNzdWUgIzE3MTk3OiBwcm9maWxlL2NQcm9maWxlIG1vZHVsZXMgcmVmYWN0b3JlZCBzbyB0aGF0IGNvZGUgb2YgcnVuKCkgYW5kCisgIHJ1bmN0eCgpIHV0aWxpdHkgZnVuY3Rpb25zIGlzIG5vdCBkdXBsaWNhdGVkIGluIGJvdGggbW9kdWxlcy4KKworLSBJc3N1ZSAjMTQ3MjA6IHNxbGl0ZTM6IENvbnZlcnQgZGF0ZXRpbWUgbWljcm9zZWNvbmRzIGNvcnJlY3RseS4KKyAgUGF0Y2ggYnkgTG93ZSBUaGlkZXJtYW4uCisKKy0gSXNzdWUgIzE1MTMyOiBBbGxvdyBhIGxpc3QgZm9yIHRoZSBkZWZhdWx0VGVzdCBhcmd1bWVudCBvZgorICB1bml0dGVzdC5UZXN0UHJvZ3JhbS4gUGF0Y2ggYnkgSnlya2kgUHVsbGlhaW5lbi4KKworLSBJc3N1ZSAjMTcyMjU6IEpTT04gZGVjb2RlciBub3cgY291bnRzIGNvbHVtbnMgaW4gdGhlIGZpcnN0IGxpbmUgc3RhcnRpbmcKKyAgd2l0aCAxLCBhcyBpbiBvdGhlciBsaW5lcy4KKworLSBJc3N1ZSAjNjYyMzogQWRkZWQgZXhwbGljaXQgRGVwcmVjYXRpb25XYXJuaW5nIGZvciBmdHBsaWIubmV0cmMsIHdoaWNoIGhhcworICBiZWVuIGRlcHJlY2F0ZWQgYW5kIHVuZG9jdW1lbnRlZCBmb3IgYSBsb25nIHRpbWUuCisKKy0gSXNzdWUgIzEzNzAwOiBGaXggYnl0ZS9zdHJpbmcgaGFuZGxpbmcgaW4gaW1hcGxpYiBhdXRoZW50aWNhdGlvbiB3aGVuIGFuCisgIGF1dGhvYmplY3QgaXMgc3BlY2lmaWVkLgorCistIElzc3VlICMxMzE1MzogVGtpbnRlciBmdW5jdGlvbnMgbm93IHJhaXNlIFRjbEVycm9yIGluc3RlYWQgb2YgVmFsdWVFcnJvciB3aGVuCisgIGEgc3RyaW5nIGFyZ3VtZW50IGNvbnRhaW5zIG5vbi1CTVAgY2hhcmFjdGVyLgorCistIElzc3VlICM5NjY5OiBQcm90ZWN0IHJlIGFnYWluc3QgaW5maW5pdGUgbG9vcHMgb24gemVyby13aWR0aCBtYXRjaGluZyBpbgorICBub24tZ3JlZWR5IHJlcGVhdC4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTMxNjk6IFRoZSBtYXhpbWFsIHJlcGV0aXRpb24gbnVtYmVyIGluIGEgcmVndWxhciBleHByZXNzaW9uIGhhcyBiZWVuCisgIGluY3JlYXNlZCBmcm9tIDY1NTM0IHRvIDIxNDc0ODM2NDcgKG9uIDMyLWJpdCBwbGF0Zm9ybSkgb3IgNDI5NDk2NzI5NCAob24KKyAgNjQtYml0KS4KKworLSBJc3N1ZSAjMTcxNDM6IEZpeCBhIG1pc3NpbmcgaW1wb3J0IGluIHRoZSB0cmFjZSBtb2R1bGUuICBJbml0aWFsIHBhdGNoIGJ5CisgIEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE1MjIwOiBlbWFpbC5mZWVkcGFyc2VyJ3MgbGluZSBzcGxpdHRpbmcgYWxnb3JpdGhtIGlzIG5vdyBzaW1wbGVyIGFuZAorICBmYXN0ZXIuCisKKy0gSXNzdWUgIzE2NzQzOiBGaXggbW1hcCBvdmVyZmxvdyBjaGVjayBvbiAzMiBiaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTY5OTY6IHdlYmJyb3dzZXIgbW9kdWxlIG5vdyB1c2VzIHNodXRpbC53aGljaCgpIHRvIGZpbmQgYQorICB3ZWItYnJvd3NlciBvbiB0aGUgZXhlY3V0YWJsZSBzZWFyY2ggcGF0aC4KKworLSBJc3N1ZSAjMTY4MDA6IHRlbXBmaWxlLmdldHRlbXBkaXIoKSBubyBsb25nZXIgbGVmdCB0ZW1wb3JhcnkgZmlsZXMgd2hlbgorICB0aGUgZGlzayBpcyBmdWxsLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQW1pciBTemVrZWx5LgorCistIElzc3VlICMxNzE5MjogSW1wb3J0IGxpYmZmaS0zLjAuMTIuCisKKy0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgorICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfN29yOGJpdCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KKworLSBJc3N1ZSAjMTcwNTI6IHVuaXR0ZXN0IGRpc2NvdmVyeSBzaG91bGQgdXNlIHNlbGYudGVzdExvYWRlci4KKworLSBJc3N1ZSAjNDU5MTogVWlkIGFuZCBnaWQgdmFsdWVzIGxhcmdlciB0aGFuIDIqKjMxIGFyZSBzdXBwb3J0ZWQgbm93LgorCistIElzc3VlICMxNzE0MTogcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgpIG5vIGxvbmdlciBoYW5ncyBmb3IgbGFyZ2Uga2FwcGFzLgorCistIElzc3VlICMxNzE0OTogRml4IHJhbmRvbS52b25taXNlc3ZhcmlhdGUgdG8gYWx3YXlzIHJldHVybiByZXN1bHRzIGluCisgIFswLCAyKm1hdGgucGldLgorCistIElzc3VlICMxNDcwNTQ4OiBYTUxHZW5lcmF0b3Igbm93IHdvcmtzIHdpdGggYmluYXJ5IG91dHB1dCBzdHJlYW1zLgorCistIElzc3VlICM2OTc1OiBvcy5wYXRoLnJlYWxwYXRoKCkgbm93IGNvcnJlY3RseSByZXNvbHZlcyBtdWx0aXBsZSBuZXN0ZWQKKyAgc3ltbGlua3Mgb24gUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMzc3Mzogc3FsaXRlMy5jb25uZWN0KCkgZ2V0cyBhIG5ldyBgdXJpYCBwYXJhbWV0ZXIgdG8gcGFzcyB0aGUKKyAgZmlsZW5hbWUgYXMgYSBVUkksIGFsbG93aW5nIHRvIHBhc3MgY3VzdG9tIG9wdGlvbnMuCisKKy0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgorICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfbm9vcCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KKworLSBJc3N1ZSAjMTAzNTU6IFRoZSBtb2RlLCBuYW1lLCBlbmNvZGluZyBhbmQgbmV3bGluZXMgcHJvcGVydGllcyBub3cgd29yayBvbgorICBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBvYmplY3RzIGV2ZW4gd2hlbiB0aGV5IGhhdmUgbm90IHlldCByb2xsZWQgb3Zlci4KKyAgT2Jzb2xldGUgbWV0aG9kIHhyZWFkbGluZSAod2hpY2ggaGFzIG5ldmVyIHdvcmtlZCBpbiBQeXRob24gMykgaGFzIGJlZW4KKyAgcmVtb3ZlZC4KKworLSBJc3N1ZSAjMTY2ODY6IEZpeGVkIGEgbG90IG9mIGJ1Z3MgaW4gYXVkaW9vcCBtb2R1bGUuICBGaXhlZCBjcmFzaGVzIGluCisgIGF2Z3BwKCksIG1heHBwKCkgYW5kIHJhdGVjdigpLiAgRml4ZWQgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBhZGQoKSwgYmlhcygpLAorICBhbmQgcmF0ZWN2KCkuICByZXZlcnNlKCksIGxpbjJsaW4oKSBhbmQgcmF0ZWN2KCkgbm8gbW9yZSBsb3NlIHByZWNpc2lvbiBmb3IKKyAgMzItYml0IHNhbXBsZXMuICBtYXgoKSBhbmQgcm1zKCkgbm8gbW9yZSByZXR1cm5zIGEgbmVnYXRpdmUgcmVzdWx0IGFuZAorICB2YXJpb3VzIG90aGVyIGZ1bmN0aW9ucyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCAzMi1iaXQgc2FtcGxlIC0weDgwMDAwMDAwLgorCistIElzc3VlICMxNzA3MzogRml4IHNvbWUgaW50ZWdlciBvdmVyZmxvd3MgaW4gc3FsaXRlMyBtb2R1bGUuCisKKy0gSXNzdWUgIzE2NzIzOiBodHRwbGliLkhUVFBSZXNwb25zZSBubyBsb25nZXIgbWFya2VkIGNsb3NlZCB3aGVuIHRoZSBjb25uZWN0aW9uCisgIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkLgorCistIElzc3VlICMxNTM1OTogQWRkIENBTl9CQ00gcHJvdG9jb2wgc3VwcG9ydCB0byB0aGUgc29ja2V0IG1vZHVsZS4gUGF0Y2ggYnkKKyAgQnJpYW4gVGhvcm5lLgorCistIElzc3VlICMxNjk0ODogRml4IHF1b3RlZCBwcmludGFibGUgYm9keSBlbmNvZGluZyBmb3Igbm9uLWxhdGluMSBjaGFyYWN0ZXIKKyAgc2V0cyBpbiB0aGUgZW1haWwgcGFja2FnZS4KKworLSBJc3N1ZSAjMTY4MTE6IEZpeCBmb2xkaW5nIG9mIGhlYWRlcnMgd2l0aCBubyB2YWx1ZSBpbiB0aGUgcHJvdmlzaW9uYWwgZW1haWwKKyAgcG9saWNpZXMuCisKKy0gSXNzdWUgIzE3MTMyOiBVcGRhdGUgc3ltYm9sIGZvciAieWllbGQgZnJvbSIgZ3JhbW1hciBjaGFuZ2VzLgorCistIElzc3VlICMxNzA3NjogTWFrZSBjb3B5aW5nIG9mIHhhdHRycyBtb3JlIHRvbGVyYW50IG9mIG1pc3NpbmcgRlMgc3VwcG9ydC4KKyAgUGF0Y2ggYnkgVGhvbWFzIFdvdXRlcnMuCisKKy0gSXNzdWUgIzE3MDg5OiBFeHBhdCBwYXJzZXIgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIHN0cmluZyBpbnB1dCB3aGVuIHRoZQorICBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgbm90IFVURi04IG9yIFVTLUFTQ0lJLiAgSXQgYWxzbyBub3cgYWNjZXB0cyBieXRlcworICBhbmQgc3RyaW5ncyBsYXJnZXIgdGhhbiAyIEdpQi4KKworLSBJc3N1ZSAjNjA4MzogRml4IG11bHRpcGxlIHNlZ21lbnRhdGlvbiBmYXVsdHMgb2NjdXJlZCB3aGVuIFB5QXJnX1BhcnNlVHVwbGUKKyAgcGFyc2VzIG5lc3RlZCBtdXRhdGluZyBzZXF1ZW5jZS4KKworLSBJc3N1ZSAjNTI4OTogRml4IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBvbiBTb2xhcmlzLgorCistIElzc3VlICMxNzEwNjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGluIGlvLlRleHRJT1dyYXBwZXIgd2hlbiBhbiB1bmRlcmx5aW5nCisgIHN0cmVhbSBvciBhIGRlY29kZXIgcHJvZHVjZXMgZGF0YSBvZiBhbiB1bmV4cGVjdGVkIHR5cGUgKGkuZS4gd2hlbgorICBpby5UZXh0SU9XcmFwcGVyIGluaXRpYWxpemVkIHdpdGggdGV4dCBzdHJlYW0gb3IgdXNlIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjKS4KKworLSBJc3N1ZSAjMTcwMTU6IFdoZW4gaXQgaGFzIGEgc3BlYywgYSBNb2NrIG9iamVjdCBub3cgaW5zcGVjdHMgaXRzIHNpZ25hdHVyZQorICB3aGVuIG1hdGNoaW5nIGNhbGxzLCBzbyB0aGF0IGFyZ3VtZW50cyBjYW4gYmUgbWF0Y2hlZCBwb3NpdGlvbmFsbHkgb3IKKyAgYnkgbmFtZS4KKworLSBJc3N1ZSAjMTU2MzM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIGlzIG5vdyBtYXJrIGNsb3NlZCB3aGVuIHRoZSBzZXJ2ZXIKKyAgc2VuZHMgbGVzcyB0aGFuIHRoZSBhZHZlcnRpc2VkIENvbnRlbnQtTGVuZ3RoLgorCistIElzc3VlICMxMjI2ODogVGhlIGlvIG1vZHVsZSBmaWxlIG9iamVjdCB3cml0ZSBtZXRob2RzIG5vIGxvbmdlciBhYm9ydCBlYXJseQorICB3aGVuIG9uZSBvZiBpdHMgd3JpdGUgc3lzdGVtIGNhbGxzIGlzIGludGVycnVwdGVkIChFSU5UUikuCisKKy0gSXNzdWUgIzY5NzI6IFRoZSB6aXBmaWxlIG1vZHVsZSBubyBsb25nZXIgb3ZlcndyaXRlcyBmaWxlcyBvdXRzaWRlIG9mCisgIGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdoZW4gZXh0cmFjdGluZyBtYWxpY2lvdXMgemlwIGZpbGVzLgorCistIElzc3VlICM0ODQ0OiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwRmlsZSB3aGVuIG9wZW5zIGEgWklQIGZpbGUgd2l0aCBhbgorICBpbmNvbXBsZXRlICJFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkiIHJlY29yZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEd1aWxoZXJtZQorICBQb2xvIGFuZCBBbGFuIE1jSW50eXJlLgorCistIElzc3VlICMxNzA3MTogU2lnbmF0dXJlLmJpbmQoKSBub3cgd29ya3Mgd2hlbiBvbmUgb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzCisgIGlzIG5hbWVkIGBgc2VsZmBgLgorCistIElzc3VlICMxMjAwNDogRml4IGFuIGludGVybmFsIGVycm9yIGluIFB5WmlwRmlsZSB3aGVuIHdyaXRpbmcgYW4gaW52YWxpZAorICBQeXRob24gZmlsZS4gIFBhdGNoIGJ5IEJlbiBNb3JnYW4uCisKKy0gSGF2ZSBweV9jb21waWxlIHVzZSBpbXBvcnRsaWIgYXMgbXVjaCBhcyBwb3NzaWJsZSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLgorICBDb2RlIG5vdyByYWlzZXMgRmlsZUV4aXN0c0Vycm9yIGlmIHRoZSBmaWxlIHBhdGggdG8gYmUgdXNlZCBmb3IgdGhlCisgIGJ5dGUtY29tcGlsZWQgZmlsZSBpcyBhIHN5bWxpbmsgb3Igbm9uLXJlZ3VsYXIgZmlsZSBhcyBhIHdhcm5pbmcgdGhhdCBpbXBvcnQKKyAgd2lsbCBub3Qga2VlcCB0aGUgZmlsZSBwYXRoIHR5cGUgaWYgaXQgd3JpdGVzIHRvIHRoYXQgcGF0aC4KKworLSBJc3N1ZSAjMTY5NzI6IEhhdmUgc2l0ZS5hZGRwYWNrYWdlKCkgY29uc2lkZXIgYWxyZWFkeSBrbm93biBwYXRocyBldmVuIHdoZW4KKyAgbm9uZSBhcmUgZXhwbGljaXRseSBwYXNzZWQgaW4uIEJ1ZyByZXBvcnQgYW5kIGZpeCBieSBLaXJpbGwuCisKKy0gSXNzdWUgIzE2MDIxMzM6IG9uIE1hYyBPUyBYIGEgc2hhcmVkIGxpYnJhcnkgYnVpbGQgKGBgLS1lbmFibGUtc2hhcmVkYGApCisgIG5vdyBmaWxscyB0aGUgYGBvcy5lbnZpcm9uYGAgdmFyaWFibGUgY29ycmVjdGx5LgorCistIElzc3VlICMxNTUwNTogYHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyYCBubyBsb25nZXIgYXNzdW1lcyBTSUdJTlQgaGFuZGxlciBpcworICBzZXQgdG8gYSBjYWxsYWJsZSBvYmplY3QuCisKKy0gSXNzdWUgIzEzNDU0OiBGaXggYSBjcmFzaCB3aGVuIGRlbGV0aW5nIGFuIGl0ZXJhdG9yIGNyZWF0ZWQgYnkgaXRlcnRvb2xzLnRlZSgpCisgIGlmIGFsbCBvdGhlciBpdGVyYXRvcnMgd2VyZSB2ZXJ5IGFkdmFuY2VkIGJlZm9yZS4KKworLSBJc3N1ZSAjMTI0MTE6IEZpeCB0byBjZ2kucGFyc2VfbXVsdGlwYXJ0IHRvIGNvcnJlY3RseSB1c2UgYnl0ZXMgYm91bmRhcmllcworICBhbmQgYnl0ZXMgZGF0YS4gUGF0Y2ggYnkgSm9uYXMgV2FnbmVyLgorCistIElzc3VlICMxNjk1Nzogc2h1dGlsLndoaWNoKCkgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgYmFyZSBmaWxlIG5hbWUgaW4gdGhlCisgIGN1cnJlbnQgZGlyZWN0b3J5IG9uIFVuaXggYW5kIG5vIGxvbmdlciBzZWFyY2hlcyBhIHJlbGF0aXZlIGZpbGUgcGF0aCB3aXRoCisgIGEgZGlyZWN0b3J5IHBhcnQgaW4gUEFUSCBkaXJlY3Rvcmllcy4gIFBhdGNoIGJ5IFRob21hcyBLbHV5dmVyLgorCistIElzc3VlICMxMTU5MDUxOiBHemlwRmlsZSBub3cgcmFpc2VzIEVPRkVycm9yIHdoZW4gcmVhZGluZyBhIGNvcnJ1cHRlZCBmaWxlCisgIHdpdGggdHJ1bmNhdGVkIGhlYWRlciBvciBmb290ZXIuCisKKy0gSXNzdWUgIzE2OTkzOiBzaHV0aWwud2hpY2goKSBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mIHRoZSBwYXRoIGFuZCBleHRlbnNpb24KKyAgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTY5OTI6IE9uIFdpbmRvd3MgaW4gc2lnbmFsLnNldF93YWtldXBfZmQsIHZhbGlkYXRlIHRoZSBmaWxlCisgIGRlc2NyaXB0b3IgYXJndW1lbnQuCisKKy0gSXNzdWUgIzE2NDIyOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBQeXRob24gdmVyc2lvbiwgdGhlIEMgdmVyc2lvbiBvZgorICBkZWNpbWFsIG5vdyB1c2VzIHN0cmluZ3MgaW5zdGVhZCBvZiBpbnRlZ2VycyBmb3Igcm91bmRpbmcgbW9kZSBjb25zdGFudHMuCisKKy0gSXNzdWUgIzE1ODYxOiB0a2ludGVyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBsaXN0cyBhbmQgdHVwbGVzIGNvbnRhaW5pbmcKKyAgc3RyaW5ncyB3aXRoIHdoaXRlc3BhY2VzLCBiYWNrc2xhc2hlcyBvciB1bmJhbGFuY2VkIGJyYWNlcy4KKworLSBJc3N1ZSAjOTcyMDogemlwZmlsZSBub3cgd3JpdGVzIGNvcnJlY3QgbG9jYWwgaGVhZGVycyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4KKyAgNCBHaUIuCisKKy0gSXNzdWUgIzE2OTU1OiBGaXggdGhlIHBvbGwoKSBtZXRob2QgZm9yIG11bHRpcHJvY2Vzc2luZydzIHNvY2tldAorICBjb25uZWN0aW9ucyBvbiBXaW5kb3dzLgorCistIFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoKSBub3cgcHJvcGVybHkgY2xvc2VzIHRoZSBpbnB1dCBmaWxlLgorCistIElzc3VlICMxNTAzMTogUmVmYWN0b3Igc29tZSAucHljIG1hbmFnZW1lbnQgY29kZSB0byBjdXQgZG93biBvbiBjb2RlCisgIGR1cGxpY2F0aW9uLiBUaGFua3MgdG8gUm9uYW4gTGFteSBmb3IgdGhlIHJlcG9ydCBhbmQgdGFraW5nIGFuIGluaXRpYWwgc3RhYgorICBhdCB0aGUgcHJvYmxlbS4KKworLSBJc3N1ZSAjMTYzOTg6IE9wdGltaXplIGRlcXVlLnJvdGF0ZSgpIHNvIHRoYXQgaXQgb25seSBtb3ZlcyBwb2ludGVycworICBhbmQgZG9lc24ndCB0b3VjaCB0aGUgdW5kZXJseWluZyBkYXRhIHdpdGggaW5jcmVmcyBhbmQgZGVjcmVmcy4KKworLSBJc3N1ZSAjMTY5MDA6IElzc3VlIGEgUmVzb3VyY2VXYXJuaW5nIHdoZW4gYW4gc3NsIHNvY2tldCBpcyBsZWZ0IHVuY2xvc2VkLgorCistIElzc3VlICMxMzg5OTogXEEsIFxaLCBhbmQgXEIgbm93IGNvcnJlY3RseSBtYXRjaCB0aGUgQSwgWiwgYW5kIEIgbGl0ZXJhbHMKKyAgd2hlbiB1c2VkIGluc2lkZSBjaGFyYWN0ZXIgY2xhc3NlcyAoZS5nLiAnW1xBXScpLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxNTU0NTogRml4IHJlZ3Jlc3Npb24gaW4gc3FsaXRlMydzIGl0ZXJkdW1wIG1ldGhvZCB3aGVyZSBpdCB3YXMKKyAgZmFpbGluZyBpZiB0aGUgY29ubmVjdGlvbiB1c2VkIGEgcm93IGZhY3RvcnkgKHN1Y2ggYXMgc3FsaXRlMy5Sb3cpIHRoYXQKKyAgcHJvZHVjZWQgdW5zb3J0YWJsZSBvYmplY3RzLiAoUmVncmVzc2lvbiB3YXMgaW50cm9kdWNlZCBieSBmaXggZm9yIDk3NTApLgorCistIGZjbnRsOiBhZGQgRl9EVVBGRF9DTE9FWEVDIGNvbnN0YW50LCBhdmFpbGFibGUgb24gTGludXggMi42LjI0Ky4KKworLSBJc3N1ZSAjMTU5NzI6IEZpeCBlcnJvciBtZXNzYWdlcyB3aGVuIG9zIGZ1bmN0aW9ucyBleHBlY3RpbmcgYSBmaWxlIG5hbWUgb3IKKyAgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgdGhlIGluY29ycmVjdCB0eXBlLgorCistIElzc3VlICM4MTA5OiBUaGUgc3NsIG1vZHVsZSBub3cgaGFzIHN1cHBvcnQgZm9yIHNlcnZlci1zaWRlIFNOSSwgdGhhbmtzCisgIHRvIGEgOm1ldGg6YFNTTENvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tgIG1ldGhvZC4gIFBhdGNoIGJ5IERhbmllbAorICBCbGFjay4KKworLSBJc3N1ZSAjMTY4NjA6IEluIHRlbXBmaWxlLCB1c2UgT19DTE9FWEVDIHdoZW4gYXZhaWxhYmxlIHRvIHNldCB0aGUKKyAgY2xvc2Utb24tZXhlYyBmbGFnIGF0b21pY2FsbHkuCisKKy0gSXNzdWUgIzE2Njc0OiByYW5kb20uZ2V0cmFuZGJpdHMoKSBpcyBub3cgMjAtNDAlIGZhc3RlciBmb3Igc21hbGwgaW50ZWdlcnMuCisKKy0gSXNzdWUgIzE2MDA5OiBKU09OIGVycm9yIG1lc3NhZ2VzIG5vdyBwcm92aWRlIG1vcmUgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzE2ODI4OiBGaXggZXJyb3IgaW5jb3JyZWN0bHkgcmFpc2VkIGJ5IGJ6Mi5jb21wcmVzcyhiJycpIGFuZAorICBiejIuQloyQ29tcHJlc3Nvci5jb21wcmVzcyhiJycpLiBJbml0aWFsIHBhdGNoIGJ5IE1hcnRpbiBQYWNrbWFuLgorCistIElzc3VlICMxNjgzMzogSW4gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24sIGRvIG5vdCBjb25jYXRlbmF0ZSB0aGUgcmVxdWVzdAorICBoZWFkZXJzIGFuZCBib2R5IHdoZW4gdGhlIHBheWxvYWQgZXhjZWVkcyAxNiBLQiwgc2luY2UgaXQgY2FuIGNvbnN1bWUgbW9yZQorICBtZW1vcnkgZm9yIG5vIGJlbmVmaXQuICBQYXRjaCBieSBCZW5ubyBMZXNsaWUuCisKKy0gSXNzdWUgIzE2NTQxOiB0a19zZXRQYWxldHRlKCkgbm93IHdvcmtzIHdpdGgga2V5d29yZCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBwYXJzZXIucG9waXRlbSgpYCBubyBsb25nZXIgcmFpc2VzIFZhbHVlRXJyb3IuCisgIFRoaXMgbWFrZXMgYHBhcnNlci5jbGVhbigpYCB3b3JrIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYGBwYXJzZXJbJ3NlY3Rpb24nXSA9IHt9YGAgbm93IHByZXNlcnZlcworICBzZWN0aW9uIG9yZGVyIHdpdGhpbiB0aGUgcGFyc2VyLiBUaGlzIG1ha2VzIGBwYXJzZXIudXBkYXRlKClgIHByZXNlcnZlIHNlY3Rpb24KKyAgb3JkZXIgYXMgd2VsbC4KKworLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYGBwYXJzZXJbJ0RFRkFVTFQnXSA9IHt9YGAgbm93IGNvcnJlY3RseQorICBjbGVhcnMgcHJldmlvdXMgdmFsdWVzIHN0b3JlZCBpbiB0aGUgZGVmYXVsdCBzZWN0aW9uLiBTYW1lIGdvZXMgZm9yCisgIGBgcGFyc2VyLnVwZGF0ZSh7J0RFRkFVTFQnOiB7fX0pYGAuCisKKy0gSXNzdWUgIzk1ODY6IFJlZGVmaW5lIFNFTV9GQUlMRUQgb24gTWFjT1NYIHRvIGtlZXAgY29tcGlsZXIgaGFwcHkuCisKKy0gSXNzdWUgIzE2Nzg3OiBJbmNyZWFzZSBhc3luY29yZSBhbmQgYXN5bmNoYXQgZGVmYXVsdCBvdXRwdXQgYnVmZmVycyBzaXplLCB0bworICBkZWNyZWFzZSBDUFUgdXNhZ2UgYW5kIGluY3JlYXNlIHRocm91Z2hwdXQuCisKKy0gSXNzdWUgIzEwNTI3OiBtYWtlIG11bHRpcHJvY2Vzc2luZyB1c2UgcG9sbCgpIGluc3RlYWQgb2Ygc2VsZWN0KCkgaWYgYXZhaWxhYmxlLgorCistIElzc3VlICMxNjY4ODogTm93IHJlZ2V4ZXMgY29udGFpbmVkIGJhY2tyZWZlcmVuY2VzIGNvcnJlY3RseSB3b3JrIHdpdGgKKyAgbm9uLUFTQ0lJIHN0cmluZ3MuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCisKKy0gSXNzdWUgIzE2NDg2OiBNYWtlIGFpZmMgZmlsZXMgYWN0IGFzIGNvbnRleHQgbWFuYWdlcnMuCisKKy0gSXNzdWUgIzE2NDg1OiBOb3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGlmIGZpbGUgaGVhZGVyIHBhdGNoaW5nIGZhaWxlZAorICBvbiBjbG9zaW5nIGFuIGFpZmMgZmlsZS4KKworLSBJc3N1ZSAjMTY2NDA6IFJ1biBsZXNzIGNvZGUgdW5kZXIgYSBsb2NrIGluIHNjaGVkIG1vZHVsZS4KKworLSBJc3N1ZSAjMTYxNjU6IHNjaGVkLnNjaGVkdWxlci5ydW4oKSBubyBsb25nZXIgYmxvY2tzIGEgc2NoZWR1bGVyIGZvciBvdGhlcgorICB0aHJlYWRzLgorCistIElzc3VlICMxNjY0MTogRGVmYXVsdCB2YWx1ZXMgb2Ygc2NoZWQuc2NoZWR1bGVyLmVudGVyKCkgYXJlIG5vIGxvbmdlcgorICBtb2RpZmlhYmxlLgorCistIElzc3VlICMxNjYxODogTWFrZSBnbG9iLmdsb2IgbWF0Y2ggY29uc2lzdGVudGx5IGFjcm9zcyBzdHJpbmdzIGFuZCBieXRlcworICByZWdhcmRpbmcgbGVhZGluZyBkb3RzLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY3ODg6IEFkZCBzYW1lc3RhdCB0byBMaWIvbnRwYXRoLnB5CisKKy0gSXNzdWUgIzE2NzEzOiBQYXJzaW5nIG9mICd0ZWwnIHVybHMgdXNpbmcgdXJscGFyc2Ugc2VwYXJhdGVzIHBhcmFtcyBmcm9tCisgIHBhdGguCisKKy0gSXNzdWUgIzE2NDQzOiBBZGQgZG9jc3RyaW5ncyB0byByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggb2JqZWN0cy4KKyAgUGF0Y2ggYnkgQW50b24gS2FzeWFub3YuCisKKy0gSXNzdWUgIzE1NzAxOiBGaXggSFRUUEVycm9yIGluZm8gbWV0aG9kIGNhbGwgdG8gcmV0dXJuIHRoZSBoZWFkZXJzIGluZm9ybWF0aW9uLgorCistIElzc3VlICMxNjc1MjogQWRkIGEgbWlzc2luZyBpbXBvcnQgdG8gbW9kdWxlZmluZGVyLiBQYXRjaCBieSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMxNjY0NjogZnRwbGliLkZUUC5tYWtlcG9ydCgpIG1pZ2h0IGxvc2Ugc29ja2V0IGVycm9yIGRldGFpbHMuCisgIChwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthKQorCistIElzc3VlICMxNjYyNjogRml4IGluZmluaXRlIHJlY3Vyc2lvbiBpbiBnbG9iLmdsb2IoKSBvbiBXaW5kb3dzIHdoZW4gdGhlCisgIHBhdHRlcm4gY29udGFpbnMgYSB3aWxkY2FyZCBpbiB0aGUgZHJpdmUgb3IgVU5DIHBhdGguICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNTc4MzogRXhjZXB0IGZvciB0aGUgbnVtYmVyIG1ldGhvZHMsIHRoZSBDIHZlcnNpb24gb2YgZGVjaW1hbCBub3cKKyAgc3VwcG9ydHMgYWxsIE5vbmUgZGVmYXVsdCB2YWx1ZXMgcHJlc2VudCBpbiBkZWNpbWFsLnB5LiBUaGVzZSB2YWx1ZXMgd2VyZQorICBsYXJnZWx5IHVuZG9jdW1lbnRlZC4KKworLSBJc3N1ZSAjMTExNzU6IGFyZ3BhcnNlLkZpbGVUeXBlIG5vdyBhY2NlcHRzIGVuY29kaW5nIGFuZCBlcnJvcnMKKyAgYXJndW1lbnRzLiBQYXRjaCBieSBMdWNhcyBNYXlzdHJlLgorCistIElzc3VlICMxNjQ4ODogZXBvbGwoKSBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBgd2l0aGAgc3RhdGVtZW50LiAgUGF0Y2gKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYyOTg6IEluIEhUVFBSZXNwb25zZS5yZWFkKCksIGNsb3NlIHRoZSBzb2NrZXQgd2hlbiB0aGVyZSBpcyBubworICBDb250ZW50LUxlbmd0aCBhbmQgdGhlIGluY29taW5nIHN0cmVhbSBpcyBmaW5pc2hlZC4gIFBhdGNoIGJ5IEVyYW4KKyAgUnVuZHN0ZWluLgorCistIElzc3VlICMxNjA0OTogQWRkIGFiYy5BQkMgY2xhc3MgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgaW5oZXJpdGFuY2UgdG8gY3JlYXRlCisgIEFCQ3MsIHJhdGhlciB0aGFuIHRoZSBtb3JlIGN1bWJlcnNvbWUgbWV0YWNsYXNzPUFCQ01ldGEuIFBhdGNoIGJ5IEJydW5vCisgIER1cHVpcy4KKworLSBFeHBvc2UgdGhlIFRDUF9GQVNUT1BFTiBhbmQgTVNHX0ZBU1RPUEVOIGZsYWdzIGluIHNvY2tldCB3aGVuIHRoZXkncmUKKyAgYXZhaWxhYmxlLgorCistIElzc3VlICMxNTcwMTogQWRkIGEgLmhlYWRlcnMgYXR0cmlidXRlIHRvIHVybGxpYi5lcnJvci5IVFRQRXJyb3IuIFBhdGNoCisgIGNvbnRyaWJ1dGVkIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE1ODcyOiBGaXggMy4zIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSB0aGUgbmV3IGZkLWJhc2VkIHNodXRpbC5ybXRyZWUKKyAgdGhhdCBjYXVzZWQgaXQgdG8gbm90IGlnbm9yZSBjZXJ0YWluIGVycm9ycyB3aGVuIGlnbm9yZV9lcnJvcnMgd2FzIHNldC4KKyAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYSBhbmQgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYyNDg6IERpc2FibGUgY29kZSBleGVjdXRpb24gZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGJ5CisgIHRraW50ZXIgd2hlbiB0aGUgLUUgZmxhZyBpcyBwYXNzZWQgdG8gUHl0aG9uLiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCistIElzc3VlICMxMzM5MDogTmV3IGZ1bmN0aW9uIDpmdW5jOmBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKClgIHJldHVybnMgdGhlCisgIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGN1cnJlbnRseSBhbGxvY2F0ZWQuCisKKy0gSXNzdWUgIzE2NjI4OiBGaXggYSBtZW1vcnkgbGVhayBpbiBjdHlwZXMucmVzaXplKCkuCisKKy0gSXNzdWUgIzEzNjE0OiBGaXggc2V0dXAucHkgcmVnaXN0ZXIgZmFpbHVyZSB3aXRoIGludmFsaWQgcnN0IGluIGRlc2NyaXB0aW9uLgorICBQYXRjaCBieSBKdWxpZW4gQ291cnRlYXUgYW5kIFBpZXJyZSBQYXVsIExlZmVidnJlLgorCistIElzc3VlICMxMzUxMjogQ3JlYXRlIH4vLnB5cGlyYyBzZWN1cmVseSAoQ1ZFLTIwMTEtNDk0NCkuICBJbml0aWFsIHBhdGNoIGJ5CisgIFBoaWxpcCBKZW52ZXksIHRlc3RlZCBieSBNYWdlaWEgYW5kIERlYmlhbi4KKworLSBJc3N1ZSAjNzcxOTogTWFrZSBkaXN0dXRpbHMgaWdub3JlIGBgLm5mcypgYCBmaWxlcyBpbnN0ZWFkIG9mIGNob2tpbmcgbGF0ZXIKKyAgb24uICBJbml0aWFsIHBhdGNoIGJ5IFNpbGVudEdob3N0IGFuZCBKZWZmIFJhbW5hbmkuCisKKy0gSXNzdWUgIzEzMTIwOiBBbGxvdyB0byBjYWxsIHBkYi5zZXRfdHJhY2UoKSBmcm9tIHRocmVhZC4KKyAgUGF0Y2ggYnkgSWx5YSBTYW5kbGVyLgorCistIElzc3VlICMxNjU4NTogTWFrZSBDSksgZW5jb2RlcnMgc3VwcG9ydCBlcnJvciBoYW5kbGVycyB0aGF0IHJldHVybiBieXRlcyBwZXIKKyAgUEVQIDM4My4KKworLSBJc3N1ZSAjMTAxODI6IFRoZSByZSBtb2R1bGUgZG9lc24ndCB0cnVuY2F0ZSBpbmRpY2VzIHRvIDMyIGJpdHMgYW55bW9yZS4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzMzM6IHVzZSAoIiwiLCAiOiAiKSBhcyBkZWZhdWx0IHNlcGFyYXRvciBpbiBqc29uIHdoZW4gaW5kZW50IGlzCisgIHNwZWNpZmllZCwgdG8gYXZvaWQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2NTczOiBJbiAydG8zLCB0cmVhdCBlbnVtZXJhdGUoKSBsaWtlIGEgY29uc3VtaW5nIGNhbGwsIHNvIHN1cGVyZmx1b3VzCisgIGxpc3QoKSBjYWxscyBhcmVuJ3QgYWRkZWQgdG8gZmlsdGVyKCksIG1hcCgpLCBhbmQgemlwKCkgd2hpY2ggYXJlIGRpcmVjdGx5CisgIHBhc3NlZCBlbnVtZXJhdGUoKS4KKworLSBJc3N1ZSAjMTY0NjQ6IFJlc2V0IHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2hlbiBhIHVybGxpYiBSZXF1ZXN0IGlzIHJldXNlZAorICB3aXRoIG5ldyBkYXRhLgorCistIElzc3VlICMxMjg0ODogVGhlIHB1cmUgUHl0aG9uIHBpY2tsZSBpbXBsZW1lbnRhdGlvbiBub3cgdHJlYXRzIG9iamVjdAorICBsZW5ndGhzIGFzIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VycywgbGlrZSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2VzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjQyMzogdXJsbGliLnJlcXVlc3Qgbm93IGhhcyBzdXBwb3J0IGZvciBgYGRhdGE6YGAgVVJMcy4gIFBhdGNoIGJ5CisgIE1hdGhpYXMgUGFuemVuYsO2Y2suCisKKy0gSXNzdWUgIzQ0NzM6IEFkZCBhIFBPUDMuc3RscygpIHRvIHN3aXRjaCBhIGNsZWFyLXRleHQgUE9QMyBzZXNzaW9uIGludG8KKyAgYW4gZW5jcnlwdGVkIFBPUDMgc2Vzc2lvbiwgb24gc3VwcG9ydGVkIHNlcnZlcnMuICBQYXRjaCBieSBMb3JlbnpvIENhdHVjY2kuCisKKy0gSXNzdWUgIzQ0NzM6IEFkZCBhIFBPUDMuY2FwYSgpIG1ldGhvZCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQKKyAgYnkgdGhlIFBPUDMgc2VydmVyLiAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICM0NDczOiBFbnN1cmUgdGhlIHNvY2tldCBpcyBzaHV0ZG93biBjbGVhbmx5IGluIFBPUDMuY2xvc2UoKS4KKyAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICMxNjUyMjogYWRkZWQgRkFJTF9GQVNUIGZsYWcgdG8gZG9jdGVzdC4KKworLSBJc3N1ZSAjMTU2Mjc6IEFkZCB0aGUgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLnNvdXJjZV90b19jb2RlKCkgbWV0aG9kLgorCistIElzc3VlICMxNjQwODogRml4IGZpbGUgZGVzY3JpcHRvcnMgbm90IGJlaW5nIGNsb3NlZCBpbiBlcnJvciBjb25kaXRpb25zCisgIGluIHRoZSB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0NjMxOiBBZGQgYSBuZXcgOmNsYXNzOmB3ZWFrcmVmLldlYWtNZXRob2RgIHRvIHNpbXVsYXRlIHdlYWsKKyAgcmVmZXJlbmNlcyB0byBib3VuZCBtZXRob2RzLgorCistIElzc3VlICMxNjQ2OTogRml4IGV4Y2VwdGlvbnMgZnJvbSBmbG9hdCAtPiBGcmFjdGlvbiBhbmQgRGVjaW1hbCAtPiBGcmFjdGlvbgorICBjb252ZXJzaW9ucyBmb3Igc3BlY2lhbCB2YWx1ZXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRob3NlIGZvciBmbG9hdCAtPiBpbnQKKyAgYW5kIERlY2ltYWwgLT4gaW50LiAgUGF0Y2ggYnkgQWxleGV5IEthY2hheWV2LgorCistIElzc3VlICMxNjQ4MTogbXVsdGlwcm9jZXNzaW5nIG5vIGxvbmdlciBsZWFrcyBwcm9jZXNzIGhhbmRsZXMgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTI0Mjg6IEFkZCBhIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0b29scy5wYXJ0aWFsKCkuCisgIFBhdGNoIGJ5IEJyaWFuIFRob3JuZS4KKworLSBJc3N1ZSAjMTYxNDA6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgZG91YmxlIGNsb3NlcyBpdHMgY2hpbGQKKyAgc3VicHJvY2Vzcy5QSVBFIHBhcmVudCBmaWxlIGRlc2NyaXB0b3JzIG9uIGNoaWxkIGVycm9yIHByaW9yIHRvIGV4ZWMoKS4KKworLSBSZW1vdmUgYSBiYXJlIHByaW50IHRvIHN0ZG91dCBmcm9tIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSB0aGF0IGNvdWxkIGhhdmUKKyAgaGFwcGVuZWQgaWYgdGhlIGNoaWxkIHByb2Nlc3Mgd3JvdGUgZ2FyYmFnZSB0byBpdHMgcHJlLWV4ZWMgZXJyb3IgcGlwZS4KKworLSBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm93IHJhaXNlcyBpdHMgb3duIFN1YnByb2Nlc3NFcnJvciBpbnN0ZWFkIG9mIGEKKyAgUnVudGltZUVycm9yIGluIHZhcmlvdXMgZXJyb3Igc2l0dWF0aW9ucyB3aGljaCBzaG91bGQgbm90IG5vcm1hbGx5IGhhcHBlbi4KKworLSBJc3N1ZSAjMTYzMjc6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgbGVha3MgZmlsZSBkZXNjcmlwdG9ycworICB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGVzIHRvIHRoZSBjaGlsZCB3aGVuIGZvcmsoKSBmYWlscy4KKworLSBJc3N1ZSAjMTQzOTY6IEhhbmRsZSB0aGUgb2RkIHJhcmUgY2FzZSBvZiB3YWl0cGlkIHJldHVybmluZyAwIHdoZW4gbm90CisgIGV4cGVjdGVkIGluIHN1YnByb2Nlc3MuUG9wZW4ud2FpdCgpLgorCistIElzc3VlICMxNjQxMTogRml4IGEgYnVnIHdoZXJlIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbWlnaHQgdHJ5IHRvIGFjY2VzcworICBwcmV2aW91c2x5LWZyZWVkIG1lbW9yeS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTc6IGZpeCBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgU1NMU29ja2V0IGNyZWF0ZWQgdGhyb3VnaAorICBTU0xDb250ZXh0LndyYXBfc29ja2V0KCkuICBPcmlnaW5hbCBwYXRjaCBieSBKZWZmIE1jTmVpbC4KKworLSBJc3N1ZSAjMTY0MDk6IFRoZSByZXBvcnRob29rIGNhbGxiYWNrIG1hZGUgYnkgdGhlIGxlZ2FjeQorICB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZSBBUEkgbm93IHByb3Blcmx5IHN1cHBsaWVzIGEgY29uc3RhbnQgbm9uLXplcm8KKyAgYmxvY2tfc2l6ZSBhcyBpdCBkaWQgaW4gUHl0aG9uIDMuMiBhbmQgMi43LiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgorICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIucmV0cmlldmUuCisKKy0gSXNzdWUgIzE2NDMxOiBVc2UgdGhlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYSBEZWNpbWFsIHN1YnR5cGUKKyAgZnJvbSBhIERlY2ltYWwgYXJndW1lbnQuCisKKy0gSXNzdWUgIzE1NjQxOiBDbGVhbiB1cCBkZXByZWNhdGVkIGNsYXNzZXMgZnJvbSBpbXBvcnRsaWIKKyAgUGF0Y2ggYnkgVGFyYXMgTHlhcHVuLgorCistIElzc3VlICMxNjM1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBhY2N1bXVsYXRlcyBkYXRhIGZyb20KKyAgc3VjY2Vzc2l2ZSBjYWxscyBhZnRlciBFT0YgaW4gdW51c2VkX2RhdGEsIGluc3RlYWQgb2Ygb25seSBzYXZpbmcgdGhlIGFyZ3VtZW50CisgIHRvIHRoZSBsYXN0IGNhbGwuIGRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG5vdyBjb3JyZWN0bHkgc2V0cyB1bnVzZWRfZGF0YSBhbmQKKyAgdW5jb25zdW1lZF90YWlsLiBBIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTWVtb3J5RXJyb3Igd2hlbiBzZXR0aW5nIHRoZQorICB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlIGhhcyBhbHNvIGJlZW4gZml4ZWQuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyNzU5OiBzcmVfcGFyc2Ugbm93IHJhaXNlcyBhIHByb3BlciBlcnJvciB3aGVuIHRoZSBuYW1lIG9mIHRoZSBncm91cAorICBpcyBtaXNzaW5nLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjE1MjogZml4IHRva2VuaXplIHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hlbgorICBubyBuZXdsaW5lIGlzIGZvdW5kLiAgUGF0Y2ggYnkgTmVkIEJhdGNoZWxkZXIuCisKKy0gSXNzdWUgIzE2Mjg0OiBQcmV2ZW50IGtlZXBpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcyB0byB3b3JrZXIgZnVuY3Rpb25zCisgIGluIGNvbmN1cnJlbnQuZnV0dXJlcyBUaHJlYWRQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzE2MjMwOiBGaXggYSBjcmFzaCBpbiBzZWxlY3Quc2VsZWN0KCkgd2hlbiBvbmUgdGhlIGxpc3RzIGNoYW5nZXMKKyAgc2l6ZSB3aGlsZSBpdGVyYXRlZCBvbi4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjI4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgd2hlcmUgYSBsaXN0IGNoYW5nZXMgc2l6ZQorICB3aGlsZSBpdCBpcyBiZWluZyBlbmNvZGVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTE6IE5ldyBmdW5jdGlvbiBnYy5nZXRfc3RhdHMoKSByZXR1cm5zIHBlci1nZW5lcmF0aW9uIGNvbGxlY3Rpb24KKyAgc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTQ4OTc6IEVuaGFuY2UgZXJyb3IgbWVzc2FnZXMgb2Ygc3RydWN0LnBhY2sgYW5kCisgIHN0cnVjdC5wYWNrX2ludG8uIFBhdGNoIGJ5IE1hdHRpIE3DpGtpLgorCistIElzc3VlICMxNjMxNjogbWltZXR5cGVzIG5vdyByZWNvZ25pemVzIHRoZSAueHogYW5kIC50eHogKC50YXIueHopIGV4dGVuc2lvbnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyODkwOiBjZ2l0YiBubyBsb25nZXIgcHJpbnRzIHNwdXJpb3VzIDxwPiB0YWdzIGluIHRleHQKKyAgbW9kZSB3aGVuIHRoZSBsb2dkaXIgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTYzMDc6IEZpeCBtdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmMgbm90IGNhbGxpbmcgaXRzIGNhbGxiYWNrcy4KKyAgUGF0Y2ggYnkgSmFubmUgS2FyaWxhLgorCistIElzc3VlICMxNjMwNTogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IG9jY3VycmluZyB3aGVuIGludGVycnVwdGluZworICBtYXRoLmZhY3RvcmlhbC4KKworLSBJc3N1ZSAjMTYxMTY6IEZpeCBpbmNsdWRlIGFuZCBsaWJyYXJ5IHBhdGhzIHRvIGJlIGNvcnJlY3Qgd2hlbiBidWlsZGluZyBDCisgIGV4dGVuc2lvbnMgaW4gdmVudnMuCisKKy0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisKKy0gSXNzdWUgIzE2MzAxOiBGaXggdGhlIGxvY2FsaG9zdCB2ZXJpZmljYXRpb24gaW4gdXJsbGliL3JlcXVlc3QucHkgZm9yIGZpbGU6Ly8KKyAgdXJscy4KKworLSBJc3N1ZSAjMTYyNTA6IEZpeCB0aGUgaW52b2NhdGlvbnMgb2YgVVJMRXJyb3Igd2hpY2ggaGFkIG1pc3BsYWNlZCBmaWxlbmFtZQorICBhdHRyaWJ1dGUgZm9yIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTA4MzY6IEZpeCBleGNlcHRpb24gcmFpc2VkIHdoZW4gZmlsZSBub3QgZm91bmQgaW4gdXJscmV0cmlldmUKKyAgSW5pdGlhbCBwYXRjaCBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzE0Mzk4OiBGaXggc2l6ZSB0cnVuY2F0aW9uIGFuZCBvdmVyZmxvdyBidWdzIGluIHRoZSBiejIgbW9kdWxlLgorCistIElzc3VlICMxMjY5MjogRml4IHJlc291cmNlIGxlYWsgaW4gdXJsbGliLnJlcXVlc3Qgd2hlbiB0YWxraW5nIHRvIGFuIEhUVFAKKyAgc2VydmVyIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIgaW4gaXRzIHJlc3BvbnNlcy4KKworLSBJc3N1ZSAjMTIwMzQ6IEZpeCBib2d1cyBjYWNoaW5nIG9mIHJlc3VsdCBpbiBjaGVja19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuCisgIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgYGx6bWEuTFpNQUZpbGVgIChzZWUgYWxzbyBpc3N1ZSAjMTYwMzQpLgorCistIElzc3VlICMxNjIyMDogd3NnaXJlZiBub3cgYWx3YXlzIGNhbGxzIGNsb3NlKCkgb24gYW4gaXRlcmFibGUgcmVzcG9uc2UuCisgIFBhdGNoIGJ5IEJyZW50IFR1YmJzLgorCistIElzc3VlICMxNjI3MDogdXJsbGliIG1heSBoYW5nIHdoZW4gdXNlZCBmb3IgcmV0cmlldmluZyBmaWxlcyB2aWEgRlRQIGJ5IHVzaW5nCisgIGEgY29udGV4dCBtYW5hZ2VyLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCisKKy0gSXNzdWUgIzE2NDYxOiBXYXZlIGxpYnJhcnkgc2hvdWxkIGJlIGFibGUgdG8gZGVhbCB3aXRoIDRHQiB3YXYgZmlsZXMsCisgIGFuZCBzYW1wbGUgcmF0ZSBvZiA0NDEwMCBIei4KKworLSBJc3N1ZSAjMTYxNzY6IFByb3Blcmx5IGlkZW50aWZ5IFdpbmRvd3MgOCB2aWEgcGxhdGZvcm0ucGxhdGZvcm0oKQorCistIElzc3VlICMxNjA4ODogQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcidzIHNlbmRfZXJyb3IgbWV0aG9kIGluY2x1ZGVzIGEKKyAgQ29udGVudC1MZW5ndGggaGVhZGVyIGluIGl0J3MgcmVzcG9uc2Ugbm93LiBQYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMTYxMTQ6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgcHJvdmlkZXMgYSBtaXNsZWFkaW5nIGVycm9yCisgIG1lc3NhZ2Ugc3RhdGluZyB0aGF0IGFyZ3NbMF0gZGlkIG5vdCBleGlzdCB3aGVuIGVpdGhlciB0aGUgY3dkIG9yIGV4ZWN1dGFibGUKKyAga2V5d29yZCBhcmd1bWVudHMgc3BlY2lmaWVkIGEgcGF0aCB0aGF0IGRpZCBub3QgZXhpc3QuCisKKy0gSXNzdWUgIzE2MTY5OiBGaXggY3R5cGVzLldpbkVycm9yKCkncyBjb25mdXNpb24gYmV0d2VlbiBlcnJubyBhbmQgd2luZXJyb3IuCisKKy0gSXNzdWUgIzE2MTEwOiBsb2dnaW5nLmZpbGVDb25maWcgbm93IGFjY2VwdHMgYSBwcmUtaW5pdGlhbGlzZWQgQ29uZmlnUGFyc2VyCisgIGluc3RhbmNlLgorCistIElzc3VlICMxNDkyNzA0OiBzaHV0aWwuY29weWZpbGUoKSByYWlzZXMgYSBkaXN0aW5jdCBTYW1lRmlsZUVycm9yIG5vdyBpZgorICBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiBQYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJc3N1ZSAjMTM4OTY6IE1ha2Ugc2hlbGYgaW5zdGFuY2VzIHdvcmsgd2l0aCAnd2l0aCcgYXMgY29udGV4dCBtYW5hZ2Vycy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTU0MTc6IEFkZCBzdXBwb3J0IGZvciBjc2ggYW5kIGZpc2ggaW4gdmVudiBhY3RpdmF0aW9uIHNjcmlwdHMuCisKKy0gSXNzdWUgIzE0Mzc3OiBFbGVtZW50VHJlZS53cml0ZSBhbmQgc29tZSBvZiB0aGUgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucyBoYXZlCisgIGEgbmV3IHBhcmFtZXRlciAtICpzaG9ydF9lbXB0eV9lbGVtZW50cyouIEl0IGNvbnRyb2xzIGhvdyBlbGVtZW50cyB3aXRoIG5vCisgIGNvbnRlbnRzIGFyZSBlbWl0dGVkLgorCistIElzc3VlICMxNjA4OTogQWxsb3cgRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIgdG8gd29yayBhZ2FpbiB3aXRoIGEgbm9uLUVsZW1lbnQKKyAgZWxlbWVudF9mYWN0b3J5IChmaXhlcyBhIHJlZ3Jlc3Npb24gaW4gU2ltcGxlVEFMKS4KKworLSBJc3N1ZSAjOTY1MDogTGlzdCBjb21tb25seSB1c2VkIGZvcm1hdCBjb2RlcyBpbiB0aW1lLnN0cmZ0aW1lIGFuZAorICB0aW1lLnN0cnB0aW1lIGRvY3N0dGluZ3MuICBPcmlnaW5hbCBwYXRjaCBieSBNaWtlIEhveS4KKworLSBJc3N1ZSAjMTU0NTI6IGxvZ2dpbmcgY29uZmlndXJhdGlvbiBzb2NrZXQgbGlzdGVuZXIgbm93IGhhcyBhIHZlcmlmeSBvcHRpb24KKyAgdGhhdCBhbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gYXBwbHkgYSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gdG8gdGhlCisgIHJlY2VpdmVkIGNvbmZpZ3VyYXRpb24gZGF0YSBiZWZvcmUgaXQgaXMgYWN0ZWQgdXBvbi4KKworLSBJc3N1ZSAjMTYwMzQ6IEZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiB0aGUgbmV3IGBiejIuQloyRmlsZWAKKyAgaW1wbGVtZW50YXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gYHB0eS5zcGF3bigpYCBub3cgcmV0dXJucyB0aGUgY2hpbGQgcHJvY2VzcyBzdGF0dXMgcmV0dXJuZWQgYnkgYG9zLndhaXRwaWQoKWAuCisKKy0gSXNzdWUgIzE1NzU2OiBgc3VicHJvY2Vzcy5wb2xsKClgIG5vdyBwcm9wZXJseSBoYW5kbGVzIGBlcnJuby5FQ0hJTERgIHRvCisgIHJldHVybiBhIHJldHVybmNvZGUgb2YgMCB3aGVuIHRoZSBjaGlsZCBoYXMgYWxyZWFkeSBleGl0ZWQgb3IgY2Fubm90IGJlIHdhaXRlZAorICBvbi4KKworLSBJc3N1ZSAjMTUzMjM6IEltcHJvdmUgZmFpbHVyZSBtZXNzYWdlIG9mIGBNb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKClgLgorCistIElzc3VlICMxNjA2NDogYGB1bml0dGVzdCAtbWBgIGNsYWltcyBleGVjdXRhYmxlIGlzICJweXRob24iLCBub3QgInB5dGhvbjMiLgorCistIElzc3VlICMxMjM3NjogUGFzcyBvbiBwYXJhbWV0ZXJzIGluIGBUZXh0VGVzdFJlc3VsdC5fX2luaXRfXygpYCBzdXBlciBjYWxsLgorCistIElzc3VlICMxNTIyMjogSW5zZXJ0IGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBtZXNzYWdlIGluIG1ib3ggbWFpbGJveGVzLgorCistIElzc3VlICMxNjAxMzogRml4IGBjc3YuUmVhZGVyYCBwYXJzaW5nIGlzc3VlIHdpdGggZW5kaW5nIHF1b3RlIGNoYXJhY3RlcnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDIxOiBGaXggYW4gT3ZlcmZsb3dFcnJvciBpbiBgQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXMoKWAgYWZ0ZXIKKyAgYGRhdGV0aW1lLk1BWFlFQVJgLiAgUGF0Y2ggYnkgQ8OpZHJpYyBLcmllci4KKworLSBJc3N1ZSAjMTYxMTI6IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSBkb2VzIG5vdCBjb3JyZWN0bHkgZXNjYXBlIGFyZ3VtZW50IHRvCisgIC91c3IvYmluL2ZpbGUuICBQYXRjaCBieSBEYXZpZCBCZW5qYW1pbi4KKworLSBJc3N1ZSAjMTU5NzA6IGB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG5vdyBzZXJpYWxpemVzIGNvcnJlY3RseSB0aGUgZW1wdHkgSFRNTAorICBlbGVtZW50cyAnbWV0YScgYW5kICdwYXJhbScuCisKKy0gSXNzdWUgIzE1ODQyOiBUaGUgYFNvY2tldElPLntyZWFkYWJsZSx3cml0YWJsZSxzZWVrYWJsZX1gIG1ldGhvZHMgbm93IHJhaXNlCisgIFZhbHVlRXJyb3Igd2hlbiB0aGUgZmlsZS1saWtlIG9iamVjdCBpcyBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgorCistIElzc3VlICMxNTg3NjogRml4IGEgcmVmbGVhayBpbiB0aGUgYGN1cnNlc2AgbW9kdWxlOiB3aW5kb3cuZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE1ODgxOiBGaXggYGF0ZXhpdGAgaG9vayBpbiBgbXVsdGlwcm9jZXNzaW5nYC4gIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzCisgIE1jRG9ub3VnaC4KKworLSBJc3N1ZSAjMTU4NDE6IFRoZSByZWFkYWJsZSgpLCB3cml0YWJsZSgpIGFuZCBzZWVrYWJsZSgpIG1ldGhvZHMgb2YKKyAgYGlvLkJ5dGVzSU9gIGFuZCBgaW8uU3RyaW5nSU9gIG9iamVjdHMgbm93IHJhaXNlIFZhbHVlRXJyb3Igd2hlbiB0aGUgb2JqZWN0CisgIGhhcyBiZWVuIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCisKKy0gSXNzdWUgIzE1NDQ3OiBVc2UgYHN1YnByb2Nlc3MuREVWTlVMTGAgaW4gd2ViYnJvd3NlciwgaW5zdGVhZCBvZiBvcGVuaW5nCisgIGBvcy5kZXZudWxsYCBleHBsaWNpdGx5IGFuZCBsZWF2aW5nIGl0IG9wZW4uCisKKy0gSXNzdWUgIzE1NTA5OiBgd2ViYnJvd3Nlci5Vbml4QnJvd3NlcmAgbm8gbG9uZ2VyIHBhc3NlcyBlbXB0eSBhcmd1bWVudHMgdG8KKyAgUG9wZW4gd2hlbiBgYCVhY3Rpb25gYCBzdWJzdGl0dXRpb25zIHByb2R1Y2UgZW1wdHkgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTI3NzYsIGlzc3VlICMxMTgzOTogQ2FsbCBgYXJncGFyc2VgIHR5cGUgZnVuY3Rpb24gKHNwZWNpZmllZCBieQorICBhZGRfYXJndW1lbnQpIG9ubHkgb25jZS4gQmVmb3JlLCB0aGUgdHlwZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHR3aWNlIGluIHRoZQorICBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IHdhcyBzcGVjaWZpZWQgYW5kIHRoZSBhcmd1bWVudCB3YXMgZ2l2ZW4gYXMgd2VsbC4gIFRoaXMKKyAgd2FzIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgZm9yIHRoZSBGaWxlVHlwZSB0eXBlLCBhcyBhIGRlZmF1bHQgZmlsZSB3b3VsZAorICBhbHdheXMgYmUgb3BlbmVkLCBldmVuIGlmIGEgZmlsZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzE1OTA2OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlIGNhdXNlZCBieSB0aGUgcHJlY2VkaW5nIGNoYW5nZSwKKyAgd2hlbiBgYGFjdGlvbj0nYXBwZW5kJ2BgLCBgYHR5cGU9J3N0cidgYCBhbmQgYGBkZWZhdWx0PVtdYGAuCisKKy0gSXNzdWUgIzE2MTEzOiBBZGRlZCBzaGEzIG1vZHVsZSBiYXNlZCBvbiB0aGUgS2VjY2FrIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorICAzLjIuIFRoZSBgaGFzaGxpYmAgbW9kdWxlIGhhcyBmb3VyIGFkZGl0aW9uYWwgaGFzaCBhbGdvcml0aG1zOiBgc2hhM18yMjRgLAorICBgc2hhM18yNTZgLCBgc2hhM18zODRgIGFuZCBgc2hhM181MTJgLiBBcyBwYXJ0IG9mIHRoZSBwYXRjaCBzb21lIGNvbW1vbgorICBjb2RlIHdhcyBtb3ZlZCBmcm9tIF9oYXNob3BlbnNzbC5jIHRvIGhhc2hsaWIuaC4KKworLSBjdHlwZXMuY2FsbF9jb21tZXRob2Qgd2FzIHJlbW92ZWQsIHNpbmNlIGl0cyBvbmx5IHVzYWdlIHdhcyBpbiB0aGUgZGVmdW5jdAorICBzYW1wbGVzIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTY2OTI6IEFkZGVkIFRMU3YxLjEgYW5kIFRMU3YxLjIgc3VwcG9ydCBmb3IgdGhlIHNzbCBtb2R1bGVzLgorCistIElzc3VlICMxNjgzMjogYWRkIGFiYy5nZXRfY2FjaGVfdG9rZW4oKSB0byBleHBvc2UgY2FjaGUgdmFsaWRpdHkgY2hlY2tpbmcKKyAgc3VwcG9ydCBpbiBBQkNNZXRhLgogCiBJRExFCiAtLS0tCiAKLS0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKLSAgbGluZXMuCi0KLS0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCi0KLS0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgotCiAtIElzc3VlICMxODQyOTogRm9ybWF0IC8gRm9ybWF0IFBhcmFncmFwaCwgbm93IHdvcmtzIHdoZW4gY29tbWVudCBibG9ja3MKICAgYXJlIHNlbGVjdGVkLiBBcyB3aXRoIHRleHQgYmxvY2tzLCB0aGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgc2VsZWN0aW9uCiAgIG9ubHkgaW5jbHVkZXMgY29tcGxldGUgbGluZXMuCkBAIC0xMTcyLDM4ICs0NDkyLDczIEBACiAKIC0gSXNzdWUgIzE0MTQ2OiBIaWdobGlnaHQgc291cmNlIGxpbmUgd2hpbGUgZGVidWdnaW5nIG9uIFdpbmRvd3MuCiAKKy0gSXNzdWUgIzE3ODM4OiBBbGxvdyBzeXMuc3RkaW4gdG8gYmUgcmVhc3NpZ25lZC4KKworLSBJc3N1ZSAjMTM0OTU6IEF2b2lkIGxvYWRpbmcgdGhlIGNvbG9yIGRlbGVnYXRvciB0d2ljZSBpbiBJRExFLgorCistIElzc3VlICMxNzc5ODogQWxsb3cgSURMRSB0byBlZGl0IG5ldyBmaWxlcyB3aGVuIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzE0NzM1OiBVcGRhdGUgSURMRSBkb2NzIHRvIG9taXQgIkNvbnRyb2wteiBvbiBXaW5kb3dzIi4KKwogLSBJc3N1ZSAjMTc1MzI6IEFsd2F5cyBpbmNsdWRlIE9wdGlvbnMgbWVudSBmb3IgSURMRSBvbiBPUyBYLgogICBQYXRjaCBieSBHdWlsaGVybWUgU2ltw7Vlcy4KIAorLSBJc3N1ZSAjMTc1ODU6IEZpeGVkIElETEUgcmVncmVzc2lvbi4gTm93IGNsb3NlcyB3aGVuIHVzaW5nIGV4aXQoKSBvciBxdWl0KCkuCisKKy0gSXNzdWUgIzE3NjU3OiBTaG93IGZ1bGwgVGsgdmVyc2lvbiBpbiBJRExFJ3MgYWJvdXQgZGlhbG9nLgorICBQYXRjaCBieSBUb2RkIFJvdml0by4KKworLSBJc3N1ZSAjMTc2MTM6IFByZXZlbnQgdHJhY2ViYWNrIHdoZW4gcmVtb3Zpbmcgc3ludGF4IGNvbG9yaXplciBpbiBJRExFLgorCistIElzc3VlICMxMjA3NTg5OiBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBwYXRjaCBmb3IgcmlnaHQtY2xpY2sgbWVudSBpbiBJRExFLgorCistIElzc3VlICMxNjg4NzogSURMRSBub3cgYWNjZXB0cyBDYW5jZWwgaW4gdGFiaWZ5L3VudGFiaWZ5IGRpYWxvZyBib3guCisKKy0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KKworLSBJc3N1ZSAjMTQyNTQ6IElETEUgbm93IGhhbmRsZXMgcmVhZGxpbmUgY29ycmVjdGx5IGFjcm9zcyBzaGVsbCByZXN0YXJ0cy4KKworLSBJc3N1ZSAjMTc2MTQ6IElETEUgbm8gbG9uZ2VyIHJhaXNlcyBleGNlcHRpb24gd2hlbiBxdWlja2x5IGNsb3NpbmcgYSBmaWxlLgorCistIElzc3VlICM2Njk4OiBJRExFIG5vdyBvcGVucyBqdXN0IGFuIGVkaXRvciB3aW5kb3cgd2hlbiBjb25maWd1cmVkIHRvIGRvIHNvLgorCistIElzc3VlICM4OTAwOiBVc2luZyBrZXlib2FyZCBzaG9ydGN1dHMgaW4gSURMRSB0byBvcGVuIGEgZmlsZSBubyBsb25nZXIKKyAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjNjY0OTogRml4ZWQgbWlzc2luZyBleGl0IHN0YXR1cyBpbiBJRExFLiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTcxMTQ6IElETEUgbm93IHVzZXMgbm9uLXN0cmljdCBjb25maWcgcGFyc2VyLgorCistIElzc3VlICM5MjkwOiBJbiBJRExFIHRoZSBzeXMuc3RkKiBzdHJlYW1zIG5vdyBpbXBsZW1lbnQgaW8uVGV4dElPQmFzZQorICBpbnRlcmZhY2UgYW5kIHN1cHBvcnQgYWxsIG1hbmRhdG9yeSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzLgorCistIElzc3VlICM1MDY2OiBVcGRhdGUgSURMRSBkb2NzLiBQYXRjaCBieSBUb2RkIFJvdml0by4KKworLSBJc3N1ZSAjMTY4Mjk6IElETEUgcHJpbnRpbmcgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZXJlIGFyZSBzcGFjZXMgb3Igb3RoZXIKKyAgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIHBhdGguCisKKy0gSXNzdWUgIzE2NDkxOiBJRExFIG5vdyBwcmludHMgY2hhaW5lZCBleGNlcHRpb24gdHJhY2ViYWNrcy4KKworLSBJc3N1ZSAjMTY4MTk6IElETEUgbWV0aG9kIGNvbXBsZXRpb24gbm93IGNvcnJlY3RseSB3b3JrcyBmb3IgYnl0ZXMgbGl0ZXJhbHMuCisKKy0gSXNzdWUgIzE2NTA0OiBJRExFIG5vdyBjYXRjaGVzIFN5bnRheEVycm9ycyByYWlzZWQgYnkgdG9rZW5pemVyLiBQYXRjaCBieQorICBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTY1MTE6IFVzZSBkZWZhdWx0IElETEUgd2lkdGggYW5kIGhlaWdodCBpZiBjb25maWcgcGFyYW0gaXMgbm90IHZhbGlkLgorICBQYXRjaCBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMjA3NTg5OiBBZGQgQ3V0L0NvcHkvUGFzdGUgaXRlbXMgdG8gSURMRSByaWdodCBjbGljayBDb250ZXh0IE1lbnUKKyAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCisKKy0gSXNzdWUgIzE2MTIzOiBJRExFIC0gZGVwcmVjYXRlIHJ1bm5pbmcgd2l0aG91dCBhIHN1YnByb2Nlc3MuCisgIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCiBUZXN0cwogLS0tLS0KIAotLSBJc3N1ZSAjMTQ0MDc6IEZpeCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBpbiB0ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy4KLQotLSBJc3N1ZSAjMTg5MTk6IFVuaWZpZWQgYW5kIGV4dGVuZGVkIHRlc3RzIGZvciBhdWRpbyBtb2R1bGVzOiBhaWZjLCBzdW5hdSBhbmQKLSAgd2F2ZS4KLQotLSBJc3N1ZSAjMTg5NTI6IEZpeCByZWdyZXNzaW9uIGluIHN1cHBvcnQgZGF0YSBkb3dubG9hZHMgaW50cm9kdWNlZCB3aGVuCi0gIHRlc3Quc3VwcG9ydCB3YXMgY29udmVydGVkIHRvIGEgcGFja2FnZS4gUmVncmVzc2lvbiBub3RpY2VkIGJ5IFphY2hhcnkKLSAgV2FyZS4KLQotLSBJc3N1ZSAjMTIwMzc6IEZpeCB0ZXN0X2VtYWlsIGZvciBkZXNrdG9wIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE1NTA3OiB0ZXN0X3N1YnByb2Nlc3MncyB0ZXN0X3NlbmRfc2lnbmFsIGNvdWxkIGZhaWwgaWYgdGhlIHRlc3QKLSAgcnVubmVyIHdlcmUgcnVuIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBwcm9jZXNzIGluaGVyaXRlZCBhbiBpZ25vcmUKLSAgc2V0dGluZyBmb3IgU0lHSU5ULiAgUmVzdG9yZSB0aGUgU0lHSU5UIGhhbmRsZXIgdG8gdGhlIGRlc2lyZWQKLSAgS2V5Ym9hcmRJbnRlcnJ1cHQgcmFpc2luZyBvbmUgZHVyaW5nIHRoYXQgdGVzdC4KLQotLSBJc3N1ZSAjMTg3OTI6IFVzZSAiMTI3LjAuMC4xIiBvciAiOjoxIiBpbnN0ZWFkIG9mICJsb2NhbGhvc3QiIGFzIG11Y2ggYXMKLSAgcG9zc2libGUsIHNpbmNlICJsb2NhbGhvc3QiIGdvZXMgdGhyb3VnaCBhIEROUyBsb29rdXAgdW5kZXIgcmVjZW50IFdpbmRvd3MKLSAgdmVyc2lvbnMuCi0KIC0gSXNzdWUgIzE2NjYzMTg6IEFkZCBhIHRlc3QgdGhhdCBzaHV0aWwuY29weXRyZWUoKSByZXRhaW5zIGRpcmVjdG9yeQogICBwZXJtaXNzaW9ucy4gIFBhdGNoIGJ5IENhdGhlcmluZSBEZXZsaW4uCiAKLS0gSXNzdWUgIzE4MzU3OiBhZGQgdGVzdHMgZm9yIGRpY3R2aWV3IHNldCBkaWZmZXJlbmNlLgotICBQYXRjaCBieSBGcmFzZXIgVHdlZWRhbGUuCi0KIC0gSXNzdWUgIzE4MjczOiBtb3ZlIHRoZSB0ZXN0cyBpbiBMaWIvdGVzdC9qc29uX3Rlc3RzIHRvIExpYi90ZXN0L3Rlc3RfanNvbgogICBhbmQgbWFrZSB0aGVtIGRpc2NvdmVyYWJsZSBieSB1bml0dGVzdC4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIApAQCAtMTIzNSwyODUgKzQ1OTAsMTMgQEAKIAogLSBJc3N1ZSAjMTExODU6IEZpeCB0ZXN0X3dhaXQ0IHVuZGVyIEFJWC4gIFBhdGNoIGJ5IFPDqWJhc3RpZW4gU2FibMOpLgogCi0tIElzc3VlICMxNzY5MTogdGVzdF91bml2bmV3bGluZXMgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCi0gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKy0gSXNzdWUgIzE4MjA3OiBGaXggdGVzdF9zc2wgZm9yIHNvbWUgdmVyc2lvbnMgb2YgT3BlblNTTCB0aGF0IGlnbm9yZSBzZWNvbmRzCisgIGluIEFTTjFfVElNRSBmaWVsZHMuCiAKLS0gSXNzdWUgIzE4MDk0OiB0ZXN0X3V1aWQgbm8gbW9yZSByZXBvcnRzIHNraXBwZWQgdGVzdHMgYXMgcGFzc2VkLgorLSBJc3N1ZSAjMTgwOTQ6IHRlc3RfdXVpZCBubyBsb25nZXIgcmVwb3J0cyBza2lwcGVkIHRlc3RzIGFzIHBhc3NlZC4KIAotLSBJc3N1ZSAjMTE5OTU6IHRlc3RfcHlkb2MgZG9lc24ndCBpbXBvcnQgYWxsIHN5cy5wYXRoIG1vZHVsZXMgYW55bW9yZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxOTM5MjogRG9jdW1lbnQgdGhhdCBgaW1wLnJlbG9hZCgpYCBub3cgYWxzbyByZXF1aXJlcyBgX19sb2FkZXJfX2AgdG8KLSAgYmUgc2V0IG9uIHRoZSBtb2R1bGUgYmVpbmcgcmVsb2FkZWQuCi0KLS0gSXNzdWUgIzE4NzU4OiBGaXhlZCBhbmQgaW1wcm92ZWQgY3Jvc3MtcmVmZXJlbmNlcy4KLQotLSBJc3N1ZSAjMTg3NDM6IEZpeCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGFudCAiU3RyaW5nSU8iIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTg3ODM6IFJlbW92ZWQgZXhpc3RpbmcgbWVudGlvbnMgb2YgUHl0aG9uIGxvbmcgdHlwZSBpbiBkb2NzdHJpbmdzLAotICBlcnJvciBtZXNzYWdlcyBhbmQgY29tbWVudHMuCi0KLS0gSXNzdWUgIzE3NzAxOiBJbXByb3Zpbmcgc3RyZnRpbWUgZG9jdW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjMTg0NDA6IENsYXJpZnkgdGhhdCBgaGFzaCgpYCBjYW4gdHJ1bmNhdGUgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4KLSAgb2JqZWN0J3MgY3VzdG9tIGBfX2hhc2hfXygpYCBtZXRob2QuCi0KLS0gSXNzdWUgIzE3OTUzOiBNZW50aW9uIHRoYXQgeW91IHNob3VsZG4ndCByZXBsYWNlIHN5cy5tb2R1bGVzIGFuZCBkZWxldGluZyBrZXkKLSAgaXRlbXMgd2lsbCBjYXVzZSBQeXRob24gdG8gbm90IGJlIGhhcHB5LgotCi0tIElzc3VlICMxNzg0NDogQWRkIGxpbmtzIHRvIGVuY29kZXJzIGFuZCBkZWNvZGVycyBmb3IgYnl0ZXMtdG8tYnl0ZXMgY29kZWNzLgotCi0tIElzc3VlICMxNDA5NzogaW1wcm92ZSB0aGUgImludHJvZHVjdGlvbiIgcGFnZSBvZiB0aGUgdHV0b3JpYWwuCi0KLS0gSXNzdWUgIzE3OTc3OiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNhZGVmYXVsdCBhcmd1bWVudCdzIGRlZmF1bHQgdmFsdWUKLSAgaW4gdXJsbGliLnJlcXVlc3QudXJsb3BlbigpIGlzIGZpeGVkIHRvIG1hdGNoIHRoZSBjb2RlLgotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTg4NzM6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBkZXRlY3QgUHl0aG9uIHNvdXJjZQotICBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KLQotLSBJc3N1ZSAjMTg4MTc6IEZpeCBhIHJlc291cmNlIHdhcm5pbmcgaW4gTGliL2FpZmMucHkgZGVtby4KLQotLSBJc3N1ZSAjMTg0Mzk6IE1ha2UgcGF0Y2hjaGVjayB3b3JrIG9uIFdpbmRvd3MgZm9yIEFDS1MsIE5FV1MuCi0KLS0gSXNzdWUgIzE4NDQ4OiBGaXggYSB0eXBvIGluIFRvb2xzL2RlbW8vZWlmZmVsLnB5LgotCi0tIElzc3VlICMxODQ1NzogRml4ZWQgc2F2aW5nIG9mIGZvcm11bGFzIGFuZCBjb21wbGV4IG51bWJlcnMgaW4KLSAgVG9vbHMvZGVtby9zczEucHkuCi0KLS0gSXNzdWUgIzE4NDQ5OiBNYWtlIFRvb2xzL2RlbW8vc3MxLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuICBQYXRjaCBieQotICBGw6l2cnkgVGhpYmF1bHQuCi0KLS0gSXNzdWUgIzE1MjM5OiBNYWtlIG1rc3RyaW5ncHJlcC5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLgotCi0tIElzc3VlICMxMjk5MDogVGhlICJQeXRob24gTGF1bmNoZXIiIG9uIE9TWCBjb3VsZCBub3QgbGF1bmNoIHB5dGhvbiBzY3JpcHRzCi0gIHRoYXQgaGF2ZSBwYXRocyB0aGF0IGluY2x1ZGUgd2lkZSBjaGFyYWN0ZXJzLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTkzNTY6IEF2b2lkIHVzaW5nIGEgQyB2YXJpYWJsZWQgbmFtZWQgIl9zZWxmIiwgaXQncyBhIHJlc2VydmVkCi0gIHdvcmQgaW4gc29tZSBDIGNvbXBpbGVycy4KLQotLSBJc3N1ZSAjMTkxMzA6IENvcnJlY3QgUENidWlsZC9yZWFkbWUudHh0LCBQeXRob24gMy4zIGFuZCAzLjQgcmVxdWlyZSBWUyAyMDEwLgotCi0tIElzc3VlICMxNjA2NzogQWRkIGRlc2NyaXB0aW9uIGludG8gTVNJIGZpbGUgdG8gcmVwbGFjZSBpbnN0YWxsZXIncyB0ZW1wb3JhcnkgbmFtZS4KLQotLSBJc3N1ZSAjMTgyNTY6IENvbXBpbGF0aW9uIGZpeCBmb3IgcmVjZW50IEFJWCByZWxlYXNlcy4gIFBhdGNoIGJ5Ci0gIERhdmlkIEVkZWxzb2huLgotCi0tIElzc3VlICMxNTE3MjogRG9jdW1lbnQgTkFTTSAyLjEwKyBhcyByZXF1aXJlbWVudCBmb3IgYnVpbGRpbmcgT3BlblNTTCAxLjAuMQotICBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNTg0OiBQcm92aWRlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZm9yCi0gIFRjbCBhbmQgVGsgd2hlbiBidWlsZGluZyBfdGtpbnRlci4KLQotLSBJc3N1ZSAjMTU2NjM6IFRjbC9UayA4LjUuMTUgaXMgbm93IGluY2x1ZGVkIHdpdGggdGhlIE9TIFggMTAuNisKLSAgNjQtYml0LzMyLWJpdCBpbnN0YWxsZXIgZm9yIDEwLjYrLiAgSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeQotICB0byBpbnN0YWxsIGEgdGhpcmQtcGFydHkgdmVyc2lvbiBvZiBUY2wvVGsgOC41IHRvIHdvcmsgYXJvdW5kIHRoZQotICBwcm9ibGVtcyBpbiB0aGUgQXBwbGUtc3VwcGxpZWQgVGNsL1RrIDguNSBzaGlwcGVkIGluIE9TIFggMTAuNgotICBhbmQgbGF0ZXIgcmVsZWFzZXMuCi0KLS0gSXNzdWUgIzE5MDE5OiBDaGFuZ2UgdGhlIE9TIFggaW5zdGFsbGVyIGJ1aWxkIHNjcmlwdCB0byB1c2UgQ0ZMQUdTIGluc3RlYWQKLSAgb2YgT1BUIGZvciBzcGVjaWFsIGJ1aWxkIG9wdGlvbnMuICBCeSBzZXR0aW5nIE9QVCwgc29tZSBjb21waWxlci1zcGVjaWZpYwotICBvcHRpb25zIGxpa2UgLWZ3cmFwdiB3ZXJlIG92ZXJyaWRkZW4gYW5kIHRodXMgbm90IHVzZWQsIHdoaWNoIGNvdWxkIHJlc3VsdAotICBpbiBicm9rZW4gaW50ZXJwcmV0ZXJzIHdoZW4gYnVpbGRpbmcgd2l0aCBjbGFuZy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxMy1NYXktMjAxMyoKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3MjM3OiBGaXggY3Jhc2ggaW4gdGhlIEFTQ0lJIGRlY29kZXIgb24gbTY4ay4KLQotLSBJc3N1ZSAjMTc0MDg6IEF2b2lkIHVzaW5nIGFuIG9ic29sZXRlIGluc3RhbmNlIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSB3aGVuCi0gIHRoZSBpbnRlcnByZXRlciBpcyBzaHV0ZG93biBhbmQgdGhlbiBzdGFydGVkIGFnYWluLgotCi0tIElzc3VlICMxNzg2MzogSW4gdGhlIGludGVyYWN0aXZlIGNvbnNvbGUsIGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGUgZW5jb2RpbmcKLSAgY2FuJ3QgYmUgZmV0Y2hlZCBmcm9tIHN0ZGluLgotCi0tIElzc3VlICMxNzg2NzogUmFpc2UgYW4gSW1wb3J0RXJyb3IgaWYgX19pbXBvcnRfXyBpcyBub3QgZm91bmQgaW4gX19idWlsdGluc19fLgotCi0tIElzc3VlICMxNzg1NzogUHJldmVudCBidWlsZCBmYWlsdXJlcyB3aXRoIHByZS0zLjUuMCB2ZXJzaW9ucyBvZiBzcWxpdGUzLAotICBzdWNoIGFzIHdhcyBzaGlwcGVkIHdpdGggQ2VudG9zIDUgYW5kIE1hYyBPUyBYIDEwLjQuCi0KLS0gSXNzdWUgIzE3NDEzOiBzeXMuc2V0dHJhY2UgY2FsbGJhY2tzIHdlcmUgYmVpbmcgcGFzc2VkIGEgc3RyaW5nIGluc3RlYWQgb2YgYW4KLSAgZXhjZXB0aW9uIGluc3RhbmNlIGZvciB0aGUgJ3ZhbHVlJyBlbGVtZW50IG9mIHRoZSBhcmcgdHVwbGUgaWYgdGhlIGV4Y2VwdGlvbgotICBvcmlnaW5hdGVkIGZyb20gQyBjb2RlOyBub3cgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGlzIGFsd2F5cyBwcm92aWRlZC4KLQotLSBJc3N1ZSAjMTc3ODI6IEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9uIHBsYXRmb3JtcyB3aGVyZQotICBgYHN0cnVjdCB0aW1lc3BlY2BgJ3MgInR2X25zZWMiIG1lbWJlciBpcyBub3QgYSBDIGxvbmcuCi0KLS0gSXNzdWUgIzE3NzE1OiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gaW4gYSBfX3RydW5jX18KLSAgbWV0aG9kLgotCi0tIElzc3VlICMxNjQ0NzogRml4ZWQgcG90ZW50aWFsIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHNldHRpbmcgX19uYW1lX18gb24gYQotICBjbGFzcy4KLQotLSBJc3N1ZSAjMTc2Njk6IEZpeCBjcmFzaCBpbnZvbHZpbmcgZmluYWxpemF0aW9uIG9mIGdlbmVyYXRvcnMgdXNpbmcgeWllbGQgZnJvbS4KLQotLSBJc3N1ZSAjMTc2MTk6IE1ha2UgaW5wdXQoKSBjaGVjayBmb3IgQ3RybC1DIGNvcnJlY3RseSBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNzYxMDogRG9uJ3QgcmVseSBvbiBub24tc3RhbmRhcmQgYmVoYXZpb3Igb2YgdGhlIEMgcXNvcnQoKSBmdW5jdGlvbi4KLQotLSBJc3N1ZSAjMTczNTc6IEFkZCBtaXNzaW5nIHZlcmJvc2l0eSBvdXRwdXQgd2hlbiB1c2luZyAtdi8tdnYuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc2MDY6IEZpeGVkIHN1cHBvcnQgb2YgZW5jb2RlZCBieXRlIHN0cmluZ3MgaW4gdGhlIFhNTEdlbmVyYXRvcgotICBjaGFyYWN0ZXJzKCkgYW5kIGlnbm9yYWJsZVdoaXRlc3BhY2UoKSBtZXRob2RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgU2ViYXN0aWFuCi0gIE9ydGl6IFZhc3F1ZXouCi0KLS0gSXNzdWUgIzE3NzMyOiBJZ25vcmUgZGlzdHV0aWxzLmNmZyBvcHRpb25zIHBlcnRhaW5pbmcgdG8gaW5zdGFsbCBwYXRocyBpZiBhCi0gIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlLgotCi0tIElzc3VlICMxMTU5MDUxOiBCYWNrIG91dCBhIGZpeCBmb3IgaGFuZGxpbmcgY29ycnVwdGVkIGd6aXAgZmlsZXMgdGhhdAotICBicm9rZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLQotLSBJc3N1ZSAjMTc5MTU6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IG9mIHhtbC5zYXggd2l0aCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkKLSAgY29kZWNzLm9wZW4oKS4KLQotLSBJc3N1ZSAjMTY2MDE6IFJlc3RhcnRpbmcgaXRlcmF0aW9uIG92ZXIgdGFyZmlsZSBubyBtb3JlIGNvbnRpbnVlcyBmcm9tIHdoZXJlCi0gIGl0IGxlZnQgb2ZmLiAgUGF0Y2ggYnkgTWljaGFlbCBCaXJ0d2VsbC4KLQotLSBJc3N1ZSAjMTcyODk6IFRoZSByZWFkbGluZSBtb2R1bGUgbm93IHBsYXlzIG5pY2VyIHdpdGggZXh0ZXJuYWwgbW9kdWxlcwotICBvciBhcHBsaWNhdGlvbnMgY2hhbmdpbmcgdGhlIHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgZ2xvYmFsCi0gIHZhcmlhYmxlLiAgSW5pdGlhbCBwYXRjaCBieSBCcmFkbGV5IEZyb2VobGUuCi0KLS0gSXNzdWUgIzEyMTgxOiBzZWxlY3QgbW9kdWxlOiBGaXggc3RydWN0IGtldmVudCBkZWZpbml0aW9uIG9uIE9wZW5CU0QgNjQtYml0Ci0gIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgRmVkZXJpY28gU2Nod2luZHQuCi0KLS0gSXNzdWUgIzE0MTczOiBBdm9pZCBjcmFzaGluZyB3aGVuIHJlYWRpbmcgYSBzaWduYWwgaGFuZGxlciBkdXJpbmcKLSAgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCi0KLS0gSXNzdWUgIzE2MzE2OiBtaW1ldHlwZXMgbm93IHJlY29nbml6ZXMgdGhlIC54eiBhbmQgLnR4eiAoLnRhci54eikgZXh0ZW5zaW9ucy4KLQotLSBJc3N1ZSAjMTU5MDI6IEZpeCBpbXAubG9hZF9tb2R1bGUoKSBhY2NlcHRpbmcgTm9uZSBhcyBhIGZpbGUgd2hlbiBsb2FkaW5nIGFuCi0gIGV4dGVuc2lvbiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE3ODAyOiBGaXggYW4gVW5ib3VuZExvY2FsRXJyb3IgaW4gaHRtbC5wYXJzZXIuICBJbml0aWFsIHRlc3RzIGJ5Ci0gIFRob21hcyBCYXJsb3cuCi0KLS0gSXNzdWUgIzE1NTM1OiBGaXggbmFtZWR0dXBsZSBwaWNrbGVzIHdoaWNoIHdlcmUgcGlja2luZyB1cCB0aGUgT3JkZXJlZERpY3QKLSAgaW5zdGVhZCBvZiBqdXN0IHRoZSB1bmRlcmx5aW5nIHR1cGxlLgotCi0tIElzc3VlICMxNzE5MjogUmVzdG9yZSB0aGUgcGF0Y2ggZm9yIElzc3VlICMxMTcyOSB3aGljaCB3YXMgb21taXR0ZWQgaW4KLSAgMy4zLjEgd2hlbiB1cGRhdGluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIGxpYmZmaSB1c2VkIGJ5IGN0eXBlcy4gIFVwZGF0ZQotICBtYW55IGxpYmZmaSBmaWxlcyB0aGF0IHdlcmUgbWlzc2VkIGluIDMuMy4xJ3MgdXBkYXRlIHRvIGxpYmZmaS0zLjAuMTMuCi0KLS0gSXNzdWUgIzE3MzU4OiBNb2R1bGVzIGxvYWRlZCBieSBpbXAubG9hZF9zb3VyY2UoKSBhbmQgbG9hZF9jb21waWxlZCgpIChhbmQgYnkKLSAgZXh0ZW50aW9uIGxvYWRfbW9kdWxlKCkpIG5vdyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiB3b3JraW5nIHdoZW4gcmVsb2FkZWQuCi0KLS0gSXNzdWUgIzE3MzUzOiBQbGlzdGxpYiBlbWl0dGVkIGVtcHR5IGRhdGEgdGFncyB3aXRoIGRlZXBseSBuZXN0ZWQgZGF0YXN0cnVjdHVyZXMKLQotLSBJc3N1ZSAjMTE3MTQ6IFVzZSAnd2l0aCcgc3RhdGVtZW50cyB0byBhc3N1cmUgYSBTZW1hcGhvcmUgcmVsZWFzZXMgYQotICBjb25kaXRpb24gdmFyaWFibGUuICBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgUmFjaGVsLgotCi0tIElzc3VlICMxNzc5NTogUmV2ZXJ0ZWQgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UgaW4gU3lzTG9nSGFuZGxlciB3aXRoCi0gIFVuaXggZG9tYWluIHNvY2tldHMuCi0KLS0gSXNzdWUgIzE3NTU1OiBGaXggRm9ya0F3YXJlVGhyZWFkTG9jayBzbyB0aGF0IHNpemUgb2YgYWZ0ZXIgZm9yawotICByZWdpc3RyeSBkb2VzIG5vdCBncm93IGV4cG9uZW50aWFsbHkgd2l0aCBnZW5lcmF0aW9uIG9mIHByb2Nlc3MuCi0KLS0gSXNzdWUgIzE3NzA3OiBtdWx0aXByb2Nlc3NpbmcuUXVldWUncyBnZXQoKSBtZXRob2QgZG9lcyBub3QgYmxvY2sgZm9yIHNob3J0Ci0gIHRpbWVvdXRzLgotCi0tIElzdXNlICMxNzcyMDogRml4IHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgcGlja2xlLlVucGlja2xlciB0byBjb3JyZWN0bHkKLSAgcHJvY2VzcyB0aGUgQVBQRU5EUyBvcGNvZGUgd2hlbiBpdCBpcyB1c2VkIG9uIG5vbi1saXN0IG9iamVjdHMuCi0KLS0gSXNzdWUgIzE3MDEyOiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgZmFsbGJhY2tzIHRvIHRoZSBQQVRIIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlIGlmIGVtcHR5IHBhdGggYXJndW1lbnQgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTc3MTA6IEZpeCBwaWNrbGUgcmFpc2luZyBhIFN5c3RlbUVycm9yIG9uIGJvZ3VzIGlucHV0LgotCi0tIElzc3VlICMxNzM0MTogSW5jbHVkZSB0aGUgaW52YWxpZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHJlIGFib3V0Ci0gIGludmFsaWQgZ3JvdXAgbmFtZXMuCi0KLS0gSXNzdWUgIzE3NzAyOiBvcy5lbnZpcm9uIG5vdyByYWlzZXMgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgbmFtZSAoc3RyIG9uIFVOSVgpLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbmNvZGVkIG5hbWUgKGJ5dGVzIG9uCi0gIFVOSVgpLgotCi0tIElzc3VlICMxNjE2MzogTWFrZSB0aGUgaW1wb3J0bGliIGJhc2VkIHZlcnNpb24gb2YgcGtndXRpbC5pdGVyX2ltcG9ydGVycwotICB3b3JrIGZvciBzdWJtb2R1bGVzLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCi0KLS0gSXNzdWUgIzE2ODA0OiBGaXggYSBidWcgaW4gdGhlICdzaXRlJyBtb2R1bGUgdGhhdCBjYXVzZWQgcnVubmluZwotICAncHl0aG9uIC1TIC1tIHNpdGUnIHRvIGluY29ycmVjdGx5IHRocm93IGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjMTcwMTY6IEdldCByaWQgb2YgcG9zc2libGUgcG9pbnRlciB3cmFwYXJvdW5kcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MKLSAgaW4gdGhlIHJlIG1vZHVsZS4gIFBhdGNoIGJ5IE5pY2tvbGFpIFplbGRvdmljaC4KLQotLSBJc3N1ZSAjMTY2NTg6IGFkZCBtaXNzaW5nIHJldHVybiB0byBIVFRQQ29ubmVjdGlvbi5zZW5kKCkKLSAgUGF0Y2ggYnkgSmVmZiBLbnVwcC4KLQotLSBJc3N1ZSAjMTQ5NzE6IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IG5vIGxvbmdlciBnZXRzIGNvbmZ1c2VkIHdoZW4gYSBmdW5jdGlvbgotICBoYXMgYSBkaWZmZXJlbnQgX19uYW1lX18gdGhhbiBpdHMgbmFtZSBpbiB0aGUgVGVzdENhc2UgY2xhc3MgZGljdGlvbmFyeS4KLQotLSBJc3N1ZSAjMTc2Nzg6IEZpeCBEZXByZWNhdGlvbldhcm5pbmcgaW4gdGhlIGh0dHAvY29va2llamFyLnB5IGJ5IGNoYW5naW5nIHRoZQotICB1c2FnZSBvZiBnZXRfb3JpZ2luX3JlcV9ob3N0KCkgdG8gb3JpZ2luX3JlcV9ob3N0LgotCi0tIElzc3VlICMxNzY2NjogRml4IHJlYWRpbmcgZ3ppcCBmaWxlcyB3aXRoIGFuIGV4dHJhIGZpZWxkLgotCi0tIElzc3VlICMxNzUwMjogUHJvY2VzcyBERUZBVUxUIHZhbHVlcyBpbiBtb2NrIHNpZGVfZWZmZWN0IHRoYXQgcmV0dXJucyBpdGVyYXRvci4KLSAgUGF0Y2ggYnkgTWljaGFlbCBGb29yZC4KLQotLSBJc3N1ZSAjMTc1NzI6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGlsZSBwYXNzaW5nIGJhZCBkaXJlY3RpdmVzIHRvCi0gIHRpbWUuc3RycHRpbWUoKS4gIEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgotCi0tIElzc3VlICMxNzQzNTogdGhyZWFkaW5nLlRpbWVyJ3MgX19pbml0X18gbWV0aG9kIG5vIGxvbmdlciB1c2VzIG11dGFibGUKLSAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBhcmdzIGFuZCBrd2FyZ3MgcGFyYW1ldGVycy4KLQotLSBJc3N1ZSAjMTc1MjY6IGZpeCBhbiBJbmRleEVycm9yIHJhaXNlZCB3aGlsZSBwYXNzaW5nIGNvZGUgd2l0aG91dCBmaWxlbmFtZSB0bwotICBpbnNwZWN0LmZpbmRzb3VyY2UoKS4gIEluaXRpYWwgcGF0Y2ggYnkgVHlsZXIgRG95bGUuCi0KLS0gSXNzdWUgIzE2NTUwOiBVcGRhdGUgdGhlIG9wY29kZSBkZXNjcmlwdGlvbnMgb2YgcGlja2xldG9vbHMgdG8gdXNlIHVuc2lnbmVkCi0gIGludGVnZXJzIHdoZXJlIGFwcHJvcHJpYXRlLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzE3ODM4OiBBbGxvdyBzeXMuc3RkaW4gdG8gYmUgcmVhc3NpZ25lZC4KLQotLSBJc3N1ZSAjMTM0OTU6IEF2b2lkIGxvYWRpbmcgdGhlIGNvbG9yIGRlbGVnYXRvciB0d2ljZSBpbiBJRExFLgotCi0tIElzc3VlICMxNzc5ODogQWxsb3cgSURMRSB0byBlZGl0IG5ldyBmaWxlcyB3aGVuIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuCi0KLS0gSXNzdWUgIzE0NzM1OiBVcGRhdGUgSURMRSBkb2NzIHRvIG9taXQgIkNvbnRyb2wteiBvbiBXaW5kb3dzIi4KLQotLSBJc3N1ZSAjMTc1ODU6IEZpeGVkIElETEUgcmVncmVzc2lvbi4gTm93IGNsb3NlcyB3aGVuIHVzaW5nIGV4aXQoKSBvciBxdWl0KCkuCi0KLS0gSXNzdWUgIzE3NjU3OiBTaG93IGZ1bGwgVGsgdmVyc2lvbiBpbiBJRExFJ3MgYWJvdXQgZGlhbG9nLgotICBQYXRjaCBieSBUb2RkIFJvdml0by4KLQotLSBJc3N1ZSAjMTc2MTM6IFByZXZlbnQgdHJhY2ViYWNrIHdoZW4gcmVtb3Zpbmcgc3ludGF4IGNvbG9yaXplciBpbiBJRExFLgotCi0tIElzc3VlICMxMjA3NTg5OiBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBwYXRjaCBmb3IgcmlnaHQtY2xpY2sgbWVudSBpbiBJRExFLgotCi0tIElzc3VlICMxNjg4NzogSURMRSBub3cgYWNjZXB0cyBDYW5jZWwgaW4gdGFiaWZ5L3VudGFiaWZ5IGRpYWxvZyBib3guCi0KLS0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KLQotLSBJc3N1ZSAjMTQyNTQ6IElETEUgbm93IGhhbmRsZXMgcmVhZGxpbmUgY29ycmVjdGx5IGFjcm9zcyBzaGVsbCByZXN0YXJ0cy4KLQotLSBJc3N1ZSAjMTc2MTQ6IElETEUgbm8gbG9uZ2VyIHJhaXNlcyBleGNlcHRpb24gd2hlbiBxdWlja2x5IGNsb3NpbmcgYSBmaWxlLgotCi0tIElzc3VlICM2Njk4OiBJRExFIG5vdyBvcGVucyBqdXN0IGFuIGVkaXRvciB3aW5kb3cgd2hlbiBjb25maWd1cmVkIHRvIGRvIHNvLgotCi0tIElzc3VlICM4OTAwOiBVc2luZyBrZXlib2FyZCBzaG9ydGN1dHMgaW4gSURMRSB0byBvcGVuIGEgZmlsZSBubyBsb25nZXIKLSAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjNjY0OTogRml4ZWQgbWlzc2luZyBleGl0IHN0YXR1cyBpbiBJRExFLiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotVGVzdHMKLS0tLS0tCistIElzc3VlICMxNzk5MjogQWRkIHRpbWVvdXRzIHRvIGFzeW5jb3JlIGFuZCBhc3luY2hhdCB0ZXN0cyBzbyB0aGF0IHRoZXkgd29uJ3QKKyAgYWNjaWRlbnRhbGx5IGhhbmcuCiAKIC0gSXNzdWUgIzE3ODMzOiBGaXggdGVzdF9nZGIgZmFpbHVyZXMgc2VlbiBvbiBtYWNoaW5lcyB3aGVyZSBkZWJ1ZyBzeW1ib2xzCiAgIGZvciBnbGliYyBhcmUgYXZhaWxhYmxlIChzZWVuIG9uIFBQQzY0IExpbnV4KS4KQEAgLTE1MjEsNiArNDYwNCw5IEBACiAtIElzc3VlICM3ODU1OiBBZGQgdGVzdHMgZm9yIGN0eXBlcy93aW5yZWcgZm9yIGlzc3VlcyBmb3VuZCBpbiBJcm9uUHl0aG9uLgogICBJbml0aWFsIHBhdGNoIGJ5IERpbm8gVmllaGxhbmQuCiAKKy0gSXNzdWUgIzExMDc4OiB0ZXN0X19fYWxsX18gbm93IGNoZWNrcyBmb3IgZHVwbGljYXRlcyBpbiBfX2FsbF9fLgorICBJbml0aWFsIHBhdGNoIGJ5IFIuIERhdmlkIE11cnJheS4KKwogLSBJc3N1ZSAjMTc3MTI6IEZpeCB0ZXN0X2dkYiBmYWlsdXJlcyBvbiBVYnVudHUgMTMuMDQuCiAKIC0gSXNzdWUgIzE3ODM1OiBGaXggdGVzdF9pbyB3aGVuIHRoZSBkZWZhdWx0IE9TIHBpcGUgYnVmZmVyIHNpemUgaXMgbGFyZ2VyCkBAIC0xNTMyLDYgKzQ2MTgsOSBAQAogLSBJc3N1ZSAjMTI4MjA6IGFkZCB0ZXN0cyBmb3IgdGhlIHhtbC5kb20ubWluaWNvbXBhdCBtb2R1bGUuCiAgIFBhdGNoIGJ5IEpvaG4gQ2hhbmRsZXIgYW5kIFBoaWwgQ29ubmVsbC4KIAorLSBJc3N1ZSAjMTc2OTE6IHRlc3RfdW5pdm5ld2xpbmVzIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKIC0gSXNzdWUgIzE3NzkwOiB0ZXN0X3NldCBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KICAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgogCkBAIC0xNTUwLDcxNiArNDYzOSw3IEBACiAtIElzc3VlICMxNzY5MjogdGVzdF9zcWxpdGUgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIAotLSBJc3N1ZSAjMTc4NDM6IFJlbW92ZWQgYnoyIHRlc3QgZGF0YSBmaWxlIHRoYXQgd2FzIHRyaWdnZXJpbmcgZmFsc2UtcG9zaXRpdmUKLSAgdmlydXMgd2FybmluZ3Mgd2l0aCBjZXJ0YWluIGFudGl2aXJ1cyBzb2Z0d2FyZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNTk0MDogU3BlY2lmeSBlZmZlY3Qgb2YgbG9jYWxlIG9uIHRpbWUgZnVuY3Rpb25zLgotCi0tIElzc3VlICM2Njk2OiBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFByb2ZpbGUgb2JqZWN0cywgYW5kIGltcHJvdmUKLSAgcHJvZmlsZS9jUHJvZmlsZSBkb2NzLiAgUGF0Y2ggYnkgVG9tIFBpbmNrbmV5LgotCi0tIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQotICBjb2RlY3Mub3BlbigpLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTc1NDc6IEluIGNvbmZpZ3VyZSwgZXhwbGljaXRseSBwYXNzIC1XZm9ybWF0IGZvciB0aGUgYmVuZWZpdCBmb3IgR0NDCi0gIDQuOC4KLQotLSBJc3N1ZSAjMTc5NjI6IEJ1aWxkIHdpdGggT3BlblNTTCAxLjAuMWUgb24gV2luZG93cy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwNy1BcHItMjAxMyoKLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTUwOiBGaXggdGhlIC0tZW5hYmxlLXByb2ZpbGluZyBjb25maWd1cmUgc3dpdGNoLgotCi1JRExFCi0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMSByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjQtTWFyLTIwMTMqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNzMyODogRml4IHBvc3NpYmxlIHJlZmxlYWsgaW4gZGljdC5zZXRkZWZhdWx0LgotCi0tIElzc3VlICMxNzIyMzogRml4IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgpIGZvciBzdHJpbmcgb2YgMSBjaGFyYWN0ZXIgb3V0c2lkZQotICB0aGUgcmFuZ2UgVSswMDAwLVUrMTBmZmZmLgotCi0tIElzc3VlICMxNjkyMzM1OiBNb3ZlIGluaXRpYWwgYXJncyBhc3NpZ25tZW50IHRvCi0gIEJhc2VFeGNlcHRpb24uX19uZXdfXyB0byBoZWxwIHBpY2tsaW5nIG9mIG5haXZlIHN1YmNsYXNzZXMuCi0KLS0gSXNzdWUgIzE3Mjc1OiBDb3JyZWN0ZWQgY2xhc3MgbmFtZSBpbiBpbml0IGVycm9yIG1lc3NhZ2VzIG9mIHRoZSBDIHZlcnNpb24gb2YKLSAgQnVmZmVyZWRXcml0ZXIgYW5kIEJ1ZmZlcmVkUmFuZG9tLgotCi0tIElzc3VlICM3OTYzOiBGaXhlZCBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2UgdGhhdCBpc3N1ZWQgd2hlbiBvYmplY3QgaXMKLSAgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLgotCi0tIElzc3VlICM1MzA4OiBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gbWFyc2hhbGxpbmcgdG9vIGxhcmdlIG9iamVjdCAoYSBzZXF1ZW5jZQotICB3aXRoIHNpemUgPj0gMioqMzEpLCBpbnN0ZWFkIG9mIHByb2R1Y2luZyBpbGxlZ2FsIG1hcnNoYWwgZGF0YS4KLQotLSBJc3N1ZSAjMTI5ODM6IEJ5dGVzIGxpdGVyYWxzIHdpdGggaW52YWxpZCBceCBlc2NhcGUgbm93IHJhaXNlIGEgU3ludGF4RXJyb3IKLSAgYW5kIGEgZnVsbCB0cmFjZWJhY2sgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLgotCi0tIElzc3VlICMxNzE3MzogUmVtb3ZlIHVzZXMgb2YgbG9jYWxlLWRlcGVuZGVudCBDIGZ1bmN0aW9ucyAoaXNhbHBoYSgpIGV0Yy4pCi0gIGluIHRoZSBpbnRlcnByZXRlci4KLQotLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYW4gVW5pY29kZSBzdHJpbmcgaXMgcmVzaXplZCwgdGhlIGludGVybmFsIHdpZGUgY2hhcmFjdGVyCi0gIHN0cmluZyAod3N0cikgZm9ybWF0IGlzIG5vdyBjbGVhcmVkLgotCi0tIElzc3VlICMxNzA0MzogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZGVjb2RlciBubyBsb25nZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YKLSAgaW5wdXQgYnVmZmVyLgotCi0tIElzc3VlICMxNzA5ODogQWxsIG1vZHVsZXMgbm93IGhhdmUgX19sb2FkZXJfXyBzZXQgZXZlbiBpZiB0aGV5IHByZS1leGlzdCB0aGUKLSAgYm9vdHN0cmFwcGluZyBvZiBpbXBvcnRsaWIuCi0KLS0gSXNzdWUgIzE2OTc5OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVncyBpbiB0aGUgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCi0KLS0gSXNzdWUgIzEwMTU2OiBJbiB0aGUgaW50ZXJwcmV0ZXIncyBpbml0aWFsaXphdGlvbiBwaGFzZSwgdW5pY29kZSBnbG9iYWxzCi0gIGFyZSBub3cgaW5pdGlhbGl6ZWQgZHluYW1pY2FsbHkgYXMgbmVlZGVkLgotCi0tIElzc3VlICMxNjk4MDogRml4IHByb2Nlc3Npbmcgb2YgZXNjYXBlZCBub24tYXNjaWkgYnl0ZXMgaW4gdGhlCi0gIHVuaWNvZGUtZXNjYXBlLWRlY29kZSBkZWNvZGVyLgotCi0tIElzc3VlICMxNjk3NTogRml4IGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiB0aGUgZXNjYXBlLWRlY29kZSBieXRlcyBkZWNvZGVyLgotCi0tIElzc3VlICMxNDg1MDogTm93IGEgY2hhcm1hcCBkZWNvZGVyIHRyZWF0cyBVK0ZGRkUgYXMgInVuZGVmaW5lZCBtYXBwaW5nIgotICBpbiBhbnkgbWFwcGluZywgbm90IG9ubHkgaW4gYSBzdHJpbmcuCi0KLS0gSXNzdWUgIzE2NzMwOiBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgbm93IG5vIGxvbmdlcnMgcmFpc2VzIGFuCi0gIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBwb3B1bGF0ZSBpdHMgY2FjaGUgYW5kIGl0IGZpbmRzIG91dCB0aGUgZGlyZWN0b3J5IGlzCi0gIHVucmVhZGFibGUgb3IgaGFzIHR1cm5lZCBpbnRvIGEgZmlsZS4gUmVwb3J0ZWQgYW5kIGRpYWdub3NlZCBieQotICBEYXZpZCBQcml0Y2hhcmQuCi0KLS0gSXNzdWUgIzE2OTA2OiBGaXggYSBsb2dpYyBlcnJvciB0aGF0IHByZXZlbnRlZCBtb3N0IHN0YXRpYyBzdHJpbmdzIGZyb20gYmVpbmcKLSAgY2xlYXJlZC4KLQotLSBJc3N1ZSAjMTE0NjE6IEZpeCB0aGUgaW5jcmVtZW50YWwgVVRGLTE2IGRlY29kZXIuIE9yaWdpbmFsIHBhdGNoIGJ5Ci0gIEFtYXVyeSBGb3JnZW90IGQnQXJjLgotCi0tIElzc3VlICMxNjg1NjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gY2FsbGluZyByZXByKCkgb24gYSBkaWN0IHdpdGgKLSAgYSBrZXkgd2hvc2UgcmVwciByYWlzZSBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzE2MzY3OiBGaXggRmlsZUlPLnJlYWRhbGwoKSBvbiBXaW5kb3dzIGZvciBmaWxlcyBsYXJnZXIgdGhhbiAyIEdCLgotCi0tIElzc3VlICMxNjQ1NTogT24gRnJlZUJTRCBhbmQgU29sYXJpcywgaWYgdGhlIGxvY2FsZSBpcyBDLCB0aGUKLSAgQVNDSUkvc3Vycm9nYXRlZXNjYXBlIGNvZGVjIGlzIG5vdyB1c2VkLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvCi0gIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBjaGFuZ2UgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIHdpdGgKLSAgb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBiZWNhdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zIGFubm91bmNlcyBhbgotICBBU0NJSSBsb2NhbGUgZW5jb2RpbmcsIHdoZXJlYXMgdGhlIElTTy04ODU5LTEgZW5jb2RpbmcgaXMgdXNlZCBpbiBwcmFjdGljZS4KLQotLSBJc3N1ZSAjMTY3NjE6IENhbGxpbmcgaW50KCkgd2l0aCBiYXNlIGFyZ3VtZW50IG9ubHkgbm93IHJhaXNlcyBUeXBlRXJyb3IuCi0KLS0gSXNzdWUgIzE2NzU5OiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBSZWcyUHkKLSAgd2hlbiByZXRyaWV2aW5nIGEgUkVHX0RXT1JEIHZhbHVlLiBUaGlzIGNvcnJlY3RzIGZ1bmN0aW9ucyBsaWtlCi0gIHdpbnJlZy5RdWVyeVZhbHVlRXggdGhhdCBtYXkgaGF2ZSBiZWVuIHJldHVybmluZyB0cnVuY2F0ZWQgdmFsdWVzLgotCi0tIElzc3VlICMxNDQyMDogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUHkyUmVnCi0gIHdoZW4gcGFzc2VkIGEgUkVHX0RXT1JEIHZhbHVlLiBGaXhlcyBPdmVyZmxvd0Vycm9yIGluIHdpbnJlZy5TZXRWYWx1ZUV4LgotCi0tIElzc3VlICMxNjU5NzogSW4gYnVmZmVyZWQgYW5kIHRleHQgSU8sIGNhbGwgY2xvc2UoKSBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0KLSAgaWYgaW52b2tpbmcgZmx1c2goKSBmYWlscy4KLQotLSBJc3N1ZSAjMTY3MjI6IEluIHRoZSBieXRlcygpIGNvbnN0cnVjdG9yLCB0cnkgdG8gY2FsbCBfX2J5dGVzX18gb24gdGhlCi0gIGFyZ3VtZW50IGJlZm9yZSBfX2luZGV4X18uCi0KLS0gSXNzdWUgIzE2NjAyOiBXaGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcgZGVhbGxvY2F0aW9uCi0gIGNoYWluLCB0aGUgb2JqZWN0IGNvdWxkIHJlbWFpbiByZWFjaGFibGUgdGhyb3VnaCBpdHMgd2Vha3JlZiBldmVuIHRob3VnaAotICBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gemVyby4KLQotLSBJc3N1ZSAjMTY0MTY6IE9uIE1hYyBPUyBYLCBvcGVyYXRpbmcgc3lzdGVtIGRhdGEgYXJlIG5vdyBhbHdheXMKLSAgZW5jb2RlZC9kZWNvZGVkIHRvL2Zyb20gVVRGLTgvc3Vycm9nYXRlZXNjYXBlLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcKLSAgKHdoaWNoIG1heSBiZSBBU0NJSSBpZiBubyBsb2NhbGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgdG8gYXZvaWQKLSAgaW5jb25zaXN0ZW5jaWVzIHdpdGggb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBmdW5jdGlvbnMgd2hpY2ggYXJlCi0gIGFscmVhZHkgdXNpbmcgVVRGLTgvc3Vycm9nYXRlZXNjYXBlLgotCi0tIElzc3VlICMxNjU4ODogU2lsZW5jZSB1bnVzZWQtYnV0LXNldCB3YXJuaW5ncyBpbiBQeXRob24vdGhyZWFkX3B0aHJlYWQKLQotLSBJc3N1ZSAjMTY1NDY6IEZpeDogYXN0LllpZWxkRnJvbSBhcmd1bWVudCBpcyBub3cgbWFuZGF0b3J5LgotCi0tIElzc3VlICMxNjUxNDogRml4IHJlZ3Jlc3Npb24gY2F1c2luZyBhIHRyYWNlYmFjayB3aGVuIHN5cy5wYXRoWzBdIGlzIE5vbmUKLSAgKGFjdHVhbGx5LCBhbnkgbm9uLXN0cmluZyBvciBub24tYnl0ZXMgdHlwZSkuCi0KLS0gSXNzdWUgIzE2MzA2OiBGaXggbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB1bmtub3duIGNvbW1hbmQgbGluZQotICBwYXJhbWV0ZXJzIHdoZXJlIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIuICBQYXRjaCBieSBIaWV1IE5ndXllbi4KLQotLSBJc3N1ZSAjMTYyMTU6IEZpeCBwb3RlbnRpYWwgZG91YmxlIG1lbW9yeSBmcmVlIGluIHN0ci5yZXBsYWNlKCkuICBQYXRjaAotICBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQ1MzogRml4IGVxdWFsaXR5IHRlc3Rpbmcgb2YgZGVhZCB3ZWFrcmVmIG9iamVjdHMuCi0KLS0gSXNzdWUgIzk1MzU6IEZpeCBwZW5kaW5nIHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnV0IG5vdCB5ZXQKLSAgaGFuZGxlZCBieSBQeXRob24gdG8gbm90IHBlcnNpc3QgYWZ0ZXIgb3MuZm9yaygpIGluIHRoZSBjaGlsZCBwcm9jZXNzLgotCi0tIElzc3VlICMxNTAwMTogZml4IHNlZ2ZhdWx0IG9uICJkZWwgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10iLiBQYXRjaCBieSBWaWN0b3IKLSAgU3Rpbm5lci4KLQotLSBJc3N1ZSAjODI3MTogdGhlIHV0Zi04IGRlY29kZXIgbm93IG91dHB1dHMgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIFUrRkZGRAotICBjaGFyYWN0ZXJzIHdoZW4gdXNlZCB3aXRoIHRoZSAncmVwbGFjZScgZXJyb3IgaGFuZGxlciBvbiBpbnZhbGlkIHV0Zi04Ci0gIHNlcXVlbmNlcy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EsIHRlc3RzIGJ5IEV6aW8gTWVsb3R0aS4KLQotLSBJc3N1ZSAjNTc2NTogQXBwbHkgYSBoYXJkIHJlY3Vyc2lvbiBsaW1pdCBpbiB0aGUgY29tcGlsZXIgaW5zdGVhZCBvZgotICBibG93aW5nIHRoZSBzdGFjayBhbmQgc2VnZmF1bHRpbmcuIEluaXRpYWwgcGF0Y2ggYnkgQW5kcmVhIEdyaWZmaW5pLgotCi0tIElzc3VlICMxNjQwMjogV2hlbiBzbGljaW5nIGEgcmFuZ2UsIGZpeCBzaGFkb3dpbmcgb2YgZXhjZXB0aW9ucyBmcm9tCi0gIF9faW5kZXhfXy4KLQotLSBJc3N1ZSAjMTYzMzY6IGZpeCBpbnB1dCBjaGVja2luZyBpbiB0aGUgc3Vycm9nYXRlcGFzcyBlcnJvciBoYW5kbGVyLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICM4NDAxOiBhc3NpZ25pbmcgYW4gaW50IHRvIGEgYnl0ZWFycmF5IHNsaWNlIChlLmcuIGJbMzo0XSA9IDUpIG5vdwotICByYWlzZXMgYW4gZXJyb3IuCi0KLS0gRml4IHNlZ2ZhdWx0cyBvbiBzZXR0aW5nIF9fcXVhbG5hbWVfXyBvbiBidWlsdGluIHR5cGVzIGFuZCBhdHRlbXB0aW5nIHRvCi0gIGRlbGV0ZSBpdCBvbiBhbnkgdHlwZS4KLQotLSBJc3N1ZSAjMTYzNDU6IEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gYGBmcm9ta2V5c2BgIG9uIGEgZGljdCBzdWJjbGFzcwotICByZWNlaXZlZCBhIG5vbmVtcHR5IGRpY3QgZnJvbSB0aGUgY29uc3RydWN0b3IuCi0KLS0gSXNzdWUgIzE2MjcxOiBGaXggc3RyYW5nZSBidWdzIHRoYXQgcmVzdWx0ZWQgZnJvbSBfX3F1YWxuYW1lX18gYXBwZWFyaW5nIGluIGEKLSAgY2xhc3MncyBfX2RpY3RfXyBhbmQgb24gdHlwZS4KLQotLSBJc3N1ZSAjNjA3NDogRW5zdXJlIGNhY2hlZCBieXRlY29kZSBmaWxlcyBjYW4gYWx3YXlzIGJlIHVwZGF0ZWQgYnkgdGhlCi0gIHVzZXIgdGhhdCBjcmVhdGVkIHRoZW0sIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGUgaXMgcmVhZC1vbmx5LgotCi0tIElzc3VlICMxNDc4MzogSW1wcm92ZSBpbnQoKSBkb2NzdHJpbmcgYW5kIHN3aXRjaCBkb2NzdHJpbmdzIGZvciBzdHIoKSwKLSAgcmFuZ2UoKSwgYW5kIHNsaWNlKCkgdG8gdXNlIG11bHRpLWxpbmUgc2lnbmF0dXJlcy4KLQotLSBJc3N1ZSAjMTYxNjA6IFN1YmNsYXNzIHN1cHBvcnQgbm93IHdvcmtzIGZvciB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCi0KLS0gSXNzdWUgIzE1Mzc5OiBGaXggcGFzc2luZyBvZiBub24tQk1QIGNoYXJhY3RlcnMgYXMgaW50ZWdlcnMgZm9yIHRoZSBjaGFybWFwCi0gIGRlY29kZXIgKGFscmVhZHkgd29ya2luZyBhcyB1bmljb2RlIHN0cmluZ3MpLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTUxNDQ6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gaGFuZGxpbmcgcG9pbnRlcnMgYXMgaW50ZWdlcgotICB2YWx1ZXMsIGJ5IHVzaW5nIGBQeV91aW50cHRyX3RgIGluc3RlYWQgb2YgYHNpemVfdGAuICBQYXRjaCBieSBTZXJoaXkKLSAgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTk2NTogRXhwbGljaXRseSBjYXN0IGBBVF9GRENXRGAgYXMgKGludCkuICBSZXF1aXJlZCBvbiBTb2xhcmlzIDEwCi0gICh3aGljaCBkZWZpbmVzIGBBVF9GRENXRGAgYXMgYGAweGZmZDE5NTUzYGApLCBoYXJtbGVzcyBvbiBvdGhlciBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE1ODM5OiBDb252ZXJ0IFN5c3RlbUVycm9ycyBpbiBgc3VwZXIoKWAgdG8gUnVudGltZUVycm9ycy4KLQotLSBJc3N1ZSAjMTU4NDY6IEZpeCBTeXN0ZW1FcnJvciB3aGljaCBoYXBwZW5lZCB3aGVuIHVzaW5nIGBhc3QucGFyc2UoKWAgaW4gYW4KLSAgZXhjZXB0aW9uIGhhbmRsZXIgb24gY29kZSB3aXRoIHN5bnRheCBlcnJvcnMuCi0KLS0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQotICBzdWJzY3JpcHRhYmxlLgotCi0tIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgbGV0IEltcG9ydEVycm9yIHByb3BhZ2F0ZSB3aGVuIGEgbW9kdWxlIHRoYXQKLSAgaXMgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCBvZiB1c2luZyBmcm9tbGlzdCB0cmllcyB0byBpbXBvcnQgYSBtb2R1bGUKLSAgdGhhdCBjYW5ub3QgYmUgZm91bmQuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc1NDA6IEFkZGVkIHN0eWxlIHRvIGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGJ5IGRpY3QuCi0KLS0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCi0gIGljZXdlYXNlbCwgaWNlYXBlLgotCi0tIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKLSAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQotICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCi0gIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgotCi0tIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bwotICBmaWxlQ29uZmlnKCkuCi0KLS0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgTWVtb3J5SGFuZGxlciBjb25maWd1cmF0aW9uIGluIGRpY3RDb25maWcoKSB3aGVyZQotICB0aGUgdGFyZ2V0IGhhbmRsZXIgd2Fzbid0IGNvbmZpZ3VyZWQgZmlyc3QuCi0KLS0gSXNzdWUgIzE3MjA5OiBjdXJzZXMud2luZG93LmdldF93Y2goKSBub3cgaGFuZGxlcyBjb3JyZWN0bHkgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgKENUUkwrYykuCi0KLS0gSXNzdWUgIzU3MTM6IHNtdHBsaWIgbm93IGhhbmRsZXMgNDIxIChjbG9zaW5nIGNvbm5lY3Rpb24pIGVycm9yIGNvZGVzIHdoZW4KLSAgc2VuZGluZyBtYWlsIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBhbmQgcmVwb3J0aW5nIHRoZSA0MjEgZXJyb3IgY29kZSB2aWEgdGhlCi0gIGV4Y2VwdGlvbiBhcHByb3ByaWF0ZSB0byB0aGUgY29tbWFuZCB0aGF0IHJlY2VpdmVkIHRoZSBlcnJvciByZXNwb25zZS4KLQotLSBJc3N1ZSAjMTcxOTI6IFVwZGF0ZSB0aGUgY3R5cGVzIG1vZHVsZSdzIGxpYmZmaSB0byB2My4wLjEzLiAgVGhpcwotICBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgc3RhY2sgbWlzYWxpZ25tZW50IGlzc3VlIG9uIHg4NiBhbmQgaXNzdWVzIG9uCi0gIHNvbWUgbW9yZSByZWNlbnQgcGxhdGZvcm1zLgotCi0tIElzc3VlICM4ODYyOiBGaXhlZCBjdXJzZXMgY2xlYW51cCB3aGVuIGdldGtleSBpcyBpbnRlcnJwdXRlZCBieSBhIHNpZ25hbC4KLQotLSBJc3N1ZSAjMTc0NDM6IGltYXBsaWIuSU1BUDRfc3RyZWFtIHdhcyB1c2luZyB0aGUgZGVmYXVsdCB1bmJ1ZmZlcmVkIElPCi0gIGluIHN1YnByb2Nlc3MsIGJ1dCB0aGUgaW1hcCBjb2RlIGFzc3VtZXMgYnVmZmVyZWQgSU8uICBJbiBQeXRob24yIHRoaXMKLSAgd29ya2VkIGJ5IGFjY2lkZW50LiAgSU1BUDRfc3RyZWFtIG5vdyBleHBsaWNpdGx5IHVzZXMgYnVmZmVyZWQgSU8uCi0KLS0gSXNzdWUgIzE3NDc2OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdW5kb2N1bWVudGVkIHB5ZG9jCi0gICdhbGxtZXRob2RzJzsgaXQgd2FzIG1pc3NpbmcgdW5ib3VuZCBtZXRob2RzIG9uIHRoZSBjbGFzcy4KLQotLSBJc3N1ZSAjMTY4ODA6IERvIG5vdCBhc3N1bWUgX2ltcC5sb2FkX2R5bmFtaWMoKSBpcyBkZWZpbmVkIGluIHRoZSBpbXAgbW9kdWxlLgotCi0tIElzc3VlICMxNjM4OTogRml4ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbiAzLjEgaW4gdGhlCi0gIGNhY2hpbmcgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4KLQotLSBJc3N1ZSAjMTc0MzE6IEZpeCBtaXNzaW5nIGltcG9ydCBvZiBCeXRlc0ZlZWRQYXJzZXIgaW4gZW1haWwucGFyc2VyLgotCi0tIElzc3VlICMxMjg1MDg2OiBHZXQgcmlkIG9mIHRoZSByZWZjb3VudGluZyBoYWNrIGFuZCBzcGVlZCB1cAotICB1cmxsaWIucGFyc2UudW5xdW90ZSgpIGFuZCB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcygpLgotCi0tIElzc3VlICMxNzM2ODogRml4IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIFB5dGhvbiBKU09OIGRlY29kZXIgdGhhdCBjYXVzZWQKLSAgYSBmYWlsdXJlIHdoaWxlIGRlY29kaW5nIGVtcHR5IG9iamVjdCBsaXRlcmFscyB3aGVuIG9iamVjdF9wYWlyc19ob29rIHdhcwotICBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzE0NjQ1OiBUaGUgZW1haWwgZ2VuZXJhdG9yIGNsYXNzZXMgbm93IHByb2R1Y2Ugb3V0cHV0IHVzaW5nIHRoZQotICBzcGVjaWZpZWQgbGluZXNlcCB0aHJvdWdob3V0LiAgUHJldmlvdXNseSBpZiB0aGUgcHJvbG9nLCBlcGlsb2csIG9yCi0gIGJvZHkgd2VyZSBzdG9yZWQgd2l0aCBhIGRpZmZlcmVudCBsaW5lc2VwLCB0aGF0IGxpbmVzZXAgd2FzIHVzZWQuICBUaGlzCi0gIGZpeCBjb3JyZWN0cyBhbiBSRkMgbm9uLWNvbXBsaWFuY2UgaXNzdWUgd2l0aCBzbXRwbGliLnNlbmRfbWVzc2FnZS4KLQotLSBJc3N1ZSAjMTcyNzg6IEZpeCBhIGNyYXNoIGluIGhlYXBxLmhlYXBwdXNoKCkgYW5kIGhlYXBxLmhlYXBwb3AoKSB3aGVuCi0gIHRoZSBsaXN0IGlzIGJlaW5nIHJlc2l6ZWQgY29uY3VycmVudGx5LgotCi0tIElzc3VlICMxNjk2MjogVXNlIGdldGRlbnRzNjQgaW5zdGVhZCBvZiB0aGUgb2Jzb2xldGUgZ2V0ZGVudHMgc3lzY2FsbAotICBpbiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgb24gTGludXguCi0KLS0gSXNzdWUgIzE3MDE4OiBNYWtlIFByb2Nlc3Muam9pbigpIHJldHJ5IGlmIG9zLndhaXRwaWQoKSBmYWlscyB3aXRoIEVJTlRSLgotCi0tIElzc3VlICMxNzIyMzogYXJyYXkgbW9kdWxlOiBGaXggYSBjcmFzaGVyIHdoZW4gY29udmVydGluZyBhbiBhcnJheSBjb250YWluaW5nCi0gIGludmFsaWQgY2hhcmFjdGVycyAob3V0c2lkZSByYW5nZSBbVSswMDAwOyBVKzEwZmZmZl0pIHRvIFVuaWNvZGU6Ci0gIHJlcHIoYXJyYXkpLCBzdHIoYXJyYXkpIGFuZCBhcnJheS50b3VuaWNvZGUoKS4gUGF0Y2ggd3JpdHRlbiBieSBNYW51ZWwgSmFjb2IuCi0KLS0gSXNzdWUgIzE0NzIwOiBzcWxpdGUzOiBDb252ZXJ0IGRhdGV0aW1lIG1pY3Jvc2Vjb25kcyBjb3JyZWN0bHkuCi0gIFBhdGNoIGJ5IExvd2UgVGhpZGVybWFuLgotCi0tIElzc3VlICMxNzIyNTogSlNPTiBkZWNvZGVyIG5vdyBjb3VudHMgY29sdW1ucyBpbiB0aGUgZmlyc3QgbGluZSBzdGFydGluZwotICB3aXRoIDEsIGFzIGluIG90aGVyIGxpbmVzLgotCi0tIElzc3VlICMxMzcwMDogRml4IGJ5dGUvc3RyaW5nIGhhbmRsaW5nIGluIGltYXBsaWIgYXV0aGVudGljYXRpb24gd2hlbiBhbgotICBhdXRob2JqZWN0IGlzIHNwZWNpZmllZC4KLQotLSBJc3N1ZSAjMTMxNTM6IFRraW50ZXIgZnVuY3Rpb25zIG5vdyByYWlzZSBUY2xFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3Igd2hlbgotICBhIHN0cmluZyBhcmd1bWVudCBjb250YWlucyBub24tQk1QIGNoYXJhY3Rlci4KLQotLSBJc3N1ZSAjOTY2OTogUHJvdGVjdCByZSBhZ2FpbnN0IGluZmluaXRlIGxvb3BzIG9uIHplcm8td2lkdGggbWF0Y2hpbmcgaW4KLSAgbm9uLWdyZWVkeSByZXBlYXQuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzEzMTY5OiBUaGUgbWF4aW1hbCByZXBldGl0aW9uIG51bWJlciBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXMgYmVlbgotICBpbmNyZWFzZWQgZnJvbSA2NTUzNCB0byAyMTQ3NDgzNjQ3IChvbiAzMi1iaXQgcGxhdGZvcm0pIG9yIDQyOTQ5NjcyOTQgKG9uCi0gIDY0LWJpdCkuCi0KLS0gSXNzdWUgIzE3MTQzOiBGaXggYSBtaXNzaW5nIGltcG9ydCBpbiB0aGUgdHJhY2UgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQotICBCZXJrZXIgUGVrc2FnLgotCi0tIElzc3VlICMxNjc0MzogRml4IG1tYXAgb3ZlcmZsb3cgY2hlY2sgb24gMzIgYml0IFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2ODAwOiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgbm8gbG9uZ2VyIGxlZnQgdGVtcG9yYXJ5IGZpbGVzIHdoZW4KLSAgdGhlIGRpc2sgaXMgZnVsbC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFtaXIgU3pla2VseS4KLQotLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCi0gIGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0IHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgotCi0tIElzc3VlICMxNzA1MjogdW5pdHRlc3QgZGlzY292ZXJ5IHNob3VsZCB1c2Ugc2VsZi50ZXN0TG9hZGVyLgotCi0tIElzc3VlICM0NTkxOiBVaWQgYW5kIGdpZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMioqMzEgYXJlIHN1cHBvcnRlZCBub3cuCi0KLS0gSXNzdWUgIzE3MTQxOiByYW5kb20udm9ubWlzZXN2YXJpYXRlKCkgbm8gbW9yZSBoYW5ncyBmb3IgbGFyZ2Uga2FwcGFzLgotCi0tIElzc3VlICMxNzE0OTogRml4IHJhbmRvbS52b25taXNlc3ZhcmlhdGUgdG8gYWx3YXlzIHJldHVybiByZXN1bHRzIGluCi0gIFswLCAyKm1hdGgucGldLgotCi0tIElzc3VlICMxNDcwNTQ4OiBYTUxHZW5lcmF0b3Igbm93IHdvcmtzIHdpdGggYmluYXJ5IG91dHB1dCBzdHJlYW1zLgotCi0tIElzc3VlICM2OTc1OiBvcy5wYXRoLnJlYWxwYXRoKCkgbm93IGNvcnJlY3RseSByZXNvbHZlcyBtdWx0aXBsZSBuZXN0ZWQKLSAgc3ltbGlua3Mgb24gUE9TSVggcGxhdGZvcm1zLgotCi0tIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKLSAgZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3Agd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCi0KLS0gSXNzdWUgIzEwMzU1OiBUaGUgbW9kZSwgbmFtZSwgZW5jb2RpbmcgYW5kIG5ld2xpbmVzIHByb3BlcnRpZXMgbm93IHdvcmsgb24KLSAgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgb2JqZWN0cyBldmVuIHdoZW4gdGhleSBoYXZlIG5vdCB5ZXQgcm9sbGVkIG92ZXIuCi0gIE9ic29sZXRlIG1ldGhvZCB4cmVhZGxpbmUgKHdoaWNoIGhhcyBuZXZlciB3b3JrZWQgaW4gUHl0aG9uIDMpIGhhcyBiZWVuCi0gIHJlbW92ZWQuCi0KLS0gSXNzdWUgIzE2Njg2OiBGaXhlZCBhIGxvdCBvZiBidWdzIGluIGF1ZGlvb3AgbW9kdWxlLiAgRml4ZWQgY3Jhc2hlcyBpbgotICBhdmdwcCgpLCBtYXhwcCgpIGFuZCByYXRlY3YoKS4gIEZpeGVkIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYWRkKCksIGJpYXMoKSwKLSAgYW5kIHJhdGVjdigpLiAgcmV2ZXJzZSgpLCBsaW4ybGluKCkgYW5kIHJhdGVjdigpIG5vIG1vcmUgbG9zZSBwcmVjaXNpb24gZm9yCi0gIDMyLWJpdCBzYW1wbGVzLiAgbWF4KCkgYW5kIHJtcygpIG5vIG1vcmUgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdCBhbmQKLSAgdmFyaW91cyBvdGhlciBmdW5jdGlvbnMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggMzItYml0IHNhbXBsZSAtMHg4MDAwMDAwMC4KLQotLSBJc3N1ZSAjMTcwNzM6IEZpeCBzb21lIGludGVnZXIgb3ZlcmZsb3dzIGluIHNxbGl0ZTMgbW9kdWxlLgotCi0tIElzc3VlICMxNjcyMzogaHR0cGxpYi5IVFRQUmVzcG9uc2Ugbm8gbG9uZ2VyIG1hcmtlZCBjbG9zZWQgd2hlbiB0aGUgY29ubmVjdGlvbgotICBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KLQotLSBJc3N1ZSAjMTY5NDg6IEZpeCBxdW90ZWQgcHJpbnRhYmxlIGJvZHkgZW5jb2RpbmcgZm9yIG5vbi1sYXRpbjEgY2hhcmFjdGVyCi0gIHNldHMgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCi0KLS0gSXNzdWUgIzE2ODExOiBGaXggZm9sZGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWUgaW4gdGhlIHByb3Zpc2lvbmFsIGVtYWlsCi0gIHBvbGljaWVzLgotCi0tIElzc3VlICMxNzEzMjogVXBkYXRlIHN5bWJvbCBmb3IgInlpZWxkIGZyb20iIGdyYW1tYXIgY2hhbmdlcy4KLQotLSBJc3N1ZSAjMTcwNzY6IE1ha2UgY29weWluZyBvZiB4YXR0cnMgbW9yZSBwZXJtaXNzaXZlIG9mIG1pc3NpbmcgRlMgc3VwcG9ydC4KLSAgUGF0Y2ggYnkgVGhvbWFzIFdvdXRlcnMuCi0KLS0gSXNzdWUgIzE3MDg5OiBFeHBhdCBwYXJzZXIgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIHN0cmluZyBpbnB1dCBub3Qgb25seSB3aGVuCi0gIGFuIGludGVybmFsIFhNTCBlbmNvZGluZyBpcyBVVEYtOCBvciBVUy1BU0NJSS4gIEl0IG5vdyBhY2NlcHRzIGJ5dGVzIGFuZAotICBzdHJpbmdzIGxhcmdlciB0aGFuIDIgR2lCLgotCi0tIElzc3VlICM2MDgzOiBGaXggbXVsdGlwbGUgc2VnbWVudGF0aW9uIGZhdWx0cyBvY2N1cmVkIHdoZW4gUHlBcmdfUGFyc2VUdXBsZQotICBwYXJzZXMgbmVzdGVkIG11dGF0aW5nIHNlcXVlbmNlLgotCi0tIElzc3VlICM1Mjg5OiBGaXggY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5IG9uIFNvbGFyaXMuCi0KLS0gSXNzdWUgIzE3MTA2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgaW4gaW8uVGV4dElPV3JhcHBlciB3aGVuIGFuIHVuZGVybHlpbmcKLSAgc3RyZWFtIG9yIGEgZGVjb2RlciBwcm9kdWNlcyBkYXRhIG9mIGFuIHVuZXhwZWN0ZWQgdHlwZSAoaS5lLiB3aGVuCi0gIGlvLlRleHRJT1dyYXBwZXIgaW5pdGlhbGl6ZWQgd2l0aCB0ZXh0IHN0cmVhbSBvciB1c2UgYnl0ZXMtdG8tYnl0ZXMgY29kZWMpLgotCi0tIElzc3VlICMxNTYzMzogaHR0cGxpYi5IVFRQUmVzcG9uc2UgaXMgbm93IG1hcmsgY2xvc2VkIHdoZW4gdGhlIHNlcnZlcgotICBzZW5kcyBsZXNzIHRoYW4gdGhlIGFkdmVydGlzZWQgQ29udGVudC1MZW5ndGguCi0KLS0gSXNzdWUgIzEyMjY4OiBUaGUgaW8gbW9kdWxlIGZpbGUgb2JqZWN0IHdyaXRlIG1ldGhvZHMgbm8gbG9uZ2VyIGFib3J0IGVhcmx5Ci0gIHdoZW4gb25lIG9mIGl0cyB3cml0ZSBzeXN0ZW0gY2FsbHMgaXMgaW50ZXJydXB0ZWQgKEVJTlRSKS4KLQotLSBJc3N1ZSAjNjk3MjogVGhlIHppcGZpbGUgbW9kdWxlIG5vIGxvbmdlciBvdmVyd3JpdGVzIGZpbGVzIG91dHNpZGUgb2YKLSAgaXRzIGRlc3RpbmF0aW9uIHBhdGggd2hlbiBleHRyYWN0aW5nIG1hbGljaW91cyB6aXAgZmlsZXMuCi0KLS0gSXNzdWUgIzQ4NDQ6IFppcEZpbGUgbm93IHJhaXNlcyBCYWRaaXBGaWxlIHdoZW4gb3BlbnMgYSBaSVAgZmlsZSB3aXRoIGFuCi0gIGluY29tcGxldGUgIkVuZCBvZiBDZW50cmFsIERpcmVjdG9yeSIgcmVjb3JkLiAgT3JpZ2luYWwgcGF0Y2ggYnkgR3VpbGhlcm1lCi0gIFBvbG8gYW5kIEFsYW4gTWNJbnR5cmUuCi0KLS0gSXNzdWUgIzE3MDcxOiBTaWduYXR1cmUuYmluZCgpIG5vdyB3b3JrcyB3aGVuIG9uZSBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMKLSAgaXMgbmFtZWQgYGBzZWxmYGAuCi0KLS0gSXNzdWUgIzEyMDA0OiBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gUHlaaXBGaWxlIHdoZW4gd3JpdGluZyBhbiBpbnZhbGlkCi0gIFB5dGhvbiBmaWxlLiAgUGF0Y2ggYnkgQmVuIE1vcmdhbi4KLQotLSBJc3N1ZSAjMTYwMjEzMzogb24gTWFjIE9TIFggYSBzaGFyZWQgbGlicmFyeSBidWlsZCAoYGAtLWVuYWJsZS1zaGFyZWRgYCkKLSAgbm93IGZpbGxzIHRoZSBgYG9zLmVudmlyb25gYCB2YXJpYWJsZSBjb3JyZWN0bHkuCi0KLS0gSXNzdWUgIzE1NTA1OiBgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXJgIG5vIGxvbmdlciBhc3N1bWVzIFNJR0lOVCBoYW5kbGVyIGlzCi0gIHNldCB0byBhIGNhbGxhYmxlIG9iamVjdC4KLQotLSBJc3N1ZSAjMTM0NTQ6IEZpeCBhIGNyYXNoIHdoZW4gZGVsZXRpbmcgYW4gaXRlcmF0b3IgY3JlYXRlZCBieSBpdGVydG9vbHMudGVlKCkKLSAgaWYgYWxsIG90aGVyIGl0ZXJhdG9ycyB3ZXJlIHZlcnkgYWR2YW5jZWQgYmVmb3JlLgotCi0tIElzc3VlICMxMjQxMTogRml4IHRvIGNnaS5wYXJzZV9tdWx0aXBhcnQgdG8gY29ycmVjdGx5IHVzZSBieXRlcyBib3VuZGFyaWVzCi0gIGFuZCBieXRlcyBkYXRhLiBQYXRjaCBieSBKb25hcyBXYWduZXIuCi0KLS0gSXNzdWUgIzE2OTU3OiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgc2VhcmNoZXMgYSBiYXJlIGZpbGUgbmFtZSBpbiB0aGUKLSAgY3VycmVudCBkaXJlY3Rvcnkgb24gVW5peCBhbmQgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgcmVsYXRpdmUgZmlsZSBwYXRoIHdpdGgKLSAgYSBkaXJlY3RvcnkgcGFydCBpbiBQQVRIIGRpcmVjdG9yaWVzLiAgUGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCi0KLS0gSXNzdWUgIzE2OTkzOiBzaHV0aWwud2hpY2goKSBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mIHRoZSBwYXRoIGFuZCBleHRlbnNpb24KLSAgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTY5OTI6IE9uIFdpbmRvd3MgaW4gc2lnbmFsLnNldF93YWtldXBfZmQsIHZhbGlkYXRlIHRoZSBmaWxlCi0gIGRlc2NyaXB0b3IgYXJndW1lbnQuCi0KLS0gSXNzdWUgIzE2NDIyOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBQeXRob24gdmVyc2lvbiwgdGhlIEMgdmVyc2lvbiBvZgotICBkZWNpbWFsIG5vdyB1c2VzIHN0cmluZ3MgaW5zdGVhZCBvZiBpbnRlZ2VycyBmb3Igcm91bmRpbmcgbW9kZSBjb25zdGFudHMuCi0KLS0gSXNzdWUgIzE1ODYxOiB0a2ludGVyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBsaXN0cyBhbmQgdHVwbGVzIGNvbnRhaW5pbmcKLSAgc3RyaW5ncyB3aXRoIHdoaXRlc3BhY2VzLCBiYWNrc2xhc2hlcyBvciB1bmJhbGFuY2VkIGJyYWNlcy4KLQotLSBJc3N1ZSAjMTA1Mjc6IFVzZSBwb2xsKCkgaW5zdGVhZCBvZiBzZWxlY3QoKSBmb3IgbXVsdGlwcm9jZXNzaW5nIHBpcGVzLgotCi0tIElzc3VlICM5NzIwOiB6aXBmaWxlIG5vdyB3cml0ZXMgY29ycmVjdCBsb2NhbCBoZWFkZXJzIGZvciBmaWxlcyBsYXJnZXIgdGhhbgotICA0IEdpQi4KLQotLSBJc3N1ZSAjMTY5NTU6IEZpeCB0aGUgcG9sbCgpIG1ldGhvZCBmb3IgbXVsdGlwcm9jZXNzaW5nJ3Mgc29ja2V0Ci0gIGNvbm5lY3Rpb25zIG9uIFdpbmRvd3MuCi0KLS0gU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG5vdyBwcm9wZXJseSBjbG9zZXMgdGhlIGlucHV0IGZpbGUuCi0KLS0gSXNzdWUgIzE2OTAwOiBJc3N1ZSBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHNzbCBzb2NrZXQgaXMgbGVmdCB1bmNsb3NlZC4KLQotLSBJc3N1ZSAjMTM4OTk6IFxBLCBcWiwgYW5kIFxCIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIEEsIFosIGFuZCBCIGxpdGVyYWxzCi0gIHdoZW4gdXNlZCBpbnNpZGUgY2hhcmFjdGVyIGNsYXNzZXMgKGUuZy4gJ1tcQV0nKS4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KLQotLSBJc3N1ZSAjMTU1NDU6IEZpeCByZWdyZXNzaW9uIGluIHNxbGl0ZTMncyBpdGVyZHVtcCBtZXRob2Qgd2hlcmUgaXQgd2FzCi0gIGZhaWxpbmcgaWYgdGhlIGNvbm5lY3Rpb24gdXNlZCBhIHJvdyBmYWN0b3J5IChzdWNoIGFzIHNxbGl0ZTMuUm93KSB0aGF0Ci0gIHByb2R1Y2VkIHVuc29ydGFibGUgb2JqZWN0cy4gKFJlZ3Jlc3Npb24gd2FzIGludHJvZHVjZWQgYnkgZml4IGZvciA5NzUwKS4KLQotLSBJc3N1ZSAjMTU5NzI6IEZpeCBlcnJvciBtZXNzYWdlcyB3aGVuIG9zIGZ1bmN0aW9ucyBleHBlY3RpbmcgYSBmaWxlIG5hbWUgb3IKLSAgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgdGhlIGluY29ycmVjdCB0eXBlLgotCi0tIElzc3VlICMxNjgyODogRml4IGVycm9yIGluY29ycmVjdGx5IHJhaXNlZCBieSBiejIuY29tcHJlc3MoYicnKSBhbmQKLSAgYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MoYicnKS4gSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gUGFja21hbi4KLQotLSBJc3N1ZSAjMTY1NDE6IHRrX3NldFBhbGV0dGUoKSBub3cgd29ya3Mgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYHBhcnNlci5wb3BpdGVtKClgIG5vIGxvbmdlciByYWlzZXMgVmFsdWVFcnJvci4KLSAgVGhpcyBtYWtlcyBgcGFyc2VyLmNsZWFuKClgIHdvcmsgY29ycmVjdGx5LgotCi0tIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnc2VjdGlvbiddID0ge31gYCBub3cgcHJlc2VydmVzCi0gIHNlY3Rpb24gb3JkZXIgd2l0aGluIHRoZSBwYXJzZXIuIFRoaXMgbWFrZXMgYHBhcnNlci51cGRhdGUoKWAgcHJlc2VydmUgc2VjdGlvbgotICBvcmRlciBhcyB3ZWxsLgotCi0tIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnREVGQVVMVCddID0ge31gYCBub3cgY29ycmVjdGx5Ci0gIGNsZWFycyBwcmV2aW91cyB2YWx1ZXMgc3RvcmVkIGluIHRoZSBkZWZhdWx0IHNlY3Rpb24uIFNhbWUgZ29lcyBmb3IKLSAgYGBwYXJzZXIudXBkYXRlKHsnREVGQVVMVCc6IHt9fSlgYC4KLQotLSBJc3N1ZSAjOTU4NjogUmVkZWZpbmUgU0VNX0ZBSUxFRCBvbiBNYWNPU1ggdG8ga2VlcCBjb21waWxlciBoYXBweS4KLQotLSBJc3N1ZSAjMTA1Mjc6IG1ha2UgbXVsdGlwcm9jZXNzaW5nIHVzZSBwb2xsKCkgaW5zdGVhZCBvZiBzZWxlY3QoKSBpZiBhdmFpbGFibGUuCi0KLS0gSXNzdWUgIzE2Njg4OiBOb3cgcmVnZXhlcyBjb250YWluZWQgYmFja3JlZmVyZW5jZXMgY29ycmVjdGx5IHdvcmsgd2l0aAotICBub24tQVNDSUkgc3RyaW5ncy4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KLQotLSBJc3N1ZSAjMTY0ODU6IE5vdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaWYgZmlsZSBoZWFkZXIgcGF0Y2hpbmcgZmFpbGVkCi0gIG9uIGNsb3NpbmcgYW4gYWlmYyBmaWxlLgotCi0tIElzc3VlICMxNjE2NTogc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG5vIGxvbmdlciBibG9ja3MgYSBzY2hlZHVsZXIgZm9yIG90aGVyCi0gIHRocmVhZHMuCi0KLS0gSXNzdWUgIzE2NjQxOiBEZWZhdWx0IHZhbHVlcyBvZiBzY2hlZC5zY2hlZHVsZXIuZW50ZXIoKSBhcmUgbm8gbG9uZ2VyCi0gIG1vZGlmaWFibGUuCi0KLS0gSXNzdWUgIzE2NjE4OiBNYWtlIGdsb2IuZ2xvYiBtYXRjaCBjb25zaXN0ZW50bHkgYWNyb3NzIHN0cmluZ3MgYW5kIGJ5dGVzCi0gIHJlZ2FyZGluZyBsZWFkaW5nIGRvdHMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjcxMzogUGFyc2luZyBvZiAndGVsJyB1cmxzIHVzaW5nIHVybHBhcnNlIHNlcGFyYXRlcyBwYXJhbXMgZnJvbQotICBwYXRoLgotCi0tIElzc3VlICMxNjQ0MzogQWRkIGRvY3N0cmluZ3MgdG8gcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCi0gIFBhdGNoIGJ5IEFudG9uIEthc3lhbm92LgotCi0tIElzc3VlICMxNTcwMTogRml4IEhUVFBFcnJvciBpbmZvIG1ldGhvZCBjYWxsIHRvIHJldHVybiB0aGUgaGVhZGVycyBpbmZvcm1hdGlvbi4KLQotLSBJc3N1ZSAjMTY3NTI6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHRvIG1vZHVsZWZpbmRlci4gUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KLQotLSBJc3N1ZSAjMTY2NDY6IGZ0cGxpYi5GVFAubWFrZXBvcnQoKSBtaWdodCBsb3NlIHNvY2tldCBlcnJvciBkZXRhaWxzLgotICAocGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSkKLQotLSBJc3N1ZSAjMTY2MjY6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZ2xvYi5nbG9iKCkgb24gV2luZG93cyB3aGVuIHRoZQotICBwYXR0ZXJuIGNvbnRhaW5zIGEgd2lsZGNhcmQgaW4gdGhlIGRyaXZlIG9yIFVOQyBwYXRoLiAgUGF0Y2ggYnkgU2VyaGl5Ci0gIFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTU3ODM6IEV4Y2VwdCBmb3IgdGhlIG51bWJlciBtZXRob2RzLCB0aGUgQyB2ZXJzaW9uIG9mIGRlY2ltYWwgbm93Ci0gIHN1cHBvcnRzIGFsbCBOb25lIGRlZmF1bHQgdmFsdWVzIHByZXNlbnQgaW4gZGVjaW1hbC5weS4gVGhlc2UgdmFsdWVzIHdlcmUKLSAgbGFyZ2VseSB1bmRvY3VtZW50ZWQuCi0KLS0gSXNzdWUgIzE2Mjk4OiBJbiBIVFRQUmVzcG9uc2UucmVhZCgpLCBjbG9zZSB0aGUgc29ja2V0IHdoZW4gdGhlcmUgaXMgbm8KLSAgQ29udGVudC1MZW5ndGggYW5kIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgZmluaXNoZWQuICBQYXRjaCBieSBFcmFuCi0gIFJ1bmRzdGVpbi4KLQotLSBJc3N1ZSAjMTU4NzI6IEZpeCAzLjMgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmQtYmFzZWQgc2h1dGlsLnJtdHJlZQotICB0aGF0IGNhdXNlZCBpdCB0byBub3QgaWdub3JlIGNlcnRhaW4gZXJyb3JzIHdoZW4gaWdub3JlX2Vycm9ycyB3YXMgc2V0LgotICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhIGFuZCBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjI0ODogRGlzYWJsZSBjb2RlIGV4ZWN1dGlvbiBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYnkKLSAgdGtpbnRlciB3aGVuIHRoZSAtRSBmbGFnIGlzIHBhc3NlZCB0byBQeXRob24uICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCi0KLS0gSXNzdWUgIzE2NjI4OiBGaXggYSBtZW1vcnkgbGVhayBpbiBjdHlwZXMucmVzaXplKCkuCi0KLS0gSXNzdWUgIzEzNjE0OiBGaXggc2V0dXAucHkgcmVnaXN0ZXIgZmFpbHVyZSB3aXRoIGludmFsaWQgcnN0IGluIGRlc2NyaXB0aW9uLgotICBQYXRjaCBieSBKdWxpZW4gQ291cnRlYXUgYW5kIFBpZXJyZSBQYXVsIExlZmVidnJlLgotCi0tIElzc3VlICMxMzUxMjogQ3JlYXRlIH4vLnB5cGlyYyBzZWN1cmVseSAoQ1ZFLTIwMTEtNDk0NCkuICBJbml0aWFsIHBhdGNoIGJ5Ci0gIFBoaWxpcCBKZW52ZXksIHRlc3RlZCBieSBNYWdlaWEgYW5kIERlYmlhbi4KLQotLSBJc3N1ZSAjNzcxOTogTWFrZSBkaXN0dXRpbHMgaWdub3JlIGBgLm5mcypgYCBmaWxlcyBpbnN0ZWFkIG9mIGNob2tpbmcgbGF0ZXIKLSAgb24uICBJbml0aWFsIHBhdGNoIGJ5IFNpbGVudEdob3N0IGFuZCBKZWZmIFJhbW5hbmkuCi0KLS0gSXNzdWUgIzEzMTIwOiBBbGxvdyB0byBjYWxsIHBkYi5zZXRfdHJhY2UoKSBmcm9tIHRocmVhZC4KLSAgUGF0Y2ggYnkgSWx5YSBTYW5kbGVyLgotCi0tIElzc3VlICMxNjU4NTogTWFrZSBDSksgZW5jb2RlcnMgc3VwcG9ydCBlcnJvciBoYW5kbGVycyB0aGF0IHJldHVybiBieXRlcyBwZXIKLSAgUEVQIDM4My4KLQotLSBJc3N1ZSAjMTAxODI6IFRoZSByZSBtb2R1bGUgZG9lc24ndCB0cnVuY2F0ZSBpbmRpY2VzIHRvIDMyIGJpdHMgYW55bW9yZS4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY1NzM6IEluIDJ0bzMsIHRyZWF0IGVudW1lcmF0ZSgpIGxpa2UgYSBjb25zdW1pbmcgY2FsbCwgc28gc3VwZXJmbHVvdXMKLSAgbGlzdCgpIGNhbGxzIGFyZW4ndCBhZGRlZCB0byBmaWx0ZXIoKSwgbWFwKCksIGFuZCB6aXAoKSB3aGljaCBhcmUgZGlyZWN0bHkKLSAgcGFzc2VkIGVudW1lcmF0ZSgpLgotCi0tIElzc3VlICMxMjg0ODogVGhlIHB1cmUgUHl0aG9uIHBpY2tsZSBpbXBsZW1lbnRhdGlvbiBub3cgdHJlYXRzIG9iamVjdAotICBsZW5ndGhzIGFzIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VycywgbGlrZSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2VzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQwODogRml4IGZpbGUgZGVzY3JpcHRvcnMgbm90IGJlaW5nIGNsb3NlZCBpbiBlcnJvciBjb25kaXRpb25zCi0gIGluIHRoZSB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NDgxOiBtdWx0aXByb2Nlc3Npbmcgbm8gbG9uZ2VyIGxlYWtzIHByb2Nlc3MgaGFuZGxlcyBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNjE0MDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBkb3VibGUgY2xvc2VzIGl0cyBjaGlsZAotICBzdWJwcm9jZXNzLlBJUEUgcGFyZW50IGZpbGUgZGVzY3JpcHRvcnMgb24gY2hpbGQgZXJyb3IgcHJpb3IgdG8gZXhlYygpLgotCi0tIFJlbW92ZSBhIGJhcmUgcHJpbnQgdG8gc3Rkb3V0IGZyb20gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIHRoYXQgY291bGQgaGF2ZQotICBoYXBwZW5lZCBpZiB0aGUgY2hpbGQgcHJvY2VzcyB3cm90ZSBnYXJiYWdlIHRvIGl0cyBwcmUtZXhlYyBlcnJvciBwaXBlLgotCi0tIElzc3VlICMxNjMyNzogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBsZWFrcyBmaWxlIGRlc2NyaXB0b3JzCi0gIHVzZWQgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIgcGlwZXMgdG8gdGhlIGNoaWxkIHdoZW4gZm9yaygpIGZhaWxzLgotCi0tIElzc3VlICMxNDM5NjogSGFuZGxlIHRoZSBvZGQgcmFyZSBjYXNlIG9mIHdhaXRwaWQgcmV0dXJuaW5nIDAgd2hlbiBub3QKLSAgZXhwZWN0ZWQgaW4gc3VicHJvY2Vzcy5Qb3Blbi53YWl0KCkuCi0KLS0gSXNzdWUgIzE2NDExOiBGaXggYSBidWcgd2hlcmUgemxpYi5kZWNvbXByZXNzb2JqKCkuZmx1c2goKSBtaWdodCB0cnkgdG8gYWNjZXNzCi0gIHByZXZpb3VzbHktZnJlZWQgbWVtb3J5LiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjM1NzogZml4IGNhbGxpbmcgYWNjZXB0KCkgb24gYSBTU0xTb2NrZXQgY3JlYXRlZCB0aHJvdWdoCi0gIFNTTENvbnRleHQud3JhcF9zb2NrZXQoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEplZmYgTWNOZWlsLgotCi0tIElzc3VlICMxNjQwOTogVGhlIHJlcG9ydGhvb2sgY2FsbGJhY2sgbWFkZSBieSB0aGUgbGVnYWN5Ci0gIHVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlIEFQSSBub3cgcHJvcGVybHkgc3VwcGxpZXMgYSBjb25zdGFudCBub24temVybwotICBibG9ja19zaXplIGFzIGl0IGRpZCBpbiBQeXRob24gMy4yIGFuZCAyLjcuICBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mCi0gIHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci5yZXRyaWV2ZS4KLQotLSBJc3N1ZSAjMTY0MzE6IFVzZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIGNvbnN0cnVjdGluZyBhIERlY2ltYWwgc3VidHlwZQotICBmcm9tIGEgRGVjaW1hbCBhcmd1bWVudC4KLQotLSBJc3N1ZSAjMTYzNTA6IHpsaWIuZGVjb21wcmVzc29iaigpLmRlY29tcHJlc3MoKSBub3cgYWNjdW11bGF0ZXMgZGF0YSBmcm9tCi0gIHN1Y2Nlc3NpdmUgY2FsbHMgYWZ0ZXIgRU9GIGluIHVudXNlZF9kYXRhLCBpbnN0ZWFkIG9mIG9ubHkgc2F2aW5nIHRoZSBhcmd1bWVudAotICB0byB0aGUgbGFzdCBjYWxsLiBkZWNvbXByZXNzb2JqKCkuZmx1c2goKSBub3cgY29ycmVjdGx5IHNldHMgdW51c2VkX2RhdGEgYW5kCi0gIHVuY29uc3VtZWRfdGFpbC4gQSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIE1lbW9yeUVycm9yIHdoZW4gc2V0dGluZyB0aGUKLSAgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZSBoYXMgYWxzbyBiZWVuIGZpeGVkLiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxMjc1OTogc3JlX3BhcnNlIG5vdyByYWlzZXMgYSBwcm9wZXIgZXJyb3Igd2hlbiB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAKLSAgaXMgbWlzc2luZy4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYxNTI6IGZpeCB0b2tlbml6ZSB0byBpZ25vcmUgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBjb2RlIHdoZW4KLSAgbm8gbmV3bGluZSBpcyBmb3VuZC4gIFBhdGNoIGJ5IE5lZCBCYXRjaGVsZGVyLgotCi0tIElzc3VlICMxNjIzMDogRml4IGEgY3Jhc2ggaW4gc2VsZWN0LnNlbGVjdCgpIHdoZW4gb25lIHRoZSBsaXN0cyBjaGFuZ2VzCi0gIHNpemUgd2hpbGUgaXRlcmF0ZWQgb24uICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjIyODogRml4IGEgY3Jhc2ggaW4gdGhlIGpzb24gbW9kdWxlIHdoZXJlIGEgbGlzdCBjaGFuZ2VzIHNpemUKLSAgd2hpbGUgaXQgaXMgYmVpbmcgZW5jb2RlZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE0ODk3OiBFbmhhbmNlIGVycm9yIG1lc3NhZ2VzIG9mIHN0cnVjdC5wYWNrIGFuZAotICBzdHJ1Y3QucGFja19pbnRvLiBQYXRjaCBieSBNYXR0aSBNw6RraS4KLQotLSBJc3N1ZSAjMTI4OTA6IGNnaXRiIG5vIGxvbmdlciBwcmludHMgc3B1cmlvdXMgPHA+IHRhZ3MgaW4gdGV4dAotICBtb2RlIHdoZW4gdGhlIGxvZ2RpciBvcHRpb24gaXMgc3BlY2lmaWVkLgotCi0tIElzc3VlICMxNjMwNzogRml4IG11bHRpcHJvY2Vzc2luZy5Qb29sLm1hcF9hc3luYyBub3QgY2FsbGluZyBpdHMgY2FsbGJhY2tzLgotICBQYXRjaCBieSBKYW5uZSBLYXJpbGEuCi0KLS0gSXNzdWUgIzE2MjUwOiBGaXggVVJMRXJyb3IgaW52b2NhdGlvbiB3aXRoIHByb3BlciBhcmdzLgotCi0tIElzc3VlICMxNjExNjogRml4IGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0aHMgdG8gYmUgY29ycmVjdCB3aGVuIGJ1aWxkaW5nIEMKLSAgZXh0ZW5zaW9ucyBpbiB2ZW52cy4KLQotLSBJc3N1ZSAjMTYyNDU6IEZpeCB0aGUgdmFsdWUgb2YgYSBmZXcgZW50aXRpZXMgaW4gaHRtbC5lbnRpdGllcy5odG1sNS4KLQotLSBJc3N1ZSAjMTQzOTg6IEZpeCBzaXplIHRydW5jYXRpb24gYW5kIG92ZXJmbG93IGJ1Z3MgaW4gdGhlIGJ6MiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE2MjIwOiB3c2dpcmVmIG5vdyBhbHdheXMgY2FsbHMgY2xvc2UoKSBvbiBhbiBpdGVyYWJsZSByZXNwb25zZS4KLSAgUGF0Y2ggYnkgQnJlbnQgVHViYnMuCi0KLS0gSXNzdWUgIzE2MjcwOiB1cmxsaWIgbWF5IGhhbmcgd2hlbiB1c2VkIGZvciByZXRyaWV2aW5nIGZpbGVzIHZpYSBGVFAgYnkgdXNpbmcKLSAgYSBjb250ZXh0IG1hbmFnZXIuICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJy4KLQotLSBJc3N1ZSAjMTY0NjE6IFdhdmUgbGlicmFyeSBzaG91bGQgYmUgYWJsZSB0byBkZWFsIHdpdGggNEdCIHdhdiBmaWxlcywKLSAgYW5kIHNhbXBsZSByYXRlIG9mIDQ0MTAwIEh6LgotCi0tIElzc3VlICMxNjE3NjogUHJvcGVybHkgaWRlbnRpZnkgV2luZG93cyA4IHZpYSBwbGF0Zm9ybS5wbGF0Zm9ybSgpCi0KLS0gSXNzdWUgIzE2MTE0OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIHByb3ZpZGVzIGEgbWlzbGVhZGluZyBlcnJvcgotICBtZXNzYWdlIHN0YXRpbmcgdGhhdCBhcmdzWzBdIGRpZCBub3QgZXhpc3Qgd2hlbiBlaXRoZXIgdGhlIGN3ZCBvciBleGVjdXRhYmxlCi0gIGtleXdvcmQgYXJndW1lbnRzIHNwZWNpZmllZCBhIHBhdGggdGhhdCBkaWQgbm90IGV4aXN0LgotCi0tIElzc3VlICMxNjE2OTogRml4IGN0eXBlcy5XaW5FcnJvcigpJ3MgY29uZnVzaW9uIGJldHdlZW4gZXJybm8gYW5kIHdpbmVycm9yLgotCi0tIElzc3VlICMxNjA3NjogTWFkZSBfZWxlbWVudHRyZWUuRWxlbWVudCBwaWNrbGVhYmxlIGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZQotICB3aXRoIHRoZSBQeXRob24gRWxlbWVudC4gUGlja2xpbmcvdW5waWNrbGluZyBvZiB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudAotICB3b3JrcyBhZ2FpbiAtIHRoaXMgd2FzIGEgdGVtcG9yYXJ5IHJlZ3Jlc3Npb24gZnJvbSAzLjIgd2hlcmUgdGhlIGJ5LWRlZmF1bHQKLSAgaW1wb3J0ZWQgX2VsZW1lbnR0cmVlIGhhZCBubyBwaWNrbGluZyBjYXBhYmlsaXR5LgotCi0tIElzc3VlICMxNjA4OTogQWxsb3cgRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIgdG8gd29yayBhZ2FpbiB3aXRoIGEgbm9uLUVsZW1lbnQKLSAgZWxlbWVudF9mYWN0b3J5IChmaXhlcyBhIHJlZ3Jlc3Npb24gaW4gU2ltcGxlVEFMKS4KLQotLSBJc3N1ZSAjMTY5MTM6IEZpeCBFbGVtZW50Lml0ZXJ0ZXh0KCkncyBoYW5kbGluZyBvZiB0ZXh0IHdpdGggWE1MIGVudGl0aWVzLiwKLQotLSBJc3N1ZSAjMTYwMzQ6IEZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiB0aGUgbmV3IGBiejIuQloyRmlsZWAKLSAgaW1wbGVtZW50YXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MTEyOiBwbGF0Zm9ybS5hcmNoaXRlY3R1cmUgZG9lcyBub3QgY29ycmVjdGx5IGVzY2FwZSBhcmd1bWVudCB0bwotICAvdXNyL2Jpbi9maWxlLiAgUGF0Y2ggYnkgRGF2aWQgQmVuamFtaW4uCi0KLS0gSXNzdWUgIzE1NzU2OiBgc3VicHJvY2Vzcy5wb2xsKClgIG5vdyBwcm9wZXJseSBoYW5kbGVzIGBlcnJuby5FQ0hJTERgIHRvCi0gIHJldHVybiBhIHJldHVybmNvZGUgb2YgMCB3aGVuIHRoZSBjaGlsZCBoYXMgYWxyZWFkeSBleGl0ZWQgb3IgY2Fubm90IGJlIHdhaXRlZAotICBvbi4KLQotLSBJc3N1ZSAjMTUzMjM6IEltcHJvdmUgZmFpbHVyZSBtZXNzYWdlIG9mIGBNb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKClgLgotCi0tIElzc3VlICMxNjA2NDogYGB1bml0dGVzdCAtbWBgIGNsYWltcyBleGVjdXRhYmxlIGlzICJweXRob24iLCBub3QgInB5dGhvbjMiLgotCi0tIElzc3VlICMxMjM3NjogUGFzcyBvbiBwYXJhbWV0ZXJzIGluIGBUZXh0VGVzdFJlc3VsdC5fX2luaXRfXygpYCBzdXBlciBjYWxsLgotCi0tIElzc3VlICMxNTIyMjogSW5zZXJ0IGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBtZXNzYWdlIGluIG1ib3ggbWFpbGJveGVzLgotCi0tIElzc3VlICMxNjAxMzogRml4IGBjc3YuUmVhZGVyYCBwYXJzaW5nIGlzc3VlIHdpdGggZW5kaW5nIHF1b3RlIGNoYXJhY3RlcnMuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1NDIxOiBGaXggYW4gT3ZlcmZsb3dFcnJvciBpbiBgQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXMoKWAgYWZ0ZXIKLSAgYGRhdGV0aW1lLk1BWFlFQVJgLiAgUGF0Y2ggYnkgQ8OpZHJpYyBLcmllci4KLQotLSBJc3N1ZSAjMTU5NzA6IGB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG5vdyBzZXJpYWxpemVzIGNvcnJlY3RseSB0aGUgZW1wdHkgSFRNTAotICBlbGVtZW50cyAnbWV0YScgYW5kICdwYXJhbScuCi0KLS0gSXNzdWUgIzE1ODQyOiBUaGUgYFNvY2tldElPLntyZWFkYWJsZSx3cml0YWJsZSxzZWVrYWJsZX1gIG1ldGhvZHMgbm93IHJhaXNlCi0gIFZhbHVlRXJyb3Igd2hlbiB0aGUgZmlsZS1saWtlIG9iamVjdCBpcyBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgotCi0tIElzc3VlICMxNTg3NjogRml4IGEgcmVmbGVhayBpbiB0aGUgYGN1cnNlc2AgbW9kdWxlOiB3aW5kb3cuZW5jb2RpbmcuCi0KLS0gSXNzdWUgIzE1ODgxOiBGaXggYGF0ZXhpdGAgaG9vayBpbiBgbXVsdGlwcm9jZXNzaW5nYC4gIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzCi0gIE1jRG9ub3VnaC4KLQotLSBJc3N1ZSAjMTU4NDE6IFRoZSByZWFkYWJsZSgpLCB3cml0YWJsZSgpIGFuZCBzZWVrYWJsZSgpIG1ldGhvZHMgb2YKLSAgYGlvLkJ5dGVzSU9gIGFuZCBgaW8uU3RyaW5nSU9gIG9iamVjdHMgbm93IHJhaXNlIFZhbHVlRXJyb3Igd2hlbiB0aGUgb2JqZWN0Ci0gIGhhcyBiZWVuIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCi0KLS0gSXNzdWUgIzE1NDQ3OiBVc2UgYHN1YnByb2Nlc3MuREVWTlVMTGAgaW4gd2ViYnJvd3NlciwgaW5zdGVhZCBvZiBvcGVuaW5nCi0gIGBvcy5kZXZudWxsYCBleHBsaWNpdGx5IGFuZCBsZWF2aW5nIGl0IG9wZW4uCi0KLS0gSXNzdWUgIzE1NTA5OiBgd2ViYnJvd3Nlci5Vbml4QnJvd3NlcmAgbm8gbG9uZ2VyIHBhc3NlcyBlbXB0eSBhcmd1bWVudHMgdG8KLSAgUG9wZW4gd2hlbiBgYCVhY3Rpb25gYCBzdWJzdGl0dXRpb25zIHByb2R1Y2UgZW1wdHkgc3RyaW5ncy4KLQotLSBJc3N1ZSAjMTI3NzYsIGlzc3VlICMxMTgzOTogQ2FsbCBgYXJncGFyc2VgIHR5cGUgZnVuY3Rpb24gKHNwZWNpZmllZCBieQotICBhZGRfYXJndW1lbnQpIG9ubHkgb25jZS4gIEJlZm9yZSwgdGhlIHR5cGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB0d2ljZSBpbiB0aGUKLSAgY2FzZSB3aGVyZSB0aGUgZGVmYXVsdCB3YXMgc3BlY2lmaWVkIGFuZCB0aGUgYXJndW1lbnQgd2FzIGdpdmVuIGFzIHdlbGwuICBUaGlzCi0gIHdhcyBlc3BlY2lhbGx5IHByb2JsZW1hdGljIGZvciB0aGUgRmlsZVR5cGUgdHlwZSwgYXMgYSBkZWZhdWx0IGZpbGUgd291bGQKLSAgYWx3YXlzIGJlIG9wZW5lZCwgZXZlbiBpZiBhIGZpbGUgYXJndW1lbnQgd2FzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgotCi0tIElzc3VlICMxNTkwNjogRml4IGEgcmVncmVzc2lvbiBpbiBgYXJncGFyc2VgIGNhdXNlZCBieSB0aGUgcHJlY2VkaW5nIGNoYW5nZSwKLSAgd2hlbiBgYGFjdGlvbj0nYXBwZW5kJ2BgLCBgYHR5cGU9J3N0cidgYCBhbmQgYGBkZWZhdWx0PVtdYGAuCi0KLUlETEUKLS0tLS0KLQotLSBJc3N1ZSAjMTcxMTQ6IElETEUgbm93IHVzZXMgbm9uLXN0cmljdCBjb25maWcgcGFyc2VyLgotCi0tIElzc3VlICM5MjkwOiBJbiBJRExFIHRoZSBzeXMuc3RkKiBzdHJlYW1zIG5vdyBpbXBsZW1lbnQgaW8uVGV4dElPQmFzZQotICBpbnRlcmZhY2UgYW5kIHN1cHBvcnQgYWxsIG1hbmRhdG9yeSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzLgotCi0tIElzc3VlICMxNjgyOTogSURMRSBwcmludGluZyBubyBsb25nZXIgZmFpbHMgaWYgdGhlcmUgYXJlIHNwYWNlcyBvciBvdGhlcgotICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgcGF0aC4KLQotLSBJc3N1ZSAjMTY0OTE6IElETEUgbm93IHByaW50cyBjaGFpbmVkIGV4Y2VwdGlvbiB0cmFjZWJhY2tzLgotCi0tIElzc3VlICMxNjgxOTogSURMRSBtZXRob2QgY29tcGxldGlvbiBub3cgY29ycmVjdGx5IHdvcmtzIGZvciBieXRlcyBsaXRlcmFscy4KLQotLSBJc3N1ZSAjMTY1MDQ6IElETEUgbm93IGNhdGNoZXMgU3ludGF4RXJyb3JzIHJhaXNlZCBieSB0b2tlbml6ZXIuIFBhdGNoIGJ5Ci0gIFJvZ2VyIFNlcnd5LgotCi0tIElzc3VlICMxNjUxMTogVXNlIGRlZmF1bHQgSURMRSB3aWR0aCBhbmQgaGVpZ2h0IGlmIGNvbmZpZyBwYXJhbSBpcyBub3QgdmFsaWQuCi0gIFBhdGNoIFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzEyMDc1ODk6IEFkZCBDdXQvQ29weS9QYXN0ZSBpdGVtcyB0byBJRExFIHJpZ2h0IGNsaWNrIENvbnRleHQgTWVudQotICBQYXRjaCBieSBUb2RkIFJvdml0by4KLQotVGVzdHMKLS0tLS0tCistIElzc3VlICMxMTk5NTogdGVzdF9weWRvYyBkb2Vzbid0IGltcG9ydCBhbGwgc3lzLnBhdGggbW9kdWxlcyBhbnltb3JlLgogCiAtIElzc3VlICMxNzQ0ODogdGVzdF9zYXggbm93IHNraXBzIGlmIHRoZXJlIGFyZSBubyB4bWwgcGFyc2VycyBhdmFpbGFibGUKICAgaW5zdGVhZCBvZiByYWlzaW5nIGFuIEltcG9ydEVycm9yLgpAQCAtMjI3OCw4ICs0NjU4LDE1IEBACiAKIC0gSXNzdWUgIzEzODk4OiB0ZXN0X3NzbCBubyBsb25nZXIgcHJpbnRzIGEgc3B1cmlvdXMgc3RhY2sgdHJhY2Ugb24gVWJ1bnR1LgogCistIElzc3VlICMxNzI4MzogU2hhcmUgY29kZSBiZXR3ZWVuIGBfX21haW5fXy5weWAgYW5kIGByZWdydGVzdC5weWAgaW4KKyAgYExpYi90ZXN0YC4KKwogLSBJc3N1ZSAjMTcyNDk6IGNvbnZlcnQgYSB0ZXN0IGluIHRlc3RfY2FwaSB0byB1c2UgdW5pdHRlc3QgYW5kIHJlYXAgdGhyZWFkcy4KIAorLSBJc3N1ZSAjMTcxMDc6IFRlc3QgY2xpZW50LXNpZGUgU05JIHN1cHBvcnQgaW4gdXJsbGliLnJlcXVlc3QgdGhhbmtzIHRvCisgIHRoZSBuZXcgc2VydmVyLXNpZGUgU05JIHN1cHBvcnQgaW4gdGhlIHNzbCBtb2R1bGUuICBJbml0aWFsIHBhdGNoIGJ5CisgIERhbmllbCBCbGFjay4KKwogLSBJc3N1ZSAjMTcwNDE6IEZpeCB0ZXN0aW5nIHdoZW4gUHl0aG9uIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUKICAgLS13aXRob3V0LWRvYy1zdHJpbmdzLgogCkBAIC0yMzQ2LDYgKzQ3MzMsMTEgQEAKIAogLSBJc3N1ZSAjMTY3NDg6IHRlc3RfaGVhcHEgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAKKy0gSXNzdWUgIzEwNjQ2OiBUZXN0cyByZWFycmFuZ2VkIGZvciBvcy5zYW1lZmlsZS9zYW1lc3RhdCB0byBjaGVjayBmb3Igbm90CisgIGp1c3Qgc3ltbGlua3MgYnV0IGFsc28gaGFyZCBsaW5rcy4KKworLSBJc3N1ZSAjMTUzMDI6IFN3aXRjaCByZWdydGVzdCBmcm9tIHVzaW5nIGdldG9wdCB0byB1c2luZyBhcmdwYXJzZS4KKwogLSBJc3N1ZSAjMTUzMjQ6IEZpeCByZWdydGVzdCBwYXJzaW5nIG9mIC0tZnJvbWZpbGUsIC0tbWF0Y2gsIGFuZCAtLXJhbmRvbWl6ZQogICBvcHRpb25zLgogCkBAIC0yMzU1LDYgKzQ3NDcsOSBAQAogLSBJc3N1ZSAjMTY2NjQ6IEFkZCByZWdyZXNzaW9uIHRlc3RzIGZvciBnbG9iJ3MgYmVoYXZpb3VyIGNvbmNlcm5pbmcgZW50cmllcwogICBzdGFydGluZyB3aXRoIGEgIi4iLiAgUGF0Y2ggYnkgU2ViYXN0aWFuIEtyZWZ0LgogCistIElzc3VlICMxMzM5MDogVGhlIGBgLVJgYCBvcHRpb24gdG8gcmVncnRlc3Qgbm93IGFsc28gY2hlY2tzIGZvciBtZW1vcnkKKyAgYWxsb2NhdGlvbiBsZWFrcywgdXNpbmcgOmZ1bmM6YHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKWAuCisKIC0gSXNzdWUgIzE2NTU5OiBBZGQgbW9yZSB0ZXN0cyBmb3IgdGhlIGpzb24gbW9kdWxlLCBpbmNsdWRpbmcgc29tZSBmcm9tIHRoZQogICBvZmZpY2lhbCB0ZXN0IHN1aXRlIGF0IGpzb24ub3JnLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIApAQCAtMjM3Myw3ICs0NzY4LDcgQEAKIC0gSXNzdWUgIzE1ODAyOiBGaXggdGVzdCBsb2dpYyBpbiBgVGVzdE1haWxkaXIudGVzdF9jcmVhdGVfdG1wKClgLiBQYXRjaCBieQogICBTZXJoaXkgU3RvcmNoYWthLgogCi0tIElzc3VlICMxNTU1NzogQWRkIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIGB3ZWJicm93c2VyYCBtb2R1bGUsIHRoYW5rcyB0byBBbnRvbgorLSBJc3N1ZSAjMTU1NTc6IEFkZGVkIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIHdlYmJyb3dzZXIgbW9kdWxlLCB0aGFua3MgdG8gQW50b24KICAgQmFya292c2t5LgogCiAtIElzc3VlICMxNjY5ODogU2tpcCBwb3NpeCB0ZXN0X2dldGdyb3VwcyB3aGVuIGJ1aWx0IHdpdGggT1MgWApAQCAtMjM4Miw2ICs0Nzc3LDMwIEBACiBCdWlsZAogLS0tLS0KIAorLSBJc3N1ZSAjMTYwNjc6IEFkZCBkZXNjcmlwdGlvbiBpbnRvIE1TSSBmaWxlIHRvIHJlcGxhY2UgaW5zdGFsbGVyJ3MKKyAgdGVtcG9yYXJ5IG5hbWUuCisKKy0gSXNzdWUgIzE4MjU3OiBGaXggcmVhZGxpbmsgdXNhZ2UgaW4gcHl0aG9uLWNvbmZpZy4gIEluc3RhbGwgdGhlIHB5dGhvbgorICB2ZXJzaW9uIGFnYWluIG9uIERhcndpbi4KKworLSBJc3N1ZSAjMTg0ODE6IEFkZCBDIGNvdmVyYWdlIHJlcG9ydGluZyB3aXRoIGdjb3YgYW5kIGxjb3YuIEEgbmV3IG1ha2UgdGFyZ2V0CisgICJjb3ZlcmFnZS1yZXBvcnQiIGNyZWF0ZXMgYW4gaW5zdHJ1bWVudGVkIFB5dGhvbiBidWlsZCwgcnVucyB1bml0IHRlc3RzCisgIGFuZCBjcmVhdGVzIGEgSFRNTC4gVGhlIHJlcG9ydCBjYW4gYmUgdXBkYXRlZCB3aXRoICJtYWtlIGNvdmVyYWdlLWxjb3YiLgorCistIElzc3VlICMxNzg0NTogQ2xhcmlmaWVkIHRoZSBtZXNzYWdlIHByaW50ZWQgd2hlbiBzb21lIG1vZHVsZSBhcmUgbm90IGJ1aWx0LgorCistIElzc3VlICMxODI1NjogQ29tcGlsYXRpb24gZml4IGZvciByZWNlbnQgQUlYIHJlbGVhc2VzLiAgUGF0Y2ggYnkKKyAgRGF2aWQgRWRlbHNvaG4uCisKKy0gSXNzdWUgIzE3NTQ3OiBJbiBjb25maWd1cmUsIGV4cGxpY2l0bHkgcGFzcyAtV2Zvcm1hdCBmb3IgdGhlIGJlbmVmaXQgZm9yIEdDQworICA0LjguCisKKy0gSXNzdWUgIzE1MTcyOiBEb2N1bWVudCBOQVNNIDIuMTArIGFzIHJlcXVpcmVtZW50IGZvciBidWlsZGluZyBPcGVuU1NMIDEuMC4xCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3NTkxOiBVc2UgbG93ZXJjYXNlIGZpbGVuYW1lcyB3aGVuIGluY2x1ZGluZyBXaW5kb3dzIGhlYWRlciBmaWxlcy4KKyAgUGF0Y2ggYnkgUm91bWVuIFBldHJvdi4KKwogLSBJc3N1ZSAjMTc1NTA6IEZpeCB0aGUgLS1lbmFibGUtcHJvZmlsaW5nIGNvbmZpZ3VyZSBzd2l0Y2guCiAKIC0gSXNzdWUgIzE3NDI1OiBCdWlsZCB3aXRoIG9wZW5zc2wgMS4wLjFkIG9uIFdpbmRvd3MuCkBAIC0yMzk3LDYgKzQ4MTYsMTAgQEAKIAogLSBJc3N1ZSAjMzcxODogVXNlIEFDX0FSR19WQVIgdG8gc2V0IE1BQ0hERVAgaW4gY29uZmlndXJlLmFjLgogCistIElzc3VlICMxNjIzNTogSW1wbGVtZW50IHB5dGhvbi1jb25maWcgYXMgYSBzaGVsbCBzY3JpcHQuCisKKy0gSXNzdWUgIzE2NzY5OiBSZW1vdmUgb3V0ZGF0ZWQgVmlzdWFsIFN0dWRpbyBwcm9qZWN0cy4KKwogLSBJc3N1ZSAjMTcwMzE6IEZpeCBydW5uaW5nIHJlZ2VuIGluIGNyb3NzIGJ1aWxkcy4KIAogLSBJc3N1ZSAjMzc1NDogZml4IHR5cG8gaW4gcHRocmVhZCBBQ19DQUNIRV9WQUwuCkBAIC0yNDA0LDEyICs0ODI3LDE0IEBACiAtIElzc3VlICMxNTQ4NDogRml4IF9QWVRIT05fUFJPSkVDVF9CQVNFIGZvciBzcmNkaXIgIT0gYnVpbGRkaXIgYnVpbGRzOwogICB1c2UgX1BZVEhPTl9QUk9KRUNUX0JBU0UgaW4gZGlzdHV0aWxzL3N5c2NvbmZpZy5weS4KIAorLSBEcm9wIHN1cHBvcnQgZm9yIFdpbmRvd3MgMjAwMCAoY2hhbmdlc2V0IGU1MmRmMDViNDk2YSkuCisKIC0gSXNzdWUgIzE3MDI5OiBMZXQgaDJweSBzZWFyY2ggdGhlIG11bHRpYXJjaCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCiAKIC0gSXNzdWUgIzE2OTUzOiBGaXggc29ja2V0IG1vZHVsZSBjb21waWxhdGlvbiBvbiBwbGF0Zm9ybXMgd2l0aAogICBIQVZFX0JST0tFTl9QT0xMLiBQYXRjaCBieSBKZWZmcmV5IEFybXN0cm9uZy4KIAotLSBJc3N1ZSAjMTY4MzY6IEVuYWJsZSBJUHY2IHN1cHBvcnQgZXZlbiBpZiBJUHY2IGlzIGRpc2FibGVkIG9uIHRoZSBidWlsZCBob3N0LgorLSBJc3N1ZSAjMTYzMjA6IFJlbW92ZSByZWR1bmRhbnQgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciBzdHJpbmdzIGFuZCBieXRlcy4KIAogLSBDcm9zcyBjb21waWxpbmcgbmVlZHMgaG9zdCBhbmQgYnVpbGQgc2V0dGluZ3MuIGNvbmZpZ3VyZSBubyBsb25nZXIKICAgY3JlYXRlcyBhIGJyb2tlbiBQWVRIT05fRk9SX0JVSUxEIHZhcmlhYmxlIHdoZW4gLS1idWlsZCBpcyBtaXNzaW5nLgpAQCAtMjQxNyw2ICs0ODQyLDggQEAKIC0gRml4IGNyb3NzIGNvbXBpbGluZyBpc3N1ZSBpbiBzZXR1cC5weSwgZW5zdXJlIHRoYXQgbGliX2RpcnMgYW5kIGluY19kaXJzIGFyZQogICBkZWZpbmVkIGluIGNyb3NzIGNvbXBpbGluZyBtb2RlLCB0b28uCiAKKy0gSXNzdWUgIzE2ODM2OiBFbmFibGUgSVB2NiBzdXBwb3J0IGV2ZW4gaWYgSVB2NiBpcyBkaXNhYmxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKwogLSBJc3N1ZSAjMTY1OTM6IEhhdmUgQlNEICdtYWtlIC1zJyBkbyB0aGUgcmlnaHQgdGhpbmcsIHRoYW5rcyB0byBEYW5pZWwgU2hhaGFmCiAKIC0gSXNzdWUgIzE2MjYyOiBmaXggb3V0LW9mLXNyYy10cmVlIGJ1aWxkcywgaWYgbWVyY3VyaWFsIGlzIG5vdCBpbnN0YWxsZWQuCkBAIC0yNDMxLDYgKzQ4NTgsOCBAQAogLSBJc3N1ZSAjMTU5MjM6IEZpeCBhIG1pc3Rha2UgaW4gYGBhc2RsX2MucHlgYCB0aGF0IHJlc3VsdGVkIGluIGEgVHlwZUVycm9yCiAgIGFmdGVyIDI4MDFiZjg3NWEyNCAoc2VlICMxNTgwMSkuCiAKKy0gSXNzdWUgIzE2MTM1OiBSZW1vdmUgT1MvMiBzdXBwb3J0LgorCiAtIElzc3VlICMxNTgxOTogTWFrZSBzdXJlIHdlIGNhbiBidWlsZCBQeXRob24gb3V0LW9mLXRyZWUgZnJvbSBhIHJlYWQtb25seQogICBzb3VyY2UgZGlyZWN0b3J5LiAgKFNvbWV3aGF0IHJlbGF0ZWQgdG8gaXNzdWUgIzk4NjAuKQogCkBAIC0yNDQzLDExICs0ODcyLDU0IEBACiBDLUFQSQogLS0tLS0KIAorLSBJc3N1ZSAjMTgzNTE6IEZpeCB2YXJpb3VzIGlzc3VlcyBpbiBhIGZ1bmN0aW9uIGluIGltcG9ydGxpYiBwcm92aWRlZCB0byBoZWxwCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIChhbmQgdGh1cyBieSBleHRlbnNpb24KKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoKSBhbmQgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgpKS4KKworLSBJc3N1ZSAjOTM2OTogVGhlIHR5cGVzIG9mIGBjaGFyKmAgYXJndW1lbnRzIG9mIFB5T2JqZWN0X0NhbGxGdW5jdGlvbigpIGFuZAorICBQeU9iamVjdF9DYWxsTWV0aG9kKCkgbm93IGNoYW5nZWQgdG8gYGNvbnN0IGNoYXIqYC4gIEJhc2VkIG9uIHBhdGNoZXMgYnkKKyAgSsO2cmcgTcO8bGxlciBhbmQgTGFycyBCdWl0aW5jay4KKworLSBJc3N1ZSAjMTcyMDY6IFB5X0NMRUFSKCksIFB5X0RFQ1JFRigpLCBQeV9YSU5DUkVGKCkgYW5kIFB5X1hERUNSRUYoKSBub3cKKyAgZXhwYW5kIHRoZWlyIGFyZ3VtZW50cyBvbmNlIGluc3RlYWQgb2YgbXVsdGlwbGUgdGltZXMuICBQYXRjaCB3cml0dGVuIGJ5IElsbGlhCisgIFBvbG9zdWtoaW4uCisKKy0gSXNzdWUgIzE3NTIyOiBBZGQgdGhlIFB5R0lMU3RhdGVfQ2hlY2soKSBBUEkuCisKKy0gSXNzdWUgIzE3MzI3OiBBZGQgUHlEaWN0X1NldERlZmF1bHQuCisKIC0gSXNzdWUgIzE2ODgxOiBGaXggUHlfQVJSQVlfTEVOR1RIIG1hY3JvIGZvciBHQ0MgPCAzLjEuCiAKKy0gSXNzdWUgIzE2NTA1OiBSZW1vdmUgdW51c2VkIFB5X1RQRkxBR1NfSU5UX1NVQkNMQVNTLgorCistIElzc3VlICMxNjA4NjogUHlUeXBlT2JqZWN0LnRwX2ZsYWdzIGFuZCBQeVR5cGVfU3BlYy5mbGFncyBhcmUgbm93IHVuc2lnbmVkCisgICh1bnNpZ25lZCBsb25nIGFuZCB1bnNpZ25lZCBpbnQpIHRvIGF2b2lkIGFuIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAorICBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgKCgxIDw8IDMxKS4gUHlUeXBlX0dldEZsYWdzKCkgcmVzdWx0IHR5cGUgaXMKKyAgbm93IHVuc2lnbmVkIHRvbyAodW5zaWduZWQgbG9uZywgaW5zdGVhZCBvZiBsb25nKS4KKworLSBJc3N1ZSAjMTYxNjY6IEFkZCBQWV9MSVRUTEVfRU5ESUFOIGFuZCBQWV9CSUdfRU5ESUFOIG1hY3JvcyBhbmQgdW5pZmllZAorICBlbmRpYW5uZXNzIGRldGVjdGlvbiBhbmQgaGFuZGxpbmcuCisKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMTc3MDE6IEltcHJvdmluZyBzdHJmdGltZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxODQ0MDogQ2xhcmlmeSB0aGF0IGBoYXNoKClgIGNhbiB0cnVuY2F0ZSB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbgorICBvYmplY3QncyBjdXN0b20gYF9faGFzaF9fKClgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTc4NDQ6IEFkZCBsaW5rcyB0byBlbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjcy4KKworLSBJc3N1ZSAjMTQwOTc6IGltcHJvdmUgdGhlICJpbnRyb2R1Y3Rpb24iIHBhZ2Ugb2YgdGhlIHR1dG9yaWFsLgorCistIElzc3VlICMxNzk3NzogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjYWRlZmF1bHQgYXJndW1lbnQncyBkZWZhdWx0IHZhbHVlCisgIGluIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKSBpcyBmaXhlZCB0byBtYXRjaCB0aGUgY29kZS4KKworLSBJc3N1ZSAjNjY5NjogYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBQcm9maWxlIG9iamVjdHMsIGFuZCBpbXByb3ZlCisgIHByb2ZpbGUvY1Byb2ZpbGUgZG9jcy4gIFBhdGNoIGJ5IFRvbSBQaW5ja25leS4KKworLSBJc3N1ZSAjMTU5NDA6IFNwZWNpZnkgZWZmZWN0IG9mIGxvY2FsZSBvbiB0aW1lIGZ1bmN0aW9ucy4KKwogLSBJc3N1ZSAxNzUzODogRG9jdW1lbnQgWE1MIHZ1bG5lcmFiaWx0aWVzCiAKIC0gSXNzdWUgIzE2NjQyOiBzY2hlZC5zY2hlZHVsZXIgdGltZWZ1bmMgaW5pdGlhbCBkZWZhdWx0IGlzIHRpbWUubW9ub3RvbmljLgpAQCAtMjQ5Miw4ICs0OTY0LDggQEAKIAogLSBJc3N1ZSAjMTM1Mzg6IEltcHJvdmUgc3RyKCkgYW5kIG9iamVjdC5fX3N0cl9fKCkgZG9jdW1lbnRhdGlvbi4KIAotLSBJc3N1ZSAjMTY0ODk6IE1ha2UgaXQgY2xlYXJlciB0aGF0IGltcG9ydGxpYi5maW5kX2xvYWRlcigpIHJlcXVpcmVzIGFueSBhbmQKLSAgYWxsIHBhY2thZ2VzIHRvIGJlIHNlcGFyYXRlbHkgaW1wb3J0ZWQuCistIElzc3VlICMxNjQ4OTogTWFrZSBpdCBjbGVhcmVyIHRoYXQgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgbmVlZHMgcGFyZW50CisgIHBhY2thZ2VzIHRvIGJlIGV4cGxpY2l0bHkgaW1wb3J0ZWQuCiAKIC0gSXNzdWUgIzE2NDAwOiBVcGRhdGUgdGhlIGRlc2NyaXB0aW9uIG9mIHdoaWNoIHZlcnNpb25zIG9mIGEgZ2l2ZW4gcGFja2FnZQogICBQeVBJIGRpc3BsYXlzLgpAQCAtMjUxNiw2ICs0OTg4LDkgQEAKIC0gSXNzdWUgIzE2MTE1OiBJbXByb3ZlIHN1YnByb2Nlc3MuUG9wZW4oKSBkb2N1bWVudGF0aW9uIGFyb3VuZCBhcmdzLCBzaGVsbCwKICAgYW5kIGV4ZWN1dGFibGUgYXJndW1lbnRzLgogCistIElzc3VlICMxMzQ5ODogQ2xhcmlmeSBkb2NzIG9mIG9zLm1ha2VkaXJzKCkncyBleGlzdF9vayBhcmd1bWVudC4gIERvbmUgd2l0aAorICBncmVhdCBuYXRpdmUtc3BlYWtlciBoZWxwIGZyb20gUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxNTUzMzogQ2xhcmlmeSBkb2NzIGFuZCBhZGQgdGVzdHMgZm9yIGBzdWJwcm9jZXNzLlBvcGVuKClgJ3MgY3dkCiAgIGFyZ3VtZW50LgogCkBAIC0yNTM2LDE3ICs1MDExLDQ3IEBACiBUb29scy9EZW1vcwogLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAjMTcxNTY6IHB5Z2V0dGV4dC5weSBub3cgdXNlcyBhbiBlbmNvZGluZyBvZiBzb3VyY2UgZmlsZSBhbmQgY29ycmVjdGx5Ci0gIHdyaXRlcyBhbmQgZXNjYXBlcyBub24tYXNjaWkgY2hhcmFjdGVycy4KKy0gSXNzdWUgIzE4ODE3OiBGaXggYSByZXNvdXJjZSB3YXJuaW5nIGluIExpYi9haWZjLnB5IGRlbW8uICBQYXRjaCBieQorICBWYWpyYXNreSBLb2suCisKKy0gSXNzdWUgIzE4NDM5OiBNYWtlIHBhdGNoY2hlY2sgd29yayBvbiBXaW5kb3dzIGZvciBBQ0tTLCBORVdTLgorCistIElzc3VlICMxODQ0ODogRml4IGEgdHlwbyBpbiBUb29scy9kZW1vL2VpZmZlbC5weS4KKworLSBJc3N1ZSAjMTg0NTc6IEZpeGVkIHNhdmluZyBvZiBmb3JtdWxhcyBhbmQgY29tcGxleCBudW1iZXJzIGluCisgIFRvb2xzL2RlbW8vc3MxLnB5LgorCistIElzc3VlICMxODQ0OTogTWFrZSBUb29scy9kZW1vL3NzMS5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLiAgUGF0Y2ggYnkKKyAgRsOpdnJ5IFRoaWJhdWx0LgorCistIElzc3VlICMxMjk5MDogVGhlICJQeXRob24gTGF1bmNoZXIiIG9uIE9TWCBjb3VsZCBub3QgbGF1bmNoIHB5dGhvbiBzY3JpcHRzCisgIHRoYXQgaGF2ZSBwYXRocyB0aGF0IGluY2x1ZGUgd2lkZSBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxNTIzOTogTWFrZSBta3N0cmluZ3ByZXAucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4KKworLSBJc3N1ZSAjMTcwMjg6IEFsbG93ZWQgUHl0aG9uIGFyZ3VtZW50cyB0byBiZSBzdXBwbGllZCB0byB0aGUgV2luZG93cworICBsYXVuY2hlci4KKworLSBJc3N1ZSAjMTcxNTY6IHB5Z2V0dGV4dC5weSBub3cgZGV0ZWN0cyB0aGUgZW5jb2Rpbmcgb2Ygc291cmNlIGZpbGVzIGFuZAorICBjb3JyZWN0bHkgd3JpdGVzIGFuZCBlc2NhcGVzIG5vbi1hc2NpaSBjaGFyYWN0ZXJzLgogCiAtIElzc3VlICMxNTUzOTogRml4IGEgbnVtYmVyIG9mIGJ1Z3MgaW4gVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5LiAgTm93CiAgIHBpbmRlbnQucHkgd29ya3Mgd2l0aCBhICJ3aXRoIiBzdGF0ZW1lbnQuICBwaW5kZW50LnB5IG5vIGxvbmdlciBwcm9kdWNlcwogICBpbXByb3BlciBpbmRlbnRhdGlvbi4gIHBpbmRlbnQucHkgbm93IHdvcmtzIHdpdGggY29udGludWVkIGxpbmVzIGJyb2tlbiBhZnRlcgogICAiY2xhc3MiIG9yICJkZWYiIGtleXdvcmRzIGFuZCB3aXRoIGNvbnRpbnVhdGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGxpbmUuCiAKLS0gSXNzdWUgIzE1Mzc4OiBGaXggVG9vbHMvdW5pY29kZS9jb21wYXJlY29kZWNzLnB5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKy0gSXNzdWUgIzExNzk3OiBBZGQgYSAydG8zIGZpeGVyIHRoYXQgbWFwcyByZWxvYWQoKSB0byBpbXAucmVsb2FkKCkuCiAKLS0gSXNzdWUgIzE2NDc2OiBGaXgganNvbi50b29sIHRvIGF2b2lkIGluY2x1ZGluZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorLSBJc3N1ZSAjMTA5NjY6IFJlbW92ZSB0aGUgY29uY2VwdCBvZiB1bmV4cGVjdGVkIHNraXBwZWQgdGVzdHMuCisKKy0gSXNzdWUgIzk4OTM6IFJlbW92ZWQgdGhlIE1pc2MvVmltIGRpcmVjdG9yeS4KKworLSBSZW1vdmVkIHRoZSBNaXNjL1RleHRNYXRlIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTYyNDU6IEFkZCB0aGUgVG9vbHMvc2NyaXB0cy9wYXJzZV9odG1sNV9lbnRpdGllcy5weSBzY3JpcHQgdG8gcGFyc2UKKyAgdGhlIGxpc3Qgb2YgSFRNTDUgZW50aXRpZXMgYW5kIHVwZGF0ZSB0aGUgaHRtbC5lbnRpdGllcy5odG1sNSBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxNTM3ODogRml4IFRvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKIC0gSXNzdWUgIzE2NTQ5OiBNYWtlIGpzb24udG9vbCB3b3JrIGFnYWluIG9uIFB5dGhvbiAzIGFuZCBhZGQgdGVzdHMuCiAgIEluaXRpYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZyBhbmQgU2VyaGl5IFN0b3JjaGFrYS4KQEAgLTI1NTQsNiArNTA1OSwxMiBAQAogLSBJc3N1ZSAjMTMzMDE6IHVzZSBhc3QubGl0ZXJhbF9ldmFsKCkgaW5zdGVhZCBvZiBldmFsKCkgaW4gVG9vbHMvaTE4bi9tc2dmbXQucHkKICAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIAorV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMxODU2OTogVGhlIGluc3RhbGxlciBub3cgYWRkcyAucHkgdG8gdGhlIFBBVEhFWFQgdmFyaWFibGUgd2hlbiBleHRlbnNpb25zCisgIGFyZSByZWdpc3RlcmVkLiBQYXRjaCBieSBQYXVsIE1vb3JlLgorCiAKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNjQxLDYgKzUxNTIsOSBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMxNzE1ODogQWRkICdzeW1ib2xzJyB0byBoZWxwKCkgd2VsY29tZSBtZXNzYWdlOyBjbGFyaWZ5CisgICdtb2R1bGVzIHNwYW0nIG1lc3NhZ2VzLgorCiAtIElzc3VlICMxNTg0NzogRml4IGEgcmVncmVzc2lvbiBpbiBhcmdwYXJzZSwgd2hpY2ggZGlkIG5vdCBhY2NlcHQgdHVwbGVzIGFzCiAgIGFyZ3VtZW50IGxpc3RzIGFueW1vcmUuCiAKQEAgLTMxMzEsNiArNTY0NSwxMCBAQAogLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgYGZpbGVjbXAuZGlyY21wKClgIGNvbXBhcmVzIGZpbGVzIHNoYWxsb3dseS4gUGF0Y2gKICAgY29udHJpYnV0ZWQgYnkgQ2hyaXMgSmVyZG9uZWsuCiAKKy0gSXNzdWUgIzE1NDQyOiBFeHBvc2UgdGhlIGRlZmF1bHQgbGlzdCBvZiBkaXJlY3RvcmllcyBpZ25vcmVkIGJ5CisgIGBmaWxlY21wLmRpcmNtcCgpYCBhcyBhIG1vZHVsZSBhdHRyaWJ1dGUsIGFuZCBleHBhbmQgdGhlIGxpc3QgdG8gbW9yZSBtb2Rlcm4KKyAgdmFsdWVzLgorCiBUZXN0cwogLS0tLS0KIApAQCAtMzI0Myw5ICs1NzYxLDYgQEAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMTYzMDU6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvY2N1cnJpbmcgd2hlbiBpbnRlcnJ1cHRpbmcKLSAgbWF0aC5mYWN0b3JpYWwuCi0KIC0gSXNzdWUgIzEyMjg4OiBDb25zaWRlciAnMCcgYW5kICcwLjAnIGFzIHZhbGlkIGluaXRpYWx2YWx1ZQogICBmb3IgdGtpbnRlciBTaW1wbGVEaWFsb2cuCiAKQEAgLTQ1NzMsNyArNzA4OCw3IEBACiAgIGRlYWxsb2NhdG9yIGNhbGxzIG9uZSBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgdHlwZSAoZS5nLiB3aGVuIHN1YmNsYXNzaW5nCiAgIElPQmFzZSkuICBEaWFnbm9zaXMgYW5kIHBhdGNoIGJ5IERhdmlkZSBSaXp6by4KIAotLSBJc3N1ZSAjOTYxMSwgIzkwMTU6IEZpbGVJTy5yZWFkKCkgY2xhbXBzIHRoZSBsZW5ndGggdG8gSU5UX01BWCBvbiBXaW5kb3dzLgorLSBJc3N1ZSAjOTYxMSwgSXNzdWUgIzkwMTU6IEZpbGVJTy5yZWFkKCkgY2xhbXBzIHRoZSBsZW5ndGggdG8gSU5UX01BWCBvbiBXaW5kb3dzLgogCiAtIElzc3VlICM5NjQyOiBVbmlmb3JtaXplIHRoZSB0ZXN0cyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBtYmNzIGNvZGVjLCBhZGQKICAgYSBuZXcgSEFWRV9NQkNTIGRlZmluZS4KQEAgLTQ5NDAsNyArNzQ1NSw3IEBACiAtIElzc3VlICMxMzU4OTogRml4IHNvbWUgc2VyaWFsaXphdGlvbiBwcmltaXRpdmVzIGluIHRoZSBhaWZjIG1vZHVsZS4KICAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KIAotLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIGBgdXNlcjpwYXNzd29yZGBgIGR1cmluZyBCYXNpYworLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIHVzZXI6cGFzc3dvcmQgZHVyaW5nIEJhc2ljCiAgIEF1dGhlbnRpY2F0aW9uLiBQYXRjaCBjb250cmlidXRlZCBieSBKb29uYXMgS3VvcmlsZWh0by4KIAogLSBJc3N1ZSAjMTIzNjQ6IEZpeCBhIGhhbmcgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCkBAIC01MDQxLDcgKzc1NTYsNyBAQAogICAnaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlcicsICdubnRwbGliLk5OVFAueGd0aXRsZScsICdubnRwbGliLk5OVFAueHBhdGgnLAogICBhbmQgcHJpdmF0ZSBhdHRyaWJ1dGVzIG9mICdzbXRwZC5TTVRQQ2hhbm5lbCcuCiAKLS0gSXNzdWUgIzU5MDUsICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKKy0gSXNzdWUgIzU5MDUsIElzc3VlICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKICAgZW5jb2RpbmcsIGluc3RlYWQgb2YgVVRGLTgsIGlmIHRoZSB3Y3NmdGltZSgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCiAKIC0gSXNzdWUgIzEzNDY0OiBBZGQgYSByZWFkaW50bygpIG1ldGhvZCB0byBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuICBQYXRjaApAQCAtNTM5OSw4ICs3OTE0LDggQEAKIC0gSXNzdWUgIzEyNjA3OiBJbiBzdWJwcm9jZXNzLCBmaXggaXNzdWUgd2hlcmUgaWYgc3RkaW4sIHN0ZG91dCBvciBzdGRlcnIgaXMKICAgZ2l2ZW4gYXMgYSBsb3cgZmQsIGl0IGdldHMgb3ZlcndyaXR0ZW4uCiAKLS0gSXNzdWUgIzEyNTc2OiBGaXggdXJsb3BlbiBiZWhhdmlvciBvbiBzaXRlcyB3aGljaCBkbyBub3Qgc2VuZCAob3Igb2JmdXNjYXRlKQotICBhIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIuCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIuCiAKIC0gSXNzdWUgIzEyNTYwOiBCdWlsZCBsaWJweXRob24uc28gb24gT3BlbkJTRC4gUGF0Y2ggYnkgU3RlZmFuIFNwZXJsaW5nLgogCkBAIC01OTU4LDYgKzg0NzMsOSBAQAogLSBJc3N1ZSAjMTE2MzU6IERvbid0IHVzZSBwb2xsaW5nIGluIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMgbGF1bmNoZWQgYnkKICAgY29uY3VycmVudC5mdXR1cmVzLgogCistIElzc3VlICM1ODQ1OiBBdXRvbWF0aWNhbGx5IHJlYWQgcmVhZGxpbmUgY29uZmlndXJhdGlvbiB0byBlbmFibGUgY29tcGxldGlvbgorICBpbiBpbnRlcmFjdGl2ZSBtb2RlLgorCiAtIElzc3VlICM2ODExOiBBbGxvdyBpbXBvcnRsaWIgdG8gY2hhbmdlIGEgY29kZSBvYmplY3QncyBjb19maWxlbmFtZSBhdHRyaWJ1dGUKICAgdG8gbWF0Y2ggdGhlIHBhdGggdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGN1cnJlbnRseSBpcywgbm90IHdoZXJlIHRoZSBjb2RlCiAgIG9iamVjdCBvcmlnaW5hbGx5IGNhbWUgZnJvbS4KZGlmZiAtLWdpdCBhL01pc2MvUkVBRE1FIGIvTWlzYy9SRUFETUUKaW5kZXggMTE4ZjZjNy4uZTc3ODBhMiAxMDA2NDQKLS0tIGEvTWlzYy9SRUFETUUKKysrIGIvTWlzYy9SRUFETUUKQEAgLTIyLDkgKzIyLDcgQEAKIFJFQURNRS5jb3Zlcml0eSAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgQ292ZXJpdHkncyBQcmV2ZW50IG9uIFB5dGhvbgogUkVBRE1FLnZhbGdyaW5kICAgICAgICAgSW5mb3JtYXRpb24gZm9yIFZhbGdyaW5kIHVzZXJzLCBzZWUgdmFsZ3JpbmQtcHl0aG9uLnN1cHAKIFJQTSAgICAgICAgICAgICAgICAgICAgIChPbGQpIHRvb2xzIHRvIGJ1aWxkIFJQTXMKLXN2bm1hcC50eHQgICAgICAgICAgICAgIE1hcCBvZiBvbGQgU1ZOIHJldnMgYW5kIGJyYW5jaGVzIHRvIGhnIGNoYW5nZXNldCBpZHMKIFNwZWNpYWxCdWlsZHMudHh0ICAgICAgIERlc2NyaWJlcyBleHRyYSBzeW1ib2xzIHlvdSBjYW4gc2V0IGZvciBkZWJ1ZyBidWlsZHMKLVRleHRNYXRlICAgICAgICAgICAgICAgIEEgVGV4dE1hdGUgYnVuZGxlIGZvciBQeXRob24gZGV2ZWxvcG1lbnQKK3N2bm1hcC50eHQgICAgICAgICAgICAgIE1hcCBvZiBvbGQgU1ZOIHJldnMgYW5kIGJyYW5jaGVzIHRvIGhnIGNoYW5nZXNldCBpZHMKIHZhbGdyaW5kLXB5dGhvbi5zdXBwICAgIFZhbGdyaW5kIHN1cHByZXNzaW9uIGZpbGUsIHNlZSBSRUFETUUudmFsZ3JpbmQKIHZncmluZGVmcyAgICAgICAgICAgICAgIFB5dGhvbiBjb25maWd1cmF0aW9uIGZvciB2Z3JpbmQgKGEgZ2VuZXJpYyBwcmV0dHkgcHJpbnRlcikKLVZpbSAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMgZm9yIHRoZSBWaW0gZWRpdG9yCmRpZmYgLS1naXQgYS9NaXNjL1JQTS9weXRob24tMy4zLnNwZWMgYi9NaXNjL1JQTS9weXRob24tMy40LnNwZWMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gTWlzYy9SUE0vcHl0aG9uLTMuMy5zcGVjCnJlbmFtZSB0byBNaXNjL1JQTS9weXRob24tMy40LnNwZWMKaW5kZXggOTQzMzJmYS4uNzRmNTViYyAxMDA2NDQKLS0tIGEvTWlzYy9SUE0vcHl0aG9uLTMuMy5zcGVjCisrKyBiL01pc2MvUlBNL3B5dGhvbi0zLjQuc3BlYwpAQCAtMzksOCArMzksOCBAQAogCiAlZGVmaW5lIG5hbWUgcHl0aG9uCiAjLS1zdGFydCBjb25zdGFudHMtLQotJWRlZmluZSB2ZXJzaW9uIDMuMy41Ci0lZGVmaW5lIGxpYnZlcnMgMy4zCislZGVmaW5lIHZlcnNpb24gMy40LjEKKyVkZWZpbmUgbGlidmVycyAzLjQKICMtLWVuZCBjb25zdGFudHMtLQogJWRlZmluZSByZWxlYXNlIDFweWRvdG9yZwogJWRlZmluZSBfX3ByZWZpeCAvdXNyCkBAIC04Myw4ICs4Myw3IEBACiBsaWJyYXJpZXMsIGFzIHdlbGwgYXMgdG8gdmFyaW91cyB3aW5kb3cgc3lzdGVtcywgYW5kIGlzIGV4dGVuc2libGUgaW4gQyBvcgogQysrLiBJdCBpcyBhbHNvIHVzYWJsZSBhcyBhbiBleHRlbnNpb24gbGFuZ3VhZ2UgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQKIGEgcHJvZ3JhbW1hYmxlIGludGVyZmFjZS4gIEZpbmFsbHksIFB5dGhvbiBpcyBwb3J0YWJsZTogaXQgcnVucyBvbiBtYW55Ci1icmFuZHMgb2YgVU5JWCwgb24gUENzIHVuZGVyIFdpbmRvd3MsIE1TLURPUywgYW5kIE9TLzIsIGFuZCBvbiB0aGUKLU1hYy4KK2JyYW5kcyBvZiBVTklYLCBvbiBQQ3MgdW5kZXIgV2luZG93cywgTVMtRE9TLCBhbmQgb24gdGhlIE1hYy4KIAogJXBhY2thZ2UgZGV2ZWwKIFN1bW1hcnk6IFRoZSBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcyBuZWVkZWQgZm9yIFB5dGhvbiBleHRlbnNpb24gZGV2ZWxvcG1lbnQuCmRpZmYgLS1naXQgYS9NaXNjL1NwZWNpYWxCdWlsZHMudHh0IGIvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dAppbmRleCBmODY5ZTdjLi43MzJjYjAwIDEwMDY0NAotLS0gYS9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CisrKyBiL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKQEAgLTEzLDEyICsxMywxNCBAQAogLS0tLS0tLS0tLS0tCiAKIFR1cm4gb24gYWdncmVnYXRlIHJlZmVyZW5jZSBjb3VudGluZy4gIFRoaXMgYXJyYW5nZXMgdGhhdCBleHRlcm4gX1B5X1JlZlRvdGFsCi1ob2xkIGEgY291bnQgb2YgYWxsIHJlZmVyZW5jZXMsIHRoZSBzdW0gb2Ygb2JfcmVmY250IGFjcm9zcyBhbGwgb2JqZWN0cy4gIEluIGEKLWRlYnVnLW1vZGUgYnVpbGQsIHRoaXMgaXMgd2hlcmUgdGhlICI4Mjg4IiBjb21lcyBmcm9tIGluCitob2xkIGEgY291bnQgb2YgYWxsIHJlZmVyZW5jZXMsIHRoZSBzdW0gb2Ygb2JfcmVmY250IGFjcm9zcyBhbGwgb2JqZWN0cy4KK1Bhc3NpbmcgYGAtWCBzaG93cmVmY291bnRgYCBvbiB0aGUgY29tbWFuZCBsaW5lIGNhdXNlcyB0aGUgaW50ZXJhY3RpdmUKK2ludGVycHJldGVyIHRvIHByaW50IHRoZSByZWZlcmVuY2UgY291bnQgdG90YWwgYXMgd2VsbCB0aGUgbnVtYmVyIG9mIG1lbW9yeQorYmxvY2tzIGFsbG9jYXRlZCBhZnRlciBlYWNoIHN0YXRlbWVudDoKIAogICAgID4+PiAyMwogICAgIDIzCi0gICAgWzgyODggcmVmc10KKyAgICBbODI4OCByZWZzLCAxNDMzMiBibG9ja3NdCiAgICAgPj4+CiAKIE5vdGUgdGhhdCBpZiB0aGlzIGNvdW50IGluY3JlYXNlcyB3aGVuIHlvdSdyZSBub3Qgc3RvcmluZyBhd2F5IG5ldyBvYmplY3RzLApAQCAtMTA1LDcgKzEwNyw5IEBACiBwWy0yKlM6LVNdCiAgICAgTnVtYmVyIG9mIGJ5dGVzIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAgVGhpcyBpcyBhIHNpemVfdCwgYmlnLWVuZGlhbiAoZWFzaWVyCiAgICAgdG8gcmVhZCBpbiBhIG1lbW9yeSBkdW1wKS4KLXBbLVM6MF0KK3BbLVNdCisgICAgQVBJIElELiAgU2VlIFBFUCA0NDUuICBUaGlzIGlzIGEgY2hhcmFjdGVyLCBidXQgc2VlbXMgdW5kb2N1bWVudGVkLgorcFstUysxOjBdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIHVuZGVyLSB3cml0ZXMgYW5kIHJlYWRzLgogcFswOk5dCiAgICAgVGhlIHJlcXVlc3RlZCBtZW1vcnksIGZpbGxlZCB3aXRoIGNvcGllcyBvZiBDTEVBTkJZVEUsIHVzZWQgdG8gY2F0Y2gKZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24udG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZmFkYTguLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyEvdXNyL2Jpbi9weXRob24KLSIiIkdlbmVyYXRlIGNvZGUgdG8gd2FybiBhYm91dCBhIG1vZHVsZSdzIHJlbW92YWwgaW4gUHl0aG9uIDMuMC4KLQotWFhYIE5vdCBzdXBwb3J0ZWQ6Ci0tIE1vZHVsZSdzIGluIGEgcGFja2FnZSBkbyBub3QgaGF2ZSB0aGVpciBmdWxsIG5hbWUgZ2VuZXJhdGVkLgotLSBQYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlOyBzaG91bGQgZGV0ZWN0IGFuZCB1c2UgdGhlIHBhY2thZ2UncyBuYW1lIGluc3RlYWQuCi0KLSIiIgotcHlfdGVtcGxhdGUgPSAiIiJmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJucHkzawotd2FybnB5M2soInRoZSAkezE6JXN9IG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjAiLCBzdGFja2xldmVsPTIpCi1kZWwgd2FybnB5M2skMCIiIgotCi1jX3RlbXBsYXRlID0gIiIiCi1pZiAoUHlFcnJfV2FyblB5M2soInRoZSAkezE6JXN9IG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluICIKLSAgICAgICAgICAgICAgICAgICAiUHl0aG9uIDMuMCIsIDIpICZsdDsgMCkKLSAgICByZXR1cm47JDAiIiIKLQotCi1pbXBvcnQgaW1wCi1pbXBvcnQgb3MKLQotZmlsZV9uYW1lID0gb3MucGF0aC5zcGxpdChvcy5lbnZpcm9uWydUTV9GSUxFUEFUSCddKVsxXQotCi1weV9zdWZmaXhlcyA9IHJldmVyc2VkKHNvcnRlZCgoc3VmZml4WzBdIGZvciBzdWZmaXggaW4gaW1wLmdldF9zdWZmaXhlcygpIGlmIHN1ZmZpeFsyXSA9PSBpbXAuUFlfU09VUkNFKSwga2V5PWxlbikpCi1jX3N1ZmZpeGVzID0gcmV2ZXJzZWQoc29ydGVkKChvcy5wYXRoLnNwbGl0ZXh0KHN1ZmZpeFswXSlbMF0gKyAnLmMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gaW1wLmdldF9zdWZmaXhlcygpIGlmIHN1ZmZpeFsyXSA9PSBpbXAuQ19FWFRFTlNJT04pLCBrZXk9bGVuKSkKLQotcGFpcmluZ3MgPSAoKHB5X3N1ZmZpeGVzLCBweV90ZW1wbGF0ZSksIChjX3N1ZmZpeGVzLCBjX3RlbXBsYXRlKSkKLQotZGVmIGNyZWF0ZV90ZW1wbGF0ZShzdWZmaXhlcywgdGVtcGxhdGUpOgotICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6Ci0gICAgICAgIGlmIG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoc3VmZml4KToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIG1vZHVsZV9uYW1lID0gZmlsZV9uYW1lWzotbGVuKHN1ZmZpeCldCi0gICAgICAgIHJldHVybiB0ZW1wbGF0ZSAlIG1vZHVsZV9uYW1lCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotZm9yIHRlbXBsYXRlIGluIChjcmVhdGVfdGVtcGxhdGUoKnBhaXIpIGZvciBwYWlyIGluIHBhaXJpbmdzKToKLSAgICBpZiBub3QgdGVtcGxhdGU6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgcHJpbnQgdGVtcGxhdGUsCi0gICAgYnJlYWsKLWVsc2U6Ci0gICAgcHJpbnQgJ1hYWCBDb3VsZCBub3QgZ2VuZXJhdGUgY29kZS4nPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+MiB0byAzIC0gTW9kdWxlIERlbGV0aW9uPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmluc2VydEFzU25pcHBldDwvc3RyaW5nPgotCTxrZXk+dGFiVHJpZ2dlcjwva2V5PgotCTxzdHJpbmc+MnRvM21vZGRlbDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkIERvY3MudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkIERvY3MudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTRkNTNiLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZCBEb2NzLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFhYWCBMZW9wYXJkLXNwZWNpZmljIHVubGVzcyBoYXZlIGVhc3kgd2F5IHRvIHNwZWNpZmljIGFsdGVybmF0aXZlIFB5dGhvbiBleGVjdXRhYmxlLgotCi1jZCAkVE1fUFJPSkVDVF9ESVJFQ1RPUlkvRG9jCi1tYWtlIGh0bWwgMiZndDsmYW1wOzEgfCBwcmUKLQotcmVzY2FuX3Byb2plY3Q8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5CdWlsZCBEb2NzPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPnNob3dBc0hUTUw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPjZFRjE1MUU1LTcxNDktNEY4Mi04Nzk2LTBDQzQwRkU1ODlGQTwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZC50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmZkYTVjLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZC50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBYWFggVE9ETwotIyAtIEhpZ2hsaWdodCBhbnkgY29tcGlsZXIgd2FybmluZ3MgZm9yIFB5dGhvbiBjb2RlLgotIyAtIFBvaW50IG91dCBpZiBjb21waWxlIGZhaWxlZC4KLQotY2QgJFRNX1BST0pFQ1RfRElSRUNUT1JZCi1tYWtlIC1zIC1qMiAyJmd0OyZhbXA7MSB8IHByZQotCi1yZXNjYW5fcHJvamVjdDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPkJ1aWxkIFB5dGhvbjwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5zaG93QXNIVE1MPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5CNTQ1QkIxQi1BOEUxLTQyNkMtQjUwQS00MjZFNzhCOTZEMzg8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvR28gdG8gSXNzdWUudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0dvIHRvIElzc3VlLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVkMzBiYy4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvR28gdG8gSXNzdWUudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm9wZW4gImh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUkKGNhdCkiPC9zdHJpbmc+Ci0JPGtleT5mYWxsYmFja0lucHV0PC9rZXk+Ci0JPHN0cmluZz53b3JkPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+c2VsZWN0aW9uPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5HbyB0byBJc3N1ZTwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5kaXNjYXJkPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5GRDI1QThEQy0yMkRDLTRFRDQtQjIyMi1COTQzQzhBOTExN0Q8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBEb2NzLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIERvY3MudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFiZTQzLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIERvY3MudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgU2VhcmNoIG9yZGVyOgotIyAgLSBDdXJyZW50IHByb2plY3QuCi0jICAtIFRNX1BZVEhPTkRFVl9ET0NTLgotIyAgLSBPbmxpbmUgZG9jcyBpbiBkZXZlbG9wbWVudC4KLQotaHRtbF9pbmRleD0kVE1fUFJPSkVDVF9ESVJFQ1RPUlkvRG9jL2J1aWxkL2h0bWwvaW5kZXguaHRtbAotaWYgW1sgLWYgJGh0bWxfaW5kZXggXV07IHRoZW4KLQlvcGVuICRodG1sX2luZGV4Ci1lbGlmIFtbICRUTV9QWVRIT05ERVZfRE9DUyBdXTsgdGhlbgotCW9wZW4gJFRNX1BZVEhPTkRFVl9ET0NTCi1lbHNlCi0Jb3BlbiBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldi8KLWZpPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+a2V5RXF1aXZhbGVudDwva2V5PgotCTxzdHJpbmc+QEg8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPk9wZW4gRG9jczwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5kaXNjYXJkPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5CRjMzNkZGRi1FMTRELTRCRjEtQTE1Ni03MUNGNzY4QUMwMzQ8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBQRVAudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gUEVQLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1NTMzYS4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBQRVAudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgWFhYIFdvcnRoIHN1cHBvcnRpbmcgdXNpbmcgYSBsb2NhbCBjb3B5PwotCi0jIER1bWIgbHVjayB0aGF0IGFuIHVucmVjb2duaXplZCBudW1iZXIgbGVhZHMgdG8gYSAwIGJlaW5nIHVzZWQuCi1vcGVuIGBwcmludGYgImh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtJTA0ZCIgJChjYXQpYDwvc3RyaW5nPgotCTxrZXk+ZmFsbGJhY2tJbnB1dDwva2V5PgotCTxzdHJpbmc+d29yZDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPnNlbGVjdGlvbjwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+T3BlbiBQRVA8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+ZGlzY2FyZDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+RURCQjAzN0YtQUFFMy00NTEyLTg2M0YtRDlBQTgyQzlFNTFFPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0ICJhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9TbmlwcGV0cy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gXDA1MGRvY3NcMDUxLnRtU25pcHBldCIgImIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL1NuaXBwZXRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiBcMDUwZG9jc1wwNTEudG1TbmlwcGV0IgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlOGJhZS4uMDAwMDAwMAotLS0gImEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL1NuaXBwZXRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiBcMDUwZG9jc1wwNTEudG1TbmlwcGV0IgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5jb250ZW50PC9rZXk+Ci0JPHN0cmluZz4uLiBkZXByZWNhdGVkOjogMi42Ci0gICBUaGUgOm1vZDpcYCR7MX1cYCBtb2R1bGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy4wLgotJHswfTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+MiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIChkb2NzKTwvc3RyaW5nPgotCTxrZXk+dGFiVHJpZ2dlcjwva2V5PgotCTxzdHJpbmc+MnRvM2RvY2RlbDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+MDU2ODQxMEQtRUFGMS00QUYzLUI2REUtOEFGMTMzQTkxODIxPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL2luZm8ucGxpc3QgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvaW5mby5wbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxMGQ1ZC4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvaW5mby5wbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5tYWluTWVudTwva2V5PgotCTxkaWN0PgotCQk8a2V5Pml0ZW1zPC9rZXk+Ci0JCTxhcnJheT4KLQkJCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPjA1Njg0MTBELUVBRjEtNEFGMy1CNkRFLThBRjEzM0E5MTgyMTwvc3RyaW5nPgotCQkJPHN0cmluZz4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L3N0cmluZz4KLQkJCTxzdHJpbmc+QjU0NUJCMUItQThFMS00MjZDLUI1MEEtNDI2RTc4Qjk2RDM4PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPjZFRjE1MUU1LTcxNDktNEY4Mi04Nzk2LTBDQzQwRkU1ODlGQTwvc3RyaW5nPgotCQkJPHN0cmluZz4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L3N0cmluZz4KLQkJCTxzdHJpbmc+QkYzMzZGRkYtRTE0RC00QkYxLUExNTYtNzFDRjc2OEFDMDM0PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkZEMjVBOERDLTIyREMtNEVENC1CMjIyLUI5NDNDOEE5MTE3RDwvc3RyaW5nPgotCQkJPHN0cmluZz5FREJCMDM3Ri1BQUUzLTQ1MTItODYzRi1EOUFBODJDOUU1MUU8L3N0cmluZz4KLQkJPC9hcnJheT4KLQkJPGtleT5zdWJtZW51czwva2V5PgotCQk8ZGljdC8+Ci0JPC9kaWN0PgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+UHl0aG9uLURldjwvc3RyaW5nPgotCTxrZXk+b3JkZXJpbmc8L2tleT4KLQk8YXJyYXk+Ci0JCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci0JCTxzdHJpbmc+MDU2ODQxMEQtRUFGMS00QUYzLUI2REUtOEFGMTMzQTkxODIxPC9zdHJpbmc+Ci0JCTxzdHJpbmc+QjU0NUJCMUItQThFMS00MjZDLUI1MEEtNDI2RTc4Qjk2RDM4PC9zdHJpbmc+Ci0JCTxzdHJpbmc+NkVGMTUxRTUtNzE0OS00RjgyLTg3OTYtMENDNDBGRTU4OUZBPC9zdHJpbmc+Ci0JCTxzdHJpbmc+RkQyNUE4REMtMjJEQy00RUQ0LUIyMjItQjk0M0M4QTkxMTdEPC9zdHJpbmc+Ci0JCTxzdHJpbmc+QkYzMzZGRkYtRTE0RC00QkYxLUExNTYtNzFDRjc2OEFDMDM0PC9zdHJpbmc+Ci0JCTxzdHJpbmc+RURCQjAzN0YtQUFFMy00NTEyLTg2M0YtRDlBQTgyQzlFNTFFPC9zdHJpbmc+Ci0JPC9hcnJheT4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkE5MzJFQ0QxLUQ0M0EtNEY1Ny1CN0ZCLUExQ0VDM0I2NUQyMDwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVmltL3B5dGhvbi52aW0gYi9NaXNjL1ZpbS9weXRob24udmltCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWVlN2ViLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3B5dGhvbi52aW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotIiBBdXRvLWdlbmVyYXRlZCBWaW0gc3ludGF4IGZpbGUgZm9yIFB5dGhvbiAodHJ1bms6IHI2MDM3Nk0pLgotIgotIiBUbyB1c2U6IGNvcHkgb3Igc3ltbGluayB0byB+Ly52aW0vc3ludGF4L3B5dGhvbi52aW0KLQotCi1pZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQotICBmaW5pc2gKLWVuZGlmCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9hbGwiKQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzID0gMQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyA9IDEKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyA9IDEKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzID0gMQotZW5kaWYKLQotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIGFzIGFzc2VydCBicmVhayBjb250aW51ZSBkZWwgZXhjZXB0IGV4ZWMgZmluYWxseQotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIGdsb2JhbCBsYW1iZGEgcGFzcyBwcmludCByYWlzZSByZXR1cm4gdHJ5IHdpdGgKLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICB5aWVsZAotCi1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgZGVmIGNsYXNzIG5leHRncm91cD1weXRob25GdW5jdGlvbiBza2lwd2hpdGUKLQotc3luIG1hdGNoIHB5dGhvbkZ1bmN0aW9uICAgICJbYS16QS1aX11bYS16QS1aMC05X10qIiBjb250YWluZWQKLQotc3luIGtleXdvcmQgcHl0aG9uUmVwZWF0ICAgIGZvciB3aGlsZQotCi1zeW4ga2V5d29yZCBweXRob25Db25kaXRpb25hbCAgICBpZiBlbGlmIGVsc2UKLQotc3luIGtleXdvcmQgcHl0aG9uT3BlcmF0b3IgICAgYW5kIGluIGlzIG5vdCBvcgotCi1zeW4ga2V5d29yZCBweXRob25QcmVDb25kaXQgICAgaW1wb3J0IGZyb20KLQotc3luIG1hdGNoIHB5dGhvbkNvbW1lbnQgICAgIiMuKiQiIGNvbnRhaW5zPXB5dGhvblRvZG8KLQotc3luIGtleXdvcmQgcHl0aG9uVG9kbyAgICBUT0RPIEZJWE1FIFhYWCBjb250YWluZWQKLQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPScrIGVuZD0rJysgc2tpcD0rXFxcXFx8XFwnKyBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0iKyBlbmQ9KyIrIHNraXA9K1xcXFxcfFxcIisgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9IiIiKyBlbmQ9KyIiIisgIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPScnJysgZW5kPSsnJycrICBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdJysgZW5kPSsnKyBza2lwPStcXFxcXHxcXCcrIAotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0iKyBlbmQ9KyIrIHNraXA9K1xcXFxcfFxcIisgCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXSIiIisgZW5kPSsiIiIrICAKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdJycnKyBlbmQ9KycnJysgIAotCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICtcXFthYmZucnR2XCciXFxdKyBjb250YWluZWQKLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlxcXG9cezEsM30iIGNvbnRhaW5lZAotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXFx4XHhcezJ9IiBjb250YWluZWQKLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlwoXFx1XHhcezR9XHxcXFVceFx7OH1cKSIgY29udGFpbmVkCi0KLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlxcJCIKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIpCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8MHhceFwrW0xsXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8XGRcK1tMbGpKXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlwuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8XGRcK1wuXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDxcZFwrXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKLQotZW5kaWYKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiKQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIEVsbGlwc2lzIEZhbHNlIE5vbmUgTm90SW1wbGVtZW50ZWQgVHJ1ZSBfX2RlYnVnX18KLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBfX2ltcG9ydF9fIGFicyBhbGwgYW55IGJvb2wKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBidWZmZXIgY2FsbGFibGUgY2hyIGNsYXNzbWV0aG9kIGNtcAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGNvbXBsZXggY29weXJpZ2h0IGNyZWRpdHMgZGVsYXR0ciBkaWN0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZGlyIGRpdm1vZCBlbnVtZXJhdGUgZXZhbCBleGVjIGV4aXQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBmaWx0ZXIgZmxvYXQgZnJvemVuc2V0IGdldGF0dHIgZ2xvYmFscyBoYXNhdHRyCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgaGFzaCBoZWxwIGhleCBpZCBpbnQgaXNpbnN0YW5jZQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGlzc3ViY2xhc3MgaXRlciBsZW4gbGljZW5zZSBsaXN0IGxvY2FscyBtYXAKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBtYXggbWluIG9iamVjdCBvY3Qgb3BlbiBvcmQgcG93IHByb3BlcnR5IHF1aXQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICByYW5nZSByZWxvYWQgcmVwciByZXZlcnNlZCByb3VuZAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHNldCBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2Qgc3RyIHN1bQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHN1cGVyIHRydW5jIHR1cGxlIHR5cGUgdW5pY29kZSB2YXJzIAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHppcAotCi1lbmRpZgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIikKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEFyaXRobWV0aWNFcnJvciBBc3NlcnRpb25FcnJvciBBdHRyaWJ1dGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgQmFzZUV4Y2VwdGlvbiBEZXByZWNhdGlvbldhcm5pbmcgRU9GRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEVudmlyb25tZW50RXJyb3IgRXhjZXB0aW9uIEZsb2F0aW5nUG9pbnRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRnV0dXJlV2FybmluZyBHZW5lcmF0b3JFeGl0IElPRXJyb3IgSW1wb3J0RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEltcG9ydFdhcm5pbmcgSW5kZW50YXRpb25FcnJvciBJbmRleEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBLZXlFcnJvciBLZXlib2FyZEludGVycnVwdCBMb29rdXBFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgTWVtb3J5RXJyb3IgTmFtZUVycm9yIE5vdEltcGxlbWVudGVkRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE9TRXJyb3IgT3ZlcmZsb3dFcnJvciBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBSZWZlcmVuY2VFcnJvciBSdW50aW1lRXJyb3IgUnVudGltZVdhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN5bnRheFdhcm5pbmcgU3lzdGVtRXJyb3IgU3lzdGVtRXhpdCBUYWJFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVHlwZUVycm9yIFVuYm91bmRMb2NhbEVycm9yIFVuaWNvZGVEZWNvZGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZUVuY29kZUVycm9yIFVuaWNvZGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yIFVuaWNvZGVXYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBVc2VyV2FybmluZyBWYWx1ZUVycm9yIFdhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFplcm9EaXZpc2lvbkVycm9yCi0KLWVuZGlmCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyIpCi0gIHN5biBtYXRjaCBweXRob25TcGFjZUVycm9yICAgIGRpc3BsYXkgZXhjbHVkZW5sICJcU1xzXCskIm1zPXMrMQotICBzeW4gbWF0Y2ggcHl0aG9uU3BhY2VFcnJvciAgICBkaXNwbGF5ICIgXCtcdCIKLSAgc3luIG1hdGNoIHB5dGhvblNwYWNlRXJyb3IgICAgZGlzcGxheSAiXHRcKyAiCi0KLWVuZGlmCi0KLQotICBoaSBkZWYgbGluayBweXRob25TdGF0ZW1lbnQgU3RhdGVtZW50Ci0gIGhpIGRlZiBsaW5rIHB5dGhvblN0YXRlbWVudCBTdGF0ZW1lbnQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uRnVuY3Rpb24gRnVuY3Rpb24KLSAgaGkgZGVmIGxpbmsgcHl0aG9uUmVwZWF0IFJlcGVhdAotICBoaSBkZWYgbGluayBweXRob25Db25kaXRpb25hbCBDb25kaXRpb25hbAotICBoaSBkZWYgbGluayBweXRob25PcGVyYXRvciBPcGVyYXRvcgotICBoaSBkZWYgbGluayBweXRob25QcmVDb25kaXQgUHJlQ29uZGl0Ci0gIGhpIGRlZiBsaW5rIHB5dGhvbkNvbW1lbnQgQ29tbWVudAotICBoaSBkZWYgbGluayBweXRob25Ub2RvIFRvZG8KLSAgaGkgZGVmIGxpbmsgcHl0aG9uU3RyaW5nIFN0cmluZwotICBoaSBkZWYgbGluayBweXRob25Fc2NhcGUgU3BlY2lhbAotICBoaSBkZWYgbGluayBweXRob25Fc2NhcGUgU3BlY2lhbAotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzIikKLSAgICBoaSBkZWYgbGluayBweXRob25OdW1iZXIgTnVtYmVyCi0gIGVuZGlmCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIikKLSAgICBoaSBkZWYgbGluayBweXRob25CdWlsdGluIEZ1bmN0aW9uCi0gIGVuZGlmCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvbkV4Y2VwdGlvbiBFeGNlcHRpb24KLSAgZW5kaWYKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIikKLSAgICBoaSBkZWYgbGluayBweXRob25TcGFjZUVycm9yIEVycm9yCi0gIGVuZGlmCi0KLQotIiBVbmNvbW1lbnQgdGhlICdtaW5saW5lcycgc3RhdGVtZW50IGxpbmUgYW5kIGNvbW1lbnQgb3V0IHRoZSAnbWF4bGluZXMnCi0iIHN0YXRlbWVudCBsaW5lOyBjaGFuZ2VzIGJlaGF2aW91ciB0byBsb29rIGF0IGxlYXN0IDIwMDAgbGluZXMgcHJldmlvdXNseSBmb3IKLSIgc3ludGF4IG1hdGNoZXMgaW5zdGVhZCBvZiBhdCBtb3N0IDIwMCBsaW5lcwotc3luIHN5bmMgbWF0Y2ggcHl0aG9uU3luYyBncm91cGhlcmUgTk9ORSAiKTokIgotc3luIHN5bmMgbWF4bGluZXM9MjAwCi0ic3luIHN5bmMgbWlubGluZXM9MjAwMAotCi1sZXQgYjpjdXJyZW50X3N5bnRheCA9ICJweXRob24iCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS9zeW50YXhfdGVzdC5weSBiL01pc2MvVmltL3N5bnRheF90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDIwODY2Li4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3N5bnRheF90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotIiIiVGVzdCBmaWxlIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIG9mIGVkaXRvcnMuCi0KLU1lYW50IHRvIGNvdmVyIGEgd2lkZSByYW5nZSBvZiBkaWZmZXJlbnQgdHlwZXMgb2Ygc3RhdGVtZW50cyBhbmQgZXhwcmVzc2lvbnMuCi1Ob3QgbmVjZXNzYXJpbHkgc2Vuc2ljYWwgb3IgY29tcHJlaGVuc2l2ZSAoYXNzdW1lIHRoYXQgaWYgb25lIGV4Y2VwdGlvbiBpcwotaGlnaGxpZ2h0ZWQgdGhhdCBhbGwgYXJlLCBmb3IgaW5zdGFuY2UpLgotCi1FeHRyYW5lb3VzIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2FuJ3QgYmUgdGVzdGVkIGJlY2F1c2Ugb2Ygc3ZuIHByZS1jb21taXQgaG9vawotY2hlY2tzIGZvciBzdWNoIHRoaW5ncy4KLQotIiIiCi0jIENvbW1lbnQKLSMgT1BUSU9OQUw6IFhYWCBjYXRjaCB5b3VyIGF0dGVudGlvbgotCi0jIFN0YXRlbWVudHMKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQgICMgSW1wb3J0Ci1mcm9tIHN5cyBpbXBvcnQgcGF0aCBhcyB0aGluZwotYXNzZXJ0IFRydWUgIyBrZXl3b3JkCi1kZWYgZm9vKCk6ICAjIGZ1bmN0aW9uIGRlZmluaXRpb24KLSAgICByZXR1cm4gW10KLWNsYXNzIEJhcihvYmplY3QpOiAgIyBDbGFzcyBkZWZpbml0aW9uCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgcGFzcwotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHBhc3MKLWZvbygpICAjIFVOQ09MT1VSRUQ6IGZ1bmN0aW9uIGNhbGwKLXdoaWxlIEZhbHNlOiAgIyAnd2hpbGUnCi0gICAgY29udGludWUKLWZvciB4IGluIGZvbygpOiAgIyAnZm9yJwotICAgIGJyZWFrCi13aXRoIEJhcigpIGFzIHN0dWZmOgotICAgIHBhc3MKLWlmIEZhbHNlOiBwYXNzICAjICdpZicKLWVsaWYgRmFsc2U6IHBhc3MKLWVsc2U6IHBhc3MKLQotIyBDb25zdGFudHMKLSdzaW5nbGUtcXVvdGUnLCB1J3VuaWNvZGUnICMgU3RyaW5ncyBvZiBhbGwga2luZHM7IHByZWZpeGVzIG5vdCBoaWdobGlnaHRlZAotImRvdWJsZS1xdW90ZSIKLSIiInRyaXBsZSBkb3VibGUtcXVvdGUiIiIKLScnJ3RyaXBsZSBzaW5nbGUtcXVvdGUnJycKLXIncmF3JwotdXIndW5pY29kZSByYXcnCi0nZXNjYXBlXG4nCi0nXDA0JyAgIyBvY3RhbAotJ1x4RkYnICMgaGV4Ci0nXHUxMTExJyAjIHVuaWNvZGUgY2hhcmFjdGVyCi0xICAjIEludGVncmFsCi0xTAotMS4wICAjIEZsb2F0Ci0uMQotMSsyaiAgIyBDb21wbGV4Ci0KLSMgRXhwcmVzc2lvbnMKLTEgYW5kIDIgb3IgMyAgIyBCb29sZWFuIG9wZXJhdG9ycwotMiA8IDMgICMgVU5DT0xPVVJFRDogY29tcGFyaXNvbiBvcGVyYXRvcnMKLXNwYW0gPSA0MiAgIyBVTkNPTE9VUkVEOiBhc3NpZ25tZW50Ci0yICsgMyAgIyBVTkNPTE9VUkVEOiBudW1iZXIgb3BlcmF0b3JzCi1bXSAgIyBVTkNPTE9VUkVEOiBsaXN0Ci17fSAgIyBVTkNPTE9VUkVEOiBkaWN0Ci0oMSwpICAjIFVOQ09MT1VSRUQ6IHR1cGxlCi1hbGwgICMgQnVpbHQtaW4gZnVuY3Rpb25zCi1HZW5lcmF0b3JFeGl0ICAjIEV4Y2VwdGlvbnMKZGlmZiAtLWdpdCBhL01pc2MvVmltL3ZpbV9zeW50YXgucHkgYi9NaXNjL1ZpbS92aW1fc3ludGF4LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzJiMzUwLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3ZpbV9zeW50YXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotIyBYWFgobm5vcndpdHopOiB3aGF0IHZlcnNpb25zIG9mIHB5dGhvbiBpcyB0aGlzIGZpbGUgc3VwcG9zZWQgdG8gd29yayB3aXRoPwotIyBJdCB1c2VzIHRoZSBvbGQgcHJpbnQgc3RhdGVtZW50IG5vdCBpbiBweTNrLgotCi1pbXBvcnQga2V5d29yZAotaW1wb3J0IGV4Y2VwdGlvbnMKLWltcG9ydCBidWlsdGlucwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi1mcm9tIHN5cyBpbXBvcnQgc3VidmVyc2lvbgotCi1jb21tZW50X2hlYWRlciA9ICcnJyIgQXV0by1nZW5lcmF0ZWQgVmltIHN5bnRheCBmaWxlIGZvciBQeXRob24gKCVzOiByJXMpLgotIgotIiBUbyB1c2U6IGNvcHkgb3Igc3ltbGluayB0byB+Ly52aW0vc3ludGF4L3B5dGhvbi52aW0nJycKLQotc3RhdGVtZW50X2hlYWRlciA9ICIiIgotaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKLSAgZmluaXNoCi1lbmRpZiIiIgotCi1zdGF0ZW1lbnRfZm9vdGVyID0gJycnCi0iIFVuY29tbWVudCB0aGUgJ21pbmxpbmVzJyBzdGF0ZW1lbnQgbGluZSBhbmQgY29tbWVudCBvdXQgdGhlICdtYXhsaW5lcycKLSIgc3RhdGVtZW50IGxpbmU7IGNoYW5nZXMgYmVoYXZpb3VyIHRvIGxvb2sgYXQgbGVhc3QgMjAwMCBsaW5lcyBwcmV2aW91c2x5IGZvcgotIiBzeW50YXggbWF0Y2hlcyBpbnN0ZWFkIG9mIGF0IG1vc3QgMjAwIGxpbmVzCi1zeW4gc3luYyBtYXRjaCBweXRob25TeW5jIGdyb3VwaGVyZSBOT05FICIpOiQiCi1zeW4gc3luYyBtYXhsaW5lcz0yMDAKLSJzeW4gc3luYyBtaW5saW5lcz0yMDAwCi0KLWxldCBiOmN1cnJlbnRfc3ludGF4ID0gInB5dGhvbiInJycKLQotbG9vcGluZyA9ICgnZm9yJywgJ3doaWxlJykKLWNvbmRpdGlvbmFscyA9ICgnaWYnLCAnZWxpZicsICdlbHNlJykKLWJvb2xlYW5fb3BzID0gKCdhbmQnLCAnaW4nLCAnaXMnLCAnbm90JywgJ29yJykKLWltcG9ydF9zdG10cyA9ICgnaW1wb3J0JywgJ2Zyb20nKQotb2JqZWN0X2RlZnMgPSAoJ2RlZicsICdjbGFzcycpCi0KLWV4Y2VwdGlvbl9uYW1lcyA9IHNvcnRlZChleGMgZm9yIGV4YyBpbiBkaXIoZXhjZXB0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV4Yy5zdGFydHN3aXRoKCdfXycpKQotCi0jIE5lZWQgdG8gaW5jbHVkZSBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoICdfXycgKGUuZy4sIF9faW1wb3J0X18pLCBidXQKLSMgbm90aGluZyB0aGF0IGNvbWVzIHdpdGggbW9kdWxlcyAoZS5nLiwgX19uYW1lX18pLCBzbyBqdXN0IGV4Y2x1ZGUgYW55dGhpbmcgaW4KLSMgdGhlICdleGNlcHRpb25zJyBtb2R1bGUgc2luY2Ugd2Ugd2FudCB0byBpZ25vcmUgZXhjZXB0aW9ucyAqYW5kKiB3aGF0IGFueQotIyBtb2R1bGUgd291bGQgaGF2ZQotYnVpbHRpbl9uYW1lcyA9IHNvcnRlZChidWlsdGluIGZvciBidWlsdGluIGluIGRpcihidWlsdGlucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBidWlsdGluIG5vdCBpbiBkaXIoZXhjZXB0aW9ucykpCi0KLWVzY2FwZXMgPSAocicrXFxbYWJmbnJ0dlwnIlxcXSsnLCByJyJcXFxvXHsxLDN9IicsIHInIlxceFx4XHsyfSInLAotICAgICAgICAgICAgciciXChcXHVceFx7NH1cfFxcVVx4XHs4fVwpIicsIHInIlxcJCInKQotCi10b2RvcyA9ICgiVE9ETyIsICJGSVhNRSIsICJYWFgiKQotCi0jIFhYWCBjb2RpZnk/Ci1udW1iZXJzID0gKHInIlw8MHhceFwrW0xsXVw9XD4iJywgciciXDxcZFwrW0xsakpdXD1cPiInLAotICAgICAgICAgICAgJyJcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IicsCi0gICAgICAgICAgICAnIlw8XGRcK1wuXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiInLAotICAgICAgICAgICAgJyJcPFxkXCtcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IicpCi0KLWNvbnRhaW5lZCA9IGxhbWJkYSB4OiAiJXMgY29udGFpbmVkIiAlIHgKLQotZGVmIHN0cl9yZWdleGVzKCk6Ci0gICAgIiIiR2VuZXJhdG9yIHRvIHlpZWxkIHZhcmlvdXMgY29tYmluYXRpb25zIG9mIHN0cmluZ3MgcmVnZXhlcyIiIgotICAgIHJlZ2V4X3RlbXBsYXRlID0gVGVtcGxhdGUoJ21hdGNoZ3JvdXA9Tm9ybWFsICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnQ9K1t1VV1cPSR7cmF3fSR7c2VwfSsgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmQ9KyR7c2VwfSsgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcke3NraXB9ICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJHtjb250YWluc30nKQotICAgIHNraXBfcmVnZXggPSBUZW1wbGF0ZShyJ3NraXA9K1xcXFxcfFxcJHtzZXB9KycpCi0gICAgZm9yIHJhdyBpbiAoJycsICdbclJdJyk6Ci0gICAgICAgIGZvciBzZXBhcmF0b3IgaW4gKCInIiwgJyInLCAnIiIiJywgIicnJyIpOgotICAgICAgICAgICAgaWYgbGVuKHNlcGFyYXRvcikgPT0gMToKLSAgICAgICAgICAgICAgICBza2lwID0gc2tpcF9yZWdleC5zdWJzdGl0dXRlKHNlcD1zZXBhcmF0b3IpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNraXAgPSAnJwotICAgICAgICAgICAgY29udGFpbnMgPSAnY29udGFpbnM9cHl0aG9uRXNjYXBlJyBpZiBub3QgcmF3IGVsc2UgJycKLSAgICAgICAgICAgIHlpZWxkIHJlZ2V4X3RlbXBsYXRlLnN1YnN0aXR1dGUocmF3PXJhdywgc2VwPXNlcGFyYXRvciwgc2tpcD1za2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyA9IGNvbnRhaW5zKQotCi1zcGFjZV9lcnJvcnMgPSAocidleGNsdWRlbmwgIlxTXHNcKyQibXM9cysxJywgciciIFwrXHQiJywgciciXHRcKyAiJykKLQotc3RhdGVtZW50cyA9ICgKLSAgICAgICAgICAgICAgICAoJycsCi0gICAgICAgICAgICAgICAgICAgICMgWFhYIE1pZ2h0IG5lZWQgdG8gY2hhbmdlIHB5dGhvblN0YXRlbWVudCBzaW5jZSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICMgc3BlY2lmaWMgUmVwZWF0LCBDb25kaXRpb25hbCwgT3BlcmF0b3IsIGV0Yy4gZm9yICd3aGlsZScsCi0gICAgICAgICAgICAgICAgICAgICMgZXRjLgotICAgICAgICAgICAgICAgICAgICBbKCJTdGF0ZW1lbnQiLCAicHl0aG9uU3RhdGVtZW50IiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgKGt3IGZvciBrdyBpbiBrZXl3b3JkLmt3bGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGt3IG5vdCBpbiAobG9vcGluZyArIGNvbmRpdGlvbmFscyArIGJvb2xlYW5fb3BzICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfc3RtdHMgKyBvYmplY3RfZGVmcykpCi0gICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3RhdGVtZW50IiwgInB5dGhvblN0YXRlbWVudCIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoJyAnLmpvaW4ob2JqZWN0X2RlZnMpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBuZXh0Z3JvdXA9cHl0aG9uRnVuY3Rpb24gc2tpcHdoaXRlJykpLAotICAgICAgICAgICAgICAgICAgICAgKCJGdW5jdGlvbiIsInB5dGhvbkZ1bmN0aW9uIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQoJyJbYS16QS1aX11bYS16QS1aMC05X10qIicpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiUmVwZWF0IiwgInB5dGhvblJlcGVhdCIsICJrZXl3b3JkIiwgbG9vcGluZyksCi0gICAgICAgICAgICAgICAgICAgICAoIkNvbmRpdGlvbmFsIiwgInB5dGhvbkNvbmRpdGlvbmFsIiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFscyksCi0gICAgICAgICAgICAgICAgICAgICAoIk9wZXJhdG9yIiwgInB5dGhvbk9wZXJhdG9yIiwgImtleXdvcmQiLCBib29sZWFuX29wcyksCi0gICAgICAgICAgICAgICAgICAgICAoIlByZUNvbmRpdCIsICJweXRob25QcmVDb25kaXQiLCAia2V5d29yZCIsIGltcG9ydF9zdG10cyksCi0gICAgICAgICAgICAgICAgICAgICAoIkNvbW1lbnQiLCAicHl0aG9uQ29tbWVudCIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyIjLiokIiBjb250YWlucz1weXRob25Ub2RvJyksCi0gICAgICAgICAgICAgICAgICAgICAoIlRvZG8iLCAicHl0aG9uVG9kbyIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQoJyAnLmpvaW4odG9kb3MpKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlN0cmluZyIsICJweXRob25TdHJpbmciLCAicmVnaW9uIiwgc3RyX3JlZ2V4ZXMoKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlNwZWNpYWwiLCAicHl0aG9uRXNjYXBlIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVkKGVzYykgZm9yIGVzYyBpbiBlc2NhcGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAnJCcgaW4gZXNjKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlNwZWNpYWwiLCAicHl0aG9uRXNjYXBlIiwgIm1hdGNoIiwgciciXFwkIicpLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIk51bWJlciIsICJweXRob25OdW1iZXIiLCAibWF0Y2giLCBudW1iZXJzKV0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIkZ1bmN0aW9uIiwgInB5dGhvbkJ1aWx0aW4iLCAia2V5d29yZCIsIGJ1aWx0aW5fbmFtZXMpXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJFeGNlcHRpb24iLCAicHl0aG9uRXhjZXB0aW9uIiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWVzKV0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJFcnJvciIsICJweXRob25TcGFjZUVycm9yIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICgiZGlzcGxheSAiICsgZXJyIGZvciBlcnIgaW4gc3BhY2VfZXJyb3JzKSldCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICkKLQotZGVmIHN5bl9wcmVmaXgodHlwZV8sIGtpbmQpOgotICAgIHJldHVybiAnc3luICVzICVzICAgICcgJSAodHlwZV8sIGtpbmQpCi0KLWRlZiBmaWxsX3N0bXQoaXRlcmFibGUsIGZpbGxfbGVuKToKLSAgICAiIiJZaWVsZCBhIHN0cmluZyB0aGF0IGZpbGxzIGF0IG1vc3QgZmlsbF9sZW4gY2hhcmFjdGVycyB3aXRoIHN0cmluZ3MKLSAgICByZXR1cm5lZCBieSAnaXRlcmFibGUnIGFuZCBzZXBhcmF0ZWQgYnkgYSBzcGFjZSIiIgotICAgICMgRGVhbCB3aXRoIHRyYWlsaW5nIGNoYXIgdG8gaGFuZGxlICcgJy5qb2luKCkgY2FsY3VsYXRpb24KLSAgICBmaWxsX2xlbiArPSAxCi0gICAgb3ZlcmZsb3cgPSBOb25lCi0gICAgaXQgPSBpdGVyKGl0ZXJhYmxlKQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGJ1ZmZlcl8gPSBbXQotICAgICAgICB0b3RhbF9sZW4gPSAwCi0gICAgICAgIGlmIG92ZXJmbG93OgotICAgICAgICAgICAgYnVmZmVyXy5hcHBlbmQob3ZlcmZsb3cpCi0gICAgICAgICAgICB0b3RhbF9sZW4gKz0gbGVuKG92ZXJmbG93KSArIDEKLSAgICAgICAgICAgIG92ZXJmbG93ID0gTm9uZQotICAgICAgICB3aGlsZSB0b3RhbF9sZW4gPCBmaWxsX2xlbjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBuZXdfaXRlbSA9IG5leHQoaXQpCi0gICAgICAgICAgICAgICAgYnVmZmVyXy5hcHBlbmQobmV3X2l0ZW0pCi0gICAgICAgICAgICAgICAgdG90YWxfbGVuICs9IGxlbihuZXdfaXRlbSkgKyAxCi0gICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICBpZiBidWZmZXJfOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIG92ZXJmbG93OgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBvdmVyZmxvdwotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiB0b3RhbF9sZW4gPiBmaWxsX2xlbjoKLSAgICAgICAgICAgIG92ZXJmbG93ID0gYnVmZmVyXy5wb3AoKQotICAgICAgICAgICAgdG90YWxfbGVuIC09IGxlbihvdmVyZmxvdykgLSAxCi0gICAgICAgIHJldCA9ICcgJy5qb2luKGJ1ZmZlcl8pCi0gICAgICAgIGFzc2VydCBsZW4ocmV0KSA8PSBmaWxsX2xlbgotICAgICAgICB5aWVsZCByZXQKLQotRklMTCA9IDgwCi0KLWRlZiBtYWluKGZpbGVfcGF0aCk6Ci0gICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBGSUxFOgotICAgICAgICAjIENvbW1lbnQgZm9yIGZpbGUKLSAgICAgICAgcHJpbnQ+PkZJTEUsIGNvbW1lbnRfaGVhZGVyICUgc3VidmVyc2lvblsxOl0KLSAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgU3RhdGVtZW50cyBhdCBzdGFydCBvZiBmaWxlCi0gICAgICAgIHByaW50Pj5GSUxFLCBzdGF0ZW1lbnRfaGVhZGVyCi0gICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIEdlbmVyYXRlIGNhc2UgZm9yIHB5dGhvbl9oaWdobGlnaHRfYWxsCi0gICAgICAgIHByaW50Pj5GSUxFLCAnaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2FsbCIpJwotICAgICAgICBmb3Igc3RhdGVtZW50X3Zhciwgc3RhdGVtZW50X3BhcnRzIGluIHN0YXRlbWVudHM6Ci0gICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnICBsZXQgJXMgPSAxJyAlIHN0YXRlbWVudF92YXIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnZW5kaWYnCi0gICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBHZW5lcmF0ZSBQeXRob24gZ3JvdXBzCi0gICAgICAgIGZvciBzdGF0ZW1lbnRfdmFyLCBzdGF0ZW1lbnRfcGFydHMgaW4gc3RhdGVtZW50czoKLSAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICdpZiBleGlzdHMoIiVzIiknICUgc3RhdGVtZW50X3ZhcgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcgICcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaW5kZW50ID0gJycKLSAgICAgICAgICAgIGZvciBjb2xvdXJfZ3JvdXAsIGdyb3VwLCB0eXBlXywgYXJndW1lbnRzIGluIHN0YXRlbWVudF9wYXJ0czoKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudHMsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBzeW5fcHJlZml4KHR5cGVfLCBncm91cCkKLSAgICAgICAgICAgICAgICAgICAgaWYgdHlwZV8gPT0gJ2tleXdvcmQnOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RtdF9pdGVyID0gZmlsbF9zdG10KGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMTCAtIGxlbihwcmVmaXgpIC0gbGVuKGluZGVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIGluZGVudCArIHByZWZpeCArIG5leHQoc3RtdF9pdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnQgaW4gYXJndW1lbnRzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCBpbmRlbnQgKyBwcmVmaXggKyBhcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCBpbmRlbnQgKyBzeW5fcHJlZml4KHR5cGVfLCBncm91cCkgKyBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnZW5kaWYnCi0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgQXNzb2NpYXRpbmcgUHl0aG9uIGdyb3VwIHdpdGggVmltIGNvbG91ciBncm91cAotICAgICAgICBmb3Igc3RhdGVtZW50X3Zhciwgc3RhdGVtZW50X3BhcnRzIGluIHN0YXRlbWVudHM6Ci0gICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnICBpZiBleGlzdHMoIiVzIiknICUgc3RhdGVtZW50X3ZhcgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcgICAgJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICAnCi0gICAgICAgICAgICBmb3IgY29sb3VyX2dyb3VwLCBncm91cCwgdHlwZV8sIGFyZ3VtZW50cyBpbiBzdGF0ZW1lbnRfcGFydHM6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIChpbmRlbnQgKyAiaGkgZGVmIGxpbmsgJXMgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3VwLCBjb2xvdXJfZ3JvdXApKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJyAgZW5kaWYnCi0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgU3RhdGVtZW50cyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCi0gICAgICAgIHByaW50Pj5GSUxFLCBzdGF0ZW1lbnRfZm9vdGVyCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigicHl0aG9uLnZpbSIpCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS92aW1yYyBiL01pc2MvVmltL3ZpbXJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzk4Y2NhLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3ZpbXJjCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotIiB2aW1yYyBmaWxlIGZvciBmb2xsb3dpbmcgdGhlIGNvZGluZyBzdGFuZGFyZHMgc3BlY2lmaWVkIGluIFBFUCA3ICYgOC4KLSIKLSIgVG8gdXNlIHRoaXMgZmlsZSwgc291cmNlIGl0IGluIHlvdXIgb3duIHBlcnNvbmFsIC52aW1yYyBmaWxlIChgYHNvdXJjZQotIiA8ZmlsZW5hbWU+YGApIG9yLCBpZiB5b3UgZG9uJ3QgaGF2ZSBhIC52aW1yYyBmaWxlLCB5b3UgY2FuIGp1c3Qgc3ltbGluayB0byBpdAotIiAoYGBsbiAtcyA8dGhpcyBmaWxlPiB+Ly52aW1yY2BgKS4gIEFsbCBvcHRpb25zIGFyZSBwcm90ZWN0ZWQgYnkgYXV0b2NtZHMKLSIgKHJlYWQgYmVsb3cgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBjb21tYW5kKSBzbyBibGluZCBzb3VyY2luZyBvZiB0aGlzIGZpbGUKLSIgaXMgc2FmZSBhbmQgd2lsbCBub3QgYWZmZWN0IHlvdXIgc2V0dGluZ3MgZm9yIG5vbi1QeXRob24gb3Igbm9uLUMgZmlsZXMuCi0iCi0iCi0iIEFsbCBzZXR0aW5nIGFyZSBwcm90ZWN0ZWQgYnkgJ2F1JyAoJ2F1dG9jbWQnKSBzdGF0ZW1lbnRzLiAgT25seSBmaWxlcyBlbmRpbmcKLSIgaW4gLnB5IG9yIC5weXcgd2lsbCB0cmlnZ2VyIHRoZSBQeXRob24gc2V0dGluZ3Mgd2hpbGUgZmlsZXMgZW5kaW5nIGluICouYyBvcgotIiAqLmggd2lsbCB0cmlnZ2VyIHRoZSBDIHNldHRpbmdzLiAgVGhpcyBtYWtlcyB0aGUgZmlsZSAic2FmZSIgaW4gdGVybXMgb2Ygb25seQotIiBhZGp1c3Rpbmcgc2V0dGluZ3MgZm9yIFB5dGhvbiBhbmQgQyBmaWxlcy4KLSIKLSIgT25seSBiYXNpYyBzZXR0aW5ncyBuZWVkZWQgdG8gZW5mb3JjZSB0aGUgc3R5bGUgZ3VpZGVsaW5lcyBhcmUgc2V0LgotIiBTb21lIHN1Z2dlc3RlZCBvcHRpb25zIGFyZSBsaXN0ZWQgYnV0IGNvbW1lbnRlZCBvdXQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCi0KLSIgTnVtYmVyIG9mIHNwYWNlcyB0aGF0IGEgcHJlLWV4aXN0aW5nIHRhYiBpcyBlcXVhbCB0by4KLSIgRm9yIHRoZSBhbW91bnQgb2Ygc3BhY2UgdXNlZCBmb3IgYSBuZXcgdGFiIHVzZSBzaGlmdHdpZHRoLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICpweSwqcHl3LCouYywqLmggc2V0IHRhYnN0b3A9OAotCi0iIFdoYXQgdG8gdXNlIGZvciBhbiBpbmRlbnQuCi0iIFRoaXMgd2lsbCBhZmZlY3QgQ3RybC1UIGFuZCAnYXV0b2luZGVudCcuCi0iIFB5dGhvbjogNCBzcGFjZXMKLSIgQzogdGFicyAocHJlLWV4aXN0aW5nIGZpbGVzKSBvciA0IHNwYWNlcyAobmV3IGZpbGVzKQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKnB5dyBzZXQgc2hpZnR3aWR0aD00Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dyBzZXQgZXhwYW5kdGFiCi1mdSBTZWxlY3RfY19zdHlsZSgpCi0gICAgaWYgc2VhcmNoKCdeXHQnLCAnbicsIDE1MCkKLSAgICAgICAgc2V0IHNoaWZ0d2lkdGg9OAotICAgICAgICBzZXQgbm9leHBhbmR0YWIKLSAgICBlbCAKLSAgICAgICAgc2V0IHNoaWZ0d2lkdGg9NAotICAgICAgICBzZXQgZXhwYW5kdGFiCi0gICAgZW4KLWVuZGYKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIGNhbGwgU2VsZWN0X2Nfc3R5bGUoKQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlIE1ha2VmaWxlKiBzZXQgbm9leHBhbmR0YWIKLQotIiBVc2UgdGhlIGJlbG93IGhpZ2hsaWdodCBncm91cCB3aGVuIGRpc3BsYXlpbmcgYmFkIHdoaXRlc3BhY2UgaXMgZGVzaXJlZC4KLWhpZ2hsaWdodCBCYWRXaGl0ZXNwYWNlIGN0ZXJtYmc9cmVkIGd1aWJnPXJlZAotCi0iIERpc3BsYXkgdGFicyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpbiBQeXRob24gbW9kZSBhcyBiYWQuCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dyBtYXRjaCBCYWRXaGl0ZXNwYWNlIC9eXHRcKy8KLSIgTWFrZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGJlIGZsYWdnZWQgYXMgYmFkLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCwqLnJzdCBtYXRjaCBCYWRXaGl0ZXNwYWNlIC9cc1wrJC8KLQotIiBXcmFwIHRleHQgYWZ0ZXIgYSBjZXJ0YWluIG51bWJlciBvZiBjaGFyYWN0ZXJzCi0iIFB5dGhvbjogNzkgCi0iIEM6IDc5Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dywqLmMsKi5oIHNldCB0ZXh0d2lkdGg9NzkKLQotIiBUdXJuIG9mZiBzZXR0aW5ncyBpbiAnZm9ybWF0b3B0aW9ucycgcmVsYXRpbmcgdG8gY29tbWVudCBmb3JtYXR0aW5nLgotIiAtIGMgOiBkbyBub3QgYXV0b21hdGljYWxseSBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gd3JhcHBpbmcgYmFzZWQgb24KLSIgICAgJ3RleHR3aWR0aCcKLSIgLSBvIDogZG8gbm90IGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiB1c2luZyAnbycgb3IgJ08nIGZyb20gY29tbWFuZCBtb2RlCi0iIC0gciA6IGRvIG5vdCBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gaGl0dGluZyA8RW50ZXI+IGluIGluc2VydCBtb2RlCi0iIFB5dGhvbjogbm90IG5lZWRlZAotIiBDOiBwcmV2ZW50cyBpbnNlcnRpb24gb2YgJyonIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgbGluZSBpbiBhIGNvbW1lbnQKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIHNldCBmb3JtYXRvcHRpb25zLT1jIGZvcm1hdG9wdGlvbnMtPW8gZm9ybWF0b3B0aW9ucy09cgotCi0iIFVzZSBVTklYIChcbikgbGluZSBlbmRpbmdzLgotIiBPbmx5IHVzZWQgZm9yIG5ldyBmaWxlcyBzbyBhcyB0byBub3QgZm9yY2UgZXhpc3RpbmcgZmlsZXMgdG8gY2hhbmdlIHRoZWlyCi0iIGxpbmUgZW5kaW5ncy4KLSIgUHl0aG9uOiB5ZXMKLSIgQzogeWVzCi1hdSBCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCBzZXQgZmlsZWZvcm1hdD11bml4Ci0KLQotIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0iIFRoZSBmb2xsb3dpbmcgc2VjdGlvbiBjb250YWlucyBzdWdnZXN0ZWQgc2V0dGluZ3MuICBXaGlsZSBpbiBubyB3YXkgcmVxdWlyZWQKLSIgdG8gbWVldCBjb2Rpbmcgc3RhbmRhcmRzLCB0aGV5IGFyZSBoZWxwZnVsLgotCi0iIFNldCB0aGUgZGVmYXVsdCBmaWxlIGVuY29kaW5nIHRvIFVURi04OiBgYHNldCBlbmNvZGluZz11dGYtOGBgCi0KLSIgUHV0cyBhIG1hcmtlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBVVEYgYW5kCi0iIFVDUyBlbmNvZGluZyAoV0FSTklORzogY2FuIHRyaWNrIHNoZWxscyBpbnRvIHRoaW5raW5nIGEgdGV4dCBmaWxlIGlzIGFjdHVhbGx5Ci0iIGEgYmluYXJ5IGZpbGUgd2hlbiBleGVjdXRpbmcgdGhlIHRleHQgZmlsZSk6IGBgc2V0IGJvbWJgYAotCi0iIEZvciBmdWxsIHN5bnRheCBoaWdobGlnaHRpbmc6Ci0iYGBsZXQgcHl0aG9uX2hpZ2hsaWdodF9hbGw9MWBgCi0iYGBzeW50YXggb25gYAotCi0iIEF1dG9tYXRpY2FsbHkgaW5kZW50IGJhc2VkIG9uIGZpbGUgdHlwZTogYGBmaWxldHlwZSBpbmRlbnQgb25gYAotIiBLZWVwIGluZGVudGF0aW9uIGxldmVsIGZyb20gcHJldmlvdXMgbGluZTogYGBzZXQgYXV0b2luZGVudGBgCi0KLSIgRm9sZGluZyBiYXNlZCBvbiBpbmRlbnRhdGlvbjogYGBzZXQgZm9sZG1ldGhvZD1pbmRlbnRgYApkaWZmIC0tZ2l0IGEvTWlzYy9jb3Zlcml0eV9tb2RlbC5jIGIvTWlzYy9jb3Zlcml0eV9tb2RlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjNhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL2NvdmVyaXR5X21vZGVsLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qIENvdmVyaXR5IFNjYW4gbW9kZWwKKyAqCisgKiBUaGlzIGlzIGEgbW9kZWxpbmcgZmlsZSBmb3IgQ292ZXJpdHkgU2Nhbi4gTW9kZWxpbmcgaGVscHMgdG8gYXZvaWQgZmFsc2UKKyAqIHBvc2l0aXZlcy4KKyAqCisgKiAtIEEgbW9kZWwgZmlsZSBjYW4ndCBpbXBvcnQgYW55IGhlYWRlciBmaWxlcy4KKyAqIC0gVGhlcmVmb3JlIG9ubHkgc29tZSBidWlsdC1pbiBwcmltaXRpdmVzIGxpa2UgaW50LCBjaGFyIGFuZCB2b2lkIGFyZQorICogICBhdmFpbGFibGUgYnV0IG5vdCB3Y2hhcl90LCBOVUxMIGV0Yy4KKyAqIC0gTW9kZWxpbmcgZG9lc24ndCBuZWVkIGZ1bGwgc3RydWN0cyBhbmQgdHlwZWRlZnMuIFJ1ZGltZW50YXJ5IHN0cnVjdHMKKyAqICAgYW5kIHNpbWlsYXIgdHlwZXMgYXJlIHN1ZmZpY2llbnQuCisgKiAtIEFuIHVuaW5pdGlhbGl6ZWQgbG9jYWwgcG9pbnRlciBpcyBub3QgYW4gZXJyb3IuIEl0IHNpZ25pZmllcyB0aGF0IHRoZQorICogICB2YXJpYWJsZSBjb3VsZCBiZSBlaXRoZXIgTlVMTCBvciBoYXZlIHNvbWUgZGF0YS4KKyAqCisgKiBDb3Zlcml0eSBTY2FuIGRvZXNuJ3QgcGljayB1cCBtb2RpZmljYXRpb25zIGF1dG9tYXRpY2FsbHkuIFRoZSBtb2RlbCBmaWxlCisgKiBtdXN0IGJlIHVwbG9hZGVkIGJ5IGFuIGFkbWluIGluIHRoZSBhbmFseXNpcyBzZXR0aW5ncyBvZgorICogaHR0cDovL3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzLzIwMAorICovCisKKy8qIGR1bW15IGRlZmluaXRpb25zLCBpbiBtb3N0IGNhc2VzIHN0cnVjdCBmaWVsZHMgYXJlbid0IHJlcXVpcmVkLiAqLworCisjZGVmaW5lIE5VTEwgKHZvaWQgKikwCisjZGVmaW5lIGFzc2VydChvcCkgLyogZW1wdHkgKi8KK3R5cGVkZWYgaW50IHNkaWdpdDsKK3R5cGVkZWYgbG9uZyBQeV9zc2l6ZV90OwordHlwZWRlZiBsb25nIGxvbmcgUFlfTE9OR19MT05HOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB3Y2hhcl90OwordHlwZWRlZiBzdHJ1Y3Qge30gUHlPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCB7fSBncmFtbWFyOwordHlwZWRlZiBzdHJ1Y3Qge30gRElSOwordHlwZWRlZiBzdHJ1Y3Qge30gUkZJTEU7CisKKy8qIFB5dGhvbi9weXRob25ydW4uYworICogcmVzb3VyZWNlIGxlYWsgZmFsc2UgcG9zaXRpdmUgKi8KKwordm9pZCBQeV9GYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZykgeworICAgIF9fY292ZXJpdHlfcGFuaWNfXygpOworfQorCisvKiBPYmplY3RzL2xvbmdvYmplY3QuYworICogTkVHQVRJVkVfUkVUVVJOUyBmYWxzZSBwb3NpdGl2ZSAqLworCitzdGF0aWMgUHlPYmplY3QgKmdldF9zbWFsbF9pbnQoc2RpZ2l0IGl2YWwpCit7CisgICAgLyogTmV2ZXIgcmV0dXJucyBOVUxMICovCisgICAgUHlPYmplY3QgKnA7CisgICAgYXNzZXJ0KHAgIT0gTlVMTCk7CisgICAgcmV0dXJuIHA7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbUxvbmcobG9uZyBpdmFsKQoreworICAgIFB5T2JqZWN0ICpwOworICAgIGludCBtYXliZTsKKworICAgIGlmICgoaXZhbCA+PSAtNSkgJiYgKGl2YWwgPCAyNTcgKyA1KSkgeworICAgICAgICBwID0gZ2V0X3NtYWxsX2ludChpdmFsKTsKKyAgICAgICAgYXNzZXJ0KHAgIT0gTlVMTCk7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICBpZiAobWF5YmUpCisgICAgICAgIHJldHVybiBwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xPTkdfTE9ORyBpdmFsKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaXZhbCk7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbVNzaXplX3QoUHlfc3NpemVfdCBpdmFsKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaXZhbCk7Cit9CisKKy8qIHRhaW50ZWQgc2lua3MKKyAqCisgKiBDb3Zlcml0eSBjb25zaWRlcnMgYXJndiwgZW52aXJvbiwgcmVhZCgpIGRhdGEgZXRjIGFzIHRhaW5lZC4KKyAqLworCitQeU9iamVjdCAqUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhmaWxlbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFB5dGhvbi9maWxldXRpbHMuYyAqLword2NoYXJfdCAqX1B5X2NoYXIyd2NoYXIoY29uc3QgY2hhciogYXJnLCBzaXplX3QgKnNpemUpCit7CisgICB3Y2hhcl90ICp3OworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhhcmcpOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhzaXplKTsKKyAgIHJldHVybiB3OworfQorCisvKiBQYXJzZXIvcGdlbm1haW4uYyAqLworZ3JhbW1hciAqZ2V0Z3JhbW1hcihjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBncmFtbWFyICpnOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhmaWxlbmFtZSk7CisgICAgcmV0dXJuIGc7Cit9CisKKy8qIFB5dGhvbi9tYXJzaGFsLmMgKi8KKworc3RhdGljIFB5X3NzaXplX3Qgcl9zdHJpbmcoY2hhciAqcywgUHlfc3NpemVfdCBuLCBSRklMRSAqcCkKK3sKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfc3RyaW5nX2FyZ3VtZW50X18ocyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHJfbG9uZyhSRklMRSAqcCkKK3sKKyAgICBsb25nIGw7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF07CisKKyAgICByX3N0cmluZygoY2hhciAqKWJ1ZmZlciwgNCwgcCk7CisgICAgX19jb3Zlcml0eV90YWludGVkX3N0cmluZ19zYW5pdGl6ZV9jb250ZW50X18oYnVmZmVyKTsKKyAgICBsID0gKGxvbmcpYnVmZmVyOworICAgIHJldHVybiBsOworfQorCisvKiBDb3Zlcml0eSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhhdCBmZG9wZW5kaXIoKSBtYXkgdGFrZSBvd25lcnNoaXAgb2YgZmQuICovCisKK0RJUiAqZmRvcGVuZGlyKGludCBmZCkgeworICAgIERJUiAqZDsKKyAgICBpZiAoZCkgeworICAgICAgICBfX2NvdmVyaXR5X2Nsb3NlX18oZmQpOworICAgIH0KKyAgICByZXR1cm4gZDsKK30KKwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24tY29uZmlnLmluIGIvTWlzYy9weXRob24tY29uZmlnLmluCmluZGV4IGFjM2EyYzcuLjBiOWI1ZGMgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorKysgYi9NaXNjL3B5dGhvbi1jb25maWcuaW4KQEAgLTEsNiArMSw4IEBACiAjIUBFWEVOQU1FQAogIyAtKi0gcHl0aG9uIC0qLQogCisjIEtlZXAgdGhpcyBzY3JpcHQgaW4gc3luYyB3aXRoIHB5dGhvbi1jb25maWcuc2guaW4KKwogaW1wb3J0IGdldG9wdAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi1jb25maWcuc2guaW4gYi9NaXNjL3B5dGhvbi1jb25maWcuc2guaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhM2RiZQotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbgpAQCAtMCwwICsxLDExMSBAQAorIyEvYmluL3NoCisKKyMgS2VlcCB0aGlzIHNjcmlwdCBpbiBzeW5jIHdpdGggcHl0aG9uLWNvbmZpZy5pbgorCitleGl0X3dpdGhfdXNhZ2UgKCkKK3sKKyAgICBlY2hvICJVc2FnZTogJDAgLS1wcmVmaXh8LS1leGVjLXByZWZpeHwtLWluY2x1ZGVzfC0tbGlic3wtLWNmbGFnc3wtLWxkZmxhZ3N8LS1leHRlbnNpb24tc3VmZml4fC0taGVscHwtLWFiaWZsYWdzfC0tY29uZmlnZGlyIgorICAgIGV4aXQgJDEKK30KKworaWYgWyAiJDEiID0gIiIgXSA7IHRoZW4KKyAgICBleGl0X3dpdGhfdXNhZ2UgMQorZmkKKworIyBSZXR1cm5zIHRoZSBhY3R1YWwgcHJlZml4IHdoZXJlIHRoaXMgc2NyaXB0IHdhcyBpbnN0YWxsZWQgdG8uCitpbnN0YWxsZWRfcHJlZml4ICgpCit7CisgICAgUkVTVUxUPSQoZGlybmFtZSAkKGNkICQoZGlybmFtZSAiJDEiKSAmJiBwd2QgLVApKQorICAgIGlmIHdoaWNoIHJlYWRsaW5rID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICAgICAgaWYgcmVhZGxpbmsgLWYgIiRSRVNVTFQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIFJFU1VMVD0kKHJlYWRsaW5rIC1mICIkUkVTVUxUIikKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGVjaG8gJFJFU1VMVAorfQorCitwcmVmaXhfYnVpbGQ9IkBwcmVmaXhAIgorcHJlZml4X3JlYWw9JChpbnN0YWxsZWRfcHJlZml4ICIkMCIpCisKKyMgVXNlIHNlZCB0byBmaXggcGF0aHMgZnJvbSB0aGVpciBidWlsdC10byBsb2NhdGlvbnMgdG8gdGhlaXIgaW5zdGFsbGVkLXRvCisjIGxvY2F0aW9ucy4KK3ByZWZpeD0kKGVjaG8gIiRwcmVmaXhfYnVpbGQiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitleGVjX3ByZWZpeF9idWlsZD0iQGV4ZWNfcHJlZml4QCIKK2V4ZWNfcHJlZml4PSQoZWNobyAiJGV4ZWNfcHJlZml4X2J1aWxkIiB8IHNlZCAicyMkZXhlY19wcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitpbmNsdWRlZGlyPSQoZWNobyAiQGluY2x1ZGVkaXJAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorbGliZGlyPSQoZWNobyAiQGxpYmRpckAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitDRkxBR1M9JChlY2hvICJAQ0ZMQUdTQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK1ZFUlNJT049IkBWRVJTSU9OQCIKK0xJQk09IkBMSUJNQCIKK0xJQkM9IkBMSUJDQCIKK1NZU0xJQlM9IiRMSUJNICRMSUJDIgorQUJJRkxBR1M9IkBBQklGTEFHU0AiCitMSUJTPSJATElCU0AgJFNZU0xJQlMgLWxweXRob24ke1ZFUlNJT059JHtBQklGTEFHU30iCitCQVNFQ0ZMQUdTPSJAQkFTRUNGTEFHU0AiCitMRExJQlJBUlk9IkBMRExJQlJBUllAIgorTElOS0ZPUlNIQVJFRD0iQExJTktGT1JTSEFSRURAIgorT1BUPSJAT1BUQCIKK1BZX0VOQUJMRV9TSEFSRUQ9IkBQWV9FTkFCTEVfU0hBUkVEQCIKK0xEVkVSU0lPTj0iQExEVkVSU0lPTkAiCitMSUJERVNUPSR7cHJlZml4fS9saWIvcHl0aG9uJHtWRVJTSU9OfQorTElCUEw9JChlY2hvICJATElCUExAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorU089IkBTT0AiCitQWVRIT05GUkFNRVdPUks9IkBQWVRIT05GUkFNRVdPUktAIgorSU5DRElSPSItSSRpbmNsdWRlZGlyL3B5dGhvbiR7VkVSU0lPTn0ke0FCSUZMQUdTfSIKK1BMQVRJTkNESVI9Ii1JJGluY2x1ZGVkaXIvcHl0aG9uJHtWRVJTSU9OfSR7QUJJRkxBR1N9IgorCisjIFNjYW4gZm9yIC0taGVscCBvciB1bmtub3duIGFyZ3VtZW50LgorZm9yIEFSRyBpbiAkKgorZG8KKyAgICBjYXNlICRBUkcgaW4KKyAgICAgICAgLS1oZWxwKQorICAgICAgICAgICAgZXhpdF93aXRoX3VzYWdlIDAKKyAgICAgICAgOzsKKyAgICAgICAgLS1wcmVmaXh8LS1leGVjLXByZWZpeHwtLWluY2x1ZGVzfC0tbGlic3wtLWNmbGFnc3wtLWxkZmxhZ3N8LS1leHRlbnNpb24tc3VmZml4fC0tYWJpZmxhZ3N8LS1jb25maWdkaXIpCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2UgMQorICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworZm9yIEFSRyBpbiAiJEAiCitkbworICAgIGNhc2UgIiRBUkciIGluCisgICAgICAgIC0tcHJlZml4KQorICAgICAgICAgICAgZWNobyAiJHByZWZpeCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1leGVjLXByZWZpeCkKKyAgICAgICAgICAgIGVjaG8gIiRleGVjX3ByZWZpeCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1pbmNsdWRlcykKKyAgICAgICAgICAgIGVjaG8gIiRJTkNESVIgJFBMQVRJTkNESVIiCisgICAgICAgIDs7CisgICAgICAgIC0tY2ZsYWdzKQorICAgICAgICAgICAgZWNobyAiJElOQ0RJUiAkUExBVElOQ0RJUiAkQkFTRUNGTEFHUyAkQ0ZMQUdTICRPUFQiCisgICAgICAgIDs7CisgICAgICAgIC0tbGlicykKKyAgICAgICAgICAgIGVjaG8gIiRMSUJTIgorICAgICAgICA7OworICAgICAgICAtLWxkZmxhZ3MpCisgICAgICAgICAgICBMSU5LRk9SU0hBUkVEVVNFRD0KKyAgICAgICAgICAgIGlmIFsgLXogIiRQWVRIT05GUkFNRVdPUksiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgTElOS0ZPUlNIQVJFRFVTRUQ9JExJTktGT1JTSEFSRUQKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBMSUJQTFVTRUQ9CisgICAgICAgICAgICBpZiBbICIkUFlfRU5BQkxFX1NIQVJFRCIgPSAiMCIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBMSUJQTFVTRUQ9Ii1MJExJQlBMIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIiRMSUJQTFVTRUQgLUwkbGliZGlyICRMSUJTICRMSU5LRk9SU0hBUkVEVVNFRCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1leHRlbnNpb24tc3VmZml4KQorICAgICAgICAgICAgZWNobyAiJFNPIgorICAgICAgICA7OworICAgICAgICAtLWFiaWZsYWdzKQorICAgICAgICAgICAgZWNobyAiJEFCSUZMQUdTIgorICAgICAgICA7OworICAgICAgICAtLWNvbmZpZ2RpcikKKyAgICAgICAgICAgIGVjaG8gIiRMSUJQTCIKKyAgICAgICAgOzsKK2VzYWMKK2RvbmUKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLXdpbmc1LndwciBiL01pc2MvcHl0aG9uLXdpbmc1LndwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFhZTYzCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9weXRob24td2luZzUud3ByCkBAIC0wLDAgKzEsMTggQEAKKyMhd2luZworIyF2ZXJzaW9uPTUuMAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdpbmcgSURFIHByb2plY3QgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworW3Byb2plY3QgYXR0cmlidXRlc10KK3Byb2ouZGlyZWN0b3J5LWxpc3QgPSBbeydkaXJsb2MnOiBsb2MoJy4uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZXMnOiBbdScuaGcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnTGliL3VuaXR0ZXN0L19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi91bml0dGVzdC90ZXN0L19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdidWlsZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdEb2MvYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXInOiAnKicsCisgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdyZWN1cnNpdmUnOiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3dhdGNoX2Zvcl9jaGFuZ2VzJzogVHJ1ZX1dCitwcm9qLmZpbGUtdHlwZSA9ICdzaGFyZWQnCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi5tYW4gYi9NaXNjL3B5dGhvbi5tYW4KaW5kZXggYmNiM2VjOC4uNTJhZWRlZSAxMDA2NDQKLS0tIGEvTWlzYy9weXRob24ubWFuCisrKyBiL01pc2MvcHl0aG9uLm1hbgpAQCAtMjYsMTEgKzI2LDE0IEBACiAuQiBcLWkKIF0KIFsKLS5CIFwtbQotLkkgbW9kdWxlLW5hbWUKKy5CIFwtSQogXQogLmJyCiAgICAgICAgWworLkIgXC1tCisuSSBtb2R1bGUtbmFtZQorXQorWwogLkIgXC1xCiBdCiBbCkBAIC0xMzksNiArMTQyLDEzIEBACiB1c2VmdWwgdG8gaW5zcGVjdCBnbG9iYWwgdmFyaWFibGVzIG9yIGEgc3RhY2sgdHJhY2Ugd2hlbiBhIHNjcmlwdAogcmFpc2VzIGFuIGV4Y2VwdGlvbi4KIC5UUAorLkIgXC1JCitSdW4gUHl0aG9uIGluIGlzb2xhdGVkIG1vZGUuIFRoaXMgYWxzbyBpbXBsaWVzIFxmQlwtRVxmUCBhbmQgXGZCXC1TXGZQLiBJbgoraXNvbGF0ZWQgbW9kZSBzeXMucGF0aCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHTigJlzIGRpcmVjdG9yeSBub3IgdGhlIHVzZXLigJlzCitzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeS4gQWxsIFBZVEhPTiogZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBpZ25vcmVkLCB0b28uCitGdXJ0aGVyIHJlc3RyaWN0aW9ucyBtYXkgYmUgaW1wb3NlZCB0byBwcmV2ZW50IHRoZSB1c2VyIGZyb20gaW5qZWN0aW5nCittYWxpY2lvdXMgY29kZS4KKy5UUAogLkJJICJcLW0gIiBtb2R1bGUtbmFtZQogU2VhcmNoZXMgCiAuSSBzeXMucGF0aCAKZGlmZiAtLWdpdCBhL01vZHVsZXMvU2V0dXAuZGlzdCBiL01vZHVsZXMvU2V0dXAuZGlzdAppbmRleCBmNDVkZTVjLi4wMWZiODVmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1NldHVwLmRpc3QKKysrIGIvTW9kdWxlcy9TZXR1cC5kaXN0CkBAIC0xMDIsNyArMTAyLDcgQEAKICMgdmFyaW91cyByZWFzb25zOyB0aGVyZWZvcmUgdGhleSBhcmUgbGlzdGVkIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUKICMgbm9ybWFsIG9yZGVyLgogCi0jIFRoaXMgb25seSBjb250YWlucyB0aGUgbWluaW1hbCBzZXQgb2YgbW9kdWxlcyByZXF1aXJlZCB0byBydW4gdGhlIAorIyBUaGlzIG9ubHkgY29udGFpbnMgdGhlIG1pbmltYWwgc2V0IG9mIG1vZHVsZXMgcmVxdWlyZWQgdG8gcnVuIHRoZQogIyBzZXR1cC5weSBzY3JpcHQgaW4gdGhlIHJvb3Qgb2YgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZS4KIAogcG9zaXggcG9zaXhtb2R1bGUuYwkJIyBwb3NpeCAoVU5JWCkgc3lzdGVtIGNhbGxzCkBAIC0xMTMsOSArMTEzLDExIEBACiBfY29kZWNzIF9jb2RlY3Ntb2R1bGUuYwkJIyBhY2Nlc3MgdG8gdGhlIGJ1aWx0aW4gY29kZWNzIGFuZCBjb2RlYyByZWdpc3RyeQogX3dlYWtyZWYgX3dlYWtyZWYuYwkJIyB3ZWFrIHJlZmVyZW5jZXMKIF9mdW5jdG9vbHMgX2Z1bmN0b29sc21vZHVsZS5jICAgIyBUb29scyBmb3Igd29ya2luZyB3aXRoIGZ1bmN0aW9ucyBhbmQgY2FsbGFibGUgb2JqZWN0cwotb3BlcmF0b3Igb3BlcmF0b3IuYwkgICAgICAgICMgb3BlcmF0b3IuYWRkKCkgYW5kIHNpbWlsYXIgZ29vZGllcworX29wZXJhdG9yIF9vcGVyYXRvci5jCSAgICAgICAgIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCiBfY29sbGVjdGlvbnMgX2NvbGxlY3Rpb25zbW9kdWxlLmMgIyBDb250YWluZXIgdHlwZXMKLWl0ZXJ0b29scyBpdGVydG9vbHNtb2R1bGUuYyAgICAjIEZ1bmN0aW9ucyBjcmVhdGluZyBpdGVyYXRvcnMgZm9yIGVmZmljaWVudCBsb29waW5nIAoraXRlcnRvb2xzIGl0ZXJ0b29sc21vZHVsZS5jICAgICMgRnVuY3Rpb25zIGNyZWF0aW5nIGl0ZXJhdG9ycyBmb3IgZWZmaWNpZW50IGxvb3BpbmcKK2F0ZXhpdCBhdGV4aXRtb2R1bGUuYyAgICAgICMgUmVnaXN0ZXIgZnVuY3Rpb25zIHRvIGJlIHJ1biBhdCBpbnRlcnByZXRlci1zaHV0ZG93bgorX3N0YXQgX3N0YXQuYwkJCSMgc3RhdC5oIGludGVyZmFjZQogCiAjIGFjY2VzcyB0byBJU08gQyBsb2NhbGUgc3VwcG9ydAogX2xvY2FsZSBfbG9jYWxlbW9kdWxlLmMgICMgLWxpbnRsCkBAIC0xMzAsMTIgKzEzMiwxNSBAQAogIyBmYXVsdGhhbmRsZXIgbW9kdWxlCiBmYXVsdGhhbmRsZXIgZmF1bHRoYW5kbGVyLmMKIAorIyBkZWJ1ZyB0b29sIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbgorX3RyYWNlbWFsbG9jIF90cmFjZW1hbGxvYy5jIGhhc2h0YWJsZS5jCisKICMgVGhlIHJlc3Qgb2YgdGhlIG1vZHVsZXMgbGlzdGVkIGluIHRoaXMgZmlsZSBhcmUgYWxsIGNvbW1lbnRlZCBvdXQgYnkKICMgZGVmYXVsdC4gIFVzdWFsbHkgdGhleSBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGJ1aWx0IGFzIGR5bmFtaWNhbGx5CiAjIGxvYWRlZCBtb2R1bGVzIGJ5IHRoZSBuZXcgc2V0dXAucHkgc2NyaXB0IGFkZGVkIGluIFB5dGhvbiAyLjEuICBJZgotIyB5b3UncmUgb24gYSBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcsIHdhbnQgdG8gCi0jIGNvbXBpbGUgbW9kdWxlcyBzdGF0aWNhbGx5IGludG8gdGhlIFB5dGhvbiBiaW5hcnksIG9yIG5lZWQgdG8gCi0jIHNwZWNpZnkgc29tZSBvZGQgc2V0IG9mIGNvbXBpbGVyIHN3aXRjaGVzLCB5b3UgY2FuIHVuY29tbWVudCB0aGUgCisjIHlvdSdyZSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgbG9hZGluZywgd2FudCB0bworIyBjb21waWxlIG1vZHVsZXMgc3RhdGljYWxseSBpbnRvIHRoZSBQeXRob24gYmluYXJ5LCBvciBuZWVkIHRvCisjIHNwZWNpZnkgc29tZSBvZGQgc2V0IG9mIGNvbXBpbGVyIHN3aXRjaGVzLCB5b3UgY2FuIHVuY29tbWVudCB0aGUKICMgYXBwcm9wcmlhdGUgbGluZXMgYmVsb3cuCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTcwLDcgKzE3NSw2IEBACiAjX3dlYWtyZWYgX3dlYWtyZWYuYwkjIGJhc2ljIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQKICNfdGVzdGNhcGkgX3Rlc3RjYXBpbW9kdWxlLmMgICAgIyBQeXRob24gQyBBUEkgdGVzdCBtb2R1bGUKICNfcmFuZG9tIF9yYW5kb21tb2R1bGUuYwkjIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0jYXRleGl0IGF0ZXhpdG1vZHVsZS5jICAgICAgIyBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgcnVuIGF0IGludGVycHJldGVyLXNodXRkb3duCiAjX2VsZW1lbnR0cmVlIC1JJChzcmNkaXIpL01vZHVsZXMvZXhwYXQgLURIQVZFX0VYUEFUX0NPTkZJR19IIC1EVVNFX1BZRVhQQVRfQ0FQSSBfZWxlbWVudHRyZWUuYwkjIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCiAjX3BpY2tsZSBfcGlja2xlLmMJIyBwaWNrbGUgYWNjZWxlcmF0b3IKICNfZGF0ZXRpbWUgX2RhdGV0aW1lbW9kdWxlLmMJIyBkYXRldGltZSBhY2NlbGVyYXRvcgpAQCAtMTg1LDcgKzE4OSw3IEBACiAjIHN1cHBvcnRlZC4uLikKIAogI2ZjbnRsIGZjbnRsbW9kdWxlLmMJIyBmY250bCgyKSBhbmQgaW9jdGwoMikKLSNzcHdkIHNwd2Rtb2R1bGUuYwkJIyBzcHdkKDMpIAorI3Nwd2Qgc3B3ZG1vZHVsZS5jCQkjIHNwd2QoMykKICNncnAgZ3JwbW9kdWxlLmMJCSMgZ3JwKDMpCiAjc2VsZWN0IHNlbGVjdG1vZHVsZS5jCSMgc2VsZWN0KDIpOyBub3Qgb24gYW5jaWVudCBTeXN0ZW0gVgogCkBAIC0zMDEsNyArMzA1LDcgQEAKIAogI19jdXJzZXMgX2N1cnNlc21vZHVsZS5jIC1sY3Vyc2VzIC1sdGVybWNhcAogIyBXcmFwcGVyIGZvciB0aGUgcGFuZWwgbGlicmFyeSB0aGF0J3MgcGFydCBvZiBuY3Vyc2VzIGFuZCBTWVNWIGN1cnNlcy4KLSNfY3Vyc2VzX3BhbmVsIF9jdXJzZXNfcGFuZWwuYyAtbHBhbmVsIC1sbmN1cnNlcyAKKyNfY3Vyc2VzX3BhbmVsIF9jdXJzZXNfcGFuZWwuYyAtbHBhbmVsIC1sbmN1cnNlcwogCiAKICMgTW9kdWxlcyB0aGF0IHByb3ZpZGUgcGVyc2lzdGVudCBkaWN0aW9uYXJ5LWxpa2Ugc2VtYW50aWNzLiAgWW91IHdpbGwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKaW5kZXggZmFjYThjZi4uMDJiNTVkMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKQEAgLTYsNiArNiw4IEBACiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlICJQeXRob24uaCIKIAorX1B5X0lERU5USUZJRVIoaW5zZXJ0KTsKKwogc3RhdGljIFB5X3NzaXplX3QKIGludGVybmFsX2Jpc2VjdF9yaWdodChQeU9iamVjdCAqbGlzdCwgUHlPYmplY3QgKml0ZW0sIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGkpCiB7CkBAIC05MCw4ICs5Miw2IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihpbnNlcnQpOwotCiAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQobGlzdCwgJlB5SWRfaW5zZXJ0LCAibk8iLCBpbmRleCwgaXRlbSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTk1LDcgKzE5NSw2IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihpbnNlcnQpOwogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGxpc3QsICZQeUlkX2luc2VydCwgIm5PIiwgaW5kZXgsIGl0ZW0pOwogICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2J6Mm1vZHVsZS5jIGIvTW9kdWxlcy9fYnoybW9kdWxlLmMKaW5kZXggM2Y3YTZjZi4uZTY1MmY0ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYnoybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYnoybW9kdWxlLmMKQEAgLTM2LDggKzM2LDYgQEAKICNkZWZpbmUgUkVMRUFTRV9MT0NLKG9iaikKICNlbmRpZgogCi0jZGVmaW5lIE1JTihYLCBZKSAoKChYKSA8IChZKSkgPyAoWCkgOiAoWSkpCi0KIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTU4LDYgKzU2LDggQEAKICNlbmRpZgogfSBCWjJEZWNvbXByZXNzb3I7CiAKK3N0YXRpYyBQeVR5cGVPYmplY3QgQloyQ29tcHJlc3Nvcl9UeXBlOworc3RhdGljIFB5VHlwZU9iamVjdCBCWjJEZWNvbXByZXNzb3JfVHlwZTsKIAogLyogSGVscGVyIGZ1bmN0aW9ucy4gKi8KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgYy0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIGMtPmJ6cy5hdmFpbF9pbiA9IDA7CiAgICAgYy0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBjLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgICAgIERvIGNvbXByZXNzaW9uIGluIGNodW5rcyBvZiBubyBtb3JlIHRoYW4gVUlOVF9NQVggYnl0ZXMgZWFjaC4gKi8KICAgICAgICAgaWYgKGMtPmJ6cy5hdmFpbF9pbiA9PSAwICYmIGxlbiA+IDApIHsKLSAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9IE1JTihsZW4sIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgbGVuIC09IGMtPmJ6cy5hdmFpbF9pbjsKICAgICAgICAgfQogCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgICAgICAgICBjLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgZGF0YV9zaXplOwogICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZWZ0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIC0gZGF0YV9zaXplOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9IE1JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOworICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CiAgICAgICAgIH0KIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0xOTgsNDQgKzE5OCw1OCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LiBSZXR1cm5zIGEgY2h1bmsgb2ZcbiIKLSJjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuXG4iCi0iXG4iCi0iV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGVcbiIKLSJmbHVzaCgpIG1ldGhvZCB0byBmaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIF9iejIKK2NsYXNzIF9iejIuQloyQ29tcHJlc3NvciAiQloyQ29tcHJlc3NvciAqIiAiJkJaMkNvbXByZXNzb3JfVHlwZSIKK2NsYXNzIF9iejIuQloyRGVjb21wcmVzc29yICJCWjJEZWNvbXByZXNzb3IgKiIgIiZCWjJEZWNvbXByZXNzb3JfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWUzYjEzOTkyNGY1ZTE4Y2NdKi8KKworI2luY2x1ZGUgImNsaW5pYy9fYnoybW9kdWxlLmMuaCIKKworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJDb21wcmVzc29yLmNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK1Byb3ZpZGUgZGF0YSB0byB0aGUgY29tcHJlc3NvciBvYmplY3QuCisKK1JldHVybnMgYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuCisKK1doZW4geW91IGhhdmUgZmluaXNoZWQgcHJvdmlkaW5nIGRhdGEgdG8gdGhlIGNvbXByZXNzb3IsIGNhbGwgdGhlCitmbHVzaCgpIG1ldGhvZCB0byBmaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1CWjJDb21wcmVzc29yX2NvbXByZXNzKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU5MzY1NDI2ZTk0MWZiY2MgaW5wdXQ9ODVjOTYzMjE4MDcwZmM0Y10qLwogewotICAgIFB5X2J1ZmZlciBidWZmZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5mbHVzaGVkKQogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNvbXByZXNzb3IgaGFzIGJlZW4gZmx1c2hlZCIpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgQlpfUlVOKTsKKyAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4sIEJaX1JVTik7CiAgICAgUkVMRUFTRV9MT0NLKHNlbGYpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUHlEb2NfU1RSVkFSKEJaMkNvbXByZXNzb3JfZmx1c2hfX2RvY19fLAotImZsdXNoKCkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJGaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuIFJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBsZWZ0XG4iCi0iaW4gaW50ZXJuYWwgYnVmZmVycy5cbiIKLSJcbiIKLSJUaGUgY29tcHJlc3NvciBvYmplY3QgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJDb21wcmVzc29yLmZsdXNoCisKK0ZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KKworUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy4KKworVGhlIGNvbXByZXNzb3Igb2JqZWN0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1CWjJDb21wcmVzc29yX2ZsdXNoKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfaW1wbChCWjJDb21wcmVzc29yICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNlZjAzZmMxYjA5MmE3MDEgaW5wdXQ9ZDY0NDA1ZDNjNmY3NjY5MV0qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCkBAIC0yNTgsMTQgKzI3Miw0MiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50Ci1CWjJDb21wcmVzc29yX2luaXQoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitzdGF0aWMgdm9pZCoKK0JaMl9NYWxsb2Modm9pZCogY3R4LCBpbnQgaXRlbXMsIGludCBzaXplKQogewotICAgIGludCBjb21wcmVzc2xldmVsID0gOTsKKyAgICBpZiAoaXRlbXMgPCAwIHx8IHNpemUgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoKHNpemVfdClpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyAoc2l6ZV90KXNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOiBjb21wcmVzcygpIGFuZCBkZWNvbXByZXNzKCkKKyAgICAgICByZWxlYXNlIHRoZSBHSUwgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitCWjJfRnJlZSh2b2lkKiBjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19iejIuQloyQ29tcHJlc3Nvci5fX2luaXRfXworCisgICAgY29tcHJlc3NsZXZlbDogaW50ID0gOQorICAgICAgICBDb21wcmVzc2lvbiBsZXZlbCwgYXMgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCA5LgorICAgIC8KKworQ3JlYXRlIGEgY29tcHJlc3NvciBvYmplY3QgZm9yIGNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS4KKworRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZiwgaW50IGNvbXByZXNzbGV2ZWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzRlNmFkZmQwMjk2MzgyNyBpbnB1dD00ZTFmZjdiODM5NGI2ZTlhXSovCit7CiAgICAgaW50IGJ6ZXJyb3I7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOkJaMkNvbXByZXNzb3IiLCAmY29tcHJlc3NsZXZlbCkpCi0gICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoISgxIDw9IGNvbXByZXNzbGV2ZWwgJiYgY29tcHJlc3NsZXZlbCA8PSA5KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wcmVzc2xldmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5Iik7CkBAIC0yODAsNiArMzIyLDkgQEAKICAgICB9CiAjZW5kaWYKIAorICAgIHNlbGYtPmJ6cy5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPmJ6cy5iemFsbG9jID0gQloyX01hbGxvYzsKKyAgICBzZWxmLT5ienMuYnpmcmVlID0gQloyX0ZyZWU7CiAgICAgYnplcnJvciA9IEJaMl9iekNvbXByZXNzSW5pdCgmc2VsZi0+YnpzLCBjb21wcmVzc2xldmVsLCAwLCAwKTsKICAgICBpZiAoY2F0Y2hfYnoyX2Vycm9yKGJ6ZXJyb3IpKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzA2LDIyICszNTEsMTIgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIEJaMkNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiY29tcHJlc3MiLCAgICAgKFB5Q0Z1bmN0aW9uKUJaMkNvbXByZXNzb3JfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX199LAotICAgIHsiZmx1c2giLCAgICAgICAgKFB5Q0Z1bmN0aW9uKUJaMkNvbXByZXNzb3JfZmx1c2gsICAgIE1FVEhfTk9BUkdTLAotICAgICBCWjJDb21wcmVzc29yX2ZsdXNoX19kb2NfX30sCisgICAgX0JaMl9CWjJDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRgorICAgIF9CWjJfQloyQ09NUFJFU1NPUl9GTFVTSF9NRVRIT0RERUYKICAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilCWjJDb21wcmVzc29yX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAgICAge05VTEx9CiB9OwogCi1QeURvY19TVFJWQVIoQloyQ29tcHJlc3Nvcl9fZG9jX18sCi0iQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsPTkpXG4iCi0iXG4iCi0iQ3JlYXRlIGEgY29tcHJlc3NvciBvYmplY3QgZm9yIGNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKLSJcbiIKLSJjb21wcmVzc2xldmVsLCBpZiBnaXZlbiwgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDkuXG4iCi0iXG4iCi0iRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC5cbiIpOwogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IEJaMkNvbXByZXNzb3JfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKQEAgLTM0NCw3ICszNzksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICBCWjJDb21wcmVzc29yX19kb2NfXywgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19fX2RvY19fLCAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCkBAIC0zNTksNyArMzk0LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgKGluaXRwcm9jKUJaMkNvbXByZXNzb3JfaW5pdCwgICAgICAgLyogdHBfaW5pdCAqLworICAgIF9iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfXywgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKQEAgLTM3OSwxMCArNDE0LDEwIEBACiAgICAgZC0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgRG8gZGVjb21wcmVzc2lvbiBpbiBjaHVua3Mgb2Ygbm8gbW9yZSB0aGFuIFVJTlRfTUFYIGJ5dGVzIGVhY2guICovCi0gICAgZC0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgIGQtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgIGxlbiAtPSBkLT5ienMuYXZhaWxfaW47CiAgICAgZC0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBkLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtNDA4LDcgKzQ0Myw3IEBACiAgICAgICAgIGlmIChkLT5ienMuYXZhaWxfaW4gPT0gMCkgewogICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZC0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgICAgICAgICAgZC0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBsZW4gLT0gZC0+YnpzLmF2YWlsX2luOwogICAgICAgICB9CiAgICAgICAgIGlmIChkLT5ienMuYXZhaWxfb3V0ID09IDApIHsKQEAgLTQxOSw3ICs0NTQsNyBAQAogICAgICAgICAgICAgICAgIGQtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBkYXRhX3NpemU7CiAgICAgICAgICAgICAgICAgYnVmZmVyX2xlZnQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkLT5ienMuYXZhaWxfb3V0ID0gTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CisgICAgICAgICAgICBkLT5ienMuYXZhaWxfb3V0ID0gKHVuc2lnbmVkIGludClQeV9NSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZGF0YV9zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSkKQEAgLTQzMiwzMiArNDY3LDMzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhkYXRhKSAtPiBieXRlc1xuIgotIlxuIgotIlByb3ZpZGUgZGF0YSB0byB0aGUgZGVjb21wcmVzc29yIG9iamVjdC4gUmV0dXJucyBhIGNodW5rIG9mXG4iCi0iZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuXG4iCi0iXG4iCi0iQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZFxuIgotInJhaXNlcyBhbiBFT0ZFcnJvci4gQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtXG4iCi0iaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzcworCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuCisKK1JldHVybnMgYSBjaHVuayBvZiBkZWNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS4KKworQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZAorcmFpc2VzIGFuIEVPRkVycm9yLiAgQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtCitpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3MoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChCWjJEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wODZlNGI5OWU2MGNiM2Y2IGlucHV0PTYxNmMyYTZkYjUyNjk5NjFdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpkZWNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5lb2YpCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkVuZCBvZiBzdHJlYW0gYWxyZWFkeSByZWFjaGVkIik7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4pOworICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NjksMTQgKzUwNSwyMCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfYnoyLkJaMkRlY29tcHJlc3Nvci5fX2luaXRfXworCitDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS4KKworRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBpbnQKLUJaMkRlY29tcHJlc3Nvcl9pbml0KEJaMkRlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKEJaMkRlY29tcHJlc3NvciAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNGQyYjliYjg2NmFiOGYxIGlucHV0PTk1ZjY1MDBkY2RhNjAwODhdKi8KIHsKICAgICBpbnQgYnplcnJvcjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOkJaMkRlY29tcHJlc3NvciIpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpAQCAtNTE3LDggKzU1OSw3IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBCWjJEZWNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX199LAorICAgIF9CWjJfQloyREVDT01QUkVTU09SX0RFQ09NUFJFU1NfTUVUSE9EREVGCiAgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pQloyRGVjb21wcmVzc29yX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAgICAge05VTEx9CiB9OwpAQCAtNTM3LDEzICs1NzgsNiBAQAogICAgIHtOVUxMfQogfTsKIAotUHlEb2NfU1RSVkFSKEJaMkRlY29tcHJlc3Nvcl9fZG9jX18sCi0iQloyRGVjb21wcmVzc29yKClcbiIKLSJcbiIKLSJDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKLSJcbiIKLSJGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC5cbiIpOwotCiBzdGF0aWMgUHlUeXBlT2JqZWN0IEJaMkRlY29tcHJlc3Nvcl9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfYnoyLkJaMkRlY29tcHJlc3NvciIsICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTU2NSw3ICs1OTksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICBCWjJEZWNvbXByZXNzb3JfX2RvY19fLCAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTU4MCw3ICs2MTQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICAoaW5pdHByb2MpQloyRGVjb21wcmVzc29yX2luaXQsICAgICAvKiB0cF9pbml0ICovCisgICAgX2J6Ml9CWjJEZWNvbXByZXNzb3JfX19pbml0X18sICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwppbmRleCA0MDAzN2IxLi4xMWQzNzY4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwpAQCAtNDIsNiArNDIsMTIgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9jb2RlY3MKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWUxMzkwZTNkYTNjYjlkZWJdKi8KKworCiAvKiAtLS0gUmVnaXN0cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogUHlEb2NfU1RSVkFSKHJlZ2lzdGVyX19kb2NfXywKQEAgLTEzNCw2ICsxNDAsNTMgQEAKIAogLyogLS0tIEhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MuX2ZvcmdldF9jb2RlYworCisgICAgZW5jb2Rpbmc6IHN0cgorICAgIC8KKworUHVyZ2UgdGhlIG5hbWVkIGNvZGVjIGZyb20gdGhlIGludGVybmFsIGNvZGVjIGxvb2t1cCBjYWNoZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2NvZGVjc19fZm9yZ2V0X2NvZGVjX19kb2NfXywKKyJfZm9yZ2V0X2NvZGVjKCRtb2R1bGUsIGVuY29kaW5nLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUHVyZ2UgdGhlIG5hbWVkIGNvZGVjIGZyb20gdGhlIGludGVybmFsIGNvZGVjIGxvb2t1cCBjYWNoZSIpOworCisjZGVmaW5lIF9DT0RFQ1NfX0ZPUkdFVF9DT0RFQ19NRVRIT0RERUYgICAgXAorICAgIHsiX2ZvcmdldF9jb2RlYyIsIChQeUNGdW5jdGlvbilfY29kZWNzX19mb3JnZXRfY29kZWMsIE1FVEhfVkFSQVJHUywgX2NvZGVjc19fZm9yZ2V0X2NvZGVjX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX19mb3JnZXRfY29kZWNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICplbmNvZGluZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX19mb3JnZXRfY29kZWMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInM6X2ZvcmdldF9jb2RlYyIsCisgICAgICAgICZlbmNvZGluZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX19mb3JnZXRfY29kZWNfaW1wbChtb2R1bGUsIGVuY29kaW5nKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTc1ZTYzMTU5MTcwMmE1YyBpbnB1dD0xOGQ1ZDkyZDBlMzg2YzM4XSovCit7CisgICAgaWYgKF9QeUNvZGVjX0ZvcmdldChlbmNvZGluZykgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH07CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKIHN0YXRpYwogUHlPYmplY3QgKmNvZGVjX3R1cGxlKFB5T2JqZWN0ICp1bmljb2RlLAogICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuKQpAQCAtMTg5LDkgKzI0Miw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgICAgICByZWdpc3RlciBjaGFyIGM7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgKnAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICBjaGFyIGM7CisgICAgICAgIGNoYXIgKnAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAvKiBUaGVyZSdzIGF0IGxlYXN0IGVub3VnaCByb29tIGZvciBhIGhleCBlc2NhcGUgKi8KQEAgLTExNjgsNiArMTIyMSw3IEBACiAgICAgICAgIHJlZ2lzdGVyX2Vycm9yX19kb2NfX30sCiAgICAgeyJsb29rdXBfZXJyb3IiLCAgICAgICAgICAgIGxvb2t1cF9lcnJvciwgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLAogICAgICAgICBsb29rdXBfZXJyb3JfX2RvY19ffSwKKyAgICBfQ09ERUNTX19GT1JHRVRfQ09ERUNfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jIGIvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYwppbmRleCAzY2Y0NzY0Li5jMWFhOWEzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKQEAgLTMsMzAgKzMsMzIgQEAKIAogLyogY29sbGVjdGlvbnMgbW9kdWxlIGltcGxlbWVudGF0aW9uIG9mIGEgZGVxdWUoKSBkYXRhdHlwZQogICAgV3JpdHRlbiBhbmQgbWFpbnRhaW5lZCBieSBSYXltb25kIEQuIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+Ci0gICBDb3B5cmlnaHQgKGMpIDIwMDQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqLwogCiAvKiBUaGUgYmxvY2sgbGVuZ3RoIG1heSBiZSBzZXQgdG8gYW55IG51bWJlciBvdmVyIDEuICBMYXJnZXIgbnVtYmVycwotICogcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IgYnV0IHRha2UgbW9yZQotICogbWVtb3J5LiAgSWRlYWxseSwgQkxPQ0tMRU4gc2hvdWxkIGJlIHNldCB3aXRoIGFuIGV5ZSB0byB0aGUKLSAqIGxlbmd0aCBvZiBhIGNhY2hlIGxpbmUuCisgKiByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciwgZ2l2ZSBmYXN0ZXIKKyAqIGluZGV4aW5nIGFuZCByb3RhdGlvbiwgYW5kIHJlZHVjZSB0aGUgbGluazo6ZGF0YSBvdmVyaGVhZCByYXRpby4KKyAqCisgKiBJZGVhbGx5LCB0aGUgYmxvY2sgbGVuZ3RoIHdpbGwgYmUgc2V0IHRvIHR3byBsZXNzIHRoYW4gc29tZQorICogbXVsdGlwbGUgb2YgdGhlIGNhY2hlLWxpbmUgbGVuZ3RoIChzbyB0aGF0IHRoZSBmdWxsIGJsb2NrCisgKiBpbmNsdWRpbmcgdGhlIGxlZnRsaW5rIGFuZCByaWdodGxpbmsgd2lsbCBmaXQgbmVhdGx5IGludG8KKyAqIGNhY2hlIGxpbmVzKS4KICAqLwogCiAjZGVmaW5lIEJMT0NLTEVOIDYyCiAjZGVmaW5lIENFTlRFUiAoKEJMT0NLTEVOIC0gMSkgLyAyKQogCiAvKiBBIGBkZXF1ZW9iamVjdGAgaXMgY29tcG9zZWQgb2YgYSBkb3VibHktbGlua2VkIGxpc3Qgb2YgYGJsb2NrYCBub2Rlcy4KLSAqIFRoaXMgbGlzdCBpcyBub3QgY2lyY3VsYXIgKHRoZSBsZWZ0bW9zdCBibG9jayBoYXMgbGVmdGxpbms9PU5VTEwsCi0gKiBhbmQgdGhlIHJpZ2h0bW9zdCBibG9jayBoYXMgcmlnaHRsaW5rPT1OVUxMKS4gIEEgZGVxdWUgZCdzIGZpcnN0Ci0gKiBlbGVtZW50IGlzIGF0IGQubGVmdGJsb2NrW2xlZnRpbmRleF0gYW5kIGl0cyBsYXN0IGVsZW1lbnQgaXMgYXQKLSAqIGQucmlnaHRibG9ja1tyaWdodGluZGV4XTsgbm90ZSB0aGF0LCB1bmxpa2UgYXMgZm9yIFB5dGhvbiBzbGljZQotICogaW5kaWNlcywgdGhlc2UgaW5kaWNlcyBhcmUgaW5jbHVzaXZlIG9uIGJvdGggZW5kcy4gIEJ5IGJlaW5nIGluY2x1c2l2ZQotICogb24gYm90aCBlbmRzLCBhbGdvcml0aG1zIGZvciBsZWZ0IGFuZCByaWdodCBvcGVyYXRpb25zIGJlY29tZQotICogc3ltbWV0cmljYWwgd2hpY2ggc2ltcGxpZmllcyB0aGUgZGVzaWduLgotICoKICAqIFRoZSBsaXN0IG9mIGJsb2NrcyBpcyBuZXZlciBlbXB0eSwgc28gZC5sZWZ0YmxvY2sgYW5kIGQucmlnaHRibG9jawotICogYXJlIG5ldmVyIGVxdWFsIHRvIE5VTEwuCisgKiBhcmUgbmV2ZXIgZXF1YWwgdG8gTlVMTC4gIFRoZSBsaXN0IGlzIG5vdCBjaXJjdWxhci4KKyAqCisgKiBBIGRlcXVlIGQncyBmaXJzdCBlbGVtZW50IGlzIGF0IGQubGVmdGJsb2NrW2xlZnRpbmRleF0KKyAqIGFuZCBpdHMgbGFzdCBlbGVtZW50IGlzIGF0IGQucmlnaHRibG9ja1tyaWdodGluZGV4XS4KKyAqIFVubGlrZSBQeXRob24gc2xpY2UgaW5kaWNlcywgdGhlc2UgaW5kaWNlcyBhcmUgaW5jbHVzaXZlCisgKiBvbiBib3RoIGVuZHMuICBUaGlzIG1ha2VzIHRoZSBhbGdvcml0aG1zIGZvciBsZWZ0IGFuZAorICogcmlnaHQgb3BlcmF0aW9ucyBtb3JlIHN5bW1ldHJpY2FsIGFuZCBzaW1wbGlmaWVzIHRoZSBkZXNpZ24uCiAgKgogICogVGhlIGluZGljZXMsIGQubGVmdGluZGV4IGFuZCBkLnJpZ2h0aW5kZXggYXJlIGFsd2F5cyBpbiB0aGUgcmFuZ2UKICAqICAgICAwIDw9IGluZGV4IDwgQkxPQ0tMRU4uCkBAIC00Nyw0MiArNDksNjAgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgQkxPQ0sgewogICAgIHN0cnVjdCBCTE9DSyAqbGVmdGxpbms7Ci0gICAgc3RydWN0IEJMT0NLICpyaWdodGxpbms7CiAgICAgUHlPYmplY3QgKmRhdGFbQkxPQ0tMRU5dOworICAgIHN0cnVjdCBCTE9DSyAqcmlnaHRsaW5rOwogfSBibG9jazsKIAorLyogRm9yIGRlYnVnIGJ1aWxkcywgYWRkIGVycm9yIGNoZWNraW5nIHRvIHRyYWNrIHRoZSBlbmRwb2ludHMKKyAqIGluIHRoZSBjaGFpbiBvZiBsaW5rcy4gIFRoZSBnb2FsIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGxpbmsKKyAqIGFzc2lnbm1lbnRzIG9ubHkgdGFrZSBwbGFjZSBhdCBlbmRwb2ludHMgc28gdGhhdCBsaW5rcyBhbHJlYWR5CisgKiBpbiB1c2UgZG8gbm90IGdldCBvdmVyd3JpdHRlbi4KKyAqCisgKiBDSEVDS19FTkQgc2hvdWxkIGhhcHBlbiBiZWZvcmUgZWFjaCBhc3NpZ25tZW50IHRvIGEgYmxvY2sncyBsaW5rIGZpZWxkLgorICogTUFSS19FTkQgc2hvdWxkIGhhcHBlbiB3aGVuZXZlciBhIGxpbmsgZmllbGQgYmVjb21lcyBhIG5ldyBlbmRwb2ludC4KKyAqIFRoaXMgaGFwcGVucyB3aGVuIG5ldyBibG9ja3MgYXJlIGFkZGVkIG9yIHdoZW5ldmVyIGFuIGV4aXN0aW5nCisgKiBibG9jayBpcyBmcmVlZCBsZWF2aW5nIGFub3RoZXIgZXhpc3RpbmcgYmxvY2sgYXMgdGhlIG5ldyBlbmRwb2ludC4KKyAqLworCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBNQVJLX0VORChsaW5rKSAgbGluayA9IE5VTEw7CisjZGVmaW5lIENIRUNLX0VORChsaW5rKSBhc3NlcnQobGluayA9PSBOVUxMKTsKKyNkZWZpbmUgQ0hFQ0tfTk9UX0VORChsaW5rKSBhc3NlcnQobGluayAhPSBOVUxMKTsKKyNlbHNlCisjZGVmaW5lIE1BUktfRU5EKGxpbmspCisjZGVmaW5lIENIRUNLX0VORChsaW5rKQorI2RlZmluZSBDSEVDS19OT1RfRU5EKGxpbmspCisjZW5kaWYKKworLyogQSBzaW1wbGUgZnJlZWxpc3Rpbmcgc2NoZW1lIGlzIHVzZWQgdG8gbWluaW1pemUgY2FsbHMgdG8gdGhlIG1lbW9yeQorICAgYWxsb2NhdG9yLiAgSXQgYWNjb21vZGF0ZXMgY29tbW9uIHVzZSBjYXNlcyB3aGVyZSBuZXcgYmxvY2tzIGFyZSBiZWluZworICAgYWRkZWQgYXQgYWJvdXQgdGhlIHNhbWUgcmF0ZSBhcyBvbGQgYmxvY2tzIGFyZSBiZWluZyBmcmVlZC4KKyAqLworCiAjZGVmaW5lIE1BWEZSRUVCTE9DS1MgMTAKIHN0YXRpYyBQeV9zc2l6ZV90IG51bWZyZWVibG9ja3MgPSAwOwogc3RhdGljIGJsb2NrICpmcmVlYmxvY2tzW01BWEZSRUVCTE9DS1NdOwogCiBzdGF0aWMgYmxvY2sgKgotbmV3YmxvY2soYmxvY2sgKmxlZnRsaW5rLCBibG9jayAqcmlnaHRsaW5rLCBQeV9zc2l6ZV90IGxlbikgeworbmV3YmxvY2soUHlfc3NpemVfdCBsZW4pIHsKICAgICBibG9jayAqYjsKLSAgICAvKiBUbyBwcmV2ZW50IGxlbiBmcm9tIG92ZXJmbG93aW5nIFBZX1NTSVpFX1RfTUFYIG9uIDY0LWJpdCBtYWNoaW5lcywgd2UKLSAgICAgKiByZWZ1c2UgdG8gYWxsb2NhdGUgbmV3IGJsb2NrcyBpZiB0aGUgY3VycmVudCBsZW4gaXMgZGFuZ2Vyb3VzbHkKLSAgICAgKiBjbG9zZS4gIFRoZXJlIGlzIHNvbWUgZXh0cmEgbWFyZ2luIHRvIHByZXZlbnQgc3B1cmlvdXMgYXJpdGhtZXRpYwotICAgICAqIG92ZXJmbG93cyBhdCB2YXJpb3VzIHBsYWNlcy4gIFRoZSBmb2xsb3dpbmcgY2hlY2sgZW5zdXJlcyB0aGF0Ci0gICAgICogdGhlIGJsb2NrcyBhbGxvY2F0ZWQgdG8gdGhlIGRlcXVlLCBpbiB0aGUgd29yc3QgY2FzZSwgY2FuIG9ubHkKLSAgICAgKiBoYXZlIFBZX1NTSVpFX1RfTUFYLTIgZW50cmllcyBpbiB0b3RhbC4KLSAgICAgKi8KKyAgICAvKiBUbyBwcmV2ZW50IGxlbiBmcm9tIG92ZXJmbG93aW5nIFBZX1NTSVpFX1RfTUFYLCB3ZSByZWZ1c2UgdG8KKyAgICAgKiBhbGxvY2F0ZSBuZXcgYmxvY2tzIGlmIHRoZSBjdXJyZW50IGxlbiBpcyBuZWFyaW5nIG92ZXJmbG93LiAqLwogICAgIGlmIChsZW4gPj0gUFlfU1NJWkVfVF9NQVggLSAyKkJMT0NLTEVOKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBhZGQgbW9yZSBibG9ja3MgdG8gdGhlIGRlcXVlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAobnVtZnJlZWJsb2NrcykgewotICAgICAgICBudW1mcmVlYmxvY2tzIC09IDE7Ci0gICAgICAgIGIgPSBmcmVlYmxvY2tzW251bWZyZWVibG9ja3NdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGIgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKGJsb2NrKSk7Ci0gICAgICAgIGlmIChiID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgICAgICBudW1mcmVlYmxvY2tzLS07CisgICAgICAgIHJldHVybiBmcmVlYmxvY2tzW251bWZyZWVibG9ja3NdOwogICAgIH0KLSAgICBiLT5sZWZ0bGluayA9IGxlZnRsaW5rOwotICAgIGItPnJpZ2h0bGluayA9IHJpZ2h0bGluazsKLSAgICByZXR1cm4gYjsKKyAgICBiID0gUHlNZW1fTWFsbG9jKHNpemVvZihibG9jaykpOworICAgIGlmIChiICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGI7CisgICAgfQorICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05NywxNCArMTE3LDEzIEBACiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3RfVkFSX0hFQUQKICAgICBibG9jayAqbGVmdGJsb2NrOwogICAgIGJsb2NrICpyaWdodGJsb2NrOwogICAgIFB5X3NzaXplX3QgbGVmdGluZGV4OyAgICAgICAvKiBpbiByYW5nZShCTE9DS0xFTikgKi8KICAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXg7ICAgICAgLyogaW4gcmFuZ2UoQkxPQ0tMRU4pICovCi0gICAgUHlfc3NpemVfdCBsZW47CisgICAgbG9uZyBzdGF0ZTsgICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBpbmRpY2VzIG1vdmUgKi8KICAgICBQeV9zc2l6ZV90IG1heGxlbjsKLSAgICBsb25nIHN0YXRlOyAgICAgICAgIC8qIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBpbmRpY2VzIG1vdmUgKi8KICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9IGRlcXVlb2JqZWN0OwogCkBAIC0xMTgsOSArMTM3LDkgQEAKICAqLwogCiAjZGVmaW5lIFRSSU0oZCwgcG9wZnVuY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChkLT5tYXhsZW4gIT0gLTEgJiYgZC0+bGVuID4gZC0+bWF4bGVuKSB7ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoZC0+bWF4bGVuICE9IC0xICYmIFB5X1NJWkUoZCkgPiBkLT5tYXhsZW4pIHsgICAgICAgXAogICAgICAgICBQeU9iamVjdCAqcnYgPSBwb3BmdW5jdGlvbihkLCBOVUxMKTsgICAgICAgICAgICAgICAgXAotICAgICAgICBhc3NlcnQocnYgIT0gTlVMTCAgJiYgIGQtPmxlbiA8PSBkLT5tYXhsZW4pOyAgICAgICAgXAorICAgICAgICBhc3NlcnQocnYgIT0gTlVMTCAgJiYgIFB5X1NJWkUoZCkgPD0gZC0+bWF4bGVuKTsgICAgXAogICAgICAgICBQeV9ERUNSRUYocnYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIApAQCAtMTM3LDE4ICsxNTYsMjAgQEAKICAgICBpZiAoZGVxdWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBiID0gbmV3YmxvY2soTlVMTCwgTlVMTCwgMCk7CisgICAgYiA9IG5ld2Jsb2NrKDApOwogICAgIGlmIChiID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKGRlcXVlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKKyAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOwogCiAgICAgYXNzZXJ0KEJMT0NLTEVOID49IDIpOwogICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOwogICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQ0VOVEVSICsgMTsKICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IENFTlRFUjsKLSAgICBkZXF1ZS0+bGVuID0gMDsKKyAgICBQeV9TSVpFKGRlcXVlKSA9IDA7CiAgICAgZGVxdWUtPnN0YXRlID0gMDsKICAgICBkZXF1ZS0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIGRlcXVlLT5tYXhsZW4gPSAtMTsKQEAgLTE2MiwxNyArMTgzLDE3IEBACiAgICAgUHlPYmplY3QgKml0ZW07CiAgICAgYmxvY2sgKnByZXZibG9jazsKIAotICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInBvcCBmcm9tIGFuIGVtcHR5IGRlcXVlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpdGVtID0gZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXhdOwogICAgIGRlcXVlLT5yaWdodGluZGV4LS07Ci0gICAgZGVxdWUtPmxlbi0tOworICAgIFB5X1NJWkUoZGVxdWUpLS07CiAgICAgZGVxdWUtPnN0YXRlKys7CiAKICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gLTEpIHsKLSAgICAgICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgICAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CiAgICAgICAgICAgICAvKiByZS1jZW50ZXIgaW5zdGVhZCBvZiBmcmVlaW5nIGEgYmxvY2sgKi8KQEAgLTE4Miw3ICsyMDMsOCBAQAogICAgICAgICAgICAgcHJldmJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2stPmxlZnRsaW5rOwogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIHByZXZibG9jay0+cmlnaHRsaW5rID0gTlVMTDsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQocHJldmJsb2NrKTsKKyAgICAgICAgICAgIE1BUktfRU5EKHByZXZibG9jay0+cmlnaHRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gcHJldmJsb2NrOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgICAgIH0KQEAgLTE5OCwxOCArMjIwLDE4IEBACiAgICAgUHlPYmplY3QgKml0ZW07CiAgICAgYmxvY2sgKnByZXZibG9jazsKIAotICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInBvcCBmcm9tIGFuIGVtcHR5IGRlcXVlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBOVUxMKTsKICAgICBpdGVtID0gZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XTsKICAgICBkZXF1ZS0+bGVmdGluZGV4Kys7Ci0gICAgZGVxdWUtPmxlbi0tOworICAgIFB5X1NJWkUoZGVxdWUpLS07CiAgICAgZGVxdWUtPnN0YXRlKys7CiAKICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKICAgICAgICAgICAgIC8qIHJlLWNlbnRlciBpbnN0ZWFkIG9mIGZyZWVpbmcgYSBibG9jayAqLwpAQCAtMjE5LDggKzI0MSw4IEBACiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBwcmV2YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrLT5yaWdodGxpbms7CiAgICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPmxlZnRibG9jayk7Ci0gICAgICAgICAgICBhc3NlcnQocHJldmJsb2NrICE9IE5VTEwpOwotICAgICAgICAgICAgcHJldmJsb2NrLT5sZWZ0bGluayA9IE5VTEw7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKHByZXZibG9jayk7CisgICAgICAgICAgICBNQVJLX0VORChwcmV2YmxvY2stPmxlZnRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBwcmV2YmxvY2s7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gMDsKICAgICAgICAgfQpAQCAtMjM1LDE2ICsyNTcsMTggQEAKIHsKICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4tMSkgewotICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKGRlcXVlLT5yaWdodGJsb2NrLCBOVUxMLCBkZXF1ZS0+bGVuKTsKKyAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgIGlmIChiID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCk7CisgICAgICAgIGItPmxlZnRsaW5rID0gZGVxdWUtPnJpZ2h0YmxvY2s7CisgICAgICAgIENIRUNLX0VORChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rKTsKICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKKyAgICAgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAtMTsKICAgICB9CiAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgIGRlcXVlLT5sZW4rKzsKKyAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgIGRlcXVlLT5yaWdodGluZGV4Kys7CiAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXhdID0gaXRlbTsKICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3BsZWZ0KTsKQEAgLTI1OCwxNiArMjgyLDE4IEBACiB7CiAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewotICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKE5VTEwsIGRlcXVlLT5sZWZ0YmxvY2ssIGRlcXVlLT5sZW4pOworICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgaWYgKGIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCk7CisgICAgICAgIGItPnJpZ2h0bGluayA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgICAgIENIRUNLX0VORChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayk7CiAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID0gYjsKICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IGI7CisgICAgICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOOwogICAgIH0KICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgZGVxdWUtPmxlbisrOworICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgZGVxdWUtPmxlZnRpbmRleC0tOwogICAgIGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF0gPSBpdGVtOwogICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcCk7CkBAIC0zMDksNiArMzM1LDE0IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgLyogU3BhY2Ugc2F2aW5nIGhldXJpc3RpYy4gIFN0YXJ0IGZpbGxpbmcgZnJvbSB0aGUgbGVmdCAqLworICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CisgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSAxOworICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IDA7CisgICAgfQorCiAgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMTksMTkgKzM1MywyMCBAQAogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewogICAgICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOLTEpIHsKLSAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soZGVxdWUtPnJpZ2h0YmxvY2ssIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcXVlLT5sZW4pOworICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKTsKKyAgICAgICAgICAgIGItPmxlZnRsaW5rID0gZGVxdWUtPnJpZ2h0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19FTkQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID0gYjsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IC0xOwogICAgICAgICB9Ci0gICAgICAgIGRlcXVlLT5sZW4rKzsKKyAgICAgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXgrKzsKICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXhdID0gaXRlbTsKICAgICAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wbGVmdCk7CkBAIC0zNjEsNiArMzk2LDE0IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgLyogU3BhY2Ugc2F2aW5nIGhldXJpc3RpYy4gIFN0YXJ0IGZpbGxpbmcgZnJvbSB0aGUgcmlnaHQgKi8KKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgeworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOworICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQkxPQ0tMRU4gLSAxOworICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMjsKKyAgICB9CisKICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOwogICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM3MSwxOSArNDE0LDIwIEBACiAgICAgd2hpbGUgKChpdGVtID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CiAgICAgICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKE5VTEwsIGRlcXVlLT5sZWZ0YmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcXVlLT5sZW4pOworICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCk7CisgICAgICAgICAgICBiLT5yaWdodGxpbmsgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID0gYjsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOOwogICAgICAgICB9Ci0gICAgICAgIGRlcXVlLT5sZW4rKzsKKyAgICAgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICAgICAgZGVxdWUtPmxlZnRpbmRleC0tOwogICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdID0gaXRlbTsKICAgICAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wKTsKQEAgLTQxMyw3ICs0NTcsMTMgQEAKIHN0YXRpYyBpbnQKIF9kZXF1ZV9yb3RhdGUoZGVxdWVvYmplY3QgKmRlcXVlLCBQeV9zc2l6ZV90IG4pCiB7Ci0gICAgUHlfc3NpemVfdCBtLCBsZW49ZGVxdWUtPmxlbiwgaGFsZmxlbj1sZW4+PjE7CisgICAgYmxvY2sgKmIgPSBOVUxMOworICAgIGJsb2NrICpsZWZ0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgIGJsb2NrICpyaWdodGJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2s7CisgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OworICAgIFB5X3NzaXplX3QgcmlnaHRpbmRleCA9IGRlcXVlLT5yaWdodGluZGV4OworICAgIFB5X3NzaXplX3QgbGVuPVB5X1NJWkUoZGVxdWUpLCBoYWxmbGVuPWxlbj4+MTsKKyAgICBpbnQgcnYgPSAtMTsKIAogICAgIGlmIChsZW4gPD0gMSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00MjksNzYgKzQ3OSwxMDMgQEAKIAogICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgIHdoaWxlIChuID4gMCkgewotICAgICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKE5VTEwsIGRlcXVlLT5sZWZ0YmxvY2ssIGxlbik7Ci0gICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKTsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOOworICAgICAgICBpZiAobGVmdGluZGV4ID09IDApIHsKKyAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiID0gbmV3YmxvY2sobGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiLT5yaWdodGxpbmsgPSBsZWZ0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19FTkQobGVmdGJsb2NrLT5sZWZ0bGluayk7CisgICAgICAgICAgICBsZWZ0YmxvY2stPmxlZnRsaW5rID0gYjsKKyAgICAgICAgICAgIGxlZnRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CisgICAgICAgICAgICBsZWZ0aW5kZXggPSBCTE9DS0xFTjsKKyAgICAgICAgICAgIGIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID4gMCk7CisgICAgICAgIGFzc2VydChsZWZ0aW5kZXggPiAwKTsKKyAgICAgICAgeworICAgICAgICAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbSA9IG47CiAKLSAgICAgICAgbSA9IG47Ci0gICAgICAgIGlmIChtID4gZGVxdWUtPnJpZ2h0aW5kZXggKyAxKQotICAgICAgICAgICAgbSA9IGRlcXVlLT5yaWdodGluZGV4ICsgMTsKLSAgICAgICAgaWYgKG0gPiBkZXF1ZS0+bGVmdGluZGV4KQotICAgICAgICAgICAgbSA9IGRlcXVlLT5sZWZ0aW5kZXg7Ci0gICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOwotICAgICAgICBtZW1jcHkoJmRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleCAtIG1dLAotICAgICAgICAgICAgICAgJmRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4ICsgMSAtIG1dLAotICAgICAgICAgICAgICAgbSAqIHNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgICAgIGRlcXVlLT5yaWdodGluZGV4IC09IG07Ci0gICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggLT0gbTsKLSAgICAgICAgbiAtPSBtOwotCi0gICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSAtMSkgewotICAgICAgICAgICAgYmxvY2sgKnByZXZibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrLT5sZWZ0bGluazsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jayAhPSBOVUxMKTsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBwcmV2YmxvY2stPnJpZ2h0bGluayA9IE5VTEw7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IHByZXZibG9jazsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOworICAgICAgICAgICAgaWYgKG0gPiByaWdodGluZGV4ICsgMSkKKyAgICAgICAgICAgICAgICBtID0gcmlnaHRpbmRleCArIDE7CisgICAgICAgICAgICBpZiAobSA+IGxlZnRpbmRleCkKKyAgICAgICAgICAgICAgICBtID0gbGVmdGluZGV4OworICAgICAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7CisgICAgICAgICAgICBzcmMgPSAmcmlnaHRibG9jay0+ZGF0YVtyaWdodGluZGV4XTsKKyAgICAgICAgICAgIGRlc3QgPSAmbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleCAtIDFdOworICAgICAgICAgICAgcmlnaHRpbmRleCAtPSBtOworICAgICAgICAgICAgbGVmdGluZGV4IC09IG07CisgICAgICAgICAgICBuIC09IG07CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKihkZXN0LS0pID0gKihzcmMtLSk7CisgICAgICAgICAgICB9IHdoaWxlICgtLW0pOworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodGluZGV4ID09IC0xKSB7CisgICAgICAgICAgICBhc3NlcnQobGVmdGJsb2NrICE9IHJpZ2h0YmxvY2spOworICAgICAgICAgICAgYXNzZXJ0KGIgPT0gTlVMTCk7CisgICAgICAgICAgICBiID0gcmlnaHRibG9jazsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQocmlnaHRibG9jay0+bGVmdGxpbmspOworICAgICAgICAgICAgcmlnaHRibG9jayA9IHJpZ2h0YmxvY2stPmxlZnRsaW5rOworICAgICAgICAgICAgTUFSS19FTkQocmlnaHRibG9jay0+cmlnaHRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKG4gPCAwKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTiAtIDEpIHsKLSAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soZGVxdWUtPnJpZ2h0YmxvY2ssIE5VTEwsIGxlbik7Ci0gICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IC0xOworICAgICAgICBpZiAocmlnaHRpbmRleCA9PSBCTE9DS0xFTiAtIDEpIHsKKyAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiID0gbmV3YmxvY2sobGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiLT5sZWZ0bGluayA9IHJpZ2h0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19FTkQocmlnaHRibG9jay0+cmlnaHRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7CisgICAgICAgICAgICByaWdodGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CisgICAgICAgICAgICByaWdodGluZGV4ID0gLTE7CisgICAgICAgICAgICBiID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQgKGRlcXVlLT5yaWdodGluZGV4IDwgQkxPQ0tMRU4gLSAxKTsKKyAgICAgICAgYXNzZXJ0IChyaWdodGluZGV4IDwgQkxPQ0tMRU4gLSAxKTsKKyAgICAgICAgeworICAgICAgICAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbSA9IC1uOwogCi0gICAgICAgIG0gPSAtbjsKLSAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIGRlcXVlLT5sZWZ0aW5kZXgpCi0gICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSBkZXF1ZS0+bGVmdGluZGV4OwotICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gMSAtIGRlcXVlLT5yaWdodGluZGV4KQotICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gMSAtIGRlcXVlLT5yaWdodGluZGV4OwotICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKLSAgICAgICAgbWVtY3B5KCZkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleCArIDFdLAotICAgICAgICAgICAgICAgJmRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF0sCi0gICAgICAgICAgICAgICBtICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgZGVxdWUtPmxlZnRpbmRleCArPSBtOwotICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCArPSBtOwotICAgICAgICBuICs9IG07Ci0KLSAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgICAgIGJsb2NrICpuZXh0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrLT5yaWdodGxpbms7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPmxlZnRibG9jayk7Ci0gICAgICAgICAgICBhc3NlcnQobmV4dGJsb2NrICE9IE5VTEwpOwotICAgICAgICAgICAgbmV4dGJsb2NrLT5sZWZ0bGluayA9IE5VTEw7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gbmV4dGJsb2NrOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IDA7CisgICAgICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gbGVmdGluZGV4KQorICAgICAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIGxlZnRpbmRleDsKKyAgICAgICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSAxIC0gcmlnaHRpbmRleCkKKyAgICAgICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSAxIC0gcmlnaHRpbmRleDsKKyAgICAgICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOworICAgICAgICAgICAgc3JjID0gJmxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOworICAgICAgICAgICAgZGVzdCA9ICZyaWdodGJsb2NrLT5kYXRhW3JpZ2h0aW5kZXggKyAxXTsKKyAgICAgICAgICAgIGxlZnRpbmRleCArPSBtOworICAgICAgICAgICAgcmlnaHRpbmRleCArPSBtOworICAgICAgICAgICAgbiArPSBtOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICooZGVzdCsrKSA9ICooc3JjKyspOworICAgICAgICAgICAgfSB3aGlsZSAoLS1tKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7CisgICAgICAgICAgICBhc3NlcnQobGVmdGJsb2NrICE9IHJpZ2h0YmxvY2spOworICAgICAgICAgICAgYXNzZXJ0KGIgPT0gTlVMTCk7CisgICAgICAgICAgICBiID0gbGVmdGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChsZWZ0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKKyAgICAgICAgICAgIE1BUktfRU5EKGxlZnRibG9jay0+bGVmdGxpbmspOworICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBydiA9IDA7Citkb25lOgorICAgIGlmIChiICE9IE5VTEwpCisgICAgICAgIGZyZWVibG9jayhiKTsKKyAgICBkZXF1ZS0+bGVmdGJsb2NrID0gbGVmdGJsb2NrOworICAgIGRlcXVlLT5yaWdodGJsb2NrID0gcmlnaHRibG9jazsKKyAgICBkZXF1ZS0+bGVmdGluZGV4ID0gbGVmdGluZGV4OworICAgIGRlcXVlLT5yaWdodGluZGV4ID0gcmlnaHRpbmRleDsKKworICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTUyMywxMyArNjAwLDE1IEBACiAgICAgYmxvY2sgKnJpZ2h0YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CiAgICAgUHlfc3NpemVfdCByaWdodGluZGV4ID0gZGVxdWUtPnJpZ2h0aW5kZXg7Ci0gICAgUHlfc3NpemVfdCBuID0gKGRlcXVlLT5sZW4pLzI7CisgICAgUHlfc3NpemVfdCBuID0gKFB5X1NJWkUoZGVxdWUpKS8yOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqdG1wOwogCiAgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKICAgICAgICAgLyogVmFsaWRhdGUgdGhhdCBwb2ludGVycyBoYXZlbid0IG1ldCBpbiB0aGUgbWlkZGxlICovCiAgICAgICAgIGFzc2VydChsZWZ0YmxvY2sgIT0gcmlnaHRibG9jayB8fCBsZWZ0aW5kZXggPCByaWdodGluZGV4KTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChsZWZ0YmxvY2spOworICAgICAgICBDSEVDS19OT1RfRU5EKHJpZ2h0YmxvY2spOwogCiAgICAgICAgIC8qIFN3YXAgKi8KICAgICAgICAgdG1wID0gbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CkBAIC01MzksOCArNjE4LDYgQEAKICAgICAgICAgLyogQWR2YW5jZSBsZWZ0IGJsb2NrL2luZGV4IHBhaXIgKi8KICAgICAgICAgbGVmdGluZGV4Kys7CiAgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgICAgIGlmIChsZWZ0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7CiAgICAgICAgICAgICBsZWZ0aW5kZXggPSAwOwogICAgICAgICB9CkBAIC01NDgsOCArNjI1LDYgQEAKICAgICAgICAgLyogU3RlcCBiYWNrd2FyZHMgd2l0aCB0aGUgcmlnaHQgYmxvY2svaW5kZXggcGFpciAqLwogICAgICAgICByaWdodGluZGV4LS07CiAgICAgICAgIGlmIChyaWdodGluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICBpZiAocmlnaHRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJpZ2h0YmxvY2sgPSByaWdodGJsb2NrLT5sZWZ0bGluazsKICAgICAgICAgICAgIHJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgICAgIH0KQEAgLTU2Myw5ICs2MzgsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlX2NvdW50KGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlPYmplY3QgKnYpCiB7Ci0gICAgYmxvY2sgKmxlZnRibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2s7Ci0gICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OwotICAgIFB5X3NzaXplX3QgbiA9IGRlcXVlLT5sZW47CisgICAgYmxvY2sgKmIgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgIFB5X3NzaXplX3QgaW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OworICAgIFB5X3NzaXplX3QgbiA9IFB5X1NJWkUoZGVxdWUpOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IGNvdW50ID0gMDsKICAgICBQeU9iamVjdCAqaXRlbTsKQEAgLTU3Myw3ICs2NDgsOCBAQAogICAgIGludCBjbXA7CiAKICAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgewotICAgICAgICBpdGVtID0gbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CisgICAgICAgIENIRUNLX05PVF9FTkQoYik7CisgICAgICAgIGl0ZW0gPSBiLT5kYXRhW2luZGV4XTsKICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0sIHYsIFB5X0VRKTsKICAgICAgICAgaWYgKGNtcCA+IDApCiAgICAgICAgICAgICBjb3VudCsrOwpAQCAtNTg3LDEyICs2NjMsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIEFkdmFuY2UgbGVmdCBibG9jay9pbmRleCBwYWlyICovCi0gICAgICAgIGxlZnRpbmRleCsrOwotICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgICAgICBpZiAobGVmdGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCkgIC8qIGNhbiBvY2N1ciB3aGVuIGk9PW4tMSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7Ci0gICAgICAgICAgICBsZWZ0aW5kZXggPSAwOworICAgICAgICBpbmRleCsrOworICAgICAgICBpZiAoaW5kZXggPT0gQkxPQ0tMRU4pIHsKKyAgICAgICAgICAgIGIgPSBiLT5yaWdodGxpbms7CisgICAgICAgICAgICBpbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChjb3VudCk7CkBAIC02MDQsMTkgKzY3OCwxOSBAQAogc3RhdGljIFB5X3NzaXplX3QKIGRlcXVlX2xlbihkZXF1ZW9iamVjdCAqZGVxdWUpCiB7Ci0gICAgcmV0dXJuIGRlcXVlLT5sZW47CisgICAgcmV0dXJuIFB5X1NJWkUoZGVxdWUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogZGVxdWVfcmVtb3ZlKGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlPYmplY3QgKnZhbHVlKQogewotICAgIFB5X3NzaXplX3QgaSwgbj1kZXF1ZS0+bGVuOworICAgIFB5X3NzaXplX3QgaSwgbj1QeV9TSVpFKGRlcXVlKTsKIAogICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XTsKICAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLCB2YWx1ZSwgUHlfRVEpOwogCi0gICAgICAgIGlmIChkZXF1ZS0+bGVuICE9IG4pIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpICE9IG4pIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAogICAgICAgICAgICAgICAgICJkZXF1ZSBtdXRhdGVkIGR1cmluZyByZW1vdmUoKS4iKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjQ3LDE0ICs3MjEsMTQgQEAKIHsKICAgICBQeU9iamVjdCAqaXRlbTsKIAotICAgIHdoaWxlIChkZXF1ZS0+bGVuKSB7CisgICAgd2hpbGUgKFB5X1NJWkUoZGVxdWUpKSB7CiAgICAgICAgIGl0ZW0gPSBkZXF1ZV9wb3AoZGVxdWUsIE5VTEwpOwogICAgICAgICBhc3NlcnQgKGl0ZW0gIT0gTlVMTCk7CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICB9CiAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2sgJiYKICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCAtIDEgPT0gZGVxdWUtPnJpZ2h0aW5kZXggJiYKLSAgICAgICAgICAgZGVxdWUtPmxlbiA9PSAwKTsKKyAgICAgICAgICAgUHlfU0laRShkZXF1ZSkgPT0gMCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC02NjQsNyArNzM4LDcgQEAKICAgICBQeU9iamVjdCAqaXRlbTsKICAgICBQeV9zc2l6ZV90IG4sIGluZGV4PWk7CiAKLSAgICBpZiAoaSA8IDAgfHwgaSA+PSBkZXF1ZS0+bGVuKSB7CisgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShkZXF1ZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZGVxdWUgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjczLDE5ICs3NDcsMTkgQEAKICAgICBpZiAoaSA9PSAwKSB7CiAgICAgICAgIGkgPSBkZXF1ZS0+bGVmdGluZGV4OwogICAgICAgICBiID0gZGVxdWUtPmxlZnRibG9jazsKLSAgICB9IGVsc2UgaWYgKGkgPT0gZGVxdWUtPmxlbiAtIDEpIHsKKyAgICB9IGVsc2UgaWYgKGkgPT0gUHlfU0laRShkZXF1ZSkgLSAxKSB7CiAgICAgICAgIGkgPSBkZXF1ZS0+cmlnaHRpbmRleDsKICAgICAgICAgYiA9IGRlcXVlLT5yaWdodGJsb2NrOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGkgKz0gZGVxdWUtPmxlZnRpbmRleDsKICAgICAgICAgbiA9IGkgLyBCTE9DS0xFTjsKICAgICAgICAgaSAlPSBCTE9DS0xFTjsKLSAgICAgICAgaWYgKGluZGV4IDwgKGRlcXVlLT5sZW4gPj4gMSkpIHsKKyAgICAgICAgaWYgKGluZGV4IDwgKFB5X1NJWkUoZGVxdWUpID4+IDEpKSB7CiAgICAgICAgICAgICBiID0gZGVxdWUtPmxlZnRibG9jazsKICAgICAgICAgICAgIHdoaWxlIChuLS0pCiAgICAgICAgICAgICAgICAgYiA9IGItPnJpZ2h0bGluazsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG4gPSAoZGVxdWUtPmxlZnRpbmRleCArIGRlcXVlLT5sZW4gLSAxKSAvIEJMT0NLTEVOIC0gbjsKKyAgICAgICAgICAgIG4gPSAoZGVxdWUtPmxlZnRpbmRleCArIFB5X1NJWkUoZGVxdWUpIC0gMSkgLyBCTE9DS0xFTiAtIG47CiAgICAgICAgICAgICBiID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgICAgICAgICB3aGlsZSAobi0tKQogICAgICAgICAgICAgICAgIGIgPSBiLT5sZWZ0bGluazsKQEAgLTcwOCw3ICs3ODIsNyBAQAogewogICAgIFB5T2JqZWN0ICppdGVtOwogCi0gICAgYXNzZXJ0IChpID49IDAgJiYgaSA8IGRlcXVlLT5sZW4pOworICAgIGFzc2VydCAoaSA+PSAwICYmIGkgPCBQeV9TSVpFKGRlcXVlKSk7CiAgICAgaWYgKF9kZXF1ZV9yb3RhdGUoZGVxdWUsIC1pKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC03MjQsNyArNzk4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqb2xkX3ZhbHVlOwogICAgIGJsb2NrICpiOwotICAgIFB5X3NzaXplX3QgbiwgbGVuPWRlcXVlLT5sZW4sIGhhbGZsZW49KGxlbisxKT4+MSwgaW5kZXg9aTsKKyAgICBQeV9zc2l6ZV90IG4sIGxlbj1QeV9TSVpFKGRlcXVlKSwgaGFsZmxlbj0obGVuKzEpPj4xLCBpbmRleD1pOwogCiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gbGVuKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLApAQCAtNzg3LDE3ICs4NjEsMTcgQEAKICAgICBQeV9zc2l6ZV90IGluZGV4OwogICAgIFB5X3NzaXplX3QgaW5kZXhsbyA9IGRlcXVlLT5sZWZ0aW5kZXg7CiAKLSAgICBmb3IgKGIgPSBkZXF1ZS0+bGVmdGJsb2NrOyBiICE9IE5VTEw7IGIgPSBiLT5yaWdodGxpbmspIHsKLSAgICAgICAgY29uc3QgUHlfc3NpemVfdCBpbmRleGhpID0gYiA9PSBkZXF1ZS0+cmlnaHRibG9jayA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA6Ci0gICAgICAgICAgICAgICAgICAgICBCTE9DS0xFTiAtIDE7Ci0KLSAgICAgICAgZm9yIChpbmRleCA9IGluZGV4bG87IGluZGV4IDw9IGluZGV4aGk7ICsraW5kZXgpIHsKKyAgICBmb3IgKGIgPSBkZXF1ZS0+bGVmdGJsb2NrOyBiICE9IGRlcXVlLT5yaWdodGJsb2NrOyBiID0gYi0+cmlnaHRsaW5rKSB7CisgICAgICAgIGZvciAoaW5kZXggPSBpbmRleGxvOyBpbmRleCA8IEJMT0NLTEVOIDsgaW5kZXgrKykgewogICAgICAgICAgICAgaXRlbSA9IGItPmRhdGFbaW5kZXhdOwogICAgICAgICAgICAgUHlfVklTSVQoaXRlbSk7CiAgICAgICAgIH0KICAgICAgICAgaW5kZXhsbyA9IDA7CiAgICAgfQorICAgIGZvciAoaW5kZXggPSBpbmRleGxvOyBpbmRleCA8PSBkZXF1ZS0+cmlnaHRpbmRleDsgaW5kZXgrKykgeworICAgICAgICBpdGVtID0gYi0+ZGF0YVtpbmRleF07CisgICAgICAgIFB5X1ZJU0lUKGl0ZW0pOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtODg3LDggKzk2MSw4IEBACiAgICAgfQogCiAgICAgLyogU2hvcnRjdXRzICovCi0gICAgdnMgPSAoKGRlcXVlb2JqZWN0ICopdiktPmxlbjsKLSAgICB3cyA9ICgoZGVxdWVvYmplY3QgKil3KS0+bGVuOworICAgIHZzID0gUHlfU0laRSgoZGVxdWVvYmplY3QgKil2KTsKKyAgICB3cyA9IFB5X1NJWkUoKGRlcXVlb2JqZWN0ICopdyk7CiAgICAgaWYgKG9wID09IFB5X0VRKSB7CiAgICAgICAgIGlmICh2ID09IHcpCiAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKQEAgLTk4OSw4ICsxMDYzLDggQEAKICAgICBQeV9zc2l6ZV90IGJsb2NrczsKIAogICAgIHJlcyA9IHNpemVvZihkZXF1ZW9iamVjdCk7Ci0gICAgYmxvY2tzID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBkZXF1ZS0+bGVuICsgQkxPQ0tMRU4gLSAxKSAvIEJMT0NLTEVOOwotICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ICsgZGVxdWUtPmxlbiAtIDEgPT0KKyAgICBibG9ja3MgPSAoZGVxdWUtPmxlZnRpbmRleCArIFB5X1NJWkUoZGVxdWUpICsgQkxPQ0tMRU4gLSAxKSAvIEJMT0NLTEVOOworICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgLSAxID09CiAgICAgICAgICAgIChibG9ja3MgLSAxKSAqIEJMT0NLTEVOICsgZGVxdWUtPnJpZ2h0aW5kZXgpOwogICAgIHJlcyArPSBibG9ja3MgKiBzaXplb2YoYmxvY2spOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKQEAgLTExNDMsNyArMTIxNyw3IEBACiAgICAgUHlfSU5DUkVGKGRlcXVlKTsKICAgICBpdC0+ZGVxdWUgPSBkZXF1ZTsKICAgICBpdC0+c3RhdGUgPSBkZXF1ZS0+c3RhdGU7Ci0gICAgaXQtPmNvdW50ZXIgPSBkZXF1ZS0+bGVuOworICAgIGl0LT5jb3VudGVyID0gUHlfU0laRShkZXF1ZSk7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soaXQpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilpdDsKIH0KQEAgLTExODIsNyArMTI1Niw3IEBACiAgICAgaXQtPmluZGV4Kys7CiAgICAgaXQtPmNvdW50ZXItLTsKICAgICBpZiAoaXQtPmluZGV4ID09IEJMT0NLTEVOICYmIGl0LT5jb3VudGVyID4gMCkgewotICAgICAgICBhc3NlcnQgKGl0LT5iLT5yaWdodGxpbmsgIT0gTlVMTCk7CisgICAgICAgIENIRUNLX05PVF9FTkQoaXQtPmItPnJpZ2h0bGluayk7CiAgICAgICAgIGl0LT5iID0gaXQtPmItPnJpZ2h0bGluazsKICAgICAgICAgaXQtPmluZGV4ID0gMDsKICAgICB9CkBAIC0xMjMwLDcgKzEzMDQsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlaXRlcl9yZWR1Y2UoZGVxdWVpdGVyb2JqZWN0ICppdCkKIHsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPbikiLCBQeV9UWVBFKGl0KSwgaXQtPmRlcXVlLCBpdC0+ZGVxdWUtPmxlbiAtIGl0LT5jb3VudGVyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPbikiLCBQeV9UWVBFKGl0KSwgaXQtPmRlcXVlLCBQeV9TSVpFKGl0LT5kZXF1ZSkgLSBpdC0+Y291bnRlcik7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBkZXF1ZWl0ZXJfbWV0aG9kc1tdID0gewpAQCAtMTI5OSw3ICsxMzczLDcgQEAKICAgICBQeV9JTkNSRUYoZGVxdWUpOwogICAgIGl0LT5kZXF1ZSA9IGRlcXVlOwogICAgIGl0LT5zdGF0ZSA9IGRlcXVlLT5zdGF0ZTsKLSAgICBpdC0+Y291bnRlciA9IGRlcXVlLT5sZW47CisgICAgaXQtPmNvdW50ZXIgPSBQeV9TSVpFKGRlcXVlKTsKICAgICBQeU9iamVjdF9HQ19UcmFjayhpdCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0OwogfQpAQCAtMTMyNCw3ICsxMzk4LDcgQEAKICAgICBpdC0+aW5kZXgtLTsKICAgICBpdC0+Y291bnRlci0tOwogICAgIGlmIChpdC0+aW5kZXggPT0gLTEgJiYgaXQtPmNvdW50ZXIgPiAwKSB7Ci0gICAgICAgIGFzc2VydCAoaXQtPmItPmxlZnRsaW5rICE9IE5VTEwpOworICAgICAgICBDSEVDS19OT1RfRU5EKGl0LT5iLT5sZWZ0bGluayk7CiAgICAgICAgIGl0LT5iID0gaXQtPmItPmxlZnRsaW5rOwogICAgICAgICBpdC0+aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgfQpAQCAtMTc0NCw3ICsxODE4LDcgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYm91bmRfZ2V0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtYXBwaW5nLCAiZ2V0Iik7CisgICAgICAgIGJvdW5kX2dldCA9IF9QeU9iamVjdF9HZXRBdHRySWQobWFwcGluZywgJlB5SWRfZ2V0KTsKICAgICAgICAgaWYgKGJvdW5kX2dldCA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jcnlwdG1vZHVsZS5jIGIvTW9kdWxlcy9fY3J5cHRtb2R1bGUuYwppbmRleCA1MTAwNzg4Li5kYTQ0ZWYzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jcnlwdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2NyeXB0bW9kdWxlLmMKQEAgLTUsNDAgKzUsNzYgQEAKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCi0jaWZkZWYgX19WTVMKLSNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotI2VuZGlmCi0KIC8qIE1vZHVsZSBjcnlwdCAqLwogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgY3J5cHQKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWM2MjUyY2Y0ZjJmMmFlODFdKi8KIAotc3RhdGljIFB5T2JqZWN0ICpjcnlwdF9jcnlwdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisKKy8qW2NsaW5pYyBpbnB1dF0KK2NyeXB0LmNyeXB0CisKKyAgICB3b3JkOiAncycKKyAgICBzYWx0OiAncycKKyAgICAvCisKK0hhc2ggYSAqd29yZCogd2l0aCB0aGUgZ2l2ZW4gKnNhbHQqIGFuZCByZXR1cm4gdGhlIGhhc2hlZCBwYXNzd29yZC4KKworKndvcmQqIHdpbGwgdXN1YWxseSBiZSBhIHVzZXIncyBwYXNzd29yZC4gICpzYWx0KiAoZWl0aGVyIGEgcmFuZG9tIDIgb3IgMTYKK2NoYXJhY3RlciBzdHJpbmcsIHBvc3NpYmx5IHByZWZpeGVkIHdpdGggJGRpZ2l0JCB0byBpbmRpY2F0ZSB0aGUgbWV0aG9kKQord2lsbCBiZSB1c2VkIHRvIHBlcnR1cmIgdGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtIGFuZCBwcm9kdWNlIGRpc3RpbmN0CityZXN1bHRzIGZvciBhIGdpdmVuICp3b3JkKi4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoY3J5cHRfY3J5cHRfX2RvY19fLAorImNyeXB0KCRtb2R1bGUsIHdvcmQsIHNhbHQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJIYXNoIGEgKndvcmQqIHdpdGggdGhlIGdpdmVuICpzYWx0KiBhbmQgcmV0dXJuIHRoZSBoYXNoZWQgcGFzc3dvcmQuXG4iCisiXG4iCisiKndvcmQqIHdpbGwgdXN1YWxseSBiZSBhIHVzZXJcJ3MgcGFzc3dvcmQuICAqc2FsdCogKGVpdGhlciBhIHJhbmRvbSAyIG9yIDE2XG4iCisiY2hhcmFjdGVyIHN0cmluZywgcG9zc2libHkgcHJlZml4ZWQgd2l0aCAkZGlnaXQkIHRvIGluZGljYXRlIHRoZSBtZXRob2QpXG4iCisid2lsbCBiZSB1c2VkIHRvIHBlcnR1cmIgdGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtIGFuZCBwcm9kdWNlIGRpc3RpbmN0XG4iCisicmVzdWx0cyBmb3IgYSBnaXZlbiAqd29yZCouIik7CisKKyNkZWZpbmUgQ1JZUFRfQ1JZUFRfTUVUSE9EREVGICAgIFwKKyAgICB7ImNyeXB0IiwgKFB5Q0Z1bmN0aW9uKWNyeXB0X2NyeXB0LCBNRVRIX1ZBUkFSR1MsIGNyeXB0X2NyeXB0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitjcnlwdF9jcnlwdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKndvcmQsIGNvbnN0IGNoYXIgKnNhbHQpOworCitzdGF0aWMgUHlPYmplY3QgKgorY3J5cHRfY3J5cHQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgY2hhciAqd29yZCwgKnNhbHQ7Ci0jaWZuZGVmIF9fVk1TCi0gICAgZXh0ZXJuIGNoYXIgKiBjcnlwdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci0jZW5kaWYKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICp3b3JkOworICAgIGNvbnN0IGNoYXIgKnNhbHQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNzOmNyeXB0IiwgJndvcmQsICZzYWx0KSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzczpjcnlwdCIsCisgICAgICAgICZ3b3JkLCAmc2FsdCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBjcnlwdF9jcnlwdF9pbXBsKG1vZHVsZSwgd29yZCwgc2FsdCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2NyeXB0X2NyeXB0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqd29yZCwgY29uc3QgY2hhciAqc2FsdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zZWFhY2RmOTk0YTZmZjIzIGlucHV0PTRkOTNiNmQwZjQxZmJmNThdKi8KK3sKICAgICAvKiBPbiBzb21lIHBsYXRmb3JtcyAoQXRoZU9TKSBjcnlwdCByZXR1cm5zIE5VTEwgZm9yIGFuIGludmFsaWQKICAgICAgICBzYWx0LiBSZXR1cm4gTm9uZSBpbiB0aGF0IGNhc2UuIFhYWCBNYXliZSByYWlzZSBhbiBleGNlcHRpb24/ICAqLwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJzIiwgY3J5cHQod29yZCwgc2FsdCkpOwotCiB9CiAKLVB5RG9jX1NUUlZBUihjcnlwdF9jcnlwdF9fZG9jX18sCi0iY3J5cHQod29yZCwgc2FsdCkgLT4gc3RyaW5nXG5cCi13b3JkIHdpbGwgdXN1YWxseSBiZSBhIHVzZXIncyBwYXNzd29yZC4gc2FsdCBpcyBhIDItY2hhcmFjdGVyIHN0cmluZ1xuXAotd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHNlbGVjdCBvbmUgb2YgNDA5NiB2YXJpYXRpb25zIG9mIERFUy4gVGhlIGNoYXJhY3RlcnNcblwKLWluIHNhbHQgbXVzdCBiZSBlaXRoZXIgXCIuXCIsIFwiL1wiLCBvciBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyLiBSZXR1cm5zXG5cCi10aGUgaGFzaGVkIHBhc3N3b3JkIGFzIGEgc3RyaW5nLCB3aGljaCB3aWxsIGJlIGNvbXBvc2VkIG9mIGNoYXJhY3RlcnMgZnJvbVxuXAotdGhlIHNhbWUgYWxwaGFiZXQgYXMgdGhlIHNhbHQuIik7Ci0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGNyeXB0X21ldGhvZHNbXSA9IHsKLSAgICB7ImNyeXB0IiwgICAgICAgICAgIGNyeXB0X2NyeXB0LCBNRVRIX1ZBUkFSR1MsIGNyeXB0X2NyeXB0X19kb2NfX30sCisgICAgQ1JZUFRfQ1JZUFRfTUVUSE9EREVGCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Nzdi5jIGIvTW9kdWxlcy9fY3N2LmMKaW5kZXggZjVmNmU3MS4uYzg3NjdkMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3N2LmMKKysrIGIvTW9kdWxlcy9fY3N2LmMKQEAgLTUxLDcgKzUxLDcgQEAKIHR5cGVkZWYgZW51bSB7CiAgICAgU1RBUlRfUkVDT1JELCBTVEFSVF9GSUVMRCwgRVNDQVBFRF9DSEFSLCBJTl9GSUVMRCwKICAgICBJTl9RVU9URURfRklFTEQsIEVTQ0FQRV9JTl9RVU9URURfRklFTEQsIFFVT1RFX0lOX1FVT1RFRF9GSUVMRCwKLSAgICBFQVRfQ1JOTAorICAgIEVBVF9DUk5MLEFGVEVSX0VTQ0FQRURfQ1JOTAogfSBQYXJzZXJTdGF0ZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTU1Myw3ICs1NTMsMTAgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZmllbGQgPSB0bXA7CiAgICAgfQotICAgIFB5TGlzdF9BcHBlbmQoc2VsZi0+ZmllbGRzLCBmaWVsZCk7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+ZmllbGRzLCBmaWVsZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihmaWVsZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgUHlfREVDUkVGKGZpZWxkKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTY1MSw2ICs2NTQsMTIgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVTQ0FQRURfQ0hBUjoKKyAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjPT0nXHInKSB7CisgICAgICAgICAgICBpZiAocGFyc2VfYWRkX2NoYXIoc2VsZiwgYykgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHNlbGYtPnN0YXRlID0gQUZURVJfRVNDQVBFRF9DUk5MOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgaWYgKGMgPT0gJ1wwJykKICAgICAgICAgICAgIGMgPSAnXG4nOwogICAgICAgICBpZiAocGFyc2VfYWRkX2NoYXIoc2VsZiwgYykgPCAwKQpAQCAtNjU4LDYgKzY2NywxMSBAQAogICAgICAgICBzZWxmLT5zdGF0ZSA9IElOX0ZJRUxEOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgQUZURVJfRVNDQVBFRF9DUk5MOgorICAgICAgICBpZiAoYyA9PSAnXDAnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qZmFsbHRocnUqLworCiAgICAgY2FzZSBJTl9GSUVMRDoKICAgICAgICAgLyogaW4gdW5xdW90ZWQgZmllbGQgKi8KICAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAnXDAnKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwppbmRleCA0ODM1MWJlLi5mZDAwZTUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKQEAgLTI3Niw4ICsyNzYsMTAgQEAKICAgICBpZiAocHJlZml4KQogICAgICAgICBsZW4gKz0gc3RybGVuKHByZWZpeCk7CiAgICAgcmVzdWx0ID0gUHlNZW1fTWFsbG9jKGxlbiArIDEpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGlmIChwcmVmaXgpCiAgICAgICAgIHN0cmNweShyZXN1bHQsIHByZWZpeCk7CiAgICAgZWxzZQpAQCAtMjg3LDYgKzI4OSw0OCBAQAogfQogCiAvKgorICBBbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBmb3IgYSBwZXAzMTE4IGZvcm1hdCBzdHJpbmcsIGFkZGluZworICB0aGUgZ2l2ZW4gcHJlZml4IChpZiBub24tbnVsbCksIGFuIGFkZGl0aW9uYWwgc2hhcGUgcHJlZml4LCBhbmQgYSBzdWZmaXguCisgIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLCB3aXRoIHRoZSBlcnJvciBpbmRpY2F0b3Igc2V0LiAgSWYgY2FsbGVkIHdpdGgKKyAgYSBzdWZmaXggb2YgTlVMTCB0aGUgZXJyb3IgaW5kaWNhdG9yIG11c3QgYWxyZWFkeSBiZSBzZXQuCisgKi8KK2NoYXIgKgorX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nX3dpdGhfc2hhcGUoaW50IG5kaW0sIGNvbnN0IFB5X3NzaXplX3QgKnNoYXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpCit7CisgICAgY2hhciAqbmV3X3ByZWZpeDsKKyAgICBjaGFyICpyZXN1bHQ7CisgICAgY2hhciBidWZbMzJdOworICAgIGludCBwcmVmaXhfbGVuOworICAgIGludCBrOworCisgICAgcHJlZml4X2xlbiA9IDMyICogbmRpbSArIDM7CisgICAgaWYgKHByZWZpeCkKKyAgICAgICAgcHJlZml4X2xlbiArPSBzdHJsZW4ocHJlZml4KTsKKyAgICBuZXdfcHJlZml4ID0gUHlNZW1fTWFsbG9jKHByZWZpeF9sZW4pOworICAgIGlmIChuZXdfcHJlZml4ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG5ld19wcmVmaXhbMF0gPSAnXDAnOworICAgIGlmIChwcmVmaXgpCisgICAgICAgIHN0cmNweShuZXdfcHJlZml4LCBwcmVmaXgpOworICAgIGlmIChuZGltID4gMCkgeworICAgICAgICAvKiBBZGQgdGhlIHByZWZpeCAiKHNoYXBlWzBdLHNoYXBlWzFdLC4uLixzaGFwZVtuZGltLTFdKSIgKi8KKyAgICAgICAgc3RyY2F0KG5ld19wcmVmaXgsICIoIik7CisgICAgICAgIGZvciAoayA9IDA7IGsgPCBuZGltOyArK2spIHsKKyAgICAgICAgICAgIGlmIChrIDwgbmRpbS0xKSB7CisgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICIlIlBZX0ZPUk1BVF9TSVpFX1QiZCwiLCBzaGFwZVtrXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJSJQWV9GT1JNQVRfU0laRV9UImQpIiwgc2hhcGVba10pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RyY2F0KG5ld19wcmVmaXgsIGJ1Zik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKG5ld19wcmVmaXgsIHN1ZmZpeCk7CisgICAgUHlNZW1fRnJlZShuZXdfcHJlZml4KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgogICBQeUNTdHJ1Y3RUeXBlX1R5cGUgLSBhIG1ldGEgdHlwZS9jbGFzcy4gIENyZWF0aW5nIGEgbmV3IGNsYXNzIHVzaW5nIHRoaXMgb25lIGFzCiAgIF9fbWV0YWNsYXNzX18gd2lsbCBjYWxsIHRoZSBjb250cnVjdG9yIFN0cnVjdFVuaW9uVHlwZV9uZXcuICBJdCByZXBsYWNlcyB0aGUKICAgdHBfZGljdCBtZW1iZXIgd2l0aCBhIG5ldyBpbnN0YW5jZSBvZiBTdGdEaWN0LCBhbmQgaW5pdGlhbGl6ZXMgdGhlIEMKQEAgLTQyNiwxMyArNDcwLDcgQEAKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlUeXBlX3N0Z2RpY3QodHlwZSk7CiAgICAgYXNzZXJ0IChkaWN0KTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfGk6ZnJvbV9idWZmZXIiLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98bjpmcm9tX2J1ZmZlciIsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJm9mZnNldCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46ZnJvbV9idWZmZXIiLCAmb2JqLCAmb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoLTEgPT0gUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcihvYmosICZidWZmZXIsICZidWZmZXJfbGVuKSkKQEAgLTQ0NSwxMSArNDgzLDcgQEAKICAgICB9CiAgICAgaWYgKGRpY3QtPnNpemUgPiBidWZmZXJfbGVuIC0gb2Zmc2V0KSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICVkIGJ5dGVzKSIsCi0jZWxzZQogICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJXpkIGluc3RlYWQgb2YgYXQgbGVhc3QgJXpkIGJ5dGVzKSIsCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW4sIGRpY3QtPnNpemUgKyBvZmZzZXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC00NjAsNyArNDk0LDYgQEAKIAogICAgIFB5X0lOQ1JFRihvYmopOwogICAgIGlmICgtMSA9PSBLZWVwUmVmKChDRGF0YU9iamVjdCAqKXJlc3VsdCwgLTEsIG9iaikpIHsKLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDgyLDEzICs1MTUsNyBAQAogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3QgPSBQeVR5cGVfc3RnZGljdCh0eXBlKTsKICAgICBhc3NlcnQgKGRpY3QpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98aTpmcm9tX2J1ZmZlciIsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xuOmZyb21fYnVmZmVyIiwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmb2Zmc2V0KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpmcm9tX2J1ZmZlciIsICZvYmosICZvZmZzZXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICgtMSA9PSBQeU9iamVjdF9Bc1JlYWRCdWZmZXIob2JqLCAoY29uc3Qgdm9pZCoqKSZidWZmZXIsICZidWZmZXJfbGVuKSkKQEAgLTUwMiwxMSArNTI5LDcgQEAKIAogICAgIGlmIChkaWN0LT5zaXplID4gYnVmZmVyX2xlbiAtIG9mZnNldCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJWQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlZCBieXRlcykiLAotI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCV6ZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICV6ZCBieXRlcykiLAotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuLCBkaWN0LT5zaXplICsgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtODc5LDE0ICs5MDIsMjEgQEAKIAogICAgIGlmIChwcm90bykgewogICAgICAgICBTdGdEaWN0T2JqZWN0ICppdGVtZGljdCA9IFB5VHlwZV9zdGdkaWN0KHByb3RvKTsKKyAgICAgICAgY29uc3QgY2hhciAqY3VycmVudF9mb3JtYXQ7CiAgICAgICAgIGFzc2VydChpdGVtZGljdCk7CiAgICAgICAgIC8qIElmIGl0ZW1kaWN0LT5mb3JtYXQgaXMgTlVMTCwgdGhlbiB0aGlzIGlzIGEgcG9pbnRlciB0byBhbgogICAgICAgICAgICBpbmNvbXBsZXRlIHR5cGUuICBXZSBjcmVhdGUgYSBnZW5lcmljIGZvcm1hdCBzdHJpbmcKICAgICAgICAgICAgJ3BvaW50ZXIgdG8gYnl0ZXMnIGluIHRoaXMgY2FzZS4gIFhYWCBCZXR0ZXIgd291bGQgYmUgdG8KICAgICAgICAgICAgZml4IHRoZSBmb3JtYXQgc3RyaW5nIGxhdGVyLi4uCiAgICAgICAgICovCi0gICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZygiJiIsCi0gICAgICAgICAgICAgICAgICAgICAgaXRlbWRpY3QtPmZvcm1hdCA/IGl0ZW1kaWN0LT5mb3JtYXQgOiAiQiIpOworICAgICAgICBjdXJyZW50X2Zvcm1hdCA9IGl0ZW1kaWN0LT5mb3JtYXQgPyBpdGVtZGljdC0+Zm9ybWF0IDogIkIiOworICAgICAgICBpZiAoaXRlbWRpY3QtPnNoYXBlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYW4gYXJyYXk6IHRoZSBzaGFwZSBuZWVkcyB0byBiZSBwcmVmaXhlZCAqLworICAgICAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nX3dpdGhfc2hhcGUoCisgICAgICAgICAgICAgICAgaXRlbWRpY3QtPm5kaW0sIGl0ZW1kaWN0LT5zaGFwZSwgIiYiLCBjdXJyZW50X2Zvcm1hdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoIiYiLCBjdXJyZW50X2Zvcm1hdCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopc3RnZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEwNTAsNyArMTA4MCw3IEBACiAgICAgcHRyID0gdmlldy5idWY7CiAgICAgaWYgKHNpemUgPiBzZWxmLT5iX3NpemUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZSBzdHJpbmcgdG9vIGxvbmciKTsKICAgICAgICAgZ290byBmYWlsOwogICAgIH0KIApAQCAtMTEwMiw3ICsxMTMyLDcgQEAKICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRSh2YWx1ZSk7CiAgICAgaWYgKHNpemUgPiBzZWxmLT5iX3NpemUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZSBzdHJpbmcgdG9vIGxvbmciKTsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTEyNjQsNyArMTI5NCw2IEBACiAgICAgbG9uZyBsZW5ndGg7CiAgICAgaW50IG92ZXJmbG93OwogICAgIFB5X3NzaXplX3QgaXRlbXNpemUsIGl0ZW1hbGlnbjsKLSAgICBjaGFyIGJ1ZlszMl07CiAKICAgICAvKiBjcmVhdGUgdGhlIG5ldyBpbnN0YW5jZSAod2hpY2ggaXMgYSBjbGFzcywKICAgICAgICBzaW5jZSB3ZSBhcmUgYSBtZXRhdHlwZSEpICovCkBAIC0xMzE0LDE5ICsxMzQzLDE1IEBACiAgICAgfQogCiAgICAgYXNzZXJ0KGl0ZW1kaWN0LT5mb3JtYXQpOwotICAgIGlmIChpdGVtZGljdC0+Zm9ybWF0WzBdID09ICcoJykgewotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiglbGQsIiwgbGVuZ3RoKTsKLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKGJ1ZiwgaXRlbWRpY3QtPmZvcm1hdCsxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiglbGQpIiwgbGVuZ3RoKTsKLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKGJ1ZiwgaXRlbWRpY3QtPmZvcm1hdCk7Ci0gICAgfQorICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCBpdGVtZGljdC0+Zm9ybWF0KTsKICAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgc3RnZGljdC0+bmRpbSA9IGl0ZW1kaWN0LT5uZGltICsgMTsKLSAgICBzdGdkaWN0LT5zaGFwZSA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlfc3NpemVfdCAqKSAqIHN0Z2RpY3QtPm5kaW0pOwotICAgIGlmIChzdGdkaWN0LT5zaGFwZSA9PSBOVUxMKQorICAgIHN0Z2RpY3QtPnNoYXBlID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeV9zc2l6ZV90KSAqIHN0Z2RpY3QtPm5kaW0pOworICAgIGlmIChzdGdkaWN0LT5zaGFwZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogICAgIHN0Z2RpY3QtPnNoYXBlWzBdID0gbGVuZ3RoOwogICAgIG1lbW1vdmUoJnN0Z2RpY3QtPnNoYXBlWzFdLCBpdGVtZGljdC0+c2hhcGUsCiAgICAgICAgIHNpemVvZihQeV9zc2l6ZV90KSAqIChzdGdkaWN0LT5uZGltIC0gMSkpOwpAQCAtMTM1Nyw3ICsxMzgyLDggQEAKICAgICBpZiAoLTEgPT0gUHlEaWN0X1VwZGF0ZSgoUHlPYmplY3QgKilzdGdkaWN0LCByZXN1bHQtPnRwX2RpY3QpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIFB5X0RFQ1JFRihyZXN1bHQtPnRwX2RpY3QpOwotICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7CisgICAgcmVzdWx0LT50cF9kaWN0ID0gKFB5T2JqZWN0ICopc3RnZGljdDsgIC8qIHN0ZWFsIHRoZSByZWZlcmVuY2UgKi8KKyAgICBzdGdkaWN0ID0gTlVMTDsKIAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgY2hhcmFjdGVyIGFycmF5cy4KICAgICAgICBBIHBlcm1hbmVudCBhbm5veWFuY2U6IGNoYXIgYXJyYXlzIGFyZSBhbHNvIHN0cmluZ3MhCkBAIC0xNDQ1LDcgKzE0NzEsNyBAQAogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KLSAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSB8fCBQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgeworICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKICAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoIloiKTsKIApAQCAtMTU5NywyNSArMTYyMyw4IEBACiAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilwYXJnOwogICAgIH0KICAgICAvKiBYWFggc3RydW5pOiByZW1vdmUgbGF0ZXIgKi8KLS8qIHN0cmluZyAqLwotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBQeUNBcmdPYmplY3QgKnBhcmc7Ci0gICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ6Iik7Ci0KLSAgICAgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKLSAgICAgICAgaWYgKHBhcmcgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBwYXJnLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfcG9pbnRlcjsKLSAgICAgICAgcGFyZy0+dGFnID0gJ3onOwotICAgICAgICBwYXJnLT5vYmogPSBmZC0+c2V0ZnVuYygmcGFyZy0+dmFsdWUsIHZhbHVlLCAwKTsKLSAgICAgICAgaWYgKHBhcmctPm9iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocGFyZyk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopcGFyZzsKLSAgICB9CiAvKiBieXRlcyAqLwotICAgIGlmIChQeUJ5dGVBcnJheV9DaGVjayh2YWx1ZSkpIHsKKyAgICBpZiAoUHlCeXRlc19DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwogICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygieiIpOwogCkBAIC0yMjU5LDYgKzIyNjgsMTAgQEAKICAgICAgICBhcmd0eXBlcyB3b3VsZCBiZSBhIGN0eXBlcyB0eXBlKS4KICAgICAqLwogICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiWHt9Iik7CisgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilzdGdkaWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHN0Z2RpY3QtPmZsYWdzIHw9IFRZUEVGTEFHX0lTUE9JTlRFUjsKIAogICAgIC8qIGNyZWF0ZSB0aGUgbmV3IGluc3RhbmNlICh3aGljaCBpcyBhIGNsYXNzLApAQCAtMjM0MSw2ICsyMzU0LDggQEAKICAgICBpZiAoc2VsZi0+Yl9vYmplY3RzID09IE5VTEwpIHsKICAgICAgICAgaWYgKHNlbGYtPmJfbGVuZ3RoKSB7CiAgICAgICAgICAgICBzZWxmLT5iX29iamVjdHMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICBpZiAoc2VsZi0+Yl9vYmplY3RzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgICAgICBzZWxmLT5iX29iamVjdHMgPSBQeV9Ob25lOwpAQCAtMjM1Miw3ICsyMzY3LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogR2V0S2VlcGVkT2JqZWN0cyhDRGF0YU9iamVjdCAqdGFyZ2V0KQogewotICAgIHJldHVybiBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpLT5iX29iamVjdHM7CisgICAgQ0RhdGFPYmplY3QgKmNvbnRhaW5lcjsKKyAgICBjb250YWluZXIgPSBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpOworICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGNvbnRhaW5lci0+Yl9vYmplY3RzOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjQwOSw2ICsyNDI4LDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBvYiA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCk7CisgICAgaWYgKG9iID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGtlZXApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGlmIChvYi0+Yl9vYmplY3RzID09IE5VTEwgfHwgIVB5RGljdF9DaGVja0V4YWN0KG9iLT5iX29iamVjdHMpKSB7CiAgICAgICAgIFB5X1hERUNSRUYob2ItPmJfb2JqZWN0cyk7CiAgICAgICAgIG9iLT5iX29iamVjdHMgPSBrZWVwOyAvKiByZWZjb3VudCBjb25zdW1lZCAqLwpAQCAtMjc5NSw2ICsyODE4LDkgQEAKICAgICAgICAgICAgIC8qIFhYWCAqLzsKIAogICAgICAgICB2YWx1ZSA9IEdldEtlZXBlZE9iamVjdHMoc3JjKTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQpAQCAtMjgxOCw2ICsyODQ0LDkgQEAKICAgICAgICAgKih2b2lkICoqKXB0ciA9IHNyYy0+Yl9wdHI7CiAKICAgICAgICAga2VlcCA9IEdldEtlZXBlZE9iamVjdHMoc3JjKTsKKyAgICAgICAgaWYgKGtlZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIC8qCiAgICAgICAgICAgV2UgYXJlIGFzc2lnbmluZyBhbiBhcnJheSBvYmplY3QgdG8gYSBmaWVsZCB3aGljaCByZXByZXNlbnRzCiAgICAgICAgICAgYSBwb2ludGVyLiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgY29udmVydGluZyBhbiBhcnJheQpAQCAtMzE3Miw3ICszMjAxLDcgQEAKICAgICAgICAgcmV0dXJuICpwbmFtZSA/IDEgOiAwOwogICAgIH0KICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24gbmFtZSBtdXN0IGJlIHN0cmluZyBvciBpbnRlZ2VyIik7CisgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiBuYW1lIG11c3QgYmUgc3RyaW5nLCBieXRlcyBvYmplY3Qgb3IgaW50ZWdlciIpOwogICAgIHJldHVybiAwOwogfQogCkBAIC00MDQ0LDggKzQwNzMsOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKSB7Ci0gICAgICAgIGludCByZXMgPSBfaW5pdF9wb3NfYXJncyhzZWxmLCBQeV9UWVBFKHNlbGYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywga3dkcywgMCk7CisgICAgICAgIFB5X3NzaXplX3QgcmVzID0gX2luaXRfcG9zX2FyZ3Moc2VsZiwgUHlfVFlQRShzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLCBrd2RzLCAwKTsKICAgICAgICAgaWYgKHJlcyA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHJlcyA8IFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKQEAgLTQyMTYsNyArNDI0NSw3IEBACiAgICAgICAgICAgICBpICs9IHNlbGYtPmJfbGVuZ3RoOwogICAgICAgICByZXR1cm4gQXJyYXlfaXRlbShteXNlbGYsIGkpOwogICAgIH0KLSAgICBlbHNlIGlmIFB5U2xpY2VfQ2hlY2soaXRlbSkgeworICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaXRlbSkpIHsKICAgICAgICAgU3RnRGljdE9iamVjdCAqc3RnZGljdCwgKml0ZW1kaWN0OwogICAgICAgICBQeU9iamVjdCAqcHJvdG87CiAgICAgICAgIFB5T2JqZWN0ICpucDsKQEAgLTQyOTIsNiArNDMyMSwxMCBAQAogICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOwogICAgICAgICAgICAgIGN1ciArPSBzdGVwLCBpKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gQXJyYXlfaXRlbShteXNlbGYsIGN1cik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5wKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShucCwgaSwgdik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5wOwpAQCAtNDgwNiw2ICs0ODM5LDkgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAga2VlcCA9IEdldEtlZXBlZE9iamVjdHMoZHN0KTsKKyAgICBpZiAoa2VlcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKICAgICBQeV9JTkNSRUYoa2VlcCk7CiAgICAgcmV0dXJuIEtlZXBSZWYoc2VsZiwgMCwga2VlcCk7CiB9CkBAIC01MjEyLDkgKzUyNDgsMTQgQEAKICAgICAgKi8KICAgICBpZiAoQ0RhdGFPYmplY3RfQ2hlY2soc3JjKSkgewogICAgICAgICBDRGF0YU9iamVjdCAqb2JqID0gKENEYXRhT2JqZWN0ICopc3JjOworICAgICAgICBDRGF0YU9iamVjdCAqY29udGFpbmVyOworCiAgICAgICAgIC8qIFB5Q0RhdGFfR2V0Q29udGFpbmVyIHdpbGwgaW5pdGlhbGl6ZSBzcmMuYl9vYmplY3RzLCB3ZSBuZWVkCiAgICAgICAgICAgIHRoaXMgc28gaXQgY2FuIGJlIHNoYXJlZCAqLwotICAgICAgICBQeUNEYXRhX0dldENvbnRhaW5lcihvYmopOworICAgICAgICBjb250YWluZXIgPSBQeUNEYXRhX0dldENvbnRhaW5lcihvYmopOworICAgICAgICBpZiAoY29udGFpbmVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKwogICAgICAgICAvKiBCdXQgd2UgbmVlZCBhIGRpY3Rpb25hcnkhICovCiAgICAgICAgIGlmIChvYmotPmJfb2JqZWN0cyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoUHlfTm9uZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKaW5kZXggYTNkMjMyMS4uZWM4ZmQxMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwpAQCAtOTgsMjAgKzk4LDM3IEBACiAgICAgUHlPYmplY3QgKnB5X2dsb2JhbHMgPSAwOwogICAgIFB5Q29kZU9iamVjdCAqcHlfY29kZSA9IDA7CiAgICAgUHlGcmFtZU9iamVjdCAqcHlfZnJhbWUgPSAwOworICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwgKnRiOworCisgICAgLyogKFNhdmUgYW5kKSBDbGVhciB0aGUgY3VycmVudCBleGNlcHRpb24uIFB5dGhvbiBmdW5jdGlvbnMgbXVzdCBub3QgYmUKKyAgICAgICBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LiBDYWxsaW5nIFB5dGhvbiBmdW5jdGlvbnMgaGFwcGVucyB3aGVuCisgICAgICAgdGhlIGNvZGVjIG9mIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIGlzIGltcGxlbWVudGVkIGluIHB1cmUgUHl0aG9uLiAqLworICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2YWx1ZSwgJnRiKTsKIAogICAgIHB5X2dsb2JhbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCFweV9nbG9iYWxzKSBnb3RvIGJhZDsKKyAgICBpZiAoIXB5X2dsb2JhbHMpCisgICAgICAgIGdvdG8gYmFkOwogICAgIHB5X2NvZGUgPSBQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBsaW5lbm8pOwotICAgIGlmICghcHlfY29kZSkgZ290byBiYWQ7CisgICAgaWYgKCFweV9jb2RlKQorICAgICAgICBnb3RvIGJhZDsKICAgICBweV9mcmFtZSA9IFB5RnJhbWVfTmV3KAogICAgICAgICBQeVRocmVhZFN0YXRlX0dldCgpLCAvKlB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwqLwogICAgICAgICBweV9jb2RlLCAgICAgICAgICAgICAvKlB5Q29kZU9iamVjdCAqY29kZSwqLwogICAgICAgICBweV9nbG9iYWxzLCAgICAgICAgICAvKlB5T2JqZWN0ICpnbG9iYWxzLCovCiAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgIC8qUHlPYmplY3QgKmxvY2FscyovCiAgICAgICAgICk7Ci0gICAgaWYgKCFweV9mcmFtZSkgZ290byBiYWQ7CisgICAgaWYgKCFweV9mcmFtZSkKKyAgICAgICAgZ290byBiYWQ7CiAgICAgcHlfZnJhbWUtPmZfbGluZW5vID0gbGluZW5vOworCisgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiAgICAgUHlUcmFjZUJhY2tfSGVyZShweV9mcmFtZSk7CisKKyAgICBQeV9ERUNSRUYocHlfZ2xvYmFscyk7CisgICAgUHlfREVDUkVGKHB5X2NvZGUpOworICAgIFB5X0RFQ1JFRihweV9mcmFtZSk7CisgICAgcmV0dXJuOworCiAgIGJhZDoKICAgICBQeV9YREVDUkVGKHB5X2dsb2JhbHMpOwogICAgIFB5X1hERUNSRUYocHlfY29kZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCmluZGV4IDA5ZWI2NTMuLjc0MTE5YTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCkBAIC0yNjEsMTggKzI2MSwxOCBAQAogICAgICAgICAgICB0byBhIHZpcnR1YWwgYWRkcmVzcyBmb3Igd2hpY2ggaXQgZG9lcyBub3QKICAgICAgICAgICAgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgYWNjZXNzLiAqLwogICAgICAgICBpZiAocHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzBdID09IDApCi0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYWNjZXNzIHZpb2xhdGlvbiByZWFkaW5nICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYWNjZXNzIHZpb2xhdGlvbiB3cml0aW5nICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0JSRUFLUE9JTlQ6CiAgICAgICAgIC8qIEEgYnJlYWtwb2ludCB3YXMgZW5jb3VudGVyZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYnJlYWtwb2ludCBlbmNvdW50ZXJlZCIpOwogICAgICAgICBicmVhazsKIApAQCAtMjgyLDE0ICsyODIsMTQgQEAKICAgICAgICAgICAgYWxpZ25tZW50LiBGb3IgZXhhbXBsZSwgMTYtYml0IHZhbHVlcyBtdXN0IGJlCiAgICAgICAgICAgIGFsaWduZWQgb24gMi1ieXRlIGJvdW5kYXJpZXMsIDMyLWJpdCB2YWx1ZXMgb24KICAgICAgICAgICAgNC1ieXRlIGJvdW5kYXJpZXMsIGFuZCBzbyBvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBkYXRhdHlwZSBtaXNhbGlnbm1lbnQiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9TSU5HTEVfU1RFUDoKICAgICAgICAgLyogQSB0cmFjZSB0cmFwIG9yIG90aGVyIHNpbmdsZS1pbnN0cnVjdGlvbiBtZWNoYW5pc20KICAgICAgICAgICAgc2lnbmFsZWQgdGhhdCBvbmUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc2luZ2xlIHN0ZXAiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBhY2Nlc3MgYW4gYXJyYXkgZWxlbWVudAogICAgICAgICAgICB0aGF0IGlzIG91dCBvZiBib3VuZHMsIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZQogICAgICAgICAgICBzdXBwb3J0cyBib3VuZHMgY2hlY2tpbmcuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYXJyYXkgYm91bmRzIGV4Y2VlZGVkIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zMDYsMjggKzMwNiwyOCBAQAogICAgICAgICAgICBpcyBkZW5vcm1hbC4gQSBkZW5vcm1hbCB2YWx1ZSBpcyBvbmUgdGhhdCBpcyB0b28KICAgICAgICAgICAgc21hbGwgdG8gcmVwcmVzZW50IGFzIGEgc3RhbmRhcmQgZmxvYXRpbmctcG9pbnQKICAgICAgICAgICAgdmFsdWUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXRpbmctcG9pbnQgb3BlcmFuZCBkZW5vcm1hbCIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9ESVZJREVfQllfWkVSTzoKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGEgZmxvYXRpbmctcG9pbnQKICAgICAgICAgICAgdmFsdWUgYnkgYSBmbG9hdGluZy1wb2ludCBkaXZpc29yIG9mIHplcm8uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgZGl2aWRlIGJ5IHplcm8iKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfSU5FWEFDVF9SRVNVTFQ6CiAgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gY2Fubm90IGJlCiAgICAgICAgICAgIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBkZWNpbWFsIGZyYWN0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGluZXhhY3QiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfSU5WQUxJRF9PUEVSQVRJT046CiAgICAgICAgIC8qIFRoaXMgZXhjZXB0aW9uIHJlcHJlc2VudHMgYW55IGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIGV4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGludmFsaWQgb3BlcmF0aW9uIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zMzUsMjEgKzMzNSwyMSBAQAogICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMKICAgICAgICAgICAgZ3JlYXRlciB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUKICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0eXBlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX1NUQUNLX0NIRUNLOgogICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0CiAgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXIvdW5kZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fU1RBQ0tfT1ZFUkZMT1c6CiAgICAgICAgIC8qIFRoZSBzdGFjayBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkIGFzIHRoZSByZXN1bHQKICAgICAgICAgICAgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc3RhY2sgb3ZlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM1NywyMSArMzU3LDIxIEBACiAgICAgICAgIC8qIFRoZSBleHBvbmVudCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBpcyBsZXNzCiAgICAgICAgICAgIHRoYW4gdGhlIG1hZ25pdHVkZSBhbGxvd2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgIHR5cGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgdW5kZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fSU5UX0RJVklERV9CWV9aRVJPOgogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBkaXZpZGUgYW4gaW50ZWdlciB2YWx1ZSBieQogICAgICAgICAgICBhbiBpbnRlZ2VyIGRpdmlzb3Igb2YgemVyby4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBpbnRlZ2VyIGRpdmlkZSBieSB6ZXJvIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fSU5UX09WRVJGTE9XOgogICAgICAgICAvKiBUaGUgcmVzdWx0IG9mIGFuIGludGVnZXIgb3BlcmF0aW9uIGNhdXNlZCBhIGNhcnJ5CiAgICAgICAgICAgIG91dCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHJlc3VsdC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBpbnRlZ2VyIG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNzksMTQgKzM3OSwxNCBAQAogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBleGVjdXRlIGFuIGluc3RydWN0aW9uCiAgICAgICAgICAgIHdob3NlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudAogICAgICAgICAgICBtYWNoaW5lIG1vZGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogcHJpdmlsZWRnZWQgaW5zdHJ1Y3Rpb24iKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9OT05DT05USU5VQUJMRV9FWENFUFRJT046CiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGNvbnRpbnVlIGV4ZWN1dGlvbiBhZnRlciBhCiAgICAgICAgICAgIG5vbmNvbnRpbnVhYmxlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBub2NvbnRpbnVhYmxlIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC02MjAsNiArNjIwLDggQEAKICAgICAgICAgYXNzZXJ0KGRpY3QtPnBhcmFtZnVuYyk7CiAgICAgICAgIC8qIElmIGl0IGhhcyBhbiBzdGdkaWN0LCBpdCBpcyBhIENEYXRhT2JqZWN0ICovCiAgICAgICAgIGNhcmcgPSBkaWN0LT5wYXJhbWZ1bmMoKENEYXRhT2JqZWN0ICopb2JqKTsKKyAgICAgICAgaWYgKGNhcmcgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcGEtPmZmaV90eXBlID0gY2FyZy0+cGZmaV90eXBlOwogICAgICAgICBtZW1jcHkoJnBhLT52YWx1ZSwgJmNhcmctPnZhbHVlLCBzaXplb2YocGEtPnZhbHVlKSk7CiAgICAgICAgIHBhLT5rZWVwID0gKFB5T2JqZWN0ICopY2FyZzsKQEAgLTExMDUsOSArMTEwNyw3IEBACiAgICAgICAgIGlmIChhcmd0eXBlcyAmJiBhcmd0eXBlX2NvdW50ID4gaSkgewogICAgICAgICAgICAgUHlPYmplY3QgKnY7CiAgICAgICAgICAgICBjb252ZXJ0ZXIgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R5cGVzLCBpKTsKLSAgICAgICAgICAgIHYgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIHYgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNvbnZlcnRlciwgYXJnLCBOVUxMKTsKICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBfY3R5cGVzX2V4dGVuZF9lcnJvcihQeUV4Y19BcmdFcnJvciwgImFyZ3VtZW50ICVkOiAiLCBpKzEpOwogICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKQEAgLTEyNzIsNjIgKzEyNzIsNiBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCi0vKiBvYnNvbGV0ZSwgc2hvdWxkIGJlIHJlbW92ZWQgKi8KLS8qIE9ubHkgdXNlZCBieSBzYW1wbGUgY29kZSAoaW4gc2FtcGxlc1xXaW5kb3dzXENPTS5weSkgKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1jYWxsX2NvbW1ldGhvZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgSVVua25vd24gKnBJdW5rOwotICAgIGludCBpbmRleDsKLSAgICBQeU9iamVjdCAqYXJndW1lbnRzOwotICAgIFBQUk9DICpscFZ0Ymw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBDRGF0YU9iamVjdCAqcGNvbTsKLSAgICBQeU9iamVjdCAqYXJndHlwZXMgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPaU8hfE8hIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjb20sICZpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmFyZ3R5cGVzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoYXJndHlwZXMgJiYgKFB5VHVwbGVfR0VUX1NJWkUoYXJndW1lbnRzKSAhPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3R5cGVzKSkpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgdGFrZXMgJWQgYXJndW1lbnRzICglZCBnaXZlbikiLAotICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShhcmd0eXBlcyksIFB5VHVwbGVfR0VUX1NJWkUoYXJndW1lbnRzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghQ0RhdGFPYmplY3RfQ2hlY2socGNvbSkgfHwgKHBjb20tPmJfc2l6ZSAhPSBzaXplb2Yodm9pZCAqKSkpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJDT00gUG9pbnRlciBleHBlY3RlZCBpbnN0ZWFkIG9mICVzIGluc3RhbmNlIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocGNvbSktPnRwX25hbWUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoKCoodm9pZCAqKikocGNvbS0+Yl9wdHIpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBDT00gJ3RoaXMnIHBvaW50ZXIgaXMgTlVMTCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBwSXVuayA9IChJVW5rbm93biAqKSgqKHZvaWQgKiopKHBjb20tPmJfcHRyKSk7Ci0gICAgbHBWdGJsID0gKFBQUk9DICopKHBJdW5rLT5scFZ0YmwpOwotCi0gICAgcmVzdWx0ID0gIF9jdHlwZXNfY2FsbHByb2MobHBWdGJsW2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKLSNpZmRlZiBNU19XSU4zMgotICAgICAgICAgICAgICAgICAgICAgICAgcEl1bmssCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBGVU5DRkxBR19IUkVTVUxULCAvKiBmbGFncyAqLwotICAgICAgICAgICAgICAgIGFyZ3R5cGVzLCAvKiBzZWxmLT5hcmd0eXBlcyAqLwotICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KLSAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBjaGFyIGNvcHlfY29tX3BvaW50ZXJfZG9jW10gPQogIkNvcHlDb21Qb2ludGVyKHNyYywgZHN0KSAtPiBIUkVTVUxUIHZhbHVlXG4iOwogCkBAIC0xNDg5LDkgKzE0MzMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgRlVOQ0ZMQUdfQ0RFQ0wsIC8qIGZsYWdzICovCi0gICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+YXJndHlwZXMgKi8KLSAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5yZXN0eXBlICovCi0gICAgICAgICAgICAgICAgTlVMTCk7IC8qIGNoZWNrZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPmFyZ3R5cGVzICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5yZXN0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4MjIsNyArMTc2Niw2IEBACiAgICAgeyJGb3JtYXRFcnJvciIsIGZvcm1hdF9lcnJvciwgTUVUSF9WQVJBUkdTLCBmb3JtYXRfZXJyb3JfZG9jfSwKICAgICB7IkxvYWRMaWJyYXJ5IiwgbG9hZF9saWJyYXJ5LCBNRVRIX1ZBUkFSR1MsIGxvYWRfbGlicmFyeV9kb2N9LAogICAgIHsiRnJlZUxpYnJhcnkiLCBmcmVlX2xpYnJhcnksIE1FVEhfVkFSQVJHUywgZnJlZV9saWJyYXJ5X2RvY30sCi0gICAgeyJjYWxsX2NvbW1ldGhvZCIsIGNhbGxfY29tbWV0aG9kLCBNRVRIX1ZBUkFSR1MgfSwKICAgICB7Il9jaGVja19IUkVTVUxUIiwgY2hlY2tfaHJlc3VsdCwgTUVUSF9WQVJBUkdTfSwKICNlbHNlCiAgICAgeyJkbG9wZW4iLCBweV9kbF9vcGVuLCBNRVRIX1ZBUkFSR1MsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKaW5kZXggNzlkNjBmMy4uMjA3ODI5MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKICAgICB9CiAgIGVycm9yOgogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJvbmUgY2hhcmFjdGVyIHN0cmluZyBleHBlY3RlZCIpOworICAgICAgICAgICAgICAgICAib25lIGNoYXJhY3RlciBieXRlcywgYnl0ZWFycmF5IG9yIGludGVnZXIgZXhwZWN0ZWQiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTI5NSw3ICsxMjk1LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHN0cmluZywgJXMgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGJ5dGVzLCAlcyBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+b2JfdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEzMTEsNyArMTMxMSw3IEBACiAgICAgICAgICsrc2l6ZTsKICAgICB9IGVsc2UgaWYgKHNpemUgPiBsZW5ndGgpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nICglemQsIG1heGltdW0gbGVuZ3RoICV6ZCkiLAorICAgICAgICAgICAgICAgICAgICAgImJ5dGVzIHRvbyBsb25nICglemQsIG1heGltdW0gbGVuZ3RoICV6ZCkiLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgbGVuZ3RoKTsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmggYi9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmgKaW5kZXggNTIzN2FjMi4uYWM4MzQxZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2N0eXBlcy5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaApAQCAtMzU3LDYgKzM1Nyw5IEBACiAKIGV4dGVybiBQeU9iamVjdCAqUHlDRGF0YV9Gcm9tQmFzZU9iaihQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2UsIFB5X3NzaXplX3QgaW5kZXgsIGNoYXIgKmFkcik7CiBleHRlcm4gY2hhciAqX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KTsKK2V4dGVybiBjaGFyICpfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmdfd2l0aF9zaGFwZShpbnQgbmRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB5X3NzaXplX3QgKnNoYXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpOwogCiBleHRlcm4gaW50IF9jdHlwZXNfc2ltcGxlX2luc3RhbmNlKFB5T2JqZWN0ICpvYmopOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYKaW5kZXggYWRlMjhlNS4uZmZhN2JhZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZgpAQCAtMSw4ICsxLDcgQEAKLWRpZmYgLXIgLU4gLXUgbGliZmZpLm9yaWcvYXV0b200dGUuY2FjaGUvb3V0cHV0LjAgbGliZmZpL2F1dG9tNHRlLmNhY2hlL291dHB1dC4wCi1kaWZmIC1yIC1OIC11IGxpYmZmaS5vcmlnL2NvbmZpZ3VyZSBsaWJmZmkvY29uZmlndXJlCi0tLS0gbGliZmZpLm9yaWcvY29uZmlndXJlCTIwMTMtMDMtMTcgMTU6Mzc6NTAuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliZmZpL2NvbmZpZ3VyZQkyMDEzLTAzLTE4IDE1OjExOjM5LjYxMTU3NTE2MyAtMDcwMAotQEAgLTEzMzY4LDYgKzEzMzY4LDEwIEBACitkaWZmIC11ck4gbGliZmZpLTMuMS9jb25maWd1cmUgbGliZmZpL2NvbmZpZ3VyZQorLS0tIGxpYmZmaS0zLjEvY29uZmlndXJlCTIwMTQtMDUtMTkgMTU6NDQ6MDMuMDAwMDAwMDAwICswMjAwCisrKysgbGliZmZpL2NvbmZpZ3VyZQkyMDE0LTA4LTA5IDIxOjUxOjA3Ljg3Nzg3MTQ0MyArMDIwMAorQEAgLTE3MjM2LDYgKzE3MjM2LDEwIEBACiAgCWZpCiAgCTs7CiAgCkBAIC0xMywyMiArMTIsMjIgQEAKICAgIHg4Nl82NC0qLWRhcndpbiopCiAgCVRBUkdFVD1YODZfREFSV0lOOyBUQVJHRVRESVI9eDg2CiAgCTs7Ci1AQCAtMTM0MjYsMTIgKzEzNDMwLDEyIEBACitAQCAtMTcyOTgsMTIgKzE3MzAyLDEyIEBACiAgCTs7CiAgCiAgICBtaXBzLXNnaS1pcml4NS4qIHwgbWlwcy1zZ2ktaXJpeDYuKiB8IG1pcHMqLSotcnRlbXMqKQogLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKICsJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKICAJOzsKLSAgIG1pcHMqLSotbGludXgqIHwgbWlwcyotKi1vcGVuYnNkKikKKyAgIG1pcHMqLSpsaW51eCogfCBtaXBzKi0qLW9wZW5ic2QqKQogIAkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgogIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKIC0JVEFSR0VUPU1JUFM7IFRBUkdFVERJUj1taXBzCi0rCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCisrCVRBUkdFVD1NSVBTX0xJTlVYOyBUQVJHRVRESVI9bWlwcwogIAk7OwogIAotICAgcG93ZXJwYyotKi1saW51eCogfCBwb3dlcnBjLSotc3lzdiopCi1AQCAtMTM0OTEsNyArMTM0OTUsNyBAQAorICAgbmlvczIqLWxpbnV4KikKK0BAIC0xNzM3Myw3ICsxNzM3Nyw3IEBACiAgICBhc19mbl9lcnJvciAkPyAiXCJsaWJmZmkgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byAkaG9zdC5cIiIgIiRMSU5FTk8iIDUKICBmaQogIApAQCAtMzcsNyArMzYsNyBAQAogICAgTUlQU19UUlVFPQogICAgTUlQU19GQUxTRT0nIycKICBlbHNlCi1AQCAtMTQ4NjIsNiArMTQ4NjYsMTIgQEAKK0BAIC0xODgxNCw2ICsxODgxOCwxMiBAQAogIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvZmZpLmggTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlIG1hbi9NYWtlZmlsZSBsaWJmZmkucGMiCiAgCiAgCkBAIC01MCw3ICs0OSw3IEBACiAgY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCiAgIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCiAgIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCi1AQCAtMTYwNDcsNiArMTYwNTcsOCBAQAorQEAgLTIwMTI2LDYgKzIwMTM2LDggQEAKICAgICAgInRlc3RzdWl0ZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0c3VpdGUvTWFrZWZpbGUiIDs7CiAgICAgICJtYW4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbWFuL01ha2VmaWxlIiA7OwogICAgICAibGliZmZpLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYmZmaS5wYyIgOzsKQEAgLTU5LDkgKzU4LDkgQEAKICAKICAgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwogICAgZXNhYwotZGlmZiAtciAtTiAtdSBsaWJmZmkub3JpZy9jb25maWd1cmUuYWMgbGliZmZpL2NvbmZpZ3VyZS5hYwotLS0tIGxpYmZmaS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEzLTAzLTE3IDE1OjM3OjUwLjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmZmaS9jb25maWd1cmUuYWMJMjAxMy0wMy0xOCAxNToxMToxMS4zOTI5ODkxMzYgLTA3MDAKK2RpZmYgLXVyTiBsaWJmZmktMy4xL2NvbmZpZ3VyZS5hYyBsaWJmZmkvY29uZmlndXJlLmFjCistLS0gbGliZmZpLTMuMS9jb25maWd1cmUuYWMJMjAxNC0wNS0xMSAxNTo1Nzo0OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJmZmkvY29uZmlndXJlLmFjCTIwMTQtMDgtMDkgMjE6NTE6MDcuODc3ODcxNDQzICswMjAwCiBAQCAtMSw0ICsxLDcgQEAKICBkbmwgUHJvY2VzcyB0aGlzIHdpdGggYXV0b2NvbmYgdG8gY3JlYXRlIGNvbmZpZ3VyZQogKyMKQEAgLTcwLDMzICs2OSwzMiBAQAogIAogIEFDX1BSRVJFUSgyLjY4KQogIAotQEAgLTE0Niw2ICsxNDksMTAgQEAKLSAJZmkJICAKK0BAIC0xNDQsNiArMTQ3LDkgQEAKKyAJICBBTV9MVExERkxBR1M9Jy1uby11bmRlZmluZWQgLWJpbmRpciAiJChiaW5kaXIpIic7CisgCWZpCiAgCTs7Ci0gCiArICBpKjg2LSotbnRvLXFueCopIAogKyAgICAgICAgVEFSR0VUPVg4NjsgVEFSR0VURElSPXg4NgogKyAgICAgICAgOzsKLSsKLSAgIHg4Nl82NC0qLWRhcndpbiopCisgICBpPzg2LSotZGFyd2luKikKICAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKICAJOzsKLUBAIC0yMDQsMTIgKzIxMSwxMiBAQAorQEAgLTIxOCwxMiArMjI0LDEyIEBACiAgCTs7CiAgCiAgICBtaXBzLXNnaS1pcml4NS4qIHwgbWlwcy1zZ2ktaXJpeDYuKiB8IG1pcHMqLSotcnRlbXMqKQogLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKICsJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKICAJOzsKLSAgIG1pcHMqLSotbGludXgqIHwgbWlwcyotKi1vcGVuYnNkKikKKyAgIG1pcHMqLSpsaW51eCogfCBtaXBzKi0qLW9wZW5ic2QqKQogIAkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgogIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKIC0JVEFSR0VUPU1JUFM7IFRBUkdFVERJUj1taXBzCi0rCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCisrCVRBUkdFVD1NSVBTX0xJTlVYOyBUQVJHRVRESVI9bWlwcwogIAk7OwogIAotICAgcG93ZXJwYyotKi1saW51eCogfCBwb3dlcnBjLSotc3lzdiopCi1AQCAtMjY5LDcgKzI3Niw3IEBACisgICBuaW9zMiotbGludXgqKQorQEAgLTI5Myw3ICsyOTksNyBAQAogICAgQUNfTVNHX0VSUk9SKFsibGliZmZpIGhhcyBub3QgYmVlbiBwb3J0ZWQgdG8gJGhvc3QuIl0pCiAgZmkKICAKQEAgLTEwNSw3ICsxMDMsNyBAQAogIEFNX0NPTkRJVElPTkFMKEJGSU4sIHRlc3QgeCRUQVJHRVQgPSB4QkZJTikKICBBTV9DT05ESVRJT05BTChTUEFSQywgdGVzdCB4JFRBUkdFVCA9IHhTUEFSQykKICBBTV9DT05ESVRJT05BTChYODYsIHRlc3QgeCRUQVJHRVQgPSB4WDg2KQotQEAgLTU2Nyw0ICs1NzQsOCBAQAorQEAgLTYxNyw0ICs2MjMsOCBAQAogIAogIEFDX0NPTkZJR19GSUxFUyhpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvZmZpLmggTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlIG1hbi9NYWtlZmlsZSBsaWJmZmkucGMpCiAgCkBAIC0xMTQsMTkgKzExMiwxOSBAQAogK0FDX0NPTkZJR19GSUxFUyhmZmljb25maWcucHkpCiArCiAgQUNfT1VUUFVUCi0tLS0gbGliZmZpLTMuMC4xMS9mZmljb25maWcucHkuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBsaWJmZmkvZmZpY29uZmlnLnB5LmluCTIwMTItMDMtMTUgMDE6MDQ6MjcuMDAwMDAwMDAwICswMTAwCitkaWZmIC11ck4gbGliZmZpLTMuMS9mZmljb25maWcucHkuaW4gbGliZmZpL2ZmaWNvbmZpZy5weS5pbgorLS0tIGxpYmZmaS0zLjEvZmZpY29uZmlnLnB5LmluCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgbGliZmZpL2ZmaWNvbmZpZy5weS5pbgkyMDE0LTA4LTA5IDIxOjQzOjI1LjIyOTg3MTgyNyArMDIwMAogQEAgLTAsMCArMSwzNSBAQAogK2ZmaV9zb3VyY2VzID0gIiIiCiArc3JjL3ByZXBfY2lmLmMKICtzcmMvY2xvc3VyZXMuYwotK3NyYy9kbG1hbGxvYy5jCiArIiIiLnNwbGl0KCkKICsKICtmZmlfcGxhdGZvcm1zID0gewogKyAgICAnTUlQU19JUklYJzogWydzcmMvbWlwcy9mZmkuYycsICdzcmMvbWlwcy9vMzIuUycsICdzcmMvbWlwcy9uMzIuUyddLAogKyAgICAnTUlQU19MSU5VWCc6IFsnc3JjL21pcHMvZmZpLmMnLCAnc3JjL21pcHMvbzMyLlMnXSwKLSsgICAgJ1g4Nic6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L3N5c3YuUyddLAorKyAgICAnWDg2JzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvc3lzdi5TJywgJ3NyYy94ODYvd2luMzIuUyddLAogKyAgICAnWDg2X0ZSRUVCU0QnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9mcmVlYnNkLlMnXSwKICsgICAgJ1g4Nl9XSU4zMic6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L3dpbjMyLlMnXSwKICsgICAgJ1NQQVJDJzogWydzcmMvc3BhcmMvZmZpLmMnLCAnc3JjL3NwYXJjL3Y4LlMnLCAnc3JjL3NwYXJjL3Y5LlMnXSwKQEAgLTEzNCw5ICsxMzIsMTAgQEAKICsgICAgJ0lBNjQnOiBbJ3NyYy9pYTY0L2ZmaS5jJywgJ3NyYy9pYTY0L3VuaXguUyddLAogKyAgICAnTTMyUic6IFsnc3JjL20zMnIvc3lzdi5TJywgJ3NyYy9tMzJyL2ZmaS5jJ10sCiArICAgICdNNjhLJzogWydzcmMvbTY4ay9mZmkuYycsICdzcmMvbTY4ay9zeXN2LlMnXSwKLSsgICAgJ1BPV0VSUEMnOiBbJ3NyYy9wb3dlcnBjL2ZmaS5jJywgJ3NyYy9wb3dlcnBjL3N5c3YuUycsICdzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TJywgJ3NyYy9wb3dlcnBjL2xpbnV4NjQuUycsICdzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyddLAorKyAgICAnUE9XRVJQQyc6IFsnc3JjL3Bvd2VycGMvZmZpLmMnLCAnc3JjL3Bvd2VycGMvZmZpX3N5c3YuYycsICdzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jJywgJ3NyYy9wb3dlcnBjL3N5c3YuUycsICdzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TJywgJ3NyYy9wb3dlcnBjL2xpbnV4NjQuUycsICdzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyddLAogKyAgICAnUE9XRVJQQ19BSVgnOiBbJ3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYycsICdzcmMvcG93ZXJwYy9haXguUycsICdzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TJ10sCiArICAgICdQT1dFUlBDX0ZSRUVCU0QnOiBbJ3NyYy9wb3dlcnBjL2ZmaS5jJywgJ3NyYy9wb3dlcnBjL3N5c3YuUycsICdzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TJ10sCisrICAgICdBQVJDSDY0JzogWydzcmMvYWFyY2g2NC9zeXN2LlMnLCAnc3JjL2FhcmNoNjQvZmZpLmMnXSwKICsgICAgJ0FSTSc6IFsnc3JjL2FybS9zeXN2LlMnLCAnc3JjL2FybS9mZmkuYyddLAogKyAgICAnTElCRkZJX0NSSVMnOiBbJ3NyYy9jcmlzL3N5c3YuUycsICdzcmMvY3Jpcy9mZmkuYyddLAogKyAgICAnRlJWJzogWydzcmMvZnJ2L2VhYmkuUycsICdzcmMvZnJ2L2ZmaS5jJ10sCkBAIC0xNTIsOSArMTUxLDkgQEAKICtmZmlfc291cmNlcyArPSBmZmlfcGxhdGZvcm1zWydAVEFSR0VUQCddCiArCiArZmZpX2NmbGFncyA9ICdAQ0ZMQUdTQCcKLWRpZmYgLXVyTiBsaWJmZmktMy4wLjExL3NyYy9kbG1hbGxvYy5jIGxpYmZmaS9zcmMvZGxtYWxsb2MuYwotLS0tIGxpYmZmaS0zLjAuMTEvc3JjL2RsbWFsbG9jLmMJMjAxMi0wNC0xMiAwNDo0NjowNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBsaWJmZmkvc3JjL2RsbWFsbG9jLmMJMjAxMi0wNi0yNiAxNToxNTo1OC45NDk1NDc0NjEgKzAyMDAKK2RpZmYgLXVyTiBsaWJmZmktMy4xL3NyYy9kbG1hbGxvYy5jIGxpYmZmaS9zcmMvZGxtYWxsb2MuYworLS0tIGxpYmZmaS0zLjEvc3JjL2RsbWFsbG9jLmMJMjAxNC0wNC0yNSAxOTo0NToxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJmZmkvc3JjL2RsbWFsbG9jLmMJMjAxNC0wOC0wOSAyMTo1MTowNy44ODE4NzE0NDMgKzAyMDAKIEBAIC00NTcsNiArNDU3LDExIEBACiAgI2RlZmluZSBMQUNLU19FUlJOT19ICiAgI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KQEAgLTE2NywzICsxNjYsNDQgQEAKICAjZW5kaWYgIC8qIFdJTjMyICovCiAgCiAgI2lmZGVmIF9fT1MyX18KK0BAIC00NDk3LDcgKzQ1MDIsNyBAQAorICAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOworLSAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKKysgICAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBJU19NTUFQUEVEX0JJVCk7CisgICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgICAgfQorICAgfQorQEAgLTQ1MTIsNyArNDUxNyw3IEBACisgICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKKyAgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7CistICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOworKyAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBFWFRFUk5fQklUKTsKKyAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgIH0KKyAgIHJldHVybiAobXNwYWNlKW07CitkaWZmIC11ck4gbGliZmZpLTMuMS9zcmMvYXJtL2ZmaS5jIGxpYmZmaS9zcmMvYXJtL2ZmaS5jCistLS0gbGliZmZpLTMuMS9zcmMvYXJtL2ZmaS5jCVNhdCBBdWcgMDkgMjM6NTI6MzQgMjAxNCArMDIwMAorKysrIGxpYmZmaS9zcmMvYXJtL2ZmaS5jCVNhdCBBdWcgMDkgMjM6NTg6MzggMjAxNCArMDIwMAorQEAgLTE1NCw5ICsxNTQsNiBAQAorIAorIGludCBmZmlfcHJlcF9hcmdzX1ZGUChjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmLCBmbG9hdCAqdmZwX3NwYWNlKQorIHsKKy0gIC8vIG1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgRkZJX1ZGUAorLSAgRkZJX0FTU0VSVChlY2lmLT5jaWYtPmFiaSA9PSBGRklfVkZQKTsKKy0KKyAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpLCB2aSA9IDA7CisgICByZWdpc3RlciB2b2lkICoqcF9hcmd2OworICAgcmVnaXN0ZXIgY2hhciAqYXJncCwgKnJlZ3AsICplb19yZWdwOworQEAgLTE2NSw2ICsxNjIsOSBAQAorICAgY2hhciBkb25lX3dpdGhfcmVncyA9IDA7CisgICBjaGFyIGlzX3ZmcF90eXBlOworIAorKyAgLy8gbWFrZSBzdXJlIHdlIGFyZSB1c2luZyBGRklfVkZQCisrICBGRklfQVNTRVJUKGVjaWYtPmNpZi0+YWJpID09IEZGSV9WRlApOworKworICAgLyogdGhlIGZpcnN0IDQgd29yZHMgb24gdGhlIHN0YWNrIGFyZSB1c2VkIGZvciB2YWx1ZXMgcGFzc2VkIGluIGNvcmUKKyAgICAqIHJlZ2lzdGVycy4gKi8KKyAgIHJlZ3AgPSBzdGFjazsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvLmdpdGlnbm9yZSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmNzZhYy4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0ubGlicwotLmRlcHMKLSoubwotKi5sbwotLmRpcnN0YW1wCi0qLmxhCi1NYWtlZmlsZQotY29uZmlnLmxvZwotY29uZmlnLnN0YXR1cwotKn4KLWZmaWNvbmZpZy5oCi1pbmNsdWRlL2ZmaS5oCi1pbmNsdWRlL2ZmaXRhcmdldC5oCi1saWJmZmkucGMKLWxpYnRvb2wKLXN0YW1wLWgxCi1saWJmZmkqZ3oKLWF1dG9tNHRlLmNhY2hlCi1saWJmZmkueGNvZGVwcm9qL3hjdXNlcmRhdGEKLWxpYmZmaS54Y29kZXByb2ovcHJvamVjdC54Y3dvcmtzcGFjZQotaW9zLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS8udHJhdmlzLnltbCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvLnRyYXZpcy55bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNmE0MjUuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS8udHJhdmlzLnltbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbGFuZ3VhZ2U6IGMKLWNvbXBpbGVyOgotICAtIGdjYwotICAtIGNsYW5nCi0KLWJlZm9yZV9zY3JpcHQ6IHN1ZG8gYXB0LWdldCBpbnN0YWxsIGRlamFnbnUKLQotc2NyaXB0OiAuL2NvbmZpZ3VyZSAmJiBtYWtlICYmIG1ha2UgY2hlY2sKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cKaW5kZXggZTBiMDU3Yy4uYzg1Y2JlNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cKQEAgLTEsNTUwOSArMSw1MTA1IEBACi0yMDEzLTAzLTE3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgMDQwM2YzMzJiMWY0Nzg2OTZjMzBkM2Q4YTBlMmY2ZWVmMjRhYWY4OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE1heSAxOSAwOTo0MTozMiAyMDE0IC0wNDAwCiAKLQkqIFJFQURNRTogVXBkYXRlIGZvciAzLjAuMTMuCi0JKiBjb25maWd1cmUuYWM6IERpdHRvLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogZG9jLyo6IFVwZGF0ZSB2ZXJzaW9uLgorICAgIFVwZGF0ZSBkYXRlLiBBbm5vdWNpbmcgMy4xIHRvZGF5LgogCi0yMDEzLTAzLTE3ICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KK2NvbW1pdCA5NGFjMGMxNjhlZTdiMTE1NDA5MTIxZDg4YjI1YTQ5Nzk0NDZjOGRhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gTWF5IDE5IDA5OjM3OjIxIDIwMTQgLTA0MDAKIAotCSogc3JjL2Nsb3N1cmVzLmMgKGlzX2VtdXRyYW1wX2VuYWJsZWQKLQlbIUZGSV9NTUFQX0VYRUNfRU1VVFJBTVBfUEFYXSk6IE1vdmUgZGVmYXVsdCBkZWZpbml0aW9uIG91dHNpZGUKLQllbmNsb3NpbmcgI2lmIHNjb3BlLgorICAgIEluY3JlbWVudCBsaWJ0b29sIGxpYnJhcnkgcmV2aXNpb24gbnVtYmVyCiAKLTIwMTMtMDMtMTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA1NzQ2NTc0NGI2ZTEyOTVkNzIwMmRlNWE3NzM0ZGY1ODk1MThmMWM4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWF5IDExIDEwOjMwOjIyIDIwMTQgLTA0MDAKIAotCSogY29uZmlndXJlLmFjOiBPbmx5IG1vZGlmeSB0b29sZXhlY2RpciBpbiBjZXJ0YWluIGNhc2VzLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIFVwZGF0ZSB0byB2ZXJzaW9uIDMuMQogCi0yMDEzLTAzLTE2ICBHaWxsZXMgVGFsaXMgIDxnaWxsZXMudGFsaXNAZ21haWwuY29tPgorY29tbWl0IDBjMjI1MWE0MmRmNTEwOGI2ZDllYmU1ZmUxY2Y4M2QwYmNkZjY2MGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXkgMTEgMTA6MjI6MzAgMjAxNCAtMDQwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogRG9uJ3QgdXNlCi0JZnBhcmdfY291bnQsZXRjIG9uIF9fTk9fRlBSU19fIHRhcmdldHMuCisgICAgU3VwcG9ydCB2ZXJzaW9ucyBvZiBnaXQgb2xkZXIgdGhhbiAxLjguNQogCi0yMDEzLTAzLTE2ICBBbGFuIEhvdXJpaGFuZSAgPGFsYW5oQGZhaXJsaXRlLmNvLnVrPgorY29tbWl0IDcwYzMwM2NiODhlMjNhYWVlOTFjODdjNTZiMTA4YzUwYWI0ZjNjMmYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXkgMTEgMDk6NTY6NDAgMjAxNCAtMDQwMAogCi0JKiBzcmMvbTY4ay9zeXN2LlMgKGVwaWxvZ3VlKTogRG9uJ3QgdXNlIGV4dGIgaW5zdHJ1Y3Rpb24gb24KLQltNjgwMDAwIG1hY2hpbmVzLgorICAgIEZpeCB0ZXN0c3VpdGUgZm9yIEdDQyA0LjkuMAogCi0yMDEzLTAzLTE2ICBBbGV4IEdheW5vciA8YWxleC5nYXlub3JAZ21haWwuY29tPgorY29tbWl0IDUyYjM0NTcwOTNlZDE5YjJhN2M1ZmNmMjQzYzQwMTRjOTBjZTYyMjUKK0F1dGhvcjogTWFnbnVzIEdyYW5iZXJnIDx6b3JyeUBnZW50b28ub3JnPgorRGF0ZTogICBTdW4gTWF5IDExIDA5OjU1OjI4IDIwMTQgLTA0MDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBbHdheXMgYWxpZ24gc3RhY2suCisgICAgQ2hlY2sgL3Byb2Mvc2VsZi9zdGF0dXMgZm9yIFBhWCBzdGF0dXMuCiAKLTIwMTMtMDMtMTMgIE1hcmtvcyBDaGFuZHJhcyA8bWFya29zLmNoYW5kcmFzQGltZ3RlYy5jb20+Citjb21taXQgN2JhNGM1ZDcyYWE0NDBhNGIyMWZiNTdlOTk5ZTY3YzU5NTc3NjFkYQorQXV0aG9yOiBEb21pbmlrIFZvZ3QgPGRvbWluaWsudm9ndEBnbXguZGU+CitEYXRlOiAgIFN1biBNYXkgMTEgMDk6NTI6NDcgMjAxNCAtMDQwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBzdXBwb3J0IGZvciBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTWV0YS4KLQkqIE1ha2VmaWxlLmFtOiBMaWtld2lzZS4KLQkqIFJFQURNRTogQWRkIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBNZXRhIGRldGFpbHMuCi0JKiBzcmMvbWV0YWcvZmZpLmM6IE5ldy4KLQkqIHNyYy9tZXRhZy9mZml0YXJnZXQuaDogTGlrZXdpc2UuCi0JKiBzcmMvbWV0YWcvc3lzdi5TOiBMaWtld2lzZS4KKyAgICBVc2UgdG8gZ2V0IGNvcnJlY3QgZGlyCiAKLTIwMTMtMDItMjQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGxpbnV4LW02OGsub3JnPgorY29tbWl0IDMxZTBkNGVjZmY2ZGMyYTZjNzVhMDY2ZWUwOTliNTJhNDNmNmJhMjcKK01lcmdlOiAxYzBlOWE3IDk5OTA5ZWIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBBcHIgMjMgMTk6MjQ6NDcgMjAxNCAtMDQwMAogCi0JKiBkb2MvbGliZmZpLnRleGkgKFN0cnVjdHVyZXMpOiBGaXggbWlzc2luZyBjYXRlZ29yeSBhcmd1bWVudCBvZgotCUBkZWZ0cC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzExOSBmcm9tIGpvc2h0cmlwbGV0dC9mYXN0Y2FsbC1mYXN0YmFsbAorICAgIAorICAgIHNyYy94ODYvd2luMzIuUzogRGVmaW5lIGZmaV9jbG9zdXJlX0ZBU1RDQUxMIGluIHRoZSBNQVNNIHNlY3Rpb24sIHRvbwogCi0yMDEzLTAyLTExICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA5OTkwOWViNjE4NGI2MjQwOGQ4OGI2YjRlN2FiMzhlODRlNmQwYmYzCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgVHVlIEFwciAyMiAyMToxNzo1MiAyMDE0IC0wNzAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIHJlbGVhc2UgbnVtYmVyIHRvIDMuMC4xMi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIFJFQURNRTogVXBkYXRlIHJlbGVhc2UgaW5mby4KKyAgICBzcmMveDg2L3dpbjMyLlM6IERlZmluZSBmZmlfY2xvc3VyZV9GQVNUQ0FMTCBpbiB0aGUgTUFTTSBzZWN0aW9uLCB0b28KIAotMjAxMy0wMi0xMCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgMWMwZTlhNzI5N2NlZDE1NDEzYzJkMmQ1ZDM1ZjZjNjUwYzRiNDZjOQorTWVyZ2U6IDkzYTI0ZjIgZDM2OTUyMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEFwciAyMSAxMjo0MTo1NiAyMDE0IC0wNDAwCiAKLQkqIFJFQURNRTogQWRkIE1veGllLgotCSogc3JjL21veGllL2ZmaS5jOiBDcmVhdGVkLgotCSogc3JjL21veGllL2VhYmkuUzogQ3JlYXRlZC4KLQkqIHNyYy9tb3hpZS9mZml0YXJnZXQuaDogQ3JlYXRlZC4KLQkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgTW94aWUuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5hYzogQWRkIE1veGllLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IERpc2FibGUgZm9ybWF0IHN0cmluZwotCXdhcm5pbmdzIGZvciBtb3hpZSotKi1lbGYgdGVzdHMuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMDEgZnJvbSBqb3NodHJpcGxldHQvZmFzdGNhbGwtY2xvc3VyZXMKKyAgICAKKyAgICBTdXBwb3J0IGNsb3N1cmVzIGZvciBmYXN0Y2FsbAogCi0yMDEzLTAyLTEwICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBkMzY5NTIyNzNkNGZhZmJkYTkxZWNjMjA1ZmMwODI0ZjdjYzY1ZTcwCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIEFwciAyMCAxMjowMzoyNSAyMDE0IC0wNzAwCiAKLQkqIE1ha2VmaWxlLmFtIChMVExERkxBR1MpOiBGaXggcmVmZXJlbmNlLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgU3VwcG9ydCBmYXN0Y2FsbCBjbG9zdXJlcworICAgIAorICAgIGxpYmZmaSBvbiAzMi1iaXQgeDg2IG5vdyBzdXBwb3J0cyBjbG9zdXJlcyBmb3IgYWxsIHN1cHBvcnRlZCBBQklzLgorICAgIFRodXMsIHJld3JpdGUgdGhlIGxhc3QgcmVtYWluaW5nIGR1cGxpY2F0ZWQtYnktQUJJIHRlc3QgKGNsb3N1cmVfc3RkY2FsbAorICAgIGFuZCBjbG9zdXJlX3RoaXNjYWxsKSB0byB1c2UgdGhlIGdlbmVyaWMgQUJJX05VTS9BQklfQVRUUiBtZWNoYW5pc20uCiAKLTIwMTMtMDItMTAgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDkzYTI0ZjIxNmJjZGQxMDE4Yjk3NmQ2OTcxNzljNmQ0OTAwNDAxNWEKK01lcmdlOiBkZDExYTA0IDIzNDlmZWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBBcHIgMTIgMTk6Mzg6MDcgMjAxNCAtMDQwMAogCi0JKiBSRUFETUU6IFVwZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zLiAgVXBkYXRlIHRlc3QgcmVzdWx0cyBsaW5rLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjODAgZnJvbSB1ZW5vL2RldmVsCisgICAgCisgICAgRml4IHR5cG8gaW4gZG9jCiAKLTIwMTMtMDItMDkgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGRkMTFhMDQwNjFjYjQ5Y2UxZDcwMjU0NTY5M2MyNGViMTI2N2Q2NDgKK01lcmdlOiA4ZmEyODEyIDAzY2E4ODAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBBcHIgMTIgMTk6Mzc6MjEgMjAxNCAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmM6IFJlbW92ZSBmb3JjZWQgLU8yLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyLmMgKGZvbyk6IFJlbW92ZSBHQ0Npc20uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgZGVmYXVsdCBQUkl1UFRSIGRlZmluaXRpb24uCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM4NiBmcm9tIGpvc2h0cmlwbGV0dC90ZXN0c3VpdGUtQ0MtQ1hYCisgICAgCisgICAgdGVzdHN1aXRlIGlnbm9yZXMgQ0MgcGFyYW1ldGVyIHN1cHBsaWVkIHRvIGNvbmZpZ3VyZSBvciBtYWtlCiAKLQkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2xvc3VyZV92OCk6IEltcG9ydCBhbmNpZW50IHVsb25nbG9uZwotCWNsb3N1cmUgcmV0dXJuIHR5cGUgZml4IGRldmVsb3BlZCBieSBNYXJ0aW4gdi4gTMO2d2lzIGZvciBjcHl0aG9uCi0JZm9yay4KK2NvbW1pdCA4ZmEyODEyMzU1ZTY4NWE0MmFiZjlhNjJmYmM2NzRkNjE2YjJlZGVlCitNZXJnZTogOGE1OGU2YiA0MTk1MDNmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgQXByIDEyIDE5OjMyOjA4IDIwMTQgLTA0MDAKIAotMjAxMy0wMi0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhbmRyZWFzdEBmZ3puZXQuY2g+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMTYgZnJvbSBmcmlkYS9maXgvZGFyd2luLWFhcmNoNjQtdmFyaWFkaWMKKyAgICAKKyAgICBGaXggaGFuZGxpbmcgb2YgdmFyaWFkaWMgY2FsbHMgb24gRGFyd2luL0FBcmNoNjQKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IHNtYWxsIHN0cnVjdAotCXN1cHBvcnQuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IERpdHRvLgorY29tbWl0IDhhNThlNmI3ODA1YjczNmRlZjE5N2I4YmFmOGU0NjVhMmEzZjY5MTMKK01lcmdlOiAzMGI3N2M1IGE1MzlmN2YKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBBcHIgMTIgMTk6MzA6MTggMjAxNCAtMDQwMAogCi0yMDEzLTAyLTA4ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzExNSBmcm9tIGZyaWRhL2ZpeC9kYXJ3aW4tYWFyY2g2NC1hbGlnbm1lbnQKKyAgICAKKyAgICBGaXggYWxpZ25tZW50IG9mIEFBcmNoNjQgYXNzZW1ibGVyIGZ1bmN0aW9ucwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYzogUmVtb3ZlIHhmYWlsIGZvcgotCWFybSotKi0qLgorY29tbWl0IDMwYjc3YzU2Zjk1YzYzZWNkODMzOTlhYWZkYmFkN2IwNzMzMGYyZmQKK01lcmdlOiBkYzMzY2IzIDNlMmI4NGQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBBcHIgMTIgMTk6Mjk6MTMgMjAxNCAtMDQwMAogCi0yMDEzLTAyLTA4ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzExNyBmcm9tIGZyaWRhL2ZpeC93aW5kb3dzLXJlZ3Jlc3Npb24KKyAgICAKKyAgICBGaXggV2luZG93cyByZWdyZXNzaW9uCiAKLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggY2FjaGUgZmx1c2hpbmcgZm9yIEdDQy4KK2NvbW1pdCAzZTJiODRkMjk1NTMxNzIwOTE3YmY0NmFmYzUzMmZjNmQ4NzdlM2VjCitBdXRob3I6IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0aWxsaXRlY2guY29tPgorRGF0ZTogICBTYXQgQXByIDEyIDAxOjA0OjA0IDIwMTQgKzAyMDAKIAotMjAxMy0wMi0wOCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisgICAgRml4IFdpbmRvd3MgcmVncmVzc2lvbgorICAgIAorICAgIEludHJvZHVjZWQgYnkgYjVmZWQ2MDE5NDgyMzcwMzc1MTNhOWI3Zjk2N2M4ZmM2YzlmZjFmNi4KIAotCSogbWFuL2ZmaV9wcmVwX2NpZi4zOiBDbGVhbiB1cCBmb3IgZGViaWFuIGxpbnRlci4KK2NvbW1pdCA0MTk1MDNmNDA5YzMyMWZlMzFmZjU5ZDk2M2VmMzRiYjkxMzQyMGQwCitBdXRob3I6IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0aWxsaXRlY2guY29tPgorRGF0ZTogICBTdW4gQXByIDYgMjA6NTQ6MTMgMjAxNCArMDIwMAogCi0yMDEzLTAyLTA4ICBQZXRlciBCZXJnbmVyICA8YmVyZ25lckB2bmV0LmlibS5jb20+CisgICAgRml4IGhhbmRsaW5nIG9mIHZhcmlhZGljIGNhbGxzIG9uIERhcndpbi9BQXJjaDY0CiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBBY2NvdW50IGZvciBGUCBhcmdzIHB1c2hlZAotCW9uIHRoZSBzdGFjay4KK2NvbW1pdCBhNTM5ZjdmZmQ2NzgzYWExMTM1M2QxMzI2NTUyMGU0NTNjNTY1ZmI0CitBdXRob3I6IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0aWxsaXRlY2guY29tPgorRGF0ZTogICBTdW4gQXByIDYgMjA6NTM6MDIgMjAxNCArMDIwMAogCi0yMDEzLTAyLTA4ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBGaXggYWxpZ25tZW50IG9mIEFBcmNoNjQgYXNzZW1ibGVyIGZ1bmN0aW9ucwogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBtaXNzaW5nIGZpbGVzLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogRGl0dG8uCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCBkYzMzY2IzYzk5OGRhNTIxYTk2MDM4NWMxMjY5YzNhZWY1NTJmNjlmCitNZXJnZTogYzg2MGE5OSBiNWZlZDYwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgQXByIDUgMjM6NDE6MjIgMjAxNCAtMDQwMAogCi0yMDEzLTAyLTA4ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzExNCBmcm9tIGpvc2h0cmlwbGV0dC9ib3VuY2Utb24tYS10aW55LXRyYW1wb2xpbmUKKyAgICAKKyAgICBGaXggQUJJIG9uIDMyLWJpdCBub24tV2luZG93cyB4ODY6IGdvIGJhY2sgdG8gdHJhbXBvbGluZSBzaXplIDEwCiAKLQkqIGNvbmZpZ3VyZS5hYzogTW92ZSBzcGFyYyBhc20gY29uZmlnIGNoZWNrcyB0byB3aXRoaW4gZnVuY3Rpb25zCi0JZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzdW4gdG9vbHMuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRmx1c2ggY2FjaGUgb24gdjkKLQlzeXN0ZW1zLgotCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9mbHVzaF9pY2FjaGUpOiBJbXBsZW1lbnQgYSBzcGFyYyB2OSBjYWNoZQotCWZsdXNoZXIuCitjb21taXQgYjVmZWQ2MDE5NDgyMzcwMzc1MTNhOWI3Zjk2N2M4ZmM2YzlmZjFmNgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFNhdCBBcHIgNSAxNzozMzo0MiAyMDE0IC0wNzAwCiAKLTIwMTMtMDItMDggIE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CisgICAgRml4IEFCSSBvbiAzMi1iaXQgbm9uLVdpbmRvd3MgeDg2OiBnbyBiYWNrIHRvIHRyYW1wb2xpbmUgc2l6ZSAxMAorICAgIAorICAgIFRoZSB0cmFtcG9saW5lIHNpemUgaXMgcGFydCBvZiB0aGUgQUJJLCBzbyBpdCBjYW5ub3QgY2hhbmdlLiAgTW92ZSB0aGUKKyAgICBsb2dpYyBmcm9tIHRoZSBzdGRjYWxsIGFuZCB0aGlzY2FsbCB0cmFtcG9saW5lcyB0byB0aGUgZnVuY3Rpb25zIHRoZXkKKyAgICBjYWxsLCB0byByZWR1Y2UgdGhlbSBib3RoIHRvIDEwIGJ5dGVzLgorICAgIAorICAgIFRoaXMgZHJvcHMgdGhlIHByZXZpb3VzbHkgYWRkZWQgc3VwcG9ydCBmb3IgcmF3IFRISVNDQUxMIGNsb3N1cmVzIG9uCisgICAgbm9uLVdpbmRvd3MuICAoTm9uLXJhdyBUSElTQ0FMTCBjbG9zdXJlcyBzdGlsbCB3b3JrLikKIAotCSogc3JjL21pY3JvYmxhemUvZmZpLmMgKGZmaV9jbG9zdXJlX2NhbGxfU1lTVik6IEZpeCBoYW5kbGluZyBvZgotCXNtYWxsIGJpZy1lbmRpYW4gc3RydWN0dXJlcy4KLQkoZmZpX3ByZXBfYXJncyk6IERpdHRvLgorY29tbWl0IDAzY2E4ODAwODFiMjJlZmFiMDliYTcyMjY4MjcwZjgzMDE3ZDNkN2IKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBUaHUgTWFyIDI3IDA4OjQ0OjM0IDIwMTQgLTA3MDAKIAotMjAxMy0wMi0wNyAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgUkVBRE1FOiBOb3RlIHRoZSB0ZXN0c3VpdGUgY2hhbmdlcyB0byByZXNwZWN0ICRDQyBhbmQgJENYWAogCi0JKiBzcmMvc3BhcmMvdjguUyAoZmZpX2NhbGxfdjgpOiBGaXggdHlwbyBmcm9tIGxhc3QgcGF0Y2gKLQkoZWZmZWN0aXZlbHkgaGlkaW5nIGZmaV9jYWxsX3Y4KS4KK2NvbW1pdCBkNzRkZjhjNWQ4YzY3MjJlY2I5MDhkYTk4Yzg2Y2M4ZTJjNzU1Yjg0CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgVGh1IE1hciAyNyAwMDo0NDoxMiAyMDE0IC0wNzAwCiAKLTIwMTMtMDItMDcgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIFJFQURNRTogVXBkYXRlIFdpbmRvd3MgZXhhbXBsZSB0byBzZXQgYm90aCBDQyBhbmQgQ1hYCiAKLQkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIGJ1ZyByZXBvcnRpbmcgYWRkcmVzcy4KLQkqIGNvbmZpZ3VyZS5pbjogUmVidWlsZC4KK2NvbW1pdCA3ZDY5ODEyNWIxZjA1MTczZjM2NTZhODk3NTVhMmViNTg4MTNiMDAyCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyNiAyMzoxNzo1NiAyMDE0IC0wNzAwCiAKLQkqIHNyYy9zcGFyYy92OC5TIChmZmlfZmx1c2hfaWNhY2hlKTogT3V0LW9mLWxpbmUgY2FjaGUgZmx1c2hlciBmb3IKLQlTdW4gY29tcGlsZXIuCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9jYWxsKTogUmVtb3ZlIHdhcm5pbmcuCi0JQ2FsbCBmZmlfZmx1c2hfaWNhY2hlIGZvciBub24tR0NDIGJ1aWxkcy4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBVc2UgZmZpX2ZsdXNoX2ljYWNoZS4KKyAgICBVc2UgdGhlIHByb3BlciBDKysgY29tcGlsZXIgdG8gcnVuIEMrKyB0ZXN0cworICAgIAorICAgIFJ1bm5pbmcgdGhlIEMgY29tcGlsZXIgd2l0aCAtc2hhcmVkLWxpYmdjYyAtbHN0ZGMrKyBkb2VzIG5vdCB3b3JrIG9uCisgICAgbm9uLUdDQyBjb21waWxlcnMuCiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGxpYnRvb2wtbGRmbGFncy4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogbGlidG9vbC1sZGZsYWdzOiBOZXcgZmlsZS4KK2NvbW1pdCBmYTVlODhmMTcwY2IzN2M3YjJiOWJiMDE1YzhjNWI4NTRmZmQ4YTNlCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyNiAyMzo1Mzo1NyAyMDE0IC0wNzAwCiAKLTIwMTMtMDItMDcgIERhbmllbCBTY2hlcGxlciA8ZHNjaGVwbGVyQGdtYWlsLmNvbT4KKyAgICAudHJhdmlzLnltbDogTWFrZSB0aGUgYnVpbGQgY29tbWFuZCBtb3JlIHJlYWRhYmxlIGJ5IHNwbGl0dGluZyBhdCAmJgorICAgIAorICAgICJzY3JpcHQiIGNhbiBjb250YWluIG11bHRpcGxlIGNvbW1hbmRzIHRvIHJ1biBpbiBzZXF1ZW5jZS4KIAotCSogY29uZmlndXJlLmFjOiBDb3JyZWN0bHkgaWRlbnRpZnkgeDMyIHN5c3RlbXMgYXMgNjQtYml0LgotCSogbTQvbGlidG9vbC5tNDogUmVtb3ZlIGxpYnRvb2wgZXhwciBlcnJvci4KLQkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCAwYzM4MjQ3MDJkM2Q1OWQzN2Y4YzE3N2Q2NDYzMDNmNTQ2MTg3NjgzCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyNiAxNDo1MTozMiAyMDE0IC0wNzAwCiAKLTIwMTMtMDItMDcgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIEFsd2F5cyBzZXQgQ0NfRk9SX1RBUkdFVCBmb3IgZGVqYWdudSwgdG8gbWFrZSB0aGUgdGVzdHN1aXRlIHJlc3BlY3QgJENDCisgICAgCisgICAgVGhpcyBmaXhlcyBjcm9zcy1jb21waWxhdGlvbiBhbmQgY29tcGlsYXRpb24gd2l0aCBDQz0iZ2NjIC1tMzIiLgogCi0JKiBjb25maWd1cmUuYWM6IEZpeCBHQ0MgdXNhZ2UgdGVzdC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIFJFQURNRTogTWVudGlvbiBMTFZNL0dDQyB4ODZfNjQgaXNzdWUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgOTk0NmE5MmFmMzFiMzBjYjc3NjAxNTBkMWY4Y2E2YzExYjAxYWVlYQorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjYgMjA6MTg6NTggMjAxNCAtMDcwMAogCi0yMDEzLTAyLTA3ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBTdG9wIGxvb2tpbmcgZm9yIGV4cGVjdCBhbmQgcnVudGVzdCBhYm92ZSB0b3BfYnVpbGRkaXIKKyAgICAKKyAgICBVc2VycyB3aXNoaW5nIHRvIHRlc3QgaGFuZC1jb21waWxlZCB2ZXJzaW9ucyBvZiBleHBlY3QgYW5kIHJ1bnRlc3QgY2FuCisgICAgZWFzaWx5IGVub3VnaCBwdXQgdGhlbSBpbiB0aGVpciBwYXRoIG9yIHNldCBFWFBFQ1QgYW5kIFJVTlRFU1QKKyAgICB0aGVtc2VsdmVzLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIChtYWluKTogUmVwbGFjZSAvLyBzdHlsZQotCWNvbW1lbnRzIHdpdGggLyogKi8gZm9yIHhsYyBjb21waWxlci4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0X3ZhLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIChtYWluKTogRGl0dG8uCitjb21taXQgYWNiMjAyMzI1MjE1MDU4NjM5MjM0ZWZiN2FmMWYwNGMxYzhhMWY0NAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjYgMjA6MTg6NDEgMjAxNCAtMDcwMAogCi0yMDEzLTAyLTA2ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBTdG9wIHNldHRpbmcgYW4gZW1wdHkgQU1fUlVOVEVTVEZMQUdTCiAKLQkqIG1hbi9mZmlfcHJlcF9jaWYuMzogQ2xlYW4gdXAgZm9yIGRlYmlhbiBsaW50aWFuIGNoZWNrZXIuCitjb21taXQgYzg2MGE5OTJmZWY1ZDdjZDdiYjA5NzViMTYzMmQxN2E5ZmFmZTAwNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE1hciAyNSAxNzowMjo1MSAyMDE0IC0wNDAwCiAKLTIwMTMtMDItMDYgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIFVwZ3JhZGUgdmVyc2lvbiB0byAzLjEtcmMxCiAKLQkqIE1ha2VmaWxlLmFtIChwa2djb25maWdkaXIpOiBBZGQgbWlzc2luZyBwa2djb25maWcgaW5zdGFsbCBiaXRzLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbGQuCitjb21taXQgOTgzNzA3M2U2MjAzMDQ4YTE2MmEyMjY3OThjNWQyNTI2MDAyMTllZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE1hciAyNSAxNjoyNDoxNCAyMDE0IC0wNDAwCiAKLTIwMTMtMDItMDIgIE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgorICAgIFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZSBhbmQgY2xlYW4gdXAgUkVBRE1FIG5vdGVzLgogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9jYWxsKTogU2lnbi1leHRlbmQgaW50ZWdlciBhcmd1bWVudHMgcGFzc2VkCi0JdmlhIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuCitjb21taXQgMThkM2JhYTlmNTk3YjAyNjY3NWJhYTFiNGU1YTVlZWVmNzU3N2EwOAorTWVyZ2U6IGFmZWU1MzcgZjBjOGEzMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE1hciAyNSAxNjoxMjo1MyAyMDE0IC0wNDAwCiAKLTIwMTMtMDEtMjEgIE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMDggZnJvbSBqb3NodHJpcGxldHQvZnJlZWJzZAorICAgIAorICAgIFszLjEgYmxvY2tlcl0gRml4IEZyZWVCU0Qgc3VwcG9ydAogCi0JKiBSRUFETUU6IEFkZCBNaWNyb0JsYXplIGRldGFpbHMuCi0JKiBNYWtlZmlsZS5hbTogQWRkIE1pY3JvQmxhemUgc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCi0JKiBzcmMvbWljcm9ibGF6ZS9mZmkuYzogTmV3LgotCSogc3JjL21pY3JvYmxhemUvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgotCSogc3JjL21pY3JvYmxhemUvc3lzdi5TOiBMaWtld2lzZS4KK2NvbW1pdCBhZmVlNTM3MzhhOTk1ZTIzYmQyZjg5ZmQwZjdiMzBiMzgwNTY2MTA2CitNZXJnZTogN2QyNDc4NSBiMmQ2MTBlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgTWFyIDI1IDE2OjEyOjM1IDIwMTQgLTA0MDAKIAotMjAxMy0wMS0yMSAgTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYzogRml4ZWQgaXNzdWUuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMDYgZnJvbSBqb3NodHJpcGxldHQvZGFyd2luLWF3YXJkCisgICAgCisgICAgWzMuMSBibG9ja2VyXSBVcGRhdGUgT1MgWCBidWlsZCBzeXN0ZW0gdG8gaW5jbHVkZSB3aW4zMi5TIG9uIDMyLWJpdAogCi0yMDEzLTAxLTIxICBDaHJpcyBaYW5rZWwgICA8Y2hyaXNAemFua2VsLm5ldD4KK2NvbW1pdCA3ZDI0Nzg1NjhlZDlmMDNjYmY1NzYyN2Y0NDlhMmQyY2Y0ZDE1NzFjCitNZXJnZTogYmVhYjVmMyA1NmJlNDdmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgTWFyIDI1IDE2OjEyOjE3IDIwMTQgLTA0MDAKIAotCSogUkVBRE1FOiBBZGQgWHRlbnNhIHN1cHBvcnQuCi0JKiBNYWtlZmlsZS5hbTogTGlrZXdpc2UuCi0JKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW4gUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCi0JKiBzcmMvcHJlcF9jaWYuYzogSGFuZGxlIFh0ZW5zYS4KLQkqIHNyYy94dGVuc2E6IE5ldyBkaXJlY3RvcnkuCi0JKiBzcmMveHRlbnNhL2ZmaS5jOiBOZXcgZmlsZS4KLQkqIHNyYy94dGVuc2EvZmZpdGFyZ2V0Lmg6IERpdHRvLgotCSogc3JjL3h0ZW5zYS9zeXN2LlM6IERpdHRvLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTEwIGZyb20gam9zaHRyaXBsZXR0L3c2NAorICAgIAorICAgIEZpeCA2NC1iaXQgV2luZG93cyBzdXBwb3J0CiAKLTIwMTMtMDEtMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBiZWFiNWYzMzRkOWVjNWI4YjkxZDFjYzcyN2QxMDI5YjQwMzU4ZTdlCitNZXJnZTogMjhmYjE5NyBlZjU4OTBlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgTWFyIDI1IDE2OjA3OjQ3IDIwMTQgLTA0MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogUmVwbGFjZSAvLyBzdHlsZQotCWNvbW1lbnRzIHdpdGggLyogKi8gZm9yIHhsYyBjb21waWxlci4KLQkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9BSVgpOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGFsbG9jYXRlX21tYXApOiBEZWxldGUKLQlkZXByZWNhdGVkIGlubGluZSBmdW5jdGlvbi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IERpdHRvLgotCSogUkVBRE1FOiBBZGQgdXBkYXRlIGZvciBBSVggc3VwcG9ydC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzEwNSBmcm9tIGpvc2h0cmlwbGV0dC93aW4zMi1yZWxvY2F0aW9ucworICAgIAorICAgIFszLjEgYmxvY2tlcl0gd2luMzIuUyBuZWVkcyB0byBoYW5kbGUgcmVsb2NhdGlvbnMvR09UCiAKLTIwMTMtMDEtMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBmMGM4YTMxNTc3MTcyMTA0MDQ5MjgzZjBhODBjNzIzMDg0YTViZDc3CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNCAyMjoxNDoyNiAyMDE0IC0wNzAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogUm9idXN0aWZ5IHBjIHJlbGF0aXZlIHJlbG9jIGNoZWNrLgotCSogbTQvYXhfY2NfbWF4b3B0Lm00OiBEb24ndCAtbWFsaWduLWRvdWJsZS4gIFRoaXMgaXMgYW4gQUJJCi0JY2hhbmdpbmcgb3B0aW9uIGZvciAzMi1iaXQgeDg2LgotCSogYWNsb2NhbC5tNCwgY29uZmlndXJlOiBSZWJ1aWx0LgotCSogUkVBRE1FOiBVcGRhdGUgc3VwcG9ydGVkIHRhcmdldCBsaXN0LgorICAgIENvbXBpbGUgd2luMzIuUyBvbiBGcmVlQlNECiAKLTIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBiMmQ2MTBlMDI4YjVjZTQ4ZDFhZDdlNWQwZGViYzljMzIxZDg5MWIyCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgRnJpIE1hciAyMSAxMToxMDoxMyAyMDE0IC0wNzAwCiAKLQkqIFJFQURNRSAodGVzdGVkKTogQWRkIENvbXBpbGVyIGNvbHVtbiB0byB0YWJsZS4KKyAgICBDb21waWxlIHdpbjMyLlMgb24gMzItYml0IERhcndpbiBhcyB3ZWxsCiAKLTIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBiZTUwYjg3YTQ5MGU3OTQzNjJjYjRhMjdhZGEyZmJhYWIyMDJhZGI4CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNCAyMTo0NDoxMyAyMDE0IC0wNzAwCiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoc3RydWN0IHJlZ2lzdGVyX2FyZ3MpOiBNYWtlIHNzZSBhcnJheSBhbmQgYXJyYXkKLQlvZiB1bmlvbnMgZm9yIHN1bnBybyBjb21waWxlciBjb21wYXRpYmlsaXR5LgorICAgIEFsd2F5cyB1c2UgY29uZmlndXJlIHRvIGRldGVjdCB3aGV0aGVyIGdsb2JhbCBzeW1ib2xzIG5lZWQgdW5kZXJzY29yZXMKKyAgICAKKyAgICA2NC1iaXQgV2luZG93cyBhbHJlYWR5IHVzZWQgdGhpcyBjaGVjazsgbWFrZSBpdCB1bml2ZXJzYWwsIGFuZCB1c2UgaXQgaW4KKyAgICBwbGFjZSBvZiBhbiBpZmRlZiBvbiBYODZfV0lOMzIsIHRvIGhhbmRsZSBub24tV2luZG93cyBwbGF0Zm9ybXMgdGhhdCB1c2UKKyAgICB0aGUgdW5kZXJzY29yZSwgc3VjaCBhcyBEYXJ3aW4uCiAKLTIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA1NmJlNDdmODc2MjllMzFhZmJjYjA3NzRhYTY1NzM1ZjUzOWVlOTcyCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNCAyMToyNDo1MyAyMDE0IC0wNzAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogVGVzdCB0YXJnZXQgcGxhdGZvcm0gc2l6ZV90IHNpemUuICBIYW5kbGUgYm90aCAzMgotCWFuZCA2NC1iaXQgYnVpbGRzIGZvciB4ODZfNjQtKiBhbmQgaT84Ni0qIHRhcmdldHMgKGFsbG93aW5nIGZvcgotCUNGTEFHIG9wdGlvbiB0byBjaGFuZ2UgZGVmYXVsdCBzZXR0aW5ncykuCi0JKiBjb25maWd1cmUsIGFjbG9jYWwubTQ6IFJlYnVpbHQuCisgICAgRml4IGEgd2FybmluZyBvbiA2NC1iaXQgV2luZG93cworICAgIAorICAgIFdoZW4gc2l6ZW9mKHNpemVfdCkgIT0gc2l6ZW9mKHVuc2lnbmVkKSwgYWRkaW5nIGEgc2l6ZV90IHRvIGNpZi0+Ynl0ZXMKKyAgICBwcm9kdWNlcyBhICJwb3NzaWJsZSBsb3NzIG9mIGRhdGEiIHdhcm5pbmcuICBIb3dldmVyLCB0aGUgc2l6ZV90IGluCisgICAgcXVlc3Rpb24gcmVmZXJzIHRvIHRoZSBzaXplIG9mIGEgc2luZ2xlIHBhcmFtZXRlci4gIFVzZSBhIGNhc3QgdG8gYXZvaWQKKyAgICB0aGUgd2FybmluZy4KIAotMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDQ4YThlZGE3NGFhZDhhMjFiNmYyNmRmNWRmMDhmZTY0YzA0M2QyMDgKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBNb24gTWFyIDI0IDIxOjIxOjEyIDIwMTQgLTA3MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBPbmx5IHJ1biBleGNlcHRpb24KLQloYW5kbGluZyB0ZXN0cyB3aGVuIHVzaW5nIEdOVSBjb21waWxlci4KKyAgICBBdm9pZCByZWZlcmVuY2luZyB1bmRlZmluZWQgQUJJcyBvbiA2NC1iaXQgV2luZG93cyBidWlsZHMKKyAgICAKKyAgICA2NC1iaXQgV2luZG93cyBkb2VzIG5vdCBoYXZlIEZGSV9TVERDQUxMLCBGRklfVEhJU0NBTEwsIG9yIEZGSV9GQVNUQ0FMTC4KIAotCSogbTQvYXhfY29tcGlsZXJfdmVuZG9yLm00OiBOZXcgZmlsZS4KLQkqIGNvbmZpZ3VyZS5hYzogVGVzdCBmb3IgY29tcGlsZXIgdmVuZG9yIGFuZCBkb24ndCB1c2UKLQlBWF9DRkxBR1NfV0FSTl9BTEwgd2l0aCB0aGUgc3VuIGNvbXBpbGVyLgotCSogYWNsb2NhbC5tNCwgY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IGYwZjQxMzhmOTAzNDVkN2Q2N2RmYTY3ODNhN2UxYzdjYzMwZDNjNmYKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTYXQgTWFyIDIyIDEwOjAwOjUzIDIwMTQgLTA3MDAKIAotMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIHdpbjMyLlM6IEFkZCBoYW5kbGluZyBmb3IgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSBvbiBEYXJ3aW4KKyAgICAKKyAgICBOZXdlciB2ZXJzaW9ucyBvZiBEYXJ3aW4gZ2VuZXJhdGUgdGhlIG5lY2Vzc2FyeSBzdHViIGZ1bmN0aW9ucworICAgIGF1dG9tYXRpY2FsbHkgYW5kIGp1c3QgbmVlZCBhIGNhbGwgaW5zdHJ1Y3Rpb24sIGJ1dCBhY2NvbW9kYXRpbmcgb2xkZXIKKyAgICB2ZXJzaW9ucyBhcyB3ZWxsIHJlcXVpcmVzIGFkZGluZyB0aGUgc3R1Yi4KIAotCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IERvbid0IHVzZSBHQ0Npc21zIHRvIGRlZmluZSB0eXBlcyB3aGVuCi0JYnVpbGRpbmcgd2l0aCB0aGUgU1VOUFJPIGNvbXBpbGVyLgorY29tbWl0IGVmNTg5MGViYWZiN2NkMmZiZjlhY2YxNjFlZGI1NWZlMTM4Mjg3MWMKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBGcmkgTWFyIDIxIDExOjAxOjM5IDIwMTQgLTA3MDAKIAotMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIHdpbjMyLlM6IFVzZSBzaGlmdGluZyBmb3IgbXVsdGlwbGljYXRpb24gcmF0aGVyIHRoYW4gcmVwZWF0ZWQgYWRkaXRpb24KKyAgICAKKyAgICBUaGUganVtcCB0YWJsZSBjb2RlIGFkZGVkIGEgcmVnaXN0ZXIgdG8gaXRzZWxmIHR3aWNlIHRvIG11bHRpcGx5IGJ5IDQ7CisgICAgc2hpZnQgdGhlIHJlZ2lzdGVyIGxlZnQgYnkgMiBpbnN0ZWFkLgogCi0JKiBjb25maWd1cmUuYWM6IFB1dCBsb2NhbC5leHAgaW4gdGhlIHJpZ2h0IHBsYWNlLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDRmY2E0ODkwMWU3ZTRmNTNiZjQ5MGVkMjI2MDdiMmQyZDhmNGJmY2MKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBGcmkgTWFyIDIxIDExOjAwOjQxIDIwMTQgLTA3MDAKIAotCSogc3JjL3g4Ni9mZmkuYzogVXBkYXRlIGNvbW1lbnQgYWJvdXQgcmVncGFybSBmdW5jdGlvbiBhdHRyaWJ1dGVzLgotCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBUaGUgU1VOUFJPIGNvbXBpbGVyIHJlcXVpcmVzCi0JdGhhdCBhbGwgZnVuY3Rpb24gYXJndW1lbnRzIGJlIHBhc3NlZCBvbiB0aGUgc3RhY2sgKG5vIHJlZ3Bhcm0KLQlzdXBwb3J0KS4KKyAgICB3aW4zMi5TOiBNYWtlIHRoZSBqdW1wIHRhYmxlcyBwb3NpdGlvbi1pbmRlcGVuZGVudAorICAgIAorICAgIE5vdyB0aGF0IG5vbi1XaW5kb3dzIHBsYXRmb3JtcyBpbmNsdWRlIHdpbjMyLlMsIGl0IG5lZWRzIHRvIHN1cHBvcnQKKyAgICBidWlsZGluZyBhcyBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLiAgVGhpcyBmaXhlcyBidWlsZCBmYWlsdXJlcyBvbgorICAgIHRhcmdldCBwbGF0Zm9ybXMgdGhhdCBkbyBub3QgYWxsb3cgdGV4dCByZWxvY2F0aW9ucy4KIAotMjAxMy0wMS0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDIwODdkY2Y3MzYyNzQyODZmNzZjNjlkMzk4OGZiNmQ3Y2M0ZmQwZjUKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBGcmkgTWFyIDIxIDEwOjU3OjA2IDIwMTQgLTA3MDAKIAotCSogY29uZmlndXJlLmFjOiBHZW5lcmF0ZSBsb2NhbC5leHAuICBUaGlzIHNldHMgQ0NfRk9SX1RBUkdFVAotCXdoZW4gd2UgYXJlIHVzaW5nIHRoZSB2ZW5kb3IgY29tcGlsZXIuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKEVYVFJBX0RFSkFHTlVfU0lURV9DT05GSUcpOiBQb2ludCB0bwotCS4uL2xvY2FsLmV4cC4KLQkqIGNvbmZpZ3VyZSwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIHdpbjMyLlM6IE1ha2UgY2FsbHMgdG8gZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciBwb3NpdGlvbi1pbmRlcGVuZGVudAorICAgIAorICAgIE5vdyB0aGF0IG5vbi1XaW5kb3dzIHBsYXRmb3JtcyBpbmNsdWRlIHdpbjMyLlMsIGl0IG5lZWRzIHRvIHN1cHBvcnQKKyAgICBidWlsZGluZyBhcyBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLiAgVGhpcyBmaXhlcyBvbmUgc291cmNlIG9mIGJ1aWxkCisgICAgZmFpbHVyZXMgb24gdGFyZ2V0IHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBhbGxvdyB0ZXh0IHJlbG9jYXRpb25zLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IFJ1biB0ZXN0cyB3aXRoIGRpZmZlcmVudAotCW9wdGlvbnMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgdXNpbmcgZ2NjIG9yIHRoZQotCXZlbmRvciBjb21waWxlci4KLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLmV4cCAobGliZmZpLWluaXQpOiBTZXQgdXNpbmdfZ2NjIGJhc2VkIG9uCi0Jd2hldGhlciBvciBub3Qgd2UgYXJlIGJ1aWxkaW5nL3Rlc3Rpbmcgd2l0aCBnY2MuCitjb21taXQgMjhmYjE5NzA3OWNmMWQxMWRhNGVlZjdjOGMyNDNhYjA1NTkwYzUyOAorTWVyZ2U6IGM2OTc0NzIgYzNkZDBhMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE1hciAxOCAxMjoxOTozNiAyMDE0IC0wNDAwCiAKLTIwMTMtMDEtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzEwNyBmcm9tIHJ2YW5kZXJtZXVsZW4vbXN2Y2MKKyAgICAKKyAgICBWYXJpb3VzIGNvbXBhdGliaWxpdHkgZml4ZXMgYW5kIGltcHJvdmVtZW50cyB0byBtc3ZjYy5zaC4KIAotCSogY29uZmlndXJlLmFjOiBTd2l0Y2ggeDg2IHNvbGFyaXMgdGFyZ2V0IHRvIFg4NiBieSBkZWZhdWx0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IGMzZGQwYTFhMDI0NWZjMTc0MzYxYTcwODc2ZTg4YWUyNDI4NWY4NjEKK0F1dGhvcjogUnlhbiBWYW5kZXJNZXVsZW4gPHJ5YW52bUBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMTggMTI6MDk6NDUgMjAxNCAtMDQwMAogCi0yMDEzLTAxLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgVmFyaW91cyBjb21wYXRpYmlsaXR5IGZpeGVzIGFuZCBpbXByb3ZlbWVudHMgdG8gbXN2Y2Muc2guCisgICAgCisgICAgKiBEb24ndCB0cnkgdG8gbWl4IGluY29tcGF0aWJsZSBvcHRpbWl6YXRpb24gZmxhZ3MgaW4gZGVidWcgYnVpbGRzLgorICAgICogV29ya2Fyb3VuZCBheF9jY19tYXhvcHQubTQgbm90IHN1cHBvcnRpbmcgTVNWQyBhbmQgY2hhbmdlIC1PMyB0byAtTzIuCisgICAgKiBGaXggTVNWQyB3YXJuaW5nIGJ5IHByb3Blcmx5IHBhc3NpbmcgbGlua2VyIGZsYWdzIHRvIGNvbXBpbGVyLgorICAgICogTWFrZSBtc3ZjYy5zaCByZXR1cm4gMSBpZiBpbnZhbGlkIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZSB1c2VkIHJhdGhlciB0aGFuIHNpbGVudGx5IGVhdGluZyB0aGVtLgorICAgICogQWRkIG1vcmUgY29tbWVudHMuCiAKLQkqIGNvbmZpZ3VyZS5hYzogRml4IHRlc3QgZm9yIHJlYWQtb25seSBlaF9mcmFtZS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCBjNjk3NDcyZmNjZmJiNWI4N2IwMDdjMDUzY2RhOWVmMDE0YjM0NmI5CitNZXJnZTogODNmZDJiYyBlNDg5MThlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gTWFyIDE3IDAwOjMyOjQyIDIwMTQgLTA0MDAKIAotMjAxMy0wMS0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTAyIGZyb20gam9zaHRyaXBsZXR0L3Rlc3QtZ2VuZXJpYworICAgIAorICAgIEFkZCBBQklzIHRvIHRoZSB0ZXN0IG1hdHJpeDsgdW5pZnkgbWFueSBiaXRzIG9mIHRoZSB0ZXN0c3VpdGUKIAotCSogc3JjL3g4Ni9zeXN2LlMsIHNyYy94ODYvdW5peDY0LlM6IE9ubHkgZW1pdCBEV0FSRiB1bndpbmQgaW5mbwotCXdoZW4gYnVpbGRpbmcgd2l0aCB0aGUgR05VIHRvb2xjaGFpbi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKENIRUNLKTogRml4IGZvciBTb2xhcmlzIHZlbmRvcgotCWNvbXBpbGVyLgorY29tbWl0IGU0ODkxOGVjZjg3NmJjODVkMDQwZmM1MGEyMzIwNTljNTY2NTUzYTgKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDIwOjI5OjI3IDIwMTQgLTA3MDAKIAotMjAxMy0wMS0wNyAgVGhvcnN0ZW4gR2xhc2VyIDx0Z0BtaXJic2Qub3JnPgorICAgIHRlc3RzdWl0ZTogQWRkIEFCSXMgdG8gdGhlIHRlc3QgbWF0cml4OyB1bmlmeSB0ZXN0cyBhY3Jvc3MgQUJJcworICAgIAorICAgIFRoaXMgZWxpbWluYXRlcyBhbGwgdGhlICpfd2luMzIuYyB0ZXN0cyBpbiBmYXZvciBvZiB0aGUgdGVzdHMgdGhleSB3ZXJlCisgICAgYnJhbmNoZWQgZnJvbSwgYW5kIGV4cGFuZHMgdGVzdCBjb3ZlcmFnZSB0byBydW4gbWFueSBtb3JlIHRlc3RzIG9uCisgICAgc3RkY2FsbCwgdGhpc2NhbGwsIGFuZCBmYXN0Y2FsbC4KKyAgICAKKyAgICBUaGlzIHNhbWUgbWVjaGFuaXNtIGFsc28gc3VwcG9ydHMgdGVzdGluZyBhbnkgb3RoZXIgdGFyZ2V0IHRoYXQgaGFzCisgICAgbXVsdGlwbGUgQUJJcy4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhcl92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0X3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYzogVGVzdHN1aXRlIGZpeGVzLgorY29tbWl0IDRkNGQzNjhlNWE1NWQ5NDQzYzRjNTNiMWI3MGQ1OGFiNmQ4Yzk0MWMKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDE3OjAyOjA1IDIwMTQgLTA3MDAKIAotMjAxMy0wMS0wNyAgVGhvcnN0ZW4gR2xhc2VyIDx0Z0BtaXJic2Qub3JnPgorICAgIHRlc3RzdWl0ZTogUmVwbGFjZSBmZml0ZXN0Y3h4Lmggd2l0aCBmZml0ZXN0LmgKKyAgICAKKyAgICBmZml0ZXN0LmggY29udGFpbnMgYSBzdXBlcnNldCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiBmZml0ZXN0Y3h4Lmg7CisgICAgbWFrZSB0aGUgQysrIHRlc3RzIGluY2x1ZGUgZmZpdGVzdC5oIGluc3RlYWQsIGFuZCByZW1vdmUgZmZpdGVzdGN4eC5oLgogCi0JKiBzcmMvbTY4ay9mZmkuYyAoQ0lGX0ZMQUdTX1NJTlQ4LCBDSUZfRkxBR1NfU0lOVDE2KTogRGVmaW5lLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCA4LWJpdCBhbmQgMTYtYml0IHNpZ25lZCBjYWxscy4KLQkqIHNyYy9tNjhrL3N5c3YuUyAoZmZpX2NhbGxfU1lTViwgZmZpX2Nsb3N1cmVfU1lTVik6IERpdHRvLgorY29tbWl0IDNmOTdjZjM0MTNjNDZjYWYyYTc5ZjMyYWM5Y2RhNDYyMDk3MmMyZDcKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDE2OjUzOjQyIDIwMTQgLTA3MDAKIAotMjAxMy0wMS0wNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIHRlc3RzdWl0ZTogVW5pZnkgdGhlIEMgYW5kIEMrKyB0ZXN0c3VpdGVzCisgICAgCisgICAgVGhlc2UgdHdvIHRlc3RzdWl0ZXMgZGlmZmVyIG9ubHkgaW4gdGhlIHNvdXJjZSBmaWxlIGdsb2IgYW5kIGEgY291cGxlIG9mCisgICAgYWRkaXRpb25hbCBjb21waWxlciBvcHRpb25zOyB1bmlmeSB0aGUgcmVtYWluaW5nIGJpdHMuCiAKLQkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCAtZmV4Y2VwdGlvbnMKLQlhbmQgLVdhbGwuICBUaGlzIGlzIHNldCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBhZnRlciB0ZXN0aW5nIGZvcgotCUdDQy4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IDBkOWNjZThlZGI5MzdiYmU3NzFhNmNkZDI1ZjY3MWVkZjA2ZDIxMjgKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDE2OjIyOjU4IDIwMTQgLTA3MDAKIAotMjAxMy0wMS0wMiAgcm9mbDByIDxodHRwczovL2dpdGh1Yi5jb20vcm9mbDByPgorICAgIHRlc3RzdWl0ZTogZmZpdGVzdC5oOiBQYXJlbnRoZXNpemUgdGhlIENIRUNLIG1hY3JvCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCBidWlsZCBlcnJvciBvbiBwcGMKLQl3aGVuIGxvbmcgZG91YmxlID09IGRvdWJsZS4KK2NvbW1pdCA1Njk1ZWMxNDQ0YzUzMjNlNDhmZTQzMTRmOGM4ZjAyNzYyNWU2N2RmCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAxNjowNDo1OCAyMDE0IC0wNzAwCiAKLTIwMTMtMDEtMDIgIFJlaW5pIFVyYmFuICA8cnVyYmFuQHgtcmF5LmF0PgorICAgIHRlc3RzdWl0ZTogRmFjdG9yIG91dCBhIGZ1bmN0aW9uIHRvIHJ1biBhIG1hdHJpeCBvZiB0ZXN0cworICAgIAorICAgIFRoaXMgY29tbW9ucyB1cCBjb2RlIGZyb20gbGliZmZpLmNhbGwvY2FsbC5leHAgYW5kCisgICAgbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAsIHVuaWZpZXMgdGhlIG9wdGltaXphdGlvbiBvcHRpb24gbWF0cml4CisgICAgYmV0d2VlbiB0aGUgdHdvLCBhbmQgbWFrZXMgaXQgZWFzaWVyIHRvIGFkZCBtb3JlIGF4ZXMgdG8gdGhlIG1hdHJpeAorICAgIGluIHRoZSBmdXR1cmUuCiAKLQkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IEFkZCAtbm8tdW5kZWZpbmVkIHRvIExERkxBR1MKLQkocmVxdWlyZWQgZm9yIHNoYXJlZCBsaWJzIG9uIGN5Z3dpbi9taW5ndykuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCBkZmRiMDJjYzg2OTg1NWQzYjY4NTcxZTVmN2FhNzdhZThjOWQyNTRhCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAxNToyNjoyNiAyMDE0IC0wNzAwCiAKLTIwMTItMTAtMzEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorICAgIHRlc3RzdWl0ZTogSW50cm9kdWNlIGEgX19USElTQ0FMTF9fIGNvbXBpbGVyLXNwZWNpZmljIG1hY3JvCiAKLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBBZGQgbmV3IEFCSSBzdXBwb3J0LgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KK2NvbW1pdCA4M2ZkMmJjZTA0NTYyMjQ0ODM0MzVkNGI3NjQwNjNmNDUxM2ZkNDY0CitNZXJnZTogMzY1OGEwNyAwNmZmOTI0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDIyOjAzOjI5IDIwMTQgLTA0MDAKIAotMjAxMi0xMC0zMCAgTWFnbnVzIEdyYW5iZXJnICA8em9ycnlAZ2VudG9vLm9yZz4KLQkgICAgUGF2ZWwgTGFidXNoZXYgIDxwYXZlbC5sYWJ1c2hldkBydW5ib3gucnU+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5OSBmcm9tIGpvc2h0cmlwbGV0dC9naXRpZ25vcmUKKyAgICAKKyAgICAuZ2l0aWdub3JlOiBJZ25vcmUgbW9yZSBnZW5lcmF0ZWQgZmlsZXMKIAotCSogY29uZmlndXJlLmFjOiBOZXcgb3B0aW9ucyBwYXhfZW11dHJhbXAKLQkqIGNvbmZpZ3VyZSwgZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGVkCi0JKiBzcmMvY2xvc3VyZXMuYzogTmV3IGZ1bmN0aW9uIGVtdXRyYW1wX2VuYWJsZWRfY2hlY2soKSBhbmQKLQljaGVja3MuCitjb21taXQgMzY1OGEwNzAwYTUwZDM3YTJmZGJhMDRmZDlkNzlhZDJmNzA2ZDlmNQorTWVyZ2U6IGQ5NDhkMGEgNDZjNWQzYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAyMTozNzo0MiAyMDE0IC0wNDAwCiAKLTIwMTItMTAtMzAgIEZyZWRlcmljayBDaGV1bmcgIDxmcmVkZXJpY2suY2hldW5nQGdtYWlsLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzEwMCBmcm9tIHJ2YW5kZXJtZXVsZW4vYnVnLTc1Njc0MAorICAgIAorICAgIENoYW5nZSBkb3VibGUgcXVvdGVzIGluIE1ha2VmaWxlLmFtIHRvIHNpbmdsZSBxdW90ZXMuCiAKLQkqIGNvbmZpZ3VyZS5hYzogRW5hYmxlIEZGSV9NQVBfRVhFQ19XUklUIGZvciBEYXJ3aW4gMTIgKG1vdW50YWluCi0JbGlvbikgYW5kIGZ1dHVyZSB2ZXJzaW9uLgotCSogY29uZmlndXJlOiBSZWJ1aWxkLgorY29tbWl0IDQ2YzVkM2MzMGZkYzJiNDNjMDc2YWQ5NTUwNzhkN2M1ZjFlNzViMzcKK0F1dGhvcjogUnlhbiBWYW5kZXJNZXVsZW4gPHJ5YW52bUBnbWFpbC5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMjE6MTY6MDggMjAxNCAtMDQwMAogCi0yMDEyLTEwLTMwICBKYW1lcyBHcmVlbmhhbGdoICA8amFtZXMuZ3JlZW5oYWxnaCBhdCBhcm0uY29tPgotICAgICAgICAgICAgTWFyY3VzIFNoYXdjcm9mdCAgPG1hcmN1cy5zaGF3Y3JvZnQgYXQgYXJtLmNvbT4KKyAgICBDaGFuZ2UgZG91YmxlIHF1b3RlcyBpbiBNYWtlZmlsZS5hbSB0byBzaW5nbGUgcXVvdGVzLgorICAgIAorICAgIFRoaXMgd2FzIG9yaWdpbmFsbHkgZG9uZSBpbiBQUiAjODQsIGV4Y2VwdCB0aGUgY2hhbmdlIHdhcyBtYWRlIHRvIE1ha2VmaWxlLmluIGluc3RlYWQgb2YgTWFrZWZpbGUuYW0gYW5kIHdhcyB0aGVyZWZvcmUgcmV2ZXJ0ZWQgdGhlIG5leHQgdGltZSB0aGUgZmlsZXMgd2VyZSByZWdlbmVyYXRlZC4KIAotICAgICAgICAqIFJFQURNRTogQWRkIGRldGFpbHMgb2YgYWFyY2g2NCBwb3J0LgotICAgICAgICAqIHNyYy9hYXJjaDY0L2ZmaS5jOiBOZXcuCi0gICAgICAgICogc3JjL2FhcmNoNjQvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgotICAgICAgICAqIHNyYy9hYXJjaDY0L3N5c3YuUzogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5hbTogU3VwcG9ydCBhYXJjaDY0LgotCSogY29uZmlndXJlLmFjOiBTdXBwb3J0IGFhcmNoNjQuCi0JKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDA2ZmY5MjQyMTVhMmY5NzM5ZWZhMmMwNTlkYzU5NWJjNGVjMWM4NTEKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDE2OjE5OjQ2IDIwMTQgLTA3MDAKIAotMjAxMi0xMC0zMCAgSmFtZXMgR3JlZW5oYWxnaCAgPGphbWVzLmdyZWVuaGFsZ2ggYXQgYXJtLmNvbT4KLSAgICAgICAgICAgIE1hcmN1cyBTaGF3Y3JvZnQgIDxtYXJjdXMuc2hhd2Nyb2Z0IGF0IGFybS5jb20+CisgICAgLmdpdGlnbm9yZTogSWdub3JlIG1vcmUgZ2VuZXJhdGVkIGZpbGVzCisgICAgCisgICAgVGhlIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGRvYy9saWJmZmkuaW5mbyBhbmQgZmZpY29uZmlnLmguaW4sIHNvIGFkZAorICAgIHRoZW0gdG8gLmdpdGlnbm9yZS4KIAotICAgICAgICAqIHRlc3RzdWl0ZS9saWIvbGliZmZpLmV4cDogQWRkIHN1cHBvcnQgZm9yIGFhcmNoNjQuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmM6IE5ldy4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyX3ZhLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludF92YS5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nX3ZhLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0X3ZhLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3VuaW5pdGlhbGl6ZWQuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDIuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDMuYzogTGlrZXdpc2UuCitjb21taXQgYmFkODk0ODM0NmU5Yjg4MTMwMjNhMGNjNzhhM2I2ZWI4ZDljMTRjNgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMTU6MTY6MTggMjAxNCAtMDcwMAogCi0yMDEyLTEwLTEyICBXYWx0ZXIgTGVlICA8d2FsdEB0aWxlcmEuY29tPgorICAgIHRlc3RzdWl0ZTogSW50cm9kdWNlIGEgX19TVERDQUxMX18gY29tcGlsZXItc3BlY2lmaWMgbWFjcm8KKyAgICAKKyAgICBTZXZlcmFsIHRlc3RzIHdhbnQgdG8gdXNlIHN0ZGNhbGwsIHdoaWNoIGRpZmZlcnMgaW4gc3ludGF4IGJ5IGNvbXBpbGVyLAorICAgIHNvIGludHJvZHVjZSBhIG1hY3JvIGZvciBpdCBpbiBmZml0ZXN0LmguCiAKLSAgICAgICAgKiBNYWtlZmlsZS5hbTogQWRkIFRJTEUtR3gvVElMRVBybyBzdXBwb3J0LgotICAgICAgICAqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCi0gICAgICAgICogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0gICAgICAgICogY29uZmlndXJlOiBMaWtld2lzZS4KLSAgICAgICAgKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmX2NvcmUpOiBIYW5kbGUgVElMRS1HeC9USUxFUHJvLgotICAgICAgICAqIHNyYy90aWxlOiBOZXcgZGlyZWN0b3J5LgotICAgICAgICAqIHNyYy90aWxlL2ZmaS5jOiBOZXcgZmlsZS4KLSAgICAgICAgKiBzcmMvdGlsZS9mZml0YXJnZXQuaDogRGl0dG8uCi0gICAgICAgICogc3JjL3RpbGUvdGlsZS5TOiBEaXR0by4KK2NvbW1pdCA5OGE3OTNmYTM2YTRhYjNiYTI0ZDA1OWNiODBhMjg5MWNkYjk0MGUxCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAxNToyMDozNiAyMDE0IC0wNzAwCiAKLTIwMTItMTAtMTIgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorICAgIHRlc3RzdWl0ZTogQ29tbW9uIHVwIHRoZSBpZmRlZiBibG9ja3MgZm9yIGNvbXBpbGVyLXNwZWNpZmljIG1hY3JvcwogCi0JKiBnZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5OiBOb3JtYWxpemUgd2hpdGVzcGFjZS4KK2NvbW1pdCBkOTQ4ZDBhNzI5YzkzNGIwMjI0NzQ5MzM4YTNiYTBhMmM4ZjUxYzQ1CitNZXJnZTogYjYxYjQ3MiBhODZiZDMxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDEwOjUzOjQ4IDIwMTQgLTA0MDAKIAotMjAxMi0wOS0xNCAgRGF2aWQgRWRlbHNvaG4gIDxkamUuZ2NjQGdtYWlsLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzk4IGZyb20gam9zaHRyaXBsZXR0L3VuY29uZmlndXJlLmhvc3QKKyAgICAKKyAgICBNZXJnZSBjb25maWd1cmUuaG9zdCBpbnRvIGNvbmZpZ3VyZS5hYwogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorY29tbWl0IGE4NmJkMzE4ZTI0MjRkODc5ZDc4NGVlN2IyOWQ2NTM2ZDdhMTdjMTgKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA2OjU4OjU5IDIwMTQgLTA3MDAKIAotMjAxMi0wOC0yNiAgQW5kcmV3IFBpbnNraSAgPGFwaW5za2lAY2F2aXVtLmNvbT4KKyAgICBNZXJnZSBjb25maWd1cmUuaG9zdCBpbnRvIGNvbmZpZ3VyZS5hYworICAgIAorICAgIGNvbmZpZ3VyZS5ob3N0IG9ubHkgaGFzIGEgc2luZ2xlIGVudHJ5LCBhbmQgc2hvd3Mgbm8gc2lnbnMgb2YgbmVlZGluZworICAgIG1vcmUgYWRkZWQuCiAKLQlQUiBsaWJmZmkvNTMwMTQKLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFsbG93IG4zMiB3aXRoIHNvZnQtZmxvYXQgYW5kIG42NCB3aXRoCi0Jc29mdC1mbG9hdC4KK2NvbW1pdCBiNjFiNDcyYmQwNjQ3MDA2ZDY2ODUyMzg3MjEwMDIwMTdmMWQxMTljCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA5OjQ1OjU1IDIwMTQgLTA0MDAKIAotMjAxMi0wOC0wOCAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KKyAgICBVcGRhdGUgdmVyc2lvbiB0byAzLjEtcmMwLiAgQ2xlYW4gdXAgUkVBRE1FLgogCi0JKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEb24ndCBBU1NFUlQgQUJJIHRlc3QsCi0JanVzdCByZXR1cm4gRkZJX0JBRF9BQkkgd2hlbiB0aGluZ3MgYXJlIHdyb25nLgorY29tbWl0IDdhNjRlN2RiYmE1NGU2ZTlmNjk5NTRhZGZiOTQzYmUxODU2ZmY5MjgKK01lcmdlOiAxMWE1YzVjIGVlZjJlMDIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDk6Mzk6MDggMjAxNCAtMDQwMAogCi0yMDEyLTA3LTE4ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5NyBmcm9tIGpvc2h0cmlwbGV0dC9yZW1vdmUtbW9yZS1nZW5lcmF0ZWQtZmlsZXMKKyAgICAKKyAgICBSZW1vdmUgbW9yZSBnZW5lcmF0ZWQgZmlsZXMKIAotCVBSIGxpYmZmaS81Mzk4MgotCVBSIGxpYmZmaS81Mzk3MwotCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQ2hlY2sgX19JTFAzMl9fIGluc3RlYWQgb2YgX19MUDY0X18gZm9yIHgzMi4KLQkoRkZJX1NJWkVPRl9KQVZBX1JBVyk6IERlZmluZWQgdG8gNCBmb3IgeDMyLgorY29tbWl0IDExYTVjNWMzOWY1ODYxMDExZjZjNWRkZjc5NWRhM2EzMmI1ZjAwODIKK01lcmdlOiA5YTYyYTIxIDFjNjhjMDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDk6Mzg6NDcgMjAxNCAtMDQwMAogCi0yMDEyLTA1LTE2ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5NiBmcm9tIGpvc2h0cmlwbGV0dC9zYXdpbmctY2hhbmdlbG9ncworICAgIAorICAgIEdlbmVyYXRlIENoYW5nZUxvZyBmcm9tIGdpdCBpbiBtYWtlIGRpc3Q7IHJlbW92ZSBpdCBmcm9tIHZlcnNpb24gY29udHJvbAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorY29tbWl0IGVlZjJlMDJhMTNkN2QxYzgxNDVkNDdhNjQ0NjdmNjU0NDA2YTM1NDgKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA2OjI2OjAzIDIwMTQgLTA3MDAKIAotMjAxMi0wNS0wNSAgTmljb2xhcyBMZWxvbmcKKyAgICBkb2M6IFJlbW92ZSBhdXRvZ2VuZXJhdGVkIGluZm8gZmlsZSBhbmQgc3RhbXAKIAotCSogbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEZpeGVzLgotCSogUkVBRE1FOiBVcGRhdGUgZm9yIGlPUyBidWlsZHMuCitjb21taXQgOWZiNDAzZDNjNWQ5NjQzZTBmNTYxY2FiNmQ0YTA3YjFlNTQ5MDdmZgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDY6MjU6NTIgMjAxNCAtMDcwMAogCi0yMDEyLTA0LTIzICBBbGV4YW5kcmUgS2V1bmVja2UgSS4gZGUgTWVuZG9uY2EgPGFsZXhhbmRyZS5rZXVuZWNrZUBnbWFpbC5jb20+CisgICAgZmZpY29uZmlnLmguaW46IFJlbW92ZSwgY29uZmlndXJlIGdlbmVyYXRlcyBpdAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBCbGFja2Zpbi9zeXN2IHN1cHBvcnQKLQkqIE1ha2VmaWxlLmFtOiBBZGQgQmxhY2tmaW4vc3lzdiBzdXBwb3J0Ci0JKiBzcmMvYmZpbi9mZmkuYzogIEFkZCBCbGFja2Zpbi9zeXN2IHN1cHBvcnQKLQkqIHNyYy9iZmluL2ZmaXRhcmdldC5oOiBBZGQgQmxhY2tmaW4vc3lzdiBzdXBwb3J0Citjb21taXQgMWM2OGMwNzIxN2ZkYTc4YTc3OTc3OGMxNDgwZmVkZWY3YTU4ZDViNAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDY6MTE6NTggMjAxNCAtMDcwMAogCi0yMDEyLTA0LTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgR2VuZXJhdGUgQ2hhbmdlTG9nIGZyb20gZ2l0IGluIG1ha2UgZGlzdAorICAgIAorICAgIEFyY2hpdmUgdGhlIGV4aXN0aW5nIENoYW5nZUxvZyB0byBDaGFuZ2VMb2cubGliZmZpLTMuMQogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBuZXcgc2NyaXB0LgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgYzY1ZWQ1NWU2NTU3MTFlMDA4MjgyZWRiZGQ4MmNlOTVkMDA4YjRmNgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDU6NTI6MDAgMjAxNCAtMDcwMAogCi0yMDEyLTA0LTExICBaYWNoYXJ5IFdhbGRvd3NraSAgPHp3YWxkb3dza2lAZ21haWwuY29tPgorICAgIENoYW5nZUxvZy52MTogRml4IHR5cG8gaW4gZXhwbGFuYXRvcnkgaGVhZGVyLgogCi0JKiBnZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5LAotCWxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBTdXBwb3J0IGEgTWFjIHN0YXRpYyBsaWJyYXJ5IHZpYQotCVhjb2RlLiBTZXQgaU9TIGNvbXBhdGliaWxpdHkgdG8gNC4wLiAgTW92ZSBpT1MgdHJhbXBvbGluZQotCWdlbmVyYXRpb24gaW50byBhbiBYY29kZSAicnVuIHNjcmlwdCIgcGhhc2UuICBJbmNsdWRlIGJvdGggYXMKLQlYY29kZSBidWlsZCBzY3JpcHRzLiBEb24ndCBhbHdheXMgcmVnZW5lcmF0ZSBjb25maWcgZmlsZXMuCitjb21taXQgOWE2MmEyMWY1YzNhOGUxZGE0NjMyMjlmMzE3MGM4YWIzMDMxZDkyMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwOTowMzo1NyAyMDE0IC0wNDAwCiAKLTIwMTItMDQtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBBZGQgbWlzc2luZyBDaGFuZ2VMb2cgZW50cnkuICBDbGVhbiB1cCBzb21lIGVudHJpZXMuCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEFkZCBtaXNzaW5nIHNlbWljb2xvbi4KK2NvbW1pdCA5YmM3MDRjNThjYjdhMDQ5ZDg2NzgzN2UzYTExZTJlMzE4ODZlYzY2CitNZXJnZTogNjk0NDQ3YSBlODkyZTU4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA4OjQxOjAwIDIwMTQgLTA0MDAKIAotMjAxMi0wNC0wNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTUgZnJvbSBqb3NodHJpcGxldHQvbmV3cworICAgIAorICAgIFJFQURNRTogVXBkYXRlIG5ld3MgZm9yIDMuMC4xNAogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBuZXcgaU9TL3hjb2RlIGZpbGVzLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgZTg5MmU1ODFkMTgzOGEwNmMxOGM3ZWNkNTBlYmQ3OTkxNWNmZjkyYgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDU6Mzg6MjQgMjAxNCAtMDcwMAogCi0yMDEyLTA0LTA2ICBNaWtlIExld2lzICA8bWlrZWxpa2VzcGllQGdtYWlsLmNvbT4KKyAgICBSRUFETUU6IFVwZGF0ZSBuZXdzIGZvciAzLjAuMTQKIAotCSogZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weTogTmV3IGZpbGUuCi0JKiBsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTmV3IGZpbGUuCi0JKiBSRUFETUU6IFVwZGF0ZSBpbnN0cnVjdGlvbnMgb24gYnVpbGRpbmcgaU9TIGJpbmFyeS4KLQkqIGJ1aWxkLWlvcy5zaDogRGVsZXRlLgorY29tbWl0IDY5NDQ0N2FhMjlkZWFkZDU3MWVmYjRlOWEyNmVlM2Y2OGVkZTE0OTMKK01lcmdlOiBmZGM4N2YzIDQ1YTZjMjEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDg6MzI6MDUgMjAxNCAtMDQwMAogCi0yMDEyLTA0LTA2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5MyBmcm9tIGpvc2h0cmlwbGV0dC90cmF2aXMtZGlzdAorICAgIAorICAgIE1ha2UgVHJhdmlzIGNoZWNrICJtYWtlIGRpc3QiCiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoVUlOVDEyOCk6IERlZmluZSBkaWZmZXJlbnRseSBmb3IgSW50ZWwgYW5kIEdOVQotCWNvbXBpbGVycywgdGhlbiB1c2UgaXQuCitjb21taXQgNDVhNmMyMWVmYTk0NGI1MjA4NDJlNjMxZGM1NDkxOWIwNDg4NDc0NAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDU6Mjk6MDggMjAxNCAtMDcwMAogCi0yMDEyLTA0LTA2ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisgICAgLnRyYXZpcy55bWw6IFRlc3QgIm1ha2UgZGlzdCIgdG9vLgogCi0JKiBtNC9saWJ0b29sLm00IChfTFRfRU5BQkxFX0xPQ0spOiBTdXBwb3J0IHgzMi4KK2NvbW1pdCBmZGM4N2YzYjJlYTM3YjU4YTRhOWFlNmMzNTA4M2Y1NDQ5MDlmZTNjCitNZXJnZTogNzQxMmI4MyBlMTkxMWY3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA4OjA1OjUxIDIwMTQgLTA0MDAKIAotMjAxMi0wNC0wNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjODUgZnJvbSBqb3NodHJpcGxldHQvc3RkY2FsbAorICAgIAorICAgIHN0ZGNhbGwgc3VwcG9ydCBvbiBMaW51eAogCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbWlzc2luZyB0ZXN0IGNhc2VzLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IGUxOTExZjc4ZGYxMTNjYTU4NzM4YjY2MDg5YTA3MGQ0Y2Y3NDdkZTcKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDAzOjI1OjUzIDIwMTQgLTA3MDAKIAotMjAxMi0wNC0wNSAgWmFjaGFyeSBXYWxkb3dza2kgIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KKyAgICBBZGQgc3VwcG9ydCBmb3Igc3RkY2FsbCwgdGhpc2NhbGwsIGFuZCBmYXN0Y2FsbCBvbiBub24tV2luZG93cyB4ODYtMzIKKyAgICAKKyAgICBMaW51eCBzdXBwb3J0cyB0aGUgc3RkY2FsbCBjYWxsaW5nIGNvbnZlbnRpb24sIGVpdGhlciB2aWEgZnVuY3Rpb25zCisgICAgZXhwbGljaXRseSBkZWNsYXJlZCB3aXRoIHRoZSBzdGRjYWxsIGF0dHJpYnV0ZSwgb3IgdmlhIGNvZGUgY29tcGlsZWQKKyAgICB3aXRoIC1tcnRkIHdoaWNoIGVmZmVjdGl2ZWx5IG1ha2VzIHN0ZGNhbGwgdGhlIGRlZmF1bHQuCisgICAgCisgICAgVGhpcyBpbnRyb2R1Y2VzIEZGSV9TVERDQUxMLCBGRklfVEhJU0NBTEwsIGFuZCBGRklfRkFTVENBTEwgb24KKyAgICBub24tV2luZG93cyB4ODYtMzIgcGxhdGZvcm1zLCBhcyBub24tZGVmYXVsdCBjYWxsaW5nIGNvbnZlbnRpb25zLgogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgbWlzc2luZyB0cmFtcG9saW5lIHRhYmxlIGZpZWxkcy4KLQkqIHNyYy9hcm0vc3lzdi5TOiBGaXggRU5UUlkgZGVmaW5pdGlvbiwgYW5kIHdyYXAgc3ltYm9sIHJlZmVyZW5jZXMKLQlpbiBDTkFNRS4KLQkqIHNyYy94ODYvZmZpLmM6IFdyYXAgV2luZG93cyBzcGVjaWZpYyBjb2RlIGluIGlmZGVmcy4KK2NvbW1pdCA3NDEyYjgzOGQ1NDNhYWU0ZmE5MjU4NjJiZDU3MDJkM2RhY2JjMjlhCitNZXJnZTogYzBjYzVmZCA5NTMxZDA1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA3OjU4OjE2IDIwMTQgLTA0MDAKIAotMjAxMi0wNC0wMiAgUGV0ZXIgQmVyZ25lciAgPGJlcmduZXJAdm5ldC5pYm0uY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTAgZnJvbSBqb3NodHJpcGxldHQvd2luMzItdW5pZmRlZgorICAgIAorICAgIHByZXBfY2lmLmM6IFJlbW92ZSB1bm5lY2Vzc2FyeSBpZmRlZiBmb3IgWDg2X1dJTjMyCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBEZWNsYXJlIGRvdWJsZV90bXAuCi0JU2lsZW5jZSBjYXN0aW5nIHBvaW50ZXIgdG8gaW50ZWdlciBvZiBkaWZmZXJlbnQgc2l6ZSB3YXJuaW5nLgotCURlbGV0ZSBnb3RvIHRvIHByZXZpb3VzbHkgZGVsZXRlZCBsYWJlbC4KLQkoZmZpX2NhbGwpOiBTaWxlbmNlIHBvc3NpYmx5IHVuZGVmaW5lZCB3YXJuaW5nLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IERlY2xhcmUgdmFyaWFibGUgdHlwZS4KK2NvbW1pdCBjMGNjNWZkYWEyMzdiNjdlODZmMjJkMmY2ZTEzZjNiNDJkOWFhZTMzCitNZXJnZTogOThiNTI5NiBiM2E1ZGEwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA3OjU3OjU5IDIwMTQgLTA0MDAKIAotMjAxMi0wNC0wMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjODkgZnJvbSBqb3NodHJpcGxldHQvdHJhdmlzMzIKKyAgICAKKyAgICAudHJhdmlzLnltbDogVGVzdCBvbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0CiAKLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2NhbGxfd2luMzIpOiBTaWduL3plcm8gZXh0ZW5kIHRoZSByZXR1cm4KLQl2YWx1ZSBpbiB0aGUgSW50ZWwgdmVyc2lvbiBhcyBpcyBhbHJlYWR5IGRvbmUgZm9yIHRoZSBBVCZUIHZlcnNpb24uCi0JKGZmaV9jbG9zdXJlX1NZU1YpOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfU1REQ0FMTCk6IExpa2V3aXNlLgorY29tbWl0IDk1MzFkMDVmNjRjMmE2NzRlMDE5NzE1OGZmYWQ2OGQ2OWYxNzdiZDAKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDAxOjUwOjAyIDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yOSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIHByZXBfY2lmLmM6IFJlbW92ZSB1bm5lY2Vzc2FyeSBpZmRlZiBmb3IgWDg2X1dJTjMyCisgICAgCisgICAgZmZpX3ByZXBfY2lmX2NvcmUgaGFkIGEgc3BlY2lhbCBjYXNlIGZvciBYODZfV0lOMzIsIGNoZWNraW5nIGZvcgorICAgIEZGSV9USElTQ0FMTCBpbiBhZGRpdGlvbiB0byB0aGUgRkZJX0ZJUlNUX0FCSS10by1GRklfTEFTVF9BQkkgcmFuZ2UKKyAgICBiZWZvcmUgcmV0dXJuaW5nIEZGSV9CQURfQUJJLiAgSG93ZXZlciwgb24gWDg2X1dJTjMyLCBGRklfVEhJU0NBTEwKKyAgICBhbHJlYWR5IGZhbGxzIGluIHRoYXQgcmFuZ2UsIG1ha2luZyB0aGUgc3BlY2lhbCBjYXNlIHVubmVjZXNzYXJ5LgorICAgIFJlbW92ZSBpdC4KIAotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpOiBVbmlmeSB0aGUgZnJhbWUKLQlnZW5lcmF0aW9uLCBmaXggdGhlIEVORFAgbGFiZWwgYW5kIHJlbW92ZSB0aGUgc3VycGx1cyB0aGlyZCBhcmcKLQlmcm9tIHRoZSAnbGVhJyBpbnNuLgorY29tbWl0IGIzYTVkYTA2OGFiZDJmMjk4M2Q5ZTY3YWRiZjQxYjBlMGYzNGUzN2YKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTYXQgTWFyIDE1IDIzOjI3OjU2IDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yOSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIC50cmF2aXMueW1sOiBUZXN0IG9uIGJvdGggMzItYml0IGFuZCA2NC1iaXQKIAotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE1ha2UgdGhlICdzdHVicmF3JyBsYWJlbAotCXZpc2libGUgb3V0c2lkZSB0aGUgUFJPQywgc28gdGhhdCBmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwgY2FuIHNlZQotCWl0LiAgQWxzbyBpbnN0cnVjdCB0aGUgYXNzZW1ibGVyIHRvIGFkZCBhIGZyYW1lIHRvIHRoZSBmdW5jdGlvbi4KK2NvbW1pdCA5OGI1Mjk2MDQ4NWEyNjEzOTlmMDgxOTE1ZjM2MDYzZGUzODU0YTVmCitNZXJnZTogMTM0Y2U0YyBmNmRkMTg0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA3OjUxOjMzIDIwMTQgLTA0MDAKIAotMjAxMi0wMy0yMyAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTQgZnJvbSBqb3NodHJpcGxldHQvZXNwLWV4dHJhLXN0YWNrZXJ5LXBlcmNlcHRpb24KKyAgICAKKyAgICBDaGFuZ2VMb2c6IERvY3VtZW50IHRlc3RzdWl0ZSBjaGFuZ2VzIHRvIHJlbW92ZSBmcmFnaWxlIHN0YWNrIHBvaW50ZXIgY2hlY2tzCiAKLQkqIE1ha2VmaWxlLmFtIChBTV9DUFBGTEFHUyk6IEFkZCAtREZGSV9CVUlMRElORy4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogaW5jbHVkZS9mZmkuaC5pbiBbTVNWQ106IEFkZCBfX2RlY2xzcGVjKGRsbGltcG9ydCkgZGVjb3JhdGlvbnMKLQl0byBhbGwgZGF0YSBleHBvcnRzLCB3aGVuIGNvbXBpbGluZyBsaWJmZmkgY2xpZW50cyB1c2luZyBNU1ZDLgorY29tbWl0IGY2ZGQxODQ1NDM0ZGQ1M2UyMjEyOWJlY2RmYTA5MmMwODJkZjMwN2MKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA0OjQ5OjM2IDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yOSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIENoYW5nZUxvZzogRG9jdW1lbnQgdGVzdHN1aXRlIGNoYW5nZXMgdG8gcmVtb3ZlIGZyYWdpbGUgc3RhY2sgcG9pbnRlciBjaGVja3MKIAotCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBuZXcgQUJJIEZGSV9NU19DREVDTCBhbmQKLQltYWtlIGl0IHRoZSBkZWZhdWx0IGZvciBNU1ZDLgotCShGRklfVFlQRV9NU19TVFJVQ1QpOiBOZXcgc3RydWN0dXJlIHJldHVybiBjb252ZW50aW9uLgotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBUd2VhayB0aGUgc3RydWN0dXJlCi0JcmV0dXJuIGNvbnZlbnRpb24gZm9yIEZGSV9NU19DREVDTCB0byBiZSBGRklfVFlQRV9NU19TVFJVQ1QKLQlpbnN0ZWFkIG9mIGFuIG9yZGluYXJ5IEZGSV9UWVBFX1NUUlVDVC4KLQkoZmZpX3ByZXBfYXJncyk6IFRyZWF0IEZGSV9UWVBFX01TX1NUUlVDVCBhcyBGRklfVFlQRV9TVFJVQ1QuCi0JKGZmaV9jYWxsKTogTGlrZXdpc2UuCi0JKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IExpa2V3aXNlLgotCShmZmlfcmF3X2NhbGwpOiBMaWtld2lzZS4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBUcmVhdCBGRklfTVNfQ0RFQ0wgYXMgRkZJX1NZU1YuCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBGb3IgRkZJX1RZUEVfTVNfU1RSVUNULAotCXJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJlc3VsdCBzdHJ1Y3R1cmUgaW4gZWF4IGFuZCBkb24ndCBwb3AKLQl0aGF0IHBvaW50ZXIgZnJvbSB0aGUgc3RhY2ssIHRoZSBjYWxsZXIgdGFrZXMgY2FyZSBvZiBpdC4KLQkoZmZpX2NhbGxfd2luMzIpOiBUcmVhdCBGRklfVFlQRV9NU19TVFJVQ1QgYXMgRkZJX1RZUEVfU1RSVUNULgotCShmZmlfY2xvc3VyZV9yYXdfU1lTVik6IExpa2V3aXNlLgorY29tbWl0IDEzNGNlNGMwMjY2YmY5OTRmMDc1MThmYzUzNGRlNTNmMWQzYzhkZTgKK01lcmdlOiAyNjgwZTllIDljMjc5MzIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDc6NDc6MTcgMjAxNCAtMDQwMAogCi0yMDEyLTAzLTIyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5MSBmcm9tIGpvc2h0cmlwbGV0dC9lc3AtZXh0cmEtc3RhY2tlcnktcGVyY2VwdGlvbgorICAgIAorICAgIHRlc3RzdWl0ZTogUmVtb3ZlIGZyYWdpbGUgc3RhY2sgcG9pbnRlciBjaGVja3MKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIFtNU1ZDXTogQWRkIGlubGluZQotCWFzc2VtYmx5IHZlcnNpb24gd2l0aCBJbnRlbCBzeW50YXguCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jIFtNU1ZDXTogTGlrZXdpc2UuCitjb21taXQgOWMyNzkzMjhlZTEyZmM4NjlhZGZmNjNjYTgxZjEyMzA5NzdiZDQyYgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDI6MzE6MTkgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTIzICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgdGVzdHN1aXRlOiBSZW1vdmUgZnJhZ2lsZSBzdGFjayBwb2ludGVyIGNoZWNrcworICAgIAorICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBhbmQKKyAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jIGluY2x1ZGUgaW5saW5lIGFzc2VtYmx5IHRvIHNhdmUKKyAgICB0aGUgc3RhY2sgcG9pbnRlciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjYWxsLCBhbmQgY29tcGFyZSB0aGUgdmFsdWVzLgorICAgIEhvd2V2ZXIsIGNvbXBpbGVycyBjYW4gYW5kIGRvIGxlYXZlIHRoZSBzdGFjayBpbiBkaWZmZXJlbnQgc3RhdGVzIGZvcgorICAgIHRoZXNlIHR3byBwaWVjZXMgb2YgaW5saW5lIGFzc2VtYmx5LCBzdWNoIGFzIGJ5IHNhdmluZyBhIHRlbXBvcmFyeSB2YWx1ZQorICAgIG9uIHRoZSBzdGFjayBhY3Jvc3MgdGhlIGNhbGw7IG9ic2VydmVkIHdpdGggZ2NjIC1PcywgYW5kIHZlcmlmaWVkIGFzCisgICAgc3B1cmlvdXMgdGhyb3VnaCBjYXJlZnVsIGluc3BlY3Rpb24gb2YgZGlzYXNzZW1ibHkuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IFByb3ZpZGUgYWJzdHJhdGlvbiBvZgotCV9fYXR0cmlidXRlX18oKGZhc3RjYWxsKSkgaW4gdGhlIGZvcm0gb2YgYSBfX0ZBU1RDQUxMX18KLQlkZWZpbmUuICBEZWZpbmUgaXQgdG8gX19mYXN0Y2FsbCBmb3IgTVNWQy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYzogVXNlIHRoZSBhYm92ZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmM6IExpa2V3aXNlLgorY29tbWl0IDI2ODBlOWVhOWI0Yzg3ZWE4MDQyYTYxZTU1MWJkNjY3NDkzZDRiZDMKK01lcmdlOiAwNzFlYWIzIDgyZjhjYjIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDc6NDQ6MDggMjAxNCAtMDQwMAogCi0yMDEyLTAzLTIyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM4OCBmcm9tIGpvc2h0cmlwbGV0dC9zdWNoLXByZWNpc2lvbi1tYW55LWZhaWwtd293CisgICAgCisgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYzogQXZvaWQgc3B1cmlvdXMgZmFpbHVyZSBkdWUgdG8gZXhjZXNzIHByZWNpc2lvbgogCi0JKiBzcmMveDg2L3dpbjMyLlMgW01TVkNdIChmZmlfY2xvc3VyZV9USElTQ0FMTCk6IFJlbW92ZSB0aGUgbWFudWFsCi0JZnJhbWUgb24gZnVuY3Rpb24gZW50cnksIE1BU00gYWRkcyBvbmUgYXV0b21hdGljYWxseS4KK2NvbW1pdCA4MmY4Y2IyNGExZDk3NmRiMzVhZTMxYTRiODZjZWM4OTI2ZGEzMjdkCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNDoyNzozMiAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBDaGFuZ2VMb2c6IERvY3VtZW50IG1hbnkuYyBhbmQgbWFueV93aW4zMi5jIGNoYW5nZXMgdG8gYXZvaWQgc3B1cmlvdXMgZmFpbHVyZXMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBbTVNWQ106IEFkZCBrbHVkZ2UgZm9yIG1pc3NpbmcKLQliaXRzIGluIHRoZSBNU1ZDIGhlYWRlcnMuCitjb21taXQgODhkNTYyYThiNTkxMmU5OTMwNjA2M2ZlM2JjMjg5YmFiNmNhNmViZQorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFNhdCBNYXIgMTUgMjI6MDg6MTkgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTIyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogQXZvaWQgc3B1cmlvdXMgZmFpbHVyZSBkdWUgdG8gZXhjZXNzIHByZWNpc2lvbgorICAgIAorICAgIFRoZSB0ZXN0IGNhc2UgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYyBjYW4gc3B1cmlvdXNseSBmYWlsIGR1ZQorICAgIHRvIGV4Y2VzcyBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24uICBJbnN0cnVtZW50aW5nIGl0IHdpdGggc29tZSBwcmludGYKKyAgICBjYWxscyBzaG93cyBkaWZmZXJlbmNlcyB3ZWxsIGFib3ZlIEZMVF9FUFNJTE9OLiAgKE5vdGUgd2hlbgorICAgIGluc3RydW1lbnRpbmcgaXQgdGhhdCBtdWx0aXBsZSBjb21wdXRhdGlvbnMgb2YgdGhlIGRpZmZlcmVuY2UsIHN1Y2ggYXMKKyAgICBvbmUgaW4gYSBwcmludCBhbmQgYW5vdGhlciBpbiB0aGUgY29uZGl0aW9uYWwsIG1heSBwcm9kdWNlIGRpZmZlcmVudAorICAgIHJlc3VsdHMuKQorICAgIAorICAgIFJhdGhlciB0aGFuIGNvbXBsaWNhdGluZyB0aGUgdGVzdCBzdWl0ZSB3aXRoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncworICAgIHRvIGF2b2lkIGV4Y2VzcyBwcmVjaXNpb24sIGp1c3Qgc2ltcGxpZnkgdGhlIGZsb2F0aW5nLXBvaW50IGNvbXB1dGF0aW9uCisgICAgdG8gYXZvaWQgYSBkZXBlbmRlbmN5IG9uIHBvdGVudGlhbCBleGNlc3MgcHJlY2lzaW9uLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBBZGp1c3QgdG8gdGhlIEM4OSBzdHlsZQotCXdpdGggbm8gZGVjbGFyYXRpb25zIGFmdGVyIHN0YXRlbWVudHMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmM6IExpa2V3aXNlLgorY29tbWl0IGMwMGE0OWVjZDE2NWIyZDA2YzFjOWIyNDlkMjEyZGM4NDNmYTExNmYKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTYXQgTWFyIDE1IDIyOjA4OjE5IDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yMSAgUGV0ZXIgUm9zaW4JIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmM6IEF2b2lkIHNwdXJpb3VzIGZhaWx1cmUgZHVlIHRvIGV4Y2VzcyBwcmVjaXNpb24KKyAgICAKKyAgICBUaGUgdGVzdCBjYXNlIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMgY2FuIHNwdXJpb3VzbHkgZmFpbCBkdWUgdG8KKyAgICBleGNlc3MgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLiAgSW5zdHJ1bWVudGluZyBpdCB3aXRoIHNvbWUgcHJpbnRmCisgICAgY2FsbHMgc2hvd3MgZGlmZmVyZW5jZXMgd2VsbCBhYm92ZSBGTFRfRVBTSUxPTi4gIChOb3RlIHdoZW4KKyAgICBpbnN0cnVtZW50aW5nIGl0IHRoYXQgbXVsdGlwbGUgY29tcHV0YXRpb25zIG9mIHRoZSBkaWZmZXJlbmNlLCBzdWNoIGFzCisgICAgb25lIGluIGEgcHJpbnQgYW5kIGFub3RoZXIgaW4gdGhlIGNvbmRpdGlvbmFsLCBtYXkgcHJvZHVjZSBkaWZmZXJlbnQKKyAgICByZXN1bHRzLikKKyAgICAKKyAgICBSYXRoZXIgdGhhbiBjb21wbGljYXRpbmcgdGhlIHRlc3Qgc3VpdGUgd2l0aCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MKKyAgICB0byBhdm9pZCBleGNlc3MgcHJlY2lzaW9uLCBqdXN0IHNpbXBsaWZ5IHRoZSBmbG9hdGluZy1wb2ludCBjb21wdXRhdGlvbgorICAgIHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBvbiBwb3RlbnRpYWwgZXhjZXNzIHByZWNpc2lvbi4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0X3ZhLmMgKGZsb2F0X3ZhX2ZuKTogVXNlICVmIHdoZW4KLQlwcmludGluZyBkb3VibGVzICglbGYgaXMgZm9yIGxvbmcgZG91YmxlcykuCi0JKG1haW4pOiBMaWtld2lzZS4KK2NvbW1pdCAwNzFlYWIzMmE3ZjlmYmJlZjQ2YzBkOGYzN2Q5OTg1YmM5Y2NlYjM3CitNZXJnZTogMjIyOGM3YSAyZjQ0OTUyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA3OjM2OjUyIDIwMTQgLTA0MDAKIAotMjAxMi0wMy0yMSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTIgZnJvbSBqb3NodHJpcGxldHQvYXV0b2dlbgorICAgIAorICAgIFJlLWFkZCBsaWJ0b29sLWxkZmxhZ3MKIAotCSogdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHAgWyotKi1jeWd3aW4qLCAqLSotbWluZ3cqXQotCShzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogQWRkIHRoZSBsaWJyYXJ5IHNlYXJjaCBkaXIgdG8gUEFUSAotCShhbmQgc2F2ZSBQQVRIIGZvciBsYXRlcikuCi0JKHJlc3RvcmVfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogUmVzdG9yZSBQQVRILgorY29tbWl0IDJmNDQ5NTJjOTU3NjVjMTQ4NmZhZDY2ZjU3MjM1ZjhkNDU5YTk3NDgKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA0OjM1OjEyIDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yMSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIFJlLWFkZCBsaWJ0b29sLWxkZmxhZ3MKIAotCSogdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHAgWyotKi1jeWd3aW4qLCAqLSotbWluZ3cqXQotCShzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogQWRkIHRoZSBsaWJyYXJ5IHNlYXJjaCBkaXIgdG8gUEFUSAotCShhbmQgc2F2ZSBQQVRIIGZvciBsYXRlcikuCi0JKHJlc3RvcmVfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogUmVzdG9yZSBQQVRILgorY29tbWl0IDIyMjhjN2FiMTkwZjNjNTI5YjkwMTg0OTU0NjdiODQxZmEyMWNiYTIKK01lcmdlOiA3NmQxOWQwIDM1NjM0ZGIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDc6MjU6MTggMjAxNCAtMDQwMAogCi0yMDEyLTAzLTIwICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM4NyBmcm9tIGpvc2h0cmlwbGV0dC9hdXRvZ2VuCisgICAgCisgICAgUmVtb3ZlIGF1dG9nZW5lcmF0ZWQgZmlsZXMgZnJvbSB0aGUgcmVwb3NpdG9yeQogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jIChtYWluKTogUmVtb3ZlIGJ1Zy4KLQkqIHNyYy94ODYvd2luMzIuUyBbTVNWQ10gKGZmaV9jbG9zdXJlX1NZU1YpOiBNYWtlIHRoZSAnc3R1YicgbGFiZWwKLQl2aXNpYmxlIG91dHNpZGUgdGhlIFBST0MsIHNvIHRoYXQgZmZpX2Nsb3N1cmVfVEhJU0NBTEwgY2FuIHNlZSBpdC4KK2NvbW1pdCAzNTYzNGRiY2VhYWMwYTE1NDRmNzM4NWFkZGMwMWQyMWVmMWVmNmE4CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU2F0IE1hciAxNSAxODoxMToxNiAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjAgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBSZW1vdmUgYXV0b2dlbmVyYXRlZCBmaWxlcyBmcm9tIHRoZSByZXBvc2l0b3J5CisgICAgCisgICAgQWRkIGFuIGF1dG9nZW4uc2ggdG8gcmVnZW5lcmF0ZSB0aGVtLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jIChtYWluKTogUmVtb3ZlIGJ1Zy4KLQkqIHNyYy94ODYvd2luMzIuUyBbTVNWQ10gKGZmaV9jbG9zdXJlX1NZU1YpOiBNYWtlIHRoZSAnc3R1YicgbGFiZWwKLQl2aXNpYmxlIG91dHNpZGUgdGhlIFBST0MsIHNvIHRoYXQgZmZpX2Nsb3N1cmVfVEhJU0NBTEwgY2FuIHNlZSBpdC4KK2NvbW1pdCA3NmQxOWQwMDRlMzZlOTlkMjYxZWU3ODI2MWUyZjUyY2VhNWU0YWIxCitNZXJnZTogYzg2ZDliNiBhMWE2ZjcxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgTWFyIDE0IDE2OjU0OjMxIDIwMTQgLTA0MDAKIAotMjAxMi0wMy0xOSAgQWxhbiBIb3VyaWhhbmUgIDxhbGFuaEBmYWlybGl0ZS5jby51az4KKyAgICBFbnN1cmUgdGhlIGxpbmtlciBzdXBwb3J0cyBAdW53aW5kIHNlY3Rpb25zIGluIGxpYmZmaS4KIAotCSogc3JjL202OGsvZmZpLmM6IEFkZCBNSU5UIHN1cHBvcnQuCi0JKiBzcmMvbTY4ay9zeXN2LlM6IERpdHRvLgorY29tbWl0IGM4NmQ5YjZjYzZlMTZlZTI2Mjg0NGEzM2I0MDQ0MTM3NDQwMDc1OGMKK01lcmdlOiA0ZWZiN2RiIGY4Y2RmMTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBNYXIgMTQgMTY6NTE6MjAgMjAxNCAtMDQwMAogCi0yMDEyLTAzLTA2ICBDaHVuZy1MaW4gVGFuZyAgPGNsdGFuZ0Bjb2Rlc291cmNlcnkuY29tPgorICAgIEZpeCBtZXJnZQogCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfY2FsbCk6IEFkZCBfX0FSTV9FQUJJX18gZ3VhcmQgYXJvdW5kIGNhbGwgdG8KLQlmZmlfY2FsbF9WRlAoKS4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBZGQgX19BUk1fRUFCSV9fIGd1YXJkIGFyb3VuZCB1c2Ugb2YKLQlmZmlfY2xvc3VyZV9WRlAuCi0JKiBzcmMvYXJtL3N5c3YuUzogQWRkIF9fQVJNX0VBQklfXyBndWFyZCBhcm91bmQgVkZQIGNvZGUuCitjb21taXQgNGVmYjdkYmZkOTQyN2M0NzhhOTQ4Y2QwZDQ2NDIxMDEyM2RiOGRlOAorTWVyZ2U6IDYzNGE0NzUgMThlYjgxZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIE1hciAxNCAxNjo0Nzo1NyAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMTkgIGNoZW5uYW0gIDxjc2l0QGF4d2F5LmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzgxIGZyb20gcnZhbmRlcm1ldWxlbi9idWctNzU2NzQwCisgICAgCisgICAgQWxsb3cgYnVpbGRpbmcgZm9yIG1pcHNlbCB3aXRoIEFuZHJvaWQgTkRLIHI4LgogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IEFJWCBjbG9zdXJlCi0Jc3VwcG9ydC4KK2NvbW1pdCBhMWE2ZjcxYmZlNDE5OTI5MzA0M2IyZTRjZmI0YzhkM2NiMTExMmY5CitBdXRob3I6IFJ5YW4gVmFuZGVyTWV1bGVuIDxyeWFudm1AZ21haWwuY29tPgorRGF0ZTogICBNb24gTWFyIDEwIDE1OjEyOjQ3IDIwMTQgLTA0MDAKIAotMjAxMi0wMy0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgUmVtb3ZlIHN0cmF5IGh1bmsgdGhhdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoaXMgcGF0Y2guCiAKLQkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEb24ndCBBU1NFUlQgQUJJIHRlc3QsCi0JanVzdCByZXR1cm4gRkZJX0JBRF9BQkkgd2hlbiB0aGluZ3MgYXJlIHdyb25nLgotCSogc3JjL3NoNjQvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCitjb21taXQgZjhjZGYxMTQ2NzE4MWYyYTlhNmI3ZTc0ODE2NzU2OWFhNThlM2E4MQorQXV0aG9yOiBSeWFuIFZhbmRlck1ldWxlbiA8cnlhbnZtQGdtYWlsLmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxMCAxNTowNDo1OCAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMDkgIERhdmlkIEVkZWxzb2huICA8ZGplLmdjY0BnbWFpbC5jb20+CisgICAgUmVwbGFjZSBkb3VibGUgcXVvdGVzIHdpdGggc2luZ2xlIHF1b3RlcyBpbiBNYWtlZmlsZS5pbiB0byBpbXByb3ZlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBzb21lIHZlcnNpb25zIG9mIE1TWVMgYW5kIGdtYWtlLiBGcm9tIE1vemlsbGEgYnVnIDk0MzcyOC4KKyAgICBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM3MjgKIAotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfQVNNKTogQWRqdXN0IGZvciBEYXJ3aW42NAotCWNoYW5nZSB0byByZXR1cm4gdmFsdWUgb2YgZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiBhbmQgbG9hZCB0eXBlCi0JZnJvbSByZXR1cm4gdHlwZS4KK2NvbW1pdCBkZmEzNzM4NzMyZTFiYzNhN2Y0MTMwMzk1YWU0YmFiNTVmY2ViYjk5CitBdXRob3I6IFJ5YW4gVmFuZGVyTWV1bGVuIDxyeWFudm1AZ21haWwuY29tPgorRGF0ZTogICBNb24gTWFyIDEwIDE0OjUzOjQ4IDIwMTQgLTA0MDAKIAotMjAxMi0wMy0wMyAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorICAgIEVuc3VyZSB0aGUgbGlua2VyIHN1cHBvcnRzIEB1bndpbmQgc2VjdGlvbnMgaW4gbGliZmZpLiBGcm9tIE1vemlsbGEgYnVnIDc1Njc0MC4KKyAgICBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg0MTQKKyAgICAKKyAgICBBbHNvIHRyYWNrZWQgYXMgaXNzdWUgIzQyLgorICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS9pc3N1ZXMvNDIKIAotCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfY2FsbCk6IENhc3QgdGhlIHJldHVybiB2YWx1ZSB0byB1bnNpZ25lZAotCWxvbmcuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQ2FzdCB0byA2NGJpdCBhZGRyZXNzIGluIHRyYW1wb2xpbmUuCi0JKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IENhc3QgcmV0dXJuIHBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZwotCWZpcnN0LgorY29tbWl0IDE4ZWI4MWQwMzJmMjlkNjQ1ZDA0OThiYTkyYmRkZmQ2NTFmMDA5YWUKK0F1dGhvcjogUnlhbiBWYW5kZXJNZXVsZW4gPHJ5YW52bUBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTAgMTQ6NDM6MzcgMjAxNCAtMDQwMAogCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oIChGRklfU0laRU9GX0FSRyk6IERlZmluZWQgdG8gOCBmb3IgeDMyLgotCShmZmlfYXJnKTogU2V0IHRvIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgeDMyLgotCShmZmlfc2FyZyk6IFNldCB0byBsb25nIGxvbmcgZm9yIHgzMi4KKyAgICBBbGxvdyBidWlsZGluZyBmb3IgbWlwc2VsIHdpdGggQW5kcm9pZCBOREsgcjguIEZyb20gTW96aWxsYSBidWcgNzU2NzQwLgorICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Njc0MAogCi0yMDEyLTAzLTAzICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+Citjb21taXQgMjM0OWZlYzlhODE4ZmI1MmZkMmYyOTRiY2JjN2IzMTU2Y2QxMTNkZQorQXV0aG9yOiBEYWlraSBVZW5vIDx1ZW5vQGdudS5vcmc+CitEYXRlOiAgIFdlZCBNYXIgNSAxNzo1MzowMiAyMDE0ICswOTAwCiAKLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWZfY29yZSk6IFByb3Blcmx5IGNoZWNrIGJhZCBBQkkuCisgICAgRml4IHR5cG8gaW4gZG9jCiAKLTIwMTItMDMtMDMgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSAgPHlsYXR1eWFAZ21haWwuY29tPgorY29tbWl0IDYzNGE0NzVlYWYxYmVlMzFjMDlmN2Q1MTllMzFjMTNiNjRjZDI0ZGYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMSAxODozNzoyOSAyMDE0IC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIC1uby11bmRlZmluZWQgZm9yIGJvdGggMzItIGFuZCA2NC1iaXQgeDg2Ci0Jd2luZG93cy1saWtlIGhvc3RzLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIFVwZGF0ZSBNYWtlZmlsZSBmb3IgbmV3IGRhcndpbiBzY3JpcHRzCiAKLTIwMTItMDItMjcgIE1pa2FlbCBQZXR0ZXJzc29uICA8bWlrcGVAaXQudXUuc2U+Citjb21taXQgYzdiNjdlODc0YmI4OTg1OWY5YTA3ZDFjZjk2MDYwNTJiNmMwZGNjMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxIDE4OjM0OjE4IDIwMTQgLTA1MDAKIAotCVBSIGxpYmZmaS81MjIyMwotCSogTWFrZWZpbGUuYW0gKEZMQUdTX1RPX1BBU1MpOiBEZWZpbmUuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBBZGQgUkVBRE1FIG5vdGUKIAotMjAxMi0wMi0yMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGEwNGUzMGJhM2RjMzAzMTMzZDQ1OWMxYWMyNzNjZWVmZTRkNDliMzIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMTc6MjA6NTkgMjAxNCAtMDUwMAogCi0JKiBzcmMvKi9mZml0YXJnZXQuaDogRW5zdXJlIHRoYXQgdXNlcnMgbmV2ZXIgaW5jbHVkZSBmZml0YXJnZXQuaAotCWRpcmVjdGx5LgorICAgIEFkZCBtaXNzaW5nIC1ERkZJX0RFQlVHIGZsYWcKIAotMjAxMi0wMi0yMyAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+Citjb21taXQgOTM0ZGMxYjVjOGQ2YTllNzI3YmVkYzcyMzQyODMxZWI3ZDYyYzM1ZgorTWVyZ2U6IDExZDdhYTkgNjdmYmVmMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMToxMDoxNyAyMDE0IC0wNTAwCiAKLQlQUiBsaWJmZmkvNTIyMjEKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCk6IE5ldwotCXByb3RvdHlwZS4KLQkoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogVXNlIGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCBmb3IKLQl0aGlzY2FsbC1jb252ZW50aW9uLgotCShmZmlfcmF3X2NhbGwpOiBVc2UgZmZpX3ByZXBfYXJnc19yYXcuCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCk6IEFkZAotCWltcGxlbWVudGF0aW9uIGZvciBzdHViLgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0yMDEyLTAyLTEwICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KK2NvbW1pdCAxMWQ3YWE5ZDdhNGJiZTY0Mjk0NGVkYzBmMDdjZjk2ZGI5YjI3MGI2CitNZXJnZTogYjQwYWVkYSAzYjQ0ZDQxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAxOjA2OjQ4IDIwMTQgLTA1MDAKIAotCSogY29uZmlndXJlLmFjIChBTV9MVExERkxBR1MpOiBBZGQgLW5vLXVuZGVmaW5lIGZvciB4NjQKLQl3aW5kb3dzIHRhcmdldC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM0NiBmcm9tIG1ha290b2thdG8vYW5kcm9pZC1jbGFuZworICAgIAorICAgIEZpeCBidWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcgY2xhbmcgZm9yIEFuZHJvaWQKIAotMjAxMi0wMi0wOCAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+Citjb21taXQgNjdmYmVmM2I1NmZmMGVmODhmOWIxYTdmZTQ4Y2I3NzIyMmZhNmNlYworTWVyZ2U6IGI0MGFlZGEgM2I0NGQ0MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMTowNjo0OCAyMDE0IC0wNTAwCiAKLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBBbGxvdyBmb3IgWDg2X1dJTjMyCi0JYWxzbyBGRklfVEhJU0NBTEwuCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9USElTQ0FMTCk6IEFkZCBwcm90b3R5cGUuCi0JKEZGSV9JTklUX1RSQU1QT0xJTkVfVEhJU0NBTEwpOiBOZXcgdHJhbXBvbGluZSBjb2RlLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFkZCBGRklfVEhJU0NBTEwgc3VwcG9ydC4KLQkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBBZGp1c3Qgc2l6ZS4KLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfVEhJU0NBTEwpOiBOZXcgY2xvc3VyZSBjb2RlCi0JZm9yIHRoaXNjYWxsLWNhbGxpbmcgY29udmVudGlvbi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmM6IE5ldyB0ZXN0LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNDYgZnJvbSBtYWtvdG9rYXRvL2FuZHJvaWQtY2xhbmcKKyAgICAKKyAgICBGaXggYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIGNsYW5nIGZvciBBbmRyb2lkCiAKLTIwMTItMDEtMjggIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorY29tbWl0IGI0MGFlZGEzMWE3NGQ5NWEzN2M3MjNiNjI0M2FhYmFjNDY2ZTY3YzQKK01lcmdlOiAyMDY5OGFiIDUzY2VhZjEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDE6MDE6MjkgMjAxNCAtMDUwMAogCi0JKiBzcmMvbGliZmZpL3NyYy94ODYvZmZpLmMgKGZmaV9jYWxsX3dpbjMyKTogQWRkIG5ldwotCWFyZ3VtZW50IHRvIHByb3RvdHlwZSBmb3Igc3BlY2lmeSBjYWxsaW5nLWNvbnZlbnRpb24uCi0JKGZmaV9jYWxsKTogQWRkIHN1cHBvcnQgZm9yIHN0ZGNhbGwvdGhpc2NhbGwgY29udmVudGlvbi4KLQkoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgotCShmZmlfcmF3X2NhbGwpOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX1RISVNDQUxMIGFuZAotCUZGSV9GQVNUQ0FMTC4KLQkqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jYWxsX3dpbjMyKTogQWRkIHN1cHBvcnQgZm9yCi0JZmFzdGNhbGwvdGhpc2NhbGwgY2FsbGluZy1jb252ZW50aW9uIGNhbGxzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jOiBOZXcgdGVzdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYzogTmV3IHRlc3QuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmM6IE5ldyB0ZXN0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYzogTmV3IHRlc3QuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTJfd2luMzIuYzogTmV3IHRlc3QuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jOiBOZXcgdGVzdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmM6IE5ldyB0ZXN0LgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0yMDEyLTAxLTIzICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorY29tbWl0IDUzY2VhZjE0YzVlZWIxNmJhMDk3NDVmMGNhODdjY2EzNjdkNDFhOTAKK01lcmdlOiA4NjBmZTY2IGNjOWI1MTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDE6MDE6MDIgMjAxNCAtMDUwMAogCi0JKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQ2hlY2sgZm9yIGJhZCBBQkkuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM0MCBmcm9tIHdvamR5ci9tYXN0ZXIKKyAgICAKKyAgICBDb3JyZWN0IHRoZSAtTCBmbGFnIGluIGxpYmZmaS5wYy5pbgogCi0yMDEyLTAxLTIzICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Ci0JICAgIENocmlzIFlvdW5nICA8Y2R5b3VuZ0BudGx3b3JsZC5jb20+Citjb21taXQgMjA2OThhYmM2YTAwMDkyZmQ3ZmQzZTQzNGEzYTI5ZGMwZjA0OGYxZQorTWVyZ2U6IDY0YmQwNjkgMWEwYjAxZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDo1NjoyNyAyMDE0IC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIEFtaWdhIHN1cHBvcnQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM2NiBmcm9tIHBwaXphcnJvL21hc3RlcgorICAgIAorICAgIEJsYWNrRmluIGZpeGVzIC0gRmF0YWwgZXJyb3Igd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIHNoYXJlZCBsaWJyYXJ5IGZyb20gd2l0aGluIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgRkZJCiAKLTIwMTItMDEtMjMgIERtaXRyeSBOYWRlemhpbiAgPGRtaXRyeS5uYWRlemhpbkBnbWFpbC5jb20+Citjb21taXQgODYwZmU2NjQ2ZjVhZTYwM2U5OWE4ZDFkNzIyZGRkZGJhOGI3NTc2OQorTWVyZ2U6IDY0YmQwNjkgMWEwYjAxZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDo1NjoyNyAyMDE0IC0wNTAwCiAKLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChMSUtFTFksIFVOTElLRUxZKTogRml4IGRlZmluaXRpb25zLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNjYgZnJvbSBwcGl6YXJyby9tYXN0ZXIKKyAgICAKKyAgICBCbGFja0ZpbiBmaXhlcyAtIEZhdGFsIGVycm9yIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBzaGFyZWQgbGlicmFyeSBmcm9tIHdpdGhpbiB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IEZGSQogCi0yMDEyLTAxLTIzICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBsaW51eC1tNjhrLm9yZz4KK2NvbW1pdCA2NGJkMDY5OTBhN2FjY2Y3MjI3MTUxNmEyMTEwYjg2Y2RjY2Q4ZGY0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjUyOjU2IDIwMTQgLTA1MDAKIAotCSogc3JjL202OGsvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogUHJvcGVybHkgdGVzdCBmb3IgcGxhaW4KLQltYzY4MDAwLiAgVGVzdCBmb3IgX19IQVZFXzY4ODgxX18gaW4gYWRkaXRpb24gdG8gX19NQzY4ODgxX18uCisgICAgQWRkIENoYW5nZUxvZyBlbnRyeSBmb3IgSm9zaCdzIGNoYW5nZQogCi0yMDEyLTAxLTE5ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KK2NvbW1pdCBlZGYyOWM1MTY5YjA2ZmNmYzI0MTQ0NWUxNTJlMzI1YmMzYzUwZTBlCitNZXJnZTogMzNjOTk1NCAzOTk4ZDI2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjUwOjI1IDIwMTQgLTA1MDAKIAotCVBSIHJ0bC1vcHRpbWl6YXRpb24vNDg0OTYKLQkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfY2FsbCk6IEZpeCB1cCBhbGlhc2luZyB2aW9sYXRpb25zLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNzUgZnJvbSBqb3NodHJpcGxldHQvbG9uZ2RvdWJsZQorICAgIAorICAgIEZpeCBidWlsZCBlcnJvciBvbiB4ODYgd2l0aG91dCBkaXN0aW5jdCBsb25nIGRvdWJsZQogCi0yMDEyLTAxLTA5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCAzM2M5OTU0ZjJlZWM1MzkwMTFhMGY5MzI3MGFhZjAxMzMxODgzN2FlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjM4OjQxIDIwMTQgLTA1MDAKIAotCSogY29uZmlndXJlLmFjIChpPzg2LSotKik6IFNldCBUQVJHRVQgdG8gWDg2XzY0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIFJlYnVpbHQgd2l0aCBuZXcgbGlidG9vbAogCi0yMDExLTEyLTA3ICBBbmRyZXcgUGluc2tpICA8YXBpbnNraUBjYXZpdW0uY29tPgorY29tbWl0IDkyNmI2OTg5ZmJkMDg0ODhiOTEwNTk0MzI5MzM1M2Q0NWFjNTI3ZTAKK01lcmdlOiA1YTg4Yzg1IGNjODIwNTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6MjY6NTcgMjAxNCAtMDUwMAogCi0JUFIgbGliZmZpLzUwMDUxCi0JKiBzcmMvbWlwcy9uMzIuUzogQWRkICIuc2V0IG1pcHM0Ii4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCUNoYW5nZUxvZwogCi0yMDExLTExLTIxICBBbmRyZWFzIFRvYmxlciAgPGFuZHJlYXN0QGZnem5ldC5jaD4KK2NvbW1pdCA1YTg4Yzg1ZmRlMzA0MDUyYmVkMTU4MWVkMGI2NDUyYWMyYzY4ODM4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjIzOjA0IDIwMTQgLTA1MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIEZpeCBzcGVsbGluZyBlcnJvcnMKIAotMjAxMS0xMS0xMiAgRGF2aWQgR2lsYmVydCA8ZGF2aWQuZ2lsYmVydEBsaW5hcm8ub3JnPgorY29tbWl0IGNjODIwNTFjN2U4MGNlYTc3MmM0YjcyZGEwMjZlYjdlNjhkNTk4ZmMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6MjM6MDQgMjAxNCAtMDUwMAogCi0JKiBkb2MvbGliZmZpLnRleGksIGluY2x1ZGUvZmZpLmguaW4sIGluY2x1ZGUvZmZpX2NvbW1vbi5oLAotCW1hbi9NYWtlZmlsZS5hbSwgbWFuL2ZmaS4zLCBtYW4vZmZpX3ByZXBfY2lmLjMsCi0JbWFuL2ZmaV9wcmVwX2NpZl92YXIuMywgc3JjL2FybS9mZmkuYywgc3JjL2FybS9mZml0YXJnZXQuaCwKLQlzcmMvY3Jpcy9mZmkuYywgc3JjL3ByZXBfY2lmLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXRfdmEuYzogTWFueSBjaGFuZ2VzIHRvIHN1cHBvcnQgdmFyaWFkaWMKLQlmdW5jdGlvbiBjYWxscy4KKyAgICBGaXggc3BlbGxpbmcgZXJyb3JzCiAKLTIwMTEtMTEtMTIgIEt5bGUgTW9mZmV0dCA8S3lsZS5ELk1vZmZldHRAYm9laW5nLmNvbT4KK2NvbW1pdCAwMDFhYWY0YjFiNTYzNDk1OTZiYjZmNmI1YzE2MTNkY2JiZDg0ZWE4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjIwOjE3IDIwMTQgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMsIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oLAotCXNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMsIHNyYy9wb3dlcnBjL3N5c3YuUzogTWFueSBjaGFuZ2VzIGZvcgotCXNvZnRmbG9hdCBwb3dlcnBjIHZhcmlhbnRzLgorICAgIFdoZW4gbm8gVkZQIGFyZ3VtZW50cyBhcmUgcHJlc2VudCB0aGUgSVAgcmVnaXN0ZXIgaXMgdXNlZAorICAgIHVuaW5pdGlhbGl6ZWQuIEluaXRpYWxpemUgaXQgdG8gdGhlIHZhbHVlIG9mIEZQLgorICAgIAorICAgIFRoaXMgZml4ZXMgYSBudW1iZXIgb2YgdGVzdHN1aXRlIGZhaWx1cmVzIHdoZW4gY29uZmlndXJlZCBmb3IKKyAgICBhcm12N2wtdW5rbm93bi1saW51eC1nbnVlYWJpaGYKIAotMjAxMS0xMS0xMiAgUGV0ciBTYWxpbmdlciA8UGV0ci5TYWxpbmdlckBzZXpuYW0uY3o+Citjb21taXQgNDlmNzcyOWMzY2U2OTdjMTI0MDhjNDJjY2IyOWNkZjRlYjY2YmI4NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDoxNzoxNiAyMDE0IC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSk6IEZpeCBrZnJlZWJzZCBzdXBwb3J0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIGFhcmNoNjQgZml4CiAKLTIwMTEtMTEtMTIgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KK2NvbW1pdCA0NDc0ODNkNTFjNmFhOWRmNzExNmYzNDZhNzNmYzFjZjc5NWY0YzJiCitNZXJnZTogNTEzNzdiZCBiNGRmOWNmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDI3IDE1OjQyOjQxIDIwMTQgLTA1MDAKIAotCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogTWF4Ci0JYWxpZ25tZW50IG9mIDQgZm9yIHdpbmNlIG9uIEFSTS4KKyAgICBGaXggQ2hhbmdlTG9nIG1lcmdlCiAKLTIwMTEtMTEtMTIgIEt5bGUgTW9mZmV0dCA8S3lsZS5ELk1vZmZldHRAYm9laW5nLmNvbT4KLQkgICAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgMzk5OGQyNjA0YjVjMGQ0NWEwOThmZjMxMTlhOWZkOTcxMGVmNDI5ZAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIE1vbiBGZWIgMTcgMTE6MjA6MzMgMjAxNCAtMDgwMAogCi0JKiBzcmMvcHBjL3N5c3YuUywgc3JjL3BwYy9mZmkuYzogUmVtb3ZlIHVzZSBvZiBwcGMgc3RyaW5nCi0JaW5zdHJ1Y3Rpb25zIChub3QgYXZhaWxhYmxlIG9uIHNvbWUgY29yZXMsIGxpa2UgdGhlIFBQQzQ0MCkuCisgICAgRml4IGJ1aWxkIGVycm9yIG9uIHg4NiB3aXRob3V0IGRpc3RpbmN0IGxvbmcgZG91YmxlCisgICAgCisgICAgc3JjL3g4Ni9mZmk2NC5jOiBJbiBmdW5jdGlvbiAnY2xhc3NpZnlfYXJndW1lbnQnOgorICAgIHNyYy94ODYvZmZpNjQuYzoyMDU6NTogZXJyb3I6IGR1cGxpY2F0ZSBjYXNlIHZhbHVlCisgICAgICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisgICAgICAgICBeCisgICAgc3JjL3g4Ni9mZmk2NC5jOjIwMjo1OiBlcnJvcjogcHJldmlvdXNseSB1c2VkIGhlcmUKKyAgICAgICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorICAgICAgICAgXgogCi0yMDExLTExLTEyICBLaW11cmEgV2F0YXJ1ICA8a2ltdXJhd0BpLm5pZnR5LmpwPgorY29tbWl0IDUxMzc3YmRhOWFlZDBiMmMxMzA5YzgxODQ2MGNhYjlkOWFiM2Q0NmUKK01lcmdlOiBmMDhkYTU0IDQwOTI3YmQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBGZWIgMTUgMDg6MDY6MjkgMjAxNCAtMDUwMAogCi0JKiBtNC9heF9lbmFibGVfYnVpbGRkaXI6IENoYW5nZSBmcm9tIHN0cmluZyBjb21wYXJpc29uIHRvIG51bWVyaWMKLQljb21wYXJpc29uIGZvciB3YyBvdXRwdXQuCi0JKiBjb25maWd1cmUuYWM6IEVuYWJsZSBGRklfTU1BUF9FWEVDX1dSSVQgZm9yIGRhcndpbjExIGFrYSBNYWMgT1MKLQlYIDEwLjcuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM3MiBmcm9tIGhlaWhlci9kZXZlbAorICAgIAorICAgIE1JUFMgTjMyOiBGaXggY2FsbCBmbG9hdGluZyBwb2ludCB2YSBmdW5jdGlvbgogCi0yMDExLTExLTEyICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgZjA4ZGE1NDY1NDYzZTYwYTI4ZjVlOTIxZjIzZWJmMmJhOTg0YzE0OAorTWVyZ2U6IDNkYzNmMzIgZmE1ZjI1YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEZlYiAxNSAwODowNjoxMSAyMDE0IC0wNTAwCiAKLQkqIE1ha2VmaWxlLmFtIChBTV9DQ0FTRkxBR1MpOiBBZGQgLWcgb3B0aW9uIHRvIGJ1aWxkIGFzc2VtYmx5Ci0JZmlsZXMgd2l0aCBkZWJ1ZyBpbmZvLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM2OCBmcm9tIHplbGRpbi9tYXN0ZXIKKyAgICAKKyAgICBMaW51eC9wcGM2NDogUmVtb3ZlIGFzc3VtcHRpb24gb24gY29udGVudHMgb2YgcjExIGluIGNsb3N1cmUKIAotMjAxMS0xMS0xMiAgSmFzcGVyIExpZXZpc3NlIEFkcmlhYW5zZSA8amFzcGVyQG9wZW5ic2Qub3JnPgorY29tbWl0IDQwOTI3YmQzZTFlN2M2MDA3MDI1YmExMDg1NGZkOGEwNjY0ZTQ3ZGYKK0F1dGhvcjogSGVpaGVyIDxyQGhldi5jYz4KK0RhdGU6ICAgVHVlIEphbiAyMSAyMzoxODoyNyAyMDE0ICswODAwCiAKLQkqIFJFQURNRTogVXBkYXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIE9wZW5CU0Qgc3lzdGVtcy4KKyAgICBGaXggY2FsbCBmbG9hdGluZyBwb2ludCB2YSBmdW5jdGlvbgorICAgIAorICAgIEknbSBub3Qgc3VyZSBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMgaW4gR1BSIG9yIEZQUiBiZWZvcmUgY2FsbGluZworICAgIHZhcmlhYmxlIG51bWJlciBhcmd1bWVudHMgZnVuY3Rpb24uIHNvLCBsb2FkIGFsbCBhcmd1bWVudHMgdG8gR1BSIGFuZAorICAgIEZQUi4KIAotMjAxMS0xMS0xMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGI0ZGY5Y2Y5Y2M0YTlhOTQwMWE1M2ZkNmJlYTFmM2MyYzI4M2I5N2IKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBXZWQgRmViIDUgMTQ6MjI6NTIgMjAxNCAtMDUwMAogCi0JKiBsaWJ0b29sLXZlcnNpb246IFVwZGF0ZS4KLQkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgc3JjL2RlYnVnLmMgaWYKLQlGRklfREVCVUcuCi0JKGxpYmZmaV9sYV9TT1VSQ0VTKTogUmVtb3ZlIHNyYy9kZWJ1Zy5jCi0JKEVYVFJBX0RJU1QpOiBBZGQgc3JjL2RlYnVnLmMKLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogUkVBRE1FOiBVcGRhdGUgZm9yIDMuMC4xMS4KKyAgICBBQXJjaDY0OiBGaXggdm9pZCBmYWxsLXRocm91Z2ggY2FzZSB3aGVuIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQKIAotMjAxMS0xMS0xMCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBmNDY2YWFkMGQ5MWExMTdlNDI1NzFkMWQ2ZmI0MzRmYTA0MzNjOTMwCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVHVlIEphbiAyMSAxNjozODozMSAyMDE0IC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoR0NDX0FTX0NGSV9QU0VVRE9fT1ApOiBVc2UgaXQgaW5zdGVhZCBvZiBpbmxpbmUgY2hlY2suCi0JKiBjb25maWd1cmUsIGFjbG9jYWwubTQ6IFJlYnVpbGQuCisgICAgQUFyY2g2NDogRml4IG1pc3Npbmcgc2VtaWNvbG9ucyB3aGVuIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQKIAotMjAxMS0wOS0wNCAgSWFpbiBTYW5kb2UgIDxpYWluc0BnY2MuZ251Lm9yZz4KK2NvbW1pdCA3ZWE2Nzc3MzNiZDk4OTE3MjQxODUyYjg5MDFhNmI3NTgwNzI4ODk1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDIwOjU4OjMxIDIwMTMgLTA1MDAKIAotCVBSIGxpYmZmaS80OTU5NAotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUyAoc3R1YnMpOiBNYWtlIHRoZSBzdHViIGJpbmRpbmcKLQloZWxwZXIgcmVmZXJlbmNlIHRyYWNrIHRoZSBhcmNoaXRlY3R1cmUgcG9pbnRlciBzaXplLgorICAgIFJlbW92ZSBidWlsZC1pb3MgZnJvbSBNYWtlZmlsZQorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJQ2hhbmdlTG9nCiAKLTIwMTEtMDgtMjUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDZhZTA0NmNjNTljMTJiMmNkNDAxNThkNmJjYjk2ZjRhNTk4ODYxNTkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMjE6MDY6NTEgMjAxMyAtMDUwMAogCi0JKiBzcmMvYXJtL2ZmaS5jIChGRklfSU5JVF9UUkFNUE9MSU5FKTogUmVtb3ZlIGhhcmQtY29kZWQgYXNzZW1ibHkKLQlpbnN0cnVjdGlvbnMuCi0JKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2FybV90cmFtcG9saW5lKTogUHV0IHRoZW0gaGVyZSBpbnN0ZWFkLgorICAgIE1lbnRpb24gQWFyY2g2NCBvbiBpT1MKIAotMjAxMS0wNy0xMSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgYmZjMDZiM2ZkYjMyYWJlOTBjZTA3NDlhZWRmZWM2NDlkZjg1YTdlZgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTc6MzY6MzkgMjAxMyAtMDUwMAogCi0gICAgICAgICogc3JjL2FybS9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORSk6IENsZWFyIGljYWNoZS4KKyAgICBVcGRhdGUgQ2hhbmdlTG9nCiAKLTIwMTEtMDYtMjkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDBhMGYxMmNlMWY3YmU4MTAwNmIwOGEzYzgxYTYzNjkyNmQyODNhOWIKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUaHUgSmFuIDkgMTM6NTA6MTcgMjAxNCAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiBNb3ZlIFBSIG51bWJlciB0byBjb21tZW50LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IExpa2V3aXNlLgorICAgIEFBcmNoNjQ6IFJlbW92ZSBkdXBsaWNpdG91cyBlbGVtZW50X2NvdW50IGNhbGwuCisgICAgCisgICAgVGhpcyBpbmhpYml0cyBhbiBhbmFseXplciB3YXJuaW5nIGJ5IENsYW5nLgogCi0yMDExLTA2LTI5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCA0MzMwZmRjZDkyZTY3YzgxNjI4OGQ2NGFiMjMwMjM3MDY1NzY4MjA2CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVGh1IEphbiA5IDEzOjUzOjMwIDIwMTQgLTA1MDAKIAotCVBSIGxpYmZmaS80NjY2MAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogeGZhaWwgZGctb3V0cHV0IG9uCi0JbWlwcy1zZ2ktaXJpeDYqLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IExpa2V3aXNlLgorICAgIERhcndpbi9hYXJjaDY0OiBSZXNwZWN0IGlPUyBBQkkgcmU6IHN0YWNrIGFyZ3VtZW50IGFsaWdubWVudAogCi0yMDExLTA2LTE0ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCAwYTMzM2Q2YzM5NzM5MzVkNGZlMDJhYWU3NmIxMGUzOWQzYzg4ZTA3CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVGh1IEphbiA5IDE0OjAzOjI5IDIwMTQgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMgKHRlc3RfbGFyZ2VfZm4pOiBVc2UgUFJJdTgsCi0JUFJJZDggaW5zdGVhZCBvZiAlaGh1LCAlaGhkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBbX19hbHBoYV9fICYmIF9fb3NmX19dIChQUklkOCwKLQlQUkl1OCk6IERlZmluZS4KLQlbX19zZ2lfX10gKFBSSWQ4LCBQUkl1OCk6IERlZmluZS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogRml4IHNpemVfdCBhc3N1bXB0aW9ucwogCi0yMDExLTA0LTI5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCAyYzE4ZTNjNzZhYWQxYjQyNjYxN2RiMDVhNDM4NGU3YzNhOTIwMTc2CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNjoxNDowMiAyMDEzIC0wNTAwCiAKLQkqIHNyYy9hbHBoYS9vc2YuUyAoVUFfU0ksIEZERV9FTkNPRElORywgRkRFX0VOQ09ERSwgRkRFX0FSQU5HRSk6Ci0JRGVmaW5lLgotCVVzZSB0aGVtIHRvIGhhbmRsZSBFTEYgdnMuIEVDT0ZGIGRpZmZlcmVuY2VzLgotCVtfX29zZl9fXSAoX0dMT0JBTF9fRl9mZmlfY2FsbF9vc2YpOiBEZWZpbmUuCisgICAgRGFyd2luL2FhcmNoNjQ6IEZpeCAic2hhZG93cyBkZWNsYXJhdGlvbiIgd2FybmluZ3MKIAotMjAxMS0wMy0zMCAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorY29tbWl0IDFiOGE4ZTIwZTM0NGYzYzU1NDk1YWI2ZWI0NmJkMTRlODQzZDRiM2UKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUaHUgSmFuIDkgMTM6NTU6MjEgMjAxNCAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogRml4IHVua25vd24gRkRFIGVuY29kaW5nLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogZGl0dG8uCisgICAgRGFyd2luL2FhcmNoNjQ6IFVzZSBDbGFuZyBjYWNoZSBpbnZhbGlkYXRpb24gYnVpbHRpbgogCi0yMDExLTAyLTI1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgNjAzMGNkY2FlNzc2ZjhmYjU4NzZhNTMxNjhmN2QxZTc1ZDI4YTI0MgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTU6NDU6NTEgMjAxMyAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBbGxvdyBmb3IgbW9yZQotCTMyLWJpdCBBQklzLgorICAgIERhcndpbi9hYXJjaDY0OiBBY2NvdW50IGZvciBsb25nIGRvdWJsZSBiZWluZyBlcXVhbCB0byBkb3VibGUKIAotMjAxMS0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDU2NThiMDg5MjY4M2QyZTI0ZTRkNTg0Mjk3OGMxODRhN2FkMzM4NTgKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE2OjMzOjQ3IDIwMTMgLTA1MDAKIAotCSogbTQvYXhfY2NfbWF4b3B0Lm00OiBEb24ndCAtbWFsaWduLWRvdWJsZSBvciB1c2UgLWZmYXN0LW1hdGguCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgRGFyd2luL2FhcmNoNjQ6IFVzZSBDTkFNRSwgcmVzdHJpY3QgLnNpemUgbGlrZSBBUk0KIAotMjAxMS0wMi0xMyAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KK2NvbW1pdCAwNzE3NTc4MDgwMmFjZWM1ZGM0OWZkZWRkNmQyMGE2MjQwOWE2NzA3CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNzo0ODoyMiAyMDEzIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogRml4IGludmFsaWQgcmVmZXJlbmNlIGluIGFzc2VtYmx5CiAKLTIwMTEtMDItMTMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA5ZGEyOGI0NDI3N2ZlYTNhZWI4MjdjMzVkZDYzZDYwOWQyNTI0YThiCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNjoyMzoyMSAyMDEzIC0wNTAwCiAKLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChVTkxJS0VMWSwgTElLRUxZKTogRGVmaW5lLgotCSogc3JjL3g4Ni9mZmk2NC5jIChVTkxJS0VMWSwgTElLRUxZKTogUmVtb3ZlIGRlZmluaXRpb24uCi0JKiBzcmMvcHJlcF9jaWYuYyAoVU5MSUtFTFksIExJS0VMWSk6IFJlbW92ZSBkZWZpbml0aW9uLgorICAgIERhcndpbi94ODZfNjQ6IEZpeCA2NC1iaXQgdHlwZSBzaG9ydGVuaW5nIHdhcm5pbmdzCiAKLQkqIHNyYy9wcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IENvbnZlcnQgYXNzZXJ0aW9uIGludG8KLQlGRklfQkFEX1RZUEVERUYgcmV0dXJuLiAgSW5pdGlhbGl6ZSBhcmcgc2l6ZSBhbmQgYWxpZ25tZW50IHRvIDAuCitjb21taXQgODIxZDM5OGYwOGJkMWQ1NDBhNWIyMzU1MDc4MTJmZmVlZTQ5YjU4MAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFRodSBKYW4gOSAxMzoxNTowNiAyMDE0IC0wNTAwCiAKLQkqIHNyYy9wYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEb24ndCBBU1NFUlQgQUJJIHRlc3QsCi0JanVzdCByZXR1cm4gRkZJX0JBRF9BQkkgd2hlbiB0aGluZ3MgYXJlIHdyb25nLgotCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCi0JKiBzcmMvaWE2NC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KLQkqIHNyYy9hdnIzMi9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KKyAgICBEYXJ3aW46IE1lcmdlIGJ1aWxkIHNjcmlwdHMsIHJlZG8gcHJvamVjdCwgaW5jbC4gYXJtNjQKIAotMjAxMS0wMi0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDZlZmY5ZmY5ZTcyNDYzYjk3ODNiZTI1MTRmOTQ0YjZmMDU2OTIwNTQKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE3OjQ4OjEwIDIwMTMgLTA1MDAKIAotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERvbid0IEFTU0VSVCBBQkkgdGVzdCwKLQlqdXN0IHJldHVybiBGRklfQkFEX0FCSSB3aGVuIHRoaW5ncyBhcmUgd3JvbmcuCisgICAgRGFyd2luL2lPUzogSW1wcm92ZSB1bmlmaWVkIHN5bnRheCB1c2UgZm9yIExMVk0KIAotMjAxMi0wMi0xMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KK2NvbW1pdCBiYTBlYTk5YzgyYWFkZDU5NTczODZhMDMxZTMxMjIwMTFiZDM2ZDUyCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNToyNzo0NCAyMDEzIC0wNTAwCiAKLQkqIHNyYy9zcGFyYy92OS5TIChTVEFDS0ZSQU1FKTogQnVtcCB0byAxNzYuCisgICAgRml4IGRsbWFsbG9jIHdhcm5pbmdzIGR1ZSB0byBzZXRfc2VnbWVudF9mbGFncywgc2l6ZW9mKHNpemVfdCkKIAotMjAxMS0wMi0wOSAgU3R1YXJ0IFNoZWx0b24gIDxzcmNzaGVsdG9uQGdtYWlsLmNvbT4KK2NvbW1pdCA5OTRiZTNhNWMxZDBkMTdiMTkxMDMzOTYxMDNlMTI4NTE3ZmQ2MmY5CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNToyNzoxNCAyMDEzIC0wNTAwCiAKLQlodHRwOi8vYnVncy5nZW50b28ub3JnL3Nob3dfYnVnLmNnaT9pZD0yODY5MTEKLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBDbGVhbiB1cCBlcnJvciBtZXNzYWdlcy4KLQkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBDYXN0IHJhdyBhcmcgdG8KLQlmZmlfcmF3Ki4KLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBwcmFnbWEgZm9yIFNHSSBjb21waWxlci4KKyAgICBEYXJ3aW4vaU9TOiBGaXggbWlzLXR5cGluZyBvZiB2ZnBfcmVnX2ZyZWUKIAotMjAxMS0wMi0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGE4ZTBhODM1YWIxZjYyZDAzYWQ2MzkxNzYwZTNlOGI3NzMyZDI0ZjgKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE1OjI2OjIwIDIwMTMgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgcG93ZXJwYzY0LSotZGFyd2luKiBzdXBwb3J0LgorICAgIERhcndpbi9BUk06IEFzc2VydCBvbiBOVUxMIGRlcmVmZXJlbmNlCisgICAgCisgICAgVGhpcyBpbmhpYml0cyBhbiBhbmFseXplciB3YXJuaW5nIGJ5IENsYW5nIG9uIGFsbCBwbGF0Zm9ybXMuCiAKLTIwMTEtMDItMDkgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDEzNjc1MzQxNTgxYzQ4OWVkOWRmOGJhMzkwYzhlMDhhNzMyZGVjYjIKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUaHUgSmFuIDkgMTM6NDI6MDggMjAxNCAtMDUwMAogCi0JKiBSRUFETUU6IE1lbnRpb24gSW50ZXJpeC4KKyAgICBEYXJ3aW4vaTM4NjogSW5oaWJpdCBDbGFuZyBwcmV2aW91cyBwcm90b3R5cGUgd2FybmluZ3MKIAotMjAxMS0wMi0wOSAgSm9uYXRoYW4gQ2FsbGVuICA8YWJjZEBnZW50b28ub3JnPgorY29tbWl0IDY2NDY5YzM4MWUyZTJjYzk2ZTdkNDA5MjY2ZGVhMGZmZTE3N2VlY2EKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUaHUgSmFuIDkgMTM6NDE6NDUgMjAxNCAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBJbnRlcml4IHRvIHdpbjMyL2N5Z3dpbi9taW5ndyBjYXNlLgotCSogY29uZmlndXJlOiBEaXR0by4KLQkqIHNyYy9jbG9zdXJlcy5jOiBUcmVhdCBJbnRlcml4IGxpa2UgQ3lnd2luLCBpbnN0ZWFkIG9mIGFzIGEKLQlnZW5lcmljIHdpbjMyLgorICAgIERhcndpbi9BUk06IEluaGliaXQgQ2xhbmcgcHJldmlvdXMgcHJvdG90eXBlIHdhcm5pbmdzCiAKLTIwMTEtMDItMDkgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDViZmU2MmEwMGQyZDY1OWVlYzlmMTliMzk4MDJiNmU2OTg0NGZjMjcKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUaHUgSmFuIDkgMTM6NDE6MjcgMjAxNCAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IFJlbW92ZSB4ZmFpbC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBSZW1vdmUgeGZhaWwuCi0JKiBzcmMveDg2L2ZmaTY0LmMgKFVOTElLRUxZLCBMSUtFTFkpOiBEZWZpbmUuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQ2hlY2sgZm9yIGJhZCBBQkkuCi0JKiBzcmMvcHJlcF9jaWYuYyAoVU5MSUtFTFksIExJS0VMWSk6IERlZmluZS4KLQkoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBDaGVjayBmb3IgYmFkIHR5cGVzLgorICAgIERhcndpbi9BQXJjaDY0OiBJbmhpYml0IENsYW5nIHByZXZpb3VzIHByb3RvdHlwZSB3YXJuaW5ncwogCi0yMDExLTAyLTA5ICBMYW5kb24gRnVsbGVyIDxsYW5kb25mQHBsYXVzaWJsZS5jb29wPgorY29tbWl0IGZhNWYyNWMyMGY3NmE2ZWY1ZTk1MGE3Y2NiY2U4MjY2NzJjOGE2MjAKK0F1dGhvcjogTWFyY3VzIENvbXN0ZWR0IDxtYXJjdXNAbWMucHAuc2U+CitEYXRlOiAgIFNhdCBKYW4gNCAxOTowMDowOCAyMDE0ICswMTAwCiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGJ1aWxkLWlvcy5zaCwgc3JjL2FybS9nZW50cmFtcC5zaCwKLQlzcmMvYXJtL3RyYW1wb2xpbmUuUy4KLQkobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIHNyYy9hcmMvdHJhbXBvbGluZS5TLgotCSogY29uZmlndXJlLmFjIChGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFKTogRGVmaW5lLgotCSogc3JjL2FybS9mZmkuYyAoZmZpX3RyYW1wb2xpbmVfdGFibGUpCi0JKGZmaV9jbG9zdXJlX3RyYW1wb2xpbmVfdGFibGVfcGFnZSwgZmZpX3RyYW1wb2xpbmVfdGFibGVfZW50cnkpCi0JKEZGSV9UUkFNUE9MSU5FX0NPREVMT0NfQ09ORklHLCBGRklfVFJBTVBPTElORV9DT05GSUdfUEFHRV9PRkZTRVQpCi0JKEZGSV9UUkFNUE9MSU5FX0NPVU5ULCBmZmlfdHJhbXBvbGluZV9sb2NrLCBmZmlfdHJhbXBvbGluZV90YWJsZXMpCi0JKGZmaV90cmFtcG9saW5lX3RhYmxlX2FsbG9jLCBmZmlfY2xvc3VyZV9hbGxvYywgZmZpX2Nsb3N1cmVfZnJlZSk6Ci0JRGVmaW5lIGZvciBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGNhc2UgKGlPUykuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogSGFuZGwgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBjYXNlCi0Jc2VwYXJhdGVseS4KLQkqIHNyYy9hcm0vc3lzdi5TOiBIYW5kbGUgQXBwbGUgaU9TIGhvc3QuCi0JKiBzcmMvY2xvc3VyZXMuYzogSGFuZGxlIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgY2FzZS4KLQkqIGJ1aWxkLWlvcy5zaDogTmV3IGZpbGUuCi0JKiBmZmljb25maWcuaC5pbiwgY29uZmlndXJlLCBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIFJFQURNRTogTWVudGlvbiBBUk0gaU9TLgorICAgIExpbnV4L3BwYzY0OiBSZW1vdmUgYXNzdW1wdGlvbiBvbiBjb250ZW50cyBvZiByMTEgaW4gY2xvc3VyZQogCi0yMDExLTAyLTA4ICBPcmVuIEhlbGQgIDxvcmVuaGVAaWwuaWJtLmNvbT4KK2NvbW1pdCAxYTBiMDFlMTcxZTljNzUwNDM3Y2VmMmYxODkxN2Y1YTZlMzJjNDk4CitBdXRob3I6IFBhdWxvIFBpemFycm8gPHBhdWxvLnBpemFycm9AZ21haWwuY29tPgorRGF0ZTogICBUaHUgSmFuIDIgMTY6MTc6NTkgMjAxNCAtMDIwMAogCi0JKiBzcmMvZGxtYWxsb2MuYyAoX1NUUlVDVF9NQUxMSU5GTyk6IERlZmluZSBpbiBvcmRlciB0byBhdm9pZAotCXJlZGVmaW5pdGlvbiBvZiBtYWxsaW5mbyBvbiBIUC1VWC4KKyAgICBXaGVuIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIGZmaSBjYWxsZWQgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgc2hhcmVkIGxpYnJhcnkgZ2VuZXJhdGUgYSBmYXRhbCBlcnJvcgorICAgIFRoZSBjb3JyZWN0aW9uIHdhcyB0byB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGUgR09ULgogCi0yMDExLTAyLTA4ICBHaW5uIENoZW4gIDxnaW5uLmNoZW5Ab3JhY2xlLmNvbT4KK2NvbW1pdCAzZGMzZjMyYzM1ZGI1YWI5OTVhODM1MjI1ZjY4MTUzNjk3MzVjZWI3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRGVjIDUgMTY6MjM6MjUgMjAxMyAtMDUwMAogCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9jYWxsKTogTWFrZSBjb21wYXRpYmxlIHdpdGggU29sYXJpcyBTdHVkaW8KLQlhZ2dyZWdhdGUgcmV0dXJuIEFCSS4gIEZsdXNoIGNhY2hlLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZsdXNoIGNhY2hlLgorICAgIFVuZG8gaU9TIEFSTTY0IGNoYW5nZXMuCiAKLTIwMTEtMDItMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCAzNTZiMmNiYzMwNGJmZTViZGMyOGI4ZDFjNjhkMWZmMDg0ZTllYzM3CitNZXJnZTogNDg0YTc1OCAwNzM0NWEzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDIyOjM4OjEzIDIwMTMgLTA1MDAKIAotCUZyb20gVG9tIEhvbmVybWFubiA8dG9tLmhvbmVybWFubkBvcmFjbGUuY29tPjoKLQkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9BSVgpOiBTdXBwb3J0IGZvciB4bGMgdG9vbGNoYWluIG9uCi0JQUlYLiAgRGVjbGFyZSAuZmZpX3ByZXBfYXJncy4gIEluc2VydCBub3BzIGFmdGVyIGJyYW5jaAotCWluc3RydWN0aW9ucyBzbyB0aGF0IHRoZSBBSVggbGlua2VyIGNhbiBpbnNlcnQgVE9DIHJlbG9hZAotCWluc3RydWN0aW9ucy4KLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IERlY2xhcmUgLmZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4uCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLTIwMTEtMDItMDggIEVkICA8ZWRAa2R0Yy5uZXQ+Citjb21taXQgNDg0YTc1ODQyNjBlMmZiYjM5OWNlOTAwODMwNDY4MzQyNzFiZjlmZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAyMTowNjo1MSAyMDEzIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2FzbS5oOiBGaXggZ3JhbW1hciBuaXQgaW4gY29tbWVudC4KKyAgICBNZW50aW9uIEFhcmNoNjQgb24gaU9TCiAKLTIwMTEtMDItMDggIFVsaSBMaW5rICA8dWwubWNhbWFmaWFAbGlua2l0dXAuZGU+Citjb21taXQgMDczNDVhMzBlYzBhMmZhNDVhN2MzNjNkMzAxZjU3NzIzNjkwY2ZhMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAyMTowNjo1MSAyMDEzIC0wNTAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV82NF9CSVRfTUFYKTogRGVmaW5lIGFuZCB1c2UuCisgICAgTWVudGlvbiBBYXJjaDY0IG9uIGlPUwogCi0yMDExLTAyLTA5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCBkNGI5MzFjMWI4NzIzNzhjMzVmMTJkZGJiOWE2ZDU1ZTdmMTdjNjVlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDIwOjU4OjMxIDIwMTMgLTA1MDAKIAotCVBSIGxpYmZmaS80NjY2MQotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMgKG1haW4pOiBDYXN0IHZvaWQgKiB0bwotCXVpbnRwdHJfdCBmaXJzdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jIChtYWluKTogTGlrZXdpc2UuCisgICAgUmVtb3ZlIGJ1aWxkLWlvcyBmcm9tIE1ha2VmaWxlCiAKLTIwMTEtMDItMDggIFJhZmFlbCBBdmlsYSBkZSBFc3BpbmRvbGEgIDxyZXNwaW5kb2xhQG1vemlsbGEuY29tPgorY29tbWl0IGRmYmYyMzZkNzBmYzFlYzY4ZTZmZjE5MzU4NGExNTQzNTM1MDhlMmYKK01lcmdlOiA4NTJhYzNiIGJiOTc0MGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMjA6NTQ6NTQgMjAxMyAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IEZpeCB4ODYgdGVzdCBmb3IgcGMgcmVsYXRlZCByZWxvY3MuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCisgICAgQWRkIENoYW5nZUxvZyBlbnRyeS4KIAotMjAxMS0wMi0wNyAgSm9lbCBTaGVycmlsbCA8am9lbC5zaGVycmlsbEBvYXJjb3JwLmNvbT4KK2NvbW1pdCBiYjk3NDBlNTQ1MjA1ZjkzYTUyNWM3N2FhNmQxY2JmNGNhOTM3MWYzCitNZXJnZTogYWM3NTM2OCA0ZDcwMWUwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDE3OjU0OjM5IDIwMTMgLTA4MDAKIAotCSogbGliZmZpL3NyYy9tNjhrL2ZmaS5jOiBBZGQgUlRFTVMgc3VwcG9ydCBmb3IgY2FjaGUgZmx1c2hpbmcuCi0JSGFuZGxlIGNhc2Ugd2hlbiBDUFUgdmFyaWFudCBkb2VzIG5vdCBoYXZlIGxvbmcgZG91YmxlIHN1cHBvcnQuCi0JKiBsaWJmZmkvc3JjL202OGsvc3lzdi5TOiBBZGQgc3VwcG9ydCBmb3IgbWM2ODAwMCwgQ29sZGZpcmUsCi0JYW5kIGNvcmVzIHdpdGggc29mdCBmbG9hdGluZyBwb2ludC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzYwIGZyb20gendhbGRvd3NraS9pb3MtcmVkbworICAgIAorICAgIE1hYy9pT1Mgc3VwcG9ydCwgaW5jbHVkaW5nIGFhcmNoNjQgcG9ydAogCi0yMDExLTAyLTA3ICBKb2VsIFNoZXJyaWxsIDxqb2VsLnNoZXJyaWxsQG9hcmNvcnAuY29tPgorY29tbWl0IDRkNzAxZTAzZmFhNDc1YTVlYjNiNTRiOTAwNDYxMTRhMWUyN2I4MTMKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDEzOjI1OjI3IDIwMTMgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgbWlwcyotKi1ydGVtcyogc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBFbnN1cmUgbmVlZGVkIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlCi0JZm9yIHRhcmdldHMgd2hpY2ggZG8gbm90IGhhdmUgc2dpZGVmcy5oLgorICAgIERhcndpbjogUHJvcGVybHkgZXhwb3J0IGhlYWRlcnMgZnJvbSBYY29kZSBwcm9qZWN0CiAKLTIwMTEtMDEtMjYgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorY29tbWl0IDAyMmYxMmViOWFkMjI2NGU4MzhmYTVmYjQ1MzczM2Y1MTc3ODg4ZjQKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDEyOjIxOjM4IDIwMTMgLTA1MDAKIAotCVBSIHRhcmdldC80MDEyNQotCSogY29uZmlndXJlLmFjIChBTV9MVExERkxBR1MpOiBBZGQgLWJpbmRpciBvcHRpb24gZm9yIHdpbmRvd3MgRExMcy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBEYXJ3aW46IEZyZXNoZW4gZ2VuIHNjcmlwdHMsIHJlbW92ZSBvbGQgYnVpbGQtaW9zLnNoCiAKLTIwMTAtMTItMTggIElhaW4gU2FuZG9lICA8aWFpbnNAZ2NjLmdudS5vcmc+Citjb21taXQgZTgyMGZlMjAyNWQ3YWQzZGY3NTg0NDA3OTQ2ZGZhYWQyYWY2OTU5OQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMTI6MDM6NTEgMjAxMyAtMDUwMAogCi0JUFIgbGliZmZpLzI5MTUyCi0JUFIgbGliZmZpLzQyMzc4Ci0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBQcm92aWRlIERhcndpbjY0IGltcGxlbWVudGF0aW9uLAotCXVwZGF0ZSBjb21tZW50cy4KLQkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChQT1dFUlBDX0RBUldJTjY0KTogTmV3LAotCShGRklfVFJBTVBPTElORV9TSVpFKTogVXBkYXRlIGZvciBEYXJ3aW42NC4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBQcm92aWRlIERhcndpbjY0IGltcGxlbWVudGF0aW9uLAotCXVwZGF0ZSBjb21tZW50cy4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCisgICAgRGFyd2luL2lPUzogSW5jbHVkZSB4ODZfNjQrYWFyY2g2NCBwaWVjZXMgaW4gbGlicmFyeQogCi0yMDEwLTEyLTA2ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCAwMjc4Mjg0ZTQ3MGVjOTFkYjdjZGMxNWFjM2RjZDY0NjgzMzA1ODQ4CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMzowMzozNyAyMDEzIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAobGliZmZpX2N2X2FzX2FzY2lpX3BzZXVkb19vcCk6IFVzZSBkb3VibGUKLQliYWNrc2xhc2hlcy4KLQkobGliZmZpX2N2X2FzX3N0cmluZ19wc2V1ZG9fb3ApOiBMaWtld2lzZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogc2l6ZV90IGFzc3VtcHRpb25zCiAKLTIwMTAtMTItMDMgIENodW5nLUxpbiBUYW5nICA8Y2x0YW5nQGNvZGVzb3VyY2VyeS5jb20+Citjb21taXQgOTc3NTQ0NmI2NDQxYzkxY2Q5MDU5MjE1YzEwNmFhM2JjZjk0OTc2NworQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6Mzk6MzQgMjAxMyAtMDUwMAogCi0JKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCBVTldJTkQgdG8gLnBhZCBkaXJlY3RpdmUuCi0JKGZmaV9jbG9zdXJlX1ZGUCk6IFNhbWUuCi0JKGZmaV9jYWxsX1ZGUCk6IE1vdmUgZG93biB0byBiZWZvcmUgZmZpX2Nsb3N1cmVfVkZQLiBBZGQgJy5mcHUgdmZwJwotCWRpcmVjdGl2ZS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogRml4IOKAnHNoYWRvd3MgZGVjbGFyYXRpb27igJ0gd2FybmluZ3MKIAotMjAxMC0xMi0wMSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgNDI2MGJhZGMzNzcwNWQzNjE4ZTc3NGRmZTYxMTg0YWM3MDk4ODFjMQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6MDg6MTQgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtfX3NnaV0gKFBSSWQ2NCwgUFJJdTY0KTogRGVmaW5lLgotCShQUkl1UFRSKTogRGVmaW5lLgorICAgIERhcndpbi9hYXJjaDY0OiBVc2UgQ2xhbmcgY2FjaGUgaW52YWxpZGF0aW9uIGJ1aWx0aW4KIAotMjAxMC0xMS0yOSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KLQkgICAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgOWZhNzk5OGQ1ZjkyNTA5MDhjYmYxMmE2NzE0Nzk4NTJlYmFkZjlkMQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6MDc6NDggMjAxMyAtMDUwMAogCi0JKiBzcmMveDg2L3N5c3YuUyAoRkRFX0VOQ09ESU5HLCBGREVfRU5DT0RFKTogRGVmaW5lLgotCSguZWhfZnJhbWUpOiBVc2UgRkRFX0VOQ09ESU5HLgotCSguTEFTRkRFMSwgLkxBU0ZERTIsIExBU0ZERTMpOiBTaW1wbGlmeSB3aXRoIEZERV9FTkNPREUuCisgICAgRGFyd2luL2FhcmNoNjQ6IEluaGliaXQgWGNvZGUgd2FybmluZwogCi0yMDEwLTExLTIyICBKYWNlayBDYWJhbiA8amFjZWtAY29kZXdlYXZlcnMuY29tPgorY29tbWl0IDBlODMyMDQ4YTkzODMwNTc1YjA5NzY0MDY0NDRlMTM0ZTY0OWE0ZjcKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjA3OjM0IDIwMTMgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3ltYm9sIHVuZGVyc2NvcmVzIG9uIG1pbmd3LXc2NC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIHNyYy94ODYvd2luNjQuUzogQ29ycmVjdGx5IGFjY2VzcyBleHRlcm4gc3ltYm9scyBpbiByZXNwZWN0IHRvCi0JdW5kZXJzY29yZXMuCisgICAgRGFyd2luL2FhcmNoNjQ6IGRvdWJsZSA9PSBsb25nIGRvdWJsZQogCi0yMDEwLTExLTE1ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCA2MDJkYzIyZDc2OTMxMDkyNjEwMjM0Y2YwNjNmOWYxYjhkYmMxYTUxCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjowNjowMCAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmVuYW1lIC4uLgotCSogdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwOiAuLi4gdG8gdGhpcy4KLQkqIGxpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IERvbid0IGxvYWQgbGliZmZpLWRnLmV4cC4KLQkqIGxpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IExpa2V3aXNlLgorICAgIERhcndpbi9pT1MgcHJlcCBzY3JpcHQ6IHRyeSBhbmQgY29tcGlsZSBmb3IgYXJtNjQKIAotMjAxMC0xMC0yOCAgQ2h1bmctTGluIFRhbmcgIDxjbHRhbmdAY29kZXNvdXJjZXJ5LmNvbT4KK2NvbW1pdCBiNTEzZGZlNzlkZTQ3MjVlOGE3MTczMjVhOWUzYjViOWY2OWY2M2RjCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjowNToyMiAyMDEzIC0wNTAwCiAKLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBBZGQgVkZQIHJlZ2lzdGVyIGFyZ3VtZW50IGhhbmRsaW5nCi0JY29kZSwgbmV3IHBhcmFtZXRlciwgYW5kIHJldHVybiB2YWx1ZS4gVXBkYXRlIGNvbW1lbnRzLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBjYXNlIGZvciBWRlAgc3RydWN0IHJldHVybiB2YWx1ZXMuIEFkZAotCWNhbGwgdG8gbGF5b3V0X3ZmcF9hcmdzKCkuCi0JKGZmaV9jYWxsX1NZU1YpOiBVcGRhdGUgZGVjbGFyYXRpb24uCi0JKGZmaV9jYWxsX1ZGUCk6IE5ldyBkZWNsYXJhdGlvbi4KLQkoZmZpX2NhbGwpOiBBZGQgVkZQIHN0cnVjdCByZXR1cm4gY29uZGl0aW9ucy4gQ2FsbCBmZmlfY2FsbF9WRlAoKQotCXdoZW4gQUJJIGlzIEZGSV9WRlAuCi0JKGZmaV9jbG9zdXJlX1ZGUCk6IE5ldyBkZWNsYXJhdGlvbi4KLQkoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IEFkZCBuZXcgdmZwX2FyZ3MgcGFyYW1ldGVyLCB1cGRhdGUgY2FsbCB0bwotCWZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVigpLgotCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBVcGRhdGUgcGFyYW1ldGVycy4gQWRkIFZGUCBhcmd1bWVudAotCWNhc2UgaGFuZGxpbmcuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUGFzcyBmZmlfY2xvc3VyZV9WRlAgdG8gdHJhbXBvbGluZQotCWNvbnN0cnVjdGlvbiB1bmRlciBWRlAgaGFyZC1mbG9hdC4KLQkocmVjX3ZmcF90eXBlX3ApOiBOZXcgZnVuY3Rpb24uCi0JKHZmcF90eXBlX3ApOiBTYW1lLgotCShwbGFjZV92ZnBfYXJnKTogU2FtZS4KLQkobGF5b3V0X3ZmcF9hcmdzKTogU2FtZS4KLQkqIHNyYy9hcm0vZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX1ZGUC4gRGVmaW5lIEZGSV9ERUZBVUxUX0FCSQotCWJhc2VkIG9uIF9fQVJNX1BDU19WRlAuCi0JKEZGSV9FWFRSQV9DSUZfRklFTERTKTogRGVmaW5lIGZvciBhZGRpbmcgVkZQIGhhcmQtZmxvYXQgc3BlY2lmaWMKLQlmaWVsZHMuCi0JKEZGSV9UWVBFX1NUUlVDVF9WRlBfRkxPQVQpOiBEZWZpbmUgaW50ZXJuYWxseSB1c2VkIHR5cGUgY29kZS4KLQkoRkZJX1RZUEVfU1RSVUNUX1ZGUF9ET1VCTEUpOiBTYW1lLgotCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBDaGFuZ2UgY2FsbCBvZiBmZmlfcHJlcF9hcmdzKCkgdG8KLQlkaXJlY3QgY2FsbC4gTW92ZSBmdW5jdGlvbiBwb2ludGVyIGxvYWQgdXB3YXJkcy4KLQkoZmZpX2NhbGxfVkZQKTogTmV3IGZ1bmN0aW9uLgotCShmZmlfY2xvc3VyZV9WRlApOiBTYW1lLgorICAgIERhcndpbi9hYXJjaDY0OiBSZXN0cmljdCAuc2l6ZSB0byBFTEYgbGlrZSBhcm0zMi4KIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChjaGVjay1mbGFncyk6IE5ldyBmdW5jdGlvbi4KLQkoZGctc2tpcC1pZik6IE5ldyBmdW5jdGlvbi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmM6IFNraXAgaWYgdGFyZ2V0IGlzIGFybSotKi0qCi0JYW5kIGNvbXBpbGVyIG9wdGlvbnMgaW5jbHVkZSAtbWZsb2F0LWFiaT1oYXJkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IFNhbWUuCitjb21taXQgYmM5NzgwOTliZjI4MTJkZTc1NWMwNzZiNjdlZjljMjU0NzYwNzU3MgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6MDQ6NTcgMjAxMyAtMDUwMAogCi0yMDEwLTEwLTAxICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICBEYXJ3aW4vYWFyY2g2NDogUG90ZW50aWFsbHkoPykgZml4IGNvbXBpbGUgZXJyb3IKIAotCVBSIGxpYmZmaS80NTY3NwotCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEVuc3VyZSBjaWYtPmJ5dGVzIGlzCi0JYSBtdWx0aXBsZSBvZiA4LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyLmM6IE5ldyB0ZXN0LgorY29tbWl0IGQ2YmI5MzE0NDY3YzZlMDY4MzE1NjU1OWQyM2NhMzQxYzQzZmEzYzgKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjA0OjIyIDIwMTMgLTA1MDAKIAotMjAxMC0wOC0yMCAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorICAgIERhcndpbi9hYXJjaDY0OiBVc2UgQ05BTUUgcmVmcwogCi0JKiBzcmMvY2xvc3VyZXMuYyAob3Blbl90ZW1wX2V4ZWNfZmlsZV9tbnQpOiBDaGVjayBpZiBnZXRtbnRlbnRfcgotCXJldHVybnMgTlVMTC4KK2NvbW1pdCAzM2M0NmNlNTY4MGVlYTI4ZDM0MzdjODc3MWVjMWQxMzdlMjI2YjQ1CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwNDoxMzo0MiAyMDEzIC0wNTAwCiAKLTIwMTAtMDgtMDkgIEFuZHJlYXMgVG9ibGVyICA8YW5kcmVhc3RAZmd6bmV0LmNoPgorICAgIERhcndpbi9NYWM6IEZpeCA2NC8zMiBzaG9ydGVuaW5nIHdhcm5pbmdzCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIHRhcmdldCBwb3dlcnBjNjQtKi1mcmVlYnNkKi4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jOiBQYXNzCi0JLW1sb25nLWRvdWJsZS0xMjggb25seSB0byBsaW51eCB0YXJnZXRzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBMaWtld2lzZS4KK2NvbW1pdCAwNjEyMDgxZTZjMTYxZDlkODIwNzQyZjk5NTk3NWQzNWRhMmFkYmMyCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMzowMzowMCAyMDEzIC0wNTAwCiAKLTIwMTAtMDgtMDUgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyAgICBEYXJ3aW46IE1pc2Mgc2l6ZV90IHdhcm5pbmdzCiAKLSAgICAgICAgKiBNYWtlZmlsZS5hbTogUGFzcyBGRklfREVCVUcgZGVmaW5lIHRvIG1zdmNjLnNoIGZvciBsaW5raW5nIHRvIHRoZQotICAgICAgICBkZWJ1ZyBDUlQgd2hlbiAtLWVuYWJsZS1kZWJ1ZyBpcyBnaXZlbi4KLSAgICAgICAgKiBjb25maWd1cmUuYWM6IERlZmluZSBpdC4KLSAgICAgICAgKiBtc3ZjYy5zaDogVHJhbnNsYXRlIC1nIGFuZCAtREZGSV9ERUJVRyBhcHByb3ByaWF0ZWx5LgorY29tbWl0IDZhNjI0N2QxNzllYzM4NTkzMTFjMmQ4Nzc1ODQxYjg4NGYzMDlmNjYKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjU1OjQ4IDIwMTMgLTA1MDAKIAotMjAxMC0wOC0wNCAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorICAgIERhcndpbjogRml4IGRsbWFsbG9jIHdhcm5pbmdzIGR1ZSB0byBzaXplb2Yoc2l6ZV90KQogCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBBZGQgWDg2X0FOWSBkZWZpbmUgZm9yIGFsbCB4ODYveDg2XzY0Ci0JcGxhdGZvcm1zLgotCSogc3JjL3g4Ni9mZmkuYzogUmVtb3ZlIHJlZHVuZGFudCBpZmRlZiBjaGVja3MuCi0JKiBzcmMvcHJlcF9jaWYuYzogUHVzaCBzdGFjayBzcGFjZSBjb21wdXRhdGlvbiBpbnRvIHNyYy94ODYvZmZpLmMKLQlmb3IgWDg2X0FOWSBzbyByZXR1cm4gdmFsdWUgc3BhY2UgZG9lc24ndCBnZXQgYWRkZWQgdHdpY2UuCitjb21taXQgNGQ2MGQ5ZTFlMzJkZTYxNjZmZmQ2M2JiZTljZTU0Y2Y5NjFjNzhmYworQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDQ6MDk6MzAgMjAxMyAtMDUwMAogCi0yMDEwLTA4LTAzICBOZWlsIFJhc2hicm9va2UgPG5laWxAcGFya3dheWNjLmNvLnVrPgorICAgIERhcndpbjogUmVidWlsZCBYY29kZSBwcm9qZWN0CiAKLQkqIG1zdmNjLnNoOiBEb24ndCBwYXNzIC1zYWZlc2VoIHRvIG1sNjQgYmVjYXVzZSBiZWhhdmlvciBpcyBidWdneS4KK2NvbW1pdCBjYjcxOWE1YzFjMmViMzkxZDZhNWY1ZTAyNDg0YmE0YWE5OTBhNTFiCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwNDowOToxOCAyMDEzIC0wNTAwCiAKLTIwMTAtMDctMjIgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyAgICBEYXJ3aW4vaU9TOiBGaXggTExWTSAzLjMgd2FybmluZyByZTogbWVtY3B5LgogCi0JKiBzcmMvKi9mZml0YXJnZXQuaDogTWFrZSBGRklfTEFTVF9BQkkgb25lIHBhc3QgdGhlIGxhc3QgdmFsaWQgQUJJLgotCSogc3JjL3ByZXBfY2lmLmM6IEZpeCBBQkkgYXNzZXJ0aW9uLgotICAgICAgICAqIHNyYy9jcmlzL2ZmaS5jOiBEaXR0by4KK2NvbW1pdCAyMWJkZTkyYzlhYmIzNzhmOWM0NTZhOWQ5NWU2ZjliOTllZjhjOTIwCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMzo0Mzo0MiAyMDEzIC0wNTAwCiAKLTIwMTAtMDctMTAgIEV2YW4gUGhvZW5peCAgPGV2YW5AZmFsbGluZ3Nub3cubmV0PgorICAgIERhcndpbjogQ2xlYW4gdXAsIG1vZGVybml6ZSBnZW5lcmF0b3Igc2NyaXB0cwogCi0JKiBzcmMvY2xvc3VyZXMuYyAoc2VsaW51eF9lbmFibGVkX2NoZWNrKTogRml4IHN0cm5jbXAgdXNhZ2UgYnVnLgorY29tbWl0IGZkNTRlYWI3NGNlZjc4OTFlNGFjYWFhZmI3MWU3ODMxNDJlY2I2OWUKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAzOjM4OjAyIDIwMTMgLTA1MDAKIAotMjAxMC0wNy0wNyAgRGFuIEhvcsOhayA8ZGFuQGRhbm55LmN6PgorICAgIERhcndpbi9NYWM6IEFsc28gZXhjbHVkZSBPUyBYIGdlbmVyYXRlZCBzb3VyY2UKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogUHJvdGVjdCAjZGVmaW5lIHdpdGggI2lmbmRlZi4KLQkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBEaXR0by4KLQkqIHNyYy9zMzkwL2ZmaXRhcmdldC5oOiBEaXR0by4KLQkqIHNyYy9zcGFyYy9mZml0YXJnZXQuaDogRGl0dG8uCitjb21taXQgOTUzYjZmMTRjNjU1MTQxZjllN2Q4MjU1MGEzMTJjM2VlYjk2MTA5MQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBBcHIgMjQgMTE6MTY6MjAgMjAxMiAtMDQwMAogCi0yMDEwLTA3LTA3ICAgTmVpbCBSb2JlcnRzIDxuZWlsQGxpbnV4LmludGVsLmNvbT4KKyAgICBEYXJ3aW4vaU9TOiBNb3JlIHVuaWZpZWQgc3ludGF4IHN1cHBvcnQgdy8gQ2xhbmcuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgogCi0JKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IEFsaWduIHRoZSBzdGFjayBwb2ludGVyIHRvCi0JMTYtYnl0ZXMuCitjb21taXQgYzcxM2E1NTM3OTQ4MWMzMzk4NzdmMmUwMDAzZDk3Y2I4ZDllZDgwZQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBBcHIgMjQgMTA6MjU6MjkgMjAxMiAtMDQwMAogCi0yMDEwLTA3LTAyICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICBEYXJ3aW4vaU9TOiBTaW1wbGlmeSBSRVRMRE0gYXJndW1lbnRzIGZvciBMTFZNIDMuMQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KIAotCSogTWFrZWZpbGUuYW0gKEFNX01BS0VGTEFHUyk6IFBhc3MgYWxzbyBtYW5kaXIgdG8gc3VibWFrZXMuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCitjb21taXQgMTZiYTFiODAwMjhkYjVjYjcxY2Y4NmU1Zjc5ZjVlNDgzMTdmODNjOAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFdlZCBBcHIgMTEgMjM6MjY6MDQgMjAxMiAtMDQwMAogCi0yMDEwLTA1LTE5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBEYXJ3aW46IFNpbGVuY2UgQ2xhbmcgd2FybmluZ3MuCiAKLQkqIGNvbmZpZ3VyZS5hYyAobGliZmZpX2N2X2FzX3g4Nl9wY3JlbCk6IENoZWNrIGZvciBpbGxlZ2FsIGluIGFzCi0Jb3V0cHV0LCB0b28uCi0JKGxpYmZmaV9jdl9hc19hc2NpaV9wc2V1ZG9fb3ApOiBDaGVjayBmb3IgLmFzY2lpLgotCShsaWJmZmlfY3ZfYXNfc3RyaW5nX3BzZXVkb19vcCk6IENoZWNrIGZvciAuc3RyaW5nLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCi0JKiBzcmMveDg2L3N5c3YuUyAoLmVoX2ZyYW1lKTogVXNlIC5hc2NpaSwgLnN0cmluZyBvciBlcnJvci4KK2NvbW1pdCA4NTJhYzNiZDMwMmQ2ZWQ5N2IxZWY2NWY0Y2JlZDY5YzI1OGE0OGRmCitNZXJnZTogYWI3OWQ2ZSBhYzc1MzY4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgTm92IDIxIDIxOjI1OjQ0IDIwMTMgLTA1MDAKIAotMjAxMC0wNS0xMSAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJQ2hhbmdlTG9nCiAKLQkqIGRvYy9saWJmZmkudGV4OiBEb2N1bWVudCBwcmV2aW91cyBjaGFuZ2UuCitjb21taXQgYWI3OWQ2ZTIxOTkyZGQ4NjEzOWJhMDc1MzBmZjg4ODgzM2I3OGEwNAorQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBUaHUgTm92IDIxIDA2OjEyOjM1IDIwMTMgLTA1MDAKIAotMjAxMC0wNS0xMSAgTWFrb3RvIEthdG8gPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPgorICAgIFRoaXMgc2VwYXJhdGVzIHRoZSAzMi1iaXQgc3lzdi9saW51eC9ic2QgY29kZSBmcm9tIHRoZSA2NC1iaXQgbGludXgKKyAgICBjb2RlLCBhbmQgbWFrZXMgaXQgcG9zc2libGUgdG8gbGluayBjb2RlIGNvbXBpbGVkIHdpdGggZGlmZmVyZW50CisgICAgb3B0aW9ucyB0byB0aG9zZSB1c2VkIHRvIGNvbXBpbGUgbGliZmZpLiAgRm9yIGV4YW1wbGUsIGEKKyAgICAtbWxvbmctZG91YmxlLTEyOCBsaWJmZmkgY2FuIGJlIHVzZWQgd2l0aCAtbWxvbmctZG91YmxlLTY0IGNvZGUuCisgICAgCisgICAgVXNpbmcgdGhlIHJldHVybiB2YWx1ZSBhcmVhIGFzIGEgcGxhY2UgdG8gcGFzcyBwYXJhbWV0ZXJzIHdhc24ndCBzdWNoCisgICAgYSBnb29kIGlkZWEsIGNhdXNpbmcgYSBmYWlsdXJlIG9mIGNsc191bG9uZ2xvbmcuYy4gIEkgZGlkbid0IHNlZSB0aGlzCisgICAgd2hlbiBydW5uaW5nIHRoZSBtYWlubGluZSBnY2MgbGliZmZpIHRlc3RzdWl0ZSBiZWNhdXNlIHRoYXQgdmVyc2lvbiBvZgorICAgIHRoZSB0ZXN0IGlzIGluZmVyaW9yIHRvIHRoZSB1cHN0cmVhbW0gbGliZmZpIHRlc3QuCisgICAgCisgICAgVXNpbmcgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIHJhdGhlciB0aGFuIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0IG1lYW50CisgICAgdGhhdCBhIHBhcmFtZXRlciBzYXZlIGFyZWEgY291bGQgYmUgYWxsb2NhdGVkIGJlZm9yZSBpdCB3YXMgc3RyaWN0bHkKKyAgICBuZWNlc3NhcnkuICBXcm9uZyBidXQgaGFybWxlc3MuICBGb3VuZCB3aGVuIHNwbGl0dGluZyBhcGFydCBmZmkuYworICAgIGludG8gMzItYml0IGFuZCA2NC1iaXQgc3VwcG9ydC4KIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2NhbGwpOiBEb24ndCBjb3B5IHN0cnVjdHMgcGFzc2VkIGJ5IHZhbHVlLgorY29tbWl0IGFjNzUzNjg4OTMzNGQ0YmU1MDcwOTAwNmQ3ZTIzNTM2MzY0ZDc4OTEKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IE5vdiAyMSAwNjoxMjozNSAyMDEzIC0wNTAwCiAKLTIwMTAtMDUtMDUgIE1pY2hhZWwgS29obGVyIDxtaWNoYWVsa29obGVyQGxpdmUuY29tPgorICAgIFRoaXMgc2VwYXJhdGVzIHRoZSAzMi1iaXQgc3lzdi9saW51eC9ic2QgY29kZSBmcm9tIHRoZSA2NC1iaXQgbGludXgKKyAgICBjb2RlLCBhbmQgbWFrZXMgaXQgcG9zc2libGUgdG8gbGluayBjb2RlIGNvbXBpbGVkIHdpdGggZGlmZmVyZW50CisgICAgb3B0aW9ucyB0byB0aG9zZSB1c2VkIHRvIGNvbXBpbGUgbGliZmZpLiAgRm9yIGV4YW1wbGUsIGEKKyAgICAtbWxvbmctZG91YmxlLTEyOCBsaWJmZmkgY2FuIGJlIHVzZWQgd2l0aCAtbWxvbmctZG91YmxlLTY0IGNvZGUuCisgICAgCisgICAgVXNpbmcgdGhlIHJldHVybiB2YWx1ZSBhcmVhIGFzIGEgcGxhY2UgdG8gcGFzcyBwYXJhbWV0ZXJzIHdhc24ndCBzdWNoCisgICAgYSBnb29kIGlkZWEsIGNhdXNpbmcgYSBmYWlsdXJlIG9mIGNsc191bG9uZ2xvbmcuYy4gIEkgZGlkbid0IHNlZSB0aGlzCisgICAgd2hlbiBydW5uaW5nIHRoZSBtYWlubGluZSBnY2MgbGliZmZpIHRlc3RzdWl0ZSBiZWNhdXNlIHRoYXQgdmVyc2lvbiBvZgorICAgIHRoZSB0ZXN0IGlzIGluZmVyaW9yIHRvIHRoZSB1cHN0cmVhbW0gbGliZmZpIHRlc3QuCisgICAgCisgICAgVXNpbmcgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIHJhdGhlciB0aGFuIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0IG1lYW50CisgICAgdGhhdCBhIHBhcmFtZXRlciBzYXZlIGFyZWEgY291bGQgYmUgYWxsb2NhdGVkIGJlZm9yZSBpdCB3YXMgc3RyaWN0bHkKKyAgICBuZWNlc3NhcnkuICBXcm9uZyBidXQgaGFybWxlc3MuICBGb3VuZCB3aGVuIHNwbGl0dGluZyBhcGFydCBmZmkuYworICAgIGludG8gMzItYml0IGFuZCA2NC1iaXQgc3VwcG9ydC4KIAotCSogc3JjL2RsbWFsbG9jLmMgKGRsZnJlZSk6IEZpeCBzcGVsbGluZy4KLQkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERpdHRvLgotCSogY29uZmlndXJlLmFjOiBEaXR0by4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCA2OWRmOTFjZmI0ZmE2YmNiNjQ0MzUwYTgwYmZmOTcwZjI3NDc4YTZhCitNZXJnZTogMmY0NTA4MiBhYTFmNjJjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gTm92IDE4IDA2OjM0OjA0IDIwMTMgLTA4MDAKIAotMjAxMC0wNC0xMyAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNTkgZnJvbSBpYWlucy9wb3dlcnBjLWRhcndpbi11bndpbmQtZml4CisgICAgCisgICAgRml4IFBvd2VyUEMgRGFyd2luIEZERSBlbmNvZGluZ3MgdG8gdXNlIHBjcmVsIGNvcnJlY3RseS4gIE1vZGVybmlzZSB0aGUgcGljYmFzZSBsYWJlbHMuCiAKLQkqIG1zdmNjLnNoOiBCdWlsZCB3aXRoIC1XMyBpbnN0ZWFkIG9mIC1XYWxsLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBSZW1vdmUgYnVpbGQgd2FybmluZ3MuCi0JKiBzcmMveDg2L2ZmaS5jOiBEaXR0by4KLQkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IERpdHRvLgorY29tbWl0IGFhMWY2MmMwYTA5M2MzMDMyNWRmZjFkNGQyYjZiNGIyMmViOTY5MjkKK0F1dGhvcjogSWFpbiBTYW5kb2UgPGlhaW5AY29kZXNvdXJjZXJ5LmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAxOCAxMzoxMTo1NiAyMDEzICswMDAwCiAKLTIwMTAtMDQtMTIgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KLQkgICAgV2FsdGVyIE1laW5sIDx3dW5vQGxzdncuZGU+CisgICAgRml4IFBvd2VyUEMgRGFyd2luIEZERSBlbmNvZGluZ3MgdG8gdXNlIHBjcmVsIGNvcnJlY3RseS4gIE1vZGVybmlzZSB0aGUgcGljYmFzZSBsYWJlbHMuCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIE9TLzIgc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIHNyYy9jbG9zdXJlcy5jOiBEaXR0by4KLQkqIHNyYy9kbG1hbGxvYy5jOiBEaXR0by4KLQkqIHNyYy94ODYvd2luMzIuUzogRGl0dG8uCitjb21taXQgMmY0NTA4MjJhODY5OGJhODg0NDFjNTZkMTUyYzdkYzg5MjRiMTI3ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAxOCAwNjo1MjoyOSAyMDEzIC0wNTAwCiAKLTIwMTAtMDQtMDcgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIENsZWFuIHVwIGNvZGUgdG8gYXBwZWFzZSBtb2Rlcm4gR0NDIGNvbXBpbGVyLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogUmVtb3ZlIHVudXNlZCBhcmdzIHZhcmlhYmxlLgorY29tbWl0IDE2ZDU2YzUxYWRlZDM3NDczMDkyMGE0YWNkZTc2ZmYzZDI4NjBhZTEKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAxOCAwNjozNjowMyAyMDEzIC0wNTAwCiAKLTIwMTAtMDQtMDIgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisgICAgQW4gI2VuZGlmIGluIHRoZSB3cm9uZyBwbGFjZSB3b3VsZCBjYXVzZSBjb21waWxlIGZhaWx1cmUgb24gcG93ZXJwY2xlLgorICAgIFVzaW5nIGJsIGluc3RlYWQgb2YgYiBkb2Vzbid0IGNhdXNlIHJ1bnRpbWUgZmFpbHVyZXMgYXMgeW91IG1pZ2h0IHRoaW5rLAorICAgIGJ1dCBkb2VzIG1lc3MgdGhlIHByb2Nlc3NvciBicmFuY2ggcHJlZGljdGlvbi4KIAotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KK2NvbW1pdCAzNGY4NzhhNWVmMjg2NjNmNmIxZDdmZDI2ZmIwOTk0MjllYTE1NzllCitNZXJnZTogODNmNjViNiAxZmQwNDU3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjU3OjU0IDIwMTMgLTA1MDAKIAotMjAxMC0wMy0zMCAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJQ2hhbmdlTG9nCisgICAgCXNyYy9wb3dlcnBjL2ZmaS5jCiAKLQkqIG1zdmNjLnNoOiBEaXNhYmxlIGJ1aWxkIHdhcm5pbmdzLgotCSogUkVBRE1FICh0ZXN0ZWQpOiBDbGFyaWZ5IHdpbmRvd3MgYnVpbGQgcHJvY2VkdXJlLgorY29tbWl0IDgzZjY1YjYzZDk3NjRhOWNjNzY4OGZjNWNkYTVlZTJiZDIzZmFmNTQKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjo1Mzo1MCAyMDEzIC0wNTAwCiAKLTIwMTAtMDMtMTUgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorICAgIEZpbmFsbHksIHRoaXMgYWRkcyBfQ0FMTF9FTEYgPT0gMiBzdXBwb3J0LiAgRUxGdjEgb2JqZWN0cyBjYW4ndCBiZQorICAgIGxpbmtlZCB3aXRoIEVMRnYyIG9iamVjdHMsIHNvIHRoaXMgaXMgb25lIGNhc2Ugd2hlcmUgcHJlcHJvY2Vzc29yCisgICAgdGVzdHMgaW4gZmZpLmMgYXJlIGZpbmUuICBBbHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvIGRlZmluZSBhIG5ldworICAgIEZGSV9FTEZ2MiBvciBzb21lc3VjaCB2YWx1ZSBpbiBlbnVtIGZmaV9hYmkuICBGRklfTElOVVg2NCB3aWxsIGhhcHBpbHkKKyAgICBzZXJ2ZSBib3RoIEFCSXMuCiAKLQkqIGNvbmZpZ3VyZS5hYyAobGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlKTogTmV3IHRlc3QuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KLQkqIGxpYmZmaS9zcmMveDg2L3VuaXg2NC5TICguZWhfZnJhbWUpCi0JW0hBVkVfQVNfWDg2XzY0X1VOV0lORF9TRUNUSU9OX1RZUEVdOiBVc2UgQHVud2luZCBzZWN0aW9uIHR5cGUuCitjb21taXQgMWZkMDQ1Nzg0Y2FjODc0YjVkNzZiN2ZhOTMxZjY3MjA5YTgyODBkMworQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjUzOjUwIDIwMTMgLTA1MDAKIAotMjAxMC0wMy0xNCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisgICAgRmluYWxseSwgdGhpcyBhZGRzIF9DQUxMX0VMRiA9PSAyIHN1cHBvcnQuICBFTEZ2MSBvYmplY3RzIGNhbid0IGJlCisgICAgbGlua2VkIHdpdGggRUxGdjIgb2JqZWN0cywgc28gdGhpcyBpcyBvbmUgY2FzZSB3aGVyZSBwcmVwcm9jZXNzb3IKKyAgICB0ZXN0cyBpbiBmZmkuYyBhcmUgZmluZS4gIEFsc28sIHRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIGEgbmV3CisgICAgRkZJX0VMRnYyIG9yIHNvbWVzdWNoIHZhbHVlIGluIGVudW0gZmZpX2FiaS4gIEZGSV9MSU5VWDY0IHdpbGwgaGFwcGlseQorICAgIHNlcnZlIGJvdGggQUJJcy4KIAotCSogc3JjL3g4Ni9mZmk2NC5jOiBGaXggdHlwbyBpbiBjb21tZW50LgotCSogc3JjL3g4Ni9mZmkuYzogVXNlIC8qIC4uLiAqLyBjb21tZW50IHN0eWxlLgorY29tbWl0IDM2Mjg1MTM3OWE0OWNlMDdkM2UzNmU4MmM0ZTVjN2I2Y2MxNmEzNTIKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjo1Mjo0MyAyMDEzIC0wNTAwCiAKLTIwMTAtMDItMjQgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorICAgIEFuZHJlYXMnIDIwMTMtMDItMDggY2hhbmdlIHJldmVydGVkIHNvbWUgYnJlYWthZ2UgZm9yIHN0cnVjdCByZXR1cm4KKyAgICB2YWx1ZXMgZnJvbSAyMDExLTExLTEyLCBidXQgaW4gc28gZG9pbmcgcmVpbnRyb2R1Y2VkIHN0cmluZworICAgIGluc3RydWN0aW9ucyB0byBzeXN2LlMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBvbiBhbGwgcG93ZXJwYyB2YXJpYW50cy4KKyAgICBUaGlzIHBhdGNoIHByb3Blcmx5IGNvcGllcyB0aGUgYm91bmNlIGJ1ZmZlciB0byBkZXN0aW5hdGlvbiBpbiBDIGNvZGUKKyAgICByYXRoZXIgdGhhbiBpbiBhc20uCisgICAgCisgICAgSSBoYXZlIHRlc3RlZCB0aGlzIG9uIHBvd2VycGM2NC1saW51eCwgcG93ZXJwYy1saW51eCBhbmQKKyAgICBwb3dlcnBjLWZyZWVic2QuICBXZWxsLCB0aGUgbGFzdCBvbiBwb3dlcnBjLWxpbnV4IGJ5IGx5aW5nIHRvCisgICAgY29uZmlndXJlIHdpdGgKKyAgICAKKyAgICBDQz0iZ2NjIC1tMzIgLW1zdnI0LXN0cnVjdC1yZXR1cm4gLW1sb25nLWRvdWJsZS02NCIgXAorICAgIENYWD0iZysrIC1tMzIgLW1zdnI0LXN0cnVjdC1yZXR1cm4gLW1sb25nLWRvdWJsZS02NCIgXAorICAgIC9zcmMvbGliZmZpLWN1cnJlbnQvY29uZmlndXJlIC0tYnVpbGQ9cG93ZXJwYy1mcmVlYnNkCisgICAgCisgICAgYW5kIHRoZW4KKyAgICAKKyAgICBtYWtlICYmIG1ha2UgQ0M9ImdjYyAtbTMyIiBDWFg9ImcrKyAtbTMyIiBcCisgICAgUlVOVEVTVEZMQUdTPS0tdGFyZ2V0X2JvYXJkPXVuaXgvLW0zMi8tbXN2cjQtc3RydWN0LXJldHVybi8tbWxvbmctZG91YmxlLTY0XAorICAgICBjaGVjawogCi0JKiBkb2MvbGliZmZpLnRleGkgKFRoZSBDbG9zdXJlIEFQSSk6IEZpeCB0eXBvLgotCSogZG9jL2xpYmZmaS5pbmZvOiBSZW1vdmUuCitjb21taXQgMWMwNjUxNWQ5MjdkOWRlMTU4MjQzOGQ0ZWI1OTUzODkwZTc5YzVjNworQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjQxOjM2IDIwMTMgLTA1MDAKIAotMjAxMC0wMi0xNSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisgICAgVGhlIHBvd2VycGM2NCBBQklzIGFsaWduIHN0cnVjdHMgcGFzc2VkIGJ5IHZhbHVlLCBhIGZhY3QgaWdub3JlZCBieQorICAgIGdjYyBmb3IgcXVpdGUgc29tZSB0aW1lLiAgU2luY2UgZ2NjIG5vdyBkb2VzIHRoZSBjb3JyZWN0IGFsaWdubWVudCwKKyAgICBsaWJmZmkgbmVlZHMgdG8gZm9sbG93IHN1aXQuICBUaGlzIG91Z2h0IHRvIGJlIG1hZGUgc2VsZWN0YWJsZSB2aWEKKyAgICBhIG5ldyBhYmkgdmFsdWUsIGFuZCB0aGUgI2lmZGVmcyByZW1vdmVkIGZyb20gZmZpLmMgYWxvbmcgd2l0aCBtYW55CisgICAgb3RoZXIgI2lmZGVmcyBwcmVzZW50IHRoZXJlIGFuZCBpbiBhc3NlbWJseS4gIEknbGwgZG8gdGhhdCB3aXRoIGEKKyAgICBmb2xsb3d1cCBwYXRjaCBzb21ldGltZS4KKyAgICAKKyAgICBUaGlzIGlzIGEgcmV2aXNlZCB2ZXJzaW9uIG9mCisgICAgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJmZmktZGlzY3Vzcy8yMDEzL21zZzAwMTYyLmh0bWwKIAotCSogc3JjL2FybS9zeXN2LlMgKF9fQVJNX0FSQ0hfXyk6IERlZmluZSBmb3IgcHJvY2Vzc29yCi0JX19BUk1fQVJDSF83RU1fXy4KK2NvbW1pdCBhOTdjZjFmYWU1NzVkOGJmZDUyNTljNWM0MjIwMjVhZDQzOTExMzI2CitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6NDA6MTMgMjAxMyAtMDUwMAogCi0yMDEwLTAxLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICBUaGlzIHBhdGNoIHByZXBhcmVzIGZvciBFTEZ2Miwgd2hlcmUgc2l6ZXMgb2YgdGhlc2UgYXJlYXMgY2hhbmdlLiAgSXQKKyAgICBhbHNvIG1ha2VzIHNvbWUgbWlub3IgY2hhbmdlcyB0byBpbXByb3ZlIGNvZGUgZWZmaWNpZW5jeS4KIAotCSogUkVBRE1FOiBBZGQgbm90ZXMgb24gYnVpbGRpbmcgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KK2NvbW1pdCAxNjQyODNmNGFjNTk3MmNlMmFiNWUwMTVjYzJhYjEwMTRjMjMyNzZjCitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6Mzg6NTUgMjAxMyAtMDUwMAogCi0yMDEwLTAxLTE1ICBEYW5pZWwgV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisgICAgVGhlIHBvd2VycGM2NCBzdXBwb3J0IG9wdGVkIHRvIHBhc3MgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGJvdGggaW4gdGhlCisgICAgZnByIGFyZWEgYW5kIHRoZSBwYXJhbWV0ZXIgc2F2ZSBhcmVhLCBuZWNlc3Nhcnkgd2hlbiB0aGUgYmFja2VuZAorICAgIGRvZXNuJ3Qga25vdyBpZiBhIGZ1bmN0aW9uIGFyZ3VtZW50IGNvcnJlc3BvbmRzIHRvIHRoZSBlbGxpcHNpcworICAgIGFyZ3VtZW50cyBvZiBhIHZhcmlhZGljIGZ1bmN0aW9uLiAgVGhpcyBwYXRjaCBhZGRzIHBvd2VycGMgc3VwcG9ydCBmb3IKKyAgICB2YXJpYWRpYyBmdW5jdGlvbnMsIGFuZCBjaGFuZ2VzIHRoZSBjb2RlIHRvIG9ubHkgcGFzcyBmcCBpbiB0aGUgQUJJCisgICAgbWFuZGF0ZWQgYXJlYS4gIEVMRnYyIG5lZWRzIHRoaXMgY2hhbmdlIHNpbmNlIHRoZSBwYXJhbWV0ZXIgc2F2ZSBhcmVhCisgICAgbWF5IG5vdCBleGlzdCB0aGVyZS4KKyAgICAKKyAgICBUaGlzIGFsc28gZml4ZXMgdHdvIGZhdWx0eSB0ZXN0cyB0aGF0IHVzZWQgYSBub24tdmFyaWFkaWMgZnVuY3Rpb24KKyAgICBjYXN0IHRvIGNhbGwgYSB2YXJpYWRpYyBmdW5jdGlvbiwgYW5kIHNwdXJpb3VzbHkgcmVhc29uZWQgdGhhdCB0aGlzIGlzCisgICAgc29tZWhvdyBuZWNlc3NhcnkgZm9yIHN0YXRpYyBmdW5jdGlvbnMuLgogCi0JKiBtc3ZjYy5zaDogTmV3IGZpbGUuCitjb21taXQgMzEyNTdiMzE4OWY4MWExOTliYzI5MDJjMjJiYzVmMmQ3YzU0Y2NkZQorQXV0aG9yOiBBbmRyZXcgSGFsZXkgPGFwaEByZWRoYXQuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjM1OjUxIDIwMTMgLTA1MDAKIAotCSogc3JjL3g4Ni93aW4zMi5TOiBQb3J0IGFzc2VtYmx5IHJvdXRpbmVzIHRvIE1TVkMgYW5kICNpZmRlZi4KLQkqIHNyYy94ODYvZmZpLmM6IFR3ZWFrIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCByZW1vdmUgZXhjZXNzCi0JcGFyZW5zLgotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIF9fZGVjbHNwZWMoYWxpZ24oOCkpIHRvIHR5cGVkZWYgc3RydWN0Ci0JZmZpX2Nsb3N1cmUuCisgICAgRml4IHNhbXBsZSBjbG9zdXJlIGNvZGUKIAotCSogc3JjL3g4Ni9mZmkuYzogTWVyZ2UgZmZpX2NhbGxfU1lTViBhbmQgZmZpX2NhbGxfU1REQ0FMTCBpbnRvIG5ldwotCWZ1bmN0aW9uIGZmaV9jYWxsX3dpbjMyIG9uIFg4Nl9XSU4zMi4KLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2NhbGxfU1lTVik6IFJlbmFtZSB0byBmZmlfY2FsbF93aW4zMi4KLQkoZmZpX2NhbGxfU1REQ0FMTCk6IFJlbW92ZS4KK2NvbW1pdCBkYjBhY2UzYTM4NDk2YWY3M2VhZTNkZjAyZWYzNTM3MzZkMTY5MDlmCitBdXRob3I6IEFuZHJldyBIYWxleSA8YXBoQHJlZGhhdC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6Mjk6MjUgMjAxMyAtMDUwMAogCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogTW92ZSBzdGFjayBzcGFjZSBhbGxvY2F0aW9uIGNvZGUKLQl0byBmZmlfcHJlcF9jaWZfbWFjaGRlcCBmb3IgeDg2LgotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBUbyBoZXJlLgorICAgIEZpeCBicm9rZW4gdGVzdCBjYXNlcwogCi0yMDEwLTAxLTE1ICBPbGl2ZXIgS2lkZGxlICA8b2tpZGRsZUB5YWhvby5jby51az4KK2NvbW1pdCBkZTEwZjUwMzllZDdhNTMzODJkZGNjOTVjMzY4ZDAzZTUzNWVkYjk4CitNZXJnZTogNThjMjU3NyBmMzY1N2RhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgTm92IDE0IDEwOjU2OjI5IDIwMTMgLTA1MDAKIAotCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IENoZWNrIGZvciBfX2kzODYgYW5kIF9fYW1kNjQgZm9yCi0JU3VuIFN0dWRpbyBjb21waWxlciBjb21wYXRpYmlsaXR5LgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBodHRwczovL2dpdGh1Yi5jb20vYml2YWIvbGliZmZpCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlDaGFuZ2VMb2cKIAotMjAxMC0wMS0xMiAgQ29ucmFkIElyd2luIDxjb25yYWQuaXJ3aW5AZ21haWwuY29tPgorY29tbWl0IGYzNjU3ZGEyNzhkZDYzYWZjZGQ4NzYyODk0YTliZGFlYThlZjAyOGEKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFRodSBOb3YgMTQgMTM6MDI6MTYgMjAxMyArMDEwMAogCi0JKiBkb2MvbGliZmZpLnRleGk6IEFkZCBjbG9zdXJlIGV4YW1wbGUuCisgICAgdXBkYXRlIENoYW5nZWxvZwogCi0yMDEwLTAxLTA3ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCA1OGMyNTc3YTNmZjgwZTc0MTZlZjA0MzQ3NjllMmFmMjMzNjU3MTljCitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFdlZCBOb3YgMTMgMTY6NTU6MzYgMjAxMyAtMDUwMAogCi0JUFIgbGliZmZpLzQwNzAxCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtfX2FscGhhX18gJiYgX19vc2ZfX10gKFBSSWRMTCwKLQlQUkl1TEwsIFBSSWQ2NCwgUFJJdTY0LCBQUkl1UFRSKTogRGVmaW5lLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogQWRkIC1Xbm8tZm9ybWF0IG9uCi0JYWxwaGEqLWRlYy1vc2YqLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChhbGxvY2F0ZV9tbWFwKTogQ2FzdAotCU1BUF9GQUlMRUQgdG8gY2hhciAqLgorICAgIFRoaXMgZW5zaHJpbmVzIHRoZSBjdXJyZW50IHRlc3RzdWl0ZSBwcmFjdGljZSBvZiB1c2luZyBmZmlfYXJnIGZvcgorICAgIHJldHVybmVkIHZhbHVlcy4gIEl0IHdvdWxkIGJlIHJlYXNvbmFibGUgYW5kIGxvZ2ljYWwgdG8gdXNlIHRoZSBhY3R1YWwKKyAgICByZXR1cm4gYXJndW1lbnQgdHlwZSBhcyBwYXNzZWQgdG8gZmZpX3ByZXBfY2lmLCBidXQgdGhpcyB3b3VsZCBtZWFuCisgICAgY2hhbmdpbmcgYSBsYXJnZSBudW1iZXIgb2YgdGVzdHMgdGhhdCB1c2UgZmZpX2FyZyBhbmQgYWxsIGJhY2tlbmRzCisgICAgdGhhdCB3cml0ZSByZXN1bHRzIHRvIGFuIGZmaV9hcmcuCiAKLTIwMTAtMDEtMDYgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDhhZjQyZjk5NDRmN2VkNzJjODFhZTM2MGFhYzZhODRkYzExZjg5ZGMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBOb3YgMTMgMTY6NDA6MjggMjAxMyAtMDUwMAogCi0JKiBzcmMvbWlwcy9uMzIuUzogVXNlIC5hYmljYWxscyBhbmQgLmVoX2ZyYW1lIHdpdGggX19HTlVDX18uCisgICAgUmVzcGVjdCBIQVZFX0FMTE9DQV9ICiAKLTIwMDktMTItMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorY29tbWl0IGNkZjQwNWQ1NzRmNDc5Yjc4MjQ1NDUxNjM2NmJkNGY0YjliMzQxNWUKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFdlZCBOb3YgMTMgMTU6NTA6MjEgMjAxMyArMDEwMAogCi0JKiBSRUFETUU6IFVwZGF0ZSBmb3IgbGliZmZpIDMuMC45LgorICAgIGFkZCBhIHRlc3RjYXNlIGZvciB0aGUgZG91YmxlL2Zsb2F0IGlzc3VlIG9uIEFSTUhGCiAKLTIwMDktMTItMjcgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorY29tbWl0IDc3ZjgyM2UzMWZmYjU1N2E0NjZiMjRmN2ZiYTg0NWZiZjc4MzE3OTgKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFdlZCBOb3YgMTMgMTQ6MjY6NTcgMjAxMyArMDEwMAogCi0JKiBjb25maWd1cmUuYWMgKEhBVkVfTE9OR19ET1VCTEUpOiBEZWZpbmUgZm9yIG1pcHMgd2hlbgotCWFwcHJvcHJpYXRlLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIHN0b3AgdHJ5aW5nIHRvIGFzc2luZyB2ZnAgcmVncyBvbmNlIHdlIGFyZSBkb25lIHdpdGggdGhlIHJlZ2lzdGVycwogCi0yMDA5LTEyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KK2NvbW1pdCAzNzA2N2VjNTAzNmYyYTZlZDdhNDc5OWY4M2Y4ZjUzMTYwNDYwMzQ0CitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUdWUgTm92IDEyIDE5OjQ5OjAxIDIwMTMgKzAxMDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IE1hcmsgYXMgeGZhaWwgZm9yCi0JYXZyMzIqLSotKi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmM6IERpdHRvLgorICAgIG1hcmsgYWxsIHZmcCByZWdpc3RlcnMgYXMgdXNlZCB3aGVuIGRvbmUuCisgICAgCisgICAgVG8gYXZvaWQgYXNzaWduaW5nIHJlZ2lzdGVycyB0aGUgd291bGQgZml0LCBvbmNlIGFyZ3VtZW50cyBoYXZlIGJlZW4gb24KKyAgICB0aGUgc3RhY2ssIHdlIG1hcmsgYWxsIHJlZ2lzdGVycyBhcyB1c2VkIG9uY2Ugd2UgZG8gbm90IGZpbmQgYSBmcmVlCisgICAgcmVnaXN0ZXIgZm9yIHRoZSBmaXJzdCB0aW1lLgogCi0yMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IDJmNWI3Y2U1NDU0NzNhN2Y2ZTQxMTkzZWRjMjk0MDdjYmViZTgyZDUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgOSAwNjoxNjozMiAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IENvbmRpdGlvbmFsbHkgaW5jbHVkZSBzdGRpbnQuaAotCWFuZCBpbnR0eXBlcy5oLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IERpdHRvLgorICAgIFVsdHJhU1BBUkMgSUlpIGZpeC4gIFVwZGF0ZSBSRUFETUUgYW5kIGJ1aWxkIGNvbmZpZ3VyeS4KIAotMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCBiZWNkNzU0NDM0MTczMDMyZjQyNmQyMmZmY2JmZTI0ZjU1YjNjMTM3CitBdXRob3I6IE1hcmsgS2V0dGVuaXMgPGtldHRlbmlzQGdudS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgNiAwNjo0Mzo0OSAyMDEzIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIGFtZDY0LSotb3BlbmJzZCouCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IExpbmsKLQlvcGVuYnNkIHByb2dyYW1zIHdpdGggLWxwdGhyZWFkLgorICAgIEFsaWduIHRoZSBzdGFjayBwb2ludGVyIHRvIDE2LWJ5dGVzLgogCi0yMDA5LTEyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KK2NvbW1pdCAwNWMzMTA5MzQwOWY3YjNlNmQ3OTVmYWMyMWQyYzk1NDMxM2Q4MTYyCitBdXRob3I6IEtvbnN0YW50aW4gQmVsb3Vzb3YgPGtpYkBmcmVlYnNkLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiA2IDA2OjQwOjU4IDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYzogUmVtb3ZlIHhmYWlsIGZvcgotCW1pcHMqLSotKiBhbmQgYXJtKi0qLSouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBSZW1vdmUgeGZhaWwgZm9yIGFybSotKi0qLgorICAgIE1hcmsgZXhlY3V0YWJsZSBhcyBub3QgcmVxdWlyaW5nIGV4ZWN1dGFibGUgc3RhY2suCiAKLTIwMDktMTItMzEgIEtheSBUaWV0eiAgPGt0aWV0ejcwQGdvb2dsZW1haWwuY29tPgorY29tbWl0IGNmNmJmOTgxOGU4Mzk0Y2ZjZGIwN2E0MGM2YTVlMmVlNmIwMWQzMzMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMiAxNzoyMzo1OSAyMDEzIC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCi0JdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUnVMTCk6IEZpeAotCWRlZmluaXRpb25zLgorICAgIEZpeCB1cCBkb2NzCiAKLTIwMDktMTItMzEgIENhcmxvIEJyYW1pbmkgIDxjYXJsby5icmFtaXhAbGliZXJvLml0PgorY29tbWl0IDAyMTc3MTc2ODU0ZDE2ZmMwZjFhNTk1OGFhMzRkYTJmMzA2NjMwZWUKK01lcmdlOiBjMjQyMjE3IGMyNjViNGMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMiAxNzoxMToyMiAyMDEzIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoQU1fTFRMREZMQUdTKTogRGVmaW5lIGZvciB3aW5kb3dzIGhvc3RzLgotCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9MREZMQUdTKTogQWRkIEFNX0xUTERGTEFHUy4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0yMDA5LTEyLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KLQkgICAgQmxha2UgQ2hhZmZpbi4KK2NvbW1pdCBjMjQyMjE3NGIzZWRjMGRlMGIxNDhkZmQ2YjY3MDg3YmI4ODFjNGE2CitNZXJnZTogZjRiODQzZiBkOTE4ZDQ3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDIgMTQ6MDg6MjMgMjAxMyAtMDcwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogTmV3IHRlc3QgY2FzZSBmcm9tIEJsYWtlCi0JQ2hhZmZpbiBAIEFwcGxlLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNDUgZnJvbSBmb3NzLWZvci1zeW5vcHN5cy1kd2MtYXJjLXByb2Nlc3NvcnMvYXJjX3N1cHBvcnQKKyAgICAKKyAgICBhcmM6IEZpeCBidWlsZCBlcnJvcgogCi0yMDA5LTEyLTI4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgYzI2NWI0Y2FjYjkxMzBmMDQyNjk5YTg1ZGU5YzcyNDJiM2Y0OWNjMworTWVyZ2U6IGY0Yjg0M2YgZDkxOGQ0NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAyIDE0OjA4OjIzIDIwMTMgLTA3MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogQ29weSBhYmkgYW5kIG5hcmdzIHRvCi0JbG9jYWwgdmFyaWFibGVzLgotCShhaXhfYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyk6IE5ldyBmdW5jdGlvbi4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDYWxsIGl0LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNDUgZnJvbSBmb3NzLWZvci1zeW5vcHN5cy1kd2MtYXJjLXByb2Nlc3NvcnMvYXJjX3N1cHBvcnQKKyAgICAKKyAgICBhcmM6IEZpeCBidWlsZCBlcnJvcgogCi0yMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IGY0Yjg0M2Y4MzcxMGFjMzc4YzQ4YWJkODdmZTY2YmI1MTlkMzBkMmUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMiAxNzowMToxNSAyMDEzIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogRGVmaW5lIEZGSV9NTUFQX0VYRUNfV1JJVCBmb3IgdGhlIGdpdmVuIHRhcmdldHMuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCi0JKiBzcmMvY2xvc3VyZXMuYzogUmVtb3ZlIHRoZSBGRklfTU1BUF9FWEVDX1dSSVQgZGVmaW5pdGlvbiBmb3IKLQlTb2xhcmlzL3g4Ni4KKyAgICBEb24ndCBhbGlnbiBzdGFjayBmb3Igd2luMzIKIAotMjAwOS0xMi0yNiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAbGludXgtbTY4ay5vcmc+Citjb21taXQgZjNjZDM5MzQ1NzEzZGI4ZTQxNGNmNjQyYjZjYjY1YTRjZmU2MDE4YworTWVyZ2U6IDY2NmYzZTcgNmFhMTU5MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAyIDEzOjE3OjU3IDIwMTMgLTA3MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEFkdmFuY2UgaW50YXJnX2NvdW50Ci0Jd2hlbiBhIGZsb2F0IGFyZ3VtZW50cyBpcyBwYXNzZWQgaW4gbWVtb3J5LgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IE1hcmsgZ2VuZXJhbCByZWdpc3RlcnMgYXMgdXNlZCB1cCB3aGVuCi0JYSA2NGJpdCBvciBzb2Z0LWZsb2F0IGxvbmcgZG91YmxlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbiBtZW1vcnkuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM1MSBmcm9tIHZidWRvdnNraS9mb3JfdXBzdHJlYW0KKyAgICAKKyAgICBEb24ndCB1c2UgMTYgYnl0ZSBhbGlnbmVkIHN0YWNrIGZvciBXSU4zMgogCi0yMDA5LTEyLTI1ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KK2NvbW1pdCA2NjZmM2U3MWI1NmQ5MmM0OWZjZDJkN2YzNDliOGY4ZWJjYTBmOGEzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgT2N0IDI2IDA5OjEyOjQyIDIwMTMgLTA0MDAKIAotCSogbWFuL2ZmaV9jYWxsLjM6IEZpeCAjaW5jbHVkZSBpbiBleGFtcGxlcy4KLQkqIGRvYy9saWJmZmkudGV4aTogQWRkIGRpcmNhdGVnb3J5LgorICAgIEFkZCBtb3JlIGNyZWRpdHMgdG8gUkVBRE1FLiAgVGlkeSB1cC4KIAotMjAwOS0xMi0yNSAgRnJhbmsgRXZlcmRpaiA8Zi5wLnguZXZlcmRpakB0dWRlbGZ0Lm5sPgorY29tbWl0IDczYWRhMTRlNzU2YmFkOTdmYWQwZTY5MTVhODIxYTNjN2UwNzlmODEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBPY3QgMjYgMDk6MDk6NDUgMjAxMyAtMDQwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBQbGFjZWQgJ19fR05VQ19fJyBpZmRlZiBhcm91bmQKLQknX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpJyBpbiBmZmlfY2xvc3VyZSwgZml4ZXMgY29tcGlsZSBmb3IKLQlJUklYIE1JUFNQcm8gYzk5LgotCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IEFkZGVkICdfX3NnaScgZGVmaW5lIHRvIG5vbgotCSdfX2F0dHJpYnV0ZV9fKChfX21vZGVfXygpKSknIGludGVnZXIgdHlwZWRlZnMuCi0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX2NhbGwsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyLAotCWZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogQWRkZWQgJ2RlZmluZWQoX01JUFNFQiknIHRvIEJFIGNoZWNrLgotCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBBZGRlZAotCUZGSV9MT05HRE9VQkxFIHN1cHBvcnQgYW5kIGFsaWdubWVudChOMzIgb25seSkuCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogQ29ycmVjdGVkICcjaW5jbHVkZSA8c2dpZGVmcy5oPicgZm9yIElSSVggYW5kCi0JZml4ZWQgbm9uICdfX2F0dHJpYnV0ZV9fKChfX21vZGVfXygpKSknIGludGVnZXIgdHlwZWRlZnMuCi0JKiBzcmMvbWlwcy9uMzIuUzogUHV0ICcjaWZkZWYgbGludXgnIGFyb3VuZCAnLmFiaWNhbGxzJyBhbmQgJy5laF9mcmFtZScKLQlzaW5jZSB0aGV5IGFyZSBMaW51eC9HTlUgQXNzZW1ibGVyIHNwZWNpZmljLgorICAgIFVwZGF0ZSBSRUFETUUKIAotMjAwOS0xMi0yNSAgQnJhZGxleSBTbWl0aCAgPGJyYWRAYnJhZC1zbWl0aC5jby51az4KK2NvbW1pdCBkMzM3MmM1NGNlNzExN2U4MGQzODliYTg3NWRjNWI2YjIyMTNjNzFlCitBdXRob3I6IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgorRGF0ZTogICBTYXQgT2N0IDI2IDA4OjMwOjA2IDIwMTMgLTA0MDAKIAotCSogY29uZmlndXJlLmFjLCBNYWtlZmlsZS5hbSwgc3JjL2F2cjMyL2ZmaS5jLAotCXNyYy9hdnIzMi9mZml0YXJnZXQuaCwKLQlzcmMvYXZyMzIvc3lzdi5TOiBBZGQgQVZSMzIgcG9ydC4KLQkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgRml4IE4zMiBBQkkgaXNzdWUgZm9yIE1JUFMuCiAKLTIwMDktMTItMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgZDY3MTZhYmE4MTE4ZWIwNTEzODg1Y2ZlNTU3YmVkZWJiNzAxNmU4YgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAxNSAxNTo0Mjo0OSAyMDEzIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogTWFrZSBpPzg2IGJ1aWxkIG9uIEZyZWVCU0QgYW5kIE9wZW5CU0QuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgVXBkYXRlIHRyYXZpcy1jaSBidWlsZCBkZXBlbmRlbmNpZXMgdG8gaW5jbHVkZSB0ZXhpbmZvCiAKLTIwMDktMTItMTUgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+Citjb21taXQgMTZiOTNhMjExYmNmYmU0YmQwZWZkY2Y5NGRlMjI1YTcxYWEwZWUwMgorQXV0aG9yOiBTYW5kcmEgTG9vc2Vtb3JlIDxzYW5kcmFAY29kZXNvdXJjZXJ5LmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAxNSAxNTozMzo1OSAyMDEzIC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IERlZmluZSBQUkl1UFRSIG9uIFBBIEhQLVVYLgorICAgIEFkZCBuaW9zMiBwb3J0LgogCi0yMDA5LTEyLTEzICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorY29tbWl0IDJmNTYyNmNlMDJmY2U4MjY3YWI0OGNlYjZkN2QwZWQ3ZDY3MmE3NWUKK0F1dGhvcjogU2FuZHJhIExvb3NlbW9yZSA8c2FuZHJhQGNvZGVzb3VyY2VyeS5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMTUgMTU6MzI6MTYgMjAxMyAtMDQwMAogCi0JKiBzcmMvcGEvZmZpLmMgKGZmaV9jbG9zdXJlX2lubmVyX3BhMzIpOiBIYW5kbGUgRkZJX1RZUEVfTE9OR0RPVUJMRQotCXR5cGUgb24gSFAtVVguCisgICAgRml4IHRlc3RzdWl0ZSBidWcKIAotMjAxMi0wMi0xMyAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+Citjb21taXQgZjY0ZTRhODY1NTU3ZTQ0MDc3NDQzNmI0YzJiMmZkNzM3NDI5MGU5NworQXV0aG9yOiBNYXJjdXMgU2hhd2Nyb2Z0IDxtYXJjdXMuc2hhd2Nyb2Z0QGFybS5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMTUgMTU6MjA6MTQgMjAxMyAtMDQwMAogCi0JUFIgbGliZmZpLzUyMjIxCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBBZGQgdGhpc2NhbGwKLQlzdXBwb3J0IGZvciBYODZfV0lOMzIuCi0JKEZGSV9JTklUX1RSQU1QT0xJTkVfVEhJU0NBTEwpOiBGaXggZGlzcGxhY2VtZW50LgorICAgIEZpeCBtYW55LmMgdGVzdGNhc2UgZm9yIEFhcmNoNjQKIAotMjAwOS0xMi0xMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KK2NvbW1pdCAxMjhjZDFkMmYzNThmMjZkOWZhNzVhMjdjZjJiMzAzNTZmNWRkOTAzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDggMDY6NDU6NTEgMjAxMyAtMDQwMAogCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y5KTogUHJvcGVybHkgYWxpZ24gJ2xvbmcKLQlkb3VibGUnIGFyZ3VtZW50cy4KKyAgICBGaXggc3BlbGxpbmcgZXJyb3JzCiAKLTIwMDktMTItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+Citjb21taXQgZmYwNjI2OWQ3MDdjYWZiZmVmMmE4OGFmYjA3YTc5YzlkMTQ4MGM1ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCA4IDA2OjMyOjE4IDIwMTMgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogRGVmaW5lIFBSSXVQVFIgb24gU29sYXJpcyA8IDEwLgorICAgIFVwZGF0ZSBSRUFETUUgZm9yIE04OEsgYW5kIFZBWAogCi0yMDA5LTEyLTEwICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCBkMmZjYmNkZmJlYTc1MGQxZjZhOWY0OTNlMmU2YzRkNWZmYTcxYjM0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDggMDY6Mjc6NDYgMjAxMyAtMDQwMAogCi0JUFIgbGliZmZpLzQwNzAwCi0JKiBzcmMvY2xvc3VyZXMuYyBbWDg2XzY0ICYmIF9fc3VuX18gJiYgX19zdnI0X19dCi0JKEZGSV9NTUFQX0VYRUNfV1JJVCk6IERlZmluZS4KKyAgICBBZGQgbTg4ayBhbmQgVkFYIHN1cHBvcnQuIFVwZGF0ZSBzb21lIGNvbmZpZ3VyeSBiaXRzLgogCi0yMDA5LTEyLTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBjYXZpdW1uZXR3b3Jrcy5jb20+Citjb21taXQgNmFhMTU5MDBhY2NjMGE2NDhjZGViZjExZWMxMWQxMTY5N2ViZmZmZAorQXV0aG9yOiBWaXRhbHkgQnVkb3Zza2kgPHZidWRvdnNraUBnbWFpbC5jb20+CitEYXRlOiAgIFRodSBTZXAgNSAxMjowNTowNiAyMDEzICsxMDAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzKi0qLSoKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogU2FtZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiBTYW1lLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmM6IFNhbWUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IFNhbWUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBTYW1lLgorICAgIERvbid0IHVzZSAxNiBieXRlIGFsaWduZWQgc3RhY2sgZm9yIFdJTjMyCisgICAgCisgICAgVGhpcyBmaXhlcyBhIGNyYXNoIHdoZW4gYWNjZXNzaW5nIF9fc3RkY2FsbCBmdW5jdGlvbnMgaW4gUHl0aG9uIGN0eXBlcy4KIAotMjAwOS0xMi0wNyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IDNiNDRkNDExNTYxNDlhZjhkYTJhNTg4MjVmZWZkZmEyMzI3NGFlN2EKK0F1dGhvcjogTWFrb3RvIEthdG8gPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPgorRGF0ZTogICBXZWQgSnVsIDEwIDE1OjM0OjUzIDIwMTMgKzA5MDAKIAotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUyAobGliZmZpX2Nsb3N1cmVfQVNNKTogRml4IHRhYmxlanVtcAotCXR5cG8uCisgICAgRml4IGJ1aWxkIGZhaWx1cmUgd2hlbiB1c2luZyBjbGFuZyBmb3IgQW5kcm9pZAorICAgIAorICAgIGNsYW5nIGZvciBBbmRyb2lkIGdlbmVyYXRlcyBfX2dudV9saW51eF9fIGRlZmluZSwgYnV0IGdjYyBmb3IgQW5kcm9pZCBkb2Vzbid0LiAgU28gd2Ugc2hvdWxkIGFkZCBjaGVjayBpdCBmb3IgQW5kcm9pZAogCi0yMDA5LTEyLTA1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgZDkxOGQ0NzgwOWMxNzRkNjIyODMzMDZiMjgyNzQ5ZjhkYjkzNjYxZgorQXV0aG9yOiBNaXNjaGEgSm9ua2VyIDxtam9ua2VyQHN5bm9wc3lzLmNvbT4KK0RhdGU6ICAgTW9uIEp1bCA4IDE1OjUxOjM2IDIwMTMgKzAyMDAKIAotCSogc3JjL3Bvd2VycGMvYWl4LlM6IFVwZGF0ZSBBSVgzMiBjb2RlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBBSVg2NAotCWNvZGUuCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBTYW1lLgorICAgIGFyYzogRml4IGJ1aWxkIGVycm9yCisgICAgCisgICAgT25lIHBhcnQgb2YgdGhlIHBhdGNoIGZvciBBUkMgc3VwcG9ydCB3YXMgbWlzc2luZyBpbiB0aGUgdXBzdHJlYW1lZAorICAgIHZlcnNpb24uCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWlzY2hhIEpvbmtlciA8bWpvbmtlckBzeW5vcHN5cy5jb20+CiAKLTIwMDktMTItMDUgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+Citjb21taXQgZDNkMDk5YjQwYzEyMjU1MDI3OTc4OTIwMDI2MzM0NmYxMjBmNjkwOQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAyIDE2OjExOjM4IDIwMTMgLTA0MDAKIAotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogbWFuL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIGxpdHRsZS1lbmRpYW4gcHBjNjQgc3VwcG9ydAogCi0yMDA5LTEyLTA0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgMGY4NjkwYTg0Yzg3NGVjMDlhMDkwYzhjNmFkZmI5M2M1OTRhY2FjNgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAyIDE1OjU0OjQwIDIwMTMgLTA0MDAKIAotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogUmVvcmdhbml6ZSA2NC1iaXQgY29kZSB0byBtYXRjaAotCWxpbnV4NjRfY2xvc3VyZS5TLgorICAgIFJlYnVpbGQgZm9yIEFSQyBhZGRpdGlvbnMKIAotMjAwOS0xMi0wNCAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KK2NvbW1pdCBmODgxMThiMzQ1ZjI3YzQ2ZjU0NDVkNmU0ODMyYzQ5OGZmOWE2ZDg1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSnVsIDIgMTU6NTE6MjcgMjAxMyAtMDQwMAogCi0JUFIgbGliZmZpLzQxOTA4Ci0JKiBzcmMveDg2L2ZmaTY0LmMgKGNsYXNzaWZ5X2FyZ3VtZW50KTogVXBkYXRlIGZyb20KLQlnY2MvY29uZmlnL2kzODYvaTM4Ni5jLgotCShmZmlfY2xvc3VyZV91bml4NjRfaW5uZXIpOiBEbyBub3QgdXNlIHRoZSBhZGRyZXNzIG9mIHR3byBjb25zZWN1dGl2ZQotCVNTRSByZWdpc3RlcnMgZGlyZWN0bHkuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMgKG1haW4pOiBSZW1vdmUgeGZhaWwKLQlmb3IgeDg2XzY0IGxpbnV4IHRhcmdldHMuCisgICAgUmV2ZXJ0ICJNZXJnZSBwdWxsIHJlcXVlc3QgIzM2IGZyb20gYWJlcmdtZWllci9lbXNjcmlwdGVuX2ZpeCIKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDZhNGQ5MDFkZGU3YjNmODc5ODRjNTYzNTA1NzE3Y2RlMzExM2QxNmUsIHJldmVyc2luZworICAgIGNoYW5nZXMgbWFkZSB0byBiNTBhMTNiOWMwN2VjMDlhZjRiOTY5N2U0ODJhY2RhZDU3MWU2OTYxLgogCi0yMDA5LTEyLTA0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgNmE0ZDkwMWRkZTdiM2Y4Nzk4NGM1NjM1MDU3MTdjZGUzMTEzZDE2ZQorTWVyZ2U6IGI1MGExM2IgNTg3MDAyYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAyIDEyOjEyOjM0IDIwMTMgLTA3MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogSW5jcmVtZW50Ci0JcGZyIGZvciBsb25nIGRvdWJsZSBzcGxpdCBiZXR3ZWVuIGZwcjEzIGFuZCBzdGFjay4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzM2IGZyb20gYWJlcmdtZWllci9lbXNjcmlwdGVuX2ZpeAorICAgIAorICAgIEZpeGVzIGZvciBidWlsZGluZyB3aXRoIEVtc2NyaXB0ZW4KIAotMjAwOS0xMi0wMyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IGI1MGExM2I5YzA3ZWMwOWFmNGI5Njk3ZTQ4MmFjZGFkNTcxZTY5NjEKK01lcmdlOiA3NjdmMWY5IGIwODJlMTUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMiAxMjoxMDoyNiAyMDEzIC0wNzAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEluY3JlbWVudCBuZXh0X2FyZyBhbmQKLQlmcGFyZ19jb3VudCB0d2ljZSBmb3IgbG9uZyBkb3VibGUuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM0NCBmcm9tIGZvc3MtZm9yLXN5bm9wc3lzLWR3Yy1hcmMtcHJvY2Vzc29ycy9hcmNfc3VwcG9ydAorICAgIAorICAgIEFkZCBBUkMgc3VwcG9ydAogCi0yMDA5LTEyLTAzICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgNzY3ZjFmOTZlNTI4MmRhNDRkNzM0MGU2ODE1ZTk4MjBhM2Y3OGUzOQorTWVyZ2U6IGMzYzQwZTAgYjhhOTFkOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAyIDEyOjA4OjA0IDIwMTMgLTA3MDAKIAotCVBSIGxpYmZmaS80MjI0MwotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIGV4dHJhIHBhcmVudGhlc2VzLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNDMgZnJvbSBKZW5zVGltbWVybWFuL19fbTEyOAorICAgIAorICAgIGFkZGVkIGluY2x1ZGUgZm9yIHhtbWludHJpbi5oCiAKLTIwMDktMTItMDMgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+Citjb21taXQgYjhhOTFkODFiZTc3ZDQ3OTMyN2ZkYjZiZGQ5ZmRhZTZkMThlNmU2MworQXV0aG9yOiBKZW5zIFRpbW1lcm1hbiA8amVucy50aW1tZXJtYW5AdWdlbnQuYmU+CitEYXRlOiAgIFR1ZSBKdWwgMiAxMDo1NzozNyAyMDEzICswMjAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIChtYWluKTogRml4IGZvcm1hdCBzdHJpbmcuCi0JUmVtb3ZlIHhmYWlscyBmb3IgeDg2IGxpbnV4IHRhcmdldHMuCisgICAgYWRkZWQgaW5jbHVkZSBmb3IgeG1taW50cmluLmgKIAotMjAwOS0xMi0wMiAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IGIwODJlMTUwOTE5NjEzNzNjMDNkMTBlZDAyNTFmNjE5ZWJiNmVkNzYKK0F1dGhvcjogTWlzY2hhIEpvbmtlciA8bWpvbmtlckBzeW5vcHN5cy5jb20+CitEYXRlOiAgIE1vbiBKdW4gMTAgMTY6MTk6MzMgMjAxMyArMDIwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggdHlwbyBpbiBJTlQ2NAotCWNhc2UuCisgICAgQWRkIEFSQyBzdXBwb3J0CisgICAgCisgICAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBUkMgYXJjaGl0ZWN0dXJlIHRvIGxpYmZmaS4gRGVzaWduV2FyZSBBUkMKKyAgICBpcyBhIGZhbWlseSBvZiBwcm9jZXNzb3JzIGZyb20gU3lub3BzeXMsIEluYy4KKyAgICAKKyAgICBUaGlzIHBhdGNoIGhhcyBiZWVuIHRlc3RlZCBvbiBhIGxpdHRsZS1lbmRpYW4gc3lzdGVtIGFuZCBwYXNzZXMKKyAgICB0aGUgdGVzdHN1aXRlLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IE1pc2NoYSBKb25rZXIgPG1qb25rZXJAc3lub3BzeXMuY29tPgogCi0yMDA5LTEyLTAxICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgY2M5YjUxODY4N2U0NmIwZDFhY2FmZGQ0YmMzZjNiMjgxYzI1YTNkOQorQXV0aG9yOiBNYXJjaW4gV29qZHlyIDx3b2pkeXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgTWF5IDE0IDE1OjAxOjIzIDIwMTMgKzAyMDAKIAotCSogc3JjL3Bvd2VycGMvYWl4LlMgKGZmaV9jYWxsX0FJWCk6IENvbnZlcnQgdG8gbW9yZSBzdGFuZGFyZAotCXJlZ2lzdGVyIHVzYWdlLiAgQ2FsbCBmZmlfcHJlcF9hcmdzIGRpcmVjdGx5LiAgQWRkIGxvbmcgZG91YmxlCi0JcmV0dXJuIHZhbHVlIHN1cHBvcnQuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBEb3VibGUgYXJnIGluY3JlbWVudAotCWFwcGxpZXMgdG8gRkZJX1RZUEVfRE9VQkxFLiAgQ29ycmVjdCBmcHJfYmFzZSBpbmNyZW1lbnQgdHlwby4KLQlTZXBhcmF0ZSBGRklfVFlQRV9TSU5UMzIgYW5kIEZGSV9UWVBFX1VJTlQzMiBjYXNlcy4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBPbmx5IDE2IGJ5dGUgc3RhY2sgYWxpZ25tZW50IGluIDY0IGJpdAotCW1vZGUuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBSZW1vdmUgbmYgYW5kIG5nIGNvdW50ZXJzLiAgTW92ZSB0ZW1wCi0JaW50byBjYXNlLgotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTWFpbnRhaW4gMTYgYnl0ZSBzdGFjayBhbGlnbm1lbnQuCi0JQWxsb2NhdGUgcmVzdWx0IGFyZWEgYmV0d2VlbiBwYXJhbXMgYW5kIEZQUnMuCisgICAgVXBkYXRlIGxpYmZmaS5wYy5pbgorICAgIAorICAgIHVzZSAtTCR7dG9vbGV4ZWNsaWJkaXJ9IGluc3RlYWQgb2YgLUwke2xpYmRpcn0KKyAgICB0byBiZSBjb25zaXN0ZW50IHdpdGggTWFrZWZpbGUuYW0KIAotMjAwOS0xMS0zMCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IDU4NzAwMmMwOTJjZmZlNmU3YThkNzAyOGYyNDZjMjQxZDAzYjczOGMKK0F1dGhvcjogQW5kcmVhcyBCZXJnbWVpZXIgPGFuZHJlYXMuYmVyZ21laWVyQGdteC5uZXQ+CitEYXRlOiAgIEZyaSBBcHIgMTkgMTc6MTI6MjQgMjAxMyArMDIwMAogCi0JUFIgdGFyZ2V0LzM1NDg0Ci0JKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoUE9XRVJQQzY0KTogRGVmaW5lIGZvciBQUEM2NCBMaW51eCBhbmQKLQlBSVg2NC4KLQkqIHNyYy9wb3dlcnBjL2FpeC5TOiBJbXBsZW1lbnQgQUlYNjQgdmVyc2lvbi4KLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IEltcGxlbWVudCBBSVg2NCB2ZXJzaW9uLgotCShmZmlfY2xvc3VyZV9BU00pOiBVc2UgZXh0c2IsIGxoYSBhbmQgZGlzcGxhbWVudCBhZGRyZXNzZXMuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBJbXBsZW1lbnQgQUlYNjQKLQlzdXBwb3J0LgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNhbWUuCi0JKGZmaV9jYWxsKTogU2FtZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IFNhbWUuCisgICAgRW5hYmxlIGRpc2FibGluZyBvZiBsaWJ0b29sIG9uIHBsYXRmb3JtcyB3aGVyZSBpdCBkb2VzIG5vdCB3b3JrIChlLmcuIExMVk0pLgorICAgIEJ1aWxkIGxpYnJhcmllcyBub3JtYWxseSB0aGVuLgogCi0yMDA5LTExLTAyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IGMzYzQwZTAyOTAzNzdkN2NmOTQ4YjA3MmVlZGQ4MzE3YzRiZjIxNWUKK01lcmdlOiBlZGU5NmU0IDQ3NTBlM2MKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMzAgMDU6MjQ6MTQgMjAxMyAtMDcwMAogCi0JUFIgbGliZmZpLzQxOTA4Ci0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdGVzdGNsb3N1cmUuYzogTmV3IHRlc3QuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMzNCBmcm9tIGRhdmlkc2NoL2FybWhmCisgICAgCisgICAgRml4IEFSTSBoYXJkLWZsb2F0IHN1cHBvcnQgZm9yIGxhcmdlIG51bWJlcnMgb2YgVkZQIGFyZ3VtZW50cwogCi0yMDA5LTA5LTI4ICBLYWkgVGlldHogIDxrYWkudGlldHpAb25ldmlzaW9uLmNvbT4KK2NvbW1pdCA0NzUwZTNjNjYyZmQ5NTY5Y2IzZTJkMjhmNTM5Njg1ZmQxY2E4Y2FmCitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUaHUgTWFyIDI4IDE2OjU2OjM2IDIwMTMgKzAxMDAKIAotCSogc3JjL3g4Ni93aW42NC5TIChfZmZpX2NhbGxfd2luNjQgc3RhY2spOiBSZW1vdmUgZm9yIGdudQotCWFzc2VtYmx5IHZlcnNpb24gdXNlIG9mIF9fX2Noa3N0ay4KKyAgICB1cGRhdGUgY2hhbmdlbG9nCiAKLTIwMDktMDktMjMgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorY29tbWl0IDk3MDhlN2NmMDlmMWJmODE1ZjRkNjQ4NWViMWYxODBmYWJiMzU4MDQKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFdlZCBNYXIgMjcgMTk6MzE6MDQgMjAxMyArMDEwMAogCi0JUFIgbGliZmZpLzQwMjQyLCBQUiBsaWJmZmkvNDE0NDMKLQkqIHNyYy9hcm0vc3lzdi5TIChfX0FSTV9BUkNIX18pOiBEZWZpbmUgZm9yIHByb2Nlc3NvcnMKLQlfX0FSTV9BUkNIXzZUMl9fLCBfX0FSTV9BUkNIXzZNX18sIF9fQVJNX0FSQ0hfN19fLAotCV9fQVJNX0FSQ0hfN0FfXywgX19BUk1fQVJDSF83Ul9fLCBfX0FSTV9BUkNIXzdNX18uCi0JQ2hhbmdlIHRoZSBjb25kaXRpb25hbHMgdG8gX19TT0ZURlBfXyB8fCBfX0FSTV9FQUJJX18KLQlmb3IgLW1mbG9hdC1hYmk9c29mdGZwIHRvIHdvcmsuCisgICAgZm9sb3cgdGhlIEFSTSBoYXJkLWZsb2F0IEFCSSBpbiBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1ZGUAogCi0yMDA5LTA5LTE3ICBMb3JlbiBKLiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgorY29tbWl0IGI0MTEyMDk4MWU1ZTQ5Y2EyZGExMGI5NGIxNTQ3NzVmNTBkYTVmMzYKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFdlZCBNYXIgMjcgMTY6Mzg6MzUgMjAxMyArMDEwMAogCi0JUFIgdGVzdHN1aXRlLzMyODQzIChzdHJpa2VzIGFnYWluKQotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgWDg2X0ZSRUVCU0QgdG8KLQllbmFibGUgcHJvcGVyIGV4dGVuc2lvbiBvbiBjaGFyIGFuZCBzaG9ydC4KKyAgICBjcmVhdGUgc2VwYXJhdGVkIHZlcnNpb25zIG9mIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfKiBmb3IgU1lTViBhbmQgVkZQIEFCSXMuCisgICAgCisgICAgVGhlIGRpZmZlcmVudCB2ZXJzaW9ucyB3aWxsIGJlIGNhbGxlZCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGNpZi0+YWJpCiAKLTIwMDktMDktMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGNhdml1bW5ldHdvcmtzLmNvbT4KK2NvbW1pdCBkZDI2ZjFmMzljNTQ4NjFjNWI5MTkzMWYwZjM3YTcyOTQyYzJhMDcyCitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUaHUgTWFyIDI4IDE1OjM5OjAxIDIwMTMgKzAxMDAKIAotCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfdG9fcnZhbHVlKTogUmVtb3ZlIHNwZWNpYWwKLQloYW5kbGluZyBmb3IgRkZJX1RZUEVfUE9JTlRFUi4KLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfVFlQRV9TVFJVQ1RfRF9TT0ZULAotCUZGSV9UWVBFX1NUUlVDVF9GX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9ERF9TT0ZULAotCUZGSV9UWVBFX1NUUlVDVF9GRl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfRkRfU09GVCwKLQlGRklfVFlQRV9TVFJVQ1RfREZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX1NPRlQpOiBOZXcgZGVmaW5lcy4KLQkoRkZJX04zMl9TT0ZUX0ZMT0FULCBGRklfTjY0X1NPRlRfRkxPQVQpOiBOZXcgZmZpX2FiaSBlbnVtZXJhdGlvbnMuCi0JKGVudW0gZmZpX2FiaSk6IFNldCBGRklfREVGQVVMVF9BQkkgZm9yIHNvZnQtZmxvYXQuCi0JKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogQWRkIGhhbmRsaW5nIGZvciBzb2Z0LWZsb2F0Ci0Jc3RydWN0dXJlIGFuZCBwb2ludGVyIHJldHVybnMuCi0JKGZmaV9jbG9zdXJlX04zMik6IEFkZCBoYW5kbGluZyBmb3IgcG9pbnRlciByZXR1cm5zLgotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGNhbGNfbjMyX3N0cnVjdF9mbGFncywKLQljYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKTogSGFuZGxlIHNvZnQtZmxvYXQuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogIEhhbmRsZSBzb2Z0LWZsb2F0LCBmaXggcG9pbnRlciBoYW5kbGluZy4KLQkoZmZpX2NhbGxfTjMyKTogRGVjbGFyZSBwcm9wZXIgYXJndW1lbnQgdHlwZXMuCi0JKGZmaV9jYWxsLCBjb3B5X3N0cnVjdF9OMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogSGFuZGxlCi0Jc29mdC1mbG9hdC4KKyAgICBhZGQgYSBmYWlsaW5nIHRlc3QgZm9yIGNsb3N1cmVzIG9uIEFSTSBoYXJkZmxvYXQKIAotMjAwOS0wOC0yNCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KK2NvbW1pdCAzYzE2MDg2MTNhYjNjMjE4NDIyMmI5OGM1NDgyY2RkZWRkNmI1NTliCitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUdWUgTWFyIDI2IDE5OjI0OjQ3IDIwMTMgKzAxMDAKIAotCSogY29uZmlndXJlLmFjIChBQ19QUkVSRVEpOiBCdW1wIHRvIDIuNjQuCisgICAgZXh0ZW5kIGZmaV9wcmVwYXJlX2FyZ3MgZm9yIEZGSV9WRlAgKGhhcmQtZmxvYXQgQUJJKSwgZml4aW5nIGFuIGlzc3VlIHdpdGggcGFzc2luZyBWRlAgYXJndW1lbnRzIGluIFZGUCByZWdpc3RlcnMgYW5kIHRoZSBzdGFjaywgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBub3QgdXNpbmcgYWxsIGNvcmUgcmVnaXN0ZXJzLgogCi0yMDA5LTA4LTIyICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorY29tbWl0IDBmMmZmMmQ0YzkyNzE5YmU4OTM2MTc5ZjlhYjY3NGY0ZDFhM2ZkMTQKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFR1ZSBNYXIgMjYgMTk6MjI6MDIgMjAxMyArMDEwMAogCi0JKiBNYWtlZmlsZS5hbSAoaW5zdGFsbC1odG1sLCBpbnN0YWxsLXBkZik6IFJlbW92ZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIHNlcGFyYXRlIEFSTSBmZmlfcHJlcGFyZV9hcmdzIGluIGEgdmVyc2lvbiBpbXBsZW1lbnRpbmcgdGhlIHNpbXBsZSBTWVNWIGNhbGxpbmcgY29udmVudGlvbiBhbmQgb25lIGZvciB0aGUgaGFyZC1mbG9hdCBjYWxsaW5nIGNvbnZlbnRpb24KIAotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogbWFuL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorY29tbWl0IDNhMzUyYjhhODI1MjQwMGE4M2RlMjJjN2M0MjRiZjE4ODdiNGEyZWYKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFR1ZSBNYXIgMjYgMTQ6MjQ6MDQgMjAxMyArMDEwMAogCi0yMDExLTA4LTIyICBKYXNwZXIgTGlldmlzc2UgQWRyaWFhbnNlIDxqYXNwZXJAb3BlbmJzZC5vcmc+CisgICAgbW92ZSB0aGUgaGFyZGZsb2F0IHNwZWNpZmljIGFyZ3VtZW50IGNvcHlpbmcgY29kZSB0byB0aGUgaGVscGVyIGZ1bmN0aW9uCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIE9wZW5CU0QvaHBwYSBhbmQgT3BlbkJTRC9wb3dlcnBjIHN1cHBvcnQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgNWRmNmI3OTQ0YTQyMjViNmViMzI5ZjM4ODZiZTY0ZTA0ZTk2NmYyOQorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVHVlIE1hciAyNiAxNDowMjoyMSAyMDEzICswMTAwCiAKLTIwMDktMDctMzAgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisgICAgZXh0cmFjdCBzZXR0aW5nIG9mIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gYSBoZWxwZXIgZnVuY3Rpb24KIAotCSogY29uZmlndXJlLmFjIChfQUNfQVJHX1ZBUl9QUkVDSU9VUyk6IFVzZSBtNF9yZW5hbWVfZm9yY2UuCitjb21taXQgN2QxMDQ4YzQ3MWJiNGIxZjlkNjdhOWU5ZjhlOTVmOWExZDJlNmQ0NQorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVHVlIE1hciAyNiAxMTozMzozMyAyMDEzICswMTAwCiAKLTIwMDktMDctMjQgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorICAgIGV4dHJhY3QgY29kZSB0byBhbGlnbiB0aGUgYXJndW1lbnQgc3RvcmFnZSBwb2ludGVyIHRvIGEgaGVscGVyIGZ1bmN0aW9uCiAKLQlQUiBsaWJmZmkvNDA4MDcKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWxzbyB1c2Ugc2lnbi96ZXJvLWV4dGVuZGluZwotCXJldHVybiB0eXBlcyBmb3IgWDg2X1dJTjMyLgotCSogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2NhbGxfU1lTVik6IEhhbmRsZSBvbWl0dGVkIHJldHVybiB0eXBlcy4KLQkoX2ZmaV9jYWxsX1NURENBTEwsIF9mZmlfY2xvc3VyZV9TWVNWLCBfZmZpX2Nsb3N1cmVfcmF3X1NZU1YsCi0JX2ZmaV9jbG9zdXJlX1NURENBTEwpOiBMaWtld2lzZS4KK2NvbW1pdCBiOWYwMTM3ODhmMGYzODRjNDIzYWQ5NjM0NzVhYWFjYjU1NTk4MTM1CitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBNb24gTWFyIDI1IDEzOjI3OjM2IDIwMTMgKzAxMDAKIAotCSogc3JjL2Nsb3N1cmVzLmMgKGlzX3NlbGludXhfZW5hYmxlZCk6IERlZmluZSB0byBjb25zdCAwIGZvciBDeWd3aW4uCi0JKGRsbW1hcCwgZGxtdW5tYXApOiBBbHNvIHVzZSB0aGVzZSBmdW5jdGlvbnMgb24gQ3lnd2luLgorICAgIGFkZCBhIHRlc3RjYXNlLCB0aGF0IG9uIEFSTSBoYXJkZmxvYXQgbmVlZHMgbW9yZSB0aGFuIHRoZSA4ICBWRlAgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIHBhc3MgYXJndW1lbnRzIHRvIGEgY2FsbAogCi0yMDA5LTA3LTExICBSaWNoYXJkIFNhbmRpZm9yZCAgPHJkc2FuZGlmb3JkQGdvb2dsZW1haWwuY29tPgorY29tbWl0IDJmYmRiMGYyMzFjYWZkYjc3YjAyNWQzY2Q4YWZlOTBjZGE5OWIzYmEKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIE1vbiBNYXIgMjUgMTM6MjY6MDIgMjAxMyArMDEwMAogCi0JUFIgdGVzdHN1aXRlLzQwNjk5Ci0JUFIgdGVzdHN1aXRlLzQwNzA3Ci0JUFIgdGVzdHN1aXRlLzQwNzA5Ci0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFJldmVydCAyMDA5LTA3LTAyLCAyMDA5LTA3LTAxIGFuZAotCTIwMDktMDYtMzAgY29tbWl0cy4KKyAgICB1c2UgdGhlIGFic29sdXRlIHZhbHVlIHRvIGNoZWNrIHRoZSB0ZXN0IHJlc3VsdCBhZ2FpbnN0IGFuIGVwc2lsb24KIAotMjAwOS0wNy0wMSAgUmljaGFyZCBTYW5kaWZvcmQgIDxyLnNhbmRpZm9yZEB1ay5pYm0uY29tPgorY29tbWl0IGVkZTk2ZTRlYjY2MGJiZjNlMGZlMDQ4MTM1ZWZhODEwNmY0OGFmNWQKK01lcmdlOiBmMjJhYjNjIDllMzQ5OTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTcgMTg6Mzg6MjEgMjAxMyAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogU2V0IGxkX2xpYnJhcnlfcGF0aAotCXRvICIiIGJlZm9yZSBhZGRpbmcgcGF0aHMuICAoVGhpcyByZWluc3RhdGVzIGFuIGFzc2lnbm1lbnQgdGhhdAotCXdhcyByZW1vdmVkIGJ5IG15IDIwMDktMDYtMzAgY29tbWl0LCBidXQgY2hhbmdlcyB0aGUgaW5pdGlhbAotCXZhbHVlIGZyb20gIi4iIHRvICIiLikKKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotMjAwOS0wNy0wMSAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorY29tbWl0IGYyMmFiM2M2ODc3Y2JkZDA3ZjA1OGI2ODgxNmIwMDg2YjFjYjBlMWUKK01lcmdlOiAxMmIxODg2IGQwODEyNGIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTcgMTg6MzQ6NTQgMjAxMyAtMDQwMAogCi0JUFIgdGVzdHN1aXRlLzQwNjAxCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogUHJvcGVybHkgc2V0Ci0JZ2NjZGlyLiAgQWRqdXN0IGxkX2xpYnJhcnlfcGF0aCBmb3IgZ2NjIG9ubHkgaWYgZ2NjZGlyIGlzbid0Ci0JZW1wdHkuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLTIwMDktMDYtMzAgIFJpY2hhcmQgU2FuZGlmb3JkICA8ci5zYW5kaWZvcmRAdWsuaWJtLmNvbT4KK2NvbW1pdCA5ZTM0OTkyYTVlYTJmZGExZGJhNTg3NWJmOTZkYzkxYTcyMzBmNTFmCitNZXJnZTogMTJiMTg4NiBkMDgxMjRiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE3IDE4OjM0OjU0IDIwMTMgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IERvbid0IGFkZCAiLiIKLQl0byBsZF9saWJyYXJ5X3BhdGguICBVc2UgYWRkX3BhdGguICBBZGQganVzdCBmaW5kX2xpYmdjY19zCi0JdG8gbGRfbGlicmFyeV9wYXRoLCBub3QgZXZlcnkgbGliZ2NjIG11bHRpbGliIGRpcmVjdG9yeS4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotMjAwOS0wNi0xNiAgV2ltIExld2lzICA8d2ltbEBoaGhoLm9yZz4KK2NvbW1pdCAxMmIxODg2ZDdiMWY4YWEyNjRiMWQzNDhiZmE0N2EwZTE0NzEyZGY0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE3IDE4OjMyOjEyIDIwMTMgLTA0MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpLmM6IEF2b2lkIGNsb2JiZXJpbmcgY3IzIGFuZCBjcjQsIHdoaWNoIGFyZQotCXN1cHBvc2VkIHRvIGJlIGNhbGxlZS1zYXZlZC4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoc21hbGxfc3RydWN0X3JldHVybl92YWx1ZSk6IEZpeCBvdmVycnVuIG9mCi0JcmV0dXJuIGJ1ZmZlciBmb3Igb2RkLXNpemUgc3RydWN0cy4KKyAgICBjeWd3aW4gZml4ICYgdXBkYXRlcyBmb3IgMy4wLjEzCiAKLTIwMDktMDYtMTYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgZDA4MTI0YmVkZjJjNmQ2MTg3NGZlMjE1NDA0NzgzYWViOWY2ZjFhYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNyAxODozMjoxMiAyMDEzIC0wNDAwCiAKLQlQUiBsaWJmZmkvNDA0NDQKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogQWRkCi0JYWxsb3dfc3RhY2tfZXhlY3V0ZSBmb3IgRGFyd2luLgorICAgIGN5Z3dpbiBmaXggJiB1cGRhdGVzIGZvciAzLjAuMTMKIAotMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgY2IzMmM4MTJkMDRkMWRmYTcyMDAyY2MwNDkyNGU3ZTRmZWY4OWUwMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNyAwOToyNzo1NSAyMDEzIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoVEFSR0VURElSKTogQWRkIG1pc3NpbmcgYmxhbmsgbGluZXMuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRml4IGxpYiBpbnN0YWxsIGRpcgogCi0yMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBlZmQ3ODY2YTM2MWE2ZjYzNmJhZTg0MDBkMjZjNjgxMWU1NmNhMjA3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA4OjM1OjU3IDIwMTMgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBGaXggcHJpbnRmIGZvcm1hdAotCXNwZWNpZmllcnMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oLAotCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKFBSSWRMTCwgUFJJdUxMKTogRGVmaW5lLgorICAgIDIuMC4xM3JjMQogCi0yMDA5LTA2LTE1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBmZjY0N2FkNGRmZjJmMDdkZDE1M2YyOTVhMWY3MGIxZDkwNmNkNmNhCitNZXJnZTogNGFjZjAwNSBkOWRkNDE3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA4OjIwOjQwIDIwMTMgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiB4ZmFpbCBldmVyeXdoZXJlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IExpa2V3aXNlLgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJQ2hhbmdlTG9nCiAKLTIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDRhY2YwMDU2ZjU1Yzc1NzQ5MGRhZTZjMjlhNjViMDMyMTMyN2VhOGEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDg6MTg6NDUgMjAxMyAtMDQwMAogCi0JKiBNYWtlZmlsZS5hbTogUmVtb3ZlIGluZm9fVEVYSU5GT1MuCisgICAgQnVpbGQgZml4IGZvciBzb2Z0LWZsb2F0IHBvd2VyIHRhcmdldHMKIAotMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgNjc1Yzk4MzkyMjRlNDI2ODE4N2YxZWM2ZjUxMjEyN2Y5ZGI1NTVkMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwODoxMjozOCAyMDEzIC0wNDAwCiAKLQkqIENoYW5nZUxvZy5saWJmZmk6IHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKLQlzcGVjaWZpZXJzLgotCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBpbmNsdWRlIHN0ZGludC5oLgorICAgIERvY3VtZW50YXRpb24gZml4CiAKLTIwMDktMDYtMTEgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KK2NvbW1pdCA4YTI4NmY1NzBjY2Q0MWRiODFmNzRlYTdmMjQ4ZGE2MjI0MWQ4OThhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA4OjAxOjE5IDIwMTMgLTA0MDAKIAotCSogTWFrZWZpbGUuYW0sCi0JY29uZmlndXJlLmFjLAotCWluY2x1ZGUvZmZpLmguaW4sCi0JaW5jbHVkZS9mZmlfY29tbW9uLmgsCi0Jc3JjL2Nsb3N1cmVzLmMsCi0Jc3JjL2RsbWFsbG9jLmMsCi0Jc3JjL3g4Ni9mZmkuYywKLQlzcmMveDg2L2ZmaXRhcmdldC5oLAotCXNyYy94ODYvd2luNjQuUyAobmV3KSwKLQlSRUFETUU6IEFkZGVkIHdpbjY0IHN1cHBvcnQgKG1pbmd3IG9yIE1TVkMpCi0JKiBNYWtlZmlsZS5pbiwKLQlpbmNsdWRlL01ha2VmaWxlLmluLAotCW1hbi9NYWtlZmlsZS5pbiwKLQl0ZXN0c3VpdGUvTWFrZWZpbGUuaW4sCi0JY29uZmlndXJlLAotCWFjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkCi0JKiBsdGNmLWMuc2g6IHByb3Blcmx5IGVzY2FwZSBjeWd3aW4vdzMyIHBhdGgKLQkqIG1hbi9mZmlfY2FsbC4zOiBDbGFyaWZ5IHNpemUgcmVxdWlyZW1lbnRzIGZvciByZXR1cm4gdmFsdWUuCi0JKiBzcmMveDg2L2ZmaTY0LmM6IEZpeCBmaWxlbmFtZSBpbiBjb21tZW50LgotCSogc3JjL3g4Ni93aW4zMi5TOiBSZW1vdmUgdW51c2VkIGV4dGVybi4KKyAgICBGaXggZm9yIG02ODAwMCBzeXN0ZW1zCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IHVzZSBmZmlfY2xvc3VyZV9hbGxvYyBpbnN0ZWFkCi0Jb2YgY2hlY2tpbmcgZm9yIE1NQVAuICBVc2UgaW50cHRyX3QgaW5zdGVhZCBvZiBsb25nIGNhc3RzLgorY29tbWl0IGQ5ZGQ0MTdiMDk1NjZhZjU1YjdiMzAwMGJiNTNjY2FmMmUxZDZjOTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDg6MDE6MTkgMjAxMyAtMDQwMAogCi0yMDA5LTA2LTExICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICBGaXggZm9yIG02ODAwMCBzeXN0ZW1zCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWwgc2gqLSotbGludXgtKi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBBZGQgeGZhaWwgc2gqLSotKi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogTGlrZXdpc2UuCitjb21taXQgMjE1NzYzZDAxMmE5NDRkOTU0MDZiMzk0ZDYwMTNiODBkMjIwZTg3MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwNzo1NzozNSAyMDEzIC0wNDAwCiAKLTIwMDktMDYtMDkgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIFVwZGF0ZSBjb25maWd1cnkuCiAKLQkqIHNyYy94ODYvZnJlZWJzZC5TOiBBZGQgbWlzc2luZyBmaWxlLgorY29tbWl0IDkxODBkOGYzOWM5YjZhZmUxN2I3ODI3N2MyNzExYTVkOTk0OGU4MjQKK01lcmdlOiAyZmI1MjdhIDdlMWIzMjYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDc6NDY6NTUgMjAxMyAtMDQwMAogCi0yMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotCUltcG9ydCBmcm9tIGxpYmZmaSAzLjAuODoKK2NvbW1pdCAyZmI1MjdhMDE3YTQ5NDNlMTc2YTQ4OWZmMTAzMjMxYjg2NDY0YjU5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA3OjQ2OjM4IDIwMTMgLTA0MDAKIAotCSogZG9jL2xpYmZmaS50ZXhpOiBOZXcgZmlsZS4KLQkqIGRvYy9saWJmZmkuaW5mbzogTGlrZXdpc2UuCi0JKiBkb2Mvc3RhbXAtdnRpOiBMaWtld2lzZS4KLQkqIG1hbi9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCi0JKiBtYW4vZmZpX2NhbGwuMzogTmV3IGZpbGUuCisgICAgQWRkIE1ldGEgcHJvY2Vzc29yIHN1cHBvcnQKIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgc3JjL3g4Ni9kYXJ3aW42NC5TLAotCXNyYy9kbG1hbGxvYy5jLgotCShub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgWDg2X0ZSRUVCU0QuCitjb21taXQgMjExYTllYmY0ZDFhOTgwMWUxNWUxMDM1NjZhZWQyYjhjNDI3OTBiZQorTWVyZ2U6IGYzMDhmYWYgZWUxODc2NgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwNDoyNDo0MCAyMDEzIC0wNzAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC44LgotCXBhcmlzYyotKi1saW51eCo6IEFkZC4KLQlpMzg2LSotZnJlZWJzZCogfCBpMzg2LSotb3BlbmJzZCo6IEFkZC4KLQlwb3dlcnBjLSotYmVvcyo6IEFkZC4KLQlBTV9DT05ESVRJT05BTCBYODZfRlJFRUJTRDogQWRkLgotCUFDX0NPTkZJR19GSUxFUzogQWRkIG1hbi9NYWtlZmlsZS4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzMyIGZyb20gYWxleC9wYXRjaC0xCisgICAgCisgICAgRml4IGZvciBhIGNyYXNoZXIgZHVlIHRvIG1pc2FsaWduZWQgc3RhY2sgb24geDg2LTMyLgogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfRk4pOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KK2NvbW1pdCA3ZTFiMzI2NDllZmQyNDgxNGU4NjE3MmUxOTZmMzkwNTY2ZjllOTcwCitNZXJnZTogZjMwOGZhZiBlZTE4NzY2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA0OjI0OjQwIDIwMTMgLTA3MDAKIAotMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMzMiBmcm9tIGFsZXgvcGF0Y2gtMQorICAgIAorICAgIEZpeCBmb3IgYSBjcmFzaGVyIGR1ZSB0byBtaXNhbGlnbmVkIHN0YWNrIG9uIHg4Ni0zMi4KIAotCSogUkVBRE1FOiBJbXBvcnQgZnJvbSBsaWJmZmkgMy4wLjguCitjb21taXQgZWUxODc2NmIxNjk4MTE0MjZjMTRiMDExZmJiNDZkODFlMzQ0ZjkyNgorQXV0aG9yOiBBbGV4IEdheW5vciA8YWxleC5nYXlub3JAZ21haWwuY29tPgorRGF0ZTogICBUaHUgTWFyIDE0IDE1OjAwOjMzIDIwMTMgLTA3MDAKIAotMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgRml4IGZvciBhIGNyYXNoZXIgZHVlIHRvIG1pc2FsaWduZWQgc3RhY2sgb24geDg2LTMyLgorICAgIAorICAgIEZ1bGwgaW5mb3JtYXRpb24gb24gcmVwcm9kdWN0aW9uICh1c2luZyBQeXRob24ncyBjdHlwZXMgYXZhaWxhYmxlIGhlcmU6wqBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTc0MjMpCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBBZGQgeGZhaWxzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IEFkZCB4ZmFpbHMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmM6IEFkZCB4ZmFpbCB4ODZfNjQtKi1saW51eC0qLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBBZGQgeGZhaWxzLgorY29tbWl0IGYzMDhmYWYxZWFiYWY4ZGMyNDk2NmFiMTdmYmY5NDM2OGY0NmI5YzcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBGZWIgMTEgMTQ6MjU6MTMgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBBZGQgX19VTlVTRURfXyB0byBhcmdzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogIExpa2V3aXNlLgorICAgIEFkZCBtb3hpZSBzdXBwb3J0LiAgUmVsZWFzZSAzLjAuMTIuCiAKLTIwMDgtMTItMjYgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KK2NvbW1pdCA0ZWEyMmU1NGUzYjE0M2ZlMDVjNDEzZjZkZGRkMjM2YWY2YmNiZmIyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gRmViIDEwIDA4OjQ4OjM4IDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBtYXJrIGV4cGVjdGVkCi0JZmFpbHVyZXMgb24geDg2XzY0IGN5Z3dpbi9taW5ndy4KKyAgICBVcGRhdGUgUkVBRE1FCiAKLTIwMDgtMTItMjIgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KK2NvbW1pdCAxMGU3NzIyN2I2YWU4NWY0NmYyODU5MGJmYjA5Y2EzNjA4NTU0MzU4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gRmViIDEwIDA4OjQ3OjI2IDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYzogdXNlIHBvcnRhYmxlIGNhc3QgZnJvbQotCXBvaW50ZXIgdG8gaW50ZWdlciAoaW50cHRyX3QpLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmM6IGRpc2FibGUgZm9yIHdpbjY0LgorICAgIG1lbmQKIAotMjAwOC0wNy0yNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Citjb21taXQgYTk1MjE0MTFhNTNkNThmMmJmODgxOTkyNDIyMDBjZWIwZDRkYWUzYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEZlYiA5IDA2OjU0OjQwIDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IENsZWFuIHVwIGZhaWx1cmVzIGZyb20KLQljb21waWxlciB3YXJuaW5ncy4KKyAgICBzcGFyYyB2OCBhbmQgdGVzdHN1aXRlIGZpeGVzCiAKLTIwMDgtMDMtMDQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgotCSAgICBCbGFrZSBDaGFmZmluCi0JICAgIGhvc0B0YW1hbmVnaS5vcmcKK2NvbW1pdCA3MGIxMWI0N2VlYTkzYmY0MzYyNzU4OGQ0OTRkMGIzYjBkMDYyNDgxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDggMTY6MTI6MTkgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IE5ldyB0ZXN0cyBmcm9tIEFwcGxlLgorICAgIEZpeCBzbWFsbCBzdHJ1Y3QgcGFzc2luZyBvbiBwcGMKIAotMjAwOS0wNi0wNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgNjNiYTFmYTc5ZjdjNGNlNDJkZTg0OGRlYmUyMzNhYWIzMWFlY2I1MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiA4IDE1OjE4OjE5IDIwMTMgLTA1MDAKIAotCSogc3JjL3g4Ni9mZml0YXJnZXQuaCwgc3JjL3g4Ni9mZmkuYzogTWVyZ2Ugc3RkY2FsbCBjaGFuZ2VzIGZyb20KLQlsaWJmZmkuCisgICAgUmVtb3ZlIHhmYWlsIGZvciBhcm0qLSotKi4KIAotMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgMjRmYmNhNGMxZDU3ZDRlYTYyOGMwYThiYTY0MzY4NGRhZjU0YTM3ZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiA4IDE0OjE5OjU2IDIwMTMgLTA1MDAKIAotCSogc3JjL3g4Ni9mZml0YXJnZXQuaCwgc3JjL3g4Ni93aW4zMi5TLCBzcmMveDg2L2ZmaS5jOiBCYWNrIG91dAotCXN0ZGNhbGwgY2hhbmdlcy4KKyAgICBGaXggdHlwbwogCi0yMDA4LTAyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KLQkgICAgVGhvbWFzIEhlbGxlciAgPHRoZWxsZXJAY3R5cGVzLm9yZz4KK2NvbW1pdCBiMGZhMTFjYjBhOTRjZTZiYWNhMDU4ZWFiOWIxMGU0MDQ3NWU3MWQ2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDggMTQ6MTc6MTMgMjAxMyAtMDUwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogQ2hhbmdlIEMrKyBjb21tZW50IHRvIEMKLQljb21tZW50LgorICAgIE1vcmUgbWFuIHBhZ2UgY2xlYW51cAogCi0yMDA4LTAyLTAzICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+Citjb21taXQgOGJkMTVkMTM5YTU4YTZlNDZkYzkwYTFjYjJkODlmNTlmMzJmMDZjNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiA4IDEzOjU2OjM3IDIwMTMgLTA1MDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKTogQ2FsY3VsYXRlIGp1bXAgcmV0dXJuCi0JICBvZmZzZXQgYmFzZWQgb24gY29kZSBwb2ludGVyLCBub3QgZGF0YSBwb2ludGVyLgorICAgIEZpeCBtYW55LmMgdGVzdGNhc2UgZm9yIHBwYwogCi0yMDA4LTAxLTMxICBUaW1vdGh5IFdhbGwgPHR3YWxsQHVzZXJzLnNmLm5ldD4KK2NvbW1pdCA3YWFiODI1Y2YxOThiZTg1NDkwZDNjZDgwZTc3OGQ0MTVkODVhZDliCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDggMTM6MjY6MjEgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmM6IEFkZCB0ZXN0IGZvciBzdGRjYWxsCi0JY2xvc3VyZXMuCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBJbmNyZWFzZSBzaXplIG9mIHRyYW1wb2xpbmUgZm9yIHN0ZGNhbGwKLQljbG9zdXJlcy4KLQkqIHNyYy94ODYvd2luMzIuUzogQWRkIGFzc2VtYmx5IGZvciBzdGRjYWxsIGNsb3N1cmUuCi0JKiBzcmMveDg2L2ZmaS5jOiBJbml0aWFsaXplIHN0ZGNhbGwgY2xvc3VyZSB0cmFtcG9saW5lLgorICAgIEFkZCBtaXNzaW5nIGZpbGVzIHRvIGRpc3QKIAotMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgY2IwM2VhOGY0ZWIwODAyNGU0NGFiZTQzOTJlZGM3N2I4OWZiZmJhZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiA4IDEyOjI1OjE4IDIwMTMgLTA1MDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCi0JKiBzcmMveDg2L2ZmaS5jOiBMaWtld2lzZS4KKyAgICBzcGFyYyB2OSBmaXhlcyBmb3Igc3VuIHRvb2xzCiAKLTIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDM1ZWU4ZDQ0ZjMxZGQzZDNiODgwODNjODM3ZGMzNTE1OTNlMTNjYzIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgOCAwNzoxMjo0MSAyMDEzIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEluc2VydCBsaWNlbmNlIGhlYWRlci4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KLQkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisgICAgRml4IG1pY3JvYmxhemUgYmlnLWVuZGlhbiBzdHJ1Y3QgaXNzdWUKIAotCSogc3JjL3NoNjQvZmZpLmM6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgotCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KLQkqIHNyYy9tMzJyL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvZmZpNjQuYzogTGlrZXdpc2UuCi0JKiBzcmMvYWxwaGEvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL2FscGhhL29zZi5TOiBMaWtld2lzZS4KLQkqIHNyYy9mcnYvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3MzOTAvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wYS9ocHV4MzIuUzogTGlrZXdpc2UuCi0JKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgotCSogc3JjL2lhNjQvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3NwYXJjL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9taXBzL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCitjb21taXQgOWRiN2UxYTk1OGZjNDg0YmExNDllZmUwMjcwMDhiOWExNzAzOTVmYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiA3IDIxOjA2OjA4IDIwMTMgLTA1MDAKIAotMjAwOC0wMi0xNSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKyAgICBGaXggYm90Y2hlZCBzcGFyYyBwYXRjaC4gVXBkYXRlIHZlcnNpb24uCiAKLQkqIHNyYy9taXBzL2ZmaS5jIChVU0VfX0JVSUxUSU5fX19DTEVBUl9DQUNIRSk6Ci0JRGVmaW5lIChjb25kaXRpb25hbGx5KSwgYW5kIHVzZSBpdCB0byBpbmNsdWRlIGNhY2hlY3RsLmguCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nLgotCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKF9BQklOMzIsIF9BQkk2NCwgX0FCSU8zMik6IERlZmluZS4KK2NvbW1pdCBjZTAxMzhlNjE0NTVmMjY4YWYzMjZlMjY5MDhiOTY4MGVjMmM0YmVhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDcgMTg6MDQ6MDEgMjAxMyAtMDUwMAogCi0yMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICBVcGRhdGUgYnVnIHJlcG9ydCBhZGRyZXNzLiByYzIuCiAKLQlpbmNsdWRlL2ZmaS5oLmluLAotCXNyYy9hcm0vZmZpdGFyZ2V0LmgsCi0Jc3JjL2FybS9mZmkuYywKLQlzcmMvYXJtL3N5c3YuUywKLQlzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKLQlzcmMvY2xvc3VyZXMuYywKLQlzcmMvc2g2NC9mZml0YXJnZXQuaCwKLQlzcmMvc2g2NC9mZmkuYywKLQlzcmMvc2g2NC9zeXN2LlMsCi0Jc3JjL3R5cGVzLmMsCi0Jc3JjL3g4Ni9mZmk2NC5jLAotCXNyYy94ODYvZmZpdGFyZ2V0LmgsCi0Jc3JjL3g4Ni93aW4zMi5TLAotCXNyYy94ODYvZGFyd2luLlMsCi0Jc3JjL3g4Ni9mZmkuYywKLQlzcmMveDg2L3N5c3YuUywKLQlzcmMveDg2L3VuaXg2NC5TLAotCXNyYy9hbHBoYS9mZml0YXJnZXQuaCwKLQlzcmMvYWxwaGEvZmZpLmMsCi0Jc3JjL2FscGhhL29zZi5TLAotCXNyYy9tNjhrL2ZmaXRhcmdldC5oLAotCXNyYy9mcnYvZmZpdGFyZ2V0LmgsCi0Jc3JjL2Zydi9mZmkuYywKLQlzcmMvczM5MC9mZml0YXJnZXQuaCwKLQlzcmMvczM5MC9zeXN2LlMsCi0Jc3JjL2NyaXMvZmZpdGFyZ2V0LmgsCi0Jc3JjL3BhL2xpbnV4LlMsCi0Jc3JjL3BhL2ZmaXRhcmdldC5oLAotCXNyYy9wYS9mZmkuYywKLQlzcmMvcmF3X2FwaS5jLAotCXNyYy9pYTY0L2ZmaXRhcmdldC5oLAotCXNyYy9pYTY0L3VuaXguUywKLQlzcmMvaWE2NC9mZmkuYywKLQlzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsCi0Jc3JjL2phdmFfcmF3X2FwaS5jLAotCXNyYy9kZWJ1Zy5jLAotCXNyYy9zcGFyYy92OS5TLAotCXNyYy9zcGFyYy9mZml0YXJnZXQuaCwKLQlzcmMvc3BhcmMvZmZpLmMsCi0Jc3JjL3NwYXJjL3Y4LlMsCi0Jc3JjL21pcHMvZmZpdGFyZ2V0LmgsCi0Jc3JjL21pcHMvbjMyLlMsCi0Jc3JjL21pcHMvbzMyLlMsCi0Jc3JjL21pcHMvZmZpLmMsCi0Jc3JjL3ByZXBfY2lmLmMsCi0Jc3JjL3NoL2ZmaXRhcmdldC5oLAotCXNyYy9zaC9mZmkuYywKLQlzcmMvc2gvc3lzdi5TOiBVcGRhdGUgbGljZW5zZSB0ZXh0LgorY29tbWl0IGZkMDdjOWU0MDQ1MWUwZWMxZDA0NzVjZDU0YTgzZDQ1Y2NhZWEyYzAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgNyAxODowMDozNiAyMDEzIC0wNTAwCiAKLTIwMDktMDUtMjIgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorICAgIEFkZCBjYWNoZSBmbHVzaGluZyByb3V0aW5lIGZvciBzdW4gY29tcGlsZXIgb24gc3BhcmMgc29sYXJpcyAyLjgKIAotCSogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6ICBOZXcgZnVuY3Rpb24uCi0JKC5laF9mcmFtZSk6ICBBZGQgRkRFIGZvciBpdC4KK2NvbW1pdCBlZDZhZTk1MDFiMmJhYjQ1ZGFmOTNiNDkzNWViMGM5Nzc2MzViNzYzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDcgMTY6NDM6MzYgMjAxMyAtMDUwMAogCi0yMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKyAgICBBZGQgbGlidG9vbC1sZGZsYWdzLiBEZWZpbmUgdG9vbGV4ZWNsaWJkaXIgZm9yIG5vbi1HQ0MgYnVpbGRzLgogCi0JKiBjb25maWd1cmUuYWM6ICBBbHNvIGNoZWNrIGlmIGFzc2VtYmxlciBzdXBwb3J0cyBwYy1yZWxhdGl2ZQotCXJlbG9jcyBvbiBYODZfV0lOMzIgdGFyZ2V0cy4KLQkqIGNvbmZpZ3VyZTogIFJlZ2VuZXJhdGUuCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9wcmVwX2FyZ3MpOiAgRGVjbGFyZSBleHRlcm4sIG5vdCBnbG9iYWwuCi0JKF9mZmlfY2FsbF9TWVNWKTogIEFkZCBtaXNzaW5nIGZ1bmN0aW9uIHR5cGUgc3ltYm9sIC5kZWYgYW5kCi0JYWRkIEVIIG1hcmt1cCBsYWJlbHMuCi0JKF9mZmlfY2FsbF9TVERDQUxMKTogIExpa2V3aXNlLgotCShfZmZpX2Nsb3N1cmVfU1lTVik6ICBMaWtld2lzZS4KLQkoX2ZmaV9jbG9zdXJlX3Jhd19TWVNWKTogIExpa2V3aXNlLgotCSguZWhfZnJhbWUpOiAgQWRkIGhhbmQtY3JhZnRlZCBFSCBkYXRhLgorY29tbWl0IGZmZWYyZTA0NmFhZWM4NTNiZTM1NmYwYjg3NzBhMzM1MTg1ZWE5Y2YKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgNyAxNTo0NzowMSAyMDEzIC0wNTAwCiAKLTIwMDktMDQtMDkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIHgzMiBhbmQgbGlidG9vbCBmaXhlcwogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IENoYW5nZSBjb3B5cmlnaHQgaGVhZGVyIHRvIHJlZmVyIHRvCi0JdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdG8gcG9pbnQgcmVhZGVycwotCWF0IHRoZSBDT1BZSU5HMyBmaWxlIGFuZCB0aGUgRlNGJ3MgbGljZW5zZSB3ZWIgcGFnZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IExpa2V3aXNlLgorY29tbWl0IDk1ZWVjZWJiMjg1OGRjNmYxNDk1YTYxMDcyZmYzNmQwYTgxMjcxNDQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgNyAxNTozMjo0NiAyMDEzIC0wNTAwCiAKLTIwMDktMDMtMDEgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisgICAgUmVtb3ZlIGEub3V0IGNydWZ0IGZyb20gZGlzdAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgMTc2YWE5ZDJlMjNkOWNkNTdkNmYyNTA2OTJkOTEwYjQwOGY5YTY1MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiA3IDE1OjI5OjIyIDIwMTMgLTA1MDAKIAotMjAwOC0xMi0xOCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgRml4IEdDQyB1c2FnZSB0ZXN0IGFuZCB1cGRhdGUgUkVBRE1FCiAKLQlQUiBsaWJmZmkvMjYwNDgKLQkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9BU19YODZfUENSRUwpOiBOZXcgdGVzdC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgotCSogc3JjL3g4Ni9zeXN2LlMgWyFGRklfTk9fUkFXX0FQSV06IFByZWNhbGN1bGF0ZQotCVJBV19DTE9TVVJFX0NJRl9PRkZTRVQsIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQsCi0JUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCBmb3IgdGhlIFNvbGFyaXMgMTAveDg2IGFzc2VtYmxlci4KLQkoLmVoX2ZyYW1lKTogT25seSB1c2UgU1lNQk9MLS4gaWZmIEhBVkVfQVNfWDg2X1BDUkVMLgotCSogc3JjL3g4Ni91bml4NjQuUyAoLkxzdG9yZV90YWJsZSk6IE1vdmUgdG8gLnRleHQgc2VjdGlvbi4KLQkoLkxsb2FkX3RhYmxlKTogTGlrZXdpc2UuCi0JKC5laF9mcmFtZSk6IE9ubHkgdXNlIFNZTUJPTC0uIGlmZiBIQVZFX0FTX1g4Nl9QQ1JFTC4KK2NvbW1pdCBmM2E0ZjNmZGRlODliMDRkNjY5ODNhNDJhMjVkMDkxNjFjNWQ0ZDU0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDcgMDk6NTc6MjAgMjAxMyAtMDUwMAogCi0yMDA4LTEyLTE4ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorICAgIEZpeGVzIGZvciBBSVggeGxjIGNvbXBpbGVyLgogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgNTIyZjhmZWY0OTg0ODkyNzQ4MmJjNjNjOTRhZmFlYTViODRlNWVjMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA2IDIwOjMxOjMxIDIwMTMgLTA1MDAKIAotMjAwOC0xMS0yMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKyAgICBGaXggbWFuIHBhZ2UuIENsZWFuIG91dCBqdW5rLgogCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIHN1cHBvcnQgZm9yCi0Jc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYgcmV0dXJuIHZhbHVlcy4KLQkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2FsbF92OCk6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV92OCk6IExpa2V3aXNlLgorY29tbWl0IGM0ZGZhMjU5ZWI0ZThlNmY0YzM5Nzg2OGQ3ZmVlODBhYTBiYjZhMTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgNiAxNzo0MzoyNCAyMDEzIC0wNTAwCiAKLTIwMDgtMDktMjYgIFBldGVyIE8nR29ybWFuICA8cG9nbWFAdGhld3JpdHRlbndvcmQuY29tPgotCSAgICBTdGV2ZSBFbGxjZXkgIDxzamVAY3VwLmhwLmNvbT4KKyAgICBCdW1wIHNvdmVyc2lvbgogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIG5ldyBsaWJ0b29sLgotCSogTWFrZWZpbGUuaW46IERpdHRvLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogRGl0dG8uCi0JKiBhY2xvY2FsLm00OiBEaXR0by4KK2NvbW1pdCBmNjJiZDYzZmU2MTIzY2FkZWRiOGIyYjJjNzJlYjU0OWM0MGZiY2U5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDYgMTc6Mzg6MzIgMjAxMyAtMDUwMAogCi0yMDA4LTA4LTI1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorICAgIFJlbGVhc2UgY2FuZGlkYXRlIDEKIAotCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYIGFuZAotCUZGSV9MSU5VWF9TT0ZUX0ZMT0FUIHRvIHRoZSBQT1dFUlBDX0ZSRUVCU0QgZW51bS4KLQlBZGQgbm90ZSBhYm91dCBmbGFnIGJpdHMgdXNlZCBmb3IgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuCi0JQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIHR3byBuZXcgZmxhZ3MgdG8gaW5kaWNhdGUgaWYgd2UgaGF2ZSBvbmUKLQlyZWdpc3RlciBvciB0d28gcmVnaXN0ZXIgdG8gdXNlIGZvciBGRklfU1lTViBzdHJ1Y3RzLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFBhc3MgdGhlIHJpZ2h0IHJlZ2lzdGVyIGZsYWcgaW50cm9kdWNlZCBhYm92ZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBGaXggdGhlIHJldHVybiB0eXBlIGZvcgotCUZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNULiBDb21tZW50LgotCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorY29tbWl0IGY3Y2Q2MWU5ZTY4YTRhNTExNDdkZjA0ZDc1YmZlNWI5MWI5ZDkyODYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgNiAxNzozODowNCAyMDEzIC0wNTAwCiAKLTIwMDgtMDctMTYgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIEZpeCBwa2djb25maWcgaW5zdGFsbCBiaXRzCiAKLQkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBUdXJuIElOU04gaW50byBhbiB1bnNpZ25lZAotCWludC4KK2NvbW1pdCA2YTc5MDEyOTQyNzEyMWY3ZGIyZDg3NmU3MjE4YTMxMDRlNmQyNzQxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDYgMTc6Mzc6MTUgMjAxMyAtMDUwMAogCi0yMDA4LTA2LTE3ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorICAgIFdvcmsgYXJvdW5kIExMVk0gQUJJIHByb2JsZW0gb24geDg2LTY0CiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCitjb21taXQgMzcwMTEyOTM4ZTcwNTEyOGZkNWRkNDAxN2ZjMWExMjEwYmQwMjcxYQorTWVyZ2U6IGJhZGEyZTMgYmNjMGMyOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIEphbiAyNyAwNTowOTowNCAyMDEzIC0wODAwCiAKLTIwMDgtMDYtMDcgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMjggZnJvbSBqcmFsbHMvbWFzdGVyCisgICAgCisgICAgUmVvcmRlciB4ODZfNjQgY2hlY2tzCiAKLQkqIGNvbmZpZ3VyZS5hYyAocGFyaXNjKi0qLWxpbnV4KiwgcG93ZXJwYy0qLXN5c3YqLAotCXBvd2VycGMtKi1iZW9zKik6IFJlbW92ZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCBiY2MwYzI4MDAxYjZkNDI3ZDVjZDgwMzdkMmUzYzg5MmJhYmM2YjRjCitBdXRob3I6IEpvaG4gUmFsbHMgPGpyYWxsc0BjZXJpZHdlbi51cz4KK0RhdGU6ICAgU2F0IEphbiAyNiAxNToyMToxNCAyMDEzIC0wODAwCiAKLTIwMDgtMDUtMDkgIEp1bGlhbiBCcm93biAgPGp1bGlhbkBjb2Rlc291cmNlcnkuY29tPgorICAgIFJlb3JkZXIgeDg2XzY0IHRlc3RzCisgICAgCisgICAgU28gdGhhdCBkYXJ3aW4gYW5kIGN5Z3dpbi9taW5ndyBhcmUgdGVzdGVkIGJlZm9yZSB0aGUgZ2VuZXJpYyBjaGVjayAtLQorICAgIHdoaWNoIGFsbG93cyB0aGVtIHRvIGFjdHVhbGx5IGJlIHNldC4KIAotCSogTWFrZWZpbGUuYW0gKExUTERGTEFHUyk6IE5ldy4KLQkobGliZmZpX2xhX0xERkxBR1MpOiBVc2UgYWJvdmUuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KK2NvbW1pdCBiYWRhMmUzMjZkOWE5YWNmM2FlNDBjZmE0ZjVkN2E5YmE5N2IyZWE4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIxIDA4OjAyOjA3IDIwMTMgLTA1MDAKIAotMjAwOC0wNC0xOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKyAgICBVcGRhdGUgUkVBRE1FCiAKLQlQUiBib290c3RyYXAvMzU0NTcKLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgNjU1YmI4ZjM2OTBmZWJhOGU4NDBhNWYxODU0YjFkNzhlZDA4ZjY5MgorTWVyZ2U6IDEwMzVmZmIgODQwZjk3NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMSAwODowMToyNCAyMDEzIC0wNTAwCiAKLTIwMDgtMDMtMjYgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0JKiBzcmMvc2gvc3lzdi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgotCSogc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KK2NvbW1pdCAxMDM1ZmZiMmY0NjhlMWExYzQwMWQ1OGNmZjdlN2FiYjY5ODM4ZTY4CitNZXJnZTogYWViODcxOSA0MDg2MDI0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIxIDA3OjU1OjUzIDIwMTMgLTA1MDAKIAotMjAwOC0wMy0yNiAgRGFuaWVsIEphY29ib3dpdHogIDxkYW5AZGViaWFuLm9yZz4KKyAgICBVcGRhdGUgUkVBRE1FCiAKLQkqIHNyYy9hcm0vc3lzdi5TOiBGaXggQVJNIGNvbW1lbnQgbWFya2VyLgorY29tbWl0IDg0MGY5NzU4NjYwNTJmZGQ5MWIyYzIyNGQ1NmUwMWFlNTkwMGI2MGQKK01lcmdlOiBhZWI4NzE5IDQwODYwMjQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjEgMDc6NTU6NTMgMjAxMyAtMDUwMAogCi0yMDA4LTAzLTI2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotCSogc3JjL2FscGhhL29zZi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgotCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvdW5peDY0LlM6IExpa2V3aXNlLgotCSogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLgotCSogc3JjL3NwYXJjL3Y4LlM6IExpa2V3aXNlLgotCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgotCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KLQkqIHNyYy9hcm0vc3lzdi5TOiBMaWtld2lzZS4KK2NvbW1pdCBhZWI4NzE5YTM0NzU2OTY5OTcwNjAzZmNhNDU2ODUzMGQ1NjcwOGFmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIxIDA3OjM3OjMwIDIwMTMgLTA1MDAKIAotMjAwOC0wMy0xNiAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKyAgICBOZXcgbWljcm9ibGF6ZSBzdXBwb3J0CiAKLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmU6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorY29tbWl0IDQwODYwMjQ1YTRmZDkxYTFiODhhZGM5MTcxZWM5OTNjNTQ5ZTQ1ZDUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjEgMDc6Mzc6MzAgMjAxMyAtMDUwMAogCi0yMDA4LTAyLTEyICBCam9lcm4gS29lbmlnICA8YmtvZW5pZ0BhbHBoYS10aWVyY2hlbi5kZT4KLQkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKyAgICBOZXcgbWljcm9ibGF6ZSBzdXBwb3J0CiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIGFtZDY0LSotZnJlZWJzZCogdGFyZ2V0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IDIwY2FlMzJiMTUyYjQzNjc5YWU2NWE4NWRiOWExYzZiYjhhMTQzZGQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjEgMDc6MDc6MzggMjAxMyAtMDUwMAogCi0yMDA4LTAxLTMwICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisgICAgWHRlbnNhIHN1cHBvcnQKIAotCVBSIGxpYmZmaS8zNDYxMgotCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBQb3AgNCBieXRlIGZyb20gc3RhY2sgd2hlbgotCXJldHVybmluZyBzdHJ1Y3QuCitjb21taXQgOTc0MmY5MTc4MmZhZWY0YTE1OTQxNTA4YTIyYzQwOGZiN2QxZDIyNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMSAwNzowMzo0MSAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogQWRkICItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiCi0JdGVzdHMuCisgICAgTWVudGlvbiBJQk0gWEwgY29tcGlsZXIgc3VwcG9ydCBvbiBBSVguCiAKLTIwMDgtMDEtMjQgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCBmMDNlYWIwODI0OGYxMjJjZTNiNjIzYTE4ZGY5ZTE5ZmFlMWI2ZTk4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgSmFuIDExIDE3OjE0OjExIDIwMTMgLTA1MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIFJlbW92ZSBvYnNvbGV0ZSBpbmxpbmUgdGVzdCBmdW5jdGlvbnMKIAotMjAwOC0wMS0wNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCAwNWZiZTFmYWVkYzdiMjU4MGQ1ZjE0MDEwZDAwZTllM2NlZTczOTUxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgSmFuIDExIDE2OjU0OjQwIDIwMTMgLTA1MDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggdGhpbmtvLgorICAgIHhsYyBjb21waWxlciBzdXBwb3J0CiAKLTIwMDgtMDEtMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgMGI0OTg2YTc4ODllZDE4NjQ2NzQxOTIyMjhmMTE2MmMxYjU3NzBhOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEphbiAxMSAxMToxOTo1MiAyMDEzIC0wNTAwCiAKLQlQUiB0ZXN0c3VpdGUvMzI4NDMKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIGNvZGUgZm9yCi0Jc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYgZm9yIFg4Nl9EQVJXSU4uCi0JVXBkYXRlZCBjb3B5cmlnaHQgaW5mby4KLQlIYW5kbGUgb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzIHdpdGggc3BlY2lhbCBjaWYtPmZsYWdzLgotCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQWRkIHNwZWNpYWwgdHlwZXMgZm9yIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cy4KLQlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgotCSogc3JjL3g4Ni9kYXJ3aW4uUyAoZmZpX2NhbGxfU1lTVik6IFJld3JpdGUgdG8gdXNlIGEganVtcCB0YWJsZSBsaWtlCi0Jc3lzdi5TCi0JUmVtb3ZlIGNvZGUgdG8gcG9wIGFyZ3MgZnJvbSB0aGUgc3RhY2sgYWZ0ZXIgY2FsbC4KLQlTcGVjaWFsLWNhc2Ugc2lnbmVkL3Vuc2lnbmVkIGZvciBpbnQ4LzE2LCBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMuCi0JKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogSGFuZGxlIEZGSV9UWVBFX1VJTlQ4LAotCUZGSV9UWVBFX1NJTlQ4LCBGRklfVFlQRV9VSU5UMTYsIEZGSV9UWVBFX1NJTlQxNiwgRkZJX1RZUEVfVUlOVDMyLAotCUZGSV9UWVBFX1NJTlQzMi4KLQlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorICAgIFt0cmF2aXNdIGluc3RhbGwgZGVqYWdudSB3aXRoIHN1ZG8KIAotMjAwNy0xMi0wOCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCAzYzMzN2VlZjUxYWI5YTQ5OTNmYzg3NWJmYTI2Mjg5ZGQ2YTA4ODgxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgSmFuIDExIDExOjE4OjE0IDIwMTMgLTA1MDAKIAotCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6ICBSZXBsYWNlIGRhZGQgd2l0aCBBRERVLCBkc3ViIHdpdGgKLQlTVUJVLCBhZGQgd2l0aCBBRERVIGFuZCB1c2Ugc21hbGxlciBjb2RlIHNlcXVlbmNlcy4KKyAgICBbdHJhdmlzXSBpbnN0YWxsIGRlamFnbnUKIAotMjAwNy0xMi0wNyAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCA5MDcyMDk2MmNlMWJhZjlmYzM1ZDFiZGUxNzM4MTAyYmNkNWJkNWVkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgSmFuIDExIDEwOjU3OjMwIDIwMTMgLTA1MDAKIAotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGxvbmcgZG91YmxlIHJldHVybgotCXR5cGUuCisgICAgQWRkIGZpcnN0IHRyYXZpcyBjb25maWcgZmlsZQogCi0yMDA3LTEyLTA2ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorY29tbWl0IGJmZjA1MmQ5Y2Q1YmU0MWJhOWU0N2M3NjExNDA1NGFmNDg3ZDNjMzAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTEgMTA6MjQ6MzIgMjAxMyAtMDUwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lIGlmIG5vdAlhbHJlYWR5Ci0JZGVmaW5lZC4KLQkoZmZpX2phdmFfcmF3KTogTmV3IHR5cGVkZWYuCi0JKGZmaV9qYXZhX3Jhd19jYWxsLCBmZmlfamF2YV9wdHJhcnJheV90b19yYXcsCi0JZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogQ2hhbmdlIHBhcmFtZXRlciB0eXBlcyBmcm9tIGZmaV9yYXcgdG8KLQlmZmlfamF2YV9yYXcuCi0JKGZmaV9qYXZhX3Jhd19jbG9zdXJlKSA6IFNhbWUuCi0JKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmUsIGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jKTogQ2hhbmdlCi0JcGFyYW1ldGVyIHR5cGVzLgotCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfc2l6ZSk6ICBSZXBsYWNlIEZGSV9TSVpFT0ZfQVJHIHdpdGgKLQlGRklfU0laRU9GX0pBVkFfUkFXLgotCShmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkpOiBDaGFuZ2UgdHlwZSBvZiByYXcgdG8gZmZpX2phdmFfcmF3LgotCVJlcGxhY2UgRkZJX1NJWkVPRl9BUkcgd2l0aCBGRklfU0laRU9GX0pBVkFfUkFXLiBVc2UKLQlzaXplb2YoZmZpX2phdmFfcmF3KSBmb3IgYWxpZ25tZW50IGNhbGN1bGF0aW9ucy4KLQkoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogU2FtZS4KLQkoZmZpX2phdmFfcnZhbHVlX3RvX3Jhdyk6IEFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBGRklfVFlQRV9QT0lOVEVSCi0JaWYgRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA0LgotCShmZmlfamF2YV9yYXdfdG9fcnZhbHVlKTogU2FtZS4KLQkoZmZpX2phdmFfcmF3X2NhbGwpOiBDaGFuZ2UgdHlwZSBvZiByYXcgdG8gZmZpX2phdmFfcmF3LgotCShmZmlfamF2YV90cmFuc2xhdGVfYXJncyk6IFNhbWUuCi0JKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jLCBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlKTogQ2hhbmdlCi0JcGFyYW1ldGVyIHR5cGVzLgotCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKEZGSV9TSVpFT0ZfSkFWQV9SQVcpOiBEZWZpbmUgZm9yIE4zMiBBQkkuCisgICAgMzItYml0IHg4NiBmaXggYW5kIG1vcmUKIAotMjAwNy0xMi0wNiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCBjZDQxYWVhYjYxNzZmODM5MTY3OTU1YzAxNmVjYzE5ZjY1Zjc1ZGYzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgSmFuIDEwIDE3OjI1OjQ1IDIwMTMgLTA1MDAKIAotCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jbG9zdXJlX04zMik6IFVzZSA2NC1iaXQgYWRkIGluc3RydWN0aW9uIG9uCi0JcG9pbnRlciB2YWx1ZXMuCisgICAgQWRkIGNvbXBpbGVyIGNvbHVtbiB0byB0YWJsZQogCi0yMDA3LTEyLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IDhiZjk4N2Q0ZGY3YzRkMjE0MzViOTIxMWY2Y2M4NmFiZjU5MDRiNDIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBKYW4gMTAgMTc6MjQ6NTEgMjAxMyAtMDUwMAogCi0JUFIgbGliZmZpLzMxOTM3Ci0JKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogSW50cm9kdWNlIG5ldyBBQkkgRkZJX0xJTlVYX1NPRlRfRkxPQVQuCi0JQWRkIGxvY2FsIEZGSV9UWVBFX1VJTlQxMjggdG8gaGFuZGxlIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4LgotCSogc3JjL3Bvd2VycGMvZmZpLmM6IERpc3Rpbmd1aXNoIGJldHdlZW4gX19OT19GUFJTX18gYW5kIG5vdCBhbmQKLQlzZXQgdGhlIE5VTV9GUFJfQVJHX1JFR0lTVEVSUyBhY2NvcmRpbmcgdG8uCi0JQWRkIHN1cHBvcnQgZm9yIHBvdGVudGlhbCBzb2Z0LWZsb2F0IHN1cHBvcnQgdW5kZXIgaGFyZC1mbG9hdAotCWFyY2hpdGVjdHVyZS4KLQkoZmZpX3ByZXBfYXJnc19TWVNWKTogU2V0IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyB0byAwIGluIGNhc2Ugb2YKLQlGRklfTElOVVhfU09GVF9GTE9BVCwgaGFuZGxlIGZsb2F0LCBkb3VibGVzIGFuZCBsb25nLWRvdWJsZXMgYWNjb3JkaW5nCi0JdG8gdGhlIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUIEFCSS4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IE1ha2Ugc3VyZSBub3QgdG8gc3RvcmUgZmxvYXQvZG91YmxlCi0Jb24gYXJjaHMgd2hlcmUgX19OT19GUFJTX18gaXMgdHJ1ZS4KLQlBZGQgRkZJX1RZUEVfVUlOVDEyOCBzdXBwb3J0LgotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgc3VwcG9ydCBmb3Igc29mdC1mbG9hdCBsb25nLWRvdWJsZS0xMjguCi0JQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisgICAgRml4IGZvciBzdW5wcm8gY29tcGlsZXIgb24gU29sYXJpcwogCi0yMDA3LTExLTI1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IDNlZTc0ZmQ2ZGM4Y2NkMzJiNjA4YmJmZjczNTI2ODM4ZmMzNGY3MGIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBKYW4gMTAgMTc6MTU6MDMgMjAxMyAtMDUwMAogCi0JKiBzcmMvY2xvc3VyZXMuYzogTW92ZSBkZWZpbnRpb24gb2YgTUFZQkVfVU5VU0VEIGZyb20gaGVyZSB0byAuLi4KLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiAuLi4gaGVyZS4KLQlVcGRhdGUgY29weXJpZ2h0LgorICAgIFVwZGF0ZSBkb2N1bWVudGF0aW9uIHZlcnNpb24uCiAKLTIwMDctMTEtMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgMTNlMmQ3YjkyNTU3YTk1MTFhMDQxNGRmODJiZjJkZjNlZGM1NWNiYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEphbiAxMCAxMDo1MjowMiAyMDEzIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTG9hZCBjb3JyZWN0IGNyIHRvIGNvbXBhcmUgaWYgd2UgaGF2ZSBsb25nIGRvdWJsZS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIGEgY29tbWVudCB0byBzaG93IHdoaWNoIHBhcnQgZ29lcyBpbnRvIGNyNi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGRsLmM6IE5ldyB0ZXN0LgorICAgIEhhbmRsZSBib3RoIDMyIGFuZCA2NC1iaXQgeDg2IGJ1aWxkcyByZWdhcmRsZXNzIG9mIHRhcmdldCB0cmlwbGUKIAotMjAwNy0wOS0wNCAgICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgNTE0MTU0MzAwMGZjODZhM2Q0OWE5MDdhMjMxMzcxM2VlNzllNTA0ZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEphbiAxMCAwNzozNTo1MyAyMDEzIC0wNTAwCiAKLQkqIHNyYy9hcm0vc3lzdi5TIChVTldJTkQpOiBOZXcuCi0JKFdob2xlIGZpbGUpOiBDb25kaXRpb25hbGx5IGNvbXBpbGUgdW53aW5kZXIgZGlyZWN0aXZlcy4KLQkqIHNyYy9hcm0vc3lzdi5TOiBBZGQgdW53aW5kZXIgZGlyZWN0aXZlcy4KKyAgICBEb24ndCBydW4gRUggdGVzdHMgd2l0aCBub24tR05VIGNvbXBpbGVyCiAKLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBBbGlnbiBzdHJ1Y3RzIGJ5IGF0IGxlYXN0IDQgYnl0ZXMuCi0JT25seSB0cmVhdCByMCBhcyBhIHN0cnVjdCBhZGRyZXNzIGlmIHdlJ3JlIGFjdHVhbGx5IHJldHVybmluZyBhCi0Jc3RydWN0IGJ5IGFkZHJlc3MuCi0JT25seSBjb3B5IHRoZSBieXRlcyB0aGF0IGFyZSBhY3R1YWxseSB3aXRoaW4gYSBzdHJ1Y3QuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQSBDb21wb3NpdGUgVHlwZSBub3QgbGFyZ2VyIHRoYW4gNCBieXRlcwotCWlzIHJldHVybmVkIGluIHIwLCBub3QgcGFzc2VkIGJ5IGFkZHJlc3MuCi0JKGZmaV9jYWxsKTogQWxsb2NhdGUgYSB3b3JkLXNpemVkIHRlbXBvcmFyeSBmb3IgdGhlIGNhc2Ugd2hlcmUKLQlhIGNvbXBvc2l0ZSBpcyByZXR1cm5lZCBpbiByMC4KLQkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogQWxpZ24gYXMgbmVjZXNzYXJ5LgorY29tbWl0IDU2YmE4ZDg2ZjQ3OTM3YTBhZmI4MWEyYjllNzdjOWQyMzVkOWRiNDUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBKYW4gMTAgMDc6MjU6MTAgMjAxMyAtMDUwMAogCi0yMDA3LTA4LTA1ICBTdGV2ZW4gTmV3YnVyeSAgPHNfal9uZXdidXJ5QHlhaG9vLmNvLnVrPgorICAgIERvbid0IHVzZSB3YXJuaW5nIGNoZWNraW5nIG1hY3JvIHdpdGggc3VuIGNvbXBpbGVyCiAKLQkqIHNyYy9hcm0vZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBVc2UgX19jbGVhcl9jYWNoZSBpbnN0ZWFkIG9mCi0JZGlyZWN0bHkgdXNpbmcgdGhlIHN5c19jYWNoZWZsdXNoIHN5c2NhbGwuCitjb21taXQgNmEwMjhjYWVjMWIyYzc5MDRmZWI0YzRmOWNiN2UxMTI1ZTFkMWI2MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEphbiAxMCAwMToxOTo0MyAyMDEzIC0wNTAwCiAKLTIwMDctMDctMjcgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIERvbid0IHVzZSBHQ0Npc21zIHRvIGRlZmluZSB0eXBlcyB3aGVuCisgICAgKyAgICAgICBidWlsZGluZyB3aXRoIHRoZSBTVU5QUk8gY29tcGlsZXIuCiAKLQkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogQWRkIHNvZnQtZmxvYXQuCitjb21taXQgMmQ5YjM5Mzk3NTFiM2VmOTczOTA0OTUwOWQzNTNhZGUxMGIzMmE4ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiA5IDIxOjE0OjU0IDIwMTMgLTA1MDAKIAotMjAwNy0wOS0wMyAgTWFjaWVqIFcuIFJvenlja2kgIDxtYWNyb0BsaW51eC1taXBzLm9yZz4KKyAgICBGaXggZm9yIGNsb3N1cmVzIHdpdGggc3VucHJvIGNvbXBpbGVyCiAKLQkqIE1ha2VmaWxlLmFtOiBVbmlmeSBNSVBTX0lSSVggYW5kIE1JUFNfTElOVVggaW50byBNSVBTLgotCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogY29uZmlndXJlOiBMaWtld2lzZS4KK2NvbW1pdCA4MzA4OTg0ZTQ3OWUzMjc0YTM2ZTk4ZTgyNzJiNWFkYmI2Yjc3NGMyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSmFuIDggMTU6MTQ6MjEgMjAxMyAtMDUwMAogCi0yMDA3LTA4LTI0ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorICAgIE1ha2Ugc3VyZSB3ZSdyZSBydW5uaW5nIGRlamFnbnUgdGVzdHMgd2l0aCB0aGUgcmlnaHQgY29tcGlsZXIuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2wuYzogTmV3IHRlc3QuCitjb21taXQgZjI2YzdjYTY3MTQ3NDUwZGIyZmUyNWVhOTMyOTQ0ZTZjZjE0NWQ1YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEphbiA4IDE0OjQ3OjA1IDIwMTMgLTA1MDAKIAotMjAwNy0wOC0xMCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKyAgICBNYWtlIGNvbXBpbGVyIG9wdGlvbnMgaW4gZGVqYWdudSBydW5zIGNvbXBpbGVyIHNwZWNpZmljCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjLAotCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHM2NCotKi0qLgorY29tbWl0IDc0Yzc3NmUyMTkwN2ZjMmU1OTI1N2MwMjFmMjMwNzdmOGI3OTY2Y2IKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKYW4gOCAxMjoyNTo1NCAyMDEzIC0wNTAwCiAKLTIwMDctMDgtMTAgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisgICAgU3dpdGNoIHg4NiBTb2xhcmlzIHRvIFg4NiBmcm9tIFg4Nl82NAogCi0JUFIgbGliZmZpLzI4MzEzCi0JKiBjb25maWd1cmUuYWM6IERvbid0IHRyZWF0IG1pcHM2NCBhcyBhIHNwZWNpYWwgY2FzZS4KLQkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgbjMyLlMuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUKLQkqIE1ha2VmaWxlLmluOiBEaXR0by4KLQkqIGZmaWNvbmZpZy5oLmluOiBEaXR0by4KLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChSRUdfTCwgUkVHX1MsIFNVQlUsIEFERFUsIFNSTCwgTEkpOiBJbmRlbnQuCi0JKExBLCBFSF9GUkFNRV9BTElHTiwgRkRFX0FERFJfQllURVMpOiBOZXcgcHJlcHJvY2Vzc29yIG1hY3Jvcy4KLQkoRkZJX0RFRkFVTFRfQUJJKTogU2V0IGZvciBuNjQgY2FzZS4KLQkoRkZJX0NMT1NVUkVTLCBGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIGZvciBuMzIgYW5kIG42NCBjYXNlcy4KLQkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiBBZGQgZGVidWcgbWFjcm9zIGFuZCBsYWJlbHMgZm9yIEZERS4KLQkoZmZpX2Nsb3N1cmVfTjMyKTogTmV3IGZ1bmN0aW9uLgotCSguZWhfZnJhbWUpOiBOZXcgc2VjdGlvbgotCSogc3JjL21pcHMvbzMyLlM6IENsZWFuIHVwIGNvbW1lbnRzLgotCShmZmlfY2xvc3VyZV9PMzIpOiBQYXNzIGZmaV9jbG9zdXJlIHBhcmFtZXRlciBpbiAkMTIuCi0JKiBzcmMvbWlwcy9mZmkuYzogVXNlIEZGSV9NSVBTX04zMiBpbnN0ZWFkIG9mCi0JX01JUFNfU0lNID09IF9BQklOMzIgdGhyb3VnaG91dC4KLQkoRkZJX01JUFNfU1RPUF9IRVJFKTogTmV3LCB1c2UgaW4gcGxhY2Ugb2YKLQlmZmlfc3RvcF9oZXJlLgotCShmZmlfcHJlcF9hcmdzKTogVXNlIHVuc2lnbmVkIGxvbmcgdG8gaG9sZCBwb2ludGVyIHZhbHVlcy4gIFJld3JpdGUKLQl0byBzdXBwb3J0IG4zMi9uNjQgQUJJcy4KLQkoY2FsY19uMzJfc3RydWN0X2ZsYWdzKTogUmV3cml0ZS4KLQkoY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuICBSZXZlcnNlCi0JcG9zaXRpb24gb2YgZmxhZyBiaXRzLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFJld3JpdGUgbjMyIHBvcnRpb24uCi0JKGZmaV9jYWxsKTogRW5hYmxlIGZvciBuNjQuICBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3Igc21hbGwgc3RydWN0dXJlCi0JcmV0dXJuIHZhbHVlcy4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBZGQgbjMyIGFuZCBuNjQgc3VwcG9ydC4KLQkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBBZGQgY2FzdCB0byBzaWxlbmNlIHdhcm5pbmcuCi0JKGNvcHlfc3RydWN0X04zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBOZXcgZnVuY3Rpb25zLgorY29tbWl0IDg5NjJjOGM4ZDA2ODAzZTMxMGJhYzBmZmM4ZTg0ZWExNWRhZWZmM2YKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKYW4gOCAxMjoyMjoyNCAyMDEzIC0wNTAwCisKKyAgICBGaXggcmVhZC1vbmx5IGVoX2ZyYW1lIHRlc3QKKworY29tbWl0IDM1ZGRiNjljMmI0OTc0NmQ5NDBlOTE5Y2EyMjZlY2MxYmU5NGYxNGEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKYW4gOCAwNzo1MzozNyAyMDEzIC0wNTAwCisKKyAgICBPbmx5IGVtaXQgRFdBUkYgdW53aW5kIGluZm8gd2hlbiBidWlsZGluZyB3aXRoIEdDQworCitjb21taXQgZjc4NzliYzNmM2E4ZDBiYmZjYzM4NzcxNzMyYzE2MGE1OGJhOWNkOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEphbiA4IDA3OjMwOjI4IDIwMTMgLTA1MDAKKworICAgIFRlc3RzdWl0ZSBmaXggZm9yIFNvbGFyaXMgdmVuZG9yIGNvbXBpbGVyCisKK2NvbW1pdCA2N2NlYTkwZmMwODk3MDIxNDY2ZmQxMDI2NzEwMTlkMzBkYjQ3NGNkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDcgMDY6MzA6MjQgMjAxMyAtMDUwMAorCisgICAgbWVuZAorCitjb21taXQgMGRlMzI3N2IxOGNmNTRiZTNiODFkNTA5YjliZTliNDdkOWJjMWU4MgorQXV0aG9yOiBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5kZT4KK0RhdGU6ICAgTW9uIERlYyAzIDAwOjAyOjMxIDIwMTIgKzAwMDAKKworICAgIFRlc3RzdWl0ZSBmaXhlcyAod2FzIFJlOiBbUEFUQ0hdIEZpeCBsaWJmZmkgb24gbTY4ay1saW51eC1nbnUsIGNvbXBsZXRlbHkpCisgICAgCisgICAgRGl4aSBxdW9k4oCmCisgICAgCisgICAgPmFsdGhvdWdoIEkgYmVsaWV2ZSBzb21lIDMuMC4xMSBjaGVja3MgdG8gYmUgYnJva2VuOgorICAgIAorICAgIEFuZCBpbmRlZWQsIHdpdGggYSBmZXcgbWlub3IgY2hhbmdlcyBvbiB0b3Agb2YgZ2l0IG1hc3RlciwKKyAgICBJIHN0aWxsIGdldCBhIGZ1bGwgcnVuIG9mIFBBU1MgcGx1cyBvbmUgWFBBU1Mgb24gYW1kNjQtbGludXghCisgICAgCisgICAgV2l0aCB0aGUgb3RoZXIgcGF0Y2hlcyAoZnJvbSB0aGlzIG1lc3NhZ2XigJlzIHBhcmVudCkgYW5kCisgICAgdGhlc2UgYXBwbGllZCwgSSBnZXQgYSBmdWxsIFBBU1Mgb24gbTY4ay1saW51eCBhcyB3ZWxsLgorICAgIAorICAgIFNvLCBwbGVhc2UgZ2l0IGFtIHRoZXNlIHRocmVlIGRpZmZzIOKYugorICAgIAorICAgIGJ5ZSwKKyAgICAvL21pcmFiaWxvcworICAgIC0tCisgICAgRldJVywgSSdtIHF1aXRlIGltcHJlc3NlZCB3aXRoIG1rc2ggaW50ZXJhY3RpdmVseS4gSSB0aG91Z2h0IGl0IHdhcyBtdWNoCisgICAgKm11Y2gqIG1vcmUgYmFyZSBib25lcy4gQnV0IGl0IHR1cm5zIG91dCBpdCBiZWF0cyB0aGUgbGl2aW5nIGhlbGwgb3V0IG9mCisgICAga3NoOTMgaW4gdGhhdCByZXNwZWN0LiBJJ2QgZXZlbiBjb25zaWRlciBpdCBmb3IgbXkgZGFpbHkgdXNlIGlmIEkgaGFkbid0CisgICAgd2FzdGVkIGhhbGYgbXkgbGlmZSBvbiBteSB6c2ggc2V0dXAuIDotKSAtLSBGcmFuayBUZXJiZWNrIGluICMhL2Jpbi9ta3NoCisgICAgRnJvbSA1Y2IxNWEzYmFkMWYwZmIzNjA1MjBkZDQ4YmZjOTM4YzgyMWNkY2NhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorICAgIEZyb206IFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLm9yZz4KKyAgICBEYXRlOiBTdW4sIDIgRGVjIDIwMTIgMjM6MjA6NTYgKzAwMDAKKyAgICBTdWJqZWN0OiBbUEFUQ0ggMS8yXSBGaXggdGVzdHMgd3JpdGluZyB0byBhIGNsb3N1cmUgcmV0dmFsIHZpYSBwb2ludGVyIGNhc3RzCisgICAgCisgICAgQXMgZXhwbGFpbmVkIGluIDxQaW5lLkJTTS40LjY0TC4xMjEyMDIyMDE0NDkwLjIzNDQyQGhlcmMubWlyYnNkLm9yZz4KKyAgICBhbGwgb3RoZXIgdGVzdHMgdGhhdCBkbyB0aGUgc2FtZSBjYXN0IHRvIGFuIGZmaV9hcmcgcG9pbnRlciBpbnN0ZWFkLgorICAgIAorICAgIFBBU1Mgb24gYW1kNjQtbGludXggKFhlbiBkb21VKSBhbmQgbTY4ay1saW51eCAoQVJBbnlNKQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLm9yZz4KKworY29tbWl0IDhmNDc3MmYzODNhYmQ3MWNmYTE0MWM4YTcwYmExMWMxYWE0ZWJlMmMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gNyAwNjoxNDo1MyAyMDEzIC0wNTAwCisKKyAgICBtNjhrIGZpeGVzIGZvciBzaWduZWQgOCBhbmQgMTYtYml0IGNhbGxzLgorCitjb21taXQgZWE3Zjg0NDBkNThhZmJlYmIxODFlMjk1ZmY1NjRmZGYzZDY1OTBhMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEphbiA0IDA5OjA5OjMyIDIwMTMgLTA1MDAKKworICAgIHJlbW92ZSBnY2MtaXNtCisKK2NvbW1pdCBmMDZjMGYxMDM3N2FjMDRlZWJhNWU2MzJkYmU1YzYyYzYyOWRmNGU2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDk6Mzk6MTcgMjAxMyAtMDUwMAorCisgICAgQWRkIG1pc3NpbmcgQ2hhbmdlTG9nIGVudHJ5IGFuZCBnZW5lcmF0ZWQgZmlsZXMuCisKK2NvbW1pdCAxZjg2NzVkNGMxMDFkMTlkNjdjYTBhNTVmZjJiYTk3MzM0OTU1OGFkCitNZXJnZTogMzM1ZjQxOSBmNmI1OGQyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDY6MzQ6MzggMjAxMyAtMDgwMAorCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMyNiBmcm9tIHJvZmwwci9tYXN0ZXIKKyAgICAKKyAgICBmaXggYnVpbGQgZXJyb3Igb24gcHBjIHdoZW4gbG9uZyBkb3VibGUgPT0gZG91YmxlCisKK2NvbW1pdCAzMzVmNDE5YTg2MDkwY2RhOWYyMTVkMTQ5NTcyZjk0ODFjM2FkMDM0CitNZXJnZTogNTMyMzZkNSA2ZDZmNzExCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDY6MzA6MDMgMjAxMyAtMDgwMAorCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMyMyBmcm9tIHJ1cmJhbi9tYXN0ZXIKKyAgICAKKyAgICBjeWd3aW4vbWluZ3cgc2hhcmVkIGxpYnMgbmVlZCBsaWJ0b29sIExERkxBR1MgPSAtbm8tdW5kZWZpbmVkCisKK2NvbW1pdCA1MzIzNmQ1MDYxMDM0Y2MwYTdmNDY0N2ZjMWJkMDViYTFhZWIzZDJhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDk6MjQ6NTUgMjAxMyAtMDUwMAorCisgICAgUmVnZW5lcmF0ZSBmaWxlcworCitjb21taXQgNzIyMjJjYTNmYmU1NjBlMTNjOGRjODljYTQ0MWIyOGI3Y2M3NGRhZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA5OjA2OjM4IDIwMTMgLTA1MDAKKworICAgIFVwZGF0ZSB0ZXhpbmZvLnRleAorCitjb21taXQgMWUzMjZjOTU0MzFmYzk4OTY0MjJmYTM2NjU5ZjNlODMzODUyNTc5YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA5OjA1OjAyIDIwMTMgLTA1MDAKKworICAgIFVwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIKKworY29tbWl0IGNiNjY3MWY1YjhhOTU5NmZmOTY4YzZiNmMzMDRmNzBhZGY3MWIzNjgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwODo1NjowNyAyMDEzIC0wNTAwCisKKyAgICBNaXNzaW5nIC5naXRpZ25vcmUgY2hhbmdlcyBmb3IgeGNvZGUgc3VwcG9ydAorCitjb21taXQgZWJiZTc3OTY2ODU1Mzk1YTJhNDdlZDJjMDlhMzhmOTNlYjA0ODFjZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA4OjU0OjA1IDIwMTMgLTA1MDAKKworICAgIG1pc3NlZCB4MzIgbGlidG9vbCBwYXRjaC4KKworY29tbWl0IDQzOTQwOTZkYTBhY2EwZGQ0MjJiNDc5YTA0M2MxOGI0ZjA1YzU3NzAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwODo1MTozNSAyMDEzIC0wNTAwCisKKyAgICBtaXNzZWQgdHJhbXBvbGluZV90YWJsZSBwYXRjaC4gTW92ZSB0byBHQ0MuCisKK2NvbW1pdCBlZDdhNTljM2ZmN2M4NGJkOTVjMzc0YTVhZmYyMTU5OWY3MDVlNmRjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDg6NDg6MDEgMjAxMyAtMDUwMAorCisgICAgV2luZG93cyBzeW1ib2wgZXhwb3J0IGZpeC4gIE1vdmUgdG8gR0NDLgorCitjb21taXQgY2NlZTA5YTRmZjg0M2IxMWM3ZDhiNjgxOTc3NmY1N2QxODczMDVjNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA4OjQxOjU1IDIwMTMgLTA1MDAKKworICAgICsyMDEyLTAzLTIxICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgKworICAgICsgICAgICAgKiB0ZXN0c3VpdGUvbGliL3RhcmdldC1saWJwYXRoLmV4cCBbKi0qLWN5Z3dpbiosICotKi1taW5ndypdCisgICAgKyAgICAgICAoc2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IEFkZCB0aGUgbGlicmFyeSBzZWFyY2ggZGlyIHRvIFBBVEgKKyAgICArICAgICAgIChhbmQgc2F2ZSBQQVRIIGZvciBsYXRlcikuCisgICAgKyAgICAgICAocmVzdG9yZV9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBSZXN0b3JlIFBBVEguCisKK2NvbW1pdCAwODlkYmNlN2NjMDg4OWViMjY0NDRkODlhZTA2MmM3M2M2OWYyNmYwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDg6Mzc6MzUgMjAxMyAtMDUwMAorCisgICAgbWVkCisKK2NvbW1pdCA5ODBhMzM0YzQyYjRiMGVmZjMyZTU1OTI5ZWM2NzI3ZDEzMjZiMDVkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDc6MzY6NDIgMjAxMyAtMDUwMAorCisgICAgVGVzdCBHQ0MgdXBkYXRlCisKK2NvbW1pdCA4YmFkNjc5YWRlNTAwMGU1N2NkYzljYWNkZTIyZThiOTk4NDA5MzBmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDg6Mjg6MzUgMjAxMyAtMDUwMAorCisgICAgTmV3IHN0YW5kLWFsb25lIHBhdGNoCisKK2NvbW1pdCA5ODFjMzJlZTExNWU5ZjBkNjU0NmE3NDU5Mjg3NWUxMzgyMjJhOWQxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDc6MzQ6MDMgMjAxMyAtMDUwMAorCisgICAgTWVyZ2Ugd2l0aCBHQ0MuICBFbGltaW5hdGUgcXVpbHQgYml0cy4KKworY29tbWl0IDYxYTA1NDkyOTUxN2ZiODBjNDM3YmE3MWM5MWYzZTIwY2ZmZjU4MWEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBOb3YgMjggMDY6MDc6NDEgMjAxMiAtMDUwMAorCisgICAgUmVmcmVzaCBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIKKworY29tbWl0IGY2YjU4ZDJiZGMwYTI0Y2U5NGRlZGNlNTk4MDJmMDkxOTc5ZGYyNjUKK0F1dGhvcjogcm9mbDByIDxyZXRueWdAZ214Lm5ldD4KK0RhdGU6ICAgVGh1IE5vdiAyMiAxNjoyNjoyMSAyMDEyICswMTAwCisKKyAgICBmaXggYnVpbGQgb24gcHBjIHdoZW4gbG9uZyBkb3VibGUgPT0gZG91YmxlCisKK2NvbW1pdCA2OWRhMzNhMDc2MWFlYWM3M2Y5ZTk2NDYyNjlkYTYxYzkwNmQ2MDIwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gTm92IDEyIDE1OjI1OjQ3IDIwMTIgLTA1MDAKKworICAgIFB1bGwgaW4gY29uZmlnLnN1YiBmb3IgYWFyY2g2NCBzdXBwb3J0IGFuZCBtb3JlCisKK2NvbW1pdCBmNjgwYjU5OGI3YmRkZTMyNWFjOTM0OWU4YzM1MTUxYzIyOGJmMmRmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgTm92IDYgMTY6MDA6NDAgMjAxMiAtMDUwMAorCisgICAgQWRkIG1pc3NpbmcgYWFyY2g2NCBjb25maWd1cnkgYml0cworCitjb21taXQgZGZhZGZiMTk4NTNjNTdjODYyM2M0MzZkMGVmMmJkYWZhYjI0YjQzMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIE9jdCAzMSAwNjo0Njo0MSAyMDEyIC0wNDAwCisKKyAgICBSZWJhc2UgZm9yIHBwYzY0IGZpeAorCitjb21taXQgZTk0NGI4YzdlYjFlMmVlYjljMGYzYjk3NDJiNGQ3ZjQ3Njg2MGNlMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAzMCAxNDowNjowOSAyMDEyIC0wNDAwCisKKyAgICBBZGQgUGFYIHdvcmstYXJvdW5kCisKK2NvbW1pdCA5Y2NkNTFiZTFmZGViOTlmOGI0ZjQyZjkwNTE2NmMyYWJiYmE4YWMwCitNZXJnZTogZjM0Mjk5NiBmYTVkNzQ3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDMwIDEzOjM3OjM3IDIwMTIgLTA0MDAKKworICAgIEZpeCBjb21taXQgY29uZmxpY3RzCisKK2NvbW1pdCBmMzQyOTk2Y2I1MGViMjNiODY4YWZjZmY1YWMwY2RiYjZiNTA1ZDYzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDMwIDA3OjQyOjI3IDIwMTIgLTA0MDAKKworICAgIERhcndpbjEyIGZpeAorCitjb21taXQgNThlOGI2NmY3MGNlZjJlM2M5YjBlNWE3MDdiNDVkNjM0Y2JiZjVkOQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAzMCAwNzowNzoxOSAyMDEyIC0wNDAwCisKKyAgICBBQXJjaDY0IHBvcnQKKworY29tbWl0IGZhNWQ3NDc5MDU0NzI1NzFmZDQ3MmMwN2Q0NzI2MDE3NjI0ZjY2YjMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMzAgMDc6MDc6MTkgMjAxMiAtMDQwMAorCisgICAgQUFyY2g2NCBwb3J0CisKK2NvbW1pdCA2OTkzYTY2ODZmNDNmMjMxM2IxODE0MmMxZTk2MTg5YTI3ZGIyYWEzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDMwIDA2OjU5OjMyIDIwMTIgLTA0MDAKKworICAgIEZpeCBhdXRvY29uZiBtYWNyb3MKKworY29tbWl0IDcwMDg0ZTcwZGRiMTNiMjlkZDA1Yzc1MWIxOTA0ZGUyMDZiYmU3OTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBPY3QgMTIgMjM6NTU6MDYgMjAxMiAtMDQwMAorCisgICAgVXBkYXRlIFRpbGUqIHBvcnQgaW5mbworCitjb21taXQgOWMwMGEzZjY3NDJkNjE0MDRiMzEyNjhjYzc3M2U3MTMwZmY0MzMzMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIE9jdCAxMiAxNjo0NjowNiAyMDEyIC0wNDAwCisKKyAgICBUSUxFLUd4L1RJTEVQcm8gc3VwcG9ydAorCitjb21taXQgMDQ4ZDJmNDFjM2E2NjY0YjRiNjRiZjIxZTgwNDY4NjY2MmRhNDE2MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IE9jdCAxMSAxMDo1NToyNSAyMDEyIC0wNDAwCisKKyAgICBSZWJhc2UKKworY29tbWl0IDZkNmY3MTEwODA2NGY1MDY5ZWRkN2JmNzcxMDU5ZDNiODI2NDAxMzUKK0F1dGhvcjogUmVpbmkgVXJiYW4gPHJ1cmJhbkBjcGFuZWwubmV0PgorRGF0ZTogICBTYXQgSnVsIDcgMTI6NDI6MDAgMjAxMiAtMDUwMAorCisgICAgY3lnd2luL21pbmd3IHNoYXJlZCBsaWJzIG5lZWQgbGlidG9vbCBMREZMQUdTID0gLW5vLXVuZGVmaW5lZAorICAgIAorICAgIG90aGVyd2lzZSBvbmx5IHN0YXRpYyBsaWJzIGFyZSBjcmVhdGVkLgorCitjb21taXQgZDMzMGYxOTI5MmRhOGYzOWE3OGE5ZTJiMGJhMDhkZjgwOTRlM2JjNQorQXV0aG9yOiBOaWNvbGFzIExlbG9uZyA8cm90b2dsdXA+CitEYXRlOiAgIFNhdCBNYXkgNSAwOTozNzowMiAyMDEyIC0wNDAwCisKKyAgICBpT1MgYnVpbGQgZml4ZXMuCisKK2NvbW1pdCAwOWIyM2NmYzFkNmQxNTM2MWVlZTE4ODE4ODUxZmQzY2FjYjI2NTU5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXByIDI3IDA4OjI5OjQ4IDIwMTIgLTA0MDAKKworICAgIFVwZGF0ZSBSRUFETUUgd2l0aCBCbGFja2Zpbi91Q2xpbnV4IHN1cHBvcnQKKworY29tbWl0IDIxM2VkMTVjNzBlNzJkNjY2MTU0YzA4ZTJiNDFkYWUzZjYxZjIwZDMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBcHIgMjcgMDE6MzQ6MTUgMjAxMiAtMDQwMAorCisgICAgQWRkIGJsYWNrZmluIHN1cHBydCBmcm9tIEFsZXhhbmRyZSBLZXVuZWNrZS4KKworY29tbWl0IGZmM2Q3NmZkNDI3MzgyY2U3ZDJiMmVkNTRhY2RkMGJjZTQ3MGNhNGYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBBcHIgMTEgMjM6MTY6NDggMjAxMiAtMDQwMAorCisgICAgMy4wLjExCisKK2NvbW1pdCA3ZTBhNDEyYzRmZDljYmU3N2I0NjdhOWJmODZmNTZhZWE2MjYzMmMzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgQXByIDExIDIyOjQ3OjQ0IDIwMTIgLTA0MDAKKworICAgIFVwZGF0ZSBmaWxlcyB0byBzaGlwCisKK2NvbW1pdCAzOWU2YTU4NjA0MTZmN2JhZDk5MjE0OTgxN2UxZGExYmE3YzQ2MGQ0CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgV2VkIEFwciAxMSAyMjozOTo0NiAyMDEyIC0wNDAwCisKKyAgICBNb3JlIG1hYy9pb3MgYnVpbGQgaW1wcm92ZW1lbnRzCisKK2NvbW1pdCA4NTNjYzcyMmExNmY4ZDEyNTQ1NzNlZjNiYjczYzdiOGYzZDhhMTEwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgQXByIDEwIDA2OjMzOjMzIDIwMTIgLTA0MDAKKworICAgIEZpeCB0eXBvIGZvciBkYXJ3aW4gdGFyZ2V0cworCitjb21taXQgM2Y1MDIzMDY4Y2RhMDdhM2RkNmRhY2JhYTg3NWE1YjVmYzk2ZDRiYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEFwciA2IDIwOjM0OjUxIDIwMTIgLTA0MDAKKworICAgIG1lbmQKKworY29tbWl0IGViYjhlODk0NTY4MWNlMGFmN2E1YzQ3YTk4MDI4N2U4ZWNlODRiODQKK0F1dGhvcjogTWlrZSBMZXdpcyA8bWlrZWxpa2VzcGllQGdtYWlsLmNvbT4KK0RhdGU6ICAgRnJpIEFwciA2IDIwOjAyOjA4IDIwMTIgLTA0MDAKKworICAgIEJ1aWxkIGlPUyBsaWJyYXJ5IHdpdGggeGNvZGUKKworY29tbWl0IGEwOThiNDRmNGM1OTJjMjE5MmZjZGVmNGZhZDYxMDhlYjNmNDMwMWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBcHIgNiAxNzowNDozNSAyMDEyIC0wNDAwCisKKyAgICBSZWFwcGx5IG1pc3NpbmcgdGVzdHN1aXRlIGNoYW5nZXMgZm9yIGFybQorCitjb21taXQgMTBkMWU1MTM5M2YwOGMxNDA0NWRiODU4NDMyMDhmNDRmOWYxZTliYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEFwciA2IDExOjU3OjE0IDIwMTIgLTA0MDAKKworICAgIFVwZGF0ZSB0byByYzQuICBVcGdyYWRlIGF1dG9jb25mIHZlcnNpb24uCisKK2NvbW1pdCA5YmNjODg0Mjc2ZGMwYTgwN2IyNjA1ZTUxMGIxMWIxNzQwZGQ5YWEyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXByIDYgMTE6NTM6MDcgMjAxMiAtMDQwMAorCisgICAgRml4IExpbnV4L3gzMiByZWZlcmVuY2UgaW4gUkVBRE1FCisKK2NvbW1pdCBhMDQ0YTU2YjFjZDJhMDkyNGY1ZWMwZDZiNWE1MDg5ZDE0ZmNkMWExCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXByIDYgMTA6Mzk6MTAgMjAxMiAtMDQwMAorCisgICAgTGludXgveDMyIGxpYnRvb2wgZml4CisKK2NvbW1pdCA1OWJiNjFhMzY2NjFiOTcyZTg0NDM1MzFkM2I3YmM3MzZlMTMxYTRiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXByIDYgMDg6MjY6MTQgMjAxMiAtMDQwMAorCisgICAgVXBkYXRlIGxpYnRvb2wgdmVyc2lvbiwgUkVBRE1FLCB0ZXN0cyBkaXN0cworCitjb21taXQgZjI5ODE0NTRjYmUyNWNmOTQxMWI3MTBmNDZjNWY1NTUyMDAzYTEyMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA1IDE1OjQ1OjE5IDIwMTIgLTA0MDAKKworICAgIFJldmVydCBkZWJ1ZyBjb2RlIGNoYW5nZXMKKworY29tbWl0IDM5ZGNjZGRiNjA2ZjZmZGI4ZGNiMTc3ZDQxNmU4ODQwNDFkYTZlMzAKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBUaHUgQXByIDUgMTI6MzI6NDEgMjAxMiAtMDQwMAorCisgICAgRml4IGJ1aWxkaW5nIHdpdGggQ2xhbmcgZm9yIERhcndpbiAoT1MgWCAxMC42KyBhbmQgaU9TCisgICAgIDQuMCspCisKK2NvbW1pdCAzYWZhYTlhMzRhODFhMzA1MjI3YWU4Y2Y0ZjEyYjlkMDQ4NGQwNTVlCitBdXRob3I6IFBldGVyIFJvc2luIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgQXByIDMgMDc6NDA6MzEgMjAxMiAtMDQwMAorCisgICAgRml4IHJldHVybl91Yy5jIHRlc3QgY2FzZSBvbiB3aW5kb3dzLgorCitjb21taXQgNjVmNDBjMzVhMjg3M2Q4MzI4MzU5ZWM0NTEyYmQwNzM2ZGJlMzJjNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEFwciAzIDA3OjM1OjU5IDIwMTIgLTA0MDAKKworICAgIFJlcGFpciBwcGMgYnVpbGQgcmVncmVzc2lvbi4KKworY29tbWl0IDBhMWFiMTJhOGQxNWNhYTg5NDExNmE4MjI0OTU1MWYyM2VmNjU2MTIKK0F1dGhvcjogUGV0ZXIgUm9zaW4gPHBlZGFAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXIgMzAgMDg6MTQ6MDggMjAxMiAtMDQwMAorCisgICAgVmFyaW91cyBNU1ZDLXJlbGF0ZWQgY2hhbmdlcy4KKworY29tbWl0IGUxNTM5MjY2ZTZjNmRkZTNjOTk4MzIzMjM1ODZmMzNmOTc3ZDFkYzAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBNYXIgMzAgMDA6NDA6MTggMjAxMiAtMDQwMAorCisgICAgQVJNIFZGUCBmaXggZm9yIG9sZCB0b29sY2hhaW5zCisKK2NvbW1pdCA3YzVlNjBiNWY0N2Q3MjUwMzZhNzIxNjJmMTM2MjcyYmM0MDdlM2ExCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgTWFyIDI5IDA4OjQ4OjIyIDIwMTIgLTA0MDAKKworICAgIFJlYmFzZSBvbiBmaXhlZCBHQ0Mgc291cmNlcworCitjb21taXQgZTcyZWQ1ZWVhYTljZmIwZmRjODZmNmIzNDIyNzM0MTc3YjY1OWY5NgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIE1hciAyMSAwOTo1MjoyOCAyMDEyIC0wNDAwCisKKyAgICBGaXggdmFyYXJnIGZsb2F0IHRlc3QKKworY29tbWl0IGJkNzhjOWMzMzExMjQ0ZGQ1Zjg3N2M5MTViMGRmZjkxNjIxZGQyNTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBNYXIgMjEgMDg6MDk6MzAgMjAxMiAtMDQwMAorCisgICAgTW9yZSBjeWd3aW4gZml4ZXMKKworY29tbWl0IDg0ZDMyNTNmODZkYWQ2YjRmMjYxMjMxOTM1Njc1ZDM1ZmQ5NjRiMDUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTkgMjM6MDc6MzUgMjAxMiAtMDQwMAorCisgICAgUmViYXNlIHBvc3QgR0NDIG1lcmdlCisKK2NvbW1pdCA5NjRjNWI5M2Y4MGRjYWFjZjczMDU2YjdkMTVhNGQyYjRiN2EyMTdjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDMgMTQ6NDY6MjAgMjAxMiAtMDUwMAorCisgICAgYWJpIGNoZWNrIGZpeGVzIGFuZCBMaW51eC94MzIgc3VwcG9ydAorCitjb21taXQgNmMxOTQyMzNhNWY2ZjFkMjc0NjY5YWZjNTkyNGE5ZTFmNjlkNDg3NgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAzIDE0OjE3OjU0IDIwMTIgLTA1MDAKKworICAgIEFkZCAtbm8tdW5kZWZpbmVkIGZvciBib3RoIDMyLSBhbmQgNjQtYml0IHg4NgorICAgIHdpbmRvd3MtbGlrZSBob3N0cy4KKworY29tbWl0IDgzNjBiZjFjZDBhYmE4ZGI1NTgyMjY2ZGE3MDQ2N2RlN2U4OWE1N2EKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgMjMgMDc6MDE6MTMgMjAxMiAtMDUwMAorCisgICAgRW5zdXJlIHRoYXQgdXNlcnMgZG9uJ3QgaW5jbHVkZSBmZml0YXJnZXQuaCBkaXJlY3RseQorCitjb21taXQgZDU3OGI4OTYxOWNmM2QyYmFmZjAyN2IyMDM2MTlkYzMwN2ZjMTJlMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiAxNSAwMDoxODoxOCAyMDEyIC0wNTAwCisKKyAgICBGaXggQUJJIGNoZWNrIHJlZ3Jlc3Npb24KKworY29tbWl0IGRlZTIwZjhlNDVjNDg2ZjUwMThmMzFlMDliYjM2Mjk5MmFhNDk4YzMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMTAgMTM6MDY6NDYgMjAxMiAtMDUwMAorCisgICAgUmViYXNlZCBmcm9tIGdjYwogCi0yMDA3LTA4LTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorY29tbWl0IDQxMzBlMTk3MmQwMDExNDNlNWU5ZjNjNmI2NWYyYTZmOTUyNDE2OWUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMyAxMzoxODoyNyAyMDEyIC0wNjAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGZmaV90eXBlX215bG9uZyk6IFJlbW92ZSBkZWZpbml0aW9uLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyAobWFpbik6IFVzZSBjb3JyZWN0IHR5cGUKLQlzcGVjaWZpZXJzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwyLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jIChtYWluKTogRGl0dG8uCisgICAgUmVmcmVzaCBhdXRvY29uZi1hcmNoaXZlIG00IHNjcmlwdHMKIAotMjAwNy0wOC0wNyAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgMWZmOWM2MDRiYjIxNGI1YTMwNTA2NGFmMTA0OTU3N2VmNzgzNzMwYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiAxIDE2OjM0OjMwIDIwMTIgLTA2MDAKIAotCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogRml4IHR5cG8gaW4gcHJldmlvdXMKLQljaGVja2luLgorICAgIFJlYmFzZSBmcm9tIEdDQwogCi0yMDA3LTA4LTA2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCAyMTEwNjBlYjhmNzE0YWYwZTkzNTQzMGVmYTZiYjQ1ZThlM2ZmYzVkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDE0OjI0OjAxIDIwMTIgLTA1MDAKIAotCVBSIHRlc3RzdWl0ZS8zMjg0MwotCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogSGFuZGxlIEZGSV9UWVBFX1VJTlQ4LAotCUZGSV9UWVBFX1NJTlQ4LCBGRklfVFlQRV9VSU5UMTYsIEZGSV9UWVBFX1NJTlQxNiwgRkZJX1RZUEVfVUlOVDMyLAotCUZGSV9UWVBFX1NJTlQzMi4KKyAgICBBbHBoYSBmaXgKIAotMjAwNy0wOC0wMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCA3OGQ5YzYzOGJhMGRlNmVkZmJjNjAzZmQ2NWQxOWM2NTYyNjYzMjQ4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDE0OjE3OjI0IDIwMTIgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jIChtYWluKTogRGVmaW5lIHJldHVybiB0eXBlIGFzCi0JZmZpX2FyZy4gIFVzZSBwcm9wZXIgcHJpbnRmIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorICAgIG1lbmQKIAotMjAwNy0wNy0zMCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgYWZhZjMzODE2MDRiZDgxODAzZDhhNWYzYmY0ZDQ2MjI5OWYxYWFjMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxNDoxNzoxMyAyMDEyIC0wNTAwCiAKLQlQUiB0ZXN0c3VpdGUvMzI4NDMKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogaW4geDg2IGNhc2UsIGFkZCBjb2RlIGZvcgotCXNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2LgotCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBSZXdyaXRlIHRvOgotCVVzZSBhIGp1bXAgdGFibGUuCi0JUmVtb3ZlIGNvZGUgdG8gcG9wIGFyZ3MgZnJvbSB0aGUgc3RhY2sgYWZ0ZXIgY2FsbC4KLQlTcGVjaWFsLWNhc2Ugc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgKG1haW4pOiBSZXZlcnQuCisgICAgbWVuZAogCi0yMDA3LTA3LTI2ICBSaWNoYXJkIEd1ZW50aGVyICA8cmd1ZW50aGVyQHN1c2UuZGU+Citjb21taXQgOWU5YzRhZWI3N2RlNTYwOGQ2MDIxMDlmMjIxMDBjMWMwYzc5ZmFhZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxNDoxMToyMyAyMDEyIC0wNTAwCiAKLQlQUiB0ZXN0c3VpdGUvMzI4NDMKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYyAobWFpbik6IFZlcmlmeSBjYWxsCi0JcmVzdWx0IGFzIHNpZ25lZCBjaGFyLCBub3QgZmZpX2FyZy4KKyAgICBBZGQgQW1pZ2Egc3VwcG9ydAogCi0yMDA3LTA3LTE2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCA4ZWZjMGIxZjQwMjdkNWEzY2JmMjA1ZTU1ZDQyMmQ5NGU2MGYzMjI2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDEzOjQ3OjM4IDIwMTIgLTA1MDAKIAotCSogY29uZmlndXJlLmFjIChpPzg2LSotc29sYXJpczIuMVswLTldKTogU2V0IFRBUkdFVCB0byBYODZfNjQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgVW5saWtlbHkgZml4ZXMKIAotMjAwNy0wNy0xMSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCAxZGY1MTM5OGFlMTgzZGMyMDhiYTQ1OTllZTg2NzI3OGIwNGQxM2QzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDEzOjQzOjU5IDIwMTIgLTA1MDAKIAotCSogc3JjL21pcHMvZmZpLmM6IERvbid0IGluY2x1ZGUgc3lzL2NhY2hlY3RsLmguCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVXNlIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKCkgaW5zdGVhZCBvZgotCWNhY2hlZmx1c2goKS4KKyAgICBtZW5kCiAKLTIwMDctMDUtMTggIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+Citjb21taXQgY2QyMjc3Y2M3OTZiOTZiMTQ5Y2QyODRhZTg1MzI2NTI5ZmU3ZmI5YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxMzo0MzozOCAyMDEyIC0wNTAwCiAKLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQgYWp1c3RlZAotCWZyb20gKGZmaV9wcmVwX2Nsb3N1cmUpOiAuLi4gdGhpcy4KLQkoRkZJX0lOSVRfVFJBTVBPTElORSk6IEFkanVzdC4KKyAgICBtZW5kCiAKLTIwMDUtMTItMzEgIFBoaWwgQmx1bmRlbGwgIDxwYkByZWNpdmEuY29tPgorY29tbWl0IDE2NGU2ZmUwNGIxODk3NDZjOGJkNTgxMGM2ZTNlOTE5NzcwYmI5ZDQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTI6NDE6MDYgMjAxMiAtMDUwMAogCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YsCi0JZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciwgZmZpX3ByZXBfY2xvc3VyZSk6IE5ldywgYWRkIGNsb3N1cmUgc3VwcG9ydC4KLQkqIHNyYy9hcm0vc3lzdi5TKGZmaV9jbG9zdXJlX1NZU1YpOiBMaWtld2lzZS4KLQkqIHNyYy9hcm0vZmZpdGFyZ2V0LmggKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KLQkoRkZJX0NMT1NVUkVTKTogRW5hYmxlIGNsb3N1cmUgc3VwcG9ydC4KKyAgICBtNjhrIGZpeGVzCiAKLTIwMDctMDctMDMgIEFuZHJldyBIYWxleSAgPGFwaEBoZWRnZXMuYmlsbGdhdGxpZmYuY29tPgorY29tbWl0IGMzNjVlZTc1NzdiZWYwMGNiM2MyYzBiNTIyNDE0N2FlYTA0MTM4ZDgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTE6MTM6MTggMjAxMiAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYywKLQl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogRW5hYmxlIGZvciBBUk0uCisgICAgUmVmcmVzaAogCi0yMDA3LTA3LTA1ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+Citjb21taXQgZjIyYzM4YmJkOTNiY2MwYzA0YmYyNmMzZTQxNDU1NmIzMTc3YzM4NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIE5vdiAxOCAxNToxMzo0MSAyMDExIC0wNTAwCiAKLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkLgorICAgIFVwZGF0ZSB2YXJpYWRpYyBwYXRjaAogCi0yMDA3LTA2LTAyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorY29tbWl0IDAzZTllZTMyMWEzYzIwOGY4OGQyNDMyNTg3Y2U0MGIyYmIyNDMwYmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBOb3YgMTggMTU6MTM6MDAgMjAxMSAtMDUwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRml4IGNsc19kb3VibGVfdmEuYyBhbmQgdXBkYXRlIGRvY3MKIAotMjAwNy0wNS0yMyAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+Citjb21taXQgOTVmMzExNTFlYzc5MjgwOWNmYjgwZDM4NTM1MGY5ZjU2ZDk1YWEyNQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAyMzo0NjowNSAyMDExIC0wNTAwCiAKLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgUmVydW4gYXV0b21ha2UKIAotMjAwNy0wNS0xMCAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Citjb21taXQgMTk4ZWQxZWY4NWNmMTgzNDI2MjdmOGQ0NGJjM2YxMmM5OTc1YTQ5ZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAyMzo0NToyMCAyMDExIC0wNTAwCiAKLQkqIHNyYy9tNjhrL2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YsCi0JZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcixmZmlfcHJlcF9jbG9zdXJlKTogTmV3LCBhZGQgY2xvc3VyZSBzdXBwb3J0LgotCSogc3JjL202OGsvc3lzdi5TKGZmaV9jbG9zdXJlX1NZU1YsZmZpX2Nsb3N1cmVfc3RydWN0X1NZU1YpOiBMaWtld2lzZS4KLQkqIHNyYy9tNjhrL2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCi0JKEZGSV9DTE9TVVJFUyk6IEVuYWJsZSBjbG9zdXJlIHN1cHBvcnQuCisgICAgVXBkYXRlIHZlcnNpb24gbnVtYmVyCiAKLTIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorY29tbWl0IDRmMTdlMWYxNDJlODA1YjEzOTU5YmEyNTk0ZWU3MzVlYWU0MzlmNGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTc6MjI6MjQgMjAxMSAtMDUwMAogCi0JKiBjb25maWd1cmUuYWMgKEhBVkVfQVNfQ0ZJX1BTRVVET19PUCk6IE5ldyB0ZXN0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCi0JKiBzcmMvbTY4ay9zeXN2LlMgKENGSV9TVEFSVFBST0MsQ0ZJX0VORFBST0MsCi0JQ0ZJX09GRlNFVCxDRklfREVGX0NGQSk6IE5ldyBtYWNyb3MuCi0JKGZmaV9jYWxsX1NZU1YpOiBBZGQgY2FsbGZyYW1lIGFubm90YXRpb24uCisgICAgRml4IGxhc3QgcGF0Y2gKIAotMjAwNy0wNS0xMCAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Citjb21taXQgZmY5NDU0ZGE0NDg1OTcxNmE1YmQ0ZWFhMzQ0NDk5Mjg4Yzc5Njk0ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNzoxODo1MSAyMDExIC0wNTAwCiAKLQkqIHNyYy9tNjhrL2ZmaS5jIChmZmlfcHJlcF9hcmdzLGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4Ci0JbnVtZXJvdXMgdGVzdCBzdWl0ZSBmYWlsdXJlcy4KLQkqIHNyYy9tNjhrL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlLgorICAgIEFkZCBEYXZpZCBHaWxiZXJ0J3MgdmFyaWFkaWMgZnVuY3Rpb24gY2FsbCBzdXBwb3J0CiAKLTIwMDctMDQtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+Citjb21taXQgZWExNGFlODVlOGY1NGZmMDQ2YjdmYjhhOWNmZTM0OTQ3NTI3MjA0NAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNjozNjo1OSAyMDExIC0wNTAwCiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQnJpbmcgdXAgdG8gZGF0ZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogc3JjL2Zydi9lYWJpLlM6IFJlbW92ZSBSQ1Mga2V5d29yZC4KKyAgICBjbGVhbiB1cAogCi0yMDA3LTA0LTA2ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IDUyODkxZjhhOTNmOWI4ZGU4MDFjY2E0Y2YwNTYzOTQyMmRjOTc3M2UKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTY6MzU6NTUgMjAxMSAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IFRpZHkgdGFyZ2V0IGNhc2UuCi0JKEhBVkVfTE9OR19ET1VCTEUpOiBBbGxvdyB0aGUgdGFyZ2V0IHRvIG92ZXJyaWRlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9mZmkuaC5pbjogRG9uJ3QgZGVmaW5lIGZmaV90eXBlX2ZvbyBpZgotCUxJQkZGSV9ISURFX0JBU0lDX1RZUEVTIGlzIGRlZmluZWQuCi0JKGZmaV90eXBlX2xvbmdkb3VibGUpOiBJZiBub3QgSEFWRV9MT05HX0RPVUJMRSwgZGVmaW5lCi0JdG8gZmZpX3R5cGVfZG91YmxlLgotCSogdHlwZXMuYyAoTElCRkZJX0hJREVfQkFTSUNfVFlQRVMpOiBEZWZpbmUuCi0JKEZGSV9UWVBFREVGLCBmZmlfdHlwZV92b2lkKTogTWFyayB0aGUgZGF0YSBjb25zdC4KLQkoZmZpX3R5cGVfbG9uZ2RvdWJsZSk6IFNwZWNpYWwgY2FzZSBmb3IgQWxwaGEuICBEb24ndCBkZWZpbmUKLQlpZiBsb25nIGRvdWJsZSA9PSBkb3VibGUuCisgICAgQWRkIHBvd2VycGMgc29mdCBmbG9hdCBzdXBwb3J0CiAKLQkqIHNyYy9hbHBoYS9mZmkuYyAoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IEFzc2VydCB1bmlxdWUgdmFsdWUuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGl0IGFzIHRoZSAxMjgtYml0IHR5cGUuCi0JKGZmaV9jYWxsLCBmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTGlrZXdpc2UuICBNYXJrIGhpZGRlbi4KLQkoZmZpX2NhbGxfb3NmLCBmZmlfY2xvc3VyZV9vc2YpOiBNYXJrIGhpZGRlbi4KLQkqIHNyYy9hbHBoYS9mZml0YXJnZXQuaCAoRkZJX0xBU1RfQUJJKTogVGlkeSBkZWZpbml0aW9uLgotCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2FsbF9vc2YsIGZmaV9jbG9zdXJlX29zZik6IE1hcmsgaGlkZGVuLgotCShsb2FkX3RhYmxlKTogSGFuZGxlIDEyOC1iaXQgbG9uZyBkb3VibGUuCitjb21taXQgYzhmMWJkZThlMjU2NmM1YTg3NDc0YjRkMDhhYTkzNGQ2ZDI4ZWU3NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNjoyMTowMiAyMDExIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDQuYzogQWRkIC1taWVlZSBmb3IgYWxwaGEuCisgICAgUmVtb3ZlIGp1bmsgZmlsZQogCi0yMDA3LTA0LTA2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+Citjb21taXQgNmE2ZTdmODYyZjNjYzY3N2UxOTEzMTU4N2NhYTYxOWU3ZjljN2ZmZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNjoyMDo0MiAyMDExIC0wNTAwCiAKLQlQUiBsaWJmZmkvMzE0OTE6Ci0JKiBSRUFETUU6IEZpeGVkIGJ1ZyBpbiBleGFtcGxlLgorICAgIEZpeCBrZnJlZWJzZAogCi0yMDA3LTA0LTAzICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KK2NvbW1pdCBkNTJmYmVkMDVjY2JkZWU5ZWQ4YjljOTExY2JiNGY4NWIwZmYwZjJhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE2OjEzOjQxIDIwMTEgLTA1MDAKIAotCSogc3JjL2Nsb3N1cmVzLmM6IEluY2x1ZGUgc3lzL3N0YXRmcy5oLgotCShfR05VX1NPVVJDRSk6IERlZmluZSBvbiBMaW51eC4KLQkoRkZJX01NQVBfRVhFQ19TRUxJTlVYKTogRGVmaW5lLgotCShzZWxpbnV4X2VuYWJsZWQpOiBOZXcgdmFyaWFibGUuCi0JKHNlbGludXhfZW5hYmxlZF9jaGVjayk6IE5ldyBmdW5jdGlvbi4KLQkoaXNfc2VsaW51eF9lbmFibGVkKTogRGVmaW5lLgotCShkbG1tYXApOiBVc2UgaXQuCisgICAgQWRkIG1pc3NpbmcgQ2hhbmdlTG9nIGVudHJ5CiAKLTIwMDctMDMtMjQgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+Citjb21taXQgMzIyMDUyY2U2NWM0ZmRhYzg1YmVkYzI0NzI2ZmQwZTAwOTRiYTUyMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNjoxMTo0OSAyMDExIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IE1hcmsgYXMgc3RhdGljLgotCVVzZSAndm9sYXRpbGUgZmxvYXQgc3VtJyB0byBjcmVhdGUgc3VtIG9mIGZsb2F0cyB0byBhdm9pZCBmYWxzZQotCW5lZ2F0aXZlIGR1ZSB0byBleGNlc3MgcHJlY2lzaW9uIG9uIGl4ODYgdGFyZ2V0cy4KLQkobWFpbik6IERpdHRvLgorICAgIEZpeCBhcm0gd2luY2UgYWxpZ25tZW50IGlzc3VlCiAKLTIwMDctMDMtMDggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorY29tbWl0IGFmMThkZjJiYzJmNTJkZjgxZTdiNWM2MTliZDg2ZGI4NDg5ZGM4NzMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTU6NTI6MDggMjAxMSAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmx1c2hfaWNhY2hlKTogRml4IGxlZnQtb3ZlciBmcm9tIHByZXZpb3VzCi0JcGF0Y2guCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVtb3ZlIHVubmVlZGVkIGNhc3RzLiAgQWRkIG5lZWRlZCBvbmVzLgorICAgIFJlbW92ZSB1c2Ugb2YgcHBjIHN0cmluZyBpbnN0cnVjdGlvbnMKIAotMjAwNy0wMy0wNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+Citjb21taXQgMjM2YzkzOTEzMjFmODNhZDQwZGFmMDNmNDBjMzVjOWViYzFkYTZiMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAwNzozNzo0MCAyMDExIC0wNTAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9jbG9zdXJlX2FsbG9jLCBmZmlfY2xvc3VyZV9mcmVlKTogTmV3LgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IE5ldy4KLQkoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogTmV3LgotCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IE5ldy4KLQkqIHNyYy9jbG9zdXJlcy5jOiBOZXcgZmlsZS4KLQkqIHNyYy9kbG1hbGxvYy5jIFtGRklfTU1BUF9FWEVDX1dSSVRdIChzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpOgotCVJlcGxhY2Ugc2ZsYWdzIHdpdGggZXhlY19vZmZzZXQuCi0JW0ZGSV9NTUFQX0VYRUNfV1JJVF0gKG1tYXBfZXhlY19vZmZzZXQsIGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0LAotCXN1Yl9zZWdtZW50X2V4ZWNfb2Zmc2V0KTogTmV3IG1hY3Jvcy4KLQkoZ2V0X3NlZ21lbnRfZmxhZ3MsIHNldF9zZWdtZW50X2ZsYWdzLCBjaGVja19zZWdtZW50X21lcmdlKTogTmV3Ci0JbWFjcm9zLgotCShpc19tbWFwcGVkX3NlZ21lbnQsIGlzX2V4dGVybl9zZWdtZW50KTogVXNlIGdldF9zZWdtZW50X2ZsYWdzLgotCShhZGRfc2VnbWVudCwgc3lzX2FsbG9jLCBjcmVhdGVfbXNwYWNlLCBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSwKLQlkZXN0cm95X21zcGFjZSk6IFVzZSBuZXcgbWFjcm9zLgotCShzeXNfYWxsb2MpOiBTaWxlbmNlIHdhcm5pbmcuCi0JKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgc3JjL2Nsb3N1cmVzLmMuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIHNyYy9wcmVwX2NpZiBbRkZJX0NMT1NVUkVTXSAoZmZpX3ByZXBfY2xvc3VyZSk6IEltcGxlbWVudCBpbgotCXRlcm1zIG9mIGZmaV9wcmVwX2Nsb3N1cmVfbG9jLgotCSogc3JjL3Jhd19hcGkuYyAoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQgYWRqdXN0ZWQKLQlmcm9tLi4uCi0JKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuICBSZS1pbXBsZW1lbnQgaW4gdGVybXMgb2YgdGhlCi0JcmVuYW1lZCB2ZXJzaW9uLgotCSogc3JjL2phdmFfcmF3X2FwaSAoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZAotCWFkanVzdGVkIGZyb20uLi4KLQkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSk6IC4uLiB0aGlzLiAgUmUtaW1wbGVtZW50IGluIHRlcm1zIG9mCi0JdGhlIHJlbmFtZWQgdmVyc2lvbi4KLQkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGZyb20KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgotCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9jcmlzL2ZmaS5jOiBMaWtld2lzZS4gIEFkanVzdC4KLQkqIHNyYy9mcnYvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL2lhNjQvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL21pcHMvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KLQkqIHNyYy9zMzkwL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvc2g2NC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvc3BhcmMvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3g4Ni9mZmk2NC5jOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgotCShGRklfSU5JVF9UUkFNUE9MSU5FKTogQWRqdXN0LgotCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhZGp1c3RlZCBmcm9tLi4uCi0JKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGZyb20KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgotCShmbHVzaF9pY2FjaGUpOiBBZGp1c3QuCisgICAgRml4IGRhcndpbjExIGJ1aWxkIHByb2JsZW0KIAotMjAwNy0wMy0wNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+Citjb21taXQgYzQxMWYxNDBmMzA1ZWJiMDBkMzNjOTJiN2NiMjc0MmJjZDI0MWI2YQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAwNzozMjozNiAyMDExIC0wNTAwCiAKLQkqIHNyYy9kbG1hbGxvYy5jOiBOZXcgZmlsZSwgaW1wb3J0ZWQgdmVyc2lvbiAyLjguMyBvZiBEb3VnCi0JTGVhJ3MgbWFsbG9jLgorICAgIEZpeCBheF9lbmFibGVfYnVpbGRkaXIgbWFjcm8gb24gQlNEIHN5c3RlbXMKIAotMjAwNy0wMy0wMSAgQnJvb2tzIE1vc2VzICA8YnJvb2tzLm1vc2VzQGNvZGVzb3VyY2VyeS5jb20+Citjb21taXQgM2Q1NjEwNmIwNzczNWFiZWY2YWU5ZjAzMmU5NGY1NjBhMGVkMmYzMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAwNzoyMDoyNCAyMDExIC0wNTAwCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgZHVtbXkgaW5zdGFsbC1wZGYgdGFyZ2V0LgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUKKyAgICBSZWJhc2UKIAotMjAwNy0wMi0xMyAgQW5kcmVhcyBLcmViYmVsICA8a3JlYmJlbDFAZGUuaWJtLmNvbT4KK2NvbW1pdCA4YzAxOTU0YzUwYmY4ZWYyZTAwYTNkYjE2NjA2MGExYjhmODNhMjBkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgU2VwIDYgMTQ6MjY6MzIgMjAxMSAtMDQwMAogCi0JKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfY2lmX21hY2hkZXAsCi0JZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBBZGQgbG9uZyBkb3VibGUgaGFuZGxpbmcuCisgICAgQnVpbGQgYXNzZW1ibHkgZmlsZXMgd2l0aCBkZWJ1ZyBpbmZvCiAKLTIwMDctMDItMDIgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorY29tbWl0IGZlZDY0NmEyMDc4OTY5ZjRjZTg5YzI5MTA3ZjFlNzJlMDNmNGE5NzcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBTZXAgNiAwOTo1MDoyMCAyMDExIC0wNDAwCiAKLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IE1vdmUgcmVzdG9yZSBvZiByMgotCWltbWVkaWF0ZWx5IGFmdGVyIGJjdHJsIGluc3RydWN0aW9uLgorICAgIFJlZ2VuZXJhdGUgY29uZmlndXJ5IHdpdGggbWlzc2luZyBtNCBtYWNyb3MKIAotMjAwNy0wMS0xOCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+Citjb21taXQgZDc2NDQxY2Y3MTIxNmY4ZjFlNjJlN2VjODUyYTdmNGUyMTM3MWVjOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEF1ZyAyNCAxMDoxNDoyMyAyMDExIC0wNDAwCiAKLQkqIE1ha2VmaWxlLmFtIChhbGwtcmVjdXJzaXZlLCBpbnN0YWxsLXJlY3Vyc2l2ZSwKLQltb3N0bHljbGVhbi1yZWN1cnNpdmUsIGNsZWFuLXJlY3Vyc2l2ZSwgZGlzdGNsZWFuLXJlY3Vyc2l2ZSwKLQltYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSk6IEFkZCBtaXNzaW5nIHRhcmdldHMuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICBVcGRhdGUgbGlzdCBvZiBzdXBwb3J0ZWQgT3BlbkJTRCBzeXN0ZW1zCiAKLTIwMDYtMTItMTQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgZWU2Njk2ZmRmNDc2OGJhNmRkMDM3ZmI2ZGQ5OTQzNWFmYTEzODE2ZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAyMyAxMjozMDoyOSAyMDExIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIFRBUkdFVCBmb3IgeDg2XzY0LSotZGFyd2luKi4KLQkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgcnVsZXMgZm9yIDY0LWJpdCBzb3VyY2VzCi0JZm9yIFg4Nl9EQVJXSU4uCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBTZXQgdHJhbXBvbGluZSBzaXplIGZvciB4ODZfNjQtKi1kYXJ3aW4qLgotCSogc3JjL3g4Ni9kYXJ3aW42NC5TOiBOZXcgZmlsZSBmb3IgeDg2XzY0LSotZGFyd2luKiBzdXBwb3J0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2M6IE5ldyB0ZXN0IGNhc2UgZm9yCi0JZmZpX2NhbGwgb25seS4KKyAgICAzLjAuMTEtcmMxLiBzb25hbWUgYnVtcC4KIAotMjAwNi0xMi0xMyAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IGM2MjY1YzM2YTkxZWFiODE3NWQwZTcyZGI4NGQ4MjI1NDE4ZjIzNzkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMjMgMTA6MzE6MzMgMjAxMSAtMDQwMAogCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlIHdpdGggYWNsb2NhbCAtSSAuLiBhcyB3cml0dGVuIGluIHRoZQotCU1ha2VmaWxlLmFtLgorICAgIFZlcnNpb24gMy4wLjEwCiAKLTIwMDYtMTAtMzEgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorY29tbWl0IGNjNWU0MWJmMzJkMThhMTRkYmRkNjUzZDUyZWFjZGJkYzkzNGMzOTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBBdWcgMjIgMTY6MzQ6MjQgMjAxMSAtMDQwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGRhcndpbl9hZGp1c3RfYWdncmVnYXRlX3NpemVzKTogTmV3LgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENhbGwgZGFyd2luX2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMgZm9yCi0JRGFyd2luLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IFJlbW92ZSBEYXJ3aW4gWEZBSUwuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogUmVtb3ZlIERhcndpbiBYRkFJTC4KKyAgICBGaXggdXNlIG9mIGF1dG9jb25mIG1hY3JvcwogCi0yMDA2LTEwLTEwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgotCSAgICBTYW5kcm8gVG9sYWluaSAgPHRvbGFpbmlAbGliZXJvLml0PgorY29tbWl0IDA0OWQ4Mzg2ZmY1MjM5OWU2OWE1MzBiNTViOWZlZWRjOGEyNTg5ZDIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBBdWcgMjIgMTQ6NTA6MTAgMjAxMSAtMDQwMAogCi0JKiBjb25maWd1cmUuYWMgW2kqODYtKi1kYXJ3aW4qXTogU2V0IFg4Nl9EQVJXSU4gc3ltYm9sIGFuZAotCWNvbmRpdGlvbmFsLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KLQkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpIFtYODZfREFSV0lOXTogTmV3IGNhc2UuCi0JKEVYVFJBX0RJU1QpOiBBZGQgc3JjL3g4Ni9kYXJ3aW4uUy4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKyAgICBNYW55IG5ldyBwYXRjaGVzCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKSBbWDg2X0RBUldJTl06IFRyZWF0IGxpa2UKLQlYODZfV0lOMzIsIGFuZCBhZGRpdGlvbmFsbHkgYWxpZ24gc3RhY2sgdG8gMTYgYnl0ZXMuCi0JKiBzcmMveDg2L2Rhcndpbi5TOiBOZXcsIGJhc2VkIG9uIHN5c3YuUy4KLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpIFtYODZfREFSV0lOXTogQWxpZ24gPiA4LWJ5dGUgc3RydWN0cy4KK2NvbW1pdCAzYjdlZmE0ZTc0ZjBkY2ViZjcwYjQ0NzM5MTk4N2FlZGQzNDczMzA2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gQXVnIDE1IDEzOjI1OjEzIDIwMTEgLTA0MDAKIAotMjAwNi0wOS0xMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKyAgICBSZXZlcnQgcmVtb3ZlLWRlYnVnLWNvZGUgcGF0Y2ggdGVtcG9yYXJpbHkgKGZvciBBUk0gRmVkb3JhIHJlbGVhc2UpCiAKLQlQUiBsaWJmZmkvMjM5MzUKLQkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IEluc3RhbGwgYm90aCBmZmkuaCBhbmQgZmZpdGFyZ2V0LmggaW4KLQkkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X2FsaWFzKS8kKGdjY192ZXJzaW9uKS9pbmNsdWRlLgotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQgZm9yIGF1dG9tYWtlIDEuOS42LgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorY29tbWl0IGQ5OTJhYzU0YTJhOWU3ZTA2NGZmZWJjYjkxZTA1ZTdjYjg2MTg1YzcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgSnVsIDI5IDE3OjMyOjUzIDIwMTEgLTA0MDAKIAotMjAwNi0wOC0xNyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIFJlZnJlc2ggZnJvbSBHQ0MKIAotCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKHN0cnVjdCk6IFJldmVydCBhY2NpZGVudGFsIGNvbW1pdC4KK2NvbW1pdCAyZDNmYjM2NDIwZTA5MzA0MjIwZWU2YzA2NTJiYWU1ZWNjZGI5NjVkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgTWFyIDMwIDE2OjU0OjQyIDIwMTEgLTA0MDAKIAotMjAwNi0wOC0xNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEZpeCBkYXJ3aW4gRUgKIAotCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBMaWtld2lzZS4KK2NvbW1pdCAzMGZmMjhlMWQ4Y2Q5ZWQ1MzE5ZjFmYmU5YzdjY2NhY2M4MTYxZmIzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gRmViIDI4IDE1OjM2OjIzIDIwMTEgLTA1MDAKIAotMjAwNi0wNy0yNSAgVG9yc3RlbiBTY2hvZW5mZWxkICA8a2FmZmVldGlzY2hAZ214LmRlPgorICAgIEZpeCBwZXJtaXNzaW9ucwogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfdHlwZV91bG9uZywgZmZpX3R5cGVfc2xvbmcpOiBEZWZpbmUgY29ycmVjdGx5Ci0JZm9yIDMyLWJpdCBhcmNoaXRlY3R1cmVzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jOiBOZXcgdGVzdCBjYXNlLgorY29tbWl0IDA5ZjhmMzEwZjRmNTNhMjQyODk2ODJkM2QyOGY0Mzk5ZDdiYWZjM2IKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBGZWIgMjggMTU6MzY6MDcgMjAxMSAtMDUwMAogCi0yMDA2LTA3LTE5ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorICAgIE1vcmUgQUlYIGZpeGVzLiByYzkuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHMsCi0JeGZhaWwgcmVtYWlucyBmb3IgbWlwczY0LgorY29tbWl0IDUzZDdiMTY1NjQyYzIyMGFhNTE2NmJhMzUwYjQ5MDgwMmYzNTliNTQKK01lcmdlOiAxOGRkODVkIDMwMDBkYzIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBGZWIgMjggMTU6MjM6MzEgMjAxMSAtMDUwMAogCi0yMDA2LTA1LTIzICBDYXJsb3MgTydEb25lbGwgIDxjYXJsb3NAY29kZXNvdXJjZXJ5LmNvbT4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgaHR0cHM6Ly9naXRodWIuY29tL2xhbmRvbmYvbGliZmZpLWlvcwogCi0JKiBNYWtlZmlsZS5hbTogQWRkIGluc3RhbGwtaHRtbCB0YXJnZXQuIEFkZCBpbnN0YWxsLWh0bWwgdG8gLlBIT05ZCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorY29tbWl0IDE4ZGQ4NWQ2Y2I5ZjNmM2VlYTJhM2I3MGViNGUxNTAwNDU5MDVjNTUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjUgMTY6MjM6MDQgMjAxMSAtMDUwMAogCi0yMDA2LTA1LTE4ICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorICAgIHJjOC4gZml4IGxhc3QgcGF0Y2guCiAKLQkqIHBhL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3BhMzIpOiBMb2FkIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyBmcm9tCi0Jc3RhY2sgc2xvdC4KK2NvbW1pdCA3NGVlNmVhOGI0MmU2MGQ0NGEzYWU4OTM4YjFlNDJhMzhjMWU2NmI0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI1IDE1OjUyOjE0IDIwMTEgLTA1MDAKIAotMjAwNi0wNC0yMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIHJjNy4gIE1vcmUgQUlYIGZpeGVzLgogCi0JKiBSRUFETUU6IFJlbW92ZSBub3RpY2UgYWJvdXQgJ0NyYXp5IENvbW1lbnRzJy4KLQkqIHNyYy9kZWJ1Zy5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLiBDbGVhbnVwIHdoaXRlIHNwYWNlcy4KLQkqIHNyYy9qYXZhX3Jhd19hcGkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcHJlcF9jaWYuYzogTGlrZXdpc2UuCi0JKiBzcmMvcmF3X2FwaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9mZml0ZXN0LmM6IERlbGV0ZS4gTm8gbG9uZ2VyIG5lZWRlZCwgYWxsIHRlc3QgY2FzZXMgbWlncmF0ZWQKLQl0byB0aGUgdGVzdHN1aXRlLgotCSogc3JjL2FybS9mZmkuYzogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4KLQkqIHNyYy9tMzJyL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wYS9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgotCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KK2NvbW1pdCAyNTQxNjc5ZGJkM2RiMDAxNDg5MGY0MjE5MmRiZjgwMDhhYjkyM2ZhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI1IDE1OjA5OjEzIDIwMTEgLTA1MDAKIAotMjAwNi0wNC0xMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEZpeCBwcGMzMiBidWcKIAotCSogc3JjL3BhL2hwdXgzMi5TOiBDb3JyZWN0IHVud2luZCBvZmZzZXQgY2FsY3VsYXRpb24gZm9yCi0JZmZpX2Nsb3N1cmVfcGEzMi4KLQkqIHNyYy9wYS9saW51eC5TOiBMaWtld2lzZS4KK2NvbW1pdCBjYmIwNjJjYzM1YzUxODAwNGYxYWI0NWM4NDdmOGVjNGY2NjA2OWFkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDE3IDIwOjM5OjIxIDIwMTEgLTA1MDAKIAotMjAwNi0wNC0xMiAgSmFtZXMgRSBXaWxzb24gIDx3aWxzb25Ac3BlY2lmaXguY29tPgorICAgIEFub3RoZXIgbm9uLUdDQyBjb25maWd1cnkgZml4CiAKLQlQUiBsaWJnY2ovMjY0ODMKLQkqIHNyYy9pYTY0L2ZmaS5jIChzdGZfc3BpbGwsIGxkZl9maWxsKTogUmV3cml0ZSBhcyBtYWNyb3MuCi0JKGhmYV90eXBlX2xvYWQpOiBDYWxsIHN0Zl9zcGlsbC4KLQkoaGZhX3R5cGVfc3RvcmUpOiBDYWxsIGxkZl9maWxsLgotCShmZmlfY2FsbCk6IEFkanVzdCBjYWxscyB0byBhYm92ZSByb3V0aW5lcy4gIEFkZCBsb2NhbCB0ZW1wcyBmb3IKLQltYWNybyByZXN1bHQuCitjb21taXQgOGNmODg3ODQyNWU5OTcxODY2ZmE2YjI3YTNlNDkxNDcyOWFkMzk2MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiAxNSAxNToxOTo0OSAyMDExIC0wNTAwCiAKLTIwMDYtMDQtMTAgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorICAgIEZpeCBheF9jY19tYXhvcHQubTQKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IFJlY29nbml6ZSBtdWx0aWxpYgotCWRpcmVjdG9yeSBuYW1lcyBjb250YWluaW5nIHVuZGVyc2NvcmVzLgorY29tbWl0IDI0YjcyMDcwYzA5MzdmOTAwMDc0NGM3N2E2MzZmMDdlMDQ3ODZiNmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBGZWIgMTQgMTU6MzA6NTcgMjAxMSAtMDUwMAogCi0yMDA2LTA0LTA3ICBKYW1lcyBFIFdpbHNvbiAgPHdpbHNvbkBzcGVjaWZpeC5jb20+CisgICAgRml4IHdhcm5pbmcgYW5kIG1zdmNjIHBhdGNoZXMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jOiBOZXcgdGVzdGNhc2UuCitjb21taXQgZDcyYzQ5ZTU1NmE4YzUxNmU5N2Y2NzIyZDFiZTJmMTIwOWMyMTIwNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIEZlYiAxMyAxMTo0MTowNSAyMDExIC0wNTAwCiAKLTIwMDYtMDQtMDUgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+Ci0JICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBBZGQgbWlzc2luZyBtc3ZjYy5zaAogCi0JKiBNYWtlZmlsZS5hbTogQWRkIFBBX0hQVVggcG9ydC4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogY29uZmlndXJlLmFjOiBBZGQgUEFfSFBVWCBydWxlcy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIHNyYy9wYS9mZml0YXJnZXQuaDogUmVuYW1lIGxpbnV4IHRhcmdldCB0byBQQV9MSU5VWC4KLQlBZGQgUEFfSFBVWCBhbmQgUEE2NF9IUFVYLgotCVJlbmFtZSBGRklfTElOVVggQUJJIHRvIEZGSV9QQTMyIEFCSS4KLQkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IERlZmluZSBmb3IgMzItYml0IEhQLVVYIHRhcmdldHMuCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIpOiBEZWZpbmUuCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDQpOiBMaWtld2lzZS4KLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUOCk6IExpa2V3aXNlLgotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QzKTogUmVkZWZpbmUuCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDUpOiBMaWtld2lzZS4KLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUNik6IExpa2V3aXNlLgotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q3KTogTGlrZXdpc2UuCi0JKiBzcmMvcGEvZmZpLmMgKFJPVU5EX0RPV04pOiBEZWxldGUuCi0JKGZsZHcsIGZzdHcsIGZsZGQsIGZzdGQpOiBVc2UgJ19fYXNtX18nLgotCShmZmlfc3RydWN0X3R5cGUpOiBBZGQgc3VwcG9ydCBmb3IgRkZJX1RZUEVfU01BTExfU1RSVUNUMiwKLQlGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0IGFuZCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4LgotCShmZmlfcHJlcF9hcmdzX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9wcmVwX2FyZ3NfcGEzMi4gVXBkYXRlIGNvbW1lbnQuCi0JU2ltcGxpZnkgaW5jcmVtZW50aW5nIG9mIHN0YWNrIHNsb3QgdmFyaWFibGUuIENoYW5nZSB0eXBlIG9mIGxvY2FsCi0JJ24nIHRvIHVuc2lnbmVkIGludC4KLQkoZmZpX3NpemVfc3RhY2tfTElOVVgpOiBSZW5hbWUgdG8gZmZpX3NpemVfc3RhY2tfcGEzMi4gSGFuZGxlIGxvbmcKLQlkb3VibGUgb24gUEFfSFBVWC4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KLQkoZmZpX2NhbGwpOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfaW5uZXJfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMi4gQ2hhbmdlCi0JcmV0dXJuIHR5cGUgdG8gZmZpX3N0YXR1cy4gU2ltcGxpZnkgaW5jcmVtZW50aW5nIG9mIHN0YWNrIHNsb3QKLQl2YXJpYWJsZS4gT25seSBjb3B5IGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50IHJlZ2lzdGVycyB3aGVuIFBBX0xJTlVYCi0JaXMgdHJ1ZS4gUmVmb3JtYXQgZGVidWcgc3RhdGVtZW50LgotCUFkZCBzdXBwb3J0IGZvciBGRklfVFlQRV9TTUFMTF9TVFJVQ1QyLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0IGFuZAotCUZGSV9UWVBFX1NNQUxMX1NUUlVDVDguCi0JKGZmaV9jbG9zdXJlX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX3BhMzIuIEFkZCAnZXh0ZXJuJyB0bwotCWRlY2xhcmF0aW9uLgotCShmZmlfcHJlcF9jbG9zdXJlKTogTWFrZSBsaW51eCB0cmFtcG9saW5lIGNvbmRpdGlvbmFsIG9uIFBBX0xJTlVYLgotCUFkZCBub3BzIHRvIGNhY2hlIGZsdXNoLiAgQWRkIHRyYW1wb2xpbmUgZm9yIFBBX0hQVVguCi0JKiBzcmMvcGEvaHB1eDMyLlM6IE5ldyBmaWxlLgotCSogc3JjL3BhL2xpbnV4LlMgKGZmaV9jYWxsX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jYWxsX3BhMzIuIFJlbmFtZQotCWZmaV9wcmVwX2FyZ3NfTElOVVggdG8gZmZpX3ByZXBfYXJnc19wYTMyLgotCUxvY2FsaXplIGxhYmVscy4gQWRkIHN1cHBvcnQgZm9yIDIsIDQgYW5kIDgtYnl0ZSBzbWFsbCBzdHJ1Y3RzLiBIYW5kbGUKLQl1bmFsaWduZWQgZGVzdGluYXRpb25zIGluIDMsIDUsIDYgYW5kIDctYnl0ZSBzbWFsbCBzdHJ1Y3RzLiBPcmRlcgotCWFyZ3VtZW50IHR5cGUgY2hlY2tzIHNvIHRoYXQgY29tbW9uIGFyZ3VtZW50IHR5cGVzIGFwcGVhciBmaXJzdC4KLQkoZmZpX2Nsb3N1cmVfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2Nsb3N1cmVfcGEzMi4gUmVuYW1lCi0JZmZpX2Nsb3N1cmVfaW5uZXJfTElOVVggdG8gZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMi4KK2NvbW1pdCAzMDAwZGMyMzdmNjAxN2E3NDQ1ZDg0MDQwOTdhNGY0NmI3M2ZkZDI5CitNZXJnZTogNTVlNGE1YSAxZmJmOWRjCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBGZWIgMTMgMDg6NTU6NTMgMjAxMSAtMDUwMAogCi0yMDA2LTAzLTI0ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIE1lcmdlIHJlbW90ZSBicmFuY2ggJ3Vwc3RyZWFtL21hc3RlcicKIAotCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGVudW0gZmZpX2FiaSk6IEFkZCBGRklfTElOVVguICBEZWZhdWx0Ci0JZm9yIDMyLWJpdCB1c2luZyBJQk0gZXh0ZW5kZWQgZG91YmxlIGZvcm1hdC4gIEZpeCBGRklfTEFTVF9BQkkuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogSGFuZGxlIGxpbnV4IHZhcmlhbnQgb2YKLQlGRklfVFlQRV9MT05HRE9VQkxFLgotCShmZmlfcHJlcF9hcmdzNjQpOiBBc3NlcnQgdXNpbmcgSUJNIGV4dGVuZGVkIGRvdWJsZS4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEb24ndCBtdW5nZSBGRklfVFlQRV9MT05HRE9VQkxFIHR5cGUuCi0JSGFuZGxlIEZGSV9MSU5VWCBGRklfVFlQRV9MT05HRE9VQkxFIHJldHVybiBhbmQgYXJncy4KLQkoZmZpX2NhbGwpOiBIYW5kbGUgRkZJX0xJTlVYLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IE5vbiBGRklfTElOVVggbG9uZyBkb3VibGUgcmV0dXJuIG5lZWRzCi0JZ3ByMyByZXR1cm4gcG9pbnRlciBhcyBmb3Igc3RydWN0IHJldHVybi4gIEhhbmRsZSBGRklfTElOVVgKLQlGRklfVFlQRV9MT05HRE9VQkxFIHJldHVybiBhbmQgYXJncy4gIERvbid0IGluY3JlbWVudCAibmYiCi0JdW5uZWNlc3NhcmlseS4KLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBMb2FkIGJvdGggZjEgYW5kIGYyCi0JZm9yIEZGSV9UWVBFX0xPTkdET1VCTEUuICBNb3ZlIGVwaWxvZ3VlIGluc25zIGludG8gY2FzZSB0YWJsZS4KLQlEb24ndCB1c2UgcjYgYXMgcG9pbnRlciB0byByZXN1bHRzLCBpbnN0ZWFkIHVzZSBzcCBvZmZzZXQuICBEb24ndAotCW1ha2UgYSBzcGVjaWFsIGNhbGwgdG8gbG9hZCBsciB3aXRoIGNhc2UgdGFibGUgYWRkcmVzcywgaW5zdGVhZAotCXVzZSBvZmZzZXQgZnJvbSBwcmV2aW91cyBjYWxsLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogU2F2ZSBsb25nIGRvdWJsZSByZXR1cm4uCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBTaW1wbGlmeSBsb25nIGRvdWJsZQotCXJldHVybi4KK2NvbW1pdCAxZmJmOWRjNDRmZWVhNTY0ZTg0YWQ3NDA2ZDE3YzVkNTkwNmNlMGUwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gRmViIDEzIDA4OjA2OjM5IDIwMTEgLTA1MDAKIAotMjAwNi0wMy0xNSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgRml4IGJhZF9hYmkgdGVzdC4gcmM1LgogCi0JKiBzcmMvc2g2NC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgZmxvYXQgYXJndW1lbnRzCi0JcGFzc2VkIHdpdGggRlAgcmVnaXN0ZXJzIGNvcnJlY3RseS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KLQkqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCitjb21taXQgOTBhZjE1ZWY1YzE2MTRiNzYzNzBjNGQxMzk1NDU4NmZhYmY5ZThlMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMjoyOTozNiAyMDExIC0wNTAwCiAKLTIwMDYtMDMtMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBpT1MgZml4ZXMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgKGNsb3N1cmVfdGVzdF9mbik6IE1hcmsgY2lmLAotCWFyZ3MgYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkoY2xvc3VyZV90ZXN0X2ZuMSk6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKG1haW4pOiBSZW1vdmUgdW51c2VkIHJlcy4KK2NvbW1pdCA1NWU0YTVhYTE1Njg1NThhMDRhYTQwZjE2ZmMwMjJlNDU5YWY1M2UzCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTI6MTM6NDYgMjAxMSAtMDUwMAogCi0yMDA2LTAyLTI4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIGEgZnVsbCBhcm12Ni9hcm12Ny9pMzg2IHVuaXZlcnNhbCBpT1MgbGlicmFyeQogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IEFkanVzdCBGU0YgYWRkcmVzcy4gQWRkIHRlc3QgcnVucyBmb3IKLQktTzIsIC1PMywgLU9zIGFuZCB0aGUgd2FybmluZyBmbGFncyAtVyAtV2FsbC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgYW4gX19VTlVTRURfXyBtYWNybyB0byBtYXJrCi0JdW51c2VkIHBhcmFtZXRlciB1bnVzZWQgZm9yIGdjYyBvciBlbHNlIGRvIG5vdGhpbmcuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgKGNsc19zdHJ1Y3RfMTJieXRlX2duKTogTWFyayBjaWYKLQlhbmQgdXNlcmRhdGEgdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyAoY2xzX3N0cnVjdF8xNmJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMgKGNsc19zdHJ1Y3RfMThieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jIChjbHNfc3RydWN0XzE5Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMgKGNsc19zdHJ1Y3RfMV8xYnl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyAoY2xzX3N0cnVjdF8yMGJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIChjbHNfc3RydWN0XzIwYnl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyAoY2xzX3N0cnVjdF8yNGJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyAoY2xzX3N0cnVjdF8yYnl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMgKGNsc19zdHJ1Y3RfM18xYnl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyAoY2xzX3N0cnVjdF8zYnl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYyAoY2xzX3N0cnVjdF8zYnl0ZV9nbjEpOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jIChjbHNfc3RydWN0XzRfMWJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYyAoY2xzX3N0cnVjdF80Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jIChjbHNfc3RydWN0XzVieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMgKGNsc19zdHJ1Y3RfNWJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgKGNsc19zdHJ1Y3RfNjRieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfNmJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYyAoY2xzX3N0cnVjdF82Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIChjbHNfc3RydWN0XzdieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMgKGNsc19zdHJ1Y3RfN2J5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyAoY2xzX3N0cnVjdF84Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYyAoY2xzX3N0cnVjdF85Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyAoY2xzX3N0cnVjdF85Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZm4pOiBDYXN0Ci0Jdm9pZCogdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZy4KLQkobWFpbik6IExpa2V3aXNlLgotCShjbHNfc3RydWN0X2FsaWduX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jIChjbHNfc3RydWN0X2FsaWduX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jIChjbHNfcmV0X2RvdWJsZV9mbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jIChjbHNfcmV0X2Zsb2F0X2ZuKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAotCWRhdGEgdW51c2VkLgotCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAotCWRhdGEgdW51c2VkLgotCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZgotCWFuZCBkYXRhIHVudXNlZC4KLQkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAotCWRhdGEgdW51c2VkLgotCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAotCWRhdGEgdW51c2VkLgotCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZgotCWFuZCBkYXRhIHVudXNlZC4KLQkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMgKGNsc19yZXRfc2NoYXJfZm4pOiBNYXJrIGNpZiBhbmQKLQl1c2VyZGF0YSB1bnVzZWQuCi0JKGNsc19yZXRfc2NoYXJfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyAoY2xzX3JldF9zaW50X2ZuKTogTWFyayBjaWYgYW5kCi0JdXNlcmRhdGEgdW51c2VkLgotCShjbHNfcmV0X3NpbnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIChjbHNfcmV0X3NzaG9ydF9mbik6IE1hcmsgY2lmIGFuZAotCXVzZXJkYXRhIHVudXNlZC4KLQkoY2xzX3JldF9zc2hvcnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMgKGNsc19yZXRfdWNoYXJfZm4pOiAgTWFyayBjaWYgYW5kCi0JdXNlcmRhdGEgdW51c2VkLgotCShjbHNfcmV0X3VjaGFyX2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKGNsc19yZXRfdWludF9mbik6IE1hcmsgY2lmIGFuZAotCXVzZXJkYXRhIHVudXNlZC4KLQkoY2xzX3JldF91aW50X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYyAoY2xzX3JldF91bG9uZ2xvbmdfZm4pOiBNYXJrIGNpZgotCWFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jIChjbHNfcmV0X3VzaG9ydF9mbik6IE1hcmsgY2lmIGFuZAotCXVzZXJkYXRhIHVudXNlZC4KLQkoY2xzX3JldF91c2hvcnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYyAoZmxvYXRpbmcpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jIChtYWluKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpLgotCUNsZWFudXAgd2hpdGUgc3BhY2VzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jIChjaGVja2luZyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgKGNsc19zdHJ1Y3RfY29tYmluZWRfZ24pOiBNYXJrCi0JY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyAoY2xzX3N0cnVjdF9jb21iaW5lZF9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgKEJfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIChCX2ZuKTogQWRqdXN0IHByaW50ZgotCWZvcm1hdHRlcnMgdG8gc2lsZW5jZSBnY2MuCi0JKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKLQl1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTWVudGlvbiByZWxhdGVkIFBSLgotCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCi0JdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IE1lbnRpb24gcmVsYXRlZCBQUi4KLQkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQotCXVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jIChCX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyAoQl9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMgKHN0dWIpOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyAobWFpbik6IENhc3QgdGhlIHJlc3VsdCB0byBzaWxlbmNlCi0JZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogQWRkIHRoZSBub3RlIG1lbnRpb25lZAotCWluIHRoZSBsYXN0IGNvbW1pdCBmb3IgdGhpcyB0ZXN0IGNhc2UgaW4gdGhlIHRlc3QgY2FzZSBpdHNlbGYuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IE1hcmsgY2lmIGFzCi0JdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgKGNsb3N1cmVfdGVzdF9mbjEpOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jIChjbG9zdXJlX3Rlc3RfZm4yKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyAoY2xvc3VyZV90ZXN0X2ZuMyk6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgKGNsb3N1cmVfdGVzdF9mbjApOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIChjbG9zdXJlX3Rlc3RfZm41KTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IExpa2V3aXNlLgorY29tbWl0IGEwYzgwZjI3OWI4NzMzZDAwMWNiNWU1YzVhMzI4OWVjYjdhNmU1NmEKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMTo0Mzo0OSAyMDExIC0wNTAwCiAKLTIwMDYtMDItMjIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIFVwZGF0ZSBteSBlLW1haWwgYWRkcmVzcy4KIAotCSogc3JjL3NoL3N5c3YuUzogRml4IHJlZ2lzdGVyIG51bWJlcnMgaW4gdGhlIEZERSBmb3IKLQlmZmlfY2xvc3VyZV9TWVNWLgorY29tbWl0IDgxOTVlMGUxMWRmN2E1M2ZhNDc0Y2FhOTM3NWY3M2NhMTEzNmVkNjYKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMToyNzowMCAyMDExIC0wNTAwCiAKLTIwMDYtMDItMjAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBGaXggc3ltYm9sIHByZWZpeGVzIG9uIERhcndpbi4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogUmVtb3ZlIHN0YXRpYwotCWRlY2xhcmF0aW9uIHRvIGF2b2lkIGEgZmFsc2UgbmVnYXRpdmUgb24gaXg4Ni4gU2VlIFBSMzIzLgorY29tbWl0IDU2YjNmOGNlZjBmMjhjZWZhYTBmNDBmZTBjZjdjNTI0YWRlZjEzMWQKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMToxNDo1NCAyMDExIC0wNTAwCiAKLTIwMDYtMDItMTggIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIE1vZGlmeSB0aGUgZmZpX2Nsb3N1cmUgc3RydWN0dXJlcyB0byBob2xkIHRhYmxlL3RhYmxlIGVudHJ5IHBvaW50ZXJzIGluc3RlYWQgb2YgYSBjb2RlIGJ1ZmZlci4KKyAgICAKKyAgICBUaGlzIHJlLWludGVncmF0ZXMgY29tbWl0IGRhMjc3M2UwMmFiMjZjYzExYTdmLgogCi0JKiBzcmMvc2gvZmZpLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCWFuZCBjYXN0IGludGVnZXIgdG8gdm9pZCAqIGlmIG5lZWRlZC4gIFVwZGF0ZSB0aGUgcG9pbnRlciB0bwotCXRoZSBGUCByZWdpc3RlciBzYXZlZCBhcmVhIGNvcnJlY3RseS4KK2NvbW1pdCAyOGEwMGY2MWZmM2Y2NGM0ZWIyMjY5Y2UyYWVhM2Q0OTMyNzQ0NjllCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTE6MDE6NDggMjAxMSAtMDUwMAogCi0yMDA2LTAyLTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQXBwbGUgYXNzZW1ibGVyIHN1cHBvcnQ7IGZpeGVkIG1vc3QgZ2FzL0VMRi1pc21zLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogWEZBSUwgdGhpcyB0ZXN0IHVudGlsIFBSMjU2MzAKLQlpcyBmaXhlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBMaWtld2lzZS4KK2NvbW1pdCA3ZjJlYTMzYTgwYmZjZWQ1ZTQ4ZWQ3MjkyZjNiOGYwNTdkNTRmZjhmCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTA6Mzk6MTggMjAxMSAtMDUwMAogCi0yMDA2LTAyLTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgUmVwbGFjZSBSRVRMRE0gbWFjcm8uCisgICAgCisgICAgVGhlIG1hY3JvIGlzIGluY29tcGF0aWJsZSB3aXRoIEFwcGxlJ3MgYXNzZW1ibGVyOyBzd2l0Y2ggdG8KKyAgICBhIHNpbXBsZSBpbmxpbmUgdmVyc2lvbi4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYzogTmV3IHRlc3QgY2FzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYzogTGlrZXdpc2UuCitjb21taXQgOTJmZjIzZTc3ZmE1ODY0NTViNDI3YjcxZjQ5ZTFkOTUwMjQ3MGU2ZQorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDEwOjI0OjQ5IDIwMTEgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IFJlbW92ZSBmZmlfdHlwZV9teWxvbmcKLQlkZWZpbml0aW9uLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQWRkIGZmaV90eXBlX215bG9uZyBkZWZpbml0aW9uCi0JaGVyZSB0byBiZSB1c2VkIGJ5IG90aGVyIHRlc3QgY2FzZXMgdG9vLgorICAgIFN3aXRjaCB0byB0aGUgY3VycmVudCBpT1MgNC4yIFNESy4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jOiBOZXcgdGVzdCBjYXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorY29tbWl0IDU4ZmI4Y2EyZGZiODlhZDcwMjg0YmI5Njc4ZDNkNGRiYjY1OGM4YTcKK01lcmdlOiBjYzNmYmQ5IDcxYzc5MmYKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMDoyMzoxOSAyMDExIC0wNTAwCiAKLTIwMDYtMDEtMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBNZXJnZSByZW1vdGUgYnJhbmNoICd1cHN0cmVhbS9tYXN0ZXInCiAKLQkqIGNvbmZpZ3VyZS5hYzogRW5hYmxlIGxpYmZmaSBmb3Igc3BhcmM2NC0qLWZyZWVic2QqLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IGNjM2ZiZDk3NWNlOTM2NmQ0YzQwYTZmZjZjMTA4ZjY2NDg2N2JkN2MKK01lcmdlOiBlNDQ5YTQzIGY2YWIzZWQKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMDoyMTowMiAyMDExIC0wNTAwCiAKLTIwMDYtMDEtMTggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOmxhbmRvbmYvbGliZmZpLWlvcwogCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlMgKHNtc3RfdHdvX3JlZ2lzdGVyKTogRG9uJ3QgY2FsbCBfX2FzaGxkaTMsCi0JaW5zdGVhZCBkbyB0aGUgc2hpZnRpbmcgaW5saW5lLgotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IERvbid0IGNvbXB1dGUgJXI1Ci0Jc2hpZnQgY291bnQgdW5jb25kaXRpb25hbGx5LiAgU2ltcGxpZnkgbG9hZCBzZXF1ZW5jZXMgZm9yIDEsIDIsIDMsIDQKLQlhbmQgOCBieXRlIHN0cnVjdHMsIGZvciB0aGUgcmVtYWluaW5nIHN0cnVjdCBzaXplcyBkb24ndCBjYWxsCi0JX19sc2hyZGkzLCBpbnN0ZWFkIGRvIHRoZSBzaGlmdGluZyBpbmxpbmUuCitjb21taXQgZTQ0OWE0M2JiZTEyZjgxMTkzOTk5MjhkYjFhZTI2YWRjNzFkZGUxNAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDEwOjIwOjQyIDIwMTEgLTA1MDAKIAotMjAwNS0xMi0wNyAgVGhpZW1vIFNldWZlciAgPHRoc0BuZXR3b3Jrbm8uZGU+CisgICAgQWxsb3cgc3BlY2lmaWNhdGlvbiBvZiB0aGUgbWluaW11bSBzdXBwb3J0ZWQgaU9TIHZlcnNpb24uCiAKLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBSZW1vdmUgb2Jzb2xldGUgc2dpZGVmcy5oIGluY2x1ZGUuIEFkZAotCW1pc3NpbmcgcGFyZW50aGVzZXMuCi0JKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyKTogQ29kZSBmb3JtYXR0aW5nLiBEZWZpbmUKLQlhbmQgdXNlIEEzX09GRiwgRlBfT0ZGLCBSQV9PRkYuIE1pY3JvLW9wdGltaXphdGlvbnMuCi0JKGZmaV9jbG9zdXJlX08zMik6IExpa2V3aXNlLCBidXQgd2l0aCBuZXdseSBkZWZpbmVkIEEzX09GRjIsCi0JQTJfT0ZGMiwgQTFfT0ZGMiwgQTBfT0ZGMiwgUkFfT0ZGMiwgRlBfT0ZGMiwgUzBfT0ZGMiwgR1BfT0ZGMiwKLQlWMV9PRkYyLCBWMF9PRkYyLCBGQV8xXzFfT0ZGMiwgRkFfMV8wX09GRjIsIEZBXzBfMV9PRkYyLAotCUZBXzBfMF9PRkYyLgotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBDb2RlIGZvcm1hdHRpbmcuIEZpeAotCWVuZGlhbm5lc3MgYnVncy4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IEltcHJvdmUgdHJhbXBvbGluZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLgotCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEZpeCBlbmRpYW5uZXNzIGJ1Z3MuCitjb21taXQgNzFjNzkyZjUxYmNmM2UyZjMzNGU1ZWExZmIxYThiNjY3Y2IzYWVkYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEZlYiAxMiAwOTozMzoxMSAyMDExIC0wNTAwCiAKLTIwMDUtMTItMDMgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgcmM0CiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBGb3JtYXR0aW5nLgotCShmZmlfcHJlcF9hcmdzX1NZU1YpOiBBdm9pZCBwb3NzaWJsZSBhbGlhc2luZyBwcm9ibGVtcyBieSB1c2luZyB1bmlvbnMuCi0JKGZmaV9wcmVwX2FyZ3M2NCk6IExpa2V3aXNlLgorY29tbWl0IDdjN2M5ZjMyNzI5OTMzMTAyMmY2MDAwNjAzYTM1ZjIzMTBkZmUzMDgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBGZWIgMTIgMDk6Mjk6MjkgMjAxMSAtMDUwMAogCi0yMDA1LTA5LTMwICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKyAgICB1bmdjY2lmeSBwYXJ0cyBvZiB0aGUgYnVpbGQKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBGb3IKLQlkYXJ3aW4sIHVzZSAtc2hhcmVkLWxpYmdjYyBub3QgLWxnY2NfcywgYW5kIGV4cGxhaW4gd2h5LgorY29tbWl0IGVkNjJlNDhiOTVhMGZhNjBiNjg1ZjY0N2NiNzNjOWUxOTBlZWMzNWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMTEgMTI6MjM6NTggMjAxMSAtMDUwMAogCi0yMDA1LTA5LTI2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisgICAgRml4IHBlcm1pc3Npb25zCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYyAodmFsdWVfdHlwZSk6IE5ldyB0eXBlZGVmLgotCShDQU5BUlkpOiBOZXcgZGVmaW5lLgotCShtYWluKTogQ2hlY2sgZm9yIHJlc3VsdCBidWZmZXIgb3ZlcmZsb3cuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IEhhbmRsZSBsaW51eDY0IGxvbmcgZG91YmxlIHJldHVybnMuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoRkxBR19SRVRVUk5TXzEyOEJJVFMpOiBOZXcgY29uc3RhbnQuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGxpbnV4NjQgbG9uZyBkb3VibGUgcmV0dXJucy4KK2NvbW1pdCAxN2Q5ZTllNjhkZGIxYjkxNWEwYjk3NTE3MTMwMzM4NjFiNTk4NTc1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDExIDEyOjIzOjIwIDIwMTEgLTA1MDAKIAotMjAwNS0wOC0yNSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICBVc2UgbmV3ZXIgYXV0b3Rvb2xzLiAgT25seSBidWlsZCBkZWJ1Zy5jIHdoZW4gLS1lbmFibGUtZGVidWcuCiAKLQlQUiB0YXJnZXQvMjM0MDQKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBDb3JyZWN0IHBsYWNlbWVudCBvZiBzdGFjawotCWhvbWVkIGZwIGFyZ3MuCi0JKGZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDb3JyZWN0IHN0YWNrIHNpemluZyBmb3Igc2FtZS4KK2NvbW1pdCA2OTcyYTRmZmRhNzU3NjFlYWFiN2RmYmUwZmIxNTE2YjI1NWU4ZTBjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDExIDA3OjMyOjUxIDIwMTEgLTA1MDAKIAotMjAwNS0wOC0xMSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgRml4IHhsYyBidWlsZCBvbiBBSVgKIAotCSogY29uZmlndXJlLmFjIChIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURSk6IE5ldyB0ZXN0LgotCShBSF9CT1RUT00pOiBBZGQgRkZJX0hJRERFTiBkZWZpbml0aW9uLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoaGlkZGVuKTogUmVtb3ZlLgotCShmZmlfY2xvc3VyZV9MSU5VWDY0LCBmZmlfcHJlcF9hcmdzNjQsIGZmaV9jYWxsX0xJTlVYNjQsCi0JZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBVc2UgRkZJX0hJRERFTiBpbnN0ZWFkIG9mIGhpZGRlbi4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0LAotCS5mZmlfY2xvc3VyZV9MSU5VWDY0KTogVXNlIEZGSV9ISURERU4gaW5zdGVhZCBvZiAuaGlkZGVuLgotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBSZW1vdmUsCi0JYWRkIEZGSV9ISURERU4gdG8gaXRzIHByb3RvdHlwZS4KLQkoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IE5ldy4KLQkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE5ldy4KLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBOZXcuCitjb21taXQgMTgzM2FhMGZiOTgzMWViMDcyNWI2M2UzNTg4NmMwZjZkMzVkZjQ4MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAxMSAwNzoxMTowNCAyMDExIC0wNTAwCiAKLTIwMDUtMDgtMTAgIEFsZnJlZCBNLiBTem1pZHQgIDxhbXNAZ251Lm9yZz4KKyAgICBzcGFyYyBBQkkgdGVzdCBmaXguCiAKLQlQUiBsaWJmZmkvMjE4MTk6Ci0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuYWM6IEhhbmRsZSBpKjg2LSotZ251Ki4KK2NvbW1pdCBmMWZiMTM5YjRlMjgzZmZmZGNmMjA1YTkwMzk0M2Q1ZTlkMmJiMmEyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMTg6MzA6MDIgMjAxMSAtMDUwMAogCi0yMDA1LTA4LTA5ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICBGaXggdGVzdHMKIAotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZQotCURXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2YgcmF0aGVyIHRoYW4KLQlEV19DRkFfR05VX25lZ2F0aXZlX29mZnNldF9leHRlbmRlZC4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlLgorY29tbWl0IDVjYjQ3MDMzMWQxODFjODRkNWQ2MjFlODg4NjgzMjdhMzI0YTU4OTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAxNToyMzowNiAyMDExIC0wNTAwCiAKLTIwMDUtMDctMjIgIFNVR0lPS0EgVG9zaGlub2J1ICA8c3VnaW9rYUBpdG9uZXQuY28uanA+CisgICAgRml4IHBlcm1pc3Npb25zCiAKLQkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBTdG9wIGFyZ3VtZW50IHBvcHBpbmcgY29ycmVjdGx5Ci0Jb24gc2gzLgotCShmZmlfY2xvc3VyZV9TWVNWKTogQ2hhbmdlIHRoZSBzdGFjayBsYXlvdXQgZm9yIHNoMyBzdHJ1Y3QgYXJndW1lbnQuCi0JKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggc2gzIGFyZ3VtZW50IGNvcHksIHdoZW4gaXQgaXMKLQlwYXJ0aWFsbHkgb24gcmVnaXN0ZXIuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRG9uJ3Qgc2V0IHRvbyBtYW55IGNpZi0+ZmxhZ3MuCitjb21taXQgMjY5ZGVlZjZkYmJiNDI2Njk1OTE5ZDMzOTgzNTdmYWRhM2JiMjg4YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDE1OjIyOjIzIDIwMTEgLTA1MDAKIAotMjAwNS0wNy0yMCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgcmMzCiAKLQkqIHNyYy9zaC9mZmkuYyAoZmZpX2NhbGwpOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBjb3JyZWN0bHkuCi0JUmVtb3ZlIGVtcHR5IGxpbmUuCi0JKiBzcmMvc2g2NC9mZmkuYyAoc2ltcGxlX3R5cGUpOiBSZW1vdmUuCi0JKHJldHVybl90eXBlKTogSGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgY29ycmVjdGx5LgotCShmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCi0JKGZmaV9jYWxsKTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCi0JKiBzcmMvc2g2NC9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBIYW5kbGUgMSwgMiBhbmQgNC1ieXRlIHJldHVybi4KLQlFbWl0IHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgaWYgUElDIGFuZCByZW1vdmUgd3JvbmcgZGF0YWxhYmVsCi0JcHJlZml4ZXMgZnJvbSBFSCBkYXRhLgorY29tbWl0IDQyNjk1ZTcyNTA0ZjY0NzQ0NGI4ZThlOWI5MGJkMjRmMWUzMjIwZTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAxNToxMjozNSAyMDExIC0wNTAwCiAKLTIwMDUtMDctMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBGaXggSVJJWCBzdXBwb3J0CiAKLQkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgUE9XRVJQQ19GUkVFQlNELgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiBjb25maWd1cmUuYWM6IEFkZCBQT1dFUlBDX0ZSRUVCU0QgcnVsZXMuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogQWRkIFBPV0VSUENfRlJFRUJTRCBydWxlcy4KLQkoRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QpOiBEZWZpbmUuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIGZsYWdzIHRvIGhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmUgcmV0dXJucwotCWluIGZmaV9jYWxsX1NZU1YuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgZm9yIFNZU1YgNCBBQkkuCi0JQWthIEZGSV9TWVNWLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogQWRkIHJldHVybiB0eXBlcyBmb3Igc21hbGwgc3RydWN0dXJlcy4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIGJpdHMgdG8gaGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgZm9yCi0JZmluYWwgU1lTViA0IEFCSS4KK2NvbW1pdCBhNmU1NmI5N2Y2MmEzZmVlYjMzMDFjMjRhMmU0Y2FlNTVlNTQ2MDIxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMTU6MDA6NDIgMjAxMSAtMDUwMAogCi0yMDA1LTA3LTEwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQWRkIHBvd2VycGM2NC0qLWRhcndpbiogc3VwcG9ydAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmM6IE5ldyB0ZXN0IGZpbGUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jOiBMaWtld2lzZS4KK2NvbW1pdCA3NDdkNmMzMmQ0YWJiMDdjMTBjM2ExZjkzNTc5YzM5MjlhYWEyNDg3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMTQ6NTY6MjMgMjAxMSAtMDUwMAogCi0yMDA1LTA3LTA1ICBSYW5kb2xwaCBDaHVuZyAgPHRhdXNxQGRlYmlhbi5vcmc+CisgICAgQWRkIEludGVyaXggc3VwcG9ydAogCi0JKiBzcmMvcGEvZmZpLmMgKGZmaV9zdHJ1Y3RfdHlwZSk6IFJlbmFtZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1QxCi0JYXMgRkZJX1RZUEVfU01BTExfU1RSVUNUMy4gIEJyZWFrIG91dCBoYW5kbGluZyBmb3IgNS03IGJ5dGUKLQlzdHJ1Y3R1cmVzLiAgS2lsbCBjb21waWxhdGlvbiB3YXJuaW5ncy4KLQkoZmZpX2Nsb3N1cmVfaW5uZXJfTElOVVgpOiBQcmludCByZXR1cm4gdmFsdWVzIGFzIGhleCBpbiBkZWJ1ZwotCW1lc3NhZ2UuICBSZW5hbWUgRkZJX1RZUEVfU01BTExfU1RSVUNUMSBhcyBGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLgotCVByb3Blcmx5IGhhbmRsZSA1LTcgYnl0ZSBzdHJ1Y3R1cmUgcmV0dXJucy4KLQkqIHNyYy9wYS9mZml0YXJnZXQuaCAoRkZJX1RZUEVfU01BTExfU1RSVUNUMSkKLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUMik6IFJlbW92ZS4KLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUMywgRkZJX1RZUEVfU01BTExfU1RSVUNUNSkKLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUNiwgRkZJX1RZUEVfU01BTExfU1RSVUNUNyk6IERlZmluZS4KLQkqIHNyYy9wYS9saW51eC5TOiBNYXJrIHNvdXJjZSBmaWxlIGFzIHVzaW5nIFBBMS4xIGFzc2VtYmx5LgotCShjaGVja3Ntc3QxLCBjaGVja3Ntc3QyKTogUmVtb3ZlLgotCShjaGVja3Ntc3QzKTogT3B0aW1pemUgaGFuZGxpbmcgb2YgMy1ieXRlIHN0cnVjdCByZXR1cm5zLgotCShjaGVja3Ntc3Q1NjcpOiBQcm9wZXJseSBoYW5kbGUgNS03IGJ5dGUgc3RydWN0IHJldHVybnMuCitjb21taXQgZWFiNmU0MWNkZTM4MmFhMDdkZTZjMDExZDUxNGExNGMwZDYyZWI0NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDEwOjE1OjAyIDIwMTEgLTA1MDAKIAotMjAwNS0wNi0xNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgUmVtb3ZlIFJFQURNRS5tYXJrZG93biBmb3JtIGxpYmZmaS1pb3MKIAotCVBSIGxpYmdjai8yMTk0MwotCSogc3JjL21pcHMvbjMyLlM6IEVuZm9yY2UgUElDIGNvZGUuCi0JKiBzcmMvbWlwcy9vMzIuUzogTGlrZXdpc2UuCitjb21taXQgNjlkYmU4NDVmNGVlM2U2Y2U4OTk5ZjE3YTFlNGYyMTc5ZWY3ZGE4OQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDA3OjM4OjQzIDIwMTEgLTA1MDAKIAotMjAwNS0wNi0xNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgRml4IHhmYWlscwogCi0JKiBjb25maWd1cmUuYWM6IFRyZWF0IGkqODYtKi1zb2xhcmlzMi4xMCBhbmQgdXAgYXMgWDg2XzY0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IGY0OTgzMThjMDdiOTUxMzdmZTI1OWQ4NmJkYmUxNTM0NzU4OGI4NGEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAwNjoyNjo0NiAyMDExIC0wNTAwCiAKLTIwMDUtMDYtMDEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgVXBkYXRlIFJFQURNRSBmb3IgaU9TIGFnYWluCiAKLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBEb24ndCB1c2UgSlVNUFRBUkdFVAotCXRvIGNhbGwgZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YuICBBcHBlbmQgQGxvY2FsIGluc3RlYWQuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBMaWtld2lzZSBmb3IgZmZpX3ByZXBfYXJnc19TWVNWLgorY29tbWl0IDYzMGI5YzBhYzQzYzdlZGNiZmQ4OTJlMjNjMDlmYjI2NzI0ZjRhYzAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAwNjoyNDoyMyAyMDExIC0wNTAwCiAKLTIwMDUtMDUtMTcgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisgICAgVXBkYXRlIHRvIHJjMgogCi0JKiBjb25maWd1cmUuYWM6IFVzZSBBQ19DX0JJR0VORElBTiBpbnN0ZWFkIG9mIEFDX0NfQklHRU5ESUFOX0NST1NTLgotCVVzZSBBQ19DSEVDS19TSVpFT0YgaW5zdGVhZCBvZiBBQ19DT01QSUxFX0NIRUNLX1NJWkVPRi4KLQkqIE1ha2VmaWxlLmFtIChBQ0xPQ0FMX0FNRkxBR1MpOiBSZW1vdmUgLUkgLi4vY29uZmlnLgotCSogYWNsb2NhbC5tNCwgY29uZmlndXJlLCBmZmljb25maWcuaC5pbiwgTWFrZWZpbGUuaW4sCi0JaW5jbHVkZS9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorY29tbWl0IDBjYWQ0Mzg2ZmE0YzllYTVmOGNhODhiMTYyNDdkYjRlNWM4ZmVhOTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAwNjoxMTo0NiAyMDExIC0wNTAwCiAKLTIwMDUtMDUtMDkgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorICAgIEFkZCBDaGFuZ2VMb2cgZW50cnkuICBGaXggY29weXJpZ2h0IGhlYWRlcnMuCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCAwOWNiNzZmMjY0NWJkMmMxNTE4NDZlOTI0OWQ4ZWE3MDdiYTAxZThjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMjA6Mzk6NTEgMjAxMSAtMDUwMAogCi0yMDA1LTA1LTA4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorICAgIEFkZCBtaXNzaW5nIGNoYW5nZQogCi0JUFIgbGliZmZpLzIxMjg1Ci0JKiBzcmMvYWxwaGEvb3NmLlM6IFVwZGF0ZSB1bndpbmQgaW50byB0byBtYXRjaCBjb2RlLgorY29tbWl0IDJlM2E0OGNjZGQ1NDM0MDk4M2M0NmEyOWEwYjQxOTg1ZTNlNzg5YWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAyMDozNzoyNiAyMDExIC0wNTAwCiAKLTIwMDUtMDUtMDQgIEFuZHJlYXMgRGVnZXJ0IDxhZEBwYXB5cnVzLWdtYmguZGU+Ci0JICAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisgICAgRml4IG1ha2UgZGlzdAogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2F2ZSBzc2UtdXNlZCBmbGFnIGluCi0JYml0IDExIG9mIGZsYWdzLgotCShmZmlfY2FsbCk6IE1hc2sgcmV0dXJuIHR5cGUgZmllbGQuICBQYXNzIHNzZWNvdW50IHRvIGZmaV9jYWxsX3VuaXg2NC4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IFNldCBjYXJyeSBiaXQgaWYgc3NlLXVzZWQgZmxhZyBzZXQuCi0JKiBzcmMveDg2L3VuaXg2NC5TIChmZmlfY2FsbF91bml4NjQpOiBBZGQgc3NlY291bnQgYXJndW1lbnQuCi0JT25seSBsb2FkIHNzZSByZWdpc3RlcnMgaWYgc3NlY291bnQgbm9uLXplcm8uCi0JKGZmaV9jbG9zdXJlX3VuaXg2NCk6IE9ubHkgc2F2ZSBzc2UgcmVnaXN0ZXJzIGlmIGNhcnJ5IHNldCBvbiBlbnRyeS4KK2NvbW1pdCA1ZTQ4MTRkOTkyOGUyMzZhMmE0YWZlODRkNmUxZDRmZGFhNDczMjA2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTk6NDY6MjggMjAxMSAtMDUwMAogCi0yMDA1LTA0LTI5ICBSYWxmIENvcnNlcGl1cyAgPHJhbGYuY29yc2VwaXVzQHJ0ZW1zLm9yZz4KKyAgICBmaXggcGVybWlzc2lvbnMKIAotCSogY29uZmlndXJlLmFjOiBBZGQgaSo4Ni0qLXJ0ZW1zKiwgc3BhcmMqLSotcnRlbXMqLAotCXBvd2VycGMtKnJ0ZW1zKiwgYXJtKi0qLXJ0ZW1zKiwgc2gtKi1ydGVtcyouCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgNWMwY2M2ZjE1MzZhYTE3Mzg3OTVhOTczMDM4MTBhODIzYzdmYTJjYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDE5OjQ1OjU5IDIwMTEgLTA1MDAKIAotMjAwNS0wNC0yMCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CisgICAgMy4wLjEwcmMxCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWRnLXRlc3QtMSk6IEluIHJlZ3N1YiB1c2UsCi0JaGF2ZSBUY2w4LjMtY29tcGF0aWJsZSBpbnRlcm1lZGlhdGUgdmFyaWFibGUuCitjb21taXQgODU3ZmUzZGU0NmQyMjg2YWZhMmZlNzcyOTIwZWNmNGFlZmExNjg4ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDE5OjM5OjIwIDIwMTEgLTA1MDAKIAotMjAwNS0wNC0xOCAgU2ltb24gUG9zbmphayA8c2ltb24ucG9zbmpha0BzaW9sLm5ldD4KLQkgICAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CisgICAgQ2xlYW4gdXBzCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgQ1JJUyBzdXBwb3J0LgotCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwKLQlpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogc3JjL2NyaXM6IE5ldyBkaXJlY3RvcnkuCi0JKiBzcmMvY3Jpcy9mZmkuYywgc3JjL2NyaXMvc3lzdi5TLCBzcmMvY3Jpcy9mZml0YXJnZXQuaDogTmV3IGZpbGVzLgotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IFdyYXAgaW4gI2lmbmRlZiBfX0NSSVNfXy4KK2NvbW1pdCBlMjIxNGY4YWRiNTU3N2MyNDc0NTJlMmNjOWY0Y2JlMzA0ZDdjYTlmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTk6MjI6NTYgMjAxMSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1kZy10ZXN0LTEpOiBSZXBsYWNlIFxuIHdpdGgKLQlccj9cbiBpbiBvdXRwdXQgdGVzdHMuCisgICAgVXBkYXRlIFJFQURNRQogCi0yMDA1LTA0LTEyICBNaWtlIFN0dW1wICA8bXJzQGFwcGxlLmNvbT4KK2NvbW1pdCAxMTA2MjI5YTU3MjFhNjU5ZGE1YzIzMWVjMGU4MjExMTE5NjE1Mzk0CitNZXJnZTogYmM5ZDBiZSBmNmFiM2VkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTk6MjA6MDkgMjAxMSAtMDUwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgQWRkIGlPUyBzdXBwb3J0CiAKLTIwMDUtMDMtMzAgIEhhbnMgQm9laG0gIDxIYW5zLkJvZWhtQGhwLmNvbT4KK2NvbW1pdCBiYzlkMGJlMjk1OGNlNDc1NzU3ZjM0ZGQyYzg3ODk0OGFhNzdhMzlmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTc6MDQ6MjYgMjAxMSAtMDUwMAogCi0JKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoZmZpX2FyZyk6IFVzZSBsb25nIGxvbmcgaW5zdGVhZCBvZiBESS4KKyAgICAzLjAuMTByYzAgY2hhbmdlcwogCi0yMDA1LTAzLTMwICBTdGV2ZSBFbGxjZXkgIDxzamVAY3VwLmhwLmNvbT4KK2NvbW1pdCAzYjgzNjI0OWZlYWU2ZDA4ZDNlNjg4NzQ4NmU0Yjk5NjFkZGFmYTA5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTQ6Mjg6NTkgMjAxMSAtMDUwMAogCi0JKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoZmZpX2FyZykgQUREIERJIGF0dHJpYnV0ZS4KLQkoZmZpX3NhcmcpIERpdHRvLgotCSogc3JjL2lhNjQvdW5peC5TIChmZmlfY2xvc3VyZV91bml4KTogRXh0ZW5kIGdwCi0JdG8gNjQgYml0cyBpbiBJTFAzMiBtb2RlLgotCUxvYWQgNjQgYml0cyBldmVuIGZvciBzaG9ydCBkYXRhLgorICAgIFJlYmFzZSBmcm9tIEdDQwogCi0yMDA1LTAzLTIzICBNaWtlIFN0dW1wICA8bXJzQGFwcGxlLmNvbT4KK2NvbW1pdCBhMjZlMzk0MDYxOWZhZWJhNmRlNTQ4MjRjOTU0MGM5MGIxYWFiNTEzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTM6NTY6MTIgMjAxMSAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogVXBkYXRlIGZvciAtbTY0IG11bHRpbGliLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisgICAgY29weXJpZ2h0IHVwZGF0ZXMgcGF0Y2gKIAotMjAwNS0wMy0yMSAgWmFjayBXZWluYmVyZyAgPHphY2tAY29kZXNvdXJjZXJ5LmNvbT4KK2NvbW1pdCBiODA5OTUzOWYwMGUyMjQxMDc1OTQxMDFlOTc2MGI2ZGMwODFhMDU2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTM6NTA6NDMgMjAxMSAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IERvIG5vdCBpbnZva2UgVExfQUNfR0NDX1ZFUlNJT04uCi0JRG8gbm90IHNldCB0b29sX2luY2x1ZGVfZGlyLgotCSogYWNsb2NhbC5tNCwgY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOgotCVJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBTZXQgZ2NjX3ZlcnNpb24gYW5kIHRvb2xsaWJmZmlkaXIuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIEZpeCBtc3ZjYy5zaCBib3RjaAogCi0yMDA1LTAyLTIyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBkYzQxMWU4Zjk5MTEzYTM0NjU2YmZkMmQzYWU1MTI1OTk3MjQ4OGNjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTA6NDk6MjkgMjAxMSAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBCdW1wIGFsaWdubWVudCB0bwotCW9kZC1udW1iZXJlZCByZWdpc3RlciBwYWlycyBmb3IgNjQtYml0IGludGVnZXIgdHlwZXMuCisgICAgRml4IEhQLVVYIGJ1aWxkCiAKLTIwMDUtMDItMjMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCA0MDQ1ODVkMTM0OGUzMGFjNTgyMDNiYmQ4NzZkOTEzMWU1YWVkODc0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTA6NDQ6MzYgMjAxMSAtMDUwMAogCi0JUFIgbGliZmZpLzIwMTA0Ci0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jOiBOZXcgdGVzdCBjYXNlLgorICAgIEZpeCBzcGFyYyB2OCBhZ2dyZWdhdGUgdHlwZSByZXR1cm5zIGZvciBzdW4ncyBjb21waWxlcgogCi0yMDA1LTAyLTExICBKYW5pcyBKb2huc29uICA8amFuaXMxODdAdXMuaWJtLmNvbT4KK2NvbW1pdCAxOWNlNzEzMTg4ZTE5M2U0NTIyNzQwZDI0YzIwMTcwNDExODgzZDJkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTA6MzQ6MjMgMjAxMSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogUmVtb3ZlIGRnLW9wdGlvbnMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0My5jOiBEaXR0by4KKyAgICBncmFtbWFyIGZpeAogCi0yMDA1LTAyLTA4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgODkyODRmZTU1ZjFhOGFkM2JkZGJlYTc5NmVlMDBkMGUzYmE0MTFjZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEwOjE5OjE5IDIwMTEgLTA1MDAKIAotCSogc3JjL2Zydi9mZml0YXJnZXQuaDogUmVtb3ZlIFBQQyBzdHVmZiB3aGljaCBkb2VzIG5vdCBiZWxvbmcgdG8gZnJ2LgorICAgIEZpeCBBSVggYnVpbGQgd2l0aCBJQk0gWExDCiAKLTIwMDUtMDEtMTIgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+Citjb21taXQgYmEwMjJjMzM4YWY5N2NiMThkOWY4ZWQ1YTYwN2ZkNDgzYTYxYzA5YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEwOjEyOjQ4IDIwMTEgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwIChjeHhfb3B0aW9ucyk6IEFkZAotCS1zaGFyZWQtbGliZ2NjLgorICAgIGZpeCB3aW42NC11bmRlcnNjb3JlIHBhdGNoCiAKLTIwMDQtMTItMzEgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgMDk3ZTVmMzkyNGVlOTJhM2JhNmNkNzJmNzg3ZGE4YTNlYjE0ZmVhMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEwOjExOjAwIDIwMTEgLTA1MDAKIAotCSogc3JjL3R5cGVzLmMgKEZGSV9BR0dSRUdBVEVfVFlQRURFRik6IFJlbW92ZS4KLQkoRkZJX1RZUEVERUYpOiBSZW5hbWUgZnJvbSBGRklfSU5URUdSQUxfVFlQRURFRi4gIFJlcGxhY2Ugc2l6ZSBhbmQKLQlvZmZzZXQgcGFyYW1ldGVycyB3aXRoIGEgdHlwZSBwYXJhbWV0ZXI7IGRlZHVjZSBzaXplIGFuZCBzdHJ1Y3R1cmUKLQlhbGlnbm1lbnQuICBVcGRhdGUgYWxsIHVzZXJzLgorICAgIHg4NiBwY3JlbCB0ZXN0IHBhcnQgMgogCi0yMDA0LTEyLTMxICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IGVkMmM1MThkOTYwYjkxZDQ0NGJlNzRlNWE1NTc3OWE5YzQ2MDJmM2IKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMDoxMDowNyAyMDExIC0wNTAwCiAKLQkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogRGVmaW5lIHdpdGggc2l6ZW9mLgotCShGRklfVFlQRV9MT05HRE9VQkxFKTogRml4IGZvciBpYTY0LgotCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKHN0cnVjdCBmZmlfaWE2NF90cmFtcG9saW5lX3N0cnVjdCk6IE1vdmUKLQlpbnRvIGZmaV9wcmVwX2Nsb3N1cmUuCi0JKiBzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsIHNyYy9pYTY0L2ZmaS5jLCBzcmMvaWE2NC91bml4LlM6IFJld3JpdGUKLQlmcm9tIHNjcmF0Y2guCisgICAgeDg2IHBjcmVsIHRlc3QKIAotMjAwNC0xMi0yNyAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCAwZTU4NDM5OTVmNDY5MDBlZjIxMjUzMTI4MWUwOGIyMjQ0NjRmNDEzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMDc6NTI6NDAgMjAxMSAtMDUwMAogCi0JKiBzcmMveDg2L3VuaXg2NC5TOiBGaXggdHlwbyBpbiB1bndpbmQgaW5mby4KKyAgICBSZWZyZXNoIGZyb20gR0NDCiAKLTIwMDQtMTItMjUgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgNWI5Y2Q1Mjc4NDMzOWE0MmU0MTcxNzRhNTVlMzEwZTIxNGQ0MzVmOQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAyMiAxNToxOTo1NyAyMDEwIC0wNTAwCiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoc3RydWN0IHJlZ2lzdGVyX2FyZ3MpOiBSZW5hbWUgZnJvbSBzdGFja0xheW91dC4KLQkoZW51bSB4ODZfNjRfcmVnX2NsYXNzKTogQWRkIFg4Nl82NF9DT01QTEVYX1g4N19DTEFTUy4KLQkobWVyZ2VfY2xhc3Nlcyk6IENoZWNrIGZvciBpdC4KLQkoU1NFX0NMQVNTX1ApOiBOZXcuCi0JKGNsYXNzaWZ5X2FyZ3VtZW50KTogUGFzcyBieXRlX29mZnNldCBieSB2YWx1ZTsgcGVyZm9ybSBhbGwgdXBkYXRlcwotCWluc2lkZSBzdHJ1Y3QgY2FzZS4KLQkoZXhhbWluZV9hcmd1bWVudCk6IEFkZCBjbGFzc2VzIGFyZ3VtZW50OyBoYW5kbGUKLQlYODZfNjRfQ09NUExFWF9YODdfQ0xBU1MuCi0JKGZmaV9wcmVwX2FyZ3MpOiBNZXJnZSBpbnRvIC4uLgotCShmZmlfY2FsbCk6IC4uLiBoZXJlLiAgU2hhcmUgc3RhY2sgZnJhbWUgd2l0aCBmZmlfY2FsbF91bml4NjQuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2V0dXAgY2lmLT5mbGFncyBmb3IgcHJvcGVyIHN0cnVjdHVyZSByZXR1cm4uCi0JKGZmaV9maWxsX3JldHVybl92YWx1ZSk6IFJlbW92ZS4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IFJlbW92ZSBkZWFkIGFzc2VydC4KLQkoZmZpX2Nsb3N1cmVfdW5peDY0X2lubmVyKTogUmVuYW1lIGZyb20gZmZpX2Nsb3N1cmVfVU5JWDY0X2lubmVyLgotCVJld3JpdGUgdG8gdXNlIHN0cnVjdCByZWdpc3Rlcl9hcmdzIGluc3RlYWQgb2YgdmFfbGlzdC4gIENyZWF0ZQotCWZsYWdzIGZvciBoYW5kbGluZyBzdHJ1Y3R1cmUgcmV0dXJucy4KLQkqIHNyYy94ODYvdW5peDY0LlM6IFJlbW92ZSBkZWFkIHN0cmluZ3MuCi0JKGZmaV9jYWxsX3VuaXg2NCk6IFJlbmFtZSBmcm9tIGZmaV9jYWxsX1VOSVg2NC4gIFJld3JpdGUgdG8gc2hhcmUKLQlzdGFjayBmcmFtZSB3aXRoIGZmaV9jYWxsLiAgSGFuZGxlIHN0cnVjdHVyZSByZXR1cm5zIHByb3Blcmx5LgotCShmbG9hdDJzc2UsIGZsb2F0ZmxvYXQyc3NlLCBkb3VibGUyc3NlKTogUmVtb3ZlLgotCShzc2UyZmxvYXQsIHNzZTJkb3VibGUsIHNzZTJmbG9hdGZsb2F0KTogUmVtb3ZlLgotCShmZmlfY2xvc3VyZV91bml4NjQpOiBSZW5hbWUgZnJvbSBmZmlfY2xvc3VyZV9VTklYNjQuICBSZXdyaXRlCi0JdG8gaGFuZGxlIHN0cnVjdHVyZSByZXR1cm5zIHByb3Blcmx5LgorICAgIHdpbjY0LXVuZGVyc2NvcmUgcGF0Y2gKIAotMjAwNC0xMi0wOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IDJkYjcyNjE1YjUwZWI1YzBmMjk3MjVjMDJjNzQwYTJmMGQ3ZmM3ZDkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBOb3YgMjEgMTA6NTA6NTYgMjAxMCAtMDUwMAogCi0JKiBNYWtlZmlsZS5hbSAoQU1fTUFLRUZMQUdTKTogUmVtb3ZlIGR1cGxpY2F0ZSBMSUJDRkxBR1MgYW5kCi0JUElDRkxBRy4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKyAgICBSZWJhc2UKIAotMjAwNC0xMi0wMiAgUmljaGFyZCBTYW5kaWZvcmQgIDxyc2FuZGlmb0ByZWRoYXQuY29tPgorY29tbWl0IGY2YWIzZWRjMjNkYzhmYzdjNDdhMzFjODk2MDQ0MTUwYzIzZjA0YjUKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBwbGF1c2libGUuY29vcD4KK0RhdGU6ICAgV2VkIE9jdCAyNyAxOTozNDo1MSAyMDEwIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogVXNlIFRMX0FDX0dDQ19WRVJTSU9OIHRvIHNldCBnY2NfdmVyc2lvbi4KLQkqIGNvbmZpZ3VyZSwgYWNsb2NhbC5tNCwgTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgSW5jbHVkZSB0aGUgbGljZW5zZSBoZWFkZXIgaW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQuCiAKLTIwMDQtMTEtMjkgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+Citjb21taXQgY2VmNjE5NDYyODg3ZmEwZjM2MGUzZWU3MDJkMWUwNGYxMTJiNWIzOAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBXZWQgT2N0IDI3IDEzOjU5OjMwIDIwMTAgLTA0MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIGNoYW5nZS4KKyAgICBBZGQgbWlzc2luZyBjb3B5cmlnaHQvbGljZW5zZSBoZWFkZXIuCiAKLTIwMDQtMTEtMjUgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+Citjb21taXQgNTNmMzg3YjIwMzQxM2M5YWE2ZTMxZjQ5ZGJiNzBkMzdkODE2MzMwYgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDE5OjU3OjE3IDIwMTAgLTA3MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIHJldmVyc2lvbi4KKyAgICBNaW5vciBSRUFETUUgZml4LgogCi0yMDA0LTExLTI0ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorY29tbWl0IDRmYmNiNWI1ZmJjZTExZjRiMTY4MDYwZTAwNjM5ZGIzM2M4NWI3NWIKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxOTo1MDozNyAyMDEwIC0wNzAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbGlidG9vbCBjaGFuZ2UuCisgICAgTWlub3IgUkVBRE1FIGZpeC4KIAotMjAwNC0xMS0yMyAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KK2NvbW1pdCA4ZTc2NTJlZjZhY2FiNWRiN2EyOWY3ODY2ODZhNTRmMDVjZGJkYzdkCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTk6NDk6MzkgMjAxMCAtMDcwMAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFVzZSBuZXcgcHJvY3MgaW4gdGFyZ2V0LWxpYnBhdGguZXhwLgorICAgIEFkZCBhIGxpYmZmaS1pb3Mtc3BlY2lmaWMgZ2l0aHViIFJFQURNRS4KIAotMjAwNC0xMS0yMyAgUmljaGFyZCBTYW5kaWZvcmQgIDxyc2FuZGlmb0ByZWRoYXQuY29tPgorY29tbWl0IDgzMDM4Y2YyNGFhMWE5MmI2MmI5MWZmZWUxZGNjMjVkNzkyNDM0ODQKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxNDozNjo0NSAyMDEwIC0wNzAwCiAKLQkqIHNyYy9taXBzL28zMi5TIChmZmlfY2FsbF9PMzIsIGZmaV9jbG9zdXJlX08zMik6IFVzZSBqYWxyIGluc3RlYWQKLQlvZiBqYWwuICBVc2UgYW4gYWJzb2x1dGUgZW5jb2RpbmcgZm9yIHRoZSBmcmFtZSBpbmZvcm1hdGlvbi4KKyAgICBJbXBsZW1lbnQgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBhbGxvY2F0b3IgZm9yIGlPUy9BUk0uCisgICAgCisgICAgVGhpcyBwcm92aWRlcyB3b3JraW5nIGNsb3N1cmUgc3VwcG9ydCBvbiBpT1MvQVJNIGRldmljZXMgd2hlcmUKKyAgICBQUk9UX1dSSVRFfFBST1RfRVhFQyBpcyBub3QgcGVybWl0dGVkLiBUaGUgY29kZSBwYXNzZXMgYmFzaWMKKyAgICBzbW9rZSB0ZXN0cywgYnV0IHJlcXVpcmVzIGZ1cnRoZXIgcmV2aWV3LgogCi0yMDA0LTExLTIzICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorY29tbWl0IGIwMGZmM2U5OGZkZGU2MjJjZWY2MTcwMzBlMTRkNTM1NmRmZjk4OGYKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxNDoyMjoyNiAyMDEwIC0wNzAwCiAKLQkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgbm8tZGVwZW5kZW5jaWVzLiAgQWRkIEFDTE9DQUxfQU1GTEFHUy4KLQkqIGFjaW5jbHVkZS5tNDogRGVsZXRlIGxvZ2ljIGZvciBzaW5jbHVkZXMuCi0JKiBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGU6IExpa2V3aXNlLgorICAgIFJlbmFtZSB0aGUgZ2VuZXJhdGVkIHN5bWJvbAogCi0yMDA0LTExLTIyICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorY29tbWl0IGRhMjc3M2UwMmFiMjZjYzExYTdmZTg3ZTk4NTU5OWYzNWNkZjA2NDkKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxNDoyMTozNyAyMDEwIC0wNzAwCiAKLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IEFsaWduIGRvdWJsZXMgYW5kIDY0LWJpdCBpbnRlZ2VycwotCW9uIGEgOC1ieXRlIGJvdW5kYXJ5LgotCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogUmVzZXJ2ZSBmcmFtZSBzcGFjZSBmb3IgYXJndW1lbnRzLgorICAgIE1vZGlmeSB0aGUgZmZpX2Nsb3N1cmUgc3RydWN0dXJlcyB0byBob2xkIHRhYmxlL3RhYmxlIGVudHJ5IHBvaW50ZXJzIGluc3RlYWQgb2YgYSBjb2RlIGJ1ZmZlci4KIAotMjAwNC0xMC0yNyAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+Citjb21taXQgMDFkNzFiN2JlZDQxODQ0ZjgwY2I5ZmVlZjIwZGNjNWVjZTViYTJkMAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDE0OjIxOjE0IDIwMTAgLTA3MDAKIAotCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCi0JbG9uZyBsb25nIHZhbHVlcy4gIFJvdW5kIHN0YWNrIGFsbG9jYXRpb24gdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzCi0JZm9yIEFUUENTIGNvbXBhdGliaWxpdHkuCi0JKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFJld29yayB0byBhdm9pZCB1c2Ugb2YgQVBDUyByZWdpc3RlcgotCW5hbWVzLiAgSGFuZGxlIHJldHVybmluZyBsb25nIGxvbmcgdHlwZXMuICBBZGQgVGh1bWIgYW5kIGludGVyd29ya2luZwotCXN1cHBvcnQuICBJbXByb3ZlIHNvZnQtZmxvYXQgY29kZS4KKyAgICBSZWdlbmVyYXRlZCB0aGUgYXV0b2NvbmYgc2NyaXB0CiAKLTIwMDQtMTAtMjcgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorY29tbWl0IDE5YWZkYTAwNjljNDJlNTFjODFkY2E3YjEwYTVjZjg4NGI0Y2RjZTAKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxNDoyMDo1MiAyMDEwIC0wNzAwCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRiLmV4cCAobG9hZF9nY2NfbGliKTogTmV3IGZ1bmN0aW9uLgotCShsaWJmZmlfZXhpdCk6IE5ldyBmdW5jdGlvbi4KLQkobGliZmZpX2luaXQpOiBCdWlsZCB0aGUgdGVzdGdsdWUgd3JhcHBlciBpZiBuZWVkZWQuCisgICAgRW5hYmxlIEFDX1NVQlNUIGZvciBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFCiAKLTIwMDQtMTAtMjUgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+Citjb21taXQgOWUxMTk2NDQ0ZTc4YWVmMjAwMjhjMTg4OTFmNDRlYmUzOWE4MTVmZAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDEwOjQzOjA2IDIwMTAgLTA3MDAKIAotCVBSIG90aGVyLzE4MTM4Ci0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IEFjY2VwdCBtb3JlIHRoYW4gb25lIG11bHRpbGliIGxpYmdjYy4KKyAgICBBZGQgYSBoYXJkLWNvZGVkIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgYXJtIGltcGxlbWVudGF0aW9uLgorICAgIAorICAgIFRoaXMgaW1wbGVtZW50cyBzdXBwb3J0IGZvciByZS1tYXBwaW5nIGEgc2hhcmVkIHRhYmxlIG9mIGV4ZWN1dGFibGUKKyAgICB0cmFtcG9saW5lcyBkaXJlY3RseSBpbiBmcm9udCBvZiBhIHdyaXRhYmxlIGNvbmZpZ3VyYXRpb24gcGFnZSwgd29ya2luZworICAgIGFyb3VuZCBQUk9UX1dSSVRFIHJlc3RyaWN0aW9ucyBmb3Igc2FuZGJveGVkIGFwcGxpY2F0aW9ucyBvbiBBcHBsZSdzCisgICAgaU9TLgorICAgIAorICAgIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgZm9yIHRlc3RpbmcgcHVycG9zZXM7IGEgcHJvcGVyIGFsbG9jYXRvciBpcyBzdGlsbAorICAgIG5lY2Vzc2FyeSwgYW5kIEFSTS1zcGVjaWZpYyBjb2RlIG5lZWRzIHRvIGJlIG1vdmVkIG91dCBvZgorICAgIHNyYy9jbG9zdXJlcy5jLgogCi0yMDA0LTEwLTI1ICBLYXp1aGlybyBJbmFva2EgPGluYW9rYS5rYXp1aGlyb0ByZW5lc2FzLmNvbT4KK2NvbW1pdCBmMzgzNjRiMzk5MTg0ZTY4MmZjM2U3ODUwODRiZDQ5NzgyN2JjNWFmCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTA6NDI6MzYgMjAxMCAtMDcwMAogCi0JKiBzcmMvbTMyci9saWJmZml0YXJnZXQuaCAoRkZJX0NMT1NVUkVTKTogU2V0IHRvIDAuCisgICAgRml4IHN5bWJvbCBwcmVmaXggZm9yIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIgb24gRGFyd2luLgogCi0yMDA0LTEwLTIwICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KK2NvbW1pdCAzNjg0OWU3NzE2Yjc3YWEyNWU0MTc1ZDFmNGJlMWI5M2RiZjQ3YWFjCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMDk6MzU6MDQgMjAxMCAtMDcwMAogCi0JKiBzcmMvc2gvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogRG9uJ3QgYWxpZ24gZm9yIGRvdWJsZSBkYXRhLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0My5jOiBOZXcgdGVzdCBjYXNlLgorICAgIFdoaXRlc3BhY2UvY29tbWVudCBmaXhlcy4KIAotMjAwNC0xMC0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+Citjb21taXQgYjc2NDE2MjUyNjg1NDY4NmU1NzlhNDhiNmFjNTk4MWY0ZWI4ODZhMworQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDA5OjA0OjM0IDIwMTAgLTA3MDAKIAotCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlKTogU2V0IFQgYml0IGluIHRyYW1wb2xpbmUgZm9yCi0JdGhlIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cnVjdHVyZSBwb2ludGVkIHdpdGggUjIuCi0JKiBzcmMvc2gvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogVXNlIFIyIGFzIHRoZSBwb2ludGVyIHRvCi0JdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUgaWYgVCBiaXQgc2V0LiAgRW1pdCBwb3NpdGlvbgotCWluZGVwZW5kZW50IGNvZGUgYW5kIEVIIGRhdGEgaWYgUElDLgorICAgIEZpeCB0aGUgc2NyaXB0IG5hbWUgKGJ1aWxkLWlwaG9uZS5zaCAtPiBidWlsZC1pb3Muc2gpCiAKLTIwMDQtMTAtMTMgIEthenVoaXJvIEluYW9rYSAgPGluYW9rYS5rYXp1aGlyb0ByZW5lc2FzLmNvbT4KK2NvbW1pdCBhM2Q5YWE4NTAxMzM0MTQ1MWVhOTc3NjY0ODViN2ExMTg1MmQzMmIyCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMDk6MDM6NTIgMjAxMCAtMDcwMAogCi0JKiBNYWtlZmlsZS5hbTogQWRkIG0zMnIgc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpdWdyZTogUmVnZW5lcmF0ZS4KLQkqIHNyYy90eXBlcy5jOiBBZGQgbTMyciBwb3J0IHRvIEZGSV9JTlRFUk5BTF9UWVBFREVGCi0JKHVpbnQ2NCwgc2ludDY0LCBkb3VibGUsIGxvbmdkb3VibGUpCi0JKiBzcmMvbTMycjogTmV3IGRpcmVjdG9yeS4KLQkqIHNyYy9tMzJyL2ZmaS5jOiBOZXcgZmlsZS4KLQkqIHNyYy9tMzJyL3N5c3YuUzogTGlrZXdpc2UuCi0JKiBzcmMvbTMyci9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisgICAgVXBkYXRlIHRoZSBhdXRvZ2VuZXJhdGVkIGF1dG9jb25mL2F1dG9tYWtlIGZpbGVzLgogCi0yMDA0LTEwLTAyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KK2NvbW1pdCBjNzE0ODBlYWY4MzlmMjZiYmRmY2Q4OTY1ZjY1YWM0ZDhkZWZkZGMwCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMDk6MDI6MDUgMjAxMCAtMDcwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmM6IE5ldyB0ZXN0IGNhc2UuCisgICAgVXBkYXRlIGF1dG9tYWtlL2F1dG9jb25mIHRvIGNvbmRpdGlvbmFsbHkgYnVpbGQgc3JjL2FybS90cmFtcG9saW5lLlMgaWYgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBpcyBlbmFibGVkLgogCi0yMDA0LTA5LTE0ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+Citjb21taXQgOWFmOTI5MWI3M2JjNWUyN2VjZDk0OWJlYzgxNTdmMjA0MjZkNjViOAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDA4OjUyOjMzIDIwMTAgLTA3MDAKIAotCVBSIGxpYmdjai8xNzQ2NQotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBEb24ndCB1c2UgZ2xvYmFsIGxkX2xpYnJhcnlfcGF0aC4KLQlTZXQgdXAgTERfTElCUkFSWV9QQVRILCBTSExJQl9QQVRILCBMRF9MSUJSQVJZTjMyX1BBVEgsCi0JTERfTElCUkFSWTY0X1BBVEgsIExEX0xJQlJBUllfUEFUSF8zMiwgTERfTElCUkFSWV9QQVRIXzY0IGFuZAotCURZTERfTElCUkFSWV9QQVRILgorICAgIEFkZCB0aGUgdHJhbXBvbGluZSB0YWJsZSBnZW5lcmF0ZWQgYnkgZ2VudHJhbXAuc2gKIAotMjAwNC0wOS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IDY4Y2UwYzM4M2VjZTg0ZjY5OTQ1ZDFjOGMzZmVkMDNmN2Y5Y2I1ZDYKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAwODozODoxOSAyMDEwIC0wNzAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IFJlbW92ZSB3aGl0ZXNwYWNlcy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsLmM6IFJlbW92ZSB1bnVzZWQgdmFyLiBDbGVhbnVwCi0Jd2hpdGVzcGFjZXMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBMaWtld2lzZS4KKyAgICBBZGQgYSBzaGVsbCBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgdGhlIEFSTSB0cmFtcG9saW5lIHBhZ2UuCisgICAgCisgICAgVGhpcyBnZW5lcmF0ZXMgYSBwYWdlIG9mIDM0MCB0cmFtcG9saW5lcywgYWxpZ25lZCB3aXRoaW4gb25lIHBhZ2UuIFRoZQorICAgIHRyYW1wb2xpbmVzIHVzZSBwYy1yZWxhdGl2ZSBhZGRyZXNzaW5nIHRvIHJlZmVyZW5jZSBjb25maWcgZGF0YQorICAgIChjb250ZXh0LCBqdW1wIGFkZHJlc3MpIGZyb20gYSBwYWdlIHBsYWNlZCBkaXJlY3RseSBwcmlvciB0byB0aGUKKyAgICB0cmFtcG9saW5lIHBhZ2UuIFRoaXMgY2FuIGJlIHVzZWQgb24gc3lzdGVtcyAtLSBzdWNoIGFzIGlPUyAtLSB0aGF0IGRvIG5vdAorICAgIHN1cHBvcnQgd3JpdGFibGUsIGV4ZWN1dGFibGUgbWVtb3J5IGJ5IHJlbWFwcGluZyB0aGUgZXhlY3V0YWJsZSBwYWdlCisgICAgY29udGFpbmluZyB0aGUgdHJhbXBvbGluZXMgZGlyZWN0bHkgYWJvdmUgYSBuZXdseSBhbGxvY2F0ZWQgd3JpdGFibGUKKyAgICBjb25maWcgcGFnZS4KIAotMjAwNC0wOS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IDc1YWYwODZiZTg4MzBhOGVhZmU5YjFlYmRhMTk5ZDc4OGJjYjBjNjIKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxOCAxODoxMjoxOSAyMDEwIC0wNzAwCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggY29tbWVudHMgYW5kIGlkZW50YXRpb24uCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKyAgICBVcGRhdGUgYXV0b2NvbmYgZmlsZXMKIAotMjAwNC0wOS0wMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IDFhYzkyY2NhOWIwMmVmOGQ2YTc2OWYwZGUxYWRjY2Q1Yzk2MzAzNTUKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxOCAxODowODoxNCAyMDEwIC0wNzAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogQWRkIGZsYWcgZm9yIGxvbmdkb3VibGUgcmV0dXJuIHZhbHVlcy4KLQkoZmZpX3ByZXBfYXJncyk6IEhhbmRsZSBsb25nZG91YmxlIGFyZ3VtZW50cy4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTZXQgZmxhZ3MgZm9yIGxvbmdkb3VibGUuIENhbGN1bGF0ZSBzcGFjZSBmb3IKLQlsb25nZG91YmxlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogQWRkIGNsb3N1cmUgaGFuZGxpbmcgZm9yIGxvbmdkb3VibGUuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUyAoX2ZmaV9jYWxsX0RBUldJTik6IEFkZCBoYW5kbGluZyBvZiBsb25nZG91YmxlCi0JdmFsdWVzLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUyAoX2ZmaV9jbG9zdXJlX0FTTSk6IExpa2V3aXNlLgotCSogc3JjL3R5cGVzLmM6IERlZmluZWQgbG9uZ2RvdWJsZSBzaXplIGFuZCBhbGlnbm1lbnQgZm9yIGRhcndpbi4KKyAgICBBZGQgYXV0b2NvbmYgY2hlY2sgZm9yIFdeWCBwbGF0Zm9ybXMgdGhhdCByZXF1aXJlIGEgdHJhbXBvbGluZSB0YWJsZS4KKyAgICAKKyAgICBUaGlzIGFkZHMgdGhlIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUuIFRoZSBmbGFnIGlzIGVuYWJsZWQgZm9yCisgICAgYXJtLWFwcGxlLWRhcndpbiwgd2hlcmUgUFJPVF9FWEVDIG9uIHdyaXRhYmxlIChvciBmb3JtZXJseSB3cml0YWJsZSkgcGFnZXMgaXMKKyAgICBub3QgcGVybWl0dGVkIGZvciBzYW5kYm94ZWQgYmluYXJpZXMuCiAKLTIwMDQtMDktMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCBiZTcyZmJhYjI5YjcxOTBjNzAyZDhlMWFjM2QxNDk4NTVlOTU4NzlkCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTggMTg6MDI6MjUgMjAxMCAtMDcwMAogCi0JKiBzcmMvcG93ZXJwYy9haXguUzogUmVtb3ZlIHdoaXRlc3BhY2VzLgotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9hc20uaDogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorICAgIFVzZSB0aGUgY29ycmVjdCBob3N0IHRyaXBsZSBmb3IgYXJtL2RhcndpbgogCi0yMDA0LTA4LTMwICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KK2NvbW1pdCA3MDE1MGJkZjQ1MDkyNjk5NjVjNzJmMjAzMmJmNzRmMjg1NzY3YWZlCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTggMTY6Mzg6MDMgMjAxMCAtMDcwMAogCi0JKiBNYWtlZmlsZS5hbTogQWRkIGZydiBzdXBwb3J0LgotCSogTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5hYzogUmVhZCBjb25maWd1cmUuaG9zdC4KLQkqIGNvbmZpZ3VyZS5pbjogUmVhZCBjb25maWd1cmUuaG9zdC4KLQkqIGNvbmZpZ3VyZS5ob3N0OiBOZXcgZmlsZS4gIGZydi1lbGYgbmVlZHMgbGliZ2xvc3MuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBGb3JjZSBmZmlfY2xvc3VyZSB0byBoYXZlIGEgbmljZSBiaWcgKDgpCi0JYWxpZ25tZW50LiAgVGhpcyBpcyBuZWVkZWQgdG8gZnJ2IGFuZCBzaG91bGRuJ3QgaGFybSB0aGUgb3RoZXJzLgotCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKEFMSUdOX0RPV04pOiBOZXcgbWFjcm8uCi0JKiBzcmMvZnJ2L2ZmaS5jLCBzcmMvZnJ2L2ZmaXRhcmdldC5oLCBzcmMvZnJ2L2VhYmkuUzogTmV3IGZpbGVzLgorICAgIEFkZCBtaXNzaW5nIFVOV0lORCBlbnRyeTsgZGlzYWJsZXMgLnBhZCBvbiBub24tRUFCSSB0YXJnZXRzLgogCi0yMDA0LTA4LTI0ICBEYXZpZCBEYW5leSAgPGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgNmI0NTJiYWZhZWM0OThkZjk3NWJhOGFjNGM5OWRlMTc0ZTVmNzRmNworQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgU2VwIDE4IDE2OjIxOjMyIDIwMTAgLTA3MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFhmYWlsIG1pcHM2NCogaW5zdGVhZCBvZiBtaXBzKi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jICBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlIGFuZCBzZXQgcmV0dXJuIHZhbHVlCi0JdG8gemVyby4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKyAgICBBcHBsZSBhc3NlbWJsZXIgc3VwcG9ydDsgZml4ZWQgbW9zdCBnYXMvRUxGLWlzbXMuCiAKLTIwMDQtMDgtMjMgIERhdmlkIERhbmV5IDxkYW5leUBhdnRyZXguY29tPgorY29tbWl0IDhkZGFjODM1YjZmOGI1NGVkZTc2NGQwZWE5NzdkZWU0YzgyZTJkNjcKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxOCAxNTozODowNiAyMDEwIC0wNzAwCiAKLQlQUiBsaWJnY2ovMTMxNDEKLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfTzMyX1NPRlRfRkxPQVQpOiBOZXcgQUJJLgotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggYWxpZ25tZW50IGNhbGN1bGF0aW9uLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgZmxvYXRpbmcgcG9pbnQKLQlwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMuCi0JKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBBQkkuCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBEaXR0by4KLQkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIEFCSSwgZml4Ci0JYWxpZ25tZW50IGNhbGN1bGF0aW9ucy4KLQkqIHNyYy9taXBzL28zMi5TIChmZmlfY2xvc3VyZV9PMzIpOiBEb24ndCB1c2UgZmxvYXRpbmcgcG9pbnQKLQlpbnN0cnVjdGlvbnMgaWYgRkZJX08zMl9TT0ZUX0ZMT0FULCBtYWtlIHN0YWNrIGZyYW1lIEFCSSBjb21wbGlhbnQuCisgICAgRml4IHBsYWNlbWVudCBvZiB0aGUgX19BUFBMRV9fIG1hY3JvLgogCi0yMDA0LTA4LTE0ICBDYXNleSBNYXJzaGFsbCA8Y3NtQGdudS5vcmc+Citjb21taXQgNjkwNDNkMDI5MzZiYjA1NzlhYzU5YjRlZTFlZDhkZWMzOGMzOGRiNworQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgU2VwIDE4IDE1OjMyOjA4IDIwMTAgLTA3MDAKIAotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVmX2NpZl9tYWNoZGVwKTogc2V0IGBjaWYtPmZsYWdzJyB0bwotCWNvbnRhaW4gYEZGSV9UWVBFX1VJTlQ2NCcgYXMgcmV0dXJuIHR5cGUgZm9yIGFueSA2NC1iaXQKLQlpbnRlZ2VyIChPMzIgQUJJIG9ubHkpLgotCShmZmlfcHJlcF9jbG9zdXJlKTogbmV3IGZ1bmN0aW9uLgotCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IG5ldyBmdW5jdGlvbi4KLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBEZWZpbmUgYEZGSV9DTE9TVVJFUycgYW5kCi0JYEZGSV9UUkFNUE9MSU5FX1NJWkUnIGFwcHJvcHJpYXRlbHkgaWYgdGhlIEFCSSBpcyBvMzIuCi0JKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyKTogYWRkIGxhYmVscyBmb3IgLmVoX2ZyYW1lLiBSZXR1cm4KLQk2NCBiaXQgaW50ZWdlcnMgY29ycmVjdGx5LgotCShmZmlfY2xvc3VyZV9PMzIpOiBuZXcgZnVuY3Rpb24uCi0JQWRkZWQgRFdBUkYtMiB1bndpbmQgaW5mbyBmb3IgYm90aCBmdW5jdGlvbnMuCisgICAgV29yay1hcm91bmQgbGliZmZpJ3MgRlAgQUJJIGRldGVjdGlvbi4KKyAgICAKKyAgICBPbiBpT1MsIHdlIG11c3QgdXNlIHRoZSBBQVBDUyBmbG9hdGluZyBwb2ludCByZXR1cm4gdmFsdWUgY2FsbGluZworICAgIGNvbnZlbnRpb25zLiBsaWJmZmkncyBBUk0gaW1wbGVtZW50YXRpb24gd2lsbCBvbmx5IHVzZSB0aGVzZSBjb252ZW50aW9ucworICAgIGlmIF9fU09GVEZQX18gaXMgZGVmaW5lZCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIHdoZW4gR0NDJ3MKKyAgICAtbWZsb2F0LWFiaSBkZWZhdWx0cyB0byAnc29mdGZwJyBpbnN0ZWFkIG9mICdzb2Z0Jy4gVG8gd29yayBhcm91bmQgdGhpcworICAgIHdlIG1hbnVhbGx5IGRlZmluZSBfX1NPRlRGUF9fIGZvciBBcHBsZSBwbGF0Zm9ybXMgaW4gdGhlIEFSTS1zcGVjaWZpYworICAgIHN5c3YuUy4KKyAgICAKKyAgICBTZWUgYWxzbzoKKyAgICAgIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvaW9zLyNkb2N1bWVudGF0aW9uL1hjb2RlL0NvbmNlcHR1YWwvaVBob25lT1NBQklSZWZlcmVuY2UvSW50cm9kdWN0aW9uL0ludHJvZHVjdGlvbi5odG1sCisgICAgICBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuaWhpMDA0MmQvSUhJMDA0MkRfYWFwY3MucGRmCiAKLTIwMDQtMDgtMTAgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGE4MmU2YzM1NGVhODA1MTE0NjQyYTZlNDQwYWJkMDgzMmNiMWQyM2YKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxOCAxNDo0NDoyNCAyMDEwIC0wNzAwCiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfYXJncyApOiA4LWFsaWduIGFsbCBzdGFjayBhcmd1bWVudHMuCisgICAgQWRkIGEgc3R1YiBpT1MgYnVpbGQgc2NyaXB0IHRvIGRyaXZlIGF1dG9jb25mCiAKLTIwMDQtMDgtMDEgIFJvYmVydCBNaWxsYW4gIDxyb2JlcnRtaEBnbnUub3JnPgorY29tbWl0IDg0ZThkZTZlOWZjMTkzODhmNmYxMTAyYzAxM2I3ZDBkNTI5NDBlY2MKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBdWcgNiAwMTozNToxMiAyMDEwIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogRGV0ZWN0IGtuZXRic2QtZ251IGFuZCBrZnJlZWJzZC1nbnUuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgUmVzdG9yZSBleGVjdXRlIHBlcm1pc3Npb25zCiAKLTIwMDQtMDctMzAgIE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AbGludXgtbWlwcy5vcmc+Citjb21taXQgM2FlZWNjOWViMWE2ZmViYTY1NDk4NDljZGQzMzVjOTI2NDE1YTRmYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyA1IDE1OjE5OjAwIDIwMTAgLTA0MDAKIAotCSogYWNpbmNsdWRlLm00IChBQ19GVU5DX01NQVBfQkxBQ0tMSVNUKTogQ2hlY2sgZm9yIDxzeXMvbW1hbi5oPgotCWFuZCBtbWFwKCkgZXhwbGljaXRseSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gcHJlc2V0IGF1dG9jb25mIGNhY2hlCi0JdmFyaWFibGVzLgotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBGaXggd2luNjQtc3RydWN0LWFyZ3MgcGF0Y2gKIAotMjAwNC0wNy0xMSAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorY29tbWl0IDAwZDBiNTljZDEzZjg5YWI4YjQ0YmQ4OTRlYjdmMGExMzFmY2I0NzIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBBdWcgNSAxNDo1Njo1MyAyMDEwIC0wNDAwCiAKLQkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IEMgYWxpYXNpbmcgdmlvbGF0aW9uLgotCShmZmlfY2hlY2tfZmxvYXRfc3RydWN0KTogUmVtb3ZlIHVudXNlZCBwcm90b3R5cGUuCisgICAgRml4IGRlYnVnIGJ1aWxkIGZvciB3aW5kb3dzCiAKLTIwMDQtMDYtMzAgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorY29tbWl0IGJkYTQ4N2U4NzA2NGYyNzk2NTE1NTQ1OWE2MmRjNTJhNzQ0Nzc4ZDAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBBdWcgNSAwOTowMjo0MSAyMDEwIC0wNDAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmx1c2hfaWNhY2hlKTogJzsnIGlzIGEgY29tbWVudAotCWNoYXJhY3RlciBvbiBEYXJ3aW4sIHVzZSAnXG5cdCcgaW5zdGVhZC4KKyAgICBEb24ndCB1c2UgLXNhZmVzZWggd2l0aCBtbDY0CiAKLTIwMDQtMDYtMjYgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorY29tbWl0IGMxZDI4YmE4ZDUwMjk3OTVhZjMxM2ZmZWI4MWM5N2VmYzZkNGM4NDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBBdWcgNSAwODo0ODoxNiAyMDEwIC0wNDAwCiAKLQkqIGxpYnRvb2wtdmVyc2lvbjogRml4IHR5cG8gaW4gcmV2aXNpb24vYWdlLgorICAgIHN0ZGNhbGwteDg2LWNsb3N1cmUtZml4CiAKLTIwMDQtMDYtMTcgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorY29tbWl0IDVmZWFjYWQ0YTU2Yzg1YjNmMjNhMjY3YTMwYjJjZjQyNGNkNTk1NDgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBBdWcgNSAwODozMDowNCAyMDEwIC0wNDAwCiAKLQkqIGxpYnRvb2wtdmVyc2lvbjogTmV3LgotCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9MREZMQUdTKTogVXNlIC12ZXJzaW9uLWluZm8gZm9yIHNvbmFtZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIGRlZmluZSBnZW5lcmljIHN5bWJvbHMgY2FyZWZ1bGx5CiAKLTIwMDQtMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+Citjb21taXQgMTBlYTg0ODkwMGJjMzAxOGFjMjEzY2VmNTJiNDRjYWNiZTVjYmViYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyA1IDA4OjI0OjI3IDIwMTAgLTA0MDAKIAotCSogTWFrZWZpbGUuYW06IFJlbW92ZSB1c2VsZXNzIG11bHRpbGliIHJ1bGVzLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlIHdpdGggYXV0b21ha2UgMS44LjUuCi0JKiBjb25maWd1cmUuYWM6IFJlbW92ZSB1c2VsZXNzIG11bHRpbGliIGNvbmZpZ3VyeS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBkb24ndCBjb3B5IHdpbjY0IHN0cnVjdCBhcmdzCiAKLTIwMDQtMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+Citjb21taXQgZDE0MTc4YmU0YzQ5YzNhZGE0NGE5ZmU5ZWZlMTFkNDQ0MzcyZGRhYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEp1bCAyMyAwOToxNDowMCAyMDEwIC0wNDAwCiAKLQkqIC5jdnNpZ25vcmU6IE5ldyBmaWxlLgorICAgIEZGSV9MQVNUX0FCSSBmaXgKIAotMjAwNC0wNi0xMCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Citjb21taXQgM2Y1YjEzNzVhYjFlMmI4ZTNkNTkzZTIxYjI3MDk3YTRhNTBmOWI4MworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEp1bCAxMiAxNDozOToxOCAyMDEwIC0wNDAwCiAKLQkqIHNyYy9pYTY0L3VuaXguUyAoZmZpX2NhbGxfdW5peCk6IEluc2VydCBncm91cCBiYXJyaWVyIGJyZWFrCi0JZnBfZG9uZS4KLQkoZmZpX2Nsb3N1cmVfVU5JWCk6IEZpeCBmMTQvZjE1IGFkanVzdG1lbnQgaWYgRkxPQVRfU1ogaXMgZXZlcgotCWNoYW5nZWQgZnJvbSA4LgorICAgIHJlYmFzZQogCi0yMDA0LTA2LTA2ICBTZWFuIE1jTmVpbCAgPHNlYW5AbWNuZWlsLmNvbT4KK2NvbW1pdCBlYWY0NDRlYWJjNGM3ODcwM2MwZjk4YWMwMTk3YjE2MTljMWIxYmVmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgSnVsIDEwIDA4OjU5OjA5IDIwMTAgLTA0MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgeDg2XzY0LSotZnJlZWJzZCogc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBGaXggc2VsaW51eCB0ZXN0CiAKLTIwMDQtMDQtMjYgIEpvZSBCdWNrIDxqYnVja0B3ZWxzaC1idWNrLm9yZz4KK2NvbW1pdCA2MzA5NzQxNTIyNDdmMTAwZWNlNGQ0NGYxMGMzNzIxYmI0NTk5ZmJmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgV2VkIE1heSA1IDIwOjE0OjU2IDIwMTAgLTA0MDAKIAotCUJ1ZyAxNTA5MwotCSogY29uZmlndXJlLmFjOiBUZXN0IGZvciBleGlzdGVuY2Ugb2YgbW1hcCBhbmQgc3lzL21tYW4uaCBiZWZvcmUKLQljaGVja2luZyBibGFja2xpc3QuICBGaXggc3VnZ2VzdGVkIGJ5IEppbSBXaWxzb24uCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgTWljaGFybCBLb2hsZXIncyBzcGVsbGluZyBmaXhlcwogCi0yMDA0LTA0LTI2ICBNYXR0IEF1c3Rlcm4gIDxhdXN0ZXJuQGFwcGxlLmNvbT4KK2NvbW1pdCA5ZGM5YTI5M2YzZDQ1ODlmY2FmMDJkZDQyODhjOGNlYmFlZmE1MDhlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVHVlIEFwciAxMyAxMDozMzo1MiAyMDEwIC0wNDAwCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBHbyB0aHJvdWdoIGEgbm9uLWxhenkgcG9pbnRlciBmb3IgaW5pdGlhbAotCUZERSBsb2NhdGlvbi4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorICAgIFJlYmFzZSB0byBsYXRlc3QgR0NDIHNvdXJjZXMKIAotMjAwNC0wNC0yNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IGYyYzJhNGZjZTliM2VjYTlmMzliNGYzNTQ1MTE4YmMyNTZkYTRhNzMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUdWUgQXByIDEzIDEwOjE5OjI4IDIwMTAgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jIChtYWluKTogRml4IGluaXRpYWxpemF0aW9uCi0JZXJyb3IuIFJlcG9ydGVkIGJ5IFRob21hcyBIZWxsZXIgPHRoZWxsZXJAcHl0aG9uLm5ldD4uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIChtYWluKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jIChtYWluKTogTGlrZXdpc2UuCisgICAgUmVtb3ZlIHdhcm5pbmdzIGFuZCBhZGQgT1MvMiBzdXBwb3J0CiAKLTIwMDQtMDMtMjAgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorY29tbWl0IGMwYjY5ZTU3ZDUyOWUzM2QxOGI2NThjYzU1NzJhMjFlMzY2MzI0N2MKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUdWUgTWFyIDMwIDA4OjMwOjIyIDIwMTAgLTA0MDAKIAotCSogc3JjL3BhL2xpbnV4LlM6IEZpeCB0eXBvLgorICAgIERhbiBXaXR0ZSdzIHdpbmRvd3MgYnVpbGQgZml4ZXMuCiAKLTIwMDQtMDMtMTkgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorY29tbWl0IDU5YTI1OWY0ZDM0OGY1OTNiNDVmNDUyMzA5ZjRkMDIwYTI4MDUxYzQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBNb24gTWFyIDE1IDA1OjU3OjUxIDIwMTAgLTA0MDAKIAotCSogTWFrZWZpbGUuYW06IFVwZGF0ZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogc3JjL3BhL2ZmaS5oLmluOiBSZW1vdmUuCi0JKiBzcmMvcGEvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlLgorICAgIFJlbW92ZSBqdW5rIGZpbGUKIAotMjAwNC0wMi0xMCAgUmFuZG9scGggQ2h1bmcgIDx0YXVzcUBkZWJpYW4ub3JnPgorY29tbWl0IDNkZTFlYjM2ZDM3YTY2ODI5ZTYwNjQyMTkzOTg3NGQwZDYwZDgxNmQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBNb24gTWFyIDE1IDA1OjU3OjI0IDIwMTAgLTA0MDAKIAotCSogTWFrZWZpbGUuYW06IEFkZCBQQSBzdXBwb3J0LgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlLmFjOiBBZGQgUEEgdGFyZ2V0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogc3JjL3BhL2ZmaS5jOiBOZXcgZmlsZS4KLQkqIHNyYy9wYS9mZmkuaC5pbjogQWRkIFBBIHN1cHBvcnQuCi0JKiBzcmMvcGEvbGludXguUzogTmV3IGZpbGUuCi0JKiBwcmVwX2NpZi5jOiBBZGQgUEEgc3VwcG9ydC4KKyAgICBmaXgtY29tbWVudHMgcGF0Y2gKIAotMjAwNC0wMy0xNiAgSG9zYWthIFl1amkgIDxob3NAdGFtYW5lZ2kub3JnPgorY29tbWl0IGMzODEzYjZkN2Y4YTc3NzcwMGY0YzU4NjIxOTBjMGRiMTQ4ZDRkZTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUdWUgSmFuIDI2IDE2OjQ4OjU2IDIwMTAgLTA1MDAKIAotCSogc3JjL3R5cGVzLmM6IEZpeCBhbGlnbm1lbnQgc2l6ZSBvZiBYODZfV0lOMzIgY2FzZSBpbnQ2NCBhbmQKLQlkb3VibGUuCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVwbGFjZSBlY2lmLT5jaWYtPnJ0eXBlLT50eXBlCi0Jd2l0aCBlY2lmLT5jaWYtPmZsYWdzLgotCShmZmlfY2FsbCwgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogUmVwbGFjZSBjaWYtPnJ0eXBlLT50eXBlCi0Jd2l0aCBjaWYtPmZsYWdzLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBYODZfV0lOMzIgc3RydWN0IGNhc2UuCi0JKGZmaV9jbG9zdXJlX1NZU1YpOiBBZGQgMSBvciAyLWJ5dGVzIHN0cnVjdCBjYXNlIGZvciBYODZfV0lOMzIuCi0JKiBzcmMveDg2L3dpbjMyLlMgKHJldHN0cnVjdDFiLCByZXRzdHJ1Y3QyYiwgc2NfcmV0c3RydWN0MWIsCi0Jc2NfcmV0c3RydWN0MmIpOiBBZGQgZm9yIDEgb3IgMi1ieXRlcyBzdHJ1Y3QgY2FzZS4KKyAgICBSZWJ1aWxkIE1ha2VmaWxlcyB3aXRoIGF1dG9tYWtlIDEuMTEuMSBmb3IgQ1ZFLTIwMDktNDAyOS4KIAotMjAwNC0wMy0xNSBLZWxsZXkgQ29vayA8a2Nvb2tAZ2NjLmdudS5vcmc+Citjb21taXQgOGQyN2Y2OGJhYTM2NWJmODgzYjYwNTNjNWY2YmM4MTk2NDZkNTQzNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBKYW4gMTUgMTE6MzU6MzcgMjAxMCAtMDUwMAogCi0JKiBjb25maWd1cmUuaW46IFJlbmFtZSBmaWxlIHRvIC4uLgotCSogY29uZmlndXJlLmFjOiAuLi4gdGhpcy4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIE1lbnRpb24gcmVjZW50IGNoYW5nZXMgaW4gUkVBRE1FCiAKLTIwMDQtMDMtMTIgIE1hdHQgQXVzdGVybiAgPGF1c3Rlcm5AYXBwbGUuY29tPgorY29tbWl0IGZmM2NkNjhiOGNmMmQ5YTI4Y2FkN2FhOWJlZmY0NjIzNmVhY2VjOGMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgSmFuIDE1IDExOjI3OjI0IDIwMTAgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEZpeCBFSCBpbmZvcm1hdGlvbiBzbyBpdCBjb3JyZXNwb25kcyB0bwotCWNoYW5nZXMgaW4gRUggZm9ybWF0IHJlc3VsdGluZyBmcm9tIGFkZGl0aW9uIG9mIGxpbmtvbmNlIHN1cHBvcnQuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKyAgICBBZGQgbXN2Yy5zaCB3cmFwcGVyCiAKLTIwMDQtMDMtMTEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KLQkgICAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK2NvbW1pdCBjYWRlYmE2Y2I1MzQxNGExMjUzNTgyZjE3MTljMjg2NjY1ZGU3YjZjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIEphbiAxNSAxMDo0Njo1MSAyMDEwIC0wNTAwCiAKLQkqIE1ha2VmaWxlLmFtIChBVVRPTUFLRV9PUFRJT05TKTogU2V0IHRoZW0uCi0JUmVtb3ZlIFZQQVRILiBSZW1vdmUgcnVsZXMgZm9yIG9iamVjdCBmaWxlcy4gUmVtb3ZlIG11bHRpbGliIHN1cHBvcnQuCi0JKEFNX0NDQVNGTEFHUyk6IEFkZC4KLQkqIGNvbmZpZ3VyZS5pbiAoQUNfQ09ORklHX0hFQURFUlMpOiBSZWxhY2UgQU1fQ09ORklHX0hFQURFUi4KLQkoQUNfUFJFUkVRKTogQnVtcCB2ZXJzaW9uIHRvIDIuNTkuCi0JKEFDX0lOSVQpOiBGaWxsIHdpdGggdmVyc2lvbiBpbmZvIGFuZCBidWcgYWRkcmVzcy4KLQkoT1JJR0lOQUxfTERfRk9SX01VTFRJTElCUyk6IFJlbW92ZS4KLQkoQU1fRU5BQkxFX01VTFRJTElCKTogVXNlIHRoaXMgaW5zdGVhZCBvZiBBQ19BUkdfRU5BQkxFLgotCURlLXByZWNpb3VzIENDIHNvIHRoYXQgdGhlIHJpZ2h0IGZsYWdzIGFyZSBwYXNzZWQgZG93biB0byBtdWx0aWxpYnMuCi0JKEFDX01TR19FUlJPUik6IFJlcGxhY2Ugb2Jzb2xldGUgbWFjcm8gQUNfRVJST1IuCi0JKEFDX0NPTkZJR19GSUxFUyk6IFJlcGxhY2Ugb2Jzb2xldGUgbWFjcm8gQUNfTElOS19GSUxFUy4KLQkoQUNfT1VUUFVUKTogUmVvcmdhbml6ZSB0aGUgb3V0cHV0IHdpdGggQUNfQ09ORklHX0NPTU1BTkRTLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogYWNsb2NhbC5tNDogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KKyAgICBNaWNyb3NvZnQgVmlzdWFsIEMgcG9ydAogCi0yMDA0LTAzLTExICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorY29tbWl0IDA3MzllN2RjMDBkYjc2NmViNjRmNTAyZWM0MTM3YjgxNzYzOGM5YTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgSmFuIDE1IDA5OjQ4OjMzIDIwMTAgLTA1MDAKIAotCSogc3JjL2lhNjQvZmZpLmMgKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfVU5JWCk6IEdldCBmbG9hdGluZyBwb2ludAotCWFyZ3VtZW50cyBmcm9tIGZwIHJlZ2lzdGVycyBvbmx5IGZvciB0aGUgZmlyc3QgOCBwYXJhbWV0ZXIgc2xvdHMuCi0JRG9uJ3QgY29udmVydCBhIGZsb2F0IHBhcmFtZXRlciB3aGVuIHBhc3NlZCBpbiBtZW1vcnkuCisgICAgQWRkIHg4NiBTdW4gU3R1ZGlvIGNvbXBpbGVyIHN1cHBvcnQKIAotMjAwNC0wMy0wOSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+Citjb21taXQgZWRmZGZkMmU4NWI4ZDAxZDI0NTU5MzRmMWQ3ZjRkN2ViMmYzY2YxYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFdlZCBKYW4gMTMgMDI6NTY6MTkgMjAxMCAtMDUwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGNvbmZpZy9hY2Nyb3NzLm00IGNvcnJlY3Rpb24uCisgICAgQWRkIGNsb3N1cmUgZXhhbXBsZSBkb2MKIAotMjAwNC0wMi0yNSAgTWF0dCBLcmFhaSAgPGtyYWFpQGFsdW1uaS5jbXUuZWR1PgorY29tbWl0IDdiN2E0MmYyMjFjZjE3MWU4ZDA5ZGYzNGNhYzZkYzFmZDg0NThjYzMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUdWUgSmFuIDEyIDA5OjE0OjE0IDIwMTAgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IENoYW5nZQotCWVjaWYtPmNpZi0+Ynl0ZXMgdG8gYnl0ZXMuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIGJyYWNlcyBhcm91bmQgbmVzdGVkIGlmIHN0YXRlbWVudC4KKyAgICBSZWJhc2UgZnJvbSBHQ0MKIAotMjAwNC0wMi0wOSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KK2NvbW1pdCA0YjE4ZDFmNzNkYzc3MzMxMzc4NjllNGFiNTcyNWNiOTBjMWM4ZmRlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIEphbiAxIDEwOjI0OjI3IDIwMTAgLTA1MDAKIAotCSogc3JjL3R5cGVzLmMgKHBvaW50ZXIpOiBQT1dFUlBDNjQgaGFzIDggYnl0ZSBwb2ludGVycy4KKyAgICBBZGQgeDg2LTY0IE1pbmdXIHRvIFJFQURNRQogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQ29ycmVjdCBsb25nIGRvdWJsZSBoYW5kbGluZy4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBGaXggdHlwby4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBQYXNzIC1tbG9uZy1kb3VibGUtMTI4Ci0JZm9yIHBvd2VycGM2NC0qLSouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgorY29tbWl0IGMzMDQyYWZhZjNmODRhYmJiZTljOTFiZjliYzk4OTZiMGQ5ZWIwMDMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgSmFuIDEgMDg6MDg6MDIgMjAxMCAtMDUwMAogCi0yMDA0LTAyLTA4ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIFJlc2V0IHF1aWx0IHBhdGNoZXMgcG9zdCAzLjAuOSBtZXJnZSB3aXRoIEdDQwogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXAgPEZGSV9MSU5VWDY0Pik6IENvcnJlY3QKLQlsb25nIGRvdWJsZSBmdW5jdGlvbiByZXR1cm4gYW5kIGxvbmcgZG91YmxlIGFyZyBoYW5kbGluZy4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBGb3JtYXR0aW5nLiAgRGVsZXRlIHVudXNlZCAibmciIHZhci4KLQlVc2UgImVuZF9wZnIiIGluc3RlYWQgb2YgIm5mIi4gIENvcnJlY3QgbG9uZyBkb3VibGUgaGFuZGxpbmcuCi0JTG9jYWxpc2UgInRlbXAiLgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2F2ZSBmMiBsb25nIGRvdWJsZQotCXJldHVybiB2YWx1ZS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogQWxsb2NhdGUKLQlzcGFjZSBmb3IgbG9uZyBkb3VibGUgcmV0dXJuIHZhbHVlLiAgQWRqdXN0IHN0YWNrIGZyYW1lIGFuZCBvZmZzZXRzLgotCUxvYWQgZjIgbG9uZyBkb3VibGUgcmV0dXJuLgorY29tbWl0IGIwMzA0ZTk2NzliZGZlYzZhYzQ1YTU3YjVjOTY1NDI2OTcyNDk0MTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUaHUgRGVjIDMxIDExOjMyOjQwIDIwMDkgLTA1MDAKIAotMjAwNC0wMi0wNyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICBVcGRhdGUgdmVyc2lvbgogCi0JKiBzcmMvdHlwZXMuYzogVXNlIDE2IGJ5dGUgbG9uZyBkb3VibGUgZm9yIFBPV0VSUEM2NC4KK2NvbW1pdCAyZTdlMDNkMDE0ZDljOWJmNDBlOTdjZTc1Y2JhMDg5YWQwNTJmYTZiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVGh1IERlYyAzMSAwNzo0MzoyMiAyMDA5IC0wNTAwCiAKLTIwMDQtMDEtMjUgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisgICAgRmluYWwgdXBkYXRlcyBiZWZvcmUgMy4wLjkKIAotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3Y5KTogU2hpZnQgdGhlIHBhcmFtZXRlciBhcnJheQotCXdoZW4gdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBpcyBwYXNzZWQgaW4gJW8wLgotCShmZmlfVjlfcmV0dXJuX3N0cnVjdCk6IFJlbmFtZSBpbnRvIGZmaV92OV9sYXlvdXRfc3RydWN0LgotCShmZmlfdjlfbGF5b3V0X3N0cnVjdCk6IEFsaWduIHRoZSBmaWVsZCBmb2xsb3dpbmcgYSBuZXN0ZWQgc3RydWN0dXJlCi0Jb24gYSB3b3JkIGJvdW5kYXJ5LiAgVXNlIG1lbW1vdmUgaW5zdGVhZCBvZiBtZW1jcHkuCi0JKGZmaV9jYWxsKTogVXBkYXRlIGNhbGwgdG8gZmZpX1Y5X3JldHVybl9zdHJ1Y3QuCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBEZWZpbmUgJ2N0eCcgb25seSBmb3IgVjguCi0JKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyKTogQ2xvbmUgaW50byBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OAotCWFuZCBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OS4KLQkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjgpOiBSZXR1cm4gbG9uZyBkb3VibGVzIGJ5IHJlZmVyZW5jZS4KLQlBbHdheXMgc2tpcCB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgRm9yIHN0cnVjdHVyZXMgYW5kIGxvbmcKLQlkb3VibGVzLCBjb3B5IHRoZSBhcmd1bWVudCBkaXJlY3RseS4KLQkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkpOiBTa2lwIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3Mgb25seQotCWlmIHJlcXVpcmVkLiAgU2hpZnQgdGhlIG1heGltdW0gZmxvYXRpbmctcG9pbnQgc2xvdCBhY2NvcmRpbmdseS4gIEZvcgotCWJpZyBzdHJ1Y3R1cmVzLCBjb3B5IHRoZSBhcmd1bWVudCBkaXJlY3RseTsgb3RoZXJ3aXNlLCBsZWZ0LWp1c3RpZnkgdGhlCi0JYXJndW1lbnQgYW5kIGNhbGwgZmZpX3Y5X2xheW91dF9zdHJ1Y3QgdG8gbGF5IG91dCB0aGUgc3RydWN0dXJlIG9uCi0JdGhlIHN0YWNrLgotCSogc3JjL3NwYXJjL3Y4LlM6IFVuZGVmIFNUQUNLRlJBTUUgYmVmb3JlIGRlZmluaW5nIGl0LgotCShmZmlfY2xvc3VyZV92OCk6IFBhc3MgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gIFVwZGF0ZSBjYWxsIHRvCi0JZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjguICBTaG9ydC1jaXJjdWl0IEZGSV9UWVBFX0lOVCBoYW5kbGluZy4KLQlTa2lwIHRoZSAndW5pbXAnIGluc24gd2hlbiByZXR1cm5pbmcgbG9uZyBkb3VibGVzIGFuZCBzdHJ1Y3R1cmVzLgotCSogc3JjL3NwYXJjL3Y5LlM6IFVuZGVmIFNUQUNLRlJBTUUgYmVmb3JlIGRlZmluaW5nIGl0LgotCShmZmlfY2xvc3VyZV92OSk6IEluY3JlYXNlIHRoZSBmcmFtZSBzaXplIGJ5IDIgd29yZHMuICBTaG9ydC1jaXJjdWl0Ci0JRkZJX1RZUEVfSU5UIGhhbmRsaW5nLiAgTG9hZCBzdHJ1Y3R1cmVzIGJvdGggaW4gaW50ZWdlcnMgYW5kCi0JZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHJldHVybi4KLQkqIFJFQURNRTogVXBkYXRlIHN0YXR1cyBvZiB0aGUgU1BBUkMgcG9ydC4KK2NvbW1pdCBhZWE3MDZjNTI4MjVjOGVlZTY3N2ZmYTdmZGJkZDNhZWQxNzI1NDkyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVHVlIERlYyAyOSAxMDowOTozMSAyMDA5IC0wNTAwCiAKLTIwMDQtMDEtMjQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICByZWFsbHkgMy4wLjlyYzEyCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyAobWFpbik6IFRyZWF0IHJlc3VsdCB2YWx1ZQotCWFzIG9mIHR5cGUgZmZpX2FyZy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMgKG1haW4pOiBGaXggQ0hFQ0suCitjb21taXQgMGNmZTYwZTlkMTNmMTMyYjg4OTk1Y2ZlZTQxZjIxNTYzNDRmNmZhMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFR1ZSBEZWMgMjkgMTA6MDY6MDQgMjAwOSAtMDUwMAogCi0yMDA0LTAxLTIyICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisgICAgMy4wLjlyYzEyCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIChjbHNfcmV0X3VpbnRfZm4pOiBUcmVhdCByZXN1bHQKLQl2YWx1ZSBhcyBvZiB0eXBlIGZmaV9hcmcsIG5vdCB1bnNpZ25lZCBpbnQuCitjb21taXQgMTRlMmU5MmU4NjQ1ODA0YjY5NDBiM2U5NmM5OGU5ZjdmMzg0YTZiMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFN1biBEZWMgMjcgMjE6MDM6MzMgMjAwOSAtMDUwMAogCi0yMDA0LTAxLTIxICBNaWNoYWVsIFJpdHplcnQgIDxyaXR6ZXJ0QHQtb25saW5lLmRlPgorICAgIDMuMC45cmMxMQogCi0JKiBmZmk2NC5jIChmZmlfcHJlcF9hcmdzKTogQ2FzdCB0aGUgUkhTIG9mIGFuIGFzc2lnbm1lbnQgaW5zdGVhZAotCW9mIHRoZSBMSFMuCitjb21taXQgODg0NDAyNzg3YmY4ZWFmN2VjMjA3MDg1MDM3Y2Y4YWNlMmY2NjBlYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMTI6NTc6MjMgMjAwOSAtMDUwMAogCi0yMDA0LTAxLTEyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgSFBVWCBzdXBwb3J0IGFuZCBhdnIzMiB0ZXN0IGZpeGVzLgogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFNldCBMRF9MSUJSQVJZX1BBVEhfMzIgZm9yCi0JU29sYXJpcy4KK2NvbW1pdCAwMWM3ODc1NmFmZjIyZWZiMWYxMjJmOGU5M2UwNjhkN2JmMjE4NWM3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAxMDowNToxOCAyMDA5IC0wNTAwCiAKLTIwMDQtMDEtMDggIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIDMuMC45cmM5CiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGFsbG9jYXRlX21tYXApOiBDYXN0IE1BUF9GQUlMRUQKLQl0byB2b2lkICouCitjb21taXQgNzA4Njg0NjQ2NTEzMjAyNjhkNzljNjg5NGRiNWE1MGZkYzExMDMyYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMDk6NTg6MDMgMjAwOSAtMDUwMAogCi0yMDAzLTEyLTEwICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorICAgIFJlbW92ZSB4ZmFpbHMgZm9yIG1pcHMgYW5kIGFybQogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogQ2FzdCBwb2ludGVycyB0bwotCXNpemVfdCBpbnN0ZWFkIG9mIGludC4KK2NvbW1pdCA4MzhkNGFkOTIwZWM4NWNmNWNhM2I1MTEyMjFkNjdmNmQ5YTk5MDI0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAwOTo1NzoyNyAyMDA5IC0wNTAwCiAKLTIwMDMtMTItMDQgIEhvc2FrYSBZdWppICA8aG9zQHRhbWFuZWdpLm9yZz4KKyAgICBSZW1vdmUgYSBidW5jaCBvZiB4ZmFpbHMuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IEluY2x1ZGUgPGZsb2F0Lmg+LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYyAobWFpbik6IFJlcGxhY2UgdmFyaWFibGUKLQlpbnQgaSB3aXRoIHVuc2lnbmVkIGxvbmcgdWwuCitjb21taXQgN2UzN2VhYWY3NzJmNDg5MDZlNjk2MThjNzczYjBhMzZjMzkyN2RlOQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMDc6NDY6NTAgMjAwOSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBOZXcgdGVzdCBjYXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBMaWtld2lzZS4KKyAgICBGaXggaHVnZV9zdHJ1Y3QgZm9yIHNvbGFyaXMKIAotMjAwMy0xMi0wMiAgSG9zYWthIFl1amkgIDxob3NAdGFtYW5lZ2kub3JnPgorY29tbWl0IDA3Y2M3YTM3MTk0YmMzNDA2NGViZWQ3ZjI3MjQzMzNhNzk4NDExYzgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDA3OjIzOjA0IDIwMDkgLTA1MDAKIAotCVBSIG90aGVyLzEzMjIxCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOgotCUFsaWduIGFyZ3VtZW50cyB0byAzMiBiaXRzLgorICAgIDMuMC45cmM4CiAKLTIwMDMtMTItMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCAyYjliZTE2ZmZhYmM4MTMyNjEyOGJjMWJiZGRkZmY4ZGRjNWQxM2QzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAwNzowNDo0NSAyMDA5IC0wNTAwCiAKLQlQUiBvdGhlci8xMzIyMQotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYzogTmV3IHRlc3QgY2FzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYzogTGlrZXdpc2UuCisgICAgMy4wLjlyYzgKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IENvc21ldGljcy4KK2NvbW1pdCA5NDU4ZDg4ZjY3NmU5YTIxYWI4OTkzYTU0ZTE2NzU0YjExNjg3NDE5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAwNzowMjoyNyAyMDA5IC0wNTAwCiAKLTIwMDMtMTEtMjYgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KKyAgICBSZWJhc2UgZnJvbSBHQ0MKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogSW5jbHVkZSA8ZmNudGwuaD4uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KK2NvbW1pdCA2YTM0MTI0MTc1OTNmMDY4YTA0ZGM2MTYzZjQyNjljYjI5NWFkNWNhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAwNjo1MTozMyAyMDA5IC0wNTAwCiAKLTIwMDMtMTEtMjIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBBZGQgQW5kcmVhcyBTY2h3YWIncyBwb3dlcnBjIGZpeAogCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogQ29udmVydCB0aGUgbW1hcCB0bwotCXRoZSByaWdodCB0eXBlLgorY29tbWl0IDM5Yzg3OTJlY2UxMDQzZjQxZjRjMzk1YTJjZTcxZjRjZjBmZjQ2NzQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgRGVjIDI1IDIxOjUyOjI4IDIwMDkgLTA1MDAKIAotMjAwMy0xMS0yMSAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgotCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgMy4wLjlyYzcKIAotCSogYWNpbmNsdWRlLm00OiBBZGQgQUNfRlVOQ19NTUFQX0JMQUNLTElTVC4KLQkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19GVU5DX01NQVBfQkxBQ0tMSVNULgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBhY2xvY2FsLm00OiBMaWtld2lzZS4KLQkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCi0JKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IEFkZCBpbmNsdWRlIGRpci4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBNTUFQIGRlZmluaXRpb25zLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogVXNlIE1NQVAgZnVuY3Rpb25hbGl0eQotCWZvciBmZmlfY2xvc3VyZSBpZiBhdmFpbGFibGUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KK2NvbW1pdCAxZDA0YWY1MmUzZTI0ZGI2OWY3NDIwNjQ2OTRjMjJmOGRmNWNjNzBlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIERlYyAyNSAwOTo1MDozNiAyMDA5IC0wNTAwCiAKLTIwMDMtMTEtMjAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBVcGRhdGVkIHNvbWUgbWlwcyBYRkFJTHMKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBNYWtlIHRoZSAtbGdjY19zIGNvbmRpdGlvbmFsLgorY29tbWl0IDI2ZTk1MDljOWI3OTI5YmM0ZmNmNjk3MDcxNjk5MDUxYTY1MmIxZmQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgRGVjIDI1IDAyOjE5OjIzIDIwMDkgLTA1MDAKIAotMjAwMy0xMS0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIENsZWFuIHVwIENoYW5nZUxvZy5saWJmZmkgZm9yIG9sZGVyIHBhdGNoZXMuCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWRkIERZTERfTElCUkFSWV9QQVRIIGZvciBkYXJ3aW4uCi0JQWRkIC1sZ2NjX3MgdG8gYWRkaXRpb25hbCBmbGFncy4KK2NvbW1pdCA5YzE1N2QzMjE1ZTQzOTM3NzdmODNlYjZmYTgwMWRmNjUyOGY0MGQ3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIERlYyAyNSAwMjoxNTo0MCAyMDA5IC0wNTAwCiAKLTIwMDMtMTEtMTIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBDbGVhbiB1cCB1bmRlZmluZV9BQ19BUkdfVkFSX1BSRUNJT1VTIHBhdGNoLgogCi0JKiBjb25maWd1cmUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuYW06IFBSIGxpYmdjai8xMTE0NywgaW5zdGFsbAotCXRoZSBmZml0YXJnZXQuaCBoZWFkZXIgZmlsZSBpbiBhIGdjYyB2ZXJzaW9uZWQgYW5kIHRhcmdldAotCWRlcGVuZGVudCBwbGFjZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCi0JKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorY29tbWl0IGQyMmRlMDViMGJmYzQ4MDc2NmJjMTI0MDYxNWNlMjgzMGVlZTcxYjgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgRGVjIDI1IDAyOjA0OjIzIDIwMDkgLTA1MDAKIAotMjAwMy0xMS0wOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEZpeCBwYXRjaGVzCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBQcmludCByZXN1bHQgYW5kIGNoZWNrCi0Jd2l0aCBkZy1vdXRwdXQgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorY29tbWl0IDFmZTNkYzdjMjBkYzRkYmQ4ZmVkMGQxOWM4NjE4MDI3ZDQ0ZWQ5NzEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgRGVjIDI1IDAxOjM5OjAwIDIwMDkgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IE1ha2UgZmZpX2Nsb3N1cmUKLQlzdGF0aWMuCisgICAgQWRkIHdpbmRvd3Mgc3VwcG9ydCBwYXRjaC4KIAotMjAwMy0xMS0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IGY3YzBiYzYxM2E4OGY3ZGJjMmQxOGIzNDVjMTBmYTQzODgzM2MxNzAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgRGVjIDI1IDAxOjIyOjExIDIwMDkgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTmV3IHRlc3QgY2FzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorICAgIDMuMC45cmM2CiAKLTIwMDMtMTEtMDggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCBjN2ZhMmRhODI2MDI1OGMxMWFiMWRjN2FjMDZmYjYxMWEyYzFiNTBmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVGh1IERlYyAyNCAwNzoyMjo0NCAyMDA5IC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IERvIGEgY2hlY2sgb24gdGhlIHJlc3VsdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jOiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorICAgIDMuMC45cmM2CiAKLTIwMDMtMTEtMDYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCBkYTExYmVjZTBmZGU2NmZjMDI2OGRiM2EwMTIwN2RkYTg1N2UyNWQyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVGh1IERlYyAyNCAwNTozNDo0NiAyMDA5IC0wNTAwCiAKLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBNb3ZlIHRoZSB2YWxpZGl0eSBjaGVjayBhZnRlcgotCXRoZSBpbml0aWFsaXphdGlvbi4KKyAgICBSZWxlYXNlIDMuMC45cmM1CiAKLTIwMDMtMTAtMjMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCBlMzM5OWIxMWVkZWFiNTQ2YjA2NmJmYzE4NTc0ZjNlZGI5MDVkMGRjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVGh1IERlYyAyNCAwMTowOTozMiAyMDA5IC0wNTAwCiAKLQkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogUmVwbGFjZQotCUZGSV9BU1NFUlQoRkFMU0UpIHdpdGggRkZJX0FTU0VSVCgwKS4KKyAgICBVcGRhdGUgUkVBRE1FCiAKLTIwMDMtMTAtMjIgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgMTE1YWIzNmZjZWVlNjk3NDBhMDFjZTQ5YmMyN2UxOTA4Y2MyMzdiMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFRodSBEZWMgMjQgMDA6MjI6MDAgMjAwOSAtMDUwMAogCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogUmVwbGFjZSB1bmRlZmluZWQgVUlOVDMyIGFuZCBmcmllbmRzIHdpdGgKLQlfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSkgYW5kIGZyaWVuZHMuCisgICAgVXBkYXRlIG1pc3NpbmcgY2hhbmdlcyBmb3IgMy4wLjlyNC4KIAotMjAwMy0xMC0yMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KK2NvbW1pdCBmOGM3YTI0NWJmNWE4MGJkN2U3MzBlYzAzZmNhZDE3YzhkY2ZjYjA3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgV2VkIERlYyAyMyAyMzo0NjoyMiAyMDA5IC0wNTAwCiAKLQkqIHNyYy9pYTY0L2ZmaS5jOiBSZXBsYWNlIEZBTFNFL1RSVUUgd2l0aCBmYWxzZS90cnVlLgorICAgIFN3aXRjaCB0byBxdWlsdC4gUmViYXNlIHRvIGxhdGVzdCBHQ0MuCiAKLTIwMDMtMTAtMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCBjZTgwNjc3MmYwMjM4N2I5YTc0ZjY0OTZhMjYzYTM2OGJjY2Q1ZDU5CitNZXJnZTogY2Q5ODgxMyBkY2MxZjZiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gT2N0IDUgMDA6NDE6MzUgMjAwOSAtMDQwMAogCi0JKiBjb25maWd1cmUuaW46IEFDX0xJTktfRklMRVMoZmZpdGFyZ2V0LmgpLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRAZ2l0aHViLmNvbTphdGdyZWVuL2xpYmZmaQogCi0yMDAzLTEwLTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgotCSAgICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IGRjYzFmNmI0ZjFmZmQyNzEzYmY2OGI3OTFhMTNmODVkNDU1YzhiMWIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBPY3QgNSAwMDoyOTozMyAyMDA5IC0wNDAwCiAKLQlBdm9pZCB0aGF0IGZmaS5oIGluY2x1ZGVzIGZmaWNvbmZpZy5oLgorICAgIE1vcmUgY2xlYW4gdXAuCiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogSW5jbHVkZSBmZml0YXJnZXQuaCBmaWxlcwotCShUQVJHRVRfU1JDX01JUFNfR0NDKTogUmVuYW1lZCB0byBUQVJHRVRfU1JDX01JUFNfSVJJWC4KLQkoVEFSR0VUX1NSQ19NSVBTX1NHSSk6IFJlbW92ZWQuCi0JKE1JUFNfR0NDKTogUmVuYW1lZCB0byBUQVJHRVRfU1JDX01JUFNfSVJJWC4KLQkoTUlQU19TR0kpOiBSZW1vdmVkLgotCShDTEVBTkZJTEVTKTogUmVtb3ZlZC4KLQkobW9zdGx5Y2xlYW4tYW0sIGNsZWFuLWFtLCBtb3N0bHljbGVhbi1zdWIsIGNsZWFuLXN1Yik6IE5ldwotCXRhcmdldHMuCi0JKiBhY2NvbmZpZy5oOiBSZW1vdmVkLgotCSogY29uZmlndXJlLmluOiBDb21wdXRlIHNpemVvZnMgb25seSBmb3IgZG91YmxlIGFuZCBsb25nIGRvdWJsZS4KLQlVc2UgdGhlbSB0byBkZWZpbmUgYW5kIHN1YnN0IEhBVkVfTE9OR19ET1VCTEUuICBJbmNsdWRlIGNvbW1lbnRzCi0JaW50byBBQ19ERUZJTkUgaW5zdGVhZCBvZiB1c2luZyBhY2NvbmZpZy5oLiAgQ3JlYXRlCi0JaW5jbHVkZS9mZml0YXJnZXQuaCBpbnN0ZWFkIG9mIGluY2x1ZGUvZmZpY29uZmlnLmguICBSZW5hbWUKLQlNSVBTX0dDQyB0byBNSVBTX0lSSVgsIGRyb3AgTUlQU19TR0kgc2luY2Ugd2UgYXJlIGluIGdjYydzIHRyZWUuCi0JQUNfREVGSU5FIEVIX0ZSQU1FX0ZMQUdTLgotCSogaW5jbHVkZS9NYWtlZmlsZS5hbSAoRElTVENMRUFORklMRVMpOiBOZXcgYXV0b21ha2UgbWFjcm8uCi0JKGhhY2tfREFUQSk6IEFkZCBmZml0YXJnZXQuaC4KLQkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZSBhbGwgc3lzdGVtIHNwZWNpZmljIGRlZmluaXRpb25zLgotCURlY2xhcmUgcmF3IEFQSSBldmVuIGlmIGl0IGlzIG5vdCBpbnN0YWxsZWQsIHdoeSBib3RoZXI/Ci0JVXNlIGxpbWl0cy5oIGluc3RlYWQgb2YgU0laRU9GXyogdG8gZGVmaW5lIGZmaV90eXBlXyouICBEbwotCW5vdCBkZWZpbmUgRUhfRlJBTUVfRkxBR1MsIGl0IGlzIGluIGZmaWNvbmZpZy5oIG5vdy4gIEluY2x1ZGUKLQlmZml0YXJnZXQuaCBpbnN0ZWFkIG9mIGZmaWNvbmZpZy5oLiAgUmVtb3ZlIEFMSUdOIG1hY3JvLgotCShVSU5UX0FSRywgSU5UX0FSRyk6IFJlbW92ZWQsIHVzZSBmZmlfYXJnIGFuZCBmZmlfc2FyZyBpbnN0ZWFkLgotCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKGJvb2wpOiBEbyBub3QgZGVmaW5lLgotCShmZmlfYXNzZXJ0KTogQWNjZXB0IGZhaWxlZCBhc3NlcnRpb24uCi0JKGZmaV90eXBlX3Rlc3QpOiBSZXR1cm4gdm9pZCBhbmQgYWNjZXB0IGZpbGUvbGluZS4KLQkoRkZJX0FTU0VSVCk6IFBhc3Mgc3RyaW5naXplZCBmYWlsZWQgYXNzZXJ0aW9uLgotCShGRklfQVNTRVJUX0FUKTogTmV3IG1hY3JvLgotCShGRklfQVNTRVJUX1ZBTElEX1RZUEUpOiBOZXcgbWFjcm8uCi0JKFVJTlQ4LCBTSU5UOCwgVUlOVDE2LCBTSU5UMTYsIFVJTlQzMiwgU0lOVDMyLAotCVVJTlQ2NCwgU0lOVDY0KTogRGVmaW5lIGhlcmUgd2l0aCBnY2MncyBfX2F0dHJpYnV0ZV9fIG1hY3JvCi0JaW5zdGVhZCBvZiBpbiBmZmkuaAotCShGTE9BVDMyLCBBTElHTik6IERlZmluZSBoZXJlIGluc3RlYWQgb2YgaW4gZmZpLmgKLQkqIGluY2x1ZGUvZmZpLW1pcHMuaDogUmVtb3ZlZC4gIEl0cyBjb250ZW50IG1vdmVkIHRvCi0Jc3JjL21pcHMvZmZpdGFyZ2V0LmggYWZ0ZXIgc2VwYXJhdGluZyBhc3NlbWJseSBhbmQgQyBzZWN0aW9ucy4KLQkqIHNyYy9hbHBoYS9mZmkuYywgc3JjL2FscGhhL2ZmaS5jLCBzcmMvamF2YV9yYXdfYXBpLmMKLQlzcmMvcHJlcF9jaWYuYywgc3JjL3Jhd19hcGkuYywgc3JjL2lhNjQvZmZpLmMsCi0Jc3JjL21pcHMvZmZpLmMsIHNyYy9taXBzL24zMi5TLCBzcmMvbWlwcy9vMzIuUywKLQlzcmMvbWlwcy9mZml0YXJnZXQuaCwgc3JjL3NwYXJjL2ZmaS5jLCBzcmMveDg2L2ZmaTY0LmM6Ci0JU0laRU9GX0FSRyAtPiBGRklfU0laRU9GX0FSRy4KLQkqIHNyYy9pYTY0L2ZmaS5jOiBJbmNsdWRlIHN0ZGJvb2wuaCAocHJvdmlkZWQgYnkgR0NDIDIuOTUrKS4KLQkqIHNyYy9kZWJ1Zy5jIChmZmlfYXNzZXJ0KTogQWNjZXB0IHN0cmluZ2l6ZWQgZmFpbGVkIGFzc2VydGlvbi4KLQkoZmZpX3R5cGVfdGVzdCk6IFJld3JpdHRlbi4KLQkqIHNyYy9wcmVwLWNpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSwgZmZpX3ByZXBfY2lmKTogQ2FsbAotCUZGSV9BU1NFUlRfVkFMSURfVFlQRS4KLQkqIHNyYy9hbHBoYS9mZml0YXJnZXQuaCwgc3JjL2FybS9mZml0YXJnZXQuaCwKLQlzcmMvaWE2NC9mZml0YXJnZXQuaCwgc3JjL202OGsvZmZpdGFyZ2V0LmgsCi0Jc3JjL21pcHMvZmZpdGFyZ2V0LmgsIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oLAotCXNyYy9zMzkwL2ZmaXRhcmdldC5oLCBzcmMvc2gvZmZpdGFyZ2V0LmgsCi0Jc3JjL3NoNjQvZmZpdGFyZ2V0LmgsIHNyYy9zcGFyYy9mZml0YXJnZXQuaCwKLQlzcmMveDg2L2ZmaXRhcmdldC5oOiBOZXcgZmlsZXMuCi0JKiBzcmMvYWxwaGEvb3NmLlMsIHNyYy9hcm0vc3lzdi5TLCBzcmMvaWE2NC91bml4LlMsCi0Jc3JjL202OGsvc3lzdi5TLCBzcmMvbWlwcy9uMzIuUywgc3JjL21pcHMvbzMyLlMsCi0Jc3JjL3Bvd2VycGMvYWl4LlMsIHNyYy9wb3dlcnBjL2Rhcndpbi5TLAotCXNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYywgc3JjL3Bvd2VycGMvbGludXg2NC5TLAotCXNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TLCBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TLAotCXNyYy9wb3dlcnBjL3N5c3YuUywgc3JjL3MzOTAvc3lzdi5TLCBzcmMvc2gvc3lzdi5TLAotCXNyYy9zaDY0L3N5c3YuUywgc3JjL3NwYXJjL3Y4LlMsIHNyYy9zcGFyYy92OS5TLAotCXNyYy94ODYvc3lzdi5TLCBzcmMveDg2L3VuaXg2NC5TLCBzcmMveDg2L3dpbjMyLlM6Ci0JaW5jbHVkZSBmZmljb25maWcuaAorY29tbWl0IDI4MjlmNTk0MWEyMjNiOWQ4NTFkOGFiNjMxODMxOGU2MTk3ZDdlMDEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBPY3QgNSAwMDoyODowMyAyMDA5IC0wNDAwCiAKLTIwMDMtMTAtMjAgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIENsZWFuIHVwCiAKLQkqIHNyYy9taXBzL2ZmaS5jOiBVc2UgX0FCSU4zMiwgX0FCSU8zMiBpbnN0ZWFkIG9mIGV4dGVybmFsCi0JX01JUFNfU0lNX05BQkkzMiwgX01JUFNfU0lNX0FCSTMyLgorY29tbWl0IGNkOTg4MTNkZTUxN2VhNjQwNDE2MzdlM2U3OGQyN2EwMDFkNmQzYjQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBPY3QgNSAwMDoyNToyOSAyMDA5IC0wNDAwCiAKLTIwMDMtMTAtMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBGcm9tIEplbnMgUmVoc2Fjay4gIEZpeCBmb3IgNjQtYml0IEFJWC4KIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogRGVjbGFyZSBieXRlcyBhZ2Fpbi4KLQlVc2VkIHdoZW4gRkZJX0RFQlVHID0gMS4KK2NvbW1pdCBlNGE5MWRlNzY2YWNjNDdmNmM1MGYxM2NjMTE3MTlhNjVlMjNlY2JhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gT2N0IDUgMDA6MTY6MTcgMjAwOSAtMDQwMAogCi0yMDAzLTEwLTE0ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIEZyb20gQWJkdWxheml6IEdodWxvdW0uICBBZGRzIHNwZWNpYWwgY2FzZSBmb3IgU25vdyBMZW9wYXJkLgogCi0JKiBzcmMvdHlwZXMuYyAoZG91YmxlLCBsb25nZG91YmxlKTogRGVmYXVsdCBQT1dFUlBDNjQgdG8gOCBieXRlIHNpemUKLQlhbmQgYWxpZ24uCitjb21taXQgMzQyNWE3NjNiY2RhYWRiOGI0MzAyMjZmNDI3ZWM4MzNhZmRjYzk2YQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE9jdCA0IDIzOjU3OjI5IDIwMDkgLTA0MDAKIAotMjAwMy0xMC0wNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgRml4IGRldGVjdGlvbiBvZiBmcmVlL29wZW5ic2QuICBGcm9tIEFsZXhpcyBCYWxsaWVyLgogCi0JKiBpbmNsdWRlL2ZmaV9taXBzLmg6IERlZmluZSBGRklfTUlQU19OMzIgZm9yIE4zMi9ONjQgQUJJcywKLQlGRklfTUlQU19PMzIgZm9yIE8zMiBBQkkuCitjb21taXQgMjM0MGU3YTc3NzkwMmRlNjE0OTlkNDc4MjNhZDhkNWUwZWViNjIwMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE9jdCA0IDIzOjUzOjE3IDIwMDkgLTA0MDAKIAotMjAwMy0xMC0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEFWUiBzdXBwb3J0CiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogU2V0IExEX0xJQlJBUllfUEFUSF82NCBmb3IKLQlTUEFSQzY0LiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorY29tbWl0IDVjYmUyMDU4YzEyOGU4NDg0NDZhZTc5ZmUxNWVlNTQyNjBhOTA1NTkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBPY3QgNCAyMzo1MzoxMSAyMDA5IC0wNDAwCiAKLTIwMDMtMDktMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBJbml0aWFsIHN0YW5kLWFsb25lIHBhdGNoLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogWGZhaWwgbWlwcywgYXJtLAotCXN0cm9uZ2FybSwgeHNjYWxlLiBDbGVhbnVwIHdoaXRlc3BhY2VzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KK2NvbW1pdCBjNmRkZGJkMDJiYWQ5NjU0ZWQ1OGNkYjBmZWIzNjA5MzRkMTA1ZGVjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gT2N0IDQgMDg6MTE6MzMgMjAwOSAtMDQwMAogCi0yMDAzLTA5LTE4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisgICAgSW5pdGlhbCBjb21taXQKIAotCSogc3JjL3Bvd2VycGMvYWl4LlM6IENsZWFudXAgd2hpdGVzcGFjZXMuCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBMaWtld2lzZS4KK2NvbW1pdCA1ZmZjMGMzNzQ4NmZiMTUzOGJjY2MwY2E3YWNjODA3ZDRmMWFmOTMyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gT2N0IDQgMDc6NTg6MjIgMjAwOSAtMDQwMAogCi0yMDAzLTA5LTE4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgVXBkYXRlIHZlcnNpb24gdG8gMy4wLjlyYzEuICBBZGQgbW9yZSB1c2VmdWwgdGhpbmdzIHRvIC5naXRpZ25vcmUuCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBDbGVhbnVwIHdoaXRlc3BhY2VzLCBjb21tZW50IGZvcm1hdHRpbmcuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCitjb21taXQgYmQyOWY4M2VlOWY2ZmE2YjY1YWRlZTlkM2Y1NzgzNGYzNjRkOTg4NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIFNlcCAyOSAxMjowNzoyNiAyMDA5IC0wNDAwCiAKLTIwMDMtMDktMTggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KLQkgICAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorICAgIEFkZCAuZ2l0aWdub3JlCiAKLQkqIHNyYy90eXBlcy5jIChkb3VibGUpOiBBZGQgQUlYIGFuZCBEYXJ3aW4gdG8gdGhlIHJpZ2h0IFRZUEVERUYuCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBSZW1vdmUgdGhlIHBvaW50ZXIgdG8gdGhlIG91dGdvaW5nCi0JcGFyYW1ldGVyIHN0YWNrLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBIYW5kbGUgc3RydWN0dXJlcwotCWFjY29yZGluZyB0byB0aGUgRGFyd2luL0FJWCBBQkkuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBMaWtld2lzZS4KLQlSZW1vdmUgdGhlIG91dGdvaW5nIHBhcmFtZXRlciBzdGFjayBsb2dpYy4gU2ltcGxpZnkgdGhlIGV2YWx1YXRpb24KLQlvZiB0aGUgZGlmZmVyZW50IENBU0UgdHlwZXMuCi0JKGZmaV9wcmVwX2Nsb3VzdXJlKTogQXZvaWQgdGhlIGNhc3RzIG9uIGx2YWx1ZXMuIENoYW5nZSB0aGUgYnJhbmNoCi0Jc3RhdGVtZW50IGluIHRoZSB0cmFtcG9saW5lIGNvZGUuCitjb21taXQgOTQ3NGY4NTNmODNlM2YwMTY3YzFiMzA2MTc3MzIxYmZjYzkzZTU2ZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIFNlcCAyOSAxMToxMzowMiAyMDA5IC0wNDAwCiAKLTIwMDMtMDktMTggIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIFJlbW92ZSBvbGQgQ1ZTUk9PVCBmaWxlcy4KIAotCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogVGFrZSBhY2NvdW50IGludG8gdGhlIGFsaWduZW1lbnQKLQlmb3IgdGhlIHJlZ2lzdGVyIHNpemUuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogSGFuZGxlIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlCi0JYWRkcmVzcyBjb3JyZWN0bHkuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0eXBlIHdoZW4KLQl0aGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvciB0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZS4KLQkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBGaXggdGhlIHN0YWNrIGxheW91dCBmb3IKLQl0aGUgNjQtYml0IHJldHVybiB2YWx1ZS4gIFVwZGF0ZSBjb3B5cmlnaHQgeWVhcnMuCitjb21taXQgMGMyNTI3NWVjMjRiZmUyYzJjMjVhMDAwNDY1ZjA5NTBlZjlkZDUxYgorQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFdlZCBBdWcgMTkgMTI6NTc6MzQgMjAwOSArMDAwMAogCi0yMDAzLTA5LTE3ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBBcHBseSBEYXZlIEtvcm4ncyBjeWd3aW4vR0NDIGNoYW5nZXMKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBTZWFyY2ggaW4KLQlzcmNkaXIgZm9yIGZmaV9taXBzLmguCitjb21taXQgMzkyMjhjMjdlZDNmNjc3YTk1YjQ2MzgwYThkMzE2MDJiNTc3N2UxYQorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVHVlIEp1biAxNiAxODowMDo0NyAyMDA5ICswMDAwCiAKLTIwMDMtMDktMTIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgMjAwOS0wNi0xNiAgV2ltIExld2lzICA8d2ltbEBoaGhoLm9yZz4KKyAgICAKKyAgICAJKiBzcmMvcG93ZXJwYy9mZmkuYzogQXZvaWQgY2xvYmJlcmluZyBjcjMgYW5kIGNyNCwgd2hpY2ggYXJlCisgICAgCXN1cHBvc2VkIHRvIGJlIGNhbGxlZS1zYXZlZC4KKyAgICAJKiBzcmMvcG93ZXJwYy9zeXN2LlMgKHNtYWxsX3N0cnVjdF9yZXR1cm5fdmFsdWUpOiBGaXggb3ZlcnJ1biBvZgorICAgIAlyZXR1cm4gYnVmZmVyIGZvciBvZGQtc2l6ZSBzdHJ1Y3RzLgogCi0JKiBzcmMvcHJlcF9jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBJbmNsdWRlIHRhaWwgcGFkZGluZyBpbgotCXN0cnVjdHVyZSBzaXplLgotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBDb3JyZWN0Ci0JcGxhY2VtZW50IG9mIGZsb2F0IHJlc3VsdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjIChjbG9zdXJlX3Rlc3RfZm4xKTogQ29ycmVjdAotCWNhc3Qgb2YgInJlc3AiIGZvciBiaWctZW5kaWFuIDY0IGJpdCBtYWNoaW5lcy4KK2NvbW1pdCA1ZTkzY2M3MDRkMTI3YzJjOGFlN2Y1ZDJjZWY2MjExNDVkNDNlNzc3CitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUdWUgSnVuIDE2IDE3OjQxOjQ3IDIwMDkgKzAwMDAKIAotMjAwMy0wOS0xMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICAyMDA5LTA2LTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorICAgIAorICAgIAlQUiBsaWJmZmkvNDA0NDQKKyAgICAJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IEFkZAorICAgIAlhbGxvd19zdGFja19leGVjdXRlIGZvciBEYXJ3aW4uCiAKLQkqIHNyYy90eXBlcy5jIChkb3VibGUsIGxvbmdkb3VibGUpOiBNZXJnZSBpZGVudGljYWwgU0ggYW5kIEFSTQotCXR5cGVkZWZzLCBhbmQgYWRkIFBPV0VSUEM2NC4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBDb3JyZWN0IG5leHRfYXJnIGNhbGMgZm9yCi0Jc3RydWN0IHNwbGl0IG92ZXIgZ3ByIGFuZCByZXN0LgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENvcnJlY3QgaW50YXJnX2NvdW50IGZvciBzdHJ1Y3R1cmVzLgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogRml4IGdwciBvZmZzZXRzLgorY29tbWl0IGI1MDlhZjg5NTlkYzM3MWI5MjM5MmM2MjM1MjJlYTZmNDk0NmE3MWQKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFR1ZSBKdW4gMTYgMTY6MTc6NTIgMjAwOSArMDAwMAogCi0yMDAzLTA5LTA5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgCSogY29uZmlndXJlLmFjIChUQVJHRVRESVIpOiBBZGQgbWlzc2luZyBibGFuayBsaW5lcy4KKyAgICAJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVikgSGFuZGxlIHN0cnVjdAotCXBhc3NpbmcgY29ycmVjdGx5LgorY29tbWl0IGQ1N2U5NmRjNTZlZTc2ZmJiYjliNTlkNzNhZWFhOTIzNTRkYjVlY2IKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFR1ZSBKdW4gMTYgMDk6NTk6MDIgMjAwOSArMDAwMAogCi0yMDAzLTA5LTA5ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIDIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBGaXggcHJpbnRmIGZvcm1hdAorICAgICAgICAgICAgc3BlY2lmaWVycy4KKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IEFkIHg4NiBYRkFJTHMuCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogRml4IGRnLWV4Y2Vzcy1lcnJvcnMuCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSSXVMTCk6IERlZmluZS4KIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IGIwMWQ2ZDE5ODJjOWUwMjA1MDcwMjliZmQ1YTU4YThjNjBkMTExZmEKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFR1ZSBKdW4gMTYgMDk6NDQ6NTQgMjAwOSArMDAwMAogCi0yMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiB4ZmFpbCBldmVyeXdoZXJlLgorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBMaWtld2lzZS4KIAotCSogTWFrZWZpbGUuYW06IFJlbW92ZSBidWlsZCBydWxlcyBmb3IgZmZpdGVzdC4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IDM1YjZkZWQxMzg1OTE5MDBhODgwNTVhOGE4YWMxZmFkYzI5YTc2ZDYKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIEZyaSBKdW4gMTIgMTU6Mjk6MjAgMjAwOSArMDAwMAogCi0yMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgMjAwOS0wNi0xMSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWwgc2gqLSotbGludXgtKi4KKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbCBzaCotKi0qLgorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IExpa2V3aXNlLgogCi0JKiBzcmMvamF2YV9yYXdfYXBpLmM6IEluY2x1ZGUgPHN0ZGxpYi5oPiB0byBmaXggY29tcGlsZXIgd2FybmluZwotCWFib3V0IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGFib3J0KCkuCitjb21taXQgYWNjNDY2MDVmMmQ5NWQ2N2Q2OTM5OGU3NjQ0NjEwZjEwYTE1N2NlMworQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgRnJpIEp1biAxMiAxNDoyMToyOCAyMDA5ICswMDAwCiAKLTIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICAyMDA5LTA2LTEyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogQ2hhbmdlTG9nLmxpYmZmaTogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0CisgICAgICAgICAgICBzcGVjaWZpZXJzLgorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IGluY2x1ZGUgc3RkaW50LmguCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgZGVqYWdudSB0ZXN0IGZyYW1ld29yay4gRml4ZXMgUFIgb3RoZXIvMTE0MTEuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5pbjogQWRkIGRlamFnbnUgdGVzdCBmcmFtZXdvcmsuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgMTZkMTk5NmVkMDc5N2JkN2MxMWFjYTJiMGZlN2U3NzQ4NzUxYWFmNgorQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFRodSBKdW4gMTEgMTQ6Mjc6NDIgMjAwOSArMDAwMAogCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBCdWlsdAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBOZXcgZmlsZS4KLQkqIHRlc3RzdWl0ZS9jb25maWcvZGVmYXVsdC5leHA6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IE5ldyBmaWxlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisgICAgdXBkYXRlIGNoYW5nZWxvZwogCitjb21taXQgOTJhNTE1YzMzZWZlOTFiZTNjYjAyNThmMDFjNjNhZmYyMDg0ODljNworQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFRodSBKdW4gMTEgMTQ6Mjc6MjggMjAwOSArMDAwMAogCi0yMDAzLTA4LTEzICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICB1c2UgZmZpX2Nsb3N1cmVfYWxsb2MgaW5zdGVhZCBvZiBzdGFjay1iYXNlZCBjbG9zdXJlCiAKLQkqIHNyYy9zaC9mZmkuYyAoT0ZTX0lOVDE2KTogU2V0IDAgZm9yIGxpdHRsZSBlbmRpYW4gY2FzZS4gIFVwZGF0ZQotCWNvcHlyaWdodCB5ZWFycy4KK2NvbW1pdCBlNDM2MzE2MGJhOWU1MDE2N2Y5Y2EwYTczOTlkNTM3YTFkMmNkMGNlCitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgVGh1IEp1biAxMSAxNDoyNjoyMyAyMDA5ICswMDAwCiAKLTIwMDMtMDgtMDIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgcmVtb3ZlIHVudXNlZCBleHRlcm4KIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IE1vZGlmeSBmb3IgY2hhbmdlZCBnY2MKLQlzdHJ1Y3R1cmUgcGFzc2luZy4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogUmVtb3ZlIGNvZGUgd3JpdGluZyB0byBwYXJtIHNhdmUgYXJlYS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogVXNlIHJldHVybgotCWFkZHJlc3MgaW4gbHIgZnJvbSBmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCBjYWxsIHRvIGNhbGN1bGF0ZQotCXRhYmxlIGFkZHJlc3MuICBPcHRpbWl6ZSBmdW5jdGlvbiB0YWlsLgorY29tbWl0IDFkYzI3ODFkMmJhMzhmNWYwMDBmZjcwMDY5ZDYxN2ZiMjFlMWQyYWYKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBUaHUgSnVuIDExIDExOjM2OjE2IDIwMDkgKzAwMDAKIAotMjAwMy0wNy0yOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIHJlbW92ZSBub3QteWV0LWFwcGxpZWQgY2hhbmdlbG9nIGVudHJpZXMKIAotCSogc3JjL3NwYXJjL2ZmaS5jOiBIYW5kbGUgYWxsIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4KLQkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4gRml4ZXMgc2Vjb25kIHBhcnQgb2YgUFIgdGFyZ2V0LzExNDEwLgorY29tbWl0IGJiMjc3MzVmZTY4OWRhYzk3ZWMwZGM4NDdlZDhkM2Q1MTk2MjAxMDkKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBXZWQgSnVuIDEwIDEwOjQyOjM2IDIwMDkgKzAwMDAKIAotMjAwMy0wNy0xMSAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgorICAgIGFkZCB3aW42NCBzdXBwb3J0CiAKLQkqIFJFQURNRTogTm90ZSB0aGF0IGxpYmZmaSBpcyBub3QgcGFydCBvZiBHQ0MuICBVcGRhdGUgdGhlIHByb2plY3QKLQlVUkwgYW5kIHN0YXR1cy4KK2NvbW1pdCBiMmE1NGMxMDBjNzQ4NTRhNDA5ODIwODE3ZDU0NjE3ZmRkYTM5ZWI4CitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBNb24gSnVuIDggMTY6NTA6NDkgMjAwOSArMDAwMAogCi0yMDAzLTA2LTE5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CisgICAgMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbHMuCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IEFkZCB4ZmFpbHMuCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jOiBBZGQgeGZhaWwgeDg2XzY0LSotbGludXgtKi4KKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IEFkZCB4ZmFpbHMuCisgICAgCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogQWRkIF9fVU5VU0VEX18gdG8gYXJncy4KKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IExpa2V3aXNlLgorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogTGlrZXdpc2UuCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmM6ICBMaWtld2lzZS4KIAotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogSW5jbHVkZSBmZmkuaC4KK2NvbW1pdCAyNTcyM2U3MTQxZjczZDM3MzZkNzI0NGI5ODBjODlkOTdkYjg1MmI2CitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBGcmkgSnVuIDUgMTM6MDM6NDAgMjAwOSArMDAwMAogCi0yMDAzLTA2LTEzICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICAyMDA5LTA2LTA1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6IEltcG9ydCBmcm9tIGdjYy4KIAotCSogc3JjL3g4Ni9zeXN2LlM6IEF2b2lkIGdhcy1vbmx5IC51bGViMTI4Ly5zbGViMTI4IGRpcmVjdGl2ZXMuCi0JVXNlIEMgc3R5bGUgY29tbWVudHMuCitjb21taXQgNzA3NTgxOTljN2NkNDFmNDExOTg3MzYwY2NiMzAyYjQ5N2E1NmRjOQorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVGh1IEp1biA0IDE2OjI5OjU4IDIwMDkgKzAwMDAKIAotMjAwMy0wNi0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAcnIuaWlqNHUub3IuanA+CisgICAgIDIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogRml4IG1pc2FwcGxpZWQgbWVyZ2UgZnJvbSBnY2MuCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgU0htZWRpYSBzdXBwb3J0LiAgRml4IGEgdHlwbyBvZiBTSCBzdXBwb3J0LgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmUuaW4gKHNoNjQtKi1saW51eCosIHNoNSotKi1saW51eCopOiBBZGQgdGFyZ2V0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIFNIbWVkaWEgc3VwcG9ydC4KLQkqIHNyYy9zaDY0L2ZmaS5jOiBOZXcgZmlsZS4KLQkqIHNyYy9zaDY0L3N5c3YuUzogTmV3IGZpbGUuCitjb21taXQgZThiYjEyNTYzZjlhYTIzZGRmMzZmYTZhNWI5MmIxNmI1YzNlMWE3ZgorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVGh1IEp1biA0IDE0OjU5OjE4IDIwMDkgKzAwMDAKIAotMjAwMy0wNS0xNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgCSogc3JjL21pcHMvbzMyLlMsCisgICAgCXNyYy9taXBzL24zMi5TOiBGaXggbGljZW5jZSBmb3JtYXR0aW5nLgogCi0JKiBjb25maWd1cmUuaW4gKEhBVkVfUk9fRUhfRlJBTUUpOiBDaGVjayB3aGV0aGVyIC5laF9mcmFtZSBzZWN0aW9uCi0Jc2hvdWxkIGJlIHJlYWQtb25seS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgotCSogaW5jbHVkZS9mZmkuaC5pbiAoRUhfRlJBTUVfRkxBR1MpOiBEZWZpbmUuCi0JKiBzcmMvYWxwaGEvb3NmLlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuICBJbmNsdWRlIGZmaS5oLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuICBVc2UgcGNyZWwgZW5jb2RpbmcKLQlpZiAtZnBpYy8tZlBJQy8tbXJlbG9jYXRhYmxlLgotCSogc3JjL3Bvd2VycGMvcG93ZXJwY19jbG9zdXJlLlM6IExpa2V3aXNlLgotCSogc3JjL3NwYXJjL3Y4LlM6IElmIEhBVkVfUk9fRUhfRlJBTUUgaXMgZGVmaW5lZCwgZG9uJ3QgaW5jbHVkZQotCSN3cml0ZSBpbiAuZWhfZnJhbWUgZmxhZ3MuCi0JKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCi0JKiBzcmMveDg2L3VuaXg2NC5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuCi0JKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuICBVc2UgcGNyZWwgZW5jb2RpbmcgaWYgLWZwaWMvLWZQSUMuCi0JKiBzcmMvczM5MC9zeXN2LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4gIEluY2x1ZGUgZmZpLmguCitjb21taXQgZDY2YThlMzJjMzY3MTQ3OWUzY2UwZjY4MTk2NzNlNTkzMmJhNmI3ZgorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVGh1IEp1biA0IDE0OjQzOjQwIDIwMDkgKzAwMDAKIAotMjAwMy0wNS0wNyAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorICAgIDIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgIAkqIHNyYy94ODYvZGFyd2luLlM6IEZpeCBsaWNlbmNlIGZvcm1hdHRpbmcuCisgICAgCXNyYy94ODYvd2luMzIuUzogTGlrZXdpc2UuCisgICAgCXNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCisgICAgCXNyYy9zaC9zeXN2LlM6IExpa2V3aXNlLgogCi0JRml4ZXMgUFIgYm9vdHN0cmFwLzEwNjU2Ci0JKiBjb25maWd1cmUuaW4gKEhBVkVfQVNfUkVHSVNURVJfUFNFVURPX09QKTogVGVzdCBhc3NlbWJsZXIKLQlzdXBwb3J0IGZvciAucmVnaXN0ZXIgcHNldWRvLW9wLgotCSogc3JjL3NwYXJjL3Y4LlM6IFVzZSBpdC4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDdjM2I3ZmQ2YjVkYjc0NmI1YjA5YTcxOGYzMDQ0ZjgxMTM3MmY5NDEKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFRodSBKdW4gNCAxNDozOToyMCAyMDA5ICswMDAwCiAKLTIwMDMtMDQtMTggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIDIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgIAkqIHNyYy9zaDY0L2ZmaS5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLiAgV2FzIG1pc3NpbmcgZnJvbSBtZXJnZQorICAgIAlvZiBBbmRyZWFzIFRvYmxlcidzIHBhdGNoIGZyb20gMjAwNi0wNC0yMi4KIAotCSogaW5jbHVkZS9mZmkuaC5pbiAoUE9XRVJQQzY0KTogRGVmaW5lIGlmIDY0LWJpdC4KLQkoZW51bSBmZmlfYWJpKTogQWRkIEZGSV9MSU5VWDY0IG9uIFBPV0VSUEMuCi0JTWFrZSBpdCB0aGUgZGVmYXVsdCBvbiBQT1dFUlBDNjQuCi0JKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgdG8gMjQgb24gUE9XRVJQQzY0LgotCSogY29uZmlndXJlLmluOiBDaGFuZ2UgcG93ZXJwYy0qLWxpbnV4KiBpbnRvIHBvd2VycGMqLSotbGludXgqLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGhpZGRlbik6IERlZmluZS4KLQkoZmZpX3ByZXBfYXJnc19TWVNWKTogUmVuYW1lZCBmcm9tCi0JZmZpX3ByZXBfYXJncy4gIENhc3QgcG9pbnRlcnMgdG8gdW5zaWduZWQgbG9uZyB0byBzaHV0IHVwIHdhcm5pbmdzLgotCShOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQsCi0JQVNNX05FRURTX1JFR0lTVEVSUzY0KTogTmV3LgotCShmZmlfcHJlcF9hcmdzNjQpOiBOZXcgZnVuY3Rpb24uCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIEZGSV9MSU5VWDY0IEFCSS4KLQkoZmZpX2NhbGwpOiBMaWtld2lzZS4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IExpa2V3aXNlLgotCShmbHVzaF9pY2FjaGUpOiBTdXJyb3VuZCBieSAjaWZuZGVmIFBPV0VSUEM2NC4KLQkoZmZpX2RibGZsKTogTmV3IHVuaW9uIHR5cGUuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogVXNlIGl0IHRvIGF2b2lkIGFsaWFzaW5nIHByb2JsZW1zLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IE5ldyBmdW5jdGlvbi4KLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IFN1cnJvdW5kIHdob2xlIGZpbGUgYnkgI2lmbmRlZgotCV9fcG93ZXJwYzY0X18uCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgotCShmZmlfY2FsbF9TWVNWKTogUmVuYW1lIGZmaV9wcmVwX2FyZ3MgdG8gZmZpX3ByZXBfYXJnc19TWVNWLgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBOZXcgZmlsZS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBOZXcgZmlsZS4KLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBhbmQKLQlzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUy4KLQkoVEFSR0VUX1NSQ19QT1dFUlBDKTogTGlrZXdpc2UuCitjb21taXQgMWEyZjkzYThiMzYyZGIxMzYzOGFmZDlmY2IzZjI2NTAxODBiZmExNworQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVGh1IEp1biA0IDEwOjQ1OjUxIDIwMDkgKzAwMDAKIAotCSogc3JjL2ZmaXRlc3QuYyAoY2xvc3VyZV90ZXN0X2ZuLCBjbG9zdXJlX3Rlc3RfZm4xLCBjbG9zdXJlX3Rlc3RfZm4yLAotCWNsb3N1cmVfdGVzdF9mbjMpOiBGaXggcmVzdWx0IHByaW50aW5nIG9uIGJpZy1lbmRpYW4gNjQtYml0Ci0JbWFjaGluZXMuCi0JKG1haW4pOiBQcmludCB0c3QyX2FyZyBpbnN0ZWFkIG9mIHVuaW5pdGlhbGl6ZWQgdHN0Ml9yZXN1bHQuCisgICAgMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIHNyYy9zaC9mZmkuYzogQXBwbHkgbWlzc2luZyBodW5rIGZyb20gQWxleGFuZHJlIE9saXZhJ3MgcGF0Y2ggb2YKKyAgICAgICAgICAgIDIwMDctMDMtMDcuCiAKLQkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBIaWRlIHdoYXQgY2xvc3VyZSBwb2ludGVyIHJlYWxseSBwb2ludHMgdG8KLQlmcm9tIHRoZSBjb21waWxlci4KK2NvbW1pdCA5NDRjOTVjZjdhYWFhZjdjNWZhMzY4Y2RhNDY3M2RkMzhmNDUwMjBlCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBXZWQgSnVuIDMgMTc6NDI6NTYgMjAwOSArMDAwMAogCi0yMDAzLTA0LTE2ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKyAgICAyMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKyAgICAKKyAgICAgICAgICAgKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2xvc3VyZV9TVERDQUxMKTogIE5ldyBmdW5jdGlvbi4KKyAgICAgICAgICAgKC5laF9mcmFtZSk6ICBBZGQgRkRFIGZvciBpdC4KKyAgICAKKyAgICAyMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKyAgICAKKyAgICAgICAgICAgKiBjb25maWd1cmUuYWM6ICBBbHNvIGNoZWNrIGlmIGFzc2VtYmxlciBzdXBwb3J0cyBwYy1yZWxhdGl2ZQorICAgICAgICAgICByZWxvY3Mgb24gWDg2X1dJTjMyIHRhcmdldHMuCisgICAgICAgICAgICogY29uZmlndXJlOiAgUmVnZW5lcmF0ZS4KKyAgICAgICAgICAgKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9wcmVwX2FyZ3MpOiAgRGVjbGFyZSBleHRlcm4sIG5vdCBnbG9iYWwuCisgICAgICAgICAgIChfZmZpX2NhbGxfU1lTVik6ICBBZGQgbWlzc2luZyBmdW5jdGlvbiB0eXBlIHN5bWJvbCAuZGVmIGFuZAorICAgICAgICAgICBhZGQgRUggbWFya3VwIGxhYmVscy4KKyAgICAgICAgICAgKF9mZmlfY2FsbF9TVERDQUxMKTogIExpa2V3aXNlLgorICAgICAgICAgICAoX2ZmaV9jbG9zdXJlX1NZU1YpOiAgTGlrZXdpc2UuCisgICAgICAgICAgIChfZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiAgTGlrZXdpc2UuCisgICAgICAgICAgICguZWhfZnJhbWUpOiAgQWRkIGhhbmQtY3JhZnRlZCBFSCBkYXRhLgorICAgIAorICAgIDIwMDgtMTEtMjEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisgICAgCisgICAgICAgICAgICogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBzdXBwb3J0IGZvcgorICAgICAgICAgICBzaWduZWQvdW5zaWduZWQgaW50OC8xNiByZXR1cm4gdmFsdWVzLgorICAgICAgICAgICAqIHNyYy9zcGFyYy92OC5TIChmZmlfY2FsbF92OCk6IExpa2V3aXNlLgorICAgICAgICAgICAoZmZpX2Nsb3N1cmVfdjgpOiBMaWtld2lzZS4KKyAgICAKKyAgICAyMDA4LTAzLTI2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICAKKyAgICAgICAgICAgKiBzcmMvc2gvc3lzdi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorICAgICAgICAgICAqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCisgICAgCisgICAgMjAwOC0wMy0yNiAgRGFuaWVsIEphY29ib3dpdHogIDxkYW5AZGViaWFuLm9yZz4KKyAgICAKKyAgICAgICAgICAgKiBzcmMvYXJtL3N5c3YuUzogRml4IEFSTSBjb21tZW50IG1hcmtlci4KIAotCSogY29uZmlndXJlLmluIChhcm0tKi1uZXRic2RlbGYqKTogQWRkIGNvbmZpZ3VyYXRpb24uCi0JKGNvbmZpZ3VyZSk6IFJlZ2VuZXJhdGVkLgorY29tbWl0IDAwZmE5NzI0MzBiYjE1MzVhNGIzNGJmMDI5ZWJjYWQ1MDAwMjdiMGMKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBTYXQgRGVjIDI3IDE2OjU5OjA1IDIwMDggKzAwMDAKIAotMjAwMy0wNC0wNCAgTG9yZW4gSi4gUml0dGxlICA8bGpyaXR0bGVAYWNtLm9yZz4KKyAgICBwcm9wZXJseSBnbG9iLW1hdGNoCiAKLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCitjb21taXQgZjUxNzllNjc5NGFjMzVhZjI2ZmU4NmU0NjhiODUwOGE3YTU3MGM1NQorQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIEZyaSBEZWMgMjYgMTk6MDY6MjggMjAwOCArMDAwMAogCi0yMDAzLTAzLTIxICBaZGVuZWsgRHZvcmFrICA8cmFrZHZlckBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3o+CisgICAgTWFyayBYRkFJTCBvbiBsb25nZG91YmxlIHRlc3RzIGZvciB4ODZfNjQvbWluZ3cKIAotCSogbGliZmZpL2luY2x1ZGUvZmZpLmguaW46IERlZmluZSBYODYgaW5zdGVhZCBvZiBYODZfNjQgaW4gMzIKLQliaXQgbW9kZS4KLQkqIGxpYmZmaS9zcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6Ci0JUmVjZWl2ZSBjbG9zdXJlIHBvaW50ZXIgdGhyb3VnaCBwYXJhbWV0ZXIsIHJlYWQgYXJncyB1c2luZwotCV9fYnVpbHRpbl9kd2FyZl9jZmEuCi0JKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBTZW5kIGNsb3N1cmUgcmVmZXJlbmNlIHRocm91Z2ggZWF4LgorY29tbWl0IDgwZTJiNWE3NDkyMDhjOGExOGY5OTRlYzViZWU4NDU5NGQwNTFjYzgKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBNb24gRGVjIDIyIDE1OjIxOjE1IDIwMDggKzAwMDAKIAotMjAwMy0wMy0xMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKyAgICBjbGVhbiB1cCB0ZXN0cyBmb3Igd2luNjQgdXNlCiAKLQkqIGNvbmZpZ3VyZS5pbjogQXZvaWQgdHJhaWxpbmcgLy4gaW4gdG9vbGV4ZWNsaWJkaXIuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgNzA2M2Q5OTk2Zjc0MjU3NjA5NWM3YjBlYjUwMTZjMGY5YTY3MGFlYworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBEZWMgMTkgMTY6MTM6NDYgMjAwOCArMDAwMAogCi0yMDAzLTAzLTAzICBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBWZXJzaW9uIDMuMC44IHdpdGggeDg2LXNvbGFyaXMgc3VwcG9ydAogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBSZWNvZGUgdG8gZml0IGR5bmFtaWMgbGlicmFyaWVzLgorY29tbWl0IGJkZmViMTNmMGRmMGE2M2IxOWQ2MjU5NzUxNzIzN2I1NGQ5MjIyOGIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRGVjIDE5IDE1OjQ3OjQ0IDIwMDggKzAwMDAKIAotMjAwMy0wMi0wNiAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQnVtcCB0byAzLjAuNwogCi0JKiBsaWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzoKLQlGaXggYWxpZ25lbWVudCBidWcsIGFsbG9jYXRlIDggYnl0ZXMgZm9yIHRoZSByZXN1bHQuCi0JKiBsaWJmZmkvc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzoKLQlMaWtld2lzZS4KLQkqIGxpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6Ci0JVXBkYXRlIHN0YWNrZnJhbWUgZGVzY3JpcHRpb24gZm9yIGFpeC9kYXJ3aW5fY2xvc3VyZS5TLgorY29tbWl0IDY5MjA1ZGUxN2Q2YWM0YzExZDRiYTkyZDZhNWI0MGEwYzVmMjQ2YjIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgSnVsIDI0IDE4OjAzOjQ4IDIwMDggKzAwMDAKIAotMjAwMy0wMi0wNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgTWFueSB0ZXN0IGZpeGVzIChmYWlsdXJlcyBkdWUgdG8gZXhjZXNzaXZlIGNvbXBpbGVyIHdhcm5pbmdzKS4KIAotCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogQWRkIGhpZGRlbiB2aXNpYmlsaXR5Ci0JYXR0cmlidXRlLgorY29tbWl0IDI2MGQ1MTNmZWEwMGIzNjEzZmU5NTdhNDRhMTU3ZmU3MmM0Y2EyOWUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgSnVsIDE3IDEzOjEzOjUyIDIwMDggKzAwMDAKIAotMjAwMy0wMS0zMSAgQ2hyaXN0aWFuIENvcm5lbHNzZW4gIDxjY29ybkBjcy50dS1iZXJsaW4uZGU+LAotCSAgICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorICAgIFZlcnNpb24gMy4wLjYuICBzaC9zaDY0IGZpeGVzLgogCi0JKiBjb25maWd1cmUuaW46IEFkanVzdCBjb21tYW5kIHRvIHNvdXJjZSBjb25maWctbWwuaW4gdG8gYWNjb3VudAotCWZvciBjaGFuZ2VzIHRvIHRoZSBsaWJmZmlfYmFzZWRpciBkZWZpbml0aW9uLgotCShsaWJmZmlfYmFzZWRpcik6IFJlbW92ZSAke3NyY2Rpcn0gZnJvbSB2YWx1ZSBhbmQgaW5jbHVkZSB0cmFpbGluZwotCXNsYXNoIGlmIG5vbmVtcHR5LgorY29tbWl0IDM3MDQwMzE4NzVmZWFiYjc0ZTM2NTVlZDAzY2ZmNGMyYjNjNzZhYzYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgQXByIDMgMTg6NTc6NTcgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgUmV2IDMuMC41LgogCi0yMDAzLTAxLTI5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+Citjb21taXQgODQwNmY1ZjQ4ZjdmNThhMWM5ODJhOTNhOTVkNTIxY2Y4MmIzMjQxZgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBBcHIgMyAxODo1NzozNCAyMDA4ICswMDAwCiAKLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IFJlY29kZSB0byBmaXQgc2hhcmVkIGxpYnMuCisgICAgMy4wLjUKIAotMjAwMy0wMS0yOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgMjNhOWU3MzIxMmI2MmY5Njg0Y2VkYjBjZTcwZTkyYzU5Y2ZkYWZmYQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFdlZCBNYXIgNSAwMDowNzowMiAyMDA4ICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEVuYWJsZSBGRklfQ0xPU1VSRVMgZm9yIHg4Nl82NC4KLQkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IE5ldy4KLQkoZmZpX2Nsb3N1cmVfVU5JWDY0X2lubmVyKTogTmV3LgotCSogc3JjL3g4Ni91bml4NjQuUyAoZmZpX2Nsb3N1cmVfVU5JWDY0KTogTmV3LgorICAgIDIwMDgtMDMtMDQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgICAgICAgICAgICAgIEJsYWtlIENoYWZmaW4KKyAgICAgICAgICAgICAgICBob3NAdGFtYW5lZ2kub3JnCisgICAgCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBOZXcgdGVzdHMgZnJvbSBBcHBsZS4KIAotMjAwMy0wMS0yNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+Citjb21taXQgNDI5ZTM3ZDNhZDY1M2U1MmU3NWJmNzI1Yzg4M2FiNzllODU5Zjg5YQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMjggMDQ6NTA6MTkgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW4gKHRvb2xleGVjZGlyLCB0b29sZXhlY2xpYmRpcik6IFNldCBhbmQgQUNfU1VCU1QuCi0JUmVtb3ZlIFVTRV9MSUJESVIgY29uZGl0aW9uYWwuCi0JKiBNYWtlZmlsZS5hbSAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogRG9uJ3Qgb3ZlcnJpZGUuCi0JKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIGNsaWNreQogCi0yMDAzLTAxMDI3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgNTFlNzljNDI4MzQ4YzAzMzMxNGY1NGJjYjMwZjdlMzg4YzU5ZTM0NworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMjggMDQ6NDc6MzUgMjAwOCArMDAwMAogCi0JKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19QT1dFUlBDX0FJWCk6IEZpeCB0eXBvLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgZ2V0Y2xpY2t5CiAKLTIwMDMtMDEtMjIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGFmZmNhYjA0ZTI4MGVmZWFjZTQ1YTcyYzRkYzYxNTJjMGU0ZjFiN2YKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgRmViIDI2IDE5OjAxOjUzIDIwMDggKzAwMDAKIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9BSVgpOiBBZGQgQXVnbWVudGF0aW9uIHNpemUgdG8KLQl1bndpbmQgaW5mby4KKyAgICAyMDA4LTAyLTI2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICAgICAgICAgICAgICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogc3JjL2FscGhhL29zZi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorICAgICAgICAgICAgKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvc3BhcmMvdjguUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL2lhNjQvdW5peC5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL2FybS9zeXN2LlM6IExpa2V3aXNlLgogCi0yMDAzLTAxLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgNTk2ODlkNTUyMmMxNTlhM2FjOTY3YWRiNmI4OTFjZjVmMjJjODkwZgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBGZWIgMjYgMTc6NDA6NTEgMjAwOCArMDAwMAogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogQWRkIHVud2luZCBpbmZvLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisgICAgMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgICAgICAgICAgICAgVGhvbWFzIEhlbGxlciAgPHRoZWxsZXJAY3R5cGVzLm9yZz4KKyAgICAKKyAgICAgICAgICAgICogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IENoYW5nZSBDKysgY29tbWVudCB0byBDCisgICAgICAgICAgICBjb21tZW50LgogCi0yMDAzLTAxLTE0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBiMTNjODRjZjQ2Njg4MjhmZjg0MjliYTRhMmY5NGNkMWViNTc0YWUwCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEZlYiAyNiAxNzozODoxNSAyMDA4ICswMDAwCiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfYXJncyk6IENoZWNrIGZvciB2b2lkIHJldHZhbC4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvdW5peDY0LlM6IEFkZCB1bndpbmQgaW5mby4KKyAgICAyMDA4LTAyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0Lm9yZz4KKyAgICAgICAgICAgICAgICBUaG9tYXMgSGVsbGVyIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisgICAgCisgICAgICAgICAgICAqIGluY2x1ZGUvZmZpLmguaW46IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgogCi0yMDAzLTAxLTE0ICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+Citjb21taXQgMjY1Mjg5ZjY3OWZmZDI0YTg4YWUxYWEyY2VmMGU0YWExNDcwM2NkOAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBGZWIgMjYgMTc6MzQ6MzYgMjAwOCArMDAwMAogCi0JKiBzcmMvZmZpdGVzdC5jIChtYWluKTogT25seSB1c2UgZmZpX2Nsb3N1cmVzIGlmIHRob3NlIGFyZQotCXN1cHBvcnRlZC4KKyAgICAyMDA4LTAyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5Ac3BpbmRhenpsZS5vcmc+CisgICAgCisgICAgICAgICAgICAqIHNyYy9hbHBoYS9mZmkuYzogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCisgICAgICAgICAgICBzcmMvYWxwaGEvb3NmLlMsIHNyYy9hcm0vZmZpLmMsIHNyYy9mcnYvZmZpLmMsIHNyYy9pYTY0L2ZmaS5jLAorICAgICAgICAgICAgc3JjL2lhNjQvdW5peC5TLCBzcmMvamF2YV9yYXdfYXBpLmMsIHNyYy9tMzJyL2ZmaS5jLAorICAgICAgICAgICAgc3JjL21pcHMvZmZpLmMsIHNyYy9wYS9mZmkuYywgc3JjL3BhL2hwdXgzMi5TLCBzcmMvcGEvbGludXguUywKKyAgICAgICAgICAgIHNyYy9wb3dlcnBjL2ZmaS5jLCBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMsIHNyYy9yYXdfYXBpLmMsCisgICAgICAgICAgICBzcmMvczM5MC9mZmkuYywgc3JjL3NoL2ZmaS5jLCBzcmMvc2g2NC9mZmkuYywgc3JjL3NwYXJjL2ZmaS5jLAorICAgICAgICAgICAgc3JjL3g4Ni9mZmkuYywgc3JjL3g4Ni91bml4NjQuUywgc3JjL3g4Ni9kYXJ3aW42NC5TLD4gICAgICAgICBzcmMveDg2L2ZmaTY0LmM6IERpdHRvLgogCi0yMDAzLTAxLTEzIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IGZiNTAzNmNkNmQwZjkwOTkxOGU5MGY3ZDJkOWZkODBkNDY2ODJkNWQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gRmViIDI0IDE3OjI1OjI1IDIwMDggKzAwMDAKIAotCSogbGliZmZpL3NyYy9mZml0ZXN0LmMKLQkgYWRkIGNsb3N1cmUgdGVzdGNhc2VzCisgICAgZml4IGRhdGUKIAotMjAwMy0wMS0xMyBLZXZpbiBCLiBIZW5kcmlja3MgPGtoZW5kcmlja3NAaXZleS51d28uY2E+Citjb21taXQgNDBiZWMxMDhlN2QwMTgxZTZjOTkyOGFhN2EzMzE4N2JjYzBmM2Q2ZgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBGZWIgMjQgMTc6MjU6MDIgMjAwOCArMDAwMAogCi0JKiBsaWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMKLQkgZml4IGFsaWdubWVudCBidWcgZm9yIGZsb2F0ICg0IGJ5dGUgYWxpZ25lZCBpc28gOCBieXRlKQorICAgIE5ldyByZWxlYXNlCiAKLTIwMDMtMDEtMDkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorY29tbWl0IGI5MjIwNDhmYTgyZWExMDlhNGFmMjY5ZWU0N2JiYzJhNTg2YmJhYzIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gRmViIDI0IDE3OjI0OjAwIDIwMDggKzAwMDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBSZW1vdmUgUkNTIHZlcnNpb24gc3RyaW5nLgotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IFJlbW92ZSBSQ1MgdmVyc2lvbiBzdHJpbmcuCisgICAgMjAwOC0wMi0yNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHNwaW5kYXp6bGUub3JnPgorICAgIAorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEFjY2VwdCBvcGVuYnNkKiwgbm90IGp1c3Qgb3BlbmJzZC4KKyAgICAgICAgICAgIEJ1bXAgdmVyc2lvbiB0byAzLjAuNC4KKyAgICAgICAgICAgICogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKyAgICAgICAgICAgICogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgogCi0yMDAzLTAxLTAzICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+Citjb21taXQgYWZmY2E0YjkyZDA2ZTU1NTQ3ODRjN2U5YjIzMzAyOWVmODNmN2Q4YQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMjIgMjE6NTM6MjkgMjAwOCArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgY2xvc3VyZSBkZWZpbmVzIGZvciBTUEFSQywgU1BBUkM2NC4KLQkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBVc2Ugc3RhdGljIHN0b3JhZ2UgZm9yIGNsb3N1cmUuCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyKTogTmV3LgotCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogTmV3LgotCSogc3JjL3NwYXJjL3Y5LlMgKGZmaV9jbG9zdXJlX3Y5KTogTmV3LgorICAgIHN5bmMgcmVhZG1lIHdpdGggd2ViIHBhZ2UuCiAKLTIwMDItMTEtMTAgIFJhbmppdCBNYXRoZXcgPHJtYXRoZXdAaG90bWFpbC5jb20+Citjb21taXQgM2U1M2Q4NzUyZWE3NDg1OWI0YzY0ZmJiZjkzNWU2MmE5MzdjNGQ3OAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMjIgMjE6NTI6MzggMjAwOCArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGRlZCBGRklfU1REQ0FMTCBmZmlfdHlwZQotCSAgZW51bWVyYXRpb24gZm9yIFg4Nl9XSU4zMi4KLQkqIHNyYy94ODYvd2luMzIuUzogQWRkZWQgZmZpX2NhbGxfU1REQ0FMTCBmdW5jdGlvbgotCSAgZGVmaW5pdGlvbi4KLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9jYWxsL2ZmaV9yYXdfY2FsbCk6IEFkZGVkCi0JICBzd2l0Y2ggY2FzZXMgZm9yIHJlY29nbmlzaW5nIEZGSV9TVERDQUxMIGFuZAotCSAgY2FsbGluZyBmZmlfY2FsbF9TVERDQUxMIGlmIHRhcmdldCBpcyBYODZfV0lOMzIuCi0JKiBzcmMvZmZpdGVzdC5jIChteV9zdGRjYWxsX3N0cmxlbi9zdGRjYWxsX21hbnkpOgotCSAgc3RkY2FsbCB2ZXJzaW9ucyBvZiB0aGUgIm15X3N0cmxlbiIgYW5kICJtYW55IgotCSAgdGVzdCBmdW5jdGlvbnMgKGZvciBYODZfV0lOMzIpLgotCSAgQWRkZWQgdGVzdCBjYXNlcyB0byB0ZXN0IHN0ZGNhbGwgaW52b2NhdGlvbiB1c2luZwotCSAgdGhlc2UgZnVuY3Rpb25zLgorICAgIE5ldyByZWxlYXNlCiAKLTIwMDItMTItMDIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorY29tbWl0IDRkOTJmNmM4ZTc4ZmUwODRiZTY1ZjNlOGI1OGI4NTk5MDFiYTc5NmQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDIyIDIxOjQ5OjQ2IDIwMDggKzAwMDAKIAotCSogc3JjL3NoL3N5c3YuUzogQWRkIERXQVJGMiB1bndpbmQgaW5mby4KKyAgICAyMDA4LTAyLTIyICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjMuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKyAgICAgICAgICAgICogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisgICAgICAgICAgICAqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4gIENsZWFuIHVwIHRlc3QgZG9jcy4KIAotMjAwMi0xMS0yNyAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorY29tbWl0IDBlMTg1ZmExMWEwMWY4MTY4MjRiYTI2ODdlZDM3MTVhYjYyMTliZWYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDIyIDIxOjQzOjE4IDIwMDggKzAwMDAKIAotCSogc3JjL3MzOTAvc3lzdi5TICguZWhfZnJhbWUgc2VjdGlvbik6IE1ha2Ugc2VjdGlvbiByZWFkLW9ubHkuCisgICAgVXBkYXRlIGNvbmZpZ3VyZSBzY3JpcHQuCiAKLTIwMDItMTEtMjYgIEppbSBXaWxzb24gIDx3aWxzb25AcmVkaGF0LmNvbT4KK2NvbW1pdCBmNzM5ODZiZDIxMWNmYmJhYTU5M2QxMzA5NTA0ZDBkYzY4NjI2MTkxCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAyMiAyMTo0MDo1MyAyMDA4ICswMDAwCiAKLQkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogSGFzIHNpemUgOCBvbiBJQTY0LgorICAgIDIwMDgtMDItMjIgIEJqb2VybiBLb2VuaWcgIDxia29lbmlnQGFscGhhLXRpZXJjaGVuLmRlPgorICAgICAgICAgICAgICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisgICAgCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQWRkIGFtZDY0LSotZnJlZWJzZCogdGFyZ2V0LgorICAgICAgICAgICAgKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCiAKLTIwMDItMTEtMjMgIEguSi4gTHUgPGhqbEBnbnUub3JnPgorY29tbWl0IDAyMDhmNjhmZTVkZTMwYzMzZTdmNzBlYmMyODE2MzU5MTcwMTNmNWEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDIyIDIxOjE1OjQ0IDIwMDggKzAwMDAKIAotCSogYWNpbmNsdWRlLm00OiBBZGQgZHVtbXkgQU1fUFJPR19MSUJUT09MLgotCUluY2x1ZGUgLi4vY29uZmlnL2FjY3Jvc3MubTQuCi0JKiBhY2xvY2FsLm00OyBSZWJ1aWxkLgotCSogY29uZmlndXJlOiBMaWtld2lzZS4KKyAgICAyMDA4LTAyLTIyICBUaG9tYXMgSGVsbGVyIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisgICAgCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQWRkIHg4NiBPcGVuQlNEIHN1cHBvcnQuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZTogUmVidWlsdC4KIAotMjAwMi0xMS0xNSAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorY29tbWl0IDAxYWRiMGU2MzhhODZjZjBkNWU2NjhlZDhlMDhiZTliMGNkMjUwNWYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDIxIDE2OjE3OjI2IDIwMDggKzAwMDAKIAotCSogc3JjL3MzOTAvc3lzdi5TICguZWhfZnJhbWUgc2VjdGlvbik6IEFkYXB0IHRvIHBjcmVsIEZERSBlbmNvZGluZy4KKyAgICBGaXggUkVBRE1FLgogCi0yMDAyLTExLTExICBESiBEZWxvcmllICA8ZGpAcmVkaGF0LmNvbT4KK2NvbW1pdCAxZWRkNDU2MzIyNTk4MWExNGY3ZDRmYjk5MTliMWVkODhlMzgwODJmCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxMzozOTowMSAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgY29tbW9uIGZpbGVzIGluIHRoZSByaWdodCBwbGFjZS4KKyAgICAzLjAuMgogCi0yMDAyLTEwLTA4ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+Citjb21taXQgYzliNTQyODAwODY0ZTIyMDRkYjZlODNmMzg0M2ExNzgxM2JhNjE2NQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMjEgMTM6MzY6NDMgMjAwOCArMDAwMAogCi0JKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IEludGVycHJldAotCXJhdyBkYXRhIGFzIF9Kdl93b3JkIHZhbHVlcywgbm90IGZmaV9yYXcuCi0JKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IExpa2V3aXNlLgotCShmZmlfamF2YV9ydmFsdWVfdG9fcmF3KTogTmV3IGZ1bmN0aW9uLgotCShmZmlfamF2YV9yYXdfY2FsbCk6IENhbGwgaXQuCi0JKGZmaV9qYXZhX3Jhd190b19ydmFsdWUpOiBOZXcgZnVuY3Rpb24uCi0JKGZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzKTogQ2FsbCBpdC4KLQkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbik6IEludGVycHJldCByZXR1cm4gdmFsdWUKLQlhcyBmZmlfYXJnLCBub3QgaW50LgotCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIG1pc3NpbmcKLQlGRklfVFlQRV9QT0lOVEVSIGNhc2UuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuICBBbHNvLCBhc3N1bWUgcmV0dXJuCi0JdmFsdWVzIGV4dGVuZGVkIHRvIHdvcmQgc2l6ZS4KKyAgICBhZGQgbWlzc2luZyBmaWxlCiAKLTIwMDItMTAtMDIgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KK2NvbW1pdCBkNWZhNTYzM2Q1YzhkM2MyMTJhMjI2N2NmYTM4ZmJhNDA5MWJhYTJjCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxMzozNjoxOSAyMDA4ICswMDAwCiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBSZW1vdmUgZGVidWcgb3V0cHV0LgorICAgIDIwMDgtMDItMjEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuMi4KKyAgICAgICAgICAgICogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKyAgICAgICAgICAgICogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorICAgIAorICAgIDIwMDgtMDItMjEgIEJqw7ZybiBLw7ZuaWcgPGJrb2VuaWdAYWxwaGEtdGllcmNoZW4uZGU+CisgICAgCisgICAgICAgICAgICAqIHNyYy94ODYvZnJlZWJzZC5TOiBOZXcgZmlsZS4KKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBBZGQgeDg2IEZyZWVCU0Qgc3VwcG9ydC4KKyAgICAgICAgICAgICogTWFrZWZpbGUuYW06IERpdHRvLgogCi0yMDAyLTEwLTAxICBCbyBUaG9yc2VuICA8Ym9Ac21ldGFuYS5zdXNlLmRlPgorY29tbWl0IGFjMzViZmM2ZmNhZGQ4ODgwYzFlZmNlMzY3MjQ4MjBmOTA3NGIzMTgKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTYXQgRmViIDE2IDAxOjAzOjU2IDIwMDggKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogRml4IGkzODYgd2luMzIgY29tcGlsYXRpb24uCisgICAgVXBkYXRlZAogCi0yMDAyLTA5LTMwICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+Citjb21taXQgZjc5NDI5NzVmZWU3YjAxNjI2NDdkZDc5ZTI2NTI2MTViNzM3ZTk4ZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFNhdCBGZWIgMTYgMDE6MDI6MDAgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW46IEFkZCBzMzkweC0qLWxpbnV4LSogdGFyZ2V0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIFMzOTBYIGZvciBzMzkweCB0YXJnZXRzLgotCShGRklfQ0xPU1VSRVMpOiBEZWZpbmUgZm9yIHMzOTAvczM5MHguCi0JKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KLQkoRkZJX05BVElWRV9SQVdfQVBJKTogTGlrZXdpc2UuCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRG8gbm90IGNvbXB1dGUgc3RhY2sgc3BhY2UgZm9yIHMzOTAuCi0JKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IFVzZSA4LWJ5dGUgcG9pbnRlcnMgb24gczM5MHguCi0JKiBzcmMvczM5MC9mZmkuYzogTWFqb3IgcmV3b3JrIG9mIGV4aXN0aW5nIGNvZGUuICBBZGQgc3VwcG9ydCBmb3IKLQlzMzkweCB0YXJnZXRzLiAgQWRkIGNsb3N1cmUgc3VwcG9ydC4KLQkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisgICAgMjAwOC0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4xLgorICAgICAgICAgICAgKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisgICAgICAgICAgICAqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorICAgICAgICAgICAgKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCisgICAgCisgICAgMjAwOC0wMi0xNSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogc3JjL21pcHMvZmZpLmM6IFJlbW92ZSBleHRyYSAnPicgZnJvbSBpbmNsdWRlIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFVzZSBjbGVhcl9sb2NhdGlvbiBpbnN0ZWFkIG9mIHRyYW1wLgogCi0yMDAyLTA5LTI5ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KK2NvbW1pdCA1OWFhNmJiMWJmYzg2YTYxMGFjMWE4YjEyMzQ0M2VmZDc1ODU0ZGQxCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAyMDo1MjoyNiAyMDA4ICswMDAwCiAKLQkqIHNyYy9hcm0vc3lzdi5TOiBGaXggdHlwby4KKyAgICBBZGQgbW9yZSBwbGF0Zm9ybXMuCiAKLTIwMDItMDktMjggIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorY29tbWl0IDQ1YTQ1YWI5OTA3NDQ0OGJlMGFlMWE4ZDJhZGU1MGQyOGI2MGY4ZGUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDE5OjE2OjM2IDIwMDggKzAwMDAKIAotCSogc3JjL2FybS9zeXN2LlM6IElmIHdlIGRvbid0IGhhdmUgbWFjaGluZS9hc20uaCBhbmQgdGhlIHByZS1wcm9jZXNzb3IKLQloYXMgZGVmaW5lZCBfX1VTRVJfTEFCRUxfUFJFRklYX18sIHRoZW4gdXNlIGl0IGluIENOQU1FLgotCShmZmlfY2FsbF9TWVNWKTogSGFuZGxlIHNvZnQtZmxvYXQuCisgICAgMy4wIG5vdGVzCiAKLTIwMDItMDktMjcgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorY29tbWl0IDRkYjc0Y2JlYTg4OGM5ZjEyNTFiODViYWYwMGQ5OWI4M2QzYjk5NGQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDE5OjEwOjI2IDIwMDggKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogRml4IG11bHRpbGliIHg4Ni02NCBzdXBwb3J0LgorICAgIFVwZGF0ZQogCi0yMDAyLTA5LTIyICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+Citjb21taXQgYzNlMTEwMWZmYWJmNDRkOGEyZWU0NmUwM2JhOWFiNTgyMDUwYTgyNQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMTg6NDM6NDAgMjAwOCArMDAwMAogCi0JKiBNYWtlZmlsZS5hbSAoYWxsLW11bHRpKTogRml4IG11bHRpbGliIHBhcmFsbGVsIGJ1aWxkLgorICAgIDIwMDgtMDItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuMCwKKyAgICAgICAgICAgICogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorICAgIAorICAgIDIwMDgtMDItMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisgICAgCisgICAgICAgICAgICAqIHNyYy9taXBzL2ZmaS5jIChVU0VfX0JVSUxUSU5fX19DTEVBUl9DQUNIRSk6CisgICAgICAgICAgICBEZWZpbmUgKGNvbmRpdGlvbmFsbHkpLCBhbmQgdXNlIGl0IHRvIGluY2x1ZGUgY2FjaGVjdGwuaC4KKyAgICAgICAgICAgIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBjYWNoZSBmbHVzaGluZy4KKyAgICAgICAgICAgICogc3JjL21pcHMvZmZpdGFyZ2V0LmggKF9BQklOMzIsIF9BQkk2NCwgX0FCSU8zMik6IERlZmluZS4KIAotMjAwMi0wNy0xOSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+Citjb21taXQgN2UwY2MxMmU5MjMzYWQyODVkYjQxY2U4ZGJkZGE2MWVkMmE3ZmIwNgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMTU6NTE6MDMgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW4gKHNoWzM0XSotKi1saW51eCopOiBBZGQgYnJhY2tldHMuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgTmV3IHJlbGVhc2UKIAotMjAwMi0wNy0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+Citjb21taXQgMmQ3ZGM4ODVlYzQwZDUzODY2ZjI5OTg0ZDU5NTUxMTk0MmM4YjY4NgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMTU6MzA6MjYgMjAwOCArMDAwMAogCi0JKiBNYWtlZmlsZS5hbTogQWRkIFNIIHN1cHBvcnQuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZS5pbiAoc2gtKi1saW51eCosIHNoWzM0XSotKi1saW51eCopOiBBZGQgdGFyZ2V0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIFNIIHN1cHBvcnQuCi0JKiBzcmMvc2gvZmZpLmM6IE5ldyBmaWxlLgotCSogc3JjL3NoL3N5c3YuUzogTmV3IGZpbGUuCi0JKiBzcmMvdHlwZXMuYzogQWRkIFNIIHN1cHBvcnQuCisgICAgICAgICAgICAqIG1hbi9mZmlfY2FsbC4zLCBtYW4vZmZpX3ByZXBfY2lmLjMsIG1hbi9mZmkuMzoKKyAgICAgICAgICAgIFVwZGF0ZSBkYXRlcyBhbmQgcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIGZmaV9wcmVwX2Nsb3N1cmUuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuOS4KKyAgICAgICAgICAgICogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgogCi0yMDAyLTA3LTE2ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KK2NvbW1pdCBhMDUyNWYwM2VlYWFlZDMzYjFlYWM4MGUwYzAxNjQ1NWNlZTM2MTVkCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAxNToxNDozMCAyMDA4ICswMDAwCiAKLQkqIHNyYy94ODYvZmZpNjQuYzogTmV3IGZpbGUgdGhhdCBhZGRzIHg4Ni02NCBzdXBwb3J0LgotCSogc3JjL3g4Ni91bml4NjQuUzogTmV3IGZpbGUgdGhhdCBoYW5kbGVzIGFyZ3VtZW50IHNldHVwIGZvcgotCXg4Ni02NC4KLQkqIHNyYy94ODYvc3lzdi5TOiBEb24ndCB1c2UgdGhpcyBvbiB4ODYtNjQuCi0JKiBzcmMveDg2L2ZmaS5jOiBEb24ndCB1c2UgdGhpcyBvbiB4ODYtNjQuCi0JUmVtb3ZlIHVudXNlZCB2YXJzLgotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERvbid0IGRvIHN0YWNrIHNpemUgY2FsY3VsYXRpb24KLQlmb3IgeDg2LTY0LgotCSogc3JjL2ZmaXRlc3QuYyAoc3RydWN0Nik6IE5ldyB0ZXN0IHRoYXQgdGVzdHMgYSBzcGVjaWFsIGNhc2UgaW4KLQl0aGUgeDg2LTY0IEFCSS4KLQkoc3RydWN0Nyk6IExpa2V3aXNlLgotCShzdHJ1Y3Q4KTogTGlrZXdpc2UuCi0JKHN0cnVjdDkpOiBMaWtld2lzZS4KLQkoY2xvc3VyZV90ZXN0X2ZuKTogU2lsZW5jZSB3YXJuaW5nIGFib3V0IHRoaXMgd2hlbiBpdCdzIG5vdCB1c2VkLgotCShtYWluKTogQWRkIHRoZSBuZXcgdGVzdHMuCi0JKG1haW4pOiBGaXggYSBjb3VwbGUgb2Ygd3JvbmcgY2FzdHMgYW5kIHNpbGVuY2Ugc29tZSBjb21waWxlciB3YXJuaW5ncy4KLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCB4ODYtNjQgQUJJIGRlZmluaXRpb24uCi0JKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KLQkqIE1ha2VmaWxlLmFtOiBBZGQgeDg2LTY0IHN1cHBvcnQuCi0JKiBjb25maWd1cmUuaW46IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmU6IExpa2V3aXNlLgorICAgIE5ldyByZWxlYXNlLgogCi0yMDAyLTA2LTI0ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KK2NvbW1pdCAyYjMwZGZiMzE0NmVlMjZhZDk1NmQwMGVlMDVlYjgzNWNhMWE5NWI0CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAxNToxMjo0MyAyMDA4ICswMDAwCiAKLQkqIHNyYy90eXBlcy5jOiBNZXJnZSBzZXR0aW5ncyBmb3Igc2ltaWxhciBhcmNoaXRlY3R1cmVzLgotCUFkZCB4ODYtNjQgc2l6ZXMgYW5kIGFsaWdubWVudHMuCisgICAgICAgICAgICAqIG1hbi9mZmlfcHJlcF9jbG9zdXJlLjM6IERlbGV0ZS4KKyAgICAgICAgICAgICogbWFuL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIGZmaV9wcmVwX2Nsb3N1cmUuMy4KKyAgICAgICAgICAgIChtYW5fTUFOUyk6IERpdHRvLgorICAgICAgICAgICAgKiBtYW4vTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuOC4KKyAgICAgICAgICAgICogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgogCi0yMDAyLTA2LTIzICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KK2NvbW1pdCBiZjQxZTY0ODQwZWJjYjZjYzMxYTZmMDI4MjUzYzFmZGU4MjcwNWQ4CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAwMTo1Njo1MCAyMDA4ICswMDAwCiAKLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgdW51c2VkIHZhcnMuCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjgpOiBMaWtld2lzZS4KLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCi0JKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgorICAgIFVwZGF0ZS4KIAotMjAwMi0wNy0xOCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQorY29tbWl0IDRkMzlkZGVlNjc3YmJiNjFkNjIxODkzYjkxZTExZWFjNWU3YzRhZjcKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDAxOjI0OjA2IDIwMDggKzAwMDAKIAotCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfTUlQU19MSU5VWCk6IE5ldy4KLQkobGliZmZpX2xhX1NPVVJDRVMpOiBTdXBwb3J0IE1JUFNfTElOVVguCi0JKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTKTogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisgICAgKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjcuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKyAgICAgICAgICAgICogaW5jbHVkZS9mZmkuaC5pbiBMSUNFTlNFIHNyYy9kZWJ1Zy5jIHNyYy9jbG9zdXJlcy5jCisgICAgICAgICAgICAgIHNyYy9mZml0ZXN0LmMgc3JjL3MzOTAvc3lzdi5TIHNyYy9zMzkwL2ZmaXRhcmdldC5oCisgICAgICAgICAgICAgIHNyYy90eXBlcy5jIHNyYy9tNjhrL2ZmaXRhcmdldC5oIHNyYy9yYXdfYXBpLmMgc3JjL2Zydi9mZmkuYworICAgICAgICAgICAgICBzcmMvZnJ2L2ZmaXRhcmdldC5oIHNyYy9zaC9mZmkuYyBzcmMvc2gvc3lzdi5TCisgICAgICAgICAgICAgIHNyYy9zaC9mZml0YXJnZXQuaCBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCBzcmMvcGEvZmZpLmMKKyAgICAgICAgICAgICAgc3JjL3BhL2ZmaXRhcmdldC5oIHNyYy9wYS9saW51eC5TIHNyYy9qYXZhX3Jhd19hcGkuYworICAgICAgICAgICAgICBzcmMvY3Jpcy9mZml0YXJnZXQuaCBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCisgICAgICAgICAgICAgIHNyYy94ODYvdW5peDY0LlMgc3JjL3g4Ni93aW4zMi5TIHNyYy94ODYvZmZpdGFyZ2V0LmgKKyAgICAgICAgICAgICAgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luLlMgc3JjL2lhNjQvZmZpLmMKKyAgICAgICAgICAgICAgc3JjL2lhNjQvZmZpdGFyZ2V0Lmggc3JjL2lhNjQvaWE2NF9mbGFncy5oIHNyYy9pYTY0L3VuaXguUworICAgICAgICAgICAgICBzcmMvc3BhcmMvZmZpLmMgc3JjL3NwYXJjL3Y5LlMgc3JjL3NwYXJjL2ZmaXRhcmdldC5oCisgICAgICAgICAgICAgIHNyYy9zcGFyYy92OC5TIHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvZmZpdGFyZ2V0LmgKKyAgICAgICAgICAgICAgc3JjL2FscGhhL29zZi5TIHNyYy9zaDY0L2ZmaS5jIHNyYy9zaDY0L3N5c3YuUworICAgICAgICAgICAgICBzcmMvc2g2NC9mZml0YXJnZXQuaCBzcmMvbWlwcy9mZmkuYyBzcmMvbWlwcy9mZml0YXJnZXQuaAorICAgICAgICAgICAgICBzcmMvbWlwcy9uMzIuUyBzcmMvbWlwcy9vMzIuUyBzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TCisgICAgICAgICAgICAgIHNyYy9hcm0vZmZpdGFyZ2V0Lmggc3JjL3ByZXBfY2lmLmM6IFVwZGF0ZSBsaWNlbnNlIHRleHQuCiAKLQkqIGNvbmZpZ3VyZS5pbiAobWlwczY0Ki0qKTogU2tpcC4KLQkobWlwcyotKi1saW51eCopOiBOZXcuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorY29tbWl0IGQ1OGIwMzJiNDFhMTJiZDNkNzIxNDhkYTY4MjJhYjU5ZGQ2OThmZjkKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDAwOjU5OjI1IDIwMDggKzAwMDAKIAotCSogc3JjL21pcHMvZmZpLmM6IEluY2x1ZGUgPHNnaWRlZnMuaD4uCisgICAgTmV3IHJlbGVhc2UKIAotMjAwMi0wNi0wNiAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorY29tbWl0IDkxZTU0NzhkZjZkNWFjNjNlZmJiMTBmMDI1ODA3YjQ2MDZhZmFiNTYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDAwOjUwOjMwIDIwMDggKzAwMDAKIAotCSogc3JjL3MzOTAvc3lzdi5TOiBTYXZlL3Jlc3RvcmUgJXI2LiAgQWRkIERXQVJGLTIgdW53aW5kIGluZm8uCisgICAgVXBkYXRlIHN1cHBvcnRlZCBwbGF0Zm9ybXMuICBCdW1wIHZlcnNpb24uCiAKLTIwMDItMDUtMjcgIFJvZ2VyIFNheWxlICA8cm9nZXJAZXllc29wZW4uY29tPgorY29tbWl0IGJkMDc2OGY4NzdjOGY3ZmQwZDM2YWYyMTkxYjIwM2Q0ZDA1N2IxY2UKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDAwOjQ1OjMzIDIwMDggKzAwMDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSByZWZlcmVuY2UgdG8gYXZuLgorICAgICogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi45OS41LgorICAgICAgICAgICAgKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgICAgICAgICAqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGRhcndpbjY0LlMKKyAgICAgICAgICAgICogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmVtb3ZlIGxpYnN0ZGMrKyBiaXRzIGZyb20gR0NDIHRyZWUuCisgICAgICAgICAgICAqIExJQ0VOU0U6IFVwZGF0ZSBXQVJSQU5UWS4KIAotMjAwMi0wNS0yNyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+Citjb21taXQgNDlkMzQ1Zjc2N2JkMmNmZWU5NTFiY2VhYWI2YTFhMDc5ODZjZjI5MworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMjM6NDM6MjcgMjAwOCArMDAwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBhbmQKLQlmaXggZm9ybWF0dGluZy4KKyAgICB1cGRhdGUgbGljZW5zZSByZWZlcmVuY2UKIAotMjAwMi0wNS0xMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IDEyYWM0OGZjNzliNTE1ZGI3YzlhY2NkOWZjYWE4N2IwZGNlZmNjZGIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDIzOjQyOjA4IDIwMDggKzAwMDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9jbG9zdXJlKTogRGVjbGFyZSBmZCBhdAotCWJlZ2lubmluZyBvZiBmdW5jdGlvbiAoZm9yIG9sZGVyIGFwcGxlIGNjKS4KKyAgICBVcGRhdGUgV0FSUkFOVFkKIAotMjAwMi0wNS0wOCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+Citjb21taXQgNmI5MWM0MWRhODdlNzg1NTJmMjk5MGRmYzUwNGEwYTMzNDlmMzQwYgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMjM6Mzg6MjcgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW4gKE9SSUdJTkFMX0xEX0ZPUl9NVUxUSUxJQlMpOiBQcmVzZXJ2ZSBMRCBhdAotCXNjcmlwdCBlbnRyeSwgYW5kIHNldCBMRCB0byBpdCB3aGVuIGNvbmZpZ3VyaW5nIG11bHRpbGlicy4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBmaXggdGFyYmFsbCByZWZlcmVuY2UKIAotMjAwMi0wNS0wNSAgSmFzb24gVGhvcnBlICA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KK2NvbW1pdCAyYjU5NTc5ZTM1MzMzMzRiZWU0Nzg4ZTA3NmI0ZTUyMGMyYWI1MThjCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAyMzozNTo1OCAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbiAoc3BhcmM2NC0qLW5ldGJzZCopOiBBZGQgdGFyZ2V0LgotCShzcGFyYy0qLW5ldGJzZGVsZiopOiBMaWtld2lzZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBGaXJzdCB1cGRhdGUgaW4gNSB5ZWFycyEKIAotMjAwMi0wNC0yOCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KK2NvbW1pdCA2Y2JkZjNmM2EzNzc3YTkzMzgyYTJkNTA4ZGRlZjFjMzUzZmYwOTU1CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAyMjo0NDowNiAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlOiBGaXggU1BBUkMgdGVzdCBpbiBwcmV2aW91cyBjaGFuZ2UuCisgICAgRml4IC5wYyBmaWxlIGJ1ZyBhbmQgYnVtcCB2ZXJzaW9uCiAKLTIwMDItMDQtMjkgIEdlcmhhcmQgVG9ubiAgPEdlcmhhcmRUb25uQHN3b2wuZGU+Citjb21taXQgMWQxZGM4MTEwNGIyMDlkZjNjZmVmMDg0MDczNWM1OWVmYWUyZjY1NQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMjI6MDM6MzcgMjAwOCArMDAwMAogCi0JKiBNYWtlZmlsZS5hbTogQWRkIExpbnV4IGZvciBTLzM5MCBzdXBwb3J0LgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmUuaW46IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KLQkqIHNyYy9zMzkwL2ZmaS5jOiBOZXcgZmlsZSBmcm9tIGxpYmZmaSBDVlMgdHJlZS4KLQkqIHNyYy9zMzkwL3N5c3YuUzogTmV3IGZpbGUgZnJvbSBsaWJmZmkgQ1ZTIHRyZWUuCisgICAgQWRkIG1hbiBmaWxlcyBhbmQgaW5mbyBmaWxlLiBVcGRhdGUgUkVBRE1FLiAgVGFnIGFzIDIuOTkuMy4KIAotMjAwMi0wNC0yOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Citjb21taXQgZjA0NWEyMzY3Zjc5M2ZhOGIwMTUzNGNmMmUyNWJjYzQ2YWZjOGZhMQorQXV0aG9yOiB0cm9tZXkgPHRyb21leT4KK0RhdGU6ICAgVGh1IEZlYiAxNCAyMDo0Njo1NyAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9BU19TUEFSQ19VQV9QQ1JFTCk6IENoZWNrIGZvciB3b3JraW5nCi0JJXJfZGlzcDMyKCkuCi0JKiBzcmMvc3BhcmMvdjguUzogVXNlIGl0LgotCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgotCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgTW92ZSBlbnRyeSBmcm9tIENoYW5nZUxvZyB0byBDaGFuZ2VMb2cubGliZmZpCiAKLTIwMDItMDQtMDggIEhhbnMgQm9laG0gIDxIYW5zX0JvZWhtQGhwLmNvbT4KK2NvbW1pdCA2MjU3ZjA3ZDFhOWVmZDI3ZmE4MzYzOWNmYmEyODFmNWQzMTg4NzMxCitBdXRob3I6IHRyb21leSA8dHJvbWV5PgorRGF0ZTogICBUaHUgRmViIDE0IDIwOjMzOjE3IDIwMDggKzAwMDAKIAotCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfc2l6ZSk6IEhhbmRsZSBGRklfVFlQRV9ET1VCTEUKLQljb3JyZWN0bHkuCi0JKiBzcmMvaWE2NC91bml4LlM6IEFkZCB1bndpbmQgaW5mb3JtYXRpb24uIEZpeCBjb21tZW50cy4KLQlTYXZlIHNwIGluIGEgd2F5IHRoYXQncyBjb21wYXRpYmxlIHdpdGggdW53aW5kIGluZm8uCi0JKGZmaV9jYWxsX3VuaXgpOiBDb3JyZWN0bHkgcmVzdG9yZSBzcCBpbiBhbGwgY2FzZXMuCi0JKiBzcmMvaWE2NC9mZmkuYzogQWRkLCBmaXggY29tbWVudHMuCisgICAgCSogYWNsb2NhbC5tNCwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisgICAgCSogbWRhdGUtc2gsIHRleGluZm8udGV4OiBOZXcgZmlsZXMuCisgICAgCSogTWFrZWZpbGUuYW0gKGluZm9fVEVYSU5GT1MpOiBOZXcgdmFyaWFibGUuCisgICAgCSogZG9jL2xpYmZmaS50ZXhpOiBOZXcgZmlsZS4KKyAgICAJKiBkb2MvdmVyc2lvbi50ZXhpOiBMaWtld2lzZS4KIAotMjAwMi0wNC0wOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Citjb21taXQgNDIzMmFmNTYzYzU1MDljMzc2MGEzM2UzNjg0YTJiOTU4YmU3NTVlMQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMTY6MTk6MjEgMjAwOCArMDAwMAogCi0JKiBzcmMvc3BhcmMvdjguUzogTWFrZSAuZWhfZnJhbWUgZGVwZW5kZW50IG9uIHRhcmdldCB3b3JkIHNpemUuCisgICAgICAgICAgICAqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBEb24ndCBjb21waWxlIHdpdGggLUQuCisgICAgICAgICAgICAobGliX0xUTElCUkFSSUVTKTogRGVmaW5lLgorICAgICAgICAgICAgKHRvb2xleGVjbGliX0xJQlJBUklFUyk6IFVuZGVmaW5lLgorICAgICAgICAgICAgKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBSZXNldCB2ZXJzaW9uIHRvIDIuOTkuMS4KKyAgICAgICAgICAgICogY29uZmlndXJlLmluOiBSZWJ1aWx0LgogCi0yMDAyLTA0LTA2ICBKYXNvbiBUaG9ycGUgIDx0aG9ycGVqQHdhc2FiaXN5c3RlbXMuY29tPgorY29tbWl0IDk2MTU0MzYxNWMzMWYwOTJiNTc4YTRiNGNkYTkxNGRiNjRmOWQwZmEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDE1OjU3OjQwIDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluIChhbHBoYSotKi1uZXRic2QqKTogQWRkIHRhcmdldC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBGaXggdHlwby4KIAotMjAwMi0wNC0wNCAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorY29tbWl0IGFlYjBhYmFiODcyMjJmNjM3ZmJmMzUyZDRlZmZkM2I3NmI1MmVkMjYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDE1OjU0OjI3IDIwMDggKzAwMDAKIAotCSogc3JjL3NwYXJjL3Y4LlM6IEFkZCB1bndpbmQgaW5mby4KLQkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKyAgICAgICAgICAqIGxpYmZmaS5wYy5pbjogVXNzZSBAUEFDS0FHRV9OQU1FQCBhbmQgQFBBQ0tBR0VfVkVSU0lPTkAuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogUmVzZXQgdmVyc2lvbiB0byAyLjk5LjEuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5pbjogUmVidWlsdC4KKyAgICAgICAgICAgICogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgQ2hhbmdlTG9nLmxpYmZmaS4KKyAgICAgICAgICAgICogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgICAgICAgICAqIExJQ0VOU0U6IFVwZGF0ZSBjb3B5cmlnaHQgbm90aWNlLgogCi0yMDAyLTAzLTMwICBLcmlzdGVyIFdhbGZyaWRzc29uICA8Y2F0b0BkZi5sdGguc2U+Citjb21taXQgNzdmZTI0MzU1NjQzM2VhZTExOWQ4YmQ3NDY5YmZjY2RkNWJkOGExYQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMTU6Mzc6MDAgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW46IEVuYWJsZSBpKjg2LSotbmV0YnNkZWxmKi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBGaXggbWFrZSBkaXN0IGFnYWluCiAKLTIwMDItMDMtMjkgIERhdmlkIEJpbGxpbmdodXJzdCA8RGF2aWQuQmlsbGluZ2h1cnN0QHJpb3RpbnRvLmNvbT4KK2NvbW1pdCBkNDk3MGNmNDUyOTQ1OWJmMGYwZTQzYzYwMmNhYzM5Njc4NmM2ODAyCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAxNToxODo1NiAyMDA4ICswMDAwCiAKLQlQUiBvdGhlci8yNjIwCi0JKiBzcmMvbWlwcy9uMzIuczogRGVsZXRlCi0JKiBzcmMvbWlwcy9vMzIuczogRGVsZXRlCisgICAgRml4IG1ha2UgZGlzdAogCi0yMDAyLTAzLTIxICBMb3JlbiBKLiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgorY29tbWl0IGYwYjE0NjJmMmQzMDI0OTIyYWQ3MTQyMWJkNWM0MzExZmNiMTZkYTUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDE1OjAxOjQxIDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluOiBFbmFibGUgYWxwaGEqLSotZnJlZWJzZCouCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgVXNlIHBrZ2NvbmZpZy4gIEluY3JlbWVudCBsaWJ0b29sIENVUlJFTlQgdmVyc2lvbi4KIAotMjAwMi0wMy0xNyAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUB3YWl0YWtpLm90YWdvLmFjLm56PgorY29tbWl0IDI3ZTUyZjMzYmFhMDY5MDEyYTVhZGIyYTM4MDdmOWNhMWYyMTY1YWIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gRmViIDMgMTM6NTk6NDggMjAwOCArMDAwMAogCi0JKiBNYWtlZmlsZS5hbTogbGliZmZpY29udmVuaWVuY2UgLT4gbGliZmZpX2NvbnZlbmllbmNlLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgRml4IGhlYWRlciBpbnN0YWxscyB3aGVuIHVzaW5nIERFU1RESVIuCiAKLQkqIE1ha2VmaWxlLmFtOiBEZWZpbmUgZmZpdGVzdF9PQkpFQ1RTLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgZmFkYWIyOGViNmUzM2ZiNmRjZGQ3YjkzMjNlMTQ3MTQyMjE2ZDU0OAorQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFN1biBGZWIgMyAxMjozMjoyMiAyMDA4ICswMDAwCiAKLTIwMDItMDMtMDcgIEFuZHJlYXMgVG9ibGVyICA8dG9hQHBvcC5hZ3JpLmNoPgotCSAgICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisgICAgdXBkYXRlIGNoYW5nZWxvZwogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBEYXJ3aW4gYW5kIEFJWCBjbG9zdXJlIGZpbGVzLgotCShUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogQWRkIGFpeF9jbG9zdXJlLlMuCi0JKFRBUkdFVF9TUkNfUE9XRVJQQ19EQVJXSU4pOiBBZGQgZGFyd2luX2Nsb3N1cmUuUy4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIEFJWCBhbmQgRGFyd2luIGNsb3N1cmUgZGVmaW5pdGlvbnMuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcgZnVuY3Rpb24uCi0JKGZsdXNoX2ljYWNoZSwgZmx1c2hfcmFuZ2UpOiBOZXcgZnVuY3Rpb25zLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogTmV3IGZ1bmN0aW9uLgotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTmV3IGZpbGUuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBOZXcgZmlsZS4KK2NvbW1pdCBiNWU0NGM4ZGZhOTJjODdiOTk3NjJjMzAzY2Y1NTc0YTE2ZGI4ZjI3CitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgU3VuIEZlYiAzIDAxOjEyOjMyIDIwMDggKzAwMDAKIAotMjAwMi0wMi0yNCAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorICAgIG9mZnNldCBmcm9tIGNvZGUgYmFzZSBhZGRyZXNzLCBub3QgZGF0YSBiYXNlIGFkZHJlc3MKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHR5cGVkZWYgZm9yIGZmaV9hcmcuCi0JKiBzcmMvZmZpdGVzdC5jIChtYWluKTogRGVjbGFyZSByaW50IHdpdGggZmZpX2FyZy4KK2NvbW1pdCBmMzU5ODQ4ZDFhOTk1YzBlNDQ1NjZkODE1ZjIxODcyOWRjOTk2ZTIyCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxIDIxOjI5OjQzIDIwMDggKzAwMDAKIAotMjAwMi0wMi0yMSAgQW5kcmVhcyBUb2JsZXIgIDx0b2FAcG9wLmFncmkuY2g+CisgICAgRml4IGhlYWRlciBpbnN0YWxscy4KIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogU2tpcCBhcHByb3ByaWF0ZQotCW51bWJlciBvZiBHUFJzIGZvciBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMuCitjb21taXQgYzMwZGY0OWUxNTdjN2JmYzhlMTllM2Y4YTcyYjk0NjRmZTIyNWU1NAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMSAyMToxMzo1NSAyMDA4ICswMDAwCiAKLTIwMDItMDEtMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgIFJldmVydCBteSBicm9rZW4gY2hhbmdlcyB0byB0d2FsbCdzIHBhdGNoLgogCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuaW46IFJlcGxhY2UgQ0hFQ0tfU0laRU9GIGFuZCBlbmRpYW4gdGVzdHMgd2l0aAotCWNyb3NzLWNvbXBpbGVyIGZyaWVuZGx5IG1hY3Jvcy4KLQkqIGFjbG9jYWwubTQgKEFDX0NPTVBJTEVfQ0hFQ0tfU0laRU9GLCBBQ19DX0JJR0VORElBTl9DUk9TUyk6IE5ldwotCW1hY3Jvcy4KK2NvbW1pdCA2NzU1NjFiYjlhYTA3MzJjNzY2OThkZjEwZGQzMDA3YjVkMGVjNzU5CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEphbiAzMSAxMzo0NDoyNSAyMDA4ICswMDAwCiAKLTIwMDItMDEtMTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKyAgICBGaXggbWFrZSBkaXN0IC4KIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9BSVgpOiBOZXcuCi0JKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfREFSV0lOKTogTmV3LgorY29tbWl0IGFiYzBiYmYzODEzZGM0M2UyM2Q0YzIzZTZmZTc5NGRiZjI4NzYzOWIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgSmFuIDMxIDExOjU4OjU3IDIwMDggKzAwMDAKIAotMjAwMi0wMS0xNyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorICAgIEFkZCBUaW0gV2FsbCdzIHg4NiB3aW5kb3dzIHBhdGNoLgogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBEYXJ3aW4gYW5kIEFJWCBmaWxlcy4KLQkoVEFSR0VUX1NSQ19QT1dFUlBDX0FJWCk6IE5ldy4KLQkoUE9XRVJQQ19BSVgpOiBOZXcgc3RhbnphLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmUuaW46IEFkZCBBSVggY2FzZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9hYmkpOiBBZGQgRkZJX0FJWC4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3N0YXR1cyk6IFVzZSAibG9uZyIgdG8gc2NhbGUgZnJhbWUKLQlzaXplLiAgRml4ICJsb25nIGRvdWJsZSIgc3VwcG9ydC4KLQkoZmZpX2NhbGwpOiBBZGQgRkZJX0FJWCBjYXNlLgotCSogc3JjL3Bvd2VycGMvYWl4LlM6IE5ldy4KK2NvbW1pdCBlMzMyMzY2ZDE1YTMxMTk4NzM1YjU5M2VjOGY3ZmMwNTU4ZDc4M2I4CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgV2VkIEphbiAzMCAxMzoyMTowMiAyMDA4ICswMDAwCiAKLTIwMDEtMTAtMDkgIEpvaG4gSG9ybmt2aXN0ICA8am9obkB0b2FzdGVkbWFyc2htYWxsb3cuY29tPgorICAgIEFkZCBISidzIC1mb21pdC1mcmFtZS1wb2ludGVyIHN0cnVjdCByZXR1cm4gZml4CiAKLQlJbXBsZW1lbnQgRGFyd2luIFBvd2VyUEMgQUJJLgotCSogY29uZmlndXJlLmluOiBIYW5kbGUgcG93ZXJwYy0qLWRhcndpbiouCi0JKiBNYWtlZmlsZS5hbTogU2V0IHNvdXJjZSBmaWxlcyBmb3IgUE9XRVJQQ19EQVJXSU4uCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGluY2x1ZGUvZmZpLmguaW46IERlZmluZSBGRklfREFSV0lOIGFuZCBGRklfREVGQVVMVF9BQkkgZm9yCi0JUE9XRVJQQ19EQVJXSU4uCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogTmV3IGZpbGUuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IE5ldyBmaWxlLgorY29tbWl0IGQ0MjA0MjQwMzkyYWY1Yjc3NTBhMDg2NzFiMDhlOWMyMmRmZjVlOTMKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBXZWQgSmFuIDMwIDEyOjQyOjM0IDIwMDggKzAwMDAKIAotMjAwMS0xMC0wNyAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgorICAgIENsZWFuIHVwIGZvciBuZXcgYXV0b21ha2UuCiAKLQkqIHNyYy94ODYvZmZpLmM6IEZpeCBzcGVsbGluZyBlcnJvciBvZiAic2VwYXJhdGUiIGFzICJzZXBlcmF0ZSIuCitjb21taXQgZjQ5MzJkZDAyMGRmNTc0NjM3YzlmYjNmYzFiYjE4ZTVhOGYzMDRjYworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFdlZCBKYW4gMzAgMTI6NDA6MjUgMjAwOCArMDAwMAogCi0yMDAxLTA3LTE2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBGaXhlcyB0byBydW4gdGVzdHN1aXRlCiAKLQkqIHNyYy94ODYvc3lzdi5TOiBBdm9pZCBnYXMtb25seSAuYmFsaWduIGRpcmVjdGl2ZS4KLQlVc2UgQyBzdHlsZSBjb21tZW50cy4KK2NvbW1pdCAwODU1MjBkZGM4ZGI2YTkxNmJmYzQxNmI4NzFmY2IyZDAwMDc0ZDQwCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEphbiAyOSAxNToxNjo0MyAyMDA4ICswMDAwCiAKLTIwMDEtMDctMTYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIE5ldyBmaWxlcyBmcm9tIGdjYyB0cmVlLgogCi0JKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBBdm9pZCBnYXMtb25seSBtbmVtb25pYy4KLQlGaXhlcyBQUiBib290c3RyYXAvMzU2My4KK2NvbW1pdCA3NzE3NWIzZjcyMzRlNDg3NWE0ZWY1NTRlZDFmZTlmZGM0MTMzNzk0CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEphbiAyOSAxNToxNToyMCAyMDA4ICswMDAwCiAKLTIwMDEtMDYtMjYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIExhdGVzdCBnY2Mgc3ZuIHNvdXJjZXMKIAotCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2xvc3VyZV9vc2YpOiBVc2UgLnJkYXRhIGZvciBFQ09GRi4KK2NvbW1pdCAyNTQ0ZTQ1YTBiMmI2MzQwNTNkZjAyZGEzYTJlZDk2ODBlZWVkMmExCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEphbiAyOSAxNDoyODoxMyAyMDA4ICswMDAwCiAKLTIwMDEtMDYtMjUgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIEluc3RhbGwgZmZpdGFyZ2V0LmggaW4gJHByZWZpeC9pbmNsdWRlLgogCi0JKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBzcGFyYyotc3VuLSogaG9zdC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCA2MDAyMjExYjFjYzRkYWViNTg3ZDA1NGI0ZjgzOTY4YmRhMmM5ODFlCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEphbiAyOSAxMjozMDoxMCAyMDA4ICswMDAwCiAKLTIwMDEtMDYtMDYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIEFkZCBuZXcgZmlsZXMuCiAKLQkqIHNyYy9hbHBoYS9vc2YuUyAoX19GUkFNRV9CRUdJTl9fKTogQ29uZGl0aW9uYWxpemUgZm9yIEVMRi4KK2NvbW1pdCBjY2FiZDJiMTZiZTg4M2NkMDNlNWYwY2Q4OGNjZmRkNmNhMzkyMzlkCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEphbiAyOSAxMjoyODoxNSAyMDA4ICswMDAwCiAKLTIwMDEtMDYtMDMgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIE1lcmdlIGZyb20gZ2NjCiAKLQkqIHNyYy9hbHBoYS9vc2YuUzogQWRkIHVud2luZCBpbmZvLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgdW53aW5kIGluZm8uCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KK2NvbW1pdCBlNjgwZWNmYmZjYTFkYThkMTgyM2U0OGJjODliODM3NWU2NmUxMjhiCitBdXRob3I6IHRyb21leSA8dHJvbWV5PgorRGF0ZTogICBTdW4gRGVjIDI0IDIzOjEyOjE1IDIwMDYgKzAwMDAKIAotMjAwMC0wNS0zMSAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorICAgIFB1bGxlZCBpbiBsaWJmZmkgZnJvbSBnY2MgdHJ1bmsuCisgICAgRml4ZWQgYnVpbGQgYW5kIGluc3RhbGwgZm9yIHN0YW5kYWxvbmUgdXNlLgogCi0JKiBjb25maWd1cmUuaW46IEZpeCBBQ19BUkdfRU5BQkxFIHVzYWdlLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IGU3YmEwODk2NTk0MmNlODcyZmRiYzY5ZjcwZjk4NDhjYzNkMGJhZDYKK0F1dGhvcjogcm9vdCA8cm9vdD4KK0RhdGU6ICAgU3VuIEp1biA0IDIzOjIyOjI0IDIwMDYgKzAwMDAKIAotMjAwMS0wNS0wNiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUB3YWl0YWtpLm90YWdvLmFjLm56PgorICAgIHNvdXJjd2FyZS5vcmcKIAotCSogY29uZmlndXJlLmluOiBSZW1vdmUgd2FybmluZyBhYm91dCBiZXRhIGNvZGUuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgMGNkNGFhMjRlMjFhYWE5NjRkZmJkZWJjMjVlYzVjODE4ODA0OTM3NQorQXV0aG9yOiByb290IDxyb290PgorRGF0ZTogICBTdW4gTWF5IDMwIDAxOjUxOjU3IDIwMDQgKzAwMDAKIAotMjAwMS0wNC0yNSAgSGFucyBCb2VobSA8SGFuc19Cb2VobUBocC5jb20+CisgICAgQWRkIExvY2tEaXIKIAotCSogc3JjL2lhNjQvdW5peC5TOiBSZXN0b3JlIHN0YWNrIHBvaW50ZXIgd2hlbiByZXR1cm5pbmcgZnJvbQotCWZmaV9jbG9zdXJlX1VOSVguCi0JKiBzcmMvaWE2NC9mZmkuYzogRml4IHR5cG8gaW4gY29tbWVudC4KK2NvbW1pdCA1ODI2MTIwZmJkOTQwZDI2Y2NhNzZlZDI1MjIxODc1MDU1ODFlMWVkCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIE5vdiA0IDA2OjA5OjA4IDIwMDMgKzAwMDAKIAotMjAwMS0wNC0xOCAgSmltIFdpbHNvbiAgPHdpbHNvbkByZWRoYXQuY29tPgorICAgIEFkZCBsaW5rIHRvIEdpYW5uaSdzIHdlYiBzaXRlLgogCi0JKiBzcmMvaWE2NC91bml4LlM6IERlbGV0ZSB1bm5lY2Vzc2FyeSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBvZiBsb2MyCi0JdG8gZWxpbWluYXRlIFJBVyBEVi4KK2NvbW1pdCAyMjBhYTRiMjdkYjQyZDdmZmFhYzUwNTYwMDBkNTE3OWYwMGQ1ZWEzCitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBUdWUgSmFuIDIxIDA4OjA3OjQyIDIwMDMgKzAwMDAKIAotMjAwMS0wNC0xMiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisgICAgTmV3ZXIsIGJldHRlciwgaW5jcmVhc2VkIGZyb20gYmVmb3JlISAgKGxpc3Qgb2YgYWNjZXB0YWJsZSBhbm9uIHVzZXJuYW1lcykKIAotCSogTWFrZWZpbGUuYW06IE1ha2UgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCAxYzNhZGM4OTJjYzE0MDNkYzRkM2Q3MDAzYTIzODU4OTk4MzY2MTJlCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIERlYyA2IDAxOjI4OjAzIDIwMDIgKzAwMDAKIAotMjAwMS0wMy0yOSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisgICAgRml4ZWQgQ3lnbnVzIHJlZmVyZW5jZXMuCiAKLQkqIGNvbmZpZ3VyZS5pbjogVXNlIGRpZmZlcmVudCBzeW50YXggZm9yIHN1YmRpcmVjdG9yeSBjcmVhdGlvbi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCA0YWY2NmJiNjJmYWI5YThlMzE4YWYzYmYwMWU1NDg2NTk2YTBjOGQ0CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIE9jdCAyMSAxOToxODo0MiAyMDAxICswMDAwCiAKLTIwMDEtMDMtMjcgIEpvbiBCZW5pc3RvbiAgPGpvbkBiZW5pc3Rvbi5jb20+CisgICAgVGVzdHN1aXRlIGZpeGVzLgogCi0JKiBjb25maWd1cmUuaW46IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgKFdpbjMyLCBDeWdXaW4sIE1pbmdXKS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIE1ha2VmaWxlLmFtOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCA1NDM1OTY1ZjkwMTVjZTQwNTg0Yzk4ZDM4MTZjM2QwNWU3ZGUxZDIxCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgTW9uIEFwciAyMyAwMDozMjowMyAyMDAxICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KKyAgICAgICAgICAgICogaW5jbHVkZS9mZmlfY29tbW9uLmg6IERlbGV0ZSwgYWZ0ZXIgbW92aW5nIGNvbnRlbnRzIHRvLi4uCisgICAgICAgICAgICAqIGluY2x1ZGUvZmZpX3ByaXZhdGUuaDogU3Vic3VtZSBjb250ZW50cyBvZiBmZmlfY29tbW9uLmguCisgICAgICAgICAgICAqIGluY2x1ZGUvTWFrZWZpbGUuYW0gKG5vaW5zdF9IRUFERVJTKTogUmVtb3ZlIGZmaV9jb21tb24uaC4KKyAgICAgICAgICAgICogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICAgICAgICAgICogYXJtL2ZmaS5jLCBtNjhrL2ZmaS5jLCBtaXBzL2ZmaS5jLCBwb3dlcnBjL2ZmaS5jLCBzMzkwL2ZmaS5jLAorICAgICAgICAgICAgaWE2NC9mZmkuYzogSW5jbHVkZSBmZmlfcHJpdmF0ZS5oLCBub3QgZmZpX2NvbW1vbi5oLgorICAgICAgICAgICAgKiBhbHBoYS9mZmkuYywgc3BhcmMvZmZpLmMsIHg4Ni9mZmkuYzogRG9uJ3QgaW5jbHVkZSBmZmlfY29tbW9uLmguCisgICAgICAgICAgICAqIHR5cGVzLmMsIHJhd19hcGkuYywgamF2YV9yYXdfYXBpLmMsIHByZXBfY2lmLmM6IERvbid0IGluY2x1ZGUKKyAgICAgICAgICAgIGZmaV9jb21tb24uaC4KKyAgICAgICAgICAgICogZGVidWcuYzogSW5jbHVkZSBmZmlfcHJpdmF0ZS5oIGluc3RlYWQgb2YgZmZpX2NvbW1vbi5oLgorICAgIAorICAgICAgICAgICAgKiBtaXBzL2ZmaS5jIChjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MpOiBNYWtlIHN0YXRpYy4KKyAgICAgICAgICAgIChGSVhfQVJHUCk6IFJlbW92ZSBjYWxsIHRvIGRlYnVnZ2luZyByb3V0aW5lIGZmaV9zdG9wX2hlcmUuCisgICAgCisgICAgICAgICAgICAqIG1pcHMvbjMyLlM6IEluY2x1ZGUgZmZpX3ByaXZhdGUuaC4KKyAgICAgICAgICAgICogbWlwcy9vMzIuUzogSW5jbHVkZSBmZmlfcHJpdmF0ZS5oLgogCi0JKiBzcmMvZmZpdGVzdC5jOiBEb2Vzbid0IHJ1biBzdHJ1Y3R1cmUgdGVzdHMgZm9yIFg4Nl9XSU4zMiB0YXJnZXRzLgotCSogc3JjL3R5cGVzLmM6IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KK2NvbW1pdCA2ZmRiN2RlMGZlM2I3Mzg1ZTFmZDc4ODEyYWU2OWQ5YjMwNjlkOTk0CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxOTozODozNCAyMDAxICswMDAwCiAKLQkqIHNyYy94ODYvd2luMzIuUzogTmV3IGZpbGUuIEJhc2VkIG9uIHN5c3YuUywgYnV0IHdpdGggRUgKLQlzdHVmZiByZW1vdmVkIGFuZCBtYWRlIHRvIHdvcmsgd2l0aCBDeWdXaW4ncyBnYXMuCisgICAgICAgICAgICAqIFJFQURNRTogVXBkYXRlIHNvbWUgY29tbWVudHMuCisgICAgCisgICAgICAgICAgICAqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogQWRkIGluY2x1ZGUgc28gZmZpLmggZ2V0cyBpbnN0YWxsZWQuCisgICAgICAgICAgICAqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIAorICAgICAgICAgICAgKiBpbmNsdWRlL2ZmaS5oOiBDaGFuZ2UgQUxQSEEgdG8gX19hbHBoYV9fIGFuZCBTUEFSQyB0byBfX3NwYXJjX18uCisgICAgICAgICAgICAqIHR5cGVzLmM6IERpdHRvLgorICAgICAgICAgICAgKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBEaXR0by4KKyAgICAKKyAgICAgICAgICAgICogYWxwaGEvZmZpLmMsIGFscGhhL29zZi5TLCBzcGFyYy9mZmkuYywgc3BhcmMvdjguUywgc3BhcmMvdjkuUzoKKyAgICAgICAgICAgIEluY2x1ZGUgZmZpX3ByaXZhdGUuaC4KKyAgICAKKyAgICAgICAgICAgICogaW5jbHVkZS9mZmlfcHJpdmF0ZS5oIChGRklfVFlQRV9MQVNUKTogRGVmaW5lLgogCi0yMDAxLTAzLTI2ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KK2NvbW1pdCBiYzcxNDRiMDFiOTcwN2VmMzVmMWEyZTNlNjk5NmUwMDVlODI5NTNhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoyODozNiAyMDAxICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogTWFrZSB0YXJnZXQgc3ViZGlyZWN0b3J5IGluIGJ1aWxkIGRpci4KLQkqIE1ha2VmaWxlLmFtOiBPdmVycmlkZSBzdWZmaXggYmFzZWQgcnVsZXMgdG8gc3BlY2lmeSBjb3JyZWN0IG91dHB1dAotCXN1YmRpcmVjdG9yeS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIE1vdmVkIGZpbGVzIGZyb20gb2xkIGhvbWUKIAotMjAwMS0wMy0yMyAgS2V2aW4gQiBIZW5kcmlja3MgIDxraGVuZHJpY2tzQGl2ZXkudXdvLmNhPgorY29tbWl0IGU1NzI3OTgzMWUyMDM2OGMxYWExZDJiMzU0NjJiODYyOWJlNzM5NTkKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjIzOjQ3IDIwMDEgKzAwMDAKIAotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTmV3IGZpbGUuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeGVkIEFCSSBjb21wYXRpYmlsaXR5IGJ1ZwotCWludm9sdmluZyBsb25nIGxvbmcgYW5kIHJlZ2lzdGVyIHBhaXJzLgotCShmZmlfcHJlcF9jbG9zdXJlKTogTmV3IGZ1bmN0aW9uLgotCShmbHVzaF9pY2FjaGUpOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KLQkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV9DTE9TVVJFUyk6IERlZmluZSBvbiBQUEMuCi0JKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KLQkoRkZJX05BVElWRV9SQVdfQVBJKTogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkZWQgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUy4KLQkoVEFSR0VUX1NSQ19QT1dFUlBDKTogTGlrZXdpc2UuCisgICAgVGhlc2UgYXJlIGRlYWQuCiAKLTIwMDEtMDMtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KK2NvbW1pdCA3MjQ3NDM2YjVmZTcxNzY3YjI5ZGMwMmI0ZGEwZmUxOGIwODA4MmU2CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoyMjo0MyAyMDAxICswMDAwCiAKLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogTWFrZWZpbGUuYW0gKGZmaXRlc3RfTERGTEFHUyk6IE5ldyBtYWNyby4KKyAgICBBbGwgdGhlc2UgZmlsZXMgbGl2ZSBzb21ld2hlcmUgZWxzZSBub3cuCiAKLTIwMDEtMDMtMDIgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Citjb21taXQgYThiMGQ0MGZmOTA4ZTI3NTAyOGY2NzY4NzBjMzFkMGQ3MDI3NGE5OAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MTc6MTQgMjAwMSArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIGluY2x1ZGUvZmZpX21pcHMuaDogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvZGVidWcuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvZmZpdGVzdC5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9wcmVwX2NpZi5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy90eXBlcy5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9hbHBoYS9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvYWxwaGEvb3NmLlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL2FybS9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvYXJtL3N5c3YuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvbWlwcy9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvbWlwcy9uMzIuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvbWlwcy9vMzIuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvc3BhcmMvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL3NwYXJjL3Y4LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL3NwYXJjL3Y5LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL3g4Ni9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMveDg2L3N5c3YuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisgICAgTWFueSBjaGFuZ2VzLiAgTm90IHF1aXRlIHRoZXJlIHlldC4KIAotMjAwMS0wMi0wOCAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgorY29tbWl0IGY4OTNkMjI3MzM1NTcxMGEyOTBhMjZmYWViZjVmMTJjM2EzNGQwZTMKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjEzOjIyIDIwMDEgKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogQ2hhbmdlIHNvdXJjZXdhcmUuY3lnbnVzLmNvbSByZWZlcmVuY2VzIHRvCi0JZ2NjLmdudS5vcmcuCisgICAgTW92ZWQgbTY4ayBmaWxlcwogCi0yMDAwLTEyLTA5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IDY4OGRkZmVjZWQ4OWNiYjlkMzdiNTMwMDVlMWY3ZjJiOWM3OGE4ZDcKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjEyOjMzIDIwMDEgKzAwMDAKIAotCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfY2FsbCk6IFNpbXBsaWZ5IHN0cnVjdCByZXR1cm4gdGVzdC4KLQkoZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogSW5kZXggcmF0aGVyIHRoYW4gaW5jcmVtZW50IGF2YWx1ZQotCWFuZCBhcmdfdHlwZXMuICBHaXZlIGZmaV9jbG9zdXJlX29zZiB0aGUgcmF3IHJldHVybiB2YWx1ZSB0eXBlLgotCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2xvc3VyZV9vc2YpOiBIYW5kbGUgcmV0dXJuIHZhbHVlIHR5cGUKLQlwcm9tb3Rpb24uCisgICAgTmV3LCB0YXJnZXQgaW5kZXBlbnRlbnQsIGhlYWRlcgogCi0yMDAwLTEyLTA3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IGY5ZTQwNzc2ZDQ4OGQ1ZWNmNDNiM2FlMjE0NDRhMWEyZjZlY2E1MjgKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjExOjU3IDIwMDEgKzAwMDAKIAotCSogc3JjL3Jhd19hcGkuYyAoZmZpX3RyYW5zbGF0ZV9hcmdzKTogRml4IHR5cG8uCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBMaWtld2lzZS4KKyAgICBNYW55IGNoYW5nZXMuCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gW0FMUEhBXTogRGVmaW5lIEZGSV9DTE9TVVJFUyBhbmQKLQlGRklfVFJBTVBPTElORV9TSVpFLgotCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkanVzdCBtaW5pbWFsCi0JY2lmLT5ieXRlcyBmb3IgbmV3IGZmaV9jYWxsX29zZiBpbXBsZW1lbnRhdGlvbi4KLQkoZmZpX3ByZXBfYXJncyk6IEFic29yYiBpbnRvIC4uLgotCShmZmlfY2FsbCk6IC4uLiBoZXJlLiAgRG8gYWxsIHN0YWNrIGFsbG9jYXRpb24gaGVyZSBhbmQKLQlhdm9pZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLgotCShmZmlfcHJlcF9jbG9zdXJlLCBmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBOZXcuCi0JKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jYWxsX29zZik6IFJlaW1wbGVtZW50IHdpdGggbm8gY2FsbGJhY2suCi0JKGZmaV9jbG9zdXJlX29zZik6IE5ldy4KK2NvbW1pdCA4YzFkMmViNDdmNmJjMzE0YzQzMWI3NWM4NWMxMDdlOGU0M2M0YTc2CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoxMDo0NyAyMDAxICswMDAwCiAKLTIwMDAtMDktMTAgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorICAgIE1hbnkgY2hhbmdlcwogCi0JKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGluc3RhbGwtc2g6IFJlbW92ZWQuCi0JKiBsdGNvbmZpZywgbHRtYWluLnNoLCBtaXNzaW5nLCBta2luc3RhbGxkaXJzOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IDEzNTlkZmM2NTgyNjgwYTE1OGIzY2FhM2VmYjdhMzY4ZGE0YWExMmQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjEwOjIwIDIwMDEgKzAwMDAKIAotCSogYWNpbmNsdWRlLm00OiBJbmNsdWRlIGxpYnRvb2wgbWFjcm9zIGZyb20gdGhlIHRvcCBsZXZlbC4KLQkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBNb3ZlZCBpYTY0IGZpbGVzCiAKLTIwMDAtMDgtMjIgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorY29tbWl0IDZlMmRlNWVlZTMxNmE0NTc5ODY5YWZmNTBjN2M1ZjZmNDc4NTgyZDgKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjA4OjExIDIwMDEgKzAwMDAKIAotCSogY29uZmlndXJlLmluIFtpKjg2LSotZnJlZWJzZCpdIChUQVJHRVQsIFRBUkdFVERJUik6IFNldC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBNb3ZlZCBhcm0gZmlsZXMKIAotMjAwMC0wNS0xMSAgU2NvdHQgQmFtYnJvdWdoICA8c2NvdHRiQG5ldHdpbmRlci5vcmc+Citjb21taXQgODgwNzM1NWFmMzRjYmE4ZmZlODdhZWU1MTE1MmRmY2NlYzI3NzFmYQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIE1vbiBBcHIgOSAwMDo1ODozOCAyMDAxICswMDAwCiAKLQkqIGxpYmZmaS9zcmMvYXJtL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IERvdWJsZXMgYXJlIG5vdCBzYXZlZCB0bwotCW1lbW9yeSBjb3JyZWN0bHkuICBVc2UgY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zLCBub3QgYnJhbmNoZXMgd2hlcmUKLQlwb3NzaWJsZS4KKyAgICBNYW55IG1hbnkgdXBkYXRlcy4gIE1lcmdlIGZyb20gZ2NjIGFuZCB0aGVuIHNvbWUuCiAKLTIwMDAtMDUtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KK2NvbW1pdCBmN2U5ZjkxYWRlYzRmZjFjMmU3YTEzYjNkZTgxZDJjNWEzZjU1ZTdlCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgTW9uIEFwciAxNyAwMzozMjozNyAyMDAwICswMDAwCiAKLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5pbjogTWF0Y2ggYGFybSotKi1saW51eC0qJy4KLQlGcm9tIENocmlzIERvcm5hbiA8Y2Rvcm5hbkBhcm0uY29tPi4KKyAgICBNbmF5IGZpeGVzLgogCi0yMDAwLTA0LTI4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KK2NvbW1pdCBjNDg2MGRlNjE4ZjQ5NTYyODNmNWM4MjMwYTI1NDRlNDAzZGZlMzkwCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgTW9uIEFwciAxNyAwMzoxODo0NiAyMDAwICswMDAwCiAKLQkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogRGVmaW5lLgotCShBTV9NQUtFRkxBR1MpOiBMaWtld2lzZS4KLQkoTXVsdGlsaWIgc3VwcG9ydC4pOiBBZGQgc2VjdGlvbi4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogbHRjb25maWcgKGV4dHJhX2NvbXBpbGVyX2ZsYWdzLCBleHRyYV9jb21waWxlcl9mbGFnc192YWx1ZSk6Ci0JTmV3IHZhcmlhYmxlcy4gU2V0IGZvciBnY2MgdXNpbmcgLXByaW50LW11bHRpLWxpYi4gRXhwb3J0IHRoZW0KLQl0byBsaWJ0b29sLgotCShzcGFyYzY0LSotbGludXgtZ251Kik6IFVzZSBsaWJzdWZmIDY0IGZvciBzZWFyY2ggcGF0aHMuCi0JKiBsdG1haW4uc2ggKEJ8YnxWKTogRG9uJ3QgdGhyb3cgYXdheSBnY2MncyAtQiwgLWIgYW5kIC1WIG9wdGlvbnMKLQlmb3IgLXNoYXJlZCBsaW5rcy4KLQkoZXh0cmFfY29tcGlsZXJfZmxhZ3NfdmFsdWUsIGV4dHJhX2NvbXBpbGVyX2ZsYWdzKTogQ2hlY2sgdGhlc2UKLQlmb3IgZXh0cmEgY29tcGlsZXIgb3B0aW9ucyB3aGljaCBuZWVkIHRvIGJlIHBhc3NlZCBkb3duIGluCi0JY29tcGlsZXJfZmxhZ3MuCisgICAgTWVyZ2UgZnJvbSBsaWJnY2ouICBNZXJnZWQgcGF0Y2hlcyBmcm9tIG5ldC4gIFNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCiAKLTIwMDAtMDQtMTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorY29tbWl0IGM1NzhiNTgzMTQ5OTBjMzg1MzQyOTI5N2MzOGJhMTQwMTVmZWM1ZmEKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFNhdCBPY3QgOSAyMDoxODoxNiAxOTk5ICswMDAwCiAKLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIGkqODYtcGMtbGludXgqIHRvIGkqODYtKi1saW51eCouCisgICAgMTk5OS0xMC0wOSAgSmFzb24gTW9sZW5kYSAgKGpzbUBidWdzaGFjay5jeWdudXMuY29tKQorICAgIAorICAgIAkqIENWU1JPT1QvYXV0b19jaGVja291dCwgQ1ZTUk9PVC9jb21taXRfcHJlcCwgQ1ZTUk9PVC9sb2dfYWNjdW06CisgICAgCURlbGV0ZWQ7IGdlbmVyaWMgdmVyc2lvbnMgbm93IHVzZWQgZm9yIGFsbCByZXBvc2l0b3JpZXMuCisgICAgCisgICAgCSogQ1ZTUk9PVC9jb21taXRpbmZvLCBDVlNST09UL2xvZ2luZm86ICBDaGFuZ2UgcGF0aG5hbWVzIHRvCisgICAgCWdlbmVyaWMgdmVyc2lvbnMuCisgICAgCisgICAgICAgICAgICAqIENWU1JPT1QvY2hlY2tvdXRsaXN0OiAgRG9uJ3QgdHJ5IHRvIGNoZWNrIG91dCB0aGUgcmVtb3ZlZAorICAgICAgICAgICAgZmlsZXMgYW55IGxvbmdlci4KIAotMjAwMC0wNC0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Citjb21taXQgYWNkYjIwMDUxMjA3ZmVkNzY1MmRkOWYxMjJmNjVkZTU0NThjNDc0YworQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgU2F0IE9jdCA5IDIwOjE4OjE1IDE5OTkgKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbiAoU1BBUkM2NCk6IERlZmluZSBmb3IgNjRiaXQgU1BBUkMgYnVpbGRzLgotCVNldCBTUEFSQyBGRklfREVGQVVMVF9BQkkgYmFzZWQgb24gU1BBUkM2NCBkZWZpbmUuCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjgpOiBSZW5hbWVkIGZyb20gZmZpX3ByZXBfYXJncy4KLQlSZXBsYWNlIGFsbCB2b2lkICogc2l6ZW9mcyB3aXRoIHNpemVvZihpbnQpLgotCU9ubHkgY29tcGFyZSB0eXBlIHdpdGggRkZJX1RZUEVfTE9OR0RPVUJMRSBpZiBMT05HRE9VQkxFIGlzCi0JZGlmZmVyZW50IHRoYW4gRE9VQkxFLgotCVJlbW92ZSBGRklfVFlQRV9TSU5UMzIgYW5kIEZGSV9UWVBFX1VJTlQzMiBjYXNlcyAoaGFuZGxlZCBlbHNld2hlcmUpLgotCShmZmlfcHJlcF9hcmdzX3Y5KTogTmV3IGZ1bmN0aW9uLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBWOSBBQkkgYW5kIGxvbmcgbG9uZyBvbiBWOC4KLQkoZmZpX1Y5X3JldHVybl9zdHJ1Y3QpOiBOZXcgZnVuY3Rpb24uCi0JKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9WOSBBQkkgZnJvbSA2NGJpdCBjb2RlIGFuZCBGRklfVjggQUJJIGZyb20KLQkzMmJpdCBjb2RlIChub3QgeWV0IGNyb3NzLWFyY2ggY2FsbHMpLgotCSogc3JjL3NwYXJjL3Y4LlM6IEFkZCBzdHJ1Y3QgcmV0dXJuIGRlbGF5IG5vcC4KLQlIYW5kbGUgbG9uZyBsb25nLgotCSogc3JjL3NwYXJjL3Y5LlM6IE5ldyBmaWxlLgotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IFJldHVybiBzdHJ1Y3R1cmUgcG9pbnRlcgotCWlzIHVzZWQgb24gc3BhcmM2NCBvbmx5IGZvciBzdHJ1Y3R1cmVzIGxhcmdlciB0aGFuIDMyIGJ5dGVzLgotCVBhc3MgYnkgcmVmZXJlbmNlIGZvciBzdHJ1Y3R1cmVzIGlzIGRvbmUgZm9yIHN0cnVjdHVyZSBhcmd1bWVudHMKLQlsYXJnZXIgdGhhbiAxNiBieXRlcy4KLQkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBVc2UgNjRiaXQgcmludCBvbiBzcGFyYzY0LgotCVJ1biBsb25nIGxvbmcgdGVzdHMgb24gc3BhcmMuCi0JKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IFBvaW50ZXIgaXMgNjRiaXQgb24gYWxwaGEgYW5kCi0Jc3BhcmM2NC4KLQkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IGxvbmcgZG91YmxlIGlzIDEyOCBiaXQgYWxpZ25lZCB0byAxMjggYml0cwotCW9uIHNwYXJjNjQuCi0JKiBjb25maWd1cmUuaW4gKHNwYXJjLSotbGludXgqKTogTmV3IHN1cHBvcnRlZCB0YXJnZXQuCi0JKHNwYXJjNjQtKi1saW51eCopOiBMaWtld2lzZS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIE1ha2VmaWxlLmFtOiBBZGQgdjkuUyB0byBTUEFSQyBmaWxlcy4KLQkqIE1ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkoTElOSyk6IFN1cnJvdW5kICQoQ0NMRCkgaW50byBkb3VibGUgcXVvdGVzLCBzbyB0aGF0IG11bHRpbGliCi0JY29tcGlsZXMgd29yayBjb3JyZWN0bHkuCisgICAgMTk5OS0xMC0wOSAgSmFzb24gTW9sZW5kYSAgKGpzbUBidWdzaGFjay5jeWdudXMuY29tKQorICAgIAorICAgIAkqIENWU1JPT1QvYXV0b19jaGVja291dCwgQ1ZTUk9PVC9jb21taXRfcHJlcCwgQ1ZTUk9PVC9sb2dfYWNjdW06CisgICAgCURlbGV0ZWQ7IGdlbmVyaWMgdmVyc2lvbnMgbm93IHVzZWQgZm9yIGFsbCByZXBvc2l0b3JpZXMuCisgICAgCisgICAgCSogQ1ZTUk9PVC9jb21taXRpbmZvLCBDVlNST09UL2xvZ2luZm86ICBDaGFuZ2UgcGF0aG5hbWVzIHRvCisgICAgCWdlbmVyaWMgdmVyc2lvbnMuCisgICAgCisgICAgICAgICAgICAqIENWU1JPT1QvY2hlY2tvdXRsaXN0OiAgRG9uJ3QgdHJ5IHRvIGNoZWNrIG91dCB0aGUgcmVtb3ZlZAorICAgICAgICAgICAgZmlsZXMgYW55IGxvbmdlci4KIAotMjAwMC0wNC0wNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+Citjb21taXQgZTc1YmU2NTVjZWVkZjdhYjI0YzRlOTlkNzVlZWM5ZWZlYjk3OWJjNworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBdWcgOCAxMzoxNjo0MSAxOTk5ICswMDAwCiAKLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5pbjogKGkqODYtKi1zb2xhcmlzKik6IE5ldyBsaWJmZmkgdGFyZ2V0LiBQYXRjaAotCXByb3Bvc2VkIGJ5IEJyeWNlIE1jS2lubGF5LgorICAgIE5ldyBjb25maWd1cnkKIAotMjAwMC0wMy0yMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorY29tbWl0IGQ2NjY5YTBkZDViMjY2MDA1MzI1YmJmNmQ1YThmZjM0NTc0ZDgwOWUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXVnIDggMTM6MDU6MTIgMTk5OSArMDAwMAogCi0JKiBNYWtlZmlsZS5pbjogSGFuZCBlZGl0IGZvciBqYXZhX3Jhd19hcGkubG8uCisgICAgCSogaW5jbHVkZS9mZmkuaC5pbjogVHJ5IHRvIHdvcmsgYXJvdW5kIG1lc3N5IGhlYWRlciBwcm9ibGVtCisgICAgCXdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTi4KKyAgICAKKyAgICAJKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgCSogY29uZmlndXJlLmluOiBDaGFuZ2UgdmVyc2lvbiB0byAyLjAwLWJldGEuCisgICAgCisgICAgICAgICAgICAqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorICAgIAkqIGFjY29uZmlnLmggKEZGSV9OT19TVFJVQ1RTLCBGRklfTk9fUkFXX0FQSSk6IERlZmluZS4KKyAgICAKKyAgICAJKiBzcmMveDg2L2ZmaS5jIChmZmlfcmF3X2NhbGwpOiBSZW5hbWUuCiAKLTIwMDAtMDMtMDggIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorY29tbWl0IDQ4MTlkNTJiMDA3OTM0YTQwZDZkMjlhNzVlZTMwZTg1N2M0YTkzYWUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBXZWQgQXVnIDQgMTg6MDI6MzQgMTk5OSArMDAwMAogCi0JKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWI6IFVwZGF0ZSBmcm9tIHRoZSBnY2MgdHJlZS4KLQlGaXggZm9yIFBSIGxpYmdjai8xNjguCisgICAgTmV3IGZpbGUgZm9yIEtyZXN0ZW4ncyBjbG9zdXJlIHdvcmsKIAotMjAwMC0wMy0wMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorY29tbWl0IDJkYmY4MDFlYjQyN2NiZjUwMjFhOWUxZTUxMmI1ZmM1MjM1MjQ3MDAKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBXZWQgQXVnIDQgMTg6MDA6MDUgMTk5OSArMDAwMAogCi0JKiBNYWtlZmlsZS5pbjogRml4ZWQgaWE2NCBieSBoYW5kLgorICAgIEtyZXN0ZW4ncyBjbG9zdXJlIHdvcmsuIEluaXRpYWwgY2hlY2tpbi4KIAotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmluICgtLWVuYWJsZS1tdWx0aWxpYik6IE5ldyBvcHRpb24uCi0JKGxpYmZmaV9iYXNlZGlyKTogTmV3IHN1YnN0LgotCShBQ19PVVRQVVQpOiBBZGRlZCBtdWx0aWxpYiBjb2RlLgorY29tbWl0IGQxNzA5NjE3MDFiMGYyYmY3ZTgyNGQ3Y2FiYTJlYmUxMDAwMmVkODQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgSnVsIDggMTQ6MzY6NTIgMTk5OSArMDAwMAogCi0yMDAwLTAzLTAyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisgICAgCSogY29uZmlndXJlLmluOiBBZGQgeDg2IGFuZCBwb3dlcnBjIEJlT1MgY29uZmlndXJhdGlvbnMuCisgICAgCUZyb20gTWFrb3RvIEthdG8gPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPi4KIAotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19JQTY0KTogVXNlIGBpYTY0Jywgbm90IGBhbHBoYScsIGFzCi0JZGlyZWN0b3J5IG5hbWUuCitjb21taXQgYzc3NDdkOTc2OTI0ZWM2ZjIyMjljYmNmYmJkYjk4ZDM2NGUxMGRlOQorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgV2VkIE1heSAxMiAyMzozMjoxNiAxOTk5ICswMDAwCiAKLTIwMDAtMDItMjUgIEhhbnMgQm9laG0gPGJvZWhtQGFjbS5vcmc+CisgICAgMTk5OS0wNS0xMiAgSmFzb24gTW9sZW5kYSAgKGpzbUBidWdzaGFjay5jeWdudXMuY29tKQorICAgICAgICAgICAgKiBpbmRleC5odG1sOiBBZGQgbGlua3MgdG8gbGliZmZpKiBtYWlsIGxpc3QgYXJjaGl2ZXMuCiAKLQkqIHNyYy9pYTY0L2ZmaS5jLCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsIHNyYy9pYTY0L3VuaXguUzogTmV3Ci0JZmlsZXMuCi0JKiBzcmMvcmF3X2FwaS5jIChmZmlfdHJhbnNsYXRlX2FyZ3MpOiBGaXhlZCB0eXBvIGluIGFyZ3VtZW50Ci0JbGlzdC4KLQkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBVc2UgZmZpX3RyYW5zbGF0ZV9hcmdzLCBub3QKLQlmZmlfY2xvc3VyZV90cmFuc2xhdGUuCi0JKiBzcmMvamF2YV9yYXdfYXBpLmM6IE5ldyBmaWxlLgotCSogc3JjL2ZmaXRlc3QuYyAoY2xvc3VyZV90ZXN0X2ZuKTogTmV3IGZ1bmN0aW9uLgotCShtYWluKTogRGVmaW5lIGByaW50JyBhcyBsb25nIGxvbmcgb24gSUE2NC4gIEFkZGVkIG5ldyB0ZXN0IHdoZW4KLQlGRklfQ0xPU1VSRVMgaXMgZGVmaW5lZC4KLQkqIGluY2x1ZGUvZmZpLmguaW4gKEFMSUdOKTogVXNlIHNpemVfdCwgbm90IHVuc2lnbmVkLgotCShmZmlfYWJpKTogUmVjb2duaXplIElBNjQuCi0JKGZmaV9yYXcpOiBBZGRlZCBgZmx0JyBmaWVsZC4KLQlBZGRlZCAiSmF2YSByYXcgQVBJIiBjb2RlLgotCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgaWE2NC4KLQkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX0lBNjQpOiBOZXcgbWFjcm8uCi0JKGxpYmZmaV9sYV9jb21tb25fU09VUkNFUyk6IEFkZGVkIGphdmFfcmF3X2FwaS5jLgotCShsaWJmZmlfbGFfU09VUkNFUyk6IERlZmluZSBpbiBJQTY0IGNhc2UuCitjb21taXQgZGQyYWE5YThkZTIyZTI2ZGYzYmJjODVkMDY4MzU4NjQxZjYyMDJmNworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBNYXkgNiAwNTozNDozNiAxOTk5ICswMDAwCiAKLTIwMDAtMDEtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKyAgICAJKiBjb25maWd1cmUuaW46IEFkZCB3YXJuaW5nIGFib3V0IHRoaXMgYmVpbmcgYmV0YSBjb2RlLgorICAgIAlSZW1vdmUgc3JjL01ha2VmaWxlLmFtIGZyb20gdGhlIHBpY3R1cmUuCisgICAgCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIAkqIE1ha2VmaWxlLmFtOiBNb3ZlIGxvZ2ljIGZyb20gc3JjL01ha2VmaWxlLmFtLiAgQWRkIGNoYW5nZXMKKyAgICAJdG8gc3VwcG9ydCBsaWJmZmkgYXMgYSB0YXJnZXQgbGlicmFyeS4KKyAgICAJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICAJKiBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGx0Y29uZmlnLCBsdG1haW4uc2g6CisgICAgCVVwZ3JhZGVkIHRvIG5ldyBhdXRvY29uZiwgYXV0b21ha2UsIGxpYnRvb2wuCisgICAgCSogUkVBRE1FOiBUd2Vha3MuCisgICAgCSogTElDRU5TRTogVXBkYXRlIGNvcHlyaWdodCBkYXRlLgorICAgIAkqIHNyYy9NYWtlZmlsZS5hbSwgc3JjL01ha2VmaWxlLmluOiBSZW1vdmVkLgogCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdCB3aXRoIG5ld2VyIGF1dG9tYWtlLgorY29tbWl0IDRlOTQ1MmFiZWQ1OGEzMDU4Y2NkYjQ0NmY5NmEyOWQ1MGRkYTFmMzQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBXZWQgTWF5IDUgMjI6MDY6MTMgMTk5OSArMDAwMAogCi0xOTk5LTEyLTMxICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisgICAgVXBkYXRlZCB0byBuZXcgYXV0b21ha2UsIGxpYnRvb2wsIGF1dG9jb25mIC0gbm90aGluZyB3b3JrcyA6LSkKIAotCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkZWQgLUkkKHRvcF9zcmNkaXIpL3NyYy4KK2NvbW1pdCA2ZDNiMmJkZGFmNDk2N2ZiYThiODY1NmMwMWJmYzc3ZWMwZjI4MDBjCitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBNb24gQXByIDI2IDE1OjU1OjI4IDE5OTkgKzAwMDAKIAotMTk5OS0wOS0wMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorICAgIDE5OTktMDQtMjYgIEphc29uIE1vbGVuZGEgIChqc21AYnVnc2hhY2suY3lnbnVzLmNvbSkKKyAgICAgICAgICAgICogaW5kZXguaHRtbDogTWlzc2VkIGEgcmVmZXJlbmNlIHRvIGxpYmZmaS1kaXNjdXNzQGN5Z251cy5jb20uICBGaXhlZC4KIAotCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlZCBQQUNLQUdFIGFuZCBWRVJTSU9OIGRlZmluZXMgYW5kCi0JdW5kZWZzLgotCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuaW46IFBhc3MgM3JkIGFyZ3VtZW50IHRvIEFNX0lOSVRfQVVUT01BS0UuCi0JVXNlIEFNX1BST0dfTElCVE9PTCAoYXV0b21ha2UgMS40IGNvbXBhdGliaWxpdHkpLgotCSogYWNjb25maWcuaDogRG9uJ3QgI3VuZGVmIFBBQ0tBR0Ugb3IgVkVSU0lPTi4KK2NvbW1pdCBlYmM2YTljMjhhZjgzMWQzZDE4N2FmOGZmMTczMTlmMGYzMDliZDk4CitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBNb24gQXByIDI2IDE1OjUzOjI5IDE5OTkgKzAwMDAKIAotMTk5OS0wOC0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisgICAgMTk5OS0wNC0yNiAgSmFzb24gTW9sZW5kYSAgKGpzbUBidWdzaGFjay5jeWdudXMuY29tKQorICAgICAgICAgICAgKiBpbmRleC5odG1sOiBDaGFuZ2UgbGlua3MgdG8gZnRwIGRpcmVjdG9yeSB0byBwb2ludCB0byBzb3VyY2V3YXJlCisgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICBDaGFuZ2UgbWFpbGluZyBsaXN0IHN1YnNjcmlwdGlvbiBmb3JtcyB0byBwb2ludCB0byBzb3VyY2V3YXJlIGxpc3RzLgogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBUcnkgdG8gd29yayBhcm91bmQgbWVzc3kgaGVhZGVyIHByb2JsZW0KLQl3aXRoIFBBQ0tBR0UgYW5kIFZFUlNJT04uCitjb21taXQgNzhmZmM1MmE4YjI1NzA2MTM0OGM1NzZjY2I2ZmJiZjhiNDhiMGZmZgorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgU3VuIEFwciAxOCAwMTozMzoyMSAxOTk5ICswMDAwCiAKLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIHZlcnNpb24gdG8gMi4wMC1iZXRhLgorICAgIFN0YW5kYXJkIHNvdXJjZXdhcmUgc2V0dXAuCiAKLQkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgotCSogYWNjb25maWcuaCAoRkZJX05PX1NUUlVDVFMsIEZGSV9OT19SQVdfQVBJKTogRGVmaW5lLgorY29tbWl0IGI0ZDc3ZTgyN2Q3ZWJlZjdlNTdlYmNkNzFlNzFjMTVjNjJmMWUwYTgKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIE1vbiBOb3YgMzAgMTE6MTE6MjUgMTk5OCArMDAwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcmF3X2NhbGwpOiBSZW5hbWUuCisgICAgU21hbGwgdHlwZW8uICAoSSB3b3VsZG4ndCBib3RoZXIgZXhjZXB0IHRoYXQgaXQgbWFkZSB0aGUgc2VudGVuY2UgaGFyZAorICAgIGZvciBtZSB0byBwYXJzZSBvbiBhIGNhc3VhbCByZWFkLikKIAotMTk5OS0wOC0wMiAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgPGtyYWJAZG9taW5pcS5pcy5zLnUtdG9reW8uYWMuanA+Citjb21taXQgYmZiNzNmMDhmZGM5ODdlMzcwNzBjNWZiMGIxOTZmYmQyODg3Mjg4OAorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgTW9uIE5vdiAzMCAxMDo0NDo1NSAxOTk4ICswMDAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1YpOiBOZXcgZnVuY3Rpb24uCi0JKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IERpdHRvLgotCShmZmlfcHJlcF9jbG9zdXJlKTogRGl0dG8uCi0JKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogRGl0dG8uCi0JKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogTW9yZSBkaXR0by4KLQkoZmZpX2NhbGxfcmF3KTogRmluYWwgZGl0dG8uCisgICAgQSBmZXcgY2xlYW51cHMuICBNb3N0IG5vdGFibHksIHBvaW50IHRvIHRoZSBjb3JyZWN0IHN1YnNjcmliZSBjZ2ktYmluCisgICAgc2NyaXB0LgogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgZGVmaW5pdGlvbnMgZm9yIGNsb3N1cmUgYW5kIHJhdyBBUEkuCitjb21taXQgYWY4YjdmMDM3Y2NlZTNiNzkzOWVlMjI2YTFhMmJiYzJmMDU3YjM1YworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIE1vbiBOb3YgMzAgMDY6MjA6MDUgMTk5OCArMDAwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZGVkIGNhc2UgZm9yCi0JRkZJX1RZUEVfVUlOVDY0LgorICAgIAkqIGluZGV4Lmh0bWw6IFJlZm9ybWF0dGVkIGFuZCB1cGRhdGVkIHRvIHJlZmxlY3QgaG9zdGluZyBvbgorICAgIAlzb3VyY2V3YXJlLmN5Z251cy5jb20gKG5ldyBtYWlsaW5nIGxpc3RzLCBldGMpLgogCi0JKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX2NvbW1vbl9TT1VSQ0VTKTogQWRkZWQgcmF3X2FwaS5jCitjb21taXQgMzM0ZjBiMDYwOTQyYWZmOGQyNmJhZGFmN2RkZTc4MzA0NTBkYzVkYQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBOb3YgMjkgMTY6NTY6MTIgMTk5OCArMDAwMAogCi0JKiBzcmMvcmF3X2FwaS5jOiBOZXcgZmlsZS4KKyAgICBpbml0aWFsIHNuYXBzaG90IG9mIGRvY3VtZW50YXRpb24KIAotCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX3Jhdyk6IE5ldyB0eXBlLgotCShVSU5UX0FSRywgU0lOVF9BUkcpOiBOZXcgZGVmaW5lcy4KLQkoZmZpX2Nsb3N1cmUsIGZmaV9yYXdfY2xvc3VyZSk6IE5ldyB0eXBlcy4KLQkoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBOZXcgZGVjbGFyYXRpb25zLgorY29tbWl0IDNhYjVjYjRhMWRjYzdlY2Q3ZTc3M2M5NzU4MmIwMDk5OTc2YzQ3NTMKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gTm92IDI5IDE2OjU2OjEwIDE5OTggKzAwMDAKIAotCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIGVuZGlhbm5lc3MgYW5kIHNpemVvZiB2b2lkKi4KKyAgICBJbml0aWFsIHJldmlzaW9uCiAKLQkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogQ2FsbCBmaXh1cCByb3V0aW5lIHZpYSBhcmd1bWVudCwKLQlpbnN0ZWFkIG9mIGRpcmVjdGx5LgorY29tbWl0IGQyYTllYjVhOGI3Y2JjOGI3Njk4MDljYWQ1OWM4MmI5NzVjMTc4ZTIKK01lcmdlOiBkMzc4MmVjIGJjNzVjNTQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gTm92IDI5IDE2OjQ4OjE2IDE5OTggKzAwMDAKIAotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIFRoaXMgY29tbWl0IHdhcyBnZW5lcmF0ZWQgYnkgY3ZzMnN2biB0byBjb21wZW5zYXRlIGZvciBjaGFuZ2VzIGluIHI3LCB3aGljaAorICAgIGluY2x1ZGVkIGNvbW1pdHMgdG8gUkNTIGZpbGVzIHdpdGggbm9uLXRydW5rIGRlZmF1bHQgYnJhbmNoZXMuCiAKLVRodSBKdWwgIDggMTQ6Mjg6NDIgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+Citjb21taXQgYmM3NWM1NGJkMzExNjU4MDA1YjA2NWYxYmYyMDFiMjA0YzgxY2JjYQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBOb3YgMjkgMTY6NDg6MTYgMTk5OCArMDAwMAogCi0JKiBjb25maWd1cmUuaW46IEFkZCB4ODYgYW5kIHBvd2VycGMgQmVPUyBjb25maWd1cmF0aW9ucy4KLQlGcm9tIE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4uCisgICAgSW1wb3J0IG9mIHYxIGNvZGUuCiAKLTE5OTktMDUtMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorY29tbWl0IGQzNzgyZWM4MTYwYzY0NDQyMWRjZWExN2I2MDVmZWM2ZTMyOGYxNGUKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIEZyaSBOb3YgMjAgMjA6MTg6MDAgMTk5OCArMDAwMAogCi0JKiBjb25maWd1cmUuaW46IEFkZCB3YXJuaW5nIGFib3V0IHRoaXMgYmVpbmcgYmV0YSBjb2RlLgotCVJlbW92ZSBzcmMvTWFrZWZpbGUuYW0gZnJvbSB0aGUgcGljdHVyZS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBTZW5kIGNvbW1pdCBtZXNzYWdlcyB0byBtYWlsaW5nIGxpc3RzLgogCi0JKiBNYWtlZmlsZS5hbTogTW92ZSBsb2dpYyBmcm9tIHNyYy9NYWtlZmlsZS5hbS4gIEFkZCBjaGFuZ2VzCi0JdG8gc3VwcG9ydCBsaWJmZmkgYXMgYSB0YXJnZXQgbGlicmFyeS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IDhkOGQzODQzYzQ4NGMyYmI3MGQ4Mzc1YjJiNzk5Zjc1ZWIwM2Y3MDkKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFRodSBPY3QgMSAyMjowODozNiAxOTk4ICswMDAwCiAKLQkqIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgbHRjb25maWcsIGx0bWFpbi5zaDoKLQlVcGdyYWRlZCB0byBuZXcgYXV0b2NvbmYsIGF1dG9tYWtlLCBsaWJ0b29sLgorICAgIGluaXRpYWwgY2hlY2tpbgogCi0JKiBSRUFETUU6IFR3ZWFrcy4KK2NvbW1pdCA0OTYzNGYzYmYyMjFjYzE5MzlhYmFmYzc4OGY3ZTRlMzEyOTNmZTczCitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBUaHUgT2N0IDEgMjI6MDg6MzUgMTk5OCArMDAwMAogCi0JKiBMSUNFTlNFOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCisgICAgQWRkIHN0YW5kYXJkIHNldHVwLgogCi0JKiBzcmMvTWFrZWZpbGUuYW0sIHNyYy9NYWtlZmlsZS5pbjogUmVtb3ZlZC4KK2NvbW1pdCBjNjRhODRjNzY5M2Y4Y2Q0MDBmYjk0YmJhM2M5YmNmZDlhZDFmYzM2CitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBUaHUgT2N0IDEgMjI6MDg6MzQgMTk5OCArMDAwMAogCi0xOTk4LTExLTI5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKyAgICBBZGQgcmVhZGVycyBhbmQgc3RhbmRhcmQgbW9kdWxlcyBmaWxlLgogCi0JKiBpbmNsdWRlL0NoYW5nZUxvZzogUmVtb3ZlZC4KLQkqIHNyYy9DaGFuZ2VMb2c6IFJlbW92ZWQuCi0JKiBzcmMvbWlwcy9DaGFuZ2VMb2c6IFJlbW92ZWQuCi0JKiBzcmMvc3BhcmMvQ2hhbmdlTG9nOiBSZW1ib3ZlZC4KLQkqIHNyYy94ODYvQ2hhbmdlTG9nOiBSZW1vdmVkLgorY29tbWl0IDk4MTMyNzNiMDdmZDA4MmRhNTczYjNiNmJmYjhkMjM4MDliNTllZWEKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFRodSBPY3QgMSAyMjowODozMyAxOTk4ICswMDAwCiAKLQkqIENoYW5nZUxvZy52MTogQ3JlYXRlZC4KKyAgICBpbml0aWFsIGNoZWNraW4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLmxpYmZmaS0zLjEgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy5saWJmZmktMy4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmN2Y1MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy5saWJmZmktMy4xCkBAIC0wLDAgKzEsNjAwMCBAQAorMjAxNC0wMy0xNiAgSm9zaCBUcmlwbGV0dCAgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KKworCSogQ2hhbmdlTG9nOiBBcmNoaXZlIHRvIENoYW5nZUxvZy5saWJmZmktMy4xIGFuZCBkZWxldGUuICBGdXR1cmUKKwljaGFuZ2Vsb2dzIHdpbGwgY29tZSBmcm9tIGdpdCwgd2l0aCBhdXRvZ2VuZXJhdGVkIHNuYXBzaG90cyBzaGlwcGVkIGluCisJZGlzdHJpYnV0ZWQgdGFyYmFsbHMuCisKKzIwMTQtMDMtMTYgIEpvc2ggVHJpcGxldHQgIDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CisKKwlBZGQgc3VwcG9ydCBmb3Igc3RkY2FsbCwgdGhpc2NhbGwsIGFuZCBmYXN0Y2FsbCBvbiBub24tV2luZG93cworCXg4Ni0zMi4KKworCUxpbnV4IHN1cHBvcnRzIHRoZSBzdGRjYWxsIGNhbGxpbmcgY29udmVudGlvbiwgZWl0aGVyIHZpYQorCWZ1bmN0aW9ucyBleHBsaWNpdGx5IGRlY2xhcmVkIHdpdGggdGhlIHN0ZGNhbGwgYXR0cmlidXRlLCBvciB2aWEKKwljb2RlIGNvbXBpbGVkIHdpdGggLW1ydGQgd2hpY2ggZWZmZWN0aXZlbHkgbWFrZXMgc3RkY2FsbCB0aGUKKwlkZWZhdWx0LgorCisJVGhpcyBpbnRyb2R1Y2VzIEZGSV9TVERDQUxMLCBGRklfVEhJU0NBTEwsIGFuZCBGRklfRkFTVENBTEwgb24KKwlub24tV2luZG93cyB4ODYtMzIgcGxhdGZvcm1zLCBhcyBub24tZGVmYXVsdCBjYWxsaW5nIGNvbnZlbnRpb25zLgorCisJKiBNYWtlZmlsZS5hbTogQ29tcGlsZSBpbiBzcmMveDg2L3dpbjMyLlMgb24gbm9uLVdpbmRvd3MgeDg2LTMyLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQWRkIEZGSV9TVERDQUxMLCBGRklfVEhJU0NBTEwsIGFuZAorCUZGSV9GQVNUQ0FMTCBvbiBub24tV2luZG93cyB4ODYtMzIuICBJbmNyZWFzZSB0cmFtcG9saW5lIHNpemUgdG8KKwlhY2NvbW9kYXRlIHRoZXNlIGNhbGxpbmcgY29udmVudGlvbnMsIGFuZCB1bmlmeSBzb21lIGlmZGVmZmVyeS4KKwkqIHNyYy94ODYvZmZpLmM6IEFkZCBzdXBwb3J0IGZvciBGRklfU1REQ0FMTCwgRkZJX1RISVNDQUxMLCBhbmQKKwlGRklfRkFTVENBTEwgb24gbm9uLVdpbmRvd3MgeDg2LTMyIHBsYXRmb3JtczsgdXBkYXRlIGlmZGVmZmVyeS4KKwkqIHNyYy94ODYvd2luMzIuUzogU3VwcG9ydCBjb21waWxpbmcgb24gbm9uLVdpbmRvd3MgeDg2LTMyCisJcGxhdGZvcm1zLiAgT24gdGhvc2UgcGxhdGZvcm1zLCBhdm9pZCByZWRlZmluaW5nIHRoZSBTWVNWIHN5bWJvbHMKKwlhbHJlYWR5IHByb3ZpZGVkIGJ5IHNyYy94ODYvc3lzdi5TLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jOiBSdW4gb24gbm9uLVdpbmRvd3MuCisJI2RlZmluZSBfX3N0ZGNhbGwgaWYgbmVlZGVkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYzogUnVuIG9uIG5vbi1XaW5kb3dzLgorCSNkZWZpbmUgX19mYXN0Y2FsbCBpZiBuZWVkZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmM6IFJ1biBvbiBub24tV2luZG93cy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyX3dpbjMyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmM6IERpdHRvLgorCisyMDE0LTAzLTE2ICBKb3NoIFRyaXBsZXR0ICA8am9zaEBqb3NodHJpcGxldHQub3JnPgorCisJKiBwcmVwX2NpZi5jOiBSZW1vdmUgdW5uZWNlc3NhcnkgaWZkZWYgZm9yIFg4Nl9XSU4zMi4KKwlmZmlfcHJlcF9jaWZfY29yZSBoYWQgYSBzcGVjaWFsIGNhc2UgZm9yIFg4Nl9XSU4zMiwgY2hlY2tpbmcgZm9yCisJRkZJX1RISVNDQUxMIGluIGFkZGl0aW9uIHRvIHRoZSBGRklfRklSU1RfQUJJLXRvLUZGSV9MQVNUX0FCSQorCXJhbmdlIGJlZm9yZSByZXR1cm5pbmcgRkZJX0JBRF9BQkkuICBIb3dldmVyLCBvbiBYODZfV0lOMzIsCisJRkZJX1RISVNDQUxMIGFscmVhZHkgZmFsbHMgaW4gdGhhdCByYW5nZSwgbWFraW5nIHRoZSBzcGVjaWFsIGNhc2UKKwl1bm5lY2Vzc2FyeS4gIFJlbW92ZSBpdC4KKworMjAxNC0wMy0xNiAgSm9zaCBUcmlwbGV0dCAgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmM6IFJlbW92ZSBmcmFnaWxlIHN0YWNrCisJcG9pbnRlciBjaGVja3MuICBUaGVzZSBmaWxlcyBpbmNsdWRlZCBpbmxpbmUgYXNzZW1ibHkgdG8gc2F2ZSB0aGUKKwlzdGFjayBwb2ludGVyIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNhbGwsIGFuZCBjb21wYXJlIHRoZSB2YWx1ZXMuCisJSG93ZXZlciwgY29tcGlsZXJzIGNhbiBhbmQgZG8gbGVhdmUgdGhlIHN0YWNrIGluIGRpZmZlcmVudCBzdGF0ZXMKKwlmb3IgdGhlc2UgdHdvIHBpZWNlcyBvZiBpbmxpbmUgYXNzZW1ibHksIHN1Y2ggYXMgYnkgc2F2aW5nIGEKKwl0ZW1wb3JhcnkgdmFsdWUgb24gdGhlIHN0YWNrIGFjcm9zcyB0aGUgY2FsbDsgb2JzZXJ2ZWQgd2l0aCBnY2MKKwktT3MsIGFuZCB2ZXJpZmllZCBhcyBzcHVyaW91cyB0aHJvdWdoIGNhcmVmdWwgaW5zcGVjdGlvbiBvZgorCWRpc2Fzc2VtYmx5LgorCisyMDE0LTAzLTE2ICBKb3NoIFRyaXBsZXR0ICA8am9zaEBqb3NodHJpcGxldHQub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jOiBBdm9pZCBzcHVyaW91cyBmYWlsdXJlIGR1ZSB0bworCWV4Y2VzcyBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBEaXR0by4KKworMjAxNC0wMy0xNiAgSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorCisJKiBsaWJ0b29sLWxkZmxhZ3M6IFJlLWFkZC4KKworMjAxNC0wMy0xNiAgSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorCisJKiBNYWtlZmlsZS5pbiwgYWNsb2NhbC5tNCwgY29tcGlsZSwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLAorCWNvbmZpZ3VyZSwgZGVwY29tcCwgaW5jbHVkZS9NYWtlZmlsZS5pbiwgaW5zdGFsbC1zaCwKKwlsaWJ0b29sLWxkZmxhZ3MsIGx0bWFpbi5zaCwgbTQvbGlidG9vbC5tNCwgbTQvbHRvcHRpb25zLm00LAorCW00L2x0c3VnYXIubTQsIG00L2x0dmVyc2lvbi5tNCwgbTQvbHR+b2Jzb2xldGUubTQsCisJbWFuL01ha2VmaWxlLmluLCBtZGF0ZS1zaCwgbWlzc2luZywgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBEZWxldGUKKwlhdXRvZ2VuZXJhdGVkIGZpbGVzIGZyb20gdmVyc2lvbiBjb250cm9sLgorCSogLmdpdGlnbm9yZTogQWRkIGF1dG9nZW5lcmF0ZWQgZmlsZXMuCisJKiBhdXRvZ2VuLnNoOiBOZXcgc2NyaXB0IHRvIGdlbmVyYXRlIHRoZSBhdXRvZ2VuZXJhdGVkIGZpbGVzLgorCSogUkVBRE1FOiBEb2N1bWVudCByZXF1aXJlbWVudCB0byBydW4gYXV0b2dlbi5zaCB3aGVuIGJ1aWxkaW5nCisJZGlyZWN0bHkgZnJvbSB2ZXJzaW9uIGNvbnRyb2wuCisJKiAudHJhdmlzLnltbDogUnVuIGF1dG9nZW4uc2gKKworMjAxNC0wMy0xNCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTQtMDMtMTAgIE1pa2UgSG9tbWV5IDxtaCttb3ppbGxhQGdsYW5kaXVtLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBbGxvdyBidWlsZGluZyBmb3IgbWlwc2VsIHdpdGggQW5kcm9pZCBOREsgcjguCisJKiBNYWtlZmlsZS5hbSAoQU1fTUFLRUZMQUdTKTogUmVwbGFjZSBkb3VibGUgcXVvdGVzIHdpdGggc2luZ2xlCisJcXVvdGVzLgorCisyMDE0LTAzLTEwICBMYW5kcnkgQnJldWlsIDxsYW5kcnlAb3BlbmJzZC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogRW5zdXJlIHRoZSBsaW5rZXIgc3VwcG9ydHMgQHVud2luZCBzZWN0aW9ucyBpbiBsaWJmZmkuCisKKzIwMTQtMDMtMDEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBSZXBsYWNlIG9sZCBzY3JpcHRzIHdpdGgKKwlnZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTQtMDItMjggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IFJlaW50cm9kdWNlIG1pc3NpbmcgLURGRklfREVCVUcgZm9yCisJLS1lbmFibGUtZGVidWcgYnVpbGRzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTQtMDItMjggIE1ha290byBLYXRvICA8bV9rYXRvQGdhMi5zby1uZXQubmUuanA+CisKKwkqIHNyYy9jbG9zdXJlcy5jOiBGaXggYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIGNsYW5nIGZvciBBbmRyb2lkLgorCisyMDE0LTAyLTI4ICBNYXJjaW4gV29qZHlyICA8d29qZHlyQGdtYWlsLmNvbT4KKworCSogbGliZmZpLnBjLmluICh0b29sZXhlY2xpYmRpcik6IHVzZSAtTCR7dG9vbGV4ZWNsaWJkaXJ9IGluc3RlYWQKKwlvZiAtTCR7bGliZGlyfS4KKworMjAxNC0wMi0yOCAgUGF1bG8gUGl6YXJybyAgPHBhdWxvLnBpemFycm9AZ21haWwuY29tPgorCisJKiBzcmMvYmZpbi9zeXN2LlM6IENhbGxpbmcgZnVuY3Rpb25zIGluIHNoYXJlZCBsaWJyYXJpZXMgcmVxdWlyZXMKKwljb25zaWRlcmluZyB0aGUgR09ULgorCisyMDE0LTAyLTI4ICBKb3NoIFRyaXBsZXR0ICA8am9zaEBqb3NodHJpcGxldHQub3JnPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGNsYXNzaWZ5X2FyZ3VtZW50KTogSGFuZGxlIGNhc2Ugd2hlcmUKKwlGRklfVFlQRV9MT05HRE9VQkxFID09IEZGSV9UWVBFX0RPVUJMRS4KKworMjAxNC0wMi0yOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBsdG1haW4uc2g6IEdlbmVyYXRlIHdpdGggbGlidG9vbC0yLjQuMi40MTguCisJKiBtNC9saWJ0b29sLm00LCBtNC9sdG9wdGlvbnMubTQsIG00L2x0dmVyc2lvbi5tNDogRGl0dG8uCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTQtMDItMjggIERvbWluaWsgVm9ndCAgPHZvZ3RAbGludXgudm5ldC5pYm0uY29tPgorCisJKiBjb25maWd1cmUuYWMgKEFDX0FSR19FTkFCTEUgc3RydWN0KTogRml4IHR5cG8gaW4gaGVscAorCW1lc3NhZ2UuCisJKEFDX0FSR19FTkFCTEUgcmF3X2FwaSk6IERpdHRvLgorCSogY29uZmlndXJlLCBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKworMjAxNC0wMi0yOCAgV2lsbCBOZXd0b24gIDx3aWxsLm5ld3RvbkBsaW5hcm8ub3JnPgorCisJKiBzcmMvYXJtL3N5c3YuUzogSW5pdGlhbGl6ZSBJUCByZWdpc3RlciB3aXRoIEZQLgorCisyMDE0LTAyLTI4ICBZdWZlbmcgWmhhbmcgIDx5dWZlbmcuemhhbmdAYXJtLmNvbT4KKworCSogc3JjL2FhcmNoNjQvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogVXNlIHgyOSBhcyB0aGUKKwltYWluIENGQSByZWc7IHVwZGF0ZSBjZmlfcmVsX29mZnNldC4KKworMjAxNC0wMi0xNSAgTWFyY3VzIENvbXN0ZWR0ICA8bWFyY3VzQG1jLnBwLnNlPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jLCBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogUmVtb3ZlCisJYXNzdW1wdGlvbiBvbiBjb250ZW50cyBvZiByMTEgaW4gY2xvc3VyZS4KKworMjAxNC0wMi0wOSAgSGVpaGVyICA8ckBoZXYuY2M+CisKKwkqIHNyYy9taXBzL24zMi5TOiBGaXggY2FsbCBmbG9hdGluZyBwb2ludCB2YSBmdW5jdGlvbi4KKworMjAxNC0wMS0yMSAgWmFjaGFyeSBXYWxkb3dza2kgIDx6YWNoQHdhbGRvd3NraS5tZT4KKworCSogc3JjL2FhcmNoNjQvZmZpLmM6IEZpeCBtaXNzaW5nIHNlbWljb2xvbnMgb24gYXNzZXJ0aW9ucyB1bmRlcgorCWRlYnVnIG1vZGUuCisKKzIwMTMtMTItMzAgIFphY2hhcnkgV2FsZG93c2tpICA8emFjaEB3YWxkb3dza2kubWU+CisKKwkqIC5naXRpZ25vcmU6IEV4Y2x1ZGUgZGFyd2luXyogZ2VuZXJhdGVkIHNvdXJjZSBhbmQgYnVpbGRfKiB0cmVlcy4KKwkqIHNyYy9hYXJjaDY0L2ZmaS5jLCBzcmMvYXJtL2ZmaS5jLCBzcmMveDg2L2ZmaS5jOiBJbmhpYml0IENsYW5nCisJcHJldmlvdXMgcHJvdG90eXBlIHdhcm5pbmdzLgorCSogc3JjL2FybS9mZmkuYzogUHJldmVudCBOVUxMIGRlcmVmZXJlbmNlLCBmaXggc2hvcnQgdHlwZSB3YXJuaW5nCisJKiBzcmMvZGxtYWxsb2MuYzogRml4IHdhcm5pbmdzIGZyb20gc2V0X3NlZ21lbnRfZmxhZ3MgcmV0dXJuIHR5cGUsCisJYW5kIHRoZSBuYXRpdmUgdXNlIG9mIHNpemVfdCBmb3IgbWFsbG9jIG9uIHBsYXRmb3JtcworCSogc3JjL2FybS9zeXN2LlM6IFVzZSB1bmlmaWVkIHN5bnRheC4gQ2xhbmcgY2xlYW4tdXBzIGZvcgorCUFSTV9GVU5DX1NUQVJULgorCSogZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weTogUmVtb3ZlLgorCSogYnVpbGQtaW9zLnNoOiBSZW1vdmUuCisJKiBsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogUmVidWlsZCB0YXJnZXRzLiBJbmNsdWRlCisJeDg2XzY0K2FhcmNoNjQgcGllY2VzIGluIGxpYnJhcnkuICBFeHBvcnQgaGVhZGVycyBwcm9wZXJseS4KKwkqIHNyYy94ODYvZmZpNjQuYzogTW9yZSBDbGFuZyB3YXJuaW5nIGNsZWFuLXVwcy4KKwkqIHNyYy9jbG9zdXJlcy5jIChvcGVuX3RlbXBfZXhlY19maWxlX2Rpcik6IFVzZSBzaXplX3QuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmX2NvcmUpOiBDYXN0IEFMSUdOIHJlc3VsdC4KKwkqIHNyYy9hYXJjaDY0L3N5c3YuUzogVXNlIENOQU1FIGZvciBnbG9iYWwgc3ltYm9scy4gIE9ubHkgdXNlCisJLnNpemUgZm9yIEVMRiB0YXJnZXRzLgorCSogc3JjL2FhcmNoNjQvZmZpLmM6IENsZWFuIHVwIGZvciBkb3VibGUgPT0gbG9uZyBkb3VibGUuICBDbGVhbiB1cAorCWZyb20gQ2xhbmcgd2FybmluZ3MuICBVc2UgQ2xhbmcgY2FjaGUgaW52YWxpZGF0aW9uIGJ1aWx0aW4uICBVc2UKKwlzaXplX3QgaW4gcGxhY2Ugb2YgdW5zaWduZWQgaW4gbWFueSBwbGFjZXMuICBBY2NvbW1vZGF0ZSBmb3IKKwlkaWZmZXJlbmNlcyBpbiBBcHBsZSBBQXJjaDY0IEFCSS4KKworMjAxMy0xMi0wMiAgRGFuaWVsIFJvZHLDrWd1ZXogVHJvaXRpw7FvICA8ZHJvZHJpZ3VlenRyb2l0aW5vQHlhaG9vLmVzPgorCisJKiBnZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5OiBDbGVhbiB1cCwgbW9kZXJuaXplLAorCW1lcmdlZCB2ZXJzaW9uIG9mIHByZXZpb3VzIHNjcmlwdHMuCisKKzIwMTMtMTEtMjEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbiwgaW5jbHVkZS9mZmkuaC5pbiwKKwltYW4vTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwgZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisKKzIwMTMtMTEtMjEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBuZXcgc3JjL3Bvd2VycGMgZmlsZXMuCisJKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyA8UE9XRVJQQywgUE9XRVJQQ19GUkVFQlNEPik6IExpa2V3aXNlLgorCSogY29uZmlndXJlLmFjIChIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQpOiBEZWZpbmUgZm9yIHBvd2VycGMuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfcHJlcF90eXBlcyk6IERlY2xhcmUuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmX2NvcmUpOiBDYWxsIGZmaV9wcmVwX3R5cGVzLgorCSogc3JjL3R5cGVzLmMgKEZGSV9OT05DT05TVF9UWVBFREVGKTogRGVmaW5lIGFuZCB1c2UgZm9yCisJSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5ULgorCSogc3JjL3Bvd2VycGMvZmZpX3Bvd2VycGMuaDogTmV3IGZpbGUuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogU3BsaXQgaW50by4uCisJKiBzcmMvcG93ZXJwYy9mZmlfc3lzdi5jOiAuLm5ldyBmaWxlLCBhbmQuLgorCSogc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYzogLi5uZXcgZmlsZSwgcmV3cml0aW5nIHBhcnRzLgorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGVudW0gZmZpX2FiaSk6IFJld3JpdGUgcG93ZXJwYyBBQkkKKwlzZWxlY3Rpb24gYXMgYml0cyBjb250cm9sbGluZyBmZWF0dXJlcy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogRm9yIGNvbnNpc3RlbmN5LCB1c2UgUE9XRVJQQzY0IHJhdGhlcgorCXRoYW4gX19wb3dlcnBjNjRfXy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLiAgTW92ZSAubm90ZS5GTlUtc3RhY2sKKwlpbnNpZGUgZ3VhcmQuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAxMy0xMS0yMCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcF9jb3JlKTogVXNlCisJTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgYW5kIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0IG5vdCB0aGVpcgorCTMyLWJpdCB2ZXJzaW9ucyBmb3IgNjQtYml0IGNvZGUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogRG9uJ3QgdXNlIHRoZSByZXR1cm4gdmFsdWUgYXJlYQorCWFzIGEgcGFyYW1ldGVyIHNhdmUgYXJlYSBvbiBFTEZ2Mi4KKworMjAxMy0xMS0xOCAgSWFpbiBTYW5kb2UgIDxpYWluQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChFSCk6IENvcnJlY3QgdXNlIG9mIHBjcmVsIEZERSBlbmNvZGluZy4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMgKEVIKTogTGlrZXdpc2UuIE1vZGVybmlzZSBwaWNiYXNlCisJbGFiZWxzLgorCisyMDEzLTExLTE4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9jYWxsKTogSG9pc3QgZGVjbGFyYXRpb24gb2YgdGVtcCB0byB0b3Agb2YKKwlmdW5jdGlvbi4KKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9jbG9zdXJlX2lubmVyKTogTW9kZXJpemUgZnVuY3Rpb24gZGVjbGFyYXRpb24KKwl0byBhcHBlYXNlIGNvbXBpbGVyLgorCVRoYW5rcyBmb3IgR3JlZ29yeSBQLiBTbWl0aCA8Z3JlZ0BrcnlwdG8ub3JnPi4KKworMjAxMy0xMS0xOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBSRUFETUUgKHRlc3RlZCk6IE1lbnRpb24gUG93ZXJQQyBFTEZ2Mi4KKworMjAxMy0xMS0xNiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IE1vdmUgZXJyYW50ICNlbmRpZiB0byB3aGVyZSBpdCBiZWxvbmdzLgorCURvbid0IGJsIC5MdWludDEyOC4KKworMjAxMy0xMS0xNiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcF9jb3JlKTogVXNlICNpZiBfQ0FMTF9FTEYKKwl0ZXN0IHRvIHNlbGVjdCBwYXJhbWV0ZXIgc2F2ZSBzaXppbmcgZm9yIEVMRnYyIHZzLiBFTEZ2MS4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChGRklfVjJfVFlQRV9GTE9BVF9IT01PRywKKwlGRklfVjJfVFlQRV9ET1VCTEVfSE9NT0csIEZGSV9WMl9UWVBFX1NNQUxMX1NUUlVDVCk6IERlZmluZS4KKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IERlZmluZSB2YXJpYW50IGZvciBFTEZ2Mi4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChGTEFHX0FSR19ORUVEU19QU0FWRSk6IERlZmluZS4KKwkoZGlzY292ZXJfaG9tb2dlbmVvdXNfYWdncmVnYXRlKTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9hcmdzNjQpOiBBZGp1c3Qgc3RhcnQgb2YgcGFyYW0gc2F2ZSBhcmVhIGZvciBFTEZ2Mi4KKwlIYW5kbGUgaG9tb2dlbm91cyBmbG9hdGluZyBwb2ludCBzdHJ1Y3QgcGFybXMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwX2NvcmUpOiBBZGp1c3Qgc3BhY2UgY2FsY3VsYXRpb24gZm9yIEVMRnYyLgorCUhhbmRsZSBFTEZ2MiByZXR1cm4gdmFsdWVzLiAgU2V0IEZMQUdfQVJHX05FRURTX1BTQVZFLiAgSGFuZGxlCisJaG9tb2dlbm91cyBmbG9hdGluZyBwb2ludCBzdHJ1Y3RzLgorCShmZmlfY2FsbCk6IEluY3JlYXNlIHNpemUgb2Ygc21zdF9idWZmZXIgZm9yIEVMRnYyLiAgSGFuZGxlIEVMRnYyLgorCShmbHVzaF9pY2FjaGUpOiBDb21waWxlIGZvciBFTEZ2Mi4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBTZXQgdXAgRUxGdjIgdHJhbXBvbGluZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBEb24ndCByZXR1cm4gYWxsIHN0cnVjdHMgZGlyZWN0bHkKKwl0byBjYWxsZXIuICBIYW5kbGUgaG9tb2dlbm91cyBmbG9hdGluZyBwb2ludCBzdHJ1Y3RzLiAgSGFuZGxlCisJRUxGdjIgc3RydWN0IHJldHVybiB2YWx1ZXMuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBTZXQgdXAgcjIgZm9yCisJRUxGdjIuICBBZGp1c3QgdG9jIHNhdmUgbG9jYXRpb24uICBDYWxsIGZ1bmN0aW9uIHBvaW50ZXIgdXNpbmcKKwlyMTIuICBIYW5kbGUgRkxBR19SRVRVUk5TX1NNU1QuICBEb24ndCBwcmVkaWN0IGJyYW5jaGVzLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBTZXQgdXAgcjIKKwlmb3IgRUxGdjIuICBEZWZpbmUgRUxGdjIgdmVyc2lvbnMgb2YgU1RBQ0tGUkFNRSwgUEFSTVNBVkUsIGFuZAorCVJFVFZBTC4gIEhhbmRsZSBwb3NzaWJseSBtaXNzaW5nIHBhcmFtZXRlciBzYXZlIGFyZWEuICBIYW5kbGUKKwlFTEZ2MiByZXR1cm4gdmFsdWVzLgorCSgubm90ZS5HTlUtc3RhY2spOiBNb3ZlIGluc2lkZSBvdXRlciAjaWZkZWYuCisKKzIwMTMtMTEtMTYgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBSZXZlcnQgMjAxMy0wMi0wOAorCWNoYW5nZS4gIERvIG5vdCBjb25zdW1lIGFuIGludCBhcmcgd2hlbiByZXR1cm5pbmcgYSBzbWFsbCBzdHJ1Y3QKKwlmb3IgRkZJX1NZU1YgQUJJLgorCShmZmlfY2FsbCk6IE9ubHkgdXNlIGJvdW5jZSBidWZmZXIgd2hlbiBGTEFHX1JFVFVSTlNfU01TVC4KKwlQcm9wZXJseSBjb3B5IGJvdW5jZSBidWZmZXIgdG8gZGVzdGluYXRpb24uCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IFJldmVydCAyMDEzLTAyLTA4IGNoYW5nZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IFJlbW92ZSBzdHJheSAnKycuCisKKzIwMTMtMTEtMTYgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQWxpZ24gc3RydWN0IHBhcmFtZXRlcnMKKwlhY2NvcmRpbmcgdG8gX19TVFJVQ1RfUEFSTV9BTElHTl9fLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcF9jb3JlKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogTGlrZXdpc2UuCisKKzIwMTMtMTEtMTYgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBUd2VhayByZXN0b3JlIG9mIHIyOC4KKwkoLm5vdGUuR05VLXN0YWNrKTogTW92ZSBpbnNpZGUgb3V0ZXIgI2lmZGVmLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKFNUQUNLRlJBTUUsIFBBUk1TQVZFLAorCVJFVFZBTCk6IERlZmluZSBhbmQgdXNlIHRocm91Z2hvdXQuCisJKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBTYXZlIGZwcnMgYmVmb3JlIGJ1eWluZyBzdGFjay4KKwkoLm5vdGUuR05VLXN0YWNrKTogTW92ZSBpbnNpZGUgb3V0ZXIgI2lmZGVmLgorCisyMDEzLTExLTE2ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKEZGSV9UQVJHRVRfU1BFQ0lGSUNfVkFSSUFESUMpOiBEZWZpbmUuCisJKEZGSV9FWFRSQV9DSUZfRklFTERTKTogRGVmaW5lLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IFNhdmUgZnBycyBhcyBwZXIgdGhlCisJQUJJLCBub3QgdG8gYm90aCBmcHIgYW5kIHBhcmFtIHNhdmUgYXJlYS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXBfY29yZSk6IFJlbmFtZWQgZnJvbSBmZmlfcHJlcF9jaWZfbWFjaGRlcC4KKwlLZWVwIGluaXRpYWwgZmxhZ3MuICBGb3JtYXR0aW5nLiAgUmVtb3ZlIGRlYWQgRkZJX0xJTlVYX1NPRlRfRkxPQVQKKwljb2RlLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCwgZmZpX3ByZXBfY2lmX21hY2hkZXBfdmFyKTogTmV3IGZ1bmN0aW9ucy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBQYXNzIGZsb2F0aW5nIHBvaW50IGFzIHBlciBBQkksCisJbm90IHRvIGJvdGggZnByIGFuZCBwYXJhbWV0ZXIgc2F2ZSBhcmVhcy4KKworCSogbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMgKG1haW4pOiBDb3JyZWN0CisJZnVuY3Rpb24gY2FzdCBhbmQgZG9uJ3QgY2FsbCBmZmlfcHJlcF9jaWYuCisJKiBsaWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgKG1haW4pOiBMaWtld2lzZS4KKworMjAxMy0xMS0xNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIGRvYy9saWJmZmkudGV4aSAoQ2xvc3VyZSBFeGFtcGxlKTogRml4IHRoZSBzYW1wbGUgY29kZS4KKwkqIGRvYy9saWJmZmkuaW5mbywgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKworMjAxMy0xMS0xNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmMgKG1haW4pOiBGaXggYnJva2VuIHRlc3QuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYyAoY2xzX3JldF9UX2ZuKTogTGlrZXdpc2UKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jICh0ZXN0X2ZuKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jIChtYWluKTogTGlrZXdpc2UuCisKKzIwMTMtMTEtMTQgIERhdmlkIFNjaG5laWRlciAgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KKworCSogc3JjL2FybS9mZmkuYzogRml4IHJlZ2lzdGVyIGFsbG9jYXRpb24gZm9yIG1peGVkIGZsb2F0IGFuZAorCWRvdWJsZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX21hbnlfbWl4ZWRfZmxvYXRfZG91YmxlLmM6IFRlc3RjYXNlCisJZm9yIG1hbnkgbWl4ZWQgZmxvYXQgYW5kIGRvdWJsZSBhcmd1bWVudHMuCisKKzIwMTMtMTEtMTMgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBkb2MvbGliZmZpLnRleGkgKFNpbXBsZSBFeGFtcGxlKTogQ29ycmVjdCBleGFtcGxlIGNvZGUuCisJKiBkb2MvbGliZmZpLmluZm8sIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisKKzIwMTMtMTEtMTMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IFJlc3BlY3QgSEFWRV9BTExPQ0FfSCBmb3IgR05VIGNvbXBpbGVyCisJYmFzZWQgYnVpbGQuIChUaGFua3MgdG8gdG1yMTExMTE2IG9uIGdpdGh1YikKKworMjAxMy0xMS0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBtNC9saWJ0b29sLm00OiBSZWZyZXNoLgorCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIFJFQURNRTogQWRkIG1vcmUgbm90ZXMgYWJvdXQgbmV4dCByZWxlYXNlLgorCisyMDEzLTExLTA5ICBTaGlnZWhhcnUgVEFLRU5PICA8c2hpZ2VAaWVlLm5paXQuYWMuanA+CisKKwkqIG00L2F4X2djY19hcmNoZmxhZy5tNCAoYXhfZ2NjX2FyY2gpOiBEb24ndCByZWNvZ25pemUKKwlVbHRyYVNQQVJDLUlJaSBhcyB1bHRyYXNwYXJjMy4KKworMjAxMy0xMS0wNiAgTWFyayBLZXR0ZW5pcyAgPGtldHRlbmlzQGdudS5vcmc+CisKKwkqIHNyYy94ODYvZnJlZWJzZC5TIChmZmlfY2FsbF9TWVNWKTogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgdG8KKyAgICAgICAgMTYtYnl0ZXMuCisKKzIwMTMtMTEtMDYgIEtvbnN0YW50aW4gQmVsb3Vzb3YgPGtpYkBmcmVlYnNkLm9yZz4KKworCSogc3JjL3g4Ni9mcmVlYnNkLlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTWFyayB0aGUgYXNzZW1ibGVyCisJc291cmNlIGFzIG5vdCByZXF1aXJpbmcgZXhlY3V0YWJsZSBzdGFjay4KKworMjAxMy0xMS0wMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBkb2MvbGliZmZpLnRleGkgKFRoZSBCYXNpY3MpOiBDbGFyaWZ5IHJldHVybiB2YWx1ZSBidWZmZXIgc2l6ZQorCXJlcXVpcmVtZW50cy4gIEFsc28sIE5VTEwgcmVzdWx0IGJ1ZmZlciBwb2ludGVycyBhcmUgbm8gbG9uZ2VyCisJc3VwcG9ydGVkLgorCSogZG9jL2xpYmZmaS5pbmZvOiBSZWJ1aWx0LgorCisyMDEzLTExLTAyICBNaXNjaGEgSm9ua2VyICA8bWpvbmtlckBzeW5vcHN5cy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBGaXggYnVpbGQgZXJyb3IuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMy0xMS0wMiAgRGF2aWQgU2NobmVpZGVyICA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorCisJKiBzcmMvYXJtL2ZmaS5jOiBtb3JlIHJvYnVzdCBhcmd1bWVudCBoYW5kbGluZyBmb3IgY2xvc3VyZXMgb24gYXJtIGhhcmRmbG9hdAorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfbWl4ZWQuYzogTmV3IGZpbGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX21hbnlfbWl4ZWRfYXJncy5jOiBNb3JlIHRlc3RzLgorCisyMDEzLTExLTAyICBWaXRhbHkgQnVkb3Zza2kKKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEb24ndCBhbGlnbiBzdGFjayBmb3Igd2luMzIuCisKKzIwMTMtMTAtMjMgIE1hcmsgSCBXZWF2ZXIgIDxtaHdAbmV0cmlzLm9yZz4KKworCSogc3JjL21pcHMvZmZpLmM6IEZpeCBoYW5kbGluZyBvZiB1aW50MzJfdCBhcmd1bWVudHMgb24gdGhlCisJTUlQUyBOMzIgQUJJLgorCisyMDEzLTEwLTEzICBTYW5kcmEgTG9vc2Vtb3JlICA8c2FuZHJhQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIFJFQURNRTogQWRkIE5pb3MgSUkgdG8gdGFibGUgb2Ygc3VwcG9ydGVkIHBsYXRmb3Jtcy4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG5pb3MyIGZpbGVzLgorCShub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKwkqIGNvbmZpZ3VyZS5hYyAobmlvczIqLWxpbnV4Kik6IE5ldyBob3N0LgorCShOSU9TMik6IEFkZCBBTV9DT05ESVRJT05BTC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisJKiBzcmMvbmlvczIvZmZpLmM6IE5ldy4KKwkqIHNyYy9uaW9zMi9mZml0YXJnZXQuaDogTmV3LgorCSogc3JjL25pb3MyL3N5c3YuUzogTmV3LgorCSogc3JjL3ByZXBfY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlKTogSGFuZGxlIGV4dHJhIHN0cnVjdHVyZQorCWFsaWdubWVudCB2aWEgRkZJX0FHR1JFR0FURV9BTElHTk1FTlQuCisJKGZmaV9wcmVwX2NpZl9jb3JlKTogQ29uZGl0aW9uYWxpemUgc3RydWN0dXJlIHJldHVybiBmb3IgTklPUzIuCisKKzIwMTMtMTAtMTAgIFNhbmRyYSBMb29zZW1vcmUgIDxzYW5kcmFAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tYW55X21peGVkX2FyZ3MuYyAoY2xzX3JldF9kb3VibGVfZm4pOgorCUZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgorCisyMDEzLTEwLTExICBNYXJjdXMgU2hhd2Nyb2Z0ICA8bWFyY3VzLnNoYXdjcm9mdEBhcm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jIChtYW55KTogUmVwbGFjZSAqIHdpdGggKy4KKworMjAxMy0xMC0wOCAgT25kxZllaiBCw61sa2EgIDxuZWxlYWlAc2V6bmFtLmN6PgorCisJKiBzcmMvYWFyY2g2NC9mZmkuYywgc3JjL2FhcmNoNjQvc3lzdi5TLCBzcmMvYXJtL2ZmaS5jLAorCXNyYy9hcm0vZ2VudHJhbXAuc2gsIHNyYy9iZmluL3N5c3YuUywgc3JjL2Nsb3N1cmVzLmMsCisJc3JjL2RsbWFsbG9jLmMsIHNyYy9pYTY0L2ZmaS5jLCBzcmMvbWljcm9ibGF6ZS9mZmkuYywKKwlzcmMvbWljcm9ibGF6ZS9zeXN2LlMsIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMsCisJc3JjL3Bvd2VycGMvZmZpLmMsIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYywgc3JjL3NoL2ZmaS5jLAorCXNyYy90aWxlL3RpbGUuUywgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jOiBGaXgKKwlzcGVsbGluZyBlcnJvcnMuCisKKzIwMTMtMTAtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogYWNsb2NhbC5tNCwgY29tcGlsZSwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBkZXBjb21wLAorCWluc3RhbGwtc2gsIG1kYXRlLXNoLCBtaXNzaW5nLCB0ZXhpbmZvLnRleDogVXBkYXRlIGZyb20gdXBzdHJlYW0uCisJKiBjb25maWd1cmUuYWM6IFVwZGF0ZSB2ZXJzaW9uIHRvIDMuMC4xNC1yYzAuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbiwKKwltYW4vTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIFJFQURNRTogTWVudGlvbiBNODhLIGFuZCBWQVguCisKKzIwMTMtMDctMTUgIE1pb2QgVmFsbGF0ICA8bWlvZEBvcGVuYnNkLm9yZz4KKworCSogTWFrZWZpbGUuYW0sCisJY29uZmlndXJlLmFjLAorCXNyYy9tODhrL2ZmaS5jLAorCXNyYy9tODhrL2ZmaXRhcmdldC5oLAorCXNyYy9tODhrL29ic2QuUywKKwlzcmMvdmF4L2VsZmJzZC5TLAorCXNyYy92YXgvZmZpLmMsCisJc3JjL3ZheC9mZml0YXJnZXQuaDogQWRkIG04OGsgYW5kIHZheCBzdXBwb3J0LgorCisyMDEzLTA2LTI0IEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogTW92ZSB2YXIgZGVjbGFyYXRpb24KKwliZWZvcmUgc3RhdGVtZW50cy4KKwkoZmZpX3ByZXBfYXJnczY0KTogU3VwcG9ydCBsaXR0bGUtZW5kaWFuLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTViwgZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogTGlrZXdpc2UuCisKKzIwMTMtMDYtMTIgIE1pc2NoYSBKb25rZXIgIDxtam9ua2VyQHN5bm9wc3lzLmNvbT4KKworCSAqIGNvbmZpZ3VyZS5hYzogQWRkIHN1cHBvcnQgZm9yIEFSQy4KKwkgKiBNYWtlZmlsZS5hbTogTGlrZXdpc2UuCisJICogUkVBRE1FOiBBZGQgQVJDIGRldGFpbHMuCisJICogc3JjL2FyYy9hcmNvbXBhY3QuUzogTmV3LgorCSAqIHNyYy9hcmMvZmZpLmM6IExpa2V3aXNlLgorCSAqIHNyYy9hcmMvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgorCisyMDEzLTAzLTI4ICBEYXZpZCBTY2huZWlkZXIgIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CisKKwkgKiBzcmMvYXJtL2ZmaS5jOiBGaXggc3VwcG9ydCBmb3IgQVJNIGhhcmQtZmxvYXQgY2FsbGluZyBjb252ZW50aW9uLgorCSAqIHNyYy9hcm0vc3lzdi5TOiBjYWxsIGRpZmZlcmVudCBtZXRob2RzIGZvciBTWVNWIGFuZCBWRlAgQUJJcy4KKwkgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX21hbnlfbWl4ZWRfYXJncy5jOiB0ZXN0Y2FzZSBmb3IgYSBjbG9zdXJlIHdpdGgKKwkgbWl4ZWQgYXJndW1lbnRzLCBtYW55IGRvdWJsZXMuCisJICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfZG91YmxlLmM6IHRlc3RjYXNlIGZvciBjYWxsaW5nIGEgZnVuY3Rpb24gdXNpbmcKKwkgbW9yZSB0aGFuIDggZG91Ymxlcy4KKwkgKiB0ZXN0Y2FzZS9saWJmZmkuY2FsbC9tYW55LmM6IHVzZSBhYnNvbHV0ZSB2YWx1ZSB0byBjaGVjayByZXN1bHQgYWdhaW5zdCBhbgorCSBlcHNpbG9uCisKKzIwMTMtMDMtMTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGUgZm9yIDMuMC4xMy4KKwkqIGNvbmZpZ3VyZS5hYzogRGl0dG8uCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBkb2MvKjogVXBkYXRlIHZlcnNpb24uCisKKzIwMTMtMDMtMTcgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorCisJKiBzcmMvY2xvc3VyZXMuYyAoaXNfZW11dHJhbXBfZW5hYmxlZAorCVshRkZJX01NQVBfRVhFQ19FTVVUUkFNUF9QQVhdKTogTW92ZSBkZWZhdWx0IGRlZmluaXRpb24gb3V0c2lkZQorCWVuY2xvc2luZyAjaWYgc2NvcGUuCisKKzIwMTMtMDMtMTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBPbmx5IG1vZGlmeSB0b29sZXhlY2RpciBpbiBjZXJ0YWluIGNhc2VzLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEzLTAzLTE2ICBHaWxsZXMgVGFsaXMgIDxnaWxsZXMudGFsaXNAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogRG9uJ3QgdXNlCisJZnBhcmdfY291bnQsZXRjIG9uIF9fTk9fRlBSU19fIHRhcmdldHMuCisKKzIwMTMtMDMtMTYgIEFsYW4gSG91cmloYW5lICA8YWxhbmhAZmFpcmxpdGUuY28udWs+CisKKwkqIHNyYy9tNjhrL3N5c3YuUyAoZXBpbG9ndWUpOiBEb24ndCB1c2UgZXh0YiBpbnN0cnVjdGlvbiBvbgorCW02ODAwMDAgbWFjaGluZXMuCisKKzIwMTMtMDMtMTYgIEFsZXggR2F5bm9yIDxhbGV4LmdheW5vckBnbWFpbC5jb20+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWx3YXlzIGFsaWduIHN0YWNrLgorCisyMDEzLTAzLTEzICBNYXJrb3MgQ2hhbmRyYXMgPG1hcmtvcy5jaGFuZHJhc0BpbWd0ZWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBzdXBwb3J0IGZvciBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTWV0YS4KKwkqIE1ha2VmaWxlLmFtOiBMaWtld2lzZS4KKwkqIFJFQURNRTogQWRkIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBNZXRhIGRldGFpbHMuCisJKiBzcmMvbWV0YWcvZmZpLmM6IE5ldy4KKwkqIHNyYy9tZXRhZy9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisJKiBzcmMvbWV0YWcvc3lzdi5TOiBMaWtld2lzZS4KKworMjAxMy0wMi0yNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAbGludXgtbTY4ay5vcmc+CisKKwkqIGRvYy9saWJmZmkudGV4aSAoU3RydWN0dXJlcyk6IEZpeCBtaXNzaW5nIGNhdGVnb3J5IGFyZ3VtZW50IG9mCisJQGRlZnRwLgorCisyMDEzLTAyLTExICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBVcGRhdGUgcmVsZWFzZSBudW1iZXIgdG8gMy4wLjEyLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogUkVBRE1FOiBVcGRhdGUgcmVsZWFzZSBpbmZvLgorCisyMDEzLTAyLTEwICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogUkVBRE1FOiBBZGQgTW94aWUuCisJKiBzcmMvbW94aWUvZmZpLmM6IENyZWF0ZWQuCisJKiBzcmMvbW94aWUvZWFiaS5TOiBDcmVhdGVkLgorCSogc3JjL21veGllL2ZmaXRhcmdldC5oOiBDcmVhdGVkLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBNb3hpZS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmFjOiBBZGQgTW94aWUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogRGlzYWJsZSBmb3JtYXQgc3RyaW5nCisJd2FybmluZ3MgZm9yIG1veGllKi0qLWVsZiB0ZXN0cy4KKworMjAxMy0wMi0xMCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChMVExERkxBR1MpOiBGaXggcmVmZXJlbmNlLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTMtMDItMTAgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBSRUFETUU6IFVwZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zLiAgVXBkYXRlIHRlc3QgcmVzdWx0cyBsaW5rLgorCisyMDEzLTAyLTA5ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jOiBSZW1vdmUgZm9yY2VkIC1PMi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Mi5jIChmb28pOiBSZW1vdmUgR0NDaXNtLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQWRkIGRlZmF1bHQgUFJJdVBUUiBkZWZpbml0aW9uLgorCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2Nsb3N1cmVfdjgpOiBJbXBvcnQgYW5jaWVudCB1bG9uZ2xvbmcKKwljbG9zdXJlIHJldHVybiB0eXBlIGZpeCBkZXZlbG9wZWQgYnkgTWFydGluIHYuIEzDtndpcyBmb3IgY3B5dGhvbgorCWZvcmsuCisKKzIwMTMtMDItMDggIEFuZHJlYXMgVG9ibGVyICA8YW5kcmVhc3RAZmd6bmV0LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggc21hbGwgc3RydWN0CisJc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogRGl0dG8uCisKKzIwMTMtMDItMDggIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYzogUmVtb3ZlIHhmYWlsIGZvcgorCWFybSotKi0qLgorCisyMDEzLTAyLTA4ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBjYWNoZSBmbHVzaGluZyBmb3IgR0NDLgorCisyMDEzLTAyLTA4ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKworCSogbWFuL2ZmaV9wcmVwX2NpZi4zOiBDbGVhbiB1cCBmb3IgZGViaWFuIGxpbnRlci4KKworMjAxMy0wMi0wOCAgUGV0ZXIgQmVyZ25lciAgPGJlcmduZXJAdm5ldC5pYm0uY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQWNjb3VudCBmb3IgRlAgYXJncyBwdXNoZWQKKwlvbiB0aGUgc3RhY2suCisKKzIwMTMtMDItMDggIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBtaXNzaW5nIGZpbGVzLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogRGl0dG8uCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMy0wMi0wOCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogTW92ZSBzcGFyYyBhc20gY29uZmlnIGNoZWNrcyB0byB3aXRoaW4gZnVuY3Rpb25zCisJZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzdW4gdG9vbHMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRmx1c2ggY2FjaGUgb24gdjkKKwlzeXN0ZW1zLgorCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9mbHVzaF9pY2FjaGUpOiBJbXBsZW1lbnQgYSBzcGFyYyB2OSBjYWNoZQorCWZsdXNoZXIuCisKKzIwMTMtMDItMDggIE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CisKKwkqIHNyYy9taWNyb2JsYXplL2ZmaS5jIChmZmlfY2xvc3VyZV9jYWxsX1NZU1YpOiBGaXggaGFuZGxpbmcgb2YKKwlzbWFsbCBiaWctZW5kaWFuIHN0cnVjdHVyZXMuCisJKGZmaV9wcmVwX2FyZ3MpOiBEaXR0by4KKworMjAxMy0wMi0wNyAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2FsbF92OCk6IEZpeCB0eXBvIGZyb20gbGFzdCBwYXRjaAorCShlZmZlY3RpdmVseSBoaWRpbmcgZmZpX2NhbGxfdjgpLgorCisyMDEzLTAyLTA3ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBVcGRhdGUgYnVnIHJlcG9ydGluZyBhZGRyZXNzLgorCSogY29uZmlndXJlLmluOiBSZWJ1aWxkLgorCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2ZsdXNoX2ljYWNoZSk6IE91dC1vZi1saW5lIGNhY2hlIGZsdXNoZXIgZm9yCisJU3VuIGNvbXBpbGVyLgorCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfY2FsbCk6IFJlbW92ZSB3YXJuaW5nLgorCUNhbGwgZmZpX2ZsdXNoX2ljYWNoZSBmb3Igbm9uLUdDQyBidWlsZHMuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVXNlIGZmaV9mbHVzaF9pY2FjaGUuCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGxpYnRvb2wtbGRmbGFncy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogbGlidG9vbC1sZGZsYWdzOiBOZXcgZmlsZS4KKworMjAxMy0wMi0wNyAgRGFuaWVsIFNjaGVwbGVyIDxkc2NoZXBsZXJAZ21haWwuY29tPgorCisJKiBjb25maWd1cmUuYWM6IENvcnJlY3RseSBpZGVudGlmeSB4MzIgc3lzdGVtcyBhcyA2NC1iaXQuCisJKiBtNC9saWJ0b29sLm00OiBSZW1vdmUgbGlidG9vbCBleHByIGVycm9yLgorCSogYWNsb2NhbC5tNCwgY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEzLTAyLTA3ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBGaXggR0NDIHVzYWdlIHRlc3QuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBSRUFETUU6IE1lbnRpb24gTExWTS9HQ0MgeDg2XzY0IGlzc3VlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEzLTAyLTA3ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyAobWFpbik6IFJlcGxhY2UgLy8gc3R5bGUKKwljb21tZW50cyB3aXRoIC8qICovIGZvciB4bGMgY29tcGlsZXIuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdF92YS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyAobWFpbik6IERpdHRvLgorCisyMDEzLTAyLTA2ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogbWFuL2ZmaV9wcmVwX2NpZi4zOiBDbGVhbiB1cCBmb3IgZGViaWFuIGxpbnRpYW4gY2hlY2tlci4KKworMjAxMy0wMi0wNiAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChwa2djb25maWdkaXIpOiBBZGQgbWlzc2luZyBwa2djb25maWcgaW5zdGFsbCBiaXRzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbGQuCisKKzIwMTMtMDItMDIgIE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9jYWxsKTogU2lnbi1leHRlbmQgaW50ZWdlciBhcmd1bWVudHMgcGFzc2VkCisJdmlhIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuCisKKzIwMTMtMDEtMjEgIE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CisKKwkqIFJFQURNRTogQWRkIE1pY3JvQmxhemUgZGV0YWlscy4KKwkqIE1ha2VmaWxlLmFtOiBBZGQgTWljcm9CbGF6ZSBzdXBwb3J0LgorCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KKwkqIHNyYy9taWNyb2JsYXplL2ZmaS5jOiBOZXcuCisJKiBzcmMvbWljcm9ibGF6ZS9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisJKiBzcmMvbWljcm9ibGF6ZS9zeXN2LlM6IExpa2V3aXNlLgorCisyMDEzLTAxLTIxICBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBGaXhlZCBpc3N1ZS4KKworMjAxMy0wMS0yMSAgQ2hyaXMgWmFua2VsICAgPGNocmlzQHphbmtlbC5uZXQ+CisKKwkqIFJFQURNRTogQWRkIFh0ZW5zYSBzdXBwb3J0LgorCSogTWFrZWZpbGUuYW06IExpa2V3aXNlLgorCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluIFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogc3JjL3ByZXBfY2lmLmM6IEhhbmRsZSBYdGVuc2EuCisJKiBzcmMveHRlbnNhOiBOZXcgZGlyZWN0b3J5LgorCSogc3JjL3h0ZW5zYS9mZmkuYzogTmV3IGZpbGUuCisJKiBzcmMveHRlbnNhL2ZmaXRhcmdldC5oOiBEaXR0by4KKwkqIHNyYy94dGVuc2Evc3lzdi5TOiBEaXR0by4KKworMjAxMy0wMS0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZXBsYWNlIC8vIHN0eWxlCisJY29tbWVudHMgd2l0aCAvKiAqLyBmb3IgeGxjIGNvbXBpbGVyLgorCSogc3JjL3Bvd2VycGMvYWl4LlMgKGZmaV9jYWxsX0FJWCk6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoYWxsb2NhdGVfbW1hcCk6IERlbGV0ZQorCWRlcHJlY2F0ZWQgaW5saW5lIGZ1bmN0aW9uLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogRGl0dG8uCisJKiBSRUFETUU6IEFkZCB1cGRhdGUgZm9yIEFJWCBzdXBwb3J0LgorCisyMDEzLTAxLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogUm9idXN0aWZ5IHBjIHJlbGF0aXZlIHJlbG9jIGNoZWNrLgorCSogbTQvYXhfY2NfbWF4b3B0Lm00OiBEb24ndCAtbWFsaWduLWRvdWJsZS4gIFRoaXMgaXMgYW4gQUJJCisJY2hhbmdpbmcgb3B0aW9uIGZvciAzMi1iaXQgeDg2LgorCSogYWNsb2NhbC5tNCwgY29uZmlndXJlOiBSZWJ1aWx0LgorCSogUkVBRE1FOiBVcGRhdGUgc3VwcG9ydGVkIHRhcmdldCBsaXN0LgorCisyMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIFJFQURNRSAodGVzdGVkKTogQWRkIENvbXBpbGVyIGNvbHVtbiB0byB0YWJsZS4KKworMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKHN0cnVjdCByZWdpc3Rlcl9hcmdzKTogTWFrZSBzc2UgYXJyYXkgYW5kIGFycmF5CisJb2YgdW5pb25zIGZvciBzdW5wcm8gY29tcGlsZXIgY29tcGF0aWJpbGl0eS4KKworMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFRlc3QgdGFyZ2V0IHBsYXRmb3JtIHNpemVfdCBzaXplLiAgSGFuZGxlIGJvdGggMzIKKwlhbmQgNjQtYml0IGJ1aWxkcyBmb3IgeDg2XzY0LSogYW5kIGk/ODYtKiB0YXJnZXRzIChhbGxvd2luZyBmb3IKKwlDRkxBRyBvcHRpb24gdG8gY2hhbmdlIGRlZmF1bHQgc2V0dGluZ3MpLgorCSogY29uZmlndXJlLCBhY2xvY2FsLm00OiBSZWJ1aWx0LgorCisyMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogT25seSBydW4gZXhjZXB0aW9uCisJaGFuZGxpbmcgdGVzdHMgd2hlbiB1c2luZyBHTlUgY29tcGlsZXIuCisKKwkqIG00L2F4X2NvbXBpbGVyX3ZlbmRvci5tNDogTmV3IGZpbGUuCisJKiBjb25maWd1cmUuYWM6IFRlc3QgZm9yIGNvbXBpbGVyIHZlbmRvciBhbmQgZG9uJ3QgdXNlCisJQVhfQ0ZMQUdTX1dBUk5fQUxMIHdpdGggdGhlIHN1biBjb21waWxlci4KKwkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogRG9uJ3QgdXNlIEdDQ2lzbXMgdG8gZGVmaW5lIHR5cGVzIHdoZW4KKwlidWlsZGluZyB3aXRoIHRoZSBTVU5QUk8gY29tcGlsZXIuCisKKzIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBQdXQgbG9jYWwuZXhwIGluIHRoZSByaWdodCBwbGFjZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogc3JjL3g4Ni9mZmkuYzogVXBkYXRlIGNvbW1lbnQgYWJvdXQgcmVncGFybSBmdW5jdGlvbiBhdHRyaWJ1dGVzLgorCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBUaGUgU1VOUFJPIGNvbXBpbGVyIHJlcXVpcmVzCisJdGhhdCBhbGwgZnVuY3Rpb24gYXJndW1lbnRzIGJlIHBhc3NlZCBvbiB0aGUgc3RhY2sgKG5vIHJlZ3Bhcm0KKwlzdXBwb3J0KS4KKworMjAxMy0wMS0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEdlbmVyYXRlIGxvY2FsLmV4cC4gIFRoaXMgc2V0cyBDQ19GT1JfVEFSR0VUCisJd2hlbiB3ZSBhcmUgdXNpbmcgdGhlIHZlbmRvciBjb21waWxlci4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoRVhUUkFfREVKQUdOVV9TSVRFX0NPTkZJRyk6IFBvaW50IHRvCisJLi4vbG9jYWwuZXhwLgorCSogY29uZmlndXJlLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogUnVuIHRlc3RzIHdpdGggZGlmZmVyZW50CisJb3B0aW9ucywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHdlIGFyZSB1c2luZyBnY2Mgb3IgdGhlCisJdmVuZG9yIGNvbXBpbGVyLgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwIChsaWJmZmktaW5pdCk6IFNldCB1c2luZ19nY2MgYmFzZWQgb24KKwl3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYnVpbGRpbmcvdGVzdGluZyB3aXRoIGdjYy4KKworMjAxMy0wMS0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFN3aXRjaCB4ODYgc29sYXJpcyB0YXJnZXQgdG8gWDg2IGJ5IGRlZmF1bHQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTMtMDEtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBGaXggdGVzdCBmb3IgcmVhZC1vbmx5IGVoX2ZyYW1lLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEzLTAxLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy94ODYvc3lzdi5TLCBzcmMveDg2L3VuaXg2NC5TOiBPbmx5IGVtaXQgRFdBUkYgdW53aW5kIGluZm8KKwl3aGVuIGJ1aWxkaW5nIHdpdGggdGhlIEdOVSB0b29sY2hhaW4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChDSEVDSyk6IEZpeCBmb3IgU29sYXJpcyB2ZW5kb3IKKwljb21waWxlci4KKworMjAxMy0wMS0wNyAgVGhvcnN0ZW4gR2xhc2VyIDx0Z0BtaXJic2Qub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnRfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jOiBUZXN0c3VpdGUgZml4ZXMuCisKKzIwMTMtMDEtMDcgIFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLm9yZz4KKworCSogc3JjL202OGsvZmZpLmMgKENJRl9GTEFHU19TSU5UOCwgQ0lGX0ZMQUdTX1NJTlQxNik6IERlZmluZS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggOC1iaXQgYW5kIDE2LWJpdCBzaWduZWQgY2FsbHMuCisJKiBzcmMvbTY4ay9zeXN2LlMgKGZmaV9jYWxsX1NZU1YsIGZmaV9jbG9zdXJlX1NZU1YpOiBEaXR0by4KKworMjAxMy0wMS0wNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgLWZleGNlcHRpb25zCisJYW5kIC1XYWxsLiAgVGhpcyBpcyBzZXQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYWZ0ZXIgdGVzdGluZyBmb3IKKwlHQ0MuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMy0wMS0wMiAgcm9mbDByIDxodHRwczovL2dpdGh1Yi5jb20vcm9mbDByPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggYnVpbGQgZXJyb3Igb24gcHBjCisJd2hlbiBsb25nIGRvdWJsZSA9PSBkb3VibGUuCisKKzIwMTMtMDEtMDIgIFJlaW5pIFVyYmFuICA8cnVyYmFuQHgtcmF5LmF0PgorCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBBZGQgLW5vLXVuZGVmaW5lZCB0byBMREZMQUdTCisJKHJlcXVpcmVkIGZvciBzaGFyZWQgbGlicyBvbiBjeWd3aW4vbWluZ3cpLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTItMTAtMzEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY28+CisKKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBBZGQgbmV3IEFCSSBzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKworMjAxMi0xMC0zMCAgTWFnbnVzIEdyYW5iZXJnICA8em9ycnlAZ2VudG9vLm9yZz4KKwkgICAgUGF2ZWwgTGFidXNoZXYgIDxwYXZlbC5sYWJ1c2hldkBydW5ib3gucnU+CisKKwkqIGNvbmZpZ3VyZS5hYzogTmV3IG9wdGlvbnMgcGF4X2VtdXRyYW1wCisJKiBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlZAorCSogc3JjL2Nsb3N1cmVzLmM6IE5ldyBmdW5jdGlvbiBlbXV0cmFtcF9lbmFibGVkX2NoZWNrKCkgYW5kCisJY2hlY2tzLgorCisyMDEyLTEwLTMwICBGcmVkZXJpY2sgQ2hldW5nICA8ZnJlZGVyaWNrLmNoZXVuZ0BnbWFpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogRW5hYmxlIEZGSV9NQVBfRVhFQ19XUklUIGZvciBEYXJ3aW4gMTIgKG1vdW50YWluCisJbGlvbikgYW5kIGZ1dHVyZSB2ZXJzaW9uLgorCSogY29uZmlndXJlOiBSZWJ1aWxkLgorCisyMDEyLTEwLTMwICBKYW1lcyBHcmVlbmhhbGdoICA8amFtZXMuZ3JlZW5oYWxnaCBhdCBhcm0uY29tPgorICAgICAgICAgICAgTWFyY3VzIFNoYXdjcm9mdCAgPG1hcmN1cy5zaGF3Y3JvZnQgYXQgYXJtLmNvbT4KKworICAgICAgICAqIFJFQURNRTogQWRkIGRldGFpbHMgb2YgYWFyY2g2NCBwb3J0LgorICAgICAgICAqIHNyYy9hYXJjaDY0L2ZmaS5jOiBOZXcuCisgICAgICAgICogc3JjL2FhcmNoNjQvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgorICAgICAgICAqIHNyYy9hYXJjaDY0L3N5c3YuUzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5hbTogU3VwcG9ydCBhYXJjaDY0LgorCSogY29uZmlndXJlLmFjOiBTdXBwb3J0IGFhcmNoNjQuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEyLTEwLTMwICBKYW1lcyBHcmVlbmhhbGdoICA8amFtZXMuZ3JlZW5oYWxnaCBhdCBhcm0uY29tPgorICAgICAgICAgICAgTWFyY3VzIFNoYXdjcm9mdCAgPG1hcmN1cy5zaGF3Y3JvZnQgYXQgYXJtLmNvbT4KKworICAgICAgICAqIHRlc3RzdWl0ZS9saWIvbGliZmZpLmV4cDogQWRkIHN1cHBvcnQgZm9yIGFhcmNoNjQuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmM6IE5ldy4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyX3ZhLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludF92YS5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nX3ZhLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0X3ZhLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3VuaW5pdGlhbGl6ZWQuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDIuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDMuYzogTGlrZXdpc2UuCisKKzIwMTItMTAtMTIgIFdhbHRlciBMZWUgIDx3YWx0QHRpbGVyYS5jb20+CisKKyAgICAgICAgKiBNYWtlZmlsZS5hbTogQWRkIFRJTEUtR3gvVElMRVBybyBzdXBwb3J0LgorICAgICAgICAqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisgICAgICAgICogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgICAgICogY29uZmlndXJlOiBMaWtld2lzZS4KKyAgICAgICAgKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmX2NvcmUpOiBIYW5kbGUgVElMRS1HeC9USUxFUHJvLgorICAgICAgICAqIHNyYy90aWxlOiBOZXcgZGlyZWN0b3J5LgorICAgICAgICAqIHNyYy90aWxlL2ZmaS5jOiBOZXcgZmlsZS4KKyAgICAgICAgKiBzcmMvdGlsZS9mZml0YXJnZXQuaDogRGl0dG8uCisgICAgICAgICogc3JjL3RpbGUvdGlsZS5TOiBEaXR0by4KKworMjAxMi0xMC0xMiAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIGdlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHk6IE5vcm1hbGl6ZSB3aGl0ZXNwYWNlLgorCisyMDEyLTA5LTE0ICBEYXZpZCBFZGVsc29obiAgPGRqZS5nY2NAZ21haWwuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCisyMDEyLTA4LTI2ICBBbmRyZXcgUGluc2tpICA8YXBpbnNraUBjYXZpdW0uY29tPgorCisJUFIgbGliZmZpLzUzMDE0CisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBbGxvdyBuMzIgd2l0aCBzb2Z0LWZsb2F0IGFuZCBuNjQgd2l0aAorCXNvZnQtZmxvYXQuCisKKzIwMTItMDgtMDggIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERvbid0IEFTU0VSVCBBQkkgdGVzdCwKKwlqdXN0IHJldHVybiBGRklfQkFEX0FCSSB3aGVuIHRoaW5ncyBhcmUgd3JvbmcuCisKKzIwMTItMDctMTggIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIGxpYmZmaS81Mzk4MgorCVBSIGxpYmZmaS81Mzk3MworCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQ2hlY2sgX19JTFAzMl9fIGluc3RlYWQgb2YgX19MUDY0X18gZm9yIHgzMi4KKwkoRkZJX1NJWkVPRl9KQVZBX1JBVyk6IERlZmluZWQgdG8gNCBmb3IgeDMyLgorCisyMDEyLTA1LTE2ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisKKzIwMTItMDUtMDUgIE5pY29sYXMgTGVsb25nCisKKwkqIGxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBGaXhlcy4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBpT1MgYnVpbGRzLgorCisyMDEyLTA0LTIzICBBbGV4YW5kcmUgS2V1bmVja2UgSS4gZGUgTWVuZG9uY2EgPGFsZXhhbmRyZS5rZXVuZWNrZUBnbWFpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIEJsYWNrZmluL3N5c3Ygc3VwcG9ydAorCSogTWFrZWZpbGUuYW06IEFkZCBCbGFja2Zpbi9zeXN2IHN1cHBvcnQKKwkqIHNyYy9iZmluL2ZmaS5jOiAgQWRkIEJsYWNrZmluL3N5c3Ygc3VwcG9ydAorCSogc3JjL2JmaW4vZmZpdGFyZ2V0Lmg6IEFkZCBCbGFja2Zpbi9zeXN2IHN1cHBvcnQKKworMjAxMi0wNC0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBuZXcgc2NyaXB0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTItMDQtMTEgIFphY2hhcnkgV2FsZG93c2tpICA8endhbGRvd3NraUBnbWFpbC5jb20+CisKKwkqIGdlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHksCisJbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFN1cHBvcnQgYSBNYWMgc3RhdGljIGxpYnJhcnkgdmlhCisJWGNvZGUuIFNldCBpT1MgY29tcGF0aWJpbGl0eSB0byA0LjAuICBNb3ZlIGlPUyB0cmFtcG9saW5lCisJZ2VuZXJhdGlvbiBpbnRvIGFuIFhjb2RlICJydW4gc2NyaXB0IiBwaGFzZS4gIEluY2x1ZGUgYm90aCBhcworCVhjb2RlIGJ1aWxkIHNjcmlwdHMuIERvbid0IGFsd2F5cyByZWdlbmVyYXRlIGNvbmZpZyBmaWxlcy4KKworMjAxMi0wNC0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBBZGQgbWlzc2luZyBzZW1pY29sb24uCisKKzIwMTItMDQtMDYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbmV3IGlPUy94Y29kZSBmaWxlcy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEyLTA0LTA2ICBNaWtlIExld2lzICA8bWlrZWxpa2VzcGllQGdtYWlsLmNvbT4KKworCSogZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weTogTmV3IGZpbGUuCisJKiBsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTmV3IGZpbGUuCisJKiBSRUFETUU6IFVwZGF0ZSBpbnN0cnVjdGlvbnMgb24gYnVpbGRpbmcgaU9TIGJpbmFyeS4KKwkqIGJ1aWxkLWlvcy5zaDogRGVsZXRlLgorCisyMDEyLTA0LTA2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoVUlOVDEyOCk6IERlZmluZSBkaWZmZXJlbnRseSBmb3IgSW50ZWwgYW5kIEdOVQorCWNvbXBpbGVycywgdGhlbiB1c2UgaXQuCisKKzIwMTItMDQtMDYgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCSogbTQvbGlidG9vbC5tNCAoX0xUX0VOQUJMRV9MT0NLKTogU3VwcG9ydCB4MzIuCisKKzIwMTItMDQtMDYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG1pc3NpbmcgdGVzdCBjYXNlcy4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMi0wNC0wNSAgWmFjaGFyeSBXYWxkb3dza2kgIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIG1pc3NpbmcgdHJhbXBvbGluZSB0YWJsZSBmaWVsZHMuCisJKiBzcmMvYXJtL3N5c3YuUzogRml4IEVOVFJZIGRlZmluaXRpb24sIGFuZCB3cmFwIHN5bWJvbCByZWZlcmVuY2VzCisJaW4gQ05BTUUuCisJKiBzcmMveDg2L2ZmaS5jOiBXcmFwIFdpbmRvd3Mgc3BlY2lmaWMgY29kZSBpbiBpZmRlZnMuCisKKzIwMTItMDQtMDIgIFBldGVyIEJlcmduZXIgIDxiZXJnbmVyQHZuZXQuaWJtLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IERlY2xhcmUgZG91YmxlX3RtcC4KKwlTaWxlbmNlIGNhc3RpbmcgcG9pbnRlciB0byBpbnRlZ2VyIG9mIGRpZmZlcmVudCBzaXplIHdhcm5pbmcuCisJRGVsZXRlIGdvdG8gdG8gcHJldmlvdXNseSBkZWxldGVkIGxhYmVsLgorCShmZmlfY2FsbCk6IFNpbGVuY2UgcG9zc2libHkgdW5kZWZpbmVkIHdhcm5pbmcuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogRGVjbGFyZSB2YXJpYWJsZSB0eXBlLgorCisyMDEyLTA0LTAyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2NhbGxfd2luMzIpOiBTaWduL3plcm8gZXh0ZW5kIHRoZSByZXR1cm4KKwl2YWx1ZSBpbiB0aGUgSW50ZWwgdmVyc2lvbiBhcyBpcyBhbHJlYWR5IGRvbmUgZm9yIHRoZSBBVCZUIHZlcnNpb24uCisJKGZmaV9jbG9zdXJlX1NZU1YpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfU1REQ0FMTCk6IExpa2V3aXNlLgorCisyMDEyLTAzLTI5ICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKTogVW5pZnkgdGhlIGZyYW1lCisJZ2VuZXJhdGlvbiwgZml4IHRoZSBFTkRQIGxhYmVsIGFuZCByZW1vdmUgdGhlIHN1cnBsdXMgdGhpcmQgYXJnCisJZnJvbSB0aGUgJ2xlYScgaW5zbi4KKworMjAxMi0wMy0yOSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTWFrZSB0aGUgJ3N0dWJyYXcnIGxhYmVsCisJdmlzaWJsZSBvdXRzaWRlIHRoZSBQUk9DLCBzbyB0aGF0IGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCBjYW4gc2VlCisJaXQuICBBbHNvIGluc3RydWN0IHRoZSBhc3NlbWJsZXIgdG8gYWRkIGEgZnJhbWUgdG8gdGhlIGZ1bmN0aW9uLgorCisyMDEyLTAzLTIzICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIE1ha2VmaWxlLmFtIChBTV9DUFBGTEFHUyk6IEFkZCAtREZGSV9CVUlMRElORy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogaW5jbHVkZS9mZmkuaC5pbiBbTVNWQ106IEFkZCBfX2RlY2xzcGVjKGRsbGltcG9ydCkgZGVjb3JhdGlvbnMKKwl0byBhbGwgZGF0YSBleHBvcnRzLCB3aGVuIGNvbXBpbGluZyBsaWJmZmkgY2xpZW50cyB1c2luZyBNU1ZDLgorCisyMDEyLTAzLTI5ICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgbmV3IEFCSSBGRklfTVNfQ0RFQ0wgYW5kCisJbWFrZSBpdCB0aGUgZGVmYXVsdCBmb3IgTVNWQy4KKwkoRkZJX1RZUEVfTVNfU1RSVUNUKTogTmV3IHN0cnVjdHVyZSByZXR1cm4gY29udmVudGlvbi4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogVHdlYWsgdGhlIHN0cnVjdHVyZQorCXJldHVybiBjb252ZW50aW9uIGZvciBGRklfTVNfQ0RFQ0wgdG8gYmUgRkZJX1RZUEVfTVNfU1RSVUNUCisJaW5zdGVhZCBvZiBhbiBvcmRpbmFyeSBGRklfVFlQRV9TVFJVQ1QuCisJKGZmaV9wcmVwX2FyZ3MpOiBUcmVhdCBGRklfVFlQRV9NU19TVFJVQ1QgYXMgRkZJX1RZUEVfU1RSVUNULgorCShmZmlfY2FsbCk6IExpa2V3aXNlLgorCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBMaWtld2lzZS4KKwkoZmZpX3Jhd19jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVHJlYXQgRkZJX01TX0NERUNMIGFzIEZGSV9TWVNWLgorCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9TWVNWKTogRm9yIEZGSV9UWVBFX01TX1NUUlVDVCwKKwlyZXR1cm4gYSBwb2ludGVyIHRvIHRoZSByZXN1bHQgc3RydWN0dXJlIGluIGVheCBhbmQgZG9uJ3QgcG9wCisJdGhhdCBwb2ludGVyIGZyb20gdGhlIHN0YWNrLCB0aGUgY2FsbGVyIHRha2VzIGNhcmUgb2YgaXQuCisJKGZmaV9jYWxsX3dpbjMyKTogVHJlYXQgRkZJX1RZUEVfTVNfU1RSVUNUIGFzIEZGSV9UWVBFX1NUUlVDVC4KKwkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBMaWtld2lzZS4KKworMjAxMi0wMy0yMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgW01TVkNdOiBBZGQgaW5saW5lCisJYXNzZW1ibHkgdmVyc2lvbiB3aXRoIEludGVsIHN5bnRheC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmMgW01TVkNdOiBMaWtld2lzZS4KKworMjAxMi0wMy0yMyAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBQcm92aWRlIGFic3RyYXRpb24gb2YKKwlfX2F0dHJpYnV0ZV9fKChmYXN0Y2FsbCkpIGluIHRoZSBmb3JtIG9mIGEgX19GQVNUQ0FMTF9fCisJZGVmaW5lLiAgRGVmaW5lIGl0IHRvIF9fZmFzdGNhbGwgZm9yIE1TVkMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmM6IFVzZSB0aGUgYWJvdmUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jOiBMaWtld2lzZS4KKworMjAxMi0wMy0yMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiBzcmMveDg2L3dpbjMyLlMgW01TVkNdIChmZmlfY2xvc3VyZV9USElTQ0FMTCk6IFJlbW92ZSB0aGUgbWFudWFsCisJZnJhbWUgb24gZnVuY3Rpb24gZW50cnksIE1BU00gYWRkcyBvbmUgYXV0b21hdGljYWxseS4KKworMjAxMi0wMy0yMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtNU1ZDXTogQWRkIGtsdWRnZSBmb3IgbWlzc2luZworCWJpdHMgaW4gdGhlIE1TVkMgaGVhZGVycy4KKworMjAxMi0wMy0yMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBBZGp1c3QgdG8gdGhlIEM4OSBzdHlsZQorCXdpdGggbm8gZGVjbGFyYXRpb25zIGFmdGVyIHN0YXRlbWVudHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmM6IExpa2V3aXNlLgorCisyMDEyLTAzLTIxICBQZXRlciBSb3NpbgkgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdF92YS5jIChmbG9hdF92YV9mbik6IFVzZSAlZiB3aGVuCisJcHJpbnRpbmcgZG91YmxlcyAoJWxmIGlzIGZvciBsb25nIGRvdWJsZXMpLgorCShtYWluKTogTGlrZXdpc2UuCisKKzIwMTItMDMtMjEgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHAgWyotKi1jeWd3aW4qLCAqLSotbWluZ3cqXQorCShzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogQWRkIHRoZSBsaWJyYXJ5IHNlYXJjaCBkaXIgdG8gUEFUSAorCShhbmQgc2F2ZSBQQVRIIGZvciBsYXRlcikuCisJKHJlc3RvcmVfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogUmVzdG9yZSBQQVRILgorCisyMDEyLTAzLTIxICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwIFsqLSotY3lnd2luKiwgKi0qLW1pbmd3Kl0KKwkoc2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IEFkZCB0aGUgbGlicmFyeSBzZWFyY2ggZGlyIHRvIFBBVEgKKwkoYW5kIHNhdmUgUEFUSCBmb3IgbGF0ZXIpLgorCShyZXN0b3JlX2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IFJlc3RvcmUgUEFUSC4KKworMjAxMi0wMy0yMCAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jIChtYWluKTogUmVtb3ZlIGJ1Zy4KKwkqIHNyYy94ODYvd2luMzIuUyBbTVNWQ10gKGZmaV9jbG9zdXJlX1NZU1YpOiBNYWtlIHRoZSAnc3R1YicgbGFiZWwKKwl2aXNpYmxlIG91dHNpZGUgdGhlIFBST0MsIHNvIHRoYXQgZmZpX2Nsb3N1cmVfVEhJU0NBTEwgY2FuIHNlZSBpdC4KKworMjAxMi0wMy0yMCAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jIChtYWluKTogUmVtb3ZlIGJ1Zy4KKwkqIHNyYy94ODYvd2luMzIuUyBbTVNWQ10gKGZmaV9jbG9zdXJlX1NZU1YpOiBNYWtlIHRoZSAnc3R1YicgbGFiZWwKKwl2aXNpYmxlIG91dHNpZGUgdGhlIFBST0MsIHNvIHRoYXQgZmZpX2Nsb3N1cmVfVEhJU0NBTEwgY2FuIHNlZSBpdC4KKworMjAxMi0wMy0xOSAgQWxhbiBIb3VyaWhhbmUgIDxhbGFuaEBmYWlybGl0ZS5jby51az4KKworCSogc3JjL202OGsvZmZpLmM6IEFkZCBNSU5UIHN1cHBvcnQuCisJKiBzcmMvbTY4ay9zeXN2LlM6IERpdHRvLgorCisyMDEyLTAzLTA2ICBDaHVuZy1MaW4gVGFuZyAgPGNsdGFuZ0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfY2FsbCk6IEFkZCBfX0FSTV9FQUJJX18gZ3VhcmQgYXJvdW5kIGNhbGwgdG8KKwlmZmlfY2FsbF9WRlAoKS4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBZGQgX19BUk1fRUFCSV9fIGd1YXJkIGFyb3VuZCB1c2Ugb2YKKwlmZmlfY2xvc3VyZV9WRlAuCisJKiBzcmMvYXJtL3N5c3YuUzogQWRkIF9fQVJNX0VBQklfXyBndWFyZCBhcm91bmQgVkZQIGNvZGUuCisKKzIwMTItMDMtMTkgIGNoZW5uYW0gIDxjc2l0QGF4d2F5LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBBSVggY2xvc3VyZQorCXN1cHBvcnQuCisKKzIwMTItMDMtMTMgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRG9uJ3QgQVNTRVJUIEFCSSB0ZXN0LAorCWp1c3QgcmV0dXJuIEZGSV9CQURfQUJJIHdoZW4gdGhpbmdzIGFyZSB3cm9uZy4KKwkqIHNyYy9zaDY0L2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgorCisyMDEyLTAzLTA5ICBEYXZpZCBFZGVsc29obiAgPGRqZS5nY2NAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9BU00pOiBBZGp1c3QgZm9yIERhcndpbjY0CisJY2hhbmdlIHRvIHJldHVybiB2YWx1ZSBvZiBmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOIGFuZCBsb2FkIHR5cGUKKwlmcm9tIHJldHVybiB0eXBlLgorCisyMDEyLTAzLTAzICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX2NhbGwpOiBDYXN0IHRoZSByZXR1cm4gdmFsdWUgdG8gdW5zaWduZWQKKwlsb25nLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IENhc3QgdG8gNjRiaXQgYWRkcmVzcyBpbiB0cmFtcG9saW5lLgorCShmZmlfY2xvc3VyZV91bml4NjRfaW5uZXIpOiBDYXN0IHJldHVybiBwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcKKwlmaXJzdC4KKworCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoRkZJX1NJWkVPRl9BUkcpOiBEZWZpbmVkIHRvIDggZm9yIHgzMi4KKwkoZmZpX2FyZyk6IFNldCB0byB1bnNpZ25lZCBsb25nIGxvbmcgZm9yIHgzMi4KKwkoZmZpX3NhcmcpOiBTZXQgdG8gbG9uZyBsb25nIGZvciB4MzIuCisKKzIwMTItMDMtMDMgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZl9jb3JlKTogUHJvcGVybHkgY2hlY2sgYmFkIEFCSS4KKworMjAxMi0wMy0wMyAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5ICA8eWxhdHV5YUBnbWFpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIC1uby11bmRlZmluZWQgZm9yIGJvdGggMzItIGFuZCA2NC1iaXQgeDg2CisJd2luZG93cy1saWtlIGhvc3RzLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEyLTAyLTI3ICBNaWthZWwgUGV0dGVyc3NvbiAgPG1pa3BlQGl0LnV1LnNlPgorCisJUFIgbGliZmZpLzUyMjIzCisJKiBNYWtlZmlsZS5hbSAoRkxBR1NfVE9fUEFTUyk6IERlZmluZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDEyLTAyLTIzICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy8qL2ZmaXRhcmdldC5oOiBFbnN1cmUgdGhhdCB1c2VycyBuZXZlciBpbmNsdWRlIGZmaXRhcmdldC5oCisJZGlyZWN0bHkuCisKKzIwMTItMDItMjMgIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorCisJUFIgbGliZmZpLzUyMjIxCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpOiBOZXcKKwlwcm90b3R5cGUuCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IFVzZSBmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwgZm9yCisJdGhpc2NhbGwtY29udmVudGlvbi4KKwkoZmZpX3Jhd19jYWxsKTogVXNlIGZmaV9wcmVwX2FyZ3NfcmF3LgorCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpOiBBZGQKKwlpbXBsZW1lbnRhdGlvbiBmb3Igc3R1Yi4KKworMjAxMi0wMi0xMCAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQU1fTFRMREZMQUdTKTogQWRkIC1uby11bmRlZmluZSBmb3IgeDY0CisJd2luZG93cyB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCisyMDEyLTAyLTA4ICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KKworCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IEFsbG93IGZvciBYODZfV0lOMzIKKwlhbHNvIEZGSV9USElTQ0FMTC4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1RISVNDQUxMKTogQWRkIHByb3RvdHlwZS4KKwkoRkZJX0lOSVRfVFJBTVBPTElORV9USElTQ0FMTCk6IE5ldyB0cmFtcG9saW5lIGNvZGUuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWRkIEZGSV9USElTQ0FMTCBzdXBwb3J0LgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoRkZJX1RSQU1QT0xJTkVfU0laRSk6IEFkanVzdCBzaXplLgorCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9USElTQ0FMTCk6IE5ldyBjbG9zdXJlIGNvZGUKKwlmb3IgdGhpc2NhbGwtY2FsbGluZyBjb252ZW50aW9uLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYzogTmV3IHRlc3QuCisKKzIwMTItMDEtMjggIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorCisJKiBzcmMvbGliZmZpL3NyYy94ODYvZmZpLmMgKGZmaV9jYWxsX3dpbjMyKTogQWRkIG5ldworCWFyZ3VtZW50IHRvIHByb3RvdHlwZSBmb3Igc3BlY2lmeSBjYWxsaW5nLWNvbnZlbnRpb24uCisJKGZmaV9jYWxsKTogQWRkIHN1cHBvcnQgZm9yIHN0ZGNhbGwvdGhpc2NhbGwgY29udmVudGlvbi4KKwkoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgorCShmZmlfcmF3X2NhbGwpOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX1RISVNDQUxMIGFuZAorCUZGSV9GQVNUQ0FMTC4KKwkqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jYWxsX3dpbjMyKTogQWRkIHN1cHBvcnQgZm9yCisJZmFzdGNhbGwvdGhpc2NhbGwgY2FsbGluZy1jb252ZW50aW9uIGNhbGxzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jOiBOZXcgdGVzdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYzogTmV3IHRlc3QuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmM6IE5ldyB0ZXN0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYzogTmV3IHRlc3QuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTJfd2luMzIuYzogTmV3IHRlc3QuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jOiBOZXcgdGVzdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmM6IE5ldyB0ZXN0LgorCisyMDEyLTAxLTIzICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorCisJKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQ2hlY2sgZm9yIGJhZCBBQkkuCisKKzIwMTItMDEtMjMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKwkgICAgQ2hyaXMgWW91bmcgIDxjZHlvdW5nQG50bHdvcmxkLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgQW1pZ2Egc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMi0wMS0yMyAgRG1pdHJ5IE5hZGV6aGluICA8ZG1pdHJ5Lm5hZGV6aGluQGdtYWlsLmNvbT4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKExJS0VMWSwgVU5MSUtFTFkpOiBGaXggZGVmaW5pdGlvbnMuCisKKzIwMTItMDEtMjMgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGxpbnV4LW02OGsub3JnPgorCisJKiBzcmMvbTY4ay9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBQcm9wZXJseSB0ZXN0IGZvciBwbGFpbgorCW1jNjgwMDAuICBUZXN0IGZvciBfX0hBVkVfNjg4ODFfXyBpbiBhZGRpdGlvbiB0byBfX01DNjg4ODFfXy4KKworMjAxMi0wMS0xOSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwlQUiBydGwtb3B0aW1pemF0aW9uLzQ4NDk2CisJKiBzcmMvaWE2NC9mZmkuYyAoZmZpX2NhbGwpOiBGaXggdXAgYWxpYXNpbmcgdmlvbGF0aW9ucy4KKworMjAxMi0wMS0wOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoaT84Ni0qLSopOiBTZXQgVEFSR0VUIHRvIFg4Nl82NC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAxMS0xMi0wNyAgQW5kcmV3IFBpbnNraSAgPGFwaW5za2lAY2F2aXVtLmNvbT4KKworCVBSIGxpYmZmaS81MDA1MQorCSogc3JjL21pcHMvbjMyLlM6IEFkZCAiLnNldCBtaXBzNCIuCisKKzIwMTEtMTEtMjEgIEFuZHJlYXMgVG9ibGVyICA8YW5kcmVhc3RAZmd6bmV0LmNoPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMTEtMTEtMTIgIERhdmlkIEdpbGJlcnQgPGRhdmlkLmdpbGJlcnRAbGluYXJvLm9yZz4KKworCSogZG9jL2xpYmZmaS50ZXhpLCBpbmNsdWRlL2ZmaS5oLmluLCBpbmNsdWRlL2ZmaV9jb21tb24uaCwKKwltYW4vTWFrZWZpbGUuYW0sIG1hbi9mZmkuMywgbWFuL2ZmaV9wcmVwX2NpZi4zLAorCW1hbi9mZmlfcHJlcF9jaWZfdmFyLjMsIHNyYy9hcm0vZmZpLmMsIHNyYy9hcm0vZmZpdGFyZ2V0LmgsCisJc3JjL2NyaXMvZmZpLmMsIHNyYy9wcmVwX2NpZi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0X3ZhLmM6IE1hbnkgY2hhbmdlcyB0byBzdXBwb3J0IHZhcmlhZGljCisJZnVuY3Rpb24gY2FsbHMuCisKKzIwMTEtMTEtMTIgIEt5bGUgTW9mZmV0dCA8S3lsZS5ELk1vZmZldHRAYm9laW5nLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMsIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oLAorCXNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMsIHNyYy9wb3dlcnBjL3N5c3YuUzogTWFueSBjaGFuZ2VzIGZvcgorCXNvZnRmbG9hdCBwb3dlcnBjIHZhcmlhbnRzLgorCisyMDExLTExLTEyICBQZXRyIFNhbGluZ2VyIDxQZXRyLlNhbGluZ2VyQHNlem5hbS5jej4KKworCSogY29uZmlndXJlLmFjIChGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFKTogRml4IGtmcmVlYnNkIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTEtMTEtMTIgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogTWF4CisJYWxpZ25tZW50IG9mIDQgZm9yIHdpbmNlIG9uIEFSTS4KKworMjAxMS0xMS0xMiAgS3lsZSBNb2ZmZXR0IDxLeWxlLkQuTW9mZmV0dEBib2VpbmcuY29tPgorCSAgICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3BwYy9zeXN2LlMsIHNyYy9wcGMvZmZpLmM6IFJlbW92ZSB1c2Ugb2YgcHBjIHN0cmluZworCWluc3RydWN0aW9ucyAobm90IGF2YWlsYWJsZSBvbiBzb21lIGNvcmVzLCBsaWtlIHRoZSBQUEM0NDApLgorCisyMDExLTExLTEyICBLaW11cmEgV2F0YXJ1ICA8a2ltdXJhd0BpLm5pZnR5LmpwPgorCisJKiBtNC9heF9lbmFibGVfYnVpbGRkaXI6IENoYW5nZSBmcm9tIHN0cmluZyBjb21wYXJpc29uIHRvIG51bWVyaWMKKwljb21wYXJpc29uIGZvciB3YyBvdXRwdXQuCisJKiBjb25maWd1cmUuYWM6IEVuYWJsZSBGRklfTU1BUF9FWEVDX1dSSVQgZm9yIGRhcndpbjExIGFrYSBNYWMgT1MKKwlYIDEwLjcuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTEtMTEtMTIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEFNX0NDQVNGTEFHUyk6IEFkZCAtZyBvcHRpb24gdG8gYnVpbGQgYXNzZW1ibHkKKwlmaWxlcyB3aXRoIGRlYnVnIGluZm8uCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMS0xMS0xMiAgSmFzcGVyIExpZXZpc3NlIEFkcmlhYW5zZSA8amFzcGVyQG9wZW5ic2Qub3JnPgorCisJKiBSRUFETUU6IFVwZGF0ZSBsaXN0IG9mIHN1cHBvcnRlZCBPcGVuQlNEIHN5c3RlbXMuCisKKzIwMTEtMTEtMTIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogbGlidG9vbC12ZXJzaW9uOiBVcGRhdGUuCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIHNyYy9kZWJ1Zy5jIGlmCisJRkZJX0RFQlVHLgorCShsaWJmZmlfbGFfU09VUkNFUyk6IFJlbW92ZSBzcmMvZGVidWcuYworCShFWFRSQV9ESVNUKTogQWRkIHNyYy9kZWJ1Zy5jCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIFJFQURNRTogVXBkYXRlIGZvciAzLjAuMTEuCisKKzIwMTEtMTEtMTAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoR0NDX0FTX0NGSV9QU0VVRE9fT1ApOiBVc2UgaXQgaW5zdGVhZCBvZiBpbmxpbmUgY2hlY2suCisJKiBjb25maWd1cmUsIGFjbG9jYWwubTQ6IFJlYnVpbGQuCisKKzIwMTEtMDktMDQgIElhaW4gU2FuZG9lICA8aWFpbnNAZ2NjLmdudS5vcmc+CisKKwlQUiBsaWJmZmkvNDk1OTQKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMgKHN0dWJzKTogTWFrZSB0aGUgc3R1YiBiaW5kaW5nCisJaGVscGVyIHJlZmVyZW5jZSB0cmFjayB0aGUgYXJjaGl0ZWN0dXJlIHBvaW50ZXIgc2l6ZS4KKworMjAxMS0wOC0yNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hcm0vZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBSZW1vdmUgaGFyZC1jb2RlZCBhc3NlbWJseQorCWluc3RydWN0aW9ucy4KKwkqIHNyYy9hcm0vc3lzdi5TIChmZmlfYXJtX3RyYW1wb2xpbmUpOiBQdXQgdGhlbSBoZXJlIGluc3RlYWQuCisKKzIwMTEtMDctMTEgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisgICAgICAgICogc3JjL2FybS9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORSk6IENsZWFyIGljYWNoZS4KKworMjAxMS0wNi0yOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmM6IE1vdmUgUFIgbnVtYmVyIHRvIGNvbW1lbnQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogTGlrZXdpc2UuCisKKzIwMTEtMDYtMjkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzQ2NjYwCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiB4ZmFpbCBkZy1vdXRwdXQgb24KKwltaXBzLXNnaS1pcml4NiouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogTGlrZXdpc2UuCisKKzIwMTEtMDYtMTQgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYyAodGVzdF9sYXJnZV9mbik6IFVzZSBQUkl1OCwKKwlQUklkOCBpbnN0ZWFkIG9mICVoaHUsICVoaGQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtfX2FscGhhX18gJiYgX19vc2ZfX10gKFBSSWQ4LAorCVBSSXU4KTogRGVmaW5lLgorCVtfX3NnaV9fXSAoUFJJZDgsIFBSSXU4KTogRGVmaW5lLgorCisyMDExLTA0LTI5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL2FscGhhL29zZi5TIChVQV9TSSwgRkRFX0VOQ09ESU5HLCBGREVfRU5DT0RFLCBGREVfQVJBTkdFKToKKwlEZWZpbmUuCisJVXNlIHRoZW0gdG8gaGFuZGxlIEVMRiB2cy4gRUNPRkYgZGlmZmVyZW5jZXMuCisJW19fb3NmX19dIChfR0xPQkFMX19GX2ZmaV9jYWxsX29zZik6IERlZmluZS4KKworMjAxMS0wMy0zMCAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogRml4IHVua25vd24gRkRFIGVuY29kaW5nLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogZGl0dG8uCisKKzIwMTEtMDItMjUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWxsb3cgZm9yIG1vcmUKKwkzMi1iaXQgQUJJcy4KKworMjAxMS0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBtNC9heF9jY19tYXhvcHQubTQ6IERvbid0IC1tYWxpZ24tZG91YmxlIG9yIHVzZSAtZmZhc3QtbWF0aC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMS0wMi0xMyAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDExLTAyLTEzICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChVTkxJS0VMWSwgTElLRUxZKTogRGVmaW5lLgorCSogc3JjL3g4Ni9mZmk2NC5jIChVTkxJS0VMWSwgTElLRUxZKTogUmVtb3ZlIGRlZmluaXRpb24uCisJKiBzcmMvcHJlcF9jaWYuYyAoVU5MSUtFTFksIExJS0VMWSk6IFJlbW92ZSBkZWZpbml0aW9uLgorCisJKiBzcmMvcHJlcF9jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBDb252ZXJ0IGFzc2VydGlvbiBpbnRvCisJRkZJX0JBRF9UWVBFREVGIHJldHVybi4gIEluaXRpYWxpemUgYXJnIHNpemUgYW5kIGFsaWdubWVudCB0byAwLgorCisJKiBzcmMvcGEvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRG9uJ3QgQVNTRVJUIEFCSSB0ZXN0LAorCWp1c3QgcmV0dXJuIEZGSV9CQURfQUJJIHdoZW4gdGhpbmdzIGFyZSB3cm9uZy4KKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgorCSogc3JjL2lhNjQvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCisJKiBzcmMvYXZyMzIvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCisKKzIwMTEtMDItMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERvbid0IEFTU0VSVCBBQkkgdGVzdCwKKwlqdXN0IHJldHVybiBGRklfQkFEX0FCSSB3aGVuIHRoaW5ncyBhcmUgd3JvbmcuCisKKzIwMTItMDItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisKKwkqIHNyYy9zcGFyYy92OS5TIChTVEFDS0ZSQU1FKTogQnVtcCB0byAxNzYuCisKKzIwMTEtMDItMDkgIFN0dWFydCBTaGVsdG9uICA8c3Jjc2hlbHRvbkBnbWFpbC5jb20+CisKKwlodHRwOi8vYnVncy5nZW50b28ub3JnL3Nob3dfYnVnLmNnaT9pZD0yODY5MTEKKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBDbGVhbiB1cCBlcnJvciBtZXNzYWdlcy4KKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBDYXN0IHJhdyBhcmcgdG8KKwlmZmlfcmF3Ki4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBwcmFnbWEgZm9yIFNHSSBjb21waWxlci4KKworMjAxMS0wMi0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBwb3dlcnBjNjQtKi1kYXJ3aW4qIHN1cHBvcnQuCisKKzIwMTEtMDItMDkgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBSRUFETUU6IE1lbnRpb24gSW50ZXJpeC4KKworMjAxMS0wMi0wOSAgSm9uYXRoYW4gQ2FsbGVuICA8YWJjZEBnZW50b28ub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBJbnRlcml4IHRvIHdpbjMyL2N5Z3dpbi9taW5ndyBjYXNlLgorCSogY29uZmlndXJlOiBEaXR0by4KKwkqIHNyYy9jbG9zdXJlcy5jOiBUcmVhdCBJbnRlcml4IGxpa2UgQ3lnd2luLCBpbnN0ZWFkIG9mIGFzIGEKKwlnZW5lcmljIHdpbjMyLgorCisyMDExLTAyLTA5ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBSZW1vdmUgeGZhaWwuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogUmVtb3ZlIHhmYWlsLgorCSogc3JjL3g4Ni9mZmk2NC5jIChVTkxJS0VMWSwgTElLRUxZKTogRGVmaW5lLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IENoZWNrIGZvciBiYWQgQUJJLgorCSogc3JjL3ByZXBfY2lmLmMgKFVOTElLRUxZLCBMSUtFTFkpOiBEZWZpbmUuCisJKGluaXRpYWxpemVfYWdncmVnYXRlKTogQ2hlY2sgZm9yIGJhZCB0eXBlcy4KKworMjAxMS0wMi0wOSAgTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBwbGF1c2libGUuY29vcD4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgYnVpbGQtaW9zLnNoLCBzcmMvYXJtL2dlbnRyYW1wLnNoLAorCXNyYy9hcm0vdHJhbXBvbGluZS5TLgorCShub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgc3JjL2FyYy90cmFtcG9saW5lLlMuCisJKiBjb25maWd1cmUuYWMgKEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUpOiBEZWZpbmUuCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfdHJhbXBvbGluZV90YWJsZSkKKwkoZmZpX2Nsb3N1cmVfdHJhbXBvbGluZV90YWJsZV9wYWdlLCBmZmlfdHJhbXBvbGluZV90YWJsZV9lbnRyeSkKKwkoRkZJX1RSQU1QT0xJTkVfQ09ERUxPQ19DT05GSUcsIEZGSV9UUkFNUE9MSU5FX0NPTkZJR19QQUdFX09GRlNFVCkKKwkoRkZJX1RSQU1QT0xJTkVfQ09VTlQsIGZmaV90cmFtcG9saW5lX2xvY2ssIGZmaV90cmFtcG9saW5lX3RhYmxlcykKKwkoZmZpX3RyYW1wb2xpbmVfdGFibGVfYWxsb2MsIGZmaV9jbG9zdXJlX2FsbG9jLCBmZmlfY2xvc3VyZV9mcmVlKToKKwlEZWZpbmUgZm9yIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgY2FzZSAoaU9TKS4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBIYW5kbCBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGNhc2UKKwlzZXBhcmF0ZWx5LgorCSogc3JjL2FybS9zeXN2LlM6IEhhbmRsZSBBcHBsZSBpT1MgaG9zdC4KKwkqIHNyYy9jbG9zdXJlcy5jOiBIYW5kbGUgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBjYXNlLgorCSogYnVpbGQtaW9zLnNoOiBOZXcgZmlsZS4KKwkqIGZmaWNvbmZpZy5oLmluLCBjb25maWd1cmUsIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogUkVBRE1FOiBNZW50aW9uIEFSTSBpT1MuCisKKzIwMTEtMDItMDggIE9yZW4gSGVsZCAgPG9yZW5oZUBpbC5pYm0uY29tPgorCisJKiBzcmMvZGxtYWxsb2MuYyAoX1NUUlVDVF9NQUxMSU5GTyk6IERlZmluZSBpbiBvcmRlciB0byBhdm9pZAorCXJlZGVmaW5pdGlvbiBvZiBtYWxsaW5mbyBvbiBIUC1VWC4KKworMjAxMS0wMi0wOCAgR2lubiBDaGVuICA8Z2lubi5jaGVuQG9yYWNsZS5jb20+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX2NhbGwpOiBNYWtlIGNvbXBhdGlibGUgd2l0aCBTb2xhcmlzIFN0dWRpbworCWFnZ3JlZ2F0ZSByZXR1cm4gQUJJLiAgRmx1c2ggY2FjaGUuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRmx1c2ggY2FjaGUuCisKKzIwMTEtMDItMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCUZyb20gVG9tIEhvbmVybWFubiA8dG9tLmhvbmVybWFubkBvcmFjbGUuY29tPjoKKwkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9BSVgpOiBTdXBwb3J0IGZvciB4bGMgdG9vbGNoYWluIG9uCisJQUlYLiAgRGVjbGFyZSAuZmZpX3ByZXBfYXJncy4gIEluc2VydCBub3BzIGFmdGVyIGJyYW5jaAorCWluc3RydWN0aW9ucyBzbyB0aGF0IHRoZSBBSVggbGlua2VyIGNhbiBpbnNlcnQgVE9DIHJlbG9hZAorCWluc3RydWN0aW9ucy4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IERlY2xhcmUgLmZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4uCisKKzIwMTEtMDItMDggIEVkICA8ZWRAa2R0Yy5uZXQ+CisKKwkqIHNyYy9wb3dlcnBjL2FzbS5oOiBGaXggZ3JhbW1hciBuaXQgaW4gY29tbWVudC4KKworMjAxMS0wMi0wOCAgVWxpIExpbmsgIDx1bC5tY2FtYWZpYUBsaW5raXR1cC5kZT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJXzY0X0JJVF9NQVgpOiBEZWZpbmUgYW5kIHVzZS4KKworMjAxMS0wMi0wOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJmZmkvNDY2NjEKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jIChtYWluKTogQ2FzdCB2b2lkICogdG8KKwl1aW50cHRyX3QgZmlyc3QuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYyAobWFpbik6IExpa2V3aXNlLgorCisyMDExLTAyLTA4ICBSYWZhZWwgQXZpbGEgZGUgRXNwaW5kb2xhICA8cmVzcGluZG9sYUBtb3ppbGxhLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBGaXggeDg2IHRlc3QgZm9yIHBjIHJlbGF0ZWQgcmVsb2NzLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDExLTAyLTA3ICBKb2VsIFNoZXJyaWxsIDxqb2VsLnNoZXJyaWxsQG9hcmNvcnAuY29tPgorCisJKiBsaWJmZmkvc3JjL202OGsvZmZpLmM6IEFkZCBSVEVNUyBzdXBwb3J0IGZvciBjYWNoZSBmbHVzaGluZy4KKwlIYW5kbGUgY2FzZSB3aGVuIENQVSB2YXJpYW50IGRvZXMgbm90IGhhdmUgbG9uZyBkb3VibGUgc3VwcG9ydC4KKwkqIGxpYmZmaS9zcmMvbTY4ay9zeXN2LlM6IEFkZCBzdXBwb3J0IGZvciBtYzY4MDAwLCBDb2xkZmlyZSwKKwlhbmQgY29yZXMgd2l0aCBzb2Z0IGZsb2F0aW5nIHBvaW50LgorCisyMDExLTAyLTA3ICBKb2VsIFNoZXJyaWxsIDxqb2VsLnNoZXJyaWxsQG9hcmNvcnAuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBtaXBzKi0qLXJ0ZW1zKiBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IEVuc3VyZSBuZWVkZWQgY29uc3RhbnRzIGFyZSBhdmFpbGFibGUKKwlmb3IgdGFyZ2V0cyB3aGljaCBkbyBub3QgaGF2ZSBzZ2lkZWZzLmguCisKKzIwMTEtMDEtMjYgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorCisJUFIgdGFyZ2V0LzQwMTI1CisJKiBjb25maWd1cmUuYWMgKEFNX0xUTERGTEFHUyk6IEFkZCAtYmluZGlyIG9wdGlvbiBmb3Igd2luZG93cyBETExzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDEwLTEyLTE4ICBJYWluIFNhbmRvZSAgPGlhaW5zQGdjYy5nbnUub3JnPgorCisJUFIgbGliZmZpLzI5MTUyCisJUFIgbGliZmZpLzQyMzc4CisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBQcm92aWRlIERhcndpbjY0IGltcGxlbWVudGF0aW9uLAorCXVwZGF0ZSBjb21tZW50cy4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChQT1dFUlBDX0RBUldJTjY0KTogTmV3LAorCShGRklfVFJBTVBPTElORV9TSVpFKTogVXBkYXRlIGZvciBEYXJ3aW42NC4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBQcm92aWRlIERhcndpbjY0IGltcGxlbWVudGF0aW9uLAorCXVwZGF0ZSBjb21tZW50cy4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCisKKzIwMTAtMTItMDYgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWMgKGxpYmZmaV9jdl9hc19hc2NpaV9wc2V1ZG9fb3ApOiBVc2UgZG91YmxlCisJYmFja3NsYXNoZXMuCisJKGxpYmZmaV9jdl9hc19zdHJpbmdfcHNldWRvX29wKTogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMTAtMTItMDMgIENodW5nLUxpbiBUYW5nICA8Y2x0YW5nQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogQWRkIFVOV0lORCB0byAucGFkIGRpcmVjdGl2ZS4KKwkoZmZpX2Nsb3N1cmVfVkZQKTogU2FtZS4KKwkoZmZpX2NhbGxfVkZQKTogTW92ZSBkb3duIHRvIGJlZm9yZSBmZmlfY2xvc3VyZV9WRlAuIEFkZCAnLmZwdSB2ZnAnCisJZGlyZWN0aXZlLgorCisyMDEwLTEyLTAxICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBbX19zZ2ldIChQUklkNjQsIFBSSXU2NCk6IERlZmluZS4KKwkoUFJJdVBUUik6IERlZmluZS4KKworMjAxMC0xMS0yOSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKwkgICAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy94ODYvc3lzdi5TIChGREVfRU5DT0RJTkcsIEZERV9FTkNPREUpOiBEZWZpbmUuCisJKC5laF9mcmFtZSk6IFVzZSBGREVfRU5DT0RJTkcuCisJKC5MQVNGREUxLCAuTEFTRkRFMiwgTEFTRkRFMyk6IFNpbXBsaWZ5IHdpdGggRkRFX0VOQ09ERS4KKworMjAxMC0xMS0yMiAgSmFjZWsgQ2FiYW4gPGphY2VrQGNvZGV3ZWF2ZXJzLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3ltYm9sIHVuZGVyc2NvcmVzIG9uIG1pbmd3LXc2NC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIHNyYy94ODYvd2luNjQuUzogQ29ycmVjdGx5IGFjY2VzcyBleHRlcm4gc3ltYm9scyBpbiByZXNwZWN0IHRvCisJdW5kZXJzY29yZXMuCisKKzIwMTAtMTEtMTUgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFJlbmFtZSAuLi4KKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLmV4cDogLi4uIHRvIHRoaXMuCisJKiBsaWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBEb24ndCBsb2FkIGxpYmZmaS1kZy5leHAuCisJKiBsaWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBMaWtld2lzZS4KKworMjAxMC0xMC0yOCAgQ2h1bmctTGluIFRhbmcgIDxjbHRhbmdAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFkZCBWRlAgcmVnaXN0ZXIgYXJndW1lbnQgaGFuZGxpbmcKKwljb2RlLCBuZXcgcGFyYW1ldGVyLCBhbmQgcmV0dXJuIHZhbHVlLiBVcGRhdGUgY29tbWVudHMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIGNhc2UgZm9yIFZGUCBzdHJ1Y3QgcmV0dXJuIHZhbHVlcy4gQWRkCisJY2FsbCB0byBsYXlvdXRfdmZwX2FyZ3MoKS4KKwkoZmZpX2NhbGxfU1lTVik6IFVwZGF0ZSBkZWNsYXJhdGlvbi4KKwkoZmZpX2NhbGxfVkZQKTogTmV3IGRlY2xhcmF0aW9uLgorCShmZmlfY2FsbCk6IEFkZCBWRlAgc3RydWN0IHJldHVybiBjb25kaXRpb25zLiBDYWxsIGZmaV9jYWxsX1ZGUCgpCisJd2hlbiBBQkkgaXMgRkZJX1ZGUC4KKwkoZmZpX2Nsb3N1cmVfVkZQKTogTmV3IGRlY2xhcmF0aW9uLgorCShmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogQWRkIG5ldyB2ZnBfYXJncyBwYXJhbWV0ZXIsIHVwZGF0ZSBjYWxsIHRvCisJZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKCkuCisJKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IFVwZGF0ZSBwYXJhbWV0ZXJzLiBBZGQgVkZQIGFyZ3VtZW50CisJY2FzZSBoYW5kbGluZy4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBQYXNzIGZmaV9jbG9zdXJlX1ZGUCB0byB0cmFtcG9saW5lCisJY29uc3RydWN0aW9uIHVuZGVyIFZGUCBoYXJkLWZsb2F0LgorCShyZWNfdmZwX3R5cGVfcCk6IE5ldyBmdW5jdGlvbi4KKwkodmZwX3R5cGVfcCk6IFNhbWUuCisJKHBsYWNlX3ZmcF9hcmcpOiBTYW1lLgorCShsYXlvdXRfdmZwX2FyZ3MpOiBTYW1lLgorCSogc3JjL2FybS9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBGRklfVkZQLiBEZWZpbmUgRkZJX0RFRkFVTFRfQUJJCisJYmFzZWQgb24gX19BUk1fUENTX1ZGUC4KKwkoRkZJX0VYVFJBX0NJRl9GSUVMRFMpOiBEZWZpbmUgZm9yIGFkZGluZyBWRlAgaGFyZC1mbG9hdCBzcGVjaWZpYworCWZpZWxkcy4KKwkoRkZJX1RZUEVfU1RSVUNUX1ZGUF9GTE9BVCk6IERlZmluZSBpbnRlcm5hbGx5IHVzZWQgdHlwZSBjb2RlLgorCShGRklfVFlQRV9TVFJVQ1RfVkZQX0RPVUJMRSk6IFNhbWUuCisJKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IENoYW5nZSBjYWxsIG9mIGZmaV9wcmVwX2FyZ3MoKSB0bworCWRpcmVjdCBjYWxsLiBNb3ZlIGZ1bmN0aW9uIHBvaW50ZXIgbG9hZCB1cHdhcmRzLgorCShmZmlfY2FsbF9WRlApOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9jbG9zdXJlX1ZGUCk6IFNhbWUuCisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAoY2hlY2stZmxhZ3MpOiBOZXcgZnVuY3Rpb24uCisJKGRnLXNraXAtaWYpOiBOZXcgZnVuY3Rpb24uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiBTa2lwIGlmIHRhcmdldCBpcyBhcm0qLSotKgorCWFuZCBjb21waWxlciBvcHRpb25zIGluY2x1ZGUgLW1mbG9hdC1hYmk9aGFyZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBTYW1lLgorCisyMDEwLTEwLTAxICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCVBSIGxpYmZmaS80NTY3NworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEVuc3VyZSBjaWYtPmJ5dGVzIGlzCisJYSBtdWx0aXBsZSBvZiA4LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyLmM6IE5ldyB0ZXN0LgorCisyMDEwLTA4LTIwICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisKKwkqIHNyYy9jbG9zdXJlcy5jIChvcGVuX3RlbXBfZXhlY19maWxlX21udCk6IENoZWNrIGlmIGdldG1udGVudF9yCisJcmV0dXJucyBOVUxMLgorCisyMDEwLTA4LTA5ICBBbmRyZWFzIFRvYmxlciAgPGFuZHJlYXN0QGZnem5ldC5jaD4KKworCSogY29uZmlndXJlLmFjOiBBZGQgdGFyZ2V0IHBvd2VycGM2NC0qLWZyZWVic2QqLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmM6IFBhc3MKKwktbWxvbmctZG91YmxlLTEyOCBvbmx5IHRvIGxpbnV4IHRhcmdldHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IExpa2V3aXNlLgorCisyMDEwLTA4LTA1ICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKyAgICAgICAgKiBNYWtlZmlsZS5hbTogUGFzcyBGRklfREVCVUcgZGVmaW5lIHRvIG1zdmNjLnNoIGZvciBsaW5raW5nIHRvIHRoZQorICAgICAgICBkZWJ1ZyBDUlQgd2hlbiAtLWVuYWJsZS1kZWJ1ZyBpcyBnaXZlbi4KKyAgICAgICAgKiBjb25maWd1cmUuYWM6IERlZmluZSBpdC4KKyAgICAgICAgKiBtc3ZjYy5zaDogVHJhbnNsYXRlIC1nIGFuZCAtREZGSV9ERUJVRyBhcHByb3ByaWF0ZWx5LgorCisyMDEwLTA4LTA0ICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEFkZCBYODZfQU5ZIGRlZmluZSBmb3IgYWxsIHg4Ni94ODZfNjQKKwlwbGF0Zm9ybXMuCisJKiBzcmMveDg2L2ZmaS5jOiBSZW1vdmUgcmVkdW5kYW50IGlmZGVmIGNoZWNrcy4KKwkqIHNyYy9wcmVwX2NpZi5jOiBQdXNoIHN0YWNrIHNwYWNlIGNvbXB1dGF0aW9uIGludG8gc3JjL3g4Ni9mZmkuYworCWZvciBYODZfQU5ZIHNvIHJldHVybiB2YWx1ZSBzcGFjZSBkb2Vzbid0IGdldCBhZGRlZCB0d2ljZS4KKworMjAxMC0wOC0wMyAgTmVpbCBSYXNoYnJvb2tlIDxuZWlsQHBhcmt3YXljYy5jby51az4KKworCSogbXN2Y2Muc2g6IERvbid0IHBhc3MgLXNhZmVzZWggdG8gbWw2NCBiZWNhdXNlIGJlaGF2aW9yIGlzIGJ1Z2d5LgorCisyMDEwLTA3LTIyICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKwkqIHNyYy8qL2ZmaXRhcmdldC5oOiBNYWtlIEZGSV9MQVNUX0FCSSBvbmUgcGFzdCB0aGUgbGFzdCB2YWxpZCBBQkkuCisJKiBzcmMvcHJlcF9jaWYuYzogRml4IEFCSSBhc3NlcnRpb24uCisgICAgICAgICogc3JjL2NyaXMvZmZpLmM6IERpdHRvLgorCisyMDEwLTA3LTEwICBFdmFuIFBob2VuaXggIDxldmFuQGZhbGxpbmdzbm93Lm5ldD4KKworCSogc3JjL2Nsb3N1cmVzLmMgKHNlbGludXhfZW5hYmxlZF9jaGVjayk6IEZpeCBzdHJuY21wIHVzYWdlIGJ1Zy4KKworMjAxMC0wNy0wNyAgRGFuIEhvcsOhayA8ZGFuQGRhbm55LmN6PgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBQcm90ZWN0ICNkZWZpbmUgd2l0aCAjaWZuZGVmLgorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IERpdHRvLgorCSogc3JjL3MzOTAvZmZpdGFyZ2V0Lmg6IERpdHRvLgorCSogc3JjL3NwYXJjL2ZmaXRhcmdldC5oOiBEaXR0by4KKworMjAxMC0wNy0wNyAgIE5laWwgUm9iZXJ0cyA8bmVpbEBsaW51eC5pbnRlbC5jb20+CisKKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgdG8KKwkxNi1ieXRlcy4KKworMjAxMC0wNy0wMiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChBTV9NQUtFRkxBR1MpOiBQYXNzIGFsc28gbWFuZGlyIHRvIHN1Ym1ha2VzLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisyMDEwLTA1LTE5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmFjIChsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsKTogQ2hlY2sgZm9yIGlsbGVnYWwgaW4gYXMKKwlvdXRwdXQsIHRvby4KKwkobGliZmZpX2N2X2FzX2FzY2lpX3BzZXVkb19vcCk6IENoZWNrIGZvciAuYXNjaWkuCisJKGxpYmZmaV9jdl9hc19zdHJpbmdfcHNldWRvX29wKTogQ2hlY2sgZm9yIC5zdHJpbmcuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy94ODYvc3lzdi5TICguZWhfZnJhbWUpOiBVc2UgLmFzY2lpLCAuc3RyaW5nIG9yIGVycm9yLgorCisyMDEwLTA1LTExICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKwkqIGRvYy9saWJmZmkudGV4OiBEb2N1bWVudCBwcmV2aW91cyBjaGFuZ2UuCisKKzIwMTAtMDUtMTEgIE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2NhbGwpOiBEb24ndCBjb3B5IHN0cnVjdHMgcGFzc2VkIGJ5IHZhbHVlLgorCisyMDEwLTA1LTA1ICBNaWNoYWVsIEtvaGxlciA8bWljaGFlbGtvaGxlckBsaXZlLmNvbT4KKworCSogc3JjL2RsbWFsbG9jLmMgKGRsZnJlZSk6IEZpeCBzcGVsbGluZy4KKwkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERpdHRvLgorCSogY29uZmlndXJlLmFjOiBEaXR0by4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMC0wNC0xMyAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorCisJKiBtc3ZjYy5zaDogQnVpbGQgd2l0aCAtVzMgaW5zdGVhZCBvZiAtV2FsbC4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogUmVtb3ZlIGJ1aWxkIHdhcm5pbmdzLgorCSogc3JjL3g4Ni9mZmkuYzogRGl0dG8uCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBEaXR0by4KKworMjAxMC0wNC0xMiAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorCSAgICBXYWx0ZXIgTWVpbmwgPHd1bm9AbHN2dy5kZT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgT1MvMiBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogc3JjL2Nsb3N1cmVzLmM6IERpdHRvLgorCSogc3JjL2RsbWFsbG9jLmM6IERpdHRvLgorCSogc3JjL3g4Ni93aW4zMi5TOiBEaXR0by4KKworMjAxMC0wNC0wNyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBSZW1vdmUgdW51c2VkIGFyZ3MgdmFyaWFibGUuCisKKzIwMTAtMDQtMDIgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBtYW4vTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMTAtMDMtMzAgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKworCSogbXN2Y2Muc2g6IERpc2FibGUgYnVpbGQgd2FybmluZ3MuCisJKiBSRUFETUUgKHRlc3RlZCk6IENsYXJpZnkgd2luZG93cyBidWlsZCBwcm9jZWR1cmUuCisKKzIwMTAtMDMtMTUgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWMgKGxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZSk6IE5ldyB0ZXN0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBsaWJmZmkvc3JjL3g4Ni91bml4NjQuUyAoLmVoX2ZyYW1lKQorCVtIQVZFX0FTX1g4Nl82NF9VTldJTkRfU0VDVElPTl9UWVBFXTogVXNlIEB1bndpbmQgc2VjdGlvbiB0eXBlLgorCisyMDEwLTAzLTE0ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jOiBGaXggdHlwbyBpbiBjb21tZW50LgorCSogc3JjL3g4Ni9mZmkuYzogVXNlIC8qIC4uLiAqLyBjb21tZW50IHN0eWxlLgorCisyMDEwLTAyLTI0ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogZG9jL2xpYmZmaS50ZXhpIChUaGUgQ2xvc3VyZSBBUEkpOiBGaXggdHlwby4KKwkqIGRvYy9saWJmZmkuaW5mbzogUmVtb3ZlLgorCisyMDEwLTAyLTE1ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKworCSogc3JjL2FybS9zeXN2LlMgKF9fQVJNX0FSQ0hfXyk6IERlZmluZSBmb3IgcHJvY2Vzc29yCisJX19BUk1fQVJDSF83RU1fXy4KKworMjAxMC0wMS0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogQWRkIG5vdGVzIG9uIGJ1aWxkaW5nIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysuCisKKzIwMTAtMDEtMTUgIERhbmllbCBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKworCSogbXN2Y2Muc2g6IE5ldyBmaWxlLgorCisJKiBzcmMveDg2L3dpbjMyLlM6IFBvcnQgYXNzZW1ibHkgcm91dGluZXMgdG8gTVNWQyBhbmQgI2lmZGVmLgorCSogc3JjL3g4Ni9mZmkuYzogVHdlYWsgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIHJlbW92ZSBleGNlc3MKKwlwYXJlbnMuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgX19kZWNsc3BlYyhhbGlnbig4KSkgdG8gdHlwZWRlZiBzdHJ1Y3QKKwlmZmlfY2xvc3VyZS4KKworCSogc3JjL3g4Ni9mZmkuYzogTWVyZ2UgZmZpX2NhbGxfU1lTViBhbmQgZmZpX2NhbGxfU1REQ0FMTCBpbnRvIG5ldworCWZ1bmN0aW9uIGZmaV9jYWxsX3dpbjMyIG9uIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2NhbGxfU1lTVik6IFJlbmFtZSB0byBmZmlfY2FsbF93aW4zMi4KKwkoZmZpX2NhbGxfU1REQ0FMTCk6IFJlbW92ZS4KKworCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IE1vdmUgc3RhY2sgc3BhY2UgYWxsb2NhdGlvbiBjb2RlCisJdG8gZmZpX3ByZXBfY2lmX21hY2hkZXAgZm9yIHg4Ni4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogVG8gaGVyZS4KKworMjAxMC0wMS0xNSAgT2xpdmVyIEtpZGRsZSAgPG9raWRkbGVAeWFob28uY28udWs+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBDaGVjayBmb3IgX19pMzg2IGFuZCBfX2FtZDY0IGZvcgorCVN1biBTdHVkaW8gY29tcGlsZXIgY29tcGF0aWJpbGl0eS4KKworMjAxMC0wMS0xMiAgQ29ucmFkIElyd2luIDxjb25yYWQuaXJ3aW5AZ21haWwuY29tPgorCisJKiBkb2MvbGliZmZpLnRleGk6IEFkZCBjbG9zdXJlIGV4YW1wbGUuCisKKzIwMTAtMDEtMDcgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzQwNzAxCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtfX2FscGhhX18gJiYgX19vc2ZfX10gKFBSSWRMTCwKKwlQUkl1TEwsIFBSSWQ2NCwgUFJJdTY0LCBQUkl1UFRSKTogRGVmaW5lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogQWRkIC1Xbm8tZm9ybWF0IG9uCisJYWxwaGEqLWRlYy1vc2YqLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChhbGxvY2F0ZV9tbWFwKTogQ2FzdAorCU1BUF9GQUlMRUQgdG8gY2hhciAqLgorCisyMDEwLTAxLTA2ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL21pcHMvbjMyLlM6IFVzZSAuYWJpY2FsbHMgYW5kIC5laF9mcmFtZSB3aXRoIF9fR05VQ19fLgorCisyMDA5LTEyLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGUgZm9yIGxpYmZmaSAzLjAuOS4KKworMjAwOS0xMi0yNyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9MT05HX0RPVUJMRSk6IERlZmluZSBmb3IgbWlwcyB3aGVuCisJYXBwcm9wcmlhdGUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDktMTItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogTWFyayBhcyB4ZmFpbCBmb3IKKwlhdnIzMiotKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogRGl0dG8uCisKKzIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IENvbmRpdGlvbmFsbHkgaW5jbHVkZSBzdGRpbnQuaAorCWFuZCBpbnR0eXBlcy5oLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IERpdHRvLgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLW9wZW5ic2QqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBMaW5rCisJb3BlbmJzZCBwcm9ncmFtcyB3aXRoIC1scHRocmVhZC4KKworMjAwOS0xMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IFJlbW92ZSB4ZmFpbCBmb3IKKwltaXBzKi0qLSogYW5kIGFybSotKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogUmVtb3ZlIHhmYWlsIGZvciBhcm0qLSotKi4KKworMjAwOS0xMi0zMSAgS2F5IFRpZXR6ICA8a3RpZXR6NzBAZ29vZ2xlbWFpbC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUnVMTCk6IEZpeAorCWRlZmluaXRpb25zLgorCisyMDA5LTEyLTMxICBDYXJsbyBCcmFtaW5pICA8Y2FybG8uYnJhbWl4QGxpYmVyby5pdD4KKworCSogY29uZmlndXJlLmFjIChBTV9MVExERkxBR1MpOiBEZWZpbmUgZm9yIHdpbmRvd3MgaG9zdHMuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBBZGQgQU1fTFRMREZMQUdTLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDktMTItMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCSAgICBCbGFrZSBDaGFmZmluLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogTmV3IHRlc3QgY2FzZSBmcm9tIEJsYWtlCisJQ2hhZmZpbiBAIEFwcGxlLgorCisyMDA5LTEyLTI4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IENvcHkgYWJpIGFuZCBuYXJncyB0bworCWxvY2FsIHZhcmlhYmxlcy4KKwkoYWl4X2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ2FsbCBpdC4KKworMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBEZWZpbmUgRkZJX01NQVBfRVhFQ19XUklUIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KKwkqIHNyYy9jbG9zdXJlcy5jOiBSZW1vdmUgdGhlIEZGSV9NTUFQX0VYRUNfV1JJVCBkZWZpbml0aW9uIGZvcgorCVNvbGFyaXMveDg2LgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBsaW51eC1tNjhrLm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEFkdmFuY2UgaW50YXJnX2NvdW50CisJd2hlbiBhIGZsb2F0IGFyZ3VtZW50cyBpcyBwYXNzZWQgaW4gbWVtb3J5LgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IE1hcmsgZ2VuZXJhbCByZWdpc3RlcnMgYXMgdXNlZCB1cCB3aGVuCisJYSA2NGJpdCBvciBzb2Z0LWZsb2F0IGxvbmcgZG91YmxlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbiBtZW1vcnkuCisKKzIwMDktMTItMjUgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBtYW4vZmZpX2NhbGwuMzogRml4ICNpbmNsdWRlIGluIGV4YW1wbGVzLgorCSogZG9jL2xpYmZmaS50ZXhpOiBBZGQgZGlyY2F0ZWdvcnkuCisKKzIwMDktMTItMjUgIEZyYW5rIEV2ZXJkaWogPGYucC54LmV2ZXJkaWpAdHVkZWxmdC5ubD4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogUGxhY2VkICdfX0dOVUNfXycgaWZkZWYgYXJvdW5kCisJJ19fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKScgaW4gZmZpX2Nsb3N1cmUsIGZpeGVzIGNvbXBpbGUgZm9yCisJSVJJWCBNSVBTUHJvIGM5OS4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBBZGRlZCAnX19zZ2knIGRlZmluZSB0byBub24KKwknX19hdHRyaWJ1dGVfXygoX19tb2RlX18oKSkpJyBpbnRlZ2VyIHR5cGVkZWZzLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9jYWxsLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMiwKKwlmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEFkZGVkICdkZWZpbmVkKF9NSVBTRUIpJyB0byBCRSBjaGVjay4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogQWRkZWQKKwlGRklfTE9OR0RPVUJMRSBzdXBwb3J0IGFuZCBhbGlnbm1lbnQoTjMyIG9ubHkpLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IENvcnJlY3RlZCAnI2luY2x1ZGUgPHNnaWRlZnMuaD4nIGZvciBJUklYIGFuZAorCWZpeGVkIG5vbiAnX19hdHRyaWJ1dGVfXygoX19tb2RlX18oKSkpJyBpbnRlZ2VyIHR5cGVkZWZzLgorCSogc3JjL21pcHMvbjMyLlM6IFB1dCAnI2lmZGVmIGxpbnV4JyBhcm91bmQgJy5hYmljYWxscycgYW5kICcuZWhfZnJhbWUnCisJc2luY2UgdGhleSBhcmUgTGludXgvR05VIEFzc2VtYmxlciBzcGVjaWZpYy4KKworMjAwOS0xMi0yNSAgQnJhZGxleSBTbWl0aCAgPGJyYWRAYnJhZC1zbWl0aC5jby51az4KKworCSogY29uZmlndXJlLmFjLCBNYWtlZmlsZS5hbSwgc3JjL2F2cjMyL2ZmaS5jLAorCXNyYy9hdnIzMi9mZml0YXJnZXQuaCwKKwlzcmMvYXZyMzIvc3lzdi5TOiBBZGQgQVZSMzIgcG9ydC4KKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDktMTItMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogTWFrZSBpPzg2IGJ1aWxkIG9uIEZyZWVCU0QgYW5kIE9wZW5CU0QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDktMTItMTUgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IERlZmluZSBQUkl1UFRSIG9uIFBBIEhQLVVYLgorCisyMDA5LTEyLTEzICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorCisJKiBzcmMvcGEvZmZpLmMgKGZmaV9jbG9zdXJlX2lubmVyX3BhMzIpOiBIYW5kbGUgRkZJX1RZUEVfTE9OR0RPVUJMRQorCXR5cGUgb24gSFAtVVguCisKKzIwMTItMDItMTMgIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorCisJUFIgbGliZmZpLzUyMjIxCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBBZGQgdGhpc2NhbGwKKwlzdXBwb3J0IGZvciBYODZfV0lOMzIuCisJKEZGSV9JTklUX1RSQU1QT0xJTkVfVEhJU0NBTEwpOiBGaXggZGlzcGxhY2VtZW50LgorCisyMDA5LTEyLTExICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y5KTogUHJvcGVybHkgYWxpZ24gJ2xvbmcKKwlkb3VibGUnIGFyZ3VtZW50cy4KKworMjAwOS0xMi0xMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogRGVmaW5lIFBSSXVQVFIgb24gU29sYXJpcyA8IDEwLgorCisyMDA5LTEyLTEwICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCVBSIGxpYmZmaS80MDcwMAorCSogc3JjL2Nsb3N1cmVzLmMgW1g4Nl82NCAmJiBfX3N1bl9fICYmIF9fc3ZyNF9fXQorCShGRklfTU1BUF9FWEVDX1dSSVQpOiBEZWZpbmUuCisKKzIwMDktMTItMDggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGNhdml1bW5ldHdvcmtzLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHMqLSotKgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmM6IFNhbWUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYzogU2FtZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogU2FtZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IFNhbWUuCisKKzIwMDktMTItMDcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUyAobGliZmZpX2Nsb3N1cmVfQVNNKTogRml4IHRhYmxlanVtcAorCXR5cG8uCisKKzIwMDktMTItMDUgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvYWl4LlM6IFVwZGF0ZSBBSVgzMiBjb2RlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBBSVg2NAorCWNvZGUuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBTYW1lLgorCisyMDA5LTEyLTA1ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBtYW4vTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDktMTItMDQgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogUmVvcmdhbml6ZSA2NC1iaXQgY29kZSB0byBtYXRjaAorCWxpbnV4NjRfY2xvc3VyZS5TLgorCisyMDA5LTEyLTA0ICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorCisJUFIgbGliZmZpLzQxOTA4CisJKiBzcmMveDg2L2ZmaTY0LmMgKGNsYXNzaWZ5X2FyZ3VtZW50KTogVXBkYXRlIGZyb20KKwlnY2MvY29uZmlnL2kzODYvaTM4Ni5jLgorCShmZmlfY2xvc3VyZV91bml4NjRfaW5uZXIpOiBEbyBub3QgdXNlIHRoZSBhZGRyZXNzIG9mIHR3byBjb25zZWN1dGl2ZQorCVNTRSByZWdpc3RlcnMgZGlyZWN0bHkuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMgKG1haW4pOiBSZW1vdmUgeGZhaWwKKwlmb3IgeDg2XzY0IGxpbnV4IHRhcmdldHMuCisKKzIwMDktMTItMDQgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogSW5jcmVtZW50CisJcGZyIGZvciBsb25nIGRvdWJsZSBzcGxpdCBiZXR3ZWVuIGZwcjEzIGFuZCBzdGFjay4KKworMjAwOS0xMi0wMyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBJbmNyZW1lbnQgbmV4dF9hcmcgYW5kCisJZnBhcmdfY291bnQgdHdpY2UgZm9yIGxvbmcgZG91YmxlLgorCisyMDA5LTEyLTAzICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwlQUiBsaWJmZmkvNDIyNDMKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSBleHRyYSBwYXJlbnRoZXNlcy4KKworMjAwOS0xMi0wMyAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgKG1haW4pOiBGaXggZm9ybWF0IHN0cmluZy4KKwlSZW1vdmUgeGZhaWxzIGZvciB4ODYgbGludXggdGFyZ2V0cy4KKworMjAwOS0xMi0wMiAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggdHlwbyBpbiBJTlQ2NAorCWNhc2UuCisKKzIwMDktMTItMDEgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvYWl4LlMgKGZmaV9jYWxsX0FJWCk6IENvbnZlcnQgdG8gbW9yZSBzdGFuZGFyZAorCXJlZ2lzdGVyIHVzYWdlLiAgQ2FsbCBmZmlfcHJlcF9hcmdzIGRpcmVjdGx5LiAgQWRkIGxvbmcgZG91YmxlCisJcmV0dXJuIHZhbHVlIHN1cHBvcnQuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBEb3VibGUgYXJnIGluY3JlbWVudAorCWFwcGxpZXMgdG8gRkZJX1RZUEVfRE9VQkxFLiAgQ29ycmVjdCBmcHJfYmFzZSBpbmNyZW1lbnQgdHlwby4KKwlTZXBhcmF0ZSBGRklfVFlQRV9TSU5UMzIgYW5kIEZGSV9UWVBFX1VJTlQzMiBjYXNlcy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBPbmx5IDE2IGJ5dGUgc3RhY2sgYWxpZ25tZW50IGluIDY0IGJpdAorCW1vZGUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBSZW1vdmUgbmYgYW5kIG5nIGNvdW50ZXJzLiAgTW92ZSB0ZW1wCisJaW50byBjYXNlLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTWFpbnRhaW4gMTYgYnl0ZSBzdGFjayBhbGlnbm1lbnQuCisJQWxsb2NhdGUgcmVzdWx0IGFyZWEgYmV0d2VlbiBwYXJhbXMgYW5kIEZQUnMuCisKKzIwMDktMTEtMzAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCVBSIHRhcmdldC8zNTQ4NAorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKFBPV0VSUEM2NCk6IERlZmluZSBmb3IgUFBDNjQgTGludXggYW5kCisJQUlYNjQuCisJKiBzcmMvcG93ZXJwYy9haXguUzogSW1wbGVtZW50IEFJWDY0IHZlcnNpb24uCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBJbXBsZW1lbnQgQUlYNjQgdmVyc2lvbi4KKwkoZmZpX2Nsb3N1cmVfQVNNKTogVXNlIGV4dHNiLCBsaGEgYW5kIGRpc3BsYW1lbnQgYWRkcmVzc2VzLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogSW1wbGVtZW50IEFJWDY0CisJc3VwcG9ydC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTYW1lLgorCShmZmlfY2FsbCk6IFNhbWUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBTYW1lLgorCisyMDA5LTExLTAyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJUFIgbGliZmZpLzQxOTA4CisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdGVzdGNsb3N1cmUuYzogTmV3IHRlc3QuCisKKzIwMDktMDktMjggIEthaSBUaWV0eiAgPGthaS50aWV0ekBvbmV2aXNpb24uY29tPgorCisJKiBzcmMveDg2L3dpbjY0LlMgKF9mZmlfY2FsbF93aW42NCBzdGFjayk6IFJlbW92ZSBmb3IgZ251CisJYXNzZW1ibHkgdmVyc2lvbiB1c2Ugb2YgX19fY2hrc3RrLgorCisyMDA5LTA5LTIzICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKworCVBSIGxpYmZmaS80MDI0MiwgUFIgbGliZmZpLzQxNDQzCisJKiBzcmMvYXJtL3N5c3YuUyAoX19BUk1fQVJDSF9fKTogRGVmaW5lIGZvciBwcm9jZXNzb3JzCisJX19BUk1fQVJDSF82VDJfXywgX19BUk1fQVJDSF82TV9fLCBfX0FSTV9BUkNIXzdfXywKKwlfX0FSTV9BUkNIXzdBX18sIF9fQVJNX0FSQ0hfN1JfXywgX19BUk1fQVJDSF83TV9fLgorCUNoYW5nZSB0aGUgY29uZGl0aW9uYWxzIHRvIF9fU09GVEZQX18gfHwgX19BUk1fRUFCSV9fCisJZm9yIC1tZmxvYXQtYWJpPXNvZnRmcCB0byB3b3JrLgorCisyMDA5LTA5LTE3ICBMb3JlbiBKLiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgorCisJUFIgdGVzdHN1aXRlLzMyODQzIChzdHJpa2VzIGFnYWluKQorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgWDg2X0ZSRUVCU0QgdG8KKwllbmFibGUgcHJvcGVyIGV4dGVuc2lvbiBvbiBjaGFyIGFuZCBzaG9ydC4KKworMjAwOS0wOS0xNSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAY2F2aXVtbmV0d29ya3MuY29tPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd190b19ydmFsdWUpOiBSZW1vdmUgc3BlY2lhbAorCWhhbmRsaW5nIGZvciBGRklfVFlQRV9QT0lOVEVSLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKEZGSV9UWVBFX1NUUlVDVF9EX1NPRlQsCisJRkZJX1RZUEVfU1RSVUNUX0ZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX0REX1NPRlQsCisJRkZJX1RZUEVfU1RSVUNUX0ZGX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9GRF9TT0ZULAorCUZGSV9UWVBFX1NUUlVDVF9ERl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfU09GVCk6IE5ldyBkZWZpbmVzLgorCShGRklfTjMyX1NPRlRfRkxPQVQsIEZGSV9ONjRfU09GVF9GTE9BVCk6IE5ldyBmZmlfYWJpIGVudW1lcmF0aW9ucy4KKwkoZW51bSBmZmlfYWJpKTogU2V0IEZGSV9ERUZBVUxUX0FCSSBmb3Igc29mdC1mbG9hdC4KKwkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiBBZGQgaGFuZGxpbmcgZm9yIHNvZnQtZmxvYXQKKwlzdHJ1Y3R1cmUgYW5kIHBvaW50ZXIgcmV0dXJucy4KKwkoZmZpX2Nsb3N1cmVfTjMyKTogQWRkIGhhbmRsaW5nIGZvciBwb2ludGVyIHJldHVybnMuCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncywgY2FsY19uMzJfc3RydWN0X2ZsYWdzLAorCWNhbGNfbjMyX3JldHVybl9zdHJ1Y3RfZmxhZ3MpOiBIYW5kbGUgc29mdC1mbG9hdC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiAgSGFuZGxlIHNvZnQtZmxvYXQsIGZpeCBwb2ludGVyIGhhbmRsaW5nLgorCShmZmlfY2FsbF9OMzIpOiBEZWNsYXJlIHByb3BlciBhcmd1bWVudCB0eXBlcy4KKwkoZmZpX2NhbGwsIGNvcHlfc3RydWN0X04zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBIYW5kbGUKKwlzb2Z0LWZsb2F0LgorCisyMDA5LTA4LTI0ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmUuYWMgKEFDX1BSRVJFUSk6IEJ1bXAgdG8gMi42NC4KKworMjAwOS0wOC0yMiAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogTWFrZWZpbGUuYW0gKGluc3RhbGwtaHRtbCwgaW5zdGFsbC1wZGYpOiBSZW1vdmUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogbWFuL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDExLTA4LTIyICBKYXNwZXIgTGlldmlzc2UgQWRyaWFhbnNlIDxqYXNwZXJAb3BlbmJzZC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIE9wZW5CU0QvaHBwYSBhbmQgT3BlbkJTRC9wb3dlcnBjIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDktMDctMzAgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoX0FDX0FSR19WQVJfUFJFQ0lPVVMpOiBVc2UgbTRfcmVuYW1lX2ZvcmNlLgorCisyMDA5LTA3LTI0ICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCVBSIGxpYmZmaS80MDgwNworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBbHNvIHVzZSBzaWduL3plcm8tZXh0ZW5kaW5nCisJcmV0dXJuIHR5cGVzIGZvciBYODZfV0lOMzIuCisJKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2FsbF9TWVNWKTogSGFuZGxlIG9taXR0ZWQgcmV0dXJuIHR5cGVzLgorCShfZmZpX2NhbGxfU1REQ0FMTCwgX2ZmaV9jbG9zdXJlX1NZU1YsIF9mZmlfY2xvc3VyZV9yYXdfU1lTViwKKwlfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6IExpa2V3aXNlLgorCisJKiBzcmMvY2xvc3VyZXMuYyAoaXNfc2VsaW51eF9lbmFibGVkKTogRGVmaW5lIHRvIGNvbnN0IDAgZm9yIEN5Z3dpbi4KKwkoZGxtbWFwLCBkbG11bm1hcCk6IEFsc28gdXNlIHRoZXNlIGZ1bmN0aW9ucyBvbiBDeWd3aW4uCisKKzIwMDktMDctMTEgIFJpY2hhcmQgU2FuZGlmb3JkICA8cmRzYW5kaWZvcmRAZ29vZ2xlbWFpbC5jb20+CisKKwlQUiB0ZXN0c3VpdGUvNDA2OTkKKwlQUiB0ZXN0c3VpdGUvNDA3MDcKKwlQUiB0ZXN0c3VpdGUvNDA3MDkKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmV2ZXJ0IDIwMDktMDctMDIsIDIwMDktMDctMDEgYW5kCisJMjAwOS0wNi0zMCBjb21taXRzLgorCisyMDA5LTA3LTAxICBSaWNoYXJkIFNhbmRpZm9yZCAgPHIuc2FuZGlmb3JkQHVrLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBTZXQgbGRfbGlicmFyeV9wYXRoCisJdG8gIiIgYmVmb3JlIGFkZGluZyBwYXRocy4gIChUaGlzIHJlaW5zdGF0ZXMgYW4gYXNzaWdubWVudCB0aGF0CisJd2FzIHJlbW92ZWQgYnkgbXkgMjAwOS0wNi0zMCBjb21taXQsIGJ1dCBjaGFuZ2VzIHRoZSBpbml0aWFsCisJdmFsdWUgZnJvbSAiLiIgdG8gIiIuKQorCisyMDA5LTA3LTAxICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwlQUiB0ZXN0c3VpdGUvNDA2MDEKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBQcm9wZXJseSBzZXQKKwlnY2NkaXIuICBBZGp1c3QgbGRfbGlicmFyeV9wYXRoIGZvciBnY2Mgb25seSBpZiBnY2NkaXIgaXNuJ3QKKwllbXB0eS4KKworMjAwOS0wNi0zMCAgUmljaGFyZCBTYW5kaWZvcmQgIDxyLnNhbmRpZm9yZEB1ay5pYm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogRG9uJ3QgYWRkICIuIgorCXRvIGxkX2xpYnJhcnlfcGF0aC4gIFVzZSBhZGRfcGF0aC4gIEFkZCBqdXN0IGZpbmRfbGliZ2NjX3MKKwl0byBsZF9saWJyYXJ5X3BhdGgsIG5vdCBldmVyeSBsaWJnY2MgbXVsdGlsaWIgZGlyZWN0b3J5LgorCisyMDA5LTA2LTE2ICBXaW0gTGV3aXMgIDx3aW1sQGhoaGgub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQXZvaWQgY2xvYmJlcmluZyBjcjMgYW5kIGNyNCwgd2hpY2ggYXJlCisJc3VwcG9zZWQgdG8gYmUgY2FsbGVlLXNhdmVkLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChzbWFsbF9zdHJ1Y3RfcmV0dXJuX3ZhbHVlKTogRml4IG92ZXJydW4gb2YKKwlyZXR1cm4gYnVmZmVyIGZvciBvZGQtc2l6ZSBzdHJ1Y3RzLgorCisyMDA5LTA2LTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJUFIgbGliZmZpLzQwNDQ0CisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IEFkZAorCWFsbG93X3N0YWNrX2V4ZWN1dGUgZm9yIERhcndpbi4KKworMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoVEFSR0VURElSKTogQWRkIG1pc3NpbmcgYmxhbmsgbGluZXMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0CisJc3BlY2lmaWVycy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUkl1TEwpOiBEZWZpbmUuCisKKzIwMDktMDYtMTUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IHhmYWlsIGV2ZXJ5d2hlcmUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogTGlrZXdpc2UuCisKKzIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIGluZm9fVEVYSU5GT1MuCisKKzIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBDaGFuZ2VMb2cubGliZmZpOiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0CisJc3BlY2lmaWVycy4KKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogaW5jbHVkZSBzdGRpbnQuaC4KKworMjAwOS0wNi0xMSAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiBNYWtlZmlsZS5hbSwKKwljb25maWd1cmUuYWMsCisJaW5jbHVkZS9mZmkuaC5pbiwKKwlpbmNsdWRlL2ZmaV9jb21tb24uaCwKKwlzcmMvY2xvc3VyZXMuYywKKwlzcmMvZGxtYWxsb2MuYywKKwlzcmMveDg2L2ZmaS5jLAorCXNyYy94ODYvZmZpdGFyZ2V0LmgsCisJc3JjL3g4Ni93aW42NC5TIChuZXcpLAorCVJFQURNRTogQWRkZWQgd2luNjQgc3VwcG9ydCAobWluZ3cgb3IgTVNWQykKKwkqIE1ha2VmaWxlLmluLAorCWluY2x1ZGUvTWFrZWZpbGUuaW4sCisJbWFuL01ha2VmaWxlLmluLAorCXRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwKKwljb25maWd1cmUsCisJYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQKKwkqIGx0Y2YtYy5zaDogcHJvcGVybHkgZXNjYXBlIGN5Z3dpbi93MzIgcGF0aAorCSogbWFuL2ZmaV9jYWxsLjM6IENsYXJpZnkgc2l6ZSByZXF1aXJlbWVudHMgZm9yIHJldHVybiB2YWx1ZS4KKwkqIHNyYy94ODYvZmZpNjQuYzogRml4IGZpbGVuYW1lIGluIGNvbW1lbnQuCisJKiBzcmMveDg2L3dpbjMyLlM6IFJlbW92ZSB1bnVzZWQgZXh0ZXJuLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiB1c2UgZmZpX2Nsb3N1cmVfYWxsb2MgaW5zdGVhZAorCW9mIGNoZWNraW5nIGZvciBNTUFQLiAgVXNlIGludHB0cl90IGluc3RlYWQgb2YgbG9uZyBjYXN0cy4KKworMjAwOS0wNi0xMSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWwgc2gqLSotbGludXgtKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBBZGQgeGZhaWwgc2gqLSotKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogTGlrZXdpc2UuCisKKzIwMDktMDYtMDkgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZyZWVic2QuUzogQWRkIG1pc3NpbmcgZmlsZS4KKworMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwlJbXBvcnQgZnJvbSBsaWJmZmkgMy4wLjg6CisKKwkqIGRvYy9saWJmZmkudGV4aTogTmV3IGZpbGUuCisJKiBkb2MvbGliZmZpLmluZm86IExpa2V3aXNlLgorCSogZG9jL3N0YW1wLXZ0aTogTGlrZXdpc2UuCisJKiBtYW4vTWFrZWZpbGUuYW06IE5ldyBmaWxlLgorCSogbWFuL2ZmaV9jYWxsLjM6IE5ldyBmaWxlLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzcmMveDg2L2RhcndpbjY0LlMsCisJc3JjL2RsbWFsbG9jLmMuCisJKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBYODZfRlJFRUJTRC4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjguCisJcGFyaXNjKi0qLWxpbnV4KjogQWRkLgorCWkzODYtKi1mcmVlYnNkKiB8IGkzODYtKi1vcGVuYnNkKjogQWRkLgorCXBvd2VycGMtKi1iZW9zKjogQWRkLgorCUFNX0NPTkRJVElPTkFMIFg4Nl9GUkVFQlNEOiBBZGQuCisJQUNfQ09ORklHX0ZJTEVTOiBBZGQgbWFuL01ha2VmaWxlLgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfRk4pOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKworMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogSW1wb3J0IGZyb20gbGliZmZpIDMuMC44LgorCisyMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogQWRkIHhmYWlscy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYzogQWRkIHhmYWlsIHg4Nl82NC0qLWxpbnV4LSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IEFkZCB4ZmFpbHMuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEFkZCBfX1VOVVNFRF9fIHRvIGFyZ3MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiAgTGlrZXdpc2UuCisKKzIwMDgtMTItMjYgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBtYXJrIGV4cGVjdGVkCisJZmFpbHVyZXMgb24geDg2XzY0IGN5Z3dpbi9taW5ndy4KKworMjAwOC0xMi0yMiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiB1c2UgcG9ydGFibGUgY2FzdCBmcm9tCisJcG9pbnRlciB0byBpbnRlZ2VyIChpbnRwdHJfdCkuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYzogZGlzYWJsZSBmb3Igd2luNjQuCisKKzIwMDgtMDctMjQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQ2xlYW4gdXAgZmFpbHVyZXMgZnJvbQorCWNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDA4LTAzLTA0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKwkgICAgQmxha2UgQ2hhZmZpbgorCSAgICBob3NAdGFtYW5lZ2kub3JnCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTmV3IHRlc3RzIGZyb20gQXBwbGUuCisKKzIwMDktMDYtMDUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oLCBzcmMveDg2L2ZmaS5jOiBNZXJnZSBzdGRjYWxsIGNoYW5nZXMgZnJvbQorCWxpYmZmaS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmgsIHNyYy94ODYvd2luMzIuUywgc3JjL3g4Ni9mZmkuYzogQmFjayBvdXQKKwlzdGRjYWxsIGNoYW5nZXMuCisKKzIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCSAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogQ2hhbmdlIEMrKyBjb21tZW50IHRvIEMKKwljb21tZW50LgorCisyMDA4LTAyLTAzICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHNyYy94ODYvZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCk6IENhbGN1bGF0ZSBqdW1wIHJldHVybgorCSAgb2Zmc2V0IGJhc2VkIG9uIGNvZGUgcG9pbnRlciwgbm90IGRhdGEgcG9pbnRlci4KKworMjAwOC0wMS0zMSAgVGltb3RoeSBXYWxsIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYzogQWRkIHRlc3QgZm9yIHN0ZGNhbGwKKwljbG9zdXJlcy4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEluY3JlYXNlIHNpemUgb2YgdHJhbXBvbGluZSBmb3Igc3RkY2FsbAorCWNsb3N1cmVzLgorCSogc3JjL3g4Ni93aW4zMi5TOiBBZGQgYXNzZW1ibHkgZm9yIHN0ZGNhbGwgY2xvc3VyZS4KKwkqIHNyYy94ODYvZmZpLmM6IEluaXRpYWxpemUgc3RkY2FsbCBjbG9zdXJlIHRyYW1wb2xpbmUuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogSW5zZXJ0IGxpY2VuY2UgaGVhZGVyLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKworCSogc3JjL3NoNjQvZmZpLmM6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpNjQuYzogTGlrZXdpc2UuCisJKiBzcmMvYWxwaGEvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL2FscGhhL29zZi5TOiBMaWtld2lzZS4KKwkqIHNyYy9mcnYvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3MzOTAvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wYS9ocHV4MzIuUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9taXBzL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCisKKzIwMDgtMDItMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChVU0VfX0JVSUxUSU5fX19DTEVBUl9DQUNIRSk6CisJRGVmaW5lIChjb25kaXRpb25hbGx5KSwgYW5kIHVzZSBpdCB0byBpbmNsdWRlIGNhY2hlY3RsLmguCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKF9BQklOMzIsIF9BQkk2NCwgX0FCSU8zMik6IERlZmluZS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwlpbmNsdWRlL2ZmaS5oLmluLAorCXNyYy9hcm0vZmZpdGFyZ2V0LmgsCisJc3JjL2FybS9mZmkuYywKKwlzcmMvYXJtL3N5c3YuUywKKwlzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKKwlzcmMvY2xvc3VyZXMuYywKKwlzcmMvc2g2NC9mZml0YXJnZXQuaCwKKwlzcmMvc2g2NC9mZmkuYywKKwlzcmMvc2g2NC9zeXN2LlMsCisJc3JjL3R5cGVzLmMsCisJc3JjL3g4Ni9mZmk2NC5jLAorCXNyYy94ODYvZmZpdGFyZ2V0LmgsCisJc3JjL3g4Ni93aW4zMi5TLAorCXNyYy94ODYvZGFyd2luLlMsCisJc3JjL3g4Ni9mZmkuYywKKwlzcmMveDg2L3N5c3YuUywKKwlzcmMveDg2L3VuaXg2NC5TLAorCXNyYy9hbHBoYS9mZml0YXJnZXQuaCwKKwlzcmMvYWxwaGEvZmZpLmMsCisJc3JjL2FscGhhL29zZi5TLAorCXNyYy9tNjhrL2ZmaXRhcmdldC5oLAorCXNyYy9mcnYvZmZpdGFyZ2V0LmgsCisJc3JjL2Zydi9mZmkuYywKKwlzcmMvczM5MC9mZml0YXJnZXQuaCwKKwlzcmMvczM5MC9zeXN2LlMsCisJc3JjL2NyaXMvZmZpdGFyZ2V0LmgsCisJc3JjL3BhL2xpbnV4LlMsCisJc3JjL3BhL2ZmaXRhcmdldC5oLAorCXNyYy9wYS9mZmkuYywKKwlzcmMvcmF3X2FwaS5jLAorCXNyYy9pYTY0L2ZmaXRhcmdldC5oLAorCXNyYy9pYTY0L3VuaXguUywKKwlzcmMvaWE2NC9mZmkuYywKKwlzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsCisJc3JjL2phdmFfcmF3X2FwaS5jLAorCXNyYy9kZWJ1Zy5jLAorCXNyYy9zcGFyYy92OS5TLAorCXNyYy9zcGFyYy9mZml0YXJnZXQuaCwKKwlzcmMvc3BhcmMvZmZpLmMsCisJc3JjL3NwYXJjL3Y4LlMsCisJc3JjL21pcHMvZmZpdGFyZ2V0LmgsCisJc3JjL21pcHMvbjMyLlMsCisJc3JjL21pcHMvbzMyLlMsCisJc3JjL21pcHMvZmZpLmMsCisJc3JjL3ByZXBfY2lmLmMsCisJc3JjL3NoL2ZmaXRhcmdldC5oLAorCXNyYy9zaC9mZmkuYywKKwlzcmMvc2gvc3lzdi5TOiBVcGRhdGUgbGljZW5zZSB0ZXh0LgorCisyMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCSogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6ICBOZXcgZnVuY3Rpb24uCisJKC5laF9mcmFtZSk6ICBBZGQgRkRFIGZvciBpdC4KKworMjAwOS0wNS0yMiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogIEFsc28gY2hlY2sgaWYgYXNzZW1ibGVyIHN1cHBvcnRzIHBjLXJlbGF0aXZlCisJcmVsb2NzIG9uIFg4Nl9XSU4zMiB0YXJnZXRzLgorCSogY29uZmlndXJlOiAgUmVnZW5lcmF0ZS4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX3ByZXBfYXJncyk6ICBEZWNsYXJlIGV4dGVybiwgbm90IGdsb2JhbC4KKwkoX2ZmaV9jYWxsX1NZU1YpOiAgQWRkIG1pc3NpbmcgZnVuY3Rpb24gdHlwZSBzeW1ib2wgLmRlZiBhbmQKKwlhZGQgRUggbWFya3VwIGxhYmVscy4KKwkoX2ZmaV9jYWxsX1NURENBTEwpOiAgTGlrZXdpc2UuCisJKF9mZmlfY2xvc3VyZV9TWVNWKTogIExpa2V3aXNlLgorCShfZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiAgTGlrZXdpc2UuCisJKC5laF9mcmFtZSk6ICBBZGQgaGFuZC1jcmFmdGVkIEVIIGRhdGEuCisKKzIwMDktMDQtMDkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IENoYW5nZSBjb3B5cmlnaHQgaGVhZGVyIHRvIHJlZmVyIHRvCisJdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdG8gcG9pbnQgcmVhZGVycworCWF0IHRoZSBDT1BZSU5HMyBmaWxlIGFuZCB0aGUgRlNGJ3MgbGljZW5zZSB3ZWIgcGFnZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IExpa2V3aXNlLgorCisyMDA5LTAzLTAxICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMTItMTggIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzI2MDQ4CisJKiBjb25maWd1cmUuYWMgKEhBVkVfQVNfWDg2X1BDUkVMKTogTmV3IHRlc3QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy94ODYvc3lzdi5TIFshRkZJX05PX1JBV19BUEldOiBQcmVjYWxjdWxhdGUKKwlSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VULCBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VULAorCVJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgZm9yIHRoZSBTb2xhcmlzIDEwL3g4NiBhc3NlbWJsZXIuCisJKC5laF9mcmFtZSk6IE9ubHkgdXNlIFNZTUJPTC0uIGlmZiBIQVZFX0FTX1g4Nl9QQ1JFTC4KKwkqIHNyYy94ODYvdW5peDY0LlMgKC5Mc3RvcmVfdGFibGUpOiBNb3ZlIHRvIC50ZXh0IHNlY3Rpb24uCisJKC5MbG9hZF90YWJsZSk6IExpa2V3aXNlLgorCSguZWhfZnJhbWUpOiBPbmx5IHVzZSBTWU1CT0wtLiBpZmYgSEFWRV9BU19YODZfUENSRUwuCisKKzIwMDgtMTItMTggIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0xMS0yMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBzdXBwb3J0IGZvcgorCXNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2IHJldHVybiB2YWx1ZXMuCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2NhbGxfdjgpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfdjgpOiBMaWtld2lzZS4KKworMjAwOC0wOS0yNiAgUGV0ZXIgTydHb3JtYW4gIDxwb2dtYUB0aGV3cml0dGVud29yZC5jb20+CisJICAgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIG5ldyBsaWJ0b29sLgorCSogTWFrZWZpbGUuaW46IERpdHRvLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogRGl0dG8uCisJKiBhY2xvY2FsLm00OiBEaXR0by4KKworMjAwOC0wOC0yNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYIGFuZAorCUZGSV9MSU5VWF9TT0ZUX0ZMT0FUIHRvIHRoZSBQT1dFUlBDX0ZSRUVCU0QgZW51bS4KKwlBZGQgbm90ZSBhYm91dCBmbGFnIGJpdHMgdXNlZCBmb3IgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIHR3byBuZXcgZmxhZ3MgdG8gaW5kaWNhdGUgaWYgd2UgaGF2ZSBvbmUKKwlyZWdpc3RlciBvciB0d28gcmVnaXN0ZXIgdG8gdXNlIGZvciBGRklfU1lTViBzdHJ1Y3RzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFBhc3MgdGhlIHJpZ2h0IHJlZ2lzdGVyIGZsYWcgaW50cm9kdWNlZCBhYm92ZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBGaXggdGhlIHJldHVybiB0eXBlIGZvcgorCUZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNULiBDb21tZW50LgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA4LTA3LTE2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFR1cm4gSU5TTiBpbnRvIGFuIHVuc2lnbmVkCisJaW50LgorCisyMDA4LTA2LTE3ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA4LTA2LTA3ICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogY29uZmlndXJlLmFjIChwYXJpc2MqLSotbGludXgqLCBwb3dlcnBjLSotc3lzdiosCisJcG93ZXJwYy0qLWJlb3MqKTogUmVtb3ZlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTA1LTA5ICBKdWxpYW4gQnJvd24gIDxqdWxpYW5AY29kZXNvdXJjZXJ5LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKExUTERGTEFHUyk6IE5ldy4KKwkobGliZmZpX2xhX0xERkxBR1MpOiBVc2UgYWJvdmUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwOC0wNC0xOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCVBSIGJvb3RzdHJhcC8zNTQ1NworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wMy0yNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9zeXN2LlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA4LTAzLTI2ICBEYW5pZWwgSmFjb2Jvd2l0eiAgPGRhbkBkZWJpYW4ub3JnPgorCisJKiBzcmMvYXJtL3N5c3YuUzogRml4IEFSTSBjb21tZW50IG1hcmtlci4KKworMjAwOC0wMy0yNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hbHBoYS9vc2YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvYXJtL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDgtMDMtMTYgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCisyMDA4LTAyLTEyICBCam9lcm4gS29lbmlnICA8YmtvZW5pZ0BhbHBoYS10aWVyY2hlbi5kZT4KKwkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgYW1kNjQtKi1mcmVlYnNkKiB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDEtMzAgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIGxpYmZmaS8zNDYxMgorCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBQb3AgNCBieXRlIGZyb20gc3RhY2sgd2hlbgorCXJldHVybmluZyBzdHJ1Y3QuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogQWRkICItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiCisJdGVzdHMuCisKKzIwMDgtMDEtMjQgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTAxLTA2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCB0aGlua28uCisKKzIwMDgtMDEtMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIGNvZGUgZm9yCisJc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYgZm9yIFg4Nl9EQVJXSU4uCisJVXBkYXRlZCBjb3B5cmlnaHQgaW5mby4KKwlIYW5kbGUgb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzIHdpdGggc3BlY2lhbCBjaWYtPmZsYWdzLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQWRkIHNwZWNpYWwgdHlwZXMgZm9yIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cy4KKwlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorCSogc3JjL3g4Ni9kYXJ3aW4uUyAoZmZpX2NhbGxfU1lTVik6IFJld3JpdGUgdG8gdXNlIGEganVtcCB0YWJsZSBsaWtlCisJc3lzdi5TCisJUmVtb3ZlIGNvZGUgdG8gcG9wIGFyZ3MgZnJvbSB0aGUgc3RhY2sgYWZ0ZXIgY2FsbC4KKwlTcGVjaWFsLWNhc2Ugc2lnbmVkL3Vuc2lnbmVkIGZvciBpbnQ4LzE2LCBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMuCisJKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogSGFuZGxlIEZGSV9UWVBFX1VJTlQ4LAorCUZGSV9UWVBFX1NJTlQ4LCBGRklfVFlQRV9VSU5UMTYsIEZGSV9UWVBFX1NJTlQxNiwgRkZJX1RZUEVfVUlOVDMyLAorCUZGSV9UWVBFX1NJTlQzMi4KKwlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorCisyMDA3LTEyLTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogIFJlcGxhY2UgZGFkZCB3aXRoIEFERFUsIGRzdWIgd2l0aAorCVNVQlUsIGFkZCB3aXRoIEFERFUgYW5kIHVzZSBzbWFsbGVyIGNvZGUgc2VxdWVuY2VzLgorCisyMDA3LTEyLTA3ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgbG9uZyBkb3VibGUgcmV0dXJuCisJdHlwZS4KKworMjAwNy0xMi0wNiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX1NJWkVPRl9KQVZBX1JBVyk6IERlZmluZSBpZiBub3QJYWxyZWFkeQorCWRlZmluZWQuCisJKGZmaV9qYXZhX3Jhdyk6IE5ldyB0eXBlZGVmLgorCShmZmlfamF2YV9yYXdfY2FsbCwgZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3LAorCWZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IENoYW5nZSBwYXJhbWV0ZXIgdHlwZXMgZnJvbSBmZmlfcmF3IHRvCisJZmZpX2phdmFfcmF3LgorCShmZmlfamF2YV9yYXdfY2xvc3VyZSkgOiBTYW1lLgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlLCBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IENoYW5nZQorCXBhcmFtZXRlciB0eXBlcy4KKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3NpemUpOiAgUmVwbGFjZSBGRklfU0laRU9GX0FSRyB3aXRoCisJRkZJX1NJWkVPRl9KQVZBX1JBVy4KKwkoZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogQ2hhbmdlIHR5cGUgb2YgcmF3IHRvIGZmaV9qYXZhX3Jhdy4KKwlSZXBsYWNlIEZGSV9TSVpFT0ZfQVJHIHdpdGggRkZJX1NJWkVPRl9KQVZBX1JBVy4gVXNlCisJc2l6ZW9mKGZmaV9qYXZhX3JhdykgZm9yIGFsaWdubWVudCBjYWxjdWxhdGlvbnMuCisJKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IFNhbWUuCisJKGZmaV9qYXZhX3J2YWx1ZV90b19yYXcpOiBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgRkZJX1RZUEVfUE9JTlRFUgorCWlmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gNC4KKwkoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IFNhbWUuCisJKGZmaV9qYXZhX3Jhd19jYWxsKTogQ2hhbmdlIHR5cGUgb2YgcmF3IHRvIGZmaV9qYXZhX3Jhdy4KKwkoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBTYW1lLgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYywgZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSk6IENoYW5nZQorCXBhcmFtZXRlciB0eXBlcy4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lIGZvciBOMzIgQUJJLgorCisyMDA3LTEyLTA2ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2Nsb3N1cmVfTjMyKTogVXNlIDY0LWJpdCBhZGQgaW5zdHJ1Y3Rpb24gb24KKwlwb2ludGVyIHZhbHVlcy4KKworMjAwNy0xMi0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCVBSIGxpYmZmaS8zMTkzNworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEludHJvZHVjZSBuZXcgQUJJIEZGSV9MSU5VWF9TT0ZUX0ZMT0FULgorCUFkZCBsb2NhbCBGRklfVFlQRV9VSU5UMTI4IHRvIGhhbmRsZSBzb2Z0LWZsb2F0IGxvbmctZG91YmxlLTEyOC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIF9fTk9fRlBSU19fIGFuZCBub3QgYW5kCisJc2V0IHRoZSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgYWNjb3JkaW5nIHRvLgorCUFkZCBzdXBwb3J0IGZvciBwb3RlbnRpYWwgc29mdC1mbG9hdCBzdXBwb3J0IHVuZGVyIGhhcmQtZmxvYXQKKwlhcmNoaXRlY3R1cmUuCisJKGZmaV9wcmVwX2FyZ3NfU1lTVik6IFNldCBOVU1fRlBSX0FSR19SRUdJU1RFUlMgdG8gMCBpbiBjYXNlIG9mCisJRkZJX0xJTlVYX1NPRlRfRkxPQVQsIGhhbmRsZSBmbG9hdCwgZG91YmxlcyBhbmQgbG9uZy1kb3VibGVzIGFjY29yZGluZworCXRvIHRoZSBGRklfTElOVVhfU09GVF9GTE9BVCBBQkkuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBNYWtlIHN1cmUgbm90IHRvIHN0b3JlIGZsb2F0L2RvdWJsZQorCW9uIGFyY2hzIHdoZXJlIF9fTk9fRlBSU19fIGlzIHRydWUuCisJQWRkIEZGSV9UWVBFX1VJTlQxMjggc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIHN1cHBvcnQgZm9yIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4LgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA3LTExLTI1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvY2xvc3VyZXMuYzogTW92ZSBkZWZpbnRpb24gb2YgTUFZQkVfVU5VU0VEIGZyb20gaGVyZSB0byAuLi4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiAuLi4gaGVyZS4KKwlVcGRhdGUgY29weXJpZ2h0LgorCisyMDA3LTExLTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExvYWQgY29ycmVjdCBjciB0byBjb21wYXJlIGlmIHdlIGhhdmUgbG9uZyBkb3VibGUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCBhIGNvbW1lbnQgdG8gc2hvdyB3aGljaCBwYXJ0IGdvZXMgaW50byBjcjYuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jOiBOZXcgdGVzdC4KKworMjAwNy0wOS0wNCAgICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TIChVTldJTkQpOiBOZXcuCisJKFdob2xlIGZpbGUpOiBDb25kaXRpb25hbGx5IGNvbXBpbGUgdW53aW5kZXIgZGlyZWN0aXZlcy4KKwkqIHNyYy9hcm0vc3lzdi5TOiBBZGQgdW53aW5kZXIgZGlyZWN0aXZlcy4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFsaWduIHN0cnVjdHMgYnkgYXQgbGVhc3QgNCBieXRlcy4KKwlPbmx5IHRyZWF0IHIwIGFzIGEgc3RydWN0IGFkZHJlc3MgaWYgd2UncmUgYWN0dWFsbHkgcmV0dXJuaW5nIGEKKwlzdHJ1Y3QgYnkgYWRkcmVzcy4KKwlPbmx5IGNvcHkgdGhlIGJ5dGVzIHRoYXQgYXJlIGFjdHVhbGx5IHdpdGhpbiBhIHN0cnVjdC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBIENvbXBvc2l0ZSBUeXBlIG5vdCBsYXJnZXIgdGhhbiA0IGJ5dGVzCisJaXMgcmV0dXJuZWQgaW4gcjAsIG5vdCBwYXNzZWQgYnkgYWRkcmVzcy4KKwkoZmZpX2NhbGwpOiBBbGxvY2F0ZSBhIHdvcmQtc2l6ZWQgdGVtcG9yYXJ5IGZvciB0aGUgY2FzZSB3aGVyZQorCWEgY29tcG9zaXRlIGlzIHJldHVybmVkIGluIHIwLgorCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBBbGlnbiBhcyBuZWNlc3NhcnkuCisKKzIwMDctMDgtMDUgIFN0ZXZlbiBOZXdidXJ5ICA8c19qX25ld2J1cnlAeWFob28uY28udWs+CisKKwkqIHNyYy9hcm0vZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBVc2UgX19jbGVhcl9jYWNoZSBpbnN0ZWFkIG9mCisJZGlyZWN0bHkgdXNpbmcgdGhlIHN5c19jYWNoZWZsdXNoIHN5c2NhbGwuCisKKzIwMDctMDctMjcgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCBzb2Z0LWZsb2F0LgorCisyMDA3LTA5LTAzICBNYWNpZWogVy4gUm96eWNraSAgPG1hY3JvQGxpbnV4LW1pcHMub3JnPgorCisJKiBNYWtlZmlsZS5hbTogVW5pZnkgTUlQU19JUklYIGFuZCBNSVBTX0xJTlVYIGludG8gTUlQUy4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisKKzIwMDctMDgtMjQgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2wuYzogTmV3IHRlc3QuCisKKzIwMDctMDgtMTAgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHM2NCotKi0qLgorCisyMDA3LTA4LTEwICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJUFIgbGliZmZpLzI4MzEzCisJKiBjb25maWd1cmUuYWM6IERvbid0IHRyZWF0IG1pcHM2NCBhcyBhIHNwZWNpYWwgY2FzZS4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgbjMyLlMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUKKwkqIE1ha2VmaWxlLmluOiBEaXR0by4KKwkqIGZmaWNvbmZpZy5oLmluOiBEaXR0by4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChSRUdfTCwgUkVHX1MsIFNVQlUsIEFERFUsIFNSTCwgTEkpOiBJbmRlbnQuCisJKExBLCBFSF9GUkFNRV9BTElHTiwgRkRFX0FERFJfQllURVMpOiBOZXcgcHJlcHJvY2Vzc29yIG1hY3Jvcy4KKwkoRkZJX0RFRkFVTFRfQUJJKTogU2V0IGZvciBuNjQgY2FzZS4KKwkoRkZJX0NMT1NVUkVTLCBGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIGZvciBuMzIgYW5kIG42NCBjYXNlcy4KKwkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiBBZGQgZGVidWcgbWFjcm9zIGFuZCBsYWJlbHMgZm9yIEZERS4KKwkoZmZpX2Nsb3N1cmVfTjMyKTogTmV3IGZ1bmN0aW9uLgorCSguZWhfZnJhbWUpOiBOZXcgc2VjdGlvbgorCSogc3JjL21pcHMvbzMyLlM6IENsZWFuIHVwIGNvbW1lbnRzLgorCShmZmlfY2xvc3VyZV9PMzIpOiBQYXNzIGZmaV9jbG9zdXJlIHBhcmFtZXRlciBpbiAkMTIuCisJKiBzcmMvbWlwcy9mZmkuYzogVXNlIEZGSV9NSVBTX04zMiBpbnN0ZWFkIG9mCisJX01JUFNfU0lNID09IF9BQklOMzIgdGhyb3VnaG91dC4KKwkoRkZJX01JUFNfU1RPUF9IRVJFKTogTmV3LCB1c2UgaW4gcGxhY2Ugb2YKKwlmZmlfc3RvcF9oZXJlLgorCShmZmlfcHJlcF9hcmdzKTogVXNlIHVuc2lnbmVkIGxvbmcgdG8gaG9sZCBwb2ludGVyIHZhbHVlcy4gIFJld3JpdGUKKwl0byBzdXBwb3J0IG4zMi9uNjQgQUJJcy4KKwkoY2FsY19uMzJfc3RydWN0X2ZsYWdzKTogUmV3cml0ZS4KKwkoY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuICBSZXZlcnNlCisJcG9zaXRpb24gb2YgZmxhZyBiaXRzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFJld3JpdGUgbjMyIHBvcnRpb24uCisJKGZmaV9jYWxsKTogRW5hYmxlIGZvciBuNjQuICBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3Igc21hbGwgc3RydWN0dXJlCisJcmV0dXJuIHZhbHVlcy4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBZGQgbjMyIGFuZCBuNjQgc3VwcG9ydC4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBBZGQgY2FzdCB0byBzaWxlbmNlIHdhcm5pbmcuCisJKGNvcHlfc3RydWN0X04zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBOZXcgZnVuY3Rpb25zLgorCisyMDA3LTA4LTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChmZmlfdHlwZV9teWxvbmcpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgKG1haW4pOiBVc2UgY29ycmVjdCB0eXBlCisJc3BlY2lmaWVycy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyAobWFpbik6IERpdHRvLgorCisyMDA3LTA4LTA3ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogRml4IHR5cG8gaW4gcHJldmlvdXMKKwljaGVja2luLgorCisyMDA3LTA4LTA2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogSGFuZGxlIEZGSV9UWVBFX1VJTlQ4LAorCUZGSV9UWVBFX1NJTlQ4LCBGRklfVFlQRV9VSU5UMTYsIEZGSV9UWVBFX1NJTlQxNiwgRkZJX1RZUEVfVUlOVDMyLAorCUZGSV9UWVBFX1NJTlQzMi4KKworMjAwNy0wOC0wMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jIChtYWluKTogRGVmaW5lIHJldHVybiB0eXBlIGFzCisJZmZpX2FyZy4gIFVzZSBwcm9wZXIgcHJpbnRmIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorCisyMDA3LTA3LTMwICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBpbiB4ODYgY2FzZSwgYWRkIGNvZGUgZm9yCisJc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYuCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFJld3JpdGUgdG86CisJVXNlIGEganVtcCB0YWJsZS4KKwlSZW1vdmUgY29kZSB0byBwb3AgYXJncyBmcm9tIHRoZSBzdGFjayBhZnRlciBjYWxsLgorCVNwZWNpYWwtY2FzZSBzaWduZWQvdW5zaWduZWQgaW50OC8xNi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYyAobWFpbik6IFJldmVydC4KKworMjAwNy0wNy0yNiAgUmljaGFyZCBHdWVudGhlciAgPHJndWVudGhlckBzdXNlLmRlPgorCisJUFIgdGVzdHN1aXRlLzMyODQzCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgKG1haW4pOiBWZXJpZnkgY2FsbAorCXJlc3VsdCBhcyBzaWduZWQgY2hhciwgbm90IGZmaV9hcmcuCisKKzIwMDctMDctMTYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWMgKGk/ODYtKi1zb2xhcmlzMi4xWzAtOV0pOiBTZXQgVEFSR0VUIHRvIFg4Nl82NC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNy0wNy0xMSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpLmM6IERvbid0IGluY2x1ZGUgc3lzL2NhY2hlY3RsLmguCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVXNlIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKCkgaW5zdGVhZCBvZgorCWNhY2hlZmx1c2goKS4KKworMjAwNy0wNS0xOCAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhanVzdGVkCisJZnJvbSAoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogQWRqdXN0LgorCisyMDA1LTEyLTMxICBQaGlsIEJsdW5kZWxsICA8cGJAcmVjaXZhLmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWLAorCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIsIGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcsIGFkZCBjbG9zdXJlIHN1cHBvcnQuCisJKiBzcmMvYXJtL3N5c3YuUyhmZmlfY2xvc3VyZV9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvYXJtL2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9DTE9TVVJFUyk6IEVuYWJsZSBjbG9zdXJlIHN1cHBvcnQuCisKKzIwMDctMDctMDMgIEFuZHJldyBIYWxleSAgPGFwaEBoZWRnZXMuYmlsbGdhdGxpZmYuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogRW5hYmxlIGZvciBBUk0uCisKKzIwMDctMDctMDUgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQuCisKKzIwMDctMDYtMDIgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNy0wNS0yMyAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWLAorCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIsZmZpX3ByZXBfY2xvc3VyZSk6IE5ldywgYWRkIGNsb3N1cmUgc3VwcG9ydC4KKwkqIHNyYy9tNjhrL3N5c3YuUyhmZmlfY2xvc3VyZV9TWVNWLGZmaV9jbG9zdXJlX3N0cnVjdF9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9mZml0YXJnZXQuaCAoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgorCShGRklfQ0xPU1VSRVMpOiBFbmFibGUgY2xvc3VyZSBzdXBwb3J0LgorCisyMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKworCSogY29uZmlndXJlLmFjIChIQVZFX0FTX0NGSV9QU0VVRE9fT1ApOiBOZXcgdGVzdC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL202OGsvc3lzdi5TIChDRklfU1RBUlRQUk9DLENGSV9FTkRQUk9DLAorCUNGSV9PRkZTRVQsQ0ZJX0RFRl9DRkEpOiBOZXcgbWFjcm9zLgorCShmZmlfY2FsbF9TWVNWKTogQWRkIGNhbGxmcmFtZSBhbm5vdGF0aW9uLgorCisyMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKworCSogc3JjL202OGsvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXgKKwludW1lcm91cyB0ZXN0IHN1aXRlIGZhaWx1cmVzLgorCSogc3JjL202OGsvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UuCisKKzIwMDctMDQtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQnJpbmcgdXAgdG8gZGF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL2Zydi9lYWJpLlM6IFJlbW92ZSBSQ1Mga2V5d29yZC4KKworMjAwNy0wNC0wNiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBUaWR5IHRhcmdldCBjYXNlLgorCShIQVZFX0xPTkdfRE9VQkxFKTogQWxsb3cgdGhlIHRhcmdldCB0byBvdmVycmlkZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IERvbid0IGRlZmluZSBmZmlfdHlwZV9mb28gaWYKKwlMSUJGRklfSElERV9CQVNJQ19UWVBFUyBpcyBkZWZpbmVkLgorCShmZmlfdHlwZV9sb25nZG91YmxlKTogSWYgbm90IEhBVkVfTE9OR19ET1VCTEUsIGRlZmluZQorCXRvIGZmaV90eXBlX2RvdWJsZS4KKwkqIHR5cGVzLmMgKExJQkZGSV9ISURFX0JBU0lDX1RZUEVTKTogRGVmaW5lLgorCShGRklfVFlQRURFRiwgZmZpX3R5cGVfdm9pZCk6IE1hcmsgdGhlIGRhdGEgY29uc3QuCisJKGZmaV90eXBlX2xvbmdkb3VibGUpOiBTcGVjaWFsIGNhc2UgZm9yIEFscGhhLiAgRG9uJ3QgZGVmaW5lCisJaWYgbG9uZyBkb3VibGUgPT0gZG91YmxlLgorCisJKiBzcmMvYWxwaGEvZmZpLmMgKEZGSV9UWVBFX0xPTkdET1VCTEUpOiBBc3NlcnQgdW5pcXVlIHZhbHVlLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBpdCBhcyB0aGUgMTI4LWJpdCB0eXBlLgorCShmZmlfY2FsbCwgZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IExpa2V3aXNlLiAgTWFyayBoaWRkZW4uCisJKGZmaV9jYWxsX29zZiwgZmZpX2Nsb3N1cmVfb3NmKTogTWFyayBoaWRkZW4uCisJKiBzcmMvYWxwaGEvZmZpdGFyZ2V0LmggKEZGSV9MQVNUX0FCSSk6IFRpZHkgZGVmaW5pdGlvbi4KKwkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2NhbGxfb3NmLCBmZmlfY2xvc3VyZV9vc2YpOiBNYXJrIGhpZGRlbi4KKwkobG9hZF90YWJsZSk6IEhhbmRsZSAxMjgtYml0IGxvbmcgZG91YmxlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmM6IEFkZCAtbWllZWUgZm9yIGFscGhhLgorCisyMDA3LTA0LTA2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvMzE0OTE6CisJKiBSRUFETUU6IEZpeGVkIGJ1ZyBpbiBleGFtcGxlLgorCisyMDA3LTA0LTAzICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2Nsb3N1cmVzLmM6IEluY2x1ZGUgc3lzL3N0YXRmcy5oLgorCShfR05VX1NPVVJDRSk6IERlZmluZSBvbiBMaW51eC4KKwkoRkZJX01NQVBfRVhFQ19TRUxJTlVYKTogRGVmaW5lLgorCShzZWxpbnV4X2VuYWJsZWQpOiBOZXcgdmFyaWFibGUuCisJKHNlbGludXhfZW5hYmxlZF9jaGVjayk6IE5ldyBmdW5jdGlvbi4KKwkoaXNfc2VsaW51eF9lbmFibGVkKTogRGVmaW5lLgorCShkbG1tYXApOiBVc2UgaXQuCisKKzIwMDctMDMtMjQgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IE1hcmsgYXMgc3RhdGljLgorCVVzZSAndm9sYXRpbGUgZmxvYXQgc3VtJyB0byBjcmVhdGUgc3VtIG9mIGZsb2F0cyB0byBhdm9pZCBmYWxzZQorCW5lZ2F0aXZlIGR1ZSB0byBleGNlc3MgcHJlY2lzaW9uIG9uIGl4ODYgdGFyZ2V0cy4KKwkobWFpbik6IERpdHRvLgorCisyMDA3LTAzLTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZsdXNoX2ljYWNoZSk6IEZpeCBsZWZ0LW92ZXIgZnJvbSBwcmV2aW91cworCXBhdGNoLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbW92ZSB1bm5lZWRlZCBjYXN0cy4gIEFkZCBuZWVkZWQgb25lcy4KKworMjAwNy0wMy0wNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9jbG9zdXJlX2FsbG9jLCBmZmlfY2xvc3VyZV9mcmVlKTogTmV3LgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IE5ldy4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogTmV3LgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IE5ldy4KKwkqIHNyYy9jbG9zdXJlcy5jOiBOZXcgZmlsZS4KKwkqIHNyYy9kbG1hbGxvYy5jIFtGRklfTU1BUF9FWEVDX1dSSVRdIChzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpOgorCVJlcGxhY2Ugc2ZsYWdzIHdpdGggZXhlY19vZmZzZXQuCisJW0ZGSV9NTUFQX0VYRUNfV1JJVF0gKG1tYXBfZXhlY19vZmZzZXQsIGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0LAorCXN1Yl9zZWdtZW50X2V4ZWNfb2Zmc2V0KTogTmV3IG1hY3Jvcy4KKwkoZ2V0X3NlZ21lbnRfZmxhZ3MsIHNldF9zZWdtZW50X2ZsYWdzLCBjaGVja19zZWdtZW50X21lcmdlKTogTmV3CisJbWFjcm9zLgorCShpc19tbWFwcGVkX3NlZ21lbnQsIGlzX2V4dGVybl9zZWdtZW50KTogVXNlIGdldF9zZWdtZW50X2ZsYWdzLgorCShhZGRfc2VnbWVudCwgc3lzX2FsbG9jLCBjcmVhdGVfbXNwYWNlLCBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSwKKwlkZXN0cm95X21zcGFjZSk6IFVzZSBuZXcgbWFjcm9zLgorCShzeXNfYWxsb2MpOiBTaWxlbmNlIHdhcm5pbmcuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgc3JjL2Nsb3N1cmVzLmMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIHNyYy9wcmVwX2NpZiBbRkZJX0NMT1NVUkVTXSAoZmZpX3ByZXBfY2xvc3VyZSk6IEltcGxlbWVudCBpbgorCXRlcm1zIG9mIGZmaV9wcmVwX2Nsb3N1cmVfbG9jLgorCSogc3JjL3Jhd19hcGkuYyAoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQgYWRqdXN0ZWQKKwlmcm9tLi4uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuICBSZS1pbXBsZW1lbnQgaW4gdGVybXMgb2YgdGhlCisJcmVuYW1lZCB2ZXJzaW9uLgorCSogc3JjL2phdmFfcmF3X2FwaSAoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZAorCWFkanVzdGVkIGZyb20uLi4KKwkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSk6IC4uLiB0aGlzLiAgUmUtaW1wbGVtZW50IGluIHRlcm1zIG9mCisJdGhlIHJlbmFtZWQgdmVyc2lvbi4KKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGZyb20KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9jcmlzL2ZmaS5jOiBMaWtld2lzZS4gIEFkanVzdC4KKwkqIHNyYy9mcnYvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL21pcHMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKwkqIHNyYy9zMzkwL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc2g2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmk2NC5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogQWRqdXN0LgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhZGp1c3RlZCBmcm9tLi4uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGZyb20KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCShmbHVzaF9pY2FjaGUpOiBBZGp1c3QuCisKKzIwMDctMDMtMDcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBzcmMvZGxtYWxsb2MuYzogTmV3IGZpbGUsIGltcG9ydGVkIHZlcnNpb24gMi44LjMgb2YgRG91ZworCUxlYSdzIG1hbGxvYy4KKworMjAwNy0wMy0wMSAgQnJvb2tzIE1vc2VzICA8YnJvb2tzLm1vc2VzQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgZHVtbXkgaW5zdGFsbC1wZGYgdGFyZ2V0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUKKworMjAwNy0wMi0xMyAgQW5kcmVhcyBLcmViYmVsICA8a3JlYmJlbDFAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGZmaV9wcmVwX2NpZl9tYWNoZGVwLAorCWZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogQWRkIGxvbmcgZG91YmxlIGhhbmRsaW5nLgorCisyMDA3LTAyLTAyICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogTW92ZSByZXN0b3JlIG9mIHIyCisJaW1tZWRpYXRlbHkgYWZ0ZXIgYmN0cmwgaW5zdHJ1Y3Rpb24uCisKKzIwMDctMDEtMTggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoYWxsLXJlY3Vyc2l2ZSwgaW5zdGFsbC1yZWN1cnNpdmUsCisJbW9zdGx5Y2xlYW4tcmVjdXJzaXZlLCBjbGVhbi1yZWN1cnNpdmUsIGRpc3RjbGVhbi1yZWN1cnNpdmUsCisJbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUpOiBBZGQgbWlzc2luZyB0YXJnZXRzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDYtMTItMTQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFRBUkdFVCBmb3IgeDg2XzY0LSotZGFyd2luKi4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgcnVsZXMgZm9yIDY0LWJpdCBzb3VyY2VzCisJZm9yIFg4Nl9EQVJXSU4uCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBTZXQgdHJhbXBvbGluZSBzaXplIGZvciB4ODZfNjQtKi1kYXJ3aW4qLgorCSogc3JjL3g4Ni9kYXJ3aW42NC5TOiBOZXcgZmlsZSBmb3IgeDg2XzY0LSotZGFyd2luKiBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2M6IE5ldyB0ZXN0IGNhc2UgZm9yCisJZmZpX2NhbGwgb25seS4KKworMjAwNi0xMi0xMyAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlIHdpdGggYWNsb2NhbCAtSSAuLiBhcyB3cml0dGVuIGluIHRoZQorCU1ha2VmaWxlLmFtLgorCisyMDA2LTEwLTMxICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChkYXJ3aW5fYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyk6IE5ldy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDYWxsIGRhcndpbl9hZGp1c3RfYWdncmVnYXRlX3NpemVzIGZvcgorCURhcndpbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBSZW1vdmUgRGFyd2luIFhGQUlMLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IFJlbW92ZSBEYXJ3aW4gWEZBSUwuCisKKzIwMDYtMTAtMTAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisJICAgIFNhbmRybyBUb2xhaW5pICA8dG9sYWluaUBsaWJlcm8uaXQ+CisKKwkqIGNvbmZpZ3VyZS5hYyBbaSo4Ni0qLWRhcndpbipdOiBTZXQgWDg2X0RBUldJTiBzeW1ib2wgYW5kCisJY29uZGl0aW9uYWwuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUykgW1g4Nl9EQVJXSU5dOiBOZXcgY2FzZS4KKwkoRVhUUkFfRElTVCk6IEFkZCBzcmMveDg2L2Rhcndpbi5TLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCkgW1g4Nl9EQVJXSU5dOiBUcmVhdCBsaWtlCisJWDg2X1dJTjMyLCBhbmQgYWRkaXRpb25hbGx5IGFsaWduIHN0YWNrIHRvIDE2IGJ5dGVzLgorCSogc3JjL3g4Ni9kYXJ3aW4uUzogTmV3LCBiYXNlZCBvbiBzeXN2LlMuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKSBbWDg2X0RBUldJTl06IEFsaWduID4gOC1ieXRlIHN0cnVjdHMuCisKKzIwMDYtMDktMTIgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwlQUiBsaWJmZmkvMjM5MzUKKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IEluc3RhbGwgYm90aCBmZmkuaCBhbmQgZmZpdGFyZ2V0LmggaW4KKwkkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X2FsaWFzKS8kKGdjY192ZXJzaW9uKS9pbmNsdWRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQgZm9yIGF1dG9tYWtlIDEuOS42LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisyMDA2LTA4LTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChzdHJ1Y3QpOiBSZXZlcnQgYWNjaWRlbnRhbCBjb21taXQuCisKKzIwMDYtMDgtMTUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBMaWtld2lzZS4KKworMjAwNi0wNy0yNSAgVG9yc3RlbiBTY2hvZW5mZWxkICA8a2FmZmVldGlzY2hAZ214LmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfdHlwZV91bG9uZywgZmZpX3R5cGVfc2xvbmcpOiBEZWZpbmUgY29ycmVjdGx5CisJZm9yIDMyLWJpdCBhcmNoaXRlY3R1cmVzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jOiBOZXcgdGVzdCBjYXNlLgorCisyMDA2LTA3LTE5ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzLAorCXhmYWlsIHJlbWFpbnMgZm9yIG1pcHM2NC4KKworMjAwNi0wNS0yMyAgQ2FybG9zIE8nRG9uZWxsICA8Y2FybG9zQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgaW5zdGFsbC1odG1sIHRhcmdldC4gQWRkIGluc3RhbGwtaHRtbCB0byAuUEhPTlkKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDYtMDUtMTggIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHBhL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3BhMzIpOiBMb2FkIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyBmcm9tCisJc3RhY2sgc2xvdC4KKworMjAwNi0wNC0yMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBSRUFETUU6IFJlbW92ZSBub3RpY2UgYWJvdXQgJ0NyYXp5IENvbW1lbnRzJy4KKwkqIHNyYy9kZWJ1Zy5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLiBDbGVhbnVwIHdoaXRlIHNwYWNlcy4KKwkqIHNyYy9qYXZhX3Jhd19hcGkuYzogTGlrZXdpc2UuCisJKiBzcmMvcHJlcF9jaWYuYzogTGlrZXdpc2UuCisJKiBzcmMvcmF3X2FwaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9mZml0ZXN0LmM6IERlbGV0ZS4gTm8gbG9uZ2VyIG5lZWRlZCwgYWxsIHRlc3QgY2FzZXMgbWlncmF0ZWQKKwl0byB0aGUgdGVzdHN1aXRlLgorCSogc3JjL2FybS9mZmkuYzogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wYS9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KKworMjAwNi0wNC0xMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcGEvaHB1eDMyLlM6IENvcnJlY3QgdW53aW5kIG9mZnNldCBjYWxjdWxhdGlvbiBmb3IKKwlmZmlfY2xvc3VyZV9wYTMyLgorCSogc3JjL3BhL2xpbnV4LlM6IExpa2V3aXNlLgorCisyMDA2LTA0LTEyICBKYW1lcyBFIFdpbHNvbiAgPHdpbHNvbkBzcGVjaWZpeC5jb20+CisKKwlQUiBsaWJnY2ovMjY0ODMKKwkqIHNyYy9pYTY0L2ZmaS5jIChzdGZfc3BpbGwsIGxkZl9maWxsKTogUmV3cml0ZSBhcyBtYWNyb3MuCisJKGhmYV90eXBlX2xvYWQpOiBDYWxsIHN0Zl9zcGlsbC4KKwkoaGZhX3R5cGVfc3RvcmUpOiBDYWxsIGxkZl9maWxsLgorCShmZmlfY2FsbCk6IEFkanVzdCBjYWxscyB0byBhYm92ZSByb3V0aW5lcy4gIEFkZCBsb2NhbCB0ZW1wcyBmb3IKKwltYWNybyByZXN1bHQuCisKKzIwMDYtMDQtMTAgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogUmVjb2duaXplIG11bHRpbGliCisJZGlyZWN0b3J5IG5hbWVzIGNvbnRhaW5pbmcgdW5kZXJzY29yZXMuCisKKzIwMDYtMDQtMDcgIEphbWVzIEUgV2lsc29uICA8d2lsc29uQHNwZWNpZml4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jOiBOZXcgdGVzdGNhc2UuCisKKzIwMDYtMDQtMDUgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisJICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW06IEFkZCBQQV9IUFVYIHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFBBX0hQVVggcnVsZXMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBzcmMvcGEvZmZpdGFyZ2V0Lmg6IFJlbmFtZSBsaW51eCB0YXJnZXQgdG8gUEFfTElOVVguCisJQWRkIFBBX0hQVVggYW5kIFBBNjRfSFBVWC4KKwlSZW5hbWUgRkZJX0xJTlVYIEFCSSB0byBGRklfUEEzMiBBQkkuCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgZm9yIDMyLWJpdCBIUC1VWCB0YXJnZXRzLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QyKTogRGVmaW5lLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0KTogTGlrZXdpc2UuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDgpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUMyk6IFJlZGVmaW5lLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q1KTogTGlrZXdpc2UuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDYpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUNyk6IExpa2V3aXNlLgorCSogc3JjL3BhL2ZmaS5jIChST1VORF9ET1dOKTogRGVsZXRlLgorCShmbGR3LCBmc3R3LCBmbGRkLCBmc3RkKTogVXNlICdfX2FzbV9fJy4KKwkoZmZpX3N0cnVjdF90eXBlKTogQWRkIHN1cHBvcnQgZm9yIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIsCisJRkZJX1RZUEVfU01BTExfU1RSVUNUNCBhbmQgRkZJX1RZUEVfU01BTExfU1RSVUNUOC4KKwkoZmZpX3ByZXBfYXJnc19MSU5VWCk6IFJlbmFtZSB0byBmZmlfcHJlcF9hcmdzX3BhMzIuIFVwZGF0ZSBjb21tZW50LgorCVNpbXBsaWZ5IGluY3JlbWVudGluZyBvZiBzdGFjayBzbG90IHZhcmlhYmxlLiBDaGFuZ2UgdHlwZSBvZiBsb2NhbAorCSduJyB0byB1bnNpZ25lZCBpbnQuCisJKGZmaV9zaXplX3N0YWNrX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9zaXplX3N0YWNrX3BhMzIuIEhhbmRsZSBsb25nCisJZG91YmxlIG9uIFBBX0hQVVguCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKGZmaV9jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2lubmVyX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX2lubmVyX3BhMzIuIENoYW5nZQorCXJldHVybiB0eXBlIHRvIGZmaV9zdGF0dXMuIFNpbXBsaWZ5IGluY3JlbWVudGluZyBvZiBzdGFjayBzbG90CisJdmFyaWFibGUuIE9ubHkgY29weSBmbG9hdGluZyBwb2ludCBhcmd1bWVudCByZWdpc3RlcnMgd2hlbiBQQV9MSU5VWAorCWlzIHRydWUuIFJlZm9ybWF0IGRlYnVnIHN0YXRlbWVudC4KKwlBZGQgc3VwcG9ydCBmb3IgRkZJX1RZUEVfU01BTExfU1RSVUNUMiwgRkZJX1RZUEVfU01BTExfU1RSVUNUNCBhbmQKKwlGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4LgorCShmZmlfY2xvc3VyZV9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2xvc3VyZV9wYTMyLiBBZGQgJ2V4dGVybicgdG8KKwlkZWNsYXJhdGlvbi4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IE1ha2UgbGludXggdHJhbXBvbGluZSBjb25kaXRpb25hbCBvbiBQQV9MSU5VWC4KKwlBZGQgbm9wcyB0byBjYWNoZSBmbHVzaC4gIEFkZCB0cmFtcG9saW5lIGZvciBQQV9IUFVYLgorCSogc3JjL3BhL2hwdXgzMi5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wYS9saW51eC5TIChmZmlfY2FsbF9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2FsbF9wYTMyLiBSZW5hbWUKKwlmZmlfcHJlcF9hcmdzX0xJTlVYIHRvIGZmaV9wcmVwX2FyZ3NfcGEzMi4KKwlMb2NhbGl6ZSBsYWJlbHMuIEFkZCBzdXBwb3J0IGZvciAyLCA0IGFuZCA4LWJ5dGUgc21hbGwgc3RydWN0cy4gSGFuZGxlCisJdW5hbGlnbmVkIGRlc3RpbmF0aW9ucyBpbiAzLCA1LCA2IGFuZCA3LWJ5dGUgc21hbGwgc3RydWN0cy4gT3JkZXIKKwlhcmd1bWVudCB0eXBlIGNoZWNrcyBzbyB0aGF0IGNvbW1vbiBhcmd1bWVudCB0eXBlcyBhcHBlYXIgZmlyc3QuCisJKGZmaV9jbG9zdXJlX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX3BhMzIuIFJlbmFtZQorCWZmaV9jbG9zdXJlX2lubmVyX0xJTlVYIHRvIGZmaV9jbG9zdXJlX2lubmVyX3BhMzIuCisKKzIwMDYtMDMtMjQgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChlbnVtIGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYLiAgRGVmYXVsdAorCWZvciAzMi1iaXQgdXNpbmcgSUJNIGV4dGVuZGVkIGRvdWJsZSBmb3JtYXQuICBGaXggRkZJX0xBU1RfQUJJLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEhhbmRsZSBsaW51eCB2YXJpYW50IG9mCisJRkZJX1RZUEVfTE9OR0RPVUJMRS4KKwkoZmZpX3ByZXBfYXJnczY0KTogQXNzZXJ0IHVzaW5nIElCTSBleHRlbmRlZCBkb3VibGUuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRG9uJ3QgbXVuZ2UgRkZJX1RZUEVfTE9OR0RPVUJMRSB0eXBlLgorCUhhbmRsZSBGRklfTElOVVggRkZJX1RZUEVfTE9OR0RPVUJMRSByZXR1cm4gYW5kIGFyZ3MuCisJKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9MSU5VWC4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBOb24gRkZJX0xJTlVYIGxvbmcgZG91YmxlIHJldHVybiBuZWVkcworCWdwcjMgcmV0dXJuIHBvaW50ZXIgYXMgZm9yIHN0cnVjdCByZXR1cm4uICBIYW5kbGUgRkZJX0xJTlVYCisJRkZJX1RZUEVfTE9OR0RPVUJMRSByZXR1cm4gYW5kIGFyZ3MuICBEb24ndCBpbmNyZW1lbnQgIm5mIgorCXVubmVjZXNzYXJpbHkuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogTG9hZCBib3RoIGYxIGFuZCBmMgorCWZvciBGRklfVFlQRV9MT05HRE9VQkxFLiAgTW92ZSBlcGlsb2d1ZSBpbnNucyBpbnRvIGNhc2UgdGFibGUuCisJRG9uJ3QgdXNlIHI2IGFzIHBvaW50ZXIgdG8gcmVzdWx0cywgaW5zdGVhZCB1c2Ugc3Agb2Zmc2V0LiAgRG9uJ3QKKwltYWtlIGEgc3BlY2lhbCBjYWxsIHRvIGxvYWQgbHIgd2l0aCBjYXNlIHRhYmxlIGFkZHJlc3MsIGluc3RlYWQKKwl1c2Ugb2Zmc2V0IGZyb20gcHJldmlvdXMgY2FsbC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFNhdmUgbG9uZyBkb3VibGUgcmV0dXJuLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2ltcGxpZnkgbG9uZyBkb3VibGUKKwlyZXR1cm4uCisKKzIwMDYtMDMtMTUgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2g2NC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgZmxvYXQgYXJndW1lbnRzCisJcGFzc2VkIHdpdGggRlAgcmVnaXN0ZXJzIGNvcnJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDYtMDMtMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgKGNsb3N1cmVfdGVzdF9mbik6IE1hcmsgY2lmLAorCWFyZ3MgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkoY2xvc3VyZV90ZXN0X2ZuMSk6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKG1haW4pOiBSZW1vdmUgdW51c2VkIHJlcy4KKworMjAwNi0wMi0yOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IEFkanVzdCBGU0YgYWRkcmVzcy4gQWRkIHRlc3QgcnVucyBmb3IKKwktTzIsIC1PMywgLU9zIGFuZCB0aGUgd2FybmluZyBmbGFncyAtVyAtV2FsbC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgYW4gX19VTlVTRURfXyBtYWNybyB0byBtYXJrCisJdW51c2VkIHBhcmFtZXRlciB1bnVzZWQgZm9yIGdjYyBvciBlbHNlIGRvIG5vdGhpbmcuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgKGNsc19zdHJ1Y3RfMTJieXRlX2duKTogTWFyayBjaWYKKwlhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyAoY2xzX3N0cnVjdF8xNmJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMgKGNsc19zdHJ1Y3RfMThieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jIChjbHNfc3RydWN0XzE5Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMgKGNsc19zdHJ1Y3RfMV8xYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyAoY2xzX3N0cnVjdF8yMGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIChjbHNfc3RydWN0XzIwYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyAoY2xzX3N0cnVjdF8yNGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyAoY2xzX3N0cnVjdF8yYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMgKGNsc19zdHJ1Y3RfM18xYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyAoY2xzX3N0cnVjdF8zYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYyAoY2xzX3N0cnVjdF8zYnl0ZV9nbjEpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jIChjbHNfc3RydWN0XzRfMWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYyAoY2xzX3N0cnVjdF80Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jIChjbHNfc3RydWN0XzVieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMgKGNsc19zdHJ1Y3RfNWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgKGNsc19zdHJ1Y3RfNjRieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfNmJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYyAoY2xzX3N0cnVjdF82Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIChjbHNfc3RydWN0XzdieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMgKGNsc19zdHJ1Y3RfN2J5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyAoY2xzX3N0cnVjdF84Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYyAoY2xzX3N0cnVjdF85Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyAoY2xzX3N0cnVjdF85Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZm4pOiBDYXN0CisJdm9pZCogdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZy4KKwkobWFpbik6IExpa2V3aXNlLgorCShjbHNfc3RydWN0X2FsaWduX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jIChjbHNfcmV0X2RvdWJsZV9mbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jIChjbHNfcmV0X2Zsb2F0X2ZuKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZgorCWFuZCBkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZgorCWFuZCBkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMgKGNsc19yZXRfc2NoYXJfZm4pOiBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfc2NoYXJfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyAoY2xzX3JldF9zaW50X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3NpbnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIChjbHNfcmV0X3NzaG9ydF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF9zc2hvcnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMgKGNsc19yZXRfdWNoYXJfZm4pOiAgTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3VjaGFyX2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKGNsc19yZXRfdWludF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF91aW50X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYyAoY2xzX3JldF91bG9uZ2xvbmdfZm4pOiBNYXJrIGNpZgorCWFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jIChjbHNfcmV0X3VzaG9ydF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF91c2hvcnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYyAoZmxvYXRpbmcpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jIChtYWluKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpLgorCUNsZWFudXAgd2hpdGUgc3BhY2VzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jIChjaGVja2luZyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgKGNsc19zdHJ1Y3RfY29tYmluZWRfZ24pOiBNYXJrCisJY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyAoY2xzX3N0cnVjdF9jb21iaW5lZF9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgKEJfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIChCX2ZuKTogQWRqdXN0IHByaW50ZgorCWZvcm1hdHRlcnMgdG8gc2lsZW5jZSBnY2MuCisJKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKKwl1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTWVudGlvbiByZWxhdGVkIFBSLgorCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IE1lbnRpb24gcmVsYXRlZCBQUi4KKwkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQorCXVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jIChCX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyAoQl9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMgKHN0dWIpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyAobWFpbik6IENhc3QgdGhlIHJlc3VsdCB0byBzaWxlbmNlCisJZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogQWRkIHRoZSBub3RlIG1lbnRpb25lZAorCWluIHRoZSBsYXN0IGNvbW1pdCBmb3IgdGhpcyB0ZXN0IGNhc2UgaW4gdGhlIHRlc3QgY2FzZSBpdHNlbGYuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IE1hcmsgY2lmIGFzCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgKGNsb3N1cmVfdGVzdF9mbjEpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jIChjbG9zdXJlX3Rlc3RfZm4yKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyAoY2xvc3VyZV90ZXN0X2ZuMyk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgKGNsb3N1cmVfdGVzdF9mbjApOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIChjbG9zdXJlX3Rlc3RfZm41KTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IExpa2V3aXNlLgorCisyMDA2LTAyLTIyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogRml4IHJlZ2lzdGVyIG51bWJlcnMgaW4gdGhlIEZERSBmb3IKKwlmZmlfY2xvc3VyZV9TWVNWLgorCisyMDA2LTAyLTIwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IFJlbW92ZSBzdGF0aWMKKwlkZWNsYXJhdGlvbiB0byBhdm9pZCBhIGZhbHNlIG5lZ2F0aXZlIG9uIGl4ODYuIFNlZSBQUjMyMy4KKworMjAwNi0wMi0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisJYW5kIGNhc3QgaW50ZWdlciB0byB2b2lkICogaWYgbmVlZGVkLiAgVXBkYXRlIHRoZSBwb2ludGVyIHRvCisJdGhlIEZQIHJlZ2lzdGVyIHNhdmVkIGFyZWEgY29ycmVjdGx5LgorCisyMDA2LTAyLTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBYRkFJTCB0aGlzIHRlc3QgdW50aWwgUFIyNTYzMAorCWlzIGZpeGVkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorCisyMDA2LTAyLTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsLmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogUmVtb3ZlIGZmaV90eXBlX215bG9uZworCWRlZmluaXRpb24uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgZmZpX3R5cGVfbXlsb25nIGRlZmluaXRpb24KKwloZXJlIHRvIGJlIHVzZWQgYnkgb3RoZXIgdGVzdCBjYXNlcyB0b28uCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBMaWtld2lzZS4KKworMjAwNi0wMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuYWM6IEVuYWJsZSBsaWJmZmkgZm9yIHNwYXJjNjQtKi1mcmVlYnNkKi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwNi0wMS0xOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoc21zdF90d29fcmVnaXN0ZXIpOiBEb24ndCBjYWxsIF9fYXNobGRpMywKKwlpbnN0ZWFkIGRvIHRoZSBzaGlmdGluZyBpbmxpbmUuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogRG9uJ3QgY29tcHV0ZSAlcjUKKwlzaGlmdCBjb3VudCB1bmNvbmRpdGlvbmFsbHkuICBTaW1wbGlmeSBsb2FkIHNlcXVlbmNlcyBmb3IgMSwgMiwgMywgNAorCWFuZCA4IGJ5dGUgc3RydWN0cywgZm9yIHRoZSByZW1haW5pbmcgc3RydWN0IHNpemVzIGRvbid0IGNhbGwKKwlfX2xzaHJkaTMsIGluc3RlYWQgZG8gdGhlIHNoaWZ0aW5nIGlubGluZS4KKworMjAwNS0xMi0wNyAgVGhpZW1vIFNldWZlciAgPHRoc0BuZXR3b3Jrbm8uZGU+CisKKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBSZW1vdmUgb2Jzb2xldGUgc2dpZGVmcy5oIGluY2x1ZGUuIEFkZAorCW1pc3NpbmcgcGFyZW50aGVzZXMuCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyKTogQ29kZSBmb3JtYXR0aW5nLiBEZWZpbmUKKwlhbmQgdXNlIEEzX09GRiwgRlBfT0ZGLCBSQV9PRkYuIE1pY3JvLW9wdGltaXphdGlvbnMuCisJKGZmaV9jbG9zdXJlX08zMik6IExpa2V3aXNlLCBidXQgd2l0aCBuZXdseSBkZWZpbmVkIEEzX09GRjIsCisJQTJfT0ZGMiwgQTFfT0ZGMiwgQTBfT0ZGMiwgUkFfT0ZGMiwgRlBfT0ZGMiwgUzBfT0ZGMiwgR1BfT0ZGMiwKKwlWMV9PRkYyLCBWMF9PRkYyLCBGQV8xXzFfT0ZGMiwgRkFfMV8wX09GRjIsIEZBXzBfMV9PRkYyLAorCUZBXzBfMF9PRkYyLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBDb2RlIGZvcm1hdHRpbmcuIEZpeAorCWVuZGlhbm5lc3MgYnVncy4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IEltcHJvdmUgdHJhbXBvbGluZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEZpeCBlbmRpYW5uZXNzIGJ1Z3MuCisKKzIwMDUtMTItMDMgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBGb3JtYXR0aW5nLgorCShmZmlfcHJlcF9hcmdzX1NZU1YpOiBBdm9pZCBwb3NzaWJsZSBhbGlhc2luZyBwcm9ibGVtcyBieSB1c2luZyB1bmlvbnMuCisJKGZmaV9wcmVwX2FyZ3M2NCk6IExpa2V3aXNlLgorCisyMDA1LTA5LTMwICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBGb3IKKwlkYXJ3aW4sIHVzZSAtc2hhcmVkLWxpYmdjYyBub3QgLWxnY2NfcywgYW5kIGV4cGxhaW4gd2h5LgorCisyMDA1LTA5LTI2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYyAodmFsdWVfdHlwZSk6IE5ldyB0eXBlZGVmLgorCShDQU5BUlkpOiBOZXcgZGVmaW5lLgorCShtYWluKTogQ2hlY2sgZm9yIHJlc3VsdCBidWZmZXIgb3ZlcmZsb3cuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IEhhbmRsZSBsaW51eDY0IGxvbmcgZG91YmxlIHJldHVybnMuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoRkxBR19SRVRVUk5TXzEyOEJJVFMpOiBOZXcgY29uc3RhbnQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGxpbnV4NjQgbG9uZyBkb3VibGUgcmV0dXJucy4KKworMjAwNS0wOC0yNSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCVBSIHRhcmdldC8yMzQwNAorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IENvcnJlY3QgcGxhY2VtZW50IG9mIHN0YWNrCisJaG9tZWQgZnAgYXJncy4KKwkoZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENvcnJlY3Qgc3RhY2sgc2l6aW5nIGZvciBzYW1lLgorCisyMDA1LTA4LTExICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjIChIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURSk6IE5ldyB0ZXN0LgorCShBSF9CT1RUT00pOiBBZGQgRkZJX0hJRERFTiBkZWZpbml0aW9uLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoaGlkZGVuKTogUmVtb3ZlLgorCShmZmlfY2xvc3VyZV9MSU5VWDY0LCBmZmlfcHJlcF9hcmdzNjQsIGZmaV9jYWxsX0xJTlVYNjQsCisJZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBVc2UgRkZJX0hJRERFTiBpbnN0ZWFkIG9mIGhpZGRlbi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0LAorCS5mZmlfY2xvc3VyZV9MSU5VWDY0KTogVXNlIEZGSV9ISURERU4gaW5zdGVhZCBvZiAuaGlkZGVuLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBSZW1vdmUsCisJYWRkIEZGSV9ISURERU4gdG8gaXRzIHByb3RvdHlwZS4KKwkoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IE5ldy4KKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE5ldy4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBOZXcuCisKKzIwMDUtMDgtMTAgIEFsZnJlZCBNLiBTem1pZHQgIDxhbXNAZ251Lm9yZz4KKworCVBSIGxpYmZmaS8yMTgxOToKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogSGFuZGxlIGkqODYtKi1nbnUqLgorCisyMDA1LTA4LTA5ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZQorCURXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2YgcmF0aGVyIHRoYW4KKwlEV19DRkFfR05VX25lZ2F0aXZlX29mZnNldF9leHRlbmRlZC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlLgorCisyMDA1LTA3LTIyICBTVUdJT0tBIFRvc2hpbm9idSAgPHN1Z2lva2FAaXRvbmV0LmNvLmpwPgorCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogU3RvcCBhcmd1bWVudCBwb3BwaW5nIGNvcnJlY3RseQorCW9uIHNoMy4KKwkoZmZpX2Nsb3N1cmVfU1lTVik6IENoYW5nZSB0aGUgc3RhY2sgbGF5b3V0IGZvciBzaDMgc3RydWN0IGFyZ3VtZW50LgorCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IHNoMyBhcmd1bWVudCBjb3B5LCB3aGVuIGl0IGlzCisJcGFydGlhbGx5IG9uIHJlZ2lzdGVyLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERvbid0IHNldCB0b28gbWFueSBjaWYtPmZsYWdzLgorCisyMDA1LTA3LTIwICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfY2FsbCk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGNvcnJlY3RseS4KKwlSZW1vdmUgZW1wdHkgbGluZS4KKwkqIHNyYy9zaDY0L2ZmaS5jIChzaW1wbGVfdHlwZSk6IFJlbW92ZS4KKwkocmV0dXJuX3R5cGUpOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBjb3JyZWN0bHkuCisJKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KKwkoZmZpX2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IEhhbmRsZSAxLCAyIGFuZCA0LWJ5dGUgcmV0dXJuLgorCUVtaXQgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBpZiBQSUMgYW5kIHJlbW92ZSB3cm9uZyBkYXRhbGFiZWwKKwlwcmVmaXhlcyBmcm9tIEVIIGRhdGEuCisKKzIwMDUtMDctMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBQT1dFUlBDX0ZSRUVCU0QuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFBPV0VSUENfRlJFRUJTRCBydWxlcy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBBZGQgUE9XRVJQQ19GUkVFQlNEIHJ1bGVzLgorCShGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCk6IERlZmluZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgZmxhZ3MgdG8gaGFuZGxlIHNtYWxsIHN0cnVjdHVyZSByZXR1cm5zCisJaW4gZmZpX2NhbGxfU1lTVi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBmb3IgU1lTViA0IEFCSS4KKwlBa2EgRkZJX1NZU1YuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBBZGQgcmV0dXJuIHR5cGVzIGZvciBzbWFsbCBzdHJ1Y3R1cmVzLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgYml0cyB0byBoYW5kbGUgc21hbGwgc3RydWN0dXJlcyBmb3IKKwlmaW5hbCBTWVNWIDQgQUJJLgorCisyMDA1LTA3LTEwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYzogTmV3IHRlc3QgZmlsZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmM6IExpa2V3aXNlLgorCisyMDA1LTA3LTA1ICBSYW5kb2xwaCBDaHVuZyAgPHRhdXNxQGRlYmlhbi5vcmc+CisKKwkqIHNyYy9wYS9mZmkuYyAoZmZpX3N0cnVjdF90eXBlKTogUmVuYW1lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEKKwlhcyBGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLiAgQnJlYWsgb3V0IGhhbmRsaW5nIGZvciA1LTcgYnl0ZQorCXN0cnVjdHVyZXMuICBLaWxsIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgorCShmZmlfY2xvc3VyZV9pbm5lcl9MSU5VWCk6IFByaW50IHJldHVybiB2YWx1ZXMgYXMgaGV4IGluIGRlYnVnCisJbWVzc2FnZS4gIFJlbmFtZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1QxIGFzIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMuCisJUHJvcGVybHkgaGFuZGxlIDUtNyBieXRlIHN0cnVjdHVyZSByZXR1cm5zLgorCSogc3JjL3BhL2ZmaXRhcmdldC5oIChGRklfVFlQRV9TTUFMTF9TVFJVQ1QxKQorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QyKTogUmVtb3ZlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q1KQorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q2LCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q3KTogRGVmaW5lLgorCSogc3JjL3BhL2xpbnV4LlM6IE1hcmsgc291cmNlIGZpbGUgYXMgdXNpbmcgUEExLjEgYXNzZW1ibHkuCisJKGNoZWNrc21zdDEsIGNoZWNrc21zdDIpOiBSZW1vdmUuCisJKGNoZWNrc21zdDMpOiBPcHRpbWl6ZSBoYW5kbGluZyBvZiAzLWJ5dGUgc3RydWN0IHJldHVybnMuCisJKGNoZWNrc21zdDU2Nyk6IFByb3Blcmx5IGhhbmRsZSA1LTcgYnl0ZSBzdHJ1Y3QgcmV0dXJucy4KKworMjAwNS0wNi0xNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJnY2ovMjE5NDMKKwkqIHNyYy9taXBzL24zMi5TOiBFbmZvcmNlIFBJQyBjb2RlLgorCSogc3JjL21pcHMvbzMyLlM6IExpa2V3aXNlLgorCisyMDA1LTA2LTE1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmFjOiBUcmVhdCBpKjg2LSotc29sYXJpczIuMTAgYW5kIHVwIGFzIFg4Nl82NC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wNi0wMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IERvbid0IHVzZSBKVU1QVEFSR0VUCisJdG8gY2FsbCBmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVi4gIEFwcGVuZCBAbG9jYWwgaW5zdGVhZC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlIGZvciBmZmlfcHJlcF9hcmdzX1NZU1YuCisKKzIwMDUtMDUtMTcgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogVXNlIEFDX0NfQklHRU5ESUFOIGluc3RlYWQgb2YgQUNfQ19CSUdFTkRJQU5fQ1JPU1MuCisJVXNlIEFDX0NIRUNLX1NJWkVPRiBpbnN0ZWFkIG9mIEFDX0NPTVBJTEVfQ0hFQ0tfU0laRU9GLgorCSogTWFrZWZpbGUuYW0gKEFDTE9DQUxfQU1GTEFHUyk6IFJlbW92ZSAtSSAuLi9jb25maWcuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluLCBNYWtlZmlsZS5pbiwKKwlpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDUtMDkgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDUtMDggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvMjEyODUKKwkqIHNyYy9hbHBoYS9vc2YuUzogVXBkYXRlIHVud2luZCBpbnRvIHRvIG1hdGNoIGNvZGUuCisKKzIwMDUtMDUtMDQgIEFuZHJlYXMgRGVnZXJ0IDxhZEBwYXB5cnVzLWdtYmguZGU+CisJICAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTYXZlIHNzZS11c2VkIGZsYWcgaW4KKwliaXQgMTEgb2YgZmxhZ3MuCisJKGZmaV9jYWxsKTogTWFzayByZXR1cm4gdHlwZSBmaWVsZC4gIFBhc3Mgc3NlY291bnQgdG8gZmZpX2NhbGxfdW5peDY0LgorCShmZmlfcHJlcF9jbG9zdXJlKTogU2V0IGNhcnJ5IGJpdCBpZiBzc2UtdXNlZCBmbGFnIHNldC4KKwkqIHNyYy94ODYvdW5peDY0LlMgKGZmaV9jYWxsX3VuaXg2NCk6IEFkZCBzc2Vjb3VudCBhcmd1bWVudC4KKwlPbmx5IGxvYWQgc3NlIHJlZ2lzdGVycyBpZiBzc2Vjb3VudCBub24temVyby4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0KTogT25seSBzYXZlIHNzZSByZWdpc3RlcnMgaWYgY2Fycnkgc2V0IG9uIGVudHJ5LgorCisyMDA1LTA0LTI5ICBSYWxmIENvcnNlcGl1cyAgPHJhbGYuY29yc2VwaXVzQHJ0ZW1zLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgaSo4Ni0qLXJ0ZW1zKiwgc3BhcmMqLSotcnRlbXMqLAorCXBvd2VycGMtKnJ0ZW1zKiwgYXJtKi0qLXJ0ZW1zKiwgc2gtKi1ydGVtcyouCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDQtMjAgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1kZy10ZXN0LTEpOiBJbiByZWdzdWIgdXNlLAorCWhhdmUgVGNsOC4zLWNvbXBhdGlibGUgaW50ZXJtZWRpYXRlIHZhcmlhYmxlLgorCisyMDA1LTA0LTE4ICBTaW1vbiBQb3NuamFrIDxzaW1vbi5wb3NuamFrQHNpb2wubmV0PgorCSAgICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBDUklTIHN1cHBvcnQuCisJKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgdGVzdHN1aXRlL01ha2VmaWxlLmluLAorCWluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvY3JpczogTmV3IGRpcmVjdG9yeS4KKwkqIHNyYy9jcmlzL2ZmaS5jLCBzcmMvY3Jpcy9zeXN2LlMsIHNyYy9jcmlzL2ZmaXRhcmdldC5oOiBOZXcgZmlsZXMuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogV3JhcCBpbiAjaWZuZGVmIF9fQ1JJU19fLgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1kZy10ZXN0LTEpOiBSZXBsYWNlIFxuIHdpdGgKKwlccj9cbiBpbiBvdXRwdXQgdGVzdHMuCisKKzIwMDUtMDQtMTIgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDMtMzAgIEhhbnMgQm9laG0gIDxIYW5zLkJvZWhtQGhwLmNvbT4KKworCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKGZmaV9hcmcpOiBVc2UgbG9uZyBsb25nIGluc3RlYWQgb2YgREkuCisKKzIwMDUtMDMtMzAgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorCisJKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoZmZpX2FyZykgQUREIERJIGF0dHJpYnV0ZS4KKwkoZmZpX3NhcmcpIERpdHRvLgorCSogc3JjL2lhNjQvdW5peC5TIChmZmlfY2xvc3VyZV91bml4KTogRXh0ZW5kIGdwCisJdG8gNjQgYml0cyBpbiBJTFAzMiBtb2RlLgorCUxvYWQgNjQgYml0cyBldmVuIGZvciBzaG9ydCBkYXRhLgorCisyMDA1LTAzLTIzICBNaWtlIFN0dW1wICA8bXJzQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IFVwZGF0ZSBmb3IgLW02NCBtdWx0aWxpYi4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDA1LTAzLTIxICBaYWNrIFdlaW5iZXJnICA8emFja0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBjb25maWd1cmUuYWM6IERvIG5vdCBpbnZva2UgVExfQUNfR0NDX1ZFUlNJT04uCisJRG8gbm90IHNldCB0b29sX2luY2x1ZGVfZGlyLgorCSogYWNsb2NhbC5tNCwgY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOgorCVJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBTZXQgZ2NjX3ZlcnNpb24gYW5kIHRvb2xsaWJmZmlkaXIuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA1LTAyLTIyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQnVtcCBhbGlnbm1lbnQgdG8KKwlvZGQtbnVtYmVyZWQgcmVnaXN0ZXIgcGFpcnMgZm9yIDY0LWJpdCBpbnRlZ2VyIHR5cGVzLgorCisyMDA1LTAyLTIzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwlQUiBsaWJmZmkvMjAxMDQKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDUtMDItMTEgIEphbmlzIEpvaG5zb24gIDxqYW5pczE4N0B1cy5pYm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogUmVtb3ZlIGRnLW9wdGlvbnMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0My5jOiBEaXR0by4KKworMjAwNS0wMi0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvZnJ2L2ZmaXRhcmdldC5oOiBSZW1vdmUgUFBDIHN0dWZmIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0byBmcnYuCisKKzIwMDUtMDEtMTIgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cCAoY3h4X29wdGlvbnMpOiBBZGQKKwktc2hhcmVkLWxpYmdjYy4KKworMjAwNC0xMi0zMSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3R5cGVzLmMgKEZGSV9BR0dSRUdBVEVfVFlQRURFRik6IFJlbW92ZS4KKwkoRkZJX1RZUEVERUYpOiBSZW5hbWUgZnJvbSBGRklfSU5URUdSQUxfVFlQRURFRi4gIFJlcGxhY2Ugc2l6ZSBhbmQKKwlvZmZzZXQgcGFyYW1ldGVycyB3aXRoIGEgdHlwZSBwYXJhbWV0ZXI7IGRlZHVjZSBzaXplIGFuZCBzdHJ1Y3R1cmUKKwlhbGlnbm1lbnQuICBVcGRhdGUgYWxsIHVzZXJzLgorCisyMDA0LTEyLTMxICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IERlZmluZSB3aXRoIHNpemVvZi4KKwkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IEZpeCBmb3IgaWE2NC4KKwkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChzdHJ1Y3QgZmZpX2lhNjRfdHJhbXBvbGluZV9zdHJ1Y3QpOiBNb3ZlCisJaW50byBmZmlfcHJlcF9jbG9zdXJlLgorCSogc3JjL2lhNjQvaWE2NF9mbGFncy5oLCBzcmMvaWE2NC9mZmkuYywgc3JjL2lhNjQvdW5peC5TOiBSZXdyaXRlCisJZnJvbSBzY3JhdGNoLgorCisyMDA0LTEyLTI3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L3VuaXg2NC5TOiBGaXggdHlwbyBpbiB1bndpbmQgaW5mby4KKworMjAwNC0xMi0yNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChzdHJ1Y3QgcmVnaXN0ZXJfYXJncyk6IFJlbmFtZSBmcm9tIHN0YWNrTGF5b3V0LgorCShlbnVtIHg4Nl82NF9yZWdfY2xhc3MpOiBBZGQgWDg2XzY0X0NPTVBMRVhfWDg3X0NMQVNTLgorCShtZXJnZV9jbGFzc2VzKTogQ2hlY2sgZm9yIGl0LgorCShTU0VfQ0xBU1NfUCk6IE5ldy4KKwkoY2xhc3NpZnlfYXJndW1lbnQpOiBQYXNzIGJ5dGVfb2Zmc2V0IGJ5IHZhbHVlOyBwZXJmb3JtIGFsbCB1cGRhdGVzCisJaW5zaWRlIHN0cnVjdCBjYXNlLgorCShleGFtaW5lX2FyZ3VtZW50KTogQWRkIGNsYXNzZXMgYXJndW1lbnQ7IGhhbmRsZQorCVg4Nl82NF9DT01QTEVYX1g4N19DTEFTUy4KKwkoZmZpX3ByZXBfYXJncyk6IE1lcmdlIGludG8gLi4uCisJKGZmaV9jYWxsKTogLi4uIGhlcmUuICBTaGFyZSBzdGFjayBmcmFtZSB3aXRoIGZmaV9jYWxsX3VuaXg2NC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTZXR1cCBjaWYtPmZsYWdzIGZvciBwcm9wZXIgc3RydWN0dXJlIHJldHVybi4KKwkoZmZpX2ZpbGxfcmV0dXJuX3ZhbHVlKTogUmVtb3ZlLgorCShmZmlfcHJlcF9jbG9zdXJlKTogUmVtb3ZlIGRlYWQgYXNzZXJ0LgorCShmZmlfY2xvc3VyZV91bml4NjRfaW5uZXIpOiBSZW5hbWUgZnJvbSBmZmlfY2xvc3VyZV9VTklYNjRfaW5uZXIuCisJUmV3cml0ZSB0byB1c2Ugc3RydWN0IHJlZ2lzdGVyX2FyZ3MgaW5zdGVhZCBvZiB2YV9saXN0LiAgQ3JlYXRlCisJZmxhZ3MgZm9yIGhhbmRsaW5nIHN0cnVjdHVyZSByZXR1cm5zLgorCSogc3JjL3g4Ni91bml4NjQuUzogUmVtb3ZlIGRlYWQgc3RyaW5ncy4KKwkoZmZpX2NhbGxfdW5peDY0KTogUmVuYW1lIGZyb20gZmZpX2NhbGxfVU5JWDY0LiAgUmV3cml0ZSB0byBzaGFyZQorCXN0YWNrIGZyYW1lIHdpdGggZmZpX2NhbGwuICBIYW5kbGUgc3RydWN0dXJlIHJldHVybnMgcHJvcGVybHkuCisJKGZsb2F0MnNzZSwgZmxvYXRmbG9hdDJzc2UsIGRvdWJsZTJzc2UpOiBSZW1vdmUuCisJKHNzZTJmbG9hdCwgc3NlMmRvdWJsZSwgc3NlMmZsb2F0ZmxvYXQpOiBSZW1vdmUuCisJKGZmaV9jbG9zdXJlX3VuaXg2NCk6IFJlbmFtZSBmcm9tIGZmaV9jbG9zdXJlX1VOSVg2NC4gIFJld3JpdGUKKwl0byBoYW5kbGUgc3RydWN0dXJlIHJldHVybnMgcHJvcGVybHkuCisKKzIwMDQtMTItMDggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEFNX01BS0VGTEFHUyk6IFJlbW92ZSBkdXBsaWNhdGUgTElCQ0ZMQUdTIGFuZAorCVBJQ0ZMQUcuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKzIwMDQtMTItMDIgIFJpY2hhcmQgU2FuZGlmb3JkICA8cnNhbmRpZm9AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBVc2UgVExfQUNfR0NDX1ZFUlNJT04gdG8gc2V0IGdjY192ZXJzaW9uLgorCSogY29uZmlndXJlLCBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNC0xMS0yOSAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIGNoYW5nZS4KKworMjAwNC0xMS0yNSAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIHJldmVyc2lvbi4KKworMjAwNC0xMS0yNCAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIGNoYW5nZS4KKworMjAwNC0xMS0yMyAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBVc2UgbmV3IHByb2NzIGluIHRhcmdldC1saWJwYXRoLmV4cC4KKworMjAwNC0xMS0yMyAgUmljaGFyZCBTYW5kaWZvcmQgIDxyc2FuZGlmb0ByZWRoYXQuY29tPgorCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyLCBmZmlfY2xvc3VyZV9PMzIpOiBVc2UgamFsciBpbnN0ZWFkCisJb2YgamFsLiAgVXNlIGFuIGFic29sdXRlIGVuY29kaW5nIGZvciB0aGUgZnJhbWUgaW5mb3JtYXRpb24uCisKKzIwMDQtMTEtMjMgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgbm8tZGVwZW5kZW5jaWVzLiAgQWRkIEFDTE9DQUxfQU1GTEFHUy4KKwkqIGFjaW5jbHVkZS5tNDogRGVsZXRlIGxvZ2ljIGZvciBzaW5jbHVkZXMuCisJKiBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGU6IExpa2V3aXNlLgorCisyMDA0LTExLTIyICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBBbGlnbiBkb3VibGVzIGFuZCA2NC1iaXQgaW50ZWdlcnMKKwlvbiBhIDgtYnl0ZSBib3VuZGFyeS4KKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2xvc3VyZV92OCk6IFJlc2VydmUgZnJhbWUgc3BhY2UgZm9yIGFyZ3VtZW50cy4KKworMjAwNC0xMC0yNyAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGZ1bmN0aW9ucyB0aGF0IHJldHVybgorCWxvbmcgbG9uZyB2YWx1ZXMuICBSb3VuZCBzdGFjayBhbGxvY2F0aW9uIHRvIGEgbXVsdGlwbGUgb2YgOCBieXRlcworCWZvciBBVFBDUyBjb21wYXRpYmlsaXR5LgorCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBSZXdvcmsgdG8gYXZvaWQgdXNlIG9mIEFQQ1MgcmVnaXN0ZXIKKwluYW1lcy4gIEhhbmRsZSByZXR1cm5pbmcgbG9uZyBsb25nIHR5cGVzLiAgQWRkIFRodW1iIGFuZCBpbnRlcndvcmtpbmcKKwlzdXBwb3J0LiAgSW1wcm92ZSBzb2Z0LWZsb2F0IGNvZGUuCisKKzIwMDQtMTAtMjcgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kYi5leHAgKGxvYWRfZ2NjX2xpYik6IE5ldyBmdW5jdGlvbi4KKwkobGliZmZpX2V4aXQpOiBOZXcgZnVuY3Rpb24uCisJKGxpYmZmaV9pbml0KTogQnVpbGQgdGhlIHRlc3RnbHVlIHdyYXBwZXIgaWYgbmVlZGVkLgorCisyMDA0LTEwLTI1ICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJUFIgb3RoZXIvMTgxMzgKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWNjZXB0IG1vcmUgdGhhbiBvbmUgbXVsdGlsaWIgbGliZ2NjLgorCisyMDA0LTEwLTI1ICBLYXp1aGlybyBJbmFva2EgPGluYW9rYS5rYXp1aGlyb0ByZW5lc2FzLmNvbT4KKworCSogc3JjL20zMnIvbGliZmZpdGFyZ2V0LmggKEZGSV9DTE9TVVJFUyk6IFNldCB0byAwLgorCisyMDA0LTEwLTIwICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IERvbid0IGFsaWduIGZvciBkb3VibGUgZGF0YS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYzogTmV3IHRlc3QgY2FzZS4KKworMjAwNC0xMC0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IFNldCBUIGJpdCBpbiB0cmFtcG9saW5lIGZvcgorCXRoZSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJ1Y3R1cmUgcG9pbnRlZCB3aXRoIFIyLgorCSogc3JjL3NoL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZSBSMiBhcyB0aGUgcG9pbnRlciB0bworCXRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGlmIFQgYml0IHNldC4gIEVtaXQgcG9zaXRpb24KKwlpbmRlcGVuZGVudCBjb2RlIGFuZCBFSCBkYXRhIGlmIFBJQy4KKworMjAwNC0xMC0xMyAgS2F6dWhpcm8gSW5hb2thICA8aW5hb2thLmthenVoaXJvQHJlbmVzYXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIG0zMnIgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpdWdyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy90eXBlcy5jOiBBZGQgbTMyciBwb3J0IHRvIEZGSV9JTlRFUk5BTF9UWVBFREVGCisJKHVpbnQ2NCwgc2ludDY0LCBkb3VibGUsIGxvbmdkb3VibGUpCisJKiBzcmMvbTMycjogTmV3IGRpcmVjdG9yeS4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9tMzJyL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvbTMyci9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisKKzIwMDQtMTAtMDIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDQtMDktMTQgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIGxpYmdjai8xNzQ2NQorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBEb24ndCB1c2UgZ2xvYmFsIGxkX2xpYnJhcnlfcGF0aC4KKwlTZXQgdXAgTERfTElCUkFSWV9QQVRILCBTSExJQl9QQVRILCBMRF9MSUJSQVJZTjMyX1BBVEgsCisJTERfTElCUkFSWTY0X1BBVEgsIExEX0xJQlJBUllfUEFUSF8zMiwgTERfTElCUkFSWV9QQVRIXzY0IGFuZAorCURZTERfTElCUkFSWV9QQVRILgorCisyMDA0LTA5LTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IFJlbW92ZSB3aGl0ZXNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsLmM6IFJlbW92ZSB1bnVzZWQgdmFyLiBDbGVhbnVwCisJd2hpdGVzcGFjZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBMaWtld2lzZS4KKworMjAwNC0wOS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogRml4IGNvbW1lbnRzIGFuZCBpZGVudGF0aW9uLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDktMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBBZGQgZmxhZyBmb3IgbG9uZ2RvdWJsZSByZXR1cm4gdmFsdWVzLgorCShmZmlfcHJlcF9hcmdzKTogSGFuZGxlIGxvbmdkb3VibGUgYXJndW1lbnRzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNldCBmbGFncyBmb3IgbG9uZ2RvdWJsZS4gQ2FsY3VsYXRlIHNwYWNlIGZvcgorCWxvbmdkb3VibGUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBBZGQgY2xvc3VyZSBoYW5kbGluZyBmb3IgbG9uZ2RvdWJsZS4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfREFSV0lOKTogQWRkIGhhbmRsaW5nIG9mIGxvbmdkb3VibGUKKwl2YWx1ZXMuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TIChfZmZpX2Nsb3N1cmVfQVNNKTogTGlrZXdpc2UuCisJKiBzcmMvdHlwZXMuYzogRGVmaW5lZCBsb25nZG91YmxlIHNpemUgYW5kIGFsaWdubWVudCBmb3IgZGFyd2luLgorCisyMDA0LTA5LTAyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBSZW1vdmUgd2hpdGVzcGFjZXMuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2FzbS5oOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDQtMDgtMzAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIGZydiBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogUmVhZCBjb25maWd1cmUuaG9zdC4KKwkqIGNvbmZpZ3VyZS5pbjogUmVhZCBjb25maWd1cmUuaG9zdC4KKwkqIGNvbmZpZ3VyZS5ob3N0OiBOZXcgZmlsZS4gIGZydi1lbGYgbmVlZHMgbGliZ2xvc3MuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBGb3JjZSBmZmlfY2xvc3VyZSB0byBoYXZlIGEgbmljZSBiaWcgKDgpCisJYWxpZ25tZW50LiAgVGhpcyBpcyBuZWVkZWQgdG8gZnJ2IGFuZCBzaG91bGRuJ3QgaGFybSB0aGUgb3RoZXJzLgorCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKEFMSUdOX0RPV04pOiBOZXcgbWFjcm8uCisJKiBzcmMvZnJ2L2ZmaS5jLCBzcmMvZnJ2L2ZmaXRhcmdldC5oLCBzcmMvZnJ2L2VhYmkuUzogTmV3IGZpbGVzLgorCisyMDA0LTA4LTI0ICBEYXZpZCBEYW5leSAgPGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBYZmFpbCBtaXBzNjQqIGluc3RlYWQgb2YgbWlwcyouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAgTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZSBhbmQgc2V0IHJldHVybiB2YWx1ZQorCXRvIHplcm8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisKKzIwMDQtMDgtMjMgIERhdmlkIERhbmV5IDxkYW5leUBhdnRyZXguY29tPgorCisJUFIgbGliZ2NqLzEzMTQxCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX08zMl9TT0ZUX0ZMT0FUKTogTmV3IEFCSS4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IGFsaWdubWVudCBjYWxjdWxhdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIGZsb2F0aW5nIHBvaW50CisJcGFyYW1ldGVycyBhbmQgcmV0dXJuIHR5cGVzLgorCShmZmlfY2FsbCk6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgQUJJLgorCShmZmlfcHJlcF9jbG9zdXJlKTogRGl0dG8uCisJKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBBQkksIGZpeAorCWFsaWdubWVudCBjYWxjdWxhdGlvbnMuCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2Nsb3N1cmVfTzMyKTogRG9uJ3QgdXNlIGZsb2F0aW5nIHBvaW50CisJaW5zdHJ1Y3Rpb25zIGlmIEZGSV9PMzJfU09GVF9GTE9BVCwgbWFrZSBzdGFjayBmcmFtZSBBQkkgY29tcGxpYW50LgorCisyMDA0LTA4LTE0ICBDYXNleSBNYXJzaGFsbCA8Y3NtQGdudS5vcmc+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlZl9jaWZfbWFjaGRlcCk6IHNldCBgY2lmLT5mbGFncycgdG8KKwljb250YWluIGBGRklfVFlQRV9VSU5UNjQnIGFzIHJldHVybiB0eXBlIGZvciBhbnkgNjQtYml0CisJaW50ZWdlciAoTzMyIEFCSSBvbmx5KS4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IG5ldyBmdW5jdGlvbi4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBuZXcgZnVuY3Rpb24uCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogRGVmaW5lIGBGRklfQ0xPU1VSRVMnIGFuZAorCWBGRklfVFJBTVBPTElORV9TSVpFJyBhcHByb3ByaWF0ZWx5IGlmIHRoZSBBQkkgaXMgbzMyLgorCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jYWxsX08zMik6IGFkZCBsYWJlbHMgZm9yIC5laF9mcmFtZS4gUmV0dXJuCisJNjQgYml0IGludGVnZXJzIGNvcnJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfTzMyKTogbmV3IGZ1bmN0aW9uLgorCUFkZGVkIERXQVJGLTIgdW53aW5kIGluZm8gZm9yIGJvdGggZnVuY3Rpb25zLgorCisyMDA0LTA4LTEwICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9hcmdzICk6IDgtYWxpZ24gYWxsIHN0YWNrIGFyZ3VtZW50cy4KKworMjAwNC0wOC0wMSAgUm9iZXJ0IE1pbGxhbiAgPHJvYmVydG1oQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogRGV0ZWN0IGtuZXRic2QtZ251IGFuZCBrZnJlZWJzZC1nbnUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDctMzAgIE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AbGludXgtbWlwcy5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNCAoQUNfRlVOQ19NTUFQX0JMQUNLTElTVCk6IENoZWNrIGZvciA8c3lzL21tYW4uaD4KKwlhbmQgbW1hcCgpIGV4cGxpY2l0bHkgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHByZXNldCBhdXRvY29uZiBjYWNoZQorCXZhcmlhYmxlcy4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDctMTEgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggQyBhbGlhc2luZyB2aW9sYXRpb24uCisJKGZmaV9jaGVja19mbG9hdF9zdHJ1Y3QpOiBSZW1vdmUgdW51c2VkIHByb3RvdHlwZS4KKworMjAwNC0wNi0zMCAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmx1c2hfaWNhY2hlKTogJzsnIGlzIGEgY29tbWVudAorCWNoYXJhY3RlciBvbiBEYXJ3aW4sIHVzZSAnXG5cdCcgaW5zdGVhZC4KKworMjAwNC0wNi0yNiAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIGxpYnRvb2wtdmVyc2lvbjogRml4IHR5cG8gaW4gcmV2aXNpb24vYWdlLgorCisyMDA0LTA2LTE3ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKworCSogbGlidG9vbC12ZXJzaW9uOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBVc2UgLXZlcnNpb24taW5mbyBmb3Igc29uYW1lLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgdXNlbGVzcyBtdWx0aWxpYiBydWxlcy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZSB3aXRoIGF1dG9tYWtlIDEuOC41LgorCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdXNlbGVzcyBtdWx0aWxpYiBjb25maWd1cnkuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIC5jdnNpZ25vcmU6IE5ldyBmaWxlLgorCisyMDA0LTA2LTEwICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2lhNjQvdW5peC5TIChmZmlfY2FsbF91bml4KTogSW5zZXJ0IGdyb3VwIGJhcnJpZXIgYnJlYWsKKwlmcF9kb25lLgorCShmZmlfY2xvc3VyZV9VTklYKTogRml4IGYxNC9mMTUgYWRqdXN0bWVudCBpZiBGTE9BVF9TWiBpcyBldmVyCisJY2hhbmdlZCBmcm9tIDguCisKKzIwMDQtMDYtMDYgIFNlYW4gTWNOZWlsICA8c2VhbkBtY25laWwuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCB4ODZfNjQtKi1mcmVlYnNkKiBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA0LTI2ICBKb2UgQnVjayA8amJ1Y2tAd2Vsc2gtYnVjay5vcmc+CisKKwlCdWcgMTUwOTMKKwkqIGNvbmZpZ3VyZS5hYzogVGVzdCBmb3IgZXhpc3RlbmNlIG9mIG1tYXAgYW5kIHN5cy9tbWFuLmggYmVmb3JlCisJY2hlY2tpbmcgYmxhY2tsaXN0LiAgRml4IHN1Z2dlc3RlZCBieSBKaW0gV2lsc29uLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA0LTI2ICBNYXR0IEF1c3Rlcm4gIDxhdXN0ZXJuQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEdvIHRocm91Z2ggYSBub24tbGF6eSBwb2ludGVyIGZvciBpbml0aWFsCisJRkRFIGxvY2F0aW9uLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDQtMjQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jIChtYWluKTogRml4IGluaXRpYWxpemF0aW9uCisJZXJyb3IuIFJlcG9ydGVkIGJ5IFRob21hcyBIZWxsZXIgPHRoZWxsZXJAcHl0aG9uLm5ldD4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIChtYWluKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jIChtYWluKTogTGlrZXdpc2UuCisKKzIwMDQtMDMtMjAgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBzcmMvcGEvbGludXguUzogRml4IHR5cG8uCisKKzIwMDQtMDMtMTkgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBNYWtlZmlsZS5hbTogVXBkYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvcGEvZmZpLmguaW46IFJlbW92ZS4KKwkqIHNyYy9wYS9mZml0YXJnZXQuaDogTmV3IGZpbGUuCisKKzIwMDQtMDItMTAgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KKworCSogTWFrZWZpbGUuYW06IEFkZCBQQSBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmFjOiBBZGQgUEEgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogc3JjL3BhL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9wYS9mZmkuaC5pbjogQWRkIFBBIHN1cHBvcnQuCisJKiBzcmMvcGEvbGludXguUzogTmV3IGZpbGUuCisJKiBwcmVwX2NpZi5jOiBBZGQgUEEgc3VwcG9ydC4KKworMjAwNC0wMy0xNiAgSG9zYWthIFl1amkgIDxob3NAdGFtYW5lZ2kub3JnPgorCisJKiBzcmMvdHlwZXMuYzogRml4IGFsaWdubWVudCBzaXplIG9mIFg4Nl9XSU4zMiBjYXNlIGludDY0IGFuZAorCWRvdWJsZS4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZXBsYWNlIGVjaWYtPmNpZi0+cnR5cGUtPnR5cGUKKwl3aXRoIGVjaWYtPmNpZi0+ZmxhZ3MuCisJKGZmaV9jYWxsLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBSZXBsYWNlIGNpZi0+cnR5cGUtPnR5cGUKKwl3aXRoIGNpZi0+ZmxhZ3MuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIFg4Nl9XSU4zMiBzdHJ1Y3QgY2FzZS4KKwkoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCAxIG9yIDItYnl0ZXMgc3RydWN0IGNhc2UgZm9yIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUyAocmV0c3RydWN0MWIsIHJldHN0cnVjdDJiLCBzY19yZXRzdHJ1Y3QxYiwKKwlzY19yZXRzdHJ1Y3QyYik6IEFkZCBmb3IgMSBvciAyLWJ5dGVzIHN0cnVjdCBjYXNlLgorCisyMDA0LTAzLTE1IEtlbGxleSBDb29rIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluOiBSZW5hbWUgZmlsZSB0byAuLi4KKwkqIGNvbmZpZ3VyZS5hYzogLi4uIHRoaXMuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNC0wMy0xMiAgTWF0dCBBdXN0ZXJuICA8YXVzdGVybkBhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggRUggaW5mb3JtYXRpb24gc28gaXQgY29ycmVzcG9uZHMgdG8KKwljaGFuZ2VzIGluIEVIIGZvcm1hdCByZXN1bHRpbmcgZnJvbSBhZGRpdGlvbiBvZiBsaW5rb25jZSBzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDMtMTEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKwkgICAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBTZXQgdGhlbS4KKwlSZW1vdmUgVlBBVEguIFJlbW92ZSBydWxlcyBmb3Igb2JqZWN0IGZpbGVzLiBSZW1vdmUgbXVsdGlsaWIgc3VwcG9ydC4KKwkoQU1fQ0NBU0ZMQUdTKTogQWRkLgorCSogY29uZmlndXJlLmluIChBQ19DT05GSUdfSEVBREVSUyk6IFJlbGFjZSBBTV9DT05GSUdfSEVBREVSLgorCShBQ19QUkVSRVEpOiBCdW1wIHZlcnNpb24gdG8gMi41OS4KKwkoQUNfSU5JVCk6IEZpbGwgd2l0aCB2ZXJzaW9uIGluZm8gYW5kIGJ1ZyBhZGRyZXNzLgorCShPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUmVtb3ZlLgorCShBTV9FTkFCTEVfTVVMVElMSUIpOiBVc2UgdGhpcyBpbnN0ZWFkIG9mIEFDX0FSR19FTkFCTEUuCisJRGUtcHJlY2lvdXMgQ0Mgc28gdGhhdCB0aGUgcmlnaHQgZmxhZ3MgYXJlIHBhc3NlZCBkb3duIHRvIG11bHRpbGlicy4KKwkoQUNfTVNHX0VSUk9SKTogUmVwbGFjZSBvYnNvbGV0ZSBtYWNybyBBQ19FUlJPUi4KKwkoQUNfQ09ORklHX0ZJTEVTKTogUmVwbGFjZSBvYnNvbGV0ZSBtYWNybyBBQ19MSU5LX0ZJTEVTLgorCShBQ19PVVRQVVQpOiBSZW9yZ2FuaXplIHRoZSBvdXRwdXQgd2l0aCBBQ19DT05GSUdfQ09NTUFORFMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBhY2xvY2FsLm00OiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCisyMDA0LTAzLTExICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBzcmMvaWE2NC9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19VTklYKTogR2V0IGZsb2F0aW5nIHBvaW50CisJYXJndW1lbnRzIGZyb20gZnAgcmVnaXN0ZXJzIG9ubHkgZm9yIHRoZSBmaXJzdCA4IHBhcmFtZXRlciBzbG90cy4KKwlEb24ndCBjb252ZXJ0IGEgZmxvYXQgcGFyYW1ldGVyIHdoZW4gcGFzc2VkIGluIG1lbW9yeS4KKworMjAwNC0wMy0wOSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgY29uZmlnL2FjY3Jvc3MubTQgY29ycmVjdGlvbi4KKworMjAwNC0wMi0yNSAgTWF0dCBLcmFhaSAgPGtyYWFpQGFsdW1uaS5jbXUuZWR1PgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQ2hhbmdlCisJZWNpZi0+Y2lmLT5ieXRlcyB0byBieXRlcy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgYnJhY2VzIGFyb3VuZCBuZXN0ZWQgaWYgc3RhdGVtZW50LgorCisyMDA0LTAyLTA5ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAocG9pbnRlcik6IFBPV0VSUEM2NCBoYXMgOCBieXRlIHBvaW50ZXJzLgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQ29ycmVjdCBsb25nIGRvdWJsZSBoYW5kbGluZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBGaXggdHlwby4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBQYXNzIC1tbG9uZy1kb3VibGUtMTI4CisJZm9yIHBvd2VycGM2NC0qLSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgorCisyMDA0LTAyLTA4ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXAgPEZGSV9MSU5VWDY0Pik6IENvcnJlY3QKKwlsb25nIGRvdWJsZSBmdW5jdGlvbiByZXR1cm4gYW5kIGxvbmcgZG91YmxlIGFyZyBoYW5kbGluZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBGb3JtYXR0aW5nLiAgRGVsZXRlIHVudXNlZCAibmciIHZhci4KKwlVc2UgImVuZF9wZnIiIGluc3RlYWQgb2YgIm5mIi4gIENvcnJlY3QgbG9uZyBkb3VibGUgaGFuZGxpbmcuCisJTG9jYWxpc2UgInRlbXAiLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2F2ZSBmMiBsb25nIGRvdWJsZQorCXJldHVybiB2YWx1ZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogQWxsb2NhdGUKKwlzcGFjZSBmb3IgbG9uZyBkb3VibGUgcmV0dXJuIHZhbHVlLiAgQWRqdXN0IHN0YWNrIGZyYW1lIGFuZCBvZmZzZXRzLgorCUxvYWQgZjIgbG9uZyBkb3VibGUgcmV0dXJuLgorCisyMDA0LTAyLTA3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYzogVXNlIDE2IGJ5dGUgbG9uZyBkb3VibGUgZm9yIFBPV0VSUEM2NC4KKworMjAwNC0wMS0yNSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3Y5KTogU2hpZnQgdGhlIHBhcmFtZXRlciBhcnJheQorCXdoZW4gdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBpcyBwYXNzZWQgaW4gJW8wLgorCShmZmlfVjlfcmV0dXJuX3N0cnVjdCk6IFJlbmFtZSBpbnRvIGZmaV92OV9sYXlvdXRfc3RydWN0LgorCShmZmlfdjlfbGF5b3V0X3N0cnVjdCk6IEFsaWduIHRoZSBmaWVsZCBmb2xsb3dpbmcgYSBuZXN0ZWQgc3RydWN0dXJlCisJb24gYSB3b3JkIGJvdW5kYXJ5LiAgVXNlIG1lbW1vdmUgaW5zdGVhZCBvZiBtZW1jcHkuCisJKGZmaV9jYWxsKTogVXBkYXRlIGNhbGwgdG8gZmZpX1Y5X3JldHVybl9zdHJ1Y3QuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBEZWZpbmUgJ2N0eCcgb25seSBmb3IgVjguCisJKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyKTogQ2xvbmUgaW50byBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OAorCWFuZCBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OS4KKwkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjgpOiBSZXR1cm4gbG9uZyBkb3VibGVzIGJ5IHJlZmVyZW5jZS4KKwlBbHdheXMgc2tpcCB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgRm9yIHN0cnVjdHVyZXMgYW5kIGxvbmcKKwlkb3VibGVzLCBjb3B5IHRoZSBhcmd1bWVudCBkaXJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkpOiBTa2lwIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3Mgb25seQorCWlmIHJlcXVpcmVkLiAgU2hpZnQgdGhlIG1heGltdW0gZmxvYXRpbmctcG9pbnQgc2xvdCBhY2NvcmRpbmdseS4gIEZvcgorCWJpZyBzdHJ1Y3R1cmVzLCBjb3B5IHRoZSBhcmd1bWVudCBkaXJlY3RseTsgb3RoZXJ3aXNlLCBsZWZ0LWp1c3RpZnkgdGhlCisJYXJndW1lbnQgYW5kIGNhbGwgZmZpX3Y5X2xheW91dF9zdHJ1Y3QgdG8gbGF5IG91dCB0aGUgc3RydWN0dXJlIG9uCisJdGhlIHN0YWNrLgorCSogc3JjL3NwYXJjL3Y4LlM6IFVuZGVmIFNUQUNLRlJBTUUgYmVmb3JlIGRlZmluaW5nIGl0LgorCShmZmlfY2xvc3VyZV92OCk6IFBhc3MgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gIFVwZGF0ZSBjYWxsIHRvCisJZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjguICBTaG9ydC1jaXJjdWl0IEZGSV9UWVBFX0lOVCBoYW5kbGluZy4KKwlTa2lwIHRoZSAndW5pbXAnIGluc24gd2hlbiByZXR1cm5pbmcgbG9uZyBkb3VibGVzIGFuZCBzdHJ1Y3R1cmVzLgorCSogc3JjL3NwYXJjL3Y5LlM6IFVuZGVmIFNUQUNLRlJBTUUgYmVmb3JlIGRlZmluaW5nIGl0LgorCShmZmlfY2xvc3VyZV92OSk6IEluY3JlYXNlIHRoZSBmcmFtZSBzaXplIGJ5IDIgd29yZHMuICBTaG9ydC1jaXJjdWl0CisJRkZJX1RZUEVfSU5UIGhhbmRsaW5nLiAgTG9hZCBzdHJ1Y3R1cmVzIGJvdGggaW4gaW50ZWdlcnMgYW5kCisJZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHJldHVybi4KKwkqIFJFQURNRTogVXBkYXRlIHN0YXR1cyBvZiB0aGUgU1BBUkMgcG9ydC4KKworMjAwNC0wMS0yNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMgKG1haW4pOiBUcmVhdCByZXN1bHQgdmFsdWUKKwlhcyBvZiB0eXBlIGZmaV9hcmcuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jIChtYWluKTogRml4IENIRUNLLgorCisyMDA0LTAxLTIyICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIChjbHNfcmV0X3VpbnRfZm4pOiBUcmVhdCByZXN1bHQKKwl2YWx1ZSBhcyBvZiB0eXBlIGZmaV9hcmcsIG5vdCB1bnNpZ25lZCBpbnQuCisKKzIwMDQtMDEtMjEgIE1pY2hhZWwgUml0emVydCAgPHJpdHplcnRAdC1vbmxpbmUuZGU+CisKKwkqIGZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MpOiBDYXN0IHRoZSBSSFMgb2YgYW4gYXNzaWdubWVudCBpbnN0ZWFkCisJb2YgdGhlIExIUy4KKworMjAwNC0wMS0xMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFNldCBMRF9MSUJSQVJZX1BBVEhfMzIgZm9yCisJU29sYXJpcy4KKworMjAwNC0wMS0wOCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGFsbG9jYXRlX21tYXApOiBDYXN0IE1BUF9GQUlMRUQKKwl0byB2b2lkICouCisKKzIwMDMtMTItMTAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBDYXN0IHBvaW50ZXJzIHRvCisJc2l6ZV90IGluc3RlYWQgb2YgaW50LgorCisyMDAzLTEyLTA0ICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IEluY2x1ZGUgPGZsb2F0Lmg+LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYyAobWFpbik6IFJlcGxhY2UgdmFyaWFibGUKKwlpbnQgaSB3aXRoIHVuc2lnbmVkIGxvbmcgdWwuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgorCisyMDAzLTEyLTAyICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisKKwlQUiBvdGhlci8xMzIyMQorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKToKKwlBbGlnbiBhcmd1bWVudHMgdG8gMzIgYml0cy4KKworMjAwMy0xMi0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJUFIgb3RoZXIvMTMyMjEKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogQ29zbWV0aWNzLgorCisyMDAzLTExLTI2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEluY2x1ZGUgPGZjbnRsLmg+LgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCisKKzIwMDMtMTEtMjIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IENvbnZlcnQgdGhlIG1tYXAgdG8KKwl0aGUgcmlnaHQgdHlwZS4KKworMjAwMy0xMS0yMSAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGFjaW5jbHVkZS5tNDogQWRkIEFDX0ZVTkNfTU1BUF9CTEFDS0xJU1QuCisJKiBjb25maWd1cmUuaW46IENhbGwgQUNfRlVOQ19NTUFQX0JMQUNLTElTVC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogYWNsb2NhbC5tNDogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBZGQgaW5jbHVkZSBkaXIuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgTU1BUCBkZWZpbml0aW9ucy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFVzZSBNTUFQIGZ1bmN0aW9uYWxpdHkKKwlmb3IgZmZpX2Nsb3N1cmUgaWYgYXZhaWxhYmxlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisKKzIwMDMtMTEtMjAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBNYWtlIHRoZSAtbGdjY19zIGNvbmRpdGlvbmFsLgorCisyMDAzLTExLTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWRkIERZTERfTElCUkFSWV9QQVRIIGZvciBkYXJ3aW4uCisJQWRkIC1sZ2NjX3MgdG8gYWRkaXRpb25hbCBmbGFncy4KKworMjAwMy0xMS0xMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuYW06IFBSIGxpYmdjai8xMTE0NywgaW5zdGFsbAorCXRoZSBmZml0YXJnZXQuaCBoZWFkZXIgZmlsZSBpbiBhIGdjYyB2ZXJzaW9uZWQgYW5kIHRhcmdldAorCWRlcGVuZGVudCBwbGFjZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisJKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCisyMDAzLTExLTA5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBQcmludCByZXN1bHQgYW5kIGNoZWNrCisJd2l0aCBkZy1vdXRwdXQgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTWFrZSBmZmlfY2xvc3VyZQorCXN0YXRpYy4KKworMjAwMy0xMS0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisKKzIwMDMtMTEtMDggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogRG8gYSBjaGVjayBvbiB0aGUgcmVzdWx0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMTEtMDYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IE1vdmUgdGhlIHZhbGlkaXR5IGNoZWNrIGFmdGVyCisJdGhlIGluaXRpYWxpemF0aW9uLgorCisyMDAzLTEwLTIzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogUmVwbGFjZQorCUZGSV9BU1NFUlQoRkFMU0UpIHdpdGggRkZJX0FTU0VSVCgwKS4KKworMjAwMy0xMC0yMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IFJlcGxhY2UgdW5kZWZpbmVkIFVJTlQzMiBhbmQgZnJpZW5kcyB3aXRoCisJX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpIGFuZCBmcmllbmRzLgorCisyMDAzLTEwLTIyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBzcmMvaWE2NC9mZmkuYzogUmVwbGFjZSBGQUxTRS9UUlVFIHdpdGggZmFsc2UvdHJ1ZS4KKworMjAwMy0xMC0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuaW46IEFDX0xJTktfRklMRVMoZmZpdGFyZ2V0LmgpLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCisyMDAzLTEwLTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCSAgICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJQXZvaWQgdGhhdCBmZmkuaCBpbmNsdWRlcyBmZmljb25maWcuaC4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBJbmNsdWRlIGZmaXRhcmdldC5oIGZpbGVzCisJKFRBUkdFVF9TUkNfTUlQU19HQ0MpOiBSZW5hbWVkIHRvIFRBUkdFVF9TUkNfTUlQU19JUklYLgorCShUQVJHRVRfU1JDX01JUFNfU0dJKTogUmVtb3ZlZC4KKwkoTUlQU19HQ0MpOiBSZW5hbWVkIHRvIFRBUkdFVF9TUkNfTUlQU19JUklYLgorCShNSVBTX1NHSSk6IFJlbW92ZWQuCisJKENMRUFORklMRVMpOiBSZW1vdmVkLgorCShtb3N0bHljbGVhbi1hbSwgY2xlYW4tYW0sIG1vc3RseWNsZWFuLXN1YiwgY2xlYW4tc3ViKTogTmV3CisJdGFyZ2V0cy4KKwkqIGFjY29uZmlnLmg6IFJlbW92ZWQuCisJKiBjb25maWd1cmUuaW46IENvbXB1dGUgc2l6ZW9mcyBvbmx5IGZvciBkb3VibGUgYW5kIGxvbmcgZG91YmxlLgorCVVzZSB0aGVtIHRvIGRlZmluZSBhbmQgc3Vic3QgSEFWRV9MT05HX0RPVUJMRS4gIEluY2x1ZGUgY29tbWVudHMKKwlpbnRvIEFDX0RFRklORSBpbnN0ZWFkIG9mIHVzaW5nIGFjY29uZmlnLmguICBDcmVhdGUKKwlpbmNsdWRlL2ZmaXRhcmdldC5oIGluc3RlYWQgb2YgaW5jbHVkZS9mZmljb25maWcuaC4gIFJlbmFtZQorCU1JUFNfR0NDIHRvIE1JUFNfSVJJWCwgZHJvcCBNSVBTX1NHSSBzaW5jZSB3ZSBhcmUgaW4gZ2NjJ3MgdHJlZS4KKwlBQ19ERUZJTkUgRUhfRlJBTUVfRkxBR1MuCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtIChESVNUQ0xFQU5GSUxFUyk6IE5ldyBhdXRvbWFrZSBtYWNyby4KKwkoaGFja19EQVRBKTogQWRkIGZmaXRhcmdldC5oLgorCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlIGFsbCBzeXN0ZW0gc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisJRGVjbGFyZSByYXcgQVBJIGV2ZW4gaWYgaXQgaXMgbm90IGluc3RhbGxlZCwgd2h5IGJvdGhlcj8KKwlVc2UgbGltaXRzLmggaW5zdGVhZCBvZiBTSVpFT0ZfKiB0byBkZWZpbmUgZmZpX3R5cGVfKi4gIERvCisJbm90IGRlZmluZSBFSF9GUkFNRV9GTEFHUywgaXQgaXMgaW4gZmZpY29uZmlnLmggbm93LiAgSW5jbHVkZQorCWZmaXRhcmdldC5oIGluc3RlYWQgb2YgZmZpY29uZmlnLmguICBSZW1vdmUgQUxJR04gbWFjcm8uCisJKFVJTlRfQVJHLCBJTlRfQVJHKTogUmVtb3ZlZCwgdXNlIGZmaV9hcmcgYW5kIGZmaV9zYXJnIGluc3RlYWQuCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoYm9vbCk6IERvIG5vdCBkZWZpbmUuCisJKGZmaV9hc3NlcnQpOiBBY2NlcHQgZmFpbGVkIGFzc2VydGlvbi4KKwkoZmZpX3R5cGVfdGVzdCk6IFJldHVybiB2b2lkIGFuZCBhY2NlcHQgZmlsZS9saW5lLgorCShGRklfQVNTRVJUKTogUGFzcyBzdHJpbmdpemVkIGZhaWxlZCBhc3NlcnRpb24uCisJKEZGSV9BU1NFUlRfQVQpOiBOZXcgbWFjcm8uCisJKEZGSV9BU1NFUlRfVkFMSURfVFlQRSk6IE5ldyBtYWNyby4KKwkoVUlOVDgsIFNJTlQ4LCBVSU5UMTYsIFNJTlQxNiwgVUlOVDMyLCBTSU5UMzIsCisJVUlOVDY0LCBTSU5UNjQpOiBEZWZpbmUgaGVyZSB3aXRoIGdjYydzIF9fYXR0cmlidXRlX18gbWFjcm8KKwlpbnN0ZWFkIG9mIGluIGZmaS5oCisJKEZMT0FUMzIsIEFMSUdOKTogRGVmaW5lIGhlcmUgaW5zdGVhZCBvZiBpbiBmZmkuaAorCSogaW5jbHVkZS9mZmktbWlwcy5oOiBSZW1vdmVkLiAgSXRzIGNvbnRlbnQgbW92ZWQgdG8KKwlzcmMvbWlwcy9mZml0YXJnZXQuaCBhZnRlciBzZXBhcmF0aW5nIGFzc2VtYmx5IGFuZCBDIHNlY3Rpb25zLgorCSogc3JjL2FscGhhL2ZmaS5jLCBzcmMvYWxwaGEvZmZpLmMsIHNyYy9qYXZhX3Jhd19hcGkuYworCXNyYy9wcmVwX2NpZi5jLCBzcmMvcmF3X2FwaS5jLCBzcmMvaWE2NC9mZmkuYywKKwlzcmMvbWlwcy9mZmkuYywgc3JjL21pcHMvbjMyLlMsIHNyYy9taXBzL28zMi5TLAorCXNyYy9taXBzL2ZmaXRhcmdldC5oLCBzcmMvc3BhcmMvZmZpLmMsIHNyYy94ODYvZmZpNjQuYzoKKwlTSVpFT0ZfQVJHIC0+IEZGSV9TSVpFT0ZfQVJHLgorCSogc3JjL2lhNjQvZmZpLmM6IEluY2x1ZGUgc3RkYm9vbC5oIChwcm92aWRlZCBieSBHQ0MgMi45NSspLgorCSogc3JjL2RlYnVnLmMgKGZmaV9hc3NlcnQpOiBBY2NlcHQgc3RyaW5naXplZCBmYWlsZWQgYXNzZXJ0aW9uLgorCShmZmlfdHlwZV90ZXN0KTogUmV3cml0dGVuLgorCSogc3JjL3ByZXAtY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlLCBmZmlfcHJlcF9jaWYpOiBDYWxsCisJRkZJX0FTU0VSVF9WQUxJRF9UWVBFLgorCSogc3JjL2FscGhhL2ZmaXRhcmdldC5oLCBzcmMvYXJtL2ZmaXRhcmdldC5oLAorCXNyYy9pYTY0L2ZmaXRhcmdldC5oLCBzcmMvbTY4ay9mZml0YXJnZXQuaCwKKwlzcmMvbWlwcy9mZml0YXJnZXQuaCwgc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgsCisJc3JjL3MzOTAvZmZpdGFyZ2V0LmgsIHNyYy9zaC9mZml0YXJnZXQuaCwKKwlzcmMvc2g2NC9mZml0YXJnZXQuaCwgc3JjL3NwYXJjL2ZmaXRhcmdldC5oLAorCXNyYy94ODYvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlcy4KKwkqIHNyYy9hbHBoYS9vc2YuUywgc3JjL2FybS9zeXN2LlMsIHNyYy9pYTY0L3VuaXguUywKKwlzcmMvbTY4ay9zeXN2LlMsIHNyYy9taXBzL24zMi5TLCBzcmMvbWlwcy9vMzIuUywKKwlzcmMvcG93ZXJwYy9haXguUywgc3JjL3Bvd2VycGMvZGFyd2luLlMsCisJc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jLCBzcmMvcG93ZXJwYy9saW51eDY0LlMsCisJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMsIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMsCisJc3JjL3Bvd2VycGMvc3lzdi5TLCBzcmMvczM5MC9zeXN2LlMsIHNyYy9zaC9zeXN2LlMsCisJc3JjL3NoNjQvc3lzdi5TLCBzcmMvc3BhcmMvdjguUywgc3JjL3NwYXJjL3Y5LlMsCisJc3JjL3g4Ni9zeXN2LlMsIHNyYy94ODYvdW5peDY0LlMsIHNyYy94ODYvd2luMzIuUzoKKwlpbmNsdWRlIGZmaWNvbmZpZy5oCisKKzIwMDMtMTAtMjAgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvbWlwcy9mZmkuYzogVXNlIF9BQklOMzIsIF9BQklPMzIgaW5zdGVhZCBvZiBleHRlcm5hbAorCV9NSVBTX1NJTV9OQUJJMzIsIF9NSVBTX1NJTV9BQkkzMi4KKworMjAwMy0xMC0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBEZWNsYXJlIGJ5dGVzIGFnYWluLgorCVVzZWQgd2hlbiBGRklfREVCVUcgPSAxLgorCisyMDAzLTEwLTE0ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAoZG91YmxlLCBsb25nZG91YmxlKTogRGVmYXVsdCBQT1dFUlBDNjQgdG8gOCBieXRlIHNpemUKKwlhbmQgYWxpZ24uCisKKzIwMDMtMTAtMDYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBpbmNsdWRlL2ZmaV9taXBzLmg6IERlZmluZSBGRklfTUlQU19OMzIgZm9yIE4zMi9ONjQgQUJJcywKKwlGRklfTUlQU19PMzIgZm9yIE8zMiBBQkkuCisKKzIwMDMtMTAtMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBTZXQgTERfTElCUkFSWV9QQVRIXzY0IGZvcgorCVNQQVJDNjQuIENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMDktMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFhmYWlsIG1pcHMsIGFybSwKKwlzdHJvbmdhcm0sIHhzY2FsZS4gQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMDktMTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvYWl4LlM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwMy0wOS0xOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogQ2xlYW51cCB3aGl0ZXNwYWNlcywgY29tbWVudCBmb3JtYXR0aW5nLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCisyMDAzLTA5LTE4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisJICAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3R5cGVzLmMgKGRvdWJsZSk6IEFkZCBBSVggYW5kIERhcndpbiB0byB0aGUgcmlnaHQgVFlQRURFRi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFJlbW92ZSB0aGUgcG9pbnRlciB0byB0aGUgb3V0Z29pbmcKKwlwYXJhbWV0ZXIgc3RhY2suCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEhhbmRsZSBzdHJ1Y3R1cmVzCisJYWNjb3JkaW5nIHRvIHRoZSBEYXJ3aW4vQUlYIEFCSS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IExpa2V3aXNlLgorCVJlbW92ZSB0aGUgb3V0Z29pbmcgcGFyYW1ldGVyIHN0YWNrIGxvZ2ljLiBTaW1wbGlmeSB0aGUgZXZhbHVhdGlvbgorCW9mIHRoZSBkaWZmZXJlbnQgQ0FTRSB0eXBlcy4KKwkoZmZpX3ByZXBfY2xvdXN1cmUpOiBBdm9pZCB0aGUgY2FzdHMgb24gbHZhbHVlcy4gQ2hhbmdlIHRoZSBicmFuY2gKKwlzdGF0ZW1lbnQgaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4KKworMjAwMy0wOS0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFRha2UgYWNjb3VudCBpbnRvIHRoZSBhbGlnbmVtZW50CisJZm9yIHRoZSByZWdpc3RlciBzaXplLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEhhbmRsZSB0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZQorCWFkZHJlc3MgY29ycmVjdGx5LgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFJldHVybiB0aGUgYXBwcm9wcmlhdGUgdHlwZSB3aGVuCisJdGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IgdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUuCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogRml4IHRoZSBzdGFjayBsYXlvdXQgZm9yCisJdGhlIDY0LWJpdCByZXR1cm4gdmFsdWUuICBVcGRhdGUgY29weXJpZ2h0IHllYXJzLgorCisyMDAzLTA5LTE3ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBTZWFyY2ggaW4KKwlzcmNkaXIgZm9yIGZmaV9taXBzLmguCisKKzIwMDMtMDktMTIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEluY2x1ZGUgdGFpbCBwYWRkaW5nIGluCisJc3RydWN0dXJlIHNpemUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IENvcnJlY3QKKwlwbGFjZW1lbnQgb2YgZmxvYXQgcmVzdWx0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgKGNsb3N1cmVfdGVzdF9mbjEpOiBDb3JyZWN0CisJY2FzdCBvZiAicmVzcCIgZm9yIGJpZy1lbmRpYW4gNjQgYml0IG1hY2hpbmVzLgorCisyMDAzLTA5LTExICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAoZG91YmxlLCBsb25nZG91YmxlKTogTWVyZ2UgaWRlbnRpY2FsIFNIIGFuZCBBUk0KKwl0eXBlZGVmcywgYW5kIGFkZCBQT1dFUlBDNjQuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQ29ycmVjdCBuZXh0X2FyZyBjYWxjIGZvcgorCXN0cnVjdCBzcGxpdCBvdmVyIGdwciBhbmQgcmVzdC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDb3JyZWN0IGludGFyZ19jb3VudCBmb3Igc3RydWN0dXJlcy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IEZpeCBncHIgb2Zmc2V0cy4KKworMjAwMy0wOS0wOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpIEhhbmRsZSBzdHJ1Y3QKKwlwYXNzaW5nIGNvcnJlY3RseS4KKworMjAwMy0wOS0wOSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgYnVpbGQgcnVsZXMgZm9yIGZmaXRlc3QuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmM6IEluY2x1ZGUgPHN0ZGxpYi5oPiB0byBmaXggY29tcGlsZXIgd2FybmluZworCWFib3V0IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGFib3J0KCkuCisKKzIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW06IEFkZCBkZWphZ251IHRlc3QgZnJhbWV3b3JrLiBGaXhlcyBQUiBvdGhlci8xMTQxMS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBBZGQgZGVqYWdudSB0ZXN0IGZyYW1ld29yay4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogQnVpbHQKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogTmV3IGZpbGUuCisJKiB0ZXN0c3VpdGUvY29uZmlnL2RlZmF1bHQuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgorCisKKzIwMDMtMDgtMTMgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKE9GU19JTlQxNik6IFNldCAwIGZvciBsaXR0bGUgZW5kaWFuIGNhc2UuICBVcGRhdGUKKwljb3B5cmlnaHQgeWVhcnMuCisKKzIwMDMtMDgtMDIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBNb2RpZnkgZm9yIGNoYW5nZWQgZ2NjCisJc3RydWN0dXJlIHBhc3NpbmcuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IFJlbW92ZSBjb2RlIHdyaXRpbmcgdG8gcGFybSBzYXZlIGFyZWEuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IFVzZSByZXR1cm4KKwlhZGRyZXNzIGluIGxyIGZyb20gZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQgY2FsbCB0byBjYWxjdWxhdGUKKwl0YWJsZSBhZGRyZXNzLiAgT3B0aW1pemUgZnVuY3Rpb24gdGFpbC4KKworMjAwMy0wNy0yOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvc3BhcmMvZmZpLmM6IEhhbmRsZSBhbGwgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLiBGaXhlcyBzZWNvbmQgcGFydCBvZiBQUiB0YXJnZXQvMTE0MTAuCisKKzIwMDMtMDctMTEgIEdlcmFsZCBQZmVpZmVyICA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KKworCSogUkVBRE1FOiBOb3RlIHRoYXQgbGliZmZpIGlzIG5vdCBwYXJ0IG9mIEdDQy4gIFVwZGF0ZSB0aGUgcHJvamVjdAorCVVSTCBhbmQgc3RhdHVzLgorCisyMDAzLTA2LTE5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEluY2x1ZGUgZmZpLmguCisKKzIwMDMtMDYtMTMgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMveDg2L3N5c3YuUzogQXZvaWQgZ2FzLW9ubHkgLnVsZWIxMjgvLnNsZWIxMjggZGlyZWN0aXZlcy4KKwlVc2UgQyBzdHlsZSBjb21tZW50cy4KKworMjAwMy0wNi0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAcnIuaWlqNHUub3IuanA+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgU0htZWRpYSBzdXBwb3J0LiAgRml4IGEgdHlwbyBvZiBTSCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuaW4gKHNoNjQtKi1saW51eCosIHNoNSotKi1saW51eCopOiBBZGQgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIFNIbWVkaWEgc3VwcG9ydC4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTmV3IGZpbGUuCisKKzIwMDMtMDUtMTYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKEhBVkVfUk9fRUhfRlJBTUUpOiBDaGVjayB3aGV0aGVyIC5laF9mcmFtZSBzZWN0aW9uCisJc2hvdWxkIGJlIHJlYWQtb25seS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogaW5jbHVkZS9mZmkuaC5pbiAoRUhfRlJBTUVfRkxBR1MpOiBEZWZpbmUuCisJKiBzcmMvYWxwaGEvb3NmLlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuICBJbmNsdWRlIGZmaS5oLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuICBVc2UgcGNyZWwgZW5jb2RpbmcKKwlpZiAtZnBpYy8tZlBJQy8tbXJlbG9jYXRhYmxlLgorCSogc3JjL3Bvd2VycGMvcG93ZXJwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y4LlM6IElmIEhBVkVfUk9fRUhfRlJBTUUgaXMgZGVmaW5lZCwgZG9uJ3QgaW5jbHVkZQorCSN3cml0ZSBpbiAuZWhfZnJhbWUgZmxhZ3MuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuCisJKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuICBVc2UgcGNyZWwgZW5jb2RpbmcgaWYgLWZwaWMvLWZQSUMuCisJKiBzcmMvczM5MC9zeXN2LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4gIEluY2x1ZGUgZmZpLmguCisKKzIwMDMtMDUtMDcgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCUZpeGVzIFBSIGJvb3RzdHJhcC8xMDY1NgorCSogY29uZmlndXJlLmluIChIQVZFX0FTX1JFR0lTVEVSX1BTRVVET19PUCk6IFRlc3QgYXNzZW1ibGVyCisJc3VwcG9ydCBmb3IgLnJlZ2lzdGVyIHBzZXVkby1vcC4KKwkqIHNyYy9zcGFyYy92OC5TOiBVc2UgaXQuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMy0wNC0xOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKFBPV0VSUEM2NCk6IERlZmluZSBpZiA2NC1iaXQuCisJKGVudW0gZmZpX2FiaSk6IEFkZCBGRklfTElOVVg2NCBvbiBQT1dFUlBDLgorCU1ha2UgaXQgdGhlIGRlZmF1bHQgb24gUE9XRVJQQzY0LgorCShGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIHRvIDI0IG9uIFBPV0VSUEM2NC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIHBvd2VycGMtKi1saW51eCogaW50byBwb3dlcnBjKi0qLWxpbnV4Ki4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChoaWRkZW4pOiBEZWZpbmUuCisJKGZmaV9wcmVwX2FyZ3NfU1lTVik6IFJlbmFtZWQgZnJvbQorCWZmaV9wcmVwX2FyZ3MuICBDYXN0IHBvaW50ZXJzIHRvIHVuc2lnbmVkIGxvbmcgdG8gc2h1dCB1cCB3YXJuaW5ncy4KKwkoTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQsIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0LAorCUFTTV9ORUVEU19SRUdJU1RFUlM2NCk6IE5ldy4KKwkoZmZpX3ByZXBfYXJnczY0KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBGRklfTElOVVg2NCBBQkkuCisJKGZmaV9jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBMaWtld2lzZS4KKwkoZmx1c2hfaWNhY2hlKTogU3Vycm91bmQgYnkgI2lmbmRlZiBQT1dFUlBDNjQuCisJKGZmaV9kYmxmbCk6IE5ldyB1bmlvbiB0eXBlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFVzZSBpdCB0byBhdm9pZCBhbGlhc2luZyBwcm9ibGVtcy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBTdXJyb3VuZCB3aG9sZSBmaWxlIGJ5ICNpZm5kZWYKKwlfX3Bvd2VycGM2NF9fLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkoZmZpX2NhbGxfU1lTVik6IFJlbmFtZSBmZmlfcHJlcF9hcmdzIHRvIGZmaV9wcmVwX2FyZ3NfU1lTVi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTmV3IGZpbGUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzcmMvcG93ZXJwYy9saW51eDY0LlMgYW5kCisJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQyk6IExpa2V3aXNlLgorCisJKiBzcmMvZmZpdGVzdC5jIChjbG9zdXJlX3Rlc3RfZm4sIGNsb3N1cmVfdGVzdF9mbjEsIGNsb3N1cmVfdGVzdF9mbjIsCisJY2xvc3VyZV90ZXN0X2ZuMyk6IEZpeCByZXN1bHQgcHJpbnRpbmcgb24gYmlnLWVuZGlhbiA2NC1iaXQKKwltYWNoaW5lcy4KKwkobWFpbik6IFByaW50IHRzdDJfYXJnIGluc3RlYWQgb2YgdW5pbml0aWFsaXplZCB0c3QyX3Jlc3VsdC4KKworCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IEhpZGUgd2hhdCBjbG9zdXJlIHBvaW50ZXIgcmVhbGx5IHBvaW50cyB0bworCWZyb20gdGhlIGNvbXBpbGVyLgorCisyMDAzLTA0LTE2ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogY29uZmlndXJlLmluIChhcm0tKi1uZXRic2RlbGYqKTogQWRkIGNvbmZpZ3VyYXRpb24uCisJKGNvbmZpZ3VyZSk6IFJlZ2VuZXJhdGVkLgorCisyMDAzLTA0LTA0ICBMb3JlbiBKLiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDAzLTAzLTIxICBaZGVuZWsgRHZvcmFrICA8cmFrZHZlckBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3o+CisKKwkqIGxpYmZmaS9pbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgWDg2IGluc3RlYWQgb2YgWDg2XzY0IGluIDMyCisJYml0IG1vZGUuCisJKiBsaWJmZmkvc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOgorCVJlY2VpdmUgY2xvc3VyZSBwb2ludGVyIHRocm91Z2ggcGFyYW1ldGVyLCByZWFkIGFyZ3MgdXNpbmcKKwlfX2J1aWx0aW5fZHdhcmZfY2ZhLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogU2VuZCBjbG9zdXJlIHJlZmVyZW5jZSB0aHJvdWdoIGVheC4KKworMjAwMy0wMy0xMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogY29uZmlndXJlLmluOiBBdm9pZCB0cmFpbGluZyAvLiBpbiB0b29sZXhlY2xpYmRpci4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMy0wMy0wMyAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IFJlY29kZSB0byBmaXQgZHluYW1pYyBsaWJyYXJpZXMuCisKKzIwMDMtMDItMDYgIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBsaWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzoKKwlGaXggYWxpZ25lbWVudCBidWcsIGFsbG9jYXRlIDggYnl0ZXMgZm9yIHRoZSByZXN1bHQuCisJKiBsaWJmZmkvc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzoKKwlMaWtld2lzZS4KKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6CisJVXBkYXRlIHN0YWNrZnJhbWUgZGVzY3JpcHRpb24gZm9yIGFpeC9kYXJ3aW5fY2xvc3VyZS5TLgorCisyMDAzLTAyLTA2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogQWRkIGhpZGRlbiB2aXNpYmlsaXR5CisJYXR0cmlidXRlLgorCisyMDAzLTAxLTMxICBDaHJpc3RpYW4gQ29ybmVsc3NlbiAgPGNjb3JuQGNzLnR1LWJlcmxpbi5kZT4sCisJICAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRqdXN0IGNvbW1hbmQgdG8gc291cmNlIGNvbmZpZy1tbC5pbiB0byBhY2NvdW50CisJZm9yIGNoYW5nZXMgdG8gdGhlIGxpYmZmaV9iYXNlZGlyIGRlZmluaXRpb24uCisJKGxpYmZmaV9iYXNlZGlyKTogUmVtb3ZlICR7c3JjZGlyfSBmcm9tIHZhbHVlIGFuZCBpbmNsdWRlIHRyYWlsaW5nCisJc2xhc2ggaWYgbm9uZW1wdHkuCisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMy0wMS0yOSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBSZWNvZGUgdG8gZml0IHNoYXJlZCBsaWJzLgorCisyMDAzLTAxLTI4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogRW5hYmxlIEZGSV9DTE9TVVJFUyBmb3IgeDg2XzY0LgorCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jbG9zdXJlKTogTmV3LgorCShmZmlfY2xvc3VyZV9VTklYNjRfaW5uZXIpOiBOZXcuCisJKiBzcmMveDg2L3VuaXg2NC5TIChmZmlfY2xvc3VyZV9VTklYNjQpOiBOZXcuCisKKzIwMDMtMDEtMjcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKHRvb2xleGVjZGlyLCB0b29sZXhlY2xpYmRpcik6IFNldCBhbmQgQUNfU1VCU1QuCisJUmVtb3ZlIFVTRV9MSUJESVIgY29uZGl0aW9uYWwuCisJKiBNYWtlZmlsZS5hbSAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogRG9uJ3Qgb3ZlcnJpZGUuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAzLTAxMDI3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogRml4IHR5cG8uCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwMy0wMS0yMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfQUlYKTogQWRkIEF1Z21lbnRhdGlvbiBzaXplIHRvCisJdW53aW5kIGluZm8uCisKKzIwMDMtMDEtMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDAzLTAxLTE0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9hcmdzKTogQ2hlY2sgZm9yIHZvaWQgcmV0dmFsLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgorCSogc3JjL3g4Ni91bml4NjQuUzogQWRkIHVud2luZCBpbmZvLgorCisyMDAzLTAxLTE0ICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CisKKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBPbmx5IHVzZSBmZmlfY2xvc3VyZXMgaWYgdGhvc2UgYXJlCisJc3VwcG9ydGVkLgorCisyMDAzLTAxLTEzIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBsaWJmZmkvc3JjL2ZmaXRlc3QuYworCSBhZGQgY2xvc3VyZSB0ZXN0Y2FzZXMKKworMjAwMy0wMS0xMyBLZXZpbiBCLiBIZW5kcmlja3MgPGtoZW5kcmlja3NAaXZleS51d28uY2E+CisKKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYworCSBmaXggYWxpZ25tZW50IGJ1ZyBmb3IgZmxvYXQgKDQgYnl0ZSBhbGlnbmVkIGlzbyA4IGJ5dGUpCisKKzIwMDMtMDEtMDkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IFJlbW92ZSBSQ1MgdmVyc2lvbiBzdHJpbmcuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogUmVtb3ZlIFJDUyB2ZXJzaW9uIHN0cmluZy4KKworMjAwMy0wMS0wMyAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgY2xvc3VyZSBkZWZpbmVzIGZvciBTUEFSQywgU1BBUkM2NC4KKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBVc2Ugc3RhdGljIHN0b3JhZ2UgZm9yIGNsb3N1cmUuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyKTogTmV3LgorCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogTmV3LgorCSogc3JjL3NwYXJjL3Y5LlMgKGZmaV9jbG9zdXJlX3Y5KTogTmV3LgorCisyMDAyLTExLTEwICBSYW5qaXQgTWF0aGV3IDxybWF0aGV3QGhvdG1haWwuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGRlZCBGRklfU1REQ0FMTCBmZmlfdHlwZQorCSAgZW51bWVyYXRpb24gZm9yIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUzogQWRkZWQgZmZpX2NhbGxfU1REQ0FMTCBmdW5jdGlvbgorCSAgZGVmaW5pdGlvbi4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jYWxsL2ZmaV9yYXdfY2FsbCk6IEFkZGVkCisJICBzd2l0Y2ggY2FzZXMgZm9yIHJlY29nbmlzaW5nIEZGSV9TVERDQUxMIGFuZAorCSAgY2FsbGluZyBmZmlfY2FsbF9TVERDQUxMIGlmIHRhcmdldCBpcyBYODZfV0lOMzIuCisJKiBzcmMvZmZpdGVzdC5jIChteV9zdGRjYWxsX3N0cmxlbi9zdGRjYWxsX21hbnkpOgorCSAgc3RkY2FsbCB2ZXJzaW9ucyBvZiB0aGUgIm15X3N0cmxlbiIgYW5kICJtYW55IgorCSAgdGVzdCBmdW5jdGlvbnMgKGZvciBYODZfV0lOMzIpLgorCSAgQWRkZWQgdGVzdCBjYXNlcyB0byB0ZXN0IHN0ZGNhbGwgaW52b2NhdGlvbiB1c2luZworCSAgdGhlc2UgZnVuY3Rpb25zLgorCisyMDAyLTEyLTAyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogQWRkIERXQVJGMiB1bndpbmQgaW5mby4KKworMjAwMi0xMS0yNyAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9zeXN2LlMgKC5laF9mcmFtZSBzZWN0aW9uKTogTWFrZSBzZWN0aW9uIHJlYWQtb25seS4KKworMjAwMi0xMS0yNiAgSmltIFdpbHNvbiAgPHdpbHNvbkByZWRoYXQuY29tPgorCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IEhhcyBzaXplIDggb24gSUE2NC4KKworMjAwMi0xMS0yMyAgSC5KLiBMdSA8aGpsQGdudS5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNDogQWRkIGR1bW15IEFNX1BST0dfTElCVE9PTC4KKwlJbmNsdWRlIC4uL2NvbmZpZy9hY2Nyb3NzLm00LgorCSogYWNsb2NhbC5tNDsgUmVidWlsZC4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisKKzIwMDItMTEtMTUgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvc3lzdi5TICguZWhfZnJhbWUgc2VjdGlvbik6IEFkYXB0IHRvIHBjcmVsIEZERSBlbmNvZGluZy4KKworMjAwMi0xMS0xMSAgREogRGVsb3JpZSAgPGRqQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgY29tbW9uIGZpbGVzIGluIHRoZSByaWdodCBwbGFjZS4KKworMjAwMi0xMC0wOCAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IEludGVycHJldAorCXJhdyBkYXRhIGFzIF9Kdl93b3JkIHZhbHVlcywgbm90IGZmaV9yYXcuCisJKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IExpa2V3aXNlLgorCShmZmlfamF2YV9ydmFsdWVfdG9fcmF3KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfamF2YV9yYXdfY2FsbCk6IENhbGwgaXQuCisJKGZmaV9qYXZhX3Jhd190b19ydmFsdWUpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzKTogQ2FsbCBpdC4KKwkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbik6IEludGVycHJldCByZXR1cm4gdmFsdWUKKwlhcyBmZmlfYXJnLCBub3QgaW50LgorCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIG1pc3NpbmcKKwlGRklfVFlQRV9QT0lOVEVSIGNhc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuICBBbHNvLCBhc3N1bWUgcmV0dXJuCisJdmFsdWVzIGV4dGVuZGVkIHRvIHdvcmQgc2l6ZS4KKworMjAwMi0xMC0wMiAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUmVtb3ZlIGRlYnVnIG91dHB1dC4KKworMjAwMi0xMC0wMSAgQm8gVGhvcnNlbiAgPGJvQHNtZXRhbmEuc3VzZS5kZT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogRml4IGkzODYgd2luMzIgY29tcGlsYXRpb24uCisKKzIwMDItMDktMzAgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGQgczM5MHgtKi1saW51eC0qIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IERlZmluZSBTMzkwWCBmb3IgczM5MHggdGFyZ2V0cy4KKwkoRkZJX0NMT1NVUkVTKTogRGVmaW5lIGZvciBzMzkwL3MzOTB4LgorCShGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9OQVRJVkVfUkFXX0FQSSk6IExpa2V3aXNlLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERvIG5vdCBjb21wdXRlIHN0YWNrIHNwYWNlIGZvciBzMzkwLgorCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBVc2UgOC1ieXRlIHBvaW50ZXJzIG9uIHMzOTB4LgorCSogc3JjL3MzOTAvZmZpLmM6IE1ham9yIHJld29yayBvZiBleGlzdGluZyBjb2RlLiAgQWRkIHN1cHBvcnQgZm9yCisJczM5MHggdGFyZ2V0cy4gIEFkZCBjbG9zdXJlIHN1cHBvcnQuCisJKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDAyLTA5LTI5ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogc3JjL2FybS9zeXN2LlM6IEZpeCB0eXBvLgorCisyMDAyLTA5LTI4ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogc3JjL2FybS9zeXN2LlM6IElmIHdlIGRvbid0IGhhdmUgbWFjaGluZS9hc20uaCBhbmQgdGhlIHByZS1wcm9jZXNzb3IKKwloYXMgZGVmaW5lZCBfX1VTRVJfTEFCRUxfUFJFRklYX18sIHRoZW4gdXNlIGl0IGluIENOQU1FLgorCShmZmlfY2FsbF9TWVNWKTogSGFuZGxlIHNvZnQtZmxvYXQuCisKKzIwMDItMDktMjcgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBGaXggbXVsdGlsaWIgeDg2LTY0IHN1cHBvcnQuCisKKzIwMDItMDktMjIgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KKworCSogTWFrZWZpbGUuYW0gKGFsbC1tdWx0aSk6IEZpeCBtdWx0aWxpYiBwYXJhbGxlbCBidWlsZC4KKworMjAwMi0wNy0xOSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbiAoc2hbMzRdKi0qLWxpbnV4Kik6IEFkZCBicmFja2V0cy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNy0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgU0ggc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluIChzaC0qLWxpbnV4Kiwgc2hbMzRdKi0qLWxpbnV4Kik6IEFkZCB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgU0ggc3VwcG9ydC4KKwkqIHNyYy9zaC9mZmkuYzogTmV3IGZpbGUuCisJKiBzcmMvc2gvc3lzdi5TOiBOZXcgZmlsZS4KKwkqIHNyYy90eXBlcy5jOiBBZGQgU0ggc3VwcG9ydC4KKworMjAwMi0wNy0xNiAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy94ODYvZmZpNjQuYzogTmV3IGZpbGUgdGhhdCBhZGRzIHg4Ni02NCBzdXBwb3J0LgorCSogc3JjL3g4Ni91bml4NjQuUzogTmV3IGZpbGUgdGhhdCBoYW5kbGVzIGFyZ3VtZW50IHNldHVwIGZvcgorCXg4Ni02NC4KKwkqIHNyYy94ODYvc3lzdi5TOiBEb24ndCB1c2UgdGhpcyBvbiB4ODYtNjQuCisJKiBzcmMveDg2L2ZmaS5jOiBEb24ndCB1c2UgdGhpcyBvbiB4ODYtNjQuCisJUmVtb3ZlIHVudXNlZCB2YXJzLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERvbid0IGRvIHN0YWNrIHNpemUgY2FsY3VsYXRpb24KKwlmb3IgeDg2LTY0LgorCSogc3JjL2ZmaXRlc3QuYyAoc3RydWN0Nik6IE5ldyB0ZXN0IHRoYXQgdGVzdHMgYSBzcGVjaWFsIGNhc2UgaW4KKwl0aGUgeDg2LTY0IEFCSS4KKwkoc3RydWN0Nyk6IExpa2V3aXNlLgorCShzdHJ1Y3Q4KTogTGlrZXdpc2UuCisJKHN0cnVjdDkpOiBMaWtld2lzZS4KKwkoY2xvc3VyZV90ZXN0X2ZuKTogU2lsZW5jZSB3YXJuaW5nIGFib3V0IHRoaXMgd2hlbiBpdCdzIG5vdCB1c2VkLgorCShtYWluKTogQWRkIHRoZSBuZXcgdGVzdHMuCisJKG1haW4pOiBGaXggYSBjb3VwbGUgb2Ygd3JvbmcgY2FzdHMgYW5kIHNpbGVuY2Ugc29tZSBjb21waWxlciB3YXJuaW5ncy4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCB4ODYtNjQgQUJJIGRlZmluaXRpb24uCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmFtOiBBZGQgeDg2LTY0IHN1cHBvcnQuCisJKiBjb25maWd1cmUuaW46IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCisyMDAyLTA2LTI0ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogc3JjL3R5cGVzLmM6IE1lcmdlIHNldHRpbmdzIGZvciBzaW1pbGFyIGFyY2hpdGVjdHVyZXMuCisJQWRkIHg4Ni02NCBzaXplcyBhbmQgYWxpZ25tZW50cy4KKworMjAwMi0wNi0yMyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgdW51c2VkIHZhcnMuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjgpOiBMaWtld2lzZS4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgorCisyMDAyLTA3LTE4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCisKKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX01JUFNfTElOVVgpOiBOZXcuCisJKGxpYmZmaV9sYV9TT1VSQ0VTKTogU3VwcG9ydCBNSVBTX0xJTlVYLgorCShsaWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisJKiBjb25maWd1cmUuaW4gKG1pcHM2NCotKik6IFNraXAuCisJKG1pcHMqLSotbGludXgqKTogTmV3LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL21pcHMvZmZpLmM6IEluY2x1ZGUgPHNnaWRlZnMuaD4uCisKKzIwMDItMDYtMDYgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvc3lzdi5TOiBTYXZlL3Jlc3RvcmUgJXI2LiAgQWRkIERXQVJGLTIgdW53aW5kIGluZm8uCisKKzIwMDItMDUtMjcgIFJvZ2VyIFNheWxlICA8cm9nZXJAZXllc29wZW4uY29tPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHJlZmVyZW5jZSB0byBhdm4uCisKKzIwMDItMDUtMjcgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBhbmQKKwlmaXggZm9ybWF0dGluZy4KKworMjAwMi0wNS0xMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBEZWNsYXJlIGZkIGF0CisJYmVnaW5uaW5nIG9mIGZ1bmN0aW9uIChmb3Igb2xkZXIgYXBwbGUgY2MpLgorCisyMDAyLTA1LTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluIChPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUHJlc2VydmUgTEQgYXQKKwlzY3JpcHQgZW50cnksIGFuZCBzZXQgTEQgdG8gaXQgd2hlbiBjb25maWd1cmluZyBtdWx0aWxpYnMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDUtMDUgIEphc29uIFRob3JwZSAgPHRob3JwZWpAd2FzYWJpc3lzdGVtcy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoc3BhcmM2NC0qLW5ldGJzZCopOiBBZGQgdGFyZ2V0LgorCShzcGFyYy0qLW5ldGJzZGVsZiopOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNC0yOCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluLCBjb25maWd1cmU6IEZpeCBTUEFSQyB0ZXN0IGluIHByZXZpb3VzIGNoYW5nZS4KKworMjAwMi0wNC0yOSAgR2VyaGFyZCBUb25uICA8R2VyaGFyZFRvbm5Ac3dvbC5kZT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCisJKiBzcmMvczM5MC9mZmkuYzogTmV3IGZpbGUgZnJvbSBsaWJmZmkgQ1ZTIHRyZWUuCisJKiBzcmMvczM5MC9zeXN2LlM6IE5ldyBmaWxlIGZyb20gbGliZmZpIENWUyB0cmVlLgorCisyMDAyLTA0LTI4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluIChIQVZFX0FTX1NQQVJDX1VBX1BDUkVMKTogQ2hlY2sgZm9yIHdvcmtpbmcKKwklcl9kaXNwMzIoKS4KKwkqIHNyYy9zcGFyYy92OC5TOiBVc2UgaXQuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMi0wNC0wOCAgSGFucyBCb2VobSAgPEhhbnNfQm9laG1AaHAuY29tPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd19zaXplKTogSGFuZGxlIEZGSV9UWVBFX0RPVUJMRQorCWNvcnJlY3RseS4KKwkqIHNyYy9pYTY0L3VuaXguUzogQWRkIHVud2luZCBpbmZvcm1hdGlvbi4gRml4IGNvbW1lbnRzLgorCVNhdmUgc3AgaW4gYSB3YXkgdGhhdCdzIGNvbXBhdGlibGUgd2l0aCB1bndpbmQgaW5mby4KKwkoZmZpX2NhbGxfdW5peCk6IENvcnJlY3RseSByZXN0b3JlIHNwIGluIGFsbCBjYXNlcy4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBBZGQsIGZpeCBjb21tZW50cy4KKworMjAwMi0wNC0wOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zcGFyYy92OC5TOiBNYWtlIC5laF9mcmFtZSBkZXBlbmRlbnQgb24gdGFyZ2V0IHdvcmQgc2l6ZS4KKworMjAwMi0wNC0wNiAgSmFzb24gVGhvcnBlICA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KKworCSogY29uZmlndXJlLmluIChhbHBoYSotKi1uZXRic2QqKTogQWRkIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNC0wNCAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBzcmMvc3BhcmMvdjguUzogQWRkIHVud2luZCBpbmZvLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCisyMDAyLTAzLTMwICBLcmlzdGVyIFdhbGZyaWRzc29uICA8Y2F0b0BkZi5sdGguc2U+CisKKwkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIGkqODYtKi1uZXRic2RlbGYqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTAzLTI5ICBEYXZpZCBCaWxsaW5naHVyc3QgPERhdmlkLkJpbGxpbmdodXJzdEByaW90aW50by5jb20+CisKKwlQUiBvdGhlci8yNjIwCisJKiBzcmMvbWlwcy9uMzIuczogRGVsZXRlCisJKiBzcmMvbWlwcy9vMzIuczogRGVsZXRlCisKKzIwMDItMDMtMjEgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIGFscGhhKi0qLWZyZWVic2QqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTAzLTE3ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQHdhaXRha2kub3RhZ28uYWMubno+CisKKwkqIE1ha2VmaWxlLmFtOiBsaWJmZmljb252ZW5pZW5jZSAtPiBsaWJmZmlfY29udmVuaWVuY2UuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogTWFrZWZpbGUuYW06IERlZmluZSBmZml0ZXN0X09CSkVDVFMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMi0wMy0wNyAgQW5kcmVhcyBUb2JsZXIgIDx0b2FAcG9wLmFncmkuY2g+CisJICAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgRGFyd2luIGFuZCBBSVggY2xvc3VyZSBmaWxlcy4KKwkoVEFSR0VUX1NSQ19QT1dFUlBDX0FJWCk6IEFkZCBhaXhfY2xvc3VyZS5TLgorCShUQVJHRVRfU1JDX1BPV0VSUENfREFSV0lOKTogQWRkIGRhcndpbl9jbG9zdXJlLlMuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBBSVggYW5kIERhcndpbiBjbG9zdXJlIGRlZmluaXRpb25zLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9jbG9zdXJlKTogTmV3IGZ1bmN0aW9uLgorCShmbHVzaF9pY2FjaGUsIGZsdXNoX3JhbmdlKTogTmV3IGZ1bmN0aW9ucy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTmV3IGZpbGUuCisKKzIwMDItMDItMjQgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHR5cGVkZWYgZm9yIGZmaV9hcmcuCisJKiBzcmMvZmZpdGVzdC5jIChtYWluKTogRGVjbGFyZSByaW50IHdpdGggZmZpX2FyZy4KKworMjAwMi0wMi0yMSAgQW5kcmVhcyBUb2JsZXIgIDx0b2FAcG9wLmFncmkuY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IFNraXAgYXBwcm9wcmlhdGUKKwludW1iZXIgb2YgR1BScyBmb3IgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLgorCisyMDAyLTAxLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBSZXBsYWNlIENIRUNLX1NJWkVPRiBhbmQgZW5kaWFuIHRlc3RzIHdpdGgKKwljcm9zcy1jb21waWxlciBmcmllbmRseSBtYWNyb3MuCisJKiBhY2xvY2FsLm00IChBQ19DT01QSUxFX0NIRUNLX1NJWkVPRiwgQUNfQ19CSUdFTkRJQU5fQ1JPU1MpOiBOZXcKKwltYWNyb3MuCisKKzIwMDItMDEtMTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9BSVgpOiBOZXcuCisJKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfREFSV0lOKTogTmV3LgorCisyMDAyLTAxLTE3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIERhcndpbiBhbmQgQUlYIGZpbGVzLgorCShUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogTmV3LgorCShQT1dFUlBDX0FJWCk6IE5ldyBzdGFuemEuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZS5pbjogQWRkIEFJWCBjYXNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX2FiaSk6IEFkZCBGRklfQUlYLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfc3RhdHVzKTogVXNlICJsb25nIiB0byBzY2FsZSBmcmFtZQorCXNpemUuICBGaXggImxvbmcgZG91YmxlIiBzdXBwb3J0LgorCShmZmlfY2FsbCk6IEFkZCBGRklfQUlYIGNhc2UuCisJKiBzcmMvcG93ZXJwYy9haXguUzogTmV3LgorCisyMDAxLTEwLTA5ICBKb2huIEhvcm5rdmlzdCAgPGpvaG5AdG9hc3RlZG1hcnNobWFsbG93LmNvbT4KKworCUltcGxlbWVudCBEYXJ3aW4gUG93ZXJQQyBBQkkuCisJKiBjb25maWd1cmUuaW46IEhhbmRsZSBwb3dlcnBjLSotZGFyd2luKi4KKwkqIE1ha2VmaWxlLmFtOiBTZXQgc291cmNlIGZpbGVzIGZvciBQT1dFUlBDX0RBUldJTi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIEZGSV9EQVJXSU4gYW5kIEZGSV9ERUZBVUxUX0FCSSBmb3IKKwlQT1dFUlBDX0RBUldJTi4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTmV3IGZpbGUuCisKKzIwMDEtMTAtMDcgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KKworCSogc3JjL3g4Ni9mZmkuYzogRml4IHNwZWxsaW5nIGVycm9yIG9mICJzZXBhcmF0ZSIgYXMgInNlcGVyYXRlIi4KKworMjAwMS0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy94ODYvc3lzdi5TOiBBdm9pZCBnYXMtb25seSAuYmFsaWduIGRpcmVjdGl2ZS4KKwlVc2UgQyBzdHlsZSBjb21tZW50cy4KKworMjAwMS0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IEF2b2lkIGdhcy1vbmx5IG1uZW1vbmljLgorCUZpeGVzIFBSIGJvb3RzdHJhcC8zNTYzLgorCisyMDAxLTA2LTI2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2xvc3VyZV9vc2YpOiBVc2UgLnJkYXRhIGZvciBFQ09GRi4KKworMjAwMS0wNi0yNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIHNwYXJjKi1zdW4tKiBob3N0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAxLTA2LTA2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TIChfX0ZSQU1FX0JFR0lOX18pOiBDb25kaXRpb25hbGl6ZSBmb3IgRUxGLgorCisyMDAxLTA2LTAzICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgdW53aW5kIGluZm8uCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDAwLTA1LTMxICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogRml4IEFDX0FSR19FTkFCTEUgdXNhZ2UuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDEtMDUtMDYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KKworCSogY29uZmlndXJlLmluOiBSZW1vdmUgd2FybmluZyBhYm91dCBiZXRhIGNvZGUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDEtMDQtMjUgIEhhbnMgQm9laG0gPEhhbnNfQm9laG1AaHAuY29tPgorCisJKiBzcmMvaWE2NC91bml4LlM6IFJlc3RvcmUgc3RhY2sgcG9pbnRlciB3aGVuIHJldHVybmluZyBmcm9tCisJZmZpX2Nsb3N1cmVfVU5JWC4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBGaXggdHlwbyBpbiBjb21tZW50LgorCisyMDAxLTA0LTE4ICBKaW0gV2lsc29uICA8d2lsc29uQHJlZGhhdC5jb20+CisKKwkqIHNyYy9pYTY0L3VuaXguUzogRGVsZXRlIHVubmVjZXNzYXJ5IGluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9mIGxvYzIKKwl0byBlbGltaW5hdGUgUkFXIERWLgorCisyMDAxLTA0LTEyICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKworCSogTWFrZWZpbGUuYW06IE1ha2UgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMS0wMy0yOSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisKKwkqIGNvbmZpZ3VyZS5pbjogVXNlIGRpZmZlcmVudCBzeW50YXggZm9yIHN1YmRpcmVjdG9yeSBjcmVhdGlvbi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wMy0yNyAgSm9uIEJlbmlzdG9uICA8am9uQGJlbmlzdG9uLmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IChXaW4zMiwgQ3lnV2luLCBNaW5nVykuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KKworCSogc3JjL2ZmaXRlc3QuYzogRG9lc24ndCBydW4gc3RydWN0dXJlIHRlc3RzIGZvciBYODZfV0lOMzIgdGFyZ2V0cy4KKwkqIHNyYy90eXBlcy5jOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCisKKwkqIHNyYy94ODYvd2luMzIuUzogTmV3IGZpbGUuIEJhc2VkIG9uIHN5c3YuUywgYnV0IHdpdGggRUgKKwlzdHVmZiByZW1vdmVkIGFuZCBtYWRlIHRvIHdvcmsgd2l0aCBDeWdXaW4ncyBnYXMuCisKKzIwMDEtMDMtMjYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBjb25maWd1cmUuaW46IE1ha2UgdGFyZ2V0IHN1YmRpcmVjdG9yeSBpbiBidWlsZCBkaXIuCisJKiBNYWtlZmlsZS5hbTogT3ZlcnJpZGUgc3VmZml4IGJhc2VkIHJ1bGVzIHRvIHNwZWNpZnkgY29ycmVjdCBvdXRwdXQKKwlzdWJkaXJlY3RvcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wMy0yMyAgS2V2aW4gQiBIZW5kcmlja3MgIDxraGVuZHJpY2tzQGl2ZXkudXdvLmNhPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4ZWQgQUJJIGNvbXBhdGliaWxpdHkgYnVnCisJaW52b2x2aW5nIGxvbmcgbG9uZyBhbmQgcmVnaXN0ZXIgcGFpcnMuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcgZnVuY3Rpb24uCisJKGZsdXNoX2ljYWNoZSk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX0NMT1NVUkVTKTogRGVmaW5lIG9uIFBQQy4KKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgorCShGRklfTkFUSVZFX1JBV19BUEkpOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TLgorCShUQVJHRVRfU1JDX1BPV0VSUEMpOiBMaWtld2lzZS4KKworMjAwMS0wMy0xOSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChmZml0ZXN0X0xERkxBR1MpOiBOZXcgbWFjcm8uCisKKzIwMDEtMDMtMDIgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogaW5jbHVkZS9mZmlfbWlwcy5oOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9kZWJ1Zy5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9mZml0ZXN0LmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3ByZXBfY2lmLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3R5cGVzLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2FscGhhL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hbHBoYS9vc2YuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvYXJtL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hcm0vc3lzdi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL24zMi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL28zMi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9zcGFyYy9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvc3BhcmMvdjguUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvc3BhcmMvdjkuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMveDg2L2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy94ODYvc3lzdi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKworMjAwMS0wMi0wOCAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugc291cmNld2FyZS5jeWdudXMuY29tIHJlZmVyZW5jZXMgdG8KKwlnY2MuZ251Lm9yZy4KKworMjAwMC0xMi0wOSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfY2FsbCk6IFNpbXBsaWZ5IHN0cnVjdCByZXR1cm4gdGVzdC4KKwkoZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogSW5kZXggcmF0aGVyIHRoYW4gaW5jcmVtZW50IGF2YWx1ZQorCWFuZCBhcmdfdHlwZXMuICBHaXZlIGZmaV9jbG9zdXJlX29zZiB0aGUgcmF3IHJldHVybiB2YWx1ZSB0eXBlLgorCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2xvc3VyZV9vc2YpOiBIYW5kbGUgcmV0dXJuIHZhbHVlIHR5cGUKKwlwcm9tb3Rpb24uCisKKzIwMDAtMTItMDcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9yYXdfYXBpLmMgKGZmaV90cmFuc2xhdGVfYXJncyk6IEZpeCB0eXBvLgorCShmZmlfcHJlcF9jbG9zdXJlKTogTGlrZXdpc2UuCisKKwkqIGluY2x1ZGUvZmZpLmguaW4gW0FMUEhBXTogRGVmaW5lIEZGSV9DTE9TVVJFUyBhbmQKKwlGRklfVFJBTVBPTElORV9TSVpFLgorCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkanVzdCBtaW5pbWFsCisJY2lmLT5ieXRlcyBmb3IgbmV3IGZmaV9jYWxsX29zZiBpbXBsZW1lbnRhdGlvbi4KKwkoZmZpX3ByZXBfYXJncyk6IEFic29yYiBpbnRvIC4uLgorCShmZmlfY2FsbCk6IC4uLiBoZXJlLiAgRG8gYWxsIHN0YWNrIGFsbG9jYXRpb24gaGVyZSBhbmQKKwlhdm9pZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jbG9zdXJlLCBmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBOZXcuCisJKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jYWxsX29zZik6IFJlaW1wbGVtZW50IHdpdGggbm8gY2FsbGJhY2suCisJKGZmaV9jbG9zdXJlX29zZik6IE5ldy4KKworMjAwMC0wOS0xMCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgaW5zdGFsbC1zaDogUmVtb3ZlZC4KKwkqIGx0Y29uZmlnLCBsdG1haW4uc2gsIG1pc3NpbmcsIG1raW5zdGFsbGRpcnM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGFjaW5jbHVkZS5tNDogSW5jbHVkZSBsaWJ0b29sIG1hY3JvcyBmcm9tIHRoZSB0b3AgbGV2ZWwuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDAtMDgtMjIgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gW2kqODYtKi1mcmVlYnNkKl0gKFRBUkdFVCwgVEFSR0VURElSKTogU2V0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAwLTA1LTExICBTY290dCBCYW1icm91Z2ggIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworCSogbGliZmZpL3NyYy9hcm0vc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogRG91YmxlcyBhcmUgbm90IHNhdmVkIHRvCisJbWVtb3J5IGNvcnJlY3RseS4gIFVzZSBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vdCBicmFuY2hlcyB3aGVyZQorCXBvc3NpYmxlLgorCisyMDAwLTA1LTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogTWF0Y2ggYGFybSotKi1saW51eC0qJy4KKwlGcm9tIENocmlzIERvcm5hbiA8Y2Rvcm5hbkBhcm0uY29tPi4KKworMjAwMC0wNC0yOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogRGVmaW5lLgorCShBTV9NQUtFRkxBR1MpOiBMaWtld2lzZS4KKwkoTXVsdGlsaWIgc3VwcG9ydC4pOiBBZGQgc2VjdGlvbi4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogbHRjb25maWcgKGV4dHJhX2NvbXBpbGVyX2ZsYWdzLCBleHRyYV9jb21waWxlcl9mbGFnc192YWx1ZSk6CisJTmV3IHZhcmlhYmxlcy4gU2V0IGZvciBnY2MgdXNpbmcgLXByaW50LW11bHRpLWxpYi4gRXhwb3J0IHRoZW0KKwl0byBsaWJ0b29sLgorCShzcGFyYzY0LSotbGludXgtZ251Kik6IFVzZSBsaWJzdWZmIDY0IGZvciBzZWFyY2ggcGF0aHMuCisJKiBsdG1haW4uc2ggKEJ8YnxWKTogRG9uJ3QgdGhyb3cgYXdheSBnY2MncyAtQiwgLWIgYW5kIC1WIG9wdGlvbnMKKwlmb3IgLXNoYXJlZCBsaW5rcy4KKwkoZXh0cmFfY29tcGlsZXJfZmxhZ3NfdmFsdWUsIGV4dHJhX2NvbXBpbGVyX2ZsYWdzKTogQ2hlY2sgdGhlc2UKKwlmb3IgZXh0cmEgY29tcGlsZXIgb3B0aW9ucyB3aGljaCBuZWVkIHRvIGJlIHBhc3NlZCBkb3duIGluCisJY29tcGlsZXJfZmxhZ3MuCisKKzIwMDAtMDQtMTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IENoYW5nZSBpKjg2LXBjLWxpbnV4KiB0byBpKjg2LSotbGludXgqLgorCisyMDAwLTA0LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoU1BBUkM2NCk6IERlZmluZSBmb3IgNjRiaXQgU1BBUkMgYnVpbGRzLgorCVNldCBTUEFSQyBGRklfREVGQVVMVF9BQkkgYmFzZWQgb24gU1BBUkM2NCBkZWZpbmUuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjgpOiBSZW5hbWVkIGZyb20gZmZpX3ByZXBfYXJncy4KKwlSZXBsYWNlIGFsbCB2b2lkICogc2l6ZW9mcyB3aXRoIHNpemVvZihpbnQpLgorCU9ubHkgY29tcGFyZSB0eXBlIHdpdGggRkZJX1RZUEVfTE9OR0RPVUJMRSBpZiBMT05HRE9VQkxFIGlzCisJZGlmZmVyZW50IHRoYW4gRE9VQkxFLgorCVJlbW92ZSBGRklfVFlQRV9TSU5UMzIgYW5kIEZGSV9UWVBFX1VJTlQzMiBjYXNlcyAoaGFuZGxlZCBlbHNld2hlcmUpLgorCShmZmlfcHJlcF9hcmdzX3Y5KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBWOSBBQkkgYW5kIGxvbmcgbG9uZyBvbiBWOC4KKwkoZmZpX1Y5X3JldHVybl9zdHJ1Y3QpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9WOSBBQkkgZnJvbSA2NGJpdCBjb2RlIGFuZCBGRklfVjggQUJJIGZyb20KKwkzMmJpdCBjb2RlIChub3QgeWV0IGNyb3NzLWFyY2ggY2FsbHMpLgorCSogc3JjL3NwYXJjL3Y4LlM6IEFkZCBzdHJ1Y3QgcmV0dXJuIGRlbGF5IG5vcC4KKwlIYW5kbGUgbG9uZyBsb25nLgorCSogc3JjL3NwYXJjL3Y5LlM6IE5ldyBmaWxlLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IFJldHVybiBzdHJ1Y3R1cmUgcG9pbnRlcgorCWlzIHVzZWQgb24gc3BhcmM2NCBvbmx5IGZvciBzdHJ1Y3R1cmVzIGxhcmdlciB0aGFuIDMyIGJ5dGVzLgorCVBhc3MgYnkgcmVmZXJlbmNlIGZvciBzdHJ1Y3R1cmVzIGlzIGRvbmUgZm9yIHN0cnVjdHVyZSBhcmd1bWVudHMKKwlsYXJnZXIgdGhhbiAxNiBieXRlcy4KKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBVc2UgNjRiaXQgcmludCBvbiBzcGFyYzY0LgorCVJ1biBsb25nIGxvbmcgdGVzdHMgb24gc3BhcmMuCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IFBvaW50ZXIgaXMgNjRiaXQgb24gYWxwaGEgYW5kCisJc3BhcmM2NC4KKwkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IGxvbmcgZG91YmxlIGlzIDEyOCBiaXQgYWxpZ25lZCB0byAxMjggYml0cworCW9uIHNwYXJjNjQuCisJKiBjb25maWd1cmUuaW4gKHNwYXJjLSotbGludXgqKTogTmV3IHN1cHBvcnRlZCB0YXJnZXQuCisJKHNwYXJjNjQtKi1saW51eCopOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtOiBBZGQgdjkuUyB0byBTUEFSQyBmaWxlcy4KKwkqIE1ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkoTElOSyk6IFN1cnJvdW5kICQoQ0NMRCkgaW50byBkb3VibGUgcXVvdGVzLCBzbyB0aGF0IG11bHRpbGliCisJY29tcGlsZXMgd29yayBjb3JyZWN0bHkuCisKKzIwMDAtMDQtMDQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IChpKjg2LSotc29sYXJpcyopOiBOZXcgbGliZmZpIHRhcmdldC4gUGF0Y2gKKwlwcm9wb3NlZCBieSBCcnljZSBNY0tpbmxheS4KKworMjAwMC0wMy0yMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogSGFuZCBlZGl0IGZvciBqYXZhX3Jhd19hcGkubG8uCisKKzIwMDAtMDMtMDggIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWI6IFVwZGF0ZSBmcm9tIHRoZSBnY2MgdHJlZS4KKwlGaXggZm9yIFBSIGxpYmdjai8xNjguCisKKzIwMDAtMDMtMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IEZpeGVkIGlhNjQgYnkgaGFuZC4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluICgtLWVuYWJsZS1tdWx0aWxpYik6IE5ldyBvcHRpb24uCisJKGxpYmZmaV9iYXNlZGlyKTogTmV3IHN1YnN0LgorCShBQ19PVVRQVVQpOiBBZGRlZCBtdWx0aWxpYiBjb2RlLgorCisyMDAwLTAzLTAyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfSUE2NCk6IFVzZSBgaWE2NCcsIG5vdCBgYWxwaGEnLCBhcworCWRpcmVjdG9yeSBuYW1lLgorCisyMDAwLTAyLTI1ICBIYW5zIEJvZWhtIDxib2VobUBhY20ub3JnPgorCisJKiBzcmMvaWE2NC9mZmkuYywgc3JjL2lhNjQvaWE2NF9mbGFncy5oLCBzcmMvaWE2NC91bml4LlM6IE5ldworCWZpbGVzLgorCSogc3JjL3Jhd19hcGkuYyAoZmZpX3RyYW5zbGF0ZV9hcmdzKTogRml4ZWQgdHlwbyBpbiBhcmd1bWVudAorCWxpc3QuCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogVXNlIGZmaV90cmFuc2xhdGVfYXJncywgbm90CisJZmZpX2Nsb3N1cmVfdHJhbnNsYXRlLgorCSogc3JjL2phdmFfcmF3X2FwaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbik6IE5ldyBmdW5jdGlvbi4KKwkobWFpbik6IERlZmluZSBgcmludCcgYXMgbG9uZyBsb25nIG9uIElBNjQuICBBZGRlZCBuZXcgdGVzdCB3aGVuCisJRkZJX0NMT1NVUkVTIGlzIGRlZmluZWQuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChBTElHTik6IFVzZSBzaXplX3QsIG5vdCB1bnNpZ25lZC4KKwkoZmZpX2FiaSk6IFJlY29nbml6ZSBJQTY0LgorCShmZmlfcmF3KTogQWRkZWQgYGZsdCcgZmllbGQuCisJQWRkZWQgIkphdmEgcmF3IEFQSSIgY29kZS4KKwkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIGlhNjQuCisJKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19JQTY0KTogTmV3IG1hY3JvLgorCShsaWJmZmlfbGFfY29tbW9uX1NPVVJDRVMpOiBBZGRlZCBqYXZhX3Jhd19hcGkuYy4KKwkobGliZmZpX2xhX1NPVVJDRVMpOiBEZWZpbmUgaW4gSUE2NCBjYXNlLgorCisyMDAwLTAxLTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0IHdpdGggbmV3ZXIgYXV0b21ha2UuCisKKzE5OTktMTItMzEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkZWQgLUkkKHRvcF9zcmNkaXIpL3NyYy4KKworMTk5OS0wOS0wMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmVkIFBBQ0tBR0UgYW5kIFZFUlNJT04gZGVmaW5lcyBhbmQKKwl1bmRlZnMuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogUGFzcyAzcmQgYXJndW1lbnQgdG8gQU1fSU5JVF9BVVRPTUFLRS4KKwlVc2UgQU1fUFJPR19MSUJUT09MIChhdXRvbWFrZSAxLjQgY29tcGF0aWJpbGl0eSkuCisJKiBhY2NvbmZpZy5oOiBEb24ndCAjdW5kZWYgUEFDS0FHRSBvciBWRVJTSU9OLgorCisxOTk5LTA4LTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogVHJ5IHRvIHdvcmsgYXJvdW5kIG1lc3N5IGhlYWRlciBwcm9ibGVtCisJd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OLgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IENoYW5nZSB2ZXJzaW9uIHRvIDIuMDAtYmV0YS4KKworCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBhY2NvbmZpZy5oIChGRklfTk9fU1RSVUNUUywgRkZJX05PX1JBV19BUEkpOiBEZWZpbmUuCisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9yYXdfY2FsbCk6IFJlbmFtZS4KKworMTk5OS0wOC0wMiAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgPGtyYWJAZG9taW5pcS5pcy5zLnUtdG9reW8uYWMuanA+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1YpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IERpdHRvLgorCShmZmlfcHJlcF9jbG9zdXJlKTogRGl0dG8uCisJKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogRGl0dG8uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogTW9yZSBkaXR0by4KKwkoZmZpX2NhbGxfcmF3KTogRmluYWwgZGl0dG8uCisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBkZWZpbml0aW9ucyBmb3IgY2xvc3VyZSBhbmQgcmF3IEFQSS4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGRlZCBjYXNlIGZvcgorCUZGSV9UWVBFX1VJTlQ2NC4KKworCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9jb21tb25fU09VUkNFUyk6IEFkZGVkIHJhd19hcGkuYworCisJKiBzcmMvcmF3X2FwaS5jOiBOZXcgZmlsZS4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX3Jhdyk6IE5ldyB0eXBlLgorCShVSU5UX0FSRywgU0lOVF9BUkcpOiBOZXcgZGVmaW5lcy4KKwkoZmZpX2Nsb3N1cmUsIGZmaV9yYXdfY2xvc3VyZSk6IE5ldyB0eXBlcy4KKwkoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBOZXcgZGVjbGFyYXRpb25zLgorCisJKiBjb25maWd1cmUuaW46IEFkZCBjaGVjayBmb3IgZW5kaWFubmVzcyBhbmQgc2l6ZW9mIHZvaWQqLgorCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IENhbGwgZml4dXAgcm91dGluZSB2aWEgYXJndW1lbnQsCisJaW5zdGVhZCBvZiBkaXJlY3RseS4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCitUaHUgSnVsICA4IDE0OjI4OjQyIDE5OTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCB4ODYgYW5kIHBvd2VycGMgQmVPUyBjb25maWd1cmF0aW9ucy4KKwlGcm9tIE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4uCisKKzE5OTktMDUtMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCB3YXJuaW5nIGFib3V0IHRoaXMgYmVpbmcgYmV0YSBjb2RlLgorCVJlbW92ZSBzcmMvTWFrZWZpbGUuYW0gZnJvbSB0aGUgcGljdHVyZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogTWFrZWZpbGUuYW06IE1vdmUgbG9naWMgZnJvbSBzcmMvTWFrZWZpbGUuYW0uICBBZGQgY2hhbmdlcworCXRvIHN1cHBvcnQgbGliZmZpIGFzIGEgdGFyZ2V0IGxpYnJhcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBsdGNvbmZpZywgbHRtYWluLnNoOgorCVVwZ3JhZGVkIHRvIG5ldyBhdXRvY29uZiwgYXV0b21ha2UsIGxpYnRvb2wuCisKKwkqIFJFQURNRTogVHdlYWtzLgorCisJKiBMSUNFTlNFOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCisKKwkqIHNyYy9NYWtlZmlsZS5hbSwgc3JjL01ha2VmaWxlLmluOiBSZW1vdmVkLgorCisxOTk4LTExLTI5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9DaGFuZ2VMb2c6IFJlbW92ZWQuCisJKiBzcmMvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCSogc3JjL21pcHMvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCSogc3JjL3NwYXJjL0NoYW5nZUxvZzogUmVtYm92ZWQuCisJKiBzcmMveDg2L0NoYW5nZUxvZzogUmVtb3ZlZC4KKworCSogQ2hhbmdlTG9nLnYxOiBDcmVhdGVkLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cudjEgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy52MQppbmRleCAzNjk4MjBjLi5hZjNhMzc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy52MQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy52MQpAQCAtMiw3ICsyLDcgQEAKIAogVmVyc2lvbiAxIG9mIGxpYmZmaSBoYWQgcGVyLWRpcmVjdG9yeSBDaGFuZ2VMb2dzLiAgQ3VycmVudCBhbmQgZnV0dXJlCiB2ZXJzaW9ucyBoYXZlIGEgc2luZ2xlIENoYW5nZUxvZyBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeS4gIFRoZQotdmVyc2lvbiAxIENoYW5nZUxvZ3MgaGF2ZSBhbGwgYmVlbiBjb25jYXRvbmF0ZWQgaW50byB0aGlzIGZpbGUgZm9yCit2ZXJzaW9uIDEgQ2hhbmdlTG9ncyBoYXZlIGFsbCBiZWVuIGNvbmNhdGVuYXRlZCBpbnRvIHRoaXMgZmlsZSBmb3IKIGZ1dHVyZSByZWZlcmVuY2Ugb25seS4KIAogLS0tIGxpYmZmaSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UKaW5kZXggYWE2MDM0Mi4uYTY2ZmFiNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9MSUNFTlNFCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTElDRU5TRQpAQCAtMSw0ICsxLDQgQEAKLWxpYmZmaSAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDEyICBBbnRob255IEdyZWVuLCBSZWQgSGF0LCBJbmMgYW5kIG90aGVycy4KK2xpYmZmaSAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDE0ICBBbnRob255IEdyZWVuLCBSZWQgSGF0LCBJbmMgYW5kIG90aGVycy4KIFNlZSBzb3VyY2UgZmlsZXMgZm9yIGRldGFpbHMuCiAKIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5hbSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0KaW5kZXggYmYwMTU2Zi4uMWRjZGM4MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5hbQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmFtCkBAIC02LDEwICs2LDExIEBACiAKIFNVQkRJUlMgPSBpbmNsdWRlIHRlc3RzdWl0ZSBtYW4KIAotRVhUUkFfRElTVCA9IExJQ0VOU0UgQ2hhbmdlTG9nLnYxIENoYW5nZUxvZy5saWJnY2ogY29uZmlndXJlLmhvc3QJXAorRVhUUkFfRElTVCA9IExJQ0VOU0UgQ2hhbmdlTG9nLnYxIENoYW5nZUxvZy5saWJnY2oJCQlcCiAJIHNyYy9hYXJjaDY0L2ZmaS5jIHNyYy9hYXJjaDY0L2ZmaXRhcmdldC5oIHNyYy9hYXJjaDY0L3N5c3YuUwlcCi0JIGJ1aWxkLWlvcy5zaCBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCQkJXAotCSBzcmMvYWxwaGEvZmZpdGFyZ2V0Lmggc3JjL2FybS9mZmkuYyBzcmMvYXJtL3N5c3YuUwkJXAorCSBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCQkJXAorCSBzcmMvYWxwaGEvZmZpdGFyZ2V0Lmggc3JjL2FyYy9mZmkuYyBzcmMvYXJjL2FyY29tcGFjdC5TCVwKKwkgc3JjL2FyYy9mZml0YXJnZXQuaCBzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TCQlcCiAJIHNyYy9hcm0vZmZpdGFyZ2V0Lmggc3JjL2F2cjMyL2ZmaS5jIHNyYy9hdnIzMi9zeXN2LlMJCVwKIAkgc3JjL2F2cjMyL2ZmaXRhcmdldC5oIHNyYy9jcmlzL2ZmaS5jIHNyYy9jcmlzL3N5c3YuUwkJXAogCSBzcmMvY3Jpcy9mZml0YXJnZXQuaCBzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC9mZml0YXJnZXQuaAlcCkBAIC0xOSw4ICsyMCwxMiBAQAogCSBzcmMvbW94aWUvZmZpdGFyZ2V0Lmggc3JjL21veGllL2VhYmkuUyBzcmMvbWlwcy9mZml0YXJnZXQuaAlcCiAJIHNyYy9tMzJyL2ZmaS5jIHNyYy9tMzJyL3N5c3YuUyBzcmMvbTMyci9mZml0YXJnZXQuaAkJXAogCSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMgc3JjL202OGsvZmZpdGFyZ2V0LmgJCVwKKwkgc3JjL204OGsvZmZpLmMgc3JjL204OGsvb2JzZC5TIHNyYy9tODhrL2ZmaXRhcmdldC5oCQlcCiAJIHNyYy9taWNyb2JsYXplL2ZmaS5jIHNyYy9taWNyb2JsYXplL3N5c3YuUwkJCVwKLQkgc3JjL21pY3JvYmxhemUvZmZpdGFyZ2V0Lmggc3JjL3Bvd2VycGMvZmZpLmMJCQlcCisJIHNyYy9taWNyb2JsYXplL2ZmaXRhcmdldC5oCQkJCQlcCisJIHNyYy9uaW9zMi9mZmkuYyBzcmMvbmlvczIvZmZpdGFyZ2V0Lmggc3JjL25pb3MyL3N5c3YuUwkJXAorCSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9mZmlfcG93ZXJwYy5oCQkJXAorCSBzcmMvcG93ZXJwYy9mZmlfc3lzdi5jIHNyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMJCVwKIAkgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUwkJCVwKIAkgc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwlcCiAJIHNyYy9wb3dlcnBjL2FzbS5oIHNyYy9wb3dlcnBjL2FpeC5TIHNyYy9wb3dlcnBjL2Rhcndpbi5TCVwKQEAgLTM4LDE0ICs0MywxNCBAQAogCSBzcmMvYmZpbi9mZml0YXJnZXQuaCBzcmMvYmZpbi9zeXN2LlMgc3JjL2Zydi9lYWJpLlMJCVwKIAkgc3JjL2Zydi9mZml0YXJnZXQuaCBzcmMvZGxtYWxsb2MuYyBzcmMvdGlsZS9mZmkuYwkJXAogCSBzcmMvdGlsZS9mZml0YXJnZXQuaCBzcmMvdGlsZS90aWxlLlMgbGlidG9vbC12ZXJzaW9uCQlcCisJIHNyYy92YXgvZmZpLmMgc3JjL3ZheC9mZml0YXJnZXQuaCBzcmMvdmF4L2VsZmJzZC5TCQlcCiAJIHNyYy94dGVuc2EvZmZpdGFyZ2V0Lmggc3JjL3h0ZW5zYS9mZmkuYyBzcmMveHRlbnNhL3N5c3YuUwlcCiAJIENoYW5nZUxvZy5saWJmZmkgbTQvbGlidG9vbC5tNCBtNC9sdH5vYnNvbGV0ZS5tNAkJXAogCSBtNC9sdG9wdGlvbnMubTQgbTQvbHRzdWdhci5tNCBtNC9sdHZlcnNpb24ubTQJCQlcCiAJIG00L2x0dmVyc2lvbi5tNCBzcmMvYXJtL2dlbnRyYW1wLnNoIHNyYy9kZWJ1Zy5jIG1zdmNjLnNoCVwKLQkgZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weQkJCQlcCi0JIGdlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHkJCQkJXAorCSBnZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5CQkJCVwKIAkgbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogc3JjL2FybS90cmFtcG9saW5lLlMJCVwKLQkgbGlidG9vbC1sZGZsYWdzCisJIGxpYnRvb2wtbGRmbGFncyBDaGFuZ2VMb2cubGliZmZpLTMuMQogCiBpbmZvX1RFWElORk9TID0gZG9jL2xpYmZmaS50ZXhpCiAKQEAgLTU5LDM5ICs2NCwzOSBAQAogIyB2YWx1ZXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBtYWtlIHZhcmlhYmxlcywgYXMgaXMgdGhlIGNhc2UgZm9yIENDIGFuZAogIyBmcmllbmRzIHdoZW4gd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUuCiBBTV9NQUtFRkxBR1MgPSBcCi0JIkFSX0ZMQUdTPSQoQVJfRkxBR1MpIiBcCi0JIkNDX0ZPUl9CVUlMRD0kKENDX0ZPUl9CVUlMRCkiIFwKLQkiQ0ZMQUdTPSQoQ0ZMQUdTKSIgXAotCSJDWFhGTEFHUz0kKENYWEZMQUdTKSIgXAotCSJDRkxBR1NfRk9SX0JVSUxEPSQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKLQkiQ0ZMQUdTX0ZPUl9UQVJHRVQ9JChDRkxBR1NfRk9SX1RBUkdFVCkiIFwKLQkiSU5TVEFMTD0kKElOU1RBTEwpIiBcCi0JIklOU1RBTExfREFUQT0kKElOU1RBTExfREFUQSkiIFwKLQkiSU5TVEFMTF9QUk9HUkFNPSQoSU5TVEFMTF9QUk9HUkFNKSIgXAotCSJJTlNUQUxMX1NDUklQVD0kKElOU1RBTExfU0NSSVBUKSIgXAotCSJKQzFGTEFHUz0kKEpDMUZMQUdTKSIgXAotCSJMREZMQUdTPSQoTERGTEFHUykiIFwKLQkiTElCQ0ZMQUdTPSQoTElCQ0ZMQUdTKSIgXAotCSJMSUJDRkxBR1NfRk9SX1RBUkdFVD0kKExJQkNGTEFHU19GT1JfVEFSR0VUKSIgXAotCSJNQUtFPSQoTUFLRSkiIFwKLQkiTUFLRUlORk89JChNQUtFSU5GTykgJChNQUtFSU5GT0ZMQUdTKSIgXAotCSJQSUNGTEFHPSQoUElDRkxBRykiIFwKLQkiUElDRkxBR19GT1JfVEFSR0VUPSQoUElDRkxBR19GT1JfVEFSR0VUKSIgXAotCSJSVU5URVNURkxBR1M9JChSVU5URVNURkxBR1MpIiBcCi0JIlNIRUxMPSQoU0hFTEwpIiBcCi0JImV4ZWNfcHJlZml4PSQoZXhlY19wcmVmaXgpIiBcCi0JImluZm9kaXI9JChpbmZvZGlyKSIgXAotCSJsaWJkaXI9JChsaWJkaXIpIiBcCi0JIm1hbmRpcj0kKG1hbmRpcikiIFwKLQkicHJlZml4PSQocHJlZml4KSIgXAotCSJBUj0kKEFSKSIgXAotCSJBUz0kKEFTKSIgXAotCSJDQz0kKENDKSIgXAotCSJDWFg9JChDWFgpIiBcCi0JIkxEPSQoTEQpIiBcCi0JIk5NPSQoTk0pIiBcCi0JIlJBTkxJQj0kKFJBTkxJQikiIFwKLQkiREVTVERJUj0kKERFU1RESVIpIgorCSdBUl9GTEFHUz0kKEFSX0ZMQUdTKScgXAorCSdDQ19GT1JfQlVJTEQ9JChDQ19GT1JfQlVJTEQpJyBcCisJJ0NGTEFHUz0kKENGTEFHUyknIFwKKwknQ1hYRkxBR1M9JChDWFhGTEFHUyknIFwKKwknQ0ZMQUdTX0ZPUl9CVUlMRD0kKENGTEFHU19GT1JfQlVJTEQpJyBcCisJJ0NGTEFHU19GT1JfVEFSR0VUPSQoQ0ZMQUdTX0ZPUl9UQVJHRVQpJyBcCisJJ0lOU1RBTEw9JChJTlNUQUxMKScgXAorCSdJTlNUQUxMX0RBVEE9JChJTlNUQUxMX0RBVEEpJyBcCisJJ0lOU1RBTExfUFJPR1JBTT0kKElOU1RBTExfUFJPR1JBTSknIFwKKwknSU5TVEFMTF9TQ1JJUFQ9JChJTlNUQUxMX1NDUklQVCknIFwKKwknSkMxRkxBR1M9JChKQzFGTEFHUyknIFwKKwknTERGTEFHUz0kKExERkxBR1MpJyBcCisJJ0xJQkNGTEFHUz0kKExJQkNGTEFHUyknIFwKKwknTElCQ0ZMQUdTX0ZPUl9UQVJHRVQ9JChMSUJDRkxBR1NfRk9SX1RBUkdFVCknIFwKKwknTUFLRT0kKE1BS0UpJyBcCisJJ01BS0VJTkZPPSQoTUFLRUlORk8pICQoTUFLRUlORk9GTEFHUyknIFwKKwknUElDRkxBRz0kKFBJQ0ZMQUcpJyBcCisJJ1BJQ0ZMQUdfRk9SX1RBUkdFVD0kKFBJQ0ZMQUdfRk9SX1RBUkdFVCknIFwKKwknUlVOVEVTVEZMQUdTPSQoUlVOVEVTVEZMQUdTKScgXAorCSdTSEVMTD0kKFNIRUxMKScgXAorCSdleGVjX3ByZWZpeD0kKGV4ZWNfcHJlZml4KScgXAorCSdpbmZvZGlyPSQoaW5mb2RpciknIFwKKwknbGliZGlyPSQobGliZGlyKScgXAorCSdtYW5kaXI9JChtYW5kaXIpJyBcCisJJ3ByZWZpeD0kKHByZWZpeCknIFwKKwknQVI9JChBUiknIFwKKwknQVM9JChBUyknIFwKKwknQ0M9JChDQyknIFwKKwknQ1hYPSQoQ1hYKScgXAorCSdMRD0kKExEKScgXAorCSdOTT0kKE5NKScgXAorCSdSQU5MSUI9JChSQU5MSUIpJyBcCisJJ0RFU1RESVI9JChERVNURElSKScKIAogIyBTdWJkaXIgcnVsZXMgcmVseSBvbiAkKEZMQUdTX1RPX1BBU1MpCiBGTEFHU19UT19QQVNTID0gJChBTV9NQUtFRkxBR1MpCkBAIC0xMjAsMTAgKzEyNSwxMCBAQAogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9iZmluL2ZmaS5jIHNyYy9iZmluL3N5c3YuUwogZW5kaWYKIGlmIFg4Ngotbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TIHNyYy94ODYvd2luMzIuUwogZW5kaWYKIGlmIFg4Nl9GUkVFQlNECi1ub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L2ZyZWVic2QuUworbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9mcmVlYnNkLlMgc3JjL3g4Ni93aW4zMi5TCiBlbmRpZgogaWYgWDg2X1dJTjMyCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3dpbjMyLlMKQEAgLTEzMyw2ICsxMzgsOSBAQAogZW5kaWYKIGlmIFg4Nl9EQVJXSU4KIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luNjQuUworaWYgWDg2X0RBUldJTjMyCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni93aW4zMi5TCitlbmRpZgogZW5kaWYKIGlmIFNQQVJDCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OC5TIHNyYy9zcGFyYy92OS5TCkBAIC0xNDksMTQgKzE1NywyMCBAQAogaWYgTTY4Swogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9tNjhrL2ZmaS5jIHNyYy9tNjhrL3N5c3YuUwogZW5kaWYKK2lmIE04OEsKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvbTg4ay9mZmkuYyBzcmMvbTg4ay9vYnNkLlMKK2VuZGlmCiBpZiBNT1hJRQogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9tb3hpZS9mZmkuYyBzcmMvbW94aWUvZWFiaS5TCiBlbmRpZgogaWYgTUlDUk9CTEFaRQogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9taWNyb2JsYXplL2ZmaS5jIHNyYy9taWNyb2JsYXplL3N5c3YuUwogZW5kaWYKK2lmIE5JT1MyCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL25pb3MyL3N5c3YuUyBzcmMvbmlvczIvZmZpLmMKK2VuZGlmCiBpZiBQT1dFUlBDCi1ub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgc3JjL3Bvd2VycGMvbGludXg2NC5TIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvZmZpX3N5c3YuYyBzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwogZW5kaWYKIGlmIFBPV0VSUENfQUlYCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2FpeC5TIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMKQEAgLTE2NSwxMSArMTc5LDE0IEBACiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2Rhcndpbi5TIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKIGVuZGlmCiBpZiBQT1dFUlBDX0ZSRUVCU0QKLW5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUworbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL2ZmaV9zeXN2LmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKIGVuZGlmCiBpZiBBQVJDSDY0CiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2FhcmNoNjQvc3lzdi5TIHNyYy9hYXJjaDY0L2ZmaS5jCiBlbmRpZgoraWYgQVJDCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2FyYy9hcmNvbXBhY3QuUyBzcmMvYXJjL2ZmaS5jCitlbmRpZgogaWYgQVJNCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYwogaWYgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRQpAQCAtMjEyLDE0ICsyMjksMjYgQEAKIGlmIE1FVEFHCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL21ldGFnL3N5c3YuUyBzcmMvbWV0YWcvZmZpLmMKIGVuZGlmCitpZiBWQVgKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvdmF4L2VsZmJzZC5TIHNyYy92YXgvZmZpLmMKK2VuZGlmCiAKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0gJChsaWJmZmlfbGFfU09VUkNFUykKIG5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyA9ICQobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKQogCiBMVExERkxBR1MgPSAkKHNoZWxsICQoU0hFTEwpICQodG9wX3NyY2RpcikvbGlidG9vbC1sZGZsYWdzICQoTERGTEFHUykpCiAKK0FNX0NGTEFHUyA9CitpZiBGRklfREVCVUcKKyMgQnVpbGQgZGVidWcuIERlZmluZSBGRklfREVCVUcgb24gdGhlIGNvbW1hbmRsaW5lIHNvIHRoYXQsIHdoZW4gYnVpbGRpbmcgd2l0aAorIyBNU1ZDLCBpdCBjYW4gbGluayBhZ2FpbnN0IHRoZSBkZWJ1ZyBDUlQuCitBTV9DRkxBR1MgKz0gLURGRklfREVCVUcKK2VuZGlmCisKIGxpYmZmaV9sYV9MREZMQUdTID0gLW5vLXVuZGVmaW5lZCAtdmVyc2lvbi1pbmZvIGBncmVwIC12ICdeXCMnICQoc3JjZGlyKS9saWJ0b29sLXZlcnNpb25gICQoTFRMREZMQUdTKSAkKEFNX0xUTERGTEFHUykKIAogQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUlpbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKS9zcmMKIEFNX0NDQVNGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpCiAKK2Rpc3QtaG9vazoKKwlpZiBbIC1kICQodG9wX3NyY2RpcikvLmdpdCBdIDsgdGhlbiAoY2QgJCh0b3Bfc3JjZGlyKTsgZ2l0IGxvZyAtLW5vLWRlY29yYXRlKSA7IGVsc2UgZWNobyAnU2VlIGdpdCBsb2cgZm9yIGhpc3RvcnkuJyA7IGZpID4gJChkaXN0ZGlyKS9DaGFuZ2VMb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluCmluZGV4IDRiNmFiZTUuLjRhNTdhYmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5pbgpAQCAtMSw3ICsxLDcgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuMiBmcm9tIE1ha2VmaWxlLmFtLgorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMy40IGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtMTYsMjMgKzE2LDUxIEBACiAKIAogVlBBVEggPSBAc3JjZGlyQAotYW1fX21ha2VfZHJ5cnVuID0gXAotICB7IFwKLSAgICBhbV9fZHJ5PW5vOyBcCithbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCithbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisgICAgICA/KSA7OyBcCisgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorICAgICAgICAgZXhpdCAxOzsgXAorICBlc2FjOyBcCisgIGhhc19vcHQ9bm87IFwKKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorICBlbHNlIFwKICAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKICAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKLSAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAotICAgICAgKikgXAotICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAotICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKLSAgICAgICAgICAgICo9KnwtLSopIDs7IFwKLSAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAotICAgICAgICAgIGVzYWM7IFwKLSAgICAgICAgZG9uZTs7IFwKKyAgICAgICAgYnM9XFw7IFwKKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCiAgICAgZXNhYzsgXAotICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCi0gIH0KKyAgZmk7IFwKKyAgc2tpcF9uZXh0PW5vOyBcCisgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKyAgeyBcCisgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKyAgfTsgXAorICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgZXNhYzsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKyAgICBlc2FjOyBcCisgIGRvbmU7IFwKKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCithbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKIHBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKQEAgLTU1LDQ0ICs4Myw1MiBAQAogQEZGSV9ERUJVR19UUlVFQGFtX19hcHBlbmRfMSA9IHNyYy9kZWJ1Zy5jCiBATUlQU19UUlVFQGFtX19hcHBlbmRfMiA9IHNyYy9taXBzL2ZmaS5jIHNyYy9taXBzL28zMi5TIHNyYy9taXBzL24zMi5TCiBAQkZJTl9UUlVFQGFtX19hcHBlbmRfMyA9IHNyYy9iZmluL2ZmaS5jIHNyYy9iZmluL3N5c3YuUwotQFg4Nl9UUlVFQGFtX19hcHBlbmRfNCA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKLUBYODZfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfNSA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9mcmVlYnNkLlMKK0BYODZfVFJVRUBhbV9fYXBwZW5kXzQgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TIHNyYy94ODYvd2luMzIuUworQFg4Nl9GUkVFQlNEX1RSVUVAYW1fX2FwcGVuZF81ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L2ZyZWVic2QuUyBzcmMveDg2L3dpbjMyLlMKIEBYODZfV0lOMzJfVFJVRUBhbV9fYXBwZW5kXzYgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luMzIuUwogQFg4Nl9XSU42NF9UUlVFQGFtX19hcHBlbmRfNyA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni93aW42NC5TCiBAWDg2X0RBUldJTl9UUlVFQGFtX19hcHBlbmRfOCA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9kYXJ3aW4uUyBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni9kYXJ3aW42NC5TCi1AU1BBUkNfVFJVRUBhbV9fYXBwZW5kXzkgPSBzcmMvc3BhcmMvZmZpLmMgc3JjL3NwYXJjL3Y4LlMgc3JjL3NwYXJjL3Y5LlMKLUBBTFBIQV9UUlVFQGFtX19hcHBlbmRfMTAgPSBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCi1ASUE2NF9UUlVFQGFtX19hcHBlbmRfMTEgPSBzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC91bml4LlMKLUBNMzJSX1RSVUVAYW1fX2FwcGVuZF8xMiA9IHNyYy9tMzJyL3N5c3YuUyBzcmMvbTMyci9mZmkuYwotQE02OEtfVFJVRUBhbV9fYXBwZW5kXzEzID0gc3JjL202OGsvZmZpLmMgc3JjL202OGsvc3lzdi5TCi1ATU9YSUVfVFJVRUBhbV9fYXBwZW5kXzE0ID0gc3JjL21veGllL2ZmaS5jIHNyYy9tb3hpZS9lYWJpLlMKLUBNSUNST0JMQVpFX1RSVUVAYW1fX2FwcGVuZF8xNSA9IHNyYy9taWNyb2JsYXplL2ZmaS5jIHNyYy9taWNyb2JsYXplL3N5c3YuUwotQFBPV0VSUENfVFJVRUBhbV9fYXBwZW5kXzE2ID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgc3JjL3Bvd2VycGMvbGludXg2NC5TIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCi1AUE9XRVJQQ19BSVhfVFJVRUBhbV9fYXBwZW5kXzE3ID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2FpeC5TIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMKLUBQT1dFUlBDX0RBUldJTl9UUlVFQGFtX19hcHBlbmRfMTggPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgc3JjL3Bvd2VycGMvZGFyd2luLlMgc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUwotQFBPV0VSUENfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfMTkgPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwotQEFBUkNINjRfVFJVRUBhbV9fYXBwZW5kXzIwID0gc3JjL2FhcmNoNjQvc3lzdi5TIHNyYy9hYXJjaDY0L2ZmaS5jCi1AQVJNX1RSVUVAYW1fX2FwcGVuZF8yMSA9IHNyYy9hcm0vc3lzdi5TIHNyYy9hcm0vZmZpLmMKLUBBUk1fVFJVRUBARkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRV9UUlVFQGFtX19hcHBlbmRfMjIgPSBzcmMvYXJtL3RyYW1wb2xpbmUuUwotQEFWUjMyX1RSVUVAYW1fX2FwcGVuZF8yMyA9IHNyYy9hdnIzMi9zeXN2LlMgc3JjL2F2cjMyL2ZmaS5jCi1ATElCRkZJX0NSSVNfVFJVRUBhbV9fYXBwZW5kXzI0ID0gc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaS5jCi1ARlJWX1RSVUVAYW1fX2FwcGVuZF8yNSA9IHNyYy9mcnYvZWFiaS5TIHNyYy9mcnYvZmZpLmMKLUBTMzkwX1RSVUVAYW1fX2FwcGVuZF8yNiA9IHNyYy9zMzkwL3N5c3YuUyBzcmMvczM5MC9mZmkuYwotQFg4Nl82NF9UUlVFQGFtX19hcHBlbmRfMjcgPSBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni91bml4NjQuUyBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCi1AU0hfVFJVRUBhbV9fYXBwZW5kXzI4ID0gc3JjL3NoL3N5c3YuUyBzcmMvc2gvZmZpLmMKLUBTSDY0X1RSVUVAYW1fX2FwcGVuZF8yOSA9IHNyYy9zaDY0L3N5c3YuUyBzcmMvc2g2NC9mZmkuYwotQFBBX0xJTlVYX1RSVUVAYW1fX2FwcGVuZF8zMCA9IHNyYy9wYS9saW51eC5TIHNyYy9wYS9mZmkuYwotQFBBX0hQVVhfVFJVRUBhbV9fYXBwZW5kXzMxID0gc3JjL3BhL2hwdXgzMi5TIHNyYy9wYS9mZmkuYwotQFRJTEVfVFJVRUBhbV9fYXBwZW5kXzMyID0gc3JjL3RpbGUvdGlsZS5TIHNyYy90aWxlL2ZmaS5jCi1AWFRFTlNBX1RSVUVAYW1fX2FwcGVuZF8zMyA9IHNyYy94dGVuc2Evc3lzdi5TIHNyYy94dGVuc2EvZmZpLmMKLUBNRVRBR19UUlVFQGFtX19hcHBlbmRfMzQgPSBzcmMvbWV0YWcvc3lzdi5TIHNyYy9tZXRhZy9mZmkuYworQFg4Nl9EQVJXSU4zMl9UUlVFQEBYODZfREFSV0lOX1RSVUVAYW1fX2FwcGVuZF85ID0gc3JjL3g4Ni93aW4zMi5TCitAU1BBUkNfVFJVRUBhbV9fYXBwZW5kXzEwID0gc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OC5TIHNyYy9zcGFyYy92OS5TCitAQUxQSEFfVFJVRUBhbV9fYXBwZW5kXzExID0gc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUworQElBNjRfVFJVRUBhbV9fYXBwZW5kXzEyID0gc3JjL2lhNjQvZmZpLmMgc3JjL2lhNjQvdW5peC5TCitATTMyUl9UUlVFQGFtX19hcHBlbmRfMTMgPSBzcmMvbTMyci9zeXN2LlMgc3JjL20zMnIvZmZpLmMKK0BNNjhLX1RSVUVAYW1fX2FwcGVuZF8xNCA9IHNyYy9tNjhrL2ZmaS5jIHNyYy9tNjhrL3N5c3YuUworQE04OEtfVFJVRUBhbV9fYXBwZW5kXzE1ID0gc3JjL204OGsvZmZpLmMgc3JjL204OGsvb2JzZC5TCitATU9YSUVfVFJVRUBhbV9fYXBwZW5kXzE2ID0gc3JjL21veGllL2ZmaS5jIHNyYy9tb3hpZS9lYWJpLlMKK0BNSUNST0JMQVpFX1RSVUVAYW1fX2FwcGVuZF8xNyA9IHNyYy9taWNyb2JsYXplL2ZmaS5jIHNyYy9taWNyb2JsYXplL3N5c3YuUworQE5JT1MyX1RSVUVAYW1fX2FwcGVuZF8xOCA9IHNyYy9uaW9zMi9zeXN2LlMgc3JjL25pb3MyL2ZmaS5jCitAUE9XRVJQQ19UUlVFQGFtX19hcHBlbmRfMTkgPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9mZmlfc3lzdi5jIHNyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgc3JjL3Bvd2VycGMvbGludXg2NC5TIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCitAUE9XRVJQQ19BSVhfVFJVRUBhbV9fYXBwZW5kXzIwID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2FpeC5TIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMKK0BQT1dFUlBDX0RBUldJTl9UUlVFQGFtX19hcHBlbmRfMjEgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgc3JjL3Bvd2VycGMvZGFyd2luLlMgc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUworQFBPV0VSUENfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfMjIgPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9mZmlfc3lzdi5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCitAQUFSQ0g2NF9UUlVFQGFtX19hcHBlbmRfMjMgPSBzcmMvYWFyY2g2NC9zeXN2LlMgc3JjL2FhcmNoNjQvZmZpLmMKK0BBUkNfVFJVRUBhbV9fYXBwZW5kXzI0ID0gc3JjL2FyYy9hcmNvbXBhY3QuUyBzcmMvYXJjL2ZmaS5jCitAQVJNX1RSVUVAYW1fX2FwcGVuZF8yNSA9IHNyYy9hcm0vc3lzdi5TIHNyYy9hcm0vZmZpLmMKK0BBUk1fVFJVRUBARkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRV9UUlVFQGFtX19hcHBlbmRfMjYgPSBzcmMvYXJtL3RyYW1wb2xpbmUuUworQEFWUjMyX1RSVUVAYW1fX2FwcGVuZF8yNyA9IHNyYy9hdnIzMi9zeXN2LlMgc3JjL2F2cjMyL2ZmaS5jCitATElCRkZJX0NSSVNfVFJVRUBhbV9fYXBwZW5kXzI4ID0gc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaS5jCitARlJWX1RSVUVAYW1fX2FwcGVuZF8yOSA9IHNyYy9mcnYvZWFiaS5TIHNyYy9mcnYvZmZpLmMKK0BTMzkwX1RSVUVAYW1fX2FwcGVuZF8zMCA9IHNyYy9zMzkwL3N5c3YuUyBzcmMvczM5MC9mZmkuYworQFg4Nl82NF9UUlVFQGFtX19hcHBlbmRfMzEgPSBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni91bml4NjQuUyBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCitAU0hfVFJVRUBhbV9fYXBwZW5kXzMyID0gc3JjL3NoL3N5c3YuUyBzcmMvc2gvZmZpLmMKK0BTSDY0X1RSVUVAYW1fX2FwcGVuZF8zMyA9IHNyYy9zaDY0L3N5c3YuUyBzcmMvc2g2NC9mZmkuYworQFBBX0xJTlVYX1RSVUVAYW1fX2FwcGVuZF8zNCA9IHNyYy9wYS9saW51eC5TIHNyYy9wYS9mZmkuYworQFBBX0hQVVhfVFJVRUBhbV9fYXBwZW5kXzM1ID0gc3JjL3BhL2hwdXgzMi5TIHNyYy9wYS9mZmkuYworQFRJTEVfVFJVRUBhbV9fYXBwZW5kXzM2ID0gc3JjL3RpbGUvdGlsZS5TIHNyYy90aWxlL2ZmaS5jCitAWFRFTlNBX1RSVUVAYW1fX2FwcGVuZF8zNyA9IHNyYy94dGVuc2Evc3lzdi5TIHNyYy94dGVuc2EvZmZpLmMKK0BNRVRBR19UUlVFQGFtX19hcHBlbmRfMzggPSBzcmMvbWV0YWcvc3lzdi5TIHNyYy9tZXRhZy9mZmkuYworQFZBWF9UUlVFQGFtX19hcHBlbmRfMzkgPSBzcmMvdmF4L2VsZmJzZC5TIHNyYy92YXgvZmZpLmMKKyMgQnVpbGQgZGVidWcuIERlZmluZSBGRklfREVCVUcgb24gdGhlIGNvbW1hbmRsaW5lIHNvIHRoYXQsIHdoZW4gYnVpbGRpbmcgd2l0aAorIyBNU1ZDLCBpdCBjYW4gbGluayBhZ2FpbnN0IHRoZSBkZWJ1ZyBDUlQuCitARkZJX0RFQlVHX1RSVUVAYW1fX2FwcGVuZF80MCA9IC1ERkZJX0RFQlVHCiBzdWJkaXIgPSAuCi1ESVNUX0NPTU1PTiA9IFJFQURNRSAkKGFtX19jb25maWd1cmVfZGVwcykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKLQkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL2RvYy9zdGFtcC12dGkgXAotCSQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpICQoc3JjZGlyKS9mZmljb25maWcuaC5pbiBcCi0JJChzcmNkaXIpL2xpYmZmaS5wYy5pbiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBDaGFuZ2VMb2cgXAotCWNvbXBpbGUgY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgZGVwY29tcCBpbnN0YWxsLXNoIGx0bWFpbi5zaCBcCi0JbWRhdGUtc2ggbWlzc2luZyB0ZXhpbmZvLnRleAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKGFtX19jb25maWd1cmVfZGVwcykgXAorCSQoc3JjZGlyKS9mZmljb25maWcuaC5pbiAkKHNyY2RpcikvbGliZmZpLnBjLmluIGRlcGNvbXAgXAorCW1kYXRlLXNoICQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpICQoc3JjZGlyKS9kb2Mvc3RhbXAtdnRpIFwKKwl0ZXhpbmZvLnRleCBSRUFETUUgY29tcGlsZSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIFwKKwltaXNzaW5nIGx0bWFpbi5zaAogQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAogYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYXNtY2ZpLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L2F4X2FwcGVuZF9mbGFnLm00IFwKQEAgLTE1NCw1MCArMTkwLDYwIEBACiBATUlQU19UUlVFQGFtX19vYmplY3RzXzIgPSBzcmMvbWlwcy9mZmkubG8gc3JjL21pcHMvbzMyLmxvIFwKIEBNSVBTX1RSVUVACXNyYy9taXBzL24zMi5sbwogQEJGSU5fVFJVRUBhbV9fb2JqZWN0c18zID0gc3JjL2JmaW4vZmZpLmxvIHNyYy9iZmluL3N5c3YubG8KLUBYODZfVFJVRUBhbV9fb2JqZWN0c180ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9zeXN2LmxvCi1AWDg2X0ZSRUVCU0RfVFJVRUBhbV9fb2JqZWN0c181ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9mcmVlYnNkLmxvCitAWDg2X1RSVUVAYW1fX29iamVjdHNfNCA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvc3lzdi5sbyBcCitAWDg2X1RSVUVACXNyYy94ODYvd2luMzIubG8KK0BYODZfRlJFRUJTRF9UUlVFQGFtX19vYmplY3RzXzUgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L2ZyZWVic2QubG8gXAorQFg4Nl9GUkVFQlNEX1RSVUVACXNyYy94ODYvd2luMzIubG8KIEBYODZfV0lOMzJfVFJVRUBhbV9fb2JqZWN0c182ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni93aW4zMi5sbwogQFg4Nl9XSU42NF9UUlVFQGFtX19vYmplY3RzXzcgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L3dpbjY0LmxvCiBAWDg2X0RBUldJTl9UUlVFQGFtX19vYmplY3RzXzggPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L2Rhcndpbi5sbyBcCiBAWDg2X0RBUldJTl9UUlVFQAlzcmMveDg2L2ZmaTY0LmxvIHNyYy94ODYvZGFyd2luNjQubG8KLUBTUEFSQ19UUlVFQGFtX19vYmplY3RzXzkgPSBzcmMvc3BhcmMvZmZpLmxvIHNyYy9zcGFyYy92OC5sbyBcCitAWDg2X0RBUldJTjMyX1RSVUVAQFg4Nl9EQVJXSU5fVFJVRUBhbV9fb2JqZWN0c185ID0gc3JjL3g4Ni93aW4zMi5sbworQFNQQVJDX1RSVUVAYW1fX29iamVjdHNfMTAgPSBzcmMvc3BhcmMvZmZpLmxvIHNyYy9zcGFyYy92OC5sbyBcCiBAU1BBUkNfVFJVRUAJc3JjL3NwYXJjL3Y5LmxvCi1AQUxQSEFfVFJVRUBhbV9fb2JqZWN0c18xMCA9IHNyYy9hbHBoYS9mZmkubG8gc3JjL2FscGhhL29zZi5sbwotQElBNjRfVFJVRUBhbV9fb2JqZWN0c18xMSA9IHNyYy9pYTY0L2ZmaS5sbyBzcmMvaWE2NC91bml4LmxvCi1ATTMyUl9UUlVFQGFtX19vYmplY3RzXzEyID0gc3JjL20zMnIvc3lzdi5sbyBzcmMvbTMyci9mZmkubG8KLUBNNjhLX1RSVUVAYW1fX29iamVjdHNfMTMgPSBzcmMvbTY4ay9mZmkubG8gc3JjL202OGsvc3lzdi5sbwotQE1PWElFX1RSVUVAYW1fX29iamVjdHNfMTQgPSBzcmMvbW94aWUvZmZpLmxvIHNyYy9tb3hpZS9lYWJpLmxvCi1ATUlDUk9CTEFaRV9UUlVFQGFtX19vYmplY3RzXzE1ID0gc3JjL21pY3JvYmxhemUvZmZpLmxvIFwKK0BBTFBIQV9UUlVFQGFtX19vYmplY3RzXzExID0gc3JjL2FscGhhL2ZmaS5sbyBzcmMvYWxwaGEvb3NmLmxvCitASUE2NF9UUlVFQGFtX19vYmplY3RzXzEyID0gc3JjL2lhNjQvZmZpLmxvIHNyYy9pYTY0L3VuaXgubG8KK0BNMzJSX1RSVUVAYW1fX29iamVjdHNfMTMgPSBzcmMvbTMyci9zeXN2LmxvIHNyYy9tMzJyL2ZmaS5sbworQE02OEtfVFJVRUBhbV9fb2JqZWN0c18xNCA9IHNyYy9tNjhrL2ZmaS5sbyBzcmMvbTY4ay9zeXN2LmxvCitATTg4S19UUlVFQGFtX19vYmplY3RzXzE1ID0gc3JjL204OGsvZmZpLmxvIHNyYy9tODhrL29ic2QubG8KK0BNT1hJRV9UUlVFQGFtX19vYmplY3RzXzE2ID0gc3JjL21veGllL2ZmaS5sbyBzcmMvbW94aWUvZWFiaS5sbworQE1JQ1JPQkxBWkVfVFJVRUBhbV9fb2JqZWN0c18xNyA9IHNyYy9taWNyb2JsYXplL2ZmaS5sbyBcCiBATUlDUk9CTEFaRV9UUlVFQAlzcmMvbWljcm9ibGF6ZS9zeXN2LmxvCi1AUE9XRVJQQ19UUlVFQGFtX19vYmplY3RzXzE2ID0gc3JjL3Bvd2VycGMvZmZpLmxvIHNyYy9wb3dlcnBjL3N5c3YubG8gXAorQE5JT1MyX1RSVUVAYW1fX29iamVjdHNfMTggPSBzcmMvbmlvczIvc3lzdi5sbyBzcmMvbmlvczIvZmZpLmxvCitAUE9XRVJQQ19UUlVFQGFtX19vYmplY3RzXzE5ID0gc3JjL3Bvd2VycGMvZmZpLmxvIFwKK0BQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL2ZmaV9zeXN2LmxvIFwKK0BQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmxvIHNyYy9wb3dlcnBjL3N5c3YubG8gXAogQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUubG8gXAogQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvbGludXg2NC5sbyBcCiBAUE9XRVJQQ19UUlVFQAlzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUubG8KLUBQT1dFUlBDX0FJWF9UUlVFQGFtX19vYmplY3RzXzE3ID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5sbyBcCitAUE9XRVJQQ19BSVhfVFJVRUBhbV9fb2JqZWN0c18yMCA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAogQFBPV0VSUENfQUlYX1RSVUVACXNyYy9wb3dlcnBjL2FpeC5sbyBcCiBAUE9XRVJQQ19BSVhfVFJVRUAJc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUubG8KLUBQT1dFUlBDX0RBUldJTl9UUlVFQGFtX19vYmplY3RzXzE4ID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5sbyBcCitAUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fb2JqZWN0c18yMSA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAogQFBPV0VSUENfREFSV0lOX1RSVUVACXNyYy9wb3dlcnBjL2Rhcndpbi5sbyBcCiBAUE9XRVJQQ19EQVJXSU5fVFJVRUAJc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUubG8KLUBQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fb2JqZWN0c18xOSA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBcCitAUE9XRVJQQ19GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfMjIgPSBzcmMvcG93ZXJwYy9mZmkubG8gXAorQFBPV0VSUENfRlJFRUJTRF9UUlVFQAlzcmMvcG93ZXJwYy9mZmlfc3lzdi5sbyBcCiBAUE9XRVJQQ19GUkVFQlNEX1RSVUVACXNyYy9wb3dlcnBjL3N5c3YubG8gXAogQFBPV0VSUENfRlJFRUJTRF9UUlVFQAlzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5sbwotQEFBUkNINjRfVFJVRUBhbV9fb2JqZWN0c18yMCA9IHNyYy9hYXJjaDY0L3N5c3YubG8gc3JjL2FhcmNoNjQvZmZpLmxvCi1AQVJNX1RSVUVAYW1fX29iamVjdHNfMjEgPSBzcmMvYXJtL3N5c3YubG8gc3JjL2FybS9mZmkubG8KLUBBUk1fVFJVRUBARkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRV9UUlVFQGFtX19vYmplY3RzXzIyID0gc3JjL2FybS90cmFtcG9saW5lLmxvCi1AQVZSMzJfVFJVRUBhbV9fb2JqZWN0c18yMyA9IHNyYy9hdnIzMi9zeXN2LmxvIHNyYy9hdnIzMi9mZmkubG8KLUBMSUJGRklfQ1JJU19UUlVFQGFtX19vYmplY3RzXzI0ID0gc3JjL2NyaXMvc3lzdi5sbyBzcmMvY3Jpcy9mZmkubG8KLUBGUlZfVFJVRUBhbV9fb2JqZWN0c18yNSA9IHNyYy9mcnYvZWFiaS5sbyBzcmMvZnJ2L2ZmaS5sbwotQFMzOTBfVFJVRUBhbV9fb2JqZWN0c18yNiA9IHNyYy9zMzkwL3N5c3YubG8gc3JjL3MzOTAvZmZpLmxvCi1AWDg2XzY0X1RSVUVAYW1fX29iamVjdHNfMjcgPSBzcmMveDg2L2ZmaTY0LmxvIHNyYy94ODYvdW5peDY0LmxvIFwKK0BBQVJDSDY0X1RSVUVAYW1fX29iamVjdHNfMjMgPSBzcmMvYWFyY2g2NC9zeXN2LmxvIHNyYy9hYXJjaDY0L2ZmaS5sbworQEFSQ19UUlVFQGFtX19vYmplY3RzXzI0ID0gc3JjL2FyYy9hcmNvbXBhY3QubG8gc3JjL2FyYy9mZmkubG8KK0BBUk1fVFJVRUBhbV9fb2JqZWN0c18yNSA9IHNyYy9hcm0vc3lzdi5sbyBzcmMvYXJtL2ZmaS5sbworQEFSTV9UUlVFQEBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFX1RSVUVAYW1fX29iamVjdHNfMjYgPSBzcmMvYXJtL3RyYW1wb2xpbmUubG8KK0BBVlIzMl9UUlVFQGFtX19vYmplY3RzXzI3ID0gc3JjL2F2cjMyL3N5c3YubG8gc3JjL2F2cjMyL2ZmaS5sbworQExJQkZGSV9DUklTX1RSVUVAYW1fX29iamVjdHNfMjggPSBzcmMvY3Jpcy9zeXN2LmxvIHNyYy9jcmlzL2ZmaS5sbworQEZSVl9UUlVFQGFtX19vYmplY3RzXzI5ID0gc3JjL2Zydi9lYWJpLmxvIHNyYy9mcnYvZmZpLmxvCitAUzM5MF9UUlVFQGFtX19vYmplY3RzXzMwID0gc3JjL3MzOTAvc3lzdi5sbyBzcmMvczM5MC9mZmkubG8KK0BYODZfNjRfVFJVRUBhbV9fb2JqZWN0c18zMSA9IHNyYy94ODYvZmZpNjQubG8gc3JjL3g4Ni91bml4NjQubG8gXAogQFg4Nl82NF9UUlVFQAlzcmMveDg2L2ZmaS5sbyBzcmMveDg2L3N5c3YubG8KLUBTSF9UUlVFQGFtX19vYmplY3RzXzI4ID0gc3JjL3NoL3N5c3YubG8gc3JjL3NoL2ZmaS5sbwotQFNINjRfVFJVRUBhbV9fb2JqZWN0c18yOSA9IHNyYy9zaDY0L3N5c3YubG8gc3JjL3NoNjQvZmZpLmxvCi1AUEFfTElOVVhfVFJVRUBhbV9fb2JqZWN0c18zMCA9IHNyYy9wYS9saW51eC5sbyBzcmMvcGEvZmZpLmxvCi1AUEFfSFBVWF9UUlVFQGFtX19vYmplY3RzXzMxID0gc3JjL3BhL2hwdXgzMi5sbyBzcmMvcGEvZmZpLmxvCi1AVElMRV9UUlVFQGFtX19vYmplY3RzXzMyID0gc3JjL3RpbGUvdGlsZS5sbyBzcmMvdGlsZS9mZmkubG8KLUBYVEVOU0FfVFJVRUBhbV9fb2JqZWN0c18zMyA9IHNyYy94dGVuc2Evc3lzdi5sbyBzcmMveHRlbnNhL2ZmaS5sbwotQE1FVEFHX1RSVUVAYW1fX29iamVjdHNfMzQgPSBzcmMvbWV0YWcvc3lzdi5sbyBzcmMvbWV0YWcvZmZpLmxvCitAU0hfVFJVRUBhbV9fb2JqZWN0c18zMiA9IHNyYy9zaC9zeXN2LmxvIHNyYy9zaC9mZmkubG8KK0BTSDY0X1RSVUVAYW1fX29iamVjdHNfMzMgPSBzcmMvc2g2NC9zeXN2LmxvIHNyYy9zaDY0L2ZmaS5sbworQFBBX0xJTlVYX1RSVUVAYW1fX29iamVjdHNfMzQgPSBzcmMvcGEvbGludXgubG8gc3JjL3BhL2ZmaS5sbworQFBBX0hQVVhfVFJVRUBhbV9fb2JqZWN0c18zNSA9IHNyYy9wYS9ocHV4MzIubG8gc3JjL3BhL2ZmaS5sbworQFRJTEVfVFJVRUBhbV9fb2JqZWN0c18zNiA9IHNyYy90aWxlL3RpbGUubG8gc3JjL3RpbGUvZmZpLmxvCitAWFRFTlNBX1RSVUVAYW1fX29iamVjdHNfMzcgPSBzcmMveHRlbnNhL3N5c3YubG8gc3JjL3h0ZW5zYS9mZmkubG8KK0BNRVRBR19UUlVFQGFtX19vYmplY3RzXzM4ID0gc3JjL21ldGFnL3N5c3YubG8gc3JjL21ldGFnL2ZmaS5sbworQFZBWF9UUlVFQGFtX19vYmplY3RzXzM5ID0gc3JjL3ZheC9lbGZic2QubG8gc3JjL3ZheC9mZmkubG8KIG5vZGlzdF9saWJmZmlfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCiAJJChhbV9fb2JqZWN0c18zKSAkKGFtX19vYmplY3RzXzQpICQoYW1fX29iamVjdHNfNSkgXAogCSQoYW1fX29iamVjdHNfNikgJChhbV9fb2JqZWN0c183KSAkKGFtX19vYmplY3RzXzgpIFwKQEAgLTIwOSwxNyArMjU1LDIzIEBACiAJJChhbV9fb2JqZWN0c18yNCkgJChhbV9fb2JqZWN0c18yNSkgJChhbV9fb2JqZWN0c18yNikgXAogCSQoYW1fX29iamVjdHNfMjcpICQoYW1fX29iamVjdHNfMjgpICQoYW1fX29iamVjdHNfMjkpIFwKIAkkKGFtX19vYmplY3RzXzMwKSAkKGFtX19vYmplY3RzXzMxKSAkKGFtX19vYmplY3RzXzMyKSBcCi0JJChhbV9fb2JqZWN0c18zMykgJChhbV9fb2JqZWN0c18zNCkKKwkkKGFtX19vYmplY3RzXzMzKSAkKGFtX19vYmplY3RzXzM0KSAkKGFtX19vYmplY3RzXzM1KSBcCisJJChhbV9fb2JqZWN0c18zNikgJChhbV9fb2JqZWN0c18zNykgJChhbV9fb2JqZWN0c18zOCkgXAorCSQoYW1fX29iamVjdHNfMzkpCiBsaWJmZmlfbGFfT0JKRUNUUyA9ICQoYW1fbGliZmZpX2xhX09CSkVDVFMpIFwKIAkkKG5vZGlzdF9saWJmZmlfbGFfT0JKRUNUUykKLWxpYmZmaV9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorYW1fX3ZfbHRfMSA9IAorbGliZmZpX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKIAkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKIAkkKGxpYmZmaV9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACiBsaWJmZmlfY29udmVuaWVuY2VfbGFfTElCQUREID0KLWFtX19vYmplY3RzXzM1ID0gc3JjL3ByZXBfY2lmLmxvIHNyYy90eXBlcy5sbyBzcmMvcmF3X2FwaS5sbyBcCithbV9fb2JqZWN0c180MCA9IHNyYy9wcmVwX2NpZi5sbyBzcmMvdHlwZXMubG8gc3JjL3Jhd19hcGkubG8gXAogCXNyYy9qYXZhX3Jhd19hcGkubG8gc3JjL2Nsb3N1cmVzLmxvCi1hbV9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMzUpCi1hbV9fb2JqZWN0c18zNiA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSAkKGFtX19vYmplY3RzXzMpIFwKK2FtX2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c180MCkKK2FtX19vYmplY3RzXzQxID0gJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzIpICQoYW1fX29iamVjdHNfMykgXAogCSQoYW1fX29iamVjdHNfNCkgJChhbV9fb2JqZWN0c181KSAkKGFtX19vYmplY3RzXzYpIFwKIAkkKGFtX19vYmplY3RzXzcpICQoYW1fX29iamVjdHNfOCkgJChhbV9fb2JqZWN0c185KSBcCiAJJChhbV9fb2JqZWN0c18xMCkgJChhbV9fb2JqZWN0c18xMSkgJChhbV9fb2JqZWN0c18xMikgXApAQCAtMjMwLDMyICsyODIsODcgQEAKIAkkKGFtX19vYmplY3RzXzI1KSAkKGFtX19vYmplY3RzXzI2KSAkKGFtX19vYmplY3RzXzI3KSBcCiAJJChhbV9fb2JqZWN0c18yOCkgJChhbV9fb2JqZWN0c18yOSkgJChhbV9fb2JqZWN0c18zMCkgXAogCSQoYW1fX29iamVjdHNfMzEpICQoYW1fX29iamVjdHNfMzIpICQoYW1fX29iamVjdHNfMzMpIFwKLQkkKGFtX19vYmplY3RzXzM0KQotbm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18zNikKKwkkKGFtX19vYmplY3RzXzM0KSAkKGFtX19vYmplY3RzXzM1KSAkKGFtX19vYmplY3RzXzM2KSBcCisJJChhbV9fb2JqZWN0c18zNykgJChhbV9fb2JqZWN0c18zOCkgJChhbV9fb2JqZWN0c18zOSkKK25vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfNDEpCiBsaWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMpIFwKIAkkKG5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUykKK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAogREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AKIGRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKIGFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCiBhbV9fbXYgPSBtdiAtZgogQ1BQQVNDT01QSUxFID0gJChDQ0FTKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAogCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0NBU0ZMQUdTKSAkKENDQVNGTEFHUykKLUxUQ1BQQVNDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9Y29tcGlsZSAkKENDQVMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCi0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DQ0FTRkxBR1MpICQoQ0NBU0ZMQUdTKQorTFRDUFBBU0NPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQ0FTKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpCitBTV9WX0NQUEFTID0gJChhbV9fdl9DUFBBU19AQU1fVkApCithbV9fdl9DUFBBU18gPSAkKGFtX192X0NQUEFTX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ1BQQVNfMCA9IEBlY2hvICIgIENQUEFTICAgIiAkQDsKK2FtX192X0NQUEFTXzEgPSAKIENPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAogCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCi0JLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7CithbV9fdl9DQ18xID0gCiBDQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAotCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7CithbV9fdl9DQ0xEXzEgPSAKIFNPVVJDRVMgPSAkKGxpYmZmaV9sYV9TT1VSQ0VTKSAkKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUykgXAogCSQobGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMpIFwKIAkkKG5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUykKIERJU1RfU09VUkNFUyA9ICQobGliZmZpX2xhX1NPVVJDRVMpICQobGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMpCitBTV9WX0RWSVBTID0gJChhbV9fdl9EVklQU19AQU1fVkApCithbV9fdl9EVklQU18gPSAkKGFtX192X0RWSVBTX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfRFZJUFNfMCA9IEBlY2hvICIgIERWSVBTICAgIiAkQDsKK2FtX192X0RWSVBTXzEgPSAKK0FNX1ZfTUFLRUlORk8gPSAkKGFtX192X01BS0VJTkZPX0BBTV9WQCkKK2FtX192X01BS0VJTkZPXyA9ICQoYW1fX3ZfTUFLRUlORk9fQEFNX0RFRkFVTFRfVkApCithbV9fdl9NQUtFSU5GT18wID0gQGVjaG8gIiAgTUFLRUlORk8iICRAOworYW1fX3ZfTUFLRUlORk9fMSA9IAorQU1fVl9JTkZPSFRNTCA9ICQoYW1fX3ZfSU5GT0hUTUxfQEFNX1ZAKQorYW1fX3ZfSU5GT0hUTUxfID0gJChhbV9fdl9JTkZPSFRNTF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0lORk9IVE1MXzAgPSBAZWNobyAiICBJTkZPSFRNTCIgJEA7CithbV9fdl9JTkZPSFRNTF8xID0gCitBTV9WX1RFWEkyRFZJID0gJChhbV9fdl9URVhJMkRWSV9AQU1fVkApCithbV9fdl9URVhJMkRWSV8gPSAkKGFtX192X1RFWEkyRFZJX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfVEVYSTJEVklfMCA9IEBlY2hvICIgIFRFWEkyRFZJIiAkQDsKK2FtX192X1RFWEkyRFZJXzEgPSAKK0FNX1ZfVEVYSTJQREYgPSAkKGFtX192X1RFWEkyUERGX0BBTV9WQCkKK2FtX192X1RFWEkyUERGXyA9ICQoYW1fX3ZfVEVYSTJQREZfQEFNX0RFRkFVTFRfVkApCithbV9fdl9URVhJMlBERl8wID0gQGVjaG8gIiAgVEVYSTJQREYiICRAOworYW1fX3ZfVEVYSTJQREZfMSA9IAorQU1fVl90ZXhpbmZvID0gJChhbV9fdl90ZXhpbmZvX0BBTV9WQCkKK2FtX192X3RleGluZm9fID0gJChhbV9fdl90ZXhpbmZvX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfdGV4aW5mb18wID0gLXEKK2FtX192X3RleGluZm9fMSA9IAorQU1fVl90ZXhpZGV2bnVsbCA9ICQoYW1fX3ZfdGV4aWRldm51bGxfQEFNX1ZAKQorYW1fX3ZfdGV4aWRldm51bGxfID0gJChhbV9fdl90ZXhpZGV2bnVsbF9AQU1fREVGQVVMVF9WQCkKK2FtX192X3RleGlkZXZudWxsXzAgPSA+IC9kZXYvbnVsbAorYW1fX3ZfdGV4aWRldm51bGxfMSA9IAogSU5GT19ERVBTID0gJChzcmNkaXIpL2RvYy9saWJmZmkuaW5mbwogYW1fX1RFWElORk9fVEVYX0RJUiA9ICQoc3JjZGlyKQogRFZJUyA9IGRvYy9saWJmZmkuZHZpCkBAIC0yNjgsMTMgKzM3NSwxNCBAQAogTUFLRUlORk9IVE1MID0gJChNQUtFSU5GTykgLS1odG1sCiBBTV9NQUtFSU5GT0hUTUxGTEFHUyA9ICQoQU1fTUFLRUlORk9GTEFHUykKIERWSVBTID0gZHZpcHMKLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCi0JaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAotCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKLQlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBcCisJY3RhZ3MtcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaHRtbC1yZWN1cnNpdmUgXAorCWluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1wZGYtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKKwlpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgXAorCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKIGFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAogICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKICAgICBufG5vfE5PKSBmYWxzZTs7IFwKQEAgLTI4Myw5ICszOTEsMzAgQEAKIERBVEEgPSAkKHBrZ2NvbmZpZ19EQVRBKQogUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKICAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCi0JJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKK2FtX19yZWN1cnNpdmVfdGFyZ2V0cyA9IFwKKyAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAorICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCisgICQoYW1fX2V4dHJhX3JlY3Vyc2l2ZV90YXJnZXRzKQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCiAJY3Njb3BlIGRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSBcCisJJChMSVNQKWZmaWNvbmZpZy5oLmluCisjIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCisjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKyMgKm5vdCogcHJlc2VydmVkLgorYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCisgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKyAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCisnCisjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisjIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCithbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAogRVRBR1MgPSBldGFncwogQ1RBR1MgPSBjdGFncwogQ1NDT1BFID0gY3Njb3BlCkBAIC0zMzUsNiArNDY0LDcgQEAKIEFDTE9DQUwgPSBAQUNMT0NBTEAKIEFMTE9DQSA9IEBBTExPQ0FACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAogQU1fTFRMREZMQUdTID0gQEFNX0xUTERGTEFHU0AKIEFNX1JVTlRFU1RGTEFHUyA9IEBBTV9SVU5URVNURkxBR1NACiBBUiA9IEBBUkAKQEAgLTM1MCw2ICs0ODAsMTAgQEAKIENGTEFHUyA9IEBDRkxBR1NACiBDUFAgPSBAQ1BQQAogQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKIERFRlMgPSBAREVGU0AKIERFUERJUiA9IEBERVBESVJACkBAIC0zNjUsNiArNDk5LDcgQEAKIEZHUkVQID0gQEZHUkVQQAogR1JFUCA9IEBHUkVQQAogSEFWRV9MT05HX0RPVUJMRSA9IEBIQVZFX0xPTkdfRE9VQkxFQAorSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UID0gQEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVEAKIElOU1RBTEwgPSBASU5TVEFMTEAKIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQApAQCAtNDExLDYgKzU0Niw3IEBACiBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKIGFjX2N0X0FSID0gQGFjX2N0X0FSQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAogYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QApAQCAtNDY4LDEwICs2MDQsMTEgQEAKIEFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIHN1YmRpci1vYmplY3RzCiBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAogU1VCRElSUyA9IGluY2x1ZGUgdGVzdHN1aXRlIG1hbgotRVhUUkFfRElTVCA9IExJQ0VOU0UgQ2hhbmdlTG9nLnYxIENoYW5nZUxvZy5saWJnY2ogY29uZmlndXJlLmhvc3QJXAorRVhUUkFfRElTVCA9IExJQ0VOU0UgQ2hhbmdlTG9nLnYxIENoYW5nZUxvZy5saWJnY2oJCQlcCiAJIHNyYy9hYXJjaDY0L2ZmaS5jIHNyYy9hYXJjaDY0L2ZmaXRhcmdldC5oIHNyYy9hYXJjaDY0L3N5c3YuUwlcCi0JIGJ1aWxkLWlvcy5zaCBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCQkJXAotCSBzcmMvYWxwaGEvZmZpdGFyZ2V0Lmggc3JjL2FybS9mZmkuYyBzcmMvYXJtL3N5c3YuUwkJXAorCSBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCQkJXAorCSBzcmMvYWxwaGEvZmZpdGFyZ2V0Lmggc3JjL2FyYy9mZmkuYyBzcmMvYXJjL2FyY29tcGFjdC5TCVwKKwkgc3JjL2FyYy9mZml0YXJnZXQuaCBzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TCQlcCiAJIHNyYy9hcm0vZmZpdGFyZ2V0Lmggc3JjL2F2cjMyL2ZmaS5jIHNyYy9hdnIzMi9zeXN2LlMJCVwKIAkgc3JjL2F2cjMyL2ZmaXRhcmdldC5oIHNyYy9jcmlzL2ZmaS5jIHNyYy9jcmlzL3N5c3YuUwkJXAogCSBzcmMvY3Jpcy9mZml0YXJnZXQuaCBzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC9mZml0YXJnZXQuaAlcCkBAIC00ODEsOCArNjE4LDEyIEBACiAJIHNyYy9tb3hpZS9mZml0YXJnZXQuaCBzcmMvbW94aWUvZWFiaS5TIHNyYy9taXBzL2ZmaXRhcmdldC5oCVwKIAkgc3JjL20zMnIvZmZpLmMgc3JjL20zMnIvc3lzdi5TIHNyYy9tMzJyL2ZmaXRhcmdldC5oCQlcCiAJIHNyYy9tNjhrL2ZmaS5jIHNyYy9tNjhrL3N5c3YuUyBzcmMvbTY4ay9mZml0YXJnZXQuaAkJXAorCSBzcmMvbTg4ay9mZmkuYyBzcmMvbTg4ay9vYnNkLlMgc3JjL204OGsvZmZpdGFyZ2V0LmgJCVwKIAkgc3JjL21pY3JvYmxhemUvZmZpLmMgc3JjL21pY3JvYmxhemUvc3lzdi5TCQkJXAotCSBzcmMvbWljcm9ibGF6ZS9mZml0YXJnZXQuaCBzcmMvcG93ZXJwYy9mZmkuYwkJCVwKKwkgc3JjL21pY3JvYmxhemUvZmZpdGFyZ2V0LmgJCQkJCVwKKwkgc3JjL25pb3MyL2ZmaS5jIHNyYy9uaW9zMi9mZml0YXJnZXQuaCBzcmMvbmlvczIvc3lzdi5TCQlcCisJIHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL2ZmaV9wb3dlcnBjLmgJCQlcCisJIHNyYy9wb3dlcnBjL2ZmaV9zeXN2LmMgc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYwkJXAogCSBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvbGludXg2NC5TCQkJXAogCSBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCVwKIAkgc3JjL3Bvd2VycGMvYXNtLmggc3JjL3Bvd2VycGMvYWl4LlMgc3JjL3Bvd2VycGMvZGFyd2luLlMJXApAQCAtNTAwLDE0ICs2NDEsMTQgQEAKIAkgc3JjL2JmaW4vZmZpdGFyZ2V0Lmggc3JjL2JmaW4vc3lzdi5TIHNyYy9mcnYvZWFiaS5TCQlcCiAJIHNyYy9mcnYvZmZpdGFyZ2V0Lmggc3JjL2RsbWFsbG9jLmMgc3JjL3RpbGUvZmZpLmMJCVwKIAkgc3JjL3RpbGUvZmZpdGFyZ2V0Lmggc3JjL3RpbGUvdGlsZS5TIGxpYnRvb2wtdmVyc2lvbgkJXAorCSBzcmMvdmF4L2ZmaS5jIHNyYy92YXgvZmZpdGFyZ2V0Lmggc3JjL3ZheC9lbGZic2QuUwkJXAogCSBzcmMveHRlbnNhL2ZmaXRhcmdldC5oIHNyYy94dGVuc2EvZmZpLmMgc3JjL3h0ZW5zYS9zeXN2LlMJXAogCSBDaGFuZ2VMb2cubGliZmZpIG00L2xpYnRvb2wubTQgbTQvbHR+b2Jzb2xldGUubTQJCVwKIAkgbTQvbHRvcHRpb25zLm00IG00L2x0c3VnYXIubTQgbTQvbHR2ZXJzaW9uLm00CQkJXAogCSBtNC9sdHZlcnNpb24ubTQgc3JjL2FybS9nZW50cmFtcC5zaCBzcmMvZGVidWcuYyBtc3ZjYy5zaAlcCi0JIGdlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHkJCQkJXAotCSBnZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5CQkJCVwKKwkgZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weQkJCQlcCiAJIGxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIHNyYy9hcm0vdHJhbXBvbGluZS5TCQlcCi0JIGxpYnRvb2wtbGRmbGFncworCSBsaWJ0b29sLWxkZmxhZ3MgQ2hhbmdlTG9nLmxpYmZmaS0zLjEKIAogaW5mb19URVhJTkZPUyA9IGRvYy9saWJmZmkudGV4aQogCkBAIC01MTUsMzkgKzY1NiwzOSBAQAogIyB2YWx1ZXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBtYWtlIHZhcmlhYmxlcywgYXMgaXMgdGhlIGNhc2UgZm9yIENDIGFuZAogIyBmcmllbmRzIHdoZW4gd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUuCiBBTV9NQUtFRkxBR1MgPSBcCi0JIkFSX0ZMQUdTPSQoQVJfRkxBR1MpIiBcCi0JIkNDX0ZPUl9CVUlMRD0kKENDX0ZPUl9CVUlMRCkiIFwKLQkiQ0ZMQUdTPSQoQ0ZMQUdTKSIgXAotCSJDWFhGTEFHUz0kKENYWEZMQUdTKSIgXAotCSJDRkxBR1NfRk9SX0JVSUxEPSQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKLQkiQ0ZMQUdTX0ZPUl9UQVJHRVQ9JChDRkxBR1NfRk9SX1RBUkdFVCkiIFwKLQkiSU5TVEFMTD0kKElOU1RBTEwpIiBcCi0JIklOU1RBTExfREFUQT0kKElOU1RBTExfREFUQSkiIFwKLQkiSU5TVEFMTF9QUk9HUkFNPSQoSU5TVEFMTF9QUk9HUkFNKSIgXAotCSJJTlNUQUxMX1NDUklQVD0kKElOU1RBTExfU0NSSVBUKSIgXAotCSJKQzFGTEFHUz0kKEpDMUZMQUdTKSIgXAotCSJMREZMQUdTPSQoTERGTEFHUykiIFwKLQkiTElCQ0ZMQUdTPSQoTElCQ0ZMQUdTKSIgXAotCSJMSUJDRkxBR1NfRk9SX1RBUkdFVD0kKExJQkNGTEFHU19GT1JfVEFSR0VUKSIgXAotCSJNQUtFPSQoTUFLRSkiIFwKLQkiTUFLRUlORk89JChNQUtFSU5GTykgJChNQUtFSU5GT0ZMQUdTKSIgXAotCSJQSUNGTEFHPSQoUElDRkxBRykiIFwKLQkiUElDRkxBR19GT1JfVEFSR0VUPSQoUElDRkxBR19GT1JfVEFSR0VUKSIgXAotCSJSVU5URVNURkxBR1M9JChSVU5URVNURkxBR1MpIiBcCi0JIlNIRUxMPSQoU0hFTEwpIiBcCi0JImV4ZWNfcHJlZml4PSQoZXhlY19wcmVmaXgpIiBcCi0JImluZm9kaXI9JChpbmZvZGlyKSIgXAotCSJsaWJkaXI9JChsaWJkaXIpIiBcCi0JIm1hbmRpcj0kKG1hbmRpcikiIFwKLQkicHJlZml4PSQocHJlZml4KSIgXAotCSJBUj0kKEFSKSIgXAotCSJBUz0kKEFTKSIgXAotCSJDQz0kKENDKSIgXAotCSJDWFg9JChDWFgpIiBcCi0JIkxEPSQoTEQpIiBcCi0JIk5NPSQoTk0pIiBcCi0JIlJBTkxJQj0kKFJBTkxJQikiIFwKLQkiREVTVERJUj0kKERFU1RESVIpIgorCSdBUl9GTEFHUz0kKEFSX0ZMQUdTKScgXAorCSdDQ19GT1JfQlVJTEQ9JChDQ19GT1JfQlVJTEQpJyBcCisJJ0NGTEFHUz0kKENGTEFHUyknIFwKKwknQ1hYRkxBR1M9JChDWFhGTEFHUyknIFwKKwknQ0ZMQUdTX0ZPUl9CVUlMRD0kKENGTEFHU19GT1JfQlVJTEQpJyBcCisJJ0NGTEFHU19GT1JfVEFSR0VUPSQoQ0ZMQUdTX0ZPUl9UQVJHRVQpJyBcCisJJ0lOU1RBTEw9JChJTlNUQUxMKScgXAorCSdJTlNUQUxMX0RBVEE9JChJTlNUQUxMX0RBVEEpJyBcCisJJ0lOU1RBTExfUFJPR1JBTT0kKElOU1RBTExfUFJPR1JBTSknIFwKKwknSU5TVEFMTF9TQ1JJUFQ9JChJTlNUQUxMX1NDUklQVCknIFwKKwknSkMxRkxBR1M9JChKQzFGTEFHUyknIFwKKwknTERGTEFHUz0kKExERkxBR1MpJyBcCisJJ0xJQkNGTEFHUz0kKExJQkNGTEFHUyknIFwKKwknTElCQ0ZMQUdTX0ZPUl9UQVJHRVQ9JChMSUJDRkxBR1NfRk9SX1RBUkdFVCknIFwKKwknTUFLRT0kKE1BS0UpJyBcCisJJ01BS0VJTkZPPSQoTUFLRUlORk8pICQoTUFLRUlORk9GTEFHUyknIFwKKwknUElDRkxBRz0kKFBJQ0ZMQUcpJyBcCisJJ1BJQ0ZMQUdfRk9SX1RBUkdFVD0kKFBJQ0ZMQUdfRk9SX1RBUkdFVCknIFwKKwknUlVOVEVTVEZMQUdTPSQoUlVOVEVTVEZMQUdTKScgXAorCSdTSEVMTD0kKFNIRUxMKScgXAorCSdleGVjX3ByZWZpeD0kKGV4ZWNfcHJlZml4KScgXAorCSdpbmZvZGlyPSQoaW5mb2RpciknIFwKKwknbGliZGlyPSQobGliZGlyKScgXAorCSdtYW5kaXI9JChtYW5kaXIpJyBcCisJJ3ByZWZpeD0kKHByZWZpeCknIFwKKwknQVI9JChBUiknIFwKKwknQVM9JChBUyknIFwKKwknQ0M9JChDQyknIFwKKwknQ1hYPSQoQ1hYKScgXAorCSdMRD0kKExEKScgXAorCSdOTT0kKE5NKScgXAorCSdSQU5MSUI9JChSQU5MSUIpJyBcCisJJ0RFU1RESVI9JChERVNURElSKScKIAogCiAjIFN1YmRpciBydWxlcyByZWx5IG9uICQoRkxBR1NfVE9fUEFTUykKQEAgLTU3MSwxMCArNzEyLDEzIEBACiAJJChhbV9fYXBwZW5kXzI0KSAkKGFtX19hcHBlbmRfMjUpICQoYW1fX2FwcGVuZF8yNikgXAogCSQoYW1fX2FwcGVuZF8yNykgJChhbV9fYXBwZW5kXzI4KSAkKGFtX19hcHBlbmRfMjkpIFwKIAkkKGFtX19hcHBlbmRfMzApICQoYW1fX2FwcGVuZF8zMSkgJChhbV9fYXBwZW5kXzMyKSBcCi0JJChhbV9fYXBwZW5kXzMzKSAkKGFtX19hcHBlbmRfMzQpCisJJChhbV9fYXBwZW5kXzMzKSAkKGFtX19hcHBlbmRfMzQpICQoYW1fX2FwcGVuZF8zNSkgXAorCSQoYW1fX2FwcGVuZF8zNikgJChhbV9fYXBwZW5kXzM3KSAkKGFtX19hcHBlbmRfMzgpIFwKKwkkKGFtX19hcHBlbmRfMzkpCiBsaWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyA9ICQobGliZmZpX2xhX1NPVVJDRVMpCiBub2Rpc3RfbGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMgPSAkKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUykKIExUTERGTEFHUyA9ICQoc2hlbGwgJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9saWJ0b29sLWxkZmxhZ3MgJChMREZMQUdTKSkKK0FNX0NGTEFHUyA9ICQoYW1fX2FwcGVuZF80MCkKIGxpYmZmaV9sYV9MREZMQUdTID0gLW5vLXVuZGVmaW5lZCAtdmVyc2lvbi1pbmZvIGBncmVwIC12ICdeXCMnICQoc3JjZGlyKS9saWJ0b29sLXZlcnNpb25gICQoTFRMREZMQUdTKSAkKEFNX0xUTERGTEFHUykKIEFNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JaW5jbHVkZSAtSSQodG9wX3NyY2Rpcikvc3JjCiBBTV9DQ0FTRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQpAQCAtNjQ1LDYgKzc4OSw3IEBACiAJICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCiAJICBybSAtZiAkJHtsb2NzfTsgXAogCX0KKwogaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTOiAkKHRvb2xleGVjbGliX0xUTElCUkFSSUVTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCUBsaXN0PSckKHRvb2xleGVjbGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQodG9vbGV4ZWNsaWJkaXIpIiB8fCBsaXN0PTsgXApAQCAtNzIzLDEwICs4NjgsMTAgQEAKIAlzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy94ODYvc3lzdi5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotc3JjL3g4Ni9mcmVlYnNkLmxvOiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKSBcCi0Jc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMveDg2L3dpbjMyLmxvOiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMveDg2L2ZyZWVic2QubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy94ODYvd2luNjQubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy94ODYvZGFyd2luLmxvOiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKSBcCkBAIC03ODcsNiArOTMyLDE2IEBACiAJc3JjL202OGsvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL202OGsvc3lzdi5sbzogc3JjL202OGsvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMvbTY4ay8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbTg4ay8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL204OGsKKwlAOiA+IHNyYy9tODhrLyQoYW1fX2RpcnN0YW1wKQorc3JjL204OGsvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvbTg4ay8kKERFUERJUikKKwlAOiA+IHNyYy9tODhrLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9tODhrL2ZmaS5sbzogc3JjL204OGsvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvbTg4ay8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbTg4ay9vYnNkLmxvOiBzcmMvbTg4ay8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9tODhrLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9tb3hpZS8kKGFtX19kaXJzdGFtcCk6CiAJQCQoTUtESVJfUCkgc3JjL21veGllCiAJQDogPiBzcmMvbW94aWUvJChhbV9fZGlyc3RhbXApCkBAIC04MDcsNiArOTYyLDE2IEBACiAJc3JjL21pY3JvYmxhemUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL21pY3JvYmxhemUvc3lzdi5sbzogc3JjL21pY3JvYmxhemUvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMvbWljcm9ibGF6ZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbmlvczIvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy9uaW9zMgorCUA6ID4gc3JjL25pb3MyLyQoYW1fX2RpcnN0YW1wKQorc3JjL25pb3MyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL25pb3MyLyQoREVQRElSKQorCUA6ID4gc3JjL25pb3MyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9uaW9zMi9zeXN2LmxvOiBzcmMvbmlvczIvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvbmlvczIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL25pb3MyL2ZmaS5sbzogc3JjL25pb3MyLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL25pb3MyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9wb3dlcnBjLyQoYW1fX2RpcnN0YW1wKToKIAlAJChNS0RJUl9QKSBzcmMvcG93ZXJwYwogCUA6ID4gc3JjL3Bvd2VycGMvJChhbV9fZGlyc3RhbXApCkBAIC04MTUsNiArOTgwLDEwIEBACiAJQDogPiBzcmMvcG93ZXJwYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvcG93ZXJwYy9mZmkubG86IHNyYy9wb3dlcnBjLyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL3Bvd2VycGMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL3Bvd2VycGMvZmZpX3N5c3YubG86IHNyYy9wb3dlcnBjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL3Bvd2VycGMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQubG86IHNyYy9wb3dlcnBjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL3Bvd2VycGMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3Bvd2VycGMvc3lzdi5sbzogc3JjL3Bvd2VycGMvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMvcG93ZXJwYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5sbzogc3JjL3Bvd2VycGMvJChhbV9fZGlyc3RhbXApIFwKQEAgLTg0Myw2ICsxMDEyLDE2IEBACiAJc3JjL2FhcmNoNjQvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL2FhcmNoNjQvZmZpLmxvOiBzcmMvYWFyY2g2NC8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy9hYXJjaDY0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9hcmMvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy9hcmMKKwlAOiA+IHNyYy9hcmMvJChhbV9fZGlyc3RhbXApCitzcmMvYXJjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL2FyYy8kKERFUERJUikKKwlAOiA+IHNyYy9hcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2FyYy9hcmNvbXBhY3QubG86IHNyYy9hcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvYXJjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9hcmMvZmZpLmxvOiBzcmMvYXJjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL2FyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvYXJtLyQoYW1fX2RpcnN0YW1wKToKIAlAJChNS0RJUl9QKSBzcmMvYXJtCiAJQDogPiBzcmMvYXJtLyQoYW1fX2RpcnN0YW1wKQpAQCAtOTU3LDEwICsxMTM2LDIyIEBACiAJc3JjL21ldGFnLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9tZXRhZy9mZmkubG86IHNyYy9tZXRhZy8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy9tZXRhZy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvdmF4LyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvdmF4CisJQDogPiBzcmMvdmF4LyQoYW1fX2RpcnN0YW1wKQorc3JjL3ZheC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy92YXgvJChERVBESVIpCisJQDogPiBzcmMvdmF4LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy92YXgvZWxmYnNkLmxvOiBzcmMvdmF4LyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL3ZheC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvdmF4L2ZmaS5sbzogc3JjL3ZheC8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy92YXgvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCiBsaWJmZmkubGE6ICQobGliZmZpX2xhX09CSkVDVFMpICQobGliZmZpX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJmZmlfbGFfREVQRU5ERU5DSUVTKSAKLQkkKGxpYmZmaV9sYV9MSU5LKSAtcnBhdGggJCh0b29sZXhlY2xpYmRpcikgJChsaWJmZmlfbGFfT0JKRUNUUykgJChsaWJmZmlfbGFfTElCQUREKSAkKExJQlMpCisJJChBTV9WX0NDTEQpJChsaWJmZmlfbGFfTElOSykgLXJwYXRoICQodG9vbGV4ZWNsaWJkaXIpICQobGliZmZpX2xhX09CSkVDVFMpICQobGliZmZpX2xhX0xJQkFERCkgJChMSUJTKQorCiBsaWJmZmlfY29udmVuaWVuY2UubGE6ICQobGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMpICQobGliZmZpX2NvbnZlbmllbmNlX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJmZmlfY29udmVuaWVuY2VfbGFfREVQRU5ERU5DSUVTKSAKLQkkKExJTkspICAkKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTKSAkKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9MSUJBREQpICQoTElCUykKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICAkKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTKSAkKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9MSUJBREQpICQoTElCUykKIAogbW9zdGx5Y2xlYW4tY29tcGlsZToKIAktcm0gLWYgKi4kKE9CSkVYVCkKQEAgLTk3MCw2ICsxMTYxLDggQEAKIAktcm0gLWYgc3JjL2FhcmNoNjQvKi5sbwogCS1ybSAtZiBzcmMvYWxwaGEvKi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL2FscGhhLyoubG8KKwktcm0gLWYgc3JjL2FyYy8qLiQoT0JKRVhUKQorCS1ybSAtZiBzcmMvYXJjLyoubG8KIAktcm0gLWYgc3JjL2FybS8qLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvYXJtLyoubG8KIAktcm0gLWYgc3JjL2F2cjMyLyouJChPQkpFWFQpCkBAIC05ODYsNiArMTE3OSw4IEBACiAJLXJtIC1mIHNyYy9tMzJyLyoubG8KIAktcm0gLWYgc3JjL202OGsvKi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL202OGsvKi5sbworCS1ybSAtZiBzcmMvbTg4ay8qLiQoT0JKRVhUKQorCS1ybSAtZiBzcmMvbTg4ay8qLmxvCiAJLXJtIC1mIHNyYy9tZXRhZy8qLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvbWV0YWcvKi5sbwogCS1ybSAtZiBzcmMvbWljcm9ibGF6ZS8qLiQoT0JKRVhUKQpAQCAtOTk0LDYgKzExODksOCBAQAogCS1ybSAtZiBzcmMvbWlwcy8qLmxvCiAJLXJtIC1mIHNyYy9tb3hpZS8qLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvbW94aWUvKi5sbworCS1ybSAtZiBzcmMvbmlvczIvKi4kKE9CSkVYVCkKKwktcm0gLWYgc3JjL25pb3MyLyoubG8KIAktcm0gLWYgc3JjL3BhLyouJChPQkpFWFQpCiAJLXJtIC1mIHNyYy9wYS8qLmxvCiAJLXJtIC1mIHNyYy9wb3dlcnBjLyouJChPQkpFWFQpCkBAIC0xMDA4LDYgKzEyMDUsOCBAQAogCS1ybSAtZiBzcmMvc3BhcmMvKi5sbwogCS1ybSAtZiBzcmMvdGlsZS8qLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvdGlsZS8qLmxvCisJLXJtIC1mIHNyYy92YXgvKi4kKE9CSkVYVCkKKwktcm0gLWYgc3JjL3ZheC8qLmxvCiAJLXJtIC1mIHNyYy94ODYvKi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL3g4Ni8qLmxvCiAJLXJtIC1mIHNyYy94dGVuc2EvKi4kKE9CSkVYVCkKQEAgLTEwMjYsNiArMTIyNSw4IEBACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FhcmNoNjQvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYWxwaGEvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hbHBoYS8kKERFUERJUikvb3NmLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FyYy8kKERFUERJUikvYXJjb21wYWN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FyYy8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FybS8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FybS8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hcm0vJChERVBESVIpL3RyYW1wb2xpbmUuUGxvQGFtX19xdW90ZUAKQEAgLTEwNDMsNiArMTI0NCw4IEBACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL20zMnIvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbTY4ay8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL202OGsvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbTg4ay8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL204OGsvJChERVBESVIpL29ic2QuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbWV0YWcvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tZXRhZy8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9taWNyb2JsYXplLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKQEAgLTEwNTIsNiArMTI1NSw4IEBACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL21pcHMvJChERVBESVIpL28zMi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tb3hpZS8kKERFUERJUikvZWFiaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tb3hpZS8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL25pb3MyLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbmlvczIvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcGEvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wYS8kKERFUERJUikvaHB1eDMyLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3BhLyQoREVQRElSKS9saW51eC5QbG9AYW1fX3F1b3RlQApAQCAtMTA2MSw2ICsxMjY2LDggQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcG93ZXJwYy8kKERFUERJUikvZGFyd2luX2Nsb3N1cmUuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcG93ZXJwYy8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3Bvd2VycGMvJChERVBESVIpL2ZmaV9kYXJ3aW4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcG93ZXJwYy8kKERFUERJUikvZmZpX2xpbnV4NjQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcG93ZXJwYy8kKERFUERJUikvZmZpX3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcG93ZXJwYy8kKERFUERJUikvbGludXg2NC5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wb3dlcnBjLyQoREVQRElSKS9saW51eDY0X2Nsb3N1cmUuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcG93ZXJwYy8kKERFUERJUikvcHBjX2Nsb3N1cmUuUGxvQGFtX19xdW90ZUAKQEAgLTEwNzYsNiArMTI4Myw4IEBACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3NwYXJjLyQoREVQRElSKS92OS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy90aWxlLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvdGlsZS8kKERFUERJUikvdGlsZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy92YXgvJChERVBESVIpL2VsZmJzZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy92YXgvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy94ODYvJChERVBESVIpL2Rhcndpbi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy94ODYvJChERVBESVIpL2RhcndpbjY0LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3g4Ni8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACkBAIC0xMDg5LDUyICsxMjk4LDUyIEBACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3h0ZW5zYS8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAogCiAuUy5vOgotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX0NQUEFTKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKENQUEFTQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVMpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVNAYW1fX25vZGVwQCkkKENQUEFTQ09NUElMRSkgLWMgLW8gJEAgJDwKIAogLlMub2JqOgotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAorQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKEFNX1ZfQ1BQQVMpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVMpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChDUFBBU0NPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBU0BhbV9fbm9kZXBAKSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCiAKIC5TLmxvOgotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQU1fVl9DUFBBUylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoTFRDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVMpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoTFRDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVNAYW1fX25vZGVwQCkkKExUQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCAkPAogCiAuYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8CiAKIC5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKIAogLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAogCiBtb3N0bHljbGVhbi1saWJ0b29sOgogCS1ybSAtZiAqLmxvCkBAIC0xMTQ0LDYgKzEzNTMsNyBAQAogCS1ybSAtcmYgc3JjLy5saWJzIHNyYy9fbGlicwogCS1ybSAtcmYgc3JjL2FhcmNoNjQvLmxpYnMgc3JjL2FhcmNoNjQvX2xpYnMKIAktcm0gLXJmIHNyYy9hbHBoYS8ubGlicyBzcmMvYWxwaGEvX2xpYnMKKwktcm0gLXJmIHNyYy9hcmMvLmxpYnMgc3JjL2FyYy9fbGlicwogCS1ybSAtcmYgc3JjL2FybS8ubGlicyBzcmMvYXJtL19saWJzCiAJLXJtIC1yZiBzcmMvYXZyMzIvLmxpYnMgc3JjL2F2cjMyL19saWJzCiAJLXJtIC1yZiBzcmMvYmZpbi8ubGlicyBzcmMvYmZpbi9fbGlicwpAQCAtMTE1MiwxMCArMTM2MiwxMiBAQAogCS1ybSAtcmYgc3JjL2lhNjQvLmxpYnMgc3JjL2lhNjQvX2xpYnMKIAktcm0gLXJmIHNyYy9tMzJyLy5saWJzIHNyYy9tMzJyL19saWJzCiAJLXJtIC1yZiBzcmMvbTY4ay8ubGlicyBzcmMvbTY4ay9fbGlicworCS1ybSAtcmYgc3JjL204OGsvLmxpYnMgc3JjL204OGsvX2xpYnMKIAktcm0gLXJmIHNyYy9tZXRhZy8ubGlicyBzcmMvbWV0YWcvX2xpYnMKIAktcm0gLXJmIHNyYy9taWNyb2JsYXplLy5saWJzIHNyYy9taWNyb2JsYXplL19saWJzCiAJLXJtIC1yZiBzcmMvbWlwcy8ubGlicyBzcmMvbWlwcy9fbGlicwogCS1ybSAtcmYgc3JjL21veGllLy5saWJzIHNyYy9tb3hpZS9fbGlicworCS1ybSAtcmYgc3JjL25pb3MyLy5saWJzIHNyYy9uaW9zMi9fbGlicwogCS1ybSAtcmYgc3JjL3BhLy5saWJzIHNyYy9wYS9fbGlicwogCS1ybSAtcmYgc3JjL3Bvd2VycGMvLmxpYnMgc3JjL3Bvd2VycGMvX2xpYnMKIAktcm0gLXJmIHNyYy9zMzkwLy5saWJzIHNyYy9zMzkwL19saWJzCkBAIC0xMTYzLDYgKzEzNzUsNyBAQAogCS1ybSAtcmYgc3JjL3NoNjQvLmxpYnMgc3JjL3NoNjQvX2xpYnMKIAktcm0gLXJmIHNyYy9zcGFyYy8ubGlicyBzcmMvc3BhcmMvX2xpYnMKIAktcm0gLXJmIHNyYy90aWxlLy5saWJzIHNyYy90aWxlL19saWJzCisJLXJtIC1yZiBzcmMvdmF4Ly5saWJzIHNyYy92YXgvX2xpYnMKIAktcm0gLXJmIHNyYy94ODYvLmxpYnMgc3JjL3g4Ni9fbGlicwogCS1ybSAtcmYgc3JjL3h0ZW5zYS8ubGlicyBzcmMveHRlbnNhL19saWJzCiAKQEAgLTExNzMsNyArMTM4Niw3IEBACiAJQDogPiBkb2MvJChhbV9fZGlyc3RhbXApCiAKICQoc3JjZGlyKS9kb2MvbGliZmZpLmluZm86IGRvYy9saWJmZmkudGV4aSAkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aQotCXJlc3RvcmU9OiAmJiBiYWNrdXBkaXI9IiQoYW1fX2xlYWRpbmdfZG90KWFtJCQkJCIgJiYgXAorCSQoQU1fVl9NQUtFSU5GTylyZXN0b3JlPTogJiYgYmFja3VwZGlyPSIkKGFtX19sZWFkaW5nX2RvdClhbSQkJCQiICYmIFwKIAlhbV9fY3dkPWBwd2RgICYmICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgXAogCXJtIC1yZiAkJGJhY2t1cGRpciAmJiBta2RpciAkJGJhY2t1cGRpciAmJiBcCiAJaWYgKCQoTUFLRUlORk8pIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKQEAgLTExOTUsMTggKzE0MDgsMjAgQEAKIAlybSAtcmYgJCRiYWNrdXBkaXI7IGV4aXQgJCRyYwogCiBkb2MvbGliZmZpLmR2aTogZG9jL2xpYmZmaS50ZXhpICQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpIGRvYy8kKGFtX19kaXJzdGFtcCkKLQlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCisJJChBTV9WX1RFWEkyRFZJKVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKIAlNQUtFSU5GTz0nJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JIGRvYyAtSSAkKHNyY2RpcikvZG9jJyBcCi0JJChURVhJMkRWSSkgIC0tY2xlYW4gLW8gJEAgYHRlc3QgLWYgJ2RvYy9saWJmZmkudGV4aScgfHwgZWNobyAnJChzcmNkaXIpLydgZG9jL2xpYmZmaS50ZXhpIAorCSQoVEVYSTJEVkkpICQoQU1fVl90ZXhpbmZvKSAtLWJ1aWxkLWRpcj0kKEA6LmR2aT0udDJkKSAtbyAkQCAkKEFNX1ZfdGV4aWRldm51bGwpIFwKKwlgdGVzdCAtZiAnZG9jL2xpYmZmaS50ZXhpJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb2MvbGliZmZpLnRleGkKIAogZG9jL2xpYmZmaS5wZGY6IGRvYy9saWJmZmkudGV4aSAkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aSBkb2MvJChhbV9fZGlyc3RhbXApCi0JVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAorCSQoQU1fVl9URVhJMlBERilURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCiAJTUFLRUlORk89JyQoTUFLRUlORk8pICQoQU1fTUFLRUlORk9GTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSBkb2MgLUkgJChzcmNkaXIpL2RvYycgXAotCSQoVEVYSTJQREYpICAtLWNsZWFuIC1vICRAIGB0ZXN0IC1mICdkb2MvbGliZmZpLnRleGknIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRvYy9saWJmZmkudGV4aSAKKwkkKFRFWEkyUERGKSAkKEFNX1ZfdGV4aW5mbykgLS1idWlsZC1kaXI9JChAOi5wZGY9LnQycCkgLW8gJEAgJChBTV9WX3RleGlkZXZudWxsKSBcCisJYHRlc3QgLWYgJ2RvYy9saWJmZmkudGV4aScgfHwgZWNobyAnJChzcmNkaXIpLydgZG9jL2xpYmZmaS50ZXhpCiAKIGRvYy9saWJmZmkuaHRtbDogZG9jL2xpYmZmaS50ZXhpICQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpIGRvYy8kKGFtX19kaXJzdGFtcCkKLQlybSAtcmYgJChAOi5odG1sPS5odHApCi0JaWYgJChNQUtFSU5GT0hUTUwpICQoQU1fTUFLRUlORk9IVE1MRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLUkgZG9jIC1JICQoc3JjZGlyKS9kb2MgXAorCSQoQU1fVl9NQUtFSU5GTylybSAtcmYgJChAOi5odG1sPS5odHApCisJJChBTV9WX2F0KWlmICQoTUFLRUlORk9IVE1MKSAkKEFNX01BS0VJTkZPSFRNTEZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JIGRvYyAtSSAkKHNyY2RpcikvZG9jIFwKIAkgLW8gJChAOi5odG1sPS5odHApIGB0ZXN0IC1mICdkb2MvbGliZmZpLnRleGknIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRvYy9saWJmZmkudGV4aTsgXAogCXRoZW4gXAogCSAgcm0gLXJmICRAOyBcCkBAIC0xMjM4LDggKzE0NTMsOCBAQAogbWFpbnRhaW5lci1jbGVhbi12dGk6CiBATUFJTlRBSU5FUl9NT0RFX1RSVUVACS1ybSAtZiAkKHNyY2RpcikvZG9jL3N0YW1wLXZ0aSAkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aQogLmR2aS5wczoKLQlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCi0JJChEVklQUykgIC1vICRAICQ8CisJJChBTV9WX0RWSVBTKVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKwkkKERWSVBTKSAkKEFNX1ZfdGV4aW5mbykgLW8gJEAgJDwKIAogdW5pbnN0YWxsLWR2aS1hbToKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQpAQCAtMTMxOCw4ICsxNTMzLDcgQEAKIAlkb25lCiAKIG1vc3RseWNsZWFuLWFtaW5mbzoKLQktcm0gLXJmIGxpYmZmaS5hdXggbGliZmZpLmNwIGxpYmZmaS5jcHMgbGliZmZpLmZuIGxpYmZmaS5reSBsaWJmZmkubG9nIFwKLQkgIGxpYmZmaS5wZyBsaWJmZmkudG1wIGxpYmZmaS50b2MgbGliZmZpLnRwIGxpYmZmaS52cgorCS1ybSAtcmYgZG9jL2xpYmZmaS50MmQgZG9jL2xpYmZmaS50MnAKIAogY2xlYW4tYW1pbmZvOgogCS10ZXN0IC16ICJkb2MvbGliZmZpLmR2aSBkb2MvbGliZmZpLnBkZiBkb2MvbGliZmZpLnBzIGRvYy9saWJmZmkuaHRtbCIgXApAQCAtMTM1OSwxNCArMTU3MywxMyBAQAogIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCiAjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwogIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoUkVDVVJTSVZFX1RBUkdFVFMpICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgotCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCi0JZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAotCSAgY2FzZSAkJGYgaW4gXAotCSAgICAqPSogfCAtLVsha10qKTs7IFwKLQkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAorJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpOgorCUBmYWlsPTsgXAorCWlmICQoYW1fX21ha2Vfa2VlcGdvaW5nKTsgdGhlbiBcCisJICBmYWlsY29tPSdmYWlsPXllcyc7IFwKKwllbHNlIFwKKwkgIGZhaWxjb209J2V4aXQgMSc7IFwKKwlmaTsgXAogCWRvdF9zZWVuPW5vOyBcCiAJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAogCWNhc2UgIiRAIiBpbiBcCkBAIC0xMzg3LDMxICsxNjAwLDEzIEBACiAJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKIAkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCiAJZmk7IHRlc3QgLXogIiQkZmFpbCIKLXRhZ3MtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCi0JZG9uZQotY3RhZ3MtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAotCWRvbmUKLWNzY29wZWxpc3QtcmVjdXJzaXZlOgotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNzY29wZWxpc3QpOyBcCi0JZG9uZQogCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUworSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IHRhZ3MtcmVjdXJzaXZlCitUQUdTOiB0YWdzCiAKLVRBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBmZmljb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQordGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQogCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAogCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXApAQCAtMTQyNywxMiArMTYyMiw3IEBACiAJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAogCSAgZmk7IFwKIAlkb25lOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGZmaWNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAogCXNoaWZ0OyBcCiAJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKQEAgLTE0NDQsMTUgKzE2MzQsMTEgQEAKIAkgICAgICAkJHVuaXF1ZTsgXAogCSAgZmk7IFwKIAlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBmZmljb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBmZmljb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorY3RhZ3M6IGN0YWdzLXJlY3Vyc2l2ZQorCitDVEFHUzogY3RhZ3MKK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAogCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAogCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAogCSAgICAgJCR1bmlxdWUKQEAgLTE0NjEsMTggKzE2NDcsMTYgQEAKIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAogCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAogCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotCiBjc2NvcGU6IGNzY29wZS5maWxlcwogCXRlc3QgISAtcyBjc2NvcGUuZmlsZXMgXAogCSAgfHwgJChDU0NPUEUpIC1iIC1xICQoQU1fQ1NDT1BFRkxBR1MpICQoQ1NDT1BFRkxBR1MpIC1pIGNzY29wZS5maWxlcyAkKENTQ09QRV9BUkdTKQotCiBjbGVhbi1jc2NvcGU6CiAJLXJtIC1mIGNzY29wZS5maWxlcworY3Njb3BlLmZpbGVzOiBjbGVhbi1jc2NvcGUgY3Njb3BlbGlzdAorY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKIAotY3Njb3BlLmZpbGVzOiBjbGVhbi1jc2NvcGUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgY3Njb3BlbGlzdAotCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApJzsgXAorY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCiAJY2FzZSAiJChzcmNkaXIpIiBpbiBcCiAJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCiAJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXApAQCAtMTU0OCw3ICsxNzMyLDcgQEAKIAlkb25lCiAJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAogCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCi0JICBkaXN0LWluZm8KKwkgIGRpc3QtaW5mbyBkaXN0LWhvb2sKIAktdGVzdCAtbiAiJChhbV9fc2tpcF9tb2RlX2ZpeCkiIFwKIAl8fCBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTc1NSBcCiAJCS1leGVjIGNobW9kIHUrcnd4LGdvK3J4IHt9IFw7IC1vIFwKQEAgLTE2MDksOSArMTc5Myw5IEBACiAJKi56aXAqKSBcCiAJICB1bnppcCAkKGRpc3RkaXIpLnppcCA7O1wKIAllc2FjCi0JY2htb2QgLVIgYS13ICQoZGlzdGRpcik7IGNobW9kIHUrdyAkKGRpc3RkaXIpCi0JbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQKLQlta2RpciAkKGRpc3RkaXIpL19pbnN0CisJY2htb2QgLVIgYS13ICQoZGlzdGRpcikKKwljaG1vZCB1K3cgJChkaXN0ZGlyKQorCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkICQoZGlzdGRpcikvX2luc3QKIAljaG1vZCBhLXcgJChkaXN0ZGlyKQogCXRlc3QgLWQgJChkaXN0ZGlyKS9fYnVpbGQgfHwgZXhpdCAwOyBcCiAJZGNfaW5zdGFsbF9iYXNlPWAkKGFtX19jZCkgJChkaXN0ZGlyKS9faW5zdCAmJiBwd2QgfCBzZWQgLWUgJ3MsXlteOlxcL106W1xcL10sLywnYCBcCkBAIC0xNzE0LDYgKzE4OTgsOCBAQAogCS1ybSAtZiBzcmMvYWFyY2g2NC8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL2FscGhhLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL2FscGhhLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvYXJjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL2FyYy8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL2FybS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9hcm0vJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9hdnIzMi8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCkBAIC0xNzMwLDYgKzE5MTYsOCBAQAogCS1ybSAtZiBzcmMvbTMyci8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL202OGsvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvbTY4ay8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL204OGsvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvbTg4ay8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL21ldGFnLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL21ldGFnLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvbWljcm9ibGF6ZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCkBAIC0xNzM4LDYgKzE5MjYsOCBAQAogCS1ybSAtZiBzcmMvbWlwcy8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL21veGllLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL21veGllLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvbmlvczIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvbmlvczIvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9wYS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9wYS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL3Bvd2VycGMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQpAQCAtMTc1Miw2ICsxOTQyLDggQEAKIAktcm0gLWYgc3JjL3NwYXJjLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvdGlsZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy90aWxlLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvdmF4LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL3ZheC8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy94ODYvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy94dGVuc2EvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQpAQCAtMTc2OCw3ICsxOTYwLDcgQEAKIAogZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCiAJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCi0JLXJtIC1yZiBzcmMvJChERVBESVIpIHNyYy9hYXJjaDY0LyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9hdnIzMi8kKERFUERJUikgc3JjL2JmaW4vJChERVBESVIpIHNyYy9jcmlzLyQoREVQRElSKSBzcmMvZnJ2LyQoREVQRElSKSBzcmMvaWE2NC8kKERFUERJUikgc3JjL20zMnIvJChERVBESVIpIHNyYy9tNjhrLyQoREVQRElSKSBzcmMvbWV0YWcvJChERVBESVIpIHNyYy9taWNyb2JsYXplLyQoREVQRElSKSBzcmMvbWlwcy8kKERFUERJUikgc3JjL21veGllLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMvdGlsZS8kKERFUERJUikgc3JjL3g4Ni8kKERFUERJUikgc3JjL3h0ZW5zYS8kKERFUERJUikKKwktcm0gLXJmIHNyYy8kKERFUERJUikgc3JjL2FhcmNoNjQvJChERVBESVIpIHNyYy9hbHBoYS8kKERFUERJUikgc3JjL2FyYy8kKERFUERJUikgc3JjL2FybS8kKERFUERJUikgc3JjL2F2cjMyLyQoREVQRElSKSBzcmMvYmZpbi8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9tODhrLyQoREVQRElSKSBzcmMvbWV0YWcvJChERVBESVIpIHNyYy9taWNyb2JsYXplLyQoREVQRElSKSBzcmMvbWlwcy8kKERFUERJUikgc3JjL21veGllLyQoREVQRElSKSBzcmMvbmlvczIvJChERVBESVIpIHNyYy9wYS8kKERFUERJUikgc3JjL3Bvd2VycGMvJChERVBESVIpIHNyYy9zMzkwLyQoREVQRElSKSBzcmMvc2gvJChERVBESVIpIHNyYy9zaDY0LyQoREVQRElSKSBzcmMvc3BhcmMvJChERVBESVIpIHNyYy90aWxlLyQoREVQRElSKSBzcmMvdmF4LyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKSBzcmMveHRlbnNhLyQoREVQRElSKQogCS1ybSAtZiBNYWtlZmlsZQogZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCiAJZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncwpAQCAtMTkwNyw3ICsyMDk5LDcgQEAKIG1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCiAJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCiAJLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCi0JLXJtIC1yZiBzcmMvJChERVBESVIpIHNyYy9hYXJjaDY0LyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9hdnIzMi8kKERFUERJUikgc3JjL2JmaW4vJChERVBESVIpIHNyYy9jcmlzLyQoREVQRElSKSBzcmMvZnJ2LyQoREVQRElSKSBzcmMvaWE2NC8kKERFUERJUikgc3JjL20zMnIvJChERVBESVIpIHNyYy9tNjhrLyQoREVQRElSKSBzcmMvbWV0YWcvJChERVBESVIpIHNyYy9taWNyb2JsYXplLyQoREVQRElSKSBzcmMvbWlwcy8kKERFUERJUikgc3JjL21veGllLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMvdGlsZS8kKERFUERJUikgc3JjL3g4Ni8kKERFUERJUikgc3JjL3h0ZW5zYS8kKERFUERJUikKKwktcm0gLXJmIHNyYy8kKERFUERJUikgc3JjL2FhcmNoNjQvJChERVBESVIpIHNyYy9hbHBoYS8kKERFUERJUikgc3JjL2FyYy8kKERFUERJUikgc3JjL2FybS8kKERFUERJUikgc3JjL2F2cjMyLyQoREVQRElSKSBzcmMvYmZpbi8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9tODhrLyQoREVQRElSKSBzcmMvbWV0YWcvJChERVBESVIpIHNyYy9taWNyb2JsYXplLyQoREVQRElSKSBzcmMvbWlwcy8kKERFUERJUikgc3JjL21veGllLyQoREVQRElSKSBzcmMvbmlvczIvJChERVBESVIpIHNyYy9wYS8kKERFUERJUikgc3JjL3Bvd2VycGMvJChERVBESVIpIHNyYy9zMzkwLyQoREVQRElSKSBzcmMvc2gvJChERVBESVIpIHNyYy9zaDY0LyQoREVQRElSKSBzcmMvc3BhcmMvJChERVBESVIpIHNyYy90aWxlLyQoREVQRElSKSBzcmMvdmF4LyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKSBzcmMveHRlbnNhLyQoREVQRElSKQogCS1ybSAtZiBNYWtlZmlsZQogbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tYW1pbmZvIFwKIAltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi12dGkKQEAgLTE5MjksMzYgKzIxMjEsMzYgQEAKIAl1bmluc3RhbGwtcGRmLWFtIHVuaW5zdGFsbC1wa2djb25maWdEQVRBIHVuaW5zdGFsbC1wcy1hbSBcCiAJdW5pbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKIAotLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGFsbCBcCi0JY3Njb3BlbGlzdC1yZWN1cnNpdmUgY3RhZ3MtcmVjdXJzaXZlIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCBcCi0JdGFncy1yZWN1cnNpdmUKKy5NQUtFOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgYWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAogCi0uUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKLQlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWFtaW5mbyBcCi0JY2xlYW4tY3Njb3BlIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCi0JY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY2xlYW4tdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBjc2NvcGUgXAotCWNzY29wZWxpc3QgY3Njb3BlbGlzdC1yZWN1cnNpdmUgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3QgXAotCWRpc3QtYWxsIGRpc3QtYnppcDIgZGlzdC1nemlwIGRpc3QtaW5mbyBkaXN0LWx6aXAgZGlzdC1zaGFyIFwKLQlkaXN0LXRhclogZGlzdC14eiBkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIFwKLQlkaXN0dW5pbnN0YWxsY2hlY2sgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgaW5zdGFsbC1wcyBcCi0JaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWFtaW5mbyBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tdnRpIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1hbWluZm8gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLXZ0aSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgXAotCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWR2aS1hbSBcCi0JdW5pbnN0YWxsLWh0bWwtYW0gdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLXBkZi1hbSBcCi0JdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgdW5pbnN0YWxsLXBzLWFtIFwKLQl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUworLlBIT05ZOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIFwKKwlhbS0tcmVmcmVzaCBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1hbWluZm8gY2xlYW4tY3Njb3BlIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCWNsZWFuLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgY3Njb3BlIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAorCWN0YWdzLWFtIGRpc3QgZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1ob29rIFwKKwlkaXN0LWluZm8gZGlzdC1semlwIGRpc3Qtc2hhciBkaXN0LXRhclogZGlzdC14eiBkaXN0LXppcCBcCisJZGlzdGNoZWNrIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBcCisJZGlzdGRpciBkaXN0dW5pbnN0YWxsY2hlY2sgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBcCisJaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBcCisJaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1hbWluZm8gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltYWludGFpbmVyLWNsZWFuLXZ0aSBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1hbWluZm8gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwltb3N0bHljbGVhbi12dGkgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIFwKKwl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWR2aS1hbSB1bmluc3RhbGwtaHRtbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLXBkZi1hbSB1bmluc3RhbGwtcGtnY29uZmlnREFUQSBcCisJdW5pbnN0YWxsLXBzLWFtIHVuaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCiAKIAorZGlzdC1ob29rOgorCWlmIFsgLWQgJCh0b3Bfc3JjZGlyKS8uZ2l0IF0gOyB0aGVuIChjZCAkKHRvcF9zcmNkaXIpOyBnaXQgbG9nIC0tbm8tZGVjb3JhdGUpIDsgZWxzZSBlY2hvICdTZWUgZ2l0IGxvZyBmb3IgaGlzdG9yeS4nIDsgZmkgPiAkKGRpc3RkaXIpL0NoYW5nZUxvZworCiAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgogIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCiAuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL1JFQURNRSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvUkVBRE1FCmluZGV4IDE5MTU2ZmUuLjg0Yjk0MjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvUkVBRE1FCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvUkVBRE1FCkBAIC0xLDggKzEsOCBAQAogU3RhdHVzCiA9PT09PT0KIAotbGliZmZpLTMuMC4xMyB3YXMgcmVsZWFzZWQgb24gTWFyY2ggMTcsIDIwMTMuICBDaGVjayB0aGUgbGliZmZpIHdlYgotcGFnZSBmb3IgdXBkYXRlczogPFVSTDpodHRwOi8vc291cmNld2FyZS5vcmcvbGliZmZpLz4uCitsaWJmZmktMy4xIHdhcyByZWxlYXNlZCBvbiBNYXkgMTksIDIwMTQuICBDaGVjayB0aGUgbGliZmZpIHdlYiBwYWdlCitmb3IgdXBkYXRlczogPFVSTDpodHRwOi8vc291cmNld2FyZS5vcmcvbGliZmZpLz4uCiAKIAogV2hhdCBpcyBsaWJmZmk/CkBAIC00Myw3ICs0Myw3IEBACiBGb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXRhaWxzIGFuZCB0ZXN0aW5nIHN0YXR1cywgcGxlYXNlCiByZWZlciB0byB0aGUgd2lraSBwYWdlIGhlcmU6CiAKLSBodHRwOi8vd3d3Lm1veGllbG9naWMub3JnL3dpa2kvaW5kZXgucGhwP3RpdGxlPUxpYmZmaV8zLjAuMTMKKyBodHRwOi8vd3d3Lm1veGllbG9naWMub3JnL3dpa2kvaW5kZXgucGhwP3RpdGxlPUxpYmZmaV8zLjEKIAogQXQgdGhlIHRpbWUgb2YgcmVsZWFzZSwgdGhlIGZvbGxvd2luZyBiYXNpYyBjb25maWd1cmF0aW9ucyBoYXZlIGJlZW4KIHRlc3RlZDoKQEAgLTUxLDkgKzUxLDExIEBACiB8LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiB8IEFyY2hpdGVjdHVyZSAgICB8IE9wZXJhdGluZyBTeXN0ZW0gfCBDb21waWxlciAgICAgICAgICAgICAgICB8CiB8LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8IEFBcmNoNjQgKEFSTTY0KSB8IGlPUyAgICAgICAgICAgICAgfCBDbGFuZyAgICAgICAgICAgICAgICAgICB8CiB8IEFBcmNoNjQgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IEFscGhhICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IEFscGhhICAgICAgICAgICB8IFRydTY0ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Cit8IEFSQyAgICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IEFSTSAgICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IEFSTSAgICAgICAgICAgICB8IGlPUyAgICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IEFWUjMyICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CkBAIC02MSwxNSArNjMsMTcgQEAKIHwgSFBQQSAgICAgICAgICAgIHwgSFBVWCAgICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgSUEtNjQgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgTTY4SyAgICAgICAgICAgIHwgRnJlZU1pTlQgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKLXwgTTY4SyAgICAgICAgICAgIHwgTGludXgJICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKK3wgTTY4SyAgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgTTY4SyAgICAgICAgICAgIHwgUlRFTVMgICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKK3wgTTg4SyAgICAgICAgICAgIHwgT3BlbkJTRC9tdm1lODhrICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgTWV0YSAgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgTWljcm9CbGF6ZSAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgTUlQUyAgICAgICAgICAgIHwgSVJJWCAgICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgTUlQUyAgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgTUlQUyAgICAgICAgICAgIHwgUlRFTVMgICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgTUlQUzY0ICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKLXwgTW94aWUJCSAgfCBCYXJlIG1ldGFsCSAgICAgfCBHQ0MKK3wgTW94aWUgICAgICAgICAgIHwgQmFyZSBtZXRhbCAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKK3wgTmlvcyBJSSAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgUG93ZXJQQyAzMi1iaXQgIHwgQUlYICAgICAgICAgICAgICB8IElCTSBYTCBDICAgICAgICAgICAgICAgIHwKIHwgUG93ZXJQQyA2NC1iaXQgIHwgQUlYICAgICAgICAgICAgICB8IElCTSBYTCBDICAgICAgICAgICAgICAgIHwKIHwgUG93ZXJQQyAgICAgICAgIHwgQU1JR0EgICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTc3LDcgKzgxLDggQEAKIHwgUG93ZXJQQyAgICAgICAgIHwgTWFjIE9TWCAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgUG93ZXJQQyAgICAgICAgIHwgRnJlZUJTRCAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgUG93ZXJQQyA2NC1iaXQgIHwgRnJlZUJTRCAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKLXwgUG93ZXJQQyA2NC1iaXQgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKK3wgUG93ZXJQQyA2NC1iaXQgIHwgTGludXggRUxGdjEgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKK3wgUG93ZXJQQyA2NC1iaXQgIHwgTGludXggRUxGdjIgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgUzM5MCAgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgUzM5MFggICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgU1BBUkMgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTg3LDYgKzkyLDcgQEAKIHwgU1BBUkM2NCAgICAgICAgIHwgRnJlZUJTRCAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgU1BBUkM2NCAgICAgICAgIHwgU29sYXJpcyAgICAgICAgICB8IE9yYWNsZSBTb2xhcmlzIFN0dWRpbyBDIHwKIHwgVElMRS1HeC9USUxFUHJvIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKK3wgVkFYICAgICAgICAgICAgIHwgT3BlbkJTRC92YXggICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgWDg2ICAgICAgICAgICAgIHwgRnJlZUJTRCAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgWDg2ICAgICAgICAgICAgIHwgR05VIEhVUkQgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgWDg2ICAgICAgICAgICAgIHwgSW50ZXJpeCAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTEyMCw2ICsxMjYsOSBAQAogImNvbmZpZ3VyZSIgcHJvZ3JhbSBmb3VuZCBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGxpYmZmaSBzb3VyY2UKIGRpc3RyaWJ1dGlvbi4KIAorSWYgeW91J3JlIGJ1aWxkaW5nIGxpYmZmaSBkaXJlY3RseSBmcm9tIHZlcnNpb24gY29udHJvbCwgY29uZmlndXJlIHdvbid0CitleGlzdCB5ZXQ7IHJ1biAuL2F1dG9nZW4uc2ggZmlyc3QuCisKIFlvdSBtYXkgd2FudCB0byB0ZWxsIGNvbmZpZ3VyZSB3aGVyZSB0byBpbnN0YWxsIHRoZSBsaWJmZmkgbGlicmFyeSBhbmQKIGhlYWRlciBmaWxlcy4gVG8gZG8gdGhhdCwgdXNlIHRoZSAtLXByZWZpeCBjb25maWd1cmUgc3dpdGNoLiAgTGliZmZpCiB3aWxsIGluc3RhbGwgdW5kZXIgL3Vzci9sb2NhbCBieSBkZWZhdWx0LiAKQEAgLTEzNywxMyArMTQ2LDE2IEBACiBNaWNyb3NvZnQncyBWaXN1YWwgQysrIGNvbXBpbGVyLiAgSW4gdGhpcyBjYXNlLCB1c2UgdGhlIG1zdmNjLnNoCiB3cmFwcGVyIHNjcmlwdCBkdXJpbmcgY29uZmlndXJhdGlvbiBsaWtlIHNvOgogCi1wYXRoL3RvL2NvbmZpZ3VyZSBDQz1wYXRoL3RvL21zdmNjLnNoIExEPWxpbmsgQ1BQPVwiY2wgLW5vbG9nbyAtRVBcIgorcGF0aC90by9jb25maWd1cmUgQ0M9cGF0aC90by9tc3ZjYy5zaCBDWFg9cGF0aC90by9tc3ZjYy5zaCBMRD1saW5rIENQUD1cImNsIC1ub2xvZ28gLUVQXCIKIAotRm9yIDY0LWJpdCBXaW5kb3dzIGJ1aWxkcywgdXNlIENDPSJwYXRoL3RvL21zdmNjLnNoIC1tNjQiLgotWW91IG1heSBhbHNvIG5lZWQgdG8gc3BlY2lmeSAtLWJ1aWxkIGFwcHJvcHJpYXRlbHkuIFdoZW4gYnVpbGRpbmcgd2l0aCBNU1ZDCi11bmRlciBhIE1pbmdXIGVudmlyb25tZW50LCB5b3UgbWF5IG5lZWQgdG8gcmVtb3ZlIHRoZSBsaW5lIGluIGNvbmZpZ3VyZQotdGhhdCBzZXRzICdmaXhfc3JjZmlsZV9wYXRoJyB0byBhICdjeWdwYXRoJyBjb21tYW5kLiAoJ2N5Z3BhdGgnIGlzIG5vdAotcHJlc2VudCBpbiBNaW5nVywgYW5kIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIE1pbmdXLXN0eWxlIHBhdGhzLikKK0ZvciA2NC1iaXQgV2luZG93cyBidWlsZHMsIHVzZSBDQz0icGF0aC90by9tc3ZjYy5zaCAtbTY0IiBhbmQKK0NYWD0icGF0aC90by9tc3ZjYy5zaCAtbTY0Ii4gIFlvdSBtYXkgYWxzbyBuZWVkIHRvIHNwZWNpZnkgLS1idWlsZAorYXBwcm9wcmlhdGVseS4KKworV2hlbiBidWlsZGluZyB3aXRoIE1TVkMgdW5kZXIgYSBNaW5nVyBlbnZpcm9ubWVudCwgeW91IG1heSBuZWVkIHRvCityZW1vdmUgdGhlIGxpbmUgaW4gY29uZmlndXJlIHRoYXQgc2V0cyAnZml4X3NyY2ZpbGVfcGF0aCcgdG8gYSAnY3lncGF0aCcKK2NvbW1hbmQuICAoJ2N5Z3BhdGgnIGlzIG5vdCBwcmVzZW50IGluIE1pbmdXLCBhbmQgaXMgbm90IHJlcXVpcmVkIHdoZW4KK3VzaW5nIE1pbmdXLXN0eWxlIHBhdGhzLikKIAogRm9yIGlPUyBidWlsZHMsIHRoZSAnbGliZmZpLnhjb2RlcHJvaicgWGNvZGUgcHJvamVjdCBpcyBhdmFpbGFibGUuCiAKQEAgLTE2MSw3ICsxNzMsMjAgQEAKIEhpc3RvcnkKID09PT09PT0KIAotU2VlIHRoZSBDaGFuZ2VMb2cgZmlsZXMgZm9yIGRldGFpbHMuCitTZWUgdGhlIGdpdCBsb2cgZm9yIGRldGFpbHMgYXQgaHR0cDovL2dpdGh1Yi5jb20vYXRncmVlbi9saWJmZmkuCisKKzMuMSBNYXktMTktMTQKKyAgICAgICAgQWRkIEFBcmNoNjQgKEFSTTY0KSBpT1Mgc3VwcG9ydC4KKyAgICAgICAgQWRkIE5pb3MgSUkgc3VwcG9ydC4KKyAgICAgICAgQWRkIG04OGsgYW5kIERFQyBWQVggc3VwcG9ydC4KKwlBZGQgc3VwcG9ydCBmb3Igc3RkY2FsbCwgdGhpc2NhbGwsIGFuZCBmYXN0Y2FsbCBvbiBub24tV2luZG93cworCSAgMzItYml0IHg4NiB0YXJnZXRzIHN1Y2ggYXMgTGludXguCisJVmFyaW91cyBBbmRyb2lkLCBNSVBTIE4zMiwgeDg2LCBGcmVlQlNEIGFuZCBVbHRyYVNQQVJDIElJaQorCSAgZml4ZXMuCisJTWFrZSB0aGUgdGVzdHN1aXRlIG1vcmUgcm9idXN0OiBlbGltaW5hdGUgc2V2ZXJhbCBzcHVyaW91cworCSAgZmFpbHVyZXMsIGFuZCByZXNwZWN0IHRoZSAkQ0MgYW5kICRDWFggZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCUFyY2hpdmUgb2ZmIHRoZSBtYW51YWxseSBtYWludGFpbmVkIENoYW5nZUxvZyBpbiBmYXZvciBvZiBnaXQKKwkgIGxvZy4KIAogMy4wLjEzIE1hci0xNy0xMwogCUFkZCBNZXRhIHN1cHBvcnQuCkBAIC0xODcsNyArMjEyLDYgQEAKIAogMy4wLjExIEFwci0xMS0xMgogICAgICAgICBMb3RzIG9mIGJ1aWxkIGZpeGVzLgotCUFkZCBBbWlnYSBuZXdlciBNYWNPUyBzdXBwb3J0LgogCUFkZCBzdXBwb3J0IGZvciB2YXJpYWRpYyBmdW5jdGlvbnMgKGZmaV9wcmVwX2NpZl92YXIpLgogCUFkZCBMaW51eC94MzIgc3VwcG9ydC4KIAlBZGQgdGhpc2NhbGwsIGZhc3RjYWxsIGFuZCBNU1ZDIGNkZWNsIHN1cHBvcnQgb24gV2luZG93cy4KQEAgLTMzOSw3ICszNjMsNyBAQAogQXV0aG9ycyAmIENyZWRpdHMKID09PT09PT09PT09PT09PT09CiAKLWxpYmZmaSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEFudGhvbnkgR3JlZW4gPGdyZWVuQHJlZGhhdC5jb20+LgorbGliZmZpIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+LgogCiBUaGUgZGV2ZWxvcGVycyBvZiB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gcHJvamVjdCBoYXZlIG1hZGUKIGlubnVtZXJhYmxlIHZhbHVhYmxlIGNvbnRyaWJ1dGlvbnMuICBTZWUgdGhlIENoYW5nZUxvZyBmaWxlIGZvcgpAQCAtMzYzLDEwICszODcsMTIgQEAKIGlhNjQJCUhhbnMgQm9laG0KIG0zMnIJCUthenVoaXJvIEluYW9rYQogbTY4awkJQW5kcmVhcyBTY2h3YWIKK204OGsJCU1pb2QgVmFsbGF0CiBtaWNyb2JsYXplCU5hdGhhbiBSb3NzaQogbWlwcwkJQW50aG9ueSBHcmVlbiwgQ2FzZXkgTWFyc2hhbGwKIG1pcHM2NAkJRGF2aWQgRGFuZXkKIG1veGllCQlBbnRob255IEdyZWVuCituaW9zIGlpCQlTYW5kcmEgTG9vc2Vtb3JlCiBwYQkJUmFuZG9scGggQ2h1bmcsIERhdmUgQW5nbGluLCBBbmRyZWFzIFRvYmxlcgogcG93ZXJwYwkJR2VvZmZyZXkgS2VhdGluZywgQW5kcmVhcyBUb2JsZXIsIAogCQkJIERhdmlkIEVkZWxzb2huLCBKb2huIEhvcm5rdmlzdApAQCAtMzc2LDYgKzQwMiw3IEBACiBzaDY0CQlLYXogS29qaW1hCiBzcGFyYwkJQW50aG9ueSBHcmVlbiwgR29yZG9uIElybGFtCiB0aWxlLWd4L3RpbGVwcm8gV2FsdGVyIExlZQordmF4CQlNaW9kIFZhbGxhdAogeDg2CQlBbnRob255IEdyZWVuLCBKb24gQmVuaXN0b24KIHg4Ni02NAkJQm8gVGhvcnNlbgogeHRlbnNhCQlDaHJpcyBaYW5rZWwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYWNsb2NhbC5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYWNsb2NhbC5tNAppbmRleCBjM2FiMjcyLi42MjkyZmJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9hY2xvY2FsLm00CkBAIC0xLDYgKzEsNiBAQAotIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTIuMiAtKi0gQXV0b2NvbmYgLSotCisjIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xMy40IC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTExLDYgKzExLDcgQEAKICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQogIyBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKK200X2lmbmRlZihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbbTRfZGVmdW4oW19BTV9DT05GSUdfTUFDUk9fRElSU10sIFtdKW00X2RlZnVuKFtBQ19DT05GSUdfTUFDUk9fRElSU10sIFtfQU1fQ09ORklHX01BQ1JPX0RJUlMoJEApXSldKQogbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKICAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAogbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42OV0sLApAQCAtODM3LDI0ICs4MzgsMjIgQEAKIGRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKIGRubCBBQ19ERUZVTihbQUNfTFRETF9ETFNZTV9VU0NPUkVdLCBbXSkKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgOAotCiAjIEFNX0FVVE9NQUtFX1ZFUlNJT04oVkVSU0lPTikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBBdXRvbWFrZSBYLlkgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZW5zdXJlIGFjbG9jYWwubTQgaGFzIGJlZW4KICMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCiAjIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQogQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAotW2FtX19hcGlfdmVyc2lvbj0nMS4xMicKK1thbV9fYXBpX3ZlcnNpb249JzEuMTMnCiBkbmwgU29tZSB1c2VycyBmaW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIG1pc3Rha2UgaXQgZm9yIGEgd2F5IHRvCiBkbmwgcmVxdWlyZSBzb21lIG1pbmltdW0gdmVyc2lvbi4gIFBvaW50IHRoZW0gdG8gdGhlIHJpZ2h0IG1hY3JvLgotbTRfaWYoWyQxXSwgWzEuMTIuMl0sIFtdLAorbTRfaWYoWyQxXSwgWzEuMTMuNF0sIFtdLAogICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAogXSkKIApAQCAtODcwLDIxICs4NjksMTkgQEAKICMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIHRoZXkgY2FuIGJlIHRyYWNlZC4KICMgVGhpcyBmdW5jdGlvbiBpcyBBQ19SRVFVSVJFZCBieSBBTV9JTklUX0FVVE9NQUtFLgogQUNfREVGVU4oW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dLAotW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTIuMl0pZG5sCitbQU1fQVVUT01BS0VfVkVSU0lPTihbMS4xMy40XSlkbmwKIG00X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCiAgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKIF9BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQogCiAjIEZpZ3VyZSBvdXQgaG93IHRvIHJ1biB0aGUgYXNzZW1ibGVyLiAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDUKLQogIyBBTV9QUk9HX0FTCiAjIC0tLS0tLS0tLS0KIEFDX0RFRlVOKFtBTV9QUk9HX0FTXSwKQEAgLTg5OSwxNCArODk2LDEyIEBACiAKICMgQU1fQVVYX0RJUl9FWFBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMgotCiAjIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKICMgJGFjX2F1eF9kaXIgdG8gJyRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KICMgJyRzcmNkaXInLCAnJHNyY2Rpci8uLicsIG9yICckc3JjZGlyLy4uLy4uJy4KQEAgLTk1NCwxNCArOTQ5LDEyIEBACiAKICMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMTAKLQogIyBBTV9DT05ESVRJT05BTChOQU1FLCBTSEVMTC1DT05ESVRJT04pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRGVmaW5lIGEgY29uZGl0aW9uYWwuCkBAIC05ODcsMTMgKzk4MCwxMiBAQAogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXV0pCiBmaV0pXSkKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMTcKIAogIyBUaGVyZSBhcmUgYSBmZXcgZGlydHkgaGFja3MgYmVsb3cgdG8gYXZvaWQgbGV0dGluZyAnQUNfUFJPR19DQycgYmUKICMgd3JpdHRlbiBpbiBjbGVhciwgaW4gd2hpY2ggY2FzZSBhdXRvbWFrZSwgd2hlbiByZWFkaW5nIGFjbG9jYWwubTQsCkBAIC0xMTc5LDE5ICsxMTcxLDE4IEBACiAKICMgR2VuZXJhdGUgY29kZSB0byBzZXQgdXAgZGVwZW5kZW5jeSB0cmFja2luZy4gICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNgogCiAjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAogW3sKLSAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBPbGRlciBBdXRvY29uZiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCiAgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKICAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCiAgIGNhc2UgJENPTkZJR19GSUxFUyBpbgpAQCAtMTIyMCw3ICsxMjExLDcgQEAKICAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAogICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCiAgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCi0gICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgdGVzdCAteiAiJGFtX19pbmNsdWRlIiAmJiBjb250aW51ZQogICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCiAgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAogICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQpAQCAtMTI1NiwxNCArMTI0NywxMiBAQAogCiAjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDE5Ci0KICMgVGhpcyBtYWNybyBhY3R1YWxseSBkb2VzIHRvbyBtdWNoLiAgU29tZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGlmCiAjIHlvdXIgcGFja2FnZSBkb2VzIGNlcnRhaW4gdGhpbmdzLiAgQnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGEgYmlnIGRlYWwuCiAKQEAgLTEyNzksNyArMTI2OCw3IEBACiAjIGFyZ3VtZW50cyBtYW5kYXRvcnksIGFuZCB0aGVuIHdlIGNhbiBkZXBlbmQgb24gYSBuZXcgQXV0b2NvbmYKICMgcmVsZWFzZSBhbmQgZHJvcCB0aGUgb2xkIGNhbGwgc3VwcG9ydC4KIEFDX0RFRlVOKFtBTV9JTklUX0FVVE9NQUtFXSwKLVtBQ19QUkVSRVEoWzIuNjJdKWRubAorW0FDX1BSRVJFUShbMi42NV0pZG5sCiBkbmwgQXV0b2NvbmYgd2FudHMgdG8gZGlzYWxsb3cgQU1fIG5hbWVzLiAgV2UgZXhwbGljaXRseSBhbGxvdwogZG5sIHRoZSBvbmVzIHdlIGNhcmUgYWJvdXQuCiBtNF9wYXR0ZXJuX2FsbG93KFteQU1fW0EtWl0rRkxBR1MkXSlkbmwKQEAgLTEzMDksOCArMTI5OCw3IEBACiBkbmwgRGlzdGluZ3Vpc2ggYmV0d2VlbiBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBjYWxscy4KIG00X2lmdmFsKFskMl0sCiBbQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogdHdvLSBhbmQgdGhyZWUtYXJndW1lbnRzIGZvcm1zIGFyZSBkZXByZWNhdGVkLiAgRm9yIG1vcmUgaW5mbywgc2VlOgotaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9tYWtlL21hbnVhbC9hdXRvbWFrZS5odG1sI01vZGVybml6ZS1BTV9JTklUX0FVVE9NQUtFLWludm9jYXRpb25dKQorICAgICAgICAgICAgIFskMDogdHdvLSBhbmQgdGhyZWUtYXJndW1lbnRzIGZvcm1zIGFyZSBkZXByZWNhdGVkLl0pCiBtNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKICBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCiAgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJDJdKV0sCkBAIC0xMzY0LDE4ICsxMzUyLDE1IEBACiAJCSAgW19BTV9ERVBFTkRFTkNJRVMoW09CSkNdKV0sCiAJCSAgW200X2RlZmluZShbQUNfUFJPR19PQkpDXSwKIAkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ10pXSldKWRubAotZG5sIFN1cHBvcnQgZm9yIE9iamVjdGl2ZSBDKysgd2FzIG9ubHkgaW50cm9kdWNlZCBpbiBBdXRvY29uZiAyLjY1LAotZG5sIGJ1dCB3ZSBzdGlsbCBjYXRlciB0byBBdXRvY29uZiAyLjYyLgotbTRfaWZkZWYoW0FDX1BST0dfT0JKQ1hYXSwKLVtBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19PQkpDWFhdLAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfT0JKQ1hYXSwKIAkJICBbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldLAogCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfT0JKQ1hYXSwKLQkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19PQkpDWFhdKVtfQU1fREVQRU5ERU5DSUVTKFtPQkpDWFhdKV0pXSldKWRubAorCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX09CSkNYWF0pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNYWF0pXSldKWRubAogXSkKLV9BTV9JRl9PUFRJT04oW3NpbGVudC1ydWxlc10sIFtBQ19SRVFVSVJFKFtBTV9TSUxFTlRfUlVMRVNdKV0pZG5sCi1kbmwgVGhlICdwYXJhbGxlbC10ZXN0cycgZHJpdmVyIG1heSBuZWVkIHRvIGtub3cgYWJvdXQgRVhFRVhULCBzbyBhZGQgdGhlCi1kbmwgJ2FtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzIG1hY3JvCi1kbmwgaXMgaG9va2VkIG9udG8gX0FDX0NPTVBJTEVSX0VYRUVYVCBlYXJseSwgc2VlIGJlbG93LgorQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSlkbmwKK2RubCBUaGUgdGVzdHN1aXRlIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQorZG5sICdhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcworZG5sIG1hY3JvIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KIEFDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCiBbbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCiAgIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubApAQCAtMTQwOSwxNCArMTM5NCwxMiBAQAogZG9uZQogZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQogCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA4Ci0KICMgQU1fUFJPR19JTlNUQUxMX1NICiAjIC0tLS0tLS0tLS0tLS0tLS0tLQogIyBEZWZpbmUgJGluc3RhbGxfc2guCkBAIC0xNDMyLDE0ICsxNDE1LDEyIEBACiBmaQogQUNfU1VCU1QoW2luc3RhbGxfc2hdKV0pCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDIKLQogIyBDaGVjayB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtIHN1cHBvcnRzIGZpbGVuYW1lcwogIyB3aXRoIGEgbGVhZGluZyBkb3QuICBGb3IgaW5zdGFuY2UgTVMtRE9TIGRvZXNuJ3QuCiBBQ19ERUZVTihbQU1fU0VUX0xFQURJTkdfRE9UXSwKQEAgLTE0NTYsMTQgKzE0MzcsMTIgQEAKICMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KICMgRnJvbSBKaW0gTWV5ZXJpbmcKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNwotCiAjIEFNX01BSU5UQUlORVJfTU9ERShbREVGQVVMVC1NT0RFXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDb250cm9sIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLgpAQCAtMTQ5MSwxOCArMTQ3MCwxNCBAQAogXQogKQogCi1BVV9ERUZVTihbam1fTUFJTlRBSU5FUl9NT0RFXSwgW0FNX01BSU5UQUlORVJfTU9ERV0pCi0KICMgQ2hlY2sgdG8gc2VlIGhvdyAnbWFrZScgdHJlYXRzIGluY2x1ZGVzLgkgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDUKLQogIyBBTV9NQUtFX0lOQ0xVREUoKQogIyAtLS0tLS0tLS0tLS0tLS0tLQogIyBDaGVjayB0byBzZWUgaG93IG1ha2UgdHJlYXRzIGluY2x1ZGVzLgpAQCAtMTU0NSwxNCArMTUyMCwxMiBAQAogcm0gLWYgY29uZmluYyBjb25mbWYKIF0pCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDYKLQogIyBBTV9QUk9HX0NDX0NfTwogIyAtLS0tLS0tLS0tLS0tLQogIyBMaWtlIEFDX1BST0dfQ0NfQ19PLCBidXQgY2hhbmdlZCBmb3IgYXV0b21ha2UuCkBAIC0xNTgxLDE0ICsxNTU0LDEyIEBACiAKICMgRmFrZSB0aGUgZXhpc3RlbmNlIG9mIHByb2dyYW1zIHRoYXQgR05VIG1haW50YWluZXJzIHVzZS4gIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNwotCiAjIEFNX01JU1NJTkdfUFJPRyhOQU1FLCBQUk9HUkFNKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtBTV9NSVNTSU5HX1BST0ddLApAQCAtMTU5NiwxMSArMTU2NywxMCBAQAogJDE9JHskMS0iJHthbV9taXNzaW5nX3J1bn0kMiJ9CiBBQ19TVUJTVCgkMSldKQogCi0KICMgQU1fTUlTU0lOR19IQVNfUlVOCiAjIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgc3VwcG9ydHMgLS1ydW4uCi0jIElmIGl0IGRvZXMsIHNldCBhbV9taXNzaW5nX3J1biB0byB1c2UgaXQsIG90aGVyd2lzZSwgdG8gbm90aGluZy4KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IGlzIG1vZGVybiBlbm91Z2guCisjIElmIGl0IGlzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCiBBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKIFtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCiBBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKQEAgLTE2MTMsOCArMTU4Myw4IEBACiAgIGVzYWMKIGZpCiAjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKLWlmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCi0gIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCitpZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgogZWxzZQogICBhbV9taXNzaW5nX3J1bj0KICAgQUNfTVNHX1dBUk4oWydtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKQEAgLTE2MjMsMTQgKzE1OTMsMTIgQEAKIAogIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA2Ci0KICMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCkBAIC0xNjU2LDE0ICsxNjI0LDEyIEBACiAKICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgOQotCiAjIEFNX1NBTklUWV9DSEVDSwogIyAtLS0tLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tdLApAQCAtMTczOSwxMyArMTcwNSw3MSBAQAogcm0gLWYgY29uZnRlc3QuZmlsZQogXSkKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMgorIyBBTV9TSUxFTlRfUlVMRVMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGVzcyB2ZXJib3NlIGJ1aWxkIHJ1bGVzOyB3aXRoIHRoZSBkZWZhdWx0IHNldCB0byBERUZBVUxUCisjICgieWVzIiBiZWluZyBsZXNzIHZlcmJvc2UsICJubyIgb3IgZW1wdHkgYmVpbmcgdmVyYm9zZSkuCitBQ19ERUZVTihbQU1fU0lMRU5UX1JVTEVTXSwKK1tBQ19BUkdfRU5BQkxFKFtzaWxlbnQtcnVsZXNdLCBbZG5sCitBU19IRUxQX1NUUklORygKKyAgWy0tZW5hYmxlLXNpbGVudC1ydWxlc10sCisgIFtsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTEiKV0pCitBU19IRUxQX1NUUklORygKKyAgWy0tZGlzYWJsZS1zaWxlbnQtcnVsZXNdLAorICBbdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MCIpXSlkbmwKK10pCitjYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluIEAlOkAgKCgoCisgIHllcykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7CisgICBubykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisgICAgKikgQU1fREVGQVVMVF9WRVJCT1NJVFk9bTRfaWYoWyQxXSwgW3llc10sIFswXSwgWzFdKTs7Citlc2FjCitkbmwKK2RubCBBIGZldyAnbWFrZScgaW1wbGVtZW50YXRpb25zIChlLmcuLCBOb25TdG9wIE9TIGFuZCBOZXh0U3RlcCkKK2RubCBkbyBub3Qgc3VwcG9ydCBuZXN0ZWQgdmFyaWFibGUgZXhwYW5zaW9ucy4KK2RubCBTZWUgYXV0b21ha2UgYnVnIzk5MjggYW5kIGJ1ZyMxMDIzNy4KK2FtX21ha2U9JHtNQUtFLW1ha2V9CitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzXSwKKyAgIFthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlc10sCisgICBbaWYgQVNfRUNITyhbWydUUlVFPSQoQkFSJChWKSkKK0JBUjA9ZmFsc2UKK0JBUjE9dHJ1ZQorVj0xCithbV9fZG9pdDoKKwlAJChUUlVFKQorLlBIT05ZOiBhbV9fZG9pdCddXSkgfCAkYW1fbWFrZSAtZiAtID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9bm8KK2ZpXSkKK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisgIGRubCBVc2luZyAnJFYnIGluc3RlYWQgb2YgJyQoViknIGJyZWFrcyBJUklYIG1ha2UuCisgIEFNX1Y9JyQoViknCisgIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCitlbHNlCisgIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCisgIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKK2ZpCitBQ19TVUJTVChbQU1fVl0pZG5sCitBTV9TVUJTVF9OT1RNQUtFKFtBTV9WXSlkbmwKK0FDX1NVQlNUKFtBTV9ERUZBVUxUX1ZdKWRubAorQU1fU1VCU1RfTk9UTUFLRShbQU1fREVGQVVMVF9WXSlkbmwKK0FDX1NVQlNUKFtBTV9ERUZBVUxUX1ZFUkJPU0lUWV0pZG5sCitBTV9CQUNLU0xBU0g9J1wnCitBQ19TVUJTVChbQU1fQkFDS1NMQVNIXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFtBTV9CQUNLU0xBU0hdKWRubAorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCiAjIEFNX1BST0dfSU5TVEFMTF9TVFJJUAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE3NjksMTQgKzE3OTMsMTIgQEAKIElOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCiBBQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQogCi0jIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAzCi0KICMgX0FNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBQcmV2ZW50IEF1dG9tYWtlIGZyb20gb3V0cHV0dGluZyBWQVJJQUJMRSA9IEBWQVJJQUJMRUAgaW4gTWFrZWZpbGUuaW4uCkBAIC0xNzkwLDE0ICsxODEyLDEyIEBACiAKICMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMwotCiAjIF9BTV9QUk9HX1RBUihGT1JNQVQpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsIGluIGZvcm1hdCBGT1JNQVQuCkBAIC0xODExLDc2ICsxODMxLDExNCBAQAogIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdW50YXIpIHRoYXQgZXh0cmFjdCBzdWNoCiAjIGEgdGFyYmFsbCByZWFkIGZyb20gc3RkaW4uCiAjICAgICAkKGFtX191bnRhcikgPCByZXN1bHQudGFyCisjCiBBQ19ERUZVTihbX0FNX1BST0dfVEFSXSwKIFsjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBZZXMsIGl0J3Mgc3RpbGwgdXNlZAogIyBpbiB0aGUgd2lsZCA6LSggIFdlIHNob3VsZCBmaW5kIGEgcHJvcGVyIHdheSB0byBkZXByZWNhdGUgaXQgLi4uCiBBQ19TVUJTVChbQU1UQVJdLCBbJyQke1RBUi10YXJ9J10pCi1tNF9pZihbJDFdLCBbdjddLAotICAgICBbYW1fX3Rhcj0nJCR7VEFSLXRhcn0gY2hvZiAtICIkJHRhcmRpciInIGFtX191bnRhcj0nJCR7VEFSLXRhcn0geGYgLSddLAotICAgICBbbTRfY2FzZShbJDFdLCBbdXN0YXJdLCwgW3BheF0sLAotICAgICAgICAgICAgICBbbTRfZmF0YWwoW1Vua25vd24gdGFyIGZvcm1hdF0pXSkKLUFDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKLSMgTG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KKworIyBXZSdsbCBsb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgogX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKLV9hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyXyQxLSRfYW1fdG9vbHN9Ci0jIERvIG5vdCBmb2xkIHRoZSBhYm92ZSB0d28gbGluZSBpbnRvIG9uZSwgYmVjYXVzZSBUcnU2NCBzaCBhbmQKLSMgU29sYXJpcyBzaCB3aWxsIG5vdCBncm9rIHNwYWNlcyBpbiB0aGUgcmhzIG9mICctJy4KLWZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzCi1kbwotICBjYXNlICRfYW1fdG9vbCBpbgotICBnbnV0YXIpCi0gICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOwotICAgIGRvCi0gICAgICBBTV9SVU5fTE9HKFskX2FtX3RhciAtLXZlcnNpb25dKSAmJiBicmVhawotICAgIGRvbmUKLSAgICBhbV9fdGFyPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiQkdGFyZGlyIicKLSAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkdGFyZGlyIicKLSAgICBhbV9fdW50YXI9IiRfYW1fdGFyIC14ZiAtIgotICAgIDs7Ci0gIHBsYWludGFyKQotICAgICMgTXVzdCBza2lwIEdOVSB0YXI6IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JtYXQ9IGl0IGRvZXNuJ3QgY3JlYXRlCi0gICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KLSAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCi0gICAgYW1fX3Rhcj0ndGFyIGNoZiAtICIkJHRhcmRpciInCi0gICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCi0gICAgYW1fX3VudGFyPSd0YXIgeGYgLScKLSAgICA7OwotICBwYXgpCi0gICAgYW1fX3Rhcj0ncGF4IC1MIC14ICQxIC13ICIkJHRhcmRpciInCi0gICAgYW1fX3Rhcl89J3BheCAtTCAteCAkMSAtdyAiJHRhcmRpciInCi0gICAgYW1fX3VudGFyPSdwYXggLXInCi0gICAgOzsKLSAgY3BpbykKLSAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKLSAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKLSAgICBhbV9fdW50YXI9J2NwaW8gLWkgLUggJDEgLWQnCi0gICAgOzsKLSAgbm9uZSkKLSAgICBhbV9fdGFyPWZhbHNlCi0gICAgYW1fX3Rhcl89ZmFsc2UKLSAgICBhbV9fdW50YXI9ZmFsc2UKLSAgICA7OwotICBlc2FjCiAKLSAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKLSAgIyBhbmQgYW1fX3VudGFyIHNldC4KLSAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl8kMX0iICYmIGJyZWFrCittNF9pZihbJDFdLCBbdjddLAorICBbYW1fX3Rhcj0nJCR7VEFSLXRhcn0gY2hvZiAtICIkJHRhcmRpciInIGFtX191bnRhcj0nJCR7VEFSLXRhcn0geGYgLSddLAogCi0gICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3JrcworICBbbTRfY2FzZShbJDFdLAorICAgIFt1c3Rhcl0sCisgICAgIFsjIFRoZSBQT1NJWCAxOTg4ICd1c3RhcicgZm9ybWF0IGlzIGRlZmluZWQgd2l0aCBmaXhlZC1zaXplIGZpZWxkcy4KKyAgICAgICMgVGhlcmUgaXMgbm90YWJseSBhIDIxIGJpdHMgbGltaXQgZm9yIHRoZSBVSUQgYW5kIHRoZSBHSUQuICBJbiBmYWN0LAorICAgICAgIyB0aGUgJ3BheCcgdXRpbGl0eSBjYW4gaGFuZyBvbiBiaWdnZXIgVUlEL0dJRCAoc2VlIGF1dG9tYWtlIGJ1ZyM4MzQzCisgICAgICAjIGFuZCBidWcjMTM1ODgpLgorICAgICAgYW1fbWF4X3VpZD0yMDk3MTUxICMgMl4yMSAtIDEKKyAgICAgIGFtX21heF9naWQ9JGFtX21heF91aWQKKyAgICAgICMgVGhlICRVSUQgYW5kICRHSUQgdmFyaWFibGVzIGFyZSBub3QgcG9ydGFibGUsIHNvIHdlIG5lZWQgdG8gcmVzb3J0CisgICAgICAjIHRvIHRoZSBQT1NJWC1tYW5kYXRlZCBpZCgxKSB1dGlsaXR5LiAgRXJyb3JzIGluIHRoZSAnaWQnIGNhbGxzCisgICAgICAjIGJlbG93IGFyZSBkZWZpbml0ZWx5IHVuZXhwZWN0ZWQsIHNvIGFsbG93IHRoZSB1c2VycyB0byBzZWUgdGhlbQorICAgICAgIyAodGhhdCBpcywgYXZvaWQgc3RkZXJyIHJlZGlyZWN0aW9uKS4KKyAgICAgIGFtX3VpZD1gaWQgLXUgfHwgZWNobyB1bmtub3duYAorICAgICAgYW1fZ2lkPWBpZCAtZyB8fCBlY2hvIHVua25vd25gCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgVUlEICckYW1fdWlkJyBpcyBzdXBwb3J0ZWQgYnkgdXN0YXIgZm9ybWF0XSkKKyAgICAgIGlmIHRlc3QgJGFtX3VpZCAtbGUgJGFtX21heF91aWQ7IHRoZW4KKyAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICBlbHNlCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgICBfYW1fdG9vbHM9bm9uZQorICAgICAgZmkKKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBHSUQgJyRhbV9naWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXRdKQorICAgICAgaWYgdGVzdCAkYW1fZ2lkIC1sZSAkYW1fbWF4X2dpZDsgdGhlbgorICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICBfYW1fdG9vbHM9bm9uZQorICAgICAgZmldLAorCisgIFtwYXhdLAorICAgIFtdLAorCisgIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQorCisgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKKworICAjIEdvIGFoZWFkIGV2ZW4gaWYgd2UgaGF2ZSB0aGUgdmFsdWUgYWxyZWFkeSBjYWNoZWQuICBXZSBkbyBzbyBiZWNhdXNlIHdlCisgICMgbmVlZCB0byBzZXQgdGhlIHZhbHVlcyBmb3IgdGhlICdhbV9fdGFyJyBhbmQgJ2FtX191bnRhcicgdmFyaWFibGVzLgorICBfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQorCisgIGZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzOyBkbworICAgIGNhc2UgJF9hbV90b29sIGluCisgICAgZ251dGFyKQorICAgICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOyBkbworICAgICAgICBBTV9SVU5fTE9HKFskX2FtX3RhciAtLXZlcnNpb25dKSAmJiBicmVhaworICAgICAgZG9uZQorICAgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCisgICAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkdGFyZGlyIicKKyAgICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCisgICAgICA7OworICAgIHBsYWludGFyKQorICAgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKKyAgICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCisgICAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCisgICAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKKyAgICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJworICAgICAgYW1fX3VudGFyPSd0YXIgeGYgLScKKyAgICAgIDs7CisgICAgcGF4KQorICAgICAgYW1fX3Rhcj0ncGF4IC1MIC14ICQxIC13ICIkJHRhcmRpciInCisgICAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKKyAgICAgIGFtX191bnRhcj0ncGF4IC1yJworICAgICAgOzsKKyAgICBjcGlvKQorICAgICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKKyAgICAgIDs7CisgICAgbm9uZSkKKyAgICAgIGFtX190YXI9ZmFsc2UKKyAgICAgIGFtX190YXJfPWZhbHNlCisgICAgICBhbV9fdW50YXI9ZmFsc2UKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKKyAgICAjIGFuZCBhbV9fdW50YXIgc2V0LgorICAgIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhaworCisgICAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzLgorICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgICBta2RpciBjb25mdGVzdC5kaXIKKyAgICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCisgICAgQU1fUlVOX0xPRyhbdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyXSkKKyAgICBybSAtcmYgY29uZnRlc3QuZGlyCisgICAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KKyAgICAgIEFNX1JVTl9MT0coWyRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcl0pCisgICAgICBBTV9SVU5fTE9HKFtjYXQgY29uZnRlc3QuZGlyL2ZpbGVdKQorICAgICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCisgICAgZmkKKyAgZG9uZQogICBybSAtcmYgY29uZnRlc3QuZGlyCi0gIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCi0gIEFNX1JVTl9MT0coW3RhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhcl0pCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLSAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KLSAgICBBTV9SVU5fTE9HKFskYW1fX3VudGFyIDxjb25mdGVzdC50YXJdKQotICAgIGdyZXAgR3JlcE1lIGNvbmZ0ZXN0LmRpci9maWxlID4vZGV2L251bGwgMj4mMSAmJiBicmVhawotICBmaQotZG9uZQotcm0gLXJmIGNvbmZ0ZXN0LmRpcgogCi1BQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCi1BQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCisgIEFDX0NBQ0hFX1ZBTChbYW1fY3ZfcHJvZ190YXJfJDFdLCBbYW1fY3ZfcHJvZ190YXJfJDE9JF9hbV90b29sXSkKKyAgQUNfTVNHX1JFU1VMVChbJGFtX2N2X3Byb2dfdGFyXyQxXSldKQorCiBBQ19TVUJTVChbYW1fX3Rhcl0pCiBBQ19TVUJTVChbYW1fX3VudGFyXSkKIF0pICMgX0FNX1BST0dfVEFSCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2J1aWxkLWlvcy5zaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYnVpbGQtaW9zLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzZGVhMjQyLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYnVpbGQtaW9zLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotIyEvYmluL3NoCi0KLVBMQVRGT1JNX0lPUz0vRGV2ZWxvcGVyL1BsYXRmb3Jtcy9pUGhvbmVPUy5wbGF0Zm9ybS8KLVBMQVRGT1JNX0lPU19TSU09L0RldmVsb3Blci9QbGF0Zm9ybXMvaVBob25lU2ltdWxhdG9yLnBsYXRmb3JtLwotU0RLX0lPU19WRVJTSU9OPSI0LjIiCi1NSU5fSU9TX1ZFUlNJT049IjMuMCIKLU9VVFBVVF9ESVI9InVuaXZlcnNhbC1pb3MiCi0KLWJ1aWxkX3RhcmdldCAoKSB7Ci0gICAgbG9jYWwgcGxhdGZvcm09JDEKLSAgICBsb2NhbCBzZGs9JDIKLSAgICBsb2NhbCBhcmNoPSQzCi0gICAgbG9jYWwgdHJpcGxlPSQ0Ci0gICAgbG9jYWwgYnVpbGRkaXI9JDUKLQotICAgIG1rZGlyIC1wICIke2J1aWxkZGlyfSIKLSAgICBwdXNoZCAiJHtidWlsZGRpcn0iCi0gICAgZXhwb3J0IENDPSIke3BsYXRmb3JtfSIvRGV2ZWxvcGVyL3Vzci9iaW4vZ2NjLTQuMgotICAgIGV4cG9ydCBDRkxBR1M9Ii1hcmNoICR7YXJjaH0gLWlzeXNyb290ICR7c2RrfSAtbWlwaG9uZW9zLXZlcnNpb24tbWluPSR7TUlOX0lPU19WRVJTSU9OfSIKLSAgICAuLi9jb25maWd1cmUgLS1ob3N0PSR7dHJpcGxlfSAmJiBtYWtlCi0gICAgcG9wZAotfQotCi0jIEJ1aWxkIGFsbCB0YXJnZXRzCi1idWlsZF90YXJnZXQgIiR7UExBVEZPUk1fSU9TfSIgIiR7UExBVEZPUk1fSU9TfS9EZXZlbG9wZXIvU0RLcy9pUGhvbmVPUyR7U0RLX0lPU19WRVJTSU9OfS5zZGsvIiBhcm12NiBhcm0tYXBwbGUtZGFyd2luMTAgYXJtdjYtaW9zCi1idWlsZF90YXJnZXQgIiR7UExBVEZPUk1fSU9TfSIgIiR7UExBVEZPUk1fSU9TfS9EZXZlbG9wZXIvU0RLcy9pUGhvbmVPUyR7U0RLX0lPU19WRVJTSU9OfS5zZGsvIiBhcm12NyBhcm0tYXBwbGUtZGFyd2luMTAgYXJtdjctaW9zCi1idWlsZF90YXJnZXQgIiR7UExBVEZPUk1fSU9TX1NJTX0iICIke1BMQVRGT1JNX0lPU19TSU19L0RldmVsb3Blci9TREtzL2lQaG9uZVNpbXVsYXRvciR7U0RLX0lPU19WRVJTSU9OfS5zZGsvIiBpMzg2IGkzODYtYXBwbGUtZGFyd2luMTAgaTM4Ni1pb3Mtc2ltCi0KLSMgQ3JlYXRlIHVuaXZlcnNhbCBvdXRwdXQgZGlyZWN0b3JpZXMKLW1rZGlyIC1wICIke09VVFBVVF9ESVJ9IgotbWtkaXIgLXAgIiR7T1VUUFVUX0RJUn0vaW5jbHVkZSIKLW1rZGlyIC1wICIke09VVFBVVF9ESVJ9L2luY2x1ZGUvYXJtdjYiCi1ta2RpciAtcCAiJHtPVVRQVVRfRElSfS9pbmNsdWRlL2FybXY3IgotbWtkaXIgLXAgIiR7T1VUUFVUX0RJUn0vaW5jbHVkZS9pMzg2IgotCi0jIENyZWF0ZSB0aGUgdW5pdmVyc2FsIGJpbmFyeQotbGlwbyAtY3JlYXRlIGFybXY2LWlvcy8ubGlicy9saWJmZmkuYSBhcm12Ny1pb3MvLmxpYnMvbGliZmZpLmEgaTM4Ni1pb3Mtc2ltLy5saWJzL2xpYmZmaS5hIC1vdXRwdXQgIiR7T1VUUFVUX0RJUn0vbGliZmZpLmEiCi0KLSMgQ29weSBpbiB0aGUgaGVhZGVycwotY29weV9oZWFkZXJzICgpIHsKLSAgICBsb2NhbCBzcmM9JDEKLSAgICBsb2NhbCBkZXN0PSQyCi0KLSAgICAjIEZpeCBub24tcmVsYXRpdmUgaGVhZGVyIHJlZmVyZW5jZQotICAgIHNlZCAncy88ZmZpdGFyZ2V0Lmg+LyJmZml0YXJnZXQuaCIvJyA8ICIke3NyY30vaW5jbHVkZS9mZmkuaCIgPiAiJHtkZXN0fS9mZmkuaCIKLSAgICBjcCAiJHtzcmN9L2luY2x1ZGUvZmZpdGFyZ2V0LmgiICIke2Rlc3R9IgotfQotCi1jb3B5X2hlYWRlcnMgYXJtdjYtaW9zICIke09VVFBVVF9ESVJ9L2luY2x1ZGUvYXJtdjYiCi1jb3B5X2hlYWRlcnMgYXJtdjctaW9zICIke09VVFBVVF9ESVJ9L2luY2x1ZGUvYXJtdjciCi1jb3B5X2hlYWRlcnMgaTM4Ni1pb3Mtc2ltICIke09VVFBVVF9ESVJ9L2luY2x1ZGUvaTM4NiIKLQotIyBDcmVhdGUgdG9wLWxldmVsIGhlYWRlcgotKAotY2F0IDw8IEVPRgotI2lmZGVmIF9fYXJtX18KLSAgI2luY2x1ZGUgPGFybS9hcmNoLmg+Ci0gICNpZmRlZiBfQVJNX0FSQ0hfNgotICAgICNpbmNsdWRlICJpbmNsdWRlL2FybXY2L2ZmaS5oIgotICAjZWxpZiBfQVJNX0FSQ0hfNwotICAgICNpbmNsdWRlICJpbmNsdWRlL2FybXY3L2ZmaS5oIgotICAjZW5kaWYKLSNlbGlmIGRlZmluZWQoX19pMzg2X18pCi0gICNpbmNsdWRlICJpbmNsdWRlL2kzODYvZmZpLmgiCi0jZW5kaWYKLUVPRgotKSA+ICIke09VVFBVVF9ESVJ9L2ZmaS5oIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb21waWxlIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb21waWxlCmluZGV4IGMwMDk2YTcuLjUzMTEzNmIgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29tcGlsZQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbXBpbGUKQEAgLTEsMTAgKzEsOSBAQAogIyEgL2Jpbi9zaAotIyBXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KKyMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kICctYyAtbycuCiAKLXNjcmlwdHZlcnNpb249MjAwOS0xMC0wNi4yMDsgIyBVVEMKK3NjcmlwdHZlcnNpb249MjAxMi0xMC0xNC4xMTsgIyBVVEMKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDkgIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOSwyMSArMjgsMjI0IEBACiAjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KICMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCiAKK25sPScKKycKKworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCB0b29scyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHdoaXRlc3BhY2UgdXNhZ2UuCitJRlM9IiAiIgkkbmwiCisKK2ZpbGVfY29udj0KKworIyBmdW5jX2ZpbGVfY29udiBidWlsZF9maWxlIGxhenkKKyMgQ29udmVydCBhICRidWlsZCBmaWxlIHRvICRob3N0IGZvcm0gYW5kIHN0b3JlIGl0IGluICRmaWxlCisjIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFdpbmRvd3MgaG9zdHMuIElmIHRoZSBkZXRlcm1pbmVkIGNvbnZlcnNpb24KKyMgdHlwZSBpcyBsaXN0ZWQgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gd2lsbAorIyB0YWtlIHBsYWNlLgorZnVuY19maWxlX2NvbnYgKCkKK3sKKyAgZmlsZT0kMQorICBjYXNlICRmaWxlIGluCisgICAgLyB8IC9bIS9dKikgIyBhYnNvbHV0ZSBmaWxlLCBhbmQgbm90IGEgVU5DIGZpbGUKKyAgICAgIGlmIHRlc3QgLXogIiRmaWxlX2NvbnYiOyB0aGVuCisJIyBsYXppbHkgZGV0ZXJtaW5lIGhvdyB0byBjb252ZXJ0IGFicyBmaWxlcworCWNhc2UgYHVuYW1lIC1zYCBpbgorCSAgTUlOR1cqKQorCSAgICBmaWxlX2NvbnY9bWluZ3cKKwkgICAgOzsKKwkgIENZR1dJTiopCisJICAgIGZpbGVfY29udj1jeWd3aW4KKwkgICAgOzsKKwkgICopCisJICAgIGZpbGVfY29udj13aW5lCisJICAgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGNhc2UgJGZpbGVfY29udi8sJDIsIGluCisJKiwkZmlsZV9jb252LCopCisJICA7OworCW1pbmd3LyopCisJICBmaWxlPWBjbWQgLy9DIGVjaG8gIiRmaWxlICIgfCBzZWQgLWUgJ3MvIlwoLipcKSAiICokL1wxLydgCisJICA7OworCWN5Z3dpbi8qKQorCSAgZmlsZT1gY3lncGF0aCAtbSAiJGZpbGUiIHx8IGVjaG8gIiRmaWxlImAKKwkgIDs7CisJd2luZS8qKQorCSAgZmlsZT1gd2luZXBhdGggLXcgIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfY2xfZGFzaEwgbGlua2RpcgorIyBNYWtlIGNsIGxvb2sgZm9yIGxpYnJhcmllcyBpbiBMSU5LRElSCitmdW5jX2NsX2Rhc2hMICgpCit7CisgIGZ1bmNfZmlsZV9jb252ICIkMSIKKyAgaWYgdGVzdCAteiAiJGxpYl9wYXRoIjsgdGhlbgorICAgIGxpYl9wYXRoPSRmaWxlCisgIGVsc2UKKyAgICBsaWJfcGF0aD0iJGxpYl9wYXRoOyRmaWxlIgorICBmaQorICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzIC1MSUJQQVRIOiRmaWxlIgorfQorCisjIGZ1bmNfY2xfZGFzaGwgbGlicmFyeQorIyBEbyBhIGxpYnJhcnkgc2VhcmNoLXBhdGggbG9va3VwIGZvciBjbAorZnVuY19jbF9kYXNobCAoKQoreworICBsaWI9JDEKKyAgZm91bmQ9bm8KKyAgc2F2ZV9JRlM9JElGUworICBJRlM9JzsnCisgIGZvciBkaXIgaW4gJGxpYl9wYXRoICRMSUIKKyAgZG8KKyAgICBJRlM9JHNhdmVfSUZTCisgICAgaWYgJHNoYXJlZCAmJiB0ZXN0IC1mICIkZGlyLyRsaWIuZGxsLmxpYiI7IHRoZW4KKyAgICAgIGZvdW5kPXllcworICAgICAgbGliPSRkaXIvJGxpYi5kbGwubGliCisgICAgICBicmVhaworICAgIGZpCisgICAgaWYgdGVzdCAtZiAiJGRpci8kbGliLmxpYiI7IHRoZW4KKyAgICAgIGZvdW5kPXllcworICAgICAgbGliPSRkaXIvJGxpYi5saWIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRsaWIuYSI7IHRoZW4KKyAgICAgIGZvdW5kPXllcworICAgICAgbGliPSRkaXIvbGliJGxpYi5hCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRzYXZlX0lGUworCisgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCisgICAgbGliPSRsaWIubGliCisgIGZpCit9CisKKyMgZnVuY19jbF93cmFwcGVyIGNsIGFyZy4uLgorIyBBZGp1c3QgY29tcGlsZSBjb21tYW5kIHRvIHN1aXQgY2wKK2Z1bmNfY2xfd3JhcHBlciAoKQoreworICAjIEFzc3VtZSBhIGNhcGFibGUgc2hlbGwKKyAgbGliX3BhdGg9CisgIHNoYXJlZD06CisgIGxpbmtlcl9vcHRzPQorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGVhdCI7IHRoZW4KKyAgICAgIGVhdD0KKyAgICBlbHNlCisgICAgICBjYXNlICQxIGluCisJLW8pCisJICAjIGNvbmZpZ3VyZSBtaWdodCBjaG9vc2UgdG8gcnVuIGNvbXBpbGUgYXMgJ2NvbXBpbGUgY2MgLW8gZm9vIGZvby5jJy4KKwkgIGVhdD0xCisJICBjYXNlICQyIGluCisJICAgICoubyB8ICouW29PXVtiQl1bakpdKQorCSAgICAgIGZ1bmNfZmlsZV9jb252ICIkMiIKKwkgICAgICBzZXQgeCAiJEAiIC1GbyIkZmlsZSIKKwkgICAgICBzaGlmdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgZnVuY19maWxlX2NvbnYgIiQyIgorCSAgICAgIHNldCB4ICIkQCIgLUZlIiRmaWxlIgorCSAgICAgIHNoaWZ0CisJICAgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJLUkpCisJICBlYXQ9MQorCSAgZnVuY19maWxlX2NvbnYgIiQyIiBtaW5ndworCSAgc2V0IHggIiRAIiAtSSIkZmlsZSIKKwkgIHNoaWZ0CisJICA7OworCS1JKikKKwkgIGZ1bmNfZmlsZV9jb252ICIkezEjLUl9IiBtaW5ndworCSAgc2V0IHggIiRAIiAtSSIkZmlsZSIKKwkgIHNoaWZ0CisJICA7OworCS1sKQorCSAgZWF0PTEKKwkgIGZ1bmNfY2xfZGFzaGwgIiQyIgorCSAgc2V0IHggIiRAIiAiJGxpYiIKKwkgIHNoaWZ0CisJICA7OworCS1sKikKKwkgIGZ1bmNfY2xfZGFzaGwgIiR7MSMtbH0iCisJICBzZXQgeCAiJEAiICIkbGliIgorCSAgc2hpZnQKKwkgIDs7CisJLUwpCisJICBlYXQ9MQorCSAgZnVuY19jbF9kYXNoTCAiJDIiCisJICA7OworCS1MKikKKwkgIGZ1bmNfY2xfZGFzaEwgIiR7MSMtTH0iCisJICA7OworCS1zdGF0aWMpCisJICBzaGFyZWQ9ZmFsc2UKKwkgIDs7CisJLVdsLCopCisJICBhcmc9JHsxIy1XbCx9CisJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwkgIGZvciBmbGFnIGluICRhcmc7IGRvCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzICRmbGFnIgorCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJICA7OworCS1YbGlua2VyKQorCSAgZWF0PTEKKwkgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgJDIiCisJICA7OworCS0qKQorCSAgc2V0IHggIiRAIiAiJDEiCisJICBzaGlmdAorCSAgOzsKKwkqLmNjIHwgKi5DQyB8ICouY3h4IHwgKi5DWFggfCAqLltjQ10rKykKKwkgIGZ1bmNfZmlsZV9jb252ICIkMSIKKwkgIHNldCB4ICIkQCIgLVRwIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJKi5jIHwgKi5jcHAgfCAqLkNQUCB8ICoubGliIHwgKi5MSUIgfCAqLkxpYiB8ICouT0JKIHwgKi5vYmogfCAqLltvT10pCisJICBmdW5jX2ZpbGVfY29udiAiJDEiIG1pbmd3CisJICBzZXQgeCAiJEAiICIkZmlsZSIKKwkgIHNoaWZ0CisJICA7OworCSopCisJICBzZXQgeCAiJEAiICIkMSIKKwkgIHNoaWZ0CisJICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgc2hpZnQKKyAgZG9uZQorICBpZiB0ZXN0IC1uICIkbGlua2VyX29wdHMiOyB0aGVuCisgICAgbGlua2VyX29wdHM9Ii1saW5rJGxpbmtlcl9vcHRzIgorICBmaQorICBleGVjICIkQCIgJGxpbmtlcl9vcHRzCisgIGV4aXQgMQorfQorCitlYXQ9CisKIGNhc2UgJDEgaW4KICAgJycpCi0gICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCiAgICAgIGV4aXQgMTsKICAgICAgOzsKICAgLWggfCAtLWgqKQogICAgIGNhdCA8PFxFT0YKIFVzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCiAKLVdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgotUmVtb3ZlIGAtbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCitXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgJy1jIC1vJy4KK1JlbW92ZSAnLW8gZGVzdC5vJyBmcm9tIEFSR1MsIHJ1biBQUk9HUkFNIHdpdGggdGhlIHJlbWFpbmluZwogYXJndW1lbnRzLCBhbmQgcmVuYW1lIHRoZSBvdXRwdXQgYXMgZXhwZWN0ZWQuCiAKIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGJ1aWxkIGEgd2hvbGUgcGFja2FnZSB0aGlzIGlzIG5vdCB0aGUKLXJpZ2h0IHNjcmlwdCB0byBydW46IHBsZWFzZSBzdGFydCBieSByZWFkaW5nIHRoZSBmaWxlIGBJTlNUQUxMJy4KK3JpZ2h0IHNjcmlwdCB0byBydW46IHBsZWFzZSBzdGFydCBieSByZWFkaW5nIHRoZSBmaWxlICdJTlNUQUxMJy4KIAogUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KIEVPRgpAQCAtNTMsMTEgKzI1NSwxMyBAQAogICAgIGVjaG8gImNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCiAgICAgZXhpdCAkPwogICAgIDs7CisgIGNsIHwgKlsvXFxdY2wgfCBjbC5leGUgfCAqWy9cXF1jbC5leGUgKQorICAgIGZ1bmNfY2xfd3JhcHBlciAiJEAiICAgICAgIyBEb2Vzbid0IHJldHVybi4uLgorICAgIDs7CiBlc2FjCiAKIG9maWxlPQogY2ZpbGU9Ci1lYXQ9CiAKIGZvciBhcmcKIGRvCkBAIC02Niw4ICsyNzAsOCBAQAogICBlbHNlCiAgICAgY2FzZSAkMSBpbgogICAgICAgLW8pCi0JIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzIGBjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCi0JIyBTbyB3ZSBzdHJpcCBgLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCisJIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzICdjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJIyBTbyB3ZSBzdHJpcCAnLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCiAJZWF0PTEKIAljYXNlICQyIGluCiAJICAqLm8gfCAqLm9iaikKQEAgLTk0LDEwICsyOTgsMTAgQEAKIGRvbmUKIAogaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCi0gICMgSWYgbm8gYC1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKKyAgIyBJZiBubyAnLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQogICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCiAgICMgbm9ybWFsIGNvbXBpbGF0aW9uIHRoYXQgdGhlIGxvc2luZyBjb21waWxlciBjYW4gaGFuZGxlLiAgSWYgbm8KLSAgIyBgLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbworICAjICcuYycgZmlsZSB3YXMgc2VlbiB0aGVuIHdlIGFyZSBwcm9iYWJseSBsaW5raW5nLiAgVGhhdCBpcyBhbHNvCiAgICMgb2suCiAgIGV4ZWMgIiRAIgogZmkKQEAgLTEwNiw3ICszMTAsNyBAQAogY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkICdzfF4uKltcXC9dfHw7IHN8XlthLXpBLVpdOnx8OyBzL1wuYyQvLm8vJ2AKIAogIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgotIyBOb3RlOiB1c2UgYFsvXFw6Li1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCisjIE5vdGU6IHVzZSAnWy9cXDouLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKICMgdGhhdCB3ZSBhcmUgdXNpbmcgZm9yIHRoZSAubyBmaWxlLiAgQWxzbywgYmFzZSB0aGUgbmFtZSBvbiB0aGUgZXhwZWN0ZWQKICMgb2JqZWN0IGZpbGUgbmFtZSwgc2luY2UgdGhhdCBpcyB3aGF0IG1hdHRlcnMgd2l0aCBhIHBhcmFsbGVsIGJ1aWxkLgogbG9ja2Rpcj1gZWNobyAiJGNvZmlsZSIgfCBzZWQgLWUgJ3N8Wy9cXDouLV18X3xnJ2AuZApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5ndWVzcwppbmRleCAxODA0ZTlmLi5iNzkyNTJkIDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5ndWVzcworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5ndWVzcwpAQCAtMSwxMCArMSw4IEBACiAjISAvYmluL3NoCiAjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCi0jICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAotIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsCi0jICAgMjAxMSwgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTItMTItMjknCit0aW1lc3RhbXA9JzIwMTMtMDYtMTAnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI2LDcgKzI0LDcgQEAKICMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKICMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgogIwotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuIAorIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCiAjCiAjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgogIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKQEAgLTUyLDkgKzUwLDcgQEAKIEdOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCiAKIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKLTIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsCi0yMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTEzNiw2ICsxMzIsMjcgQEAKIFVOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCiBVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KIAorY2FzZSAiJHtVTkFNRV9TWVNURU19IiBpbgorTGludXh8R05VfEdOVS8qKQorCSMgSWYgdGhlIHN5c3RlbSBsYWNrcyBhIGNvbXBpbGVyLCB0aGVuIGp1c3QgcGljayBnbGliYy4KKwkjIFdlIGNvdWxkIHByb2JhYmx5IHRyeSBoYXJkZXIuCisJTElCQz1nbnUKKworCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwljYXQgPDwtRU9GID4gJGR1bW15LmMKKwkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKwkjaWYgZGVmaW5lZChfX1VDTElCQ19fKQorCUxJQkM9dWNsaWJjCisJI2VsaWYgZGVmaW5lZChfX2RpZXRsaWJjX18pCisJTElCQz1kaWV0bGliYworCSNlbHNlCisJTElCQz1nbnUKKwkjZW5kaWYKKwlFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCTs7Citlc2FjCisKICMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KIAogY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgpAQCAtODU3LDIxICs4NzQsMjEgQEAKIAlleGl0IDs7CiAgICAgKjpHTlU6KjoqKQogCSMgdGhlIEdOVSBzeXN0ZW0KLQllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tJHtMSUJDfWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCiAJZXhpdCA7OwogICAgICo6R05VLyo6KjoqKQogCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGkqODY6TWluaXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAogCWV4aXQgOzsKICAgICBhYXJjaDY0OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGFhcmNoNjRfYmU6TGludXg6KjoqKQogCVVOQU1FX01BQ0hJTkU9YWFyY2g2NF9iZQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgYWxwaGE6TGludXg6KjoqKQogCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCkBAIC04ODQsNTkgKzkwMSw1NCBAQAogCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CiAJZXNhYwogCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQotCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImdudWxpYmMxIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcmM6TGludXg6KjoqIHwgYXJjZWI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgYXJtKjpMaW51eDoqOiopCiAJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAogCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKIAkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXwogCXRoZW4KLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAllbHNlCiAJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCiAJCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCiAJICAgIHRoZW4KLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9ZWFiaQogCSAgICBlbHNlCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWVhYmloZgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9ZWFiaWhmCiAJICAgIGZpCiAJZmkKIAlleGl0IDs7CiAgICAgYXZyMzIqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGNyaXM6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgY3Jpc3YzMjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBmcnY6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgaGV4YWdvbjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBpKjg2OkxpbnV4Oio6KikKLQlMSUJDPWdudQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSNpZmRlZiBfX2RpZXRsaWJjX18KLQlMSUJDPWRpZXRsaWJjCi0JI2VuZGlmCi1FT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAotCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBpYTY0OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIG0zMnIqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIG02OCo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQogCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKQEAgLTk1NSw1NCArOTY3LDYzIEBACiAJI2VuZGlmCiBFT0YKIAlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCi0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KIAk7OworICAgIG9yMWs6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CiAgICAgb3IzMjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBwYWRyZTpMaW51eDoqOiopCi0JZWNobyBzcGFyYy11bmtub3duLWxpbnV4LWdudQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCi0JZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQogCSMgTG9vayBmb3IgQ1BVIGxldmVsCiAJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KLQkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LWdudSA7OwotCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7Ci0JICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKIAllc2FjCiAJZXhpdCA7OwogICAgIHBwYzY0OkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBwcGM6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcHBjNjRsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcHBjbGU6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHNoNjQqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHNoKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHRpbGUqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHZheDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgeDg2XzY0OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHh0ZW5zYSo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKIAkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgpAQCAtMTIzNSwxOSArMTI1NiwyMSBAQAogCWV4aXQgOzsKICAgICAqOkRhcndpbjoqOiopCiAJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KLQljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KLQkgICAgaTM4NikKLQkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCQlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KLQkJICBpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKLQkJICAgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKLQkJICAgICAgZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKLQkJICB0aGVuCi0JCSAgICAgIFVOQU1FX1BST0NFU1NPUj0ieDg2XzY0IgotCQkgIGZpCi0JCWZpIDs7Ci0JICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7Ci0JZXNhYworCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IHVua25vd24gOyB0aGVuCisJICAgIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjCisJZmkKKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJCSAgICBpMzg2KSBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0IDs7CisJCSAgICBwb3dlcnBjKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYzY0IDs7CisJCWVzYWMKKwkgICAgZmkKKwlmaQogCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CiAgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5zdWIgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5zdWIKaW5kZXggODAyYTIyNC4uYzc2NWIzNCAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLnN1YgpAQCAtMSwxMCArMSw4IEBACiAjISAvYmluL3NoCiAjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KLSMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCi0jICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKLSMgICAyMDExLCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIENvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLXRpbWVzdGFtcD0nMjAxMi0xMi0yOScKK3RpbWVzdGFtcD0nMjAxMy0wNC0yNCcKIAogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNzAsOSArNjgsNyBAQAogdmVyc2lvbj0iXAogR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCiAKLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKLTIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsCi0yMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTI1Niw3ICsyNTIsNyBAQAogCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKIAl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAogCXwgYW0zM18yLjAgXAotCXwgYXJjIFwKKwl8IGFyYyB8IGFyY2ViIFwKIAl8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzItOF0gfCBhcm12WzMtOF1bbGJdIHwgYXJtdjdbYXJtXSBcCiAJfCBhdnIgfCBhdnIzMiBcCiAJfCBiZTMyIHwgYmU2NCBcCkBAIC0yOTAsMTYgKzI4NiwxNyBAQAogCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKIAl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKIAl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCiAJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAogCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAogCXwgbW94aWUgXAogCXwgbXQgXAogCXwgbXNwNDMwIFwKIAl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAotCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5pb3MgfCBuaW9zMiB8IG5pb3MyZWIgfCBuaW9zMmVsIFwKIAl8IG5zMTZrIHwgbnMzMmsgXAogCXwgb3BlbjggXAotCXwgb3IzMiBcCisJfCBvcjFrIHwgb3IzMiBcCiAJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAogCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIFwKIAl8IHB5cmFtaWQgXApAQCAtMzY5LDcgKzM2Niw3IEBACiAJfCBhYXJjaDY0LSogfCBhYXJjaDY0X2JlLSogXAogCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCiAJfCBhbHBoYTY0LSogfCBhbHBoYTY0ZXZbNC04XS0qIHwgYWxwaGE2NGV2NTYtKiB8IGFscGhhNjRldjZbNzhdLSogXAotCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIHwgYXJjZWItKiBcCiAJfCBhcm0tKiAgfCBhcm1iZS0qIHwgYXJtbGUtKiB8IGFybWViLSogfCBhcm12Ki0qIFwKIAl8IGF2ci0qIHwgYXZyMzItKiBcCiAJfCBiZTMyLSogfCBiZTY0LSogXApAQCAtNDA3LDEyICs0MDQsMTMgQEAKIAl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAogCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKIAl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3I1OTAwLSogfCBtaXBzcjU5MDBlbC0qIFwKIAl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAogCXwgbW1peC0qIFwKIAl8IG10LSogXAogCXwgbXNwNDMwLSogXAogCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCi0JfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogfCBuaW9zMmViLSogfCBuaW9zMmVsLSogXAogCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCiAJfCBvcGVuOC0qIFwKIAl8IG9yaW9uLSogXApAQCAtMTAwOCw3ICsxMDA2LDcgQEAKIAkJOzsKIAlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgogCQk7OwotCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJcHBjNjQtKiB8IHBwYzY0cDctKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJOzsKIAlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQogCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KQEAgLTEzNTQsNyArMTM1Miw3IEBACiAJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAogCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKIAkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLWF1cm9yYXV4KiB8IC1zb2xhcmlzKiBcCi0JICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogfCAtcGxhbjkqIFwKIAkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKIAkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKIAkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXApAQCAtMTUwMCw5ICsxNDk4LDYgQEAKIAktYXJvcyopCiAJCW9zPS1hcm9zCiAJCTs7Ci0JLWthb3MqKQotCQlvcz0ta2FvcwotCQk7OwogCS16dm1vZSkKIAkJb3M9LXp2bW9lCiAJCTs7CkBAIC0xNTk0LDYgKzE1ODksOSBAQAogCW1pcHMqLSopCiAJCW9zPS1lbGYKIAkJOzsKKwlvcjFrLSopCisJCW9zPS1lbGYKKwkJOzsKIAlvcjMyLSopCiAJCW9zPS1jb2ZmCiAJCTs7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlCmluZGV4IDgyMzA4MzAuLjc1ZjYyYTcgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlCkBAIC0xLDYgKzEsNiBAQAogIyEgL2Jpbi9zaAogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIGxpYmZmaSAzLjAuMTMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgbGliZmZpIDMuMS4KICMKICMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9naXRodWIuY29tL2F0Z3JlZW4vbGliZmZpL2lzc3Vlcz4uCiAjCkBAIC01OTAsOCArNTkwLDggQEAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdsaWJmZmknCiBQQUNLQUdFX1RBUk5BTUU9J2xpYmZmaScKLVBBQ0tBR0VfVkVSU0lPTj0nMy4wLjEzJwotUEFDS0FHRV9TVFJJTkc9J2xpYmZmaSAzLjAuMTMnCitQQUNLQUdFX1ZFUlNJT049JzMuMScKK1BBQ0tBR0VfU1RSSU5HPSdsaWJmZmkgMy4xJwogUEFDS0FHRV9CVUdSRVBPUlQ9J2h0dHA6Ly9naXRodWIuY29tL2F0Z3JlZW4vbGliZmZpL2lzc3VlcycKIFBBQ0tBR0VfVVJMPScnCiAKQEAgLTY0NSwxMCArNjQ1LDEzIEBACiBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFX0ZBTFNFCiBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFX1RSVUUKIHN5c19zeW1ib2xfdW5kZXJzY29yZQorSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UCiBIQVZFX0xPTkdfRE9VQkxFCiBBTExPQ0EKIFhURU5TQV9GQUxTRQogWFRFTlNBX1RSVUUKK1ZBWF9GQUxTRQorVkFYX1RSVUUKIFRJTEVfRkFMU0UKIFRJTEVfVFJVRQogUEE2NF9IUFVYX0ZBTFNFCkBAIC02NzMsNiArNjc2LDggQEAKIEFWUjMyX1RSVUUKIEFSTV9GQUxTRQogQVJNX1RSVUUKK0FSQ19GQUxTRQorQVJDX1RSVUUKIEFBUkNINjRfRkFMU0UKIEFBUkNINjRfVFJVRQogUE9XRVJQQ19GUkVFQlNEX0ZBTFNFCkBAIC02ODMsMTIgKzY4OCwxNiBAQAogUE9XRVJQQ19BSVhfVFJVRQogUE9XRVJQQ19GQUxTRQogUE9XRVJQQ19UUlVFCitOSU9TMl9GQUxTRQorTklPUzJfVFJVRQogTU9YSUVfRkFMU0UKIE1PWElFX1RSVUUKIE1FVEFHX0ZBTFNFCiBNRVRBR19UUlVFCiBNSUNST0JMQVpFX0ZBTFNFCiBNSUNST0JMQVpFX1RSVUUKK004OEtfRkFMU0UKK004OEtfVFJVRQogTTY4S19GQUxTRQogTTY4S19UUlVFCiBNMzJSX0ZBTFNFCkBAIC02OTcsNiArNzA2LDEwIEBACiBJQTY0X1RSVUUKIEFMUEhBX0ZBTFNFCiBBTFBIQV9UUlVFCitYODZfREFSV0lONjRfRkFMU0UKK1g4Nl9EQVJXSU42NF9UUlVFCitYODZfREFSV0lOMzJfRkFMU0UKK1g4Nl9EQVJXSU4zMl9UUlVFCiBYODZfREFSV0lOX0ZBTFNFCiBYODZfREFSV0lOX1RSVUUKIFg4Nl9XSU42NF9GQUxTRQpAQCAtNzIxLDYgKzczNCw3IEBACiBNQUlOVEFJTkVSX01PREVfRkFMU0UKIE1BSU5UQUlORVJfTU9ERV9UUlVFCiBQUlRESUFHCitDWFhDUFAKIENQUAogT1RPT0w2NAogT1RPT0wKQEAgLTc0OCw2ICs3NjIsMTIgQEAKIENDQVNERVBNT0RFCiBDQ0FTRkxBR1MKIENDQVMKK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFCithbV9fZmFzdGRlcENYWF9UUlVFCitDWFhERVBNT0RFCithY19jdF9DWFgKK0NYWEZMQUdTCitDWFgKIGFtX19mYXN0ZGVwQ0NfRkFMU0UKIGFtX19mYXN0ZGVwQ0NfVFJVRQogQ0NERVBNT0RFCkBAIC03NjUsNiArNzg1LDEwIEBACiBMREZMQUdTCiBDRkxBR1MKIENDCitBTV9CQUNLU0xBU0gKK0FNX0RFRkFVTFRfVkVSQk9TSVRZCitBTV9ERUZBVUxUX1YKK0FNX1YKIGFtX191bnRhcgogYW1fX3RhcgogQU1UQVIKQEAgLTg0Myw2ICs4NjcsNyBAQAogYWNfdXNlcl9vcHRzPScKIGVuYWJsZV9vcHRpb25fY2hlY2tpbmcKIGVuYWJsZV9idWlsZGRpcgorZW5hYmxlX3NpbGVudF9ydWxlcwogZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcKIGVuYWJsZV9zaGFyZWQKIGVuYWJsZV9zdGF0aWMKQEAgLTg2Niw3ICs4OTEsOCBAQAogQ0NBUwogQ0NBU0ZMQUdTCiBDUFAKLUNQUEZMQUdTJworQ1BQRkxBR1MKK0NYWENQUCcKIAogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCkBAIC0xNDA3LDcgKzE0MzMsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYmZmaSAzLjAuMTMgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgbGliZmZpIDMuMSB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xNDc4LDcgKzE1MDQsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGxpYmZmaSAzLjAuMTM6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJmZmkgMy4xOiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTE0ODgsNiArMTUxNCw4IEBACiAgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KICAgLS1kaXNhYmxlLWJ1aWxkZGlyICAgICAgZGlzYWJsZSBhdXRvbWF0aWMgYnVpbGQgaW4gc3ViZGlyIG9mIHNvdXJjZXMKIAorICAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgICBsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTEiKQorICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzICB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIikKICAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCiAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCkBAIC0xNTE1LDggKzE1NDMsOCBAQAogICAtLXdpdGgtcGljWz1QS0dTXSAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQotICAtLXdpdGgtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKLSAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAtLXdpdGgtc3lzcm9vdFs9RElSXSAgICBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KICAgLS13aXRoLWdjYy1hcmNoPTxhcmNoPiAgdXNlIGFyY2hpdGVjdHVyZSA8YXJjaD4gZm9yIGdjYyAtbWFyY2gvLW10dW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGd1ZXNzaW5nCiAKQEAgLTE1MjgsOSArMTU1NiwxMiBAQAogICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+CiAgIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKICAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCisgIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncwogICBDQ0FTICAgICAgICBhc3NlbWJsZXIgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdHMgdG8gQ0MpCiAgIENDQVNGTEFHUyAgIGFzc2VtYmxlciBjb21waWxlciBmbGFncyAoZGVmYXVsdHMgdG8gQ0ZMQUdTKQogICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCiAKIFVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCiBpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCkBAIC0xNTk4LDcgKzE2MjksNyBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLWxpYmZmaSBjb25maWd1cmUgMy4wLjEzCitsaWJmZmkgY29uZmlndXJlIDMuMQogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5CiAKIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KQEAgLTE2NTAsNiArMTY4MSw0NCBAQAogCiB9ICMgYWNfZm5fY190cnlfY29tcGlsZQogCisjIGFjX2ZuX2N4eF90cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jb21waWxlCisKICMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgpAQCAtMTg3Myw2ICsxOTQyLDg5IEBACiAKIH0gIyBhY19mbl9jX2NoZWNrX2Z1bmMKIAorIyBhY19mbl9jeHhfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2NwcAorCisjIGFjX2ZuX2N4eF90cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2xpbmsKKwogIyBhY19mbl9jX2NvbXB1dGVfaW50IExJTkVOTyBFWFBSIFZBUiBJTkNMVURFUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgRVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcwpAQCAtMjIwNCw3ICsyMzU2LDcgQEAKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBsaWJmZmkgJGFzX21lIDMuMC4xMywgd2hpY2ggd2FzCitJdCB3YXMgY3JlYXRlZCBieSBsaWJmZmkgJGFzX21lIDMuMSwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACkBAIC0yNjk3LDcgKzI4NDksMTEgQEAKIAogdGFyZ2V0X2FsaWFzPSR7dGFyZ2V0X2FsaWFzLSRob3N0X2FsaWFzfQogCi0uICR7c3JjZGlyfS9jb25maWd1cmUuaG9zdAorY2FzZSAiJHtob3N0fSIgaW4KKyAgZnJ2Ki1lbGYpCisgICAgTERGTEFHUz1gZWNobyAkTERGTEFHUyB8IHNlZCAicy9cLUJeICpsaWJnbG9zc1wvZnJ2XC8vLyJgXCAtQmBwd2RgLy4uL2xpYmdsb3NzL2Zydi8KKyAgICA7OworZXNhYwogCiAKICAgICMgWyRdQCBpcyB1bnNhYmxlIGluIDIuNjArIGJ1dCBlYXJsaWVyIGF1dG9jb25mIGhhZCBubyBhY19jb25maWd1cmVfYXJncwpAQCAtMjgwMyw3ICsyOTU5LDcgQEAKIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBidWlsZGlyIgogCiAKLWFtX19hcGlfdmVyc2lvbj0nMS4xMicKK2FtX19hcGlfdmVyc2lvbj0nMS4xMycKIAogIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCiAjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKQEAgLTI5ODQsOCArMzE0MCw4IEBACiAgIGVzYWMKIGZpCiAjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKLWlmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCi0gIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCitpZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgogZWxzZQogICBhbV9taXNzaW5nX3J1bj0KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CkBAIC0zMjI1LDYgKzMzODEsNDUgQEAKIGZpCiBybWRpciAudHN0IDI+L2Rldi9udWxsCiAKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X3J1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOworZmkKKworY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbiAjICgoKAorICB5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworICAgbm8pIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworICAgICopIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworZXNhYworYW1fbWFrZT0ke01BS0UtbWFrZX0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmICRhc19lY2hvICdUUlVFPSQoQkFSJChWKSkKK0JBUjA9ZmFsc2UKK0JBUjE9dHJ1ZQorVj0xCithbV9fZG9pdDoKKwlAJChUUlVFKQorLlBIT05ZOiBhbV9fZG9pdCcgfCAkYW1fbWFrZSAtZiAtID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjY7IH0KK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisgICAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FNX0JBQ0tTTEFTSD0nXCcKKwogaWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgogICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAogICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCkBAIC0zMjQ3LDcgKzM0NDIsNyBAQAogCiAjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCiAgUEFDS0FHRT0nbGliZmZpJwotIFZFUlNJT049JzMuMC4xMycKKyBWRVJTSU9OPSczLjEnCiAKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgpAQCAtMzI4Nyw2ICszNDgyLDEwIEBACiAjIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KIEFNVEFSPSckJHtUQVItdGFyfScKIAorCisjIFdlJ2xsIGxvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciAgcGF4IGNwaW8gbm9uZScKKwogYW1fX3Rhcj0nJCR7VEFSLXRhcn0gY2hvZiAtICIkJHRhcmRpciInIGFtX191bnRhcj0nJCR7VEFSLXRhcn0geGYgLScKIAogCkBAIC0zMjk0LDYgKzM0OTMsNyBAQAogCiAKIAorCiAjIFRoZSBzYW1lIGFzIGluIGJvZWhtLWdjIGFuZCBsaWJzdGRjKysuIEhhdmUgdG8gYm9ycm93IGl0IGZyb20gdGhlcmUuCiAjIFdlIG11c3QgZm9yY2UgQ0MgdG8gL25vdC8gYmUgcHJlY2lvdXMgdmFyaWFibGVzOyBvdGhlcndpc2UKICMgdGhlIHdyb25nLCBub24tbXVsdGlsaWItYWRqdXN0ZWQgdmFsdWUgd2lsbCBiZSB1c2VkIGluIG11bHRpbGlicy4KQEAgLTQyODQsNiArNDQ4NCwzOTEgQEAKIGZpCiAKIAorYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRDQ0MiOyB0aGVuCisgICAgQ1hYPSRDQ0MKKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NYWD0kYWNfY3ZfcHJvZ19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYIiA+JjUKKyRhc19lY2hvICIkQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgYWNfY3RfQ1hYPSRDWFgKKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAoraWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ1hYIiA9IHg7IHRoZW4KKyAgICBDWFg9ImcrKyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDWFg9JGFjX2N0X0NYWAorICBmaQorZmkKKworICBmaQorZmkKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHWFg9eWVzCitlbHNlCisgIEdYWD0KK2ZpCithY190ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQorYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jeHhfZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KKyAgIENYWEZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitlbHNlCisgIENYWEZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKwkgQ1hYRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCisgIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0KKyAgZmkKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkICdEJyAtLSBiZWNhdXNlICctTUQnIG1lYW5zICJwdXQgdGhlIG91dHB1dAorICAjIGluIEQiLgorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWMKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDEwIC9iaW4vc2guCisgICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgQWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rICctYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ1hYREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENYWF9UUlVFPQorICBhbV9fZmFzdGRlcENYWF9GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9CitmaQorCisKIENGTEFHUz0kc2F2ZV9DRkxBR1MKIAogCkBAIC00NTU3LDggKzUxNDIsOCBAQAogCiAKIAotbWFjcm9fdmVyc2lvbj0nMi40LjInCi1tYWNyb19yZXZpc2lvbj0nMS4zMzM3JworbWFjcm9fdmVyc2lvbj0nMi40LjIuNDE4JworbWFjcm9fcmV2aXNpb249JzIuNC4yLjQxOCcKIAogCiAKQEAgLTQ1NzIsNyArNTE1Nyw3IEBACiAKIAogCi1sdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK2x0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKIAogIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgogIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCkBAIC00NjIxLDcgKzUyMDYsNyBAQAogICAgICRFQ0hPICIiCiB9CiAKLWNhc2UgIiRFQ0hPIiBpbgorY2FzZSAkRUNITyBpbgogICBwcmludGYqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnRmIiA+JjUKICRhc19lY2hvICJwcmludGYiID4mNjsgfSA7OwogICBwcmludCopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludCAtciIgPiY1CkBAIC00OTQ0LDE5ICs1NTI5LDE5IEBACiAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KIGlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0IG5vID0gIiR3aXRodmFsIiB8fCB3aXRoX2dudV9sZD15ZXMKIGVsc2UKICAgd2l0aF9nbnVfbGQ9bm8KIGZpCiAKIGFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CiAgIGNhc2UgJGhvc3QgaW4KICAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLCB3aGljaCB1cHNldHMgbWluZ3cKICAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CiAgICopCiAgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwpAQCAtNDk3MCw3ICs1NTU1LDcgQEAKICAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KIAlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKICAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0kYWNfcHJvZwogICAgICAgOzsKICAgIiIpCiAgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCkBAIC00OTgxLDcgKzU1NjYsNyBAQAogICAgIHdpdGhfZ251X2xkPXVua25vd24KICAgICA7OwogICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KK2VsaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQogZWxzZQpAQCAtNDk5MiwzMiArNTU3NywzMiBAQAogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCiAgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgbHRfY3ZfcGF0aF9MRD0kYWNfZGlyLyRhY19wcm9nCiAgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCiAgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgogICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCiAgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KICAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCiAJOzsKICAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwl0ZXN0IHllcyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhawogCTs7CiAgICAgICBlc2FjCiAgICAgZmkKICAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgSUZTPSRsdF9zYXZlX2lmcwogZWxzZQotICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KIGZpCiBmaQogCi1MRD0iJGx0X2N2X3BhdGhfTEQiCitMRD0kbHRfY3ZfcGF0aF9MRAogaWYgdGVzdCAtbiAiJExEIjsgdGhlbgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKICRhc19lY2hvICIkTEQiID4mNjsgfQpAQCAtNTA2MCwzMyArNTY0NSwzMyBAQAogZWxzZQogICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCiAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotICBsdF9jdl9wYXRoX05NPSIkTk0iCisgIGx0X2N2X3BhdGhfTk09JE5NCiBlbHNlCi0gIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBsdF9ubV90b19jaGVjaz0ke2FjX3Rvb2xfcHJlZml4fW5tCiAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KICAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgogICBmaQogICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KLSAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiAgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbwotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCi0gICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisgICAgICB0bXBfbm09JGFjX2Rpci8kbHRfdG1wX25tCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCI7IHRoZW4KIAkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KLQkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgQWRkaW5nIHRoZSAnc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CiAJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAogCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQogCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgogCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKIAkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCi0JICBicmVhaworCSAgYnJlYWsgMgogCSAgOzsKIAkqKQogCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCiAJICAqL2Rldi9udWxsKikKIAkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKLQkgICAgYnJlYWsKKwkgICAgYnJlYWsgMgogCSAgICA7OwogCSAgKikKIAkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKQEAgLTUwOTcsMTUgKzU2ODIsMTUgQEAKIAllc2FjCiAgICAgICBmaQogICAgIGRvbmUKLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBJRlM9JGx0X3NhdmVfaWZzCiAgIGRvbmUKICAgOiAke2x0X2N2X3BhdGhfTk09bm99CiBmaQogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQotaWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KLSAgTk09IiRsdF9jdl9wYXRoX05NIgoraWYgdGVzdCBubyAhPSAiJGx0X2N2X3BhdGhfTk0iOyB0aGVuCisgIE5NPSRsdF9jdl9wYXRoX05NCiBlbHNlCiAgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgogICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgpAQCAtNTIxMSw5ICs1Nzk2LDkgQEAKICAgZmkKIGZpCiAKLSAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCiAgICAgKkNPRkYqKQotICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMiCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyIKICAgICAgIDs7CiAgICAgKikKICAgICAgIERVTVBCSU49OgpAQCAtNTIyMSw4ICs1ODA2LDggQEAKICAgICBlc2FjCiAgIGZpCiAKLSAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgotICAgIE5NPSIkRFVNUEJJTiIKKyAgaWYgdGVzdCA6ICE9ICIkRFVNUEJJTiI7IHRoZW4KKyAgICBOTT0kRFVNUEJJTgogICBmaQogZmkKIHRlc3QgLXogIiROTSIgJiYgTk09bm0KQEAgLTUyNzMsNyArNTg1OCw3IEBACiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICAgaT0wCi0gIHRlc3RzdHJpbmc9IkFCQ0QiCisgIHRlc3RzdHJpbmc9QUJDRAogCiAgIGNhc2UgJGJ1aWxkX29zIGluCiAgIG1zZG9zZGpncHAqKQpAQCAtNTMxMyw3ICs1ODk4LDcgQEAKICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKICAgICA7OwogCi0gIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgIGJpdHJpZyogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KiB8IGZyZWVic2QqIHwgbmV0YnNkKiB8IG9wZW5ic2QqKQogICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgogICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKQEAgLTUzNjQsMjIgKzU5NDksMjIgQEAKICAgKikKICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKICAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiAmJiBcCi0gICAgICB0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgICB0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAogICAgIGVsc2UKICAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KICAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KLSAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDg7IGRvCiAgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwogICAgICAgZG9uZQogICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KICAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCiAgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAogICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgotICAgICAgd2hpbGUgeyB0ZXN0ICJYImBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKyAgICAgIHdoaWxlIHsgdGVzdCBYYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAogCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKwkgICAgICB0ZXN0IDE3ICE9ICIkaSIgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAogICAgICAgZG8KICAgICAgICAgaT1gZXhwciAkaSArIDFgCiAgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwpAQCAtNTM5Nyw3ICs1OTgyLDcgQEAKIAogZmkKIAotaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgoraWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQogJGFzX2VjaG8gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQogZWxzZQpAQCAtNTQxNSwzMCArNjAwMCw2IEBACiA6ICR7TVY9Im12IC1mIn0KIDogJHtSTT0icm0gLWYifQogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsgfQotIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKLXhzaV9zaGVsbD1ubwotKCBfbHRfZHVtbXk9ImEvYi9jIgotICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAotICAgICAgPSBjLGEvYixiL2MsIFwKLSAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCi0gICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKLSAgJiYgeHNpX3NoZWxsPXllcwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR4c2lfc2hlbGwiID4mNQotJGFzX2VjaG8gIiR4c2lfc2hlbGwiID4mNjsgfQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIi4uLiAiID4mNjsgfQotbHRfc2hlbGxfYXBwZW5kPW5vCi0oIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkMSs9XCQyIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKLSAgICA+L2Rldi9udWxsIDI+JjEgXAotICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3NoZWxsX2FwcGVuZCIgPiY1Ci0kYXNfZWNobyAiJGx0X3NoZWxsX2FwcGVuZCIgPiY2OyB9Ci0KLQogaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgIGx0X3Vuc2V0PXVuc2V0CiBlbHNlCkBAIC01NTYxLDEzICs2MTIyLDEzIEBACiByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCiBjYXNlICRob3N0X29zIGluCiAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KICAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCiAgICAgZmkKICAgICA7OwogICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR3bC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCiAgICAgZWxzZQogICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwogICAgIGZpCkBAIC01Njk1LDEzICs2MjU2LDEzIEBACiAjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKICMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KICMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgotIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICd1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KICMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KICMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KICMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKLSMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisjIHRoYXQgcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlICdmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciAncGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCiAKIGNhc2UgJGhvc3Rfb3MgaW4KIGFpeFs0LTldKikKQEAgLTU3MjgsOCArNjI4OSw3IEBACiAgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKICAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCiAgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCi0gICMgZnVuY193aW4zMl9saWJpZCBhc3N1bWVzIEJTRCBubSwgc28gZGlzYWxsb3cgaXQgaWYgdXNpbmcgTVMgZHVtcGJpbi4KLSAgaWYgKCB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJCU0Qgbm0iICYmIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCiAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCiAgIGVsc2UKQEAgLTU3NjUsMTAgKzYzMjUsNiBAQAogICBmaQogICA7OwogCi1nbnUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCiBoYWlrdSopCiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CkBAIC01ODA3LDcgKzYzNjMsNyBAQAogICA7OwogCiAjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwogCkBAIC01ODI5LDggKzYzODUsOCBAQAogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwogCi1vcGVuYnNkKikKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorb3BlbmJzZCogfCBiaXRyaWcqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCiAgIGVsc2UKICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwpAQCAtNjA0MCw4ICs2NTk2LDggQEAKIAogY2FzZSAkaG9zdF9vcyBpbgogY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCi0gICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaDsKKyAgIyBkZWNpZGUgd2hpY2ggb25lIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKICAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCiAgICotLWlkZW50aWZ5LXN0cmljdCopCiAgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCkBAIC02MDUzLDcgKzY2MDksNyBAQAogICA7OwogKikKICAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCi0gIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KICAgOzsKIGVzYWMKIApAQCAtNjIwOCw3ICs2NzY0LDcgQEAKICAgYWNfc3RhdHVzPSQ/CiAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0gICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorICAgICAgaWYgdGVzdCAwIC1lcSAiJGFjX3N0YXR1cyI7IHRoZW4KIAkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgogCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQogCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CkBAIC02MjE2LDcgKzY3NzIsNyBAQAogICBhY19zdGF0dXM9JD8KICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLQlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorCWlmIHRlc3QgMCAtbmUgIiRhY19zdGF0dXMiOyB0aGVuCiAgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACiAgICAgICAgIGZpCiAgICAgICBmaQpAQCAtNjIyOSw3ICs2Nzg1LDcgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQogCi1pZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9hcl9hdF9maWxlIjsgdGhlbgogICBhcmNoaXZlcl9saXN0X3NwZWM9CiBlbHNlCiAgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQpAQCAtNjQ0Niw3ICs3MDAyLDcgQEAKIAogaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KICAgY2FzZSAkaG9zdF9vcyBpbgotICBvcGVuYnNkKikKKyAgYml0cmlnKiB8IG9wZW5ic2QqKQogICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKICAgICA7OwogICAqKQpAQCAtNjUzNiw3ICs3MDkyLDcgQEAKICAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCiAgIDs7CiBocHV4KikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KICAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKICAgZmkKICAgOzsKQEAgLTY1NjksMTQgKzcxMjUsNDQgQEAKICAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OwogZXNhYwogCitpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAjIEdldHMgbGlzdCBvZiBkYXRhIHN5bWJvbHMgdG8gaW1wb3J0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9InNlZCAtbiAtZSAncy9eSSAuKiBcKC4qXCkkL1wxL3AnIgorICAjIEFkanVzdCB0aGUgYmVsb3cgZ2xvYmFsIHN5bWJvbCB0cmFuc2Zvcm1zIHRvIGZpeHVwIGltcG9ydGVkIHZhcmlhYmxlcy4KKyAgbHRfY2RlY2xfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBjaGFyIFwxOy9wJyIKKyAgbHRfY19uYW1lX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIgorICBsdF9jX25hbWVfbGliX2hvb2s9IlwKKyAgLWUgJ3MvXkkgLiogXChsaWIuKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJ1wKKyAgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIDB9LC9wJyIKK2Vsc2UKKyAgIyBEaXNhYmxlIGhvb2tzIGJ5IGRlZmF1bHQuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0KKyAgbHRfY2RlY2xfaG9vaz0KKyAgbHRfY19uYW1lX2hvb2s9CisgIGx0X2NfbmFtZV9saWJfaG9vaz0KK2ZpCisKICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCiAjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKICMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIlwKKyRsdF9jZGVjbF9ob29rXAorIiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCiAKICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiJcCiskbHRfY19uYW1lX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgd2l0aCBsaWIgcHJlZml4IGFuZAorIyBzeW1ib2wgYWRkcmVzcy4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiJcCiskbHRfY19uYW1lX2xpYl9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKIAogIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCiBvcHRfY3I9CkBAIC02NTk0LDIxICs3MTgwLDI0IEBACiAKICAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgogICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCi0gICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiwKKyAgICAjIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgZm9yIGFueSBpbXBvcnRlZCB2YXJpYWJsZS4KICAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKICAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgogICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCiAiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKICIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAogIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICAvXiAqU3ltYm9sIG5hbWUgKjogL3tzcGxpdChcJCAwLHNuLFwiOlwiKTsgc2k9c3Vic3RyKHNuWzJdLDIpfTsiXAorIiAgICAgL14gKlR5cGUgKjogY29kZS97cHJpbnQgXCJUXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCisiICAgICAvXiAqVHlwZSAqOiBkYXRhL3twcmludCBcIklcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKICIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCiAiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCiAiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKLSIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAotIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKLSIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAotIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICB7Zj1cIkRcIn07IFwkIDB+L1woXCkuKlx8L3tmPVwiVFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsYSwvXHx8XHIvKTsgc3BsaXQoYVsyXSxzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBmLHNbMV0sc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgZix0WzFdLHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKICIgICAgICcgcHJmeD1eJGFjX3N5bXByZngiCiAgIGVsc2UKICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgpAQCAtNjY1NiwxMSArNzI0NSwxMSBAQAogCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgogCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKIC8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQogICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwogIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSNlbGlmIGRlZmluZWQoX19vc2ZfXykKKyNlbGlmIGRlZmluZWQgX19vc2ZfXwogLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCiAjIGRlZmluZSBMVF9ETFNZTV9DT05TVAogI2Vsc2UKQEAgLTY2ODYsNyArNzI3NSw3IEBACiB7CiAgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKIF9MVF9FT0YKLQkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKIAkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKICAgezAsICh2b2lkICopIDB9CiB9OwpAQCAtNjcwNiwxMyArNzI5NSwxMyBAQAogCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CiAJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUwogCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgTElCUz1jb25mdHN0bS4kYWNfb2JqZXh0CiAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCiAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2xpbmspIDI+JjUKICAgYWNfc3RhdHVzPSQ/CiAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCSAgICBwaXBlX3dvcmtzPXllcwogCSAgZmkKIAkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCkBAIC02NzMzLDcgKzczMjIsNyBAQAogICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCiAKICAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgotICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJHBpcGVfd29ya3MiOyB0aGVuCiAgICAgYnJlYWsKICAgZWxzZQogICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CkBAIC02Nzg2LDYgKzczNzUsMTYgQEAKIAogCiAKKworCisKKworCisKKworCisKKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQogCkBAIC02Nzk4LDkgKzczOTcsOSBAQAogCiAKIGx0X3N5c3Jvb3Q9Ci1jYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorY2FzZSAkd2l0aF9zeXNyb290IGluICMoCiAgeWVzKQotICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCiAgICBmaQogICAgOzsgIygKQEAgLTY4MTAsOCArNzQwOSw4IEBACiAgbm98JycpCiAgICA7OyAjKAogICopCi0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX3N5c3Jvb3R9IiA+JjUKLSRhc19lY2hvICIke3dpdGhfc3lzcm9vdH0iID4mNjsgfQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX3N5c3Jvb3QiID4mNQorJGFzX2VjaG8gIiR3aXRoX3N5c3Jvb3QiID4mNjsgfQogICAgYXNfZm5fZXJyb3IgJD8gIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CiAgICA7OwogZXNhYwpAQCAtNjgyOCwxMyArNzQyNywxNCBAQAogICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CiBmaQogCi10ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcwordGVzdCBubyA9ICIkZW5hYmxlX2xpYnRvb2xfbG9jayIgfHwgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKIAogIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCiAjIGxpYnRvb2wgc3VwcG9ydC4KIGNhc2UgJGhvc3QgaW4KIGlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbW9kZQorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQpAQCAtNjg0MywyNCArNzQ0MywyNSBAQAogICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCiAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgogICAgICAgKkVMRi0zMiopCi0JSFBVWF9JQTY0X01PREU9IjMyIgorCUhQVVhfSUE2NF9NT0RFPTMyCiAJOzsKICAgICAgICpFTEYtNjQqKQotCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwlIUFVYX0lBNjRfTU9ERT02NAogCTs7CiAgICAgZXNhYwogICBmaQogICBybSAtcmYgY29uZnRlc3QqCiAgIDs7CiAqLSotaXJpeDYqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgogICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAogICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKICAgYWNfc3RhdHVzPSQ/CiAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KICAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KIAkqMzItYml0KikKIAkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCkBAIC02ODg5LDkgKzc0OTAsNTAgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICA7OwogCi14ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK21pcHM2NCotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBlbXVsPWVsZgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICozMi1iaXQqKQorCWVtdWw9IiR7ZW11bH0zMiIKKwk7OworICAgICAgKjY0LWJpdCopCisJZW11bD0iJHtlbXVsfTY0IgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpNU0IqKQorCWVtdWw9IiR7ZW11bH1idHNtaXAiCisJOzsKKyAgICAgICpMU0IqKQorCWVtdWw9IiR7ZW11bH1sdHNtaXAiCisJOzsKKyAgICBlc2FjCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKk4zMiopCisJZW11bD0iJHtlbXVsfW4zMiIKKwk7OworICAgIGVzYWMKKyAgICBMRD0iJHtMRC1sZH0gLW0gJGVtdWwiCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgdGhlIGxpc3RlZCBjYXNlcyBvbmx5IGNvdmVyIHRoZQorICAjIHNpdHVhdGlvbnMgd2hlcmUgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIChzdWNoIGFzIHdoZW4KKyAgIyBkb2luZyAzMi1iaXQgY29tcGlsYXRpb24gZm9yIGEgaG9zdCB3aGVyZSBsZCBkZWZhdWx0cyB0byA2NC1iaXQsIG9yCisgICMgdmljZSB2ZXJzYSk7IHRoZSBjb21tb24gY2FzZXMgd2hlcmUgbm8gbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCBkbworICAjIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQpAQCAtNjkwNywxNCArNzU0OSwxNyBAQAogCSAgeDg2XzY0LSpsaW51eCopCiAJICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KIAkgICAgICAqeDg2LTY0KikKLQkgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgotCSAgICAgICAgIDs7CisJCUxEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCisJCTs7CiAJICAgICAgKikKLQkgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCi0JICAgICAgICAgOzsKKwkJTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCQk7OwogCSAgICBlc2FjCiAJICAgIDs7Ci0JICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgcG93ZXJwYzY0bGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMybHBwY2xpbnV4IgorCSAgICA7OworCSAgcG93ZXJwYzY0LSpsaW51eCopCiAJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgogCSAgICA7OwogCSAgczM5MHgtKmxpbnV4KikKQEAgLTY5MzMsNyArNzU3OCwxMCBAQAogCSAgeDg2XzY0LSpsaW51eCopCiAJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgogCSAgICA7OwotCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICBwb3dlcnBjbGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0bHBwYyIKKwkgICAgOzsKKwkgIHBvd2VycGMtKmxpbnV4KikKIAkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgogCSAgICA7OwogCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKQEAgLTY5NTEsNyArNzU5OSw3IEBACiAKICotKi1zY28zLjJ2NSopCiAgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KLSAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIFNBVkVfQ0ZMQUdTPSRDRkxBR1MKICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAiID4mNjsgfQpAQCAtNjk5MSwxMyArNzYzOSwxNCBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQotICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICBpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X2NjX25lZWRzX2JlbGYiOyB0aGVuCiAgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCi0gICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgICAgQ0ZMQUdTPSRTQVZFX0NGTEFHUwogICBmaQogICA7OwogKi0qc29sYXJpcyopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQpAQCAtNzAwOSw3ICs3NjU4LDcgQEAKICAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCiAgICAgICB5ZXMqKQogICAgICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIGk/ODYtKi1zb2xhcmlzKikKKyAgICAgICAgaT84Ni0qLXNvbGFyaXMqfHg4Nl82NC0qLXNvbGFyaXMqKQogICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgogICAgICAgICAgIDs7CiAgICAgICAgIHNwYXJjKi0qLXNvbGFyaXMqKQpAQCAtNzAxOCw3ICs3NjY3LDcgQEAKICAgICAgICAgZXNhYwogICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KICAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICAgIExEPSIke0xELWxkfV9zb2wyIgorICAgICAgICAgIExEPSR7TEQtbGR9X3NvbDIKICAgICAgICAgZmkKICAgICAgICAgOzsKICAgICAgICopCkBAIC03MDM0LDcgKzc2ODMsNyBAQAogICA7OwogZXNhYwogCi1uZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKK25lZWRfbG9ja3M9JGVuYWJsZV9saWJ0b29sX2xvY2sKIAogaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgpAQCAtNzE0NSw3ICs3Nzk0LDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgoraWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiOyB0aGVuCiAgIE1BTklGRVNUX1RPT0w9OgogZmkKIApAQCAtNzY0OCw3ICs4Mjk3LDcgQEAKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubwotICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJExUX01VTFRJX01PRFVMRSI7IHRoZW4KIAkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKIAkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKIAkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCkBAIC03NjY2LDcgKzgzMTUsNyBAQAogCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKIAkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQogCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCi0JZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDA7IHRoZW4KKwllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IjsgdGhlbgogCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKIAllbHNlCiAJICBjYXQgY29uZnRlc3QuZXJyID4mNQpAQCAtNzcwNSw3ICs4MzU0LDcgQEAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisJTERGTEFHUz0kc2F2ZV9MREZMQUdTCiAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CkBAIC03NzM0LDcgKzgzODMsNyBAQAogICAgICAgX2x0X3Jlc3VsdD0kPwogICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgZm9yY2VfbG9hZCBjb25mdGVzdC5lcnI7IHRoZW4KIAljYXQgY29uZnRlc3QuZXJyID4mNQotICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCIgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKICAgICAgIGVsc2UKIAljYXQgY29uZnRlc3QuZXJyID4mNQpAQCAtNzc0NywzMiArODM5NiwzMiBAQAogJGFzX2VjaG8gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjY7IH0KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CiAgICAgZGFyd2luMS4qKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CiAgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCiAgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCiAgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAogICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CiAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCiAJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CiAJMTAuWzAxMl0qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CiAJMTAuKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CiAgICAgICBlc2FjCiAgICAgOzsKICAgZXNhYwotICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCiAgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJwogICAgIGZpCi0gICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHdsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8kbGlibmFtZS1zeW1ib2xzLmV4cHN5bScKICAgICBlbHNlCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltICRsaWInCiAgICAgZmkKLSAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgaWYgdGVzdCA6ICE9ICIkRFNZTVVUSUwiICYmIHRlc3Qgbm8gPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCiAgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JwogICAgIGVsc2UKICAgICAgIF9sdF9kc3ltdXRpbD0KQEAgLTgwNjMsNiArODcxMiwxNyBAQAogCiAKIAorZnVuY19zdHJpcG5hbWVfY25mICgpCit7CisgIGNhc2UgJDIgaW4KKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgInMlXiQxJSU7IHMlXFxcXCQyXCQlJSJgOzsKKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgInMlXiQxJSU7IHMlJDJcJCUlImA7OworICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWVfY25mCisKKworCisKIAogIyBTZXQgb3B0aW9ucwogCkBAIC04MDgzLDE0ICs4NzQzLDE0IEBACiAgICAgKikKICAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KICAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCiAgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCisJSUZTPSRsdF9zYXZlX2lmcwogCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCiAJICBlbmFibGVfc2hhcmVkPXllcwogCWZpCiAgICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIDs7CiAgICAgZXNhYwogZWxzZQpAQCAtODExNCwxNCArODc3NCwxNCBAQAogICAgICopCiAgICAgIGVuYWJsZV9zdGF0aWM9bm8KICAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCiAgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCisJSUZTPSRsdF9zYXZlX2lmcwogCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCiAJICBlbmFibGVfc3RhdGljPXllcwogCWZpCiAgICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIDs7CiAgICAgZXNhYwogZWxzZQpAQCAtODE0NSwxNCArODgwNSwxNCBAQAogICAgICopCiAgICAgICBwaWNfbW9kZT1kZWZhdWx0CiAgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAogICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKKwlJRlM9JGx0X3NhdmVfaWZzCiAJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KIAkgIHBpY19tb2RlPXllcwogCWZpCiAgICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIDs7CiAgICAgZXNhYwogZWxzZQpAQCAtODE2MCw4ICs4ODIwLDYgQEAKIGZpCiAKIAotdGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0Ci0KIAogCiAKQEAgLTgxNzcsMTQgKzg4MzUsMTQgQEAKICAgICAqKQogICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwogICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKICAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKKwlJRlM9JGx0X3NhdmVfaWZzCiAJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KIAkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCiAJZmkKICAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgOzsKICAgICBlc2FjCiBlbHNlCkBAIC04MjAyLDcgKzg4NjAsNyBAQAogCiAKICMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKLUxJQlRPT0xfREVQUz0iJGx0bWFpbiIKK0xJQlRPT0xfREVQUz0kbHRtYWluCiAKICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCiBMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKQEAgLTgyNTEsNyArODkwOSw3IEBACiAKIAogCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgogICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGZpCiAKQEAgLTgyOTAsNyArODk0OCw3IEBACiAgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQogICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKICAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgaWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgogICAgIENPTExFQ1RfTkFNRVM9CiAgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKICAgZmkKQEAgLTgzMDEsMTQgKzg5NTksMTQgQEAKIG9maWxlPWxpYnRvb2wKIGNhbl9idWlsZF9zaGFyZWQ9eWVzCiAKLSMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCiAjIHdoaWNoIG5lZWRzICcubGliJykuCiBsaWJleHQ9YQogCi13aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCiAKLW9sZF9DQz0iJENDIgotb2xkX0NGTEFHUz0iJENGTEFHUyIKK29sZF9DQz0kQ0MKK29sZF9DRkxBR1M9JENGTEFHUwogCiAjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwogdGVzdCAteiAiJENDIiAmJiBDQz1jYwpAQCAtODM0MCwyMiArODk5OCwyMiBAQAogZWxzZQogICBjYXNlICRNQUdJQ19DTUQgaW4KIFtcXC8qXSB8ICA/OltcXC9dKikKLSAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgogICA7OwogKikKLSAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKICAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCiAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGU7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvIiR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKICAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KIAljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgogCSJmaWxlX21hZ2ljICIqKQogCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIE1BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKIAkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKIAkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgOgpAQCAtODM3OCwxMyArOTAzNiwxMyBAQAogICAgICAgYnJlYWsKICAgICBmaQogICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgSUZTPSRsdF9zYXZlX2lmcworICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECiAgIDs7CiBlc2FjCiBmaQogCi1NQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK01BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKIGlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKICRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KQEAgLTg0MDYsMjIgKzkwNjQsMjIgQEAKIGVsc2UKICAgY2FzZSAkTUFHSUNfQ01EIGluCiBbXFwvKl0gfCAgPzpbXFwvXSopCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JE1BR0lDX0NNRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KICAgOzsKICopCi0gIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiAgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgogICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvZmlsZTsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvZmlsZSIKKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyL2ZpbGUiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kYWNfZGlyLyJmaWxlIgogICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgogCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCiAJImZpbGVfbWFnaWMgIiopCiAJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAogCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAogCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICA6CkBAIC04NDQ0LDEzICs5MTAyLDEzIEBACiAgICAgICBicmVhawogICAgIGZpCiAgIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICBJRlM9JGx0X3NhdmVfaWZzCisgIE1BR0lDX0NNRD0kbHRfc2F2ZV9NQUdJQ19DTUQKICAgOzsKIGVzYWMKIGZpCiAKLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAogaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQogJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQpAQCAtODQ3MSw3ICs5MTI5LDcgQEAKIAogIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKIAotbHRfc2F2ZV9DQz0iJENDIgorbHRfc2F2ZV9DQz0kQ0MKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwpAQCAtODUzMyw3ICs5MTkxLDcgQEAKIAogbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9CiAKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICBjYXNlICRjY19iYXNlbmFtZSBpbgogICBudmNjKikKICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OwpAQCAtODU0OSw3ICs5MjA3LDcgQEAKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KICAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50CiAgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgogICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KICAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKQEAgLTg1NzksNyArOTIzNyw3IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQogCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyI7IHRoZW4KICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCiBlbHNlCiAgICAgOgpAQCAtODU5NywxNyArOTI1NSwxOCBAQAogbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CiAKIAotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCiAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCiAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXgqKQogICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCiAgICAgICBmaQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwogICAgICAgOzsKIAogICAgIGFtaWdhb3MqKQpAQCAtODYxOCw4ICs5Mjc3LDggQEAKICAgICAgICAgOzsKICAgICAgIG02OGspCiAgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICAjIGFkZGluZyB0aGUgJy1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSAnLW02ODA0MCcuCiAgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwogICAgICAgICA7OwogICAgICAgZXNhYwpAQCAtODcwNSw3ICs5MzY0LDcgQEAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgYWl4KikKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgogCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKICAgICAgIGVsc2UKQEAgLTg3MTMsNiArOTM3MiwyMCBAQAogICAgICAgZmkKICAgICAgIDs7CiAKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIG5hZ2ZvciopCisgICAgICAgICMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKwogICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgpAQCAtODczMiw3ICs5NDA1LDcgQEAKIAk7OwogICAgICAgZXNhYwogICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHdsLWEgJHt3bH1hcmNoaXZlJwogICAgICAgOzsKIAogICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCkBAIC04NzQxLDkgKzk0MTQsOSBAQAogICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwogICAgICAgOzsKIAotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgogICAgICAgZWNjKikKIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwogCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKQEAgLTg3NjgsNiArOTQ0MSwxMiBAQAogCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJwogCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKIAk7OworICAgICAgdGNjKikKKwkjIEZhYnJpY2UgQmVsbGFyZCBldCBhbCdzIFRpbnkgQyBDb21waWxlcgorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworCTs7CiAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCiAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCiAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKQEAgLTg4NjUsNyArOTU0NCw3IEBACiAgICAgICA7OwogCiAgICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgogCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS2NvbmZvcm1fcGljJwogCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKICAgICAgIGZpCkBAIC04ODk0LDcgKzk1NzMsNyBAQAogICBmaQogCiBjYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgogICAqZGpncHAqKQogICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQogICAgIDs7CkBAIC04OTI2LDcgKzk2MDUsNyBAQAogICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz1ubwogICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50CiAgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgogICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KICAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKQEAgLTg5NTYsNyArOTYzNSw3IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQogCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyI7IHRoZW4KICAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgogICAgICAiIiB8ICIgIiopIDs7CiAgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljIiA7OwpAQCAtODk4OCw3ICs5NjY3LDcgQEAKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBzYXZlX0xERkxBR1M9JExERkxBR1MKICAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCiAgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgpAQCAtOTAwNywxMyArOTY4NiwxMyBAQAogICAgICBmaQogICAgZmkKICAgICRSTSAtciBjb25mdGVzdCoKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKIAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9CiAKLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIjsgdGhlbgogICAgIDoKIGVsc2UKICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KQEAgLTkxMzMsOCArOTgxMiw4IEBACiAKIAogCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCitoYXJkX2xpbmtzPW5vdHRlc3RlZAoraWYgdGVzdCBubyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iICYmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgogICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CkBAIC05MTQ2LDkgKzk4MjUsOSBAQAogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQogJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KICAgICBuZWVkX2xvY2tzPXdhcm4KICAgZmkKIGVsc2UKQEAgLTkxOTEsOSArOTg3MCw5IEBACiAgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CiAgIGluY2x1ZGVfZXhwc3ltcz0KICAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKLSAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgotICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCi0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSAnICgnIGFuZCAnKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiAnYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzICdhJyBhbmQgJ2JjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyAnZCcuCiAgIGV4Y2x1ZGVfZXhwc3ltcz0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJwogICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKICAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCkBAIC05MjA4LDcgKzk4ODcsNyBAQAogICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCiAgICAgICB3aXRoX2dudV9sZD1ubwogICAgIGZpCiAgICAgOzsKQEAgLTkyMTYsNyArOTg5NSw3IEBACiAgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKICAgICB3aXRoX2dudV9sZD15ZXMKICAgICA7OwotICBvcGVuYnNkKikKKyAgb3BlbmJzZCogfCBiaXRyaWcqKQogICAgIHdpdGhfZ251X2xkPW5vCiAgICAgOzsKICAgZXNhYwpAQCAtOTIyNiw3ICs5OTA1LDcgQEAKICAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCiAgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgogICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXgqKQogCSMgVGhlIEFJWCBwb3J0IG9mIEdOVSBsZCBoYXMgYWx3YXlzIGFzcGlyZWQgdG8gY29tcGF0aWJpbGl0eQpAQCAtOTI0OCwyNCArOTkyNywyNCBAQAogICAgIGVzYWMKICAgZmkKIAotICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSI7IHRoZW4KICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPScke3dsfScKKyAgICB3bGFyYz0nJHdsJwogCiAgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKICAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KICAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCiAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtLWV4cG9ydC1keW5hbWljJwogICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKICAgICBlbHNlCiAgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KICAgICBmaQogICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKF4pXCspXHNcKy8vJyAyPiYxYCBpbgogICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKICAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCkBAIC05Mjc4LDcgKzk5NTcsNyBAQAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBhaXhbMy05XSopCiAgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgogCWxkX3NobGlicz1ubwogCWNhdCA8PF9MVF9FT0YgMT4mMgogCkBAIC05Mjk3LDcgKzk5NzYsNyBAQAogICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KICAgICAgIHBvd2VycGMpCiAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCiAgICAgICAgIDs7CiAgICAgICBtNjhrKQpAQCAtOTMxMyw3ICs5OTkyLDcgQEAKIAlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKIAkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwogICAgICAgZmkKQEAgLTkzMjMsNyArMTAwMDIsNyBAQAogICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCiAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCiAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCkBAIC05MzMxLDYxICsxMDAxMCw2MSBAQAogICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCiAKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKKwkjIGlzOyBvdGhlcndpc2UsIHByZXBlbmQgRVhQT1JUUy4uLgorCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmICAgdGVzdCBERUYgPSAiYCRTRUQgLW4gICAgIC1lICdcJydzL15bCSBdKi8vJ1wnJyAgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnICAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnXCcnICAgICAtZSBxICAgICAkZXhwb3J0X3N5bWJvbHNgIiA7IHRoZW4KKyAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICBmaX4KKyAgICAgICAgJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBoYWlrdSopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwogICAgICAgOzsKIAogICAgIGludGVyaXhbMy05XSopCiAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCiAgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCiAgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CiAgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CiAgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCiAgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCiAgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCiAgICAgICA7OwogCiAgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCiAgICAgICB0bXBfZGlldD1ubwotICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKyAgICAgIGlmIHRlc3QgbGludXgtZGlldGxpYmMgPSAiJGhvc3Rfb3MiOyB0aGVuCiAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KIAkgIGRpZXRcICopIHRtcF9kaWV0PXllczs7CSMgbGludXgtZGlldGxpYmMgd2l0aCBzdGF0aWMgbGlua2luZyAoIWRpZXQtZHluKQogCWVzYWMKICAgICAgIGZpCiAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCi0JICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworCSAmJiB0ZXN0IG5vID0gIiR0bXBfZGlldCIKICAgICAgIHRoZW4KIAl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKIAkgIDs7CiAJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKIAkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CiAJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CiAJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CkBAIC05Mzk2LDQyICsxMDA3NSw0NCBAQAogCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCiAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KIAkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKyAgICAgICAgbmFnZm9yKikgICAgICAgICAgICAgICAgICAgICAgICAjIE5BR0ZPUiA1LjMKKyAgICAgICAgICB0bXBfc2hhcmVkZmxhZz0nLVdsLC1zaGFyZWQnIDs7CiAJeGxbY0NdKiB8IGJneGxbY0NdKiB8IG1waXhsW2NDXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKIAkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJwogCSAgdG1wX2FkZGZsYWc9IDs7CiAJbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKIAkgIDs7CiAJZXNhYwogCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgogCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCiAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CiAJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKIAllc2FjCi0JYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAKLSAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgogICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCiAgICAgICAgIGZpCiAKIAljYXNlICRjY19iYXNlbmFtZSBpbgogCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKIAkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0JICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgogCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKIAkgIGZpCiAJICA7OwogCWVzYWMKQEAgLTk0NDUsOCArMTAxMjYsOCBAQAogCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKIAl3bGFyYz0KICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZmkKICAgICAgIDs7CiAKQEAgLTk0NjQsOCArMTAxNDUsOCBAQAogCiBfTFRfRU9GCiAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwogICAgICAgZmkKQEAgLTk0NzcsNyArMTAxNTgsNyBAQAogCWxkX3NobGlicz1ubwogCWNhdCA8PF9MVF9FT0YgMT4mMgogCi0qKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbm5vdAogKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCiAqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCiAqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQpAQCAtOTQ5Miw5ICsxMDE3Myw5IEBACiAJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwogCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KIAkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCSAgZWxzZQogCSAgICBsZF9zaGxpYnM9bm8KIAkgIGZpCkBAIC05NTExLDE1ICsxMDE5MiwxNSBAQAogCiAgICAgKikKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwogICAgICAgZmkKICAgICAgIDs7CiAgICAgZXNhYwogCi0gICAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgIGlmIHRlc3Qgbm8gPSAiJGxkX3NobGlicyI7IHRoZW4KICAgICAgIHJ1bnBhdGhfdmFyPQogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KQEAgLTk1MzUsNyArMTAyMTYsNyBAQAogICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKICAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIiAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCiAJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCiAJIyBicm9rZW4gY29sbGVjdDIuCiAJaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCkBAIC05NTQzLDEyICsxMDIyNCwxMiBAQAogICAgICAgOzsKIAogICAgIGFpeFs0LTldKikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKIAkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KIAlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCiAJZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCisJbm9fZW50cnlfZmxhZz0KICAgICAgIGVsc2UKIAkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KIAkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCkBAIC05NTY2LDcgKzEwMjQ3LDcgQEAKIAkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgogCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKIAkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgIGlmICh0ZXN0IHgtYnJ0bCA9ICJ4JGxkX2ZsYWciIHx8IHRlc3QgeC1XbCwtYnJ0bCA9ICJ4JGxkX2ZsYWciKTsgdGhlbgogCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwogCSAgICBicmVhawogCSAgZmkKQEAgLTk1ODksMTMgKzEwMjcwLDEzIEBACiAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICAgIGZpbGVfbGlzdF9zcGVjPScke3dsfS1mLCcKKyAgICAgIGZpbGVfbGlzdF9zcGVjPSckd2wtZiwnCiAKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCiAJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCiAJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAogCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAogCSAgdGhlbgpAQCAtOTYxNCwzNSArMTAyOTUsMzUgQEAKIAkgIDs7CiAJZXNhYwogCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHdsLUcnCiAJZmkKICAgICAgIGVsc2UKIAkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgogCSAgc2hhcmVkX2ZsYWc9Jy1HJwogCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCiAJICBlbHNlCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJwogCSAgZmkKIAlmaQogICAgICAgZmkKIAotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1iZXhwYWxsJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtYmV4cGFsbCcKICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAogICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCiAJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCiAJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCiAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgogICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICAgICAgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgogICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKIGVsc2UKICAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF8rOn0gZmFsc2U7IHRoZW4gOgpAQCAtOTY3Nyw3ICsxMDM1OCw3IEBACiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKyAgICBsdF9jdl9haXhfbGlicGF0aF89L3Vzci9saWI6L2xpYgogICBmaQogCiBmaQpAQCAtOTY4NSwxNyArMTAzNjYsMTcgQEAKICAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXwogZmkKIAotICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZwogICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwogCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ii16IG5vZGVmcyIKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKIAllbHNlCiAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgogCSAjIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKwkgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgogICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKIGVsc2UKICAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF8rOn0gZmFsc2U7IHRoZW4gOgpAQCAtOTczMCw3ICsxMDQxMSw3IEBACiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKyAgICBsdF9jdl9haXhfbGlicGF0aF89L3Vzci9saWI6L2xpYgogICBmaQogCiBmaQpAQCAtOTczOCwyMSArMTA0MTksMjEgQEAKICAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXwogZmkKIAotCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCiAJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBub191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm5vdG9rJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJvaycKLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgIG5vX3VuZGVmaW5lZF9mbGFnPScgJHdsLWJlcm5vdG9rJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtYmVyb2snCisJICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAJICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICBlbHNlCiAJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwogCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJGNvbnZlbmllbmNlJwogCSAgZmkKIAkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcwogCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKIAlmaQogICAgICAgZmkKICAgICAgIDs7CkBAIC05NzYxLDcgKzEwNDQyLDcgQEAKICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCiAgICAgICBwb3dlcnBjKQogICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJwogICAgICAgICA7OwogICAgICAgbTY4aykKQEAgLTk3OTEsMTYgKzEwNDcyLDE3IEBACiAJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KIAlsaWJleHQ9bGliCiAJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9Ii5kbGwiCisJc2hyZXh0X2NtZHM9LmRsbAogCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0JICBlbHNlCi0JICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0JICBmaX4KLQkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KLQkgIGxpbmtuYW1lcz0nCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgZml+CisgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorICAgICAgICAgIGxpbmtuYW1lcz0nCiAJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgogCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJwogCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCkBAIC05ODA5LDE4ICsxMDQ5MSwxOCBAQAogCSMgRG9uJ3QgdXNlIHJhbmxpYgogCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKIAlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+Ci0JICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotCSAgICAqLmV4ZXwqLkVYRSkgOzsKLQkgICAgKikKLQkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0JICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKLQkgICAgICA7OwotCSAgZXNhY34KLQkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0JICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0JICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotCSAgZmknCisgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAqLmV4ZXwqLkVYRSkgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0kbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWN+CisgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgZmknCiAJOzsKICAgICAgICopCiAJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCkBAIC05ODI5LDcgKzEwNTExLDcgQEAKIAkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgogCWxpYmV4dD1saWIKIAkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0iLmRsbCIKKwlzaHJleHRfY21kcz0uZGxsCiAJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgogCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCiAJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KQEAgLTk4NDgsMjQgKzEwNTMwLDI0IEBACiAgIGhhcmRjb2RlX2RpcmVjdD1ubwogICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCiAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKLSAgaWYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gInllcyI7IHRoZW4KLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR7d2x9LWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHdsLWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCiAKICAgZWxzZQogICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCiAgIGZpCiAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZAogICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKICAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKICAgZXNhYwotICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRfbHRfZGFyX2Nhbl9zaGFyZWQiOyB0aGVuCiAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAotICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2RzeW11dGlsIgorICAgIG1vZHVsZV9jbWRzPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2RzeW11dGlsIgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCiAKICAgZWxzZQogICBsZF9zaGxpYnM9bm8KQEAgLTk5MDcsMzMgKzEwNTg5LDMzIEBACiAgICAgICA7OwogCiAgICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwogCiAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAogICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCiAgICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKICAgICAgIDs7CiAKICAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQogCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCiAJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAJaGFyZGNvZGVfZGlyZWN0PXllcwogCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKIAkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAogCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgogCWhhcmRjb2RlX21pbnVzX0w9eWVzCkBAIC05OTQxLDI1ICsxMDYyMywyNSBAQAogICAgICAgOzsKIAogICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgogCWNhc2UgJGhvc3RfY3B1IGluCiAJaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAlpYTY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCSopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWVzYWMKICAgICAgIGVsc2UKIAljYXNlICRob3N0X2NwdSBpbgogCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAlpYTY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCSopCiAKQEAgLTk5NzEsNyArMTA2NTMsNyBAQAogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCiAgICBMREZMQUdTPSIkTERGTEFHUyAtYiIKICAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCkBAIC05OTkwLDE0ICsxMDY3MiwxNCBAQAogICAgICBmaQogICAgZmkKICAgICRSTSAtciBjb25mdGVzdCoKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKIAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNjsgfQogCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID0geHllczsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiI7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIGVsc2UKICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiBmaQpAQCAtMTAwMDUsOCArMTA2ODcsOCBAQAogCSAgOzsKIAllc2FjCiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJwogCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogCiAJY2FzZSAkaG9zdF9jcHUgaW4KQEAgLTEwMDE3LDcgKzEwNjk5LDcgQEAKIAkqKQogCSAgaGFyZGNvZGVfZGlyZWN0PXllcwogCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKIAogCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKIAkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgpAQCAtMTAwMjgsOCArMTA3MTAsOCBAQAogICAgICAgOzsKIAogICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCiAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KQEAgLTEwMDM5LDggKzEwNzIxLDggQEAKIGlmICR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKyAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAkd2wtZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsL2Rldi9udWxsIgogCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIGludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KQEAgLTEwMDUyLDE5ICsxMDczNCwxOSBAQAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgICAgICAgIExERkxBR1M9JHNhdmVfTERGTEFHUwogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9Ci0JaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgotICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zICR3bC1leHBvcnRzX2ZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJZmkKICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGZpCiAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgaW5oZXJpdF9ycGF0aD15ZXMKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCkBAIC0xMDA4NCw3ICsxMDc2Niw3IEBACiAgICAgbmV3c29zNikKICAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KICAgICAgIDs7CkBAIC0xMDA5MiwyNyArMTA3NzQsMTkgQEAKICAgICAqbnRvKiB8ICpxbngqKQogICAgICAgOzsKIAotICAgIG9wZW5ic2QqKQorICAgIG9wZW5ic2QqIHwgYml0cmlnKikKICAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCiAJaGFyZGNvZGVfZGlyZWN0PXllcwogCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KIAloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgogCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKIAllbHNlCi0JICBjYXNlICRob3N0X29zIGluCi0JICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKLQkgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLQkgICAgIDs7Ci0JICAgKikKLQkgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCwkbGliZGlyJwogCWZpCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzPW5vCkBAIC0xMDEyOCwyOCArMTA4MDIsMjggQEAKICAgICAgIDs7CiAKICAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAgICAgICBlbHNlCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogICAgICAgZmkKICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAgICAgICA7OwogCiAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICBlbHNlCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLWlucHV0ICR3bCRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwogCiAJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJwpAQCAtMTAxNjAsMjQgKzEwODM0LDI0IEBACiAKICAgICBzb2xhcmlzKikKICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0Jd2xhcmM9JyR7d2x9JwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwl3bGFyYz0nJHdsJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bC16ICR7d2x9dGV4dCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAgICAgICBlbHNlCiAJY2FzZSBgJENDIC1WIDI+JjFgIGluCiAJKiJDb21waWxlcnMgNS4wIiopCiAJICB3bGFyYz0nJwotCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICAgJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKIAkgIDs7CiAJKikKLQkgIHdsYXJjPScke3dsfScKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIHdsYXJjPSckd2wnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAJICA7OwogCWVzYWMKICAgICAgIGZpCkBAIC0xMDE4NywxMSArMTA4NjEsMTEgQEAKICAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKICAgICAgICopCiAJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCisJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0ICckd2wnLAogCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgogCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKIAllbHNlCiAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKIAlmaQpAQCAtMTAyMDEsMTAgKzEwODc1LDEwIEBACiAgICAgICA7OwogCiAgICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKyAgICAgIGlmIHRlc3Qgc2VxdWVudCA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCiAJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwogCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQogCWFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgIGZpCkBAIC0xMDI1Myw0MyArMTA5MjcsNDMgQEAKICAgICAgIDs7CiAKICAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPSckd2wteix0ZXh0JwogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KICAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKIAotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CiAgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCiAgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKICAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKICAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAogICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS16LG5vZGVmcycKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPSckd2wteix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR3bC16LG5vZGVmcycKICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SLCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtUiwkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1CZXhwb3J0JwogICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwogCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZmkKICAgICAgIDs7CiAKQEAgLTEwMzA0LDEwICsxMDk3OCwxMCBAQAogICAgICAgOzsKICAgICBlc2FjCiAKLSAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCisgICAgaWYgdGVzdCBzbmkgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgogICAgICAgY2FzZSAkaG9zdCBpbgogICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUJsYXJnZWR5bnN5bScKIAk7OwogICAgICAgZXNhYwogICAgIGZpCkBAIC0xMDMxNSw3ICsxMDk4OSw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKICRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KLXRlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwordGVzdCBubyA9ICIkbGRfc2hsaWJzIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKIHdpdGhfZ251X2xkPSR3aXRoX2dudV9sZAogCkBAIC0xMDM0MSw3ICsxMTAxNSw3IEBACiAgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCiAKLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzLHllcyA9ICIkR0NDLCRlbmFibGVfc2hhcmVkIjsgdGhlbgogICAgIGNhc2UgJGFyY2hpdmVfY21kcyBpbgogICAgIConficqKQogICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgpAQCAtMTA1NTYsMTQgKzExMjMwLDE0IEBACiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQogCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKLSAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICAgIGRhcndpbiopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8sL0xSLycgOzsKKyAgICAqKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovJyA7OwogICBlc2FjCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbQS1aYS16XTpcKSxcMSxnIiA7OwotICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PVwoW0EtWmEtel06XCl8XDF8ZycgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PS98L3xnJyA7OwogICBlc2FjCiAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCiAgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KQEAgLTEwNTc5LDI4ICsxMTI1MywzNSBAQAogICAgIDs7CiAgIGVzYWMKICAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKLSAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5Li4uCiAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQotICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBsdF9tdWx0aV9vc19kaXI9L2AkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgIyAuLi5idXQgaWYgc29tZSBwYXRoIGNvbXBvbmVudCBhbHJlYWR5IGVuZHMgd2l0aCB0aGUgbXVsdGlsaWIgZGlyIHdlIGFzc3VtZQorICAjIHRoYXQgYWxsIGlzIGZpbmUgYW5kIHRydXN0IC1wcmludC1zZWFyY2gtZGlycyBhcyBpcyAoR0NDIDQuMj8gb3IgbmV3ZXIpLgorICBjYXNlICIkbHRfbXVsdGlfb3NfZGlyOyAkbHRfc2VhcmNoX3BhdGhfc3BlYyAiIGluCisgICIvOyAiKiB8ICIvLjsgIiogfCAiLy4vOyAiKiB8ICoiJGx0X211bHRpX29zX2RpciAiKiB8ICoiJGx0X211bHRpX29zX2Rpci8gIiopCisgICAgbHRfbXVsdGlfb3NfZGlyPQorICAgIDs7CisgIGVzYWMKICAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbwotICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgotICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKLSAgICBlbHNlCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciIKKyAgICBlbGlmIHRlc3QgLW4gIiRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCiAgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKIAlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKICAgICBmaQogICBkb25lCiAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKLUJFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKLSAgbHRfZm9vPSIiOwotICBsdF9jb3VudD0wOworQkVHSU4ge1JTID0gIiAiOyBGUyA9ICIvfFxuIjt9IHsKKyAgbHRfZm9vID0gIiI7CisgIGx0X2NvdW50ID0gMDsKICAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKICAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CiAgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgewogICAgICAgICBsdF9jb3VudCsrOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKLSAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgICBsdF9mb28gPSAiLyIgJGx0X2kgbHRfZm9vOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGx0X2NvdW50LS07CiAgICAgICAgIH0KQEAgLTEwNjE0LDcgKzExMjk1LDcgQEAKICAgIyBmb3IgdGhlc2UgaG9zdHMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKLSAgICAgICRTRUQgJ3MsL1woW0EtWmEtel06XCksXDEsZydgIDs7CisgICAgICAkU0VEICdzfC9cKFtBLVphLXpdOlwpfFwxfGcnYCA7OwogICBlc2FjCiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKIGVsc2UKQEAgLTEwNjIzLDcgKzExMzA0LDcgQEAKIGxpYnJhcnlfbmFtZXNfc3BlYz0KIGxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCiBzb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCitzaHJleHRfY21kcz0uc28KIHBvc3RpbnN0YWxsX2NtZHM9CiBwb3N0dW5pbnN0YWxsX2NtZHM9CiBmaW5pc2hfY21kcz0KQEAgLTEwNjQzLDExICsxMTMyNCwxMSBAQAogY2FzZSAkaG9zdF9vcyBpbgogYWl4MyopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwogICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKIAogICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIDs7CiAKIGFpeFs0LTldKikKQEAgLTEwNjU1LDQwICsxMTMzNiw0MCBAQAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KICAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgZWxzZQogICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKICAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyB0aGUgbGluZSAnIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uICcuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCiAgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCiAgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwogCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICRDQyAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCiAJOgogICAgICAgZWxzZQogCWNhbl9idWlsZF9zaGFyZWQ9bm8KICAgICAgIGZpCiAgICAgICA7OwogICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbm5vdCBoYXJkY29kZSBjb3JyZWN0CiAgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwogICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCiAgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KICAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CiAgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgICBlbHNlCiAgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgogICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgICBmaQogICAgIHNobGlicGF0aF92YXI9TElCUEFUSAogICBmaQpAQCAtMTA2OTksMTggKzExMzgwLDE4IEBACiAgIHBvd2VycGMpCiAgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgogICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgICAgOzsKICAgbTY4aykKICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwogICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwogICAgIDs7CiAgIGVzYWMKICAgOzsKIAogYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgogICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAogICA7OwpAQCAtMTA3MTgsOCArMTEzOTksOCBAQAogYnNkaVs0NV0qKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgpAQCAtMTA3MzEsNyArMTE0MTIsNyBAQAogCiBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgorICBzaHJleHRfY21kcz0uZGxsCiAgIG5lZWRfdmVyc2lvbj1ubwogICBuZWVkX2xpYl9wcmVmaXg9bm8KIApAQCAtMTA3NDAsOCArMTE0MjEsOCBAQAogICAgICMgZ2NjCiAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgogICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgogICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CiAgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CkBAIC0xMDc1NywxNyArMTE0MzgsMTcgQEAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgY3lnd2luKikKICAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKIAogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSIKICAgICAgIDs7CiAgICAgbWluZ3cqIHwgY2VnY2MqKQogICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCiAgICAgICA7OwogICAgIHB3MzIqKQogICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwogICAgICAgOzsKICAgICBlc2FjCiAgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKQEAgLTEwNzc2LDggKzExNDU3LDggQEAKICAgKixjbCopCiAgICAgIyBOYXRpdmUgTVNWQwogICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwubGliJwogCiAgICAgY2FzZSAkYnVpbGRfb3MgaW4KICAgICBtaW5ndyopCkBAIC0xMDgwNCw3ICsxMTQ4NSw3IEBACiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAogICAgICAgOzsKICAgICAqKQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKICAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgogICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYApAQCAtMTA4MTcsOCArMTE0OTgsOCBAQAogICAgIGVzYWMKIAogICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CiAgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CiAgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KICAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKQEAgLTEwODMxLDcgKzExNTEyLDcgQEAKIAogICAqKQogICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0ICRsaWJuYW1lLmxpYicKICAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwogICAgIDs7CiAgIGVzYWMKQEAgLTEwODQ0LDggKzExNTI1LDggQEAKICAgdmVyc2lvbl90eXBlPWRhcndpbgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICiAgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwpAQCAtMTA4NTgsOCArMTE1MzksOCBAQAogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIDs7CiAKQEAgLTEwODc3LDEyICsxMTU1OCwxMiBAQAogICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CiAgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgogICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JwogICAgICAgbmVlZF92ZXJzaW9uPW5vCiAgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgICAgIDs7CiAgICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCiAgICAgICBuZWVkX3ZlcnNpb249eWVzCiAgICAgICA7OwogICBlc2FjCkBAIC0xMDkwNywyNiArMTE1ODgsMTUgQEAKICAgZXNhYwogICA7OwogCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCiBoYWlrdSopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwogICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICA7OwpAQCAtMTA5NDQsOSArMTE2MTQsOSBAQAogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCiAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGlmIHRlc3QgMzIgPSAiJEhQVVhfSUE2NF9NT0RFIjsgdGhlbgogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgogICAgIGVsc2UKICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKQEAgLTEwOTU5LDggKzExNjI5LDggQEAKICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgogICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAogICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCiAgICAgOzsKQEAgLTEwOTY5LDggKzExNjM5LDggQEAKICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgogICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAogICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgICA7OwogICBlc2FjCiAgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KQEAgLTEwOTgzLDggKzExNjUzLDggQEAKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwpAQCAtMTA5OTUsNyArMTE2NjUsNyBAQAogICBjYXNlICRob3N0X29zIGluCiAgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwogICAgICopCi0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KIAkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogCWVsc2UKIAkJdmVyc2lvbl90eXBlPWlyaXgKQEAgLTExMDAzLDggKzExNjczLDggQEAKICAgZXNhYwogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgY2FzZSAkaG9zdF9vcyBpbgogICBpcml4NSogfCBub25zdG9wdXgqKQogICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KQEAgLTExMDIzLDggKzExNjkzLDggQEAKICAgZXNhYwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIC91c3IvbG9jYWwvbGliJGxpYnN1ZmYiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiIKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICA7OwogCkBAIC0xMTAzMywxMyArMTE3MDMsMzMgQEAKICAgZHluYW1pY19saW5rZXI9bm8KICAgOzsKIAorbGludXgqYW5kcm9pZCopCisgIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgZmluaXNoX2NtZHM9CisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCisgICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgOzsKKwogIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwpAQCAtMTEwODMsMTQgKzExNzczLDEwIEBACiAgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKIAotICAjIEFkZCBBQkktc3BlY2lmaWMgZGlyZWN0b3JpZXMgdG8gdGhlIHN5c3RlbSBsaWJyYXJ5IHBhdGguCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliNjQgL3Vzci9saWI2NCAvbGliIC91c3IvbGliIgotCiAgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCiAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCiAgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKLQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKICAgZmkKIAogICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KQEAgLTExMTA3LDEyICsxMTc5MywxMiBAQAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCiAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCiAgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCiAgIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCiAgIGZpCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICkBAIC0xMTEyMiw3ICsxMTgwOCw3IEBACiAKIG5ld3NvczYpCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICA7OwpAQCAtMTExMzEsNDUgKzExODE3LDM0IEBACiAgIHZlcnNpb25fdHlwZT1xbngKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCiAgIDs7CiAKLW9wZW5ic2QqKQorb3BlbmJzZCogfCBiaXRyaWcqKQogICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYgogICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKyAgICBuZWVkX3ZlcnNpb249bm8KKyAgZWxzZQorICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgZmkKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICA7OwogCiBvczIqKQogICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKKyAgc2hyZXh0X2NtZHM9LmRsbAogICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0ICRsaWJuYW1lLmEnCiAgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICiAgIDs7CkBAIC0xMTE3OCwxMSArMTE4NTMsMTEgQEAKICAgdmVyc2lvbl90eXBlPW9zZgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCiAgIDs7CiAKIHJkb3MqKQpAQCAtMTExOTMsOCArMTE4NjgsOCBAQAogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCkBAIC0xMTIwNCwxMSArMTE4NzksMTEgQEAKIAogc3Vub3M0KikKICAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgZmkKICAgbmVlZF92ZXJzaW9uPXllcwpAQCAtMTEyMTYsOCArMTE4OTEsOCBAQAogCiBzeXN2NCB8IHN5c3Y0LjMqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCiAgICAgc25pKQpAQCAtMTEyMzgsMTAgKzExOTEzLDEwIEBACiAgIDs7CiAKIHN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCiAgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3InCiAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgZmkKICAgOzsKQEAgLTExMjUwLDEyICsxMTkyNSwxMiBAQAogICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCiAgIGVsc2UKICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKQEAgLTExMjczLDcgKzExOTQ4LDcgQEAKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCkBAIC0xMTI4MSw4ICsxMTk1Niw4IEBACiAKIHV0czQqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIDs7CiAKQEAgLTExMjkyLDE4ICsxMTk2NywxOCBAQAogZXNhYwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CiAkYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCit0ZXN0IG5vID0gIiRkeW5hbWljX2xpbmtlciIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCiB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCiBmaQogCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogZmkKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCiBmaQogCiAKQEAgLTExNDAyLDE1ICsxMjA3NywxNSBAQAogaGFyZGNvZGVfYWN0aW9uPQogaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CiAgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8Ci0gICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSAiWHllcyIgOyB0aGVuCisgICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgogCiAgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gbm8gJiYKKyAgaWYgdGVzdCBubyAhPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKICAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQogICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CiAgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICMjIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICYmCisgICAgIHRlc3Qgbm8gIT0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgogICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCiAgICAgaGFyZGNvZGVfYWN0aW9uPXJlbGluawogICBlbHNlCkBAIC0xMTQyNSwxMiArMTIxMDAsMTIgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uIiA+JjUKICRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uIiA+JjY7IH0KIAotaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbmsgfHwKLSAgIHRlc3QgIiRpbmhlcml0X3JwYXRoIiA9IHllczsgdGhlbgoraWYgdGVzdCByZWxpbmsgPSAiJGhhcmRjb2RlX2FjdGlvbiIgfHwKKyAgIHRlc3QgeWVzID0gIiRpbmhlcml0X3JwYXRoIjsgdGhlbgogICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorZWxpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8fAorICAgICB0ZXN0IG5vID0gIiRlbmFibGVfc2hhcmVkIjsgdGhlbgogICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwogZmkKQEAgLTExNDQwLDcgKzEyMTE1LDcgQEAKIAogCiAKLSAgaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzICE9ICIkZW5hYmxlX2Rsb3BlbiI7IHRoZW4KICAgZW5hYmxlX2Rsb3Blbj11bmtub3duCiAgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCiAgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgpAQCAtMTE0NTAsMjMgKzEyMTI1LDIzIEBACiAKICAgY2FzZSAkaG9zdF9vcyBpbgogICBiZW9zKikKLSAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbj1sb2FkX2FkZF9vbgogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQogICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwogICAgIDs7CiAKICAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW49TG9hZExpYnJhcnkKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KICAgICA7OwogCiAgIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQogICAgIDs7CiAKICAgZGFyd2luKikKLSAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQogaWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKQEAgLTExNTA0LDEwICsxMjE3OSwxMCBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsCiBlbHNlCiAKLSAgICBsdF9jdl9kbG9wZW49ImR5bGQiCisgICAgbHRfY3ZfZGxvcGVuPWR5bGQKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KICAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKIApAQCAtMTE1MTUsMTAgKzEyMTkwLDE4IEBACiAKICAgICA7OwogCisgIHRwZiopCisgICAgIyBEb24ndCB0cnkgdG8gcnVuIGFueSBsaW5rIHRlc3RzIGZvciBUUEYuICBXZSBrbm93IGl0J3MgaW1wb3NzaWJsZQorICAgICMgYmVjYXVzZSBUUEYgaXMgYSBjcm9zcy1jb21waWxlciwgYW5kIHdlIGtub3cgaG93IHdlIG9wZW4gRFNPcy4KKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgICA7OworCiAgICopCiAgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2hsX2xvYWQiICJhY19jdl9mdW5jX3NobF9sb2FkIgogaWYgdGVzdCAieCRhY19jdl9mdW5jX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49InNobF9sb2FkIgorICBsdF9jdl9kbG9wZW49c2hsX2xvYWQKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICIgPiY2OyB9CkBAIC0xMTU1NywxMSArMTIyNDAsMTEgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQogaWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCisgIGx0X2N2X2Rsb3Blbj1zaGxfbG9hZCBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZAogZWxzZQogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICBsdF9jdl9kbG9wZW49ZGxvcGVuCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQpAQCAtMTE2MDAsNyArMTIyODMsNyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KQEAgLTExNjM5LDcgKzEyMzIyLDcgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KIGlmIHRlc3QgIngkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbHN2bGQKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9CkBAIC0xMTY3OCw3ICsxMjM2MSw3IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KIGlmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorICBsdF9jdl9kbG9wZW49ZGxkX2xpbmsgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGQKIGZpCiAKIApAQCAtMTE2OTksMjEgKzEyMzgyLDIxIEBACiAgICAgOzsKICAgZXNhYwogCi0gIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KLSAgICBlbmFibGVfZGxvcGVuPXllcwotICBlbHNlCisgIGlmIHRlc3Qgbm8gPSAiJGx0X2N2X2Rsb3BlbiI7IHRoZW4KICAgICBlbmFibGVfZGxvcGVuPW5vCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPXllcwogICBmaQogCiAgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgogICBkbG9wZW4pCi0gICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgotICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorICAgIHNhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisgICAgdGVzdCB5ZXMgPSAiJGFjX2N2X2hlYWRlcl9kbGZjbl9oIiAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgogCi0gICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCiAKLSAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIHNhdmVfTElCUz0kTElCUwogICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKIAogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQpAQCAtMTE3MjEsNyArMTI0MDQsNyBAQAogaWYgJHtsdF9jdl9kbG9wZW5fc2VsZis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgCSAgaWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgogICBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcwogZWxzZQogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCkBAIC0xMTc3MCw3ICsxMjQ1Myw3IEBACiAKIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKIGludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKICNlbmRpZgogCkBAIC0xMTgwMCw3ICsxMjQ4Myw3IEBACiAgIChldmFsICRhY19saW5rKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwogICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiY29uZnRlc3QkYWNfZXhlZXh0IiAyPi9kZXYvbnVsbDsgdGhlbgogICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAogICAgIGx0X3N0YXR1cz0kPwogICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KQEAgLTExODIwLDE0ICsxMjUwMywxNCBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KIAotICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9kbG9wZW5fc2VsZiI7IHRoZW4KICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQogaWYgJHtsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIAkgIGlmIHRlc3QgeWVzID0gIiRjcm9zc19jb21waWxpbmciOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKQEAgLTExODc2LDcgKzEyNTU5LDcgQEAKIAogLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAogICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQogaW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwogI2VuZGlmCiAKQEAgLTExOTA2LDcgKzEyNTg5LDcgQEAKICAgKGV2YWwgJGFjX2xpbmspIDI+JjUKICAgYWNfc3RhdHVzPSQ/CiAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICJjb25mdGVzdCRhY19leGVleHQiIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCiAgICAgbHRfc3RhdHVzPSQ/CiAgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgpAQCAtMTE5MjcsOSArMTI2MTAsOSBAQAogJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNjsgfQogICAgIGZpCiAKLSAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0gICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIENQUEZMQUdTPSRzYXZlX0NQUEZMQUdTCisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgTElCUz0kc2F2ZV9MSUJTCiAgICAgOzsKICAgZXNhYwogCkBAIC0xMTk3Myw3ICsxMjY1Niw3IEBACiAjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKICAgY2FzZSAkaG9zdF9vcyBpbgogICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgogICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKICAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CkBAIC0xMjAwMSw3ICsxMjY4NCw3IEBACiAKIAogCi0gICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICAjIFJlcG9ydCB3aGF0IGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKQEAgLTEyMDA5LDEzICsxMjY5MiwxMyBAQAogCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQotICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKyAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubwogCiAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAogICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgYWl4MyopCi0gICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwogICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCiAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCiAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCkBAIC0xMjAyMyw4ICsxMjcwNiw4IEBACiAgICAgOzsKIAogICBhaXhbNC05XSopCi0gICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSIgJiYgdGVzdCBubyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKyAgICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCiAgICAgZmkKICAgICA7OwogICBlc2FjCkBAIC0xMjAzNCw3ICsxMjcxNyw3IEBACiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQogICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcwogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQogJGFzX2VjaG8gIiRlbmFibGVfc3RhdGljIiA+JjY7IH0KIApAQCAtMTIwNDgsNyArMTI3MzEsMzE4NyBAQAogYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKIAotQ0M9IiRsdF9zYXZlX0NDIgorQ0M9JGx0X3NhdmVfQ0MKKworICAgICAgaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0IG5vICE9ICIkQ1hYIiAmJgorICAgICggKHRlc3QgZysrID0gIiRDWFgiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgZysrICE9ICIkQ1hYIikpKTsgdGhlbgorICBhY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCisgIGlmICR7YWNfY3ZfcHJvZ19DWFhDUFArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENYWENQUCBpbiAiJENYWCAtRSIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorCitmaQorICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWENQUCIgPiY1CiskYXNfZWNobyAiJENYWENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZWxzZQorICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKK2ZpCisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKK2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubworYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9Citjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPW5vCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPQoraGFyZGNvZGVfZGlyZWN0X0NYWD1ubworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD1ubworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9CitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KK2hhcmRjb2RlX21pbnVzX0xfQ1hYPW5vCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAoraGFyZGNvZGVfYXV0b21hdGljX0NYWD1ubworaW5oZXJpdF9ycGF0aF9DWFg9bm8KK21vZHVsZV9jbWRzX0NYWD0KK21vZHVsZV9leHBzeW1fY21kc19DWFg9CitsaW5rX2FsbF9kZXBsaWJzX0NYWD11bmtub3duCitvbGRfYXJjaGl2ZV9jbWRzX0NYWD0kb2xkX2FyY2hpdmVfY21kcworcmVsb2FkX2ZsYWdfQ1hYPSRyZWxvYWRfZmxhZworcmVsb2FkX2NtZHNfQ1hYPSRyZWxvYWRfY21kcworbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPQord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQorZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK29iamV4dF9DWFg9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW10pIHsgcmV0dXJuKDApOyB9JworCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorCisgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKKworCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgbHRfc2F2ZV9MRD0kTEQKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBHQ0M9JEdYWAorICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCisgIGZpCisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECisgIGZpCisgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgIENDPSR7Q1hYLSJjKysifQorICBDRkxBR1M9JENYWEZMQUdTCisgIGNvbXBpbGVyPSRDQworICBjb21waWxlcl9DWFg9JENDCisgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCisKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQorICAgIGZpCisKKyAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZworICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworZWxzZQorICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0kbHRfY3ZfcGF0aF9MRAoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKKworCisKKworCisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKworICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgICAgIHdsYXJjPSckd2wnCisKKyAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8CisJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgZWxzZQorICAgICAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgICAgd2xhcmM9CisKKyAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGZpCisKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAgIGxkX3NobGlic19DWFg9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbNC05XSopCisgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIDs7CisgICAgICAgICAgZXNhYworCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICAgIGZpCisKKyAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJworICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKKyAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgICAgIGZpbGVfbGlzdF9zcGVjX0NYWD0nJHdsLWYsJworCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKyAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKyAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSRzaGFyZWRfZmxhZycgJHdsLUcnCisJICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCisgICAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworICAgICAgICAgIGVsc2UKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtYmV4cGFsbCcKKyAgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworCSMgZXhwb3J0LgorICAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKyAgICAgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSctYmVyb2snCisgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgIyBleGVjdXRhYmxlLgorICAgICAgICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9L3Vzci9saWI6L2xpYgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCitmaQorCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bCckbm9fZW50cnlfZmxhZycgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0IC1uICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR3bCRhbGxvd191bmRlZmluZWRfZmxhZyI7IGVsc2UgOjsgZmlgICR3bCckZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMnICckc2hhcmVkX2ZsYWcKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0iLXogbm9kZWZzIgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPS91c3IvbGliOi9saWIKKyAgZmkKKworZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAorZmkKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWJlcm5vdG9rJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtYmVyb2snCisJICAgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJZWxzZQorCSAgbGRfc2hsaWJzX0NYWD1ubworCWZpCisJOzsKKworICAgICAgY2hvcnVzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICAqKQorCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICBsZF9zaGxpYnNfQ1hYPW5vCisJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisJLGNsKiB8IG5vLGNsKikKKwkgICMgTmF0aXZlIE1TVkMKKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nICcKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKwkgIGZpbGVfbGlzdF9zcGVjX0NYWD0nQCcKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJICBsaWJleHQ9bGliCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwkgIHNocmV4dF9jbWRzPS5kbGwKKwkgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+bGlua25hbWVzPScKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCisgICAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7CisgICAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisgICAgICAgICAgICBsaW5rbmFtZXM9JworCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsIENYWCk9J3RydWUnCisJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgorCSAgb2xkX3Bvc3RpbnN0YWxsX2NtZHNfQ1hYPSdjaG1vZCA2NDQgJG9sZGxpYicKKwkgIHBvc3RsaW5rX2NtZHNfQ1hYPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorICAgICAgICAgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorICAgICAgICAgICAgICAqLmV4ZXwqLkVYRSkgOzsKKyAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBsdF9vdXRwdXRmaWxlPSRsdF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0kbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjfgorICAgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKyAgICAgICAgICAgIGlmIHRlc3QgOiAhPSAiJE1BTklGRVNUX1RPT0wiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorICAgICAgICAgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworICAgICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKyAgICAgICAgICAgIGZpJworCSAgOzsKKwkqKQorCSAgIyBnKysKKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubworCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisKKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKKwkgICAgIyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kIEVYUE9SVFMuLi4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmICAgdGVzdCBERUYgPSAiYCRTRUQgLW4gICAgIC1lICdcJydzL15bCSBdKi8vJ1wnJyAgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnICAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnXCcnICAgICAtZSBxICAgICAkZXhwb3J0X3N5bWJvbHNgIiA7IHRoZW4KKyAgICAgICAgICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICAgIGZpfgorICAgICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgIGVsc2UKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgZmkKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KKyAgaGFyZGNvZGVfYXV0b21hdGljX0NYWD15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKKyAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHdsLWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisKKyAgZWxzZQorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJworICBmaQorICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZAorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCp8bmFnZm9yKikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgeWVzID0gIiRfbHRfZGFyX2Nhbl9zaGFyZWQiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2RzeW11dGlsIgorICAgIG1vZHVsZV9jbWRzX0NYWD0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kc3ltdXRpbCIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgLWUgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kc3ltdXRpbCIKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCRsaWItbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYi1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmckX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgZmkKKworICBlbHNlCisgIGxkX3NobGlic19DWFg9bm8KKyAgZmkKKworCTs7CisKKyAgICAgIGRndXgqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGVjKysqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZDIuKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZQorCSMgc3dpdGNoIHRvIEVMRgorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QtZWxmKikKKyAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKKyAgICAgICAgIyBjb252ZW50aW9ucworICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcworICAgICAgICA7OworCisgICAgICBoYWlrdSopCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhwdXg5KikKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bCtiICR3bCRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgYUNDKikKKyAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wrYiAkd2wkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisgICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKwkgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgICAgICAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgaWE2NCopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgICopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICBpYTY0KikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgZXNhYworCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaW50ZXJpeFszLTldKikKKwloYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCisJIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKwkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisJIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKwkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgIGVsc2UKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorICAgICAgICBpbmhlcml0X3JwYXRoX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIGFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqICkKKwkgICAgIyBJbnRlbCBDKysKKwkgICAgd2l0aF9nbnVfbGQ9eWVzCisJICAgICMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCisJICAgICMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisJICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSAgICAgICoiVmVyc2lvbiA3LiIqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorCSAgICAgICAgdG1wX2lkeW49CisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKwkJZXNhYworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICBlc2FjCisJICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFsxLTVdLiogfCAqcGdjcHBcIFsxLTVdLiopCisJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorICAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorICAgICAgICAgICAgICAgICRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorICAgICAgICAgICAgICAgICRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICBlc2FjCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC0tcnBhdGggJHdsJGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICAkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICAgZmkKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QqIHwgYml0cmlnKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCI7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgbGRfc2hsaWJzX0NYWD1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJCTs7CisJICAgICAgKikKKwkgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisgICAgICAgICAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAkd2wtaW5wdXQgJHdsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGlifgorICAgICAgICAgICAgICAgICAgJFJNICRsaWIuZXhwJworCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJworCQk7OworCSAgICBlc2FjCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdYWCwkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgIG9zZjMqKQorCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1tc3ltICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBwc29zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgc3Vub3M0KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBzb2xhcmlzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKwkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLU0gJHdsJGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCSAgICAgICopCisJCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuCisJICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wteiAke3dsfWRlZnMnCisJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgJy1HJyBOT1QgJy1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAgICAgJENDIC1HIC1ub3N0ZGxpYiAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZmkKKworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCQkqKQorCQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyR3bC16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSckd2wteix0ZXh0JworCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHdsLXosbm9kZWZzJworCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1SLCRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCisJbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorICAgICAgICAgICAgICAnIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIKKwkgICAgcmVsb2FkX2NtZHNfQ1hYPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgorICAgICAgICAgICAgICAnIiRyZWxvYWRfY21kc19DWFgiCisJICAgIDs7CisJICAqKQorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQorICAgIHRlc3Qgbm8gPSAiJGxkX3NobGlic19DWFgiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworICAgIEdDQ19DWFg9JEdYWAorICAgIExEX0NYWD0kTEQKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgICMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitwcmVkZXBfb2JqZWN0c19DWFg9Citwb3N0ZGVwX29iamVjdHNfQ1hYPQorcHJlZGVwc19DWFg9Citwb3N0ZGVwc19DWFg9Citjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPQorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorCisKK19sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OworKlwgLWZ1c2UtbGlua2VyLXBsdWdpbipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXVzZS1saW5rZXItcGx1Z2luIiA7OworZXNhYworCitpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAkcHJldiRwIGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCB4LUwgPSAiJHAiIHx8CisgICAgICAgICAgdGVzdCB4LVIgPSAiJHAiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKyAgICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICBmaQorICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgIGVzYWMKKyAgICAgICBpZiB0ZXN0IG5vID0gIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIjsgdGhlbgorCSBjYXNlICRwcmV2IGluCisJIC1MIHwgLVIpCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiOyB0aGVuCisJICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSRwcmV2JHAKKwkgICBlbHNlCisJICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9ICRwcmV2JHAiCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwc19DWFg9JHByZXYkcAorCSBlbHNlCisJICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHByZXYkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIHByZXY9CisgICAgICAgOzsKKworICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KKwkgaWYgdGVzdCAteiAiJHByZWRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9JHAKKwkgZWxzZQorCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHByZWRlcF9vYmplY3RzX0NYWCAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRwb3N0ZGVwX29iamVjdHNfQ1hYIjsgdGhlbgorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9JHAKKwkgZWxzZQorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CitDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCitjYXNlICRob3N0X29zIGluCitpbnRlcml4WzMtOV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIHByZWRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcHNfQ1hYPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCI7IHRoZW4KKyAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCitzb2xhcmlzKikKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgQ0MqIHwgc3VuQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIGlmIHRlc3QgeWVzICE9ICIkc29sYXJpc191c2Vfc3RscG9ydDQiOyB0aGVuCisgICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKKworCitjYXNlICIgJHBvc3RkZXBzX0NYWCAiIGluCisqIiAtbGMgIiopIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubyA7OworZXNhYworIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9CitpZiB0ZXN0IC1uICIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IjsgdGhlbgorIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9YGVjaG8gIiAke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IiB8ICRTRUQgLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9CitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CisKKworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZuby1jb21tb24nCisgICAgICA7OworICAgICpkamdwcCopCisgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorICAgICAgOzsKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqcW54KiB8ICpudG8qKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeFs0LTldKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCWVsc2UKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgQ1hYKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisJOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHdsLWEgJHt3bH1hcmNoaXZlJworCSAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICBmaQorCSAgICA7OworCSAgYUNDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHdsLWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKwkgICAgOzsKKwkgIGljcGMqICkKKwkgICAgIyBJbnRlbCBDKyssIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorCSAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKwkgICAgOzsKKwkgIHBnQ0MqIHwgcGdjcHAqKQorCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZnBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgeGxjKiB8IHhsQyogfCBiZ3hsW2NDXSogfCBtcGl4bFtjQ10qKQorCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKikKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgOzsKK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50CisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIjsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KK2ZpCisKK2ZpCisKKworCisKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWFwiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD1ubworICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCI7IHRoZW4KKyAgICA6CitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorZmkKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNjsgfQorCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNjsgfQorCisKKworCitoYXJkX2xpbmtzPW5vdHRlc3RlZAoraWYgdGVzdCBubyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiAmJiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKworICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4WzQtOV0qKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKyAgICAjIEFsc28sIEFJWCBubSB0cmVhdHMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZAorICAgICMgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisgICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0kbHRkbGxfY21kcworICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBjbCopCisgICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisgICAgICA7OworICAgICopCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgZXhjbHVkZV9leHBzeW1zX0NYWD0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgIDs7CisgIGVzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9Cit0ZXN0IG5vID0gIiRsZF9zaGxpYnNfQ1hYIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3dpdGhfZ251X2xkX0NYWD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKworICBpZiB0ZXN0IHllcyx5ZXMgPSAiJEdDQywkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHNfQ1hYIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKwkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJICB0aGVuCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworCSAgZWxzZQorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICBmaQorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY2OyB9CisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWAorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQorCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0uc28KK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgJyMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiAnLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJENDIC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW5ub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQnCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0uZGxsCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKworICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kTElCCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMjNdLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIuKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGlmIHRlc3QgMzIgPSAiJEhQVVhfSUE2NF9NT0RFIjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbMy05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiAvdXNyL2xvY2FsL2xpYiRsaWJzdWZmIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYiCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworbGludXgqYW5kcm9pZCopCisgIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgZmluaXNoX2NtZHM9CisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCisgICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bF9DWFhcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWFwiIgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorCitmaQorCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKiB8IGJpdHJpZyopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCisgICAgbmVlZF92ZXJzaW9uPW5vCisgIGVsc2UKKyAgICBuZWVkX3ZlcnNpb249eWVzCisgIGZpCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0uZGxsCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQgJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CiskYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3Rlc3Qgbm8gPSAiJGR5bmFtaWNfbGlua2VyIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKK2ZpCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gIiA+JjY7IH0KK2hhcmRjb2RlX2FjdGlvbl9DWFg9CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXJfQ1hYIiB8fAorICAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgQ1hYKSIgJiYKKyAgICAgdGVzdCBubyAhPSAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIjsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uX0NYWD11bnN1cHBvcnRlZAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNjsgfQorCitpZiB0ZXN0IHJlbGluayA9ICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfHwKKyAgIHRlc3QgeWVzID0gIiRpbmhlcml0X3JwYXRoX0NYWCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfHwKKyAgICAgdGVzdCBubyA9ICIkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQogCiAKIApAQCAtMTI4MTEsNyArMTY2NzQsNyBAQAogCiAKICAgICAgY3B1dHlwZT1gKCgoZ3JlcCBjcHUgL3Byb2MvY3B1aW5mbyB8IGN1dCAtZDogLWYyKSA7ICgkUFJURElBRyAtdiB8Z3JlcCAtaSBzcGFyYykgOyBncmVwIC1pIGNwdSAvdmFyL3J1bi9kbWVzZy5ib290ICkgfCBoZWFkIC1uIDEpIDI+IC9kZXYvbnVsbGAKLSAgICAgY3B1dHlwZT1gZWNobyAiJGNwdXR5cGUiIHwgdHIgLWQgJyAtJyB8dHIgJGFzX2NyX0xFVFRFUlMgJGFzX2NyX2xldHRlcnNgCisgICAgIGNwdXR5cGU9YGVjaG8gIiRjcHV0eXBlIiB8IHRyIC1kICcgLScgfCBzZWQgJ3MvU1BBUkNJSWkvU1BBUkNJSS8nIHwgdHIgJGFzX2NyX0xFVFRFUlMgJGFzX2NyX2xldHRlcnNgCiAgICAgIGNhc2UgJGNwdXR5cGUgaW4KICAgICAgICAgICp1bHRyYXNwYXJjaXYqKSBheF9nY2NfYXJjaD0idWx0cmFzcGFyYzQgdWx0cmFzcGFyYzMgdWx0cmFzcGFyYyB2OSIgOzsKICAgICAgICAgICp1bHRyYXNwYXJjaWlpKikgYXhfZ2NjX2FyY2g9InVsdHJhc3BhcmMzIHVsdHJhc3BhcmMgdjkiIDs7CkBAIC0xMzA4MiwxMyArMTY5NDUsMTMgQEAKIAogaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCiAgIENGTEFHUz0iJENGTEFHUyAtZmV4Y2VwdGlvbnMiCi0gIHRvdWNoIGxvY2FsLmV4cAotZWxzZQotICBjYXQgPiBsb2NhbC5leHAgPDxFT0YKLXNldCBDQ19GT1JfVEFSR0VUICIkQ0MiCi1FT0YKIGZpCiAKK2NhdCA+IGxvY2FsLmV4cCA8PEVPRgorc2V0IENDX0ZPUl9UQVJHRVQgIiRDQyIKK3NldCBDWFhfRk9SX1RBUkdFVCAiJENYWCIKK0VPRgorCiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuLi4gIiA+JjY7IH0KQEAgLTEzMjg4LDYgKzE3MTUxLDcgQEAKIAogCiBUQVJHRVRESVI9InVua25vd24iCitIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQ9MAogY2FzZSAiJGhvc3QiIGluCiAgIGFhcmNoNjQqLSotKikKIAlUQVJHRVQ9QUFSQ0g2NDsgVEFSR0VURElSPWFhcmNoNjQKQEAgLTEzMjk5LDYgKzE3MTYzLDEwIEBACiAJSEFWRV9MT05HX0RPVUJMRT0nZGVmaW5lZChfX0xPTkdfRE9VQkxFXzEyOF9fKScKIAk7OwogCisgIGFyYyotKi0qKQorCVRBUkdFVD1BUkM7IFRBUkdFVERJUj1hcmMKKwk7OworCiAgIGFybSotKi0qKQogCVRBUkdFVD1BUk07IFRBUkdFVERJUj1hcm0KIAk7OwpAQCAtMTM0MTcsNiArMTcyODUsMTAgQEAKIAlUQVJHRVQ9TTY4SzsgVEFSR0VURElSPW02OGsKIAk7OwogCisgIG04OGstKi0qKQorCVRBUkdFVD1NODhLOyBUQVJHRVRESVI9bTg4aworCTs7CisKICAgbWljcm9ibGF6ZSotKi0qKQogCVRBUkdFVD1NSUNST0JMQVpFOyBUQVJHRVRESVI9bWljcm9ibGF6ZQogCTs7CkBAIC0xMzQzMiwxNCArMTczMDQsMTkgQEAKICAgbWlwcy1zZ2ktaXJpeDUuKiB8IG1pcHMtc2dpLWlyaXg2LiogfCBtaXBzKi0qLXJ0ZW1zKikKIAlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwogCTs7Ci0gIG1pcHMqLSotbGludXgqIHwgbWlwcyotKi1vcGVuYnNkKikKKyAgbWlwcyotKmxpbnV4KiB8IG1pcHMqLSotb3BlbmJzZCopCiAJIyBTdXBwb3J0IDEyOC1iaXQgbG9uZyBkb3VibGUgZm9yIE5ld0FCSS4KIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKLQlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcworCVRBUkdFVD1NSVBTX0xJTlVYOyBUQVJHRVRESVI9bWlwcworCTs7CisKKyAgbmlvczIqLWxpbnV4KikKKwlUQVJHRVQ9TklPUzI7IFRBUkdFVERJUj1uaW9zMgogCTs7CiAKICAgcG93ZXJwYyotKi1saW51eCogfCBwb3dlcnBjLSotc3lzdiopCiAJVEFSR0VUPVBPV0VSUEM7IFRBUkdFVERJUj1wb3dlcnBjCisJSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UPTEKIAk7OwogICBwb3dlcnBjLSotYW1pZ2FvcyopCiAJVEFSR0VUPVBPV0VSUEM7IFRBUkdFVERJUj1wb3dlcnBjCkBAIC0xMzQ1NSw2ICsxNzMzMiw3IEBACiAJOzsKICAgcG93ZXJwYy0qLWZyZWVic2QqIHwgcG93ZXJwYy0qLW9wZW5ic2QqKQogCVRBUkdFVD1QT1dFUlBDX0ZSRUVCU0Q7IFRBUkdFVERJUj1wb3dlcnBjCisJSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UPTEKIAk7OwogICBwb3dlcnBjNjQtKi1mcmVlYnNkKikKIAlUQVJHRVQ9UE9XRVJQQzsgVEFSR0VURElSPXBvd2VycGMKQEAgLTEzNDgyLDYgKzE3MzYwLDEwIEBACiAgICAgICAgIFRBUkdFVD1USUxFOyBUQVJHRVRESVI9dGlsZQogICAgICAgICA7OwogCisgIHZheC0qLSopCisJVEFSR0VUPVZBWDsgVEFSR0VURElSPXZheAorCTs7CisKICAgeHRlbnNhKi0qKQogCVRBUkdFVD1YVEVOU0E7IFRBUkdFVERJUj14dGVuc2EKIAk7OwpAQCAtMTM1NTksNiArMTc0NDEsMjIgQEAKICAgWDg2X0RBUldJTl9GQUxTRT0KIGZpCiAKKyBpZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU4gJiYgdGVzdCAkYWNfY3Zfc2l6ZW9mX3NpemVfdCA9IDQ7IHRoZW4KKyAgWDg2X0RBUldJTjMyX1RSVUU9CisgIFg4Nl9EQVJXSU4zMl9GQUxTRT0nIycKK2Vsc2UKKyAgWDg2X0RBUldJTjMyX1RSVUU9JyMnCisgIFg4Nl9EQVJXSU4zMl9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU4gJiYgdGVzdCAkYWNfY3Zfc2l6ZW9mX3NpemVfdCA9IDg7IHRoZW4KKyAgWDg2X0RBUldJTjY0X1RSVUU9CisgIFg4Nl9EQVJXSU42NF9GQUxTRT0nIycKK2Vsc2UKKyAgWDg2X0RBUldJTjY0X1RSVUU9JyMnCisgIFg4Nl9EQVJXSU42NF9GQUxTRT0KK2ZpCisKICBpZiB0ZXN0IHgkVEFSR0VUID0geEFMUEhBOyB0aGVuCiAgIEFMUEhBX1RSVUU9CiAgIEFMUEhBX0ZBTFNFPScjJwpAQCAtMTM1OTEsNiArMTc0ODksMTQgQEAKICAgTTY4S19GQUxTRT0KIGZpCiAKKyBpZiB0ZXN0IHgkVEFSR0VUID0geE04OEs7IHRoZW4KKyAgTTg4S19UUlVFPQorICBNODhLX0ZBTFNFPScjJworZWxzZQorICBNODhLX1RSVUU9JyMnCisgIE04OEtfRkFMU0U9CitmaQorCiAgaWYgdGVzdCB4JFRBUkdFVCA9IHhNSUNST0JMQVpFOyB0aGVuCiAgIE1JQ1JPQkxBWkVfVFJVRT0KICAgTUlDUk9CTEFaRV9GQUxTRT0nIycKQEAgLTEzNjE1LDYgKzE3NTIxLDE0IEBACiAgIE1PWElFX0ZBTFNFPQogZmkKIAorIGlmIHRlc3QgeCRUQVJHRVQgPSB4TklPUzI7IHRoZW4KKyAgTklPUzJfVFJVRT0KKyAgTklPUzJfRkFMU0U9JyMnCitlbHNlCisgIE5JT1MyX1RSVUU9JyMnCisgIE5JT1MyX0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQzsgdGhlbgogICBQT1dFUlBDX1RSVUU9CiAgIFBPV0VSUENfRkFMU0U9JyMnCkBAIC0xMzY1NSw2ICsxNzU2OSwxNCBAQAogICBBQVJDSDY0X0ZBTFNFPQogZmkKIAorIGlmIHRlc3QgeCRUQVJHRVQgPSB4QVJDOyB0aGVuCisgIEFSQ19UUlVFPQorICBBUkNfRkFMU0U9JyMnCitlbHNlCisgIEFSQ19UUlVFPScjJworICBBUkNfRkFMU0U9CitmaQorCiAgaWYgdGVzdCB4JFRBUkdFVCA9IHhBUk07IHRoZW4KICAgQVJNX1RSVUU9CiAgIEFSTV9GQUxTRT0nIycKQEAgLTEzNzUxLDYgKzE3NjczLDE0IEBACiAgIFRJTEVfRkFMU0U9CiBmaQogCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhWQVg7IHRoZW4KKyAgVkFYX1RSVUU9CisgIFZBWF9GQUxTRT0nIycKK2Vsc2UKKyAgVkFYX1RSVUU9JyMnCisgIFZBWF9GQUxTRT0KK2ZpCisKICBpZiB0ZXN0IHgkVEFSR0VUID0geFhURU5TQTsgdGhlbgogICBYVEVOU0FfVFJVRT0KICAgWFRFTlNBX0ZBTFNFPScjJwpAQCAtMTQxNTEsMTcgKzE4MDgxLDI1IEBACiAjIEFsc28gQUNfU1VCU1QgdGhpcyB2YXJpYWJsZSBmb3IgZmZpLmguCiBpZiB0ZXN0IC16ICIkSEFWRV9MT05HX0RPVUJMRSI7IHRoZW4KICAgSEFWRV9MT05HX0RPVUJMRT0wCi0gIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9kb3VibGUgIT0gJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZTsgdGhlbgotICAgIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSAhPSAwOyB0aGVuCisgIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSAhPSAwOyB0aGVuCisgICAgaWYgdGVzdCAkSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UICE9IDA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UIDEiID4+Y29uZmRlZnMuaAorCiAgICAgICBIQVZFX0xPTkdfRE9VQkxFPTEKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfZG91YmxlICE9ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU7IHRoZW4KKyAgICAgICAgSEFWRV9MT05HX0RPVUJMRT0xCiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCiAKKyAgICAgIGZpCiAgICAgZmkKICAgZmkKIGZpCiAKIAorCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gIiA+JjY7IH0KIGlmICR7YWNfY3ZfY19iaWdlbmRpYW4rOn0gZmFsc2U7IHRoZW4gOgpAQCAtMTQ2MDIsOCArMTg1NDAsNyBAQAogZmkKIAogCi1pZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU42NDsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF8gcHJlZml4IGluIGNvbXBpbGVkIHN5bWJvbHMiID4mNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgXyBwcmVmaXggaW4gY29tcGlsZWQgc3ltYm9scyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgXyBwcmVmaXggaW4gY29tcGlsZWQgc3ltYm9scy4uLiAiID4mNjsgfQogaWYgJHtsdF9jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgpAQCAtMTQ2NTAsMTEgKzE4NTg3LDEwIEBACiAgIHN5c19zeW1ib2xfdW5kZXJzY29yZT0kbHRfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlCiAKIAotICAgIGlmIHRlc3QgIngkc3lzX3N5bWJvbF91bmRlcnNjb3JlIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgIngkc3lzX3N5bWJvbF91bmRlcnNjb3JlIiA9IHh5ZXM7IHRoZW4KIAogJGFzX2VjaG8gIiNkZWZpbmUgU1lNQk9MX1VOREVSU0NPUkUgMSIgPj5jb25mZGVmcy5oCiAKLSAgICBmaQogZmkKIAogRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRT0wCkBAIC0xNDY4MiwxNiArMTg2MTgsMzIgQEAKIAogCiBpZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl82NDsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYXNzZW1ibGVyIHN1cHBvcnRzIHVud2luZCBzZWN0aW9uIHR5cGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIHN1cHBvcnRzIHVud2luZCBzZWN0aW9uIHR5cGUuLi4gIiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvb2xjaGFpbiBzdXBwb3J0cyB1bndpbmQgc2VjdGlvbiB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRvb2xjaGFpbiBzdXBwb3J0cyB1bndpbmQgc2VjdGlvbiB0eXBlLi4uICIgPiY2OyB9CiBpZiAke2xpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKLQlsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGU9eWVzCi0JZWNobyAnLnNlY3Rpb24gLmVoX2ZyYW1lLCJhIixAdW53aW5kJyA+IGNvbmZ0ZXN0LnMKLQlpZiAkQ0MgJENGTEFHUyAtYyBjb25mdGVzdC5zIDI+JjEgfCBncmVwIC1pIHdhcm5pbmcgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlPW5vCisgICAgICAgIGNhdCAgPiBjb25mdGVzdDEucyA8PCBFT0YKKy50ZXh0CisuZ2xvYmwgZm9vCitmb286CitqbXAgYmFyCisuc2VjdGlvbiAuZWhfZnJhbWUsImEiLEB1bndpbmQKK2JhcjoKK0VPRgorCisgICAgICAgIGNhdCA+IGNvbmZ0ZXN0Mi5jICA8PCBFT0YKK2V4dGVybiB2b2lkIGZvbygpOworaW50IG1haW4oKXtmb28oKTt9CitFT0YKKworCWxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZT1ubworCSMgd2UgZW5zdXJlIHRoYXQgd2UgY2FuIGNvbXBpbGUgX2FuZF8gbGluayBhbiBhc3NlbWJseSBmaWxlIGNvbnRhaW5pbmcgYW4gQHVud2luZCBzZWN0aW9uCisJIyBzaW5jZSB0aGUgY29tcGlsZXIgY2FuIHN1cHBvcnQgaXQgYW5kIG5vdCB0aGUgbGlua2VyIChpZSBvbGQgYmludXRpbHMpCisJaWYgJENDIC1XYSwtLWZhdGFsLXdhcm5pbmdzICRDRkxBR1MgLWMgY29uZnRlc3QxLnMgPiAvZGV2L251bGwgMj4mMSAmJiBcCisgICAgICAgICAgICRDQyBjb25mdGVzdDIuYyBjb25mdGVzdDEubyA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICBsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGU9eWVzCiAJZmkKIAogZmkKQEAgLTE0ODQ0LDcgKzE4Nzk2LDcgQEAKICAgICB0b29sZXhlY2Rpcj0nJChsaWJkaXIpL2djYy1saWIvJCh0YXJnZXRfYWxpYXMpJwogICAgIHRvb2xleGVjbGliZGlyPSckKGxpYmRpciknCiAgIGZpCi0gIG11bHRpX29zX2RpcmVjdG9yeT1gJENDIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCisgIG11bHRpX29zX2RpcmVjdG9yeT1gJENDICRDRkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKICAgY2FzZSAkbXVsdGlfb3NfZGlyZWN0b3J5IGluCiAgICAgLikgOzsgIyBBdm9pZCB0cmFpbGluZyAvLgogICAgIC4uLyopIHRvb2xleGVjbGliZGlyPSR0b29sZXhlY2xpYmRpci8kbXVsdGlfb3NfZGlyZWN0b3J5IDs7CkBAIC0xNTAwNSw2ICsxODk1NywxMCBAQAogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CiBmaQoraWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQogaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFfSI7IHRoZW4KICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ0FTXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CkBAIC0xNTA0OSw2ICsxOTAwNSwxNCBAQAogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJYODZfREFSV0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CiBmaQoraWYgdGVzdCAteiAiJHtYODZfREFSV0lOMzJfVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2X0RBUldJTjMyX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiWDg2X0RBUldJTjMyXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtYODZfREFSV0lONjRfVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2X0RBUldJTjY0X0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiWDg2X0RBUldJTjY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQogaWYgdGVzdCAteiAiJHtBTFBIQV9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTFBIQV9GQUxTRX0iOyB0aGVuCiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFMUEhBXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CkBAIC0xNTA2NSw2ICsxOTAyOSwxMCBAQAogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNNjhLXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CiBmaQoraWYgdGVzdCAteiAiJHtNODhLX1RSVUV9IiAmJiB0ZXN0IC16ICIke004OEtfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNODhLXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQogaWYgdGVzdCAteiAiJHtNSUNST0JMQVpFX1RSVUV9IiAmJiB0ZXN0IC16ICIke01JQ1JPQkxBWkVfRkFMU0V9IjsgdGhlbgogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNSUNST0JMQVpFXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CkBAIC0xNTA3Nyw2ICsxOTA0NSwxMCBAQAogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNT1hJRVwiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQogZmkKK2lmIHRlc3QgLXogIiR7TklPUzJfVFJVRX0iICYmIHRlc3QgLXogIiR7TklPUzJfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJOSU9TMlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKIGlmIHRlc3QgLXogIiR7UE9XRVJQQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtQT1dFUlBDX0ZBTFNFfSI7IHRoZW4KICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiUE9XRVJQQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQpAQCAtMTUwOTcsNiArMTkwNjksMTAgQEAKICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQUFSQ0g2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQogZmkKK2lmIHRlc3QgLXogIiR7QVJDX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FSQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFSQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKIGlmIHRlc3QgLXogIiR7QVJNX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FSTV9GQUxTRX0iOyB0aGVuCiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFSTVwiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQpAQCAtMTUxNDUsNiArMTkxMjEsMTAgQEAKICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVElMRVwiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQogZmkKK2lmIHRlc3QgLXogIiR7VkFYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1ZBWF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlZBWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKIGlmIHRlc3QgLXogIiR7WFRFTlNBX1RSVUV9IiAmJiB0ZXN0IC16ICIke1hURU5TQV9GQUxTRX0iOyB0aGVuCiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlhURU5TQVwiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQpAQCAtMTU1NTksNyArMTk1MzksNyBAQAogIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgogYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbGliZmZpICRhc19tZSAzLjAuMTMsIHdoaWNoIHdhcworVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBsaWJmZmkgJGFzX21lIDMuMSwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCkBAIC0xNTYyOSw3ICsxOTYwOSw3IEBACiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGFjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotbGliZmZpIGNvbmZpZy5zdGF0dXMgMy4wLjEzCitsaWJmZmkgY29uZmlnLnN0YXR1cyAzLjEKIGNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKICAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCiAKQEAgLTE1ODIxLDggKzE5ODAxLDEwIEBACiBHQ0M9J2AkRUNITyAiJEdDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9ubV9pbnRlcmZhY2U9J2AkRUNITyAiJGx0X2N2X25tX2ludGVyZmFjZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCkBAIC0xNTg5Niw2ICsxOTg3OCw2MCBAQAogZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBvbGRfc3RyaXBsaWI9J2AkRUNITyAiJG9sZF9zdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBzdHJpcGxpYj0nYCRFQ0hPICIkc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwX29iamVjdHM9J2AkRUNITyAiJHByZWRlcF9vYmplY3RzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBfb2JqZWN0cz0nYCRFQ0hPICIkcG9zdGRlcF9vYmplY3RzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcHM9J2AkRUNITyAiJHByZWRlcHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcHM9J2AkRUNITyAiJHBvc3RkZXBzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEX0NYWD0nYCRFQ0hPICIkTERfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9mbGFnX0NYWD0nYCRFQ0hPICIkcmVsb2FkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzX0NYWD0nYCRFQ0hPICIkcmVsb2FkX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHQ0NfQ1hYPSdgJEVDSE8gIiRHQ0NfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfY21kc19DWFg9J2AkRUNITyAiJG1vZHVsZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIiRtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkX0NYWD0nYCRFQ0hPICIkd2l0aF9nbnVfbGRfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0nYCRFQ0hPICIkbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0xfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9taW51c19MX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYXV0b21hdGljX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoX0NYWD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2Fsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hY3Rpb25fQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwX29iamVjdHNfQ1hYPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcF9vYmplY3RzX0NYWD0nYCRFQ0hPICIkcG9zdGRlcF9vYmplY3RzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzX0NYWD0nYCRFQ0hPICIkcHJlZGVwc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcHNfQ1hYPSdgJEVDSE8gIiRwb3N0ZGVwc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiAKIExUQ0M9JyRMVENDJwogTFRDRkxBR1M9JyRMVENGTEFHUycKQEAgLTE1OTQwLDggKzE5OTc2LDEwIEBACiBjb21waWxlciBcCiBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCBcCiBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCiBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKK2x0X2N2X25tX2ludGVyZmFjZSBcCiBubV9maWxlX2xpc3Rfc3BlYyBcCiBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCiBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCkBAIC0xNTk3NCwxMCArMjAwMTIsNDEgQEAKIGluc3RhbGxfb3ZlcnJpZGVfbW9kZSBcCiBmaW5pc2hfZXZhbCBcCiBvbGRfc3RyaXBsaWIgXAotc3RyaXBsaWI7IGRvCitzdHJpcGxpYiBcCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgXAorcHJlZGVwX29iamVjdHMgXAorcG9zdGRlcF9vYmplY3RzIFwKK3ByZWRlcHMgXAorcG9zdGRlcHMgXAorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIFwKK0xEX0NYWCBcCityZWxvYWRfZmxhZ19DWFggXAorY29tcGlsZXJfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggXAorbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCBcCitjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYIFwKK3dpdGhfZ251X2xkX0NYWCBcCithbGxvd191bmRlZmluZWRfZmxhZ19DWFggXAorbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKK2V4Y2x1ZGVfZXhwc3ltc19DWFggXAoraW5jbHVkZV9leHBzeW1zX0NYWCBcCitmaWxlX2xpc3Rfc3BlY19DWFggXAorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCBcCitwcmVkZXBfb2JqZWN0c19DWFggXAorcG9zdGRlcF9vYmplY3RzX0NYWCBcCitwcmVkZXBzX0NYWCBcCitwb3N0ZGVwc19DWFggXAorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWDsgZG8KICAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KICAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCiAgICAgICA7OwogICAgICopCiAgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKQEAgLTE2MDA0LDEwICsyMDA3MywyMSBAQAogcG9zdHVuaW5zdGFsbF9jbWRzIFwKIGZpbmlzaF9jbWRzIFwKIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYzsgZG8KK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKK3JlbG9hZF9jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFggXAorYXJjaGl2ZV9jbWRzX0NYWCBcCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCittb2R1bGVfY21kc19DWFggXAorbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCitleHBvcnRfc3ltYm9sc19jbWRzX0NYWCBcCitwcmVsaW5rX2NtZHNfQ1hYIFwKK3Bvc3RsaW5rX2NtZHNfQ1hYOyBkbwogICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgogICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKICAgICAgIDs7CiAgICAgKikKICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgpAQCAtMTYwMTYsMjQgKzIwMDk2LDIzIEBACiBkb25lCiAKIGFjX2F1eF9kaXI9JyRhY19hdXhfZGlyJwoteHNpX3NoZWxsPSckeHNpX3NoZWxsJwotbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJwogCi0jIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCi1pZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCiAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZmkKIAogCiAgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCiAgICAgVkVSU0lPTj0nJFZFUlNJT04nCi0gICAgVElNRVNUQU1QPSckVElNRVNUQU1QJwogICAgIFJNPSckUk0nCiAgICAgb2ZpbGU9JyRvZmlsZScKIAogCiAKKworCiBUQVJHRVRESVI9IiRUQVJHRVRESVIiCiAKIF9BQ0VPRgpAQCAtMTY4MzEsNyArMjA5MTAsNyBAQAogICBmaQogIDs7CiAgICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCB7Ci0gICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgT2xkZXIgQXV0b2NvbmYgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcwogICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCiAgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgogICBjYXNlICRDT05GSUdfRklMRVMgaW4KQEAgLTE2ODgyLDcgKzIwOTYxLDcgQEAKICAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAogICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCiAgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCi0gICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgdGVzdCAteiAiJGFtX19pbmNsdWRlIiAmJiBjb250aW51ZQogICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCiAgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAogICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQpAQCAtMTY5MjUsMTMgKzIxMDA0LDEzIEBACiAgOzsKICAgICAibGlidG9vbCI6QykKIAotICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKICAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KICAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiAgICAgZmkKIAotICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICBjZmdmaWxlPSR7b2ZpbGV9VAogICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CiAgICAgJFJNICIkY2ZnZmlsZSIKIApAQCAtMTY5MzksNyArMjEwMTgsNyBAQAogIyEgJFNIRUxMCiAKICMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFKSAkVkVSU0lPTgogIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgogIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCiAjCkBAIC0xNjk3Myw3ICsyMTA1Miw3IEBACiAKIAogIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCi1hdmFpbGFibGVfdGFncz0iIgorYXZhaWxhYmxlX3RhZ3M9J0NYWCAnCiAKICMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCiAKQEAgLTE3MTEwLDE2ICsyMTE4OSwyMiBAQAogIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgogZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKIAorIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbnRvIGEgbGlzdCBvZiBzeW1ib2xzIHRvIG1hbnVhbGx5IHJlbG9jYXRlLgorZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydAorCiAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCiAKICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCiBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKIAorIyBUaGUgbmFtZSBsaXN0ZXIgaW50ZXJmYWNlLgorbm1faW50ZXJmYWNlPSRsdF9sdF9jdl9ubV9pbnRlcmZhY2UKKwogIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCiBubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKIAotIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCB3aGVyZSBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCiBsdF9zeXNyb290PSRsdF9zeXNyb290CiAKICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgpAQCAtMTczMDYsMTMgKzIxMzkxLDEzIEBACiAjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCiBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCiAKLSMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKICMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCiBoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdAogCi0jIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCiAjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwotIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwkc2hsaWJwYXRoX3ZhciBpZiB0aGUKICMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCiBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQogCkBAIC0xNzM2MCw2ICsyMTQ0NSwyMCBAQAogIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KIGhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCiAKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHMKK3Bvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzCitwcmVkZXBzPSRsdF9wcmVkZXBzCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHMKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGgKKwogIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCiAKIF9MVF9FT0YKQEAgLTE3MzcwLDcgKzIxNDY5LDcgQEAKICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQogIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCiAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi1pZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KK2lmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KICAgQ09MTEVDVF9OQU1FUz0KICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKIGZpCkBAIC0xNzM3OSw3ICsyMTQ3OCw3IEBACiAgIGVzYWMKIAogCi1sdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK2x0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKIAogCiAgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgpAQCAtMTczODksMTY5ICsyMTQ4OCwxNjMgQEAKICAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAogICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQogCi0gIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KLSAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKLWZ1bmNfZGlybmFtZSAoKVwKLXtcCi1cICAgIGNhc2UgJHsxfSBpblwKLVwgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKLVwgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAotXCAgICBlc2FjXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAotZnVuY19iYXNlbmFtZSAoKVwKLXtcCi1cICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAotZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKLXtcCi1cICAgIGNhc2UgJHsxfSBpblwKLVwgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKLVwgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAotXCAgICBlc2FjXAotXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAotZnVuY19zdHJpcG5hbWUgKClcCi17XAotXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAotXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAotXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKLVwgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCi1cICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCi1mdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAote1wKLVwgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAotXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAotZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCi17XAotXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKLVwgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKLWZ1bmNfbG8ybyAoKVwKLXtcCi1cICAgIGNhc2UgJHsxfSBpblwKLVwgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKLVwgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCi1cICAgIGVzYWNcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCi1mdW5jX3hmb3JtICgpXAote1wKLSAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKLWZ1bmNfYXJpdGggKClcCi17XAotICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKLWZ1bmNfbGVuICgpXAote1wKLSAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotZmkKLQotaWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgotICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKLWZ1bmNfYXBwZW5kICgpXAote1wKLSAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAotZnVuY19hcHBlbmRfcXVvdGVkICgpXAote1wKLVwgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCi1cICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JwotICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0gIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1lbHNlCi0gICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCi0gIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0gICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotZmkKLQotaWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9Ci1maQotCi0KICAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQogICBjaG1vZCAreCAiJG9maWxlIgogCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9DWFgKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnX0NYWAorcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAorCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfQ1hYCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWAorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfQ1hYCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19DWFgKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGRfQ1hYCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHNobGlicGF0aF92YXIgaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19DWFgKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19DWFgKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfQ1hYCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfQ1hYCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kc19DWFgKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kc19DWFgKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWNfQ1hYCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9DWFgKKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfQ1hYCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19DWFgKK3ByZWRlcHM9JGx0X3ByZWRlcHNfQ1hYCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHNfQ1hYCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWAorCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKK19MVF9FT0YKKwogIDs7CiAgICAgImluY2x1ZGUiOkMpIHRlc3QgLWQgaW5jbHVkZSB8fCBta2RpciBpbmNsdWRlIDs7CiAgICAgInNyYyI6QykKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmFjIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKaW5kZXggN2ZlNWZmNS4uNWM4ODg1ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKQEAgLTUsMTMgKzUsMTcgQEAKIAogQUNfUFJFUkVRKDIuNjgpCiAKLUFDX0lOSVQoW2xpYmZmaV0sIFszLjAuMTNdLCBbaHR0cDovL2dpdGh1Yi5jb20vYXRncmVlbi9saWJmZmkvaXNzdWVzXSkKK0FDX0lOSVQoW2xpYmZmaV0sIFszLjFdLCBbaHR0cDovL2dpdGh1Yi5jb20vYXRncmVlbi9saWJmZmkvaXNzdWVzXSkKIEFDX0NPTkZJR19IRUFERVJTKFtmZmljb25maWcuaF0pCiAKIEFDX0NBTk9OSUNBTF9TWVNURU0KIHRhcmdldF9hbGlhcz0ke3RhcmdldF9hbGlhcy0kaG9zdF9hbGlhc30KIAotLiAke3NyY2Rpcn0vY29uZmlndXJlLmhvc3QKK2Nhc2UgIiR7aG9zdH0iIGluCisgIGZydiotZWxmKQorICAgIExERkxBR1M9YGVjaG8gJExERkxBR1MgfCBzZWQgInMvXC1CW14gXSpsaWJnbG9zc1wvZnJ2XC8vLyJgXCAtQmBwd2RgLy4uL2xpYmdsb3NzL2Zydi8KKyAgICA7OworZXNhYwogCiBBWF9FTkFCTEVfQlVJTERESVIKIApAQCAtMjgsNiArMzIsNyBAQAogbTRfZGVmaW5lKFtfQUNfQVJHX1ZBUl9QUkVDSU9VU10sW10pCiBzYXZlX0NGTEFHUz0kQ0ZMQUdTCiBBQ19QUk9HX0NDCitBQ19QUk9HX0NYWAogQ0ZMQUdTPSRzYXZlX0NGTEFHUwogbTRfdW5kZWZpbmUoW19BQ19BUkdfVkFSX1BSRUNJT1VTXSkKIG00X3JlbmFtZV9mb3JjZShbcmVhbF9QUkVDSU9VU10sW19BQ19BUkdfVkFSX1BSRUNJT1VTXSkKQEAgLTUyLDEzICs1NywxMyBAQAogCiBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mZXhjZXB0aW9ucyIKLSAgdG91Y2ggbG9jYWwuZXhwCi1lbHNlCi0gIGNhdCA+IGxvY2FsLmV4cCA8PEVPRgotc2V0IENDX0ZPUl9UQVJHRVQgIiRDQyIKLUVPRgogZmkKIAorY2F0ID4gbG9jYWwuZXhwIDw8RU9GCitzZXQgQ0NfRk9SX1RBUkdFVCAiJENDIgorc2V0IENYWF9GT1JfVEFSR0VUICIkQ1hYIgorRU9GCisKIEFNX01BSU5UQUlORVJfTU9ERQogCiBBQ19DSEVDS19IRUFERVJTKHN5cy9tbWFuLmgpCkBAIC02OSw2ICs3NCw3IEBACiBBTV9DT05ESVRJT05BTChURVNUU1VCRElSLCB0ZXN0IC1kICRzcmNkaXIvdGVzdHN1aXRlKQogCiBUQVJHRVRESVI9InVua25vd24iCitIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQ9MAogY2FzZSAiJGhvc3QiIGluCiAgIGFhcmNoNjQqLSotKikKIAlUQVJHRVQ9QUFSQ0g2NDsgVEFSR0VURElSPWFhcmNoNjQKQEAgLTgwLDYgKzg2LDEwIEBACiAJSEFWRV9MT05HX0RPVUJMRT0nZGVmaW5lZChfX0xPTkdfRE9VQkxFXzEyOF9fKScKIAk7OwogCisgIGFyYyotKi0qKQorCVRBUkdFVD1BUkM7IFRBUkdFVERJUj1hcmMKKwk7OworCiAgIGFybSotKi0qKQogCVRBUkdFVD1BUk07IFRBUkdFVERJUj1hcm0KIAk7OwpAQCAtMTM3LDYgKzE0Nyw5IEBACiAJICBBTV9MVExERkxBR1M9Jy1uby11bmRlZmluZWQgLWJpbmRpciAiJChiaW5kaXIpIic7CiAJZmkKIAk7OworICBpKjg2LSotbnRvLXFueCopIAorICAgICAgICBUQVJHRVQ9WDg2OyBUQVJHRVRESVI9eDg2CisgICAgICAgIDs7CiAgIGk/ODYtKi1kYXJ3aW4qKQogCVRBUkdFVD1YODZfREFSV0lOOyBUQVJHRVRESVI9eDg2CiAJOzsKQEAgLTE0OSwxMCArMTYyLDYgQEAKIAlmaQkgIAogCTs7CiAKLSAgaSo4Ni0qLW50by1xbngqKSAKLSAgICAgICAgVEFSR0VUPVg4NjsgVEFSR0VURElSPXg4NgotICAgICAgICA7OwotCiAgIHg4Nl82NC0qLWRhcndpbiopCiAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKIAk7OwpAQCAtMTk4LDYgKzIwNywxMCBAQAogCVRBUkdFVD1NNjhLOyBUQVJHRVRESVI9bTY4awogCTs7CiAKKyAgbTg4ay0qLSopCisJVEFSR0VUPU04OEs7IFRBUkdFVERJUj1tODhrCisJOzsKKwogICBtaWNyb2JsYXplKi0qLSopCiAJVEFSR0VUPU1JQ1JPQkxBWkU7IFRBUkdFVERJUj1taWNyb2JsYXplCiAJOzsKQEAgLTIxMywxNCArMjI2LDE5IEBACiAgIG1pcHMtc2dpLWlyaXg1LiogfCBtaXBzLXNnaS1pcml4Ni4qIHwgbWlwcyotKi1ydGVtcyopCiAJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKIAk7OwotICBtaXBzKi0qLWxpbnV4KiB8IG1pcHMqLSotb3BlbmJzZCopCisgIG1pcHMqLSpsaW51eCogfCBtaXBzKi0qLW9wZW5ic2QqKQogCSMgU3VwcG9ydCAxMjgtYml0IGxvbmcgZG91YmxlIGZvciBOZXdBQkkuCiAJSEFWRV9MT05HX0RPVUJMRT0nZGVmaW5lZChfX21pcHM2NCknCi0JVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKwlUQVJHRVQ9TUlQU19MSU5VWDsgVEFSR0VURElSPW1pcHMKKwk7OworCisgIG5pb3MyKi1saW51eCopCisJVEFSR0VUPU5JT1MyOyBUQVJHRVRESVI9bmlvczIKIAk7OwogCiAgIHBvd2VycGMqLSotbGludXgqIHwgcG93ZXJwYy0qLXN5c3YqKQogCVRBUkdFVD1QT1dFUlBDOyBUQVJHRVRESVI9cG93ZXJwYworCUhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVD0xCiAJOzsKICAgcG93ZXJwYy0qLWFtaWdhb3MqKQogCVRBUkdFVD1QT1dFUlBDOyBUQVJHRVRESVI9cG93ZXJwYwpAQCAtMjM2LDYgKzI1NCw3IEBACiAJOzsKICAgcG93ZXJwYy0qLWZyZWVic2QqIHwgcG93ZXJwYy0qLW9wZW5ic2QqKQogCVRBUkdFVD1QT1dFUlBDX0ZSRUVCU0Q7IFRBUkdFVERJUj1wb3dlcnBjCisJSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UPTEKIAk7OwogICBwb3dlcnBjNjQtKi1mcmVlYnNkKikKIAlUQVJHRVQ9UE9XRVJQQzsgVEFSR0VURElSPXBvd2VycGMKQEAgLTI2Myw2ICsyODIsMTAgQEAKICAgICAgICAgVEFSR0VUPVRJTEU7IFRBUkdFVERJUj10aWxlCiAgICAgICAgIDs7CiAKKyAgdmF4LSotKikKKwlUQVJHRVQ9VkFYOyBUQVJHRVRESVI9dmF4CisJOzsKKwogICB4dGVuc2EqLSopCiAJVEFSR0VUPVhURU5TQTsgVEFSR0VURElSPXh0ZW5zYQogCTs7CkBAIC0yODQsMTggKzMwNywyMyBAQAogQU1fQ09ORElUSU9OQUwoWDg2X1dJTjMyLCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU4zMikKIEFNX0NPTkRJVElPTkFMKFg4Nl9XSU42NCwgdGVzdCB4JFRBUkdFVCA9IHhYODZfV0lONjQpCiBBTV9DT05ESVRJT05BTChYODZfREFSV0lOLCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU4pCitBTV9DT05ESVRJT05BTChYODZfREFSV0lOMzIsIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0RBUldJTiAmJiB0ZXN0ICRhY19jdl9zaXplb2Zfc2l6ZV90ID0gNCkKK0FNX0NPTkRJVElPTkFMKFg4Nl9EQVJXSU42NCwgdGVzdCB4JFRBUkdFVCA9IHhYODZfREFSV0lOICYmIHRlc3QgJGFjX2N2X3NpemVvZl9zaXplX3QgPSA4KQogQU1fQ09ORElUSU9OQUwoQUxQSEEsIHRlc3QgeCRUQVJHRVQgPSB4QUxQSEEpCiBBTV9DT05ESVRJT05BTChJQTY0LCB0ZXN0IHgkVEFSR0VUID0geElBNjQpCiBBTV9DT05ESVRJT05BTChNMzJSLCB0ZXN0IHgkVEFSR0VUID0geE0zMlIpCiBBTV9DT05ESVRJT05BTChNNjhLLCB0ZXN0IHgkVEFSR0VUID0geE02OEspCitBTV9DT05ESVRJT05BTChNODhLLCB0ZXN0IHgkVEFSR0VUID0geE04OEspCiBBTV9DT05ESVRJT05BTChNSUNST0JMQVpFLCB0ZXN0IHgkVEFSR0VUID0geE1JQ1JPQkxBWkUpCiBBTV9DT05ESVRJT05BTChNRVRBRywgdGVzdCB4JFRBUkdFVCA9IHhNRVRBRykKIEFNX0NPTkRJVElPTkFMKE1PWElFLCB0ZXN0IHgkVEFSR0VUID0geE1PWElFKQorQU1fQ09ORElUSU9OQUwoTklPUzIsIHRlc3QgeCRUQVJHRVQgPSB4TklPUzIpCiBBTV9DT05ESVRJT05BTChQT1dFUlBDLCB0ZXN0IHgkVEFSR0VUID0geFBPV0VSUEMpCiBBTV9DT05ESVRJT05BTChQT1dFUlBDX0FJWCwgdGVzdCB4JFRBUkdFVCA9IHhQT1dFUlBDX0FJWCkKIEFNX0NPTkRJVElPTkFMKFBPV0VSUENfREFSV0lOLCB0ZXN0IHgkVEFSR0VUID0geFBPV0VSUENfREFSV0lOKQogQU1fQ09ORElUSU9OQUwoUE9XRVJQQ19GUkVFQlNELCB0ZXN0IHgkVEFSR0VUID0geFBPV0VSUENfRlJFRUJTRCkKIEFNX0NPTkRJVElPTkFMKEFBUkNINjQsIHRlc3QgeCRUQVJHRVQgPSB4QUFSQ0g2NCkKK0FNX0NPTkRJVElPTkFMKEFSQywgdGVzdCB4JFRBUkdFVCA9IHhBUkMpCiBBTV9DT05ESVRJT05BTChBUk0sIHRlc3QgeCRUQVJHRVQgPSB4QVJNKQogQU1fQ09ORElUSU9OQUwoQVZSMzIsIHRlc3QgeCRUQVJHRVQgPSB4QVZSMzIpCiBBTV9DT05ESVRJT05BTChMSUJGRklfQ1JJUywgdGVzdCB4JFRBUkdFVCA9IHhMSUJGRklfQ1JJUykKQEAgLTMwOCw2ICszMzYsNyBAQAogQU1fQ09ORElUSU9OQUwoUEFfSFBVWCwgdGVzdCB4JFRBUkdFVCA9IHhQQV9IUFVYKQogQU1fQ09ORElUSU9OQUwoUEE2NF9IUFVYLCB0ZXN0IHgkVEFSR0VUID0geFBBNjRfSFBVWCkKIEFNX0NPTkRJVElPTkFMKFRJTEUsIHRlc3QgeCRUQVJHRVQgPSB4VElMRSkKK0FNX0NPTkRJVElPTkFMKFZBWCwgdGVzdCB4JFRBUkdFVCA9IHhWQVgpCiBBTV9DT05ESVRJT05BTChYVEVOU0EsIHRlc3QgeCRUQVJHRVQgPSB4WFRFTlNBKQogCiBBQ19IRUFERVJfU1REQwpAQCAtMzIwLDE0ICszNDksMjAgQEAKICMgQWxzbyBBQ19TVUJTVCB0aGlzIHZhcmlhYmxlIGZvciBmZmkuaC4KIGlmIHRlc3QgLXogIiRIQVZFX0xPTkdfRE9VQkxFIjsgdGhlbgogICBIQVZFX0xPTkdfRE9VQkxFPTAKLSAgaWYgdGVzdCAkYWNfY3Zfc2l6ZW9mX2RvdWJsZSAhPSAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlOyB0aGVuCi0gICAgaWYgdGVzdCAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlICE9IDA7IHRoZW4KKyAgaWYgdGVzdCAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlICE9IDA7IHRoZW4KKyAgICBpZiB0ZXN0ICRIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgIT0gMDsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCwgMSwgW0RlZmluZSBpZiB5b3Ugc3VwcG9ydCBtb3JlIHRoYW4gb25lIHNpemUgb2YgdGhlIGxvbmcgZG91YmxlIHR5cGVdKQogICAgICAgSEFWRV9MT05HX0RPVUJMRT0xCi0gICAgICBBQ19ERUZJTkUoSEFWRV9MT05HX0RPVUJMRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbG9uZyBkb3VibGUgdHlwZSBhbmQgaXQgaXMgYmlnZ2VyIHRoYW4gYSBkb3VibGVdKQorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9kb3VibGUgIT0gJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZTsgdGhlbgorICAgICAgICBIQVZFX0xPTkdfRE9VQkxFPTEKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGxvbmcgZG91YmxlIHR5cGUgYW5kIGl0IGlzIGJpZ2dlciB0aGFuIGEgZG91YmxlXSkKKyAgICAgIGZpCiAgICAgZmkKICAgZmkKIGZpCiBBQ19TVUJTVChIQVZFX0xPTkdfRE9VQkxFKQorQUNfU1VCU1QoSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UKQogCiBBQ19DX0JJR0VORElBTgogCkBAIC00MTMsMTEgKzQ0OCw5IEBACiAgICAgICBbRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHBheCBlbXVsYXRlZCB0cmFtcG9saW5lc10pCiAgIGZpKQogCi1pZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU42NDsgdGhlbgotICAgIExUX1NZU19TWU1CT0xfVVNDT1JFCi0gICAgaWYgdGVzdCAieCRzeXNfc3ltYm9sX3VuZGVyc2NvcmUiID0geHllczsgdGhlbgotICAgICAgICBBQ19ERUZJTkUoU1lNQk9MX1VOREVSU0NPUkUsIDEsIFtEZWZpbmUgaWYgc3ltYm9scyBhcmUgdW5kZXJzY29yZWQuXSkKLSAgICBmaQorTFRfU1lTX1NZTUJPTF9VU0NPUkUKK2lmIHRlc3QgIngkc3lzX3N5bWJvbF91bmRlcnNjb3JlIiA9IHh5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoU1lNQk9MX1VOREVSU0NPUkUsIDEsIFtEZWZpbmUgaWYgc3ltYm9scyBhcmUgdW5kZXJzY29yZWQuXSkKIGZpCiAKIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEU9MApAQCAtNDM4LDEyICs0NzEsMjggQEAKIEFDX1NVQlNUKEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUpCiAKIGlmIHRlc3QgeCRUQVJHRVQgPSB4WDg2XzY0OyB0aGVuCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2Fzc2VtYmxlciBzdXBwb3J0cyB1bndpbmQgc2VjdGlvbiB0eXBlXSwKKyAgICBBQ19DQUNIRV9DSEVDSyhbdG9vbGNoYWluIHN1cHBvcnRzIHVud2luZCBzZWN0aW9uIHR5cGVdLAogCWxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZSwgWwotCWxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZT15ZXMKLQllY2hvICcuc2VjdGlvbiAuZWhfZnJhbWUsImEiLEB1bndpbmQnID4gY29uZnRlc3QucwotCWlmICRDQyAkQ0ZMQUdTIC1jIGNvbmZ0ZXN0LnMgMj4mMSB8IGdyZXAgLWkgd2FybmluZyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGU9bm8KKyAgICAgICAgY2F0ICA+IGNvbmZ0ZXN0MS5zIDw8IEVPRgorLnRleHQKKy5nbG9ibCBmb28KK2ZvbzoKK2ptcCBiYXIKKy5zZWN0aW9uIC5laF9mcmFtZSwiYSIsQHVud2luZAorYmFyOgorRU9GCisKKyAgICAgICAgY2F0ID4gY29uZnRlc3QyLmMgIDw8IEVPRgorZXh0ZXJuIHZvaWQgZm9vKCk7CitpbnQgbWFpbigpe2ZvbygpO30KK0VPRgorCisJbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlPW5vCisJIyB3ZSBlbnN1cmUgdGhhdCB3ZSBjYW4gY29tcGlsZSBfYW5kXyBsaW5rIGFuIGFzc2VtYmx5IGZpbGUgY29udGFpbmluZyBhbiBAdW53aW5kIHNlY3Rpb24KKwkjIHNpbmNlIHRoZSBjb21waWxlciBjYW4gc3VwcG9ydCBpdCBhbmQgbm90IHRoZSBsaW5rZXIgKGllIG9sZCBiaW51dGlscykKKwlpZiAkQ0MgLVdhLC0tZmF0YWwtd2FybmluZ3MgJENGTEFHUyAtYyBjb25mdGVzdDEucyA+IC9kZXYvbnVsbCAyPiYxICYmIFwKKyAgICAgICAgICAgJENDIGNvbmZ0ZXN0Mi5jIGNvbmZ0ZXN0MS5vID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgIGxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZT15ZXMKIAlmaQogCV0pCiAgICAgaWYgdGVzdCAieCRsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGUiID0geHllczsgdGhlbgpAQCAtNTI2LDE0ICs1NzUsMTQgQEAKIEFDX0FSR19FTkFCTEUoc3RydWN0cywKIFsgIC0tZGlzYWJsZS1zdHJ1Y3RzICAgICAgIG9taXQgY29kZSBmb3Igc3RydWN0IHN1cHBvcnRdLAogICBpZiB0ZXN0ICIkZW5hYmxlX3N0cnVjdHMiID0gIm5vIjsgdGhlbgotICAgIEFDX0RFRklORShGRklfTk9fU1RSVUNUUywgMSwgW0RlZmluZSB0aGlzIGlzIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciBhZ2dyZWdhdGUgdHlwZXMuXSkKKyAgICBBQ19ERUZJTkUoRkZJX05PX1NUUlVDVFMsIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgYWdncmVnYXRlIHR5cGVzLl0pCiAgIGZpKQogQU1fQ09ORElUSU9OQUwoRkZJX0RFQlVHLCB0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5ZXMiKQogCiBBQ19BUkdfRU5BQkxFKHJhdy1hcGksCiBbICAtLWRpc2FibGUtcmF3LWFwaSAgICAgICBtYWtlIHRoZSByYXcgYXBpIHVuYXZhaWxhYmxlXSwKICAgaWYgdGVzdCAiJGVuYWJsZV9yYXdfYXBpIiA9ICJubyI7IHRoZW4KLSAgICBBQ19ERUZJTkUoRkZJX05PX1JBV19BUEksIDEsIFtEZWZpbmUgdGhpcyBpcyB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHJhdyBBUEkuXSkKKyAgICBBQ19ERUZJTkUoRkZJX05PX1JBV19BUEksIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHJhdyBBUEkuXSkKICAgZmkpCiAKIEFDX0FSR19FTkFCTEUocHVyaWZ5LXNhZmV0eSwKQEAgLTU1Myw3ICs2MDIsNyBAQAogICAgIHRvb2xleGVjZGlyPSckKGxpYmRpcikvZ2NjLWxpYi8kKHRhcmdldF9hbGlhcyknCiAgICAgdG9vbGV4ZWNsaWJkaXI9JyQobGliZGlyKScKICAgZmkKLSAgbXVsdGlfb3NfZGlyZWN0b3J5PWAkQ0MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKyAgbXVsdGlfb3NfZGlyZWN0b3J5PWAkQ0MgJENGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAogICBjYXNlICRtdWx0aV9vc19kaXJlY3RvcnkgaW4KICAgICAuKSA7OyAjIEF2b2lkIHRyYWlsaW5nIC8uCiAgICAgLi4vKikgdG9vbGV4ZWNsaWJkaXI9JHRvb2xleGVjbGliZGlyLyRtdWx0aV9vc19kaXJlY3RvcnkgOzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmhvc3QgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5ob3N0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTI0NTdiLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmhvc3QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jIGNvbmZpZ3VyZS5ob3N0Ci0jCi0jIFRoaXMgc2hlbGwgc2NyaXB0IGhhbmRsZXMgYWxsIGhvc3QgYmFzZWQgY29uZmlndXJhdGlvbiBmb3IgbGliZmZpLgotIyAKLQotIyBUSElTIFRBQkxFIElTIFNPUlRFRC4gIEtFRVAgSVQgVEhBVCBXQVkuCi1jYXNlICIke2hvc3R9IiBpbgotICBmcnYqLWVsZikKLSAgICBMREZMQUdTPWBlY2hvICRMREZMQUdTIHwgc2VkICJzL1wtQlteIF0qbGliZ2xvc3NcL2ZydlwvLy8iYFwgLUJgcHdkYC8uLi9saWJnbG9zcy9mcnYvCi0gICAgOzsKLWVzYWMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZGVwY29tcCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZGVwY29tcAppbmRleCBkZjhlZWE3Li40ZWJkNWIzIDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RlcGNvbXAKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kZXBjb21wCkBAIC0xLDEwICsxLDkgQEAKICMhIC9iaW4vc2gKICMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cwogCi1zY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCitzY3JpcHR2ZXJzaW9uPTIwMTMtMDUtMzAuMDc7ICMgVVRDCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUKLSMgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjgsOSArMjcsOSBAQAogCiBjYXNlICQxIGluCiAgICcnKQotICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCi0gICAgIGV4aXQgMTsKLSAgICAgOzsKKyAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICBleGl0IDE7CisgICAgOzsKICAgLWggfCAtLWgqKQogICAgIGNhdCA8PFxFT0YKIFVzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCkBAIC00MCwxMSArMzksMTEgQEAKIAogRW52aXJvbm1lbnQgdmFyaWFibGVzOgogICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCi0gIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgYFBST0dSQU1TIEFSR1MnLgotICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBzb3VyY2UgICAgICBTb3VyY2UgZmlsZSByZWFkIGJ5ICdQUk9HUkFNUyBBUkdTJy4KKyAgb2JqZWN0ICAgICAgT2JqZWN0IGZpbGUgb3V0cHV0IGJ5ICdQUk9HUkFNUyBBUkdTJy4KICAgREVQRElSICAgICAgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIGRlcGVuZGVuY2llcy4KICAgZGVwZmlsZSAgICAgRGVwZW5kZW5jeSBmaWxlIHRvIG91dHB1dC4KLSAgdG1wZGVwZmlsZSAgVGVtcG9yYXJ5IGZpbGUgdG8gdXNlIHdoZW4gb3V0cHV0aW5nIGRlcGVuZGVuY2llcy4KKyAgdG1wZGVwZmlsZSAgVGVtcG9yYXJ5IGZpbGUgdG8gdXNlIHdoZW4gb3V0cHV0dGluZyBkZXBlbmRlbmNpZXMuCiAgIGxpYnRvb2wgICAgIFdoZXRoZXIgbGlidG9vbCBpcyB1c2VkICh5ZXMvbm8pLgogCiBSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgpAQCAtNTcsNiArNTYsNjYgQEAKICAgICA7OwogZXNhYwogCisjIEdldCB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBvZiB0aGUgZ2l2ZW4gcGF0aCwgYW5kIHNhdmUgaXQgaW4gdGhlCisjIGdsb2JhbCB2YXJpYWJsZXMgJyRkaXInLiAgTm90ZSB0aGF0IHRoaXMgZGlyZWN0b3J5IGNvbXBvbmVudCB3aWxsCisjIGJlIGVpdGhlciBlbXB0eSBvciBlbmRpbmcgd2l0aCBhICcvJyBjaGFyYWN0ZXIuICBUaGlzIGlzIGRlbGliZXJhdGUuCitzZXRfZGlyX2Zyb20gKCkKK3sKKyAgY2FzZSAkMSBpbgorICAgICovKikgZGlyPWBlY2hvICIkMSIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgOzsKKyAgICAgICopIGRpcj07OworICBlc2FjCit9CisKKyMgR2V0IHRoZSBzdWZmaXgtc3RyaXBwZWQgYmFzZW5hbWUgb2YgdGhlIGdpdmVuIHBhdGgsIGFuZCBzYXZlIGl0IHRoZQorIyBnbG9iYWwgdmFyaWFibGUgJyRiYXNlJy4KK3NldF9iYXNlX2Zyb20gKCkKK3sKKyAgYmFzZT1gZWNobyAiJDEiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5bXi5dKiQvLydgCit9CisKKyMgSWYgbm8gZGVwZW5kZW5jeSBmaWxlIHdhcyBhY3R1YWxseSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBpbnZvY2F0aW9uLAorIyB3ZSBzdGlsbCBoYXZlIHRvIGNyZWF0ZSBhIGR1bW15IGRlcGZpbGUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZQorIyBNYWtlZmlsZSAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KK21ha2VfZHVtbXlfZGVwZmlsZSAoKQoreworICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorfQorCisjIEZhY3RvciBvdXQgc29tZSBjb21tb24gcG9zdC1wcm9jZXNzaW5nIG9mIHRoZSBnZW5lcmF0ZWQgZGVwZmlsZS4KKyMgUmVxdWlyZXMgdGhlIGF1eGlsaWFyeSBnbG9iYWwgdmFyaWFibGUgJyR0bXBkZXBmaWxlJyB0byBiZSBzZXQuCithaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUgKCkKK3sKKyAgIyBJZiB0aGUgY29tcGlsZXIgYWN0dWFsbHkgbWFuYWdlZCB0byBwcm9kdWNlIGEgZGVwZW5kZW5jeSBmaWxlLAorICAjIHBvc3QtcHJvY2VzcyBpdC4KKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gJ2Zvby5vOiBkZXBlbmRlbmN5LmgnLgorICAgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICAgIyAgICRvYmplY3Q6IGRlcGVuZGVuY3kuaAorICAgICMgYW5kIG9uZSB0byBzaW1wbHkgb3V0cHV0CisgICAgIyAgIGRlcGVuZGVuY3kuaDoKKyAgICAjIHdoaWNoIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUgZGVsZXRlZC1oZWFkZXIgcHJvYmxlbS4KKyAgICB7IHNlZCAtZSAicyxeLipcLlskbG93ZXJdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIKKyAgICAgIHNlZCAtZSAicyxeLipcLlskbG93ZXJdKjpbJHRhYiBdKiwsIiAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIKKyAgICB9ID4gIiRkZXBmaWxlIgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgZWxzZQorICAgIG1ha2VfZHVtbXlfZGVwZmlsZQorICBmaQorfQorCisjIEEgdGFidWxhdGlvbiBjaGFyYWN0ZXIuCit0YWI9JwknCisjIEEgbmV3bGluZSBjaGFyYWN0ZXIuCitubD0nCisnCisjIENoYXJhY3RlciByYW5nZXMgbWlnaHQgYmUgcHJvYmxlbWF0aWMgb3V0c2lkZSB0aGUgQyBsb2NhbGUuCisjIFRoZXNlIGRlZmluaXRpb25zIGhlbHAuCit1cHBlcj1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgorbG93ZXI9YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2RpZ2l0cz0wMTIzNDU2Nzg5CithbHBoYT0ke3VwcGVyfSR7bG93ZXJ9CisKIGlmIHRlc3QgLXogIiRkZXBtb2RlIiB8fCB0ZXN0IC16ICIkc291cmNlIiB8fCB0ZXN0IC16ICIkb2JqZWN0IjsgdGhlbgogICBlY2hvICJkZXBjb21wOiBWYXJpYWJsZXMgc291cmNlLCBvYmplY3QgYW5kIGRlcG1vZGUgbXVzdCBiZSBzZXQiIDE+JjIKICAgZXhpdCAxCkBAIC02OSw2ICsxMjgsOSBAQAogCiBybSAtZiAiJHRtcGRlcGZpbGUiCiAKKyMgQXZvaWQgaW50ZXJmZXJlbmNlcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4KK2djY2ZsYWc9IGRhc2htZmxhZz0KKwogIyBTb21lIG1vZGVzIHdvcmsganVzdCBsaWtlIG90aGVyIG1vZGVzLCBidXQgdXNlIGRpZmZlcmVudCBmbGFncy4gIFdlCiAjIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAogIyB0byBtYWtlIGRlcGVuZC5tNCBlYXNpZXIgdG8gd3JpdGUuICBOb3RlIHRoYXQgd2UgKmNhbm5vdCogdXNlIGEgY2FzZQpAQCAtODAsMTggKzE0MiwzMiBAQAogZmkKIAogaWYgdGVzdCAiJGRlcG1vZGUiID0gZGFzaFhtc3Rkb3V0OyB0aGVuCi0gICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCi0gICBkYXNobWZsYWc9LXhNCi0gICBkZXBtb2RlPWRhc2htc3Rkb3V0CisgICMgVGhpcyBpcyBqdXN0IGxpa2UgZGFzaG1zdGRvdXQgd2l0aCBhIGRpZmZlcmVudCBhcmd1bWVudC4KKyAgZGFzaG1mbGFnPS14TQorICBkZXBtb2RlPWRhc2htc3Rkb3V0CiBmaQogCiBjeWdwYXRoX3U9ImN5Z3BhdGggLXUgLWYgLSIKIGlmIHRlc3QgIiRkZXBtb2RlIiA9IG1zdmNtc3lzOyB0aGVuCi0gICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KLSAgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAotICAgIyBzbGFzaGVzIHRvIHNhdGlzZnkgZGVwZW5kLm00Ci0gICBjeWdwYXRoX3U9InNlZCBzLFxcXFxcXFxcLC8sZyIKLSAgIGRlcG1vZGU9bXN2aXN1YWxjcHAKKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3Zpc3VhbGNwcCBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKKyAgZGVwbW9kZT1tc3Zpc3VhbGNwcAorZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Yzdtc3lzOyB0aGVuCisgICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2YzcgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgorICAjIEp1c3QgY29udmVydCB0aGUgYmFja3NsYXNoLWVzY2FwZWQgYmFja3NsYXNoZXMgdG8gc2luZ2xlIGZvcndhcmQKKyAgIyBzbGFzaGVzIHRvIHNhdGlzZnkgZGVwZW5kLm00CisgIGN5Z3BhdGhfdT0nc2VkIHMsXFxcXCwvLGcnCisgIGRlcG1vZGU9bXN2YzcKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IHhsYzsgdGhlbgorICAjIElCTSBDL0MrKyBDb21waWxlcnMgeGxjL3hsQyBjYW4gb3V0cHV0IGdjYy1saWtlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24uCisgIGdjY2ZsYWc9LXFtYWtlZGVwPWdjYywtTUYKKyAgZGVwbW9kZT1nY2MKIGZpCiAKIGNhc2UgIiRkZXBtb2RlIiBpbgpAQCAtMTE0LDggKzE5MCw3IEBACiAgIGRvbmUKICAgIiRAIgogICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KICAgICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgICAgZXhpdCAkc3RhdAogICBmaQpAQCAtMTIzLDEzICsxOTgsMTcgQEAKICAgOzsKIAogZ2NjKQorIyMgTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBqdXN0IGNhdGVyIHRvIG9ic29zZXRlIHByZS0zLnggR0NDIGNvbXBpbGVycy4KKyMjIGJ1dCBhbHNvIHRvIGluLXVzZSBjb21waWxlcnMgbGlrZSBJTUIgeGxjL3hsQyBhbmQgdGhlIEhQIEMgY29tcGlsZXIuCisjIyAoc2VlIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IHRvICRnY2NmbGFnIGFib3ZlKS4KICMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCiAjIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKICMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCiAjIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCiAjIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQogIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKLSMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgorIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuICBBbHNvLCBpdCBtaWdodCBub3QgYmUKKyMjICAgc3VwcG9ydGVkIGJ5IHRoZSBvdGhlciBjb21waWxlcnMgd2hpY2ggdXNlIHRoZSAnZ2NjJyBkZXBtb2RlLgogIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQogIyMgICB0aGFuIHJlbmFtaW5nKS4KICAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCkBAIC0xMzcsMzEgKzIxNiwzMSBAQAogICBmaQogICAiJEAiIC1XcCwiJGdjY2ZsYWckdG1wZGVwZmlsZSIKICAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCiAgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICAgIGV4aXQgJHN0YXQKICAgZmkKICAgcm0gLWYgIiRkZXBmaWxlIgogICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0jIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCisgICMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZQorICAjIGxldHRlcnMuCiAgIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAogICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSAiZGVsZXRlZCBoZWFkZXIgZmlsZSIgcHJvYmxlbS4KICMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCiAjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKICMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCiAjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCiAjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KLSAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIHwKLSMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgYDonLiAgT24gdGhlIHRoZW9yeQorIyMgU29tZSB2ZXJzaW9ucyBvZiBnY2MgcHV0IGEgc3BhY2UgYmVmb3JlIHRoZSAnOicuICBPbiB0aGUgdGhlb3J5CiAjIyB0aGF0IHRoZSBzcGFjZSBtZWFucyBzb21ldGhpbmcsIHdlIGFkZCBhIHNwYWNlIHRvIHRoZSBvdXRwdXQgYXMKLSMjIHdlbGwuCisjIyB3ZWxsLiAgaHAgZGVwbW9kZSBhbHNvIGFkZHMgdGhhdCBzcGFjZSwgYnV0IGFsc28gcHJlZml4ZXMgdGhlIFZQQVRICisjIyB0byB0aGUgb2JqZWN0LiAgVGFrZSBjYXJlIHRvIG5vdCByZXBlYXQgaXQgaW4gdGhlIG91dHB1dC4KICMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCiAjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgInN8Liokb2JqZWN0JHx8IiAtZSAnLzokL2QnIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CiAKQEAgLTE3OSw4ICsyNTgsNyBAQAogICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKICAgZmkKICAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCiAgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICAgIGV4aXQgJHN0YXQKICAgZmkKQEAgLTE4OCw0MyArMjY2LDQxIEBACiAKICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCiAgICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKLQogICAgICMgQ2xpcCBvZmYgdGhlIGluaXRpYWwgZWxlbWVudCAodGhlIGRlcGVuZGVudCkuICBEb24ndCB0cnkgdG8gYmUKICAgICAjIGNsZXZlciBhbmQgcmVwbGFjZSB0aGlzIHdpdGggc2VkIGNvZGUsIGFzIElSSVggc2VkIHdvbid0IGhhbmRsZQogICAgICMgbGluZXMgd2l0aCBtb3JlIHRoYW4gYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycyAoNDA5NiBpbgogICAgICMgSVJJWCA2LjIgc2VkLCA4MTkyIGluIElSSVggNi41KS4gIFdlIGFsc28gcmVtb3ZlIGNvbW1lbnQgbGluZXM7Ci0gICAgIyB0aGUgSVJJWCBjYyBhZGRzIGNvbW1lbnRzIGxpa2UgYCM6ZmVjJyB0byB0aGUgZW5kIG9mIHRoZQorICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlICcjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKICAgICAjIGRlcGVuZGVuY3kgbGluZS4KLSAgICB0ciAnICcgJwotJyA8ICIkdG1wZGVwZmlsZSIgXAotICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyB8IFwKLSAgICB0ciAnCi0nICcgJyA+PiAiJGRlcGZpbGUiCisgICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgXAorICAgICAgfCB0ciAiJG5sIiAnICcgPj4gIiRkZXBmaWxlIgogICAgIGVjaG8gPj4gIiRkZXBmaWxlIgotCiAgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCi0gICAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIFwKLSAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyAtZSAncy8kLzovJyBcCi0gICA+PiAiJGRlcGZpbGUiCisgICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgICAgPj4gIiRkZXBmaWxlIgogICBlbHNlCi0gICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKLSAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKLSAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgotICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCiAgIGZpCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgOzsKIAoreGxjKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKwogYWl4KQogICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCiAgICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCi0gICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgYCRvYmplY3Q6JyBhdCB0aGUKKyAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyAnJG9iamVjdDonIGF0IHRoZQogICAjIHN0YXJ0IG9mIGVhY2ggbGluZTsgJG9iamVjdCBkb2Vzbid0IGhhdmUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLgogICAjIFZlcnNpb24gNiB1c2VzIHRoZSBkaXJlY3RvcnkgaW4gYm90aCBjYXNlcy4KLSAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKLSAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9Ci0gIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgorICBzZXRfYmFzZV9mcm9tICIkb2JqZWN0IgogICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQogICAgIHRtcGRlcGZpbGUyPSRiYXNlLnUKQEAgLTIzNyw5ICszMTMsNyBAQAogICAgICIkQCIgLU0KICAgZmkKICAgc3RhdD0kPwotCi0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgogICAgIGV4aXQgJHN0YXQKICAgZmkKQEAgLTI0OCw0NCArMzIyLDEwMCBAQAogICBkbwogICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhawogICBkb25lCi0gIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgotICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLgotICAgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCi0gICAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgotICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgotICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotICBlbHNlCi0gICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKLSAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKLSAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgotICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZQorICA7OworCit0Y2MpCisgICMgdGNjIChUaW55IEMgQ29tcGlsZXIpIHVuZGVyc3RhbmQgJy1NRCAtTUYgZmlsZScgc2luY2UgdmVyc2lvbiAwLjkuMjYKKyAgIyBGSVhNRTogVGhhdCB2ZXJzaW9uIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGF0IHRoZSBtb21lbnQgb2Ygd3JpdGluZy4KKyAgIyAgICAgICAgTWFrZSB0aGF0IHRoaXMgc3RhdGVtZW50IHJlbWFpbnMgdHJ1ZSBhbHNvIGZvciBzdGFibGUsIHJlbGVhc2VkCisgICMgICAgICAgIHZlcnNpb25zLgorICAjIEl0IHdpbGwgd3JhcCBsaW5lcyAoZG9lc24ndCBtYXR0ZXIgd2hldGhlciBsb25nIG9yIHNob3J0KSB3aXRoIGEKKyAgIyB0cmFpbGluZyAnXCcsIGFzIGluOgorICAjCisgICMgICBmb28ubyA6IFwKKyAgIyAgICBmb28uYyBcCisgICMgICAgZm9vLmggXAorICAjCisgICMgSXQgd2lsbCBwdXQgYSB0cmFpbGluZyAnXCcgZXZlbiBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgd2lsbCB1c2UgbGVhZGluZworICAjIHNwYWNlcyByYXRoZXIgdGhhbiBsZWFkaW5nIHRhYnMgKGF0IGxlYXN0IHNpbmNlIGl0cyBjb21taXQgMDM5NGNhZjcKKyAgIyAiRW1pdCBzcGFjZXMgZm9yIC1NRCIpLgorICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAogICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBub24tZW1wdHkgbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm8gOiBcJyBvciAnIGRlcC5oIFwnLgorICAjIFdlIGhhdmUgdG8gY2hhbmdlIGxpbmVzIG9mIHRoZSBmaXJzdCBraW5kIHRvICckb2JqZWN0OiBcJy4KKyAgc2VkIC1lICJzfC4qOnwkb2JqZWN0IDp8IiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgQW5kIGZvciBlYWNoIGxpbmUgb2YgdGhlIHNlY29uZCBraW5kLCB3ZSBoYXZlIHRvIGVtaXQgYSAnZGVwLmg6JworICAjIGR1bW15IGRlcGVuZGVuY3ksIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgorICBzZWQgLW4gLWUgJ3N8XiAgKlwoLipcKSAqXFwkfFwxOnxwJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CiAKLWljYykKLSAgIyBJbnRlbCdzIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgYC1NRCAtTUYgZmlsZScuICBIb3dldmVyIG9uCi0gICMgICAgaWNjIC1NRCAtTUYgZm9vLmQgLWMgLW8gc3ViL2Zvby5vIHN1Yi9mb28uYwotICAjIElDQyA3LjAgd2lsbCBmaWxsIGZvby5kIHdpdGggc29tZXRoaW5nIGxpa2UKLSAgIyAgICBmb28ubzogc3ViL2Zvby5jCi0gICMgICAgZm9vLm86IHN1Yi9mb28uaAotICAjIHdoaWNoIGlzIHdyb25nLiAgV2Ugd2FudDoKLSAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uYwotICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5oCi0gICMgICAgc3ViL2Zvby5jOgotICAjICAgIHN1Yi9mb28uaDoKLSAgIyBJQ0MgNy4xIHdpbGwgb3V0cHV0CisjIyBUaGUgb3JkZXIgb2YgdGhpcyBvcHRpb24gaW4gdGhlIGNhc2Ugc3RhdGVtZW50IGlzIGltcG9ydGFudCwgc2luY2UgdGhlCisjIyBzaGVsbCBjb2RlIGluIGNvbmZpZ3VyZSB3aWxsIHRyeSBlYWNoIG9mIHRoZXNlIGZvcm1hdHMgaW4gdGhlIG9yZGVyCisjIyBsaXN0ZWQgaW4gdGhpcyBmaWxlLiAgQSBwbGFpbiAnLU1EJyBvcHRpb24gd291bGQgYmUgdW5kZXJzdG9vZCBieSBtYW55CisjIyBjb21waWxlcnMsIHNvIHdlIG11c3QgZW5zdXJlIHRoaXMgY29tZXMgYWZ0ZXIgdGhlIGdjYyBhbmQgaWNjIG9wdGlvbnMuCitwZ2NjKQorICAjIFBvcnRsYW5kJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyAnLU1EJy4KKyAgIyBXaWxsIGFsd2F5cyBvdXRwdXQgZGVwcyB0byAnZmlsZS5kJyB3aGVyZSBmaWxlIGlzIHRoZSByb290IG5hbWUgb2YgdGhlCisgICMgc291cmNlIGZpbGUgdW5kZXIgY29tcGlsYXRpb24sIGV2ZW4gaWYgZmlsZSByZXNpZGVzIGluIGEgc3ViZGlyZWN0b3J5LgorICAjIFRoZSBvYmplY3QgZmlsZSBuYW1lIGRvZXMgbm90IGFmZmVjdCB0aGUgbmFtZSBvZiB0aGUgJy5kJyBmaWxlLgorICAjIHBnY2MgMTAuMiB3aWxsIG91dHB1dAogICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCi0gICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nIFwgOgorICAjIGFuZCB3aWxsIHdyYXAgbG9uZyBsaW5lcyB1c2luZyAnXCcgOgogICAjICAgIGZvby5vOiBzdWIvZm9vLmMgLi4uIFwKICAgIyAgICAgc3ViL2Zvby5oIC4uLiBcCiAgICMgICAgIC4uLgorICBzZXRfZGlyX2Zyb20gIiRvYmplY3QiCisgICMgVXNlIHRoZSBzb3VyY2UsIG5vdCB0aGUgb2JqZWN0LCB0byBkZXRlcm1pbmUgdGhlIGJhc2UgbmFtZSwgc2luY2UKKyAgIyB0aGF0J3Mgc2FkbHkgd2hhdCBwZ2NjIHdpbGwgZG8gdG9vLgorICBzZXRfYmFzZV9mcm9tICIkc291cmNlIgorICB0bXBkZXBmaWxlPSRiYXNlLmQKIAotICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCisgICMgRm9yIHByb2plY3RzIHRoYXQgYnVpbGQgdGhlIHNhbWUgc291cmNlIGZpbGUgdHdpY2UgaW50byBkaWZmZXJlbnQgb2JqZWN0CisgICMgZmlsZXMsIHRoZSBwZ2NjIGFwcHJvYWNoIG9mIHVzaW5nIHRoZSAqc291cmNlKiBmaWxlIHJvb3QgbmFtZSBjYW4gY2F1c2UKKyAgIyBwcm9ibGVtcyBpbiBwYXJhbGxlbCBidWlsZHMuICBVc2UgYSBsb2NraW5nIHN0cmF0ZWd5IHRvIGF2b2lkIHN0b21waW5nIG9uCisgICMgdGhlIHNhbWUgJHRtcGRlcGZpbGUuCisgIGxvY2tkaXI9JGJhc2UuZC1sb2NrCisgIHRyYXAgIgorICAgIGVjaG8gJyQwOiBjYXVnaHQgc2lnbmFsLCBjbGVhbmluZyB1cC4uLicgPiYyCisgICAgcm1kaXIgJyRsb2NrZGlyJworICAgIGV4aXQgMQorICAiIDEgMiAxMyAxNQorICBudW10cmllcz0xMDAKKyAgaT0kbnVtdHJpZXMKKyAgd2hpbGUgdGVzdCAkaSAtZ3QgMDsgZG8KKyAgICAjIG1rZGlyIGlzIGEgcG9ydGFibGUgdGVzdC1hbmQtc2V0LgorICAgIGlmIG1rZGlyICIkbG9ja2RpciIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICMgVGhpcyBwcm9jZXNzIGFjcXVpcmVkIHRoZSBsb2NrLgorICAgICAgIiRAIiAtTUQKKyAgICAgIHN0YXQ9JD8KKyAgICAgICMgUmVsZWFzZSB0aGUgbG9jay4KKyAgICAgIHJtZGlyICIkbG9ja2RpciIKKyAgICAgIGJyZWFrCisgICAgZWxzZQorICAgICAgIyBJZiB0aGUgbG9jayBpcyBiZWluZyBoZWxkIGJ5IGEgZGlmZmVyZW50IHByb2Nlc3MsIHdhaXQKKyAgICAgICMgdW50aWwgdGhlIHdpbm5pbmcgcHJvY2VzcyBpcyBkb25lIG9yIHdlIHRpbWVvdXQuCisgICAgICB3aGlsZSB0ZXN0IC1kICIkbG9ja2RpciIgJiYgdGVzdCAkaSAtZ3QgMDsgZG8KKyAgICAgICAgc2xlZXAgMQorICAgICAgICBpPWBleHByICRpIC0gMWAKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGk9YGV4cHIgJGkgLSAxYAorICBkb25lCisgIHRyYXAgLSAxIDIgMTMgMTUKKyAgaWYgdGVzdCAkaSAtbGUgMDsgdGhlbgorICAgIGVjaG8gIiQwOiBmYWlsZWQgdG8gYWNxdWlyZSBsb2NrIGFmdGVyICRudW10cmllcyBhdHRlbXB0cyIgPiYyCisgICAgZWNobyAiJDA6IGNoZWNrIGxvY2tkaXIgJyRsb2NrZGlyJyIgPiYyCisgICAgZXhpdCAxCisgIGZpCisKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgogICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgICBleGl0ICRzdGF0CiAgIGZpCkBAIC0yOTcsOCArNDI3LDggQEAKICAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgogICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCiAgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiB8Ci0gICAgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgOzsKIApAQCAtMzA5LDkgKzQzOSw4IEBACiAgICMgJ2Zvby5kJywgd2hpY2ggbGFuZHMgbmV4dCB0byB0aGUgb2JqZWN0IGZpbGUsIHdoZXJldmVyIHRoYXQKICAgIyBoYXBwZW5zIHRvIGJlLgogICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCi0gIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCi0gIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQotICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIHNldF9kaXJfZnJvbSAgIiRvYmplY3QiCisgIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCiAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgogICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCiAgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLmQKQEAgLTMyMiw4ICs0NTEsNyBAQAogICAgICIkQCIgK01ha2VkCiAgIGZpCiAgIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gIGVsc2UKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgogICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgogICAgICBleGl0ICRzdGF0CiAgIGZpCkBAIC0zMzMsNzcgKzQ2MSwxMDcgQEAKICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKICAgZG9uZQogICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KLSAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgICAjIEFkZCBgZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCAnZGVwZW5kZW50Lmg6JyBsaW5lcy4KICAgICBzZWQgLW5lICcyLCR7Ci0JICAgICAgIHMvXiAqLy8KLQkgICAgICAgcy8gXFwqJC8vCi0JICAgICAgIHMvJC86LwotCSAgICAgICBwCi0JICAgICB9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgICAgICAgICAgICAgIHMvXiAqLy8KKyAgICAgICAgICAgICAgIHMvIFxcKiQvLworICAgICAgICAgICAgICAgcy8kLzovCisgICAgICAgICAgICAgICBwCisgICAgICAgICAgICAgfScgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCiAgIGVsc2UKLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgIG1ha2VfZHVtbXlfZGVwZmlsZQogICBmaQogICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZTIiCiAgIDs7CiAKIHRydTY0KQotICAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQotICAgIyBlZmZlY3QuICBgY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYGZvby5vLmQnLgotICAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAotICAgIyBkZXBlbmRlbmNpZXMgaW4gYGZvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCi0gICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCi0gICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAotICAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9Ci0gICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgIyBlZmZlY3QuICAnY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gJ2Zvby5vLmQnLgorICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0CisgICMgZGVwZW5kZW5jaWVzIGluICdmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgIHNldF9kaXJfZnJvbSAgIiRvYmplY3QiCisgIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCiAKLSAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgotICAgICAgIyBXaXRoIFRydTY0IGNjLCBzaGFyZWQgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIHRvIG1ha2UgYQotICAgICAgIyBzdGF0aWMgbGlicmFyeS4gIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgaW4gbGlidG9vbCAxLjQgc2VyaWVzIHRvCi0gICAgICAjIGhhbmRsZSBib3RoIHNoYXJlZCBhbmQgc3RhdGljIGxpYnJhcmllcyBpbiBhIHNpbmdsZSBjb21waWxhdGlvbi4KLSAgICAgICMgV2l0aCBsaWJ0b29sIDEuNCwgZGVwZW5kZW5jaWVzIHdlcmUgb3V0cHV0IGluICRkaXIubGlicy8kYmFzZS5sby5kLgotICAgICAgIwotICAgICAgIyBXaXRoIGxpYnRvb2wgMS41IHRoaXMgZXhjZXB0aW9uIHdhcyByZW1vdmVkLCBhbmQgbGlidG9vbCBub3cKLSAgICAgICMgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UgdHdvCi0gICAgICAjIGNvbXBpbGF0aW9ucyBvdXRwdXQgZGVwZW5kZW5jaWVzIGluICRkaXIubGlicy8kYmFzZS5vLmQgYW5kCi0gICAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCi0gICAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCi0gICAgICAjICRkaXIkYmFzZS5vLmQgb3ZlciAkZGlyLmxpYnMvJGJhc2Uuby5kIGJlY2F1c2UgdGhlIGxhdHRlciBpcwotICAgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKLSAgICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgotICAgICAgdG1wZGVwZmlsZTE9JGRpci5saWJzLyRiYXNlLmxvLmQgICAjIGxpYnRvb2wgMS40Ci0gICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKLSAgICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5vLmQgICAgIyBsaWJ0b29sIDEuNQotICAgICAgdG1wZGVwZmlsZTQ9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKLSAgICAgICIkQCIgLVdjLC1NRAotICAgZWxzZQotICAgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLm8uZAotICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKLSAgICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS5kCi0gICAgICB0bXBkZXBmaWxlND0kZGlyJGJhc2UuZAotICAgICAgIiRAIiAtTUQKLSAgIGZpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICMgTGlidG9vbCBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZQorICAgICMgdHdvIGNvbXBpbGF0aW9ucyBvdXRwdXQgZGVwZW5kZW5jaWVzIGluICRkaXIubGlicy8kYmFzZS5vLmQgYW5kCisgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQorICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKKyAgICAjICRkaXIkYmFzZS5vLmQgb3ZlciAkZGlyLmxpYnMvJGJhc2Uuby5kIGJlY2F1c2UgdGhlIGxhdHRlciBpcworICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCisgICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41CisgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIExpa2V3aXNlLgorICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0CisgICAgIiRAIiAtV2MsLU1ECisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKKyAgICAiJEAiIC1NRAorICBmaQogCi0gICBzdGF0PSQ/Ci0gICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgIGVsc2UKLSAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCi0gICAgICBleGl0ICRzdGF0Ci0gICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKIAotICAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKLSAgIGRvCi0gICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhawotICAgZG9uZQotICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCi0gICAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICAgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgotICAgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0gICBlbHNlCi0gICAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgotICAgZmkKLSAgIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgIDs7CisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgIyBTYW1lIHBvc3QtcHJvY2Vzc2luZyB0aGF0IGlzIHJlcXVpcmVkIGZvciBBSVggbW9kZS4KKyAgYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlCisgIDs7CisKK21zdmM3KQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICBzaG93SW5jbHVkZXM9LVdjLC1zaG93SW5jbHVkZXMKKyAgZWxzZQorICAgIHNob3dJbmNsdWRlcz0tc2hvd0luY2x1ZGVzCisgIGZpCisgICIkQCIgJHNob3dJbmNsdWRlcyA+ICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBncmVwIC12ICdeTm90ZTogaW5jbHVkaW5nIGZpbGU6ICcgIiR0bXBkZXBmaWxlIgorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICAjIFRoZSBmaXJzdCBzZWQgcHJvZ3JhbSBiZWxvdyBleHRyYWN0cyB0aGUgZmlsZSBuYW1lcyBhbmQgZXNjYXBlcworICAjIGJhY2tzbGFzaGVzIGZvciBjeWdwYXRoLiAgVGhlIHNlY29uZCBzZWQgcHJvZ3JhbSBvdXRwdXRzIHRoZSBmaWxlCisgICMgbmFtZSB3aGVuIHJlYWRpbmcsIGJ1dCBhbHNvIGFjY3VtdWxhdGVzIGFsbCBpbmNsdWRlIGZpbGVzIGluIHRoZQorICAjIGhvbGQgYnVmZmVyIGluIG9yZGVyIHRvIG91dHB1dCB0aGVtIGFnYWluIGF0IHRoZSBlbmQuICBUaGlzIG9ubHkKKyAgIyB3b3JrcyB3aXRoIHNlZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW4gaGFuZGxlIGxhcmdlIGJ1ZmZlcnMuCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gJworL15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogICpcKC4qXCkvIHsKKyAgcy8vXDEvCisgIHMvXFwvXFxcXC9nCisgIHAKK30nIHwgJGN5Z3BhdGhfdSB8IHNvcnQgLXUgfCBzZWQgLW4gJworcy8gL1xcIC9nCitzL1woLipcKS8nIiR0YWIiJ1wxIFxcL3AKK3MvLlwoLipcKSBcXC9cMTovCitICiskIHsKKyAgcy8uKi8nIiR0YWIiJy8KKyAgRworICBwCit9JyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gPj4gIiRkZXBmaWxlIiAjIG1ha2Ugc3VyZSB0aGUgZnJhZ21lbnQgZG9lc24ndCBlbmQgd2l0aCBhIGJhY2tzbGFzaAorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmM3bXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CiAKICNub3NpZGVlZmZlY3QpCiAgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdApAQCAtNDIyLDcgKzU4MCw3IEBACiAgICAgc2hpZnQKICAgZmkKIAotICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgICMgUmVtb3ZlICctbyAkb2JqZWN0Jy4KICAgSUZTPSIgIgogICBmb3IgYXJnCiAgIGRvCkBAIC00NDIsMTggKzYwMCwxOCBAQAogICBkb25lCiAKICAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCi0gICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciBgOicKKyAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yICc6JwogICAjIGluIHRoZSB0YXJnZXQgbmFtZS4gIFRoaXMgaXMgdG8gY29wZSB3aXRoIERPUy1zdHlsZSBmaWxlbmFtZXM6Ci0gICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgYGM6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0IGBjJyBvdGhlcndpc2UuCisgICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgJ2M6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0ICdjJyBvdGhlcndpc2UuCiAgICIkQCIgJGRhc2htZmxhZyB8Ci0gICAgc2VkICdzOl5bICBdKlteOiBdW146XVteOl0qXDpbICAgIF0qOiciJG9iamVjdCInXDogOicgPiAiJHRtcGRlcGZpbGUiCisgICAgc2VkICJzfF5bJHRhYiBdKlteOiR0YWIgXVteOl1bXjpdKjpbJHRhYiBdKnwkb2JqZWN0OiB8IiA+ICIkdG1wZGVwZmlsZSIKICAgcm0gLWYgIiRkZXBmaWxlIgogICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICB0ciAnICcgJwotJyA8ICIkdG1wZGVwZmlsZSIgfCBcCi0jIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgotIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgc2VkIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICA7OwogCkBAIC01MDMsMTIgKzY2MSwxNSBAQAogICB0b3VjaCAiJHRtcGRlcGZpbGUiCiAgICR7TUFLRURFUEVORC1tYWtlZGVwZW5kfSAtbyIkb2JqX3N1ZmZpeCIgLWYiJHRtcGRlcGZpbGUiICIkQCIKICAgcm0gLWYgIiRkZXBmaWxlIgotICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgfCB0ciAnICcgJwotJyB8IFwKLSMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCi0jIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICAjIG1ha2VkZXBlbmQgbWF5IHByZXBlbmQgdGhlIFZQQVRIIGZyb20gdGhlIHNvdXJjZSBmaWxlIG5hbWUgdG8gdGhlIG9iamVjdC4KKyAgIyBObyBuZWVkIHRvIHJlZ2V4LWVzY2FwZSAkb2JqZWN0LCBleGNlc3MgbWF0Y2hpbmcgb2YgJy4nIGlzIGhhcm1sZXNzLgorICBzZWQgInN8Xi4qXCgkb2JqZWN0ICo6XCl8XDF8IiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhlIGxhc3QgaW52b2NhdGlvbgorICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiBcCisgICAgfCB0ciAnICcgIiRubCIgXAorICAgIHwgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZSIuYmFrCiAgIDs7CiAKQEAgLTUyNSw3ICs2ODYsNyBAQAogICAgIHNoaWZ0CiAgIGZpCiAKLSAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICAjIFJlbW92ZSAnLW8gJG9iamVjdCcuCiAgIElGUz0iICIKICAgZm9yIGFyZwogICBkbwpAQCAtNTQ0LDEwICs3MDUsMTAgQEAKICAgICBlc2FjCiAgIGRvbmUKIAotICAiJEAiIC1FIHwKLSAgICBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAotICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyB8Ci0gICAgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKKyAgIiRAIiAtRSBcCisgICAgfCBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgICAgICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgfCBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgogICBybSAtZiAiJGRlcGZpbGUiCiAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCiAgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgpAQCAtNTc5LDIzICs3NDAsMjMgQEAKICAgICAgIHNoaWZ0CiAgICAgICA7OwogICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQotCXNldCBmbm9yZCAiJEAiCi0Jc2hpZnQKLQlzaGlmdAotCTs7CisgICAgICAgIHNldCBmbm9yZCAiJEAiCisgICAgICAgIHNoaWZ0CisgICAgICAgIHNoaWZ0CisgICAgICAgIDs7CiAgICAgKikKLQlzZXQgZm5vcmQgIiRAIiAiJGFyZyIKLQlzaGlmdAotCXNoaWZ0Ci0JOzsKKyAgICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICAgIHNoaWZ0CisgICAgICAgIHNoaWZ0CisgICAgICAgIDs7CiAgICAgZXNhYwogICBkb25lCiAgICIkQCIgLUUgMj4vZGV2L251bGwgfAogICBzZWQgLW4gJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIvIHM6OlwxOnAnIHwgJGN5Z3BhdGhfdSB8IHNvcnQgLXUgPiAiJHRtcGRlcGZpbGUiCiAgIHJtIC1mICIkZGVwZmlsZSIKICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKLSAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjoJXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgotICBlY2hvICIJIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6JyIkdGFiIidcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIiR0YWIiID4+ICIkZGVwZmlsZSIKICAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICA7OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLmluZm8gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkuaW5mbwppbmRleCA2ZDVhY2Y4Li4zOTkwOTM5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkuaW5mbworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkudGV4aSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS50ZXhpCmluZGV4IDVjMDU1MmIuLmEyYjEyNDIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS50ZXhpCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS50ZXhpCkBAIC0xODQsMTEgKzE4NCwxMSBAQAogCiBAdmFye3J2YWx1ZX0gaXMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2YgbWVtb3J5IHRoYXQgd2lsbCBob2xkIHRoZQogcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLiAgVGhpcyBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZQotcmVzdWx0IGFuZCBtdXN0IGJlIHN1aXRhYmx5IGFsaWduZWQ7IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eQorcmVzdWx0LCBubyBzbWFsbGVyIHRoYW4gdGhlIHN5c3RlbSByZWdpc3RlciBzaXplIChnZW5lcmFsbHkgMzIgb3IgNjQKK2JpdHMpLCBhbmQgbXVzdCBiZSBzdWl0YWJseSBhbGlnbmVkOyBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkKIHRvIGVuc3VyZSB0aGlzLiAgSWYgQHZhcntjaWZ9IGRlY2xhcmVzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMKIEBjb2Rle3ZvaWR9ICh1c2luZyBAY29kZXtmZmlfdHlwZV92b2lkfSksIHRoZW4gQHZhcntydmFsdWV9IGlzCi1pZ25vcmVkLiAgSWYgQHZhcntydmFsdWV9IGlzIEBzYW1we05VTEx9LCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMKLWRpc2NhcmRlZC4KK2lnbm9yZWQuCiAKIEB2YXJ7YXZhbHVlc30gaXMgYSB2ZWN0b3Igb2YgQGNvZGV7dm9pZCAqfSBwb2ludGVycyB0aGF0IHBvaW50IHRvIHRoZQogbWVtb3J5IGxvY2F0aW9ucyBob2xkaW5nIHRoZSBhcmd1bWVudCB2YWx1ZXMgZm9yIGEgY2FsbC4gIElmIEB2YXJ7Y2lmfQpAQCAtMjE0LDcgKzIxNCw3IEBACiAgIGZmaV90eXBlICphcmdzWzFdOwogICB2b2lkICp2YWx1ZXNbMV07CiAgIGNoYXIgKnM7Ci0gIGludCByYzsKKyAgZmZpX2FyZyByYzsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGFyZ3VtZW50IGluZm8gdmVjdG9ycyAqLyAgICAKICAgYXJnc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KICAgaWYgKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIAotCQkgICAgICAgJmZmaV90eXBlX3VpbnQsIGFyZ3MpID09IEZGSV9PSykKKwkJICAgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spCiAgICAgQHsKICAgICAgIHMgPSAiSGVsbG8gV29ybGQhIjsKICAgICAgIGZmaV9jYWxsKCZjaWYsIHB1dHMsICZyYywgdmFsdWVzKTsKQEAgLTQxNCw2ICs0MTQsNyBAQAogICAgICAgaW50IGk7CiAKICAgICAgIHRtX3R5cGUuc2l6ZSA9IHRtX3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgICAgIHRtX3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKICAgICAgIHRtX3R5cGUuZWxlbWVudHMgPSAmdG1fdHlwZV9lbGVtZW50czsKICAgICAKICAgICAgIGZvciAoaSA9IDA7IGkgPCA5OyBpKyspCkBAIC01MzMsMjggKzUzNCwzMCBAQAogQHNlY3Rpb24gQ2xvc3VyZSBFeGFtcGxlCiAKIEEgdHJpdmlhbCBleGFtcGxlIHRoYXQgY3JlYXRlcyBhIG5ldyBAY29kZXtwdXRzfSBieSBiaW5kaW5nIAotQGNvZGV7ZnB1dHN9IHdpdGggQGNvZGV7c3RkaW59LgorQGNvZGV7ZnB1dHN9IHdpdGggQGNvZGV7c3Rkb3V0fS4KIAogQGV4YW1wbGUKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGZmaS5oPgogCiAvKiBBY3RzIGxpa2UgcHV0cyB3aXRoIHRoZSBmaWxlIGdpdmVuIGF0IHRpbWUgb2YgZW5jbG9zdXJlLiAqLwotdm9pZCBwdXRzX2JpbmRpbmcoZmZpX2NpZiAqY2lmLCB1bnNpZ25lZCBpbnQgKnJldCwgdm9pZCogYXJnc1tdLCAKLSAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSkKK3ZvaWQgcHV0c19iaW5kaW5nKGZmaV9jaWYgKmNpZiwgdm9pZCAqcmV0LCB2b2lkKiBhcmdzW10sCisgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW0pCiBAewotICAqcmV0ID0gZnB1dHMoKihjaGFyICoqKWFyZ3NbMF0sIHN0cmVhbSk7CisgICooZmZpX2FyZyAqKXJldCA9IGZwdXRzKCooY2hhciAqKilhcmdzWzBdLCAoRklMRSAqKXN0cmVhbSk7CiBAfQogCit0eXBlZGVmIGludCAoKnB1dHNfdCkoY2hhciAqKTsKKwogaW50IG1haW4oKQogQHsKICAgZmZpX2NpZiBjaWY7CiAgIGZmaV90eXBlICphcmdzWzFdOwogICBmZmlfY2xvc3VyZSAqY2xvc3VyZTsKIAotICBpbnQgKCpib3VuZF9wdXRzKShjaGFyICopOworICB2b2lkICpib3VuZF9wdXRzOwogICBpbnQgcmM7Ci0gIAorCiAgIC8qIEFsbG9jYXRlIGNsb3N1cmUgYW5kIGJvdW5kX3B1dHMgKi8KICAgY2xvc3VyZSA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZib3VuZF9wdXRzKTsKIApAQCAtNTY1LDEzICs1NjgsMTMgQEAKIAogICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCiAgICAgICBpZiAoZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgJmZmaV90eXBlX3VpbnQsIGFyZ3MpID09IEZGSV9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSykKICAgICAgICAgQHsKICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBjbG9zdXJlLCBzZXR0aW5nIHN0cmVhbSB0byBzdGRvdXQgKi8KLSAgICAgICAgICBpZiAoZmZpX3ByZXBfY2xvc3VyZV9sb2MoY2xvc3VyZSwgJmNpZiwgcHV0c19iaW5kaW5nLCAKKyAgICAgICAgICBpZiAoZmZpX3ByZXBfY2xvc3VyZV9sb2MoY2xvc3VyZSwgJmNpZiwgcHV0c19iaW5kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIGJvdW5kX3B1dHMpID09IEZGSV9PSykKICAgICAgICAgICAgIEB7Ci0gICAgICAgICAgICAgIHJjID0gYm91bmRfcHV0cygiSGVsbG8gV29ybGQhIik7CisgICAgICAgICAgICAgIHJjID0gKChwdXRzX3QpYm91bmRfcHV0cykoIkhlbGxvIFdvcmxkISIpOwogICAgICAgICAgICAgICAvKiByYyBub3cgaG9sZHMgdGhlIHJlc3VsdCBvZiB0aGUgY2FsbCB0byBmcHV0cyAqLwogICAgICAgICAgICAgQH0KICAgICAgICAgQH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3N0YW1wLXZ0aSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3N0YW1wLXZ0aQppbmRleCA1NDI1NWJhLi4zNzg1OTUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9zdGFtcC12dGkKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2Mvc3RhbXAtdnRpCkBAIC0xLDQgKzEsNCBAQAotQHNldCBVUERBVEVEIDE2IE1hcmNoIDIwMTMKLUBzZXQgVVBEQVRFRC1NT05USCBNYXJjaCAyMDEzCi1Ac2V0IEVESVRJT04gMy4wLjEzCi1Ac2V0IFZFUlNJT04gMy4wLjEzCitAc2V0IFVQREFURUQgMjUgQXByaWwgMjAxNAorQHNldCBVUERBVEVELU1PTlRIIEFwcmlsIDIwMTQKK0BzZXQgRURJVElPTiAzLjEKK0BzZXQgVkVSU0lPTiAzLjEKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3ZlcnNpb24udGV4aSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3ZlcnNpb24udGV4aQppbmRleCA1NDI1NWJhLi4zNzg1OTUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy92ZXJzaW9uLnRleGkKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvdmVyc2lvbi50ZXhpCkBAIC0xLDQgKzEsNCBAQAotQHNldCBVUERBVEVEIDE2IE1hcmNoIDIwMTMKLUBzZXQgVVBEQVRFRC1NT05USCBNYXJjaCAyMDEzCi1Ac2V0IEVESVRJT04gMy4wLjEzCi1Ac2V0IFZFUlNJT04gMy4wLjEzCitAc2V0IFVQREFURUQgMjUgQXByaWwgMjAxNAorQHNldCBVUERBVEVELU1PTlRIIEFwcmlsIDIwMTQKK0BzZXQgRURJVElPTiAzLjEKK0BzZXQgVkVSU0lPTiAzLjEKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLmguaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5oLmluCmluZGV4IGM3NzU4NWQuLmNkZWY5MWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLmguaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbgpAQCAtMjYsMTAgKzI2LDEwIEBACiAvKiBDYW5ub3QgdXNlIG1hbGxvYyBvbiB0aGlzIHRhcmdldCwgc28sIHdlIHJldmVydCB0byBhbHRlcm5hdGl2ZSBtZWFucyAqLwogI3VuZGVmIEZGSV9NTUFQX0VYRUNfV1JJVAogCi0vKiBEZWZpbmUgdGhpcyBpcyB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHJhdyBBUEkuICovCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHJhdyBBUEkuICovCiAjdW5kZWYgRkZJX05PX1JBV19BUEkKIAotLyogRGVmaW5lIHRoaXMgaXMgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIGFnZ3JlZ2F0ZSB0eXBlcy4gKi8KKy8qIERlZmluZSB0aGlzIGlmIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciBhZ2dyZWdhdGUgdHlwZXMuICovCiAjdW5kZWYgRkZJX05PX1NUUlVDVFMKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYGFsbG9jYScsIGFzIGEgZnVuY3Rpb24gb3IgbWFjcm8uICovCkBAIC03Myw2ICs3Myw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGxvbmcgZG91YmxlIHR5cGUgYW5kIGl0IGlzIGJpZ2dlciB0aGFuIGEgZG91YmxlICovCiAjdW5kZWYgSEFWRV9MT05HX0RPVUJMRQogCisvKiBEZWZpbmUgaWYgeW91IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBzaXplIG9mIHRoZSBsb25nIGRvdWJsZSB0eXBlICovCisjdW5kZWYgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtY3B5JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX01FTUNQWQogCkBAIC0xMTgsOCArMTIxLDcgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVU5JU1REX0gKIAotLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4KLSAgICovCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLiAqLwogI3VuZGVmIExUX09CSkRJUgogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIEMgY29tcGlsZXIgZG9lc24ndCBhY2NlcHQgLWMgYW5kIC1vIHRvZ2V0aGVyLiAqLwpAQCAtMTUyLDYgKzE1NCw5IEBACiAvKiBUaGUgc2l6ZSBvZiBgbG9uZyBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX0xPTkdfRE9VQkxFCiAKKy8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1NJWkVfVAorCiAvKiBJZiB1c2luZyB0aGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvY2EsIGRlZmluZSBpZiB5b3Uga25vdyB0aGUKICAgIGRpcmVjdGlvbiBvZiBzdGFjayBncm93dGggZm9yIHlvdXIgc3lzdGVtOyBvdGhlcndpc2UgaXQgd2lsbCBiZQogICAgYXV0b21hdGljYWxseSBkZWR1Y2VkIGF0IHJ1bnRpbWUuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLnB5LmluCmluZGV4IDM1YmUyOWMuLmQxMDI0OTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLnB5LmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLnB5LmluCkBAIC02LDcgKzYsNyBAQAogZmZpX3BsYXRmb3JtcyA9IHsKICAgICAnTUlQU19JUklYJzogWydzcmMvbWlwcy9mZmkuYycsICdzcmMvbWlwcy9vMzIuUycsICdzcmMvbWlwcy9uMzIuUyddLAogICAgICdNSVBTX0xJTlVYJzogWydzcmMvbWlwcy9mZmkuYycsICdzcmMvbWlwcy9vMzIuUyddLAotICAgICdYODYnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9zeXN2LlMnXSwKKyAgICAnWDg2JzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvc3lzdi5TJywgJ3NyYy94ODYvd2luMzIuUyddLAogICAgICdYODZfRlJFRUJTRCc6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L2ZyZWVic2QuUyddLAogICAgICdYODZfV0lOMzInOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni93aW4zMi5TJ10sCiAgICAgJ1NQQVJDJzogWydzcmMvc3BhcmMvZmZpLmMnLCAnc3JjL3NwYXJjL3Y4LlMnLCAnc3JjL3NwYXJjL3Y5LlMnXSwKQEAgLTE0LDkgKzE0LDEwIEBACiAgICAgJ0lBNjQnOiBbJ3NyYy9pYTY0L2ZmaS5jJywgJ3NyYy9pYTY0L3VuaXguUyddLAogICAgICdNMzJSJzogWydzcmMvbTMyci9zeXN2LlMnLCAnc3JjL20zMnIvZmZpLmMnXSwKICAgICAnTTY4Syc6IFsnc3JjL202OGsvZmZpLmMnLCAnc3JjL202OGsvc3lzdi5TJ10sCi0gICAgJ1BPV0VSUEMnOiBbJ3NyYy9wb3dlcnBjL2ZmaS5jJywgJ3NyYy9wb3dlcnBjL3N5c3YuUycsICdzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TJywgJ3NyYy9wb3dlcnBjL2xpbnV4NjQuUycsICdzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyddLAorICAgICdQT1dFUlBDJzogWydzcmMvcG93ZXJwYy9mZmkuYycsICdzcmMvcG93ZXJwYy9mZmlfc3lzdi5jJywgJ3NyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMnLCAnc3JjL3Bvd2VycGMvc3lzdi5TJywgJ3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMnLCAnc3JjL3Bvd2VycGMvbGludXg2NC5TJywgJ3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TJ10sCiAgICAgJ1BPV0VSUENfQUlYJzogWydzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMnLCAnc3JjL3Bvd2VycGMvYWl4LlMnLCAnc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUyddLAogICAgICdQT1dFUlBDX0ZSRUVCU0QnOiBbJ3NyYy9wb3dlcnBjL2ZmaS5jJywgJ3NyYy9wb3dlcnBjL3N5c3YuUycsICdzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TJ10sCisgICAgJ0FBUkNINjQnOiBbJ3NyYy9hYXJjaDY0L3N5c3YuUycsICdzcmMvYWFyY2g2NC9mZmkuYyddLAogICAgICdBUk0nOiBbJ3NyYy9hcm0vc3lzdi5TJywgJ3NyYy9hcm0vZmZpLmMnXSwKICAgICAnTElCRkZJX0NSSVMnOiBbJ3NyYy9jcmlzL3N5c3YuUycsICdzcmMvY3Jpcy9mZmkuYyddLAogICAgICdGUlYnOiBbJ3NyYy9mcnYvZWFiaS5TJywgJ3NyYy9mcnYvZmZpLmMnXSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5CkBAIC0wLDAgKzEsMjA5IEBACisjIS91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZ2xvYgoraW1wb3J0IGFyZ3BhcnNlCisKK2NsYXNzIFBsYXRmb3JtKG9iamVjdCk6CisgICAgcGFzcworCitjbGFzcyBzaW11bGF0b3JfcGxhdGZvcm0oUGxhdGZvcm0pOgorICAgIGRpcmVjdG9yeSA9ICdkYXJ3aW5faW9zJworICAgIHNkayA9ICdpcGhvbmVzaW11bGF0b3InCisgICAgYXJjaCA9ICdpMzg2JworICAgIHRyaXBsZSA9ICdpMzg2LWFwcGxlLWRhcndpbjExJworICAgIHZlcnNpb25fbWluID0gJy1taXBob25lb3MtdmVyc2lvbi1taW49NS4xLjEnCisKKyAgICBwcmVmaXggPSAiI2lmZGVmIF9faTM4Nl9fXG5cbiIKKyAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKKyAgICBzcmNfZGlyID0gJ3g4NicKKyAgICBzcmNfZmlsZXMgPSBbJ2Rhcndpbi5TJywgJ3dpbjMyLlMnLCAnZmZpLmMnXQorCisKK2NsYXNzIHNpbXVsYXRvcjY0X3BsYXRmb3JtKFBsYXRmb3JtKToKKyAgICBkaXJlY3RvcnkgPSAnZGFyd2luX2lvcycKKyAgICBzZGsgPSAnaXBob25lc2ltdWxhdG9yJworICAgIGFyY2ggPSAneDg2XzY0JworICAgIHRyaXBsZSA9ICd4ODZfNjQtYXBwbGUtZGFyd2luMTMnCisgICAgdmVyc2lvbl9taW4gPSAnLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj03LjAnCisKKyAgICBwcmVmaXggPSAiI2lmZGVmIF9feDg2XzY0X19cblxuIgorICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgorICAgIHNyY19kaXIgPSAneDg2JworICAgIHNyY19maWxlcyA9IFsnZGFyd2luNjQuUycsICdmZmk2NC5jJ10KKworCitjbGFzcyBkZXZpY2VfcGxhdGZvcm0oUGxhdGZvcm0pOgorICAgIGRpcmVjdG9yeSA9ICdkYXJ3aW5faW9zJworICAgIHNkayA9ICdpcGhvbmVvcycKKyAgICBhcmNoID0gJ2FybXY3JworICAgIHRyaXBsZSA9ICdhcm0tYXBwbGUtZGFyd2luMTEnCisgICAgdmVyc2lvbl9taW4gPSAnLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj01LjEuMScKKworICAgIHByZWZpeCA9ICIjaWZkZWYgX19hcm1fX1xuXG4iCisgICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCisgICAgc3JjX2RpciA9ICdhcm0nCisgICAgc3JjX2ZpbGVzID0gWydzeXN2LlMnLCAndHJhbXBvbGluZS5TJywgJ2ZmaS5jJ10KKworCitjbGFzcyBkZXZpY2U2NF9wbGF0Zm9ybShQbGF0Zm9ybSk6CisgICAgZGlyZWN0b3J5ID0gJ2Rhcndpbl9pb3MnCisgICAgc2RrID0gJ2lwaG9uZW9zJworICAgIGFyY2ggPSAnYXJtNjQnCisgICAgdHJpcGxlID0gJ2FhcmNoNjQtYXBwbGUtZGFyd2luMTMnCisgICAgdmVyc2lvbl9taW4gPSAnLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj03LjAnCisKKyAgICBwcmVmaXggPSAiI2lmZGVmIF9fYXJtNjRfX1xuXG4iCisgICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCisgICAgc3JjX2RpciA9ICdhYXJjaDY0JworICAgIHNyY19maWxlcyA9IFsnc3lzdi5TJywgJ2ZmaS5jJ10KKworCitjbGFzcyBkZXNrdG9wMzJfcGxhdGZvcm0oUGxhdGZvcm0pOgorICAgIGRpcmVjdG9yeSA9ICdkYXJ3aW5fb3N4JworICAgIHNkayA9ICdtYWNvc3gnCisgICAgYXJjaCA9ICdpMzg2JworICAgIHRyaXBsZSA9ICdpMzg2LWFwcGxlLWRhcndpbjEwJworICAgIHZlcnNpb25fbWluID0gJy1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjYnCisgICAgc3JjX2RpciA9ICd4ODYnCisgICAgc3JjX2ZpbGVzID0gWydkYXJ3aW4uUycsICd3aW4zMi5TJywgJ2ZmaS5jJ10KKworICAgIHByZWZpeCA9ICIjaWZkZWYgX19pMzg2X19cblxuIgorICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgorCisKK2NsYXNzIGRlc2t0b3A2NF9wbGF0Zm9ybShQbGF0Zm9ybSk6CisgICAgZGlyZWN0b3J5ID0gJ2Rhcndpbl9vc3gnCisgICAgc2RrID0gJ21hY29zeCcKKyAgICBhcmNoID0gJ3g4Nl82NCcKKyAgICB0cmlwbGUgPSAneDg2XzY0LWFwcGxlLWRhcndpbjEwJworICAgIHZlcnNpb25fbWluID0gJy1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjYnCisKKyAgICBwcmVmaXggPSAiI2lmZGVmIF9feDg2XzY0X19cblxuIgorICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgorICAgIHNyY19kaXIgPSAneDg2JworICAgIHNyY19maWxlcyA9IFsnZGFyd2luNjQuUycsICdmZmk2NC5jJ10KKworCitkZWYgbWtkaXJfcChwYXRoKToKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOiAgIyBQeXRob24gPjIuNQorICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgbW92ZV9maWxlKHNyY19kaXIsIGRzdF9kaXIsIGZpbGVuYW1lLCBmaWxlX3N1ZmZpeD1Ob25lLCBwcmVmaXg9JycsIHN1ZmZpeD0nJyk6CisgICAgbWtkaXJfcChkc3RfZGlyKQorICAgIG91dF9maWxlbmFtZSA9IGZpbGVuYW1lCisKKyAgICBpZiBmaWxlX3N1ZmZpeDoKKyAgICAgICAgc3BsaXRfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgICAgIG91dF9maWxlbmFtZSA9ICIlc18lcyVzIiAlIChzcGxpdF9uYW1lWzBdLCBmaWxlX3N1ZmZpeCwgc3BsaXRfbmFtZVsxXSkKKworICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3JjX2RpciwgZmlsZW5hbWUpKSBhcyBpbl9maWxlOgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRzdF9kaXIsIG91dF9maWxlbmFtZSksICd3JykgYXMgb3V0X2ZpbGU6CisgICAgICAgICAgICBpZiBwcmVmaXg6CisgICAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUocHJlZml4KQorCisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShpbl9maWxlLnJlYWQoKSkKKworICAgICAgICAgICAgaWYgc3VmZml4OgorICAgICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHN1ZmZpeCkKKworCitkZWYgbGlzdF9maWxlcyhzcmNfZGlyLCBwYXR0ZXJuPU5vbmUsIGZpbGVsaXN0PU5vbmUpOgorICAgIGlmIHBhdHRlcm46IGZpbGVsaXN0ID0gZ2xvYi5pZ2xvYihvcy5wYXRoLmpvaW4oc3JjX2RpciwgcGF0dGVybikpCisgICAgZm9yIGZpbGUgaW4gZmlsZWxpc3Q6CisgICAgICAgIHlpZWxkIG9zLnBhdGguYmFzZW5hbWUoZmlsZSkKKworCitkZWYgY29weV9maWxlcyhzcmNfZGlyLCBkc3RfZGlyLCBwYXR0ZXJuPU5vbmUsIGZpbGVsaXN0PU5vbmUsIGZpbGVfc3VmZml4PU5vbmUsIHByZWZpeD1Ob25lLCBzdWZmaXg9Tm9uZSk6CisgICAgZm9yIGZpbGVuYW1lIGluIGxpc3RfZmlsZXMoc3JjX2RpciwgcGF0dGVybj1wYXR0ZXJuLCBmaWxlbGlzdD1maWxlbGlzdCk6CisgICAgICAgIG1vdmVfZmlsZShzcmNfZGlyLCBkc3RfZGlyLCBmaWxlbmFtZSwgZmlsZV9zdWZmaXg9ZmlsZV9zdWZmaXgsIHByZWZpeD1wcmVmaXgsIHN1ZmZpeD1zdWZmaXgpCisKKworZGVmIGNvcHlfc3JjX3BsYXRmb3JtX2ZpbGVzKHBsYXRmb3JtKToKKyAgICBzcmNfZGlyID0gb3MucGF0aC5qb2luKCdzcmMnLCBwbGF0Zm9ybS5zcmNfZGlyKQorICAgIGRzdF9kaXIgPSBvcy5wYXRoLmpvaW4ocGxhdGZvcm0uZGlyZWN0b3J5LCAnc3JjJywgcGxhdGZvcm0uc3JjX2RpcikKKyAgICBjb3B5X2ZpbGVzKHNyY19kaXIsIGRzdF9kaXIsIGZpbGVsaXN0PXBsYXRmb3JtLnNyY19maWxlcywgZmlsZV9zdWZmaXg9cGxhdGZvcm0uYXJjaCwgcHJlZml4PXBsYXRmb3JtLnByZWZpeCwgc3VmZml4PXBsYXRmb3JtLnN1ZmZpeCkKKworCitkZWYgYnVpbGRfdGFyZ2V0KHBsYXRmb3JtLCBwbGF0Zm9ybV9oZWFkZXJzKToKKyAgICBkZWYgeGNydW5fY21kKGNtZCk6CisgICAgICAgIHJldHVybiAneGNydW4gLXNkayAlcyAlcyAtYXJjaCAlcycgJSAocGxhdGZvcm0uc2RrLCBjbWQsIHBsYXRmb3JtLmFyY2gpCisKKyAgICB0YWc9JyVzLSVzJyAlIChwbGF0Zm9ybS5zZGssIHBsYXRmb3JtLmFyY2gpCisgICAgYnVpbGRfZGlyID0gJ2J1aWxkXyVzJyAlIHRhZworICAgIG1rZGlyX3AoYnVpbGRfZGlyKQorICAgIGVudiA9IGRpY3QoQ0M9eGNydW5fY21kKCdjbGFuZycpLAorICAgICAgICAgICAgICAgTEQ9eGNydW5fY21kKCdsZCcpLAorICAgICAgICAgICAgICAgQ0ZMQUdTPSclcycgJSAocGxhdGZvcm0udmVyc2lvbl9taW4pKQorICAgIHdvcmtpbmdfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICB0cnk6CisgICAgICAgIG9zLmNoZGlyKGJ1aWxkX2RpcikKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnLi4vY29uZmlndXJlJywgJy1ob3N0JywgcGxhdGZvcm0udHJpcGxlXSwgZW52PWVudikKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcih3b3JraW5nX2RpcikKKworICAgIGZvciBzcmNfZGlyIGluIFtidWlsZF9kaXIsIG9zLnBhdGguam9pbihidWlsZF9kaXIsICdpbmNsdWRlJyldOgorICAgICAgICBjb3B5X2ZpbGVzKHNyY19kaXIsCisgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBsYXRmb3JtLmRpcmVjdG9yeSwgJ2luY2x1ZGUnKSwKKyAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPScqLmgnLAorICAgICAgICAgICAgICAgICAgIGZpbGVfc3VmZml4PXBsYXRmb3JtLmFyY2gsCisgICAgICAgICAgICAgICAgICAgcHJlZml4PXBsYXRmb3JtLnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICBzdWZmaXg9cGxhdGZvcm0uc3VmZml4KQorCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBsaXN0X2ZpbGVzKHNyY19kaXIsIHBhdHRlcm49JyouaCcpOgorICAgICAgICAgICAgcGxhdGZvcm1faGVhZGVyc1tmaWxlbmFtZV0uYWRkKChwbGF0Zm9ybS5wcmVmaXgsIHBsYXRmb3JtLmFyY2gsIHBsYXRmb3JtLnN1ZmZpeCkpCisKKworZGVmIG1ha2VfdHJhbXAoKToKKyAgICB3aXRoIG9wZW4oJ3NyYy9hcm0vdHJhbXBvbGluZS5TJywgJ3cnKSBhcyB0cmFtcF9vdXQ6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsnYmFzaCcsICdzcmMvYXJtL2dlbnRyYW1wLnNoJ10sIHN0ZG91dD10cmFtcF9vdXQpCisgICAgICAgIHAud2FpdCgpCisKKworZGVmIGdlbmVyYXRlX3NvdXJjZV9hbmRfaGVhZGVycyhnZW5lcmF0ZV9vc3g9VHJ1ZSwgZ2VuZXJhdGVfaW9zPVRydWUpOgorICAgIGNvcHlfZmlsZXMoJ3NyYycsICdkYXJ3aW5fY29tbW9uL3NyYycsIHBhdHRlcm49JyouYycpCisgICAgY29weV9maWxlcygnaW5jbHVkZScsICdkYXJ3aW5fY29tbW9uL2luY2x1ZGUnLCBwYXR0ZXJuPScqLmgnKQorCisgICAgaWYgZ2VuZXJhdGVfaW9zOgorICAgICAgICBtYWtlX3RyYW1wKCkKKyAgICAgICAgY29weV9zcmNfcGxhdGZvcm1fZmlsZXMoc2ltdWxhdG9yX3BsYXRmb3JtKQorICAgICAgICBjb3B5X3NyY19wbGF0Zm9ybV9maWxlcyhzaW11bGF0b3I2NF9wbGF0Zm9ybSkKKyAgICAgICAgY29weV9zcmNfcGxhdGZvcm1fZmlsZXMoZGV2aWNlX3BsYXRmb3JtKQorICAgICAgICBjb3B5X3NyY19wbGF0Zm9ybV9maWxlcyhkZXZpY2U2NF9wbGF0Zm9ybSkKKyAgICBpZiBnZW5lcmF0ZV9vc3g6CisgICAgICAgIGNvcHlfc3JjX3BsYXRmb3JtX2ZpbGVzKGRlc2t0b3AzMl9wbGF0Zm9ybSkKKyAgICAgICAgY29weV9zcmNfcGxhdGZvcm1fZmlsZXMoZGVza3RvcDY0X3BsYXRmb3JtKQorCisgICAgcGxhdGZvcm1faGVhZGVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KHNldCkKKworICAgIGlmIGdlbmVyYXRlX2lvczoKKyAgICAgICAgYnVpbGRfdGFyZ2V0KHNpbXVsYXRvcl9wbGF0Zm9ybSwgcGxhdGZvcm1faGVhZGVycykKKyAgICAgICAgYnVpbGRfdGFyZ2V0KHNpbXVsYXRvcjY0X3BsYXRmb3JtLCBwbGF0Zm9ybV9oZWFkZXJzKQorICAgICAgICBidWlsZF90YXJnZXQoZGV2aWNlX3BsYXRmb3JtLCBwbGF0Zm9ybV9oZWFkZXJzKQorICAgICAgICBidWlsZF90YXJnZXQoZGV2aWNlNjRfcGxhdGZvcm0sIHBsYXRmb3JtX2hlYWRlcnMpCisgICAgaWYgZ2VuZXJhdGVfb3N4OgorICAgICAgICBidWlsZF90YXJnZXQoZGVza3RvcDMyX3BsYXRmb3JtLCBwbGF0Zm9ybV9oZWFkZXJzKQorICAgICAgICBidWlsZF90YXJnZXQoZGVza3RvcDY0X3BsYXRmb3JtLCBwbGF0Zm9ybV9oZWFkZXJzKQorCisgICAgbWtkaXJfcCgnZGFyd2luX2NvbW1vbi9pbmNsdWRlJykKKyAgICBmb3IgaGVhZGVyX25hbWUsIHRhZ190dXBsZXMgaW4gcGxhdGZvcm1faGVhZGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgYmFzZW5hbWUsIHN1ZmZpeCA9IG9zLnBhdGguc3BsaXRleHQoaGVhZGVyX25hbWUpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2Rhcndpbl9jb21tb24vaW5jbHVkZScsIGhlYWRlcl9uYW1lKSwgJ3cnKSBhcyBoZWFkZXI6CisgICAgICAgICAgICBmb3IgdGFnX3R1cGxlIGluIHRhZ190dXBsZXM6CisgICAgICAgICAgICAgICAgaGVhZGVyLndyaXRlKCclcyNpbmNsdWRlIDwlc18lcyVzPlxuJXNcbicgJSAodGFnX3R1cGxlWzBdLCBiYXNlbmFtZSwgdGFnX3R1cGxlWzFdLCBzdWZmaXgsIHRhZ190dXBsZVsyXSkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb25seS1pb3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb25seS1vc3gnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBnZW5lcmF0ZV9zb3VyY2VfYW5kX2hlYWRlcnMoZ2VuZXJhdGVfb3N4PW5vdCBhcmdzLm9ubHlfaW9zLCBnZW5lcmF0ZV9pb3M9bm90IGFyZ3Mub25seV9vc3gpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGMyYmNhNzMuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHJlCi1pbXBvcnQgb3MKLWltcG9ydCBlcnJubwotaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgc3lzCi0KLWNsYXNzIFBsYXRmb3JtKG9iamVjdCk6Ci0gICAgcGFzcwotCi1zZGtfcmUgPSByZS5jb21waWxlKHInLiotc2RrIChbYS16QS1aMC05Ll0qKScpCi0KLWRlZiBzZGtpbmZvKHNka25hbWUpOgotICAgIHJldCA9IHt9Ci0gICAgZm9yIGxpbmUgaW4gc3VicHJvY2Vzcy5Qb3BlbihbJ3hjb2RlYnVpbGQnLCAnLXNkaycsIHNka25hbWUsICctdmVyc2lvbiddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQ6Ci0gICAgICAgIGt2ID0gbGluZS5zdHJpcCgpLnNwbGl0KCc6ICcsIDEpCi0gICAgICAgIGlmIGxlbihrdikgPT0gMjoKLSAgICAgICAgICAgIGssdiA9IGt2Ci0gICAgICAgICAgICByZXRba10gPSB2Ci0gICAgcmV0dXJuIHJldAotCi1zaW1fc2RrX2luZm8gPSBzZGtpbmZvKCdpcGhvbmVzaW11bGF0b3InKQotZGV2aWNlX3Nka19pbmZvID0gc2RraW5mbygnaXBob25lb3MnKQotCi1kZWYgbGF0ZXN0X3Nka3MoKToKLSAgICBsYXRlc3Rfc2ltID0gTm9uZQotICAgIGxhdGVzdF9kZXZpY2UgPSBOb25lCi0gICAgZm9yIGxpbmUgaW4gc3VicHJvY2Vzcy5Qb3BlbihbJ3hjb2RlYnVpbGQnLCAnLXNob3dzZGtzJ10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dDoKLSAgICAgICAgbWF0Y2ggPSBzZGtfcmUubWF0Y2gobGluZSkKLSAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICBpZiAnU2ltdWxhdG9yJyBpbiBsaW5lOgotICAgICAgICAgICAgICAgIGxhdGVzdF9zaW0gPSBtYXRjaC5ncm91cCgxKQotICAgICAgICAgICAgZWxpZiAnaU9TJyBpbiBsaW5lOgotICAgICAgICAgICAgICAgIGxhdGVzdF9kZXZpY2UgPSBtYXRjaC5ncm91cCgxKQotCi0gICAgcmV0dXJuIGxhdGVzdF9zaW0sIGxhdGVzdF9kZXZpY2UKLQotc2ltX3NkaywgZGV2aWNlX3NkayA9IGxhdGVzdF9zZGtzKCkKLQotY2xhc3Mgc2ltdWxhdG9yX3BsYXRmb3JtKFBsYXRmb3JtKToKLSAgICBzZGs9J2lwaG9uZXNpbXVsYXRvcicKLSAgICBhcmNoID0gJ2kzODYnCi0gICAgbmFtZSA9ICdzaW11bGF0b3InCi0gICAgdHJpcGxlID0gJ2kzODYtYXBwbGUtZGFyd2luMTAnCi0gICAgc2Rrcm9vdCA9IHNpbV9zZGtfaW5mb1snUGF0aCddCi0KLSAgICBwcmVmaXggPSAiI2lmICFkZWZpbmVkKF9fYXJtX18pICYmIGRlZmluZWQoX19pMzg2X18pXG5cbiIKLSAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKLQotY2xhc3MgZGV2aWNlX3BsYXRmb3JtKFBsYXRmb3JtKToKLSAgICBzZGs9J2lwaG9uZW9zJwotICAgIG5hbWUgPSAnaW9zJwotICAgIGFyY2ggPSAnYXJtdjcnCi0gICAgdHJpcGxlID0gJ2FybS1hcHBsZS1kYXJ3aW4xMCcKLSAgICBzZGtyb290ID0gZGV2aWNlX3Nka19pbmZvWydQYXRoJ10KLQotICAgIHByZWZpeCA9ICIjaWZkZWYgX19hcm1fX1xuXG4iCi0gICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCi0KLQotZGVmIG1vdmVfZmlsZShzcmNfZGlyLCBkc3RfZGlyLCBmaWxlbmFtZSwgZmlsZV9zdWZmaXg9Tm9uZSwgcHJlZml4PScnLCBzdWZmaXg9JycpOgotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkc3RfZGlyKToKLSAgICAgICAgb3MubWFrZWRpcnMoZHN0X2RpcikKLQotICAgIG91dF9maWxlbmFtZSA9IGZpbGVuYW1lCi0KLSAgICBpZiBmaWxlX3N1ZmZpeDoKLSAgICAgICAgc3BsaXRfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCi0gICAgICAgIG91dF9maWxlbmFtZSA9ICAiJXNfJXMlcyIgJSAoc3BsaXRfbmFtZVswXSwgZmlsZV9zdWZmaXgsIHNwbGl0X25hbWVbMV0pCi0KLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNyY19kaXIsIGZpbGVuYW1lKSkgYXMgaW5fZmlsZToKLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkc3RfZGlyLCBvdXRfZmlsZW5hbWUpLCAndycpIGFzIG91dF9maWxlOgotICAgICAgICAgICAgaWYgcHJlZml4OgotICAgICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHByZWZpeCkKLQotICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoaW5fZmlsZS5yZWFkKCkpCi0KLSAgICAgICAgICAgIGlmIHN1ZmZpeDoKLSAgICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzdWZmaXgpCi0KLWhlYWRlcnNfc2VlbiA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KHNldCkKLQotZGVmIG1vdmVfc291cmNlX3RyZWUoc3JjX2RpciwgZGVzdF9kaXIsIGRlc3RfaW5jbHVkZV9kaXIsIGFyY2g9Tm9uZSwgcHJlZml4PU5vbmUsIHN1ZmZpeD1Ob25lKToKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzcmNfZGlyLCBmb2xsb3dsaW5rcz1UcnVlKToKLSAgICAgICAgcmVscm9vdCA9IG9zLnBhdGgucmVscGF0aChyb290LHNyY19kaXIpCi0KLSAgICAgICAgZGVmIG1vdmVfZGlyKGFyY2gsIHByZWZpeD0nJywgc3VmZml4PScnLCBmaWxlcz1bXSk6Ci0gICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICBmaWxlX3N1ZmZpeCA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcuaCcpOgotICAgICAgICAgICAgICAgICAgICBpZiBkZXN0X2luY2x1ZGVfZGlyOgotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zdWZmaXggPSBhcmNoCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBhcmNoOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNfc2VlbltmaWxlXS5hZGQoYXJjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVfZmlsZShyb290LCBkZXN0X2luY2x1ZGVfZGlyLCBmaWxlLCBhcmNoLCBwcmVmaXg9cHJlZml4LCBzdWZmaXg9c3VmZml4KQotCi0gICAgICAgICAgICAgICAgZWxpZiBkZXN0X2RpcjoKLSAgICAgICAgICAgICAgICAgICAgb3V0cm9vdCA9IG9zLnBhdGguam9pbihkZXN0X2RpciwgcmVscm9vdCkKLSAgICAgICAgICAgICAgICAgICAgbW92ZV9maWxlKHJvb3QsIG91dHJvb3QsIGZpbGUsIHByZWZpeD1wcmVmaXgsIHN1ZmZpeD1zdWZmaXgpCi0KLSAgICAgICAgaWYgcmVscm9vdCA9PSAnLic6Ci0gICAgICAgICAgICBtb3ZlX2RpcihhcmNoPWFyY2gsCi0gICAgICAgICAgICAgICAgICAgICBmaWxlcz1maWxlcywKLSAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICBzdWZmaXg9c3VmZml4KQotICAgICAgICBlbGlmIHJlbHJvb3QgPT0gJ2FybSc6Ci0gICAgICAgICAgICBtb3ZlX2RpcihhcmNoPSdhcm0nLAotICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSIjaWZkZWYgX19hcm1fX1xuXG4iLAotICAgICAgICAgICAgICAgICAgICAgc3VmZml4PSJcblxuI2VuZGlmIiwKLSAgICAgICAgICAgICAgICAgICAgIGZpbGVzPWZpbGVzKQotICAgICAgICBlbGlmIHJlbHJvb3QgPT0gJ3g4Nic6Ci0gICAgICAgICAgICBtb3ZlX2RpcihhcmNoPSdpMzg2JywKLSAgICAgICAgICAgICAgICAgICAgIHByZWZpeD0iI2lmICFkZWZpbmVkKF9fYXJtX18pICYmIGRlZmluZWQoX19pMzg2X18pXG5cbiIsCi0gICAgICAgICAgICAgICAgICAgICBzdWZmaXg9IlxuXG4jZW5kaWYiLAotICAgICAgICAgICAgICAgICAgICAgZmlsZXM9ZmlsZXMpCi0KLWRlZiBidWlsZF90YXJnZXQocGxhdGZvcm0pOgotICAgIGRlZiB4Y3J1bl9jbWQoY21kKToKLSAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsneGNydW4nLCAnLXNkaycsIHBsYXRmb3JtLnNka3Jvb3QsICctZmluZCcsIGNtZF0pLnN0cmlwKCkKLQotICAgIGJ1aWxkX2RpciA9ICdidWlsZF8nICsgcGxhdGZvcm0ubmFtZQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhidWlsZF9kaXIpOgotICAgICAgICBvcy5tYWtlZGlycyhidWlsZF9kaXIpCi0gICAgICAgIGVudiA9IGRpY3QoQ0M9eGNydW5fY21kKCdjbGFuZycpLAotICAgICAgICAgICAgICAgICAgIExEPXhjcnVuX2NtZCgnbGQnKSwKLSAgICAgICAgICAgICAgICAgICBDRkxBR1M9Jy1hcmNoICVzIC1pc3lzcm9vdCAlcyAtbWlwaG9uZW9zLXZlcnNpb24tbWluPTQuMCcgJSAocGxhdGZvcm0uYXJjaCwgcGxhdGZvcm0uc2Rrcm9vdCkpCi0gICAgICAgIHdvcmtpbmdfZGlyPW9zLmdldGN3ZCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmNoZGlyKGJ1aWxkX2RpcikKLSAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJy4uL2NvbmZpZ3VyZScsICctaG9zdCcsIHBsYXRmb3JtLnRyaXBsZV0sIGVudj1lbnYpCi0gICAgICAgICAgICBtb3ZlX3NvdXJjZV90cmVlKCcuJywgTm9uZSwgJy4uL2lvcy9pbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaD1wbGF0Zm9ybS5hcmNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9cGxhdGZvcm0ucHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9cGxhdGZvcm0uc3VmZml4KQotICAgICAgICAgICAgbW92ZV9zb3VyY2VfdHJlZSgnLi9pbmNsdWRlJywgTm9uZSwgJy4uL2lvcy9pbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoPXBsYXRmb3JtLmFyY2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PXBsYXRmb3JtLnByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9cGxhdGZvcm0uc3VmZml4KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIod29ya2luZ19kaXIpCi0KLSAgICAgICAgZm9yIGhlYWRlcl9uYW1lLCBhcmNocyBpbiBoZWFkZXJzX3NlZW4uaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBiYXNlbmFtZSwgc3VmZml4ID0gb3MucGF0aC5zcGxpdGV4dChoZWFkZXJfbmFtZSkKLQotZGVmIG1haW4oKToKLSAgICBtb3ZlX3NvdXJjZV90cmVlKCdzcmMnLCAnaW9zL3NyYycsICdpb3MvaW5jbHVkZScpCi0gICAgbW92ZV9zb3VyY2VfdHJlZSgnaW5jbHVkZScsIE5vbmUsICdpb3MvaW5jbHVkZScpCi0gICAgYnVpbGRfdGFyZ2V0KHNpbXVsYXRvcl9wbGF0Zm9ybSkKLSAgICBidWlsZF90YXJnZXQoZGV2aWNlX3BsYXRmb3JtKQotCi0gICAgZm9yIGhlYWRlcl9uYW1lLCBhcmNocyBpbiBoZWFkZXJzX3NlZW4uaXRlcml0ZW1zKCk6Ci0gICAgICAgIGJhc2VuYW1lLCBzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KGhlYWRlcl9uYW1lKQotICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdpb3MvaW5jbHVkZScsIGhlYWRlcl9uYW1lKSwgJ3cnKSBhcyBoZWFkZXI6Ci0gICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoczoKLSAgICAgICAgICAgICAgICBoZWFkZXIud3JpdGUoJyNpbmNsdWRlIDwlc18lcyVzPlxuJyAlIChiYXNlbmFtZSwgYXJjaCwgc3VmZml4KSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjQzMTNjMS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHJlCi1pbXBvcnQgb3MKLWltcG9ydCBlcnJubwotaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgc3lzCi0KLWNsYXNzIFBsYXRmb3JtKG9iamVjdCk6Ci0gICAgcGFzcwotCi1zZGtfcmUgPSByZS5jb21waWxlKHInLiotc2RrIChbYS16QS1aMC05Ll0qKScpCi0KLWRlZiBzZGtpbmZvKHNka25hbWUpOgotICAgIHJldCA9IHt9Ci0gICAgZm9yIGxpbmUgaW4gc3VicHJvY2Vzcy5Qb3BlbihbJ3hjb2RlYnVpbGQnLCAnLXNkaycsIHNka25hbWUsICctdmVyc2lvbiddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQ6Ci0gICAgICAgIGt2ID0gbGluZS5zdHJpcCgpLnNwbGl0KCc6ICcsIDEpCi0gICAgICAgIGlmIGxlbihrdikgPT0gMjoKLSAgICAgICAgICAgIGssdiA9IGt2Ci0gICAgICAgICAgICByZXRba10gPSB2Ci0gICAgcmV0dXJuIHJldAotCi1kZXNrdG9wX3Nka19pbmZvID0gc2RraW5mbygnbWFjb3N4JykKLQotZGVmIGxhdGVzdF9zZGtzKCk6Ci0gICAgbGF0ZXN0X2Rlc2t0b3AgPSBOb25lCi0gICAgZm9yIGxpbmUgaW4gc3VicHJvY2Vzcy5Qb3BlbihbJ3hjb2RlYnVpbGQnLCAnLXNob3dzZGtzJ10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dDoKLSAgICAgICAgbWF0Y2ggPSBzZGtfcmUubWF0Y2gobGluZSkKLSAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICBpZiAnT1MgWCcgaW4gbGluZToKLSAgICAgICAgICAgICAgICBsYXRlc3RfZGVza3RvcCA9IG1hdGNoLmdyb3VwKDEpCi0KLSAgICByZXR1cm4gbGF0ZXN0X2Rlc2t0b3AKLQotZGVza3RvcF9zZGsgPSBsYXRlc3Rfc2RrcygpCi0KLWNsYXNzIGRlc2t0b3BfcGxhdGZvcm1fMzIoUGxhdGZvcm0pOgotICAgIHNkaz0nbWFjb3N4JwotICAgIGFyY2ggPSAnaTM4NicKLSAgICBuYW1lID0gJ21hYzMyJwotICAgIHRyaXBsZSA9ICdpMzg2LWFwcGxlLWRhcndpbjEwJwotICAgIHNka3Jvb3QgPSBkZXNrdG9wX3Nka19pbmZvWydQYXRoJ10KLQotICAgIHByZWZpeCA9ICIjaWYgZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoX194ODZfNjRfXylcblxuIgotICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgotCi1jbGFzcyBkZXNrdG9wX3BsYXRmb3JtXzY0KFBsYXRmb3JtKToKLSAgICBzZGs9J21hY29zeCcKLSAgICBhcmNoID0gJ3g4Nl82NCcKLSAgICBuYW1lID0gJ21hYycKLSAgICB0cmlwbGUgPSAneDg2XzY0LWFwcGxlLWRhcndpbjEwJwotICAgIHNka3Jvb3QgPSBkZXNrdG9wX3Nka19pbmZvWydQYXRoJ10KLQotICAgIHByZWZpeCA9ICIjaWYgIWRlZmluZWQoX19pMzg2X18pICYmIGRlZmluZWQoX194ODZfNjRfXylcblxuIgotICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgotCi1kZWYgbW92ZV9maWxlKHNyY19kaXIsIGRzdF9kaXIsIGZpbGVuYW1lLCBmaWxlX3N1ZmZpeD1Ob25lLCBwcmVmaXg9JycsIHN1ZmZpeD0nJyk6Ci0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRzdF9kaXIpOgotICAgICAgICBvcy5tYWtlZGlycyhkc3RfZGlyKQotCi0gICAgb3V0X2ZpbGVuYW1lID0gZmlsZW5hbWUKLQotICAgIGlmIGZpbGVfc3VmZml4OgotICAgICAgICBzcGxpdF9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKLSAgICAgICAgb3V0X2ZpbGVuYW1lID0gICIlc18lcyVzIiAlIChzcGxpdF9uYW1lWzBdLCBmaWxlX3N1ZmZpeCwgc3BsaXRfbmFtZVsxXSkKLQotICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3JjX2RpciwgZmlsZW5hbWUpKSBhcyBpbl9maWxlOgotICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRzdF9kaXIsIG91dF9maWxlbmFtZSksICd3JykgYXMgb3V0X2ZpbGU6Ci0gICAgICAgICAgICBpZiBwcmVmaXg6Ci0gICAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUocHJlZml4KQotCi0gICAgICAgICAgICBvdXRfZmlsZS53cml0ZShpbl9maWxlLnJlYWQoKSkKLQotICAgICAgICAgICAgaWYgc3VmZml4OgotICAgICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHN1ZmZpeCkKLQotaGVhZGVyc19zZWVuID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3Qoc2V0KQotCi1kZWYgbW92ZV9zb3VyY2VfdHJlZShzcmNfZGlyLCBkZXN0X2RpciwgZGVzdF9pbmNsdWRlX2RpciwgYXJjaD1Ob25lLCBwcmVmaXg9Tm9uZSwgc3VmZml4PU5vbmUpOgotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNyY19kaXIsIGZvbGxvd2xpbmtzPVRydWUpOgotICAgICAgICByZWxyb290ID0gb3MucGF0aC5yZWxwYXRoKHJvb3Qsc3JjX2RpcikKLQotICAgICAgICBkZWYgbW92ZV9kaXIoYXJjaCwgcHJlZml4PScnLCBzdWZmaXg9JycsIGZpbGVzPVtdKToKLSAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGVfc3VmZml4ID0gTm9uZQotICAgICAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoJy5oJyk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGRlc3RfaW5jbHVkZV9kaXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3N1ZmZpeCA9IGFyY2gKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyY2g6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc19zZWVuW2ZpbGVdLmFkZChhcmNoKQotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZV9maWxlKHJvb3QsIGRlc3RfaW5jbHVkZV9kaXIsIGZpbGUsIGFyY2gsIHByZWZpeD1wcmVmaXgsIHN1ZmZpeD1zdWZmaXgpCi0KLSAgICAgICAgICAgICAgICBlbGlmIGRlc3RfZGlyOgotICAgICAgICAgICAgICAgICAgICBvdXRyb290ID0gb3MucGF0aC5qb2luKGRlc3RfZGlyLCByZWxyb290KQotICAgICAgICAgICAgICAgICAgICBtb3ZlX2ZpbGUocm9vdCwgb3V0cm9vdCwgZmlsZSwgcHJlZml4PXByZWZpeCwgc3VmZml4PXN1ZmZpeCkKLQotICAgICAgICBpZiByZWxyb290ID09ICcuJzoKLSAgICAgICAgICAgIG1vdmVfZGlyKGFyY2g9YXJjaCwKLSAgICAgICAgICAgICAgICAgICAgIGZpbGVzPWZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgcHJlZml4PXByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD1zdWZmaXgpCi0gICAgICAgIGVsaWYgcmVscm9vdCA9PSAneDg2JzoKLSAgICAgICAgICAgIG1vdmVfZGlyKGFyY2g9J2kzODYnLAotICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSIjaWYgZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoX194ODZfNjRfXylcblxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD0iXG5cbiNlbmRpZiIsCi0gICAgICAgICAgICAgICAgICAgICBmaWxlcz1maWxlcykKLSAgICAgICAgICAgIG1vdmVfZGlyKGFyY2g9J3g4Nl82NCcsCi0gICAgICAgICAgICAgICAgICAgICBwcmVmaXg9IiNpZiAhZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKVxuXG4iLAotICAgICAgICAgICAgICAgICAgICAgc3VmZml4PSJcblxuI2VuZGlmIiwKLSAgICAgICAgICAgICAgICAgICAgIGZpbGVzPWZpbGVzKQotCi1kZWYgYnVpbGRfdGFyZ2V0KHBsYXRmb3JtKToKLSAgICBkZWYgeGNydW5fY21kKGNtZCk6Ci0gICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3hjcnVuJywgJy1zZGsnLCBwbGF0Zm9ybS5zZGtyb290LCAnLWZpbmQnLCBjbWRdKS5zdHJpcCgpCi0KLSAgICBidWlsZF9kaXIgPSAnYnVpbGRfJyArIHBsYXRmb3JtLm5hbWUKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYnVpbGRfZGlyKToKLSAgICAgICAgb3MubWFrZWRpcnMoYnVpbGRfZGlyKQotICAgICAgICBlbnYgPSBkaWN0KENDPXhjcnVuX2NtZCgnY2xhbmcnKSwKLSAgICAgICAgICAgICAgICAgICBMRD14Y3J1bl9jbWQoJ2xkJyksCi0gICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSctYXJjaCAlcyAtaXN5c3Jvb3QgJXMgLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuNicgJSAocGxhdGZvcm0uYXJjaCwgcGxhdGZvcm0uc2Rrcm9vdCkpCi0gICAgICAgIHdvcmtpbmdfZGlyPW9zLmdldGN3ZCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmNoZGlyKGJ1aWxkX2RpcikKLSAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJy4uL2NvbmZpZ3VyZScsICctaG9zdCcsIHBsYXRmb3JtLnRyaXBsZV0sIGVudj1lbnYpCi0gICAgICAgICAgICBtb3ZlX3NvdXJjZV90cmVlKCcuJywgTm9uZSwgJy4uL29zeC9pbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaD1wbGF0Zm9ybS5hcmNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9cGxhdGZvcm0ucHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9cGxhdGZvcm0uc3VmZml4KQotICAgICAgICAgICAgbW92ZV9zb3VyY2VfdHJlZSgnLi9pbmNsdWRlJywgTm9uZSwgJy4uL29zeC9pbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaD1wbGF0Zm9ybS5hcmNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9cGxhdGZvcm0ucHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9cGxhdGZvcm0uc3VmZml4KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIod29ya2luZ19kaXIpCi0KLSAgICAgICAgZm9yIGhlYWRlcl9uYW1lLCBhcmNocyBpbiBoZWFkZXJzX3NlZW4uaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBiYXNlbmFtZSwgc3VmZml4ID0gb3MucGF0aC5zcGxpdGV4dChoZWFkZXJfbmFtZSkKLQotZGVmIG1haW4oKToKLSAgICBtb3ZlX3NvdXJjZV90cmVlKCdzcmMnLCAnb3N4L3NyYycsICdvc3gvaW5jbHVkZScpCi0gICAgbW92ZV9zb3VyY2VfdHJlZSgnaW5jbHVkZScsIE5vbmUsICdvc3gvaW5jbHVkZScpCi0gICAgYnVpbGRfdGFyZ2V0KGRlc2t0b3BfcGxhdGZvcm1fMzIpCi0gICAgYnVpbGRfdGFyZ2V0KGRlc2t0b3BfcGxhdGZvcm1fNjQpCi0KLSAgICBmb3IgaGVhZGVyX25hbWUsIGFyY2hzIGluIGhlYWRlcnNfc2Vlbi5pdGVyaXRlbXMoKToKLSAgICAgICAgYmFzZW5hbWUsIHN1ZmZpeCA9IG9zLnBhdGguc3BsaXRleHQoaGVhZGVyX25hbWUpCi0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ29zeC9pbmNsdWRlJywgaGVhZGVyX25hbWUpLCAndycpIGFzIGhlYWRlcjoKLSAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzOgotICAgICAgICAgICAgICAgIGhlYWRlci53cml0ZSgnI2luY2x1ZGUgPCVzXyVzJXM+XG4nICUgKGJhc2VuYW1lLCBhcmNoLCBzdWZmaXgpKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmluCmluZGV4IDJjMzZlMzYuLjlkNzQ3ZTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4KQEAgLTEsNyArMSw3IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEyLjIgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTMuNCBmcm9tIE1ha2VmaWxlLmFtLgogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTE1LDIzICsxNSw1MSBAQAogQFNFVF9NQUtFQAogCiBWUEFUSCA9IEBzcmNkaXJACi1hbV9fbWFrZV9kcnlydW4gPSBcCi0gIHsgXAotICAgIGFtX19kcnk9bm87IFwKK2FtX19pc19nbnVfbWFrZSA9IHRlc3QgLW4gJyQoTUFLRUZJTEVfTElTVCknICYmIHRlc3QgLW4gJyQoTUFLRUxFVkVMKScKK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKyAgICAgID8pIDs7IFwKKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisgICAgICAgICBleGl0IDE7OyBcCisgIGVzYWM7IFwKKyAgaGFzX29wdD1ubzsgXAorICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisgIGVsc2UgXAogICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAogICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAotICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCi0gICAgICAqKSBcCi0gICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCi0gICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAotICAgICAgICAgICAgKj0qfC0tKikgOzsgXAotICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCi0gICAgICAgICAgZXNhYzsgXAotICAgICAgICBkb25lOzsgXAorICAgICAgICBicz1cXDsgXAorICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKICAgICBlc2FjOyBcCi0gICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKLSAgfQorICBmaTsgXAorICBza2lwX25leHQ9bm87IFwKKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorICB7IFwKKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorICB9OyBcCisgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICBlc2FjOyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorICAgIGVzYWM7IFwKKyAgZG9uZTsgXAorICB0ZXN0ICQkaGFzX29wdCA9IHllcworYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCiBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAogcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQApAQCAtNTIsNyArODAsNyBAQAogaG9zdF90cmlwbGV0ID0gQGhvc3RACiB0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACiBzdWJkaXIgPSBpbmNsdWRlCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKIAkkKHNyY2RpcikvZmZpLmguaW4KIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FzbWNmaS5tNCBcCkBAIC03NSw2ICsxMDMsMTggQEAKIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvZmZpY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9IGZmaS5oIGZmaXRhcmdldC5oCiBDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCiBTT1VSQ0VTID0KIERJU1RfU09VUkNFUyA9CiBhbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKQEAgLTExMSwxMiArMTUxLDMwIEBACiAgIH0KIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChpbmNsdWRlc2RpcikiCiBIRUFERVJTID0gJChub2Rpc3RfaW5jbHVkZXNfSEVBREVSUykKK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCisjIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCisjIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKKyMgKm5vdCogcHJlc2VydmVkLgorYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCisgIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKKyAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKyAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCisnCisjIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCisjIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKKyMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCithbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAogRVRBR1MgPSBldGFncwogQ1RBR1MgPSBjdGFncwogRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKIEFDTE9DQUwgPSBAQUNMT0NBTEAKIEFMTE9DQSA9IEBBTExPQ0FACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAogQU1fTFRMREZMQUdTID0gQEFNX0xUTERGTEFHU0AKIEFNX1JVTlRFU1RGTEFHUyA9IEBBTV9SVU5URVNURkxBR1NACiBBUiA9IEBBUkAKQEAgLTEzMiw2ICsxOTAsMTAgQEAKIENGTEFHUyA9IEBDRkxBR1NACiBDUFAgPSBAQ1BQQAogQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKIERFRlMgPSBAREVGU0AKIERFUERJUiA9IEBERVBESVJACkBAIC0xNDcsNiArMjA5LDcgQEAKIEZHUkVQID0gQEZHUkVQQAogR1JFUCA9IEBHUkVQQAogSEFWRV9MT05HX0RPVUJMRSA9IEBIQVZFX0xPTkdfRE9VQkxFQAorSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UID0gQEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVEAKIElOU1RBTEwgPSBASU5TVEFMTEAKIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQApAQCAtMTkzLDYgKzI1Niw3IEBACiBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKIGFjX2N0X0FSID0gQGFjX2N0X0FSQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAogYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QApAQCAtMzE1LDI2ICszNzksMTUgQEAKIAlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAogCWRpcj0nJChERVNURElSKSQoaW5jbHVkZXNkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQogCi1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAotCW1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogVEFHUworSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IHRhZ3MtYW0KK1RBR1M6IHRhZ3MKIAotVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKIAlzZXQgeDsgXAogCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAogCXNoaWZ0OyBcCiAJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKQEAgLTM0NiwxNSArMzk5LDExIEBACiAJICAgICAgJCR1bmlxdWU7IFwKIAkgIGZpOyBcCiAJZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorY3RhZ3M6IGN0YWdzLWFtCisKK0NUQUdTOiBjdGFncworY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCiAJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCiAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCiAJICAgICAkJHVuaXF1ZQpAQCAtMzYzLDkgKzQxMiwxMCBAQAogCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCiAJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCiAJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCitjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCiAKLWNzY29wZWxpc3Q6ICAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApJzsgXAorY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCiAJY2FzZSAiJChzcmNkaXIpIiBpbiBcCiAJICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCiAJICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXApAQCAtNTE3LDE4ICs1NjcsMTkgQEAKIAogLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAogCi0uUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0IGN0YWdzIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtbm9kaXN0X2luY2x1ZGVzSEVBREVSUyBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTCisuUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtbm9kaXN0X2luY2x1ZGVzSEVBREVSUyBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIFwKKwl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLW5vZGlzdF9pbmNsdWRlc0hFQURFUlMKIAogCiAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluCmluZGV4IGE1MTU4M2IuLjkzYzc3NmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmkuaC5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpLmguaW4KQEAgLTIyMSw2ICsyMjEsMTEgQEAKICNlbmRpZgogfSBmZmlfY2lmOwogCisjaWYgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UCisvKiBVc2VkIHRvIGFkanVzdCBzaXplL2FsaWdubWVudCBvZiBmZmkgdHlwZXMuICAqLwordm9pZCBmZmlfcHJlcF90eXBlcyAoZmZpX2FiaSBhYmkpOworIyBlbmRpZgorCiAvKiBVc2VkIGludGVybmFsbHksIGJ1dCBvdmVycmlkZGVuIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyAqLwogZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfY29yZShmZmlfY2lmICpjaWYsCiAJCQkgICAgIGZmaV9hYmkgYWJpLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaV9jb21tb24uaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmgKaW5kZXggNjUwY2E2OS4uMzdmNWE5ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaV9jb21tb24uaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpX2NvbW1vbi5oCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGZmaV9jb21tb24uaCAtIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiAgQW50aG9ueSBHcmVlbgorICAgZmZpX2NvbW1vbi5oIC0gQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzICBBbnRob255IEdyZWVuCiAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCiAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTYgIFJlZCBIYXQsIEluYy4KICAgICAgICAgICAgICAgICAgIApAQCAtMTksMTAgKzE5LDE0IEBACiAvKiBEbyBub3QgbW92ZSB0aGlzLiBTb21lIHZlcnNpb25zIG9mIEFJWCBhcmUgdmVyeSBwaWNreSBhYm91dCB3aGVyZQogICAgdGhpcyBpcyBwb3NpdGlvbmVkLiAqLwogI2lmZGVmIF9fR05VQ19fCi0vKiBtaW5ndzY0IGRlZmluZXMgdGhpcyBhbHJlYWR5IGluIG1hbGxvYy5oLiAqLwotI2lmbmRlZiBhbGxvY2EKLSMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCi0jZW5kaWYKKyMgaWYgSEFWRV9BTExPQ0FfSAorIyAgaW5jbHVkZSA8YWxsb2NhLmg+CisjIGVsc2UKKyAgLyogbWluZ3c2NCBkZWZpbmVzIHRoaXMgYWxyZWFkeSBpbiBtYWxsb2MuaC4gKi8KKyMgIGlmbmRlZiBhbGxvY2EKKyMgICAgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjICBlbmRpZgorIyBlbmRpZgogIyBkZWZpbmUgTUFZQkVfVU5VU0VEIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogI2Vsc2UKICMgZGVmaW5lIE1BWUJFX1VOVVNFRApAQCAtMzAsMTcgKzM0LDE3IEBACiAjICBpbmNsdWRlIDxhbGxvY2EuaD4KICMgZWxzZQogIyAgaWZkZWYgX0FJWAotICNwcmFnbWEgYWxsb2NhCisjICAgcHJhZ21hIGFsbG9jYQogIyAgZWxzZQogIyAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCiAjICAgIGlmZGVmIF9NU0NfVkVSCiAjICAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKICMgICAgZWxzZQogY2hhciAqYWxsb2NhICgpOwotIyAgICBlbmRpZgogIyAgIGVuZGlmCiAjICBlbmRpZgogIyBlbmRpZgorIyBlbmRpZgogI2VuZGlmCiAKIC8qIENoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIG1lbWNweS4gKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5zdGFsbC1zaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5zdGFsbC1zaAppbmRleCA2NzgxYjk4Li4zNzdiYjg2IDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luc3RhbGwtc2gKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbnN0YWxsLXNoCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQogCi1zY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCitzY3JpcHR2ZXJzaW9uPTIwMTEtMTEtMjAuMDc7ICMgVVRDCiAKICMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcwogIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKQEAgLTM1LDcgKzM1LDcgQEAKICMgRlNGIGNoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbi4KICMKICMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKLSMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyMgJ21ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKICMgd2hlbiB0aGVyZSBpcyBubyBNYWtlZmlsZS4KICMKICMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgpAQCAtMTU2LDYgKzE1NiwxMCBAQAogICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKIAogICAgIC10KSBkc3RfYXJnPSQyCisJIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKwljYXNlICRkc3RfYXJnIGluCisJICAtKiB8IFs9XChcKSFdKSBkc3RfYXJnPS4vJGRzdF9hcmc7OworCWVzYWMKIAlzaGlmdDs7CiAKICAgICAtVCkgbm9fdGFyZ2V0X2RpcmVjdG9yeT10cnVlOzsKQEAgLTE4Niw2ICsxOTAsMTAgQEAKICAgICBmaQogICAgIHNoaWZ0ICMgYXJnCiAgICAgZHN0X2FyZz0kYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgICBjYXNlICRkc3RfYXJnIGluCisgICAgICAtKiB8IFs9XChcKSFdKSBkc3RfYXJnPS4vJGRzdF9hcmc7OworICAgIGVzYWMKICAgZG9uZQogZmkKIApAQCAtMTk0LDEzICsyMDIsMTcgQEAKICAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKICAgICBleGl0IDEKICAgZmkKLSAgIyBJdCdzIE9LIHRvIGNhbGwgYGluc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICMgSXQncyBPSyB0byBjYWxsICdpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgogICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgogICBleGl0IDAKIGZpCiAKIGlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgotICB0cmFwICcoZXhpdCAkPyk7IGV4aXQnIDEgMiAxMyAxNQorICBkb19leGl0PScoZXhpdCAkcmV0KTsgZXhpdCAkcmV0JworICB0cmFwICJyZXQ9MTI5OyAkZG9fZXhpdCIgMQorICB0cmFwICJyZXQ9MTMwOyAkZG9fZXhpdCIgMgorICB0cmFwICJyZXQ9MTQxOyAkZG9fZXhpdCIgMTMKKyAgdHJhcCAicmV0PTE0MzsgJGRvX2V4aXQiIDE1CiAKICAgIyBTZXQgdW1hc2sgc28gYXMgbm90IHRvIGNyZWF0ZSB0ZW1wcyB3aXRoIHRvby1nZW5lcm91cyBtb2Rlcy4KICAgIyBIb3dldmVyLCAnc3RyaXAnIHJlcXVpcmVzIGJvdGggcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRlbXBzLgpAQCAtMjI4LDkgKzI0MCw5IEBACiAKIGZvciBzcmMKIGRvCi0gICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KICAgY2FzZSAkc3JjIGluCi0gICAgLSopIHNyYz0uLyRzcmM7OworICAgIC0qIHwgWz1cKFwpIV0pIHNyYz0uLyRzcmM7OwogICBlc2FjCiAKICAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCkBAIC0yNTIsMTIgKzI2NCw3IEBACiAgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCiAgICAgICBleGl0IDEKICAgICBmaQotCiAgICAgZHN0PSRkc3RfYXJnCi0gICAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgotICAgIGNhc2UgJGRzdCBpbgotICAgICAgLSopIGRzdD0uLyRkc3Q7OwotICAgIGVzYWMKIAogICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKICAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgpAQCAtMzQ3LDcgKzM1NCw3IEBACiAJICAgICAgaWYgdGVzdCAteiAiJGRpcl9hcmciIHx8IHsKIAkJICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KIAkJICAgIyBIUC1VWCAxMS4yMyBhbmQgSVJJWCA2LjUgbWtkaXIgLW0gLXAgc2V0cyBncm91cC0gb3IKLQkJICAgIyBvdGhlci13cml0ZWFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisJCSAgICMgb3RoZXItd3JpdGFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCiAJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KIAkJICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0bXBkaXIiYAogCQkgICBjYXNlICRsc19sZF90bXBkaXIgaW4KQEAgLTM4NSw3ICszOTIsNyBAQAogCiAgICAgICBjYXNlICRkc3RkaXIgaW4KIAkvKikgcHJlZml4PScvJzs7Ci0JLSopIHByZWZpeD0nLi8nOzsKKwlbLT1cKFwpIV0qKSBwcmVmaXg9Jy4vJzs7CiAJKikgIHByZWZpeD0nJzs7CiAgICAgICBlc2FjCiAKQEAgLTQwMyw3ICs0MTAsNyBAQAogCiAgICAgICBmb3IgZAogICAgICAgZG8KLQl0ZXN0IC16ICIkZCIgJiYgY29udGludWUKKwl0ZXN0IFgiJGQiID0gWCAmJiBjb250aW51ZQogCiAJcHJlZml4PSRwcmVmaXgkZAogCWlmIHRlc3QgLWQgIiRwcmVmaXgiOyB0aGVuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnBjLmluCmluZGV4IGMyZTFjN2IuLmVkZjZmZGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnBjLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnBjLmluCkBAIC0xLDEwICsxLDExIEBACiBwcmVmaXg9QHByZWZpeEAKIGV4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKIGxpYmRpcj1AbGliZGlyQAordG9vbGV4ZWNsaWJkaXI9QHRvb2xleGVjbGliZGlyQAogaW5jbHVkZWRpcj0ke2xpYmRpcn0vQFBBQ0tBR0VfTkFNRUAtQFBBQ0tBR0VfVkVSU0lPTkAvaW5jbHVkZQogCiBOYW1lOiBAUEFDS0FHRV9OQU1FQAogRGVzY3JpcHRpb246IExpYnJhcnkgc3VwcG9ydGluZyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZXMKIFZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACi1MaWJzOiAtTCR7bGliZGlyfSAtbGZmaQorTGliczogLUwke3Rvb2xleGVjbGliZGlyfSAtbGZmaQogQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE0YzM5YTIuLjFjZjM5NmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNyw0NzMgKzcsNDQ4IEBACiAJb2JqZWN0cyA9IHsKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJNkM0M0NCREMxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NCQkQxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jICovOyB9OwotCQk2QzQzQ0JERDE1MzRGNzZGMDAxNjIzNjQgLyogc3lzdi5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NCQkYxNTM0Rjc2RjAwMTYyMzY0IC8qIHN5c3YuUyAqLzsgfTsKLQkJNkM0M0NCREUxNTM0Rjc2RjAwMTYyMzY0IC8qIHRyYW1wb2xpbmUuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQkMwMTUzNEY3NkYwMDE2MjM2NCAvKiB0cmFtcG9saW5lLlMgKi87IH07Ci0JCTZDNDNDQkU2MTUzNEY3NkYwMDE2MjM2NCAvKiBkYXJ3aW4uUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQkM5MTUzNEY3NkYwMDE2MjM2NCAvKiBkYXJ3aW4uUyAqLzsgfTsKLQkJNkM0M0NCRTgxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NCQ0IxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jICovOyB9OwotCQk2QzQzQ0MxRjE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luLlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MwNTE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luLlMgKi87IH07Ci0JCTZDNDNDQzIwMTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW42NC5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMDYxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbjY0LlMgKi87IH07Ci0JCTZDNDNDQzIxMTUzNEY3NzgwMDE2MjM2NCAvKiBmZmkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzA3MTUzNEY3NzgwMDE2MjM2NCAvKiBmZmkuYyAqLzsgfTsKLQkJNkM0M0NDMjIxNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaTY0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MwODE1MzRGNzc4MDAxNjIzNjQgLyogZmZpNjQuYyAqLzsgfTsKLQkJNkM0M0NDMkYxNTM0RjdCRTAwMTYyMzY0IC8qIGNsb3N1cmVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyODE1MzRGN0JFMDAxNjIzNjQgLyogY2xvc3VyZXMuYyAqLzsgfTsKLQkJNkM0M0NDMzAxNTM0RjdCRTAwMTYyMzY0IC8qIGNsb3N1cmVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyODE1MzRGN0JFMDAxNjIzNjQgLyogY2xvc3VyZXMuYyAqLzsgfTsKLQkJNkM0M0NDMzUxNTM0RjdCRTAwMTYyMzY0IC8qIGphdmFfcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMkIxNTM0RjdCRTAwMTYyMzY0IC8qIGphdmFfcmF3X2FwaS5jICovOyB9OwotCQk2QzQzQ0MzNjE1MzRGN0JFMDAxNjIzNjQgLyogamF2YV9yYXdfYXBpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyQjE1MzRGN0JFMDAxNjIzNjQgLyogamF2YV9yYXdfYXBpLmMgKi87IH07Ci0JCTZDNDNDQzM3MTUzNEY3QkUwMDE2MjM2NCAvKiBwcmVwX2NpZi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMkMxNTM0RjdCRTAwMTYyMzY0IC8qIHByZXBfY2lmLmMgKi87IH07Ci0JCTZDNDNDQzM4MTUzNEY3QkUwMDE2MjM2NCAvKiBwcmVwX2NpZi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMkMxNTM0RjdCRTAwMTYyMzY0IC8qIHByZXBfY2lmLmMgKi87IH07Ci0JCTZDNDNDQzM5MTUzNEY3QkUwMDE2MjM2NCAvKiByYXdfYXBpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyRDE1MzRGN0JFMDAxNjIzNjQgLyogcmF3X2FwaS5jICovOyB9OwotCQk2QzQzQ0MzQTE1MzRGN0JFMDAxNjIzNjQgLyogcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMkQxNTM0RjdCRTAwMTYyMzY0IC8qIHJhd19hcGkuYyAqLzsgfTsKLQkJNkM0M0NDM0IxNTM0RjdCRTAwMTYyMzY0IC8qIHR5cGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyRTE1MzRGN0JFMDAxNjIzNjQgLyogdHlwZXMuYyAqLzsgfTsKLQkJNkM0M0NDM0MxNTM0RjdCRTAwMTYyMzY0IC8qIHR5cGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyRTE1MzRGN0JFMDAxNjIzNjQgLyogdHlwZXMuYyAqLzsgfTsKLQkJNkM0M0NDOTcxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOEQxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDOTgxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzhFMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0M5OTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzhGMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDOUExNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV94ODZfNjQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzkwMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfeDg2XzY0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0M5QjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M5MTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggKi87IH07Ci0JCTZDNDNDQzlDMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOTIxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggKi87IH07Ci0JCTZDNDNDQzlEMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfeDg2XzY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M5MzE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX3g4Nl82NC5oICovOyB9OwotCQk2QzQzQ0M5RTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M5NDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0M5RjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzk1MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQTAxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF94ODZfNjQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzk2MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfeDg2XzY0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NBRDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBMjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NBRTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2FybXY3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBMzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2FybXY3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NBRjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQTQxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0IwMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQTUxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NCMTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBNjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggKi87IH07Ci0JCTZDNDNDQ0IyMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfYXJtdjcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0E3MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfYXJtdjcuaCAqLzsgfTsKLQkJNkM0M0NDQjMxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBODE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCAqLzsgfTsKLQkJNkM0M0NDQjQxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQTkxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQjUxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0FBMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NCNjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybXY3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBQjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybXY3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NCNzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0FDMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJREJGQTcxNEExODdGMUQ4NjAwQTc2MjYyIC8qIGZmaS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxM0UxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaS5oICovOyB9OworCQlEQkZBNzE0QjE4N0YxRDg2MDBBNzYyNjIgLyogZmZpX2NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxM0YxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaV9jb21tb24uaCAqLzsgfTsKKwkJREJGQTcxNEMxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaWNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDAxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaWNvbmZpZy5oICovOyB9OworCQlEQkZBNzE0RDE4N0YxRDg2MDBBNzYyNjIgLyogZmZpdGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0MTE4N0YxRDg2MDBBNzYyNjIgLyogZmZpdGFyZ2V0LmggKi87IH07CisJCURCRkE3MTRFMTg3RjFEODYwMEE3NjI2MiAvKiBjbG9zdXJlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDMxODdGMUQ4NjAwQTc2MjYyIC8qIGNsb3N1cmVzLmMgKi87IH07CisJCURCRkE3MTRGMTg3RjFEODYwMEE3NjI2MiAvKiBjbG9zdXJlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDMxODdGMUQ4NjAwQTc2MjYyIC8qIGNsb3N1cmVzLmMgKi87IH07CisJCURCRkE3MTU2MTg3RjFEODYwMEE3NjI2MiAvKiBwcmVwX2NpZi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDcxODdGMUQ4NjAwQTc2MjYyIC8qIHByZXBfY2lmLmMgKi87IH07CisJCURCRkE3MTU3MTg3RjFEODYwMEE3NjI2MiAvKiBwcmVwX2NpZi5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDcxODdGMUQ4NjAwQTc2MjYyIC8qIHByZXBfY2lmLmMgKi87IH07CisJCURCRkE3MTU4MTg3RjFEODYwMEE3NjI2MiAvKiByYXdfYXBpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0ODE4N0YxRDg2MDBBNzYyNjIgLyogcmF3X2FwaS5jICovOyB9OworCQlEQkZBNzE1OTE4N0YxRDg2MDBBNzYyNjIgLyogcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDgxODdGMUQ4NjAwQTc2MjYyIC8qIHJhd19hcGkuYyAqLzsgfTsKKwkJREJGQTcxNUExODdGMUQ4NjAwQTc2MjYyIC8qIHR5cGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0OTE4N0YxRDg2MDBBNzYyNjIgLyogdHlwZXMuYyAqLzsgfTsKKwkJREJGQTcxNUIxODdGMUQ4NjAwQTc2MjYyIC8qIHR5cGVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0OTE4N0YxRDg2MDBBNzYyNjIgLyogdHlwZXMuYyAqLzsgfTsKKwkJREJGQTcxNzcxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm02NC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNkMxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm02NC5jICovOyB9OworCQlEQkZBNzE3ODE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm02NC5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNkQxODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtNjQuUyAqLzsgfTsKKwkJREJGQTcxNzkxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm12Ny5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNkYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm12Ny5jICovOyB9OworCQlEQkZBNzE3QTE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm12Ny5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNzAxODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtdjcuUyAqLzsgfTsKKwkJREJGQTcxN0IxODdGMUQ5QjAwQTc2MjYyIC8qIHRyYW1wb2xpbmVfYXJtdjcuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTcxMTg3RjFEOUIwMEE3NjI2MiAvKiB0cmFtcG9saW5lX2FybXY3LlMgKi87IH07CisJCURCRkE3MTdDMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTczMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyAqLzsgfTsKKwkJREJGQTcxN0QxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE3NDE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyAqLzsgfTsKKwkJREJGQTcxN0UxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNzUxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jICovOyB9OworCQlEQkZBNzE3RjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2kzODYuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTc2MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jICovOyB9OworCQlEQkZBNzE4RTE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTgyMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5oICovOyB9OworCQlEQkZBNzE4RjE4N0YxREExMDBBNzYyNjIgLyogZmZpX3g4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxODMxODdGMURBMTAwQTc2MjYyIC8qIGZmaV94ODZfNjQuaCAqLzsgfTsKKwkJREJGQTcxOTAxODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ19pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4NDE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX2kzODYuaCAqLzsgfTsKKwkJREJGQTcxOTExODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ194ODZfNjQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTg1MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfeDg2XzY0LmggKi87IH07CisJCURCRkE3MTkyMTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxODYxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF9pMzg2LmggKi87IH07CisJCURCRkE3MTkzMTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfeDg2XzY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4NzE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X3g4Nl82NC5oICovOyB9OworCQlEQkZBNzE5NDE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4QTE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgKi87IH07CisJCURCRkE3MTk1MTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxOEIxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgKi87IH07CisJCURCRkE3MTk2MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MThDMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyAqLzsgfTsKKwkJREJGQTcxOTcxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4RDE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuYyAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCisvKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJREIxM0IxNjQxODQ5REYxRTAwMTBGNDJEIC8qIENvcHlGaWxlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSA4OworCQkJZHN0UGF0aCA9ICJpbmNsdWRlLyQoUFJPRFVDVF9OQU1FKSI7CisJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTY7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKKwkJfTsKKy8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTZDNDNDQjNEMTUzNEU5RDEwMDE2MjM2NCAvKiBsaWJmZmkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGliZmZpLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTZDNDNDQkJEMTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQkJGMTUzNEY3NkYwMDE2MjM2NCAvKiBzeXN2LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IHN5c3YuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NCQzAxNTM0Rjc2RjAwMTYyMzY0IC8qIHRyYW1wb2xpbmUuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gdHJhbXBvbGluZS5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0JDOTE1MzRGNzZGMDAxNjIzNjQgLyogZGFyd2luLlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IGRhcndpbi5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0JDQjE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0MwNTE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luLlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IGRhcndpbi5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0MwNjE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luNjQuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gZGFyd2luNjQuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDMDcxNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDMDgxNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaTY0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaTY0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzI4MTUzNEY3QkUwMDE2MjM2NCAvKiBjbG9zdXJlcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBjbG9zdXJlcy5jOyBwYXRoID0gc3JjL2Nsb3N1cmVzLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKLQkJNkM0M0NDMkIxNTM0RjdCRTAwMTYyMzY0IC8qIGphdmFfcmF3X2FwaS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBqYXZhX3Jhd19hcGkuYzsgcGF0aCA9IHNyYy9qYXZhX3Jhd19hcGkuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwotCQk2QzQzQ0MyQzE1MzRGN0JFMDAxNjIzNjQgLyogcHJlcF9jaWYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gcHJlcF9jaWYuYzsgcGF0aCA9IHNyYy9wcmVwX2NpZi5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07Ci0JCTZDNDNDQzJEMTUzNEY3QkUwMDE2MjM2NCAvKiByYXdfYXBpLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHJhd19hcGkuYzsgcGF0aCA9IHNyYy9yYXdfYXBpLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKLQkJNkM0M0NDMkUxNTM0RjdCRTAwMTYyMzY0IC8qIHR5cGVzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHR5cGVzLmM7IHBhdGggPSBzcmMvdHlwZXMuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwotCQk2QzQzQ0M4RDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M4RTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfY29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzhGMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M5MDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzkxMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzkyMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M5MzE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzk0MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzk1MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M5NjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0EyMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0EzMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfYXJtdjcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2FybXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0E0MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9jb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQTUxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0E2MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0E3MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfYXJtdjcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX2FybXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0E4MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBOTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBQTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfYXJtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0FCMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtdjcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X2FybXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0FDMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNkY5ODBCQTE0NzM4NjEzMDAwOEYxMjEgLyogbGliZmZpLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmZmaS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlEQjEzQjE2NjE4NDlERjFFMDAxMEY0MkQgLyogbGliZmZpLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmZmaS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlEQjEzQjE5MTE4NDlERjUxMDAxMEY0MkQgLyogZmZpLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gZmZpLmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlEQkZBNzEzRTE4N0YxRDg2MDBBNzYyNjIgLyogZmZpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzEzRjE4N0YxRDg2MDBBNzYyNjIgLyogZmZpX2NvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfY29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTQwMTg3RjFEODYwMEE3NjI2MiAvKiBmZmljb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTQxMTg3RjFEODYwMEE3NjI2MiAvKiBmZml0YXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTQzMTg3RjFEODYwMEE3NjI2MiAvKiBjbG9zdXJlcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjbG9zdXJlcy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE0NTE4N0YxRDg2MDBBNzYyNjIgLyogZGxtYWxsb2MuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZGxtYWxsb2MuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNDcxODdGMUQ4NjAwQTc2MjYyIC8qIHByZXBfY2lmLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHByZXBfY2lmLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTQ4MTg3RjFEODYwMEE3NjI2MiAvKiByYXdfYXBpLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHJhd19hcGkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNDkxODdGMUQ4NjAwQTc2MjYyIC8qIHR5cGVzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHR5cGVzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTVFMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2FybTY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTVGMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtdjcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2FybXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTYwMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2MTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTYyMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmljb25maWdfYXJtNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX2FybTY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTYzMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmljb25maWdfYXJtdjcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX2FybXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTY0MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmljb25maWdfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2NTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpY29uZmlnX3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTY2MTg3RjFEOUIwMEE3NjI2MiAvKiBmZml0YXJnZXRfYXJtNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X2FybTY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTY3MTg3RjFEOUIwMEE3NjI2MiAvKiBmZml0YXJnZXRfYXJtdjcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X2FybXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTY4MTg3RjFEOUIwMEE3NjI2MiAvKiBmZml0YXJnZXRfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2OTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpdGFyZ2V0X3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTZDMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtNjQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpX2FybTY0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTZEMTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybTY0LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IHN5c3ZfYXJtNjQuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNkYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm12Ny5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmlfYXJtdjcuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNzAxODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtdjcuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gc3lzdl9hcm12Ny5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE3MTE4N0YxRDlCMDBBNzYyNjIgLyogdHJhbXBvbGluZV9hcm12Ny5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSB0cmFtcG9saW5lX2FybXY3LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTczMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gZGFyd2luNjRfeDg2XzY0LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTc0MTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBkYXJ3aW5faTM4Ni5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE3NTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaTY0X3g4Nl82NC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE3NjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2kzODYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpX2kzODYuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxODIxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTgzMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV94ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxODQxODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ19pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ19pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTg1MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ194ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxODYxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF9pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF9pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTg3MTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF94ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxOEExODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBkYXJ3aW42NF94ODZfNjQuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxOEIxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IGRhcndpbl9pMzg2LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MThDMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpNjRfeDg2XzY0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MThEMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmlfaTM4Ni5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCi0vKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTZDNDNDQjNBMTUzNEU5RDEwMDE2MjM2NCAvKiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0JCUY2Rjk4MEI3MTQ3Mzg2MTMwMDA4RjEyMSAvKiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCi0JCTZDNDNDQkFGMTUzNEY3NkYwMDE2MjM2NCAvKiBpT1MgKi8gPSB7CisJCURCMTNCMTVCMTg0OURFQjcwMDEwRjQyRCA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NDQTExNTM1MDM5NjAwMTYyMzY0IC8qIGluY2x1ZGUgKi8sCi0JCQkJNkM0M0NCQkIxNTM0Rjc2RjAwMTYyMzY0IC8qIHNyYyAqLywKKwkJCQlEQkZBNzEzQzE4N0YxRDg2MDBBNzYyNjIgLyogZGFyd2luX2NvbW1vbiAqLywKKwkJCQlEQkZBNzE1QzE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luX2lvcyAqLywKKwkJCQlEQkZBNzE4MDE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luX29zeCAqLywKKwkJCQlEQjEzQjE2NzE4NDlERjFFMDAxMEY0MkQgLyogUHJvZHVjdHMgKi8sCiAJCQkpOwotCQkJbmFtZSA9IGlPUzsKLQkJCXBhdGggPSBpb3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQk2QzQzQ0JCQjE1MzRGNzZGMDAxNjIzNjQgLyogc3JjICovID0geworCQlEQjEzQjE2NzE4NDlERjFFMDAxMEY0MkQgLyogUHJvZHVjdHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQkM4MTUzNEY3NkYwMDE2MjM2NCAvKiB4ODYgKi8sCi0JCQkJNkM0M0NCQkMxNTM0Rjc2RjAwMTYyMzY0IC8qIGFybSAqLywKKwkJCQlEQjEzQjE2NjE4NDlERjFFMDAxMEY0MkQgLyogbGliZmZpLmEgKi8sCisJCQkJREIxM0IxOTExODQ5REY1MTAwMTBGNDJEIC8qIGZmaS5keWxpYiAqLywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlEQkZBNzEzQzE4N0YxRDg2MDBBNzYyNjIgLyogZGFyd2luX2NvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREJGQTcxM0QxODdGMUQ4NjAwQTc2MjYyIC8qIGluY2x1ZGUgKi8sCisJCQkJREJGQTcxNDIxODdGMUQ4NjAwQTc2MjYyIC8qIHNyYyAqLywKKwkJCSk7CisJCQlwYXRoID0gImRhcndpbl9jb21tb24iOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJREJGQTcxM0QxODdGMUQ4NjAwQTc2MjYyIC8qIGluY2x1ZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURCRkE3MTNFMTg3RjFEODYwMEE3NjI2MiAvKiBmZmkuaCAqLywKKwkJCQlEQkZBNzEzRjE4N0YxRDg2MDBBNzYyNjIgLyogZmZpX2NvbW1vbi5oICovLAorCQkJCURCRkE3MTQwMTg3RjFEODYwMEE3NjI2MiAvKiBmZmljb25maWcuaCAqLywKKwkJCQlEQkZBNzE0MTE4N0YxRDg2MDBBNzYyNjIgLyogZmZpdGFyZ2V0LmggKi8sCisJCQkpOworCQkJcGF0aCA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlEQkZBNzE0MjE4N0YxRDg2MDBBNzYyNjIgLyogc3JjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlEQkZBNzE0MzE4N0YxRDg2MDBBNzYyNjIgLyogY2xvc3VyZXMuYyAqLywKKwkJCQlEQkZBNzE0NTE4N0YxRDg2MDBBNzYyNjIgLyogZGxtYWxsb2MuYyAqLywKKwkJCQlEQkZBNzE0NzE4N0YxRDg2MDBBNzYyNjIgLyogcHJlcF9jaWYuYyAqLywKKwkJCQlEQkZBNzE0ODE4N0YxRDg2MDBBNzYyNjIgLyogcmF3X2FwaS5jICovLAorCQkJCURCRkE3MTQ5MTg3RjFEODYwMEE3NjI2MiAvKiB0eXBlcy5jICovLAogCQkJKTsKIAkJCXBhdGggPSBzcmM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQk2QzQzQ0JCQzE1MzRGNzZGMDAxNjIzNjQgLyogYXJtICovID0geworCQlEQkZBNzE1QzE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luX2lvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NCQkQxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jICovLAotCQkJCTZDNDNDQkJGMTUzNEY3NkYwMDE2MjM2NCAvKiBzeXN2LlMgKi8sCi0JCQkJNkM0M0NCQzAxNTM0Rjc2RjAwMTYyMzY0IC8qIHRyYW1wb2xpbmUuUyAqLywKKwkJCQlEQkZBNzE1RDE4N0YxRDlCMDBBNzYyNjIgLyogaW5jbHVkZSAqLywKKwkJCQlEQkZBNzE2QTE4N0YxRDlCMDBBNzYyNjIgLyogc3JjICovLAorCQkJKTsKKwkJCXBhdGggPSAiZGFyd2luX2lvcyI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlEQkZBNzE1RDE4N0YxRDlCMDBBNzYyNjIgLyogaW5jbHVkZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREJGQTcxNUUxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm02NC5oICovLAorCQkJCURCRkE3MTVGMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtdjcuaCAqLywKKwkJCQlEQkZBNzE2MDE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2kzODYuaCAqLywKKwkJCQlEQkZBNzE2MTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX3g4Nl82NC5oICovLAorCQkJCURCRkE3MTYyMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmljb25maWdfYXJtNjQuaCAqLywKKwkJCQlEQkZBNzE2MzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpY29uZmlnX2FybXY3LmggKi8sCisJCQkJREJGQTcxNjQxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaWNvbmZpZ19pMzg2LmggKi8sCisJCQkJREJGQTcxNjUxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaWNvbmZpZ194ODZfNjQuaCAqLywKKwkJCQlEQkZBNzE2NjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2FybTY0LmggKi8sCisJCQkJREJGQTcxNjcxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaXRhcmdldF9hcm12Ny5oICovLAorCQkJCURCRkE3MTY4MTg3RjFEOUIwMEE3NjI2MiAvKiBmZml0YXJnZXRfaTM4Ni5oICovLAorCQkJCURCRkE3MTY5MTg3RjFEOUIwMEE3NjI2MiAvKiBmZml0YXJnZXRfeDg2XzY0LmggKi8sCisJCQkpOworCQkJcGF0aCA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlEQkZBNzE2QTE4N0YxRDlCMDBBNzYyNjIgLyogc3JjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlEQkZBNzE2QjE4N0YxRDlCMDBBNzYyNjIgLyogYWFyY2g2NCAqLywKKwkJCQlEQkZBNzE2RTE4N0YxRDlCMDBBNzYyNjIgLyogYXJtICovLAorCQkJCURCRkE3MTcyMTg3RjFEOUIwMEE3NjI2MiAvKiB4ODYgKi8sCisJCQkpOworCQkJcGF0aCA9IHNyYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCURCRkE3MTZCMTg3RjFEOUIwMEE3NjI2MiAvKiBhYXJjaDY0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlEQkZBNzE2QzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybTY0LmMgKi8sCisJCQkJREJGQTcxNkQxODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtNjQuUyAqLywKKwkJCSk7CisJCQlwYXRoID0gYWFyY2g2NDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCURCRkE3MTZFMTg3RjFEOUIwMEE3NjI2MiAvKiBhcm0gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURCRkE3MTZGMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtdjcuYyAqLywKKwkJCQlEQkZBNzE3MDE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm12Ny5TICovLAorCQkJCURCRkE3MTcxMTg3RjFEOUIwMEE3NjI2MiAvKiB0cmFtcG9saW5lX2FybXY3LlMgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGFybTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTZDNDNDQkM4MTUzNEY3NkYwMDE2MjM2NCAvKiB4ODYgKi8gPSB7CisJCURCRkE3MTcyMTg3RjFEOUIwMEE3NjI2MiAvKiB4ODYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQkM5MTUzNEY3NkYwMDE2MjM2NCAvKiBkYXJ3aW4uUyAqLywKLQkJCQk2QzQzQ0JDQjE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgKi8sCisJCQkJREJGQTcxNzMxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TICovLAorCQkJCURCRkE3MTc0MTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TICovLAorCQkJCURCRkE3MTc1MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyAqLywKKwkJCQlEQkZBNzE3NjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2kzODYuYyAqLywKIAkJCSk7CiAJCQlwYXRoID0geDg2OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJNkM0M0NCRjAxNTM0Rjc3ODAwMTYyMzY0IC8qIE9TIFggKi8gPSB7CisJCURCRkE3MTgwMTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW5fb3N4ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0M4QzE1MzUwMzI2MDAxNjIzNjQgLyogaW5jbHVkZSAqLywKLQkJCQk2QzQzQ0JGQzE1MzRGNzc4MDAxNjIzNjQgLyogc3JjICovLAorCQkJCURCRkE3MTgxMTg3RjFEQTEwMEE3NjI2MiAvKiBpbmNsdWRlICovLAorCQkJCURCRkE3MTg4MTg3RjFEQTEwMEE3NjI2MiAvKiBzcmMgKi8sCiAJCQkpOwotCQkJbmFtZSA9ICJPUyBYIjsKLQkJCXBhdGggPSBvc3g7CisJCQlwYXRoID0gImRhcndpbl9vc3giOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJNkM0M0NCRkMxNTM0Rjc3ODAwMTYyMzY0IC8qIHNyYyAqLyA9IHsKKwkJREJGQTcxODExODdGMURBMTAwQTc2MjYyIC8qIGluY2x1ZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQzA0MTUzNEY3NzgwMDE2MjM2NCAvKiB4ODYgKi8sCisJCQkJREJGQTcxODIxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmggKi8sCisJCQkJREJGQTcxODMxODdGMURBMTAwQTc2MjYyIC8qIGZmaV94ODZfNjQuaCAqLywKKwkJCQlEQkZBNzE4NDE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX2kzODYuaCAqLywKKwkJCQlEQkZBNzE4NTE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX3g4Nl82NC5oICovLAorCQkJCURCRkE3MTg2MTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfaTM4Ni5oICovLAorCQkJCURCRkE3MTg3MTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfeDg2XzY0LmggKi8sCisJCQkpOworCQkJcGF0aCA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlEQkZBNzE4ODE4N0YxREExMDBBNzYyNjIgLyogc3JjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlEQkZBNzE4OTE4N0YxREExMDBBNzYyNjIgLyogeDg2ICovLAogCQkJKTsKIAkJCXBhdGggPSBzcmM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQk2QzQzQ0MwNDE1MzRGNzc4MDAxNjIzNjQgLyogeDg2ICovID0geworCQlEQkZBNzE4OTE4N0YxREExMDBBNzYyNjIgLyogeDg2ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0MwNTE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luLlMgKi8sCi0JCQkJNkM0M0NDMDYxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbjY0LlMgKi8sCi0JCQkJNkM0M0NDMDcxNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaS5jICovLAotCQkJCTZDNDNDQzA4MTUzNEY3NzgwMDE2MjM2NCAvKiBmZmk2NC5jICovLAorCQkJCURCRkE3MThBMTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyAqLywKKwkJCQlEQkZBNzE4QjE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyAqLywKKwkJCQlEQkZBNzE4QzE4N0YxREExMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgKi8sCisJCQkJREJGQTcxOEQxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgKi8sCiAJCQkpOwogCQkJcGF0aCA9IHg4NjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTZDNDNDQzNEMTUzNEY3QzQwMDE2MjM2NCAvKiBzcmMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQzI4MTUzNEY3QkUwMDE2MjM2NCAvKiBjbG9zdXJlcy5jICovLAotCQkJCTZDNDNDQzJCMTUzNEY3QkUwMDE2MjM2NCAvKiBqYXZhX3Jhd19hcGkuYyAqLywKLQkJCQk2QzQzQ0MyQzE1MzRGN0JFMDAxNjIzNjQgLyogcHJlcF9jaWYuYyAqLywKLQkJCQk2QzQzQ0MyRDE1MzRGN0JFMDAxNjIzNjQgLyogcmF3X2FwaS5jICovLAotCQkJCTZDNDNDQzJFMTUzNEY3QkUwMDE2MjM2NCAvKiB0eXBlcy5jICovLAotCQkJKTsKLQkJCW5hbWUgPSBzcmM7Ci0JCQlwYXRoID0gaW9zOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJNkM0M0NDOEMxNTM1MDMyNjAwMTYyMzY0IC8qIGluY2x1ZGUgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQzhEMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmkuaCAqLywKLQkJCQk2QzQzQ0M4RTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oICovLAotCQkJCTZDNDNDQzhGMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oICovLAotCQkJCTZDNDNDQzkwMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfeDg2XzY0LmggKi8sCi0JCQkJNkM0M0NDOTExNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oICovLAotCQkJCTZDNDNDQzkyMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oICovLAotCQkJCTZDNDNDQzkzMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfeDg2XzY0LmggKi8sCi0JCQkJNkM0M0NDOTQxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oICovLAotCQkJCTZDNDNDQzk1MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oICovLAotCQkJCTZDNDNDQzk2MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfeDg2XzY0LmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IGluY2x1ZGU7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQk2QzQzQ0NBMTE1MzUwMzk2MDAxNjIzNjQgLyogaW5jbHVkZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NDQTIxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaS5oICovLAotCQkJCTZDNDNDQ0EzMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfYXJtdjcuaCAqLywKLQkJCQk2QzQzQ0NBNDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oICovLAotCQkJCTZDNDNDQ0E1MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oICovLAotCQkJCTZDNDNDQ0E2MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWcuaCAqLywKLQkJCQk2QzQzQ0NBNzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2FybXY3LmggKi8sCi0JCQkJNkM0M0NDQTgxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggKi8sCi0JCQkJNkM0M0NDQTkxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oICovLAotCQkJCTZDNDNDQ0FBMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtLmggKi8sCi0JCQkJNkM0M0NDQUIxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm12Ny5oICovLAotCQkJCTZDNDNDQ0FDMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oICovLAotCQkJKTsKLQkJCXBhdGggPSBpbmNsdWRlOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRjZCMDgzOTUxNDcyMUVFNTAwMzFEOEExID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0MzRDE1MzRGN0M0MDAxNjIzNjQgLyogc3JjICovLAotCQkJCTZDNDNDQkFGMTUzNEY3NkYwMDE2MjM2NCAvKiBpT1MgKi8sCi0JCQkJNkM0M0NCRjAxNTM0Rjc3ODAwMTYyMzY0IC8qIE9TIFggKi8sCi0JCQkJRjZGOTgwQzYxNDczODYyNjAwMDhGMTIxIC8qIFByb2R1Y3RzICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUY2Rjk4MEM2MTQ3Mzg2MjYwMDA4RjEyMSAvKiBQcm9kdWN0cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJRjZGOTgwQkExNDczODYxMzAwMDhGMTIxIC8qIGxpYmZmaS5hICovLAotCQkJCTZDNDNDQjNEMTUzNEU5RDEwMDE2MjM2NCAvKiBsaWJmZmkuYSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlwYXRoID0gLi4vLi47Ci0JCQlzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOwotCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQk2QzQzQ0IzQjE1MzRFOUQxMDAxNjIzNjQgLyogSGVhZGVycyAqLyA9IHsKKwkJREIxM0IxOEYxODQ5REY1MTAwMTBGNDJEIC8qIEhlYWRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQk2QzQzQ0M5NzE1MzUwMzI2MDAxNjIzNjQgLyogZmZpLmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0M5ODE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDOTkxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0M5QTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX3g4Nl82NC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDOUUxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDOUYxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NBMDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X3g4Nl82NC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDOUIxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDOUMxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0M5RDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX3g4Nl82NC5oIGluIEhlYWRlcnMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0JCUY2Rjk4MEI4MTQ3Mzg2MTMwMDA4RjEyMSAvKiBIZWFkZXJzICovID0gewotCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJNkM0M0NDQUQxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQUUxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9hcm12Ny5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQUYxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0IwMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQjQxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQjUxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0I2MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtdjcuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0I3MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQjExNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQjIxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19hcm12Ny5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQjMxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE0QzE4N0YxRDg2MDBBNzYyNjIgLyogZmZpY29uZmlnLmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE0RDE4N0YxRDg2MDBBNzYyNjIgLyogZmZpdGFyZ2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE0QTE4N0YxRDg2MDBBNzYyNjIgLyogZmZpLmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE4RjE4N0YxREExMDBBNzYyNjIgLyogZmZpX3g4Nl82NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxOTExODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ194ODZfNjQuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MThFMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxOTAxODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ19pMzg2LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE0QjE4N0YxRDg2MDBBNzYyNjIgLyogZmZpX2NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxOTMxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF94ODZfNjQuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MTkyMTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CiAvKiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQk2QzQzQ0IzQzE1MzRFOUQxMDAxNjIzNjQgLyogbGliZmZpIE9TIFggKi8gPSB7CisJCURCMTNCMTY1MTg0OURGMUUwMDEwRjQyRCAvKiBsaWJmZmktaU9TICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDZDNDNDQjRBMTUzNEU5RDEwMDE2MjM2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGliZmZpIE9TIFgiICovOworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IERCMTNCMThCMTg0OURGMUUwMDEwRjQyRCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGliZmZpLWlPUyIgKi87CiAJCQlidWlsZFBoYXNlcyA9ICgKLQkJCQk2QzQzQ0M0MDE1MzRGRjNCMDAxNjIzNjQgLyogR2VuZXJhdGUgU291cmNlIGFuZCBIZWFkZXJzICovLAotCQkJCTZDNDNDQjM5MTUzNEU5RDEwMDE2MjM2NCAvKiBTb3VyY2VzICovLAotCQkJCTZDNDNDQjNBMTUzNEU5RDEwMDE2MjM2NCAvKiBGcmFtZXdvcmtzICovLAotCQkJCTZDNDNDQjNCMTUzNEU5RDEwMDE2MjM2NCAvKiBIZWFkZXJzICovLAorCQkJCURCMTNCMzA1MTg0OUUwMUMwMDEwRjQyRCAvKiBTaGVsbFNjcmlwdCAqLywKKwkJCQlEQjEzQjE2MjE4NDlERjFFMDAxMEY0MkQgLyogU291cmNlcyAqLywKKwkJCQlEQjEzQjE2NDE4NDlERjFFMDAxMEY0MkQgLyogQ29weUZpbGVzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAoCiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAogCQkJKTsKLQkJCW5hbWUgPSAibGliZmZpIE9TIFgiOwotCQkJcHJvZHVjdE5hbWUgPSAiZmZpIE9TIFgiOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDZDNDNDQjNEMTUzNEU5RDEwMDE2MjM2NCAvKiBsaWJmZmkuYSAqLzsKKwkJCW5hbWUgPSAibGliZmZpLWlPUyI7CisJCQlwcm9kdWN0TmFtZSA9IGZmaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSBEQjEzQjE2NjE4NDlERjFFMDAxMEY0MkQgLyogbGliZmZpLmEgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKIAkJfTsKLQkJRjZGOTgwQjkxNDczODYxMzAwMDhGMTIxIC8qIGxpYmZmaSBpT1MgKi8gPSB7CisJCURCMTNCMTkwMTg0OURGNTEwMDEwRjQyRCAvKiBsaWJmZmktTWFjICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEY2Rjk4MEM0MTQ3Mzg2MTMwMDA4RjEyMSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGliZmZpIGlPUyIgKi87CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gREIxM0IxQjAxODQ5REY1MjAwMTBGNDJEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJsaWJmZmktTWFjIiAqLzsKIAkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTZDNDNDQzNFMTUzNEY4RTIwMDE2MjM2NCAvKiBHZW5lcmF0ZSBUcmFtcG9saW5lICovLAotCQkJCTZDNDNDQzNGMTUzNEZGMUIwMDE2MjM2NCAvKiBHZW5lcmF0ZSBTb3VyY2UgYW5kIEhlYWRlcnMgKi8sCi0JCQkJRjZGOTgwQjYxNDczODYxMzAwMDhGMTIxIC8qIFNvdXJjZXMgKi8sCi0JCQkJRjZGOTgwQjcxNDczODYxMzAwMDhGMTIxIC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJRjZGOTgwQjgxNDczODYxMzAwMDhGMTIxIC8qIEhlYWRlcnMgKi8sCisJCQkJREIxM0IzMDYxODQ5RTA0OTAwMTBGNDJEIC8qIFNoZWxsU2NyaXB0ICovLAorCQkJCURCMTNCMThEMTg0OURGNTEwMDEwRjQyRCAvKiBTb3VyY2VzICovLAorCQkJCURCMTNCMThGMTg0OURGNTEwMDEwRjQyRCAvKiBIZWFkZXJzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAoCiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAogCQkJKTsKLQkJCW5hbWUgPSAibGliZmZpIGlPUyI7CisJCQluYW1lID0gImxpYmZmaS1NYWMiOwogCQkJcHJvZHVjdE5hbWUgPSBmZmk7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gRjZGOTgwQkExNDczODYxMzAwMDhGMTIxIC8qIGxpYmZmaS5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gREIxM0IxOTExODQ5REY1MTAwMTBGNDJEIC8qIGZmaS5keWxpYiAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5keW5hbWljIjsKIAkJfTsKIC8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJRjZCMDgzOTcxNDcyMUVFNTAwMzFEOEExIC8qIFByb2plY3Qgb2JqZWN0ICovID0geworCQlEQjEzQjE1QzE4NDlERUI3MDAxMEY0MkQgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDQzMDsKKwkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDUxMDsKIAkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRjZCMDgzOUExNDcyMUVFNTAwMzFEOEExIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAibGliZmZpIiAqLzsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBEQjEzQjE1RjE4NDlERUI3MDAxMEY0MkQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJsaWJmZmkiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4yIjsKIAkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCWVuLAogCQkJKTsKLQkJCW1haW5Hcm91cCA9IEY2QjA4Mzk1MTQ3MjFFRTUwMDMxRDhBMTsKLQkJCXByb2R1Y3RSZWZHcm91cCA9IEY2QjA4Mzk1MTQ3MjFFRTUwMDMxRDhBMTsKKwkJCW1haW5Hcm91cCA9IERCMTNCMTVCMTg0OURFQjcwMDEwRjQyRDsKKwkJCXByb2R1Y3RSZWZHcm91cCA9IERCMTNCMTY3MTg0OURGMUUwMDEwRjQyRCAvKiBQcm9kdWN0cyAqLzsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwogCQkJdGFyZ2V0cyA9ICgKLQkJCQlGNkY5ODBCOTE0NzM4NjEzMDAwOEYxMjEgLyogbGliZmZpIGlPUyAqLywKLQkJCQk2QzQzQ0IzQzE1MzRFOUQxMDAxNjIzNjQgLyogbGliZmZpIE9TIFggKi8sCisJCQkJREIxM0IxNjUxODQ5REYxRTAwMTBGNDJEIC8qIGxpYmZmaS1pT1MgKi8sCisJCQkJREIxM0IxOTAxODQ5REY1MTAwMTBGNDJEIC8qIGxpYmZmaS1NYWMgKi8sCiAJCQkpOwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQk2QzQzQ0MzRTE1MzRGOEUyMDAxNjIzNjQgLyogR2VuZXJhdGUgVHJhbXBvbGluZSAqLyA9IHsKKwkJREIxM0IzMDUxODQ5RTAxQzAwMTBGNDJEIC8qIFNoZWxsU2NyaXB0ICovID0gewogCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJKTsKIAkJCWlucHV0UGF0aHMgPSAoCiAJCQkpOwotCQkJbmFtZSA9ICJHZW5lcmF0ZSBUcmFtcG9saW5lIjsKLQkJCW91dHB1dFBhdGhzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQkJc2hlbGxQYXRoID0gL3Vzci9iaW4vcHl0aG9uOwotCQkJc2hlbGxTY3JpcHQgPSAiaW1wb3J0IHN1YnByb2Nlc3NcbmltcG9ydCByZVxuaW1wb3J0IG9zXG5pbXBvcnQgZXJybm9cbmltcG9ydCBzeXNcblxuZGVmIG1haW4oKTpcbiAgICB3aXRoIG9wZW4oJ3NyYy9hcm0vdHJhbXBvbGluZS5TJywgJ3cnKSBhcyB0cmFtcF9vdXQ6XG4gICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsnYmFzaCcsICdzcmMvYXJtL2dlbnRyYW1wLnNoJ10sIHN0ZG91dD10cmFtcF9vdXQpXG4gICAgICAgIHAud2FpdCgpXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgbWFpbigpIjsKLQkJfTsKLQkJNkM0M0NDM0YxNTM0RkYxQjAwMTYyMzY0IC8qIEdlbmVyYXRlIFNvdXJjZSBhbmQgSGVhZGVycyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJKTsKLQkJCW5hbWUgPSAiR2VuZXJhdGUgU291cmNlIGFuZCBIZWFkZXJzIjsKIAkJCW91dHB1dFBhdGhzID0gKAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJCXNoZWxsU2NyaXB0ID0gIi91c3IvYmluL3B5dGhvbiBnZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5IjsKKwkJCXNoZWxsU2NyaXB0ID0gIi91c3IvYmluL3B5dGhvbiBnZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5IC0tb25seS1pb3MiOwogCQl9OwotCQk2QzQzQ0M0MDE1MzRGRjNCMDAxNjIzNjQgLyogR2VuZXJhdGUgU291cmNlIGFuZCBIZWFkZXJzICovID0geworCQlEQjEzQjMwNjE4NDlFMDQ5MDAxMEY0MkQgLyogU2hlbGxTY3JpcHQgKi8gPSB7CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkpOwogCQkJaW5wdXRQYXRocyA9ICgKIAkJCSk7Ci0JCQluYW1lID0gIkdlbmVyYXRlIFNvdXJjZSBhbmQgSGVhZGVycyI7CiAJCQlvdXRwdXRQYXRocyA9ICgKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICIvdXNyL2Jpbi9weXRob24gZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weSI7CisJCQlzaGVsbFNjcmlwdCA9ICIvdXNyL2Jpbi9weXRob24gZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weSAtLW9ubHktb3N4IjsKIAkJfTsKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTZDNDNDQjM5MTUzNEU5RDEwMDE2MjM2NCAvKiBTb3VyY2VzICovID0geworCQlEQjEzQjE2MjE4NDlERjFFMDAxMEY0MkQgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCTZDNDNDQzFGMTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW4uUyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzIwMTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW42NC5TIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMjExNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaS5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMjIxNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaTY0LmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzMDE1MzRGN0JFMDAxNjIzNjQgLyogY2xvc3VyZXMuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzM2MTUzNEY3QkUwMDE2MjM2NCAvKiBqYXZhX3Jhd19hcGkuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzM4MTUzNEY3QkUwMDE2MjM2NCAvKiBwcmVwX2NpZi5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDM0ExNTM0RjdCRTAwMTYyMzY0IC8qIHJhd19hcGkuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzNDMTUzNEY3QkUwMDE2MjM2NCAvKiB0eXBlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxN0UxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNzkxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm12Ny5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxN0IxODdGMUQ5QjAwQTc2MjYyIC8qIHRyYW1wb2xpbmVfYXJtdjcuUyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTRFMTg3RjFEODYwMEE3NjI2MiAvKiBjbG9zdXJlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxN0ExODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtdjcuUyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTdEMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNTYxODdGMUQ4NjAwQTc2MjYyIC8qIHByZXBfY2lmLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3RjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2kzODYuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTU4MTg3RjFEODYwMEE3NjI2MiAvKiByYXdfYXBpLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3ODE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm02NC5TIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxN0MxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNUExODdGMUQ4NjAwQTc2MjYyIC8qIHR5cGVzLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3NzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybTY0LmMgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKLQkJRjZGOTgwQjYxNDczODYxMzAwMDhGMTIxIC8qIFNvdXJjZXMgKi8gPSB7CisJCURCMTNCMThEMTg0OURGNTEwMDEwRjQyRCAvKiBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCi0JCQkJNkM0M0NCREMxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NCREQxNTM0Rjc2RjAwMTYyMzY0IC8qIHN5c3YuUyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQkRFMTUzNEY3NkYwMDE2MjM2NCAvKiB0cmFtcG9saW5lLlMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0JFNjE1MzRGNzZGMDAxNjIzNjQgLyogZGFyd2luLlMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0JFODE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MyRjE1MzRGN0JFMDAxNjIzNjQgLyogY2xvc3VyZXMuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzM1MTUzNEY3QkUwMDE2MjM2NCAvKiBqYXZhX3Jhd19hcGkuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzM3MTUzNEY3QkUwMDE2MjM2NCAvKiBwcmVwX2NpZi5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMzkxNTM0RjdCRTAwMTYyMzY0IC8qIHJhd19hcGkuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzNCMTUzNEY3QkUwMDE2MjM2NCAvKiB0eXBlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxOTYxODdGMURBMTAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxOTUxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE1NzE4N0YxRDg2MDBBNzYyNjIgLyogcHJlcF9jaWYuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTk3MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNUIxODdGMUQ4NjAwQTc2MjYyIC8qIHR5cGVzLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE1OTE4N0YxRDg2MDBBNzYyNjIgLyogcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNEYxODdGMUQ4NjAwQTc2MjYyIC8qIGNsb3N1cmVzLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE5NDE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQkJNkM0M0NCNEIxNTM0RTlEMTAwMTYyMzY0IC8qIERlYnVnICovID0geworCQlEQjEzQjE2MDE4NDlERUI3MDAxMEY0MkQgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF8zMl82NF9CSVQpIjsKLQkJCQlEU1RST09UID0gL3RtcC9mZmkuZHN0OwotCQkJCUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAoCisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKIAkJCQkJIiQoaW5oZXJpdGVkKSIsCi0JCQkJCSJcIiQoU1lTVEVNX0FQUFNfRElSKS9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL0xpYnJhcnkvRnJhbWV3b3Jrc1wiIiwKKwkJCQkJImRhcndpbl9jb21tb24vaW5jbHVkZSIsCiAJCQkJKTsKLQkJCQlHQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKLQkJCQlHQ0NfVkVSU0lPTiA9IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7Ci0JCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7Ci0JCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFUzsKLQkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC42OwogCQkJCU9OTFlfQUNUSVZFX0FSQ0ggPSBZRVM7Ci0JCQkJUFJPRFVDVF9OQU1FID0gZmZpOwotCQkJCVNES1JPT1QgPSBtYWNvc3g7CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9OwotCQk2QzQzQ0I0QzE1MzRFOUQxMDAxNjIzNjQgLyogUmVsZWFzZSAqLyA9IHsKKwkJREIxM0IxNjExODQ5REVCNzAwMTBGNDJEIC8qIFJlbGVhc2UgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF8zMl82NF9CSVQpIjsKLQkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKLQkJCQlEU1RST09UID0gL3RtcC9mZmkuZHN0OwotCQkJCUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAoCisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKIAkJCQkJIiQoaW5oZXJpdGVkKSIsCi0JCQkJCSJcIiQoU1lTVEVNX0FQUFNfRElSKS9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL0xpYnJhcnkvRnJhbWV3b3Jrc1wiIiwKKwkJCQkJImRhcndpbl9jb21tb24vaW5jbHVkZSIsCiAJCQkJKTsKLQkJCQlHQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKLQkJCQlHQ0NfVkVSU0lPTiA9IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7Ci0JCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7Ci0JCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFUzsKLQkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC42OwotCQkJCVBST0RVQ1RfTkFNRSA9IGZmaTsKLQkJCQlTREtST09UID0gbWFjb3N4OwogCQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwogCQl9OwotCQlGNkIwODNBQjE0NzIxRUU1MDAzMUQ4QTEgLyogRGVidWcgKi8gPSB7CisJCURCMTNCMTg3MTg0OURGMUUwMDEwRjQyRCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKLQkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzMyX0JJVCkiOworCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfSU5DTFVESU5HXzY0X0JJVCkiOworCQkJCUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9ICJnbnUrKzB4IjsKKwkJCQlDTEFOR19DWFhfTElCUkFSWSA9ICJsaWJjKysiOworCQkJCUNMQU5HX0VOQUJMRV9NT0RVTEVTID0gWUVTOworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0JPT0xfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9ESVJFQ1RfT0JKQ19JU0FfVVNBR0UgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9PQkpDX1JPT1RfQ0xBU1MgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9NQVRDSCA9IFlFUzsKIAkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87CisJCQkJRFNUUk9PVCA9IC90bXAvZmZpLmRzdDsKIAkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5OwogCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POwogCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOwpAQCAtNDgyLDk4ICs0NTcsMTgxIEBACiAJCQkJCSIkKGluaGVyaXRlZCkiLAogCQkJCSk7CiAJCQkJR0NDX1NZTUJPTFNfUFJJVkFURV9FWFRFUk4gPSBOTzsKLQkJCQlHQ0NfV0FSTl9BQk9VVF9NSVNTSU5HX1BST1RPVFlQRVMgPSBOTzsKLQkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFUzsKLQkJCQlHQ0NfV0FSTl9VTlVTRURfVkFMVUUgPSBOTzsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFU19FUlJPUjsKKwkJCQlHQ0NfV0FSTl9VTkRFQ0xBUkVEX1NFTEVDVE9SID0gWUVTOworCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVNfQUdHUkVTU0lWRTsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CiAJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpb3MvaW5jbHVkZTsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJImRhcndpbl9pb3MvaW5jbHVkZSIsCisJCQkJKTsKKwkJCQlJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IDUuMDsKKwkJCQkiSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVRbYXJjaD1hcm02NF0iID0gNy4wOworCQkJCU9USEVSX0xERkxBR1MgPSAiLU9iakMiOworCQkJCVBST0RVQ1RfTkFNRSA9IGZmaTsKIAkJCQlTREtST09UID0gaXBob25lb3M7CisJCQkJU0tJUF9JTlNUQUxMID0gWUVTOwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKLQkJRjZCMDgzQUMxNDcyMUVFNTAwMzFEOEExIC8qIFJlbGVhc2UgKi8gPSB7CisJCURCMTNCMTg4MTg0OURGMUUwMDEwRjQyRCAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewogCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POwotCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfMzJfQklUKSI7CisJCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF9JTkNMVURJTkdfNjRfQklUKSI7CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7CisJCQkJQ0xBTkdfRU5BQkxFX01PRFVMRVMgPSBZRVM7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FHRSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX19EVVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOwogCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJRFNUUk9PVCA9IC90bXAvZmZpLmRzdDsKKwkJCQlFTkFCTEVfTlNfQVNTRVJUSU9OUyA9IE5POwogCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICIiOwotCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJTkdfUFJPVE9UWVBFUyA9IE5POwotCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTOwotCQkJCUdDQ19XQVJOX1VOVVNFRF9WQUxVRSA9IE5POworCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTX0VSUk9SOworCQkJCUdDQ19XQVJOX1VOREVDTEFSRURfU0VMRUNUT1IgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFU19BR0dSRVNTSVZFOworCQkJCUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9IGlvcy9pbmNsdWRlOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCQkiZGFyd2luX2lvcy9pbmNsdWRlIiwKKwkJCQkpOworCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNS4wOworCQkJCSJJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVFthcmNoPWFybTY0XSIgPSA3LjA7CisJCQkJT1RIRVJfTERGTEFHUyA9ICItT2JqQyI7CisJCQkJUFJPRFVDVF9OQU1FID0gZmZpOwogCQkJCVNES1JPT1QgPSBpcGhvbmVvczsKKwkJCQlTS0lQX0lOU1RBTEwgPSBZRVM7CiAJCQkJVkFMSURBVEVfUFJPRFVDVCA9IFlFUzsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKLQkJRjZGOTgwQzIxNDczODYxMzAwMDhGMTIxIC8qIERlYnVnICovID0geworCQlEQjEzQjFCMTE4NDlERjUyMDAxMEY0MkQgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJQVJDSFMgPSAoCi0JCQkJCWFybXY2LAotCQkJCQlhcm12NywKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSAiZ251KysweCI7CisJCQkJQ0xBTkdfQ1hYX0xJQlJBUlkgPSAibGliYysrIjsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9CT09MX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9DT05TVEFOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRElSRUNUX09CSkNfSVNBX1VTQUdFID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fRU1QVFlfQk9EWSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VOVU1fQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0lOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fT0JKQ19ST09UX0NMQVNTID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCURZTElCX0NPTVBBVElCSUxJVFlfVkVSU0lPTiA9IDE7CisJCQkJRFlMSUJfQ1VSUkVOVF9WRVJTSU9OID0gMTsKKwkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5OworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJERUJVRz0xIiwKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCiAJCQkJKTsKLQkJCQlEU1RST09UID0gL3RtcC9mZmkuZHN0OwotCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7Ci0JCQkJR0NDX1RIVU1CX1NVUFBPUlQgPSBOTzsKLQkJCQlJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IDQuMDsKLQkJCQlPVEhFUl9MREZMQUdTID0gIi1PYmpDIjsKKwkJCQlHQ0NfU1lNQk9MU19QUklWQVRFX0VYVEVSTiA9IE5POworCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTX0VSUk9SOworCQkJCUdDQ19XQVJOX1VOREVDTEFSRURfU0VMRUNUT1IgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFU19BR0dSRVNTSVZFOworCQkJCUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSJkYXJ3aW5fb3N4L2luY2x1ZGUiLAorCQkJCSk7CisJCQkJTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gMTAuNjsKKwkJCQlPTkxZX0FDVElWRV9BUkNIID0gWUVTOworCQkJCU9USEVSX0xERkxBR1MgPSAiLVdsLC1ub19jb21wYWN0X3Vud2luZCI7CiAJCQkJUFJPRFVDVF9OQU1FID0gZmZpOwotCQkJCVNLSVBfSU5TVEFMTCA9IFlFUzsKKwkJCQlTREtST09UID0gbWFjb3N4OwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKLQkJRjZGOTgwQzMxNDczODYxMzAwMDhGMTIxIC8qIFJlbGVhc2UgKi8gPSB7CisJCURCMTNCMUIyMTg0OURGNTIwMDEwRjQyRCAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewotCQkJCUFSQ0hTID0gKAotCQkJCQlhcm12NiwKLQkJCQkJYXJtdjcsCisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FHRSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX19EVVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTsKKwkJCQlEWUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUVOQUJMRV9OU19BU1NFUlRJT05TID0gTk87CisJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKKwkJCQlHQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFU19FUlJPUjsKKwkJCQlHQ0NfV0FSTl9VTkRFQ0xBUkVEX1NFTEVDVE9SID0gWUVTOworCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVNfQUdHUkVTU0lWRTsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCQkiZGFyd2luX29zeC9pbmNsdWRlIiwKIAkJCQkpOwotCQkJCURTVFJPT1QgPSAvdG1wL2ZmaS5kc3Q7Ci0JCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKLQkJCQlHQ0NfVEhVTUJfU1VQUE9SVCA9IE5POwotCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNC4wOwotCQkJCU9USEVSX0xERkxBR1MgPSAiLU9iakMiOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjY7CisJCQkJT1RIRVJfTERGTEFHUyA9ICItV2wsLW5vX2NvbXBhY3RfdW53aW5kIjsKIAkJCQlQUk9EVUNUX05BTUUgPSBmZmk7Ci0JCQkJU0tJUF9JTlNUQUxMID0gWUVTOworCQkJCVNES1JPT1QgPSBtYWNvc3g7CiAJCQl9OwogCQkJbmFtZSA9IFJlbGVhc2U7CiAJCX07CiAvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQkJNkM0M0NCNEExNTM0RTlEMTAwMTYyMzY0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJsaWJmZmkgT1MgWCIgKi8gPSB7CisJCURCMTNCMTVGMTg0OURFQjcwMDEwRjQyRCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImxpYmZmaSIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQk2QzQzQ0I0QjE1MzRFOUQxMDAxNjIzNjQgLyogRGVidWcgKi8sCi0JCQkJNkM0M0NCNEMxNTM0RTlEMTAwMTYyMzY0IC8qIFJlbGVhc2UgKi8sCisJCQkJREIxM0IxNjAxODQ5REVCNzAwMTBGNDJEIC8qIERlYnVnICovLAorCQkJCURCMTNCMTYxMTg0OURFQjcwMDEwRjQyRCAvKiBSZWxlYXNlICovLAogCQkJKTsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CiAJCX07Ci0JCUY2QjA4MzlBMTQ3MjFFRTUwMDMxRDhBMSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImxpYmZmaSIgKi8gPSB7CisJCURCMTNCMThCMTg0OURGMUUwMDEwRjQyRCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGliZmZpLWlPUyIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQlGNkIwODNBQjE0NzIxRUU1MDAzMUQ4QTEgLyogRGVidWcgKi8sCi0JCQkJRjZCMDgzQUMxNDcyMUVFNTAwMzFEOEExIC8qIFJlbGVhc2UgKi8sCisJCQkJREIxM0IxODcxODQ5REYxRTAwMTBGNDJEIC8qIERlYnVnICovLAorCQkJCURCMTNCMTg4MTg0OURGMUUwMDEwRjQyRCAvKiBSZWxlYXNlICovLAogCQkJKTsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CiAJCX07Ci0JCUY2Rjk4MEM0MTQ3Mzg2MTMwMDA4RjEyMSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGliZmZpIGlPUyIgKi8gPSB7CisJCURCMTNCMUIwMTg0OURGNTIwMDEwRjQyRCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGliZmZpLU1hYyIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQlGNkY5ODBDMjE0NzM4NjEzMDAwOEYxMjEgLyogRGVidWcgKi8sCi0JCQkJRjZGOTgwQzMxNDczODYxMzAwMDhGMTIxIC8qIFJlbGVhc2UgKi8sCisJCQkJREIxM0IxQjExODQ5REY1MjAwMTBGNDJEIC8qIERlYnVnICovLAorCQkJCURCMTNCMUIyMTg0OURGNTIwMDEwRjQyRCAvKiBSZWxlYXNlICovLAogCQkJKTsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CiAJCX07CiAvKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCiAJfTsKLQlyb290T2JqZWN0ID0gRjZCMDgzOTcxNDcyMUVFNTAwMzFEOEExIC8qIFByb2plY3Qgb2JqZWN0ICovOworCXJvb3RPYmplY3QgPSBEQjEzQjE1QzE4NDlERUI3MDAxMEY0MkQgLyogUHJvamVjdCBvYmplY3QgKi87CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYnRvb2wtdmVyc2lvbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uCmluZGV4IGU3ODRmYzQuLmQ0ZjUwMWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uCkBAIC0yNiw0ICsyNiw0IEBACiAjICAgIHJlbGVhc2UsIHRoZW4gc2V0IGFnZSB0byAwLgogIwogIyBDVVJSRU5UOlJFVklTSU9OOkFHRQotNjoxOjAKKzY6MjowCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2x0bWFpbi5zaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggNjNhZTY5ZC4uYTUwYTIxYQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2x0bWFpbi5zaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2x0bWFpbi5zaApAQCAtMSw5ICsxLDEwIEBACisjISAvYmluL3NoCiAKLSMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC4yCisjIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQuMi40MTgKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCiAjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAotIyAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KICMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKQEAgLTIzLDE2NiArMjQsNTYyIEBACiAjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQotIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwKLSMgb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKLSMgVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uCi0jCi0jIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIwotIyAgICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcwotIyAgICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCi0jICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCi0jICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotIyAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQotIyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCi0jICAgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKLSMgICAgICAgLS1uby1xdWlldCwgLS1uby1zaWxlbnQKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKLSMgICAgICAgLS1uby13YXJuICAgICAgICAgICAgZG9uJ3QgZGlzcGxheSB3YXJuaW5nIG1lc3NhZ2VzCi0jICAgICAgIC0tdGFnPVRBRyAgICAgICAgICAgIHVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmcm9tIHRhZyBUQUcKLSMgICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgbW9yZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHRoYW4gZGVmYXVsdAotIyAgICAgICAtLW5vLXZlcmJvc2UgICAgICAgICBkb24ndCBwcmludCB0aGUgZXh0cmEgaW5mb3JtYXRpb25hbCBtZXNzYWdlcwotIyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCi0jICAgLWgsIC0taGVscCwgLS1oZWxwLWFsbCAgIHByaW50IHNob3J0LCBsb25nLCBvciBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UKLSMKLSMgTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotIwotIyAgICAgICAgIGNsZWFuICAgICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5Ci0jICAgICAgICAgY29tcGlsZSAgICAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKLSMgICAgICAgICBleGVjdXRlICAgICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KLSMgICAgICAgICBmaW5pc2ggICAgICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcwotIyAgICAgICAgIGluc3RhbGwgICAgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcwotIyAgICAgICAgIGxpbmsgICAgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKLSMgICAgICAgICB1bmluc3RhbGwgICAgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKLSMKLSMgTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLiAgV2hlbiBwYXNzZWQgYXMgZmlyc3Qgb3B0aW9uLAotIyBgLS1tb2RlPU1PREUnIG1heSBiZSBhYmJyZXZpYXRlZCBhcyBgTU9ERScgb3IgYSB1bmlxdWUgYWJicmV2aWF0aW9uIG9mIHRoYXQuCi0jIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgotIwotIyBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKLSMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgotIwotIyAgICAgICAgIGhvc3QtdHJpcGxldDoJJGhvc3QKLSMgICAgICAgICBzaGVsbDoJCSRTSEVMTAotIyAgICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKLSMgICAgICAgICBjb21waWxlciBmbGFnczoJCSRMVENGTEFHUwotIyAgICAgICAgIGxpbmtlcjoJCSRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCi0jICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wpIDIuNC4yCi0jICAgICAgICAgYXV0b21ha2U6CSRhdXRvbWFrZV92ZXJzaW9uCi0jICAgICAgICAgYXV0b2NvbmY6CSRhdXRvY29uZl92ZXJzaW9uCi0jCi0jIFJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KLSMgR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KLSMgR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uCiAKIFBST0dSQU09bGlidG9vbAogUEFDS0FHRT1saWJ0b29sCi1WRVJTSU9OPTIuNC4yCi1USU1FU1RBTVA9IiIKLXBhY2thZ2VfcmV2aXNpb249MS4zMzM3CitWRVJTSU9OPTIuNC4yLjQxOAorcGFja2FnZV9yZXZpc2lvbj0yLjQuMi40MTgKIAotIyBCZSBCb3VybmUgY29tcGF0aWJsZQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisKKyMjIC0tLS0tLSAjIworIyMgVXNhZ2UuICMjCisjIyAtLS0tLS0gIyMKKworIyBSdW4gJy4vbGlidG9vbCAtLWhlbHAnIGZvciBoZWxwIHdpdGggdXNpbmcgdGhpcyBzY3JpcHQgZnJvbSB0aGUKKyMgY29tbWFuZCBsaW5lLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVzZXIgb3ZlcnJpZGFibGUgY29tbWFuZCBwYXRocy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBZnRlciBjb25maWd1cmUgY29tcGxldGVzLCBpdCBoYXMgYSBiZXR0ZXIgaWRlYSBvZiBzb21lIG9mIHRoZQorIyBzaGVsbCB0b29scyB3ZSBuZWVkIHRoYW4gdGhlIGRlZmF1bHRzIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBzaGFyZWQKKyMgd2l0aCBib290c3RyYXAsIHNvIHNldCB0aG9zZSBoZXJlIHdoZXJlIHRoZXkgY2FuIHN0aWxsIGJlIG92ZXItCisjIHJpZGRlbiBieSB0aGUgdXNlciwgYnV0IG90aGVyd2lzZSB0YWtlIHByZWNlZGVuY2UuCisKKzogJHtBVVRPQ09ORj0iYXV0b2NvbmYifQorOiAke0FVVE9NQUtFPSJhdXRvbWFrZSJ9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFNvdXJjZSBleHRlcm5hbCBsaWJyYXJpZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIE11Y2ggb2Ygb3VyIGxvdy1sZXZlbCBmdW5jdGlvbmFsaXR5IG5lZWRzIHRvIGJlIHNvdXJjZWQgZnJvbSBleHRlcm5hbAorIyBsaWJyYXJpZXMsIHdoaWNoIGFyZSBpbnN0YWxsZWQgdG8gJHBrZ2F1eGRpci4KKworIyBTZXQgYSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBzY3JpcHQuCitzY3JpcHR2ZXJzaW9uPTIwMTMtMDgtMjMuMjA7ICMgVVRDCisKKyMgR2VuZXJhbCBzaGVsbCBzY3JpcHQgYm9pbGVyIHBsYXRlLCBhbmQgaGVscGVyIGZ1bmN0aW9ucy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKworIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91IGRpc3RyaWJ1dGUKKyMgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdCBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwKKyMgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlCisjIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGdhcnlAZ251Lm9yZy4KKworCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgRXZhbHVhdGUgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3VyIHNjcmlwdCB0byBnYWluIGFjY2VzcyB0bworIyB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZGVmaW5lZCBoZXJlOgorIworIyAgIC4gYGVjaG8gIiQwIiB8ICR7U0VELXNlZH0gJ3N8W14vXSokfHwnYC9idWlsZC1hdXgvZnVuY2xpYi5zaAorIworIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBhbnkgb2YgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgc2V0dGluZ3MsIGRvIHRoYXQgYmVmb3JlIGV2YWx1YXRpbmcgdGhpcyBmaWxlLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTaGVsbCBub3JtYWxpc2F0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBTb21lIHNoZWxscyBuZWVkIGEgbGl0dGxlIGhlbHAgdG8gYmUgYXMgQm91cm5lIGNvbXBhdGlibGUgYXMgcG9zc2libGUuCisjIEJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgYWxsIHRoYXQgaGVscCBoYXMgYmVlbiBwcm92aWRlZCEKKworRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsgZXNhYwogZmkKLUJJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0Ci1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCiAKLSMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KLWZ1bmNfZmFsbGJhY2tfZWNobyAoKQotewotICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgotJDEKLV9MVEVDSE9fRU9GJwotfQotCi0jIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgotbHRfdXNlcl9sb2NhbGU9Ci1sdF9zYWZlX2xvY2FsZT0KLWZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIGluIGNhc2UgdGhleSBhcmUgcmVxdWlyZWQgbGF0ZXIuCitfR191c2VyX2xvY2FsZT0KK19HX3NhZmVfbG9jYWxlPQorZm9yIF9HX3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCiBkbwotICBldmFsICJpZiB0ZXN0IFwiXCR7JGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KLSAgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCi0gICAgICAgICAgJGx0X3Zhcj1DCi0JICBleHBvcnQgJGx0X3ZhcgotCSAgbHRfdXNlcl9sb2NhbGU9XCIkbHRfdmFyPVxcXCRzYXZlX1wkbHRfdmFyOyBcJGx0X3VzZXJfbG9jYWxlXCIKLQkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKKyAgZXZhbCAiaWYgdGVzdCBzZXQgPSBcIlwkeyRfR192YXIrc2V0fVwiOyB0aGVuCisgICAgICAgICAgc2F2ZV8kX0dfdmFyPVwkJF9HX3ZhcgorICAgICAgICAgICRfR192YXI9QworCSAgZXhwb3J0ICRfR192YXIKKwkgIF9HX3VzZXJfbG9jYWxlPVwiJF9HX3Zhcj1cXFwkc2F2ZV9cJF9HX3ZhcjsgXCRfR191c2VyX2xvY2FsZVwiCisJICBfR19zYWZlX2xvY2FsZT1cIiRfR192YXI9QzsgXCRfR19zYWZlX2xvY2FsZVwiCiAJZmkiCiBkb25lCi1MQ19BTEw9QwotTEFOR1VBR0U9QwotZXhwb3J0IExBTkdVQUdFIExDX0FMTAogCi0kbHRfdW5zZXQgQ0RQQVRICisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKIAorIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKK3NwPScgJworbmw9JworJworSUZTPSIkc3AJJG5sIgorCisjIFRoZXJlIGFyZSBzdGlsbCBtb2Rlcm4gc3lzdGVtcyB0aGF0IGhhdmUgcHJvYmxlbXMgd2l0aCAnZWNobycgbWlzLQorIyBoYW5kbGluZyBiYWNrc2xhc2hlcywgYW1vbmcgb3RoZXJzLCBzbyBtYWtlIHN1cmUgJGJzX2VjaG8gaXMgc2V0IHRvIGEKKyMgY29tbWFuZCB0aGF0IGNvcnJlY3RseSBpbnRlcnByZXRzIGJhY2tzbGFzaGVzLgorIyAodGhpcyBjb2RlIGZyb20gQXV0b2NvbmYgMi42OCkKKworIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2JzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCitic19lY2hvPSRic19lY2hvJGJzX2VjaG8kYnNfZWNobyRic19lY2hvJGJzX2VjaG8KK2JzX2VjaG89JGJzX2VjaG8kYnNfZWNobyRic19lY2hvJGJzX2VjaG8kYnNfZWNobyRic19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGJzX2VjaG9gIiA9ICJYJGJzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBic19lY2hvPSdwcmludCAtciAtLScKKyAgYnNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYnNfZWNob2AiID0gIlgkYnNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGJzX2VjaG89J3ByaW50ZiAlc1xuJworICBic19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYnNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGJzX2VjaG8iOyB0aGVuCisgICAgYnNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJG5sIicKKyAgICBic19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBic19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGJzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJG5sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkbmwiCisgICAgJworICAgIGV4cG9ydCBic19lY2hvX25fYm9keQorICAgIGJzX2VjaG9fbj0nc2ggLWMgJGJzX2VjaG9fbl9ib2R5IGJzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBic19lY2hvX2JvZHkKKyAgYnNfZWNobz0nc2ggLWMgJGJzX2VjaG9fYm9keSBic19lY2hvJworZmkKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VyIG92ZXJyaWRhYmxlIGNvbW1hbmQgcGF0aHMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQWxsIHVwcGVyY2FzZSB2YXJpYWJsZSBuYW1lcyBhcmUgdXNlZCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGhlc2UKKyMgdmFyaWFibGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyIGJlZm9yZSBjYWxsaW5nIGEgc2NyaXB0IHRoYXQKKyMgdXNlcyB0aGVtIGlmIGEgc3VpdGFibGUgY29tbWFuZCBvZiB0aGF0IG5hbWUgaXMgbm90IGFscmVhZHkgYXZhaWxhYmxlCisjIGluIHRoZSBjb21tYW5kIHNlYXJjaCBQQVRILgorCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtFQ0hPPSIkYnNfZWNobyJ9Cis6ICR7RUdSRVA9ImdyZXAgLUUifQorOiAke0ZHUkVQPSJncmVwIC1GIn0KKzogJHtHUkVQPSJncmVwIn0KKzogJHtMTl9TPSJsbiAtcyJ9Cis6ICR7TUFLRT0ibWFrZSJ9Cis6ICR7TUtESVI9Im1rZGlyIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9Cis6ICR7U0VEPSJzZWQifQorOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVzZWZ1bCBzZWQgc25pcHBldHMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitzZWRfZGlybmFtZT0nc3wvW14vXSokfHwnCitzZWRfYmFzZW5hbWU9J3N8Xi4qL3x8JworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzfFwoW2AiJFxcXVwpfFxcXDF8ZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitzZWRfZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCB0dXJucyBhIHN0cmluZyBpbnRvIGEgcmVnZXggbWF0Y2hpbmcgZm9yIHRoZQorIyBzdHJpbmcgbGl0ZXJhbGx5Lgorc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0nc3xbXS5bXiRcXCpcL118XFwmfGcnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCisjIHRoYXQgY29udGFpbnMgZm9yd2FyZCBzbGFzaGVzLCBpbnRvIG9uZSB0aGF0IGNvbnRhaW5zCisjIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KK3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKworIyBSZS0nXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIHNlZF9kb3VibGVfcXVvdGVfc3Vic3QgdGhhdAorIyB3ZXJlICdcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgJ1wnIHByZWNlZGVkIGEKKyMgJyQnIGluIGlucHV0IHRvIHNlZF9kb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbQorIyBleHBhbnNpb24uICBTaW5jZSBlYWNoIGlucHV0ICdcJyBpcyBub3cgdHdvICdcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIKKyMgb2YgcnVucyBvZiBmb3VyICdcJ3MgZm9sbG93ZWQgYnkgdHdvICdcJ3MgYW5kIHRoZW4gYSAnJCcuICAnXCcgdGhhdCAnJCcuCitfR19icz0nXFwnCitfR19iczI9J1xcXFwnCitfR19iczQ9J1xcXFxcXFxcJworX0dfZG9sbGFyPSdcJCcKK3NlZF9kb3VibGVfYmFja3NsYXNoPSJcCisgIHMvJF9HX2JzNC8mXFwKKy9nCisgIHMvXiRfR19iczIkX0dfZG9sbGFyLyRfR19icyYvCisgIHMvXFwoW14kX0dfYnNdXFwpJF9HX2JzMiRfR19kb2xsYXIvXFwxJF9HX2JzMiRfR19icyRfR19kb2xsYXIvZworICBzL1xuLy9nIgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBHbG9iYWwgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBFeGNlcHQgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGVzIGV4cGxpY2l0bHkgbGlzdGVkIGJlbG93LCB0aGUgZm9sbG93aW5nCisjIGZ1bmN0aW9ucyBpbiB0aGUgJ15mdW5jXycgbmFtZXNwYWNlLCBhbmQgdGhlICdecmVxdWlyZV8nIG5hbWVzcGFjZQorIyB2YXJpYWJsZXMgaW5pdGlhbGlzZWQgaW4gdGhlICdSZXNvdXJjZSBtYW5hZ2VtZW50JyBzZWN0aW9uLCBzb3VyY2luZworIyB0aGlzIGZpbGUgd2lsbCBub3QgcG9sbHV0ZSB5b3VyIGdsb2JhbCBuYW1lc3BhY2Ugd2l0aCBhbnl0aGluZworIyBlbHNlLiBUaGVyZSdzIG5vIHBvcnRhYmxlIHdheSB0byBzY29wZSB2YXJpYWJsZXMgaW4gQm91cm5lIHNoZWxsCisjIHRob3VnaCwgc28gYWN0dWFsbHkgcnVubmluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBzb21ldGltZXMgcGxhY2UKKyMgcmVzdWx0cyBpbnRvIGEgdmFyaWFibGUgbmFtZWQgYWZ0ZXIgdGhlIGZ1bmN0aW9uLCBhbmQgb2Z0ZW4gdXNlCisjIHRlbXBvcmFyeSB2YXJpYWJsZXMgaW4gdGhlICdeX0dfJyBuYW1lc3BhY2UuIElmIHlvdSBhcmUgY2FyZWZ1bCB0bworIyBhdm9pZCB1c2luZyB0aG9zZSBuYW1lc3BhY2VzIGNhc3VhbGx5IGluIHlvdXIgc291cmNpbmcgc2NyaXB0LCB0aGluZ3MKKyMgc2hvdWxkIGNvbnRpbnVlIHRvIHdvcmsgYXMgeW91IGV4cGVjdC4gQW5kLCBvZiBjb3Vyc2UsIHlvdSBjYW4gZnJlZWx5CisjIG92ZXJ3cml0ZSBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgZGVmaW5lZCBoZXJlIGJlZm9yZQorIyBjYWxsaW5nIGFueXRoaW5nIHRvIGN1c3RvbWl6ZSB0aGVtLgorCitFWElUX1NVQ0NFU1M9MAorRVhJVF9GQUlMVVJFPTEKK0VYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KK0VYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorCisjIEFsbG93IG92ZXJyaWRpbmcsIGVnIGFzc3VtaW5nIHRoYXQgeW91IGZvbGxvdyB0aGUgY29udmVudGlvbiBvZgorIyBwdXR0aW5nICckZGVidWdfY21kJyBhdCB0aGUgc3RhcnQgb2YgYWxsIHlvdXIgZnVuY3Rpb25zLCB5b3UgY2FuIGdldAorIyBiYXNoIHRvIHNob3cgZnVuY3Rpb24gY2FsbCB0cmFjZSB3aXRoOgorIworIyAgICBkZWJ1Z19jbWQ9J2V2YWwgZWNobyAiJHtGVU5DTkFNRVswXX0gJCoiID4mMicgYmFzaCB5b3VyLXNjcmlwdC1uYW1lCitkZWJ1Z19jbWQ9JHtkZWJ1Z19jbWQtIjoifQorZXhpdF9jbWQ9OgorCisjIEJ5IGNvbnZlbnRpb24sIGZpbmlzaCB5b3VyIHNjcmlwdCB3aXRoOgorIworIyAgICBleGl0ICRleGl0X3N0YXR1cworIworIyBzbyB0aGF0IHlvdSBjYW4gc2V0IGV4aXRfc3RhdHVzIHRvIG5vbi16ZXJvIGlmIHlvdSB3YW50IHRvIGluZGljYXRlCisjIHNvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyBleGVjdXRpb24gd2l0aG91dCBhY3R1YWxseSBiYWlsaW5nIG91dCBhdAorIyB0aGUgcG9pbnQgb2YgZmFpbHVyZS4KK2V4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKIAogIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCiAjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgogIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKICMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQogIyBmdW5jdGlvbi4KLXByb2dwYXRoPSIkMCIKK3Byb2dwYXRoPSQwCisKKyMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtLgorcHJvZ25hbWU9YCRic19lY2hvICIkcHJvZ3BhdGgiIHwkU0VEICIkc2VkX2Jhc2VuYW1lImAKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwcm9ncGF0aCBmb3IgcmVleGVjdXRpb246CitjYXNlICRwcm9ncGF0aCBpbgorICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OworICAqW1xcL10qKQorICAgICBwcm9nZGlyPWAkYnNfZWNobyAiJHByb2dwYXRoIiB8JFNFRCAiJHNlZF9kaXJuYW1lImAKKyAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCisgICAgIHByb2dwYXRoPSRwcm9nZGlyLyRwcm9nbmFtZQorICAgICA7OworICAqKQorICAgICBfR19JRlM9JElGUworICAgICBJRlM9JHtQQVRIX1NFUEFSQVRPUi06fQorICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICBJRlM9JF9HX0lGUworICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKKyAgICAgZG9uZQorICAgICBJRlM9JF9HX0lGUworICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAorICAgICBwcm9ncGF0aD0kcHJvZ2Rpci8kcHJvZ25hbWUKKyAgICAgOzsKK2VzYWMKIAogCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgU3RhbmRhcmQgb3B0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLTogJHtDUD0iY3AgLWYifQotdGVzdCAiJHtFQ0hPK3NldH0iID0gc2V0IHx8IEVDSE89JHthc19lY2hvLSdwcmludGYgJXNcbid9Ci06ICR7TUFLRT0ibWFrZSJ9Ci06ICR7TUtESVI9Im1rZGlyIn0KLTogJHtNVj0ibXYgLWYifQotOiAke1JNPSJybSAtZiJ9Ci06ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KLTogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorIyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYWZmZWN0IHRoZSBvcGVyYXRpb24gb2YgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkCisjIGJlbG93LCBhbmQgc2hvdWxkIGJlIHNldCBhcHByb3ByaWF0ZWx5IGRlcGVuZGluZyBvbiBydW4tdGltZSBwYXJhLQorIyBtZXRlcnMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAKLSMgR2xvYmFsIHZhcmlhYmxlczoKLUVYSVRfU1VDQ0VTUz0wCi1FWElUX0ZBSUxVUkU9MQotRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgotRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X3F1aWV0PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQogCi1leGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisjIENhdGVnb3JpZXMgJ2FsbCcgYW5kICdub25lJyBhcmUgYWx3YXlzIGF2YWlsYWJsZS4gIEFwcGVuZCBhbnkgb3RoZXJzCisjIHlvdSB3aWxsIHBhc3MgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGZ1bmNfd2FybmluZyBmcm9tIHlvdXIgb3duCisjIGNvZGUuCit3YXJuaW5nX2NhdGVnb3JpZXM9CiAKLSMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0Ci1sdF9ubD0nCi0nCi1JRlM9IiAJJGx0X25sIgorIyBCeSBkZWZhdWx0LCBkaXNwbGF5IHdhcm5pbmdzIGFjY29yZGluZyB0byAnb3B0X3dhcm5pbmdfdHlwZXMnLiAgU2V0CisjICd3YXJuaW5nX2Z1bmMnICB0byAnOicgdG8gZWxpZGUgYWxsIHdhcm5pbmdzLCBvciBmdW5jX2ZhdGFsX2Vycm9yIHRvCisjIHRyZWF0IHRoZSBuZXh0IGRpc3BsYXllZCB3YXJuaW5nIGFzIGEgZmF0YWwgZXJyb3IuCit3YXJuaW5nX2Z1bmM9ZnVuY193YXJuX2FuZF9jb250aW51ZQogCi1kaXJuYW1lPSJzLC9bXi9dKiQsLCIKLWJhc2VuYW1lPSJzLF4uKi8sLCIKKyMgU2V0IHRvICdhbGwnIHRvIGRpc3BsYXkgYWxsIHdhcm5pbmdzLCAnbm9uZScgdG8gc3VwcHJlc3MgYWxsCisjIHdhcm5pbmdzLCBvciBhIHNwYWNlIGRlbGltaXRlZCBsaXN0IG9mIHNvbWUgc3Vic2V0IG9mCisjICd3YXJuaW5nX2NhdGVnb3JpZXMnIHRvIGRpc3BsYXkgb25seSB0aGUgbGlzdGVkIHdhcm5pbmdzLgorb3B0X3dhcm5pbmdfdHlwZXM9YWxsCiAKLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVzb3VyY2UgbWFuYWdlbWVudC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBmdW5jdGlvbnMgdGhhdCBlYWNoIGVuc3VyZSBhCisjIHBhcnRpY3VsYXIgcmVzb3VyY2UgKGEgZmlsZSwgb3IgYSBub24tZW1wdHkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IKKyMgZXhhbXBsZSkgaXMgYXZhaWxhYmxlLCBhbmQgaWYgYXBwcm9wcmlhdGUgdG8gZXh0cmFjdCBkZWZhdWx0IHZhbHVlcworIyBmcm9tIHBlcnRpbmVudCBwYWNrYWdlIGZpbGVzLiBDYWxsIHRoZW0gdXNpbmcgdGhlaXIgYXNzb2NpYXRlZAorIyAncmVxdWlyZV8qJyB2YXJpYWJsZSB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBleGVjdXRlZCwgYXQgbW9zdCwgb25jZS4KKyMKKyMgSXQncyBlbnRpcmVseSBkZWxpYmVyYXRlIHRoYXQgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgY2FuIHNldAorIyB2YXJpYWJsZXMgdGhhdCBkb24ndCBvYmV5IHRoZSBuYW1lc3BhY2UgbGltaXRhdGlvbnMgb2JleWVkIGJ5IHRoZSByZXN0CisjIG9mIHRoaXMgZmlsZSwgaW4gb3JkZXIgdGhhdCB0aGF0IHRoZXkgYmUgYXMgdXNlZnVsIGFzIHBvc3NpYmxlIHRvCisjIGNhbGxlcnMuCisKKworIyByZXF1aXJlX3Rlcm1fY29sb3JzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsb3cgZGlzcGxheSBvZiBib2xkIHRleHQgb24gdGVybWluYWxzIHRoYXQgc3VwcG9ydCBpdC4KK3JlcXVpcmVfdGVybV9jb2xvcnM9ZnVuY19yZXF1aXJlX3Rlcm1fY29sb3JzCitmdW5jX3JlcXVpcmVfdGVybV9jb2xvcnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICB0ZXN0IC10IDEgJiYgeworICAgICAgIyBDT0xPUlRFUk0gYW5kIFVTRV9BTlNJX0NPTE9SUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGFrZQorICAgICAgIyBwcmVjZWRlbmNlLCBiZWNhdXNlIG1vc3QgdGVybWluZm8gZGF0YWJhc2VzIG5lZ2xlY3QgdG8gZGVzY3JpYmUKKyAgICAgICMgd2hldGhlciBjb2xvciBzZXF1ZW5jZXMgYXJlIHN1cHBvcnRlZC4KKyAgICAgIHRlc3QgLW4gIiR7Q09MT1JURVJNK3NldH0iICYmIDogJHtVU0VfQU5TSV9DT0xPUlM9IjEifQorCisgICAgICBpZiB0ZXN0IDEgPSAiJFVTRV9BTlNJX0NPTE9SUyI7IHRoZW4KKyAgICAgICAgIyBTdGFuZGFyZCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMKKyAgICAgICAgdGNfcmVzZXQ9JxtbMG0nCisgICAgICAgIHRjX2JvbGQ9JxtbMW0nOyAgIHRjX3N0YW5kb3V0PScbWzdtJworICAgICAgICB0Y19yZWQ9JxtbMzFtJzsgICB0Y19ncmVlbj0nG1szMm0nCisgICAgICAgIHRjX2JsdWU9JxtbMzRtJzsgIHRjX2N5YW49JxtbMzZtJworICAgICAgZWxzZQorICAgICAgICAjIE90aGVyd2lzZSB0cnVzdCB0aGUgdGVybWluZm8gZGF0YWJhc2UgYWZ0ZXIgYWxsLgorICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZ3IwIDI+L2Rldi9udWxsYCIgJiYgeworICAgICAgICAgIHRjX3Jlc2V0PWB0cHV0IHNncjBgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgYm9sZCAyPi9kZXYvbnVsbGAiICYmIHRjX2JvbGQ9YHRwdXQgYm9sZGAKKyAgICAgICAgICB0Y19zdGFuZG91dD0kdGNfYm9sZAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNtc28gMj4vZGV2L251bGxgIiAmJiB0Y19zdGFuZG91dD1gdHB1dCBzbXNvYAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDEgMj4vZGV2L251bGxgIiAmJiB0Y19yZWQ9YHRwdXQgc2V0YWYgMWAKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiAyIDI+L2Rldi9udWxsYCIgJiYgdGNfZ3JlZW49YHRwdXQgc2V0YWYgMmAKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiA0IDI+L2Rldi9udWxsYCIgJiYgdGNfYmx1ZT1gdHB1dCBzZXRhZiA0YAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDUgMj4vZGV2L251bGxgIiAmJiB0Y19jeWFuPWB0cHV0IHNldGFmIDVgCisgICAgICAgIH0KKyAgICAgIGZpCisgICAgfQorCisgICAgcmVxdWlyZV90ZXJtX2NvbG9ycz06Cit9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZ1bmN0aW9uIGxpYnJhcnkuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgc2VjdGlvbiBjb250YWlucyBhIHZhcmlldHkgb2YgdXNlZnVsIGZ1bmN0aW9ucyB0byBjYWxsIGluIHlvdXIKKyMgc2NyaXB0cy4gVGFrZSBub3RlIG9mIHRoZSBwb3J0YWJsZSB3cmFwcGVycyBmb3IgZmVhdHVyZXMgcHJvdmlkZWQgYnkKKyMgc29tZSBtb2Rlcm4gc2hlbGxzLCB3aGljaCB3aWxsIGZhbGwgYmFjayB0byBzbG93ZXIgZXF1aXZhbGVudHMgb24KKyMgbGVzcyBmZWF0dXJlZnVsIHNoZWxscy4KKworCisjIGZ1bmNfYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIFZBTFVFIG9udG8gdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUi4KKworICAjIFdlIHNob3VsZCB0cnkgdG8gbWluaW1pc2UgZm9ya3MsIGVzcGVjaWFsbHkgb24gV2luZG93cyB3aGVyZSB0aGV5IGFyZQorICAjIHVucmVhc29uYWJseSBzbG93LCBzbyBza2lwIHRoZSBmZWF0dXJlIHByb2JlcyB3aGVuIGJhc2ggb3IgenNoIGFyZQorICAjIGJlaW5nIHVzZWQ6CisgIGlmIHRlc3Qgc2V0ID0gIiR7QkFTSF9WRVJTSU9OK3NldH0ke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCisgICAgOiAke19HX0hBVkVfQVJJVEhfT1A9InllcyJ9CisgICAgOiAke19HX0hBVkVfWFNJX09QUz0ieWVzIn0KKyAgICAjIFRoZSArPSBvcGVyYXRvciB3YXMgaW50cm9kdWNlZCBpbiBiYXNoIDMuMQorICAgIGNhc2UgJEJBU0hfVkVSU0lPTiBpbgorICAgICAgWzEyXS4qIHwgMy4wIHwgMy4wKikgOzsKKyAgICAgICopCisgICAgICAgIDogJHtfR19IQVZFX1BMVVNFUV9PUD0ieWVzIn0KKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBfR19IQVZFX1BMVVNFUV9PUAorICAjIENhbiBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUgc2hlbGwgaXMgcHJvYmVkLCAieWVzIiBpZiArPSBpcworICAjIHVzZWFibGUgb3IgYW55dGhpbmcgZWxzZSBpZiBpdCBkb2VzIG5vdCB3b3JrLgorICB0ZXN0IC16ICIkX0dfSEFWRV9QTFVTRVFfT1AiIFwKKyAgICAmJiAoZXZhbCAneD1hOyB4Kz0iIGIiOyB0ZXN0ICJhIGIiID0gIiR4IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1BMVVNFUV9PUD15ZXMKKworaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfUExVU0VRX09QIgordGhlbgorICAjIFRoaXMgaXMgYW4gWFNJIGNvbXBhdGlibGUgc2hlbGwsIGFsbG93aW5nIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uLi4uCisgIGV2YWwgJ2Z1bmNfYXBwZW5kICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBldmFsICIkMSs9XCQyIgorICB9JworZWxzZQorICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgZXhwciwgd2hpY2ggaXMgb2Z0ZW4gYSBzaGVsbCBidWlsdGluLgorICBmdW5jX2FwcGVuZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAiJDE9XCQkMVwkMiIKKyAgfQorZmkKKworCisjIGZ1bmNfYXBwZW5kX3F1b3RlZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBWQUxVRSBhbmQgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLCBzZXBhcmF0ZWQKKyMgYnkgYSBzcGFjZS4KK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1BMVVNFUV9PUCI7IHRoZW4KKyAgZXZhbCAnZnVuY19hcHBlbmRfcXVvdGVkICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkMiIKKyAgICBldmFsICIkMSs9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgfScKK2Vsc2UKKyAgZnVuY19hcHBlbmRfcXVvdGVkICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkMiIKKyAgICBldmFsICIkMT1cJCQxXFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgfQorZmkKKworCisjIGZ1bmNfYXBwZW5kX3VuaXEgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB1bmlxdWUgVkFMVUUgb250byB0aGUgZXhpc3RpbmcgY29udGVudHMgb2YgVkFSLCBhc3N1bWluZworIyBlbnRyaWVzIGFyZSBkZWxpbWl0ZWQgYnkgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBWQUxVRS4gIEZvciBleGFtcGxlOgorIworIyAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0aW9ucyAiIC0tYW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50IgorIworIyB3aWxsIG9ubHkgYXBwZW5kIHRvICRvcHRpb25zIGlmICIgLS1hbm90aGVyLW9wdGlvbiBvcHRpb24tYXJndW1lbnQgIgorIyBpcyBub3QgYWxyZWFkeSBwcmVzZW50IHNvbWV3aGVyZSBpbiAkb3B0aW9ucyBhbHJlYWR5IChub3RlIHNwYWNlcyBhdAorIyBlYWNoIGVuZCBpbXBsaWVkIGJ5IGxlYWRpbmcgc3BhY2UgaW4gc2Vjb25kIGFyZ3VtZW50KS4KK2Z1bmNfYXBwZW5kX3VuaXEgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBldmFsIF9HX2N1cnJlbnRfdmFsdWU9J2AkYnNfZWNobyAkJyQxJ2AnCisgICAgX0dfZGVsaW09YGV4cHIgIiQyIiA6ICdcKC5cKSdgCisKKyAgICBjYXNlICRfR19kZWxpbSRfR19jdXJyZW50X3ZhbHVlJF9HX2RlbGltIGluCisgICAgICAqIiQyJF9HX2RlbGltIiopIDs7CisgICAgICAqKSBmdW5jX2FwcGVuZCAiJEAiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19hcml0aCBURVJNLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgZnVuY19hcml0aF9yZXN1bHQgdG8gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIFRFUk1zLgorICB0ZXN0IC16ICIkX0dfSEFWRV9BUklUSF9PUCIgXAorICAgICYmIChldmFsICd0ZXN0IDIgPSAkKCggMSArIDEgKSknKSAyPi9kZXYvbnVsbCBcCisgICAgJiYgX0dfSEFWRV9BUklUSF9PUD15ZXMKKworaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfQVJJVEhfT1AiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfYXJpdGggKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorICB9JworZWxzZQorICBmdW5jX2FyaXRoICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorICB9CitmaQorCisKKyMgZnVuY19iYXNlbmFtZSBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgZnVuY19iYXNlbmFtZV9yZXN1bHQgdG8gRklMRSB3aXRoIGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZworIyB0aGUgbGFzdCAvIHN0cmlwcGVkLgoraWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KKyAgIyBJZiB0aGlzIHNoZWxsIHN1cHBvcnRzIHN1ZmZpeCBwYXR0ZXJuIHJlbW92YWwsIHRoZW4gdXNlIGl0IHRvIGF2b2lkCisgICMgZm9ya2luZy4gSGlkZSB0aGUgZGVmaW5pdGlvbnMgc2luZ2xlIHF1b3RlcyBpbiBjYXNlIHRoZSBzaGVsbCBjaG9rZXMKKyAgIyBvbiB1bnN1cHBvcnRlZCBzeW50YXguLi4KKyAgX2I9J2Z1bmNfYmFzZW5hbWVfcmVzdWx0PSR7MSMjKi99JworICBfZD0nY2FzZSAkMSBpbgorICAgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JHsxJS8qfSQyIDs7CisgICAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMyAgICAgICAgOzsKKyAgICAgIGVzYWMnCisKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIHNlZC4KKyAgX2I9J2Z1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJDEiIHwkU0VEICIkc2VkX2Jhc2VuYW1lImAnCisgIF9kPSdmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJDEiICB8JFNFRCAiJHNlZF9kaXJuYW1lImAKKyAgICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCQxIjsgdGhlbgorICAgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSQzCisgICAgICBlbHNlCisgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfZGlybmFtZV9yZXN1bHQgIiQyIgorICAgICAgZmknCitmaQorCitldmFsICdmdW5jX2Jhc2VuYW1lICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJyIkX2IiJworfScKKworCisjIGZ1bmNfZGlybmFtZSBGSUxFIEFQUEVORCBOT05ESVJfUkVQTEFDRU1FTlQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAogIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi1mdW5jX2Rpcm5hbWUgKCkKK2V2YWwgJ2Z1bmNfZGlybmFtZSAoKQogewotICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKLSAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgotICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKLSAgICBlbHNlCi0gICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCi0gICAgZmkKLX0gIyBmdW5jX2Rpcm5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgICAgJGRlYnVnX2NtZAorCisgICAgJyIkX2QiJworfScKIAogCi0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotZnVuY19iYXNlbmFtZSAoKQotewotICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAotfSAjIGZ1bmNfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0KLQotIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIEZJTEUgQVBQRU5EIE5PTkRJUl9SRVBMQUNFTUVOVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgogIyBjYWxsOgogIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKICMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdApAQCAtMTkwLDI2MyArNTg3LDMyNyBAQAogIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCiAjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KICMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCi0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCi0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKyMgRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0byB0aGUgZnVuY3Rpb25zIGFib3ZlIGJ1dCBpbnN0ZWFkCisjIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZXZhbCAnZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQogewotICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAotICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCi0gICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgotICAgIGVsc2UKLSAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgICAkZGVidWdfY21kCisKKyAgICAnIiRfYiInCisgICAgJyIkX2QiJworfScKKworCisjIGZ1bmNfZWNobyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLgorZnVuY19lY2hvICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfbWVzc2FnZT0kKgorCisgICAgZnVuY19lY2hvX0lGUz0kSUZTCisgICAgSUZTPSRubAorICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBkbworICAgICAgSUZTPSRmdW5jX2VjaG9fSUZTCisgICAgICAkYnNfZWNobyAiJHByb2duYW1lOiAkX0dfbGluZSIKKyAgICBkb25lCisgICAgSUZTPSRmdW5jX2VjaG9fSUZTCit9CisKKworIyBmdW5jX2VjaG9fYWxsIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIKK30KKworCisjIGZ1bmNfZWNob19pbmZpeF8xIElORklYIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUsIGZvbGxvd2VkIGJ5IElORklYIG9uIHRoZSBmaXJzdCBsaW5lLCB3aXRoIGFueQorIyBhZGRpdGlvbmFsIGxpbmVzIG5vdCBzaG93aW5nIElORklYLgorZnVuY19lY2hvX2luZml4XzEgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycworCisgICAgX0dfaW5maXg9JDE7IHNoaWZ0CisgICAgX0dfaW5kZW50PSRfR19pbmZpeAorICAgIF9HX3ByZWZpeD0iJHByb2duYW1lOiAkX0dfaW5maXg6ICIKKyAgICBfR19tZXNzYWdlPSQqCisKKyAgICAjIFN0cmlwIGNvbG9yIGVzY2FwZSBzZXF1ZW5jZXMgYmVmb3JlIGNvdW50aW5nIHByaW50YWJsZSBsZW5ndGgKKyAgICBmb3IgX0dfdGMgaW4gIiR0Y19yZXNldCIgIiR0Y19ib2xkIiAiJHRjX3N0YW5kb3V0IiAiJHRjX3JlZCIgIiR0Y19ncmVlbiIgIiR0Y19ibHVlIiAiJHRjX2N5YW4iCisgICAgZG8KKyAgICAgIHRlc3QgLW4gIiRfR190YyIgJiYgeworICAgICAgICBfR19lc2NfdGM9YCRic19lY2hvICIkX0dfdGMiIHwgc2VkICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIF9HX2luZGVudD1gJGJzX2VjaG8gIiRfR19pbmRlbnQiIHwgc2VkICJzfCRfR19lc2NfdGN8fGciYAorICAgICAgfQorICAgIGRvbmUKKyAgICBfR19pbmRlbnQ9IiRwcm9nbmFtZTogImBlY2hvICIkX0dfaW5kZW50IiB8IHNlZCAnc3wufCB8ZydgIiAgIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcworCisgICAgZnVuY19lY2hvX2luZml4XzFfSUZTPSRJRlMKKyAgICBJRlM9JG5sCisgICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCisgICAgICBJRlM9JGZ1bmNfZWNob19pbmZpeF8xX0lGUworICAgICAgJGJzX2VjaG8gIiRfR19wcmVmaXgkdGNfYm9sZCRfR19saW5lJHRjX3Jlc2V0IiA+JjIKKyAgICAgIF9HX3ByZWZpeD0kX0dfaW5kZW50CisgICAgZG9uZQorICAgIElGUz0kZnVuY19lY2hvX2luZml4XzFfSUZTCit9CisKKworIyBmdW5jX2Vycm9yIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCisKKyAgICBmdW5jX2VjaG9faW5maXhfMSAiICAkdGNfc3RhbmRvdXQke3RjX3JlZH1lcnJvciR0Y19yZXNldCIgIiQqIiA+JjIKK30KKworCisjIGZ1bmNfZmF0YWxfZXJyb3IgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgorZnVuY19mYXRhbF9lcnJvciAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfZXJyb3IgIiQqIgorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorfQorCisKKyMgZnVuY19ncmVwIEVYUFJFU1NJT04gRklMRU5BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgorZnVuY19ncmVwICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQorfQorCisKKyMgZnVuY19sZW4gU1RSSU5HCisjIC0tLS0tLS0tLS0tLS0tLQorIyBTZXQgZnVuY19sZW5fcmVzdWx0IHRvIHRoZSBsZW5ndGggb2YgU1RSSU5HLiBTVFJJTkcgbWF5IG5vdAorIyBzdGFydCB3aXRoIGEgaHlwaGVuLgorICB0ZXN0IC16ICIkX0dfSEFWRV9YU0lfT1BTIiBcCisgICAgJiYgKGV2YWwgJ3g9YS9iL2M7CisgICAgICB0ZXN0IDVhYS9iYi9jYyA9ICIkeyN4fSR7eCUlLyp9JHt4JS8qfSR7eCMqL30ke3gjIyovfSInKSAyPi9kZXYvbnVsbCBcCisgICAgJiYgX0dfSEFWRV9YU0lfT1BTPXllcworCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgorICBldmFsICdmdW5jX2xlbiAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CisgIH0nCitlbHNlCisgIGZ1bmNfbGVuICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCisgIH0KK2ZpCisKKworIyBmdW5jX21rZGlyX3AgRElSRUNUT1JZLVBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgorZnVuY19ta2Rpcl9wICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfZGlyZWN0b3J5X3BhdGg9JDEKKyAgICBfR19kaXJfbGlzdD0KKworICAgIGlmIHRlc3QgLW4gIiRfR19kaXJlY3RvcnlfcGF0aCIgJiYgdGVzdCA6ICE9ICIkb3B0X2RyeV9ydW4iOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCAnLScKKyAgICAgIGNhc2UgJF9HX2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBfR19kaXJlY3RvcnlfcGF0aD0uLyRfR19kaXJlY3RvcnlfcGF0aCA7OworICAgICAgZXNhYworCisgICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCisgICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRfR19kaXJlY3RvcnlfcGF0aCI7IGRvCisgICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAorCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KKyAgICAgICAgX0dfZGlyX2xpc3Q9JF9HX2RpcmVjdG9yeV9wYXRoOiRfR19kaXJfbGlzdAorCisgICAgICAgICMgSWYgdGhlIGxhc3QgcG9ydGlvbiBhZGRlZCBoYXMgbm8gc2xhc2ggaW4gaXQsIHRoZSBsaXN0IGlzIGRvbmUKKyAgICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCisKKyAgICAgICAgIyAuLi5vdGhlcndpc2UgdGhyb3cgYXdheSB0aGUgY2hpbGQgZGlyZWN0b3J5IGFuZCBsb29wCisgICAgICAgIF9HX2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiJF9HX2RpcmVjdG9yeV9wYXRoIiB8ICRTRUQgLWUgIiRzZWRfZGlybmFtZSJgCisgICAgICBkb25lCisgICAgICBfR19kaXJfbGlzdD1gJEVDSE8gIiRfR19kaXJfbGlzdCIgfCAkU0VEICdzfDoqJHx8J2AKKworICAgICAgZnVuY19ta2Rpcl9wX0lGUz0kSUZTOyBJRlM9OgorICAgICAgZm9yIF9HX2RpciBpbiAkX0dfZGlyX2xpc3Q7IGRvCisJSUZTPSRmdW5jX21rZGlyX3BfSUZTCisgICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhICdGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCisgICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0CisgICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCisgICAgICAgICRNS0RJUiAiJF9HX2RpciIgMj4vZGV2L251bGwgfHwgOgorICAgICAgZG9uZQorICAgICAgSUZTPSRmdW5jX21rZGlyX3BfSUZTCisKKyAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KKyAgICAgIHRlc3QgLWQgIiRfR19kaXJlY3RvcnlfcGF0aCIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlICckMSciCiAgICAgZmkKLSAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGJhc2VuYW1lImAKLX0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorfQogCiAKLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgotIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQotZnVuY19zdHJpcG5hbWUgKCkKKyMgZnVuY19ta3RlbXBkaXIgW0JBU0VOQU1FXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBCQVNFTkFNRSBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKIHsKLSAgICBjYXNlICR7Mn0gaW4KLSAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7Ci0gICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7Ci0gICAgZXNhYwotfSAjIGZ1bmNfc3RyaXBuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorICAgICRkZWJ1Z19jbWQKIAorICAgIF9HX3RlbXBsYXRlPSR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9CiAKLSMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KLXBhdGhjYXI9J3MsXi9cKFteL10qXCkuKiQsXDEsJwotcGF0aGNkcj0ncyxeL1teL10qLCwnCi1yZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCi0JCXNAL1wuL0AvQGcKLQkJdCBkb3RzbAotCQlzLC9cLiQsLywnCi1jb2xsYXBzZXNsYXNoZXM9J3NAL1x7MSxcfUAvQGcnCi1maW5hbHNsYXNoPSdzLC8qJCwvLCcKKyAgICBpZiB0ZXN0IDogPSAiJG9wdF9kcnlfcnVuIjsgdGhlbgorICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKyAgICAgIF9HX3RtcGRpcj0kX0dfdGVtcGxhdGUtJCQKKyAgICBlbHNlCisKKyAgICAgICMgSWYgbWt0ZW1wIHdvcmtzLCB1c2UgdGhhdCBmaXJzdCBhbmQgZm9yZW1vc3QKKyAgICAgIF9HX3RtcGRpcj1gbWt0ZW1wIC1kICIkX0dfdGVtcGxhdGUtWFhYWFhYWFgiIDI+L2Rldi9udWxsYAorCisgICAgICBpZiB0ZXN0ICEgLWQgIiRfR190bXBkaXIiOyB0aGVuCisgICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQorICAgICAgICBfR190bXBkaXI9JF9HX3RlbXBsYXRlLSR7UkFORE9NLTB9JCQKKworICAgICAgICBmdW5jX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCisgICAgICAgIHVtYXNrIDAwNzcKKyAgICAgICAgJE1LRElSICIkX0dfdG1wZGlyIgorICAgICAgICB1bWFzayAkZnVuY19ta3RlbXBkaXJfdW1hc2sKKyAgICAgIGZpCisKKyAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQorICAgICAgdGVzdCAtZCAiJF9HX3RtcGRpciIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgJyRfR190bXBkaXInIgorICAgIGZpCisKKyAgICAkRUNITyAiJF9HX3RtcGRpciIKK30KKwogCiAjIGZ1bmNfbm9ybWFsX2Fic3BhdGggUEFUSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgUmVtb3ZlIGRvdWJsZWQtdXAgYW5kIHRyYWlsaW5nIHNsYXNoZXMsICIuIiBwYXRoIGNvbXBvbmVudHMsCiAjIGFuZCBjYW5jZWwgb3V0IGFueSAiLi4iIHBhdGggY29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2luZwogIyBpdCBhbiBhYnNvbHV0ZSBwYXRoLgotIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgogZnVuY19ub3JtYWxfYWJzcGF0aCAoKQogewotICAjIFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNzZW1ibGUgdGhlIHBhdGguCi0gIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PQotICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCi0gIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPQotICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIGluCi0gICAgIiIpCi0gICAgICAjIEVtcHR5IHBhdGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgotICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICJgcHdkYCIKLSAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICAgIHJldHVybgotICAgIDs7Ci0gICAgIyBUaGUgbmV4dCB0aHJlZSBlbnRyaWVzIGFyZSB1c2VkIHRvIHNwb3QgYSBydW4gb2YgcHJlY2lzZWx5Ci0gICAgIyB0d28gbGVhZGluZyBzbGFzaGVzIHdpdGhvdXQgdXNpbmcgbmVnYXRlZCBjaGFyYWN0ZXIgY2xhc3NlczsKLSAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCi0gICAgLy8vKikKLSAgICAgICMgVW51c3VhbCBmb3JtIG9mIGFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCi0gICAgOzsKLSAgICAvLyopCi0gICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKLSAgICAgICMgYW5kIGZvciBleGFtcGxlIEN5Z3dpbiB1c2VzIGl0IHRvIGFjY2VzcyByZW1vdGUgZmlsZSBzaGFyZXMKLSAgICAgICMgb3ZlciBDSUZTL1NNQiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRvdWJsZSBzbGFzaCBpZiBmb3VuZC4KLSAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KLSAgICA7OwotICAgIC8qKQotICAgICAgIyBBYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgotICAgIDs7Ci0gICAgKikKLSAgICAgICMgUmVsYXRpdmUgcGF0aCwgcHJlcGVuZCAkY3dkLgotICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAotICAgIDs7Ci0gIGVzYWMKLSAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAotICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCi0gICMgdGhlcmUgaXMgb25lIChhbmQgb25seSBvbmUpIGhlcmUuCi0gIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKLSAgICAgICAgLWUgIiRyZW1vdmVkb3RwYXJ0cyIgLWUgIiRjb2xsYXBzZXNsYXNoZXMiIC1lICIkZmluYWxzbGFzaCJgCi0gIHdoaWxlIDo7IGRvCi0gICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KLSAgICBpZiB0ZXN0ICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgPSAvIDsgdGhlbgotICAgICAgIyBJZiB3ZSBhc2NlbmRlZCB0byB0aGUgcm9vdCB1c2luZyAiLi4iIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5IG5vdy4KLSAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIgOyB0aGVuCi0gICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PS8KLSAgICAgIGZpCi0gICAgICBicmVhawotICAgIGZpCi0gICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCi0gICAgICAgIC1lICIkcGF0aGNhciJgCi0gICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAotICAgICAgICAtZSAiJHBhdGhjZHIiYAotICAgICMgRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKLSAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQgaW4KKyAgICAkZGVidWdfY21kCisKKyAgICAjIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCisgICAgX0dfcGF0aGNhcj0nc3xeL1woW14vXSpcKS4qJHxcMXwnCisgICAgX0dfcGF0aGNkcj0nc3xeL1teL10qfHwnCisgICAgX0dfcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAorCQlzfC9cLi98L3xnCisJCXQgZG90c2wKKwkJc3wvXC4kfC98JworICAgIF9HX2NvbGxhcHNlc2xhc2hlcz0nc3wvXHsxLFx9fC98ZycKKyAgICBfR19maW5hbHNsYXNoPSdzfC8qJHwvfCcKKworICAgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgogICAgICAgIiIpCi0gICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KLSAgICAgIDs7Ci0gICAgICAuLikKLSAgICAgICAgIyBQYXJlbnQgZGlyOyBzdHJpcCBsYXN0IGFzc2VtYmxlZCBjb21wb25lbnQgZnJvbSByZXN1bHQuCi0gICAgICAgIGZ1bmNfZGlybmFtZSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgotICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAotICAgICAgOzsKLSAgICAgICopCi0gICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCi0gICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdC8kZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotICAjIFJlc3RvcmUgbGVhZGluZyBkb3VibGUtc2xhc2ggaWYgb25lIHdhcyBmb3VuZCBvbiBlbnRyeS4KLSAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Ci19Ci0KLSMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKLSMgZ2VuZXJhdGVzIGEgcmVsYXRpdmUgcGF0aCBmcm9tIFNSQ0RJUiB0byBEU1RESVIsIHdpdGggYSB0cmFpbGluZwotIyBzbGFzaCBpZiBub24tZW1wdHksIHN1aXRhYmxlIGZvciBpbW1lZGlhdGVseSBhcHBlbmRpbmcgYSBmaWxlbmFtZQotIyB3aXRob3V0IG5lZWRpbmcgdG8gYXBwZW5kIGEgc2VwYXJhdG9yLgotIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCi1mdW5jX3JlbGF0aXZlX3BhdGggKCkKLXsKLSAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0KLSAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCi0gIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMiIKLSAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Ci0KLSAgIyBBc2NlbmQgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBsaWJkaXIKLSAgd2hpbGUgOjsgZG8KLSAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCi0gICAgY2FzZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIgaW4KLSAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKLSAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAotICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0KLSAgICAgICAgYnJlYWsKKyAgICAgICAgIyBFbXB0eSBwYXRoLCB0aGF0IGp1c3QgbWVhbnMgJGN3ZC4KKyAgICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICJgcHdkYCIKKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgICByZXR1cm4KICAgICAgICAgOzsKLSAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciopCi0gICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKLSAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKLSAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KLSAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KLSAgICAgICAgZmkKLSAgICAgICAgYnJlYWsKKyAgICAgICMgVGhlIG5leHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBzcG90IGEgcnVuIG9mIHByZWNpc2VseQorICAgICAgIyB0d28gbGVhZGluZyBzbGFzaGVzIHdpdGhvdXQgdXNpbmcgbmVnYXRlZCBjaGFyYWN0ZXIgY2xhc3NlczsKKyAgICAgICMgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgY2FzZSdzIGZpcnN0LW1hdGNoIGJlaGF2aW91ci4KKyAgICAgIC8vLyopCisgICAgICAgICMgVW51c3VhbCBmb3JtIG9mIGFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgICAgIDs7CisgICAgICAvLyopCisgICAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJworICAgICAgICAjIGFuZCBmb3IgZXhhbXBsZSBDeWd3aW4gdXNlcyBpdCB0byBhY2Nlc3MgcmVtb3RlIGZpbGUgc2hhcmVzCisgICAgICAgICMgb3ZlciBDSUZTL1NNQiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRvdWJsZSBzbGFzaCBpZiBmb3VuZC4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LworICAgICAgICA7OworICAgICAgLyopCisgICAgICAgICMgQWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KICAgICAgICAgOzsKICAgICAgICopCi0gICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKLSAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JHtmdW5jX2Rpcm5hbWVfcmVzdWx0fQotICAgICAgICBpZiB0ZXN0ICJ4JGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiA9IHggOyB0aGVuCi0gICAgICAgICAgIyBIYXZlIHRvIGRlc2NlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QhCi0gICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAotICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgotICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YHB3ZGAvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgKICAgICAgICAgOzsKICAgICBlc2FjCi0gIGRvbmUKIAotICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCi0gIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCi0gIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCi0gIGlmIHRlc3QgIngkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiAhPSB4IDsgdGhlbgotICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JHtmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0fS8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0KLSAgZmkKLQotICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiBlbXB0eSBzdHJpbmcsCi0gICMgZWxzZSByZWxhdGl2ZSBwYXRoIGVuZGluZyB3aXRoIGEgc2xhc2g7IGVpdGhlciB3YXksIHRhcmdldAotICAjIGZpbGUgbmFtZSBjYW4gYmUgZGlyZWN0bHkgYXBwZW5kZWQuCi0gIGlmIHRlc3QgISAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCi0gICAgZnVuY19zdHJpcG5hbWUgJy4vJyAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvIgotICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICBmaQorICAgICMgQ2FuY2VsIG91dCBhbGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKKyAgICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCisgICAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19yZW1vdmVkb3RwYXJ0cyIgLWUgIiRfR19jb2xsYXBzZXNsYXNoZXMiIC1lICIkX0dfZmluYWxzbGFzaCJgCisgICAgd2hpbGUgOjsgZG8KKyAgICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/CisgICAgICBpZiB0ZXN0IC8gPSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiOyB0aGVuCisgICAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19wYXRoY2FyImAKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgICAtZSAiJF9HX3BhdGhjZHIiYAorICAgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAorICAgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisgICAgICAgICIiKQorICAgICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KKyAgICAgICAgICA7OworICAgICAgICAuLikKKyAgICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNvbXBvbmVudCBmcm9tIHJlc3VsdC4KKyAgICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKKyAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCAiLyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CiB9CiAKLSMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgotZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJHByb2dwYXRoIgotcHJvZ25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAKLSMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCBmb3IgcmVleGVjdXRpb246Ci1jYXNlICRwcm9ncGF0aCBpbgotICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OwotICAqW1xcL10qKQotICAgICBwcm9nZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0gICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAotICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgotICAgICA7OwotICAqKQotICAgICBzYXZlX0lGUz0iJElGUyIKLSAgICAgSUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KLSAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCi0gICAgICAgSUZTPSIkc2F2ZV9JRlMiCi0gICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhawotICAgICBkb25lCi0gICAgIElGUz0iJHNhdmVfSUZTIgotICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAotICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgotICAgICA7OwotZXNhYwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCi0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotWHNlZD0iJHtTRUR9IicgLWUgMXMvXlgvLycKLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgotZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCB0dXJucyBhIHN0cmluZyBpbnRvIGEgcmVnZXggbWF0Y2hpbmcgZm9yIHRoZQotIyBzdHJpbmcgbGl0ZXJhbGx5Lgotc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0ncyxbXS5bXiRcXCpcL10sXFwmLGcnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCi0jIHdoaWNoIGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucwotIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCi1sdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCi0KLSMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCi0jIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCi0jIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KLSMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKLSMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgotYnM9J1xcJwotYnMyPSdcXFxcJwotYnM0PSdcXFxcXFxcXCcKLWRvbGxhcj0nXCQnCi1zZWRfZG91YmxlX2JhY2tzbGFzaD0iXAotICBzLyRiczQvJlxcCi0vZwotICBzL14kYnMyJGRvbGxhci8kYnMmLwotICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKLSAgcy9cbi8vZyIKLQotIyBTdGFuZGFyZCBvcHRpb25zOgotb3B0X2RyeV9ydW49ZmFsc2UKLW9wdF9oZWxwPWZhbHNlCi1vcHRfcXVpZXQ9ZmFsc2UKLW9wdF92ZXJib3NlPWZhbHNlCi1vcHRfd2FybmluZz06Ci0KLSMgZnVuY19lY2hvIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKLSMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgotZnVuY19lY2hvICgpCisjIGZ1bmNfbm90cXVpZXQgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2Ugb25seSB3aGVuIG5vdCBpbiBxdWlldCBtb2RlLgorZnVuY19ub3RxdWlldCAoKQogewotICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9JCoiCi19CisgICAgJGRlYnVnX2NtZAogCi0jIGZ1bmNfdmVyYm9zZSBhcmcuLi4KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KLWZ1bmNfdmVyYm9zZSAoKQotewotICAgICRvcHRfdmVyYm9zZSAmJiBmdW5jX2VjaG8gJHsxKyIkQCJ9CisgICAgJG9wdF9xdWlldCB8fCBmdW5jX2VjaG8gJHsxKyIkQCJ9CiAKICAgICAjIEEgYnVnIGluIGJhc2ggaGFsdHMgdGhlIHNjcmlwdCBpZiB0aGUgbGFzdCBsaW5lIG9mIGEgZnVuY3Rpb24KICAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGluIGZvcmNlLCBzbyB3ZSBuZWVkIGFub3RoZXIgY29tbWFuZCB0bwpAQCAtNDU0LDQ1MCArOTE1LDExMjIgQEAKICAgICA6CiB9CiAKLSMgZnVuY19lY2hvX2FsbCBhcmcuLi4KLSMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KLWZ1bmNfZWNob19hbGwgKCkKLXsKLSAgICAkRUNITyAiJCoiCi19CiAKLSMgZnVuY19lcnJvciBhcmcuLi4KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KLWZ1bmNfZXJyb3IgKCkKKyMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQgdG8gdGhlIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLgorZnVuY19yZWxhdGl2ZV9wYXRoICgpCiB7Ci0gICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0iJHsxKyIkQCJ9IDE+JjIKLX0KKyAgICAkZGVidWdfY21kCiAKLSMgZnVuY193YXJuaW5nIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCi1mdW5jX3dhcm5pbmcgKCkKLXsKLSAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH13YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PQorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQxIgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQyIgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAogCi0gICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgorICAgIHdoaWxlIDo7IGRvCisgICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisgICAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgorICAgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCisgICAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQorICAgICAgICAgIGJyZWFrCisgICAgICAgICAgOzsKKyAgICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKKyAgICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4CisgICAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKyAgICAgICAgICBmaQorICAgICAgICAgIGJyZWFrCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiOyB0aGVuCisgICAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICBmaQorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91YmxpbmctdXAgc2xhc2hlcy4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZCIKKyAgICBpZiB0ZXN0IC1uICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorICAgICAgZnVuY19hcHBlbmQgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCAiLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisgICAgZmkKKworICAgICMgTm9ybWFsaXNhdGlvbi4gSWYgYmluZGlyIGlzIGxpYmRpciwgcmV0dXJuICcuJyBlbHNlIHJlbGF0aXZlIHBhdGguCisgICAgaWYgdGVzdCAtbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKyAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZpCisKKyAgICB0ZXN0IC1uICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIgfHwgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisKICAgICA6CiB9CiAKLSMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCi1mdW5jX2ZhdGFsX2Vycm9yICgpCi17Ci0gICAgZnVuY19lcnJvciAkezErIiRAIn0KLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLX0KIAotIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5Ci0jIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KLWZ1bmNfZmF0YWxfaGVscCAoKQotewotICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9Ci0gICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCi19Ci1oZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0Ci0KLQotIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQotIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCi1mdW5jX2dyZXAgKCkKLXsKLSAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCi19Ci0KLQotIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKLSMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCi1mdW5jX21rZGlyX3AgKCkKLXsKLSAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCi0gICAgbXlfZGlyX2xpc3Q9Ci0KLSAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCi0KLSAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKLSAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCi0gICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KLSAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KLSAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCi0JIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgotICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKLQotICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCi0gICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYwotCi0gICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAotICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIiRteV9kaXJlY3RvcnlfcGF0aCIgfCAkU0VEIC1lICIkZGlybmFtZSJgCi0gICAgICBkb25lCi0gICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIiRteV9kaXJfbGlzdCIgfCAkU0VEICdzLDoqJCwsJ2AKLQotICAgICAgc2F2ZV9ta2Rpcl9wX0lGUz0iJElGUyI7IElGUz0nOicKLSAgICAgIGZvciBteV9kaXIgaW4gJG15X2Rpcl9saXN0OyBkbwotCUlGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCi0gICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhIGBGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCi0gICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0Ci0gICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCi0gICAgICAgICRNS0RJUiAiJG15X2RpciIgMj4vZGV2L251bGwgfHwgOgotICAgICAgZG9uZQotICAgICAgSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKLQotICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgotICAgICAgdGVzdCAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIiB8fCBcCi0gICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgXGAkMSciCi0gICAgZmkKLX0KLQotCi0jIGZ1bmNfbWt0ZW1wZGlyIFtzdHJpbmddCi0jIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCi0jIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCi0jIGdpdmVuLCBTVFJJTkcgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KLWZ1bmNfbWt0ZW1wZGlyICgpCi17Ci0gICAgbXlfdGVtcGxhdGU9IiR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9IgotCi0gICAgaWYgdGVzdCAiJG9wdF9kcnlfcnVuIiA9ICI6IjsgdGhlbgotICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKLSAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCi0gICAgZWxzZQotCi0gICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0Ci0gICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAotCi0gICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCi0gICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQotICAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCi0KLSAgICAgICAgc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAotICAgICAgICB1bWFzayAwMDc3Ci0gICAgICAgICRNS0RJUiAiJG15X3RtcGRpciIKLSAgICAgICAgdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCi0gICAgICBmaQotCi0gICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKLSAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IFwKLSAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IFxgJG15X3RtcGRpciciCi0gICAgZmkKLQotICAgICRFQ0hPICIkbXlfdG1wZGlyIgotfQotCi0KLSMgZnVuY19xdW90ZV9mb3JfZXZhbCBhcmcKLSMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyLgotIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczogRlVOQ19RVU9URV9GT1JfRVZBTF9SRVNVTFQKLSMgaXMgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsLCB3aGVyZWFzCi0jIEZVTkNfUVVPVEVfRk9SX0VWQUxfVU5RVU9URURfUkVTVUxUIGhhcyBtZXJlbHkgYWxsIGNoYXJhY3RlcnMKLSMgd2hpY2ggYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KKyMgZnVuY19xdW90ZV9mb3JfZXZhbCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkdzIHRvIGJlIGV2YWxlZCBsYXRlci4KKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6CisjICAgaSkgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyMgICAgICBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwKKyMgIGlpKSBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAorIyAgICAgIGhhcyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZQorIyAgICAgIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KIGZ1bmNfcXVvdGVfZm9yX2V2YWwgKCkKIHsKLSAgICBjYXNlICQxIGluCi0gICAgICAqW1xcXGBcIlwkXSopCi0JZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKLSAgICAgICopCi0gICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKLSAgICBlc2FjCisgICAgJGRlYnVnX2NtZAogCi0gICAgY2FzZSAkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgaW4KLSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQotICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIGFuZCB2YXJpYWJsZQotICAgICAgIyBleHBhbnNpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgotICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKLSAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IlwiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0XCIiCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IgotICAgIGVzYWMKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0KKyAgICB3aGlsZSB0ZXN0IDAgLWx0ICQjOyBkbworICAgICAgY2FzZSAkMSBpbgorICAgICAgICAqW1xcXGBcIlwkXSopCisJICBfR191bnF1b3RlZF9hcmc9YHByaW50ZiAnJXNcbicgIiQxIiB8JFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7CisgICAgICAgICopCisgICAgICAgICAgX0dfdW5xdW90ZWRfYXJnPSQxIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0IC1uICIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiOyB0aGVuCisJZnVuY19hcHBlbmQgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgIiAkX0dfdW5xdW90ZWRfYXJnIgorICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCAiJF9HX3VucXVvdGVkX2FyZyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJF9HX3VucXVvdGVkX2FyZyBpbgorICAgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIHZhcmlhYmxlIGV4cGFuc2lvbgorICAgICAgICAjIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgICAgX0dfcXVvdGVkX2FyZz1cIiRfR191bnF1b3RlZF9hcmdcIgorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgX0dfcXVvdGVkX2FyZz0kX0dfdW5xdW90ZWRfYXJnCisJICA7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IC1uICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiOyB0aGVuCisJZnVuY19hcHBlbmQgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIiAkX0dfcXVvdGVkX2FyZyIKKyAgICAgIGVsc2UKKyAgICAgICAgZnVuY19hcHBlbmQgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIiRfR19xdW90ZWRfYXJnIgorICAgICAgZmkKKyAgICAgIHNoaWZ0CisgICAgZG9uZQogfQogCiAKLSMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgQVJHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAogIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCiBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKIHsKKyAgICAkZGVidWdfY21kCisKICAgICBjYXNlICQxIGluCiAgICAgICAqW1xcXGBcIl0qKQotCW15X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAotCSAgICAtZSAiJGRvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7CisJX0dfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCisJICAgIC1lICIkc2VkX2RvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7CiAgICAgICAqKQotICAgICAgICBteV9hcmc9IiQxIiA7OworICAgICAgICBfR19hcmc9JDEgOzsKICAgICBlc2FjCiAKLSAgICBjYXNlICRteV9hcmcgaW4KKyAgICBjYXNlICRfR19hcmcgaW4KICAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQogICAgICAgIyB3b3JkIHNwbGl0dGluZyBhbmQgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgogICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKICAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCiAgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLSAgICAgICAgbXlfYXJnPSJcIiRteV9hcmdcIiIKKyAgICAgICAgX0dfYXJnPVwiJF9HX2FyZ1wiCiAgICAgICAgIDs7CiAgICAgZXNhYwogCi0gICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0iJG15X2FyZyIKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSRfR19hcmcKIH0KIAogCi0jIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCi0jIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgZnVuY19zdHJpcG5hbWUgUFJFRklYIFNVRkZJWCBOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBmcm9tIE5BTUUsIGFuZCBzdG9yZSBpbiBmdW5jX3N0cmlwbmFtZV9yZXN1bHQuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgorICBldmFsICdmdW5jX3N0cmlwbmFtZSAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHZhcmlhYmxlIGZpcnN0LgorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kMworICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJDEifQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJDIifQorICB9JworZWxzZQorICBmdW5jX3N0cmlwbmFtZSAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAkMiBpbgorICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgLWUgInMlXiQxJSUiIC1lICJzJVxcXFwkMlwkJSUiYDs7CisgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAtZSAicyVeJDElJSIgLWUgInMlJDJcJCUlImA7OworICAgIGVzYWMKKyAgfQorZmkKKworCisjIGZ1bmNfc2hvd19ldmFsIENNRCBbRkFJTF9FWFBdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVubGVzcyBvcHRfcXVpZXQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcwogIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKICMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCiBmdW5jX3Nob3dfZXZhbCAoKQogewotICAgIG15X2NtZD0iJDEiCi0gICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKyAgICAkZGVidWdfY21kCiAKLSAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKLSAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKLSAgICB9CisgICAgX0dfY21kPSQxCisgICAgX0dfZmFpbF9leHA9JHsyLSc6J30KIAotICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKLSAgICAgIGV2YWwgIiRteV9jbWQiCi0gICAgICBteV9zdGF0dXM9JD8KLSAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKLQlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJF9HX2NtZCIKKyAgICBldmFsICJmdW5jX25vdHF1aWV0ICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGV2YWwgIiRfR19jbWQiCisgICAgICBfR19zdGF0dXM9JD8KKyAgICAgIGlmIHRlc3QgMCAtbmUgIiRfR19zdGF0dXMiOyB0aGVuCisJZXZhbCAiKGV4aXQgJF9HX3N0YXR1cyk7ICRfR19mYWlsX2V4cCIKICAgICAgIGZpCi0gICAgZmkKKyAgICB9CiB9CiAKIAotIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgY21kIFtmYWlsX2V4cF0KLSMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgQ01EIFtGQUlMX0VYUF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVubGVzcyBvcHRfcXVpZXQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcwogIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKICMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuICBVc2UgdGhlIHNhdmVkIGxvY2FsZSBmb3IgZXZhbHVhdGlvbi4KIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQogewotICAgIG15X2NtZD0iJDEiCi0gICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKyAgICAkZGVidWdfY21kCiAKLSAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICBfR19jbWQ9JDEKKyAgICBfR19mYWlsX2V4cD0kezItJzonfQorCisgICAgJG9wdF9xdWlldCB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRfR19jbWQiCiAgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCiAgICAgfQogCi0gICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQotICAgICAgZXZhbCAiJGx0X3VzZXJfbG9jYWxlCi0JICAgICRteV9jbWQiCi0gICAgICBteV9zdGF0dXM9JD8KLSAgICAgIGV2YWwgIiRsdF9zYWZlX2xvY2FsZSIKLSAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKLQlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBldmFsICIkX0dfdXNlcl9sb2NhbGUKKwkgICAgJF9HX2NtZCIKKyAgICAgIF9HX3N0YXR1cz0kPworICAgICAgZXZhbCAiJF9HX3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7IHRoZW4KKwlldmFsICIoZXhpdCAkX0dfc3RhdHVzKTsgJF9HX2ZhaWxfZXhwIgogICAgICAgZmkKLSAgICBmaQorICAgIH0KIH0KIAorCiAjIGZ1bmNfdHJfc2gKKyMgLS0tLS0tLS0tLQogIyBUdXJuICQxIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFibGUgbmFtZS4KICMgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY190cl9zaF9yZXN1bHQuICBBbGwgY2hhcmFjdGVycwogIyBub3QgaW4gdGhlIHNldCBhLXpBLVowLTlfIGFyZSByZXBsYWNlZCB3aXRoICdfJy4gRnVydGhlciwKICMgaWYgJDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycgaXMgcHJlcGVuZGVkIGFzIHdlbGwuCiBmdW5jX3RyX3NoICgpCiB7Ci0gIGNhc2UgJDEgaW4KLSAgWzAtOV0qIHwgKlshYS16QS1aMC05X10qKQotICAgIGZ1bmNfdHJfc2hfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAncy9eXChbMC05XVwpL19cMS87IHMvW15hLXpBLVowLTlfXS9fL2cnYAotICAgIDs7Ci0gICogKQotICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCi0gICAgOzsKLSAgZXNhYworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgJDEgaW4KKyAgICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisgICAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgLWUgJ3MvXlwoWzAtOV1cKS9fXDEvJyAtZSAncy9bXmEtekEtWjAtOV9dL18vZydgCisgICAgICA7OworICAgICogKQorICAgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKKyAgICAgIDs7CisgICAgZXNhYwogfQogCiAKLSMgZnVuY192ZXJzaW9uCi0jIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KLWZ1bmNfdmVyc2lvbiAoKQorIyBmdW5jX3ZlcmJvc2UgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KK2Z1bmNfdmVyYm9zZSAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCiAKLSAgICAkU0VEIC1uICcvKEMpLyFiIGdvCi0JOm1vcmUKLQkvXC4vIXsKLQkgIE4KLQkgIHMvXG4jIC8gLwotCSAgYiBtb3JlCi0JfQotCTpnbwotCS9eIyAnJFBST0dSQU0nIChHTlUgLywvIyB3YXJyYW50eTsgLyB7Ci0gICAgICAgIHMvXiMgLy8KLQlzL14jICokLy8KLSAgICAgICAgcy9cKChDKVwpWyAwLTksLV0qXCggWzEtOV1bMC05XSpcKS9cMVwyLwotICAgICAgICBwCi0gICAgIH0nIDwgIiRwcm9ncGF0aCIKLSAgICAgZXhpdCAkPworICAgICRvcHRfdmVyYm9zZSAmJiBmdW5jX2VjaG8gIiQqIgorCisgICAgOgogfQogCi0jIGZ1bmNfdXNhZ2UKLSMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgotZnVuY191c2FnZSAoKQorCisjIGZ1bmNfd2Fybl9hbmRfY29udGludWUgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2Fybl9hbmRfY29udGludWUgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAogCi0gICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLiotLWhlbHAvIHsKLSAgICAgICAgcy9eIyAvLwotCXMvXiMgKiQvLwotCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KLQlwCi0gICAgfScgPCAiJHByb2dwYXRoIgotICAgIGVjaG8KLSAgICAkRUNITyAicnVuIFxgJHByb2duYW1lIC0taGVscCB8IG1vcmUnIGZvciBmdWxsIHVzYWdlIgotICAgIGV4aXQgJD8KKyAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycworCisgICAgZnVuY19lY2hvX2luZml4XzEgIiR7dGNfcmVkfXdhcm5pbmckdGNfcmVzZXQiICIkKiIgPiYyCiB9CiAKLSMgZnVuY19oZWxwIFtOT0VYSVRdCi0jIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LAotIyB1bmxlc3MgJ25vZXhpdCcgaXMgcGFzc2VkIGFzIGFyZ3VtZW50LgorCisjIGZ1bmNfd2FybmluZyBDQVRFR09SWSBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuIFdhcm5pbmcKKyMgbWVzc2FnZXMgY2FuIGJlIGZpbHRlcmVkIGFjY29yZGluZyB0byBDQVRFR09SWSwgd2hlcmUgdGhpcyBmdW5jdGlvbgorIyBlbGlkZXMgbWVzc2FnZXMgd2hlcmUgQ0FURUdPUlkgaXMgbm90IGxpc3RlZCBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlCisjICdvcHRfd2FybmluZ190eXBlcycuCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIENBVEVHT1JZIG11c3QgYmUgaW4gdGhlIHdhcm5pbmdfY2F0ZWdvcmllcyBsaXN0IQorICAgIGNhc2UgIiAkd2FybmluZ19jYXRlZ29yaWVzICIgaW4KKyAgICAgICoiICQxICIqKSA7OworICAgICAgKikgZnVuY19pbnRlcm5hbF9lcnJvciAiaW52YWxpZCB3YXJuaW5nIGNhdGVnb3J5ICckMSciIDs7CisgICAgZXNhYworCisgICAgX0dfY2F0ZWdvcnk9JDEKKyAgICBzaGlmdAorCisgICAgY2FzZSAiICRvcHRfd2FybmluZ190eXBlcyAiIGluCisgICAgICAqIiAkX0dfY2F0ZWdvcnkgIiopICR3YXJuaW5nX2Z1bmMgJHsxKyIkQCJ9IDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19zb3J0X3ZlciBWRVIxIFZFUjIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJ3NvcnQgLVYnIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLgorIyBOb3RlIHRoaXMgZGV2aWF0ZXMgZnJvbSB0aGUgdmVyc2lvbiBjb21wYXJpc29uIGluIGF1dG9tYWtlCisjIGluIHRoYXQgaXQgdHJlYXRzIDEuNSA8IDEuNS4wLCBhbmQgdHJlYXRzIDEuNC40YSA8IDEuNC1wM2EKKyMgYnV0IHRoaXMgc2hvdWxkIHN1ZmZpY2UgYXMgd2Ugd29uJ3QgYmUgc3BlY2lmeWluZyBvbGQKKyMgdmVyc2lvbiBmb3JtYXRzIG9yIHJlZHVuZGFudCB0cmFpbGluZyAuMCBpbiBib290c3RyYXAuY29uZi4KKyMgSWYgd2UgZGlkIHdhbnQgZnVsbCBjb21wYXRpYmlsaXR5IHRoZW4gd2Ugc2hvdWxkIHByb2JhYmx5CisjIHVzZSBtNF92ZXJzaW9uX2NvbXBhcmUgZnJvbSBhdXRvY29uZi4KK2Z1bmNfc29ydF92ZXIgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICB2ZXIxPSQxCisgICAgdmVyMj0kMgorCisgICAgIyBTcGxpdCBvbiAnLicgYW5kIGNvbXBhcmUgZWFjaCBjb21wb25lbnQuCisgICAgaT0xCisgICAgd2hpbGUgOjsgZG8KKyAgICAgIHAxPWBlY2hvICIkdmVyMSIgfGN1dCAtZC4gLWYkaWAKKyAgICAgIHAyPWBlY2hvICIkdmVyMiIgfGN1dCAtZC4gLWYkaWAKKyAgICAgIGlmIHRlc3QgISAiJHAxIjsgdGhlbgorICAgICAgICBlY2hvICIkMSAkMiIKKyAgICAgICAgYnJlYWsKKyAgICAgIGVsaWYgdGVzdCAhICIkcDIiOyB0aGVuCisgICAgICAgIGVjaG8gIiQyICQxIgorICAgICAgICBicmVhaworICAgICAgZWxpZiB0ZXN0ICEgIiRwMSIgPSAiJHAyIjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkcDEiIC1ndCAiJHAyIiAyPi9kZXYvbnVsbDsgdGhlbiAjIG51bWVyaWMgY29tcGFyaXNvbgorICAgICAgICAgIGVjaG8gIiQyICQxIgorICAgICAgICBlbGlmIHRlc3QgIiRwMiIgLWd0ICIkcDEiIDI+L2Rldi9udWxsOyB0aGVuICMgbnVtZXJpYyBjb21wYXJpc29uCisgICAgICAgICAgZWNobyAiJDEgJDIiCisgICAgICAgIGVsc2UgIyBudW1lcmljLCB0aGVuIGxleGljb2dyYXBoaWMgY29tcGFyaXNvbgorICAgICAgICAgIGxwPWBwcmludGYgIiRwMVxuJHAyXG4iIHxzb3J0IC1uIHx0YWlsIC1uMWAKKyAgICAgICAgICBpZiB0ZXN0ICIkbHAiID0gIiRwMiI7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiQxICQyIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIiQyICQxIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgZG9uZQorfQorCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXBhdHRlcm46ICIxMC9zY3JpcHR2ZXJzaW9uPSU6eS0lMDJtLSUwMmQuJTAySDsgIyBVVEMiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyBFbmQ6CisjISAvYmluL3NoCisKKyMgU2V0IGEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgc2NyaXB0Lgorc2NyaXB0dmVyc2lvbj0yMDEyLTEwLTIxLjExOyAjIFVUQworCisjIEEgcG9ydGFibGUsIHBsdWdnYWJsZSBvcHRpb24gcGFyc2VyIGZvciBCb3VybmUgc2hlbGwuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDEwCisKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGdhcnlAZ251Lm9yZy4KKworCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgVGhpcyBmaWxlIGlzIGEgbGlicmFyeSBmb3IgcGFyc2luZyBvcHRpb25zIGluIHlvdXIgc2hlbGwgc2NyaXB0cyBhbG9uZworIyB3aXRoIGFzc29ydGVkIG90aGVyIHVzZWZ1bCBzdXBwb3J0aW5nIGZlYXR1cmVzIHRoYXQgeW91IGNhbiBtYWtlIHVzZQorIyBvZiB0b28uCisjCisjIEZvciB0aGUgc2ltcGxlc3Qgc2NyaXB0cyB5b3UgbWlnaHQgbmVlZCBvbmx5OgorIworIyAgICMhL2Jpbi9zaAorIyAgIC4gcmVsYXRpdmUvcGF0aC90by9mdW5jbGliLnNoCisjICAgLiByZWxhdGl2ZS9wYXRoL3RvL29wdGlvbnMtcGFyc2VyCisjICAgc2NyaXB0dmVyc2lvbj0xLjAKKyMgICBmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CisjICAgZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKKyMgICAuLi5yZXN0IG9mIHlvdXIgc2NyaXB0Li4uCisjCisjIEluIG9yZGVyIGZvciB0aGUgJy0tdmVyc2lvbicgb3B0aW9uIHRvIHdvcmssIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhCisjIHN1aXRhYmx5IGZvcm1hdHRlZCBjb21tZW50IGxpa2UgdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZQorIyBzdGFydGluZyB3aXRoICcjIFdyaXR0ZW4gYnkgJyBhbmQgZW5kaW5nIHdpdGggJyMgd2FycmFudHk7ICcuCisjCisjIEZvciAnLWgnIGFuZCAnLS1oZWxwJyB0byB3b3JrLCB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBvbmUgbGluZQorIyBkZXNjcmlwdGlvbiBvZiB5b3VyIHNjcmlwdCdzIHB1cnBvc2UgaW4gYSBjb21tZW50IGRpcmVjdGx5IGFib3ZlIHRoZQorIyAnIyBXcml0dGVuIGJ5ICcgbGluZSwgbGlrZSB0aGUgb25lIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgorIworIyBUaGUgZGVmYXVsdCBvcHRpb25zIGFsc28gc3VwcG9ydCAnLS1kZWJ1ZycsIHdoaWNoIHdpbGwgdHVybiBvbiBzaGVsbAorIyBleGVjdXRpb24gdHJhY2luZyAoc2VlIHRoZSBjb21tZW50IGFib3ZlIGRlYnVnX2NtZCBiZWxvdyBmb3IgYW5vdGhlcgorIyB1c2UpLCBhbmQgJy0tdmVyYm9zZScgYW5kIHRoZSBmdW5jX3ZlcmJvc2UgZnVuY3Rpb24gdG8gYWxsb3cgeW91ciBzY3JpcHQKKyMgdG8gZGlzcGxheSB2ZXJib3NlIG1lc3NhZ2VzIG9ubHkgd2hlbiB5b3VyIHVzZXIgaGFzIHNwZWNpZmllZAorIyAnLS12ZXJib3NlJy4KKyMKKyMgQWZ0ZXIgc291cmNpbmcgdGhpcyBmaWxlLCB5b3UgY2FuIHBsdWcgcHJvY2Vzc2luZyBmb3IgYWRkaXRpb25hbAorIyBvcHRpb25zIGJ5IGFtZW5kaW5nIHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgJ0NvbmZpZ3VyYXRpb24nIHNlY3Rpb24KKyMgYmVsb3csIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgJ09wdGlvbiBwYXJzaW5nJworIyBzZWN0aW9uIGZ1cnRoZXIgZG93bi4KKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENvbmZpZ3VyYXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCisjIFlvdSBzaG91bGQgb3ZlcnJpZGUgdGhlc2UgdmFyaWFibGVzIGluIHlvdXIgc2NyaXB0IGFmdGVyIHNvdXJjaW5nIHRoaXMKKyMgZmlsZSBzbyB0aGF0IHRoZXkgcmVmbGVjdCB0aGUgY3VzdG9taXNhdGlvbnMgeW91IGhhdmUgYWRkZWQgdG8gdGhlCisjIG9wdGlvbiBwYXJzZXIuCisKKyMgVGhlIHVzYWdlIGxpbmUgZm9yIG9wdGlvbiBwYXJzaW5nIGVycm9ycyBhbmQgdGhlIHN0YXJ0IG9mICctaCcgYW5kCisjICctLWhlbHAnIG91dHB1dCBtZXNzYWdlcy4gWW91IGNhbiBlbWJlZCBzaGVsbCB2YXJpYWJsZXMgZm9yIGRlbGF5ZWQKKyMgZXhwYW5zaW9uIGF0IHRoZSB0aW1lIHRoZSBtZXNzYWdlIGlzIGRpc3BsYXllZCwgYnV0IHlvdSB3aWxsIG5lZWQgdG8KKyMgcXVvdGUgb3RoZXIgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIGNhcmVmdWxseSB0byBwcmV2ZW50IHRoZW0gYmVpbmcKKyMgZXhwYW5kZWQgd2hlbiB0aGUgY29udGVudHMgYXJlIGV2YWxlZC4KK3VzYWdlPSckcHJvZ3BhdGggW09QVElPTl0uLi4nCisKKyMgU2hvcnQgaGVscCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvICctaCcgYW5kICctLWhlbHAnLiAgQWRkIHRvIHRoaXMgb3IKKyMgb3ZlcnJpZGUgaXQgYWZ0ZXIgc291cmNpbmcgdGhpcyBsaWJyYXJ5IHRvIHJlZmxlY3QgdGhlIGZ1bGwgc2V0IG9mCisjIG9wdGlvbnMgeW91ciBzY3JpcHQgYWNjZXB0cy4KK3VzYWdlX21lc3NhZ2U9IlwKKyAgICAgICAtLWRlYnVnICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWQorICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbYWxsXQorICAgLXYsIC0tdmVyYm9zZSAgICAgIHZlcmJvc2VseSByZXBvcnQgcHJvY2Vzc2luZworICAgICAgIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCBzaG9ydCBvciBsb25nIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorIgorCisjIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCitsb25nX2hlbHBfbWVzc2FnZT0iCitXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZToKKyAgICAgICAnYWxsJyAgICAgICAgICBzaG93IGFsbCB3YXJuaW5ncworICAgICAgICdub25lJyAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3MKKyAgICAgICAnZXJyb3InICAgICAgICB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBmYXRhbCBlcnJvcnMiCisKKyMgSGVscCBtZXNzYWdlIHByaW50ZWQgYmVmb3JlIGZhdGFsIG9wdGlvbiBwYXJzaW5nIGVycm9ycy4KK2ZhdGFsX2hlbHA9IlRyeSAnXCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhvb2sgZnVuY3Rpb24gbWFuYWdlbWVudC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgZnVuY3Rpb25zIGZvciBhZGRpbmcsIHJlbW92aW5nLCBhbmQgcnVubmluZyBob29rcworIyB0byB0aGUgbWFpbiBjb2RlLiAgQSBob29rIGlzIGp1c3QgYSBuYW1lZCBsaXN0IG9mIG9mIGZ1bmN0aW9uLCB0aGF0IGNhbgorIyBiZSBydW4gaW4gb3JkZXIgbGF0ZXIgb24uCisKKyMgZnVuY19ob29rYWJsZSBGVU5DX05BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSB0aGF0IEZVTkNfTkFNRSB3aWxsIHJ1biBob29rcyBhZGRlZCB3aXRoCisjICdmdW5jX2FkZF9ob29rIEZVTkNfTkFNRSAuLi4nLgorZnVuY19ob29rYWJsZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfYXBwZW5kIGhvb2thYmxlX2ZucyAiICQxIgorfQorCisKKyMgZnVuY19hZGRfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXF1ZXN0IHRoYXQgRlVOQ19OQU1FIGNhbGwgSE9PS19GVU5DIGJlZm9yZSBpdCByZXR1cm5zLiAgRlVOQ19OQU1FIG11c3QKKyMgZmlyc3QgaGF2ZSBiZWVuIGRlY2xhcmVkICJob29rYWJsZSIgYnkgYSBjYWxsIHRvICdmdW5jX2hvb2thYmxlJy4KK2Z1bmNfYWRkX2hvb2sgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICIgJGhvb2thYmxlX2ZucyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfZmF0YWxfZXJyb3IgIickMScgZG9lcyBub3QgYWNjZXB0IGhvb2sgZnVuY3Rpb25zLiIgOzsKKyAgICBlc2FjCisKKyAgICBldmFsIGZ1bmNfYXBwZW5kICR7MX1faG9va3MgJyIgJDIiJworfQorCisKKyMgZnVuY19yZW1vdmVfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZW1vdmUgSE9PS19GVU5DIGZyb20gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGNhbGxlZCBieSBGVU5DX05BTUUuCitmdW5jX3JlbW92ZV9ob29rICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAkezF9X2hvb2tzPSdgJGJzX2VjaG8gIlwkJyQxJ19ob29rcyIgfCRTRUQgInN8ICckMid8fCJgJworfQorCisKKyMgZnVuY19ydW5faG9va3MgRlVOQ19OQU1FIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gYWxsIGhvb2sgZnVuY3Rpb25zIHJlZ2lzdGVyZWQgdG8gRlVOQ19OQU1FLgorIyBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxpc3Qgb2YgaG9vayBmdW5jdGlvbnMgY29udGFpbnMgbm90aGluZyBtb3JlCisjIHRoYW4gYSB3aGl0ZXNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIGxlZ2FsIHNoZWxsIGZ1bmN0aW9uIG5hbWVzLCBhbmQKKyMgbm8gZWZmb3J0IGlzIHdhc3RlZCB0cnlpbmcgdG8gY2F0Y2ggc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIG9yIHByZXNlcnZlCisjIHdoaXRlc3BhY2UuCitmdW5jX3J1bl9ob29rcyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgIiAkaG9va2FibGVfZm5zICIgaW4KKyAgICAgICoiICQxICIqKSA7OworICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBzdXBwb3J0IGhvb2sgZnVuY2lvbnMubiIgOzsKKyAgICBlc2FjCisKKyAgICBldmFsIF9HX2hvb2tfZm5zPVwkJDFfaG9va3M7IHNoaWZ0CisKKyAgICBmb3IgX0dfaG9vayBpbiAkX0dfaG9va19mbnM7IGRvCisgICAgICBldmFsICRfR19ob29rICciJEAiJworCisgICAgICAjIHN0b3JlIHJldHVybmVkIG9wdGlvbnMgbGlzdCBiYWNrIGludG8gcG9zaXRpb25hbAorICAgICAgIyBwYXJhbWV0ZXJzIGZvciBuZXh0ICdjbWQnIGV4ZWN1dGlvbi4KKyAgICAgIGV2YWwgX0dfaG9va19yZXN1bHQ9XCQke19HX2hvb2t9X3Jlc3VsdAorICAgICAgZXZhbCBzZXQgZHVtbXkgIiRfR19ob29rX3Jlc3VsdCI7IHNoaWZ0CisgICAgZG9uZQorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBmdW5jX3J1bl9ob29rc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE9wdGlvbiBwYXJzaW5nLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgSW4gb3JkZXIgdG8gYWRkIHlvdXIgb3duIG9wdGlvbiBwYXJzaW5nIGhvb2tzLCB5b3UgbXVzdCBhY2NlcHQgdGhlCisjIGZ1bGwgcG9zaXRpb25hbCBwYXJhbWV0ZXIgbGlzdCBpbiB5b3VyIGhvb2sgZnVuY3Rpb24sIHJlbW92ZSBhbnkKKyMgb3B0aW9ucyB0aGF0IHlvdSBhY3Rpb24sIGFuZCB0aGVuIHBhc3MgYmFjayB0aGUgcmVtYWluaW5nIHVucHJvY2Vzc2VkCisjIG9wdGlvbnMgaW4gJzxob29rZWRfZnVuY3Rpb25fbmFtZT5fcmVzdWx0JywgZXNjYXBlZCBzdWl0YWJseSBmb3IKKyMgJ2V2YWwnLiAgTGlrZSB0aGlzOgorIworIyAgICBteV9vcHRpb25zX3ByZXAgKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgIyBFeHRlbmQgdGhlIGV4aXN0aW5nIHVzYWdlIG1lc3NhZ2UuCisjICAgICAgICB1c2FnZV9tZXNzYWdlPSR1c2FnZV9tZXNzYWdlJworIyAgICAgIC1zLCAtLXNpbGVudCAgICAgICBkb24nXCcndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICcKKyMKKyMgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisjICAgICAgICBteV9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbXlfb3B0aW9uc19wcmVwCisjCisjCisjICAgIG15X3NpbGVudF9vcHRpb24gKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgIyBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksIHdlIHBhcnNlIGFzIG1hbnkgb3B0aW9ucyBhcyB3ZSBjYW4KKyMgICAgICAgICMgcmVjb2duaXNlIGluIGEgbG9vcCBiZWZvcmUgcGFzc2luZyB0aGUgcmVtYWluZGVyIGJhY2sgdG8gdGhlCisjICAgICAgICAjIGNhbGxlciBvbiB0aGUgZmlyc3QgdW5yZWNvZ25pc2VkIGFyZ3VtZW50IHdlIGVuY291bnRlci4KKyMgICAgICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisjICAgICAgICAgIG9wdD0kMTsgc2hpZnQKKyMgICAgICAgICAgY2FzZSAkb3B0IGluCisjICAgICAgICAgICAgLS1zaWxlbnR8LXMpIG9wdF9zaWxlbnQ9OiA7OworIyAgICAgICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisjICAgICAgICAgICAgLXMqKSAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorIyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorIyAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorIyAgICAgICAgICAgICAgICAgICAgICAgICA7OworIyAgICAgICAgICAgICopICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAiJCoiOyBzaGlmdDsgYnJlYWsgOzsKKyMgICAgICAgICAgZXNhYworIyAgICAgICAgZG9uZQorIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X3NpbGVudF9vcHRpb25fcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIG15X3NpbGVudF9vcHRpb24KKyMKKyMKKyMgICAgbXlfb3B0aW9uX3ZhbGlkYXRpb24gKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgJG9wdF9zaWxlbnQgJiYgJG9wdF92ZXJib3NlICYmIGZ1bmNfZmF0YWxfaGVscCAiXAorIyAgICAnLS1zaWxlbnQnIGFuZCAnLS12ZXJib3NlJyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X29wdGlvbl92YWxpZGF0aW9uX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyMgICAgfQorIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBteV9vcHRpb25fdmFsaWRhdGlvbgorIworIyBZb3UnbGwgYWxzZSBuZWVkIHRvIG1hbnVhbGx5IGFtZW5kICR1c2FnZV9tZXNzYWdlIHRvIHJlZmxlY3QgdGhlIGV4dHJhCisjIG9wdGlvbnMgeW91IHBhcnNlLiAgSXQncyBwcmVmZXJhYmxlIHRvIGFwcGVuZCBpZiB5b3UgY2FuLCBzbyB0aGF0CisjIG11bHRpcGxlIG9wdGlvbiBwYXJzaW5nIGhvb2tzIGNhbiBiZSBhZGRlZCBzYWZlbHkuCisKKworIyBmdW5jX29wdGlvbnMgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbCB0aGUgZnVuY3Rpb25zIGNhbGxlZCBpbnNpZGUgZnVuY19vcHRpb25zIGFyZSBob29rYWJsZS4gU2VlIHRoZQorIyBpbmRpdmlkdWFsIGltcGxlbWVudGF0aW9ucyBmb3IgZGV0YWlscy4KK2Z1bmNfaG9va2FibGUgZnVuY19vcHRpb25zCitmdW5jX29wdGlvbnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX29wdGlvbnNfcHJlcCAkezErIiRAIn0KKyAgICBldmFsIGZ1bmNfcGFyc2Vfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0KyIkZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0In0KKyAgICBldmFsIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdCsiJGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQifQorCisgICAgZXZhbCBmdW5jX3J1bl9ob29rcyBmdW5jX29wdGlvbnMgXAorICAgICAgICAke2Z1bmNfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQrIiRmdW5jX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0In0KKworICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorICAgIGZ1bmNfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKyMgZnVuY19vcHRpb25zX3ByZXAgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsIGluaXRpYWxpc2F0aW9ucyByZXF1aXJlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG9wdGlvbiBwYXJzZSBsb29wLgorIyBOb3RlIHRoYXQgd2hlbiBjYWxsaW5nIGhvb2sgZnVuY3Rpb25zLCB3ZSBwYXNzIHRocm91Z2ggdGhlIGxpc3Qgb2YKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLiAgSWYgYSBob29rIGZ1bmN0aW9uIG1vZGlmaWVzIHRoYXQgbGlzdCwgYW5kCisjIG5lZWRzIHRvIHByb3BvZ2F0ZSB0aGF0IGJhY2sgdG8gcmVzdCBvZiB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgY29tcGxldGUKKyMgbW9kaWZpZWQgbGlzdCBtdXN0IGJlIHB1dCBpbiAnZnVuY19ydW5faG9va3NfcmVzdWx0JyBiZWZvcmUKKyMgcmV0dXJuaW5nLgorZnVuY19ob29rYWJsZSBmdW5jX29wdGlvbnNfcHJlcAorZnVuY19vcHRpb25zX3ByZXAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgIG9wdF93YXJuaW5nX3R5cGVzPQorCisgICAgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zX3ByZXAgJHsxKyIkQCJ9CisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKyMgZnVuY19wYXJzZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgbWFpbiBvcHRpb24gcGFyc2luZyBsb29wLgorZnVuY19ob29rYWJsZSBmdW5jX3BhcnNlX29wdGlvbnMKK2Z1bmNfcGFyc2Vfb3B0aW9ucyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9CisKKyAgICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCisgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICAgICMgRGVmZXIgdG8gaG9vayBmdW5jdGlvbnMgZm9yIGluaXRpYWwgb3B0aW9uIHBhcnNpbmcsIHNvIHRoZXkKKyAgICAgICMgZ2V0IHByaW9yaXR5IGluIHRoZSBldmVudCBvZiByZXVzaW5nIGFuIG9wdGlvbiBuYW1lLgorICAgICAgZnVuY19ydW5faG9va3MgZnVuY19wYXJzZV9vcHRpb25zICR7MSsiJEAifQorCisgICAgICAjIEFkanVzdCBmdW5jX3BhcnNlX29wdGlvbnMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHRvIG1hdGNoCisgICAgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdCI7IHNoaWZ0CisKKyAgICAgICMgQnJlYWsgb3V0IG9mIHRoZSBsb29wIGlmIHdlIGFscmVhZHkgcGFyc2VkIGV2ZXJ5IG9wdGlvbi4KKyAgICAgIHRlc3QgJCMgLWd0IDAgfHwgYnJlYWsKKworICAgICAgX0dfb3B0PSQxCisgICAgICBzaGlmdAorICAgICAgY2FzZSAkX0dfb3B0IGluCisgICAgICAgIC0tZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgnCisgICAgICAgICAgICAgICAgICAgICAgZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorICAgICAgICAgICAgICAgICAgICAgICRkZWJ1Z19jbWQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8td2FybmluZ3N8LS1uby13YXJuaW5nfC0tbm8td2FybikKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgLS13YXJuaW5ncyBub25lICR7MSsiJEAifQorICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisJCSAgICAgIDs7CisKKyAgICAgICAgLS13YXJuaW5nc3wtLXdhcm5pbmd8LVcpCisgICAgICAgICAgICAgICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgJDEiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAqIiAkMSAiKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyBzcGFjZSBwcmV2ZW50cyBtYXRjaGluZyBsYXN0ICQxIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0X3dhcm5pbmdfdHlwZXMgIiAkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICphbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpub25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz1ub25lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz06CisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPWZ1bmNfZmF0YWxfZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgd2FybmluZyBjYXRlZ29yeTogJyQxJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tdmVyYm9zZXwtdikgb3B0X3ZlcmJvc2U9OiA7OworICAgICAgICAtLXZlcnNpb24pICAgIGZ1bmNfdmVyc2lvbiA7OworICAgICAgICAtXD98LWgpICAgICAgIGZ1bmNfdXNhZ2UgOzsKKyAgICAgICAgLS1oZWxwKSAgICAgICBmdW5jX2hlbHAgOzsKKworCSMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnMgKHBsdWdpbnMgbWF5IG5lZWQgdGhpcyk6CisJLS0qPSopICAgICAgICBmdW5jX3NwbGl0X2VxdWFscyAiJF9HX29wdCIKKwkgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfZXF1YWxzX3JocyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIHNob3J0IG9wdGlvbnM6CisgICAgICAgIC1XKikKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKyAgICAgICAgLVw/KnwtaCp8LXYqfC14KikKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tKSAgICAgICAgICAgYnJlYWsgOzsKKyAgICAgICAgLSopICAgICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXNlZCBvcHRpb246ICckX0dfb3B0JyIgOzsKKyAgICAgICAgKikgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsgc2hpZnQ7IGJyZWFrIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorCisKKyMgZnVuY192YWxpZGF0ZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorIyBhcmd1bWVudHMuCitmdW5jX2hvb2thYmxlIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucworZnVuY192YWxpZGF0ZV9vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBEaXNwbGF5IGFsbCB3YXJuaW5ncyBpZiAtVyB3YXMgbm90IGdpdmVuLgorICAgIHRlc3QgLW4gIiRvcHRfd2FybmluZ190eXBlcyIgfHwgb3B0X3dhcm5pbmdfdHlwZXM9IiAkd2FybmluZ19jYXRlZ29yaWVzIgorCisgICAgZnVuY19ydW5faG9va3MgZnVuY192YWxpZGF0ZV9vcHRpb25zICR7MSsiJEAifQorCisgICAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZCEKKyAgICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY192YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19ydW5faG9va3NfcmVzdWx0Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0jIworIyMgSGVscGVyIGZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSMjCisKKyMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlCisjIGhvb2thYmxlIG9wdGlvbiBwYXJzZXIgZnJhbWV3b3JrIGluIGFzY2lpLWJldGljYWwgb3JkZXIuCisKKworIyBmdW5jX2ZhdGFsX2hlbHAgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9oZWxwICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCBcJGJzX2VjaG8gXCIiVXNhZ2U6ICR1c2FnZSJcIgorICAgIGV2YWwgXCRic19lY2hvIFwiIiRmYXRhbF9oZWxwIlwiCisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworCisjIGZ1bmNfaGVscAorIyAtLS0tLS0tLS0KKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCiBmdW5jX2hlbHAgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAogCi0gICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKLQk6cHJpbnQKLSAgICAgICAgcy9eIyAvLwotCXMvXiMgKiQvLwotCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKLQlzKlwkaG9zdConIiRob3N0IicqCi0JcypcJFNIRUxMKiciJFNIRUxMIicqCi0JcypcJExUQ0MqJyIkTFRDQyInKgotCXMqXCRMVENGTEFHUyonIiRMVENGTEFHUyInKgotCXMqXCRMRConIiRMRCInKgotCXMvXCR3aXRoX2dudV9sZC8nIiR3aXRoX2dudV9sZCInLwotCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYCgke0FVVE9NQUtFLWF1dG9tYWtlfSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLwotCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYCgke0FVVE9DT05GLWF1dG9jb25mfSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLwotCXAKLQlkCi0gICAgIH0KLSAgICAgL14jIC4qIGhvbWUgcGFnZTovYiBwcmludAotICAgICAvXiMgR2VuZXJhbCBoZWxwIHVzaW5nL2IgcHJpbnQKLSAgICAgJyA8ICIkcHJvZ3BhdGgiCi0gICAgcmV0PSQ/Ci0gICAgaWYgdGVzdCAteiAiJDEiOyB0aGVuCi0gICAgICBleGl0ICRyZXQKLSAgICBmaQorICAgIGZ1bmNfdXNhZ2VfbWVzc2FnZQorICAgICRic19lY2hvICIkbG9uZ19oZWxwX21lc3NhZ2UiCisgICAgZXhpdCAwCiB9CiAKLSMgZnVuY19taXNzaW5nX2FyZyBhcmduYW1lCisKKyMgZnVuY19taXNzaW5nX2FyZyBBUkdOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCiAjIGV4aXRfY21kLgogZnVuY19taXNzaW5nX2FyZyAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCiAKLSAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMS4iCisgICAgZnVuY19lcnJvciAiTWlzc2luZyBhcmd1bWVudCBmb3IgJyQxJy4iCiAgICAgZXhpdF9jbWQ9ZXhpdAogfQogCiAKLSMgZnVuY19zcGxpdF9zaG9ydF9vcHQgc2hvcnRvcHQKKyMgZnVuY19zcGxpdF9lcXVhbHMgU1RSSU5HCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgZnVuY19zcGxpdF9lcXVhbHNfbGhzIGFuZCBmdW5jX3NwbGl0X2VxdWFsc19yaHMgc2hlbGwgdmFyaWFibGVzIGFmdGVyCisjIHNwbGl0dGluZyBTVFJJTkcgYXQgdGhlICc9JyBzaWduLgordGVzdCAteiAiJF9HX0hBVkVfWFNJX09QUyIgXAorICAgICYmIChldmFsICd4PWEvYi9jOworICAgICAgdGVzdCA1YWEvYmIvY2MgPSAiJHsjeH0ke3glJS8qfSR7eCUvKn0ke3gjKi99JHt4IyMqL30iJykgMj4vZGV2L251bGwgXAorICAgICYmIF9HX0hBVkVfWFNJX09QUz15ZXMKKworaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX3NwbGl0X2VxdWFscyAoKQorICB7CisgICAgICAkZGVidWdfY21kCisKKyAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX2xocz0kezElJT0qfQorICAgICAgZnVuY19zcGxpdF9lcXVhbHNfcmhzPSR7MSMqPX0KKyAgICAgIHRlc3QgIngkZnVuY19zcGxpdF9lcXVhbHNfbGhzIiA9ICJ4JDEiIFwKKyAgICAgICAgJiYgZnVuY19zcGxpdF9lcXVhbHNfcmhzPQorICB9JworZWxzZQorICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgZXhwciwgd2hpY2ggaXMgb2Z0ZW4gYSBzaGVsbCBidWlsdGluLgorICBmdW5jX3NwbGl0X2VxdWFscyAoKQorICB7CisgICAgICAkZGVidWdfY21kCisKKyAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX2xocz1gZXhwciAieCQxIiA6ICd4XChbXj1dKlwpJ2AKKyAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0KKyAgICAgIHRlc3QgIngkZnVuY19zcGxpdF9lcXVhbHNfbGhzIiA9ICJ4JDEiIFwKKyAgICAgICAgfHwgZnVuY19zcGxpdF9lcXVhbHNfcmhzPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCkkJ2AKKyAgfQorZmkgI2Z1bmNfc3BsaXRfZXF1YWxzCisKKworIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBTSE9SVE9QVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTZXQgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCiAjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0ZXIuCi1mdW5jX3NwbGl0X3Nob3J0X29wdCAoKQoraWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQorICB7CisgICAgICAkZGVidWdfY21kCisKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9CisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCisgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCisgIHsKKyAgICAgICRkZWJ1Z19jbWQKKworICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gZXhwciAieCQxIiA6ICd4LVwoLlwpJ2AKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gZXhwciAieCQxIiA6ICd4LS5cKC4qXCkkJ2AKKyAgfQorZmkgI2Z1bmNfc3BsaXRfc2hvcnRfb3B0CisKKworIyBmdW5jX3VzYWdlCisjIC0tLS0tLS0tLS0KKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQogewotICAgIG15X3NlZF9zaG9ydF9vcHQ9JzFzL15cKC4uXCkuKiQvXDEvO3EnCi0gICAgbXlfc2VkX3Nob3J0X3Jlc3Q9JzFzL14uLlwoLipcKSQvXDEvO3EnCisgICAgJGRlYnVnX2NtZAogCi0gICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfb3B0ImAKLSAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X3Jlc3QiYAotfSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorICAgIGZ1bmNfdXNhZ2VfbWVzc2FnZQorICAgICRic19lY2hvICJSdW4gJyRwcm9nbmFtZSAtLWhlbHAgfCR7UEFHRVItbW9yZX0nIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgMAorfQogCiAKLSMgZnVuY19zcGxpdF9sb25nX29wdCBsb25nb3B0Ci0jIFNldCBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIHNoZWxsCi0jIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgTE9OR09QVCBhdCB0aGUgYD0nIHNpZ24uCi1mdW5jX3NwbGl0X2xvbmdfb3B0ICgpCisjIGZ1bmNfdXNhZ2VfbWVzc2FnZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0LgorZnVuY191c2FnZV9tZXNzYWdlICgpCiB7Ci0gICAgbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtLVtePV0qXCk9LiovXDEvO3EnCi0gICAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKKyAgICAkZGVidWdfY21kCiAKLSAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKLSAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAotfSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0KLWV4aXRfY21kPToKKyAgICBldmFsIFwkYnNfZWNobyBcIiJVc2FnZTogJHVzYWdlIlwiCisgICAgZWNobworICAgICRTRUQgLW4gJ3N8XiMgfHwKKyAgICAgICAgL15Xcml0dGVuIGJ5L3sKKyAgICAgICAgICB4O3A7eAorICAgICAgICB9CisJaAorCS9eV3JpdHRlbiBieS9xJyA8ICIkcHJvZ3BhdGgiCisgICAgZWNobworICAgIGV2YWwgXCRic19lY2hvIFwiIiR1c2FnZV9tZXNzYWdlIlwiCit9CiAKIAotCi0KLQotbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgotbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCi0KLSMgR2xvYmFsIHZhcmlhYmxlcy4KLW5vbm9wdD0KLXByZXNlcnZlX2FyZ3M9Ci1sbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCi1vMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCi1leHRyYWN0ZWRfYXJjaGl2ZXM9Ci1leHRyYWN0ZWRfc2VyaWFsPTAKLQotIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0Ci0jIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKLSMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KLWV4ZWNfY21kPQotCi0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQotIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCi1mdW5jX2FwcGVuZCAoKQorIyBmdW5jX3ZlcnNpb24KKyMgLS0tLS0tLS0tLS0tCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQogewotICAgIGV2YWwgIiR7MX09XCQkezF9XCR7Mn0iCi19ICMgZnVuY19hcHBlbmQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgICAgJGRlYnVnX2NtZAogCi0jIGZ1bmNfYXBwZW5kX3F1b3RlZCB2YXIgdmFsdWUKLSMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCi0jIGJ5IGEgc3BhY2UuCi1mdW5jX2FwcGVuZF9xdW90ZWQgKCkKKyAgICBwcmludGYgJyVzXG4nICIkcHJvZ25hbWUgJHNjcmlwdHZlcnNpb24iCisgICAgJFNFRCAtbiAnL14jIy9xCisgICAgICAgIC8oQykvIWIgZ28KKyAgICAgICAgOm1vcmUKKyAgICAgICAgL1wuLyF7CisgICAgICAgICAgTgorICAgICAgICAgIHN8XG4jIHwgfAorICAgICAgICAgIGIgbW9yZQorICAgICAgICB9CisgICAgICAgIDpnbworICAgICAgICAvXiMgV3JpdHRlbiBieSAvLC8jIHdhcnJhbnR5OyAvIHsKKyAgICAgICAgICBzfF4jIHx8CisgICAgICAgICAgc3xeIyAqJHx8CisgICAgICAgICAgc3xcKChDKVwpWyAwLTksLV0qWyAsLV1cKFsxLTldWzAtOV0qIFwpfFwxIFwyfAorICAgICAgICAgIHAKKyAgICAgICAgfQorICAgICAgICAvXiMgV3JpdHRlbiBieSAvIHsKKyAgICAgICAgICBzfF4jIHx8CisgICAgICAgICAgcAorICAgICAgICB9CisgICAgICAgIC9ed2FycmFudHk7IC9xJyA8ICIkcHJvZ3BhdGgiCisKKyAgICBleGl0ICQ/Cit9CisKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtcGF0dGVybjogIjEwL3NjcmlwdHZlcnNpb249JTp5LSUwMm0tJTAyZC4lMDJIOyAjIFVUQyIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIEVuZDoKKworIyBTZXQgYSB2ZXJzaW9uIHN0cmluZy4KK3NjcmlwdHZlcnNpb249JyhHTlUgbGlidG9vbCkgMi40LjIuNDE4JworCisKKyMgZnVuY19lY2hvIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tCisjIExpYnRvb2wgYWxzbyBkaXNwbGF5cyB0aGUgY3VycmVudCBtb2RlIGluIG1lc3NhZ2VzLCBzbyBvdmVycmlkZQorIyBmdW5jbGliLnNoIGZ1bmNfZWNobyB3aXRoIHRoaXMgY3VzdG9tIGRlZmluaXRpb24uCitmdW5jX2VjaG8gKCkKIHsKLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgotICAgIGV2YWwgIiR7MX09XCQkezF9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLX0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfbWVzc2FnZT0kKgorCisgICAgZnVuY19lY2hvX0lGUz0kSUZTCisgICAgSUZTPSRubAorICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBkbworICAgICAgSUZTPSRmdW5jX2VjaG9fSUZTCisgICAgICAkYnNfZWNobyAiJHByb2duYW1lJHtvcHRfbW9kZSs6ICRvcHRfbW9kZX06ICRfR19saW5lIgorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19JRlMKK30KIAogCi0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCi1mdW5jX2FyaXRoICgpCisjIGZ1bmNfd2FybmluZyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJ0b29sIHdhcm5pbmdzIGFyZSBub3QgY2F0ZWdvcml6ZWQsIHNvIG92ZXJyaWRlIGZ1bmNsaWIuc2gKKyMgZnVuY193YXJuaW5nIHdpdGggdGhpcyBzaW1wbGVyIGRlZmluaXRpb24uCitmdW5jX3dhcm5pbmcgKCkKIHsKLSAgICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJHtAfSJgCi19ICMgZnVuY19hcml0aCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyAgICAkZGVidWdfY21kCisKKyAgICAkd2FybmluZ19mdW5jICR7MSsiJEAifQorfQogCiAKLSMgZnVuY19sZW4gc3RyaW5nCi0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi1mdW5jX2xlbiAoKQotewotICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJHsxfSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAotfSAjIGZ1bmNfbGVuIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgT3B0aW9ucyBwYXJzaW5nLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEhvb2sgaW4gdGhlIGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgb3VyIG93biBvcHRpb25zIGFyZSBwYXJzZWQgZHVyaW5nCisjIHRoZSBvcHRpb24gcGFyc2luZyBsb29wLgorCit1c2FnZT0nJHByb2dwYXRoIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4nCisKKyMgU2hvcnQgaGVscCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvICctaCcuCit1c2FnZV9tZXNzYWdlPSJPcHRpb25zOgorICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgICAgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCisgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKyAgICAgICAtLW5vLXdhcm5pbmdzICAgICAgICBlcXVpdmFsZW50IHRvICctV25vbmUnCisgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworICAgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyAgICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCisgICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgbW9yZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHRoYW4gZGVmYXVsdAorICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyAgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW2FsbF0KKyAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCisiCisKKyMgQWRkaXRpb25hbCB0ZXh0IGFwcGVuZGVkIHRvICd1c2FnZV9tZXNzYWdlJyBpbiByZXNwb25zZSB0byAnLS1oZWxwJy4KK2xvbmdfaGVscF9tZXNzYWdlPSRsb25nX2hlbHBfbWVzc2FnZSIKKworTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgY2xlYW4gICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyAgICAgICBjb21waWxlICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAorICAgICAgIGV4ZWN1dGUgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQorICAgICAgIGZpbmlzaCAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgICAgICAgaW5zdGFsbCAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCisgICAgICAgbGluayAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQorICAgICAgIHVuaW5zdGFsbCAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorCitNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCisnLS1tb2RlPU1PREUnIG1heSBiZSBhYmJyZXZpYXRlZCBhcyAnTU9ERScgb3IgYSB1bmlxdWUgYWJicmV2aWF0aW9uIG9mIHRoYXQuCitUcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KKworV2hlbiByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBkZXNjcmliZSBhIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaXQgYW5kCitpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisKKyAgICAgICBob3N0LXRyaXBsZXQ6ICAgJGhvc3QKKyAgICAgICBzaGVsbDogICAgICAgICAgJFNIRUxMCisgICAgICAgY29tcGlsZXI6ICAgICAgICRMVENDCisgICAgICAgY29tcGlsZXIgZmxhZ3M6ICRMVENGTEFHUworICAgICAgIGxpbmtlcjogICAgICAgICAkTEQgKGdudT8gJHdpdGhfZ251X2xkKQorICAgICAgIHZlcnNpb246ICAgICAgICAkcHJvZ25hbWUgKEdOVSBsaWJ0b29sKSAyLjQuMi40MTgKKyAgICAgICBhdXRvbWFrZTogICAgICAgYCgkQVVUT01BS0UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKKyAgICAgICBhdXRvY29uZjogICAgICAgYCgkQVVUT0NPTkYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LiIKIAogCi0jIGZ1bmNfbG8ybyBvYmplY3QKLWZ1bmNfbG8ybyAoKQotewotICAgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKLX0gIyBmdW5jX2xvMm8gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisjIGZ1bmNfbG8ybyBPQkpFQ1QtTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJhbnNmb3JtIE9CSkVDVC1OQU1FIGZyb20gYSAnLmxvJyBzdWZmaXggdG8gdGhlIHBsYXRmb3JtIHNwZWNpZmljCisjIG9iamVjdCBzdWZmaXguCisKK2xvMm89cy9cXC5sb1wkLy4kb2JqZXh0LworbzJsbz1zL1xcLiRvYmpleHRcJC8ubG8vCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfbG8ybyAoKQorICB7CisgICAgY2FzZSAkMSBpbgorICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4kb2JqZXh0IDs7CisgICAgICAqICAgKSBmdW5jX2xvMm9fcmVzdWx0PSQxICAgICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgIH0nCisKKyAgIyBmdW5jX3hmb3JtIExJQk9CSi1PUi1TT1VSQ0UKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIyBUcmFuc2Zvcm0gTElCT0JKLU9SLVNPVVJDRSBmcm9tIGEgJy5vJyBvciAnLmMnIChvciBvdGhlcndpc2UpCisgICMgc3VmZml4IHRvIGEgJy5sbycgbGlidG9vbC1vYmplY3Qgc3VmZml4LgorICBldmFsICdmdW5jX3hmb3JtICgpCisgIHsKKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBzZWQuCisgIGZ1bmNfbG8ybyAoKQorICB7CisgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRsbzJvImAKKyAgfQorCisgIGZ1bmNfeGZvcm0gKCkKKyAgeworICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAnc3xcLlteLl0qJHwubG98J2AKKyAgfQorZmkKIAogCi0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQotZnVuY194Zm9ybSAoKQotewotICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAotfSAjIGZ1bmNfeGZvcm0gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0KLQotIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQogIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQogewotICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9Ci0gICAgZnVuY19lcnJvciAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLSAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKKyAgICBmdW5jX19mYXRhbF9lcnJvciAkezErIiRAIn0gXAorICAgICAgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIFwKKyAgICAgICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKIH0KIAogCiAjIGZ1bmNfY29uZmlnCisjIC0tLS0tLS0tLS0tCiAjIERpc3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlwdC4KIGZ1bmNfY29uZmlnICgpCiB7CkBAIC05MTUsMTcgKzIwNDgsMTkgQEAKICAgICBleGl0ICQ/CiB9CiAKKwogIyBmdW5jX2ZlYXR1cmVzCisjIC0tLS0tLS0tLS0tLS0KICMgRGlzcGxheSB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgogZnVuY19mZWF0dXJlcyAoKQogewogICAgIGVjaG8gImhvc3Q6ICRob3N0IgotICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KICAgICAgIGVjaG8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgogICAgIGVsc2UKICAgICAgIGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKICAgICBmaQotICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCiAgICAgICBlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKICAgICBlbHNlCiAgICAgICBlY2hvICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCkBAIC05MzQsMjk4ICsyMDY5LDMyNSBAQAogICAgIGV4aXQgJD8KIH0KIAotIyBmdW5jX2VuYWJsZV90YWcgdGFnbmFtZQorCisjIGZ1bmNfZW5hYmxlX3RhZyBUQUdOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFZlcmlmeSB0aGF0IFRBR05BTUUgaXMgdmFsaWQsIGFuZCBlaXRoZXIgZmxhZyBhbiBlcnJvciBhbmQgZXhpdCwgb3IKICMgZW5hYmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28gYWRkIFRBR05BTUUgdG8gdGhlIGdsb2JhbCAkdGFnbGlzdAogIyB2YXJpYWJsZSBoZXJlLgogZnVuY19lbmFibGVfdGFnICgpCiB7Ci0gICMgR2xvYmFsIHZhcmlhYmxlOgotICB0YWduYW1lPSIkMSIKKyAgICAjIEdsb2JhbCB2YXJpYWJsZToKKyAgICB0YWduYW1lPSQxCiAKLSAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKLSAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgotICBzZWRfZXh0cmFjdGNmPSIvJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcCIKKyAgICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICAgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgICBzZWRfZXh0cmFjdGNmPS8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wCiAKLSAgIyBWYWxpZGF0ZSB0YWduYW1lLgotICBjYXNlICR0YWduYW1lIGluCi0gICAgKlshLV9BLVphLXowLTksL10qKQotICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCi0gICAgICA7OwotICBlc2FjCisgICAgIyBWYWxpZGF0ZSB0YWduYW1lLgorICAgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAgICpbIS1fQS1aYS16MC05LC9dKikKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisgICAgICAgIDs7CisgICAgZXNhYwogCi0gICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCi0gICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgotICBjYXNlICR0YWduYW1lIGluCi0gICAgQ0MpIDs7CisgICAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKKyAgICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KKyAgICBjYXNlICR0YWduYW1lIGluCisgICAgICAgIENDKSA7OwogICAgICopCi0gICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgotCXRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgorICAgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCiAKLQkjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgQmUgY2FyZWZ1bCB0byBxdW90ZSB0aGUgcGF0aAotCSMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0Ci0JIyBhbHNvIGRvbid0IHVzZSBub24tcG9ydGFibGUgcXVvdGVzIHdpdGhpbiBiYWNrcXVvdGVzIHdpdGhpbgotCSMgcXVvdGVzIHdlIGhhdmUgdG8gZG8gaXQgaW4gMiBzdGVwczoKLQlleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCi0JZXZhbCAiJGV4dHJhY3RlZGNmIgotICAgICAgZWxzZQotCWZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgotICAgICAgZmkKLSAgICAgIDs7Ci0gIGVzYWMKKwkgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJICAjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAorCSAgIyBhbHNvIGRvbid0IHVzZSBub24tcG9ydGFibGUgcXVvdGVzIHdpdGhpbiBiYWNrcXVvdGVzIHdpdGhpbgorCSAgIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCSAgZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAorCSAgZXZhbCAiJGV4dHJhY3RlZGNmIgorICAgICAgICBlbHNlCisJICBmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCiB9CiAKKwogIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCiAjIHJlbGVhc2Ugb2YgbGlidG9vbC4KIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQogewotICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KLSAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgotICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCi0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisgICAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgogJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQogJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCiAkcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiAkcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCiBfTFRfRU9GCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgogJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQogJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgogJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgogJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgogX0xUX0VPRgotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBjYXQgPiYyIDw8X0xUX0VPRgorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgogJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCiAkcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCiAkcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCiAkcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCiBfTFRfRU9GCi0gICAgZmkKKyAgICAgIGZpCiAKLSAgICBleGl0ICRFWElUX01JU01BVENICi0gIGZpCisgICAgICBleGl0ICRFWElUX01JU01BVENICisgICAgZmkKIH0KIAogCi0jIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKLWNhc2UgJDEgaW4KLWNsZWFufGNsZWF8Y2xlfGNsKQotICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci1jb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQotICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWV4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci1pbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQotICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWxpbmt8bGlufGxpfGwpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci1lc2FjCi0KLQotCi0jIE9wdGlvbiBkZWZhdWx0czoKLW9wdF9kZWJ1Zz06Ci1vcHRfZHJ5X3J1bj1mYWxzZQotb3B0X2NvbmZpZz1mYWxzZQotb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCi1vcHRfZmVhdHVyZXM9ZmFsc2UKLW9wdF9maW5pc2g9ZmFsc2UKLW9wdF9oZWxwPWZhbHNlCi1vcHRfaGVscF9hbGw9ZmFsc2UKLW9wdF9zaWxlbnQ9Ogotb3B0X3dhcm5pbmc9Ogotb3B0X3ZlcmJvc2U9Ogotb3B0X3NpbGVudD1mYWxzZQotb3B0X3ZlcmJvc2U9ZmFsc2UKLQotCi0jIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbiB0aGUKLSMgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYC0tdmVyc2lvbicgaGFwcGVuIGFzIHF1aWNrbHkgYXMgd2UgY2FuLgorIyBsaWJ0b29sX29wdGlvbnNfcHJlcCBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmVwYXJhdGlvbiBmb3Igb3B0aW9ucyBwYXJzZWQgYnkgbGlidG9vbC4KK2xpYnRvb2xfb3B0aW9uc19wcmVwICgpCiB7Ci0gICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKLSAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KLSAgICBvcHQ9IiQxIgotICAgIHNoaWZ0Ci0gICAgY2FzZSAkb3B0IGluCi0gICAgICAtLWRlYnVnfC14KQlvcHRfZGVidWc9J3NldCAteCcKLQkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKLQkJCSRvcHRfZGVidWcKLQkJCTs7Ci0gICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCi0JCQlvcHRfZHJ5X3J1bj06Ci0JCQk7OwotICAgICAgLS1jb25maWcpCi0JCQlvcHRfY29uZmlnPToKLWZ1bmNfY29uZmlnCi0JCQk7OwotICAgICAgLS1kbG9wZW58LWRsb3BlbikKLQkJCW9wdGFyZz0iJDEiCi0JCQlvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KLX0kb3B0YXJnIgotCQkJc2hpZnQKLQkJCTs7Ci0gICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQotCQkJb3B0X3ByZXNlcnZlX2R1cF9kZXBzPToKLQkJCTs7Ci0gICAgICAtLWZlYXR1cmVzKQotCQkJb3B0X2ZlYXR1cmVzPToKLWZ1bmNfZmVhdHVyZXMKLQkJCTs7Ci0gICAgICAtLWZpbmlzaCkKLQkJCW9wdF9maW5pc2g9Ogotc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAotCQkJOzsKLSAgICAgIC0taGVscCkKLQkJCW9wdF9oZWxwPToKLQkJCTs7Ci0gICAgICAtLWhlbHAtYWxsKQotCQkJb3B0X2hlbHBfYWxsPToKLW9wdF9oZWxwPSc6IGhlbHAtYWxsJwotCQkJOzsKLSAgICAgIC0tbW9kZSkKLQkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhawotCQkJb3B0YXJnPSIkMSIKLQkJCW9wdF9tb2RlPSIkb3B0YXJnIgotY2FzZSAkb3B0YXJnIGluCi0gICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6Ci0gIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisgICAgJGRlYnVnX21vZGUKIAotICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKLSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKLSAgICAgZXhpdF9jbWQ9ZXhpdAotICAgICBicmVhawotICAgICA7OwotZXNhYwotCQkJc2hpZnQKLQkJCTs7Ci0gICAgICAtLW5vLXNpbGVudHwtLW5vLXF1aWV0KQotCQkJb3B0X3NpbGVudD1mYWxzZQotZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCi0JCQk7OwotICAgICAgLS1uby13YXJuaW5nfC0tbm8td2FybikKLQkJCW9wdF93YXJuaW5nPWZhbHNlCi1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLQkJCTs7Ci0gICAgICAtLW5vLXZlcmJvc2UpCi0JCQlvcHRfdmVyYm9zZT1mYWxzZQotZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCi0JCQk7OwotICAgICAgLS1zaWxlbnR8LS1xdWlldCkKLQkJCW9wdF9zaWxlbnQ9OgotZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCi0gICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCi0JCQk7OwotICAgICAgLS12ZXJib3NlfC12KQotCQkJb3B0X3ZlcmJvc2U9OgotZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCi1vcHRfc2lsZW50PWZhbHNlCi0JCQk7OwotICAgICAgLS10YWcpCi0JCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKLQkJCW9wdGFyZz0iJDEiCi0JCQlvcHRfdGFnPSIkb3B0YXJnIgotZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQgJG9wdGFyZyIKLWZ1bmNfZW5hYmxlX3RhZyAiJG9wdGFyZyIKLQkJCXNoaWZ0Ci0JCQk7OworICAgICMgT3B0aW9uIGRlZmF1bHRzOgorICAgIG9wdF9jb25maWc9ZmFsc2UKKyAgICBvcHRfZGxvcGVuPQorICAgIG9wdF9kcnlfcnVuPWZhbHNlCisgICAgb3B0X2hlbHA9ZmFsc2UKKyAgICBvcHRfbW9kZT0KKyAgICBvcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKKyAgICBvcHRfcXVpZXQ9ZmFsc2UKIAotICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQk7OwotICAgICAgLS1oZWxwKQkJZnVuY19oZWxwCQkJCTs7Ci0gICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQk7OworICAgIG5vbm9wdD0KKyAgICBwcmVzZXJ2ZV9hcmdzPQogCi0gICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgotICAgICAgLS0qPSopCi0JCQlmdW5jX3NwbGl0X2xvbmdfb3B0ICIkb3B0IgotCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIiAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIiAkezErIiRAIn0KLQkJCXNoaWZ0Ci0JCQk7OwotCi0gICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgotICAgICAgLVw/KnwtaCp8LW4qfC12KikKLQkJCWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkb3B0IgotCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KLQkJCXNoaWZ0Ci0JCQk7OwotCi0gICAgICAtLSkJCWJyZWFrCQkJCQk7OwotICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIgOzsKLSAgICAgICopCQlzZXQgZHVtbXkgIiRvcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworICAgICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgIGNhc2UgJDEgaW4KKyAgICBjbGVhbnxjbGVhfGNsZXxjbCkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBsaW5rfGxpbnxsaXxsKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CiAgICAgZXNhYwotICBkb25lCiAKLSAgIyBWYWxpZGF0ZSBvcHRpb25zOgotCi0gICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50Ci0gIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgotICAgIG5vbm9wdD0iJG9wdCIKLSAgICBzaGlmdAotICBmaQotCi0gICMgcHJlc2VydmUgLS1kZWJ1ZwotICB0ZXN0ICIkb3B0X2RlYnVnIiA9IDogfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCi0KLSAgY2FzZSAkaG9zdCBpbgotICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCi0gICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcwotICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06Ci0gICAgICA7OwotICAgICopCi0gICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKLSAgICAgIDs7Ci0gIGVzYWMKLQotICAkb3B0X2hlbHAgfHwgewotICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKLSAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKLQotICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgotICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgotICAgIGZpCi0KLSAgICAjIERhcndpbiBzdWNrcwotICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCi0KLSAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgotICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0ICIkb3B0X21vZGUiICE9IGV4ZWN1dGU7IHRoZW4KLSAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKLSAgICAgICRFQ0hPICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKLQotICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KLSAgICBnZW5lcmljX2hlbHA9IiRoZWxwIgotICAgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgotICB9Ci0KLQotICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkCi0gICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCisgICAgIyBQYXNzIGJhY2sgdGhlIGxpc3Qgb2Ygb3B0aW9ucy4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGxpYnRvb2xfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKIH0KK2Z1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbGlidG9vbF9vcHRpb25zX3ByZXAKIAogCisjIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvdmlkZSBoYW5kbGluZyBmb3IgbGlidG9vbCBzcGVjaWZpYyBvcHRpb25zLgorbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBQZXJmb3JtIG91ciBvd24gbG9vcCB0byBjb25zdW1lIGFzIG1hbnkgb3B0aW9ucyBhcyBwb3NzaWJsZSBpbgorICAgICMgZWFjaCBpdGVyYXRpb24uCisgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICAgIF9HX29wdD0kMQorICAgICAgc2hpZnQKKyAgICAgIGNhc2UgJF9HX29wdCBpbgorICAgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZHJ5X3J1bj06CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tY29uZmlnKSAgICAgICBmdW5jX2NvbmZpZyA7OworCisgICAgICAgIC0tZGxvcGVufC1kbG9wZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KK30kMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcHJlc2VydmVfZHVwX2RlcHM9OiA7OworCisgICAgICAgIC0tZmVhdHVyZXMpICAgICBmdW5jX2ZlYXR1cmVzIDs7CisKKyAgICAgICAgLS1maW5pc2gpICAgICAgIHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQgOzsKKworICAgICAgICAtLWhlbHApICAgICAgICAgb3B0X2hlbHA9OiA7OworCisgICAgICAgIC0taGVscC1hbGwpICAgICBvcHRfaGVscD0nOiBoZWxwLWFsbCcgOzsKKworICAgICAgICAtLW1vZGUpICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfbW9kZT0kMQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkMSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbnxjb21waWxlfGV4ZWN1dGV8ZmluaXNofGluc3RhbGx8bGlua3xyZWxpbmt8dW5pbnN0YWxsKSA7OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X2NtZD1leGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXNpbGVudHwtLW5vLXF1aWV0KQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3F1aWV0PWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmc9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcXVpZXQ9OgorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXRhZykgICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdGFnPSQxCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCAkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZW5hYmxlX3RhZyAiJDEiCisgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXZlcmJvc2V8LXYpICAgb3B0X3F1aWV0PWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT06CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKwkjIEFuIG9wdGlvbiBub3QgaGFuZGxlZCBieSB0aGlzIGhvb2sgZnVuY3Rpb246CisgICAgICAgICopCQlzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworICAgICAgZXNhYworICAgIGRvbmUKKworCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBsaWJ0b29sX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorZnVuY19hZGRfaG9vayBmdW5jX3BhcnNlX29wdGlvbnMgbGlidG9vbF9wYXJzZV9vcHRpb25zCisKKworCisjIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiBvcHRpb24gc2V0dGluZ3MgYW5kL29yIHVuY29uc3VtZWQKKyMgYXJndW1lbnRzLgorbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCit7CisgICAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKyAgICBpZiB0ZXN0IDAgLWx0ICQjOyB0aGVuCisgICAgICBub25vcHQ9JDEKKyAgICAgIHNoaWZ0CisgICAgZmkKKworICAgICMgcHJlc2VydmUgLS1kZWJ1ZworICAgIHRlc3QgOiA9ICIkZGVidWdfY21kIiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKKworICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCisgICAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCisgICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgJG9wdF9oZWxwIHx8IHsKKyAgICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKyAgICAgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorCisgICAgICB0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgXAorICAgICAgICAmJiB0ZXN0IHllcyAhPSAiJGJ1aWxkX29sZF9saWJzIiBcCisgICAgICAgICYmIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKworICAgICAgIyBEYXJ3aW4gc3Vja3MKKyAgICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKyAgICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisgICAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCBleGVjdXRlICE9ICIkb3B0X21vZGUiOyB0aGVuCisgICAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gJy1kbG9wZW4nIgorICAgICAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgICAgICBnZW5lcmljX2hlbHA9JGhlbHAKKyAgICAgIGhlbHA9IlRyeSAnJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgfQorCisgICAgIyBQYXNzIGJhY2sgdGhlIHVucGFyc2VkIGFyZ3VtZW50IGxpc3QKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CitmdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMKKworCisjIFByb2Nlc3Mgb3B0aW9ucyBhcyBlYXJseSBhcyBwb3NzaWJsZSBzbyB0aGF0IC0taGVscCBhbmQgLS12ZXJzaW9uCisjIGNhbiByZXR1cm4gcXVpY2tseS4KK2Z1bmNfb3B0aW9ucyAkezErIiRAIn0KK2V2YWwgc2V0IGR1bW15ICIkZnVuY19vcHRpb25zX3Jlc3VsdCI7IHNoaWZ0CisKIAogCiAjIyAtLS0tLS0tLS0tLSAjIwogIyMgICAgTWFpbi4gICAgIyMKICMjIC0tLS0tLS0tLS0tICMjCiAKK21hZ2ljPSclJSVNQUdJQyB2YXJpYWJsZSUlJScKK21hZ2ljX2V4ZT0nJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlJworCisjIEdsb2JhbCB2YXJpYWJsZXMuCitleHRyYWN0ZWRfYXJjaGl2ZXM9CitleHRyYWN0ZWRfc2VyaWFsPTAKKworIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJDEKK19MVEVDSE9fRU9GJworfQorCiAjIGZ1bmNfbGFsaWJfcCBmaWxlCi0jIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sICcubGEnIGxpYnJhcnkgb3IgJy5sbycgb2JqZWN0IGZpbGUuCiAjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CiAjIGRldGVybWluZWQgaW1wb3N0ZXJzLgogZnVuY19sYWxpYl9wICgpCkBAIC0xMjM2LDEyICsyMzk4LDEyIEBACiB9CiAKICMgZnVuY19sYWxpYl91bnNhZmVfcCBmaWxlCi0jIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sICcubGEnIGxpYnJhcnkgb3IgJy5sbycgb2JqZWN0IGZpbGUuCiAjIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAogIyByZXNvcnRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuICBUbyB0aGlzIGVuZCwgaXQgcmVkaXJlY3RzIHN0ZGluIGFuZAogIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KICMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKLSMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgYGZpbGUnIGRvZXMgbm90IGV4aXN0LgorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiAnZmlsZScgZG9lcyBub3QgZXhpc3QuCiBmdW5jX2xhbGliX3Vuc2FmZV9wICgpCiB7CiAgICAgbGFsaWJfcD1ubwpAQCAtMTI0OSwxMyArMjQxMSwxMyBAQAogCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAogCWRvCiAJICAgIHJlYWQgbGFsaWJfcF9saW5lCi0JICAgIGNhc2UgIiRsYWxpYl9wX2xpbmUiIGluCisJICAgIGNhc2UgJGxhbGliX3BfbGluZSBpbgogCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7CiAJICAgIGVzYWMKIAlkb25lCiAJZXhlYyAwPCY1IDU8Ji0KICAgICBmaQotICAgIHRlc3QgIiRsYWxpYl9wIiA9IHllcworICAgIHRlc3QgeWVzID0gIiRsYWxpYl9wIgogfQogCiAjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKQEAgLTEyODksNyArMjQ1MSw3IEBACiB7CiAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgogICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlcgogfQogCiAjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQpAQCAtMTMwOCwxMSArMjQ3MCwxMyBAQAogIyBGQUlMX0NNRCBtYXkgcmVhZC1hY2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiB2YXJpYWJsZSBDTUQhCiBmdW5jX2V4ZWN1dGVfY21kcyAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCiAgICAgZm9yIGNtZCBpbiAkMTsgZG8KLSAgICAgIElGUz0kc2F2ZV9pZnMKKyAgICAgIElGUz0kc3AkbmwKICAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICBJRlM9JHNhdmVfaWZzCiAgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKICAgICBkb25lCiAgICAgSUZTPSRzYXZlX2lmcwpAQCAtMTMyNCwxMCArMjQ4OCwxMSBAQAogIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCiAjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKICMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZwotIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorIyAnRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgogZnVuY19zb3VyY2UgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgY2FzZSAkMSBpbgogICAgICovKiB8ICpcXCopCS4gIiQxIiA7OwogICAgICopCQkuICIuLyQxIiA7OwpAQCAtMTM1NCwxMCArMjUxOSwxMCBAQAogIyBzdG9yZSB0aGUgcmVzdWx0IGludG8gZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0LgogZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKIHsKLSAgY2FzZSAiJGx0X3N5c3Jvb3Q6JDEiIGluCisgIGNhc2UgJGx0X3N5c3Jvb3Q6JDEgaW4KICAgPyo6IiRsdF9zeXNyb290IiopCiAgICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCi0gICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9Jz0nJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgIDs7CiAgICopCiAgICAgIyBJbmNsdWRpbmcgbm8gc3lzcm9vdC4KQEAgLTEzNzQsNyArMjUzOSw4IEBACiAjIGFyZyBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtICdnY2MgLi4uJwogZnVuY19pbmZlcl90YWcgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KICAgICAgIENDX3F1b3RlZD0KICAgICAgIGZvciBhcmcgaW4gJENDOyBkbwpAQCAtMTM5Myw3ICsyNTU5LDcgQEAKIAlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCiAJICBpZiAkR1JFUCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCi0JICAgIGV2YWwgImAke1NFRH0gLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCisJICAgIGV2YWwgImAkU0VEIC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgogCSAgICBDQ19xdW90ZWQ9CiAJICAgIGZvciBhcmcgaW4gJENDOyBkbwogCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KQEAgLTE0MTgsNyArMjU4NCw3IEBACiAJIyBsaW5lIG9wdGlvbiBtdXN0IGJlIHVzZWQuCiAJaWYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCiAJICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgInNwZWNpZnkgYSB0YWcgd2l0aCBcYC0tdGFnJyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgInNwZWNpZnkgYSB0YWcgd2l0aCAnLS10YWcnIgogIwllbHNlCiAjCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKIAlmaQpAQCAtMTQzNCwxNSArMjYwMCwxNSBAQAogIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKIHsKLSAgICB3cml0ZV9saWJvYmo9JHsxfQotICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCi0gICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCisgICAgd3JpdGVfbGlib2JqPSQxCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKyAgICAgIHdyaXRlX2xvYmo9XCckMlwnCiAgICAgZWxzZQogICAgICAgd3JpdGVfbG9iaj1ub25lCiAgICAgZmkKIAotICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKyAgICAgIHdyaXRlX29sZG9iaj1cJyQzXCcKICAgICBlbHNlCiAgICAgICB3cml0ZV9vbGRvYmo9bm9uZQogICAgIGZpCkBAIC0xNDUwLDcgKzI2MTYsNyBAQAogICAgICRvcHRfZHJ5X3J1biB8fCB7CiAgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKICMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQotIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgogIwogIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCiAjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KQEAgLTE0NjIsNyArMjYyOCw3IEBACiBub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCiAKIEVPRgotICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHt3cml0ZV9saWJvYmp9IgorICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHdyaXRlX2xpYm9iaiIKICAgICB9CiB9CiAKQEAgLTE0ODIsOCArMjY0OCw5IEBACiAjIGJlIGVtcHR5IG9uIGVycm9yIChvciB3aGVuIEFSRyBpcyBlbXB0eSkKIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHNvIHdlCiAgICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKQEAgLTE0OTEsOSArMjY1OCw5IEBACiAgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKICAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgogICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAotICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wfSI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIjsgdGhlbgogICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9YCRFQ0hPICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiIHwKLSAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAkU0VEIC1lICIkc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCiAgICAgZWxzZQogICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CiAgICAgZmkKQEAgLTE1MTQsMTggKzI2ODEsMTkgQEAKICMgYXJlIGNvbnZlcnRpYmxlLCB0aGVuIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5LgogZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCi0gIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIiCisgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICBvbGRJRlM9JElGUwogICAgIElGUz06CiAgICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KICAgICAgIElGUz0kb2xkSUZTCiAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIgotICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IiA7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgotICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0CiAgICAgICAgIGVsc2UKICAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKICAgICAgICAgZmkKQEAgLTE1NTQsNyArMjcyMiw4IEBACiAjIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgogZnVuY19jeWdwYXRoICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgIGlmIHRlc3QgLW4gIiRMVF9DWUdQQVRIIiAmJiB0ZXN0IC1mICIkTFRfQ1lHUEFUSCI7IHRoZW4KICAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PWAkTFRfQ1lHUEFUSCAiJEAiIDI+L2Rldi9udWxsYAogICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgpAQCAtMTU2Myw3ICsyNzMyLDcgQEAKICAgICBmaQogICBlbHNlCiAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KLSAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogXGAkTFRfQ1lHUEFUSCciCisgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6ICckTFRfQ1lHUEFUSCciCiAgIGZpCiB9CiAjZW5kOiBmdW5jX2N5Z3BhdGgKQEAgLTE1NzQsMTAgKzI3NDMsMTEgQEAKICMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAogICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8Ci0gICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRzZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKIH0KICNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCiAKQEAgLTE1ODgsMTMgKzI3NTgsMTQgQEAKICMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgogZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICAkZGVidWdfY21kCisKKyAgaWYgdGVzdCAteiAiJDIiICYmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBmaWxlIG5hbWUgY29ycmVzcG9uZGluZyB0byIKLSAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorICAgIGZ1bmNfZXJyb3IgIiAgJyQxJyIKICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKICAgICAjIEZhbGxiYWNrOgotICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAgIGZpCiB9CiAjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjawpAQCAtMTYwNiwxMCArMjc3NywxMSBAQAogIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgogZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgogICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgotICAgIGZ1bmNfZXJyb3IgIiAgXGAkMyciCisgICAgZnVuY19lcnJvciAiICAnJDMnIgogICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgogICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAogICAgICMgc2hvdWxkIG5vdCBiZSAiaW1wcm92ZWQiLiAgU2VlIGxpYnRvb2wuaW5mby4KQEAgLTE2MTgsNyArMjc5MCw3IEBACiAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8CiAgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAogICAgIGVsc2UKLSAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMiCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDMKICAgICBmaQogICBmaQogfQpAQCAtMTYzMCw5ICsyODAyLDEwIEBACiAjIGFuZCBhcHBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgQkFDS1BBVC4KIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICBjYXNlICQ0IGluCi0gICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdAogICAgIDs7CiAgIGVzYWMKICAgY2FzZSAkNCBpbgpAQCAtMTY0Niw3ICsyODE5LDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgaW52b2tlZCB2aWEgYCR0b19ob3N0X2ZpbGVfY21kIEFSRycKKyMgaW52b2tlZCB2aWEgJyR0b19ob3N0X2ZpbGVfY21kIEFSRycKICMKICMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KICMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCkBAIC0xNjU3LDcgKzI4MzAsOCBAQAogIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX3RvX2hvc3RfZmlsZSAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICAkdG9faG9zdF9maWxlX2NtZCAiJDEiCiB9CiAjIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQpAQCAtMTY2OSw3ICsyODQzLDggQEAKICMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCiBmdW5jX3RvX3Rvb2xfZmlsZSAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICBjYXNlICwkMiwgaW4KICAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kMQpAQCAtMTY4Nyw3ICsyODYyLDcgQEAKICMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQogewotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKIH0KICMgZW5kIGZ1bmNfY29udmVydF9maWxlX25vb3AKIApAQCAtMTY5OCwxMSArMjg3MywxMiBAQAogIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgotICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdAogICBmaQogICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgogfQpAQCAtMTcxNCw4ICsyODkwLDkgQEAKICMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKICAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgpAQCAtMTczMSwxMSArMjkwOCwxMiBAQAogIyBhbmQgYSB3b3JraW5nIHdpbmVwYXRoLiBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0CiAgIGZpCiAgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCiB9CkBAIC0xNzQ3LDEyICsyOTI1LDEzIEBACiAjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCiAgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgotICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0CiAgIGZpCiAgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCiB9CkBAIC0xNzY1LDEzICsyOTQ0LDE0IEBACiAjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgICMgY29udmVydCBmcm9tICpuaXggdG8gdzMyLCB0aGVuIHVzZSBjeWdwYXRoIHRvIGNvbnZlcnQgZnJvbSB3MzIgdG8gY3lnd2luLgogICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgogICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgotICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0CiAgIGZpCiAgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCiB9CkBAIC0xNzgxLDcgKzI5NjEsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfcGF0aF9jbWQgQVJHJworIyBpbnZva2VkIHZpYSAnJHRvX2hvc3RfcGF0aF9jbWQgQVJHJwogIwogIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgogIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCkBAIC0xODA1LDEwICsyOTg1LDExIEBACiB0b19ob3N0X3BhdGhfY21kPQogZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCiAgICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgotICAgIHRvX2hvc3RfcGF0aF9jbWQ9ImZ1bmNfY29udmVydF9wYXRoXyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fSIKKyAgICB0b19ob3N0X3BhdGhfY21kPWZ1bmNfY29udmVydF9wYXRoXyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKICAgZmkKIH0KIApAQCAtMTgxOCw3ICsyOTk5LDggQEAKICMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgogZnVuY190b19ob3N0X3BhdGggKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKICAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgogfQpAQCAtMTgyOSw3ICszMDExLDcgQEAKICMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgogZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQogewotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKIH0KICMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKIApAQCAtMTg0MCw4ICszMDIyLDkgQEAKICMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgogZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbSBBUkcuICBNU1lTCiAgICAgIyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZTsgY3lncGF0aCB0dXJucyB0aGVtIGludG8gJy47JyBhbmQgJzsuJzsKQEAgLTE4NDksNyArMzAzMiw3IEBACiAgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKICAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0CiAgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAogICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKICAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCkBAIC0xODYzLDggKzMwNDYsOSBAQAogIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKICAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgpAQCAtMTg4MywxNCArMzA2NywxNSBAQAogIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKICAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgogICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQKICAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCiAgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgogICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKQEAgLTE5MDQsMTUgKzMwODksMTYgQEAKICMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgogICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCiAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgogICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAogICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCiAgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgogICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCkBAIC0xOTI3LDggKzMxMTMsOSBAQAogIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KICAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCkBAIC0xOTM3LDcgKzMxMjQsNyBAQAogICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgogICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0CiAgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKICAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCiAgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKQEAgLTE5NDYsMTMgKzMxMzMsMzEgQEAKICMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4KIAogCisjIGZ1bmNfZGxsX2RlZl9wIEZJTEUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIFdpbmRvd3MgRExMICcuZGVmJyBmaWxlLgorIyBLZWVwIGluIHN5bmMgd2l0aCBfTFRfRExMX0RFRl9QIGluIGxpYnRvb2wubTQKK2Z1bmNfZGxsX2RlZl9wICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX2RsbF9kZWZfcF90bXA9YCRTRUQgLW4gXAorICAgIC1lICdzL15bCSBdKi8vJyBcCisgICAgLWUgJy9eXCg7LipcKSokL2QnIFwKKyAgICAtZSAncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnIFwKKyAgICAtZSBxIFwKKyAgICAiJDEiYAorICB0ZXN0IERFRiA9ICIkZnVuY19kbGxfZGVmX3BfdG1wIgorfQorCisKICMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCiBmdW5jX21vZGVfY29tcGlsZSAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgogICAgIGJhc2VfY29tcGlsZT0KLSAgICBzcmNmaWxlPSIkbm9ub3B0IiAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCisgICAgc3JjZmlsZT0kbm9ub3B0ICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKICAgICBzdXBwcmVzc19vcHQ9eWVzCiAgICAgc3VwcHJlc3Nfb3V0cHV0PQogICAgIGFyZ19tb2RlPW5vcm1hbApAQCAtMTk2NSwxMiArMzE3MCwxMiBAQAogICAgICAgY2FzZSAkYXJnX21vZGUgaW4KICAgICAgIGFyZyAgKQogCSMgZG8gbm90ICJjb250aW51ZSIuICBJbnN0ZWFkLCBhZGQgdGhpcyB0byBiYXNlX2NvbXBpbGUKLQlsYXN0YXJnPSIkYXJnIgorCWxhc3Rhcmc9JGFyZwogCWFyZ19tb2RlPW5vcm1hbAogCTs7CiAKICAgICAgIHRhcmdldCApCi0JbGlib2JqPSIkYXJnIgorCWxpYm9iaj0kYXJnCiAJYXJnX21vZGU9bm9ybWFsCiAJY29udGludWUKIAk7OwpAQCAtMTk4MCw3ICszMTg1LDcgQEAKIAljYXNlICRhcmcgaW4KIAktbykKIAkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKLQkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgY2Fubm90IHNwZWNpZnkgJy1vJyBtb3JlIHRoYW4gb25jZSIKIAkgIGFyZ19tb2RlPXRhcmdldAogCSAgY29udGludWUKIAkgIDs7CkBAIC0yMDA5LDEyICszMjE0LDEyIEBACiAJICBmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCiAJICBhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkgIGxhc3Rhcmc9Ci0JICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwkgIHNhdmVfaWZzPSRJRlM7IElGUz0sCiAJICBmb3IgYXJnIGluICRhcmdzOyBkbwotCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgSUZTPSRzYXZlX2lmcwogCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKIAkgIGRvbmUKLQkgIElGUz0iJHNhdmVfaWZzIgorCSAgSUZTPSRzYXZlX2lmcwogCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKIAkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCkBAIC0yMDI3LDggKzMyMzIsOCBAQAogCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgogCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCiAJICAjCi0JICBsYXN0YXJnPSIkc3JjZmlsZSIKLQkgIHNyY2ZpbGU9IiRhcmciCisJICBsYXN0YXJnPSRzcmNmaWxlCisJICBzcmNmaWxlPSRhcmcKIAkgIDs7CiAJZXNhYyAgIyAgY2FzZSAkYXJnCiAJOzsKQEAgLTIwNDMsMTMgKzMyNDgsMTMgQEAKICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKICAgICAgIDs7CiAgICAgdGFyZ2V0KQotICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIgorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoICctbyciCiAgICAgICA7OwogICAgICopCiAgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCiAgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CiAJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCi0JbGlib2JqPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJbGlib2JqPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogICAgICAgfQogICAgICAgOzsKICAgICBlc2FjCkBAIC0yMDY5LDcgKzMyNzQsNyBAQAogICAgIGNhc2UgJGxpYm9iaiBpbgogICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OwogICAgICopCi0gICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIgorICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gJyRsaWJvYmonIgogICAgICAgOzsKICAgICBlc2FjCiAKQEAgLTIwNzgsOCArMzI4Myw4IEBACiAgICAgZm9yIGFyZyBpbiAkbGF0ZXI7IGRvCiAgICAgICBjYXNlICRhcmcgaW4KICAgICAgIC1zaGFyZWQpCi0JdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKLQkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCXRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2Fubm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCiAJYnVpbGRfb2xkX2xpYnM9bm8KIAljb250aW51ZQogCTs7CkBAIC0yMTA1LDE3ICszMzEwLDE3IEBACiAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxpYm9iaiIKICAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiIFwKICAgICAgICYmICRFQ0hPICJYJGxpYm9iaiIgfCAkR1JFUCAnW11+I14qe307PD4/IiciJyInCSAmKCl8YCRbXScgXAotICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSBcYCRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgorICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSAnJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCiAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCi0gICAgb2JqbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotICAgIGxvYmo9JHt4ZGlyfSRvYmpkaXIvJG9iam5hbWUKKyAgICBvYmpuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorICAgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICBsb2JqPSR4ZGlyJG9iamRpci8kb2JqbmFtZQogCiAgICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAogICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKIAogICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCi0gICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KICAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgogICAgIGVsc2UKICAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKQEAgLTIxMjcsMTYgKzMzMzIsMTYgQEAKICAgICAgIHBpY19tb2RlPWRlZmF1bHQKICAgICAgIDs7CiAgICAgZXNhYwotICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgPSBubyAmJiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisgICAgaWYgdGVzdCBubyA9ICIkcGljX21vZGUiICYmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KICAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAogICAgICAgcGljX21vZGU9ZGVmYXVsdAogICAgIGZpCiAKICAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcwogICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYwotICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm87IHRoZW4KLSAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9Ci0gICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKKyAgICBpZiB0ZXN0IG5vID0gIiRjb21waWxlcl9jX28iOyB0aGVuCisgICAgICBvdXRwdXRfb2JqPWAkRUNITyAiJHNyY2ZpbGUiIHwgJFNFRCAncyVeLiovJSU7IHMlXC5bXi5dKiQlJSdgLiRvYmpleHQKKyAgICAgIGxvY2tmaWxlPSRvdXRwdXRfb2JqLmxvY2sKICAgICBlbHNlCiAgICAgICBvdXRwdXRfb2JqPQogICAgICAgbmVlZF9sb2Nrcz1ubwpAQCAtMjE0NSwxMiArMzM1MCwxMiBAQAogCiAgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKICAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCi0gICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJG5lZWRfbG9ja3MiOyB0aGVuCiAgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCiAJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKIAlzbGVlcCAyCiAgICAgICBkb25lCi0gICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisgICAgZWxpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiOyB0aGVuCiAgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCiAJJEVDSE8gIlwKICoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CkBAIC0yMTU4LDcgKzMzNjMsNyBAQAogCiBUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCiB0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCi15b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91Cit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQogcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgogYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKIGNvbXBpbGVyLiIKQEAgLTIxODAsMTEgKzMzODUsMTEgQEAKICAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKIAogICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgotICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KICAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCiAgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKIAotICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCBubyAhPSAiJHBpY19tb2RlIjsgdGhlbgogCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKICAgICAgIGVsc2UKIAkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCkBAIC0yMjAxLDcgKzM0MDYsNyBAQAogICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAogICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCiAKLSAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKyAgICAgIGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyIgJiYKIAkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KIAkkRUNITyAiXAogKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CkBAIC0yMjEyLDcgKzM0MTcsNyBAQAogCiBUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCiB0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCi15b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91Cit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQogcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgogYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKIGNvbXBpbGVyLiIKQEAgLTIyMjgsMjAgKzM0MzMsMjAgQEAKICAgICAgIGZpCiAKICAgICAgICMgQWxsb3cgZXJyb3IgbWVzc2FnZXMgb25seSBmcm9tIHRoZSBmaXJzdCBjb21waWxhdGlvbi4KLSAgICAgIGlmIHRlc3QgIiRzdXBwcmVzc19vcHQiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcHJlc3Nfb3B0IjsgdGhlbgogCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKICAgICAgIGZpCiAgICAgZmkKIAogICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KLSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCi0gICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzICE9ICIkcGljX21vZGUiOyB0aGVuCiAJIyBEb24ndCBidWlsZCBQSUMgY29kZQogCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlJHBpZV9mbGFnIgogICAgICAgZWxzZQogCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX2NfbyI7IHRoZW4KIAlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKICAgICAgIGZpCiAKQEAgLTIyNTAsNyArMzQ1NSw3IEBACiAgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCiAgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCiAKLSAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKyAgICAgIGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyIgJiYKIAkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KIAkkRUNITyAiXAogKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CkBAIC0yMjYxLDcgKzM0NjYsNyBAQAogCiBUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCiB0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCi15b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91Cit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQogcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgogYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKIGNvbXBpbGVyLiIKQEAgLTIyODEsNyArMzQ4Niw3IEBACiAgICAgICBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICIkbGlib2JqIiAiJG9iamRpci8kb2JqbmFtZSIgIiRvYmpuYW1lIgogCiAgICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCi0gICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgogCXJlbW92ZWxpc3Q9JGxvY2tmaWxlCiAgICAgICAgICRSTSAiJGxvY2tmaWxlIgogICAgICAgZmkKQEAgLTIyOTEsNyArMzQ5Niw3IEBACiB9CiAKICRvcHRfaGVscCB8fCB7Ci0gIHRlc3QgIiRvcHRfbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorICB0ZXN0IGNvbXBpbGUgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KIH0KIAogZnVuY19tb2RlX2hlbHAgKCkKQEAgLTIzMTEsNyArMzUxNiw3IEBACiBSZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgogCiBSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKLSh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKKyh0eXBpY2FsbHkgJy9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgJy1mJykgdG8gYmUgcGFzc2VkCiB0byBSTS4KIAogSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZApAQCAtMjMzMCwxNiArMzUzNSwxNiBAQAogICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKICAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKICAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkIG5vbi1QSUMgb2JqZWN0cyBvbmx5Ci0gIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCi0gIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSAnLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSAnLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCiAgIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKIAotQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK0NPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhICdzdGFuZGFyZCcgb2JqZWN0IGZpbGUKIGZyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCiAKIFRoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQotU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCi1saWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCitTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggJy5jJyB3aXRoIHRoZQorbGlicmFyeSBvYmplY3Qgc3VmZml4LCAnLmxvJy4iCiAgICAgICAgIDs7CiAKICAgICAgIGV4ZWN1dGUpCkBAIC0yMzUyLDcgKzM1NTcsNyBAQAogCiAgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCiAKLVRoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvICctZGxvcGVuJwogZmxhZ3MuCiAKIElmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKQEAgLTIzNzEsNyArMzU3Niw3IEBACiBFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgogCiBUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKLXRoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgordGhlICctLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKICAgICAgICAgOzsKIAogICAgICAgaW5zdGFsbCkKQEAgLTIzODEsNyArMzU4Niw3IEBACiBJbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KIAogSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCi1laXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KK2VpdGhlciB0aGUgJ2luc3RhbGwnIG9yICdjcCcgcHJvZ3JhbS4KIAogVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CiAKQEAgLTI0MDcsNyArMzYxMiw3IEBACiAgIC1hdm9pZC12ZXJzaW9uICAgIGRvIG5vdCBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCBpZiBwb3NzaWJsZQogICAtYmluZGlyIEJJTkRJUiAgICBzcGVjaWZ5IHBhdGggdG8gYmluYXJpZXMgZGlyZWN0b3J5IChmb3Igc3lzdGVtcyB3aGVyZQogICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgbXVzdCBiZSBmb3VuZCBpbiB0aGUgUEFUSCBzZXR0aW5nIGF0IHJ1bnRpbWUpCi0gIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQorICAtZGxvcGVuIEZJTEUgICAgICAnLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQogICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBsdF9wcmVsb2FkZWRfc3ltYm9scwogICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQogICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQpAQCAtMjQ0MSwyMCArMzY0NiwyMCBAQAogICAtWGxpbmtlciBGTEFHICAgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBsaW5rZXIKICAgLVhDQ2xpbmtlciBGTEFHICAgcGFzcyBsaW5rLXNwZWNpZmljIEZMQUcgdG8gdGhlIGNvbXBpbGVyIGRyaXZlciAoQ0MpCiAKLUFsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggXGAtJykgYXJlIGlnbm9yZWQuCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoICctJykgYXJlIGlnbm9yZWQuCiAKLUV2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiBcYC5sYScgYXJlCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gJy5sYScgYXJlCiB0cmVhdGVkIGFzIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzLCBvdGhlciBmaWxlcyBhcmUgc3RhbmRhcmQgb3IgbGlicmFyeQogb2JqZWN0IGZpbGVzLgogCi1JZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKLW9ubHkgbGlicmFyeSBvYmplY3RzIChcYC5sbycgZmlsZXMpIG1heSBiZSBzcGVjaWZpZWQsIGFuZCBcYC1ycGF0aCcgaXMKK0lmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluICcubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoJy5sbycgZmlsZXMpIG1heSBiZSBzcGVjaWZpZWQsIGFuZCAnLXJwYXRoJyBpcwogcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KIAotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCi11c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5hJyBvciAnLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nICdhcicgYW5kICdyYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nICdsaWInLgogCi1JZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQorSWYgT1VUUFVULUZJTEUgZW5kcyBpbiAnLmxvJyBvciAnLiRvYmpleHQnLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQogaXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKICAgICAgICAgOzsKIApAQCAtMjQ2NSw3ICszNjcwLDcgQEAKIFJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiBSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKLSh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKKyh0eXBpY2FsbHkgJy9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgJy1mJykgdG8gYmUgcGFzc2VkCiB0byBSTS4KIAogSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggaXQgYXJlIGRlbGV0ZWQuCkBAIC0yNDczLDE3ICszNjc4LDE3IEBACiAgICAgICAgIDs7CiAKICAgICAgICopCi0gICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSAnJG9wdF9tb2RlJyIKICAgICAgICAgOzsKICAgICBlc2FjCiAKICAgICBlY2hvCi0gICAgJEVDSE8gIlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKKyAgICAkRUNITyAiVHJ5ICckcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCiB9CiAKICMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQogaWYgJG9wdF9oZWxwOyB0aGVuCi0gIGlmIHRlc3QgIiRvcHRfaGVscCIgPSA6OyB0aGVuCisgIGlmIHRlc3QgOiA9ICIkb3B0X2hlbHAiOyB0aGVuCiAgICAgZnVuY19tb2RlX2hlbHAKICAgZWxzZQogICAgIHsKQEAgLTI1MTYsMTYgKzM3MjEsMTcgQEAKICMgZnVuY19tb2RlX2V4ZWN1dGUgYXJnLi4uCiBmdW5jX21vZGVfZXhlY3V0ZSAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29tbWFuZCBuYW1lLgotICAgIGNtZD0iJG5vbm9wdCIKKyAgICBjbWQ9JG5vbm9wdAogICAgIHRlc3QgLXogIiRjbWQiICYmIFwKICAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCiAKICAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgogICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbwogICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKLQl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisJfHwgZnVuY19mYXRhbF9oZWxwICInJGZpbGUnIGlzIG5vdCBhIGZpbGUiCiAKICAgICAgIGRpcj0KICAgICAgIGNhc2UgJGZpbGUgaW4KQEAgLTI1MzUsNyArMzc0MSw3IEBACiAKIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgogCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCi0JICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCSAgfHwgZnVuY19mYXRhbF9oZWxwICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCiAJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCiAJZGxuYW1lPQpAQCAtMjU0NiwxOCArMzc1MiwxOCBAQAogCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCiAJICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCiAJICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgXAotCSAgICBmdW5jX3dhcm5pbmcgIlxgJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggXGAtZXhwb3J0LWR5bmFtaWMnIgorCSAgICBmdW5jX3dhcm5pbmcgIickZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCAnLWV4cG9ydC1keW5hbWljJyIKIAkgIGNvbnRpbnVlCiAJZmkKIAogCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgotCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAKIAlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KIAkgIGZ1bmNfYXBwZW5kIGRpciAiLyRvYmpkaXIiCiAJZWxzZQogCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIFxgJGRsbmFtZScgaW4gXGAkZGlyJyBvciBcYCRkaXIvJG9iamRpciciCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kICckZGxuYW1lJyBpbiAnJGRpcicgb3IgJyRkaXIvJG9iamRpciciCiAJICBmaQogCWZpCiAJOzsKQEAgLTI1NjUsMTggKzM3NzEsMTggQEAKICAgICAgICoubG8pCiAJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgogCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgotCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAJOzsKIAogICAgICAgKikKLQlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKIAljb250aW51ZQogCTs7CiAgICAgICBlc2FjCiAKICAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KICAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKLSAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKyAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0kYWJzZGlyCiAKICAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCiAgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgpAQCAtMjU4OCw3ICszNzk0LDcgQEAKIAogICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgogICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9JG1hZ2ljCiAKICAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCiAgICAgYXJncz0KQEAgLTI2MDEsMTIgKzM4MDcsMTIgQEAKIAlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJGZpbGUiOyB0aGVuCiAJICBmdW5jX3NvdXJjZSAiJGZpbGUiCiAJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgotCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJICBmaWxlPSRwcm9nZGlyLyRwcm9ncmFtCiAJZWxpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgogCSAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCiAJICBmdW5jX3NvdXJjZSAiJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgogCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KLQkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCSAgZmlsZT0kcHJvZ2Rpci8kcHJvZ3JhbQogCWZpCiAJOzsKICAgICAgIGVzYWMKQEAgLTI2MTQsNyArMzgyMCwxNSBAQAogICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgogICAgIGRvbmUKIAotICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCisgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisgICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKwllY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorICAgICAgJEVDSE8gIiRjbWQkYXJncyIKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGVsc2UKICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgogCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgogCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKQEAgLTI2MzEsMjUgKzM4NDUsMTggQEAKICAgICAgIGRvbmUKIAogICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgotICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCi0gICAgZWxzZQotICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KLSAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCi0JZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgotICAgICAgZmkKLSAgICAgICRFQ0hPICIkY21kJGFyZ3MiCi0gICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGV4ZWNfY21kPVwkY21kJGFyZ3MKICAgICBmaQogfQogCi10ZXN0ICIkb3B0X21vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KK3Rlc3QgZXhlY3V0ZSA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQogCiAKICMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KIGZ1bmNfbW9kZV9maW5pc2ggKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgbGlicz0KICAgICBsaWJkaXJzPQogICAgIGFkbWluY21kcz0KQEAgLTI2NjMsMTEgKzM4NzAsMTEgQEAKIAlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgogCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCiAJZWxzZQotCSAgZnVuY193YXJuaW5nICJcYCRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkgIGZ1bmNfd2FybmluZyAiJyRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAlmaQogCiAgICAgICBlbHNlCi0JZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgorCWZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgYXJndW1lbnQgJyRvcHQnIgogICAgICAgZmkKICAgICBkb25lCiAKQEAgLTI2ODIsMTIgKzM4ODksMTIgQEAKICAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcwogICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCiAgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCi0gICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCisgICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgJz0nIHByZWZpeGVzIGZyb20gJGxpYiIKICAgICAgICAgZG9uZQogICAgICAgZWxzZQogICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAogICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbwotCSAgc2VkIC1lICIke3N5c3Jvb3RfY21kfSBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAorCSAgc2VkIC1lICIkc3lzcm9vdF9jbWQgcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKIAkgICAgPiAkdG1wZGlyL3RtcC1sYQogCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgogCWRvbmUKQEAgLTI3MTIsNyArMzkxOSw3IEBACiAgICAgZmkKIAogICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgotICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICRvcHRfcXVpZXQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCiAKICAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgogICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKQEAgLTI3MjMsMjcgKzM5MzAsMjcgQEAKICAgICAgIGVjaG8KICAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgogICAgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCi0gICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorICAgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSAnLUxMSUJESVInIgogICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgogICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0JZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlICckc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCiAJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgogICAgICAgZmkKICAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLQllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlICckcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgogCWVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCiAgICAgICBmaQogICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCiAJbGliZGlyPUxJQkRJUgogCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKIAotCSRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisJJEVDSE8gIiAgIC0gdXNlIHRoZSAnJGZsYWcnIGxpbmtlciBmbGFnIgogICAgICAgZmkKICAgICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCiAJJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgogICAgICAgZmkKICAgICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0JZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisJZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byAnL2V0Yy9sZC5zby5jb25mJyIKICAgICAgIGZpCiAgICAgICBlY2hvCiAKQEAgLTI3NjIsMTggKzM5NjksMjAgQEAKICAgICBleGl0ICRFWElUX1NVQ0NFU1MKIH0KIAotdGVzdCAiJG9wdF9tb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQordGVzdCBmaW5pc2ggPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQogCiAKICMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCiBmdW5jX21vZGVfaW5zdGFsbCAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCiAgICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCi0gICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKKyAgICBpZiB0ZXN0ICIkU0hFTEwiID0gIiRub25vcHQiIHx8IHRlc3QgL2Jpbi9zaCA9ICIkbm9ub3B0IiB8fAogICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgotICAgICAgIGNhc2UgJG5vbm9wdCBpbiAqc2h0b29sKikgOjs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorICAgICAgIGNhc2UgJG5vbm9wdCBpbiAqc2h0b29sKikgOjs7ICopIGZhbHNlOzsgZXNhYworICAgIHRoZW4KICAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCiAgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCkBAIC0yODAwLDcgKzQwMDksNyBAQAogICAgIG9wdHM9CiAgICAgcHJldj0KICAgICBpbnN0YWxsX3R5cGU9Ci0gICAgaXNkaXI9bm8KKyAgICBpc2Rpcj1mYWxzZQogICAgIHN0cmlwbWU9CiAgICAgbm9fbW9kZT06CiAgICAgZm9yIGFyZwpAQCAtMjgxMyw3ICs0MDIyLDcgQEAKICAgICAgIGZpCiAKICAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLWQpIGlzZGlyPXllcyA7OworICAgICAgLWQpIGlzZGlyPTogOzsKICAgICAgIC1mKQogCWlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKIAkgIHByZXY9JGFyZwpAQCAtMjgzMSw3ICs0MDQwLDcgQEAKICAgICAgICopCiAJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgogCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotCSAgaWYgdGVzdCAieCRwcmV2IiA9IHgtbSAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgorCSAgaWYgdGVzdCBYLW0gPSAiWCRwcmV2IiAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgogCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKIAkgICAgbm9fbW9kZT1mYWxzZQogCSAgZmkKQEAgLTI4NTYsNyArNDA2NSw3IEBACiAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFsbCBwcm9ncmFtIgogCiAgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXYnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlICckcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgogCiAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KICAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKQEAgLTI4NzgsMTkgKzQwODcsMTkgQEAKICAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAogICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgotICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKLSAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCi0gICAgICBkZXN0ZGlyPSIkZGVzdCIKKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9OgorICAgIGlmICRpc2RpcjsgdGhlbgorICAgICAgZGVzdGRpcj0kZGVzdAogICAgICAgZGVzdG5hbWU9CiAgICAgZWxzZQogICAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJGRlc3QiICIiICIuIgotICAgICAgZGVzdGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0gICAgICBkZXN0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgZGVzdGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgZGVzdG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAKICAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KICAgICAgIHNldCBkdW1teSAkZmlsZXM7IHNoaWZ0CiAgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAotCWZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgorCWZ1bmNfZmF0YWxfaGVscCAiJyRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCiAgICAgZmkKICAgICBjYXNlICRkZXN0ZGlyIGluCiAgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwpAQCAtMjg5OSw3ICs0MTA4LDcgQEAKIAljYXNlICRmaWxlIGluCiAJKi5sbykgOzsKIAkqKQotCSAgZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgorCSAgZnVuY19mYXRhbF9oZWxwICInJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCiAJICA7OwogCWVzYWMKICAgICAgIGRvbmUKQEAgLTI5MDgsNyArNDExNyw3IEBACiAKICAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKICAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9JG1hZ2ljCiAKICAgICBzdGF0aWNsaWJzPQogICAgIGZ1dHVyZV9saWJkaXJzPQpAQCAtMjkyOCw3ICs0MTM3LDcgQEAKIAogCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCiAJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCSAgfHwgZnVuY19mYXRhbF9oZWxwICInJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAogCWxpYnJhcnlfbmFtZXM9CiAJb2xkX2xpYnJhcnk9CkBAIC0yOTUwLDcgKzQxNTksNyBAQAogCWZpCiAKIAlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKLQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKIAogCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KQEAgLTI5NjQsNyArNDE3Myw3IEBACiAJICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCiAJICAjIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KIAkgIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCBcYCRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCAnJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKIAogCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KIAkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgpAQCAtMjk3MywyOSArNDE4MiwyOSBAQAogCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAogCSAgZmkKIAotCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgXGAkZmlsZSciCisJICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyAnJGZpbGUnIgogCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAotCSAgICAnZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgJ1wnJyRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKIAlmaQogCiAJIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KIAlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0CiAJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0JICByZWFsbmFtZT0iJDEiCisJICByZWFsbmFtZT0kMQogCSAgc2hpZnQKIAotCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgotCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCSAgc3JjbmFtZT0kcmVhbG5hbWUKKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0ke3JlYWxuYW1lfVQKIAogCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgogCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCiAJICAgICAgJ2V4aXQgJD8nCi0JICB0c3RyaXBtZT0iJHN0cmlwbWUiCisJICB0c3RyaXBtZT0kc3RyaXBtZQogCSAgY2FzZSAkaG9zdF9vcyBpbgogCSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogCSAgICBjYXNlICRyZWFsbmFtZSBpbgogCSAgICAqLmRsbC5hKQotCSAgICAgIHRzdHJpcG1lPSIiCisJICAgICAgdHN0cmlwbWU9CiAJICAgICAgOzsKIAkgICAgZXNhYwogCSAgICA7OwpAQCAtMzAwNiw3ICs0MjE1LDcgQEAKIAogCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCiAJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCi0JICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyBUcnkgJ2xuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlICdsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgogCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKIAkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgogCSAgICBmb3IgbGlua25hbWUKQEAgLTMwMTcsMTQgKzQyMjYsMTQgQEAKIAkgIGZpCiAKIAkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KLQkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgbGliPSRkZXN0ZGlyLyRyZWFsbmFtZQogCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKIAlmaQogCiAJIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCiAJZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0JbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKKwluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCWluc3RuYW1lPSRkaXIvJHtuYW1lfWkKIAlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JwogCiAJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgpAQCAtMzAzNiwxMSArNDI0NSwxMSBAQAogCiAJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgogCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdG5hbWUKIAllbHNlCiAJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLQkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdGZpbGUKIAlmaQogCiAJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KQEAgLTMwNTAsMTEgKzQyNTksMTEgQEAKIAkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKIAkgIDs7CiAJKi4kb2JqZXh0KQotCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgorCSAgc3RhdGljZGVzdD0kZGVzdGZpbGUKIAkgIGRlc3RmaWxlPQogCSAgOzsKIAkqKQotCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIKKwkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byAnJGRlc3RmaWxlJyIKIAkgIDs7CiAJZXNhYwogCkBAIC0zMDYzLDcgKzQyNzIsNyBAQAogCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKIAogCSMgSW5zdGFsbCB0aGUgb2xkIG9iamVjdCBpZiBlbmFibGVkLgotCWlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCiAJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgogCSAgZnVuY19sbzJvICIkZmlsZSIKIAkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdApAQCAtMzA3NSwyMyArNDI4NCwyMyBAQAogICAgICAgKikKIAkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCiAJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgotCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0bmFtZQogCWVsc2UKIAkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJICBkZXN0ZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0ZmlsZQogCWZpCiAKIAkjIElmIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGFuZCB0aGVyZSBpcyBhIC5leGUgb24gdGhlIGVuZCwgc3RyaXAgaXQKIAkjIGJlY2F1c2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBsaWJ0b29sIHNjcmlwdCB3ZSBhY3R1YWxseSB3YW50IHRvCiAJIyBpbnN0YWxsCi0Jc3RyaXBwZWRfZXh0PSIiCisJc3RyaXBwZWRfZXh0PQogCWNhc2UgJGZpbGUgaW4KIAkgICouZXhlKQogCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgogCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCiAJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorCSAgICAgIHN0cmlwcGVkX2V4dD0uZXhlCiAJICAgIGZpCiAJICAgIDs7CiAJZXNhYwpAQCAtMzExOSwxOSArNDMyOCwxOSBAQAogCiAJICAjIENoZWNrIHRoZSB2YXJpYWJsZXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHNldC4KIAkgIHRlc3QgLXogIiRnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBcYCR3cmFwcGVyJyIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0ICckd3JhcHBlciciCiAKLQkgIGZpbmFsaXplPXllcworCSAgZmluYWxpemU9OgogCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbwogCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCiAJICAgIGxpYmRpcj0KIAkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KIAkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKIAkgICAgZmkKLQkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICIkbGliIiB8ICRTRUQgJ3MlXi4qLyUlZydgICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBsaWJmaWxlPSRsaWJkaXIvYCRFQ0hPICIkbGliIiB8ICRTRUQgJ3MlXi4qLyUlZydgCiAJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCi0JICAgICAgZnVuY193YXJuaW5nICJcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIKLQkgICAgICBmaW5hbGl6ZT1ubworCSAgICAgIGZ1bmNfd2FybmluZyAiJyRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gJyRsaWJkaXInIgorCSAgICAgIGZpbmFsaXplPWZhbHNlCiAJICAgIGZpCiAJICBkb25lCiAKQEAgLTMxMzksMjkgKzQzNDgsMjkgQEAKIAkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKIAogCSAgb3V0cHV0bmFtZT0KLQkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgaWYgdGVzdCBubyA9ICIkZmFzdF9pbnN0YWxsIiAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCiAJICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgaWYgdGVzdCAiJGZpbmFsaXplIiA9IHllczsgdGhlbgorCSAgICAgIGlmICRmaW5hbGl6ZTsgdGhlbgogCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKIAkJZnVuY19iYXNlbmFtZSAiJGZpbGUkc3RyaXBwZWRfZXh0IgotCQlmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JICAgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgorCQlmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICAgICAgb3V0cHV0bmFtZT0kdG1wZGlyLyRmaWxlCiAJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCiAJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKIAotCSAgICAgICAgJG9wdF9zaWxlbnQgfHwgeworCSAgICAgICAgJG9wdF9xdWlldCB8fCB7CiAJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgogCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKIAkgICAgICAgIH0KIAkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgogCSAgICAgICAgICBlbHNlCi0JCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgorCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgJyRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgogCQkgICRvcHRfZHJ5X3J1biB8fCAke1JNfXIgIiR0bXBkaXIiCiAJCSAgY29udGludWUKIAkgICAgICAgIGZpCi0JICAgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKwkgICAgICAgIGZpbGU9JG91dHB1dG5hbWUKIAkgICAgICBlbHNlCi0JICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgXGAkZmlsZSciCisJICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgJyRmaWxlJyIKIAkgICAgICBmaQogCSAgICB9CiAJICBlbHNlCkBAIC0zMTk4LDEwICs0NDA3LDEwIEBACiAKICAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAogICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgotICAgICAgb2xkbGliPSIkZGVzdGRpci8kbmFtZSIKKyAgICAgIG9sZGxpYj0kZGVzdGRpci8kbmFtZQogICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvbGRsaWIiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCiAgICAgICB0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CiAKQEAgLTMyMTYsMTggKzQ0MjUsMTggQEAKICAgICBkb25lCiAKICAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKLSAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKyAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuICckcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgogCiAgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KICAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCiAgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgotICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworICAgICAgZXhlY19jbWQ9JyRTSEVMTCAiJHByb2dwYXRoIiAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCiAgICAgZWxzZQogICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCiAgICAgZmkKIH0KIAotdGVzdCAiJG9wdF9tb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9Cit0ZXN0IGluc3RhbGwgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KIAogCiAjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcApAQCAtMzIzNSwxNiArNDQ0NCwxNyBAQAogIyBhIGRscHJlb3BlbiBzeW1ib2wgdGFibGUuCiBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAoKQogewotICAgICRvcHRfZGVidWcKLSAgICBteV9vdXRwdXRuYW1lPSIkMSIKLSAgICBteV9vcmlnaW5hdG9yPSIkMiIKLSAgICBteV9waWNfcD0iJHszLW5vfSIKKyAgICAkZGVidWdfY21kCisKKyAgICBteV9vdXRwdXRuYW1lPSQxCisgICAgbXlfb3JpZ2luYXRvcj0kMgorICAgIG15X3BpY19wPSR7My1mYWxzZX0KICAgICBteV9wcmVmaXg9YCRFQ0hPICIkbXlfb3JpZ2luYXRvciIgfCBzZWQgJ3MlW15hLXpBLVowLTldJV8lZydgCiAgICAgbXlfZGxzeW1zPQogCi0gICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgogICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotCW15X2Rsc3ltcz0iJHtteV9vdXRwdXRuYW1lfVMuYyIKKwlteV9kbHN5bXM9JHtteV9vdXRwdXRuYW1lfVMuYwogICAgICAgZWxzZQogCWZ1bmNfZXJyb3IgIm5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIKICAgICAgIGZpCkBAIC0zMjU1LDcgKzQ0NjUsNyBAQAogICAgICAgIiIpIDs7CiAgICAgICAqLmMpCiAJIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KLQlubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfS5ubSIKKwlubGlzdD0kb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5ubQogCiAJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKIApAQCAtMzI2MywzNCArNDQ3MywzNiBAQAogCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKIAogCSRvcHRfZHJ5X3J1biB8fCAkRUNITyA+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAotLyogJG15X2Rsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciBcYCRteV9vdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCi0vKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OICovCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yICckbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuIFwiQ1wiIHsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDQpKSB8fCAoX19HTlVDX18gPiA0KSkKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKICNlbmRpZgogCiAvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfV0lOMzJfV0NFCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKICAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KICMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0jZWxpZiBkZWZpbmVkKF9fb3NmX18pCisjZWxpZiBkZWZpbmVkIF9fb3NmX18KIC8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwogIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKICNlbHNlCiAjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAogI2VuZGlmCiAKKyNkZWZpbmUgU1RSRVEoczEsIHMyKSAoc3RyY21wICgoczEpLCAoczIpKSA9PSAwKQorCiAvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAogIgogCi0JaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KLQkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKKwlpZiB0ZXN0IHllcyA9ICIkZGxzZWxmIjsgdGhlbgorCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJG91dHB1dCciCiAKIAkgICRvcHRfZHJ5X3J1biB8fCBlY2hvICc6IEBQUk9HUkFNQCAnID4gIiRubGlzdCIKIApAQCAtMzI5OCw3ICs0NTEwLDcgQEAKIAkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKIAkgIGZvciBwcm9nZmlsZSBpbiAkcHJvZ2ZpbGVzOyBkbwogCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHByb2dmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCisJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gJyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQnIgogCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgogCSAgZG9uZQogCkBAIC0zMzE4LDEwICs0NTMwLDEwIEBACiAKIAkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCiAJICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCi0JICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisJICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cAogCSAgICAkb3B0X2RyeV9ydW4gfHwgewogCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKLQkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgICBldmFsICIkU0VEIC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCiAJICAgICAgY2FzZSAkaG9zdCBpbgogCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQogICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCkBAIC0zMzMxLDcgKzQ1NDMsNyBAQAogCSAgICB9CiAJICBlbHNlCiAJICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgZXZhbCAiJFNFRCAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJwogCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCiAJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKIAkgICAgICBjYXNlICRob3N0IGluCkBAIC0zMzQ1LDIyICs0NTU3LDIyIEBACiAJZmkKIAogCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCi0JICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGRscHJlZmlsZSciCisJICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tICckZGxwcmVmaWxlJyIKIAkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCi0JICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogICAgICAgICAgIGNhc2UgJGhvc3QgaW4KIAkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCiAJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCiAJICAgICAgaWYgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgIiRkbHByZWZpbGUiOyB0aGVuCiAJICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgogCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKLQkgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIiCisJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0KIAkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCiAJICAgICAgICAgICMgVXNlIHN1YnNoZWxsLCB0byBhdm9pZCBjbG9iYmVyaW5nIGN1cnJlbnQgdmFyaWFibGUgdmFsdWVzCiAJICAgICAgICAgIGRscHJlZmlsZV9kbG5hbWU9YHNvdXJjZSAiJGN1cnJfbGFmaWxlIiAmJiBlY2hvICIkZGxuYW1lImAKLQkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiIDsgdGhlbgorCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsbmFtZSI7IHRoZW4KIAkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKLQkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCSAgICAgICAgICBlbHNlCiAJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgogCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKQEAgLTMzNjgsNyArNDU4MCw3IEBACiAJICAgICAgICAgIGZpCiAJICAgICAgICBmaQogCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA7IHRoZW4KKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIjsgdGhlbgogCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRkbHByZWZpbGVfZGxiYXNlbmFtZSIgPj4gIiRubGlzdCInCiAJICAgICAgICAgIGVsc2UKIAkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCkBAIC0zNDI0LDYgKzQ2MzYsMTEgQEAKIAkgICAgZWNobyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCiAJICBmaQogCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIke25saXN0fUkiJworCSAgaWYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfdG9faW1wb3J0IjsgdGhlbgorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQiJyA8ICIkbmxpc3QiUyA+ICIkbmxpc3QiSScKKwkgIGZpCisKIAkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCiAKIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KQEAgLTM0MzIsMTEgKzQ2NDksMzAgQEAKICAgdm9pZCAqYWRkcmVzczsKIH0gbHRfZGxzeW1saXN0OwogZXh0ZXJuIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAotbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdOworbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdO1wKKyIKKworCSAgaWYgdGVzdCAtcyAiJG5saXN0Ikk7IHRoZW4KKwkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKK3N0YXRpYyB2b2lkIGx0X3N5bWluaXQodm9pZCkKK3sKKyAgTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0ICpzeW1ib2wgPSBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworICBmb3IgKDsgc3ltYm9sLT5uYW1lOyArK3N5bWJvbCkKKyAgICB7IgorCSAgICAkU0VEICdzLy4qLyAgICAgIGlmIChTVFJFUSAoc3ltYm9sLT5uYW1lLCBcIiZcIikpIHN5bWJvbC0+YWRkcmVzcyA9ICh2b2lkICopIFwmJjsvJyA8ICIkbmxpc3QiSSA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgICB9Cit9IgorCSAgZmkKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Ci17XAotICB7IFwiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMCB9LCIKK3sge1wiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMH0sIgorCisJICBpZiB0ZXN0IC1zICIkbmxpc3QiSTsgdGhlbgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICB7XCJASU5JVEBcIiwgKHZvaWQgKikgJmx0X3N5bWluaXR9LCIKKwkgIGZpCiAKIAkgIGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgogCSAgbm8pCkBAIC0zNDc4LDkgKzQ3MTQsNyBAQAogCSAgKi0qLWhwdXgqKQogCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OwogCSAgKikKLQkgICAgaWYgdGVzdCAiWCRteV9waWNfcCIgIT0gWG5vOyB0aGVuCi0JICAgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgotCSAgICBmaQorCSAgICAkbXlfcGljX3AgJiYgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgogCSAgICA7OwogCSAgZXNhYwogCSAgOzsKQEAgLTM0OTcsMTAgKzQ3MzEsMTAgQEAKIAlmdW5jX3Nob3dfZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDJHN5bXRhYl9jZmxhZ3MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSAiJG15X2Rsc3ltcyIpJyAnZXhpdCAkPycKIAogCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KLQlmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIicKKwlmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIiAiJHtubGlzdH1JIicKIAogCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCi0Jc3ltZmlsZW9iaj0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dCIKKwlzeW1maWxlb2JqPSRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQKIAljYXNlICRob3N0IGluCiAJKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCiAJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCkBAIC0zNTE4LDcgKzQ3NTIsNyBAQAogCWVzYWMKIAk7OwogICAgICAgKikKLQlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgXGAkbXlfZGxzeW1zJyIKKwlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgJyRteV9kbHN5bXMnIgogCTs7CiAgICAgICBlc2FjCiAgICAgZWxzZQpAQCAtMzUzMiw2ICs0NzY2LDMyIEBACiAgICAgZmkKIH0KIAorIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKK30KKworIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCisjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKyMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCitmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKK30KKwogIyBmdW5jX3dpbjMyX2xpYmlkIGFyZwogIyByZXR1cm4gdGhlIGxpYnJhcnkgdHlwZSBvZiBmaWxlICdhcmcnCiAjCkBAIC0zNTQxLDggKzQ4MDEsOSBAQAogIyBEZXNwaXRlIHRoZSBuYW1lLCBhbHNvIGRlYWwgd2l0aCA2NCBiaXQgYmluYXJpZXMuCiBmdW5jX3dpbjMyX2xpYmlkICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKKyAgJGRlYnVnX2NtZAorCisgIHdpbjMyX2xpYmlkX3R5cGU9dW5rbm93bgogICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAogICBjYXNlICR3aW4zMl9maWxlcmVzIGluCiAgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydApAQCAtMzU1MiwxNiArNDgxMywyOSBAQAogICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgogICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKICAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKLQkkU0VEIC1uIC1lICcKKyAgICAgIGNhc2UgJG5tX2ludGVyZmFjZSBpbgorICAgICAgIk1TIGR1bXBiaW4iKQorCWlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIHx8CisJICAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiCisJdGhlbgorCSAgd2luMzJfbm1yZXM9aW1wb3J0CisJZWxzZQorCSAgd2luMzJfbm1yZXM9CisJZmkKKwk7OworICAgICAgKikKKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKKwkgICRTRUQgLW4gLWUgJwogCSAgICAxLDEwMHsKIAkJLyBJIC97Ci0JCSAgICBzLC4qLGltcG9ydCwKKwkJICAgIHN8Lip8aW1wb3J0fAogCQkgICAgcAogCQkgICAgcQogCQl9CiAJICAgIH0nYAorCTs7CisgICAgICBlc2FjCiAgICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgogICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7OwogICAgICAgKikgICAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIHN0YXRpYyI7OwpAQCAtMzU5Myw3ICs0ODY3LDggQEAKICMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CiBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKIH0KIApAQCAtMzYxMCw3ICs0ODg1LDggQEAKICMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgogZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKICAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CiAgICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzovewpAQCAtMzY0Niw4ICs0OTIyLDggQEAKICAgICAgIC8uL3AnIHwKICAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKICAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQotICAgICMgYXJjaGl2ZSB3aGljaCBwb3NzZXNzIHRoYXQgc2VjdGlvbi4gSGV1cmlzdGljOiBlbGltaW5hdGUKLSAgICAjIGFsbCB0aG9zZSB3aGljaCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCisgICAgIyBhcmNoaXZlIHRoYXQgcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCisgICAgIyBhbGwgdGhvc2UgdGhhdCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCiAgICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCiAgICAgIyBjaGFyYWN0ZXIuKSBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgYXJjaGl2ZXMgd2l0aCBsZXNzIHRoYW4KICAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQpAQCAtMzY1OCwzMCArNDkzNCw2IEBACiAgICAgJFNFRCAtZSAnL15cLi9kOy9eLlwuL2Q7cScKIH0KIAotIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRwotIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCi0jIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucwotIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgotZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQotewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCi0gIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCi19Ci0KLSMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRwotIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCi0jIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucwotIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgotZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEdSRVAgJ19OVUxMX0lNUE9SVF9ERVNDUklQVE9SJ2AKLSAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgotfQotCiAjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKICMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKICMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCkBAIC0zNjk1LDE2ICs0OTQ3LDE3IEBACiAjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAogZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiIDsgdGhlbgorICAkZGVidWdfY21kCisKKyAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiOyB0aGVuCiAgICAgIyBiaW51dGlscyBpbXBvcnQgbGlicmFyeQogICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCi0gIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgOyB0aGVuCisgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSI7IHRoZW4KICAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQogICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCiAgIGVsc2UKICAgICAjIHVua25vd24KLSAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0iIgorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PQogICBmaQogfQogCkBAIC0zNzEyLDEwICs0OTY1LDExIEBACiAjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZwotICAgIGZfZXhfYW5fYXJfZGlyPSIkMSI7IHNoaWZ0Ci0gICAgZl9leF9hbl9hcl9vbGRsaWI9IiQxIgotICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgJGRlYnVnX2NtZAorCisgICAgZl9leF9hbl9hcl9kaXI9JDE7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9JDEKKyAgICBpZiB0ZXN0IHllcyA9ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIjsgdGhlbgogICAgICAgbG9ja2ZpbGU9JGZfZXhfYW5fYXJfb2xkbGliLmxvY2sKICAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KIAlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgpAQCAtMzcyNCw3ICs0OTc4LDcgQEAKICAgICBmaQogICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiIFwKIAkJICAgJ3N0YXQ9JD87IHJtIC1mICIkbG9ja2ZpbGUiOyBleGl0ICRzdGF0JwotICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiI7IHRoZW4KICAgICAgICRvcHRfZHJ5X3J1biB8fCBybSAtZiAiJGxvY2tmaWxlIgogICAgIGZpCiAgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KQEAgLTM3MzgsMjIgKzQ5OTIsMjMgQEAKICMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCiBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKIHsKLSAgICAkb3B0X2RlYnVnCi0gICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisgICAgJGRlYnVnX2NtZAorCisgICAgbXlfZ2VudG9wPSQxOyBzaGlmdAogICAgIG15X29sZGxpYnM9JHsxKyIkQCJ9Ci0gICAgbXlfb2xkb2Jqcz0iIgotICAgIG15X3hsaWI9IiIKLSAgICBteV94YWJzPSIiCi0gICAgbXlfeGRpcj0iIgorICAgIG15X29sZG9ianM9CisgICAgbXlfeGxpYj0KKyAgICBteV94YWJzPQorICAgIG15X3hkaXI9CiAKICAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KICAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KICAgICAgIGNhc2UgJG15X3hsaWIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OworCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0kbXlfeGxpYiA7OwogCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OwogICAgICAgZXNhYwogICAgICAgZnVuY19iYXNlbmFtZSAiJG15X3hsaWIiCi0gICAgICBteV94bGliPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICBteV94bGliPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogICAgICAgbXlfeGxpYl91PSRteV94bGliCiAgICAgICB3aGlsZSA6OyBkbwogICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCkBAIC0zNzY1LDcgKzUwMjAsNyBAQAogCWVzYWMKICAgICAgIGRvbmUKICAgICAgIGV4dHJhY3RlZF9hcmNoaXZlcz0iJGV4dHJhY3RlZF9hcmNoaXZlcyAkbXlfeGxpYl91IgotICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYl91IgorICAgICAgbXlfeGRpcj0kbXlfZ2VudG9wLyRteV94bGliX3UKIAogICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKIApAQCAtMzc3OCwxOSArNTAzMywyMCBAQAogCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPwogCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKIAkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKLQkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YGJhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiYAorCSAgZnVuY19iYXNlbmFtZSAiJGRhcndpbl9hcmNoaXZlIgorCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAkgIGRhcndpbl9hcmNoZXM9YCRMSVBPIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEdSRVAgQXJjaGl0ZWN0dXJlcyAyPi9kZXYvbnVsbCB8fCB0cnVlYAogCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuCiAJICAgIGRhcndpbl9hcmNoZXM9YCRFQ0hPICIkZGFyd2luX2FyY2hlcyIgfCAkU0VEIC1lICdzLy4qYXJlOi8vJ2AKIAkgICAgZGFyd2luX2FyY2g9CiAJICAgIGZ1bmNfdmVyYm9zZSAiJGRhcndpbl9iYXNlX2FyY2hpdmUgaGFzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgJGRhcndpbl9hcmNoZXMiCi0JICAgIGZvciBkYXJ3aW5fYXJjaCBpbiAgJGRhcndpbl9hcmNoZXMgOyBkbwotCSAgICAgIGZ1bmNfbWtkaXJfcCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKLQkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IiAiJHtkYXJ3aW5fYXJjaGl2ZX0iCi0JICAgICAgY2QgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCi0JICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlczsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaCIKKwkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoLyRkYXJ3aW5fYmFzZV9hcmNoaXZlIiAiJGRhcndpbl9hcmNoaXZlIgorCSAgICAgIGNkICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2giCisJICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJGRhcndpbl9iYXNlX2FyY2hpdmUiCiAJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgotCSAgICAgICRSTSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICAgICRSTSAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoLyRkYXJ3aW5fYmFzZV9hcmNoaXZlIgogCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKICAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQogCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkYmFzZW5hbWUiIHwgc29ydCAtdWAKQEAgLTM4MTUsNyArNTA3MSw3IEBACiAgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKICAgICBkb25lCiAKLSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSRteV9vbGRvYmpzCiB9CiAKIApAQCAtMzgzMCw3ICs1MDg2LDcgQEAKICMKICMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgogIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKLSMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIHN0b3JlZCBpcworIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgaXQgaXMgc3RvcmVkIGlzCiAjIHRoZSAkb2JqZGlyIGRpcmVjdG9yeS4gIFRoaXMgaXMgYSBjeWd3aW4vbWluZ3ctc3BlY2lmaWMKICMgYmVoYXZpb3IuCiBmdW5jX2VtaXRfd3JhcHBlciAoKQpAQCAtMzg0MSw3ICs1MDk3LDcgQEAKICMhICRTSEVMTAogCiAjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKLSMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KICMKICMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCiAjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KQEAgLTM4OTgsOSArNTE1NCw5IEBACiAKICMgVmVyeSBiYXNpYyBvcHRpb24gcGFyc2luZy4gVGhlc2Ugb3B0aW9ucyBhcmUgKGEpIHNwZWNpZmljIHRvCiAjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKLSMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB0aGF0IGlzIHVzZWQgb25seSBvbgogIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKLSMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgdGhhdCBtYXRjaAogIyB0aGlzIHBhdHRlcm4pLgogIwogIyBUaGVyZSBhcmUgb25seSB0d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVidWcgYW5kCkBAIC0zOTMzLDcgKzUxODksNyBAQAogCiAgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KLSAgICBlY2hvIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlwiIDE+JjIKKyAgICBlY2hvIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OXCIgMT4mMgogICBmaQogfQogCkBAIC0zOTQ0LDcgKzUyMDAsNyBAQAogICBsdF9kdW1wX2FyZ3NfTj0xOwogICBmb3IgbHRfYXJnCiAgIGRvCi0gICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgorICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKICAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAogICBkb25lCiB9CkBAIC0zOTU4LDcgKzUyMTQsNyBAQAogICAqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQogICAgICRFQ0hPICJcCiAgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgotICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgogICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKICAgICAgIGZpCiAgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KQEAgLTM5NjgsNyArNTIyNCw3IEBACiAgICopCiAgICAgJEVDSE8gIlwKICAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCi0gICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCisgICAgICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCiAgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgogICAgICAgZmkKICAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQpAQCAtNDA0MywxMyArNTI5OSwxMyBAQAogICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgogIgogCi0JaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkZmFzdF9pbnN0YWxsIjsgdGhlbgogCSAgJEVDSE8gIlwKICAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAogICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgogCiAgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fAotICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAkU0VEIDFxXGA7IFxcCiAgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KIAogICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCkBAIC00MTAxLDcgKzUzNTcsNyBAQAogCWZpCiAKIAkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KLQlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgogCSAgJEVDSE8gIlwKICAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgogICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKQEAgLTQxMjEsNyArNTM3Nyw3IEBACiAgICAgZmkKICAgZWxzZQogICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KLSAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiBcXFxgXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCisgICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogJ1wkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgogICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgogICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCiAgICAgZXhpdCAxCkBAIC00MTQwLDcgKzUzOTYsNyBAQAogCWNhdCA8PEVPRgogCiAvKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCi0gICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisgICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KIAogICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCiAgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCkBAIC00MTc1LDQ3ICs1NDMxLDQ1IEBACiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogCisjZGVmaW5lIFNUUkVRKHMxLCBzMikgKHN0cmNtcCAoKHMxKSwgKHMyKSkgPT0gMCkKKwogLyogZGVjbGFyYXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAqLwotI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisjaWYgZGVmaW5lZCBfX01JTkdXMzJfXwogIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KIGludCBfcHV0ZW52IChjb25zdCBjaGFyICopOwogIyBlbmRpZgotI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorI2VsaWYgZGVmaW5lZCBfX0NZR1dJTl9fCiAjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXwogY2hhciAqcmVhbHBhdGggKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIGludCBwdXRlbnYgKGNoYXIgKik7CiBpbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKICMgZW5kaWYKLS8qICNlbGlmIGRlZmluZWQgKG90aGVyIHBsYXRmb3JtcykgLi4uICovCisvKiAjZWxpZiBkZWZpbmVkIG90aGVyX3BsYXRmb3JtIHx8IGRlZmluZWQgLi4uICovCiAjZW5kaWYKIAogLyogcG9ydGFiaWxpdHkgZGVmaW5lcywgZXhjbHVkaW5nIHBhdGggaGFuZGxpbmcgbWFjcm9zICovCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNpZiBkZWZpbmVkIF9NU0NfVkVSCiAjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCiAjIGRlZmluZSBzdGF0ICAgIF9zdGF0CiAjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAogIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCiAjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKICMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKLSMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECi0jICBkZWZpbmUgX0lOVFBUUl9UX0RFRklORUQKLSMgIGRlZmluZSBpbnRwdHJfdCBpbnQKLSMgZW5kaWYKLSNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCisjZWxpZiBkZWZpbmVkIF9fTUlOR1czMl9fCiAjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCiAjIGRlZmluZSBzdGF0ICAgIF9zdGF0CiAjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAogIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCiAjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKLSNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyNlbGlmIGRlZmluZWQgX19DWUdXSU5fXwogIyBkZWZpbmUgSEFWRV9TRVRFTlYKICMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKLS8qICNlbGlmIGRlZmluZWQgKG90aGVyIHBsYXRmb3JtcykgLi4uICovCisvKiAjZWxpZiBkZWZpbmVkIG90aGVyIHBsYXRmb3JtcyAuLi4gKi8KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQQVRIX01BWCkKKyNpZiBkZWZpbmVkIFBBVEhfTUFYCiAjIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCi0jZWxpZiBkZWZpbmVkKE1BWFBBVEhMRU4pCisjZWxpZiBkZWZpbmVkIE1BWFBBVEhMRU4KICMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgogI2Vsc2UKICMgZGVmaW5lIExUX1BBVEhNQVggMTAyNApAQCAtNDIzNCw4ICs1NDg4LDggQEAKICMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChfV0lOMzIpIHx8IGRlZmluZWQgKF9fTVNET1NfXykgfHwgZGVmaW5lZCAoX19ESkdQUF9fKSB8fCBcCi0gIGRlZmluZWQgKF9fT1MyX18pCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX01TRE9TX18gfHwgZGVmaW5lZCBfX0RKR1BQX18gfHwgXAorICBkZWZpbmVkIF9fT1MyX18KICMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCiAjIGRlZmluZSBGT1BFTl9XQiAid2IiCiAjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKQEAgLTQyNjgsMTAgKzU1MjIsMTAgQEAKIAogI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQogI2RlZmluZSBYRlJFRShzdGFsZSkgZG8geyBcCi0gIGlmIChzdGFsZSkgeyBmcmVlICgodm9pZCAqKSBzdGFsZSk7IHN0YWxlID0gMDsgfSBcCisgIGlmIChzdGFsZSkgeyBmcmVlIChzdGFsZSk7IHN0YWxlID0gMDsgfSBcCiB9IHdoaWxlICgwKQogCi0jaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCisjaWYgZGVmaW5lZCBMVF9ERUJVR1dSQVBQRVIKIHN0YXRpYyBpbnQgbHRfZGVidWcgPSAxOwogI2Vsc2UKIHN0YXRpYyBpbnQgbHRfZGVidWcgPSAwOwpAQCAtNDMwNCw3ICs1NTU4LDcgQEAKIGNvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQVJOQU1FID0gIiRzaGxpYnBhdGhfdmFyIjsKIEVPRgogCi0JICAgIGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgogICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJHRlbXBfcnBhdGgiCiAJICAgICAgY2F0IDw8RU9GCiBjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKQEAgLTQzMjgsNyArNTU4Miw3IEBACiBFT0YKIAkgICAgZmkKIAotCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkZmFzdF9pbnN0YWxsIjsgdGhlbgogCSAgICAgIGNhdCA8PEVPRgogY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KIEVPRgpAQCAtNDM1NywxMiArNTYxMSwxMiBAQAogICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKICAgY2hhciAqdGFyZ2V0X25hbWU7CiAgIGNoYXIgKmx0X2FyZ3ZfemVybzsKLSAgaW50cHRyX3QgcnZhbCA9IDEyNzsKKyAgaW50IHJ2YWwgPSAxMjc7CiAKICAgaW50IGk7CiAKICAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7Ci0gIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgKHNpemVfdCkgYXJnYyArIDEpOwogCiAgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0CiAgICAqIGFsc28sIGNvcHkgYWxsIG5vbiBjd3JhcHBlciBvcHRpb25zIHRvIG5ld2FyZ3osIGV4Y2VwdApAQCAtNDM3MSwxMCArNTYyNSwxMCBAQAogICBuZXdhcmdjPTA7CiAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCiAgICAgewotICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpID09IDApCisgICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSkKIAl7CiBFT0YKLQkgICAgY2FzZSAiJGhvc3QiIGluCisJICAgIGNhc2UgJGhvc3QgaW4KIAkgICAgICAqbWluZ3cqIHwgKmN5Z3dpbiogKQogCQkjIG1ha2Ugc3Rkb3V0IHVzZSAidW5peCIgbGluZSBlbmRpbmdzCiAJCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCkBAIC00Mzg1LDEyICs1NjM5LDEyIEBACiAJICBsdF9kdW1wX3NjcmlwdCAoc3Rkb3V0KTsKIAkgIHJldHVybiAwOwogCX0KLSAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGRlYnVnX29wdCkgPT0gMCkKKyAgICAgIGlmIChTVFJFUSAoYXJndltpXSwgZGVidWdfb3B0KSkKIAl7CiAgICAgICAgICAgbHRfZGVidWcgPSAxOwogICAgICAgICAgIGNvbnRpbnVlOwogCX0KLSAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSA9PSAwKQorICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCiAgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZApAQCAtNDQxMyw3ICs1NjY3LDcgQEAKIEVPRgogCSAgICBjYXQgPDxFT0YKICAgLyogVGhlIEdOVSBiYW5uZXIgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWVycm9yIGRlYnVnIG1lc3NhZ2UgKi8KLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cbiIpOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OXG4iKTsKIEVPRgogCSAgICBjYXQgPDwiRU9GIgogICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKQEAgLTQ1MjQsNyArNTc3OCw3IEBACiAJCWNhdCA8PCJFT0YiCiAgIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCiAgIG5ld2FyZ3ogPSBwcmVwYXJlX3NwYXduIChuZXdhcmd6KTsKLSAgcnZhbCA9IF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKKyAgcnZhbCA9IChpbnQpIF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKICAgaWYgKHJ2YWwgPT0gLTEpCiAgICAgewogICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KQEAgLTQ1NjksNyArNTgyMyw3IEBACiB7CiAgIGNvbnN0IGNoYXIgKmJhc2U7CiAKLSNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCiAgIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KICAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKICAgICBuYW1lICs9IDI7CkBAIC00NjI4LDcgKzU4ODIsNyBAQAogICBjb25zdCBjaGFyICpwX25leHQ7CiAgIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLwogICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07Ci0gIGludCB0bXBfbGVuOworICBzaXplX3QgdG1wX2xlbjsKICAgY2hhciAqY29uY2F0X25hbWU7CiAKICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihmaW5kX2V4ZWN1dGFibGUpOiAlc1xuIiwKQEAgLTQ2MzgsNyArNTg5Miw3IEBACiAgICAgcmV0dXJuIE5VTEw7CiAKICAgLyogQWJzb2x1dGUgcGF0aD8gKi8KLSNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCiAgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCiAgICAgewogICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKQEAgLTQ2NTYsNyArNTkxMCw3IEBACiAJICAgIHJldHVybiBjb25jYXRfbmFtZTsKIAkgIFhGUkVFIChjb25jYXRfbmFtZSk7CiAJfQotI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorI2lmIGRlZmluZWQgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KICAgICB9CiAjZW5kaWYKIApAQCAtNDY3OSw3ICs1OTMzLDcgQEAKIAkgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQogCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKIAkJICBicmVhazsKLQkgICAgICBwX2xlbiA9IHEgLSBwOworCSAgICAgIHBfbGVuID0gKHNpemVfdCkgKHEgLSBwKTsKIAkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7CiAJICAgICAgaWYgKHBfbGVuID09IDApCiAJCXsKQEAgLTQ3OTgsNyArNjA1Miw3IEBACiAgIGlmIChwYXRsZW4gPD0gbGVuKQogICAgIHsKICAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47Ci0gICAgICBpZiAoc3RyY21wIChzdHIsIHBhdCkgPT0gMCkKKyAgICAgIGlmIChTVFJFUSAoc3RyLCBwYXQpKQogCSpzdHIgPSAnXDAnOwogICAgIH0KICAgcmV0dXJuIHN0cjsKQEAgLTQ4NjMsNyArNjExNyw3IEBACiAgICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOwogICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKICNlbHNlCi0gICAgaW50IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKICAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOwogICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOwogICAgIGlmIChwdXRlbnYgKHN0cikgIT0gRVhJVF9TVUNDRVNTKQpAQCAtNDg4MCw4ICs2MTM0LDggQEAKICAgY2hhciAqbmV3X3ZhbHVlOwogICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKICAgICB7Ci0gICAgICBpbnQgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOwotICAgICAgaW50IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisgICAgICBzaXplX3Qgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOworICAgICAgc2l6ZV90IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CiAgICAgICBuZXdfdmFsdWUgPSBYTUFMTE9DIChjaGFyLCBhZGRfbGVuICsgb3JpZ192YWx1ZV9sZW4gKyAxKTsKICAgICAgIGlmICh0b19lbmQpCiAgICAgICAgIHsKQEAgLTQ5MTIsMTAgKzYxNjYsMTAgQEAKICAgICB7CiAgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CiAgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLwotICAgICAgaW50IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKLSAgICAgIHdoaWxlICgoKGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKSkgPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCisgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOworICAgICAgd2hpbGUgKChsZW4gPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCiAgICAgICAgIHsKLSAgICAgICAgICBuZXdfdmFsdWVbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgICBuZXdfdmFsdWVbLS1sZW5dID0gJ1wwJzsKICAgICAgICAgfQogICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOwogICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CkBAIC01MDgyLDcgKzYzMzYsOCBAQAogIyBUcnVlIGlmIEFSRyBpcyBhbiBpbXBvcnQgbGliLCBhcyBpbmRpY2F0ZWQgYnkgJGZpbGVfbWFnaWNfY21kCiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICBjYXNlIGBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIHwgJFNFRCAtZSAxMHFgIGluCiAgICAgKmltcG9ydCopIDogOzsKICAgICAqKSBmYWxzZSA7OwpAQCAtNTA5MiwxNyArNjM0NywxOCBAQAogIyBmdW5jX21vZGVfbGluayBhcmcuLi4KIGZ1bmNfbW9kZV9saW5rICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgIGNhc2UgJGhvc3QgaW4KICAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQogICAgICAgIyBJdCBpcyBpbXBvc3NpYmxlIHRvIGxpbmsgYSBkbGwgd2l0aG91dCB0aGlzIHNldHRpbmcsIGFuZAogICAgICAgIyB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIG1ha2VmaWxlIG1haW50YWluZXIgdG8gZmlndXJlIG91dAotICAgICAgIyB3aGljaCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQorICAgICAgIyB3aGF0IHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCiAgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KICAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCiAKICAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZwotICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKKyAgICAgICMgdG8gbWFrZSBhIGRsbCB0aGF0IGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKICAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5CiAgICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KICAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCkBAIC01MTQ5LDcgKzY0MDUsNyBAQAogICAgIG5vbl9waWNfb2JqZWN0cz0KICAgICBwcmVjaW91c19maWxlc19yZWdleD0KICAgICBwcmVmZXJfc3RhdGljX2xpYnM9bm8KLSAgICBwcmVsb2FkPW5vCisgICAgcHJlbG9hZD1mYWxzZQogICAgIHByZXY9CiAgICAgcHJldmFyZz0KICAgICByZWxlYXNlPQpAQCAtNTE2MSw3ICs2NDE3LDcgQEAKICAgICB2aW5mbz0KICAgICB2aW5mb19udW1iZXI9bm8KICAgICB3ZWFrX2xpYnM9Ci0gICAgc2luZ2xlX21vZHVsZT0iJHt3bH0tc2luZ2xlX21vZHVsZSIKKyAgICBzaW5nbGVfbW9kdWxlPSR3bC1zaW5nbGVfbW9kdWxlCiAgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQogCiAgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgpAQCAtNTE2OSwxNSArNjQyNSwxNSBAQAogICAgIGRvCiAgICAgICBjYXNlICRhcmcgaW4KICAgICAgIC1zaGFyZWQpCi0JdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKLQkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCXRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCisJICAmJiBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbm5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgogCWJ1aWxkX29sZF9saWJzPW5vCiAJYnJlYWsKIAk7OwogICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCiAJY2FzZSAkYXJnIGluCiAJLWFsbC1zdGF0aWMpCi0JICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgogCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgogCSAgZmkKIAkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgpAQCAtNTIxMCw3ICs2NDY2LDcgQEAKIAogICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgogICAgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KLSAgICAgIGFyZz0iJDEiCisgICAgICBhcmc9JDEKICAgICAgIHNoaWZ0CiAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgogICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKQEAgLTUyMjcsMjEgKzY0ODMsMjEgQEAKIAogCWNhc2UgJHByZXYgaW4KIAliaW5kaXIpCi0JICBiaW5kaXI9IiRhcmciCisJICBiaW5kaXI9JGFyZwogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwogCWRsZmlsZXN8ZGxwcmVmaWxlcykKLQkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IG5vOyB0aGVuCisJICAkcHJlbG9hZCB8fCB7CiAJICAgICMgQWRkIHRoZSBzeW1ib2wgb2JqZWN0IGludG8gdGhlIGxpbmtpbmcgY29tbWFuZHMuCiAJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBTWU1GSUxFQCIKIAkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBTWU1GSUxFQCIKLQkgICAgcHJlbG9hZD15ZXMKLQkgIGZpCisJICAgIHByZWxvYWQ9OgorCSAgfQogCSAgY2FzZSAkYXJnIGluCiAJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgogCSAgZm9yY2UpCi0JICAgIGlmIHRlc3QgIiRkbHNlbGYiID0gbm87IHRoZW4KKwkgICAgaWYgdGVzdCBubyA9ICIkZGxzZWxmIjsgdGhlbgogCSAgICAgIGRsc2VsZj1uZWVkbGVzcwogCSAgICAgIGV4cG9ydF9keW5hbWljPXllcwogCSAgICBmaQpAQCAtNTI0OSw5ICs2NTA1LDkgQEAKIAkgICAgY29udGludWUKIAkgICAgOzsKIAkgIHNlbGYpCi0JICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgogCSAgICAgIGRsc2VsZj15ZXMKLQkgICAgZWxpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzICYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgIT0geWVzOyB0aGVuCisJICAgIGVsaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IiAmJiB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zZWxmIjsgdGhlbgogCSAgICAgIGRsc2VsZj15ZXMKIAkgICAgZWxzZQogCSAgICAgIGRsc2VsZj1uZWVkbGVzcwpAQCAtNTI2MSw3ICs2NTE3LDcgQEAKIAkgICAgY29udGludWUKIAkgICAgOzsKIAkgICopCi0JICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgogCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkYXJnIgogCSAgICBlbHNlCiAJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCkBAIC01MjcyLDE0ICs2NTI4LDE0IEBACiAJICBlc2FjCiAJICA7OwogCWV4cHN5bXMpCi0JICBleHBvcnRfc3ltYm9scz0iJGFyZyIKKwkgIGV4cG9ydF9zeW1ib2xzPSRhcmcKIAkgIHRlc3QgLWYgIiRhcmciIFwKLQkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgJyRhcmcnIGRvZXMgbm90IGV4aXN0IgogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwogCWV4cHN5bXNfcmVnZXgpCi0JICBleHBvcnRfc3ltYm9sc19yZWdleD0iJGFyZyIKKwkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSRhcmcKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKQEAgLTUyOTcsNyArNjU1MywxMyBAQAogCSAgY29udGludWUKIAkgIDs7CiAJaW5zdF9wcmVmaXgpCi0JICBpbnN0X3ByZWZpeF9kaXI9IiRhcmciCisJICBpbnN0X3ByZWZpeF9kaXI9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW1sbHZtKQorCSAgIyBDbGFuZyBkb2VzIG5vdCB1c2UgTExWTSB0byBsaW5rLCBzbyB3ZSBjYW4gc2ltcGx5IGRpc2NhcmQgYW55CisJICAjICctbWxsdm0gJGFyZycgb3B0aW9ucyB3aGVuIGRvaW5nIHRoZSBsaW5rIHN0ZXAuCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CkBAIC01MzIxLDIxICs2NTgzLDIxIEBACiAKIAkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CiAJCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKLQkJICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgotCQkgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCQkgICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiICYmCisJCSAgIHRlc3Qgbm9uZSA9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yICckYXJnJyIKIAkJZmkKIAogCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgogCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgotCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCi0JCWlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCWlmIHRlc3Qgbm9uZSAhPSAiJHBpY19vYmplY3QiOyB0aGVuCiAJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCQkgIHBpY19vYmplY3Q9JHhkaXIkcGljX29iamVjdAogCi0JCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgotCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQkgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkJICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgeWVzID0gIiRkbG9wZW5fc3VwcG9ydCI7IHRoZW4KIAkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgogCQkgICAgICBwcmV2PQogCQkgICAgICBjb250aW51ZQpAQCAtNTM0Niw3ICs2NjA4LDcgQEAKIAkJICBmaQogCiAJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKLQkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJCSAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgogCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgogCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgogCQkgICAgcHJldj0KQEAgLTUzNTQsMjMgKzY2MTYsMjMgQEAKIAogCQkgICMgQSBQSUMgb2JqZWN0LgogCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKLQkJICBhcmc9IiRwaWNfb2JqZWN0IgorCQkgIGFyZz0kcGljX29iamVjdAogCQlmaQogCiAJCSMgTm9uLVBJQyBvYmplY3QuCi0JCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQlpZiB0ZXN0IG5vbmUgIT0gIiRub25fcGljX29iamVjdCI7IHRoZW4KIAkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgotCQkgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKwkJICBub25fcGljX29iamVjdD0keGRpciRub25fcGljX29iamVjdAogCiAJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CiAJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgotCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgotCQkgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCI7IHRoZW4KKwkJICAgIGFyZz0kbm9uX3BpY19vYmplY3QKIAkJICBmaQogCQllbHNlCiAJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgogCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KLQkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJCSAgbm9uX3BpY19vYmplY3Q9JHBpY19vYmplY3QKIAkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCiAJCWZpCiAJICAgICAgZWxzZQpAQCAtNTM3OCw3ICs2NjQwLDcgQEAKIAkJaWYgJG9wdF9kcnlfcnVuOyB0aGVuCiAJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KIAkJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgotCQkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQkgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAogCQkgIGZ1bmNfbG8ybyAiJGFyZyIKIAkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdApAQCAtNTM4NiwyNCArNjY0OCwyNCBAQAogCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKIAkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCiAJICAgICAgICBlbHNlCi0JCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCiAJCWZpCiAJICAgICAgZmkKIAkgICAgZG9uZQogCSAgZWxzZQotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlICckYXJnJyBkb2VzIG5vdCBleGlzdCIKIAkgIGZpCiAJICBhcmc9JHNhdmVfYXJnCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CiAJcHJlY2lvdXNfcmVnZXgpCi0JICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKKwkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSRhcmcKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKIAlyZWxlYXNlKQotCSAgcmVsZWFzZT0iLSRhcmciCisJICByZWxlYXNlPS0kYXJnCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CkBAIC01NDE1LDcgKzY2NzcsNyBAQAogCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKIAkgICAgOzsKIAkgIGVzYWMKLQkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisJICBpZiB0ZXN0IHJwYXRoID0gIiRwcmV2IjsgdGhlbgogCSAgICBjYXNlICIkcnBhdGggIiBpbgogCSAgICAqIiAkYXJnICIqKSA7OwogCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7CkBAIC01NDMwLDcgKzY2OTIsNyBAQAogCSAgY29udGludWUKIAkgIDs7CiAJc2hyZXh0KQotCSAgc2hyZXh0X2NtZHM9IiRhcmciCisJICBzaHJleHRfY21kcz0kYXJnCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CkBAIC01NDcwLDcgKzY3MzIsNyBAQAogCWVzYWMKICAgICAgIGZpICMgdGVzdCAtbiAiJHByZXYiCiAKLSAgICAgIHByZXZhcmc9IiRhcmciCisgICAgICBwcmV2YXJnPSRhcmcKIAogICAgICAgY2FzZSAkYXJnIGluCiAgICAgICAtYWxsLXN0YXRpYykKQEAgLTU0ODQsNyArNjc0Niw3IEBACiAKICAgICAgIC1hbGxvdy11bmRlZmluZWQpCiAJIyBGSVhNRTogcmVtb3ZlIHRoaXMgZmxhZyBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgotCWZ1bmNfZmF0YWxfZXJyb3IgIlxgLWFsbG93LXVuZGVmaW5lZCcgbXVzdCBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IgorCWZ1bmNfZmF0YWxfZXJyb3IgIictYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCiAJOzsKIAogICAgICAgLWF2b2lkLXZlcnNpb24pCkBAIC01NTE2LDcgKzY3NzgsNyBAQAogCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgogCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKIAlmaQotCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWV4cG9ydC1zeW1ib2xzIjsgdGhlbgorCWlmIHRlc3QgWC1leHBvcnQtc3ltYm9scyA9ICJYJGFyZyI7IHRoZW4KIAkgIHByZXY9ZXhwc3ltcwogCWVsc2UKIAkgIHByZXY9ZXhwc3ltc19yZWdleApAQCAtNTU1MCw5ICs2ODEyLDkgQEAKIAlmdW5jX3N0cmlwbmFtZSAiLUwiICcnICIkYXJnIgogCWlmIHRlc3QgLXogIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCiAJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuICctTCcgYW5kICckMSciCiAJICBlbHNlCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yICctTCcgb3B0aW9uIgogCSAgZmkKIAlmaQogCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgpAQCAtNTU2Myw4ICs2ODI1LDggQEAKIAkqKQogCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAogCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCi0JICBkaXI9IiRhYnNkaXIiCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRkaXInIgorCSAgZGlyPSRhYnNkaXIKIAkgIDs7CiAJZXNhYwogCWNhc2UgIiRkZXBsaWJzICIgaW4KQEAgLTU1OTksNyArNjg2MSw3IEBACiAJOzsKIAogICAgICAgLWwqKQotCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKwlpZiB0ZXN0IFgtbGMgPSAiWCRhcmciIHx8IHRlc3QgWC1sbSA9ICJYJGFyZyI7IHRoZW4KIAkgIGNhc2UgJGhvc3QgaW4KIAkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKIAkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKQEAgLTU2MDcsMTEgKzY4NjksMTEgQEAKIAkgICAgOzsKIAkgICotKi1vczIqKQogCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKIAkgICAgOzsKLQkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSogfCAqLSotYml0cmlnKikKIAkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCi0JICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCiAJICAgIDs7CiAJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCiAJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCkBAIC01NjIwLDE2ICs2ODgyLDE2IEBACiAJICAgIDs7CiAJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCiAJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQotCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQogCSAgICA7OwogCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQogCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCi0JICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCiAJICAgIDs7CiAJICBlc2FjCi0JZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorCWVsaWYgdGVzdCBYLWxjX3IgPSAiWCRhcmciOyB0aGVuCiAJIGNhc2UgJGhvc3QgaW4KLQkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqIHwgKi0qLWJpdHJpZyopCiAJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgogCSAgIGNvbnRpbnVlCiAJICAgOzsKQEAgLTU2MzksNiArNjkwMSwxMSBAQAogCWNvbnRpbnVlCiAJOzsKIAorICAgICAgLW1sbHZtKQorCXByZXY9bWxsdm0KKwljb250aW51ZQorCTs7CisKICAgICAgIC1tb2R1bGUpCiAJbW9kdWxlPXllcwogCWNvbnRpbnVlCkBAIC01NjY4LDcgKzY5MzUsNyBAQAogCTs7CiAKICAgICAgIC1tdWx0aV9tb2R1bGUpCi0Jc2luZ2xlX21vZHVsZT0iJHt3bH0tbXVsdGlfbW9kdWxlIgorCXNpbmdsZV9tb2R1bGU9JHdsLW11bHRpX21vZHVsZQogCWNvbnRpbnVlCiAJOzsKIApAQCAtNTY4Miw4ICs2OTQ5LDggQEAKIAkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qIHwgKi1jZWdjYyopCiAJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKIAkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgotCSAgZnVuY193YXJuaW5nICJcYC1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKLQkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgXGAtbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgorCSAgZnVuY193YXJuaW5nICInLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IgorCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyAnLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKIAkgIGZhc3RfaW5zdGFsbD1ubwogCSAgOzsKIAkqKSBub19pbnN0YWxsPXllcyA7OwpAQCAtNTc4OCwxNCArNzA1NSwxNCBAQAogCWZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKIAlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAlhcmc9Ci0Jc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJc2F2ZV9pZnM9JElGUzsgSUZTPSwKIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KLQkgIElGUz0iJHNhdmVfaWZzIgorCSAgSUZTPSRzYXZlX2lmcwogICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgogCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJZG9uZQotCUlGUz0iJHNhdmVfaWZzIgorCUlGUz0kc2F2ZV9pZnMKIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCiAJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAk7OwpAQCAtNTgwNCwxNSArNzA3MSwxNSBAQAogCWZ1bmNfc3RyaXBuYW1lICctV2wsJyAnJyAiJGFyZyIKIAlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAlhcmc9Ci0Jc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJc2F2ZV9pZnM9JElGUzsgSUZTPSwKIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KLQkgIElGUz0iJHNhdmVfaWZzIgorCSAgSUZTPSRzYXZlX2lmcwogICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgogCSAgZnVuY19hcHBlbmQgYXJnICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJZG9uZQotCUlGUz0iJHNhdmVfaWZzIgorCUlGUz0kc2F2ZV9pZnMKIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCiAJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAk7OwpAQCAtNTgzNSw3ICs3MTAyLDcgQEAKICAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKICAgICAgIC1tc2dfKikKIAlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKIAk7OwogCiAgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CkBAIC01ODUwLDEyICs3MTE3LDEzIEBACiAgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcwogICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCiAgICAgICAjIC0tc3lzcm9vdD0qICAgICAgICAgIGZvciBzeXNyb290IHN1cHBvcnQKLSAgICAgICMgLU8qLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCisgICAgICAjIC1PKiwgLWcqLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCisgICAgICAjIC1zdGRsaWI9KiAgICAgICAgICAgIHNlbGVjdCBjKysgc3RkIGxpYiB3aXRoIGNsYW5nCiAgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKICAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KnwtLXN5c3Jvb3Q9KnwgXAotICAgICAgLU8qfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2luKQorICAgICAgLU8qfC1nKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbnwtc3RkbGliPSopCiAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0JYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAogICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgogICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKICAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgpAQCAtNTg2NSw3ICs3MTMzLDcgQEAKICAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgogICAgICAgLSogfCArKikKICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CiAJOzsKIAogICAgICAgKi4kb2JqZXh0KQpAQCAtNTg4NiwyMSArNzE1NCwyMSBAQAogCiAJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKIAkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKLQkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKLQkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCSAgICAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCBub25lID0gIiRub25fcGljX29iamVjdCI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yICckYXJnJyIKIAkgIGZpCiAKIAkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCiAJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgotCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAKLQkgIGlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiIHx8IHsKIAkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkgICAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKwkgICAgcGljX29iamVjdD0keGRpciRwaWNfb2JqZWN0CiAKLQkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgotCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgorCSAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgeWVzID0gIiRkbG9wZW5fc3VwcG9ydCI7IHRoZW4KIAkJZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgogCQlwcmV2PQogCQljb250aW51ZQpAQCAtNTkxMSw3ICs3MTc5LDcgQEAKIAkgICAgZmkKIAogCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQotCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgIGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KIAkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCiAJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgogCSAgICAgIHByZXY9CkBAIC01OTE5LDIzICs3MTg3LDIzIEBACiAKIAkgICAgIyBBIFBJQyBvYmplY3QuCiAJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKLQkgICAgYXJnPSIkcGljX29iamVjdCIKLQkgIGZpCisJICAgIGFyZz0kcGljX29iamVjdAorCSAgfQogCiAJICAjIE5vbi1QSUMgb2JqZWN0LgotCSAgaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICBpZiB0ZXN0IG5vbmUgIT0gIiRub25fcGljX29iamVjdCI7IHRoZW4KIAkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkgICAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCSAgICBub25fcGljX29iamVjdD0keGRpciRub25fcGljX29iamVjdAogCiAJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAogCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgotCSAgICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IjsgdGhlbgorCSAgICAgIGFyZz0kbm9uX3BpY19vYmplY3QKIAkgICAgZmkKIAkgIGVsc2UKIAkgICAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgogCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCi0JICAgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkgICAgbm9uX3BpY19vYmplY3Q9JHBpY19vYmplY3QKIAkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgogCSAgZmkKIAllbHNlCkBAIC01OTQzLDcgKzcyMTEsNyBAQAogCSAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCiAJICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCiAJICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCSAgICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAKIAkgICAgZnVuY19sbzJvICIkYXJnIgogCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdApAQCAtNTk1MSw3ICs3MjE5LDcgQEAKIAkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgogCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCiAJICBlbHNlCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKIAkgIGZpCiAJZmkKIAk7OwpAQCAtNTk2NywxMSArNzIzNSwxMSBAQAogCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KIAogCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkYXJnIgotCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwlpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCiAJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KIAkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgcHJldj0KLQllbGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwllbGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KIAkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCiAJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgIHByZXY9CkBAIC01OTg2LDcgKzcyNTQsNyBAQAogCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAogCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCiAJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CiAJOzsKICAgICAgIGVzYWMgIyBhcmcKIApAQCAtNTk5OCw5ICs3MjY2LDkgQEAKICAgICBkb25lICMgYXJndW1lbnQgcGFyc2luZyBsb29wCiAKICAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAotICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgJyRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCiAKLSAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGV4cG9ydF9keW5hbWljIiAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgogICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCiAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKQEAgLTYwMDksMTIgKzcyNzcsMTIgQEAKICAgICBvbGRsaWJzPQogICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKICAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgotICAgIG91dHB1dG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLSAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgorICAgIG91dHB1dG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgbGlib2Jqc19zYXZlPSRsaWJvYmpzCiAKICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KICAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKLSAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIFx8IFwkU0VEIFwncy86LyAvZ1wnXGAKICAgICBlbHNlCiAgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KICAgICBmaQpAQCAtNjAyMiw3ICs3MjkwLDcgQEAKICAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCiAKICAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgotICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKyAgICBvdXRwdXRfb2JqZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpcgogICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCiAgICAgdG9vbF9vdXRwdXRfb2JqZGlyPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKICAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KQEAgLTYwNDUsNyArNzMxMyw3IEBACiAgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCiAgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCiAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KLSAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCiAJY2FzZSAiJGxpYnMgIiBpbgogCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKIAllc2FjCkBAIC02MDUzLDcgKzczMjEsNyBAQAogICAgICAgZnVuY19hcHBlbmQgbGlicyAiICRkZXBsaWIiCiAgICAgZG9uZQogCi0gICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KICAgICAgIGxpYnM9IiRwcmVkZXBzICRsaWJzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggJHBvc3RkZXBzIgogCiAgICAgICAjIENvbXB1dGUgbGlicmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSBpbiAkcHJlZGVwcwpAQCAtNjA4NSw3ICs3MzUzLDcgQEAKIAkgIGNhc2UgJGZpbGUgaW4KIAkgICoubGEpIDs7CiAJICAqKQotCSAgICBmdW5jX2ZhdGFsX2hlbHAgImxpYnJhcmllcyBjYW4gXGAtZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuICctZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIKIAkgICAgOzsKIAkgIGVzYWMKIAlkb25lCkBAIC02MDkzLDcgKzczNjEsNyBAQAogICAgIHByb2cpCiAJY29tcGlsZV9kZXBsaWJzPQogCWZpbmFsaXplX2RlcGxpYnM9Ci0JYWxsZGVwbGlicz1ubworCWFsbGRlcGxpYnM9ZmFsc2UKIAluZXdkbGZpbGVzPQogCW5ld2RscHJlZmlsZXM9CiAJcGFzc2VzPSJjb252IHNjYW4gZGxvcGVuIGRscHJlb3BlbiBsaW5rIgpAQCAtNjEwNSwyOSArNzM3MywyOSBAQAogICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCiAgICAgICAjIFRoZSBwcmVvcGVuIHBhc3MgaW4gbGliIG1vZGUgcmV2ZXJzZXMgJGRlcGxpYnM7IHB1dCBpdCBiYWNrIGhlcmUKICAgICAgICMgc28gdGhhdCAtTCBjb21lcyBiZWZvcmUgbGlicyB0aGF0IG5lZWQgaXQgZm9yIGluc3RhbmNlLi4uCi0gICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIjsgdGhlbgorICAgICAgaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCiAJIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCiAJIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5CiAgICAgICAgIHRtcF9kZXBsaWJzPQogCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCiAJICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCiAJZG9uZQotCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKwlkZXBsaWJzPSR0bXBfZGVwbGlicwogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKLQkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCi0JbGlicz0iJGRlcGxpYnMiCisgICAgICBpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKKwkgdGVzdCBwcm9nLHNjYW4gPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgorCWxpYnM9JGRlcGxpYnMKIAlkZXBsaWJzPQogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgICAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgogCWNhc2UgJHBhc3MgaW4KLQlkbG9wZW4pIGxpYnM9IiRkbGZpbGVzIiA7OwotCWRscHJlb3BlbikgbGlicz0iJGRscHJlZmlsZXMiIDs7CisJZGxvcGVuKSBsaWJzPSRkbGZpbGVzIDs7CisJZGxwcmVvcGVuKSBsaWJzPSRkbHByZWZpbGVzIDs7CiAJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CiAJZXNhYwogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgbGliLGRscHJlb3BlbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCiAJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicwogCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCiAJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCkBAIC02MTQ4LDI2ICs3NDE2LDI2IEBACiAJICAgIGVzYWMKIAkgIGRvbmUKIAlkb25lCi0JbGlicz0iJGRscHJlZmlsZXMiCisJbGlicz0kZGxwcmVmaWxlcwogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorICAgICAgaWYgdGVzdCBkbG9wZW4gPSAiJHBhc3MiOyB0aGVuCiAJIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJhcmllcwotCXNhdmVfZGVwbGlicz0iJGRlcGxpYnMiCisJc2F2ZV9kZXBsaWJzPSRkZXBsaWJzCiAJZGVwbGlicz0KICAgICAgIGZpCiAKICAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCiAJbGliPQotCWZvdW5kPW5vCisJZm91bmQ9ZmFsc2UKIAljYXNlICRkZXBsaWIgaW4KIAktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKICAgICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgogCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKIAkgIGVsc2UKIAkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCSAgICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCiAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCiAJCSAgICAqIiAkZGVwbGliICIqKSA7OwogCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKQEAgLTYxNzcsMTMgKzc0NDUsMTMgQEAKIAkgIGNvbnRpbnVlCiAJICA7OwogCS1sKikKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZzsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICBpZiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IHByb2cgIT0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICInLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCiAJICAgIGNvbnRpbnVlCiAJICBmaQogCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKIAkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgogCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCiAJICBlbHNlCiAJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCkBAIC02MTkxLDMxICs3NDU5LDIyIEBACiAJICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hkaXJzOyBkbwogCSAgICBmb3Igc2VhcmNoX2V4dCBpbiAubGEgJHN0ZF9zaHJleHQgLnNvIC5hOyBkbwogCSAgICAgICMgU2VhcmNoIHRoZSBsaWJ0b29sIGxpYnJhcnkKLQkgICAgICBsaWI9IiRzZWFyY2hkaXIvbGliJHtuYW1lfSR7c2VhcmNoX2V4dH0iCisJICAgICAgbGliPSRzZWFyY2hkaXIvbGliJG5hbWUkc2VhcmNoX2V4dAogCSAgICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCi0JCWlmIHRlc3QgIiRzZWFyY2hfZXh0IiA9ICIubGEiOyB0aGVuCi0JCSAgZm91bmQ9eWVzCisJCWlmIHRlc3QgLmxhID0gIiRzZWFyY2hfZXh0IjsgdGhlbgorCQkgIGZvdW5kPToKIAkJZWxzZQotCQkgIGZvdW5kPW5vCisJCSAgZm91bmQ9ZmFsc2UKIAkJZmkKIAkJYnJlYWsgMgogCSAgICAgIGZpCiAJICAgIGRvbmUKIAkgIGRvbmUKLQkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCi0JICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KLQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBlbHNlCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgICBmaQotCSAgICBjb250aW51ZQotCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQorCSAgaWYgJGZvdW5kOyB0aGVuCisJICAgICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CiAJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAogCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgotCSAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCiAJICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJICAgICAgKiIgJGRlcGxpYiAiKikKIAkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgpAQCAtNjIyMywxOSArNzQ4MiwxOSBAQAogCQkgIG9sZF9saWJyYXJ5PQogCQkgIGZ1bmNfc291cmNlICIkbGliIgogCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KLQkJICAgIGxsPSIkbCIKKwkJICAgIGxsPSRsCiAJCSAgZG9uZQotCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiIDsgdGhlbiAjIG9ubHkgc3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCi0JCSAgICBmb3VuZD1ubworCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPWZhbHNlCiAJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgotCQkgICAgbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQkgICAgbGFkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5Ci0JCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkJICAgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KIAkJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCiAJCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCiAJCSAgICBlbHNlCiAJCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJCSAgICAgIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCiAJCSAgICBmaQogCQkgICAgY29udGludWUKIAkJICBmaQpAQCAtNjI0NCwxNSArNzUwMywyNSBAQAogCSAgICAgICopIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQorCSAgZWxzZQorCSAgICAjIGRlcGxpYiBkb2Vzbid0IHNlZW0gdG8gYmUgYSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCiAJICBmaQogCSAgOzsgIyAtbAogCSoubHRmcmFtZXdvcmspCi0JICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KIAkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCiAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCiAJICBlbHNlCiAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KIAkJICAgICoiICRkZXBsaWIgIiopIDs7CiAJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OwpAQCAtNjI2NSwxOCArNzUzNCwxOCBAQAogCSAgY2FzZSAkbGlua21vZGUgaW4KIAkgIGxpYikKIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorCSAgICB0ZXN0IGNvbnYgPSAiJHBhc3MiICYmIGNvbnRpbnVlCiAJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgogCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgogCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKIAkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgICAgOzsKIAkgIHByb2cpCi0JICAgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgaWYgdGVzdCBjb252ID0gIiRwYXNzIjsgdGhlbgogCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJICAgICAgY29udGludWUKIAkgICAgZmkKLQkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgorCSAgICBpZiB0ZXN0IHNjYW4gPSAiJHBhc3MiOyB0aGVuCiAJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAkgICAgZWxzZQogCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgpAQCAtNjI4NywxMyArNzU1NiwxMyBAQAogCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgICA7OwogCSAgKikKLQkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBmdW5jX3dhcm5pbmcgIictTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKIAkgICAgOzsKIAkgIGVzYWMgIyBsaW5rbW9kZQogCSAgY29udGludWUKIAkgIDs7ICMgLUwKIAktUiopCi0JICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICBpZiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCiAJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCiAJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgogCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdApAQCAtNjMxMSw3ICs3NTgwLDcgQEAKIAkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CiAJICA7OwogCSouJGxpYmV4dCkKLQkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAkgICAgY29udGludWUKIAkgIGZpCkBAIC02MzIyLDIxICs3NTkxLDI2IEBACiAJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgogCSAgICAqIiAkZGVwbGliICIqKSA7OwogCSAgICAqKQotCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgdmFsaWRfYV9saWI9ZmFsc2UKIAkgICAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgogCQltYXRjaF9wYXR0ZXJuKikKIAkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAogCQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKIAkJICBpZiBldmFsICJcJEVDSE8gXCIkZGVwbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgXAogCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgICB2YWxpZF9hX2xpYj06CiAJCSAgZmkKIAkJOzsKIAkJcGFzc19hbGwpCi0JCSAgdmFsaWRfYV9saWI9eWVzCisJCSAgdmFsaWRfYV9saWI9OgogCQk7OwogCSAgICAgIGVzYWMKLQkgICAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgorCSAgICAgIGlmICR2YWxpZF9hX2xpYjsgdGhlbgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZWxzZQogCQllY2hvCiAJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCiAJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCkBAIC02MzQ0LDE4ICs3NjE4LDEzIEBACiAJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKIAkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCiAJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCi0JICAgICAgZWxzZQotCQllY2hvCi0JCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKLQkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCi0JCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJICAgICAgZmkKIAkgICAgICA7OwogCSAgICBlc2FjCiAJICAgIGNvbnRpbnVlCiAJICAgIDs7CiAJICBwcm9nKQotCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICBpZiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgogCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJICAgIGVsc2UKIAkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKQEAgLTYzNjYsMTAgKzc2MzUsMTAgQEAKIAkgIGVzYWMgIyBsaW5rbW9kZQogCSAgOzsgIyAqLiRsaWJleHQKIAkqLmxvIHwgKi4kb2JqZXh0KQotCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgaWYgdGVzdCBjb252ID0gIiRwYXNzIjsgdGhlbgogCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgZWxpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBpZiB0ZXN0IGRscHJlb3BlbiA9ICIkcGFzcyIgfHwgdGVzdCB5ZXMgIT0gIiRkbG9wZW5fc3VwcG9ydCIgfHwgdGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgogCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZyBzdGF0aWNhbGx5LAogCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgogCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGVwbGliIgpAQCAtNjM4MiwyMiArNzY1MSwyMCBAQAogCSAgY29udGludWUKIAkgIDs7CiAJJURFUExJQlMlKQotCSAgYWxsZGVwbGlicz15ZXMKKwkgIGFsbGRlcGxpYnM9OgogCSAgY29udGludWUKIAkgIDs7CiAJZXNhYyAjIGNhc2UgJGRlcGxpYgogCi0JaWYgdGVzdCAiJGZvdW5kIiA9IHllcyB8fCB0ZXN0IC1mICIkbGliIjsgdGhlbiA6Ci0JZWxzZQotCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgXGAkbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgXGAkZGVwbGliJyIKLQlmaQorCSRmb3VuZCB8fCB0ZXN0IC1mICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSAnJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50ICckZGVwbGliJyIKIAogCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCiAJZnVuY19sYWxpYl91bnNhZmVfcCAiJGxpYiIgXAotCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCiAJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKLQlsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJbGFkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAogCWRsbmFtZT0KIAlkbG9wZW49CkBAIC02NDI3LDMwICs3Njk0LDMwIEBACiAJICBkb25lCiAJZmkKIAlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIgJGRlcGVuZGVuY3lfbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAotCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8Ci0JICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8Ci0JICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwlpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKKwkgICB0ZXN0IHByb2csc2NhbiA9ICIkbGlua21vZGUsJHBhc3MiIHx8CisJICAgeyB0ZXN0IHByb2cgIT0gIiRsaW5rbW9kZSIgJiYgdGVzdCBsaWIgIT0gIiRsaW5rbW9kZSI7IH07IHRoZW4KIAkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZGxvcGVuIgogCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCiAJZmkKIAotCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwlpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCiAJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcwogCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKIAkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCiAJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KLQkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgJyRsaWInIgogCSAgICBmaQogCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCiAJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgogCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCi0JICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCisJICBlbGlmIHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKIAkgIGZpCiAJICB0bXBfbGlicz0KIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgogCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCiAJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwogCSAgICAgIGVzYWMKQEAgLTY0NjQsMjYgKzc3MzEsMjYgQEAKIAkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCiAJbGlua2xpYj0KIAlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCi0JICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAotCSAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCxubyI7IH07IHRoZW4KKwkgICB7IHRlc3QgeWVzID0gIiRwcmVmZXJfc3RhdGljX2xpYnMiIHx8CisJICAgICB0ZXN0IGJ1aWx0LG5vID0gIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCI7IH07IHRoZW4KIAkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5CiAJZWxzZQogCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbwotCSAgICBsaW5rbGliPSIkbCIKKwkgICAgbGlua2xpYj0kbAogCSAgZG9uZQogCWZpCiAJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciAnJGxpYiciCiAJZmkKIAogCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgotCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgotCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgotCSAgZmkKKwlpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkgIHRlc3QgLXogIiRsaWJkaXIiIFwKKwkgICAgJiYgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiAnJGxpYiciCiAJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAotCSAgICAgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwKLQkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgIHRlc3QgeWVzICE9ICIkZGxvcGVuX3N1cHBvcnQiIHx8CisJICAgICB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiCisJICB0aGVuCiAJICAgICMgSWYgdGhlcmUgaXMgbm8gZGxuYW1lLCBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nCiAJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CiAJICAgICMgZGVwZW5kZW50IGxpYnJhcmllcyBzbyBsaWJsdGRsJ3MgZGVwbGliIHByZWxvYWRlciBkb2Vzbid0CkBAIC02NDk3LDQwICs3NzY0LDQwIEBACiAKIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KIAljYXNlICRsYWRpciBpbgotCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSIkbGFkaXIiIDs7CisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9JGxhZGlyIDs7CiAJKikKIAkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAogCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KLQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIKKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckbGFkaXInIgogCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCi0JICAgIGFic19sYWRpcj0iJGxhZGlyIgorCSAgICBhYnNfbGFkaXI9JGxhZGlyCiAJICBmaQogCSAgOzsKIAllc2FjCiAJZnVuY19iYXNlbmFtZSAiJGxpYiIKLQlsYW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlsYW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAKIAkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KLQlpZiB0ZXN0ICJYJGluc3RhbGxlZCIgPSBYeWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KIAkgIGlmIHRlc3QgISAtZiAiJGx0X3N5c3Jvb3QkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgotCSAgICBkaXI9IiRsYWRpciIKLQkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgotCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSAnJGxpYicgd2FzIG1vdmVkLiIKKwkgICAgZGlyPSRsYWRpcgorCSAgICBhYnNkaXI9JGFic19sYWRpcgorCSAgICBsaWJkaXI9JGFic19sYWRpcgogCSAgZWxzZQotCSAgICBkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKLQkgICAgYWJzZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCisJICAgIGRpcj0kbHRfc3lzcm9vdCRsaWJkaXIKKwkgICAgYWJzZGlyPSRsdF9zeXNyb290JGxpYmRpcgogCSAgZmkKLQkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisJICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIiAmJiBhdm9pZHRlbXBycGF0aD15ZXMKIAllbHNlCiAJICBpZiB0ZXN0ICEgLWYgIiRsYWRpci8kb2JqZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgotCSAgICBkaXI9IiRsYWRpciIKLQkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICBkaXI9JGxhZGlyCisJICAgIGFic2Rpcj0kYWJzX2xhZGlyCiAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKIAkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKIAkgIGVsc2UKLQkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKLQkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisJICAgIGRpcj0kbGFkaXIvJG9iamRpcgorCSAgICBhYnNkaXI9JGFic19sYWRpci8kb2JqZGlyCiAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKIAkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKIAkgIGZpCkBAIC02NTM5LDExICs3ODA2LDExIEBACiAJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAKIAkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KLQlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KLQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwlpZiB0ZXN0IGRscHJlb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogJyRsaWInIgogCSAgZmkKLQkgIGNhc2UgIiRob3N0IiBpbgorCSAgY2FzZSAkaG9zdCBpbgogCSAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3aXRoIFBFLURMTHMuCiAJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQogCSAgICAgICMgTGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcnkgaWYgYm90aApAQCAtNjU4Nyw5ICs3ODU0LDkgQEAKIAogCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCiAJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCi0JICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgZWxpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCiAJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGZpbmFsaXplX2RlcGxpYnMiCiAJICBlbHNlCkBAIC02NTk5LDE0ICs3ODY2LDE0IEBACiAJZmkKIAogCi0JaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwlpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgogCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgogCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKIAotCSAgbGlua2FsbGRlcGxpYnM9bm8KLQkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubyB8fCB0ZXN0IC16ICIkbGlicmFyeV9uYW1lcyIgfHwKLQkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KLQkgICAgbGlua2FsbGRlcGxpYnM9eWVzCisJICBsaW5rYWxsZGVwbGlicz1mYWxzZQorCSAgaWYgdGVzdCBubyAhPSAiJGxpbmtfYWxsX2RlcGxpYnMiIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAorCSAgICAgdGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorCSAgICBsaW5rYWxsZGVwbGlicz06CiAJICBmaQogCiAJICB0bXBfbGlicz0KQEAgLTY2MTgsMTQgKzc4ODUsMTQgQEAKIAkJIDs7CiAJICAgIGVzYWMKIAkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPwotCSAgICBpZiB0ZXN0ICIkbGlua2FsbGRlcGxpYnMiID0geWVzOyB0aGVuCisJICAgIGlmICRsaW5rYWxsZGVwbGliczsgdGhlbgogCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJICAgIGVsc2UKIAkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKIAkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcwogCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgogCSAgICBmaQotCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCiAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KIAkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CiAJICAgICAgZXNhYwpAQCAtNjYzNSwxNSArNzkwMiwxNSBAQAogCSAgY29udGludWUKIAlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KIAotCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCWlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KIAkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgotCSAgICAgeyB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0gbm8gfHwKLQkgICAgICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKKwkgICAgIHsgeyB0ZXN0IG5vID0gIiRwcmVmZXJfc3RhdGljX2xpYnMiIHx8CisJICAgICAgICAgdGVzdCBidWlsdCx5ZXMgPSAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIjsgfSB8fAogCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCiAJICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCi0JICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiIDsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIjsgdGhlbgogCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KLQkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisJICAgICAgY2FzZSAkdGVtcF9ycGF0aDogaW4KIAkgICAgICAqIiRhYnNkaXI6IiopIDs7CiAJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CiAJICAgICAgZXNhYwpAQCAtNjY3Miw5ICs3OTM5LDkgQEAKIAkgICAgZXNhYwogCSAgZmkgIyAkbGlua21vZGUsJHBhc3MgPSBwcm9nLGxpbmsuLi4KIAotCSAgaWYgdGVzdCAiJGFsbGRlcGxpYnMiID0geWVzICYmCi0JICAgICB7IHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSBwYXNzX2FsbCB8fAotCSAgICAgICB7IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmCisJICBpZiAkYWxsZGVwbGlicyAmJgorCSAgICAgeyB0ZXN0IHBhc3NfYWxsID0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfHwKKwkgICAgICAgeyB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJgogCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCiAJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcwogCSAgICBjb250aW51ZQpAQCAtNjY4MywxMSArNzk1MCwxMSBAQAogCiAJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQogCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCi0JaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCWlmIHRlc3QgYnVpbHQgPSAiJHVzZV9zdGF0aWNfbGlicyIgJiYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KIAkgIHVzZV9zdGF0aWNfbGlicz1ubwogCWZpCiAJaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCi0JICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICB7IHRlc3Qgbm8gPSAiJHVzZV9zdGF0aWNfbGlicyIgfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgogCSAgY2FzZSAkaG9zdCBpbgogCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKIAkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCkBAIC02Njk1LDcgKzc5NjIsNyBAQAogCSAgICAgIG5lZWRfcmVsaW5rPW5vCiAJICAgIDs7CiAJICAqKQotCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgIGlmIHRlc3Qgbm8gPSAiJGluc3RhbGxlZCI7IHRoZW4KIAkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgogCSAgICAgIG5lZWRfcmVsaW5rPXllcwogCSAgICBmaQpAQCAtNjcwNSwyNCArNzk3MiwyNCBAQAogCiAJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQogCSAgIyBzeXN0ZW1zIChkYXJ3aW4pLiAgRG9uJ3QgYmxlYXQgYWJvdXQgZGxvcGVuZWQgbW9kdWxlcyB0aG91Z2ghCi0JICBkbG9wZW5tb2R1bGU9IiIKKwkgIGRsb3Blbm1vZHVsZT0KIAkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCiAJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KLQkgICAgICBkbG9wZW5tb2R1bGU9IiRkbHByZW1vZHVsZXRlc3QiCisJICAgICAgZGxvcGVubW9kdWxlPSRkbHByZW1vZHVsZXRlc3QKIAkgICAgICBicmVhawogCSAgICBmaQogCSAgZG9uZQotCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCAiJHNob3VsZG5vdGxpbmsiID0geWVzICYmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgeWVzID0gIiRzaG91bGRub3RsaW5rIiAmJiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCiAJICAgIGVjaG8KLQkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCiAJICAgIGVsc2UKIAkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgogCSAgICBmaQogCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCiAJICBmaQotCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgotCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYKKwkgICAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9pbnRvX2xpYnMiOyB0aGVuCiAJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KIAkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQogCSAgICAjIHNlYXJjaCBwYXRoLgpAQCAtNjc1MCw0MyArODAxNyw0MyBAQAogCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQogCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKIAkgICAgc2hpZnQKLQkgICAgcmVhbG5hbWU9IiQxIgorCSAgICByZWFsbmFtZT0kMQogCSAgICBzaGlmdAogCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKIAkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CiAJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCi0JICAgICAgc29uYW1lPSIkZGxuYW1lIgorCSAgICAgIHNvbmFtZT0kZGxuYW1lCiAJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgogCSAgICAgICMgYmxlaCB3aW5kb3dzCiAJICAgICAgY2FzZSAkaG9zdCBpbgogCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKikKIAkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCiAJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAotCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJCXZlcnN1ZmZpeD0tJG1ham9yCiAJCTs7CiAJICAgICAgZXNhYwogCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKIAkgICAgZWxzZQotCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorCSAgICAgIHNvbmFtZT0kcmVhbG5hbWUKIAkgICAgZmkKIAogCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQotCSAgICBzb3Jvb3Q9IiRzb25hbWUiCisJICAgIHNvcm9vdD0kc29uYW1lCiAJICAgIGZ1bmNfYmFzZW5hbWUgIiRzb3Jvb3QiCi0JICAgIHNvbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBzb25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAJICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKIAkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKIAogCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdwogCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgogCSAgICBlbHNlCi0JICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSAnJHNvbmFtZSciCiAJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCiAJICAgIGZpCiAKIAkgICAgIyBDcmVhdGUgJG5ld2xpYgogCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbmV3bGliIjsgdGhlbiA6OyBlbHNlCi0JICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgJyRzb25hbWUnIgogCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiICdleGl0ICQ/JwogCSAgICBmaQogCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQpAQCAtNjc5NCw1OCArODA2MSw1OCBAQAogCSAgICBsaW5rbGliPSRuZXdsaWIKIAkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgogCi0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgorCSAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCByZWxpbmsgIT0gIiRvcHRfbW9kZSI7IHRoZW4KIAkgICAgYWRkX3NobGlicGF0aD0KIAkgICAgYWRkX2Rpcj0KIAkgICAgYWRkPQogCSAgICBsaWJfbGlua2VkPXllcwogCSAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24gaW4KIAkgICAgaW1tZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCi0JICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSBubzsgdGhlbgotCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJICAgICAgaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfZGlyZWN0IjsgdGhlbgorCQlhZGQ9JGRpci8kbGlua2xpYgogCQljYXNlICRob3N0IGluCi0JCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPSItTCRkaXIiIDs7Ci0JCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc2NvMy4ydjUuMC5bMDI0XSopIGFkZF9kaXI9LUwkZGlyIDs7CisJCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9LUwkZGlyIDs7CiAJCSAgKi0qLXN5c3Y1T3BlblVOSVgqIHwgKi0qLXN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCBcCi0JCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9LUwkZGlyIDs7CiAJCSAgKi0qLWRhcndpbiogKQotCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2Fubm90CiAJCSAgICAjIGxpbmsgYWdhaW5zdCBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgZWFybGllciB3YXJuaW5ncwogCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8Ci0JCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsIDsgdGhlbgorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbDsgdGhlbgogCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgogCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgotCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IiA7IHRoZW4KKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KIAkJCSAgZWNobwogCQkJICBlY2hvICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKIAkJCSAgZWNobyAiKioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCiAJCQllbHNlCi0JCQkgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCQkgIGFkZD0kZGlyLyRvbGRfbGlicmFyeQogCQkJZmkKIAkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJYWRkPSRkaXIvJG9sZF9saWJyYXJ5CiAJCSAgICAgIGZpCiAJCSAgICBmaQogCQllc2FjCi0JICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorCSAgICAgIGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KIAkJY2FzZSAkaG9zdCBpbgotCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OworCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSRkaXIgOzsKIAkJZXNhYwotCQlhZGRfZGlyPSItTCRkaXIiCi0JCWFkZD0iLWwkbmFtZSIKLQkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IG5vOyB0aGVuCi0JCWFkZF9zaGxpYnBhdGg9IiRkaXIiCi0JCWFkZD0iLWwkbmFtZSIKKwkJYWRkX2Rpcj0tTCRkaXIKKwkJYWRkPS1sJG5hbWUKKwkgICAgICBlbGlmIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9JGRpcgorCQlhZGQ9LWwkbmFtZQogCSAgICAgIGVsc2UKIAkJbGliX2xpbmtlZD1ubwogCSAgICAgIGZpCiAJICAgICAgOzsKIAkgICAgcmVsaW5rKQotCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCi0JICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgotCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCi0JICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KLQkJYWRkX2Rpcj0iLUwkYWJzZGlyIgorCSAgICAgIGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9kaXJlY3QiICYmCisJICAgICAgICAgdGVzdCBubyA9ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIjsgdGhlbgorCQlhZGQ9JGRpci8kbGlua2xpYgorCSAgICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCisJCWFkZF9kaXI9LUwkYWJzZGlyCiAJCSMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KIAkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KIAkJICBjYXNlICRsaWJkaXIgaW4KQEAgLTY4NTQsMTAgKzgxMjEsMTAgQEAKIAkJICAgICAgOzsKIAkJICBlc2FjCiAJCWZpCi0JCWFkZD0iLWwkbmFtZSIKLQkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgotCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgotCQlhZGQ9Ii1sJG5hbWUiCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0kZGlyCisJCWFkZD0tbCRuYW1lCiAJICAgICAgZWxzZQogCQlsaWJfbGlua2VkPW5vCiAJICAgICAgZmkKQEAgLTY4NjUsNyArODEzMiw3IEBACiAJICAgICopIGxpYl9saW5rZWQ9bm8gOzsKIAkgICAgZXNhYwogCi0JICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgIT0gIiRsaWJfbGlua2VkIjsgdGhlbgogCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKIAkgICAgZmkKIApAQCAtNjg3NSwxNSArODE0MiwxNSBAQAogCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgogCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCiAJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCiAJICAgIGVsc2UKIAkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCiAJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKLQkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYKLQkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYKLQkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgorCQkgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9taW51c19MIiAmJgorCQkgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCiAJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCiAJCSoiOiRsaWJkaXI6IiopIDs7CiAJCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CkBAIC02ODkyLDMzICs4MTU5LDMzIEBACiAJICAgIGZpCiAJICBmaQogCi0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCiAJICAgIGFkZF9zaGxpYnBhdGg9CiAJICAgIGFkZF9kaXI9CiAJICAgIGFkZD0KIAkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZvciBib3RoIGlzIHNpbXBsZToganVzdCBoYXJkY29kZSBpdC4KLQkgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKLQkgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgotCSAgICAgIGFkZD0iJGxpYmRpci8kbGlua2xpYiIKLQkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KLQkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCi0JICAgICAgYWRkPSItbCRuYW1lIgotCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgorCSAgICAgICB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiOyB0aGVuCisJICAgICAgYWRkPSRsaWJkaXIvJGxpbmtsaWIKKwkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKwkgICAgICBhZGRfZGlyPS1MJGxpYmRpcgorCSAgICAgIGFkZD0tbCRuYW1lCisJICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCiAJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KIAkgICAgICAqIjokbGliZGlyOiIqKSA7OwogCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CiAJICAgICAgZXNhYwotCSAgICAgIGFkZD0iLWwkbmFtZSIKLQkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgorCSAgICAgIGFkZD0tbCRuYW1lCisJICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyI7IHRoZW4KIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgotCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiIDsgdGhlbgotCQlhZGQ9IiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIgorCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiOyB0aGVuCisJCWFkZD0kaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYgogCSAgICAgIGVsc2UKLQkJYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCQlhZGQ9JGxpYmRpci8kbGlua2xpYgogCSAgICAgIGZpCiAJICAgIGVsc2UKIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgotCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGRfZGlyPS1MJGxpYmRpcgogCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgogCQljYXNlICRsaWJkaXIgaW4KQEAgLTY5MjcsMTAgKzgxOTQsMTAgQEAKIAkJICAgIDs7CiAJCWVzYWMKIAkgICAgICBmaQotCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgICBhZGQ9LWwkbmFtZQogCSAgICBmaQogCi0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCiAJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCiAJICAgIGVsc2UKQEAgLTY5MzgsNDMgKzgyMDUsNDMgQEAKIAkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgogCSAgICBmaQogCSAgZmkKLQllbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJZWxpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgogCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAogCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCiAJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCi0JICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgotCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgIGlmIHRlc3QgdW5zdXBwb3J0ZWQgIT0gIiRoYXJkY29kZV9kaXJlY3QiOyB0aGVuCisJICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0kb2xkX2xpYnJhcnkKIAkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCiAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCiAJICBlbHNlCiAJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCiAJICBmaQotCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwllbGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5Ci0JICBpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICBpZiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCiAJICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQogCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KIAogCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCiAJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgogCSAgICBlY2hvCi0JICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW5ub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCiAJICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCiAJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCiAJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCi0JICAgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiOyB0aGVuCiAJICAgICAgZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgogCSAgICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgogCSAgICAgIGVjaG8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKIAkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgogCQllY2hvCiAJCWVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgotCQllY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCQllY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nICdubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCiAJCWVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKLQkJZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJCWVjaG8gIioqKiAnbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCiAJICAgICAgZmkKLQkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KIAkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQogCQlidWlsZF9vbGRfbGlicz15ZXMKIAkgICAgICBlbHNlCkBAIC02OTg3LDExICs4MjU0LDExIEBACiAJICBmaQogCWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJhcnk/CiAKLQlpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgogCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKLQkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8Ci0JICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKLQkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAgeyB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX2ludG9fbGlicyIgfHwKKwkgICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIiB8fAorCSAgICAgICB0ZXN0IHllcyA9ICIkbGlua19zdGF0aWMiOyB9OyB0aGVuCiAJICAgICMgRXh0cmFjdCAtUiBmcm9tIGRlcGVuZGVuY3lfbGlicwogCSAgICB0ZW1wX2RlcGxpYnM9CiAJICAgIGZvciBsaWJkaXIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KQEAgLTcwMDUsMTIgKzgyNzIsMTIgQEAKIAkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CiAJICAgICAgZXNhYwogCSAgICBkb25lCi0JICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKKwkgICAgZGVwZW5kZW5jeV9saWJzPSR0ZW1wX2RlcGxpYnMKIAkgIGZpCiAKIAkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCiAJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKLQkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgdGVzdCBubyA9ICIkbGlua19zdGF0aWMiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCiAJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicwogCSAgdG1wX2xpYnM9CiAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCkBAIC03MDIwLDcgKzgyODcsNyBAQAogICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7CiAgICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OwogICAgICAgICAgICAgZXNhYwotCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCiAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KIAkgICAgICAqIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0ICIqKQogICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKQEAgLTcwMjksMTIgKzgyOTYsMTIgQEAKIAkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgZG9uZQogCi0JICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KKwkgIGlmIHRlc3Qgbm8gIT0gIiRsaW5rX2FsbF9kZXBsaWJzIjsgdGhlbgogCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcwogCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCiAJICAgICAgcGF0aD0KIAkgICAgICBjYXNlICRkZXBsaWIgaW4KLQkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CisJICAgICAgLUwqKSBwYXRoPSRkZXBsaWIgOzsKIAkgICAgICAqLmxhKQogCSAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCiAJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdApAQCAtNzA0MiwxMiArODMwOSwxMiBAQAogCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCiAJCWNhc2UgJGRpciBpbgotCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9JGRpciA7OwogCQkqKQogCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKIAkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgotCQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCi0JCSAgICBhYnNkaXI9IiRkaXIiCisJCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRkaXInIgorCQkgICAgYWJzZGlyPSRkaXIKIAkJICBmaQogCQkgIDs7CiAJCWVzYWMKQEAgLTcwNTUsMzUgKzgzMjIsMzUgQEAKIAkJY2FzZSAkaG9zdCBpbgogCQkqLSotZGFyd2luKikKIAkJICBkZXBkZXBsPQotCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLQkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCi0JCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCRTRUQgLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIjsgdGhlbgorCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lczsgZG8KIAkJICAgICAgZGVwZGVwbD0kdG1wCiAJCSAgICBkb25lCi0JCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiIDsgdGhlbgotCQkgICAgICBkZXBkZXBsPSIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiCi0JCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0x9IC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIjsgdGhlbgorCQkgICAgICBkZXBkZXBsPSRhYnNkaXIvJG9iamRpci8kZGVwZGVwbAorCQkgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAkT1RPT0wgLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCiAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAkT1RPT0w2NCAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCiAgICAgICAgICAgICAgICAgICAgICAgZmkKLQkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgotCQkgICAgICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsLWR5bGliX2ZpbGUgJHdsJGRhcndpbl9pbnN0YWxsX25hbWU6JGRlcGRlcGwiCisJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICRkYXJ3aW5faW5zdGFsbF9uYW1lOiRkZXBkZXBsIgogCQkgICAgICBwYXRoPQogCQkgICAgZmkKIAkJICBmaQogCQkgIDs7CiAJCSopCi0JCSAgcGF0aD0iLUwkYWJzZGlyLyRvYmpkaXIiCisJCSAgcGF0aD0tTCRhYnNkaXIvJG9iamRpcgogCQkgIDs7CiAJCWVzYWMKIAkJZWxzZQotCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCiAJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCi0JCSAgICBmdW5jX3dhcm5pbmcgIlxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisJCSAgICBmdW5jX3dhcm5pbmcgIickZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKIAotCQkgIHBhdGg9Ii1MJGFic2RpciIKKwkJICBwYXRoPS1MJGFic2RpcgogCQlmaQogCQk7OwogCSAgICAgIGVzYWMKQEAgLTcwOTUsMjMgKzgzNjIsMjMgQEAKIAkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubwogCWZpICMgbGlua21vZGUgPSBsaWIKICAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCi0gICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCi0JaWYgdGVzdCAiJGxpbmttb2RlIiA9ICJwcm9nIjsgdGhlbgorICAgICAgaWYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgorCWlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCiAJICBjb21waWxlX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkY29tcGlsZV9kZXBsaWJzIgogCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgogCWVsc2UKIAkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgImAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAogCWZpCiAgICAgICBmaQotICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgotICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JG5ld2RlcGVuZGVuY3lfbGlicworICAgICAgaWYgdGVzdCBkbHByZW9wZW4gPSAiJHBhc3MiOyB0aGVuCiAJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcwogCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KIAkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJZG9uZQogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KLQlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorICAgICAgaWYgdGVzdCBkbG9wZW4gIT0gIiRwYXNzIjsgdGhlbgorCXRlc3QgY29udiA9ICIkcGFzcyIgfHwgewogCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgogCSAgbGliX3NlYXJjaF9wYXRoPQogCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbwpAQCAtNzEyMSwxMiArODM4OCwxMiBAQAogCSAgICBlc2FjCiAJICBkb25lCiAJICBuZXdsaWJfc2VhcmNoX3BhdGg9Ci0JZmkKKwl9CiAKLQlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiICE9ICJwcm9nLGxpbmsiOyB0aGVuCi0JICB2YXJzPSJkZXBsaWJzIgotCWVsc2UKKwlpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCiAJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICB2YXJzPWRlcGxpYnMKIAlmaQogCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbwogCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgpAQCAtNzE4Nyw1OSArODQ1NCw1OSBAQAogICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKICAgICAgICMgKHRoZXkgc3RheSBpbiBkZXBsaWJzKQogICAgICAgdG1wX2xpYnM9Ci0gICAgICBmb3IgaSBpbiAkZGVwZW5kZW5jeV9saWJzIDsgZG8KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCiAJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICIgaW4KIAkqIiAkaSAiKikKLQkgIGk9IiIKKwkgIGk9CiAJICA7OwogCWVzYWMKLQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJaWYgdGVzdCAtbiAiJGkiOyB0aGVuCiAJICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRpIgogCWZpCiAgICAgICBkb25lCiAgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCiAgICAgZG9uZSAjIGZvciBwYXNzCi0gICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KLSAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisgICAgICBkbGZpbGVzPSRuZXdkbGZpbGVzCiAgICAgZmkKLSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCi0gICAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKyAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCisgICAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCiAgICAgZmkKIAogICAgIGNhc2UgJGxpbmttb2RlIGluCiAgICAgb2xkbGliKQotICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KLQlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgorCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogICAgICAgZmkKIAogICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgogICAgICAgKlwgLWwqIHwgKlwgLUwqKQotCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgOzsKKwlmdW5jX3dhcm5pbmcgIictbCcgYW5kICctTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OwogICAgICAgZXNhYwogCiAgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKwlmdW5jX3dhcm5pbmcgIictcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCiAgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKwlmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKICAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisJZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCiAgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisJZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCiAgICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKwlmdW5jX3dhcm5pbmcgIictZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCiAgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KICAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotICAgICAgb2xkbGlicz0iJG91dHB1dCIKKyAgICAgIG9sZGxpYnM9JG91dHB1dAogICAgICAgZnVuY19hcHBlbmQgb2JqcyAiJG9sZF9kZXBsaWJzIgogICAgICAgOzsKIAogICAgIGxpYikKLSAgICAgICMgTWFrZSBzdXJlIHdlIG9ubHkgZ2VuZXJhdGUgbGlicmFyaWVzIG9mIHRoZSBmb3JtIGBsaWJOQU1FLmxhJy4KKyAgICAgICMgTWFrZSBzdXJlIHdlIG9ubHkgZ2VuZXJhdGUgbGlicmFyaWVzIG9mIHRoZSBmb3JtICdsaWJOQU1FLmxhJy4KICAgICAgIGNhc2UgJG91dHB1dG5hbWUgaW4KICAgICAgIGxpYiopCiAJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgpAQCAtNzI0OCwxMCArODUxNSwxMCBAQAogCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgogCTs7CiAgICAgICAqKQotCXRlc3QgIiRtb2R1bGUiID0gbm8gJiYgXAotCSAgZnVuY19mYXRhbF9oZWxwICJsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIgorCXRlc3Qgbm8gPSAiJG1vZHVsZSIgXAorCSAgJiYgZnVuY19mYXRhbF9oZWxwICJsaWJ0b29sIGxpYnJhcnkgJyRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCAnbGliJyIKIAotCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJaWYgdGVzdCBubyAhPSAiJG5lZWRfbGliX3ByZWZpeCI7IHRoZW4KIAkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKIAkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKIAkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdApAQCAtNzI2NSw4ICs4NTMyLDggQEAKICAgICAgIGVzYWMKIAogICAgICAgaWYgdGVzdCAtbiAiJG9ianMiOyB0aGVuCi0JaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgotCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCisJaWYgdGVzdCBwYXNzX2FsbCAhPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSAnJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIKIAllbHNlCiAJICBlY2hvCiAJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCkBAIC03Mjc1LDIxICs4NTQyLDIxIEBACiAJZmkKICAgICAgIGZpCiAKLSAgICAgIHRlc3QgIiRkbHNlbGYiICE9IG5vICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbiBzZWxmJyBpcyBpZ25vcmVkIGZvciBsaWJ0b29sIGxpYnJhcmllcyIKKyAgICAgIHRlc3Qgbm8gPSAiJGRsc2VsZiIgXAorCXx8IGZ1bmNfd2FybmluZyAiJy1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCiAKICAgICAgIHNldCBkdW1teSAkcnBhdGgKICAgICAgIHNoaWZ0Ci0gICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAotCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisgICAgICB0ZXN0IDEgLWx0ICIkIyIgXAorCSYmIGZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgJy1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKIAotICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorICAgICAgaW5zdGFsbF9saWJkaXI9JDEKIAogICAgICAgb2xkbGlicz0KICAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KLQlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAJICAjIEJ1aWxkaW5nIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgotCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSBgLmFsJyBleHRlbnNpb24gc28KKwkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgJy5hbCcgZXh0ZW5zaW9uIHNvCiAJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KIAkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KIAkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCkBAIC03Mjk4LDIwICs4NTY1LDIwIEBACiAJZmkKIAogCXRlc3QgLW4gIiR2aW5mbyIgJiYgXAotCSAgZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisJICBmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgogCiAJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCSAgZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKICAgICAgIGVsc2UKIAogCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCi0Jc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzonCisJc2F2ZV9pZnM9JElGUzsgSUZTPToKIAlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCiAJc2hpZnQKLQlJRlM9IiRzYXZlX2lmcyIKKwlJRlM9JHNhdmVfaWZzCiAKIAl0ZXN0IC1uICIkNyIgJiYgXAotCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvIFxgLXZlcnNpb24taW5mbyciCisJICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gJy12ZXJzaW9uLWluZm8nIgogCiAJIyBjb252ZXJ0IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBsaWJ0b29sIGFnZXMKIAkjIHRoaXMgcmV0YWlucyBjb21wYXRpYmlsaXR5IHdpdGggLmxhIGZpbGVzIGFuZCBhdHRlbXB0cwpAQCAtNzMxOSw0MiArODU4Niw0MiBAQAogCiAJY2FzZSAkdmluZm9fbnVtYmVyIGluCiAJeWVzKQotCSAgbnVtYmVyX21ham9yPSIkMSIKLQkgIG51bWJlcl9taW5vcj0iJDIiCi0JICBudW1iZXJfcmV2aXNpb249IiQzIgorCSAgbnVtYmVyX21ham9yPSQxCisJICBudW1iZXJfbWlub3I9JDIKKwkgIG51bWJlcl9yZXZpc2lvbj0kMwogCSAgIwogCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKIAkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCiAJICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcwogCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAotCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMgdGhhdCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KIAkgICMKIAkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgogCSAgIyBjb3JyZWN0IGxpbnV4IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAJICBkYXJ3aW58bGludXh8b3NmfHdpbmRvd3N8bm9uZSkKIAkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgogCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCi0JICAgIHJldmlzaW9uPSIkbnVtYmVyX3JldmlzaW9uIgorCSAgICBhZ2U9JG51bWJlcl9taW5vcgorCSAgICByZXZpc2lvbj0kbnVtYmVyX3JldmlzaW9uCiAJICAgIDs7CiAJICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8cW54fHN1bm9zKQotCSAgICBjdXJyZW50PSIkbnVtYmVyX21ham9yIgotCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKLQkgICAgYWdlPSIwIgorCSAgICBjdXJyZW50PSRudW1iZXJfbWFqb3IKKwkgICAgcmV2aXNpb249JG51bWJlcl9taW5vcgorCSAgICBhZ2U9MAogCSAgICA7OwogCSAgaXJpeHxub25zdG9wdXgpCiAJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKIAkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgotCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgYWdlPSRudW1iZXJfbWlub3IKKwkgICAgcmV2aXNpb249JG51bWJlcl9taW5vcgogCSAgICBsdF9pcml4X2luY3JlbWVudD1ubwogCSAgICA7OwogCSAgZXNhYwogCSAgOzsKIAlubykKLQkgIGN1cnJlbnQ9IiQxIgotCSAgcmV2aXNpb249IiQyIgotCSAgYWdlPSIkMyIKKwkgIGN1cnJlbnQ9JDEKKwkgIHJldmlzaW9uPSQyCisJICBhZ2U9JDMKIAkgIDs7CiAJZXNhYwogCkBAIC03MzYyLDMwICs4NjI5LDMwIEBACiAJY2FzZSAkY3VycmVudCBpbgogCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKIAkqKQotCSAgZnVuY19lcnJvciAiQ1VSUkVOVCBcYCRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgJyRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgogCSAgOzsKIAllc2FjCiAKIAljYXNlICRyZXZpc2lvbiBpbgogCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKIAkqKQotCSAgZnVuY19lcnJvciAiUkVWSVNJT04gXGAkcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgotCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgZnVuY19lcnJvciAiUkVWSVNJT04gJyRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKIAkgIDs7CiAJZXNhYwogCiAJY2FzZSAkYWdlIGluCiAJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwogCSopCi0JICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIGZ1bmNfZXJyb3IgIkFHRSAnJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKIAkgIDs7CiAJZXNhYwogCiAJaWYgdGVzdCAiJGFnZSIgLWd0ICIkY3VycmVudCI7IHRoZW4KLQkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIgotCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgZnVuY19lcnJvciAiQUdFICckYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciAnJGN1cnJlbnQnIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCiAJZmkKIAogCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KQEAgLTc0MDAsMjYgKzg2NjcsMzUgQEAKIAkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKIAkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCiAJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgIHZlcnN1ZmZpeD0kbWFqb3IuJGFnZS4kcmV2aXNpb24KIAkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCiAJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQogCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKLQkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgeGxjdmVyc3RyaW5nPSIkd2wtY29tcGF0aWJpbGl0eV92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50ICR3bC1jdXJyZW50X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgogCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorICAgICAgICAgICMgT24gRGFyd2luIG90aGVyIGNvbXBpbGVycworICAgICAgICAgIGNhc2UgJENDIGluCisgICAgICAgICAgICAgIG5hZ2ZvciopCisgICAgICAgICAgICAgICAgICB2ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCiAJICA7OwogCiAJZnJlZWJzZC1hb3V0KQotCSAgbWFqb3I9Ii4kY3VycmVudCIKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiI7CisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJHJldmlzaW9uCiAJICA7OwogCiAJZnJlZWJzZC1lbGYpCi0JICBtYWpvcj0iLiRjdXJyZW50IgotCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQKIAkgIDs7CiAKIAlpcml4IHwgbm9uc3RvcHV4KQotCSAgaWYgdGVzdCAiWCRsdF9pcml4X2luY3JlbWVudCIgPSAiWG5vIjsgdGhlbgorCSAgaWYgdGVzdCBubyA9ICIkbHRfaXJpeF9pbmNyZW1lbnQiOyB0aGVuCiAJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCiAJICBlbHNlCiAJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQpAQCAtNzQzMCw2OSArODcwNiw2OSBAQAogCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CiAJICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKIAkgIGVzYWMKLQkgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbgogCiAJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgogCSAgbG9vcD0kcmV2aXNpb24KLQkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgIHdoaWxlIHRlc3QgMCAtbmUgIiRsb29wIjsgZG8KIAkgICAgZnVuY19hcml0aCAkcmV2aXNpb24gLSAkbG9vcAogCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKIAkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKIAkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKKwkgICAgdmVyc3RyaW5nPSR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRpZmFjZTokdmVyc3RyaW5nCiAJICBkb25lCiAKLQkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluIGAuJy4KKwkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluICcuJy4KIAkgIG1ham9yPS4kbWFqb3IKLQkgIHZlcnN1ZmZpeD0iJG1ham9yLiRyZXZpc2lvbiIKKwkgIHZlcnN1ZmZpeD0kbWFqb3IuJHJldmlzaW9uCiAJICA7OwogCiAJbGludXgpICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKIAkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgogCSAgOzsKIAogCW9zZikKIAkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCiAJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKLQkgIHZlcnN0cmluZz0iJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uCisJICB2ZXJzdHJpbmc9JGN1cnJlbnQuJGFnZS4kcmV2aXNpb24KIAogCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KIAkgIGxvb3A9JGFnZQotCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgd2hpbGUgdGVzdCAwIC1uZSAiJGxvb3AiOyBkbwogCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKIAkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCiAJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgorCSAgICB2ZXJzdHJpbmc9JHZlcnN0cmluZzokaWZhY2UuMAogCSAgZG9uZQogCiAJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCi0JICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjoke2N1cnJlbnR9LjAiCisJICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjokY3VycmVudC4wIgogCSAgOzsKIAogCXFueCkKLQkgIG1ham9yPSIuJGN1cnJlbnQiCi0JICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKKwkgIG1ham9yPS4kY3VycmVudAorCSAgdmVyc3VmZml4PS4kY3VycmVudAogCSAgOzsKIAogCXN1bm9zKQotCSAgbWFqb3I9Ii4kY3VycmVudCIKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIG1ham9yPS4kY3VycmVudAorCSAgdmVyc3VmZml4PS4kY3VycmVudC4kcmV2aXNpb24KIAkgIDs7CiAKIAl3aW5kb3dzKQogCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQotCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZSBzeXN0ZW1zLgogCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKIAkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgdmVyc3VmZml4PSItJG1ham9yIgorCSAgdmVyc3VmZml4PS0kbWFqb3IKIAkgIDs7CiAKIAkqKQotCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgJyR2ZXJzaW9uX3R5cGUnIgogCSAgOzsKIAllc2FjCiAKQEAgLTc1MDYsNDIgKzg3ODIsNDUgQEAKIAkgICAgdmVyc3RyaW5nPQogCSAgICA7OwogCSAgKikKLQkgICAgdmVyc3RyaW5nPSIwLjAiCisJICAgIHZlcnN0cmluZz0wLjAKIAkgICAgOzsKIAkgIGVzYWMKLQkgIGlmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgIGlmIHRlc3Qgbm8gPSAiJG5lZWRfdmVyc2lvbiI7IHRoZW4KIAkgICAgdmVyc3VmZml4PQogCSAgZWxzZQotCSAgICB2ZXJzdWZmaXg9Ii4wLjAiCisJICAgIHZlcnN1ZmZpeD0uMC4wCiAJICBmaQogCWZpCiAKIAkjIFJlbW92ZSB2ZXJzaW9uIGluZm8gZnJvbSBuYW1lIGlmIHZlcnNpb25pbmcgc2hvdWxkIGJlIGF2b2lkZWQKLQlpZiB0ZXN0ICIkYXZvaWRfdmVyc2lvbiIgPSB5ZXMgJiYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCWlmIHRlc3QgeWVzLG5vID0gIiRhdm9pZF92ZXJzaW9uLCRuZWVkX3ZlcnNpb24iOyB0aGVuCiAJICBtYWpvcj0KIAkgIHZlcnN1ZmZpeD0KLQkgIHZlcnN0cmluZz0iIgorCSAgdmVyc3RyaW5nPQogCWZpCiAKIAkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCi0JaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCi0JICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwlpZiB0ZXN0IHllcyA9ICIkYWxsb3dfdW5kZWZpbmVkIjsgdGhlbgorCSAgaWYgdGVzdCB1bnN1cHBvcnRlZCA9ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXM7IGJ1aWxkaW5nIHN0YXRpYyBvbmx5IgorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBlbHNlCisJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2FuJ3QgYnVpbGQgJGhvc3Qgc2hhcmVkIGxpYnJhcnkgdW5sZXNzIC1uby11bmRlZmluZWQgaXMgc3BlY2lmaWVkIgorCSAgICBmaQogCSAgZmkKIAllbHNlCiAJICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRub191bmRlZmluZWRfZmxhZyIKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRub191bmRlZmluZWRfZmxhZwogCWZpCiAKICAgICAgIGZpCiAKLSAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkbGlibmFtZSIgIiRsaWJuYW1lIiAieWVzIgorICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiIDoKICAgICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkc3ltZmlsZW9iaiIKLSAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisgICAgICB0ZXN0ICIgIiA9ICIkbGlib2JqcyIgJiYgbGlib2Jqcz0KIAotICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAgICAgIGlmIHRlc3QgcmVsaW5rICE9ICIkb3B0X21vZGUiOyB0aGVuCiAJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKIAkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KIAlyZW1vdmVsaXN0PQpAQCAtNzU1MCw4ICs4ODI5LDggQEAKIAkgIGNhc2UgJHAgaW4KIAkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQogCSAgICAgICA7OwotCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQotCSAgICAgICBpZiB0ZXN0ICJYJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiAhPSAiWCI7IHRoZW4KKwkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS4qKQorCSAgICAgICBpZiB0ZXN0IC1uICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiOyB0aGVuCiAJCSBpZiAkRUNITyAiJHAiIHwgJEVHUkVQIC1lICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiID4vZGV2L251bGwgMj4mMQogCQkgdGhlbgogCQkgICBjb250aW51ZQpAQCAtNzU2NywxMSArODg0NiwxMSBAQAogICAgICAgZmkKIAogICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCi0gICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIiAmJiB0ZXN0IGNvbnZlbmllbmNlICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgogCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgogCiAJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgotCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiRsaWJleHQkL2Q7ICRsbzJvIiB8ICROTDJTUGAKICAgICAgIGZpCiAKICAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCkBAIC03NTkyLDEzICs4ODcxLDEzIEBACiAJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CiAJICBlc2FjCiAJZG9uZQotCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHx8IHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KIAkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCiAJZmkKICAgICAgIGZpCiAKICAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAotICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorICAgICAgb2xkX2RsZmlsZXM9JGRsZmlsZXMKICAgICAgIGRsZmlsZXM9CiAgICAgICBmb3IgbGliIGluICRvbGRfZGxmaWxlczsgZG8KIAljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgpAQCAtNzYwOCw3ICs4ODg3LDcgQEAKICAgICAgIGRvbmUKIAogICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcwotICAgICAgb2xkX2RscHJlZmlsZXM9IiRkbHByZWZpbGVzIgorICAgICAgb2xkX2RscHJlZmlsZXM9JGRscHJlZmlsZXMKICAgICAgIGRscHJlZmlsZXM9CiAgICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KIAljYXNlICIkZGxwcmVmaWxlcyAiIGluCkBAIC03NjE3LDcgKzg4OTYsNyBAQAogCWVzYWMKICAgICAgIGRvbmUKIAotICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgogCSAgY2FzZSAkaG9zdCBpbgogCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCkBAIC03NjQxLDcgKzg5MjAsNyBAQAogCSAgICA7OwogCSAgKikKIAkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KLQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyIgPSAieWVzIjsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIjsgdGhlbgogCSAgICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtbGMiCiAJICAgIGZpCiAJICAgIDs7CkBAIC03NjU3LDkgKzg5MzYsOSBAQAogCSMgSSdtIG5vdCBzdXJlIGlmIEknbSB0cmVhdGluZyB0aGUgcmVsZWFzZSBjb3JyZWN0bHkuICBJIHRoaW5rCiAJIyByZWxlYXNlIHNob3VsZCBzaG93IHVwIGluIHRoZSAtbCAoaWUgLWxnbXA1KSBzbyB3ZSBkb24ndCB3YW50IHRvCiAJIyBhZGQgaXQgaW4gdHdpY2UuICBJcyB0aGF0IGNvcnJlY3Q/Ci0JcmVsZWFzZT0iIgotCXZlcnN1ZmZpeD0iIgotCW1ham9yPSIiCisJcmVsZWFzZT0KKwl2ZXJzdWZmaXg9CisJbWFqb3I9CiAJbmV3ZGVwbGlicz0KIAlkcm9wcGVkZGVwcz1ubwogCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCkBAIC03Njg4LDIwICs4OTY3LDIwIEBACiAJICAgICAgLWwqKQogCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCiAJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCQlpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCiAJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJCSAgKiIgJGkgIiopCiAJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCi0JCSAgICBpPSIiCisJCSAgICBpPQogCQkgICAgOzsKIAkJICBlc2FjCiAJCWZpCi0JCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJaWYgdGVzdCAtbiAiJGkiOyB0aGVuCiAJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCiAJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAogCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CiAJCSAgZGVwbGliX21hdGNoPSQxCi0JCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMDsgdGhlbgogCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgogCQkgIGVsc2UKIAkJICAgIGRyb3BwZWRkZXBzPXllcwpAQCAtNzczMSwyMCArOTAxMCwyMCBAQAogCQkkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CiAJCWlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpOyB0aGVuCiAJCSAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAotCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgogCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJCSAgICAqIiAkaSAiKikKIAkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQkgICAgICBpPSIiCisJCSAgICAgIGk9CiAJCSAgICAgIDs7CiAJCSAgICBlc2FjCiAJCSAgZmkKLQkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgaWYgdGVzdCAtbiAiJGkiOyB0aGVuCiAJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKIAkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKIAkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CiAJCSAgICBkZXBsaWJfbWF0Y2g9JDEKLQkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMDsgdGhlbgogCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCiAJCSAgICBlbHNlCiAJCSAgICAgIGRyb3BwZWRkZXBzPXllcwpAQCAtNzc4MSwyNCArOTA2MCwyNCBAQAogCSAgICAtbCopCiAJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKIAkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KIAkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJCSoiICRhX2RlcGxpYiAiKikKIAkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCQkgIGFfZGVwbGliPSIiCisJCSAgYV9kZXBsaWI9CiAJCSAgOzsKIAkJZXNhYwogCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCiAJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAogCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgogCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCiAJCWVsc2UKIAkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQogCQlmaQotCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAorCQl0ZXN0IHllcyA9ICIkd2FudF9ub2Nhc2VnbG9iIiAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAogCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KLQkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgorCQkgIGlmIHRlc3QgeWVzID0gIiR3YW50X25vY2FzZWdsb2IiOyB0aGVuCiAJCSAgICBzaG9wdCAtcyBub2Nhc2VnbG9iCiAJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCiAJCSAgICAkbm9jYXNlZ2xvYgpAQCAtNzgxNiwyNSArOTA5NSwyNSBAQAogCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCiAJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKIAkJICAgICAgIyBidXQgc28gd2hhdD8KLQkJICAgICAgcG90bGliPSIkcG90ZW50X2xpYiIKKwkJICAgICAgcG90bGliPSRwb3RlbnRfbGliCiAJCSAgICAgIHdoaWxlIHRlc3QgLWggIiRwb3RsaWIiIDI+L2Rldi9udWxsOyBkbwotCQkJcG90bGlibGluaz1gbHMgLWxkICRwb3RsaWIgfCAke1NFRH0gJ3MvLiogLT4gLy8nYAorCQkJcG90bGlibGluaz1gbHMgLWxkICRwb3RsaWIgfCAkU0VEICdzLy4qIC0+IC8vJ2AKIAkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KLQkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OwotCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSRwb3RsaWJsaW5rOzsKKwkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAnc3xbXi9dKiR8fCdgIiRwb3RsaWJsaW5rIjs7CiAJCQllc2FjCiAJCSAgICAgIGRvbmUKIAkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKIAkJCSAkU0VEIC1lIDEwcSB8CiAJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCi0JCQlhX2RlcGxpYj0iIgorCQkJYV9kZXBsaWI9CiAJCQlicmVhayAyCiAJCSAgICAgIGZpCiAJCSAgZG9uZQogCQlkb25lCiAJICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KIAkJZHJvcHBlZGRlcHM9eWVzCiAJCWVjaG8KIAkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgpAQCAtNzg0Miw3ICs5MTIxLDcgQEAKIAkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKIAkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgogCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgotCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJaWYgdGVzdCAteiAiJHBvdGxpYiI7IHRoZW4KIAkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgogCQllbHNlCiAJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCkBAIC03ODY1LDMwICs5MTQ0LDMwIEBACiAJICAgIC1sKikKIAkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgogCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgogCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkJKiIgJGFfZGVwbGliICIqKQogCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCi0JCSAgYV9kZXBsaWI9IiIKKwkJICBhX2RlcGxpYj0KIAkJICA7OwogCQllc2FjCiAJICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KIAkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCiAJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbwogCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAogCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KLQkJICAgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CisJCSAgICBwb3RsaWI9JHBvdGVudF9saWIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKIAkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCiAJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgogCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBhX2RlcGxpYj0KIAkJICAgICAgYnJlYWsgMgogCQkgICAgZmkKIAkJICBkb25lCiAJCWRvbmUKIAkgICAgICBmaQotCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgogCQlkcm9wcGVkZGVwcz15ZXMKIAkJZWNobwogCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCkBAIC03ODk2LDcgKzkxNzUsNyBAQAogCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgogCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCiAJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCi0JCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQlpZiB0ZXN0IC16ICIkcG90bGliIjsgdGhlbgogCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCiAJCWVsc2UKIAkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKQEAgLTc5MTIsMTggKzkxOTEsMTggQEAKIAkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCiAJICA7OwogCW5vbmUgfCB1bmtub3duIHwgKikKLQkgIG5ld2RlcGxpYnM9IiIKKwkgIG5ld2RlcGxpYnM9CiAJICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzLyAtbGMkLy87IHMvIC1bTFJdW14gXSovL2cnYAotCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgotCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHMgOyBkbworCSAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KKwkgICAgZm9yIGkgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbwogCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKLQkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAicywkaSwsImAKKwkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAic3wkaXx8ImAKIAkgICAgZG9uZQogCSAgZmkKIAkgIGNhc2UgJHRtcF9kZXBsaWJzIGluCiAJICAqWyFcCVwgXSopCiAJICAgIGVjaG8KLQkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgIGlmIHRlc3Qgbm9uZSA9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCiAJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgogCSAgICBlbHNlCiAJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKQEAgLTc5NDcsOCArOTIyNiw4IEBACiAJICA7OwogCWVzYWMKIAotCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGRyb3BwZWRkZXBzIjsgdGhlbgorCSAgaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSI7IHRoZW4KIAkgICAgZWNobwogCSAgICBlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKIAkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgpAQCAtNzk1NywxMiArOTIzNiwxMiBAQAogCSAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgogCSAgICAgIGVjaG8KIAkgICAgICBlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKLQkgICAgICBlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCSAgICAgIGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgJ25tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKIAkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCi0JICAgICAgZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgICAgZWNobyAiKioqICdubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKIAkgICAgZmkKLQkgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCi0JICAgICAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkgICAgaWYgdGVzdCBubyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisJICAgICAgb2xkbGlicz0kb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0CiAJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQogCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcwogCSAgICBlbHNlCkBAIC03OTczLDE0ICs5MjUyLDE0IEBACiAJICAgIGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCiAJICAgIGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKIAotCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgIGlmIHRlc3Qgbm8gPSAiJGFsbG93X3VuZGVmaW5lZCI7IHRoZW4KIAkgICAgICBlY2hvCiAJICAgICAgZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKIAkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKIAkgICAgICBlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCiAJICAgICAgZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKLQkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KLQkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkgICAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkJb2xkbGlicz0kb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0CiAJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKIAkJYnVpbGRfb2xkX2xpYnM9eWVzCiAJICAgICAgZWxzZQpAQCAtODAyNiw3ICs5MzA1LDcgQEAKIAkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CiAJZXNhYwogICAgICAgZG9uZQotICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorICAgICAgZGVwbGlicz0kbmV3X2xpYnMKIAogICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgogICAgICAgbGlicmFyeV9uYW1lcz0KQEAgLTgwMzQsMjUgKzkzMTMsMjUgQEAKICAgICAgIGRsbmFtZT0KIAogICAgICAgIyBUZXN0IGFnYWluLCB3ZSBtYXkgaGF2ZSBkZWNpZGVkIG5vdCB0byBidWlsZCBpdCBhbnkgbW9yZQotICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KLQkjIFJlbW92ZSAke3dsfSBpbnN0YW5jZXMgd2hlbiBsaW5raW5nIHdpdGggbGQuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorCSMgUmVtb3ZlICR3bCBpbnN0YW5jZXMgd2hlbiBsaW5raW5nIHdpdGggbGQuCiAJIyBGSVhNRTogc2hvdWxkIHRlc3QgdGhlIHJpZ2h0IF9jbWRzIHZhcmlhYmxlLgogCWNhc2UgJGFyY2hpdmVfY21kcyBpbgogCSAgKlwkTERcICopIHdsPSA7OwogICAgICAgICBlc2FjCi0JaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfaW50b19saWJzIjsgdGhlbgogCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocwogCSAgaGFyZGNvZGVfbGliZGlycz0KIAkgIGRlcF9ycGF0aD0KLQkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCi0JICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICBycGF0aD0kZmluYWxpemVfcnBhdGgKKwkgIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSIgfHwgcnBhdGg9JGNvbXBpbGVfcnBhdGgkcnBhdGgKIAkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbwogCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KIAkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCiAJCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CiAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJCSAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCiAJCWVsc2UKIAkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCiAJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KQEAgLTgwNzcsNyArOTM1Niw3IEBACiAJICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgogCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCiAJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwkgICAgbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCiAJICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCiAJICBmaQogCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KQEAgLTgwOTEsOCArOTM3MCw4IEBACiAJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgogCWZpCiAKLQlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCi0JdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCXNobGlicGF0aD0kZmluYWxpemVfc2hsaWJwYXRoCisJdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIiB8fCBzaGxpYnBhdGg9JGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aAogCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCiAJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCiAJZmkKQEAgLTgxMDIsMTkgKzkzODEsMTkgQEAKIAlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKIAlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKIAlzaGlmdAotCXJlYWxuYW1lPSIkMSIKKwlyZWFsbmFtZT0kMQogCXNoaWZ0CiAKIAlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCiAJICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCiAJZWxzZQotCSAgc29uYW1lPSIkcmVhbG5hbWUiCisJICBzb25hbWU9JHJlYWxuYW1lCiAJZmkKIAlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgogCSAgZGxuYW1lPSRzb25hbWUKIAlmaQogCi0JbGliPSIkb3V0cHV0X29iamRpci8kcmVhbG5hbWUiCisJbGliPSRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZQogCWxpbmtuYW1lcz0KIAlmb3IgbGluawogCWRvCkBAIC04MTI4LDcgKzk0MDcsNyBAQAogCWRlbGZpbGVzPQogCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KIAkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKLQkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cAogCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCiAJZmkKIApAQCAtODEzNywzMSArOTQxNiwzMSBAQAogCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCiAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KIAkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCi0JICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICBmdW5jX2RsbF9kZWZfcCAiJGV4cG9ydF9zeW1ib2xzIiB8fCB7CiAJICAgICAgIyBhbmQgaXQncyBOT1QgYWxyZWFkeSBhIC5kZWYgZmlsZS4gTXVzdCBmaWd1cmUgb3V0CiAJICAgICAgIyB3aGljaCBvZiB0aGUgZ2l2ZW4gc3ltYm9scyBhcmUgZGF0YSBzeW1ib2xzIGFuZCB0YWcKIAkgICAgICAjIHRoZW0gYXMgc3VjaC4gU28sIHRyaWdnZXIgdXNlIG9mIGV4cG9ydF9zeW1ib2xzX2NtZHMuCiAJICAgICAgIyBleHBvcnRfc3ltYm9scyBnZXRzIHJlYXNzaWduZWQgaW5zaWRlIHRoZSAicHJlcGFyZQogCSAgICAgICMgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyIgaWYgc3RhdGVtZW50LCBzbyB0aGUKIAkgICAgICAjIGluY2x1ZGVfZXhwc3ltcyBsb2dpYyBzdGlsbCB3b3Jrcy4KLQkgICAgICBvcmlnX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0kZXhwb3J0X3N5bWJvbHMKIAkgICAgICBleHBvcnRfc3ltYm9scz0KIAkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCi0JICAgIGZpCisJICAgIH0KIAkgIGZpCiAJICA7OwogCWVzYWMKIAogCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCiAJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgotCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgotCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgotCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgaWYgdGVzdCB5ZXMgPSAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYSciCisJICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cAogCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scwogCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCi0JICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCiAJICAgIGZvciBjbWQxIGluICRjbWRzOyBkbwotCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIElGUz0kc2F2ZV9pZnMKIAkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAogCSAgICAgICMgZG9lc24ndCB3b3JrIG9yIGlmIHRvb2wgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkLgogCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCkBAIC04MTc1LDcgKzk0NTQsNyBAQAogCQkgIHRyeV9ub3JtYWxfYnJhbmNoPW5vCiAJCSAgOzsKIAkgICAgICBlc2FjCi0JICAgICAgaWYgdGVzdCAiJHRyeV9ub3JtYWxfYnJhbmNoIiA9IHllcyBcCisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJHRyeV9ub3JtYWxfYnJhbmNoIiBcCiAJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCiAJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CiAJICAgICAgdGhlbgpAQCAtODE4Niw3ICs5NDY1LDcgQEAKIAkJb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKIAkJc2F2ZV9vdXRwdXQ9JG91dHB1dAotCQlvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubm0KKwkJb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubm0KIAkJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCiAJCWxpYm9ianM9JG5tX2ZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAogCQlmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCkBAIC04MjA5LDggKzk0ODgsOCBAQAogCQlicmVhawogCSAgICAgIGZpCiAJICAgIGRvbmUKLQkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgorCSAgICBJRlM9JHNhdmVfaWZzCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiOyB0aGVuCiAJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJwogCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCiAJICAgIGZpCkBAIC04MjE4LDE2ICs5NDk3LDE2IEBACiAJZmkKIAogCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgotCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCisJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSRvcmlnX2V4cG9ydF9zeW1ib2xzCiAJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKIAlmaQogCi0JaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwlpZiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCiAJICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KLQkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKIAkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCi0JICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgIyAncycgY29tbWFuZHMsIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCiAJICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKIAkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CiAJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgpAQCAtODI0NiwxMSArOTUyNSwxMSBAQAogCSAgICA7OwogCSAgZXNhYwogCWRvbmUKLQlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisJZGVwbGlicz0kdG1wX2RlcGxpYnMKIAogCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KIAkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgJiYKLQkgICAgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXMgJiYKKwkgICAgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgJiYKIAkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCiAJICAgICMgZXh0cmFjdCB0aGUgYXJjaGl2ZXMsIHNvIHdlIGhhdmUgb2JqZWN0cyB0byBsaXN0LgogCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgpAQCAtODI2MSw3ICs5NTQwLDcgQEAKIAkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCiAJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CiAJICBlbHNlCi0JICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAogCSAgICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCiAJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQpAQCAtODI3MCwxOCArOTU0OSwxOCBAQAogCSAgZmkKIAlmaQogCi0JaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiR0aHJlYWRfc2FmZSIgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KIAkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgogCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCiAJZmkKIAogCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZwotCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwlpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCiAJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CiAJZmkKIAogCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KLQlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRtb2R1bGUiICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyI7IHRoZW4KIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KIAkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKIAkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCkBAIC04Mjk5LDcgKzk1NzgsNyBAQAogCSAgZmkKIAlmaQogCi0JaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJgorCWlmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJgogCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKIAkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgogCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgpAQCAtODMzMiw4ICs5NjExLDggQEAKIAkgIGxhc3Rfcm9iaj0KIAkgIGs9MQogCi0JICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lmxua3NjcmlwdAorCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubG5rc2NyaXB0CiAJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKIAkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0CiAJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcwpAQCAtODM0NSwxNCArOTYyNCwxNCBAQAogCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCiAJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgogCSAgICBvdXRwdXQ9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAotCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIlgkZmlsZV9saXN0X3NwZWMiICE9IFg7IHRoZW4KLQkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9LmxuaworCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYgdGVzdCAtbiAiJGZpbGVfbGlzdF9zcGVjIjsgdGhlbgorCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5sbmsKIAkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgogCSAgICA6ID4gJG91dHB1dAogCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCiAJICAgIHNoaWZ0CiAJICAgIGZpcnN0b2JqPQotCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IjsgdGhlbgogCSAgICAgIGZpcnN0b2JqPSIkMSAiCiAJICAgICAgc2hpZnQKIAkgICAgZmkKQEAgLTgzNjcsNyArOTY0Niw3IEBACiAJICBlbHNlCiAJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCiAJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKLQkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0CiAJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgogCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKIAkgICAgICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKQEAgLTgzNzksMTMgKzk2NTgsMTMgQEAKIAkJZnVuY19sZW4gIiAkb2JqIgogCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CiAJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKLQkJaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKKwkJaWYgdGVzdCAteiAiJG9iamxpc3QiIHx8CiAJCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgogCQkgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgogCQllbHNlCiAJCSAgIyBUaGUgY29tbWFuZCAkdGVzdF9jbWRzIGlzIGFsbW9zdCB0b28gbG9uZywgYWRkIGEKIAkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgotCQkgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KKwkJICBpZiB0ZXN0IDEgLWVxICIkayI7IHRoZW4KIAkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCiAJCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAogCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCkBAIC04Mzk1LDEwICs5Njc0LDEwIEBACiAJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKIAkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgogCQkgIGZpCi0JCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAogCQkgIGZ1bmNfYXJpdGggJGsgKyAxCiAJCSAgaz0kZnVuY19hcml0aF9yZXN1bHQKLQkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0CiAJCSAgb2JqbGlzdD0iICRvYmoiCiAJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgogCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CkBAIC04NDEwLDkgKzk2ODksOSBAQAogCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgogCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgogCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgotCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJHJlbG9hZF9jbWRzXCIKIAkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgotCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKIAkgICAgICBmaQogCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKIApAQCAtODQyMCw5ICs5Njk5LDkgQEAKIAkgICAgICBvdXRwdXQ9CiAJICAgIGZpCiAKLQkgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KLQkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgotCSAgICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCisJICAgICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9ICYmIHsKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwCiAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKIAkgICAgICBsaWJvYmpzPSRvdXRwdXQKIAkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgpAQCAtODQzMSwxNiArOTcxMCwxNiBAQAogCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCiAJCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCiAJICAgICAgZmkKLQkgICAgZmkKKwkgICAgfQogCiAJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCiAJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgogCiAJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KLQkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKIAkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCi0JICAgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgICAgJG9wdF9zaWxlbnQgfHwgeworCSAgICAgIElGUz0kc2F2ZV9pZnMKKwkgICAgICAkb3B0X3F1aWV0IHx8IHsKIAkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCiAJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgogCSAgICAgIH0KQEAgLTg0NDgsNyArOTcyNyw3IEBACiAJCWx0X2V4aXQ9JD8KIAogCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLQkJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCQlpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCiAJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKIAkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCiAJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQpAQCAtODQ1Nyw3ICs5NzM2LDcgQEAKIAkJZXhpdCAkbHRfZXhpdAogCSAgICAgIH0KIAkgICAgZG9uZQotCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgSUZTPSRzYXZlX2lmcwogCiAJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KIAkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCkBAIC04NDY1LDE4ICs5NzQ0LDE4IEBACiAJICAgIGZpCiAJICBmaQogCi0gICAgICAgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKyAgICAgICAgICAke3NraXBwZWRfZXhwb3J0LWZhbHNlfSAmJiB7CiAJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKLQkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCisJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0kb3JpZ19leHBvcnRfc3ltYm9scwogCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJwogCSAgICBmaQogCiAJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgogCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgotCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCiAJICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKLQkgICAgICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgICAgICMgJ3MnIGNvbW1hbmRzLCB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQogCSAgICAgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgogCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CiAJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KQEAgLTg0ODUsNyArOTc2NCw3IEBACiAJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCiAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKIAkgICAgZmkKLQkgIGZpCisJICB9CiAKIAkgIGxpYm9ianM9JG91dHB1dAogCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCkBAIC04NDk5LDcgKzk3NzgsNyBAQAogCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCiAKIAkgICMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KLQkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiOyB0aGVuCiAJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KIAkgICAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKIAkgICAgZWxzZQpAQCAtODUyMSw3ICs5ODAwLDcgQEAKIAogCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcwogCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgotCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAogCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAogCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKQEAgLTg1MjksMTEgKzk4MDgsMTIgQEAKIAkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CiAJZmkKIAotCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCXNhdmVfaWZzPSRJRlM7IElGUz0nficKIAlmb3IgY21kIGluICRjbWRzOyBkbwotCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBJRlM9JHNwJG5sCiAJICBldmFsIGNtZD1cIiRjbWRcIgotCSAgJG9wdF9zaWxlbnQgfHwgeworCSAgSUZTPSRzYXZlX2lmcworCSAgJG9wdF9xdWlldCB8fCB7CiAJICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKIAkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgogCSAgfQpAQCAtODU0MSw3ICs5ODIxLDcgQEAKIAkgICAgbHRfZXhpdD0kPwogCiAJICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCSAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAgIGlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KIAkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAogCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKIAkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKQEAgLTg1NTAsMTAgKzk4MzAsMTAgQEAKIAkgICAgZXhpdCAkbHRfZXhpdAogCSAgfQogCWRvbmUKLQlJRlM9IiRzYXZlX2lmcyIKKwlJRlM9JHNhdmVfaWZzCiAKIAkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgogCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPwogCiAJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCkBAIC04NTczLDM5ICs5ODUzLDM5IEBACiAJZG9uZQogCiAJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KLQlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyB8fCB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgfHwgdGVzdCB5ZXMgPSAiJGV4cG9ydF9keW5hbWljIjsgdGhlbgogCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCi0JICBkbG5hbWU9IiRzb25hbWUiCisJICBkbG5hbWU9JHNvbmFtZQogCWZpCiAgICAgICBmaQogICAgICAgOzsKIAogICAgIG9iaikKLSAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCi0JZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgorCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAgICAgICBmaQogCiAgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCiAgICAgICAqXCAtbCogfCAqXCAtTCopCi0JZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CisJZnVuY193YXJuaW5nICInLWwnIGFuZCAnLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OwogICAgICAgZXNhYwogCiAgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCWZ1bmNfd2FybmluZyAiJy1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKIAogICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKwlmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKIAogICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisJZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKIAogICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisJZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAKICAgICAgIGNhc2UgJG91dHB1dCBpbgogICAgICAgKi5sbykKIAl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAotCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0ICckb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCiAKIAlsaWJvYmo9JG91dHB1dAogCWZ1bmNfbG8ybyAiJGxpYm9iaiIKQEAgLTg2MTMsNyArOTg5Myw3IEBACiAJOzsKICAgICAgICopCiAJbGlib2JqPQotCW9iaj0iJG91dHB1dCIKKwlvYmo9JG91dHB1dAogCTs7CiAgICAgICBlc2FjCiAKQEAgLTg2MzYsNyArOTkxNiw3IEBACiAJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKIAkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKIAllbHNlCi0JICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCisJICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvYmp9eAogCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAogCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCkBAIC04NjQ1LDEyICs5OTI1LDEyIEBACiAgICAgICBmaQogCiAgICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcwotICAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIGxpYm9ianM9IiRub25fcGljX29iamVjdHMiCisgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCBsaWJvYmpzPSRub25fcGljX29iamVjdHMKIAogICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0gICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKyAgICAgIHJlbG9hZF9vYmpzPSRvYmpzJG9sZF9kZXBsaWJzJyAnYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4kbGliZXh0JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAnICckcmVsb2FkX2NvbnZfb2JqcwogCi0gICAgICBvdXRwdXQ9IiRvYmoiCisgICAgICBvdXRwdXQ9JG9iagogICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCiAKICAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgpAQCAtODY2Miw3ICs5OTQyLDcgQEAKIAlleGl0ICRFWElUX1NVQ0NFU1MKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgewogCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCiAJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKIAlmaQpAQCAtODY3MiwxMiArOTk1MiwxMiBAQAogCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKIAkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KIAlleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIGZpCisgICAgICB9CiAKLSAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciIHx8IHRlc3QgZGVmYXVsdCAhPSAiJHBpY19tb2RlIjsgdGhlbgogCSMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCiAJcmVsb2FkX29ianM9IiRsaWJvYmpzICRyZWxvYWRfY29udl9vYmpzIgotCW91dHB1dD0iJGxpYm9iaiIKKwlvdXRwdXQ9JGxpYm9iagogCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JwogICAgICAgZmkKIApAQCAtODY5NCwxNiArOTk3NCwxNCBAQAogCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OwogICAgICAgZXNhYwogICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgogCiAgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisJZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgogCi0gICAgICB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgXAotICAgICAgICAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0gdW5rbm93biBcCi0JJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gXAotCSYmIHRlc3QgIiRkbG9wZW5fc2VsZl9zdGF0aWMiID0gdW5rbm93biAmJiBcCi0JICBmdW5jX3dhcm5pbmcgIlxgTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisgICAgICAkcHJlbG9hZCBcCisJJiYgdGVzdCB1bmtub3duLHVua25vd24sdW5rbm93biA9ICIkZGxvcGVuX3N1cHBvcnQsJGRsb3Blbl9zZWxmLCRkbG9wZW5fc2VsZl9zdGF0aWMiIFwKKwkmJiBmdW5jX3dhcm5pbmcgIidMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKIAogICAgICAgY2FzZSAkaG9zdCBpbgogICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQpAQCAtODcxNywxMSArOTk5NSwxMSBAQAogICAgICAgKi0qLWRhcndpbiopCiAJIyBEb24ndCBhbGxvdyBsYXp5IGxpbmtpbmcsIGl0IGJyZWFrcyBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycwogCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCi0JaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorCWlmIHRlc3QgQ1hYID0gIiR0YWduYW1lIjsgdGhlbgogCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgogCSAgICAxMC5bMDEyM10pCi0JICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgotCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsLWJpbmRfYXRfbG9hZCIKKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsLWJpbmRfYXRfbG9hZCIKIAkgICAgOzsKIAkgIGVzYWMKIAlmaQpAQCAtODc1Nyw3ICsxMDAzNSw3IEBACiAJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwogCWVzYWMKICAgICAgIGRvbmUKLSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorICAgICAgY29tcGlsZV9kZXBsaWJzPSRuZXdfbGlicwogCiAKICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCkBAIC04NzgxLDcgKzEwMDU5LDcgQEAKIAlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgogCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgogCSAgICBlbHNlCiAJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgogCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCkBAIC04ODA0LDcgKzEwMDgyLDcgQEAKIAlmaQogCWNhc2UgJGhvc3QgaW4KIAkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQotCSAgdGVzdGJpbmRpcj1gJHtFQ0hPfSAiJGxpYmRpciIgfCAke1NFRH0gLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgdGVzdGJpbmRpcj1gJEVDSE8gIiRsaWJkaXIiIHwgJFNFRCAtZSAncyovbGliJCovYmluKidgCiAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KIAkgICoiOiRsaWJkaXI6IiopIDs7CiAJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKQEAgLTg4MjEsMTAgKzEwMDk5LDEwIEBACiAgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgogICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCiAJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCiAJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCiAgICAgICBmaQotICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgorICAgICAgY29tcGlsZV9ycGF0aD0kcnBhdGgKIAogICAgICAgcnBhdGg9CiAgICAgICBoYXJkY29kZV9saWJkaXJzPQpAQCAtODgzMiw3ICsxMDExMCw3IEBACiAJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCiAJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KIAkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0JICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKIAkgICAgZWxzZQogCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KIAkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgpAQCAtODg1Nyw0NSArMTAxMzUsNDMgQEAKICAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCiAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKIAkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0JbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlsaWJkaXI9JGhhcmRjb2RlX2xpYmRpcnMKIAlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKICAgICAgIGZpCi0gICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgorICAgICAgZmluYWxpemVfcnBhdGg9JHJwYXRoCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgogCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KIAljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKIAlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAogICAgICAgZmkKIAotICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiAibm8iCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiIGZhbHNlCiAKICAgICAgICMgdGVtcGxhdGUgcHJlbGlua2luZyBzdGVwCiAgICAgICBpZiB0ZXN0IC1uICIkcHJlbGlua19jbWRzIjsgdGhlbgogCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKICAgICAgIGZpCiAKLSAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9OgogICAgICAgY2FzZSAkaG9zdCBpbgogICAgICAgKmNlZ2NjKiB8ICptaW5ndzMyY2UqKQogICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjIGFuZCBtaW5ndzMyY2UgaG9zdHMsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgotICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQogICAgICAgICA7OwogICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKLSAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCi0gICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KLSAgICAgICAgZmkKKyAgICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgd3JhcHBlcnNfcmVxdWlyZWQ9ZmFsc2UKICAgICAgICAgOzsKICAgICAgICopCi0gICAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KLSAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBpZiB0ZXN0IG5vID0gIiRuZWVkX3JlbGluayIgfHwgdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9ZmFsc2UKICAgICAgICAgZmkKICAgICAgICAgOzsKICAgICAgIGVzYWMKLSAgICAgIGlmIHRlc3QgIiR3cmFwcGVyc19yZXF1aXJlZCIgPSBubzsgdGhlbgorICAgICAgJHdyYXBwZXJzX3JlcXVpcmVkIHx8IHsKIAkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCiAJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAotCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCWxpbmtfY29tbWFuZD0kY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKIAogCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgogCWV4aXRfc3RhdHVzPTAKQEAgLTg5MDgsMTIgKzEwMTg0LDEyIEBACiAJZmkKIAogCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCi0JaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgotCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4kb2JqZXh0IjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9iamV4dCInCiAJZmkKIAogCWV4aXQgJGV4aXRfc3RhdHVzCi0gICAgICBmaQorICAgICAgfQogCiAgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgogCWNvbXBpbGVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCkBAIC04OTQzLDkgKzEwMjE5LDkgQEAKIAlmaQogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAiJG5vX2luc3RhbGwiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkbm9faW5zdGFsbCI7IHRoZW4KIAkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCi0JbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAogCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KIAlsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCiAJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KQEAgLTg5NjIsMjcgKzEwMjM4LDI4IEBACiAJZXhpdCAkRVhJVF9TVUNDRVNTCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgotCSMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgotCXJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisgICAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24sJGZhc3RfaW5zdGFsbCBpbgorICAgICAgICByZWxpbmssKikKKwkgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorCSAgbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAorCSAgcmVsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCiAKLQlmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgotCWZ1bmNfd2FybmluZyAiXGAkb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCi0gICAgICBlbHNlCi0JaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgIT0gbm87IHRoZW4KLQkgIGxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCi0JICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgotCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkU0VEICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZydgCi0JICBlbHNlCi0JICAgICMgZmFzdF9pbnN0YWxsIGlzIHNldCB0byBuZWVkbGVzcwotCSAgICByZWxpbmtfY29tbWFuZD0KLQkgIGZpCi0JZWxzZQotCSAgbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCi0JICByZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgotCWZpCi0gICAgICBmaQorCSAgZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKKwkgIGZ1bmNfd2FybmluZyAiJyRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKKwkgIDs7CisgICAgICAgICoseWVzKQorCSAgbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCisJICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkU0VEICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZydgCisgICAgICAgICAgOzsKKwkqLG5vKQorCSAgbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAorCSAgcmVsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCisgICAgICAgICAgOzsKKwkqLG5lZWRsZXNzKQorCSAgbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCisJICByZWxpbmtfY29tbWFuZD0KKyAgICAgICAgICA7OworICAgICAgZXNhYwogCiAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCiAgICAgICBsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYApAQCAtOTAzOSw4ICsxMDMxNiw4IEBACiAJICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvdXRwdXQiICIiICIuIgogCSAgICBvdXRwdXRfbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAkgICAgb3V0cHV0X3BhdGg9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQkgICAgY3dyYXBwZXJzb3VyY2U9IiRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jIgotCSAgICBjd3JhcHBlcj0iJG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUiCisJICAgIGN3cmFwcGVyc291cmNlPSRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jCisJICAgIGN3cmFwcGVyPSRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlCiAJICAgICRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCiAJICAgIHRyYXAgIiRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyOyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQogCkBAIC05MDYxLDcgKzEwMzM4LDcgQEAKIAkgICAgdHJhcCAiJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKIAkgICAgICAjIG5vdGU6IHRoaXMgc2NyaXB0IHdpbGwgbm90IGJlIGV4ZWN1dGVkLCBzbyBkbyBub3QgY2htb2QuCi0JICAgICAgaWYgdGVzdCAieCRidWlsZCIgPSAieCRob3N0IiA7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiOyB0aGVuCiAJCSRjd3JhcHBlciAtLWx0LWR1bXAtc2NyaXB0ID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CiAJICAgICAgZWxzZQogCQlmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdApAQCAtOTA4NCwyNSArMTAzNjEsMjcgQEAKICAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KICAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbwogCi0gICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCi0Jb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKLQlhZGRsaWJzPSIkY29udmVuaWVuY2UiCi0JYnVpbGRfbGlidG9vbF9saWJzPW5vCi0gICAgICBlbHNlCi0JaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KLQkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisgICAgICBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4KKyAgICAgICAgY29udmVuaWVuY2UpCisJICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgorCSAgYWRkbGlicz0kY29udmVuaWVuY2UKIAkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCWVsc2UKKwkgIDs7CisJbW9kdWxlKQorCSAgb2xkb2Jqcz0kbGlib2Jqc19zYXZlCisJICBhZGRsaWJzPSRvbGRfY29udmVuaWVuY2UKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgICAgIDs7CisJKikKIAkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgotCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgotCSAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCi0JICBmaQotCWZpCi0JYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKLSAgICAgIGZpCisJICAkcHJlbG9hZCAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiIgXAorCSAgICAmJiBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCisJICBhZGRsaWJzPSRvbGRfY29udmVuaWVuY2UKKwkgIDs7CisgICAgICBlc2FjCiAKICAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgotCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CiAJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAogCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCkBAIC05MTEwLDEzICsxMDM4OSwxMyBAQAogICAgICAgZmkKIAogICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCi0gICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgogCWNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKICAgICAgIGVsc2UKIAogCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcwogCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgotCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAogCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAogCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKQEAgLTkxMzcsNyArMTA0MTYsNyBAQAogCSAgOgogCWVsc2UKIAkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKLQkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKIAkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCiAJICBzYXZlX29sZG9ianM9JG9sZG9ianMKQEAgLTkxNDYsNyArMTA0MjUsNyBAQAogCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCiAJICBkbwogCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgotCSAgICBvYmpiYXNlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIG9iamJhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAJICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCiAJICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7CiAJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKQEAgLTkyMTUsMTggKzEwNDk0LDE4IEBACiAJICAgIGVsc2UKIAkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCiAJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAotCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIjsgdGhlbgogCQlSQU5MSUI9JHNhdmVfUkFOTElCCiAJICAgICAgZmkKIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KLQkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJG9sZF9hcmNoaXZlX2NtZHNcIgogCSAgICAgIG9iamxpc3Q9CiAJICAgICAgbGVuPSRsZW4wCiAJICAgIGZpCiAJICBkb25lCiAJICBSQU5MSUI9JHNhdmVfUkFOTElCCiAJICBvbGRvYmpzPSRvYmpsaXN0Ci0JICBpZiB0ZXN0ICJYJG9sZG9ianMiID0gIlgiIDsgdGhlbgorCSAgaWYgdGVzdCAteiAiJG9sZG9ianMiOyB0aGVuCiAJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgogCSAgZWxzZQogCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCkBAIC05MjQzLDcgKzEwNTIyLDcgQEAKICAgICBjYXNlICRvdXRwdXQgaW4KICAgICAqLmxhKQogICAgICAgb2xkX2xpYnJhcnk9Ci0gICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIG9sZF9saWJyYXJ5PSIkbGlibmFtZS4kbGliZXh0IgorICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIiAmJiBvbGRfbGlicmFyeT0kbGlibmFtZS4kbGliZXh0CiAgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCiAKICAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKQEAgLTkyNTgsMzEgKzEwNTM3LDMxIEBACiAJZmkKICAgICAgIGRvbmUKICAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCi0gICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCisgICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgXCIkcHJvZ3BhdGhcIiAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgogICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllcyA7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCiAJcmVsaW5rX2NvbW1hbmQ9CiAgICAgICBmaQogCiAgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CiAJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCi0JICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KIAkgICAgaWYgdGVzdCAteiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgogCSAgICAgIGJyZWFrCiAJICAgIGZpCi0JICAgIG91dHB1dD0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiaQorCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfWkKIAkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcwogCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CiAJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KIAkgICAgICBjYXNlICRkZXBsaWIgaW4KIAkgICAgICAqLmxhKQogCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgotCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgotCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorCQlldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgogCQk7OwogCSAgICAgIC1MKikKQEAgLTkyOTgsMjMgKzEwNTc3LDIzIEBACiAJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJGRlcGxpYiIgOzsKIAkgICAgICBlc2FjCiAJICAgIGRvbmUKLQkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBkZXBlbmRlbmN5X2xpYnM9JG5ld2RlcGVuZGVuY3lfbGlicwogCSAgICBuZXdkbGZpbGVzPQogCiAJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCiAJICAgICAgY2FzZSAkbGliIGluCiAJICAgICAgKi5sYSkKIAkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCi0JCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCiAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCiAJCTs7CiAJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7CiAJICAgICAgZXNhYwogCSAgICBkb25lCi0JICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBkbGZpbGVzPSRuZXdkbGZpbGVzCiAJICAgIG5ld2RscHJlZmlsZXM9CiAJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCiAJICAgICAgY2FzZSAkbGliIGluCkBAIC05MzI0LDM0ICsxMDYwMywzNCBAQAogCQkjIGRpZG4ndCBhbHJlYWR5IGxpbmsgdGhlIHByZW9wZW5lZCBvYmplY3RzIGRpcmVjdGx5IGludG8KIAkJIyB0aGUgbGlicmFyeToKIAkJZnVuY19iYXNlbmFtZSAiJGxpYiIKLQkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCQlldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAJCWZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKIAkJOzsKIAkgICAgICBlc2FjCiAJICAgIGRvbmUKLQkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKIAkgIGVsc2UKIAkgICAgbmV3ZGxmaWxlcz0KIAkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KIAkgICAgICBjYXNlICRsaWIgaW4KLQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSRsaWIgOzsKIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OwogCSAgICAgIGVzYWMKIAkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKIAkgICAgZG9uZQotCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwogCSAgICBuZXdkbHByZWZpbGVzPQogCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbwogCSAgICAgIGNhc2UgJGxpYiBpbgotCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9JGxpYiA7OwogCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CiAJICAgICAgZXNhYwogCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgogCSAgICBkb25lCi0JICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCiAJICBmaQogCSAgJFJNICRvdXRwdXQKIAkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgpAQCAtOTM2NywxMCArMTA2NDYsOSBAQAogCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCiAJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpCiAJICAgICAgIyBJZiBhIC1iaW5kaXIgYXJndW1lbnQgd2FzIHN1cHBsaWVkLCBwbGFjZSB0aGUgZGxsIHRoZXJlLgotCSAgICAgIGlmIHRlc3QgIngkYmluZGlyIiAhPSB4IDsKLQkgICAgICB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGJpbmRpciI7IHRoZW4KIAkJZnVuY19yZWxhdGl2ZV9wYXRoICIkaW5zdGFsbF9saWJkaXIiICIkYmluZGlyIgotCQl0ZGxuYW1lPSRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0JGRsbmFtZQorCQl0ZGxuYW1lPSRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyRkbG5hbWUKIAkgICAgICBlbHNlCiAJCSMgT3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCiAJCXRkbG5hbWU9Li4vYmluLyRkbG5hbWUKQEAgLTkzNzksNyArMTA2NTcsNyBAQAogCSAgZXNhYwogCSAgJEVDSE8gPiAkb3V0cHV0ICJcCiAjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQotIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgogIwogIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCiAjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KQEAgLTkzOTMsNyArMTA2NzEsNyBAQAogIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCiBvbGRfbGlicmFyeT0nJG9sZF9saWJyYXJ5JwogCi0jIExpbmtlciBmbGFncyB0aGF0IGNhbiBub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgorIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW5ub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgogaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzJwogCiAjIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KQEAgLTk0MTksNyArMTA2OTcsNyBAQAogCiAjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CiBsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCi0JICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgIiRuZWVkX3JlbGluayIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3Qgbm8seWVzID0gIiRpbnN0YWxsZWQsJG5lZWRfcmVsaW5rIjsgdGhlbgogCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCiByZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgogCSAgZmkKQEAgLTk0MzQsMjcgKzEwNzEyLDI5IEBACiAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCiB9CiAKLXsgdGVzdCAiJG9wdF9tb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgfSAmJgotICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQoraWYgdGVzdCBsaW5rID0gIiRvcHRfbW9kZSIgfHwgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgorICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KK2ZpCiAKIAogIyBmdW5jX21vZGVfdW5pbnN0YWxsIGFyZy4uLgogZnVuY19tb2RlX3VuaW5zdGFsbCAoKQogewotICAgICRvcHRfZGVidWcKLSAgICBSTT0iJG5vbm9wdCIKKyAgICAkZGVidWdfY21kCisKKyAgICBSTT0kbm9ub3B0CiAgICAgZmlsZXM9Ci0gICAgcm1mb3JjZT0KKyAgICBybWZvcmNlPWZhbHNlCiAgICAgZXhpdF9zdGF0dXM9MAogCiAgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCiAgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCi0gICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSRtYWdpYwogCiAgICAgZm9yIGFyZwogICAgIGRvCiAgICAgICBjYXNlICRhcmcgaW4KLSAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPXllcyA7OworICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9OiA7OwogICAgICAgLSopIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyIgOzsKICAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKICAgICAgIGVzYWMKQEAgLTk0NjcsMTggKzEwNzQ3LDE4IEBACiAKICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCiAgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKLSAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0gICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgotCW9kaXI9IiRvYmpkaXIiCisgICAgICBkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgIGlmIHRlc3QgLiA9ICIkZGlyIjsgdGhlbgorCW9kaXI9JG9iamRpcgogICAgICAgZWxzZQotCW9kaXI9IiRkaXIvJG9iamRpciIKKwlvZGlyPSRkaXIvJG9iamRpcgogICAgICAgZmkKICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgICAgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCAmJiBvZGlyPSIkZGlyIgorICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICAgIHRlc3QgdW5pbnN0YWxsID0gIiRvcHRfbW9kZSIgJiYgb2Rpcj0kZGlyCiAKICAgICAgICMgUmVtZW1iZXIgb2RpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCi0gICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IHRoZW4KKyAgICAgIGlmIHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgogCWNhc2UgIiAkcm1kaXJzICIgaW4KIAkgICoiICRvZGlyICIqKSA7OwogCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7CkBAIC05NDkzLDExICsxMDc3MywxMSBAQAogICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KIAlleGl0X3N0YXR1cz0xCiAJY29udGludWUKLSAgICAgIGVsaWYgdGVzdCAiJHJtZm9yY2UiID0geWVzOyB0aGVuCisgICAgICBlbGlmICRybWZvcmNlOyB0aGVuCiAJY29udGludWUKICAgICAgIGZpCiAKLSAgICAgIHJtZmlsZXM9IiRmaWxlIgorICAgICAgcm1maWxlcz0kZmlsZQogCiAgICAgICBjYXNlICRuYW1lIGluCiAgICAgICAqLmxhKQpAQCAtOTUxMSw3ICsxMDc5MSw3IEBACiAJICBkb25lCiAJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kb2xkX2xpYnJhcnkiCiAKLQkgIGNhc2UgIiRvcHRfbW9kZSIgaW4KKwkgIGNhc2UgJG9wdF9tb2RlIGluCiAJICBjbGVhbikKIAkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KIAkgICAgKiIgJGRsbmFtZSAiKikgOzsKQEAgLTk1MjIsMTIgKzEwODAyLDEyIEBACiAJICB1bmluc3RhbGwpCiAJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgogCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgotCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0dW5pbnN0YWxsX2NtZHMiICckcm1mb3JjZSB8fCBleGl0X3N0YXR1cz0xJwogCSAgICBmaQogCiAJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KIAkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCi0JICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAnJHJtZm9yY2UgfHwgZXhpdF9zdGF0dXM9MScKIAkgICAgZmkKIAkgICAgIyBGSVhNRTogc2hvdWxkIHJlaW5zdGFsbCB0aGUgYmVzdCByZW1haW5pbmcgc2hhcmVkIGxpYnJhcnkuCiAJICAgIDs7CkBAIC05NTQzLDIxICsxMDgyMywxOSBAQAogCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQogCiAJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KLQkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJgotCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJiB0ZXN0IG5vbmUgIT0gIiRwaWNfb2JqZWN0IjsgdGhlbgogCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKIAkgIGZpCiAKIAkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KLQkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKLQkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJiB0ZXN0IG5vbmUgIT0gIiRub25fcGljX29iamVjdCI7IHRoZW4KIAkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgogCSAgZmkKIAlmaQogCTs7CiAKICAgICAgICopCi0JaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuIDsgdGhlbgorCWlmIHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgogCSAgbm9leGVuYW1lPSRuYW1lCiAJICBjYXNlICRmaWxlIGluCiAJICAqLmV4ZSkKQEAgLTk1ODQsMTIgKzEwODYyLDEyIEBACiAKIAkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKIAkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKLQkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKLQkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfVMuJG9iamV4dCIKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCIgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgogCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKIAkgICAgZmkKLQkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgotCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKKwkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRub2V4ZW5hbWUuYyIKIAkgICAgZmkKIAkgIGZpCiAJZmkKQEAgLTk1OTgsNyArMTA4NzYsNyBAQAogICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCiAgICAgZG9uZQogCi0gICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAkb2JqZGlyJ3MgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKICAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCiAgICAgICBpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgogCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKQEAgLTk2MDgsMTYgKzEwODg2LDE3IEBACiAgICAgZXhpdCAkZXhpdF9zdGF0dXMKIH0KIAoteyB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgfSAmJgotICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CitpZiB0ZXN0IHVuaW5zdGFsbCA9ICIkb3B0X21vZGUiIHx8IHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgorICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorZmkKIAogdGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7Ci0gIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgIGhlbHA9JGdlbmVyaWNfaGVscAogICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgogfQogCiB0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKLSAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlICckb3B0X21vZGUnIgogCiBpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCiAgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgpAQCAtOTYyOCw3ICsxMDkwNyw3IEBACiAKIAogIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KLSMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIHdoZXJlIHdlIGRpc2FibGUgYm90aCBraW5kcyBvZiBsaWJyYXJpZXMuICBHaXZlbiBjb25mbGljdGluZwogIyBjaG9pY2VzLCB3ZSBnbyBmb3IgYSBzdGF0aWMgbGlicmFyeSwgdGhhdCBpcyB0aGUgbW9zdCBwb3J0YWJsZSwKICMgc2luY2Ugd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZSBkaXNhYmxlZCBiZWNhdXNlCiAjIHRoZSB1c2VyIGFza2VkIGZvciB0aGF0IG9yIGJlY2F1c2UgdGhlIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydApAQCAtOTY1MSw1ICsxMDkzMCwzIEBACiAjIG1vZGU6c2hlbGwtc2NyaXB0CiAjIHNoLWluZGVudGF0aW9uOjIKICMgRW5kOgotIyB2aTpzdz0yCi0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvYXhfZ2NjX2FyY2hmbGFnLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9heF9nY2NfYXJjaGZsYWcubTQKaW5kZXggM2ZkMDUwZS4uYWFiMjY2MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9heF9nY2NfYXJjaGZsYWcubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9heF9nY2NfYXJjaGZsYWcubTQKQEAgLTE1NSw3ICsxNTUsNyBAQAogICBzcGFyYyopCiAgICAgIEFDX1BBVEhfUFJPRyhbUFJURElBR10sIFtwcnRkaWFnXSwgW3BydGRpYWddLCBbJFBBVEg6L3Vzci9wbGF0Zm9ybS9gdW5hbWUgLWlgL3NiaW4vOi91c3IvcGxhdGZvcm0vYHVuYW1lIC1tYC9zYmluL10pCiAgICAgIGNwdXR5cGU9YCgoKGdyZXAgY3B1IC9wcm9jL2NwdWluZm8gfCBjdXQgLWQ6IC1mMikgOyAoJFBSVERJQUcgLXYgfGdyZXAgLWkgc3BhcmMpIDsgZ3JlcCAtaSBjcHUgL3Zhci9ydW4vZG1lc2cuYm9vdCApIHwgaGVhZCAtbiAxKSAyPiAvZGV2L251bGxgCi0gICAgIGNwdXR5cGU9YGVjaG8gIiRjcHV0eXBlIiB8IHRyIC1kICcgLScgfHRyICRhc19jcl9MRVRURVJTICRhc19jcl9sZXR0ZXJzYAorICAgICBjcHV0eXBlPWBlY2hvICIkY3B1dHlwZSIgfCB0ciAtZCAnIC0nIHwgc2VkICdzL1NQQVJDSUlpL1NQQVJDSUkvJyB8IHRyICRhc19jcl9MRVRURVJTICRhc19jcl9sZXR0ZXJzYAogICAgICBjYXNlICRjcHV0eXBlIGluCiAgICAgICAgICAqdWx0cmFzcGFyY2l2KikgYXhfZ2NjX2FyY2g9InVsdHJhc3BhcmM0IHVsdHJhc3BhcmMzIHVsdHJhc3BhcmMgdjkiIDs7CiAgICAgICAgICAqdWx0cmFzcGFyY2lpaSopIGF4X2djY19hcmNoPSJ1bHRyYXNwYXJjMyB1bHRyYXNwYXJjIHY5IiA7OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9saWJ0b29sLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9saWJ0b29sLm00CmluZGV4IDMzMThmMjcuLjRiYzZiMjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbGlidG9vbC5tNAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQKQEAgLTEsOCArMSw2IEBACiAjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQogIwotIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQotIyAgICAgICAgICAgICAgICAgRm91bmRhdGlvbiwgSW5jLgorIyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLCAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwpAQCAtMzksNyArMzcsNyBAQAogIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KIF0pCiAKLSMgc2VyaWFsIDU3IExUX0lOSVQKKyMgc2VyaWFsIDU4IExUX0lOSVQKIAogCiAjIExUX1BSRVJFUShWRVJTSU9OKQpAQCAtOTEsNyArODksNyBAQAogX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCiAKICMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKLUxJQlRPT0xfREVQUz0iJGx0bWFpbiIKK0xJQlRPT0xfREVQUz0kbHRtYWluCiAKICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCiBMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKQEAgLTEzMCw3ICsxMjgsNyBAQAogIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAotIyBzZW5zaWJseSBhZnRlciBgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KKyMgc2Vuc2libHkgYWZ0ZXIgJ200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCiBtNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCiBbOiAke0NQPSJjcCAtZiJ9CiA6ICR7TVY9Im12IC1mIn0KQEAgLTE3OSwxMyArMTc3LDEzIEBACiBtNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKIAogX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWwotIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCiAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgotaWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgogICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGZpCiBdKQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBmaQogCkBAIC0xOTgsNyArMTk2LDcgQEAKICAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCiAgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwogICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi0gIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCiAgICAgQ09MTEVDVF9OQU1FUz0KICAgICBleHBvcnQgQ09MTEVDVF9OQU1FUwogICBmaQpAQCAtMjA5LDE0ICsyMDcsMTQgQEAKIG9maWxlPWxpYnRvb2wKIGNhbl9idWlsZF9zaGFyZWQ9eWVzCiAKLSMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCiAjIHdoaWNoIG5lZWRzICcubGliJykuCiBsaWJleHQ9YQogCi13aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCiAKLW9sZF9DQz0iJENDIgotb2xkX0NGTEFHUz0iJENGTEFHUyIKK29sZF9DQz0kQ0MKK29sZF9DRkxBR1M9JENGTEFHUwogCiAjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwogdGVzdCAteiAiJENDIiAmJiBDQz1jYwpAQCAtMjY5LDE0ICsyNjcsMTQgQEAKIAogIyBfTFRfUFJPR19MVE1BSU4KICMgLS0tLS0tLS0tLS0tLS0tCi0jIE5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY2FsbGVkIGJvdGggZnJvbSBgY29uZmlndXJlJywgYW5kIGBjb25maWcuc3RhdHVzJworIyBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNhbGxlZCBib3RoIGZyb20gJ2NvbmZpZ3VyZScsIGFuZCAnY29uZmlnLnN0YXR1cycKICMgbm93IHRoYXQgd2UgdXNlIEFDX0NPTkZJR19DT01NQU5EUyB0byBnZW5lcmF0ZSBsaWJ0b29sLiAgTm90YWJseSwKLSMgYGNvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorIyAnY29uZmlnLnN0YXR1cycgaGFzIG5vIHZhbHVlIGZvciBhY19hdXhfZGlyIHVubGVzcyB3ZSBhcmUgdXNpbmcgQXV0b21ha2UsCiAjIHNvIHdlIHBhc3MgYSBjb3B5IGFsb25nIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYSBzZW5zaWJsZSB2YWx1ZSBhbnl3YXkuCiBtNF9kZWZ1bihbX0xUX1BST0dfTFRNQUlOXSwKIFttNF9pZmRlZihbQUNfUkVRVUlSRV9BVVhfRklMRV0sIFtBQ19SRVFVSVJFX0FVWF9GSUxFKFtsdG1haW4uc2hdKV0pZG5sCiBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInXSkKLWx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorbHRtYWluPSRhY19hdXhfZGlyL2x0bWFpbi5zaAogXSkjIF9MVF9QUk9HX0xUTUFJTgogCiAKQEAgLTI4Niw3ICsyODQsNyBAQAogCiAjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAogIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUwotIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlICdsaWJ0b29sJwogIyBsYWJlbC4KIAogCkBAIC00MjEsOCArNDE5LDggQEAKIAogIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvIGBjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cwotIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gYGNvbmZpZ3VyZScuICBWQVJOQU1FCisjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvICdjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gJ2NvbmZpZ3VyZScuICBWQVJOQU1FCiAjIG11c3QgaGF2ZSBhIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZWQgdmFsdWUgZm9yIHRoaXMgdG8gd29yay4KIG00X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCiBbJDE9J2AkRUNITyAiJF1bJDEiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCkBAIC00NDYsNyArNDQ0LDcgQEAKICMgT3V0cHV0IGNvbW1lbnQgYW5kIGxpc3Qgb2YgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIHNjcmlwdAogbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAogW19MVF9GT1JNQVRfQ09NTUVOVChbVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0XSlkbmwKLWF2YWlsYWJsZV90YWdzPSJfTFRfVEFHUyJkbmwKK2F2YWlsYWJsZV90YWdzPSdfTFRfVEFHUydkbmwKIF0pCiAKIApAQCAtNDc0LDcgKzQ3Miw3IEBACiAjIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFByb2R1Y2UgY29tbWVudGVkIGRlY2xhcmF0aW9ucyBvZiBub24tdGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcwotIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSBgbGlidG9vbCcKKyMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbiB0aGUgTElCVE9PTCBDT05GSUcgc2VjdGlvbiBvZiB0aGUgJ2xpYnRvb2wnCiAjIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRwogIyBzZWN0aW9uKSBhcmUgcHJvZHVjZWQgYnkgX0xUX0xJQlRPT0xfVEFHX1ZBUlMuCiBtNF9kZWZ1bihbX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlNdLApAQCAtNTAwLDggKzQ5OCw4IEBACiAjIFNlbmQgYWNjdW11bGF0ZWQgb3V0cHV0IHRvICRDT05GSUdfU1RBVFVTLiAgVGhhbmtzIHRvIHRoZSBsaXN0cyBvZgogIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKICMgdG8gX0xUX0RFQ0wsIHdlIGNhbiBwdXQgcXVvdGUgZXNjYXBlZCB2YXJpYWJsZXMgZGVjbGFyYXRpb25zCi0jIGludG8gYGNvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgotIyBmb3IgbG9vcHMgaW4gYGNvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAorIyBpbnRvICdjb25maWcuc3RhdHVzJywgYW5kIHRoZW4gdGhlIHNoZWxsIGNvZGUgdG8gcXVvdGUgZXNjYXBlIHRoZW0gaW4KKyMgZm9yIGxvb3BzIGluICdjb25maWcuc3RhdHVzJy4gIEZpbmFsbHksIGFueSBhZGRpdGlvbmFsIGNvZGUgYWNjdW11bGF0ZWQKICMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KIG00X2RlZnVuKFtfTFRfQ09ORklHX0NPTU1BTkRTXSwKIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfT1VUUFVUXSwKQEAgLTU0Nyw3ICs1NDUsNyBAQAogXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbwogICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgogICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcwogICAgICAgOzsKICAgICAqKQogICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCkBAIC01NjAsNyArNTU4LDcgQEAKIF1dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCiAgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCiAgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCiAgICAgICA7OwogICAgICopCiAgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKQEAgLTU3Niw3ICs1NzQsNyBAQAogIyBHZW5lcmF0ZSBhIGNoaWxkIHNjcmlwdCBGSUxFIHdpdGggYWxsIGluaXRpYWxpemF0aW9uIG5lY2Vzc2FyeSB0bwogIyByZXVzZSB0aGUgZW52aXJvbm1lbnQgbGVhcm5lZCBieSB0aGUgcGFyZW50IHNjcmlwdCwgYW5kIG1ha2UgdGhlCiAjIGZpbGUgZXhlY3V0YWJsZS4gIElmIENPTU1FTlQgaXMgc3VwcGxpZWQsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZQotIyBgIyEnIHNlcXVlbmNlIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gdGV4dCBiZWdpbnMuICBBZnRlciB0aGlzCisjICcjIScgc2VxdWVuY2UgYnV0IGJlZm9yZSBpbml0aWFsaXphdGlvbiB0ZXh0IGJlZ2lucy4gIEFmdGVyIHRoaXMKICMgbWFjcm8sIGFkZGl0aW9uYWwgdGV4dCBjYW4gYmUgYXBwZW5kZWQgdG8gRklMRSB0byBmb3JtIHRoZSBib2R5IG9mCiAjIHRoZSBjaGlsZCBzY3JpcHQuICBUaGUgbWFjcm8gZW5kcyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBpZiB0aGUKICMgZmlsZSBjb3VsZCBub3QgYmUgZnVsbHkgd3JpdHRlbiAoc3VjaCBhcyBpZiB0aGUgZGlzayBpcyBmdWxsKS4KQEAgLTU5OCw3ICs1OTYsNyBAQAogX0FTX1BSRVBBUkUKIGV4ZWMgQVNfTUVTU0FHRV9GRD4mMQogX0FTRU9GCi10ZXN0ICRsdF93cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkMVtdZG5sCit0ZXN0IDAgPSAiJGx0X3dyaXRlX2ZhaWwiICYmIGNobW9kICt4ICQxW11kbmwKIG00X3BvcGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV0pXSkjIF9MVF9HRU5FUkFURURfRklMRV9JTklUCiAKICMgTFRfT1VUUFVUCkBAIC02MjEsNyArNjE5LDcgQEAKIH0gPiZBU19NRVNTQUdFX0xPR19GRAogCiBsdF9jbF9oZWxwPSJcCi1cYCRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCisnJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKIGZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcwogZ2VuZXJhdGVkLgogCkBAIC02NDMsNyArNjQxLDcgQEAKIFRoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCiAKLXdoaWxlIHRlc3QgJFsjXSAhPSAwCit3aGlsZSB0ZXN0IDAgIT0gJFsjXQogZG8KICAgY2FzZSAkWzFdIGluCiAgICAgLS12ZXJzaW9uIHwgLS12KiB8IC1WICkKQEAgLTY1NiwxMCArNjU0LDEwIEBACiAgICAgICBsdF9jbF9zaWxlbnQ9OiA7OwogCiAgICAgLSopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIG9wdGlvbjogJFsxXQotVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CitUcnkgJyRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OwogCiAgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KLVRyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworVHJ5ICckWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKICAgZXNhYwogICBzaGlmdAogZG9uZQpAQCAtNjg1LDcgKzY4Myw3IEBACiAjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKICMgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5sdC4KIGx0X2NsX3N1Y2Nlc3M9OgotdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKK3Rlc3QgeWVzID0gIiRzaWxlbnQiICYmCiAgIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKIGV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCiAkU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCkBAIC03MDUsMTMgKzcwMywxMyBAQAogX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKICAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCiAgIG00X2lmKF9MVF9UQUcsIFtDXSwgWwotICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKICAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KICAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiAgICAgZmkKIAotICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICBjZmdmaWxlPSR7b2ZpbGV9VAogICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CiAgICAgJFJNICIkY2ZnZmlsZSIKIApAQCAtNzE5LDcgKzcxNyw3IEBACiAjISAkU0hFTEwKIAogIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UpICRWRVJTSU9OCiAjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CiAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KICMKQEAgLTczOSw3ICs3MzcsNyBAQAogIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCiAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgoraWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgogICBDT0xMRUNUX05BTUVTPQogICBleHBvcnQgQ09MTEVDVF9OQU1FUwogZmkKQEAgLTc1Niw4ICs3NTQsNiBAQAogICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCiAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCiAKLSAgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUwotCiAgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CiAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKICAgY2htb2QgK3ggIiRvZmlsZSIKQEAgLTc3NSw3ICs3NzEsNiBAQAogW200X2lmKFskMV0sIFtdLCBbCiAgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCiAgICAgVkVSU0lPTj0nJFZFUlNJT04nCi0gICAgVElNRVNUQU1QPSckVElNRVNUQU1QJwogICAgIFJNPSckUk0nCiAgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKIF0pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKQEAgLTk3NCw3ICs5NjksNyBAQAogCiAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZ10sW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2RdLAogICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KLSAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRMVF9NVUxUSV9NT0RVTEUiOyB0aGVuCiAJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCiAJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCiAJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQpAQCAtOTkyLDcgKzk4Nyw3IEBACiAJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKIAkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQogCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCi0JZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDA7IHRoZW4KKwllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IjsgdGhlbgogCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKIAllbHNlCiAJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKQEAgLTEwMTAsNyArMTAwNSw3IEBACiAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCiAJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAogCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQotCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisJTERGTEFHUz0kc2F2ZV9MREZMQUdTCiAgICAgXSkKIAogICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKQEAgLTEwMzIsNyArMTAyNyw3IEBACiAgICAgICBfbHRfcmVzdWx0PSQ/CiAgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgogCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCIgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKICAgICAgIGVsc2UKIAljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKQEAgLTEwNDIsMzIgKzEwMzcsMzIgQEAKICAgICBdKQogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwogICAgIGRhcndpbjEuKikKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwogICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgogICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cwogICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKICAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PwogICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgogCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CiAJMTAuW1swMTJdXSopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKIAkxMC4qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKICAgICAgIGVzYWMKICAgICA7OwogICBlc2FjCi0gICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KICAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCiAgICAgZmkKLSAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAkd2wtZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltJwogICAgIGVsc2UKLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0gJGxpYicKICAgICBmaQotICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKyAgICBpZiB0ZXN0IDogIT0gIiREU1lNVVRJTCIgJiYgdGVzdCBubyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KICAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCiAgICAgZWxzZQogICAgICAgX2x0X2RzeW11dGlsPQpAQCAtMTA4NywyOSArMTA4MiwyOSBAQAogICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCiAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCiAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi0gIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKyAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHdsLWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCiAgICAgbTRfY2FzZShbJDFdLCBbRjc3XSwgW19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzXSwKICAgICAgICAgICAgICAgICAgIFtGQ10sICBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdKQogICBlbHNlCiAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCiAgIGZpCiAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZAogICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKICAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKICAgZXNhYwotICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRfbHRfZGFyX2Nhbl9zaGFyZWQiOyB0aGVuCiAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAotICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCi0gICAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZHN5bXV0aWwiCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2RzeW11dGlsIgorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKICAgICBtNF9pZihbJDFdLCBbQ1hYXSwKLVsgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKK1sgICBpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCRsaWItbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYi1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmckX2x0X2RzeW11dGlsIgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKICAgICBmaQogXSxbXSkKICAgZWxzZQpAQCAtMTEyOSw3ICsxMTI0LDcgQEAKICMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KIG00X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCiBbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLWlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KICAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCiBlbHNlCiAgIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLApAQCAtMTE0Nyw3ICsxMTQyLDcgQEAKICAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKICAgZmldLFtdKQogICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9Ii91c3IvbGliOi9saWIiCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9L3Vzci9saWI6L2xpYgogICBmaQogICBdKQogICBhaXhfbGlicGF0aD0kX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkKQEAgLTExNjcsOCArMTE2Miw4IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEZpbmQgaG93IHdlIGNhbiBmYWtlIGFuIGVjaG8gY29tbWFuZCB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2guCiAjIEluIHBhcnRpY3VsYXIsIHdpdGggQXV0b2NvbmYgMi42MCBvciBsYXRlciB3ZSBhZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydAotIyBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2ggd2lsbCBmaW5kIGEgc2hlbGwgd2l0aCBhIGJ1aWx0aW4KLSMgcHJpbnRmICh3aGljaCB3ZSBjYW4gdXNlIGFzIGFuIGVjaG8gY29tbWFuZCkuCisjIG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB0aGF0IHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCisjIHByaW50ZiAodGhhdCB3ZSBjYW4gdXNlIGFzIGFuIGVjaG8gY29tbWFuZCkuCiBtNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAogW0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCiBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KQEAgLTExOTYsMTAgKzExOTEsMTAgQEAKICMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KIGZ1bmNfZWNob19hbGwgKCkKIHsKLSAgICAkRUNITyAiJCoiIAorICAgICRFQ0hPICIkKiIKIH0KIAotY2FzZSAiJEVDSE8iIGluCitjYXNlICRFQ0hPIGluCiAgIHByaW50ZiopIEFDX01TR19SRVNVTFQoW3ByaW50Zl0pIDs7CiAgIHByaW50KikgQUNfTVNHX1JFU1VMVChbcHJpbnQgLXJdKSA7OwogICAqKSBBQ19NU0dfUkVTVUxUKFtjYXRdKSA7OwpAQCAtMTIyNSwxNiArMTIyMCwxNyBAQAogQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAogW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQogQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAotWyAgLS13aXRoLXN5c3Jvb3RbPURJUl0gU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKLSAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLl0sCitbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zeXNyb290QDw6QD1ESVJAOj5AXSwKKyAgW1NlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290CisgICBpZiBub3Qgc3BlY2lmaWVkKS5dKV0sCiBbXSwgW3dpdGhfc3lzcm9vdD1ub10pCiAKIGRubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKIGRubCBpbiBjYXNlIHRoZSB1c2VyIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lLgogbHRfc3lzcm9vdD0KLWNhc2UgJHt3aXRoX3N5c3Jvb3R9IGluICMoCitjYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKICB5ZXMpCi0gICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKICAgIGZpCiAgICA7OyAjKApAQCAtMTI0NCwxNCArMTI0MCwxNCBAQAogIG5vfCcnKQogICAgOzsgIygKICAqKQotICAgQUNfTVNHX1JFU1VMVChbJHt3aXRoX3N5c3Jvb3R9XSkKKyAgIEFDX01TR19SRVNVTFQoWyR3aXRoX3N5c3Jvb3RdKQogICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKICAgIDs7CiBlc2FjCiAKICBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCiBfTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKLVtkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgd2hlcmUgb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKIAogIyBfTFRfRU5BQkxFX0xPQ0sKICMgLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjU5LDMxICsxMjU1LDMzIEBACiBbQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKICAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKICAgICBbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCit0ZXN0IG5vID0gIiRlbmFibGVfbGlidG9vbF9sb2NrIiB8fCBlbmFibGVfbGlidG9vbF9sb2NrPXllcwogCiAjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKICMgbGlidG9vbCBzdXBwb3J0LgogY2FzZSAkaG9zdCBpbgogaWE2NC0qLWhwdXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBtb2RlCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCiAgICAgICAqRUxGLTMyKikKLQlIUFVYX0lBNjRfTU9ERT0iMzIiCisJSFBVWF9JQTY0X01PREU9MzIKIAk7OwogICAgICAgKkVMRi02NCopCi0JSFBVWF9JQTY0X01PREU9IjY0IgorCUhQVVhfSUE2NF9NT0RFPTY0CiAJOzsKICAgICBlc2FjCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKICotKi1pcml4NiopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCiAgIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgogICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgogCSozMi1iaXQqKQogCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKQEAgLTEzMTIsOSArMTMxMCw0NiBAQAogICBybSAtcmYgY29uZnRlc3QqCiAgIDs7CiAKLXg4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorbWlwczY0Ki0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGVtdWw9ZWxmCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKjMyLWJpdCopCisJZW11bD0iJHtlbXVsfTMyIgorCTs7CisgICAgICAqNjQtYml0KikKKwllbXVsPSIke2VtdWx9NjQiCisJOzsKKyAgICBlc2FjCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKk1TQiopCisJZW11bD0iJHtlbXVsfWJ0c21pcCIKKwk7OworICAgICAgKkxTQiopCisJZW11bD0iJHtlbXVsfWx0c21pcCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTjMyKikKKwllbXVsPSIke2VtdWx9bjMyIgorCTs7CisgICAgZXNhYworICAgIExEPSIke0xELWxkfSAtbSAkZW11bCIKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAogczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNhc2VzIG9ubHkgY292ZXIgdGhlCisgICMgc2l0dWF0aW9ucyB3aGVyZSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgKHN1Y2ggYXMgd2hlbgorICAjIGRvaW5nIDMyLWJpdCBjb21waWxhdGlvbiBmb3IgYSBob3N0IHdoZXJlIGxkIGRlZmF1bHRzIHRvIDY0LWJpdCwgb3IKKyAgIyB2aWNlIHZlcnNhKTsgdGhlIGNvbW1vbiBjYXNlcyB3aGVyZSBubyBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIGRvCisgICMgbm90IGFwcGVhciBpbiB0aGUgbGlzdC4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCkBAIC0xMzI2LDE0ICsxMzYxLDE3IEBACiAJICB4ODZfNjQtKmxpbnV4KikKIAkgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgogCSAgICAgICp4ODYtNjQqKQotCSAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCi0JICAgICAgICAgOzsKKwkJTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3g4Nl82NCIKKwkJOzsKIAkgICAgICAqKQotCSAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKLQkgICAgICAgICA7OworCQlMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJCTs7CiAJICAgIGVzYWMKIAkgICAgOzsKLQkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICBwb3dlcnBjNjRsZS0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCisJICAgIDs7CisJICBwb3dlcnBjNjQtKmxpbnV4KikKIAkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCiAJICAgIDs7CiAJICBzMzkweC0qbGludXgqKQpAQCAtMTM1Miw3ICsxMzkwLDEwIEBACiAJICB4ODZfNjQtKmxpbnV4KikKIAkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCiAJICAgIDs7Ci0JICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgIHBvd2VycGNsZS0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgorCSAgICA7OworCSAgcG93ZXJwYy0qbGludXgqKQogCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCiAJICAgIDs7CiAJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQpAQCAtMTM3MCwxOSArMTQxMSwyMCBAQAogCiAqLSotc2NvMy4ydjUqKQogICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCi0gIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBTQVZFX0NGTEFHUz0kQ0ZMQUdTCiAgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAogICAgIFtBQ19MQU5HX1BVU0goQykKICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLFtbXV0pXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKICAgICAgQUNfTEFOR19QT1BdKQotICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICBpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X2NjX25lZWRzX2JlbGYiOyB0aGVuCiAgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCi0gICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgICAgQ0ZMQUdTPSRTQVZFX0NGTEFHUwogICBmaQogICA7OwogKi0qc29sYXJpcyopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCiAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgpAQCAtMTM5MCw3ICsxNDMyLDcgQEAKICAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCiAgICAgICB5ZXMqKQogICAgICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIGk/ODYtKi1zb2xhcmlzKikKKyAgICAgICAgaT84Ni0qLXNvbGFyaXMqfHg4Nl82NC0qLXNvbGFyaXMqKQogICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgogICAgICAgICAgIDs7CiAgICAgICAgIHNwYXJjKi0qLXNvbGFyaXMqKQpAQCAtMTM5OSw3ICsxNDQxLDcgQEAKICAgICAgICAgZXNhYwogICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KICAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICAgIExEPSIke0xELWxkfV9zb2wyIgorICAgICAgICAgIExEPSR7TEQtbGR9X3NvbDIKICAgICAgICAgZmkKICAgICAgICAgOzsKICAgICAgICopCkBAIC0xNDE1LDcgKzE0NTcsNyBAQAogICA7OwogZXNhYwogCi1uZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKK25lZWRfbG9ja3M9JGVuYWJsZV9saWJ0b29sX2xvY2sKIF0pIyBfTFRfRU5BQkxFX0xPQ0sKIAogCkBAIC0xNDM0LDExICsxNDc2LDExIEBACiAgICAgIFtlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKICAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKICAgICAgIEFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQotICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKyAgICAgIGlmIHRlc3QgMCAtZXEgIiRhY19zdGF0dXMiOyB0aGVuCiAJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KIAlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKIAlBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKLQlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorCWlmIHRlc3QgMCAtbmUgIiRhY19zdGF0dXMiOyB0aGVuCiAgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACiAgICAgICAgIGZpCiAgICAgICBmaQpAQCAtMTQ0Niw3ICsxNDg4LDcgQEAKICAgICAgXSkKICAgXSkKIAotaWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgoraWYgdGVzdCBubyA9ICIkbHRfY3ZfYXJfYXRfZmlsZSI7IHRoZW4KICAgYXJjaGl2ZXJfbGlzdF9zcGVjPQogZWxzZQogICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKQEAgLTE0NzcsNyArMTUxOSw3IEBACiAKIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgb3BlbmJzZCopCisgIGJpdHJpZyogfCBvcGVuYnNkKikKICAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCiAgICAgOzsKICAgKikKQEAgLTE1MTMsNyArMTU1NSw3IEBACiAgIFskMj1ubwogICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQogICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkMyIKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCiAgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgogICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwpAQCAtMTU0MCw3ICsxNTgyLDcgQEAKICAgICRSTSBjb25mdGVzdCoKIF0pCiAKLWlmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICJbJF0kMiI7IHRoZW4KICAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCiBlbHNlCiAgICAgbTRfaWYoWyQ2XSwgLCA6LCBbJDZdKQpAQCAtMTU2Miw3ICsxNjA0LDcgQEAKIG00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCiBBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAogICBbJDI9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBzYXZlX0xERkxBR1M9JExERkxBR1MKICAgIExERkxBR1M9IiRMREZMQUdTICQzIgogICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KQEAgLTE1ODEsMTAgKzE2MjMsMTAgQEAKICAgICAgZmkKICAgIGZpCiAgICAkUk0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCiBdKQogCi1pZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiWyRdJDIiOyB0aGVuCiAgICAgbTRfaWYoWyQ0XSwgLCA6LCBbJDRdKQogZWxzZQogICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKQEAgLTE2MDUsNyArMTY0Nyw3IEBACiBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKIEFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAogICBpPTAKLSAgdGVzdHN0cmluZz0iQUJDRCIKKyAgdGVzdHN0cmluZz1BQkNECiAKICAgY2FzZSAkYnVpbGRfb3MgaW4KICAgbXNkb3NkamdwcCopCkBAIC0xNjQ1LDcgKzE2ODcsNyBAQAogICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwogICAgIDs7CiAKLSAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgYml0cmlnKiB8IGRhcndpbiogfCBkcmFnb25mbHkqIHwgZnJlZWJzZCogfCBuZXRic2QqIHwgb3BlbmJzZCopCiAgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCiAgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YApAQCAtMTY5NiwyMiArMTczOCwyMiBAQAogICAqKQogICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAogICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iICYmIFwKLSAgICAgIHRlc3QgdW5kZWZpbmVkICE9ICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgIHRlc3QgdW5kZWZpbmVkICE9ICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCiAgICAgZWxzZQogICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgogICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgotICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgODsgZG8KICAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCiAgICAgICBkb25lCiAgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQogICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKICAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CiAgICAgICAjIHdlIGNhbid0IHRlbGwuCi0gICAgICB3aGlsZSB7IHRlc3QgIlgiYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorICAgICAgd2hpbGUgeyB0ZXN0IFhgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCiAJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgotCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorCSAgICAgIHRlc3QgMTcgIT0gIiRpIiAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCiAgICAgICBkbwogICAgICAgICBpPWBleHByICRpICsgMWAKICAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCkBAIC0xNzI3LDcgKzE3NjksNyBAQAogICAgIDs7CiAgIGVzYWMKIF0pCi1pZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCitpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgogICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCiBlbHNlCiAgIEFDX01TR19SRVNVTFQobm9uZSkKQEAgLTE3NTUsNyArMTc5Nyw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG00X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKIFttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKK2lmIHRlc3QgeWVzID0gIiRjcm9zc19jb21waWxpbmciOyB0aGVuIDoKICAgWyQ0XQogZWxzZQogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCkBAIC0xODA0LDcgKzE4NDYsNyBAQAogCiAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCiAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCiBpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CiAjZW5kaWYKIApAQCAtMTgzMCw3ICsxODcyLDcgQEAKICAgcmV0dXJuIHN0YXR1czsKIH1dCiBfTFRfRU9GCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyAiY29uZnRlc3QkYWNfZXhlZXh0IiAyPi9kZXYvbnVsbDsgdGhlbgogICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xODUxLDcgKzE4OTMsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0KIEFDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAogW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAotaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCitpZiB0ZXN0IHllcyAhPSAiJGVuYWJsZV9kbG9wZW4iOyB0aGVuCiAgIGVuYWJsZV9kbG9wZW49dW5rbm93bgogICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgogICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KQEAgLTE4NjEsNDQgKzE5MDMsNTIgQEAKIAogICBjYXNlICRob3N0X29zIGluCiAgIGJlb3MqKQotICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuPWxvYWRfYWRkX29uCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CiAgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCiAgICAgOzsKIAogICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbj1Mb2FkTGlicmFyeQogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQogICAgIDs7CiAKICAgY3lnd2luKikKLSAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CiAgICAgOzsKIAogICBkYXJ3aW4qKQotICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CiAgICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWwotICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKwkJW2x0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbF0sWworICAgIGx0X2N2X2Rsb3Blbj1keWxkCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CiAgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCiAgICAgXSkKICAgICA7OwogCisgIHRwZiopCisgICAgIyBEb24ndCB0cnkgdG8gcnVuIGFueSBsaW5rIHRlc3RzIGZvciBUUEYuICBXZSBrbm93IGl0J3MgaW1wb3NzaWJsZQorICAgICMgYmVjYXVzZSBUUEYgaXMgYSBjcm9zcy1jb21waWxlciwgYW5kIHdlIGtub3cgaG93IHdlIG9wZW4gRFNPcy4KKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgICA7OworCiAgICopCiAgICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAotCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKwkgIFtsdF9jdl9kbG9wZW49c2hsX2xvYWRdLAogICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKLQkgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdLAorCSAgICBbbHRfY3ZfZGxvcGVuPXNobF9sb2FkIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkXSwKIAlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKLQkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKKwkgICAgICBbbHRfY3ZfZGxvcGVuPWRsb3Blbl0sCiAJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJCVtsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxdLAogCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCi0JCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisJCSAgW2x0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxzdmxkXSwKIAkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAotCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorCQkgICAgW2x0X2N2X2Rsb3Blbj1kbGRfbGluayBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZF0pCiAJICAgICAgXSkKIAkgICAgXSkKIAkgIF0pCkBAIC0xOTA3LDIxICsxOTU3LDIxIEBACiAgICAgOzsKICAgZXNhYwogCi0gIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KLSAgICBlbmFibGVfZGxvcGVuPXllcwotICBlbHNlCisgIGlmIHRlc3Qgbm8gPSAiJGx0X2N2X2Rsb3BlbiI7IHRoZW4KICAgICBlbmFibGVfZGxvcGVuPW5vCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPXllcwogICBmaQogCiAgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgogICBkbG9wZW4pCi0gICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgotICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorICAgIHNhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisgICAgdGVzdCB5ZXMgPSAiJGFjX2N2X2hlYWRlcl9kbGZjbl9oIiAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgogCi0gICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCiAKLSAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIHNhdmVfTElCUz0kTElCUwogICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKIAogICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCkBAIC0xOTMxLDcgKzE5ODEsNyBAQAogCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCiAgICAgXSkKIAotICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9kbG9wZW5fc2VsZiI7IHRoZW4KICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgogICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKIAkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubApAQCAtMTk0MSw5ICsxOTkxLDkgQEAKICAgICAgIF0pCiAgICAgZmkKIAotICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKLSAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgQ1BQRkxBR1M9JHNhdmVfQ1BQRkxBR1MKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBMSUJTPSRzYXZlX0xJQlMKICAgICA7OwogICBlc2FjCiAKQEAgLTIwMzUsOCArMjA4NSw4IEBACiBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKIF9MVF9DT01QSUxFUl9DX08oWyQxXSkKIAotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KK2hhcmRfbGlua3M9bm90dGVzdGVkCitpZiB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiICYmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgogICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKICAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQogICBoYXJkX2xpbmtzPXllcwpAQCAtMjA0Niw4ICsyMDk2LDggQEAKICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwogICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCi0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQorICBpZiB0ZXN0IG5vID0gIiRoYXJkX2xpbmtzIjsgdGhlbgorICAgIEFDX01TR19XQVJOKFsnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKICAgICBuZWVkX2xvY2tzPXdhcm4KICAgZmkKIGVsc2UKQEAgLTIwNzQsOCArMjEyNCw4IEBACiBfTFRfREVDTChbXSwgW29iamRpcl0sIFswXSwKICAgICAgICAgIFtUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXNdKWRubAogbTRfcGF0dGVybl9hbGxvdyhbTFRfT0JKRElSXSlkbmwKLUFDX0RFRklORV9VTlFVT1RFRChMVF9PQkpESVIsICIkbHRfY3Zfb2JqZGlyLyIsCi0gIFtEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW0xUX09CSkRJUl0sICIkbHRfY3Zfb2JqZGlyLyIsCisgIFtEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLl0pCiBdKSMgX0xUX0NIRUNLX09CSkRJUgogCiAKQEAgLTIwODcsMTUgKzIxMzcsMTUgQEAKIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9CiBpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8CiAgICB0ZXN0IC1uICIkX0xUX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fAotICAgdGVzdCAiWCRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIiA9ICJYeWVzIiA7IHRoZW4KKyAgIHRlc3QgeWVzID0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIjsgdGhlbgogCiAgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisgIGlmIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAmJgogICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCiAgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKICAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCi0gICAgIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KKyAgICAgIyMgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAmJgorICAgICB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiOyB0aGVuCiAgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluawogICBlbHNlCkBAIC0yMTA5LDEyICsyMTU5LDEyIEBACiBmaQogQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQogCi1pZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgPSByZWxpbmsgfHwKLSAgIHRlc3QgIiRfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKSIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgcmVsaW5rID0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiB8fAorICAgdGVzdCB5ZXMgPSAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIjsgdGhlbgogICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorZWxpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8fAorICAgICB0ZXN0IG5vID0gIiRlbmFibGVfc2hhcmVkIjsgdGhlbgogICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwogZmkKQEAgLTIxMzgsNyArMjE4OCw3IEBACiAjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKICAgY2FzZSAkaG9zdF9vcyBpbgogICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgogICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKICAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgogICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKQEAgLTIxNjksMTQgKzIyMTksMTQgQEAKIEFDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKIG00X2lmKFskMV0sCiAJW10sIFsKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICBjYXNlICRob3N0X29zIGluCi0gICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OwotICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LywvTFIvJyA7OworICAgICopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8nIDs7CiAgIGVzYWMKICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSJzLD1cKFtbQS1aYS16XV06XCksXDEsZyIgOzsKLSAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSdzfD1cKFtbQS1aYS16XV06XCl8XDF8ZycgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PS98L3xnJyA7OwogICBlc2FjCiAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCiAgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KQEAgLTIxOTIsMjggKzIyNDIsMzUgQEAKICAgICA7OwogICBlc2FjCiAgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0Ci0gICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4uLgogICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KLSAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgbHRfbXVsdGlfb3NfZGlyPS9gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgICMgLi4uYnV0IGlmIHNvbWUgcGF0aCBjb21wb25lbnQgYWxyZWFkeSBlbmRzIHdpdGggdGhlIG11bHRpbGliIGRpciB3ZSBhc3N1bWUKKyAgIyB0aGF0IGFsbCBpcyBmaW5lIGFuZCB0cnVzdCAtcHJpbnQtc2VhcmNoLWRpcnMgYXMgaXMgKEdDQyA0LjI/IG9yIG5ld2VyKS4KKyAgY2FzZSAiJGx0X211bHRpX29zX2RpcjsgJGx0X3NlYXJjaF9wYXRoX3NwZWMgIiBpbgorICAiLzsgIiogfCAiLy47ICIqIHwgIi8uLzsgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIvICIqKQorICAgIGx0X211bHRpX29zX2Rpcj0KKyAgICA7OworICBlc2FjCiAgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KLSAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCi0gICAgZWxzZQorICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxpZiB0ZXN0IC1uICIkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgogICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCiAJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCiAgICAgZmkKICAgZG9uZQogICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCi1CRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7Ci0gIGx0X2Zvbz0iIjsKLSAgbHRfY291bnQ9MDsKK0JFR0lOIHtSUyA9ICIgIjsgRlMgPSAiL3xcbiI7fSB7CisgIGx0X2ZvbyA9ICIiOworICBsdF9jb3VudCA9IDA7CiAgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CiAgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgewogICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKICAgICAgICAgbHRfY291bnQrKzsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgICAgbHRfZm9vID0gIi8iICRsdF9pIGx0X2ZvbzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBsdF9jb3VudC0tOwogICAgICAgICB9CkBAIC0yMjI3LDcgKzIyODQsNyBAQAogICAjIGZvciB0aGVzZSBob3N0cy4KICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAotICAgICAgJFNFRCAncywvXChbW0EtWmEtel1dOlwpLFwxLGcnYCA7OworICAgICAgJFNFRCAnc3wvXChbW0EtWmEtel1dOlwpfFwxfGcnYCA7OwogICBlc2FjCiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKIGVsc2UKQEAgLTIyMzYsNyArMjI5Myw3IEBACiBsaWJyYXJ5X25hbWVzX3NwZWM9CiBsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJwogc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgorc2hyZXh0X2NtZHM9LnNvCiBwb3N0aW5zdGFsbF9jbWRzPQogcG9zdHVuaW5zdGFsbF9jbWRzPQogZmluaXNoX2NtZHM9CkBAIC0yMjU2LDExICsyMzEzLDExIEBACiBjYXNlICRob3N0X29zIGluCiBhaXgzKikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lLmEnCiAgIHNobGlicGF0aF92YXI9TElCUEFUSAogCiAgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgOzsKIAogYWl4W1s0LTldXSopCkBAIC0yMjY4LDQwICsyMzI1LDQwIEBACiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBlbHNlCiAgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQogICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KICAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCiAgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwogCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICRDQyAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCiAJOgogICAgICAgZWxzZQogCWNhbl9idWlsZF9zaGFyZWQ9bm8KICAgICAgIGZpCiAgICAgICA7OwogICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbm5vdCBoYXJkY29kZSBjb3JyZWN0CiAgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwogICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCiAgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KICAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CiAgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgICBlbHNlCiAgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgogICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgICBmaQogICAgIHNobGlicGF0aF92YXI9TElCUEFUSAogICBmaQpAQCAtMjMxMiwxOCArMjM2OSwxOCBAQAogICBwb3dlcnBjKQogICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KICAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICAgIDs7CiAgIG02OGspCiAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKICAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCiAgICAgOzsKICAgZXNhYwogICA7OwogCiBiZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JwogICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCiAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICiAgIDs7CkBAIC0yMzMxLDggKzIzODgsOCBAQAogYnNkaVtbNDVdXSopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCkBAIC0yMzQ0LDcgKzI0MDEsNyBAQAogCiBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgorICBzaHJleHRfY21kcz0uZGxsCiAgIG5lZWRfdmVyc2lvbj1ubwogICBuZWVkX2xpYl9wcmVmaXg9bm8KIApAQCAtMjM1Myw4ICsyNDEwLDggQEAKICAgICAjIGdjYwogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCiAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KICAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgogICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgpAQCAtMjM3MCwxNyArMjQyNywxNyBAQAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBjeWd3aW4qKQogICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKIG00X2lmKFskMV0sIFtdLFsKICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiXSkKICAgICAgIDs7CiAgICAgbWluZ3cqIHwgY2VnY2MqKQogICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwogICAgICAgOzsKICAgICBwdzMyKikKICAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCiAgICAgICA7OwogICAgIGVzYWMKICAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwpAQCAtMjM4OSw4ICsyNDQ2LDggQEAKICAgKixjbCopCiAgICAgIyBOYXRpdmUgTVNWQwogICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmxpYicKIAogICAgIGNhc2UgJGJ1aWxkX29zIGluCiAgICAgbWluZ3cqKQpAQCAtMjQxNyw3ICsyNDc0LDcgQEAKICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCiAgICAgICA7OwogICAgICopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JExJQgogICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KICAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KICAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKQEAgLTI0MzAsOCArMjQ4Nyw4IEBACiAgICAgZXNhYwogCiAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KICAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgogICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJwpAQCAtMjQ0NCw3ICsyNTAxLDcgQEAKIAogICAqKQogICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCAkbGlibmFtZS5saWInCiAgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKICAgICA7OwogICBlc2FjCkBAIC0yNDU3LDggKzI1MTQsOCBAQAogICB2ZXJzaW9uX3R5cGU9ZGFyd2luCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKICAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCkBAIC0yNDcxLDggKzI1MjgsOCBAQAogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIDs7CiAKQEAgLTI0OTAsMTIgKzI1NDcsMTIgQEAKICAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAogICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KICAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgICAgIG5lZWRfdmVyc2lvbj1ubwogICAgICAgbmVlZF9saWJfcHJlZml4PW5vCiAgICAgICA7OwogICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwogICAgICAgbmVlZF92ZXJzaW9uPXllcwogICAgICAgOzsKICAgZXNhYwpAQCAtMjUyMCwyNiArMjU3NywxNSBAQAogICBlc2FjCiAgIDs7CiAKLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KIGhhaWt1KikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCiAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgIDs7CkBAIC0yNTU3LDkgKzI2MDMsOSBAQAogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCiAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGlmIHRlc3QgMzIgPSAiJEhQVVhfSUE2NF9NT0RFIjsgdGhlbgogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgogICAgIGVsc2UKICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKQEAgLTI1NzIsOCArMjYxOCw4IEBACiAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCiAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogICAgIDs7CkBAIC0yNTgyLDggKzI2MjgsOCBAQAogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCiAgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICAgIDs7CiAgIGVzYWMKICAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgpAQCAtMjU5Niw4ICsyNjQyLDggQEAKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwpAQCAtMjYwOCw3ICsyNjU0LDcgQEAKICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKICAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCiAJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKIAllbHNlCiAJCXZlcnNpb25fdHlwZT1pcml4CkBAIC0yNjE2LDggKzI2NjIsOCBAQAogICBlc2FjCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JwogICBjYXNlICRob3N0X29zIGluCiAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCiAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQpAQCAtMjYzNiw4ICsyNjgyLDggQEAKICAgZXNhYwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIC91c3IvbG9jYWwvbGliJGxpYnN1ZmYiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiIKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICA7OwogCkBAIC0yNjQ2LDEzICsyNjkyLDMzIEBACiAgIGR5bmFtaWNfbGlua2VyPW5vCiAgIDs7CiAKK2xpbnV4KmFuZHJvaWQqKQorICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIGZpbmlzaF9jbWRzPQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJworICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICA7OworCiAjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCkBAIC0yNjc3LDE0ICsyNzQzLDEwIEBACiAgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKIAotICAjIEFkZCBBQkktc3BlY2lmaWMgZGlyZWN0b3JpZXMgdG8gdGhlIHN5c3RlbSBsaWJyYXJ5IHBhdGguCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliNjQgL3Vzci9saWI2NCAvbGliIC91c3IvbGliIgotCiAgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCiAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCiAgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCi0KKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCiAgIGZpCiAKICAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCkBAIC0yNzAxLDEyICsyNzYzLDEyIEBACiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKICAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwogICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKICAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKICAgZmkKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKQEAgLTI3MTYsNyArMjc3OCw3IEBACiAKIG5ld3NvczYpCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICA7OwpAQCAtMjcyNSw0NSArMjc4NywzNCBAQAogICB2ZXJzaW9uX3R5cGU9cW54CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwogICA7OwogCi1vcGVuYnNkKikKK29wZW5ic2QqIHwgYml0cmlnKikKICAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIKICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7Ci0gIGVzYWMKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCisgICAgbmVlZF92ZXJzaW9uPW5vCisgIGVsc2UKKyAgICBuZWVkX3ZlcnNpb249eWVzCisgIGZpCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIDs7CiAKIG9zMiopCiAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgorICBzaHJleHRfY21kcz0uZGxsCiAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQgJGxpYm5hbWUuYScKICAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwogICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKICAgOzsKQEAgLTI3NzIsMTEgKzI4MjMsMTEgQEAKICAgdmVyc2lvbl90eXBlPW9zZgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCiAgIDs7CiAKIHJkb3MqKQpAQCAtMjc4Nyw4ICsyODM4LDggQEAKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwpAQCAtMjc5OCwxMSArMjg0OSwxMSBAQAogCiBzdW5vczQqKQogICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogICAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBmaQogICBuZWVkX3ZlcnNpb249eWVzCkBAIC0yODEwLDggKzI4NjEsOCBAQAogCiBzeXN2NCB8IHN5c3Y0LjMqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCiAgICAgc25pKQpAQCAtMjgzMiwxMCArMjg4MywxMCBAQAogICA7OwogCiBzeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgogICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yJwogICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIGZpCiAgIDs7CkBAIC0yODQ0LDEyICsyODk1LDEyIEBACiAgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKICAgZWxzZQogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwpAQCAtMjg2Nyw3ICsyOTE4LDcgQEAKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCkBAIC0yODc1LDggKzI5MjYsOCBAQAogCiB1dHM0KikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICA7OwogCkBAIC0yODg1LDE4ICsyOTM2LDE4IEBACiAgIDs7CiBlc2FjCiBBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KK3Rlc3Qgbm8gPSAiJGR5bmFtaWNfbGlua2VyIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKIGZpCiAKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCiBmaQotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgoraWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKIGZpCiAKIF9MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCkBAIC0yOTM4LDMyICsyOTg5LDMyIEBACiAKICMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CisjIGZpbmQgYSBmaWxlIHByb2dyYW0gdGhhdCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CiBBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAogW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKIEFDX01TR19DSEVDS0lORyhbZm9yICQxXSkKIEFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKIFtjYXNlICRNQUdJQ19DTUQgaW4KIFtbXFwvKl0gfCAgPzpbXFwvXSpdKQotICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCiAgIDs7CiAqKQotICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGx0X3NhdmVfTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCiBkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCiBkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgogICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCiAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kMTsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJDEiCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kMSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvIiQxIgogICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgogCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCiAJImZpbGVfbWFnaWMgIiopCiAJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAogCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAogCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICA6CkBAIC0yOTg2LDExICszMDM3LDExIEBACiAgICAgICBicmVhawogICAgIGZpCiAgIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICBJRlM9JGx0X3NhdmVfaWZzCisgIE1BR0lDX0NNRD0kbHRfc2F2ZV9NQUdJQ19DTUQKICAgOzsKIGVzYWNdKQotTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECiBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgogICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCiBlbHNlCkBAIC0zMDA4LDcgKzMwNTksNyBAQAogCiAjIF9MVF9QQVRIX01BR0lDCiAjIC0tLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5CisjIGZpbmQgYSBmaWxlIHByb2dyYW0gdGhhdCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKIG00X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCiBbX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQogaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgpAQCAtMzAzNSwxNiArMzA4NiwxNiBAQAogQUNfQVJHX1dJVEgoW2dudS1sZF0sCiAgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKIAlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKLSAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzXSwKICAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAogCiBhY19wcm9nPWxkCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCiAgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKICAgY2FzZSAkaG9zdCBpbgogICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndwogICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKICAgKikKICAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CkBAIC0zMDU4LDcgKzMxMDksNyBAQAogICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwogCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAogICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSRhY19wcm9nCiAgICAgICA7OwogICAiIikKICAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KQEAgLTMwNjksMzcgKzMxMjAsMzcgQEAKICAgICB3aXRoX2dudV9sZD11bmtub3duCiAgICAgOzsKICAgZXNhYwotZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCitlbGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKIGVsc2UKICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCiBmaQogQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCiBbaWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgogICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZwogICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAogICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KICAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgogICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCiAgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJdGVzdCBubyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhawogCTs7CiAgICAgICAqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKIAk7OwogICAgICAgZXNhYwogICAgIGZpCiAgIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIElGUz0kbHRfc2F2ZV9pZnMKIGVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgbHRfY3ZfcGF0aF9MRD0kTEQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCiBmaV0pCi1MRD0iJGx0X2N2X3BhdGhfTEQiCitMRD0kbHRfY3ZfcGF0aF9MRAogaWYgdGVzdCAtbiAiJExEIjsgdGhlbgogICBBQ19NU0dfUkVTVUxUKCRMRCkKIGVsc2UKQEAgLTMxNTMsMTMgKzMyMDQsMTMgQEAKIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKIGNhc2UgJGhvc3Rfb3MgaW4KICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgogICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKICAgICBmaQogICAgIDs7CiAgIGRhcndpbiopCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHdsLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICAgICBlbHNlCiAgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCiAgICAgZmkKQEAgLTMxODUsMTMgKzMyMzYsMTMgQEAKICMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAogIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgogIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCi0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Vua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgogIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgogIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgogIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAotIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQotIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKyMgdGhhdCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgJ2ZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyICdwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KIAogY2FzZSAkaG9zdF9vcyBpbgogYWl4W1s0LTldXSopCkBAIC0zMjE4LDggKzMyNjksNyBAQAogICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CiAgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAogICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgotICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCi0gIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwogICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwogICBlbHNlCkBAIC0zMjU1LDEwICszMzA1LDYgQEAKICAgZmkKICAgOzsKIAotZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQogaGFpa3UqKQogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwpAQCAtMzI5Nyw3ICszMzQzLDcgQEAKICAgOzsKIAogIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIApAQCAtMzMxOSw4ICszMzY1LDggQEAKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIAotb3BlbmJzZCopCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KK29wZW5ic2QqIHwgYml0cmlnKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJwogICBlbHNlCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKQEAgLTM0MTMsMzMgKzM0NTksMzMgQEAKIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSldLCBsdF9jdl9wYXRoX05NLAogW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGx0X2N2X3BhdGhfTk09IiROTSIKKyAgbHRfY3ZfcGF0aF9OTT0kTk0KIGVsc2UKLSAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGx0X25tX3RvX2NoZWNrPSR7YWNfdG9vbF9wcmVmaXh9bm0KICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgogICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCiAgIGZpCiAgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbwotICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKICAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKLSAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKyAgICAgIHRtcF9ubT0kYWNfZGlyLyRsdF90bXBfbm0KKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IjsgdGhlbgogCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgotCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyBBZGRpbmcgdGhlICdzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKIAkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCiAJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCiAJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCiAJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQogCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKLQkgIGJyZWFrCisJICBicmVhayAyCiAJICA7OwogCSopCiAJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KIAkgICovZGV2L251bGwqKQogCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhaworCSAgICBicmVhayAyCiAJICAgIDs7CiAJICAqKQogCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dApAQCAtMzQ1MCwyMSArMzQ5NiwyMSBAQAogCWVzYWMKICAgICAgIGZpCiAgICAgZG9uZQotICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgZG9uZQogICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KIGZpXSkKLWlmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCi0gIE5NPSIkbHRfY3ZfcGF0aF9OTSIKK2lmIHRlc3Qgbm8gIT0gIiRsdF9jdl9wYXRoX05NIjsgdGhlbgorICBOTT0kbHRfY3ZfcGF0aF9OTQogZWxzZQogICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KICAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKICAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KICAgZWxzZQogICAgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFtkdW1wYmluICJsaW5rIC1kdW1wIl0sIDopCi0gICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgogICAgICpDT0ZGKikKLSAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMiCiAgICAgICA7OwogICAgICopCiAgICAgICBEVU1QQklOPToKQEAgLTM0NzIsOCArMzUxOCw4IEBACiAgICAgZXNhYwogICBmaQogICBBQ19TVUJTVChbRFVNUEJJTl0pCi0gIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KLSAgICBOTT0iJERVTVBCSU4iCisgIGlmIHRlc3QgOiAhPSAiJERVTVBCSU4iOyB0aGVuCisgICAgTk09JERVTVBCSU4KICAgZmkKIGZpCiB0ZXN0IC16ICIkTk0iICYmIE5NPW5tCkBAIC0zNTE5LDggKzM1NjUsOCBAQAogCiBjYXNlICRob3N0X29zIGluCiBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoOworICAjIGRlY2lkZSB3aGljaCBvbmUgdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAogICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KICAgKi0taWRlbnRpZnktc3RyaWN0KikKICAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKQEAgLTM1MzIsNyArMzU3OCw3IEBACiAgIDs7CiAqKQogICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKLSAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwogICA7OwogZXNhYwogXSkKQEAgLTM1NTksMTMgKzM2MDUsMjggQEAKICAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCiAgIGZpCiAgIHJtIC1mIGNvbmZ0ZXN0Kl0pCi1pZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgoraWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiOyB0aGVuCiAgIE1BTklGRVNUX1RPT0w9OgogZmkKIF9MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAogXSkjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKIAogCisjIF9MVF9ETExfREVGX1AoW0ZJTEVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIFdpbmRvd3MgRExMICcuZGVmJyBmaWxlLgorIyBLZWVwIGluIHN5bmMgd2l0aCBmdW5jX2RsbF9kZWZfcCBpbiB0aGUgbGlidG9vbCBzY3JpcHQKK0FDX0RFRlVOKFtfTFRfRExMX0RFRl9QXSwKK1tkbmwKKyAgdGVzdCBERUYgPSAiYCRTRUQgLW4gZG5sCisgICAgLWUgJ1wnJ3MvXltbCSBdXSovLydcJycgZG5sIFN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZQorICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyBkbmwgICAgICBEZWxldGUgZW1wdHkgbGluZXMgYW5kIGNvbW1lbnRzCisgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbWwkgXV0uKlwpKiQvREVGL3AnXCcnIGRubAorICAgIC1lIHEgZG5sICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCAicmVhbCIgbGluZQorICAgICQxYCIgZG5sCitdKSMgX0xUX0RMTF9ERUZfUAorCisKICMgTFRfTElCX00KICMgLS0tLS0tLS0KICMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQpAQCAtMzU3NywxMSArMzYzOCwxMSBAQAogICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKICAgOzsKICotbmNyLXN5c3Y0LjMqKQotICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKyAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0tbG13KQogICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQogICA7OwogKikKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iLWxtIikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0tbG0pCiAgIDs7CiBlc2FjCiBBQ19TVUJTVChbTElCTV0pCkBAIC0zNjAwLDcgKzM2NjEsNyBAQAogCiBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CiAKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICBjYXNlICRjY19iYXNlbmFtZSBpbgogICBudmNjKikKICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKQEAgLTM2NTIsNyArMzcxMyw3IEBACiAgIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCiAgIDs7CiBocHV4KikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KICAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJwogICBmaQogICA7OwpAQCAtMzY4NSwxNCArMzc0Niw0NCBAQAogICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKIGVzYWMKIAoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgIyBHZXRzIGxpc3Qgb2YgZGF0YSBzeW1ib2xzIHRvIGltcG9ydC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSJzZWQgLW4gLWUgJ3MvXkkgLiogXCguKlwpJC9cMS9wJyIKKyAgIyBBZGp1c3QgdGhlIGJlbG93IGdsb2JhbCBzeW1ib2wgdHJhbnNmb3JtcyB0byBmaXh1cCBpbXBvcnRlZCB2YXJpYWJsZXMuCisgIGx0X2NkZWNsX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkL2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciBcMTsvcCciCisgIGx0X2NfbmFtZV9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyIKKyAgbHRfY19uYW1lX2xpYl9ob29rPSJcCisgIC1lICdzL15JIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCdcCisgIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSAwfSwvcCciCitlbHNlCisgICMgRGlzYWJsZSBob29rcyBieSBkZWZhdWx0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9CisgIGx0X2NkZWNsX2hvb2s9CisgIGx0X2NfbmFtZV9ob29rPQorICBsdF9jX25hbWVfbGliX2hvb2s9CitmaQorCiAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgogIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCiAjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiJcCiskbHRfY2RlY2xfaG9va1wKKyIgLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgogCiAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiJcCiskbHRfY19uYW1lX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgd2l0aCBsaWIgcHJlZml4IGFuZAorIyBzeW1ib2wgYWRkcmVzcy4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiJcCiskbHRfY19uYW1lX2xpYl9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKIAogIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCiBvcHRfY3I9CkBAIC0zNzEwLDIxICszODAxLDI0IEBACiAKICAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgogICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCi0gICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiwKKyAgICAjIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgZm9yIGFueSBpbXBvcnRlZCB2YXJpYWJsZS4KICAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKICAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgogICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAogIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCiAiICAgICAvXkNPRkYgU1lNQk9MIFRBQkxFL3tmb3IoaSBpbiBoaWRlKSBkZWxldGUgaGlkZVtpXX07IlwKICIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgL14gKlN5bWJvbCBuYW1lICo6IC97c3BsaXQoXCQgMCxzbixcIjpcIik7IHNpPXN1YnN0cihzblsyXSwyKX07IlwKKyIgICAgIC9eICpUeXBlICo6IGNvZGUve3ByaW50IFwiVFwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAorIiAgICAgL14gKlR5cGUgKjogZGF0YS97cHJpbnQgXCJJXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCiAiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAogIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAogIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCi0iICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKLSIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCi0iICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKLSIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAge2Y9XCJEXCJ9OyBcJCAwfi9cKFwpLipcfC97Zj1cIlRcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLGEsL1x8fFxyLyk7IHNwbGl0KGFbMl0scyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgZixzWzFdLHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IGYsdFsxXSxzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCiAiICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKICAgZWxzZQogICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCkBAIC0zNzY0LDExICszODU4LDExIEBACiAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCiAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAogLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQotLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCiAgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCiAjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKLSNlbGlmIGRlZmluZWQoX19vc2ZfXykKKyNlbGlmIGRlZmluZWQgX19vc2ZfXwogLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCiAjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKICNlbHNlCkBAIC0zNzk0LDcgKzM4ODgsNyBAQAogewogICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCiBfTFRfRU9GCi0JICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CiAJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CiAgIHswLCAodm9pZCAqKSAwfQogfTsKQEAgLTM4MTQsOSArMzkwOCw5IEBACiAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKIAkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCiAJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLQkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBMSUJTPWNvbmZ0c3RtLiRhY19vYmpleHQKIAkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCi0JICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCSAgICBwaXBlX3dvcmtzPXllcwogCSAgZmkKIAkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCkBAIC0zODM3LDcgKzM5MzEsNyBAQAogICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCiAKICAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgotICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJHBpcGVfd29ya3MiOyB0aGVuCiAgICAgYnJlYWsKICAgZWxzZQogICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CkBAIC0zODY0LDEyICszOTU4LDE2IEBACiAgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQogX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCiAgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0XSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW50byBhIGxpc3Qgb2Ygc3ltYm9scyB0byBtYW51YWxseSByZWxvY2F0ZV0pCiBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCiAgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAogICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQogX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCiAgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCiAgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK19MVF9ERUNMKFtubV9pbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwgWzFdLAorICAgIFtUaGUgbmFtZSBsaXN0ZXIgaW50ZXJmYWNlXSkKIF9MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCiAgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKIF0pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUwpAQCAtMzg4NSwxNyArMzk4MywxOCBAQAogCiBtNF9pZihbJDFdLCBbQ1hYXSwgWwogICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCiAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCiAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwogCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGFpeCopCiAgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCiAgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKICAgICAgIDs7CiAKICAgICBhbWlnYW9zKikKQEAgLTM5MDYsOCArNDAwNSw4IEBACiAgICAgICAgIDs7CiAgICAgICBtNjhrKQogICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgogICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCiAgICAgICAgIDs7CiAgICAgICBlc2FjCkBAIC0zOTcyLDcgKzQwNzEsNyBAQAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeFtbNC05XV0qKQogCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgogCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKIAllbHNlCkBAIC00MDEzLDE0ICs0MTEyLDE0IEBACiAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KIAkgIENDKikKIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCiAJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKIAkgICAgZmkKIAkgICAgOzsKIAkgIGFDQyopCiAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKIAkgICAgY2FzZSAkaG9zdF9jcHUgaW4KIAkgICAgaHBwYSo2NCp8aWE2NCopCiAJICAgICAgIyArWiB0aGUgZGVmYXVsdApAQCAtNDA0OSw3ICs0MTQ4LDcgQEAKIAkgICAgOzsKIAllc2FjCiAJOzsKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCiAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KIAkgIEtDQyopCiAJICAgICMgS0FJIEMrKyBDb21waWxlcgpAQCAtNDA1Nyw3ICs0MTU2LDcgQEAKIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKIAkgICAgOzsKIAkgIGVjcGMqICkKLQkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgogCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwpAQCAtNDIwMiwxNyArNDMwMSwxOCBAQAogICBmaQogXSwKIFsKLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCiAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXgqKQogICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwogICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCkBAIC00MjIzLDggKzQzMjMsOCBAQAogICAgICAgICA7OwogICAgICAgbTY4aykKICAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KICAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwogICAgICAgICA7OwogICAgICAgZXNhYwpAQCAtNDMxMSw3ICs0NDExLDcgQEAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgYWl4KikKICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwogICAgICAgZWxzZQpAQCAtNDMxOSw2ICs0NDE5LDIwIEBACiAgICAgICBmaQogICAgICAgOzsKIAorICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIG5hZ2ZvciopCisgICAgICAgICMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKwogICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgpAQCAtNDMzOSw3ICs0NDUzLDcgQEAKIAk7OwogICAgICAgZXNhYwogICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCiAgICAgICA7OwogCiAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKQEAgLTQzNDgsOSArNDQ2Miw5IEBACiAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwogICAgICAgOzsKIAotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgogICAgICAgZWNjKikKIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwpAQCAtNDM3NSw2ICs0NDg5LDEyIEBACiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJwogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCiAJOzsKKyAgICAgIHRjYyopCisJIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwk7OwogICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAogCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCkBAIC00NDcyLDcgKzQ1OTIsNyBAQAogICAgICAgOzsKIAogICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKICAgICAgIGZpCkBAIC00NTAxLDcgKzQ2MjEsNyBAQAogICBmaQogXSkKIGNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICMgRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CiAgICpkamdwcCopCiAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQogICAgIDs7CkBAIC00NTc3LDcgKzQ2OTcsNyBAQAogICAgIGZpCiAgICAgOzsKICAgcHczMiopCi0gICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSRsdGRsbF9jbWRzCiAgICAgOzsKICAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgpAQCAtNDYyMyw5ICs0NzQzLDkgQEAKICAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKICAgX0xUX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KICAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKLSAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgotICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCi0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSAnICgnIGFuZCAnKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiAnYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzICdhJyBhbmQgJ2JjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyAnZCcuCiAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQogICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKICAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCkBAIC00NjQxLDcgKzQ3NjEsNyBAQAogICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCiAgICAgICB3aXRoX2dudV9sZD1ubwogICAgIGZpCiAgICAgOzsKQEAgLTQ2NDksNyArNDc2OSw3IEBACiAgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKICAgICB3aXRoX2dudV9sZD15ZXMKICAgICA7OwotICBvcGVuYnNkKikKKyAgb3BlbmJzZCogfCBiaXRyaWcqKQogICAgIHdpdGhfZ251X2xkPW5vCiAgICAgOzsKICAgZXNhYwpAQCAtNDY1OSw3ICs0Nzc5LDcgQEAKICAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCiAgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgogICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXgqKQogCSMgVGhlIEFJWCBwb3J0IG9mIEdOVSBsZCBoYXMgYWx3YXlzIGFzcGlyZWQgdG8gY29tcGF0aWJpbGl0eQpAQCAtNDY4MSwyNCArNDgwMSwyNCBAQAogICAgIGVzYWMKICAgZmkKIAotICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSI7IHRoZW4KICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPScke3dsfScKKyAgICB3bGFyYz0nJHdsJwogCiAgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKICAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KICAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCiAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCiAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKICAgICBlbHNlCiAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CiAgICAgZmkKICAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICBjYXNlIGAkTEQgLXYgfCAkU0VEIC1lICdzLyhbXildXCspXHNcKy8vJyAyPiYxYCBpbgogICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKICAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCiAgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgpAQCAtNDcxMSw3ICs0ODMxLDcgQEAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgYWl4W1szLTldXSopCiAgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgogCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KIAljYXQgPDxfTFRfRU9GIDE+JjIKIApAQCAtNDczMCw3ICs0ODUwLDcgQEAKICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCiAgICAgICBwb3dlcnBjKQogICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJwogICAgICAgICA7OwogICAgICAgbTY4aykKQEAgLTQ3NDYsNyArNDg2Niw3IEBACiAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCiAJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwogCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAgICAgICBmaQpAQCAtNDc1Niw3ICs0ODc2LDcgQEAKICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCiAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAogICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwogICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCkBAIC00NzY0LDYxICs0ODg0LDYxIEBACiAgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KIAogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQllbHNlCi0JICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZml+Ci0JJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICBlbHNlCisgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZml+CisgICAgICAgICRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAgICAgICBmaQogICAgICAgOzsKIAogICAgIGhhaWt1KikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCiAgICAgICA7OwogCiAgICAgaW50ZXJpeFtbMy05XV0qKQogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwogICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgogICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQogICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQogICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAogICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawogICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzfF58X3wiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKICAgICAgIDs7CiAKICAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKICAgICAgIHRtcF9kaWV0PW5vCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KIAljYXNlICRjY19iYXNlbmFtZSBpbgogCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCiAJZXNhYwogICAgICAgZmkKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKLQkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisJICYmIHRlc3Qgbm8gPSAiJHRtcF9kaWV0IgogICAgICAgdGhlbgogCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwogCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJwogCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgogICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCiAJICA7OwogCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCiAJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CiAJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CiAJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CkBAIC00ODI5LDQyICs0OTQ5LDQ0IEBACiAJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKIAkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KIAkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKyAgICAgICAgbmFnZm9yKikgICAgICAgICAgICAgICAgICAgICAgICAjIE5BR0ZPUiA1LjMKKyAgICAgICAgICB0bXBfc2hhcmVkZmxhZz0nLVdsLC1zaGFyZWQnIDs7CiAJeGxbW2NDXV0qIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKIAkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJwogCSAgdG1wX2FkZGZsYWc9IDs7CiAJbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKIAkgIDs7CiAJZXNhYwogCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgogCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCiAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CiAJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKIAllc2FjCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAotICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCiAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCiAgICAgICAgIGZpCiAKIAljYXNlICRjY19iYXNlbmFtZSBpbgogCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKIAkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKIAkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KIAkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwogCSAgZmkKIAkgIDs7CiAJZXNhYwpAQCAtNDg3OCw4ICs1MDAwLDggQEAKIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwogCXdsYXJjPQogICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZmkKICAgICAgIDs7CiAKQEAgLTQ4OTcsOCArNTAxOSw4IEBACiAKIF9MVF9FT0YKICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZWxzZQogCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KICAgICAgIGZpCkBAIC00OTEwLDcgKzUwMzIsNyBAQAogCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KIAljYXQgPDxfTFRfRU9GIDE+JjIKIAotKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW5ub3QKICoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAogKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQogKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKQEAgLTQ5MjUsOSArNTA0Nyw5IEBACiAJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwogCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KIAkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCSAgZWxzZQogCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAJICBmaQpAQCAtNDk0NCwxNSArNTA2NiwxNSBAQAogCiAgICAgKikKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAgICAgICBmaQogICAgICAgOzsKICAgICBlc2FjCiAKLSAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgIGlmIHRlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiOyB0aGVuCiAgICAgICBydW5wYXRoX3Zhcj0KICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQogICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KQEAgLTQ5NjgsNyArNTA5MCw3IEBACiAgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQogICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIiAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCiAJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCiAJIyBicm9rZW4gY29sbGVjdDIuCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZApAQCAtNDk3NiwxMiArNTA5OCwxMiBAQAogICAgICAgOzsKIAogICAgIGFpeFtbNC05XV0qKQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAogCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgogCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KIAlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKKwlub19lbnRyeV9mbGFnPQogICAgICAgZWxzZQogCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgogCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KQEAgLTQ5OTksNyArNTEyMSw3IEBACiAJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KIAljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCiAJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICBpZiAodGVzdCB4LWJydGwgPSAieCRsZF9mbGFnIiB8fCB0ZXN0IHgtV2wsLWJydGwgPSAieCRsZF9mbGFnIik7IHRoZW4KIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKIAkgICAgYnJlYWsKIAkgIGZpCkBAIC01MDIyLDEzICs1MTQ0LDEzIEBACiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCiAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR3bC1mLCcKIAotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCiAJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCiAJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAogCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAogCSAgdGhlbgpAQCAtNTA0Nyw2MSArNTE2OSw2MSBAQAogCSAgOzsKIAllc2FjCiAJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIickd2wtRycKIAlmaQogICAgICAgZWxzZQogCSMgbm90IHVzaW5nIGdjYwotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQogCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CiAJICBzaGFyZWRfZmxhZz0nLUcnCiAJZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSckd2wtRycKIAkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCiAJICBmaQogCWZpCiAgICAgICBmaQogCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLWJleHBhbGwnCiAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCiAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KIAkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKIAkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCiAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCiAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgogICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCiAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZwogICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCiAJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgogCWVsc2UKIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAJICMgZW1wdHkgZXhlY3V0YWJsZS4KIAkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLQkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCiAJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJwotCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm5vdG9rJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJworCSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICBlbHNlCiAJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwogCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKIAkgIGZpCiAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCiAJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAkd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCiAJZmkKICAgICAgIGZpCiAgICAgICA7OwpAQCAtNTExMCw3ICs1MjMyLDcgQEAKICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCiAgICAgICBwb3dlcnBjKQogICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJwogICAgICAgICA7OwogICAgICAgbTY4aykKQEAgLTUxNDAsMTYgKzUyNjIsMTcgQEAKIAkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgogCWxpYmV4dD1saWIKIAkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0iLmRsbCIKKwlzaHJleHRfY21kcz0uZGxsCiAJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgZWxzZQotCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgZml+Ci0JICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0JICBsaW5rbmFtZXM9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+bGlua25hbWVzPScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgX0xUX0RMTF9ERUZfUChbJGV4cG9ydF9zeW1ib2xzXSk7IHRoZW4KKyAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7CisgICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworICAgICAgICAgIGZpfgorICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKyAgICAgICAgICBsaW5rbmFtZXM9JwogCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KIAkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJwogCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwpAQCAtNTE1OCwxOCArNTI4MSwxOCBAQAogCSMgRG9uJ3QgdXNlIHJhbmxpYgogCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCiAJX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLQkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0JICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCi0JICAgICouZXhlfCouRVhFKSA7OwotCSAgICAqKQotCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKLQkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgotCSAgICAgIDs7Ci0JICBlc2FjfgotCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLQkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLQkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7Ci0JICBmaScKKyAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKyAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhY34KKyAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKyAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKyAgICAgICAgICBmaScKIAk7OwogICAgICAgKikKIAkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKQEAgLTUxNzgsNyArNTMwMSw3IEBACiAJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KIAlsaWJleHQ9bGliCiAJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9Ii5kbGwiCisJc2hyZXh0X2NtZHM9LmRsbAogCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKIAkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgpAQCAtNTIyOCwzMyArNTM1MSwzMyBAQAogICAgICAgOzsKIAogICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwogCiAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAogICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKICAgICAgIDs7CiAKICAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCiAJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKIAkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KIAlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKQEAgLTUyNjIsMjUgKzUzODUsMjUgQEAKICAgICAgIDs7CiAKICAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KIAljYXNlICRob3N0X2NwdSBpbgogCWhwcGEqNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAlpYTY0KikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJKikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAllc2FjCiAgICAgICBlbHNlCiAJY2FzZSAkaG9zdF9jcHUgaW4KIAlocHBhKjY0KikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAlpYTY0KikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJKikKIAltNF9pZigkMSwgW10sIFsKQEAgLTUyODgsMTQgKzU0MTEsMTQgQEAKIAkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQogCSAgX0xUX0xJTktFUl9PUFRJT04oW2lmICRDQyB1bmRlcnN0YW5kcyAtYl0sCiAJICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9fYiwgJDEpLCBbLWJdLAotCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddLAogCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyddKV0sCi0JICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSkKKwkgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSkKIAkgIDs7CiAJZXNhYwogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJwogCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKIAogCWNhc2UgJGhvc3RfY3B1IGluCkBAIC01MzA2LDcgKzU0MjksNyBAQAogCSopCiAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwogCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLQkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKIAogCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKIAkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgpAQCAtNTMxNywxNiArNTQ0MCwxNiBAQAogICAgICAgOzsKIAogICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAogCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgogCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCiAJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAogCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKLQkgIFtzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgIFtzYXZlX0xERkxBR1M9JExERkxBR1MKKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR3bC1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wvZGV2L251bGwiCiAJICAgQUNfTElOS19JRkVMU0UoCiAJICAgICBbQUNfTEFOR19TT1VSQ0UoCiAJICAgICAgICBbQUNfTEFOR19DQVNFKFtDXSwgW1tpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9XV0sCkBAIC01MzM5LDE2ICs1NDYyLDE2IEBACiAgICAgICBlbmRdXSldKV0sCiAJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllc10sCiAJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKLSAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQotCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICAgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTXSkKKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zICR3bC1leHBvcnRzX2ZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJZmkKICAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBmaQogICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwpAQCAtNTM2OCw3ICs1NDkxLDcgQEAKICAgICBuZXdzb3M2KQogICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwogICAgICAgOzsKQEAgLTUzNzYsMjcgKzU0OTksMTkgQEAKICAgICAqbnRvKiB8ICpxbngqKQogICAgICAgOzsKIAotICAgIG9wZW5ic2QqKQorICAgIG9wZW5ic2QqIHwgYml0cmlnKikKICAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKIAlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwogCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgogCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCiAJZWxzZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCi0JICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgICAgIDs7Ci0JICAgKikKLQkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKIAlmaQogICAgICAgZWxzZQogCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KQEAgLTU0MTIsMjggKzU1MjcsMjggQEAKICAgICAgIDs7CiAKICAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogICAgICAgZWxzZQogCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGZpCiAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKICAgICAgIDs7CiAKICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1tc3ltICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLWlucHV0ICR3bCRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwogCiAJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQogCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKQEAgLTU0NDQsMjQgKzU1NTksMjQgQEAKIAogICAgIHNvbGFyaXMqKQogICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0Jd2xhcmM9JyR7d2x9JwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJd2xhcmM9JyR3bCcKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAgICAgICBlbHNlCiAJY2FzZSBgJENDIC1WIDI+JjFgIGluCiAJKiJDb21waWxlcnMgNS4wIiopCiAJICB3bGFyYz0nJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICAgJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKIAkgIDs7CiAJKikKLQkgIHdsYXJjPScke3dsfScKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICB3bGFyYz0nJHdsJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAJICA7OwogCWVzYWMKICAgICAgIGZpCkBAIC01NDcxLDExICs1NTg2LDExIEBACiAgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwogICAgICAgKikKIAkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKKwkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgJyR3bCcsCiAJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCiAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCiAJZWxzZQogCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwogCWZpCkBAIC01NDg1LDEwICs1NjAwLDEwIEBACiAgICAgICA7OwogCiAgICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKyAgICAgIGlmIHRlc3Qgc2VxdWVudCA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCiAJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwogCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgIGZpCkBAIC01NTM3LDQzICs1NjUyLDQzIEBACiAgICAgICA7OwogCiAgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKLSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JwogICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwogICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwogCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBmaQogICAgICAgOzsKIAogICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBOb3RlOiBXZSBDQU5OT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAogICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwogICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCiAgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CiAgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKICAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosbm9kZWZzJwogICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiwkbGliZGlyJwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCiAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmV4cG9ydCcKICAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKIAotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZmkKICAgICAgIDs7CiAKQEAgLTU1ODgsMTcgKzU3MDMsMTcgQEAKICAgICAgIDs7CiAgICAgZXNhYwogCi0gICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgIGlmIHRlc3Qgc25pID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KICAgICAgIGNhc2UgJGhvc3QgaW4KICAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUJsYXJnZWR5bnN5bScKIAk7OwogICAgICAgZXNhYwogICAgIGZpCiAgIGZpCiBdKQogQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQotdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwordGVzdCBubyA9ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCiBfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCiAKQEAgLTU2MTUsNyArNTczMCw3IEBACiAgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwogCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyx5ZXMgPSAiJEdDQywkZW5hYmxlX3NoYXJlZCI7IHRoZW4KICAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCiAgICAgKid+JyopCiAgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCkBAIC01Njk1LDEyICs1ODEwLDEyIEBACiBfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JdLCBbMV0sCiAgICAgW1doZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnRdKQogX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RdLCBbMF0sCi0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwogICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKIF9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAotICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKICAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKLSAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICRzaGxpYnBhdGhfdmFyIGlmIHRoZQogICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKIF9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKICAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKQEAgLTU3NDEsMTAgKzU4NTYsMTAgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDIGNvbXBpbGVyIGFyZSBzdWl0YWJseQogIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCi0jIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgogbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKIFttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCi1sdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0NDPSRDQwogQUNfTEFOR19QVVNIKEMpCiAKICMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KQEAgLTU3ODQsMTggKzU4OTksMTggQEAKICAgTFRfU1lTX0RMT1BFTl9TRUxGCiAgIF9MVF9DTURfU1RSSVBMSUIKIAotICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgIyBSZXBvcnQgd2hhdCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQogICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCiAKICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKyAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubwogCiAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAogICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgYWl4MyopCi0gICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwogICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCiAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCiAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCkBAIC01ODAzLDggKzU5MTgsOCBAQAogICAgIDs7CiAKICAgYWl4W1s0LTldXSopCi0gICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSIgJiYgdGVzdCBubyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKyAgICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCiAgICAgZmkKICAgICA7OwogICBlc2FjCkBAIC01ODEyLDEzICs1OTI3LDEzIEBACiAKICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQogICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcwogICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCiAKICAgX0xUX0NPTkZJRygkMSkKIGZpCiBBQ19MQU5HX1BPUAotQ0M9IiRsdF9zYXZlX0NDIgorQ0M9JGx0X3NhdmVfQ0MKIF0pIyBfTFRfTEFOR19DX0NPTkZJRwogCiAKQEAgLTU4MjYsMTQgKzU5NDEsMTQgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKICMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQotIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KIG00X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKIFttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKIG00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKIG00X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAotaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCBubyAhPSAiJENYWCIgJiYKKyAgICAoICh0ZXN0IGcrKyA9ICIkQ1hYIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0IGcrKyAhPSAiJENYWCIpKSk7IHRoZW4KICAgQUNfUFJPR19DWFhDUFAKIGVsc2UKICAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCkBAIC01ODc1LDcgKzU5OTAsNyBAQAogIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQogIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAogIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCi1pZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciI7IHRoZW4KICAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKICAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgogCkBAIC01OTE3LDM1ICs2MDMyLDM1IEBACiAgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KICAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKICAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5Ci0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgogICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJwogICAgIGVsc2UKICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KICAgICBmaQogCi0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgogICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KIAogICAgICAgTFRfUEFUSF9MRAogCiAgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKICAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCiAKICAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKICAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bwogICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgICAgICB3bGFyYz0nJHt3bH0nCisgICAgICAgIHdsYXJjPSckd2wnCiAKICAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgogICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8CiAJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCiAgICAgICAgIGVsc2UKICAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CiAgICAgICAgIGZpCkBAIC01OTgxLDEyICs2MDk2LDEyIEBACiAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KICAgICAgICAgOzsKICAgICAgIGFpeFtbNC05XV0qKQotICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKICAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCiAgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLSAgICAgICAgICBub19lbnRyeV9mbGFnPSIiCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0KICAgICAgICAgZWxzZQogICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KIApAQCAtNjAyMCwxMyArNjEzNSwxMyBAQAogICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwogICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKICAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisgICAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHdsLWYsJwogCi0gICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCiAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCiAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCiAgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAogCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKIAkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCiAJICB0aGVuCkBAIC02MDQ0LDU2ICs2MTU5LDU2IEBACiAJICBmaQogICAgICAgICAgIGVzYWMKICAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0kc2hhcmVkX2ZsYWcnICR3bC1HJwogCSAgZmkKICAgICAgICAgZWxzZQogICAgICAgICAgICMgbm90IHVzaW5nIGdjYwotICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkgICMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCiAJICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgogCSAgc2hhcmVkX2ZsYWc9Jy1HJwogICAgICAgICAgIGVsc2UKLQkgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPSckd2wtRycKIAkgICAgZWxzZQotCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCiAJICAgIGZpCiAgICAgICAgICAgZmkKICAgICAgICAgZmkKIAotICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtYmV4cGFsbCcKICAgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCiAgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bwogCSMgZXhwb3J0LgogICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotICAgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCiAgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCiAgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgogICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwogICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQogICAgICAgICAgICMgZXhlY3V0YWJsZS4KICAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKIAotICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCiAgICAgICAgIGVsc2UKLSAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKIAkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCiAgICAgICAgICAgZWxzZQogCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KIAkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgogCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAogCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJwotCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtYmVybm90b2snCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJvaycKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCi0JICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICAgIGVsc2UKIAkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKIAkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKQEAgLTYxMDEsNyArNjIxNiw3IEBACiAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKIAkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkCiAJICAgICMgbGlicmFyaWVzLgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwogICAgICAgICAgIGZpCiAgICAgICAgIGZpCiAgICAgICAgIDs7CkBAIC02MTExLDcgKzYyMjYsNyBAQAogCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCiAJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCiAJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogCWVsc2UKIAkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KIAlmaQpAQCAtNjEzOSw1NyArNjI1NCw1OCBAQAogCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KIAkgIGxpYmV4dD1saWIKIAkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisJICBzaHJleHRfY21kcz0uZGxsCiAJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgICBlbHNlCi0JICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0JICAgIGZpfgotCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0JICAgIGxpbmtuYW1lcz0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgX0xUX0RMTF9ERUZfUChbJGV4cG9ydF9zeW1ib2xzXSk7IHRoZW4KKyAgICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgICBmaX4KKyAgICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKyAgICAgICAgICAgIGxpbmtuYW1lcz0nCiAJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCiAJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJwogCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCiAJICAjIERvbid0IHVzZSByYW5saWIKIAkgIF9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCiAJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCi0JICAgICAgKi5leGV8Ki5FWEUpIDs7Ci0JICAgICAgKikKLQkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgotCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgotCQk7OwotCSAgICBlc2FjfgotCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgotCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0JICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7Ci0JICAgIGZpJworICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKyAgICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7CisgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhY34KKyAgICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisgICAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKyAgICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKyAgICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgICBmaScKIAkgIDs7CiAJKikKIAkgICMgZysrCiAJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAogCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0JICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCiAJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKIAkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KIAkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwogCiAJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICAgIGVsc2UKLQkgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgICBmaX4KLQkgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSAgICAjIGlzOyBvdGhlcndpc2UsIHByZXBlbmQgRVhQT1JUUy4uLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgX0xUX0RMTF9ERUZfUChbJGV4cG9ydF9zeW1ib2xzXSk7IHRoZW4KKyAgICAgICAgICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICAgIGZpfgorICAgICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKIAkgIGVsc2UKIAkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogCSAgZmkKQEAgLTYyMzQsMTggKzYzNTAsMTUgQEAKICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKICAgICAgICAgOzsKIAotICAgICAgZ251KikKLSAgICAgICAgOzsKLQogICAgICAgaGFpa3UqKQotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKICAgICAgICAgOzsKIAogICAgICAgaHB1eDkqKQotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJwogICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwogICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwogICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAogCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdApAQCAtNjI1Nyw3ICs2MzcwLDcgQEAKICAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KICAgICAgICAgICAgIDs7CiAgICAgICAgICAgYUNDKikKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKICAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgogICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCkBAIC02MjY2LDExICs2Mzc5LDExIEBACiAgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQogICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQogICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCiAgICAgICAgICAgICA7OwogICAgICAgICAgICopCi0gICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CiAgICAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KQEAgLTYyODAsMTUgKzYzOTMsMTUgQEAKICAgICAgICAgOzsKIAogICAgICAgaHB1eDEwKnxocHV4MTEqKQotICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCiAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAKICAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgogICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCiAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAqKQotCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCiAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgZXNhYwogICAgICAgICBmaQpAQCAtNjMxNCwxMyArNjQyNywxMyBAQAogICAgICAgICAgIGFDQyopCiAJICAgIGNhc2UgJGhvc3RfY3B1IGluCiAJICAgICAgaHBwYSo2NCopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKIAkgICAgICAgIDs7CiAJICAgICAgaWE2NCopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgICAgICA7OwogCSAgICAgICopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKIAkgICAgICAgIDs7CiAJICAgIGVzYWMKIAkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwpAQCAtNjMzMSwyMCArNjQ0NCwyMCBAQAogCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQogCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CiAJICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCiAJICAgIDs7CiAgICAgICAgICAgKikKLQkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgogCSAgICAgICAgICBocHBhKjY0KikKLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgICAgICAgICAgOzsKIAkgICAgICAgICAgaWE2NCopCi0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICAgICAgICAgIDs7CiAJICAgICAgICAgICopCi0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgICAgICAgICAgOzsKIAkgICAgICAgIGVzYWMKIAkgICAgICBmaQpAQCAtNjM1OSwyMiArNjQ3MiwyMiBAQAogICAgICAgaW50ZXJpeFtbMy05XV0qKQogCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KIAlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwogCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KIAkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CiAJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQogCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKIAkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCiAJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCiAJOzsKICAgICAgIGlyaXg1KiB8IGlyaXg2KikKICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgICAgICBDQyopCiAJICAgICMgU0dJIEMrKwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCiAJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwogCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKQEAgLTYzODMsMjIgKzY0OTYsMjIgQEAKIAkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCiAJICAgIDs7CiAgICAgICAgICAgKikKLQkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAkgICAgICBlbHNlCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgIC1vICRsaWInCiAJICAgICAgZmkKIAkgICAgZmkKIAkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCiAJICAgIDs7CiAgICAgICAgIGVzYWMKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAgICAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcwogICAgICAgICA7OwogCi0gICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQogICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgogICAgICAgICAgIEtDQyopCiAJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKQEAgLTY0MDYsOCArNjUxOSw4IEBACiAJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKIAkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQogCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKIAkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwogCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KIAkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCkBAIC02NDE2LDEwICs2NTI5LDEwIEBACiAJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCiAJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKIAkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCiAKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJwogCiAJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwogCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCkBAIC02NDMzLDU5ICs2NTQ2LDU5IEBACiAJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCiAJICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgogCSAgICAgICoiVmVyc2lvbiA3LiIqKQotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJCTs7CiAJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKIAkgICAgICAgIHRtcF9pZHluPQogCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KIAkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CiAJCWVzYWMKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkJOzsKIAkgICAgZXNhYwogCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICAgIDs7CiAgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCiAgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgogCSAgICBjYXNlIGAkQ0MgLVZgIGluCiAJICAgICpwZ0NDXCBbWzEtNV1dLiogfCAqcGdjcHBcIFtbMS01XV0uKikKIAkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotCQlybSAtcmYgJHRwbGRpcn4KLQkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgotCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisgICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJwogCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotCQlybSAtcmYgJHRwbGRpcn4KLQkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KLQkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+Ci0JCSRSQU5MSUIgJG9sZGxpYicKKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorICAgICAgICAgICAgICAgICRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorICAgICAgICAgICAgICAgICRSQU5MSUIgJG9sZGxpYicKIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotCQlybSAtcmYgJHRwbGRpcn4KLQkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0JCXJtIC1yZiAkdHBsZGlyfgotCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKyAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkgICAgICA7OwogCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCSAgICAgIDs7CiAJICAgIGVzYWMKIAotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLS1ycGF0aCAkd2wkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAgICAgICAgICAgICA7OwogCSAgY3h4KikKIAkgICAgIyBDb21wYXEgQysrCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKIAogCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAogCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCkBAIC02NDk5LDE4ICs2NjEyLDE4IEBACiAJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCiAJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKIAkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICJYJGxpc3QiIHwgJFhzZWQnCiAJICAgIDs7CiAJICB4bCogfCBtcGl4bCogfCBiZ3hsKikKIAkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgICRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXZlcnNpb24tc2NyaXB0ICR3bCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwogCSAgICBmaQogCSAgICA7OwogCSAgKikKQEAgLTY1MTgsMTAgKzY2MzEsMTAgQEAKIAkgICAgKlN1blwgQyopCiAJICAgICAgIyBTdW4gQysrIDUuOQogCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwogCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCiAKIAkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCkBAIC02NTc5LDIyICs2NjkyLDE3IEBACiAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCiAJOzsKIAotICAgICAgb3BlbmJzZDIqKQotICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0KLSAgICAgIG9wZW5ic2QqKQorICAgICAgb3BlbmJzZCogfCBiaXRyaWcqKQogCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCiAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwogCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCiAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJwogCSAgZmkKIAkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKIAllbHNlCkBAIC02NjEwLDkgKzY3MTgsOSBAQAogCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCiAJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKIAkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKIAotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwogCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAKIAkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCkBAIC02NjMwLDE3ICs2NzM4LDE3IEBACiAgICAgICAgICAgY3h4KikKIAkgICAgY2FzZSAkaG9zdCBpbgogCSAgICAgIG9zZjMqKQotCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKIAkJOzsKIAkgICAgICAqKQogCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+Ci0JICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KLQkgICAgICAgICAgJFJNICRsaWIuZXhwJworICAgICAgICAgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHdsLWlucHV0ICR3bCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKyAgICAgICAgICAgICAgICAgICRSTSAkbGliLmV4cCcKIAkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKIAkJOzsKIAkgICAgZXNhYwpAQCAtNjY1NSwyMSArNjc2MywyMSBAQAogCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQogCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CiAJICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCiAJICAgIDs7CiAJICAqKQotCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCiAJICAgICAgY2FzZSAkaG9zdCBpbgogCSAgICAgICAgb3NmMyopCi0JICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAJCSAgOzsKIAkgICAgICAgICopCi0JICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1tc3ltICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCQkgIDs7CiAJICAgICAgZXNhYwogCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogCiAJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwpAQCAtNjcxNSw5ICs2ODIzLDkgQEAKIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwogICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCiAJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKIAkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1NICR3bCRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAKIAkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKIAkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KQEAgLTY3MjUsNyArNjgzMyw3IEBACiAJICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKIAkgICAgICAqKQogCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCQkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLgogCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKIAkJX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwogCSAgICAgICAgOzsKQEAgLTY3NDIsMzAgKzY4NTAsMzAgQEAKIAkgICAgOzsKICAgICAgICAgICBnY3gqKQogCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCiAKIAkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCiAJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKIAkgICAgOzsKICAgICAgICAgICAqKQogCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgotCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdYWCwkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLXogJHt3bH1kZWZzJwogCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKIAkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAKIAkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgogCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCiAJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCiAJICAgICAgZWxzZQotCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSAnLUcnIE5PVCAnLXNoYXJlZCcgb24gdGhpcwogCSAgICAgICAgIyBwbGF0Zm9ybS4KLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJwogCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICAgICAgICAgJENDIC1HIC1ub3N0ZGxpYiAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKIAogCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwogCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCkBAIC02NzczLDExICs2ODgxLDExIEBACiAJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJwogCSAgICAgIGZpCiAKLQkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiAkd2wkbGliZGlyJwogCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KIAkJc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKIAkJKikKLQkJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JwogCQkgIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQpAQCAtNjc4Niw1MiArNjg5NCw1MiBAQAogICAgICAgICA7OwogCiAgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKLSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JwogICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwogICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwogCiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgogICAgICAgICBDQyopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCSopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAgICAgICBlc2FjCiAgICAgICA7OwogCiAgICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBOb3RlOiBXZSBDQU5OT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAogCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KIAkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKIAkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CiAJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCiAJIyBhcyAteiBkZWZzLgotCV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosbm9kZWZzJwogCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwogCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIsJGxpYmRpcicKIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKIAlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1CZXhwb3J0JwogCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKIAogCWNhc2UgJGNjX2Jhc2VuYW1lIGluCiAgICAgICAgICAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJG9sZG9ianN+Ci0JICAgICAgJyIkX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkiCisgICAgICAgICAgICAgICciJF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIgogCSAgICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+Ci0JICAgICAgJyIkX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpIgorICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCiAJICAgIDs7CiAJICAqKQotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgICAgOzsKIAllc2FjCiAgICAgICA7OwpAQCAtNjg2MiwxMCArNjk3MCwxMCBAQAogICAgIGVzYWMKIAogICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLSAgICB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgdGVzdCBubyA9ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCi0gICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKLSAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHWFgKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECiAKICAgICAjIyBDQVZFQVQgRU1QVE9SOgogICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCkBAIC02ODkyLDcgKzcwMDAsNyBAQAogICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKICAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCiAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1maSAjIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzCitmaSAjIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiCiAKIEFDX0xBTkdfUE9QCiBdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRwpAQCAtNjkxNCw5ICs3MDIyLDkgQEAKIEFDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKIGZ1bmNfc3RyaXBuYW1lX2NuZiAoKQogewotICBjYXNlICR7Mn0gaW4KLSAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKLSAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworICBjYXNlIEBTfEAyIGluCisgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJVxcXFxAU3xAMlwkJSUiYDs7CisgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJUBTfEAyXCQlJSJgOzsKICAgZXNhYwogfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgogXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKQEAgLTcwMDQsMTMgKzcxMTIsMTMgQEAKICAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubwogCiAgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KLSAgICBjYXNlICR7cHJldn0ke3B9IGluCisgICAgY2FzZSAkcHJldiRwIGluCiAKICAgICAtTCogfCAtUiogfCAtbCopCiAgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KICAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCi0gICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKLSAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorICAgICAgIGlmIHRlc3QgeC1MID0gIiRwIiB8fAorICAgICAgICAgIHRlc3QgeC1SID0gIiRwIjsgdGhlbgogCSBwcmV2PSRwCiAJIGNvbnRpbnVlCiAgICAgICAgZmkKQEAgLTcwMjYsMTYgKzcxMzQsMTYgQEAKICAgICAgICBjYXNlICRwIGluCiAgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKICAgICAgICBlc2FjCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLQkgY2FzZSAke3ByZXZ9IGluCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KKwkgY2FzZSAkcHJldiBpbgogCSAtTCB8IC1SKQogCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQogCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQogCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgogCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgotCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSRwcmV2JHAKIAkgICBlbHNlCi0JICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAkcHJldiRwIgogCSAgIGZpCiAJICAgOzsKIAkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKQEAgLTcwNDMsOSArNzE1MSw5IEBACiAJIGVzYWMKICAgICAgICBlbHNlCiAJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCi0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9JHByZXYkcAogCSBlbHNlCi0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHByZXYkcCIKIAkgZmkKICAgICAgICBmaQogICAgICAgIHByZXY9CkBAIC03MDYwLDE1ICs3MTY4LDE1IEBACiAJIGNvbnRpbnVlCiAgICAgICAgZmkKIAotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KIAkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0kcAogCSBlbHNlCiAJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgogCSBmaQogICAgICAgIGVsc2UKIAkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0kcAogCSBlbHNlCiAJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCiAJIGZpCkBAIC03MTE1LDcgKzcyMjMsNyBAQAogICAgICAgOzsKICAgICBlc2FjCiAKLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzICE9ICIkc29sYXJpc191c2Vfc3RscG9ydDQiOyB0aGVuCiAgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwogICAgIGZpCiAgICAgOzsKQEAgLTcxMzgsNyArNzI0Niw3IEBACiAgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKICAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCiAgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzICE9ICIkc29sYXJpc191c2Vfc3RscG9ydDQiOyB0aGVuCiAgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwogICAgIGZpCiAgICAgOzsKQEAgLTcxNTIsNyArNzI2MCw3IEBACiBlc2FjCiAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KIGlmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCi0gX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICRTRUQgLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCiBmaQogX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCiAgICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCkBAIC03MTcyLDEwICs3MjgwLDEwIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQogIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgogbTRfZGVmdW4oW19MVF9MQU5HX0Y3N19DT05GSUddLAogW0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQotaWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KK2lmIHRlc3QgLXogIiRGNzciIHx8IHRlc3Qgbm8gPSAiJEY3NyI7IHRoZW4KICAgX2x0X2Rpc2FibGVfRjc3PXllcwogZmkKIApAQCAtNzIxMiw3ICs3MzIwLDcgQEAKICMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKICMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKICMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgotaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0Y3NyI7IHRoZW4KICAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKICAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCiAgICAgICBzdWJyb3V0aW5lIHQKQEAgLTcyMzQsNyArNzM0Miw3IEBACiAgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKIAogICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfQ0M9JENDCiAgIGx0X3NhdmVfR0NDPSRHQ0MKICAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwogICBDQz0ke0Y3Ny0iZjc3In0KQEAgLTcyNDgsMjEgKzczNTYsMjEgQEAKICAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCiAKICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisgICAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubwogCiAgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCiAgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeDMqKQotICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwogICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgogICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKICAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCiAgICAgICAgIGZpCiAgICAgICAgIDs7CiAgICAgICBhaXhbWzQtOV1dKikKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCi0JICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IiAmJiB0ZXN0IG5vID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KIAlmaQogICAgICAgICA7OwogICAgIGVzYWMKQEAgLTcyNzAsMTEgKzczNzgsMTEgQEAKIAogICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKICAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKICAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCiAKLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgotICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9JEc3NworICAgIF9MVF9UQUdWQVIoTEQsICQxKT0kTEQKIAogICAgICMjIENBVkVBVCBFTVBUT1I6CiAgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKQEAgLTcyOTEsOSArNzM5OSw5IEBACiAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgogCiAgIEdDQz0kbHRfc2F2ZV9HQ0MKLSAgQ0M9IiRsdF9zYXZlX0NDIgotICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKLWZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GNzciCiAKIEFDX0xBTkdfUE9QCiBdKSMgX0xUX0xBTkdfRjc3X0NPTkZJRwpAQCAtNzMwMywxMSArNzQxMSwxMSBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQogIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgogbTRfZGVmdW4oW19MVF9MQU5HX0ZDX0NPTkZJR10sCiBbQUNfTEFOR19QVVNIKEZvcnRyYW4pCiAKLWlmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCAiWCRGQyIgPSAiWG5vIjsgdGhlbgoraWYgdGVzdCAteiAiJEZDIiB8fCB0ZXN0IG5vID0gIiRGQyI7IHRoZW4KICAgX2x0X2Rpc2FibGVfRkM9eWVzCiBmaQogCkBAIC03MzQ0LDcgKzc0NTIsNyBAQAogIyB0aGUgRkMgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCiAjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCiAjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KLWlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0ZDIjsgdGhlbgogICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwogICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKICAgICAgIHN1YnJvdXRpbmUgdApAQCAtNzM2Niw3ICs3NDc0LDcgQEAKICAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQogCiAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi0gIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9DQz0kQ0MKICAgbHRfc2F2ZV9HQ0M9JEdDQwogICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCiAgIENDPSR7RkMtImY5NSJ9CkBAIC03MzgyLDIxICs3NDkwLDIxIEBACiAgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQogCiAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworICAgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KIAogICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAogICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXgzKikKLSAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KICAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCiAgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwogICAgICAgICBmaQogICAgICAgICA7OwogICAgICAgYWl4W1s0LTldXSopCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSIgJiYgdGVzdCBubyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCiAJZmkKICAgICAgICAgOzsKICAgICBlc2FjCkBAIC03NDA0LDExICs3NTEyLDExIEBACiAKICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCiAgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCiAgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQogCi0gICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJGFjX2N2X2ZjX2NvbXBpbGVyX2dudSIKLSAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRhY19jdl9mY19jb21waWxlcl9nbnUKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECiAKICAgICAjIyBDQVZFQVQgRU1QVE9SOgogICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCkBAIC03NDI4LDcgKzc1MzYsNyBAQAogICBHQ0M9JGx0X3NhdmVfR0NDCiAgIENDPSRsdF9zYXZlX0NDCiAgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLWZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXMKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GQyIKIAogQUNfTEFOR19QT1AKIF0pIyBfTFRfTEFOR19GQ19DT05GSUcKQEAgLTc0MzgsNyArNzU0Niw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCiAjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgogbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAogW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKIEFDX0xBTkdfU0FWRQpAQCAtNzQ3Miw3ICs3NTgwLDcgQEAKIENGTEFHUz0kR0NKRkxBR1MKIGNvbXBpbGVyPSRDQwogX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfVEFHVkFSKExELCAkMSk9JExECiBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCiAKICMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KQEAgLTc1MDksNyArNzYxNyw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBHbyBjb21waWxlcgogIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KIG00X2RlZnVuKFtfTFRfTEFOR19HT19DT05GSUddLAogW0FDX1JFUVVJUkUoW0xUX1BST0dfR09dKWRubAogQUNfTEFOR19TQVZFCkBAIC03NTQzLDcgKzc2NTEsNyBAQAogQ0ZMQUdTPSRHT0ZMQUdTCiBjb21waWxlcj0kQ0MKIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAogX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQogCiAjIEdvIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KQEAgLTc1ODAsNyArNzY4OCw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgogIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KIG00X2RlZnVuKFtfTFRfTEFOR19SQ19DT05GSUddLAogW0FDX1JFUVVJUkUoW0xUX1BST0dfUkNdKWRubAogQUNfTEFOR19TQVZFCkBAIC03NTk2LDcgKzc3MDQsNyBAQAogbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JwogCiAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIgorbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUKIAogIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgogX0xUX1RBR19DT01QSUxFUgpAQCAtNzYwNiw3ICs3NzE0LDcgQEAKIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKIAogIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfQ0M9JENDCiBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCiBsdF9zYXZlX0dDQz0kR0NDCiBHQ0M9CkBAIC03NjM1LDcgKzc3NDMsNyBAQAogW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sIFtBQ19QUk9HX0dDSl0sCiAgIFttNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sIFtBXVtNX1BST0dfR0NKXSwKICAgICBbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwpCi0gICAgICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKKyAgICAgIHRlc3Qgc2V0ID0gIiR7R0NKRkxBR1Mrc2V0fSIgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKICAgICAgIEFDX1NVQlNUKEdDSkZMQUdTKV0pXSlbXWRubAogXSkKIApAQCAtNzc0Niw3ICs3ODU0LDcgQEAKICMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCiAjIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgogZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCi0gIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCisgIHRlc3QgISAtZiAiJGx0X2FjX3NlZCIgJiYgY29udGludWUKICAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCiAgIGx0X2FjX2NvdW50PTAKICAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCkBAIC03NzYzLDkgKzc4NzEsOSBAQAogICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCiAgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhawogICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIHRlc3QgMTAgLWx0ICIkbHRfYWNfY291bnQiICYmIGJyZWFrCiAgICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKLSAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9hY19jb3VudCIgLWd0ICIkbHRfYWNfbWF4IjsgdGhlbgogICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAogICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAogICAgIGZpCkBAIC03Nzg5LDI3ICs3ODk3LDcgQEAKICMgRmluZCBvdXQgd2hldGhlciB0aGUgc2hlbGwgaXMgQm91cm5lIG9yIFhTSSBjb21wYXRpYmxlLAogIyBvciBoYXMgc29tZSBvdGhlciB1c2VmdWwgZmVhdHVyZXMuCiBtNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKLVtBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHNdKQotIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKLXhzaV9zaGVsbD1ubwotKCBfbHRfZHVtbXk9ImEvYi9jIgotICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAotICAgICAgPSBjLGEvYixiL2MsIFwKLSAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCi0gICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKLSAgJiYgeHNpX3NoZWxsPXllcwotQUNfTVNHX1JFU1VMVChbJHhzaV9zaGVsbF0pCi1fTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbeHNpX3NoZWxsPSckeHNpX3NoZWxsJ10pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgIis9Il0pCi1sdF9zaGVsbF9hcHBlbmQ9bm8KLSggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiRbMV0rPVwkWzJdIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKLSAgICA+L2Rldi9udWxsIDI+JjEgXAotICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCi1BQ19NU0dfUkVTVUxUKFskbHRfc2hlbGxfYXBwZW5kXSkKLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnXSkKLQotaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCitbaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgIGx0X3Vuc2V0PXVuc2V0CiBlbHNlCiAgIGx0X3Vuc2V0PWZhbHNlCkBAIC03ODMzLDEwMiArNzkyMSw5IEBACiBdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCiAKIAotIyBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFIChGVU5DTkFNRSwgUkVQTEFDRU1FTlQtQk9EWSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEluIGAkY2ZnZmlsZScsIGxvb2sgZm9yIGZ1bmN0aW9uIEZVTkNOQU1FIGRlbGltaXRlZCBieSBgXkZVTkNOQU1FICgpJCcgYW5kCi0jICdefSBGVU5DTkFNRSAnLCBhbmQgcmVwbGFjZSBpdHMgYm9keSB3aXRoIFJFUExBQ0VNRU5ULUJPRFkuCi1tNF9kZWZ1bihbX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRV0sCi1bZG5sIHsKLXNlZCAtZSAnL14kMSAoKSQvLC9efSAjICQxIC9jXAotJDEgKClcCi17XAotbTRfYnBhdHN1YnN0cyhbJDJdLCBbJF0sIFtcXF0sIFteXChbCSBdXCldLCBbXFxcMV0pCi19ICMgRXh0ZW5kZWQtc2hlbGwgJDEgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLV0pCi0KLQotIyBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVwbGFjZSBleGlzdGluZyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V2ZXJhbCBzaGVsbCBmdW5jdGlvbnMgd2l0aAotIyBlcXVpdmFsZW50IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLi4KLW00X2RlZnVuKFtfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TXSwKLVtpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV0sIFtkbmwKLSAgICBjYXNlICR7MX0gaW4KLSAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7Ci0gICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0gICAgZXNhY10pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19iYXNlbmFtZV0sIFtkbmwKLSAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lXSwgW2RubAotICAgIGNhc2UgJHsxfSBpbgotICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLSAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKLSAgICBlc2FjCi0gICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zdHJpcG5hbWVdLCBbZG5sCi0gICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQotICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQotICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9Ci0gICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1dKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfbG9uZ19vcHRdLCBbZG5sCi0gICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9Ci0gICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fV0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9zaG9ydF9vcHRdLCBbZG5sCi0gICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P30KLSAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xvMm9dLCBbZG5sCi0gICAgY2FzZSAkezF9IGluCi0gICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OwotICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7Ci0gICAgZXNhY10pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY194Zm9ybV0sIFsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb10pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcml0aF0sIFsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSldKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbGVuXSwgWyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1dKQotZmkKLQotaWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF0sIFsgICAgZXZhbCAiJHsxfSs9XFwkezJ9Il0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRfcXVvdGVkXSwgW2RubAotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCi1kbmwgbTQgZXhwYW5zaW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHRoZW4gdGhlIHNoZWxsIGV2YWwgdHVybnMgdGhhdCBpbnRvIFwKLSAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Il0pCi0KLSAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JwotICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLWVsc2UKLSAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKLSAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLWZpCi0KLWlmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCi0gIEFDX01TR19XQVJOKFtVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlXSkKLWZpCi1dKQotCiAjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIERldGVybWluZSB3aGljaCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKyMgRGV0ZXJtaW5lIHdoYXQgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5CiAjIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKICMgZm9yIGNlcnRhaW4gY3Jvc3MtY29tcGlsZSBjb25maWd1cmF0aW9ucyBhbmQgbmF0aXZlIG1pbmd3LgogbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRvcHRpb25zLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQKaW5kZXggNWQ5YWNkOC4uNTBjNzcyMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQKQEAgLTEsMTQgKzEsMTQgQEAKICMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogIwotIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0jICAgSW5jLgorIyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCAyMDA3LTIwMDksIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLgogIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCiAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNyBsdG9wdGlvbnMubTQKKyMgc2VyaWFsIDggbHRvcHRpb25zLm00CiAKICMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCiBBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCkBAIC0yOSw3ICsyOSw3IEBACiBbbTRfZGVmaW5lKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pKWRubAogbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKICAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKLSAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gYCQyJ10pXSlbXWRubAorICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiAnJDInXSldKVtdZG5sCiBdKQogCiAKQEAgLTc1LDEzICs3NSwxMyBAQAogICBkbmwKICAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KICAgZG5sIHdlIHJ1biB0aGUgZGVmYXVsdCBtb2RlIGhhbmRsZXIgZm9yIHRoZSBwYWlyLiAgRm9yIGV4YW1wbGUsIGlmIG5laXRoZXIKLSAgZG5sIGBzaGFyZWQnIG5vciBgZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKKyAgZG5sICdzaGFyZWQnIG5vciAnZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKICAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6CiAgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzaGFyZWQgZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRURdKQogICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKICAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQogICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsIGRpc2FibGUtZmFzdC1pbnN0YWxsXSwKLSAgCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQorCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQogICBdKQogXSkjIF9MVF9TRVRfT1BUSU9OUwogCkBAIC0xMTIsNyArMTEyLDcgQEAKIFtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQogQUNfRElBR05PU0UoW29ic29sZXRlXSwKIFskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgYGRsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorcHV0IHRoZSAnZGxvcGVuJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCiBdKQogCiBkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CkBAIC0xNDgsNyArMTQ4LDcgQEAKIF9MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0pCiBBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAogWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQotcHV0IHRoZSBgd2luMzItZGxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitwdXQgdGhlICd3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKIF0pCiAKIGRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKQEAgLTE1Nyw5ICsxNTcsOSBAQAogCiAjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAotIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlICdzaGFyZWQnIGFuZAorIyAnZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgogbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCiBbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAogQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKQEAgLTE3MiwxNCArMTcyLDE0IEBACiAgICAgKikKICAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KICAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCiAgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCisJSUZTPSRsdF9zYXZlX2lmcwogCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCiAJICBlbmFibGVfc2hhcmVkPXllcwogCWZpCiAgICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIDs7CiAgICAgZXNhY10sCiAgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCkBAIC0yMTEsOSArMjExLDkgQEAKIAogIyBfTFRfRU5BQkxFX1NUQVRJQyhbREVGQVVMVF0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBzdGF0aWMnIGFuZAotIyBgZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgJ3N0YXRpYycgYW5kCisjICdkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ3llcycuCiBtNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKIFttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCiBBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLApAQCAtMjI2LDE0ICsyMjYsMTQgQEAKICAgICAqKQogICAgICBlbmFibGVfc3RhdGljPW5vCiAgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAogICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgorCUlGUz0kbHRfc2F2ZV9pZnMKIAlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgogCSAgZW5hYmxlX3N0YXRpYz15ZXMKIAlmaQogICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICA7OwogICAgIGVzYWNdLAogICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQpAQCAtMjY1LDkgKzI2NSw5IEBACiAKICMgX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgZmFzdC1pbnN0YWxsJwotIyBhbmQgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBMVF9JTklUIG9wdGlvbnMuCi0jIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdmYXN0LWluc3RhbGwnCisjIGFuZCAnZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgogbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCiBbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAogQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKQEAgLTI4MCwxNCArMjgwLDE0IEBACiAgICAgKikKICAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KICAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCiAgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCisJSUZTPSRsdF9zYXZlX2lmcwogCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCiAJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwogCWZpCiAgICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIDs7CiAgICAgZXNhY10sCiAgICAgW2VuYWJsZV9mYXN0X2luc3RhbGw9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFQpCkBAIC0zMDQsMTQgKzMwNCwxNCBAQAogW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbZmFzdC1pbnN0YWxsXSkKIEFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCiBbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAotdGhlIGBmYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK3RoZSAnZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCiBdKQogCiBBVV9ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAogW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSkKIEFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCiBbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAotdGhlIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQordGhlICdkaXNhYmxlLWZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQogXSkKIAogZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgpAQCAtMzIxLDkgKzMyMSw5IEBACiAKICMgX0xUX1dJVEhfUElDKFtNT0RFXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdwaWMtb25seScgYW5kICduby1waWMnCiAjIExUX0lOSVQgb3B0aW9ucy4KLSMgTU9ERSBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBib3RoJy4KKyMgTU9ERSBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICdib3RoJy4KIG00X2RlZmluZShbX0xUX1dJVEhfUElDXSwKIFtBQ19BUkdfV0lUSChbcGljXSwKICAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1waWNAPDpAPVBLR1NAOj5AXSwKQEAgLTMzNCwxOSArMzM0LDE3IEBACiAgICAgKikKICAgICAgIHBpY19tb2RlPWRlZmF1bHQKICAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCiAgICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgorCUlGUz0kbHRfc2F2ZV9pZnMKIAlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgogCSAgcGljX21vZGU9eWVzCiAJZmkKICAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgOzsKICAgICBlc2FjXSwKLSAgICBbcGljX21vZGU9ZGVmYXVsdF0pCi0KLXRlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCisgICAgW3BpY19tb2RlPW00X2RlZmF1bHQoWyQxXSwgW2RlZmF1bHRdKV0pCiAKIF9MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCiBdKSMgX0xUX1dJVEhfUElDCkBAIC0zNTksNyArMzU3LDcgQEAKIFtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtwaWMtb25seV0pCiBBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAogWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQotcHV0IHRoZSBgcGljLW9ubHknIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK3B1dCB0aGUgJ3BpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCiBdKQogCiBkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0c3VnYXIubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0c3VnYXIubTQKaW5kZXggOTAwMGEwNS4uN2NiYzYzOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHN1Z2FyLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNApAQCAtMSw2ICsxLDcgQEAKICMgbHRzdWdhci5tNCAtLSBsaWJ0b29sIG00IGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLUF1dG9jb25mLSotCiAjCi0jIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDctMjAwOCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgogIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwpAQCAtMzMsNyArMzQsNyBAQAogIyAtLS0tLS0tLS0tLS0KICMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KICMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAotIyBBdXRvY29uZi0yLjU5IHdoaWNoIHF1b3RlcyBkaWZmZXJlbnRseS4KKyMgQXV0b2NvbmYtMi41OSwgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgogbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCiBtNF9kZWZpbmUoW2x0X2Nkcl0sCiBbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKQEAgLTQ0LDcgKzQ1LDcgQEAKIAogIyBsdF9hcHBlbmQoTUFDUk8tTkFNRSwgU1RSSU5HLCBbU0VQQVJBVE9SXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJlZGVmaW5lIE1BQ1JPLU5BTUUgdG8gaG9sZCBpdHMgZm9ybWVyIGNvbnRlbnQgcGx1cyBgU0VQQVJBVE9SJ2BTVFJJTkcnLgorIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgJ1NFUEFSQVRPUicnU1RSSU5HJy4KICMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAogIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KICMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0dmVyc2lvbi5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR2ZXJzaW9uLm00CmluZGV4IDA3YTg2MDIuLmRhZWIwYWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR2ZXJzaW9uLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR2ZXJzaW9uLm00CkBAIC0xLDYgKzEsNiBAQAogIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQogIwotIyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKQEAgLTksMTUgKzksMTUgQEAKIAogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIHNlcmlhbCAzMzM3IGx0dmVyc2lvbi5tNAorIyBzZXJpYWwgNDAzOCBsdHZlcnNpb24ubTQKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKIAotbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjJdKQotbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzMzN10pCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjQuMi40MThdKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzIuNC4yLjQxOF0pCiAKIEFDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCi1bbWFjcm9fdmVyc2lvbj0nMi40LjInCi1tYWNyb19yZXZpc2lvbj0nMS4zMzM3JworW21hY3JvX3ZlcnNpb249JzIuNC4yLjQxOCcKK21hY3JvX3JldmlzaW9uPScyLjQuMi40MTgnCiBfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKIF9MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCiBdKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdH5vYnNvbGV0ZS5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR+b2Jzb2xldGUubTQKaW5kZXggYzU3M2RhOS4uNTk0NjFlNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdH5vYnNvbGV0ZS5tNAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00CkBAIC0xLDYgKzEsNyBAQAogIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCiAjCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCAyMDA3LCAyMDA5LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZQorIyAgIEZvdW5kYXRpb24sIEluYy4KICMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCkBAIC0xMSw3ICsxMiw3IEBACiAKICMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgogIwotIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKKyMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pLAogIyB3aGljaCBoYXZlIGxhdGVyIGJlZW4gY2hhbmdlZCB0byBtNF9kZWZpbmUgYXMgdGhleSBhcmVuJ3QgcGFydCBvZiB0aGUKICMgZXhwb3J0ZWQgQVBJLCBvciBtb3ZlZCB0byBBdXRvY29uZiBvciBBdXRvbWFrZSB3aGVyZSB0aGV5IGJlbG9uZy4KICMKQEAgLTI1LDcgKzI2LDcgQEAKICMgaW5jbHVkZWQgYWZ0ZXIgZXZlcnl0aGluZyBlbHNlLiAgVGhpcyBwcm92aWRlcyBhY2xvY2FsIHdpdGggdGhlCiAjIEFDX0RFRlVOcyBpdCB3YW50cywgYnV0IHdoZW4gbTQgcHJvY2Vzc2VzIGl0LCBpdCBkb2Vzbid0IGRvIGFueXRoaW5nCiAjIGJlY2F1c2UgdGhvc2UgbWFjcm9zIGFscmVhZHkgZXhpc3QsIG9yIHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCi0jIFdlIHVzZSBBQ19ERUZVTiBvdmVyIEFVX0RFRlVOIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYWNsb2NhbC0xLjYuIAorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LgogIwogIyBBbnl0aW1lIHdlIHdpdGhkcmF3IGFuIEFDX0RFRlVOIG9yIEFVX0RFRlVOLCByZW1lbWJlciB0byBhZGQgaXQgaGVyZS4KICMgWWVzLCB0aGF0IG1lYW5zIGV2ZXJ5IG5hbWUgb25jZSB0YWtlbiB3aWxsIG5lZWQgdG8gcmVtYWluIGhlcmUgdW50aWwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4KaW5kZXggYzAyZTFmMi4uZDkyYWY3NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4KQEAgLTEsNyArMSw3IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEyLjIgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTMuNCBmcm9tIE1ha2VmaWxlLmFtLgogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTE0LDIzICsxNCw1MSBAQAogCiBAU0VUX01BS0VACiBWUEFUSCA9IEBzcmNkaXJACi1hbV9fbWFrZV9kcnlydW4gPSBcCi0gIHsgXAotICAgIGFtX19kcnk9bm87IFwKK2FtX19pc19nbnVfbWFrZSA9IHRlc3QgLW4gJyQoTUFLRUZJTEVfTElTVCknICYmIHRlc3QgLW4gJyQoTUFLRUxFVkVMKScKK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKyAgICAgID8pIDs7IFwKKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisgICAgICAgICBleGl0IDE7OyBcCisgIGVzYWM7IFwKKyAgaGFzX29wdD1ubzsgXAorICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisgIGVsc2UgXAogICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAogICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAotICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCi0gICAgICAqKSBcCi0gICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCi0gICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAotICAgICAgICAgICAgKj0qfC0tKikgOzsgXAotICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCi0gICAgICAgICAgZXNhYzsgXAotICAgICAgICBkb25lOzsgXAorICAgICAgICBicz1cXDsgXAorICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKICAgICBlc2FjOyBcCi0gICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKLSAgfQorICBmaTsgXAorICBza2lwX25leHQ9bm87IFwKKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorICB7IFwKKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorICB9OyBcCisgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICBlc2FjOyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorICAgIGVzYWM7IFwKKyAgZG9uZTsgXAorICB0ZXN0ICQkaGFzX29wdCA9IHllcworYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCiBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAogcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQApAQCAtNTEsNyArNzksNyBAQAogaG9zdF90cmlwbGV0ID0gQGhvc3RACiB0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACiBzdWJkaXIgPSBtYW4KLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtCiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CiBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hc21jZmkubTQgXAogCSQodG9wX3NyY2RpcikvbTQvYXhfYXBwZW5kX2ZsYWcubTQgXApAQCAtNzMsNiArMTAxLDE4IEBACiBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2ZmaWNvbmZpZy5oCiBDT05GSUdfQ0xFQU5fRklMRVMgPQogQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAogU09VUkNFUyA9CiBESVNUX1NPVVJDRVMgPQogYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCkBAIC0xMTEsMTAgKzE1MSwxMiBAQAogYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKG1hbjNkaXIpIgogTlJPRkYgPSBucm9mZgogTUFOUyA9ICQobWFuX01BTlMpCithbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQogRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKIEFDTE9DQUwgPSBAQUNMT0NBTEAKIEFMTE9DQSA9IEBBTExPQ0FACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAogQU1fTFRMREZMQUdTID0gQEFNX0xUTERGTEFHU0AKIEFNX1JVTlRFU1RGTEFHUyA9IEBBTV9SVU5URVNURkxBR1NACiBBUiA9IEBBUkAKQEAgLTEzMCw2ICsxNzIsMTAgQEAKIENGTEFHUyA9IEBDRkxBR1NACiBDUFAgPSBAQ1BQQAogQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKIERFRlMgPSBAREVGU0AKIERFUERJUiA9IEBERVBESVJACkBAIC0xNDUsNiArMTkxLDcgQEAKIEZHUkVQID0gQEZHUkVQQAogR1JFUCA9IEBHUkVQQAogSEFWRV9MT05HX0RPVUJMRSA9IEBIQVZFX0xPTkdfRE9VQkxFQAorSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UID0gQEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVEAKIElOU1RBTEwgPSBASU5TVEFMTEAKIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQApAQCAtMTkxLDYgKzIzOCw3IEBACiBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKIGFjX2N0X0FSID0gQGFjX2N0X0FSQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAogYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QApAQCAtMzMwLDI5ICszNzgsMTQgQEAKIAl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW14zXVswLTlhLXpdKiQkLDMsO3gnIFwKIAkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCiAJZGlyPSckKERFU1RESVIpJChtYW4zZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLXRhZ3M6IFRBR1MKLVRBR1M6Cit0YWdzIFRBR1M6CiAKLWN0YWdzOiBDVEFHUwotQ1RBR1M6CitjdGFncyBDVEFHUzoKIAogY3Njb3BlIGNzY29wZWxpc3Q6CiAKIAogZGlzdGRpcjogJChESVNURklMRVMpCi0JQGxpc3Q9JyQoTUFOUyknOyBpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgICAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlbHNlIDo7IGZpOyBkb25lYDsgXAotCSAgaWYgdGVzdCAtbiAiJCRsaXN0IiAmJiBcCi0JICAgIGdyZXAgJ2FiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZScgJCRsaXN0ID4vZGV2L251bGw7IHRoZW4gXAotCSAgICBlY2hvICJlcnJvcjogZm91bmQgbWFuIHBhZ2VzIGNvbnRhaW5pbmcgdGhlICdtaXNzaW5nIGhlbHAybWFuJyByZXBsYWNlbWVudCB0ZXh0OiIgPiYyOyBcCi0JICAgIGdyZXAgLWwgJ2FiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZScgJCRsaXN0IHwgc2VkICdzL14vICAgICAgICAgLycgPiYyOyBcCi0JICAgIGVjaG8gIiAgICAgICB0byBmaXggdGhlbSwgaW5zdGFsbCBoZWxwMm1hbiwgcmVtb3ZlIGFuZCByZWdlbmVyYXRlIHRoZSBtYW4gcGFnZXM7IiA+JjI7IFwKLQkgICAgZWNobyAiICAgICAgIHR5cGljYWxseSAnbWFrZSBtYWludGFpbmVyLWNsZWFuJyB3aWxsIHJlbW92ZSB0aGVtIiA+JjI7IFwKLQkgICAgZXhpdCAxOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZWxzZSA6OyBmaQogCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKIAl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCiAJbGlzdD0nJChESVNURklMRVMpJzsgXApAQCAtNDkwLDE2ICs1MjMsMTcgQEAKIC5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKIAogLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKLQlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAotCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAotCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCi0JaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLW1hbjMgXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtbWFuMworCWNzY29wZWxpc3QtYW0gY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1tYW4zIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgXAorCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAorCXBzIHBzLWFtIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbWFuIFwKKwl1bmluc3RhbGwtbWFuMwogCiAKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tZGF0ZS1zaAppbmRleCBjZDkxNmMwLi5iMzcxOWNmIDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWRhdGUtc2gKQEAgLTEsMTAgKzEsOSBAQAogIyEvYmluL3NoCiAjIEdldCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IGFuZCBwcmV0dHktcHJpbnQgaXQuCiAKLXNjcmlwdHZlcnNpb249MjAwNS0wNi0yOS4yMgorc2NyaXB0dmVyc2lvbj0yMDEwLTA4LTIxLjA2OyAjIFVUQwogCi0jIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIHdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCBKdW5lIDE5OTUKICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE4LDggKzE3LDcgQEAKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCkBAIC0zMCwxNiArMjgsMjYgQEAKICMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bwogIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KIAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKIGNhc2UgJDEgaW4KICAgJycpCi0gICAgIGVjaG8gIiQwOiBObyBmaWxlLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZWNobyAiJDA6IE5vIGZpbGUuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCiAgICAgIGV4aXQgMTsKICAgICAgOzsKICAgLWggfCAtLWgqKQogICAgIGNhdCA8PFxFT0YKIFVzYWdlOiBtZGF0ZS1zaCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBGSUxFCiAKLVByZXR0eS1wcmludCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgRklMRS4KK1ByZXR0eS1wcmludCB0aGUgbW9kaWZpY2F0aW9uIGRheSBvZiBGSUxFLCBpbiB0aGUgZm9ybWF0OgorMSBKYW51YXJ5IDE5NzAKIAogUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KIEVPRgpAQCAtNTEsNiArNTksMTMgQEAKICAgICA7OwogZXNhYwogCitlcnJvciAoKQoreworICBlY2hvICIkMDogJDEiID4mMgorICBleGl0IDEKK30KKworCiAjIFByZXZlbnQgZGF0ZSBnaXZpbmcgcmVzcG9uc2UgaW4gYW5vdGhlciBsYW5ndWFnZS4KIExBTkc9QwogZXhwb3J0IExBTkcKQEAgLTYwLDcgKzc1LDcgQEAKIGV4cG9ydCBMQ19USU1FCiAKICMgR05VIGxzIGNoYW5nZXMgaXRzIHRpbWUgZm9ybWF0IGluIHJlc3BvbnNlIHRvIHRoZSBUSU1FX1NUWUxFCi0jIHZhcmlhYmxlLiAgU2luY2Ugd2UgY2Fubm90IGFzc3VtZSBgdW5zZXQnIHdvcmtzLCByZXZlcnQgdGhpcworIyB2YXJpYWJsZS4gIFNpbmNlIHdlIGNhbm5vdCBhc3N1bWUgJ3Vuc2V0JyB3b3JrcywgcmV2ZXJ0IHRoaXMKICMgdmFyaWFibGUgdG8gaXRzIGRvY3VtZW50ZWQgZGVmYXVsdC4KIGlmIHRlc3QgIiR7VElNRV9TVFlMRStzZXR9IiA9IHNldDsgdGhlbgogICBUSU1FX1NUWUxFPXBvc2l4LWxvbmctaXNvCkBAIC03NSwyNyArOTAsMzIgQEAKIGVsc2UKICAgbHNfY29tbWFuZD0nbHMgLWwgLWQnCiBmaQorIyBBdm9pZCB1c2VyL2dyb3VwIG5hbWVzIHRoYXQgbWlnaHQgaGF2ZSBzcGFjZXMsIHdoZW4gcG9zc2libGUuCitpZiBscyAtbiAvZGV2L251bGwgMT4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsc19jb21tYW5kPSIkbHNfY29tbWFuZCAtbiIKK2ZpCiAKLSMgQSBgbHMgLWwnIGxpbmUgbG9va3MgYXMgZm9sbG93cyBvbiBPUy8yLgorIyBBICdscyAtbCcgbGluZSBsb29rcyBhcyBmb2xsb3dzIG9uIE9TLzIuCiAjICBkcnd4cnd4LS0tICAgICAgICAwIEF1ZyAxMSAgMjAwMSBmb28KICMgVGhpcyBkaWZmZXJzIGZyb20gVW5peCwgd2hpY2ggYWRkcyBvd25lcnNoaXAgaW5mb3JtYXRpb24uCiAjICBkcnd4cnd4LS0tICAgMiByb290ICByb290ICAgICAgNDA5NiBBdWcgMTEgIDIwMDEgZm9vCiAjCiAjIFRvIGZpbmQgdGhlIGRhdGUsIHdlIHNwbGl0IHRoZSBsaW5lIG9uIHNwYWNlcyBhbmQgaXRlcmF0ZSBvbiB3b3JkcwogIyB1bnRpbCB3ZSBmaW5kIGEgbW9udGguICBUaGlzIGNhbm5vdCB3b3JrIHdpdGggZmlsZXMgd2hvc2Ugb3duZXIgaXMgYQotIyB1c2VyIG5hbWVkIGBKYW4nLCBvciBgRmViJywgZXRjLiAgSG93ZXZlciwgaXQncyB1bmxpa2VseSB0aGF0IGAvJworIyB1c2VyIG5hbWVkICJKYW4iLCBvciAiRmViIiwgZXRjLiAgSG93ZXZlciwgaXQncyB1bmxpa2VseSB0aGF0ICcvJwogIyB3aWxsIGJlIG93bmVkIGJ5IGEgdXNlciB3aG9zZSBuYW1lIGlzIGEgbW9udGguICBTbyB3ZSBmaXJzdCBsb29rIGF0CiAjIHRoZSBleHRlbmRlZCBscyBvdXRwdXQgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IHRvIGRlY2lkZSBob3cgbWFueQogIyB3b3JkcyBzaG91bGQgYmUgc2tpcHBlZCB0byBnZXQgdGhlIGRhdGUuCiAKICMgT24gSFBVWCAvYmluL3NoLCAic2V0IiBpbnRlcnByZXRzICItcnctci0tci0tIiBhcyBvcHRpb25zLCBzbyB0aGUgIngiIGJlbG93Lgotc2V0IHhgbHMgLWwgLWQgL2AKK3NldCB4YCRsc19jb21tYW5kIC9gCiAKICMgRmluZCB3aGljaCBhcmd1bWVudCBpcyB0aGUgbW9udGguCiBtb250aD0KIGNvbW1hbmQ9CiB1bnRpbCB0ZXN0ICRtb250aAogZG8KKyAgdGVzdCAkIyAtZ3QgMCB8fCBlcnJvciAiZmFpbGVkIHBhcnNpbmcgJyRsc19jb21tYW5kIC8nIG91dHB1dCIKICAgc2hpZnQKICAgIyBBZGQgYW5vdGhlciBzaGlmdCB0byB0aGUgY29tbWFuZC4KICAgY29tbWFuZD0iJGNvbW1hbmQgc2hpZnQ7IgpAQCAtMTE1LDggKzEzNSwxMCBAQAogICBlc2FjCiBkb25lCiAKK3Rlc3QgLW4gIiRtb250aCIgfHwgZXJyb3IgImZhaWxlZCBwYXJzaW5nICckbHNfY29tbWFuZCAvJyBvdXRwdXQiCisKICMgR2V0IHRoZSBleHRlbmRlZCBscyBvdXRwdXQgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5Lgotc2V0IGR1bW15IHhgZXZhbCAiJGxzX2NvbW1hbmQgXCJcJHNhdmVfYXJnMVwiImAKK3NldCBkdW1teSB4YGV2YWwgIiRsc19jb21tYW5kIFwiXFxcJHNhdmVfYXJnMVwiImAKIAogIyBSZW1vdmUgYWxsIHByZWNlZGluZyBhcmd1bWVudHMKIGV2YWwgJGNvbW1hbmQKQEAgLTE5Nyw1ICsyMTksNiBAQAogIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCiAjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKICMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCi0jIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKICMgRW5kOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9taXNzaW5nIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9taXNzaW5nCmluZGV4IDI4MDU1ZDIuLmNkZWE1MTQgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21pc3NpbmcKQEAgLTEsMTEgKzEsMTAgQEAKICMhIC9iaW4vc2gKLSMgQ29tbW9uIHN0dWIgZm9yIGEgZmV3IG1pc3NpbmcgR05VIHByb2dyYW1zIHdoaWxlIGluc3RhbGxpbmcuCisjIENvbW1vbiB3cmFwcGVyIGZvciBhIGZldyBwb3RlbnRpYWxseSBtaXNzaW5nIEdOVSBwcm9ncmFtcy4KIAotc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworc2NyaXB0dmVyc2lvbj0yMDEyLTA2LTI2LjE2OyAjIFVUQwogCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKLSMgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgT3JpZ2luYWxseSBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNiw2OSArMjUsNDAgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCiBpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCi0gIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCiAgIGV4aXQgMQogZmkKIAotcnVuPToKLXNlZF9vdXRwdXQ9J3MvLiogLS1vdXRwdXRbID1dXChbXiBdKlwpLiovXDEvcCcKLXNlZF9taW51c289J3MvLiogLW8gXChbXiBdKlwpLiovXDEvcCcKLQotIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQotIyBzcmNkaXIgYWxyZWFkeS4KLWlmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCi0gIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKLWVsc2UKLSAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgotZmkKLQotbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgotCiBjYXNlICQxIGluCi0tLXJ1bikKLSAgIyBUcnkgdG8gcnVuIHJlcXVlc3RlZCBwcm9ncmFtLCBhbmQganVzdCBleGl0IGlmIGl0IHN1Y2NlZWRzLgotICBydW49Ci0gIHNoaWZ0Ci0gICIkQCIgJiYgZXhpdCAwCi0gICMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMKLSAgIyB3aGVuIHRoZSB1c2VyIHRyeSB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbgotICAjIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEgbWluaW11bSB2ZXJzaW9uLiAgSW4gdGhpcyBjYXNlIHdlCi0gICMgd2Ugc2hvdWxkIHByb2NlZWQgaGFzIGlmIHRoZSBwcm9ncmFtIGhhZCBiZWVuIGFic2VudCwgb3IKLSAgIyBpZiAtLXJ1biBoYWRuJ3QgYmVlbiBwYXNzZWQuCi0gIGlmIHRlc3QgJD8gPSA2MzsgdGhlbgotICAgIHJ1bj06Ci0gICAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgotICBmaQotICA7OworCisgIC0taXMtbGlnaHR3ZWlnaHQpCisgICAgIyBVc2VkIGJ5IG91ciBhdXRvY29uZiBtYWNyb3MgdG8gY2hlY2sgd2hldGhlciB0aGUgYXZhaWxhYmxlIG1pc3NpbmcKKyAgICAjIHNjcmlwdCBpcyBtb2Rlcm4gZW5vdWdoLgorICAgIGV4aXQgMAorICAgIDs7CisKKyAgLS1ydW4pCisgICAgIyBCYWNrLWNvbXBhdCB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gdXNlZCBieSBvbGRlciBhdXRvbWFrZS4KKyAgICBzaGlmdAorICAgIDs7CiAKICAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQogICAgIGVjaG8gIlwKICQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgogCi1IYW5kbGUgXGBQUk9HUkFNIFtBUkdVTUVOVF0uLi4nIGZvciB3aGVuIFBST0dSQU0gaXMgbWlzc2luZywgb3IgcmV0dXJuIGFuCi1lcnJvciBzdGF0dXMgaWYgdGhlcmUgaXMgbm8ga25vd24gaGFuZGxpbmcgZm9yIFBST0dSQU0uCitSdW4gJ1BST0dSQU0gW0FSR1VNRU5UXS4uLicsIHJldHVybmluZyBhIHByb3BlciBhZHZpY2Ugd2hlbiB0aGlzIGZhaWxzIGR1ZQordG8gUFJPR1JBTSBiZWluZyBtaXNzaW5nIG9yIHRvbyBvbGQuCiAKIE9wdGlvbnM6CiAgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAogICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLS1ydW4gICAgICAgICAgIHRyeSB0byBydW4gdGhlIGdpdmVuIGNvbW1hbmQsIGFuZCBlbXVsYXRlIGl0IGlmIGl0IGZhaWxzCiAKIFN1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKLSAgYWNsb2NhbCAgICAgIHRvdWNoIGZpbGUgXGBhY2xvY2FsLm00JwotICBhdXRvY29uZiAgICAgdG91Y2ggZmlsZSBcYGNvbmZpZ3VyZScKLSAgYXV0b2hlYWRlciAgIHRvdWNoIGZpbGUgXGBjb25maWcuaC5pbicKLSAgYXV0b200dGUgICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZSwgb3IgY3JlYXRlIGEgc3R1YiBvbmUKLSAgYXV0b21ha2UgICAgIHRvdWNoIGFsbCBcYE1ha2VmaWxlLmluJyBmaWxlcwotICBiaXNvbiAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCi0gIGZsZXggICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCi0gIGhlbHAybWFuICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKLSAgbGV4ICAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKLSAgbWFrZWluZm8gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQotICB0YXIgICAgICAgICAgdHJ5IHRhciwgZ251dGFyLCBndGFyLCB0aGVuIHRhciB3aXRob3V0IG5vbi1wb3J0YWJsZSBmbGFncwotICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisgIGFjbG9jYWwgICBhdXRvY29uZiAgYXV0b2hlYWRlciAgIGF1dG9tNHRlICBhdXRvbWFrZSAgbWFrZWluZm8KKyAgYmlzb24gICAgIHlhY2MgICAgICBmbGV4ICAgICAgICAgbGV4ICAgICAgIGhlbHAybWFuCiAKLVZlcnNpb24gc3VmZml4ZXMgdG8gUFJPR1JBTSBhcyB3ZWxsIGFzIHRoZSBwcmVmaXhlcyBcYGdudS0nLCBcYGdudScsIGFuZAotXGBnJyBhcmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIHRoZSBuYW1lLgorVmVyc2lvbiBzdWZmaXhlcyB0byBQUk9HUkFNIGFzIHdlbGwgYXMgdGhlIHByZWZpeGVzICdnbnUtJywgJ2dudScsIGFuZAorJ2cnIGFyZSBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgdGhlIG5hbWUuCiAKIFNlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCiAgICAgZXhpdCAkPwpAQCAtMTAwLDI3MiArNzAsMTQxIEBACiAgICAgOzsKIAogICAtKikKLSAgICBlY2hvIDE+JjIgIiQwOiBVbmtub3duIFxgJDEnIG9wdGlvbiIKLSAgICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgZWNobyAxPiYyICIkMDogdW5rbm93biAnJDEnIG9wdGlvbiIKKyAgICBlY2hvIDE+JjIgIlRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKICAgICBleGl0IDEKICAgICA7OwogCiBlc2FjCiAKLSMgbm9ybWFsaXplIHByb2dyYW0gbmFtZSB0byBjaGVjayBmb3IuCi1wcm9ncmFtPWBlY2hvICIkMSIgfCBzZWQgJwotICBzL15nbnUtLy87IHQKLSAgcy9eZ251Ly87IHQKLSAgcy9eZy8vOyB0J2AKKyMgUnVuIHRoZSBnaXZlbiBwcm9ncmFtLCByZW1lbWJlciBpdHMgZXhpdCBzdGF0dXMuCisiJEAiOyBzdD0kPwogCi0jIE5vdyBleGl0IGlmIHdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuICBBbHNvIGV4aXQgbm93IGlmIHdlCi0jIGRvbid0IGhhdmUgaXQgYW5kIC0tdmVyc2lvbiB3YXMgcGFzc2VkIChtb3N0IGxpa2VseSB0byBkZXRlY3QKLSMgdGhlIHByb2dyYW0pLiAgVGhpcyBpcyBhYm91dCBub24tR05VIHByb2dyYW1zLCBzbyB1c2UgJDEgbm90Ci0jICRwcm9ncmFtLgotY2FzZSAkMSBpbgotICBsZXgqfHlhY2MqKQotICAgICMgTm90IEdOVSBwcm9ncmFtcywgdGhleSBkb24ndCBoYXZlIC0tdmVyc2lvbi4KKyMgSWYgaXQgc3VjY2VlZGVkLCB3ZSBhcmUgZG9uZS4KK3Rlc3QgJHN0IC1lcSAwICYmIGV4aXQgMAorCisjIEFsc28gZXhpdCBub3cgaWYgd2UgaXQgZmFpbGVkIChvciB3YXNuJ3QgZm91bmQpLCBhbmQgJy0tdmVyc2lvbicgd2FzCisjIHBhc3NlZDsgc3VjaCBhbiBvcHRpb24gaXMgcGFzc2VkIG1vc3QgbGlrZWx5IHRvIGRldGVjdCB3aGV0aGVyIHRoZQorIyBwcm9ncmFtIGlzIHByZXNlbnQgYW5kIHdvcmtzLgorY2FzZSAkMiBpbiAtLXZlcnNpb258LS1oZWxwKSBleGl0ICRzdDs7IGVzYWMKKworIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucyB3aGVuIHRoZSB1c2VyCisjIHRyaWVzIHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEKKyMgbWluaW11bSB2ZXJzaW9uLgoraWYgdGVzdCAkc3QgLWVxIDYzOyB0aGVuCisgIG1zZz0icHJvYmFibHkgdG9vIG9sZCIKK2VsaWYgdGVzdCAkc3QgLWVxIDEyNzsgdGhlbgorICAjIFByb2dyYW0gd2FzIG1pc3NpbmcuCisgIG1zZz0ibWlzc2luZyBvbiB5b3VyIHN5c3RlbSIKK2Vsc2UKKyAgIyBQcm9ncmFtIHdhcyBmb3VuZCBhbmQgZXhlY3V0ZWQsIGJ1dCBmYWlsZWQuICBHaXZlIHVwLgorICBleGl0ICRzdAorZmkKKworcGVybF9VUkw9aHR0cDovL3d3dy5wZXJsLm9yZy8KK2ZsZXhfVVJMPWh0dHA6Ly9mbGV4LnNvdXJjZWZvcmdlLm5ldC8KK2dudV9zb2Z0d2FyZV9VUkw9aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlCisKK3Byb2dyYW1fZGV0YWlscyAoKQoreworICBjYXNlICQxIGluCisgICAgYWNsb2NhbHxhdXRvbWFrZSkKKyAgICAgIGVjaG8gIlRoZSAnJDEnIHByb2dyYW0gaXMgcGFydCBvZiB0aGUgR05VIEF1dG9tYWtlIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9tYWtlPiIKKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIEF1dG9jb25mLCBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvY29uZj4iCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorICAgICAgOzsKKyAgICBhdXRvY29uZnxhdXRvbTR0ZXxhdXRvaGVhZGVyKQorICAgICAgZWNobyAiVGhlICckMScgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBHTlUgQXV0b2NvbmYgcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b2NvbmYvPiIKKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIG00IGFuZCBQZXJsIGluIG9yZGVyIHRvIHJ1bjoiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorICAgICAgOzsKKyAgZXNhYworfQorCitnaXZlX2FkdmljZSAoKQoreworICAjIE5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgorICBub3JtYWxpemVkX3Byb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCisgICAgcy9eZ251LS8vOyB0CisgICAgcy9eZ251Ly87IHQKKyAgICBzL15nLy87IHQnYAorCisgIHByaW50ZiAnJXNcbicgIickMScgaXMgJG1zZy4iCisKKyAgY29uZmlndXJlX2RlcHM9Iidjb25maWd1cmUuYWMnIG9yIG00IGZpbGVzIGluY2x1ZGVkIGJ5ICdjb25maWd1cmUuYWMnIgorICBjYXNlICRub3JtYWxpemVkX3Byb2dyYW0gaW4KKyAgICBhdXRvY29uZiopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2NvbmZpZ3VyZS5hYycsIgorICAgICAgZWNobyAib3IgbTQgZmlsZXMgaW5jbHVkZWQgYnkgaXQuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvY29uZicKKyAgICAgIDs7CisgICAgYXV0b2hlYWRlciopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjY29uZmlnLmgnIG9yIgorICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b2hlYWRlcicKKyAgICAgIDs7CisgICAgYXV0b21ha2UqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdNYWtlZmlsZS5hbScgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbWFrZScKKyAgICAgIDs7CisgICAgYWNsb2NhbCopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjaW5jbHVkZS5tNCcgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhY2xvY2FsJworICAgICAgOzsKKyAgIGF1dG9tNHRlKikKKyAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgbWFpbnRhaW5lciBmaWxlcyB0aGF0IHJlcXVpcmUiCisgICAgICBlY2hvICJ0aGUgJ2F1dG9tYTR0ZScgcHJvZ3JhbSB0byBiZSByZWJ1aWx0LiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b200dGUnCisgICAgICA7OworICAgIGJpc29uKnx5YWNjKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcueScgZmlsZS4iCisgICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgR05VIEJpc29uIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2Jpc29uLz4iCisgICAgICA7OworICAgIGxleCp8ZmxleCopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSAnLmwnIGZpbGUuIgorICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEZhc3QgTGV4aWNhbCBBbmFseXplciBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZmxleF9VUkw+IgorICAgICAgOzsKKyAgICBoZWxwMm1hbiopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSBkZXBlbmRlbmN5IiBcCisgICAgICAgICAgICJvZiBhIG1hbiBwYWdlLiIKKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBHTlUgSGVscDJtYW4gcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvaGVscDJtYW4vPiIKICAgICA7OworICAgIG1ha2VpbmZvKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcudGV4aScgZmlsZSwgb3IiCisgICAgICBlY2hvICJhbnkgb3RoZXIgZmlsZSBpbmRpcmVjdGx5IGFmZmVjdGluZyB0aGUgYXNwZWN0IG9mIHRoZSBtYW51YWwuIgorICAgICAgZWNobyAiWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgVGV4aW5mbyBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC90ZXhpbmZvLz4iCisgICAgICBlY2hvICJUaGUgc3B1cmlvdXMgbWFrZWluZm8gY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiIKKyAgICAgIGVjaG8gInVzaW5nIGEgYnVnZ3kgJ21ha2UnIChBSVgsIERVLCBJUklYKSwgaW4gd2hpY2ggY2FzZSB5b3UgbWlnaHQiCisgICAgICBlY2hvICJ3YW50IHRvIGluc3RhbGwgR05VIG1ha2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML21ha2UvPiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlIHByb3BlciIKKyAgICAgIGVjaG8gInRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uICBDaGVjayB0aGUgJ1JFQURNRScgZmlsZSwgaXQiCisgICAgICBlY2hvICJvZnRlbiB0ZWxscyB5b3UgYWJvdXQgdGhlIG5lZWRlZCBwcmVyZXF1aXNpdGVzIGZvciBpbnN0YWxsaW5nIgorICAgICAgZWNobyAidGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIgorICAgICAgZWNobyAiY2FzZSBzb21lIG90aGVyIHBhY2thZ2UgY29udGFpbnMgdGhpcyBtaXNzaW5nICckMScgcHJvZ3JhbS4iCisgICAgICA7OworICBlc2FjCit9CiAKLSAgdGFyKikKLSAgICBpZiB0ZXN0IC1uICIkcnVuIjsgdGhlbgotICAgICAgIGVjaG8gMT4mMiAiRVJST1I6IFxgdGFyJyByZXF1aXJlcyAtLXJ1biIKLSAgICAgICBleGl0IDEKLSAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgotICAgICAgIGV4aXQgMQotICAgIGZpCi0gICAgOzsKK2dpdmVfYWR2aWNlICIkMSIgfCBzZWQgLWUgJzFzL14vV0FSTklORzogLycgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAnMiwkcy9eLyAgICAgICAgIC8nID4mMgogCi0gICopCi0gICAgaWYgdGVzdCAteiAiJHJ1biIgJiYgKCQxIC0tdmVyc2lvbikgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICMgV2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4KLSAgICAgICBleGl0IDEKLSAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgotICAgICAgICMgQ291bGQgbm90IHJ1biAtLXZlcnNpb24gb3IgLS1oZWxwLiAgVGhpcyBpcyBwcm9iYWJseSBzb21lb25lCi0gICAgICAgIyBydW5uaW5nIGAkVE9PTCAtLXZlcnNpb24nIG9yIGAkVE9PTCAtLWhlbHAnIHRvIGNoZWNrIHdoZXRoZXIKLSAgICAgICAjICRUT09MIGV4aXN0cyBhbmQgbm90IGtub3dpbmcgJFRPT0wgdXNlcyBtaXNzaW5nLgotICAgICAgIGV4aXQgMQotICAgIGZpCi0gICAgOzsKLWVzYWMKLQotIyBJZiBpdCBkb2VzIG5vdCBleGlzdCwgb3IgZmFpbHMgdG8gcnVuIChwb3NzaWJseSBhbiBvdXRkYXRlZCB2ZXJzaW9uKSwKLSMgdHJ5IHRvIGVtdWxhdGUgaXQuCi1jYXNlICRwcm9ncmFtIGluCi0gIGFjbG9jYWwqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50Ci0gICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCi0gICAgICAgICBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgdG91Y2ggYWNsb2NhbC5tNAotICAgIDs7Ci0KLSAgYXV0b2NvbmYqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKLSAgICAgICAgIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCi0gICAgICAgICBhcmNoaXZlIHNpdGUuIgotICAgIHRvdWNoIGNvbmZpZ3VyZQotICAgIDs7Ci0KLSAgYXV0b2hlYWRlciopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjY29uZmlnLmgnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50Ci0gICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtCi0gICAgICAgICBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICBmaWxlcz1gc2VkIC1uICdzL15bIF0qQVtDTV1fQ09ORklHX0hFQURFUihcKFteKV0qXCkpLiovXDEvcCcgJHtjb25maWd1cmVfYWN9YAotICAgIHRlc3QgLXogIiRmaWxlcyIgJiYgZmlsZXM9ImNvbmZpZy5oIgotICAgIHRvdWNoX2ZpbGVzPQotICAgIGZvciBmIGluICRmaWxlczsgZG8KLSAgICAgIGNhc2UgJGYgaW4KLSAgICAgICo6KikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAiYGVjaG8gIiRmIiB8Ci0JCQkJICAgICAgIHNlZCAtZSAncy9eW146XSo6Ly8nIC1lICdzLzouKi8vJ2A7OwotICAgICAgKikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAkZi5pbiI7OwotICAgICAgZXNhYwotICAgIGRvbmUKLSAgICB0b3VjaCAkdG91Y2hfZmlsZXMKLSAgICA7OwotCi0gIGF1dG9tYWtlKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIFxgTWFrZWZpbGUuYW0nLCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLgotICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuCi0gICAgICAgICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgZmluZCAuIC10eXBlIGYgLW5hbWUgTWFrZWZpbGUuYW0gLXByaW50IHwKLQkgICBzZWQgJ3MvXC5hbSQvLmluLycgfAotCSAgIHdoaWxlIHJlYWQgZjsgZG8gdG91Y2ggIiRmIjsgZG9uZQotICAgIDs7Ci0KLSAgYXV0b200dGUqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBidXQgaXMgJG1zZy4KLSAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCi0gICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4KLSAgICAgICAgIFlvdSBjYW4gZ2V0IFxgJDEnIGFzIHBhcnQgb2YgXGBBdXRvY29uZicgZnJvbSBhbnkgR05VCi0gICAgICAgICBhcmNoaXZlIHNpdGUuIgotCi0gICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCi0gICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAotICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgotCXRvdWNoICRmaWxlCi0gICAgZWxzZQotCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQotCWVjaG8gIiMhIC9iaW4vc2giCi0JZWNobyAiIyBDcmVhdGVkIGJ5IEdOVSBBdXRvbWFrZSBtaXNzaW5nIGFzIGEgcmVwbGFjZW1lbnQgb2YiCi0JZWNobyAiIyAgJCAkQCIKLQllY2hvICJleGl0IDAiCi0JY2htb2QgK3ggJGZpbGUKLQlleGl0IDEKLSAgICBmaQotICAgIDs7Ci0KLSAgYmlzb24qfHlhY2MqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC55JyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEJpc29uJyBwYWNrYWdlCi0gICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0Ci0gICAgICAgICBcYEJpc29uJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICBybSAtZiB5LnRhYi5jIHkudGFiLmgKLSAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCi0gICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgotCWNhc2UgJExBU1RBUkcgaW4KLQkqLnkpCi0JICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9jLydgCi0JICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgotCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuYwotCSAgICBmaQotCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvaC8nYAotCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KLQkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmgKLQkgICAgZmkKLQkgIDs7Ci0JZXNhYwotICAgIGZpCi0gICAgaWYgdGVzdCAhIC1mIHkudGFiLmg7IHRoZW4KLQllY2hvID55LnRhYi5oCi0gICAgZmkKLSAgICBpZiB0ZXN0ICEgLWYgeS50YWIuYzsgdGhlbgotCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+eS50YWIuYwotICAgIGZpCi0gICAgOzsKLQotICBsZXgqfGZsZXgqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKLSAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKLSAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgcm0gLWYgbGV4Lnl5LmMKLSAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCi0gICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgotCWNhc2UgJExBU1RBUkcgaW4KLQkqLmwpCi0JICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy9sJC9jLydgCi0JICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgotCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKLQkgICAgZmkKLQkgIDs7Ci0JZXNhYwotICAgIGZpCi0gICAgaWYgdGVzdCAhIC1mIGxleC55eS5jOyB0aGVuCi0JZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID5sZXgueXkuYwotICAgIGZpCi0gICAgOzsKLQotICBoZWxwMm1hbiopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLQkgeW91IG1vZGlmaWVkIGEgZGVwZW5kZW5jeSBvZiBhIG1hbnVhbCBwYWdlLiAgWW91IG1heSBuZWVkIHRoZQotCSBcYEhlbHAybWFuJyBwYWNrYWdlIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UKLQkgZWZmZWN0LiAgWW91IGNhbiBnZXQgXGBIZWxwMm1hbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0KLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKLSAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCi0gICAgaWYgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCi0JdG91Y2ggJGZpbGUKLSAgICBlbHNlCi0JdGVzdCAteiAiJGZpbGUiIHx8IGV4ZWMgPiRmaWxlCi0JZWNobyAiLmFiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZSIKLQlleGl0ICQ/Ci0gICAgZmkKLSAgICA7OwotCi0gIG1ha2VpbmZvKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAudGV4aScgb3IgXGAudGV4aW5mbycgZmlsZSwgb3IgYW55IG90aGVyIGZpbGUKLSAgICAgICAgIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4gIFRoZSBzcHVyaW91cwotICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKLSAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgotICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICAjIFRoZSBmaWxlIHRvIHRvdWNoIGlzIHRoYXQgc3BlY2lmaWVkIHdpdGggLW8gLi4uCi0gICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCi0gICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAotICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgotICAgICAgIyAuLi4gb3IgaXQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aCBAc2V0ZmlsZW5hbWUgLi4uCi0gICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKLSAgICAgIGZpbGU9YHNlZCAtbiAnCi0JL15Ac2V0ZmlsZW5hbWUvewotCSAgcy8uKiBcKFteIF0qXCkgKiQvXDEvCi0JICBwCi0JICBxCi0JfScgJGluZmlsZWAKLSAgICAgICMgLi4uIG9yIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgc291cmNlIG5hbWUgKGRpci9mLnRleGkgYmVjb21lcyBmLmluZm8pCi0gICAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJGluZmlsZSIgfCBzZWQgJ3MsLiovLCw7cywuW14uXSokLCwnYC5pbmZvCi0gICAgZmkKLSAgICAjIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdXNlciByZWFsbHkgbmVlZHMgbWFrZWluZm87Ci0gICAgIyBsZXQncyBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgYW55dGhpbmcuCi0gICAgdGVzdCAtZiAkZmlsZSB8fCBleGl0IDEKLSAgICB0b3VjaCAkZmlsZQotICAgIDs7Ci0KLSAgdGFyKikKLSAgICBzaGlmdAotCi0gICAgIyBXZSBoYXZlIGFscmVhZHkgdHJpZWQgdGFyIGluIHRoZSBnZW5lcmljIHBhcnQuCi0gICAgIyBMb29rIGZvciBnbnV0YXIvZ3RhciBiZWZvcmUgaW52b2NhdGlvbiB0byBhdm9pZCB1Z2x5IGVycm9yCi0gICAgIyBtZXNzYWdlcy4KLSAgICBpZiAoZ251dGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgotICAgICAgIGdudXRhciAiJEAiICYmIGV4aXQgMAotICAgIGZpCi0gICAgaWYgKGd0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCi0gICAgICAgZ3RhciAiJEAiICYmIGV4aXQgMAotICAgIGZpCi0gICAgZmlyc3Rhcmc9IiQxIgotICAgIGlmIHNoaWZ0OyB0aGVuCi0JY2FzZSAkZmlyc3RhcmcgaW4KLQkqbyopCi0JICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvby8vYAotCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKLQkgICAgOzsKLQllc2FjCi0JY2FzZSAkZmlyc3RhcmcgaW4KLQkqaCopCi0JICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvaC8vYAotCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKLQkgICAgOzsKLQllc2FjCi0gICAgZmkKLQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogSSBjYW4ndCBzZWVtIHRvIGJlIGFibGUgdG8gcnVuIFxgdGFyJyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCi0gICAgICAgICBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBHTlUgdGFyIG9yIEZyZWUgcGF4dXRpbHMsIG9yIGNoZWNrIHRoZQotICAgICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4iCi0gICAgZXhpdCAxCi0gICAgOzsKLQotICAqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBhbmQgaXMgJG1zZy4KLSAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCi0gICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSBcYFJFQURNRScgZmlsZSwKLSAgICAgICAgIGl0IG9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmcKLSAgICAgICAgIHRoaXMgcGFja2FnZS4gIFlvdSBtYXkgYWxzbyBwZWVrIGF0IGFueSBHTlUgYXJjaGl2ZSBzaXRlLCBpbiBjYXNlCi0gICAgICAgICBzb21lIG90aGVyIHBhY2thZ2Ugd291bGQgY29udGFpbiB0aGlzIG1pc3NpbmcgXGAkMScgcHJvZ3JhbS4iCi0gICAgZXhpdCAxCi0gICAgOzsKLWVzYWMKLQotZXhpdCAwCisjIFByb3BhZ2F0ZSB0aGUgY29ycmVjdCBleGl0IHN0YXR1cyAoZXhwZWN0ZWQgdG8gYmUgMTI3IGZvciBhIHByb2dyYW0KKyMgbm90IGZvdW5kLCA2MyBmb3IgYSBwcm9ncmFtIHRoYXQgZmFpbGVkIGR1ZSB0byB2ZXJzaW9uIG1pc21hdGNoKS4KK2V4aXQgJHN0CiAKICMgTG9jYWwgdmFyaWFibGVzOgogIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21zdmNjLnNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaAppbmRleCBkY2RiZWFiLi43NDQwZGViIDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21zdmNjLnNoCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbXN2Y2Muc2gKQEAgLTQyLDYgKzQyLDcgQEAKICMgZm9ybWF0IGFuZCB0cmFuc2xhdGVkIGludG8gc29tZXRoaW5nIHNlbnNpYmxlIGZvciBjbCBvciBtbC4KICMKIAorYXJnc19vcmlnPSRACiBhcmdzPSItbm9sb2dvIC1XMyIKIG1kPS1NRAogY2w9ImNsIgpAQCAtNzIsMTQgKzczLDM1IEBACiAgICAgICBzaGlmdCAxCiAgICAgOzsKICAgICAtTyopCi0gICAgICAjIElmIHdlJ3JlIG9wdGltaXppbmcsIG1ha2Ugc3VyZSB3ZSBleHBsaWNpdGx5IHR1cm4gb24gc29tZSBvcHRpbWl6YXRpb25zCi0gICAgICAjIHRoYXQgYXJlIGltcGxpY2l0bHkgZGlzYWJsZWQgYnkgZGVidWcgc3ltYm9scyAoLVppKS4KLSAgICAgIGFyZ3M9IiRhcmdzICQxIC1PUFQ6UkVGIC1PUFQ6SUNGIC1JTkNSRU1FTlRBTDpOTyIKKyAgICAgICMgUnVudGltZSBlcnJvciBjaGVja3MgKGVuYWJsZWQgYnkgc2V0dGluZyAtUlRDMSBpbiB0aGUgLURGRklfREVCVUcKKyAgICAgICMgY2FzZSBiZWxvdykgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggb3B0aW1pemF0aW9uIGZsYWdzIGFuZCB3aWxsCisgICAgICAjIGNhdXNlIHRoZSBidWlsZCB0byBmYWlsLiBUaGVyZWZvcmUsIGRyb3AgdGhlIG9wdGltaXphdGlvbiBmbGFnIGlmCisgICAgICAjIC1ERkZJX0RFQlVHIGlzIGFsc28gc2V0LgorICAgICAgY2FzZSAkYXJnc19vcmlnIGluCisgICAgICAgICotREZGSV9ERUJVRyopCisgICAgICAgICAgYXJncz0iJGFyZ3MiCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgIyBUaGUgYXhfY2NfbWF4b3B0Lm00IG1hY3JvIGZyb20gdGhlIHVwc3RyZWFtIGF1dG9jb25mLWFyY2hpdmUKKyAgICAgICAgICAjIHByb2plY3QgZG9lc24ndCBzdXBwb3J0IE1TVkMgYW5kIHRoZXJlZm9yZSBlbmRzIHVwIHRyeWluZyB0bworICAgICAgICAgICMgdXNlIC1PMy4gVXNlIHRoZSBlcXVpdmFsZW50ICJtYXggb3B0aW1pemF0aW9uIiBmbGFnIGZvciBNU1ZDCisgICAgICAgICAgIyBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dC4KKyAgICAgICAgICBjYXNlICQxIGluCisgICAgICAgICAgICAtTzMpCisgICAgICAgICAgICAgIGFyZ3M9IiRhcmdzIC1PMiIKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBhcmdzPSIkYXJncyAkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIG9wdD0idHJ1ZSIKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIHNoaWZ0IDEKICAgICA7OwogICAgIC1nKQogICAgICAgIyBFbmFibGUgZGVidWcgc3ltYm9sIGdlbmVyYXRpb24uCi0gICAgICBhcmdzPSIkYXJncyAtWmkgLURFQlVHIgorICAgICAgYXJncz0iJGFyZ3MgLVppIgogICAgICAgc2hpZnQgMQogICAgIDs7CiAgICAgLURGRklfREVCVUcpCkBAIC0xMjYsNiArMTQ4LDEwIEBACiAgICAgICAjIHRvIGRvIGhlcmUuCiAgICAgICBzaGlmdCAxCiAgICAgOzsKKyAgICAtcGVkYW50aWMpCisgICAgICAjIGxpYmZmaSB0ZXN0cyAtcGVkYW50aWMgd2l0aCAtV2FsbCwgc28gZHJvcCBpdCBhbHNvLgorICAgICAgc2hpZnQgMQorICAgIDs7CiAgICAgLVdlcnJvcikKICAgICAgIGFyZ3M9IiRhcmdzIC1XWCIKICAgICAgIHNoaWZ0IDEKQEAgLTE3MCw2ICsxOTYsMTMgQEAKICAgZXNhYwogZG9uZQogCisjIElmIC1aaSBpcyBzcGVjaWZpZWQsIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBhcmUgaW1wbGljaXRseSBkaXNhYmxlZAorIyBieSBNU1ZDLiBBZGQgYmFjayB0aG9zZSBvcHRpbWl6YXRpb25zIGlmIHRoaXMgaXMgYW4gb3B0aW1pemVkIGJ1aWxkLgorIyBOT1RFOiBUaGVzZSBhcmd1bWVudHMgbXVzdCBjb21lIGFmdGVyIGFsbCBvdGhlcnMuCitpZiBbIC1uICIkb3B0IiBdOyB0aGVuCisgICAgYXJncz0iJGFyZ3MgLWxpbmsgLU9QVDpSRUYgLU9QVDpJQ0YgLUlOQ1JFTUVOVEFMOk5PIgorZmkKKwogaWYgWyAtbiAiJGFzc2VtYmx5IiBdOyB0aGVuCiAgICAgaWYgWyAteiAiJG91dGRpciIgXTsgdGhlbgogICAgICAgb3V0ZGlyPSIuIgpAQCAtMTg5LDcgKzIyMiwxMCBAQAogZWxzZQogICAgIGFyZ3M9IiRtZCAkYXJncyIKICAgICBlY2hvICIkY2wgJGFyZ3MiCi0gICAgZXZhbCAiXCIkY2xcIiAkYXJncyIKKyAgICAjIFJldHVybiBhbiBlcnJvciBjb2RlIG9mIDEgaWYgYW4gaW52YWxpZCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIGlzIHBhc3NlZAorICAgICMgaW5zdGVhZCBvZiBqdXN0IGlnbm9yaW5nIGl0LgorICAgIGV2YWwgIihcIiRjbFwiICRhcmdzIDI+JjEgMT4mMyB8IFwKKyAgICAgICAgICBhd2sgJ3twcmludCBcJDB9IC9EOTAwMi8ge2Vycm9yPTF9IEVORHtleGl0IGVycm9yfScgPiYyKSAzPiYxIgogICAgIHJlc3VsdD0kPwogZmkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvZmZpLmMKaW5kZXggMTQwNTY2NS4uYjgwN2EyZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L2ZmaS5jCkBAIC0yNyw3ICsyNywxMSBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiAvKiBTdGFjayBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgaW4gYnl0ZXMgKi8KKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisjZGVmaW5lIEFBUkNINjRfU1RBQ0tfQUxJR04gMQorI2Vsc2UKICNkZWZpbmUgQUFSQ0g2NF9TVEFDS19BTElHTiAxNgorI2VuZGlmCiAKICNkZWZpbmUgTl9YX0FSR19SRUcgOAogI2RlZmluZSBOX1ZfQVJHX1JFRyA4CkBAIC00OSw2ICs1MywyMyBAQAogICB9IHYgW0FBUkNINjRfTl9WUkVHXTsKIH07CiAKKyNpZiBkZWZpbmVkIChfX2NsYW5nX18pICYmIGRlZmluZWQgKF9fQVBQTEVfXykKK2V4dGVybiB2b2lkCitzeXNfaWNhY2hlX2ludmFsaWRhdGUgKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZmaV9jbGVhcl9jYWNoZSAodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKyNpZiBkZWZpbmVkIChfX2NsYW5nX18pICYmIGRlZmluZWQgKF9fQVBQTEVfXykKKwlzeXNfaWNhY2hlX2ludmFsaWRhdGUgKHN0YXJ0LCAoY2hhciAqKWVuZCAtIChjaGFyICopc3RhcnQpOworI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCisJX19idWlsdGluX19fY2xlYXJfY2FjaGUgKHN0YXJ0LCBlbmQpOworI2Vsc2UKKyNlcnJvciAiTWlzc2luZyBidWlsdGluIHRvIGZsdXNoIGluc3RydWN0aW9uIGNhY2hlIgorI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkICoKIGdldF94X2FkZHIgKHN0cnVjdCBjYWxsX2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIG4pCiB7CkBAIC05NCw4ICsxMTUsMTAgQEAKICAgICAgIHJldHVybiBnZXRfc19hZGRyIChjb250ZXh0LCBuKTsKICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKICAgICAgIHJldHVybiBnZXRfZF9hZGRyIChjb250ZXh0LCBuKTsKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKICAgICAgIHJldHVybiBnZXRfdl9hZGRyIChjb250ZXh0LCBuKTsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKQEAgLTEwNyw2ICsxMzAsOCBAQAogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgogICAgICAgcmV0dXJuIGdldF94X2FkZHIgKGNvbnRleHQsIG4pOworICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKKyAgICAgIHJldHVybiBOVUxMOwogICAgIGRlZmF1bHQ6CiAgICAgICBGRklfQVNTRVJUICgwKTsKICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTIzLDE1ICsxNDgsMjYgQEAKICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgogICAgICAgcmV0dXJuIHNpemVvZiAoVUlOVDY0KTsKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKICAgICAgIHJldHVybiBzaXplb2YgKGxvbmcgZG91YmxlKTsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisJICByZXR1cm4gc2l6ZW9mIChVSU5UOCk7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisJICByZXR1cm4gc2l6ZW9mIChVSU5UMTYpOworI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CiAgICAgY2FzZSBGRklfVFlQRV9JTlQ6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6CisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorCSAgcmV0dXJuIHNpemVvZiAoVUlOVDMyKTsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKQEAgLTE1NCw4ICsxOTAsMTAgQEAKICAgICAgIHJldHVybiBzaXplb2YgKFVJTlQzMik7CiAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CiAgICAgICByZXR1cm4gc2l6ZW9mIChVSU5UNjQpOworI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogICAgICAgcmV0dXJuIHNpemVvZiAobG9uZyBkb3VibGUpOworI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKICAgICAgIHJldHVybiBzaXplb2YgKFVJTlQ4KTsKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgpAQCAtMTg2LDcgKzIyNCw3IEBACiAJCQkgICAgZXh0ZW5kZWRfY2lmICopLAogICAgICAgICAgICAgICAgc3RydWN0IGNhbGxfY29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgIGV4dGVuZGVkX2NpZiAqLAotICAgICAgICAgICAgICAgdW5zaWduZWQsCisgICAgICAgICAgICAgICBzaXplX3QsCiAgICAgICAgICAgICAgICB2b2lkICgqZm4pKHZvaWQpKTsKIAogZXh0ZXJuIHZvaWQKQEAgLTMwNSw3ICszNDMsOSBAQAogICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKQEAgLTM2NywxNiArNDA3LDI0IEBACiB7CiAgIHVuc2lnbmVkIG5ncm47ICAgICAgICAgICAgICAgIC8qIE5leHQgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG51bWJlci4gKi8KICAgdW5zaWduZWQgbnNybjsgICAgICAgICAgICAgICAgLyogTmV4dCB2ZWN0b3IgcmVnaXN0ZXIgbnVtYmVyLiAqLwotICB1bnNpZ25lZCBuc2FhOyAgICAgICAgICAgICAgICAvKiBOZXh0IHN0YWNrIG9mZnNldC4gKi8KKyAgc2l6ZV90IG5zYWE7ICAgICAgICAgICAgICAgICAgLyogTmV4dCBzdGFjayBvZmZzZXQuICovCisKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisgIHVuc2lnbmVkIGFsbG9jYXRpbmdfdmFyaWFkaWM7CisjZW5kaWYKIH07CiAKIC8qIEluaXRpYWxpemUgYSBwcm9jZWR1cmUgY2FsbCBhcmd1bWVudCBtYXJzaGFsbGluZyBzdGF0ZS4gICovCiBzdGF0aWMgdm9pZAotYXJnX2luaXQgKHN0cnVjdCBhcmdfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjYWxsX2ZyYW1lX3NpemUpCithcmdfaW5pdCAoc3RydWN0IGFyZ19zdGF0ZSAqc3RhdGUsIHNpemVfdCBjYWxsX2ZyYW1lX3NpemUpCiB7CiAgIHN0YXRlLT5uZ3JuID0gMDsKICAgc3RhdGUtPm5zcm4gPSAwOwogICBzdGF0ZS0+bnNhYSA9IDA7CisKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisgIHN0YXRlLT5hbGxvY2F0aW5nX3ZhcmlhZGljID0gMDsKKyNlbmRpZgogfQogCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgY29uc2VjdXRpdmUgY29yZSBhcmd1bWVudApAQCAtNDAwLDM1ICs0NDgsMzUgQEAKIHN0YXRpYyB2b2lkICoKIGFsbG9jYXRlX3RvX3ggKHN0cnVjdCBjYWxsX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBhcmdfc3RhdGUgKnN0YXRlKQogewotICBGRklfQVNTRVJUIChzdGF0ZS0+bmdybiA8IE5fWF9BUkdfUkVHKQorICBGRklfQVNTRVJUIChzdGF0ZS0+bmdybiA8IE5fWF9BUkdfUkVHKTsKICAgcmV0dXJuIGdldF94X2FkZHIgKGNvbnRleHQsIChzdGF0ZS0+bmdybikrKyk7CiB9CiAKIHN0YXRpYyB2b2lkICoKIGFsbG9jYXRlX3RvX3MgKHN0cnVjdCBjYWxsX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBhcmdfc3RhdGUgKnN0YXRlKQogewotICBGRklfQVNTRVJUIChzdGF0ZS0+bnNybiA8IE5fVl9BUkdfUkVHKQorICBGRklfQVNTRVJUIChzdGF0ZS0+bnNybiA8IE5fVl9BUkdfUkVHKTsKICAgcmV0dXJuIGdldF9zX2FkZHIgKGNvbnRleHQsIChzdGF0ZS0+bnNybikrKyk7CiB9CiAKIHN0YXRpYyB2b2lkICoKIGFsbG9jYXRlX3RvX2QgKHN0cnVjdCBjYWxsX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBhcmdfc3RhdGUgKnN0YXRlKQogewotICBGRklfQVNTRVJUIChzdGF0ZS0+bnNybiA8IE5fVl9BUkdfUkVHKQorICBGRklfQVNTRVJUIChzdGF0ZS0+bnNybiA8IE5fVl9BUkdfUkVHKTsKICAgcmV0dXJuIGdldF9kX2FkZHIgKGNvbnRleHQsIChzdGF0ZS0+bnNybikrKyk7CiB9CiAKIHN0YXRpYyB2b2lkICoKIGFsbG9jYXRlX3RvX3YgKHN0cnVjdCBjYWxsX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBhcmdfc3RhdGUgKnN0YXRlKQogewotICBGRklfQVNTRVJUIChzdGF0ZS0+bnNybiA8IE5fVl9BUkdfUkVHKQorICBGRklfQVNTRVJUIChzdGF0ZS0+bnNybiA8IE5fVl9BUkdfUkVHKTsKICAgcmV0dXJuIGdldF92X2FkZHIgKGNvbnRleHQsIChzdGF0ZS0+bnNybikrKyk7CiB9CiAKIC8qIEFsbG9jYXRlIGFuIGFsaWduZWQgc2xvdCBvbiB0aGUgc3RhY2sgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuICAqLwogc3RhdGljIHZvaWQgKgotYWxsb2NhdGVfdG9fc3RhY2sgKHN0cnVjdCBhcmdfc3RhdGUgKnN0YXRlLCB2b2lkICpzdGFjaywgdW5zaWduZWQgYWxpZ25tZW50LAotCQkgICB1bnNpZ25lZCBzaXplKQorYWxsb2NhdGVfdG9fc3RhY2sgKHN0cnVjdCBhcmdfc3RhdGUgKnN0YXRlLCB2b2lkICpzdGFjaywgc2l6ZV90IGFsaWdubWVudCwKKwkJICAgc2l6ZV90IHNpemUpCiB7CiAgIHZvaWQgKmFsbG9jYXRpb247CiAKQEAgLTQzNiw3ICs0ODQsMTIgQEAKICAgICAgYWxpZ25tZW50IG9mIHRoZSBhcmd1bWVudCdzIHR5cGUuICAqLwogICBzdGF0ZS0+bnNhYSA9IEFMSUdOIChzdGF0ZS0+bnNhYSwgYWxpZ25tZW50KTsKICAgc3RhdGUtPm5zYWEgPSBBTElHTiAoc3RhdGUtPm5zYWEsIGFsaWdubWVudCk7CisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorICBpZiAoc3RhdGUtPmFsbG9jYXRpbmdfdmFyaWFkaWMpCisgICAgc3RhdGUtPm5zYWEgPSBBTElHTiAoc3RhdGUtPm5zYWEsIDgpOworI2Vsc2UKICAgc3RhdGUtPm5zYWEgPSBBTElHTiAoc3RhdGUtPm5zYWEsIDgpOworI2VuZGlmCiAKICAgYWxsb2NhdGlvbiA9IHN0YWNrICsgc3RhdGUtPm5zYWE7CiAKQEAgLTQ0Nyw3ICs1MDAsNyBAQAogc3RhdGljIHZvaWQKIGNvcHlfYmFzaWNfdHlwZSAodm9pZCAqZGVzdCwgdm9pZCAqc291cmNlLCB1bnNpZ25lZCBzaG9ydCB0eXBlKQogewotICAvKiBUaGlzIGlzIG5lY2Nlc3NhcnkgdG8gZW5zdXJlIHRoYXQgYmFzaWMgdHlwZXMgYXJlIGNvcGllZAorICAvKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBiYXNpYyB0eXBlcyBhcmUgY29waWVkCiAgICAgIHNpZ24gZXh0ZW5kZWQgdG8gNjQtYml0cyBhcyBsaWJmZmkgZXhwZWN0cy4gICovCiAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC00NTcsOSArNTEwLDExIEBACiAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CiAgICAgICAqKGRvdWJsZSAqKSBkZXN0ID0gKihkb3VibGUgKikgc291cmNlOwogICAgICAgYnJlYWs7CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAgICAgICAqKGxvbmcgZG91YmxlICopIGRlc3QgPSAqKGxvbmcgZG91YmxlICopIHNvdXJjZTsKICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKICAgICAgICooZmZpX2FyZyAqKSBkZXN0ID0gKihVSU5UOCAqKSBzb3VyY2U7CiAgICAgICBicmVhazsKQEAgLTQ4Niw2ICs1NDEsOCBAQAogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgogICAgICAgKihmZmlfc2FyZyAqKSBkZXN0ID0gKihTSU5UNjQgKikgc291cmNlOwogICAgICAgYnJlYWs7CisgICAgY2FzZSBGRklfVFlQRV9WT0lEOgorICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgogICAgICAgRkZJX0FTU0VSVCAoMCk7CkBAIC01MTQsNyArNTcxLDYgQEAKICAgICB7CiAgICAgICBpbnQgaTsKICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUgPSBnZXRfaG9tb2dlbmVvdXNfdHlwZSAodHkpOwotICAgICAgdW5zaWduZWQgZWxlbXMgPSBlbGVtZW50X2NvdW50ICh0eSk7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgZWxlbXM7IGkrKykKIAl7CiAJICB2b2lkICpyZWcgPSBhbGxvY2F0ZV90b192IChjb250ZXh0LCBzdGF0ZSk7CkBAIC01NDgsMTEgKzYwNCwxMyBAQAogCXJldHVybiBhbGxvY2F0ZV90b19kIChjb250ZXh0LCBzdGF0ZSk7CiAgICAgICBzdGF0ZS0+bnNybiA9IE5fVl9BUkdfUkVHOwogICAgICAgYnJlYWs7CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAgICAgICBpZiAoc3RhdGUtPm5zcm4gPCBOX1ZfQVJHX1JFRykKIAlyZXR1cm4gYWxsb2NhdGVfdG9fdiAoY29udGV4dCwgc3RhdGUpOwogICAgICAgc3RhdGUtPm5zcm4gPSBOX1ZfQVJHX1JFRzsKICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgpAQCAtNjE1LDcgKzY3Myw5IEBACiAJICAgYXBwcm9wcmlhdGUgcmVnaXN0ZXIsIG9yIGlmIG5vbmUgYXJlIGF2YWlsYWJsZSwgdG8gdGhlIHN0YWNrLiAgKi8KIAljYXNlIEZGSV9UWVBFX0ZMT0FUOgogCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorI2VuZGlmCiAJY2FzZSBGRklfVFlQRV9VSU5UODoKIAljYXNlIEZGSV9UWVBFX1NJTlQ4OgogCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgpAQCAtNjc2LDYgKzczNiwxNiBAQAogCSAgRkZJX0FTU0VSVCAoMCk7CiAJICBicmVhazsKIAl9CisKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisgICAgICBpZiAoaSArIDEgPT0gZWNpZi0+Y2lmLT5hYXJjaDY0X25maXhlZGFyZ3MpCisJeworCSAgc3RhdGUubmdybiA9IE5fWF9BUkdfUkVHOworCSAgc3RhdGUubnNybiA9IE5fVl9BUkdfUkVHOworCisJICBzdGF0ZS5hbGxvY2F0aW5nX3ZhcmlhZGljID0gMTsKKwl9CisjZW5kaWYKICAgICB9CiAKICAgcmV0dXJuIGVjaWYtPmNpZi0+YWFyY2g2NF9mbGFnczsKQEAgLTcxMiw2ICs3ODIsMjAgQEAKICAgcmV0dXJuIEZGSV9PSzsKIH0KIAorI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKworLyogUGVyZm9ybSBBcHBsZS1zcGVjaWZpYyBjaWYgcHJvY2Vzc2luZyBmb3IgdmFyaWFkaWMgY2FsbHMgKi8KK2ZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX21hY2hkZXBfdmFyKGZmaV9jaWYgKmNpZiwKKwkJCQkgICAgdW5zaWduZWQgaW50IG5maXhlZGFyZ3MsCisJCQkJICAgIHVuc2lnbmVkIGludCBudG90YWxhcmdzKQoreworICBjaWYtPmFhcmNoNjRfbmZpeGVkYXJncyA9IG5maXhlZGFyZ3M7CisKKyAgcmV0dXJuIGZmaV9wcmVwX2NpZl9tYWNoZGVwKGNpZik7Cit9CisKKyNlbmRpZgorCiAvKiBDYWxsIGEgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIGFuZCBjYXB0dXJlIHRoZSByZXR1cm4KICAgIHZhbHVlLiAgKi8KIHZvaWQKQEAgLTcyOCw3ICs4MTIsNyBAQAogICAgIGNhc2UgRkZJX1NZU1Y6CiAgICAgICB7CiAgICAgICAgIHN0cnVjdCBjYWxsX2NvbnRleHQgY29udGV4dDsKLQl1bnNpZ25lZCBzdGFja19ieXRlczsKKwlzaXplX3Qgc3RhY2tfYnl0ZXM7CiAKIAkvKiBGaWd1cmUgb3V0IHRoZSB0b3RhbCBhbW91bnQgb2Ygc3RhY2sgc3BhY2Ugd2UgbmVlZCwgdGhlCiAJICAgYWJvdmUgY2FsbCBmcmFtZSBzcGFjZSBuZWVkcyB0byBiZSAxNiBieXRlcyBhbGlnbmVkIHRvCkBAIC03NDUsNyArODI5LDkgQEAKICAgICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9WT0lEOgogICAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgogICAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisjZW5kaWYKICAgICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKICAgICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKICAgICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CkBAIC03NzgsNyArODY0LDcgQEAKIAkJICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGNpZi0+cnR5cGUtPnNpemUgKyA3KSAvIDggPCBOX1hfQVJHX1JFRykKICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IEFMSUdOIChjaWYtPnJ0eXBlLT5zaXplLCBzaXplb2YgKFVJTlQ2NCkpOworICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IEFMSUdOIChjaWYtPnJ0eXBlLT5zaXplLCBzaXplb2YgKFVJTlQ2NCkpOwogICAgICAgICAgICAgICAgICAgICBtZW1jcHkgKHJ2YWx1ZSwgZ2V0X3hfYWRkciAoJmNvbnRleHQsIDApLCBzaXplKTsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCkBAIC04MjQsNyArOTEwLDcgQEAKICAgICBtZW1jcHkgKF9fdHJhbXAgKyAxMiwgJl9fZnVuLCBzaXplb2YgKF9fZnVuKSk7CQkJXAogICAgIG1lbWNweSAoX190cmFtcCArIDIwLCAmX19jdHgsIHNpemVvZiAoX19jdHgpKTsJCQlcCiAgICAgbWVtY3B5IChfX3RyYW1wICsgMjgsICZfX2ZsYWdzLCBzaXplb2YgKF9fZmxhZ3MpKTsJCQlcCi0gICAgX19jbGVhcl9jYWNoZShfX3RyYW1wLCBfX3RyYW1wICsgRkZJX1RSQU1QT0xJTkVfU0laRSk7CQlcCisgICAgZmZpX2NsZWFyX2NhY2hlKF9fdHJhbXAsIF9fdHJhbXAgKyBGRklfVFJBTVBPTElORV9TSVpFKTsJCVwKICAgfSkKIAogZmZpX3N0YXR1cwpAQCAtODU3LDEzICs5NDMsMTMgQEAKICAgIHRoZSBzdGFjayBhdCB0aGUgcG9pbnQgZmZpX2Nsb3N1cmVfU1lTVigpIHdhcyBpbnZva2VkLgogCiAgICBPbiB0aGUgcmV0dXJuIHBhdGggdGhlIGFzc2VtYmxlciB3cmFwcGVyIHdpbGwgcmVsb2FkIGNhbGwgY29udGV4dAotICAgcmVnc2l0ZXJzLgorICAgcmVnaXN0ZXJzLgogCiAgICBmZmlfY2xvc3VyZV9TWVNWX2lubmVyKCkgbWFyc2hhbGxzIHRoZSBjYWxsIGNvbnRleHQgaW50byBmZmkgdmFsdWUKLSAgIGRlc3JpcHRvcnMsIGludm9rZXMgdGhlIHdyYXBwZWQgZnVuY3Rpb24sIHRoZW4gbWFyc2hhbGxzIHRoZSByZXR1cm4KKyAgIGRlc2NyaXB0b3JzLCBpbnZva2VzIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLCB0aGVuIG1hcnNoYWxscyB0aGUgcmV0dXJuCiAgICB2YWx1ZSBiYWNrIGludG8gdGhlIGNhbGwgY29udGV4dC4gICovCiAKLXZvaWQKK3ZvaWQgRkZJX0hJRERFTgogZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHN0cnVjdCBjYWxsX2NvbnRleHQgKmNvbnRleHQsCiAJCQl2b2lkICpzdGFjaykKIHsKQEAgLTg5NywxMCArOTgzLDEyIEBACiAJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAJY2FzZSAgRkZJX1RZUEVfRkxPQVQ6CiAJY2FzZSAgRkZJX1RZUEVfRE9VQkxFOgorI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAJY2FzZSAgRkZJX1RZUEVfTE9OR0RPVUJMRToKIAkgIGF2YWx1ZVtpXSA9IGFsbG9jYXRlX3RvX3JlZ2lzdGVyX29yX3N0YWNrIChjb250ZXh0LCBzdGFjaywKIAkJCQkJCSAgICAgJnN0YXRlLCB0eS0+dHlwZSk7CiAJICBicmVhazsKKyNlbmRpZgogCiAJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CiAJICBpZiAoaXNfaGZhICh0eSkpCkBAIC05MjQsNyArMTAxMiw3IEBACiAJCQkgICB0aGVyZWZvcmUgdGhlIHN0cnVjdHVyZSBpcyBub3QgcmVwcmVzZW50ZWQgYXMKIAkJCSAgIGEgY29udGlndW91cyBzZXF1ZW5jZSBvZiBieXRlcyBpbiBvdXIgc2F2ZWQKIAkJCSAgIHJlZ2lzdGVyIGNvbnRleHQuIFdlIG5lZWQgdG8gZmFrZSB1cCBhIGNvcHkKLQkJCSAgIG9mIHRoZSBzdHJ1Y3R1cmUgbGF5ZWQgb3V0IGluIG1lbW9yeQorCQkJICAgb2YgdGhlIHN0cnVjdHVyZSBsYWlkIG91dCBpbiBtZW1vcnkKIAkJCSAgIGNvcnJlY3RseS4gVGhlIGZha2UgY2FuIGJlIHRvc3NlZCBvbmNlIHRoZQogCQkJICAgY2xvc3VyZSBmdW5jdGlvbiBoYXMgcmV0dXJuZWQgaGVuY2UgYWxsb2NhKCkKIAkJCSAgIGlzIHN1ZmZpY2llbnQuICovCkBAIC05NDUsNyArMTAzMyw3IEBACiAJCQkgICB0aGVyZWZvcmUgdGhlIHN0cnVjdHVyZSBpcyBub3QgcmVwcmVzZW50ZWQgYXMKIAkJCSAgIGEgY29udGlndW91cyBzZXF1ZW5jZSBvZiBieXRlcyBpbiBvdXIgc2F2ZWQKIAkJCSAgIHJlZ2lzdGVyIGNvbnRleHQuIFdlIG5lZWQgdG8gZmFrZSB1cCBhIGNvcHkKLQkJCSAgIG9mIHRoZSBzdHJ1Y3R1cmUgbGF5ZWQgb3V0IGluIG1lbW9yeQorCQkJICAgb2YgdGhlIHN0cnVjdHVyZSBsYWlkIG91dCBpbiBtZW1vcnkKIAkJCSAgIGNvcnJlY3RseS4gVGhlIGZha2UgY2FuIGJlIHRvc3NlZCBvbmNlIHRoZQogCQkJICAgY2xvc3VyZSBmdW5jdGlvbiBoYXMgcmV0dXJuZWQgaGVuY2UgYWxsb2NhKCkKIAkJCSAgIGlzIHN1ZmZpY2llbnQuICovCkBAIC05NTgsMTEgKzEwNDYsMTMgQEAKIAkJCWJyZWFrOwogCQkgICAgICB9CiAKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogCQkgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogCQkJICBtZW1jcHkgKCZhdmFsdWVbaV0sCiAJCQkJICBhbGxvY2F0ZV90b192IChjb250ZXh0LCAmc3RhdGUpLAogCQkJCSAgc2l6ZW9mICgqYXZhbHVlKSk7CiAJCSAgICAgIGJyZWFrOworI2VuZGlmCiAKIAkJICAgIGRlZmF1bHQ6CiAJCSAgICAgIEZGSV9BU1NFUlQgKDApOwpAQCAtMTAzMyw3ICsxMTIzLDkgQEAKICAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAgICAgICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CiAgICAgICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyNlbmRpZgogCSAgewogCSAgICB2b2lkICphZGRyID0gZ2V0X2Jhc2ljX3R5cGVfYWRkciAoY2lmLT5ydHlwZS0+dHlwZSwgY29udGV4dCwgMCk7CiAJICAgIGNvcHlfYmFzaWNfdHlwZSAoYWRkciwgcnZhbHVlLCBjaWYtPnJ0eXBlLT50eXBlKTsKQEAgLTEwNDIsMTkgKzExMzQsMTkgQEAKICAgICAgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CiAgICAgICAgICAgaWYgKGlzX2hmYSAoY2lmLT5ydHlwZSkpCiAJICAgIHsKLQkgICAgICBpbnQgaTsKKwkgICAgICBpbnQgajsKIAkgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlID0gZ2V0X2hvbW9nZW5lb3VzX3R5cGUgKGNpZi0+cnR5cGUpOwogCSAgICAgIHVuc2lnbmVkIGVsZW1zID0gZWxlbWVudF9jb3VudCAoY2lmLT5ydHlwZSk7Ci0JICAgICAgZm9yIChpID0gMDsgaSA8IGVsZW1zOyBpKyspCisJICAgICAgZm9yIChqID0gMDsgaiA8IGVsZW1zOyBqKyspCiAJCXsKLQkJICB2b2lkICpyZWcgPSBnZXRfYmFzaWNfdHlwZV9hZGRyICh0eXBlLCBjb250ZXh0LCBpKTsKKwkJICB2b2lkICpyZWcgPSBnZXRfYmFzaWNfdHlwZV9hZGRyICh0eXBlLCBjb250ZXh0LCBqKTsKIAkJICBjb3B5X2Jhc2ljX3R5cGUgKHJlZywgcnZhbHVlLCB0eXBlKTsKIAkJICBydmFsdWUgKz0gZ2V0X2Jhc2ljX3R5cGVfc2l6ZSAodHlwZSk7CiAJCX0KIAkgICAgfQogICAgICAgICAgIGVsc2UgaWYgKChjaWYtPnJ0eXBlLT5zaXplICsgNykgLyA4IDwgTl9YX0FSR19SRUcpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBBTElHTiAoY2lmLT5ydHlwZS0+c2l6ZSwgc2l6ZW9mIChVSU5UNjQpKSA7CisgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gQUxJR04gKGNpZi0+cnR5cGUtPnNpemUsIHNpemVvZiAoVUlOVDY0KSkgOwogICAgICAgICAgICAgICBtZW1jcHkgKGdldF94X2FkZHIgKGNvbnRleHQsIDApLCBydmFsdWUsIHNpemUpOwogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L2ZmaXRhcmdldC5oCmluZGV4IDZmMWEzNDguLjRiYmNlZDIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvZmZpdGFyZ2V0LmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9mZml0YXJnZXQuaApAQCAtNDcsOCArNDcsMTIgQEAKIAogLyogLS0tLSBJbnRlcm5hbCAtLS0tICovCiAKLQorI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKyNkZWZpbmUgRkZJX1RBUkdFVF9TUEVDSUZJQ19WQVJJQURJQworI2RlZmluZSBGRklfRVhUUkFfQ0lGX0ZJRUxEUyB1bnNpZ25lZCBhYXJjaDY0X2ZsYWdzOyB1bnNpZ25lZCBhYXJjaDY0X25maXhlZGFyZ3MKKyNlbHNlCiAjZGVmaW5lIEZGSV9FWFRSQV9DSUZfRklFTERTIHVuc2lnbmVkIGFhcmNoNjRfZmxhZ3MKKyNlbmRpZgogCiAjZGVmaW5lIEFBUkNINjRfRkZJX1dJVEhfVl9CSVQgMAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvc3lzdi5TCmluZGV4IGI4Y2Q0MjEuLjE2OWVhYjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvc3lzdi5TCkBAIC0yMywxNCArMjMsMzMgQEAKICNpbmNsdWRlIDxmZmljb25maWcuaD4KICNpbmNsdWRlIDxmZmkuaD4KIAorI2lmZGVmIEhBVkVfTUFDSElORV9BU01fSAorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjZWxzZQorI2lmZGVmIF9fVVNFUl9MQUJFTF9QUkVGSVhfXworI2RlZmluZSBDT05DQVQxKGEsIGIpIENPTkNBVDIoYSwgYikKKyNkZWZpbmUgQ09OQ0FUMihhLCBiKSBhICMjIGIKKworLyogVXNlIHRoZSByaWdodCBwcmVmaXggZm9yIGdsb2JhbCBsYWJlbHMuICAqLworI2RlZmluZSBDTkFNRSh4KSBDT05DQVQxIChfX1VTRVJfTEFCRUxfUFJFRklYX18sIHgpCisjZWxzZQorI2RlZmluZSBDTkFNRSh4KSB4CisjZW5kaWYKKyNlbmRpZgorCiAjZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCiAjZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKICNkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkJLmNmaV9yZXN0b3JlIHJlZwogI2RlZmluZSBjZmlfZGVmX2NmYV9yZWdpc3RlcihyZWcpCS5jZmlfZGVmX2NmYV9yZWdpc3RlciByZWcKIAogICAgICAgICAudGV4dAotICAgICAgICAuZ2xvYmwgZmZpX2NhbGxfU1lTVgotICAgICAgICAudHlwZSBmZmlfY2FsbF9TWVNWLCAjZnVuY3Rpb24KKyAgICAgICAgLmdsb2JsIENOQU1FKGZmaV9jYWxsX1NZU1YpCisjaWZkZWYgX19FTEZfXworICAgICAgICAudHlwZSBDTkFNRShmZmlfY2FsbF9TWVNWKSwgI2Z1bmN0aW9uCisjZW5kaWYKKyNpZmRlZiBfX0FQUExFX18KKyAgICAgICAgLmFsaWduIDIKKyNlbmRpZgogCiAvKiBmZmlfY2FsbF9TWVNWKCkKIApAQCAtNTMsNyArNzIsNyBAQAogCQkJICAgZXh0ZW5kZWRfY2lmICopLAogICAgICAgICAgICAgICAgICAgc3RydWN0IGNhbGxfY29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX2NpZiAqLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVxdWlyZWRfc3RhY2tfc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCByZXF1aXJlZF9zdGFja19zaXplLAogICAgICAgICAgICAgICAgICAgdm9pZCAoKmZuKSh2b2lkKSk7CiAKICAgIFRoZXJlZm9yZSBvbiBlbnRyeSB3ZSBoYXZlOgpAQCAtODIsNyArMTAxLDcgQEAKICNkZWZpbmUgZmZpX2NhbGxfU1lTVl9GUyAoOCAqIDQpCiAKICAgICAgICAgLmNmaV9zdGFydHByb2MKLWZmaV9jYWxsX1NZU1Y6CitDTkFNRShmZmlfY2FsbF9TWVNWKToKICAgICAgICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKIAljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDE2KQogICAgICAgICBjZmlfcmVsX29mZnNldCAoeDI5LCAwKQpAQCAtOTIsMTEgKzExMSwxMSBAQAogCWNmaV9kZWZfY2ZhX3JlZ2lzdGVyICh4MjkpCiAgICAgICAgIHN1YiAgICAgc3AsIHNwLCAjZmZpX2NhbGxfU1lTVl9GUwogCi0gICAgICAgIHN0cCAgICAgeDIxLCB4MjIsIFtzcCwgMF0KKyAgICAgICAgc3RwICAgICB4MjEsIHgyMiwgW3NwLCAjMF0KICAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyMSwgMCAtIGZmaV9jYWxsX1NZU1ZfRlMpCiAgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjIsIDggLSBmZmlfY2FsbF9TWVNWX0ZTKQogCi0gICAgICAgIHN0cCAgICAgeDIzLCB4MjQsIFtzcCwgMTZdCisgICAgICAgIHN0cCAgICAgeDIzLCB4MjQsIFtzcCwgIzE2XQogICAgICAgICBjZmlfcmVsX29mZnNldCAoeDIzLCAxNiAtIGZmaV9jYWxsX1NZU1ZfRlMpCiAgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjQsIDI0IC0gZmZpX2NhbGxfU1lTVl9GUykKIApAQCAtMTgwLDcgKzE5OSw5IEBACiAgICAgICAgIHJldAogCiAgICAgICAgIC5jZmlfZW5kcHJvYwotICAgICAgICAuc2l6ZSBmZmlfY2FsbF9TWVNWLCAuLWZmaV9jYWxsX1NZU1YKKyNpZmRlZiBfX0VMRl9fCisgICAgICAgIC5zaXplIENOQU1FKGZmaV9jYWxsX1NZU1YpLCAuLUNOQU1FKGZmaV9jYWxsX1NZU1YpCisjZW5kaWYKIAogI2RlZmluZSBmZmlfY2xvc3VyZV9TWVNWX0ZTICg4ICogMiArIEFBUkNINjRfQ0FMTF9DT05URVhUX1NJWkUpCiAKQEAgLTIyMiwyMiArMjQzLDI1IEBACiAgICBWb2lsYSEgICovCiAKICAgICAgICAgLnRleHQKLSAgICAgICAgLmdsb2JsIGZmaV9jbG9zdXJlX1NZU1YKKyAgICAgICAgLmdsb2JsIENOQU1FKGZmaV9jbG9zdXJlX1NZU1YpCisjaWZkZWYgX19BUFBMRV9fCisgICAgICAgIC5hbGlnbiAyCisjZW5kaWYKICAgICAgICAgLmNmaV9zdGFydHByb2MKLWZmaV9jbG9zdXJlX1NZU1Y6CitDTkFNRShmZmlfY2xvc3VyZV9TWVNWKToKICAgICAgICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKIAljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDE2KQogICAgICAgICBjZmlfcmVsX29mZnNldCAoeDI5LCAwKQogICAgICAgICBjZmlfcmVsX29mZnNldCAoeDMwLCA4KQogCiAgICAgICAgIG1vdiAgICAgeDI5LCBzcAorICAgICAgICBjZmlfZGVmX2NmYV9yZWdpc3RlciAoeDI5KQogCiAgICAgICAgIHN1YiAgICAgc3AsIHNwLCAjZmZpX2Nsb3N1cmVfU1lTVl9GUwotCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoZmZpX2Nsb3N1cmVfU1lTVl9GUykKIAogICAgICAgICBzdHAgICAgIHgyMSwgeDIyLCBbeDI5LCAjLTE2XQotICAgICAgICBjZmlfcmVsX29mZnNldCAoeDIxLCAwKQotICAgICAgICBjZmlfcmVsX29mZnNldCAoeDIyLCA4KQorICAgICAgICBjZmlfcmVsX29mZnNldCAoeDIxLCAtMTYpCisgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjIsIC04KQogCiAgICAgICAgIC8qIExvYWQgeDIxIHdpdGggJmNhbGxfY29udGV4dC4gICovCiAgICAgICAgIG1vdiAgICAgeDIxLCBzcApAQCAtMjcwLDcgKzI5NCw3IEBACiAgICAgICAgICAgIHRyYW1wb2xpbmUgd2FzIGNhbGxlZC4gICovCiAgICAgICAgIGFkZCAgICAgeDIsIHgyOSwgIzE2CiAKLSAgICAgICAgYmwgICAgICBmZmlfY2xvc3VyZV9TWVNWX2lubmVyCisgICAgICAgIGJsICAgICAgQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcikKIAogICAgICAgICAvKiBGaWd1cmUgb3V0IGlmIHdlIHNob3VsZCB0b3VjaCB0aGUgdmVjdG9yIHJlZ2lzdGVycy4gICovCiAgICAgICAgIGxkciAgICAgeDAsIFt4MjIsICM4XQpAQCAtMjg3LDcgKzMxMSw3IEBACiAgICAgICAgIGxkcCAgICAgeDIsIHgzLCBbeDIxLCAjMTZdCiAgICAgICAgIGxkcCAgICAgeDQsIHg1LCBbeDIxLCAjMzJdCiAgICAgICAgIGxkcCAgICAgeDYsIHg3LCBbeDIxLCAjNDhdCi0gICAgICAgIC8qIE5vdGUgbm90aGluZyB1c2VmdWxsIGlzIHJldHVybmVkIGluIHg4LiAgKi8KKyAgICAgICAgLyogTm90ZSBub3RoaW5nIHVzZWZ1bCBpcyByZXR1cm5lZCBpbiB4OC4gICovCiAKICAgICAgICAgLyogV2UgYXJlIGRvbmUsIHVud2luZCBvdXIgZnJhbWUuICAqLwogICAgICAgICBsZHAgICAgIHgyMSwgeDIyLCBbeDI5LCAgIy0xNl0KQEAgLTI5NSw3ICszMTksNyBAQAogICAgICAgICBjZmlfcmVzdG9yZSAoeDIyKQogCiAgICAgICAgIG1vdiAgICAgc3AsIHgyOQotCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLWZmaV9jbG9zdXJlX1NZU1ZfRlMpCisgICAgICAgIGNmaV9kZWZfY2ZhX3JlZ2lzdGVyIChzcCkKIAogICAgICAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKIAljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC0xNikKQEAgLTMwNCw0ICszMjgsNiBAQAogCiAgICAgICAgIHJldAogICAgICAgICAuY2ZpX2VuZHByb2MKLSAgICAgICAgLnNpemUgZmZpX2Nsb3N1cmVfU1lTViwgLi1mZmlfY2xvc3VyZV9TWVNWCisjaWZkZWYgX19FTEZfXworICAgICAgICAuc2l6ZSBDTkFNRShmZmlfY2xvc3VyZV9TWVNWKSwgLi1DTkFNRShmZmlfY2xvc3VyZV9TWVNWKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvYXJjb21wYWN0LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvYXJjb21wYWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3MTVmZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9hcmNvbXBhY3QuUwpAQCAtMCwwICsxLDEzNSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGFyY29tcGFjdC5TIC0gQ29weXJpZ2h0IChjKSAyMDEzIFN5bnBvc3lzLCBJbmMuICh3d3cuc3lub3BzeXMuY29tKQorICAgCisgICBBUkNvbXBhY3QgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgUkVORVNBUyBURUNITk9MT0dZIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBMSUJGRklfQVNNCisjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisjaWZkZWYgSEFWRV9NQUNISU5FX0FTTV9ICisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNlbHNlCisjZGVmaW5lIENOQU1FKHgpIHgKKyNkZWZpbmUgRU5UUlkoeCkgLmdsb2JsIENOQU1FKHgpYCAudHlwZSBDTkFNRSh4KSwlZnVuY3Rpb25gIENOQU1FKHgpOgorI2VuZGlmCisKKy50ZXh0CisKKyAgICAgICAgLyogUjA6ICAgZmZpX3ByZXBfYXJncyAqLworICAgICAgICAvKiBSMTogICAmZWNpZiAqLworICAgICAgICAvKiBSMjogICBjaWYtPmJ5dGVzICovCisgICAgICAgIC8qIFIzOiAgIGZpZy0+ZmxhZ3MgKi8KKyAgICAgICAgLyogUjQ6ICAgZWNpZi5ydmFsdWUgKi8KKyAgICAgICAgLyogUjU6ICAgZm4gKi8KK0VOVFJZKGZmaV9jYWxsX0FSQ29tcGFjdCkKKyAgICAgICAgLyogU2F2ZSByZWdpc3RlcnMuICAqLworICAgICAgICBzdC5hICAgICAgIGZwLCBbc3AsIC00XSAgICAgICAgLyogZnAgKyAyMCwgZnAgKi8KKyAgICAgICAgcHVzaF9zICAgICBibGluayAgICAgICAgICAgICAgIC8qIGZwICsgMTYsIGJsaW5rICovCisgICAgICAgIHN0LmEgICAgICAgcjQsIFtzcCwgLTRdICAgICAgICAvKiBmcCArIDEyLCBlY2lmLnJ2YWx1ZSAqLworICAgICAgICBwdXNoX3MgICAgIHIzICAgICAgICAgICAgICAgICAgLyogZnAgKyAgOCwgZmlnLT5mbGFncyAqLworICAgICAgICBzdC5hICAgICAgIHI1LCBbc3AsIC00XSAgICAgICAgLyogZnAgKyAgNCwgZm4gKi8KKyAgICAgICAgcHVzaF9zICAgICByMiAgICAgICAgICAgICAgICAgIC8qIGZwICsgIDAsIGNpZi0+Ynl0ZXMgKi8KKyAgICAgICAgbW92ICAgICAgICBmcCwgc3AKKworICAgICAgICAvKiBNYWtlIHJvb20gZm9yIGFsbCBvZiB0aGUgbmV3IGFyZ3MuICAqLworICAgICAgICBzdWIgICAgICAgIHNwLCBzcCwgcjIKKworICAgICAgICAvKiBQbGFjZSBhbGwgb2YgdGhlIGZmaV9wcmVwX2FyZ3MgaW4gcG9zaXRpb24uICAqLworICAgICAgICAvKiBmZmlfcHJlcF9hcmdzKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpICovCisgICAgICAgIC8qIFIxIGFscmVhZHkgc2V0LiAgKi8KKworICAgICAgICAvKiBBbmQgY2FsbC4gICovCisgICAgICAgIGpsX3MuZCAgICAgW3IwXQorICAgICAgICBtb3ZfcyAgICAgIHIwLCBzcAorCisgICAgICAgIGxkLmFiICAgICAgcjEyLCBbZnAsIDRdICAgICAgICAvKiBjaWYtPmJ5dGVzICovCisgICAgICAgIGxkLmFiICAgICAgcjExLCBbZnAsIDRdICAgICAgICAvKiBmbiAqLworCisgICAgICAgIC8qIE1vdmUgZmlyc3QgOCBwYXJhbWV0ZXJzIGluIHJlZ2lzdGVycy4uLiAgKi8KKyAgICAgICAgbGRfcyAgICAgICByMCwgW3NwXQorICAgICAgICBsZF9zICAgICAgIHIxLCBbc3AsIDRdCisgICAgICAgIGxkX3MgICAgICAgcjIsIFtzcCwgOF0KKyAgICAgICAgbGRfcyAgICAgICByMywgW3NwLCAxMl0KKyAgICAgICAgbGQgICAgICAgICByNCwgW3NwLCAxNl0KKyAgICAgICAgbGQgICAgICAgICByNSwgW3NwLCAyMF0KKyAgICAgICAgbGQgICAgICAgICByNiwgW3NwLCAyNF0KKyAgICAgICAgbGQgICAgICAgICByNywgW3NwLCAyOF0KKworICAgICAgICAvKiAuLi5hbmQgYWRqdXN0IHRoZSBzdGFjay4gICovCisgICAgICAgIG1pbiAgICAgICAgcjEyLCByMTIsIDMyCisKKyAgICAgICAgLyogQ2FsbCB0aGUgZnVuY3Rpb24uICAqLworICAgICAgICBqbC5kICAgICAgIFtyMTFdCisgICAgICAgIGFkZCAgICAgICAgc3AsIHNwLCByMTIgCisKKyAgICAgICAgbW92ICAgICAgICBzcCwgZnAgICAgICAgIAorICAgICAgICBwb3BfcyAgICAgIHIzICAgICAgICAvKiBmaWctPmZsYWdzLCByZXR1cm4gdHlwZSAqLworICAgICAgICBwb3BfcyAgICAgIHIyICAgICAgICAvKiBlY2lmLnJ2YWx1ZSwgcG9pbnRlciBmb3IgcmV0dXJuIHZhbHVlICovCisKKyAgICAgICAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyIGlzIE5VTEwsIGFzc3VtZSBubyByZXR1cm4gdmFsdWUuICAqLworICAgICAgICBicmVxLmQgICAgIHIyLCAwLCBlcGlsb2d1ZQorICAgICAgICBwb3BfcyAgICAgIGJsaW5rCisKKyAgICAgICAgLyogUmV0dXJuIElOVC4gICovCisgICAgICAgIGJybmUgICAgICAgcjMsIEZGSV9UWVBFX0lOVCwgcmV0dXJuX2RvdWJsZQorICAgICAgICBiLmQgICAgICAgIGVwaWxvZ3VlCisgICAgICAgIHN0X3MgICAgICAgcjAsIFtyMl0gICAgICAgIAorCityZXR1cm5fZG91YmxlOgorICAgICAgICBicm5lICAgICAgIHIzLCBGRklfVFlQRV9ET1VCTEUsIGVwaWxvZ3VlCisgICAgICAgIHN0X3MgICAgICAgcjAsIFtyMl0gICAgICAgIAorICAgICAgICBzdF9zICAgICAgIHIxLCBbcjIsNF0KKworZXBpbG9ndWU6CisgICAgICAgIGpfcy5kICAgICAgW2JsaW5rXQorICAgICAgICBsZC5hYiAgICAgIGZwLCBbc3AsIDRdCisKK0VOVFJZKGZmaV9jbG9zdXJlX0FSQ29tcGFjdCkKKyAgICAgICAgc3QuYSAgICAgICByMCwgW3NwLCAtMzJdCisgICAgICAgIHN0X3MgICAgICAgcjEsIFtzcCwgNF0KKyAgICAgICAgc3RfcyAgICAgICByMiwgW3NwLCA4XQorICAgICAgICBzdF9zICAgICAgIHIzLCBbc3AsIDEyXQorICAgICAgICBzdCAgICAgICAgIHI0LCBbc3AsIDE2XQorICAgICAgICBzdCAgICAgICAgIHI1LCBbc3AsIDIwXQorICAgICAgICBzdCAgICAgICAgIHI2LCBbc3AsIDI0XQorICAgICAgICBzdCAgICAgICAgIHI3LCBbc3AsIDI4XQorCisgICAgICAgIC8qIHBvaW50ZXIgdG8gYXJndW1lbnRzICovCisgICAgICAgIG1vdl9zICAgICAgcjIsIHNwCisKKyAgICAgICAgLyogcmV0dXJuIHZhbHVlIGdvZXMgaGVyZSAqLworICAgICAgICBzdWIgICAgICAgIHNwLCBzcCwgOAorICAgICAgICBtb3ZfcyAgICAgIHIxLCBzcAorCisgICAgICAgIHB1c2hfcyAgICAgYmxpbmsKKyAgICAgICAgCisgICAgICAgIGJsLmQgICAgICAgZmZpX2Nsb3N1cmVfaW5uZXJfQVJDb21wYWN0CisgICAgICAgIG1vdl9zICAgICAgcjAsIHI4ICAgICAgICAgICAgICAgIC8qIGNvZGVsb2MsIHNldCBieSB0cmFtcG9saW5lICovCisKKyAgICAgICAgcG9wX3MgICAgICBibGluaworCisgICAgICAgIC8qIHNldCByZXR1cm4gdmFsdWUgdG8gcjE6cjAgKi8KKyAgICAgICAgcG9wX3MgICAgICByMAorICAgICAgICBwb3BfcyAgICAgIHIxCisgICAgICAgIGpfcy5kICAgICAgW2JsaW5rXQorICAgICAgICBhZGRfcyAgICAgIHNwLCBzcCwgMzIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9mZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmY4MmE3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2ZmaS5jCkBAIC0wLDAgKzEsMjY4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMTMgIFN5bm9wc3lzLCBJbmMuICh3d3cuc3lub3BzeXMuY29tKQorICAgCisgICBBUkMgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgUkVORVNBUyBURUNITk9MT0dZIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8c3lzL2NhY2hlY3RsLmg+CisKKy8qIGZvciBsaXR0bGUgZW5kaWFuIEFSQywgdGhlIGNvZGUgaXMgaW4gZmFjdCBzdG9yZWQgYXMgbWl4ZWQgZW5kaWFuIGZvcgorICAgcGVyZm9ybWFuY2UgcmVhc29ucyAqLworI2lmIF9fQklHX0VORElBTl9fCisjZGVmaW5lIENPREVfRU5ESUFOKHgpICh4KQorI2Vsc2UKKyNkZWZpbmUgQ09ERV9FTkRJQU4oeCkgKCAoKCh1aW50MzJfdCkgKHgpKSA8PCAxNikgfCAoKCh1aW50MzJfdCkgKHgpKSA+PiAxNikpCisjZW5kaWYKKworLyogZmZpX3ByZXBfYXJncyBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjaworICAgc3BhY2UgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuICAqLworCit2b2lkCitmZmlfcHJlcF9hcmdzIChjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICogZWNpZikKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIGludCB0bXA7CisgIHZvaWQgKipwX2FyZ3Y7CisgIGNoYXIgKmFyZ3A7CisgIGZmaV90eXBlICoqcF9hcmc7CisKKyAgdG1wID0gMDsKKyAgYXJncCA9IHN0YWNrOworCisgIGlmIChlY2lmLT5jaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgICB7CisgICAgICAqKHZvaWQgKiopIGFyZ3AgPSBlY2lmLT5ydmFsdWU7CisgICAgICBhcmdwICs9IDQ7CisgICAgfQorCisgIHBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKKworICBmb3IgKGkgPSBlY2lmLT5jaWYtPm5hcmdzLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOworICAgICAgIChpICE9IDApOyBpLS0sIHBfYXJnKyspCisgICAgeworICAgICAgc2l6ZV90IHo7CisgICAgICBpbnQgYWxpZ25tZW50OworCisgICAgICAvKiBhbGlnbiBhbGlnbm1lbnQgdG8gNCAqLworICAgICAgYWxpZ25tZW50ID0gKCgoKnBfYXJnKS0+YWxpZ25tZW50IC0gMSkgfCAzKSArIDE7CisKKyAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeS4gICovCisgICAgICBpZiAoKGFsaWdubWVudCAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKQorCWFyZ3AgPSAoY2hhciAqKSBBTElHTiAoYXJncCwgYWxpZ25tZW50KTsKKworICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOworICAgICAgaWYgKHogPCBzaXplb2YgKGludCkpCisJeworCSAgeiA9IHNpemVvZiAoaW50KTsKKworCSAgc3dpdGNoICgoKnBfYXJnKS0+dHlwZSkKKwkgICAgeworCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpICooU0lOVDggKikgKCpwX2FyZ3YpOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDggKikgKCpwX2FyZ3YpOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpICooU0lOVDE2ICopICgqcF9hcmd2KTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UMTYgKikgKCpwX2FyZ3YpOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgICAgIG1lbWNweSAoYXJncCwgKnBfYXJndiwgKCpwX2FyZyktPnNpemUpOworCSAgICAgIGJyZWFrOworCisJICAgIGRlZmF1bHQ6CisJICAgICAgRkZJX0FTU0VSVCAoMCk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICh6ID09IHNpemVvZiAoaW50KSkKKwl7CisJICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UMzIgKikgKCpwX2FyZ3YpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorCSAgICB7CisJICAgICAgbWVtY3B5IChhcmdwLCAqcF9hcmd2LCB6KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogRG91YmxlIG9yIGxvbmcgbG9uZyA2NGJpdC4gICovCisJICAgICAgbWVtY3B5IChhcmdwLCAqcF9hcmd2LCB6KTsKKwkgICAgfQorCX0KKyAgICAgIHBfYXJndisrOworICAgICAgYXJncCArPSB6OworICAgIH0KKworICByZXR1cm47Cit9CisKKy8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcuICAqLworZmZpX3N0YXR1cworZmZpX3ByZXBfY2lmX21hY2hkZXAgKGZmaV9jaWYgKiBjaWYpCit7CisgIC8qIFNldCB0aGUgcmV0dXJuIHR5cGUgZmxhZy4gICovCisgIHN3aXRjaCAoY2lmLT5ydHlwZS0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBGRklfVFlQRV9WT0lEOgorICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZCkgY2lmLT5ydHlwZS0+dHlwZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKSBjaWYtPnJ0eXBlLT50eXBlOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKyAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9ET1VCTEU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisgICAgZGVmYXVsdDoKKyAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9JTlQ7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKworZXh0ZXJuIHZvaWQgZmZpX2NhbGxfQVJDb21wYWN0ICh2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwKKwkJCQlleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsIHVuc2lnbmVkLAorCQkJCXVuc2lnbmVkICosIHZvaWQgKCpmbikgKHZvaWQpKTsKKwordm9pZAorZmZpX2NhbGwgKGZmaV9jaWYgKiBjaWYsIHZvaWQgKCpmbikgKHZvaWQpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCit7CisgIGV4dGVuZGVkX2NpZiBlY2lmOworCisgIGVjaWYuY2lmID0gY2lmOworICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKKworICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlCisgICAgIGEgcmV0dXJuIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lLiAgKi8KKyAgaWYgKChydmFsdWUgPT0gTlVMTCkgJiYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKSkKKyAgICB7CisgICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYSAoY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgfQorICBlbHNlCisgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CisKKyAgc3dpdGNoIChjaWYtPmFiaSkKKyAgICB7CisgICAgY2FzZSBGRklfQVJDT01QQUNUOgorICAgICAgZmZpX2NhbGxfQVJDb21wYWN0IChmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywKKwkJCSAgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZGSV9BU1NFUlQgKDApOworICAgICAgYnJlYWs7CisgICAgfQorfQorCitpbnQKK2ZmaV9jbG9zdXJlX2lubmVyX0FSQ29tcGFjdCAoZmZpX2Nsb3N1cmUgKiBjbG9zdXJlLCB2b2lkICpydmFsdWUsCisJCQkgICAgIGZmaV9hcmcgKiBhcmdzKQoreworICB2b2lkICoqYXJnX2FyZWEsICoqcF9hcmd2OworICBmZmlfY2lmICpjaWYgPSBjbG9zdXJlLT5jaWY7CisgIGNoYXIgKmFyZ3AgPSAoY2hhciAqKSBhcmdzOworICBmZmlfdHlwZSAqKnBfYXJndDsKKyAgaW50IGk7CisKKyAgYXJnX2FyZWEgPSAodm9pZCAqKikgYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKKworICAvKiBoYW5kbGUgaGlkZGVuIGFyZ3VtZW50ICovCisgIGlmIChjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgICB7CisgICAgICBydmFsdWUgPSAqKHZvaWQgKiopIGFyZ3A7CisgICAgICBhcmdwICs9IDQ7CisgICAgfQorCisgIHBfYXJndiA9IGFyZ19hcmVhOworCisgIGZvciAoaSA9IDAsIHBfYXJndCA9IGNpZi0+YXJnX3R5cGVzOyBpIDwgY2lmLT5uYXJnczsKKyAgICAgICBpKyssIHBfYXJndCsrLCBwX2FyZ3YrKykKKyAgICB7CisgICAgICBzaXplX3QgejsKKyAgICAgIGludCBhbGlnbm1lbnQ7CisKKyAgICAgIC8qIGFsaWduIGFsaWdubWVudCB0byA0ICovCisgICAgICBhbGlnbm1lbnQgPSAoKCgqcF9hcmd0KS0+YWxpZ25tZW50IC0gMSkgfCAzKSArIDE7CisKKyAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeS4gICovCisgICAgICBpZiAoKGFsaWdubWVudCAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKQorCWFyZ3AgPSAoY2hhciAqKSBBTElHTiAoYXJncCwgYWxpZ25tZW50KTsKKworICAgICAgeiA9ICgqcF9hcmd0KS0+c2l6ZTsKKyAgICAgICpwX2FyZ3YgPSAodm9pZCAqKSBhcmdwOworICAgICAgYXJncCArPSB6OworICAgIH0KKworICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCBydmFsdWUsIGFyZ19hcmVhLCBjbG9zdXJlLT51c2VyX2RhdGEpOworCisgIHJldHVybiBjaWYtPmZsYWdzOworfQorCitleHRlcm4gdm9pZCBmZmlfY2xvc3VyZV9BUkNvbXBhY3QgKHZvaWQpOworCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUgKiBjbG9zdXJlLCBmZmlfY2lmICogY2lmLAorCQkgICAgICB2b2lkICgqZnVuKSAoZmZpX2NpZiAqLCB2b2lkICosIHZvaWQgKiosIHZvaWQgKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqY29kZWxvYykKK3sKKyAgdWludDMyX3QgKnRyYW1wID0gKHVpbnQzMl90ICopICYgKGNsb3N1cmUtPnRyYW1wWzBdKTsKKworICBzd2l0Y2ggKGNpZi0+YWJpKQorICAgIHsKKyAgICBjYXNlIEZGSV9BUkNPTVBBQ1Q6CisgICAgICBGRklfQVNTRVJUICh0cmFtcCA9PSBjb2RlbG9jKTsKKyAgICAgIHRyYW1wWzBdID0gQ09ERV9FTkRJQU4gKDB4MjAwYTFmYzApOwkvKiBtb3YgcjgsIHBjbCAgKi8KKyAgICAgIHRyYW1wWzFdID0gQ09ERV9FTkRJQU4gKDB4MjAyMDBmODApOwkvKiBqIFtsb25nIGltbV0gKi8KKyAgICAgIHRyYW1wWzJdID0gQ09ERV9FTkRJQU4gKGZmaV9jbG9zdXJlX0FSQ29tcGFjdCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisgICAgfQorCisgIGNsb3N1cmUtPmNpZiA9IGNpZjsKKyAgY2xvc3VyZS0+ZnVuID0gZnVuOworICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgIGNhY2hlZmx1c2ggKGNvZGVsb2MsIEZGSV9UUkFNUE9MSU5FX1NJWkUsIEJDQUNIRSk7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9mZml0YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjgzMTFiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2ZmaXRhcmdldC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmZml0YXJnZXQuaCAtIENvcHlyaWdodCAoYykgMjAxMiAgQW50aG9ueSBHcmVlbgorICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTMgIFN5bm9wc3lzLCBJbmMuICh3d3cuc3lub3BzeXMuY29tKQorICAgVGFyZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zIGZvciBBUkMuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgUkVORVNBUyBURUNITk9MT0dZIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIExJQkZGSV9UQVJHRVRfSAorI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKKworI2lmbmRlZiBMSUJGRklfSAorI2Vycm9yICJQbGVhc2UgZG8gbm90IGluY2x1ZGUgZmZpdGFyZ2V0LmggZGlyZWN0bHkgaW50byB5b3VyIHNvdXJjZS4gIFVzZSBmZmkuaCBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiAtLS0tIEdlbmVyaWMgdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIExJQkZGSV9BU00KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBmZmlfYXJnOwordHlwZWRlZiBzaWduZWQgbG9uZyBmZmlfc2FyZzsKKwordHlwZWRlZiBlbnVtIGZmaV9hYmkKK3sKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9BUkNPTVBBQ1QsCisgIEZGSV9MQVNUX0FCSSwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0FSQ09NUEFDVAorfSBmZmlfYWJpOworI2VuZGlmCisKKyNkZWZpbmUgRkZJX0NMT1NVUkVTIAkJMQorI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFCTEyCisjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAJMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9mZmkuYwppbmRleCA3ZmQ3ZjQ0Li42NjkxYWI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL2ZmaS5jCkBAIC00LDggKzQsOCBAQAogICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTEgQW50aG9ueSBHcmVlbgogCSAgIENvcHlyaWdodCAoYykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk4LCAyMDA4LCAyMDExICBSZWQgSGF0LCBJbmMuCi0JICAgCi0gICBBUk0gRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCisKKyAgIEFSTSBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQogCiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQpAQCAtMzcsNiArMzcsODcgQEAKIHN0YXRpYyBpbnQgdmZwX3R5cGVfcCAoZmZpX3R5cGUgKik7CiBzdGF0aWMgdm9pZCBsYXlvdXRfdmZwX2FyZ3MgKGZmaV9jaWYgKik7CiAKK2ludCBmZmlfcHJlcF9hcmdzX1NZU1YoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZiwgZmxvYXQgKnZmcF9zcGFjZSk7CitpbnQgZmZpX3ByZXBfYXJnc19WRlAoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZiwgZmxvYXQgKnZmcF9zcGFjZSk7CisKK3N0YXRpYyBjaGFyKiBmZmlfYWxpZ24oZmZpX3R5cGUgKipwX2FyZywgY2hhciAqYXJncCkKK3sKKyAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5ICovCisgIHJlZ2lzdGVyIHNpemVfdCBhbGlnbm1lbnQgPSAoKnBfYXJnKS0+YWxpZ25tZW50OworICBpZiAoYWxpZ25tZW50IDwgNCkKKyAgeworICAgIGFsaWdubWVudCA9IDQ7CisgIH0KKyNpZmRlZiBfV0lOMzJfV0NFCisgIGlmIChhbGlnbm1lbnQgPiA0KQorICB7CisgICAgYWxpZ25tZW50ID0gNDsKKyAgfQorI2VuZGlmCisgIGlmICgoYWxpZ25tZW50IC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApCisgIHsKKyAgICBhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgYWxpZ25tZW50KTsKKyAgfQorCisgIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisgIHsKKyAgICBhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgNCk7CisgIH0KKyAgcmV0dXJuIGFyZ3A7Cit9CisKK3N0YXRpYyBzaXplX3QgZmZpX3B1dF9hcmcoZmZpX3R5cGUgKiphcmdfdHlwZSwgdm9pZCAqKmFyZywgY2hhciAqc3RhY2spCit7CisJcmVnaXN0ZXIgY2hhciogYXJncCA9IHN0YWNrOworCXJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmcgPSBhcmdfdHlwZTsKKwlyZWdpc3RlciB2b2lkICoqcF9hcmd2ID0gYXJnOworCXJlZ2lzdGVyIHNpemVfdCB6ID0gKCpwX2FyZyktPnNpemU7CisgIGlmICh6IDwgc2l6ZW9mKGludCkpCisgICAgeworCQl6ID0gc2l6ZW9mKGludCk7CisJCXN3aXRjaCAoKCpwX2FyZyktPnR5cGUpCisgICAgICB7CisgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorICAgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDggKikoKiBwX2FyZ3YpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorICAgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQ4ICopKCogcF9hcmd2KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisgICAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UMTYgKikoKiBwX2FyZ3YpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyAgICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMTYgKikoKiBwX2FyZ3YpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyAgICAgICAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsICgqcF9hcmcpLT5zaXplKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIEZGSV9BU1NFUlQoMCk7CisgICAgICB9CisgICAgfQorICBlbHNlIGlmICh6ID09IHNpemVvZihpbnQpKQorICAgIHsKKwkJaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUKQorCQkJKihmbG9hdCAqKSBhcmdwID0gKihmbG9hdCAqKSgqIHBfYXJndik7CisJCWVsc2UKKwkJCSoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDMyICopKCogcF9hcmd2KTsKKyAgICB9CisJZWxzZSBpZiAoeiA9PSBzaXplb2YoZG91YmxlKSAmJiAoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCisJCXsKKwkJCSooZG91YmxlICopIGFyZ3AgPSAqKGRvdWJsZSAqKSgqIHBfYXJndik7CisJCX0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1lbWNweShhcmdwLCAqcF9hcmd2LCB6KTsKKyAgICB9CisgIHJldHVybiB6OworfQogLyogZmZpX3ByZXBfYXJncyBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQogICAgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMKICAgIApAQCAtNDQsMTQgKzEyNSwxNCBAQAogICAgdmFsdWUgaXMgY2lmLT52ZnBfdXNlZCAod29yZCBiaXRzZXQgb2YgVkZQIHJlZ3MgdXNlZCBmb3IgcGFzc2luZwogICAgYXJndW1lbnRzKS4gVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgdGhlIFZGUCBoYXJkLWZsb2F0IEFCSS4KICovCi1pbnQgZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmLCBmbG9hdCAqdmZwX3NwYWNlKQoraW50IGZmaV9wcmVwX2FyZ3NfU1lTVihjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmLCBmbG9hdCAqdmZwX3NwYWNlKQogewotICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaSwgdmkgPSAwOworICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaTsKICAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKICAgcmVnaXN0ZXIgY2hhciAqYXJncDsKICAgcmVnaXN0ZXIgZmZpX3R5cGUgKipwX2FyZzsKLQogICBhcmdwID0gc3RhY2s7CisgIAogCiAgIGlmICggZWNpZi0+Y2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QgKSB7CiAgICAgKih2b2lkICoqKSBhcmdwID0gZWNpZi0+cnZhbHVlOwpAQCAtNjIsODEgKzE0Myw4OSBAQAogCiAgIGZvciAoaSA9IGVjaWYtPmNpZi0+bmFyZ3MsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7CiAgICAgICAgKGkgIT0gMCk7Ci0gICAgICAgaS0tLCBwX2FyZysrKQorICAgICAgIGktLSwgcF9hcmcrKywgcF9hcmd2KyspCiAgICAgewotICAgICAgc2l6ZV90IHo7Ci0gICAgICBzaXplX3QgYWxpZ25tZW50OwotCi0gICAgICAvKiBBbGxvY2F0ZWQgaW4gVkZQIHJlZ2lzdGVycy4gKi8KLSAgICAgIGlmIChlY2lmLT5jaWYtPmFiaSA9PSBGRklfVkZQCi0JICAmJiB2aSA8IGVjaWYtPmNpZi0+dmZwX25hcmdzICYmIHZmcF90eXBlX3AgKCpwX2FyZykpCi0JewotCSAgZmxvYXQqIHZmcF9zbG90ID0gdmZwX3NwYWNlICsgZWNpZi0+Y2lmLT52ZnBfYXJnc1t2aSsrXTsKLQkgIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKLQkgICAgKigoZmxvYXQqKXZmcF9zbG90KSA9ICooKGZsb2F0KikqcF9hcmd2KTsKLQkgIGVsc2UgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKLQkgICAgKigoZG91YmxlKil2ZnBfc2xvdCkgPSAqKChkb3VibGUqKSpwX2FyZ3YpOwotCSAgZWxzZQotCSAgICBtZW1jcHkodmZwX3Nsb3QsICpwX2FyZ3YsICgqcF9hcmcpLT5zaXplKTsKLQkgIHBfYXJndisrOwotCSAgY29udGludWU7Ci0JfQotCi0gICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkgKi8KLSAgICAgIGFsaWdubWVudCA9ICgqcF9hcmcpLT5hbGlnbm1lbnQ7Ci0jaWZkZWYgX1dJTjMyX1dDRQotICAgICAgaWYgKGFsaWdubWVudCA+IDQpCi0JYWxpZ25tZW50ID0gNDsKLSNlbmRpZgotICAgICAgaWYgKChhbGlnbm1lbnQgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkgewotCWFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCBhbGlnbm1lbnQpOwotICAgICAgfQotCi0gICAgICBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQotCWFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCA0KTsKLQotCSAgeiA9ICgqcF9hcmcpLT5zaXplOwotCSAgaWYgKHogPCBzaXplb2YoaW50KSkKLQkgICAgewotCSAgICAgIHogPSBzaXplb2YoaW50KTsKLQkgICAgICBzd2l0Y2ggKCgqcF9hcmcpLT50eXBlKQotCQl7Ci0JCWNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JCSAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQ4ICopKCogcF9hcmd2KTsKLQkJICBicmVhazsKLQkJICAKLQkJY2FzZSBGRklfVFlQRV9VSU5UODoKLQkJICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQ4ICopKCogcF9hcmd2KTsKLQkJICBicmVhazsKLQkJICAKLQkJY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JCSAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQxNiAqKSgqIHBfYXJndik7Ci0JCSAgYnJlYWs7Ci0JCSAgCi0JCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCQkgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDE2ICopKCogcF9hcmd2KTsKLQkJICBicmVhazsKLQkJICAKLQkJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0JCSAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsICgqcF9hcmcpLT5zaXplKTsKLQkJICBicmVhazsKLQotCQlkZWZhdWx0OgotCQkgIEZGSV9BU1NFUlQoMCk7Ci0JCX0KLQkgICAgfQotCSAgZWxzZSBpZiAoeiA9PSBzaXplb2YoaW50KSkKLQkgICAgewotCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDMyICopKCogcF9hcmd2KTsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsIHopOwotCSAgICB9Ci0JICBwX2FyZ3YrKzsKLQkgIGFyZ3AgKz0gejsKKyAgICBhcmdwID0gZmZpX2FsaWduKHBfYXJnLCBhcmdwKTsKKyAgICBhcmdwICs9IGZmaV9wdXRfYXJnKHBfYXJnLCBwX2FyZ3YsIGFyZ3ApOwogICAgIH0KIAorICByZXR1cm4gMDsKK30KKworaW50IGZmaV9wcmVwX2FyZ3NfVkZQKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYsIGZsb2F0ICp2ZnBfc3BhY2UpCit7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpLCB2aSA9IDA7CisgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CisgIHJlZ2lzdGVyIGNoYXIgKmFyZ3AsICpyZWdwLCAqZW9fcmVncDsKKyAgcmVnaXN0ZXIgZmZpX3R5cGUgKipwX2FyZzsKKyAgY2hhciBzdGFja191c2VkID0gMDsKKyAgY2hhciBkb25lX3dpdGhfcmVncyA9IDA7CisgIGNoYXIgaXNfdmZwX3R5cGU7CisKKyAgLy8gbWFrZSBzdXJlIHdlIGFyZSB1c2luZyBGRklfVkZQCisgIEZGSV9BU1NFUlQoZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX1ZGUCk7CisKKyAgLyogdGhlIGZpcnN0IDQgd29yZHMgb24gdGhlIHN0YWNrIGFyZSB1c2VkIGZvciB2YWx1ZXMgcGFzc2VkIGluIGNvcmUKKyAgICogcmVnaXN0ZXJzLiAqLworICByZWdwID0gc3RhY2s7CisgIGVvX3JlZ3AgPSBhcmdwID0gcmVncCArIDE2OworICAKKworICAvKiBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBGRklfVFlQRV9TVFJVQ1QgaW4gbWVtb3J5LCB0aGF0IGFkZHJlc3MgaXMKKyAgICogcGFzc2VkIGluIHIwIHRvIHRoZSBmdW5jdGlvbiAqLworICBpZiAoIGVjaWYtPmNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUICkgeworICAgICoodm9pZCAqKikgcmVncCA9IGVjaWYtPnJ2YWx1ZTsKKyAgICByZWdwICs9IDQ7CisgIH0KKworICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CisKKyAgZm9yIChpID0gZWNpZi0+Y2lmLT5uYXJncywgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsKKyAgICAgICAoaSAhPSAwKTsKKyAgICAgICBpLS0sIHBfYXJnKyssIHBfYXJndisrKQorICAgIHsKKyAgICAgIGlzX3ZmcF90eXBlID0gdmZwX3R5cGVfcCAoKnBfYXJnKTsKKworICAgICAgLyogQWxsb2NhdGVkIGluIFZGUCByZWdpc3RlcnMuICovCisgICAgICBpZih2aSA8IGVjaWYtPmNpZi0+dmZwX25hcmdzICYmIGlzX3ZmcF90eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2hhciAqdmZwX3Nsb3QgPSAoY2hhciAqKSh2ZnBfc3BhY2UgKyBlY2lmLT5jaWYtPnZmcF9hcmdzW3ZpKytdKTsKKyAgICAgICAgICBmZmlfcHV0X2FyZyhwX2FyZywgcF9hcmd2LCB2ZnBfc2xvdCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIC8qIFRyeSBhbGxvY2F0aW5nIGluIGNvcmUgcmVnaXN0ZXJzLiAqLworICAgICAgZWxzZSBpZiAoIWRvbmVfd2l0aF9yZWdzICYmICFpc192ZnBfdHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgKnRyZWdwID0gZmZpX2FsaWduKHBfYXJnLCByZWdwKTsKKyAgICAgICAgICBzaXplX3Qgc2l6ZSA9ICgqcF9hcmcpLT5zaXplOyAKKyAgICAgICAgICBzaXplID0gKHNpemUgPCA0KT8gNCA6IHNpemU7IC8vIHBhZAorICAgICAgICAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGxlZnQgaW4gdGhlIGFsaWduZWQgcmVnaXN0ZXIgYXJlYSB0byBwbGFjZQorICAgICAgICAgICAqIHRoZSBhcmd1bWVudCAqLworICAgICAgICAgIGlmKHRyZWdwICsgc2l6ZSA8PSBlb19yZWdwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZWdwID0gdHJlZ3AgKyBmZmlfcHV0X2FyZyhwX2FyZywgcF9hcmd2LCB0cmVncCk7CisgICAgICAgICAgICAgIGRvbmVfd2l0aF9yZWdzID0gKHJlZ3AgPT0gYXJncCk7CisgICAgICAgICAgICAgIC8vIGVuc3VyZSB3ZSBkaWQgbm90IHdyaXRlIGludG8gdGhlIHN0YWNrIGFyZWEKKyAgICAgICAgICAgICAgRkZJX0FTU0VSVChyZWdwIDw9IGFyZ3ApOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBJbiBjYXNlIHRoZXJlIGFyZSBubyBhcmd1bWVudHMgaW4gdGhlIHN0YWNrIGFyZWEgeWV0LCAKKyAgICAgICAgICB0aGUgYXJndW1lbnQgaXMgcGFzc2VkIGluIHRoZSByZW1haW5pbmcgY29yZSByZWdpc3RlcnMgYW5kIG9uIHRoZQorICAgICAgICAgIHN0YWNrLiAqLworICAgICAgICAgIGVsc2UgaWYgKCFzdGFja191c2VkKSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhY2tfdXNlZCA9IDE7CisgICAgICAgICAgICAgIGRvbmVfd2l0aF9yZWdzID0gMTsKKyAgICAgICAgICAgICAgYXJncCA9IHRyZWdwICsgZmZpX3B1dF9hcmcocF9hcmcsIHBfYXJndiwgdHJlZ3ApOworICAgICAgICAgICAgICBGRklfQVNTRVJUKGVvX3JlZ3AgPCBhcmdwKTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIC8qIEJhc2UgY2FzZSwgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdGhlIHN0YWNrICovCisgICAgICBzdGFja191c2VkID0gMTsKKyAgICAgIGFyZ3AgPSBmZmlfYWxpZ24ocF9hcmcsIGFyZ3ApOworICAgICAgYXJncCArPSBmZmlfcHV0X2FyZyhwX2FyZywgcF9hcmd2LCBhcmdwKTsKKyAgICB9CiAgIC8qIEluZGljYXRlIHRoZSBWRlAgcmVnaXN0ZXJzIHVzZWQuICovCiAgIHJldHVybiBlY2lmLT5jaWYtPnZmcF91c2VkOwogfQpAQCAtMjI3LDcgKzMxNiw3IEBACiAgIGVjaWYuYXZhbHVlID0gYXZhbHVlOwogCiAgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4JKi8KLSAgLyogdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUJCSAgICAgICAgKi8KKyAgLyogdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUJCQkqLwogCiAgIGlmICgocnZhbHVlID09IE5VTEwpICYmIAogICAgICAgKGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUKSkKQEAgLTI2MSw5ICszNTAsMTcgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgaWYgKHNtYWxsX3N0cnVjdCkKLSAgICBtZW1jcHkgKHJ2YWx1ZSwgJnRlbXAsIGNpZi0+cnR5cGUtPnNpemUpOworICAgIHsKKyAgICAgIEZGSV9BU1NFUlQocnZhbHVlICE9IE5VTEwpOworICAgICAgbWVtY3B5IChydmFsdWUsICZ0ZW1wLCBjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICB9CisgICAgCiAgIGVsc2UgaWYgKHZmcF9zdHJ1Y3QpCi0gICAgbWVtY3B5IChydmFsdWUsIGVjaWYucnZhbHVlLCBjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICB7CisgICAgICBGRklfQVNTRVJUKHJ2YWx1ZSAhPSBOVUxMKTsKKyAgICAgIG1lbWNweSAocnZhbHVlLCBlY2lmLnJ2YWx1ZSwgY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgfQorICAgIAogfQogCiAvKiogcHJpdmF0ZSBtZW1iZXJzICoqLwpAQCAtMjcxLDE4ICszNjgsMTggQEAKIHN0YXRpYyB2b2lkIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTViAoY2hhciAqc3RhY2ssIHZvaWQgKipyZXQsCiAJCQkJCSB2b2lkKiogYXJncywgZmZpX2NpZiogY2lmLCBmbG9hdCAqdmZwX3N0YWNrKTsKIAorc3RhdGljIHZvaWQgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19WRlAgKGNoYXIgKnN0YWNrLCB2b2lkICoqcmV0LAorCQkJCQkgdm9pZCoqIGFyZ3MsIGZmaV9jaWYqIGNpZiwgZmxvYXQgKnZmcF9zdGFjayk7CisKIHZvaWQgZmZpX2Nsb3N1cmVfU1lTViAoZmZpX2Nsb3N1cmUgKik7CiAKIHZvaWQgZmZpX2Nsb3N1cmVfVkZQIChmZmlfY2xvc3VyZSAqKTsKIAogLyogVGhpcyBmdW5jdGlvbiBpcyBqdW1wZWQgdG8gYnkgdGhlIHRyYW1wb2xpbmUgKi8KIAotdW5zaWduZWQgaW50Ci1mZmlfY2xvc3VyZV9TWVNWX2lubmVyKAotICAgICBmZmlfY2xvc3VyZSAqY2xvc3VyZSwKLSAgICAgdm9pZCAqKnJlc3BwLAotICAgICB2b2lkICphcmdzLAotICAgICB2b2lkICp2ZnBfYXJncykKK3Vuc2lnbmVkIGludCBGRklfSElEREVOCitmZmlfY2xvc3VyZV9pbm5lciAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIAorCQkgICB2b2lkICoqcmVzcHAsIHZvaWQgKmFyZ3MsIHZvaWQgKnZmcF9hcmdzKQogewogICAvLyBvdXIgdmFyaW91cyB0aGluZ3MuLi4KICAgZmZpX2NpZiAgICAgICAqY2lmOwpAQCAtMjk2LDggKzM5MywxMCBAQAogICAgKiB2YWx1ZSBvbiB0aGUgc3RhY2s7IGFuZCBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucwogICAgKiBhIHN0cnVjdHVyZSwgaXQgd2lsbCByZS1zZXQgUkVTUCB0byBwb2ludCB0byB0aGUKICAgICogc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgKi8KLQotICBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoYXJncywgcmVzcHAsIGFyZ19hcmVhLCBjaWYsIHZmcF9hcmdzKTsKKyAgaWYgKGNpZi0+YWJpID09IEZGSV9WRlApCisgICAgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19WRlAoYXJncywgcmVzcHAsIGFyZ19hcmVhLCBjaWYsIHZmcF9hcmdzKTsKKyAgZWxzZQorICAgIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVihhcmdzLCByZXNwcCwgYXJnX2FyZWEsIGNpZiwgdmZwX2FyZ3MpOwogCiAgIChjbG9zdXJlLT5mdW4pIChjaWYsICpyZXNwcCwgYXJnX2FyZWEsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CiAKQEAgLTMxMiw3ICs0MTEsNyBAQAogCQkJICAgIGZsb2F0ICp2ZnBfc3RhY2spCiAvKkA9ZXhwb3J0aGVhZGVyQCovCiB7Ci0gIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpLCB2aSA9IDA7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpOwogICByZWdpc3RlciB2b2lkICoqcF9hcmd2OwogICByZWdpc3RlciBjaGFyICphcmdwOwogICByZWdpc3RlciBmZmlfdHlwZSAqKnBfYXJnOwpAQCAtMzI5LDI3ICs0MjgsOCBAQAogICBmb3IgKGkgPSBjaWYtPm5hcmdzLCBwX2FyZyA9IGNpZi0+YXJnX3R5cGVzOyAoaSAhPSAwKTsgaS0tLCBwX2FyZysrKQogICAgIHsKICAgICAgIHNpemVfdCB6OwotICAgICAgc2l6ZV90IGFsaWdubWVudDsKLSAgCi0gICAgICBpZiAoY2lmLT5hYmkgPT0gRkZJX1ZGUAotCSAgJiYgdmkgPCBjaWYtPnZmcF9uYXJncyAmJiB2ZnBfdHlwZV9wICgqcF9hcmcpKQotCXsKLQkgICpwX2FyZ3YrKyA9ICh2b2lkKikodmZwX3N0YWNrICsgY2lmLT52ZnBfYXJnc1t2aSsrXSk7Ci0JICBjb250aW51ZTsKLQl9CiAKLSAgICAgIGFsaWdubWVudCA9ICgqcF9hcmcpLT5hbGlnbm1lbnQ7Ci0gICAgICBpZiAoYWxpZ25tZW50IDwgNCkKLQlhbGlnbm1lbnQgPSA0OwotI2lmZGVmIF9XSU4zMl9XQ0UKLSAgICAgIGVsc2UKLQlpZiAoYWxpZ25tZW50ID4gNCkKLQkgIGFsaWdubWVudCA9IDQ7Ci0jZW5kaWYKLSAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgaWYgKChhbGlnbm1lbnQgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkgewotCWFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCBhbGlnbm1lbnQpOwotICAgICAgfQorICAgICAgYXJncCA9IGZmaV9hbGlnbihwX2FyZywgYXJncCk7CiAKICAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKIApAQCAtMzY0LDYgKzQ0NCw5NSBAQAogICByZXR1cm47CiB9CiAKKy8qQC1leHBvcnRoZWFkZXJAKi8KK3N0YXRpYyB2b2lkIAorZmZpX3ByZXBfaW5jb21pbmdfYXJnc19WRlAoY2hhciAqc3RhY2ssIHZvaWQgKipydmFsdWUsCisJCQkgICAgdm9pZCAqKmF2YWx1ZSwgZmZpX2NpZiAqY2lmLAorCQkJICAgIC8qIFVzZWQgb25seSB1bmRlciBWRlAgaGFyZC1mbG9hdCBBQkkuICovCisJCQkgICAgZmxvYXQgKnZmcF9zdGFjaykKKy8qQD1leHBvcnRoZWFkZXJAKi8KK3sKKyAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGksIHZpID0gMDsKKyAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKKyAgcmVnaXN0ZXIgY2hhciAqYXJncCwgKnJlZ3AsICplb19yZWdwOworICByZWdpc3RlciBmZmlfdHlwZSAqKnBfYXJnOworICBjaGFyIGRvbmVfd2l0aF9yZWdzID0gMDsKKyAgY2hhciBzdGFja191c2VkID0gMDsKKyAgY2hhciBpc192ZnBfdHlwZTsKKworICBGRklfQVNTRVJUKGNpZi0+YWJpID09IEZGSV9WRlApOworICByZWdwID0gc3RhY2s7CisgIGVvX3JlZ3AgPSBhcmdwID0gcmVncCArIDE2OworCisgIGlmICggY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QgKSB7CisgICAgKnJ2YWx1ZSA9ICoodm9pZCAqKikgcmVncDsKKyAgICByZWdwICs9IDQ7CisgIH0KKworICBwX2FyZ3YgPSBhdmFsdWU7CisKKyAgZm9yIChpID0gY2lmLT5uYXJncywgcF9hcmcgPSBjaWYtPmFyZ190eXBlczsgKGkgIT0gMCk7IGktLSwgcF9hcmcrKykKKyAgICB7CisgICAgc2l6ZV90IHo7CisgICAgaXNfdmZwX3R5cGUgPSB2ZnBfdHlwZV9wICgqcF9hcmcpOyAKKworICAgIGlmKHZpIDwgY2lmLT52ZnBfbmFyZ3MgJiYgaXNfdmZwX3R5cGUpCisgICAgICB7CisgICAgICAgICpwX2FyZ3YrKyA9ICh2b2lkKikodmZwX3N0YWNrICsgY2lmLT52ZnBfYXJnc1t2aSsrXSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIGVsc2UgaWYgKCFkb25lX3dpdGhfcmVncyAmJiAhaXNfdmZwX3R5cGUpCisgICAgICB7CisgICAgICAgIGNoYXIqIHRyZWdwID0gZmZpX2FsaWduKHBfYXJnLCByZWdwKTsKKworICAgICAgICB6ID0gKCpwX2FyZyktPnNpemU7IAorICAgICAgICB6ID0gKHogPCA0KT8gNCA6IHo7IC8vIHBhZAorICAgICAgICAKKyAgICAgICAgLyogaWYgdGhlIGFyZ3VtZW50cyBlaXRoZXIgZml0cyBpbnRvIHRoZSByZWdpc3RlcnMgb3IgdXNlcyByZWdpc3RlcnMKKyAgICAgICAgICogYW5kIHN0YWNrLCB3aGlsZSB3ZSBoYXZlbid0IHJlYWQgb3RoZXIgdGhpbmdzIGZyb20gdGhlIHN0YWNrICovCisgICAgICAgIGlmKHRyZWdwICsgeiA8PSBlb19yZWdwIHx8ICFzdGFja191c2VkKSAKKyAgICAgICAgICB7CisgICAgICAgICAgLyogYmVjYXVzZSB3ZSdyZSBsaXR0bGUgZW5kaWFuLCB0aGlzIGlzIHdoYXQgaXQgdHVybnMgaW50by4gKi8KKyAgICAgICAgICAqcF9hcmd2ID0gKHZvaWQqKSB0cmVncDsKKworICAgICAgICAgIHBfYXJndisrOworICAgICAgICAgIHJlZ3AgPSB0cmVncCArIHo7CisgICAgICAgICAgLy8gaWYgd2UgcmVhZCBwYXN0IHRoZSBsYXN0IGNvcmUgcmVnaXN0ZXIsIG1ha2Ugc3VyZSB3ZSBoYXZlIG5vdCByZWFkCisgICAgICAgICAgLy8gZnJvbSB0aGUgc3RhY2sgYmVmb3JlIGFuZCBjb250aW51ZSByZWFkaW5nIGFmdGVyIHJlZ3AKKyAgICAgICAgICBpZihyZWdwID4gZW9fcmVncCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHN0YWNrX3VzZWQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhYm9ydCgpOyAvLyB3ZSBzaG91bGQgbmV2ZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGlmIHRoZSBzdGFjayBpcyBhbHJlYWR5IGluIHVzZQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdwID0gcmVncDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZihyZWdwID49IGVvX3JlZ3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBkb25lX3dpdGhfcmVncyA9IDE7CisgICAgICAgICAgICBzdGFja191c2VkID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgc3RhY2tfdXNlZCA9IDE7CisKKyAgICBhcmdwID0gZmZpX2FsaWduKHBfYXJnLCBhcmdwKTsKKworICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKKworICAgIC8qIGJlY2F1c2Ugd2UncmUgbGl0dGxlIGVuZGlhbiwgdGhpcyBpcyB3aGF0IGl0IHR1cm5zIGludG8uICAgKi8KKworICAgICpwX2FyZ3YgPSAodm9pZCopIGFyZ3A7CisKKyAgICBwX2FyZ3YrKzsKKyAgICBhcmdwICs9IHo7CisgICAgfQorICAKKyAgcmV0dXJuOworfQorCiAvKiBIb3cgdG8gbWFrZSBhIHRyYW1wb2xpbmUuICAqLwogCiBleHRlcm4gdW5zaWduZWQgaW50IGZmaV9hcm1fdHJhbXBvbGluZVszXTsKQEAgLTM4MSw3ICs1NTAsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgZmZpX3RyYW1wb2xpbmVfdGFibGVfZW50cnkgZmZpX3RyYW1wb2xpbmVfdGFibGVfZW50cnk7CiAKIHN0cnVjdCBmZmlfdHJhbXBvbGluZV90YWJsZSB7Ci0gIC8qIGNvbnRpZ2lvdXMgd3JpdGFibGUgYW5kIGV4ZWN1dGFibGUgcGFnZXMgKi8KKyAgLyogY29udGlndW91cyB3cml0YWJsZSBhbmQgZXhlY3V0YWJsZSBwYWdlcyAqLwogICB2bV9hZGRyZXNzX3QgY29uZmlnX3BhZ2U7CiAgIHZtX2FkZHJlc3NfdCB0cmFtcG9saW5lX3BhZ2U7CiAKQEAgLTQyMSw3ICs1OTAsNyBAQAogewogICBmZmlfdHJhbXBvbGluZV90YWJsZSAqdGFibGUgPSBOVUxMOwogCi0gIC8qIExvb3AgdW50aWwgd2UgY2FuIGFsbG9jYXRlIHR3byBjb250aWdpb3VzIHBhZ2VzICovCisgIC8qIExvb3AgdW50aWwgd2UgY2FuIGFsbG9jYXRlIHR3byBjb250aWd1b3VzIHBhZ2VzICovCiAgIHdoaWxlICh0YWJsZSA9PSBOVUxMKSB7CiAgICAgdm1fYWRkcmVzc190IGNvbmZpZ19wYWdlID0gMHgwOwogICAgIGtlcm5fcmV0dXJuX3Qga3Q7CkBAIC02MTcsNyArNzg2LDcgQEAKICNlbmRpZgogICBlbHNlCiAgICAgcmV0dXJuIEZGSV9CQURfQUJJOwotICAgIAorCiAjaWYgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRQogICB2b2lkICoqY29uZmlnID0gRkZJX1RSQU1QT0xJTkVfQ09ERUxPQ19DT05GSUcoY29kZWxvYyk7CiAgIGNvbmZpZ1swXSA9IGNsb3N1cmU7CkBAIC03MDAsOSArODY5LDkgQEAKICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBsYWNlX3ZmcF9hcmcgKGZmaV9jaWYgKmNpZiwgZmZpX3R5cGUgKnQpCitzdGF0aWMgaW50IHBsYWNlX3ZmcF9hcmcgKGZmaV9jaWYgKmNpZiwgZmZpX3R5cGUgKnQpCiB7Ci0gIGludCByZWcgPSBjaWYtPnZmcF9yZWdfZnJlZTsKKyAgc2hvcnQgcmVnID0gY2lmLT52ZnBfcmVnX2ZyZWU7CiAgIGludCBucmVncyA9IHQtPnNpemUgLyBzaXplb2YgKGZsb2F0KTsKICAgaW50IGFsaWduID0gKCh0LT50eXBlID09IEZGSV9UWVBFX1NUUlVDVF9WRlBfRkxPQVQKIAkJfHwgdC0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCkgPyAxIDogMik7CkBAIC03MzMsOSArOTAyLDEzIEBACiAJICAgIHJlZyArPSAxOwogCSAgY2lmLT52ZnBfcmVnX2ZyZWUgPSByZWc7CiAJfQotICAgICAgcmV0dXJuOworICAgICAgcmV0dXJuIDA7CiAgICAgbmV4dF9yZWc6IDsKICAgICB9CisgIC8vIGRvbmUsIG1hcmsgYWxsIHJlZ3MgYXMgdXNlZAorICBjaWYtPnZmcF9yZWdfZnJlZSA9IDE2OworICBjaWYtPnZmcF91c2VkID0gMHhGRkZGOworICByZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQgbGF5b3V0X3ZmcF9hcmdzIChmZmlfY2lmICpjaWYpCkBAIC03NTAsNyArOTIzLDkgQEAKICAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKykKICAgICB7CiAgICAgICBmZmlfdHlwZSAqdCA9IGNpZi0+YXJnX3R5cGVzW2ldOwotICAgICAgaWYgKHZmcF90eXBlX3AgKHQpKQotCXBsYWNlX3ZmcF9hcmcgKGNpZiwgdCk7CisgICAgICBpZiAodmZwX3R5cGVfcCAodCkgJiYgcGxhY2VfdmZwX2FyZyAoY2lmLCB0KSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vZ2VudHJhbXAuc2ggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vZ2VudHJhbXAuc2gKaW5kZXggNzRmMGI4Ni4uMDVjNDNhMyAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL2dlbnRyYW1wLnNoCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9nZW50cmFtcC5zaApAQCAtODQsNyArODQsNyBAQAogfQogCiAKLSMgV0FSTklORyAtIERvbid0IG1vZGlmeSB0aGUgdHJhbXBvbGluZSBjb2RlIHNpemUgd2l0aG91dCBhbHNvIHVwZGF0aW5nIHRoZSByZWxldmVudCBsaWJmZmkgY29kZQorIyBXQVJOSU5HIC0gRG9uJ3QgbW9kaWZ5IHRoZSB0cmFtcG9saW5lIGNvZGUgc2l6ZSB3aXRob3V0IGFsc28gdXBkYXRpbmcgdGhlIHJlbGV2YW50IGxpYmZmaSBjb2RlCiB0cmFtcG9saW5lICgpIHsKICAgICBjYXQgPDwgRU5ECiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCmluZGV4IGZiMzhjZDYuLjU0MWJiZTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUwpAQCAtMTA5LDQyICsxMDksMjcgQEAKICNkZWZpbmUgVU5XSU5EIEAKICNlbmRpZgkKIAotCQorLnN5bnRheCB1bmlmaWVkCisKICNpZiBkZWZpbmVkKF9fdGh1bWJfXykgJiYgIWRlZmluZWQoX19USFVNQl9JTlRFUldPUktfXykKLS5tYWNybwlBUk1fRlVOQ19TVEFSVCBuYW1lCi0JLnRleHQKLQkuYWxpZ24gMAotCS50aHVtYgotCS50aHVtYl9mdW5jCi0jaWZkZWYgX19BUFBMRV9fCi0JRU5UUlkoJDApCisjZGVmaW5lIEFSTV9GVU5DX1NUQVJUKG5hbWUpIFwKKwkudGV4dDsgXAorCS5hbGlnbiAyOyBcCisJLnRodW1iOyBcCisJLnRodW1iX2Z1bmM7IFwKKwlFTlRSWShuYW1lKTsgXAorCWJ4IHBjOyBcCisJbm9wOyBcCisJLmFybTsgXAorCVVOV0lORCAuZm5zdGFydDsgXAorX0xfXyMjbmFtZToKICNlbHNlCi0JRU5UUlkoXG5hbWUpCi0jZW5kaWYKLQlieAlwYwotCW5vcAotCS5hcm0KKyNkZWZpbmUgQVJNX0ZVTkNfU1RBUlQobmFtZSkgXAorCS50ZXh0OyBcCisJLmFsaWduIDI7IFwKKwkuYXJtOyBcCisJRU5UUlkobmFtZSk7IFwKIAlVTldJTkQgLmZuc3RhcnQKLS8qIEEgaG9vayB0byB0ZWxsIGdkYiB0aGF0IHdlJ3ZlIHN3aXRjaGVkIHRvIEFSTSBtb2RlLiAgQWxzbyB1c2VkIHRvIGNhbGwKLSAgIGRpcmVjdGx5IGZyb20gb3RoZXIgbG9jYWwgYXJtIHJvdXRpbmVzLiAgKi8KLSNpZmRlZiBfX0FQUExFX18KLV9MX18kMDoKLSNlbHNlCi1fTF9fXG5hbWU6Ci0jZW5kaWYKLS5lbmRtCi0jZWxzZQotLm1hY3JvCUFSTV9GVU5DX1NUQVJUIG5hbWUKLQkudGV4dAotCS5hbGlnbiAwCi0JLmFybQotI2lmZGVmIF9fQVBQTEVfXwotCUVOVFJZKCQwKQotI2Vsc2UKLQlFTlRSWShcbmFtZSkKLSNlbmRpZgotCVVOV0lORCAuZm5zdGFydAotLmVuZG0KICNlbmRpZgogCiAubWFjcm8JUkVUTERNCXJlZ3M9LCBjb25kPSwgZGlybj1pYQpAQCAtMTcxLDcgKzE1Niw3IEBACiAJQCBzcCswOiBlY2lmLnJ2YWx1ZQogCiAJQCBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KLUFSTV9GVU5DX1NUQVJUIGZmaV9jYWxsX1NZU1YKK0FSTV9GVU5DX1NUQVJUKGZmaV9jYWxsX1NZU1YpCiAJQCBTYXZlIHJlZ2lzdGVycwogICAgICAgICBzdG1mZAlzcCEsIHtyMC1yMywgZnAsIGxyfQogCVVOV0lORCAuc2F2ZQl7cjAtcjMsIGZwLCBscn0KQEAgLTE4Nyw3ICsxNzIsNyBAQAogCUAgICAgIHIxIGFscmVhZHkgc2V0CiAKIAlAIENhbGwgZmZpX3ByZXBfYXJncyhzdGFjaywgJmVjaWYpCi0JYmwJQ05BTUUoZmZpX3ByZXBfYXJncykKKwlibAlDTkFNRShmZmlfcHJlcF9hcmdzX1NZU1YpCiAKIAlAIG1vdmUgZmlyc3QgNCBwYXJhbWV0ZXJzIGluIHJlZ2lzdGVycwogCWxkbWlhCXNwLCB7cjAtcjN9CkBAIC0yMjgsNyArMjEzLDcgQEAKICNpZiBkZWZpbmVkKF9fU09GVEZQX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQogCWNtcG5lCXIzLCAjRkZJX1RZUEVfRE9VQkxFCiAjZW5kaWYKLQlzdG1lcWlhCXIyLCB7cjAsIHIxfQorCXN0bWlhZXEJcjIsIHtyMCwgcjF9CiAKICNpZiAhZGVmaW5lZChfX1NPRlRGUF9fKSAmJiAhZGVmaW5lZChfX0FSTV9FQUJJX18pCiAJYmVxCUxTWU0oTGVwaWxvZ3VlKQpAQCAtMjYwLDEzICsyNDUsMTMgQEAKIAogLyoKIAl1bnNpZ25lZCBpbnQgRkZJX0hJRERFTgotCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIgKGNsb3N1cmUsIHJlc3BwLCBhcmdzKQorCWZmaV9jbG9zdXJlX2lubmVyIChjbG9zdXJlLCByZXNwcCwgYXJncykKIAkgICAgIGZmaV9jbG9zdXJlICpjbG9zdXJlOwogCSAgICAgdm9pZCAqKnJlc3BwOwogICAJICAgICB2b2lkICphcmdzOwogKi8KIAotQVJNX0ZVTkNfU1RBUlQgZmZpX2Nsb3N1cmVfU1lTVgorQVJNX0ZVTkNfU1RBUlQoZmZpX2Nsb3N1cmVfU1lTVikKIAlVTldJTkQgLnBhZCAjMTYKIAlhZGQJaXAsIHNwLCAjMTYKIAlzdG1mZAlzcCEsIHtpcCwgbHJ9CkBAIC0yNzYsNyArMjYxLDcgQEAKIAlzdWIJc3AsIHNwLCAjMTYKIAlzdHIJc3AsIFtzcCwgIzhdCiAJYWRkCXIxLCBzcCwgIzgKLQlibAlDTkFNRShmZmlfY2xvc3VyZV9TWVNWX2lubmVyKQorCWJsCUNOQU1FKGZmaV9jbG9zdXJlX2lubmVyKQogCWNtcAlyMCwgI0ZGSV9UWVBFX0lOVAogCWJlcQkuTHJldGludAogCkBAIC0zNDUsNyArMzMwLDcgQEAKIAlAIHIzOiAgIGZpZy0+ZmxhZ3MKIAlAIHNwKzA6IGVjaWYucnZhbHVlCiAKLUFSTV9GVU5DX1NUQVJUIGZmaV9jYWxsX1ZGUAorQVJNX0ZVTkNfU1RBUlQoZmZpX2NhbGxfVkZQKQogCUAgU2F2ZSByZWdpc3RlcnMKICAgICAgICAgc3RtZmQJc3AhLCB7cjAtcjMsIGZwLCBscn0KIAlVTldJTkQgLnNhdmUJe3IwLXIzLCBmcCwgbHJ9CkBAIC0zNjQsMTAgKzM0OSwxMSBAQAogCXN1YglyMiwgZnAsICM2NCAgIEAgVkZQIHNjcmF0Y2ggc3BhY2UKIAogCUAgQ2FsbCBmZmlfcHJlcF9hcmdzKHN0YWNrLCAmZWNpZiwgdmZwX3NwYWNlKQotCWJsCUNOQU1FKGZmaV9wcmVwX2FyZ3MpCisJYmwJQ05BTUUoZmZpX3ByZXBfYXJnc19WRlApCiAKIAlAIExvYWQgVkZQIHJlZ2lzdGVyIGFyZ3MgaWYgbmVlZGVkCiAJY21wCXIwLCAjMAorCW1vdglpcCwgZnAKIAliZXEJTFNZTShMYmFzZV9hcmdzKQogCiAJQCBMb2FkIG9ubHkgZDAgaWYgcG9zc2libGUKQEAgLTQzMyw3ICs0MTksNyBAQAogICAgICAgICAuc2l6ZSAgICBDTkFNRShmZmlfY2FsbF9WRlApLC5mZmlfY2FsbF9WRlBfZW5kLUNOQU1FKGZmaV9jYWxsX1ZGUCkKIAogCi1BUk1fRlVOQ19TVEFSVCBmZmlfY2xvc3VyZV9WRlAKK0FSTV9GVU5DX1NUQVJUKGZmaV9jbG9zdXJlX1ZGUCkKIAlmc3RtZmRkCXNwISwge2QwLWQ3fQogCUAgcjAtcjMsIHRoZW4gZDAtZDcKIAlVTldJTkQgLnBhZCAjODAKQEAgLTQ0Niw3ICs0MzIsNyBAQAogCXN1YglzcCwgc3AsICM3MgogCXN0cglzcCwgW3NwLCAjNjRdCiAJYWRkCXIxLCBzcCwgIzY0Ci0JYmwJQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcikKKwlibAlDTkFNRShmZmlfY2xvc3VyZV9pbm5lcikKIAogCWNtcAlyMCwgI0ZGSV9UWVBFX0lOVAogCWJlcQkuTHJldGludF92ZnAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2JmaW4vZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9iZmluL2ZmaS5jCmluZGV4IDBiZWNjYzEuLjIyYTJhY2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2JmaW4vZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYmZpbi9mZmkuYwpAQCAtMSw1ICsxLDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAxMiAgQWxleGFuZHJlIEsuIEkuIGRlIE1lbmRvbmNhIDxhbGV4YW5kcmUua2V1bmVja2VAZ21haWwuY29tPgorICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMTIgIEFsZXhhbmRyZSBLLiBJLiBkZSBNZW5kb25jYSA8YWxleGFuZHJlLmtldW5lY2tlQGdtYWlsLmNvbT4sCisJCQkJCQkJICAgUGF1bG8gUGl6YXJybyA8cGF1bG8ucGl6YXJyb0BnbWFpbC5jb20+CiAKICAgIEJsYWNrZmluIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2JmaW4vc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYmZpbi9zeXN2LlMKaW5kZXggYWU3YTE1Mi4uZjQyNzhiZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYmZpbi9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYmZpbi9zeXN2LlMKQEAgLTEsNSArMSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgc3lzdi5TIC0gQ29weXJpZ2h0IChjKSAyMDEyICBBbGV4YW5kcmUgSy4gSS4gZGUgTWVuZG9uY2EgPGFsZXhhbmRyZS5rZXVuZWNrZUBnbWFpbC5jb20+CisgICBzeXN2LlMgLSBDb3B5cmlnaHQgKGMpIDIwMTIgIEFsZXhhbmRyZSBLLiBJLiBkZSBNZW5kb25jYSA8YWxleGFuZHJlLmtldW5lY2tlQGdtYWlsLmNvbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdWxvIFBpemFycm8gPHBhdWxvLnBpemFycm9AZ21haWwuY29tPgogCiAgICBCbGFja2ZpbiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQogCkBAIC0zMiw3ICszMyw3IEBACiAuYWxpZ24gNAogCiAJLyoKLQkgVGhlcmUgaXMgYSAiZmVhdHVyZSIgaW4gdGhlIGJmaW4gdG9vbGNoYWluIHRoYXQgaXQgcHV0cyBhIF8gYmVmb3JlIGZ1bmNpb24gbmFtZXMKKwkgVGhlcmUgaXMgYSAiZmVhdHVyZSIgaW4gdGhlIGJmaW4gdG9vbGNoYWluIHRoYXQgaXQgcHV0cyBhIF8gYmVmb3JlIGZ1bmN0aW9uIG5hbWVzCiAJIHRoYXQncyB3aHkgdGhlIGZ1bmN0aW9uIGhlcmUgaXQncyBjYWxsZWQgX2ZmaV9jYWxsX1NZU1YgYW5kIG5vdCBmZmlfY2FsbF9TWVNWCiAJICovCiAJLmdsb2JhbCBfZmZpX2NhbGxfU1lTVjsKQEAgLTQwLDI1ICs0MSwyNiBAQAogCS5mdW5jIGZmaV9jYWxsX1NZU1YKIAogCS8qCi0JY2lmLT5ieXRlcyAgCT0gUjAJKGZwKzgpCi0JJmVjaWYJCQk9IFIxCShmcCsxMikKLQlmZmlfcHJlcF9hcmdzCT0gUjIJKGZwKzE2KQotCXJldF90eXBlCQk9IHN0YWNrIChmcCsyMCkKLQllY2lmLnJ2YWx1ZQkJPSBzdGFjayAoZnArMjQpCi0JZm4JCQkJPSBzdGFjawkoZnArMjgpCi0JCQkJCSAgZ290CShmcCszMikKLSAgICBUaGVyZSBpcyByb29tIGZvciBpbXByb3ZlbWVudCBoZXJlICh3ZSBjYW4gdXNlIHRlbXBvcmFyeSByZWdpc3RlcnMKLSAgICAgICAgaW5zdGVhZCBvZiBzYXZpbmcgdGhlIHZhbHVlcyBpbiB0aGUgbWVtb3J5KQotCVJFR1M6Ci0JCVA1ID0+IFN0YWNrIHBvaW50ZXIgKGZ1bmN0aW9uIGFyZ3VtZW50cykKLQkJUjUgPT4gY2lmLT5ieXRlcwotCQlSNCA9PiByZXQtPnR5cGUKKyAgICAgICAgIGNpZi0+Ynl0ZXMgICAgPSBSMCAgICAoZnArOCkKKyAgICAgICAgICZlY2lmICAgICAgICAgPSBSMSAgICAoZnArMTIpCisgICAgICAgICBmZmlfcHJlcF9hcmdzID0gUjIgICAgKGZwKzE2KQorICAgICAgICAgcmV0X3R5cGUgICAgICA9IHN0YWNrIChmcCsyMCkKKyAgICAgICAgIGVjaWYucnZhbHVlICAgPSBzdGFjayAoZnArMjQpCisgICAgICAgICBmbiAgICAgICAgICAgID0gc3RhY2sgKGZwKzI4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290IChmcCszMikKIAotCQlGUC0yMCA9IFAzCi0JCUZQLTE2ID0gU1AgKHBhcmFtZXRlcnMgYXJlYSkKLQkJRlAtMTIgPSBTUCAodGVtcCkKLQkJRlAtMDggPSBmdW5jdGlvbiByZXR1cm4gcGFydCAxIFtSMF0KLQkJRlAtMDQgPSBmdW5jdGlvbiByZXR1cm4gcGFydCAyIFtSMV0KKyAgICAgICAgVGhlcmUgaXMgcm9vbSBmb3IgaW1wcm92ZW1lbnQgaGVyZSAod2UgY2FuIHVzZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzCisgICAgICAgIGluc3RlYWQgb2Ygc2F2aW5nIHRoZSB2YWx1ZXMgaW4gdGhlIG1lbW9yeSkKKyAgICAgICAgUkVHUzoKKyAgICAgICAgUDUgPT4gU3RhY2sgcG9pbnRlciAoZnVuY3Rpb24gYXJndW1lbnRzKQorICAgICAgICBSNSA9PiBjaWYtPmJ5dGVzCisgICAgICAgIFI0ID0+IHJldC0+dHlwZQorCisgICAgICAgIEZQLTIwID0gUDMKKyAgICAgICAgRlAtMTYgPSBTUCAocGFyYW1ldGVycyBhcmVhKQorICAgICAgICBGUC0xMiA9IFNQICh0ZW1wKQorICAgICAgICBGUC0wOCA9IGZ1bmN0aW9uIHJldHVybiBwYXJ0IDEgW1IwXQorICAgICAgICBGUC0wNCA9IGZ1bmN0aW9uIHJldHVybiBwYXJ0IDIgW1IxXQogCSovCiAKIF9mZmlfY2FsbF9TWVNWOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvY2xvc3VyZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Nsb3N1cmVzLmMKaW5kZXggNjI5OGQ2Zi4uYzc4NjNmMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvY2xvc3VyZXMuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9jbG9zdXJlcy5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgogCiAjaWYgIUZGSV9NTUFQX0VYRUNfV1JJVCAmJiAhRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRQotIyBpZiBfX2dudV9saW51eF9fCisjIGlmIF9fZ251X2xpbnV4X18gJiYgIWRlZmluZWQoX19BTkRST0lEX18pCiAvKiBUaGlzIG1hY3JvIGluZGljYXRlcyBpdCBtYXkgYmUgZm9yYmlkZGVuIHRvIG1hcCBhbm9ueW1vdXMgbWVtb3J5CiAgICB3aXRoIGJvdGggd3JpdGUgYW5kIGV4ZWN1dGUgcGVybWlzc2lvbi4gIENvZGUgY29tcGlsZWQgd2hlbiB0aGlzCiAgICBvcHRpb24gaXMgZGVmaW5lZCB3aWxsIGF0dGVtcHQgdG8gbWFwIHN1Y2ggcGFnZXMgb25jZSwgYnV0IGlmIGl0CkBAIC0xODEsMTAgKzE4MSwyNiBAQAogc3RhdGljIGludAogZW11dHJhbXBfZW5hYmxlZF9jaGVjayAodm9pZCkKIHsKLSAgaWYgKGdldGVudiAoIkZGSV9ESVNBQkxFX0VNVVRSQU1QIikgPT0gTlVMTCkKLSAgICByZXR1cm4gMTsKLSAgZWxzZQorICBjaGFyICpidWYgPSBOVUxMOworICBzaXplX3QgbGVuID0gMDsKKyAgRklMRSAqZjsKKyAgaW50IHJldDsKKyAgZiA9IGZvcGVuICgiL3Byb2Mvc2VsZi9zdGF0dXMiLCAiciIpOworICBpZiAoZiA9PSBOVUxMKQogICAgIHJldHVybiAwOworICByZXQgPSAwOworCisgIHdoaWxlIChnZXRsaW5lICgmYnVmLCAmbGVuLCBmKSAhPSAtMSkKKyAgICBpZiAoIXN0cm5jbXAgKGJ1ZiwgIlBhWDoiLCA0KSkKKyAgICAgIHsKKyAgICAgICAgY2hhciBlbXV0cmFtcDsKKyAgICAgICAgaWYgKHNzY2FuZiAoYnVmLCAiJSpzICUqYyVjIiwgJmVtdXRyYW1wKSA9PSAxKQorICAgICAgICAgIHJldCA9IChlbXV0cmFtcCA9PSAnRScpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgZnJlZSAoYnVmKTsKKyAgZmNsb3NlIChmKTsKKyAgcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBpc19lbXV0cmFtcF9lbmFibGVkKCkgKGVtdXRyYW1wX2VuYWJsZWQgPj0gMCA/IGVtdXRyYW1wX2VuYWJsZWQgXApAQCAtMjY0LDcgKzI4MCw3IEBACiBvcGVuX3RlbXBfZXhlY19maWxlX2RpciAoY29uc3QgY2hhciAqZGlyKQogewogICBzdGF0aWMgY29uc3QgY2hhciBzdWZmaXhbXSA9ICIvZmZpWFhYWFhYIjsKLSAgaW50IGxlbmRpciA9IHN0cmxlbiAoZGlyKTsKKyAgc2l6ZV90IGxlbmRpciA9IHN0cmxlbiAoZGlyKTsKICAgY2hhciAqdGVtcG5hbWUgPSBfX2J1aWx0aW5fYWxsb2NhIChsZW5kaXIgKyBzaXplb2YgKHN1ZmZpeCkpOwogCiAgIGlmICghdGVtcG5hbWUpCkBAIC0zODIsNyArMzk4LDcgQEAKIH0KIAogLyogUmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIG9mIGEgdGVtcG9yYXJ5IHplcm8tc2l6ZWQgZmlsZSBpbiBhCi0gICB3cml0YWJsZSBhbmQgZXhleHV0YWJsZSBmaWxlc3lzdGVtLiAgKi8KKyAgIHdyaXRhYmxlIGFuZCBleGVjdXRhYmxlIGZpbGVzeXN0ZW0uICAqLwogc3RhdGljIGludAogb3Blbl90ZW1wX2V4ZWNfZmlsZSAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jCmluZGV4IDI3NzM5NTMuLjZlNDc0YjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYwpAQCAtMTI2MCw3ICsxMjYwLDcgQEAKICNkZWZpbmUgU0laRV9UX0JJVFNJWkUgICAgICAoc2l6ZW9mKHNpemVfdCkgPDwgMykKIAogLyogU29tZSBjb25zdGFudHMgY29lcmNlZCB0byBzaXplX3QgKi8KLS8qIEFubm95aW5nIGJ1dCBuZWNlc3NhcnkgdG8gYXZvaWQgZXJyb3JzIG9uIHNvbWUgcGxhZnRvcm1zICovCisvKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21lIHBsYXRmb3JtcyAqLwogI2RlZmluZSBTSVpFX1RfWkVSTyAgICAgICAgICgoc2l6ZV90KTApCiAjZGVmaW5lIFNJWkVfVF9PTkUgICAgICAgICAgKChzaXplX3QpMSkKICNkZWZpbmUgU0laRV9UX1RXTyAgICAgICAgICAoKHNpemVfdCkyKQpAQCAtMTQxNCw3ICsxNDE0LDcgQEAKICNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgTUZBSUwKICNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCiAKLS8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpbmd1b3VzIG1vcmVjb3JlIGRpc2FibGVkIG9yIGZhaWxlZCAqLworLyogbXN0YXRlIGJpdCBzZXQgaWYgY29udGlndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KICNkZWZpbmUgVVNFX05PTkNPTlRJR1VPVVNfQklUICg0VSkKIAogLyogc2VnbWVudCBiaXQgc2V0IGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlICovCkBAIC0xNjY2LDcgKzE2NjYsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICBtY2h1bms7CiB0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIG1jaHVua3B0cjsKIHR5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogc2JpbnB0cjsgIC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgY2h1bmtzICovCi10eXBlZGVmIHVuc2lnbmVkIGludCBiaW5kZXhfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgc2l6ZV90IGJpbmRleF90OyAgICAgICAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgYmlubWFwX3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGFnX3Q7ICAgICAgICAgICAvKiBUaGUgdHlwZSBvZiB2YXJpb3VzIGJpdCBmbGFnIHNldHMgKi8KIApAQCAtMzA5NSw4ICszMDk1LDggQEAKICAgICAgYW5kIGNob29zZSBpdHMgYmsgbm9kZSBhcyBpdHMgcmVwbGFjZW1lbnQuCiAgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QKICAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYgbm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3IKLSAgICAgcmlnaHQpLCB0byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRlbnRzCi0gICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGVudAorICAgICByaWdodCksIHRvIG1ha2Ugc3VyZSB0aGF0IGxlZnRzIGFuZCByaWdodHMgb2YgZGVzY2VuZGFudHMKKyAgICAgY29ycmVzcG9uZCBwcm9wZXJseSB0byBiaXQgbWFza3MuICBXZSB1c2UgdGhlIHJpZ2h0bW9zdCBkZXNjZW5kYW50CiAgICAgIG9mIHguICBXZSBjb3VsZCB1c2UgYW55IG90aGVyIGxlYWYsIGJ1dCB0aGlzIGlzIGVhc3kgdG8gbG9jYXRlIGFuZAogICAgICB0ZW5kcyB0byBjb3VudGVyYWN0IHJlbW92YWwgb2YgbGVmdG1vc3RzIGVsc2V3aGVyZSwgYW5kIHNvIGtlZXBzCiAgICAgIHBhdGhzIHNob3J0ZXIgdGhhbiBtaW5pbWFsbHkgZ3VhcmFudGVlZC4gIFRoaXMgZG9lc24ndCBsb29wIG11Y2gKQEAgLTMzOTMsNyArMzM5Myw3IEBACiAgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLwogICBtLT5zZWcuYmFzZSA9IHRiYXNlOwogICBtLT5zZWcuc2l6ZSA9IHRzaXplOwotICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwcGVkKTsKKyAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcHBlZCk7CiAgIG0tPnNlZy5uZXh0ID0gc3M7CiAKICAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8KQEAgLTM1NTMsNyArMzU1Myw3IEBACiAgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCiAgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKICAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7Ci0gICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwX2ZsYWcpOworICAgICAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcF9mbGFnKTsKICAgICAgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKICAgICAgIGluaXRfYmlucyhtKTsKICAgICAgIGlmIChpc19nbG9iYWwobSkpIApAQCAtNDUwMiw3ICs0NTAyLDcgQEAKICAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CiAgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgewogICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKLSAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKKyAgICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKICAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CiAgICAgfQogICB9CkBAIC00NTE3LDcgKzQ1MTcsNyBAQAogICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKICAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciopYmFzZSwgY2FwYWNpdHkpOwotICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOworICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOwogICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CiAgIH0KICAgcmV0dXJuIChtc3BhY2UpbTsKQEAgLTUwOTYsMTAgKzUwOTYsMTAgQEAKICAgICAgICAgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KICAgICAgICogVXNlIGxhc3RfcmVtYWluZGVyIGluIG1vcmUgY2FzZXMuCiAgICAgICAqIFBhY2sgYmlucyB1c2luZyBpZGVhIGZyb20gIGNvbGluQG55eDEwLmNzLmR1LmVkdQotICAgICAgKiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNoaG9sZAorICAgICAgKiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNob2xkCiAgICAgICAqIEVsaW1pbmF0ZSBibG9jay1sb2NhbCBkZWNscyB0byBzaW1wbGlmeSB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuCiAgICAgICAqIFN1cHBvcnQgYW5vdGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3AKLSAgICAgICogRml4IGVycm9yIG9jY3VyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KKyAgICAgICogRml4IGVycm9yIG9jY3VycmluZyB3aGVuIGluaXRpYWwgc2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuCiAgICAgICAqIFJlbHkgb24gcGFnZSBzaXplIGZvciB1bml0cyBpbnN0ZWFkIG9mIFNCUktfVU5JVCB0bwogICAgICAgICBhdm9pZCBzdXJwcmlzZXMgYWJvdXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuCiAgICAgICAqIEFkZCBtYWxsaW5mbywgbWFsbG9wdC4gVGhhbmtzIHRvIFJheW1vbmQgTmlqc3NlbgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvaWE2NC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2lhNjQvZmZpLmMKaW5kZXggOTUzM2VmNi4uYjc3YTgzNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvaWE2NC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9pYTY0L2ZmaS5jCkBAIC00MDEsNyArNDAxLDcgQEAKICAgIHRoZSBjbG9zdXJlIChpbiB0aGUgInRyYW1wb2xpbmUiIGFyZWEpLCBidXQgd2UgcmVwbGFjZSB0aGUgZ3AKICAgIHBvaW50ZXIgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGNsb3N1cmUgaXRzZWxmLiAgV2UgYWxzbyBhZGQgdGhlIHJlYWwKICAgIGdwIHBvaW50ZXIgdG8gdGhlIGNsb3N1cmUuICBUaGlzIGFsbG93cyB0aGUgZnVuY3Rpb24gZW50cnkgY29kZSB0bwotICAgYm90aCByZXRyaWV2ZSB0aGUgdXNlciBkYXRhLCBhbmQgdG8gcmVzdGlyZSB0aGUgY29ycmVjdCBncCBwb2ludGVyLiAgKi8KKyAgIGJvdGggcmV0cmlldmUgdGhlIHVzZXIgZGF0YSwgYW5kIHRvIHJlc3RvcmUgdGhlIGNvcnJlY3QgZ3AgcG9pbnRlci4gICovCiAKIGV4dGVybiB2b2lkIGZmaV9jbG9zdXJlX3VuaXggKCk7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL2ZmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZGY0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL2ZmaS5jCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIE1pb2RyYWcgVmFsbGF0LiAgPG1pb2RAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvKgorICogbTg4ayBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorICoKKyAqIFRoaXMgZmlsZSBhdHRlbXB0cyB0byBwcm92aWRlIGFsbCB0aGUgRkZJIGVudHJ5IHBvaW50cyB3aGljaCBjYW4gcmVsaWFibHkKKyAqIGJlIGltcGxlbWVudGVkIGluIEMuCisgKgorICogT25seSBPcGVuQlNEL204OGsgaXMgY3VycmVudGx5IHN1cHBvcnRlZDsgb3RoZXIgcGxhdGZvcm1zIChzdWNoIGFzCisgKiBNb3Rvcm9sYSdzIFN5c1YvbTg4aykgY291bGQgYmUgc3VwcG9ydGVkIHdpdGggdGhlIGZvbGxvd2luZyB0d2Vha3M6CisgKgorICogLSBub24tT3BlbkJTRCBzeXN0ZW1zIHVzZSBhbiBgb3V0Z29pbmcgcGFyYW1ldGVyIGFyZWEnIGFzIHBhcnQgb2YgdGhlCisgKiAgIDg4QkNTIGNhbGxpbmcgY29udmVudGlvbiwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCB1bmRlciBPcGVuQlNEIGZyb20KKyAqICAgcmVsZWFzZSAzLjYgb253YXJkcy4gIFN1cHBvcnRpbmcgaXQgc2hvdWxkIGJlIGFzIGVhc3kgYXMgdGFraW5nIGl0CisgKiAgIGludG8gYWNjb3VudCB3aGVuIGFkanVzdGluZyB0aGUgc3RhY2ssIGluIHRoZSBhc3NlbWJseSBjb2RlLgorICoKKyAqIC0gdGhlIGxvZ2ljIGRlY2lkaW5nIHdoZXRoZXIgYSBmdW5jdGlvbiBhcmd1bWVudCBnZXRzIHBhc3NlZCB0aHJvdWdoCisgKiAgIHJlZ2lzdGVycywgb3Igb24gdGhlIHN0YWNrLCBoYXMgY2hhbmdlZCBzZXZlcmFsIHRpbWVzIGluIE9wZW5CU0QgaW4KKyAqICAgZWRnZSBjYXNlcyAoZXNwZWNpYWxseSBmb3Igc3RydWN0cyBsYXJnZXIgdGhhbiAzMiBieXRlcyBiZWluZyBwYXNzZWQKKyAqICAgYnkgdmFsdWUpLiBUaGUgY29kZSBiZWxvdyBhdHRlbXBzIHRvIG1hdGNoIHRoZSBsb2dpYyB1c2VkIGJ5IHRoZQorICogICBzeXN0ZW0gY29tcGlsZXIgb2YgT3BlbkJTRCA1LjMsIGkuZS4gZ2NjIDMuMy42IHdpdGggbWFueSBtODhrIGJhY2tlbmQKKyAqICAgZml4ZXMuCisgKi8KKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit2b2lkIGZmaV9jYWxsX09CU0QgKHVuc2lnbmVkIGludCwgZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkIGludCwgdm9pZCAqLAorCQkgICAgdm9pZCAoKmZuKSAoKSk7Cit2b2lkICpmZmlfcHJlcF9hcmdzICh2b2lkICosIGV4dGVuZGVkX2NpZiAqKTsKK3ZvaWQgZmZpX2Nsb3N1cmVfT0JTRCAoZmZpX2Nsb3N1cmUgKik7Cit2b2lkIGZmaV9jbG9zdXJlX3N0cnVjdF9PQlNEIChmZmlfY2xvc3VyZSAqKTsKK3Vuc2lnbmVkIGludCBmZmlfY2xvc3VyZV9PQlNEX2lubmVyIChmZmlfY2xvc3VyZSAqLCB2b2lkICosIHVuc2lnbmVkIGludCAqLAorCQkJCSAgICAgY2hhciAqKTsKK3ZvaWQgZmZpX2NhY2hlZmx1c2hfT0JTRCAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCisjZGVmaW5lIENJRl9GTEFHU19JTlQJCSgxIDw8IDApCisjZGVmaW5lIENJRl9GTEFHU19ESU5UCQkoMSA8PCAxKQorCisvKgorICogRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgQVBJCisgKi8KKworLyogZmZpX3ByZXBfYXJncyBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZSBoYXMKKyAgIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuICAqLworCit2b2lkICoKK2ZmaV9wcmVwX2FyZ3MgKHZvaWQgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpCit7CisgIHVuc2lnbmVkIGludCBpOworICB2b2lkICoqcF9hcmd2OworICBjaGFyICphcmdwLCAqc3RhY2twOworICB1bnNpZ25lZCBpbnQgKnJlZ3A7CisgIHVuc2lnbmVkIGludCByZWd1c2VkOworICBmZmlfdHlwZSAqKnBfYXJnOworICB2b2lkICpzdHJ1Y3RfdmFsdWVfcHRyOworCisgIHJlZ3AgPSAodW5zaWduZWQgaW50ICopc3RhY2s7CisgIHN0YWNrcCA9IChjaGFyICopKHJlZ3AgKyA4KTsKKyAgcmVndXNlZCA9IDA7CisKKyAgaWYgKGVjaWYtPmNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiAhZWNpZi0+Y2lmLT5mbGFncykKKyAgICBzdHJ1Y3RfdmFsdWVfcHRyID0gZWNpZi0+cnZhbHVlOworICBlbHNlCisgICAgc3RydWN0X3ZhbHVlX3B0ciA9IE5VTEw7CisKKyAgcF9hcmd2ID0gZWNpZi0+YXZhbHVlOworCisgIGZvciAoaSA9IGVjaWYtPmNpZi0+bmFyZ3MsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7IGkgIT0gMDsgaS0tLCBwX2FyZysrKQorICAgIHsKKyAgICAgIHNpemVfdCB6OworICAgICAgdW5zaWduZWQgc2hvcnQgdCwgYTsKKworICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOworICAgICAgdCA9ICgqcF9hcmcpLT50eXBlOworICAgICAgYSA9ICgqcF9hcmcpLT5hbGlnbm1lbnQ7CisKKyAgICAgIC8qCisgICAgICAgKiBGaWd1cmUgb3V0IHdoZXRoZXIgdGhlIGFyZ3VtZW50IGNhbiBiZSBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnMKKyAgICAgICAqIG9yIG9uIHRoZSBzdGFjay4KKyAgICAgICAqIFRoZSBydWxlIGlzIHRoYXQgcmVnaXN0ZXJzIGNhbiBvbmx5IHJlY2VpdmUgc2ltcGxlIHR5cGVzIG5vdCBsYXJnZXIKKyAgICAgICAqIHRoYW4gNjQgYml0cywgb3Igc3RydWN0cyB0aGUgZXhhY3Qgc2l6ZSBvZiBhIHJlZ2lzdGVyIGFuZCBhbGlnbmVkIHRvCisgICAgICAgKiB0aGUgc2l6ZSBvZiBhIHJlZ2lzdGVyLgorICAgICAgICovCisgICAgICBpZiAodCA9PSBGRklfVFlQRV9TVFJVQ1QpCisJeworCSAgaWYgKHogPT0gc2l6ZW9mIChpbnQpICYmIGEgPT0gc2l6ZW9mIChpbnQpICYmIHJlZ3VzZWQgPCA4KQorCSAgICBhcmdwID0gKGNoYXIgKilyZWdwOworCSAgZWxzZQorCSAgICBhcmdwID0gc3RhY2twOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoeiA+IHNpemVvZiAoaW50KSAmJiByZWd1c2VkIDwgOCAtIDEpCisJICAgIHsKKwkgICAgICAvKiBhbGlnbiB0byBhbiBldmVuIHJlZ2lzdGVyIHBhaXIgKi8KKwkgICAgICBpZiAocmVndXNlZCAmIDEpCisJCXsKKwkJICByZWdwKys7CisJCSAgcmVndXNlZCsrOworCQl9CisJICAgIH0KKwkgIGlmIChyZWd1c2VkIDwgOCkKKwkgICAgYXJncCA9IChjaGFyICopcmVncDsKKwkgIGVsc2UKKwkgICAgYXJncCA9IHN0YWNrcDsKKwl9CisKKyAgICAgIC8qIEVuZm9yY2UgcHJvcGVyIHN0YWNrIGFsaWdubWVudCBvZiA2NC1iaXQgdHlwZXMgKi8KKyAgICAgIGlmIChhcmdwID09IHN0YWNrcCAmJiBhID4gc2l6ZW9mIChpbnQpKQorCXsKKwkgIHN0YWNrcCA9IChjaGFyICopIEFMSUdOKHN0YWNrcCwgYSk7CisJICBhcmdwID0gc3RhY2twOworCX0KKworICAgICAgc3dpdGNoICh0KQorCXsKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkgKihTSU5UOCAqKSAqcF9hcmd2OworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDggKikgKnBfYXJndjsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSAqKFNJTlQxNiAqKSAqcF9hcmd2OworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQxNiAqKSAqcF9hcmd2OworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX0lOVDoKKwljYXNlIEZGSV9UWVBFX0ZMT0FUOgorCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAqKHVuc2lnbmVkIGludCAqKSAqcF9hcmd2OworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIG1lbWNweSAoYXJncCwgKnBfYXJndiwgeik7CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICBGRklfQVNTRVJUICgwKTsKKwl9CisKKyAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeS4gICovCisgICAgICBpZiAoKHNpemVvZiAoaW50KSAtIDEpICYgeikKKwl6ID0gQUxJR04oeiwgc2l6ZW9mIChpbnQpKTsKKworICAgICAgcF9hcmd2Kys7CisKKyAgICAgIC8qIEJlIGNhcmVmdWwsIG9uY2UgYWxsIHJlZ2lzdGVycyBhcmUgZmlsbGVkLCBhbmQgYWJvdXQgdG8gY29udGludWUKKyAgICAgICAgIG9uIHN0YWNrLCByZWdwID09IHN0YWNrcC4gIFRoZXJlZm9yZSB0aGUgY2hlY2sgZm9yIHJlZ3VzZWQgYXMgd2VsbC4gKi8KKyAgICAgIGlmIChhcmdwID09IChjaGFyICopcmVncCAmJiByZWd1c2VkIDwgOCkKKwl7CisJICByZWdwICs9IHogLyBzaXplb2YgKGludCk7CisJICByZWd1c2VkICs9IHogLyBzaXplb2YgKGludCk7CisJfQorICAgICAgZWxzZQorCXN0YWNrcCArPSB6OworICAgIH0KKworICByZXR1cm4gc3RydWN0X3ZhbHVlX3B0cjsKK30KKworLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZyAqLworZmZpX3N0YXR1cworZmZpX3ByZXBfY2lmX21hY2hkZXAgKGZmaV9jaWYgKmNpZikKK3sKKyAgLyogU2V0IHRoZSByZXR1cm4gdHlwZSBmbGFnICovCisgIHN3aXRjaCAoY2lmLT5ydHlwZS0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBGRklfVFlQRV9WT0lEOgorICAgICAgY2lmLT5mbGFncyA9IDA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorICAgICAgaWYgKGNpZi0+cnR5cGUtPnNpemUgPT0gc2l6ZW9mIChpbnQpICYmCisJICBjaWYtPnJ0eXBlLT5hbGlnbm1lbnQgPT0gc2l6ZW9mIChpbnQpKQorCWNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfSU5UOworICAgICAgZWxzZQorCWNpZi0+ZmxhZ3MgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKyAgICAgIGNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfRElOVDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfSU5UOworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiBGRklfT0s7Cit9CisKK3ZvaWQKK2ZmaV9jYWxsIChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikgKCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKK3sKKyAgZXh0ZW5kZWRfY2lmIGVjaWY7CisKKyAgZWNpZi5jaWYgPSBjaWY7CisgIGVjaWYuYXZhbHVlID0gYXZhbHVlOworCisgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4gdmFsdWUKKyAgICAgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUuICAqLworCisgIGlmIChydmFsdWUgPT0gTlVMTAorICAgICAgJiYgY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmIChjaWYtPnJ0eXBlLT5zaXplICE9IHNpemVvZiAoaW50KQorCSAgfHwgY2lmLT5ydHlwZS0+YWxpZ25tZW50ICE9IHNpemVvZiAoaW50KSkpCisgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EgKGNpZi0+cnR5cGUtPnNpemUpOworICBlbHNlCisgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CisKKyAgc3dpdGNoIChjaWYtPmFiaSkKKyAgICB7CisgICAgY2FzZSBGRklfT0JTRDoKKyAgICAgIGZmaV9jYWxsX09CU0QgKGNpZi0+Ynl0ZXMsICZlY2lmLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRkZJX0FTU0VSVCAoMCk7CisgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qCisgKiBDbG9zdXJlIEFQSQorICovCisKK3N0YXRpYyB2b2lkCitmZmlfcHJlcF9jbG9zdXJlX2FyZ3NfT0JTRCAoZmZpX2NpZiAqY2lmLCB2b2lkICoqYXZhbHVlLCB1bnNpZ25lZCBpbnQgKnJlZ3AsCisJCQkgICAgY2hhciAqc3RhY2twKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgdm9pZCAqKnBfYXJndjsKKyAgY2hhciAqYXJncDsKKyAgdW5zaWduZWQgaW50IHJlZ3VzZWQ7CisgIGZmaV90eXBlICoqcF9hcmc7CisKKyAgcmVndXNlZCA9IDA7CisKKyAgcF9hcmd2ID0gYXZhbHVlOworCisgIGZvciAoaSA9IGNpZi0+bmFyZ3MsIHBfYXJnID0gY2lmLT5hcmdfdHlwZXM7IGkgIT0gMDsgaS0tLCBwX2FyZysrKQorICAgIHsKKyAgICAgIHNpemVfdCB6OworICAgICAgdW5zaWduZWQgc2hvcnQgdCwgYTsKKworICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOworICAgICAgdCA9ICgqcF9hcmcpLT50eXBlOworICAgICAgYSA9ICgqcF9hcmcpLT5hbGlnbm1lbnQ7CisKKyAgICAgIC8qCisgICAgICAgKiBGaWd1cmUgb3V0IHdoZXRoZXIgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHBhc3NlZCB0aHJvdWdoIHJlZ2lzdGVycworICAgICAgICogb3Igb24gdGhlIHN0YWNrLgorICAgICAgICogVGhlIHJ1bGUgaXMgdGhhdCByZWdpc3RlcnMgY2FuIG9ubHkgcmVjZWl2ZSBzaW1wbGUgdHlwZXMgbm90IGxhcmdlcgorICAgICAgICogdGhhbiA2NCBiaXRzLCBvciBzdHJ1Y3RzIHRoZSBleGFjdCBzaXplIG9mIGEgcmVnaXN0ZXIgYW5kIGFsaWduZWQgdG8KKyAgICAgICAqIHRoZSBzaXplIG9mIGEgcmVnaXN0ZXIuCisgICAgICAgKi8KKyAgICAgIGlmICh0ID09IEZGSV9UWVBFX1NUUlVDVCkKKwl7CisJICBpZiAoeiA9PSBzaXplb2YgKGludCkgJiYgYSA9PSBzaXplb2YgKGludCkgJiYgcmVndXNlZCA8IDgpCisJICAgIGFyZ3AgPSAoY2hhciAqKXJlZ3A7CisJICBlbHNlCisJICAgIGFyZ3AgPSBzdGFja3A7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmICh6ID4gc2l6ZW9mIChpbnQpICYmIHJlZ3VzZWQgPCA4IC0gMSkKKwkgICAgeworCSAgICAgIC8qIGFsaWduIHRvIGFuIGV2ZW4gcmVnaXN0ZXIgcGFpciAqLworCSAgICAgIGlmIChyZWd1c2VkICYgMSkKKwkJeworCQkgIHJlZ3ArKzsKKwkJICByZWd1c2VkKys7CisJCX0KKwkgICAgfQorCSAgaWYgKHJlZ3VzZWQgPCA4KQorCSAgICBhcmdwID0gKGNoYXIgKilyZWdwOworCSAgZWxzZQorCSAgICBhcmdwID0gc3RhY2twOworCX0KKworICAgICAgLyogRW5mb3JjZSBwcm9wZXIgc3RhY2sgYWxpZ25tZW50IG9mIDY0LWJpdCB0eXBlcyAqLworICAgICAgaWYgKGFyZ3AgPT0gc3RhY2twICYmIGEgPiBzaXplb2YgKGludCkpCisJeworCSAgc3RhY2twID0gKGNoYXIgKikgQUxJR04oc3RhY2twLCBhKTsKKwkgIGFyZ3AgPSBzdGFja3A7CisJfQorCisgICAgICBpZiAoeiA8IHNpemVvZiAoaW50KSAmJiB0ICE9IEZGSV9UWVBFX1NUUlVDVCkKKwkqcF9hcmd2ID0gKHZvaWQgKikgKGFyZ3AgKyBzaXplb2YgKGludCkgLSB6KTsKKyAgICAgIGVsc2UKKwkqcF9hcmd2ID0gKHZvaWQgKikgYXJncDsKKworICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5ICovCisgICAgICBpZiAoKHNpemVvZiAoaW50KSAtIDEpICYgeikKKwl6ID0gQUxJR04oeiwgc2l6ZW9mIChpbnQpKTsKKworICAgICAgcF9hcmd2Kys7CisKKyAgICAgIC8qIEJlIGNhcmVmdWwsIG9uY2UgYWxsIHJlZ2lzdGVycyBhcmUgZXhoYXVzdGVkLCBhbmQgYWJvdXQgdG8gZmV0Y2ggZnJvbQorCSBzdGFjaywgcmVncCA9PSBzdGFja3AuICBUaGVyZWZvcmUgdGhlIGNoZWNrIGZvciByZWd1c2VkIGFzIHdlbGwuICovCisgICAgICBpZiAoYXJncCA9PSAoY2hhciAqKXJlZ3AgJiYgcmVndXNlZCA8IDgpCisJeworCSAgcmVncCArPSB6IC8gc2l6ZW9mIChpbnQpOworCSAgcmVndXNlZCArPSB6IC8gc2l6ZW9mIChpbnQpOworCX0KKyAgICAgIGVsc2UKKwlzdGFja3AgKz0gejsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludAorZmZpX2Nsb3N1cmVfT0JTRF9pbm5lciAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKnJlc3AsIHVuc2lnbmVkIGludCAqcmVncCwKKwkJCWNoYXIgKnN0YWNrcCkKK3sKKyAgZmZpX2NpZiAqY2lmOworICB2b2lkICoqYXJnX2FyZWE7CisKKyAgY2lmID0gY2xvc3VyZS0+Y2lmOworICBhcmdfYXJlYSA9ICh2b2lkKiopIGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7CisKKyAgZmZpX3ByZXBfY2xvc3VyZV9hcmdzX09CU0QoY2lmLCBhcmdfYXJlYSwgcmVncCwgc3RhY2twKTsKKworICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCByZXNwLCBhcmdfYXJlYSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKworICByZXR1cm4gY2lmLT5mbGFnczsKK30KKworZmZpX3N0YXR1cworZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlKiBjbG9zdXJlLCBmZmlfY2lmKiBjaWYsCisJCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqY29kZWxvYykKK3sKKyAgdW5zaWduZWQgaW50ICp0cmFtcCA9ICh1bnNpZ25lZCBpbnQgKikgY29kZWxvYzsKKyAgdm9pZCAqZm47CisKKyAgRkZJX0FTU0VSVCAoY2lmLT5hYmkgPT0gRkZJX09CU0QpOworCisgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCAmJiAhY2lmLT5mbGFncykKKyAgICBmbiA9ICZmZmlfY2xvc3VyZV9zdHJ1Y3RfT0JTRDsKKyAgZWxzZQorICAgIGZuID0gJmZmaV9jbG9zdXJlX09CU0Q7CisKKyAgLyogb3IudSAlcjEwLCAlcjAsICVoaTE2KGZuKSAqLworICB0cmFtcFswXSA9IDB4NWQ0MDAwMDAgfCAoKCh1bnNpZ25lZCBpbnQpZm4pID4+IDE2KTsKKyAgLyogb3IudSAlcjEzLCAlcjAsICVoaTE2KGNsb3N1cmUpICovCisgIHRyYW1wWzFdID0gMHg1ZGEwMDAwMCB8ICgodW5zaWduZWQgaW50KWNsb3N1cmUgPj4gMTYpOworICAvKiBvciAlcjEwLCAlcjEwLCAlbG8xNihmbikgKi8KKyAgdHJhbXBbMl0gPSAweDU5NGEwMDAwIHwgKCgodW5zaWduZWQgaW50KWZuKSAmIDB4ZmZmZik7CisgIC8qIGptcC5uICVyMTAgKi8KKyAgdHJhbXBbM10gPSAweGY0MDBjNDBhOworICAvKiBvciAlcjEzLCAlcjEzLCAlbG8xNihjbG9zdXJlKSAqLworICB0cmFtcFs0XSA9IDB4NTlhZDAwMDAgfCAoKHVuc2lnbmVkIGludCljbG9zdXJlICYgMHhmZmZmKTsKKworICBmZmlfY2FjaGVmbHVzaF9PQlNEKCh1bnNpZ25lZCBpbnQpY29kZWxvYywgRkZJX1RSQU1QT0xJTkVfU0laRSk7CisKKyAgY2xvc3VyZS0+Y2lmICA9IGNpZjsKKyAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworICBjbG9zdXJlLT5mdW4gID0gZnVuOworCisgIHJldHVybiBGRklfT0s7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9mZml0YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTJiZjlmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9mZml0YXJnZXQuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIE1pb2RyYWcgVmFsbGF0LiAgPG1pb2RAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvKgorICogbTg4ayBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorICovCisKKyNpZm5kZWYgTElCRkZJX1RBUkdFVF9ICisjZGVmaW5lIExJQkZGSV9UQVJHRVRfSAorCisjaWZuZGVmIExJQkZGSV9BU00KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBmZmlfYXJnOwordHlwZWRlZiBzaWduZWQgbG9uZyBmZmlfc2FyZzsKKwordHlwZWRlZiBlbnVtIGZmaV9hYmkgeworICBGRklfRklSU1RfQUJJID0gMCwKKyAgRkZJX09CU0QsCisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9PQlNELAorICBGRklfTEFTVF9BQkkgPSBGRklfREVGQVVMVF9BQkkgKyAxCit9IGZmaV9hYmk7CisjZW5kaWYKKworLyogLS0tLSBEZWZpbml0aW9ucyBmb3IgY2xvc3VyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBGRklfQ0xPU1VSRVMgMQorI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDB4MTQKKyNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL29ic2QuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvb2JzZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDRhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL29ic2QuUwpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBNaW9kcmFnIFZhbGxhdC4gIDxtaW9kQG9wZW5ic2Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIG04OGsgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIExJQkZGSV9BU00JCisjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisKKwkudGV4dAorCisvKgorICogZmZpX2NhY2hlZmx1c2hfT0JTRCh1bnNpZ25lZCBpbnQgYWRkciwJJXIyCisgKgkJICAgICAgIHVuc2lnbmVkIGludCBzaXplKTsJJXIzCisgKi8KKwkuYWxpZ24JNAorCS5nbG9ibAlmZmlfY2FjaGVmbHVzaF9PQlNECisJLnR5cGUJZmZpX2NhY2hlZmx1c2hfT0JTRCxAZnVuY3Rpb24KK2ZmaV9jYWNoZWZsdXNoX09CU0Q6CisJdGIwCTAsICAgJXIwLCA0NTEKKwlvcgklcjAsICVyMCwgJXIwCisJam1wCSVyMQorCS5zaXplCWZmaV9jYWNoZWZsdXNoX09CU0QsIC4gLSBmZmlfY2FjaGVmbHVzaF9PQlNECisKKy8qCisgKiBmZmlfY2FsbF9PQlNEKHVuc2lnbmVkIGJ5dGVzLAkJJXIyCisgKgkJIGV4dGVuZGVkX2NpZiAqZWNpZiwJCSVyMworICoJCSB1bnNpZ25lZCBmbGFncywJCSVyNAorICoJCSB2b2lkICpydmFsdWUsCQkJJXI1CisgKgkJIHZvaWQgKCpmbikoKSk7CQkJJXI2CisgKi8KKwkuYWxpZ24JNAorCS5nbG9ibAlmZmlfY2FsbF9PQlNECisJLnR5cGUJZmZpX2NhbGxfT0JTRCxAZnVuY3Rpb24KK2ZmaV9jYWxsX09CU0Q6CisJc3VidQklcjMxLCAlcjMxLCAzMgorCXN0CSVyMzAsICVyMzEsIDQKKwlzdAklcjEsICAlcjMxLCAwCisJYWRkdQklcjMwLCAlcjMxLCAzMgorCisJfCBTYXZlIHRoZSBmZXcgYXJndW1lbnRzIHdlJ2xsIG5lZWQgYWZ0ZXIgZmZpX3ByZXBfYXJncygpCisJc3QuZAklcjQsICVyMzEsIDgKKwlzdAklcjYsICVyMzEsIDE2CisKKwl8IEFsbG9jYXRlIHJvb20gZm9yIHRoZSBpbWFnZSBvZiByMi1yOSwgYW5kIHRoZSBzdGFjayBzcGFjZSBmb3IKKwl8IHRoZSBhcmdzIChyb3VuZGVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeSkKKwlhZGR1CSVyMiwgICVyMiwgICg4ICogNCkgKyAxNQorCWNscgklcjIsICAlcjIsICA0PDA+CisJc3VidQklcjMxLCAlcjMxLCAlcjIKKworCXwgRmlsbCByZWdpc3RlciBhbmQgc3RhY2sgaW1hZ2UKKwlvcgklcjIsICVyMzEsICVyMAorI2lmZGVmIFBJQworCWJzcglmZmlfcHJlcF9hcmdzI3BsdAorI2Vsc2UKKwlic3IJZmZpX3ByZXBfYXJncworI2VuZGlmCisKKwl8IFNhdmUgcG9pbnRlciB0byByZXR1cm4gc3RydWN0IGFkZHJlc3MsIGlmIGFueQorCW9yCSVyMTIsICVyMiwgJXIwCisKKwl8IEdldCBmdW5jdGlvbiBwb2ludGVyCisJc3VidQklcjQsICAlcjMwLCAzMgorCWxkCSVyMSwgICVyNCwgIDE2CisKKwl8IEZldGNoIHRoZSByZWdpc3RlciBhcmd1bWVudHMKKwlsZC5kCSVyMiwgJXIzMSwgKDAgKiA0KQorCWxkLmQJJXI0LCAlcjMxLCAoMiAqIDQpCisJbGQuZAklcjYsICVyMzEsICg0ICogNCkKKwlsZC5kCSVyOCwgJXIzMSwgKDYgKiA0KQorCWFkZHUJJXIzMSwgJXIzMSwgKDggKiA0KQorCisJfCBJbnZva2UgdGhlIGZ1bmN0aW9uCisJanNyCSVyMQorCisJfCBSZXN0b3JlIHN0YWNrIG5vdyB0aGF0IHdlIGRvbid0IG5lZWQgdGhlIGFyZ3MgYW55bW9yZQorCXN1YnUJJXIzMSwgJXIzMCwgMzIKKworCXwgRmlndXJlIG91dCB3aGF0IHRvIHJldHVybiBhcyB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUKKwlsZAklcjUsICVyMzEsIDEyCQl8IHJ2YWx1ZQorCWxkCSVyNCwgJXIzMSwgOAkJfCBmbGFncworCisJYmNuZAllcTAsICVyNSwgOWYKKworCWJiMAkwLCAlcjQsIDFmCQl8IENJRl9GTEFHU19JTlQKKwlzdAklcjIsICVyNSwgMAorCWJyCTlmCisKKzE6CisJYmIwCTEsICVyNCwgMWYJCXwgQ0lGX0ZMQUdTX0RJTlQKKwlzdC5kCSVyMiwgJXI1LCAwCisJYnIJOWYKKworMToKKzk6CisJbGQJJXIxLCAgJXIzMSwgMAorCWxkCSVyMzAsICVyMzEsIDQKKwlqbXAubgklcjEKKwkgYWRkdQklcjMxLCAlcjMxLCAzMgorCS5zaXplCWZmaV9jYWxsX09CU0QsIC4gLSBmZmlfY2FsbF9PQlNECisKKy8qCisgKiBmZmlfY2xvc3VyZV9PQlNEKGZmaV9jbG9zdXJlICpjbG9zdXJlKTsJJXIxMworICovCisJLmFsaWduCTQKKwkuZ2xvYmwJZmZpX2Nsb3N1cmVfT0JTRAorCS50eXBlCWZmaV9jbG9zdXJlX09CU0QsIEBmdW5jdGlvbgorZmZpX2Nsb3N1cmVfT0JTRDoKKwlzdWJ1CSVyMzEsICVyMzEsIDE2CisJc3QJJXIzMCwgJXIzMSwgNAorCXN0CSVyMSwgICVyMzEsIDAKKwlhZGR1CSVyMzAsICVyMzEsIDE2CisKKwl8IE1ha2Ugcm9vbSBvbiB0aGUgc3RhY2sgZm9yIHNhdmVkIHJlZ2lzdGVyIGFyZ3VtZW50cyBhbmQgcmV0dXJuCisJfCB2YWx1ZQorCXN1YnUJJXIzMSwgJXIzMSwgKDggKiA0KSArICgyICogNCkKKwlzdC5kCSVyMiwgICVyMzEsICgwICogNCkKKwlzdC5kCSVyNCwgICVyMzEsICgyICogNCkKKwlzdC5kCSVyNiwgICVyMzEsICg0ICogNCkKKwlzdC5kCSVyOCwgICVyMzEsICg2ICogNCkKKworCXwgSW52b2tlIHRoZSBjbG9zdXJlIGZ1bmN0aW9uCisJb3IJJXI1LCAgJXIzMCwgMAkJCXwgY2FsbGluZyBzdGFjaworCWFkZHUJJXI0LCAgJXIzMSwgMAkJCXwgc2F2ZWQgcmVnaXN0ZXJzCisJYWRkdQklcjMsICAlcjMxLCAoOCAqIDQpCQl8IHJldHVybiB2YWx1ZQorCW9yCSVyMiwgICVyMTMsICVyMAkJCXwgY2xvc3VyZQorI2lmZGVmIFBJQworCWJzcglmZmlfY2xvc3VyZV9PQlNEX2lubmVyI3BsdAorI2Vsc2UKKwlic3IJZmZpX2Nsb3N1cmVfT0JTRF9pbm5lcgorI2VuZGlmCisKKwl8IEZpZ3VyZSBvdXQgd2hhdCB0byByZXR1cm4gYXMgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlCisJYmIwCTAsICVyMiwgMWYJCXwgQ0lGX0ZMQUdTX0lOVAorCWxkCSVyMiwgJXIzMSwgKDggKiA0KQorCWJyCTlmCisKKzE6CisJYmIwCTEsICVyMiwgMWYJCXwgQ0lGX0ZMQUdTX0RJTlQKKwlsZC5kCSVyMiwgJXIzMSwgKDggKiA0KQorCWJyCTlmCisKKzE6Cis5OgorCXN1YnUJJXIzMSwgJXIzMCwgMTYKKwlsZAklcjEsICAlcjMxLCAwCisJbGQJJXIzMCwgJXIzMSwgNAorCWptcC5uCSVyMQorCSBhZGR1CSVyMzEsICVyMzEsIDE2CisJLnNpemUJZmZpX2Nsb3N1cmVfT0JTRCwuLWZmaV9jbG9zdXJlX09CU0QKKworLyoKKyAqIGZmaV9jbG9zdXJlX3N0cnVjdF9PQlNEKGZmaV9jbG9zdXJlICpjbG9zdXJlKTsJJXIxMworICovCisJLmFsaWduCTQKKwkuZ2xvYmwJZmZpX2Nsb3N1cmVfc3RydWN0X09CU0QKKwkudHlwZQlmZmlfY2xvc3VyZV9zdHJ1Y3RfT0JTRCwgQGZ1bmN0aW9uCitmZmlfY2xvc3VyZV9zdHJ1Y3RfT0JTRDoKKwlzdWJ1CSVyMzEsICVyMzEsIDE2CisJc3QJJXIzMCwgJXIzMSwgNAorCXN0CSVyMSwgICVyMzEsIDAKKwlhZGR1CSVyMzAsICVyMzEsIDE2CisKKwl8IE1ha2Ugcm9vbSBvbiB0aGUgc3RhY2sgZm9yIHNhdmVkIHJlZ2lzdGVyIGFyZ3VtZW50cworCXN1YnUJJXIzMSwgJXIzMSwgKDggKiA0KQorCXN0LmQJJXIyLCAgJXIzMSwgKDAgKiA0KQorCXN0LmQJJXI0LCAgJXIzMSwgKDIgKiA0KQorCXN0LmQJJXI2LCAgJXIzMSwgKDQgKiA0KQorCXN0LmQJJXI4LCAgJXIzMSwgKDYgKiA0KQorCisJfCBJbnZva2UgdGhlIGNsb3N1cmUgZnVuY3Rpb24KKwlvcgklcjUsICAlcjMwLCAwCQkJfCBjYWxsaW5nIHN0YWNrCisJYWRkdQklcjQsICAlcjMxLCAwCQkJfCBzYXZlZCByZWdpc3RlcnMKKwlvcgklcjMsICAlcjEyLCAwCQkJfCByZXR1cm4gdmFsdWUKKwlvcgklcjIsICAlcjEzLCAlcjAJCQl8IGNsb3N1cmUKKyNpZmRlZiBQSUMKKwlic3IJZmZpX2Nsb3N1cmVfT0JTRF9pbm5lciNwbHQKKyNlbHNlCisJYnNyCWZmaV9jbG9zdXJlX09CU0RfaW5uZXIKKyNlbmRpZgorCisJc3VidQklcjMxLCAlcjMwLCAxNgorCWxkCSVyMSwgICVyMzEsIDAKKwlsZAklcjMwLCAlcjMxLCA0CisJam1wLm4JJXIxCisJIGFkZHUJJXIzMSwgJXIzMSwgMTYKKwkuc2l6ZQlmZmlfY2xvc3VyZV9zdHJ1Y3RfT0JTRCwuLWZmaV9jbG9zdXJlX3N0cnVjdF9PQlNECmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taWNyb2JsYXplL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWljcm9ibGF6ZS9mZmkuYwppbmRleCA1YzE1NWM1Li5lYTk2MmVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taWNyb2JsYXplL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pY3JvYmxhemUvZmZpLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCWZmaV90eXBlKiogYXJnX3R5cGVzID0gY2lmLT5hcmdfdHlwZXM7CiAKIAkvKiByZS1hbGxvY2F0ZSBkYXRhIGZvciB0aGUgYXJncy4gVGhpcyBuZWVkcyB0byBiZSBkb25lIGluIG9yZGVyIHRvIGtlZXAKLQkgKiBtdWx0aS13b3JkIG9iamVjdHMgKGUuZy4gc3RydWN0cykgaW4gY29udGlnaW91cyBtZW1vcnkuIENhbGxlcnMgYXJlIG5vdAorCSAqIG11bHRpLXdvcmQgb2JqZWN0cyAoZS5nLiBzdHJ1Y3RzKSBpbiBjb250aWd1b3VzIG1lbW9yeS4gQ2FsbGVycyBhcmUgbm90CiAJICogcmVxdWlyZWQgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIGFyZ3MgaW4gdGhlIGxvd2VyIDYgd29yZHMgaW4gdGhlIHN0YWNrCiAJICogKGFsdGhvdWdoIHRoZXkgYXJlIGFsbG9jYXRlZCBpbiB0aGUgc3RhY2spLgogCSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWljcm9ibGF6ZS9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taWNyb2JsYXplL3N5c3YuUwppbmRleCA3YTE5NWE2Li5lYTQzZTlkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taWNyb2JsYXplL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taWNyb2JsYXplL3N5c3YuUwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJcnN1YmkgcjExLCByMjMsIDgKIAliZXFpIHIxMSwgZmZpX2NhbGxfU1lTVl9zdG9yZTY0CiAKLQkvKiBEaWRudCBtYXRjaCBhbnl0aGluZyAqLworCS8qIERpZG4ndCBtYXRjaCBhbnl0aGluZyAqLwogCWJyaSBmZmlfY2FsbF9TWVNWX2VuZAogCiBmZmlfY2FsbF9TWVNWX3N0b3JlNjQ6CkBAIC0yMTAsNyArMjEwLDcgQEAKIAlhZGRpayByNywgcjEyLCAwIC8qIGNsb3N1cmUgb2JqZWN0ICovCiAJYWRkaWsgcjEsIHIxLCAtOCAvKiBhbGxvY2F0ZSByZXR1cm4gdmFsdWUgKi8KIAlhZGRpayByOCwgcjEsIDAgLyogdm9pZCogcnZhbHVlICovCi0JYWRkaWsgcjEsIHIxLCAtOCAvKiBhbGxvY2F0ZSBmb3IgcmV1dHJuIHR5cGUvc2l6ZSB2YWx1ZXMgKi8KKwlhZGRpayByMSwgcjEsIC04IC8qIGFsbG9jYXRlIGZvciByZXR1cm4gdHlwZS9zaXplIHZhbHVlcyAqLwogCWFkZGlrIHI5LCByMSwgMCAvKiB2b2lkKiBydHlwZSAqLwogCWFkZGlrIHIxMCwgcjEsIDQgLyogdm9pZCogcnNpemUgKi8KIApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJcnN1YmkgcjExLCByMTAsIDgKIAliZXFpIHIxMSwgZmZpX2Nsb3N1cmVfU1lTVl9zdG9yZTY0CiAKLQkvKiBEaWRudCBtYXRjaCBhbnl0aGluZyAqLworCS8qIERpZG4ndCBtYXRjaCBhbnl0aGluZyAqLwogCWJyaSBmZmlfY2xvc3VyZV9TWVNWX2VuZAogCiBmZmlfY2xvc3VyZV9TWVNWX3N0b3JlNjQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZmkuYwppbmRleCAwMzEyMWUzLi41ZDBkZDcwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpLmMKQEAgLTE3MCw3ICsxNzAsMTQgQEAKIAkJYnJlYWs7CiAJCSAgCiAJICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CisjaWZkZWYgRkZJX01JUFNfTjMyCisJCS8qIFRoZSBOMzIgQUJJIHJlcXVpcmVzIHRoYXQgMzItYml0IGludGVnZXJzCisJCSAgIGJlIHNpZ24tZXh0ZW5kZWQgdG8gNjQtYml0cywgcmVnYXJkbGVzcyBvZgorCQkgICB3aGV0aGVyIHRoZXkgYXJlIHNpZ25lZCBvciB1bnNpZ25lZC4gKi8KKwkJKihmZmlfYXJnICopYXJncCA9ICooU0lOVDMyICopKCogcF9hcmd2KTsKKyNlbHNlCiAJCSooZmZpX2FyZyAqKWFyZ3AgPSAqKFVJTlQzMiAqKSgqIHBfYXJndik7CisjZW5kaWYKIAkJYnJlYWs7CiAKIAkgICAgICAvKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aXRoIDY0Yml0IHNsb3RzLiAgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbjMyLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL24zMi5TCmluZGV4IGZmNGJiY2UuLmM2OTg1ZDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbjMyLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9uMzIuUwpAQCAtMTA4LDEwICsxMDgsOCBAQAogCVJFR19MCXQ2LCAzKkZGSV9TSVpFT0ZfQVJHKCRmcCkgICMgbG9hZCB0aGUgZmxhZ3Mgd29yZCBpbnRvIHQ2LgogCiAJYW5kCXQ0LCB0NiwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQotCWJuZXoJdDQsIGFyZzFfZmxvYXRwCiAJUkVHX0wJYTAsIDAqRkZJX1NJWkVPRl9BUkcodDkpCi0JYglhcmcxX25leHQKLWFyZzFfZmxvYXRwOgkKKwliZXF6CXQ0LCBhcmcxX25leHQKIAlibmUJdDQsIEZGSV9UWVBFX0ZMT0FULCBhcmcxX2RvdWJsZXAKIAlsLnMJJGYxMiwgMCpGRklfU0laRU9GX0FSRyh0OSkKIAliCWFyZzFfbmV4dApAQCAtMTIxLDEwICsxMTksOCBAQAogCQogCVNSTAl0NCwgdDYsIDEqRkZJX0ZMQUdfQklUUwogCWFuZAl0NCwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQotCWJuZXoJdDQsIGFyZzJfZmxvYXRwCiAJUkVHX0wJYTEsIDEqRkZJX1NJWkVPRl9BUkcodDkpCi0JYglhcmcyX25leHQKLWFyZzJfZmxvYXRwOgorCWJlcXoJdDQsIGFyZzJfbmV4dAogCWJuZQl0NCwgRkZJX1RZUEVfRkxPQVQsIGFyZzJfZG91YmxlcAogCWwucwkkZjEzLCAxKkZGSV9TSVpFT0ZfQVJHKHQ5KQkKIAliCWFyZzJfbmV4dApAQCAtMTM0LDEwICsxMzAsOCBAQAogCQogCVNSTAl0NCwgdDYsIDIqRkZJX0ZMQUdfQklUUwogCWFuZAl0NCwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQotCWJuZXoJdDQsIGFyZzNfZmxvYXRwCiAJUkVHX0wJYTIsIDIqRkZJX1NJWkVPRl9BUkcodDkpCi0JYglhcmczX25leHQKLWFyZzNfZmxvYXRwOgorCWJlcXoJdDQsIGFyZzNfbmV4dAogCWJuZQl0NCwgRkZJX1RZUEVfRkxPQVQsIGFyZzNfZG91YmxlcAogCWwucwkkZjE0LCAyKkZGSV9TSVpFT0ZfQVJHKHQ5KQkKIAliCWFyZzNfbmV4dApAQCAtMTQ3LDEwICsxNDEsOCBAQAogCQogCVNSTAl0NCwgdDYsIDMqRkZJX0ZMQUdfQklUUwogCWFuZAl0NCwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQotCWJuZXoJdDQsIGFyZzRfZmxvYXRwCiAJUkVHX0wJYTMsIDMqRkZJX1NJWkVPRl9BUkcodDkpCi0JYglhcmc0X25leHQKLWFyZzRfZmxvYXRwOgorCWJlcXoJdDQsIGFyZzRfbmV4dAogCWJuZQl0NCwgRkZJX1RZUEVfRkxPQVQsIGFyZzRfZG91YmxlcAogCWwucwkkZjE1LCAzKkZGSV9TSVpFT0ZfQVJHKHQ5KQkKIAliCWFyZzRfbmV4dApAQCAtMTYwLDEwICsxNTIsOCBAQAogCQogCVNSTAl0NCwgdDYsIDQqRkZJX0ZMQUdfQklUUwogCWFuZAl0NCwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQotCWJuZXoJdDQsIGFyZzVfZmxvYXRwCiAJUkVHX0wJYTQsIDQqRkZJX1NJWkVPRl9BUkcodDkpCi0JYglhcmc1X25leHQKLWFyZzVfZmxvYXRwOgorCWJlcXoJdDQsIGFyZzVfbmV4dAogCWJuZQl0NCwgRkZJX1RZUEVfRkxPQVQsIGFyZzVfZG91YmxlcAogCWwucwkkZjE2LCA0KkZGSV9TSVpFT0ZfQVJHKHQ5KQkKIAliCWFyZzVfbmV4dApAQCAtMTczLDEwICsxNjMsOCBAQAogCQogCVNSTAl0NCwgdDYsIDUqRkZJX0ZMQUdfQklUUwogCWFuZAl0NCwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQotCWJuZXoJdDQsIGFyZzZfZmxvYXRwCiAJUkVHX0wJYTUsIDUqRkZJX1NJWkVPRl9BUkcodDkpCi0JYglhcmc2X25leHQKLWFyZzZfZmxvYXRwOgorCWJlcXoJdDQsIGFyZzZfbmV4dAogCWJuZQl0NCwgRkZJX1RZUEVfRkxPQVQsIGFyZzZfZG91YmxlcAogCWwucwkkZjE3LCA1KkZGSV9TSVpFT0ZfQVJHKHQ5KQkKIAliCWFyZzZfbmV4dApAQCAtMTg2LDEwICsxNzQsOCBAQAogCQogCVNSTAl0NCwgdDYsIDYqRkZJX0ZMQUdfQklUUwogCWFuZAl0NCwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQotCWJuZXoJdDQsIGFyZzdfZmxvYXRwCiAJUkVHX0wJYTYsIDYqRkZJX1NJWkVPRl9BUkcodDkpCi0JYglhcmc3X25leHQKLWFyZzdfZmxvYXRwOgorCWJlcXoJdDQsIGFyZzdfbmV4dAogCWJuZQl0NCwgRkZJX1RZUEVfRkxPQVQsIGFyZzdfZG91YmxlcAogCWwucwkkZjE4LCA2KkZGSV9TSVpFT0ZfQVJHKHQ5KQkKIAliCWFyZzdfbmV4dApAQCAtMTk5LDEwICsxODUsOCBAQAogCQogCVNSTAl0NCwgdDYsIDcqRkZJX0ZMQUdfQklUUwogCWFuZAl0NCwgKCgxPDxGRklfRkxBR19CSVRTKS0xKQotCWJuZXoJdDQsIGFyZzhfZmxvYXRwCiAJUkVHX0wJYTcsIDcqRkZJX1NJWkVPRl9BUkcodDkpCi0JYglhcmc4X25leHQKLWFyZzhfZmxvYXRwOgorCWJlcXoJdDQsIGFyZzhfbmV4dAogCWJuZQl0NCwgRkZJX1RZUEVfRkxPQVQsIGFyZzhfZG91YmxlcAogIAlsLnMJJGYxOSwgNypGRklfU0laRU9GX0FSRyh0OSkJCiAJYglhcmc4X25leHQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvZmZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmYTAzMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL2ZmaS5jCkBAIC0wLDAgKzEsMzA0IEBACisvKiBsaWJmZmkgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MgSUkuCisKKyAgIENvcHlyaWdodCAoYykgMjAxMyBNZW50b3IgR3JhcGhpY3MuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgICAKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgIAorICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgICBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICAgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogVGhlIE5pb3MgSUkgUHJvY2Vzc29yIFJlZmVyZW5jZSBIYW5kYm9vayBkZWZpbmVzIHRoZSBwcm9jZWR1cmUgY2FsbAorICAgQUJJIGFzIGZvbGxvd3MuCisKKyAgIEFyZ3VtZW50cyBhcmUgcGFzc2VkIGFzIGlmIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHR5cGVzIG9mCisgICB0aGUgYXJndW1lbnRzIHdlcmUgY29uc3RydWN0ZWQuICBUaGUgZmlyc3QgMTYgYnl0ZXMgYXJlIHBhc3NlZCBpbiByNAorICAgdGhyb3VnaCByNywgdGhlIHJlbWFpbmRlciBvbiB0aGUgc3RhY2suICBUaGUgZmlyc3QgMTYgYnl0ZXMgb2YgYSBmdW5jdGlvbgorICAgdGFraW5nIHZhcmlhYmxlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIHI0LXI3IGluIHRoZSBzYW1lIHdheS4KKworICAgUmV0dXJuIHZhbHVlcyBvZiB0eXBlcyB1cCB0byA4IGJ5dGVzIGFyZSByZXR1cm5lZCBpbiByMiBhbmQgcjMuICBGb3IKKyAgIHJldHVybiB2YWx1ZXMgZ3JlYXRlciB0aGFuIDggYnl0ZXMsIHRoZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBtZW1vcnkgZm9yCisgICB0aGUgcmVzdWx0IGFuZCBwYXNzIHRoZSBhZGRyZXNzIGFzIGlmIGl0IHdlcmUgYXJndW1lbnQgMC4gIAorCisgICBXaGlsZSB0aGlzIGlzbid0IHNwZWNpZmllZCBleHBsaWNpdGx5IGluIHRoZSBBQkkgZG9jdW1lbnRhdGlvbiwgR0NDCisgICBwcm9tb3RlcyBpbnRlZ3JhbCBhcmd1bWVudHMgc21hbGxlciB0aGFuIGludCBzaXplIHRvIDMyIGJpdHMuCisKKyAgIEFsc28gb2Ygbm90ZSwgdGhlIEFCSSBzcGVjaWZpZXMgdGhhdCBhbGwgc3RydWN0dXJlIG9iamVjdHMgYXJlCisgICBhbGlnbmVkIHRvIDMyIGJpdHMgZXZlbiBpZiBhbGwgdGhlaXIgZmllbGRzIGhhdmUgYSBzbWFsbGVyIG5hdHVyYWwKKyAgIGFsaWdubWVudC4gIFNlZSBGRklfQUdHUkVHQVRFX0FMSUdOTUVOVC4gICovCisKKworLyogRGVjbGFyZSB0aGUgYXNzZW1ibHkgbGFuZ3VhZ2UgaG9va3MuICAqLworCitleHRlcm4gVUlOVDY0IGZmaV9jYWxsX3N5c3YgKHZvaWQgKCopIChjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwKKwkJCSAgICAgZXh0ZW5kZWRfY2lmICosCisJCQkgICAgIHVuc2lnbmVkLCAKKwkJCSAgICAgdm9pZCAoKmZuKSAodm9pZCkpOworZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfc3lzdiAodm9pZCk7CisKKy8qIFBlcmZvcm0gbWFjaGluZS1kZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcuICAqLworCitmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwIChmZmlfY2lmICpjaWYpCit7CisgIC8qIFdlIGFsd2F5cyB3YW50IGF0IGxlYXN0IDE2IGJ5dGVzIGluIHRoZSBwYXJhbWV0ZXIgYmxvY2sgc2luY2UgaXQKKyAgICAgc2ltcGxpZmllcyB0aGUgbG93LWxldmVsIGNhbGwgZnVuY3Rpb24uICBBbHNvIHJvdW5kIHRoZSBwYXJhbWV0ZXIKKyAgICAgYmxvY2sgc2l6ZSB1cCB0byBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgdG8gcHJlc2VydmUKKyAgICAgMzItYml0IGFsaWdubWVudCBvZiB0aGUgc3RhY2sgcG9pbnRlci4gICovCisgIGlmIChjaWYtPmJ5dGVzIDwgMTYpCisgICAgY2lmLT5ieXRlcyA9IDE2OworICBlbHNlCisgICAgY2lmLT5ieXRlcyA9IChjaWYtPmJ5dGVzICsgMykgJiB+MzsKKworICByZXR1cm4gRkZJX09LOworfQorCisKKy8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIHRvIHRyYW5zZmVyIGFyZ3VtZW50cworICAgdG8gdGhlIHN0YWNrIHVzaW5nIHRoZSBwb2ludGVycyBpbiB0aGUgZWNpZiBhcnJheS4KKyAgIE5vdGUgdGhhdCB0aGUgc3RhY2sgYnVmZmVyIGlzIGJpZyBlbm91Z2ggdG8gZml0IGFsbCB0aGUgYXJndW1lbnRzLAorICAgYnV0IHRoZSBmaXJzdCAxNiBieXRlcyB3aWxsIGJlIGNvcGllZCB0byByZWdpc3RlcnMgZm9yIHRoZSBhY3R1YWwKKyAgIGNhbGwuICAqLworCit2b2lkIGZmaV9wcmVwX2FyZ3MgKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpCit7CisgIGNoYXIgKmFyZ3AgPSBzdGFjazsKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgLyogVGhlIGltcGxpY2l0IHJldHVybiB2YWx1ZSBwb2ludGVyIGlzIHBhc3NlZCBhcyBpZiBpdCB3ZXJlIGEgaGlkZGVuCisgICAgIGZpcnN0IGFyZ3VtZW50LiAgKi8KKyAgaWYgKGVjaWYtPmNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiBlY2lmLT5jaWYtPnJ0eXBlLT5zaXplID4gOCkKKyAgICB7CisgICAgICAoKih2b2lkICoqKSBhcmdwKSA9IGVjaWYtPnJ2YWx1ZTsKKyAgICAgIGFyZ3AgKz0gNDsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGVjaWYtPmNpZi0+bmFyZ3M7IGkrKykKKyAgICB7CisgICAgICB2b2lkICphdmFsdWUgPSBlY2lmLT5hdmFsdWVbaV07CisgICAgICBmZmlfdHlwZSAqYXR5cGUgPSBlY2lmLT5jaWYtPmFyZ190eXBlc1tpXTsKKyAgICAgIHNpemVfdCBzaXplID0gYXR5cGUtPnNpemU7CisgICAgICBzaXplX3QgYWxpZ25tZW50ID0gYXR5cGUtPmFsaWdubWVudDsKKworICAgICAgLyogQWxpZ24gYXJncCBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGFyZ3VtZW50IHR5cGUuICAqLworICAgICAgaWYgKChhbGlnbm1lbnQgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkKKwlhcmdwID0gKGNoYXIgKikgQUxJR04gKGFyZ3AsIGFsaWdubWVudCk7CisKKyAgICAgIC8qIENvcHkgdGhlIGFyZ3VtZW50LCBwcm9tb3RpbmcgaW50ZWdyYWwgdHlwZXMgc21hbGxlciB0aGFuIGEKKwkgd29yZCB0byB3b3JkIHNpemUuICAqLworICAgICAgaWYgKHNpemUgPCBzaXplb2YgKGludCkpCisJeworCSAgc2l6ZSA9IHNpemVvZiAoaW50KTsKKwkgIHN3aXRjaCAoYXR5cGUtPnR5cGUpCisJICAgIHsKKwkgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSAqKFNJTlQ4ICopIGF2YWx1ZTsKKwkgICAgICBicmVhazsKKwkJICAKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UOCAqKSBhdmFsdWU7CisJICAgICAgYnJlYWs7CisJCSAgCisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpICooU0lOVDE2ICopIGF2YWx1ZTsKKwkgICAgICBicmVhazsKKwkJICAKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDE2ICopIGF2YWx1ZTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgICAgICBtZW1jcHkgKGFyZ3AsIGF2YWx1ZSwgYXR5cGUtPnNpemUpOworCSAgICAgIGJyZWFrOworCisJICAgIGRlZmF1bHQ6CisJICAgICAgRkZJX0FTU0VSVCgwKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHNpemUgPT0gc2l6ZW9mIChpbnQpKQorCSoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQzMiAqKSBhdmFsdWU7CisgICAgICBlbHNlCisJbWVtY3B5IChhcmdwLCBhdmFsdWUsIHNpemUpOworICAgICAgYXJncCArPSBzaXplOworICAgIH0KK30KKworCisvKiBDYWxsIEZOIHVzaW5nIHRoZSBwcmVwYXJlZCBDSUYuICBSVkFMVUUgcG9pbnRzIHRvIHNwYWNlIGFsbG9jYXRlZCBieQorICAgdGhlIGNhbGxlciBmb3IgdGhlIHJldHVybiB2YWx1ZSwgYW5kIEFWQUxVRSBpcyBhbiBhcnJheSBvZiBhcmd1bWVudAorICAgcG9pbnRlcnMuICAqLworCit2b2lkIGZmaV9jYWxsIChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikgKHZvaWQpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCit7CisKKyAgZXh0ZW5kZWRfY2lmIGVjaWY7CisgIFVJTlQ2NCByZXN1bHQ7CisKKyAgLyogSWYgYmlncmV0IGlzIHRydWUsIHRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgYSByZXR1cm4gdmFsdWUgb2YgbGFyZ2VyCisgICAgIHRoYW4gOCBieXRlcyBpcyBoYW5kbGVkIGJ5IGJlaW5nIHBhc3NlZCBieSByZWZlcmVuY2UgYXMgYW4gaW1wbGljaXQKKyAgICAgYXJndW1lbnQuICAqLworICBpbnQgYmlncmV0ID0gKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisJCSYmIGNpZi0+cnR5cGUtPnNpemUgPiA4KTsKKworICBlY2lmLmNpZiA9IGNpZjsKKyAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CisKKyAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHJldHVybiB2YWx1ZSBpZiB0aGlzIGlzIHRoZSBwYXNzLWJ5LXJlZmVyZW5jZSBjYXNlCisgICAgIGFuZCB0aGUgY2FsbGVyIGRpZCBub3QgcHJvdmlkZSBhIGJ1ZmZlci4gICovCisgIGlmIChydmFsdWUgPT0gTlVMTCAmJiBiaWdyZXQpCisgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EgKGNpZi0+cnR5cGUtPnNpemUpOworICBlbHNlCisgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CisKKyAgcmVzdWx0ID0gZmZpX2NhbGxfc3lzdiAoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGZuKTsKKworICAvKiBOb3cgcmVzdWx0IGNvbnRhaW5zIHRoZSA2NCBiaXQgY29udGVudHMgcmV0dXJuZWQgZnJvbSBmbiBpbgorICAgICByMiBhbmQgcjMuICBDb3B5IHRoZSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6ZSB0byB0aGUgdXNlci1wcm92aWRlZAorICAgICBydmFsdWUgYnVmZmVyLiAgKi8KKyAgaWYgKHJ2YWx1ZSAmJiAhYmlncmV0KQorICAgIHN3aXRjaCAoY2lmLT5ydHlwZS0+c2l6ZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgMToKKwkqKFVJTlQ4ICopcnZhbHVlID0gKFVJTlQ4KSByZXN1bHQ7CisJYnJlYWs7CisgICAgICBjYXNlIDI6CisJKihVSU5UMTYgKilydmFsdWUgPSAoVUlOVDE2KSByZXN1bHQ7CisJYnJlYWs7CisgICAgICBjYXNlIDQ6CisJKihVSU5UMzIgKilydmFsdWUgPSAoVUlOVDMyKSByZXN1bHQ7CisJYnJlYWs7CisgICAgICBjYXNlIDg6CisJKihVSU5UNjQgKilydmFsdWUgPSAoVUlOVDY0KSByZXN1bHQ7CisJYnJlYWs7CisgICAgICBkZWZhdWx0OgorCW1lbWNweSAocnZhbHVlLCAodm9pZCAqKSZyZXN1bHQsIGNpZi0+cnR5cGUtPnNpemUpOworCWJyZWFrOworICAgICAgfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSB0aGUgY2xvc3VyZSB0cmFtcG9saW5lIHRvIGludm9rZQorICAgQ0xPU1VSRSB3aXRoIGFyZ3VtZW50IGJsb2NrIEFSR1MuICBQYXJzZSBBUkdTIGFjY29yZGluZyB0bworICAgQ0xPU1VSRS0+Y2ZpIGFuZCBpbnZva2UgQ0xPU1VSRS0+ZnVuLiAgKi8KKworc3RhdGljIFVJTlQ2NAorZmZpX2Nsb3N1cmVfaGVscGVyICh1bnNpZ25lZCBjaGFyICphcmdzLAorCQkgICAgZmZpX2Nsb3N1cmUgKmNsb3N1cmUpCit7CisgIGZmaV9jaWYgKmNpZiA9IGNsb3N1cmUtPmNpZjsKKyAgdW5zaWduZWQgY2hhciAqYXJncCA9IGFyZ3M7CisgIHZvaWQgKipwYXJzZWRfYXJncyA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7CisgIFVJTlQ2NCByZXN1bHQ7CisgIHZvaWQgKnJldHB0cjsKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgLyogRmlyc3QgZmlndXJlIG91dCB3aGF0IHRvIGRvIGFib3V0IHRoZSByZXR1cm4gdHlwZS4gIElmIHRoaXMgaXMgdGhlCisgICAgIGJpZy1zdHJ1Y3R1cmUtcmV0dXJuIGNhc2UsIHRoZSBmaXJzdCBhcmcgaXMgdGhlIGhpZGRlbiByZXR1cm4gYnVmZmVyCisgICAgIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVyLiAgKi8KKyAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiBjaWYtPnJ0eXBlLT5zaXplID4gOCkKKyAgICB7CisgICAgICByZXRwdHIgPSAqKCh2b2lkICoqKSBhcmdwKTsKKyAgICAgIGFyZ3AgKz0gNDsKKyAgICB9CisgIGVsc2UKKyAgICByZXRwdHIgPSAodm9pZCAqKSAmcmVzdWx0OworCisgIC8qIEZpbGwgaW4gdGhlIGFycmF5IG9mIGFyZ3VtZW50IHBvaW50ZXJzLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKykKKyAgICB7CisgICAgICBzaXplX3Qgc2l6ZSA9IGNpZi0+YXJnX3R5cGVzW2ldLT5zaXplOworICAgICAgc2l6ZV90IGFsaWdubWVudCA9IGNpZi0+YXJnX3R5cGVzW2ldLT5hbGlnbm1lbnQ7CisKKyAgICAgIC8qIEFsaWduIGFyZ3AgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBhcmd1bWVudCB0eXBlLiAgKi8KKyAgICAgIGlmICgoYWxpZ25tZW50IC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApCisJYXJncCA9IChjaGFyICopIEFMSUdOIChhcmdwLCBhbGlnbm1lbnQpOworCisgICAgICAvKiBBcmd1bWVudHMgc21hbGxlciB0aGFuIGFuIGludCBhcmUgcHJvbW90ZWQgdG8gaW50LiAgKi8KKyAgICAgIGlmIChzaXplIDwgc2l6ZW9mIChpbnQpKQorCXNpemUgPSBzaXplb2YgKGludCk7CisKKyAgICAgIC8qIFN0b3JlIHRoZSBwb2ludGVyLiAgKi8KKyAgICAgIHBhcnNlZF9hcmdzW2ldID0gYXJncDsKKyAgICAgIGFyZ3AgKz0gc2l6ZTsKKyAgICB9CisKKyAgLyogQ2FsbCB0aGUgdXNlci1zdXBwbGllZCBmdW5jdGlvbi4gICovCisgIChjbG9zdXJlLT5mdW4pIChjaWYsIHJldHB0ciwgcGFyc2VkX2FyZ3MsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyogSW5pdGlhbGl6ZSBDTE9TVVJFIHdpdGggYSB0cmFtcG9saW5lIHRvIGNhbGwgRlVOIHdpdGgKKyAgIENJRiBhbmQgVVNFUl9EQVRBLiAgKi8KK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSogY2xvc3VyZSwKKwkJICAgICAgZmZpX2NpZiogY2lmLAorCQkgICAgICB2b2lkICgqZnVuKSAoZmZpX2NpZiosIHZvaWQqLCB2b2lkKiosIHZvaWQqKSwKKwkJICAgICAgdm9pZCAqdXNlcl9kYXRhLAorCQkgICAgICB2b2lkICpjb2RlbG9jKQoreworICB1bnNpZ25lZCBpbnQgKnRyYW1wID0gKHVuc2lnbmVkIGludCAqKSAmY2xvc3VyZS0+dHJhbXBbMF07CisgIGludCBpOworCisgIGlmIChjaWYtPmFiaSAhPSBGRklfU1lTVikKKyAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisKKyAgLyogVGhlIHRyYW1wb2xpbmUgbG9va3MgbGlrZToKKyAgICAgICBtb3ZoaSByOCwgJWhpKGZmaV9jbG9zdXJlX3N5c3YpCisgICAgICAgb3JpIHI4LCByOCwgJWxvKGZmaV9jbG9zdXJlX3N5c3YpCisgICAgICAgbW92aGkgcjksICVoaShmZmlfY2xvc3VyZV9oZWxwZXIpCisgICAgICAgb3JpIHIwLCByOSwgJWxvKGZmaV9jbG9zdXJlX2hlbHBlcikKKyAgICAgICBtb3ZoaSByMTAsICVoaShjbG9zdXJlKQorICAgICAgIG9yaSByMTAsIHIxMCwgJWxvKGNsb3N1cmUpCisgICAgICAgam1wIHI4CisgICAgIGFuZCB0aGVuIGZmaV9jbG9zdXJlX3N5c3YgcmV0cmlldmVzIHRoZSBjbG9zdXJlIHBvaW50ZXIgb3V0IG9mIHIxMAorICAgICBpbiBhZGRpdGlvbiB0byB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbiB0aGUgbm9ybWFsIHdheSBmb3IgdGhlIGNhbGwsCisgICAgIGFuZCBpbnZva2VzIGZmaV9jbG9zdXJlX2hlbHBlci4gIFdlIGVuY29kZSB0aGUgcG9pbnRlciB0bworICAgICBmZmlfY2xvc3VyZV9oZWxwZXIgaW4gdGhlIHRyYW1wb2xpbmUgYmVjYXVzZSBtYWtpbmcgYSBQSUMgY2FsbAorICAgICB0byBpdCBpbiBmZmlfY2xvc3VyZV9zeXN2IHdvdWxkIGJlIG1lc3N5IChpdCB3b3VsZCBoYXZlIHRvIGluZGlyZWN0CisgICAgIHRocm91Z2ggdGhlIEdPVCkuICAqLworCisjZGVmaW5lIEhJKHgpICgoKCh1bnNpZ25lZCBpbnQpICh4KSkgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBMTyh4KSAoKCh1bnNpZ25lZCBpbnQpICh4KSkgJiAweGZmZmYpCisgIHRyYW1wWzBdID0gKDAgPDwgMjcpIHwgKDggPDwgMjIpIHwgKEhJIChmZmlfY2xvc3VyZV9zeXN2KSA8PCA2KSB8IDB4MzQ7CisgIHRyYW1wWzFdID0gKDggPDwgMjcpIHwgKDggPDwgMjIpIHwgKExPIChmZmlfY2xvc3VyZV9zeXN2KSA8PCA2KSB8IDB4MTQ7CisgIHRyYW1wWzJdID0gKDAgPDwgMjcpIHwgKDkgPDwgMjIpIHwgKEhJIChmZmlfY2xvc3VyZV9oZWxwZXIpIDw8IDYpIHwgMHgzNDsKKyAgdHJhbXBbM10gPSAoOSA8PCAyNykgfCAoOSA8PCAyMikgfCAoTE8gKGZmaV9jbG9zdXJlX2hlbHBlcikgPDwgNikgfCAweDE0OworICB0cmFtcFs0XSA9ICgwIDw8IDI3KSB8ICgxMCA8PCAyMikgfCAoSEkgKGNsb3N1cmUpIDw8IDYpIHwgMHgzNDsKKyAgdHJhbXBbNV0gPSAoMTAgPDwgMjcpIHwgKDEwIDw8IDIyKSB8IChMTyAoY2xvc3VyZSkgPDwgNikgfCAweDE0OworICB0cmFtcFs2XSA9ICg4IDw8IDI3KSB8ICgweDBkIDw8IDExKSB8IDB4M2E7CisjdW5kZWYgSEkKKyN1bmRlZiBMTworCisgIC8qIEZsdXNoIHRoZSBjYWNoZXMuCisgICAgIFNlZSBFeGFtcGxlIDktNCBpbiB0aGUgTmlvcyBJSSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBIYW5kYm9vay4gICovCisgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisgICAgYXNtIHZvbGF0aWxlICgiZmx1c2hkIDAoJTApOyBmbHVzaGkgJTAiIDo6ICJyIih0cmFtcCArIGkpIDogIm1lbW9yeSIpOworICBhc20gdm9sYXRpbGUgKCJmbHVzaHAiIDo6OiAibWVtb3J5Iik7CisKKyAgY2xvc3VyZS0+Y2lmID0gY2lmOworICBjbG9zdXJlLT5mdW4gPSBmdW47CisgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKworICByZXR1cm4gRkZJX09LOworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL2ZmaXRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGQxMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9mZml0YXJnZXQuaApAQCAtMCwwICsxLDUyIEBACisvKiBsaWJmZmkgdGFyZ2V0IGluY2x1ZGVzIGZvciBBbHRlcmEgTmlvcyBJSS4KKworICAgQ29weXJpZ2h0IChjKSAyMDEzIE1lbnRvciBHcmFwaGljcy4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgIAorICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICAgCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICAgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgICBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisKKworI2lmbmRlZiBMSUJGRklfVEFSR0VUX0gKKyNkZWZpbmUgTElCRkZJX1RBUkdFVF9ICisKKyNpZm5kZWYgTElCRkZJX0gKKyNlcnJvciAiUGxlYXNlIGRvIG5vdCBpbmNsdWRlIGZmaXRhcmdldC5oIGRpcmVjdGx5IGludG8geW91ciBzb3VyY2UuICBVc2UgZmZpLmggaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBMSUJGRklfQVNNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAgZmZpX2FyZzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgICAgICAgICAgICBmZmlfc2FyZzsKKwordHlwZWRlZiBlbnVtIGZmaV9hYmkgeworICBGRklfRklSU1RfQUJJID0gMCwKKyAgRkZJX1NZU1YsCisgIEZGSV9MQVNUX0FCSSwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1NZU1YKK30gZmZpX2FiaTsKKyNlbmRpZgorCisvKiBTdHJ1Y3R1cmVzIGhhdmUgYSA0LWJ5dGUgYWxpZ25tZW50IGV2ZW4gaWYgYWxsIHRoZSBmaWVsZHMgaGF2ZSBsZXNzZXIKKyAgIGFsaWdubWVudCByZXF1aXJlbWVudHMuICAqLworI2RlZmluZSBGRklfQUdHUkVHQVRFX0FMSUdOTUVOVCA0CisKKyNkZWZpbmUgRkZJX0NMT1NVUkVTIDEKKyNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAyOCAgIC8qIDcgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvc3lzdi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjQ0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9zeXN2LlMKQEAgLTAsMCArMSwxMzYgQEAKKy8qIExvdy1sZXZlbCBsaWJmZmkgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MgSUkuCisKKyAgIENvcHlyaWdodCAoYykgMjAxMyBNZW50b3IgR3JhcGhpY3MuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgICAKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgIAorICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgICBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICAgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIG9uIHRoZSBDIHNpZGUgYXMgCisKKyAgIGV4dGVybiBVSU5UNjQgZmZpX2NhbGxfc3lzdiAodm9pZCAoKmFyZ2hvb2spIChjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwKKwkgIAkJICAgICAgICBleHRlbmRlZF9jaWYgKmVjaWYsCisJCQkJdW5zaWduZWQgbmJ5dGVzLCAKKwkJCQl2b2lkICgqZm4pICh2b2lkKSk7CisJCisgICBPbiBpbnB1dCwgdGhlIGFyZ3VtZW50cyBhcHBlYXIgYXMKKwlyNCA9IGFyZ2hvb2sKKwlyNSA9IGVjaWYKKwlyNiA9IG5ieXRlcworCXI3ID0gZm4KKyovCisKKwkuc2VjdGlvbgkudGV4dAorCS5hbGlnbgkyCisJLmdsb2JhbAlmZmlfY2FsbF9zeXN2CisJLnR5cGUJZmZpX2NhbGxfc3lzdiwgQGZ1bmN0aW9uCisKK2ZmaV9jYWxsX3N5c3Y6CisJLmNmaV9zdGFydHByb2MKKworCS8qIENyZWF0ZSB0aGUgc3RhY2sgZnJhbWUsIHNhdmluZyByMTYgc28gd2UgY2FuIHVzZSBpdCBsb2NhbGx5LiAgKi8KKwlhZGRpCXNwLCBzcCwgLTEyCisJLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorCXN0dwlyYSwgOChzcCkKKwlzdHcJZnAsIDQoc3ApCisJc3R3CXIxNiwgMChzcCkKKwkuY2ZpX29mZnNldCAzMSwgLTQKKwkuY2ZpX29mZnNldCAyOCwgLTgKKwkuY2ZpX29mZnNldCAxNiwgLTEyCisJbW92CWZwLCBzcAorCS5jZmlfZGVmX2NmYV9yZWdpc3RlciAyOAorCW1vdglyMTYsIHI3CisKKwkvKiBBZGp1c3QgdGhlIHN0YWNrIHBvaW50ZXIgdG8gY3JlYXRlIHRoZSBhcmd1bWVudCBidWZmZXIKKwkgICBuYnl0ZXMgbG9uZy4gICovCisJc3ViCXNwLCBzcCwgcjYKKworCS8qIENhbGwgdGhlIGFyZ2hvb2sgZnVuY3Rpb24uICAqLworCW1vdglyMiwgcjQJCS8qIGZuICovCisJbW92CXI0LCBzcAkJLyogYXJnYnVmZmVyICovCisJY2FsbHIJcjIJCS8qIHI1IGFscmVhZHkgY29udGFpbnMgZWNpZiAqLworCisJLyogUG9wIG9mZiB0aGUgZmlyc3QgMTYgYnl0ZXMgb2YgdGhlIGFyZ3VtZW50IGJ1ZmZlciBvbiB0aGUgc3RhY2ssCisJICAgdHJhbnNmZXJyaW5nIHRoZSBjb250ZW50cyB0byB0aGUgYXJndW1lbnQgcmVnaXN0ZXJzLiAgKi8KKwlsZHcJcjQsIDAoc3ApCisJbGR3CXI1LCA0KHNwKQorCWxkdwlyNiwgOChzcCkKKwlsZHcJcjcsIDEyKHNwKQorCWFkZGkJc3AsIHNwLCAxNgorCisJLyogQ2FsbCB0aGUgdXNlciBmdW5jdGlvbiwgd2hpY2ggbGVhdmVzIGl0cyByZXN1bHQgaW4gcjIgYW5kIHIzLiAgKi8KKwljYWxscglyMTYKKworCS8qIFBvcCBvZmYgdGhlIHN0YWNrIGZyYW1lLiAgKi8KKwltb3YJc3AsIGZwCisJbGR3CXJhLCA4KHNwKQorCWxkdwlmcCwgNChzcCkKKwlsZHcJcjE2LCAwKHNwKQorCWFkZGkJc3AsIHNwLCAxMgorCXJldAorCS5jZmlfZW5kcHJvYworCS5zaXplCWZmaV9jYWxsX3N5c3YsIC4tZmZpX2NhbGxfc3lzdgorCisKKy8qIENsb3N1cmUgdHJhbXBvbGluZXMganVtcCBoZXJlIGFmdGVyIHB1dHRpbmcgdGhlIEMgaGVscGVyIGFkZHJlc3MKKyAgIGluIHI5IGFuZCB0aGUgY2xvc3VyZSBwb2ludGVyIGluIHIxMC4gIFRoZSB1c2VyLXN1cHBsaWVkIGFyZ3VtZW50cworICAgdG8gdGhlIGNsb3N1cmUgYXJlIGluIHRoZSBub3JtYWwgcGxhY2VzLCBpbiByNC1yNyBhbmQgb24gdGhlCisgICBzdGFjay4gIFB1c2ggdGhlIHJlZ2lzdGVyIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgdG9vIGFuZCB0aGVuIGNhbGwgdGhlCisgICBDIGhlbHBlciBmdW5jdGlvbiB0byBkZWFsIHdpdGggdGhlbS4gICovCisgICAKKwkuc2VjdGlvbgkudGV4dAorCS5hbGlnbgkyCisJLmdsb2JhbAlmZmlfY2xvc3VyZV9zeXN2CisJLnR5cGUJZmZpX2Nsb3N1cmVfc3lzdiwgQGZ1bmN0aW9uCisKK2ZmaV9jbG9zdXJlX3N5c3Y6CisJLmNmaV9zdGFydHByb2MKKworCS8qIENyZWF0ZSB0aGUgc3RhY2sgZnJhbWUsIHB1c2hpbmcgdGhlIHJlZ2lzdGVyIGFyZ3Mgb24gdGhlIHN0YWNrCisJICAganVzdCBiZWxvdyB0aGUgc3RhY2sgYXJncy4gIFRoaXMgaXMgdGhlIHNhbWUgdHJpY2sgaWxsdXN0cmF0ZWQKKwkgICBpbiBGaWd1cmUgNy0zIGluIHRoZSBOaW9zIElJIFByb2Nlc3NvciBSZWZlcmVuY2UgSGFuZGJvb2ssIHVzZWQKKwkgICBmb3IgdmFyaWFibGUgYXJndW1lbnRzIGFuZCBzdHJ1Y3R1cmVzIHBhc3NlZCBieSB2YWx1ZS4gICovCisJYWRkaQlzcCwgc3AsIC0yMAorCS5jZmlfZGVmX2NmYV9vZmZzZXQgMjAKKwlzdHcJcmEsIDAoc3ApCisJLmNmaV9vZmZzZXQgMzEsIC0yMAorCXN0dwlyNCwgNChzcCkKKwkuY2ZpX29mZnNldCA0LCAtMTYKKwlzdHcJcjUsIDgoc3ApCisJLmNmaV9vZmZzZXQgNSwgLTEyCisJc3R3CXI2LCAxMihzcCkKKwkuY2ZpX29mZnNldCA2LCAtOAorCXN0dwlyNywgMTYoc3ApCisJLmNmaV9vZmZzZXQgNywgLTQKKworCS8qIENhbGwgdGhlIGhlbHBlci4KKwkgICByNCA9IHBvaW50ZXIgdG8gYXJndW1lbnRzIG9uIHN0YWNrCisJICAgcjUgPSBjbG9zdXJlIHBvaW50ZXIgKGxvYWRlZCBpbiByMTAgYnkgdGhlIHRyYW1wb2xpbmUpCisJICAgcjkgPSBhZGRyZXNzIG9mIGhlbHBlciBmdW5jdGlvbiAobG9hZGVkIGJ5IHRyYW1wb2xpbmUpICovCisJYWRkaQlyNCwgc3AsIDQKKwltb3YJcjUsIHIxMAorCWNhbGxyCXI5CisJCisJLyogUG9wIHRoZSBzdGFjayBhbmQgcmV0dXJuLiAgKi8KKwlsZHcJcmEsIDAoc3ApCisJYWRkaQlzcCwgc3AsIDIwCisJLmNmaV9kZWZfY2ZhX29mZnNldCAtMjAKKwlyZXQKKwkuY2ZpX2VuZHByb2MKKwkuc2l6ZQlmZmlfY2xvc3VyZV9zeXN2LCAuLWZmaV9jbG9zdXJlX3N5c3YKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW4uUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luLlMKaW5kZXggNGY5ODdkYy4uMDY2ZWI4MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW4uUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbi5TCkBAIC0zMTgsMTEgKzMxOCw2IEBACiAKICNkZWZpbmUgRUhfREFUQV9BTElHTl9GQUNUIE1PREVfQ0hPSUNFKDB4N2MsMHg3OCkKIAotCS5zdGF0aWNfZGF0YQotCS5hbGlnbiBMT0cyX0dQUl9CWVRFUwotTExGQjAkbm9uX2xhenlfcHRyOgotCS5nX2xvbmcgTHN0YXJ0Y29kZQotCiAJLnNlY3Rpb24gX19URVhULF9fZWhfZnJhbWUsY29hbGVzY2VkLG5vX3RvYytzdHJpcF9zdGF0aWNfc3ltcytsaXZlX3N1cHBvcnQKIEVIX2ZyYW1lMToKIAkuc2V0CUwkc2V0JDAsTEVDSUUxLUxTQ0lFMQpAQCAtMzM1LDcgKzMzMCw3IEBACiAJLmJ5dGUJRUhfREFUQV9BTElHTl9GQUNUIDsgc2xlYjEyOCAtNDsgQ0lFIERhdGEgQWxpZ25tZW50IEZhY3RvcgogCS5ieXRlCTB4NDEJOyBDSUUgUkEgQ29sdW1uCiAJLmJ5dGUJMHgxCTsgdWxlYjEyOCAweDE7IEF1Z21lbnRhdGlvbiBzaXplCi0JLmJ5dGUJMHgxMAk7IEZERSBFbmNvZGluZyAoaW5kaXJlY3QgcGNyZWwpCisJLmJ5dGUJMHgxMAk7IEZERSBFbmNvZGluZyAocGNyZWwpCiAJLmJ5dGUJMHhjCTsgRFdfQ0ZBX2RlZl9jZmEKIAkuYnl0ZQkweDEJOyB1bGViMTI4IDB4MQogCS5ieXRlCTB4MAk7IHVsZWIxMjggMHgwCkBAIC0zNDksNyArMzQ0LDcgQEAKIAkubG9uZwlMJHNldCQxCTsgRkRFIExlbmd0aAogTEFTRkRFMToKIAkubG9uZwlMQVNGREUxLUVIX2ZyYW1lMSA7IEZERSBDSUUgb2Zmc2V0Ci0JLmdfbG9uZwlMTEZCMCRub25fbGF6eV9wdHItLgk7IEZERSBpbml0aWFsIGxvY2F0aW9uCisJLmdfbG9uZwlMc3RhcnRjb2RlLS4JOyBGREUgaW5pdGlhbCBsb2NhdGlvbgogCS5zZXQJTCRzZXQkMyxMRkUxLUxzdGFydGNvZGUKIAkuZ19sb25nCUwkc2V0JDMJOyBGREUgYWRkcmVzcyByYW5nZQogCS5ieXRlICAgMHgwICAgICA7IHVsZWIxMjggMHgwOyBBdWdtZW50YXRpb24gc2l6ZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TCmluZGV4IDNmNjc5MGYuLmM3NzM0ZDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWxnCXIwLDAocjMpCQk7IHNpemUgPT4gcjAKIAlsaHoJcjMsRkZJX1RZUEVfVFlQRShyMykJOyB0eXBlID0+IHIzCiAKLQkvKiBUaGUgaGVscGVyIHdpbGwgaGF2ZSBpbnRlcmNlcHRlZCBzdHJ1dHVyZSByZXR1cm5zIGFuZCBpbnNlcnRlZAorCS8qIFRoZSBoZWxwZXIgd2lsbCBoYXZlIGludGVyY2VwdGVkIHN0cnVjdHVyZSByZXR1cm5zIGFuZCBpbnNlcnRlZAogCSAgIHRoZSBjYWxsZXJgcyBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBzdHJ1Y3RzIHJldHVybmVkIGJ5IHJlZi4gICovCiAKIAkvKiByMyBjb250YWlucyB0aGUgcmV0dXJuIHR5cGUgIHNvIHVzZSBpdCB0byBsb29rIHVwIGluIGEgdGFibGUKQEAgLTQ2NywxMSArNDY3LDYgQEAKICNkZWZpbmUgRUhfRlJBTUVfT0ZGU0VUQSBNT0RFX0NIT0lDRSgxNzYsMHg5MCkKICNkZWZpbmUgRUhfRlJBTUVfT0ZGU0VUQiBNT0RFX0NIT0lDRSgxLDMpCiAKLQkuc3RhdGljX2RhdGEKLQkuYWxpZ24gTE9HMl9HUFJfQllURVMKLUxMRkIxJG5vbl9sYXp5X3B0cjoKLQkuZ19sb25nIExzdGFydGNvZGUKLQogCS5zZWN0aW9uIF9fVEVYVCxfX2VoX2ZyYW1lLGNvYWxlc2NlZCxub190b2Mrc3RyaXBfc3RhdGljX3N5bXMrbGl2ZV9zdXBwb3J0CiBFSF9mcmFtZTE6CiAJLnNldAlMJHNldCQwLExFQ0lFMS1MU0NJRTEKQEAgLTQ4NCw3ICs0NzksNyBAQAogCS5ieXRlCUVIX0RBVEFfQUxJR05fRkFDVCA7IHNsZWIxMjggLTQ7IENJRSBEYXRhIEFsaWdubWVudCBGYWN0b3IKIAkuYnl0ZQkweDQxCTsgQ0lFIFJBIENvbHVtbgogCS5ieXRlCTB4MQk7IHVsZWIxMjggMHgxOyBBdWdtZW50YXRpb24gc2l6ZQotCS5ieXRlCTB4MTAJOyBGREUgRW5jb2RpbmcgKGluZGlyZWN0IHBjcmVsKQorCS5ieXRlCTB4MTAJOyBGREUgRW5jb2RpbmcgKHBjcmVsKQogCS5ieXRlCTB4Ywk7IERXX0NGQV9kZWZfY2ZhCiAJLmJ5dGUJMHgxCTsgdWxlYjEyOCAweDEKIAkuYnl0ZQkweDAJOyB1bGViMTI4IDB4MApAQCAtNDk4LDcgKzQ5Myw3IEBACiAKIExBU0ZERTE6CiAJLmxvbmcJTEFTRkRFMS1FSF9mcmFtZTEJOyBGREUgQ0lFIG9mZnNldAotCS5nX2xvbmcJTExGQjEkbm9uX2xhenlfcHRyLS4JOyBGREUgaW5pdGlhbCBsb2NhdGlvbgorCS5nX2xvbmcJTHN0YXJ0Y29kZS0uCTsgRkRFIGluaXRpYWwgbG9jYXRpb24KIAkuc2V0CUwkc2V0JDMsTEZFMS1Mc3RhcnRjb2RlCiAJLmdfbG9uZwlMJHNldCQzCTsgRkRFIGFkZHJlc3MgcmFuZ2UKIAkuYnl0ZSAgIDB4MCAgICAgOyB1bGViMTI4IDB4MDsgQXVnbWVudGF0aW9uIHNpemUKQEAgLTUyMywxMiArNTE4LDEyIEBACiBMX2ZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4kc3R1YjoKIAkuaW5kaXJlY3Rfc3ltYm9sIF9mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOCiAJbWZsciByMAotCWJjbCAyMCwzMSwiTDAwMDAwMDAwMDAxJHNwYiIKLSJMMDAwMDAwMDAwMDEkc3BiIjoKKwliY2wgMjAsMzEsIkwxJHNwYiIKKyJMMSRzcGIiOgogCW1mbHIgcjExCi0JYWRkaXMgcjExLHIxMSxoYTE2KExfZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiRsYXp5X3B0ci0iTDAwMDAwMDAwMDAxJHNwYiIpCisJYWRkaXMgcjExLHIxMSxoYTE2KExfZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiRsYXp5X3B0ci0iTDEkc3BiIikKIAltdGxyIHIwCi0JbHd6dSByMTIsbG8xNihMX2ZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4kbGF6eV9wdHItIkwwMDAwMDAwMDAwMSRzcGIiKShyMTEpCisJbHd6dSByMTIsbG8xNihMX2ZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4kbGF6eV9wdHItIkwxJHNwYiIpKHIxMSkKIAltdGN0ciByMTIKIAliY3RyCiAJLmxhenlfc3ltYm9sX3BvaW50ZXIKQEAgLTU0MiwxMiArNTM3LDEyIEBACiBMX2RhcndpbjY0X3N0cnVjdF9yZXRfYnlfdmFsdWVfcCRzdHViOgogCS5pbmRpcmVjdF9zeW1ib2wgX2RhcndpbjY0X3N0cnVjdF9yZXRfYnlfdmFsdWVfcAogCW1mbHIgcjAKLQliY2wgMjAsMzEsIkwwMDAwMDAwMDAwMiRzcGIiCi0iTDAwMDAwMDAwMDAyJHNwYiI6CisJYmNsIDIwLDMxLCJMMiRzcGIiCisiTDIkc3BiIjoKIAltZmxyIHIxMQotCWFkZGlzIHIxMSxyMTEsaGExNihMX2RhcndpbjY0X3N0cnVjdF9yZXRfYnlfdmFsdWVfcCRsYXp5X3B0ci0iTDAwMDAwMDAwMDAyJHNwYiIpCisJYWRkaXMgcjExLHIxMSxoYTE2KExfZGFyd2luNjRfc3RydWN0X3JldF9ieV92YWx1ZV9wJGxhenlfcHRyLSJMMiRzcGIiKQogCW10bHIgcjAKLQlsd3p1IHIxMixsbzE2KExfZGFyd2luNjRfc3RydWN0X3JldF9ieV92YWx1ZV9wJGxhenlfcHRyLSJMMDAwMDAwMDAwMDIkc3BiIikocjExKQorCWx3enUgcjEyLGxvMTYoTF9kYXJ3aW42NF9zdHJ1Y3RfcmV0X2J5X3ZhbHVlX3AkbGF6eV9wdHItIkwyJHNwYiIpKHIxMSkKIAltdGN0ciByMTIKIAliY3RyCiAJLmxhenlfc3ltYm9sX3BvaW50ZXIKQEAgLTU2MCwxMiArNTU1LDEyIEBACiBMX2RhcndpbjY0X3Bhc3Nfc3RydWN0X2Zsb2F0cyRzdHViOgogCS5pbmRpcmVjdF9zeW1ib2wgX2RhcndpbjY0X3Bhc3Nfc3RydWN0X2Zsb2F0cwogCW1mbHIgcjAKLQliY2wgMjAsMzEsIkwwMDAwMDAwMDAwMyRzcGIiCi0iTDAwMDAwMDAwMDAzJHNwYiI6CisJYmNsIDIwLDMxLCJMMyRzcGIiCisiTDMkc3BiIjoKIAltZmxyIHIxMQotCWFkZGlzIHIxMSxyMTEsaGExNihMX2RhcndpbjY0X3Bhc3Nfc3RydWN0X2Zsb2F0cyRsYXp5X3B0ci0iTDAwMDAwMDAwMDAzJHNwYiIpCisJYWRkaXMgcjExLHIxMSxoYTE2KExfZGFyd2luNjRfcGFzc19zdHJ1Y3RfZmxvYXRzJGxhenlfcHRyLSJMMyRzcGIiKQogCW10bHIgcjAKLQlsd3p1IHIxMixsbzE2KExfZGFyd2luNjRfcGFzc19zdHJ1Y3RfZmxvYXRzJGxhenlfcHRyLSJMMDAwMDAwMDAwMDMkc3BiIikocjExKQorCWx3enUgcjEyLGxvMTYoTF9kYXJ3aW42NF9wYXNzX3N0cnVjdF9mbG9hdHMkbGF6eV9wdHItIkwzJHNwYiIpKHIxMSkKIAltdGN0ciByMTIKIAliY3RyCiAJLmxhenlfc3ltYm9sX3BvaW50ZXIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCmluZGV4IDUzODFkM2QuLmVmYjQ0MWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYwpAQCAtMSw1ICsxLDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBmZmkuYyAtIENvcHlyaWdodCAoQykgMjAxMSBBbnRob255IEdyZWVuCisgICBmZmkuYyAtIENvcHlyaWdodCAoQykgMjAxMyBJQk0KKyAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIEFudGhvbnkgR3JlZW4KICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIEt5bGUgTW9mZmV0dAogICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jCiAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYwpAQCAtMjcsOTkyICsyOCwxMDMgQEAKICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpbmNsdWRlIDxmZmkuaD4KLSNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisjaW5jbHVkZSAiZmZpLmgiCisjaW5jbHVkZSAiZmZpX2NvbW1vbi5oIgorI2luY2x1ZGUgImZmaV9wb3dlcnBjLmgiCiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0KLWV4dGVybiB2b2lkIGZmaV9jbG9zdXJlX1NZU1YgKHZvaWQpOwotZXh0ZXJuIHZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9MSU5VWDY0ICh2b2lkKTsKLQotZW51bSB7Ci0gIC8qIFRoZSBhc3NlbWJseSBkZXBlbmRzIG9uIHRoZXNlIGV4YWN0IGZsYWdzLiAgKi8KLSAgRkxBR19SRVRVUk5TX1NNU1QJPSAxIDw8ICgzMS0zMSksIC8qIFVzZWQgZm9yIEZGSV9TWVNWIHNtYWxsIHN0cnVjdHMuICAqLwotICBGTEFHX1JFVFVSTlNfTk9USElORyAgPSAxIDw8ICgzMS0zMCksIC8qIFRoZXNlIGdvIGluIGNyNyAqLwotI2lmbmRlZiBfX05PX0ZQUlNfXwotICBGTEFHX1JFVFVSTlNfRlAgICAgICAgPSAxIDw8ICgzMS0yOSksCi0jZW5kaWYKLSAgRkxBR19SRVRVUk5TXzY0QklUUyAgID0gMSA8PCAoMzEtMjgpLAotCi0gIEZMQUdfUkVUVVJOU18xMjhCSVRTICA9IDEgPDwgKDMxLTI3KSwgLyogY3I2ICAqLwotCi0gIEZMQUdfU1lTVl9TTVNUX1I0ICAgICA9IDEgPDwgKDMxLTI2KSwgLyogdXNlIHI0IGZvciBGRklfU1lTViA4IGJ5dGUKLQkJCQkJICAgc3RydWN0cy4gICovCi0gIEZMQUdfU1lTVl9TTVNUX1IzICAgICA9IDEgPDwgKDMxLTI1KSwgLyogdXNlIHIzIGZvciBGRklfU1lTViA0IGJ5dGUKLQkJCQkJICAgc3RydWN0cy4gICovCi0KLSAgRkxBR19BUkdfTkVFRFNfQ09QWSAgID0gMSA8PCAoMzEtIDcpLAotI2lmbmRlZiBfX05PX0ZQUlNfXwotICBGTEFHX0ZQX0FSR1VNRU5UUyAgICAgPSAxIDw8ICgzMS0gNiksIC8qIGNyMS5lcTsgc3BlY2lmaWVkIGJ5IEFCSSAqLwotI2VuZGlmCi0gIEZMQUdfNF9HUFJfQVJHVU1FTlRTICA9IDEgPDwgKDMxLSA1KSwKLSAgRkxBR19SRVRWQUxfUkVGRVJFTkNFID0gMSA8PCAoMzEtIDQpCi19OwotCi0vKiBBYm91dCB0aGUgU1lTViBBQkkuICAqLwotI2RlZmluZSBBU01fTkVFRFNfUkVHSVNURVJTIDQKLSNkZWZpbmUgTlVNX0dQUl9BUkdfUkVHSVNURVJTIDgKLSNpZm5kZWYgX19OT19GUFJTX18KLSMgZGVmaW5lIE5VTV9GUFJfQVJHX1JFR0lTVEVSUyA4Ci0jZW5kaWYKLQotLyogZmZpX3ByZXBfYXJnc19TWVNWIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCi0gICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cy4KLQotICAgVGhlIHN0YWNrIGxheW91dCB3ZSB3YW50IGxvb2tzIGxpa2UgdGhpczoKLQotICAgfCAgIFJldHVybiBhZGRyZXNzIGZyb20gZmZpX2NhbGxfU1lTViA0Ynl0ZXMJfAloaWdoZXIgYWRkcmVzc2VzCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0gICB8ICAgUHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIJNAl8ICAgICAgIHN0YWNrIHBvaW50ZXIgaGVyZQotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfDwrIDw8PAlvbiBlbnRyeSB0bwotICAgfCAgIFNhdmVkIHIyOC1yMzEJCQk0KjQJfCB8CWZmaV9jYWxsX1NZU1YKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAotICAgfCAgIEdQUiByZWdpc3RlcnMgcjMtcjEwCQk4KjQJfCB8CWZmaV9jYWxsX1NZU1YKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAotICAgfCAgIEZQUiByZWdpc3RlcnMgZjEtZjggKG9wdGlvbmFsKQk4KjgJfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJc3RhY2sJfAotICAgfCAgIFNwYWNlIGZvciBjb3BpZWQgc3RydWN0dXJlcwkJfCB8CWdyb3dzCXwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlkb3duICAgIFYKLSAgIHwgICBQYXJhbWV0ZXJzIHRoYXQgZGlkbid0IGZpdCBpbiByZWdpc3RlcnMgIHwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CWxvd2VyIGFkZHJlc3NlcwotICAgfCAgIFNwYWNlIGZvciBjYWxsZWUncyBMUgkJNAl8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlzdGFjayBwb2ludGVyIGhlcmUKLSAgIHwgICBDdXJyZW50IGJhY2tjaGFpbiBwb2ludGVyCTQJfC0vCWR1cmluZwotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgIDw8PAlmZmlfY2FsbF9TWVNWCi0KLSovCi0KLXZvaWQKLWZmaV9wcmVwX2FyZ3NfU1lTViAoZXh0ZW5kZWRfY2lmICplY2lmLCB1bnNpZ25lZCAqY29uc3Qgc3RhY2spCi17Ci0gIGNvbnN0IHVuc2lnbmVkIGJ5dGVzID0gZWNpZi0+Y2lmLT5ieXRlczsKLSAgY29uc3QgdW5zaWduZWQgZmxhZ3MgPSBlY2lmLT5jaWYtPmZsYWdzOwotCi0gIHR5cGVkZWYgdW5pb24gewotICAgIGNoYXIgKmM7Ci0gICAgdW5zaWduZWQgKnU7Ci0gICAgbG9uZyBsb25nICpsbDsKLSAgICBmbG9hdCAqZjsKLSAgICBkb3VibGUgKmQ7Ci0gIH0gdmFscDsKLQotICAvKiAnc3RhY2t0b3AnIHBvaW50cyBhdCB0aGUgcHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIuICAqLwotICB2YWxwIHN0YWNrdG9wOwotCi0gIC8qICdncHJfYmFzZScgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZ3ByMywgYW5kIGdyb3dzIHVwd2FyZHMgYXMKLSAgICAgd2UgdXNlIEdQUiByZWdpc3RlcnMuICAqLwotICB2YWxwIGdwcl9iYXNlOwotICBpbnQgaW50YXJnX2NvdW50OwotCi0jaWZuZGVmIF9fTk9fRlBSU19fCi0gIC8qICdmcHJfYmFzZScgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZnByMSwgYW5kIGdyb3dzIHVwd2FyZHMgYXMKLSAgICAgd2UgdXNlIEZQUiByZWdpc3RlcnMuICAqLwotICB2YWxwIGZwcl9iYXNlOwotICBpbnQgZnBhcmdfY291bnQ7Ci0jZW5kaWYKLQotICAvKiAnY29weV9zcGFjZScgZ3Jvd3MgZG93biBhcyB3ZSBwdXQgc3RydWN0dXJlcyBpbiBpdC4gIEl0IHNob3VsZAotICAgICBzdGF5IDE2LWJ5dGUgYWxpZ25lZC4gICovCi0gIHZhbHAgY29weV9zcGFjZTsKLQotICAvKiAnbmV4dF9hcmcnIGdyb3dzIHVwIGFzIHdlIHB1dCBwYXJhbWV0ZXJzIGluIGl0LiAgKi8KLSAgdmFscCBuZXh0X2FyZzsKLQotICBpbnQgaTsKLSAgZmZpX3R5cGUgKipwdHI7Ci0gIHVuaW9uIHsKLSAgICB2b2lkICoqdjsKLSAgICBjaGFyICoqYzsKLSAgICBzaWduZWQgY2hhciAqKnNjOwotICAgIHVuc2lnbmVkIGNoYXIgKip1YzsKLSAgICBzaWduZWQgc2hvcnQgKipzczsKLSAgICB1bnNpZ25lZCBzaG9ydCAqKnVzOwotICAgIHVuc2lnbmVkIGludCAqKnVpOwotICAgIGxvbmcgbG9uZyAqKmxsOwotICAgIGZsb2F0ICoqZjsKLSAgICBkb3VibGUgKipkOwotICB9IHBfYXJndjsKLSAgc2l6ZV90IHN0cnVjdF9jb3B5X3NpemU7Ci0gIHVuc2lnbmVkIGdwcnZhbHVlOwotI2lmbmRlZiBfX05PX0ZQUlNfXwotICBkb3VibGUgZG91YmxlX3RtcDsKLSNlbmRpZgotCi0gIHN0YWNrdG9wLmMgPSAoY2hhciAqKSBzdGFjayArIGJ5dGVzOwotICBncHJfYmFzZS51ID0gc3RhY2t0b3AudSAtIEFTTV9ORUVEU19SRUdJU1RFUlMgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlM7Ci0gIGludGFyZ19jb3VudCA9IDA7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0gIGZwcl9iYXNlLmQgPSBncHJfYmFzZS5kIC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTOwotICBmcGFyZ19jb3VudCA9IDA7Ci0gIGNvcHlfc3BhY2UuYyA9ICgoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUykgPyBmcHJfYmFzZS5jIDogZ3ByX2Jhc2UuYyk7Ci0jZWxzZQotICBjb3B5X3NwYWNlLmMgPSBncHJfYmFzZS5jOwotI2VuZGlmCi0gIG5leHRfYXJnLnUgPSBzdGFjayArIDI7Ci0KLSAgLyogQ2hlY2sgdGhhdCBldmVyeXRoaW5nIHN0YXJ0cyBhbGlnbmVkIHByb3Blcmx5LiAgKi8KLSAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBzdGFjayAmIDB4RikgPT0gMCk7Ci0gIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgY29weV9zcGFjZS5jICYgMHhGKSA9PSAwKTsKLSAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSBzdGFja3RvcC5jICYgMHhGKSA9PSAwKTsKLSAgRkZJX0FTU0VSVCAoKGJ5dGVzICYgMHhGKSA9PSAwKTsKLSAgRkZJX0FTU0VSVCAoY29weV9zcGFjZS5jID49IG5leHRfYXJnLmMpOwotCi0gIC8qIERlYWwgd2l0aCByZXR1cm4gdmFsdWVzIHRoYXQgYXJlIGFjdHVhbGx5IHBhc3MtYnktcmVmZXJlbmNlLiAgKi8KLSAgaWYgKGZsYWdzICYgRkxBR19SRVRWQUxfUkVGRVJFTkNFKQotICAgIHsKLSAgICAgICpncHJfYmFzZS51KysgPSAodW5zaWduZWQgbG9uZykgKGNoYXIgKikgZWNpZi0+cnZhbHVlOwotICAgICAgaW50YXJnX2NvdW50Kys7Ci0gICAgfQotCi0gIC8qIE5vdyBmb3IgdGhlIGFyZ3VtZW50cy4gICovCi0gIHBfYXJndi52ID0gZWNpZi0+YXZhbHVlOwotICBmb3IgKHB0ciA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzLCBpID0gZWNpZi0+Y2lmLT5uYXJnczsKLSAgICAgICBpID4gMDsKLSAgICAgICBpLS0sIHB0cisrLCBwX2FyZ3YudisrKQotICAgIHsKLSAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGVudW0gPSAoKnB0ciktPnR5cGU7Ci0KLSAgICAgIC8qIFdlIG1heSBuZWVkIHRvIGhhbmRsZSBzb21lIHZhbHVlcyBkZXBlbmRpbmcgb24gQUJJICovCi0gICAgICBpZiAoZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX0xJTlVYX1NPRlRfRkxPQVQpIHsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfRkxPQVQpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDMyOwotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9ET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDY0OwotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQxMjg7Ci0gICAgICB9IGVsc2UgaWYgKGVjaWYtPmNpZi0+YWJpICE9IEZGSV9MSU5VWCkgewotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfU1RSVUNUOwotI2VuZGlmCi0gICAgICB9Ci0KLSAgICAgIC8qIE5vdyB0ZXN0IHRoZSB0cmFuc2xhdGVkIHZhbHVlICovCi0gICAgICBzd2l0Y2ggKHR5cGVudW0pIHsKLSNpZm5kZWYgX19OT19GUFJTX18KLQljYXNlIEZGSV9UWVBFX0ZMT0FUOgotCSAgLyogV2l0aCBGRklfTElOVVhfU09GVF9GTE9BVCBmbG9hdHMgYXJlIGhhbmRsZWQgbGlrZSBVSU5UMzIuICAqLwotCSAgZG91YmxlX3RtcCA9ICoqcF9hcmd2LmY7Ci0JICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQotCSAgICB7Ci0JICAgICAgKm5leHRfYXJnLmYgPSAoZmxvYXQpIGRvdWJsZV90bXA7Ci0JICAgICAgbmV4dF9hcmcudSArPSAxOwotCSAgICAgIGludGFyZ19jb3VudCsrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwotCSAgZnBhcmdfY291bnQrKzsKLQkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX0RPVUJMRToKLQkgIC8qIFdpdGggRkZJX0xJTlVYX1NPRlRfRkxPQVQgZG91YmxlcyBhcmUgaGFuZGxlZCBsaWtlIFVJTlQ2NC4gICovCi0JICBkb3VibGVfdG1wID0gKipwX2FyZ3YuZDsKLQotCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKLQkgICAgewotCSAgICAgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTCi0JCSAgJiYgaW50YXJnX2NvdW50ICUgMiAhPSAwKQotCQl7Ci0JCSAgaW50YXJnX2NvdW50Kys7Ci0JCSAgbmV4dF9hcmcudSsrOwotCQl9Ci0JICAgICAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOwotCSAgICAgIG5leHRfYXJnLnUgKz0gMjsKLQkgICAgfQotCSAgZWxzZQotCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKLQkgIGZwYXJnX2NvdW50Kys7Ci0JICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKLQkgIGJyZWFrOwotCi0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6Ci0JICAgICAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzBdOwotCi0JICAgICAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyAtIDEpCi0JCXsKLQkJICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUwotCQkgICAgICAmJiBpbnRhcmdfY291bnQgJSAyICE9IDApCi0JCSAgICB7Ci0JCSAgICAgIGludGFyZ19jb3VudCsrOwotCQkgICAgICBuZXh0X2FyZy51Kys7Ci0JCSAgICB9Ci0JCSAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOwotCQkgIG5leHRfYXJnLnUgKz0gMjsKLQkJICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMV07Ci0JCSAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOwotCQkgIG5leHRfYXJnLnUgKz0gMjsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwotCQkgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVsxXTsKLQkJICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKLQkJfQotCi0JICAgICAgZnBhcmdfY291bnQgKz0gMjsKLQkgICAgICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKLQkgIGJyZWFrOwotI2VuZGlmCi0jZW5kaWYgLyogaGF2ZSBGUFJzICovCi0KLQkvKgotCSAqIFRoZSBzb2Z0IGZsb2F0IEFCSSBmb3IgbG9uZyBkb3VibGVzIHdvcmtzIGxpa2UgdGhpcywgYSBsb25nIGRvdWJsZQotCSAqIGlzIHBhc3NlZCBpbiBmb3VyIGNvbnNlY3V0aXZlIEdQUnMgaWYgYXZhaWxhYmxlLiAgQSBtYXhpbXVtIG9mIDIKLQkgKiBsb25nIGRvdWJsZXMgY2FuIGJlIHBhc3NlZCBpbiBncHJzLiAgSWYgd2UgZG8gbm90IGhhdmUgNCBHUFJzCi0JICogbGVmdCwgdGhlIGxvbmcgZG91YmxlIGlzIHBhc3NlZCBvbiB0aGUgc3RhY2ssIDQtYnl0ZSBhbGlnbmVkLgotCSAqLwotCWNhc2UgRkZJX1RZUEVfVUlOVDEyODogewotCQl1bnNpZ25lZCBpbnQgaW50X3RtcCA9ICgqcF9hcmd2LnVpKVswXTsKLQkJdW5zaWduZWQgaW50IGlpOwotCQlpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAtIDMpIHsKLQkJCWlmIChpbnRhcmdfY291bnQgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCi0JCQkJaW50YXJnX2NvdW50ICs9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAtIGludGFyZ19jb3VudDsKLQkJCSoobmV4dF9hcmcudSsrKSA9IGludF90bXA7Ci0JCQlmb3IgKGlpID0gMTsgaWkgPCA0OyBpaSsrKSB7Ci0JCQkJaW50X3RtcCA9ICgqcF9hcmd2LnVpKVtpaV07Ci0JCQkJKihuZXh0X2FyZy51KyspID0gaW50X3RtcDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCSooZ3ByX2Jhc2UudSsrKSA9IGludF90bXA7Ci0JCQlmb3IgKGlpID0gMTsgaWkgPCA0OyBpaSsrKSB7Ci0JCQkJaW50X3RtcCA9ICgqcF9hcmd2LnVpKVtpaV07Ci0JCQkJKihncHJfYmFzZS51KyspID0gaW50X3RtcDsKLQkJCX0KLQkJfQotCQlpbnRhcmdfY291bnQgKz0gNDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBGRklfVFlQRV9VSU5UNjQ6Ci0JY2FzZSBGRklfVFlQRV9TSU5UNjQ6Ci0JICBpZiAoaW50YXJnX2NvdW50ID09IE5VTV9HUFJfQVJHX1JFR0lTVEVSUy0xKQotCSAgICBpbnRhcmdfY291bnQrKzsKLQkgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTKQotCSAgICB7Ci0JICAgICAgaWYgKGludGFyZ19jb3VudCAlIDIgIT0gMCkKLQkJewotCQkgIGludGFyZ19jb3VudCsrOwotCQkgIG5leHRfYXJnLnUrKzsKLQkJfQotCSAgICAgICpuZXh0X2FyZy5sbCA9ICoqcF9hcmd2LmxsOwotCSAgICAgIG5leHRfYXJnLnUgKz0gMjsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgLyogd2hvb3BzOiBhYmkgc3RhdGVzIG9ubHkgY2VydGFpbiByZWdpc3RlciBwYWlycwotCSAgICAgICAqIGNhbiBiZSB1c2VkIGZvciBwYXNzaW5nIGxvbmcgbG9uZyBpbnQKLQkgICAgICAgKiBzcGVjaWZpY2FsbHkgKHIzLHI0KSwgKHI1LHI2KSwgKHI3LHI4KSwKLQkgICAgICAgKiAocjkscjEwKSBhbmQgaWYgbmV4dCBhcmcgaXMgbG9uZyBsb25nIGJ1dAotCSAgICAgICAqIG5vdCBjb3JyZWN0IHN0YXJ0aW5nIHJlZ2lzdGVyIG9mIHBhaXIgdGhlbiBza2lwCi0JICAgICAgICogdW50aWwgdGhlIHByb3BlciBzdGFydGluZyByZWdpc3RlcgotCSAgICAgICAqLwotCSAgICAgIGlmIChpbnRhcmdfY291bnQgJSAyICE9IDApCi0JCXsKLQkJICBpbnRhcmdfY291bnQgKys7Ci0JCSAgZ3ByX2Jhc2UudSsrOwotCQl9Ci0JICAgICAgKmdwcl9iYXNlLmxsKysgPSAqKnBfYXJndi5sbDsKLQkgICAgfQotCSAgaW50YXJnX2NvdW50ICs9IDI7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCSAgc3RydWN0X2NvcHlfc2l6ZSA9ICgoKnB0ciktPnNpemUgKyAxNSkgJiB+MHhGOwotCSAgY29weV9zcGFjZS5jIC09IHN0cnVjdF9jb3B5X3NpemU7Ci0JICBtZW1jcHkgKGNvcHlfc3BhY2UuYywgKnBfYXJndi5jLCAoKnB0ciktPnNpemUpOwotCi0JICBncHJ2YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSBjb3B5X3NwYWNlLmM7Ci0KLQkgIEZGSV9BU1NFUlQgKGNvcHlfc3BhY2UuYyA+IG5leHRfYXJnLmMpOwotCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0FSR19ORUVEU19DT1BZKTsKLQkgIGdvdG8gcHV0Z3ByOwotCi0JY2FzZSBGRklfVFlQRV9VSU5UODoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWM7Ci0JICBnb3RvIHB1dGdwcjsKLQljYXNlIEZGSV9UWVBFX1NJTlQ4OgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zYzsKLQkgIGdvdG8gcHV0Z3ByOwotCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51czsKLQkgIGdvdG8gcHV0Z3ByOwotCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zczsKLQkgIGdvdG8gcHV0Z3ByOwotCi0JY2FzZSBGRklfVFlQRV9JTlQ6Ci0JY2FzZSBGRklfVFlQRV9VSU5UMzI6Ci0JY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0JY2FzZSBGRklfVFlQRV9QT0lOVEVSOgotCi0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVpOwotCi0JcHV0Z3ByOgotCSAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCi0JICAgICpuZXh0X2FyZy51KysgPSBncHJ2YWx1ZTsKLQkgIGVsc2UKLQkgICAgKmdwcl9iYXNlLnUrKyA9IGdwcnZhbHVlOwotCSAgaW50YXJnX2NvdW50Kys7Ci0JICBicmVhazsKLQl9Ci0gICAgfQotCi0gIC8qIENoZWNrIHRoYXQgd2UgZGlkbid0IG92ZXJydW4gdGhlIHN0YWNrLi4uICAqLwotICBGRklfQVNTRVJUIChjb3B5X3NwYWNlLmMgPj0gbmV4dF9hcmcuYyk7Ci0gIEZGSV9BU1NFUlQgKGdwcl9iYXNlLnUgPD0gc3RhY2t0b3AudSAtIEFTTV9ORUVEU19SRUdJU1RFUlMpOwotICAvKiBUaGUgYXNzZXJ0IGJlbG93IGlzIHRlc3RpbmcgdGhhdCB0aGUgbnVtYmVyIG9mIGludGVnZXIgYXJndW1lbnRzIGFncmVlcwotICAgICB3aXRoIHRoZSBudW1iZXIgZm91bmQgaW4gZmZpX3ByZXBfY2lmX21hY2hkZXAoKS4gIEhvd2V2ZXIsIGludGFyZ19jb3VudAotICAgICBpcyBpbmNyZW1lbmV0ZWQgd2hlbmV2ZXIgd2UgcGxhY2UgYW4gRlAgYXJnIG9uIHRoZSBzdGFjaywgc28gYWNjb3VudCBmb3IKLSAgICAgdGhhdCBiZWZvcmUgb3VyIGFzc2VydCB0ZXN0LiAgKi8KLSNpZm5kZWYgX19OT19GUFJTX18KLSAgaWYgKGZwYXJnX2NvdW50ID4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQotICAgIGludGFyZ19jb3VudCAtPSBmcGFyZ19jb3VudCAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzsKLSAgRkZJX0FTU0VSVCAoZnByX2Jhc2UudQotCSAgICAgIDw9IHN0YWNrdG9wLnUgLSBBU01fTkVFRFNfUkVHSVNURVJTIC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTKTsKLSNlbmRpZgotICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfNF9HUFJfQVJHVU1FTlRTIHx8IGludGFyZ19jb3VudCA8PSA0KTsKLX0KLQotLyogQWJvdXQgdGhlIExJTlVYNjQgQUJJLiAgKi8KLWVudW0gewotICBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCA9IDgsCi0gIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ID0gMTMKLX07Ci1lbnVtIHsgQVNNX05FRURTX1JFR0lTVEVSUzY0ID0gNCB9OwotCi0vKiBmZmlfcHJlcF9hcmdzNjQgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKLSAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLgotCi0gICBUaGUgc3RhY2sgbGF5b3V0IHdlIHdhbnQgbG9va3MgbGlrZSB0aGlzOgotCi0gICB8ICAgUmV0IGFkZHIgZnJvbSBmZmlfY2FsbF9MSU5VWDY0CThieXRlcwl8CWhpZ2hlciBhZGRyZXNzZXMKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSAgIHwgICBDUiBzYXZlIGFyZWEJCQk4Ynl0ZXMJfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotICAgfCAgIFByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyCTgJfAlzdGFjayBwb2ludGVyIGhlcmUKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw8KyA8PDwJb24gZW50cnkgdG8KLSAgIHwgICBTYXZlZCByMjgtcjMxCQkJNCo4CXwgfAlmZmlfY2FsbF9MSU5VWDY0Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKLSAgIHwgICBHUFIgcmVnaXN0ZXJzIHIzLXIxMAkJOCo4CXwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Ci0gICB8ICAgRlBSIHJlZ2lzdGVycyBmMS1mMTMgKG9wdGlvbmFsKQkxMyo4CXwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Ci0gICB8ICAgUGFyYW1ldGVyIHNhdmUgYXJlYQkJICAgICAgICB8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAotICAgfCAgIFRPQyBzYXZlIGFyZWEJCQk4CXwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CXN0YWNrCXwKLSAgIHwgICBMaW5rZXIgZG91Ymxld29yZAkJOAl8IHwJZ3Jvd3MJfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CWRvd24JVgotICAgfCAgIENvbXBpbGVyIGRvdWJsZXdvcmQJCTgJfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJbG93ZXIgYWRkcmVzc2VzCi0gICB8ICAgU3BhY2UgZm9yIGNhbGxlZSdzIExSCQk4CXwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Ci0gICB8ICAgQ1Igc2F2ZSBhcmVhCQkJOAl8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlzdGFjayBwb2ludGVyIGhlcmUKLSAgIHwgICBDdXJyZW50IGJhY2tjaGFpbiBwb2ludGVyCTgJfC0vCWR1cmluZwotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgIDw8PAlmZmlfY2FsbF9MSU5VWDY0Ci0KLSovCi0KKyNpZiBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQKKy8qIEFkanVzdCBmZmlfdHlwZV9sb25nZG91YmxlLiAgKi8KIHZvaWQgRkZJX0hJRERFTgotZmZpX3ByZXBfYXJnczY0IChleHRlbmRlZF9jaWYgKmVjaWYsIHVuc2lnbmVkIGxvbmcgKmNvbnN0IHN0YWNrKQorZmZpX3ByZXBfdHlwZXMgKGZmaV9hYmkgYWJpKQogewotICBjb25zdCB1bnNpZ25lZCBsb25nIGJ5dGVzID0gZWNpZi0+Y2lmLT5ieXRlczsKLSAgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFncyA9IGVjaWYtPmNpZi0+ZmxhZ3M7Ci0KLSAgdHlwZWRlZiB1bmlvbiB7Ci0gICAgY2hhciAqYzsKLSAgICB1bnNpZ25lZCBsb25nICp1bDsKLSAgICBmbG9hdCAqZjsKLSAgICBkb3VibGUgKmQ7Ci0gIH0gdmFscDsKLQotICAvKiAnc3RhY2t0b3AnIHBvaW50cyBhdCB0aGUgcHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIuICAqLwotICB2YWxwIHN0YWNrdG9wOwotCi0gIC8qICduZXh0X2FyZycgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZ3ByMywgYW5kIGdyb3dzIHVwd2FyZHMgYXMKLSAgICAgd2UgdXNlIEdQUiByZWdpc3RlcnMsIHRoZW4gY29udGludWVzIGF0IHJlc3QuICAqLwotICB2YWxwIGdwcl9iYXNlOwotICB2YWxwIGdwcl9lbmQ7Ci0gIHZhbHAgcmVzdDsKLSAgdmFscCBuZXh0X2FyZzsKLQotICAvKiAnZnByX2Jhc2UnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGZwcjMsIGFuZCBncm93cyB1cHdhcmRzIGFzCi0gICAgIHdlIHVzZSBGUFIgcmVnaXN0ZXJzLiAgKi8KLSAgdmFscCBmcHJfYmFzZTsKLSAgaW50IGZwYXJnX2NvdW50OwotCi0gIGludCBpLCB3b3JkczsKLSAgZmZpX3R5cGUgKipwdHI7Ci0gIGRvdWJsZSBkb3VibGVfdG1wOwotICB1bmlvbiB7Ci0gICAgdm9pZCAqKnY7Ci0gICAgY2hhciAqKmM7Ci0gICAgc2lnbmVkIGNoYXIgKipzYzsKLSAgICB1bnNpZ25lZCBjaGFyICoqdWM7Ci0gICAgc2lnbmVkIHNob3J0ICoqc3M7Ci0gICAgdW5zaWduZWQgc2hvcnQgKip1czsKLSAgICBzaWduZWQgaW50ICoqc2k7Ci0gICAgdW5zaWduZWQgaW50ICoqdWk7Ci0gICAgdW5zaWduZWQgbG9uZyAqKnVsOwotICAgIGZsb2F0ICoqZjsKLSAgICBkb3VibGUgKipkOwotICB9IHBfYXJndjsKLSAgdW5zaWduZWQgbG9uZyBncHJ2YWx1ZTsKLQotICBzdGFja3RvcC5jID0gKGNoYXIgKikgc3RhY2sgKyBieXRlczsKLSAgZ3ByX2Jhc2UudWwgPSBzdGFja3RvcC51bCAtIEFTTV9ORUVEU19SRUdJU1RFUlM2NCAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0OwotICBncHJfZW5kLnVsID0gZ3ByX2Jhc2UudWwgKyBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NDsKLSAgcmVzdC51bCA9IHN0YWNrICsgNiArIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0OwotICBmcHJfYmFzZS5kID0gZ3ByX2Jhc2UuZCAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0OwotICBmcGFyZ19jb3VudCA9IDA7Ci0gIG5leHRfYXJnLnVsID0gZ3ByX2Jhc2UudWw7Ci0KLSAgLyogQ2hlY2sgdGhhdCBldmVyeXRoaW5nIHN0YXJ0cyBhbGlnbmVkIHByb3Blcmx5LiAgKi8KLSAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBzdGFjayAmIDB4RikgPT0gMCk7Ci0gIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgc3RhY2t0b3AuYyAmIDB4RikgPT0gMCk7Ci0gIEZGSV9BU1NFUlQgKChieXRlcyAmIDB4RikgPT0gMCk7Ci0KLSAgLyogRGVhbCB3aXRoIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgYWN0dWFsbHkgcGFzcy1ieS1yZWZlcmVuY2UuICAqLwotICBpZiAoZmxhZ3MgJiBGTEFHX1JFVFZBTF9SRUZFUkVOQ0UpCi0gICAgKm5leHRfYXJnLnVsKysgPSAodW5zaWduZWQgbG9uZykgKGNoYXIgKikgZWNpZi0+cnZhbHVlOwotCi0gIC8qIE5vdyBmb3IgdGhlIGFyZ3VtZW50cy4gICovCi0gIHBfYXJndi52ID0gZWNpZi0+YXZhbHVlOwotICBmb3IgKHB0ciA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzLCBpID0gZWNpZi0+Y2lmLT5uYXJnczsKLSAgICAgICBpID4gMDsKLSAgICAgICBpLS0sIHB0cisrLCBwX2FyZ3YudisrKQotICAgIHsKLSAgICAgIHN3aXRjaCAoKCpwdHIpLT50eXBlKQotCXsKLQljYXNlIEZGSV9UWVBFX0ZMT0FUOgotCSAgZG91YmxlX3RtcCA9ICoqcF9hcmd2LmY7Ci0JICAqbmV4dF9hcmcuZiA9IChmbG9hdCkgZG91YmxlX3RtcDsKLQkgIGlmICgrK25leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCi0JICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKLQkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0KQotCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKLQkgIGZwYXJnX2NvdW50Kys7Ci0JICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0JICBkb3VibGVfdG1wID0gKipwX2FyZ3YuZDsKLQkgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKLQkgIGlmICgrK25leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCi0JICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKLQkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0KQotCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKLQkgIGZwYXJnX2NvdW50Kys7Ci0JICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKLQkgIGJyZWFrOwotCi0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6Ci0JICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMF07Ci0JICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7Ci0JICBpZiAoKytuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQotCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7Ci0JICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCkKLQkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7Ci0JICBmcGFyZ19jb3VudCsrOwotCSAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzFdOwotCSAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOwotCSAgaWYgKCsrbmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKLQkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOwotCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQpCi0JICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwotCSAgZnBhcmdfY291bnQrKzsKLQkgIEZGSV9BU1NFUlQgKF9fTERCTF9NQU5UX0RJR19fID09IDEwNik7Ci0JICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKLQkgIGJyZWFrOwotI2VuZGlmCi0KLQljYXNlIEZGSV9UWVBFX1NUUlVDVDoKLQkgIHdvcmRzID0gKCgqcHRyKS0+c2l6ZSArIDcpIC8gODsKLQkgIGlmIChuZXh0X2FyZy51bCA+PSBncHJfYmFzZS51bCAmJiBuZXh0X2FyZy51bCArIHdvcmRzID4gZ3ByX2VuZC51bCkKLQkgICAgewotCSAgICAgIHNpemVfdCBmaXJzdCA9IGdwcl9lbmQuYyAtIG5leHRfYXJnLmM7Ci0JICAgICAgbWVtY3B5IChuZXh0X2FyZy5jLCAqcF9hcmd2LmMsIGZpcnN0KTsKLQkgICAgICBtZW1jcHkgKHJlc3QuYywgKnBfYXJndi5jICsgZmlyc3QsICgqcHRyKS0+c2l6ZSAtIGZpcnN0KTsKLQkgICAgICBuZXh0X2FyZy5jID0gcmVzdC5jICsgd29yZHMgKiA4IC0gZmlyc3Q7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGNoYXIgKndoZXJlID0gbmV4dF9hcmcuYzsKLQotCSAgICAgIC8qIFN0cnVjdHVyZXMgd2l0aCBzaXplIGxlc3MgdGhhbiBlaWdodCBieXRlcyBhcmUgcGFzc2VkCi0JCSBsZWZ0LXBhZGRlZC4gICovCi0JICAgICAgaWYgKCgqcHRyKS0+c2l6ZSA8IDgpCi0JCXdoZXJlICs9IDggLSAoKnB0ciktPnNpemU7Ci0KLQkgICAgICBtZW1jcHkgKHdoZXJlLCAqcF9hcmd2LmMsICgqcHRyKS0+c2l6ZSk7Ci0JICAgICAgbmV4dF9hcmcudWwgKz0gd29yZHM7Ci0JICAgICAgaWYgKG5leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCi0JCW5leHRfYXJnLnVsID0gcmVzdC51bDsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51YzsKLQkgIGdvdG8gcHV0Z3ByOwotCWNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNjOwotCSAgZ290byBwdXRncHI7Ci0JY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVzOwotCSAgZ290byBwdXRncHI7Ci0JY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNzOwotCSAgZ290byBwdXRncHI7Ci0JY2FzZSBGRklfVFlQRV9VSU5UMzI6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVpOwotCSAgZ290byBwdXRncHI7Ci0JY2FzZSBGRklfVFlQRV9JTlQ6Ci0JY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNpOwotCSAgZ290byBwdXRncHI7Ci0KLQljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKLQljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKLQljYXNlIEZGSV9UWVBFX1BPSU5URVI6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVsOwotCXB1dGdwcjoKLQkgICpuZXh0X2FyZy51bCsrID0gZ3BydmFsdWU7Ci0JICBpZiAobmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKLQkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOwotCSAgYnJlYWs7Ci0JfQotICAgIH0KLQotICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfNF9HUFJfQVJHVU1FTlRTCi0JICAgICAgfHwgKG5leHRfYXJnLnVsID49IGdwcl9iYXNlLnVsCi0JCSAgJiYgbmV4dF9hcmcudWwgPD0gZ3ByX2Jhc2UudWwgKyA0KSk7CisjIGlmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisjICBpZmRlZiBQT1dFUlBDNjQKKyAgZmZpX3ByZXBfdHlwZXNfbGludXg2NCAoYWJpKTsKKyMgIGVsc2UKKyAgZmZpX3ByZXBfdHlwZXNfc3lzdiAoYWJpKTsKKyMgIGVuZGlmCisjIGVuZGlmCiB9Ci0KLQorI2VuZGlmCiAKIC8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcgKi8KLWZmaV9zdGF0dXMKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTgogZmZpX3ByZXBfY2lmX21hY2hkZXAgKGZmaV9jaWYgKmNpZikKIHsKLSAgLyogQWxsIHRoaXMgaXMgZm9yIHRoZSBTWVNWIGFuZCBMSU5VWDY0IEFCSS4gICovCi0gIGludCBpOwotICBmZmlfdHlwZSAqKnB0cjsKLSAgdW5zaWduZWQgYnl0ZXM7Ci0gIGludCBmcGFyZ19jb3VudCA9IDAsIGludGFyZ19jb3VudCA9IDA7Ci0gIHVuc2lnbmVkIGZsYWdzID0gMDsKLSAgdW5zaWduZWQgc3RydWN0X2NvcHlfc2l6ZSA9IDA7Ci0gIHVuc2lnbmVkIHR5cGUgPSBjaWYtPnJ0eXBlLT50eXBlOwotICB1bnNpZ25lZCBzaXplID0gY2lmLT5ydHlwZS0+c2l6ZTsKLQotICBpZiAoY2lmLT5hYmkgIT0gRkZJX0xJTlVYNjQpCi0gICAgewotICAgICAgLyogQWxsIHRoZSBtYWNoaW5lLWluZGVwZW5kZW50IGNhbGN1bGF0aW9uIG9mIGNpZi0+Ynl0ZXMgd2lsbCBiZSB3cm9uZy4KLQkgUmVkbyB0aGUgY2FsY3VsYXRpb24gZm9yIFNZU1YuICAqLwotCi0gICAgICAvKiBTcGFjZSBmb3IgdGhlIGZyYW1lIHBvaW50ZXIsIGNhbGxlZSdzIExSLCBhbmQgdGhlIGFzbSdzIHRlbXAgcmVncy4gICovCi0gICAgICBieXRlcyA9ICgyICsgQVNNX05FRURTX1JFR0lTVEVSUykgKiBzaXplb2YgKGludCk7Ci0KLSAgICAgIC8qIFNwYWNlIGZvciB0aGUgR1BSIHJlZ2lzdGVycy4gICovCi0gICAgICBieXRlcyArPSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgKiBzaXplb2YgKGludCk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgLyogNjQtYml0IEFCSS4gICovCi0KLSAgICAgIC8qIFNwYWNlIGZvciBiYWNrY2hhaW4sIENSLCBMUiwgY2MvbGQgZG91Ymxld29yZCwgVE9DIGFuZCB0aGUgYXNtJ3MgdGVtcAotCSByZWdzLiAgKi8KLSAgICAgIGJ5dGVzID0gKDYgKyBBU01fTkVFRFNfUkVHSVNURVJTNjQpICogc2l6ZW9mIChsb25nKTsKLQotICAgICAgLyogU3BhY2UgZm9yIHRoZSBtYW5kYXRvcnkgcGFybSBzYXZlIGFyZWEgYW5kIGdlbmVyYWwgcmVnaXN0ZXJzLiAgKi8KLSAgICAgIGJ5dGVzICs9IDIgKiBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCAqIHNpemVvZiAobG9uZyk7Ci0gICAgfQotCi0gIC8qIFJldHVybiB2YWx1ZSBoYW5kbGluZy4gIFRoZSBydWxlcyBmb3IgU1lTViBhcmUgYXMgZm9sbG93czoKLSAgICAgLSAzMi1iaXQgKG9yIGxlc3MpIGludGVnZXIgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBncHIzOwotICAgICAtIFN0cnVjdHVyZXMgb2Ygc2l6ZSA8PSA0IGJ5dGVzIGFsc28gcmV0dXJuZWQgaW4gZ3ByMzsKLSAgICAgLSA2NC1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIHN0cnVjdHVyZXMgYmV0d2VlbiA1IGFuZCA4IGJ5dGVzIGFyZSByZXR1cm5lZAotICAgICBpbiBncHIzIGFuZCBncHI0OwotICAgICAtIFNpbmdsZS9kb3VibGUgRlAgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBmcHIxOwotICAgICAtIExhcmdlciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgc3BhY2UgYW5kIGEgcG9pbnRlciBpcyBwYXNzZWQgYXMKLSAgICAgdGhlIGZpcnN0IGFyZ3VtZW50LgotICAgICAtIGxvbmcgZG91YmxlcyAoaWYgbm90IGVxdWl2YWxlbnQgdG8gZG91YmxlKSBhcmUgcmV0dXJuZWQgaW4KLSAgICAgZnByMSxmcHIyIGZvciBMaW51eCBhbmQgYXMgZm9yIGxhcmdlIHN0cnVjdHMgZm9yIFN5c1YuCi0gICAgIEZvciBMSU5VWDY0OgotICAgICAtIGludGVnZXIgdmFsdWVzIGluIGdwcjM7Ci0gICAgIC0gU3RydWN0dXJlcy9VbmlvbnMgYnkgcmVmZXJlbmNlOwotICAgICAtIFNpbmdsZS9kb3VibGUgRlAgdmFsdWVzIGluIGZwcjEsIGxvbmcgZG91YmxlIGluIGZwcjEsZnByMi4KLSAgICAgLSBzb2Z0LWZsb2F0IGZsb2F0L2RvdWJsZXMgYXJlIHRyZWF0ZWQgYXMgVUlOVDMyL1VJTlQ2NCByZXNwZWN0aXZsZXkuCi0gICAgIC0gc29mdC1mbG9hdCBsb25nIGRvdWJsZXMgYXJlIHJldHVybmVkIGluIGdwcjMtZ3ByNi4gICovCi0gIC8qIEZpcnN0IHRyYW5zbGF0ZSBmb3Igc29mdGZsb2F0L25vbmxpbnV4ICovCi0gIGlmIChjaWYtPmFiaSA9PSBGRklfTElOVVhfU09GVF9GTE9BVCkgewotCWlmICh0eXBlID09IEZGSV9UWVBFX0ZMT0FUKQotCQl0eXBlID0gRkZJX1RZUEVfVUlOVDMyOwotCWlmICh0eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKLQkJdHlwZSA9IEZGSV9UWVBFX1VJTlQ2NDsKLQlpZiAodHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQl0eXBlID0gRkZJX1RZUEVfVUlOVDEyODsKLSAgfSBlbHNlIGlmIChjaWYtPmFiaSAhPSBGRklfTElOVVggJiYgY2lmLT5hYmkgIT0gRkZJX0xJTlVYNjQpIHsKLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCWlmICh0eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCXR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisjaWZkZWYgUE9XRVJQQzY0CisgIHJldHVybiBmZmlfcHJlcF9jaWZfbGludXg2NCAoY2lmKTsKKyNlbHNlCisgIHJldHVybiBmZmlfcHJlcF9jaWZfc3lzdiAoY2lmKTsKICNlbmRpZgotICB9Ci0KLSAgc3dpdGNoICh0eXBlKQotICAgIHsKLSNpZm5kZWYgX19OT19GUFJTX18KLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKLSAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU18xMjhCSVRTOwotICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgotICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzY0QklUUzsKLSAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKLSAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19GUDsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICBjYXNlIEZGSV9UWVBFX1VJTlQxMjg6Ci0gICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfMTI4QklUUzsKLSAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6Ci0gICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6Ci0gICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfNjRCSVRTOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKLSAgICAgIGlmIChjaWYtPmFiaSA9PSBGRklfU1lTVikKLQl7Ci0JICAvKiBUaGUgZmluYWwgU1lTViBBQkkgc2F5cyB0aGF0IHN0cnVjdHVyZXMgc21hbGxlciBvciBlcXVhbCA4IGJ5dGVzCi0JICAgICBhcmUgcmV0dXJuZWQgaW4gcjMvcjQuIFRoZSBGRklfR0NDX1NZU1YgQUJJIGluc3RlYWQgcmV0dXJucyB0aGVtCi0JICAgICBpbiBtZW1vcnkuICAqLwotCi0JICAvKiBUcmVhdCBzdHJ1Y3RzIHdpdGggc2l6ZSA8PSA4IGJ5dGVzLiAgKi8KLQkgIGlmIChzaXplIDw9IDgpCi0JICAgIHsKLQkgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfU01TVDsKLQkgICAgICAvKiBUaGVzZSBzdHJ1Y3RzIGFyZSByZXR1cm5lZCBpbiByMy4gV2UgcGFjayB0aGUgdHlwZSBhbmQgdGhlCi0JCSBwcmVjYWxjdWxhdGVkIHNoaWZ0IHZhbHVlIChuZWVkZWQgaW4gdGhlIHN5c3YuUykgaW50byBmbGFncy4KLQkJIFRoZSBzYW1lIGFwcGxpZXMgZm9yIHRoZSBzdHJ1Y3RzIHJldHVybmVkIGluIHIzL3I0LiAgKi8KLQkgICAgICBpZiAoc2l6ZSA8PSA0KQotCQl7Ci0JCSAgZmxhZ3MgfD0gRkxBR19TWVNWX1NNU1RfUjM7Ci0JCSAgZmxhZ3MgfD0gOCAqICg0IC0gc2l6ZSkgPDwgODsKLQkJICBicmVhazsKLQkJfQotCSAgICAgIC8qIFRoZXNlIHN0cnVjdHMgYXJlIHJldHVybmVkIGluIHIzIGFuZCByNC4gU2VlIGFib3ZlLiAgICovCi0JICAgICAgaWYgIChzaXplIDw9IDgpCi0JCXsKLQkJICBmbGFncyB8PSBGTEFHX1NZU1ZfU01TVF9SMyB8IEZMQUdfU1lTVl9TTVNUX1I0OwotCQkgIGZsYWdzIHw9IDggKiAoOCAtIHNpemUpIDw8IDg7Ci0JCSAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCX0KLQotICAgICAgaW50YXJnX2NvdW50Kys7Ci0gICAgICBmbGFncyB8PSBGTEFHX1JFVFZBTF9SRUZFUkVOQ0U7Ci0gICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKLSAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19OT1RISU5HOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgLyogUmV0dXJucyAzMi1iaXQgaW50ZWdlciwgb3Igc2ltaWxhci4gIE5vdGhpbmcgdG8gZG8gaGVyZS4gICovCi0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgaWYgKGNpZi0+YWJpICE9IEZGSV9MSU5VWDY0KQotICAgIC8qIFRoZSBmaXJzdCBOVU1fR1BSX0FSR19SRUdJU1RFUlMgd29yZHMgb2YgaW50ZWdlciBhcmd1bWVudHMsIGFuZCB0aGUKLSAgICAgICBmaXJzdCBOVU1fRlBSX0FSR19SRUdJU1RFUlMgZnAgYXJndW1lbnRzLCBnbyBpbiByZWdpc3RlcnM7IHRoZSByZXN0Ci0gICAgICAgZ29lcyBvbiB0aGUgc3RhY2suICBTdHJ1Y3R1cmVzIGFuZCBsb25nIGRvdWJsZXMgKGlmIG5vdCBlcXVpdmFsZW50Ci0gICAgICAgdG8gZG91YmxlKSBhcmUgcGFzc2VkIGFzIGEgcG9pbnRlciB0byBhIGNvcHkgb2YgdGhlIHN0cnVjdHVyZS4KLSAgICAgICBTdHVmZiBvbiB0aGUgc3RhY2sgbmVlZHMgdG8ga2VlcCBwcm9wZXIgYWxpZ25tZW50LiAgKi8KLSAgICBmb3IgKHB0ciA9IGNpZi0+YXJnX3R5cGVzLCBpID0gY2lmLT5uYXJnczsgaSA+IDA7IGktLSwgcHRyKyspCi0gICAgICB7Ci0JdW5zaWduZWQgc2hvcnQgdHlwZW51bSA9ICgqcHRyKS0+dHlwZTsKLQotCS8qIFdlIG1heSBuZWVkIHRvIGhhbmRsZSBzb21lIHZhbHVlcyBkZXBlbmRpbmcgb24gQUJJICovCi0JaWYgKGNpZi0+YWJpID09IEZGSV9MSU5VWF9TT0ZUX0ZMT0FUKSB7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0ZMT0FUKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQzMjsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQ2NDsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UMTI4OwotCX0gZWxzZSBpZiAoY2lmLT5hYmkgIT0gRkZJX0xJTlVYICYmIGNpZi0+YWJpICE9IEZGSV9MSU5VWDY0KSB7Ci0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9TVFJVQ1Q7Ci0jZW5kaWYKLQl9Ci0KLQlzd2l0Y2ggKHR5cGVudW0pIHsKLSNpZm5kZWYgX19OT19GUFJTX18KLQkgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0JICAgIGZwYXJnX2NvdW50Kys7Ci0JICAgIC8qIGZsb2F0aW5nIHNpbmdsZXMgYXJlIG5vdCA4LWFsaWduZWQgb24gc3RhY2sgKi8KLQkgICAgYnJlYWs7Ci0KLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCSAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgotCSAgICBmcGFyZ19jb3VudCsrOwotCSAgICAvKiBGYWxsIHRocnUgKi8KLSNlbmRpZgotCSAgY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0JICAgIGZwYXJnX2NvdW50Kys7Ci0JICAgIC8qIElmIHRoaXMgRlAgYXJnIGlzIGdvaW5nIG9uIHRoZSBzdGFjaywgaXQgbXVzdCBiZQotCSAgICAgICA4LWJ5dGUtYWxpZ25lZC4gICovCi0JICAgIGlmIChmcGFyZ19jb3VudCA+IE5VTV9GUFJfQVJHX1JFR0lTVEVSUwotCQkmJiBpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTCi0JCSYmIGludGFyZ19jb3VudCAlIDIgIT0gMCkKLQkgICAgICBpbnRhcmdfY291bnQrKzsKLQkgICAgYnJlYWs7Ci0jZW5kaWYKLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDEyODoKLQkJLyoKLQkJICogQSBsb25nIGRvdWJsZSBpbiBGRklfTElOVVhfU09GVF9GTE9BVCBjYW4gdXNlIG9ubHkgYSBzZXQKLQkJICogb2YgZm91ciBjb25zZWN1dGl2ZSBncHJzLiBJZiB3ZSBkbyBub3QgaGF2ZSBlbm91Z2gsIHdlCi0JCSAqIGhhdmUgdG8gYWRqdXN0IHRoZSBpbnRhcmdfY291bnQgdmFsdWUuCi0JCSAqLwotCQlpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAtIDMKLQkJCQkmJiBpbnRhcmdfY291bnQgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCi0JCQlpbnRhcmdfY291bnQgPSBOVU1fR1BSX0FSR19SRUdJU1RFUlM7Ci0JCWludGFyZ19jb3VudCArPSA0OwotCQlicmVhazsKLQotCSAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6Ci0JICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKLQkgICAgLyogJ2xvbmcgbG9uZycgYXJndW1lbnRzIGFyZSBwYXNzZWQgYXMgdHdvIHdvcmRzLCBidXQKLQkgICAgICAgZWl0aGVyIGJvdGggd29yZHMgbXVzdCBmaXQgaW4gcmVnaXN0ZXJzIG9yIGJvdGggZ28KLQkgICAgICAgb24gdGhlIHN0YWNrLiAgSWYgdGhleSBnbyBvbiB0aGUgc3RhY2ssIHRoZXkgbXVzdAotCSAgICAgICBiZSA4LWJ5dGUtYWxpZ25lZC4KLQotCSAgICAgICBBbHNvLCBvbmx5IGNlcnRhaW4gcmVnaXN0ZXIgcGFpcnMgY2FuIGJlIHVzZWQgZm9yCi0JICAgICAgIHBhc3NpbmcgbG9uZyBsb25nIGludCAtLSBzcGVjaWZpY2FsbHkgKHIzLHI0KSwgKHI1LHI2KSwKLQkgICAgICAgKHI3LHI4KSwgKHI5LHIxMCkuCi0JICAgICovCi0JICAgIGlmIChpbnRhcmdfY291bnQgPT0gTlVNX0dQUl9BUkdfUkVHSVNURVJTLTEKLQkJfHwgaW50YXJnX2NvdW50ICUgMiAhPSAwKQotCSAgICAgIGludGFyZ19jb3VudCsrOwotCSAgICBpbnRhcmdfY291bnQgKz0gMjsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCSAgICAvKiBXZSBtdXN0IGFsbG9jYXRlIHNwYWNlIGZvciBhIGNvcHkgb2YgdGhlc2UgdG8gZW5mb3JjZQotCSAgICAgICBwYXNzLWJ5LXZhbHVlLiAgUGFkIHRoZSBzcGFjZSB1cCB0byBhIG11bHRpcGxlIG9mIDE2Ci0JICAgICAgIGJ5dGVzICh0aGUgbWF4aW11bSBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIGFueXRoaW5nIHVuZGVyCi0JICAgICAgIHRoZSBTWVNWIEFCSSkuICAqLwotCSAgICBzdHJ1Y3RfY29weV9zaXplICs9ICgoKnB0ciktPnNpemUgKyAxNSkgJiB+MHhGOwotCSAgICAvKiBGYWxsIHRocm91Z2ggKGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgcG9pbnRlcikuICAqLwotCi0JICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6Ci0JICBjYXNlIEZGSV9UWVBFX0lOVDoKLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgotCSAgY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0JICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCSAgY2FzZSBGRklfVFlQRV9VSU5UODoKLQkgIGNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JICAgIC8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBwYXNzZWQgYXMgYSA0LWJ5dGUgd29yZCBpbiBhIEdQUiwgZWl0aGVyCi0JICAgICAgIHRoZSBvYmplY3QgaXRzZWxmIG9yIGEgcG9pbnRlciB0byBpdC4gICovCi0JICAgIGludGFyZ19jb3VudCsrOwotCSAgICBicmVhazsKLQkgIGRlZmF1bHQ6Ci0JCUZGSV9BU1NFUlQgKDApOwotCSAgfQotICAgICAgfQotICBlbHNlCi0gICAgZm9yIChwdHIgPSBjaWYtPmFyZ190eXBlcywgaSA9IGNpZi0+bmFyZ3M7IGkgPiAwOyBpLS0sIHB0cisrKQotICAgICAgewotCXN3aXRjaCAoKCpwdHIpLT50eXBlKQotCSAgewotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6Ci0JICAgIGlmIChjaWYtPmFiaSA9PSBGRklfTElOVVhfU09GVF9GTE9BVCkKLQkgICAgICBpbnRhcmdfY291bnQgKz0gNDsKLQkgICAgZWxzZQotCSAgICAgIHsKLQkJZnBhcmdfY291bnQgKz0gMjsKLQkJaW50YXJnX2NvdW50ICs9IDI7Ci0JICAgICAgfQotCSAgICBicmVhazsKLSNlbmRpZgotCSAgY2FzZSBGRklfVFlQRV9GTE9BVDoKLQkgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgotCSAgICBmcGFyZ19jb3VudCsrOwotCSAgICBpbnRhcmdfY291bnQrKzsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCSAgICBpbnRhcmdfY291bnQgKz0gKCgqcHRyKS0+c2l6ZSArIDcpIC8gODsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgotCSAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6Ci0JICBjYXNlIEZGSV9UWVBFX0lOVDoKLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgotCSAgY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0JICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCSAgY2FzZSBGRklfVFlQRV9VSU5UODoKLQkgIGNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JICAgIC8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBwYXNzZWQgYXMgYSA4LWJ5dGUgd29yZCBpbiBhIEdQUiwgZWl0aGVyCi0JICAgICAgIHRoZSBvYmplY3QgaXRzZWxmIG9yIGEgcG9pbnRlciB0byBpdC4gICovCi0JICAgIGludGFyZ19jb3VudCsrOwotCSAgICBicmVhazsKLQkgIGRlZmF1bHQ6Ci0JCUZGSV9BU1NFUlQgKDApOwotCSAgfQotICAgICAgfQotCi0jaWZuZGVmIF9fTk9fRlBSU19fCi0gIGlmIChmcGFyZ19jb3VudCAhPSAwKQotICAgIGZsYWdzIHw9IEZMQUdfRlBfQVJHVU1FTlRTOwotI2VuZGlmCi0gIGlmIChpbnRhcmdfY291bnQgPiA0KQotICAgIGZsYWdzIHw9IEZMQUdfNF9HUFJfQVJHVU1FTlRTOwotICBpZiAoc3RydWN0X2NvcHlfc2l6ZSAhPSAwKQotICAgIGZsYWdzIHw9IEZMQUdfQVJHX05FRURTX0NPUFk7Ci0KLSAgaWYgKGNpZi0+YWJpICE9IEZGSV9MSU5VWDY0KQotICAgIHsKLSNpZm5kZWYgX19OT19GUFJTX18KLSAgICAgIC8qIFNwYWNlIGZvciB0aGUgRlBSIHJlZ2lzdGVycywgaWYgbmVlZGVkLiAgKi8KLSAgICAgIGlmIChmcGFyZ19jb3VudCAhPSAwKQotCWJ5dGVzICs9IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyAqIHNpemVvZiAoZG91YmxlKTsKLSNlbmRpZgotCi0gICAgICAvKiBTdGFjayBzcGFjZS4gICovCi0gICAgICBpZiAoaW50YXJnX2NvdW50ID4gTlVNX0dQUl9BUkdfUkVHSVNURVJTKQotCWJ5dGVzICs9IChpbnRhcmdfY291bnQgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlMpICogc2l6ZW9mIChpbnQpOwotI2lmbmRlZiBfX05PX0ZQUlNfXwotICAgICAgaWYgKGZwYXJnX2NvdW50ID4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQotCWJ5dGVzICs9IChmcGFyZ19jb3VudCAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUykgKiBzaXplb2YgKGRvdWJsZSk7Ci0jZW5kaWYKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0gICAgICAvKiBTcGFjZSBmb3IgdGhlIEZQUiByZWdpc3RlcnMsIGlmIG5lZWRlZC4gICovCi0gICAgICBpZiAoZnBhcmdfY291bnQgIT0gMCkKLQlieXRlcyArPSBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCAqIHNpemVvZiAoZG91YmxlKTsKLSNlbmRpZgotCi0gICAgICAvKiBTdGFjayBzcGFjZS4gICovCi0gICAgICBpZiAoaW50YXJnX2NvdW50ID4gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQpCi0JYnl0ZXMgKz0gKGludGFyZ19jb3VudCAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0KSAqIHNpemVvZiAobG9uZyk7Ci0gICAgfQotCi0gIC8qIFRoZSBzdGFjayBzcGFjZSBhbGxvY2F0ZWQgbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNiBieXRlcy4gICovCi0gIGJ5dGVzID0gKGJ5dGVzICsgMTUpICYgfjB4RjsKLQotICAvKiBBZGQgaW4gdGhlIHNwYWNlIGZvciB0aGUgY29waWVkIHN0cnVjdHVyZXMuICAqLwotICBieXRlcyArPSBzdHJ1Y3RfY29weV9zaXplOwotCi0gIGNpZi0+ZmxhZ3MgPSBmbGFnczsKLSAgY2lmLT5ieXRlcyA9IGJ5dGVzOwotCi0gIHJldHVybiBGRklfT0s7CiB9CiAKLWV4dGVybiB2b2lkIGZmaV9jYWxsX1NZU1YoZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwKLQkJCSAgdm9pZCAoKmZuKSh2b2lkKSk7Ci1leHRlcm4gdm9pZCBGRklfSElEREVOIGZmaV9jYWxsX0xJTlVYNjQoZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkIGxvbmcsCi0JCQkJCXVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwKLQkJCQkJdm9pZCAoKmZuKSh2b2lkKSk7CitmZmlfc3RhdHVzIEZGSV9ISURERU4KK2ZmaV9wcmVwX2NpZl9tYWNoZGVwX3ZhciAoZmZpX2NpZiAqY2lmLAorCQkJICB1bnNpZ25lZCBpbnQgbmZpeGVkYXJncyBNQVlCRV9VTlVTRUQsCisJCQkgIHVuc2lnbmVkIGludCBudG90YWxhcmdzIE1BWUJFX1VOVVNFRCkKK3sKKyNpZmRlZiBQT1dFUlBDNjQKKyAgcmV0dXJuIGZmaV9wcmVwX2NpZl9saW51eDY0X3ZhciAoY2lmLCBuZml4ZWRhcmdzLCBudG90YWxhcmdzKTsKKyNlbHNlCisgIHJldHVybiBmZmlfcHJlcF9jaWZfc3lzdiAoY2lmKTsKKyNlbmRpZgorfQogCiB2b2lkCiBmZmlfY2FsbChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKIHsKLSAgLyoKLSAgICogVGhlIGZpbmFsIFNZU1YgQUJJIHNheXMgdGhhdCBzdHJ1Y3R1cmVzIHNtYWxsZXIgb3IgZXF1YWwgOCBieXRlcwotICAgKiBhcmUgcmV0dXJuZWQgaW4gcjMvcjQuIFRoZSBGRklfR0NDX1NZU1YgQUJJIGluc3RlYWQgcmV0dXJucyB0aGVtCi0gICAqIGluIG1lbW9yeS4KLSAgICoKLSAgICogSnVzdCB0byBrZWVwIHRoaW5ncyBzaW1wbGUgZm9yIHRoZSBhc3NlbWJseSBjb2RlLCB3ZSB3aWxsIGFsd2F5cwotICAgKiBib3VuY2UtYnVmZmVyIHN0cnVjdCByZXR1cm4gdmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA4IGJ5dGVzLgotICAgKiBUaGlzIGFsbG93cyB0aGUgQVNNIHRvIGhhbmRsZSBTWVNWIHNtYWxsIHN0cnVjdHVyZXMgYnkgZGlyZWN0bHkKLSAgICogd3JpdGluZyByMyBhbmQgcjQgdG8gbWVtb3J5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgc3RydWN0IHNpemUuCi0gICAqLwotICB1bnNpZ25lZCBpbnQgc21zdF9idWZmZXJbMl07CisgIC8qIFRoZSBmaW5hbCBTWVNWIEFCSSBzYXlzIHRoYXQgc3RydWN0dXJlcyBzbWFsbGVyIG9yIGVxdWFsIDggYnl0ZXMKKyAgICAgYXJlIHJldHVybmVkIGluIHIzL3I0LiAgQSBkcmFmdCBBQkkgdXNlZCBieSBsaW51eCBpbnN0ZWFkIHJldHVybnMKKyAgICAgdGhlbSBpbiBtZW1vcnkuCisKKyAgICAgV2UgYm91bmNlLWJ1ZmZlciBTWVNWIHNtYWxsIHN0cnVjdCByZXR1cm4gdmFsdWVzIHNvIHRoYXQgc3lzdi5TCisgICAgIGNhbiB3cml0ZSByMyBhbmQgcjQgdG8gbWVtb3J5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgc3RydWN0IHNpemUuCisgICAKKyAgICAgRm9yIEVMRnYyIEFCSSwgdXNlIGEgYm91bmNlIGJ1ZmZlciBmb3IgaG9tb2dlbmVvdXMgc3RydWN0cyB0b28sCisgICAgIGZvciBzaW1pbGFyIHJlYXNvbnMuICAqLworICB1bnNpZ25lZCBsb25nIHNtc3RfYnVmZmVyWzhdOwogICBleHRlbmRlZF9jaWYgZWNpZjsKLSAgdW5zaWduZWQgaW50IHJzaXplID0gMDsKIAogICBlY2lmLmNpZiA9IGNpZjsKICAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CiAKLSAgLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHN0cnVjdCByZXR1cm4gdmFsdWUgKi8KICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7Ci0gIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkgewotICAgIHJzaXplID0gY2lmLT5ydHlwZS0+c2l6ZTsKLSAgICBpZiAocnNpemUgPD0gOCkKLSAgICAgIGVjaWYucnZhbHVlID0gc21zdF9idWZmZXI7Ci0gICAgZWxzZSBpZiAoIXJ2YWx1ZSkKLSAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKHJzaXplKTsKLSAgfQorICBpZiAoKGNpZi0+ZmxhZ3MgJiBGTEFHX1JFVFVSTlNfU01TVCkgIT0gMCkKKyAgICBlY2lmLnJ2YWx1ZSA9IHNtc3RfYnVmZmVyOworICAvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc3RydWN0IHJldHVybiB2YWx1ZS4KKyAgICAgRklYTUU6IElzbid0IHRoaXMganVzdCBwYXBlcmluZyBvdmVyIGEgdXNlciBwcm9ibGVtPyAgKi8KKyAgZWxzZSBpZiAoIXJ2YWx1ZSAmJiBjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYSAoY2lmLT5ydHlwZS0+c2l6ZSk7CiAKLSAgc3dpdGNoIChjaWYtPmFiaSkKLSAgICB7Ci0jaWZuZGVmIFBPV0VSUEM2NAotIyBpZm5kZWYgX19OT19GUFJTX18KLSAgICBjYXNlIEZGSV9TWVNWOgotICAgIGNhc2UgRkZJX0dDQ19TWVNWOgotICAgIGNhc2UgRkZJX0xJTlVYOgotIyBlbmRpZgotICAgIGNhc2UgRkZJX0xJTlVYX1NPRlRfRkxPQVQ6Ci0gICAgICBmZmlfY2FsbF9TWVNWICgmZWNpZiwgLWNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7Ci0gICAgICBicmVhazsKKyNpZmRlZiBQT1dFUlBDNjQKKyAgZmZpX2NhbGxfTElOVVg2NCAoJmVjaWYsIC0obG9uZykgY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKICNlbHNlCi0gICAgY2FzZSBGRklfTElOVVg2NDoKLSAgICAgIGZmaV9jYWxsX0xJTlVYNjQgKCZlY2lmLCAtKGxvbmcpIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7Ci0gICAgICBicmVhazsKKyAgZmZpX2NhbGxfU1lTViAoJmVjaWYsIC1jaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOwogI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgIEZGSV9BU1NFUlQgKDApOwotICAgICAgYnJlYWs7Ci0gICAgfQogCiAgIC8qIENoZWNrIGZvciBhIGJvdW5jZS1idWZmZXJlZCByZXR1cm4gdmFsdWUgKi8KICAgaWYgKHJ2YWx1ZSAmJiBlY2lmLnJ2YWx1ZSA9PSBzbXN0X2J1ZmZlcikKLSAgICBtZW1jcHkocnZhbHVlLCBzbXN0X2J1ZmZlciwgcnNpemUpOwotfQotCi0KLSNpZm5kZWYgUE9XRVJQQzY0Ci0jZGVmaW5lIE1JTl9DQUNIRV9MSU5FX1NJWkUgOAotCi1zdGF0aWMgdm9pZAotZmx1c2hfaWNhY2hlIChjaGFyICp3cmFkZHIsIGNoYXIgKnhhZGRyLCBpbnQgc2l6ZSkKLXsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IE1JTl9DQUNIRV9MSU5FX1NJWkUpCi0gICAgX19hc21fXyB2b2xhdGlsZSAoImljYmkgMCwlMDsiICJkY2JmIDAsJTE7IgotCQkgICAgICA6IDogInIiICh4YWRkciArIGkpLCAiciIgKHdyYWRkciArIGkpIDogIm1lbW9yeSIpOwotICBfX2FzbV9fIHZvbGF0aWxlICgiaWNiaSAwLCUwOyIgImRjYmYgMCwlMTsiICJzeW5jOyIgImlzeW5jOyIKLQkJICAgIDogOiAiciIoeGFkZHIgKyBzaXplIC0gMSksICJyIih3cmFkZHIgKyBzaXplIC0gMSkKLQkJICAgIDogIm1lbW9yeSIpOwotfQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCByc2l6ZSA9IGNpZi0+cnR5cGUtPnNpemU7CisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisgICAgICAvKiBUaGUgU1lTViBBQkkgcmV0dXJucyBhIHN0cnVjdHVyZSBvZiB1cCB0byA0IGJ5dGVzIGluIHNpemUKKwkgbGVmdC1wYWRkZWQgaW4gcjMuICAqLworIyBpZm5kZWYgUE9XRVJQQzY0CisgICAgICBpZiAocnNpemUgPD0gNCkKKwltZW1jcHkgKHJ2YWx1ZSwgKGNoYXIgKikgc21zdF9idWZmZXIgKyA0IC0gcnNpemUsIHJzaXplKTsKKyAgICAgIGVsc2UKKyMgZW5kaWYKKwkvKiBUaGUgU1lTViBBQkkgcmV0dXJucyBhIHN0cnVjdHVyZSBvZiB1cCB0byA4IGJ5dGVzIGluIHNpemUKKwkgICBsZWZ0LXBhZGRlZCBpbiByMy9yNCwgYW5kIHRoZSBFTEZ2MiBBQkkgc2ltaWxhcmx5IHJldHVybnMgYQorCSAgIHN0cnVjdHVyZSBvZiB1cCB0byA4IGJ5dGVzIGluIHNpemUgbGVmdC1wYWRkZWQgaW4gcjMuICAqLworCWlmIChyc2l6ZSA8PSA4KQorCSAgbWVtY3B5IChydmFsdWUsIChjaGFyICopIHNtc3RfYnVmZmVyICsgOCAtIHJzaXplLCByc2l6ZSk7CisJZWxzZQogI2VuZGlmCisJICBtZW1jcHkgKHJ2YWx1ZSwgc21zdF9idWZmZXIsIHJzaXplKTsKKyAgICB9Cit9CisKIAogZmZpX3N0YXR1cwogZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlICpjbG9zdXJlLApAQCAtMTAyMiw0ODAgKzEzNCw4IEBACiAJCSAgICAgIHZvaWQgKmNvZGVsb2MpCiB7CiAjaWZkZWYgUE9XRVJQQzY0Ci0gIHZvaWQgKip0cmFtcCA9ICh2b2lkICoqKSAmY2xvc3VyZS0+dHJhbXBbMF07Ci0KLSAgaWYgKGNpZi0+YWJpICE9IEZGSV9MSU5VWDY0KQotICAgIHJldHVybiBGRklfQkFEX0FCSTsKLSAgLyogQ29weSBmdW5jdGlvbiBhZGRyZXNzIGFuZCBUT0MgZnJvbSBmZmlfY2xvc3VyZV9MSU5VWDY0LiAgKi8KLSAgbWVtY3B5ICh0cmFtcCwgKGNoYXIgKikgZmZpX2Nsb3N1cmVfTElOVVg2NCwgMTYpOwotICB0cmFtcFsyXSA9IGNvZGVsb2M7CisgIHJldHVybiBmZmlfcHJlcF9jbG9zdXJlX2xvY19saW51eDY0IChjbG9zdXJlLCBjaWYsIGZ1biwgdXNlcl9kYXRhLCBjb2RlbG9jKTsKICNlbHNlCi0gIHVuc2lnbmVkIGludCAqdHJhbXA7Ci0KLSAgaWYgKCEgKGNpZi0+YWJpID09IEZGSV9HQ0NfU1lTViAKLQkgfHwgY2lmLT5hYmkgPT0gRkZJX1NZU1YKLQkgfHwgY2lmLT5hYmkgPT0gRkZJX0xJTlVYCi0JIHx8IGNpZi0+YWJpID09IEZGSV9MSU5VWF9TT0ZUX0ZMT0FUKSkKLSAgICByZXR1cm4gRkZJX0JBRF9BQkk7Ci0KLSAgdHJhbXAgPSAodW5zaWduZWQgaW50ICopICZjbG9zdXJlLT50cmFtcFswXTsKLSAgdHJhbXBbMF0gPSAweDdjMDgwMmE2OyAgLyogICBtZmxyICAgIHIwICovCi0gIHRyYW1wWzFdID0gMHg0ODAwMDAwZDsgIC8qICAgYmwgICAgICAxMCA8dHJhbXBvbGluZV9pbml0aWFsKzB4MTA+ICovCi0gIHRyYW1wWzRdID0gMHg3ZDY4MDJhNjsgIC8qICAgbWZsciAgICByMTEgKi8KLSAgdHJhbXBbNV0gPSAweDdjMDgwM2E2OyAgLyogICBtdGxyICAgIHIwICovCi0gIHRyYW1wWzZdID0gMHg4MDBiMDAwMDsgIC8qICAgbHd6ICAgICByMCwwKHIxMSkgKi8KLSAgdHJhbXBbN10gPSAweDgxNmIwMDA0OyAgLyogICBsd3ogICAgIHIxMSw0KHIxMSkgKi8KLSAgdHJhbXBbOF0gPSAweDdjMDkwM2E2OyAgLyogICBtdGN0ciAgIHIwICovCi0gIHRyYW1wWzldID0gMHg0ZTgwMDQyMDsgIC8qICAgYmN0ciAqLwotICAqKHZvaWQgKiopICZ0cmFtcFsyXSA9ICh2b2lkICopIGZmaV9jbG9zdXJlX1NZU1Y7IC8qIGZ1bmN0aW9uICovCi0gICoodm9pZCAqKikgJnRyYW1wWzNdID0gY29kZWxvYzsgICAgICAgICAgICAgICAgICAgLyogY29udGV4dCAqLwotCi0gIC8qIEZsdXNoIHRoZSBpY2FjaGUuICAqLwotICBmbHVzaF9pY2FjaGUgKChjaGFyICopdHJhbXAsIChjaGFyICopY29kZWxvYywgRkZJX1RSQU1QT0xJTkVfU0laRSk7CisgIHJldHVybiBmZmlfcHJlcF9jbG9zdXJlX2xvY19zeXN2IChjbG9zdXJlLCBjaWYsIGZ1biwgdXNlcl9kYXRhLCBjb2RlbG9jKTsKICNlbmRpZgotCi0gIGNsb3N1cmUtPmNpZiA9IGNpZjsKLSAgY2xvc3VyZS0+ZnVuID0gZnVuOwotICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0KLSAgcmV0dXJuIEZGSV9PSzsKLX0KLQotdHlwZWRlZiB1bmlvbgotewotICBmbG9hdCBmOwotICBkb3VibGUgZDsKLX0gZmZpX2RibGZsOwotCi1pbnQgZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YgKGZmaV9jbG9zdXJlICosIHZvaWQgKiwgdW5zaWduZWQgbG9uZyAqLAotCQkJICAgICBmZmlfZGJsZmwgKiwgdW5zaWduZWQgbG9uZyAqKTsKLQotLyogQmFzaWNhbGx5IHRoZSB0cmFtcG9saW5lIGludm9rZXMgZmZpX2Nsb3N1cmVfU1lTViwgYW5kIG9uCi0gKiBlbnRyeSwgcjExIGhvbGRzIHRoZSBhZGRyZXNzIG9mIHRoZSBjbG9zdXJlLgotICogQWZ0ZXIgc3RvcmluZyB0aGUgcmVnaXN0ZXJzIHRoYXQgY291bGQgcG9zc2libHkgY29udGFpbgotICogcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgaW50byB0aGUgc3RhY2sgZnJhbWUgYW5kIHNldHRpbmcKLSAqIHVwIHNwYWNlIGZvciBhIHJldHVybiB2YWx1ZSwgZmZpX2Nsb3N1cmVfU1lTViBpbnZva2VzIHRoZQotICogZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbiB0byBkbyBtb3N0IG9mIHRoZSB3b3JrCi0gKi8KLQotaW50Ci1mZmlfY2xvc3VyZV9oZWxwZXJfU1lTViAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKnJ2YWx1ZSwKLQkJCSB1bnNpZ25lZCBsb25nICpwZ3IsIGZmaV9kYmxmbCAqcGZyLAotCQkJIHVuc2lnbmVkIGxvbmcgKnBzdCkKLXsKLSAgLyogcnZhbHVlIGlzIHRoZSBwb2ludGVyIHRvIHNwYWNlIGZvciByZXR1cm4gdmFsdWUgaW4gY2xvc3VyZSBhc3NlbWJseSAqLwotICAvKiBwZ3IgaXMgdGhlIHBvaW50ZXIgdG8gd2hlcmUgcjMtcjEwIGFyZSBzdG9yZWQgaW4gZmZpX2Nsb3N1cmVfU1lTViAqLwotICAvKiBwZnIgaXMgdGhlIHBvaW50ZXIgdG8gd2hlcmUgZjEtZjggYXJlIHN0b3JlZCBpbiBmZmlfY2xvc3VyZV9TWVNWICAqLwotICAvKiBwc3QgaXMgdGhlIHBvaW50ZXIgdG8gb3V0Z29pbmcgcGFyYW1ldGVyIHN0YWNrIGluIG9yaWdpbmFsIGNhbGxlciAqLwotCi0gIHZvaWQgKiogICAgICAgICAgYXZhbHVlOwotICBmZmlfdHlwZSAqKiAgICAgIGFyZ190eXBlczsKLSAgbG9uZyAgICAgICAgICAgICBpLCBhdm47Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0gIGxvbmcgICAgICAgICAgICAgbmYgPSAwOyAgIC8qIG51bWJlciBvZiBmbG9hdGluZyByZWdpc3RlcnMgYWxyZWFkeSB1c2VkICovCi0jZW5kaWYKLSAgbG9uZyAgICAgICAgICAgICBuZyA9IDA7ICAgLyogbnVtYmVyIG9mIGdlbmVyYWwgcmVnaXN0ZXJzIGFscmVhZHkgdXNlZCAqLwotCi0gIGZmaV9jaWYgKmNpZiA9IGNsb3N1cmUtPmNpZjsKLSAgdW5zaWduZWQgICAgICAgc2l6ZSAgICAgPSBjaWYtPnJ0eXBlLT5zaXplOwotICB1bnNpZ25lZCBzaG9ydCBydHlwZW51bSA9IGNpZi0+cnR5cGUtPnR5cGU7Ci0KLSAgYXZhbHVlID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKLQotICAvKiBGaXJzdCB0cmFuc2xhdGUgZm9yIHNvZnRmbG9hdC9ub25saW51eCAqLwotICBpZiAoY2lmLT5hYmkgPT0gRkZJX0xJTlVYX1NPRlRfRkxPQVQpIHsKLQlpZiAocnR5cGVudW0gPT0gRkZJX1RZUEVfRkxPQVQpCi0JCXJ0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDMyOwotCWlmIChydHlwZW51bSA9PSBGRklfVFlQRV9ET1VCTEUpCi0JCXJ0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDY0OwotCWlmIChydHlwZW51bSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQlydHlwZW51bSA9IEZGSV9UWVBFX1VJTlQxMjg7Ci0gIH0gZWxzZSBpZiAoY2lmLT5hYmkgIT0gRkZJX0xJTlVYICYmIGNpZi0+YWJpICE9IEZGSV9MSU5VWDY0KSB7Ci0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQlpZiAocnR5cGVudW0gPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJcnR5cGVudW0gPSBGRklfVFlQRV9TVFJVQ1Q7Ci0jZW5kaWYKLSAgfQotCi0KLSAgLyogQ29weSB0aGUgY2FsbGVyJ3Mgc3RydWN0dXJlIHJldHVybiB2YWx1ZSBhZGRyZXNzIHNvIHRoYXQgdGhlIGNsb3N1cmUKLSAgICAgcmV0dXJucyB0aGUgZGF0YSBkaXJlY3RseSB0byB0aGUgY2FsbGVyLgotICAgICBGb3IgRkZJX1NZU1YgdGhlIHJlc3VsdCBpcyBwYXNzZWQgaW4gcjMvcjQgaWYgdGhlIHN0cnVjdCBzaXplIGlzIGxlc3MKLSAgICAgb3IgZXF1YWwgOCBieXRlcy4gICovCi0gIGlmIChydHlwZW51bSA9PSBGRklfVFlQRV9TVFJVQ1QgJiYgKChjaWYtPmFiaSAhPSBGRklfU1lTVikgfHwgKHNpemUgPiA4KSkpIHsKLSAgICAgIHJ2YWx1ZSA9ICh2b2lkICopICpwZ3I7Ci0gICAgICBuZysrOwotICAgICAgcGdyKys7Ci0gICAgfQotCi0gIGkgPSAwOwotICBhdm4gPSBjaWYtPm5hcmdzOwotICBhcmdfdHlwZXMgPSBjaWYtPmFyZ190eXBlczsKLQotICAvKiBHcmFiIHRoZSBhZGRyZXNzZXMgb2YgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBzdGFjayBmcmFtZS4gICovCi0gIHdoaWxlIChpIDwgYXZuKSB7Ci0gICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlbnVtID0gYXJnX3R5cGVzW2ldLT50eXBlOwotCi0gICAgICAvKiBXZSBtYXkgbmVlZCB0byBoYW5kbGUgc29tZSB2YWx1ZXMgZGVwZW5kaW5nIG9uIEFCSSAqLwotICAgICAgaWYgKGNpZi0+YWJpID09IEZGSV9MSU5VWF9TT0ZUX0ZMT0FUKSB7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0ZMT0FUKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQzMjsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQ2NDsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UMTI4OwotICAgICAgfSBlbHNlIGlmIChjaWYtPmFiaSAhPSBGRklfTElOVVggJiYgY2lmLT5hYmkgIT0gRkZJX0xJTlVYNjQpIHsKLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1NUUlVDVDsKLSNlbmRpZgotICAgICAgfQotCi0gICAgICBzd2l0Y2ggKHR5cGVudW0pIHsKLSNpZm5kZWYgX19OT19GUFJTX18KLQljYXNlIEZGSV9UWVBFX0ZMT0FUOgotCSAgLyogdW5mb3J0dW5hdGVseSBmbG9hdCB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBkb3VibGVzCi0JICAgKiBpbiB0aGUgZmZpX2Nsb3N1cmVfU1lTViBjb2RlIChzaW5jZSB3ZSBkb24ndCBjaGVjawotCSAgICogdGhlIHR5cGUgaW4gdGhhdCByb3V0aW5lKS4KLQkgICAqLwotCi0JICAvKiB0aGVyZSBhcmUgOCA2NGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KLQotCSAgaWYgKG5mIDwgOCkKLQkgICAgewotCSAgICAgIGRvdWJsZSB0ZW1wID0gcGZyLT5kOwotCSAgICAgIHBmci0+ZiA9IChmbG9hdCkgdGVtcDsKLQkgICAgICBhdmFsdWVbaV0gPSBwZnI7Ci0JICAgICAgbmYrKzsKLQkgICAgICBwZnIrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgLyogRklYTUU/IGhlcmUgd2UgYXJlIHJlYWxseSBjaGFuZ2luZyB0aGUgdmFsdWVzCi0JICAgICAgICogc3RvcmVkIGluIHRoZSBvcmlnaW5hbCBjYWxsaW5nIHJvdXRpbmVzIG91dGdvaW5nCi0JICAgICAgICogcGFyYW1ldGVyIHN0YWNrLiAgVGhpcyBpcyBwcm9iYWJseSBhIHJlYWxseQotCSAgICAgICAqIG5hdWdodHkgdGhpbmcgdG8gZG8gYnV0Li4uCi0JICAgICAgICovCi0JICAgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgICAgIHBzdCArPSAxOwotCSAgICB9Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgotCSAgLyogT24gdGhlIG91dGdvaW5nIHN0YWNrIGFsbCB2YWx1ZXMgYXJlIGFsaWduZWQgdG8gOCAqLwotCSAgLyogdGhlcmUgYXJlIDggNjRiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0KLQkgIGlmIChuZiA8IDgpCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSBwZnI7Ci0JICAgICAgbmYrKzsKLQkgICAgICBwZnIrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgaWYgKCgobG9uZykgcHN0KSAmIDQpCi0JCXBzdCsrOwotCSAgICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgICAgICBwc3QgKz0gMjsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKLQkgIGlmIChuZiA8IDcpCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSBwZnI7Ci0JICAgICAgcGZyICs9IDI7Ci0JICAgICAgbmYgKz0gMjsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgaWYgKCgobG9uZykgcHN0KSAmIDQpCi0JCXBzdCsrOwotCSAgICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgICAgICBwc3QgKz0gNDsKLQkgICAgICBuZiA9IDg7Ci0JICAgIH0KLQkgIGJyZWFrOwotI2VuZGlmCi0jZW5kaWYgLyogaGF2ZSBGUFJTICovCi0KLQljYXNlIEZGSV9UWVBFX1VJTlQxMjg6Ci0JCS8qCi0JCSAqIFRlc3QgaWYgZm9yIHRoZSB3aG9sZSBsb25nIGRvdWJsZSwgNCBncHJzIGFyZSBhdmFpbGFibGUuCi0JCSAqIG90aGVyd2lzZSB0aGUgc3R1ZmYgZW5kcyB1cCBvbiB0aGUgc3RhY2suCi0JCSAqLwotCQlpZiAobmcgPCA1KSB7Ci0JCQlhdmFsdWVbaV0gPSBwZ3I7Ci0JCQlwZ3IgKz0gNDsKLQkJCW5nICs9IDQ7Ci0JCX0gZWxzZSB7Ci0JCQlhdmFsdWVbaV0gPSBwc3Q7Ci0JCQlwc3QgKz0gNDsKLQkJCW5nID0gOCs0OwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TSU5UODoKLQljYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgLyogdGhlcmUgYXJlIDggZ3ByIHJlZ2lzdGVycyB1c2VkIHRvIHBhc3MgdmFsdWVzICovCi0JICBpZiAobmcgPCA4KQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgMzsKLQkgICAgICBuZysrOwotCSAgICAgIHBncisrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyAzOwotCSAgICAgIHBzdCsrOwotCSAgICB9Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCSAgLyogdGhlcmUgYXJlIDggZ3ByIHJlZ2lzdGVycyB1c2VkIHRvIHBhc3MgdmFsdWVzICovCi0JICBpZiAobmcgPCA4KQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgMjsKLQkgICAgICBuZysrOwotCSAgICAgIHBncisrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyAyOwotCSAgICAgIHBzdCsrOwotCSAgICB9Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgotCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgotCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKLQkgIC8qIHRoZXJlIGFyZSA4IGdwciByZWdpc3RlcnMgdXNlZCB0byBwYXNzIHZhbHVlcyAqLwotCSAgaWYgKG5nIDwgOCkKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IHBncjsKLQkgICAgICBuZysrOwotCSAgICAgIHBncisrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICAgICAgcHN0Kys7Ci0JICAgIH0KLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0JICAvKiBTdHJ1Y3RzIGFyZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiBUaGUgYWRkcmVzcyB3aWxsIGFwcGVhciBpbiBhCi0JICAgICBncHIgaWYgaXQgaXMgb25lIG9mIHRoZSBmaXJzdCA4IGFyZ3VtZW50cy4gICovCi0JICBpZiAobmcgPCA4KQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gKHZvaWQgKikgKnBncjsKLQkgICAgICBuZysrOwotCSAgICAgIHBncisrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSAodm9pZCAqKSAqcHN0OwotCSAgICAgIHBzdCsrOwotCSAgICB9Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgotCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgotCSAgLyogcGFzc2luZyBsb25nIGxvbmcgaW50cyBhcmUgY29tcGxleCwgdGhleSBtdXN0Ci0JICAgKiBiZSBwYXNzZWQgaW4gc3VpdGFibGUgcmVnaXN0ZXIgcGFpcnMgc3VjaCBhcwotCSAgICogKHIzLHI0KSBvciAocjUscjYpIG9yIChyNixyNyksIG9yIChyNyxyOCkgb3IgKHI5LHIxMCkKLQkgICAqIGFuZCBpZiB0aGUgZW50aXJlIHBhaXIgYXJlbid0IGF2YWlsYWJsZSB0aGVuIHRoZSBvdXRnb2luZwotCSAgICogcGFyYW1ldGVyIHN0YWNrIGlzIHVzZWQgZm9yIGJvdGggYnV0IGFuIGFsaWdubWVudCBvZiA4Ci0JICAgKiBtdXN0IHdpbGwgYmUga2VwdC4gIFNvIHdlIG11c3QgZWl0aGVyIGxvb2sgaW4gcGdyCi0JICAgKiBvciBwc3QgdG8gZmluZCB0aGUgY29ycmVjdCBhZGRyZXNzIGZvciB0aGlzIHR5cGUKLQkgICAqIG9mIHBhcmFtZXRlci4KLQkgICAqLwotCSAgaWYgKG5nIDwgNykKLQkgICAgewotCSAgICAgIGlmIChuZyAmIDB4MDEpCi0JCXsKLQkJICAvKiBza2lwIHI0LCByNiwgcjggYXMgc3RhcnRpbmcgcG9pbnRzICovCi0JCSAgbmcrKzsKLQkJICBwZ3IrKzsKLQkJfQotCSAgICAgIGF2YWx1ZVtpXSA9IHBncjsKLQkgICAgICBuZyArPSAyOwotCSAgICAgIHBnciArPSAyOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAoKChsb25nKSBwc3QpICYgNCkKLQkJcHN0Kys7Ci0JICAgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgICAgIHBzdCArPSAyOwotCSAgICAgIG5nID0gODsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlGRklfQVNTRVJUICgwKTsKLQl9Ci0KLSAgICAgIGkrKzsKLSAgICB9Ci0KLQotICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCBydmFsdWUsIGF2YWx1ZSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKLQotICAvKiBUZWxsIGZmaV9jbG9zdXJlX1NZU1YgaG93IHRvIHBlcmZvcm0gcmV0dXJuIHR5cGUgcHJvbW90aW9ucy4KLSAgICAgQmVjYXVzZSB0aGUgRkZJX1NZU1YgQUJJIHJldHVybnMgdGhlIHN0cnVjdHVyZXMgPD0gOCBieXRlcyBpbiByMy9yNAotICAgICB3ZSBoYXZlIHRvIHRlbGwgZmZpX2Nsb3N1cmVfU1lTViBob3cgdG8gdHJlYXQgdGhlbS4gV2UgY29tYmluZSB0aGUgYmFzZQotICAgICB0eXBlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIC0gMSAgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0LgotICAgICBTbyBhIG9uZSBieXRlIHN0cnVjdCBnZXRzIHRoZSByZXR1cm4gdHlwZSAxNi4gUmV0dXJuIHR5cGUgMSB0byAxNSBhcmUKLSAgICAgYWxyZWFkeSB1c2VkIGFuZCB3ZSBuZXZlciBoYXZlIGEgc3RydWN0IHdpdGggc2l6ZSB6ZXJvLiBUaGF0IGlzIHRoZSByZWFzb24KLSAgICAgZm9yIHRoZSBzdWJ0cmFjdGlvbiBvZiAxLiBTZWUgdGhlIGNvbW1lbnQgaW4gZmZpdGFyZ2V0LmggYWJvdXQgb3JkZXJpbmcuCi0gICovCi0gIGlmIChjaWYtPmFiaSA9PSBGRklfU1lTViAmJiBydHlwZW51bSA9PSBGRklfVFlQRV9TVFJVQ1QgJiYgc2l6ZSA8PSA4KQotICAgIHJldHVybiAoRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgLSAxKSArIHNpemU7Ci0gIHJldHVybiBydHlwZW51bTsKLX0KLQotaW50IEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQgKGZmaV9jbG9zdXJlICosIHZvaWQgKiwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyAqLCBmZmlfZGJsZmwgKik7Ci0KLWludCBGRklfSElEREVOCi1mZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKnJ2YWx1ZSwKLQkJCSAgICB1bnNpZ25lZCBsb25nICpwc3QsIGZmaV9kYmxmbCAqcGZyKQotewotICAvKiBydmFsdWUgaXMgdGhlIHBvaW50ZXIgdG8gc3BhY2UgZm9yIHJldHVybiB2YWx1ZSBpbiBjbG9zdXJlIGFzc2VtYmx5ICovCi0gIC8qIHBzdCBpcyB0aGUgcG9pbnRlciB0byBwYXJhbWV0ZXIgc2F2ZSBhcmVhCi0gICAgIChyMy1yMTAgYXJlIHN0b3JlZCBpbnRvIGl0cyBmaXJzdCA4IHNsb3RzIGJ5IGZmaV9jbG9zdXJlX0xJTlVYNjQpICovCi0gIC8qIHBmciBpcyB0aGUgcG9pbnRlciB0byB3aGVyZSBmMS1mMTMgYXJlIHN0b3JlZCBpbiBmZmlfY2xvc3VyZV9MSU5VWDY0ICovCi0KLSAgdm9pZCAqKmF2YWx1ZTsKLSAgZmZpX3R5cGUgKiphcmdfdHlwZXM7Ci0gIGxvbmcgaSwgYXZuOwotICBmZmlfY2lmICpjaWY7Ci0gIGZmaV9kYmxmbCAqZW5kX3BmciA9IHBmciArIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0OwotCi0gIGNpZiA9IGNsb3N1cmUtPmNpZjsKLSAgYXZhbHVlID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKLQotICAvKiBDb3B5IHRoZSBjYWxsZXIncyBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGFkZHJlc3Mgc28gdGhhdCB0aGUgY2xvc3VyZQotICAgICByZXR1cm5zIHRoZSBkYXRhIGRpcmVjdGx5IHRvIHRoZSBjYWxsZXIuICAqLwotICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCi0gICAgewotICAgICAgcnZhbHVlID0gKHZvaWQgKikgKnBzdDsKLSAgICAgIHBzdCsrOwotICAgIH0KLQotICBpID0gMDsKLSAgYXZuID0gY2lmLT5uYXJnczsKLSAgYXJnX3R5cGVzID0gY2lmLT5hcmdfdHlwZXM7Ci0KLSAgLyogR3JhYiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUgc3RhY2sgZnJhbWUuICAqLwotICB3aGlsZSAoaSA8IGF2bikKLSAgICB7Ci0gICAgICBzd2l0Y2ggKGFyZ190eXBlc1tpXS0+dHlwZSkKLQl7Ci0JY2FzZSBGRklfVFlQRV9TSU5UODoKLQljYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgNzsKLQkgIHBzdCsrOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQljYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDY7Ci0JICBwc3QrKzsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0JY2FzZSBGRklfVFlQRV9VSU5UMzI6Ci0JICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyA0OwotCSAgcHN0Kys7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgotCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgotCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKLQkgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgIHBzdCsrOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NUUlVDVDoKLQkgIC8qIFN0cnVjdHVyZXMgd2l0aCBzaXplIGxlc3MgdGhhbiBlaWdodCBieXRlcyBhcmUgcGFzc2VkCi0JICAgICBsZWZ0LXBhZGRlZC4gICovCi0JICBpZiAoYXJnX3R5cGVzW2ldLT5zaXplIDwgOCkKLQkgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgOCAtIGFyZ190eXBlc1tpXS0+c2l6ZTsKLQkgIGVsc2UKLQkgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgcHN0ICs9IChhcmdfdHlwZXNbaV0tPnNpemUgKyA3KSAvIDg7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0JICAvKiB1bmZvcnR1bmF0ZWx5IGZsb2F0IHZhbHVlcyBhcmUgc3RvcmVkIGFzIGRvdWJsZXMKLQkgICAqIGluIHRoZSBmZmlfY2xvc3VyZV9MSU5VWDY0IGNvZGUgKHNpbmNlIHdlIGRvbid0IGNoZWNrCi0JICAgKiB0aGUgdHlwZSBpbiB0aGF0IHJvdXRpbmUpLgotCSAgICovCi0KLQkgIC8qIHRoZXJlIGFyZSAxMyA2NGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KLQotCSAgaWYgKHBmciA8IGVuZF9wZnIpCi0JICAgIHsKLQkgICAgICBkb3VibGUgdGVtcCA9IHBmci0+ZDsKLQkgICAgICBwZnItPmYgPSAoZmxvYXQpIHRlbXA7Ci0JICAgICAgYXZhbHVlW2ldID0gcGZyOwotCSAgICAgIHBmcisrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgIHBzdCsrOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX0RPVUJMRToKLQkgIC8qIE9uIHRoZSBvdXRnb2luZyBzdGFjayBhbGwgdmFsdWVzIGFyZSBhbGlnbmVkIHRvIDggKi8KLQkgIC8qIHRoZXJlIGFyZSAxMyA2NGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KLQotCSAgaWYgKHBmciA8IGVuZF9wZnIpCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSBwZnI7Ci0JICAgICAgcGZyKys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgcHN0Kys7Ci0JICBicmVhazsKLQotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgotCSAgaWYgKHBmciArIDEgPCBlbmRfcGZyKQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gcGZyOwotCSAgICAgIHBmciArPSAyOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAocGZyIDwgZW5kX3BmcikKLQkJewotCQkgIC8qIFBhc3NlZCBwYXJ0bHkgaW4gZjEzIGFuZCBwYXJ0bHkgb24gdGhlIHN0YWNrLgotCQkgICAgIE1vdmUgaXQgYWxsIHRvIHRoZSBzdGFjay4gICovCi0JCSAgKnBzdCA9ICoodW5zaWduZWQgbG9uZyAqKSBwZnI7Ci0JCSAgcGZyKys7Ci0JCX0KLQkgICAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICAgIH0KLQkgIHBzdCArPSAyOwotCSAgYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JICBGRklfQVNTRVJUICgwKTsKLQl9Ci0KLSAgICAgIGkrKzsKLSAgICB9Ci0KLQotICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCBydmFsdWUsIGF2YWx1ZSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKLQotICAvKiBUZWxsIGZmaV9jbG9zdXJlX0xJTlVYNjQgaG93IHRvIHBlcmZvcm0gcmV0dXJuIHR5cGUgcHJvbW90aW9ucy4gICovCi0gIHJldHVybiBjaWYtPnJ0eXBlLT50eXBlOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYwppbmRleCAxZDFkNDhjLi5jZjZmYjZkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYwpAQCAtNTkzLDcgKzU5Myw3IEBACiAgICAgICAvKiBOYXR1cmFsIGFsaWdubWVudCBmb3IgYWxsIGl0ZW1zLiAgKi8KICAgICAgIGFsaWduID0gcC0+YWxpZ25tZW50OwogI2Vsc2UKLSAgICAgIC8qIE5hdHJ1YWwgYWxpZ25tZW50IGZvciB0aGUgZmlyc3QgaXRlbS4uLiAqLworICAgICAgLyogTmF0dXJhbCBhbGlnbm1lbnQgZm9yIHRoZSBmaXJzdCBpdGVtLi4uICovCiAgICAgICBpZiAoaSA9PSAwKQogCWFsaWduID0gcC0+YWxpZ25tZW50OwogICAgICAgZWxzZSBpZiAocC0+YWxpZ25tZW50ID09IDE2IHx8IHAtPmFsaWdubWVudCA8IDQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA4N2FmOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYwpAQCAtMCwwICsxLDk0MyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZmaV9saW51eDY0LmMgLSBDb3B5cmlnaHQgKEMpIDIwMTMgSUJNCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIEFudGhvbnkgR3JlZW4KKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgS3lsZSBNb2ZmZXR0CisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYworICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYworICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5OCBHZW9mZnJleSBLZWF0aW5nCisKKyAgIFBvd2VyUEMgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgImZmaS5oIgorCisjaWZkZWYgUE9XRVJQQzY0CisjaW5jbHVkZSAiZmZpX2NvbW1vbi5oIgorI2luY2x1ZGUgImZmaV9wb3dlcnBjLmgiCisKKworLyogQWJvdXQgdGhlIExJTlVYNjQgQUJJLiAgKi8KK2VudW0geworICBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCA9IDgsCisgIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ID0gMTMKK307CitlbnVtIHsgQVNNX05FRURTX1JFR0lTVEVSUzY0ID0gNCB9OworCisKKyNpZiBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgJiYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKy8qIEFkanVzdCBzaXplIG9mIGZmaV90eXBlX2xvbmdkb3VibGUuICAqLwordm9pZCBGRklfSElEREVOCitmZmlfcHJlcF90eXBlc19saW51eDY0IChmZmlfYWJpIGFiaSkKK3sKKyAgaWYgKChhYmkgJiAoRkZJX0xJTlVYIHwgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyOCkpID09IEZGSV9MSU5VWCkKKyAgICB7CisgICAgICBmZmlfdHlwZV9sb25nZG91YmxlLnNpemUgPSA4OworICAgICAgZmZpX3R5cGVfbG9uZ2RvdWJsZS5hbGlnbm1lbnQgPSA4OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZmaV90eXBlX2xvbmdkb3VibGUuc2l6ZSA9IDE2OworICAgICAgZmZpX3R5cGVfbG9uZ2RvdWJsZS5hbGlnbm1lbnQgPSAxNjsKKyAgICB9Cit9CisjZW5kaWYKKworCisjaWYgX0NBTExfRUxGID09IDIKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2Rpc2NvdmVyX2hvbW9nZW5lb3VzX2FnZ3JlZ2F0ZSAoY29uc3QgZmZpX3R5cGUgKnQsIHVuc2lnbmVkIGludCAqZWxudW0pCit7CisgIHN3aXRjaCAodC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKyAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyAgICAgICplbG51bSA9IDE7CisgICAgICByZXR1cm4gKGludCkgdC0+dHlwZTsKKworICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOjsKKyAgICAgIHsKKwl1bnNpZ25lZCBpbnQgYmFzZV9lbHQgPSAwLCB0b3RhbF9lbG51bSA9IDA7CisJZmZpX3R5cGUgKiplbCA9IHQtPmVsZW1lbnRzOworCXdoaWxlICgqZWwpCisJICB7CisJICAgIHVuc2lnbmVkIGludCBlbF9lbHQsIGVsX2VsbnVtID0gMDsKKwkgICAgZWxfZWx0ID0gZGlzY292ZXJfaG9tb2dlbmVvdXNfYWdncmVnYXRlICgqZWwsICZlbF9lbG51bSk7CisJICAgIGlmIChlbF9lbHQgPT0gMAorCQl8fCAoYmFzZV9lbHQgJiYgYmFzZV9lbHQgIT0gZWxfZWx0KSkKKwkgICAgICByZXR1cm4gMDsKKwkgICAgYmFzZV9lbHQgPSBlbF9lbHQ7CisJICAgIHRvdGFsX2VsbnVtICs9IGVsX2VsbnVtOworCSAgICBpZiAodG90YWxfZWxudW0gPiA4KQorCSAgICAgIHJldHVybiAwOworCSAgICBlbCsrOworCSAgfQorCSplbG51bSA9IHRvdGFsX2VsbnVtOworCXJldHVybiBiYXNlX2VsdDsKKyAgICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisjZW5kaWYKKworCisvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nICovCitzdGF0aWMgZmZpX3N0YXR1cworZmZpX3ByZXBfY2lmX2xpbnV4NjRfY29yZSAoZmZpX2NpZiAqY2lmKQoreworICBmZmlfdHlwZSAqKnB0cjsKKyAgdW5zaWduZWQgYnl0ZXM7CisgIHVuc2lnbmVkIGksIGZwYXJnX2NvdW50ID0gMCwgaW50YXJnX2NvdW50ID0gMDsKKyAgdW5zaWduZWQgZmxhZ3MgPSBjaWYtPmZsYWdzOworI2lmIF9DQUxMX0VMRiA9PSAyCisgIHVuc2lnbmVkIGludCBlbHQsIGVsbnVtOworI2VuZGlmCisKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFID09IEZGSV9UWVBFX0RPVUJMRQorICAvKiBJZiBjb21waWxlZCB3aXRob3V0IGxvbmcgZG91YmxlIHN1cHBvcnQuLiAgKi8KKyAgaWYgKChjaWYtPmFiaSAmIEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjgpICE9IDApCisgICAgcmV0dXJuIEZGSV9CQURfQUJJOworI2VuZGlmCisKKyAgLyogVGhlIG1hY2hpbmUtaW5kZXBlbmRlbnQgY2FsY3VsYXRpb24gb2YgY2lmLT5ieXRlcyBkb2Vzbid0IHdvcmsKKyAgICAgZm9yIHVzLiAgUmVkbyB0aGUgY2FsY3VsYXRpb24uICAqLworI2lmIF9DQUxMX0VMRiA9PSAyCisgIC8qIFNwYWNlIGZvciBiYWNrY2hhaW4sIENSLCBMUiwgVE9DIGFuZCB0aGUgYXNtJ3MgdGVtcCByZWdzLiAgKi8KKyAgYnl0ZXMgPSAoNCArIEFTTV9ORUVEU19SRUdJU1RFUlM2NCkgKiBzaXplb2YgKGxvbmcpOworCisgIC8qIFNwYWNlIGZvciB0aGUgZ2VuZXJhbCByZWdpc3RlcnMuICAqLworICBieXRlcyArPSBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCAqIHNpemVvZiAobG9uZyk7CisjZWxzZQorICAvKiBTcGFjZSBmb3IgYmFja2NoYWluLCBDUiwgTFIsIGNjL2xkIGRvdWJsZXdvcmQsIFRPQyBhbmQgdGhlIGFzbSdzIHRlbXAKKyAgICAgcmVncy4gICovCisgIGJ5dGVzID0gKDYgKyBBU01fTkVFRFNfUkVHSVNURVJTNjQpICogc2l6ZW9mIChsb25nKTsKKworICAvKiBTcGFjZSBmb3IgdGhlIG1hbmRhdG9yeSBwYXJtIHNhdmUgYXJlYSBhbmQgZ2VuZXJhbCByZWdpc3RlcnMuICAqLworICBieXRlcyArPSAyICogTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQgKiBzaXplb2YgKGxvbmcpOworI2VuZGlmCisKKyAgLyogUmV0dXJuIHZhbHVlIGhhbmRsaW5nLiAgKi8KKyAgc3dpdGNoIChjaWYtPnJ0eXBlLT50eXBlKQorICAgIHsKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyAgICAgIGlmICgoY2lmLT5hYmkgJiBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4KSAhPSAwKQorCWZsYWdzIHw9IEZMQUdfUkVUVVJOU18xMjhCSVRTOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzY0QklUUzsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19GUDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9VSU5UMTI4OgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzEyOEJJVFM7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzY0QklUUzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisjaWYgX0NBTExfRUxGID09IDIKKyAgICAgIGVsdCA9IGRpc2NvdmVyX2hvbW9nZW5lb3VzX2FnZ3JlZ2F0ZSAoY2lmLT5ydHlwZSwgJmVsbnVtKTsKKyAgICAgIGlmIChlbHQpCisJeworCSAgaWYgKGVsdCA9PSBGRklfVFlQRV9ET1VCTEUpCisJICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU182NEJJVFM7CisJICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfRlAgfCBGTEFHX1JFVFVSTlNfU01TVDsKKwkgIGJyZWFrOworCX0KKyAgICAgIGlmIChjaWYtPnJ0eXBlLT5zaXplIDw9IDE2KQorCXsKKwkgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19TTVNUOworCSAgYnJlYWs7CisJfQorI2VuZGlmCisgICAgICBpbnRhcmdfY291bnQrKzsKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVkFMX1JFRkVSRU5DRTsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgY2FzZSBGRklfVFlQRV9WT0lEOgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX05PVEhJTkc7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiBSZXR1cm5zIDMyLWJpdCBpbnRlZ2VyLCBvciBzaW1pbGFyLiAgTm90aGluZyB0byBkbyBoZXJlLiAgKi8KKyAgICAgIGJyZWFrOworICAgIH0KKworICBmb3IgKHB0ciA9IGNpZi0+YXJnX3R5cGVzLCBpID0gY2lmLT5uYXJnczsgaSA+IDA7IGktLSwgcHRyKyspCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGFsaWduOworCisgICAgICBzd2l0Y2ggKCgqcHRyKS0+dHlwZSkKKwl7CisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKwljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisJICBpZiAoKGNpZi0+YWJpICYgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyOCkgIT0gMCkKKwkgICAgeworCSAgICAgIGZwYXJnX2NvdW50Kys7CisJICAgICAgaW50YXJnX2NvdW50Kys7CisJICAgIH0KKwkgIC8qIEZhbGwgdGhyb3VnaC4gICovCisjZW5kaWYKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwljYXNlIEZGSV9UWVBFX0ZMT0FUOgorCSAgZnBhcmdfY291bnQrKzsKKwkgIGludGFyZ19jb3VudCsrOworCSAgaWYgKGZwYXJnX2NvdW50ID4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQpCisJICAgIGZsYWdzIHw9IEZMQUdfQVJHX05FRURTX1BTQVZFOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIGlmICgoY2lmLT5hYmkgJiBGRklfTElOVVhfU1RSVUNUX0FMSUdOKSAhPSAwKQorCSAgICB7CisJICAgICAgYWxpZ24gPSAoKnB0ciktPmFsaWdubWVudDsKKwkgICAgICBpZiAoYWxpZ24gPiAxNikKKwkJYWxpZ24gPSAxNjsKKwkgICAgICBhbGlnbiA9IGFsaWduIC8gODsKKwkgICAgICBpZiAoYWxpZ24gPiAxKQorCQlpbnRhcmdfY291bnQgPSBBTElHTiAoaW50YXJnX2NvdW50LCBhbGlnbik7CisJICAgIH0KKwkgIGludGFyZ19jb3VudCArPSAoKCpwdHIpLT5zaXplICsgNykgLyA4OworI2lmIF9DQUxMX0VMRiA9PSAyCisJICBlbHQgPSBkaXNjb3Zlcl9ob21vZ2VuZW91c19hZ2dyZWdhdGUgKCpwdHIsICZlbG51bSk7CisJICBpZiAoZWx0KQorCSAgICB7CisJICAgICAgZnBhcmdfY291bnQgKz0gZWxudW07CisJICAgICAgaWYgKGZwYXJnX2NvdW50ID4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQpCisJCWZsYWdzIHw9IEZMQUdfQVJHX05FRURTX1BTQVZFOworCSAgICB9CisJICBlbHNlCisjZW5kaWYKKwkgICAgeworCSAgICAgIGlmIChpbnRhcmdfY291bnQgPiBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCkKKwkJZmxhZ3MgfD0gRkxBR19BUkdfTkVFRFNfUFNBVkU7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCWNhc2UgRkZJX1RZUEVfSU5UOgorCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgIC8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBwYXNzZWQgYXMgYSA4LWJ5dGUgd29yZCBpbiBhIEdQUiwgZWl0aGVyCisJICAgICB0aGUgb2JqZWN0IGl0c2VsZiBvciBhIHBvaW50ZXIgdG8gaXQuICAqLworCSAgaW50YXJnX2NvdW50Kys7CisJICBpZiAoaW50YXJnX2NvdW50ID4gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQpCisJICAgIGZsYWdzIHw9IEZMQUdfQVJHX05FRURTX1BTQVZFOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIEZGSV9BU1NFUlQgKDApOworCX0KKyAgICB9CisKKyAgaWYgKGZwYXJnX2NvdW50ICE9IDApCisgICAgZmxhZ3MgfD0gRkxBR19GUF9BUkdVTUVOVFM7CisgIGlmIChpbnRhcmdfY291bnQgPiA0KQorICAgIGZsYWdzIHw9IEZMQUdfNF9HUFJfQVJHVU1FTlRTOworCisgIC8qIFNwYWNlIGZvciB0aGUgRlBSIHJlZ2lzdGVycywgaWYgbmVlZGVkLiAgKi8KKyAgaWYgKGZwYXJnX2NvdW50ICE9IDApCisgICAgYnl0ZXMgKz0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgKiBzaXplb2YgKGRvdWJsZSk7CisKKyAgLyogU3RhY2sgc3BhY2UuICAqLworI2lmIF9DQUxMX0VMRiA9PSAyCisgIGlmICgoZmxhZ3MgJiBGTEFHX0FSR19ORUVEU19QU0FWRSkgIT0gMCkKKyAgICBieXRlcyArPSBpbnRhcmdfY291bnQgKiBzaXplb2YgKGxvbmcpOworI2Vsc2UKKyAgaWYgKGludGFyZ19jb3VudCA+IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0KQorICAgIGJ5dGVzICs9IChpbnRhcmdfY291bnQgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCkgKiBzaXplb2YgKGxvbmcpOworI2VuZGlmCisKKyAgLyogVGhlIHN0YWNrIHNwYWNlIGFsbG9jYXRlZCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzLiAgKi8KKyAgYnl0ZXMgPSAoYnl0ZXMgKyAxNSkgJiB+MHhGOworCisgIGNpZi0+ZmxhZ3MgPSBmbGFnczsKKyAgY2lmLT5ieXRlcyA9IGJ5dGVzOworCisgIHJldHVybiBGRklfT0s7Cit9CisKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTgorZmZpX3ByZXBfY2lmX2xpbnV4NjQgKGZmaV9jaWYgKmNpZikKK3sKKyAgaWYgKChjaWYtPmFiaSAmIEZGSV9MSU5VWCkgIT0gMCkKKyAgICBjaWYtPm5maXhlZGFyZ3MgPSBjaWYtPm5hcmdzOworI2lmIF9DQUxMX0VMRiAhPSAyCisgIGVsc2UgaWYgKGNpZi0+YWJpID09IEZGSV9DT01QQVRfTElOVVg2NCkKKyAgICB7CisgICAgICAvKiBUaGlzIGNhbGwgaXMgZnJvbSBvbGQgY29kZS4gIERvbid0IHRvdWNoIGNpZi0+bmZpeGVkYXJncworCSBzaW5jZSBvbGQgY29kZSB3aWxsIGJlIHVzaW5nIGEgc21hbGxlciBjaWYuICAqLworICAgICAgY2lmLT5mbGFncyB8PSBGTEFHX0NPTVBBVDsKKyAgICAgIC8qIFRyYW5zbGF0ZSB0byBuZXcgYWJpIHZhbHVlLiAgKi8KKyAgICAgIGNpZi0+YWJpID0gRkZJX0xJTlVYIHwgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyODsKKyAgICB9CisjZW5kaWYKKyAgZWxzZQorICAgIHJldHVybiBGRklfQkFEX0FCSTsKKyAgcmV0dXJuIGZmaV9wcmVwX2NpZl9saW51eDY0X2NvcmUgKGNpZik7Cit9CisKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTgorZmZpX3ByZXBfY2lmX2xpbnV4NjRfdmFyIChmZmlfY2lmICpjaWYsCisJCQkgIHVuc2lnbmVkIGludCBuZml4ZWRhcmdzLAorCQkJICB1bnNpZ25lZCBpbnQgbnRvdGFsYXJncyBNQVlCRV9VTlVTRUQpCit7CisgIGlmICgoY2lmLT5hYmkgJiBGRklfTElOVVgpICE9IDApCisgICAgY2lmLT5uZml4ZWRhcmdzID0gbmZpeGVkYXJnczsKKyNpZiBfQ0FMTF9FTEYgIT0gMgorICBlbHNlIGlmIChjaWYtPmFiaSA9PSBGRklfQ09NUEFUX0xJTlVYNjQpCisgICAgeworICAgICAgLyogVGhpcyBjYWxsIGlzIGZyb20gb2xkIGNvZGUuICBEb24ndCB0b3VjaCBjaWYtPm5maXhlZGFyZ3MKKwkgc2luY2Ugb2xkIGNvZGUgd2lsbCBiZSB1c2luZyBhIHNtYWxsZXIgY2lmLiAgKi8KKyAgICAgIGNpZi0+ZmxhZ3MgfD0gRkxBR19DT01QQVQ7CisgICAgICAvKiBUcmFuc2xhdGUgdG8gbmV3IGFiaSB2YWx1ZS4gICovCisgICAgICBjaWYtPmFiaSA9IEZGSV9MSU5VWCB8IEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjg7CisgICAgfQorI2VuZGlmCisgIGVsc2UKKyAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisjaWYgX0NBTExfRUxGID09IDIKKyAgY2lmLT5mbGFncyB8PSBGTEFHX0FSR19ORUVEU19QU0FWRTsKKyNlbmRpZgorICByZXR1cm4gZmZpX3ByZXBfY2lmX2xpbnV4NjRfY29yZSAoY2lmKTsKK30KKworCisvKiBmZmlfcHJlcF9hcmdzNjQgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKKyAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLgorCisgICBUaGUgc3RhY2sgbGF5b3V0IHdlIHdhbnQgbG9va3MgbGlrZSB0aGlzOgorCisgICB8ICAgUmV0IGFkZHIgZnJvbSBmZmlfY2FsbF9MSU5VWDY0CThieXRlcwl8CWhpZ2hlciBhZGRyZXNzZXMKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgIHwgICBDUiBzYXZlIGFyZWEJCQk4Ynl0ZXMJfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgfCAgIFByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyCTgJfAlzdGFjayBwb2ludGVyIGhlcmUKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw8KyA8PDwJb24gZW50cnkgdG8KKyAgIHwgICBTYXZlZCByMjgtcjMxCQkJNCo4CXwgfAlmZmlfY2FsbF9MSU5VWDY0CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKKyAgIHwgICBHUFIgcmVnaXN0ZXJzIHIzLXIxMAkJOCo4CXwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CisgICB8ICAgRlBSIHJlZ2lzdGVycyBmMS1mMTMgKG9wdGlvbmFsKQkxMyo4CXwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CisgICB8ICAgUGFyYW1ldGVyIHNhdmUgYXJlYQkJICAgICAgICB8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorICAgfCAgIFRPQyBzYXZlIGFyZWEJCQk4CXwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CXN0YWNrCXwKKyAgIHwgICBMaW5rZXIgZG91Ymxld29yZAkJOAl8IHwJZ3Jvd3MJfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CWRvd24JVgorICAgfCAgIENvbXBpbGVyIGRvdWJsZXdvcmQJCTgJfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJbG93ZXIgYWRkcmVzc2VzCisgICB8ICAgU3BhY2UgZm9yIGNhbGxlZSdzIExSCQk4CXwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CisgICB8ICAgQ1Igc2F2ZSBhcmVhCQkJOAl8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlzdGFjayBwb2ludGVyIGhlcmUKKyAgIHwgICBDdXJyZW50IGJhY2tjaGFpbiBwb2ludGVyCTgJfC0vCWR1cmluZworICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgIDw8PAlmZmlfY2FsbF9MSU5VWDY0CisKKyovCisKK3ZvaWQgRkZJX0hJRERFTgorZmZpX3ByZXBfYXJnczY0IChleHRlbmRlZF9jaWYgKmVjaWYsIHVuc2lnbmVkIGxvbmcgKmNvbnN0IHN0YWNrKQoreworICBjb25zdCB1bnNpZ25lZCBsb25nIGJ5dGVzID0gZWNpZi0+Y2lmLT5ieXRlczsKKyAgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFncyA9IGVjaWYtPmNpZi0+ZmxhZ3M7CisKKyAgdHlwZWRlZiB1bmlvbgorICB7CisgICAgY2hhciAqYzsKKyAgICB1bnNpZ25lZCBsb25nICp1bDsKKyAgICBmbG9hdCAqZjsKKyAgICBkb3VibGUgKmQ7CisgICAgc2l6ZV90IHA7CisgIH0gdmFscDsKKworICAvKiAnc3RhY2t0b3AnIHBvaW50cyBhdCB0aGUgcHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIuICAqLworICB2YWxwIHN0YWNrdG9wOworCisgIC8qICduZXh0X2FyZycgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZ3ByMywgYW5kIGdyb3dzIHVwd2FyZHMgYXMKKyAgICAgd2UgdXNlIEdQUiByZWdpc3RlcnMsIHRoZW4gY29udGludWVzIGF0IHJlc3QuICAqLworICB2YWxwIGdwcl9iYXNlOworICB2YWxwIGdwcl9lbmQ7CisgIHZhbHAgcmVzdDsKKyAgdmFscCBuZXh0X2FyZzsKKworICAvKiAnZnByX2Jhc2UnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGZwcjMsIGFuZCBncm93cyB1cHdhcmRzIGFzCisgICAgIHdlIHVzZSBGUFIgcmVnaXN0ZXJzLiAgKi8KKyAgdmFscCBmcHJfYmFzZTsKKyAgdW5zaWduZWQgaW50IGZwYXJnX2NvdW50OworCisgIHVuc2lnbmVkIGludCBpLCB3b3JkcywgbmFyZ3MsIG5maXhlZGFyZ3M7CisgIGZmaV90eXBlICoqcHRyOworICBkb3VibGUgZG91YmxlX3RtcDsKKyAgdW5pb24KKyAgeworICAgIHZvaWQgKip2OworICAgIGNoYXIgKipjOworICAgIHNpZ25lZCBjaGFyICoqc2M7CisgICAgdW5zaWduZWQgY2hhciAqKnVjOworICAgIHNpZ25lZCBzaG9ydCAqKnNzOworICAgIHVuc2lnbmVkIHNob3J0ICoqdXM7CisgICAgc2lnbmVkIGludCAqKnNpOworICAgIHVuc2lnbmVkIGludCAqKnVpOworICAgIHVuc2lnbmVkIGxvbmcgKip1bDsKKyAgICBmbG9hdCAqKmY7CisgICAgZG91YmxlICoqZDsKKyAgfSBwX2FyZ3Y7CisgIHVuc2lnbmVkIGxvbmcgZ3BydmFsdWU7CisgIHVuc2lnbmVkIGxvbmcgYWxpZ247CisKKyAgc3RhY2t0b3AuYyA9IChjaGFyICopIHN0YWNrICsgYnl0ZXM7CisgIGdwcl9iYXNlLnVsID0gc3RhY2t0b3AudWwgLSBBU01fTkVFRFNfUkVHSVNURVJTNjQgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NDsKKyAgZ3ByX2VuZC51bCA9IGdwcl9iYXNlLnVsICsgTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQ7CisjaWYgX0NBTExfRUxGID09IDIKKyAgcmVzdC51bCA9IHN0YWNrICsgNCArIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0OworI2Vsc2UKKyAgcmVzdC51bCA9IHN0YWNrICsgNiArIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0OworI2VuZGlmCisgIGZwcl9iYXNlLmQgPSBncHJfYmFzZS5kIC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQ7CisgIGZwYXJnX2NvdW50ID0gMDsKKyAgbmV4dF9hcmcudWwgPSBncHJfYmFzZS51bDsKKworICAvKiBDaGVjayB0aGF0IGV2ZXJ5dGhpbmcgc3RhcnRzIGFsaWduZWQgcHJvcGVybHkuICAqLworICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIHN0YWNrICYgMHhGKSA9PSAwKTsKKyAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSBzdGFja3RvcC5jICYgMHhGKSA9PSAwKTsKKyAgRkZJX0FTU0VSVCAoKGJ5dGVzICYgMHhGKSA9PSAwKTsKKworICAvKiBEZWFsIHdpdGggcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSBwYXNzLWJ5LXJlZmVyZW5jZS4gICovCisgIGlmIChmbGFncyAmIEZMQUdfUkVUVkFMX1JFRkVSRU5DRSkKKyAgICAqbmV4dF9hcmcudWwrKyA9ICh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBlY2lmLT5ydmFsdWU7CisKKyAgLyogTm93IGZvciB0aGUgYXJndW1lbnRzLiAgKi8KKyAgcF9hcmd2LnYgPSBlY2lmLT5hdmFsdWU7CisgIG5hcmdzID0gZWNpZi0+Y2lmLT5uYXJnczsKKyNpZiBfQ0FMTF9FTEYgIT0gMgorICBuZml4ZWRhcmdzID0gKHVuc2lnbmVkKSAtMTsKKyAgaWYgKChmbGFncyAmIEZMQUdfQ09NUEFUKSA9PSAwKQorI2VuZGlmCisgICAgbmZpeGVkYXJncyA9IGVjaWYtPmNpZi0+bmZpeGVkYXJnczsKKyAgZm9yIChwdHIgPSBlY2lmLT5jaWYtPmFyZ190eXBlcywgaSA9IDA7CisgICAgICAgaSA8IG5hcmdzOworICAgICAgIGkrKywgcHRyKyssIHBfYXJndi52KyspCisgICAgeworI2lmIF9DQUxMX0VMRiA9PSAyCisgICAgICB1bnNpZ25lZCBpbnQgZWx0LCBlbG51bTsKKyNlbmRpZgorCisgICAgICBzd2l0Y2ggKCgqcHRyKS0+dHlwZSkKKwl7CisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKwljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisJICBpZiAoKGVjaWYtPmNpZi0+YWJpICYgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyOCkgIT0gMCkKKwkgICAgeworCSAgICAgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVswXTsKKwkgICAgICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCAmJiBpIDwgbmZpeGVkYXJncykKKwkJeworCQkgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworIyBpZiBfQ0FMTF9FTEYgIT0gMgorCQkgIGlmICgoZmxhZ3MgJiBGTEFHX0NPTVBBVCkgIT0gMCkKKwkJICAgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKyMgZW5kaWYKKwkJfQorCSAgICAgIGVsc2UKKwkJKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworCSAgICAgIGlmICgrK25leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCisJCW5leHRfYXJnLnVsID0gcmVzdC51bDsKKwkgICAgICBmcGFyZ19jb3VudCsrOworCSAgICAgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVsxXTsKKwkgICAgICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCAmJiBpIDwgbmZpeGVkYXJncykKKwkJeworCQkgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworIyBpZiBfQ0FMTF9FTEYgIT0gMgorCQkgIGlmICgoZmxhZ3MgJiBGTEFHX0NPTVBBVCkgIT0gMCkKKwkJICAgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKyMgZW5kaWYKKwkJfQorCSAgICAgIGVsc2UKKwkJKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworCSAgICAgIGlmICgrK25leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCisJCW5leHRfYXJnLnVsID0gcmVzdC51bDsKKwkgICAgICBmcGFyZ19jb3VudCsrOworCSAgICAgIEZGSV9BU1NFUlQgKF9fTERCTF9NQU5UX0RJR19fID09IDEwNik7CisJICAgICAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIC8qIEZhbGwgdGhyb3VnaC4gICovCisjZW5kaWYKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkgIGRvdWJsZV90bXAgPSAqKnBfYXJndi5kOworCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgJiYgaSA8IG5maXhlZGFyZ3MpCisJICAgIHsKKwkgICAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKyNpZiBfQ0FMTF9FTEYgIT0gMgorCSAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0NPTVBBVCkgIT0gMCkKKwkJKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworI2VuZGlmCisJICAgIH0KKwkgIGVsc2UKKwkgICAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworCSAgaWYgKCsrbmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKKwkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOworCSAgZnBhcmdfY291bnQrKzsKKwkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX0ZMT0FUOgorCSAgZG91YmxlX3RtcCA9ICoqcF9hcmd2LmY7CisJICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCAmJiBpIDwgbmZpeGVkYXJncykKKwkgICAgeworCSAgICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworI2lmIF9DQUxMX0VMRiAhPSAyCisJICAgICAgaWYgKChmbGFncyAmIEZMQUdfQ09NUEFUKSAhPSAwKQorCQkqbmV4dF9hcmcuZiA9IChmbG9hdCkgZG91YmxlX3RtcDsKKyNlbmRpZgorCSAgICB9CisJICBlbHNlCisJICAgICpuZXh0X2FyZy5mID0gKGZsb2F0KSBkb3VibGVfdG1wOworCSAgaWYgKCsrbmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKKwkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOworCSAgZnBhcmdfY291bnQrKzsKKwkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIGlmICgoZWNpZi0+Y2lmLT5hYmkgJiBGRklfTElOVVhfU1RSVUNUX0FMSUdOKSAhPSAwKQorCSAgICB7CisJICAgICAgYWxpZ24gPSAoKnB0ciktPmFsaWdubWVudDsKKwkgICAgICBpZiAoYWxpZ24gPiAxNikKKwkJYWxpZ24gPSAxNjsKKwkgICAgICBpZiAoYWxpZ24gPiAxKQorCQluZXh0X2FyZy5wID0gQUxJR04gKG5leHRfYXJnLnAsIGFsaWduKTsKKwkgICAgfQorI2lmIF9DQUxMX0VMRiA9PSAyCisJICBlbHQgPSBkaXNjb3Zlcl9ob21vZ2VuZW91c19hZ2dyZWdhdGUgKCpwdHIsICZlbG51bSk7CisJICBpZiAoZWx0KQorCSAgICB7CisJICAgICAgdW5pb24geworCQl2b2lkICp2OworCQlmbG9hdCAqZjsKKwkJZG91YmxlICpkOworCSAgICAgIH0gYXJnOworCisJICAgICAgYXJnLnYgPSAqcF9hcmd2LnY7CisJICAgICAgaWYgKGVsdCA9PSBGRklfVFlQRV9GTE9BVCkKKwkJeworCQkgIGRvCisJCSAgICB7CisJCSAgICAgIGRvdWJsZV90bXAgPSAqYXJnLmYrKzsKKwkJICAgICAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQKKwkJCSAgJiYgaSA8IG5maXhlZGFyZ3MpCisJCQkqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKwkJICAgICAgZWxzZQorCQkJKm5leHRfYXJnLmYgPSAoZmxvYXQpIGRvdWJsZV90bXA7CisJCSAgICAgIGlmICgrK25leHRfYXJnLmYgPT0gZ3ByX2VuZC5mKQorCQkJbmV4dF9hcmcuZiA9IHJlc3QuZjsKKwkJICAgICAgZnBhcmdfY291bnQrKzsKKwkJICAgIH0KKwkJICB3aGlsZSAoLS1lbG51bSAhPSAwKTsKKwkJICBpZiAoKG5leHRfYXJnLnAgJiAzKSAhPSAwKQorCQkgICAgeworCQkgICAgICBpZiAoKytuZXh0X2FyZy5mID09IGdwcl9lbmQuZikKKwkJCW5leHRfYXJnLmYgPSByZXN0LmY7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCWRvCisJCSAgeworCQkgICAgZG91YmxlX3RtcCA9ICphcmcuZCsrOworCQkgICAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgJiYgaSA8IG5maXhlZGFyZ3MpCisJCSAgICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworCQkgICAgZWxzZQorCQkgICAgICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisJCSAgICBpZiAoKytuZXh0X2FyZy5kID09IGdwcl9lbmQuZCkKKwkJICAgICAgbmV4dF9hcmcuZCA9IHJlc3QuZDsKKwkJICAgIGZwYXJnX2NvdW50Kys7CisJCSAgfQorCQl3aGlsZSAoLS1lbG51bSAhPSAwKTsKKwkgICAgfQorCSAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkgICAgICB3b3JkcyA9ICgoKnB0ciktPnNpemUgKyA3KSAvIDg7CisJICAgICAgaWYgKG5leHRfYXJnLnVsID49IGdwcl9iYXNlLnVsICYmIG5leHRfYXJnLnVsICsgd29yZHMgPiBncHJfZW5kLnVsKQorCQl7CisJCSAgc2l6ZV90IGZpcnN0ID0gZ3ByX2VuZC5jIC0gbmV4dF9hcmcuYzsKKwkJICBtZW1jcHkgKG5leHRfYXJnLmMsICpwX2FyZ3YuYywgZmlyc3QpOworCQkgIG1lbWNweSAocmVzdC5jLCAqcF9hcmd2LmMgKyBmaXJzdCwgKCpwdHIpLT5zaXplIC0gZmlyc3QpOworCQkgIG5leHRfYXJnLmMgPSByZXN0LmMgKyB3b3JkcyAqIDggLSBmaXJzdDsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGNoYXIgKndoZXJlID0gbmV4dF9hcmcuYzsKKworI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCQkgIC8qIFN0cnVjdHVyZXMgd2l0aCBzaXplIGxlc3MgdGhhbiBlaWdodCBieXRlcyBhcmUgcGFzc2VkCisJCSAgICAgbGVmdC1wYWRkZWQuICAqLworCQkgIGlmICgoKnB0ciktPnNpemUgPCA4KQorCQkgICAgd2hlcmUgKz0gOCAtICgqcHRyKS0+c2l6ZTsKKyNlbmRpZgorCQkgIG1lbWNweSAod2hlcmUsICpwX2FyZ3YuYywgKCpwdHIpLT5zaXplKTsKKwkJICBuZXh0X2FyZy51bCArPSB3b3JkczsKKwkJICBpZiAobmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKKwkJICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKKwkJfQorCSAgICB9CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVjOworCSAgZ290byBwdXRncHI7CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc2M7CisJICBnb3RvIHB1dGdwcjsKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3YudXM7CisJICBnb3RvIHB1dGdwcjsKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc3M7CisJICBnb3RvIHB1dGdwcjsKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWk7CisJICBnb3RvIHB1dGdwcjsKKwljYXNlIEZGSV9UWVBFX0lOVDoKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc2k7CisJICBnb3RvIHB1dGdwcjsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWw7CisJcHV0Z3ByOgorCSAgKm5leHRfYXJnLnVsKysgPSBncHJ2YWx1ZTsKKwkgIGlmIChuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQorCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7CisJICBicmVhazsKKwl9CisgICAgfQorCisgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR180X0dQUl9BUkdVTUVOVFMKKwkgICAgICB8fCAobmV4dF9hcmcudWwgPj0gZ3ByX2Jhc2UudWwKKwkJICAmJiBuZXh0X2FyZy51bCA8PSBncHJfYmFzZS51bCArIDQpKTsKK30KKworCisjaWYgX0NBTExfRUxGID09IDIKKyNkZWZpbmUgTUlOX0NBQ0hFX0xJTkVfU0laRSA4CisKK3N0YXRpYyB2b2lkCitmbHVzaF9pY2FjaGUgKGNoYXIgKndyYWRkciwgY2hhciAqeGFkZHIsIGludCBzaXplKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gTUlOX0NBQ0hFX0xJTkVfU0laRSkKKyAgICBfX2FzbV9fIHZvbGF0aWxlICgiaWNiaSAwLCUwOyIgImRjYmYgMCwlMTsiCisJCSAgICAgIDogOiAiciIgKHhhZGRyICsgaSksICJyIiAod3JhZGRyICsgaSkgOiAibWVtb3J5Iik7CisgIF9fYXNtX18gdm9sYXRpbGUgKCJpY2JpIDAsJTA7IiAiZGNiZiAwLCUxOyIgInN5bmM7IiAiaXN5bmM7IgorCQkgICAgOiA6ICJyIih4YWRkciArIHNpemUgLSAxKSwgInIiKHdyYWRkciArIHNpemUgLSAxKQorCQkgICAgOiAibWVtb3J5Iik7Cit9CisjZW5kaWYKKworZmZpX3N0YXR1cworZmZpX3ByZXBfY2xvc3VyZV9sb2NfbGludXg2NCAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsCisJCQkgICAgICBmZmlfY2lmICpjaWYsCisJCQkgICAgICB2b2lkICgqZnVuKSAoZmZpX2NpZiAqLCB2b2lkICosIHZvaWQgKiosIHZvaWQgKiksCisJCQkgICAgICB2b2lkICp1c2VyX2RhdGEsCisJCQkgICAgICB2b2lkICpjb2RlbG9jKQoreworI2lmIF9DQUxMX0VMRiA9PSAyCisgIHVuc2lnbmVkIGludCAqdHJhbXAgPSAodW5zaWduZWQgaW50ICopICZjbG9zdXJlLT50cmFtcFswXTsKKworICBpZiAoY2lmLT5hYmkgPCBGRklfTElOVVggfHwgY2lmLT5hYmkgPj0gRkZJX0xBU1RfQUJJKQorICAgIHJldHVybiBGRklfQkFEX0FCSTsKKworICB0cmFtcFswXSA9IDB4ZTk2YzAwMTg7CS8qIDA6CWxkCTExLDJmLTBiKDEyKQkqLworICB0cmFtcFsxXSA9IDB4ZTk4YzAwMTA7CS8qCWxkCTEyLDFmLTBiKDEyKQkqLworICB0cmFtcFsyXSA9IDB4N2Q4OTAzYTY7CS8qCW10Y3RyCTEyCQkqLworICB0cmFtcFszXSA9IDB4NGU4MDA0MjA7CS8qCWJjdHIJCQkqLworCQkJCS8qIDE6CS5xdWFkCWZ1bmN0aW9uX2FkZHIJKi8KKwkJCQkvKiAyOgkucXVhZAljb250ZXh0CQkqLworICAqKHZvaWQgKiopICZ0cmFtcFs0XSA9ICh2b2lkICopIGZmaV9jbG9zdXJlX0xJTlVYNjQ7CisgICoodm9pZCAqKikgJnRyYW1wWzZdID0gY29kZWxvYzsKKyAgZmx1c2hfaWNhY2hlICgoY2hhciAqKXRyYW1wLCAoY2hhciAqKWNvZGVsb2MsIEZGSV9UUkFNUE9MSU5FX1NJWkUpOworI2Vsc2UKKyAgdm9pZCAqKnRyYW1wID0gKHZvaWQgKiopICZjbG9zdXJlLT50cmFtcFswXTsKKworICBpZiAoY2lmLT5hYmkgPCBGRklfTElOVVggfHwgY2lmLT5hYmkgPj0gRkZJX0xBU1RfQUJJKQorICAgIHJldHVybiBGRklfQkFEX0FCSTsKKworICAvKiBDb3B5IGZ1bmN0aW9uIGFkZHJlc3MgYW5kIFRPQyBmcm9tIGZmaV9jbG9zdXJlX0xJTlVYNjQuICAqLworICBtZW1jcHkgKHRyYW1wLCAoY2hhciAqKSBmZmlfY2xvc3VyZV9MSU5VWDY0LCAxNik7CisgIHRyYW1wWzJdID0gdHJhbXBbMV07CisgIHRyYW1wWzFdID0gY29kZWxvYzsKKyNlbmRpZgorCisgIGNsb3N1cmUtPmNpZiA9IGNpZjsKKyAgY2xvc3VyZS0+ZnVuID0gZnVuOworICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKworCitpbnQgRkZJX0hJRERFTgorZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICpydmFsdWUsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqcHN0LCBmZmlfZGJsZmwgKnBmcikKK3sKKyAgLyogcnZhbHVlIGlzIHRoZSBwb2ludGVyIHRvIHNwYWNlIGZvciByZXR1cm4gdmFsdWUgaW4gY2xvc3VyZSBhc3NlbWJseSAqLworICAvKiBwc3QgaXMgdGhlIHBvaW50ZXIgdG8gcGFyYW1ldGVyIHNhdmUgYXJlYQorICAgICAocjMtcjEwIGFyZSBzdG9yZWQgaW50byBpdHMgZmlyc3QgOCBzbG90cyBieSBmZmlfY2xvc3VyZV9MSU5VWDY0KSAqLworICAvKiBwZnIgaXMgdGhlIHBvaW50ZXIgdG8gd2hlcmUgZjEtZjEzIGFyZSBzdG9yZWQgaW4gZmZpX2Nsb3N1cmVfTElOVVg2NCAqLworCisgIHZvaWQgKiphdmFsdWU7CisgIGZmaV90eXBlICoqYXJnX3R5cGVzOworICB1bnNpZ25lZCBsb25nIGksIGF2biwgbmZpeGVkYXJnczsKKyAgZmZpX2NpZiAqY2lmOworICBmZmlfZGJsZmwgKmVuZF9wZnIgPSBwZnIgKyBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NDsKKyAgdW5zaWduZWQgbG9uZyBhbGlnbjsKKworICBjaWYgPSBjbG9zdXJlLT5jaWY7CisgIGF2YWx1ZSA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7CisKKyAgLyogQ29weSB0aGUgY2FsbGVyJ3Mgc3RydWN0dXJlIHJldHVybiB2YWx1ZSBhZGRyZXNzIHNvIHRoYXQgdGhlCisgICAgIGNsb3N1cmUgcmV0dXJucyB0aGUgZGF0YSBkaXJlY3RseSB0byB0aGUgY2FsbGVyLiAgKi8KKyAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiAoY2lmLT5mbGFncyAmIEZMQUdfUkVUVVJOU19TTVNUKSA9PSAwKQorICAgIHsKKyAgICAgIHJ2YWx1ZSA9ICh2b2lkICopICpwc3Q7CisgICAgICBwc3QrKzsKKyAgICB9CisKKyAgaSA9IDA7CisgIGF2biA9IGNpZi0+bmFyZ3M7CisjaWYgX0NBTExfRUxGICE9IDIKKyAgbmZpeGVkYXJncyA9ICh1bnNpZ25lZCkgLTE7CisgIGlmICgoY2lmLT5mbGFncyAmIEZMQUdfQ09NUEFUKSA9PSAwKQorI2VuZGlmCisgICAgbmZpeGVkYXJncyA9IGNpZi0+bmZpeGVkYXJnczsKKyAgYXJnX3R5cGVzID0gY2lmLT5hcmdfdHlwZXM7CisKKyAgLyogR3JhYiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUgc3RhY2sgZnJhbWUuICAqLworICB3aGlsZSAoaSA8IGF2bikKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgZWx0LCBlbG51bTsKKworICAgICAgc3dpdGNoIChhcmdfdHlwZXNbaV0tPnR5cGUpCisJeworCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJY2FzZSBGRklfVFlQRV9VSU5UODoKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKwkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDc7CisJICBwc3QrKzsKKwkgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKwkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDY7CisJICBwc3QrKzsKKwkgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKwkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDQ7CisJICBwc3QrKzsKKwkgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICBhdmFsdWVbaV0gPSBwc3Q7CisJICBwc3QrKzsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICBpZiAoKGNpZi0+YWJpICYgRkZJX0xJTlVYX1NUUlVDVF9BTElHTikgIT0gMCkKKwkgICAgeworCSAgICAgIGFsaWduID0gYXJnX3R5cGVzW2ldLT5hbGlnbm1lbnQ7CisJICAgICAgaWYgKGFsaWduID4gMTYpCisJCWFsaWduID0gMTY7CisJICAgICAgaWYgKGFsaWduID4gMSkKKwkJcHN0ID0gKHVuc2lnbmVkIGxvbmcgKikgQUxJR04gKChzaXplX3QpIHBzdCwgYWxpZ24pOworCSAgICB9CisJICBlbHQgPSAwOworI2lmIF9DQUxMX0VMRiA9PSAyCisJICBlbHQgPSBkaXNjb3Zlcl9ob21vZ2VuZW91c19hZ2dyZWdhdGUgKGFyZ190eXBlc1tpXSwgJmVsbnVtKTsKKyNlbmRpZgorCSAgaWYgKGVsdCkKKwkgICAgeworCSAgICAgIHVuaW9uIHsKKwkJdm9pZCAqdjsKKwkJdW5zaWduZWQgbG9uZyAqdWw7CisJCWZsb2F0ICpmOworCQlkb3VibGUgKmQ7CisJCXNpemVfdCBwOworCSAgICAgIH0gdG8sIGZyb207CisKKwkgICAgICAvKiBSZXBhY2thZ2UgdGhlIGFnZ3JlZ2F0ZSBmcm9tIGl0cyBwYXJ0cy4gIFRoZQorCQkgYWdncmVnYXRlIHNpemUgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgc3BhY2UgdGFrZW4gYnkKKwkJIHRoZSByZWdpc3RlcnMgc28gc3RvcmUgYmFjayB0byB0aGUgcmVnaXN0ZXIvcGFyYW1ldGVyCisJCSBzYXZlIGFycmF5cy4gICovCisJICAgICAgaWYgKHBmciArIGVsbnVtIDw9IGVuZF9wZnIpCisJCXRvLnYgPSBwZnI7CisJICAgICAgZWxzZQorCQl0by52ID0gcHN0OworCisJICAgICAgYXZhbHVlW2ldID0gdG8udjsKKwkgICAgICBmcm9tLnVsID0gcHN0OworCSAgICAgIGlmIChlbHQgPT0gRkZJX1RZUEVfRkxPQVQpCisJCXsKKwkJICBkbworCQkgICAgeworCQkgICAgICBpZiAocGZyIDwgZW5kX3BmciAmJiBpIDwgbmZpeGVkYXJncykKKwkJCXsKKwkJCSAgKnRvLmYgPSAoZmxvYXQpIHBmci0+ZDsKKwkJCSAgcGZyKys7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCSp0by5mID0gKmZyb20uZjsKKwkJICAgICAgdG8uZisrOworCQkgICAgICBmcm9tLmYrKzsKKwkJICAgIH0KKwkJICB3aGlsZSAoLS1lbG51bSAhPSAwKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGRvCisJCSAgICB7CisJCSAgICAgIGlmIChwZnIgPCBlbmRfcGZyICYmIGkgPCBuZml4ZWRhcmdzKQorCQkJeworCQkJICAqdG8uZCA9IHBmci0+ZDsKKwkJCSAgcGZyKys7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCSp0by5kID0gKmZyb20uZDsKKwkJICAgICAgdG8uZCsrOworCQkgICAgICBmcm9tLmQrKzsKKwkJICAgIH0KKwkJICB3aGlsZSAoLS1lbG51bSAhPSAwKTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKwkgICAgICAvKiBTdHJ1Y3R1cmVzIHdpdGggc2l6ZSBsZXNzIHRoYW4gZWlnaHQgYnl0ZXMgYXJlIHBhc3NlZAorCQkgbGVmdC1wYWRkZWQuICAqLworCSAgICAgIGlmIChhcmdfdHlwZXNbaV0tPnNpemUgPCA4KQorCQlhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyA4IC0gYXJnX3R5cGVzW2ldLT5zaXplOworCSAgICAgIGVsc2UKKyNlbmRpZgorCQlhdmFsdWVbaV0gPSBwc3Q7CisJICAgIH0KKwkgIHBzdCArPSAoYXJnX3R5cGVzW2ldLT5zaXplICsgNykgLyA4OworCSAgYnJlYWs7CisKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKwkgIGlmICgoY2lmLT5hYmkgJiBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4KSAhPSAwKQorCSAgICB7CisJICAgICAgaWYgKHBmciArIDEgPCBlbmRfcGZyICYmIGkgKyAxIDwgbmZpeGVkYXJncykKKwkJeworCQkgIGF2YWx1ZVtpXSA9IHBmcjsKKwkJICBwZnIgKz0gMjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChwZnIgPCBlbmRfcGZyICYmIGkgPCBuZml4ZWRhcmdzKQorCQkgICAgeworCQkgICAgICAvKiBQYXNzZWQgcGFydGx5IGluIGYxMyBhbmQgcGFydGx5IG9uIHRoZSBzdGFjay4KKwkJCSBNb3ZlIGl0IGFsbCB0byB0aGUgc3RhY2suICAqLworCQkgICAgICAqcHN0ID0gKih1bnNpZ25lZCBsb25nICopIHBmcjsKKwkJICAgICAgcGZyKys7CisJCSAgICB9CisJCSAgYXZhbHVlW2ldID0gcHN0OworCQl9CisJICAgICAgcHN0ICs9IDI7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIC8qIEZhbGwgdGhyb3VnaC4gICovCisjZW5kaWYKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkgIC8qIE9uIHRoZSBvdXRnb2luZyBzdGFjayBhbGwgdmFsdWVzIGFyZSBhbGlnbmVkIHRvIDggKi8KKwkgIC8qIHRoZXJlIGFyZSAxMyA2NGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KKworCSAgaWYgKHBmciA8IGVuZF9wZnIgJiYgaSA8IG5maXhlZGFyZ3MpCisJICAgIHsKKwkgICAgICBhdmFsdWVbaV0gPSBwZnI7CisJICAgICAgcGZyKys7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgYXZhbHVlW2ldID0gcHN0OworCSAgcHN0Kys7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJICBpZiAocGZyIDwgZW5kX3BmciAmJiBpIDwgbmZpeGVkYXJncykKKwkgICAgeworCSAgICAgIC8qIEZsb2F0IHZhbHVlcyBhcmUgc3RvcmVkIGFzIGRvdWJsZXMgaW4gdGhlCisJCSBmZmlfY2xvc3VyZV9MSU5VWDY0IGNvZGUuICBGaXggdGhlbSBoZXJlLiAgKi8KKwkgICAgICBwZnItPmYgPSAoZmxvYXQpIHBmci0+ZDsKKwkgICAgICBhdmFsdWVbaV0gPSBwZnI7CisJICAgICAgcGZyKys7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgYXZhbHVlW2ldID0gcHN0OworCSAgcHN0Kys7CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICBGRklfQVNTRVJUICgwKTsKKwl9CisKKyAgICAgIGkrKzsKKyAgICB9CisKKworICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCBydmFsdWUsIGF2YWx1ZSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKworICAvKiBUZWxsIGZmaV9jbG9zdXJlX0xJTlVYNjQgaG93IHRvIHBlcmZvcm0gcmV0dXJuIHR5cGUgcHJvbW90aW9ucy4gICovCisgIGlmICgoY2lmLT5mbGFncyAmIEZMQUdfUkVUVVJOU19TTVNUKSAhPSAwKQorICAgIHsKKyAgICAgIGlmICgoY2lmLT5mbGFncyAmIEZMQUdfUkVUVVJOU19GUCkgPT0gMCkKKwlyZXR1cm4gRkZJX1YyX1RZUEVfU01BTExfU1RSVUNUICsgY2lmLT5ydHlwZS0+c2l6ZSAtIDE7CisgICAgICBlbHNlIGlmICgoY2lmLT5mbGFncyAmIEZMQUdfUkVUVVJOU182NEJJVFMpICE9IDApCisJcmV0dXJuIEZGSV9WMl9UWVBFX0RPVUJMRV9IT01PRzsKKyAgICAgIGVsc2UKKwlyZXR1cm4gRkZJX1YyX1RZUEVfRkxPQVRfSE9NT0c7CisgICAgfQorICByZXR1cm4gY2lmLT5ydHlwZS0+dHlwZTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfcG93ZXJwYy5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfcG93ZXJwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNjE2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9wb3dlcnBjLmgKQEAgLTAsMCArMSw3NyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZmaV9wb3dlcnBjLmggLSBDb3B5cmlnaHQgKEMpIDIwMTMgSUJNCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIEFudGhvbnkgR3JlZW4KKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgS3lsZSBNb2ZmZXR0CisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYworICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYworICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5OCBHZW9mZnJleSBLZWF0aW5nCisKKyAgIFBvd2VyUEMgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworZW51bSB7CisgIC8qIFRoZSBhc3NlbWJseSBkZXBlbmRzIG9uIHRoZXNlIGV4YWN0IGZsYWdzLiAgKi8KKyAgLyogVGhlc2UgZ28gaW4gY3I3ICovCisgIEZMQUdfUkVUVVJOU19TTVNUCT0gMSA8PCAoMzEtMzEpLCAvKiBVc2VkIGZvciBGRklfU1lTViBzbWFsbCBzdHJ1Y3RzLiAgKi8KKyAgRkxBR19SRVRVUk5TX05PVEhJTkcgID0gMSA8PCAoMzEtMzApLAorICBGTEFHX1JFVFVSTlNfRlAgICAgICAgPSAxIDw8ICgzMS0yOSksCisgIEZMQUdfUkVUVVJOU182NEJJVFMgICA9IDEgPDwgKDMxLTI4KSwKKworICAvKiBUaGlzIGdvZXMgaW4gY3I2ICovCisgIEZMQUdfUkVUVVJOU18xMjhCSVRTICA9IDEgPDwgKDMxLTI3KSwKKworICBGTEFHX0NPTVBBVAkJPSAxIDw8ICgzMS0gOCksIC8qIE5vdCB1c2VkIGJ5IGFzc2VtYmx5ICovCisKKyAgLyogVGhlc2UgZ28gaW4gY3IxICovCisgIEZMQUdfQVJHX05FRURTX0NPUFkgICA9IDEgPDwgKDMxLSA3KSwgLyogVXNlZCBieSBzeXN2IGNvZGUgKi8KKyAgRkxBR19BUkdfTkVFRFNfUFNBVkUgID0gRkxBR19BUkdfTkVFRFNfQ09QWSwgLyogVXNlZCBieSBsaW51eDY0IGNvZGUgKi8KKyAgRkxBR19GUF9BUkdVTUVOVFMgICAgID0gMSA8PCAoMzEtIDYpLCAvKiBjcjEuZXE7IHNwZWNpZmllZCBieSBBQkkgKi8KKyAgRkxBR180X0dQUl9BUkdVTUVOVFMgID0gMSA8PCAoMzEtIDUpLAorICBGTEFHX1JFVFZBTF9SRUZFUkVOQ0UgPSAxIDw8ICgzMS0gNCkKK307CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgZmxvYXQgZjsKKyAgZG91YmxlIGQ7Cit9IGZmaV9kYmxmbDsKKwordm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX1NZU1YgKHZvaWQpOwordm9pZCBGRklfSElEREVOIGZmaV9jYWxsX1NZU1YoZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwKKwkJCSAgICAgIHZvaWQgKCopKHZvaWQpKTsKKwordm9pZCBGRklfSElEREVOIGZmaV9wcmVwX3R5cGVzX3N5c3YgKGZmaV9hYmkpOworZmZpX3N0YXR1cyBGRklfSElEREVOIGZmaV9wcmVwX2NpZl9zeXN2IChmZmlfY2lmICopOworaW50IEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YgKGZmaV9jbG9zdXJlICosIHZvaWQgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkJCQlmZmlfZGJsZmwgKiwgdW5zaWduZWQgbG9uZyAqKTsKKwordm9pZCBGRklfSElEREVOIGZmaV9jYWxsX0xJTlVYNjQoZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJIHVuc2lnbmVkIGxvbmcgKiwgdm9pZCAoKikodm9pZCkpOwordm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX0xJTlVYNjQgKHZvaWQpOworCit2b2lkIEZGSV9ISURERU4gZmZpX3ByZXBfdHlwZXNfbGludXg2NCAoZmZpX2FiaSk7CitmZmlfc3RhdHVzIEZGSV9ISURERU4gZmZpX3ByZXBfY2lmX2xpbnV4NjQgKGZmaV9jaWYgKik7CitmZmlfc3RhdHVzIEZGSV9ISURERU4gZmZpX3ByZXBfY2lmX2xpbnV4NjRfdmFyIChmZmlfY2lmICosIHVuc2lnbmVkIGludCwKKwkJCQkJCXVuc2lnbmVkIGludCk7Cit2b2lkIEZGSV9ISURERU4gZmZpX3ByZXBfYXJnczY0IChleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQgbG9uZyAqY29uc3QpOworaW50IEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQgKGZmaV9jbG9zdXJlICosIHZvaWQgKiwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyAqLCBmZmlfZGJsZmwgKik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9zeXN2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9zeXN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlODVmZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX3N5c3YuYwpAQCAtMCwwICsxLDkzMSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZmaV9zeXN2LmMgLSBDb3B5cmlnaHQgKEMpIDIwMTMgSUJNCisgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIEFudGhvbnkgR3JlZW4KKyAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgS3lsZSBNb2ZmZXR0CisgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYworICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYworICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5OCBHZW9mZnJleSBLZWF0aW5nCisKKyAgIFBvd2VyUEMgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgImZmaS5oIgorCisjaWZuZGVmIFBPV0VSUEM2NAorI2luY2x1ZGUgImZmaV9jb21tb24uaCIKKyNpbmNsdWRlICJmZmlfcG93ZXJwYy5oIgorCisKKy8qIEFib3V0IHRoZSBTWVNWIEFCSS4gICovCisjZGVmaW5lIEFTTV9ORUVEU19SRUdJU1RFUlMgNAorI2RlZmluZSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgOAorI2RlZmluZSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgOAorCisKKyNpZiBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgJiYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKy8qIEFkanVzdCBzaXplIG9mIGZmaV90eXBlX2xvbmdkb3VibGUuICAqLwordm9pZCBGRklfSElEREVOCitmZmlfcHJlcF90eXBlc19zeXN2IChmZmlfYWJpIGFiaSkKK3sKKyAgaWYgKChhYmkgJiAoRkZJX1NZU1YgfCBGRklfU1lTVl9MT05HX0RPVUJMRV8xMjgpKSA9PSBGRklfU1lTVikKKyAgICB7CisgICAgICBmZmlfdHlwZV9sb25nZG91YmxlLnNpemUgPSA4OworICAgICAgZmZpX3R5cGVfbG9uZ2RvdWJsZS5hbGlnbm1lbnQgPSA4OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZmaV90eXBlX2xvbmdkb3VibGUuc2l6ZSA9IDE2OworICAgICAgZmZpX3R5cGVfbG9uZ2RvdWJsZS5hbGlnbm1lbnQgPSAxNjsKKyAgICB9Cit9CisjZW5kaWYKKworLyogVHJhbnNmb3JtIGxvbmcgZG91YmxlLCBkb3VibGUgYW5kIGZsb2F0IHRvIG90aGVyIHR5cGVzIGFzIHBlciBhYmkuICAqLworc3RhdGljIGludAordHJhbnNsYXRlX2Zsb2F0IChpbnQgYWJpLCBpbnQgdHlwZSkKK3sKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorICBpZiAodHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFCisgICAgICAmJiAoYWJpICYgRkZJX1NZU1ZfTE9OR19ET1VCTEVfMTI4KSA9PSAwKQorICAgIHR5cGUgPSBGRklfVFlQRV9ET1VCTEU7CisjZW5kaWYKKyAgaWYgKChhYmkgJiBGRklfU1lTVl9TT0ZUX0ZMT0FUKSAhPSAwKQorICAgIHsKKyAgICAgIGlmICh0eXBlID09IEZGSV9UWVBFX0ZMT0FUKQorCXR5cGUgPSBGRklfVFlQRV9VSU5UMzI7CisgICAgICBlbHNlIGlmICh0eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKKwl0eXBlID0gRkZJX1RZUEVfVUlOVDY0OworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisgICAgICBlbHNlIGlmICh0eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCisJdHlwZSA9IEZGSV9UWVBFX1VJTlQxMjg7CisgICAgfQorICBlbHNlIGlmICgoYWJpICYgRkZJX1NZU1ZfSUJNX0xPTkdfRE9VQkxFKSA9PSAwKQorICAgIHsKKyAgICAgIGlmICh0eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCisJdHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyNlbmRpZgorICAgIH0KKyAgcmV0dXJuIHR5cGU7Cit9CisKKy8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcgKi8KK3N0YXRpYyBmZmlfc3RhdHVzCitmZmlfcHJlcF9jaWZfc3lzdl9jb3JlIChmZmlfY2lmICpjaWYpCit7CisgIGZmaV90eXBlICoqcHRyOworICB1bnNpZ25lZCBieXRlczsKKyAgdW5zaWduZWQgaSwgZnBhcmdfY291bnQgPSAwLCBpbnRhcmdfY291bnQgPSAwOworICB1bnNpZ25lZCBmbGFncyA9IGNpZi0+ZmxhZ3M7CisgIHVuc2lnbmVkIHN0cnVjdF9jb3B5X3NpemUgPSAwOworICB1bnNpZ25lZCB0eXBlID0gY2lmLT5ydHlwZS0+dHlwZTsKKyAgdW5zaWduZWQgc2l6ZSA9IGNpZi0+cnR5cGUtPnNpemU7CisKKyAgLyogVGhlIG1hY2hpbmUtaW5kZXBlbmRlbnQgY2FsY3VsYXRpb24gb2YgY2lmLT5ieXRlcyBkb2Vzbid0IHdvcmsKKyAgICAgZm9yIHVzLiAgUmVkbyB0aGUgY2FsY3VsYXRpb24uICAqLworCisgIC8qIFNwYWNlIGZvciB0aGUgZnJhbWUgcG9pbnRlciwgY2FsbGVlJ3MgTFIsIGFuZCB0aGUgYXNtJ3MgdGVtcCByZWdzLiAgKi8KKyAgYnl0ZXMgPSAoMiArIEFTTV9ORUVEU19SRUdJU1RFUlMpICogc2l6ZW9mIChpbnQpOworCisgIC8qIFNwYWNlIGZvciB0aGUgR1BSIHJlZ2lzdGVycy4gICovCisgIGJ5dGVzICs9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAqIHNpemVvZiAoaW50KTsKKworICAvKiBSZXR1cm4gdmFsdWUgaGFuZGxpbmcuICBUaGUgcnVsZXMgZm9yIFNZU1YgYXJlIGFzIGZvbGxvd3M6CisgICAgIC0gMzItYml0IChvciBsZXNzKSBpbnRlZ2VyIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gZ3ByMzsKKyAgICAgLSBTdHJ1Y3R1cmVzIG9mIHNpemUgPD0gNCBieXRlcyBhbHNvIHJldHVybmVkIGluIGdwcjM7CisgICAgIC0gNjQtYml0IGludGVnZXIgdmFsdWVzIGFuZCBzdHJ1Y3R1cmVzIGJldHdlZW4gNSBhbmQgOCBieXRlcyBhcmUgcmV0dXJuZWQKKyAgICAgaW4gZ3ByMyBhbmQgZ3ByNDsKKyAgICAgLSBMYXJnZXIgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHNwYWNlIGFuZCBhIHBvaW50ZXIgaXMgcGFzc2VkIGFzCisgICAgIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICAgLSBTaW5nbGUvZG91YmxlIEZQIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gZnByMTsKKyAgICAgLSBsb25nIGRvdWJsZXMgKGlmIG5vdCBlcXVpdmFsZW50IHRvIGRvdWJsZSkgYXJlIHJldHVybmVkIGluCisgICAgIGZwcjEsZnByMiBmb3IgTGludXggYW5kIGFzIGZvciBsYXJnZSBzdHJ1Y3RzIGZvciBTeXNWLiAgKi8KKworICB0eXBlID0gdHJhbnNsYXRlX2Zsb2F0IChjaWYtPmFiaSwgdHlwZSk7CisKKyAgc3dpdGNoICh0eXBlKQorICAgIHsKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU18xMjhCSVRTOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzY0QklUUzsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19GUDsKKyNpZmRlZiBfX05PX0ZQUlNfXworICAgICAgcmV0dXJuIEZGSV9CQURfQUJJOworI2VuZGlmCisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfVUlOVDEyODoKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU18xMjhCSVRTOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU182NEJJVFM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorICAgICAgLyogVGhlIGZpbmFsIFNZU1YgQUJJIHNheXMgdGhhdCBzdHJ1Y3R1cmVzIHNtYWxsZXIgb3IgZXF1YWwgOCBieXRlcworCSBhcmUgcmV0dXJuZWQgaW4gcjMvcjQuICBBIGRyYWZ0IEFCSSB1c2VkIGJ5IGxpbnV4IGluc3RlYWQKKwkgcmV0dXJucyB0aGVtIGluIG1lbW9yeS4gICovCisgICAgICBpZiAoKGNpZi0+YWJpICYgRkZJX1NZU1ZfU1RSVUNUX1JFVCkgIT0gMCAmJiBzaXplIDw9IDgpCisJeworCSAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX1NNU1Q7CisJICBicmVhazsKKwl9CisgICAgICBpbnRhcmdfY291bnQrKzsKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVkFMX1JFRkVSRU5DRTsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgY2FzZSBGRklfVFlQRV9WT0lEOgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX05PVEhJTkc7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiBSZXR1cm5zIDMyLWJpdCBpbnRlZ2VyLCBvciBzaW1pbGFyLiAgTm90aGluZyB0byBkbyBoZXJlLiAgKi8KKyAgICAgIGJyZWFrOworICAgIH0KKworICAvKiBUaGUgZmlyc3QgTlVNX0dQUl9BUkdfUkVHSVNURVJTIHdvcmRzIG9mIGludGVnZXIgYXJndW1lbnRzLCBhbmQgdGhlCisgICAgIGZpcnN0IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyBmcCBhcmd1bWVudHMsIGdvIGluIHJlZ2lzdGVyczsgdGhlIHJlc3QKKyAgICAgZ29lcyBvbiB0aGUgc3RhY2suICBTdHJ1Y3R1cmVzIGFuZCBsb25nIGRvdWJsZXMgKGlmIG5vdCBlcXVpdmFsZW50CisgICAgIHRvIGRvdWJsZSkgYXJlIHBhc3NlZCBhcyBhIHBvaW50ZXIgdG8gYSBjb3B5IG9mIHRoZSBzdHJ1Y3R1cmUuCisgICAgIFN0dWZmIG9uIHRoZSBzdGFjayBuZWVkcyB0byBrZWVwIHByb3BlciBhbGlnbm1lbnQuICAqLworICBmb3IgKHB0ciA9IGNpZi0+YXJnX3R5cGVzLCBpID0gY2lmLT5uYXJnczsgaSA+IDA7IGktLSwgcHRyKyspCisgICAgeworICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZW51bSA9ICgqcHRyKS0+dHlwZTsKKworICAgICAgdHlwZW51bSA9IHRyYW5zbGF0ZV9mbG9hdCAoY2lmLT5hYmksIHR5cGVudW0pOworCisgICAgICBzd2l0Y2ggKHR5cGVudW0pCisJeworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorCSAgZnBhcmdfY291bnQrKzsKKwkgIC8qIEZhbGwgdGhydSAqLworI2VuZGlmCisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICBmcGFyZ19jb3VudCsrOworCSAgLyogSWYgdGhpcyBGUCBhcmcgaXMgZ29pbmcgb24gdGhlIHN0YWNrLCBpdCBtdXN0IGJlCisJICAgICA4LWJ5dGUtYWxpZ25lZC4gICovCisJICBpZiAoZnBhcmdfY291bnQgPiBOVU1fRlBSX0FSR19SRUdJU1RFUlMKKwkgICAgICAmJiBpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTCisJICAgICAgJiYgaW50YXJnX2NvdW50ICUgMiAhPSAwKQorCSAgICBpbnRhcmdfY291bnQrKzsKKyNpZmRlZiBfX05PX0ZQUlNfXworCSAgcmV0dXJuIEZGSV9CQURfQUJJOworI2VuZGlmCisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJICBmcGFyZ19jb3VudCsrOworI2lmZGVmIF9fTk9fRlBSU19fCisJICByZXR1cm4gRkZJX0JBRF9BQkk7CisjZW5kaWYKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UMTI4OgorCSAgLyogQSBsb25nIGRvdWJsZSBpbiBGRklfTElOVVhfU09GVF9GTE9BVCBjYW4gdXNlIG9ubHkgYSBzZXQKKwkgICAgIG9mIGZvdXIgY29uc2VjdXRpdmUgZ3Bycy4gSWYgd2UgZG8gbm90IGhhdmUgZW5vdWdoLCB3ZQorCSAgICAgaGF2ZSB0byBhZGp1c3QgdGhlIGludGFyZ19jb3VudCB2YWx1ZS4gICovCisJICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAtIDMKKwkgICAgICAmJiBpbnRhcmdfY291bnQgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisJICAgIGludGFyZ19jb3VudCA9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzsKKwkgIGludGFyZ19jb3VudCArPSA0OworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwkgIC8qICdsb25nIGxvbmcnIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGFzIHR3byB3b3JkcywgYnV0CisJICAgICBlaXRoZXIgYm90aCB3b3JkcyBtdXN0IGZpdCBpbiByZWdpc3RlcnMgb3IgYm90aCBnbworCSAgICAgb24gdGhlIHN0YWNrLiAgSWYgdGhleSBnbyBvbiB0aGUgc3RhY2ssIHRoZXkgbXVzdAorCSAgICAgYmUgOC1ieXRlLWFsaWduZWQuCisKKwkgICAgIEFsc28sIG9ubHkgY2VydGFpbiByZWdpc3RlciBwYWlycyBjYW4gYmUgdXNlZCBmb3IKKwkgICAgIHBhc3NpbmcgbG9uZyBsb25nIGludCAtLSBzcGVjaWZpY2FsbHkgKHIzLHI0KSwgKHI1LHI2KSwKKwkgICAgIChyNyxyOCksIChyOSxyMTApLiAgKi8KKwkgIGlmIChpbnRhcmdfY291bnQgPT0gTlVNX0dQUl9BUkdfUkVHSVNURVJTLTEKKwkgICAgICB8fCBpbnRhcmdfY291bnQgJSAyICE9IDApCisJICAgIGludGFyZ19jb3VudCsrOworCSAgaW50YXJnX2NvdW50ICs9IDI7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgLyogV2UgbXVzdCBhbGxvY2F0ZSBzcGFjZSBmb3IgYSBjb3B5IG9mIHRoZXNlIHRvIGVuZm9yY2UKKwkgICAgIHBhc3MtYnktdmFsdWUuICBQYWQgdGhlIHNwYWNlIHVwIHRvIGEgbXVsdGlwbGUgb2YgMTYKKwkgICAgIGJ5dGVzICh0aGUgbWF4aW11bSBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIGFueXRoaW5nIHVuZGVyCisJICAgICB0aGUgU1lTViBBQkkpLiAgKi8KKwkgIHN0cnVjdF9jb3B5X3NpemUgKz0gKCgqcHRyKS0+c2l6ZSArIDE1KSAmIH4weEY7CisJICAvKiBGYWxsIHRocm91Z2ggKGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgcG9pbnRlcikuICAqLworCisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCWNhc2UgRkZJX1RZUEVfSU5UOgorCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgIC8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBwYXNzZWQgYXMgYSA0LWJ5dGUgd29yZCBpbiBhIEdQUiwgZWl0aGVyCisJICAgICB0aGUgb2JqZWN0IGl0c2VsZiBvciBhIHBvaW50ZXIgdG8gaXQuICAqLworCSAgaW50YXJnX2NvdW50Kys7CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICBGRklfQVNTRVJUICgwKTsKKwl9CisgICAgfQorCisgIGlmIChmcGFyZ19jb3VudCAhPSAwKQorICAgIGZsYWdzIHw9IEZMQUdfRlBfQVJHVU1FTlRTOworICBpZiAoaW50YXJnX2NvdW50ID4gNCkKKyAgICBmbGFncyB8PSBGTEFHXzRfR1BSX0FSR1VNRU5UUzsKKyAgaWYgKHN0cnVjdF9jb3B5X3NpemUgIT0gMCkKKyAgICBmbGFncyB8PSBGTEFHX0FSR19ORUVEU19DT1BZOworCisgIC8qIFNwYWNlIGZvciB0aGUgRlBSIHJlZ2lzdGVycywgaWYgbmVlZGVkLiAgKi8KKyAgaWYgKGZwYXJnX2NvdW50ICE9IDApCisgICAgYnl0ZXMgKz0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTICogc2l6ZW9mIChkb3VibGUpOworCisgIC8qIFN0YWNrIHNwYWNlLiAgKi8KKyAgaWYgKGludGFyZ19jb3VudCA+IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKyAgICBieXRlcyArPSAoaW50YXJnX2NvdW50IC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTKSAqIHNpemVvZiAoaW50KTsKKyAgaWYgKGZwYXJnX2NvdW50ID4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorICAgIGJ5dGVzICs9IChmcGFyZ19jb3VudCAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUykgKiBzaXplb2YgKGRvdWJsZSk7CisKKyAgLyogVGhlIHN0YWNrIHNwYWNlIGFsbG9jYXRlZCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzLiAgKi8KKyAgYnl0ZXMgPSAoYnl0ZXMgKyAxNSkgJiB+MHhGOworCisgIC8qIEFkZCBpbiB0aGUgc3BhY2UgZm9yIHRoZSBjb3BpZWQgc3RydWN0dXJlcy4gICovCisgIGJ5dGVzICs9IHN0cnVjdF9jb3B5X3NpemU7CisKKyAgY2lmLT5mbGFncyA9IGZsYWdzOworICBjaWYtPmJ5dGVzID0gYnl0ZXM7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKworZmZpX3N0YXR1cyBGRklfSElEREVOCitmZmlfcHJlcF9jaWZfc3lzdiAoZmZpX2NpZiAqY2lmKQoreworICBpZiAoKGNpZi0+YWJpICYgRkZJX1NZU1YpID09IDApCisgICAgeworICAgICAgLyogVGhpcyBjYWxsIGlzIGZyb20gb2xkIGNvZGUuICBUcmFuc2xhdGUgdG8gbmV3IEFCSSB2YWx1ZXMuICAqLworICAgICAgY2lmLT5mbGFncyB8PSBGTEFHX0NPTVBBVDsKKyAgICAgIHN3aXRjaCAoY2lmLT5hYmkpCisJeworCWRlZmF1bHQ6CisJICByZXR1cm4gRkZJX0JBRF9BQkk7CisKKwljYXNlIEZGSV9DT01QQVRfU1lTVjoKKwkgIGNpZi0+YWJpID0gRkZJX1NZU1YgfCBGRklfU1lTVl9TVFJVQ1RfUkVUIHwgRkZJX1NZU1ZfTE9OR19ET1VCTEVfMTI4OworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9DT01QQVRfR0NDX1NZU1Y6CisJICBjaWYtPmFiaSA9IEZGSV9TWVNWIHwgRkZJX1NZU1ZfTE9OR19ET1VCTEVfMTI4OworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9DT01QQVRfTElOVVg6CisJICBjaWYtPmFiaSA9IChGRklfU1lTViB8IEZGSV9TWVNWX0lCTV9MT05HX0RPVUJMRQorCQkgICAgICB8IEZGSV9TWVNWX0xPTkdfRE9VQkxFXzEyOCk7CisJICBicmVhazsKKworCWNhc2UgRkZJX0NPTVBBVF9MSU5VWF9TT0ZUX0ZMT0FUOgorCSAgY2lmLT5hYmkgPSAoRkZJX1NZU1YgfCBGRklfU1lTVl9TT0ZUX0ZMT0FUIHwgRkZJX1NZU1ZfSUJNX0xPTkdfRE9VQkxFCisJCSAgICAgIHwgRkZJX1NZU1ZfTE9OR19ET1VCTEVfMTI4KTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisgIHJldHVybiBmZmlfcHJlcF9jaWZfc3lzdl9jb3JlIChjaWYpOworfQorCisvKiBmZmlfcHJlcF9hcmdzX1NZU1YgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKKyAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLgorCisgICBUaGUgc3RhY2sgbGF5b3V0IHdlIHdhbnQgbG9va3MgbGlrZSB0aGlzOgorCisgICB8ICAgUmV0dXJuIGFkZHJlc3MgZnJvbSBmZmlfY2FsbF9TWVNWIDRieXRlcwl8CWhpZ2hlciBhZGRyZXNzZXMKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgIHwgICBQcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlcgk0CXwgICAgICAgc3RhY2sgcG9pbnRlciBoZXJlCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18PCsgPDw8CW9uIGVudHJ5IHRvCisgICB8ICAgU2F2ZWQgcjI4LXIzMQkJCTQqNAl8IHwJZmZpX2NhbGxfU1lTVgorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CisgICB8ICAgR1BSIHJlZ2lzdGVycyByMy1yMTAJCTgqNAl8IHwJZmZpX2NhbGxfU1lTVgorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CisgICB8ICAgRlBSIHJlZ2lzdGVycyBmMS1mOCAob3B0aW9uYWwpCTgqOAl8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlzdGFjawl8CisgICB8ICAgU3BhY2UgZm9yIGNvcGllZCBzdHJ1Y3R1cmVzCQl8IHwJZ3Jvd3MJfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CWRvd24gICAgVgorICAgfCAgIFBhcmFtZXRlcnMgdGhhdCBkaWRuJ3QgZml0IGluIHJlZ2lzdGVycyAgfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJbG93ZXIgYWRkcmVzc2VzCisgICB8ICAgU3BhY2UgZm9yIGNhbGxlZSdzIExSCQk0CXwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CXN0YWNrIHBvaW50ZXIgaGVyZQorICAgfCAgIEN1cnJlbnQgYmFja2NoYWluIHBvaW50ZXIJNAl8LS8JZHVyaW5nCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgPDw8CWZmaV9jYWxsX1NZU1YKKworKi8KKwordm9pZCBGRklfSElEREVOCitmZmlfcHJlcF9hcmdzX1NZU1YgKGV4dGVuZGVkX2NpZiAqZWNpZiwgdW5zaWduZWQgKmNvbnN0IHN0YWNrKQoreworICBjb25zdCB1bnNpZ25lZCBieXRlcyA9IGVjaWYtPmNpZi0+Ynl0ZXM7CisgIGNvbnN0IHVuc2lnbmVkIGZsYWdzID0gZWNpZi0+Y2lmLT5mbGFnczsKKworICB0eXBlZGVmIHVuaW9uCisgIHsKKyAgICBjaGFyICpjOworICAgIHVuc2lnbmVkICp1OworICAgIGxvbmcgbG9uZyAqbGw7CisgICAgZmxvYXQgKmY7CisgICAgZG91YmxlICpkOworICB9IHZhbHA7CisKKyAgLyogJ3N0YWNrdG9wJyBwb2ludHMgYXQgdGhlIHByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyLiAgKi8KKyAgdmFscCBzdGFja3RvcDsKKworICAvKiAnZ3ByX2Jhc2UnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGdwcjMsIGFuZCBncm93cyB1cHdhcmRzIGFzCisgICAgIHdlIHVzZSBHUFIgcmVnaXN0ZXJzLiAgKi8KKyAgdmFscCBncHJfYmFzZTsKKyAgaW50IGludGFyZ19jb3VudDsKKworI2lmbmRlZiBfX05PX0ZQUlNfXworICAvKiAnZnByX2Jhc2UnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGZwcjEsIGFuZCBncm93cyB1cHdhcmRzIGFzCisgICAgIHdlIHVzZSBGUFIgcmVnaXN0ZXJzLiAgKi8KKyAgdmFscCBmcHJfYmFzZTsKKyAgaW50IGZwYXJnX2NvdW50OworI2VuZGlmCisKKyAgLyogJ2NvcHlfc3BhY2UnIGdyb3dzIGRvd24gYXMgd2UgcHV0IHN0cnVjdHVyZXMgaW4gaXQuICBJdCBzaG91bGQKKyAgICAgc3RheSAxNi1ieXRlIGFsaWduZWQuICAqLworICB2YWxwIGNvcHlfc3BhY2U7CisKKyAgLyogJ25leHRfYXJnJyBncm93cyB1cCBhcyB3ZSBwdXQgcGFyYW1ldGVycyBpbiBpdC4gICovCisgIHZhbHAgbmV4dF9hcmc7CisKKyAgaW50IGk7CisgIGZmaV90eXBlICoqcHRyOworI2lmbmRlZiBfX05PX0ZQUlNfXworICBkb3VibGUgZG91YmxlX3RtcDsKKyNlbmRpZgorICB1bmlvbgorICB7CisgICAgdm9pZCAqKnY7CisgICAgY2hhciAqKmM7CisgICAgc2lnbmVkIGNoYXIgKipzYzsKKyAgICB1bnNpZ25lZCBjaGFyICoqdWM7CisgICAgc2lnbmVkIHNob3J0ICoqc3M7CisgICAgdW5zaWduZWQgc2hvcnQgKip1czsKKyAgICB1bnNpZ25lZCBpbnQgKip1aTsKKyAgICBsb25nIGxvbmcgKipsbDsKKyAgICBmbG9hdCAqKmY7CisgICAgZG91YmxlICoqZDsKKyAgfSBwX2FyZ3Y7CisgIHNpemVfdCBzdHJ1Y3RfY29weV9zaXplOworICB1bnNpZ25lZCBncHJ2YWx1ZTsKKworICBzdGFja3RvcC5jID0gKGNoYXIgKikgc3RhY2sgKyBieXRlczsKKyAgZ3ByX2Jhc2UudSA9IHN0YWNrdG9wLnUgLSBBU01fTkVFRFNfUkVHSVNURVJTIC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTOworICBpbnRhcmdfY291bnQgPSAwOworI2lmbmRlZiBfX05PX0ZQUlNfXworICBmcHJfYmFzZS5kID0gZ3ByX2Jhc2UuZCAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzsKKyAgZnBhcmdfY291bnQgPSAwOworICBjb3B5X3NwYWNlLmMgPSAoKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpID8gZnByX2Jhc2UuYyA6IGdwcl9iYXNlLmMpOworI2Vsc2UKKyAgY29weV9zcGFjZS5jID0gZ3ByX2Jhc2UuYzsKKyNlbmRpZgorICBuZXh0X2FyZy51ID0gc3RhY2sgKyAyOworCisgIC8qIENoZWNrIHRoYXQgZXZlcnl0aGluZyBzdGFydHMgYWxpZ25lZCBwcm9wZXJseS4gICovCisgIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgKGNoYXIgKikgc3RhY2sgJiAweEYpID09IDApOworICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIGNvcHlfc3BhY2UuYyAmIDB4RikgPT0gMCk7CisgIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgc3RhY2t0b3AuYyAmIDB4RikgPT0gMCk7CisgIEZGSV9BU1NFUlQgKChieXRlcyAmIDB4RikgPT0gMCk7CisgIEZGSV9BU1NFUlQgKGNvcHlfc3BhY2UuYyA+PSBuZXh0X2FyZy5jKTsKKworICAvKiBEZWFsIHdpdGggcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSBwYXNzLWJ5LXJlZmVyZW5jZS4gICovCisgIGlmIChmbGFncyAmIEZMQUdfUkVUVkFMX1JFRkVSRU5DRSkKKyAgICB7CisgICAgICAqZ3ByX2Jhc2UudSsrID0gKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIGVjaWYtPnJ2YWx1ZTsKKyAgICAgIGludGFyZ19jb3VudCsrOworICAgIH0KKworICAvKiBOb3cgZm9yIHRoZSBhcmd1bWVudHMuICAqLworICBwX2FyZ3YudiA9IGVjaWYtPmF2YWx1ZTsKKyAgZm9yIChwdHIgPSBlY2lmLT5jaWYtPmFyZ190eXBlcywgaSA9IGVjaWYtPmNpZi0+bmFyZ3M7CisgICAgICAgaSA+IDA7CisgICAgICAgaS0tLCBwdHIrKywgcF9hcmd2LnYrKykKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgdHlwZW51bSA9ICgqcHRyKS0+dHlwZTsKKworICAgICAgdHlwZW51bSA9IHRyYW5zbGF0ZV9mbG9hdCAoZWNpZi0+Y2lmLT5hYmksIHR5cGVudW0pOworCisgICAgICAvKiBOb3cgdGVzdCB0aGUgdHJhbnNsYXRlZCB2YWx1ZSAqLworICAgICAgc3dpdGNoICh0eXBlbnVtKQorCXsKKyNpZm5kZWYgX19OT19GUFJTX18KKyMgaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKwljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisJICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMF07CisKKwkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgLSAxKQorCSAgICB7CisJICAgICAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMKKwkJICAmJiBpbnRhcmdfY291bnQgJSAyICE9IDApCisJCXsKKwkJICBpbnRhcmdfY291bnQrKzsKKwkJICBuZXh0X2FyZy51Kys7CisJCX0KKwkgICAgICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisJICAgICAgbmV4dF9hcmcudSArPSAyOworCSAgICAgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVsxXTsKKwkgICAgICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisJICAgICAgbmV4dF9hcmcudSArPSAyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKwkgICAgICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMV07CisJICAgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisJICAgIH0KKworCSAgZnBhcmdfY291bnQgKz0gMjsKKwkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOworCSAgYnJlYWs7CisjIGVuZGlmCisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICBkb3VibGVfdG1wID0gKipwX2FyZ3YuZDsKKworCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKwkgICAgeworCSAgICAgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTCisJCSAgJiYgaW50YXJnX2NvdW50ICUgMiAhPSAwKQorCQl7CisJCSAgaW50YXJnX2NvdW50Kys7CisJCSAgbmV4dF9hcmcudSsrOworCQl9CisJICAgICAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworCSAgICAgIG5leHRfYXJnLnUgKz0gMjsKKwkgICAgfQorCSAgZWxzZQorCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKwkgIGZwYXJnX2NvdW50Kys7CisJICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkgIGRvdWJsZV90bXAgPSAqKnBfYXJndi5mOworCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKwkgICAgeworCSAgICAgICpuZXh0X2FyZy5mID0gKGZsb2F0KSBkb3VibGVfdG1wOworCSAgICAgIG5leHRfYXJnLnUgKz0gMTsKKwkgICAgICBpbnRhcmdfY291bnQrKzsKKwkgICAgfQorCSAgZWxzZQorCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKwkgIGZwYXJnX2NvdW50Kys7CisJICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKKwkgIGJyZWFrOworI2VuZGlmIC8qIGhhdmUgRlBScyAqLworCisJY2FzZSBGRklfVFlQRV9VSU5UMTI4OgorCSAgLyogVGhlIHNvZnQgZmxvYXQgQUJJIGZvciBsb25nIGRvdWJsZXMgd29ya3MgbGlrZSB0aGlzLCBhIGxvbmcgZG91YmxlCisJICAgICBpcyBwYXNzZWQgaW4gZm91ciBjb25zZWN1dGl2ZSBHUFJzIGlmIGF2YWlsYWJsZS4gIEEgbWF4aW11bSBvZiAyCisJICAgICBsb25nIGRvdWJsZXMgY2FuIGJlIHBhc3NlZCBpbiBncHJzLiAgSWYgd2UgZG8gbm90IGhhdmUgNCBHUFJzCisJICAgICBsZWZ0LCB0aGUgbG9uZyBkb3VibGUgaXMgcGFzc2VkIG9uIHRoZSBzdGFjaywgNC1ieXRlIGFsaWduZWQuICAqLworCSAgeworCSAgICB1bnNpZ25lZCBpbnQgaW50X3RtcDsKKwkgICAgdW5zaWduZWQgaW50IGlpOworCSAgICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAtIDMpCisJICAgICAgeworCQlpZiAoaW50YXJnX2NvdW50IDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorCQkgIGludGFyZ19jb3VudCA9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzsKKwkJZm9yIChpaSA9IDA7IGlpIDwgNDsgaWkrKykKKwkJICB7CisJCSAgICBpbnRfdG1wID0gKCpwX2FyZ3YudWkpW2lpXTsKKwkJICAgICpuZXh0X2FyZy51KysgPSBpbnRfdG1wOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCWZvciAoaWkgPSAwOyBpaSA8IDQ7IGlpKyspCisJCSAgeworCQkgICAgaW50X3RtcCA9ICgqcF9hcmd2LnVpKVtpaV07CisJCSAgICAqZ3ByX2Jhc2UudSsrID0gaW50X3RtcDsKKwkJICB9CisJICAgICAgfQorCSAgICBpbnRhcmdfY291bnQgKz0gNDsKKwkgICAgYnJlYWs7CisJICB9CisKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwkgIGlmIChpbnRhcmdfY291bnQgPT0gTlVNX0dQUl9BUkdfUkVHSVNURVJTLTEpCisJICAgIGludGFyZ19jb3VudCsrOworCSAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisJICAgIHsKKwkgICAgICBpZiAoaW50YXJnX2NvdW50ICUgMiAhPSAwKQorCQl7CisJCSAgaW50YXJnX2NvdW50Kys7CisJCSAgbmV4dF9hcmcudSsrOworCQl9CisJICAgICAgKm5leHRfYXJnLmxsID0gKipwX2FyZ3YubGw7CisJICAgICAgbmV4dF9hcmcudSArPSAyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBUaGUgYWJpIHN0YXRlcyBvbmx5IGNlcnRhaW4gcmVnaXN0ZXIgcGFpcnMgY2FuIGJlCisJCSB1c2VkIGZvciBwYXNzaW5nIGxvbmcgbG9uZyBpbnQgc3BlY2lmaWNhbGx5IChyMyxyNCksCisJCSAocjUscjYpLCAocjcscjgpLCAocjkscjEwKS4gIElmIG5leHQgYXJnIGlzIGxvbmcgbG9uZworCQkgYnV0IG5vdCBjb3JyZWN0IHN0YXJ0aW5nIHJlZ2lzdGVyIG9mIHBhaXIgdGhlbiBza2lwCisJCSB1bnRpbCB0aGUgcHJvcGVyIHN0YXJ0aW5nIHJlZ2lzdGVyLiAgKi8KKwkgICAgICBpZiAoaW50YXJnX2NvdW50ICUgMiAhPSAwKQorCQl7CisJCSAgaW50YXJnX2NvdW50ICsrOworCQkgIGdwcl9iYXNlLnUrKzsKKwkJfQorCSAgICAgICpncHJfYmFzZS5sbCsrID0gKipwX2FyZ3YubGw7CisJICAgIH0KKwkgIGludGFyZ19jb3VudCArPSAyOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIHN0cnVjdF9jb3B5X3NpemUgPSAoKCpwdHIpLT5zaXplICsgMTUpICYgfjB4RjsKKwkgIGNvcHlfc3BhY2UuYyAtPSBzdHJ1Y3RfY29weV9zaXplOworCSAgbWVtY3B5IChjb3B5X3NwYWNlLmMsICpwX2FyZ3YuYywgKCpwdHIpLT5zaXplKTsKKworCSAgZ3BydmFsdWUgPSAodW5zaWduZWQgbG9uZykgY29weV9zcGFjZS5jOworCisJICBGRklfQVNTRVJUIChjb3B5X3NwYWNlLmMgPiBuZXh0X2FyZy5jKTsKKwkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19BUkdfTkVFRFNfQ09QWSk7CisJICBnb3RvIHB1dGdwcjsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVjOworCSAgZ290byBwdXRncHI7CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc2M7CisJICBnb3RvIHB1dGdwcjsKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3YudXM7CisJICBnb3RvIHB1dGdwcjsKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc3M7CisJICBnb3RvIHB1dGdwcjsKKworCWNhc2UgRkZJX1RZUEVfSU5UOgorCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKworCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51aTsKKworCXB1dGdwcjoKKwkgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorCSAgICAqbmV4dF9hcmcudSsrID0gZ3BydmFsdWU7CisJICBlbHNlCisJICAgICpncHJfYmFzZS51KysgPSBncHJ2YWx1ZTsKKwkgIGludGFyZ19jb3VudCsrOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICAvKiBDaGVjayB0aGF0IHdlIGRpZG4ndCBvdmVycnVuIHRoZSBzdGFjay4uLiAgKi8KKyAgRkZJX0FTU0VSVCAoY29weV9zcGFjZS5jID49IG5leHRfYXJnLmMpOworICBGRklfQVNTRVJUIChncHJfYmFzZS51IDw9IHN0YWNrdG9wLnUgLSBBU01fTkVFRFNfUkVHSVNURVJTKTsKKyAgLyogVGhlIGFzc2VydCBiZWxvdyBpcyB0ZXN0aW5nIHRoYXQgdGhlIG51bWJlciBvZiBpbnRlZ2VyIGFyZ3VtZW50cyBhZ3JlZXMKKyAgICAgd2l0aCB0aGUgbnVtYmVyIGZvdW5kIGluIGZmaV9wcmVwX2NpZl9tYWNoZGVwKCkuICBIb3dldmVyLCBpbnRhcmdfY291bnQKKyAgICAgaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgd2UgcGxhY2UgYW4gRlAgYXJnIG9uIHRoZSBzdGFjaywgc28gYWNjb3VudCBmb3IKKyAgICAgdGhhdCBiZWZvcmUgb3VyIGFzc2VydCB0ZXN0LiAgKi8KKyNpZm5kZWYgX19OT19GUFJTX18KKyAgaWYgKGZwYXJnX2NvdW50ID4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorICAgIGludGFyZ19jb3VudCAtPSBmcGFyZ19jb3VudCAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzsKKyAgRkZJX0FTU0VSVCAoZnByX2Jhc2UudQorCSAgICAgIDw9IHN0YWNrdG9wLnUgLSBBU01fTkVFRFNfUkVHSVNURVJTIC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTKTsKKyNlbmRpZgorICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfNF9HUFJfQVJHVU1FTlRTIHx8IGludGFyZ19jb3VudCA8PSA0KTsKK30KKworI2RlZmluZSBNSU5fQ0FDSEVfTElORV9TSVpFIDgKKworc3RhdGljIHZvaWQKK2ZsdXNoX2ljYWNoZSAoY2hhciAqd3JhZGRyLCBjaGFyICp4YWRkciwgaW50IHNpemUpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBNSU5fQ0FDSEVfTElORV9TSVpFKQorICAgIF9fYXNtX18gdm9sYXRpbGUgKCJpY2JpIDAsJTA7IiAiZGNiZiAwLCUxOyIKKwkJICAgICAgOiA6ICJyIiAoeGFkZHIgKyBpKSwgInIiICh3cmFkZHIgKyBpKSA6ICJtZW1vcnkiKTsKKyAgX19hc21fXyB2b2xhdGlsZSAoImljYmkgMCwlMDsiICJkY2JmIDAsJTE7IiAic3luYzsiICJpc3luYzsiCisJCSAgICA6IDogInIiKHhhZGRyICsgc2l6ZSAtIDEpLCAiciIod3JhZGRyICsgc2l6ZSAtIDEpCisJCSAgICA6ICJtZW1vcnkiKTsKK30KKworZmZpX3N0YXR1cyBGRklfSElEREVOCitmZmlfcHJlcF9jbG9zdXJlX2xvY19zeXN2IChmZmlfY2xvc3VyZSAqY2xvc3VyZSwKKwkJCSAgIGZmaV9jaWYgKmNpZiwKKwkJCSAgIHZvaWQgKCpmdW4pIChmZmlfY2lmICosIHZvaWQgKiwgdm9pZCAqKiwgdm9pZCAqKSwKKwkJCSAgIHZvaWQgKnVzZXJfZGF0YSwKKwkJCSAgIHZvaWQgKmNvZGVsb2MpCit7CisgIHVuc2lnbmVkIGludCAqdHJhbXA7CisKKyAgaWYgKGNpZi0+YWJpIDwgRkZJX1NZU1YgfHwgY2lmLT5hYmkgPj0gRkZJX0xBU1RfQUJJKQorICAgIHJldHVybiBGRklfQkFEX0FCSTsKKworICB0cmFtcCA9ICh1bnNpZ25lZCBpbnQgKikgJmNsb3N1cmUtPnRyYW1wWzBdOworICB0cmFtcFswXSA9IDB4N2MwODAyYTY7ICAvKiAgIG1mbHIgICAgcjAgKi8KKyAgdHJhbXBbMV0gPSAweDQ4MDAwMDBkOyAgLyogICBibCAgICAgIDEwIDx0cmFtcG9saW5lX2luaXRpYWwrMHgxMD4gKi8KKyAgdHJhbXBbNF0gPSAweDdkNjgwMmE2OyAgLyogICBtZmxyICAgIHIxMSAqLworICB0cmFtcFs1XSA9IDB4N2MwODAzYTY7ICAvKiAgIG10bHIgICAgcjAgKi8KKyAgdHJhbXBbNl0gPSAweDgwMGIwMDAwOyAgLyogICBsd3ogICAgIHIwLDAocjExKSAqLworICB0cmFtcFs3XSA9IDB4ODE2YjAwMDQ7ICAvKiAgIGx3eiAgICAgcjExLDQocjExKSAqLworICB0cmFtcFs4XSA9IDB4N2MwOTAzYTY7ICAvKiAgIG10Y3RyICAgcjAgKi8KKyAgdHJhbXBbOV0gPSAweDRlODAwNDIwOyAgLyogICBiY3RyICovCisgICoodm9pZCAqKikgJnRyYW1wWzJdID0gKHZvaWQgKikgZmZpX2Nsb3N1cmVfU1lTVjsgLyogZnVuY3Rpb24gKi8KKyAgKih2b2lkICoqKSAmdHJhbXBbM10gPSBjb2RlbG9jOyAgICAgICAgICAgICAgICAgICAvKiBjb250ZXh0ICovCisKKyAgLyogRmx1c2ggdGhlIGljYWNoZS4gICovCisgIGZsdXNoX2ljYWNoZSAoKGNoYXIgKil0cmFtcCwgKGNoYXIgKiljb2RlbG9jLCBGRklfVFJBTVBPTElORV9TSVpFKTsKKworICBjbG9zdXJlLT5jaWYgPSBjaWY7CisgIGNsb3N1cmUtPmZ1biA9IGZ1bjsKKyAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCisgIHJldHVybiBGRklfT0s7Cit9CisKKy8qIEJhc2ljYWxseSB0aGUgdHJhbXBvbGluZSBpbnZva2VzIGZmaV9jbG9zdXJlX1NZU1YsIGFuZCBvbgorICAgZW50cnksIHIxMSBob2xkcyB0aGUgYWRkcmVzcyBvZiB0aGUgY2xvc3VyZS4KKyAgIEFmdGVyIHN0b3JpbmcgdGhlIHJlZ2lzdGVycyB0aGF0IGNvdWxkIHBvc3NpYmx5IGNvbnRhaW4KKyAgIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIGludG8gdGhlIHN0YWNrIGZyYW1lIGFuZCBzZXR0aW5nCisgICB1cCBzcGFjZSBmb3IgYSByZXR1cm4gdmFsdWUsIGZmaV9jbG9zdXJlX1NZU1YgaW52b2tlcyB0aGUKKyAgIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb24gdG8gZG8gbW9zdCBvZiB0aGUgd29yay4gICovCisKK2ludAorZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICpydmFsdWUsCisJCQkgdW5zaWduZWQgbG9uZyAqcGdyLCBmZmlfZGJsZmwgKnBmciwKKwkJCSB1bnNpZ25lZCBsb25nICpwc3QpCit7CisgIC8qIHJ2YWx1ZSBpcyB0aGUgcG9pbnRlciB0byBzcGFjZSBmb3IgcmV0dXJuIHZhbHVlIGluIGNsb3N1cmUgYXNzZW1ibHkgKi8KKyAgLyogcGdyIGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIHIzLXIxMCBhcmUgc3RvcmVkIGluIGZmaV9jbG9zdXJlX1NZU1YgKi8KKyAgLyogcGZyIGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIGYxLWY4IGFyZSBzdG9yZWQgaW4gZmZpX2Nsb3N1cmVfU1lTViAgKi8KKyAgLyogcHN0IGlzIHRoZSBwb2ludGVyIHRvIG91dGdvaW5nIHBhcmFtZXRlciBzdGFjayBpbiBvcmlnaW5hbCBjYWxsZXIgKi8KKworICB2b2lkICoqICAgICAgICAgIGF2YWx1ZTsKKyAgZmZpX3R5cGUgKiogICAgICBhcmdfdHlwZXM7CisgIGxvbmcgICAgICAgICAgICAgaSwgYXZuOworI2lmbmRlZiBfX05PX0ZQUlNfXworICBsb25nICAgICAgICAgICAgIG5mID0gMDsgICAvKiBudW1iZXIgb2YgZmxvYXRpbmcgcmVnaXN0ZXJzIGFscmVhZHkgdXNlZCAqLworI2VuZGlmCisgIGxvbmcgICAgICAgICAgICAgbmcgPSAwOyAgIC8qIG51bWJlciBvZiBnZW5lcmFsIHJlZ2lzdGVycyBhbHJlYWR5IHVzZWQgKi8KKworICBmZmlfY2lmICpjaWYgPSBjbG9zdXJlLT5jaWY7CisgIHVuc2lnbmVkICAgICAgIHNpemUgICAgID0gY2lmLT5ydHlwZS0+c2l6ZTsKKyAgdW5zaWduZWQgc2hvcnQgcnR5cGVudW0gPSBjaWYtPnJ0eXBlLT50eXBlOworCisgIGF2YWx1ZSA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7CisKKyAgLyogRmlyc3QgdHJhbnNsYXRlIGZvciBzb2Z0ZmxvYXQvbm9ubGludXggKi8KKyAgcnR5cGVudW0gPSB0cmFuc2xhdGVfZmxvYXQgKGNpZi0+YWJpLCBydHlwZW51bSk7CisKKyAgLyogQ29weSB0aGUgY2FsbGVyJ3Mgc3RydWN0dXJlIHJldHVybiB2YWx1ZSBhZGRyZXNzIHNvIHRoYXQgdGhlIGNsb3N1cmUKKyAgICAgcmV0dXJucyB0aGUgZGF0YSBkaXJlY3RseSB0byB0aGUgY2FsbGVyLgorICAgICBGb3IgRkZJX1NZU1YgdGhlIHJlc3VsdCBpcyBwYXNzZWQgaW4gcjMvcjQgaWYgdGhlIHN0cnVjdCBzaXplIGlzIGxlc3MKKyAgICAgb3IgZXF1YWwgOCBieXRlcy4gICovCisgIGlmIChydHlwZW51bSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmICEoKGNpZi0+YWJpICYgRkZJX1NZU1ZfU1RSVUNUX1JFVCkgIT0gMCAmJiBzaXplIDw9IDgpKQorICAgIHsKKyAgICAgIHJ2YWx1ZSA9ICh2b2lkICopICpwZ3I7CisgICAgICBuZysrOworICAgICAgcGdyKys7CisgICAgfQorCisgIGkgPSAwOworICBhdm4gPSBjaWYtPm5hcmdzOworICBhcmdfdHlwZXMgPSBjaWYtPmFyZ190eXBlczsKKworICAvKiBHcmFiIHRoZSBhZGRyZXNzZXMgb2YgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBzdGFjayBmcmFtZS4gICovCisgIHdoaWxlIChpIDwgYXZuKSB7CisgICAgdW5zaWduZWQgc2hvcnQgdHlwZW51bSA9IGFyZ190eXBlc1tpXS0+dHlwZTsKKworICAgIC8qIFdlIG1heSBuZWVkIHRvIGhhbmRsZSBzb21lIHZhbHVlcyBkZXBlbmRpbmcgb24gQUJJLiAgKi8KKyAgICB0eXBlbnVtID0gdHJhbnNsYXRlX2Zsb2F0IChjaWYtPmFiaSwgdHlwZW51bSk7CisKKyAgICBzd2l0Y2ggKHR5cGVudW0pCisgICAgICB7CisjaWZuZGVmIF9fTk9fRlBSU19fCisgICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorCS8qIFVuZm9ydHVuYXRlbHkgZmxvYXQgdmFsdWVzIGFyZSBzdG9yZWQgYXMgZG91YmxlcworCSAgIGluIHRoZSBmZmlfY2xvc3VyZV9TWVNWIGNvZGUgKHNpbmNlIHdlIGRvbid0IGNoZWNrCisJICAgdGhlIHR5cGUgaW4gdGhhdCByb3V0aW5lKS4gICovCisJaWYgKG5mIDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorCSAgeworCSAgICAvKiBGSVhNRT8gaGVyZSB3ZSBhcmUgcmVhbGx5IGNoYW5naW5nIHRoZSB2YWx1ZXMKKwkgICAgICAgc3RvcmVkIGluIHRoZSBvcmlnaW5hbCBjYWxsaW5nIHJvdXRpbmVzIG91dGdvaW5nCisJICAgICAgIHBhcmFtZXRlciBzdGFjay4gIFRoaXMgaXMgcHJvYmFibHkgYSByZWFsbHkKKwkgICAgICAgbmF1Z2h0eSB0aGluZyB0byBkbyBidXQuLi4gICovCisJICAgIGRvdWJsZSB0ZW1wID0gcGZyLT5kOworCSAgICBwZnItPmYgPSAoZmxvYXQpIHRlbXA7CisJICAgIGF2YWx1ZVtpXSA9IHBmcjsKKwkgICAgbmYrKzsKKwkgICAgcGZyKys7CisJICB9CisJZWxzZQorCSAgeworCSAgICBhdmFsdWVbaV0gPSBwc3Q7CisJICAgIHBzdCArPSAxOworCSAgfQorCWJyZWFrOworCisgICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKwlpZiAobmYgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IHBmcjsKKwkgICAgbmYrKzsKKwkgICAgcGZyKys7CisJICB9CisJZWxzZQorCSAgeworCSAgICBpZiAoKChsb25nKSBwc3QpICYgNCkKKwkgICAgICBwc3QrKzsKKwkgICAgYXZhbHVlW2ldID0gcHN0OworCSAgICBwc3QgKz0gMjsKKwkgIH0KKwlicmVhazsKKworIyBpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorICAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorCWlmIChuZiA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyAtIDEpCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IHBmcjsKKwkgICAgcGZyICs9IDI7CisJICAgIG5mICs9IDI7CisJICB9CisJZWxzZQorCSAgeworCSAgICBpZiAoKChsb25nKSBwc3QpICYgNCkKKwkgICAgICBwc3QrKzsKKwkgICAgYXZhbHVlW2ldID0gcHN0OworCSAgICBwc3QgKz0gNDsKKwkgICAgbmYgPSA4OworCSAgfQorCWJyZWFrOworIyBlbmRpZgorI2VuZGlmCisKKyAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDEyODoKKwkvKiBUZXN0IGlmIGZvciB0aGUgd2hvbGUgbG9uZyBkb3VibGUsIDQgZ3BycyBhcmUgYXZhaWxhYmxlLgorCSAgIG90aGVyd2lzZSB0aGUgc3R1ZmYgZW5kcyB1cCBvbiB0aGUgc3RhY2suICAqLworCWlmIChuZyA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAtIDMpCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IHBncjsKKwkgICAgcGdyICs9IDQ7CisJICAgIG5nICs9IDQ7CisJICB9CisJZWxzZQorCSAgeworCSAgICBhdmFsdWVbaV0gPSBwc3Q7CisJICAgIHBzdCArPSA0OworCSAgICBuZyA9IDgrNDsKKwkgIH0KKwlicmVhazsKKworICAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisJaWYgKG5nIDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorCSAgeworCSAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyAzOworCSAgICBuZysrOworCSAgICBwZ3IrKzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDM7CisJICAgIHBzdCsrOworCSAgfQorCWJyZWFrOworI2VuZGlmCisKKyAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisJaWYgKG5nIDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorCSAgeworCSAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyAyOworCSAgICBuZysrOworCSAgICBwZ3IrKzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDI7CisJICAgIHBzdCsrOworCSAgfQorCWJyZWFrOworI2VuZGlmCisKKyAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgorICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CisgICAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJaWYgKG5nIDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorCSAgeworCSAgICBhdmFsdWVbaV0gPSBwZ3I7CisJICAgIG5nKys7CisJICAgIHBncisrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gcHN0OworCSAgICBwc3QrKzsKKwkgIH0KKwlicmVhazsKKworICAgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJLyogU3RydWN0cyBhcmUgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gVGhlIGFkZHJlc3Mgd2lsbCBhcHBlYXIgaW4gYQorCSAgIGdwciBpZiBpdCBpcyBvbmUgb2YgdGhlIGZpcnN0IDggYXJndW1lbnRzLiAgKi8KKwlpZiAobmcgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisJICB7CisJICAgIGF2YWx1ZVtpXSA9ICh2b2lkICopICpwZ3I7CisJICAgIG5nKys7CisJICAgIHBncisrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gKHZvaWQgKikgKnBzdDsKKwkgICAgcHN0Kys7CisJICB9CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgorICAgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJLyogUGFzc2luZyBsb25nIGxvbmcgaW50cyBhcmUgY29tcGxleCwgdGhleSBtdXN0CisJICAgYmUgcGFzc2VkIGluIHN1aXRhYmxlIHJlZ2lzdGVyIHBhaXJzIHN1Y2ggYXMKKwkgICAocjMscjQpIG9yIChyNSxyNikgb3IgKHI2LHI3KSwgb3IgKHI3LHI4KSBvciAocjkscjEwKQorCSAgIGFuZCBpZiB0aGUgZW50aXJlIHBhaXIgYXJlbid0IGF2YWlsYWJsZSB0aGVuIHRoZSBvdXRnb2luZworCSAgIHBhcmFtZXRlciBzdGFjayBpcyB1c2VkIGZvciBib3RoIGJ1dCBhbiBhbGlnbm1lbnQgb2YgOAorCSAgIG11c3Qgd2lsbCBiZSBrZXB0LiAgU28gd2UgbXVzdCBlaXRoZXIgbG9vayBpbiBwZ3IKKwkgICBvciBwc3QgdG8gZmluZCB0aGUgY29ycmVjdCBhZGRyZXNzIGZvciB0aGlzIHR5cGUKKwkgICBvZiBwYXJhbWV0ZXIuICAqLworCWlmIChuZyA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAtIDEpCisJICB7CisJICAgIGlmIChuZyAmIDEpCisJICAgICAgeworCQkvKiBza2lwIHI0LCByNiwgcjggYXMgc3RhcnRpbmcgcG9pbnRzICovCisJCW5nKys7CisJCXBncisrOworCSAgICAgIH0KKwkgICAgYXZhbHVlW2ldID0gcGdyOworCSAgICBuZyArPSAyOworCSAgICBwZ3IgKz0gMjsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGlmICgoKGxvbmcpIHBzdCkgJiA0KQorCSAgICAgIHBzdCsrOworCSAgICBhdmFsdWVbaV0gPSBwc3Q7CisJICAgIHBzdCArPSAyOworCSAgICBuZyA9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzsKKwkgIH0KKwlicmVhazsKKworICAgICAgZGVmYXVsdDoKKwlGRklfQVNTRVJUICgwKTsKKyAgICAgIH0KKworICAgIGkrKzsKKyAgfQorCisgIChjbG9zdXJlLT5mdW4pIChjaWYsIHJ2YWx1ZSwgYXZhbHVlLCBjbG9zdXJlLT51c2VyX2RhdGEpOworCisgIC8qIFRlbGwgZmZpX2Nsb3N1cmVfU1lTViBob3cgdG8gcGVyZm9ybSByZXR1cm4gdHlwZSBwcm9tb3Rpb25zLgorICAgICBCZWNhdXNlIHRoZSBGRklfU1lTViBBQkkgcmV0dXJucyB0aGUgc3RydWN0dXJlcyA8PSA4IGJ5dGVzIGluCisgICAgIHIzL3I0IHdlIGhhdmUgdG8gdGVsbCBmZmlfY2xvc3VyZV9TWVNWIGhvdyB0byB0cmVhdCB0aGVtLiAgV2UKKyAgICAgY29tYmluZSB0aGUgYmFzZSB0eXBlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIHdpdGggdGhlIHNpemUgb2YKKyAgICAgdGhlIHN0cnVjdCBsZXNzIG9uZS4gIFdlIG5ldmVyIGhhdmUgYSBzdHJ1Y3Qgd2l0aCBzaXplIHplcm8uCisgICAgIFNlZSB0aGUgY29tbWVudCBpbiBmZml0YXJnZXQuaCBhYm91dCBvcmRlcmluZy4gICovCisgIGlmIChydHlwZW51bSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmIChjaWYtPmFiaSAmIEZGSV9TWVNWX1NUUlVDVF9SRVQpICE9IDAgJiYgc2l6ZSA8PSA4KQorICAgIHJldHVybiBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAtIDEgKyBzaXplOworICByZXR1cm4gcnR5cGVudW07Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oCmluZGV4IDNjOWRiNDkuLmI0N2IwZjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaApAQCAtNjAsNDUgKzYwLDc2IEBACiB0eXBlZGVmIGVudW0gZmZpX2FiaSB7CiAgIEZGSV9GSVJTVF9BQkkgPSAwLAogCi0jaWZkZWYgUE9XRVJQQwotICBGRklfU1lTViwKLSAgRkZJX0dDQ19TWVNWLAotICBGRklfTElOVVg2NCwKLSAgRkZJX0xJTlVYLAotICBGRklfTElOVVhfU09GVF9GTE9BVCwKLSMgaWYgZGVmaW5lZChQT1dFUlBDNjQpCi0gIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9MSU5VWDY0LAotIyBlbGlmIGRlZmluZWQoX19OT19GUFJTX18pCi0gIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9MSU5VWF9TT0ZUX0ZMT0FULAotIyBlbGlmIChfX0xEQkxfTUFOVF9ESUdfXyA9PSAxMDYpCi0gIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9MSU5VWCwKLSMgZWxzZQotICBGRklfREVGQVVMVF9BQkkgPSBGRklfR0NDX1NZU1YsCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIFBPV0VSUENfQUlYCisjaWYgZGVmaW5lZCAoUE9XRVJQQ19BSVgpCiAgIEZGSV9BSVgsCiAgIEZGSV9EQVJXSU4sCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9BSVgsCi0jZW5kaWYKKyAgRkZJX0xBU1RfQUJJCiAKLSNpZmRlZiBQT1dFUlBDX0RBUldJTgorI2VsaWYgZGVmaW5lZCAoUE9XRVJQQ19EQVJXSU4pCiAgIEZGSV9BSVgsCiAgIEZGSV9EQVJXSU4sCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9EQVJXSU4sCi0jZW5kaWYKLQotI2lmZGVmIFBPV0VSUENfRlJFRUJTRAotICBGRklfU1lTViwKLSAgRkZJX0dDQ19TWVNWLAotICBGRklfTElOVVg2NCwKLSAgRkZJX0xJTlVYLAotICBGRklfTElOVVhfU09GVF9GTE9BVCwKLSAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1NZU1YsCi0jZW5kaWYKLQogICBGRklfTEFTVF9BQkkKKworI2Vsc2UKKyAgLyogVGhlIEZGSV9DT01QQVQgdmFsdWVzIGFyZSB1c2VkIGJ5IG9sZCBjb2RlLiAgU2luY2UgbGliZmZpIG1heSBiZQorICAgICBhIHNoYXJlZCBsaWJyYXJ5IHdlIGhhdmUgdG8gc3VwcG9ydCBvbGQgdmFsdWVzIGZvciBiYWNrd2FyZHMKKyAgICAgY29tcGF0aWJpbGl0eS4gICovCisgIEZGSV9DT01QQVRfU1lTViwKKyAgRkZJX0NPTVBBVF9HQ0NfU1lTViwKKyAgRkZJX0NPTVBBVF9MSU5VWDY0LAorICBGRklfQ09NUEFUX0xJTlVYLAorICBGRklfQ09NUEFUX0xJTlVYX1NPRlRfRkxPQVQsCisKKyMgaWYgZGVmaW5lZCAoUE9XRVJQQzY0KQorICAvKiBUaGlzIGJpdCwgYWx3YXlzIHNldCBpbiBuZXcgY29kZSwgbXVzdCBub3QgYmUgc2V0IGluIGFueSBvZiB0aGUKKyAgICAgb2xkIEZGSV9DT01QQVQgdmFsdWVzIHRoYXQgbWlnaHQgYmUgdXNlZCBmb3IgNjQtYml0IGxpbnV4LiAgV2UKKyAgICAgb25seSBuZWVkIHdvcnJ5IGFib3V0IEZGSV9DT01QQVRfTElOVVg2NCwgYnV0IHRvIGJlIHNhZmUgYXZvaWQKKyAgICAgYWxsIG9sZCB2YWx1ZXMuICAqLworICBGRklfTElOVVggPSA4LAorICAvKiBUaGlzIGFuZCBmb2xsb3dpbmcgYml0cyBjYW4gcmV1c2UgRkZJX0NPTVBBVCB2YWx1ZXMuICAqLworICBGRklfTElOVVhfU1RSVUNUX0FMSUdOID0gMSwKKyAgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyOCA9IDIsCisgIEZGSV9ERUZBVUxUX0FCSSA9IChGRklfTElOVVgKKyMgIGlmZGVmIF9fU1RSVUNUX1BBUk1fQUxJR05fXworCQkgICAgIHwgRkZJX0xJTlVYX1NUUlVDVF9BTElHTgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fTE9OR19ET1VCTEVfMTI4X18KKwkJICAgICB8IEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjgKKyMgIGVuZGlmCisJCSAgICAgKSwKKyAgRkZJX0xBU1RfQUJJID0gMTIKKworIyBlbHNlCisgIC8qIFRoaXMgYml0LCBhbHdheXMgc2V0IGluIG5ldyBjb2RlLCBtdXN0IG5vdCBiZSBzZXQgaW4gYW55IG9mIHRoZQorICAgICBvbGQgRkZJX0NPTVBBVCB2YWx1ZXMgdGhhdCBtaWdodCBiZSB1c2VkIGZvciAzMi1iaXQgbGludXgvc3lzdi9ic2QuICAqLworICBGRklfU1lTViA9IDgsCisgIC8qIFRoaXMgYW5kIGZvbGxvd2luZyBiaXRzIGNhbiByZXVzZSBGRklfQ09NUEFUIHZhbHVlcy4gICovCisgIEZGSV9TWVNWX1NPRlRfRkxPQVQgPSAxLAorICBGRklfU1lTVl9TVFJVQ1RfUkVUID0gMiwKKyAgRkZJX1NZU1ZfSUJNX0xPTkdfRE9VQkxFID0gNCwKKyAgRkZJX1NZU1ZfTE9OR19ET1VCTEVfMTI4ID0gMTYsCisKKyAgRkZJX0RFRkFVTFRfQUJJID0gKEZGSV9TWVNWCisjICBpZmRlZiBfX05PX0ZQUlNfXworCQkgICAgIHwgRkZJX1NZU1ZfU09GVF9GTE9BVAorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIChfX1NWUjRfU1RSVUNUX1JFVFVSTikJCQkJCVwKKyAgICAgICB8fCBkZWZpbmVkIChQT1dFUlBDX0ZSRUVCU0QpICYmICFkZWZpbmVkIChfX0FJWF9TVFJVQ1RfUkVUVVJOKSkKKwkJICAgICB8IEZGSV9TWVNWX1NUUlVDVF9SRVQKKyMgIGVuZGlmCisjICBpZiBfX0xEQkxfTUFOVF9ESUdfXyA9PSAxMDYKKwkJICAgICB8IEZGSV9TWVNWX0lCTV9MT05HX0RPVUJMRQorIyAgZW5kaWYKKyMgIGlmZGVmIF9fTE9OR19ET1VCTEVfMTI4X18KKwkJICAgICB8IEZGSV9TWVNWX0xPTkdfRE9VQkxFXzEyOAorIyAgZW5kaWYKKwkJICAgICApLAorICBGRklfTEFTVF9BQkkgPSAzMgorIyBlbmRpZgorI2VuZGlmCisKIH0gZmZpX2FiaTsKICNlbmRpZgogCkBAIC0xMDYsNiArMTM3LDEwIEBACiAKICNkZWZpbmUgRkZJX0NMT1NVUkVTIDEKICNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDAKKyNpZiBkZWZpbmVkIChQT1dFUlBDKSB8fCBkZWZpbmVkIChQT1dFUlBDX0ZSRUVCU0QpCisjIGRlZmluZSBGRklfVEFSR0VUX1NQRUNJRklDX1ZBUklBRElDIDEKKyMgZGVmaW5lIEZGSV9FWFRSQV9DSUZfRklFTERTIHVuc2lnbmVkIG5maXhlZGFyZ3MKKyNlbmRpZgogCiAvKiBGb3IgYWRkaXRpb25hbCB0eXBlcyBsaWtlIHRoZSBiZWxvdywgdGFrZSBjYXJlIGFib3V0IHRoZSBvcmRlciBpbgogICAgcHBjX2Nsb3N1cmVzLlMuIFRoZXkgbXVzdCBmb2xsb3cgYWZ0ZXIgdGhlIEZGSV9UWVBFX0xBU1QuICAqLwpAQCAtMTEzLDE5ICsxNDgsMjYgQEAKIC8qIE5lZWRlZCBmb3Igc29mdC1mbG9hdCBsb25nLWRvdWJsZS0xMjggc3VwcG9ydC4gICovCiAjZGVmaW5lIEZGSV9UWVBFX1VJTlQxMjggKEZGSV9UWVBFX0xBU1QgKyAxKQogCi0vKiBOZWVkZWQgZm9yIEZGSV9TWVNWIHNtYWxsIHN0cnVjdHVyZSByZXR1cm5zLgotICAgV2UgdXNlIHR3byBmbGFnIGJpdHMsIChGTEFHX1NZU1ZfU01TVF9SMywgRkxBR19TWVNWX1NNU1RfUjQpIHdoaWNoIGFyZQotICAgZGVmaW5lZCBpbiBmZmkuYywgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCByZXR1cm4gdHlwZSBhbmQgaXRzIHNpemUuICAqLworLyogTmVlZGVkIGZvciBGRklfU1lTViBzbWFsbCBzdHJ1Y3R1cmUgcmV0dXJucy4gICovCiAjZGVmaW5lIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIChGRklfVFlQRV9MQVNUICsgMikKIAotI2lmIGRlZmluZWQoUE9XRVJQQzY0KSB8fCBkZWZpbmVkKFBPV0VSUENfQUlYKQorLyogVXNlZCBieSBFTEZ2MiBmb3IgaG9tb2dlbm91cyBzdHJ1Y3R1cmUgcmV0dXJucy4gICovCisjZGVmaW5lIEZGSV9WMl9UWVBFX0ZMT0FUX0hPTU9HCQkoRkZJX1RZUEVfTEFTVCArIDEpCisjZGVmaW5lIEZGSV9WMl9UWVBFX0RPVUJMRV9IT01PRwkoRkZJX1RZUEVfTEFTVCArIDIpCisjZGVmaW5lIEZGSV9WMl9UWVBFX1NNQUxMX1NUUlVDVAkoRkZJX1RZUEVfTEFTVCArIDMpCisKKyNpZiBfQ0FMTF9FTEYgPT0gMgorIyBkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAzMgorI2Vsc2UKKyMgaWYgZGVmaW5lZChQT1dFUlBDNjQpIHx8IGRlZmluZWQoUE9XRVJQQ19BSVgpCiAjICBpZiBkZWZpbmVkKFBPV0VSUENfREFSV0lONjQpCiAjICAgIGRlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDQ4CiAjICBlbHNlCiAjICAgIGRlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDI0CiAjICBlbmRpZgotI2Vsc2UgLyogUE9XRVJQQyB8fCBQT1dFUlBDX0FJWCAqLworIyBlbHNlIC8qIFBPV0VSUEMgfHwgUE9XRVJQQ19BSVggKi8KICMgIGRlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDQwCisjIGVuZGlmCiAjZW5kaWYKIAogI2lmbmRlZiBMSUJGRklfQVNNCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TCmluZGV4IGYyOGRhODEuLmM0ZDAxZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TCkBAIC0yOSwxOCArMjksMjUgQEAKICNpbmNsdWRlIDxmZmljb25maWcuaD4KICNpbmNsdWRlIDxmZmkuaD4KIAotI2lmZGVmIF9fcG93ZXJwYzY0X18KKyNpZmRlZiBQT1dFUlBDNjQKIAkuaGlkZGVuCWZmaV9jYWxsX0xJTlVYNjQKIAkuZ2xvYmwJZmZpX2NhbGxfTElOVVg2NAorIyBpZiBfQ0FMTF9FTEYgPT0gMgorCS50ZXh0CitmZmlfY2FsbF9MSU5VWDY0OgorCWFkZGlzCSVyMiwgJXIxMiwgLlRPQy4tZmZpX2NhbGxfTElOVVg2NEBoYQorCWFkZGkJJXIyLCAlcjIsIC5UT0MuLWZmaV9jYWxsX0xJTlVYNjRAbAorCS5sb2NhbGVudHJ5IGZmaV9jYWxsX0xJTlVYNjQsIC4gLSBmZmlfY2FsbF9MSU5VWDY0CisjIGVsc2UKIAkuc2VjdGlvbgkiLm9wZCIsImF3IgogCS5hbGlnbgkzCiBmZmlfY2FsbF9MSU5VWDY0OgotI2lmZGVmIF9DQUxMX0xJTlVYCisjICBpZmRlZiBfQ0FMTF9MSU5VWAogCS5xdWFkCS5MLmZmaV9jYWxsX0xJTlVYNjQsLlRPQy5AdG9jYmFzZSwwCiAJLnR5cGUJZmZpX2NhbGxfTElOVVg2NCxAZnVuY3Rpb24KIAkudGV4dAogLkwuZmZpX2NhbGxfTElOVVg2NDoKLSNlbHNlCisjICBlbHNlCiAJLmhpZGRlbgkuZmZpX2NhbGxfTElOVVg2NAogCS5nbG9ibAkuZmZpX2NhbGxfTElOVVg2NAogCS5xdWFkCS5mZmlfY2FsbF9MSU5VWDY0LC5UT0MuQHRvY2Jhc2UsMApAQCAtNDgsNyArNTUsOCBAQAogCS50eXBlCS5mZmlfY2FsbF9MSU5VWDY0LEBmdW5jdGlvbgogCS50ZXh0CiAuZmZpX2NhbGxfTElOVVg2NDoKLSNlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKIC5MRkIxOgogCW1mbHIJJXIwCiAJc3RkCSVyMjgsIC0zMiglcjEpCkBAIC02MywyNiArNzEsMzUgQEAKIAltcgklcjMxLCAlcjUJLyogZmxhZ3MsICovCiAJbXIJJXIzMCwgJXI2CS8qIHJ2YWx1ZSwgKi8KIAltcgklcjI5LCAlcjcJLyogZnVuY3Rpb24gYWRkcmVzcy4gICovCisvKiBTYXZlIHRvYyBwb2ludGVyLCBub3QgZm9yIHRoZSBmZmlfcHJlcF9hcmdzNjQgY2FsbCwgYnV0IGZvciB0aGUgbGF0ZXIKKyAgIGJjdHJsIGZ1bmN0aW9uIGNhbGwuICAqLworIyBpZiBfQ0FMTF9FTEYgPT0gMgorCXN0ZAklcjIsIDI0KCVyMSkKKyMgZWxzZQogCXN0ZAklcjIsIDQwKCVyMSkKKyMgZW5kaWYKIAogCS8qIENhbGwgZmZpX3ByZXBfYXJnczY0LiAgKi8KIAltcgklcjQsICVyMQotI2lmZGVmIF9DQUxMX0xJTlVYCisjIGlmIGRlZmluZWQgX0NBTExfTElOVVggfHwgX0NBTExfRUxGID09IDIKIAlibAlmZmlfcHJlcF9hcmdzNjQKLSNlbHNlCisjIGVsc2UKIAlibAkuZmZpX3ByZXBfYXJnczY0Ci0jZW5kaWYKKyMgZW5kaWYKIAotCWxkCSVyMCwgMCglcjI5KQorIyBpZiBfQ0FMTF9FTEYgPT0gMgorCW1yCSVyMTIsICVyMjkKKyMgZWxzZQorCWxkCSVyMTIsIDAoJXIyOSkKIAlsZAklcjIsIDgoJXIyOSkKIAlsZAklcjExLCAxNiglcjI5KQotCisjIGVuZGlmCiAJLyogTm93IGRvIHRoZSBjYWxsLiAgKi8KIAkvKiBTZXQgdXAgY3IxIHdpdGggYml0cyA0LTcgb2YgdGhlIGZsYWdzLiAgKi8KIAltdGNyZgkweDQwLCAlcjMxCiAKIAkvKiBHZXQgdGhlIGFkZHJlc3MgdG8gY2FsbCBpbnRvIENUUi4gICovCi0JbXRjdHIJJXIwCisJbXRjdHIJJXIxMgogCS8qIExvYWQgYWxsIHRob3NlIGFyZ3VtZW50IHJlZ2lzdGVycy4gICovCiAJbGQJJXIzLCAtMzItKDgqOCkoJXIyOCkKIAlsZAklcjQsIC0zMi0oNyo4KSglcjI4KQpAQCAtMTE3LDEyICsxMzQsMTcgQEAKIAogCS8qIFRoaXMgbXVzdCBmb2xsb3cgdGhlIGNhbGwgaW1tZWRpYXRlbHksIHRoZSB1bndpbmRlcgogCSAgIHVzZXMgdGhpcyB0byBmaW5kIG91dCBpZiByMiBoYXMgYmVlbiBzYXZlZCBvciBub3QuICAqLworIyBpZiBfQ0FMTF9FTEYgPT0gMgorCWxkCSVyMiwgMjQoJXIxKQorIyBlbHNlCiAJbGQJJXIyLCA0MCglcjEpCisjIGVuZGlmCiAKIAkvKiBOb3csIGRlYWwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KIAltdGNyZgkweDAxLCAlcjMxCi0JYnQtCTMwLCAuTGRvbmVfcmV0dXJuX3ZhbHVlCi0JYnQtCTI5LCAuTGZwX3JldHVybl92YWx1ZQorCWJ0CTMxLCAuTHN0cnVjdF9yZXR1cm5fdmFsdWUKKwlidAkzMCwgLkxkb25lX3JldHVybl92YWx1ZQorCWJ0CTI5LCAuTGZwX3JldHVybl92YWx1ZQogCXN0ZAklcjMsIDAoJXIzMCkKIAkvKiBGYWxsIHRocm91Z2guLi4gICovCiAKQEAgLTEzMCw3ICsxNTIsNyBAQAogCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyB3ZSB1c2VkIGFuZCByZXR1cm4uICAqLwogCW1yCSVyMSwgJXIyOAogCWxkCSVyMCwgMTYoJXIyOCkKLQlsZAklcjI4LCAtMzIoJXIxKQorCWxkCSVyMjgsIC0zMiglcjI4KQogCW10bHIJJXIwCiAJbGQJJXIyOSwgLTI0KCVyMSkKIAlsZAklcjMwLCAtMTYoJXIxKQpAQCAtMTQ3LDE0ICsxNjksNDggQEAKIC5MZmxvYXRfcmV0dXJuX3ZhbHVlOgogCXN0ZnMJJWYxLCAwKCVyMzApCiAJYgkuTGRvbmVfcmV0dXJuX3ZhbHVlCisKKy5Mc3RydWN0X3JldHVybl92YWx1ZToKKwliZgkyOSwgLkxzbWFsbF9zdHJ1Y3QKKwliZgkyOCwgLkxmbG9hdF9ob21vZ19yZXR1cm5fdmFsdWUKKwlzdGZkCSVmMSwgMCglcjMwKQorCXN0ZmQJJWYyLCA4KCVyMzApCisJc3RmZAklZjMsIDE2KCVyMzApCisJc3RmZAklZjQsIDI0KCVyMzApCisJc3RmZAklZjUsIDMyKCVyMzApCisJc3RmZAklZjYsIDQwKCVyMzApCisJc3RmZAklZjcsIDQ4KCVyMzApCisJc3RmZAklZjgsIDU2KCVyMzApCisJYgkuTGRvbmVfcmV0dXJuX3ZhbHVlCisKKy5MZmxvYXRfaG9tb2dfcmV0dXJuX3ZhbHVlOgorCXN0ZnMJJWYxLCAwKCVyMzApCisJc3RmcwklZjIsIDQoJXIzMCkKKwlzdGZzCSVmMywgOCglcjMwKQorCXN0ZnMJJWY0LCAxMiglcjMwKQorCXN0ZnMJJWY1LCAxNiglcjMwKQorCXN0ZnMJJWY2LCAyMCglcjMwKQorCXN0ZnMJJWY3LCAyNCglcjMwKQorCXN0ZnMJJWY4LCAyOCglcjMwKQorCWIJLkxkb25lX3JldHVybl92YWx1ZQorCisuTHNtYWxsX3N0cnVjdDoKKwlzdGQJJXIzLCAwKCVyMzApCisJc3RkCSVyNCwgOCglcjMwKQorCWIJLkxkb25lX3JldHVybl92YWx1ZQorCiAuTEZFMToKIAkubG9uZwkwCiAJLmJ5dGUJMCwxMiwwLDEsMTI4LDQsMCwwCi0jaWZkZWYgX0NBTExfTElOVVgKKyMgaWYgX0NBTExfRUxGID09IDIKKwkuc2l6ZQlmZmlfY2FsbF9MSU5VWDY0LC4tZmZpX2NhbGxfTElOVVg2NAorIyBlbHNlCisjICBpZmRlZiBfQ0FMTF9MSU5VWAogCS5zaXplCWZmaV9jYWxsX0xJTlVYNjQsLi0uTC5mZmlfY2FsbF9MSU5VWDY0Ci0jZWxzZQorIyAgZWxzZQogCS5zaXplCS5mZmlfY2FsbF9MSU5VWDY0LC4tLmZmaV9jYWxsX0xJTlVYNjQKLSNlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKIAogCS5zZWN0aW9uCS5laF9mcmFtZSxFSF9GUkFNRV9GTEFHUyxAcHJvZ2JpdHMKIC5MZnJhbWUxOgpAQCAtMTk3LDggKzI1Myw4IEBACiAJLnVsZWIxMjggMHg0CiAJLmFsaWduIDMKIC5MRUZERTE6Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworIyBpZiAoZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fKSB8fCBfQ0FMTF9FTEYgPT0gMgogCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKyMgZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKaW5kZXggYjFlMTIxOS4uYmM2MWI1ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCkBAIC0zMCwxOCArMzAsMjUgQEAKIAogCS5maWxlCSJsaW51eDY0X2Nsb3N1cmUuUyIKIAotI2lmZGVmIF9fcG93ZXJwYzY0X18KKyNpZmRlZiBQT1dFUlBDNjQKIAlGRklfSElEREVOIChmZmlfY2xvc3VyZV9MSU5VWDY0KQogCS5nbG9ibCAgZmZpX2Nsb3N1cmVfTElOVVg2NAorIyBpZiBfQ0FMTF9FTEYgPT0gMgorCS50ZXh0CitmZmlfY2xvc3VyZV9MSU5VWDY0OgorCWFkZGlzCSVyMiwgJXIxMiwgLlRPQy4tZmZpX2Nsb3N1cmVfTElOVVg2NEBoYQorCWFkZGkJJXIyLCAlcjIsIC5UT0MuLWZmaV9jbG9zdXJlX0xJTlVYNjRAbAorCS5sb2NhbGVudHJ5IGZmaV9jbG9zdXJlX0xJTlVYNjQsIC4gLSBmZmlfY2xvc3VyZV9MSU5VWDY0CisjIGVsc2UKIAkuc2VjdGlvbiAgICAgICAgIi5vcGQiLCJhdyIKIAkuYWxpZ24gIDMKIGZmaV9jbG9zdXJlX0xJTlVYNjQ6Ci0jaWZkZWYgX0NBTExfTElOVVgKKyMgIGlmZGVmIF9DQUxMX0xJTlVYCiAJLnF1YWQgICAuTC5mZmlfY2xvc3VyZV9MSU5VWDY0LC5UT0MuQHRvY2Jhc2UsMAogCS50eXBlICAgZmZpX2Nsb3N1cmVfTElOVVg2NCxAZnVuY3Rpb24KIAkudGV4dAogLkwuZmZpX2Nsb3N1cmVfTElOVVg2NDoKLSNlbHNlCisjICBlbHNlCiAJRkZJX0hJRERFTiAoLmZmaV9jbG9zdXJlX0xJTlVYNjQpCiAJLmdsb2JsICAuZmZpX2Nsb3N1cmVfTElOVVg2NAogCS5xdWFkICAgLmZmaV9jbG9zdXJlX0xJTlVYNjQsLlRPQy5AdG9jYmFzZSwwCkBAIC00OSw2MSArNTYsMTA1IEBACiAJLnR5cGUgICAuZmZpX2Nsb3N1cmVfTElOVVg2NCxAZnVuY3Rpb24KIAkudGV4dAogLmZmaV9jbG9zdXJlX0xJTlVYNjQ6Ci0jZW5kaWYKLS5MRkIxOgotCSMgc2F2ZSBnZW5lcmFsIHJlZ3MgaW50byBwYXJtIHNhdmUgYXJlYQotCXN0ZAklcjMsIDQ4KCVyMSkKLQlzdGQJJXI0LCA1NiglcjEpCi0Jc3RkCSVyNSwgNjQoJXIxKQotCXN0ZAklcjYsIDcyKCVyMSkKLQltZmxyCSVyMAorIyAgZW5kaWYKKyMgZW5kaWYKIAotCXN0ZAklcjcsIDgwKCVyMSkKLQlzdGQJJXI4LCA4OCglcjEpCi0Jc3RkCSVyOSwgOTYoJXIxKQotCXN0ZAklcjEwLCAxMDQoJXIxKQorIyBpZiBfQ0FMTF9FTEYgPT0gMgorIyAgMzIgYnl0ZSBzcGVjaWFsIHJlZyBzYXZlIGFyZWEgKyA2NCBieXRlIHBhcm0gc2F2ZSBhcmVhCisjICArIDY0IGJ5dGUgcmV0dmFsIGFyZWEgKyAxMyo4IGZwciBzYXZlIGFyZWEgKyByb3VuZCB0byAxNgorIyAgZGVmaW5lIFNUQUNLRlJBTUUgMjcyCisjICBkZWZpbmUgUEFSTVNBVkUgMzIKKyMgIGRlZmluZSBSRVRWQUwgUEFSTVNBVkUrNjQKKyMgZWxzZQorIyAgNDggYnl0ZXMgc3BlY2lhbCByZWcgc2F2ZSBhcmVhICsgNjQgYnl0ZXMgcGFybSBzYXZlIGFyZWEKKyMgICsgMTYgYnl0ZXMgcmV0dmFsIGFyZWEgKyAxMyo4IGJ5dGVzIGZwciBzYXZlIGFyZWEgKyByb3VuZCB0byAxNgorIyAgZGVmaW5lIFNUQUNLRlJBTUUgMjQwCisjICBkZWZpbmUgUEFSTVNBVkUgNDgKKyMgIGRlZmluZSBSRVRWQUwgUEFSTVNBVkUrNjQKKyMgZW5kaWYKKworLkxGQjE6CisjIGlmIF9DQUxMX0VMRiA9PSAyCisJbGQJJXIxMiwgRkZJX1RSQU1QT0xJTkVfU0laRSglcjExKQkJIyBjbG9zdXJlLT5jaWYKKwltZmxyCSVyMAorCWx3egklcjEyLCAyOCglcjEyKQkJCQkjIGNpZi0+ZmxhZ3MKKwltdGNyZgkweDQwLCAlcjEyCisJYWRkaQklcjEyLCAlcjEsIFBBUk1TQVZFCisJYnQJNywgLkxwYXJtc2F2ZQorCSMgT3VyIGNhbGxlciBoYXMgbm90IGFsbG9jYXRlZCBhIHBhcmFtZXRlciBzYXZlIGFyZWEuCisJIyBXZSBuZWVkIHRvIGFsbG9jYXRlIG9uZSBoZXJlIGFuZCB1c2UgaXQgdG8gcGFzcyBncHJzIHRvCisJIyBmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NC4KKwlhZGRpCSVyMTIsICVyMSwgLVNUQUNLRlJBTUUrUEFSTVNBVkUKKy5McGFybXNhdmU6CisJc3RkCSVyMCwgMTYoJXIxKQorCSMgU2F2ZSBnZW5lcmFsIHJlZ3MgaW50byBwYXJtIHNhdmUgYXJlYQorCXN0ZAklcjMsIDAoJXIxMikKKwlzdGQJJXI0LCA4KCVyMTIpCisJc3RkCSVyNSwgMTYoJXIxMikKKwlzdGQJJXI2LCAyNCglcjEyKQorCXN0ZAklcjcsIDMyKCVyMTIpCisJc3RkCSVyOCwgNDAoJXIxMikKKwlzdGQJJXI5LCA0OCglcjEyKQorCXN0ZAklcjEwLCA1NiglcjEyKQorCisJIyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBwYXJtIHNhdmUgYXJlYQorCW1yCSVyNSwgJXIxMgorIyBlbHNlCisJIyBjb3B5IHIyIHRvIHIxMSBhbmQgbG9hZCBUT0MgaW50byByMgorCW1yCSVyMTEsICVyMgorCWxkCSVyMiwgMTYoJXIxMSkKKworCW1mbHIJJXIwCisJIyBTYXZlIGdlbmVyYWwgcmVncyBpbnRvIHBhcm0gc2F2ZSBhcmVhCisJIyBUaGlzIGlzIHRoZSBwYXJhbWV0ZXIgc2F2ZSBhcmVhIHNldCB1cCBieSBvdXIgY2FsbGVyLgorCXN0ZAklcjMsIFBBUk1TQVZFKzAoJXIxKQorCXN0ZAklcjQsIFBBUk1TQVZFKzgoJXIxKQorCXN0ZAklcjUsIFBBUk1TQVZFKzE2KCVyMSkKKwlzdGQJJXI2LCBQQVJNU0FWRSsyNCglcjEpCisJc3RkCSVyNywgUEFSTVNBVkUrMzIoJXIxKQorCXN0ZAklcjgsIFBBUk1TQVZFKzQwKCVyMSkKKwlzdGQJJXI5LCBQQVJNU0FWRSs0OCglcjEpCisJc3RkCSVyMTAsIFBBUk1TQVZFKzU2KCVyMSkKKwogCXN0ZAklcjAsIDE2KCVyMSkKIAotCSMgbWFuZGF0b3J5IDQ4IGJ5dGVzIHNwZWNpYWwgcmVnIHNhdmUgYXJlYSArIDY0IGJ5dGVzIHBhcm0gc2F2ZSBhcmVhCi0JIyArIDE2IGJ5dGVzIHJldHZhbCBhcmVhICsgMTMqOCBieXRlcyBmcHIgc2F2ZSBhcmVhICsgcm91bmQgdG8gMTYKLQlzdGR1CSVyMSwgLTI0MCglcjEpCi0uTENGSTA6CisJIyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBwYXJtIHNhdmUgYXJlYQorCWFkZGkJJXI1LCAlcjEsIFBBUk1TQVZFCisjIGVuZGlmCiAKIAkjIG5leHQgc2F2ZSBmcHIgMSB0byBmcHIgMTMKLQlzdGZkICAlZjEsIDEyOCsoMCo4KSglcjEpCi0Jc3RmZCAgJWYyLCAxMjgrKDEqOCkoJXIxKQotCXN0ZmQgICVmMywgMTI4KygyKjgpKCVyMSkKLQlzdGZkICAlZjQsIDEyOCsoMyo4KSglcjEpCi0Jc3RmZCAgJWY1LCAxMjgrKDQqOCkoJXIxKQotCXN0ZmQgICVmNiwgMTI4Kyg1KjgpKCVyMSkKLQlzdGZkICAlZjcsIDEyOCsoNio4KSglcjEpCi0Jc3RmZCAgJWY4LCAxMjgrKDcqOCkoJXIxKQotCXN0ZmQgICVmOSwgMTI4Kyg4KjgpKCVyMSkKLQlzdGZkICAlZjEwLCAxMjgrKDkqOCkoJXIxKQotCXN0ZmQgICVmMTEsIDEyOCsoMTAqOCkoJXIxKQotCXN0ZmQgICVmMTIsIDEyOCsoMTEqOCkoJXIxKQotCXN0ZmQgICVmMTMsIDEyOCsoMTIqOCkoJXIxKQorCXN0ZmQJJWYxLCAtMTA0KygwKjgpKCVyMSkKKwlzdGZkCSVmMiwgLTEwNCsoMSo4KSglcjEpCisJc3RmZAklZjMsIC0xMDQrKDIqOCkoJXIxKQorCXN0ZmQJJWY0LCAtMTA0KygzKjgpKCVyMSkKKwlzdGZkCSVmNSwgLTEwNCsoNCo4KSglcjEpCisJc3RmZAklZjYsIC0xMDQrKDUqOCkoJXIxKQorCXN0ZmQJJWY3LCAtMTA0Kyg2KjgpKCVyMSkKKwlzdGZkCSVmOCwgLTEwNCsoNyo4KSglcjEpCisJc3RmZAklZjksIC0xMDQrKDgqOCkoJXIxKQorCXN0ZmQJJWYxMCwgLTEwNCsoOSo4KSglcjEpCisJc3RmZAklZjExLCAtMTA0KygxMCo4KSglcjEpCisJc3RmZAklZjEyLCAtMTA0KygxMSo4KSglcjEpCisJc3RmZAklZjEzLCAtMTA0KygxMio4KSglcjEpCiAKLQkjIHNldCB1cCByZWdpc3RlcnMgZm9yIHRoZSByb3V0aW5lIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgd29yaworCSMgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgc2F2ZWQgZnByIHJlZ2lzdGVycyAqLworCWFkZGkJJXI2LCAlcjEsIC0xMDQKKworCSMgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgcmVzdWx0IHN0b3JhZ2UKKwlhZGRpCSVyNCwgJXIxLCAtU1RBQ0tGUkFNRStSRVRWQUwKKworCXN0ZHUJJXIxLCAtU1RBQ0tGUkFNRSglcjEpCisuTENGSTA6CisKIAkjIGdldCB0aGUgY29udGV4dCBwb2ludGVyIGZyb20gdGhlIHRyYW1wb2xpbmUKLQltciAlcjMsICVyMTEKLQotCSMgbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHJlc3VsdCBzdG9yYWdlCi0JYWRkaSAlcjQsICVyMSwgMTEyCi0KLQkjIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBwYXJhbWV0ZXIgc2F2ZSBhcmVhCi0JIyBpbiB0aGUgcHJldmlvdXMgZnJhbWUKLQlhZGRpICVyNSwgJXIxLCAyNDAgKyA0OAotCi0JIyBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgc2F2ZWQgZnByIHJlZ2lzdGVycyAqLwotCWFkZGkgJXI2LCAlcjEsIDEyOAorCW1yCSVyMywgJXIxMQogCiAJIyBtYWtlIHRoZSBjYWxsCi0jaWZkZWYgX0NBTExfTElOVVgKKyMgaWYgZGVmaW5lZCBfQ0FMTF9MSU5VWCB8fCBfQ0FMTF9FTEYgPT0gMgogCWJsIGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0Ci0jZWxzZQorIyBlbHNlCiAJYmwgLmZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0Ci0jZW5kaWYKKyMgZW5kaWYKIC5McmV0OgogCiAJIyBub3cgcjMgY29udGFpbnMgdGhlIHJldHVybiB0eXBlCkBAIC0xMTIsMTAgKzE2MywxMiBAQAogCiAJIyBsb29rIHVwIHRoZSBwcm9wZXIgc3RhcnRpbmcgcG9pbnQgaW4gdGFibGUKIAkjIGJ5IHVzaW5nIHJldHVybiB0eXBlIGFzIG9mZnNldAorCWxkICVyMCwgU1RBQ0tGUkFNRSsxNiglcjEpCisJY21wbGRpICVyMywgRkZJX1YyX1RZUEVfU01BTExfU1RSVUNUCisJYmdlIC5Mc21hbGwKIAltZmxyICVyNAkJIyBtb3ZlIGFkZHJlc3Mgb2YgLkxyZXQgdG8gcjQKIAlzbGRpICVyMywgJXIzLCA0CSMgbm93IG11bHRpcGx5IHJldHVybiB0eXBlIGJ5IDE2CiAJYWRkaSAlcjQsICVyNCwgLkxyZXRfdHlwZTAgLSAuTHJldAotCWxkICVyMCwgMjQwKzE2KCVyMSkKIAlhZGQgJXIzLCAlcjMsICVyNAkjIGFkZCBjb250ZW50cyBvZiB0YWJsZSB0byB0YWJsZSBhZGRyZXNzCiAJbXRjdHIgJXIzCiAJYmN0cgkJCSMganVtcCB0byBpdApAQCAtMTI4LDg5ICsxODEsMTc1IEBACiAuTHJldF90eXBlMDoKICMgY2FzZSBGRklfVFlQRV9WT0lECiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAJbm9wCiAjIGNhc2UgRkZJX1RZUEVfSU5UCi0JbHdhICVyMywgMTEyKzQoJXIxKQorIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWx3YSAlcjMsIFJFVFZBTCswKCVyMSkKKyMgZWxzZQorCWx3YSAlcjMsIFJFVFZBTCs0KCVyMSkKKyMgZW5kaWYKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9GTE9BVAotCWxmcyAlZjEsIDExMiswKCVyMSkKKwlsZnMgJWYxLCBSRVRWQUwrMCglcjEpCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfRE9VQkxFCi0JbGZkICVmMSwgMTEyKzAoJXIxKQorCWxmZCAlZjEsIFJFVFZBTCswKCVyMSkKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFCi0JbGZkICVmMSwgMTEyKzAoJXIxKQorCWxmZCAlZjEsIFJFVFZBTCswKCVyMSkKIAltdGxyICVyMAotCWxmZCAlZjIsIDExMis4KCVyMSkKKwlsZmQgJWYyLCBSRVRWQUwrOCglcjEpCiAJYiAuTGZpbmlzaAogIyBjYXNlIEZGSV9UWVBFX1VJTlQ4Ci0JbGJ6ICVyMywgMTEyKzcoJXIxKQorIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxieiAlcjMsIFJFVFZBTCswKCVyMSkKKyMgZWxzZQorCWxieiAlcjMsIFJFVFZBTCs3KCVyMSkKKyMgZW5kaWYKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9TSU5UOAotCWxieiAlcjMsIDExMis3KCVyMSkKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsYnogJXIzLCBSRVRWQUwrMCglcjEpCisjIGVsc2UKKwlsYnogJXIzLCBSRVRWQUwrNyglcjEpCisjIGVuZGlmCiAJZXh0c2IgJXIzLCVyMwogCW10bHIgJXIwCiAJYiAuTGZpbmlzaAogIyBjYXNlIEZGSV9UWVBFX1VJTlQxNgotCWxoeiAlcjMsIDExMis2KCVyMSkKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsaHogJXIzLCBSRVRWQUwrMCglcjEpCisjIGVsc2UKKwlsaHogJXIzLCBSRVRWQUwrNiglcjEpCisjIGVuZGlmCiAJbXRsciAlcjAKIC5MZmluaXNoOgotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9TSU5UMTYKLQlsaGEgJXIzLCAxMTIrNiglcjEpCisjIGlmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGhhICVyMywgUkVUVkFMKzAoJXIxKQorIyBlbHNlCisJbGhhICVyMywgUkVUVkFMKzYoJXIxKQorIyBlbmRpZgogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX1VJTlQzMgotCWx3eiAlcjMsIDExMis0KCVyMSkKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsd3ogJXIzLCBSRVRWQUwrMCglcjEpCisjIGVsc2UKKwlsd3ogJXIzLCBSRVRWQUwrNCglcjEpCisjIGVuZGlmCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfU0lOVDMyCi0JbHdhICVyMywgMTEyKzQoJXIxKQorIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWx3YSAlcjMsIFJFVFZBTCswKCVyMSkKKyMgZWxzZQorCWx3YSAlcjMsIFJFVFZBTCs0KCVyMSkKKyMgZW5kaWYKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9VSU5UNjQKLQlsZCAlcjMsIDExMiswKCVyMSkKKwlsZCAlcjMsIFJFVFZBTCswKCVyMSkKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9TSU5UNjQKLQlsZCAlcjMsIDExMiswKCVyMSkKKwlsZCAlcjMsIFJFVFZBTCswKCVyMSkKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9TVFJVQ1QKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKIAlub3AKICMgY2FzZSBGRklfVFlQRV9QT0lOVEVSCi0JbGQgJXIzLCAxMTIrMCglcjEpCisJbGQgJXIzLCBSRVRWQUwrMCglcjEpCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCi0jIGVzYWMKKyMgY2FzZSBGRklfVjJfVFlQRV9GTE9BVF9IT01PRworCWxmcyAlZjEsIFJFVFZBTCswKCVyMSkKKwlsZnMgJWYyLCBSRVRWQUwrNCglcjEpCisJbGZzICVmMywgUkVUVkFMKzgoJXIxKQorCWIgLkxtb3JlZmxvYXQKKyMgY2FzZSBGRklfVjJfVFlQRV9ET1VCTEVfSE9NT0cKKwlsZmQgJWYxLCBSRVRWQUwrMCglcjEpCisJbGZkICVmMiwgUkVUVkFMKzgoJXIxKQorCWxmZCAlZjMsIFJFVFZBTCsxNiglcjEpCisJbGZkICVmNCwgUkVUVkFMKzI0KCVyMSkKKwltdGxyICVyMAorCWxmZCAlZjUsIFJFVFZBTCszMiglcjEpCisJbGZkICVmNiwgUkVUVkFMKzQwKCVyMSkKKwlsZmQgJWY3LCBSRVRWQUwrNDgoJXIxKQorCWxmZCAlZjgsIFJFVFZBTCs1NiglcjEpCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQorCWJscgorLkxtb3JlZmxvYXQ6CisJbGZzICVmNCwgUkVUVkFMKzEyKCVyMSkKKwltdGxyICVyMAorCWxmcyAlZjUsIFJFVFZBTCsxNiglcjEpCisJbGZzICVmNiwgUkVUVkFMKzIwKCVyMSkKKwlsZnMgJWY3LCBSRVRWQUwrMjQoJXIxKQorCWxmcyAlZjgsIFJFVFZBTCsyOCglcjEpCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQorCWJscgorLkxzbWFsbDoKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsZCAlcjMsUkVUVkFMKzAoJXIxKQorCW10bHIgJXIwCisJbGQgJXI0LFJFVFZBTCs4KCVyMSkKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCisJYmxyCisjIGVsc2UKKwkjIEEgc3RydWN0IHNtYWxsZXIgdGhhbiBhIGR3b3JkIGlzIHJldHVybmVkIGluIHRoZSBsb3cgYml0cyBvZiByMworCSMgaWUuIHJpZ2h0IGp1c3RpZmllZC4gIExhcmdlciBzdHJ1Y3RzIGFyZSBwYXNzZWQgbGVmdCBqdXN0aWZpZWQKKwkjIGluIHIzIGFuZCByNC4gIFRoZSByZXR1cm4gdmFsdWUgYXJlYSBvbiB0aGUgc3RhY2sgd2lsbCBoYXZlCisJIyB0aGUgc3RydWN0cyBhcyB0aGV5IGFyZSB1c3VhbGx5IHN0b3JlZCBpbiBtZW1vcnkuCisJY21wbGRpICVyMywgRkZJX1YyX1RZUEVfU01BTExfU1RSVUNUICsgNyAjIHNpemUgOCBieXRlcz8KKwluZWcgJXI1LCAlcjMKKwlsZCAlcjMsUkVUVkFMKzAoJXIxKQorCWJsdCAuTHNtYWxsZG93bgorCW10bHIgJXIwCisJbGQgJXI0LFJFVFZBTCs4KCVyMSkKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCisJYmxyCisuTHNtYWxsZG93bjoKKwlhZGRpICVyNSwgJXI1LCBGRklfVjJfVFlQRV9TTUFMTF9TVFJVQ1QgKyA3CisJbXRsciAlcjAKKwlzbGRpICVyNSwgJXI1LCAzCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQorCXNyZCAlcjMsICVyMywgJXI1CisJYmxyCisjIGVuZGlmCisKIC5MRkUxOgogCS5sb25nCTAKIAkuYnl0ZQkwLDEyLDAsMSwxMjgsMCwwLDAKLSNpZmRlZiBfQ0FMTF9MSU5VWAorIyBpZiBfQ0FMTF9FTEYgPT0gMgorCS5zaXplCWZmaV9jbG9zdXJlX0xJTlVYNjQsLi1mZmlfY2xvc3VyZV9MSU5VWDY0CisjIGVsc2UKKyMgIGlmZGVmIF9DQUxMX0xJTlVYCiAJLnNpemUJZmZpX2Nsb3N1cmVfTElOVVg2NCwuLS5MLmZmaV9jbG9zdXJlX0xJTlVYNjQKLSNlbHNlCisjICBlbHNlCiAJLnNpemUJLmZmaV9jbG9zdXJlX0xJTlVYNjQsLi0uZmZpX2Nsb3N1cmVfTElOVVg2NAotI2VuZGlmCisjICBlbmRpZgorIyBlbmRpZgogCiAJLnNlY3Rpb24JLmVoX2ZyYW1lLEVIX0ZSQU1FX0ZMQUdTLEBwcm9nYml0cwogLkxmcmFtZTE6CkBAIC0yMzksMTQgKzM3OCwxNCBAQAogCS5ieXRlCTB4MgkgIyBEV19DRkFfYWR2YW5jZV9sb2MxCiAJLmJ5dGUJLkxDRkkwLS5MRkIxCiAJLmJ5dGUJMHhlCSAjIERXX0NGQV9kZWZfY2ZhX29mZnNldAotCS51bGViMTI4IDI0MAorCS51bGViMTI4IFNUQUNLRlJBTUUKIAkuYnl0ZQkweDExCSAjIERXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2YKIAkudWxlYjEyOCAweDQxCiAJLnNsZWIxMjggLTIKIAkuYWxpZ24gMwogLkxFRkRFMToKLSNlbmRpZgogCi0jaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisjIGlmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXwogCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKyMgZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCmluZGV4IDQxZmI4ODUuLjA3NTkyMmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKQEAgLTMxLDcgKzMxLDcgQEAKIAogCS5maWxlICAgInBwY19jbG9zdXJlLlMiCiAKLSNpZm5kZWYgX19wb3dlcnBjNjRfXworI2lmbmRlZiBQT1dFUlBDNjQKIAogRU5UUlkoZmZpX2Nsb3N1cmVfU1lTVikKIC5MRkIxOgpAQCAtMTU5LDI1ICsxNTksNDEgQEAKICNlbmRpZgogCiAjIGNhc2UgRkZJX1RZUEVfVUlOVDgKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxieiAlcjMsMTEyKzAoJXIxKQorI2Vsc2UKIAlsYnogJXIzLDExMiszKCVyMSkKKyNlbmRpZgogCW10bHIgJXIwCiAJYWRkaSAlcjEsJXIxLDE0NAogCWJscgogCiAjIGNhc2UgRkZJX1RZUEVfU0lOVDgKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxieiAlcjMsMTEyKzAoJXIxKQorI2Vsc2UKIAlsYnogJXIzLDExMiszKCVyMSkKKyNlbmRpZgogCWV4dHNiICVyMywlcjMKIAltdGxyICVyMAogCWIgLkxmaW5pc2gKIAogIyBjYXNlIEZGSV9UWVBFX1VJTlQxNgorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGh6ICVyMywxMTIrMCglcjEpCisjZWxzZQogCWxoeiAlcjMsMTEyKzIoJXIxKQorI2VuZGlmCiAJbXRsciAlcjAKIAlhZGRpICVyMSwlcjEsMTQ0CiAJYmxyCiAKICMgY2FzZSBGRklfVFlQRV9TSU5UMTYKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxoYSAlcjMsMTEyKzAoJXIxKQorI2Vsc2UKIAlsaGEgJXIzLDExMisyKCVyMSkKKyNlbmRpZgogCW10bHIgJXIwCiAJYWRkaSAlcjEsJXIxLDE0NAogCWJscgpAQCAtMjIyLDcgKzIzOCw3IEBACiAJbHd6ICVyMywxMTIrMCglcjEpCiAJbHd6ICVyNCwxMTIrNCglcjEpCiAJbHd6ICVyNSwxMTIrOCglcjEpCi0JYmwgLkx1aW50MTI4CisJYiAuTHVpbnQxMjgKIAogIyBUaGUgcmV0dXJuIHR5cGVzIGJlbG93IGFyZSBvbmx5IHVzZWQgd2hlbiB0aGUgQUJJIHR5cGUgaXMgRkZJX1NZU1YuCiAjIGNhc2UgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKyAxLiBPbmUgYnl0ZSBzdHJ1Y3QuCkBAIC0yMzksOSArMjU1LDE1IEBACiAKICMgY2FzZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCArIDMuIFRocmVlIGJ5dGUgc3RydWN0LgogCWx3eiAlcjMsMTEyKzAoJXIxKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJbXRsciAlcjAKKwlhZGRpICVyMSwlcjEsMTQ0CisJYmxyCisjZWxzZQogCXNyd2kgJXIzLCVyMyw4CiAJbXRsciAlcjAKIAliIC5MZmluaXNoCisjZW5kaWYKIAogIyBjYXNlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUICsgNC4gRm91ciBieXRlIHN0cnVjdC4KIAlsd3ogJXIzLDExMiswKCVyMSkKQEAgLTI1MiwyMCArMjc0LDM1IEBACiAjIGNhc2UgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKyA1LiBGaXZlIGJ5dGUgc3RydWN0LgogCWx3eiAlcjMsMTEyKzAoJXIxKQogCWx3eiAlcjQsMTEyKzQoJXIxKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJbXRsciAlcjAKKwliIC5MZmluaXNoCisjZWxzZQogCWxpICVyNSwyNAogCWIgLkxzdHJ1Y3Q1NjcKKyNlbmRpZgogCiAjIGNhc2UgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKyA2LiBTaXggYnl0ZSBzdHJ1Y3QuCiAJbHd6ICVyMywxMTIrMCglcjEpCiAJbHd6ICVyNCwxMTIrNCglcjEpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwltdGxyICVyMAorCWIgLkxmaW5pc2gKKyNlbHNlCiAJbGkgJXI1LDE2CiAJYiAuTHN0cnVjdDU2NworI2VuZGlmCiAKICMgY2FzZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCArIDcuIFNldmVuIGJ5dGUgc3RydWN0LgogCWx3eiAlcjMsMTEyKzAoJXIxKQogCWx3eiAlcjQsMTEyKzQoJXIxKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJbXRsciAlcjAKKwliIC5MZmluaXNoCisjZWxzZQogCWxpICVyNSw4CiAJYiAuTHN0cnVjdDU2NworI2VuZGlmCiAKICMgY2FzZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCArIDguIEVpZ2h0IGJ5dGUgc3RydWN0LgogCWx3eiAlcjMsMTEyKzAoJXIxKQpAQCAtMjczLDYgKzMxMCw3IEBACiAJbXRsciAlcjAKIAliIC5MZmluaXNoCiAKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KIC5Mc3RydWN0NTY3OgogCXN1YmZpYyAlcjYsJXI1LDMyCiAJc3J3ICVyNCwlcjQsJXI1CkBAIC0yODIsMTMgKzMyMCwxNCBAQAogCW10bHIgJXIwCiAJYWRkaSAlcjEsJXIxLDE0NAogCWJscgorI2VuZGlmCiAKIC5MdWludDEyODoKIAlsd3ogJXI2LDExMisxMiglcjEpCiAJbXRsciAlcjAKIAlhZGRpICVyMSwlcjEsMTQ0CiAJYmxyCi0KKwkKIEVORChmZmlfY2xvc3VyZV9TWVNWKQogCiAJLnNlY3Rpb24JIi5laF9mcmFtZSIsRUhfRlJBTUVfRkxBR1MsQHByb2diaXRzCkBAIC0zMzksOCArMzc4LDcgQEAKIAkuYWxpZ24gMgogLkxFRkRFMToKIAotI2VuZGlmCi0KICNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KIAkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCiAjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwppbmRleCA1ZWUzYTE5Li5mZWQyMzgwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGZmaS5oPgogI2luY2x1ZGUgPHBvd2VycGMvYXNtLmg+CiAKLSNpZm5kZWYgX19wb3dlcnBjNjRfXworI2lmbmRlZiBQT1dFUlBDNjQKIAkuZ2xvYmwgZmZpX3ByZXBfYXJnc19TWVNWCiBFTlRSWShmZmlfY2FsbF9TWVNWKQogLkxGQjE6CkBAIC0xNDIsMTkgKzE0MiwxNCBAQAogI2VuZGlmCiAKIEwoc21hbGxfc3RydWN0X3JldHVybl92YWx1ZSk6Ci0JZXh0cndpCSVyNiwlcjMxLDIsMTkgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgcGFkZGluZyA9IHNoaWZ0LzggKi8KLQltdGNyZgkweDAyLCVyMzEJICAgICAgLyogY29weSBmbGFncyB0byBjclsyNDoyN10gKGNyNikgKi8KLQlleHRyd2kJJXI1LCVyMzEsNSwxOSAgICAgICAgIC8qIHI1IDwtIG51bWJlciBvZiBiaXRzIG9mIHBhZGRpbmcgKi8KLQlzdWJmaWMgICVyNiwlcjYsNCAgICAgICAgICAgICAvKiByNiA8LSBudW1iZXIgb2YgdXNlZnVsIGJ5dGVzIGluIHIzICovCi0JYmYtCTI1LEwoZG9uZV9yZXR1cm5fdmFsdWUpIC8qIHN0cnVjdCBpbiByMyA/IGlmIG5vdCwgZG9uZS4gKi8KLS8qIHNtc3Rfb25lX3JlZ2lzdGVyOiAqLwotCXNsdwklcjMsJXIzLCVyNSAgICAgICAgICAgLyogTGVmdC1qdXN0aWZ5IHZhbHVlIGluIHIzICovCi0JbXR4ZXIJJXI2ICAgICAgICAgICAgICAgICAgIC8qIG1vdmUgYnl0ZSBjb3VudCB0byBYRVIgLi4uICovCi0Jc3Rzd3gJJXIzLDAsJXIzMCAgICAgICAgICAgIC8qIC4uLiBhbmQgc3RvcmUgdGhhdCBtYW55IGJ5dGVzICovCi0JYmYrCTI2LEwoZG9uZV9yZXR1cm5fdmFsdWUpICAvKiBzdHJ1Y3QgaW4gcjM6cjQgPyAqLwotCWFkZAklcjYsJXI2LCVyMzAgICAgICAgICAgLyogYWRqdXN0IHBvaW50ZXIgKi8KLQlzdHN3aQklcjQsJXI2LDQgICAgICAgICAgICAgLyogc3RvcmUgbGFzdCBmb3VyIGJ5dGVzICovCi0JYglMKGRvbmVfcmV0dXJuX3ZhbHVlKQorCS8qCisJICogVGhlIEMgY29kZSBhbHdheXMgYWxsb2NhdGVzIGEgcHJvcGVybHktYWxpZ25lZCA4LWJ5dGUgYm91bmNlCisJICogYnVmZmVyIHRvIG1ha2UgdGhpcyBhc3NlbWJseSBjb2RlIHZlcnkgc2ltcGxlLiAgSnVzdCB3cml0ZSBvdXQKKwkgKiByMyBhbmQgcjQgdG8gdGhlIGJ1ZmZlciB0byBhbGxvdyB0aGUgQyBjb2RlIHRvIGhhbmRsZSB0aGUgcmVzdC4KKwkgKi8KKwlzdHcgJXIzLCAwKCVyMzApCisJc3R3ICVyNCwgNCglcjMwKQorCWIgTChkb25lX3JldHVybl92YWx1ZSkKIAogLkxGRTE6CiBFTkQoZmZpX2NhbGxfU1lTVikKQEAgLTIxOCw4ICsyMTMsOCBAQAogICAgICAgLnVsZWIxMjggIDB4MWMKICAgICAgIC5hbGlnbiAyCiAuTEVGREUxOgotI2VuZGlmCiAKICNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KIAkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCiAjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcHJlcF9jaWYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ByZXBfY2lmLmMKaW5kZXggZThlYzVjZi4uNTVjZWVkOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcHJlcF9jaWYuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wcmVwX2NpZi5jCkBAIC03Niw2ICs3NiwxMyBAQAogICAgICB0b3RhbCBzaXplIG9mIDMqc2l6ZW9mKGxvbmcpLiAgKi8KICAgYXJnLT5zaXplID0gQUxJR04gKGFyZy0+c2l6ZSwgYXJnLT5hbGlnbm1lbnQpOwogCisgIC8qIE9uIHNvbWUgdGFyZ2V0cywgdGhlIEFCSSBkZWZpbmVzIHRoYXQgc3RydWN0dXJlcyBoYXZlIGFuIGFkZGl0aW9uYWwKKyAgICAgYWxpZ25tZW50IGJleW9uZCB0aGUgIm5hdHVyYWwiIG9uZSBiYXNlZCBvbiB0aGVpciBlbGVtZW50cy4gICovCisjaWZkZWYgRkZJX0FHR1JFR0FURV9BTElHTk1FTlQKKyAgaWYgKEZGSV9BR0dSRUdBVEVfQUxJR05NRU5UID4gYXJnLT5hbGlnbm1lbnQpCisgICAgYXJnLT5hbGlnbm1lbnQgPSBGRklfQUdHUkVHQVRFX0FMSUdOTUVOVDsKKyNlbmRpZgorCiAgIGlmIChhcmctPnNpemUgPT0gMCkKICAgICByZXR1cm4gRkZJX0JBRF9UWVBFREVGOwogICBlbHNlCkBAIC0xMTEsMTMgKzExOCw4IEBACiAgIEZGSV9BU1NFUlQoKCFpc3ZhcmlhZGljKSB8fCAobmZpeGVkYXJncyA+PSAxKSk7CiAgIEZGSV9BU1NFUlQobmZpeGVkYXJncyA8PSBudG90YWxhcmdzKTsKIAotI2lmbmRlZiBYODZfV0lOMzIKICAgaWYgKCEgKGFiaSA+IEZGSV9GSVJTVF9BQkkgJiYgYWJpIDwgRkZJX0xBU1RfQUJJKSkKICAgICByZXR1cm4gRkZJX0JBRF9BQkk7Ci0jZWxzZQotICBpZiAoISAoYWJpID4gRkZJX0ZJUlNUX0FCSSAmJiBhYmkgPCBGRklfTEFTVF9BQkkgfHwgYWJpID09IEZGSV9USElTQ0FMTCkpCi0gICAgcmV0dXJuIEZGSV9CQURfQUJJOwotI2VuZGlmCiAKICAgY2lmLT5hYmkgPSBhYmk7CiAgIGNpZi0+YXJnX3R5cGVzID0gYXR5cGVzOwpAQCAtMTI2LDYgKzEyOCwxMCBAQAogCiAgIGNpZi0+ZmxhZ3MgPSAwOwogCisjaWYgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UCisgIGZmaV9wcmVwX3R5cGVzIChhYmkpOworI2VuZGlmCisKICAgLyogSW5pdGlhbGl6ZSB0aGUgcmV0dXJuIHR5cGUgaWYgbmVjZXNzYXJ5ICovCiAgIGlmICgoY2lmLT5ydHlwZS0+c2l6ZSA9PSAwKSAmJiAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUoY2lmLT5ydHlwZSkgIT0gRkZJX09LKSkKICAgICByZXR1cm4gRkZJX0JBRF9UWVBFREVGOwpAQCAtMTQ2LDcgKzE1Miw5IEBACiAjaWZkZWYgWFRFTlNBCiAgICAgICAmJiAoY2lmLT5ydHlwZS0+c2l6ZSA+IDE2KQogI2VuZGlmCi0KKyNpZmRlZiBOSU9TMgorICAgICAgJiYgKGNpZi0+cnR5cGUtPnNpemUgPiA4KQorI2VuZGlmCiAgICAgICkKICAgICBieXRlcyA9IFNUQUNLX0FSR19TSVpFKHNpemVvZih2b2lkKikpOwogI2VuZGlmCkBAIC0xNzQsNyArMTgyLDcgQEAKIAl7CiAJICAvKiBBZGQgYW55IHBhZGRpbmcgaWYgbmVjZXNzYXJ5ICovCiAJICBpZiAoKCgqcHRyKS0+YWxpZ25tZW50IC0gMSkgJiBieXRlcykKLQkgICAgYnl0ZXMgPSBBTElHTihieXRlcywgKCpwdHIpLT5hbGlnbm1lbnQpOworCSAgICBieXRlcyA9ICh1bnNpZ25lZClBTElHTihieXRlcywgKCpwdHIpLT5hbGlnbm1lbnQpOwogCiAjaWZkZWYgVElMRQogCSAgaWYgKGJ5dGVzIDwgMTAgKiBGRklfU0laRU9GX0FSRyAmJgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9mZmkuYwppbmRleCAzNTE1YjkxLi45ZWM4NmJmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9mZmkuYwpAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBTVFJVQ1RfVkFMVUVfQUREUkVTU19XSVRIX0FSRyAwCiAjZW5kaWYKIAotLyogSWYgdGhlIHN0cnVjdHVyZSBoYXMgZXNzZW50aWFseSBhbiB1bmlxdWUgZWxlbWVudCwgcmV0dXJuIGl0cyB0eXBlLiAgKi8KKy8qIElmIHRoZSBzdHJ1Y3R1cmUgaGFzIGVzc2VudGlhbGx5IGFuIHVuaXF1ZSBlbGVtZW50LCByZXR1cm4gaXRzIHR5cGUuICAqLwogc3RhdGljIGludAogc2ltcGxlX3R5cGUgKGZmaV90eXBlICphcmcpCiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90aWxlL3RpbGUuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3RpbGUvdGlsZS5TCmluZGV4IGExODZlMWYuLmQxZjgyY2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3RpbGUvdGlsZS5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3RpbGUvdGlsZS5TCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmbmFkZHIpKHZvaWQpKTsKIAogICAgICAgICBPbiBlbnRyeSwgUkVHX0FSR1MgY29udGFpbiB0aGUgb3V0Z29pbmcgcmVnaXN0ZXIgdmFsdWVzLAotICAgICAgICBhbmQgU1RBQ0tfQVJHUyBjb250YWludHMgU1RBQ0tfQVJHX0JZVEVTIG9mIGFkZGl0aW9uYWwgdmFsdWVzCisgICAgICAgIGFuZCBTVEFDS19BUkdTIGNvbnRhaW5zIFNUQUNLX0FSR19CWVRFUyBvZiBhZGRpdGlvbmFsIHZhbHVlcwogICAgICAgICB0byBiZSBwYXNzZWQgb24gdGhlIHN0YWNrLiBJZiBTVEFDS19BUkdfQllURVMgaXMgemVybywgdGhlbgogICAgICAgICBTVEFDS19BUkdTIGlzIGlnbm9yZWQuCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3R5cGVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90eXBlcy5jCmluZGV4IDBhMTFlYjAuLjBkZTU5OTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3R5cGVzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdHlwZXMuYwpAQCAtNDQsNiArNDQsMTcgQEAKICAgaWQsIE5VTEwJCQkJCVwKIH0KIAorI2RlZmluZSBGRklfTk9OQ09OU1RfVFlQRURFRihuYW1lLCB0eXBlLCBpZCkJXAorc3RydWN0IHN0cnVjdF9hbGlnbl8jI25hbWUgewkJCVwKKyAgY2hhciBjOwkJCQkJXAorICB0eXBlIHg7CQkJCQlcCit9OwkJCQkJCVwKK2ZmaV90eXBlIGZmaV90eXBlXyMjbmFtZSA9IHsJCQlcCisgIHNpemVvZih0eXBlKSwJCQkJCVwKKyAgb2Zmc2V0b2Yoc3RydWN0IHN0cnVjdF9hbGlnbl8jI25hbWUsIHgpLAlcCisgIGlkLCBOVUxMCQkJCQlcCit9CisKIC8qIFNpemUgYW5kIGFsaWdubWVudCBhcmUgZmFrZSBoZXJlLiBUaGV5IG11c3Qgbm90IGJlIDAuICovCiBjb25zdCBmZmlfdHlwZSBmZmlfdHlwZV92b2lkID0gewogICAxLCAxLCBGRklfVFlQRV9WT0lELCBOVUxMCkBAIC03Myw1ICs4NCw5IEBACiAjIGVuZGlmCiBjb25zdCBmZmlfdHlwZSBmZmlfdHlwZV9sb25nZG91YmxlID0geyAxNiwgMTYsIDQsIE5VTEwgfTsKICNlbGlmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisjIGlmIEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVAorRkZJX05PTkNPTlNUX1RZUEVERUYobG9uZ2RvdWJsZSwgbG9uZyBkb3VibGUsIEZGSV9UWVBFX0xPTkdET1VCTEUpOworIyBlbHNlCiBGRklfVFlQRURFRihsb25nZG91YmxlLCBsb25nIGRvdWJsZSwgRkZJX1RZUEVfTE9OR0RPVUJMRSk7CisjIGVuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9lbGZic2QuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9lbGZic2QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWNhMzEzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2VsZmJzZC5TCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIE1pb2RyYWcgVmFsbGF0LiAgPG1pb2RAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvKgorICogdmF4IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisgKi8KKworI2RlZmluZSBMSUJGRklfQVNNCQorI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgorI2luY2x1ZGUgPGZmaS5oPgorCisJLnRleHQKKworLyoKKyAqIHZvaWQgKgkJCQkJJXIwCisgKiBmZmlfY2FsbF9lbGZic2QoZXh0ZW5kZWRfY2lmICplY2lmLAkJNCglYXApCisgKgkJICAgdW5zaWduZWQgYnl0ZXMsCQk4KCVhcCkKKyAqCQkgICB1bnNpZ25lZCBmbGFncywJCTEyKCVhcCkKKyAqCQkgICB2b2lkICpydmFsdWUsCQkxNiglYXApCisgKgkJICAgdm9pZCAoKmZuKSgpKTsJCTIwKCVhcCkKKyAqLworCS5nbG9ibAlmZmlfY2FsbF9lbGZic2QKKwkudHlwZQlmZmlfY2FsbF9lbGZic2QsQGZ1bmN0aW9uCisJLmFsaWduCTIKK2ZmaV9jYWxsX2VsZmJzZDoKKwkud29yZAkweDAwYwkJIyBzYXZlIFIyIGFuZCBSMworCisJIyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3IgdGhlIGFyZ3MKKwlzdWJsMgk4KCVhcCksICVzcAorCisJIyBDYWxsIGZmaV9wcmVwX2FyZ3MKKwlwdXNobAklc3AKKwlwdXNobAk0KCVhcCkKKwljYWxscwkkMiwgZmZpX3ByZXBfYXJncworCisJIyBHZXQgZnVuY3Rpb24gcG9pbnRlcgorCW1vdmwJMjAoJWFwKSwgJXIxCisKKwkjIEJ1aWxkIGEgQ0FMTFMgZnJhbWUKKwlhc2hsCSQtMiwgOCglYXApLCAlcjAKKwlwdXNobAklcjAJCSMgYXJndW1lbnQgc3RhY2sgdXNhZ2UKKwltb3ZsCSVzcCwgJXIwCSMgZnV0dXJlICVhcAorCSMgc2F2ZWQgcmVnaXN0ZXJzCisJYmJjCSQxMSwgMCglcjEpLCAxZgorCXB1c2hsCSVyMTEKKzE6CWJiYwkkMTAsIDAoJXIxKSwgMWYKKwlwdXNobAklcjEwCisxOgliYmMJJDksIDAoJXIxKSwgMWYKKwlwdXNobAklcjkKKzE6CWJiYwkkOCwgMCglcjEpLCAxZgorCXB1c2hsCSVyOAorMToJYmJjCSQ3LCAwKCVyMSksIDFmCisJcHVzaGwJJXI3CisxOgliYmMJJDYsIDAoJXIxKSwgMWYKKwlwdXNobAklcjYKKzE6CWJiYwkkNSwgMCglcjEpLCAxZgorCXB1c2hsCSVyNQorMToJYmJjCSQ0LCAwKCVyMSksIDFmCisJcHVzaGwJJXI0CisxOgliYmMJJDMsIDAoJXIxKSwgMWYKKwlwdXNobAklcjMKKzE6CWJiYwkkMiwgMCglcjEpLCAxZgorCXB1c2hsCSVyMgorMToJCisJcHVzaGFsCTlmCisJcHVzaGwJJWZwCisJcHVzaGwJJWFwCisJbW92bAkxNiglYXApLCAlcjMJIyBzdHJ1Y3QgcmV0dXJuIGFkZHJlc3MsIGlmIG5lZWRlZAorCW1vdmwJJXIwLCAlYXAKKwltb3Z6d2wJNCglZnApLCAlcjAJIyBwcmV2aW91cyBQU1csIHdpdGhvdXQgdGhlIHNhdmVkIHJlZ2lzdGVycyBtYXNrCisJYmlzbDIJJDB4MjAwMDAwMDAsICVyMCAjIGNhbGxzIGZyYW1lCisJbW92endsCTAoJXIxKSwgJXIyCisJYmljdzIJJDB4ZjAwMywgJXIyCSMgb25seSBrZWVwIFIxMS1SMgorCWFzaGwJJDE2LCAlcjIsICVyMgorCWJpc2wyCSVyMiwgJXIwCSMgc2F2ZWQgcmVnaXN0ZXIgbWFzayBvZiB0aGUgY2FsbGVkIGZ1bmN0aW9uCisJcHVzaGwJJXIwCQorCXB1c2hsCSQwCisJbW92bAklc3AsICVmcAorCisJIyBJbnZva2UgdGhlIGZ1bmN0aW9uCisJcHVzaGFsCTIoJXIxKQkJIyBza2lwIHByb2NlZHVyZSBlbnRyeSBtYXNrCisJbW92bAklcjMsICVyMQorCWJpY3BzdwkkMHgwMDBmCisJcnNiCisKKzk6CisJIyBDb3B5IHJldHVybiB2YWx1ZSBpZiBuZWNlc3NhcnkKKwl0c3RsCTE2KCVhcCkKKwlqZXFsCTlmCisJbW92bAkxNiglYXApLCAlcjIKKworCWJiYwkkMCwgMTIoJWFwKSwgMWYJIyBDSUZfRkxBR1NfQ0hBUgorCW1vdmIJJXIwLCAwKCVyMikKKwlicmIJOWYKKzE6CisJYmJjCSQxLCAxMiglYXApLCAxZgkjIENJRl9GTEFHU19TSE9SVAorCW1vdncJJXIwLCAwKCVyMikKKwlicmIJOWYKKzE6CisJYmJjCSQyLCAxMiglYXApLCAxZgkjIENJRl9GTEFHU19JTlQKKwltb3ZsCSVyMCwgMCglcjIpCisJYnJiCTlmCisxOgorCWJiYwkkMywgMTIoJWFwKSwgMWYJIyBDSUZfRkxBR1NfRElOVAorCW1vdnEJJXIwLCAwKCVyMikKKwlicmIJOWYKKzE6CisJbW92bAklcjEsICVyMAkjIG1pZ2h0IGhhdmUgYmVlbiBhIHN0cnVjdAorCSNicmIJOWYKKworOToKKwlyZXQKKworLyoKKyAqIGZmaV9jbG9zdXJlX2VsZmJzZCh2b2lkKTsKKyAqIGludm9rZWQgd2l0aAklcjA6IGZmaV9jbG9zdXJlICpjbG9zdXJlCisgKi8KKwkuZ2xvYmwJZmZpX2Nsb3N1cmVfZWxmYnNkCisJLnR5cGUJZmZpX2Nsb3N1cmVfZWxmYnNkLCBAZnVuY3Rpb24KKwkuYWxpZ24JMgorZmZpX2Nsb3N1cmVfZWxmYnNkOgorCS53b3JkCTAKKworCSMgQWxsb2NhdGUgcm9vbSBvbiBzdGFjayBmb3IgcmV0dXJuIHZhbHVlCisJc3VibDIJJDgsICVzcAorCisJIyBJbnZva2UgdGhlIGNsb3N1cmUgZnVuY3Rpb24KKwlwdXNoYWwJNCglYXApCQkjIGNhbGxpbmcgc3RhY2sKKwlwdXNoYWwJNCglc3ApCQkjIHJldHVybiB2YWx1ZQorCXB1c2hsCSVyMAkJIyBjbG9zdXJlCisJY2FsbHMJJDMsIGZmaV9jbG9zdXJlX2VsZmJzZF9pbm5lcgorCisJIyBDb3B5IHJldHVybiB2YWx1ZSBpZiBuZWNlc3NhcnkKKwliaXRiCSQxLCAlcjAJCSMgQ0lGX0ZMQUdTX0NIQVIKKwliZXFsCTFmCisJbW92YgkwKCVzcCksICVyMAorCWJyYgk5ZgorMToKKwliaXRiCSQyLCAlcjAJCSMgQ0lGX0ZMQUdTX1NIT1JUCisJYmVxbAkxZgorCW1vdncJMCglc3ApLCAlcjAKKwlicmIJOWYKKzE6CisJYml0YgkkNCwgJXIwCQkjIENJRl9GTEFHU19JTlQKKwliZXFsCTFmCisJbW92bAkwKCVzcCksICVyMAorCWJyYgk5ZgorMToKKwliaXRiCSQ4LCAlcjAJCSMgQ0lGX0ZMQUdTX0RJTlQKKwliZXFsCTFmCisJbW92cQkwKCVzcCksICVyMAorCSNicmIJOWYKKzE6CisKKzk6CisJcmV0CisKKy8qCisgKiBmZmlfY2xvc3VyZV9zdHJ1Y3RfZWxmYnNkKHZvaWQpOworICogaW52b2tlZCB3aXRoCSVyMDogZmZpX2Nsb3N1cmUgKmNsb3N1cmUKKyAqCQklcjE6IHN0cnVjdCByZXR1cm4gYWRkcmVzcworICovCisJLmdsb2JsCWZmaV9jbG9zdXJlX3N0cnVjdF9lbGZic2QKKwkudHlwZQlmZmlfY2xvc3VyZV9zdHJ1Y3RfZWxmYnNkLCBAZnVuY3Rpb24KKwkuYWxpZ24JMgorZmZpX2Nsb3N1cmVfc3RydWN0X2VsZmJzZDoKKwkud29yZAkwCisKKwkjIEludm9rZSB0aGUgY2xvc3VyZSBmdW5jdGlvbgorCXB1c2hhbAk0KCVhcCkJCSMgY2FsbGluZyBzdGFjaworCXB1c2hsCSVyMQkJIyByZXR1cm4gdmFsdWUKKwlwdXNobAklcjAJCSMgY2xvc3VyZQorCWNhbGxzCSQzLCBmZmlfY2xvc3VyZV9lbGZic2RfaW5uZXIKKworCXJldApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2ZmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDZiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZmZpLmMKQEAgLTAsMCArMSwyNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgTWlvZHJhZyBWYWxsYXQuICA8bWlvZEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qCisgKiB2YXggRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKyAqCisgKiBUaGlzIGZpbGUgYXR0ZW1wdHMgdG8gcHJvdmlkZSBhbGwgdGhlIEZGSSBlbnRyeSBwb2ludHMgd2hpY2ggY2FuIHJlbGlhYmx5CisgKiBiZSBpbXBsZW1lbnRlZCBpbiBDLgorICovCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBDSUZfRkxBR1NfQ0hBUgkJMQkvKiBmb3Igc3RydWN0IG9ubHkgKi8KKyNkZWZpbmUgQ0lGX0ZMQUdTX1NIT1JUCQkyCS8qIGZvciBzdHJ1Y3Qgb25seSAqLworI2RlZmluZSBDSUZfRkxBR1NfSU5UCQk0CisjZGVmaW5lIENJRl9GTEFHU19ESU5UCQk4CisKKy8qCisgKiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSBBUEkKKyAqLworCit2b2lkIGZmaV9jYWxsX2VsZmJzZCAoZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLCB1bnNpZ25lZCwgdm9pZCAqLAorCQkgICAgICAgdm9pZCAoKikgKCkpOwordm9pZCAqZmZpX3ByZXBfYXJncyAoZXh0ZW5kZWRfY2lmICplY2lmLCB2b2lkICpzdGFjayk7CisKK3ZvaWQgKgorZmZpX3ByZXBfYXJncyAoZXh0ZW5kZWRfY2lmICplY2lmLCB2b2lkICpzdGFjaykKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIHZvaWQgKipwX2FyZ3Y7CisgIGNoYXIgKmFyZ3A7CisgIGZmaV90eXBlICoqcF9hcmc7CisgIHZvaWQgKnN0cnVjdF92YWx1ZV9wdHI7CisKKyAgYXJncCA9IHN0YWNrOworCisgIGlmIChlY2lmLT5jaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgIWVjaWYtPmNpZi0+ZmxhZ3MpCisgICAgc3RydWN0X3ZhbHVlX3B0ciA9IGVjaWYtPnJ2YWx1ZTsKKyAgZWxzZQorICAgIHN0cnVjdF92YWx1ZV9wdHIgPSBOVUxMOworCisgIHBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKKworICBmb3IgKGkgPSBlY2lmLT5jaWYtPm5hcmdzLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOworICAgICAgIGkgIT0gMDsKKyAgICAgICBpLS0sIHBfYXJnKyspCisgICAgeworICAgICAgc2l6ZV90IHo7CisKKyAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgICAgIGlmICh6IDwgc2l6ZW9mIChpbnQpKQorCXsKKwkgIHN3aXRjaCAoKCpwX2FyZyktPnR5cGUpCisJICAgIHsKKwkgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSAqKFNJTlQ4ICopICpwX2FyZ3Y7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UOCAqKSAqcF9hcmd2OworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpICooU0lOVDE2ICopICpwX2FyZ3Y7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDE2ICopICpwX2FyZ3Y7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICAgICAgbWVtY3B5IChhcmdwLCAqcF9hcmd2LCB6KTsKKwkgICAgICBicmVhazsKKworCSAgICBkZWZhdWx0OgorCSAgICAgIEZGSV9BU1NFUlQgKDApOworCSAgICB9CisJICB6ID0gc2l6ZW9mIChpbnQpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBtZW1jcHkgKGFyZ3AsICpwX2FyZ3YsIHopOworCisJICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkuICAqLworCSAgaWYgKChzaXplb2YoaW50KSAtIDEpICYgeikKKwkgICAgeiA9IEFMSUdOKHosIHNpemVvZihpbnQpKTsKKwl9CisKKyAgICAgIHBfYXJndisrOworICAgICAgYXJncCArPSB6OworICAgIH0KKworICByZXR1cm4gc3RydWN0X3ZhbHVlX3B0cjsKK30KKworZmZpX3N0YXR1cworZmZpX3ByZXBfY2lmX21hY2hkZXAgKGZmaV9jaWYgKmNpZikKK3sKKyAgLyogU2V0IHRoZSByZXR1cm4gdHlwZSBmbGFnICovCisgIHN3aXRjaCAoY2lmLT5ydHlwZS0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBGRklfVFlQRV9WT0lEOgorICAgICAgY2lmLT5mbGFncyA9IDA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorICAgICAgaWYgKGNpZi0+cnR5cGUtPmVsZW1lbnRzWzBdLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCAmJgorCSAgY2lmLT5ydHlwZS0+ZWxlbWVudHNbMV0pCisJeworCSAgY2lmLT5mbGFncyA9IDA7CisJICBicmVhazsKKwl9CisKKyAgICAgIGlmIChjaWYtPnJ0eXBlLT5zaXplID09IHNpemVvZiAoY2hhcikpCisJY2lmLT5mbGFncyA9IENJRl9GTEFHU19DSEFSOworICAgICAgZWxzZSBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA9PSBzaXplb2YgKHNob3J0KSkKKwljaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX1NIT1JUOworICAgICAgZWxzZSBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA9PSBzaXplb2YgKGludCkpCisJY2lmLT5mbGFncyA9IENJRl9GTEFHU19JTlQ7CisgICAgICBlbHNlIGlmIChjaWYtPnJ0eXBlLT5zaXplID09IDIgKiBzaXplb2YgKGludCkpCisJY2lmLT5mbGFncyA9IENJRl9GTEFHU19ESU5UOworICAgICAgZWxzZQorCWNpZi0+ZmxhZ3MgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKGNpZi0+cnR5cGUtPnNpemUgPD0gc2l6ZW9mIChpbnQpKQorCWNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfSU5UOworICAgICAgZWxzZQorCWNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfRElOVDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gRkZJX09LOworfQorCit2b2lkCitmZmlfY2FsbCAoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pICgpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCit7CisgIGV4dGVuZGVkX2NpZiBlY2lmOworCisgIGVjaWYuY2lmID0gY2lmOworICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKKworICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuIHZhbHVlCisgICAgIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lLiAgKi8KKworICBpZiAocnZhbHVlID09IE5VTEwKKyAgICAgICYmIGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiBjaWYtPmZsYWdzID09IDApCisgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EgKGNpZi0+cnR5cGUtPnNpemUpOworICBlbHNlCisgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CisKKyAgc3dpdGNoIChjaWYtPmFiaSkKKyAgICB7CisgICAgY2FzZSBGRklfRUxGQlNEOgorICAgICAgZmZpX2NhbGxfZWxmYnNkICgmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZGSV9BU1NFUlQgKDApOworICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKgorICogQ2xvc3VyZSBBUEkKKyAqLworCit2b2lkIGZmaV9jbG9zdXJlX2VsZmJzZCAodm9pZCk7Cit2b2lkIGZmaV9jbG9zdXJlX3N0cnVjdF9lbGZic2QgKHZvaWQpOwordW5zaWduZWQgaW50IGZmaV9jbG9zdXJlX2VsZmJzZF9pbm5lciAoZmZpX2Nsb3N1cmUgKiwgdm9pZCAqLCBjaGFyICopOworCitzdGF0aWMgdm9pZAorZmZpX3ByZXBfY2xvc3VyZV9lbGZic2QgKGZmaV9jaWYgKmNpZiwgdm9pZCAqKmF2YWx1ZSwgY2hhciAqc3RhY2twKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgdm9pZCAqKnBfYXJndjsKKyAgZmZpX3R5cGUgKipwX2FyZzsKKworICBwX2FyZ3YgPSBhdmFsdWU7CisKKyAgZm9yIChpID0gY2lmLT5uYXJncywgcF9hcmcgPSBjaWYtPmFyZ190eXBlczsgaSAhPSAwOyBpLS0sIHBfYXJnKyspCisgICAgeworICAgICAgc2l6ZV90IHo7CisKKyAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgICAgICpwX2FyZ3YgPSBzdGFja3A7CisKKyAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeSAqLworICAgICAgaWYgKChzaXplb2YgKGludCkgLSAxKSAmIHopCisJeiA9IEFMSUdOKHosIHNpemVvZiAoaW50KSk7CisKKyAgICAgIHBfYXJndisrOworICAgICAgc3RhY2twICs9IHo7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQKK2ZmaV9jbG9zdXJlX2VsZmJzZF9pbm5lciAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKnJlc3AsIGNoYXIgKnN0YWNrKQoreworICBmZmlfY2lmICpjaWY7CisgIHZvaWQgKiphcmdfYXJlYTsKKworICBjaWYgPSBjbG9zdXJlLT5jaWY7CisgIGFyZ19hcmVhID0gKHZvaWQgKiopIGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7CisKKyAgZmZpX3ByZXBfY2xvc3VyZV9lbGZic2QgKGNpZiwgYXJnX2FyZWEsIHN0YWNrKTsKKworICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCByZXNwLCBhcmdfYXJlYSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKworICByZXR1cm4gY2lmLT5mbGFnczsKK30KKworZmZpX3N0YXR1cworZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCBmZmlfY2lmICpjaWYsCisJCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYgKiwgdm9pZCAqLCB2b2lkICoqLCB2b2lkICopLAorCQkgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNvZGVsb2MpCit7CisgIGNoYXIgKnRyYW1wID0gKGNoYXIgKikgY29kZWxvYzsKKyAgdm9pZCAqZm47CisKKyAgRkZJX0FTU0VSVCAoY2lmLT5hYmkgPT0gRkZJX0VMRkJTRCk7CisKKyAgLyogZW50cnkgbWFzayAqLworICAqKHVuc2lnbmVkIHNob3J0ICopKHRyYW1wICsgMCkgPSAweDAwMDA7CisgIC8qIG1vdmwgI2Nsb3N1cmUsIHIwICovCisgIHRyYW1wWzJdID0gMHhkMDsKKyAgdHJhbXBbM10gPSAweDhmOworICAqKHVuc2lnbmVkIGludCAqKSh0cmFtcCArIDQpID0gKHVuc2lnbmVkIGludCkgY2xvc3VyZTsKKyAgdHJhbXBbOF0gPSAweDUwOworCisgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgIWNpZi0+ZmxhZ3MpCisgICAgZm4gPSAmZmZpX2Nsb3N1cmVfc3RydWN0X2VsZmJzZDsKKyAgZWxzZQorICAgIGZuID0gJmZmaV9jbG9zdXJlX2VsZmJzZDsKKworICAvKiBqbXBsICNmbiAqLworICB0cmFtcFs5XSA9IDB4MTc7CisgIHRyYW1wWzEwXSA9IDB4ZWY7CisgICoodW5zaWduZWQgaW50ICopKHRyYW1wICsgMTEpID0gKHVuc2lnbmVkIGludClmbiArIDIgLQorCQkJCSAgKHVuc2lnbmVkIGludCl0cmFtcCAtIDkgLSA2OworCisgIGNsb3N1cmUtPmNpZiA9IGNpZjsKKyAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworICBjbG9zdXJlLT5mdW4gPSBmdW47CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9mZml0YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmM5NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2ZmaXRhcmdldC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgTWlvZHJhZyBWYWxsYXQuICA8bWlvZEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qCisgKiB2YXggRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKyAqLworCisjaWZuZGVmIExJQkZGSV9UQVJHRVRfSAorI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKKworI2lmbmRlZiBMSUJGRklfQVNNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZmZpX2FyZzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgZmZpX3Nhcmc7CisKK3R5cGVkZWYgZW51bSBmZmlfYWJpIHsKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9FTEZCU0QsCisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9FTEZCU0QsCisgIEZGSV9MQVNUX0FCSSA9IEZGSV9ERUZBVUxUX0FCSSArIDEKK30gZmZpX2FiaTsKKyNlbmRpZgorCisvKiAtLS0tIERlZmluaXRpb25zIGZvciBjbG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEZGSV9DTE9TVVJFUyAxCisjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMTUKKyNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpLmMKaW5kZXggMDYwMDQxNC4uNjRiMTllYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmkuYwpAQCAtMzksMTYgKzM5LDE4IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorCiAvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCiAgICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cyAqLwogCit2b2lkIGZmaV9wcmVwX2FyZ3MoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZik7CiB2b2lkIGZmaV9wcmVwX2FyZ3MoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZikKIHsKICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGk7CiAgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CiAgIHJlZ2lzdGVyIGNoYXIgKmFyZ3A7CiAgIHJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmc7Ci0jaWZkZWYgWDg2X1dJTjMyCisjaWZuZGVmIFg4Nl9XSU42NAogICBzaXplX3QgcF9zdGFja19hcmdzWzJdOwogICB2b2lkICpwX3N0YWNrX2RhdGFbMl07CiAgIGNoYXIgKmFyZ3AyID0gc3RhY2s7CkBAIC02Nyw3ICs2OSw3IEBACiAgICAgICApCiAgICAgewogICAgICAgKih2b2lkICoqKSBhcmdwID0gZWNpZi0+cnZhbHVlOwotI2lmZGVmIFg4Nl9XSU4zMgorI2lmbmRlZiBYODZfV0lONjQKICAgICAgIC8qIEZvciBmYXN0Y2FsbC90aGlzY2FsbCB0aGlzIGlzIGZpcnN0IHJlZ2lzdGVyLXBhc3NlZAogICAgICAgICAgYXJndW1lbnQuICAqLwogICAgICAgaWYgKGNhYmkgPT0gRkZJX1RISVNDQUxMIHx8IGNhYmkgPT0gRkZJX0ZBU1RDQUxMKQpAQCAtMTUzLDcgKzE1NSw3IEBACiAgICAgICAgICAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsIHopOwogICAgICAgICB9CiAKLSNpZmRlZiBYODZfV0lOMzIKKyNpZm5kZWYgWDg2X1dJTjY0CiAgICAgLyogRm9yIHRoaXNjYWxsL2Zhc3RjYWxsIGNvbnZlbnRpb24gcmVnaXN0ZXItcGFzc2VkIGFyZ3VtZW50cwogICAgICAgIGFyZSB0aGUgZmlyc3QgdHdvIG5vbmUtZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzIHdpdGggYSBzaXplCiAgICAgICAgc21hbGxlciBvciBlcXVhbCB0byBzaXplb2YgKHZvaWQqKS4gICovCkBAIC0xNzgsNyArMTgwLDcgQEAKICNlbmRpZgogICAgIH0KIAotI2lmZGVmIFg4Nl9XSU4zMgorI2lmbmRlZiBYODZfV0lONjQKICAgLyogV2UgbmVlZCB0byBtb3ZlIHRoZSByZWdpc3Rlci1wYXNzZWQgYXJndW1lbnRzIGZvciB0aGlzY2FsbC9mYXN0Y2FsbAogICAgICBvbiB0b3Agb2Ygc3RhY2ssIHNvIHRoYXQgdGhvc2UgY2FuIGJlIG1vdmVkIHRvIHJlZ2lzdGVycyBlY3gvZWR4IGJ5CiAgICAgIGNhbGwtaGFuZGxlci4gICovCkBAIC0zMDcsNyArMzA5LDcgQEAKICAgICB7CiAgICAgICBpZiAoKCgqcHRyKS0+YWxpZ25tZW50IC0gMSkgJiBjaWYtPmJ5dGVzKQogICAgICAgICBjaWYtPmJ5dGVzID0gQUxJR04oY2lmLT5ieXRlcywgKCpwdHIpLT5hbGlnbm1lbnQpOwotICAgICAgY2lmLT5ieXRlcyArPSBBTElHTigoKnB0ciktPnNpemUsIEZGSV9TSVpFT0ZfQVJHKTsKKyAgICAgIGNpZi0+Ynl0ZXMgKz0gKHVuc2lnbmVkKUFMSUdOKCgqcHRyKS0+c2l6ZSwgRkZJX1NJWkVPRl9BUkcpOwogICAgIH0KIAogI2lmZGVmIFg4Nl9XSU42NApAQCAtMzE1LDcgKzMxNywxMiBAQAogICBjaWYtPmJ5dGVzICs9IDQgKiBzaXplb2YoZmZpX2FyZyk7CiAjZW5kaWYKIAotICBjaWYtPmJ5dGVzID0gKGNpZi0+Ynl0ZXMgKyAxNSkgJiB+MHhGOworI2lmbmRlZiBYODZfV0lOMzIKKyNpZm5kZWYgWDg2X1dJTjY0CisgIGlmIChjaWYtPmFiaSAhPSBGRklfU1REQ0FMTCAmJiBjaWYtPmFiaSAhPSBGRklfVEhJU0NBTEwgJiYgY2lmLT5hYmkgIT0gRkZJX0ZBU1RDQUxMKQorI2VuZGlmCisgICAgY2lmLT5ieXRlcyA9IChjaWYtPmJ5dGVzICsgMTUpICYgfjB4RjsKKyNlbmRpZgogCiAgIHJldHVybiBGRklfT0s7CiB9CkBAIC0zMjQsMTEgKzMzMSwxMCBAQAogZXh0ZXJuIGludAogZmZpX2NhbGxfd2luNjQodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIGV4dGVuZGVkX2NpZiAqLAogICAgICAgICAgICAgICAgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKLSNlbGlmIGRlZmluZWQoWDg2X1dJTjMyKQorI2Vsc2UKIGV4dGVybiB2b2lkCiBmZmlfY2FsbF93aW4zMih2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgZXh0ZW5kZWRfY2lmICosCiAgICAgICAgICAgICAgICB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKLSNlbHNlCiBleHRlcm4gdm9pZCBmZmlfY2FsbF9TWVNWKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCBleHRlbmRlZF9jaWYgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKICNlbmRpZgpAQCAtMzcwLDEwICszNzYsMTcgQEAKICAgICAgIGZmaV9jYWxsX3dpbjY0KGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKICAgICAgIGJyZWFrOwotI2VsaWYgZGVmaW5lZChYODZfV0lOMzIpCisjZWxzZQorI2lmbmRlZiBYODZfV0lOMzIKICAgICBjYXNlIEZGSV9TWVNWOgotICAgIGNhc2UgRkZJX1NURENBTEw6CisgICAgICBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgZm4pOworICAgICAgYnJlYWs7CisjZWxzZQorICAgIGNhc2UgRkZJX1NZU1Y6CiAgICAgY2FzZSBGRklfTVNfQ0RFQ0w6CisjZW5kaWYKKyAgICBjYXNlIEZGSV9TVERDQUxMOgogICAgICAgZmZpX2NhbGxfd2luMzIoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+YWJpLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAogCQkgICAgIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICBicmVhazsKQEAgLTQwNiwxMSArNDE5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKICAgICAgIH0KICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICBjYXNlIEZGSV9TWVNWOgotICAgICAgZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIGZuKTsKLSAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgIEZGSV9BU1NFUlQoMCk7CkBAIC00MzQsMTIgKzQ0MiwxNSBAQAogI2lmZGVmIFg4Nl9XSU4zMgogdm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCAoZmZpX3Jhd19jbG9zdXJlICopCiAgICAgIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDEpKSk7CisjZW5kaWYKKyNpZm5kZWYgWDg2X1dJTjY0CiB2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfU1REQ0FMTCAoZmZpX2Nsb3N1cmUgKikKICAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMSkpKTsKIHZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9USElTQ0FMTCAoZmZpX2Nsb3N1cmUgKikKICAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMSkpKTsKLSNlbmRpZgotI2lmZGVmIFg4Nl9XSU42NAordm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX0ZBU1RDQUxMIChmZmlfY2xvc3VyZSAqKQorICAgICBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgxKSkpOworI2Vsc2UKIHZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV93aW42NCAoZmZpX2Nsb3N1cmUgKik7CiAjZW5kaWYKIApAQCAtNTk4LDcgKzYwOSw3IEBACiAgICAqKHVuc2lnbmVkIGludCopICAmX190cmFtcFs2XSA9IF9fZGlzOyAvKiBqbXAgX19mdW4gICovIFwKICB9CiAKLSNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9USElTQ0FMTChUUkFNUCxGVU4sQ1RYLFNJWkUpIFwKKyNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9SQVdfVEhJU0NBTEwoVFJBTVAsRlVOLENUWCxTSVpFKSBcCiB7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2Z1biA9ICh1bnNpZ25lZCBpbnQpKEZVTik7IFwKICAgIHVuc2lnbmVkIGludCAgX19jdHggPSAodW5zaWduZWQgaW50KShDVFgpOyBcCkBAIC02MjUsMTggKzYzNiwxNSBAQAogICAgKih1bnNpZ25lZCBzaG9ydCopICAmX190cmFtcFs1MF0gPSAoX19zaXplICsgOCk7IC8qIHJldCAoX19zaXplICsgOCkgICovIFwKICB9CiAKLSNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKFRSQU1QLEZVTixDVFgsU0laRSkgIFwKKyNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKFRSQU1QLEZVTixDVFgpICBcCiB7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2Z1biA9ICh1bnNpZ25lZCBpbnQpKEZVTik7IFwKICAgIHVuc2lnbmVkIGludCAgX19jdHggPSAodW5zaWduZWQgaW50KShDVFgpOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fZGlzID0gX19mdW4gLSAoX19jdHggKyAxMCk7IFwKLSAgIHVuc2lnbmVkIHNob3J0IF9fc2l6ZSA9ICh1bnNpZ25lZCBzaG9ydCkoU0laRSk7IFwKICAgICoodW5zaWduZWQgY2hhciopICZfX3RyYW1wWzBdID0gMHhiODsgXAogICAgKih1bnNpZ25lZCBpbnQqKSAgJl9fdHJhbXBbMV0gPSBfX2N0eDsgLyogbW92bCBfX2N0eCwgJWVheCAqLyBcCiAgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzVdID0gMHhlODsgXAogICAgKih1bnNpZ25lZCBpbnQqKSAgJl9fdHJhbXBbNl0gPSBfX2RpczsgLyogY2FsbCBfX2Z1biAgKi8gXAotICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFsxMF0gPSAweGMyOyBcCi0gICAqKHVuc2lnbmVkIHNob3J0KikgICZfX3RyYW1wWzExXSA9IF9fc2l6ZTsgLyogcmV0IF9fc2l6ZSAgKi8gXAogIH0KIAogLyogdGhlIGNpZiBtdXN0IGFscmVhZHkgYmUgcHJlcCdlZCAqLwpAQCAtNjY2LDIwICs2NzQsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmZmlfY2xvc3VyZV9TWVNWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWNvZGVsb2MpOwogICAgIH0KLSNpZmRlZiBYODZfV0lOMzIKKyAgZWxzZSBpZiAoY2lmLT5hYmkgPT0gRkZJX0ZBU1RDQUxMKQorICAgIHsKKyAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCAoJmNsb3N1cmUtPnRyYW1wWzBdLAorCQkJCSAgICZmZmlfY2xvc3VyZV9GQVNUQ0FMTCwKKwkJCQkgICAodm9pZCopY29kZWxvYyk7CisgICAgfQogICBlbHNlIGlmIChjaWYtPmFiaSA9PSBGRklfVEhJU0NBTEwpCiAgICAgewotICAgICAgRkZJX0lOSVRfVFJBTVBPTElORV9USElTQ0FMTCAoJmNsb3N1cmUtPnRyYW1wWzBdLAotCQkJCSAgICAmZmZpX2Nsb3N1cmVfVEhJU0NBTEwsCi0JCQkJICAgICh2b2lkKiljb2RlbG9jLAotCQkJCSAgICBjaWYtPmJ5dGVzKTsKKyAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCAoJmNsb3N1cmUtPnRyYW1wWzBdLAorCQkJCSAgICZmZmlfY2xvc3VyZV9USElTQ0FMTCwKKwkJCQkgICAodm9pZCopY29kZWxvYyk7CiAgICAgfQogICBlbHNlIGlmIChjaWYtPmFiaSA9PSBGRklfU1REQ0FMTCkKICAgICB7CiAgICAgICBGRklfSU5JVF9UUkFNUE9MSU5FX1NURENBTEwgKCZjbG9zdXJlLT50cmFtcFswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZmaV9jbG9zdXJlX1NURENBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiljb2RlbG9jLCBjaWYtPmJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWNvZGVsb2MpOwogICAgIH0KKyNpZmRlZiBYODZfV0lOMzIKICAgZWxzZSBpZiAoY2lmLT5hYmkgPT0gRkZJX01TX0NERUNMKQogICAgIHsKICAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkUgKCZjbG9zdXJlLT50cmFtcFswXSwKQEAgLTcxMywxMiArNzI2LDEyIEBACiB7CiAgIGludCBpOwogCi0gIGlmIChjaWYtPmFiaSAhPSBGRklfU1lTVikgeworICBpZiAoY2lmLT5hYmkgIT0gRkZJX1NZU1YKICNpZmRlZiBYODZfV0lOMzIKLSAgICBpZiAoY2lmLT5hYmkgIT0gRkZJX1RISVNDQUxMKQorICAgICAgJiYgY2lmLT5hYmkgIT0gRkZJX1RISVNDQUxMCiAjZW5kaWYKKyAgICAgKQogICAgIHJldHVybiBGRklfQkFEX0FCSTsKLSAgfQogCiAgIC8qIHdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGNlcnRhaW4ga2luZHMgb2YgYXJndW1lbnRzIGZvciByYXcKICAgICAgY2xvc3VyZXMuICBUaGlzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBhIHNlcGFyYXRlIGFzc2VtYmx5CkBAIC03NDEsOCArNzU0LDcgQEAKICAgICB9CiAgIGVsc2UgaWYgKGNpZi0+YWJpID09IEZGSV9USElTQ0FMTCkKICAgICB7Ci0gICAgICBGRklfSU5JVF9UUkFNUE9MSU5FX1RISVNDQUxMICgmY2xvc3VyZS0+dHJhbXBbMF0sICZmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwsCi0JCQkJICAgIGNvZGVsb2MsIGNpZi0+Ynl0ZXMpOworICAgICAgRkZJX0lOSVRfVFJBTVBPTElORV9SQVdfVEhJU0NBTEwgKCZjbG9zdXJlLT50cmFtcFswXSwgJmZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCwgY29kZWxvYywgY2lmLT5ieXRlcyk7CiAgICAgfQogI2VuZGlmCiAgIGNsb3N1cmUtPmNpZiAgPSBjaWY7CkBAIC03ODcsMTAgKzc5OSwxNyBAQAogICAKICAgc3dpdGNoIChjaWYtPmFiaSkgCiAgICAgewotI2lmZGVmIFg4Nl9XSU4zMgorI2lmbmRlZiBYODZfV0lOMzIKICAgICBjYXNlIEZGSV9TWVNWOgotICAgIGNhc2UgRkZJX1NURENBTEw6CisgICAgICBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3NfcmF3LCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIGJyZWFrOworI2Vsc2UKKyAgICBjYXNlIEZGSV9TWVNWOgogICAgIGNhc2UgRkZJX01TX0NERUNMOgorI2VuZGlmCisjaWZuZGVmIFg4Nl9XSU42NAorICAgIGNhc2UgRkZJX1NURENBTEw6CiAgICAgICBmZmlfY2FsbF93aW4zMihmZmlfcHJlcF9hcmdzX3JhdywgJmVjaWYsIGNpZi0+YWJpLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAogCQkgICAgIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICBicmVhazsKQEAgLTgyMywxMSArODQyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKICAgICAgIH0KICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICBjYXNlIEZGSV9TWVNWOgotICAgICAgZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzX3JhdywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgIGVjaWYucnZhbHVlLCBmbik7Ci0gICAgICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICBGRklfQVNTRVJUKDApOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaTY0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYwppbmRleCAyMDE0YWYyLi41YTVlMDQzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYwpAQCAtMyw4ICszLDggQEAKICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTEgIEFudGhvbnkgR3JlZW4KICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgIFJlZCBIYXQsIEluYy4KICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgIEJvIFRob3JzZW4gPGJvQHN1c2UuZGU+Ci0gICAgICAgICAgICAgCi0gICB4ODYtNjQgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCisKKyAgIHg4Ni02NCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQogCiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQpAQCAtMzksNiArMzksNyBAQAogI2RlZmluZSBNQVhfU1NFX1JFR1MgOAogCiAjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2luY2x1ZGUgInhtbWludHJpbi5oIgogI2RlZmluZSBVSU5UMTI4IF9fbTEyOAogI2Vsc2UKICNpZiBkZWZpbmVkKF9fU1VOUFJPX0MpCkBAIC02MCw3ICs2MSw3IEBACiB7CiAgIC8qIFJlZ2lzdGVycyBmb3IgYXJndW1lbnQgcGFzc2luZy4gICovCiAgIFVJTlQ2NCBncHJbTUFYX0dQUl9SRUdTXTsKLSAgdW5pb24gYmlnX2ludF91bmlvbiBzc2VbTUFYX1NTRV9SRUdTXTsgCisgIHVuaW9uIGJpZ19pbnRfdW5pb24gc3NlW01BWF9TU0VfUkVHU107CiB9OwogCiBleHRlcm4gdm9pZCBmZmlfY2FsbF91bml4NjQgKHZvaWQgKmFyZ3MsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGZsYWdzLApAQCAtMTUxLDcgKzE1Miw3IEBACiAKICAgIFNlZSB0aGUgeDg2LTY0IFBTIEFCSSBmb3IgZGV0YWlscy4KICovCi1zdGF0aWMgaW50CitzdGF0aWMgc2l6ZV90CiBjbGFzc2lmeV9hcmd1bWVudCAoZmZpX3R5cGUgKnR5cGUsIGVudW0geDg2XzY0X3JlZ19jbGFzcyBjbGFzc2VzW10sCiAJCSAgIHNpemVfdCBieXRlX29mZnNldCkKIHsKQEAgLTE2Nyw3ICsxNjgsNyBAQAogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKICAgICAgIHsKLQlpbnQgc2l6ZSA9IGJ5dGVfb2Zmc2V0ICsgdHlwZS0+c2l6ZTsKKwlzaXplX3Qgc2l6ZSA9IGJ5dGVfb2Zmc2V0ICsgdHlwZS0+c2l6ZTsKIAogCWlmIChzaXplIDw9IDQpCiAJICB7CkBAIC0yMDIsMTUgKzIwMywxNyBAQAogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgogICAgICAgY2xhc3Nlc1swXSA9IFg4Nl82NF9TU0VERl9DTEFTUzsKICAgICAgIHJldHVybiAxOworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogICAgICAgY2xhc3Nlc1swXSA9IFg4Nl82NF9YODdfQ0xBU1M7CiAgICAgICBjbGFzc2VzWzFdID0gWDg2XzY0X1g4N1VQX0NMQVNTOwogICAgICAgcmV0dXJuIDI7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKICAgICAgIHsKLQljb25zdCBpbnQgVU5JVFNfUEVSX1dPUkQgPSA4OwotCWludCB3b3JkcyA9ICh0eXBlLT5zaXplICsgVU5JVFNfUEVSX1dPUkQgLSAxKSAvIFVOSVRTX1BFUl9XT1JEOwotCWZmaV90eXBlICoqcHRyOyAKKwljb25zdCBzaXplX3QgVU5JVFNfUEVSX1dPUkQgPSA4OworCXNpemVfdCB3b3JkcyA9ICh0eXBlLT5zaXplICsgVU5JVFNfUEVSX1dPUkQgLSAxKSAvIFVOSVRTX1BFUl9XT1JEOworCWZmaV90eXBlICoqcHRyOwogCWludCBpOwogCWVudW0geDg2XzY0X3JlZ19jbGFzcyBzdWJjbGFzc2VzW01BWF9DTEFTU0VTXTsKIApAQCAtMjMyLDcgKzIzNSw3IEBACiAJLyogTWVyZ2UgdGhlIGZpZWxkcyBvZiBzdHJ1Y3R1cmUuICAqLwogCWZvciAocHRyID0gdHlwZS0+ZWxlbWVudHM7ICpwdHIgIT0gTlVMTDsgcHRyKyspCiAJICB7Ci0JICAgIGludCBudW07CisJICAgIHNpemVfdCBudW07CiAKIAkgICAgYnl0ZV9vZmZzZXQgPSBBTElHTiAoYnl0ZV9vZmZzZXQsICgqcHRyKS0+YWxpZ25tZW50KTsKIApAQCAtMjQxLDcgKzI0NCw3IEBACiAJICAgICAgcmV0dXJuIDA7CiAJICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKIAkgICAgICB7Ci0JCWludCBwb3MgPSBieXRlX29mZnNldCAvIDg7CisJCXNpemVfdCBwb3MgPSBieXRlX29mZnNldCAvIDg7CiAJCWNsYXNzZXNbaSArIHBvc10gPQogCQkgIG1lcmdlX2NsYXNzZXMgKHN1YmNsYXNzZXNbaV0sIGNsYXNzZXNbaSArIHBvc10pOwogCSAgICAgIH0KQEAgLTMwNSwxMSArMzA4LDEyIEBACiAgICBjbGFzcy4gIFJldHVybiB6ZXJvIGlmZiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHBhc3NlZCBpbiBtZW1vcnksIG90aGVyd2lzZQogICAgdGhlIG51bWJlciBvZiByZWdpc3RlcnMuICAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgc2l6ZV90CiBleGFtaW5lX2FyZ3VtZW50IChmZmlfdHlwZSAqdHlwZSwgZW51bSB4ODZfNjRfcmVnX2NsYXNzIGNsYXNzZXNbTUFYX0NMQVNTRVNdLAogCQkgIF9Cb29sIGluX3JldHVybiwgaW50ICpwbmdwciwgaW50ICpwbnNzZSkKIHsKLSAgaW50IGksIG4sIG5ncHIsIG5zc2U7CisgIHNpemVfdCBuOworICBpbnQgaSwgbmdwciwgbnNzZTsKIAogICBuID0gY2xhc3NpZnlfYXJndW1lbnQgKHR5cGUsIGNsYXNzZXMsIDApOwogICBpZiAobiA9PSAwKQpAQCAtMzUwLDkgKzM1NCw5IEBACiBmZmlfc3RhdHVzCiBmZmlfcHJlcF9jaWZfbWFjaGRlcCAoZmZpX2NpZiAqY2lmKQogewotICBpbnQgZ3ByY291bnQsIHNzZWNvdW50LCBpLCBhdm4sIG4sIG5ncHIsIG5zc2UsIGZsYWdzOworICBpbnQgZ3ByY291bnQsIHNzZWNvdW50LCBpLCBhdm4sIG5ncHIsIG5zc2UsIGZsYWdzOwogICBlbnVtIHg4Nl82NF9yZWdfY2xhc3MgY2xhc3Nlc1tNQVhfQ0xBU1NFU107Ci0gIHNpemVfdCBieXRlczsKKyAgc2l6ZV90IGJ5dGVzLCBuOwogCiAgIGdwcmNvdW50ID0gc3NlY291bnQgPSAwOwogCkBAIC00MTAsNyArNDE0LDcgQEAKICAgaWYgKHNzZWNvdW50KQogICAgIGZsYWdzIHw9IDEgPDwgMTE7CiAgIGNpZi0+ZmxhZ3MgPSBmbGFnczsKLSAgY2lmLT5ieXRlcyA9IEFMSUdOIChieXRlcywgOCk7CisgIGNpZi0+Ynl0ZXMgPSAodW5zaWduZWQpQUxJR04gKGJ5dGVzLCA4KTsKIAogICByZXR1cm4gRkZJX09LOwogfQpAQCAtNDUzLDggKzQ1Nyw3IEBACiAKICAgZm9yIChpID0gMDsgaSA8IGF2bjsgKytpKQogICAgIHsKLSAgICAgIHNpemVfdCBzaXplID0gYXJnX3R5cGVzW2ldLT5zaXplOwotICAgICAgaW50IG47CisgICAgICBzaXplX3Qgbiwgc2l6ZSA9IGFyZ190eXBlc1tpXS0+c2l6ZTsKIAogICAgICAgbiA9IGV4YW1pbmVfYXJndW1lbnQgKGFyZ190eXBlc1tpXSwgY2xhc3NlcywgMCwgJm5ncHIsICZuc3NlKTsKICAgICAgIGlmIChuID09IDAKQEAgLTU4Myw3ICs1ODYsNyBAQAogICBpZiAocmV0ICE9IEZGSV9UWVBFX1ZPSUQpCiAgICAgewogICAgICAgZW51bSB4ODZfNjRfcmVnX2NsYXNzIGNsYXNzZXNbTUFYX0NMQVNTRVNdOwotICAgICAgaW50IG4gPSBleGFtaW5lX2FyZ3VtZW50IChjaWYtPnJ0eXBlLCBjbGFzc2VzLCAxLCAmbmdwciwgJm5zc2UpOworICAgICAgc2l6ZV90IG4gPSBleGFtaW5lX2FyZ3VtZW50IChjaWYtPnJ0eXBlLCBjbGFzc2VzLCAxLCAmbmdwciwgJm5zc2UpOwogICAgICAgaWYgKG4gPT0gMCkKIAl7CiAJICAvKiBUaGUgcmV0dXJuIHZhbHVlIGdvZXMgaW4gbWVtb3J5LiAgQXJyYW5nZSBmb3IgdGhlIGNsb3N1cmUKQEAgLTYwNiwxMSArNjA5LDExIEBACiAKICAgYXZuID0gY2lmLT5uYXJnczsKICAgYXJnX3R5cGVzID0gY2lmLT5hcmdfdHlwZXM7Ci0gIAorCiAgIGZvciAoaSA9IDA7IGkgPCBhdm47ICsraSkKICAgICB7CiAgICAgICBlbnVtIHg4Nl82NF9yZWdfY2xhc3MgY2xhc3Nlc1tNQVhfQ0xBU1NFU107Ci0gICAgICBpbnQgbjsKKyAgICAgIHNpemVfdCBuOwogCiAgICAgICBuID0gZXhhbWluZV9hcmd1bWVudCAoYXJnX3R5cGVzW2ldLCBjbGFzc2VzLCAwLCAmbmdwciwgJm5zc2UpOwogICAgICAgaWYgKG4gPT0gMApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oCmluZGV4IDQ2ZjI5NGMuLmIyYWZlOTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZml0YXJnZXQuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpdGFyZ2V0LmgKQEAgLTk4LDYgKzk4LDkgQEAKICAgLyogLS0tLSBJbnRlbCB4ODYgYW5kIEFNRCB4ODYtNjQgLSAqLwogICBGRklfU1lTViwKICAgRkZJX1VOSVg2NCwgICAvKiBVbml4IHZhcmlhbnRzIGFsbCB1c2UgdGhlIHNhbWUgQUJJIGZvciB4ODYtNjQgICovCisgIEZGSV9USElTQ0FMTCwKKyAgRkZJX0ZBU1RDQUxMLAorICBGRklfU1REQ0FMTCwKICAgRkZJX0xBU1RfQUJJLAogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KQogICBGRklfREVGQVVMVF9BQkkgPSBGRklfU1lTVgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZyZWVic2QuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mcmVlYnNkLlMKaW5kZXggYWZkZTUxMy4uOTdlMGI0ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZyZWVic2QuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZnJlZWJzZC5TCkBAIC00OSw2ICs0OSw5IEBACiAJbW92bCAgMTYoJWVicCksJWVjeAogCXN1YmwgICVlY3gsJWVzcAogCisJLyogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgdG8gMTYtYnl0ZXMgKi8KKwlhbmRsICAkMHhmZmZmZmZmMCwgJWVzcAorCiAJbW92bCAgJWVzcCwlZWF4CiAKIAkvKiBQbGFjZSBhbGwgb2YgdGhlIGZmaV9wcmVwX2FyZ3MgaW4gcG9zaXRpb24gICovCkBAIC00NTYsMyArNDU5LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogaWZuZGVmIF9feDg2XzY0X18gKi8KKworCS5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW4zMi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjMyLlMKaW5kZXggMjRiN2JiZC4uZGFmMGU3OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjMyLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjMyLlMKQEAgLTMzLDggKzMzLDEzIEBACiAjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CiAjaW5jbHVkZSA8ZmZpLmg+CiAKKyNkZWZpbmUgQ0lGX0FCSV9PRkZTRVQgMAorI2RlZmluZSBDSUZfQllURVNfT0ZGU0VUIDE2CisKICNpZmRlZiBfTVNDX1ZFUgogCisjZGVmaW5lIENMT1NVUkVfQ0lGX09GRlNFVCAoKEZGSV9UUkFNUE9MSU5FX1NJWkUgKyAzKSBBTkQgTk9UIDMpCisKIC4zODYKIC5NT0RFTCBGTEFULCBDCiAKQEAgLTE4OCwxNCArMTkzLDIzIEBACiAgICAgICAgIHJldAogZmZpX2NhbGxfd2luMzIgRU5EUAogCi1mZmlfY2xvc3VyZV9USElTQ0FMTCBQUk9DIE5FQVIgRk9SQ0VGUkFNRQotCXN1Ygllc3AsIDQwCi0JbGVhCWVkeCwgW2VicCAtMjRdCi0JbW92CVtlYnAgLSAxMl0sIGVkeAkvKiByZXNwICovCi0JbGVhCWVkeCwgW2VicCArIDEyXSAgLyogYWNjb3VudCBmb3Igc3R1YiByZXR1cm4gYWRkcmVzcyBvbiBzdGFjayAqLwotCWptcAlzdHViCitmZmlfY2xvc3VyZV9USElTQ0FMTCBQUk9DIE5FQVIKKwk7OyBJbnNlcnQgdGhlIHJlZ2lzdGVyIGFyZ3VtZW50IG9uIHRoZSBzdGFjayBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKwl4Y2hnCURXT1JEIFBUUiBbZXNwKzRdLCBlY3gKKwl4Y2hnCURXT1JEIFBUUiBbZXNwXSwgZWN4CisJcHVzaAllY3gKKwlqbXAJZmZpX2Nsb3N1cmVfU1REQ0FMTAogZmZpX2Nsb3N1cmVfVEhJU0NBTEwgRU5EUAogCitmZmlfY2xvc3VyZV9GQVNUQ0FMTCBQUk9DIE5FQVIKKwk7OyBJbnNlcnQgdGhlIHJlZ2lzdGVyIGFyZ3VtZW50IG9uIHRoZSBzdGFjayBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKwl4Y2hnCURXT1JEIFBUUiBbZXNwKzRdLCBlZHgKKwl4Y2hnCURXT1JEIFBUUiBbZXNwXSwgZWN4CisJcHVzaAllZHgKKwlwdXNoCWVjeAorCWptcAlmZmlfY2xvc3VyZV9TVERDQUxMCitmZmlfY2xvc3VyZV9GQVNUQ0FMTCBFTkRQCisKIGZmaV9jbG9zdXJlX1NZU1YgUFJPQyBORUFSIEZPUkNFRlJBTUUKICAgICA7OyB0aGUgZmZpX2Nsb3N1cmUgY3R4IGlzIHBhc3NlZCBpbiBlYXggYnkgdGhlIHRyYW1wb2xpbmUuCiAKQEAgLTQ2NCw4ICs0NzgsMjMgQEAKICAgICAgICAgam1wICAgY2RfZXBpbG9ndWUKIAogY2RfZXBpbG9ndWU6Ci0gICAgICAgIDs7IEVwaWxvZ3VlIGNvZGUgaXMgYXV0b2dlbmVyYXRlZC4KLSAgICAgICAgcmV0CisgICAgICAgIG1vdiAgIGVzcCwgZWJwCisgICAgICAgIHBvcCAgIGVicAorICAgICAgICBwb3AgICBlY3gKKyAgICAgICAgcG9wICAgZWR4CisgICAgICAgIG1vdiAgIGVjeCwgRFdPUkQgUFRSIFtlY3ggKyAoQ0xPU1VSRV9DSUZfT0ZGU0VULTEwKV0KKyAgICAgICAgYWRkICAgZXNwLCBEV09SRCBQVFIgW2VjeCArIENJRl9CWVRFU19PRkZTRVRdCisgICAgICAgIG1vdiAgIGVjeCwgRFdPUkQgUFRSIFtlY3ggKyBDSUZfQUJJX09GRlNFVF0KKyAgICAgICAgY21wICAgZWN4LCAzCisgICAgICAgIGplICAgIGNkX3RoaXNjYWxsCisgICAgICAgIGNtcCAgIGVjeCwgNAorICAgICAgICBqbmUgICBjZF9ub3RfZmFzdGNhbGwKKworICAgICAgICBhZGQgICBlc3AsIDQKK2NkX3RoaXNjYWxsOgorICAgICAgICBhZGQgICBlc3AsIDQKK2NkX25vdF9mYXN0Y2FsbDoKKyAgICAgICAgam1wICAgZWR4CiBmZmlfY2xvc3VyZV9TVERDQUxMIEVORFAKIAogX1RFWFQgRU5EUwpAQCAtNDczLDE1ICs1MDIsMjMgQEAKIAogI2Vsc2UKIAorI2RlZmluZSBDTE9TVVJFX0NJRl9PRkZTRVQgKChGRklfVFJBTVBPTElORV9TSVpFICsgMykgJiB+MykKKworI2lmIGRlZmluZWQoU1lNQk9MX1VOREVSU0NPUkUpCisjZGVmaW5lIFVTQ09SRV9TWU1CT0woeCkgXyMjeAorI2Vsc2UKKyNkZWZpbmUgVVNDT1JFX1NZTUJPTCh4KSB4CisjZW5kaWYKIAkudGV4dAogIAogICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgogICAgICAgICAuYmFsaWduIDE2Ci0JLmdsb2JsCV9mZmlfY2FsbF93aW4zMgotI2lmbmRlZiBfX09TMl9fCitGRklfSElEREVOKGZmaV9jYWxsX3dpbjMyKQorCS5nbG9ibAlVU0NPUkVfU1lNQk9MKGZmaV9jYWxsX3dpbjMyKQorI2lmIGRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChfX09TMl9fKQogCS5kZWYJX2ZmaV9jYWxsX3dpbjMyOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKICNlbmRpZgotX2ZmaV9jYWxsX3dpbjMyOgorVVNDT1JFX1NZTUJPTChmZmlfY2FsbF93aW4zMik6CiAuTEZCMToKICAgICAgICAgcHVzaGwgJWVicAogLkxDRkkwOgpAQCAtNTQyLDMxICs1NzksMzIgQEAKIAljYWxsCTFmCiAJIyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgY2FsbCBhbmQgdGhlIGp1bXAgdGFibGUuCiAuTHN0b3JlX3RhYmxlOgotCS5sb25nCS5Mbm9yZXR2YWwJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KLQkubG9uZwkuTHJldGludAkJLyogRkZJX1RZUEVfSU5UICovCi0JLmxvbmcJLkxyZXRmbG9hdAkJLyogRkZJX1RZUEVfRkxPQVQgKi8KLQkubG9uZwkuTHJldGRvdWJsZQkJLyogRkZJX1RZUEVfRE9VQkxFICovCi0JLmxvbmcJLkxyZXRsb25nZG91YmxlCQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCi0JLmxvbmcJLkxyZXR1aW50OAkJLyogRkZJX1RZUEVfVUlOVDggKi8KLQkubG9uZwkuTHJldHNpbnQ4CQkvKiBGRklfVFlQRV9TSU5UOCAqLwotCS5sb25nCS5McmV0dWludDE2CQkvKiBGRklfVFlQRV9VSU5UMTYgKi8KLQkubG9uZwkuTHJldHNpbnQxNgkJLyogRkZJX1RZUEVfU0lOVDE2ICovCi0JLmxvbmcJLkxyZXRpbnQJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLwotCS5sb25nCS5McmV0aW50CQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KLQkubG9uZwkuTHJldGludDY0CQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KLQkubG9uZwkuTHJldGludDY0CQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KLQkubG9uZwkuTHJldHN0cnVjdAkJLyogRkZJX1RZUEVfU1RSVUNUICovCi0JLmxvbmcJLkxyZXRpbnQJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KLQkubG9uZwkuTHJldHN0cnVjdDFiCQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KLQkubG9uZwkuTHJldHN0cnVjdDJiCQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KLQkubG9uZwkuTHJldHN0cnVjdDRiCQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KLQkubG9uZwkuTHJldHN0cnVjdAkJLyogRkZJX1RZUEVfTVNfU1RSVUNUICovCisJLmxvbmcJLkxub3JldHZhbC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1ZPSUQgKi8KKwkubG9uZwkuTHJldGludC0uTHN0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9JTlQgKi8KKwkubG9uZwkuTHJldGZsb2F0LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfRkxPQVQgKi8KKwkubG9uZwkuTHJldGRvdWJsZS0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0RPVUJMRSAqLworCS5sb25nCS5McmV0bG9uZ2RvdWJsZS0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwkubG9uZwkuTHJldHVpbnQ4LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDggKi8KKwkubG9uZwkuTHJldHNpbnQ4LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDggKi8KKwkubG9uZwkuTHJldHVpbnQxNi0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQxNiAqLworCS5sb25nCS5McmV0c2ludDE2LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDE2ICovCisJLmxvbmcJLkxyZXRpbnQtLkxzdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfVUlOVDMyICovCisJLmxvbmcJLkxyZXRpbnQtLkxzdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfU0lOVDMyICovCisJLmxvbmcJLkxyZXRpbnQ2NC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLworCS5sb25nCS5McmV0aW50NjQtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KKwkubG9uZwkuTHJldHN0cnVjdC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NUUlVDVCAqLworCS5sb25nCS5McmV0aW50LS5Mc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKwkubG9uZwkuTHJldHN0cnVjdDFiLS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCisJLmxvbmcJLkxyZXRzdHJ1Y3QyYi0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLworCS5sb25nCS5McmV0c3RydWN0NGItLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KKwkubG9uZwkuTHJldHN0cnVjdC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX01TX1NUUlVDVCAqLwogMToKLQlhZGQJJWVjeCwgJWVjeAotCWFkZAklZWN4LCAlZWN4CisJc2hsCSQyLCAlZWN4CisJYWRkCSglZXNwKSwlZWN4CisJbW92CSglZWN4KSwlZWN4CiAJYWRkCSglZXNwKSwlZWN4CiAJYWRkCSQ0LCAlZXNwCi0Jam1wCSooJWVjeCkKKwlqbXAJKiVlY3gKIAogCS8qIFNpZ24vemVybyBleHRlbmQgYXMgYXBwcm9wcmlhdGUuICAqLwogLkxyZXRzaW50ODoKQEAgLTY0NCwyNyArNjgyLDQzIEBACiAgICAgICAgIHJldAogLmZmaV9jYWxsX3dpbjMyX2VuZDoKICAgICAgICAgLmJhbGlnbiAxNgotCS5nbG9ibAlfZmZpX2Nsb3N1cmVfVEhJU0NBTEwKLSNpZm5kZWYgX19PUzJfXworRkZJX0hJRERFTihmZmlfY2xvc3VyZV9USElTQ0FMTCkKKwkuZ2xvYmwJVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9USElTQ0FMTCkKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoX19PUzJfXykKIAkuZGVmCV9mZmlfY2xvc3VyZV9USElTQ0FMTDsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCiAjZW5kaWYKLV9mZmlfY2xvc3VyZV9USElTQ0FMTDoKLQlwdXNobAklZWJwCi0JbW92bAklZXNwLCAlZWJwCi0Jc3VibAkkNDAsICVlc3AKLQlsZWFsCS0yNCglZWJwKSwgJWVkeAotCW1vdmwJJWVkeCwgLTEyKCVlYnApCS8qIHJlc3AgKi8KLQlsZWFsCTEyKCVlYnApLCAlZWR4ICAvKiBhY2NvdW50IGZvciBzdHViIHJldHVybiBhZGRyZXNzIG9uIHN0YWNrICovCi0Jam1wCS5zdHViCitVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX1RISVNDQUxMKToKKwkvKiBJbnNlcnQgdGhlIHJlZ2lzdGVyIGFyZ3VtZW50IG9uIHRoZSBzdGFjayBhcyB0aGUgZmlyc3QgYXJndW1lbnQgKi8KKwl4Y2hnCSVlY3gsIDQoJWVzcCkKKwl4Y2hnCSVlY3gsICglZXNwKQorCXB1c2gJJWVjeAorCWptcAkuZmZpX2Nsb3N1cmVfU1REQ0FMTF9pbnRlcm5hbAorCisgICAgICAgIC5iYWxpZ24gMTYKK0ZGSV9ISURERU4oZmZpX2Nsb3N1cmVfRkFTVENBTEwpCisJLmdsb2JsCVVTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfRkFTVENBTEwpCisjaWYgZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKF9fT1MyX18pCisJLmRlZglfZmZpX2Nsb3N1cmVfRkFTVENBTEw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgorI2VuZGlmCitVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX0ZBU1RDQUxMKToKKwkvKiBJbnNlcnQgdGhlIHJlZ2lzdGVyIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgYXMgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMgKi8KKwl4Y2hnCSVlZHgsIDQoJWVzcCkKKwl4Y2hnCSVlY3gsICglZXNwKQorCXB1c2gJJWVkeAorCXB1c2gJJWVjeAorCWptcAkuZmZpX2Nsb3N1cmVfU1REQ0FMTF9pbnRlcm5hbAogLkxGRTE6CiAKICAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KICAgICAgICAgLmJhbGlnbiAxNgotCS5nbG9ibAlfZmZpX2Nsb3N1cmVfU1lTVgotI2lmbmRlZiBfX09TMl9fCitGRklfSElEREVOKGZmaV9jbG9zdXJlX1NZU1YpCisjaWYgZGVmaW5lZChYODZfV0lOMzIpCisJLmdsb2JsCVVTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfU1lTVikKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoX19PUzJfXykKIAkuZGVmCV9mZmlfY2xvc3VyZV9TWVNWOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKICNlbmRpZgotX2ZmaV9jbG9zdXJlX1NZU1Y6CitVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX1NZU1YpOgorI2VuZGlmCiAuTEZCMzoKIAlwdXNobAklZWJwCiAuTENGSTQ6CkBAIC02NzQsNDMgKzcyOCw1NCBAQAogCWxlYWwJLTI0KCVlYnApLCAlZWR4CiAJbW92bAklZWR4LCAtMTIoJWVicCkJLyogcmVzcCAqLwogCWxlYWwJOCglZWJwKSwgJWVkeAotLnN0dWI6CiAJbW92bAklZWR4LCA0KCVlc3ApCS8qIGFyZ3MgPSBfX2J1aWx0aW5fZHdhcmZfY2ZhICgpICovCiAJbGVhbAktMTIoJWVicCksICVlZHgKIAltb3ZsCSVlZHgsICglZXNwKQkvKiAmcmVzcCAqLwotCWNhbGwJX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKKyNpZiBkZWZpbmVkKEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRFKSB8fCAhZGVmaW5lZChfX1BJQ19fKQorCWNhbGwJVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9TWVNWX2lubmVyKQorI2VsaWYgZGVmaW5lZChYODZfREFSV0lOKQorCWNhbGxsCUxfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciRzdHViCisjZWxzZQorCW1vdmwJJWVieCwgOCglZXNwKQorCWNhbGwJMWYKKzE6CXBvcGwJJWVieAorCWFkZGwJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0xYl0sICVlYngKKwljYWxsCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXJAUExUCisJbW92bAk4KCVlc3ApLCAlZWJ4CisjZW5kaWYKIAltb3ZsCS0xMiglZWJwKSwgJWVjeAogCiAwOgogCWNhbGwJMWYKIAkjIERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBjYWxsIGFuZCB0aGUganVtcCB0YWJsZS4KIC5MY2xzX3N0b3JlX3RhYmxlOgotCS5sb25nCS5MY2xzX25vcmV0dmFsCQkvKiBGRklfVFlQRV9WT0lEICovCi0JLmxvbmcJLkxjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9JTlQgKi8KLQkubG9uZwkuTGNsc19yZXRmbG9hdAkJLyogRkZJX1RZUEVfRkxPQVQgKi8KLQkubG9uZwkuTGNsc19yZXRkb3VibGUJCS8qIEZGSV9UWVBFX0RPVUJMRSAqLwotCS5sb25nCS5MY2xzX3JldGxkb3VibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLwotCS5sb25nCS5MY2xzX3JldHVpbnQ4CQkvKiBGRklfVFlQRV9VSU5UOCAqLwotCS5sb25nCS5MY2xzX3JldHNpbnQ4CQkvKiBGRklfVFlQRV9TSU5UOCAqLwotCS5sb25nCS5MY2xzX3JldHVpbnQxNgkJLyogRkZJX1RZUEVfVUlOVDE2ICovCi0JLmxvbmcJLkxjbHNfcmV0c2ludDE2CQkvKiBGRklfVFlQRV9TSU5UMTYgKi8KLQkubG9uZwkuTGNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLwotCS5sb25nCS5MY2xzX3JldGludAkJLyogRkZJX1RZUEVfU0lOVDMyICovCi0JLmxvbmcJLkxjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLwotCS5sb25nCS5MY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KLQkubG9uZwkuTGNsc19yZXRzdHJ1Y3QJCS8qIEZGSV9UWVBFX1NUUlVDVCAqLwotCS5sb25nCS5MY2xzX3JldGludAkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLwotCS5sb25nCS5MY2xzX3JldHN0cnVjdDEJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCi0JLmxvbmcJLkxjbHNfcmV0c3RydWN0MgkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KLQkubG9uZwkuTGNsc19yZXRzdHJ1Y3Q0CS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLwotCS5sb25nCS5MY2xzX3JldG1zc3RydWN0CS8qIEZGSV9UWVBFX01TX1NUUlVDVCAqLworCS5sb25nCS5MY2xzX25vcmV0dmFsLS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1ZPSUQgKi8KKwkubG9uZwkuTGNsc19yZXRpbnQtLkxjbHNfc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX0lOVCAqLworCS5sb25nCS5MY2xzX3JldGZsb2F0LS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0ZMT0FUICovCisJLmxvbmcJLkxjbHNfcmV0ZG91YmxlLS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0RPVUJMRSAqLworCS5sb25nCS5MY2xzX3JldGxkb3VibGUtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCS5sb25nCS5MY2xzX3JldHVpbnQ4LS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQ4ICovCisJLmxvbmcJLkxjbHNfcmV0c2ludDgtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDggKi8KKwkubG9uZwkuTGNsc19yZXR1aW50MTYtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDE2ICovCisJLmxvbmcJLkxjbHNfcmV0c2ludDE2LS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQxNiAqLworCS5sb25nCS5MY2xzX3JldGludC0uTGNsc19zdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfVUlOVDMyICovCisJLmxvbmcJLkxjbHNfcmV0aW50LS5MY2xzX3N0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KKwkubG9uZwkuTGNsc19yZXRsbG9uZy0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KKwkubG9uZwkuTGNsc19yZXRsbG9uZy0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KKwkubG9uZwkuTGNsc19yZXRzdHJ1Y3QtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU1RSVUNUICovCisJLmxvbmcJLkxjbHNfcmV0aW50LS5MY2xzX3N0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9QT0lOVEVSICovCisJLmxvbmcJLkxjbHNfcmV0c3RydWN0MS0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KKwkubG9uZwkuTGNsc19yZXRzdHJ1Y3QyLS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLworCS5sb25nCS5MY2xzX3JldHN0cnVjdDQtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCisJLmxvbmcJLkxjbHNfcmV0bXNzdHJ1Y3QtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfTVNfU1RSVUNUICovCiAKIDE6Ci0JYWRkCSVlYXgsICVlYXgKLQlhZGQJJWVheCwgJWVheAorCXNobAkkMiwgJWVheAorCWFkZAkoJWVzcCksJWVheAorCW1vdgkoJWVheCksJWVheAogCWFkZAkoJWVzcCksJWVheAogCWFkZAkkNCwgJWVzcAotCWptcAkqKCVlYXgpCisJam1wCSolZWF4CiAKIAkvKiBTaWduL3plcm8gZXh0ZW5kIGFzIGFwcHJvcHJpYXRlLiAgKi8KIC5MY2xzX3JldHNpbnQ4OgpAQCAtNzg4LDEyICs4NTMsMTUgQEAKICNkZWZpbmUgUkFXX0NMT1NVUkVfRlVOX09GRlNFVCAoUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCArIDQpCiAjZGVmaW5lIFJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgKFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgKyA0KQogI2RlZmluZSBDSUZfRkxBR1NfT0ZGU0VUIDIwCisKKyNpZmRlZiBYODZfV0lOMzIKICAgICAgICAgLmJhbGlnbiAxNgotCS5nbG9ibAlfZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMCi0jaWZuZGVmIF9fT1MyX18KK0ZGSV9ISURERU4oZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKQorCS5nbG9ibAlVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCkKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoX19PUzJfXykKIAkuZGVmCV9mZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgogI2VuZGlmCi1fZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMOgorVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpOgogCXB1c2hsCSVlYnAKIAltb3ZsCSVlc3AsICVlYnAKIAlwdXNobAklZXNpCkBAIC04MDMsMTMgKzg3MSwxNyBAQAogCW1vdmwJJWVkeCwgMTIoJWVzcCkJLyogdXNlcl9kYXRhICovCiAJbGVhbAkxMiglZWJwKSwgJWVkeAkvKiBfX2J1aWx0aW5fZHdhcmZfY2ZhICgpICovCiAJam1wCS5zdHVicmF3CisjZW5kaWYgLyogWDg2X1dJTjMyICovCisKICAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KICAgICAgICAgLmJhbGlnbiAxNgotCS5nbG9ibAlfZmZpX2Nsb3N1cmVfcmF3X1NZU1YKLSNpZm5kZWYgX19PUzJfXworI2lmIGRlZmluZWQoWDg2X1dJTjMyKQorCS5nbG9ibAlVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX3Jhd19TWVNWKQorI2lmIGRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChfX09TMl9fKQogCS5kZWYJX2ZmaV9jbG9zdXJlX3Jhd19TWVNWOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKICNlbmRpZgotX2ZmaV9jbG9zdXJlX3Jhd19TWVNWOgorVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9yYXdfU1lTVik6CisjZW5kaWYgLyogZGVmaW5lZChYODZfV0lOMzIpICovCiAuTEZCNDoKIAlwdXNobAklZWJwCiAuTENGSTY6CkBAIC04MzMsMzEgKzkwNSwzMiBAQAogCWNhbGwJMWYKIAkjIERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBjYWxsIGFuZCB0aGUganVtcCB0YWJsZS4KIC5McmNsc19zdG9yZV90YWJsZToKLQkubG9uZwkuTHJjbHNfbm9yZXR2YWwJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KLQkubG9uZwkuTHJjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9JTlQgKi8KLQkubG9uZwkuTHJjbHNfcmV0ZmxvYXQJCS8qIEZGSV9UWVBFX0ZMT0FUICovCi0JLmxvbmcJLkxyY2xzX3JldGRvdWJsZQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KLQkubG9uZwkuTHJjbHNfcmV0bGRvdWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCi0JLmxvbmcJLkxyY2xzX3JldHVpbnQ4CQkvKiBGRklfVFlQRV9VSU5UOCAqLwotCS5sb25nCS5McmNsc19yZXRzaW50OAkJLyogRkZJX1RZUEVfU0lOVDggKi8KLQkubG9uZwkuTHJjbHNfcmV0dWludDE2CS8qIEZGSV9UWVBFX1VJTlQxNiAqLwotCS5sb25nCS5McmNsc19yZXRzaW50MTYJLyogRkZJX1RZUEVfU0lOVDE2ICovCi0JLmxvbmcJLkxyY2xzX3JldGludAkJLyogRkZJX1RZUEVfVUlOVDMyICovCi0JLmxvbmcJLkxyY2xzX3JldGludAkJLyogRkZJX1RZUEVfU0lOVDMyICovCi0JLmxvbmcJLkxyY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KLQkubG9uZwkuTHJjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLwotCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QJLyogRkZJX1RZUEVfU1RSVUNUICovCi0JLmxvbmcJLkxyY2xzX3JldGludAkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLwotCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QxCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLwotCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QyCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLwotCS5sb25nCS5McmNsc19yZXRzdHJ1Y3Q0CS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLwotCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QJLyogRkZJX1RZUEVfTVNfU1RSVUNUICovCisJLmxvbmcJLkxyY2xzX25vcmV0dmFsLS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9WT0lEICovCisJLmxvbmcJLkxyY2xzX3JldGludC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfSU5UICovCisJLmxvbmcJLkxyY2xzX3JldGZsb2F0LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9GTE9BVCAqLworCS5sb25nCS5McmNsc19yZXRkb3VibGUtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0RPVUJMRSAqLworCS5sb25nCS5McmNsc19yZXRsZG91YmxlLS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCisJLmxvbmcJLkxyY2xzX3JldHVpbnQ4LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UOCAqLworCS5sb25nCS5McmNsc19yZXRzaW50OC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDggKi8KKwkubG9uZwkuTHJjbHNfcmV0dWludDE2LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UMTYgKi8KKwkubG9uZwkuTHJjbHNfcmV0c2ludDE2LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UMTYgKi8KKwkubG9uZwkuTHJjbHNfcmV0aW50LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KKwkubG9uZwkuTHJjbHNfcmV0aW50LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KKwkubG9uZwkuTHJjbHNfcmV0bGxvbmctLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLworCS5sb25nCS5McmNsc19yZXRsbG9uZy0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDY0ICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU1RSVUNUICovCisJLmxvbmcJLkxyY2xzX3JldGludC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfUE9JTlRFUiAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QxLS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0Mi0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdDQtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX01TX1NUUlVDVCAqLwogMToKLQlhZGQJJWVheCwgJWVheAotCWFkZAklZWF4LCAlZWF4CisJc2hsCSQyLCAlZWF4CisJYWRkCSglZXNwKSwlZWF4CisJbW92CSglZWF4KSwlZWF4CiAJYWRkCSglZXNwKSwlZWF4CiAJYWRkCSQ0LCAlZXNwCi0Jam1wCSooJWVheCkKKwlqbXAJKiVlYXgKIAogCS8qIFNpZ24vemVybyBleHRlbmQgYXMgYXBwcm9wcmlhdGUuICAqLwogLkxyY2xzX3JldHNpbnQ4OgpAQCAtOTI1LDExICs5OTgsMTMgQEAKIAogICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgogCS5iYWxpZ24JMTYKLQkuZ2xvYmwJX2ZmaV9jbG9zdXJlX1NURENBTEwKLSNpZm5kZWYgX19PUzJfXworRkZJX0hJRERFTihmZmlfY2xvc3VyZV9TVERDQUxMKQorCS5nbG9ibAlVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX1NURENBTEwpCisjaWYgZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKF9fT1MyX18pCiAJLmRlZglfZmZpX2Nsb3N1cmVfU1REQ0FMTDsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCiAjZW5kaWYKLV9mZmlfY2xvc3VyZV9TVERDQUxMOgorVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9TVERDQUxMKToKKy5mZmlfY2xvc3VyZV9TVERDQUxMX2ludGVybmFsOgogLkxGQjU6CiAJcHVzaGwJJWVicAogLkxDRkk5OgpAQCAtOTQyLDM2ICsxMDE3LDQ4IEBACiAJbW92bAklZWR4LCA0KCVlc3ApCS8qIGFyZ3MgKi8KIAlsZWFsCS0xMiglZWJwKSwgJWVkeAogCW1vdmwJJWVkeCwgKCVlc3ApCS8qICZyZXNwICovCi0JY2FsbAlfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgorI2lmIGRlZmluZWQoSEFWRV9ISURERU5fVklTSUJJTElUWV9BVFRSSUJVVEUpIHx8ICFkZWZpbmVkKF9fUElDX18pCisJY2FsbAlVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpCisjZWxpZiBkZWZpbmVkKFg4Nl9EQVJXSU4pCisJY2FsbGwJTF9mZmlfY2xvc3VyZV9TWVNWX2lubmVyJHN0dWIKKyNlbHNlCisJbW92bAklZWJ4LCA4KCVlc3ApCisJY2FsbAkxZgorMToJcG9wbAklZWJ4CisJYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLTFiXSwgJWVieAorCWNhbGwJZmZpX2Nsb3N1cmVfU1lTVl9pbm5lckBQTFQKKwltb3ZsCTgoJWVzcCksICVlYngKKyNlbmRpZgogCW1vdmwJLTEyKCVlYnApLCAlZWN4CiAwOgogCWNhbGwJMWYKIAkjIERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBjYWxsIGFuZCB0aGUganVtcCB0YWJsZS4KIC5Mc2Nsc19zdG9yZV90YWJsZToKLQkubG9uZwkuTHNjbHNfbm9yZXR2YWwJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KLQkubG9uZwkuTHNjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9JTlQgKi8KLQkubG9uZwkuTHNjbHNfcmV0ZmxvYXQJCS8qIEZGSV9UWVBFX0ZMT0FUICovCi0JLmxvbmcJLkxzY2xzX3JldGRvdWJsZQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KLQkubG9uZwkuTHNjbHNfcmV0bGRvdWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCi0JLmxvbmcJLkxzY2xzX3JldHVpbnQ4CQkvKiBGRklfVFlQRV9VSU5UOCAqLwotCS5sb25nCS5Mc2Nsc19yZXRzaW50OAkJLyogRkZJX1RZUEVfU0lOVDggKi8KLQkubG9uZwkuTHNjbHNfcmV0dWludDE2CS8qIEZGSV9UWVBFX1VJTlQxNiAqLwotCS5sb25nCS5Mc2Nsc19yZXRzaW50MTYJLyogRkZJX1RZUEVfU0lOVDE2ICovCi0JLmxvbmcJLkxzY2xzX3JldGludAkJLyogRkZJX1RZUEVfVUlOVDMyICovCi0JLmxvbmcJLkxzY2xzX3JldGludAkJLyogRkZJX1RZUEVfU0lOVDMyICovCi0JLmxvbmcJLkxzY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KLQkubG9uZwkuTHNjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLwotCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QJLyogRkZJX1RZUEVfU1RSVUNUICovCi0JLmxvbmcJLkxzY2xzX3JldGludAkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLwotCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QxCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLwotCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QyCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLwotCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3Q0CS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLworCS5sb25nCS5Mc2Nsc19ub3JldHZhbC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVk9JRCAqLworCS5sb25nCS5Mc2Nsc19yZXRpbnQtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0lOVCAqLworCS5sb25nCS5Mc2Nsc19yZXRmbG9hdC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfRkxPQVQgKi8KKwkubG9uZwkuTHNjbHNfcmV0ZG91YmxlLS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KKwkubG9uZwkuTHNjbHNfcmV0bGRvdWJsZS0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCS5sb25nCS5Mc2Nsc19yZXR1aW50OC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDggKi8KKwkubG9uZwkuTHNjbHNfcmV0c2ludDgtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQ4ICovCisJLmxvbmcJLkxzY2xzX3JldHVpbnQxNi0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDE2ICovCisJLmxvbmcJLkxzY2xzX3JldHNpbnQxNi0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDE2ICovCisJLmxvbmcJLkxzY2xzX3JldGludC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDMyICovCisJLmxvbmcJLkxzY2xzX3JldGludC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDMyICovCisJLmxvbmcJLkxzY2xzX3JldGxsb25nLS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KKwkubG9uZwkuTHNjbHNfcmV0bGxvbmctLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLworCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NUUlVDVCAqLworCS5sb25nCS5Mc2Nsc19yZXRpbnQtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKwkubG9uZwkuTHNjbHNfcmV0c3RydWN0MS0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCisJLmxvbmcJLkxzY2xzX3JldHN0cnVjdDItLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLworCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3Q0LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KIDE6Ci0JYWRkCSVlYXgsICVlYXgKLQlhZGQJJWVheCwgJWVheAorCXNobAkkMiwgJWVheAorCWFkZAkoJWVzcCksJWVheAorCW1vdgkoJWVheCksJWVheAogCWFkZAkoJWVzcCksJWVheAogCWFkZAkkNCwgJWVzcAotCWptcAkqKCVlYXgpCisJam1wCSolZWF4CiAKIAkvKiBTaWduL3plcm8gZXh0ZW5kIGFzIGFwcHJvcHJpYXRlLiAgKi8KIC5Mc2Nsc19yZXRzaW50ODoKQEAgLTEwMzAsMTEgKzExMTcsMzAgQEAKIC5Mc2Nsc19lcGlsb2d1ZToKIAltb3ZsCSVlYnAsICVlc3AKIAlwb3BsCSVlYnAKLQlyZXQKKwlwb3BsCSVlY3gKKwlwb3BsCSVlZHgKKwltb3ZsCShDTE9TVVJFX0NJRl9PRkZTRVQtMTApKCVlY3gpLCAlZWN4CisJYWRkbAlDSUZfQllURVNfT0ZGU0VUKCVlY3gpLCAlZXNwCisJbW92bAlDSUZfQUJJX09GRlNFVCglZWN4KSwgJWVjeAorCWNtcGwJJDMsICVlY3ggLyogRkZJX1RISVNDQUxMICovCisJamUJMWYKKwljbXBsCSQ0LCAlZWN4IC8qIEZGSV9GQVNUQ0FMTCAqLworCWpuZQkyZgorCisJYWRkbAkkNCwgJWVzcAorMToJYWRkbAkkNCwgJWVzcAorMjoJam1wCSolZWR4CiAuZmZpX2Nsb3N1cmVfU1REQ0FMTF9lbmQ6CiAuTEZFNToKIAotI2lmbmRlZiBfX09TMl9fCisjaWYgZGVmaW5lZChYODZfREFSV0lOKQorLnNlY3Rpb24gX19JTVBPUlQsX19qdW1wX3RhYmxlLHN5bWJvbF9zdHVicyxzZWxmX21vZGlmeWluZ19jb2RlK3B1cmVfaW5zdHJ1Y3Rpb25zLDUKK0xfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciRzdHViOgorCS5pbmRpcmVjdF9zeW1ib2wgX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKKwlobHQgOyBobHQgOyBobHQgOyBobHQgOyBobHQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKF9fT1MyX18pCiAJLnNlY3Rpb24JLmVoX2ZyYW1lLCJ3IgogI2VuZGlmCiAuTGZyYW1lMToKQEAgLTEwOTQsNyArMTIwMCw2IEBACiAJLmFsaWduIDQKIC5MRUZERTE6CiAKLQogLkxTRkRFMzoKIAkubG9uZwkuTEVGREUzLS5MQVNGREUzCS8qIEZERSBMZW5ndGggKi8KIC5MQVNGREUzOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zdGFtcC1oLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zdGFtcC1oLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Nzg4ZjcwLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3RhbXAtaC5pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRpbWVzdGFtcApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQppbmRleCBlZGM2ZTYxLi5kYTEwNDY1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQpAQCAtMiwxNyArMiw2IEBACiAKIEFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIGRlamFnbnUKIAotIyBTZXR1cCB0aGUgdGVzdGluZyBmcmFtZXdvcmssIGlmIHlvdSBoYXZlIG9uZQotRVhQRUNUID0gYGlmIFsgLWYgJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgXSA7IHRoZW4gXAotICAgICAgICAgICAgZWNobyAkKHRvcF9idWlsZGRpcikvLi4vZXhwZWN0L2V4cGVjdCA7IFwKLSAgICAgICAgICBlbHNlIGVjaG8gZXhwZWN0IDsgZmlgCi0KLVJVTlRFU1QgPSBgaWYgWyAtZiAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdCBdIDsgdGhlbiBcCi0JICAgICAgIGVjaG8gJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3QgOyBcCi0JICAgIGVsc2UgZWNobyBydW50ZXN0OyBmaWAKLQotQU1fUlVOVEVTVEZMQUdTID0KLQogRVhUUkFfREVKQUdOVV9TSVRFX0NPTkZJRz0uLi9sb2NhbC5leHAKIAogQ0xFQU5GSUxFUyA9ICouZXhlIGNvcmUqICoubG9nICouc3VtCkBAIC0yMCw3ICs5LDcgQEAKIEVYVFJBX0RJU1QgPSBjb25maWcvZGVmYXVsdC5leHAgbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jCQkJCVwKIGxpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jIGxpYmZmaS5jYWxsL2Nsc19zY2hhci5jCQkJXAotbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyBsaWJmZmkuY2FsbC9tYW55Ml93aW4zMi5jCQkJXAorbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyBcCiBsaWJmZmkuY2FsbC9yZXR1cm5fdWwuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMJCQlcCiBsaWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jCQkJXApAQCAtMzAsNyArMTksNyBAQAogbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jIGxpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL3N0cnVjdDguYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jCQkJXAogbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIGxpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYwkJCVwKLWxpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jIGxpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMJCQlcCitsaWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCQkJXAogbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMgbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYwkJCVwKIGxpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYyBsaWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYwkJCVwKQEAgLTQ2LDE2ICszNSwxNiBAQAogbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIGxpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jCQkJXAogbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jCQkJXAogbGliZmZpLmNhbGwvZmxvYXQzLmMgbGliZmZpLmNhbGwvbWFueTIuYwkJCQlcCi1saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMJCVwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfc2ltcGxlLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jCQlcCiBsaWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMJCVwKLWxpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyBsaWJmZmkuY2FsbC9tYW55X3dpbjMyLmMJCQlcCitsaWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgXAogbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIGxpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMJCVwKLWxpYmZmaS5jYWxsL3JldHVybl91Yy5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYwkJCVwKK2xpYmZmaS5jYWxsL3JldHVybl91Yy5jIFwKIGxpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfOGJ5dGUuYwkJCVwKLWxpYmZmaS5jYWxsL3Byb21vdGlvbi5jIGxpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYwkJCVwKK2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jIFwKIGxpYmZmaS5jYWxsL3JldHVybl9kYmwuYyBsaWJmZmkuY2FsbC9jbHNfMjRieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9zdHJ1Y3Q0LmMgbGliZmZpLmNhbGwvY2xzXzZieXRlLmMJCQkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jIGxpYmZmaS5jYWxsL2Zsb2F0LmMJCQlcCkBAIC02Myw3ICs1Miw3IEBACiBsaWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jIGxpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYyBsaWJmZmkuY2FsbC9yZXR1cm5fZmwxLmMJCQlcCiBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jCQlcCi1saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMJCVwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYwkJXAogbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMgbGliZmZpLmNhbGwvcmV0dXJuX3NsLmMJCQlcCiBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIGxpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzXzJieXRlLmMgbGliZmZpLmNhbGwvZmxvYXQyLmMJCQkJXApAQCAtNzUsMjAgKzY0LDIyIEBACiBsaWJmZmkuY2FsbC9weW9iamMtdGMuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jCQlcCiBsaWJmZmkuY2FsbC9zdHJ1Y3QxLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYwkJCVwKIGxpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMgbGliZmZpLmNhbGwvcHJvYmxlbTEuYwkJCVwKLWxpYmZmaS5jYWxsL2Zsb2F0NC5jIGxpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jCQkJXAotbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jIGxpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYwkJCVwKLWxpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jCQkJXAorbGliZmZpLmNhbGwvZmxvYXQ0LmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgXAogbGliZmZpLmNhbGwvc3RydWN0Ni5jIGxpYmZmaS5jYWxsL3JldHVybl9sbC5jIGxpYmZmaS5jYWxsL3N0cnVjdDkuYwlcCiBsaWJmZmkuY2FsbC9yZXR1cm5fc2MuYyBsaWJmZmkuY2FsbC9zdHJ1Y3Q3LmMJCQkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jIGxpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jCQkJXAotbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMgbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMJCQlcCi1saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYyBsaWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjCQkJXAotbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAgbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwlcCi1saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggbGliL3dyYXBwZXIuZXhwIGxpYi90YXJnZXQtbGlicGF0aC5leHAJXAorbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMJCQlcCitsaWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYyBsaWJmZmkuY2FsbC91bndpbmR0ZXN0LmNjCQkJXAorbGliZmZpLmNhbGwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwlcCitsaWIvd3JhcHBlci5leHAgbGliL3RhcmdldC1saWJwYXRoLmV4cAlcCiBsaWIvbGliZmZpLmV4cCBsaWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jCQkJCVwKIGxpYmZmaS5jYWxsL2Nsc191Y2hhcl92YS5jIGxpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfdWxvbmdfdmEuYyBsaWJmZmkuY2FsbC9jbHNfdXNob3J0X3ZhLmMJCQlcCiBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYyBsaWJmZmkuY2FsbC91bmluaXRpYWxpemVkLmMJCVwKIGxpYmZmaS5jYWxsL3ZhXzEuYyBsaWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmMgbGliZmZpLmNhbGwvdmFfc3RydWN0Mi5jCVwKLWxpYmZmaS5jYWxsL3ZhX3N0cnVjdDMuYwotCitsaWJmZmkuY2FsbC92YV9zdHJ1Y3QzLmMgXAorbGliZmZpLmNhbGwvc3RybGVuMi5jIFwKK2xpYmZmaS5jYWxsL3N0cmxlbjMuYyBcCitsaWJmZmkuY2FsbC9zdHJsZW40LmMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KaW5kZXggYTNiYTA2Ni4uOTllMjI2YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KQEAgLTEsNyArMSw3IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEyLjIgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTMuNCBmcm9tIE1ha2VmaWxlLmFtLgogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTE0LDIzICsxNCw1MSBAQAogCiBAU0VUX01BS0VACiBWUEFUSCA9IEBzcmNkaXJACi1hbV9fbWFrZV9kcnlydW4gPSBcCi0gIHsgXAotICAgIGFtX19kcnk9bm87IFwKK2FtX19pc19nbnVfbWFrZSA9IHRlc3QgLW4gJyQoTUFLRUZJTEVfTElTVCknICYmIHRlc3QgLW4gJyQoTUFLRUxFVkVMKScKK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKyAgICAgID8pIDs7IFwKKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisgICAgICAgICBleGl0IDE7OyBcCisgIGVzYWM7IFwKKyAgaGFzX29wdD1ubzsgXAorICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisgIGVsc2UgXAogICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAogICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAotICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCi0gICAgICAqKSBcCi0gICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCi0gICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAotICAgICAgICAgICAgKj0qfC0tKikgOzsgXAotICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCi0gICAgICAgICAgZXNhYzsgXAotICAgICAgICBkb25lOzsgXAorICAgICAgICBicz1cXDsgXAorICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKICAgICBlc2FjOyBcCi0gICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKLSAgfQorICBmaTsgXAorICBza2lwX25leHQ9bm87IFwKKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorICB7IFwKKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorICB9OyBcCisgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICBlc2FjOyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorICAgIGVzYWM7IFwKKyAgZG9uZTsgXAorICB0ZXN0ICQkaGFzX29wdCA9IHllcworYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCiBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAogcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQApAQCAtNTEsNyArNzksNyBAQAogaG9zdF90cmlwbGV0ID0gQGhvc3RACiB0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACiBzdWJkaXIgPSB0ZXN0c3VpdGUKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtCiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CiBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hc21jZmkubTQgXAogCSQodG9wX3NyY2RpcikvbTQvYXhfYXBwZW5kX2ZsYWcubTQgXApAQCAtNzMsNiArMTAxLDE4IEBACiBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2ZmaWNvbmZpZy5oCiBDT05GSUdfQ0xFQU5fRklMRVMgPQogQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAogU09VUkNFUyA9CiBESVNUX1NPVVJDRVMgPQogYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCkBAIC04MCwxNCArMTIwLDE4IEBACiAgICAgbnxub3xOTykgZmFsc2U7OyBcCiAgICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKICAgZXNhYworYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKIERFSkFUT09MID0gJChQQUNLQUdFKQogUlVOVEVTVERFRkFVTFRGTEFHUyA9IC0tdG9vbCAkJHRvb2wgLS1zcmNkaXIgJCRzcmNkaXIKK0VYUEVDVCA9IGV4cGVjdAorUlVOVEVTVCA9IHJ1bnRlc3QKIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCiBBQ0xPQ0FMID0gQEFDTE9DQUxACiBBTExPQ0EgPSBAQUxMT0NBQAogQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKIEFNX0xUTERGTEFHUyA9IEBBTV9MVExERkxBR1NACi1BTV9SVU5URVNURkxBR1MgPSAKK0FNX1JVTlRFU1RGTEFHUyA9IEBBTV9SVU5URVNURkxBR1NACiBBUiA9IEBBUkAKIEFVVE9DT05GID0gQEFVVE9DT05GQAogQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQApAQCAtMTAxLDYgKzE0NSwxMCBAQAogQ0ZMQUdTID0gQENGTEFHU0AKIENQUCA9IEBDUFBACiBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACiBDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKQEAgLTExNiw2ICsxNjQsNyBAQAogRkdSRVAgPSBARkdSRVBACiBHUkVQID0gQEdSRVBACiBIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACitIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgPSBASEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UQAogSU5TVEFMTCA9IEBJTlNUQUxMQAogSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKIElOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACkBAIC0xNjIsNiArMjExLDcgQEAKIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQVIgPSBAYWNfY3RfQVJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACiBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACiBhbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKIGFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACkBAIC0yMTcsMjIgKzI2NywxMiBAQAogdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKIHRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKIEFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIGRlamFnbnUKLQotIyBTZXR1cCB0aGUgdGVzdGluZyBmcmFtZXdvcmssIGlmIHlvdSBoYXZlIG9uZQotRVhQRUNUID0gYGlmIFsgLWYgJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgXSA7IHRoZW4gXAotICAgICAgICAgICAgZWNobyAkKHRvcF9idWlsZGRpcikvLi4vZXhwZWN0L2V4cGVjdCA7IFwKLSAgICAgICAgICBlbHNlIGVjaG8gZXhwZWN0IDsgZmlgCi0KLVJVTlRFU1QgPSBgaWYgWyAtZiAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdCBdIDsgdGhlbiBcCi0JICAgICAgIGVjaG8gJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3QgOyBcCi0JICAgIGVsc2UgZWNobyBydW50ZXN0OyBmaWAKLQogRVhUUkFfREVKQUdOVV9TSVRFX0NPTkZJRyA9IC4uL2xvY2FsLmV4cAogQ0xFQU5GSUxFUyA9ICouZXhlIGNvcmUqICoubG9nICouc3VtCiBFWFRSQV9ESVNUID0gY29uZmlnL2RlZmF1bHQuZXhwIGxpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYwkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYwkJCQlcCiBsaWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYyBsaWJmZmkuY2FsbC9jbHNfc2NoYXIuYwkJCVwKLWxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgbGliZmZpLmNhbGwvbWFueTJfd2luMzIuYwkJCVwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgXAogbGliZmZpLmNhbGwvcmV0dXJuX3VsLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jCQkJXAogbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIGxpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYwkJCVwKQEAgLTI0Miw3ICsyODIsNyBAQAogbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jIGxpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL3N0cnVjdDguYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jCQkJXAogbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIGxpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYwkJCVwKLWxpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jIGxpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMJCQlcCitsaWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCQkJXAogbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMgbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYwkJCVwKIGxpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYyBsaWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYwkJCVwKQEAgLTI1OCwxNiArMjk4LDE2IEBACiBsaWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMgbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMJCQlcCiBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMJCQlcCiBsaWJmZmkuY2FsbC9mbG9hdDMuYyBsaWJmZmkuY2FsbC9tYW55Mi5jCQkJCVwKLWxpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYwkJXAorbGliZmZpLmNhbGwvY2xvc3VyZV9zaW1wbGUuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMJCVwKIGxpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jCQkJXAogbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYwkJXAotbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIGxpYmZmaS5jYWxsL21hbnlfd2luMzIuYwkJCVwKK2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyBcCiBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYwkJXAotbGliZmZpLmNhbGwvcmV0dXJuX3VjLmMgbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jCQkJXAorbGliZmZpLmNhbGwvcmV0dXJuX3VjLmMgXAogbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jCQkJXAotbGliZmZpLmNhbGwvcHJvbW90aW9uLmMgbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jCQkJXAorbGliZmZpLmNhbGwvcHJvbW90aW9uLmMgXAogbGliZmZpLmNhbGwvcmV0dXJuX2RibC5jIGxpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL3N0cnVjdDQuYyBsaWJmZmkuY2FsbC9jbHNfNmJ5dGUuYwkJCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMgbGliZmZpLmNhbGwvZmxvYXQuYwkJCVwKQEAgLTI3NSw3ICszMTUsNyBAQAogbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYyBsaWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgbGliZmZpLmNhbGwvcmV0dXJuX2ZsMS5jCQkJXAogbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYwkJXAotbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jCQlcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMJCVwKIGxpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jIGxpYmZmaS5jYWxsL3JldHVybl9zbC5jCQkJXAogbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyBsaWJmZmkuY2FsbC9jbHNfNWJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jIGxpYmZmaS5jYWxsL2Zsb2F0Mi5jCQkJCVwKQEAgLTI4NywyMiArMzI3LDI1IEBACiBsaWJmZmkuY2FsbC9weW9iamMtdGMuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jCQlcCiBsaWJmZmkuY2FsbC9zdHJ1Y3QxLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYwkJCVwKIGxpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMgbGliZmZpLmNhbGwvcHJvYmxlbTEuYwkJCVwKLWxpYmZmaS5jYWxsL2Zsb2F0NC5jIGxpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jCQkJXAotbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jIGxpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYwkJCVwKLWxpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jCQkJXAorbGliZmZpLmNhbGwvZmxvYXQ0LmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgXAogbGliZmZpLmNhbGwvc3RydWN0Ni5jIGxpYmZmaS5jYWxsL3JldHVybl9sbC5jIGxpYmZmaS5jYWxsL3N0cnVjdDkuYwlcCiBsaWJmZmkuY2FsbC9yZXR1cm5fc2MuYyBsaWJmZmkuY2FsbC9zdHJ1Y3Q3LmMJCQkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jIGxpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jCQkJXAotbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMgbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMJCQlcCi1saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYyBsaWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjCQkJXAotbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAgbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwlcCi1saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggbGliL3dyYXBwZXIuZXhwIGxpYi90YXJnZXQtbGlicGF0aC5leHAJXAorbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMJCQlcCitsaWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYyBsaWJmZmkuY2FsbC91bndpbmR0ZXN0LmNjCQkJXAorbGliZmZpLmNhbGwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwlcCitsaWIvd3JhcHBlci5leHAgbGliL3RhcmdldC1saWJwYXRoLmV4cAlcCiBsaWIvbGliZmZpLmV4cCBsaWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jCQkJCVwKIGxpYmZmaS5jYWxsL2Nsc191Y2hhcl92YS5jIGxpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfdWxvbmdfdmEuYyBsaWJmZmkuY2FsbC9jbHNfdXNob3J0X3ZhLmMJCQlcCiBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYyBsaWJmZmkuY2FsbC91bmluaXRpYWxpemVkLmMJCVwKIGxpYmZmaS5jYWxsL3ZhXzEuYyBsaWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmMgbGliZmZpLmNhbGwvdmFfc3RydWN0Mi5jCVwKLWxpYmZmaS5jYWxsL3ZhX3N0cnVjdDMuYworbGliZmZpLmNhbGwvdmFfc3RydWN0My5jIFwKK2xpYmZmaS5jYWxsL3N0cmxlbjIuYyBcCitsaWJmZmkuY2FsbC9zdHJsZW4zLmMgXAorbGliZmZpLmNhbGwvc3RybGVuNC5jCiAKIGFsbDogYWxsLWFtCiAKQEAgLTM0MywxMSArMzg2LDkgQEAKIAogY2xlYW4tbGlidG9vbDoKIAktcm0gLXJmIC5saWJzIF9saWJzCi10YWdzOiBUQUdTCi1UQUdTOgordGFncyBUQUdTOgogCi1jdGFnczogQ1RBR1MKLUNUQUdTOgorY3RhZ3MgQ1RBR1M6CiAKIGNzY29wZSBjc2NvcGVsaXN0OgogCkBAIC0zNTUsMTMgKzM5NiwxMiBAQAogY2hlY2stREVKQUdOVTogc2l0ZS5leHAKIAlzcmNkaXI9JyQoc3JjZGlyKSc7IGV4cG9ydCBzcmNkaXI7IFwKIAlFWFBFQ1Q9JChFWFBFQ1QpOyBleHBvcnQgRVhQRUNUOyBcCi0JcnVudGVzdD0kKFJVTlRFU1QpOyBcCi0JaWYgJChTSEVMTCkgLWMgIiQkcnVudGVzdCAtLXZlcnNpb24iID4gL2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCWlmICQoU0hFTEwpIC1jICIkKFJVTlRFU1QpIC0tdmVyc2lvbiIgPiAvZGV2L251bGwgMj4mMTsgdGhlbiBcCiAJICBleGl0X3N0YXR1cz0wOyBsPSckKERFSkFUT09MKSc7IGZvciB0b29sIGluICQkbDsgZG8gXAotCSAgICBpZiAkJHJ1bnRlc3QgJChBTV9SVU5URVNURkxBR1MpICQoUlVOVEVTVERFRkFVTFRGTEFHUykgJChSVU5URVNURkxBR1MpOyBcCisJICAgIGlmICQoUlVOVEVTVCkgJChBTV9SVU5URVNURkxBR1MpICQoUlVOVEVTVERFRkFVTFRGTEFHUykgJChSVU5URVNURkxBR1MpOyBcCiAJICAgIHRoZW4gOjsgZWxzZSBleGl0X3N0YXR1cz0xOyBmaTsgXAogCSAgZG9uZTsgXAotCWVsc2UgZWNobyAiV0FSTklORzogY291bGQgbm90IGZpbmQgJ3J1bnRlc3QnIiAxPiYyOyA6O1wKKwllbHNlIGVjaG8gIldBUk5JTkc6IGNvdWxkIG5vdCBmaW5kICckKFJVTlRFU1QpJyIgMT4mMjsgOjtcCiAJZmk7IFwKIAlleGl0ICQkZXhpdF9zdGF0dXMKIHNpdGUuZXhwOiBNYWtlZmlsZSAkKEVYVFJBX0RFSkFHTlVfU0lURV9DT05GSUcpCkBAIC01MzIsMTYgKzU3MiwxNyBAQAogLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAogCiAuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stREVKQUdOVSBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGRpc3RjbGVhbiBkaXN0Y2xlYW4tREVKQUdOVSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKwljbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MtYW0gZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tREVKQUdOVSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIFwKKwlkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncy1hbSB1bmluc3RhbGwgXAorCXVuaW5zdGFsbC1hbQogCiAKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvbGliZmZpLmV4cCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwCmluZGV4IDFhYzJjMzYuLmRiZGQxYTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwCkBAIC0yMjIsNiArMjIyLDEwIEBACiAJbGFwcGVuZCBvcHRpb25zICJsaWJzPSAtbHB0aHJlYWQiCiAgICAgfQogCisgICAgaWYgeyBbc3RyaW5nIG1hdGNoICIqLmNjIiAkc291cmNlXSB9IHsKKwlsYXBwZW5kIG9wdGlvbnMgImMrKyIKKyAgICB9CisKICAgICB2ZXJib3NlICJvcHRpb25zOiAkb3B0aW9ucyIKICAgICByZXR1cm4gW3RhcmdldF9jb21waWxlICRzb3VyY2UgJGRlc3QgJHR5cGUgJG9wdGlvbnNdCiB9CkBAIC0yNzMsNiArMjc3LDQ2IEBACiAgICAgfQogfQogCitwcm9jIHJ1bi1tYW55LXRlc3RzIHsgdGVzdGNhc2VzIGV4dHJhX2ZsYWdzIH0geworICAgIGdsb2JhbCB1c2luZ19nY2MKKyAgICBpZiB7IFtzdHJpbmcgbWF0Y2ggJHVzaW5nX2djYyAieWVzIl0gfSB7CisgICAgICAgIHNldCBjb21tb24gIi1XIC1XYWxsIgorICAgICAgICBzZXQgb3B0aW1pemF0aW9ucyB7ICItTzAiICItTzIiICItTzMiICItT3MiICItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiIH0KKyAgICB9IGVsc2UgeworICAgICAgICAjIEFzc3VtZSB3ZSBhcmUgdXNpbmcgdGhlIHZlbmRvciBjb21waWxlci4KKyAgICAgICAgc2V0IGNvbW1vbiAiIgorICAgICAgICBzZXQgb3B0aW1pemF0aW9ucyB7ICIiIH0KKyAgICB9CisKKyAgICBzZXQgdGFyZ2V0YWJpcyB7ICIiIH0KKyAgICBpZiBbc3RyaW5nIG1hdGNoICR1c2luZ19nY2MgInllcyJdIHsKKyAgICAgICAgaWYgW2lzdGFyZ2V0ICJpPzg2LSotKiJdIHsKKyAgICAgICAgICAgIHNldCB0YXJnZXRhYmlzIHsKKyAgICAgICAgICAgICAgICAiIgorICAgICAgICAgICAgICAgICItREFCSV9OVU09RkZJX1NURENBTEwgLURBQklfQVRUUj1fX1NURENBTExfXyIKKyAgICAgICAgICAgICAgICAiLURBQklfTlVNPUZGSV9USElTQ0FMTCAtREFCSV9BVFRSPV9fVEhJU0NBTExfXyIKKyAgICAgICAgICAgICAgICAiLURBQklfTlVNPUZGSV9GQVNUQ0FMTCAtREFCSV9BVFRSPV9fRkFTVENBTExfXyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHNldCBjb21tb24gWyBjb25jYXQgJGNvbW1vbiAkZXh0cmFfZmxhZ3MgXQorICAgIGZvcmVhY2ggdGVzdCAkdGVzdGNhc2VzIHsKKyAgICAgICAgc2V0IHRlc3RuYW1lIFtmaWxlIHRhaWwgJHRlc3RdCisgICAgICAgIGlmIFtzZWFyY2hfZm9yICR0ZXN0ICJBQklfTlVNIl0geworICAgICAgICAgICAgc2V0IGFiaXMgJHRhcmdldGFiaXMKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNldCBhYmlzIHsgIiIgfQorICAgICAgICB9CisgICAgICAgIGZvcmVhY2ggb3B0ICRvcHRpbWl6YXRpb25zIHsKKyAgICAgICAgICAgIGZvcmVhY2ggYWJpICRhYmlzIHsKKyAgICAgICAgICAgICAgICBzZXQgb3B0aW9ucyBbY29uY2F0ICRjb21tb24gJG9wdCAkYWJpXQorICAgICAgICAgICAgICAgIHZlcmJvc2UgIlRlc3RpbmcgJHRlc3RuYW1lLCAkb3B0aW9ucyIgMQorICAgICAgICAgICAgICAgIGRnLXRlc3QgJHRlc3QgJG9wdGlvbnMgIiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KIAogIyBMaWtlIGNoZWNrX2NvbmRpdGlvbmFsX3hmYWlsLCBidXQgY2FsbGFibGUgZnJvbSBhIGRnIHRlc3QuCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Eub3V0IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvYS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvYS5vdXQKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cAppbmRleCBjMzM0Njg1Li4zNmQxM2Q4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cApAQCAtMTksMjAgKzE5LDcgQEAKIAogZ2xvYmFsIHNyY2RpciBzdWJkaXIKIAotaWYgeyBbc3RyaW5nIG1hdGNoICR1c2luZ19nY2MgInllcyJdIH0gewotCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItTzAgLVcgLVdhbGwiICIiCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItTzIiICIiCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItTzMiICIiCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItT3MiICIiCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiICIiCi0gCi19IGVsc2UgeyAKLQotICAjIEFzc3VtZSB3ZSBhcmUgdXNpbmcgdGhlIHZlbmRvciBjb21waWxlci4KLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIiIgIiIKLQotfQorcnVuLW1hbnktdGVzdHMgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluIC0tICRzcmNkaXIvJHN1YmRpci8qLntjLGNjfV1dICIiCiAKIGRnLWZpbmlzaAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3NpbXBsZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zaW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTRlNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zaW1wbGUuYwpAQCAtMCwwICsxLDU1IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHNpbXBsZSBjbG9zdXJlIGhhbmRsaW5nIHdpdGggYWxsIEFCSXMKKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPHR3YWxsamF2YUBkZXYuamF2YS5uZXQ+ICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbG9zdXJlX3Rlc3QoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSooaW50ICopYXJnc1swXSArIChpbnQpKCooaW50ICopYXJnc1sxXSkKKyAgICArIChpbnQpKCooaW50ICopYXJnc1syXSkgICsgKGludCkoKihpbnQgKilhcmdzWzNdKQorICAgICsgKGludCkoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKihpbnQgKilhcmdzWzBdLCAoaW50KSgqKGludCAqKWFyZ3NbMV0pLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMl0pLCAoaW50KSgqKGludCAqKWFyZ3NbM10pLAorICAgICAgICAgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKKworfQorCit0eXBlZGVmIGludCAoQUJJX0FUVFIgKmNsb3N1cmVfdGVzdF90eXBlMCkoaW50LCBpbnQsIGludCwgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCA0LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooY2xvc3VyZV90ZXN0X3R5cGUwKWNvZGUpKDAsIDEsIDIsIDMpOworICAvKiB7IGRnLW91dHB1dCAiMCAxIDIgMzogOSIgfSAqLworCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDkiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQwN2YwMi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qIEFyZWE6CWNsb3N1cmVfY2FsbCAoc3RkY2FsbCBjb252ZW50aW9uKQotICAgUHVycG9zZToJQ2hlY2sgaGFuZGxpbmcgd2hlbiBjYWxsZXIgZXhwZWN0cyBzdGRjYWxsIGNhbGxlZQotICAgTGltaXRhdGlvbnM6CW5vbmUuCi0gICBQUjoJCW5vbmUuCi0gICBPcmlnaW5hdG9yOgk8dHdhbGxqYXZhQGRldi5qYXZhLm5ldD4gKi8KLQotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KLSNpbmNsdWRlICJmZml0ZXN0LmgiCi0KLXN0YXRpYyB2b2lkCi1jbG9zdXJlX3Rlc3Rfc3RkY2FsbChmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCi0JCSB2b2lkKiB1c2VyZGF0YSkKLXsKLSAgKihmZmlfYXJnKilyZXNwID0KLSAgICAoaW50KSooaW50ICopYXJnc1swXSArIChpbnQpKCooaW50ICopYXJnc1sxXSkKLSAgICArIChpbnQpKCooaW50ICopYXJnc1syXSkgICsgKGludCkoKihpbnQgKilhcmdzWzNdKQotICAgICsgKGludCkoaW50cHRyX3QpdXNlcmRhdGE7Ci0KLSAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWRcbiIsCi0JIChpbnQpKihpbnQgKilhcmdzWzBdLCAoaW50KSgqKGludCAqKWFyZ3NbMV0pLAotCSAoaW50KSgqKGludCAqKWFyZ3NbMl0pLCAoaW50KSgqKGludCAqKWFyZ3NbM10pLAotICAgICAgICAgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKLQotfQotCi10eXBlZGVmIGludCAoX19zdGRjYWxsICpjbG9zdXJlX3Rlc3RfdHlwZTApKGludCwgaW50LCBpbnQsIGludCk7Ci0KLWludCBtYWluICh2b2lkKQotewotICBmZmlfY2lmIGNpZjsKLSAgdm9pZCAqY29kZTsKLSAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKLSAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOwotICBpbnQgcmVzOwotICB2b2lkKiBzcF9wcmU7Ci0gIHZvaWQqIHNwX3Bvc3Q7Ci0gIGNoYXIgYnVmWzEwMjRdOwotCi0gIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50OwotICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfdWludDsKLSAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV91aW50OwotICBjbF9hcmdfdHlwZXNbNF0gPSBOVUxMOwotCi0gIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX1NURENBTEwsIDQsCi0JCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKLQotICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9zdGRjYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOwotCi0jaWZkZWYgX01TQ19WRVIKLSAgX19hc20geyBtb3Ygc3BfcHJlLCBlc3AgfQotI2Vsc2UKLSAgYXNtIHZvbGF0aWxlICgiIG1vdmwgJSVlc3AsJTAiIDogIj1nIiAoc3BfcHJlKSk7Ci0jZW5kaWYKLSAgcmVzID0gKCooY2xvc3VyZV90ZXN0X3R5cGUwKWNvZGUpKDAsIDEsIDIsIDMpOwotI2lmZGVmIF9NU0NfVkVSCi0gIF9fYXNtIHsgbW92IHNwX3Bvc3QsIGVzcCB9Ci0jZWxzZQotICBhc20gdm9sYXRpbGUgKCIgbW92bCAlJWVzcCwlMCIgOiAiPWciIChzcF9wb3N0KSk7Ci0jZW5kaWYKLSAgLyogeyBkZy1vdXRwdXQgIjAgMSAyIDM6IDkiIH0gKi8KLQotICBwcmludGYoInJlczogJWRcbiIscmVzKTsKLSAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA5IiB9ICovCi0KLSAgc3ByaW50ZihidWYsICJtaXNtYXRjaDogcHJlPSVwIHZzIHBvc3Q9JXAiLCBzcF9wcmUsIHNwX3Bvc3QpOwotICBwcmludGYoInN0YWNrIHBvaW50ZXIgJXNcbiIsIChzcF9wcmUgPT0gc3BfcG9zdCA/ICJtYXRjaCIgOiBidWYpKTsKLSAgLyogeyBkZy1vdXRwdXQgIlxuc3RhY2sgcG9pbnRlciBtYXRjaCIgfSAqLwotICBleGl0KDApOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjkzNjQ5Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qIEFyZWE6CWNsb3N1cmVfY2FsbCAodGhpc2NhbGwgY29udmVudGlvbikKLSAgIFB1cnBvc2U6CUNoZWNrIGhhbmRsaW5nIHdoZW4gY2FsbGVyIGV4cGVjdHMgdGhpc2NhbGwgY2FsbGVlCi0gICBMaW1pdGF0aW9uczoJbm9uZS4KLSAgIFBSOgkJbm9uZS4KLSAgIE9yaWdpbmF0b3I6CTxrdGlldHpAcmVkaGF0LmNvbT4gKi8KLQotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KLSNpbmNsdWRlICJmZml0ZXN0LmgiCi0KLXN0YXRpYyB2b2lkCi1jbG9zdXJlX3Rlc3RfdGhpc2NhbGwoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAotCQkgICAgICB2b2lkKiB1c2VyZGF0YSkKLXsKLSAgKihmZmlfYXJnKilyZXNwID0KLSAgICAoaW50KSooaW50ICopYXJnc1swXSArIChpbnQpKCooaW50ICopYXJnc1sxXSkKLSAgICArIChpbnQpKCooaW50ICopYXJnc1syXSkgICsgKGludCkoKihpbnQgKilhcmdzWzNdKQotICAgICsgKGludCkoaW50cHRyX3QpdXNlcmRhdGE7Ci0KLSAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWRcbiIsCi0JIChpbnQpKihpbnQgKilhcmdzWzBdLCAoaW50KSgqKGludCAqKWFyZ3NbMV0pLAotCSAoaW50KSgqKGludCAqKWFyZ3NbMl0pLCAoaW50KSgqKGludCAqKWFyZ3NbM10pLAotICAgICAgICAgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKLQotfQotCi10eXBlZGVmIGludCAoX190aGlzY2FsbCAqY2xvc3VyZV90ZXN0X3R5cGUwKShpbnQsIGludCwgaW50LCBpbnQpOwotCi1pbnQgbWFpbiAodm9pZCkKLXsKLSAgZmZpX2NpZiBjaWY7Ci0gIHZvaWQgKmNvZGU7Ci0gIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7Ci0gIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKLSAgaW50IHJlczsKLSAgdm9pZCogc3BfcHJlOwotICB2b2lkKiBzcF9wb3N0OwotICBjaGFyIGJ1ZlsxMDI0XTsKLQotICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDsKLSAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV91aW50OwotICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdWludDsKLSAgY2xfYXJnX3R5cGVzWzRdID0gTlVMTDsKLQotICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9USElTQ0FMTCwgNCwKLQkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOwotCi0gIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X3RoaXNjYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOwotCi0jaWZkZWYgX01TQ19WRVIKLSAgX19hc20geyBtb3Ygc3BfcHJlLCBlc3AgfQotI2Vsc2UKLSAgYXNtIHZvbGF0aWxlICgiIG1vdmwgJSVlc3AsJTAiIDogIj1nIiAoc3BfcHJlKSk7Ci0jZW5kaWYKLSAgcmVzID0gKCooY2xvc3VyZV90ZXN0X3R5cGUwKWNvZGUpKDAsIDEsIDIsIDMpOwotI2lmZGVmIF9NU0NfVkVSCi0gIF9fYXNtIHsgbW92IHNwX3Bvc3QsIGVzcCB9Ci0jZWxzZQotICBhc20gdm9sYXRpbGUgKCIgbW92bCAlJWVzcCwlMCIgOiAiPWciIChzcF9wb3N0KSk7Ci0jZW5kaWYKLSAgLyogeyBkZy1vdXRwdXQgIjAgMSAyIDM6IDkiIH0gKi8KLQotICBwcmludGYoInJlczogJWRcbiIscmVzKTsKLSAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA5IiB9ICovCi0KLSAgc3ByaW50ZihidWYsICJtaXNtYXRjaDogcHJlPSVwIHZzIHBvc3Q9JXAiLCBzcF9wcmUsIHNwX3Bvc3QpOwotICBwcmludGYoInN0YWNrIHBvaW50ZXIgJXNcbiIsIChzcF9wcmUgPT0gc3BfcG9zdCA/ICJtYXRjaCIgOiBidWYpKTsKLSAgLyogeyBkZy1vdXRwdXQgIlxuc3RhY2sgcG9pbnRlciBtYXRjaCIgfSAqLwotICBleGl0KDApOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCmluZGV4IDQzMTY3YjYuLmUwNzdmOTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogCS8qIFRoaXMgcHJpbnRmIGNhbGwgaXMgdmFyaWFkaWMgKi8KIAlDSEVDSyhmZmlfcHJlcF9jaWZfdmFyKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgMiwgJmZmaV90eXBlX3NpbnQsCi0JCWFyZ190eXBlcykgPT0gRkZJX09LKTsKKwkJCSAgICAgICBhcmdfdHlwZXMpID09IEZGSV9PSyk7CiAKIAlhcmdzWzBdID0gJmZvcm1hdDsKIAlhcmdzWzFdID0gJmRvdWJsZUFyZzsKQEAgLTQ5LDEyICs0OSwxMCBAQAogCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKIAkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0gKi8KIAotCS8qIFRoZSBjYWxsIHRvIGNsc19kb3VibGVfdmFfZm4gaXMgc3RhdGljLCBzbyBoYXZlIHRvIHVzZSBhIG5vcm1hbCBwcmVwX2NpZiAqLwotCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZmZmlfdHlwZV9zaW50LCBhcmdfdHlwZXMpID09IEZGSV9PSyk7CisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfZG91YmxlX3ZhX2ZuLCBOVUxMLAorCQkJCSAgIGNvZGUpID09IEZGSV9PSyk7CiAKLQlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19kb3VibGVfdmFfZm4sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7Ci0KLQlyZXMJPSAoKGludCgqKShjaGFyKiwgZG91YmxlKSkoY29kZSkpKGZvcm1hdCwgZG91YmxlQXJnKTsKKwlyZXMgPSAoKGludCgqKShjaGFyKiwgLi4uKSkoY29kZSkpKGZvcm1hdCwgZG91YmxlQXJnKTsKIAkvKiB7IGRnLW91dHB1dCAiXG43LjAiIH0gKi8KIAlwcmludGYoInJlczogJWRcbiIsIChpbnQpIHJlcyk7CiAJLyogeyBkZy1vdXRwdXQgIlxucmVzOiA0IiB9ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYwppbmRleCA3MTI2YjEzLi4zOWI0MzhiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogCS8qIFRoaXMgcHJpbnRmIGNhbGwgaXMgdmFyaWFkaWMgKi8KIAlDSEVDSyhmZmlfcHJlcF9jaWZfdmFyKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgMiwgJmZmaV90eXBlX3NpbnQsCi0JCWFyZ190eXBlcykgPT0gRkZJX09LKTsKKwkJCSAgICAgICBhcmdfdHlwZXMpID09IEZGSV9PSyk7CiAKIAlhcmdzWzBdID0gJmZvcm1hdDsKIAlhcmdzWzFdID0gJmxkQXJnOwpAQCAtNDksMTMgKzQ5LDEwIEBACiAJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOwogCS8qIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfSAqLwogCi0JLyogVGhlIGNhbGwgdG8gY2xzX2xvbmdkb3VibGVfdmFfZm4gaXMgc3RhdGljLCBzbyBoYXZlIHRvIHVzZSBhIG5vcm1hbCBwcmVwX2NpZiAqLwotCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZmZmlfdHlwZV9zaW50LAotCQlhcmdfdHlwZXMpID09IEZGSV9PSyk7CisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfbG9uZ2RvdWJsZV92YV9mbiwgTlVMTCwKKwkJCQkgICBjb2RlKSA9PSBGRklfT0spOwogCi0JQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfbG9uZ2RvdWJsZV92YV9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKLQotCXJlcwk9ICgoaW50KCopKGNoYXIqLCBsb25nIGRvdWJsZSkpKGNvZGUpKShmb3JtYXQsIGxkQXJnKTsKKwlyZXMgPSAoKGludCgqKShjaGFyKiwgLi4uKSkoY29kZSkpKGZvcm1hdCwgbGRBcmcpOwogCS8qIHsgZGctb3V0cHV0ICJcbjcuMCIgfSAqLwogCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKIAkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0gKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jCmluZGV4IDE3NWVkOTYuLjZkMWZkYWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYwpAQCAtMzUsNyArMzUsNyBAQAogICBwcmludGYgKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgbiwgczEuYSwgczEuYiwKIAkgIGwxLmEsIGwxLmIsIGwxLmMsIGwxLmQsIGwxLmUsCiAJICBzMi5hLCBzMi5iKTsKLSAgKiAoaW50KikgcmVzcCA9IDQyOworICAqIChmZmlfYXJnKikgcmVzcCA9IDQyOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludF92YS5jCmluZGV4IDE1MGZkZGQuLmIwNGNmZDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYwpAQCAtMTMsOSArMTMsOSBAQAogc3RhdGljIHZvaWQgY2xzX3JldF9UX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKIAkJCSB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQogIHsKLSAgICooVCAqKXJlc3AgPSAqKFQgKilhcmdzWzBdOworICAgKihmZmlfYXJnICopcmVzcCA9ICooVCAqKWFyZ3NbMF07CiAKLSAgIHByaW50ZigiJWQ6ICVkICVkXG4iLCAqKFQgKilyZXNwLCAqKFQgKilhcmdzWzBdLCAqKFQgKilhcmdzWzFdKTsKKyAgIHByaW50ZigiJWQ6ICVkICVkXG4iLCAoaW50KSooZmZpX2FyZyAqKXJlc3AsICooVCAqKWFyZ3NbMF0sICooVCAqKWFyZ3NbMV0pOwogIH0KIAogdHlwZWRlZiBUICgqY2xzX3JldF9UKShULCAuLi4pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oCmluZGV4IDEzNmE3YTYuLjE1ZDVlNDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgKQEAgLTE1LDIyICsxNSwyNSBAQAogCiAjZGVmaW5lIE1BWF9BUkdTIDI1NgogCi0jZGVmaW5lIENIRUNLKHgpICEoeCkgPyAoYWJvcnQoKSwgMSkgOiAwCisjZGVmaW5lIENIRUNLKHgpICh2b2lkKSghKHgpID8gKGFib3J0KCksIDEpIDogMCkKIAotLyogRGVmaW5lIF9fVU5VU0VEX18gdGhhdCBhbHNvIG90aGVyIGNvbXBpbGVycyB0aGFuIGdjYyBjYW4gcnVuIHRoZSB0ZXN0cy4gICovCisvKiBEZWZpbmUgbWFjcm9zIHNvIHRoYXQgY29tcGlsZXJzIG90aGVyIHRoYW4gZ2NjIGNhbiBydW4gdGhlIHRlc3RzLiAgKi8KICN1bmRlZiBfX1VOVVNFRF9fCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKICNkZWZpbmUgX19VTlVTRURfXyBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKyNkZWZpbmUgX19TVERDQUxMX18gX19hdHRyaWJ1dGVfXygoc3RkY2FsbCkpCisjZGVmaW5lIF9fVEhJU0NBTExfXyBfX2F0dHJpYnV0ZV9fKCh0aGlzY2FsbCkpCisjZGVmaW5lIF9fRkFTVENBTExfXyBfX2F0dHJpYnV0ZV9fKChmYXN0Y2FsbCkpCiAjZWxzZQogI2RlZmluZSBfX1VOVVNFRF9fCisjZGVmaW5lIF9fU1REQ0FMTF9fIF9fc3RkY2FsbAorI2RlZmluZSBfX1RISVNDQUxMX18gX190aGlzY2FsbAorI2RlZmluZSBfX0ZBU1RDQUxMX18gX19mYXN0Y2FsbAogI2VuZGlmCiAKLS8qIERlZmluZSBfX0ZBU1RDQUxMX18gc28gdGhhdCBvdGhlciBjb21waWxlcnMgdGhhbiBnY2MgY2FuIHJ1biB0aGUgdGVzdHMuICAqLwotI3VuZGVmIF9fRkFTVENBTExfXwotI2lmIGRlZmluZWQgX01TQ19WRVIKLSNkZWZpbmUgX19GQVNUQ0FMTF9fIF9fZmFzdGNhbGwKLSNlbHNlCi0jZGVmaW5lIF9fRkFTVENBTExfXyBfX2F0dHJpYnV0ZV9fKChmYXN0Y2FsbCkpCisjaWZuZGVmIEFCSV9OVU0KKyNkZWZpbmUgQUJJX05VTSBGRklfREVGQVVMVF9BQkkKKyNkZWZpbmUgQUJJX0FUVFIKICNlbmRpZgogCiAvKiBQcmVmZXIgTUFQX0FOT04oWU1PVVMpIHRvIC9kZXYvemVybywgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYwppbmRleCA0ODY5YmE5Li4zMzY5NjhjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jCkBAIC03LDIxICs3LDExIEBACiAvKiB7IGRnLWRvIHJ1biB9ICovCiAjaW5jbHVkZSAiZmZpdGVzdC5oIgogCisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAKLXN0YXRpYyBmbG9hdCBtYW55KGZsb2F0IGYxLAotCQkgIGZsb2F0IGYyLAotCQkgIGZsb2F0IGYzLAotCQkgIGZsb2F0IGY0LAotCQkgIGZsb2F0IGY1LAotCQkgIGZsb2F0IGY2LAotCQkgIGZsb2F0IGY3LAotCQkgIGZsb2F0IGY4LAotCQkgIGZsb2F0IGY5LAotCQkgIGZsb2F0IGYxMCwKLQkJICBmbG9hdCBmMTEsCi0JCSAgZmxvYXQgZjEyLAotCQkgIGZsb2F0IGYxMykKK3N0YXRpYyBmbG9hdCBBQklfQVRUUiBtYW55KGZsb2F0IGYxLCBmbG9hdCBmMiwgZmxvYXQgZjMsIGZsb2F0IGY0LCBmbG9hdCBmNSwgZmxvYXQgZjYsIGZsb2F0IGY3LCBmbG9hdCBmOCwgZmxvYXQgZjksIGZsb2F0IGYxMCwgZmxvYXQgZjExLCBmbG9hdCBmMTIsIGZsb2F0IGYxMykKIHsKICNpZiAwCiAgIHByaW50ZigiJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWZcbiIsCkBAIC0zMCw3ICsyMCw3IEBACiAJIChkb3VibGUpIGYxMSwgKGRvdWJsZSkgZjEyLCAoZG91YmxlKSBmMTMpOwogI2VuZGlmCiAKLSAgcmV0dXJuICgoZjEvZjIrZjMvZjQrZjUvZjYrZjcvZjgrZjkvZjEwK2YxMS9mMTIpICogZjEzKTsKKyAgcmV0dXJuIGYxK2YyK2YzK2Y0K2Y1K2Y2K2Y3K2Y4K2Y5K2YxMCtmMTErZjEyK2YxMzsKIH0KIAogaW50IG1haW4gKHZvaWQpCkBAIC01MCw3ICs0MCw3IEBACiAgICAgfQogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gICAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTMsIAorICAgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxMywKIAkJICAgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKIAogICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihtYW55KSwgJmYsIHZhbHVlcyk7CkBAIC02Miw3ICs1Miw3IEBACiAJICAgICAgIGZhWzhdLCBmYVs5XSwKIAkgICAgICAgZmFbMTBdLGZhWzExXSxmYVsxMl0pOwogCi0gICAgaWYgKGYgLSBmZiA8IEZMVF9FUFNJTE9OKQorICAgIGlmIChmYWJzKGYgLSBmZikgPCBGTFRfRVBTSUxPTikKICAgICAgIGV4aXQoMCk7CiAgICAgZWxzZQogICAgICAgYWJvcnQoKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Mi5jCmluZGV4IDk4ZWFjNjAuLjFjODU3NDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTIuYwpAQCAtMjIsNyArMjIsNyBAQAogICByZXR1cm4gYSArIGIgKyBjICsgZCArIGUgKyBmICsgZzsKIH0KIAotdWludDhfdAordWludDhfdCBBQklfQVRUUgogYmFyICh1aW50OF90IGEsIHVpbnQ4X3QgYiwgdWludDhfdCBjLCB1aW50OF90IGQsCiAgICAgIHVpbnQ4X3QgZSwgdWludDhfdCBmLCB1aW50OF90IGcpCiB7CkBAIC00Miw3ICs0Miw3IEBACiAgIGZvciAoaSA9IDA7IGkgPCBOQVJHUzsgKytpKQogICAgIGZmaXR5cGVzW2ldID0gJmZmaV90eXBlX3VpbnQ4OwogCi0gIENIRUNLIChmZmlfcHJlcF9jaWYgKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgTkFSR1MsCisgIENIRUNLIChmZmlfcHJlcF9jaWYgKCZjaWYsIEFCSV9OVU0sIE5BUkdTLAogCQkgICAgICAgJmZmaV90eXBlX3VpbnQ4LCBmZml0eXBlcykgPT0gRkZJX09LKTsKIAogICBmb3IgKGkgPSAwOyBpIDwgTkFSR1M7ICsraSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Ml93aW4zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWRiZTRkLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyX3dpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgc3RkY2FsbCBtYW55IGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCi0gICBMaW1pdGF0aW9uczoJbm9uZS4KLSAgIFBSOgkJbm9uZS4KLSAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KLQotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KLQotI2luY2x1ZGUgImZmaXRlc3QuaCIKLSNpbmNsdWRlIDxmbG9hdC5oPgotCi1zdGF0aWMgZmxvYXQgX19hdHRyaWJ1dGVfXygoZmFzdGNhbGwpKSBmYXN0Y2FsbF9tYW55KGZsb2F0IGYxLAotCQkJCQkJICAgZmxvYXQgZjIsCi0JCQkJCQkgICBmbG9hdCBmMywKLQkJCQkJCSAgIGZsb2F0IGY0LAotCQkJCQkJICAgZmxvYXQgZjUsCi0JCQkJCQkgICBmbG9hdCBmNiwKLQkJCQkJCSAgIGZsb2F0IGY3LAotCQkJCQkJICAgZmxvYXQgZjgsCi0JCQkJCQkgICBmbG9hdCBmOSwKLQkJCQkJCSAgIGZsb2F0IGYxMCwKLQkJCQkJCSAgIGZsb2F0IGYxMSwKLQkJCQkJCSAgIGZsb2F0IGYxMiwKLQkJCQkJCSAgIGZsb2F0IGYxMykKLXsKLSAgcmV0dXJuICgoZjEvZjIrZjMvZjQrZjUvZjYrZjcvZjgrZjkvZjEwK2YxMS9mMTIpICogZjEzKTsKLX0KLQotaW50IG1haW4gKHZvaWQpCi17Ci0gIGZmaV9jaWYgY2lmOwotICBmZmlfdHlwZSAqYXJnc1sxM107Ci0gIHZvaWQgKnZhbHVlc1sxM107Ci0gIGZsb2F0IGZhWzEzXTsKLSAgZmxvYXQgZiwgZmY7Ci0gIHVuc2lnbmVkIGxvbmcgdWw7Ci0KLSAgZm9yICh1bCA9IDA7IHVsIDwgMTM7IHVsKyspCi0gICAgewotICAgICAgYXJnc1t1bF0gPSAmZmZpX3R5cGVfZmxvYXQ7Ci0gICAgICB2YWx1ZXNbdWxdID0gJmZhW3VsXTsKLQlmYVt1bF0gPSAoZmxvYXQpIHVsOwotICAgIH0KLQotICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9GQVNUQ0FMTCwgMTMsCi0JCSAgICAgJmZmaV90eXBlX2Zsb2F0LCBhcmdzKSA9PSBGRklfT0spOwotCi0gIGZmID0gIGZhc3RjYWxsX21hbnkoZmFbMF0sIGZhWzFdLAotCQkgICAgIGZhWzJdLCBmYVszXSwKLQkJICAgICBmYVs0XSwgZmFbNV0sCi0JCSAgICAgZmFbNl0sIGZhWzddLAotCQkgICAgIGZhWzhdLCBmYVs5XSwKLQkJICAgICBmYVsxMF0sIGZhWzExXSwgZmFbMTJdKTsKLQotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oZmFzdGNhbGxfbWFueSksICZmLCB2YWx1ZXMpOwotCi0gIGlmIChmIC0gZmYgPCBGTFRfRVBTSUxPTikKLSAgICBwcmludGYoImZhc3RjYWxsIG1hbnkgYXJnIHRlc3RzIG9rIVxuIik7Ci0gIGVsc2UKLSAgICBDSEVDSygwKTsKLSAgZXhpdCgwKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyNjMzMi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgc3RkY2FsbCBtYW55IGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCi0gICBMaW1pdGF0aW9uczoJbm9uZS4KLSAgIFBSOgkJbm9uZS4KLSAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KLQotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KLQotI2luY2x1ZGUgImZmaXRlc3QuaCIKLSNpbmNsdWRlIDxmbG9hdC5oPgotCi1zdGF0aWMgZmxvYXQgX19hdHRyaWJ1dGVfXygoc3RkY2FsbCkpIHN0ZGNhbGxfbWFueShmbG9hdCBmMSwKLQkJCQkJCSAgIGZsb2F0IGYyLAotCQkJCQkJICAgZmxvYXQgZjMsCi0JCQkJCQkgICBmbG9hdCBmNCwKLQkJCQkJCSAgIGZsb2F0IGY1LAotCQkJCQkJICAgZmxvYXQgZjYsCi0JCQkJCQkgICBmbG9hdCBmNywKLQkJCQkJCSAgIGZsb2F0IGY4LAotCQkJCQkJICAgZmxvYXQgZjksCi0JCQkJCQkgICBmbG9hdCBmMTAsCi0JCQkJCQkgICBmbG9hdCBmMTEsCi0JCQkJCQkgICBmbG9hdCBmMTIsCi0JCQkJCQkgICBmbG9hdCBmMTMpCi17Ci0gIHJldHVybiAoKGYxL2YyK2YzL2Y0K2Y1L2Y2K2Y3L2Y4K2Y5L2YxMCtmMTEvZjEyKSAqIGYxMyk7Ci19Ci0KLWludCBtYWluICh2b2lkKQotewotICBmZmlfY2lmIGNpZjsKLSAgZmZpX3R5cGUgKmFyZ3NbMTNdOwotICB2b2lkICp2YWx1ZXNbMTNdOwotICBmbG9hdCBmYVsxM107Ci0gIGZsb2F0IGYsIGZmOwotICB1bnNpZ25lZCBsb25nIHVsOwotCi0gIGZvciAodWwgPSAwOyB1bCA8IDEzOyB1bCsrKQotICAgIHsKLSAgICAgIGFyZ3NbdWxdID0gJmZmaV90eXBlX2Zsb2F0OwotICAgICAgdmFsdWVzW3VsXSA9ICZmYVt1bF07Ci0JZmFbdWxdID0gKGZsb2F0KSB1bDsKLSAgICB9Ci0KLSAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfU1REQ0FMTCwgMTMsCi0JCSAgICAgJmZmaV90eXBlX2Zsb2F0LCBhcmdzKSA9PSBGRklfT0spOwotCi0gIGZmID0gIHN0ZGNhbGxfbWFueShmYVswXSwgZmFbMV0sCi0JCSAgICAgZmFbMl0sIGZhWzNdLAotCQkgICAgIGZhWzRdLCBmYVs1XSwKLQkJICAgICBmYVs2XSwgZmFbN10sCi0JCSAgICAgZmFbOF0sIGZhWzldLAotCQkgICAgIGZhWzEwXSwgZmFbMTFdLCBmYVsxMl0pOwotCi0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdGRjYWxsX21hbnkpLCAmZiwgdmFsdWVzKTsKLQotICBpZiAoZiAtIGZmIDwgRkxUX0VQU0lMT04pCi0gICAgcHJpbnRmKCJzdGRjYWxsIG1hbnkgYXJnIHRlc3RzIG9rIVxuIik7Ci0gIGVsc2UKLSAgICBDSEVDSygwKTsKLSAgZXhpdCgwKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmMKaW5kZXggZmNlNjk0OC4uMzUxMDQ5MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmMKQEAgLTEsNyArMSw3IEBACiAvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCiAgICBQdXJwb3NlOglDaGVjayBwYXJhbWV0ZXIgcGFzc2luZyB3aXRoIG5lc3RlZCBzdHJ1Y3RzCiAJCW9mIGEgc2luZ2xlIHR5cGUuICBUaGlzIHRlc3RzIHRoZSBzcGVjaWFsIGNhc2VzCi0JCWZvciBob21vZ2Vub3VzIGZsb2F0aW5nLXBvaW50IGFnZ3JlZ2F0ZXMgaW4gdGhlCisJCWZvciBob21vZ2VuZW91cyBmbG9hdGluZy1wb2ludCBhZ2dyZWdhdGVzIGluIHRoZQogCQlBQXJjaDY0IFBDUy4KICAgIExpbWl0YXRpb25zOglub25lLgogICAgUFI6CQlub25lLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYwppbmRleCAzZGU0NWRlLi4zNWI3MGVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYwpAQCAtNyw3ICs3LDcgQEAKIC8qIHsgZGctZG8gcnVuIH0gKi8KICNpbmNsdWRlICJmZml0ZXN0LmgiCiAKLXN0YXRpYyBzaXplX3QgbXlfc3RybGVuKGNoYXIgKnMpCitzdGF0aWMgc2l6ZV90IEFCSV9BVFRSIG15X3N0cmxlbihjaGFyICpzKQogewogICByZXR1cm4gKHN0cmxlbihzKSk7CiB9CkBAIC0yNCw3ICsyNCw3IEBACiAgIHZhbHVlc1swXSA9ICh2b2lkKikgJnM7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLAogCQkgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgcyA9ICJhIjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMi5jCnNpbWlsYXJpdHkgaW5kZXggNjAlCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jCnJlbmFtZSB0byBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yLmMKaW5kZXggY2JjNDcyNC4uOTYyODJiYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMi5jCkBAIC0xLDE0ICsxLDE0IEBACiAvKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgZmFzdGNhbGwgZmN0IGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCisgICBQdXJwb3NlOglDaGVjayBzdHJsZW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzLgogICAgTGltaXRhdGlvbnM6CW5vbmUuCiAgICBQUjoJCW5vbmUuCiAgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCiAKLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCisvKiB7IGRnLWRvIHJ1biB9ICovCiAKICNpbmNsdWRlICJmZml0ZXN0LmgiCiAKLXN0YXRpYyBzaXplX3QgX19GQVNUQ0FMTF9fIG15X2Zhc3RjYWxsX2YoY2hhciAqcywgZmxvYXQgYSkKK3N0YXRpYyBzaXplX3QgQUJJX0FUVFIgbXlfZihjaGFyICpzLCBmbG9hdCBhKQogewogICByZXR1cm4gKHNpemVfdCkgKChpbnQpIHN0cmxlbihzKSArIChpbnQpIGEpOwogfQpAQCAtMjcsMjQgKzI3LDIzIEBACiAgIHZhbHVlc1sxXSA9ICh2b2lkKikgJnYyOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfRkFTVENBTEwsIDIsCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAyLAogCQkgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICBzID0gImEiOwogICB2MiA9IDAuMDsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSAxKTsKICAgCiAgIHMgPSAiMTIzNDU2NyI7CiAgIHYyID0gLTEuMDsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSA2KTsKICAgCiAgIHMgPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSI7CiAgIHYyID0gMS4wOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDI2KTsKICAgCi0gIHByaW50ZigiZmFzdGNhbGwgZmN0MSB0ZXN0cyBwYXNzZWRcbiIpOwogICBleGl0KDApOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDgxMDYxLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBmYXN0Y2FsbCBzdHJsZW4gY2FsbCBvbiBYODZfV0lOMzIgc3lzdGVtcy4KLSAgIExpbWl0YXRpb25zOglub25lLgotICAgUFI6CQlub25lLgotICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwotCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLwotCi0jaW5jbHVkZSAiZmZpdGVzdC5oIgotCi1zdGF0aWMgc2l6ZV90IF9fRkFTVENBTExfXyBteV9mYXN0Y2FsbF9zdHJsZW4oY2hhciAqcykKLXsKLSAgcmV0dXJuIChzdHJsZW4ocykpOwotfQotCi1pbnQgbWFpbiAodm9pZCkKLXsKLSAgZmZpX2NpZiBjaWY7Ci0gIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKLSAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKLSAgZmZpX2FyZyByaW50OwotICBjaGFyICpzOwotICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7Ci0gIHZhbHVlc1swXSA9ICh2b2lkKikgJnM7Ci0gIAotICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9GQVNUQ0FMTCwgMSwKLQkJICAgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOwotICAKLSAgcyA9ICJhIjsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOwotICBDSEVDSyhyaW50ID09IDEpOwotICAKLSAgcyA9ICIxMjM0NTY3IjsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOwotICBDSEVDSyhyaW50ID09IDcpOwotICAKLSAgcyA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1IjsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOwotICBDSEVDSyhyaW50ID09IDI1KTsKLSAgCi0gIHByaW50ZigiZmFzdGNhbGwgc3RybGVuIHRlc3RzIHBhc3NlZFxuIik7Ci0gIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjMuYwpzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYwpyZW5hbWUgdG8gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMy5jCmluZGV4IDdiZGQwZTEuLmJlYmE4NmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjMuYwpAQCAtMSwxNCArMSwxNCBAQAogLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIGZhc3RjYWxsIGZjdCBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgorICAgUHVycG9zZToJQ2hlY2sgc3RybGVuIGZ1bmN0aW9uIGNhbGwgd2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KICAgIExpbWl0YXRpb25zOglub25lLgogICAgUFI6CQlub25lLgogICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwogCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLworLyogeyBkZy1kbyBydW4gfSAqLwogCiAjaW5jbHVkZSAiZmZpdGVzdC5oIgogCi1zdGF0aWMgc2l6ZV90IF9fRkFTVENBTExfXyBteV9mYXN0Y2FsbF9mKGZsb2F0IGEsIGNoYXIgKnMpCitzdGF0aWMgc2l6ZV90IEFCSV9BVFRSIG15X2YoZmxvYXQgYSwgY2hhciAqcykKIHsKICAgcmV0dXJuIChzaXplX3QpICgoaW50KSBzdHJsZW4ocykgKyAoaW50KSBhKTsKIH0KQEAgLTI3LDI0ICsyNywyMyBAQAogICB2YWx1ZXNbMF0gPSAodm9pZCopICZ2MjsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0ZBU1RDQUxMLCAyLAorICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMiwKIAkJICAgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgcyA9ICJhIjsKICAgdjIgPSAwLjA7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gMSk7CiAgIAogICBzID0gIjEyMzQ1NjciOwogICB2MiA9IC0xLjA7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gNik7CiAgIAogICBzID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiOwogICB2MiA9IDEuMDsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSAyNik7CiAgIAotICBwcmludGYoImZhc3RjYWxsIGZjdDIgdGVzdHMgcGFzc2VkXG4iKTsKICAgZXhpdCgwKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuNC5jCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jCnJlbmFtZSB0byBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW40LmMKaW5kZXggYjVkNjA2ZC4uZDVkNDJiNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuNC5jCkBAIC0xLDE0ICsxLDE0IEBACiAvKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgZmFzdGNhbGwgZiBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgorICAgUHVycG9zZToJQ2hlY2sgc3RybGVuIGZ1bmN0aW9uIGNhbGwgd2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KICAgIExpbWl0YXRpb25zOglub25lLgogICAgUFI6CQlub25lLgogICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwogCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLworLyogeyBkZy1kbyBydW4gfSAqLwogCiAjaW5jbHVkZSAiZmZpdGVzdC5oIgogCi1zdGF0aWMgc2l6ZV90IF9fRkFTVENBTExfXyBteV9mYXN0Y2FsbF9mKGZsb2F0IGEsIGNoYXIgKnMsIGludCBpKQorc3RhdGljIHNpemVfdCBBQklfQVRUUiBteV9mKGZsb2F0IGEsIGNoYXIgKnMsIGludCBpKQogewogICByZXR1cm4gKHNpemVfdCkgKChpbnQpIHN0cmxlbihzKSArIChpbnQpIGEgKyBpKTsKIH0KQEAgLTMwLDI3ICszMCwyNiBAQAogICB2YWx1ZXNbMF0gPSAodm9pZCopICZ2MjsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0ZBU1RDQUxMLCAzLAorICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMywKIAkJICAgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgcyA9ICJhIjsKICAgdjEgPSAxOwogICB2MiA9IDAuMDsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSAyKTsKICAgCiAgIHMgPSAiMTIzNDU2NyI7CiAgIHYyID0gLTEuMDsKICAgdjEgPSAtMjsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSA0KTsKICAgCiAgIHMgPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSI7CiAgIHYyID0gMS4wOwogICB2MSA9IDI7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gMjgpOwogICAKLSAgcHJpbnRmKCJmYXN0Y2FsbCBmY3QzIHRlc3RzIHBhc3NlZFxuIik7CiAgIGV4aXQoMCk7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmJjYzg3Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIHN0ZGNhbGwgc3RybGVuIGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCi0gICBMaW1pdGF0aW9uczoJbm9uZS4KLSAgIFBSOgkJbm9uZS4KLSAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KLQotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KLQotI2luY2x1ZGUgImZmaXRlc3QuaCIKLQotc3RhdGljIHNpemVfdCBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkgbXlfc3RkY2FsbF9zdHJsZW4oY2hhciAqcykKLXsKLSAgcmV0dXJuIChzdHJsZW4ocykpOwotfQotCi1pbnQgbWFpbiAodm9pZCkKLXsKLSAgZmZpX2NpZiBjaWY7Ci0gIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKLSAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKLSAgZmZpX2FyZyByaW50OwotICBjaGFyICpzOwotICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7Ci0gIHZhbHVlc1swXSA9ICh2b2lkKikgJnM7Ci0gIAotICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9TVERDQUxMLCAxLAotCQkgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7Ci0gIAotICBzID0gImEiOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RkY2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKLSAgQ0hFQ0socmludCA9PSAxKTsKLSAgCi0gIHMgPSAiMTIzNDU2NyI7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdGRjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOwotICBDSEVDSyhyaW50ID09IDcpOwotICAKLSAgcyA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1IjsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X3N0ZGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7Ci0gIENIRUNLKHJpbnQgPT0gMjUpOwotICAKLSAgcHJpbnRmKCJzdGRjYWxsIHN0cmxlbiB0ZXN0cyBwYXNzZWRcbiIpOwotICBleGl0KDApOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jCmluZGV4IGJmYzIzZjYuLmMxM2UyM2YgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAgdW5zaWduZWQgaW50IHVpOwogfSB0ZXN0X3N0cnVjdHVyZV8xOwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMSBzdHJ1Y3QxKHRlc3Rfc3RydWN0dXJlXzEgdHMpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMSBBQklfQVRUUiBzdHJ1Y3QxKHRlc3Rfc3RydWN0dXJlXzEgdHMpCiB7CiAgIHRzLnVjKys7CiAgIHRzLmQtLTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgdmFsdWVzWzBdID0gJnRzMV9hcmc7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLAogCQkgICAgICZ0czFfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzMV9hcmcudWMgPSAnXHgwMSc7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NTZmNWEuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMgd2l0aCBmYXN0Y2FsbC90aGlzY2FsbCBjb252ZW50aW9uLgotICAgTGltaXRhdGlvbnM6CW5vbmUuCi0gICBQUjoJCW5vbmUuCi0gICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCi0KLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCi0jaW5jbHVkZSAiZmZpdGVzdC5oIgotCi10eXBlZGVmIHN0cnVjdAotewotICB1bnNpZ25lZCBjaGFyIHVjOwotICBkb3VibGUgZDsKLSAgdW5zaWduZWQgaW50IHVpOwotfSB0ZXN0X3N0cnVjdHVyZV8xOwotCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMSBfX0ZBU1RDQUxMX18gc3RydWN0MSh0ZXN0X3N0cnVjdHVyZV8xIHRzKQotewotICB0cy51YysrOwotICB0cy5kLS07Ci0gIHRzLnVpKys7Ci0KLSAgcmV0dXJuIHRzOwotfQotCi1pbnQgbWFpbiAodm9pZCkKLXsKLSAgZmZpX2NpZiBjaWY7Ci0gIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKLSAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKLSAgZmZpX3R5cGUgdHMxX3R5cGU7Ci0gIGZmaV90eXBlICp0czFfdHlwZV9lbGVtZW50c1s0XTsKLQotICB0ZXN0X3N0cnVjdHVyZV8xIHRzMV9hcmc7Ci0KLSAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCi0gIHRlc3Rfc3RydWN0dXJlXzEgKnRzMV9yZXN1bHQgPQotICAgICh0ZXN0X3N0cnVjdHVyZV8xICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzEpKTsKLQotICB0czFfdHlwZS5zaXplID0gMDsKLSAgdHMxX3R5cGUuYWxpZ25tZW50ID0gMDsKLSAgdHMxX3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKLSAgdHMxX3R5cGUuZWxlbWVudHMgPSB0czFfdHlwZV9lbGVtZW50czsKLSAgdHMxX3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7Ci0gIHRzMV90eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKLSAgdHMxX3R5cGVfZWxlbWVudHNbMl0gPSAmZmZpX3R5cGVfdWludDsKLSAgdHMxX3R5cGVfZWxlbWVudHNbM10gPSBOVUxMOwotICAKLSAgYXJnc1swXSA9ICZ0czFfdHlwZTsKLSAgdmFsdWVzWzBdID0gJnRzMV9hcmc7Ci0gIAotICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9GQVNUQ0FMTCwgMSwgCi0JCSAgICAgJnRzMV90eXBlLCBhcmdzKSA9PSBGRklfT0spOwotICAKLSAgdHMxX2FyZy51YyA9ICdceDAxJzsKLSAgdHMxX2FyZy5kID0gMy4xNDE1OTsKLSAgdHMxX2FyZy51aSA9IDU1NTsKLQotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RydWN0MSksIHRzMV9yZXN1bHQsIHZhbHVlcyk7Ci0gIAotICBDSEVDSyh0czFfcmVzdWx0LT51aSA9PSA1NTYpOwotICBDSEVDSyh0czFfcmVzdWx0LT5kID09IDMuMTQxNTkgLSAxKTsKLSAKLSAgZnJlZSAodHMxX3Jlc3VsdCk7Ci0gIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmMKaW5kZXggZDg1Mzg1ZS4uNTA3N2E1ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYwpAQCAtMTMsNyArMTMsNyBAQAogICBkb3VibGUgZDI7CiB9IHRlc3Rfc3RydWN0dXJlXzI7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV8yIHN0cnVjdDIodGVzdF9zdHJ1Y3R1cmVfMiB0cykKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV8yIEFCSV9BVFRSIHN0cnVjdDIodGVzdF9zdHJ1Y3R1cmVfMiB0cykKIHsKICAgdHMuZDEtLTsKICAgdHMuZDItLTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgdmFsdWVzWzBdID0gJnRzMl9hcmc7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzMl90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwgJnRzMl90eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHMyX2FyZy5kMSA9IDUuNTU7CiAgIHRzMl9hcmcuZDIgPSA2LjY2OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDAyMjg1Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzIGluIGZhc3RjYWxsL3N0ZGNhbGwgZnVuY3Rpb24KLSAgIExpbWl0YXRpb25zOglub25lLgotICAgUFI6CQlub25lLgotICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwotCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLwotI2luY2x1ZGUgImZmaXRlc3QuaCIKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZG91YmxlIGQxOwotICBkb3VibGUgZDI7Ci19IHRlc3Rfc3RydWN0dXJlXzI7Ci0KLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV8yIF9fRkFTVENBTExfXyBzdHJ1Y3QyKHRlc3Rfc3RydWN0dXJlXzIgdHMpCi17Ci0gIHRzLmQxLS07Ci0gIHRzLmQyLS07Ci0KLSAgcmV0dXJuIHRzOwotfQotCi1pbnQgbWFpbiAodm9pZCkKLXsKLSAgZmZpX2NpZiBjaWY7Ci0gIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKLSAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKLSAgdGVzdF9zdHJ1Y3R1cmVfMiB0czJfYXJnOwotICBmZmlfdHlwZSB0czJfdHlwZTsKLSAgZmZpX3R5cGUgKnRzMl90eXBlX2VsZW1lbnRzWzNdOwotCi0gIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCBhIHByb3Blcmx5IGFsaWduZWQgcmVzdWx0IGJ1ZmZlciAqLwotICB0ZXN0X3N0cnVjdHVyZV8yICp0czJfcmVzdWx0ID0KLSAgICAodGVzdF9zdHJ1Y3R1cmVfMiAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV8yKSk7Ci0KLSAgdHMyX3R5cGUuc2l6ZSA9IDA7Ci0gIHRzMl90eXBlLmFsaWdubWVudCA9IDA7Ci0gIHRzMl90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7Ci0gIHRzMl90eXBlLmVsZW1lbnRzID0gdHMyX3R5cGVfZWxlbWVudHM7Ci0gIHRzMl90eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKLSAgdHMyX3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOwotICB0czJfdHlwZV9lbGVtZW50c1syXSA9IE5VTEw7Ci0KLSAgYXJnc1swXSA9ICZ0czJfdHlwZTsKLSAgdmFsdWVzWzBdID0gJnRzMl9hcmc7Ci0gIAotICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9GQVNUQ0FMTCwgMSwgJnRzMl90eXBlLCBhcmdzKSA9PSBGRklfT0spOwotICAKLSAgdHMyX2FyZy5kMSA9IDUuNTU7Ci0gIHRzMl9hcmcuZDIgPSA2LjY2OwotICAKLSAgcHJpbnRmICgiJWdcbiIsIHRzMl9hcmcuZDEpOwotICBwcmludGYgKCIlZ1xuIiwgdHMyX2FyZy5kMik7Ci0gIAotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RydWN0MiksIHRzMl9yZXN1bHQsIHZhbHVlcyk7Ci0gIAotICBwcmludGYgKCIlZ1xuIiwgdHMyX3Jlc3VsdC0+ZDEpOwotICBwcmludGYgKCIlZ1xuIiwgdHMyX3Jlc3VsdC0+ZDIpOwotICAKLSAgQ0hFQ0sodHMyX3Jlc3VsdC0+ZDEgPT0gNS41NSAtIDEpOwotICBDSEVDSyh0czJfcmVzdWx0LT5kMiA9PSA2LjY2IC0gMSk7Ci0gIAotICBmcmVlICh0czJfcmVzdWx0KTsKLSAgZXhpdCgwKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYwppbmRleCBkZTg4M2MyLi43ZWJhMGVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jCkBAIC0xMiw3ICsxMiw3IEBACiAgIGludCBzaTsKIH0gdGVzdF9zdHJ1Y3R1cmVfMzsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzMgc3RydWN0Myh0ZXN0X3N0cnVjdHVyZV8zIHRzKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzMgQUJJX0FUVFIgc3RydWN0Myh0ZXN0X3N0cnVjdHVyZV8zIHRzKQogewogICB0cy5zaSA9IC0odHMuc2kqMik7CiAKQEAgLTQzLDcgKzQzLDcgQEAKICAgdmFsdWVzWzBdID0gJnRzM19hcmc7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLAogCQkgICAgICZ0czNfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzM19hcmcuc2kgPSAtMTIzOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jCmluZGV4IDQ4ZTAzNDkuLjY2YTk1NTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmMKQEAgLTE0LDcgKzE0LDcgQEAKICAgdW5zaWduZWQgdWkzOwogfSB0ZXN0X3N0cnVjdHVyZV80OwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNCBzdHJ1Y3Q0KHRlc3Rfc3RydWN0dXJlXzQgdHMpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNCBBQklfQVRUUiBzdHJ1Y3Q0KHRlc3Rfc3RydWN0dXJlXzQgdHMpCiB7CiAgIHRzLnVpMyA9IHRzLnVpMSAqIHRzLnVpMiAqIHRzLnVpMzsKIApAQCAtNDgsNyArNDgsNyBAQAogICB2YWx1ZXNbMF0gPSAmdHM0X2FyZzsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHM0X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLCAmdHM0X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czRfYXJnLnVpMSA9IDI7CiAgIHRzNF9hcmcudWkyID0gMzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYwppbmRleCAyOGIxZjBjLi4yM2UyYTNmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jCkBAIC0xMiw3ICsxMiw3IEBACiAgIGNoYXIgYzI7CiB9IHRlc3Rfc3RydWN0dXJlXzU7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV81IHN0cnVjdDUodGVzdF9zdHJ1Y3R1cmVfNSB0czEsIHRlc3Rfc3RydWN0dXJlXzUgdHMyKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzUgQUJJX0FUVFIgc3RydWN0NSh0ZXN0X3N0cnVjdHVyZV81IHRzMSwgdGVzdF9zdHJ1Y3R1cmVfNSB0czIpCiB7CiAgIHRzMS5jMSArPSB0czIuYzE7CiAgIHRzMS5jMiAtPSB0czIuYzI7CkBAIC00OCw3ICs0OCw3IEBACiAgIHZhbHVlc1sxXSA9ICZ0czVfYXJnMjsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmdHM1X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAyLCAmdHM1X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czVfYXJnMS5jMSA9IDI7CiAgIHRzNV9hcmcxLmMyID0gNjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYwppbmRleCAwZTI2NzQ2Li4xNzNjNjZlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jCkBAIC0xMiw3ICsxMiw3IEBACiAgIGRvdWJsZSBkOwogfSB0ZXN0X3N0cnVjdHVyZV82OwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNiBzdHJ1Y3Q2ICh0ZXN0X3N0cnVjdHVyZV82IHRzKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzYgQUJJX0FUVFIgc3RydWN0NiAodGVzdF9zdHJ1Y3R1cmVfNiB0cykKIHsKICAgdHMuZiArPSAxOwogICB0cy5kICs9IDE7CkBAIC00Niw3ICs0Niw3IEBACiAgIHZhbHVlc1swXSA9ICZ0czZfYXJnOwogCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHM2X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLCAmdHM2X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czZfYXJnLmYgPSA1LjU1ZjsKICAgdHM2X2FyZy5kID0gNi42NjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYwppbmRleCA4ZjJiYmZkLi5iYWRjN2UwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jCkBAIC0xMyw3ICsxMyw3IEBACiAgIGRvdWJsZSBkOwogfSB0ZXN0X3N0cnVjdHVyZV83OwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNyBzdHJ1Y3Q3ICh0ZXN0X3N0cnVjdHVyZV83IHRzKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzcgQUJJX0FUVFIgc3RydWN0NyAodGVzdF9zdHJ1Y3R1cmVfNyB0cykKIHsKICAgdHMuZjEgKz0gMTsKICAgdHMuZjIgKz0gMTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgdmFsdWVzWzBdID0gJnRzN19hcmc7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzN190eXBlLCBhcmdzKSA9PSBGRklfT0spOworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwgJnRzN190eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHM3X2FyZy5mMSA9IDUuNTVmOwogICB0czdfYXJnLmYyID0gNTUuNWY7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmMKaW5kZXggMjY2ZTFmMC4uZWYyMDRlYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYwpAQCAtMTQsNyArMTQsNyBAQAogICBmbG9hdCBmNDsKIH0gdGVzdF9zdHJ1Y3R1cmVfODsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzggc3RydWN0OCAodGVzdF9zdHJ1Y3R1cmVfOCB0cykKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV84IEFCSV9BVFRSIHN0cnVjdDggKHRlc3Rfc3RydWN0dXJlXzggdHMpCiB7CiAgIHRzLmYxICs9IDE7CiAgIHRzLmYyICs9IDE7CkBAIC01Miw3ICs1Miw3IEBACiAgIHZhbHVlc1swXSA9ICZ0czhfYXJnOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czhfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsICZ0czhfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzOF9hcmcuZjEgPSA1LjU1ZjsKICAgdHM4X2FyZy5mMiA9IDU1LjVmOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jCmluZGV4IGVmZWI3MTYuLjRhMTNiODEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgaW50IGk7CiB9IHRlc3Rfc3RydWN0dXJlXzk7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV85IHN0cnVjdDkgKHRlc3Rfc3RydWN0dXJlXzkgdHMpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfOSBBQklfQVRUUiBzdHJ1Y3Q5ICh0ZXN0X3N0cnVjdHVyZV85IHRzKQogewogICB0cy5mICs9IDE7CiAgIHRzLmkgKz0gMTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgdmFsdWVzWzBdID0gJnRzOV9hcmc7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzOV90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwgJnRzOV90eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHM5X2FyZy5mID0gNS41NWY7CiAgIHRzOV9hcmcuaSA9IDU7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdW53aW5kdGVzdC5jYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjCnJlbmFtZSB0byBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC91bndpbmR0ZXN0LmNjCmluZGV4IGE3OGY0ZTcuLjY3Y2ZlZmVjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Vud2luZHRlc3QuY2MKQEAgLTYsMTcgKzYsOSBAQAogCiAvKiB7IGRnLWRvIHJ1biB9ICovCiAKLSNpbmNsdWRlICJmZml0ZXN0Y3h4LmgiCisjaW5jbHVkZSAiZmZpdGVzdC5oIgogCi0jaWYgZGVmaW5lZCBIQVZFX1NURElOVF9ICi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19ICi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNlbmRpZgotCi12b2lkCit2b2lkIEFCSV9BVFRSCiBjbG9zdXJlX3Rlc3RfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AgX19VTlVTRURfXywKIAkJdm9pZCoqIGFyZ3MgX19VTlVTRURfXywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MKcmVuYW1lIHRvIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MKaW5kZXggNTcxOTFmMi4uZWM2MTE2NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCkBAIC02LDcgKzYsNyBAQAogCiAvKiB7IGRnLWRvIHJ1biB9ICovCiAKLSNpbmNsdWRlICJmZml0ZXN0Y3h4LmgiCisjaW5jbHVkZSAiZmZpdGVzdC5oIgogCiBzdGF0aWMgaW50IGNoZWNraW5nKGludCBhIF9fVU5VU0VEX18sIHNob3J0IGIgX19VTlVTRURfXywKIAkJICAgIHNpZ25lZCBjaGFyIGMgX19VTlVTRURfXykKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYwppbmRleCBjZjRkZDg1Li43Zjk2ODA5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jCkBAIC05NCw3ICs5NCw3IEBACiAgIHN0cnVjdCBsYXJnZV90YWcgbDE7CiAKICAgaW50IG47Ci0gIGludCByZXM7CisgIGZmaV9hcmcgcmVzOwogCiAgIHVuc2lnbmVkIGNoYXIgdWM7CiAgIHNpZ25lZCBjaGFyIHNjOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jCmluZGV4IDExZDFmMTAuLmU2NDUyMDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmMKQEAgLTYxLDcgKzYxLDcgQEAKICAgc3RydWN0IGxhcmdlX3RhZyBsMTsKIAogICBpbnQgbjsKLSAgaW50IHJlczsKKyAgZmZpX2FyZyByZXM7CiAKICAgc190eXBlLnNpemUgPSAwOwogICBzX3R5cGUuYWxpZ25tZW50ID0gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkYTdlZi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGZmaS5oPgotI2luY2x1ZGUgImZmaWNvbmZpZy5oIgotCi0jZGVmaW5lIE1BWF9BUkdTIDI1NgotCi0KLS8qIERlZmluZSBfX1VOVVNFRF9fIHRoYXQgYWxzbyBvdGhlciBjb21waWxlcnMgdGhhbiBnY2MgY2FuIHJ1biB0aGUgdGVzdHMuICAqLwotI3VuZGVmIF9fVU5VU0VEX18KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI2RlZmluZSBfX1VOVVNFRF9fIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQotI2Vsc2UKLSNkZWZpbmUgX19VTlVTRURfXwotI2VuZGlmCi0KLSNkZWZpbmUgQ0hFQ0soeCkgKCEoeCkgPyBhYm9ydCgpIDogKHZvaWQpMCkKLQotLyogUHJlZmVyIE1BUF9BTk9OKFlNT1VTKSB0byAvZGV2L3plcm8sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCBhCi0gICBmaWxlIG9wZW4uICAqLwotI2lmZGVmIEhBVkVfTU1BUF9BTk9OCi0jIHVuZGVmIEhBVkVfTU1BUF9ERVZfWkVSTwotCi0jIGluY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jIGlmbmRlZiBNQVBfRkFJTEVECi0jICBkZWZpbmUgTUFQX0ZBSUxFRCAtMQotIyBlbmRpZgotIyBpZiAhZGVmaW5lZCAoTUFQX0FOT05ZTU9VUykgJiYgZGVmaW5lZCAoTUFQX0FOT04pCi0jICBkZWZpbmUgTUFQX0FOT05ZTU9VUyBNQVBfQU5PTgotIyBlbmRpZgotIyBkZWZpbmUgVVNJTkdfTU1BUAotCi0jZW5kaWYKLQotI2lmZGVmIEhBVkVfTU1BUF9ERVZfWkVSTwotCi0jIGluY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jIGlmbmRlZiBNQVBfRkFJTEVECi0jICBkZWZpbmUgTUFQX0ZBSUxFRCAtMQotIyBlbmRpZgotIyBkZWZpbmUgVVNJTkdfTU1BUAotCi0jZW5kaWYKLQotCi0vKiBNaW5HVyBrbHVkZ2UuICAqLwotI2lmZGVmIF9XSU42NAotI2RlZmluZSBQUklkTEwgIkk2NGQiCi0jZGVmaW5lIFBSSXVMTCAiSTY0dSIKLSNlbHNlCi0jZGVmaW5lIFBSSWRMTCAibGxkIgotI2RlZmluZSBQUkl1TEwgImxsdSIKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWE1ZmE2Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi1kZy1pbml0Ci1saWJmZmktaW5pdAotCi1nbG9iYWwgc3JjZGlyIHN1YmRpcgotCi1nbG9iYWwgY3h4X29wdGlvbnMKLQotc2V0IGN4eF9vcHRpb25zICIgLXNoYXJlZC1saWJnY2MgLWxzdGRjKysiCi0KLWlmIHsgW3N0cmluZyBtYXRjaCAkdXNpbmdfZ2NjICJ5ZXMiXSB9IHsKLQotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jY11dICRjeHhfb3B0aW9ucyAiLU8wIC1XIC1XYWxsIgotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jY11dICRjeHhfb3B0aW9ucyAiLU8yIgotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jY11dICRjeHhfb3B0aW9ucyAiLU8zIgotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jY11dICRjeHhfb3B0aW9ucyAiLU9zIgotCi19Ci0KLWRnLWZpbmlzaAotCi0jIExvY2FsIFZhcmlhYmxlczoKLSMgdGNsLWluZGVudC1sZXZlbDo0Ci0jIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGV4aW5mby50ZXggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3RleGluZm8udGV4CmluZGV4IGE1YTdiMmIuLjg1ZjE4NGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGV4aW5mby50ZXgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXhpbmZvLnRleApAQCAtMywxMSArMywxMSBAQAogJSBMb2FkIHBsYWluIGlmIG5lY2Vzc2FyeSwgaS5lLiwgaWYgcnVubmluZyB1bmRlciBpbml0ZXguCiBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBmbXRuYW1lXGVuZGNzbmFtZVxyZWxheFxpbnB1dCBwbGFpblxmaQogJQotXGRlZlx0ZXhpbmZvdmVyc2lvbnsyMDEyLTA2LTA1LjE0fQorXGRlZlx0ZXhpbmZvdmVyc2lvbnsyMDEzLTAyLTAxLjExfQogJQogJSBDb3B5cmlnaHQgMTk4NSwgMTk4NiwgMTk4OCwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwKICUgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKLSUgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyUgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICUKICUgVGhpcyB0ZXhpbmZvLnRleCBmaWxlIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogJSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMjQsNyArMjQsOCBAQAogJQogJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyByZWFkIGJ5IFRlWCB3aGVuIHByb2Nlc3NpbmcKICUgYSBUZXhpbmZvIHNvdXJjZSBkb2N1bWVudCwgeW91IG1heSB1c2UgdGhlIHJlc3VsdCB3aXRob3V0Ci0lIHJlc3RyaWN0aW9uLiAgKFRoaXMgaGFzIGJlZW4gb3VyIGludGVudCBzaW5jZSBUZXhpbmZvIHdhcyBpbnZlbnRlZC4pCislIHJlc3RyaWN0aW9uLiBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CislIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KICUKICUgUGxlYXNlIHRyeSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGV4aW5mby50ZXggYmVmb3JlIHN1Ym1pdHRpbmcgYnVnCiAlIHJlcG9ydHM7IHlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tOgpAQCAtNTk0LDcgKzU5NSw3IEBACiBcZGVmXDp7XHNwYWNlZmFjdG9yPTEwMDAgfQogCiAlIEAqIGZvcmNlcyBhIGxpbmUgYnJlYWsuCi1cZGVmXCp7XGhmaWxcYnJlYWtcaGJveHt9XGlnbm9yZXNwYWNlc30KK1xkZWZcKntcdW5za2lwXGhmaWxcYnJlYWtcaGJveHt9XGlnbm9yZXNwYWNlc30KIAogJSBALyBhbGxvd3MgYSBsaW5lIGJyZWFrLgogXGxldFwvPVxhbGxvd2JyZWFrCkBAIC0yMjcyLDggKzIyNzMsNiBAQAogCiBcZ2RlZlxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0e1xsZXRgXGNvZGVxdW90ZWxlZnR9CiBcZ2RlZlxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodHtcbGV0J1xjb2RlcXVvdGVyaWdodH0KLQotXGdkZWZcbWFya3Vwc2V0bm9saWdhdHVyZXNxdW90ZWxlZnR7XGxldGBcbm9saWdhdHVyZXNxdW90ZWxlZnR9CiB9CiAKIFxsZXRcbWFya3Vwc2V0dXBscWNvZGUgXG1hcmt1cHNldGNvZGVxdW90ZWxlZnQKQEAgLTIyODIsNiArMjI4MSw5IEBACiBcbGV0XG1hcmt1cHNldHVwbHFleGFtcGxlIFxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0CiBcbGV0XG1hcmt1cHNldHVwcnFleGFtcGxlIFxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodAogJQorXGxldFxtYXJrdXBzZXR1cGxxa2JkICAgICBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdAorXGxldFxtYXJrdXBzZXR1cHJxa2JkICAgICBcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHQKKyUKIFxsZXRcbWFya3Vwc2V0dXBscXNhbXAgXG1hcmt1cHNldGNvZGVxdW90ZWxlZnQKIFxsZXRcbWFya3Vwc2V0dXBycXNhbXAgXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0CiAlCkBAIC0yMjkxLDggKzIyOTMsNiBAQAogXGxldFxtYXJrdXBzZXR1cGxxdmVyYmF0aW0gXG1hcmt1cHNldGNvZGVxdW90ZWxlZnQKIFxsZXRcbWFya3Vwc2V0dXBycXZlcmJhdGltIFxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodAogCi1cbGV0XG1hcmt1cHNldHVwbHFrYmQgXG1hcmt1cHNldG5vbGlnYXR1cmVzcXVvdGVsZWZ0Ci0KICUgQWxsb3cgYW4gb3B0aW9uIHRvIG5vdCB1c2UgcmVndWxhciBkaXJlY3RlZCByaWdodCBxdW90ZS9hcG9zdHJvcGhlCiAlIChjaGFyIDB4MjcpLCBidXQgaW5zdGVhZCB0aGUgdW5kaXJlY3RlZCBxdW90ZSBmcm9tIGNtdHQgKGNoYXIgMHgwZCkuCiAlIFRoZSB1bmRpcmVjdGVkIHF1b3RlIGlzIHVnbHksIHNvIGRvbid0IG1ha2UgaXQgdGhlIGRlZmF1bHQsIGJ1dCBpdApAQCAtMjM4Miw4ICsyMzgyLDcgQEAKICAgXGFmdGVyc21hcnRpYwogfQogCi0lIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZXMgXHR0c2wsIGFuZCBubyBpYy4KLSUgQHZhciBpcyBzZXQgdG8gdGhpcyBmb3IgZGVmdW4gYXJndW1lbnRzLgorJSBVbmNvbmRpdGlvbmFsIHVzZSBcdHRzbCwgYW5kIG5vIGljLiAgQHZhciBpcyBzZXQgdG8gdGhpcyBmb3IgZGVmdW5zLgogXGRlZlx0dHNsYW50ZWQjMXt7XHR0c2wgIzF9fQogCiAlIEBjaXRlIGlzIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZSBcc2wuICBXZSBuZXZlciB3YW50CkBAIC0yNDQ4LDM0ICsyNDQ3LDEyIEBACiAlIEBzYW1wLgogXGRlZlxzYW1wIzF7e1xzZXR1cG1hcmt1cHN0eWxle3NhbXB9XGxxXHRjbG9zZXsjMX1ccnFcbnVsbH19CiAKLSUgZGVmaW5pdGlvbiBvZiBAa2V5IHRoYXQgcHJvZHVjZXMgYSBsb3plbmdlLiAgRG9lc24ndCBhZGp1c3QgdG8gdGV4dCBzaXplLgotJVxzZXRmb250XGtleXJtXHJtc2hhcGV7OH17MTAwMH17T1QxfQotJVxmb250XGtleXN5PWNtc3k5Ci0lXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCi0lICBccmFpc2UwLjRwdFxoYm94e1xhbmdsZWxlZnR9XGtlcm4tLjA4ZW1cdnRvcHslCi0lICAgIFx2Ym94e1xocnVsZVxrZXJuLTAuNHB0Ci0lICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQotJSAgICBca2Vybi0wLjRwdFxocnVsZX0lCi0lICBca2Vybi0uMDZlbVxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlcmlnaHR9fX19CislIEBpbmRpY2F0ZXVybCBpcyBcc2FtcCwgdGhhdCBpcywgd2l0aCBxdW90ZXMuCitcbGV0XGluZGljYXRldXJsPVxzYW1wCiAKLSUgZGVmaW5pdGlvbiBvZiBAa2V5IHdpdGggbm8gbG96ZW5nZS4gIElmIHRoZSBjdXJyZW50IGZvbnQgaXMgYWxyZWFkeQotJSBtb25vc3BhY2UsIGRvbid0IGNoYW5nZSBpdDsgdGhhdCB3YXksIHdlIHJlc3BlY3QgQGtiZGlucHV0c3R5bGUuICBCdXQKLSUgaWYgaXQgaXNuJ3QgbW9ub3NwYWNlLCB0aGVuIHVzZSBcdHQuCi0lCi1cZGVmXGtleSMxe3tcc2V0dXBtYXJrdXBzdHlsZXtrZXl9JQotICBcbm9oeXBoZW5hdGlvbgotICBcaWZtb25vc3BhY2VcZWxzZVx0dFxmaQotICAjMX1cbnVsbH0KLQotJSBjdHJsIGlzIG5vIGxvbmdlciBhIFRleGluZm8gY29tbWFuZC4KLVxkZWZcY3RybCAjMXt7XHR0IFxyYXdiYWNrc2xhc2ggXGhhdH0jMX0KLQotJSBAZmlsZSwgQG9wdGlvbiBhcmUgdGhlIHNhbWUgYXMgQHNhbXAuCi1cbGV0XGZpbGU9XHNhbXAKLVxsZXRcb3B0aW9uPVxzYW1wCi0KLSUgQGNvZGUgaXMgYSBtb2RpZmljYXRpb24gb2YgQHQsCi0lIHdoaWNoIG1ha2VzIHNwYWNlcyB0aGUgc2FtZSBzaXplIGFzIG5vcm1hbCBpbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4KKyUgQGNvZGUgKGFuZCBzaW1pbGFyKSBwcmludHMgaW4gdHlwZXdyaXRlciwgYnV0IHdpdGggc3BhY2VzIHRoZSBzYW1lCislIHNpemUgYXMgbm9ybWFsIGluIHRoZSBzdXJyb3VuZGluZyB0ZXh0LCB3aXRob3V0IGh5cGhlbmF0aW9uLCBldGMuCislIFRoaXMgaXMgYSBzdWJyb3V0aW5lIGZvciB0aGF0LgogXGRlZlx0Y2xvc2UjMXslCiAgIHslCiAgICAgJSBDaGFuZ2Ugbm9ybWFsIGludGVyd29yZCBzcGFjZSB0byBiZSBzYW1lIGFzIGZvciB0aGUgY3VycmVudCBmb250LgpAQCAtMjUwMCw3ICsyNDc3LDcgQEAKICUgV2UgKm11c3QqIHR1cm4gb24gaHlwaGVuYXRpb24gYXQgYC0nIGFuZCBgXycgaW4gQGNvZGUuCiAlIE90aGVyd2lzZSwgaXQgaXMgdG9vIGhhcmQgdG8gYXZvaWQgb3ZlcmZ1bGwgaGJveGVzCiAlIGluIHRoZSBFbWFjcyBtYW51YWwsIHRoZSBMaWJyYXJ5IG1hbnVhbCwgZXRjLgotCislCiAlIFVuZm9ydHVuYXRlbHksIFRlWCB1c2VzIG9uZSBwYXJhbWV0ZXIgKFxoeXBoZW5jaGFyKSB0byBjb250cm9sCiAlIGJvdGggaHlwaGVuYXRpb24gYXQgLSBhbmQgaHlwaGVuYXRpb24gd2l0aGluIHdvcmRzLgogJSBXZSBtdXN0IHRoZXJlZm9yZSB0dXJuIHRoZW0gYm90aCBvZmYgKFx0Y2xvc2UgZG9lcyB0aGF0KQpAQCAtMjUxOSw3ICsyNDk2LDcgQEAKICAgICAgXGxldC1cY29kZWRhc2gKICAgICAgXGxldF9cY29kZXVuZGVyCiAgICAgXGVsc2UKLSAgICAgXGxldC1ccmVhbGRhc2gKKyAgICAgXGxldC1cbm9ybWFsZGFzaAogICAgICBcbGV0X1xyZWFsdW5kZXIKICAgICBcZmkKICAgICBcY29kZXgKQEAgLTI1MjgsNyArMjUwNSw3IEBACiAKIFxkZWZcY29kZXggIzF7XHRjbG9zZXsjMX1cZW5kZ3JvdXB9CiAKLVxkZWZccmVhbGRhc2h7LX0KK1xkZWZcbm9ybWFsZGFzaHstfQogXGRlZlxjb2RlZGFzaHstXGRpc2NyZXRpb25hcnl7fXt9e319CiBcZGVmXGNvZGV1bmRlcnslCiAgICUgdGhpcyBpcyBhbGwgc28gQG1hdGh7QGNvZGV7dmFyX25hbWV9KzF9IGNhbiB3b3JrLiAgSW4gbWF0aCBtb2RlLCBfCkBAIC0yNTQzLDkgKzI1MjAsOSBAQAogfQogCiAlIEFuIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uOiB0aGUgYWJvdmUgd2lsbCBhbGxvdyBicmVha3MgYWZ0ZXIsIGUuZy4sCi0lIGVhY2ggb2YgdGhlIGZvdXIgdW5kZXJzY29yZXMgaW4gX190eXBlb2ZfXy4gIFRoaXMgaXMgdW5kZXNpcmFibGUgaW4KLSUgc29tZSBtYW51YWxzLCBlc3BlY2lhbGx5IGlmIHRoZXkgZG9uJ3QgaGF2ZSBsb25nIGlkZW50aWZpZXJzIGluCi0lIGdlbmVyYWwuICBAYWxsb3djb2RlYnJlYWtzIHByb3ZpZGVzIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KKyUgZWFjaCBvZiB0aGUgZm91ciB1bmRlcnNjb3JlcyBpbiBfX3R5cGVvZl9fLiAgVGhpcyBpcyBiYWQuCislIEBhbGxvd2NvZGVicmVha3MgcHJvdmlkZXMgYSBkb2N1bWVudC1sZXZlbCB3YXkgdG8gdHVybiBicmVha2luZyBhdCAtCislIGFuZCBfIG9uIGFuZCBvZmYuCiAlCiBcbmV3aWZcaWZhbGxvd2NvZGVicmVha3MgIFxhbGxvd2NvZGVicmVha3N0cnVlCiAKQEAgLTI1NjQsNiArMjU0MSwxMyBAQAogICBcZmlcZmkKIH0KIAorJSBGb3IgQGNvbW1hbmQsIEBlbnYsIEBmaWxlLCBAb3B0aW9uIHF1b3RlcyBzZWVtIHVubmVjZXNzYXJ5LAorJSBzbyB1c2UgXGNvZGUgcmF0aGVyIHRoYW4gXHNhbXAuCitcbGV0XGNvbW1hbmQ9XGNvZGUKK1xsZXRcZW52PVxjb2RlCitcbGV0XGZpbGU9XGNvZGUKK1xsZXRcb3B0aW9uPVxjb2RlCisKICUgQHVyZWYgKGFiYnJldmlhdGlvbiBmb3IgYHVybHJlZicpIHRha2VzIGFuIG9wdGlvbmFsIChjb21tYS1zZXBhcmF0ZWQpCiAlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSB0ZXh0IHRvIGRpc3BsYXkgYW5kIGFuIG9wdGlvbmFsIHRoaXJkCiAlIGFyZyBhcyB0ZXh0IHRvIGRpc3BsYXkgaW5zdGVhZCBvZiAocmF0aGVyIHRoYW4gaW4gYWRkaXRpb24gdG8pIHRoZSB1cmwKQEAgLTI3MTAsMTAgKzI2OTQsNiBAQAogICBcbGV0XGVtYWlsPVx1cmVmCiBcZmkKIAotJSBAa2JkIGlzIGxpa2UgQGNvZGUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBhcmd1bWVudCBpcyBqdXN0IG9uZSBAa2V5IGNvbW1hbmQsCi0lIHRoZW4gQGtiZCBoYXMgbm8gZWZmZWN0LgotXGRlZlxrYmQjMXt7XHNldHVwbWFya3Vwc3R5bGV7a2JkfVxkZWZcbG9va3sjMX1cZXhwYW5kYWZ0ZXJca2JkZm9vXGxvb2s/P1xwYXJ9fQotCiAlIEBrYmRpbnB1dHN0eWxlIC0tIGFyZyBpcyBgZGlzdGluY3QnIChAa2JkIHVzZXMgc2xhbnRlZCB0dHkgZm9udCBhbHdheXMpLAogJSAgIGBleGFtcGxlJyAoQGtiZCB1c2VzIHR0c2wgb25seSBpbnNpZGUgb2YgQGV4YW1wbGUgYW5kIGZyaWVuZHMpLAogJSAgIG9yIGBjb2RlJyAoQGtiZCB1c2VzIG5vcm1hbCB0dHkgZm9udCBhbHdheXMpLgpAQCAtMjczNywxNiArMjcxNywzNiBAQAogJSBEZWZhdWx0IGlzIGBkaXN0aW5jdCcuCiBca2JkaW5wdXRzdHlsZSBkaXN0aW5jdAogCi1cZGVmXHhrZXl7XGtleX0KLVxkZWZca2JkZm9vIzEjMiMzXHBhcntcZGVmXG9uZXsjMX1cZGVmXHRocmVleyMzfVxkZWZcdGhyZWV4ez8/fSUKLVxpZnhcb25lXHhrZXlcaWZ4XHRocmVleFx0aHJlZSBca2V5eyMyfSUKLVxlbHNle1x0Y2xvc2V7XGtiZGZvbnRcc2V0dXBtYXJrdXBzdHlsZXtrYmR9XGxvb2t9fVxmaQotXGVsc2V7XHRjbG9zZXtca2JkZm9udFxzZXR1cG1hcmt1cHN0eWxle2tiZH1cbG9va319XGZpfQorJSBAa2JkIGlzIGxpa2UgQGNvZGUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBhcmd1bWVudCBpcyBqdXN0IG9uZSBAa2V5IGNvbW1hbmQsCislIHRoZW4gQGtiZCBoYXMgbm8gZWZmZWN0LgorXGRlZlxrYmQjMXt7XGRlZlxsb29reyMxfVxleHBhbmRhZnRlclxrYmRzdWJcbG9vaz8/XHBhcn19CiAKLSUgRm9yIEBpbmRpY2F0ZXVybCwgQGVudiwgQGNvbW1hbmQgcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksIHNvIHVzZSBcY29kZS4KLVxsZXRcaW5kaWNhdGV1cmw9XGNvZGUKLVxsZXRcZW52PVxjb2RlCi1cbGV0XGNvbW1hbmQ9XGNvZGUKK1xkZWZceGtleXtca2V5fQorXGRlZlxrYmRzdWIjMSMyIzNccGFyeyUKKyAgXGRlZlxvbmV7IzF9XGRlZlx0aHJlZXsjM31cZGVmXHRocmVleHs/P30lCisgIFxpZnhcb25lXHhrZXlcaWZ4XHRocmVleFx0aHJlZSBca2V5eyMyfSUKKyAgXGVsc2V7XHRjbG9zZXtca2JkZm9udFxzZXR1cG1hcmt1cHN0eWxle2tiZH1cbG9va319XGZpCisgIFxlbHNle1x0Y2xvc2V7XGtiZGZvbnRcc2V0dXBtYXJrdXBzdHlsZXtrYmR9XGxvb2t9fVxmaQorfQorCislIGRlZmluaXRpb24gb2YgQGtleSB0aGF0IHByb2R1Y2VzIGEgbG96ZW5nZS4gIERvZXNuJ3QgYWRqdXN0IHRvIHRleHQgc2l6ZS4KKyVcc2V0Zm9udFxrZXlybVxybXNoYXBlezh9ezEwMDB9e09UMX0KKyVcZm9udFxrZXlzeT1jbXN5OQorJVxkZWZca2V5IzF7e1xrZXlybVx0ZXh0Zm9udDI9XGtleXN5IFxsZWF2ZXZtb2RlXGhib3h7JQorJSAgXHJhaXNlMC40cHRcaGJveHtcYW5nbGVsZWZ0fVxrZXJuLS4wOGVtXHZ0b3B7JQorJSAgICBcdmJveHtcaHJ1bGVca2Vybi0wLjRwdAorJSAgICAgXGhib3h7XHJhaXNlMC40cHRcaGJveHtcdnBoYW50b217XGFuZ2xlbGVmdH19IzF9fSUKKyUgICAgXGtlcm4tMC40cHRcaHJ1bGV9JQorJSAgXGtlcm4tLjA2ZW1ccmFpc2UwLjRwdFxoYm94e1xhbmdsZXJpZ2h0fX19fQorCislIGRlZmluaXRpb24gb2YgQGtleSB3aXRoIG5vIGxvemVuZ2UuICBJZiB0aGUgY3VycmVudCBmb250IGlzIGFscmVhZHkKKyUgbW9ub3NwYWNlLCBkb24ndCBjaGFuZ2UgaXQ7IHRoYXQgd2F5LCB3ZSByZXNwZWN0IEBrYmRpbnB1dHN0eWxlLiAgQnV0CislIGlmIGl0IGlzbid0IG1vbm9zcGFjZSwgdGhlbiB1c2UgXHR0LgorJQorXGRlZlxrZXkjMXt7XHNldHVwbWFya3Vwc3R5bGV7a2V5fSUKKyAgXG5vaHlwaGVuYXRpb24KKyAgXGlmbW9ub3NwYWNlXGVsc2VcdHRcZmkKKyAgIzF9XG51bGx9CiAKICUgQGNsaWNrc2VxdWVuY2V7RmlsZSBAY2xpY2t7fSBPcGVuIC4uLn0KIFxkZWZcY2xpY2tzZXF1ZW5jZSMxe1xiZWdpbmdyb3VwICMxXGVuZGdyb3VwfQpAQCAtMjg1NCw2ICsyODU0LDkgQEAKICAgfQogfQogCislIGN0cmwgaXMgbm8gbG9uZ2VyIGEgVGV4aW5mbyBjb21tYW5kLCBidXQgbGVhdmUgdGhpcyBkZWZpbml0aW9uIGZvciBmdW4uCitcZGVmXGN0cmwgIzF7e1x0dCBccmF3YmFja3NsYXNoIFxoYXR9IzF9CisKICUgQGlubGluZWZtdHtGTVROQU1FLFBST0NFU1NFRC1URVhUfSBhbmQgQGlubGluZXJhd3tGTVROQU1FLFJBVy1URVhUfS4KICUgSWdub3JlIHVubGVzcyBGTVROQU1FID09IHRleDsgdGhlbiBpdCBpcyBsaWtlIEBpZnRleCBhbmQgQHRleCwKICUgZXhjZXB0IHNwZWNpZmllZCBhcyBhIG5vcm1hbCBicmFjZWQgYXJnLCBzbyBubyBuZXdsaW5lcyB0byB3b3JyeSBhYm91dC4KQEAgLTMxNDQsMTIgKzMxNDcsMTcgQEAKICAgJSBob3BlZnVsbHkgbm9ib2R5IHdpbGwgbm90aWNlL2NhcmUuCiAgIFxlZGVmXGVjc2l6ZXtcY3NuYW1lXGN1cmZvbnRzaXplIGVjc2l6ZVxlbmRjc25hbWV9JQogICBcZWRlZlxub21pbmFsc2l6ZXtcY3NuYW1lXGN1cmZvbnRzaXplIG5vbWluYWxzaXplXGVuZGNzbmFtZX0lCi0gIFxpZnhcY3VyZm9udHN0eWxlXGJmc3R5bGVuYW1lCi0gICAgJSBib2xkOgotICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY2JcaWZ1c2luZ2l0e2l9e3h9XGVjc2l6ZSBcc3BhY2UgYXQgXG5vbWluYWxzaXplCisgIFxpZm1vbm9zcGFjZQorICAgICUgdHlwZXdyaXRlcjoKKyAgICBcZm9udFx0aGlzZWNmb250ID0gZWN0dFxlY3NpemUgXHNwYWNlIGF0IFxub21pbmFsc2l6ZQogICBcZWxzZQotICAgICUgcmVndWxhcjoKLSAgICBcZm9udFx0aGlzZWNmb250ID0gZWNcaWZ1c2luZ2l0e3RpfXtybX1cZWNzaXplIFxzcGFjZSBhdCBcbm9taW5hbHNpemUKKyAgICBcaWZ4XGN1cmZvbnRzdHlsZVxiZnN0eWxlbmFtZQorICAgICAgJSBib2xkOgorICAgICAgXGZvbnRcdGhpc2VjZm9udCA9IGVjYlxpZnVzaW5naXR7aX17eH1cZWNzaXplIFxzcGFjZSBhdCBcbm9taW5hbHNpemUKKyAgICBcZWxzZQorICAgICAgJSByZWd1bGFyOgorICAgICAgXGZvbnRcdGhpc2VjZm9udCA9IGVjXGlmdXNpbmdpdHt0aX17cm19XGVjc2l6ZSBcc3BhY2UgYXQgXG5vbWluYWxzaXplCisgICAgXGZpCiAgIFxmaQogICBcdGhpc2VjZm9udAogfQpAQCAtMzI2Miw2ICszMjcwLDIwIEBACiAgIFxmaW5pc2hlZHRpdGxlcGFnZXRydWUKIH0KIAorJSBTZXR0aW5ncyB1c2VkIGZvciB0eXBlc2V0dGluZyB0aXRsZXM6IG5vIGh5cGhlbmF0aW9uLCBubyBpbmRlbnRhdGlvbiwKKyUgZG9uJ3Qgd29ycnkgbXVjaCBhYm91dCBzcGFjaW5nLCByYWdnZWQgcmlnaHQuICBUaGlzIHNob3VsZCBiZSB1c2VkCislIGluc2lkZSBhIFx2Ym94LCBhbmQgZm9udHMgbmVlZCB0byBiZSBzZXQgYXBwcm9wcmlhdGVseSBmaXJzdC4gIEJlY2F1c2UKKyUgaXQgaXMgYWx3YXlzIHVzZWQgZm9yIHRpdGxlcywgbm90aGluZyBlbHNlLCB3ZSBjYWxsIFxybWlzYm9sZC4gIFxwYXIKKyUgc2hvdWxkIGJlIHNwZWNpZmllZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgXHZib3gsIHNpbmNlIGEgdmJveCBpcyBhIGdyb3VwLgorJSAKK1xkZWZccmFnZ2VkdGl0bGVzZXR0aW5nc3slCisgIFxybWlzYm9sZAorICBcaHlwaGVucGVuYWx0eT0xMDAwMAorICBccGFyaW5kZW50PTBwdAorICBcdG9sZXJhbmNlPTUwMDAKKyAgXHB0ZXhyYWdnZWRyaWdodAorfQorCiAlIE1hY3JvcyB0byBiZSB1c2VkIHdpdGhpbiBAdGl0bGVwYWdlOgogCiBcbGV0XHN1YnRpdGxlcm09XHRlbnJtCkBAIC0zMjY5LDcgKzMyOTEsNyBAQAogCiBccGFyc2VhcmdkZWZcdGl0bGV7JQogICBcY2hlY2tlbnZcdGl0bGVwYWdlCi0gIFxsZWZ0bGluZXtcdGl0bGVmb250c1xybWlzYm9sZCAjMX0KKyAgXHZib3h7XHRpdGxlZm9udHMgXHJhZ2dlZHRpdGxlc2V0dGluZ3MgIzFccGFyfSUKICAgJSBwcmludCBhIHJ1bGUgYXQgdGhlIHBhZ2UgYm90dG9tIGFsc28uCiAgIFxmaW5pc2hlZHRpdGxlcGFnZWZhbHNlCiAgIFx2c2tpcDRwdCBcaHJ1bGUgaGVpZ2h0IDRwdCB3aWR0aCBcaHNpemUgXHZza2lwNHB0CkBAIC00MTY2LDcgKzQxODgsNyBAQAogICAgICUgLi4uLCBidXQgd2UgbWlnaHQgZW5kIHVwIHdpdGggYWN0aXZlIG9uZXMgaW4gdGhlIGFyZ3VtZW50IGlmCiAgICAgJSB3ZSdyZSBjYWxsZWQgZnJvbSBAY29kZSwgYXMgQGNvZGV7QHZhbHVle2Zvby1iYXJffX0sIHRob3VnaC4KICAgICAlIFNvIFxsZXQgdGhlbSB0byB0aGVpciBub3JtYWwgZXF1aXZhbGVudHMuCi0gICAgXGxldC1ccmVhbGRhc2ggXGxldF9cbm9ybWFsdW5kZXJzY29yZQorICAgIFxsZXQtXG5vcm1hbGRhc2ggXGxldF9cbm9ybWFsdW5kZXJzY29yZQogICB9CiB9CiAKQEAgLTQyMDYsNyArNDIyOCw3IEBACiB9CiBcZGVmXGlmc2V0ZmFpbHtcZG9pZ25vcmV7aWZzZXR9fQogCi0lIEBpZmNsZWFyIFZBUiAuLi4gQGVuZCBpZmNsZWFyIHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBuZXZlciBiZWVuCislIEBpZmNsZWFyIFZBUiAuLi4gQGVuZCBleGVjdXRlcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgbmV2ZXIgYmVlbgogJSBkZWZpbmVkIHdpdGggQHNldCwgb3IgaGFzIGJlZW4gdW5kZWZpbmVkIHdpdGggQGNsZWFyLgogJQogJSBUaGUgYFxlbHNlJyBpbnNpZGUgdGhlIGBcZG9pZnNldCcgcGFyYW1ldGVyIGlzIGEgdHJpY2sgdG8gcmV1c2UgdGhlCkBAIC00MjE3LDYgKzQyMzksMzUgQEAKIFxkZWZcaWZjbGVhcntccGFyc2Vhcmd7XGRvaWZzZXR7XGVsc2UgXGxldFxuZXh0PVxpZmNsZWFyZmFpbH19fQogXGRlZlxpZmNsZWFyZmFpbHtcZG9pZ25vcmV7aWZjbGVhcn19CiAKKyUgQGlmY29tbWFuZGlzZGVmaW5lZCBDTUQgLi4uIEBlbmQgZXhlY3V0ZXMgdGhlIGAuLi4nIGlmIENNRCAod3JpdHRlbgorJSB3aXRob3V0IHRoZSBAKSBpcyBpbiBmYWN0IGRlZmluZWQuICBXZSBjYW4gb25seSBmZWFzaWJseSBjaGVjayBhdCB0aGUKKyUgVGVYIGxldmVsLCBzbyBzb21ldGhpbmcgbGlrZSBgbWF0aGNvZGUnIGlzIGdvaW5nIHRvIGNvbnNpZGVyZWQKKyUgZGVmaW5lZCBldmVuIHRob3VnaCBpdCBpcyBub3QgYSBUZXhpbmZvIGNvbW1hbmQuCislIAorXG1ha2Vjb25ke2lmY29tbWFuZGRlZmluZWR9CitcZGVmXGlmY29tbWFuZGRlZmluZWR7XHBhcnNlYXJne1xkb2lmY21kZGVmaW5lZHtcbGV0XG5leHQ9XGlmY21kZGVmaW5lZGZhaWx9fX0KKyUKK1xkZWZcZG9pZmNtZGRlZmluZWQjMSMye3slCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcbGV0XG5leHQ9XGVtcHR5CisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgIzJcZW5kY3NuYW1lXHJlbGF4CisgICAgICAjMSUgSWYgbm90IGRlZmluZWQsIFxsZXRcbmV4dCBhcyBhYm92ZS4KKyAgICBcZmkKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVxuZXh0Cit9CitcZGVmXGlmY21kZGVmaW5lZGZhaWx7XGRvaWdub3Jle2lmY29tbWFuZGRlZmluZWR9fQorCislIEBpZmNvbW1hbmRub3RkZWZpbmVkIENNRCAuLi4gaGFuZGxlZCBzaW1pbGFyIHRvIEBpZmNsZWFyIGFib3ZlLgorXG1ha2Vjb25ke2lmY29tbWFuZG5vdGRlZmluZWR9CitcZGVmXGlmY29tbWFuZG5vdGRlZmluZWR7JQorICBccGFyc2Vhcmd7XGRvaWZjbWRkZWZpbmVke1xlbHNlIFxsZXRcbmV4dD1caWZjbWRub3RkZWZpbmVkZmFpbH19fQorXGRlZlxpZmNtZG5vdGRlZmluZWRmYWlse1xkb2lnbm9yZXtpZmNvbW1hbmRub3RkZWZpbmVkfX0KKworJSBTZXQgdGhlIGB0eGljb21tYW5kY29uZGl0aW9uYWxzJyB2YXJpYWJsZSwgc28gZG9jdW1lbnRzIGhhdmUgYSB3YXkgdG8KKyUgdGVzdCBpZiB0aGUgQGlmY29tbWFuZC4uLmRlZmluZWQgY29uZGl0aW9uYWxzIGFyZSBhdmFpbGFibGUuCitcc2V0IHR4aWNvbW1hbmRjb25kaXRpb25hbHMKKwogJSBAZGlyY2F0ZWdvcnkgQ0FURUdPUlkgIC0tIHNwZWNpZnkgYSBjYXRlZ29yeSBvZiB0aGUgZGlyIGZpbGUKICUgd2hpY2ggdGhpcyBmaWxlIHNob3VsZCBiZWxvbmcgdG8uICBJZ25vcmUgdGhpcyBpbiBUZVguCiBcbGV0XGRpcmNhdGVnb3J5PVxjb21tZW50CkBAIC01NTQzLDE0ICs1NTk0LDYgQEAKIAogJSBEZWZpbmUgQG1ham9yaGVhZGluZywgQGhlYWRpbmcgYW5kIEBzdWJoZWFkaW5nCiAKLSUgTk9URSBvbiB1c2Ugb2YgXHZib3ggZm9yIGNoYXB0ZXIgaGVhZGluZ3MsIHNlY3Rpb24gaGVhZGluZ3MsIGFuZCBzdWNoOgotJSAgICAgICAxKSBXZSB1c2UgXHZib3ggcmF0aGVyIHRoYW4gdGhlIGVhcmxpZXIgXGxpbmUgdG8gcGVybWl0Ci0lICAgICAgICAgIG92ZXJsb25nIGhlYWRpbmdzIHRvIGZvbGQuCi0lICAgICAgIDIpIFxoeXBoZW5wZW5hbHR5IGlzIHNldCB0byAxMDAwMCBiZWNhdXNlIGh5cGhlbmF0aW9uIGluIGEKLSUgICAgICAgICAgaGVhZGluZyBpcyBvYm5veGlvdXM7IHRoaXMgZm9yYmlkcyBpdC4KLSUgICAgICAgMykgTGlrZXdpc2UsIGhlYWRpbmdzIGxvb2sgYmVzdCBpZiBubyBccGFyaW5kZW50IGlzIHVzZWQsIGFuZAotJSAgICAgICAgICBpZiBqdXN0aWZpY2F0aW9uIGlzIG5vdCBhdHRlbXB0ZWQuICBIZW5jZSBccmFnZ2VkcmlnaHQuCi0KIFxkZWZcbWFqb3JoZWFkaW5neyUKICAge1xhZHZhbmNlXGNoYXBoZWFkaW5nc2tpcCBieSAxMHB0IFxjaGFwYnJlYWsgfSUKICAgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6CkBAIC01NTU4LDEwICs1NjAxLDggQEAKIAogXGRlZlxjaGFwaGVhZGluZ3tcY2hhcGJyZWFrIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6en0KIFxkZWZcY2hhcGhlYWRpbmd6enojMXslCi0gIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCi0gICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0XHB0ZXhyYWdnZWRyaWdodAotICAgICAgICAgICAgICAgICAgICBccm1pc2JvbGQgIzFcaGZpbGx9fSUKLSAgXGJpZ3NraXAgXHBhclxwZW5hbHR5IDIwMFxyZWxheAorICBcdmJveHtcY2hhcGZvbnRzIFxyYWdnZWR0aXRsZXNldHRpbmdzICMxXHBhcn0lCisgIFxub2JyZWFrXGJpZ3NraXAgXG5vYnJlYWsKICAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKIH0KIApAQCAtNTcyMCw4ICs1NzYxLDcgQEAKICAgICAlCiAgICAgJSBUeXBlc2V0IHRoZSBhY3R1YWwgaGVhZGluZy4KICAgICBcbm9icmVhayAlIEF2b2lkIHBhZ2UgYnJlYWtzIGF0IHRoZSBpbnRlcmxpbmUgZ2x1ZS4KLSAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHB0ZXhyYWdnZWRyaWdodAotICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgXGNlbnRlcnBhcmFtZXRlcnNtYXliZQorICAgIFx2Ym94e1xyYWdnZWR0aXRsZXNldHRpbmdzIFxoYW5naW5kZW50PVx3ZDAgXGNlbnRlcnBhcmFtZXRlcnNtYXliZQogICAgICAgICAgIFx1bmhib3gwICMxXHBhcn0lCiAgIH0lCiAgIFxub2JyZWFrXGJpZ3NraXAgJSBubyBwYWdlIGJyZWFrIGFmdGVyIGEgY2hhcHRlciB0aXRsZQpAQCAtNTc0MywxOCArNTc4MywxOCBAQAogXGRlZlxzZXRjaGFwdGVyc3R5bGUgIzEge1xjc25hbWUgQ0hBUEYjMVxlbmRjc25hbWV9CiAlCiBcZGVmXHVubmNoZm9wZW4gIzF7JQotXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCi0gICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0XHB0ZXhyYWdnZWRyaWdodAotICAgICAgICAgICAgICAgICAgICAgICBccm1pc2JvbGQgIzFcaGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworICBcY2hhcG9kZHBhZ2UKKyAgXHZib3h7XGNoYXBmb250cyBccmFnZ2VkdGl0bGVzZXR0aW5ncyAjMVxwYXJ9JQorICBcbm9icmVha1xiaWdza2lwXG5vYnJlYWsKIH0KIFxkZWZcY2hmb3BlbiAjMSMye1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cwogXHZib3ggdG8gM2lue1x2ZmlsIFxoYm94IHRvXGhzaXple1xoZmlsICMyfSBcaGJveCB0b1xoc2l6ZXtcaGZpbCAjMX0gXHZmaWx9fSUKIFxwYXJccGVuYWx0eSA1MDAwICUKIH0KIFxkZWZcY2VudGVyY2hmb3BlbiAjMXslCi1cY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHQKLSAgICAgICAgICAgICAgICAgICAgICAgXGhmaWxsIHtccm1pc2JvbGQgIzF9XGhmaWxsfX1cYmlnc2tpcCBccGFyXG5vYnJlYWsKKyAgXGNoYXBvZGRwYWdlCisgIFx2Ym94e1xjaGFwZm9udHMgXHJhZ2dlZHRpdGxlc2V0dGluZ3MgXGhmaWxsICMxXGhmaWxsfSUKKyAgXG5vYnJlYWtcYmlnc2tpcCBcbm9icmVhawogfQogXGRlZlxDSEFQRm9wZW57JQogICBcZ2xvYmFsXGxldFxjaGFwbWFjcm89XGNoZm9wZW4KQEAgLTY1MjAsMTYgKzY1NjAsOSBAQAogXG1ha2VkaXNwZW52ZGVme3F1b3RhdGlvbn17XHF1b3RhdGlvbnN0YXJ0fQogJQogXGRlZlxxdW90YXRpb25zdGFydHslCi0gIHtccGFyc2tpcD0wcHQgXGFib3ZlZW52YnJlYWt9JSBiZWNhdXNlIFxhYm92ZWVudmJyZWFrIGluc2VydHMgXHBhcnNraXAKLSAgXHBhcmluZGVudD0wcHQKLSAgJQotICAlIEBjYXJ0b3VjaGUgZGVmaW5lcyBcbm9uYXJyb3dpbmcgdG8gaW5oaWJpdCBuYXJyb3dpbmcgYXQgbmV4dCBsZXZlbCBkb3duLgorICBcaW5kZW50ZWRibG9ja3N0YXJ0ICUgc2FtZSBhcyBcaW5kZW50ZWRibG9jaywgYnV0IGluY3JlYXNlIHJpZ2h0IG1hcmdpbiB0b28uCiAgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKLSAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZwogICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSBcbGlzcG5hcnJvd2luZwotICAgIFxleGRlbnRhbW91bnQgPSBcbGlzcG5hcnJvd2luZwotICBcZWxzZQotICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKICAgXGZpCiAgIFxwYXJzZWFyZ1xxdW90YXRpb25sYWJlbAogfQpAQCAtNjU1NSw2ICs2NTg4LDMyIEBACiAgIFxmaQogfQogCislIEBpbmRlbnRlZGJsb2NrIGlzIGxpa2UgQHF1b3RhdGlvbiwgYnV0IGluZGVudHMgb25seSBvbiB0aGUgbGVmdCBhbmQKKyUgaGFzIG5vIG9wdGlvbmFsIGFyZ3VtZW50LgorJSAKK1xtYWtlZGlzcGVudmRlZntpbmRlbnRlZGJsb2NrfXtcaW5kZW50ZWRibG9ja3N0YXJ0fQorJQorXGRlZlxpbmRlbnRlZGJsb2Nrc3RhcnR7JQorICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCisgIFxwYXJpbmRlbnQ9MHB0CisgICUKKyAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudCA9IFxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKK30KKworJSBLZWVwIGEgbm9uemVybyBwYXJza2lwIGZvciB0aGUgZW52aXJvbm1lbnQsIHNpbmNlIHdlJ3JlIGRvaW5nIG5vcm1hbCBmaWxsaW5nLgorJQorXGRlZlxFaW5kZW50ZWRibG9ja3slCisgIFxwYXIKKyAge1xwYXJza2lwPTBwdCBcYWZ0ZXJlbnZicmVha30lCit9CitcZGVmXEVzbWFsbGluZGVudGVkYmxvY2t7XEVpbmRlbnRlZGJsb2NrfQorCiAKICUgTGFUZVgtbGlrZSBAdmVyYmF0aW0uLi5AZW5kIHZlcmJhdGltIGFuZCBAdmVyYns8Y2hhcj4uLi48Y2hhcj59CiAlIElmIHdlIHdhbnQgdG8gYWxsb3cgYW55IDxjaGFyPiBhcyBkZWxpbWl0ZXIsCkBAIC03MDMzLDcgKzcwOTIsMTAgQEAKICAgXGRmIFxzbCBcaHlwaGVuY2hhclxmb250PTAKICAgJQogICAlIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBhbiBhcmd1bWVudCBoYXMgdHdvIGRhc2hlcyAoZm9yIGluc3RhbmNlKSwgd2UKLSAgJSB3YW50IGEgd2F5IHRvIGdldCB0dHNsLiAgTGV0J3MgdHJ5IEB2YXIgZm9yIHRoYXQuCisgICUgd2FudCBhIHdheSB0byBnZXQgdHRzbC4gIFdlIHVzZWQgdG8gcmVjb21tZW5kIEB2YXIgZm9yIHRoYXQsIHNvCisgICUgbGVhdmUgdGhlIGNvZGUgaW4sIGJ1dCBpdCdzIHN0cmFuZ2UgZm9yIEB2YXIgdG8gbGVhZCB0byB0eXBld3JpdGVyLgorICAlIE5vd2FkYXlzIHdlIHJlY29tbWVuZCBAY29kZSwgc2luY2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHR0c2wgaHlwaGVuCisgICUgYW5kIGEgdHQgaHlwaGVuIGlzIHByZXR0eSB0aW55LiAgQGNvZGUgYWxzbyBkaXNhYmxlcyA/YCAhYC4KICAgXGRlZlx2YXIjIzF7e1xzZXR1cG1hcmt1cHN0eWxle3Zhcn1cdHRzbGFudGVkeyMjMX19fSUKICAgIzElCiAgIFxzbFxoeXBoZW5jaGFyXGZvbnQ9NDUKQEAgLTk5MzEsMjIgKzk5OTMsMjYgQEAKIEBnZGVmQG90aGVyYmFja3NsYXNoe0BsZXRcPUByZWFsYmFja3NsYXNofQogCiAlIFNhbWUgYXMgQHR1cm5vZmZhY3RpdmUgZXhjZXB0IG91dHB1dHMgXCBhcyB7XHR0XGNoYXJgXFx9IGluc3RlYWQgb2YKLSUgdGhlIGxpdGVyYWwgY2hhcmFjdGVyIGBcJy4KKyUgdGhlIGxpdGVyYWwgY2hhcmFjdGVyIGBcJy4gIEFsc28gcmV2ZXJ0IC0gdG8gaXRzIG5vcm1hbCBjaGFyYWN0ZXIsIGluCislIGNhc2UgdGhlIGFjdGl2ZSAtIGZyb20gY29kZSBoYXMgc2xpcHBlZCBpbi4KICUKLUBkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXslCi0gIEBsZXQiPUBub3JtYWxkb3VibGVxdW90ZQotICBAbGV0JD1Abm9ybWFsZG9sbGFyICUkIGZvbnQtbG9jayBmaXgKLSAgQGxldCs9QG5vcm1hbHBsdXMKLSAgQGxldDw9QG5vcm1hbGxlc3MKLSAgQGxldD49QG5vcm1hbGdyZWF0ZXIKLSAgQGxldFw9QG5vcm1hbGJhY2tzbGFzaAotICBAbGV0Xj1Abm9ybWFsY2FyZXQKLSAgQGxldF89QG5vcm1hbHVuZGVyc2NvcmUKLSAgQGxldHw9QG5vcm1hbHZlcnRpY2FsYmFyCi0gIEBsZXR+PUBub3JtYWx0aWxkZQotICBAbWFya3Vwc2V0dXBscWRlZmF1bHQKLSAgQG1hcmt1cHNldHVwcnFkZWZhdWx0Ci0gIEB1bnNlcHNwYWNlcwore0BjYXRjb2RlYC0gPSBAYWN0aXZlCisgQGdkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXslCisgICBAbGV0LT1Abm9ybWFsZGFzaAorICAgQGxldCI9QG5vcm1hbGRvdWJsZXF1b3RlCisgICBAbGV0JD1Abm9ybWFsZG9sbGFyICUkIGZvbnQtbG9jayBmaXgKKyAgIEBsZXQrPUBub3JtYWxwbHVzCisgICBAbGV0PD1Abm9ybWFsbGVzcworICAgQGxldD49QG5vcm1hbGdyZWF0ZXIKKyAgIEBsZXRcPUBub3JtYWxiYWNrc2xhc2gKKyAgIEBsZXRePUBub3JtYWxjYXJldAorICAgQGxldF89QG5vcm1hbHVuZGVyc2NvcmUKKyAgIEBsZXR8PUBub3JtYWx2ZXJ0aWNhbGJhcgorICAgQGxldH49QG5vcm1hbHRpbGRlCisgICBAbWFya3Vwc2V0dXBscWRlZmF1bHQKKyAgIEBtYXJrdXBzZXR1cHJxZGVmYXVsdAorICAgQHVuc2Vwc3BhY2VzCisgfQogfQogCiAlIE1ha2UgXyBhbmQgKyBcb3RoZXIgY2hhcmFjdGVycywgdGVtcG9yYXJpbHkuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCmluZGV4IGJmNDIwOTMuLjk2ODI2YjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCkBAIC0zOCwxMiArMzgsMTMgQEAKIC8qQG91dEAqLwlmZmlfdHlwZSoJYXJnKQogewogLypALXVzZWRlZkAqLworCWZmaV90eXBlKioJcHRyOwogCiAJaWYgKGFyZyA9PSBOVUxMIHx8IGFyZy0+ZWxlbWVudHMgPT0gTlVMTCB8fAogCQlhcmctPnNpemUgIT0gMCB8fCBhcmctPmFsaWdubWVudCAhPSAwKQogCQlyZXR1cm4gRkZJX0JBRF9UWVBFREVGOwogCi0JZmZpX3R5cGUqKglwdHIgPSAmKGFyZy0+ZWxlbWVudHNbMF0pOworICAgIHB0ciA9ICYoYXJnLT5lbGVtZW50c1swXSk7CiAKIAl3aGlsZSAoKCpwdHIpICE9IE5VTEwpCiAJewpAQCAtMTM1LDE2ICsxMzYsMTYgQEAKIC8qQGRlcGVuZGVudEAqLyAvKkBvdXRAKi8gLypAcGFydGlhbEAqLyBmZmlfdHlwZSoJcnR5cGUsIAogLypAZGVwZW5kZW50QCovCQkJZmZpX3R5cGUqKgkJYXR5cGVzKQogeworCXVuc2lnbmVkIGludAlieXRlcwk9IDA7CisJdW5zaWduZWQgaW50CWk7CisJZmZpX3R5cGUqKgkJcHRyOworCiAJaWYgKGNpZiA9PSBOVUxMKQogCQlyZXR1cm4gRkZJX0JBRF9UWVBFREVGOwogCiAJaWYgKGFiaSA8PSBGRklfRklSU1RfQUJJIHx8IGFiaSA+IEZGSV9ERUZBVUxUX0FCSSkKIAkJcmV0dXJuIEZGSV9CQURfQUJJOwogCi0JdW5zaWduZWQgaW50CWJ5dGVzCT0gMDsKLQl1bnNpZ25lZCBpbnQJaTsKLQlmZmlfdHlwZSoqCQlwdHI7Ci0KIAljaWYtPmFiaSA9IGFiaTsKIAljaWYtPmFyZ190eXBlcyA9IGF0eXBlczsKIAljaWYtPm5hcmdzID0gbmFyZ3M7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMKaW5kZXggMmFmZmIxNC4uZjI2MTBjMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYwpAQCAtMjI1LDE0ICsyMjUsMTYgQEAKIAkJCS8qIE1lcmdlIHRoZSBmaWVsZHMgb2Ygc3RydWN0dXJlLiAgKi8KIAkJCWZvciAocHRyID0gdHlwZS0+ZWxlbWVudHM7ICpwdHIgIT0gTlVMTDsgcHRyKyspCiAJCQl7CisJCQkJaW50IG51bSwgcG9zOworCiAJCQkJYnl0ZV9vZmZzZXQgPSBBTElHTihieXRlX29mZnNldCwgKCpwdHIpLT5hbGlnbm1lbnQpOwogCi0JCQkJaW50CW51bSA9IGNsYXNzaWZ5X2FyZ3VtZW50KCpwdHIsIHN1YmNsYXNzZXMsIGJ5dGVfb2Zmc2V0ICUgOCk7CisJCQkJbnVtID0gY2xhc3NpZnlfYXJndW1lbnQoKnB0ciwgc3ViY2xhc3NlcywgYnl0ZV9vZmZzZXQgJSA4KTsKIAogCQkJCWlmIChudW0gPT0gMCkKIAkJCQkJcmV0dXJuIDA7CiAKLQkJCQlpbnQgcG9zID0gYnl0ZV9vZmZzZXQgLyA4OworCQkJCXBvcyA9IGJ5dGVfb2Zmc2V0IC8gODsKIAogCQkJCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKIAkJCQl7CkBAIC01ODksMTEgKzU5MSwxMiBAQAogCXZvaWQJCQkoKmZ1bikoZmZpX2NpZiosIHZvaWQqLCB2b2lkKiosIHZvaWQqKSwKIAl2b2lkKgkJCXVzZXJfZGF0YSkKIHsKKwkJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqCXRyYW1wOworCiAJaWYgKGNpZi0+YWJpICE9IEZGSV9VTklYNjQpCiAJCXJldHVybiBGRklfQkFEX0FCSTsKIAotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0Kgl0cmFtcCA9Ci0JCSh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopJmNsb3N1cmUtPnRyYW1wWzBdOworCXRyYW1wID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KikmY2xvc3VyZS0+dHJhbXBbMF07CiAKIAl0cmFtcFswXSA9IDB4YmI0OTsJCS8qIG1vdiA8Y29kZT4sICVyMTEJKi8KIAkqKHZvaWQqIHZvbGF0aWxlKikmdHJhbXBbMV0gPSBmZmlfY2xvc3VyZV91bml4NjQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jIGIvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYwppbmRleCAyNWQ5OTk2Li43MjhmNzUxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKQEAgLTQxNyw2ICs0MTcsOCBAQAogICAgICAgICAgICB0aGF0KS4gVXNlICdCJyBmb3IgYnl0ZXMuICovCiAgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiQiIpOwogICAgIH0KKyAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKIAogI2RlZmluZSByZWFsZGljdCAoKFB5T2JqZWN0ICopJnN0Z2RpY3QtPmRpY3QpCiAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CkBAIC00ODMsNyArNDg1LDcgQEAKICAgICAgICAgICAgIGNoYXIgKmZpZWxkZm10ID0gZGljdC0+Zm9ybWF0ID8gZGljdC0+Zm9ybWF0IDogIkIiOwogICAgICAgICAgICAgY2hhciAqZmllbGRuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lKTsKICAgICAgICAgICAgIGNoYXIgKnB0cjsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOyAKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwogICAgICAgICAgICAgY2hhciAqYnVmOwogCiAgICAgICAgICAgICBpZiAoZmllbGRuYW1lID09IE5VTEwpCkBAIC01MDMsNyArNTA1LDEyIEBACiAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVzOiVzOiIsIGZpZWxkZm10LCBmaWVsZG5hbWUpOwogCiAgICAgICAgICAgICBwdHIgPSBzdGdkaWN0LT5mb3JtYXQ7Ci0gICAgICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoc3RnZGljdC0+Zm9ybWF0LCBidWYpOworICAgICAgICAgICAgaWYgKGRpY3QtPnNoYXBlICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmdfd2l0aF9zaGFwZSgKKyAgICAgICAgICAgICAgICAgICAgZGljdC0+bmRpbSwgZGljdC0+c2hhcGUsIHN0Z2RpY3QtPmZvcm1hdCwgYnVmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKHN0Z2RpY3QtPmZvcm1hdCwgYnVmKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5TWVtX0ZyZWUocHRyKTsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwppbmRleCBmNTYwNzAyLi44N2I5YzA1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYworKysgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwpAQCAtMTE3LDcgKzExNyw3IEBACiB7CiAgICAgbGlzdF9vZl9wYW5lbHMgKm5ldzsKIAotICAgIGlmICgobmV3ID0gKGxpc3Rfb2ZfcGFuZWxzICopbWFsbG9jKHNpemVvZihsaXN0X29mX3BhbmVscykpKSA9PSBOVUxMKSB7CisgICAgaWYgKChuZXcgPSAobGlzdF9vZl9wYW5lbHMgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKGxpc3Rfb2ZfcGFuZWxzKSkpID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgIHRlbXAgPSBsb3A7CiAgICAgaWYgKHRlbXAtPnBvID09IHBvKSB7CiAgICAgICAgIGxvcCA9IHRlbXAtPm5leHQ7Ci0gICAgICAgIGZyZWUodGVtcCk7CisgICAgICAgIFB5TWVtX0ZyZWUodGVtcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgd2hpbGUgKHRlbXAtPm5leHQgPT0gTlVMTCB8fCB0ZW1wLT5uZXh0LT5wbyAhPSBwbykgewpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgIH0KICAgICBuID0gdGVtcC0+bmV4dC0+bmV4dDsKLSAgICBmcmVlKHRlbXAtPm5leHQpOworICAgIFB5TWVtX0ZyZWUodGVtcC0+bmV4dCk7CiAgICAgdGVtcC0+bmV4dCA9IG47CiAgICAgcmV0dXJuOwogfQpAQCAtNTEzLDYgKzUxMyw4IEBACiAgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIGltcG9ydF9jdXJzZXMoKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBmYWlsOwogCiAgICAgLyogRm9yIGV4Y2VwdGlvbiBfY3Vyc2VzX3BhbmVsLmVycm9yICovCiAgICAgX2N1cnNlc19wYW5lbHN0YXRlKG0pLT5QeUN1cnNlc0Vycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfY3Vyc2VzX3BhbmVsLmVycm9yIiwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCmluZGV4IDEzY2ZjZjUuLjVmZmNlMmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCkBAIC0xMzQsNiArMTM0LDEyIEBACiAjZGVmaW5lIFNUUklDVF9TWVNWX0NVUlNFUwogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBjdXJzZXMKK2NsYXNzIGN1cnNlcy53aW5kb3cgIlB5Q3Vyc2VzV2luZG93T2JqZWN0ICoiICImUHlDdXJzZXNXaW5kb3dfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTg4Yzg2MGFiZGJiNTBlMGNdKi8KKwogLyogRGVmaW5pdGlvbiBvZiBleGNlcHRpb24gY3Vyc2VzLmVycm9yICovCiAKIHN0YXRpYyBQeU9iamVjdCAqUHlDdXJzZXNFcnJvcjsKQEAgLTE2OCwxMCArMTc0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGNhbGwgc3RhcnRfY29sb3IoKSBmaXJzdCIpOyAgICAgICBcCiAgICAgICAgIHJldHVybiAwOyB9CiAKLSNpZm5kZWYgTUlOCi0jZGVmaW5lIE1JTih4LHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0jZW5kaWYKLQogLyogVXRpbGl0eSBGdW5jdGlvbnMgKi8KIAogLyoKQEAgLTUzMyw3ICs1MzUsNyBAQAogICAgIHdvID0gUHlPYmplY3RfTkVXKFB5Q3Vyc2VzV2luZG93T2JqZWN0LCAmUHlDdXJzZXNXaW5kb3dfVHlwZSk7CiAgICAgaWYgKHdvID09IE5VTEwpIHJldHVybiBOVUxMOwogICAgIHdvLT53aW4gPSB3aW47Ci0gICAgd28tPmVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKKyAgICB3by0+ZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKGVuY29kaW5nKTsKICAgICBpZiAod28tPmVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHdvKTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTU0Nyw3NCArNTQ5LDE0NSBAQAogewogICAgIGlmICh3by0+d2luICE9IHN0ZHNjcikgZGVsd2luKHdvLT53aW4pOwogICAgIGlmICh3by0+ZW5jb2RpbmcgIT0gTlVMTCkKLSAgICAgICAgZnJlZSh3by0+ZW5jb2RpbmcpOworICAgICAgICBQeU1lbV9GcmVlKHdvLT5lbmNvZGluZyk7CiAgICAgUHlPYmplY3RfREVMKHdvKTsKIH0KIAogLyogQWRkY2gsIEFkZHN0ciwgQWRkbnN0ciAqLwogCisvKltjbGluaWMgaW5wdXRdCisKK2N1cnNlcy53aW5kb3cuYWRkY2gKKworICAgIFsKKyAgICB5OiBpbnQKKyAgICAgIFktY29vcmRpbmF0ZS4KKyAgICB4OiBpbnQKKyAgICAgIFgtY29vcmRpbmF0ZS4KKyAgICBdCisKKyAgICBjaDogb2JqZWN0CisgICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorCisgICAgWworICAgIGF0dHI6IGxvbmcKKyAgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgXQorICAgIC8KKworUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ci4KKworUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ciwKK292ZXJ3cml0aW5nIGFueSBjaGFyYWN0ZXIgcHJldmlvdXNseSBwYWludGVkIGF0IHRoYXQgbG9jYXRpb24uCitCeSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGFuZCBhdHRyaWJ1dGVzIGFyZSB0aGUKK2N1cnJlbnQgc2V0dGluZ3MgZm9yIHRoZSB3aW5kb3cgb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoY3Vyc2VzX3dpbmRvd19hZGRjaF9fZG9jX18sCisiYWRkY2goW3ksIHgsXSBjaCwgW2F0dHJdKVxuIgorIlBhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIuXG4iCisiXG4iCisiICB5XG4iCisiICAgIFktY29vcmRpbmF0ZS5cbiIKKyIgIHhcbiIKKyIgICAgWC1jb29yZGluYXRlLlxuIgorIiAgY2hcbiIKKyIgICAgQ2hhcmFjdGVyIHRvIGFkZC5cbiIKKyIgIGF0dHJcbiIKKyIgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci5cbiIKKyJcbiIKKyJQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLFxuIgorIm92ZXJ3cml0aW5nIGFueSBjaGFyYWN0ZXIgcHJldmlvdXNseSBwYWludGVkIGF0IHRoYXQgbG9jYXRpb24uXG4iCisiQnkgZGVmYXVsdCwgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBhbmQgYXR0cmlidXRlcyBhcmUgdGhlXG4iCisiY3VycmVudCBzZXR0aW5ncyBmb3IgdGhlIHdpbmRvdyBvYmplY3QuIik7CisKKyNkZWZpbmUgQ1VSU0VTX1dJTkRPV19BRERDSF9NRVRIT0RERUYgICAgXAorICAgIHsiYWRkY2giLCAoUHlDRnVuY3Rpb24pY3Vyc2VzX3dpbmRvd19hZGRjaCwgTUVUSF9WQVJBUkdTLCBjdXJzZXNfd2luZG93X2FkZGNoX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QeUN1cnNlc1dpbmRvd19BZGRDaChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIGludCBncm91cF9sZWZ0XzEsIGludCB5LCBpbnQgeCwgUHlPYmplY3QgKmNoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgbG9uZyBhdHRyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2N1cnNlc193aW5kb3dfYWRkY2goUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBydG4sIHgsIHksIHVzZV94eSA9IEZBTFNFOwotICAgIFB5T2JqZWN0ICpjaG9iajsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZ3JvdXBfbGVmdF8xID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAgaW50IHggPSAwOworICAgIFB5T2JqZWN0ICpjaDsKKyAgICBpbnQgZ3JvdXBfcmlnaHRfMSA9IDA7CisgICAgbG9uZyBhdHRyID0gMDsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86YWRkY2giLCAmY2gpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9sOmFkZGNoIiwgJmNoLCAmYXR0cikpCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgZ3JvdXBfcmlnaHRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU86YWRkY2giLCAmeSwgJngsICZjaCkpCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgZ3JvdXBfbGVmdF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpT2w6YWRkY2giLCAmeSwgJngsICZjaCwgJmF0dHIpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgZ3JvdXBfbGVmdF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImN1cnNlcy53aW5kb3cuYWRkY2ggcmVxdWlyZXMgMSB0byA0IGFyZ3VtZW50cyIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZXR1cm5fdmFsdWUgPSBjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoc2VsZiwgZ3JvdXBfbGVmdF8xLCB5LCB4LCBjaCwgZ3JvdXBfcmlnaHRfMSwgYXR0cik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2N1cnNlc193aW5kb3dfYWRkY2hfaW1wbChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgaW50IGdyb3VwX2xlZnRfMSwgaW50IHksIGludCB4LCBQeU9iamVjdCAqY2gsIGludCBncm91cF9yaWdodF8xLCBsb25nIGF0dHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDRiOTdjYzI4NzAxMGM1NCBpbnB1dD01YTQxZWZiMzRhMmRlMzM4XSovCit7CisgICAgUHlDdXJzZXNXaW5kb3dPYmplY3QgKmN3c2VsZiA9IChQeUN1cnNlc1dpbmRvd09iamVjdCAqKXNlbGY7CisgICAgaW50IGNvb3JkaW5hdGVzX2dyb3VwID0gZ3JvdXBfbGVmdF8xOworICAgIGludCBhdHRyX2dyb3VwID0gZ3JvdXBfcmlnaHRfMTsKKyAgICBpbnQgcnRuOwogICAgIGludCB0eXBlOwotICAgIGNodHlwZSBjaDsKKyAgICBjaHR5cGUgY2NoOwogI2lmZGVmIEhBVkVfTkNVUlNFU1cKICAgICBjY2hhcl90IHdjaDsKICNlbmRpZgotICAgIGF0dHJfdCBhdHRyID0gQV9OT1JNQUw7Ci0gICAgbG9uZyBsYXR0cjsKICAgICBjb25zdCBjaGFyICpmdW5jbmFtZTsKIAotICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk87Y2ggb3IgaW50IiwgJmNob2JqKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2w7Y2ggb3IgaW50LGF0dHIiLCAmY2hvYmosICZsYXR0cikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaU87eSx4LGNoIG9yIGludCIsICZ5LCAmeCwgJmNob2JqKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB1c2VfeHkgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaU9sO3kseCxjaCBvciBpbnQsIGF0dHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnksICZ4LCAmY2hvYmosICZsYXR0cikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICB1c2VfeHkgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYWRkY2ggcmVxdWlyZXMgMSB0byA0IGFyZ3VtZW50cyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFhdHRyX2dyb3VwKQorICAgICAgYXR0ciA9IEFfTk9STUFMOwogCiAjaWZkZWYgSEFWRV9OQ1VSU0VTVwotICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KHNlbGYsIGNob2JqLCAmY2gsICZ3Y2gpOworICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KGN3c2VsZiwgY2gsICZjY2gsICZ3Y2gpOwogICAgIGlmICh0eXBlID09IDIpIHsKICAgICAgICAgZnVuY25hbWUgPSAiYWRkX3djaCI7CiAgICAgICAgIHdjaC5hdHRyID0gYXR0cjsKLSAgICAgICAgaWYgKHVzZV94eSA9PSBUUlVFKQotICAgICAgICAgICAgcnRuID0gbXZ3YWRkX3djaChzZWxmLT53aW4seSx4LCAmd2NoKTsKKyAgICAgICAgaWYgKGNvb3JkaW5hdGVzX2dyb3VwKQorICAgICAgICAgICAgcnRuID0gbXZ3YWRkX3djaChjd3NlbGYtPndpbix5LHgsICZ3Y2gpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IHdhZGRfd2NoKHNlbGYtPndpbiwgJndjaCk7CisgICAgICAgICAgICBydG4gPSB3YWRkX3djaChjd3NlbGYtPndpbiwgJndjaCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogI2Vsc2UKLSAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChzZWxmLCBjaG9iaiwgJmNoKTsKKyAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChjd3NlbGYsIGNoLCAmY2NoKTsKICNlbmRpZgogICAgIGlmICh0eXBlID09IDEpIHsKICAgICAgICAgZnVuY25hbWUgPSAiYWRkY2giOwotICAgICAgICBpZiAodXNlX3h5ID09IFRSVUUpCi0gICAgICAgICAgICBydG4gPSBtdndhZGRjaChzZWxmLT53aW4seSx4LCBjaCB8IGF0dHIpOworICAgICAgICBpZiAoY29vcmRpbmF0ZXNfZ3JvdXApCisgICAgICAgICAgICBydG4gPSBtdndhZGRjaChjd3NlbGYtPndpbix5LHgsIGNjaCB8IGF0dHIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IHdhZGRjaChzZWxmLT53aW4sIGNoIHwgYXR0cik7CisgICAgICAgICAgICBydG4gPSB3YWRkY2goY3dzZWxmLT53aW4sIGNjaCB8IGF0dHIpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtMTIxMiw3ICsxMjg1LDcgQEAKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJ0bjIgPSB3Z2V0bnN0cihzZWxmLT53aW4scnRuLE1JTihuLCAxMDIzKSk7CisgICAgICAgIHJ0bjIgPSB3Z2V0bnN0cihzZWxmLT53aW4sIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgpAQCAtMTIzMiwxMSArMTMwNSwxMSBAQAogI2lmZGVmIFNUUklDVF9TWVNWX0NVUlNFUwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJ0bjIgPSB3bW92ZShzZWxmLT53aW4seSx4KT09RVJSID8gRVJSIDoKLSAgICAgICAgd2dldG5zdHIoc2VsZi0+d2luLCBydG4sIE1JTihuLCAxMDIzKSk7CisgICAgICAgIHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogI2Vsc2UKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBydG4yID0gbXZ3Z2V0bnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IG12d2dldG5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZW5kaWYKICAgICAgICAgYnJlYWs7CkBAIC0xMzc1LDcgKzE0NDgsNyBAQAogICAgIGNhc2UgMToKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBydG4yID0gd2lubnN0cihzZWxmLT53aW4scnRuLE1JTihuLDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IHdpbm5zdHIoc2VsZi0+d2luLCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3kseCIsJnksJngpKQpAQCAtMTM4NSw3ICsxNDU4LDcgQEAKICAgICBjYXNlIDM6CiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpO3kseCxuIiwgJnksICZ4LCAmbikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcnRuMiA9IG12d2lubnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sMTAyMykpOworICAgICAgICBydG4yID0gbXZ3aW5uc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBQeV9NSU4obiwxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbnN0ciByZXF1aXJlcyAwIG9yIDMgYXJndW1lbnRzIik7CkBAIC0xNjk5LDI2ICsxNzcyLDI0IEBACiAgICAgLyogV2UgaGF2ZSB0byBzaW11bGF0ZSB0aGlzIGJ5IHdyaXRpbmcgdG8gYSB0ZW1wb3JhcnkgRklMRSosCiAgICAgICAgdGhlbiByZWFkaW5nIGJhY2ssIHRoZW4gd3JpdGluZyB0byB0aGUgYXJndW1lbnQgc3RyZWFtLiAqLwogICAgIGNoYXIgZm5bMTAwXTsKLSAgICBpbnQgZmQ7Ci0gICAgRklMRSAqZnA7Ci0gICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBzdHJjcHkoZm4sICIvdG1wL3B5LmN1cnNlcy5wdXR3aW4uWFhYWFhYIik7CiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgZnAgPSBmZG9wZW4oZmQsICJ3YisiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIHJlcyA9IFB5Q3Vyc2VzQ2hlY2tFUlIocHV0d2luKHNlbGYtPndpbiwgZnApLCAicHV0d2luIik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQorICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIGZzZWVrKGZwLCAwLCAwKTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBjaGFyIGJ1ZltCVUZTSVpdOwpAQCAtMTczMiw3ICsxODAzLDEyIEBACiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBmY2xvc2UoZnApOworCitleGl0OgorICAgIGlmIChmcCAhPSBOVUxMKQorICAgICAgICBmY2xvc2UoZnApOworICAgIGVsc2UgaWYgKGZkICE9IC0xKQorICAgICAgICBjbG9zZShmZCk7CiAgICAgcmVtb3ZlKGZuKTsKICAgICByZXR1cm4gcmVzOwogfQpAQCAtMTk0MywyMCArMjAxOSwyMCBAQAogICAgIGFzY2lpID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcodmFsdWUpOwogICAgIGlmIChhc2NpaSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgZW5jb2RpbmcgPSBzdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKKyAgICBlbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKICAgICBQeV9ERUNSRUYoYXNjaWkpOwogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lbmNvZGluZyk7CiAgICAgc2VsZi0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKICAgICByZXR1cm4gMDsKIH0KIAogCiBzdGF0aWMgUHlNZXRob2REZWYgUHlDdXJzZXNXaW5kb3dfTWV0aG9kc1tdID0gewotICAgIHsiYWRkY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIENVUlNFU19XSU5ET1dfQUREQ0hfTUVUSE9EREVGCiAgICAgeyJhZGRuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkTlN0ciwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRTdHIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJhdHRyb2ZmIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9mZiwgTUVUSF9WQVJBUkdTfSwKQEAgLTIwMTIsOCArMjA4OCw2IEBACiAgICAgeyJub2RlbGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbm9kZWxheSwgTUVUSF9WQVJBUkdTfSwKICAgICB7Im5vdGltZW91dCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19ub3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJub3V0cmVmcmVzaCIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfTm9PdXRSZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAotICAgIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWxpYXMgLS0gcmVtb3ZlIGluIFB5dGhvbiAyLjMgKi8KLSAgICB7Im5vb3V0cmVmcmVzaCIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ob091dFJlZnJlc2gsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJvdmVybGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfT3ZlcmxheSwgTUVUSF9WQVJBUkdTfSwKICAgICB7Im92ZXJ3cml0ZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19PdmVyd3JpdGUsCiAgICAgIE1FVEhfVkFSQVJHU30sCkBAIC0yMjU3LDEyICsyMzMxLDEzIEBACiBQeUN1cnNlc19HZXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJlYW0pCiB7CiAgICAgY2hhciBmblsxMDBdOwotICAgIGludCBmZDsKLSAgICBGSUxFICpmcDsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmRhdGE7CiAgICAgc2l6ZV90IGRhdGFsZW47CiAgICAgV0lORE9XICp3aW47CiAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCkBAIC0yMjcwLDQ0ICsyMzQ1LDQ3IEBACiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGZwID0gZmRvcGVuKGZkLCAid2IrIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CisKICAgICBkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzdHJlYW0sICZQeUlkX3JlYWQsICIiKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImYucmVhZCgpIHJldHVybmVkICUuMTAwcyBpbnN0ZWFkIG9mIGJ5dGVzIiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBkYXRhbGVuID0gUHlCeXRlc19HRVRfU0laRShkYXRhKTsKICAgICBpZiAoZndyaXRlKFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpLCAxLCBkYXRhbGVuLCBmcCkgIT0gZGF0YWxlbikgewogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBQeV9ERUNSRUYoZGF0YSk7CisKICAgICBmc2VlayhmcCwgMCwgMCk7CiAgICAgd2luID0gZ2V0d2luKGZwKTsKLSAgICBmY2xvc2UoZnApOwotICAgIHJlbW92ZShmbik7CiAgICAgaWYgKHdpbiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHJldHVybiBQeUN1cnNlc1dpbmRvd19OZXcod2luLCBOVUxMKTsKKyAgICByZXMgPSBQeUN1cnNlc1dpbmRvd19OZXcod2luLCBOVUxMKTsKKworZXJyb3I6CisgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgIGZjbG9zZShmcCk7CisgICAgZWxzZSBpZiAoZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKGZkKTsKKyAgICByZW1vdmUoZm4pOworICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNDE1LDcgKzM0OTMsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKHN0cm5jbXAoa2V5X24sIktFWV9GKCIsNik9PTApIHsKICAgICAgICAgICAgICAgICBjaGFyICpwMSwgKnAyOwotICAgICAgICAgICAgICAgIGtleV9uMiA9IG1hbGxvYyhzdHJsZW4oa2V5X24pKzEpOworICAgICAgICAgICAgICAgIGtleV9uMiA9IFB5TWVtX01hbGxvYyhzdHJsZW4oa2V5X24pKzEpOwogICAgICAgICAgICAgICAgIGlmICgha2V5X24yKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQzNCw3ICszNTEyLDcgQEAKICAgICAgICAgICAgICAgICBrZXlfbjIgPSBrZXlfbjsKICAgICAgICAgICAgIFNldERpY3RJbnQoa2V5X24yLGtleSk7CiAgICAgICAgICAgICBpZiAoa2V5X24yICE9IGtleV9uKQotICAgICAgICAgICAgICAgIGZyZWUoa2V5X24yKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKGtleV9uMik7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBTZXREaWN0SW50KCJLRVlfTUlOIiwgS0VZX01JTik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jIGIvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwppbmRleCBmYTIzMWQ5Li5kODIyNWJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKQEAgLTE2LDYgKzE2LDEyIEBACiAjaW5jbHVkZSAiZGF0ZXRpbWUuaCIKICN1bmRlZiBQeV9CVUlMRF9DT1JFCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBkYXRldGltZQorY2xhc3MgZGF0ZXRpbWUuZGF0ZXRpbWUgIlB5RGF0ZVRpbWVfRGF0ZVRpbWUgKiIgIiZQeURhdGVUaW1lX0RhdGVUaW1lVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTc4MTQyY2I2NGI5ZTk4YmNdKi8KKwogLyogV2UgcmVxdWlyZSB0aGF0IEMgaW50IGJlIGF0IGxlYXN0IDMyIGJpdHMsIGFuZCB1c2UgaW50IHZpcnR1YWxseQogICogZXZlcnl3aGVyZS4gIEluIGp1c3QgYSBmZXcgY2FzZXMgd2UgdXNlIGEgdGVtcCBsb25nLCB3aGVyZSBhIFB5dGhvbgogICogQVBJIHJldHVybnMgYSBDIGxvbmcuICBJbiBzdWNoIGNhc2VzLCB3ZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZQpAQCAtMTA0LDYgKzExMCwxMSBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBQeURhdGVUaW1lX1RaSW5mb1R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5RGF0ZVRpbWVfVGltZVpvbmVUeXBlOwogCitfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKK19QeV9JREVOVElGSUVSKGZyb211dGMpOworX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKK19QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBNYXRoIHV0aWxpdGllcy4KICAqLwpAQCAtMTQwLDE5ICsxNTEsNiBAQAogICAgIHJldHVybiBxdW87CiB9CiAKLS8qIFJvdW5kIGEgZG91YmxlIHRvIHRoZSBuZWFyZXN0IGxvbmcuICB8eHwgbXVzdCBiZSBzbWFsbCBlbm91Z2ggdG8gZml0Ci0gKiBpbiBhIEMgbG9uZzsgdGhpcyBpcyBub3QgY2hlY2tlZC4KLSAqLwotc3RhdGljIGxvbmcKLXJvdW5kX3RvX2xvbmcoZG91YmxlIHgpCi17Ci0gICAgaWYgKHggPj0gMC4wKQotICAgICAgICB4ID0gZmxvb3IoeCArIDAuNSk7Ci0gICAgZWxzZQotICAgICAgICB4ID0gY2VpbCh4IC0gMC41KTsKLSAgICByZXR1cm4gKGxvbmcpeDsKLX0KLQogLyogTmVhcmVzdCBpbnRlZ2VyIHRvIG0gLyBuIGZvciBpbnRlZ2VycyBtIGFuZCBuLiBIYWxmLWludGVnZXIgcmVzdWx0cwogICogYXJlIHJvdW5kZWQgdG8gZXZlbi4KICAqLwpAQCAtNjE1LDcgKzYxMyw3IEBACiAgICAgICAgICAgICAgICAgc2l6ZW9mKF9QeURhdGVUaW1lX0Jhc2VUaW1lKSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVChzZWxmLCB0eXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC02MzAsNyArNjI4LDcgQEAKICAgICAgICAgICAgICAgICBzaXplb2YoX1B5RGF0ZVRpbWVfQmFzZURhdGVUaW1lKSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVChzZWxmLCB0eXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC04OTksMTEgKzg5NywxMSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJ0emluZm8uJXMoKSBtdXN0IHJldHVybiBOb25lIG9yICIKICAgICAgICAgICAgICAgICAgICAgICJ0aW1lZGVsdGEsIG5vdCAnJS4yMDBzJyIsCiAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBQeV9UWVBFKG9mZnNldCktPnRwX25hbWUpOworICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMjkwLDggKzEyODgsNiBAQAogICAgICAgICAgICAgZ290byBEb25lOwogICAgICAgICBmb3JtYXQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeUJ5dGVzX0FTX1NUUklORyhuZXdmbXQpKTsKICAgICAgICAgaWYgKGZvcm1hdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBfUHlfSURFTlRJRklFUihzdHJmdGltZSk7Ci0KICAgICAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodGltZSwgJlB5SWRfc3RyZnRpbWUsICJPTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdGltZXR1cGxlLCBOVUxMKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihmb3JtYXQpOwpAQCAtMTM5Nyw3ICsxMzkzLDcgQEAKICAqLwogCiAvKiBDb252ZXJzaW9uIGZhY3RvcnMuICovCi1zdGF0aWMgUHlPYmplY3QgKnVzX3Blcl91cyA9IE5VTEw7ICAgICAgLyogMSAqLworc3RhdGljIFB5T2JqZWN0ICpvbmUgPSBOVUxMOyAgICAgIC8qIDEgKi8KIHN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX21zID0gTlVMTDsgICAgICAvKiAxMDAwICovCiBzdGF0aWMgUHlPYmplY3QgKnVzX3Blcl9zZWNvbmQgPSBOVUxMOyAgLyogMTAwMDAwMCAqLwogc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfbWludXRlID0gTlVMTDsgIC8qIDFlNiAqIDYwIGFzIFB5dGhvbiBpbnQgKi8KQEAgLTE1NzksNyArMTU3NSw2IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnB5dXNfaW4gPSBOVUxMLCAqdGVtcCwgKnB5dXNfb3V0OwogICAgIFB5T2JqZWN0ICpyYXRpbyA9IE5VTEw7Ci0gICAgX1B5X0lERU5USUZJRVIoYXNfaW50ZWdlcl9yYXRpbyk7CiAKICAgICBweXVzX2luID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKGRlbHRhKTsKICAgICBpZiAocHl1c19pbiA9PSBOVUxMKQpAQCAtMTY3OCw3ICsxNjczLDYgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcHl1c19pbiA9IE5VTEwsICp0ZW1wLCAqcHl1c19vdXQ7CiAgICAgUHlPYmplY3QgKnJhdGlvID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKIAogICAgIHB5dXNfaW4gPSBkZWx0YV90b19taWNyb3NlY29uZHMoZGVsdGEpOwogICAgIGlmIChweXVzX2luID09IE5VTEwpCkBAIC0yMTE5LDcgKzIxMTMsNyBAQAogICAgICAgICBnb3RvIERvbmUKIAogICAgIGlmICh1cykgewotICAgICAgICB5ID0gYWNjdW0oIm1pY3Jvc2Vjb25kcyIsIHgsIHVzLCB1c19wZXJfdXMsICZsZWZ0b3Zlcl91cyk7CisgICAgICAgIHkgPSBhY2N1bSgibWljcm9zZWNvbmRzIiwgeCwgdXMsIG9uZSwgJmxlZnRvdmVyX3VzKTsKICAgICAgICAgQ0xFQU5VUDsKICAgICB9CiAgICAgaWYgKG1zKSB7CkBAIC0yMTQ4LDcgKzIxNDIsMzMgQEAKICAgICB9CiAgICAgaWYgKGxlZnRvdmVyX3VzKSB7CiAgICAgICAgIC8qIFJvdW5kIHRvIG5lYXJlc3Qgd2hvbGUgIyBvZiB1cywgYW5kIGFkZCBpbnRvIHguICovCi0gICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gUHlMb25nX0Zyb21Mb25nKHJvdW5kX3RvX2xvbmcobGVmdG92ZXJfdXMpKTsKKyAgICAgICAgZG91YmxlIHdob2xlX3VzID0gcm91bmQobGVmdG92ZXJfdXMpOworICAgICAgICBpbnQgeF9pc19vZGQ7CisgICAgICAgIFB5T2JqZWN0ICp0ZW1wOworCisgICAgICAgIHdob2xlX3VzID0gcm91bmQobGVmdG92ZXJfdXMpOworICAgICAgICBpZiAoZmFicyh3aG9sZV91cyAtIGxlZnRvdmVyX3VzKSA9PSAwLjUpIHsKKyAgICAgICAgICAgIC8qIFdlJ3JlIGV4YWN0bHkgaGFsZndheSBiZXR3ZWVuIHR3byBpbnRlZ2Vycy4gIEluIG9yZGVyCisgICAgICAgICAgICAgKiB0byBkbyByb3VuZC1oYWxmLXRvLWV2ZW4sIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgeAorICAgICAgICAgICAgICogaXMgb2RkLiBOb3RlIHRoYXQgeCBpcyBvZGQgd2hlbiBpdCdzIGxhc3QgYml0IGlzIDEuIFRoZQorICAgICAgICAgICAgICogY29kZSBiZWxvdyB1c2VzIGJpdHdpc2UgYW5kIG9wZXJhdGlvbiB0byBjaGVjayB0aGUgbGFzdAorICAgICAgICAgICAgICogYml0LiAqLworICAgICAgICAgICAgdGVtcCA9IFB5TnVtYmVyX0FuZCh4LCBvbmUpOyAgLyogdGVtcCA8LSB4ICYgMSAqLworICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4X2lzX29kZCA9IFB5T2JqZWN0X0lzVHJ1ZSh0ZW1wKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICAgICAgICAgIGlmICh4X2lzX29kZCA9PSAtMSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aG9sZV91cyA9IDIuMCAqIHJvdW5kKChsZWZ0b3Zlcl91cyArIHhfaXNfb2RkKSAqIDAuNSkgLSB4X2lzX29kZDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXAgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpd2hvbGVfdXMpOworCiAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKICAgICAgICAgICAgIGdvdG8gRG9uZTsKQEAgLTIyMzksMjIgKzIyNTksMTQgQEAKIHsKICAgICBQeU9iamVjdCAqdG90YWxfc2Vjb25kczsKICAgICBQeU9iamVjdCAqdG90YWxfbWljcm9zZWNvbmRzOwotICAgIFB5T2JqZWN0ICpvbmVfbWlsbGlvbjsKIAogICAgIHRvdGFsX21pY3Jvc2Vjb25kcyA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcygoUHlEYXRlVGltZV9EZWx0YSAqKXNlbGYpOwogICAgIGlmICh0b3RhbF9taWNyb3NlY29uZHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBvbmVfbWlsbGlvbiA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwMDAwTCk7Ci0gICAgaWYgKG9uZV9taWxsaW9uID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHRvdGFsX21pY3Jvc2Vjb25kcyk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHRvdGFsX3NlY29uZHMgPSBQeU51bWJlcl9UcnVlRGl2aWRlKHRvdGFsX21pY3Jvc2Vjb25kcywgb25lX21pbGxpb24pOworICAgIHRvdGFsX3NlY29uZHMgPSBQeU51bWJlcl9UcnVlRGl2aWRlKHRvdGFsX21pY3Jvc2Vjb25kcywgdXNfcGVyX3NlY29uZCk7CiAKICAgICBQeV9ERUNSRUYodG90YWxfbWljcm9zZWNvbmRzKTsKLSAgICBQeV9ERUNSRUYob25lX21pbGxpb24pOwogICAgIHJldHVybiB0b3RhbF9zZWNvbmRzOwogfQogCkBAIC0yNDQ3LDcgKzI0NTksNyBAQAogICAgIHN0cnVjdCB0bSAqdG07CiAgICAgdGltZV90IHQ7CiAKLSAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVfdChvYmosICZ0KSA9PSAtMSkKKyAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVfdChvYmosICZ0LCBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHRtID0gbG9jYWx0aW1lKCZ0KTsKQEAgLTI2MzAsOCArMjY0Miw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGF0ZV9zdHIoUHlEYXRlVGltZV9EYXRlICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKGlzb2Zvcm1hdCk7Ci0KICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9pc29mb3JtYXQsICIoKSIpOwogfQogCkBAIC0yNjcxLDcgKzI2ODEsNiBAQAogZGF0ZV9mb3JtYXQoUHlEYXRlVGltZV9EYXRlICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqZm9ybWF0OwotICAgIF9QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzIxNSwxMCArMzIyNCwxMCBAQAogICAgIGlmIChvcCAhPSBQeV9FUSAmJiBvcCAhPSBQeV9ORSkKICAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOwogICAgIGlmIChQeV9UWVBFKG90aGVyKSAhPSAmUHlEYXRlVGltZV9UaW1lWm9uZVR5cGUpIHsKLQlpZiAob3AgPT0gUHlfRVEpCi0JICAgIFB5X1JFVFVSTl9GQUxTRTsKLQllbHNlCi0JICAgIFB5X1JFVFVSTl9UUlVFOworICAgICAgICBpZiAob3AgPT0gUHlfRVEpCisgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogICAgIH0KICAgICByZXR1cm4gZGVsdGFfcmljaGNvbXBhcmUoc2VsZi0+b2Zmc2V0LCBvdGhlci0+b2Zmc2V0LCBvcCk7CiB9CkBAIC0zNTg4LDggKzM1OTcsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHRpbWVfc3RyKFB5RGF0ZVRpbWVfVGltZSAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOwotCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfaXNvZm9ybWF0LCAiKCkiKTsKIH0KIApAQCAtNDEyMCw3ICs0MTI3LDcgQEAKICAgICB0aW1lX3QgdGltZXQ7CiAgICAgbG9uZyB1czsKIAotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXZhbCh0aW1lc3RhbXAsICZ0aW1ldCwgJnVzKSA9PSAtMSkKKyAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWV2YWwodGltZXN0YW1wLCAmdGltZXQsICZ1cywgX1B5VGltZV9ST1VORF9ET1dOKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIGRhdGV0aW1lX2Zyb21fdGltZXRfYW5kX3VzKGNscywgZiwgdGltZXQsIChpbnQpdXMsIHR6aW5mbyk7CiB9CkBAIC00MTM4LDMxICs0MTQ1LDczIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyk7CiB9CiAKLS8qIFJldHVybiBiZXN0IHBvc3NpYmxlIGxvY2FsIHRpbWUgLS0gdGhpcyBpc24ndCBjb25zdHJhaW5lZCBieSB0aGUKLSAqIHByZWNpc2lvbiBvZiBhIHRpbWVzdGFtcC4KLSAqLworLypbY2xpbmljIGlucHV0XQorCitAY2xhc3NtZXRob2QKK2RhdGV0aW1lLmRhdGV0aW1lLm5vdworCisgICAgdHo6IG9iamVjdCA9IE5vbmUKKyAgICAgICAgVGltZXpvbmUgb2JqZWN0LgorCitSZXR1cm5zIG5ldyBkYXRldGltZSBvYmplY3QgcmVwcmVzZW50aW5nIGN1cnJlbnQgdGltZSBsb2NhbCB0byB0ei4KKworSWYgbm8gdHogaXMgc3BlY2lmaWVkLCB1c2VzIGxvY2FsIHRpbWV6b25lLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X19kb2NfXywKKyJub3coJHR5cGUsIC8sIHR6PU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIG5ldyBkYXRldGltZSBvYmplY3QgcmVwcmVzZW50aW5nIGN1cnJlbnQgdGltZSBsb2NhbCB0byB0ei5cbiIKKyJcbiIKKyIgIHR6XG4iCisiICAgIFRpbWV6b25lIG9iamVjdC5cbiIKKyJcbiIKKyJJZiBubyB0eiBpcyBzcGVjaWZpZWQsIHVzZXMgbG9jYWwgdGltZXpvbmUuIik7CisKKyNkZWZpbmUgREFURVRJTUVfREFURVRJTUVfTk9XX01FVEhPRERFRiAgICBcCisgICAgeyJub3ciLCAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfZGF0ZXRpbWVfbm93LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU3xNRVRIX0NMQVNTLCBkYXRldGltZV9kYXRldGltZV9ub3dfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWRhdGV0aW1lX25vdyhQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQorZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdHopOworCitzdGF0aWMgUHlPYmplY3QgKgorZGF0ZXRpbWVfZGF0ZXRpbWVfbm93KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJ0eiIsIE5VTEx9OworICAgIFB5T2JqZWN0ICp0eiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ8Tzpub3ciLCBfa2V5d29yZHMsCisgICAgICAgICZ0eikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBkYXRldGltZV9kYXRldGltZV9ub3dfaW1wbCh0eXBlLCB0eik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnR6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU4M2M1NjM3ZTNjODQzZmEgaW5wdXQ9ODBkMDk4NjljNTI2N2QwMF0qLwogewogICAgIFB5T2JqZWN0ICpzZWxmOwotICAgIFB5T2JqZWN0ICp0emluZm8gPSBQeV9Ob25lOwotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJ0eiIsIE5VTEx9OwogCi0gICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE86bm93Iiwga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0emluZm8pKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoY2hlY2tfdHppbmZvX3N1YmNsYXNzKHR6aW5mbykgPCAwKQorICAgIC8qIFJldHVybiBiZXN0IHBvc3NpYmxlIGxvY2FsIHRpbWUgLS0gdGhpcyBpc24ndCBjb25zdHJhaW5lZCBieSB0aGUKKyAgICAgKiBwcmVjaXNpb24gb2YgYSB0aW1lc3RhbXAuCisgICAgICovCisgICAgaWYgKGNoZWNrX3R6aW5mb19zdWJjbGFzcyh0eikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYgPSBkYXRldGltZV9iZXN0X3Bvc3NpYmxlKGNscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm8gPT0gUHlfTm9uZSA/IGxvY2FsdGltZSA6IGdtdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm8pOwotICAgIGlmIChzZWxmICE9IE5VTEwgJiYgdHppbmZvICE9IFB5X05vbmUpIHsKKyAgICBzZWxmID0gZGF0ZXRpbWVfYmVzdF9wb3NzaWJsZSgoUHlPYmplY3QgKil0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6ID09IFB5X05vbmUgPyBsb2NhbHRpbWUgOiBnbXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHopOworICAgIGlmIChzZWxmICE9IE5VTEwgJiYgdHogIT0gUHlfTm9uZSkgewogICAgICAgICAvKiBDb252ZXJ0IFVUQyB0byB0emluZm8ncyB6b25lLiAqLwogICAgICAgICBQeU9iamVjdCAqdGVtcCA9IHNlbGY7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGZyb211dGMpOwogCi0gICAgICAgIHNlbGYgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHR6aW5mbywgJlB5SWRfZnJvbXV0YywgIk8iLCBzZWxmKTsKKyAgICAgICAgc2VsZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodHosICZQeUlkX2Zyb211dGMsICJPIiwgc2VsZik7CiAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKICAgICB9CiAgICAgcmV0dXJuIHNlbGY7CkBAIC00MTk5LDcgKzQyNDgsNiBAQAogICAgIGlmIChzZWxmICE9IE5VTEwgJiYgdHppbmZvICE9IFB5X05vbmUpIHsKICAgICAgICAgLyogQ29udmVydCBVVEMgdG8gdHppbmZvJ3Mgem9uZS4gKi8KICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBzZWxmOwotICAgICAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKIAogICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0emluZm8sICZQeUlkX2Zyb211dGMsICJPIiwgc2VsZik7CiAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKQEAgLTQ0MjEsNiArNDQ2OSw5IEBACiAgICAgICAgICAgICBkZWx0YV91cyA9IERBVEVfR0VUX01JQ1JPU0VDT05EKGxlZnQpIC0KICAgICAgICAgICAgICAgICAgICAgICAgREFURV9HRVRfTUlDUk9TRUNPTkQocmlnaHQpOwogICAgICAgICAgICAgcmVzdWx0ID0gbmV3X2RlbHRhKGRlbHRhX2QsIGRlbHRhX3MsIGRlbHRhX3VzLCAxKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICAgICAgaWYgKG9mZmRpZmYgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRlbHRhX3N1YnRyYWN0KHJlc3VsdCwgb2ZmZGlmZik7CkBAIC00NDgyLDggKzQ1MzMsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRhdGV0aW1lX3N0cihQeURhdGVUaW1lX0RhdGVUaW1lICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKGlzb2Zvcm1hdCk7Ci0KICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9pc29mb3JtYXQsICIocykiLCAiICIpOwogfQogCkBAIC00NzQ5LDcgKzQ3OTgsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgcmVzdWx0ID0gbmV3X3RpbWV6b25lKGRlbHRhLCBuYW1lbyk7Ci0gICAgUHlfREVDUkVGKG5hbWVvKTsKKyAgICBQeV9YREVDUkVGKG5hbWVvKTsKICAgZXJyb3I6CiAgICAgUHlfREVDUkVGKGRlbHRhKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDc2MiwxMSArNDgxMSwxMCBAQAogICAgIFB5T2JqZWN0ICpvZmZzZXQ7CiAgICAgUHlPYmplY3QgKnRlbXA7CiAgICAgUHlPYmplY3QgKnR6aW5mbyA9IFB5X05vbmU7Ci0gICAgX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CiAKICAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8Tzphc3RpbWV6b25lIiwga2V5d29yZHMsCi0JCQkJICAgICAgJnR6aW5mbykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0emluZm8pKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHppbmZvKSA9PSAtMSkKQEAgLTQ4NzMsOSArNDkyMSwxNiBAQAogICAgICAgICB0aW1lLnRtX3dkYXkgPSAtMTsKICAgICAgICAgdGltZS50bV9pc2RzdCA9IC0xOwogICAgICAgICB0aW1lc3RhbXAgPSBta3RpbWUoJnRpbWUpOwotICAgICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwgYnV0IHRtX3dkYXkKLSAgICAgICAgICogY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KLSAgICAgICAgaWYgKHRpbWVzdGFtcCA9PSAodGltZV90KSgtMSkgJiYgdGltZS50bV93ZGF5ID09IC0xKSB7CisgICAgICAgIGlmICh0aW1lc3RhbXAgPT0gKHRpbWVfdCkoLTEpCisjaWZuZGVmIF9BSVgKKyAgICAgICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLAorICAgICAgICAgICAgICogYnV0IHRtX3dkYXkgY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KKyAgICAgICAgICAgICYmIHRpbWUudG1fd2RheSA9PSAtMQorI2Vsc2UKKyAgICAgICAgICAgIC8qIG9uIEFJWCwgdG1fd2RheSBpcyBhbHdheXMgc2V0cywgZXZlbiBvbiBlcnJvciAqLworI2VuZGlmCisgICAgICAgICAgKQorICAgICAgICB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXN0YW1wIG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00OTg5LDkgKzUwNDQsNyBAQAogCiAgICAgLyogQ2xhc3MgbWV0aG9kczogKi8KIAotICAgIHsibm93IiwgICAgICAgICAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfbm93LAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTIHwgTUVUSF9DTEFTUywKLSAgICAgUHlEb2NfU1RSKCJbdHpdIC0+IG5ldyBkYXRldGltZSB3aXRoIHR6J3MgbG9jYWwgZGF5IGFuZCB0aW1lLiIpfSwKKyAgICBEQVRFVElNRV9EQVRFVElNRV9OT1dfTUVUSE9EREVGCiAKICAgICB7InV0Y25vdyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX3V0Y25vdywKICAgICAgTUVUSF9OT0FSR1MgfCBNRVRIX0NMQVNTLApAQCAtNTI5OSw4ICs1MzUyLDggQEAKICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogbW9kdWxlIGluaXRpYWxpemF0aW9uICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1JTllFQVIiLCBNSU5ZRUFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTUFYWUVBUiIsIE1BWFlFQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1JTllFQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1BWFlFQVIpOwogCiAgICAgUHlfSU5DUkVGKCZQeURhdGVUaW1lX0RhdGVUeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImRhdGUiLCAoUHlPYmplY3QgKikgJlB5RGF0ZVRpbWVfRGF0ZVR5cGUpOwpAQCAtNTM0NCwxMiArNTM5NywxMiBAQAogICAgIGFzc2VydChESTEwMFkgPT0gMjUgKiBESTRZIC0gMSk7CiAgICAgYXNzZXJ0KERJMTAwWSA9PSBkYXlzX2JlZm9yZV95ZWFyKDEwMCsxKSk7CiAKLSAgICB1c19wZXJfdXMgPSBQeUxvbmdfRnJvbUxvbmcoMSk7CisgICAgb25lID0gUHlMb25nX0Zyb21Mb25nKDEpOwogICAgIHVzX3Blcl9tcyA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwKTsKICAgICB1c19wZXJfc2Vjb25kID0gUHlMb25nX0Zyb21Mb25nKDEwMDAwMDApOwogICAgIHVzX3Blcl9taW51dGUgPSBQeUxvbmdfRnJvbUxvbmcoNjAwMDAwMDApOwogICAgIHNlY29uZHNfcGVyX2RheSA9IFB5TG9uZ19Gcm9tTG9uZygyNCAqIDM2MDApOwotICAgIGlmICh1c19wZXJfdXMgPT0gTlVMTCB8fCB1c19wZXJfbXMgPT0gTlVMTCB8fCB1c19wZXJfc2Vjb25kID09IE5VTEwgfHwKKyAgICBpZiAob25lID09IE5VTEwgfHwgdXNfcGVyX21zID09IE5VTEwgfHwgdXNfcGVyX3NlY29uZCA9PSBOVUxMIHx8CiAgICAgICAgIHVzX3Blcl9taW51dGUgPT0gTlVMTCB8fCBzZWNvbmRzX3Blcl9kYXkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RibW1vZHVsZS5jIGIvTW9kdWxlcy9fZGJtbW9kdWxlLmMKaW5kZXggODNjMDUxYy4uOTNlYTQxNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGJtbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZGJtbW9kdWxlLmMKQEAgLTE0LDExICsxNCw3IEBACiAgKi8KICNpZiBkZWZpbmVkKEhBVkVfTkRCTV9IKQogI2luY2x1ZGUgPG5kYm0uaD4KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLXN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAibmRibSI7Ci0jZWxzZQogc3RhdGljIGNoYXIgKndoaWNoX2RibSA9ICJHTlUgZ2RibSI7ICAvKiBFTVggcG9ydCBvZiBHREJNICovCi0jZW5kaWYKICNlbGlmIGRlZmluZWQoSEFWRV9HREJNX05EQk1fSCkKICNpbmNsdWRlIDxnZGJtL25kYm0uaD4KIHN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAiR05VIGdkYm0iOwpAQCAtMzIsNiArMjgsMTIgQEAKICNlcnJvciAiTm8gbmRibS5oIGF2YWlsYWJsZSEiCiAjZW5kaWYKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIGRibQorY2xhc3MgZGJtLmRibSAiZGJtb2JqZWN0ICoiICImRGJtdHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTkyNDUwNTY0Njg0YTY5YTNdKi8KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBpbnQgZGlfc2l6ZTsgICAgICAgIC8qIC0xIG1lYW5zIHJlY29tcHV0ZSAqLwpAQCAtNDcsOCArNDksMTcgQEAKIAogc3RhdGljIFB5T2JqZWN0ICpEYm1FcnJvcjsKIAorLypbcHl0aG9uIGlucHV0XQorY2xhc3MgZGJtb2JqZWN0X2NvbnZlcnRlcihzZWxmX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICJkYm1vYmplY3QgKiIKKyAgICBkZWYgcHJlX3JlbmRlcihzZWxmKToKKyAgICAgICAgc3VwZXIoKS5wcmVfcmVuZGVyKCkKKyAgICAgICAgc2VsZi5uYW1lID0gJ2RwJworW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NmFkNTM2MzU3OTEzODc5YV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbmV3ZGJtb2JqZWN0KGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IG1vZGUpCituZXdkYm1vYmplY3QoY29uc3QgY2hhciAqZmlsZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKIHsKICAgICBkYm1vYmplY3QgKmRwOwogCkBAIC01Niw3ICs2Nyw4IEBACiAgICAgaWYgKGRwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGRwLT5kaV9zaXplID0gLTE7Ci0gICAgaWYgKCAoZHAtPmRpX2RibSA9IGRibV9vcGVuKGZpbGUsIGZsYWdzLCBtb2RlKSkgPT0gMCApIHsKKyAgICAvKiBTZWUgaXNzdWUgIzE5Mjk2ICovCisgICAgaWYgKCAoZHAtPmRpX2RibSA9IGRibV9vcGVuKChjaGFyICopZmlsZSwgZmxhZ3MsIG1vZGUpKSA9PSAwICkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oRGJtRXJyb3IpOwogICAgICAgICBQeV9ERUNSRUYoZHApOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY3LDcgKzc5LDcgQEAKIC8qIE1ldGhvZHMgKi8KIAogc3RhdGljIHZvaWQKLWRibV9kZWFsbG9jKHJlZ2lzdGVyIGRibW9iamVjdCAqZHApCitkYm1fZGVhbGxvYyhkYm1vYmplY3QgKmRwKQogewogICAgIGlmICggZHAtPmRpX2RibSApCiAgICAgICAgIGRibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTk1LDcgKzEwNyw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fc3Vic2NyaXB0KGRibW9iamVjdCAqZHAsIHJlZ2lzdGVyIFB5T2JqZWN0ICprZXkpCitkYm1fc3Vic2NyaXB0KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICprZXkpCiB7CiAgICAgZGF0dW0gZHJlYywga3JlYzsKICAgICBQeV9zc2l6ZV90IHRtcF9zaXplOwpAQCAtMTcwLDcgKzE4Miw3IEBACiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX19jbG9zZShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX19jbG9zZShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGlmIChkcC0+ZGlfZGJtKQogICAgICAgICBkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC0xODAsOSArMTkyLDkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9rZXlzKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fa2V5cyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2LCAqaXRlbTsKKyAgICBQeU9iamVjdCAqdiwgKml0ZW07CiAgICAgZGF0dW0ga2V5OwogICAgIGludCBlcnI7CiAKQEAgLTI1MiwzMSArMjY0LDY4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2lucGxhY2VfcmVwZWF0ICovCiB9OwogCi1zdGF0aWMgUHlPYmplY3QgKgotZGJtX2dldChyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBkYXR1bSBrZXksIHZhbDsKLSAgICBQeU9iamVjdCAqZGVmdmFsdWUgPSBQeV9Ob25lOwotICAgIGNoYXIgKnRtcF9wdHI7Ci0gICAgUHlfc3NpemVfdCB0bXBfc2l6ZTsKKy8qW2NsaW5pYyBpbnB1dF0KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyN8TzpnZXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wX3B0ciwgJnRtcF9zaXplLCAmZGVmdmFsdWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBrZXkuZHB0ciA9IHRtcF9wdHI7Ci0gICAga2V5LmRzaXplID0gdG1wX3NpemU7Ci0gICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwotICAgIHZhbCA9IGRibV9mZXRjaChkcC0+ZGlfZGJtLCBrZXkpOwotICAgIGlmICh2YWwuZHB0ciAhPSBOVUxMKQotICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2YWwuZHB0ciwgdmFsLmRzaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlfSU5DUkVGKGRlZnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGRlZnZhbHVlOwotICAgIH0KK2RibS5kYm0uZ2V0CisKKyAgICBzZWxmOiBkYm1vYmplY3QKKworICAgIGtleTogc3RyKGxlbmd0aD1UcnVlKQorICAgIGRlZmF1bHQ6IG9iamVjdCA9IE5vbmUKKyAgICAvCisKK1JldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRibV9kYm1fZ2V0X19kb2NfXywKKyJnZXQoJHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiIpOworCisjZGVmaW5lIERCTV9EQk1fR0VUX01FVEhPRERFRiAgICBcCisgICAgeyJnZXQiLCAoUHlDRnVuY3Rpb24pZGJtX2RibV9nZXQsIE1FVEhfVkFSQVJHUywgZGJtX2RibV9nZXRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9kYm1fZ2V0X2ltcGwoZGJtb2JqZWN0ICpkcCwgY29uc3QgY2hhciAqa2V5LCBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGgsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9kYm1fZ2V0KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGg7CisgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzI3xPOmdldCIsCisgICAgICAgICZrZXksICZrZXlfbGVuZ3RoLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBkYm1fZGJtX2dldF9pbXBsKGRwLCBrZXksIGtleV9sZW5ndGgsIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fc2V0ZGVmYXVsdChyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKK2RibV9kYm1fZ2V0X2ltcGwoZGJtb2JqZWN0ICpkcCwgY29uc3QgY2hhciAqa2V5LCBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGgsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQ1MmVhMTEzOTRlN2U5MmQgaW5wdXQ9YWVjZjVlZmQyZjJiMWEzYl0qLworeworICAgIGRhdHVtIGRibV9rZXksIHZhbDsKKworICAgIGRibV9rZXkuZHB0ciA9IChjaGFyICopa2V5OworICAgIGRibV9rZXkuZHNpemUgPSBrZXlfbGVuZ3RoOworICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKKyAgICB2YWwgPSBkYm1fZmV0Y2goZHAtPmRpX2RibSwgZGJtX2tleSk7CisgICAgaWYgKHZhbC5kcHRyICE9IE5VTEwpCisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZhbC5kcHRyLCB2YWwuZHNpemUpOworCisgICAgUHlfSU5DUkVGKGRlZmF1bHRfdmFsdWUpOworICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX3NldGRlZmF1bHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgZGF0dW0ga2V5LCB2YWw7CiAgICAgUHlPYmplY3QgKmRlZnZhbHVlID0gTlVMTDsKQEAgLTMxNywxOCArMzY2LDMzIEBACiAgICAgcmV0dXJuIGRlZnZhbHVlOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX19lbnRlcl9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fX2V4aXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgX1B5X0lERU5USUZJRVIoY2xvc2UpOworICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYsICZQeUlkX2Nsb3NlLCBOVUxMKTsKK30KKworCiBzdGF0aWMgUHlNZXRob2REZWYgZGJtX21ldGhvZHNbXSA9IHsKICAgICB7ImNsb3NlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilkYm1fX2Nsb3NlLCAgICAgICAgTUVUSF9OT0FSR1MsCiAgICAgICJjbG9zZSgpXG5DbG9zZSB0aGUgZGF0YWJhc2UuIn0sCiAgICAgeyJrZXlzIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGJtX2tleXMsICAgICAgICAgIE1FVEhfTk9BUkdTLAogICAgICAia2V5cygpIC0+IGxpc3RcblJldHVybiBhIGxpc3Qgb2YgYWxsIGtleXMgaW4gdGhlIGRhdGFiYXNlLiJ9LAotICAgIHsiZ2V0IiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9nZXQsICAgICAgICAgICBNRVRIX1ZBUkFSR1MsCi0gICAgICJnZXQoa2V5WywgZGVmYXVsdF0pIC0+IHZhbHVlXG4iCi0gICAgICJSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuIn0sCisgICAgREJNX0RCTV9HRVRfTUVUSE9EREVGCiAgICAgeyJzZXRkZWZhdWx0IiwgICAgICAoUHlDRnVuY3Rpb24pZGJtX3NldGRlZmF1bHQsICAgIE1FVEhfVkFSQVJHUywKICAgICAgInNldGRlZmF1bHQoa2V5WywgZGVmYXVsdF0pIC0+IHZhbHVlXG4iCiAgICAgICJSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuICBJZiBrZXlcbiIKICAgICAgImlzIG5vdCBpbiB0aGUgZGF0YWJhc2UsIGl0IGlzIGluc2VydGVkIHdpdGggZGVmYXVsdCBhcyB0aGUgdmFsdWUuIn0sCisgICAgeyJfX2VudGVyX18iLCBkYm1fX2VudGVyX18sIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7Il9fZXhpdF9fIiwgIGRibV9fZXhpdF9fLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0zNjUsMTYgKzQyOSw3MCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgUHlPYmplY3QgKgotZGJtb3BlbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgY2hhciAqbmFtZTsKLSAgICBjaGFyICpmbGFncyA9ICJyIjsKLSAgICBpbnQgaWZsYWdzOwotICAgIGludCBtb2RlID0gMDY2NjsKKy8qW2NsaW5pYyBpbnB1dF0KIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInN8c2k6b3BlbiIsICZuYW1lLCAmZmxhZ3MsICZtb2RlKSApCi0gICAgICAgIHJldHVybiBOVUxMOworZGJtLm9wZW4gYXMgZGJtb3BlbgorCisgICAgZmlsZW5hbWU6IHN0cgorICAgICAgICBUaGUgZmlsZW5hbWUgdG8gb3Blbi4KKworICAgIGZsYWdzOiBzdHI9InIiCisgICAgICAgIEhvdyB0byBvcGVuIHRoZSBmaWxlLiAgInIiIGZvciByZWFkaW5nLCAidyIgZm9yIHdyaXRpbmcsIGV0Yy4KKworICAgIG1vZGU6IGludChweV9kZWZhdWx0PSIwbzY2NiIpID0gMG82NjYKKyAgICAgICAgSWYgY3JlYXRpbmcgYSBuZXcgZmlsZSwgdGhlIG1vZGUgYml0cyBmb3IgdGhlIG5ldyBmaWxlCisgICAgICAgIChlLmcuIG9zLk9fUkRXUikuCisKKyAgICAvCisKK1JldHVybiBhIGRhdGFiYXNlIG9iamVjdC4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoZGJtb3Blbl9fZG9jX18sCisib3BlbigkbW9kdWxlLCBmaWxlbmFtZSwgZmxhZ3M9XCdyXCcsIG1vZGU9MG82NjYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBkYXRhYmFzZSBvYmplY3QuXG4iCisiXG4iCisiICBmaWxlbmFtZVxuIgorIiAgICBUaGUgZmlsZW5hbWUgdG8gb3Blbi5cbiIKKyIgIGZsYWdzXG4iCisiICAgIEhvdyB0byBvcGVuIHRoZSBmaWxlLiAgXCJyXCIgZm9yIHJlYWRpbmcsIFwid1wiIGZvciB3cml0aW5nLCBldGMuXG4iCisiICBtb2RlXG4iCisiICAgIElmIGNyZWF0aW5nIGEgbmV3IGZpbGUsIHRoZSBtb2RlIGJpdHMgZm9yIHRoZSBuZXcgZmlsZVxuIgorIiAgICAoZS5nLiBvcy5PX1JEV1IpLiIpOworCisjZGVmaW5lIERCTU9QRU5fTUVUSE9EREVGICAgIFwKKyAgICB7Im9wZW4iLCAoUHlDRnVuY3Rpb24pZGJtb3BlbiwgTUVUSF9WQVJBUkdTLCBkYm1vcGVuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZsYWdzLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworICAgIGNvbnN0IGNoYXIgKmZsYWdzID0gInIiOworICAgIGludCBtb2RlID0gNDM4OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzfHNpOm9wZW4iLAorICAgICAgICAmZmlsZW5hbWUsICZmbGFncywgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtb3Blbl9pbXBsKG1vZHVsZSwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3Blbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywgaW50IG1vZGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWE3YjcyNWY5YzRkY2VjMiBpbnB1dD02NDk5YWIwZmFiMTMzM2FjXSovCit7CisgICAgaW50IGlmbGFnczsKKwogICAgIGlmICggc3RyY21wKGZsYWdzLCAiciIpID09IDAgKQogICAgICAgICBpZmxhZ3MgPSBPX1JET05MWTsKICAgICBlbHNlIGlmICggc3RyY21wKGZsYWdzLCAidyIpID09IDAgKQpAQCAtMzkwLDEzICs1MDgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJhcmcgMiB0byBvcGVuIHNob3VsZCBiZSAncicsICd3JywgJ2MnLCBvciAnbiciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBuZXdkYm1vYmplY3QobmFtZSwgaWZsYWdzLCBtb2RlKTsKKyAgICByZXR1cm4gbmV3ZGJtb2JqZWN0KGZpbGVuYW1lLCBpZmxhZ3MsIG1vZGUpOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgZGJtbW9kdWxlX21ldGhvZHNbXSA9IHsKLSAgICB7ICJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWRibW9wZW4sIE1FVEhfVkFSQVJHUywKLSAgICAgICJvcGVuKHBhdGhbLCBmbGFnWywgbW9kZV1dKSAtPiBtYXBwaW5nXG4iCi0gICAgICAiUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LiJ9LAorICAgIERCTU9QRU5fTUVUSE9EREVGCiAgICAgeyAwLCAwIH0sCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMgYi9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMKaW5kZXggZWE1MjUzZS4uZjAwMDg4NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jCisrKyBiL01vZHVsZXMvX2RlY2ltYWwvX2RlY2ltYWwuYwpAQCAtMzksOCArMzksOCBAQAogI2luY2x1ZGUgIm1lbW9yeS5oIgogCiAKLSNpZiBNUERfTUFKT1JfVkVSU0lPTiAhPSAyCi0gICNlcnJvciAibGlibXBkZWMgbWFqb3IgdmVyc2lvbiAyIHJlcXVpcmVkIgorI2lmICFkZWZpbmVkKE1QRF9WRVJTSU9OX0hFWCkgfHwgTVBEX1ZFUlNJT05fSEVYIDwgMHgwMjA0MDEwMAorICAjZXJyb3IgImxpYm1wZGVjIHZlcnNpb24gPj0gMi40LjEgcmVxdWlyZWQiCiAjZW5kaWYKIAogCkBAIC0zNTQyLDcgKzM1NDIsNyBAQAogICAgIH0KIH0KIAotc3RhdGljIFB5T2JqZWN0ICpEZWNpbWFsVHVwbGUgPSBOVUxMOworc3RhdGljIFB5VHlwZU9iamVjdCAqRGVjaW1hbFR1cGxlID0gTlVMTDsKIC8qIFJldHVybiB0aGUgRGVjaW1hbFR1cGxlIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlEZWNPYmplY3QuICovCiBzdGF0aWMgUHlPYmplY3QgKgogUHlEZWNfQXNUdXBsZShQeU9iamVjdCAqZGVjLCBQeU9iamVjdCAqZHVtbXkgVU5VU0VEKQpAQCAtMzYyNSw3ICszNjI1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoRGVjaW1hbFR1cGxlLAorICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoKFB5T2JqZWN0ICopRGVjaW1hbFR1cGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiwgY29lZmYsIGV4cHQsIE5VTEwpOwogCiBvdXQ6CkBAIC01NTYyLDkgKzU1NjIsMTQgQEAKIAogICAgIC8qIERlY2ltYWxUdXBsZSAqLwogICAgIEFTU0lHTl9QVFIoY29sbGVjdGlvbnMsIFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29sbGVjdGlvbnMiKSk7Ci0gICAgQVNTSUdOX1BUUihEZWNpbWFsVHVwbGUsIFB5T2JqZWN0X0NhbGxNZXRob2QoY29sbGVjdGlvbnMsCisgICAgQVNTSUdOX1BUUihEZWNpbWFsVHVwbGUsIChQeVR5cGVPYmplY3QgKilQeU9iamVjdF9DYWxsTWV0aG9kKGNvbGxlY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVkdHVwbGUiLCAiKHNzKSIsICJEZWNpbWFsVHVwbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpZ24gZGlnaXRzIGV4cG9uZW50IikpOworCisgICAgQVNTSUdOX1BUUihvYmosIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJkZWNpbWFsIikpOworICAgIENIRUNLX0lOVChQeURpY3RfU2V0SXRlbVN0cmluZyhEZWNpbWFsVHVwbGUtPnRwX2RpY3QsICJfX21vZHVsZV9fIiwgb2JqKSk7CisgICAgUHlfQ0xFQVIob2JqKTsKKwogICAgIC8qIE11dGFibGVNYXBwaW5nICovCiAgICAgQVNTSUdOX1BUUihNdXRhYmxlTWFwcGluZywgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb2xsZWN0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNdXRhYmxlTWFwcGluZyIpKTsKQEAgLTU1OTEsNyArNTU5Niw3IEBACiAgICAgQ0hFQ0tfSU5UKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiQ29udGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmUHlEZWNDb250ZXh0X1R5cGUpKTsKICAgICBQeV9JTkNSRUYoRGVjaW1hbFR1cGxlKTsKLSAgICBDSEVDS19JTlQoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJEZWNpbWFsVHVwbGUiLCBEZWNpbWFsVHVwbGUpKTsKKyAgICBDSEVDS19JTlQoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJEZWNpbWFsVHVwbGUiLCAoUHlPYmplY3QgKilEZWNpbWFsVHVwbGUpKTsKIAogCiAgICAgLyogQ3JlYXRlIHRvcCBsZXZlbCBleGNlcHRpb24gKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvaW8uYyBiL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvaW8uYwppbmRleCBiNjczMjRkLi5hNDVhNDI5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2lvLmMKKysrIGIvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9pby5jCkBAIC00NDYsNyArNDQ2LDcgQEAKIAogICAgIGlmIChtcGRfaXNzcGVjaWFsKGRlYykpIHsKIAotICAgICAgICBtZW0gPSBzaXplb2YgIi1JbmZpbml0eSI7CisgICAgICAgIG1lbSA9IHNpemVvZiAiLUluZmluaXR5JSI7CiAgICAgICAgIGlmIChtcGRfaXNuYW4oZGVjKSAmJiBkZWMtPmxlbiA+IDApIHsKICAgICAgICAgICAgIC8qIGRpYWdub3N0aWMgY29kZSAqLwogICAgICAgICAgICAgbWVtICs9IGRlYy0+ZGlnaXRzOwpAQCAtNjA5LDEwICs2MDksMTAgQEAKICAgICAgICAgICAgICpjcCsrID0gKGZsYWdzJk1QRF9GTVRfVVBQRVIpID8gJ0UnIDogJ2UnOwogICAgICAgICAgICAgY3AgPSBleHBfdG9fc3RyaW5nKGNwLCBsZGlnaXRzLWRwbGFjZSk7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKGZsYWdzJk1QRF9GTVRfUEVSQ0VOVCkgewotICAgICAgICAgICAgKmNwKysgPSAnJSc7Ci0gICAgICAgIH0KKyAgICBpZiAoZmxhZ3MmTVBEX0ZNVF9QRVJDRU5UKSB7CisgICAgICAgICpjcCsrID0gJyUnOwogICAgIH0KIAogICAgIGFzc2VydChjcCA8IGRlY3N0cmluZyttZW0pOwpAQCAtMTI2MCw2ICsxMjYwLDkgQEAKICAgICAgICAgICAgIHN0YWNrc3BlYy5hbGlnbiA9ICc+JzsKICAgICAgICAgICAgIHNwZWMgPSAmc3RhY2tzcGVjOwogICAgICAgICB9CisgICAgICAgIGlmICh0eXBlID09ICclJykgeworICAgICAgICAgICAgZmxhZ3MgfD0gTVBEX0ZNVF9QRVJDRU5UOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB1aW50MzJfdCB3b3Jrc3RhdHVzID0gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvbXBkZWNpbWFsLmggYi9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL21wZGVjaW1hbC5oCmluZGV4IGI0MzIzMWMuLjVjYTc0MTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvbXBkZWNpbWFsLmgKKysrIGIvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9tcGRlY2ltYWwuaApAQCAtMTA4LDkgKzEwOCwxMyBAQAogCiAjZGVmaW5lIE1QRF9NQUpPUl9WRVJTSU9OIDIKICNkZWZpbmUgTVBEX01JTk9SX1ZFUlNJT04gNAotI2RlZmluZSBNUERfTUlDUk9fVkVSU0lPTiAwCisjZGVmaW5lIE1QRF9NSUNST19WRVJTSU9OIDEKIAotI2RlZmluZSBNUERfVkVSU0lPTiAiMi40LjAiCisjZGVmaW5lIE1QRF9WRVJTSU9OICIyLjQuMSIKKworI2RlZmluZSBNUERfVkVSU0lPTl9IRVggKChNUERfTUFKT1JfVkVSU0lPTiA8PCAyNCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKE1QRF9NSU5PUl9WRVJTSU9OIDw8IDE2KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoTVBEX01JQ1JPX1ZFUlNJT04gPDwgIDgpKQogCiBjb25zdCBjaGFyICptcGRfdmVyc2lvbih2b2lkKTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKaW5kZXggZjQ1ODkzZi4uYjNiNjk3NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYworKysgYi9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCkBAIC0xLDYzICsxLDIyIEBACi0vKgotICogRWxlbWVudFRyZWUKLSAqICRJZDogX2VsZW1lbnR0cmVlLmMgMzQ3MyAyMDA5LTAxLTExIDIyOjUzOjU1WiBmcmVkcmlrICQKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyAqIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogICoKLSAqIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCi0gKgotICogSGlzdG9yeToKLSAqIDE5OTktMDYtMjAgZmwgIGNyZWF0ZWQgKGFzIHBhcnQgb2Ygc2dtbG9wKQotICogMjAwMS0wNS0yOSBmbCAgZWZmZG9tIGVkaXRpb24KLSAqIDIwMDMtMDItMjcgZmwgIGVsZW1lbnR0cmVlIGVkaXRpb24gKGFscGhhKQotICogMjAwNC0wNi0wMyBmbCAgdXBkYXRlcyBmb3IgZWxlbWVudHRyZWUgMS4yCi0gKiAyMDA1LTAxLTA1IGZsICBtYWpvciBvcHRpbWl6YXRpb24gZWZmb3J0Ci0gKiAyMDA1LTAxLTExIGZsICBmaXJzdCBwdWJsaWMgcmVsZWFzZSAoY0VsZW1lbnRUcmVlIDAuOCkKLSAqIDIwMDUtMDEtMTIgZmwgIHNwbGl0IGVsZW1lbnQgb2JqZWN0IGludG8gYmFzZSBhbmQgZXh0cmFzCi0gKiAyMDA1LTAxLTEzIGZsICB1c2UgdGFnZ2VkIHBvaW50ZXJzIGZvciB0YWlsL3RleHQgKGNFbGVtZW50VHJlZSAwLjkpCi0gKiAyMDA1LTAxLTE3IGZsICBhZGRlZCB0cmVlYnVpbGRlciBjbG9zZSBtZXRob2QKLSAqIDIwMDUtMDEtMTcgZmwgIGZpeGVkIGNyYXNoIGluIGdldGNoaWxkcmVuCi0gKiAyMDA1LTAxLTE4IGZsICByZW1vdmVkIG9ic2VydmVyIGFwaSwgYWRkZWQgaXRlcnBhcnNlIChjRWxlbWVudFRyZWUgMC45LjMpCi0gKiAyMDA1LTAxLTIzIGZsICByZXZpc2VkIGl0ZXJwYXJzZSBhcGk7IGFkZGVkIG5hbWVzcGFjZSBldmVudCBzdXBwb3J0ICgwLjkuOCkKLSAqIDIwMDUtMDEtMjYgZmwgIGFkZGVkIFZFUlNJT04gbW9kdWxlIHByb3BlcnR5IChjRWxlbWVudFRyZWUgMS4wKQotICogMjAwNS0wMS0yOCBmbCAgYWRkZWQgcmVtb3ZlIG1ldGhvZCAoMS4wLjEpCi0gKiAyMDA1LTAzLTAxIGZsICBhZGRlZCBpc2VsZW1lbnQgZnVuY3Rpb247IGZpeGVkIG1ha2VlbGVtZW50IGFsaWFzaW5nICgxLjAuMikKLSAqIDIwMDUtMDMtMTMgZmwgIGV4cG9ydCBDb21tZW50IGFuZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24vUEkgaGVscGVycwotICogMjAwNS0wMy0yNiBmbCAgYWRkZWQgQ29tbWVudCBhbmQgUEkgc3VwcG9ydCB0byBYTUxQYXJzZXIKLSAqIDIwMDUtMDMtMjcgZmwgIGV2ZW50IG9wdGltaXphdGlvbnM7IGNvbXBsYWluIGFib3V0IGJvZ3VzIGV2ZW50cwotICogMjAwNS0wOC0wOCBmbCAgZml4ZWQgcmVhZCBlcnJvciBoYW5kbGluZyBpbiBwYXJzZQotICogMjAwNS0wOC0xMSBmbCAgYWRkZWQgcnVudGltZSB0ZXN0IGZvciBjb3B5IHdvcmthcm91bmQgKDEuMC4zKQotICogMjAwNS0xMi0xMyBmbCAgYWRkZWQgZXhwYXRfY2FwaSBzdXBwb3J0IChmb3IgeG1sLmV0cmVlKSAoMS4wLjQpCi0gKiAyMDA1LTEyLTE2IGZsICBhZGRlZCBzdXBwb3J0IGZvciBub24tc3RhbmRhcmQgZW5jb2RpbmdzCi0gKiAyMDA2LTAzLTA4IGZsICBmaXhlZCBhIGNvdXBsZSBvZiBwb3RlbnRpYWwgbnVsbC1yZWZzIGFuZCBsZWFrcwotICogMjAwNi0wMy0xMiBmbCAgbWVyZ2UgaW4gMi41IHNzaXplX3QgY2hhbmdlcwotICogMjAwNy0wOC0yNSBmbCAgY2FsbCBjdXN0b20gYnVpbGRlcidzIGNsb3NlIG1ldGhvZCBmcm9tIFhNTFBhcnNlcgotICogMjAwNy0wOC0zMSBmbCAgYWRkZWQgaXRlciwgZXh0ZW5kIGZyb20gRVQgMS4zCi0gKiAyMDA3LTA5LTAxIGZsICBmaXhlZCBQYXJzZUVycm9yIGV4Y2VwdGlvbiwgc2V0c2xpY2Ugc291cmNlIHR5cGUsIGV0YwotICogMjAwNy0wOS0wMyBmbCAgZml4ZWQgaGFuZGxpbmcgb2YgbmVnYXRpdmUgaW5zZXJ0IGluZGV4ZXMKLSAqIDIwMDctMDktMDQgZmwgIGFkZGVkIGl0ZXJ0ZXh0IGZyb20gRVQgMS4zCi0gKiAyMDA3LTA5LTA2IGZsICBhZGRlZCBwb3NpdGlvbiBhdHRyaWJ1dGUgdG8gUGFyc2VFcnJvciBleGNlcHRpb24KLSAqIDIwMDgtMDYtMDYgZmwgIGRlbGF5IGVycm9yIHJlcG9ydGluZyBpbiBpdGVycGFyc2UgKGZyb20gSHJ2b2plIE5pa3NpYykKLSAqCisgKiBfZWxlbWVudHRyZWUgLSBDIGFjY2VsZXJhdG9yIGZvciB4bWwuZXRyZWUuRWxlbWVudFRyZWUKICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IEZyZWRyaWsgTHVuZGguCiAgKgogICogaW5mb0BweXRob253YXJlLmNvbQogICogaHR0cDovL3d3dy5weXRob253YXJlLmNvbQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4gKi8KLS8qIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLiAqLwotCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSNkZWZpbmUgVkVSU0lPTiAiMS4wLjYiCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjb25maWd1cmF0aW9uICovCiAKLS8qIExlYXZlIGRlZmluZWQgdG8gaW5jbHVkZSB0aGUgZXhwYXQtYmFzZWQgWE1MUGFyc2VyIHR5cGUgKi8KLSNkZWZpbmUgVVNFX0VYUEFUCi0KIC8qIEFuIGVsZW1lbnQgY2FuIGhvbGQgdGhpcyBtYW55IGNoaWxkcmVuIHdpdGhvdXQgZXh0cmEgbWVtb3J5CiAgICBhbGxvY2F0aW9ucy4gKi8KICNkZWZpbmUgU1RBVElDX0NISUxEUkVOIDQKQEAgLTExOSwxMCArNzgsNTEgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgWE1MUGFyc2VyX1R5cGU7CiAKIAotLyogZ2x1ZSBmdW5jdGlvbnMgKHNlZSB0aGUgaW5pdCBmdW5jdGlvbiBmb3IgZGV0YWlscykgKi8KLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmo7Ci1zdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iajsKLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHBhdGhfb2JqOworLyogUGVyLW1vZHVsZSBzdGF0ZTsgUEVQIDMxMjEgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdCAqcGFyc2VlcnJvcl9vYmo7CisgICAgUHlPYmplY3QgKmRlZXBjb3B5X29iajsKKyAgICBQeU9iamVjdCAqZWxlbWVudHBhdGhfb2JqOworfSBlbGVtZW50dHJlZXN0YXRlOworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGVsZW1lbnR0cmVlbW9kdWxlOworCisvKiBHaXZlbiBhIG1vZHVsZSBvYmplY3QgKGFzc3VtZWQgdG8gYmUgX2VsZW1lbnR0cmVlKSwgZ2V0IGl0cyBwZXItbW9kdWxlCisgKiBzdGF0ZS4KKyAqLworI2RlZmluZSBFVF9TVEFURShtb2QpICgoZWxlbWVudHRyZWVzdGF0ZSAqKSBQeU1vZHVsZV9HZXRTdGF0ZShtb2QpKQorCisvKiBGaW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgaW1wb3J0ZWQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHN1Yi1pbnRlcnByZXRlcgorICogYW5kIGdldCBpdHMgc3RhdGUuCisgKi8KKyNkZWZpbmUgRVRfU1RBVEVfR0xPQkFMIFwKKyAgICAoKGVsZW1lbnR0cmVlc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZlbGVtZW50dHJlZW1vZHVsZSkpKQorCitzdGF0aWMgaW50CitlbGVtZW50dHJlZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFKG0pOworICAgIFB5X0NMRUFSKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlfQ0xFQVIoc3QtPmRlZXBjb3B5X29iaik7CisgICAgUHlfQ0xFQVIoc3QtPmVsZW1lbnRwYXRoX29iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2VsZW1lbnR0cmVlX3RyYXZlcnNlKFB5T2JqZWN0ICptLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFKG0pOworICAgIFB5X1ZJU0lUKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlfVklTSVQoc3QtPmRlZXBjb3B5X29iaik7CisgICAgUHlfVklTSVQoc3QtPmVsZW1lbnRwYXRoX29iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitlbGVtZW50dHJlZV9mcmVlKHZvaWQgKm0pCit7CisgICAgZWxlbWVudHRyZWVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CiAKIC8qIGhlbHBlcnMgKi8KIApAQCAtMTMwLDExICsxMzAsMTEgQEAKIGRlZXBjb3B5KFB5T2JqZWN0KiBvYmplY3QsIFB5T2JqZWN0KiBtZW1vKQogewogICAgIC8qIGRvIGEgZGVlcCBjb3B5IG9mIHRoZSBnaXZlbiBvYmplY3QgKi8KLQogICAgIFB5T2JqZWN0KiBhcmdzOwogICAgIFB5T2JqZWN0KiByZXN1bHQ7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKLSAgICBpZiAoIWVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaikgeworICAgIGlmICghc3QtPmRlZXBjb3B5X29iaikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAiZGVlcGNvcHkgaGVscGVyIG5vdCBmb3VuZCIKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soMiwgb2JqZWN0LCBtZW1vKTsKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqLCBhcmdzKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHN0LT5kZWVwY29weV9vYmosIGFyZ3MpOwogICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjI5LDggKzIyOSwxMCBAQAogY3JlYXRlX2V4dHJhKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhdHRyaWIpCiB7CiAgICAgc2VsZi0+ZXh0cmEgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKEVsZW1lbnRPYmplY3RFeHRyYSkpOwotICAgIGlmICghc2VsZi0+ZXh0cmEpCisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgaWYgKCFhdHRyaWIpCiAgICAgICAgIGF0dHJpYiA9IFB5X05vbmU7CkBAIC0yODMsMTMgKzI4NSw2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNlbGYtPmV4dHJhID0gTlVMTDsKIAotICAgIGlmIChhdHRyaWIgIT0gUHlfTm9uZSAmJiAhaXNfZW1wdHlfZGljdChhdHRyaWIpKSB7Ci0gICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgYXR0cmliKSA8IDApIHsKLSAgICAgICAgICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgUHlfSU5DUkVGKHRhZyk7CiAgICAgc2VsZi0+dGFnID0gdGFnOwogCkBAIC0zMDMsNiArMjk4LDE0IEBACiAKICAgICBBTExPQyhzaXplb2YoRWxlbWVudE9iamVjdCksICJjcmVhdGUgZWxlbWVudCIpOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNlbGYpOworCisgICAgaWYgKGF0dHJpYiAhPSBQeV9Ob25lICYmICFpc19lbXB0eV9kaWN0KGF0dHJpYikpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBhdHRyaWIpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gKFB5T2JqZWN0Kikgc2VsZjsKIH0KIApAQCAtMzU4LDYgKzM2MSw3IEBACiAKICAgICBQeV9ERUNSRUYoYXR0cmliX3N0cik7CiAKKyAgICAvKiBhdHRyaWIgY2FuIGJlIE5VTEwgaWYgUHlEaWN0X05ldyBmYWlsZWQgKi8KICAgICBpZiAoYXR0cmliKQogICAgICAgICBpZiAoUHlEaWN0X1VwZGF0ZShhdHRyaWIsIGt3ZHMpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDMzLDggKzQzNywxMCBAQAogICAgIC8qIG1ha2Ugc3VyZSBzZWxmLT5jaGlsZHJlbiBjYW4gaG9sZCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGV4dHJhCiAgICAgICAgZWxlbWVudHMuICBzZXQgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgaWYgYWxsb2NhdGlvbiBmYWlsZWQgKi8KIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIHNpemUgPSBzZWxmLT5leHRyYS0+bGVuZ3RoICsgZXh0cmE7CiAKQEAgLTU2MSw4ICs1NjcsOSBAQAogICAgIFB5T2JqZWN0KiBhdHRyaWIgPSBOVUxMOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFPfE8hOlN1YkVsZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmRWxlbWVudF9UeXBlLCAmcGFyZW50LCAmdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlEaWN0X1R5cGUsICZhdHRyaWIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlEaWN0X1R5cGUsICZhdHRyaWIpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChhdHRyaWIpIHsKICAgICAgICAgLyogYXR0cmliIHBhc3NlZCBhcyBwb3NpdGlvbmFsIGFyZyAqLwpAQCAtNTg2LDggKzU5Myw5IEBACiAgICAgfQogCiAgICAgZWxlbSA9IGNyZWF0ZV9uZXdfZWxlbWVudCh0YWcsIGF0dHJpYik7Ci0KICAgICBQeV9ERUNSRUYoYXR0cmliKTsKKyAgICBpZiAoZWxlbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChlbGVtZW50X2FkZF9zdWJlbGVtZW50KHBhcmVudCwgZWxlbSkgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKQEAgLTY0NSw3ICs2NTMsNiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogbWV0aG9kcyAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKSAqLwogCiBzdGF0aWMgUHlPYmplY3QqCiBlbGVtZW50X2FwcGVuZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTY4OSw4ICs2OTYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGVsZW1lbnQgPSAoRWxlbWVudE9iamVjdCopIGNyZWF0ZV9uZXdfZWxlbWVudCgKLSAgICAgICAgc2VsZi0+dGFnLCAoc2VsZi0+ZXh0cmEpID8gc2VsZi0+ZXh0cmEtPmF0dHJpYiA6IFB5X05vbmUKLSAgICAgICAgKTsKKyAgICAgICAgc2VsZi0+dGFnLCAoc2VsZi0+ZXh0cmEpID8gc2VsZi0+ZXh0cmEtPmF0dHJpYiA6IFB5X05vbmUpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTcwMyw3ICs3MDksNiBAQAogICAgIFB5X0lOQ1JFRihKT0lOX09CSihlbGVtZW50LT50YWlsKSk7CiAKICAgICBpZiAoc2VsZi0+ZXh0cmEpIHsKLQogICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoZWxlbWVudCwgc2VsZi0+ZXh0cmEtPmxlbmd0aCkgPCAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcxNSw3ICs3MjAsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZWxlbWVudC0+ZXh0cmEtPmxlbmd0aCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0KICAgICB9CiAKICAgICByZXR1cm4gKFB5T2JqZWN0KikgZWxlbWVudDsKQEAgLTc3Miw3ICs3NzYsNiBAQAogICAgIGVsZW1lbnQtPnRhaWwgPSBKT0lOX1NFVCh0YWlsLCBKT0lOX0dFVChzZWxmLT50YWlsKSk7CiAKICAgICBpZiAoc2VsZi0+ZXh0cmEpIHsKLQogICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoZWxlbWVudCwgc2VsZi0+ZXh0cmEtPmxlbmd0aCkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtNzg2LDcgKzc4OSw2IEBACiAgICAgICAgIH0KIAogICAgICAgICBlbGVtZW50LT5leHRyYS0+bGVuZ3RoID0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKLQogICAgIH0KIAogICAgIC8qIGFkZCBvYmplY3QgdG8gbWVtbyBkaWN0aW9uYXJ5IChzbyBkZWVwY29weSB3b24ndCB2aXNpdCBpdCBhZ2FpbikgKi8KQEAgLTEwNzksNiArMTA4MSw3IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86ZmluZCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCkBAIC0xMDg3LDcgKzEwOTAsNyBAQAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZmluZCk7CiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogICAgIH0KIApAQCAtMTExNSw2ICsxMTE4LDcgQEAKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgX1B5X0lERU5USUZJRVIoZmluZHRleHQpOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJkZWZhdWx0IiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POmZpbmR0ZXh0Iiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZkZWZhdWx0X3ZhbHVlLCAmbmFtZXNwYWNlcykpCkBAIC0xMTIyLDcgKzExMjYsNyBAQAogCiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmR0ZXh0LCAiT09PTyIsIHNlbGYsIHRhZywgZGVmYXVsdF92YWx1ZSwgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZHRleHQsICJPT09PIiwgc2VsZiwgdGFnLCBkZWZhdWx0X3ZhbHVlLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkgewpAQCAtMTEzMiw4ICsxMTM2LDggQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5leHRyYS0+bGVuZ3RoOyBpKyspIHsKICAgICAgICAgRWxlbWVudE9iamVjdCogaXRlbSA9IChFbGVtZW50T2JqZWN0Kikgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldOwotICAgICAgICBpZiAoRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pICYmIChQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbS0+dGFnLCB0YWcsIFB5X0VRKSA9PSAxKSkgewotCisgICAgICAgIGlmIChFbGVtZW50X0NoZWNrRXhhY3QoaXRlbSkgJiYKKyAgICAgICAgICAgIChQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbS0+dGFnLCB0YWcsIFB5X0VRKSA9PSAxKSkgewogICAgICAgICAgICAgUHlPYmplY3QqIHRleHQgPSBlbGVtZW50X2dldF90ZXh0KGl0ZW0pOwogICAgICAgICAgICAgaWYgKHRleHQgPT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX05ldygwLCAwKTsKQEAgLTExNTQsNiArMTE1OCw3IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86ZmluZGFsbCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCkBAIC0xMTYyLDcgKzExNjcsNyBAQAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZmluZGFsbCk7CiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kYWxsLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kYWxsLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogICAgIH0KIApAQCAtMTE5NCwxNCArMTE5OSwxNSBAQAogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBfUHlfSURFTlRJRklFUihpdGVyZmluZCk7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86aXRlcmZpbmQiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9pdGVyZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcwotICAgICAgICApOworICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9pdGVyZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTEzMTIsOCArMTMxOCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmRWxlbWVudF9UeXBlLCAmZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgICAgIGluZGV4ICs9IHNlbGYtPmV4dHJhLT5sZW5ndGg7CkBAIC0xNDU0LDggKzE0NjIsMTAgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POnNldCIsICZrZXksICZ2YWx1ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBhdHRyaWIgPSBlbGVtZW50X2dldF9hdHRyaWIoc2VsZik7CiAgICAgaWYgKCFhdHRyaWIpCkBAIC0xNTcwLDggKzE1ODAsMTAgQEAKICAgICAgICAgUHlPYmplY3QqIHJlY3ljbGUgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCogc2VxID0gTlVMTDsKIAotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwKICAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoLApAQCAtMTc4Niw3ICsxNzk4LDcgQEAKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGV4dCIpID09IDApIHsKICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGV4dChzZWxmKTsKLSAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgIFB5X1hJTkNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKQEAgLTE4MDEsOCArMTgxMywxMCBAQAogICAgICAgICByZXMgPSBlbGVtZW50X2dldF90YWlsKHNlbGYpOwogICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJhdHRyaWIiKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X2F0dHJpYihzZWxmKTsKICAgICB9CiAKQEAgLTE4MTksMTAgKzE4MzMsMTAgQEAKICAgICBjaGFyICpuYW1lID0gIiI7CiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhuYW1lb2JqKSkKICAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobmFtZW9iaik7Ci0KLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0YWciKSA9PSAwKSB7CisKKyAgICBpZiAoc3RyY21wKG5hbWUsICJ0YWciKSA9PSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmLT50YWcpOwogICAgICAgICBzZWxmLT50YWcgPSB2YWx1ZTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnRhZyk7CkBAIC0xODM1LDggKzE4NDksMTAgQEAKICAgICAgICAgc2VsZi0+dGFpbCA9IHZhbHVlOwogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+dGFpbCk7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImF0dHJpYiIpID09IDApIHsKLSAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmLT5leHRyYS0+YXR0cmliKTsKICAgICAgICAgc2VsZi0+ZXh0cmEtPmF0dHJpYiA9IHZhbHVlOwogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+ZXh0cmEtPmF0dHJpYik7CkBAIC0yMTUyLDE0ICsyMTY4LDYgQEAKICAgICBpdCA9IFB5T2JqZWN0X0dDX05ldyhFbGVtZW50SXRlck9iamVjdCwgJkVsZW1lbnRJdGVyX1R5cGUpOwogICAgIGlmICghaXQpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghKGl0LT5wYXJlbnRfc3RhY2sgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKFBhcmVudExvY2F0b3IpKSkpIHsKLSAgICAgICAgUHlPYmplY3RfR0NfRGVsKGl0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaXQtPnBhcmVudF9zdGFjay0+cGFyZW50ID0gTlVMTDsKLSAgICBpdC0+cGFyZW50X3N0YWNrLT5jaGlsZF9pbmRleCA9IDA7Ci0gICAgaXQtPnBhcmVudF9zdGFjay0+bmV4dCA9IE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHRhZykpCiAgICAgICAgIHN0YXIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiKiIpOwpAQCAtMjE2OCwxNyArMjE3NiwyNyBAQAogCiAgICAgaWYgKHN0YXIgJiYgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRhZywgc3RhciwgUHlfRVEpID09IDEpCiAgICAgICAgIHRhZyA9IFB5X05vbmU7Ci0KICAgICBQeV9YREVDUkVGKHN0YXIpOworCisgICAgUHlfSU5DUkVGKHRhZyk7CiAgICAgaXQtPnNvdWdodF90YWcgPSB0YWc7CiAgICAgaXQtPnJvb3RfZG9uZSA9IDA7CiAgICAgaXQtPmdldHRleHQgPSBnZXR0ZXh0OworICAgIFB5X0lOQ1JFRihzZWxmKTsKICAgICBpdC0+cm9vdF9lbGVtZW50ID0gc2VsZjsKIAotICAgIFB5X0lOQ1JFRihzZWxmKTsKLSAgICBQeV9JTkNSRUYodGFnKTsKLQogICAgIFB5T2JqZWN0X0dDX1RyYWNrKGl0KTsKKworICAgIGl0LT5wYXJlbnRfc3RhY2sgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKFBhcmVudExvY2F0b3IpKTsKKyAgICBpZiAoaXQtPnBhcmVudF9zdGFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihpdCk7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpdC0+cGFyZW50X3N0YWNrLT5wYXJlbnQgPSBOVUxMOworICAgIGl0LT5wYXJlbnRfc3RhY2stPmNoaWxkX2luZGV4ID0gMDsKKyAgICBpdC0+cGFyZW50X3N0YWNrLT5uZXh0ID0gTlVMTDsKKwogICAgIHJldHVybiAoUHlPYmplY3QgKilpdDsKIH0KIApAQCAtMjM3MSw2ICsyMzg5LDcgQEAKIHsKICAgICBQeU9iamVjdCogbm9kZTsKICAgICBQeU9iamVjdCogdGhpczsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmIChzZWxmLT5kYXRhKSB7CiAgICAgICAgIGlmIChzZWxmLT50aGlzID09IHNlbGYtPmxhc3QpIHsKQEAgLTI0MDEsNyArMjQyMCw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHNlbGYtPnJvb3QpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwKKyAgICAgICAgICAgICAgICBzdC0+cGFyc2VlcnJvcl9vYmosCiAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGVsZW1lbnRzIG9uIHRvcCBsZXZlbCIKICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI2ODgsMTAgKzI3MDcsMTIgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiB0aGUgZXhwYXQgaW50ZXJmYWNlICovCiAKLSNpZiBkZWZpbmVkKFVTRV9FWFBBVCkKLQogI2luY2x1ZGUgImV4cGF0LmgiCiAjaW5jbHVkZSAicHlleHBhdC5oIgorCisvKiBUaGUgUHlFeHBhdF9DQVBJIHN0cnVjdHVyZSBpcyBhbiBpbW11dGFibGUgZGlzcGF0Y2ggdGFibGUsIHNvIGl0IGNhbiBiZQorICogY2FjaGVkIGdsb2JhbGx5IHdpdGhvdXQgYmVpbmcgaW4gcGVyLW1vZHVsZSBzdGF0ZS4KKyAqLwogc3RhdGljIHN0cnVjdCBQeUV4cGF0X0NBUEkgKmV4cGF0X2NhcGk7CiAjZGVmaW5lIEVYUEFUKGZ1bmMpIChleHBhdF9jYXBpLT5mdW5jKQogCkBAIC0yNzU4LDYgKzI3NzksMTAgQEAKICAgICAgICAgaWYgKGkgIT0gc2l6ZSkgewogICAgICAgICAgICAgLyogY29udmVydCB0byB1bml2ZXJzYWwgbmFtZSAqLwogICAgICAgICAgICAgdGFnID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKzEpOworICAgICAgICAgICAgaWYgKHRhZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodGFnKTsKICAgICAgICAgICAgIHBbMF0gPSAneyc7CiAgICAgICAgICAgICBtZW1jcHkocCsxLCBzdHJpbmcsIHNpemUpOwpAQCAtMjc5Nyw2ICsyODIyLDcgQEAKIGV4cGF0X3NldF9lcnJvcihlbnVtIFhNTF9FcnJvciBlcnJvcl9jb2RlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgY2hhciAqbWVzc2FnZSkKIHsKICAgICBQeU9iamVjdCAqZXJybXNnLCAqZXJyb3IsICpwb3NpdGlvbiwgKmNvZGU7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBlcnJtc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXM6IGxpbmUgJWQsIGNvbHVtbiAlZCIsCiAgICAgICAgICAgICAgICAgbWVzc2FnZSA/IG1lc3NhZ2UgOiBFWFBBVChFcnJvclN0cmluZykoZXJyb3JfY29kZSksCkBAIC0yODA0LDcgKzI4MzAsNyBAQAogICAgIGlmIChlcnJtc2cgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosICJPIiwgZXJybXNnKTsKKyAgICBlcnJvciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzdC0+cGFyc2VlcnJvcl9vYmosICJPIiwgZXJybXNnKTsKICAgICBQeV9ERUNSRUYoZXJybXNnKTsKICAgICBpZiAoIWVycm9yKQogICAgICAgICByZXR1cm47CkBAIC0yODM0LDcgKzI4NjAsNyBAQAogICAgIH0KICAgICBQeV9ERUNSRUYocG9zaXRpb24pOwogCi0gICAgUHlFcnJfU2V0T2JqZWN0KGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLCBlcnJvcik7CisgICAgUHlFcnJfU2V0T2JqZWN0KHN0LT5wYXJzZWVycm9yX29iaiwgZXJyb3IpOwogICAgIFB5X0RFQ1JFRihlcnJvcik7CiB9CiAKQEAgLTI4NTIsNiArMjg3OCw5IEBACiAgICAgaWYgKGRhdGFfbGVuIDwgMiB8fCBkYXRhX2luWzBdICE9ICcmJykKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGtleSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGRhdGFfaW4gKyAxLCBkYXRhX2xlbiAtIDIsICJzdHJpY3QiKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg5Miw2ICsyOTIxLDkgQEAKICAgICBQeU9iamVjdCogYXR0cmliOwogICAgIGludCBvazsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICAvKiB0YWcgbmFtZSAqLwogICAgIHRhZyA9IG1ha2V1bml2ZXJzYWwoc2VsZiwgdGFnX2luKTsKICAgICBpZiAoIXRhZykKQEAgLTI5NTAsNiArMjk4Miw5IEBACiAgICAgUHlPYmplY3QqIGRhdGE7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBkYXRhID0gUHlVbmljb2RlX0RlY29kZVVURjgoZGF0YV9pbiwgZGF0YV9sZW4sICJzdHJpY3QiKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybjsgLyogcGFyc2VyIHdpbGwgbG9vayBmb3IgZXJyb3JzICovCkBAIC0yOTczLDYgKzMwMDgsOSBAQAogICAgIFB5T2JqZWN0KiB0YWc7CiAgICAgUHlPYmplY3QqIHJlcyA9IE5VTEw7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKFRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkKICAgICAgICAgLyogc2hvcnRjdXQgKi8KICAgICAgICAgLyogdGhlIHN0YW5kYXJkIHRyZWUgYnVpbGRlciBkb2Vzbid0IGxvb2sgYXQgdGhlIGVuZCB0YWcgKi8KQEAgLTI5OTcsNiArMzAzNSw5IEBACiAgICAgUHlPYmplY3QqIHNwcmVmaXggPSBOVUxMOwogICAgIFB5T2JqZWN0KiBzdXJpID0gTlVMTDsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAodXJpKQogICAgICAgICBzdXJpID0gUHlVbmljb2RlX0RlY29kZVVURjgodXJpLCBzdHJsZW4odXJpKSwgInN0cmljdCIpOwogICAgIGVsc2UKQEAgLTMwMjQsNiArMzA2NSw5IEBACiBzdGF0aWMgdm9pZAogZXhwYXRfZW5kX25zX2hhbmRsZXIoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBjb25zdCBYTUxfQ2hhciogcHJlZml4X2luKQogeworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICB0cmVlYnVpbGRlcl9oYW5kbGVfbmFtZXNwYWNlKAogICAgICAgICAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQsIDAsIE5VTEwsIE5VTEwKICAgICAgICAgKTsKQEAgLTMwMzUsNiArMzA3OSw5IEBACiAgICAgUHlPYmplY3QqIGNvbW1lbnQ7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+aGFuZGxlX2NvbW1lbnQpIHsKICAgICAgICAgY29tbWVudCA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGNvbW1lbnRfaW4sIHN0cmxlbihjb21tZW50X2luKSwgInN0cmljdCIpOwogICAgICAgICBpZiAoY29tbWVudCkgewpAQCAtMzA1Nyw2ICszMTA0LDkgQEAKICAgICBQeU9iamVjdCAqcGFyc2VyX2RvY3R5cGUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGRvY3R5cGVfbmFtZV9vYmogPSBtYWtldW5pdmVyc2FsKHNlbGYsIGRvY3R5cGVfbmFtZSk7CiAgICAgaWYgKCFkb2N0eXBlX25hbWVfb2JqKQogICAgICAgICByZXR1cm47CkBAIC0zMTI1LDYgKzMxNzUsOSBAQAogICAgIFB5T2JqZWN0KiBkYXRhOwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmhhbmRsZV9waSkgewogICAgICAgICB0YXJnZXQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh0YXJnZXRfaW4sIHN0cmxlbih0YXJnZXRfaW4pLCAic3RyaWN0Iik7CiAgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luLCBzdHJsZW4oZGF0YV9pbiksICJzdHJpY3QiKTsKQEAgLTMyOTcsNiArMzM1MCw3IEBACiB7CiAgICAgaW50IG9rOwogCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKICAgICBvayA9IEVYUEFUKFBhcnNlKShzZWxmLT5wYXJzZXIsIGRhdGEsIGRhdGFfbGVuLCBmaW5hbCk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTMzMzEsMTEgKzMzODUsMTQgQEAKICAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gdHJlZWJ1aWxkZXJfZG9uZSgoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQpOwotICAgIH0gaWYgKHNlbGYtPmhhbmRsZV9jbG9zZSkgeworICAgIH0KKyAgICBlbHNlIGlmIChzZWxmLT5oYW5kbGVfY2xvc2UpIHsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+aGFuZGxlX2Nsb3NlLCAiIik7Ci0gICAgfSBlbHNlCisgICAgfQorICAgIGVsc2UgewogICAgICAgICByZXR1cm4gcmVzOworICAgIH0KIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMzM3MywxMCArMzQzMCw5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKLXhtbHBhcnNlcl9wYXJzZShYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreG1scGFyc2VyX3BhcnNlX3dob2xlKFhNTFBhcnNlck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7Ci0gICAgLyogKGludGVybmFsKSBwYXJzZSB1bnRpbCBlbmQgb2YgaW5wdXQgc3RyZWFtICovCi0KKyAgICAvKiAoaW50ZXJuYWwpIHBhcnNlIHRoZSB3aG9sZSBpbnB1dCwgdW50aWwgZW5kIG9mIHN0cmVhbSAqLwogICAgIFB5T2JqZWN0KiByZWFkZXI7CiAgICAgUHlPYmplY3QqIGJ1ZmZlcjsKICAgICBQeU9iamVjdCogdGVtcDsKQEAgLTM0MDMsNyArMzQ1OSw3IEBACiAKICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGJ1ZmZlcikpIHsKICAgICAgICAgICAgIC8qIEEgdW5pY29kZSBvYmplY3QgaXMgZW5jb2RlZCBpbnRvIGJ5dGVzIHVzaW5nIFVURi04ICovCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKGJ1ZmZlcikgPT0gMCkgeworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGJ1ZmZlcikgPT0gMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzQ1NywxNCArMzUxMywxNCBAQAogeG1scGFyc2VyX3NldGV2ZW50cyhYTUxQYXJzZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIC8qIGFjdGl2YXRlIGVsZW1lbnQgZXZlbnQgcmVwb3J0aW5nICovCisgICAgUHlfc3NpemVfdCBpLCBzZXFsZW47CisgICAgVHJlZUJ1aWxkZXJPYmplY3QgKnRhcmdldDsKIAotICAgIFB5X3NzaXplX3QgaTsKLSAgICBUcmVlQnVpbGRlck9iamVjdCogdGFyZ2V0OwotCi0gICAgUHlPYmplY3QqIGV2ZW50czsgLyogZXZlbnQgY29sbGVjdG9yICovCi0gICAgUHlPYmplY3QqIGV2ZW50X3NldCA9IFB5X05vbmU7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOl9zZXRldmVudHMiLCAgJlB5TGlzdF9UeXBlLCAmZXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnRfc2V0KSkKKyAgICBQeU9iamVjdCAqZXZlbnRzX3F1ZXVlOworICAgIFB5T2JqZWN0ICpldmVudHNfdG9fcmVwb3J0ID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqZXZlbnRzX3NlcTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hfE86X3NldGV2ZW50cyIsICAmUHlMaXN0X1R5cGUsICZldmVudHNfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudHNfdG9fcmVwb3J0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIVRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkgewpAQCAtMzQ3OCw5ICszNTM0LDkgQEAKIAogICAgIHRhcmdldCA9IChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldDsKIAotICAgIFB5X0lOQ1JFRihldmVudHMpOworICAgIFB5X0lOQ1JFRihldmVudHNfcXVldWUpOwogICAgIFB5X1hERUNSRUYodGFyZ2V0LT5ldmVudHMpOwotICAgIHRhcmdldC0+ZXZlbnRzID0gZXZlbnRzOworICAgIHRhcmdldC0+ZXZlbnRzID0gZXZlbnRzX3F1ZXVlOwogCiAgICAgLyogY2xlYXIgb3V0IGV4aXN0aW5nIGV2ZW50cyAqLwogICAgIFB5X0NMRUFSKHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqKTsKQEAgLTM0ODgsNzUgKzM1NDQsNzEgQEAKICAgICBQeV9DTEVBUih0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaik7CiAgICAgUHlfQ0xFQVIodGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqKTsKIAotICAgIGlmIChldmVudF9zZXQgPT0gUHlfTm9uZSkgeworICAgIGlmIChldmVudHNfdG9fcmVwb3J0ID09IFB5X05vbmUpIHsKICAgICAgICAgLyogZGVmYXVsdCBpcyAiZW5kIiBvbmx5ICovCiAgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJlbmQiKTsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQogCi0gICAgaWYgKCFQeVR1cGxlX0NoZWNrKGV2ZW50X3NldCkpIC8qIEZJWE1FOiBoYW5kbGUgYXJiaXRyYXJ5IHNlcXVlbmNlcyAqLwotICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghKGV2ZW50c19zZXEgPSBQeVNlcXVlbmNlX0Zhc3QoZXZlbnRzX3RvX3JlcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudHMgbXVzdCBiZSBhIHNlcXVlbmNlIikpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKGV2ZW50X3NldCk7IGkrKykgewotICAgICAgICBQeU9iamVjdCogaXRlbSA9IFB5VHVwbGVfR0VUX0lURU0oZXZlbnRfc2V0LCBpKTsKLSAgICAgICAgY2hhciogZXZlbnQ7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgICAgIGV2ZW50ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhpdGVtKTsKLSAgICAgICAgICAgIGlmIChldmVudCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayhpdGVtKSkKLSAgICAgICAgICAgIGV2ZW50ID0gUHlCeXRlc19BU19TVFJJTkcoaXRlbSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX1NpemUoZXZlbnRzX3NlcSk7CisgICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7CisgICAgICAgIFB5T2JqZWN0ICpldmVudF9uYW1lX29iaiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShldmVudHNfc2VxLCBpKTsKKyAgICAgICAgY2hhciAqZXZlbnRfbmFtZSA9IE5VTEw7CisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soZXZlbnRfbmFtZV9vYmopKSB7CisgICAgICAgICAgICBldmVudF9uYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhldmVudF9uYW1lX29iaik7CisgICAgICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayhldmVudF9uYW1lX29iaikpIHsKKyAgICAgICAgICAgIGV2ZW50X25hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhldmVudF9uYW1lX29iaik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmNtcChldmVudCwgInN0YXJ0IikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9ldmVudF9vYmogPSBpdGVtOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgImVuZCIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKworICAgICAgICBpZiAoZXZlbnRfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgZXZlbnRzIHNlcXVlbmNlIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgInN0YXJ0IikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKKyAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJlbmQiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmVuZF9ldmVudF9vYmopOwotICAgICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gaXRlbTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnQsICJzdGFydC1ucyIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAic3RhcnQtbnMiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaiA9IGl0ZW07CisgICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOwogICAgICAgICAgICAgRVhQQVQoU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIpKAogICAgICAgICAgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgICAgICAgICAoWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X3N0YXJ0X25zX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfZW5kX25zX2hhbmRsZXIKICAgICAgICAgICAgICAgICApOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgImVuZC1ucyIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgImVuZC1ucyIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPmVuZF9uc19ldmVudF9vYmogPSBpdGVtOworICAgICAgICAgICAgdGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CiAgICAgICAgICAgICBFWFBBVChTZXROYW1lc3BhY2VEZWNsSGFuZGxlcikoCiAgICAgICAgICAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICAgICAgICAgIChYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfc3RhcnRfbnNfaGFuZGxlciwKICAgICAgICAgICAgICAgICAoWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9lbmRfbnNfaGFuZGxlcgogICAgICAgICAgICAgICAgICk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAidW5rbm93biBldmVudCAnJXMnIiwgZXZlbnQKLSAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIGV2ZW50ICclcyciLCBldmVudF9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQogCisgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOwogICAgIFB5X1JFVFVSTl9OT05FOwotCi0gIGVycm9yOgotICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAiaW52YWxpZCBldmVudCB0dXBsZSIKLSAgICAgICAgKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHhtbHBhcnNlcl9tZXRob2RzW10gPSB7CiAgICAgeyJmZWVkIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfZmVlZCwgTUVUSF9PfSwKICAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfY2xvc2UsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJfcGFyc2UiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9wYXJzZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Il9wYXJzZV93aG9sZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3BhcnNlX3dob2xlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiX3NldGV2ZW50cyIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3NldGV2ZW50cywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImRvY3R5cGUiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9kb2N0eXBlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHtOVUxMLCBOVUxMfQpAQCAtMzYyOCw4ICszNjgwLDYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCi0jZW5kaWYKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIHB5dGhvbiBtb2R1bGUgaW50ZXJmYWNlICovCiAKQEAgLTM2MzksMjIgKzM2ODksMjkgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfZWxlbWVudHRyZWVtb2R1bGUgPSB7Ci0gICAgICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAgICAgIl9lbGVtZW50dHJlZSIsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIC0xLAotICAgICAgICBfZnVuY3Rpb25zLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGVsZW1lbnR0cmVlbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX2VsZW1lbnR0cmVlIiwKKyAgICBOVUxMLAorICAgIHNpemVvZihlbGVtZW50dHJlZXN0YXRlKSwKKyAgICBfZnVuY3Rpb25zLAorICAgIE5VTEwsCisgICAgZWxlbWVudHRyZWVfdHJhdmVyc2UsCisgICAgZWxlbWVudHRyZWVfY2xlYXIsCisgICAgZWxlbWVudHRyZWVfZnJlZQogfTsKIAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fZWxlbWVudHRyZWUodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbSwgKnRlbXA7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3Q7CisKKyAgICBtID0gUHlTdGF0ZV9GaW5kTW9kdWxlKCZlbGVtZW50dHJlZW1vZHVsZSk7CisgICAgaWYgKG0pIHsKKyAgICAgICAgUHlfSU5DUkVGKG0pOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CiAKICAgICAvKiBJbml0aWFsaXplIG9iamVjdCB0eXBlcyAqLwogICAgIGlmIChQeVR5cGVfUmVhZHkoJkVsZW1lbnRJdGVyX1R5cGUpIDwgMCkKQEAgLTM2NjMsMjEgKzM3MjAsMjAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmRWxlbWVudF9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmIGRlZmluZWQoVVNFX0VYUEFUKQogICAgIGlmIChQeVR5cGVfUmVhZHkoJlhNTFBhcnNlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCiAKLSAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfZWxlbWVudHRyZWVtb2R1bGUpOworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJmVsZW1lbnR0cmVlbW9kdWxlKTsKICAgICBpZiAoIW0pCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0ID0gRVRfU1RBVEUobSk7CiAKICAgICBpZiAoISh0ZW1wID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJjb3B5IikpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbGVtZW50dHJlZV9kZWVwY29weV9vYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJkZWVwY29weSIpOworICAgIHN0LT5kZWVwY29weV9vYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJkZWVwY29weSIpOwogICAgIFB5X1hERUNSRUYodGVtcCk7CiAKLSAgICBpZiAoIShlbGVtZW50cGF0aF9vYmogPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInhtbC5ldHJlZS5FbGVtZW50UGF0aCIpKSkKKyAgICBpZiAoIShzdC0+ZWxlbWVudHBhdGhfb2JqID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJ4bWwuZXRyZWUuRWxlbWVudFBhdGgiKSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogbGluayBhZ2FpbnN0IHB5ZXhwYXQgKi8KQEAgLTM2OTcsMTEgKzM3NTMsMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmogPSBQeUVycl9OZXdFeGNlcHRpb24oCisgICAgc3QtPnBhcnNlZXJyb3Jfb2JqID0gUHlFcnJfTmV3RXhjZXB0aW9uKAogICAgICAgICAieG1sLmV0cmVlLkVsZW1lbnRUcmVlLlBhcnNlRXJyb3IiLCBQeUV4Y19TeW50YXhFcnJvciwgTlVMTAogICAgICAgICApOwotICAgIFB5X0lOQ1JFRihlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaik7Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQYXJzZUVycm9yIiwgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmopOworICAgIFB5X0lOQ1JFRihzdC0+cGFyc2VlcnJvcl9vYmopOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGFyc2VFcnJvciIsIHN0LT5wYXJzZWVycm9yX29iaik7CiAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJkVsZW1lbnRfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJFbGVtZW50IiwgKFB5T2JqZWN0ICopJkVsZW1lbnRfVHlwZSk7CkBAIC0zNzA5LDEwICszNzY1LDggQEAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlRyZWVCdWlsZGVyX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVHJlZUJ1aWxkZXIiLCAoUHlPYmplY3QgKikmVHJlZUJ1aWxkZXJfVHlwZSk7CiAKLSNpZiBkZWZpbmVkKFVTRV9FWFBBVCkKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlhNTFBhcnNlcl9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlhNTFBhcnNlciIsIChQeU9iamVjdCAqKSZYTUxQYXJzZXJfVHlwZSk7Ci0jZW5kaWYKIAogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jIGIvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCmluZGV4IDhmMDdhODkuLjU3YjFhYzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYworKysgYi9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgIG9mIGZyb3plbiBtb2R1bGVzIGluc3RlYWQsIGxlZnQgZGVsaWJlcmF0ZWx5IGJsYW5rIHNvIGFzIHRvIGF2b2lkCiAgICB1bmludGVudGlvbmFsIGltcG9ydCBvZiBhIHN0YWxlIHZlcnNpb24gb2YgX2Zyb3plbl9pbXBvcnRsaWIuICovCiAKLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0geworY29uc3Qgc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CiAgICAgezAsIDAsIDB9IC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNSw3ICsyNSw3IEBACiAvKiBPbiBXaW5kb3dzLCB0aGlzIGxpbmtzIHdpdGggdGhlIHJlZ3VsYXIgcHl0aG9uWFkuZGxsLCBzbyB0aGlzIHZhcmlhYmxlIGNvbWVzCiAgICBmcm9tIGZyb3plbi5vYmouIEluIHRoZSBNYWtlZmlsZSwgZnJvemVuLm8gaXMgbm90IGxpbmtlZCBpbnRvIHRoaXMgZXhlY3V0YWJsZSwKICAgIHNvIHdlIGRlZmluZSB0aGUgdmFyaWFibGUgaGVyZS4gKi8KLXN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOworY29uc3Qgc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CiAjZW5kaWYKIAogY29uc3QgY2hhciBoZWFkZXJbXSA9ICIvKiBBdXRvLWdlbmVyYXRlZCBieSBNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMgKi8iOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGZwcmludGYob3V0ZmlsZSwgIiVzXG4iLCBoZWFkZXIpOwotICAgIGZwcmludGYob3V0ZmlsZSwgInVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0ge1xuIik7CisgICAgZnByaW50ZihvdXRmaWxlLCAiY29uc3QgdW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7XG4iKTsKICAgICBmb3IgKG4gPSAwOyBuIDwgZGF0YV9zaXplOyBuICs9IDE2KSB7CiAgICAgICAgIHNpemVfdCBpLCBlbmQgPSBQeV9NSU4obiArIDE2LCBkYXRhX3NpemUpOwogICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgICAgIik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMgYi9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKaW5kZXggMGJkNTljOC4uMjI5ZTE2ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwpAQCAtNzksNyArNzksNyBAQAogLyogTWV0aG9kcyAqLwogCiBzdGF0aWMgdm9pZAotZGJtX2RlYWxsb2MocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCkKK2RibV9kZWFsbG9jKGRibW9iamVjdCAqZHApCiB7CiAgICAgaWYgKGRwLT5kaV9kYm0pCiAgICAgICAgIGdkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC0xMTIsNyArMTEyLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBkcmVjLCBrcmVjOwpAQCAtMjMyLDcgKzIzMiw3IEBACiBDbG9zZXMgdGhlIGRhdGFiYXNlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2Nsb3NlKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZ2RibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTI0Nyw5ICsyNDcsOSBAQAogR2V0IGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2tleXMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdiwgKml0ZW07CisgICAgUHlPYmplY3QgKnYsICppdGVtOwogICAgIGRhdHVtIGtleSwgbmV4dGtleTsKICAgICBpbnQgZXJyOwogCkBAIC0zMzcsOSArMzM3LDkgQEAKIHJldHVybnMgdGhlIHN0YXJ0aW5nIGtleS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9maXJzdGtleShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2ZpcnN0a2V5KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5OwogCiAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwpAQCAtMzY3LDkgKzM2Nyw5IEBACiAgICAgICAgICAgayA9IGRiLm5leHRrZXkoaykiKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9uZXh0a2V5KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQorZGJtX25leHRrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5LCBuZXh0a2V5OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpuZXh0a2V5IiwgJmtleS5kcHRyLCAma2V5LmRzaXplKSkKQEAgLTM5Niw3ICszOTYsNyBAQAoga2VwdCBhbmQgcmV1c2VkIGFzIG5ldyAoa2V5LHZhbHVlKSBwYWlycyBhcmUgYWRkZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fcmVvcmdhbml6ZShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX3Jlb3JnYW5pemUoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CiAgICAgZXJybm8gPSAwOwpAQCAtNDE3LDcgKzQxNyw3IEBACiBhbnkgdW53cml0dGVuIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGlzay4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zeW5jKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fc3luYyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKICAgICBnZGJtX3N5bmMoZHAtPmRpX2RibSk7CkBAIC00MjUsNiArNDI1LDIwIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fX2VudGVyX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZXhpdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfY2xvc2UsIE5VTEwpOworfQorCiBzdGF0aWMgUHlNZXRob2REZWYgZGJtX21ldGhvZHNbXSA9IHsKICAgICB7ImNsb3NlIiwgICAgIChQeUNGdW5jdGlvbilkYm1fY2xvc2UsICAgTUVUSF9OT0FSR1MsIGRibV9jbG9zZV9fZG9jX199LAogICAgIHsia2V5cyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9rZXlzLCAgICBNRVRIX05PQVJHUywgZGJtX2tleXNfX2RvY19ffSwKQEAgLTQzNCw2ICs0NDgsOCBAQAogICAgIHsic3luYyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zeW5jLCAgICBNRVRIX05PQVJHUywgZGJtX3N5bmNfX2RvY19ffSwKICAgICB7ImdldCIsICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgTUVUSF9WQVJBUkdTLCBkYm1fZ2V0X19kb2NfX30sCiAgICAgeyJzZXRkZWZhdWx0IiwoUHlDRnVuY3Rpb24pZGJtX3NldGRlZmF1bHQsTUVUSF9WQVJBUkdTLCBkYm1fc2V0ZGVmYXVsdF9fZG9jX199LAorICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZ2VzdGFsdC5jIGIvTW9kdWxlcy9fZ2VzdGFsdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDMwNjgzLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2dlc3RhbHQuYworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NyBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCi1USElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi1GSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFCi1GT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi1BQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNYWNpbnRvc2ggR2VzdGFsdCBpbnRlcmZhY2UgKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotCi0vKiBDb252ZXJ0IGEgNC1jaGFyIHN0cmluZyBvYmplY3QgYXJndW1lbnQgdG8gYW4gT1NUeXBlIHZhbHVlICovCi1zdGF0aWMgaW50Ci1jb252ZXJ0X3RvX09TVHlwZShQeU9iamVjdCAqdiwgT1NUeXBlICpwcikKLXsKLSAgICB1aW50MzJfdCB0bXA7Ci0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikgfHwgUHlVbmljb2RlX0dldExlbmd0aCh2KSAhPSA0KSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIk9TVHlwZSBhcmcgbXVzdCBiZSBzdHJpbmcgb2YgNCBjaGFycyIpOwotICAgIHJldHVybiAwOwotICAgIH0KLSAgICBtZW1jcHkoKGNoYXIgKikmdG1wLCBfUHlVbmljb2RlX0FzU3RyaW5nKHYpLCA0KTsKLSAgICAqcHIgPSAoT1NUeXBlKW50b2hsKHRtcCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1nZXN0YWx0X2dlc3RhbHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIE9TRXJyIGlFcnI7Ci0gICAgT1NUeXBlIHNlbGVjdG9yOwotICAgIFNJbnQzMiByZXNwb25zZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mIiwgY29udmVydF90b19PU1R5cGUsICZzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlFcnIgPSBHZXN0YWx0KHNlbGVjdG9yLCAmcmVzcG9uc2UpOwotICAgIGlmIChpRXJyICE9IDApIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGV4aXQgY29kZSEiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyZXNwb25zZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgZ2VzdGFsdF9tZXRob2RzW10gPSB7Ci0gICAgeyJnZXN0YWx0IiwgZ2VzdGFsdF9nZXN0YWx0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHtOVUxMLCBOVUxMfSAvKiBTZW50aW5lbCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBnZXN0YWx0bW9kdWxlID0gewotICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAiX2dlc3RhbHQiLAotICAgIE5VTEwsCi0gICAgLTEsCi0gICAgZ2VzdGFsdF9tZXRob2RzLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKLX07Ci0KLVB5TU9ESU5JVF9GVU5DCi1QeUluaXRfX2dlc3RhbHQodm9pZCkKLXsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZnZXN0YWx0bW9kdWxlKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMgYi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCmluZGV4IDNhYjFjMGMuLjZhMmE5YWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKKysrIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwpAQCAtMTcsMzYgKzE3LDE2IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiaGFzaGxpYi5oIgogCi0jaWZkZWYgV0lUSF9USFJFQUQKLSNpbmNsdWRlICJweXRocmVhZC5oIgotICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKLSAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKLSAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCi0gICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCi0gICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAotICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9Ci0gICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAotICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAotICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAotICAgICAgICB9Ci0jZWxzZQotICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCi0gICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKLSNlbmRpZgogCiAvKiBFVlAgaXMgdGhlIHByZWZlcnJlZCBpbnRlcmZhY2UgdG8gaGFzaGluZyBpbiBPcGVuU1NMICovCiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KIC8qIFdlIHVzZSB0aGUgb2JqZWN0IGludGVyZmFjZSB0byBkaXNjb3ZlciB3aGF0IGhhc2hlcyBPcGVuU1NMIHN1cHBvcnRzLiAqLwogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCiAKICNkZWZpbmUgTVVOQ0hfU0laRSBJTlRfTUFYCiAKLS8qIFRPRE8oZ3BzKTogV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1vZHVsZSBvciBFVlBvYmplY3QgYXR0cmlidXRlCi0gKiB0byBhbGxvdyB0aGUgdXNlciB0byBvcHRpbWl6ZSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0gdGhleSdyZSB1c2luZy4gKi8KLSNkZWZpbmUgSEFTSExJQl9HSUxfTUlOU0laRSAyMDQ4Ci0KICNpZm5kZWYgSEFTSF9PQkpfQ09OU1RSVUNUT1IKICNkZWZpbmUgSEFTSF9PQkpfQ09OU1RSVUNUT1IgMAogI2VuZGlmCkBAIC00ODksNiArNDY5LDIyNSBAQAogfQogCiAKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDAwMDAgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ITUFDKSBcCisgICAgICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSkKKworI2RlZmluZSBQWV9QQktERjJfSE1BQyAxCisKKy8qIEltcHJvdmVkIGltcGxlbWVudGF0aW9uIG9mIFBLQ1M1X1BCS0RGMl9ITUFDKCkKKyAqCisgKiBQS0NTNV9QQktERjJfSE1BQ19mYXN0KCkgaGFzaGVzIHRoZSBwYXNzd29yZCBleGFjdGx5IG9uZSB0aW1lIGluc3RlYWQgb2YKKyAqIGBpdGVyYCB0aW1lcy4gVG9kYXkgKDIwMTMpIHRoZSBpdGVyYXRpb24gY291bnQgaXMgdHlwaWNhbGx5IDEwMCwwMDAgb3IKKyAqIG1vcmUuIFRoZSBpbXByb3ZlZCBhbGdvcml0aG0gaXMgbm90IHN1YmplY3QgdG8gYSBEZW5pYWwtb2YtU2VydmljZQorICogdnVsbmVyYWJpbGl0eSB3aXRoIG92ZXJseSBsYXJnZSBwYXNzd29yZHMuCisgKgorICogQWxzbyBPcGVuU1NMIDwgMS4wIGRvbid0IHByb3ZpZGUgUEtDUzVfUEJLREYyX0hNQUMoKSwgb25seQorICogUEtDUzVfUEJLREYyX1NIQTEuCisgKi8KK3N0YXRpYyBpbnQKK1BLQ1M1X1BCS0RGMl9ITUFDX2Zhc3QoY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlciwgY29uc3QgRVZQX01EICpkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ3RtcFtFVlBfTUFYX01EX1NJWkVdLCAqcCwgaXRtcFs0XTsKKyAgICBpbnQgY3BsZW4sIGosIGssIHRrZXlsZW4sIG1kbGVuOworICAgIHVuc2lnbmVkIGxvbmcgaSA9IDE7CisgICAgSE1BQ19DVFggaGN0eF90cGwsIGhjdHg7CisKKyAgICBtZGxlbiA9IEVWUF9NRF9zaXplKGRpZ2VzdCk7CisgICAgaWYgKG1kbGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBITUFDX0NUWF9pbml0KCZoY3R4X3RwbCk7CisgICAgSE1BQ19DVFhfaW5pdCgmaGN0eCk7CisgICAgcCA9IG91dDsKKyAgICB0a2V5bGVuID0ga2V5bGVuOworICAgIGlmICghSE1BQ19Jbml0X2V4KCZoY3R4X3RwbCwgcGFzcywgcGFzc2xlbiwgZGlnZXN0LCBOVUxMKSkgeworICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB3aGlsZSh0a2V5bGVuKSB7CisgICAgICAgIGlmKHRrZXlsZW4gPiBtZGxlbikKKyAgICAgICAgICAgIGNwbGVuID0gbWRsZW47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNwbGVuID0gdGtleWxlbjsKKyAgICAgICAgLyogV2UgYXJlIHVubGlrZWx5IHRvIGV2ZXIgdXNlIG1vcmUgdGhhbiAyNTYgYmxvY2tzICg1MTIwIGJpdHMhKQorICAgICAgICAgKiBidXQganVzdCBpbiBjYXNlLi4uCisgICAgICAgICAqLworICAgICAgICBpdG1wWzBdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDI0KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzFdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzJdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDgpICYgMHhmZik7CisgICAgICAgIGl0bXBbM10gPSAodW5zaWduZWQgY2hhcikoaSAmIDB4ZmYpOworICAgICAgICBpZiAoIUhNQUNfQ1RYX2NvcHkoJmhjdHgsICZoY3R4X3RwbCkpIHsKKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmICghSE1BQ19VcGRhdGUoJmhjdHgsIHNhbHQsIHNhbHRsZW4pCisgICAgICAgICAgICAgICAgfHwgIUhNQUNfVXBkYXRlKCZoY3R4LCBpdG1wLCA0KQorICAgICAgICAgICAgICAgIHx8ICFITUFDX0ZpbmFsKCZoY3R4LCBkaWd0bXAsIE5VTEwpKSB7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICBtZW1jcHkocCwgZGlndG1wLCBjcGxlbik7CisgICAgICAgIGZvciAoaiA9IDE7IGogPCBpdGVyOyBqKyspIHsKKyAgICAgICAgICAgIGlmICghSE1BQ19DVFhfY29weSgmaGN0eCwgJmhjdHhfdHBsKSkgeworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghSE1BQ19VcGRhdGUoJmhjdHgsIGRpZ3RtcCwgbWRsZW4pCisgICAgICAgICAgICAgICAgICAgIHx8ICFITUFDX0ZpbmFsKCZoY3R4LCBkaWd0bXAsIE5VTEwpKSB7CisgICAgICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY3BsZW47IGsrKykgeworICAgICAgICAgICAgICAgIHBba10gXj0gZGlndG1wW2tdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRrZXlsZW4tPSBjcGxlbjsKKyAgICAgICAgaSsrOworICAgICAgICBwKz0gY3BsZW47CisgICAgfQorICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICByZXR1cm4gMTsKK30KKworLyogTENPVl9FWENMX1NUQVJUICovCitzdGF0aWMgUHlPYmplY3QgKgorX3NldEV4Y2VwdGlvbihQeU9iamVjdCAqZXhjKQoreworICAgIHVuc2lnbmVkIGxvbmcgZXJyY29kZTsKKyAgICBjb25zdCBjaGFyICpsaWIsICpmdW5jLCAqcmVhc29uOworCisgICAgZXJyY29kZSA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKKyAgICBpZiAoIWVycmNvZGUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKGV4YywgInVua25vd24gcmVhc29ucyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisKKyAgICBsaWIgPSBFUlJfbGliX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKyAgICBmdW5jID0gRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKGVycmNvZGUpOworICAgIHJlYXNvbiA9IEVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nKGVycmNvZGUpOworCisgICAgaWYgKGxpYiAmJiBmdW5jKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChleGMsICJbJXM6ICVzXSAlcyIsIGxpYiwgZnVuYywgcmVhc29uKTsKKyAgICB9CisgICAgZWxzZSBpZiAobGliKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChleGMsICJbJXNdICVzIiwgbGliLCByZWFzb24pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKGV4YywgcmVhc29uKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisvKiBMQ09WX0VYQ0xfU1RPUCAqLworCitQeURvY19TVFJWQVIocGJrZGYyX2htYWNfX2RvY19fLAorInBia2RmMl9obWFjKGhhc2hfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGRrbGVuPU5vbmUpIC0+IGtleVxuXAorXG5cCitQYXNzd29yZCBiYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyIChQS0NTICM1IHYyLjApIHdpdGggSE1BQyBhc1xuXAorcHNldWRvcmFuZG9tIGZ1bmN0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcGJrZGYyX2htYWMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaGFzaF9uYW1lIiwgInBhc3N3b3JkIiwgInNhbHQiLCAiaXRlcmF0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJka2xlbiIsIE5VTEx9OworICAgIFB5T2JqZWN0ICprZXlfb2JqID0gTlVMTCwgKmRrbGVuX29iaiA9IFB5X05vbmU7CisgICAgY2hhciAqbmFtZSwgKmtleTsKKyAgICBQeV9idWZmZXIgcGFzc3dvcmQsIHNhbHQ7CisgICAgbG9uZyBpdGVyYXRpb25zLCBka2xlbjsKKyAgICBpbnQgcmV0dmFsOworICAgIGNvbnN0IEVWUF9NRCAqZGlnZXN0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAic3kqeSpsfE86cGJrZGYyX2htYWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm5hbWUsICZwYXNzd29yZCwgJnNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZXJhdGlvbnMsICZka2xlbl9vYmopKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGRpZ2VzdCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKG5hbWUpOworICAgIGlmIChkaWdlc3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVuc3VwcG9ydGVkIGhhc2ggdHlwZSIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAocGFzc3dvcmQubGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzd29yZCBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHNhbHQubGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzYWx0IGlzIHRvbyBsb25nLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoaXRlcmF0aW9ucyA8IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoaXRlcmF0aW9ucyA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uIHZhbHVlIGlzIHRvbyBncmVhdC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKGRrbGVuX29iaiA9PSBQeV9Ob25lKSB7CisgICAgICAgIGRrbGVuID0gRVZQX01EX3NpemUoZGlnZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBka2xlbiA9IFB5TG9uZ19Bc0xvbmcoZGtsZW5fb2JqKTsKKyAgICAgICAgaWYgKChka2xlbiA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGRrbGVuIDwgMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXkgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoZGtsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIC8qIElOVF9NQVggaXMgYWx3YXlzIHNtYWxsZXIgdGhhbiBka0xlbiBtYXggKDJeMzIgLSAxKSAqIGhMZW4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAia2V5IGxlbmd0aCBpcyB0b28gZ3JlYXQuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGtleV9vYmogPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGRrbGVuKTsKKyAgICBpZiAoa2V5X29iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBrZXkgPSBQeUJ5dGVzX0FTX1NUUklORyhrZXlfb2JqKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXR2YWwgPSBQS0NTNV9QQktERjJfSE1BQ19mYXN0KChjaGFyKilwYXNzd29yZC5idWYsIChpbnQpcGFzc3dvcmQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilzYWx0LmJ1ZiwgKGludClzYWx0LmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMsIGRpZ2VzdCwgZGtsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWtleSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgIFB5X0NMRUFSKGtleV9vYmopOworICAgICAgICBfc2V0RXhjZXB0aW9uKFB5RXhjX1ZhbHVlRXJyb3IpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgZW5kOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc3N3b3JkKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzYWx0KTsKKyAgICByZXR1cm4ga2V5X29iajsKK30KKworI2VuZGlmCisKIC8qIFN0YXRlIGZvciBvdXIgY2FsbGJhY2sgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gYWNjdW11bGF0ZSBhIHJlc3VsdC4gKi8KIHR5cGVkZWYgc3RydWN0IF9pbnRlcm5hbF9uYW1lX21hcHBlcl9zdGF0ZSB7CiAgICAgUHlPYmplY3QgKnNldDsKQEAgLTUxNyw5ICs3MTYsOSBAQAogICAgICAgICBzdGF0ZS0+ZXJyb3IgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChQeVNldF9BZGQoc3RhdGUtPnNldCwgcHlfbmFtZSkgIT0gMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHB5X25hbWUpOwogICAgICAgICAgICAgc3RhdGUtPmVycm9yID0gMTsKICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocHlfbmFtZSk7CiAgICAgfQogfQogCkBAIC02MTAsNiArODA5LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgRVZQX2Z1bmN0aW9uc1tdID0gewogICAgIHsibmV3IiwgKFB5Q0Z1bmN0aW9uKUVWUF9uZXcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBFVlBfbmV3X19kb2NfX30sCisjaWZkZWYgUFlfUEJLREYyX0hNQUMKKyAgICB7InBia2RmMl9obWFjIiwgKFB5Q0Z1bmN0aW9uKXBia2RmMl9obWFjLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgcGJrZGYyX2htYWNfX2RvY19ffSwKKyNlbmRpZgogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKG1kNSksCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhMSksCiAjaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgpAQCAtNjQzLDYgKzg0Niw3IEBACiAgICAgUHlPYmplY3QgKm0sICpvcGVuc3NsX21kX21ldGhfbmFtZXM7CiAKICAgICBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cygpOworICAgIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7CiAKICAgICAvKiBUT0RPIGJ1aWxkIEVWUF9mdW5jdGlvbnMgb3BlbnNzbF8qIGVudHJpZXMgZHluYW1pY2FsbHkgYmFzZWQKICAgICAgKiBvbiB3aGF0IGhhc2hlcyBhcmUgc3VwcG9ydGVkIHJhdGhlciB0aGFuIGxpc3RpbmcgbWFueQpAQCAtNjY3LDEwICs4NzEsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSNpZiBIQVNIX09CSl9DT05TVFJVQ1RPUgotICAgIFB5X0lOQ1JFRigmRVZQdHlwZSk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZFVlB0eXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkhBU0giLCAoUHlPYmplY3QgKikmRVZQdHlwZSk7Ci0jZW5kaWYKIAogICAgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBieSB0aGUgY29udmVuaWVuY2UgY29uc3RydWN0b3JzICovCiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMobWQ1KTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMgYi9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCmluZGV4IGYzNzdlOWMuLmVlZTU2YTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwpAQCAtNjIsNyArNjIsNyBAQAogc3RhdGljIGludAogX3NpZnR1cChQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3QgcG9zKQogewotICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIGVuZHBvcywgY2hpbGRwb3MsIHJpZ2h0cG9zOworICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIGVuZHBvcywgY2hpbGRwb3MsIHJpZ2h0cG9zLCBsaW1pdDsKICAgICBpbnQgY21wOwogICAgIFB5T2JqZWN0ICpuZXdpdGVtLCAqdG1wLCAqb2xkaXRlbTsKICAgICBQeV9zc2l6ZV90IHNpemU7CkBAIC03OSw5ICs3OSwxMCBAQAogICAgIFB5X0lOQ1JFRihuZXdpdGVtKTsKIAogICAgIC8qIEJ1YmJsZSB1cCB0aGUgc21hbGxlciBjaGlsZCB1bnRpbCBoaXR0aW5nIGEgbGVhZi4gKi8KLSAgICBjaGlsZHBvcyA9IDIqcG9zICsgMTsgICAgLyogbGVmdG1vc3QgY2hpbGQgcG9zaXRpb24gICovCi0gICAgd2hpbGUgKGNoaWxkcG9zIDwgZW5kcG9zKSB7CisgICAgbGltaXQgPSBlbmRwb3MgLyAyOyAgICAgICAgICAvKiBzbWFsbGVzdCBwb3MgdGhhdCBoYXMgbm8gY2hpbGQgKi8KKyAgICB3aGlsZSAocG9zIDwgbGltaXQpIHsKICAgICAgICAgLyogU2V0IGNoaWxkcG9zIHRvIGluZGV4IG9mIHNtYWxsZXIgY2hpbGQuICAgKi8KKyAgICAgICAgY2hpbGRwb3MgPSAyKnBvcyArIDE7ICAgIC8qIGxlZnRtb3N0IGNoaWxkIHBvc2l0aW9uICAqLwogICAgICAgICByaWdodHBvcyA9IGNoaWxkcG9zICsgMTsKICAgICAgICAgaWYgKHJpZ2h0cG9zIDwgZW5kcG9zKSB7CiAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woCkBAIC0xMDgsNyArMTA5LDYgQEAKICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBvcywgdG1wKTsKICAgICAgICAgUHlfREVDUkVGKG9sZGl0ZW0pOwogICAgICAgICBwb3MgPSBjaGlsZHBvczsKLSAgICAgICAgY2hpbGRwb3MgPSAyKnBvcyArIDE7CiAgICAgICAgIGlmIChzaXplICE9IFB5TGlzdF9HRVRfU0laRShoZWFwKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdCBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOwpAQCAtMTY4LDcgKzE2OCwxMCBAQAogCiAgICAgbGFzdGVsdCA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBuLTEpIDsKICAgICBQeV9JTkNSRUYobGFzdGVsdCk7Ci0gICAgUHlMaXN0X1NldFNsaWNlKGhlYXAsIG4tMSwgbiwgTlVMTCk7CisgICAgaWYgKFB5TGlzdF9TZXRTbGljZShoZWFwLCBuLTEsIG4sIE5VTEwpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYobGFzdGVsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBuLS07CiAKICAgICBpZiAoIW4pCkBAIC00MTYsNyArNDE5LDcgQEAKIHN0YXRpYyBpbnQKIF9zaWZ0dXBtYXgoUHlMaXN0T2JqZWN0ICpoZWFwLCBQeV9zc2l6ZV90IHBvcykKIHsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBlbmRwb3MsIGNoaWxkcG9zLCByaWdodHBvczsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBlbmRwb3MsIGNoaWxkcG9zLCByaWdodHBvcywgbGltaXQ7CiAgICAgaW50IGNtcDsKICAgICBQeU9iamVjdCAqbmV3aXRlbSwgKnRtcDsKIApAQCAtNDMxLDkgKzQzNCwxMCBAQAogICAgIFB5X0lOQ1JFRihuZXdpdGVtKTsKIAogICAgIC8qIEJ1YmJsZSB1cCB0aGUgc21hbGxlciBjaGlsZCB1bnRpbCBoaXR0aW5nIGEgbGVhZi4gKi8KLSAgICBjaGlsZHBvcyA9IDIqcG9zICsgMTsgICAgLyogbGVmdG1vc3QgY2hpbGQgcG9zaXRpb24gICovCi0gICAgd2hpbGUgKGNoaWxkcG9zIDwgZW5kcG9zKSB7CisgICAgbGltaXQgPSBlbmRwb3MgLyAyOyAgICAgICAgICAvKiBzbWFsbGVzdCBwb3MgdGhhdCBoYXMgbm8gY2hpbGQgKi8KKyAgICB3aGlsZSAocG9zIDwgbGltaXQpIHsKICAgICAgICAgLyogU2V0IGNoaWxkcG9zIHRvIGluZGV4IG9mIHNtYWxsZXIgY2hpbGQuICAgKi8KKyAgICAgICAgY2hpbGRwb3MgPSAyKnBvcyArIDE7ICAgIC8qIGxlZnRtb3N0IGNoaWxkIHBvc2l0aW9uICAqLwogICAgICAgICByaWdodHBvcyA9IGNoaWxkcG9zICsgMTsKICAgICAgICAgaWYgKHJpZ2h0cG9zIDwgZW5kcG9zKSB7CiAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woCkBAIC00NTMsNyArNDU3LDYgQEAKICAgICAgICAgUHlfREVDUkVGKFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpKTsKICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBvcywgdG1wKTsKICAgICAgICAgcG9zID0gY2hpbGRwb3M7Ci0gICAgICAgIGNoaWxkcG9zID0gMipwb3MgKyAxOwogICAgIH0KIAogICAgIC8qIFRoZSBsZWFmIGF0IHBvcyBpcyBlbXB0eSBub3cuICBQdXQgbmV3aXRlbSB0aGVyZSwgYW5kIGJ1YmJsZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuYwppbmRleCA0YTdlNzU4Li43YzRmOWNiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYworKysgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuYwpAQCAtMTI2LDggKzEyNiw3IEBACiAiJ2InICAgICAgIGJpbmFyeSBtb2RlXG4iCiAiJ3QnICAgICAgIHRleHQgbW9kZSAoZGVmYXVsdClcbiIKICInKycgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpXG4iCi0iJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdW5uZWVkZWRcbiIKLSIgICAgICAgICAgZm9yIG5ldyBjb2RlKVxuIgorIidVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChkZXByZWNhdGVkKVxuIgogIj09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKICJcbiIKICJUaGUgZGVmYXVsdCBtb2RlIGlzICdydCcgKG9wZW4gZm9yIHJlYWRpbmcgdGV4dCkuIEZvciBiaW5hcnkgcmFuZG9tXG4iCkBAIC0xNDMsNiArMTQyLDEwIEBACiAicmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYVxuIgogInBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLlxuIgogIlxuIgorIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGluIGZ1dHVyZSB2ZXJzaW9uc1xuIgorIm9mIFB5dGhvbi4gIEl0IGhhcyBubyBlZmZlY3QgaW4gUHl0aG9uIDMuICBVc2UgbmV3bGluZSB0byBjb250cm9sXG4iCisidW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuXG4iCisiXG4iCiAiYnVmZmVyaW5nIGlzIGFuIG9wdGlvbmFsIGludGVnZXIgdXNlZCB0byBzZXQgdGhlIGJ1ZmZlcmluZyBwb2xpY3kuXG4iCiAiUGFzcyAwIHRvIHN3aXRjaCBidWZmZXJpbmcgb2ZmIChvbmx5IGFsbG93ZWQgaW4gYmluYXJ5IG1vZGUpLCAxIHRvIHNlbGVjdFxuIgogImxpbmUgYnVmZmVyaW5nIChvbmx5IHVzYWJsZSBpbiB0ZXh0IG1vZGUpLCBhbmQgYW4gaW50ZWdlciA+IDEgdG8gaW5kaWNhdGVcbiIKQEAgLTIzMiwxMSArMjM1LDEyIEBACiAgICAgY2hhciByYXdtb2RlWzZdLCAqbTsKICAgICBpbnQgbGluZV9idWZmZXJpbmcsIGlzYXR0eTsKIAotICAgIFB5T2JqZWN0ICpyYXcsICptb2Rlb2JqID0gTlVMTCwgKmJ1ZmZlciA9IE5VTEwsICp3cmFwcGVyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmF3LCAqbW9kZW9iaiA9IE5VTEwsICpidWZmZXIsICp3cmFwcGVyLCAqcmVzdWx0ID0gTlVMTDsKIAogICAgIF9QeV9JREVOVElGSUVSKGlzYXR0eSk7CiAgICAgX1B5X0lERU5USUZJRVIoZmlsZW5vKTsKICAgICBfUHlfSURFTlRJRklFUihtb2RlKTsKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xzaXp6emlPOm9wZW4iLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZtb2RlLCAmYnVmZmVyaW5nLApAQCAtMzEwLDYgKzMxNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBVIGFuZCB3cml0aW5nIG1vZGUgYXQgb25jZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmVhZGluZyA9IDE7CiAgICAgfQogCkBAIC0zNDgsNiArMzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9zaU8iLCBmaWxlLCByYXdtb2RlLCBjbG9zZWZkLCBvcGVuZXIpOwogICAgIGlmIChyYXcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gcmF3OwogCiAgICAgbW9kZW9iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG1vZGUpOwogICAgIGlmIChtb2Rlb2JqID09IE5VTEwpCkBAIC00MDYsNyArNDE0LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIFB5X0RFQ1JFRihtb2Rlb2JqKTsKLSAgICAgICAgcmV0dXJuIHJhdzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICAvKiB3cmFwcyBpbnRvIGEgYnVmZmVyZWQgZmlsZSAqLwpAQCAtNDI3LDE1ICs0MzUsMTYgQEAKIAogICAgICAgICBidWZmZXIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oQnVmZmVyZWRfY2xhc3MsICJPaSIsIHJhdywgYnVmZmVyaW5nKTsKICAgICB9Ci0gICAgUHlfQ0xFQVIocmF3KTsKICAgICBpZiAoYnVmZmVyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgcmVzdWx0ID0gYnVmZmVyOworICAgIFB5X0RFQ1JFRihyYXcpOwogCiAKICAgICAvKiBpZiBiaW5hcnksIHJldHVybnMgdGhlIGJ1ZmZlcmVkIGZpbGUgKi8KICAgICBpZiAoYmluYXJ5KSB7CiAgICAgICAgIFB5X0RFQ1JFRihtb2Rlb2JqKTsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICAvKiB3cmFwcyBpbnRvIGEgVGV4dElPV3JhcHBlciAqLwpAQCAtNDQ0LDIwICs0NTMsMzcgQEAKIAkJCQkgICAgYnVmZmVyLAogCQkJCSAgICBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLAogCQkJCSAgICBsaW5lX2J1ZmZlcmluZyk7Ci0gICAgUHlfQ0xFQVIoYnVmZmVyKTsKICAgICBpZiAod3JhcHBlciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOworICAgIHJlc3VsdCA9IHdyYXBwZXI7CisgICAgUHlfREVDUkVGKGJ1ZmZlcik7CiAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh3cmFwcGVyLCAmUHlJZF9tb2RlLCBtb2Rlb2JqKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgUHlfREVDUkVGKG1vZGVvYmopOwotICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiByZXN1bHQ7CiAKICAgZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihyYXcpOworICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGIsICpjbG9zZV9yZXN1bHQ7CisgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CisgICAgICAgIGNsb3NlX3Jlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQocmVzdWx0LCAmUHlJZF9jbG9zZSwgTlVMTCk7CisgICAgICAgIGlmIChjbG9zZV9yZXN1bHQgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGNsb3NlX3Jlc3VsdCk7CisgICAgICAgICAgICBQeUVycl9SZXN0b3JlKGV4YywgdmFsLCB0Yik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhjMiwgKnZhbDIsICp0YjI7CisgICAgICAgICAgICBQeUVycl9GZXRjaCgmZXhjMiwgJnZhbDIsICZ0YjIpOworICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwsICZ0Yik7CisgICAgICAgICAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgICAgICAgICBQeV9YREVDUkVGKHRiKTsKKyAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjMiwgJnZhbDIsICZ0YjIpOworICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0Q29udGV4dCh2YWwyLCB2YWwpOworICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGMyLCB2YWwyLCB0YjIpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KICAgICBQeV9YREVDUkVGKG1vZGVvYmopOwotICAgIFB5X1hERUNSRUYoYnVmZmVyKTsKLSAgICBQeV9YREVDUkVGKHdyYXBwZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogDApAQCAtNTMzLDYgKzU1OSw0NSBAQAogfQogCiAKK19QeUlPX1N0YXRlICoKK19QeUlPX2dldF9tb2R1bGVfc3RhdGUodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbW9kID0gUHlTdGF0ZV9GaW5kTW9kdWxlKCZfUHlJT19Nb2R1bGUpOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZTsKKyAgICBpZiAobW9kID09IE5VTEwgfHwgKHN0YXRlID0gSU9fTU9EX1NUQVRFKG1vZCkpID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZmluZCBpbyBtb2R1bGUgc3RhdGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIihpbnRlcnByZXRlciBzaHV0ZG93bj8pIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK1B5T2JqZWN0ICoKK19QeUlPX2dldF9sb2NhbGVfbW9kdWxlKF9QeUlPX1N0YXRlICpzdGF0ZSkKK3sKKyAgICBQeU9iamVjdCAqbW9kOworICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSAhPSBOVUxMKSB7CisgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYoc3RhdGUtPmxvY2FsZV9tb2R1bGUpKTsKKyAgICAgICAgbW9kID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1Qoc3RhdGUtPmxvY2FsZV9tb2R1bGUpOworICAgICAgICBpZiAobW9kICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2QpOworICAgICAgICAgICAgcmV0dXJuIG1vZDsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihzdGF0ZS0+bG9jYWxlX21vZHVsZSk7CisgICAgfQorICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX2Jvb3Rsb2NhbGUiKTsKKyAgICBpZiAobW9kID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlID0gUHlXZWFrcmVmX05ld1JlZihtb2QsIE5VTEwpOworICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtb2QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1vZDsKK30KKworCiBzdGF0aWMgaW50CiBpb21vZHVsZV90cmF2ZXJzZShQeU9iamVjdCAqbW9kLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykgewogICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX01PRF9TVEFURShtb2QpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmggYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaAppbmRleCAwZmU5MGEzLi44OTI3ODY0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaAorKysgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaApAQCAtNzcsNyArNzcsNyBAQAogICAgbG9uZyB3aXRoICIlbGxkIiBldmVuIHdoZW4gYm90aCBsb25nIGFuZCBsb25nIGxvbmcgaGF2ZSB0aGUgc2FtZQogICAgcHJlY2lzaW9uLiAqLwogCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKIAogLyogV2luZG93cyB1c2VzIGxvbmcgbG9uZyBmb3Igb2Zmc2V0cyAqLwogdHlwZWRlZiBQWV9MT05HX0xPTkcgUHlfb2ZmX3Q7CkBAIC0xMzUsNyArMTM1LDEwIEBACiB9IF9QeUlPX1N0YXRlOwogCiAjZGVmaW5lIElPX01PRF9TVEFURShtb2QpICgoX1B5SU9fU3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShtb2QpKQotI2RlZmluZSBJT19TVEFURSBJT19NT0RfU1RBVEUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZfUHlJT19Nb2R1bGUpKQorI2RlZmluZSBJT19TVEFURSgpIF9QeUlPX2dldF9tb2R1bGVfc3RhdGUoKQorCitleHRlcm4gX1B5SU9fU3RhdGUgKl9QeUlPX2dldF9tb2R1bGVfc3RhdGUodm9pZCk7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX2dldF9sb2NhbGVfbW9kdWxlKF9QeUlPX1N0YXRlICopOwogCiBleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9jbG9zZTsKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlZDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYyBiL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYwppbmRleCBjMjhlMjg5Li40YzAyNjJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKKysrIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCkBAIC01Miw3ICs1Miw2IEBACiAgICAgUHlfYnVmZmVyIGJ1ZjsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBQeU9iamVjdCAqZGF0YTsKLSAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidyo6cmVhZGludG8iLCAmYnVmKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTkyLDcgKzkxLDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWZmZXJlZGlvYmFzZV91bnN1cHBvcnRlZChjb25zdCBjaGFyICptZXNzYWdlKQogewotICAgIFB5RXJyX1NldFN0cmluZyhJT19TVEFURS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLCBtZXNzYWdlKTsKKyAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBJT19TVEFURSgpOworICAgIGlmIChzdGF0ZSAhPSBOVUxMKQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3RhdGUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE5MCw3ICsxOTEsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkaW9iYXNlX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTIwOSw2ICsyMTEsMTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAKIApAQCAtMjIwLDcgKzIzMiw3IEBACiAgICAgaW50IGRldGFjaGVkOwogICAgIGludCByZWFkYWJsZTsKICAgICBpbnQgd3JpdGFibGU7Ci0gICAgaW50IGRlYWxsb2NhdGluZzsKKyAgICBjaGFyIGZpbmFsaXppbmc7CiAKICAgICAvKiBUcnVlIGlmIHRoaXMgaXMgYSB2YW5pbGxhIEJ1ZmZlcmVkIG9iamVjdCAocmF0aGVyIHRoYW4gYSB1c2VyIGRlcml2ZWQKICAgICAgICBjbGFzcykgKmFuZCogdGhlIHJhdyBzdHJlYW0gaXMgYSB2YW5pbGxhIEZpbGVJTyBvYmplY3QuICovCkBAIC0zODQsOCArMzk2LDggQEAKIHN0YXRpYyB2b2lkCiBidWZmZXJlZF9kZWFsbG9jKGJ1ZmZlcmVkICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQorICAgIHNlbGYtPmZpbmFsaXppbmcgPSAxOworICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIHNlbGYtPm9rID0gMDsKQEAgLTQyOCw4ICs0NDAsNiBAQAogc3RhdGljIGludAogYnVmZmVyZWRfY2xlYXIoYnVmZmVyZWQgKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b2sgPSAwOwogICAgIFB5X0NMRUFSKHNlbGYtPnJhdyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CkBAIC01MDgsNyArNTE4LDcgQEAKICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgIGlmIChzZWxmLT5maW5hbGl6aW5nKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyID0gYnVmZmVyZWRfZGVhbGxvY193YXJuKHNlbGYsIChQeU9iamVjdCAqKSBzZWxmKTsKICAgICAgICAgaWYgKHIpCiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CkBAIC01MjcsMTkgKzUzNywyNSBAQAogCiAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfY2xvc2UsIE5VTEwpOwogCisgICAgaWYgKHNlbGYtPmJ1ZmZlcikgeworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7CisgICAgfQorCiAgICAgaWYgKGV4YyAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2YWwyOworICAgICAgICAgICAgUHlPYmplY3QgKmV4YzIsICp2YWwyLCAqdGIyOworICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4YzIsICZ2YWwyLCAmdGIyKTsKKyAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsLCAmdGIpOwogICAgICAgICAgICAgUHlfREVDUkVGKGV4Yyk7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRiKTsKLSAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwyLCAmdGIpOwotICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwyLCAmdGIpOworICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMyLCAmdmFsMiwgJnRiMik7CiAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRDb250ZXh0KHZhbDIsIHZhbCk7Ci0gICAgICAgICAgICBQeUVycl9SZXN0b3JlKGV4YywgdmFsMiwgdGIpOworICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGMyLCB2YWwyLCB0YjIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02NTgsNiArNjc0LDExIEBACiBfc2V0X0Jsb2NraW5nSU9FcnJvcihjaGFyICptc2csIFB5X3NzaXplX3Qgd3JpdHRlbikKIHsKICAgICBQeU9iamVjdCAqZXJyOworI2lmZGVmIFB5X0RFQlVHCisgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgogICAgIGVyciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19CbG9ja2luZ0lPRXJyb3IsICJpc24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgbXNnLCB3cml0dGVuKTsKICAgICBpZiAoZXJyKQpAQCAtMTczOSw2ICsxNzYwLDcgQEAKIAogc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkcmVhZGVyX21lbWJlcnNbXSA9IHsKICAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGJ1ZmZlcmVkLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0xNzcxLDcgKzE3OTMsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkcmVhZGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTc5MCw2ICsxODEyLDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcmVhZGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yMTIwLDYgKzIxNTIsNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWR3cml0ZXJfbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTIxNTIsNyArMjE4NSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWR3cml0ZXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0yMTcxLDYgKzIyMDQsMTYgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWR3cml0ZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAMCiAKQEAgLTI0MTEsNyArMjQ1NCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKiB0cF9mbGFncyAqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKiB0cF9mbGFncyAqLwogICAgIGJ1ZmZlcmVkcndwYWlyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkcndwYWlyX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkcndwYWlyX2NsZWFyLCAvKiB0cF9jbGVhciAqLwpAQCAtMjQzMCw2ICsyNDczLDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcndwYWlyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yNTE3LDYgKzI1NzAsNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWRyYW5kb21fbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTI1NDksNyArMjYwMyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRyYW5kb21fZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0yNTY4LDQgKzI2MjIsMTQgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyYW5kb21faW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9maWxlaW8uYyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCmluZGV4IGYzY2U3NzYuLjgxZTI5MDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2ZpbGVpby5jCisrKyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCkBAIC01MiwxMyArNTIsMTUgQEAKICAgICB1bnNpZ25lZCBpbnQgYXBwZW5kaW5nIDogMTsKICAgICBzaWduZWQgaW50IHNlZWthYmxlIDogMjsgLyogLTEgbWVhbnMgdW5rbm93biAqLwogICAgIHVuc2lnbmVkIGludCBjbG9zZWZkIDogMTsKLSAgICB1bnNpZ25lZCBpbnQgZGVhbGxvY2F0aW5nOiAxOworICAgIGNoYXIgZmluYWxpemluZzsKICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiB9IGZpbGVpbzsKIAogUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGU7CiAKK19QeV9JREVOVElGSUVSKG5hbWUpOworCiAjZGVmaW5lIFB5RmlsZUlPX0NoZWNrKG9wKSAoUHlPYmplY3RfVHlwZUNoZWNrKChvcCksICZQeUZpbGVJT19UeXBlKSkKIAogaW50CkBAIC0xMjksNyArMTMxLDcgQEAKICAgICAgICAgc2VsZi0+ZmQgPSAtMTsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQotICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICBQeU9iamVjdCAqciA9IGZpbGVpb19kZWFsbG9jX3dhcm4oc2VsZiwgKFB5T2JqZWN0ICopIHNlbGYpOwogICAgICAgICBpZiAocikKICAgICAgICAgICAgIFB5X0RFQ1JFRihyKTsKQEAgLTIwNCw2ICsyMDYsOSBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgT19DTE9FWEVDCitleHRlcm4gaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZW5kaWYKIAogc3RhdGljIGludAogZmlsZWlvX2luaXQoUHlPYmplY3QgKm9zZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC0yMjMsNiArMjI4LDExIEBACiAgICAgaW50IGZkID0gLTE7CiAgICAgaW50IGNsb3NlZmQgPSAxOwogICAgIGludCBmZF9pc19vd24gPSAwOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKIAogICAgIGFzc2VydChQeUZpbGVJT19DaGVjayhvc2VsZikpOwogICAgIGlmIChzZWxmLT5mZCA+PSAwKSB7CkBAIC0zNDMsNiArMzUzLDEyIEBACiAgICAgZmxhZ3MgfD0gT19CSU5BUlk7CiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBmbGFncyB8PSBPX05PSU5IRVJJVDsKKyNlbGlmIGRlZmluZWQoT19DTE9FWEVDKQorICAgIGZsYWdzIHw9IE9fQ0xPRVhFQzsKKyNlbmRpZgorCiAgICAgaWYgKGZkID49IDApIHsKICAgICAgICAgaWYgKGNoZWNrX2ZkKGZkKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjYsMTAgKzM4MiwxOCBAQAogICAgICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2VsZi0+ZmQgPSBvcGVuKG5hbWUsIGZsYWdzLCAwNjY2KTsKKwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpmZG9iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZXIsICJPaSIsIG5hbWVvYmosIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmZG9iajsKKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgICAgICAvKiB0aGUgb3BlbmVyIG1heSBjbGVhciB0aGUgYXRvbWljIGZsYWcgKi8KKyAgICAgICAgICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorCisgICAgICAgICAgICBmZG9iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihvcGVuZXIsICJPaSIsIG5hbWVvYmosIGZsYWdzKTsKICAgICAgICAgICAgIGlmIChmZG9iaiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayhmZG9iaikpIHsKQEAgLTM4OCwxNCArNDEyLDE0IEBACiAKICAgICAgICAgZmRfaXNfb3duID0gMTsKICAgICAgICAgaWYgKHNlbGYtPmZkIDwgMCkgewotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgICAgIGlmICh3aWRlbmFtZSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19JT0Vycm9yLCBuYW1lb2JqKTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBuYW1lKTsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBuYW1lb2JqKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmZkLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyNlbmRpZgogICAgIH0KICAgICBpZiAoZGlyY2hlY2soc2VsZiwgbmFtZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtNDA1LDcgKzQyOSw3IEBACiAgICAgX3NldG1vZGUoc2VsZi0+ZmQsIE9fQklOQVJZKTsKICNlbmRpZgogCi0gICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopc2VsZiwgIm5hbWUiLCBuYW1lb2JqKSA8IDApCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfbmFtZSwgbmFtZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKHNlbGYtPmFwcGVuZGluZykgewpAQCAtNDQ5LDcgKzQ3Myw3IEBACiBzdGF0aWMgdm9pZAogZmlsZWlvX2RlYWxsb2MoZmlsZWlvICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7CisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CiAgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CkBAIC00NjksOCArNDkzLDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZXJyX21vZGUoY2hhciAqYWN0aW9uKQogewotICAgIFB5RXJyX0Zvcm1hdChJT19TVEFURS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAiRmlsZSBub3Qgb3BlbiBmb3IgJXMiLCBhY3Rpb24pOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFKCk7CisgICAgaWYgKHN0YXRlICE9IE5VTEwpCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdGF0ZS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIkZpbGUgbm90IG9wZW4gZm9yICVzIiwgYWN0aW9uKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNTM1LDcgKzU2MSw3IEBACiAgICAgICAgIGxlbiA9IHBidWYubGVuOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKICAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgKGludClsZW4pOwpAQCAtNTU4LDMzICs1ODQsMjcgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOwogfQogCisjaWZuZGVmIEhBVkVfRlNUQVQKKworc3RhdGljIFB5T2JqZWN0ICoKK2ZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKK3sKKyAgICBfUHlfSURFTlRJRklFUihyZWFkYWxsKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKSZQeVJhd0lPQmFzZV9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3JlYWRhbGwsICJPIiwgc2VsZik7Cit9CisKKyNlbHNlCisKIHN0YXRpYyBzaXplX3QKLW5ld19idWZmZXJzaXplKGZpbGVpbyAqc2VsZiwgc2l6ZV90IGN1cnJlbnRzaXplCi0jaWZkZWYgSEFWRV9GU1RBVAotICAgICAgICAgICAgICAgLCBQeV9vZmZfdCBwb3MsIFB5X29mZl90IGVuZAotI2VuZGlmCi0gICAgICAgICAgICAgICApCituZXdfYnVmZmVyc2l6ZShmaWxlaW8gKnNlbGYsIHNpemVfdCBjdXJyZW50c2l6ZSkKIHsKICAgICBzaXplX3QgYWRkZW5kOwotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICBpZiAoZW5kICE9IChQeV9vZmZfdCktMSkgewotICAgICAgICAvKiBGaWxlcyBjbGFpbWluZyBhIHNpemUgc21hbGxlciB0aGFuIFNNQUxMQ0hVTksgbWF5Ci0gICAgICAgICAgIGFjdHVhbGx5IGJlIHN0cmVhbWluZyBwc2V1ZG8tZmlsZXMuIEluIHRoaXMgY2FzZSwgd2UKLSAgICAgICAgICAgYXBwbHkgdGhlIG1vcmUgYWdncmVzc2l2ZSBhbGdvcml0aG0gYmVsb3cuCi0gICAgICAgICovCi0gICAgICAgIGlmIChlbmQgPj0gU01BTExDSFVOSyAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwKSB7Ci0gICAgICAgICAgICAvKiBBZGQgMSBzbyBpZiB0aGUgZmlsZSB3ZXJlIHRvIGdyb3cgd2UnZCBub3RpY2UuICovCi0gICAgICAgICAgICBQeV9vZmZfdCBidWZzaXplID0gY3VycmVudHNpemUgKyBlbmQgLSBwb3MgKyAxOwotICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPCBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKHNpemVfdClidWZzaXplOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBQWV9TU0laRV9UX01BWDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorCiAgICAgLyogRXhwYW5kIHRoZSBidWZmZXIgYnkgYW4gYW1vdW50IHByb3BvcnRpb25hbCB0byB0aGUgY3VycmVudCBzaXplLAogICAgICAgIGdpdmluZyB1cyBhbW9ydGl6ZWQgbGluZWFyLXRpbWUgYmVoYXZpb3IuICBGb3IgYmlnZ2VyIHNpemVzLCB1c2UgYQogICAgICAgIGxlc3MtdGhhbi1kb3VibGUgZ3Jvd3RoIGZhY3RvciB0byBhdm9pZCBleGNlc3NpdmUgYWxsb2NhdGlvbi4gKi8KKyAgICBhc3NlcnQoY3VycmVudHNpemUgPD0gUFlfU1NJWkVfVF9NQVgpOwogICAgIGlmIChjdXJyZW50c2l6ZSA+IDY1NTM2KQogICAgICAgICBhZGRlbmQgPSBjdXJyZW50c2l6ZSA+PiAzOwogICAgIGVsc2UKQEAgLTU5OCwyNiArNjE4LDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlYWRhbGwoZmlsZWlvICpzZWxmKQogewotI2lmZGVmIEhBVkVfRlNUQVQKICAgICBzdHJ1Y3Qgc3RhdCBzdDsKICAgICBQeV9vZmZfdCBwb3MsIGVuZDsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgUHlfc3NpemVfdCB0b3RhbCA9IDA7CisgICAgUHlfc3NpemVfdCBieXRlc19yZWFkID0gMDsKICAgICBQeV9zc2l6ZV90IG47Ci0gICAgc2l6ZV90IG5ld3NpemU7CisgICAgc2l6ZV90IGJ1ZnNpemU7CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwogICAgIGlmICghX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKIAotICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgU01BTExDSFVOSyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotI2lmZGVmIEhBVkVfRlNUQVQKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIHBvcyA9IF9sc2Vla2k2NChzZWxmLT5mZCwgMEwsIFNFRUtfQ1VSKTsKICNlbHNlCiAgICAgcG9zID0gbHNlZWsoc2VsZi0+ZmQsIDBMLCBTRUVLX0NVUik7CkBAIC02MjYsNDQgKzYzOSw0NiBAQAogICAgICAgICBlbmQgPSBzdC5zdF9zaXplOwogICAgIGVsc2UKICAgICAgICAgZW5kID0gKFB5X29mZl90KS0xOwotI2VuZGlmCi0gICAgd2hpbGUgKDEpIHsKLSNpZmRlZiBIQVZFX0ZTVEFUCi0gICAgICAgIG5ld3NpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCB0b3RhbCwgcG9zLCBlbmQpOwotI2Vsc2UKLSAgICAgICAgbmV3c2l6ZSA9IG5ld19idWZmZXJzaXplKHNlbGYsIHRvdGFsKTsKLSNlbmRpZgotICAgICAgICBpZiAobmV3c2l6ZSA+IFBZX1NTSVpFX1RfTUFYIHx8IG5ld3NpemUgPD0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgInVuYm91bmRlZCByZWFkIHJldHVybmVkIG1vcmUgYnl0ZXMgIgotICAgICAgICAgICAgICAgICJ0aGFuIGEgUHl0aG9uIHN0cmluZyBjYW4gaG9sZCAiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIDwgKFB5X3NzaXplX3QpbmV3c2l6ZSkgewotICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBuZXdzaXplKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodG90YWwgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAoZW5kID4gMCAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwICYmIGVuZCAtIHBvcyA8IFBZX1NTSVpFX1RfTUFYKSB7CisgICAgICAgIC8qIFRoaXMgaXMgcHJvYmFibHkgYSByZWFsIGZpbGUsIHNvIHdlIHRyeSB0byBhbGxvY2F0ZSBhCisgICAgICAgICAgIGJ1ZmZlciBvbmUgYnl0ZSBsYXJnZXIgdGhhbiB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gIElmIHRoZQorICAgICAgICAgICBjYWxjdWxhdGlvbiBpcyByaWdodCB0aGVuIHdlIHNob3VsZCBnZXQgRU9GIHdpdGhvdXQgaGF2aW5nCisgICAgICAgICAgIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlci4gKi8KKyAgICAgICAgYnVmc2l6ZSA9IChzaXplX3QpKGVuZCAtIHBvcyArIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZnNpemUgPSBTTUFMTENIVU5LOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmc2l6ZSk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChieXRlc19yZWFkID49IChQeV9zc2l6ZV90KWJ1ZnNpemUpIHsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCBieXRlc19yZWFkKTsKKyAgICAgICAgICAgIGlmIChidWZzaXplID4gUFlfU1NJWkVfVF9NQVggfHwgYnVmc2l6ZSA8PSAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmJvdW5kZWQgcmVhZCByZXR1cm5lZCBtb3JlIGJ5dGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYW4gYSBQeXRob24gc3RyaW5nIGNhbiBob2xkIik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPCAoUHlfc3NpemVfdClidWZzaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBidWZzaXplKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBuID0gbmV3c2l6ZSAtIHRvdGFsOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyAgICAgICAgbiA9IGJ1ZnNpemUgLSBieXRlc19yZWFkOworI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKG4gPiBJTlRfTUFYKQogICAgICAgICAgICAgbiA9IElOVF9NQVg7Ci0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLAotICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCi0gICAgICAgICAgICAgICAgIChpbnQpbik7CisgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgYnl0ZXNfcmVhZCwgKGludCluKTsKICNlbHNlCi0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLAotICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCi0gICAgICAgICAgICAgICAgIG4pOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGJ5dGVzX3JlYWQsIG4pOwogI2VuZGlmCiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGlmIChuID09IDApCkBAIC02NzYsOSArNjkxLDkgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG90YWwgPiAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikgeworICAgICAgICAgICAgICAgIGlmIChieXRlc19yZWFkID4gMCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgICAgICAgICB9CkBAIC02ODYsMjIgKzcwMSwxOSBAQAogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgdG90YWwgKz0gbjsKLSNpZmRlZiBIQVZFX0ZTVEFUCisgICAgICAgIGJ5dGVzX3JlYWQgKz0gbjsKICAgICAgICAgcG9zICs9IG47Ci0jZW5kaWYKICAgICB9CiAKLSAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpID4gdG90YWwpIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCB0b3RhbCkgPCAwKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2UgKi8KLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPiBieXRlc19yZWFkKSB7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgYnl0ZXNfcmVhZCkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2VuZGlmIC8qIEhBVkVfRlNUQVQgKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZWFkKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC03MjIsNyArNzM0LDcgQEAKICAgICAgICAgcmV0dXJuIGZpbGVpb19yZWFkYWxsKHNlbGYpOwogICAgIH0KIAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKHNpemUgPiBJTlRfTUFYKQogICAgICAgICBzaXplID0gSU5UX01BWDsKICNlbmRpZgpAQCAtNzM0LDcgKzc0Niw3IEBACiAgICAgaWYgKF9QeVZlcmlmeV9mZChzZWxmLT5mZCkpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHB0ciwgKGludClzaXplKTsKICNlbHNlCiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwdHIsIHNpemUpOwpAQCAtNzU1LDcgKzc2Nyw3IEBACiAKICAgICBpZiAobiAhPSBzaXplKSB7CiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJmJ5dGVzLCBuKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgICAgICBQeV9DTEVBUihieXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTc4Miw3ICs3OTQsNyBAQAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgbGVuID0gcGJ1Zi5sZW47Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKGxlbiA+IDMyNzY3ICYmIGlzYXR0eShzZWxmLT5mZCkpIHsKICAgICAgICAgICAgIC8qIElzc3VlICMxMTM5NTogdGhlIFdpbmRvd3MgY29uc29sZSByZXR1cm5zIGFuIGVycm9yICgxMjogbm90CiAgICAgICAgICAgICAgICBlbm91Z2ggc3BhY2UgZXJyb3IpIG9uIHdyaXRpbmcgaW50byBzdGRvdXQgaWYgc3Rkb3V0IG1vZGUgaXMKQEAgLTg1NSw3ICs4NjcsNyBAQAogCiAgICAgaWYgKF9QeVZlcmlmeV9mZChmZCkpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHJlcyA9IF9sc2Vla2k2NChmZCwgcG9zLCB3aGVuY2UpOwogI2Vsc2UKICAgICAgICAgcmVzID0gbHNlZWsoZmQsIHBvcywgd2hlbmNlKTsKQEAgLTEwMjgsNyArMTA0MCw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlcHIoZmlsZWlvICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKG5hbWUpOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqcmVzOwogCiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKQEAgLTEyMDQsNiArMTIxNSwxMSBAQAogICAgIHtOVUxMfSwKIH07CiAKK3N0YXRpYyBQeU1lbWJlckRlZiBmaWxlaW9fbWVtYmVyc1tdID0geworICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGZpbGVpbywgZmluYWxpemluZyksIDB9LAorICAgIHtOVUxMfQorfTsKKwogUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9pby5GaWxlSU8iLApAQCAtMTIyNSw3ICsxMjQxLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgICAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgICAgICAvKiB0cF9mbGFncyAqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICBmaWxlaW9fZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpZmlsZWlvX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlmaWxlaW9fY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0xMjM0LDcgKzEyNTAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBmaWxlaW9fbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBmaWxlaW9fbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBmaWxlaW9fZ2V0c2V0bGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLwpAQCAtMTI0NSw0ICsxMjYxLDEzIEBACiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIGZpbGVpb19uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2lvYmFzZS5jIGIvTW9kdWxlcy9faW8vaW9iYXNlLmMKaW5kZXggZTM4NDczYS4uZWYwNmI0MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vaW9iYXNlLmMKKysrIGIvTW9kdWxlcy9faW8vaW9iYXNlLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJL08gYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGhpZXJhcmNoeQogICAgIGFzIGRlZmluZWQgYnkgUEVQIDMxMTYgLSAiTmV3IEkvTyIKLSAgICAKKwogICAgIENsYXNzZXMgZGVmaW5lZCBoZXJlOiBJT0Jhc2UsIFJhd0lPQmFzZS4KLSAgICAKKwogICAgIFdyaXR0ZW4gYnkgQW1hdXJ5IEZvcmdlb3QgZCdBcmMgYW5kIEFudG9pbmUgUGl0cm91CiAqLwogCkBAIC0xOSw3ICsxOSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgCisKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiB9IGlvYmFzZTsKQEAgLTQyLDggKzQyLDggQEAKICAgICAiYnl0ZXMuIGJ5dGVhcnJheXMgYXJlIGFjY2VwdGVkIHRvbywgYW5kIGluIHNvbWUgY2FzZXMgKHN1Y2ggYXNcbiIKICAgICAicmVhZGludG8pIG5lZWRlZC4gVGV4dCBJL08gY2xhc3NlcyB3b3JrIHdpdGggc3RyIGRhdGEuXG4iCiAgICAgIlxuIgotICAgICJOb3RlIHRoYXQgY2FsbGluZyBhbnkgbWV0aG9kIChldmVuIGlucXVpcmllcykgb24gYSBjbG9zZWQgc3RyZWFtIGlzXG4iCi0gICAgInVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBJT0Vycm9yIGluIHRoaXMgY2FzZS5cbiIKKyAgICAiTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXhjZXB0IGFkZGl0aW9uYWwgY2FsbHMgdG8gY2xvc2UoKSxcbiIKKyAgICAid2hpY2ggYXJlIGlnbm9yZWQpIG9uIGEgY2xvc2VkIHN0cmVhbSBzaG91bGQgcmFpc2UgYSBWYWx1ZUVycm9yLlxuIgogICAgICJcbiIKICAgICAiSU9CYXNlIChhbmQgaXRzIHN1YmNsYXNzZXMpIHN1cHBvcnQgdGhlIGl0ZXJhdG9yIHByb3RvY29sLCBtZWFuaW5nXG4iCiAgICAgInRoYXQgYW4gSU9CYXNlIG9iamVjdCBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB5aWVsZGluZyB0aGUgbGluZXMgaW4gYVxuIgpAQCAtNjMsMTEgKzYzLDE1IEBACiAjZGVmaW5lIElTX0NMT1NFRChzZWxmKSBcCiAgICAgX1B5T2JqZWN0X0hhc0F0dHJJZChzZWxmLCAmUHlJZF9fX0lPQmFzZV9jbG9zZWQpCiAKK19QeV9JREVOVElGSUVSKHJlYWQpOworCiAvKiBJbnRlcm5hbCBtZXRob2RzICovCiBzdGF0aWMgUHlPYmplY3QgKgogaW9iYXNlX3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKElPX1NUQVRFLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFKCk7CisgICAgaWYgKHN0YXRlICE9IE5VTEwpCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdGF0ZS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLCBtZXNzYWdlKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTgwLDQyICsxODQsNDQgQEAKIGlvYmFzZV9jbG9zZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBfUHlfSURFTlRJRklFUihfX0lPQmFzZV9jbG9zZWQpOwogCiAgICAgaWYgKElTX0NMT1NFRChzZWxmKSkKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAKICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLCBfUHlJT19zdHJfZmx1c2gsIE5VTEwpOwotICAgIF9QeU9iamVjdF9TZXRBdHRySWQoc2VsZiwgJlB5SWRfX19JT0Jhc2VfY2xvc2VkLCBQeV9UcnVlKTsKLSAgICBpZiAocmVzID09IE5VTEwpIHsKKworICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHNlbGYsICZQeUlkX19fSU9CYXNlX2Nsb3NlZCwgUHlfVHJ1ZSkgPCAwKSB7CisgICAgICAgIFB5X1hERUNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X1hERUNSRUYocmVzKTsKKworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9ERUNSRUYocmVzKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogLyogRmluYWxpemF0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gc3VwcG9ydCAqLwogCi1pbnQKLV9QeUlPQmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3N0YXRpYyB2b2lkCitpb2Jhc2VfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBQeU9iamVjdCAqdHAsICp2LCAqdGI7Ci0gICAgaW50IGNsb3NlZCA9IDE7Ci0gICAgaW50IGlzX3pvbWJpZTsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworICAgIGludCBjbG9zZWQ7CisgICAgX1B5X0lERU5USUZJRVIoX2ZpbmFsaXppbmcpOwogCi0gICAgLyogSWYgX1B5SU9CYXNlX2ZpbmFsaXplKCkgaXMgY2FsbGVkIGZyb20gYSBkZXN0cnVjdG9yLCB3ZSBuZWVkIHRvCi0gICAgICAgcmVzdXJyZWN0IHRoZSBvYmplY3QgYXMgY2FsbGluZyBjbG9zZSgpIGNhbiBpbnZva2UgYXJiaXRyYXJ5IGNvZGUuICovCi0gICAgaXNfem9tYmllID0gKFB5X1JFRkNOVChzZWxmKSA9PSAwKTsKLSAgICBpZiAoaXNfem9tYmllKSB7Ci0gICAgICAgICsrUHlfUkVGQ05UKHNlbGYpOwotICAgIH0KLSAgICBQeUVycl9GZXRjaCgmdHAsICZ2LCAmdGIpOworICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCisgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisKICAgICAvKiBJZiBgY2xvc2VkYCBkb2Vzbid0IGV4aXN0IG9yIGNhbid0IGJlIGV2YWx1YXRlZCBhcyBib29sLCB0aGVuIHRoZQogICAgICAgIG9iamVjdCBpcyBwcm9iYWJseSBpbiBhbiB1bnVzYWJsZSBzdGF0ZSwgc28gaWdub3JlLiAqLwogICAgIHJlcyA9IFB5T2JqZWN0X0dldEF0dHIoc2VsZiwgX1B5SU9fc3RyX2Nsb3NlZCk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQorICAgIGlmIChyZXMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBjbG9zZWQgPSAtMTsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGNsb3NlZCA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwogICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTIyMyw2ICsyMjksMTAgQEAKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQogICAgIGlmIChjbG9zZWQgPT0gMCkgeworICAgICAgICAvKiBTaWduYWwgY2xvc2UoKSB0aGF0IGl0IHdhcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgIGZpbmFsaXphdGlvbiBwcm9jZXNzLiAqLworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChzZWxmLCAmUHlJZF9fZmluYWxpemluZywgUHlfVHJ1ZSkpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKikgc2VsZiwgX1B5SU9fc3RyX2Nsb3NlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgIC8qIFNpbGVuY2luZyBJL08gZXJyb3JzIGlzIGJhZCwgYnV0IHByaW50aW5nIHNwdXJpb3VzIHRyYWNlYmFja3MgaXMKQEAgLTIzMywzMSArMjQzLDI1IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgIH0KLSAgICBQeUVycl9SZXN0b3JlKHRwLCB2LCB0Yik7Ci0gICAgaWYgKGlzX3pvbWJpZSkgewotICAgICAgICBpZiAoLS1QeV9SRUZDTlQoc2VsZikgIT0gMCkgewotICAgICAgICAgICAgLyogVGhlIG9iamVjdCBsaXZlcyBhZ2Fpbi4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHRha2VuIGZyb20KLSAgICAgICAgICAgICAgIHNsb3RfdHBfZGVsIGluIHR5cGVvYmplY3QuYy4gKi8KLSAgICAgICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gUHlfUkVGQ05UKHNlbGYpOwotICAgICAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgICAgIFB5X1JFRkNOVChzZWxmKSA9IHJlZmNudDsKLSAgICAgICAgICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbwotICAgICAgICAgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCi0gICAgICAgICAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgICAgICAgICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgotICAgICAgICAgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICAgICAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKLSAgICAgICAgICAgICAqIHVuZG9uZS4KLSAgICAgICAgICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgICAgICAgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9mcmVlczsKLSAgICAgICAgICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKworICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworfQorCitpbnQKK19QeUlPQmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgaXNfem9tYmllOworCisgICAgLyogSWYgX1B5SU9CYXNlX2ZpbmFsaXplKCkgaXMgY2FsbGVkIGZyb20gYSBkZXN0cnVjdG9yLCB3ZSBuZWVkIHRvCisgICAgICAgcmVzdXJyZWN0IHRoZSBvYmplY3QgYXMgY2FsbGluZyBjbG9zZSgpIGNhbiBpbnZva2UgYXJiaXRyYXJ5IGNvZGUuICovCisgICAgaXNfem9tYmllID0gKFB5X1JFRkNOVChzZWxmKSA9PSAwKTsKKyAgICBpZiAoaXNfem9tYmllKQorICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpOworICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdF9DYWxsRmluYWxpemVyKHNlbGYpOworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI3MCw4ICsyNzQsNiBAQAogc3RhdGljIGludAogaW9iYXNlX2NsZWFyKGlvYmFzZSAqc2VsZikKIHsKLSAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKICAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTQ1NSw3ICs0NTcsNiBAQAogICAgIGludCBoYXNfcGVlayA9IDA7CiAgICAgUHlPYmplY3QgKmJ1ZmZlciwgKnJlc3VsdDsKICAgICBQeV9zc2l6ZV90IG9sZF9zaXplID0gLTE7Ci0gICAgX1B5X0lERU5USUZJRVIocmVhZCk7CiAgICAgX1B5X0lERU5USUZJRVIocGVlayk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkbGluZSIsICZfUHlJT19Db252ZXJ0U3NpemVfdCwgJmxpbWl0KSkgewpAQCAtNTM2LDcgKzUzNywxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgb2xkX3NpemUgPSBQeUJ5dGVBcnJheV9HRVRfU0laRShidWZmZXIpOwotICAgICAgICBQeUJ5dGVBcnJheV9SZXNpemUoYnVmZmVyLCBvbGRfc2l6ZSArIFB5Qnl0ZXNfR0VUX1NJWkUoYikpOworICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKGJ1ZmZlciwgb2xkX3NpemUgKyBQeUJ5dGVzX0dFVF9TSVpFKGIpKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQogICAgICAgICBtZW1jcHkoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGJ1ZmZlcikgKyBvbGRfc2l6ZSwKICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGIpLCBQeUJ5dGVzX0dFVF9TSVpFKGIpKTsKIApAQCAtNzQxLDcgKzc0NSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgaW9iYXNlX2RvYywgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpaW9iYXNlX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWlvYmFzZV9jbGVhciwgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtNzYwLDYgKzc2NCwxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIChkZXN0cnVjdG9yKWlvYmFzZV9maW5hbGl6ZSwgLyogdHBfZmluYWxpemUgKi8KIH07CiAKIApAQCAtODMxLDEyICs4NDUsMTEgQEAKICAgICBpbnQgcjsKICAgICBQeU9iamVjdCAqY2h1bmtzID0gUHlMaXN0X05ldygwKTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIAorCiAgICAgaWYgKGNodW5rcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOwogICAgICAgICBQeU9iamVjdCAqZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpIiwgREVGQVVMVF9CVUZGRVJfU0laRSk7CiAgICAgICAgIGlmICghZGF0YSkgewpAQCAtOTA1LDcgKzkxOCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCiAgICAgcmF3aW9iYXNlX2RvYywgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtOTI0LDQgKzkzNywxNCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL3RleHRpby5jIGIvTW9kdWxlcy9faW8vdGV4dGlvLmMKaW5kZXggZThmOTk4NC4uNjM1MDkzZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vdGV4dGlvLmMKKysrIGIvTW9kdWxlcy9faW8vdGV4dGlvLmMKQEAgLTQ1LDcgKzQ1LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoSU9fU1RBVEUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CisgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gSU9fU1RBVEUoKTsKKyAgICBpZiAoc3RhdGUgIT0gTlVMTCkKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0YXRlLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xNzMsNyArMTc1LDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICB0ZXh0aW9iYXNlX2RvYywgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0xOTIsNiArMTk1LDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTY5MSw3ICs3MDQsNyBAQAogICAgIGNoYXIgc2Vla2FibGU7CiAgICAgY2hhciBoYXNfcmVhZDE7CiAgICAgY2hhciB0ZWxsaW5nOwotICAgIGNoYXIgZGVhbGxvY2F0aW5nOworICAgIGNoYXIgZmluYWxpemluZzsKICAgICAvKiBTcGVjaWFsaXplZCBlbmNvZGluZyBmdW5jIChzZWUgYmVsb3cpICovCiAgICAgZW5jb2RlZnVuY190IGVuY29kZWZ1bmM7CiAgICAgLyogV2hldGhlciBvciBub3QgaXQncyB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbSAqLwpAQCAtNzU4LDcgKzc3MSw3IEBACiB7CiAgICAgaWYgKCFzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0pIHsKICAgICAgICAgLyogU2tpcCB0aGUgQk9NIGFuZCB1c2UgbmF0aXZlIGJ5dGUgb3JkZXJpbmcgKi8KLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKKyNpZiBQWV9CSUdfRU5ESUFOCiAgICAgICAgIHJldHVybiB1dGYxNmJlX2VuY29kZShzZWxmLCB0ZXh0KTsKICNlbHNlCiAgICAgICAgIHJldHVybiB1dGYxNmxlX2VuY29kZShzZWxmLCB0ZXh0KTsKQEAgLTc4Nyw3ICs4MDAsNyBAQAogewogICAgIGlmICghc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtKSB7CiAgICAgICAgIC8qIFNraXAgdGhlIEJPTSBhbmQgdXNlIG5hdGl2ZSBieXRlIG9yZGVyaW5nICovCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisjaWYgUFlfQklHX0VORElBTgogICAgICAgICByZXR1cm4gdXRmMzJiZV9lbmNvZGUoc2VsZiwgdGV4dCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gdXRmMzJsZV9lbmNvZGUoc2VsZiwgdGV4dCk7CkBAIC04NDEsNyArODU0LDcgQEAKICAgICBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIGNoYXIgKm5ld2xpbmUgPSBOVUxMOwogICAgIGludCBsaW5lX2J1ZmZlcmluZyA9IDAsIHdyaXRlX3Rocm91Z2ggPSAwOwotICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IE5VTEw7CiAKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGludCByOwpAQCAtODgwLDYgKzg5Myw5IEBACiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgLyogVHJ5IG9zLmRldmljZV9lbmNvZGluZyhmaWxlbm8pICovCiAgICAgICAgIFB5T2JqZWN0ICpmaWxlbm87CisgICAgICAgIHN0YXRlID0gSU9fU1RBVEUoKTsKKyAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBmaWxlbm8gPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGJ1ZmZlciwgJlB5SWRfZmlsZW5vLCBOVUxMKTsKICAgICAgICAgLyogSWdub3JlIG9ubHkgQXR0cmlidXRlRXJyb3IgYW5kIFVuc3VwcG9ydGVkT3BlcmF0aW9uICovCiAgICAgICAgIGlmIChmaWxlbm8gPT0gTlVMTCkgewpAQCAtOTA2LDM1ICs5MjIsMjkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCAmJiBzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgibG9jYWxlIik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gdXNlX2xvY2FsZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB1c2VfbG9jYWxlOgotICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICBJbXBvcnRpbmcgbG9jYWxlIGNhbiByYWlzZSBhIEltcG9ydEVycm9yIGJlY2F1c2Ugb2YKLSAgICAgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQotICAgICAgICAgICAgICAgICBJbXBvcnRFcnJvciBpZiBfbG9jYWxlIGlzIG5vdCBhdmFpbGFibGUuICBUaGVzZSB3aWxsIGhhcHBlbgotICAgICAgICAgICAgICAgICBkdXJpbmcgbW9kdWxlIGJ1aWxkaW5nLgotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfSW1wb3J0RXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlPYmplY3QgKmxvY2FsZV9tb2R1bGUgPSBfUHlJT19nZXRfbG9jYWxlX21vZHVsZShzdGF0ZSk7CisgICAgICAgIGlmIChsb2NhbGVfbW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOworICAgICAgICBzZWxmLT5lbmNvZGluZyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCisgICAgICAgICAgICBsb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7CisgICAgICAgIFB5X0RFQ1JFRihsb2NhbGVfbW9kdWxlKTsKKyAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgSW1wb3J0aW5nIGxvY2FsZSBjYW4gcmFpc2UgYSBJbXBvcnRFcnJvciBiZWNhdXNlIG9mCisgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQorICAgICAgICAgICAgIEltcG9ydEVycm9yIGlmIF9sb2NhbGUgaXMgbm90IGF2YWlsYWJsZS4gIFRoZXNlIHdpbGwgaGFwcGVuCisgICAgICAgICAgICAgZHVyaW5nIG1vZHVsZSBidWlsZGluZy4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19JbXBvcnRFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKICAgICB9CiAgICAgaWYgKHNlbGYtPmVuY29kaW5nICE9IE5VTEwpIHsKICAgICAgICAgZW5jb2RpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNlbGYtPmVuY29kaW5nKTsKQEAgLTExMjIsOCArMTEzMiw2IEBACiBzdGF0aWMgaW50CiBfdGV4dGlvd3JhcHBlcl9jbGVhcih0ZXh0aW8gKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b2sgPSAwOwogICAgIFB5X0NMRUFSKHNlbGYtPmJ1ZmZlcik7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOwpAQCAtMTE0MSw5ICsxMTQ5LDEwIEBACiBzdGF0aWMgdm9pZAogdGV4dGlvd3JhcHBlcl9kZWFsbG9jKHRleHRpbyAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOwotICAgIGlmIChfdGV4dGlvd3JhcHBlcl9jbGVhcihzZWxmKSA8IDApCisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CisgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CisgICAgX3RleHRpb3dyYXBwZXJfY2xlYXIoc2VsZik7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopc2VsZik7CkBAIC0xMjg4LDcgKzEyOTcsNyBAQAogICAgIFB5T2JqZWN0ICpiOwogICAgIFB5X3NzaXplX3QgdGV4dGxlbjsKICAgICBpbnQgaGFzbGYgPSAwOwotICAgIGludCBuZWVkZmx1c2ggPSAwOworICAgIGludCBuZWVkZmx1c2ggPSAwLCB0ZXh0X25lZWRmbHVzaCA9IDA7CiAKICAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKIApAQCAtMTMyMiw4ICsxMzMxLDggQEAKICAgICB9CiAKICAgICBpZiAoc2VsZi0+d3JpdGVfdGhyb3VnaCkKLSAgICAgICAgbmVlZGZsdXNoID0gMTsKLSAgICBlbHNlIGlmIChzZWxmLT5saW5lX2J1ZmZlcmluZyAmJgorICAgICAgICB0ZXh0X25lZWRmbHVzaCA9IDE7CisgICAgaWYgKHNlbGYtPmxpbmVfYnVmZmVyaW5nICYmCiAgICAgICAgIChoYXNsZiB8fAogICAgICAgICAgUHlVbmljb2RlX0ZpbmRDaGFyKHRleHQsICdccicsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKHRleHQpLCAxKSAhPSAtMSkpCiAgICAgICAgIG5lZWRmbHVzaCA9IDE7CkBAIC0xMzU0LDcgKzEzNjMsOCBAQAogICAgIH0KICAgICBzZWxmLT5wZW5kaW5nX2J5dGVzX2NvdW50ICs9IFB5Qnl0ZXNfR0VUX1NJWkUoYik7CiAgICAgUHlfREVDUkVGKGIpOwotICAgIGlmIChzZWxmLT5wZW5kaW5nX2J5dGVzX2NvdW50ID4gc2VsZi0+Y2h1bmtfc2l6ZSB8fCBuZWVkZmx1c2gpIHsKKyAgICBpZiAoc2VsZi0+cGVuZGluZ19ieXRlc19jb3VudCA+IHNlbGYtPmNodW5rX3NpemUgfHwgbmVlZGZsdXNoIHx8CisgICAgICAgIHRleHRfbmVlZGZsdXNoKSB7CiAgICAgICAgIGlmIChfdGV4dGlvd3JhcHBlcl93cml0ZWZsdXNoKHNlbGYpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE5NDcsMTAgKzE5NTcsNyBAQAogCiAjZGVmaW5lIENPT0tJRV9CVUZfTEVOICAgICAgKHNpemVvZihQeV9vZmZfdCkgKyAzICogc2l6ZW9mKGludCkgKyBzaXplb2YoY2hhcikpCiAKLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKLQotIyBkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDAKLQorI2lmIFBZX0JJR19FTkRJQU4KIC8qIFdlIHdhbnQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHRvIGFsc28gYmUgdGhlIGxlYXN0CiAgICBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUsIHdoaWNoIG1lYW5zIHRoYXQgaW4gYmlnLWVuZGlhbiBtb2RlIHdlCiAgICBtdXN0IGNvcHkgdGhlIGZpZWxkcyBpbiByZXZlcnNlIG9yZGVyLiAqLwpAQCAtMTk2Miw5ICsxOTY5LDYgQEAKICMgZGVmaW5lIE9GRl9ORUVEX0VPRiAgICAgICAwCiAKICNlbHNlCi0KLSMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gICAxCi0KIC8qIExpdHRsZS1lbmRpYW4gbW9kZTogdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHdpbGwKICAgIG5hdHVyYWxseSBlbmQgdXAgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIGNvb2tpZS4gKi8KIApAQCAtMTk4NSw3ICsxOTg5LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKF9QeUxvbmdfQXNCeXRlQXJyYXkoY29va2llTG9uZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKICAgICAgICAgUHlfREVDUkVGKGNvb2tpZUxvbmcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjAxMSw5ICsyMDE1LDkgQEAKICAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX0NIQVJTX1RPX1NLSVAsICZjb29raWUtPmNoYXJzX3RvX3NraXAsIHNpemVvZihjb29raWUtPmNoYXJzX3RvX3NraXApKTsKICAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX05FRURfRU9GLCAmY29va2llLT5uZWVkX2VvZiwgc2l6ZW9mKGNvb2tpZS0+bmVlZF9lb2YpKTsKIAotICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShidWZmZXIsIHNpemVvZihidWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwgMCk7CiB9Ci0jdW5kZWYgSVNfTElUVExFX0VORElBTgogCiBzdGF0aWMgaW50CiBfdGV4dGlvd3JhcHBlcl9kZWNvZGVyX3NldHN0YXRlKHRleHRpbyAqc2VsZiwgY29va2llX3R5cGUgKmNvb2tpZSkKQEAgLTIzNjMsNyArMjM2Nyw3IEBACiAKICAgICAvKiBOb3RlIG91ciBpbml0aWFsIHN0YXJ0IHBvaW50LiAqLwogICAgIGNvb2tpZS5zdGFydF9wb3MgKz0gc2tpcF9ieXRlczsKLSAgICBjb29raWUuY2hhcnNfdG9fc2tpcCA9IGNoYXJzX3RvX3NraXA7CisgICAgY29va2llLmNoYXJzX3RvX3NraXAgPSBQeV9TQUZFX0RPV05DQVNUKGNoYXJzX3RvX3NraXAsIFB5X3NzaXplX3QsIGludCk7CiAgICAgaWYgKGNoYXJzX3RvX3NraXAgPT0gMCkKICAgICAgICAgZ290byBmaW5hbGx5OwogCkBAIC0yNTg5LDcgKzI1OTMsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEwsICp2YWwsICp0YjsKLSAgICAgICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgICAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX19kZWFsbG9jX3dhcm4sICJPIiwgc2VsZik7CiAgICAgICAgICAgICBpZiAocmVzKQogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtMjYwOSwxMyArMjYxMywxNCBAQAogICAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWwyOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMyLCAqdmFsMiwgKnRiMjsKKyAgICAgICAgICAgICAgICBQeUVycl9GZXRjaCgmZXhjMiwgJnZhbDIsICZ0YjIpOworICAgICAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsLCAmdGIpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihleGMpOwogICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodGIpOwotICAgICAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwyLCAmdGIpOwotICAgICAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsMiwgJnRiKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJmV4YzIsICZ2YWwyLCAmdGIyKTsKICAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRDb250ZXh0KHZhbDIsIHZhbCk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbDIsIHRiKTsKKyAgICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlKGV4YzIsIHZhbDIsIHRiMik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKQEAgLTI3NTAsNiArMjc1NSw3IEBACiAgICAgeyJlbmNvZGluZyIsIFRfT0JKRUNULCBvZmZzZXRvZih0ZXh0aW8sIGVuY29kaW5nKSwgUkVBRE9OTFl9LAogICAgIHsiYnVmZmVyIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHRleHRpbywgYnVmZmVyKSwgUkVBRE9OTFl9LAogICAgIHsibGluZV9idWZmZXJpbmciLCBUX0JPT0wsIG9mZnNldG9mKHRleHRpbywgbGluZV9idWZmZXJpbmcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YodGV4dGlvLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0yNzg2LDcgKzI3OTIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsIC8qdHBfZmxhZ3MqLwogICAgIHRleHRpb3dyYXBwZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKXRleHRpb3dyYXBwZXJfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpdGV4dGlvd3JhcHBlcl9jbGVhciwgLyogdHBfY2xlYXIgKi8KQEAgLTI4MDUsNCArMjgxMSwxNCBAQAogICAgIChpbml0cHJvYyl0ZXh0aW93cmFwcGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fanNvbi5jIGIvTW9kdWxlcy9fanNvbi5jCmluZGV4IDRiYzU4NWQuLjE1ODBlZTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2pzb24uYworKysgYi9Nb2R1bGVzL19qc29uLmMKQEAgLTIsMjAgKzIsNiBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImFjY3UuaCIKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA2MDAwMCAmJiAhZGVmaW5lZChQeV9UWVBFKQotI2RlZmluZSBQeV9UWVBFKG9iKSAgICAgKCgoUHlPYmplY3QqKShvYikpLT5vYl90eXBlKQotI2VuZGlmCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwICYmICFkZWZpbmVkKFBZX1NTSVpFX1RfTUlOKQotdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKLSNkZWZpbmUgUFlfU1NJWkVfVF9NQVggSU5UX01BWAotI2RlZmluZSBQWV9TU0laRV9UX01JTiBJTlRfTUlOCi0jZGVmaW5lIFB5SW50X0Zyb21Tc2l6ZV90IFB5SW50X0Zyb21Mb25nCi0jZGVmaW5lIFB5SW50X0FzU3NpemVfdCBQeUludF9Bc0xvbmcKLSNlbmRpZgotI2lmbmRlZiBQeV9JU19GSU5JVEUKLSNkZWZpbmUgUHlfSVNfRklOSVRFKFgpICghUHlfSVNfSU5GSU5JVFkoWCkgJiYgIVB5X0lTX05BTihYKSkKLSNlbmRpZgotCiAjaWZkZWYgX19HTlVDX18KICNkZWZpbmUgVU5VU0VEIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogI2Vsc2UKQEAgLTEyOSwzMyArMTE1LDE0IEBACiByYWlzZV9lcnJtc2coY2hhciAqbXNnLCBQeU9iamVjdCAqcywgUHlfc3NpemVfdCBlbmQpOwogc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwotc3RhdGljIGludAotX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVfcHRyKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKTsKK2VuY29kZXJfZW5jb2RlX2xvbmcoUHlFbmNvZGVyT2JqZWN0KiBzIFVOVVNFRCwgUHlPYmplY3QgKm9iaik7CiBzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKIAogI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICciJykKICNkZWZpbmUgSVNfV0hJVEVTUEFDRShjKSAoKChjKSA9PSAnICcpIHx8ICgoYykgPT0gJ1x0JykgfHwgKChjKSA9PSAnXG4nKSB8fCAoKGMpID09ICdccicpKQogCi1zdGF0aWMgaW50Ci1fY29udmVydFB5SW50X0FzU3NpemVfdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCAqc2l6ZV9wdHIpCi17Ci0gICAgLyogUHlPYmplY3QgdG8gUHlfc3NpemVfdCBjb252ZXJ0ZXIgKi8KLSAgICAqc2l6ZV9wdHIgPSBQeUxvbmdfQXNTc2l6ZV90KG8pOwotICAgIGlmICgqc2l6ZV9wdHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKQotewotICAgIC8qIFB5X3NzaXplX3QgdG8gUHlPYmplY3QgY29udmVydGVyICovCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdCgqc2l6ZV9wdHIpOwotfQotCiBzdGF0aWMgUHlfc3NpemVfdAogYXNjaWlfZXNjYXBlX3VuaWNoYXIoUHlfVUNTNCBjLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpCiB7CkBAIC0xNzQsMTQgKzE0MSwxMyBAQAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIC8qIFVURi0xNiBzdXJyb2dhdGUgcGFpciAqLwotICAgICAgICAgICAgICAgIFB5X1VDUzQgdiA9IGMgLSAweDEwMDAwOwotICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAoKHYgPj4gMTApICYgMHgzZmYpOworICAgICAgICAgICAgICAgIFB5X1VDUzQgdiA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoYyk7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAxMikgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAgOCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAgNCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyAgICAgICkgJiAweGZdOwotICAgICAgICAgICAgICAgIGMgPSAweGRjMDAgfCAodiAmIDB4M2ZmKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gMTIpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gIDgpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gIDQpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgICAgICApICYgMHhmXTsKKyAgICAgICAgICAgICAgICBjID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGMpOwogICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICdcXCc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7CkBAIC0yNjgsMTMgKzIzNCwyMyBAQAogICAgICAgICBpZiAoZXJybXNnX2ZuID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHB5bXNnID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVycm1zZ19mbiwgIih6T08mKSIsIG1zZywgcywgX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdCwgJmVuZCk7CisgICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPbikiLCBtc2csIHMsIGVuZCk7CiAgICAgaWYgKHB5bXNnKSB7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19WYWx1ZUVycm9yLCBweW1zZyk7CiAgICAgICAgIFB5X0RFQ1JFRihweW1zZyk7CiAgICAgfQogfQogCitzdGF0aWMgdm9pZAorcmFpc2Vfc3RvcF9pdGVyYXRpb24oUHlfc3NpemVfdCBpZHgpCit7CisgICAgUHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KGlkeCk7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1N0b3BJdGVyYXRpb24sIHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICB9Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfYnVpbGRfcnZhbF9pbmRleF90dXBsZShQeU9iamVjdCAqcnZhbCwgUHlfc3NpemVfdCBpZHgpIHsKICAgICAvKiByZXR1cm4gKHJ2YWwsIGlkeCkgdHVwbGUsIHN0ZWFsaW5nIHJlZmVyZW5jZSB0byBydmFsICovCkBAIC0zMTEsNyArMjg3LDcgQEAKICAgICAgICAgICAgIH0gXAogICAgICAgICB9IFwKICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY2h1bmtzLCBjaHVuaykpIHsgXAotICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rKTsgXAorICAgICAgICAgICAgUHlfQ0xFQVIoY2h1bmspOyBcCiAgICAgICAgICAgICBnb3RvIGJhaWw7IFwKICAgICAgICAgfSBcCiAgICAgICAgIFB5X0NMRUFSKGNodW5rKTsgXApAQCAtMzQ0LDcgKzMyMCw3IEBACiAgICAgYnVmID0gUHlVbmljb2RlX0RBVEEocHlzdHIpOwogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChweXN0cik7CiAKLSAgICBpZiAoZW5kIDwgMCB8fCBsZW4gPD0gZW5kKSB7CisgICAgaWYgKGVuZCA8IDAgfHwgbGVuIDwgZW5kKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW5kIGlzIG91dCBvZiBib3VuZHMiKTsKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KQEAgLTUxNSw3ICs0OTEsNyBAQAogICAgIFB5X3NzaXplX3QgZW5kOwogICAgIFB5X3NzaXplX3QgbmV4dF9lbmQgPSAtMTsKICAgICBpbnQgc3RyaWN0ID0gMTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PJnxpOnNjYW5zdHJpbmciLCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmZW5kLCAmc3RyaWN0KSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT258aTpzY2Fuc3RyaW5nIiwgJnB5c3RyLCAmZW5kLCAmc3RyaWN0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKQEAgLTYzMCwxMiArNjA2LDEyIEBACiAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCxzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgb2JqZWN0IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ30nKSB7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnfScpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICptZW1va2V5OwogCiAgICAgICAgICAgICAvKiByZWFkIGtleSAqLwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnIicpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnIicpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC02OTIsMTEgKzY2OCw5IEBACiAgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgb2JqZWN0IGlzIGNsb3NlZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLwotICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIGJyZWFrOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnfScpIHsKKyAgICAgICAgICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ30nKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgeworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgewogICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC03MDcsMTIgKzY4MSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ30nICovCi0gICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICd9JykgewotICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgZW5kX2lkeCk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKIAogICAgIGlmIChoYXNfcGFpcnNfaG9vaykgewpAQCAtNzY0LDggKzczMiw4IEBACiAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIGFycmF5IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKIAogICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiB0ZXJtICAqLwogICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKQEAgLTc4MiwxMSArNzUwLDkgQEAKICAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBhcnJheSBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ10nKSB7CisgICAgICAgICAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICddJykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtNzk5LDcgKzc2NSw3IEBACiAKICAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgc2hvdWxkIGJlICddJyAqLwogICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOworICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHB5c3RyLCBlbmRfaWR4KTsKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKQEAgLTg2Nyw3ICs4MzMsNyBAQAogICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJy0nKSB7CiAgICAgICAgIGlkeCsrOwogICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgICAgIHJhaXNlX3N0b3BfaXRlcmF0aW9uKHN0YXJ0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtODgzLDcgKzg0OSw3IEBACiAgICAgfQogICAgIC8qIG5vIGludGVnZXIgZGlnaXRzLCBlcnJvciAqLwogICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihzdGFydCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtOTgwLDcgKzk0Niw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoaWR4ID49IGxlbmd0aCkgewotICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihpZHgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEwODIsNyArMTA0OCw3IEBACiAgICAgUHlTY2FubmVyT2JqZWN0ICpzOwogICAgIGFzc2VydChQeVNjYW5uZXJfQ2hlY2soc2VsZikpOwogICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICopc2VsZjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mOnNjYW5fb25jZSIsIGt3bGlzdCwgJnB5c3RyLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmlkeCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9uOnNjYW5fb25jZSIsIGt3bGlzdCwgJnB5c3RyLCAmaWR4KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHB5c3RyKSkgewpAQCAtMTI4Myw4ICsxMjQ5LDggQEAKIAogICAgIGFzc2VydChQeUVuY29kZXJfQ2hlY2soc2VsZikpOwogICAgIHMgPSAoUHlFbmNvZGVyT2JqZWN0ICopc2VsZjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mOl9pdGVyZW5jb2RlIiwga3dsaXN0LAotICAgICAgICAmb2JqLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmluZGVudF9sZXZlbCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9uOl9pdGVyZW5jb2RlIiwga3dsaXN0LAorICAgICAgICAmb2JqLCAmaW5kZW50X2xldmVsKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzMwLDEzICsxMjk2LDQ1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitlbmNvZGVyX2VuY29kZV9sb25nKFB5RW5jb2Rlck9iamVjdCogcyBVTlVTRUQsIFB5T2JqZWN0ICpvYmopCit7CisgICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlMb25nIGFuZCBQeUxvbmcgc3ViY2xhc3Nlcy4KKyAgICAgICBDYWxscyBpbnQoKSBvbiBQeUxvbmcgc3ViY2xhc3NlcyBpbiBjYXNlIHRoZSBzdHIoKSB3YXMgY2hhbmdlZC4KKyAgICAgICBBZGRlZCBzcGVjaWZpY2FsbHkgdG8gZGVhbCB3aXRoIEludEVudW0uICBTZWUgSXNzdWUxODI2NC4gKi8KKyAgICBQeU9iamVjdCAqZW5jb2RlZCwgKmxvbmdvYmo7CisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KG9iaikpIHsKKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihvYmopOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbG9uZ29iaiA9IFB5TnVtYmVyX0xvbmcob2JqKTsKKyAgICAgICAgaWYgKGxvbmdvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGNvZXJjZSBpbnQgc3ViY2xhc3MgdG8gaW50IgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihsb25nb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGxvbmdvYmopOworICAgIH0KKyAgICByZXR1cm4gZW5jb2RlZDsKK30KKworCitzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKQogewotICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5RmxvYXQgKi8KKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0LgorICAgICAgIE1vZGlmaWVkIHRvIGNhbGwgZmxvYXQoKSBvbiBmbG9hdCBzdWJjbGFzc2VzIGluIGNhc2UgdGhlIHN1YmNsYXNzCisgICAgICAgY2hhbmdlcyB0aGUgcmVwci4gIFNlZSBJc3N1ZTE4MjY0LiAgKi8KKyAgICBQeU9iamVjdCAqZW5jb2RlZCwgKmZsb2F0b2JqOwogICAgIGRvdWJsZSBpID0gUHlGbG9hdF9BU19ET1VCTEUob2JqKTsKICAgICBpZiAoIVB5X0lTX0ZJTklURShpKSkgewogICAgICAgICBpZiAoIXMtPmFsbG93X25hbikgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudCIKKyAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmIChpID4gMCkgewpAQCAtMTM0OSw4ICsxMzQ3LDI0IEBACiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIk5hTiIpOwogICAgICAgICB9CiAgICAgfQotICAgIC8qIFVzZSBhIGJldHRlciBmbG9hdCBmb3JtYXQgaGVyZT8gKi8KLSAgICByZXR1cm4gUHlPYmplY3RfUmVwcihvYmopOworICAgIC8qIGNvZXJjZSBmbG9hdCBzdWJjbGFzc2VzIHRvIGZsb2F0IChwcmltYXJpbHkgZm9yIEVudW0pICovCisgICAgaWYgKFB5RmxvYXRfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIC8qIFVzZSBhIGJldHRlciBmbG9hdCBmb3JtYXQgaGVyZT8gKi8KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZsb2F0b2JqID0gUHlOdW1iZXJfRmxvYXQob2JqKTsKKyAgICAgICAgaWYgKGZsb2F0b2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBjb2VyY2UgZmxvYXQgc3ViY2xhc3MgdG8gZmxvYXQiCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfUmVwcihmbG9hdG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihmbG9hdG9iaik7CisgICAgfQorICAgIHJldHVybiBlbmNvZGVkOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTM5NCw3ICsxNDA4LDcgQEAKICAgICAgICAgcmV0dXJuIF9zdGVhbF9hY2N1bXVsYXRlKGFjYywgZW5jb2RlZCk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhvYmopKSB7Ci0gICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2Rlcl9lbmNvZGVfbG9uZyhzLCBvYmopOwogICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICByZXR1cm4gX3N0ZWFsX2FjY3VtdWxhdGUoYWNjLCBlbmNvZGVkKTsKQEAgLTE1NDEsNiArMTU1NSw3IEBACiAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShpdGVtcywgaSwgaXRlbSk7CisgICAgICAgICAgICBpdGVtID0gTlVMTDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTU3OSw5ICsxNTk0LDEwIEBACiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhrZXkpKSB7Ci0gICAgICAgICAgICBrc3RyID0gUHlPYmplY3RfU3RyKGtleSk7Ci0gICAgICAgICAgICBpZiAoa3N0ciA9PSBOVUxMKQorICAgICAgICAgICAga3N0ciA9IGVuY29kZXJfZW5jb2RlX2xvbmcocywga2V5KTsKKyAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2tpcGtleXMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jIGIvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKaW5kZXggY2M2ODhiYS4uNDAwYzM0NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKQEAgLTE0NywyNiArMTQ3LDM0IEBACiAgICAgLyogaG9wZWZ1bGx5LCB0aGUgbG9jYWxlY29udiByZXN1bHQgc3Vydml2ZXMgdGhlIEMgbGlicmFyeSBjYWxscwogICAgICAgIGludm9sdmVkIGhlcmVpbiAqLwogCisjZGVmaW5lIFJFU1VMVChrZXksIG9iailcCisgICAgZG8geyBcCisgICAgICAgIGlmIChvYmogPT0gTlVMTCkgXAorICAgICAgICAgICAgZ290byBmYWlsZWQ7IFwKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwga2V5LCBvYmopIDwgMCkgeyBcCisgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsgXAorICAgICAgICAgICAgZ290byBmYWlsZWQ7IFwKKyAgICAgICAgfSBcCisgICAgICAgIFB5X0RFQ1JFRihvYmopOyBcCisgICAgfSB3aGlsZSAoMCkKKwogI2RlZmluZSBSRVNVTFRfU1RSSU5HKHMpXAotICAgIHggPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKGwtPnMsIE5VTEwpOyAgIFwKLSAgICBpZiAoIXgpIGdvdG8gZmFpbGVkO1wKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICNzLCB4KTtcCi0gICAgUHlfWERFQ1JFRih4KQorICAgIGRvIHsgXAorICAgICAgICB4ID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZShsLT5zLCBOVUxMKTsgXAorICAgICAgICBSRVNVTFQoI3MsIHgpOyBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSRVNVTFRfSU5UKGkpXAotICAgIHggPSBQeUxvbmdfRnJvbUxvbmcobC0+aSk7XAotICAgIGlmICgheCkgZ290byBmYWlsZWQ7XAotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgI2ksIHgpO1wKLSAgICBQeV9YREVDUkVGKHgpCisgICAgZG8geyBcCisgICAgICAgIHggPSBQeUxvbmdfRnJvbUxvbmcobC0+aSk7IFwKKyAgICAgICAgUkVTVUxUKCNpLCB4KTsgXAorICAgIH0gd2hpbGUgKDApCiAKICAgICAvKiBOdW1lcmljIGluZm9ybWF0aW9uICovCiAgICAgUkVTVUxUX1NUUklORyhkZWNpbWFsX3BvaW50KTsKICAgICBSRVNVTFRfU1RSSU5HKHRob3VzYW5kc19zZXApOwogICAgIHggPSBjb3B5X2dyb3VwaW5nKGwtPmdyb3VwaW5nKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgImdyb3VwaW5nIiwgeCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKKyAgICBSRVNVTFQoImdyb3VwaW5nIiwgeCk7CiAKICAgICAvKiBNb25ldGFyeSBpbmZvcm1hdGlvbiAqLwogICAgIFJFU1VMVF9TVFJJTkcoaW50X2N1cnJfc3ltYm9sKTsKQEAgLTE3NCwxMCArMTgyLDggQEAKICAgICBSRVNVTFRfU1RSSU5HKG1vbl9kZWNpbWFsX3BvaW50KTsKICAgICBSRVNVTFRfU1RSSU5HKG1vbl90aG91c2FuZHNfc2VwKTsKICAgICB4ID0gY29weV9ncm91cGluZyhsLT5tb25fZ3JvdXBpbmcpOwotICAgIGlmICgheCkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAibW9uX2dyb3VwaW5nIiwgeCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKKyAgICBSRVNVTFQoIm1vbl9ncm91cGluZyIsIHgpOworCiAgICAgUkVTVUxUX1NUUklORyhwb3NpdGl2ZV9zaWduKTsKICAgICBSRVNVTFRfU1RSSU5HKG5lZ2F0aXZlX3NpZ24pOwogICAgIFJFU1VMVF9JTlQoaW50X2ZyYWNfZGlnaXRzKTsKQEAgLTE5Miw3ICsxOTgsNiBAQAogCiAgIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHJlc3VsdCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbHNwcm9mLmMgYi9Nb2R1bGVzL19sc3Byb2YuYwppbmRleCA0MTYyYmU4Li4wMTM3ZDk1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sc3Byb2YuYworKysgYi9Nb2R1bGVzL19sc3Byb2YuYwpAQCAtMzYsMTIgKzM2LDggQEAKICNlcnJvciAiVGhpcyBtb2R1bGUgcmVxdWlyZXMgZ2V0dGltZW9mZGF5KCkgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zISIKICNlbmRpZgogCi0jaWYgKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZWxzZQogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy90aW1lcy5oPgotI2VuZGlmCiAKIHN0YXRpYyBQWV9MT05HX0xPTkcKIGhwVGltZXIodm9pZCkKQEAgLTIyNyw3ICsyMjMsNyBAQAogbmV3UHJvZmlsZXJFbnRyeShQcm9maWxlck9iamVjdCAqcE9iaiwgdm9pZCAqa2V5LCBQeU9iamVjdCAqdXNlck9iaikKIHsKICAgICBQcm9maWxlckVudHJ5ICpzZWxmOwotICAgIHNlbGYgPSAoUHJvZmlsZXJFbnRyeSopIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJFbnRyeSkpOworICAgIHNlbGYgPSAoUHJvZmlsZXJFbnRyeSopIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJFbnRyeSkpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNSw3ICsyMzEsNyBAQAogICAgIHVzZXJPYmogPSBub3JtYWxpemVVc2VyT2JqKHVzZXJPYmopOwogICAgIGlmICh1c2VyT2JqID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZnJlZShzZWxmKTsKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmKTsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNjgsNyArMjY0LDcgQEAKIG5ld1N1YkVudHJ5KFByb2ZpbGVyT2JqZWN0ICpwT2JqLCAgUHJvZmlsZXJFbnRyeSAqY2FsbGVyLCBQcm9maWxlckVudHJ5KiBlbnRyeSkKIHsKICAgICBQcm9maWxlclN1YkVudHJ5ICpzZWxmOwotICAgIHNlbGYgPSAoUHJvZmlsZXJTdWJFbnRyeSopIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJTdWJFbnRyeSkpOworICAgIHNlbGYgPSAoUHJvZmlsZXJTdWJFbnRyeSopIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJTdWJFbnRyeSkpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI4Niw3ICsyODIsNyBAQAogc3RhdGljIGludCBmcmVlU3ViRW50cnkocm90YXRpbmdfbm9kZV90ICpoZWFkZXIsIHZvaWQgKmFyZykKIHsKICAgICBQcm9maWxlclN1YkVudHJ5ICpzdWJlbnRyeSA9IChQcm9maWxlclN1YkVudHJ5KikgaGVhZGVyOwotICAgIGZyZWUoc3ViZW50cnkpOworICAgIFB5TWVtX0ZyZWUoc3ViZW50cnkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yOTUsNyArMjkxLDcgQEAKICAgICBQcm9maWxlckVudHJ5ICplbnRyeSA9IChQcm9maWxlckVudHJ5KikgaGVhZGVyOwogICAgIFJvdGF0aW5nVHJlZV9FbnVtKGVudHJ5LT5jYWxscywgZnJlZVN1YkVudHJ5LCBOVUxMKTsKICAgICBQeV9ERUNSRUYoZW50cnktPnVzZXJPYmopOwotICAgIGZyZWUoZW50cnkpOworICAgIFB5TWVtX0ZyZWUoZW50cnkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMDUsMTMgKzMwMSwxMyBAQAogICAgIHBPYmotPnByb2ZpbGVyRW50cmllcyA9IEVNUFRZX1JPVEFUSU5HX1RSRUU7CiAgICAgLyogcmVsZWFzZSB0aGUgbWVtb3J5IGhvbGQgYnkgdGhlIFByb2ZpbGVyQ29udGV4dHMgKi8KICAgICBpZiAocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCkgewotICAgICAgICBmcmVlKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpOworICAgICAgICBQeU1lbV9GcmVlKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpOwogICAgICAgICBwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0ID0gTlVMTDsKICAgICB9CiAgICAgd2hpbGUgKHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0KSB7CiAgICAgICAgIFByb2ZpbGVyQ29udGV4dCAqYyA9IHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0OwogICAgICAgICBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCA9IGMtPnByZXZpb3VzOwotICAgICAgICBmcmVlKGMpOworICAgICAgICBQeU1lbV9GcmVlKGMpOwogICAgIH0KICAgICBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCA9IE5VTEw7CiB9CkBAIC0zOTcsNyArMzkzLDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgLyogZnJlZSBsaXN0IGV4aGF1c3RlZCwgYWxsb2NhdGUgYSBuZXcgb25lICovCiAgICAgICAgIHBDb250ZXh0ID0gKFByb2ZpbGVyQ29udGV4dCopCi0gICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFByb2ZpbGVyQ29udGV4dCkpOworICAgICAgICAgICAgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlckNvbnRleHQpKTsKICAgICAgICAgaWYgKHBDb250ZXh0ID09IE5VTEwpIHsKICAgICAgICAgICAgIHBPYmotPmZsYWdzIHw9IFBPRl9OT01FTU9SWTsKICAgICAgICAgICAgIGdvdG8gcmVzdG9yZVB5ZXJyOwpAQCAtNzA4LDcgKzcwNCw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQgPSBwQ29udGV4dC0+cHJldmlvdXM7CiAgICAgICAgIGlmIChwQ29udGV4dCkKLSAgICAgICAgICAgIGZyZWUocENvbnRleHQpOworICAgICAgICAgICAgUHlNZW1fRnJlZShwQ29udGV4dCk7CiAgICAgfQogCiB9CkBAIC04NzYsMTAgKzg3MiwxMiBAQAogICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJQcm9maWxlciIsIChQeU9iamVjdCAqKSZQeVByb2ZpbGVyX1R5cGUpOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0c0VudHJ5VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvZmlsZXJfZW50cnlfZGVzYyk7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRzU3ViRW50cnlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9zdWJlbnRyeV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0c0VudHJ5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9lbnRyeV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0c1N1YkVudHJ5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9zdWJlbnRyeV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTdGF0c0VudHJ5VHlwZSk7CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTdGF0c1N1YkVudHJ5VHlwZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sem1hbW9kdWxlLmMgYi9Nb2R1bGVzL19sem1hbW9kdWxlLmMKaW5kZXggNjQzNjE2MC4uYzQzNjc2YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbHptYW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2x6bWFtb2R1bGUuYwpAQCAtNTEsNiArNTEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAorICAgIGx6bWFfYWxsb2NhdG9yIGFsbG9jOwogICAgIGx6bWFfc3RyZWFtIGx6czsKICAgICBpbnQgZmx1c2hlZDsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtNjAsNiArNjEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAorICAgIGx6bWFfYWxsb2NhdG9yIGFsbG9jOwogICAgIGx6bWFfc3RyZWFtIGx6czsKICAgICBpbnQgY2hlY2s7CiAgICAgY2hhciBlb2Y7CkBAIC0xMTcsNiArMTE5LDIyIEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCoKK1B5THptYV9NYWxsb2Modm9pZCAqb3BhcXVlLCBzaXplX3QgaXRlbXMsIHNpemVfdCBzaXplKQoreworICAgIGlmIChpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDoKKyAgICAgICB0aGUgR0lMIGlzIG5vdCBoZWxkIHdoZW4gbHptYV9jb2RlKCkgaXMgY2FsbGVkICovCisgICAgcmV0dXJuIFB5TWVtX1Jhd01hbGxvYyhpdGVtcyAqIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorUHlMem1hX0ZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworfQorCiAjaWYgQlVGU0laIDwgODE5MgogI2RlZmluZSBJTklUSUFMX0JVRkZFUl9TSVpFIDgxOTIKICNlbHNlCkBAIC0yODAsMzYgKzI5OCwzNyBAQAogICAgIHJldHVybiBvcHRpb25zOwogfQogCi1zdGF0aWMgdm9pZCAqCi1wYXJzZV9maWx0ZXJfc3BlYyhsem1hX2ZpbHRlciAqZiwgUHlPYmplY3QgKnNwZWMpCitzdGF0aWMgaW50Citsem1hX2ZpbHRlcl9jb252ZXJ0ZXIoUHlPYmplY3QgKnNwZWMsIHZvaWQgKnB0cikKIHsKKyAgICBsem1hX2ZpbHRlciAqZiA9IChsem1hX2ZpbHRlciAqKXB0cjsKICAgICBQeU9iamVjdCAqaWRfb2JqOwogCiAgICAgaWYgKCFQeU1hcHBpbmdfQ2hlY2soc3BlYykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIgc3BlY2lmaWVyIG11c3QgYmUgYSBkaWN0IG9yIGRpY3QtbGlrZSBvYmplY3QiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZF9vYmogPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhzcGVjLCAiaWQiKTsKICAgICBpZiAoaWRfb2JqID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciBzcGVjaWZpZXIgbXVzdCBoYXZlIGFuIFwiaWRcIiBlbnRyeSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGYtPmlkID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhpZF9vYmopOwogICAgIFB5X0RFQ1JFRihpZF9vYmopOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGYtPmlkKSB7CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfTFpNQTE6CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfTFpNQTI6CiAgICAgICAgICAgICBmLT5vcHRpb25zID0gcGFyc2VfZmlsdGVyX3NwZWNfbHptYShzcGVjKTsKLSAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zOworICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnMgIT0gTlVMTDsKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9ERUxUQToKICAgICAgICAgICAgIGYtPm9wdGlvbnMgPSBwYXJzZV9maWx0ZXJfc3BlY19kZWx0YShzcGVjKTsKLSAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zOworICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnMgIT0gTlVMTDsKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9YODY6CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfUE9XRVJQQzoKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9JQTY0OgpAQCAtMzE3LDEwICszMzYsMTAgQEAKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9BUk1USFVNQjoKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9TUEFSQzoKICAgICAgICAgICAgIGYtPm9wdGlvbnMgPSBwYXJzZV9maWx0ZXJfc3BlY19iY2ooc3BlYyk7Ci0gICAgICAgICAgICByZXR1cm4gZi0+b3B0aW9uczsKKyAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zICE9IE5VTEw7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgZmlsdGVyIElEOiAlbGx1IiwgZi0+aWQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKQEAgLTM1MSw3ICszNzAsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZmlsdGVyczsgaSsrKSB7CiAgICAgICAgIGludCBvayA9IDE7CiAgICAgICAgIFB5T2JqZWN0ICpzcGVjID0gUHlTZXF1ZW5jZV9HZXRJdGVtKGZpbHRlcnNwZWNzLCBpKTsKLSAgICAgICAgaWYgKHNwZWMgPT0gTlVMTCB8fCBwYXJzZV9maWx0ZXJfc3BlYygmZmlsdGVyc1tpXSwgc3BlYykgPT0gTlVMTCkKKyAgICAgICAgaWYgKHNwZWMgPT0gTlVMTCB8fCAhbHptYV9maWx0ZXJfY29udmVydGVyKHNwZWMsICZmaWx0ZXJzW2ldKSkKICAgICAgICAgICAgIG9rID0gMDsKICAgICAgICAgUHlfWERFQ1JFRihzcGVjKTsKICAgICAgICAgaWYgKCFvaykgewpAQCAtNDUwLDYgKzQ2OSwzNiBAQAogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIF9sem1hCitjbGFzcyBfbHptYS5MWk1BQ29tcHJlc3NvciAiQ29tcHJlc3NvciAqIiAiJkNvbXByZXNzb3JfdHlwZSIKK2NsYXNzIF9sem1hLkxaTUFEZWNvbXByZXNzb3IgIkRlY29tcHJlc3NvciAqIiAiJkRlY29tcHJlc3Nvcl90eXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZjE3YWZjNzg2NTI1ZDZjMl0qLworCisjaW5jbHVkZSAiY2xpbmljL19sem1hbW9kdWxlLmMuaCIKKworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyBsem1hX3ZsaV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsem1hX3ZsaScKKyAgICBjb252ZXJ0ZXIgPSAnbHptYV92bGlfY29udmVydGVyJworCitjbGFzcyBsem1hX2ZpbHRlcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsem1hX2ZpbHRlcicKKyAgICBjb252ZXJ0ZXIgPSAnbHptYV9maWx0ZXJfY29udmVydGVyJworICAgIGNfZGVmYXVsdCA9IGNfaWdub3JlZF9kZWZhdWx0ID0gIntMWk1BX1ZMSV9VTktOT1dOLCBOVUxMfSIKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiAoJ2lmICglKG5hbWUpcy5pZCAhPSBMWk1BX1ZMSV9VTktOT1dOKVxuJworICAgICAgICAgICAgICAgICcgICBQeU1lbV9GcmVlKCUobmFtZSlzLm9wdGlvbnMpO1xuJykgJSB7J25hbWUnOiBuYW1lfQorCitbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD03NGZlNzYzMWNlMzc3YTk0XSovCisKKwogLyogTFpNQUNvbXByZXNzb3IgY2xhc3MuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC00OTQsNDQgKzU0Myw1MSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoQ29tcHJlc3Nvcl9jb21wcmVzc19kb2MsCi0iY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LiBSZXR1cm5zIGEgY2h1bmsgb2ZcbiIKLSJjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcIlwiIG90aGVyd2lzZS5cbiIKLSJcbiIKLSJXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBjb21wcmVzc29yLCBjYWxsIHRoZVxuIgotImZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29udmVyc2lvbiBwcm9jZXNzLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5MWk1BQ29tcHJlc3Nvci5jb21wcmVzcworCisgICAgc2VsZjogc2VsZih0eXBlPSJDb21wcmVzc29yICoiKQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworUHJvdmlkZSBkYXRhIHRvIHRoZSBjb21wcmVzc29yIG9iamVjdC4KKworUmV0dXJucyBhIGNodW5rIG9mIGNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS4KKworV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGUKK2ZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNvbXByZXNzb3JfY29tcHJlc3MoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKENvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zMWY2MTUxMzY5NjNlMDBmIGlucHV0PThiNjBjYjEzZTBjZTY0MjBdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kjpjb21wcmVzcyIsICZidWZmZXIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIEFDUVVJUkVfTE9DSyhzZWxmKTsKICAgICBpZiAoc2VsZi0+Zmx1c2hlZCkKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJDb21wcmVzc29yIGhhcyBiZWVuIGZsdXNoZWQiKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGNvbXByZXNzKHNlbGYsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sIExaTUFfUlVOKTsKKyAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4sIExaTUFfUlVOKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QeURvY19TVFJWQVIoQ29tcHJlc3Nvcl9mbHVzaF9kb2MsCi0iZmx1c2goKSAtPiBieXRlc1xuIgotIlxuIgotIkZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4gUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnRcbiIKLSJpbiBpbnRlcm5hbCBidWZmZXJzLlxuIgotIlxuIgotIlRoZSBjb21wcmVzc29yIG9iamVjdCBjYW5ub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFDb21wcmVzc29yLmZsdXNoCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IkNvbXByZXNzb3IgKiIpCisKK0ZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KKworUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy4KKworVGhlIGNvbXByZXNzb3Igb2JqZWN0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Db21wcmVzc29yX2ZsdXNoKENvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9pbXBsKENvbXByZXNzb3IgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmVjMjFmM2UyMjUwNGY1MCBpbnB1dD0zMDYwZmIyNmY5YjQwNDJjXSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKQEAgLTYzMiw2ICs2ODgsMzkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKy8qWy1jbGluaWMgaW5wdXRdCitfbHptYS5MWk1BQ29tcHJlc3Nvci5fX2luaXRfXworCisgICAgc2VsZjogc2VsZih0eXBlPSJDb21wcmVzc29yICoiKQorICAgIGZvcm1hdDogaW50KGNfZGVmYXVsdD0iRk9STUFUX1haIikgPSBGT1JNQVRfWFoKKyAgICAgICAgVGhlIGNvbnRhaW5lciBmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0LiAgVGhpcyBjYW4KKyAgICAgICAgYmUgRk9STUFUX1haIChkZWZhdWx0KSwgRk9STUFUX0FMT05FLCBvciBGT1JNQVRfUkFXLgorCisgICAgY2hlY2s6IGludChjX2RlZmF1bHQ9Ii0xIikgPSB1bnNwZWNpZmllZAorICAgICAgICBUaGUgaW50ZWdyaXR5IGNoZWNrIHRvIHVzZS4gIEZvciBGT1JNQVRfWFosIHRoZSBkZWZhdWx0CisgICAgICAgIGlzIENIRUNLX0NSQzY0LiAgRk9STUFUX0FMT05FIGFuZCBGT1JNQVRfUkFXIGRvIG5vdCBzdXBvcnQgaW50ZWdyaXR5CisgICAgICAgIGNoZWNrczsgZm9yIHRoZXNlIGZvcm1hdHMsIGNoZWNrIG11c3QgYmUgb21pdHRlZCwgb3IgYmUgQ0hFQ0tfTk9ORS4KKworICAgIHByZXNldDogb2JqZWN0ID0gTm9uZQorICAgICAgICBJZiBwcm92aWRlZCBzaG91bGQgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05LCBvcHRpb25hbGx5CisgICAgICAgIE9SLWVkIHdpdGggdGhlIGNvbnN0YW50IFBSRVNFVF9FWFRSRU1FLgorCisgICAgZmlsdGVyczogb2JqZWN0ID0gTm9uZQorICAgICAgICBJZiBwcm92aWRlZCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvZiBkaWN0cy4gIEVhY2ggZGljdCBzaG91bGQKKyAgICAgICAgaGF2ZSBhbiBlbnRyeSBmb3IgImlkIiBpbmRpY2F0aW5nIHRoZSBJRCBvZiB0aGUgZmlsdGVyLCBwbHVzCisgICAgICAgIGFkZGl0aW9uYWwgZW50cmllcyBmb3Igb3B0aW9ucyB0byB0aGUgZmlsdGVyLgorCitDcmVhdGUgYSBjb21wcmVzc29yIG9iamVjdCBmb3IgY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LgorCitUaGUgc2V0dGluZ3MgdXNlZCBieSB0aGUgY29tcHJlc3NvciBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhCitwcmVzZXQgY29tcHJlc3Npb24gbGV2ZWwgKHdpdGggdGhlICdwcmVzZXQnIGFyZ3VtZW50KSwgb3IgaW4gZGV0YWlsCithcyBhIGN1c3RvbSBmaWx0ZXIgY2hhaW4gKHdpdGggdGhlICdmaWx0ZXJzJyBhcmd1bWVudCkuICBGb3IgRk9STUFUX1haCithbmQgRk9STUFUX0FMT05FLCB0aGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIFBSRVNFVF9ERUZBVUxUIHByZXNldAorbGV2ZWwuICBGb3IgRk9STUFUX1JBVywgdGhlIGNhbGxlciBtdXN0IGFsd2F5cyBzcGVjaWZ5IGEgZmlsdGVyIGNoYWluOwordGhlIHJhdyBjb21wcmVzc29yIGRvZXMgbm90IHN1cHBvcnQgcHJlc2V0IGNvbXByZXNzaW9uIGxldmVscy4KKworRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1stY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiBzdGF0aWMgaW50CiBDb21wcmVzc29yX2luaXQoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CkBAIC02NjQsNiArNzUzLDExIEBACiAgICAgICAgIGlmICghdWludDMyX2NvbnZlcnRlcihwcmVzZXRfb2JqLCAmcHJlc2V0KSkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAorICAgIHNlbGYtPmFsbG9jLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOworICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKKyAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKQEAgLTcxNiwxMCArODEwLDggQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIENvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBDb21wcmVzc29yX2NvbXByZXNzX2RvY30sCi0gICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilDb21wcmVzc29yX2ZsdXNoLCBNRVRIX05PQVJHUywKLSAgICAgQ29tcHJlc3Nvcl9mbHVzaF9kb2N9LAorICAgIF9MWk1BX0xaTUFDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRgorICAgIF9MWk1BX0xaTUFDT01QUkVTU09SX0ZMVVNIX01FVEhPRERFRgogICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKUNvbXByZXNzb3JfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTH0KIH07CkBAIC04NDksMzIgKzk0MSwzNCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoRGVjb21wcmVzc29yX2RlY29tcHJlc3NfZG9jLAotImRlY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuIFJldHVybnMgYSBjaHVuayBvZlxuIgotImRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCJcIiBvdGhlcndpc2UuXG4iCi0iXG4iCi0iQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGlzXG4iCi0icmVhY2hlZCByYWlzZXMgYW4gRU9GRXJyb3IuIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlXG4iCi0ic3RyZWFtIGlzIGlnbm9yZWQsIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5MWk1BRGVjb21wcmVzc29yLmRlY29tcHJlc3MKKworICAgIHNlbGY6IHNlbGYodHlwZT0iRGVjb21wcmVzc29yICoiKQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LgorCitSZXR1cm5zIGEgY2h1bmsgb2YgZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuCisKK0F0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWQKK3JhaXNlcyBhbiBFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbQoraXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLURlY29tcHJlc3Nvcl9kZWNvbXByZXNzKERlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kODZlNzhkYTdmZjBmZjIxIGlucHV0PTUwYzQ3NjhiODIxYmYwZWZdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpkZWNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5lb2YpCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkFscmVhZHkgYXQgZW5kIG9mIHN0cmVhbSIpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZGVjb21wcmVzcyhzZWxmLCBidWZmZXIuYnVmLCBidWZmZXIubGVuKTsKKyAgICAgICAgcmVzdWx0ID0gZGVjb21wcmVzcyhzZWxmLCBkYXRhLT5idWYsIGRhdGEtPmxlbik7CiAgICAgUkVMRUFTRV9MT0NLKHNlbGYpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTAyLDQzICs5OTYsNjYgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFEZWNvbXByZXNzb3IuX19pbml0X18KKworICAgIHNlbGY6IHNlbGYodHlwZT0iRGVjb21wcmVzc29yICoiKQorICAgIGZvcm1hdDogaW50KGNfZGVmYXVsdD0iRk9STUFUX0FVVE8iKSA9IEZPUk1BVF9BVVRPCisgICAgICAgIFNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAgSWYgdGhpcyBpcworICAgICAgICBGT1JNQVRfQVVUTyAodGhlIGRlZmF1bHQpLCB0aGUgZGVjb21wcmVzc29yIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QKKyAgICAgICAgd2hldGhlciB0aGUgaW5wdXQgaXMgRk9STUFUX1haIG9yIEZPUk1BVF9BTE9ORS4gIFN0cmVhbXMgY3JlYXRlZCB3aXRoCisgICAgICAgIEZPUk1BVF9SQVcgY2Fubm90IGJlIGF1dG9kZXRlY3RlZC4KKworICAgIG1lbWxpbWl0OiBvYmplY3QgPSBOb25lCisgICAgICAgIExpbWl0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIGRlY29tcHJlc3Nvci4gIFRoaXMgd2lsbCBjYXVzZQorICAgICAgICBkZWNvbXByZXNzaW9uIHRvIGZhaWwgaWYgdGhlIGlucHV0IGNhbm5vdCBiZSBkZWNvbXByZXNzZWQgd2l0aGluIHRoZQorICAgICAgICBnaXZlbiBsaW1pdC4KKworICAgIGZpbHRlcnM6IG9iamVjdCA9IE5vbmUKKyAgICAgICAgQSBjdXN0b20gZmlsdGVyIGNoYWluLiAgVGhpcyBhcmd1bWVudCBpcyByZXF1aXJlZCBmb3IgRk9STUFUX1JBVywgYW5kCisgICAgICAgIG5vdCBhY2NlcHRlZCB3aXRoIGFueSBvdGhlciBmb3JtYXQuICBXaGVuIHByb3ZpZGVkLCB0aGlzIHNob3VsZCBiZSBhCisgICAgICAgIHNlcXVlbmNlIG9mIGRpY3RzLCBlYWNoIGluZGljYXRpbmcgdGhlIElEIGFuZCBvcHRpb25zIGZvciBhIHNpbmdsZQorICAgICAgICBmaWx0ZXIuCisKK0NyZWF0ZSBhIGRlY29tcHJlc3NvciBvYmplY3QgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LgorCitGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIGludAotRGVjb21wcmVzc29yX2luaXQoRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19faW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIGludCBmb3JtYXQsIFB5T2JqZWN0ICptZW1saW1pdCwgUHlPYmplY3QgKmZpbHRlcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWIxMTlmNmYyY2MyZDdhOCBpbnB1dD00NThjYTYxMzJlZjI5ODAxXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmFyZ19uYW1lc1tdID0geyJmb3JtYXQiLCAibWVtbGltaXQiLCAiZmlsdGVycyIsIE5VTEx9OwogICAgIGNvbnN0IHVpbnQzMl90IGRlY29kZXJfZmxhZ3MgPSBMWk1BX1RFTExfQU5ZX0NIRUNLIHwgTFpNQV9URUxMX05PX0NIRUNLOwotICAgIGludCBmb3JtYXQgPSBGT1JNQVRfQVVUTzsKLSAgICB1aW50NjRfdCBtZW1saW1pdCA9IFVJTlQ2NF9NQVg7Ci0gICAgUHlPYmplY3QgKm1lbWxpbWl0X29iaiA9IFB5X05vbmU7Ci0gICAgUHlPYmplY3QgKmZpbHRlcnNwZWNzID0gUHlfTm9uZTsKKyAgICB1aW50NjRfdCBtZW1saW1pdF8gPSBVSU5UNjRfTUFYOwogICAgIGx6bWFfcmV0IGx6cmV0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ8aU9POkxaTUFEZWNvbXByZXNzb3IiLCBhcmdfbmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJm1lbWxpbWl0X29iaiwgJmZpbHRlcnNwZWNzKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKG1lbWxpbWl0X29iaiAhPSBQeV9Ob25lKSB7CisgICAgaWYgKG1lbWxpbWl0ICE9IFB5X05vbmUpIHsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGT1JNQVRfUkFXKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgbWVtb3J5IGxpbWl0IHdpdGggRk9STUFUX1JBVyIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIG1lbWxpbWl0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhtZW1saW1pdF9vYmopOworICAgICAgICBtZW1saW1pdF8gPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG1lbWxpbWl0KTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdCA9PSBGT1JNQVRfUkFXICYmIGZpbHRlcnNwZWNzID09IFB5X05vbmUpIHsKKyAgICBpZiAoZm9ybWF0ID09IEZPUk1BVF9SQVcgJiYgZmlsdGVycyA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIk11c3Qgc3BlY2lmeSBmaWx0ZXJzIGZvciBGT1JNQVRfUkFXIik7CiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKGZvcm1hdCAhPSBGT1JNQVRfUkFXICYmIGZpbHRlcnNwZWNzICE9IFB5X05vbmUpIHsKKyAgICB9IGVsc2UgaWYgKGZvcm1hdCAhPSBGT1JNQVRfUkFXICYmIGZpbHRlcnMgIT0gUHlfTm9uZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSBmaWx0ZXJzIGV4Y2VwdCB3aXRoIEZPUk1BVF9SQVciKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIHNlbGYtPmFsbG9jLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOworICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKKyAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKQEAgLTk1NCwyNyArMTA3MSwyNyBAQAogCiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAgICAgY2FzZSBGT1JNQVRfQVVUTzoKLSAgICAgICAgICAgIGx6cmV0ID0gbHptYV9hdXRvX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQsIGRlY29kZXJfZmxhZ3MpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX2F1dG9fZGVjb2Rlcigmc2VsZi0+bHpzLCBtZW1saW1pdF8sIGRlY29kZXJfZmxhZ3MpOwogICAgICAgICAgICAgaWYgKGNhdGNoX2x6bWFfZXJyb3IobHpyZXQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgY2FzZSBGT1JNQVRfWFo6Ci0gICAgICAgICAgICBsenJldCA9IGx6bWFfc3RyZWFtX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQsIGRlY29kZXJfZmxhZ3MpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX3N0cmVhbV9kZWNvZGVyKCZzZWxmLT5senMsIG1lbWxpbWl0XywgZGVjb2Rlcl9mbGFncyk7CiAgICAgICAgICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBjYXNlIEZPUk1BVF9BTE9ORToKICAgICAgICAgICAgIHNlbGYtPmNoZWNrID0gTFpNQV9DSEVDS19OT05FOwotICAgICAgICAgICAgbHpyZXQgPSBsem1hX2Fsb25lX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX2Fsb25lX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXRfKTsKICAgICAgICAgICAgIGlmIChjYXRjaF9sem1hX2Vycm9yKGx6cmV0KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGNhc2UgRk9STUFUX1JBVzoKICAgICAgICAgICAgIHNlbGYtPmNoZWNrID0gTFpNQV9DSEVDS19OT05FOwotICAgICAgICAgICAgaWYgKERlY29tcHJlc3Nvcl9pbml0X3Jhdygmc2VsZi0+bHpzLCBmaWx0ZXJzcGVjcykgPT0gLTEpCisgICAgICAgICAgICBpZiAoRGVjb21wcmVzc29yX2luaXRfcmF3KCZzZWxmLT5senMsIGZpbHRlcnMpID09IC0xKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwMDYsOCArMTEyMyw3IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBEZWNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBEZWNvbXByZXNzb3JfZGVjb21wcmVzc19kb2N9LAorICAgIF9MWk1BX0xaTUFERUNPTVBSRVNTT1JfREVDT01QUkVTU19NRVRIT0RERUYKICAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilEZWNvbXByZXNzb3JfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTH0KIH07CkBAIC0xMDMxLDI3ICsxMTQ3LDYgQEAKICAgICB7TlVMTH0KIH07CiAKLVB5RG9jX1NUUlZBUihEZWNvbXByZXNzb3JfZG9jLAotIkxaTUFEZWNvbXByZXNzb3IoZm9ybWF0PUZPUk1BVF9BVVRPLCBtZW1saW1pdD1Ob25lLCBmaWx0ZXJzPU5vbmUpXG4iCi0iXG4iCi0iQ3JlYXRlIGEgZGVjb21wcmVzc29yIG9iamVjdCBmb3IgZGVjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuXG4iCi0iXG4iCi0iZm9ybWF0IHNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCBvZiB0aGUgaW5wdXQgc3RyZWFtLiBJZiB0aGlzIGlzXG4iCi0iRk9STUFUX0FVVE8gKHRoZSBkZWZhdWx0KSwgdGhlIGRlY29tcHJlc3NvciB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0XG4iCi0id2hldGhlciB0aGUgaW5wdXQgaXMgRk9STUFUX1haIG9yIEZPUk1BVF9BTE9ORS4gU3RyZWFtcyBjcmVhdGVkIHdpdGhcbiIKLSJGT1JNQVRfUkFXIGNhbm5vdCBiZSBhdXRvZGV0ZWN0ZWQuXG4iCi0iXG4iCi0ibWVtbGltaXQgY2FuIGJlIHNwZWNpZmllZCB0byBsaW1pdCB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZVxuIgotImRlY29tcHJlc3Nvci4gVGhpcyB3aWxsIGNhdXNlIGRlY29tcHJlc3Npb24gdG8gZmFpbCBpZiB0aGUgaW5wdXRcbiIKLSJjYW5ub3QgYmUgZGVjb21wcmVzc2VkIHdpdGhpbiB0aGUgZ2l2ZW4gbGltaXQuXG4iCi0iXG4iCi0iZmlsdGVycyBzcGVjaWZpZXMgYSBjdXN0b20gZmlsdGVyIGNoYWluLiBUaGlzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIGZvclxuIgotIkZPUk1BVF9SQVcsIGFuZCBub3QgYWNjZXB0ZWQgd2l0aCBhbnkgb3RoZXIgZm9ybWF0LiBXaGVuIHByb3ZpZGVkLFxuIgotInRoaXMgc2hvdWxkIGJlIGEgc2VxdWVuY2Ugb2YgZGljdHMsIGVhY2ggaW5kaWNhdGluZyB0aGUgSUQgYW5kIG9wdGlvbnNcbiIKLSJmb3IgYSBzaW5nbGUgZmlsdGVyLlxuIgotIlxuIgotIkZvciBvbmUtc2hvdCBkZWNvbXByZXNzaW9uLCB1c2UgdGhlIGRlY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLlxuIik7Ci0KIHN0YXRpYyBQeVR5cGVPYmplY3QgRGVjb21wcmVzc29yX3R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9sem1hLkxaTUFEZWNvbXByZXNzb3IiLCAgICAgICAgICAgLyogdHBfbmFtZSAqLwpAQCAtMTA3Myw3ICsxMTY4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCi0gICAgRGVjb21wcmVzc29yX2RvYywgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTEwODgsNyArMTE4Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYylEZWNvbXByZXNzb3JfaW5pdCwgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICBfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fLCAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CkBAIC0xMDk2LDQ4ICsxMTkxLDQyIEBACiAKIC8qIE1vZHVsZS1sZXZlbCBmdW5jdGlvbnMuICovCiAKLVB5RG9jX1NUUlZBUihpc19jaGVja19zdXBwb3J0ZWRfZG9jLAotImlzX2NoZWNrX3N1cHBvcnRlZChjaGVja19pZCkgLT4gYm9vbFxuIgotIlxuIgotIlRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gaW50ZWdyaXR5IGNoZWNrIGlzIHN1cHBvcnRlZC5cbiIKLSJcbiIKLSJBbHdheXMgcmV0dXJucyBUcnVlIGZvciBDSEVDS19OT05FIGFuZCBDSEVDS19DUkMzMi5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2x6bWEuaXNfY2hlY2tfc3VwcG9ydGVkCisgICAgY2hlY2tfaWQ6IGludAorICAgIC8KKworVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlZ3JpdHkgY2hlY2sgaXMgc3VwcG9ydGVkLgorCitBbHdheXMgcmV0dXJucyBUcnVlIGZvciBDSEVDS19OT05FIGFuZCBDSEVDS19DUkMzMi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWlzX2NoZWNrX3N1cHBvcnRlZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgY2hlY2tfaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmI4MjhlOTBlMDBhZDk2ZSBpbnB1dD01NTE4Mjk3Yjk3YjIzMThmXSovCiB7Ci0gICAgaW50IGNoZWNrX2lkOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmlzX2NoZWNrX3N1cHBvcnRlZCIsICZjaGVja19pZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhsem1hX2NoZWNrX2lzX3N1cHBvcnRlZChjaGVja19pZCkpOwogfQogCiAKLVB5RG9jX1NUUlZBUihfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2RvYywKLSJfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGZpbHRlcikgLT4gYnl0ZXNcbiIKLSJcbiIKLSJSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXJcbiIKLSJzcGVjaWZpZWQgYnkgKmZpbHRlciogKGEgZGljdCkuXG4iCi0iXG4iCi0iVGhlIHJlc3VsdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmaWx0ZXIgSUQgaXRzZWxmLCBvbmx5IHRoZSBvcHRpb25zLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzCisgICAgZmlsdGVyOiBsem1hX2ZpbHRlcihjX2RlZmF1bHQ9IntMWk1BX1ZMSV9VTktOT1dOLCBOVUxMfSIpCisgICAgLworCitSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXIgc3BlY2lmaWVkIGJ5ICpmaWx0ZXIqIChhIGRpY3QpLgorCitUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX2ZpbHRlciBmaWx0ZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjVmZTY5MGFjZDZiNjFkMSBpbnB1dD1kNGM2NGYxYjU1N2M3N2Q0XSovCiB7Ci0gICAgUHlPYmplY3QgKmZpbHRlcnNwZWM7Ci0gICAgbHptYV9maWx0ZXIgZmlsdGVyOwogICAgIGx6bWFfcmV0IGx6cmV0OwogICAgIHVpbnQzMl90IGVuY29kZWRfc2l6ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwgJmZpbHRlcnNwZWMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChwYXJzZV9maWx0ZXJfc3BlYygmZmlsdGVyLCBmaWx0ZXJzcGVjKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGx6cmV0ID0gbHptYV9wcm9wZXJ0aWVzX3NpemUoJmVuY29kZWRfc2l6ZSwgJmZpbHRlcik7CiAgICAgaWYgKGNhdGNoX2x6bWFfZXJyb3IobHpyZXQpKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTE1MSwzNyArMTI0MCwzNiBAQAogICAgIGlmIChjYXRjaF9sem1hX2Vycm9yKGx6cmV0KSkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIFB5TWVtX0ZyZWUoZmlsdGVyLm9wdGlvbnMpOwogICAgIHJldHVybiByZXN1bHQ7CiAKIGVycm9yOgogICAgIFB5X1hERUNSRUYocmVzdWx0KTsKLSAgICBQeU1lbV9GcmVlKGZpbHRlci5vcHRpb25zKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAogCi1QeURvY19TVFJWQVIoX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19kb2MsCi0iX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhmaWx0ZXJfaWQsIGVuY29kZWRfcHJvcHMpIC0+IGRpY3RcbiIKLSJcbiIKLSJSZXR1cm4gYSBkaWN0IGRlc2NyaWJpbmcgYSBmaWx0ZXIgd2l0aCBJRCAqZmlsdGVyX2lkKiwgYW5kIG9wdGlvbnNcbiIKLSIocHJvcGVydGllcykgZGVjb2RlZCBmcm9tIHRoZSBieXRlcyBvYmplY3QgKmVuY29kZWRfcHJvcHMqLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzCisgICAgZmlsdGVyX2lkOiBsem1hX3ZsaQorICAgIGVuY29kZWRfcHJvcHM6IFB5X2J1ZmZlcgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGVuY29kaW5nIHRoZSBvcHRpb25zIChwcm9wZXJ0aWVzKSBvZiB0aGUgZmlsdGVyIHNwZWNpZmllZCBieSAqZmlsdGVyKiAoYSBkaWN0KS4KKworVGhlIHJlc3VsdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmaWx0ZXIgSUQgaXRzZWxmLCBvbmx5IHRoZSBvcHRpb25zLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgbHptYV92bGkgZmlsdGVyX2lkLCBQeV9idWZmZXIgKmVuY29kZWRfcHJvcHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjM1ZjdmNTM0NWQ0ODc0NCBpbnB1dD0yNDY0MTA4MDA3ODIxNjBjXSovCiB7Ci0gICAgUHlfYnVmZmVyIGVuY29kZWRfcHJvcHM7CiAgICAgbHptYV9maWx0ZXIgZmlsdGVyOwogICAgIGx6bWFfcmV0IGx6cmV0OwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnkqOl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsem1hX3ZsaV9jb252ZXJ0ZXIsICZmaWx0ZXIuaWQsICZlbmNvZGVkX3Byb3BzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZmlsdGVyLmlkID0gZmlsdGVyX2lkOwogCiAgICAgbHpyZXQgPSBsem1hX3Byb3BlcnRpZXNfZGVjb2RlKAotICAgICAgICAgICAgJmZpbHRlciwgTlVMTCwgZW5jb2RlZF9wcm9wcy5idWYsIGVuY29kZWRfcHJvcHMubGVuKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZlbmNvZGVkX3Byb3BzKTsKKyAgICAgICAgICAgICZmaWx0ZXIsIE5VTEwsIGVuY29kZWRfcHJvcHMtPmJ1ZiwgZW5jb2RlZF9wcm9wcy0+bGVuKTsKICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMTk3LDEyICsxMjg1LDkgQEAKIC8qIE1vZHVsZSBpbml0aWFsaXphdGlvbi4gKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIG1vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJpc19jaGVja19zdXBwb3J0ZWQiLCAoUHlDRnVuY3Rpb24paXNfY2hlY2tfc3VwcG9ydGVkLAotICAgICBNRVRIX1ZBUkFSR1MsIGlzX2NoZWNrX3N1cHBvcnRlZF9kb2N9LAotICAgIHsiX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLAotICAgICBNRVRIX1ZBUkFSR1MsIF9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfZG9jfSwKLSAgICB7Il9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLCAoUHlDRnVuY3Rpb24pX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcywKLSAgICAgTUVUSF9WQVJBUkdTLCBfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2RvY30sCisgICAgX0xaTUFfSVNfQ0hFQ0tfU1VQUE9SVEVEX01FVEhPRERFRgorICAgIF9MWk1BX19FTkNPREVfRklMVEVSX1BST1BFUlRJRVNfTUVUSE9EREVGCisgICAgX0xaTUFfX0RFQ09ERV9GSUxURVJfUFJPUEVSVElFU19NRVRIT0RERUYKICAgICB7TlVMTH0KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYwppbmRleCA5NDYwYzg5Li40YWU2MzhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCkBAIC0xMCwyNSArMTAsMjMgQEAKICNpbmNsdWRlICJtdWx0aXByb2Nlc3NpbmcuaCIKIAogCi1QeU9iamVjdCAqUHJvY2Vzc0Vycm9yLCAqQnVmZmVyVG9vU2hvcnQ7Ci0KIC8qCiAgKiBGdW5jdGlvbiB3aGljaCByYWlzZXMgZXhjZXB0aW9ucyBiYXNlZCBvbiBlcnJvciBjb2RlcwogICovCiAKIFB5T2JqZWN0ICoKLW1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKQorX1B5TXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pCiB7CiAgICAgc3dpdGNoIChudW0pIHsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgY2FzZSBNUF9TVEFOREFSRF9FUlJPUjoKICAgICAgICAgaWYgKFR5cGUgPT0gTlVMTCkKLSAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19XaW5kb3dzRXJyb3I7CisgICAgICAgICAgICBUeXBlID0gUHlFeGNfT1NFcnJvcjsKICAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoVHlwZSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTVBfU09DS0VUX0VSUk9SOgogICAgICAgICBpZiAoVHlwZSA9PSBOVUxMKQotICAgICAgICAgICAgVHlwZSA9IFB5RXhjX1dpbmRvd3NFcnJvcjsKKyAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19PU0Vycm9yOwogICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihUeXBlLCBXU0FHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UgLyogIU1TX1dJTkRPV1MgKi8KQEAgLTEwMSwxMyArOTksMTUgQEAKIHsKICAgICBIQU5ETEUgaGFuZGxlOwogICAgIFB5X2J1ZmZlciBidWY7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0LCBsZW5ndGg7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgInkqOnNlbmQiICwgJmhhbmRsZSwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbGVuZ3RoID0gKGludClQeV9NSU4oYnVmLmxlbiwgSU5UX01BWCk7CisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gc2VuZCgoU09DS0VUKSBoYW5kbGUsIGJ1Zi5idWYsIGJ1Zi5sZW4sIDApOworICAgIHJldCA9IHNlbmQoKFNPQ0tFVCkgaGFuZGxlLCBidWYuYnVmLCBsZW5ndGgsIDApOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwpAQCAtMTI4LDYgKzEyOCw5IEBACiAgICAgeyJyZWN2IiwgbXVsdGlwcm9jZXNzaW5nX3JlY3YsIE1FVEhfVkFSQVJHUywgIiJ9LAogICAgIHsic2VuZCIsIG11bHRpcHJvY2Vzc2luZ19zZW5kLCBNRVRIX1ZBUkFSR1MsICIifSwKICNlbmRpZgorI2lmbmRlZiBQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVECisgICAgeyJzZW1fdW5saW5rIiwgX1B5TXBfc2VtX3VubGluaywgTUVUSF9WQVJBUkdTLCAiIn0sCisjZW5kaWYKICAgICB7TlVMTH0KIH07CiAKQEAgLTE1OSwxOSArMTYyLDEyIEBACiAgICAgaWYgKCFtb2R1bGUpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogR2V0IGNvcHkgb2YgQnVmZmVyVG9vU2hvcnQgKi8KLSAgICB0ZW1wID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJtdWx0aXByb2Nlc3NpbmciKTsKLSAgICBpZiAoIXRlbXApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIEJ1ZmZlclRvb1Nob3J0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0ZW1wLCAiQnVmZmVyVG9vU2hvcnQiKTsKLSAgICBQeV9YREVDUkVGKHRlbXApOwotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIChkZWZpbmVkKEhBVkVfU0VNX09QRU4pICYmICFkZWZpbmVkKFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQpKQotICAgIC8qIEFkZCBTZW1Mb2NrIHR5cGUgdG8gbW9kdWxlICovCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmU2VtTG9ja1R5cGUpIDwgMCkKKyAgICAvKiBBZGQgX1B5TXBfU2VtTG9jayB0eXBlIHRvIG1vZHVsZSAqLworICAgIGlmIChQeVR5cGVfUmVhZHkoJl9QeU1wX1NlbUxvY2tUeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRigmU2VtTG9ja1R5cGUpOworICAgIFB5X0lOQ1JFRigmX1B5TXBfU2VtTG9ja1R5cGUpOwogICAgIHsKICAgICAgICAgUHlPYmplY3QgKnB5X3NlbV92YWx1ZV9tYXg7CiAgICAgICAgIC8qIFNvbWUgc3lzdGVtcyBkZWZpbmUgU0VNX1ZBTFVFX01BWCBhcyBhbiB1bnNpZ25lZCB2YWx1ZSB0aGF0CkBAIC0xODIsMTAgKzE3OCwxMCBAQAogICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCA9IFB5TG9uZ19Gcm9tTG9uZyhTRU1fVkFMVUVfTUFYKTsKICAgICAgICAgaWYgKHB5X3NlbV92YWx1ZV9tYXggPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhTZW1Mb2NrVHlwZS50cF9kaWN0LCAiU0VNX1ZBTFVFX01BWCIsCisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKF9QeU1wX1NlbUxvY2tUeXBlLnRwX2RpY3QsICJTRU1fVkFMVUVfTUFYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCk7CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsICJTZW1Mb2NrIiwgKFB5T2JqZWN0KikmU2VtTG9ja1R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsICJTZW1Mb2NrIiwgKFB5T2JqZWN0KikmX1B5TXBfU2VtTG9ja1R5cGUpOwogI2VuZGlmCiAKICAgICAvKiBBZGQgY29uZmlndXJhdGlvbiBtYWNyb3MgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaCBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaAppbmRleCBlM2RlOWJhLi45YWVlYThkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCkBAIC05MSwyMyArOTEsMTMgQEAKICNkZWZpbmUgTVBfU09DS0VUX0VSUk9SICgtMTAwMikKICNkZWZpbmUgTVBfRVhDRVBUSU9OX0hBU19CRUVOX1NFVCAoLTEwMDMpCiAKLVB5T2JqZWN0ICptcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSk7CitQeU9iamVjdCAqX1B5TXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pOwogCiAvKgogICogRXh0ZXJucyAtIG5vdCBhbGwgd2lsbCByZWFsbHkgZXhpc3Qgb24gYWxsIHBsYXRmb3JtcwogICovCiAKLWV4dGVybiBQeU9iamVjdCAqQnVmZmVyVG9vU2hvcnQ7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFNlbUxvY2tUeXBlOwotZXh0ZXJuIFB5VHlwZU9iamVjdCBQaXBlQ29ubmVjdGlvblR5cGU7Ci0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzCi0gKi8KLQotI2lmbmRlZiBNSU4KLSMgIGRlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/IHggOiB5KQotIyAgZGVmaW5lIE1BWCh4LCB5KSAoKHgpID4gKHkpID8geCA6IHkpCi0jZW5kaWYKK2V4dGVybiBQeVR5cGVPYmplY3QgX1B5TXBfU2VtTG9ja1R5cGU7CitleHRlcm4gUHlPYmplY3QgKl9QeU1wX3NlbV91bmxpbmsoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpOwogCiAjZW5kaWYgLyogTVVMVElQUk9DRVNTSU5HX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYwppbmRleCAyYzJiMDIwLi5kZTg1YTkwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgaW50IGNvdW50OwogICAgIGludCBtYXh2YWx1ZTsKICAgICBpbnQga2luZDsKKyAgICBjaGFyICpuYW1lOwogfSBTZW1Mb2NrT2JqZWN0OwogCiAjZGVmaW5lIElTTUlORShvKSAoby0+Y291bnQgPiAwICYmIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSA9PSBvLT5sYXN0X3RpZCkKQEAgLTQzLDcgKzQ0LDcgQEAKIHsKICAgICBsb25nIHByZXZpb3VzOwogCi0gICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0KGhhbmRsZSwgMCkpIHsKKyAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3RFeChoYW5kbGUsIDAsIEZBTFNFKSkgewogICAgIGNhc2UgV0FJVF9PQkpFQ1RfMDoKICAgICAgICAgaWYgKCFSZWxlYXNlU2VtYXBob3JlKGhhbmRsZSwgMSwgJnByZXZpb3VzKSkKICAgICAgICAgICAgIHJldHVybiBNUF9TVEFOREFSRF9FUlJPUjsKQEAgLTk5LDcgKzEwMCw3IEBACiAgICAgfQogCiAgICAgLyogY2hlY2sgd2hldGhlciB3ZSBjYW4gYWNxdWlyZSB3aXRob3V0IHJlbGVhc2luZyB0aGUgR0lMIGFuZCBibG9ja2luZyAqLwotICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHNlbGYtPmhhbmRsZSwgMCkgPT0gV0FJVF9PQkpFQ1RfMCkgeworICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoc2VsZi0+aGFuZGxlLCAwLCBGQUxTRSkgPT0gV0FJVF9PQkpFQ1RfMCkgewogICAgICAgICBzZWxmLT5sYXN0X3RpZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwogICAgICAgICArK3NlbGYtPmNvdW50OwogICAgICAgICBQeV9SRVRVUk5fVFJVRTsKQEAgLTExOCw3ICsxMTksNyBAQAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoc2lnaW50X2V2ZW50ICE9IE5VTEwpCiAgICAgICAgIFJlc2V0RXZlbnQoc2lnaW50X2V2ZW50KTsKLSAgICByZXMgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKG5oYW5kbGVzLCBoYW5kbGVzLCBGQUxTRSwgZnVsbF9tc2Vjcyk7CisgICAgcmVzID0gV2FpdEZvck11bHRpcGxlT2JqZWN0c0V4KG5oYW5kbGVzLCBoYW5kbGVzLCBGQUxTRSwgZnVsbF9tc2VjcywgRkFMU0UpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKiBoYW5kbGUgcmVzdWx0ICovCkBAIC0yMDAsNyArMjAxLDcgQEAKICNpZm5kZWYgSEFWRV9TRU1fVElNRURXQUlUCiAjICBkZWZpbmUgc2VtX3RpbWVkd2FpdChzZW0sZGVhZGxpbmUpIHNlbV90aW1lZHdhaXRfc2F2ZShzZW0sZGVhZGxpbmUsX3NhdmUpCiAKLWludAorc3RhdGljIGludAogc2VtX3RpbWVkd2FpdF9zYXZlKHNlbV90ICpzZW0sIHN0cnVjdCB0aW1lc3BlYyAqZGVhZGxpbmUsIFB5VGhyZWFkU3RhdGUgKl9zYXZlKQogewogICAgIGludCByZXM7CkBAIC0zOTcsNyArMzk4LDggQEAKICAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotbmV3c2VtbG9ja29iamVjdChQeVR5cGVPYmplY3QgKnR5cGUsIFNFTV9IQU5ETEUgaGFuZGxlLCBpbnQga2luZCwgaW50IG1heHZhbHVlKQorbmV3c2VtbG9ja29iamVjdChQeVR5cGVPYmplY3QgKnR5cGUsIFNFTV9IQU5ETEUgaGFuZGxlLCBpbnQga2luZCwgaW50IG1heHZhbHVlLAorICAgICAgICAgICAgICAgICBjaGFyICpuYW1lKQogewogICAgIFNlbUxvY2tPYmplY3QgKnNlbGY7CiAKQEAgLTQwOSwyMSArNDExLDIyIEBACiAgICAgc2VsZi0+Y291bnQgPSAwOwogICAgIHNlbGYtPmxhc3RfdGlkID0gMDsKICAgICBzZWxmLT5tYXh2YWx1ZSA9IG1heHZhbHVlOworICAgIHNlbGYtPm5hbWUgPSBuYW1lOwogICAgIHJldHVybiAoUHlPYmplY3QqKXNlbGY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZW1sb2NrX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBjaGFyIGJ1ZmZlclsyNTZdOwogICAgIFNFTV9IQU5ETEUgaGFuZGxlID0gU0VNX0ZBSUxFRDsKLSAgICBpbnQga2luZCwgbWF4dmFsdWUsIHZhbHVlOworICAgIGludCBraW5kLCBtYXh2YWx1ZSwgdmFsdWUsIHVubGluazsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2luZCIsICJ2YWx1ZSIsICJtYXh2YWx1ZSIsIE5VTEx9OwotICAgIHN0YXRpYyBpbnQgY291bnRlciA9IDA7CisgICAgY2hhciAqbmFtZSwgKm5hbWVfY29weSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJraW5kIiwgInZhbHVlIiwgIm1heHZhbHVlIiwgIm5hbWUiLCAidW5saW5rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiaWlpIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZraW5kLCAmdmFsdWUsICZtYXh2YWx1ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImlpaXNpIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZraW5kLCAmdmFsdWUsICZtYXh2YWx1ZSwgJm5hbWUsICZ1bmxpbmspKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChraW5kICE9IFJFQ1VSU0lWRV9NVVRFWCAmJiBraW5kICE9IFNFTUFQSE9SRSkgewpAQCAtNDMxLDE4ICs0MzQsMjMgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUHlPU19zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiL21wJWxkLSVkIiwgKGxvbmcpZ2V0cGlkKCksIGNvdW50ZXIrKyk7CisgICAgaWYgKCF1bmxpbmspIHsKKyAgICAgICAgbmFtZV9jb3B5ID0gUHlNZW1fTWFsbG9jKHN0cmxlbihuYW1lKSArIDEpOworICAgICAgICBpZiAobmFtZV9jb3B5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgIHN0cmNweShuYW1lX2NvcHksIG5hbWUpOworICAgIH0KIAogICAgIFNFTV9DTEVBUl9FUlJPUigpOwotICAgIGhhbmRsZSA9IFNFTV9DUkVBVEUoYnVmZmVyLCB2YWx1ZSwgbWF4dmFsdWUpOworICAgIGhhbmRsZSA9IFNFTV9DUkVBVEUobmFtZSwgdmFsdWUsIG1heHZhbHVlKTsKICAgICAvKiBPbiBXaW5kb3dzIHdlIHNob3VsZCBmYWlsIGlmIEdldExhc3RFcnJvcigpPT1FUlJPUl9BTFJFQURZX0VYSVNUUyAqLwogICAgIGlmIChoYW5kbGUgPT0gU0VNX0ZBSUxFRCB8fCBTRU1fR0VUX0xBU1RfRVJST1IoKSAhPSAwKQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKLSAgICBpZiAoU0VNX1VOTElOSyhidWZmZXIpIDwgMCkKKyAgICBpZiAodW5saW5rICYmIFNFTV9VTkxJTksobmFtZSkgPCAwKQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKLSAgICByZXN1bHQgPSBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUpOworICAgIHJlc3VsdCA9IG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSwgbmFtZV9jb3B5KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgZ290byBmYWlsdXJlOwogCkBAIC00NTEsNyArNDU5LDggQEAKICAgZmFpbHVyZToKICAgICBpZiAoaGFuZGxlICE9IFNFTV9GQUlMRUQpCiAgICAgICAgIFNFTV9DTE9TRShoYW5kbGUpOwotICAgIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICBQeU1lbV9GcmVlKG5hbWVfY29weSk7CisgICAgX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00NjAsMTIgKzQ2OSwzMCBAQAogewogICAgIFNFTV9IQU5ETEUgaGFuZGxlOwogICAgIGludCBraW5kLCBtYXh2YWx1ZTsKKyAgICBjaGFyICpuYW1lLCAqbmFtZV9jb3B5ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX1NFTV9IQU5ETEUgImlpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmtpbmQsICZtYXh2YWx1ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfU0VNX0hBTkRMRSAiaWl6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmtpbmQsICZtYXh2YWx1ZSwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUpOworICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgbmFtZV9jb3B5ID0gUHlNZW1fTWFsbG9jKHN0cmxlbihuYW1lKSArIDEpOworICAgICAgICBpZiAobmFtZV9jb3B5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgc3RyY3B5KG5hbWVfY29weSwgbmFtZSk7CisgICAgfQorCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAobmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGhhbmRsZSA9IHNlbV9vcGVuKG5hbWUsIDApOworICAgICAgICBpZiAoaGFuZGxlID09IFNFTV9GQUlMRUQpIHsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUobmFtZV9jb3B5KTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUsIG5hbWVfY29weSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00NzMsNiArNTAwLDcgQEAKIHsKICAgICBpZiAoc2VsZi0+aGFuZGxlICE9IFNFTV9GQUlMRUQpCiAgICAgICAgIFNFTV9DTE9TRShzZWxmLT5oYW5kbGUpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+bmFtZSk7CiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCkBAIC00OTgsNyArNTI2LDcgQEAKICNlbHNlCiAgICAgaW50IHN2YWw7CiAgICAgaWYgKFNFTV9HRVRWQUxVRShzZWxmLT5oYW5kbGUsICZzdmFsKSA8IDApCi0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgLyogc29tZSBwb3NpeCBpbXBsZW1lbnRhdGlvbnMgdXNlIG5lZ2F0aXZlIG51bWJlcnMgdG8gaW5kaWNhdGUKICAgICAgICB0aGUgbnVtYmVyIG9mIHdhaXRpbmcgdGhyZWFkcyAqLwogICAgIGlmIChzdmFsIDwgMCkKQEAgLTUxNCwxNiArNTQyLDE2IEBACiAgICAgaWYgKHNlbV90cnl3YWl0KHNlbGYtPmhhbmRsZSkgPCAwKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCiAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2VtX3Bvc3Qoc2VsZi0+aGFuZGxlKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogICAgIH0KICNlbHNlCiAgICAgaW50IHN2YWw7CiAgICAgaWYgKFNFTV9HRVRWQUxVRShzZWxmLT5oYW5kbGUsICZzdmFsKSA8IDApCi0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygobG9uZylzdmFsID09IDApOwogI2VuZGlmCiB9CkBAIC01NzQsNiArNjAyLDggQEAKICAgICAgIiJ9LAogICAgIHsibWF4dmFsdWUiLCBUX0lOVCwgb2Zmc2V0b2YoU2VtTG9ja09iamVjdCwgbWF4dmFsdWUpLCBSRUFET05MWSwKICAgICAgIiJ9LAorICAgIHsibmFtZSIsIFRfU1RSSU5HLCBvZmZzZXRvZihTZW1Mb2NrT2JqZWN0LCBuYW1lKSwgUkVBRE9OTFksCisgICAgICIifSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTU4MSw3ICs2MTEsNyBAQAogICogU2VtYXBob3JlIHR5cGUKICAqLwogCi1QeVR5cGVPYmplY3QgU2VtTG9ja1R5cGUgPSB7CitQeVR5cGVPYmplY3QgX1B5TXBfU2VtTG9ja1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgLyogdHBfbmFtZSAgICAgICAgICAgKi8gIl9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jayIsCiAgICAgLyogdHBfYmFzaWNzaXplICAgICAgKi8gc2l6ZW9mKFNlbUxvY2tPYmplY3QpLApAQCAtNjIxLDMgKzY1MSwyMyBAQAogICAgIC8qIHRwX2FsbG9jICAgICAgICAgICovIDAsCiAgICAgLyogdHBfbmV3ICAgICAgICAgICAgKi8gc2VtbG9ja19uZXcsCiB9OworCisvKgorICogRnVuY3Rpb24gdG8gdW5saW5rIHNlbWFwaG9yZSBuYW1lcworICovCisKK1B5T2JqZWN0ICoKK19QeU1wX3NlbV91bmxpbmsoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoU0VNX1VOTElOSyhuYW1lKSA8IDApIHsKKyAgICAgICAgX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX29wY29kZS5jIGIvTW9kdWxlcy9fb3Bjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlMzg4ZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX29wY29kZS5jCkBAIC0wLDAgKzEsMTA5IEBACisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAib3Bjb2RlLmgiCisKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfb3Bjb2RlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0xMTc0NDJlNjZlYjM3NmU2XSovCisKKy8qW2NsaW5pYyBpbnB1dF0KKworX29wY29kZS5zdGFja19lZmZlY3QgLT4gaW50CisKKyAgb3Bjb2RlOiBpbnQKKyAgb3Bhcmc6IG9iamVjdCA9IE5vbmUKKyAgLworCitDb21wdXRlIHRoZSBzdGFjayBlZmZlY3Qgb2YgdGhlIG9wY29kZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9vcGNvZGVfc3RhY2tfZWZmZWN0X19kb2NfXywKKyJzdGFja19lZmZlY3QoJG1vZHVsZSwgb3Bjb2RlLCBvcGFyZz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29tcHV0ZSB0aGUgc3RhY2sgZWZmZWN0IG9mIHRoZSBvcGNvZGUuIik7CisKKyNkZWZpbmUgX09QQ09ERV9TVEFDS19FRkZFQ1RfTUVUSE9EREVGICAgIFwKKyAgICB7InN0YWNrX2VmZmVjdCIsIChQeUNGdW5jdGlvbilfb3Bjb2RlX3N0YWNrX2VmZmVjdCwgTUVUSF9WQVJBUkdTLCBfb3Bjb2RlX3N0YWNrX2VmZmVjdF9fZG9jX199LAorCitzdGF0aWMgaW50Citfb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpvcGFyZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfb3Bjb2RlX3N0YWNrX2VmZmVjdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgb3Bjb2RlOworICAgIFB5T2JqZWN0ICpvcGFyZyA9IFB5X05vbmU7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIml8TzpzdGFja19lZmZlY3QiLAorICAgICAgICAmb3Bjb2RlLCAmb3BhcmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IF9vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwobW9kdWxlLCBvcGNvZGUsIG9wYXJnKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIGludAorX29wY29kZV9zdGFja19lZmZlY3RfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgb3Bjb2RlLCBQeU9iamVjdCAqb3BhcmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWUxMTMzZjhkNTg3YmM2NyBpbnB1dD0yZDBhOWVlNTNjMDQxOGY1XSovCit7CisgICAgaW50IGVmZmVjdDsKKyAgICBpbnQgb3BhcmdfaW50ID0gMDsKKyAgICBpZiAoSEFTX0FSRyhvcGNvZGUpKSB7CisgICAgICAgIGlmIChvcGFyZyA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgInN0YWNrX2VmZmVjdDogb3Bjb2RlIHJlcXVpcmVzIG9wYXJnIGJ1dCBvcGFyZyB3YXMgbm90IHNwZWNpZmllZCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG9wYXJnX2ludCA9IChpbnQpUHlMb25nX0FzTG9uZyhvcGFyZyk7CisgICAgICAgIGlmICgob3BhcmdfaW50ID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIGlmIChvcGFyZyAhPSBQeV9Ob25lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJzdGFja19lZmZlY3Q6IG9wY29kZSBkb2VzIG5vdCBwZXJtaXQgb3BhcmcgYnV0IG9wYXJnIHdhcyBzcGVjaWZpZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlZmZlY3QgPSBQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3Qob3Bjb2RlLCBvcGFyZ19pbnQpOworICAgIGlmIChlZmZlY3QgPT0gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1QpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBvcGNvZGUgb3Igb3BhcmciKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIGVmZmVjdDsKK30KKworCisKKworc3RhdGljIFB5TWV0aG9kRGVmCitvcGNvZGVfZnVuY3Rpb25zW10gPSAgeworICAgIF9PUENPREVfU1RBQ0tfRUZGRUNUX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMLCAwLCBOVUxMfQorfTsKKworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG9wY29kZW1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl9vcGNvZGUiLAorICAgICJPcGNvZGUgc3VwcG9ydCBtb2R1bGUuIiwKKyAgICAtMSwKKyAgICBvcGNvZGVfZnVuY3Rpb25zLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX29wY29kZSh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJm9wY29kZW1vZHVsZSk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL29wZXJhdG9yLmMgYi9Nb2R1bGVzL19vcGVyYXRvci5jCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIE1vZHVsZXMvb3BlcmF0b3IuYwpyZW5hbWUgdG8gTW9kdWxlcy9fb3BlcmF0b3IuYwppbmRleCA1MTU2YjZiLi5hZGViOTllIDEwMDY0NAotLS0gYS9Nb2R1bGVzL29wZXJhdG9yLmMKKysrIGIvTW9kdWxlcy9fb3BlcmF0b3IuYwpAQCAtMjA4LDYgKzIwOCwzMSBAQAogICAgIHJldHVybiAocmVzdWx0ID09IDApOwogfQogCitQeURvY19TVFJWQVIobGVuZ3RoX2hpbnRfX2RvY19fLAorImxlbmd0aF9oaW50KG9iaiwgZGVmYXVsdD0wKSAtPiBpbnRcbiIKKyJSZXR1cm4gYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBvYmouXG4iCisiVGhpcyBpcyB1c2VmdWwgZm9yIHByZXNpemluZyBjb250YWluZXJzIHdoZW4gYnVpbGRpbmcgZnJvbSBhblxuIgorIml0ZXJhYmxlLlxuIgorIlxuIgorIklmIHRoZSBvYmplY3Qgc3VwcG9ydHMgbGVuKCksIHRoZSByZXN1bHQgd2lsbCBiZVxuIgorImV4YWN0LiBPdGhlcndpc2UsIGl0IG1heSBvdmVyLSBvciB1bmRlci1lc3RpbWF0ZSBieSBhblxuIgorImFyYml0cmFyeSBhbW91bnQuIFRoZSByZXN1bHQgd2lsbCBiZSBhbiBpbnRlZ2VyID49IDAuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqbGVuZ3RoX2hpbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUgPSAwLCByZXM7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46bGVuZ3RoX2hpbnQiLCAmb2JqLCAmZGVmYXVsdHZhbHVlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzID0gUHlPYmplY3RfTGVuZ3RoSGludChvYmosIGRlZmF1bHR2YWx1ZSk7CisgICAgaWYgKHJlcyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKKwogUHlEb2NfU1RSVkFSKGNvbXBhcmVfZGlnZXN0X19kb2NfXywKICJjb21wYXJlX2RpZ2VzdChhLCBiKSAtPiBib29sXG4iCiAiXG4iCkBAIC0yNTIsNyArMjc3LDcgQEAKICAgICAgICAgUHlfYnVmZmVyIHZpZXdfYTsKICAgICAgICAgUHlfYnVmZmVyIHZpZXdfYjsKIAotICAgICAgICBpZiAoKFB5T2JqZWN0X0NoZWNrQnVmZmVyKGEpID09IDApICYgKFB5T2JqZWN0X0NoZWNrQnVmZmVyKGIpID09IDApKSB7CisgICAgICAgIGlmIChQeU9iamVjdF9DaGVja0J1ZmZlcihhKSA9PSAwICYmIFB5T2JqZWN0X0NoZWNrQnVmZmVyKGIpID09IDApIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZXMocykgb3IgY29tYmluYXRpb24gb2YgdHlwZXM6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAiJyUuMTAwcycgYW5kICclLjEwMHMnIiwKQEAgLTI5NywxNyArMzIyLDE1IEBACiAvKiBvcGVyYXRvciBtZXRob2RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgc3BhbTEoT1AsRE9DKSB7I09QLCBPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sCi0jZGVmaW5lIHNwYW0yKE9QLEFMVE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsjQUxUT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAorI2RlZmluZSBzcGFtMihPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAogI2RlZmluZSBzcGFtMW8oT1AsRE9DKSB7I09QLCBPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCi0jZGVmaW5lIHNwYW0ybyhPUCxBTFRPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB7I0FMVE9QLCBvcF8jI09QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwKKyNkZWZpbmUgc3BhbTJvKE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgb3BlcmF0b3JfbWV0aG9kc1tdID0gewogCiBzcGFtMW8odHJ1dGgsCiAgInRydXRoKGEpIC0tIFJldHVybiBUcnVlIGlmIGEgaXMgdHJ1ZSwgRmFsc2Ugb3RoZXJ3aXNlLiIpCi1zcGFtMihjb250YWlucyxfX2NvbnRhaW5zX18sCitzcGFtMihjb250YWlucywKICAiY29udGFpbnMoYSwgYikgLS0gU2FtZSBhcyBiIGluIGEgKG5vdGUgcmV2ZXJzZWQgb3BlcmFuZHMpLiIpCiBzcGFtMShpbmRleE9mLAogICJpbmRleE9mKGEsIGIpIC0tIFJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIpCkBAIC0zMTYsNTYgKzMzOSw1OCBAQAogCiBzcGFtMShpc18sICJpc18oYSwgYikgLS0gU2FtZSBhcyBhIGlzIGIuIikKIHNwYW0xKGlzX25vdCwgImlzX25vdChhLCBiKSAtLSBTYW1lIGFzIGEgaXMgbm90IGIuIikKLXNwYW0ybyhpbmRleCwgX19pbmRleF9fLCAiaW5kZXgoYSkgLS0gU2FtZSBhcyBhLl9faW5kZXhfXygpIikKLXNwYW0yKGFkZCxfX2FkZF9fLCAiYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArIGIuIikKLXNwYW0yKHN1YixfX3N1Yl9fLCAic3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtIGIuIikKLXNwYW0yKG11bCxfX211bF9fLCAibXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqIGIuIikKLXNwYW0yKGZsb29yZGl2LF9fZmxvb3JkaXZfXywgImZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLyBiLiIpCi1zcGFtMih0cnVlZGl2LF9fdHJ1ZWRpdl9fLCAidHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLyBiLiIpCi1zcGFtMihtb2QsX19tb2RfXywgIm1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJSBiLiIpCi1zcGFtMm8obmVnLF9fbmVnX18sICJuZWcoYSkgLS0gU2FtZSBhcyAtYS4iKQotc3BhbTJvKHBvcyxfX3Bvc19fLCAicG9zKGEpIC0tIFNhbWUgYXMgK2EuIikKLXNwYW0ybyhhYnMsX19hYnNfXywgImFicyhhKSAtLSBTYW1lIGFzIGFicyhhKS4iKQotc3BhbTJvKGludixfX2ludl9fLCAiaW52KGEpIC0tIFNhbWUgYXMgfmEuIikKLXNwYW0ybyhpbnZlcnQsX19pbnZlcnRfXywgImludmVydChhKSAtLSBTYW1lIGFzIH5hLiIpCi1zcGFtMihsc2hpZnQsX19sc2hpZnRfXywgImxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDwgYi4iKQotc3BhbTIocnNoaWZ0LF9fcnNoaWZ0X18sICJyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+IGIuIikKLXNwYW0ybyhub3RfLF9fbm90X18sICJub3RfKGEpIC0tIFNhbWUgYXMgbm90IGEuIikKLXNwYW0yKGFuZF8sX19hbmRfXywgImFuZF8oYSwgYikgLS0gU2FtZSBhcyBhICYgYi4iKQotc3BhbTIoeG9yLF9feG9yX18sICJ4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF4gYi4iKQotc3BhbTIob3JfLF9fb3JfXywgIm9yXyhhLCBiKSAtLSBTYW1lIGFzIGEgfCBiLiIpCi1zcGFtMihpYWRkLF9faWFkZF9fLCAiYSA9IGlhZGQoYSwgYikgLS0gU2FtZSBhcyBhICs9IGIuIikKLXNwYW0yKGlzdWIsX19pc3ViX18sICJhID0gaXN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLT0gYi4iKQotc3BhbTIoaW11bCxfX2ltdWxfXywgImEgPSBpbXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqPSBiLiIpCi1zcGFtMihpZmxvb3JkaXYsX19pZmxvb3JkaXZfXywgImEgPSBpZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vPSBiLiIpCi1zcGFtMihpdHJ1ZWRpdixfX2l0cnVlZGl2X18sICJhID0gaXRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC89IGIiKQotc3BhbTIoaW1vZCxfX2ltb2RfXywgImEgPSBpbW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlPSBiLiIpCi1zcGFtMihpbHNoaWZ0LF9faWxzaGlmdF9fLCAiYSA9IGlsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8PSBiLiIpCi1zcGFtMihpcnNoaWZ0LF9faXJzaGlmdF9fLCAiYSA9IGlyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+PSBiLiIpCi1zcGFtMihpYW5kLF9faWFuZF9fLCAiYSA9IGlhbmQoYSwgYikgLS0gU2FtZSBhcyBhICY9IGIuIikKLXNwYW0yKGl4b3IsX19peG9yX18sICJhID0gaXhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXj0gYi4iKQotc3BhbTIoaW9yLF9faW9yX18sICJhID0gaW9yKGEsIGIpIC0tIFNhbWUgYXMgYSB8PSBiLiIpCi1zcGFtMihjb25jYXQsX19jb25jYXRfXywKK3NwYW0ybyhpbmRleCwgImluZGV4KGEpIC0tIFNhbWUgYXMgYS5fX2luZGV4X18oKSIpCitzcGFtMihhZGQsICJhZGQoYSwgYikgLS0gU2FtZSBhcyBhICsgYi4iKQorc3BhbTIoc3ViLCAic3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtIGIuIikKK3NwYW0yKG11bCwgIm11bChhLCBiKSAtLSBTYW1lIGFzIGEgKiBiLiIpCitzcGFtMihmbG9vcmRpdiwgImZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLyBiLiIpCitzcGFtMih0cnVlZGl2LCAidHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLyBiLiIpCitzcGFtMihtb2QsICJtb2QoYSwgYikgLS0gU2FtZSBhcyBhICUgYi4iKQorc3BhbTJvKG5lZywgIm5lZyhhKSAtLSBTYW1lIGFzIC1hLiIpCitzcGFtMm8ocG9zLCAicG9zKGEpIC0tIFNhbWUgYXMgK2EuIikKK3NwYW0ybyhhYnMsICJhYnMoYSkgLS0gU2FtZSBhcyBhYnMoYSkuIikKK3NwYW0ybyhpbnYsICJpbnYoYSkgLS0gU2FtZSBhcyB+YS4iKQorc3BhbTJvKGludmVydCwgImludmVydChhKSAtLSBTYW1lIGFzIH5hLiIpCitzcGFtMihsc2hpZnQsICJsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8IGIuIikKK3NwYW0yKHJzaGlmdCwgInJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj4gYi4iKQorc3BhbTJvKG5vdF8sICJub3RfKGEpIC0tIFNhbWUgYXMgbm90IGEuIikKK3NwYW0yKGFuZF8sICJhbmRfKGEsIGIpIC0tIFNhbWUgYXMgYSAmIGIuIikKK3NwYW0yKHhvciwgInhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXiBiLiIpCitzcGFtMihvcl8sICJvcl8oYSwgYikgLS0gU2FtZSBhcyBhIHwgYi4iKQorc3BhbTIoaWFkZCwgImEgPSBpYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLiIpCitzcGFtMihpc3ViLCAiYSA9IGlzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC09IGIuIikKK3NwYW0yKGltdWwsICJhID0gaW11bChhLCBiKSAtLSBTYW1lIGFzIGEgKj0gYi4iKQorc3BhbTIoaWZsb29yZGl2LCAiYSA9IGlmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy89IGIuIikKK3NwYW0yKGl0cnVlZGl2LCAiYSA9IGl0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvPSBiIikKK3NwYW0yKGltb2QsICJhID0gaW1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJT0gYi4iKQorc3BhbTIoaWxzaGlmdCwgImEgPSBpbHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PD0gYi4iKQorc3BhbTIoaXJzaGlmdCwgImEgPSBpcnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+Pj0gYi4iKQorc3BhbTIoaWFuZCwgImEgPSBpYW5kKGEsIGIpIC0tIFNhbWUgYXMgYSAmPSBiLiIpCitzcGFtMihpeG9yLCAiYSA9IGl4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF49IGIuIikKK3NwYW0yKGlvciwgImEgPSBpb3IoYSwgYikgLS0gU2FtZSBhcyBhIHw9IGIuIikKK3NwYW0yKGNvbmNhdCwKICAiY29uY2F0KGEsIGIpIC0tIFNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iKQotc3BhbTIoaWNvbmNhdCxfX2ljb25jYXRfXywKK3NwYW0yKGljb25jYXQsCiAgImEgPSBpY29uY2F0KGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIikKLXNwYW0yKGdldGl0ZW0sX19nZXRpdGVtX18sCitzcGFtMihnZXRpdGVtLAogICJnZXRpdGVtKGEsIGIpIC0tIFNhbWUgYXMgYVtiXS4iKQotc3BhbTIoc2V0aXRlbSxfX3NldGl0ZW1fXywKK3NwYW0yKHNldGl0ZW0sCiAgInNldGl0ZW0oYSwgYiwgYykgLS0gU2FtZSBhcyBhW2JdID0gYy4iKQotc3BhbTIoZGVsaXRlbSxfX2RlbGl0ZW1fXywKK3NwYW0yKGRlbGl0ZW0sCiAgImRlbGl0ZW0oYSwgYikgLS0gU2FtZSBhcyBkZWwgYVtiXS4iKQotc3BhbTIocG93LF9fcG93X18sICJwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqIGIuIikKLXNwYW0yKGlwb3csX19pcG93X18sICJhID0gaXBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKio9IGIuIikKLXNwYW0yKGx0LF9fbHRfXywgImx0KGEsIGIpIC0tIFNhbWUgYXMgYTxiLiIpCi1zcGFtMihsZSxfX2xlX18sICJsZShhLCBiKSAtLSBTYW1lIGFzIGE8PWIuIikKLXNwYW0yKGVxLF9fZXFfXywgImVxKGEsIGIpIC0tIFNhbWUgYXMgYT09Yi4iKQotc3BhbTIobmUsX19uZV9fLCAibmUoYSwgYikgLS0gU2FtZSBhcyBhIT1iLiIpCi1zcGFtMihndCxfX2d0X18sICJndChhLCBiKSAtLSBTYW1lIGFzIGE+Yi4iKQotc3BhbTIoZ2UsX19nZV9fLCAiZ2UoYSwgYikgLS0gU2FtZSBhcyBhPj1iLiIpCitzcGFtMihwb3csICJwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqIGIuIikKK3NwYW0yKGlwb3csICJhID0gaXBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKio9IGIuIikKK3NwYW0yKGx0LCAibHQoYSwgYikgLS0gU2FtZSBhcyBhPGIuIikKK3NwYW0yKGxlLCAibGUoYSwgYikgLS0gU2FtZSBhcyBhPD1iLiIpCitzcGFtMihlcSwgImVxKGEsIGIpIC0tIFNhbWUgYXMgYT09Yi4iKQorc3BhbTIobmUsICJuZShhLCBiKSAtLSBTYW1lIGFzIGEhPWIuIikKK3NwYW0yKGd0LCAiZ3QoYSwgYikgLS0gU2FtZSBhcyBhPmIuIikKK3NwYW0yKGdlLCAiZ2UoYSwgYikgLS0gU2FtZSBhcyBhPj1iLiIpCiAKICAgICB7Il9jb21wYXJlX2RpZ2VzdCIsIChQeUNGdW5jdGlvbiljb21wYXJlX2RpZ2VzdCwgTUVUSF9WQVJBUkdTLAogICAgICBjb21wYXJlX2RpZ2VzdF9fZG9jX199LAorICAgICB7Imxlbmd0aF9oaW50IiwgKFB5Q0Z1bmN0aW9uKWxlbmd0aF9oaW50LCBNRVRIX1ZBUkFSR1MsCisgICAgIGxlbmd0aF9oaW50X19kb2NfX30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIAogfTsKQEAgLTg5MiwxMiArOTE3LDEyIEBACiB9OwogCiAKLS8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF9vcGVyYXRvcikgKi8KKy8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF9fb3BlcmF0b3IpICovCiAKIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBvcGVyYXRvcm1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgIm9wZXJhdG9yIiwKKyAgICAiX29wZXJhdG9yIiwKICAgICBvcGVyYXRvcl9kb2MsCiAgICAgLTEsCiAgICAgb3BlcmF0b3JfbWV0aG9kcywKQEAgLTkwOCw3ICs5MzMsNyBAQAogfTsKIAogUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9vcGVyYXRvcih2b2lkKQorUHlJbml0X19vcGVyYXRvcih2b2lkKQogewogICAgIFB5T2JqZWN0ICptOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19waWNrbGUuYyBiL01vZHVsZXMvX3BpY2tsZS5jCmluZGV4IGFlODAxZjcuLjdmYWY5NmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3BpY2tsZS5jCisrKyBiL01vZHVsZXMvX3BpY2tsZS5jCkBAIC00LDkgKzQsMTkgQEAKIFB5RG9jX1NUUlZBUihwaWNrbGVfbW9kdWxlX2RvYywKICJPcHRpbWl6ZWQgQyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBwaWNrbGUgbW9kdWxlLiIpOwogCisvKltjbGluaWMgaW5wdXRdCitvdXRwdXQgcHJlc2V0IGZpbGUKK21vZHVsZSBfcGlja2xlCitjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCitjbGFzcyBfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkgIlBpY2tsZXJNZW1vUHJveHlPYmplY3QgKiIgIiZQaWNrbGVyTWVtb1Byb3h5VHlwZSIKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyICJVbnBpY2tsZXJPYmplY3QgKiIgIiZVbnBpY2tsZXJfVHlwZSIKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5ICJVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKiIgIiZVbnBpY2tsZXJNZW1vUHJveHlUeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MTFjNDUyNDhhNDFkZDNmY10qLworCiAvKiBCdW1wIHRoaXMgd2hlbiBuZXcgb3Bjb2RlcyBhcmUgYWRkZWQgdG8gdGhlIHBpY2tsZSBwcm90b2NvbC4gKi8KIGVudW0gewotICAgIEhJR0hFU1RfUFJPVE9DT0wgPSAzLAorICAgIEhJR0hFU1RfUFJPVE9DT0wgPSA0LAogICAgIERFRkFVTFRfUFJPVE9DT0wgPSAzCiB9OwogCkBAIC03MSwxOCArODEsMjAgQEAKIAogICAgIC8qIFByb3RvY29sIDMgKFB5dGhvbiAzLngpICovCiAgICAgQklOQllURVMgICAgICAgPSAnQicsCi0gICAgU0hPUlRfQklOQllURVMgPSAnQycKLX07CisgICAgU0hPUlRfQklOQllURVMgPSAnQycsCiAKLS8qIFRoZXNlIGFyZW4ndCBvcGNvZGVzIC0tIHRoZXkncmUgd2F5cyB0byBwaWNrbGUgYm9vbHMgYmVmb3JlIHByb3RvY29sIDIKLSAqIHNvIHRoYXQgdW5waWNrbGVycyB3cml0dGVuIGJlZm9yZSBib29scyB3ZXJlIGludHJvZHVjZWQgdW5waWNrbGUgdGhlbQotICogYXMgaW50cywgYnV0IHVucGlja2xlcnMgYWZ0ZXIgY2FuIHJlY29nbml6ZSB0aGF0IGJvb2xzIHdlcmUgaW50ZW5kZWQuCi0gKiBOb3RlIHRoYXQgcHJvdG9jb2wgMiBhZGRlZCBkaXJlY3Qgd2F5cyB0byBwaWNrbGUgYm9vbHMuCi0gKi8KLSN1bmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgICJJMDFcbiIKLSN1bmRlZiBGQUxTRQotI2RlZmluZSBGQUxTRSAiSTAwXG4iCisgICAgLyogUHJvdG9jb2wgNCAqLworICAgIFNIT1JUX0JJTlVOSUNPREUgPSAnXHg4YycsCisgICAgQklOVU5JQ09ERTggICAgICA9ICdceDhkJywKKyAgICBCSU5CWVRFUzggICAgICAgID0gJ1x4OGUnLAorICAgIEVNUFRZX1NFVCAgICAgICAgPSAnXHg4ZicsCisgICAgQURESVRFTVMgICAgICAgICA9ICdceDkwJywKKyAgICBGUk9aRU5TRVQgICAgICAgID0gJ1x4OTEnLAorICAgIE5FV09CSl9FWCAgICAgICAgPSAnXHg5MicsCisgICAgU1RBQ0tfR0xPQkFMICAgICA9ICdceDkzJywKKyAgICBNRU1PSVpFICAgICAgICAgID0gJ1x4OTQnLAorICAgIEZSQU1FICAgICAgICAgICAgPSAnXHg5NScKK307CiAKIGVudW0gewogICAgLyogS2VlcCBpbiBzeW5jaCB3aXRoIHBpY2tsZS5QaWNrbGVyLl9CQVRDSFNJWkUuICBUaGlzIGlzIGhvdyBtYW55IGVsZW1lbnRzCkBAIC05OCw0OCArMTEwLDI0NiBAQAogICAgIC8qIEluaXRpYWwgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyIG9mIFBpY2tsZXIuICovCiAgICAgV1JJVEVfQlVGX1NJWkUgPSA0MDk2LAogCi0gICAgLyogTWF4aW11bSBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIgb2YgUGlja2xlciB3aGVuIHBpY2tsaW5nIHRvIGEKLSAgICAgICBzdHJlYW0uICBUaGlzIGlzIGlnbm9yZWQgZm9yIGluLW1lbW9yeSBwaWNrbGluZy4gKi8KLSAgICBNQVhfV1JJVEVfQlVGX1NJWkUgPSA2NCAqIDEwMjQsCi0KICAgICAvKiBQcmVmZXRjaCBzaXplIHdoZW4gdW5waWNrbGluZyAoZGlzYWJsZWQgb24gdW5wZWVrYWJsZSBzdHJlYW1zKSAqLwotICAgIFBSRUZFVENIID0gODE5MiAqIDE2CisgICAgUFJFRkVUQ0ggPSA4MTkyICogMTYsCisKKyAgICBGUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNCwKKworICAgIEZSQU1FX0hFQURFUl9TSVpFID0gOQogfTsKIAotLyogRXhjZXB0aW9uIGNsYXNzZXMgZm9yIHBpY2tsZS4gVGhlc2Ugc2hvdWxkIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4KLSAgIHBpY2tsZS5weSwgd2hlbiB0aGUgQy1vcHRpbWl6ZWQgUGlja2xlciBhbmQgVW5waWNrbGVyIGFyZSB1c2VkLiAqLwotc3RhdGljIFB5T2JqZWN0ICpQaWNrbGVFcnJvciA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKlBpY2tsaW5nRXJyb3IgPSBOVUxMOwotc3RhdGljIFB5T2JqZWN0ICpVbnBpY2tsaW5nRXJyb3IgPSBOVUxMOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUsIHt0eXBlX29iamVjdDogcGlja2xpbmdfZnVuY3Rpb259ICovCi1zdGF0aWMgUHlPYmplY3QgKmRpc3BhdGNoX3RhYmxlID0gTlVMTDsKLS8qIEZvciBFWFRbMTI0XSBvcGNvZGVzLiAqLwotLyogY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LCB7KG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKTogY29kZX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gTlVMTDsKLS8qIGNvcHlyZWcuX2ludmVydGVkX3JlZ2lzdHJ5LCB7Y29kZTogKG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqaW52ZXJ0ZWRfcmVnaXN0cnkgPSBOVUxMOwotLyogY29weXJlZy5fZXh0ZW5zaW9uX2NhY2hlLCB7Y29kZTogb2JqZWN0fSAqLwotc3RhdGljIFB5T2JqZWN0ICpleHRlbnNpb25fY2FjaGUgPSBOVUxMOworLyogU3RhdGUgb2YgdGhlIHBpY2tsZSBtb2R1bGUsIHBlciBQRVAgMzEyMS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBFeGNlcHRpb24gY2xhc3NlcyBmb3IgcGlja2xlLiAqLworICAgIFB5T2JqZWN0ICpQaWNrbGVFcnJvcjsKKyAgICBQeU9iamVjdCAqUGlja2xpbmdFcnJvcjsKKyAgICBQeU9iamVjdCAqVW5waWNrbGluZ0Vycm9yOwogCi0vKiBfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcsIHsob2xkbW9kdWxlLCBvbGRuYW1lKTogKG5ld21vZHVsZSwgbmV3bmFtZSl9ICovCi1zdGF0aWMgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18ydG8zID0gTlVMTDsKLS8qIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HLCB7b2xkbW9kdWxlOiBuZXdtb2R1bGV9ICovCi1zdGF0aWMgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzJ0bzMgPSBOVUxMOwotLyogU2FtZSwgYnV0IHdpdGggUkVWRVJTRV9OQU1FX01BUFBJTkcgLyBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HICovCi1zdGF0aWMgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18zdG8yID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqaW1wb3J0X21hcHBpbmdfM3RvMiA9IE5VTEw7CisgICAgLyogY29weXJlZy5kaXNwYXRjaF90YWJsZSwge3R5cGVfb2JqZWN0OiBwaWNrbGluZ19mdW5jdGlvbn0gKi8KKyAgICBQeU9iamVjdCAqZGlzcGF0Y2hfdGFibGU7CiAKLS8qIFhYWDogQXJlIHRoZXNlIHJlYWxseSBuZXNjZXNzYXJ5PyAqLwotLyogQXMgdGhlIG5hbWUgc2F5cywgYW4gZW1wdHkgdHVwbGUuICovCi1zdGF0aWMgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gTlVMTDsKLS8qIEZvciBsb29raW5nIHVwIG5hbWUgcGFpcnMgaW4gY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LiAqLwotc3RhdGljIFB5T2JqZWN0ICp0d29fdHVwbGUgPSBOVUxMOworICAgIC8qIEZvciB0aGUgZXh0ZW5zaW9uIG9wY29kZXMgRVhUMSwgRVhUMiBhbmQgRVhUNC4gKi8KKworICAgIC8qIGNvcHlyZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSwgeyhtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSk6IGNvZGV9ICovCisgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9yZWdpc3RyeTsKKyAgICAvKiBjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUsIHtjb2RlOiBvYmplY3R9ICovCisgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9jYWNoZTsKKyAgICAvKiBjb3B5cmVnLl9pbnZlcnRlZF9yZWdpc3RyeSwge2NvZGU6IChtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSl9ICovCisgICAgUHlPYmplY3QgKmludmVydGVkX3JlZ2lzdHJ5OworCisgICAgLyogSW1wb3J0IG1hcHBpbmdzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIueCAqLworCisgICAgLyogX2NvbXBhdF9waWNrbGUuTkFNRV9NQVBQSU5HLAorICAgICAgIHsob2xkbW9kdWxlLCBvbGRuYW1lKTogKG5ld21vZHVsZSwgbmV3bmFtZSl9ICovCisgICAgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18ydG8zOworICAgIC8qIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HLCB7b2xkbW9kdWxlOiBuZXdtb2R1bGV9ICovCisgICAgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzJ0bzM7CisgICAgLyogU2FtZSwgYnV0IHdpdGggUkVWRVJTRV9OQU1FX01BUFBJTkcgLyBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HICovCisgICAgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18zdG8yOworICAgIFB5T2JqZWN0ICppbXBvcnRfbWFwcGluZ18zdG8yOworCisgICAgLyogY29kZWNzLmVuY29kZSwgdXNlZCBmb3Igc2F2aW5nIGJ5dGVzIGluIG9sZGVyIHByb3RvY29scyAqLworICAgIFB5T2JqZWN0ICpjb2RlY3NfZW5jb2RlOworfSBQaWNrbGVTdGF0ZTsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgX3BpY2tsZSBtb2R1bGUgZGVmaW5pdGlvbi4gKi8KK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX3BpY2tsZW1vZHVsZTsKKworLyogR2l2ZW4gYSBtb2R1bGUgb2JqZWN0LCBnZXQgaXRzIHBlci1tb2R1bGUgc3RhdGUuICovCitzdGF0aWMgUGlja2xlU3RhdGUgKgorX1BpY2tsZV9HZXRTdGF0ZShQeU9iamVjdCAqbW9kdWxlKQoreworICAgIHJldHVybiAoUGlja2xlU3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShtb2R1bGUpOworfQorCisvKiBGaW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgaW1wb3J0ZWQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHN1Yi1pbnRlcnByZXRlcgorICAgYW5kIGdldCBpdHMgc3RhdGUuICovCitzdGF0aWMgUGlja2xlU3RhdGUgKgorX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSh2b2lkKQoreworICAgIHJldHVybiBfUGlja2xlX0dldFN0YXRlKFB5U3RhdGVfRmluZE1vZHVsZSgmX3BpY2tsZW1vZHVsZSkpOworfQorCisvKiBDbGVhciB0aGUgZ2l2ZW4gcGlja2xlIG1vZHVsZSBzdGF0ZS4gKi8KK3N0YXRpYyB2b2lkCitfUGlja2xlX0NsZWFyU3RhdGUoUGlja2xlU3RhdGUgKnN0KQoreworICAgIFB5X0NMRUFSKHN0LT5QaWNrbGVFcnJvcik7CisgICAgUHlfQ0xFQVIoc3QtPlBpY2tsaW5nRXJyb3IpOworICAgIFB5X0NMRUFSKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIFB5X0NMRUFSKHN0LT5kaXNwYXRjaF90YWJsZSk7CisgICAgUHlfQ0xFQVIoc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSk7CisgICAgUHlfQ0xFQVIoc3QtPmV4dGVuc2lvbl9jYWNoZSk7CisgICAgUHlfQ0xFQVIoc3QtPmludmVydGVkX3JlZ2lzdHJ5KTsKKyAgICBQeV9DTEVBUihzdC0+bmFtZV9tYXBwaW5nXzJ0bzMpOworICAgIFB5X0NMRUFSKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9DTEVBUihzdC0+bmFtZV9tYXBwaW5nXzN0bzIpOworICAgIFB5X0NMRUFSKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9DTEVBUihzdC0+Y29kZWNzX2VuY29kZSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGdpdmVuIHBpY2tsZSBtb2R1bGUgc3RhdGUuICovCitzdGF0aWMgaW50CitfUGlja2xlX0luaXRTdGF0ZShQaWNrbGVTdGF0ZSAqc3QpCit7CisgICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb21wYXRfcGlja2xlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29kZWNzID0gTlVMTDsKKworICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKKyAgICBpZiAoIWNvcHlyZWcpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPmRpc3BhdGNoX3RhYmxlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiZGlzcGF0Y2hfdGFibGUiKTsKKyAgICBpZiAoIXN0LT5kaXNwYXRjaF90YWJsZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5kaXNwYXRjaF90YWJsZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLmRpc3BhdGNoX3RhYmxlIHNob3VsZCBiZSBhIGRpY3QsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzdC0+ZGlzcGF0Y2hfdGFibGUpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9yZWdpc3RyeSIpOworICAgIGlmICghc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5leHRlbnNpb25fcmVnaXN0cnkpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5IHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5pbnZlcnRlZF9yZWdpc3RyeSA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2ludmVydGVkX3JlZ2lzdHJ5Iik7CisgICAgaWYgKCFzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5faW52ZXJ0ZWRfcmVnaXN0cnkgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+ZXh0ZW5zaW9uX2NhY2hlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9jYWNoZSIpOworICAgIGlmICghc3QtPmV4dGVuc2lvbl9jYWNoZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5leHRlbnNpb25fY2FjaGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fZXh0ZW5zaW9uX2NhY2hlIHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+ZXh0ZW5zaW9uX2NhY2hlKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvcHlyZWcpOworCisgICAgLyogTG9hZCB0aGUgMi54IC0+IDMueCBzdGRsaWIgbW9kdWxlIG1hcHBpbmcgdGFibGVzICovCisgICAgY29tcGF0X3BpY2tsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX2NvbXBhdF9waWNrbGUiKTsKKyAgICBpZiAoIWNvbXBhdF9waWNrbGUpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPm5hbWVfbWFwcGluZ18ydG8zID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJOQU1FX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5uYW1lX21hcHBpbmdfMnRvMykKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5uYW1lX21hcHBpbmdfMnRvMykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5uYW1lX21hcHBpbmdfMnRvMyktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+aW1wb3J0X21hcHBpbmdfMnRvMyA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiSU1QT1JUX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIC8qIC4uLiBhbmQgdGhlIDMueCAtPiAyLnggbWFwcGluZyB0YWJsZXMgKi8KKyAgICBzdC0+bmFtZV9tYXBwaW5nXzN0bzIgPSBcCisgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwgIlJFVkVSU0VfTkFNRV9NQVBQSU5HIik7CisgICAgaWYgKCFzdC0+bmFtZV9tYXBwaW5nXzN0bzIpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+bmFtZV9tYXBwaW5nXzN0bzIpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5uYW1lX21hcHBpbmdfM3RvMiktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiUkVWRVJTRV9JTVBPUlRfTUFQUElORyIpOworICAgIGlmICghc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW1wb3J0X21hcHBpbmdfM3RvMikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKKworICAgIGNvZGVjcyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29kZWNzIik7CisgICAgaWYgKGNvZGVjcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHN0LT5jb2RlY3NfZW5jb2RlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb2RlY3MsICJlbmNvZGUiKTsKKyAgICBpZiAoc3QtPmNvZGVjc19lbmNvZGUgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soc3QtPmNvZGVjc19lbmNvZGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29kZWNzLmVuY29kZSBzaG91bGQgYmUgYSBjYWxsYWJsZSwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5jb2RlY3NfZW5jb2RlKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvZGVjcyk7CisKKyAgICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgICBQeV9DTEVBUihjb3B5cmVnKTsKKyAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKKyAgICBQeV9DTEVBUihjb2RlY3MpOworICAgIF9QaWNrbGVfQ2xlYXJTdGF0ZShzdCk7CisgICAgcmV0dXJuIC0xOworfQorCisvKiBIZWxwZXIgZm9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IHF1aWNrbHkuCisKKyAgIFRoaXMgZnVuY3Rpb24gc3RlYWxzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGdpdmVuIGFyZ3VtZW50LiAqLworc3RhdGljIFB5T2JqZWN0ICoKK19QaWNrbGVfRmFzdENhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqYXJnX3R1cGxlID0gUHlUdXBsZV9OZXcoMSk7CisKKyAgICAvKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIHVzZWQgdG8gcmV1c2UgdGhlIGFyZ3VtZW50IHR1cGxlLiBUaGlzIHVzZWQgdG8gZ2l2ZQorICAgICAgIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGJvb3N0IHdpdGggb2xkZXIgcGlja2xlIGltcGxlbWVudGF0aW9ucyB3aGVyZSBtYW55CisgICAgICAgdW5idWZmZXJlZCByZWFkcyBvY2N1cnJlZCAodGh1cyBuZWVkaW5nIG1hbnkgZnVuY3Rpb24gY2FsbHMpLgorCisgICAgICAgSG93ZXZlciwgdGhpcyBvcHRpbWl6YXRpb24gd2FzIHJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgdG9vIGNvbXBsaWNhdGVkCisgICAgICAgdG8gZ2V0IHJpZ2h0LiBJdCBhYnVzZWQgdGhlIEMgQVBJIGZvciB0dXBsZXMgdG8gbXV0YXRlIHRoZW0gd2hpY2ggbGVkCisgICAgICAgdG8gc3VidGxlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY29uY3VycmVuY3kgYnVncy4gRnVydGhlcm1vcmUsIHRoZQorICAgICAgIGludHJvZHVjdGlvbiBvZiBwcm90b2NvbCA0IGFuZCB0aGUgcHJlZmV0Y2hpbmcgb3B0aW1pemF0aW9uIHZpYSBwZWVrKCkKKyAgICAgICBzaWduaWZpY2FudGx5IHJlZHVjZWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyB3ZSBkby4gVGh1cywgdGhlCisgICAgICAgYmVuZWZpdHMgYmVjYW1lIG1hcmdpbmFsIGF0IGJlc3QuICovCisKKyAgICBpZiAoYXJnX3R1cGxlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ190dXBsZSwgMCwgb2JqKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZ190dXBsZSwgTlVMTCk7CisgICAgUHlfQ0xFQVIoYXJnX3R1cGxlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAogc3RhY2tfdW5kZXJmbG93KHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgInVucGlja2xpbmcgc3RhY2sgdW5kZXJmbG93Iik7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAidW5waWNrbGluZyBzdGFjayB1bmRlcmZsb3ciKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTI0MCw4ICs0NTAsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFBkYXRhX3BvcChQZGF0YSAqc2VsZikKIHsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaWYgKFB5X1NJWkUoc2VsZikgPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiYmFkIHBpY2tsZSBkYXRhIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiYmFkIHBpY2tsZSBkYXRhIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZi0+ZGF0YVstLVB5X1NJWkUoc2VsZildOwpAQCAtMzIwLDcgKzUzMSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsaW5nLiAqLwogICAgIFB5T2JqZWN0ICpwZXJzX2Z1bmM7ICAgICAgICAvKiBwZXJzaXN0ZW50X2lkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTCAqLwogICAgIFB5T2JqZWN0ICpkaXNwYXRjaF90YWJsZTsgICAvKiBwcml2YXRlIGRpc3BhdGNoX3RhYmxlLCBjYW4gYmUgTlVMTCAqLwotICAgIFB5T2JqZWN0ICphcmc7CiAKICAgICBQeU9iamVjdCAqd3JpdGU7ICAgICAgICAgICAgLyogd3JpdGUoKSBtZXRob2Qgb2YgdGhlIG91dHB1dCBzdHJlYW0uICovCiAgICAgUHlPYmplY3QgKm91dHB1dF9idWZmZXI7ICAgIC8qIFdyaXRlIGludG8gYSBsb2NhbCBieXRlYXJyYXkgYnVmZmVyIGJlZm9yZQpAQCAtMzI5LDcgKzUzOSwxMiBAQAogICAgIFB5X3NzaXplX3QgbWF4X291dHB1dF9sZW47ICAvKiBBbGxvY2F0aW9uIHNpemUgb2Ygb3V0cHV0X2J1ZmZlci4gKi8KICAgICBpbnQgcHJvdG87ICAgICAgICAgICAgICAgICAgLyogUGlja2xlIHByb3RvY29sIG51bWJlciwgPj0gMCAqLwogICAgIGludCBiaW47ICAgICAgICAgICAgICAgICAgICAvKiBCb29sZWFuLCB0cnVlIGlmIHByb3RvID4gMCAqLwotICAgIFB5X3NzaXplX3QgYnVmX3NpemU7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLworICAgIGludCBmcmFtaW5nOyAgICAgICAgICAgICAgICAvKiBUcnVlIHdoZW4gZnJhbWluZyBpcyBlbmFibGVkLCBwcm90byA+PSA0ICovCisgICAgUHlfc3NpemVfdCBmcmFtZV9zdGFydDsgICAgIC8qIFBvc2l0aW9uIGluIG91dHB1dF9idWZmZXIgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBjdXJyZW50IGZyYW1lIGJlZ2lucy4gLTEgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm8gZnJhbWUgY3VycmVudGx5IG9wZW4uICovCisKKyAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplOyAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLwogICAgIGludCBmYXN0OyAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgZmFzdCBtb2RlIGlmIHNldCB0byBhIHRydWUgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmYXN0IG1vZGUgZGlzYWJsZSB0aGUgdXNhZ2Ugb2YgbWVtbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmVmb3JlIHNwZWVkaW5nIHRoZSBwaWNrbGluZyBwcm9jZXNzIGJ5CkBAIC0zNDksOSArNTY0LDkgQEAKICAgICAvKiBUaGUgdW5waWNrbGVyIG1lbW8gaXMganVzdCBhbiBhcnJheSBvZiBQeU9iamVjdCAqcy4gVXNpbmcgYSBkaWN0CiAgICAgICAgaXMgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBrZXlzIGFyZSBjb250aWd1b3VzIGludHMuICovCiAgICAgUHlPYmplY3QgKiptZW1vOwotICAgIFB5X3NzaXplX3QgbWVtb19zaXplOworICAgIFB5X3NzaXplX3QgbWVtb19zaXplOyAgICAgICAvKiBDYXBhY2l0eSBvZiB0aGUgbWVtbyBhcnJheSAqLworICAgIFB5X3NzaXplX3QgbWVtb19sZW47ICAgICAgICAvKiBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgbWVtbyAqLwogCi0gICAgUHlPYmplY3QgKmFyZzsKICAgICBQeU9iamVjdCAqcGVyc19mdW5jOyAgICAgICAgLyogcGVyc2lzdGVudF9sb2FkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTC4gKi8KIAogICAgIFB5X2J1ZmZlciBidWZmZXI7CkBAIC0zNjAsNiArNTc1LDcgQEAKICAgICBQeV9zc2l6ZV90IGlucHV0X2xlbjsKICAgICBQeV9zc2l6ZV90IG5leHRfcmVhZF9pZHg7CiAgICAgUHlfc3NpemVfdCBwcmVmZXRjaGVkX2lkeDsgIC8qIGluZGV4IG9mIGZpcnN0IHByZWZldGNoZWQgYnl0ZSAqLworCiAgICAgUHlPYmplY3QgKnJlYWQ7ICAgICAgICAgICAgIC8qIHJlYWQoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqcmVhZGxpbmU7ICAgICAgICAgLyogcmVhZGxpbmUoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqcGVlazsgICAgICAgICAgICAgLyogcGVlaygpIG1ldGhvZCBvZiB0aGUgaW5wdXQgc3RyZWFtLCBvciBOVUxMICovCkBAIC0zNzksMTIgKzU5NSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZiBnbG9iYWxzIHBpY2tsZWQgYnkgUHl0aG9uIDIueC4gKi8KIH0gVW5waWNrbGVyT2JqZWN0OwogCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7IC8qIFBpY2tsZXIgd2hvc2UgbWVtbyB0YWJsZSB3ZSdyZSBwcm94eWluZy4gKi8KK30gIFBpY2tsZXJNZW1vUHJveHlPYmplY3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXI7Cit9IFVucGlja2xlck1lbW9Qcm94eU9iamVjdDsKKwogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgc2F2ZShQaWNrbGVyT2JqZWN0ICosIFB5T2JqZWN0ICosIGludCk7CiBzdGF0aWMgaW50IHNhdmVfcmVkdWNlKFBpY2tsZXJPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFBpY2tsZXJfVHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgVW5waWNrbGVyX1R5cGU7CiAKKyNpbmNsdWRlICJjbGluaWMvX3BpY2tsZS5jLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgQSBjdXN0b20gaGFzaHRhYmxlIG1hcHBpbmcgdm9pZCogdG8gUHl0aG9uIGludHMuIFRoaXMgaXMgdXNlZCBieSB0aGUgcGlja2xlcgpAQCAtNDM2LDYgKzY2Myw3IEBACiAgICAgbmV3LT5tdF90YWJsZSA9IFB5TWVtX01BTExPQyhzZWxmLT5tdF9hbGxvY2F0ZWQgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKICAgICBpZiAobmV3LT5tdF90YWJsZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5TWVtX0ZSRUUobmV3KTsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5tdF9hbGxvY2F0ZWQ7IGkrKykgewpAQCAtNTI5LDcgKzc1Nyw3IEBACiAgICAgb2xkdGFibGUgPSBzZWxmLT5tdF90YWJsZTsKICAgICBzZWxmLT5tdF90YWJsZSA9IFB5TWVtX01BTExPQyhuZXdfc2l6ZSAqIHNpemVvZihQeU1lbW9FbnRyeSkpOwogICAgIGlmIChzZWxmLT5tdF90YWJsZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUob2xkdGFibGUpOworICAgICAgICBzZWxmLT5tdF90YWJsZSA9IG9sZHRhYmxlOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtNjA1LDYwICs4MzMsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogSGVscGVycyBmb3IgY3JlYXRpbmcgdGhlIGFyZ3VtZW50IHR1cGxlIHBhc3NlZCB0byBmdW5jdGlvbnMuIFRoaXMgaGFzIHRoZQotICAgcGVyZm9ybWFuY2UgYWR2YW50YWdlIG9mIGNhbGxpbmcgUHlUdXBsZV9OZXcoKSBvbmx5IG9uY2UuCi0KLSAgIFhYWChhdmFzc2Fsb3R0aSk6IElubGluZSBkaXJlY3RseSBpbiBfUGlja2xlcl9GYXN0Q2FsbCgpIGFuZAotICAgX1VucGlja2xlcl9GYXN0Q2FsbCgpLiAqLwotI2RlZmluZSBBUkdfVFVQKHNlbGYsIG9iaikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoKHNlbGYpLT5hcmcgfHwgKChzZWxmKS0+YXJnPVB5VHVwbGVfTmV3KDEpKSkgeyAgXAotICAgICAgICAgICAgUHlfWERFQ1JFRihQeVR1cGxlX0dFVF9JVEVNKChzZWxmKS0+YXJnLCAwKSk7ICAgXAotICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSgoc2VsZiktPmFyZywgMCwgKG9iaikpOyAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKChvYmopKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlJFRV9BUkdfVFVQKHNlbGYpIGRvIHsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKChzZWxmKS0+YXJnLT5vYl9yZWZjbnQgPiAxKSAgICAgICAgIFwKLSAgICAgICAgICAgIFB5X0NMRUFSKChzZWxmKS0+YXJnKTsgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBBIHRlbXBvcmFyeSBjbGVhbmVyIEFQSSBmb3IgZmFzdCBzaW5nbGUgYXJndW1lbnQgZnVuY3Rpb24gY2FsbC4KLQotICAgWFhYOiBEb2VzIGNhY2hpbmcgdGhlIGFyZ3VtZW50IHR1cGxlIHByb3ZpZGVzIGFueSByZWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzPwotCi0gICBBIHF1aWNrIGJlbmNobWFyaywgb24gYSAyLjBHSHogQXRobG9uNjQgMzIwMCsgcnVubmluZyBMaW51eCAyLjYuMjQgd2l0aAotICAgZ2xpYmMgMi43LCB0ZWxscyBtZSB0aGF0IGl0IHRha2VzIHJvdWdobHkgMjAsMDAwLDAwMCBQeVR1cGxlX05ldygxKSBjYWxscwotICAgd2hlbiB0aGUgdHVwbGUgaXMgcmV0cmlldmVkIGZyb20gdGhlIGZyZWVsaXN0IChpLmUsIGNhbGwgUHlUdXBsZV9OZXcoKSB0aGVuCi0gICBpbW1lZGlhdGVseSBERUNSRUYgaXQpIGFuZCAxLDIwMCwwMDAgY2FsbHMgd2hlbiBhbGxvY2F0aW5nIGJyYW5kIG5ldyB0dXBsZXMKLSAgIChpLmUsIGNhbGwgUHlUdXBsZV9OZXcoKSBhbmQgc3RvcmUgdGhlIHJldHVybmVkIHZhbHVlIGluIGFuIGFycmF5KSwgdG8gc2F2ZQotICAgb25lIHNlY29uZCAod2FsbCBjbG9jayB0aW1lKS4gRWl0aGVyIHdheXMsIHRoZSBsb2FkaW5nIHRpbWUgYSBwaWNrbGUgc3RyZWFtCi0gICBsYXJnZSBlbm91Z2ggdG8gZ2VuZXJhdGUgdGhpcyBudW1iZXIgb2YgY2FsbHMgd291bGQgYmUgbWFzc2l2ZWx5Ci0gICBvdmVyd2hlbG1lZCBieSBvdGhlciBmYWN0b3JzLCBsaWtlIEkvTyB0aHJvdWdocHV0LCB0aGUgR0MgdHJhdmVyc2FsIGFuZAotICAgb2JqZWN0IGFsbG9jYXRpb24gb3ZlcmhlYWQuIFNvLCBJIHJlYWxseSBkb3VidCB0aGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBhbnkKLSAgIHJlYWwgYmVuZWZpdHMuCi0KLSAgIE9uIHRoZSBvdGhlciBoYW5kLCBvcHJvZmlsZSByZXBvcnRzIHRoYXQgcGlja2xlIHNwZW5kcyBhIGxvdCBvZiB0aW1lIGluCi0gICB0aGVzZSBmdW5jdGlvbnMuIEJ1dCwgdGhhdCBpcyBwcm9iYWJseSBtb3JlIHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGwKLSAgIG92ZXJoZWFkLCB0aGFuIHRoZSBhcmd1bWVudCB0dXBsZSBhbGxvY2F0aW9uLgotCi0gICBYWFg6IEFuZCwgd2hhdCBpcyB0aGUgcmVmZXJlbmNlIGJlaGF2aW9yIG9mIHRoZXNlPyBTdGVhbCwgYm9ycm93PyBBdCBmaXJzdAotICAgZ2xhbmNlLCBpdCBzZWVtcyB0byBzdGVhbCB0aGUgcmVmZXJlbmNlIG9mICdhcmcnIGFuZCBib3Jyb3cgdGhlIHJlZmVyZW5jZQotICAgb2YgJ2Z1bmMnLiAqLwotc3RhdGljIFB5T2JqZWN0ICoKLV9QaWNrbGVyX0Zhc3RDYWxsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gICAgQVJHX1RVUChzZWxmLCBhcmcpOwotICAgIGlmIChzZWxmLT5hcmcpIHsKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBzZWxmLT5hcmcsIE5VTEwpOwotICAgICAgICBGUkVFX0FSR19UVVAoc2VsZik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19CiAKIHN0YXRpYyBpbnQKIF9QaWNrbGVyX0NsZWFyQnVmZmVyKFBpY2tsZXJPYmplY3QgKnNlbGYpCkBAIC02NjksMTUgKzg0Myw3MSBAQAogICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKKyAgICBzZWxmLT5mcmFtZV9zdGFydCA9IC0xOwogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorX3dyaXRlX3NpemU2NChjaGFyICpvdXQsIHNpemVfdCB2YWx1ZSkKK3sKKyAgICBpbnQgaTsKKworICAgIGFzc2VydChzaXplb2Yoc2l6ZV90KSA8PSA4KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2l6ZV90KTsgaSsrKSB7CisgICAgICAgIG91dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsdWUgPj4gKDggKiBpKSkgJiAweGZmKTsKKyAgICB9CisgICAgZm9yIChpID0gc2l6ZW9mKHNpemVfdCk7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgb3V0W2ldID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfUGlja2xlcl9Xcml0ZUZyYW1lSGVhZGVyKFBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKnFkYXRhLCBzaXplX3QgZnJhbWVfbGVuKQoreworICAgIHFkYXRhWzBdID0gRlJBTUU7CisgICAgX3dyaXRlX3NpemU2NChxZGF0YSArIDEsIGZyYW1lX2xlbik7Cit9CisKK3N0YXRpYyBpbnQKK19QaWNrbGVyX0NvbW1pdEZyYW1lKFBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgc2l6ZV90IGZyYW1lX2xlbjsKKyAgICBjaGFyICpxZGF0YTsKKworICAgIGlmICghc2VsZi0+ZnJhbWluZyB8fCBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZnJhbWVfbGVuID0gc2VsZi0+b3V0cHV0X2xlbiAtIHNlbGYtPmZyYW1lX3N0YXJ0IC0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgcWRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5vdXRwdXRfYnVmZmVyKSArIHNlbGYtPmZyYW1lX3N0YXJ0OworICAgIF9QaWNrbGVyX1dyaXRlRnJhbWVIZWFkZXIoc2VsZiwgcWRhdGEsIGZyYW1lX2xlbik7CisgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSAtMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX1BpY2tsZXJfT3Bjb2RlQm91bmRhcnkoUGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IGZyYW1lX2xlbjsKKworICAgIGlmICghc2VsZi0+ZnJhbWluZyB8fCBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZnJhbWVfbGVuID0gc2VsZi0+b3V0cHV0X2xlbiAtIHNlbGYtPmZyYW1lX3N0YXJ0IC0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgaWYgKGZyYW1lX2xlbiA+PSBGUkFNRV9TSVpFX1RBUkdFVCkKKyAgICAgICAgcmV0dXJuIF9QaWNrbGVyX0NvbW1pdEZyYW1lKHNlbGYpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfUGlja2xlcl9HZXRTdHJpbmcoUGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqb3V0cHV0X2J1ZmZlciA9IHNlbGYtPm91dHB1dF9idWZmZXI7CiAKICAgICBhc3NlcnQoc2VsZi0+b3V0cHV0X2J1ZmZlciAhPSBOVUxMKTsKKworICAgIGlmIChfUGlja2xlcl9Db21taXRGcmFtZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gTlVMTDsKICAgICAvKiBSZXNpemUgZG93biB0byBleGFjdCBzaXplICovCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmb3V0cHV0X2J1ZmZlciwgc2VsZi0+b3V0cHV0X2xlbikgPCAwKQpAQCAtNjkyLDY3ICs5MjIsNjQgQEAKIAogICAgIGFzc2VydChzZWxmLT53cml0ZSAhPSBOVUxMKTsKIAorICAgIC8qIFRoaXMgd2lsbCBjb21taXQgdGhlIGZyYW1lIGZpcnN0ICovCiAgICAgb3V0cHV0ID0gX1BpY2tsZXJfR2V0U3RyaW5nKHNlbGYpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmVzdWx0ID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+d3JpdGUsIG91dHB1dCk7CisgICAgcmVzdWx0ID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT53cml0ZSwgb3V0cHV0KTsKICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CiAgICAgcmV0dXJuIChyZXN1bHQgPT0gTlVMTCkgPyAtMSA6IDA7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1fUGlja2xlcl9Xcml0ZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IG4pCitfUGlja2xlcl9Xcml0ZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGRhdGFfbGVuKQogewotICAgIFB5X3NzaXplX3QgaSwgcmVxdWlyZWQ7CisgICAgUHlfc3NpemVfdCBpLCBuLCByZXF1aXJlZDsKICAgICBjaGFyICpidWZmZXI7CisgICAgaW50IG5lZWRfbmV3X2ZyYW1lOwogCiAgICAgYXNzZXJ0KHMgIT0gTlVMTCk7CisgICAgbmVlZF9uZXdfZnJhbWUgPSAoc2VsZi0+ZnJhbWluZyAmJiBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSk7CisKKyAgICBpZiAobmVlZF9uZXdfZnJhbWUpCisgICAgICAgIG4gPSBkYXRhX2xlbiArIEZSQU1FX0hFQURFUl9TSVpFOworICAgIGVsc2UKKyAgICAgICAgbiA9IGRhdGFfbGVuOwogCiAgICAgcmVxdWlyZWQgPSBzZWxmLT5vdXRwdXRfbGVuICsgbjsKICAgICBpZiAocmVxdWlyZWQgPiBzZWxmLT5tYXhfb3V0cHV0X2xlbikgewotICAgICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCAmJiByZXF1aXJlZCA+IE1BWF9XUklURV9CVUZfU0laRSkgewotICAgICAgICAgICAgLyogWFhYIFRoaXMgcmVhbGxvY2F0ZXMgYSBuZXcgYnVmZmVyIGV2ZXJ5IHRpbWUsIHdoaWNoIGlzIGEgYml0Ci0gICAgICAgICAgICAgICB3YXN0ZWZ1bC4gKi8KLSAgICAgICAgICAgIGlmIChfUGlja2xlcl9GbHVzaFRvRmlsZShzZWxmKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKF9QaWNrbGVyX0NsZWFyQnVmZmVyKHNlbGYpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIC8qIE1ha2UgcGxhY2UgaW4gYnVmZmVyIGZvciB0aGUgcGlja2xlIGNodW5rICovCisgICAgICAgIGlmIChzZWxmLT5vdXRwdXRfbGVuID49IFBZX1NTSVpFX1RfTUFYIC8gMiAtIG4pIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwgJiYgbiA+IE1BWF9XUklURV9CVUZfU0laRSkgewotICAgICAgICAgICAgLyogd2UgYWxyZWFkeSBmbHVzaGVkIGFib3ZlLCBzbyB0aGUgYnVmZmVyIGlzIGVtcHR5ICovCi0gICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgICAgICAgICAgLyogWFhYIHdlIGNvdWxkIHNwYXJlIGFuIGludGVybWVkaWF0ZSBjb3B5IGFuZCBwYXNzCi0gICAgICAgICAgICAgICBhIG1lbW9yeXZpZXcgaW5zdGVhZCAqLwotICAgICAgICAgICAgUHlPYmplY3QgKm91dHB1dCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgbik7Ci0gICAgICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPndyaXRlLCBvdXRwdXQpOwotICAgICAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPT0gTlVMTCkgPyAtMSA6IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+b3V0cHV0X2xlbiA+PSBQWV9TU0laRV9UX01BWCAvIDIgLSBuKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IChzZWxmLT5vdXRwdXRfbGVuICsgbikgLyAyICogMzsKLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnNlbGYtPm91dHB1dF9idWZmZXIsIHNlbGYtPm1heF9vdXRwdXRfbGVuKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuID0gKHNlbGYtPm91dHB1dF9sZW4gKyBuKSAvIDIgKiAzOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZzZWxmLT5vdXRwdXRfYnVmZmVyLCBzZWxmLT5tYXhfb3V0cHV0X2xlbikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBidWZmZXIgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5vdXRwdXRfYnVmZmVyKTsKLSAgICBpZiAobiA8IDgpIHsKKyAgICBpZiAobmVlZF9uZXdfZnJhbWUpIHsKKyAgICAgICAgLyogU2V0dXAgbmV3IGZyYW1lICovCisgICAgICAgIFB5X3NzaXplX3QgZnJhbWVfc3RhcnQgPSBzZWxmLT5vdXRwdXRfbGVuOworICAgICAgICBzZWxmLT5mcmFtZV9zdGFydCA9IGZyYW1lX3N0YXJ0OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlJBTUVfSEVBREVSX1NJWkU7IGkrKykgeworICAgICAgICAgICAgLyogV3JpdGUgYW4gaW52YWxpZCB2YWx1ZSwgZm9yIGRlYnVnZ2luZyAqLworICAgICAgICAgICAgYnVmZmVyW2ZyYW1lX3N0YXJ0ICsgaV0gPSAweEZFOworICAgICAgICB9CisgICAgICAgIHNlbGYtPm91dHB1dF9sZW4gKz0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgfQorICAgIGlmIChkYXRhX2xlbiA8IDgpIHsKICAgICAgICAgLyogVGhpcyBpcyBmYXN0ZXIgdGhhbiBtZW1jcHkgd2hlbiB0aGUgc3RyaW5nIGlzIHNob3J0LiAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbjsgaSsrKSB7CiAgICAgICAgICAgICBidWZmZXJbc2VsZi0+b3V0cHV0X2xlbiArIGldID0gc1tpXTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHNlbGYtPm91dHB1dF9sZW4sIHMsIG4pOworICAgICAgICBtZW1jcHkoYnVmZmVyICsgc2VsZi0+b3V0cHV0X2xlbiwgcywgZGF0YV9sZW4pOwogICAgIH0KLSAgICBzZWxmLT5vdXRwdXRfbGVuICs9IG47Ci0gICAgcmV0dXJuIG47CisgICAgc2VsZi0+b3V0cHV0X2xlbiArPSBkYXRhX2xlbjsKKyAgICByZXR1cm4gZGF0YV9sZW47CiB9CiAKIHN0YXRpYyBQaWNrbGVyT2JqZWN0ICoKQEAgLTc2NiwyNSArOTkzLDIzIEBACiAKICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwogICAgIHNlbGYtPmRpc3BhdGNoX3RhYmxlID0gTlVMTDsKLSAgICBzZWxmLT5hcmcgPSBOVUxMOwogICAgIHNlbGYtPndyaXRlID0gTlVMTDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAgICAgc2VsZi0+YmluID0gMDsKKyAgICBzZWxmLT5mcmFtaW5nID0gMDsKKyAgICBzZWxmLT5mcmFtZV9zdGFydCA9IC0xOwogICAgIHNlbGYtPmZhc3QgPSAwOwogICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSAwOwogICAgIHNlbGYtPmZhc3RfbWVtbyA9IE5VTEw7Ci0KLSAgICBzZWxmLT5tZW1vID0gUHlNZW1vVGFibGVfTmV3KCk7Ci0gICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IFdSSVRFX0JVRl9TSVpFOwogICAgIHNlbGYtPm91dHB1dF9sZW4gPSAwOworCisgICAgc2VsZi0+bWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOwogICAgIHNlbGYtPm91dHB1dF9idWZmZXIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4pOwotICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpIHsKKworICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwgfHwgc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNzkyLDM0ICsxMDE3LDI5IEBACiB9CiAKIHN0YXRpYyBpbnQKLV9QaWNrbGVyX1NldFByb3RvY29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpwcm90b19vYmosCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZml4X2ltcG9ydHNfb2JqKQorX1BpY2tsZXJfU2V0UHJvdG9jb2woUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCiB7Ci0gICAgbG9uZyBwcm90byA9IDA7Ci0gICAgaW50IGZpeF9pbXBvcnRzOworICAgIGxvbmcgcHJvdG87CiAKLSAgICBpZiAocHJvdG9fb2JqID09IE5VTEwgfHwgcHJvdG9fb2JqID09IFB5X05vbmUpCisgICAgaWYgKHByb3RvY29sID09IE5VTEwgfHwgcHJvdG9jb2wgPT0gUHlfTm9uZSkgewogICAgICAgICBwcm90byA9IERFRkFVTFRfUFJPVE9DT0w7CisgICAgfQogICAgIGVsc2UgewotICAgICAgICBwcm90byA9IFB5TG9uZ19Bc0xvbmcocHJvdG9fb2JqKTsKLSAgICAgICAgaWYgKHByb3RvID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHByb3RvID0gUHlMb25nX0FzTG9uZyhwcm90b2NvbCk7CisgICAgICAgIGlmIChwcm90byA8IDApIHsKKyAgICAgICAgICAgIGlmIChwcm90byA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHByb3RvID0gSElHSEVTVF9QUk9UT0NPTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwcm90byA+IEhJR0hFU1RfUFJPVE9DT0wpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEhJR0hFU1RfUFJPVE9DT0wpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChwcm90byA8IDApCi0gICAgICAgIHByb3RvID0gSElHSEVTVF9QUk9UT0NPTDsKLSAgICBpZiAocHJvdG8gPiBISUdIRVNUX1BST1RPQ09MKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiLAotICAgICAgICAgICAgICAgICAgICAgSElHSEVTVF9QUk9UT0NPTCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHNfb2JqKTsKLSAgICBpZiAoZml4X2ltcG9ydHMgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHNlbGYtPnByb3RvID0gcHJvdG87CisgICAgc2VsZi0+cHJvdG8gPSAoaW50KXByb3RvOwogICAgIHNlbGYtPmJpbiA9IHByb3RvID4gMDsKICAgICBzZWxmLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzICYmIHByb3RvIDwgMzsKLQogICAgIHJldHVybiAwOwogfQogCkBAIC04NDEsMjAgKzEwNjEsNiBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgX1BpY2tsZXJfRmFzdENhbGwoKS4gKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1fVW5waWNrbGVyX0Zhc3RDYWxsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgICBBUkdfVFVQKHNlbGYsIGFyZyk7Ci0gICAgaWYgKHNlbGYtPmFyZykgewotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIHNlbGYtPmFyZywgTlVMTCk7Ci0gICAgICAgIEZSRUVfQVJHX1RVUChzZWxmKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLyogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4gVGhpcyB0YWtlcyBpdHMKICAgIG93biByZWZlcmVuY2UgdG8gYGlucHV0YC4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC04NzQsMTggKzEwODAsMjEgQEAKIHN0YXRpYyBpbnQKIF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeV9zc2l6ZV90IGNvbnN1bWVkID0gc2VsZi0+bmV4dF9yZWFkX2lkeCAtIHNlbGYtPnByZWZldGNoZWRfaWR4OworICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7CisgICAgUHlPYmplY3QgKnI7CiAKLSAgICBpZiAoY29uc3VtZWQgPiAwKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpyOwotICAgICAgICBhc3NlcnQoc2VsZi0+cGVlayk7ICAvKiBvdGhlcndpc2Ugd2UgZGlkIHNvbWV0aGluZyB3cm9uZyAqLwotICAgICAgICAvKiBUaGlzIG1ha2VzIGFuIHVzZWxlc3MgY29weS4uLiAqLwotICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPnJlYWQsICJuIiwgY29uc3VtZWQpOwotICAgICAgICBpZiAociA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQeV9ERUNSRUYocik7Ci0gICAgICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gc2VsZi0+bmV4dF9yZWFkX2lkeDsKLSAgICB9CisgICAgY29uc3VtZWQgPSBzZWxmLT5uZXh0X3JlYWRfaWR4IC0gc2VsZi0+cHJlZmV0Y2hlZF9pZHg7CisgICAgaWYgKGNvbnN1bWVkIDw9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgYXNzZXJ0KHNlbGYtPnBlZWspOyAgLyogb3RoZXJ3aXNlIHdlIGRpZCBzb21ldGhpbmcgd3JvbmcgKi8KKyAgICAvKiBUaGlzIG1ha2VzIGFuIHVzZWxlc3MgY29weS4uLiAqLworICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cmVhZCwgIm4iLCBjb25zdW1lZCk7CisgICAgaWYgKHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0RFQ1JFRihyKTsKKworICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gc2VsZi0+bmV4dF9yZWFkX2lkeDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTA5LDU2ICsxMTE4LDUxIEBACiBfVW5waWNrbGVyX1JlYWRGcm9tRmlsZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbikKIHsKICAgICBQeU9iamVjdCAqZGF0YTsKLSAgICBQeV9zc2l6ZV90IHJlYWRfc2l6ZSwgcHJlZmV0Y2hlZF9zaXplID0gMDsKKyAgICBQeV9zc2l6ZV90IHJlYWRfc2l6ZTsKIAogICAgIGFzc2VydChzZWxmLT5yZWFkICE9IE5VTEwpOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKG4gPT0gUkVBRF9XSE9MRV9MSU5FKQorICAgIGlmIChuID09IFJFQURfV0hPTEVfTElORSkgeworICAgICAgICBQeU9iamVjdCAqZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgZGF0YSA9IFB5T2JqZWN0X0NhbGwoc2VsZi0+cmVhZGxpbmUsIGVtcHR5X3R1cGxlLCBOVUxMKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKmxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKLSAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBkYXRhID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5yZWFkLCBsZW4pOworICAgICAgICBQeV9ERUNSRUYoZW1wdHlfdHVwbGUpOwogICAgIH0KLSAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBQcmVmZXRjaCBzb21lIGRhdGEgd2l0aG91dCBhZHZhbmNpbmcgdGhlIGZpbGUgcG9pbnRlciwgaWYgcG9zc2libGUgKi8KLSAgICBpZiAoc2VsZi0+cGVlaykgewotICAgICAgICBQeU9iamVjdCAqbGVuLCAqcHJlZmV0Y2hlZDsKLSAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KFBSRUZFVENIKTsKLSAgICAgICAgaWYgKGxlbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcHJlZmV0Y2hlZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVlaywgbGVuKTsKLSAgICAgICAgaWYgKHByZWZldGNoZWQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcikpIHsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmxlbjsKKyAgICAgICAgLyogUHJlZmV0Y2ggc29tZSBkYXRhIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBmaWxlIHBvaW50ZXIsIGlmIHBvc3NpYmxlICovCisgICAgICAgIGlmIChzZWxmLT5wZWVrICYmIG4gPCBQUkVGRVRDSCkgeworICAgICAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KFBSRUZFVENIKTsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBkYXRhID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT5wZWVrLCBsZW4pOworICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgIC8qIHBlZWsoKSBpcyBwcm9iYWJseSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBnaXZlbiBmaWxlIG9iamVjdCAqLwogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cGVlayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWFkX3NpemUgPSBfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHNlbGYsIGRhdGEpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSAwOworICAgICAgICAgICAgICAgIGlmIChuIDw9IHJlYWRfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVjayhwcmVmZXRjaGVkKSk7Ci0gICAgICAgICAgICBwcmVmZXRjaGVkX3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHByZWZldGNoZWQpOwotICAgICAgICAgICAgUHlCeXRlc19Db25jYXRBbmREZWwoJmRhdGEsIHByZWZldGNoZWQpOwotICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKyAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOworICAgICAgICBpZiAobGVuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGRhdGEgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnJlYWQsIGxlbik7CiAgICAgfQorICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIHJlYWRfc2l6ZSA9IF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQoc2VsZiwgZGF0YSkgLSBwcmVmZXRjaGVkX3NpemU7CisgICAgcmVhZF9zaXplID0gX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dChzZWxmLCBkYXRhKTsKICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSByZWFkX3NpemU7CiAgICAgcmV0dXJuIHJlYWRfc2l6ZTsKIH0KIApAQCAtMTAwNiw4ICsxMjEwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipyZXN1bHQpCiB7CiAgICAgY2hhciAqaW5wdXRfbGluZSA9IFB5TWVtX1JlYWxsb2Moc2VsZi0+aW5wdXRfbGluZSwgbGVuICsgMSk7Ci0gICAgaWYgKGlucHV0X2xpbmUgPT0gTlVMTCkKKyAgICBpZiAoaW5wdXRfbGluZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBtZW1jcHkoaW5wdXRfbGluZSwgbGluZSwgbGVuKTsKICAgICBpbnB1dF9saW5lW2xlbl0gPSAnXDAnOwpAQCAtMTA5Niw3ICsxMzAyLDEyIEBACiAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICBvbGRfaXRlbSA9IHNlbGYtPm1lbW9baWR4XTsKICAgICBzZWxmLT5tZW1vW2lkeF0gPSB2YWx1ZTsKLSAgICBQeV9YREVDUkVGKG9sZF9pdGVtKTsKKyAgICBpZiAob2xkX2l0ZW0gIT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYob2xkX2l0ZW0pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VsZi0+bWVtb19sZW4rKzsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTExMDQsOCArMTMxNSwxMCBAQAogX1VucGlja2xlcl9OZXdNZW1vKFB5X3NzaXplX3QgbmV3X3NpemUpCiB7CiAgICAgUHlPYmplY3QgKiptZW1vID0gUHlNZW1fTUFMTE9DKG5ld19zaXplICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICBpZiAobWVtbyA9PSBOVUxMKQorICAgIGlmIChtZW1vID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG1lbXNldChtZW1vLCAwLCBuZXdfc2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKSk7CiAgICAgcmV0dXJuIG1lbW87CiB9CkBAIC0xMTM2LDIxICsxMzQ5LDYgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7Ci0gICAgaWYgKHNlbGYtPnN0YWNrID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0KCZzZWxmLT5idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKLQotICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOwotICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKLSAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwogICAgIHNlbGYtPmlucHV0X2J1ZmZlciA9IE5VTEw7CiAgICAgc2VsZi0+aW5wdXRfbGluZSA9IE5VTEw7CkBAIC0xMTY3LDYgKzEzNjUsMTYgQEAKICAgICBzZWxmLT5tYXJrc19zaXplID0gMDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSAwOworICAgIG1lbXNldCgmc2VsZi0+YnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7CisgICAgc2VsZi0+bWVtb19zaXplID0gMzI7CisgICAgc2VsZi0+bWVtb19sZW4gPSAwOworICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKKyAgICBzZWxmLT5zdGFjayA9IChQZGF0YSAqKVBkYXRhX05ldygpOworCisgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCB8fCBzZWxmLT5zdGFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC0xMjEzLDggKzE0MjEsOCBAQAogICAgIGlmIChlcnJvcnMgPT0gTlVMTCkKICAgICAgICAgZXJyb3JzID0gInN0cmljdCI7CiAKLSAgICBzZWxmLT5lbmNvZGluZyA9IHN0cmR1cChlbmNvZGluZyk7Ci0gICAgc2VsZi0+ZXJyb3JzID0gc3RyZHVwKGVycm9ycyk7CisgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKGVuY29kaW5nKTsKKyAgICBzZWxmLT5lcnJvcnMgPSBfUHlNZW1fU3RyZHVwKGVycm9ycyk7CiAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwgfHwgc2VsZi0+ZXJyb3JzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTI1Nyw3ICsxNDY1LDggQEAKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIHVubGlrZWx5ICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtbyBpZCB0b28gbGFyZ2UgZm9yIExPTkdfQklOR0VUIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTEyNzQsMTI4ICsxNDgzLDE3NSBAQAogc3RhdGljIGludAogbWVtb19wdXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeV9zc2l6ZV90IHg7CiAgICAgY2hhciBwZGF0YVszMF07CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaW50IHN0YXR1cyA9IDA7CisgICAgUHlfc3NpemVfdCBpZHg7CisKKyAgICBjb25zdCBjaGFyIG1lbW9pemVfb3AgPSBNRU1PSVpFOwogCiAgICAgaWYgKHNlbGYtPmZhc3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgeCA9IFB5TWVtb1RhYmxlX1NpemUoc2VsZi0+bWVtbyk7Ci0gICAgaWYgKFB5TWVtb1RhYmxlX1NldChzZWxmLT5tZW1vLCBvYmosIHgpIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZHggPSBQeU1lbW9UYWJsZV9TaXplKHNlbGYtPm1lbW8pOworICAgIGlmIChQeU1lbW9UYWJsZV9TZXQoc2VsZi0+bWVtbywgb2JqLCBpZHgpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKCFzZWxmLT5iaW4pIHsKKyAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1lbW9pemVfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKCFzZWxmLT5iaW4pIHsKICAgICAgICAgcGRhdGFbMF0gPSBQVVQ7CiAgICAgICAgIFB5T1Nfc25wcmludGYocGRhdGEgKyAxLCBzaXplb2YocGRhdGEpIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgeCk7CisgICAgICAgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGlkeCk7CiAgICAgICAgIGxlbiA9IHN0cmxlbihwZGF0YSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoeCA8IDI1NikgeworICAgICAgICBpZiAoaWR4IDwgMjU2KSB7CiAgICAgICAgICAgICBwZGF0YVswXSA9IEJJTlBVVDsKLSAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpeDsKKyAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpaWR4OwogICAgICAgICAgICAgbGVuID0gMjsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh4IDw9IDB4ZmZmZmZmZmZMKSB7CisgICAgICAgIGVsc2UgaWYgKGlkeCA8PSAweGZmZmZmZmZmTCkgewogICAgICAgICAgICAgcGRhdGFbMF0gPSBMT05HX0JJTlBVVDsKLSAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHggJiAweGZmKTsKLSAgICAgICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDgpICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDI0KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoaWR4ICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoaWR4ID4+IDgpICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoaWR4ID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiAyNCkgJiAweGZmKTsKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIHVubGlrZWx5ICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtbyBpZCB0b28gbGFyZ2UgZm9yIExPTkdfQklOUFVUIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoMCkgewotICBlcnJvcjoKLSAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXR1czsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdoaWNobW9kdWxlKFB5T2JqZWN0ICpnbG9iYWwsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSkKK2dldGF0dHJpYnV0ZShQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwgaW50IGFsbG93X3F1YWxuYW1lKSB7CisgICAgUHlPYmplY3QgKmRvdHRlZF9wYXRoOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2RvdCwgIi4iKTsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2xvY2FscywgIjxsb2NhbHM+Iik7CisKKyAgICBkb3R0ZWRfcGF0aCA9IFB5VW5pY29kZV9TcGxpdChuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9kb3QpLCAtMSk7CisgICAgaWYgKGRvdHRlZF9wYXRoID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFzc2VydChQeV9TSVpFKGRvdHRlZF9wYXRoKSA+PSAxKTsKKyAgICBpZiAoIWFsbG93X3F1YWxuYW1lICYmIFB5X1NJWkUoZG90dGVkX3BhdGgpID4gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IHF1YWxpZmllZCBhdHRyaWJ1dGUgJVIgb24gJVI7IgorICAgICAgICAgICAgICAgICAgICAgInVzZSBwcm90b2NvbHMgPj0gNCB0byBlbmFibGUgc3VwcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lLCBvYmopOworICAgICAgICBQeV9ERUNSRUYoZG90dGVkX3BhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoZG90dGVkX3BhdGgpOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKnN1YnBhdGggPSBQeUxpc3RfR0VUX0lURU0oZG90dGVkX3BhdGgsIGkpOworICAgICAgICBQeU9iamVjdCAqdG1wOworICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAorICAgICAgICAgICAgc3VicGF0aCwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbG9jYWxzKSwgUHlfRVEpOworICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOworICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgaWYgKGlzX2VxdWFsKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBsb2NhbCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHN1YnBhdGgpOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG9iaiA9IHRtcDsKKyAgICB9CisgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QgKgord2hpY2htb2R1bGUoUHlPYmplY3QgKmdsb2JhbCwgUHlPYmplY3QgKmdsb2JhbF9uYW1lLCBpbnQgYWxsb3dfcXVhbG5hbWUpCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBqOwotICAgIHN0YXRpYyBQeU9iamVjdCAqbW9kdWxlX3N0ciA9IE5VTEw7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICptYWluX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKICAgICBQeU9iamVjdCAqb2JqOworICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKKyAgICBfUHlfSURFTlRJRklFUihfX21haW5fXyk7CiAKLSAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIG1vZHVsZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19tb2R1bGVfXyIpOwotICAgICAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKQorICAgIG1vZHVsZV9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChnbG9iYWwsICZQeUlkX19fbW9kdWxlX18pOworCisgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBtYWluX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX21haW5fXyIpOwotICAgICAgICBpZiAobWFpbl9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIG1vZHVsZV9uYW1lID0gUHlPYmplY3RfR2V0QXR0cihnbG9iYWwsIG1vZHVsZV9zdHIpOwotCi0gICAgLyogSW4gc29tZSByYXJlIGNhc2VzIChlLmcuLCBib3VuZCBtZXRob2RzIG9mIGV4dGVuc2lvbiB0eXBlcyksCi0gICAgICAgX19tb2R1bGVfXyBjYW4gYmUgTm9uZS4gSWYgaXQgaXMgc28sIHRoZW4gc2VhcmNoIHN5cy5tb2R1bGVzCi0gICAgICAgZm9yIHRoZSBtb2R1bGUgb2YgZ2xvYmFsLiAgKi8KLSAgICBpZiAobW9kdWxlX25hbWUgPT0gUHlfTm9uZSkgewotICAgICAgICBQeV9ERUNSRUYobW9kdWxlX25hbWUpOwotICAgICAgICBnb3RvIHNlYXJjaDsKLSAgICB9Ci0KLSAgICBpZiAobW9kdWxlX25hbWUpIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwotICAgIH0KLSAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIEluIHNvbWUgcmFyZSBjYXNlcyAoZS5nLiwgYm91bmQgbWV0aG9kcyBvZiBleHRlbnNpb24gdHlwZXMpLAorICAgICAgICAgICBfX21vZHVsZV9fIGNhbiBiZSBOb25lLiBJZiBpdCBpcyBzbywgdGhlbiBzZWFyY2ggc3lzLm1vZHVsZXMgZm9yCisgICAgICAgICAgIHRoZSBtb2R1bGUgb2YgZ2xvYmFsLiAqLworICAgICAgICBpZiAobW9kdWxlX25hbWUgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZTsKKyAgICAgICAgUHlfQ0xFQVIobW9kdWxlX25hbWUpOworICAgIH0KKyAgICBhc3NlcnQobW9kdWxlX25hbWUgPT0gTlVMTCk7CiAKLSAgc2VhcmNoOgotICAgIG1vZHVsZXNfZGljdCA9IFB5U3lzX0dldE9iamVjdCgibW9kdWxlcyIpOwotICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkKKyAgICBtb2R1bGVzX2RpY3QgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfbW9kdWxlcyk7CisgICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5tb2R1bGVzIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGkgPSAwOwotICAgIG1vZHVsZV9uYW1lID0gTlVMTDsKICAgICB3aGlsZSAoKGogPSBQeURpY3RfTmV4dChtb2R1bGVzX2RpY3QsICZpLCAmbW9kdWxlX25hbWUsICZtb2R1bGUpKSkgewotICAgICAgICBpZiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKG1vZHVsZV9uYW1lLCBtYWluX3N0ciwgUHlfRVEpID09IDEpCisgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVVuaWNvZGVfUmljaENvbXBhcmUoCisgICAgICAgICAgICBtb2R1bGVfbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pLCBQeV9FUSk7CisgICAgICAgIGludCBpc19lcXVhbCA9IChyZXN1bHQgPT0gUHlfVHJ1ZSk7CisgICAgICAgIGFzc2VydChQeUJvb2xfQ2hlY2socmVzdWx0KSk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICBpZiAoaXNfZXF1YWwpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgb2JqID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgb2JqID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIGFsbG93X3F1YWxuYW1lKTsKICAgICAgICAgaWYgKG9iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAob2JqICE9IGdsb2JhbCkgeworICAgICAgICBpZiAob2JqID09IGdsb2JhbCkgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWU7CiAgICAgICAgIH0KLQogICAgICAgICBQeV9ERUNSRUYob2JqKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLyogSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCB1c2UgX19tYWluX18uICovCi0gICAgaWYgKCFqKSB7Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gbWFpbl9zdHI7Ci0gICAgfQotCisgICAgbW9kdWxlX25hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX21haW5fXyk7CiAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKICAgICByZXR1cm4gbW9kdWxlX25hbWU7CiB9CkBAIC0xNDI0LDcgKzE2ODAsNyBAQAogICAgICAgICBrZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIob2JqKTsKICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChQeURpY3RfR2V0SXRlbShzZWxmLT5mYXN0X21lbW8sIGtleSkpIHsKKyAgICAgICAgaWYgKFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHNlbGYtPmZhc3RfbWVtbywga2V5KSkgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFzdCBtb2RlOiBjYW4ndCBwaWNrbGUgY3ljbGljIG9iamVjdHMgIgpAQCAtMTQzMyw2ICsxNjg5LDkgQEAKICAgICAgICAgICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IC0xOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzZWxmLT5mYXN0X21lbW8sIGtleSwgUHlfTm9uZSkgPCAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IC0xOwpAQCAtMTQ3Miw0NiArMTczMSw1OCBAQAogc3RhdGljIGludAogc2F2ZV9ib29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmJ1ZlsyXSA9IHsgRkFMU0UsIFRSVUUgfTsKLSAgICBjb25zdCBjaGFyIGxlblsyXSA9IHtzaXplb2YoRkFMU0UpIC0gMSwgc2l6ZW9mKFRSVUUpIC0gMX07Ci0gICAgaW50IHAgPSAob2JqID09IFB5X1RydWUpOwotCiAgICAgaWYgKHNlbGYtPnByb3RvID49IDIpIHsKLSAgICAgICAgY29uc3QgY2hhciBib29sX29wID0gcCA/IE5FV1RSVUUgOiBORVdGQUxTRTsKKyAgICAgICAgY29uc3QgY2hhciBib29sX29wID0gKG9iaiA9PSBQeV9UcnVlKSA/IE5FV1RSVUUgOiBORVdGQUxTRTsKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZib29sX29wLCAxKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGVsc2UgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGJ1ZltwXSwgbGVuW3BdKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQorICAgIGVsc2UgeworICAgICAgICAvKiBUaGVzZSBhcmVuJ3Qgb3Bjb2RlcyAtLSB0aGV5J3JlIHdheXMgdG8gcGlja2xlIGJvb2xzIGJlZm9yZSBwcm90b2NvbCAyCisgICAgICAgICAqIHNvIHRoYXQgdW5waWNrbGVycyB3cml0dGVuIGJlZm9yZSBib29scyB3ZXJlIGludHJvZHVjZWQgdW5waWNrbGUgdGhlbQorICAgICAgICAgKiBhcyBpbnRzLCBidXQgdW5waWNrbGVycyBhZnRlciBjYW4gcmVjb2duaXplIHRoYXQgYm9vbHMgd2VyZSBpbnRlbmRlZC4KKyAgICAgICAgICogTm90ZSB0aGF0IHByb3RvY29sIDIgYWRkZWQgZGlyZWN0IHdheXMgdG8gcGlja2xlIGJvb2xzLgorICAgICAgICAgKi8KKyAgICAgICAgY29uc3QgY2hhciAqYm9vbF9zdHIgPSAob2JqID09IFB5X1RydWUpID8gIkkwMVxuIiA6ICJJMDBcbiI7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBib29sX3N0ciwgc3RybGVuKGJvb2xfc3RyKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotc2F2ZV9pbnQoUGlja2xlck9iamVjdCAqc2VsZiwgbG9uZyB4KQorc2F2ZV9sb25nKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgY2hhciBwZGF0YVszMl07Ci0gICAgUHlfc3NpemVfdCBsZW4gPSAwOworICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgbG9uZyB2YWw7CisgICAgaW50IHN0YXR1cyA9IDA7CiAKLSAgICBpZiAoIXNlbGYtPmJpbgotI2lmIFNJWkVPRl9MT05HID4gNAotICAgICAgICB8fCB4ID4gMHg3ZmZmZmZmZkwgfHwgeCA8IC0weDgwMDAwMDAwTAotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICAvKiBUZXh0LW1vZGUgcGlja2xlLCBvciBsb25nIHRvbyBiaWcgdG8gZml0IGluIHRoZSA0LWJ5dGUKLSAgICAgICAgICogc2lnbmVkIEJJTklOVCBmb3JtYXQ6ICBzdG9yZSBhcyBhIHN0cmluZy4KLSAgICAgICAgICovCi0gICAgICAgIHBkYXRhWzBdID0gTE9ORzsgICAgICAgIC8qIHVzZSBMT05HIGZvciBjb25zaXN0ZW5jeSB3aXRoIHBpY2tsZS5weSAqLwotICAgICAgICBQeU9TX3NucHJpbnRmKHBkYXRhICsgMSwgc2l6ZW9mKHBkYXRhKSAtIDEsICIlbGRMXG4iLCB4KTsKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBzdHJsZW4ocGRhdGEpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgY29uc3QgY2hhciBsb25nX29wID0gTE9ORzsKKworICAgIHZhbD0gUHlMb25nX0FzTG9uZyhvYmopOworICAgIGlmICh2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAvKiBvdXQgb2YgcmFuZ2UgZm9yIGludCBwaWNrbGluZyAqLworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogQmluYXJ5IHBpY2tsZSBhbmQgeCBmaXRzIGluIGEgc2lnbmVkIDQtYnl0ZSBpbnQuICovCi0gICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHggJiAweGZmKTsKLSAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHggPj4gOCkgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDI0KSAmIDB4ZmYpOworICAgIGVsc2UgaWYgKHNlbGYtPmJpbiAmJgorICAgICAgICAgICAgIChzaXplb2YobG9uZykgPD0gNCB8fAorICAgICAgICAgICAgICAodmFsIDw9IDB4N2ZmZmZmZmZMICYmIHZhbCA+PSAoLTB4N2ZmZmZmZmZMIC0gMSkpKSkgeworICAgICAgICAvKiByZXN1bHQgZml0cyBpbiBhIHNpZ25lZCA0LWJ5dGUgaW50ZWdlci4KKworICAgICAgICAgICBOb3RlOiB3ZSBjYW4ndCB1c2UgLTB4ODAwMDAwMDBMIGluIHRoZSBhYm92ZSBjb25kaXRpb24gYmVjYXVzZSBzb21lCisgICAgICAgICAgIGNvbXBpbGVycyAoZS5nLiwgTVNWQykgd2lsbCBwcm9tb3RlIDB4ODAwMDAwMDBMIHRvIGFuIHVuc2lnbmVkIHR5cGUKKyAgICAgICAgICAgYmVmb3JlIGFwcGx5aW5nIHRoZSB1bmFyeSBtaW51cyB3aGVuIHNpemVvZihsb25nKSA8PSA0LiBUaGUKKyAgICAgICAgICAgcmVzdWx0aW5nIHZhbHVlIHN0YXlzIHVuc2lnbmVkIHdoaWNoIGlzIGNvbW1vbmx5IG5vdCB3aGF0IHdlIHdhbnQsCisgICAgICAgICAgIHNvIE1TVkMgaGFwcGlseSB3YXJucyB1cyBhYm91dCBpdC4gIEhvd2V2ZXIsIHRoYXQgcmVzdWx0IHdvdWxkIGhhdmUKKyAgICAgICAgICAgYmVlbiBmaW5lIGJlY2F1c2Ugd2UgZ3VhcmQgZm9yIHNpemVvZihsb25nKSA8PSA0IHdoaWNoIHR1cm5zIHRoZQorICAgICAgICAgICBjb25kaXRpb24gdHJ1ZSBpbiB0aGF0IHBhcnRpY3VsYXIgY2FzZS4gKi8KKyAgICAgICAgY2hhciBwZGF0YVszMl07CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gMDsKKworICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgJiAweGZmKTsKKyAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHZhbCA+PiA4KSAmIDB4ZmYpOworICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDI0KSAmIDB4ZmYpOwogCiAgICAgICAgIGlmICgocGRhdGFbNF0gPT0gMCkgJiYgKHBkYXRhWzNdID09IDApKSB7CiAgICAgICAgICAgICBpZiAocGRhdGFbMl0gPT0gMCkgewpAQCAtMTUzMCwzMSArMTgwMSwxMCBAQAogCiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgbGVuKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhdmVfbG9uZyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgbG9uZyB2YWwgPSBQeUxvbmdfQXNMb25nKG9iaik7Ci0gICAgaW50IHN0YXR1cyA9IDA7Ci0KLSAgICBjb25zdCBjaGFyIGxvbmdfb3AgPSBMT05HOwotCi0gICAgaWYgKHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIC8qIG91dCBvZiByYW5nZSBmb3IgaW50IHBpY2tsaW5nICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgfQotICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgaWYgKHZhbCA8PSAweDdmZmZmZmZmTCAmJiB2YWwgPj0gLTB4ODAwMDAwMDBMKQotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gc2F2ZV9pbnQoc2VsZiwgdmFsKTsKLQogICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7CiAgICAgICAgIC8qIExpbmVhci10aW1lIHBpY2tsaW5nLiAqLwogICAgICAgICBzaXplX3QgbmJpdHM7CkBAIC0xNzE5LDQwICsxOTY5LDI1IEBACiAgICAgICAgICAgIFB5dGhvbiAyICphbmQqIHRoZSBhcHByb3ByaWF0ZSAnYnl0ZXMnIG9iamVjdCB3aGVuIHVucGlja2xlZAogICAgICAgICAgICB1c2luZyBQeXRob24gMy4gQWdhaW4gdGhpcyBpcyBhIGhhY2sgYW5kIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcwogICAgICAgICAgICB3aXRoIG5ld2VyIHByb3RvY29scy4gKi8KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpjb2RlY3NfZW5jb2RlID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSA9IE5VTEw7CiAgICAgICAgIGludCBzdGF0dXM7CiAKLSAgICAgICAgaWYgKGNvZGVjc19lbmNvZGUgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjc19tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvZGVjcyIpOwotICAgICAgICAgICAgaWYgKGNvZGVjc19tb2R1bGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvZGVjc19lbmNvZGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvZGVjc19tb2R1bGUsICJlbmNvZGUiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlY3NfbW9kdWxlKTsKLSAgICAgICAgICAgIGlmIChjb2RlY3NfZW5jb2RlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmopID09IDApIHsKICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKCkpIiwgKFB5T2JqZWN0KikmUHlCeXRlc19UeXBlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqbGF0aW4xID0gTlVMTDsKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlX3N0ciA9CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RlY29kZUxhdGluMShQeUJ5dGVzX0FTX1NUUklORyhvYmopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShvYmopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIpOworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIobGF0aW4xKTsKKwogICAgICAgICAgICAgaWYgKHVuaWNvZGVfc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKGxhdGluMSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoImxhdGluMSIpOwotICAgICAgICAgICAgICAgIGlmIChsYXRpbjEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oT08pKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjc19lbmNvZGUsIHVuaWNvZGVfc3RyLCBsYXRpbjEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNzX2VuY29kZSwgdW5pY29kZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2xhdGluMSkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGVfc3RyKTsKICAgICAgICAgfQogCkBAIC0xNzY2LDE0ICsyMDAxLDE0IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgIGNoYXIgaGVhZGVyWzVdOworICAgICAgICBjaGFyIGhlYWRlcls5XTsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAKICAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUob2JqKTsKICAgICAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIGlmIChzaXplIDwgMjU2KSB7CisgICAgICAgIGlmIChzaXplIDw9IDB4ZmYpIHsKICAgICAgICAgICAgIGhlYWRlclswXSA9IFNIT1JUX0JJTkJZVEVTOwogICAgICAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpc2l6ZTsKICAgICAgICAgICAgIGxlbiA9IDI7CkBAIC0xNzg2LDYgKzIwMjEsMTEgQEAKICAgICAgICAgICAgIGhlYWRlcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgaGVhZGVyWzBdID0gQklOQllURVM4OworICAgICAgICAgICAgX3dyaXRlX3NpemU2NChoZWFkZXIgKyAxLCBzaXplKTsKKyAgICAgICAgICAgIGxlbiA9IDk7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSBhIGJ5dGVzIG9iamVjdCBsYXJnZXIgdGhhbiA0IEdpQiIpOwpAQCAtMTg3Myw2MyArMjExMywxMDYgQEAKIH0KIAogc3RhdGljIGludAotc2F2ZV91bmljb2RlKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit3cml0ZV91dGY4KFBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKmRhdGEsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgUHlPYmplY3QgKmVuY29kZWQgPSBOVUxMOworICAgIGNoYXIgaGVhZGVyWzldOworICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKHNlbGYtPmJpbikgewotICAgICAgICBjaGFyIHBkYXRhWzVdOwotCi0gICAgICAgIGVuY29kZWQgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG9iaiwgInV0Zi04IiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCk7Ci0gICAgICAgIGlmIChzaXplID4gMHhmZmZmZmZmZkwpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplIGEgc3RyaW5nIGxhcmdlciB0aGFuIDQgR2lCIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOyAgICAgICAgICAvKiBzdHJpbmcgdG9vIGxhcmdlICovCi0gICAgICAgIH0KLQotICAgICAgICBwZGF0YVswXSA9IEJJTlVOSUNPREU7Ci0gICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gOCkgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDI0KSAmIDB4ZmYpOwotCi0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgNSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKHNpemUgPD0gMHhmZiAmJiBzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgIGhlYWRlclswXSA9IFNIT1JUX0JJTlVOSUNPREU7CisgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CisgICAgICAgIGxlbiA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPD0gMHhmZmZmZmZmZlVMKSB7CisgICAgICAgIGhlYWRlclswXSA9IEJJTlVOSUNPREU7CisgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CisgICAgICAgIGhlYWRlclsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiA4KSAmIDB4ZmYpOworICAgICAgICBoZWFkZXJbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7CisgICAgICAgIGhlYWRlcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgbGVuID0gNTsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICBoZWFkZXJbMF0gPSBCSU5VTklDT0RFODsKKyAgICAgICAgX3dyaXRlX3NpemU2NChoZWFkZXIgKyAxLCBzaXplKTsKKyAgICAgICAgbGVuID0gOTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgYSBzdHJpbmcgbGFyZ2VyIHRoYW4gNEdpQiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGhlYWRlciwgbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgZGF0YSwgc2l6ZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVfdW5pY29kZV9iaW5hcnkoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmRhdGE7CisgICAgaW50IHI7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShvYmosICZzaXplKTsKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gd3JpdGVfdXRmOChzZWxmLCBkYXRhLCBzaXplKTsKKworICAgIC8qIElzc3VlICM4MzgzOiBmb3Igc3RyaW5ncyB3aXRoIGxvbmUgc3Vycm9nYXRlcywgZmFsbGJhY2sgb24gdGhlCisgICAgICAgInN1cnJvZ2F0ZXBhc3MiIGVycm9yIGhhbmRsZXIuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhvYmosICJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIik7CisgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgciA9IHdyaXRlX3V0Zjgoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCisgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSk7CisgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgIHJldHVybiByOworfQorCitzdGF0aWMgaW50CitzYXZlX3VuaWNvZGUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBpZiAoc2VsZi0+YmluKSB7CisgICAgICAgIGlmICh3cml0ZV91bmljb2RlX2JpbmFyeShzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOworICAgICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgICAgIGNvbnN0IGNoYXIgdW5pY29kZV9vcCA9IFVOSUNPREU7CiAKICAgICAgICAgZW5jb2RlZCA9IHJhd191bmljb2RlX2VzY2FwZShvYmopOwogICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnVuaWNvZGVfb3AsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmdW5pY29kZV9vcCwgMSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAogICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKTsKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKIAogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgcmV0dXJuIDA7Ci0KLSAgZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihlbmNvZGVkKTsKLSAgICByZXR1cm4gLTE7CiB9CiAKIC8qIEEgaGVscGVyIGZvciBzYXZlX3R1cGxlLiAgUHVzaCB0aGUgbGVuIGVsZW1lbnRzIGluIHR1cGxlIHQgb24gdGhlIHN0YWNrLiAqLwpAQCAtMjU1NywzNCArMjg0MCwyNTIgQEAKIH0KIAogc3RhdGljIGludAorc2F2ZV9zZXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IHNldF9zaXplLCBwcG9zID0gMDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKworICAgIGNvbnN0IGNoYXIgZW1wdHlfc2V0X29wID0gRU1QVFlfU0VUOworICAgIGNvbnN0IGNoYXIgbWFya19vcCA9IE1BUks7CisgICAgY29uc3QgY2hhciBhZGRpdGVtc19vcCA9IEFERElURU1TOworCisgICAgaWYgKHNlbGYtPnByb3RvIDwgNCkgeworICAgICAgICBQeU9iamVjdCAqaXRlbXM7CisgICAgICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CisgICAgICAgIGludCBzdGF0dXM7CisKKyAgICAgICAgaXRlbXMgPSBQeVNlcXVlbmNlX0xpc3Qob2JqKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTyhPKSkiLCAoUHlPYmplY3QqKSZQeVNldF9UeXBlLCBpdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgICAgIGlmIChyZWR1Y2VfdmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8qIHNhdmVfcmVkdWNlKCkgd2lsbCBtZW1vaXplIHRoZSBvYmplY3QgYXV0b21hdGljYWxseS4gKi8KKyAgICAgICAgc3RhdHVzID0gc2F2ZV9yZWR1Y2Uoc2VsZiwgcmVkdWNlX3ZhbHVlLCBvYmopOworICAgICAgICBQeV9ERUNSRUYocmVkdWNlX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmVtcHR5X3NldF9vcCwgMSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNldF9zaXplID0gUHlTZXRfR0VUX1NJWkUob2JqKTsKKyAgICBpZiAoc2V0X3NpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAvKiBub3RoaW5nIHRvIGRvICovCisKKyAgICAvKiBXcml0ZSBpbiBiYXRjaGVzIG9mIEJBVENIU0laRS4gKi8KKyAgICBkbyB7CisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd2hpbGUgKF9QeVNldF9OZXh0RW50cnkob2JqLCAmcHBvcywgJml0ZW0sICZoYXNoKSkgeworICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgaXRlbSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmICgrK2kgPT0gQkFUQ0hTSVpFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmYWRkaXRlbXNfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKFB5U2V0X0dFVF9TSVpFKG9iaikgIT0gc2V0X3NpemUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgInNldCBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoaSA9PSBCQVRDSFNJWkUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhdmVfZnJvemVuc2V0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKml0ZXI7CisKKyAgICBjb25zdCBjaGFyIG1hcmtfb3AgPSBNQVJLOworICAgIGNvbnN0IGNoYXIgZnJvemVuc2V0X29wID0gRlJPWkVOU0VUOworCisgICAgaWYgKHNlbGYtPmZhc3QgJiYgIWZhc3Rfc2F2ZV9lbnRlcihzZWxmLCBvYmopKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoc2VsZi0+cHJvdG8gPCA0KSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZTsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFB5U2VxdWVuY2VfTGlzdChvYmopOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE8pKSIsIChQeU9iamVjdCopJlB5RnJvemVuU2V0X1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMpOworICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgICAgICBpZiAocmVkdWNlX3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAvKiBzYXZlX3JlZHVjZSgpIHdpbGwgbWVtb2l6ZSB0aGUgb2JqZWN0IGF1dG9tYXRpY2FsbHkuICovCisgICAgICAgIHN0YXR1cyA9IHNhdmVfcmVkdWNlKHNlbGYsIHJlZHVjZV92YWx1ZSwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKHJlZHVjZV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtYXJrX29wLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7CisgICAgaWYgKGl0ZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICAgICAgaXRlbSA9IFB5SXRlcl9OZXh0KGl0ZXIpOworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2F2ZShzZWxmLCBpdGVtLCAwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgfQorICAgIFB5X0RFQ1JFRihpdGVyKTsKKworICAgIC8qIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uICovCisgICAgaWYgKFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBvYmopKSB7CisgICAgICAgIGNvbnN0IGNoYXIgcG9wX21hcmtfb3AgPSBQT1BfTUFSSzsKKworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnBvcF9tYXJrX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZmcm96ZW5zZXRfb3AsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZpeF9pbXBvcnRzKFB5T2JqZWN0ICoqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICoqZ2xvYmFsX25hbWUpCit7CisgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgKm1vZHVsZV9uYW1lLCAqZ2xvYmFsX25hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+bmFtZV9tYXBwaW5nXzN0bzIsIGtleSk7CisgICAgUHlfREVDUkVGKGtleSk7CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgUHlPYmplY3QgKmZpeGVkX21vZHVsZV9uYW1lOworICAgICAgICBQeU9iamVjdCAqZml4ZWRfZ2xvYmFsX25hbWU7CisKKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGl0ZW0pIHx8IFB5VHVwbGVfR0VUX1NJWkUoaXRlbSkgIT0gMikgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIDItdHVwbGVzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBmaXhlZF9tb2R1bGVfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMCk7CisgICAgICAgIGZpeGVkX2dsb2JhbF9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAxKTsKKyAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZml4ZWRfbW9kdWxlX25hbWUpIHx8CisgICAgICAgICAgICAhUHlVbmljb2RlX0NoZWNrKGZpeGVkX2dsb2JhbF9uYW1lKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHBhaXJzIG9mIHN0ciwgbm90ICglLjIwMHMsICUuMjAwcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZml4ZWRfbW9kdWxlX25hbWUpLT50cF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZml4ZWRfZ2xvYmFsX25hbWUpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKCptb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0NMRUFSKCpnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihmaXhlZF9tb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihmaXhlZF9nbG9iYWxfbmFtZSk7CisgICAgICAgICptb2R1bGVfbmFtZSA9IGZpeGVkX21vZHVsZV9uYW1lOworICAgICAgICAqZ2xvYmFsX25hbWUgPSBmaXhlZF9nbG9iYWxfbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yLCAqbW9kdWxlX25hbWUpOworICAgIGlmIChpdGVtKSB7CisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHZhbHVlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBzdHJpbmdzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUigqbW9kdWxlX25hbWUpOworICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICptb2R1bGVfbmFtZSA9IGl0ZW07CisgICAgfQorICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBzYXZlX2dsb2JhbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdGF0aWMgUHlPYmplY3QgKm5hbWVfc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZ2xvYmFsX25hbWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNsczsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaW50IHN0YXR1cyA9IDA7CisgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOworICAgIF9QeV9JREVOVElGSUVSKF9fcXVhbG5hbWVfXyk7CiAKICAgICBjb25zdCBjaGFyIGdsb2JhbF9vcCA9IEdMT0JBTDsKIAotICAgIGlmIChuYW1lX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIG5hbWVfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgIGlmIChuYW1lX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KICAgICBpZiAobmFtZSkgeworICAgICAgICBQeV9JTkNSRUYobmFtZSk7CiAgICAgICAgIGdsb2JhbF9uYW1lID0gbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKGdsb2JhbF9uYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGdsb2JhbF9uYW1lID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWVfc3RyKTsKLSAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgZ2xvYmFsX25hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19xdWFsbmFtZV9fKTsKKyAgICAgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX25hbWVfXyk7CisgICAgICAgICAgICBpZiAoZ2xvYmFsX25hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAgICAgfQogCi0gICAgbW9kdWxlX25hbWUgPSB3aGljaG1vZHVsZShvYmosIGdsb2JhbF9uYW1lKTsKKyAgICBtb2R1bGVfbmFtZSA9IHdoaWNobW9kdWxlKG9iaiwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yNTk4LDIxICszMDk5LDIxIEBACiAgICAgICAgZXh0cmEgcGFyYW1ldGVycyBvZiBfX2ltcG9ydF9fIHRvIGZpeCB0aGF0LiAqLwogICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydChtb2R1bGVfbmFtZSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBpbXBvcnQgb2YgbW9kdWxlICVSIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICBvYmosIG1vZHVsZV9uYW1lKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgY2xzID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICBjbHMgPSBnZXRhdHRyaWJ1dGUobW9kdWxlLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgaWYgKGNscyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogYXR0cmlidXRlIGxvb2t1cCAlUy4lUyBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgb2JqLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBhdHRyaWJ1dGUgbG9va3VwICVTIG9uICVTIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICBvYmosIGdsb2JhbF9uYW1lLCBtb2R1bGVfbmFtZSk7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjbHMgIT0gb2JqKSB7CiAgICAgICAgIFB5X0RFQ1JFRihjbHMpOwotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogaXQncyBub3QgdGhlIHNhbWUgb2JqZWN0IGFzICVTLiVTIiwKICAgICAgICAgICAgICAgICAgICAgIG9iaiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI2MjMsMTggKzMxMjQsMjcgQEAKICAgICAgICAgLyogU2VlIHdoZXRoZXIgdGhpcyBpcyBpbiB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5LCBhbmQgaWYKICAgICAgICAgICogc28gZ2VuZXJhdGUgYW4gRVhUIG9wY29kZS4KICAgICAgICAgICovCisgICAgICAgIFB5T2JqZWN0ICpleHRlbnNpb25fa2V5OwogICAgICAgICBQeU9iamVjdCAqY29kZV9vYmo7ICAgICAgLyogZXh0ZW5zaW9uIGNvZGUgYXMgUHl0aG9uIG9iamVjdCAqLwogICAgICAgICBsb25nIGNvZGU7ICAgICAgICAgICAgICAgLyogZXh0ZW5zaW9uIGNvZGUgYXMgQyB2YWx1ZSAqLwogICAgICAgICBjaGFyIHBkYXRhWzVdOwogICAgICAgICBQeV9zc2l6ZV90IG47CiAKLSAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0d29fdHVwbGUsIDAsIG1vZHVsZV9uYW1lKTsKLSAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0d29fdHVwbGUsIDEsIGdsb2JhbF9uYW1lKTsKLSAgICAgICAgY29kZV9vYmogPSBQeURpY3RfR2V0SXRlbShleHRlbnNpb25fcmVnaXN0cnksIHR3b190dXBsZSk7CisgICAgICAgIGV4dGVuc2lvbl9rZXkgPSBQeVR1cGxlX1BhY2soMiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgaWYgKGV4dGVuc2lvbl9rZXkgPT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBjb2RlX29iaiA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5leHRlbnNpb25fcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX2tleSk7CisgICAgICAgIFB5X0RFQ1JFRihleHRlbnNpb25fa2V5KTsKICAgICAgICAgLyogVGhlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5LgogICAgICAgICAgICBUaGlzIGlzIHRoZSBtb3N0IGxpa2VseSBjb2RlIHBhdGguICovCi0gICAgICAgIGlmIChjb2RlX29iaiA9PSBOVUxMKQorICAgICAgICBpZiAoY29kZV9vYmogPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290byBnZW5fZ2xvYmFsOworICAgICAgICB9CiAKICAgICAgICAgLyogWFhYOiBwaWNrbGUucHkgZG9lc24ndCBjaGVjayBuZWl0aGVyIHRoZSB0eXBlLCBub3IgdGhlIHJhbmdlCiAgICAgICAgICAgIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgZXh0ZW5zaW9uX3JlZ2lzdHJ5LiBJdCBzaG91bGQgZm9yCkBAIC0yNjQyLDcgKzMxNTIsNyBAQAogCiAgICAgICAgIC8qIFZlcmlmeSBjb2RlX29iaiBoYXMgdGhlIHJpZ2h0IHR5cGUgYW5kIHZhbHVlLiAqLwogICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayhjb2RlX29iaikpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGV4dGVuc2lvbiBjb2RlICVSIGlzbid0IGFuIGludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwgY29kZV9vYmopOwogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI2NTAsOSArMzE2MCw4IEBACiAgICAgICAgIGNvZGUgPSBQeUxvbmdfQVNfTE9ORyhjb2RlX29iaik7CiAgICAgICAgIGlmIChjb2RlIDw9IDAgfHwgY29kZSA+IDB4N2ZmZmZmZmZMKSB7CiAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGV4dGVuc2lvbiBjb2RlICVsZCBpcyBvdXQgb2YgcmFuZ2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosIGNvZGUpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwgIkNhbid0IHBpY2tsZSAlUjogZXh0ZW5zaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvZGUgJWxkIGlzIG91dCBvZiByYW5nZSIsIG9iaiwgY29kZSk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKQEAgLTI2ODEsMTIwICszMTkwLDg0IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogR2VuZXJhdGUgYSBub3JtYWwgZ2xvYmFsIG9wY29kZSBpZiB3ZSBhcmUgdXNpbmcgYSBwaWNrbGUKLSAgICAgICAgICAgcHJvdG9jb2wgPD0gMiwgb3IgaWYgdGhlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUKLSAgICAgICAgICAgZXh0ZW5zaW9uIHJlZ2lzdHJ5LiAqLwotICAgICAgICBQeU9iamVjdCAqZW5jb2RlZDsKLSAgICAgICAgUHlPYmplY3QgKigqdW5pY29kZV9lbmNvZGVyKShQeU9iamVjdCAqKTsKLQogICBnZW5fZ2xvYmFsOgotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmdsb2JhbF9vcCwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgc3RhY2tfZ2xvYmFsX29wID0gU1RBQ0tfR0xPQkFMOwogCi0gICAgICAgIC8qIFNpbmNlIFB5dGhvbiAzLjAgbm93IHN1cHBvcnRzIG5vbi1BU0NJSSBpZGVudGlmaWVycywgd2UgZW5jb2RlIGJvdGgKLSAgICAgICAgICAgdGhlIG1vZHVsZSBuYW1lIGFuZCB0aGUgZ2xvYmFsIG5hbWUgdXNpbmcgVVRGLTguIFdlIGRvIHNvIG9ubHkgd2hlbgotICAgICAgICAgICB3ZSBhcmUgdXNpbmcgdGhlIHBpY2tsZSBwcm90b2NvbCBuZXdlciB0aGFuIHZlcnNpb24gMy4gVGhpcyBpcyB0bwotICAgICAgICAgICBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFVucGlja2xlciBydW5uaW5nIG9uIFB5dGhvbiAyLnguICovCi0gICAgICAgIGlmIChzZWxmLT5wcm90byA+PSAzKSB7Ci0gICAgICAgICAgICB1bmljb2RlX2VuY29kZXIgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nOworICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgbW9kdWxlX25hbWUsIDApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgZ2xvYmFsX25hbWUsIDApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnN0YWNrX2dsb2JhbF9vcCwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB1bmljb2RlX2VuY29kZXIgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZzsKLSAgICAgICAgfQorICAgICAgICAgICAgLyogR2VuZXJhdGUgYSBub3JtYWwgZ2xvYmFsIG9wY29kZSBpZiB3ZSBhcmUgdXNpbmcgYSBwaWNrbGUKKyAgICAgICAgICAgICAgIHByb3RvY29sIDwgNCwgb3IgaWYgdGhlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgIGV4dGVuc2lvbiByZWdpc3RyeS4gKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOworICAgICAgICAgICAgUHlPYmplY3QgKigqdW5pY29kZV9lbmNvZGVyKShQeU9iamVjdCAqKTsKIAotICAgICAgICAvKiBGb3IgcHJvdG9jb2wgPCAzIGFuZCBpZiB0aGUgdXNlciBkaWRuJ3QgcmVxdWVzdCBhZ2FpbnN0IGRvaW5nIHNvLAotICAgICAgICAgICB3ZSBjb252ZXJ0IG1vZHVsZSBuYW1lcyB0byB0aGUgb2xkIDIueCBtb2R1bGUgbmFtZXMuICovCi0gICAgICAgIGlmIChzZWxmLT5maXhfaW1wb3J0cykgewotICAgICAgICAgICAgUHlPYmplY3QgKmtleTsKLSAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtOwotCi0gICAgICAgICAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmZ2xvYmFsX29wLCAxKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihuYW1lX21hcHBpbmdfM3RvMiwga2V5KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soaXRlbSkgfHwgUHlUdXBsZV9HRVRfU0laRShpdGVtKSAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgMi10dXBsZXMsIG5vdCAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7CisKKyAgICAgICAgICAgIC8qIEZvciBwcm90b2NvbCA8IDMgYW5kIGlmIHRoZSB1c2VyIGRpZG4ndCByZXF1ZXN0IGFnYWluc3QgZG9pbmcKKyAgICAgICAgICAgICAgIHNvLCB3ZSBjb252ZXJ0IG1vZHVsZSBuYW1lcyB0byB0aGUgb2xkIDIueCBtb2R1bGUgbmFtZXMuICovCisgICAgICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPCAzICYmIHNlbGYtPmZpeF9pbXBvcnRzKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpeF9pbXBvcnRzKCZtb2R1bGVfbmFtZSwgJmdsb2JhbF9uYW1lKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIobW9kdWxlX25hbWUpOwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKGdsb2JhbF9uYW1lKTsKLSAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMCk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDEpOwotICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG1vZHVsZV9uYW1lKSB8fAotICAgICAgICAgICAgICAgICAgICAhUHlVbmljb2RlX0NoZWNrKGdsb2JhbF9uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHZhbHVlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHBhaXJzIG9mIHN0ciwgbm90ICglLjIwMHMsICUuMjAwcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShtb2R1bGVfbmFtZSktPnRwX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGdsb2JhbF9uYW1lKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKGdsb2JhbF9uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoaW1wb3J0X21hcHBpbmdfM3RvMiwgbW9kdWxlX25hbWUpOwotICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhpdGVtKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcgdmFsdWVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgc3RyaW5ncywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIobW9kdWxlX25hbWUpOwotICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gaXRlbTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYobW9kdWxlX25hbWUpOworICAgICAgICAgICAgLyogU2luY2UgUHl0aG9uIDMuMCBub3cgc3VwcG9ydHMgbm9uLUFTQ0lJIGlkZW50aWZpZXJzLCB3ZSBlbmNvZGUKKyAgICAgICAgICAgICAgIGJvdGggdGhlIG1vZHVsZSBuYW1lIGFuZCB0aGUgZ2xvYmFsIG5hbWUgdXNpbmcgVVRGLTguIFdlIGRvIHNvCisgICAgICAgICAgICAgICBvbmx5IHdoZW4gd2UgYXJlIHVzaW5nIHRoZSBwaWNrbGUgcHJvdG9jb2wgbmV3ZXIgdGhhbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAzLiBUaGlzIGlzIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgVW5waWNrbGVyIHJ1bm5pbmcKKyAgICAgICAgICAgICAgIG9uIFB5dGhvbiAyLnguICovCisgICAgICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPT0gMykgeworICAgICAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmc7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmljb2RlX2VuY29kZXIgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIobW9kdWxlX25hbWUpOworICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgbW9kdWxlIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBzZWxmLT5wcm90byk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KLSAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2Rlcihtb2R1bGVfbmFtZSk7Ci0gICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgbW9kdWxlIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLCBtb2R1bGVfbmFtZSwgc2VsZi0+cHJvdG8pOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZihfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICAvKiBTYXZlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuICovCi0gICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIoZ2xvYmFsX25hbWUpOwotICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlIGdsb2JhbCBpZGVudGlmaWVyICclUycgdXNpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKKyAgICAgICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KKyAgICAgICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIoZ2xvYmFsX25hbWUpOworICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgZ2xvYmFsIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICBpZihfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotCiAgICAgICAgIC8qIE1lbW9pemUgdGhlIG9iamVjdC4gKi8KICAgICAgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI4MTIsMzAgKzMyODUsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1zYXZlX2VsbGlwc2lzKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJFbGxpcHNpcyIpOwotICAgIGludCByZXM7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgUHlfRWxsaXBzaXMsIHN0cik7Ci0gICAgUHlfREVDUkVGKHN0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotc2F2ZV9ub3RpbXBsZW1lbnRlZChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpzdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiTm90SW1wbGVtZW50ZWQiKTsKLSAgICBpbnQgcmVzOwotICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJlcyA9IHNhdmVfZ2xvYmFsKHNlbGYsIFB5X05vdEltcGxlbWVudGVkLCBzdHIpOwotICAgIFB5X0RFQ1JFRihzdHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQKIHNhdmVfc2luZ2xldG9uX3R5cGUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnNpbmdsZXRvbikKIHsKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOwpAQCAtMjg3NSw3ICszMzI0LDcgQEAKICAgICBjb25zdCBjaGFyIGJpbnBlcnNpZF9vcCA9IEJJTlBFUlNJRDsKIAogICAgIFB5X0lOQ1JFRihvYmopOwotICAgIHBpZCA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIGZ1bmMsIG9iaik7CisgICAgcGlkID0gX1BpY2tsZV9GYXN0Q2FsbChmdW5jLCBvYmopOwogICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC0yOTIzLDE0ICszMzcyLDkgQEAKIGdldF9jbGFzcyhQeU9iamVjdCAqb2JqKQogewogICAgIFB5T2JqZWN0ICpjbHM7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzdHJfY2xhc3M7CisgICAgX1B5X0lERU5USUZJRVIoX19jbGFzc19fKTsKIAotICAgIGlmIChzdHJfY2xhc3MgPT0gTlVMTCkgewotICAgICAgICBzdHJfY2xhc3MgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19jbGFzc19fIik7Ci0gICAgICAgIGlmIChzdHJfY2xhc3MgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBjbHMgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgc3RyX2NsYXNzKTsKKyAgICBjbHMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19jbGFzc19fKTsKICAgICBpZiAoY2xzID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMjk1MiwxNyArMzM5NiwxOCBAQAogICAgIFB5T2JqZWN0ICpzdGF0ZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmxpc3RpdGVtcyA9IFB5X05vbmU7CiAgICAgUHlPYmplY3QgKmRpY3RpdGVtcyA9IFB5X05vbmU7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKLQotICAgIGludCB1c2VfbmV3b2JqID0gc2VsZi0+cHJvdG8gPj0gMjsKKyAgICBpbnQgdXNlX25ld29iaiA9IDAsIHVzZV9uZXdvYmpfZXggPSAwOwogCiAgICAgY29uc3QgY2hhciByZWR1Y2Vfb3AgPSBSRURVQ0U7CiAgICAgY29uc3QgY2hhciBidWlsZF9vcCA9IEJVSUxEOwogICAgIGNvbnN0IGNoYXIgbmV3b2JqX29wID0gTkVXT0JKOworICAgIGNvbnN0IGNoYXIgbmV3b2JqX2V4X29wID0gTkVXT0JKX0VYOwogCiAgICAgc2l6ZSA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKICAgICBpZiAoc2l6ZSA8IDIgfHwgc2l6ZSA+IDUpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJ0dXBsZSByZXR1cm5lZCBieSAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgInR1cGxlIHJldHVybmVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJfX3JlZHVjZV9fIG11c3QgY29udGFpbiAyIHRocm91Z2ggNSBlbGVtZW50cyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjk3MiwxMiArMzQxNywxMiBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soY2FsbGFibGUpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiZmlyc3QgaXRlbSBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJmaXJzdCBpdGVtIG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGNhbGxhYmxlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3R1cCkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJzZWNvbmQgaXRlbSBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJzZWNvbmQgaXRlbSBvZiB0aGUgdHVwbGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF9fcmVkdWNlX18gbXVzdCBiZSBhIHR1cGxlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0yOTg4LDcgKzM0MzMsNyBAQAogICAgIGlmIChsaXN0aXRlbXMgPT0gUHlfTm9uZSkKICAgICAgICAgbGlzdGl0ZW1zID0gTlVMTDsKICAgICBlbHNlIGlmICghUHlJdGVyX0NoZWNrKGxpc3RpdGVtcykpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsICJmb3VydGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsICJmb3VydGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgogICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF9fcmVkdWNlX18gbXVzdCBiZSBhbiBpdGVyYXRvciwgbm90ICVzIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobGlzdGl0ZW1zKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI5OTcsNDAgKzM0NDIsODEgQEAKICAgICBpZiAoZGljdGl0ZW1zID09IFB5X05vbmUpCiAgICAgICAgIGRpY3RpdGVtcyA9IE5VTEw7CiAgICAgZWxzZSBpZiAoIVB5SXRlcl9DaGVjayhkaWN0aXRlbXMpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLCAiZmlmdGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsICJmaWZ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGFuIGl0ZXJhdG9yLCBub3QgJXMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShkaWN0aXRlbXMpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIC8qIFByb3RvY29sIDIgc3BlY2lhbCBjYXNlOiBpZiBjYWxsYWJsZSdzIG5hbWUgaXMgX19uZXdvYmpfXywgdXNlCi0gICAgICAgTkVXT0JKLiAqLwotICAgIGlmICh1c2VfbmV3b2JqKSB7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqbmV3b2JqX3N0ciA9IE5VTEwsICpuYW1lX3N0ciA9IE5VTEw7CisgICAgaWYgKHNlbGYtPnByb3RvID49IDIpIHsKICAgICAgICAgUHlPYmplY3QgKm5hbWU7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKIAotICAgICAgICBpZiAobmV3b2JqX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXdvYmpfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmV3b2JqX18iKTsKLSAgICAgICAgICAgIG5hbWVfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgICAgICBpZiAobmV3b2JqX3N0ciA9PSBOVUxMIHx8IG5hbWVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgbmFtZSA9IFB5T2JqZWN0X0dldEF0dHIoY2FsbGFibGUsIG5hbWVfc3RyKTsKKyAgICAgICAgbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoY2FsbGFibGUsICZQeUlkX19fbmFtZV9fKTsKICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgdXNlX25ld29iaiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX2V4X18pOworICAgICAgICAgICAgdXNlX25ld29ial9leCA9IFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKAorICAgICAgICAgICAgICAgICAgICBuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX25ld29ial9leF9fKSkgPT0gMDsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOwogICAgICAgICAgICAgdXNlX25ld29iaiA9IFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKG5hbWUsIG5ld29ial9zdHIpID09IDA7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUoCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbmV3b2JqX18pKSA9PSAwOwogICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICh1c2VfbmV3b2JqKSB7CisKKyAgICBpZiAodXNlX25ld29ial9leCkgeworICAgICAgICBQeU9iamVjdCAqY2xzOworICAgICAgICBQeU9iamVjdCAqYXJnczsKKyAgICAgICAgUHlPYmplY3QgKmt3YXJnczsKKworICAgICAgICBpZiAoUHlfU0laRShhcmd0dXApICE9IDMpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIG9mIHRoZSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4YWN0bHkgMywgbm90ICV6ZCIsIFB5X1NJWkUoYXJndHVwKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjbHMgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMCk7CisgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgaXRlbSBmcm9tIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSBjbGFzcywgbm90ICUuMjAwcyIsIFB5X1RZUEUoY2xzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYXJncyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAxKTsKKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBpdGVtIGZyb20gTkVXT0JKX0VYIGFyZ3VtZW50IHR1cGxlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBhIHR1cGxlLCBub3QgJS4yMDBzIiwgUHlfVFlQRShhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga3dhcmdzID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0dXAsIDIpOworICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhrd2FyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXJkIGl0ZW0gZnJvbSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgZGljdCwgbm90ICUuMjAwcyIsIFB5X1RZUEUoa3dhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2F2ZShzZWxmLCBjbHMsIDApIDwgMCB8fAorICAgICAgICAgICAgc2F2ZShzZWxmLCBhcmdzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIHNhdmUoc2VsZiwga3dhcmdzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsICZuZXdvYmpfZXhfb3AsIDEpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHVzZV9uZXdvYmopIHsKICAgICAgICAgUHlPYmplY3QgKmNsczsKICAgICAgICAgUHlPYmplY3QgKm5ld2FyZ3R1cDsKICAgICAgICAgUHlPYmplY3QgKm9ial9jbGFzczsKQEAgLTMwMzgsMTMgKzM1MjQsMTMgQEAKIAogICAgICAgICAvKiBTYW5pdHkgY2hlY2tzLiAqLwogICAgICAgICBpZiAoUHlfU0laRShhcmd0dXApIDwgMSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJfX25ld29ial9fIGFyZ2xpc3QgaXMgZW1wdHkiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgIl9fbmV3b2JqX18gYXJnbGlzdCBpcyBlbXB0eSIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgY2xzID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0dXAsIDApOwogICAgICAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgImFyZ3NbMF0gZnJvbSAiCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX25ld29ial9fIGFyZ3MgaXMgbm90IGEgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC0zMDU0LDcgKzM1NDAsNyBAQAogICAgICAgICAgICAgcCA9IG9ial9jbGFzcyAhPSBjbHM7ICAgIC8qIHRydWUgaWZmIGEgcHJvYmxlbSAqLwogICAgICAgICAgICAgUHlfREVDUkVGKG9ial9jbGFzcyk7CiAgICAgICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiYXJnc1swXSBmcm9tICIKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19uZXdvYmpfXyBhcmdzIGhhcyB0aGUgd3JvbmcgY2xhc3MiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBAIC0zMTE0LDggKzM2MDAsMjMgQEAKICAgICAgICB0aGUgY2FsbGVyIGRvIG5vdCB3YW50IHRvIG1lbW9pemUgdGhlIG9iamVjdC4gTm90IHBhcnRpY3VsYXJseSB1c2VmdWwsCiAgICAgICAgYnV0IHRoYXQgaXMgdG8gbWltaWMgdGhlIGJlaGF2aW9yIHNhdmVfcmVkdWNlKCkgaW4gcGlja2xlLnB5IHdoZW4KICAgICAgICBvYmogaXMgTm9uZS4gKi8KLSAgICBpZiAob2JqICYmIG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG9iaiAhPSBOVUxMKSB7CisgICAgICAgIC8qIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgICAgICByZWN1cnNpdmUuIEluIHRoaXMgY2FzZSwgdGhyb3cgYXdheSBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUKKyAgICAgICAgICAgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4gKi8KKyAgICAgICAgaWYgKFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBvYmopKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyIHBvcF9vcCA9IFBPUDsKKworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZwb3Bfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAobWVtb19nZXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAobGlzdGl0ZW1zICYmIGJhdGNoX2xpc3Qoc2VsZiwgbGlzdGl0ZW1zKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTMxNDAsNiArMzY0MSw5IEBACiAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSA9IE5VTEw7CiAgICAgaW50IHN0YXR1cyA9IDA7CiAKKyAgICBpZiAoX1BpY2tsZXJfT3Bjb2RlQm91bmRhcnkoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgcGlja2xpbmcgYW4gb2JqZWN0IikpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtMzE2OCwxNCArMzY3Miw2IEBACiAgICAgICAgIHN0YXR1cyA9IHNhdmVfbm9uZShzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQotICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9FbGxpcHNpcykgewotICAgICAgICBzdGF0dXMgPSBzYXZlX2VsbGlwc2lzKHNlbGYsIG9iaik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqID09IFB5X05vdEltcGxlbWVudGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNhdmVfbm90aW1wbGVtZW50ZWQoc2VsZiwgb2JqKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KICAgICBlbHNlIGlmIChvYmogPT0gUHlfRmFsc2UgfHwgb2JqID09IFB5X1RydWUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9ib29sKHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTMyMTAsNiArMzcwNiwxNCBAQAogICAgICAgICBzdGF0dXMgPSBzYXZlX2RpY3Qoc2VsZiwgb2JqKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICZQeVNldF9UeXBlKSB7CisgICAgICAgIHN0YXR1cyA9IHNhdmVfc2V0KHNlbGYsIG9iaik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlGcm96ZW5TZXRfVHlwZSkgeworICAgICAgICBzdGF0dXMgPSBzYXZlX2Zyb3plbnNldChzZWxmLCBvYmopOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5TGlzdF9UeXBlKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfbGlzdChzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CkBAIC0zMjI0LDE2ICszNzI4LDYgQEAKICAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlGdW5jdGlvbl9UeXBlKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgTlVMTCk7Ci0gICAgICAgIGlmIChzdGF0dXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUGlja2xlRXJyb3IpKSB7Ci0gICAgICAgICAgICAvKiBmYWxsIGJhY2sgdG8gcmVkdWNlICovCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5Q0Z1bmN0aW9uX1R5cGUpIHsKLSAgICAgICAgc3RhdHVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBOVUxMKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIApAQCAtMzI0NCwxMiArMzczOCwyMiBAQAogICAgICAqIF9fcmVkdWNlX2V4X18gbWV0aG9kLCBvciB0aGUgb2JqZWN0J3MgX19yZWR1Y2VfXyBtZXRob2QuCiAgICAgICovCiAgICAgaWYgKHNlbGYtPmRpc3BhdGNoX3RhYmxlID09IE5VTEwpIHsKLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeURpY3RfR2V0SXRlbShkaXNwYXRjaF90YWJsZSwgKFB5T2JqZWN0ICopdHlwZSk7Ci0gICAgICAgIC8qIFB5RGljdF9HZXRJdGVtKCkgdW5saWtlIFB5T2JqZWN0X0dldEl0ZW0oKSBhbmQKLSAgICAgICAgICAgUHlPYmplY3RfR2V0QXR0cigpIHJldHVybnMgYSBib3Jyb3dlZCByZWYgKi8KLSAgICAgICAgUHlfWElOQ1JFRihyZWR1Y2VfZnVuYyk7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+ZGlzcGF0Y2hfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgICAgIGlmIChyZWR1Y2VfZnVuYyA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcigpIHJldHVybnMgYSBib3Jyb3dlZCByZWZlcmVuY2UuCisgICAgICAgICAgICAgICBJbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0SXRlbSBhbmQgX1B5T2JqZWN0X0dldEF0dHJJZCB1c2VkIGJlbG93LiAqLworICAgICAgICAgICAgUHlfSU5DUkVGKHJlZHVjZV9mdW5jKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0SXRlbShzZWxmLT5kaXNwYXRjaF90YWJsZSwgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0SXRlbShzZWxmLT5kaXNwYXRjaF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKXR5cGUpOwogICAgICAgICBpZiAocmVkdWNlX2Z1bmMgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0zMjU5LDI1ICszNzYzLDE2IEBACiAgICAgfQogICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihvYmopOwotICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCByZWR1Y2VfZnVuYywgb2JqKTsKKyAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZV9GYXN0Q2FsbChyZWR1Y2VfZnVuYywgb2JqKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlUeXBlX0lzU3VidHlwZSh0eXBlLCAmUHlUeXBlX1R5cGUpKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgTlVMTCk7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqcmVkdWNlX3N0ciA9IE5VTEw7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqcmVkdWNlX2V4X3N0ciA9IE5VTEw7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fcmVkdWNlX18pOworICAgICAgICBfUHlfSURFTlRJRklFUihfX3JlZHVjZV9leF9fKTsKIAotICAgICAgICAvKiBDYWNoZSB0aGUgbmFtZSBvZiB0aGUgcmVkdWNlIG1ldGhvZHMuICovCi0gICAgICAgIGlmIChyZWR1Y2Vfc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlZHVjZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19yZWR1Y2VfXyIpOwotICAgICAgICAgICAgaWYgKHJlZHVjZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgcmVkdWNlX2V4X3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JlZHVjZV9leF9fIik7Ci0gICAgICAgICAgICBpZiAocmVkdWNlX2V4X3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KIAogICAgICAgICAvKiBYWFg6IElmIHRoZSBfX3JlZHVjZV9fIG1ldGhvZCBpcyBkZWZpbmVkLCBfX3JlZHVjZV9leF9fIGlzCiAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBhcyBfX3JlZHVjZV9fLiBXaGlsZSB0aGlzIGlzIGNvbnZlbmllbnQsIHRoaXMKQEAgLTMyODgsMjYgKzM3ODMsMzQgQEAKICAgICAgICAgICAgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0byBjaGVjayBmb3IgYSBfX3JlZHVjZV9fIG1ldGhvZC4gKi8KIAogICAgICAgICAvKiBDaGVjayBmb3IgYSBfX3JlZHVjZV9leF9fIG1ldGhvZC4gKi8KLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgcmVkdWNlX2V4X3N0cik7CisgICAgICAgIHJlZHVjZV9mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fcmVkdWNlX2V4X18pOwogICAgICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlPYmplY3QgKnByb3RvOwogICAgICAgICAgICAgcHJvdG8gPSBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+cHJvdG8pOwogICAgICAgICAgICAgaWYgKHByb3RvICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCByZWR1Y2VfZnVuYywgcHJvdG8pOworICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IF9QaWNrbGVfRmFzdENhbGwocmVkdWNlX2Z1bmMsIHByb3RvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGEgX19yZWR1Y2VfXyBtZXRob2QuICovCi0gICAgICAgICAgICByZWR1Y2VfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCByZWR1Y2Vfc3RyKTsKLSAgICAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlPYmplY3RfQ2FsbChyZWR1Y2VfZnVuYywgZW1wdHlfdHVwbGUsIE5VTEwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsICJjYW4ndCBwaWNrbGUgJyUuMjAwcycgb2JqZWN0OiAlUiIsCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIENoZWNrIGZvciBhIF9fcmVkdWNlX18gbWV0aG9kLiAqLworICAgICAgICAgICAgcmVkdWNlX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19yZWR1Y2VfXyk7CisgICAgICAgICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplbXB0eV90dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5T2JqZWN0X0NhbGwocmVkdWNlX2Z1bmMsIGVtcHR5X3R1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVtcHR5X3R1cGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSAnJS4yMDBzJyBvYmplY3Q6ICVSIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgb2JqKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQpAQCAtMzMyMyw3ICszODI2LDggQEAKICAgICB9CiAKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVkdWNlX3ZhbHVlKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX19yZWR1Y2VfXyBtdXN0IHJldHVybiBhIHN0cmluZyBvciB0dXBsZSIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTMzMzUsNiArMzgzOSw3IEBACiAgICAgICAgIHN0YXR1cyA9IC0xOwogICAgIH0KICAgZG9uZToKKwogICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwogICAgIFB5X1hERUNSRUYocmVkdWNlX2Z1bmMpOwogICAgIFB5X1hERUNSRUYocmVkdWNlX3ZhbHVlKTsKQEAgLTMzNTUsNiArMzg2MCw4IEBACiAgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKXNlbGYtPnByb3RvOwogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgaGVhZGVyLCAyKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KQorICAgICAgICAgICAgc2VsZi0+ZnJhbWluZyA9IDE7CiAgICAgfQogCiAgICAgaWYgKHNhdmUoc2VsZiwgb2JqLCAwKSA8IDAgfHwKQEAgLTMzNjQsMTYgKzM4NzEsMjEgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKFBpY2tsZXJfY2xlYXJfbWVtb19kb2MsCi0iY2xlYXJfbWVtbygpIC0+IE5vbmUuIENsZWFycyB0aGUgcGlja2xlcidzIFwibWVtb1wiLiIKLSJcbiIKLSJUaGUgbWVtbyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZW1lbWJlcnMgd2hpY2ggb2JqZWN0cyB0aGVcbiIKLSJwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZVxuIgotInBpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlblxuIgotInJlLXVzaW5nIHBpY2tsZXJzLiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLlBpY2tsZXIuY2xlYXJfbWVtbworCitDbGVhcnMgdGhlIHBpY2tsZXIncyAibWVtbyIuCisKK1RoZSBtZW1vIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlbWVtYmVycyB3aGljaCBvYmplY3RzIHRoZQorcGlja2xlciBoYXMgYWxyZWFkeSBzZWVuLCBzbyB0aGF0IHNoYXJlZCBvciByZWN1cnNpdmUgb2JqZWN0cyBhcmUKK3BpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbgorcmUtdXNpbmcgcGlja2xlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QaWNrbGVyX2NsZWFyX21lbW8oUGlja2xlck9iamVjdCAqc2VsZikKK19waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04NjY1Yzg2NThhYWEwOTRiIGlucHV0PTAxYmRhZDUyZjNkOTNlNTZdKi8KIHsKICAgICBpZiAoc2VsZi0+bWVtbykKICAgICAgICAgUHlNZW1vVGFibGVfQ2xlYXIoc2VsZi0+bWVtbyk7CkBAIC0zMzgxLDI3ICszODkzLDMxIEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihQaWNrbGVyX2R1bXBfZG9jLAotImR1bXAob2JqKSAtPiBOb25lLiBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuUGlja2xlci5kdW1wCisKKyAgb2JqOiBvYmplY3QKKyAgLworCitXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgb3BlbiBmaWxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUGlja2xlcl9kdW1wKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9QaWNrbGVyX2R1bXAoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04N2VjYWQxMjYxZTAyYWM3IGlucHV0PTU1MmViMWMwZjUyMjYwZDldKi8KIHsKLSAgICBQeU9iamVjdCAqb2JqOwotCiAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgUGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IChpc3N1ZTM2NjQpLgogICAgICAgIERldmVsb3BlcnMgb2Z0ZW4gZm9yZ2V0IHRvIGNhbGwgX19pbml0X18oKSBpbiB0aGVpciBzdWJjbGFzc2VzLCB3aGljaAogICAgICAgIHdvdWxkIHRyaWdnZXIgYSBzZWdmYXVsdCB3aXRob3V0IHRoaXMgY2hlY2suICovCiAgICAgaWYgKHNlbGYtPndyaXRlID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAlcy5fX2luaXRfXygpIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZHVtcCIsICZvYmopKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChfUGlja2xlcl9DbGVhckJ1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zNDE1LDEwICszOTMxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBQaWNrbGVyX21ldGhvZHNbXSA9IHsKLSAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pUGlja2xlcl9kdW1wLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFBpY2tsZXJfZHVtcF9kb2N9LAotICAgIHsiY2xlYXJfbWVtbyIsIChQeUNGdW5jdGlvbilQaWNrbGVyX2NsZWFyX21lbW8sIE1FVEhfTk9BUkdTLAotICAgICBQaWNrbGVyX2NsZWFyX21lbW9fZG9jfSwKKyAgICBfUElDS0xFX1BJQ0tMRVJfRFVNUF9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJfQ0xFQVJfTUVNT19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM0MzEsNyArMzk0NSw2IEBACiAgICAgUHlfWERFQ1JFRihzZWxmLT53cml0ZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+ZGlzcGF0Y2hfdGFibGUpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+YXJnKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmZhc3RfbWVtbyk7CiAKICAgICBQeU1lbW9UYWJsZV9EZWwoc2VsZi0+bWVtbyk7CkBAIC0zNDQ1LDcgKzM5NTgsNiBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPndyaXRlKTsKICAgICBQeV9WSVNJVChzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X1ZJU0lUKHNlbGYtPmRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9WSVNJVChzZWxmLT5hcmcpOwogICAgIFB5X1ZJU0lUKHNlbGYtPmZhc3RfbWVtbyk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNDU3LDcgKzM5NjksNiBAQAogICAgIFB5X0NMRUFSKHNlbGYtPndyaXRlKTsKICAgICBQeV9DTEVBUihzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9DTEVBUihzZWxmLT5hcmcpOwogICAgIFB5X0NMRUFSKHNlbGYtPmZhc3RfbWVtbyk7CiAKICAgICBpZiAoc2VsZi0+bWVtbyAhPSBOVUxMKSB7CkBAIC0zNDY5LDQ5ICszOTgwLDQ2IEBACiB9CiAKIAotUHlEb2NfU1RSVkFSKFBpY2tsZXJfZG9jLAotIlBpY2tsZXIoZmlsZSwgcHJvdG9jb2w9Tm9uZSkiCi0iXG4iCi0iVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgotIlxuIgotIlRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlXG4iCi0iZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdFxuIgotInByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvclxuIgotIlB5dGhvbiAzLjAuXG4iCi0iXG4iCi0iU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdFxuIgotInByb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlXG4iCi0ibW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGVcbiIKLSJwcm9kdWNlZC5cbiIKLSJcbiIKLSJUaGUgZmlsZSBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGVcbiIKLSJieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeVxuIgotIndyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdFxuIgotIm1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgotIlxuIgotIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKLSJtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uXG4iCi0iMi54LCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuUGlja2xlci5fX2luaXRfXworCisgIGZpbGU6IG9iamVjdAorICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgorCitUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuCitwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0Citwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wKK3ZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZQordmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUKK2J5dGVzIGFyZ3VtZW50LiBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5Cit3cml0aW5nLCBhIGlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMKK3RoaXMgaW50ZXJmYWNlLgorCitJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkKK3RvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uCisyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIGludAotUGlja2xlcl9pbml0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NmUyMjlmM2IxZjQzMzJmIGlucHV0PWI4Y2RlYjdlM2Y1ZWU2NzRdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCAwfTsKLSAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqcHJvdG9fb2JqID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwogICAgIF9QeV9JREVOVElGSUVSKHBlcnNpc3RlbnRfaWQpOwogICAgIF9QeV9JREVOVElGSUVSKGRpc3BhdGNoX3RhYmxlKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POlBpY2tsZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmZpbGUsICZwcm90b19vYmosICZmaXhfaW1wb3J0cykpCi0gICAgICAgIHJldHVybiAtMTsKLQogICAgIC8qIEluIGNhc2Ugb2YgbXVsdGlwbGUgX19pbml0X18oKSBjYWxscywgY2xlYXIgcHJldmlvdXMgY29udGVudC4gKi8KICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCkKICAgICAgICAgKHZvaWQpUGlja2xlcl9jbGVhcihzZWxmKTsKIAotICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChzZWxmLCBwcm90b19vYmosIGZpeF9pbXBvcnRzKSA8IDApCisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHNlbGYsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoX1BpY2tsZXJfU2V0T3V0cHV0U3RyZWFtKHNlbGYsIGZpbGUpIDwgMCkKQEAgLTM1MzIsNyArNDA0MCw2IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5mYXN0ID0gMDsKICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAwOwogICAgIHNlbGYtPmZhc3RfbWVtbyA9IE5VTEw7CkBAIC0zNTUwLDkgKzQwNTcsMTEgQEAKICAgICAgICAgaWYgKHNlbGYtPmRpc3BhdGNoX3RhYmxlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CiAKKwogLyogRGVmaW5lIGEgcHJveHkgb2JqZWN0IGZvciB0aGUgUGlja2xlcidzIGludGVybmFsIG1lbW8gb2JqZWN0LiBUaGlzIGlzIHRvCiAgKiBhdm9pZCBicmVha2luZyBjb2RlIGxpa2U6CiAgKiAgcGlja2xlci5tZW1vLmNsZWFyKCkKQEAgLTM1NjMsMjcgKzQwNzIsMzAgQEAKICAqIGludGVudGlvbmFsLCBhcyB0aGVzZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFjay1ib3ggaW1wbGVtZW50YXRpb24gZGV0YWlscy4KICAqLwogCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfSEVBRAotICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7IC8qIFBpY2tsZXIgd2hvc2UgbWVtbyB0YWJsZSB3ZSdyZSBwcm94eWluZy4gKi8KLX0gUGlja2xlck1lbW9Qcm94eU9iamVjdDsKKy8qW2NsaW5pYyBpbnB1dF0KK19waWNrbGUuUGlja2xlck1lbW9Qcm94eS5jbGVhcgogCi1QeURvY19TVFJWQVIocG1wX2NsZWFyX2RvYywKLSJtZW1vLmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wbXBfY2xlYXIoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcl9pbXBsKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWZiOTM3MGQ0OGFlOGIwNSBpbnB1dD1jY2MxODZkYWNkMGYxNDA1XSovCiB7CiAgICAgaWYgKHNlbGYtPnBpY2tsZXItPm1lbW8pCiAgICAgICAgIFB5TWVtb1RhYmxlX0NsZWFyKHNlbGYtPnBpY2tsZXItPm1lbW8pOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIocG1wX2NvcHlfZG9jLAotIm1lbW8uY29weSgpIC0+IG5ld19tZW1vLiAgQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkuY29weQorCitDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBtcF9jb3B5KFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmI4M2E5MTlkMjkyMjVlZiBpbnB1dD1iNzMwNDM0ODVhYzMwYjM2XSovCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5TWVtb1RhYmxlICptZW1vOwpAQCAtMzYyMCwxNCArNDEzMiwxOCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIocG1wX3JlZHVjZV9kb2MsCi0ibWVtby5fX3JlZHVjZV9fKCkuIFBpY2tsaW5nIHN1cHBvcnQuIik7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkuX19yZWR1Y2VfXworCitJbXBsZW1lbnQgcGlja2xlIHN1cHBvcnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wbXBfcmVkdWNlKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJlYmJhMTE2ODg2M2FiMWQgaW5wdXQ9MmY3YzU0MGUyNGI3YWFlNF0qLwogewogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWUsICpkaWN0X2FyZ3M7Ci0gICAgUHlPYmplY3QgKmNvbnRlbnRzID0gcG1wX2NvcHkoc2VsZik7CisgICAgUHlPYmplY3QgKmNvbnRlbnRzID0gX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChzZWxmKTsKICAgICBpZiAoY29udGVudHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM2NTAsOSArNDE2Niw5IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBwaWNrbGVycHJveHlfbWV0aG9kc1tdID0gewotICAgIHsiY2xlYXIiLCAgICAgIChQeUNGdW5jdGlvbilwbXBfY2xlYXIsICBNRVRIX05PQVJHUywgIHBtcF9jbGVhcl9kb2N9LAotICAgIHsiY29weSIsICAgICAgIChQeUNGdW5jdGlvbilwbXBfY29weSwgICBNRVRIX05PQVJHUywgIHBtcF9jb3B5X2RvY30sCi0gICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKXBtcF9yZWR1Y2UsIE1FVEhfVkFSQVJHUywgcG1wX3JlZHVjZV9kb2N9LAorICAgIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM4NjQsNyArNDM4MCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCi0gICAgUGlja2xlcl9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19fZG9jX18sICAgIC8qdHBfZG9jKi8KICAgICAodHJhdmVyc2Vwcm9jKVBpY2tsZXJfdHJhdmVyc2UsICAgICAvKnRwX3RyYXZlcnNlKi8KICAgICAoaW5xdWlyeSlQaWNrbGVyX2NsZWFyLCAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KQEAgLTM4NzksNyArNDM5NSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIChpbml0cHJvYylQaWNrbGVyX2luaXQsICAgICAgICAgICAgIC8qdHBfaW5pdCovCisgICAgX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fLCAgICAgICAgICAgLyp0cF9pbml0Ki8KICAgICBQeVR5cGVfR2VuZXJpY0FsbG9jLCAgICAgICAgICAgICAgICAvKnRwX2FsbG9jKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKnRwX25ldyovCiAgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgLyp0cF9mcmVlKi8KQEAgLTM5MDUsOCArNDQyMSw5IEBACiBzdGF0aWMgUHlfc3NpemVfdAogbWFya2VyKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaWYgKHNlbGYtPm51bV9tYXJrcyA8IDEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgImNvdWxkIG5vdCBmaW5kIE1BUksiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJjb3VsZCBub3QgZmluZCBNQVJLIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTM5MjMsNyArNDQ0MCw4IEBACiBzdGF0aWMgaW50CiBiYWRfcmVhZGxpbmUodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAicGlja2xlIGRhdGEgd2FzIHRydW5jYXRlZCIpOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgInBpY2tsZSBkYXRhIHdhcyB0cnVuY2F0ZWQiKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTM5ODQsMTcgKzQ1MDIsMTUgQEAKICAqIGFzIGEgQyBQeV9zc2l6ZV90LCBvciAtMSBpZiBpdCdzIGhpZ2hlciB0aGFuIFBZX1NTSVpFX1RfTUFYLgogICovCiBzdGF0aWMgUHlfc3NpemVfdAotY2FsY19iaW5zaXplKGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKK2NhbGNfYmluc2l6ZShjaGFyICpieXRlcywgaW50IG5ieXRlcykKIHsKICAgICB1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIgKilieXRlczsKKyAgICBpbnQgaTsKICAgICBzaXplX3QgeCA9IDA7CiAKLSAgICBhc3NlcnQoc2l6ZSA9PSA0KTsKLQotICAgIHggPSAgKHNpemVfdCkgc1swXTsKLSAgICB4IHw9IChzaXplX3QpIHNbMV0gPDwgODsKLSAgICB4IHw9IChzaXplX3QpIHNbMl0gPDwgMTY7Ci0gICAgeCB8PSAoc2l6ZV90KSBzWzNdIDw8IDI0OworICAgIGZvciAoaSA9IDA7IGkgPCBuYnl0ZXMgJiYgaSA8IHNpemVvZihzaXplX3QpOyBpKyspIHsKKyAgICAgICAgeCB8PSAoc2l6ZV90KSBzW2ldIDw8ICg4ICogaSk7CisgICAgfQogCiAgICAgaWYgKHggPiBQWV9TU0laRV9UX01BWCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDAwOCwyMSArNDUyNCwyMSBAQAogICogb2YgeC1wbGF0Zm9ybSBidWdzLgogICovCiBzdGF0aWMgbG9uZwotY2FsY19iaW5pbnQoY2hhciAqYnl0ZXMsIGludCBzaXplKQorY2FsY19iaW5pbnQoY2hhciAqYnl0ZXMsIGludCBuYnl0ZXMpCiB7CiAgICAgdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopYnl0ZXM7Ci0gICAgaW50IGkgPSBzaXplOworICAgIGludCBpOwogICAgIGxvbmcgeCA9IDA7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIHggfD0gKGxvbmcpc1tpXSA8PCAoaSAqIDgpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYnl0ZXM7IGkrKykgeworICAgICAgICB4IHw9IChsb25nKXNbaV0gPDwgKDggKiBpKTsKICAgICB9CiAKICAgICAvKiBVbmxpa2UgQklOSU5UMSBhbmQgQklOSU5UMiwgQklOSU5UIChtb3JlIGFjY3VyYXRlbHkgQklOSU5UNCkKICAgICAgKiBpcyBzaWduZWQsIHNvIG9uIGEgYm94IHdpdGggbG9uZ3MgYmlnZ2VyIHRoYW4gNCBieXRlcyB3ZSBuZWVkCiAgICAgICogdG8gZXh0ZW5kIGEgQklOSU5UJ3Mgc2lnbiBiaXQgdG8gdGhlIGZ1bGwgd2lkdGguCiAgICAgICovCi0gICAgaWYgKFNJWkVPRl9MT05HID4gNCAmJiBzaXplID09IDQpIHsKKyAgICBpZiAoU0laRU9GX0xPTkcgPiA0ICYmIG5ieXRlcyA9PSA0KSB7CiAgICAgICAgIHggfD0gLSh4ICYgKDFMIDw8IDMxKSk7CiAgICAgfQogCkBAIC00MTIwLDggKzQ2MzYsOSBAQAogCiAgICAgc2l6ZSA9IGNhbGNfYmluaW50KG5ieXRlcywgc2l6ZSk7CiAgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICAgICAgLyogQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC00MTk1LDc1ICs0NzEyLDExMCBAQAogbG9hZF9zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpieXRlczsKLSAgICBQeU9iamVjdCAqc3RyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2JqOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGNoYXIgKnMsICpwOwogCiAgICAgaWYgKChsZW4gPSBfVW5waWNrbGVyX1JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGxlbiA8IDIpCi0gICAgICAgIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKLSAgICBpZiAoKHMgPSBzdHJkdXAocykpID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQorICAgIC8qIFN0cmlwIHRoZSBuZXdsaW5lICovCisgICAgbGVuLS07CiAgICAgLyogU3RyaXAgb3V0ZXJtb3N0IHF1b3RlcyAqLwotICAgIHdoaWxlIChsZW4gPiAwICYmIHNbbGVuIC0gMV0gPD0gJyAnKQotICAgICAgICBsZW4tLTsKLSAgICBpZiAobGVuID4gMSAmJiBzWzBdID09ICciJyAmJiBzW2xlbiAtIDFdID09ICciJykgewotICAgICAgICBzW2xlbiAtIDFdID0gJ1wwJzsKLSAgICAgICAgcCA9IHMgKyAxOwotICAgICAgICBsZW4gLT0gMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAobGVuID4gMSAmJiBzWzBdID09ICdcJycgJiYgc1tsZW4gLSAxXSA9PSAnXCcnKSB7Ci0gICAgICAgIHNbbGVuIC0gMV0gPSAnXDAnOworICAgIGlmIChsZW4gPj0gMiAmJiBzWzBdID09IHNbbGVuIC0gMV0gJiYgKHNbMF0gPT0gJ1wnJyB8fCBzWzBdID09ICciJykpIHsKICAgICAgICAgcCA9IHMgKyAxOwogICAgICAgICBsZW4gLT0gMjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGZyZWUocyk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZSIpOworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBTVFJJTkcgb3Bjb2RlIGFyZ3VtZW50IG11c3QgYmUgcXVvdGVkIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAogICAgIC8qIFVzZSB0aGUgUHlCeXRlcyBBUEkgdG8gZGVjb2RlIHRoZSBzdHJpbmcsIHNpbmNlIHRoYXQgaXMgd2hhdCBpcyB1c2VkCiAgICAgICAgdG8gZW5jb2RlLCBhbmQgdGhlbiBjb2VyY2UgdGhlIHJlc3VsdCB0byBVbmljb2RlLiAqLwogICAgIGJ5dGVzID0gUHlCeXRlc19EZWNvZGVFc2NhcGUocCwgbGVuLCBOVUxMLCAwLCBOVUxMKTsKLSAgICBmcmVlKHMpOwogICAgIGlmIChieXRlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgc3RyID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KGJ5dGVzLCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKLSAgICBQeV9ERUNSRUYoYnl0ZXMpOwotICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgc3RyLCAtMSk7CisgICAgLyogTGVhdmUgdGhlIFB5dGhvbiAyLnggc3RyaW5ncyBhcyBieXRlcyBpZiB0aGUgKmVuY29kaW5nKiBnaXZlbiB0byB0aGUKKyAgICAgICBVbnBpY2tsZXIgd2FzICdieXRlcycuIE90aGVyd2lzZSwgY29udmVydCB0aGVtIHRvIHVuaWNvZGUuICovCisgICAgaWYgKHN0cmNtcChzZWxmLT5lbmNvZGluZywgImJ5dGVzIikgPT0gMCkgeworICAgICAgICBvYmogPSBieXRlczsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG9iaiA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChieXRlcywgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7CisgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfYmluYnl0ZXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorbG9hZF9jb3VudGVkX2JpbnN0cmluZyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBuYnl0ZXMpCiB7Ci0gICAgUHlPYmplY3QgKmJ5dGVzOwotICAgIFB5X3NzaXplX3QgeDsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIG5ieXRlcykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICB4ID0gY2FsY19iaW5zaXplKHMsIDQpOwotICAgIGlmICh4IDwgMCkgeworICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgbmJ5dGVzKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJCSU5TVFJJTkcgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJXpkIGJ5dGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHNpemUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogQ29udmVydCBQeXRob24gMi54IHN0cmluZ3MgdG8gYnl0ZXMgaWYgdGhlICplbmNvZGluZyogZ2l2ZW4gdG8gdGhlCisgICAgICAgVW5waWNrbGVyIHdhcyAnYnl0ZXMnLiBPdGhlcndpc2UsIGNvbnZlcnQgdGhlbSB0byB1bmljb2RlLiAqLworICAgIGlmIChzdHJjbXAoc2VsZi0+ZW5jb2RpbmcsICJieXRlcyIpID09IDApIHsKKyAgICAgICAgb2JqID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBzaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG9iaiA9IFB5VW5pY29kZV9EZWNvZGUocywgc2l6ZSwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7CisgICAgfQorICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xvYWRfY291bnRlZF9iaW5ieXRlcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBuYnl0ZXMpCit7CisgICAgUHlPYmplY3QgKmJ5dGVzOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpzOworCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgbmJ5dGVzKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgbmJ5dGVzKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQklOQllURVMgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJXpkIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHgpOworCisgICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHNpemUpOwogICAgIGlmIChieXRlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQyNzIsODIgKzQ4MjQsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1sb2FkX3Nob3J0X2JpbmJ5dGVzKFVucGlja2xlck9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqYnl0ZXM7Ci0gICAgUHlfc3NpemVfdCB4OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHggPSAodW5zaWduZWQgY2hhcilzWzBdOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgeCk7Ci0gICAgaWYgKGJ5dGVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIGJ5dGVzLCAtMSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWxvYWRfYmluc3RyaW5nKFVucGlja2xlck9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5X3NzaXplX3QgeDsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICB4ID0gY2FsY19iaW5pbnQocywgNCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQklOU1RSSU5HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBDb252ZXJ0IFB5dGhvbiAyLnggc3RyaW5ncyB0byB1bmljb2RlLiAqLwotICAgIHN0ciA9IFB5VW5pY29kZV9EZWNvZGUocywgeCwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzdHIsIC0xKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbG9hZF9zaG9ydF9iaW5zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlfc3NpemVfdCB4OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHggPSAodW5zaWduZWQgY2hhcilzWzBdOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBDb252ZXJ0IFB5dGhvbiAyLnggc3RyaW5ncyB0byB1bmljb2RlLiAqLwotICAgIHN0ciA9IFB5VW5pY29kZV9EZWNvZGUocywgeCwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzdHIsIC0xKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAogbG9hZF91bmljb2RlKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqc3RyOwpAQCAtNDM2OCwyNSArNDg0NCwyMyBAQAogfQogCiBzdGF0aWMgaW50Ci1sb2FkX2JpbnVuaWNvZGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorbG9hZF9jb3VudGVkX2JpbnVuaWNvZGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBpbnQgbmJ5dGVzKQogewogICAgIFB5T2JqZWN0ICpzdHI7CiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgbmJ5dGVzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgNCk7CisgICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCBuYnl0ZXMpOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJCSU5VTklDT0RFIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICV6ZCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWAotICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0KICAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBzaXplKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNDQ1OCw2ICs0OTMyLDE3IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfZW1wdHlfc2V0KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqc2V0OworCisgICAgaWYgKChzZXQgPSBQeVNldF9OZXcoTlVMTCkpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzZXQsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbG9hZF9saXN0KFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqbGlzdDsKQEAgLTQ0OTksNiArNDk4NCwyOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50Citsb2FkX2Zyb3plbnNldChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKml0ZW1zOworICAgIFB5T2JqZWN0ICpmcm96ZW5zZXQ7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0ZW1zID0gUGRhdGFfcG9wdHVwbGUoc2VsZi0+c3RhY2ssIGkpOworICAgIGlmIChpdGVtcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcm96ZW5zZXQgPSBQeUZyb3plblNldF9OZXcoaXRlbXMpOworICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgaWYgKGZyb3plbnNldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBmcm96ZW5zZXQsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIGluc3RhbnRpYXRlKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNDYwNiw2ICs1MTE0LDcgQEAKICAgICBQeU9iamVjdCAqY2xzcmF3ID0gTlVMTDsKICAgICBQeVR5cGVPYmplY3QgKmNsczsgICAgICAgICAgLyogY2xzcmF3IGNhc3QgdG8gaXRzIHRydWUgdHlwZSAqLwogICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgLyogU3RhY2sgaXMgLi4uIGNscyBhcmd0dXBsZSwgYW5kIHdlIHdhbnQgdG8gY2FsbAogICAgICAqIGNscy5fX25ld19fKGNscywgKmFyZ3R1cGxlKS4KQEAgLTQ2MTQsNyArNTEyMyw4IEBACiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIk5FV09CSiBleHBlY3RlZCBhbiBhcmcgIiAidHVwbGUuIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5FV09CSiBleHBlY3RlZCBhbiBhcmcgIiAidHVwbGUuIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCkBAIC00NjIzLDEyICs1MTMzLDEyIEBACiAgICAgaWYgKGNscyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiTkVXT0JKIGNsYXNzIGFyZ3VtZW50ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJpc24ndCBhIHR5cGUgb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjbHMtPnRwX25ldyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJORVdPQkogY2xhc3MgYXJndW1lbnQgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzIE5VTEwgdHBfbmV3Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQpAQCAtNDY1MCw2ICs1MTYwLDU4IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfbmV3b2JqX2V4KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqY2xzLCAqYXJncywgKmt3YXJnczsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKworICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywga3dhcmdzKTsKKyAgICBpZiAoa3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGFyZ3MpOworICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBjbHMpOworICAgIGlmIChjbHMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFQeVR5cGVfQ2hlY2soY2xzKSkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoY2xzKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiTkVXT0JKX0VYIGNsYXNzIGFyZ3VtZW50IG11c3QgYmUgYSB0eXBlLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoY2xzKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKChQeVR5cGVPYmplY3QgKiljbHMpLT50cF9uZXcgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoY2xzKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiTkVXT0JKX0VYIGNsYXNzIGFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBfX25ld19fIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgb2JqID0gKChQeVR5cGVPYmplY3QgKiljbHMpLT50cF9uZXcoKFB5VHlwZU9iamVjdCAqKWNscywgYXJncywga3dhcmdzKTsKKyAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgUHlfREVDUkVGKGNscyk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfZ2xvYmFsKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqZ2xvYmFsID0gTlVMTDsKQEAgLTQ2ODYsNiArNTI0OCwzMiBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX3N0YWNrX2dsb2JhbChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmdsb2JhbDsKKyAgICBQeU9iamVjdCAqbW9kdWxlX25hbWU7CisgICAgUHlPYmplY3QgKmdsb2JhbF9uYW1lOworCisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBnbG9iYWxfbmFtZSk7CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBtb2R1bGVfbmFtZSk7CisgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVja0V4YWN0KG1vZHVsZV9uYW1lKSB8fAorICAgICAgICBnbG9iYWxfbmFtZSA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2tFeGFjdChnbG9iYWxfbmFtZSkpIHsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIlNUQUNLX0dMT0JBTCByZXF1aXJlcyBzdHIiKTsKKyAgICAgICAgUHlfWERFQ1JFRihnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5X1hERUNSRUYobW9kdWxlX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGdsb2JhbCA9IGZpbmRfY2xhc3Moc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKyAgICBQeV9ERUNSRUYoZ2xvYmFsX25hbWUpOworICAgIFB5X0RFQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgaWYgKGdsb2JhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgZ2xvYmFsLCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfcGVyc2lkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqcGlkOwpAQCAtNDcwMiw5ICs1MjkwLDkgQEAKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKLSAgICAgICAgICAgcmVmZXJlbmNlIHRvIHBpZCBmaXJzdC4gKi8KLSAgICAgICAgcGlkID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5wZXJzX2Z1bmMsIHBpZCk7CisgICAgICAgIC8qIFRoaXMgZG9lcyBub3QgbGVhayBzaW5jZSBfUGlja2xlX0Zhc3RDYWxsKCkgc3RlYWxzIHRoZSByZWZlcmVuY2UKKyAgICAgICAgICAgdG8gcGlkIGZpcnN0LiAqLworICAgICAgICBwaWQgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00NzEyLDcgKzUzMDAsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQSBsb2FkIHBlcnNpc3RlbnQgaWQgaW5zdHJ1Y3Rpb24gd2FzIGVuY291bnRlcmVkLFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBubyBwZXJzaXN0ZW50X2xvYWQgZnVuY3Rpb24gd2FzIHNwZWNpZmllZC4iKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDcyOSw5ICs1MzE4LDkgQEAKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKKyAgICAgICAgLyogVGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9QaWNrbGVfRmFzdENhbGwoKSBzdGVhbHMgdGhlCiAgICAgICAgICAgIHJlZmVyZW5jZSB0byBwaWQgZmlyc3QuICovCi0gICAgICAgIHBpZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVyc19mdW5jLCBwaWQpOworICAgICAgICBwaWQgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00NzM5LDcgKzUzMjgsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQSBsb2FkIHBlcnNpc3RlbnQgaWQgaW5zdHJ1Y3Rpb24gd2FzIGVuY291bnRlcmVkLFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBubyBwZXJzaXN0ZW50X2xvYWQgZnVuY3Rpb24gd2FzIHNwZWNpZmllZC4iKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDg5NSw2ICs1NDg1LDcgQEAKICAgICBQeU9iamVjdCAqb2JqOyAgICAgICAgICAgICAgLyogdGhlIG9iamVjdCB0byBwdXNoICovCiAgICAgUHlPYmplY3QgKnBhaXI7ICAgICAgICAgICAgIC8qIChtb2R1bGVfbmFtZSwgY2xhc3NfbmFtZSkgKi8KICAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUsICpjbGFzc19uYW1lOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKIAogICAgIGFzc2VydChuYnl0ZXMgPT0gMSB8fCBuYnl0ZXMgPT0gMiB8fCBuYnl0ZXMgPT0gNCk7CiAgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmY29kZWJ5dGVzLCBuYnl0ZXMpIDwgMCkKQEAgLTQ5MDIsNyArNTQ5Myw3IEBACiAgICAgY29kZSA9IGNhbGNfYmluaW50KGNvZGVieXRlcywgbmJ5dGVzKTsKICAgICBpZiAoY29kZSA8PSAwKSB7ICAgICAgICAgICAgLyogbm90ZSB0aGF0IDAgaXMgZm9yYmlkZGVuICovCiAgICAgICAgIC8qIENvcnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTQ5MTAsMjAgKzU1MDEsMjYgQEAKICAgICBweV9jb2RlID0gUHlMb25nX0Zyb21Mb25nKGNvZGUpOwogICAgIGlmIChweV9jb2RlID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBvYmogPSBQeURpY3RfR2V0SXRlbShleHRlbnNpb25fY2FjaGUsIHB5X2NvZGUpOworICAgIG9iaiA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5leHRlbnNpb25fY2FjaGUsIHB5X2NvZGUpOwogICAgIGlmIChvYmogIT0gTlVMTCkgewogICAgICAgICAvKiBCaW5nby4gKi8KICAgICAgICAgUHlfREVDUkVGKHB5X2NvZGUpOwogICAgICAgICBQREFUQV9BUFBFTkQoc2VsZi0+c3RhY2ssIG9iaiwgLTEpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfREVDUkVGKHB5X2NvZGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgLyogTG9vayB1cCB0aGUgKG1vZHVsZV9uYW1lLCBjbGFzc19uYW1lKSBwYWlyLiAqLwotICAgIHBhaXIgPSBQeURpY3RfR2V0SXRlbShpbnZlcnRlZF9yZWdpc3RyeSwgcHlfY29kZSk7CisgICAgcGFpciA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSwgcHlfY29kZSk7CiAgICAgaWYgKHBhaXIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYocHlfY29kZSk7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5yZWdpc3RlcmVkIGV4dGVuc2lvbiAiCi0gICAgICAgICAgICAgICAgICAgICAiY29kZSAlbGQiLCBjb2RlKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVucmVnaXN0ZXJlZCBleHRlbnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlICVsZCIsIGNvZGUpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogU2luY2UgdGhlIGV4dGVuc2lvbiByZWdpc3RyeSBpcyBtYW5pcHVsYWJsZSB2aWEgUHl0aG9uIGNvZGUsCkBAIC00OTQ0LDcgKzU1NDEsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIC8qIENhY2hlIGNvZGUgLT4gb2JqLiAqLwotICAgIGNvZGUgPSBQeURpY3RfU2V0SXRlbShleHRlbnNpb25fY2FjaGUsIHB5X2NvZGUsIG9iaik7CisgICAgY29kZSA9IFB5RGljdF9TZXRJdGVtKHN0LT5leHRlbnNpb25fY2FjaGUsIHB5X2NvZGUsIG9iaik7CiAgICAgUHlfREVDUkVGKHB5X2NvZGUpOwogICAgIGlmIChjb2RlIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYob2JqKTsKQEAgLTUwMjksNiArNTYyNiwxOCBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX21lbW9pemUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKworICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgdmFsdWUgPSBzZWxmLT5zdGFjay0+ZGF0YVtQeV9TSVpFKHNlbGYtPnN0YWNrKSAtIDFdOworCisgICAgcmV0dXJuIF9VbnBpY2tsZXJfTWVtb1B1dChzZWxmLCBzZWxmLT5tZW1vX2xlbiwgdmFsdWUpOworfQorCitzdGF0aWMgaW50CiBkb19hcHBlbmQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHgpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlOwpAQCAtNTA2Nyw3ICs1Njc2LDcgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKICAgICAgICAgICAgIHZhbHVlID0gc2VsZi0+c3RhY2stPmRhdGFbaV07Ci0gICAgICAgICAgICByZXN1bHQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIGFwcGVuZF9mdW5jLCB2YWx1ZSk7CisgICAgICAgICAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKGFwcGVuZF9mdW5jLCB2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQZGF0YV9jbGVhcihzZWxmLT5zdGFjaywgaSArIDEpOwogICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZi0+c3RhY2spID0geDsKQEAgLTUxMDksOCArNTcxOCwxMCBAQAogICAgIGlmIChsZW4gPT0geCkgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKChsZW4gLSB4KSAlIDIgIT0gMCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgICAgIC8qIEN1cnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUgLS0gd2UgbmV2ZXIgd3JpdGUgb25lIGxpa2UgdGhpcy4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIm9kZCBudW1iZXIgb2YgaXRlbXMgZm9yIFNFVElURU1TIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9kZCBudW1iZXIgb2YgaXRlbXMgZm9yIFNFVElURU1TIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTUxNDQsNiArNTc1NSw1OSBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX2FkZGl0ZW1zKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqc2V0OworICAgIFB5X3NzaXplX3QgbWFyaywgbGVuLCBpOworCisgICAgbWFyayA9ICBtYXJrZXIoc2VsZik7CisgICAgbGVuID0gUHlfU0laRShzZWxmLT5zdGFjayk7CisgICAgaWYgKG1hcmsgPiBsZW4gfHwgbWFyayA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgaWYgKGxlbiA9PSBtYXJrKSAgLyogbm90aGluZyB0byBkbyAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIHNldCA9IHNlbGYtPnN0YWNrLT5kYXRhW21hcmsgLSAxXTsKKworICAgIGlmIChQeVNldF9DaGVjayhzZXQpKSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFBkYXRhX3BvcHR1cGxlKHNlbGYtPnN0YWNrLCBtYXJrKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgc3RhdHVzID0gX1B5U2V0X1VwZGF0ZShzZXQsIGl0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICphZGRfZnVuYzsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoYWRkKTsKKworICAgICAgICBhZGRfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoc2V0LCAmUHlJZF9hZGQpOworICAgICAgICBpZiAoYWRkX2Z1bmMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZm9yIChpID0gbWFyazsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OworICAgICAgICAgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICAgICAgICAgIGl0ZW0gPSBzZWxmLT5zdGFjay0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoYWRkX2Z1bmMsIGl0ZW0pOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIGkgKyAxKTsKKyAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYtPnN0YWNrKSA9IG1hcms7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgUHlfU0laRShzZWxmLT5zdGFjaykgPSBtYXJrOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX2J1aWxkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqc3RhdGUsICppbnN0LCAqc2xvdHN0YXRlOwpAQCAtNTE3Niw5ICs1ODQwLDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgICAgICAvKiBUaGUgZXhwbGljaXQgX19zZXRzdGF0ZV9fIGlzIHJlc3BvbnNpYmxlIGZvciBldmVyeXRoaW5nLiAqLwotICAgICAgICAvKiBVZ2guLi4gdGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9VbnBpY2tsZXJfRmFzdENhbGwoKSBzdGVhbHMgdGhlCi0gICAgICAgICAgIHJlZmVyZW5jZSB0byBzdGF0ZSBmaXJzdC4gKi8KLSAgICAgICAgcmVzdWx0ID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZXRzdGF0ZSwgc3RhdGUpOworICAgICAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKHNldHN0YXRlLCBzdGF0ZSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZXRzdGF0ZSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTUyMDksNyArNTg3MSw4IEBACiAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKIAogICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhzdGF0ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJzdGF0ZSBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgInN0YXRlIGlzIG5vdCBhIGRpY3Rpb25hcnkiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoaW5zdCwgJlB5SWRfX19kaWN0X18pOwpAQCAtNTIzOCw3ICs1OTAxLDggQEAKICAgICAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKHNsb3RzdGF0ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xvdCBzdGF0ZSBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CkBAIC01MzQ0LDE0ICs2MDA4LDM5IEBACiAgICAgcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50Citsb2FkX2ZyYW1lKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBjaGFyICpzOworICAgIFB5X3NzaXplX3QgZnJhbWVfbGVuOworCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgOCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcmFtZV9sZW4gPSBjYWxjX2JpbnNpemUocywgOCk7CisgICAgaWYgKGZyYW1lX2xlbiA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiRlJBTUUgbGVuZ3RoIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBvZiAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgZnJhbWVfbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIFJld2luZCB0byBzdGFydCBvZiBmcmFtZSAqLworICAgIHNlbGYtPm5leHRfcmVhZF9pZHggLT0gZnJhbWVfbGVuOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogbG9hZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKmVycjsKICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOwotICAgIGNoYXIgKnM7CisgICAgY2hhciAqcyA9IE5VTEw7CiAKICAgICBzZWxmLT5udW1fbWFya3MgPSAwOworICAgIHNlbGYtPnByb3RvID0gMDsKICAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykpCiAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCAwKTsKIApAQCAtNTM3NywxMyArNjA2NiwxNiBAQAogICAgICAgICBPUF9BUkcoTE9ORzQsIGxvYWRfY291bnRlZF9sb25nLCA0KQogICAgICAgICBPUChGTE9BVCwgbG9hZF9mbG9hdCkKICAgICAgICAgT1AoQklORkxPQVQsIGxvYWRfYmluZmxvYXQpCi0gICAgICAgIE9QKEJJTkJZVEVTLCBsb2FkX2JpbmJ5dGVzKQotICAgICAgICBPUChTSE9SVF9CSU5CWVRFUywgbG9hZF9zaG9ydF9iaW5ieXRlcykKLSAgICAgICAgT1AoQklOU1RSSU5HLCBsb2FkX2JpbnN0cmluZykKLSAgICAgICAgT1AoU0hPUlRfQklOU1RSSU5HLCBsb2FkX3Nob3J0X2JpbnN0cmluZykKKyAgICAgICAgT1BfQVJHKFNIT1JUX0JJTkJZVEVTLCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDEpCisgICAgICAgIE9QX0FSRyhCSU5CWVRFUywgbG9hZF9jb3VudGVkX2JpbmJ5dGVzLCA0KQorICAgICAgICBPUF9BUkcoQklOQllURVM4LCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDgpCisgICAgICAgIE9QX0FSRyhTSE9SVF9CSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDEpCisgICAgICAgIE9QX0FSRyhCSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDQpCiAgICAgICAgIE9QKFNUUklORywgbG9hZF9zdHJpbmcpCiAgICAgICAgIE9QKFVOSUNPREUsIGxvYWRfdW5pY29kZSkKLSAgICAgICAgT1AoQklOVU5JQ09ERSwgbG9hZF9iaW51bmljb2RlKQorICAgICAgICBPUF9BUkcoU0hPUlRfQklOVU5JQ09ERSwgbG9hZF9jb3VudGVkX2JpbnVuaWNvZGUsIDEpCisgICAgICAgIE9QX0FSRyhCSU5VTklDT0RFLCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgNCkKKyAgICAgICAgT1BfQVJHKEJJTlVOSUNPREU4LCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgOCkKICAgICAgICAgT1BfQVJHKEVNUFRZX1RVUExFLCBsb2FkX2NvdW50ZWRfdHVwbGUsIDApCiAgICAgICAgIE9QX0FSRyhUVVBMRTEsIGxvYWRfY291bnRlZF90dXBsZSwgMSkKICAgICAgICAgT1BfQVJHKFRVUExFMiwgbG9hZF9jb3VudGVkX3R1cGxlLCAyKQpAQCAtNTM5MywxMCArNjA4NSwxNSBAQAogICAgICAgICBPUChMSVNULCBsb2FkX2xpc3QpCiAgICAgICAgIE9QKEVNUFRZX0RJQ1QsIGxvYWRfZW1wdHlfZGljdCkKICAgICAgICAgT1AoRElDVCwgbG9hZF9kaWN0KQorICAgICAgICBPUChFTVBUWV9TRVQsIGxvYWRfZW1wdHlfc2V0KQorICAgICAgICBPUChBRERJVEVNUywgbG9hZF9hZGRpdGVtcykKKyAgICAgICAgT1AoRlJPWkVOU0VULCBsb2FkX2Zyb3plbnNldCkKICAgICAgICAgT1AoT0JKLCBsb2FkX29iaikKICAgICAgICAgT1AoSU5TVCwgbG9hZF9pbnN0KQogICAgICAgICBPUChORVdPQkosIGxvYWRfbmV3b2JqKQorICAgICAgICBPUChORVdPQkpfRVgsIGxvYWRfbmV3b2JqX2V4KQogICAgICAgICBPUChHTE9CQUwsIGxvYWRfZ2xvYmFsKQorICAgICAgICBPUChTVEFDS19HTE9CQUwsIGxvYWRfc3RhY2tfZ2xvYmFsKQogICAgICAgICBPUChBUFBFTkQsIGxvYWRfYXBwZW5kKQogICAgICAgICBPUChBUFBFTkRTLCBsb2FkX2FwcGVuZHMpCiAgICAgICAgIE9QKEJVSUxELCBsb2FkX2J1aWxkKQpAQCAtNTQwOCw2ICs2MTA1LDcgQEAKICAgICAgICAgT1AoQklOUFVULCBsb2FkX2JpbnB1dCkKICAgICAgICAgT1AoTE9OR19CSU5QVVQsIGxvYWRfbG9uZ19iaW5wdXQpCiAgICAgICAgIE9QKFBVVCwgbG9hZF9wdXQpCisgICAgICAgIE9QKE1FTU9JWkUsIGxvYWRfbWVtb2l6ZSkKICAgICAgICAgT1AoUE9QLCBsb2FkX3BvcCkKICAgICAgICAgT1AoUE9QX01BUkssIGxvYWRfcG9wX21hcmspCiAgICAgICAgIE9QKFNFVElURU0sIGxvYWRfc2V0aXRlbSkKQEAgLTU0MTYsNiArNjExNCw3IEBACiAgICAgICAgIE9QKEJJTlBFUlNJRCwgbG9hZF9iaW5wZXJzaWQpCiAgICAgICAgIE9QKFJFRFVDRSwgbG9hZF9yZWR1Y2UpCiAgICAgICAgIE9QKFBST1RPLCBsb2FkX3Byb3RvKQorICAgICAgICBPUChGUkFNRSwgbG9hZF9mcmFtZSkKICAgICAgICAgT1BfQVJHKEVYVDEsIGxvYWRfZXh0ZW5zaW9uLCAxKQogICAgICAgICBPUF9BUkcoRVhUMiwgbG9hZF9leHRlbnNpb24sIDIpCiAgICAgICAgIE9QX0FSRyhFWFQ0LCBsb2FkX2V4dGVuc2lvbiwgNCkKQEAgLTU0MjYsODEgKzYxMjUsOTMgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoc1swXSA9PSAnXDAnKQorICAgICAgICAgICAgaWYgKHNbMF0gPT0gJ1wwJykgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfRU9GRXJyb3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxvYWQga2V5LCAnJWMnLiIsIHNbMF0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBhbmQgd2UgYXJlIGRvbmUhICovCiAgICAgfQogCi0gICAgaWYgKF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFg6IEl0IGlzIG5vdCBjbGVhciB3aGF0IHRoaXMgaXMgYWN0dWFsbHkgZm9yLiAqLwotICAgIGlmICgoZXJyID0gUHlFcnJfT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgaWYgKGVyciA9PSBQeUV4Y19FT0ZFcnJvcikgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19FT0ZFcnJvcik7Ci0gICAgICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBpZiAoX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9sb2FkX2RvYywKLSJsb2FkKCkgLT4gb2JqZWN0LiBMb2FkIGEgcGlja2xlLiIKLSJcbiIKLSJSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlbiBpblxuIgotInRoZSBjb25zdHJ1Y3RvciwgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZFxuIgotInRoZXJlaW4uXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5VbnBpY2tsZXIubG9hZAorCitMb2FkIGEgcGlja2xlLgorCitSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlbgoraW4gdGhlIGNvbnN0cnVjdG9yLCBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkKK3NwZWNpZmllZCB0aGVyZWluLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotVW5waWNrbGVyX2xvYWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZGNjNDg4YWFkNjc1YjE0IGlucHV0PWFjYmI5MWE0MmZhOWI3YjldKi8KIHsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IChVbnBpY2tsZXJPYmplY3QqKXNlbGY7CisKICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBVbnBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhpcyBwcmV2ZW50cwogICAgICAgIHNlZ2ZhdWx0aW5nIGlmIGEgc3ViY2xhc3Mgb3ZlcnJpZGRlbiBfX2luaXRfXyB3aXRoIGEgZnVuY3Rpb24gdGhhdCBkb2VzCiAgICAgICAgbm90IGNhbGwgVW5waWNrbGVyLl9faW5pdF9fKCkuIEhlcmUsIHdlIHNpbXBseSBlbnN1cmUgdGhhdCBzZWxmLT5yZWFkCiAgICAgICAgaXMgbm90IE5VTEwuICovCi0gICAgaWYgKHNlbGYtPnJlYWQgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoVW5waWNrbGluZ0Vycm9yLAorICAgIGlmICh1bnBpY2tsZXItPnJlYWQgPT0gTlVMTCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlVucGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVucGlja2xlciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gbG9hZChzZWxmKTsKKyAgICByZXR1cm4gbG9hZCh1bnBpY2tsZXIpOwogfQogCiAvKiBUaGUgbmFtZSBvZiBmaW5kX2NsYXNzKCkgaXMgbWlzbGVhZGluZy4gSW4gbmV3ZXIgcGlja2xlIHByb3RvY29scywgdGhpcwogICAgZnVuY3Rpb24gaXMgdXNlZCBmb3IgbG9hZGluZyBhbnkgZ2xvYmFsIChpLmUuLCBmdW5jdGlvbnMpLCBub3QganVzdAogICAgY2xhc3Nlcy4gVGhlIG5hbWUgaXMga2VwdCBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwogCi1QeURvY19TVFJWQVIoVW5waWNrbGVyX2ZpbmRfY2xhc3NfZG9jLAotImZpbmRfY2xhc3MobW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKSAtPiBvYmplY3QuXG4iCi0iXG4iCi0iUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZSwgaW1wb3J0aW5nIHRoZSBtb2R1bGUgaWZcbiIKLSJuZWNlc3NhcnkuICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCAoZS5nLiB0byByZXN0cmljdFxuIgotInVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucykuXG4iCi0iXG4iCi0iVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbiBvYmplY3QgaXNcbiIKLSJuZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuVW5waWNrbGVyLmZpbmRfY2xhc3MKKworICBtb2R1bGVfbmFtZTogb2JqZWN0CisgIGdsb2JhbF9uYW1lOiBvYmplY3QKKyAgLworCitSZXR1cm4gYW4gb2JqZWN0IGZyb20gYSBzcGVjaWZpZWQgbW9kdWxlLgorCitJZiBuZWNlc3NhcnksIHRoZSBtb2R1bGUgd2lsbCBiZSBpbXBvcnRlZC4gU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUKK3RoaXMgbWV0aG9kIChlLmcuIHRvIHJlc3RyaWN0IHVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kCitmdW5jdGlvbnMpLgorCitUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpcworbmVlZGVkLiAgQm90aCBhcmd1bWVudHMgcGFzc2VkIGFyZSBzdHIgb2JqZWN0cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVVucGlja2xlcl9maW5kX2NsYXNzKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NGM3NzQzN2UwODhlMTg4IGlucHV0PWUyZTZhODY1ZGUwOTNlZjRdKi8KIHsKICAgICBQeU9iamVjdCAqZ2xvYmFsOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUsICpnbG9iYWxfbmFtZTsKLQotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZpbmRfY2xhc3MiLCAyLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZHVsZV9uYW1lLCAmZ2xvYmFsX25hbWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKIAogICAgIC8qIFRyeSB0byBtYXAgdGhlIG9sZCBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLnggdG8gdGhlIG5ldyBvbmVzIHVzZWQgaW4KICAgICAgICBQeXRob24gMy54LiAgV2UgZG8gdGhpcyBvbmx5IHdpdGggb2xkIHBpY2tsZSBwcm90b2NvbHMgYW5kIHdoZW4gdGhlCkBAIC01NTA4LDEzICs2MjE5LDE0IEBACiAgICAgaWYgKHNlbGYtPnByb3RvIDwgMyAmJiBzZWxmLT5maXhfaW1wb3J0cykgewogICAgICAgICBQeU9iamVjdCAqa2V5OwogICAgICAgICBQeU9iamVjdCAqaXRlbTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBnbG9iYWwgKGkuZS4sIGEgZnVuY3Rpb24gb3IgYSBjbGFzcykgd2FzIHJlbmFtZWQKICAgICAgICAgICAgb3IgbW92ZWQgdG8gYW5vdGhlciBtb2R1bGUuICovCiAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwogICAgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG5hbWVfbWFwcGluZ18ydG8zLCBrZXkpOworICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPm5hbWVfbWFwcGluZ18ydG8zLCBrZXkpOwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKQEAgLTU1NDAsNyArNjI1Miw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgbW9kdWxlIHdhcyByZW5hbWVkLiAqLwotICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoaW1wb3J0X21hcHBpbmdfMnRvMywgbW9kdWxlX25hbWUpOworICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMsIG1vZHVsZV9uYW1lKTsKICAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKQEAgLTU1NTUsOSArNjI2NywxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbW9kdWxlc19kaWN0ID0gUHlTeXNfR2V0T2JqZWN0KCJtb2R1bGVzIik7Ci0gICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKQorICAgIG1vZHVsZXNfZGljdCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9tb2R1bGVzKTsKKyAgICBpZiAobW9kdWxlc19kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLm1vZHVsZXMiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgbW9kdWxlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IobW9kdWxlc19kaWN0LCBtb2R1bGVfbmFtZSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CkBAIC01NTY2LDIwICs2MjgwLDE4IEBACiAgICAgICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydChtb2R1bGVfbmFtZSk7CiAgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBnbG9iYWwgPSBQeU9iamVjdF9HZXRBdHRyKG1vZHVsZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBnbG9iYWwgPSBnZXRhdHRyaWJ1dGUobW9kdWxlLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZ2xvYmFsID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgZ2xvYmFsID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgIH0KICAgICByZXR1cm4gZ2xvYmFsOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIFVucGlja2xlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJsb2FkIiwgKFB5Q0Z1bmN0aW9uKVVucGlja2xlcl9sb2FkLCBNRVRIX05PQVJHUywKLSAgICAgVW5waWNrbGVyX2xvYWRfZG9jfSwKLSAgICB7ImZpbmRfY2xhc3MiLCAoUHlDRnVuY3Rpb24pVW5waWNrbGVyX2ZpbmRfY2xhc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgVW5waWNrbGVyX2ZpbmRfY2xhc3NfZG9jfSwKKyAgICBfUElDS0xFX1VOUElDS0xFUl9MT0FEX01FVEhPRERFRgorICAgIF9QSUNLTEVfVU5QSUNLTEVSX0ZJTkRfQ0xBU1NfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC01NTkyLDcgKzYzMDQsNiBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+cGVlayk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5zdGFjayk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+YXJnKTsKICAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOwpAQCAtNTYwMSw4ICs2MzEyLDggQEAKICAgICBfVW5waWNrbGVyX01lbW9DbGVhbnVwKHNlbGYpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+bWFya3MpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+aW5wdXRfbGluZSk7Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7Ci0gICAgZnJlZShzZWxmLT5lcnJvcnMpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZXJyb3JzKTsKIAogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CkBAIC01NjE1LDcgKzYzMjYsNiBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPnBlZWspOwogICAgIFB5X1ZJU0lUKHNlbGYtPnN0YWNrKTsKICAgICBQeV9WSVNJVChzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X1ZJU0lUKHNlbGYtPmFyZyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU2MjcsNyArNjMzNyw2IEBACiAgICAgUHlfQ0xFQVIoc2VsZi0+cGVlayk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+c3RhY2spOwogICAgIFB5X0NMRUFSKHNlbGYtPnBlcnNfZnVuYyk7Ci0gICAgUHlfQ0xFQVIoc2VsZi0+YXJnKTsKICAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOwpAQCAtNTYzOCw2NiArNjM0Nyw1MiBAQAogICAgIHNlbGYtPm1hcmtzID0gTlVMTDsKICAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2xpbmUpOwogICAgIHNlbGYtPmlucHV0X2xpbmUgPSBOVUxMOwotICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOwogICAgIHNlbGYtPmVuY29kaW5nID0gTlVMTDsKLSAgICBmcmVlKHNlbGYtPmVycm9ycyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lcnJvcnMpOwogICAgIHNlbGYtPmVycm9ycyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9kb2MsCi0iVW5waWNrbGVyKGZpbGUsICosIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykiCi0iXG4iCi0iVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgotIlxuIgotIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm9cbiIKLSJwcm90byBhcmd1bWVudCBpcyBuZWVkZWQuXG4iCi0iXG4iCi0iVGhlIGZpbGUtbGlrZSBvYmplY3QgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2RcbiIKLSJ0aGF0IHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXRcbiIKLSJyZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy5cbiIKLSJUaHVzIGZpbGUtbGlrZSBvYmplY3QgY2FuIGJlIGEgYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3JcbiIKLSJyZWFkaW5nLCBhIEJ5dGVzSU8gb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0XG4iCi0ibWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCi0iXG4iCi0iT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLFxuIgotIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKLSJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCi0ibWFwIHRoZSBvbGQgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZVxuIgotIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCi0iaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZFxuIgotIidzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5VbnBpY2tsZXIuX19pbml0X18KKworICBmaWxlOiBvYmplY3QKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKyAgZW5jb2Rpbmc6IHN0ciA9ICdBU0NJSScKKyAgZXJyb3JzOiBzdHIgPSAnc3RyaWN0JworCitUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMKK2FuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8KK2FyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGEKK2JpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGEgaW8uQnl0ZXNJTyBvYmplY3QsIG9yIGFueQorb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsCityZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0CitzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBpbnQKLVVucGlja2xlcl9pbml0KFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjllZDFkODRkMzE1ZjNiNSBpbnB1dD0zMGI0ZGM5ZTk3NmI4OTBjXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwotICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIGNoYXIgKmVycm9ycyA9IE5VTEw7CiAgICAgX1B5X0lERU5USUZJRVIocGVyc2lzdGVudF9sb2FkKTsKIAotICAgIC8qIFhYWDogVGhhdCBpcyBhbiBob3JyaWJsZSBlcnJvciBtZXNzYWdlLiBCdXQsIEkgZG9uJ3Qga25vdyBob3cgdG8gZG8KLSAgICAgICBiZXR0ZXIuLi4gKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSAhPSAxKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMgdGFrZXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCAoJXpkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qIEFyZ3VtZW50cyBwYXJzaW5nIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIF9faW5pdF9fKCkgbWV0aG9kIHRvIGFsbG93Ci0gICAgICAgc3ViY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIF9faW5pdF9fKCkgbWV0aG9kLCB3aGljaCBtYXkgKG9yIG1heQotICAgICAgIG5vdCkgc3VwcG9ydCBVbnBpY2tsZXIgYXJndW1lbnRzLiBIb3dldmVyLCB0aGlzIG1lYW5zIHdlIG5lZWQgdG8gYmUKLSAgICAgICBleHRyYSBjYXJlZnVsIGluIHRoZSBvdGhlciBVbnBpY2tsZXIgbWV0aG9kcywgc2luY2UgYSBzdWJjbGFzcyBjb3VsZAotICAgICAgIGZvcmdldCB0byBjYWxsIFVucGlja2xlci5fX2luaXRfXygpIHRodXMgYnJlYWtpbmcgb3VyIGludGVybmFsCi0gICAgICAgaW52YXJpYW50cy4gKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPc3M6VW5waWNrbGVyIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiAtMTsKLQogICAgIC8qIEluIGNhc2Ugb2YgbXVsdGlwbGUgX19pbml0X18oKSBjYWxscywgY2xlYXIgcHJldmlvdXMgY29udGVudC4gKi8KICAgICBpZiAoc2VsZi0+cmVhZCAhPSBOVUxMKQogICAgICAgICAodm9pZClVbnBpY2tsZXJfY2xlYXIoc2VsZik7CkBAIC01NzA4LDcgKzY0MDMsNyBAQAogICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0RW5jb2Rpbmcoc2VsZiwgZW5jb2RpbmcsIGVycm9ycykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBzZWxmLT5maXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0cyk7CisgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKICAgICBpZiAoc2VsZi0+Zml4X2ltcG9ydHMgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNTcxNiw3ICs2NDExLDcgQEAKICAgICAgICAgc2VsZi0+cGVyc19mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKilzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3BlcnNpc3RlbnRfbG9hZCk7CiAgICAgICAgIGlmIChzZWxmLT5wZXJzX2Z1bmMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKQEAgLTU3MjQsMTkgKzY0MTksMTkgQEAKIAogICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7CiAgICAgaWYgKHNlbGYtPnN0YWNrID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDE7CiAKICAgICBzZWxmLT5tZW1vX3NpemUgPSAzMjsKICAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7CiAgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAKICAgICByZXR1cm4gMDsKIH0KIAorCiAvKiBEZWZpbmUgYSBwcm94eSBvYmplY3QgZm9yIHRoZSBVbnBpY2tsZXIncyBpbnRlcm5hbCBtZW1vIG9iamVjdC4gVGhpcyBpcyB0bwogICogYXZvaWQgYnJlYWtpbmcgY29kZSBsaWtlOgogICogIHVucGlja2xlci5tZW1vLmNsZWFyKCkKQEAgLTU3NTAsMTYgKzY0NDUsMTUgQEAKICAqIHJlYWwtd29ybGQgY29kZSBsaWtlIGN2czJzdm4uCiAgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFB5T2JqZWN0X0hFQUQKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKLX0gVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0OworLypbY2xpbmljIGlucHV0XQorX3BpY2tsZS5VbnBpY2tsZXJNZW1vUHJveHkuY2xlYXIKIAotUHlEb2NfU1RSVkFSKHVtcF9jbGVhcl9kb2MsCi0ibWVtby5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKK1JlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX2NsZWFyKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQyMGNkNDNmNGJhMWZiMWYgaW5wdXQ9YjFkZjdjNTJlN2FmZDliZF0qLwogewogICAgIF9VbnBpY2tsZXJfTWVtb0NsZWFudXAoc2VsZi0+dW5waWNrbGVyKTsKICAgICBzZWxmLT51bnBpY2tsZXItPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+dW5waWNrbGVyLT5tZW1vX3NpemUpOwpAQCAtNTc2OCwxMSArNjQ2MiwxNSBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIodW1wX2NvcHlfZG9jLAotIm1lbW8uY29weSgpIC0+IG5ld19tZW1vLiAgQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eS5jb3B5CisKK0NvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX2NvcHkoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lMTJhZjdlOWJjMWU0Yzc3IGlucHV0PTk3NzY5MjQ3Y2UwMzJjMWRdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKm5ld19tZW1vID0gUHlEaWN0X05ldygpOwpAQCAtNTgwMiwxNSArNjUwMCwxOSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIodW1wX3JlZHVjZV9kb2MsCi0ibWVtby5fX3JlZHVjZV9fKCkuIFBpY2tsaW5nIHN1cHBvcnQuIik7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eS5fX3JlZHVjZV9fCisKK0ltcGxlbWVudCBwaWNrbGluZyBzdXBwb3J0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX3JlZHVjZShVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02ZGEzNGFjMDQ4ZDk0Y2NhIGlucHV0PTY5MjA4NjI0MTM0MDcxOTldKi8KIHsKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOwogICAgIFB5T2JqZWN0ICpjb25zdHJ1Y3Rvcl9hcmdzOwotICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IHVtcF9jb3B5KHNlbGYpOworICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChzZWxmKTsKICAgICBpZiAoY29udGVudHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTU4MzMsOSArNjUzNSw5IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiB1bnBpY2tsZXJwcm94eV9tZXRob2RzW10gPSB7Ci0gICAgeyJjbGVhciIsICAgICAgIChQeUNGdW5jdGlvbil1bXBfY2xlYXIsICBNRVRIX05PQVJHUywgIHVtcF9jbGVhcl9kb2N9LAotICAgIHsiY29weSIsICAgICAgICAoUHlDRnVuY3Rpb24pdW1wX2NvcHksICAgTUVUSF9OT0FSR1MsICB1bXBfY29weV9kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsICAoUHlDRnVuY3Rpb24pdW1wX3JlZHVjZSwgTUVUSF9WQVJBUkdTLCB1bXBfcmVkdWNlX2RvY30sCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNjA1OSw3ICs2NzYxLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywKLSAgICBVbnBpY2tsZXJfZG9jLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19fX2RvY19fLCAgLyp0cF9kb2MqLwogICAgICh0cmF2ZXJzZXByb2MpVW5waWNrbGVyX3RyYXZlcnNlLCAgIC8qdHBfdHJhdmVyc2UqLwogICAgIChpbnF1aXJ5KVVucGlja2xlcl9jbGVhciwgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwpAQCAtNjA3NCw2MyArNjc3Niw1NiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAoaW5pdHByb2MpVW5waWNrbGVyX2luaXQsICAgICAgICAgICAvKnRwX2luaXQqLworICAgIF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fLCAgICAgICAgIC8qdHBfaW5pdCovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCiB9OwogCi1QeURvY19TVFJWQVIocGlja2xlX2R1bXBfZG9jLAotImR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKSAtPiBOb25lXG4iCi0iXG4iCi0iV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLiAgVGhpc1xuIgotImlzIGVxdWl2YWxlbnQgdG8gYGBQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iailgYCwgYnV0IG1heSBiZSBtb3JlXG4iCi0iZWZmaWNpZW50LlxuIgotIlxuIgotIlRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sO1xuIgotInN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhXG4iCi0iYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLlxuIgotIlxuIgotIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvblxuIgotInN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZlxuIgotIlB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgotIlxuIgotIlRoZSBmaWxlIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBieXRlc1xuIgotImFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeSB3cml0aW5nLCBhXG4iCi0iaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS5cbiIKLSJcbiIKLSJJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCi0ibWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLngsXG4iCi0ic28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC5cbiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLmR1bXAKKworICBvYmo6IG9iamVjdAorICBmaWxlOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLgorCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iailgYCwgYnV0IG1heQorYmUgbW9yZSBlZmZpY2llbnQuCisKK1RoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4KK3Byb3RvY29sIHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUgZGVmYXVsdAorcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLgorCitTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sCit2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUKK3ZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCisKK1RoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlCitieXRlcyBhcmd1bWVudC4gIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkKK3dyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cwordGhpcyBpbnRlcmZhY2UuCisKK0lmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeQordG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24KKzIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcGlja2xlX2R1bXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfZHVtcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNjA2ZTYyNmQ1NTM4NTBkIGlucHV0PWU5ZTVmZGQ0OGRlOTJlYWVdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iaiIsICJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqcHJvdG8gPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7Ci0gICAgUGlja2xlck9iamVjdCAqcGlja2xlcjsKKyAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cyBpcyBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgPiAzKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAicGlja2xlLmR1bXAoKSB0YWtlcyBhdCBtb3N0IDMgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PfE9POmR1bXAiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90bywgJmZpeF9pbXBvcnRzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CiAgICAgaWYgKHBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG8sIGZpeF9pbXBvcnRzKSA8IDApCisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9QaWNrbGVyX1NldE91dHB1dFN0cmVhbShwaWNrbGVyLCBmaWxlKSA8IDApCkBAIC02MTUwLDUxICs2ODQ1LDQxIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfZHVtcHNfZG9jLAotImR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzXG4iCi0ib2JqZWN0LCBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQgdG8gYSBmaWxlLlxuIgotIlxuIgotIlRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sO1xuIgotInN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhXG4iCi0iYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLlxuIgotIlxuIgotIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvblxuIgotInN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZlxuIgotIlB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgotIlxuIgotIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgotIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LFxuIgotInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5kdW1wcworCisgIG9iajogb2JqZWN0CisgIHByb3RvY29sOiBvYmplY3QgPSBOVUxMCisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK1JldHVybiB0aGUgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGFzIGEgYnl0ZXMgb2JqZWN0LgorCitUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuCitwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0Citwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wKK3ZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZQordmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbAordHJ5IHRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4KK1B5dGhvbiAyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBpY2tsZV9kdW1wcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9kdW1wc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTc3N2YwZGVlZmU1Yjg4ZWUgaW5wdXQ9MjkzZGJlZGExODE1ODBiN10qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBQeU9iamVjdCAqcHJvdG8gPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKLSAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOworICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzIGlzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSA+IDIpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUuZHVtcHMoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T086ZHVtcHMiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJnByb3RvLCAmZml4X2ltcG9ydHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKICAgICBpZiAocGlja2xlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90bywgZml4X2ltcG9ydHMpIDwgMCkKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoZHVtcChwaWNrbGVyLCBvYmopIDwgMCkKQEAgLTYyMDksNTQgKzY4OTQsNDggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9sb2FkX2RvYywKLSJsb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykgLT4gb2JqZWN0XG4iCi0iXG4iCi0iUmVhZCBhIHBpY2tsZWQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG9wZW4gZmlsZSBvYmplY3QgZmlsZSBhbmRcbiIKLSJyZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbi4gIFRoaXMgaXNcbiIKLSJlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50LlxuIgotIlxuIgotIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2xcbiIKLSJhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZVxuIgotImlnbm9yZWQuXG4iCi0iXG4iCi0iVGhlIGFyZ3VtZW50IGZpbGUgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhblxuIgotImludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgQm90aFxuIgotIm1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhIGJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWRcbiIKLSJmb3IgcmVhZGluZywgYSBCeXRlc0lPIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzXG4iCi0iaW50ZXJmYWNlLlxuIgotIlxuIgotIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyxcbiIKLSJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZFxuIgotImJ5IFB5dGhvbiAyLnguICBJZiBmaXhfaW1wb3J0cyBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGRcbiIKLSJQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlIGVuY29kaW5nIGFuZFxuIgotImVycm9ycyB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob25cbiIKLSIyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS5cbiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLmxvYWQKKworICBmaWxlOiBvYmplY3QKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKyAgZW5jb2Rpbmc6IHN0ciA9ICdBU0NJSScKKyAgZXJyb3JzOiBzdHIgPSAnc3RyaWN0JworCitSZWFkIGFuZCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIHBpY2tsZSBkYXRhIHN0b3JlZCBpbiBhIGZpbGUuCisKK1RoaXMgaXMgZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYCwgYnV0IG1heSBiZSBtb3JlCitlZmZpY2llbnQuCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMKK2FuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8KK2FyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGEKK2JpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGEgaW8uQnl0ZXNJTyBvYmplY3QsIG9yIGFueQorb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsCityZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0CitzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfbG9hZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9sb2FkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NjhjNjEzNTZjMTcyNjU0IGlucHV0PWRhOTczNzJlMzhlNTEwYTZdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07Ci0gICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyOworICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzIGFyZSBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5sb2FkKCkgdGFrZXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T3NzOmxvYWQiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICB1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOwogICAgIGlmICh1bnBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTYyNjYsOSArNjk0NSw3IEBACiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyh1bnBpY2tsZXIsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOwotICAgIGlmICh1bnBpY2tsZXItPmZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICBnb3RvIGVycm9yOworICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKIAogICAgIHJlc3VsdCA9IGxvYWQodW5waWNrbGVyKTsKICAgICBQeV9ERUNSRUYodW5waWNrbGVyKTsKQEAgLTYyNzksNTkgKzY5NTYsNDkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9sb2Fkc19kb2MsCi0ibG9hZHMoaW5wdXQsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykgLT4gb2JqZWN0XG4iCi0iXG4iCi0iUmVhZCBhIHBpY2tsZWQgb2JqZWN0IGhpZXJhcmNoeSBmcm9tIGEgYnl0ZXMgb2JqZWN0IGFuZCByZXR1cm4gdGhlXG4iCi0icmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluXG4iCi0iXG4iCi0iVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbFxuIgotImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCi0iaWdub3JlZC5cbiIKLSJcbiIKLSJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsIHdoaWNoXG4iCi0iYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWRcbiIKLSJieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkXG4iCi0iUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmRcbiIKLSJlcnJvcnMgdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uXG4iCi0iMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5sb2FkcworCisgIGRhdGE6IG9iamVjdAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorICBlbmNvZGluZzogc3RyID0gJ0FTQ0lJJworICBlcnJvcnM6IHN0ciA9ICdzdHJpY3QnCisKK1JlYWQgYW5kIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlIGRhdGEuCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsCityZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0CitzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfbG9hZHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfbG9hZHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZGF0YSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBiMzg0NWFkMTEwYjI1MjIgaW5wdXQ9ZjU3ZjBmZGFhMmI0Y2I4Yl0qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaW5wdXQiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07Ci0gICAgUHlPYmplY3QgKmlucHV0OwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyBhcmUgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUubG9hZHMoKSB0YWtlcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPc3M6bG9hZHMiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0LCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKICAgICBpZiAodW5waWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQodW5waWNrbGVyLCBpbnB1dCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHVucGlja2xlciwgZGF0YSkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyh1bnBpY2tsZXIsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOwotICAgIGlmICh1bnBpY2tsZXItPmZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICBnb3RvIGVycm9yOworICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKIAogICAgIHJlc3VsdCA9IGxvYWQodW5waWNrbGVyKTsKICAgICBQeV9ERUNSRUYodW5waWNrbGVyKTsKQEAgLTYzNDIsMTM5ICs3MDA5LDY5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBwaWNrbGVfbWV0aG9kc1tdID0gewotICAgIHsiZHVtcCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2R1bXAsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2R1bXBfZG9jfSwKLSAgICB7ImR1bXBzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9kdW1wcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9kdW1wc19kb2N9LAotICAgIHsibG9hZCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2xvYWQsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2xvYWRfZG9jfSwKLSAgICB7ImxvYWRzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9sb2Fkc19kb2N9LAorICAgIF9QSUNLTEVfRFVNUF9NRVRIT0RERUYKKyAgICBfUElDS0xFX0RVTVBTX01FVEhPRERFRgorICAgIF9QSUNLTEVfTE9BRF9NRVRIT0RERUYKKyAgICBfUElDS0xFX0xPQURTX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIAogc3RhdGljIGludAotaW5pdG1vZHVsZSh2b2lkKQorcGlja2xlX2NsZWFyKFB5T2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTDsKLSAgICBQeU9iamVjdCAqY29tcGF0X3BpY2tsZSA9IE5VTEw7Ci0KLSAgICAvKiBYWFg6IFdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgdHlwZXMgb2YgdGhlIGRpY3Rpb25hcmllcyBpbXBvcnRlZCBhcmUKLSAgICAgICBleGFjdGx5IFB5RGljdCBvYmplY3RzLiBPdGhlcndpc2UsIGl0IGlzIHBvc3NpYmxlIHRvIGNyYXNoIHRoZSBwaWNrbGUKLSAgICAgICBzaW5jZSB3ZSB1c2UgdGhlIFB5RGljdCBBUEkgZGlyZWN0bHkgdG8gYWNjZXNzIHRoZXNlIGRpY3Rpb25hcmllcy4gKi8KLQotICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKLSAgICBpZiAoIWNvcHlyZWcpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZGlzcGF0Y2hfdGFibGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJkaXNwYXRjaF90YWJsZSIpOwotICAgIGlmICghZGlzcGF0Y2hfdGFibGUpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gXAotICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX3JlZ2lzdHJ5Iik7Ci0gICAgaWYgKCFleHRlbnNpb25fcmVnaXN0cnkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaW52ZXJ0ZWRfcmVnaXN0cnkgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfaW52ZXJ0ZWRfcmVnaXN0cnkiKTsKLSAgICBpZiAoIWludmVydGVkX3JlZ2lzdHJ5KQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGV4dGVuc2lvbl9jYWNoZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29weXJlZywgIl9leHRlbnNpb25fY2FjaGUiKTsKLSAgICBpZiAoIWV4dGVuc2lvbl9jYWNoZSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihjb3B5cmVnKTsKLQotICAgIC8qIExvYWQgdGhlIDIueCAtPiAzLnggc3RkbGliIG1vZHVsZSBtYXBwaW5nIHRhYmxlcyAqLwotICAgIGNvbXBhdF9waWNrbGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9jb21wYXRfcGlja2xlIik7Ci0gICAgaWYgKCFjb21wYXRfcGlja2xlKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIG5hbWVfbWFwcGluZ18ydG8zID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiTkFNRV9NQVBQSU5HIik7Ci0gICAgaWYgKCFuYW1lX21hcHBpbmdfMnRvMykKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG5hbWVfbWFwcGluZ18ydG8zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobmFtZV9tYXBwaW5nXzJ0bzMpLT50cF9uYW1lKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgaW1wb3J0X21hcHBpbmdfMnRvMyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU1QT1JUX01BUFBJTkciKTsKLSAgICBpZiAoIWltcG9ydF9tYXBwaW5nXzJ0bzMpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChpbXBvcnRfbWFwcGluZ18ydG8zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShpbXBvcnRfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIC8qIC4uLiBhbmQgdGhlIDMueCAtPiAyLnggbWFwcGluZyB0YWJsZXMgKi8KLSAgICBuYW1lX21hcHBpbmdfM3RvMiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFVkVSU0VfTkFNRV9NQVBQSU5HIik7Ci0gICAgaWYgKCFuYW1lX21hcHBpbmdfM3RvMikKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG5hbWVfbWFwcGluZ18zdG8yKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShuYW1lX21hcHBpbmdfM3RvMiktPnRwX25hbWUpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBpbXBvcnRfbWFwcGluZ18zdG8yID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRVZFUlNFX0lNUE9SVF9NQVBQSU5HIik7Ci0gICAgaWYgKCFpbXBvcnRfbWFwcGluZ18zdG8yKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3QoaW1wb3J0X21hcHBpbmdfM3RvMikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShpbXBvcnRfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOwotCi0gICAgZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKLSAgICBpZiAoZW1wdHlfdHVwbGUgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB0d29fdHVwbGUgPSBQeVR1cGxlX05ldygyKTsKLSAgICBpZiAodHdvX3R1cGxlID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgLyogV2UgdXNlIHRoaXMgdGVtcCBjb250YWluZXIgd2l0aCBubyByZWdhcmQgdG8gcmVmY291bnRzLCBvciB0bwotICAgICAqIGtlZXBpbmcgY29udGFpbmVlcyBhbGl2ZS4gIEV4ZW1wdCBmcm9tIEdDLCBiZWNhdXNlIHdlIGRvbid0Ci0gICAgICogd2FudCBhbnl0aGluZyBsb29raW5nIGF0IHR3b190dXBsZSgpIGJ5IG1hZ2ljLgotICAgICAqLwotICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sodHdvX3R1cGxlKTsKLQorICAgIF9QaWNrbGVfQ2xlYXJTdGF0ZShfUGlja2xlX0dldFN0YXRlKG0pKTsKICAgICByZXR1cm4gMDsKK30KIAotICBlcnJvcjoKLSAgICBQeV9DTEVBUihjb3B5cmVnKTsKLSAgICBQeV9DTEVBUihkaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfQ0xFQVIoZXh0ZW5zaW9uX3JlZ2lzdHJ5KTsKLSAgICBQeV9DTEVBUihpbnZlcnRlZF9yZWdpc3RyeSk7Ci0gICAgUHlfQ0xFQVIoZXh0ZW5zaW9uX2NhY2hlKTsKLSAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKLSAgICBQeV9DTEVBUihuYW1lX21hcHBpbmdfMnRvMyk7Ci0gICAgUHlfQ0xFQVIoaW1wb3J0X21hcHBpbmdfMnRvMyk7Ci0gICAgUHlfQ0xFQVIobmFtZV9tYXBwaW5nXzN0bzIpOwotICAgIFB5X0NMRUFSKGltcG9ydF9tYXBwaW5nXzN0bzIpOwotICAgIFB5X0NMRUFSKGVtcHR5X3R1cGxlKTsKLSAgICBQeV9DTEVBUih0d29fdHVwbGUpOwotICAgIHJldHVybiAtMTsKK3N0YXRpYyB2b2lkCitwaWNrbGVfZnJlZShQeU9iamVjdCAqbSkKK3sKKyAgICBfUGlja2xlX0NsZWFyU3RhdGUoX1BpY2tsZV9HZXRTdGF0ZShtKSk7Cit9CisKK3N0YXRpYyBpbnQKK3BpY2tsZV90cmF2ZXJzZShQeU9iamVjdCAqbSwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRTdGF0ZShtKTsKKyAgICBQeV9WSVNJVChzdC0+UGlja2xlRXJyb3IpOworICAgIFB5X1ZJU0lUKHN0LT5QaWNrbGluZ0Vycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+VW5waWNrbGluZ0Vycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+ZGlzcGF0Y2hfdGFibGUpOworICAgIFB5X1ZJU0lUKHN0LT5leHRlbnNpb25fcmVnaXN0cnkpOworICAgIFB5X1ZJU0lUKHN0LT5leHRlbnNpb25fY2FjaGUpOworICAgIFB5X1ZJU0lUKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSk7CisgICAgUHlfVklTSVQoc3QtPm5hbWVfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9WSVNJVChzdC0+aW1wb3J0X21hcHBpbmdfMnRvMyk7CisgICAgUHlfVklTSVQoc3QtPm5hbWVfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9WSVNJVChzdC0+aW1wb3J0X21hcHBpbmdfM3RvMik7CisgICAgUHlfVklTSVQoc3QtPmNvZGVjc19lbmNvZGUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9waWNrbGVtb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJfcGlja2xlIiwKLSAgICBwaWNrbGVfbW9kdWxlX2RvYywKLSAgICAtMSwKLSAgICBwaWNrbGVfbWV0aG9kcywKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCisgICAgIl9waWNrbGUiLCAgICAgICAgICAgIC8qIG1fbmFtZSAqLworICAgIHBpY2tsZV9tb2R1bGVfZG9jLCAgICAvKiBtX2RvYyAqLworICAgIHNpemVvZihQaWNrbGVTdGF0ZSksICAvKiBtX3NpemUgKi8KKyAgICBwaWNrbGVfbWV0aG9kcywgICAgICAgLyogbV9tZXRob2RzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgIC8qIG1fcmVsb2FkICovCisgICAgcGlja2xlX3RyYXZlcnNlLCAgICAgIC8qIG1fdHJhdmVyc2UgKi8KKyAgICBwaWNrbGVfY2xlYXIsICAgICAgICAgLyogbV9jbGVhciAqLworICAgIChmcmVlZnVuYylwaWNrbGVfZnJlZSAvKiBtX2ZyZWUgKi8KIH07CiAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3BpY2tsZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptOworICAgIFBpY2tsZVN0YXRlICpzdDsKKworICAgIG0gPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJl9waWNrbGVtb2R1bGUpOworICAgIGlmIChtKSB7CisgICAgICAgIFB5X0lOQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIG07CisgICAgfQogCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmVW5waWNrbGVyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDk5LDI3ICs3MDk2LDMyIEBACiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVW5waWNrbGVyIiwgKFB5T2JqZWN0ICopJlVucGlja2xlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgc3QgPSBfUGlja2xlX0dldFN0YXRlKG0pOworCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZXhjZXB0aW9ucy4gKi8KLSAgICBQaWNrbGVFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGVFcnJvciIsIE5VTEwsIE5VTEwpOwotICAgIGlmIChQaWNrbGVFcnJvciA9PSBOVUxMKQorICAgIHN0LT5QaWNrbGVFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGVFcnJvciIsIE5VTEwsIE5VTEwpOworICAgIGlmIChzdC0+UGlja2xlRXJyb3IgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUGlja2xpbmdFcnJvciA9IFwKLSAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uKCJfcGlja2xlLlBpY2tsaW5nRXJyb3IiLCBQaWNrbGVFcnJvciwgTlVMTCk7Ci0gICAgaWYgKFBpY2tsaW5nRXJyb3IgPT0gTlVMTCkKKyAgICBzdC0+UGlja2xpbmdFcnJvciA9IFwKKyAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uKCJfcGlja2xlLlBpY2tsaW5nRXJyb3IiLCBzdC0+UGlja2xlRXJyb3IsIE5VTEwpOworICAgIGlmIChzdC0+UGlja2xpbmdFcnJvciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBVbnBpY2tsaW5nRXJyb3IgPSBcCi0gICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5VbnBpY2tsaW5nRXJyb3IiLCBQaWNrbGVFcnJvciwgTlVMTCk7Ci0gICAgaWYgKFVucGlja2xpbmdFcnJvciA9PSBOVUxMKQorICAgIHN0LT5VbnBpY2tsaW5nRXJyb3IgPSBcCisgICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5VbnBpY2tsaW5nRXJyb3IiLCBzdC0+UGlja2xlRXJyb3IsIE5VTEwpOworICAgIGlmIChzdC0+VW5waWNrbGluZ0Vycm9yID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGlja2xlRXJyb3IiLCBQaWNrbGVFcnJvcikgPCAwKQorICAgIFB5X0lOQ1JFRihzdC0+UGlja2xlRXJyb3IpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsZUVycm9yIiwgc3QtPlBpY2tsZUVycm9yKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsaW5nRXJyb3IiLCBQaWNrbGluZ0Vycm9yKSA8IDApCisgICAgUHlfSU5DUkVGKHN0LT5QaWNrbGluZ0Vycm9yKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQaWNrbGluZ0Vycm9yIiwgc3QtPlBpY2tsaW5nRXJyb3IpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVW5waWNrbGluZ0Vycm9yIiwgVW5waWNrbGluZ0Vycm9yKSA8IDApCisgICAgUHlfSU5DUkVGKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVucGlja2xpbmdFcnJvciIsIHN0LT5VbnBpY2tsaW5nRXJyb3IpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoaW5pdG1vZHVsZSgpIDwgMCkKKyAgICBpZiAoX1BpY2tsZV9Jbml0U3RhdGUoc3QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKaW5kZXggMDE5NmNhMi4uZjg0Y2QyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKKysrIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKQEAgLTE4LDYgKzE4LDEyIEBACiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19BTkRST0lEX18pICYmICFkZWZpbmVkKFNZU19nZXRkZW50czY0KQorLyogQW5kcm9pZCBkb2Vzbid0IGV4cG9zZSBzeXNjYWxscywgYWRkIHRoZSBkZWZpbml0aW9uIG1hbnVhbGx5LiAqLworIyBpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyMgZGVmaW5lIFNZU19nZXRkZW50czY0ICBfX05SX2dldGRlbnRzNjQKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChzdW4pCiAvKiByZWFkZGlyNjQgaXMgdXNlZCB0byB3b3JrIGFyb3VuZCBTb2xhcmlzIDkgYnVnIDYzOTU2OTkuICovCiAjIGRlZmluZSByZWFkZGlyIHJlYWRkaXI2NApAQCAtMzUsMTEgKzQxLDcgQEAKICMgZGVmaW5lIEZEX0RJUiAiL3Byb2Mvc2VsZi9mZCIKICNlbmRpZgogCi0jZGVmaW5lIFBPU0lYX0NBTEwoY2FsbCkgICBpZiAoKGNhbGwpID09IC0xKSBnb3RvIGVycm9yCi0KLQotLyogTWF4aW11bSBmaWxlIGRlc2NyaXB0b3IsIGluaXRpYWxpemVkIG9uIG1vZHVsZSBsb2FkLiAqLwotc3RhdGljIGxvbmcgbWF4X2ZkOworI2RlZmluZSBQT1NJWF9DQUxMKGNhbGwpICAgZG8geyBpZiAoKGNhbGwpID09IC0xKSBnb3RvIGVycm9yOyB9IHdoaWxlICgwKQogCiAKIC8qIEdpdmVuIHRoZSBnYyBtb2R1bGUgY2FsbCBnYy5lbmFibGUoKSBhbmQgcmV0dXJuIDAgb24gc3VjY2Vzcy4gKi8KQEAgLTg3LDcgKzg5LDcgQEAKICAgICBpZiAoc3RhdCgiL2RldiIsICZkZXZfc3RhdCkgIT0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHN0YXQoRkRfRElSLCAmZGV2X2ZkX3N0YXQpICE9IDApCi0gICAgICAgIHJldHVybiAwOyAKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGRldl9zdGF0LnN0X2RldiA9PSBkZXZfZmRfc3RhdC5zdF9kZXYpCiAgICAgICAgIHJldHVybiAwOyAgLyogLyA9PSAvZGV2ID09IC9kZXYvZmQgbWVhbnMgaXQgaXMgc3RhdGljLiAjZmFpbCAqLwogICAgIHJldHVybiAxOwpAQCAtMTM2LDE1ICsxMzgsNjMgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbWFrZV9pbmhlcml0YWJsZShQeU9iamVjdCAqcHlfZmRzX3RvX2tlZXAsIGludCBlcnJwaXBlX3dyaXRlKQoreworICAgIFB5X3NzaXplX3QgaSwgbGVuOwogCi0vKiBDbG9zZSBhbGwgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgcmFuZ2Ugc3RhcnRfZmQgaW5jbHVzaXZlIHRvCi0gKiBlbmRfZmQgZXhjbHVzaXZlIGV4Y2VwdCBmb3IgdGhvc2UgaW4gcHlfZmRzX3RvX2tlZXAuICBJZiB0aGUKLSAqIHJhbmdlIGRlZmluZWQgYnkgW3N0YXJ0X2ZkLCBlbmRfZmQpIGlzIGxhcmdlIHRoaXMgd2lsbCB0YWtlIGEKLSAqIGxvbmcgdGltZSBhcyBpdCBjYWxscyBjbG9zZSgpIG9uIEVWRVJZIHBvc3NpYmxlIGZkLgorICAgIGxlbiA9IFB5U2VxdWVuY2VfTGVuZ3RoKHB5X2Zkc190b19rZWVwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QqIGZkb2JqID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHB5X2Zkc190b19rZWVwLCBpKTsKKyAgICAgICAgbG9uZyBmZCA9IFB5TG9uZ19Bc0xvbmcoZmRvYmopOworICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworICAgICAgICBhc3NlcnQoMCA8PSBmZCAmJiBmZCA8PSBJTlRfTUFYKTsKKyAgICAgICAgaWYgKGZkID09IGVycnBpcGVfd3JpdGUpIHsKKyAgICAgICAgICAgIC8qIGVycnBpcGVfd3JpdGUgaXMgcGFydCBvZiBweV9mZHNfdG9fa2VlcC4gSXQgbXVzdCBiZSBjbG9zZWQgYXQKKyAgICAgICAgICAgICAgIGV4ZWMoKSwgYnV0IGtlcHQgb3BlbiBpbiB0aGUgY2hpbGQgcHJvY2VzcyB1bnRpbCBleGVjKCkgaXMKKyAgICAgICAgICAgICAgIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKChpbnQpZmQsIDEsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworLyogR2V0IHRoZSBtYXhpbXVtIGZpbGUgZGVzY3JpcHRvciB0aGF0IGNvdWxkIGJlIG9wZW5lZCBieSB0aGlzIHByb2Nlc3MuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFzeW5jIHNpZ25hbCBzYWZlIGZvciB1c2UgYmV0d2VlbiBmb3JrKCkgYW5kIGV4ZWMoKS4KKyAqLworc3RhdGljIGxvbmcKK3NhZmVfZ2V0X21heF9mZCh2b2lkKQoreworICAgIGxvbmcgbG9jYWxfbWF4X2ZkOworI2lmIGRlZmluZWQoX19OZXRCU0RfXykKKyAgICBsb2NhbF9tYXhfZmQgPSBmY250bCgwLCBGX01BWEZEKTsKKyAgICBpZiAobG9jYWxfbWF4X2ZkID49IDApCisgICAgICAgIHJldHVybiBsb2NhbF9tYXhfZmQ7CisjZW5kaWYKKyNpZmRlZiBfU0NfT1BFTl9NQVgKKyAgICBsb2NhbF9tYXhfZmQgPSBzeXNjb25mKF9TQ19PUEVOX01BWCk7CisgICAgaWYgKGxvY2FsX21heF9mZCA9PSAtMSkKKyNlbmRpZgorICAgICAgICBsb2NhbF9tYXhfZmQgPSAyNTY7ICAvKiBNYXRjaGVzIGxlZ2FjeSBMaWIvc3VicHJvY2Vzcy5weSBiZWhhdmlvci4gKi8KKyAgICByZXR1cm4gbG9jYWxfbWF4X2ZkOworfQorCisKKy8qIENsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSByYW5nZSBmcm9tIHN0YXJ0X2ZkIGFuZCBoaWdoZXIKKyAqIGV4Y2VwdCBmb3IgdGhvc2UgaW4gcHlfZmRzX3RvX2tlZXAuICBJZiB0aGUgcmFuZ2UgZGVmaW5lZCBieQorICogW3N0YXJ0X2ZkLCBzYWZlX2dldF9tYXhfZmQoKSkgaXMgbGFyZ2UgdGhpcyB3aWxsIHRha2UgYSBsb25nCisgKiB0aW1lIGFzIGl0IGNhbGxzIGNsb3NlKCkgb24gRVZFUlkgcG9zc2libGUgZmQuCisgKgorICogSXQgaXNuJ3QgcG9zc2libGUgdG8ga25vdyBmb3Igc3VyZSB3aGF0IHRoZSBtYXggZmQgdG8gZ28gdXAgdG8KKyAqIGlzIGZvciBwcm9jZXNzZXMgd2l0aCB0aGUgY2FwYWJpbGl0eSBvZiByYWlzaW5nIHRoZWlyIG1heGltdW0uCiAgKi8KIHN0YXRpYyB2b2lkCi1fY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKGludCBzdGFydF9mZCwgaW50IGVuZF9mZCwgUHlPYmplY3QgKnB5X2Zkc190b19rZWVwKQorX2Nsb3NlX2Zkc19ieV9icnV0ZV9mb3JjZShsb25nIHN0YXJ0X2ZkLCBQeU9iamVjdCAqcHlfZmRzX3RvX2tlZXApCiB7CisgICAgbG9uZyBlbmRfZmQgPSBzYWZlX2dldF9tYXhfZmQoKTsKICAgICBQeV9zc2l6ZV90IG51bV9mZHNfdG9fa2VlcCA9IFB5U2VxdWVuY2VfTGVuZ3RoKHB5X2Zkc190b19rZWVwKTsKICAgICBQeV9zc2l6ZV90IGtlZXBfc2VxX2lkeDsKICAgICBpbnQgZmRfbnVtOwpAQCAtMTg0LDggKzIzNCw4IEBACiAgICBjaGFyICAgICAgICAgICBkX25hbWVbMjU2XTsgIC8qIEZpbGVuYW1lIChudWxsLXRlcm1pbmF0ZWQpICovCiB9OwogCi0vKiBDbG9zZSBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSByYW5nZSBzdGFydF9mZCBpbmNsdXNpdmUgdG8gZW5kX2ZkCi0gKiBleGNsdXNpdmUuIERvIG5vdCBjbG9zZSBhbnkgaW4gdGhlIHNvcnRlZCBweV9mZHNfdG9fa2VlcCBsaXN0LgorLyogQ2xvc2UgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgcmFuZ2UgZnJvbSBzdGFydF9mZCBhbmQgaGlnaGVyCisgKiBEbyBub3QgY2xvc2UgYW55IGluIHRoZSBzb3J0ZWQgcHlfZmRzX3RvX2tlZXAgbGlzdC4KICAqCiAgKiBUaGlzIHZlcnNpb24gaXMgYXN5bmMgc2lnbmFsIHNhZmUgYXMgaXQgZG9lcyBub3QgbWFrZSBhbnkgdW5zYWZlIEMgbGlicmFyeQogICogY2FsbHMsIG1hbGxvYyBjYWxscyBvciBoYW5kbGUgYW55IGxvY2tzLiAgSXQgaXMgX3VuZm9ydHVuYXRlXyB0byBiZSBmb3JjZWQKQEAgLTIwMCwyNiArMjUwLDE0IEBACiAgKiBpdCB3aXRoIHNvbWUgY3BwICNkZWZpbmUgbWFnaWMgdG8gd29yayBvbiBvdGhlciBPU2VzIGFzIHdlbGwgaWYgeW91IHdhbnQuCiAgKi8KIHN0YXRpYyB2b2lkCi1fY2xvc2Vfb3Blbl9mZF9yYW5nZV9zYWZlKGludCBzdGFydF9mZCwgaW50IGVuZF9mZCwgUHlPYmplY3QqIHB5X2Zkc190b19rZWVwKQorX2Nsb3NlX29wZW5fZmRzX3NhZmUoaW50IHN0YXJ0X2ZkLCBQeU9iamVjdCogcHlfZmRzX3RvX2tlZXApCiB7CiAgICAgaW50IGZkX2Rpcl9mZDsKLSAgICBpZiAoc3RhcnRfZmQgPj0gZW5kX2ZkKQotICAgICAgICByZXR1cm47Ci0jaWZkZWYgT19DTE9FWEVDCi0gICAgZmRfZGlyX2ZkID0gb3BlbihGRF9ESVIsIE9fUkRPTkxZIHwgT19DTE9FWEVDLCAwKTsKLSNlbHNlCi0gICAgZmRfZGlyX2ZkID0gb3BlbihGRF9ESVIsIE9fUkRPTkxZLCAwKTsKLSNpZmRlZiBGRF9DTE9FWEVDCi0gICAgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoZmRfZGlyX2ZkLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGZkX2Rpcl9mZCwgRl9TRVRGRCwgb2xkIHwgRkRfQ0xPRVhFQyk7Ci0gICAgfQotI2VuZGlmCi0jZW5kaWYKKworICAgIGZkX2Rpcl9mZCA9IF9QeV9vcGVuKEZEX0RJUiwgT19SRE9OTFkpOwogICAgIGlmIChmZF9kaXJfZmQgPT0gLTEpIHsKICAgICAgICAgLyogTm8gd2F5IHRvIGdldCBhIGxpc3Qgb2Ygb3BlbiBmZHMuICovCi0gICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIGVuZF9mZCwgcHlfZmRzX3RvX2tlZXApOworICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBweV9mZHNfdG9fa2VlcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewogICAgICAgICBjaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGxpbnV4X2RpcmVudDY0KV07CkBAIC0yMzQsMjMgKzI3MiwyMyBAQAogICAgICAgICAgICAgICAgIGVudHJ5ID0gKHN0cnVjdCBsaW51eF9kaXJlbnQ2NCAqKShidWZmZXIgKyBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmICgoZmQgPSBfcG9zX2ludF9mcm9tX2FzY2lpKGVudHJ5LT5kX25hbWUpKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgLyogTm90IGEgbnVtYmVyLiAqLwotICAgICAgICAgICAgICAgIGlmIChmZCAhPSBmZF9kaXJfZmQgJiYgZmQgPj0gc3RhcnRfZmQgJiYgZmQgPCBlbmRfZmQgJiYKKyAgICAgICAgICAgICAgICBpZiAoZmQgIT0gZmRfZGlyX2ZkICYmIGZkID49IHN0YXJ0X2ZkICYmCiAgICAgICAgICAgICAgICAgICAgICFfaXNfZmRfaW5fc29ydGVkX2ZkX3NlcXVlbmNlKGZkLCBweV9mZHNfdG9fa2VlcCkpIHsKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZkKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9zZShmZF9kaXJfZmQpOworICAgICAgICB3aGlsZSAoY2xvc2UoZmRfZGlyX2ZkKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwogICAgIH0KIH0KIAotI2RlZmluZSBfY2xvc2Vfb3Blbl9mZF9yYW5nZSBfY2xvc2Vfb3Blbl9mZF9yYW5nZV9zYWZlCisjZGVmaW5lIF9jbG9zZV9vcGVuX2ZkcyBfY2xvc2Vfb3Blbl9mZHNfc2FmZQogCiAjZWxzZSAgLyogTk9UIChkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChIQVZFX1NZU19TWVNDQUxMX0gpKSAqLwogCiAKLS8qIENsb3NlIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIHJhbmdlIHN0YXJ0X2ZkIGluY2x1c2l2ZSB0byBlbmRfZmQKLSAqIGV4Y2x1c2l2ZS4gRG8gbm90IGNsb3NlIGFueSBpbiB0aGUgc29ydGVkIHB5X2Zkc190b19rZWVwIGxpc3QuCisvKiBDbG9zZSBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGZyb20gc3RhcnRfZmQgYW5kIGhpZ2hlci4KKyAqIERvIG5vdCBjbG9zZSBhbnkgaW4gdGhlIHNvcnRlZCBweV9mZHNfdG9fa2VlcCBsaXN0LgogICoKICAqIFRoaXMgZnVuY3Rpb24gdmlvbGF0ZXMgdGhlIHN0cmljdCB1c2Ugb2YgYXN5bmMgc2lnbmFsIHNhZmUgZnVuY3Rpb25zLiA6KAogICogSXQgY2FsbHMgb3BlbmRpcigpLCByZWFkZGlyKCkgYW5kIGNsb3NlZGlyKCkuICBPZiB0aGVzZSwgdGhlIG9uZSBtb3N0CkBAIC0yNjMsMTcgKzMwMSwxMyBAQAogICogICBodHRwOi8vd29tYmxlLmRlY2FkZW50Lm9yZy51ay9yZWFkZGlyX3ItYWR2aXNvcnkuaHRtbAogICovCiBzdGF0aWMgdm9pZAotX2Nsb3NlX29wZW5fZmRfcmFuZ2VfbWF5YmVfdW5zYWZlKGludCBzdGFydF9mZCwgaW50IGVuZF9mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogcHlfZmRzX3RvX2tlZXApCitfY2xvc2Vfb3Blbl9mZHNfbWF5YmVfdW5zYWZlKGxvbmcgc3RhcnRfZmQsIFB5T2JqZWN0KiBweV9mZHNfdG9fa2VlcCkKIHsKICAgICBESVIgKnByb2NfZmRfZGlyOwogI2lmbmRlZiBIQVZFX0RJUkZECi0gICAgd2hpbGUgKF9pc19mZF9pbl9zb3J0ZWRfZmRfc2VxdWVuY2Uoc3RhcnRfZmQsIHB5X2Zkc190b19rZWVwKSAmJgotICAgICAgICAgICAoc3RhcnRfZmQgPCBlbmRfZmQpKSB7CisgICAgd2hpbGUgKF9pc19mZF9pbl9zb3J0ZWRfZmRfc2VxdWVuY2Uoc3RhcnRfZmQsIHB5X2Zkc190b19rZWVwKSkgewogICAgICAgICArK3N0YXJ0X2ZkOwogICAgIH0KLSAgICBpZiAoc3RhcnRfZmQgPj0gZW5kX2ZkKQotICAgICAgICByZXR1cm47CiAgICAgLyogQ2xvc2Ugb3VyIGxvd2VzdCBmZCBiZWZvcmUgd2UgY2FsbCBvcGVuZGlyIHNvIHRoYXQgaXQgaXMgbGlrZWx5IHRvCiAgICAgICogcmV1c2UgdGhhdCBmZCBvdGhlcndpc2Ugd2UgbWlnaHQgY2xvc2Ugb3BlbmRpcidzIGZpbGUgZGVzY3JpcHRvciBpbgogICAgICAqIG91ciBsb29wLiAgVGhpcyB0cmljayBhc3N1bWVzIHRoYXQgZmQncyBhcmUgYWxsb2NhdGVkIG9uIGEgbG93ZXN0CkBAIC0yODEsOCArMzE1LDYgQEAKICAgICB3aGlsZSAoY2xvc2Uoc3RhcnRfZmQpIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CiAgICAgKytzdGFydF9mZDsKICNlbmRpZgotICAgIGlmIChzdGFydF9mZCA+PSBlbmRfZmQpCi0gICAgICAgIHJldHVybjsKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAgICAgaWYgKCFfaXNfZmRlc2Nmc19tb3VudGVkX29uX2Rldl9mZCgpKQpAQCAtMjkyLDcgKzMyNCw3IEBACiAgICAgICAgIHByb2NfZmRfZGlyID0gb3BlbmRpcihGRF9ESVIpOwogICAgIGlmICghcHJvY19mZF9kaXIpIHsKICAgICAgICAgLyogTm8gd2F5IHRvIGdldCBhIGxpc3Qgb2Ygb3BlbiBmZHMuICovCi0gICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIGVuZF9mZCwgcHlfZmRzX3RvX2tlZXApOworICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBweV9mZHNfdG9fa2VlcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RydWN0IGRpcmVudCAqZGlyX2VudHJ5OwogI2lmZGVmIEhBVkVfRElSRkQKQEAgLTMwNSw3ICszMzcsNyBAQAogICAgICAgICAgICAgaW50IGZkOwogICAgICAgICAgICAgaWYgKChmZCA9IF9wb3NfaW50X2Zyb21fYXNjaWkoZGlyX2VudHJ5LT5kX25hbWUpKSA8IDApCiAgICAgICAgICAgICAgICAgY29udGludWU7ICAvKiBOb3QgYSBudW1iZXIuICovCi0gICAgICAgICAgICBpZiAoZmQgIT0gZmRfdXNlZF9ieV9vcGVuZGlyICYmIGZkID49IHN0YXJ0X2ZkICYmIGZkIDwgZW5kX2ZkICYmCisgICAgICAgICAgICBpZiAoZmQgIT0gZmRfdXNlZF9ieV9vcGVuZGlyICYmIGZkID49IHN0YXJ0X2ZkICYmCiAgICAgICAgICAgICAgICAgIV9pc19mZF9pbl9zb3J0ZWRfZmRfc2VxdWVuY2UoZmQsIHB5X2Zkc190b19rZWVwKSkgewogICAgICAgICAgICAgICAgIHdoaWxlIChjbG9zZShmZCkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKICAgICAgICAgICAgIH0KQEAgLTMxMywxMyArMzQ1LDEzIEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGVycm5vKSB7CiAgICAgICAgICAgICAvKiByZWFkZGlyIGVycm9yLCByZXZlcnQgYmVoYXZpb3IuIEhpZ2hseSBVbmxpa2VseS4gKi8KLSAgICAgICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIGVuZF9mZCwgcHlfZmRzX3RvX2tlZXApOworICAgICAgICAgICAgX2Nsb3NlX2Zkc19ieV9icnV0ZV9mb3JjZShzdGFydF9mZCwgcHlfZmRzX3RvX2tlZXApOwogICAgICAgICB9CiAgICAgICAgIGNsb3NlZGlyKHByb2NfZmRfZGlyKTsKICAgICB9CiB9CiAKLSNkZWZpbmUgX2Nsb3NlX29wZW5fZmRfcmFuZ2UgX2Nsb3NlX29wZW5fZmRfcmFuZ2VfbWF5YmVfdW5zYWZlCisjZGVmaW5lIF9jbG9zZV9vcGVuX2ZkcyBfY2xvc2Vfb3Blbl9mZHNfbWF5YmVfdW5zYWZlCiAKICNlbmRpZiAgLyogZWxzZSBOT1QgKGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1NZU0NBTExfSCkpICovCiAKQEAgLTM1NiwxNiArMzg4LDE2IEBACiAgICAgLyogQnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIGEgaGV4IGludGVnZXIuICBXZSBjYW4ndCBtYWxsb2MuICovCiAgICAgY2hhciBoZXhfZXJybm9bc2l6ZW9mKHNhdmVkX2Vycm5vKSoyKzFdOwogCisgICAgaWYgKG1ha2VfaW5oZXJpdGFibGUocHlfZmRzX3RvX2tlZXAsIGVycnBpcGVfd3JpdGUpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKwogICAgIC8qIENsb3NlIHBhcmVudCdzIHBpcGUgZW5kcy4gKi8KLSAgICBpZiAocDJjd3JpdGUgIT0gLTEpIHsKKyAgICBpZiAocDJjd3JpdGUgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UocDJjd3JpdGUpKTsKLSAgICB9Ci0gICAgaWYgKGMycHJlYWQgIT0gLTEpIHsKKyAgICBpZiAoYzJwcmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShjMnByZWFkKSk7Ci0gICAgfQotICAgIGlmIChlcnJyZWFkICE9IC0xKSB7CisgICAgaWYgKGVycnJlYWQgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoZXJycmVhZCkpOwotICAgIH0KICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycnBpcGVfcmVhZCkpOwogCiAgICAgLyogV2hlbiBkdXBpbmcgZmRzLCBpZiB0aGVyZSBhcmlzZXMgYSBzaXR1YXRpb24gd2hlcmUgb25lIG9mIHRoZSBmZHMgaXMKQEAgLTM3OSwzOCArNDExLDM0IEBACiAgICAgICAgZHVwMigpIHJlbW92ZXMgdGhlIENMT0VYRUMgZmxhZyBidXQgd2UgbXVzdCBkbyBpdCBvdXJzZWx2ZXMgaWYgZHVwMigpCiAgICAgICAgd291bGQgYmUgYSBuby1vcCAoaXNzdWUgIzEwODA2KS4gKi8KICAgICBpZiAocDJjcmVhZCA9PSAwKSB7Ci0gICAgICAgIGludCBvbGQgPSBmY250bChwMmNyZWFkLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKHAyY3JlYWQsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKHAyY3JlYWQgIT0gLTEpIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUocDJjcmVhZCwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocDJjcmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChkdXAyKHAyY3JlYWQsIDApKTsgIC8qIHN0ZGluICovCi0gICAgfQorCiAgICAgaWYgKGMycHdyaXRlID09IDEpIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGMycHdyaXRlLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGMycHdyaXRlLCBGX1NFVEZELCBvbGQgJiB+RkRfQ0xPRVhFQyk7Ci0gICAgfSBlbHNlIGlmIChjMnB3cml0ZSAhPSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShjMnB3cml0ZSwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoYzJwd3JpdGUgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoZHVwMihjMnB3cml0ZSwgMSkpOyAgLyogc3Rkb3V0ICovCi0gICAgfQorCiAgICAgaWYgKGVycndyaXRlID09IDIpIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGVycndyaXRlLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGVycndyaXRlLCBGX1NFVEZELCBvbGQgJiB+RkRfQ0xPRVhFQyk7Ci0gICAgfSBlbHNlIGlmIChlcnJ3cml0ZSAhPSAtMSkgewotICAgICAgICBQT1NJWF9DQUxMKGR1cDIoZXJyd3JpdGUsIDIpKTsgIC8qIHN0ZGVyciAqLworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShlcnJ3cml0ZSwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CisgICAgZWxzZSBpZiAoZXJyd3JpdGUgIT0gLTEpCisgICAgICAgIFBPU0lYX0NBTEwoZHVwMihlcnJ3cml0ZSwgMikpOyAgLyogc3RkZXJyICovCiAKICAgICAvKiBDbG9zZSBwaXBlIGZkcy4gIE1ha2Ugc3VyZSB3ZSBkb24ndCBjbG9zZSB0aGUgc2FtZSBmZCBtb3JlIHRoYW4gKi8KICAgICAvKiBvbmNlLCBvciBzdGFuZGFyZCBmZHMuICovCi0gICAgaWYgKHAyY3JlYWQgPiAyKSB7CisgICAgaWYgKHAyY3JlYWQgPiAyKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKHAyY3JlYWQpKTsKLSAgICB9Ci0gICAgaWYgKGMycHdyaXRlID4gMiAmJiBjMnB3cml0ZSAhPSBwMmNyZWFkKSB7CisgICAgaWYgKGMycHdyaXRlID4gMiAmJiBjMnB3cml0ZSAhPSBwMmNyZWFkKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGMycHdyaXRlKSk7Ci0gICAgfQotICAgIGlmIChlcnJ3cml0ZSAhPSBjMnB3cml0ZSAmJiBlcnJ3cml0ZSAhPSBwMmNyZWFkICYmIGVycndyaXRlID4gMikgeworICAgIGlmIChlcnJ3cml0ZSAhPSBjMnB3cml0ZSAmJiBlcnJ3cml0ZSAhPSBwMmNyZWFkICYmIGVycndyaXRlID4gMikKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJ3cml0ZSkpOwotICAgIH0KIAogICAgIGlmIChjd2QpCiAgICAgICAgIFBPU0lYX0NBTEwoY2hkaXIoY3dkKSk7CkBAIC00NDIsMTQgKzQ3MCw4IEBACiAKICAgICAvKiBjbG9zZSBGRHMgYWZ0ZXIgZXhlY3V0aW5nIHByZWV4ZWNfZm4sIHdoaWNoIG1pZ2h0IG9wZW4gRkRzICovCiAgICAgaWYgKGNsb3NlX2ZkcykgewotICAgICAgICBpbnQgbG9jYWxfbWF4X2ZkID0gbWF4X2ZkOwotI2lmIGRlZmluZWQoX19OZXRCU0RfXykKLSAgICAgICAgbG9jYWxfbWF4X2ZkID0gZmNudGwoMCwgRl9NQVhGRCk7Ci0gICAgICAgIGlmIChsb2NhbF9tYXhfZmQgPCAwKQotICAgICAgICAgICAgbG9jYWxfbWF4X2ZkID0gbWF4X2ZkOwotI2VuZGlmCiAgICAgICAgIC8qIFRPRE8gSFAtVVggY291bGQgdXNlIHBzdGF0X2dldHByb2MoKSBpZiBhbnlvbmUgY2FyZXMgYWJvdXQgaXQuICovCi0gICAgICAgIF9jbG9zZV9vcGVuX2ZkX3JhbmdlKDMsIGxvY2FsX21heF9mZCwgcHlfZmRzX3RvX2tlZXApOworICAgICAgICBfY2xvc2Vfb3Blbl9mZHMoMywgcHlfZmRzX3RvX2tlZXApOwogICAgIH0KIAogICAgIC8qIFRoaXMgbG9vcCBtYXRjaGVzIHRoZSBMaWIvb3MucHkgX2V4ZWN2cGUoKSdzIFBBVEggc2VhcmNoIHdoZW4gKi8KQEAgLTQ5Miw3ICs1MTQsNyBAQAogICAgICAgICAvKiBXZSBjYW4ndCBjYWxsIHN0cmVycm9yKHNhdmVkX2Vycm5vKS4gIEl0IGlzIG5vdCBhc3luYyBzaWduYWwgc2FmZS4KICAgICAgICAgICogVGhlIHBhcmVudCBwcm9jZXNzIHdpbGwgbG9vayB0aGUgZXJyb3IgbWVzc2FnZSB1cC4gKi8KICAgICB9IGVsc2UgewotICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAiUnVudGltZUVycm9yOjA6IiwgMTUpOworICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAiU3VicHJvY2Vzc0Vycm9yOjA6IiwgMTgpOwogICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCBlcnJfbXNnLCBzdHJsZW4oZXJyX21zZykpOwogICAgIH0KICAgICBpZiAodW51c2VkKSByZXR1cm47ICAvKiBzaWxseT8geWVzISBhdm9pZHMgZ2NjIGNvbXBpbGVyIHdhcm5pbmcuICovCkBAIC01NDQsNyArNTY2LDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgX1B5X0lERU5USUZJRVIoaXNlbmFibGVkKTsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZGlzYWJsZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGdjX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZ2MiKTsKICAgICAgICAgaWYgKGdjX21vZHVsZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MjEsODggKzc0Myw2IEBACiBSYWlzZXM6IE9ubHkgb24gYW4gZXJyb3IgaW4gdGhlIHBhcmVudCBwcm9jZXNzLlxuXAogIik7CiAKLVB5RG9jX1NUUlZBUihzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZV9kb2MsCi0iY2xvZXhlY19waXBlKCkgLT4gKHJlYWRfZW5kLCB3cml0ZV9lbmQpXG5cblwKLUNyZWF0ZSBhIHBpcGUgd2hvc2UgZW5kcyBoYXZlIHRoZSBjbG9leGVjIGZsYWcgc2V0OyB3cml0ZV9lbmQgd2lsbCBiZSA+PSAzLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotc3VicHJvY2Vzc19jbG9leGVjX3BpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCi17Ci0gICAgaW50IGZkc1syXTsKLSAgICBpbnQgcmVzLCBzYXZlZF9lcnJubzsKLSAgICBsb25nIG9sZGZsYWdzOwotI2lmZGVmIEhBVkVfUElQRTIKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gcGlwZTIoZmRzLCBPX0NMT0VYRUMpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyAhPSAwICYmIGVycm5vID09IEVOT1NZUykKLSAgICB7Ci0jZW5kaWYKLSAgICAgICAgLyogV2UgaG9sZCB0aGUgR0lMIHdoaWNoIG9mZmVycyBzb21lIHByb3RlY3Rpb24gZnJvbSBvdGhlciBjb2RlIGNhbGxpbmcKLSAgICAgICAgICogZm9yaygpIGJlZm9yZSB0aGUgQ0xPRVhFQyBmbGFncyBoYXZlIGJlZW4gc2V0IGJ1dCB3ZSBjYW4ndCBndWFyYW50ZWUKLSAgICAgICAgICogYW55dGhpbmcgd2l0aG91dCBwaXBlMigpLiAqLwotICAgICAgICByZXMgPSBwaXBlKGZkcyk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1swXSwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgICByZXMgPSBmY250bChmZHNbMF0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1sxXSwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgICByZXMgPSBmY250bChmZHNbMV0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0jaWZkZWYgSEFWRV9QSVBFMgotICAgIH0KLSNlbmRpZgotICAgIGlmIChyZXMgPT0gMCAmJiBmZHNbMV0gPCAzKSB7Ci0gICAgICAgIC8qIFdlIGFsd2F5cyB3YW50IHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUgdG8gYXZvaWQgZmRzIDAsIDEgYW5kIDIKLSAgICAgICAgICogYXMgb3VyIGNoaWxkIG1heSBjbGFpbSB0aG9zZSBmb3Igc3RkaW8gY29ubmVjdGlvbnMuICovCi0gICAgICAgIGludCB3cml0ZV9mZCA9IGZkc1sxXTsKLSAgICAgICAgaW50IGZkc190b19jbG9zZVszXSA9IHstMSwgLTEsIC0xfTsKLSAgICAgICAgaW50IGZkc190b19jbG9zZV9pZHggPSAwOwotI2lmZGVmIEZfRFVQRkRfQ0xPRVhFQwotICAgICAgICBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeCsrXSA9IHdyaXRlX2ZkOwotICAgICAgICB3cml0ZV9mZCA9IGZjbnRsKHdyaXRlX2ZkLCBGX0RVUEZEX0NMT0VYRUMsIDMpOwotICAgICAgICBpZiAod3JpdGVfZmQgPCAwKSAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBGX0RVUEZEX0NMT0VYRUMgLyBvdGhlciBlcnJvciAqLwotI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFVzZSBkdXAgYSBmZXcgdGltZXMgdW50aWwgd2UgZ2V0IGEgZGVzaXJhYmxlIGZkLiAqLwotICAgICAgICAgICAgZm9yICg7IGZkc190b19jbG9zZV9pZHggPCAzOyArK2Zkc190b19jbG9zZV9pZHgpIHsKLSAgICAgICAgICAgICAgICBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeF0gPSB3cml0ZV9mZDsKLSAgICAgICAgICAgICAgICB3cml0ZV9mZCA9IGR1cCh3cml0ZV9mZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHdyaXRlX2ZkID49IDMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8qIFdlIG1heSBkdXAgYSBmZXcgZXh0cmEgdGltZXMgaWYgaXQgcmV0dXJucyBhbiBlcnJvciBidXQKLSAgICAgICAgICAgICAgICAgKiB0aGF0IGlzIG9rYXkuICBSZXBlYXQgY2FsbHMgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBlcnJvci4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3cml0ZV9mZCA8IDApIHJlcyA9IHdyaXRlX2ZkOwotICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgb2xkZmxhZ3MgPSBmY250bCh3cml0ZV9mZCwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZGZsYWdzIDwgMCkgcmVzID0gb2xkZmxhZ3M7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXMgPSBmY250bCh3cml0ZV9mZCwgRl9TRVRGRCwgb2xkZmxhZ3MgfCBGRF9DTE9FWEVDKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwotICAgICAgICAvKiBDbG9zZSBmZHMgd2UgdHJpZWQgZm9yIHRoZSB3cml0ZSBlbmQgdGhhdCB3ZXJlIHRvbyBsb3cuICovCi0gICAgICAgIGZvciAoZmRzX3RvX2Nsb3NlX2lkeD0wOyBmZHNfdG9fY2xvc2VfaWR4IDwgMzsgKytmZHNfdG9fY2xvc2VfaWR4KSB7Ci0gICAgICAgICAgICBpbnQgdGVtcF9mZCA9IGZkc190b19jbG9zZVtmZHNfdG9fY2xvc2VfaWR4XTsKLSAgICAgICAgICAgIHdoaWxlICh0ZW1wX2ZkID49IDAgJiYgY2xvc2UodGVtcF9mZCkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLSAgICAgICAgfQotICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOyAgLyogcmVwb3J0IGR1cCBvciBmY250bCBlcnJvcnMsIG5vdCBjbG9zZS4gKi8KLSAgICAgICAgZmRzWzFdID0gd3JpdGVfZmQ7Ci0gICAgfSAgLyogZW5kIGlmIHdyaXRlIGZkIHdhcyB0b28gc21hbGwgKi8KLQotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKLX0KLQogLyogbW9kdWxlIGxldmVsIGNvZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfZG9jLApAQCAtODExLDcgKzc1MSw2IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0gewogICAgIHsiZm9ya19leGVjIiwgc3VicHJvY2Vzc19mb3JrX2V4ZWMsIE1FVEhfVkFSQVJHUywgc3VicHJvY2Vzc19mb3JrX2V4ZWNfZG9jfSwKLSAgICB7ImNsb2V4ZWNfcGlwZSIsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlLCBNRVRIX05PQVJHUywgc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jfSwKICAgICB7TlVMTCwgTlVMTH0gIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC04MjcsMTEgKzc2Niw1IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19wb3NpeHN1YnByb2Nlc3Modm9pZCkKIHsKLSNpZmRlZiBfU0NfT1BFTl9NQVgKLSAgICBtYXhfZmQgPSBzeXNjb25mKF9TQ19PUEVOX01BWCk7Ci0gICAgaWYgKG1heF9mZCA9PSAtMSkKLSNlbmRpZgotICAgICAgICBtYXhfZmQgPSAyNTY7ICAvKiBNYXRjaGVzIExpYi9zdWJwcm9jZXNzLnB5ICovCi0KICAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfcG9zaXhzdWJwcm9jZXNzbW9kdWxlKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jIGIvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKaW5kZXggMjFhMmIwOS4uNDM3N2VlMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKQEAgLTE2OCw5ICsxNjgsOSBAQAogLyogaW5pdF9rZXkgaXMgdGhlIGFycmF5IGZvciBpbml0aWFsaXppbmcga2V5cyAqLwogLyoga2V5X2xlbmd0aCBpcyBpdHMgbGVuZ3RoICovCiBzdGF0aWMgUHlPYmplY3QgKgotaW5pdF9ieV9hcnJheShSYW5kb21PYmplY3QgKnNlbGYsIHVuc2lnbmVkIGxvbmcgaW5pdF9rZXlbXSwgdW5zaWduZWQgbG9uZyBrZXlfbGVuZ3RoKQoraW5pdF9ieV9hcnJheShSYW5kb21PYmplY3QgKnNlbGYsIHVuc2lnbmVkIGxvbmcgaW5pdF9rZXlbXSwgc2l6ZV90IGtleV9sZW5ndGgpCiB7Ci0gICAgdW5zaWduZWQgaW50IGksIGosIGs7ICAgICAgIC8qIHdhcyBzaWduZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIFJESCAxMi8xNi8yMDAyICovCisgICAgc2l6ZV90IGksIGosIGs7ICAgICAgIC8qIHdhcyBzaWduZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIFJESCAxMi8xNi8yMDAyICovCiAgICAgdW5zaWduZWQgbG9uZyAqbXQ7CiAKICAgICBtdCA9IHNlbGYtPnN0YXRlOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgayA9IChOPmtleV9sZW5ndGggPyBOIDoga2V5X2xlbmd0aCk7CiAgICAgZm9yICg7IGs7IGstLSkgewogICAgICAgICBtdFtpXSA9IChtdFtpXSBeICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkgKiAxNjY0NTI1VUwpKQotICAgICAgICAgICAgICAgICArIGluaXRfa2V5W2pdICsgajsgLyogbm9uIGxpbmVhciAqLworICAgICAgICAgICAgICAgICArIGluaXRfa2V5W2pdICsgKHVuc2lnbmVkIGxvbmcpajsgLyogbm9uIGxpbmVhciAqLwogICAgICAgICBtdFtpXSAmPSAweGZmZmZmZmZmVUw7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovCiAgICAgICAgIGkrKzsgaisrOwogICAgICAgICBpZiAoaT49TikgeyBtdFswXSA9IG10W04tMV07IGk9MTsgfQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICAgfQogICAgIGZvciAoaz1OLTE7IGs7IGstLSkgewogICAgICAgICBtdFtpXSA9IChtdFtpXSBeICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkgKiAxNTY2MDgzOTQxVUwpKQotICAgICAgICAgICAgICAgICAtIGk7IC8qIG5vbiBsaW5lYXIgKi8KKyAgICAgICAgICAgICAgICAgLSAodW5zaWduZWQgbG9uZylpOyAvKiBub24gbGluZWFyICovCiAgICAgICAgIG10W2ldICY9IDB4ZmZmZmZmZmZVTDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi8KICAgICAgICAgaSsrOwogICAgICAgICBpZiAoaT49TikgeyBtdFswXSA9IG10W04tMV07IGk9MTsgfQpAQCAtMjA3LDE0ICsyMDcsMTEgQEAKIHJhbmRvbV9zZWVkKFJhbmRvbU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7ICAgICAgICAgICAgLyogZ3VpbHR5IHVudGlsIHByb3ZlZCBpbm5vY2VudCAqLwotICAgIFB5T2JqZWN0ICptYXNrbG93ZXIgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0aGlydHl0d28gPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nICpuZXdfa2V5LCAqa2V5ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nIGtleW1heDsgICAgICAgICAgICAgICAvKiAjIG9mIGFsbG9jYXRlZCBzbG90cyBpbiBrZXkgKi8KLSAgICB1bnNpZ25lZCBsb25nIGtleXVzZWQ7ICAgICAgICAgICAgICAvKiAjIG9mIHVzZWQgc2xvdHMgaW4ga2V5ICovCi0gICAgaW50IGVycjsKLQorICAgIHVuc2lnbmVkIGxvbmcgKmtleSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqa2V5X2FzX2J5dGVzID0gTlVMTDsKKyAgICBzaXplX3QgYml0cywga2V5dXNlZCwgaTsKKyAgICBpbnQgcmVzOwogICAgIFB5T2JqZWN0ICphcmcgPSBOVUxMOwogCiAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2VlZCIsIDAsIDEsICZhcmcpKQpAQCAtMjQzLDY5ICsyNDAsNDYgQEAKICAgICBpZiAobiA9PSBOVUxMKQogICAgICAgICBnb3RvIERvbmU7CiAKLSAgICAvKiBOb3cgc3BsaXQgbiBpbnRvIDMyLWJpdCBjaHVua3MsIGZyb20gdGhlIHJpZ2h0LiAgRWFjaCBwaWVjZSBpcwotICAgICAqIHN0b3JlZCBpbnRvIGtleSwgd2hpY2ggaGFzIGEgY2FwYWNpdHkgb2Yga2V5bWF4IGNodW5rcywgb2Ygd2hpY2gKLSAgICAgKiBrZXl1c2VkIGFyZSBmaWxsZWQuICBBbGFzLCB0aGUgcmVwZWF0ZWQgc2hpZnRpbmcgbWFrZXMgdGhpcyBhCi0gICAgICogcXVhZHJhdGljLXRpbWUgYWxnb3JpdGhtOyB3ZSdkIHJlYWxseSBsaWtlIHRvIHVzZQotICAgICAqIF9QeUxvbmdfQXNCeXRlQXJyYXkgaGVyZSwgYnV0IHRoZW4gd2UnZCBoYXZlIHRvIGJyZWFrIGludG8gdGhlCi0gICAgICogbG9uZyByZXByZXNlbnRhdGlvbiB0byBmaWd1cmUgb3V0IGhvdyBiaWcgYW4gYXJyYXkgd2FzIG5lZWRlZAotICAgICAqIGluIGFkdmFuY2UuCi0gICAgICovCi0gICAga2V5bWF4ID0gODsgICAgICAgICAvKiBhcmJpdHJhcnk7IGdyb3dzIGxhdGVyIGlmIG5lZWRlZCAqLwotICAgIGtleXVzZWQgPSAwOwotICAgIGtleSA9ICh1bnNpZ25lZCBsb25nICopUHlNZW1fTWFsbG9jKGtleW1heCAqIHNpemVvZigqa2V5KSk7Ci0gICAgaWYgKGtleSA9PSBOVUxMKQorICAgIC8qIE5vdyBzcGxpdCBuIGludG8gMzItYml0IGNodW5rcywgZnJvbSB0aGUgcmlnaHQuICovCisgICAgYml0cyA9IF9QeUxvbmdfTnVtQml0cyhuKTsKKyAgICBpZiAoYml0cyA9PSAoc2l6ZV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIGdvdG8gRG9uZTsKIAotICAgIG1hc2tsb3dlciA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKDB4ZmZmZmZmZmZVKTsKLSAgICBpZiAobWFza2xvd2VyID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB0aGlydHl0d28gPSBQeUxvbmdfRnJvbUxvbmcoMzJMKTsKLSAgICBpZiAodGhpcnR5dHdvID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB3aGlsZSAoKGVycj1QeU9iamVjdF9Jc1RydWUobikpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpuZXduOwotICAgICAgICBQeU9iamVjdCAqcHljaHVuazsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBjaHVuazsKKyAgICAvKiBGaWd1cmUgb3V0IGhvdyBtYW55IDMyLWJpdCBjaHVua3MgdGhpcyBnaXZlcyB1cy4gKi8KKyAgICBrZXl1c2VkID0gYml0cyA9PSAwID8gMSA6IChiaXRzIC0gMSkgLyAzMiArIDE7CiAKLSAgICAgICAgaWYgKGVyciA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgcHljaHVuayA9IFB5TnVtYmVyX0FuZChuLCBtYXNrbG93ZXIpOwotICAgICAgICBpZiAocHljaHVuayA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBjaHVuayA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhweWNodW5rKTsKLSAgICAgICAgUHlfREVDUkVGKHB5Y2h1bmspOwotICAgICAgICBpZiAoY2h1bmsgPT0gKHVuc2lnbmVkIGxvbmcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgbmV3biA9IFB5TnVtYmVyX1JzaGlmdChuLCB0aGlydHl0d28pOwotICAgICAgICBpZiAobmV3biA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBQeV9ERUNSRUYobik7Ci0gICAgICAgIG4gPSBuZXduOwotICAgICAgICBpZiAoa2V5dXNlZCA+PSBrZXltYXgpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmlnZ2VyID0ga2V5bWF4IDw8IDE7Ci0gICAgICAgICAgICBpZiAoKGJpZ2dlciA+PiAxKSAhPSBrZXltYXggfHwKLSAgICAgICAgICAgICAgICBiaWdnZXIgPiBQWV9TU0laRV9UX01BWCAvIHNpemVvZigqa2V5KSkgewotICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV3X2tleSA9ICh1bnNpZ25lZCBsb25nICopUHlNZW1fUmVhbGxvYyhrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWdnZXIgKiBzaXplb2YoKmtleSkpOwotICAgICAgICAgICAgaWYgKG5ld19rZXkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgICAgICBrZXkgPSBuZXdfa2V5OwotICAgICAgICAgICAga2V5bWF4ID0gYmlnZ2VyOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydChrZXl1c2VkIDwga2V5bWF4KTsKLSAgICAgICAga2V5W2tleXVzZWQrK10gPSBjaHVuazsKKyAgICAvKiBDb252ZXJ0IHNlZWQgdG8gYnl0ZSBzZXF1ZW5jZS4gKi8KKyAgICBrZXlfYXNfYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYygoc2l6ZV90KTQgKiBrZXl1c2VkKTsKKyAgICBpZiAoa2V5X2FzX2J5dGVzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBEb25lOworICAgIH0KKyAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKiluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2FzX2J5dGVzLCBrZXl1c2VkICogNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAvKiBsaXR0bGUtZW5kaWFuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsgLyogdW5zaWduZWQgKi8KKyAgICBpZiAocmVzID09IC0xKSB7CisgICAgICAgIFB5TWVtX0ZyZWUoa2V5X2FzX2J5dGVzKTsKKyAgICAgICAgZ290byBEb25lOwogICAgIH0KIAotICAgIGlmIChrZXl1c2VkID09IDApCi0gICAgICAgIGtleVtrZXl1c2VkKytdID0gMFVMOworICAgIC8qIEZpbGwgYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MgZnJvbSBieXRlIHNlcXVlbmNlLiAqLworICAgIGtleSA9ICh1bnNpZ25lZCBsb25nICopUHlNZW1fTWFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGtleXVzZWQpOworICAgIGlmIChrZXkgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IGtleXVzZWQ7IGkrKykgeworICAgICAgICBrZXlbaV0gPQorICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAwXSA8PCAwKSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDFdIDw8IDgpICsKKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMl0gPDwgMTYpICsKKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgM10gPDwgMjQpOworICAgIH0KKyAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CiAgICAgcmVzdWx0ID0gaW5pdF9ieV9hcnJheShzZWxmLCBrZXksIGtleXVzZWQpOwogRG9uZToKLSAgICBQeV9YREVDUkVGKG1hc2tsb3dlcik7Ci0gICAgUHlfWERFQ1JFRih0aGlydHl0d28pOwogICAgIFB5X1hERUNSRUYobik7CiAgICAgUHlNZW1fRnJlZShrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zODksNiArMzYzLDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgaWYgKGsgPD0gMzIpICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGdlbnJhbmRfaW50MzIoc2VsZikgPj4gKDMyIC0gaykpOworCiAgICAgYnl0ZXMgPSAoKGsgLSAxKSAvIDMyICsgMSkgKiA0OwogICAgIGJ5dGVhcnJheSA9ICh1bnNpZ25lZCBjaGFyICopUHlNZW1fTWFsbG9jKGJ5dGVzKTsKICAgICBpZiAoYnl0ZWFycmF5ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKaW5kZXggMzY5MzM2My4uMzY4OWE0ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMgYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCmluZGV4IDhjZjJkNmEuLjUzNTQ2NGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgImN1cnNvci5oIgogI2luY2x1ZGUgInByZXBhcmVfcHJvdG9jb2wuaCIKICNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKICNpbmNsdWRlICJweXRocmVhZC5oIgogCkBAIC00Miw2ICs0MSw4IEBACiAjZW5kaWYKICNlbmRpZgogCitfUHlfSURFTlRJRklFUihjdXJzb3IpOworCiBzdGF0aWMgaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X2lzb2xhdGlvbl9sZXZlbChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogaXNvbGF0aW9uX2xldmVsKTsKIHN0YXRpYyB2b2lkIF9weXNxbGl0ZV9kcm9wX3VudXNlZF9jdXJzb3JfcmVmZXJlbmNlcyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKTsKIApAQCAtNjAsNyArNjEsMTEgQEAKIAogaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25faW5pdChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgTlVMTCwgTlVMTH07CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geworICAgICAgICAiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwKKyAgICAgICAgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCAidXJpIiwKKyAgICAgICAgTlVMTAorICAgIH07CiAKICAgICBjaGFyKiBkYXRhYmFzZTsKICAgICBpbnQgZGV0ZWN0X3R5cGVzID0gMDsKQEAgLTY4LDExICs3MywxNCBAQAogICAgIFB5T2JqZWN0KiBmYWN0b3J5ID0gTlVMTDsKICAgICBpbnQgY2hlY2tfc2FtZV90aHJlYWQgPSAxOwogICAgIGludCBjYWNoZWRfc3RhdGVtZW50cyA9IDEwMDsKKyAgICBpbnQgdXJpID0gMDsKICAgICBkb3VibGUgdGltZW91dCA9IDUuMDsKICAgICBpbnQgcmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLCAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsICZmYWN0b3J5LCAmY2FjaGVkX3N0YXRlbWVudHMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInN8ZGlPaU9pcCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc29sYXRpb25fbGV2ZWwsICZjaGVja19zYW1lX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzLCAmdXJpKSkKICAgICB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC05MSw4ICs5OSwxOSBAQAogICAgIFB5X0lOQ1JFRigmUHlVbmljb2RlX1R5cGUpOwogICAgIHNlbGYtPnRleHRfZmFjdG9yeSA9IChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlOwogCisjaWZkZWYgU1FMSVRFX09QRU5fVVJJCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJjID0gc3FsaXRlM19vcGVuX3YyKGRhdGFiYXNlLCAmc2VsZi0+ZGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgU1FMSVRFX09QRU5fUkVBRFdSSVRFIHwgU1FMSVRFX09QRU5fQ1JFQVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodXJpID8gU1FMSVRFX09QRU5fVVJJIDogMCksIE5VTEwpOworI2Vsc2UKKyAgICBpZiAodXJpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Ob3RTdXBwb3J0ZWRFcnJvciwgIlVSSXMgbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByYyA9IHNxbGl0ZTNfb3BlbihkYXRhYmFzZSwgJnNlbGYtPmRiKTsKKyNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7CkBAIC01MDYsMTAgKzUyNSwxNiBAQAogICAgICAgICBjb25zdCBjaGFyKiBidWZmZXI7CiAgICAgICAgIFB5X3NzaXplX3QgYnVmbGVuOwogICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHB5X3ZhbCwgJmJ1ZmZlciwgJmJ1ZmxlbikgIT0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjb252ZXJ0IEJMT0IgdG8gYnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgc3FsaXRlM19yZXN1bHRfYmxvYihjb250ZXh0LCBidWZmZXIsIGJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7CisgICAgICAgIGlmIChidWZsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQkxPQiBsb25nZXIgdGhhbiBJTlRfTUFYIGJ5dGVzIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgc3FsaXRlM19yZXN1bHRfYmxvYihjb250ZXh0LCBidWZmZXIsIChpbnQpYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtNjgyLDYgKzcwNyw4IEBACiAgICAgUHlPYmplY3QqKiBhZ2dyZWdhdGVfaW5zdGFuY2U7CiAgICAgX1B5X0lERU5USUZJRVIoZmluYWxpemUpOwogICAgIGludCBvazsKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdmFsdWUsICp0YjsKKyAgICBpbnQgcmVzdG9yZTsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgUHlHSUxTdGF0ZV9TVEFURSB0aHJlYWRzdGF0ZTsKQEAgLTY5Nyw3ICs3MjQsMTIgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICAvKiBLZWVwIHRoZSBleGNlcHRpb24gKGlmIGFueSkgb2YgdGhlIGxhc3QgY2FsbCB0byBzdGVwKCkgKi8KKyAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CisgICAgcmVzdG9yZSA9IDE7CisKICAgICBmdW5jdGlvbl9yZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKCphZ2dyZWdhdGVfaW5zdGFuY2UsICZQeUlkX2ZpbmFsaXplLCAiIik7CisKICAgICBQeV9ERUNSRUYoKmFnZ3JlZ2F0ZV9pbnN0YW5jZSk7CiAKICAgICBvayA9IDA7CkBAIC03MTIsNiArNzQ0LDE3IEBACiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIF9zcWxpdGUzX3Jlc3VsdF9lcnJvcihjb250ZXh0LCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdmaW5hbGl6ZScgbWV0aG9kIHJhaXNlZCBlcnJvciIsIC0xKTsKKyNpZiBTUUxJVEVfVkVSU0lPTl9OVU1CRVIgPCAzMDAzMDAzCisgICAgICAgIC8qIHdpdGggb2xkIFNRTGl0ZSB2ZXJzaW9ucywgX3NxbGl0ZTNfcmVzdWx0X2Vycm9yKCkgc2V0cyBhIG5ldyBQeXRob24KKyAgICAgICAgICAgZXhjZXB0aW9uLCBzbyBkb24ndCByZXN0b3JlIHRoZSBwcmV2aW91cyBleGNlcHRpb24gKi8KKyAgICAgICAgcmVzdG9yZSA9IDA7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAocmVzdG9yZSkgeworICAgICAgICAvKiBSZXN0b3JlIHRoZSBleGNlcHRpb24gKGlmIGFueSkgb2YgdGhlIGxhc3QgY2FsbCB0byBzdGVwKCksCisgICAgICAgICAgIGJ1dCBjbGVhciBhbHNvIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBpZiBmaW5hbGl6ZSgpIGZhaWxlZCAqLworICAgICAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKICAgICB9CiAKIGVycm9yOgpAQCAtODYyLDIyICs5MDUsMjkgQEAKIAogICAgIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKICNlbmRpZgorCiAgICAgcmV0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCopdXNlcl9hcmcsICJpc3NzcyIsIGFjdGlvbiwgYXJnMSwgYXJnMiwgZGJuYW1lLCBhY2Nlc3NfYXR0ZW1wdF9zb3VyY2UpOwogCi0gICAgaWYgKCFyZXQpIHsKLSAgICAgICAgaWYgKF9lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrcykgeworICAgIGlmIChyZXQgPT0gTlVMTCkgeworICAgICAgICBpZiAoX2VuYWJsZV9jYWxsYmFja190cmFjZWJhY2tzKQogICAgICAgICAgICAgUHlFcnJfUHJpbnQoKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgfQogCiAgICAgICAgIHJjID0gU1FMSVRFX0RFTlk7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2socmV0KSkgewogICAgICAgICAgICAgcmMgPSBfUHlMb25nX0FzSW50KHJldCk7Ci0gICAgICAgICAgICBpZiAocmMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGlmIChyYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKF9lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrcykKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgcmMgPSBTUUxJVEVfREVOWTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJjID0gU1FMSVRFX0RFTlk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHJldCk7CkBAIC0xMTkwLDkgKzEyNDAsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmc3FsKSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIsICZzcWwpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICBfcHlzcWxpdGVfZHJvcF91bnVzZWRfc3RhdGVtZW50X3JlZmVyZW5jZXMoc2VsZik7CiAKQEAgLTEyMDgsMzUgKzEyNTcsMzMgQEAKICAgICBzdGF0ZW1lbnQtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKIAogICAgIHJjID0gcHlzcWxpdGVfc3RhdGVtZW50X2NyZWF0ZShzdGF0ZW1lbnQsIHNlbGYsIHNxbCk7Ci0KICAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIGlmIChyYyA9PSBQWVNRTElURV9UT09fTVVDSF9TUUwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9XYXJuaW5nLCAiWW91IGNhbiBvbmx5IGV4ZWN1dGUgb25lIHN0YXRlbWVudCBhdCBhIHRpbWUuIik7CiAgICAgICAgIH0gZWxzZSBpZiAocmMgPT0gUFlTUUxJVEVfU1FMX1dST05HX1RZUEUpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9XYXJuaW5nLCAiU1FMIGlzIG9mIHdyb25nIHR5cGUuIE11c3QgYmUgc3RyaW5nIG9yIHVuaWNvZGUuIik7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9XYXJuaW5nLCAiU1FMIGlzIG9mIHdyb25nIHR5cGUuIE11c3QgYmUgc3RyaW5nLiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHN0YXRlbWVudCk7CiAgICAgICAgICAgICBfcHlzcWxpdGVfc2V0ZXJyb3Ioc2VsZi0+ZGIsIE5VTEwpOwogICAgICAgICB9Ci0KLSAgICAgICAgUHlfQ0xFQVIoc3RhdGVtZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICB3ZWFrcmVmID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QqKXN0YXRlbWVudCwgTlVMTCk7Ci0gICAgICAgIGlmICghd2Vha3JlZikgewotICAgICAgICAgICAgUHlfQ0xFQVIoc3RhdGVtZW50KTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChzZWxmLT5zdGF0ZW1lbnRzLCB3ZWFrcmVmKSAhPSAwKSB7Ci0gICAgICAgICAgICBQeV9DTEVBUih3ZWFrcmVmKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLQotICAgICAgICBQeV9ERUNSRUYod2Vha3JlZik7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCi1lcnJvcjoKKyAgICB3ZWFrcmVmID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QqKXN0YXRlbWVudCwgTlVMTCk7CisgICAgaWYgKHdlYWtyZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChzZWxmLT5zdGF0ZW1lbnRzLCB3ZWFrcmVmKSAhPSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRih3ZWFrcmVmKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgUHlfREVDUkVGKHdlYWtyZWYpOworCiAgICAgcmV0dXJuIChQeU9iamVjdCopc3RhdGVtZW50OworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYoc3RhdGVtZW50KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fZXhlY3V0ZShweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKQEAgLTEyNDQsNyArMTI5MSw2IEBACiAgICAgUHlPYmplY3QqIGN1cnNvciA9IDA7CiAgICAgUHlPYmplY3QqIHJlc3VsdCA9IDA7CiAgICAgUHlPYmplY3QqIG1ldGhvZCA9IDA7Ci0gICAgX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKIAogICAgIGN1cnNvciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KilzZWxmLCAmUHlJZF9jdXJzb3IsICIiKTsKICAgICBpZiAoIWN1cnNvcikgewpAQCAtMTI3NCw3ICsxMzIwLDYgQEAKICAgICBQeU9iamVjdCogY3Vyc29yID0gMDsKICAgICBQeU9iamVjdCogcmVzdWx0ID0gMDsKICAgICBQeU9iamVjdCogbWV0aG9kID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihjdXJzb3IpOwogCiAgICAgY3Vyc29yID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKXNlbGYsICZQeUlkX2N1cnNvciwgIiIpOwogICAgIGlmICghY3Vyc29yKSB7CkBAIC0xMzA0LDcgKzEzNDksNiBAQAogICAgIFB5T2JqZWN0KiBjdXJzb3IgPSAwOwogICAgIFB5T2JqZWN0KiByZXN1bHQgPSAwOwogICAgIFB5T2JqZWN0KiBtZXRob2QgPSAwOwotICAgIF9QeV9JREVOVElGSUVSKGN1cnNvcik7CiAKICAgICBjdXJzb3IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopc2VsZiwgJlB5SWRfY3Vyc29yLCAiIik7CiAgICAgaWYgKCFjdXJzb3IpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwppbmRleCAwOWMxM2Q0Li5kYjk2YjAyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAiY3Vyc29yLmgiCiAjaW5jbHVkZSAibW9kdWxlLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiBQeU9iamVjdCogcHlzcWxpdGVfY3Vyc29yX2l0ZXJuZXh0KHB5c3FsaXRlX0N1cnNvciogc2VsZik7CiAKQEAgLTI5MCw5ICsyODksOCBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICByb3cgPSBQeVR1cGxlX05ldyhudW1jb2xzKTsKLSAgICBpZiAoIXJvdykgeworICAgIGlmICghcm93KQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtY29sczsgaSsrKSB7CiAgICAgICAgIGlmIChzZWxmLT5jb25uZWN0aW9uLT5kZXRlY3RfdHlwZXMpIHsKQEAgLTMxMiwxNCArMzEwLDEyIEBACiAgICAgICAgICAgICAgICAgY29udmVydGVkID0gUHlfTm9uZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaXRlbSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUodmFsX3N0ciwgbmJ5dGVzKTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY29udmVydGVyLCAiTyIsIGl0ZW0pOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlZCkgeworICAgICAgICAgICAgICAgIGlmICghY29udmVydGVkKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0zMzgsNiArMzM0LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSA9PSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUodmFsX3N0ciwgbmJ5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgdHlwZV9jYWxsKCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWUgPSBzcWxpdGUzX2NvbHVtbl9uYW1lKHNlbGYtPnN0YXRlbWVudC0+c3QsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZSA9ICI8dW5rbm93biBjb2x1bW4gbmFtZT4iOwpAQCAtMzcwLDkgKzM3MSw4IEBACiAgICAgICAgICAgICAgICAgbmJ5dGVzID0gc3FsaXRlM19jb2x1bW5fYnl0ZXMoc2VsZi0+c3RhdGVtZW50LT5zdCwgaSk7CiAgICAgICAgICAgICAgICAgYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICAgICAgc3FsaXRlM19jb2x1bW5fYmxvYihzZWxmLT5zdGF0ZW1lbnQtPnN0LCBpKSwgbmJ5dGVzKTsKLSAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udmVydGVkID0gYnVmZmVyOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zODUsMTIgKzM4NSwxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgUHlfREVDUkVGKHJvdyk7Ci0gICAgICAgIHJvdyA9IE5VTEw7Ci0gICAgfQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgcmV0dXJuIHJvdzsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKHJvdyk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC02MDgsNiArNjEwLDEwIEBACiAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAgICAvKiBBY3R1YWxseSBleGVjdXRlIHRoZSBTUUwgc3RhdGVtZW50LiAqLwogICAgICAgICAgICAgcmMgPSBweXNxbGl0ZV9zdGVwKHNlbGYtPnN0YXRlbWVudC0+c3QsIHNlbGYtPmNvbm5lY3Rpb24pOworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICAodm9pZClweXNxbGl0ZV9zdGF0ZW1lbnRfcmVzZXQoc2VsZi0+c3RhdGVtZW50KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJjID09IFNRTElURV9ET05FIHx8ICByYyA9PSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICAgICAgLyogSWYgaXQgd29ya2VkLCBsZXQncyBnZXQgb3V0IG9mIHRoZSBsb29wICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02ODEsNiArNjg3LDggQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBfcHlzcWxpdGVfZmV0Y2hfb25lX3JvdyhzZWxmKTsKKyAgICAgICAgICAgIGlmIChzZWxmLT5uZXh0X3JvdyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0gZWxzZSBpZiAocmMgPT0gU1FMSVRFX0RPTkUgJiYgIW11bHRpcGxlKSB7CiAgICAgICAgICAgICBweXNxbGl0ZV9zdGF0ZW1lbnRfcmVzZXQoc2VsZi0+c3RhdGVtZW50KTsKICAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPnN0YXRlbWVudCk7CkBAIC04MDMsNyArODExLDEwIEBACiAgICAgICAgIHJjID0gU1FMSVRFX1JPVzsKICAgICAgICAgd2hpbGUgKHJjID09IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIHJjID0gcHlzcWxpdGVfc3RlcChzdGF0ZW1lbnQsIHNlbGYtPmNvbm5lY3Rpb24pOwotICAgICAgICAgICAgLyogVE9ETzogd2UgcHJvYmFibHkgbmVlZCBtb3JlIGVycm9yIGhhbmRsaW5nIGhlcmUgKi8KKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpc3FsaXRlM19maW5hbGl6ZShzdGF0ZW1lbnQpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmMgIT0gU1FMSVRFX0RPTkUpIHsKQEAgLTg2NCwxMCArODc1LDE1IEBACiAgICAgfQogCiAgICAgbmV4dF9yb3dfdHVwbGUgPSBzZWxmLT5uZXh0X3JvdzsKKyAgICBhc3NlcnQobmV4dF9yb3dfdHVwbGUgIT0gTlVMTCk7CiAgICAgc2VsZi0+bmV4dF9yb3cgPSBOVUxMOwogCiAgICAgaWYgKHNlbGYtPnJvd19mYWN0b3J5ICE9IFB5X05vbmUpIHsKICAgICAgICAgbmV4dF9yb3cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cm93X2ZhY3RvcnksICJPTyIsIHNlbGYsIG5leHRfcm93X3R1cGxlKTsKKyAgICAgICAgaWYgKG5leHRfcm93ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNlbGYtPm5leHRfcm93ID0gbmV4dF9yb3dfdHVwbGU7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYobmV4dF9yb3dfdHVwbGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG5leHRfcm93ID0gbmV4dF9yb3dfdHVwbGU7CkBAIC04NzUsNiArODkxLDExIEBACiAKICAgICBpZiAoc2VsZi0+c3RhdGVtZW50KSB7CiAgICAgICAgIHJjID0gcHlzcWxpdGVfc3RlcChzZWxmLT5zdGF0ZW1lbnQtPnN0LCBzZWxmLT5jb25uZWN0aW9uKTsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzZWxmLT5zdGF0ZW1lbnQpOworICAgICAgICAgICAgUHlfREVDUkVGKG5leHRfcm93KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGlmIChyYyAhPSBTUUxJVEVfRE9ORSAmJiByYyAhPSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICAodm9pZClweXNxbGl0ZV9zdGF0ZW1lbnRfcmVzZXQoc2VsZi0+c3RhdGVtZW50KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXh0X3Jvdyk7CkBAIC04ODQsNiArOTA1LDEwIEBACiAKICAgICAgICAgaWYgKHJjID09IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIHNlbGYtPm5leHRfcm93ID0gX3B5c3FsaXRlX2ZldGNoX29uZV9yb3coc2VsZik7CisgICAgICAgICAgICBpZiAoc2VsZi0+bmV4dF9yb3cgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzZWxmLT5zdGF0ZW1lbnQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKaW5kZXggYmVhNmQ2YS4uN2E3ZTg2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYwpAQCAtNTAsMTkgKzUwLDI2IEBACiAgICAgICogQy1sZXZlbCwgc28gdGhpcyBjb2RlIGlzIHJlZHVuZGFudCB3aXRoIHRoZSBvbmUgaW4gY29ubmVjdGlvbl9pbml0IGluCiAgICAgICogY29ubmVjdGlvbi5jIGFuZCBtdXN0IGFsd2F5cyBiZSBjb3BpZWQgZnJvbSB0aGVyZSAuLi4gKi8KIAotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCBOVUxMLCBOVUxMfTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7CisgICAgICAgICJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLAorICAgICAgICAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsICJ1cmkiLAorICAgICAgICBOVUxMCisgICAgfTsKICAgICBjaGFyKiBkYXRhYmFzZTsKICAgICBpbnQgZGV0ZWN0X3R5cGVzID0gMDsKICAgICBQeU9iamVjdCogaXNvbGF0aW9uX2xldmVsOwogICAgIFB5T2JqZWN0KiBmYWN0b3J5ID0gTlVMTDsKICAgICBpbnQgY2hlY2tfc2FtZV90aHJlYWQgPSAxOwogICAgIGludCBjYWNoZWRfc3RhdGVtZW50czsKKyAgICBpbnQgdXJpID0gMDsKICAgICBkb3VibGUgdGltZW91dCA9IDUuMDsKIAogICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLCAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsICZmYWN0b3J5LCAmY2FjaGVkX3N0YXRlbWVudHMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInN8ZGlPaU9pcCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc29sYXRpb25fbGV2ZWwsICZjaGVja19zYW1lX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzLCAmdXJpKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTc3LDcgKzg0LDggQEAKIH0KIAogUHlEb2NfU1RSVkFSKG1vZHVsZV9jb25uZWN0X2RvYywKLSJjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgaXNvbGF0aW9uX2xldmVsLCBkZXRlY3RfdHlwZXMsIGZhY3RvcnldKVxuXAorImNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCxcblwKKyAgICAgICAgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKVxuXAogXG5cCiBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlXG5cCiBcIjptZW1vcnk6XCIgdG8gb3BlbiBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aGF0IHJlc2lkZXMgaW5cblwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCmluZGV4IGZjNjg4NzQuLmYyYzg1ZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwpAQCAtMjEsNyArMjEsNiBAQAogICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICAqLwogCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogCiBpbnQgcHlzcWxpdGVfcHJlcGFyZV9wcm90b2NvbF9pbml0KHB5c3FsaXRlX1ByZXBhcmVQcm90b2NvbCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcm93LmMgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKaW5kZXggYjUwNjU4Yy4uNjRkZmQwNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAicm93LmgiCiAjaW5jbHVkZSAiY3Vyc29yLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKIHZvaWQgcHlzcWxpdGVfcm93X2RlYWxsb2MocHlzcWxpdGVfUm93KiBzZWxmKQogewpAQCAtMzMsNDIgKzMyLDU1IEBACiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QqKXNlbGYpOwogfQogCi1pbnQgcHlzcWxpdGVfcm93X2luaXQocHlzcWxpdGVfUm93KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3N0YXRpYyBQeU9iamVjdCAqCitweXNxbGl0ZV9yb3dfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CisgICAgcHlzcWxpdGVfUm93ICpzZWxmOwogICAgIFB5T2JqZWN0KiBkYXRhOwogICAgIHB5c3FsaXRlX0N1cnNvciogY3Vyc29yOwogCi0gICAgc2VsZi0+ZGF0YSA9IDA7Ci0gICAgc2VsZi0+ZGVzY3JpcHRpb24gPSAwOworICAgIGFzc2VydCh0eXBlICE9IE5VTEwgJiYgdHlwZS0+dHBfYWxsb2MgIT0gTlVMTCk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PIiwgJmN1cnNvciwgJmRhdGEpKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3JkcygiUm93KCkiLCBrd2FyZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PIiwgJmN1cnNvciwgJmRhdGEpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghUHlPYmplY3RfSXNJbnN0YW5jZSgoUHlPYmplY3QqKWN1cnNvciwgKFB5T2JqZWN0KikmcHlzcWxpdGVfQ3Vyc29yVHlwZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImluc3RhbmNlIG9mIGN1cnNvciByZXF1aXJlZCBmb3IgZmlyc3QgYXJndW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soZGF0YSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInR1cGxlIHJlcXVpcmVkIGZvciBzZWNvbmQgYXJndW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBzZWxmID0gKHB5c3FsaXRlX1JvdyAqKSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFB5X0lOQ1JFRihkYXRhKTsKICAgICBzZWxmLT5kYXRhID0gZGF0YTsKIAogICAgIFB5X0lOQ1JFRihjdXJzb3ItPmRlc2NyaXB0aW9uKTsKICAgICBzZWxmLT5kZXNjcmlwdGlvbiA9IGN1cnNvci0+ZGVzY3JpcHRpb247CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7Cit9CisKK1B5T2JqZWN0KiBweXNxbGl0ZV9yb3dfaXRlbShweXNxbGl0ZV9Sb3cqIHNlbGYsIFB5X3NzaXplX3QgaWR4KQoreworICAgUHlPYmplY3QqIGl0ZW0gPSBQeVR1cGxlX0dldEl0ZW0oc2VsZi0+ZGF0YSwgaWR4KTsKKyAgIFB5X1hJTkNSRUYoaXRlbSk7CisgICByZXR1cm4gaXRlbTsKIH0KIAogUHlPYmplY3QqIHB5c3FsaXRlX3Jvd19zdWJzY3JpcHQocHlzcWxpdGVfUm93KiBzZWxmLCBQeU9iamVjdCogaWR4KQogewotICAgIGxvbmcgX2lkeDsKKyAgICBQeV9zc2l6ZV90IF9pZHg7CiAgICAgY2hhcioga2V5OwotICAgIGludCBuaXRlbXMsIGk7CisgICAgUHlfc3NpemVfdCBuaXRlbXMsIGk7CiAgICAgY2hhciogY29tcGFyZV9rZXk7CiAKICAgICBjaGFyKiBwMTsKQEAgLTc3LDcgKzg5LDExIEBACiAgICAgUHlPYmplY3QqIGl0ZW07CiAKICAgICBpZiAoUHlMb25nX0NoZWNrKGlkeCkpIHsKLSAgICAgICAgX2lkeCA9IFB5TG9uZ19Bc0xvbmcoaWR4KTsKKyAgICAgICAgX2lkeCA9IFB5TnVtYmVyX0FzU3NpemVfdChpZHgsIFB5RXhjX0luZGV4RXJyb3IpOworICAgICAgICBpZiAoX2lkeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChfaWR4IDwgMCkKKyAgICAgICAgICAgX2lkeCArPSBQeVR1cGxlX0dFVF9TSVpFKHNlbGYtPmRhdGEpOwogICAgICAgICBpdGVtID0gUHlUdXBsZV9HZXRJdGVtKHNlbGYtPmRhdGEsIF9pZHgpOwogICAgICAgICBQeV9YSU5DUkVGKGl0ZW0pOwogICAgICAgICByZXR1cm4gaXRlbTsKQEAgLTg5LDcgKzEwNSwxMCBAQAogICAgICAgICBuaXRlbXMgPSBQeVR1cGxlX1NpemUoc2VsZi0+ZGVzY3JpcHRpb24pOwogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykgewotICAgICAgICAgICAgY29tcGFyZV9rZXkgPSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5VHVwbGVfR0VUX0lURU0oUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5kZXNjcmlwdGlvbiwgaSksIDApKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvYmo7CisgICAgICAgICAgICBvYmogPSBQeVR1cGxlX0dFVF9JVEVNKHNlbGYtPmRlc2NyaXB0aW9uLCBpKTsKKyAgICAgICAgICAgIG9iaiA9IFB5VHVwbGVfR0VUX0lURU0ob2JqLCAwKTsKKyAgICAgICAgICAgIGNvbXBhcmVfa2V5ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhvYmopOwogICAgICAgICAgICAgaWYgKCFjb21wYXJlX2tleSkgewogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQpAQCAtMTIxLDEwICsxNDAsMTIgQEAKIAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgIk5vIGl0ZW0gd2l0aCB0aGF0IGtleSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaWR4KSkgeworICAgIH0KKyAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGlkeCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzbGljZXMgbm90IGltcGxlbWVudGVkLCB5ZXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiSW5kZXggbXVzdCBiZSBpbnQgb3Igc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE5NCw2ICsyMTUsMTQgQEAKICAgICAvKiBtcF9hc3Nfc3Vic2NyaXB0ICovIChvYmpvYmphcmdwcm9jKTAsCiB9OwogCitzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgcHlzcWxpdGVfcm93X2FzX3NlcXVlbmNlID0geworICAgLyogc3FfbGVuZ3RoICovICAgICAgICAgKGxlbmZ1bmMpcHlzcWxpdGVfcm93X2xlbmd0aCwKKyAgIC8qIHNxX2NvbmNhdCAqLyAgICAgICAgIDAsCisgICAvKiBzcV9yZXBlYXQgKi8gICAgICAgICAwLAorICAgLyogc3FfaXRlbSAqLyAgICAgICAgICAgKHNzaXplYXJnZnVuYylweXNxbGl0ZV9yb3dfaXRlbSwKK307CisKKwogc3RhdGljIFB5TWV0aG9kRGVmIHB5c3FsaXRlX3Jvd19tZXRob2RzW10gPSB7CiAgICAgeyJrZXlzIiwgKFB5Q0Z1bmN0aW9uKXB5c3FsaXRlX3Jvd19rZXlzLCBNRVRIX05PQVJHUywKICAgICAgICAgUHlEb2NfU1RSKCJSZXR1cm5zIHRoZSBrZXlzIG9mIHRoZSByb3cuIil9LApAQCAtMjM3LDcgKzI2Niw3IEBACiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgICAgICAoaW5pdHByb2MpcHlzcWxpdGVfcm93X2luaXQsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KQEAgLTI0NSw3ICsyNzQsOCBAQAogCiBleHRlcm4gaW50IHB5c3FsaXRlX3Jvd19zZXR1cF90eXBlcyh2b2lkKQogewotICAgIHB5c3FsaXRlX1Jvd1R5cGUudHBfbmV3ID0gUHlUeXBlX0dlbmVyaWNOZXc7CisgICAgcHlzcWxpdGVfUm93VHlwZS50cF9uZXcgPSBweXNxbGl0ZV9yb3dfbmV3OwogICAgIHB5c3FsaXRlX1Jvd1R5cGUudHBfYXNfbWFwcGluZyA9ICZweXNxbGl0ZV9yb3dfYXNfbWFwcGluZzsKKyAgICBweXNxbGl0ZV9Sb3dUeXBlLnRwX2FzX3NlcXVlbmNlID0gJnB5c3FsaXRlX3Jvd19hc19zZXF1ZW5jZTsKICAgICByZXR1cm4gUHlUeXBlX1JlYWR5KCZweXNxbGl0ZV9Sb3dUeXBlKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaCBiL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyMGYxNi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBzcWxpdGVjb21wYXQuaCAtIGNvbXBhdGliaWxpdHkgbWFjcm9zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAotICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwotICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKLSAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLSAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKLSAqCi0gKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAotICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKLSAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQotICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KLSAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi0gKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCi0gKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgotICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotI2lmbmRlZiBQWVNRTElURV9DT01QQVRfSAotI2RlZmluZSBQWVNRTElURV9DT01QQVRfSAotCi0vKiBkZWZpbmUgUHlfc3NpemVfdCBmb3IgcHJlLTIuNSB2ZXJzaW9ucyBvZiBQeXRob24gKi8KLQotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMAotdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKLXR5cGVkZWYgaW50ICgqbGVuZnVuYykoUHlPYmplY3QqKTsKLSNlbmRpZgotCi0KLS8qIGRlZmluZSBQeURpY3RfQ2hlY2tFeGFjdCBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8KLSNpZm5kZWYgUHlEaWN0X0NoZWNrRXhhY3QKLSNkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3Qob3ApICgob3ApLT5vYl90eXBlID09ICZQeURpY3RfVHlwZSkKLSNlbmRpZgotCi0vKiBkZWZpbmUgUHlfQ0xFQVIgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0jaWZuZGVmIFB5X0NMRUFSCi0jZGVmaW5lIFB5X0NMRUFSKG9wKQkJCQlcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKLSAgICAgICAgICAgICAgICBpZiAob3ApIHsJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gKFB5T2JqZWN0ICopKG9wKTsJXAotICAgICAgICAgICAgICAgICAgICAgICAgKG9wKSA9IE5VTEw7CQlcCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsJCVwKLSAgICAgICAgICAgICAgICB9CQkJCVwKLSAgICAgICAgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWZuZGVmIFB5VmFyT2JqZWN0X0hFQURfSU5JVAotI2RlZmluZSBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlwZSwgc2l6ZSkgXAotICAgIFB5T2JqZWN0X0hFQURfSU5JVCh0eXBlKSBzaXplLAotI2VuZGlmCi0KLSNpZm5kZWYgUHlfVFlQRQotI2RlZmluZSBQeV9UWVBFKG9iKSAoKG9iKS0+b2JfdHlwZSkKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYwppbmRleCA0NzFhMDY3Li4zNGJhYmZkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAibWljcm9wcm90b2NvbHMuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiAvKiBwcm90b3R5cGVzICovCiBzdGF0aWMgaW50IHB5c3FsaXRlX2NoZWNrX3JlbWFpbmluZ19zcWwoY29uc3QgY2hhciogdGFpbCk7CkBAIC02NCw2ICs2MywxMCBAQAogICAgICAgICByYyA9IFBZU1FMSVRFX1NRTF9XUk9OR19UWVBFOwogICAgICAgICByZXR1cm4gcmM7CiAgICAgfQorICAgIGlmIChzdHJsZW4oc3FsX2NzdHIpICE9IChzaXplX3Qpc3FsX2NzdHJfbGVuKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidGhlIHF1ZXJ5IGNvbnRhaW5zIGEgbnVsbCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgcmV0dXJuIFBZU1FMSVRFX1NRTF9XUk9OR19UWVBFOworICAgIH0KIAogICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBQeV9JTkNSRUYoc3FsKTsKQEAgLTEzMywxOCArMTM2LDI2IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUWVBFX1VOSUNPREU6CiAgICAgICAgICAgICBzdHJpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nQW5kU2l6ZShwYXJhbWV0ZXIsICZidWZsZW4pOwotICAgICAgICAgICAgaWYgKHN0cmluZyAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX3RleHQoc2VsZi0+c3QsIHBvcywgc3RyaW5nLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBpZiAoc3RyaW5nID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGJ1ZmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyBsb25nZXIgdGhhbiBJTlRfTUFYIGJ5dGVzIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfdGV4dChzZWxmLT5zdCwgcG9zLCBzdHJpbmcsIChpbnQpYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfQlVGRkVSOgotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihwYXJhbWV0ZXIsICZidWZmZXIsICZidWZsZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF9ibG9iKHNlbGYtPnN0LCBwb3MsIGJ1ZmZlciwgYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHBhcmFtZXRlciwgJmJ1ZmZlciwgJmJ1ZmxlbikgIT0gMCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKLSAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChidWZsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCTE9CIGxvbmdlciB0aGFuIElOVF9NQVggYnl0ZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF9ibG9iKHNlbGYtPnN0LCBwb3MsIGJ1ZmZlciwgYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfVU5LTk9XTjoKICAgICAgICAgICAgIHJjID0gLTE7CkBAIC0xNzcsNyArMTg4LDcgQEAKICAgICBpbnQgaTsKICAgICBpbnQgcmM7CiAgICAgaW50IG51bV9wYXJhbXNfbmVlZGVkOwotICAgIGludCBudW1fcGFyYW1zOworICAgIFB5X3NzaXplX3QgbnVtX3BhcmFtczsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBudW1fcGFyYW1zX25lZWRlZCA9IHNxbGl0ZTNfYmluZF9wYXJhbWV0ZXJfY291bnQoc2VsZi0+c3QpOwpAQCAtMTkzLDcgKzIwNCw5IEBACiAgICAgICAgICAgICBudW1fcGFyYW1zID0gUHlTZXF1ZW5jZV9TaXplKHBhcmFtZXRlcnMpOwogICAgICAgICB9CiAgICAgICAgIGlmIChudW1fcGFyYW1zICE9IG51bV9wYXJhbXNfbmVlZGVkKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwgIkluY29ycmVjdCBudW1iZXIgb2YgYmluZGluZ3Mgc3VwcGxpZWQuIFRoZSBjdXJyZW50IHN0YXRlbWVudCB1c2VzICVkLCBhbmQgdGhlcmUgYXJlICVkIHN1cHBsaWVkLiIsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBiaW5kaW5ncyBzdXBwbGllZC4gVGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0ZW1lbnQgdXNlcyAlZCwgYW5kIHRoZXJlIGFyZSAlemQgc3VwcGxpZWQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcGFyYW1zX25lZWRlZCwgbnVtX3BhcmFtcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI0OSw3ICsyNjIsNyBAQAogICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gPSBQeURpY3RfR2V0SXRlbVN0cmluZyhwYXJhbWV0ZXJzLCBiaW5kaW5nX25hbWUpOwogICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYoY3VycmVudF9wYXJhbSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhwYXJhbWV0ZXJzLCAoY2hhciopYmluZGluZ19uYW1lKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50X3BhcmFtID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcocGFyYW1ldGVycywgYmluZGluZ19uYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghY3VycmVudF9wYXJhbSkgewogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiWW91IGRpZCBub3Qgc3VwcGx5IGEgdmFsdWUgZm9yIGJpbmRpbmcgJWQuIiwgaSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwppbmRleCBkODhiYzNmLi4zMTJmZTNiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgIH0KICMgZW5kaWYKICNlbmRpZgotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodmFsdWUpOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoUHlfU0FGRV9ET1dOQ0FTVCh2YWx1ZSwgc3FsaXRlX2ludDY0LCBsb25nKSk7CiB9CiAKIHNxbGl0ZV9pbnQ2NApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3JlLmMgYi9Nb2R1bGVzL19zcmUuYwppbmRleCBiMTI1OGVlLi4zMDBkODgzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcmUuYworKysgYi9Nb2R1bGVzL19zcmUuYwpAQCAtNCwyNCArNCwyNSBAQAogICogcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGVuZ2luZQogICoKICAqIHBhcnRpYWwgaGlzdG9yeToKLSAqIDE5OTktMTAtMjQgZmwgIGNyZWF0ZWQgKGJhc2VkIG9uIGV4aXN0aW5nIHRlbXBsYXRlIG1hdGNoZXIgY29kZSkKLSAqIDIwMDAtMDMtMDYgZmwgIGZpcnN0IGFscGhhLCBzb3J0IG9mCi0gKiAyMDAwLTA4LTAxIGZsICBmaXhlcyBmb3IgMS42YjEKLSAqIDIwMDAtMDgtMDcgZmwgIHVzZSBQeU9TX0NoZWNrU3RhY2soKSBpZiBhdmFpbGFibGUKLSAqIDIwMDAtMDktMjAgZmwgIGFkZGVkIGV4cGFuZCBtZXRob2QKLSAqIDIwMDEtMDMtMjAgZmwgIGxvdHMgb2YgZml4ZXMgZm9yIDIuMWIyCi0gKiAyMDAxLTA0LTE1IGZsICBleHBvcnQgY29weXJpZ2h0IGFzIFB5dGhvbiBhdHRyaWJ1dGUsIG5vdCBnbG9iYWwKLSAqIDIwMDEtMDQtMjggZmwgIGFkZGVkIF9fY29weV9fIG1ldGhvZHMgKHdvcmsgaW4gcHJvZ3Jlc3MpCi0gKiAyMDAxLTA1LTE0IGZsICBmaXhlcyBmb3IgMS41LjIgY29tcGF0aWJpbGl0eQotICogMjAwMS0wNy0wMSBmbCAgYWRkZWQgQklHQ0hBUlNFVCBzdXBwb3J0IChmcm9tIE1hcnRpbiB2b24gTG9ld2lzKQotICogMjAwMS0xMC0xOCBmbCAgZml4ZWQgZ3JvdXAgcmVzZXQgaXNzdWUgKGZyb20gTWF0dGhldyBNdWVsbGVyKQotICogMjAwMS0xMC0yMCBmbCAgYWRkZWQgc3BsaXQgcHJpbWl0aXZlOyByZWVuYWJsZSB1bmljb2RlIGZvciAxLjYvMi4wLzIuMQotICogMjAwMS0xMC0yMSBmbCAgYWRkZWQgc3ViL3N1Ym4gcHJpbWl0aXZlCi0gKiAyMDAxLTEwLTI0IGZsICBhZGRlZCBmaW5kaXRlciBwcmltaXRpdmUgKGZvciAyLjIgb25seSkKLSAqIDIwMDEtMTItMDcgZmwgIGZpeGVkIG1lbW9yeSBsZWFrIGluIHN1Yi9zdWJuIChHdWlkbyB2YW4gUm9zc3VtKQotICogMjAwMi0xMS0wOSBmbCAgZml4ZWQgZW1wdHkgc3ViL3N1Ym4gcmV0dXJuIHR5cGUKLSAqIDIwMDMtMDQtMTggbXZsIGZ1bGx5IHN1cHBvcnQgNC1ieXRlIGNvZGVzCi0gKiAyMDAzLTEwLTE3IGduICBpbXBsZW1lbnRlZCBub24gcmVjdXJzaXZlIHNjaGVtZQorICogMTk5OS0xMC0yNCBmbCAgIGNyZWF0ZWQgKGJhc2VkIG9uIGV4aXN0aW5nIHRlbXBsYXRlIG1hdGNoZXIgY29kZSkKKyAqIDIwMDAtMDMtMDYgZmwgICBmaXJzdCBhbHBoYSwgc29ydCBvZgorICogMjAwMC0wOC0wMSBmbCAgIGZpeGVzIGZvciAxLjZiMQorICogMjAwMC0wOC0wNyBmbCAgIHVzZSBQeU9TX0NoZWNrU3RhY2soKSBpZiBhdmFpbGFibGUKKyAqIDIwMDAtMDktMjAgZmwgICBhZGRlZCBleHBhbmQgbWV0aG9kCisgKiAyMDAxLTAzLTIwIGZsICAgbG90cyBvZiBmaXhlcyBmb3IgMi4xYjIKKyAqIDIwMDEtMDQtMTUgZmwgICBleHBvcnQgY29weXJpZ2h0IGFzIFB5dGhvbiBhdHRyaWJ1dGUsIG5vdCBnbG9iYWwKKyAqIDIwMDEtMDQtMjggZmwgICBhZGRlZCBfX2NvcHlfXyBtZXRob2RzICh3b3JrIGluIHByb2dyZXNzKQorICogMjAwMS0wNS0xNCBmbCAgIGZpeGVzIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5CisgKiAyMDAxLTA3LTAxIGZsICAgYWRkZWQgQklHQ0hBUlNFVCBzdXBwb3J0IChmcm9tIE1hcnRpbiB2b24gTG9ld2lzKQorICogMjAwMS0xMC0xOCBmbCAgIGZpeGVkIGdyb3VwIHJlc2V0IGlzc3VlIChmcm9tIE1hdHRoZXcgTXVlbGxlcikKKyAqIDIwMDEtMTAtMjAgZmwgICBhZGRlZCBzcGxpdCBwcmltaXRpdmU7IHJlZW5hYmxlIHVuaWNvZGUgZm9yIDEuNi8yLjAvMi4xCisgKiAyMDAxLTEwLTIxIGZsICAgYWRkZWQgc3ViL3N1Ym4gcHJpbWl0aXZlCisgKiAyMDAxLTEwLTI0IGZsICAgYWRkZWQgZmluZGl0ZXIgcHJpbWl0aXZlIChmb3IgMi4yIG9ubHkpCisgKiAyMDAxLTEyLTA3IGZsICAgZml4ZWQgbWVtb3J5IGxlYWsgaW4gc3ViL3N1Ym4gKEd1aWRvIHZhbiBSb3NzdW0pCisgKiAyMDAyLTExLTA5IGZsICAgZml4ZWQgZW1wdHkgc3ViL3N1Ym4gcmV0dXJuIHR5cGUKKyAqIDIwMDMtMDQtMTggbXZsICBmdWxseSBzdXBwb3J0IDQtYnl0ZSBjb2RlcworICogMjAwMy0xMC0xNyBnbiAgIGltcGxlbWVudGVkIG5vbiByZWN1cnNpdmUgc2NoZW1lCisgKiAyMDEzLTAyLTA0IG1yYWIgYWRkZWQgZnVsbG1hdGNoIHByaW1pdGl2ZQogICoKICAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDAxIGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zNCw4ICszNSw2IEBACiAgKiBvdGhlciBjb21wYXRpYmlsaXR5IHdvcmsuCiAgKi8KIAotI2lmbmRlZiBTUkVfUkVDVVJTSVZFCi0KIHN0YXRpYyBjaGFyIGNvcHlyaWdodFtdID0KICAgICAiIFNSRSAyLjIuMiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMiBieSBTZWNyZXQgTGFicyBBQiAiOwogCkBAIC00Niw2ICs0NSw4IEBACiAKICNpbmNsdWRlICJzcmUuaCIKIAorI2RlZmluZSBTUkVfQ09ERV9CSVRTICg4ICogc2l6ZW9mKFNSRV9DT0RFKSkKKwogI2luY2x1ZGUgPGN0eXBlLmg+CiAKIC8qIG5hbWUgb2YgdGhpcyBtb2R1bGUsIG1pbnVzIHRoZSBsZWFkaW5nIHVuZGVyc2NvcmUgKi8KQEAgLTU4LDkgKzU5LDYgQEAKIC8qIGRlZmluaW5nIHRoaXMgb25lIGVuYWJsZXMgdHJhY2luZyAqLwogI3VuZGVmIFZFUkJPU0UKIAotLyogZGVmaW5pbmcgdGhpcyBlbmFibGVzIHVuaWNvZGUgc3VwcG9ydCAoZGVmYXVsdCB1bmRlciAxLjZhMSBhbmQgbGF0ZXIpICovCi0jZGVmaW5lIEhBVkVfVU5JQ09ERQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogb3B0aW9uYWwgZmVhdHVyZXMgKi8KIApAQCAtNzAsMTAgKzY4LDYgQEAKIC8qIGVuYWJsZXMgY29weS9kZWVwY29weSBoYW5kbGluZyAod29yayBpbiBwcm9ncmVzcykgKi8KICN1bmRlZiBVU0VfQlVJTFRJTl9DT1BZCiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDEwNjAwMDAKLSNkZWZpbmUgUHlPYmplY3RfREVMKG9wKSBQeU1lbV9ERUwoKG9wKSkKLSNlbmRpZgotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTE1MCw5ICsxNDQsNiBAQAogLyogbG9jYWxlLXNwZWNpZmljIGNoYXJhY3RlciBwcmVkaWNhdGVzICovCiAvKiAhKGMgJiB+TikgPT0gKGMgPCBOKzEpIGZvciBhbnkgdW5zaWduZWQgYywgdGhpcyBhdm9pZHMKICAqIHdhcm5pbmdzIHdoZW4gYydzIHR5cGUgc3VwcG9ydHMgb25seSBudW1iZXJzIDwgTisxICovCi0jZGVmaW5lIFNSRV9MT0NfSVNfRElHSVQoY2gpICghKChjaCkgJiB+MjU1KSA/IGlzZGlnaXQoKGNoKSkgOiAwKQotI2RlZmluZSBTUkVfTE9DX0lTX1NQQUNFKGNoKSAoISgoY2gpICYgfjI1NSkgPyBpc3NwYWNlKChjaCkpIDogMCkKLSNkZWZpbmUgU1JFX0xPQ19JU19MSU5FQlJFQUsoY2gpICgoY2gpID09ICdcbicpCiAjZGVmaW5lIFNSRV9MT0NfSVNfQUxOVU0oY2gpICghKChjaCkgJiB+MjU1KSA/IGlzYWxudW0oKGNoKSkgOiAwKQogI2RlZmluZSBTUkVfTE9DX0lTX1dPUkQoY2gpIChTUkVfTE9DX0lTX0FMTlVNKChjaCkpIHx8IChjaCkgPT0gJ18nKQogCkBAIC0yNTYsMTM4MCArMjQ3LDMyIEBACiAKIC8qIGdlbmVyYXRlIDgtYml0IHZlcnNpb24gKi8KIAotI2RlZmluZSBTUkVfQ0hBUiB1bnNpZ25lZCBjaGFyCi0jZGVmaW5lIFNSRV9DSEFSR0VUKHN0YXRlLCBidWYsIGluZGV4KSAoKHVuc2lnbmVkIGNoYXIqKWJ1ZilbaW5kZXhdCi0jZGVmaW5lIFNSRV9BVCBzcmVfYXQKLSNkZWZpbmUgU1JFX0NPVU5UIHNyZV9jb3VudAotI2RlZmluZSBTUkVfQ0hBUlNFVCBzcmVfY2hhcnNldAotI2RlZmluZSBTUkVfSU5GTyBzcmVfaW5mbwotI2RlZmluZSBTUkVfTUFUQ0ggc3JlX21hdGNoCi0jZGVmaW5lIFNSRV9NQVRDSF9DT05URVhUIHNyZV9tYXRjaF9jb250ZXh0Ci0jZGVmaW5lIFNSRV9TRUFSQ0ggc3JlX3NlYXJjaAorI2RlZmluZSBTUkVfQ0hBUiBQeV9VQ1MxCisjZGVmaW5lIFNJWkVPRl9TUkVfQ0hBUiAxCisjZGVmaW5lIFNSRShGKSBzcmVfdWNzMV8jI0YKKyNpbmNsdWRlICJzcmVfbGliLmgiCiAKLSNkZWZpbmUgU1JFX1JFQ1VSU0lWRQotI2luY2x1ZGUgIl9zcmUuYyIKLSN1bmRlZiBTUkVfUkVDVVJTSVZFCisvKiBnZW5lcmF0ZSAxNi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCiAKLSN1bmRlZiBTUkVfU0VBUkNICi0jdW5kZWYgU1JFX01BVENICi0jdW5kZWYgU1JFX01BVENIX0NPTlRFWFQKLSN1bmRlZiBTUkVfSU5GTwotI3VuZGVmIFNSRV9DSEFSU0VUCi0jdW5kZWYgU1JFX0NPVU5UCi0jdW5kZWYgU1JFX0FUCi0jdW5kZWYgU1JFX0NIQVIKLSN1bmRlZiBTUkVfQ0hBUkdFVAorI2RlZmluZSBTUkVfQ0hBUiBQeV9VQ1MyCisjZGVmaW5lIFNJWkVPRl9TUkVfQ0hBUiAyCisjZGVmaW5lIFNSRShGKSBzcmVfdWNzMl8jI0YKKyNpbmNsdWRlICJzcmVfbGliLmgiCiAKLS8qIGdlbmVyYXRlIDgvMTYvMzItYml0IHVuaWNvZGUgdmVyc2lvbiAqLworLyogZ2VuZXJhdGUgMzItYml0IHVuaWNvZGUgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFNSRV9DSEFSIHZvaWQKLSNkZWZpbmUgU1JFX0NIQVJHRVQoc3RhdGUsIGJ1ZiwgaW5kZXgpIFwKLSAgICAoKHN0YXRlLT5jaGFyc2l6ZT09MSkgPyAoKFB5X1VDUzEqKWJ1ZilbaW5kZXhdIDogXAotICAgICAoc3RhdGUtPmNoYXJzaXplPT0yKSA/ICgoUHlfVUNTMiopYnVmKVtpbmRleF0gOiBcCi0gICAgICgoUHlfVUNTNCopYnVmKVtpbmRleF0pCi0jZGVmaW5lIFNSRV9BVCBzcmVfdWF0Ci0jZGVmaW5lIFNSRV9DT1VOVCBzcmVfdWNvdW50Ci0jZGVmaW5lIFNSRV9DSEFSU0VUIHNyZV91Y2hhcnNldAotI2RlZmluZSBTUkVfSU5GTyBzcmVfdWluZm8KLSNkZWZpbmUgU1JFX01BVENIIHNyZV91bWF0Y2gKLSNkZWZpbmUgU1JFX01BVENIX0NPTlRFWFQgc3JlX3VtYXRjaF9jb250ZXh0Ci0jZGVmaW5lIFNSRV9TRUFSQ0ggc3JlX3VzZWFyY2gKLQotI2VuZGlmIC8qIFNSRV9SRUNVUlNJVkUgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIFN0cmluZyBtYXRjaGluZyBlbmdpbmUgKi8KLQotLyogdGhlIGZvbGxvd2luZyBzZWN0aW9uIGlzIGNvbXBpbGVkIHR3aWNlLCB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIKLSAgIHNldHRpbmdzICovCi0KLUxPQ0FMKGludCkKLVNSRV9BVChTUkVfU1RBVEUqIHN0YXRlLCBjaGFyKiBwdHIsIFNSRV9DT0RFIGF0KQotewotICAgIC8qIGNoZWNrIGlmIHBvaW50ZXIgaXMgYXQgZ2l2ZW4gcG9zaXRpb24gKi8KLQotICAgIFB5X3NzaXplX3QgdGhpc3AsIHRoYXRwOwotCi0gICAgc3dpdGNoIChhdCkgewotCi0gICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HOgotICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19TVFJJTkc6Ci0gICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyk7Ci0KLSAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfTElORToKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nIHx8Ci0gICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpKTsKLQotICAgIGNhc2UgU1JFX0FUX0VORDoKLSAgICAgICAgcmV0dXJuICgoKHZvaWQqKSAocHRyK3N0YXRlLT5jaGFyc2l6ZSkgPT0gc3RhdGUtPmVuZCAmJgotICAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkgfHwKLSAgICAgICAgICAgICAgICAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EX0xJTkU6Ci0gICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCB8fAotICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKTsKLQotICAgIGNhc2UgU1JFX0FUX0VORF9TVFJJTkc6Ci0gICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCk7Ci0KLSAgICBjYXNlIFNSRV9BVF9CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX05PTl9CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX0xPQ19CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpIDogMDsKLSAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/Ci0gICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTE9DX05PTl9CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpIDogMDsKLSAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/Ci0gICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfVU5JX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9VTklfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotTE9DQUwoaW50KQotU1JFX0NIQVJTRVQoU1JFX0NPREUqIHNldCwgU1JFX0NPREUgY2gpCi17Ci0gICAgLyogY2hlY2sgaWYgY2hhcmFjdGVyIGlzIGEgbWVtYmVyIG9mIHRoZSBnaXZlbiBzZXQgKi8KLQotICAgIGludCBvayA9IDE7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHN3aXRjaCAoKnNldCsrKSB7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfRkFJTFVSRToKLSAgICAgICAgICAgIHJldHVybiAhb2s7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKLSAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIGlmIChjaCA9PSBzZXRbMF0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0Kys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKLSAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCi0gICAgICAgICAgICBpZiAoc3JlX2NhdGVnb3J5KHNldFswXSwgKGludCkgY2gpKQotICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgIHNldCArPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQ0hBUlNFVDoKLSAgICAgICAgICAgIGlmIChzaXplb2YoU1JFX0NPREUpID09IDIpIHsKLSAgICAgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKDE2IGJpdHMgcGVyIGNvZGUgd29yZCkgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPCAyNTYgJiYgKHNldFtjaCA+PiA0XSAmICgxIDw8IChjaCAmIDE1KSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDE2OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogPENIQVJTRVQ+IDxiaXRtYXA+ICgzMiBiaXRzIHBlciBjb2RlIHdvcmQpICovCi0gICAgICAgICAgICAgICAgaWYgKGNoIDwgMjU2ICYmIChzZXRbY2ggPj4gNV0gJiAoMXUgPDwgKGNoICYgMzEpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gODsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1JBTkdFOgotICAgICAgICAgICAgLyogPFJBTkdFPiA8bG93ZXI+IDx1cHBlcj4gKi8KLSAgICAgICAgICAgIGlmIChzZXRbMF0gPD0gY2ggJiYgY2ggPD0gc2V0WzFdKQotICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgIHNldCArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTkVHQVRFOgotICAgICAgICAgICAgb2sgPSAhb2s7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9CSUdDSEFSU0VUOgotICAgICAgICAgICAgLyogPEJJR0NIQVJTRVQ+IDxibG9ja2NvdW50PiA8MjU2IGJsb2NraW5kaWNlcz4gPGJsb2Nrcz4gKi8KLSAgICAgICAgewotICAgICAgICAgICAgUHlfc3NpemVfdCBjb3VudCwgYmxvY2s7Ci0gICAgICAgICAgICBjb3VudCA9ICooc2V0KyspOwotCi0gICAgICAgICAgICBpZiAoc2l6ZW9mKFNSRV9DT0RFKSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSAoKHVuc2lnbmVkIGNoYXIqKXNldClbY2ggPj4gOF07Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDEyODsKLSAgICAgICAgICAgICAgICBpZiAoc2V0W2Jsb2NrKjE2ICsgKChjaCAmIDI1NSk+PjQpXSAmICgxIDw8IChjaCAmIDE1KSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gY291bnQqMTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiAhKGMgJiB+TikgPT0gKGMgPCBOKzEpIGZvciBhbnkgdW5zaWduZWQgYywgdGhpcyBhdm9pZHMKLSAgICAgICAgICAgICAgICAgKiB3YXJuaW5ncyB3aGVuIGMncyB0eXBlIHN1cHBvcnRzIG9ubHkgbnVtYmVycyA8IE4rMSAqLwotICAgICAgICAgICAgICAgIGlmICghKGNoICYgfjY1NTM1KSkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSAoKHVuc2lnbmVkIGNoYXIqKXNldClbY2ggPj4gOF07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBibG9jayA9IC0xOwotICAgICAgICAgICAgICAgIHNldCArPSA2NDsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2sgPj0wICYmCi0gICAgICAgICAgICAgICAgICAgIChzZXRbYmxvY2sqOCArICgoY2ggJiAyNTUpPj41KV0gJiAoMXUgPDwgKGNoICYgMzEpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gY291bnQqODsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8qIGludGVybmFsIGVycm9yIC0tIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IGl0Ci0gICAgICAgICAgICAgICBoZXJlLCBzbyBsZXQncyBqdXN0IHByZXRlbmQgaXQgZGlkbid0IG1hdGNoLi4uICovCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotTE9DQUwoUHlfc3NpemVfdCkgU1JFX01BVENIKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKTsKLQotTE9DQUwoUHlfc3NpemVfdCkKLVNSRV9DT1VOVChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybiwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICBTUkVfQ09ERSBjaHI7Ci0gICAgY2hhciogcHRyID0gKGNoYXIgKilzdGF0ZS0+cHRyOwotICAgIGNoYXIqIGVuZCA9IChjaGFyICopc3RhdGUtPmVuZDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0KLSAgICAvKiBhZGp1c3QgZW5kICovCi0gICAgaWYgKG1heGNvdW50IDwgKGVuZCAtIHB0cikgLyBzdGF0ZS0+Y2hhcnNpemUgJiYgbWF4Y291bnQgIT0gU1JFX01BWFJFUEVBVCkKLSAgICAgICAgZW5kID0gcHRyICsgbWF4Y291bnQqc3RhdGUtPmNoYXJzaXplOwotCi0gICAgc3dpdGNoIChwYXR0ZXJuWzBdKSB7Ci0KLSAgICBjYXNlIFNSRV9PUF9JTjoKLSAgICAgICAgLyogcmVwZWF0ZWQgc2V0ICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIElOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJgotICAgICAgICAgICAgICAgU1JFX0NIQVJTRVQocGF0dGVybiArIDIsIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfQU5ZOgotICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWVxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9JU19MSU5FQlJFQUsoU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgotICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICBza2lwIHRvIHRoZSBlbmQgb2YgdGhlIHRhcmdldAotICAgICAgICAgICBzdHJpbmcsIGFuZCBiYWNrdHJhY2sgZnJvbSB0aGVyZSAqLwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllfQUxMXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgcHRyID0gZW5kOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApID09IGNocikKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpID09IGNocikKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6Ci0gICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCi0gICAgICAgIGNociA9IHBhdHRlcm5bMV07Ci0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgIT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6Ci0gICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCi0gICAgICAgIGNociA9IHBhdHRlcm5bMV07Ci0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgIT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICAvKiByZXBlYXRlZCBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4gKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgU1VCUEFUVEVSTlxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgIHdoaWxlICgoY2hhciopIHN0YXRlLT5wdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGkgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKGkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKLSAgICAgICAgICAgICAgICgoY2hhciopc3RhdGUtPnB0ciAtIHB0cikvc3RhdGUtPmNoYXJzaXplKSk7Ci0gICAgICAgIHJldHVybiAoKGNoYXIqKXN0YXRlLT5wdHIgLSBwdHIpL3N0YXRlLT5jaGFyc2l6ZTsKLSAgICB9Ci0KLSAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBwYXR0ZXJuLCBwdHIsCi0gICAgICAgICAgIChwdHIgLSAoY2hhciopIHN0YXRlLT5wdHIpL3N0YXRlLT5jaGFyc2l6ZSkpOwotICAgIHJldHVybiAocHRyIC0gKGNoYXIqKSBzdGF0ZS0+cHRyKS9zdGF0ZS0+Y2hhcnNpemU7Ci19Ci0KLSNpZiAwIC8qIG5vdCB1c2VkIGluIHRoaXMgcmVsZWFzZSAqLwotTE9DQUwoaW50KQotU1JFX0lORk8oU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCi17Ci0gICAgLyogY2hlY2sgaWYgYW4gU1JFX09QX0lORk8gYmxvY2sgbWF0Y2hlcyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgICAgICByZXR1cm5zIHRoZSBudW1iZXIgb2YgU1JFX0NPREUgb2JqZWN0cyB0byBza2lwIGlmIHN1Y2Nlc3NmdWwsIDAKLSAgICAgICBpZiBubyBtYXRjaCAqLwotCi0gICAgY2hhciogZW5kID0gc3RhdGUtPmVuZDsKLSAgICBjaGFyKiBwdHIgPSBzdGF0ZS0+cHRyOwotICAgIFB5X3NzaXplX3QgaTsKLQotICAgIC8qIGNoZWNrIG1pbmltYWwgbGVuZ3RoICovCi0gICAgaWYgKHBhdHRlcm5bM10gJiYgKGVuZCAtIHB0cikvc3RhdGUtPmNoYXJzaXplIDwgcGF0dGVyblszXSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBjaGVjayBrbm93biBwcmVmaXggKi8KLSAgICBpZiAocGF0dGVyblsyXSAmIFNSRV9JTkZPX1BSRUZJWCAmJiBwYXR0ZXJuWzVdID4gMSkgewotICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybls1XTsgaSsrKQotICAgICAgICAgICAgaWYgKChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgaSkgIT0gcGF0dGVybls3ICsgaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBwYXR0ZXJuWzBdICsgMiAqIHBhdHRlcm5bNl07Ci0gICAgfQotICAgIHJldHVybiBwYXR0ZXJuWzBdOwotfQotI2VuZGlmCi0KLS8qIFRoZSBtYWNyb3MgYmVsb3cgc2hvdWxkIGJlIHVzZWQgdG8gcHJvdGVjdCByZWN1cnNpdmUgU1JFX01BVENIKCkKLSAqIGNhbGxzIHRoYXQgKmZhaWxlZCogYW5kIGRvICpub3QqIHJldHVybiBpbW1lZGlhdGVseSAoSU9XLCB0aG9zZQotICogdGhhdCB3aWxsIGJhY2t0cmFjaykuIEV4cGxhaW5pbmc6Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgdHJ1ZTogdGhhdCdzIHVzdWFsbHkgYSBzdWNjZXNzCi0gKiAgIChiZXNpZGVzIGF0eXBpY2FsIGNhc2VzIGxpa2UgQVNTRVJUX05PVCksIHRoZXJlZm9yZSB0aGVyZSdzIG5vCi0gKiAgIHJlYXNvbiB0byByZXN0b3JlIGxhc3RtYXJrOwotICoKLSAqIC0gUmVjdXJzaXZlIFNSRV9NQVRDSCgpIHJldHVybmVkIGZhbHNlIGJ1dCB0aGUgY3VycmVudCBTUkVfTUFUQ0goKQotICogICBpcyByZXR1cm5pbmcgdG8gdGhlIGNhbGxlcjogSWYgdGhlIGN1cnJlbnQgU1JFX01BVENIKCkgaXMgdGhlCi0gKiAgIHRvcCBmdW5jdGlvbiBvZiB0aGUgcmVjdXJzaW9uLCByZXR1cm5pbmcgZmFsc2Ugd2lsbCBiZSBhIG1hdGNoaW5nCi0gKiAgIGZhaWx1cmUsIGFuZCBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBsYXN0bWFyayBpcyBwb2ludGluZyB0by4KLSAqICAgSWYgaXQncyAqbm90KiB0aGUgdG9wIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGEgcmVjdXJzaXZlIFNSRV9NQVRDSCgpCi0gKiAgIGZhaWx1cmUgYnkgaXRzZWxmLCBhbmQgdGhlIGNhbGxpbmcgU1JFX01BVENIKCkgd2lsbCBoYXZlIHRvIGRlYWwKLSAqICAgd2l0aCB0aGUgZmFpbHVyZSBieSB0aGUgc2FtZSBydWxlcyBleHBsYWluZWQgaGVyZSAoaXQgd2lsbCByZXN0b3JlCi0gKiAgIGxhc3RtYXJrIGJ5IGl0c2VsZiBpZiBuZWNlc3NhcnkpOwotICoKLSAqIC0gUmVjdXJzaXZlIFNSRV9NQVRDSCgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBjb250aW51ZSB0aGUKLSAqICAgb3V0c2lkZSAnZm9yJyBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCB3aGVuIGJyZWFraW5nLCBzaW5jZSB0aGUgbmV4dAotICogICBPUCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcms7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGJlIGNhbGxlZCBhZ2FpbgotICogICBpbnNpZGUgYSBsb2NhbCBmb3Ivd2hpbGUgbG9vcDogbXVzdCBiZSBwcm90ZWN0ZWQgYmV0d2VlbiBlYWNoCi0gKiAgIGxvb3AgaXRlcmF0aW9uLCBzaW5jZSB0aGUgcmVjdXJzaXZlIFNSRV9NQVRDSCgpIGNvdWxkIGRvIGFueXRoaW5nLAotICogICBhbmQgY291bGQgcG90ZW50aWFsbHkgZGVwZW5kIG9uIGxhc3RtYXJrLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjaGVjayB0aGUgZGlzY3Vzc2lvbiBhdCBTRiBwYXRjaCAjNzEyOTAwLgotICovCi0jZGVmaW5lIExBU1RNQVJLX1NBVkUoKSAgICAgXAotICAgIGRvIHsgXAotICAgICAgICBjdHgtPmxhc3RtYXJrID0gc3RhdGUtPmxhc3RtYXJrOyBcCi0gICAgICAgIGN0eC0+bGFzdGluZGV4ID0gc3RhdGUtPmxhc3RpbmRleDsgXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIExBU1RNQVJLX1JFU1RPUkUoKSAgXAotICAgIGRvIHsgXAotICAgICAgICBzdGF0ZS0+bGFzdG1hcmsgPSBjdHgtPmxhc3RtYXJrOyBcCi0gICAgICAgIHN0YXRlLT5sYXN0aW5kZXggPSBjdHgtPmxhc3RpbmRleDsgXAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUkVUVVJOX0VSUk9SKGkpIGRvIHsgcmV0dXJuIGk7IH0gd2hpbGUoMCkKLSNkZWZpbmUgUkVUVVJOX0ZBSUxVUkUgZG8geyByZXQgPSAwOyBnb3RvIGV4aXQ7IH0gd2hpbGUoMCkKLSNkZWZpbmUgUkVUVVJOX1NVQ0NFU1MgZG8geyByZXQgPSAxOyBnb3RvIGV4aXQ7IH0gd2hpbGUoMCkKLQotI2RlZmluZSBSRVRVUk5fT05fRVJST1IoaSkgXAotICAgIGRvIHsgaWYgKGkgPCAwKSBSRVRVUk5fRVJST1IoaSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFVFVSTl9PTl9TVUNDRVNTKGkpIFwKLSAgICBkbyB7IFJFVFVSTl9PTl9FUlJPUihpKTsgaWYgKGkgPiAwKSBSRVRVUk5fU1VDQ0VTUzsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVUVVJOX09OX0ZBSUxVUkUoaSkgXAotICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA9PSAwKSBSRVRVUk5fRkFJTFVSRTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTRlkoeCkgI3gKLQotI2RlZmluZSBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0eXBlLCBwdHIpIFwKLWRvIHsgXAotICAgIGFsbG9jX3BvcyA9IHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2U7IFwKLSAgICBUUkFDRSgoImFsbG9jYXRpbmcgJXMgaW4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBTRlkodHlwZSksIGFsbG9jX3Bvcywgc2l6ZW9mKHR5cGUpKSk7IFwKLSAgICBpZiAoc2l6ZW9mKHR5cGUpID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIGFsbG9jX3BvcykgeyBcCi0gICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplb2YodHlwZSkpOyBcCi0gICAgICAgIGlmIChqIDwgMCkgcmV0dXJuIGo7IFwKLSAgICAgICAgaWYgKGN0eF9wb3MgIT0gLTEpIFwKLSAgICAgICAgICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCBTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsgXAotICAgIH0gXAotICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srYWxsb2NfcG9zKTsgXAotICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZW9mKHR5cGUpOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCB0eXBlLCBwdHIsIHBvcykgXAotZG8geyBcCi0gICAgVFJBQ0UoKCJsb29raW5nIHVwICVzIGF0ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIFNGWSh0eXBlKSwgcG9zKSk7IFwKLSAgICBwdHIgPSAodHlwZSopKHN0YXRlLT5kYXRhX3N0YWNrK3Bvcyk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBkYXRhLCBzaXplKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImNvcHkgZGF0YSBpbiAlcCB0byAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAotICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCi0gICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIHNpemUpKTsgXAotICAgIGlmIChzaXplID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UpIHsgXAotICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZSk7IFwKLSAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAotICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAotICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOyBcCi0gICAgfSBcCi0gICAgbWVtY3B5KHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIGRhdGEsIHNpemUpOyBcCi0gICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBkYXRhLCBzaXplLCBkaXNjYXJkKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImNvcHkgZGF0YSB0byAlcCBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKLSAgICBtZW1jcHkoZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKTsgXAotICAgIGlmIChkaXNjYXJkKSBcCi0gICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImRpc2NhcmQgZGF0YSBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKLSAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBEQVRBX1BVU0goeCkgXAotICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSkpCi0jZGVmaW5lIERBVEFfUE9QKHgpIFwKLSAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSksIDEpCi0jZGVmaW5lIERBVEFfUE9QX0RJU0NBUkQoeCkgXAotICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemVvZigqKHgpKSkKLSNkZWZpbmUgREFUQV9BTExPQyh0LHApIFwKLSAgICBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0LCBwKQotI2RlZmluZSBEQVRBX0xPT0tVUF9BVCh0LHAscG9zKSBcCi0gICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsdCxwLHBvcykKLQotI2RlZmluZSBNQVJLX1BVU0gobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgaSA9IGxhc3RtYXJrOyAvKiBjdHgtPmxhc3RtYXJrIG1heSBjaGFuZ2UgaWYgcmVhbGxvY2F0ZWQgKi8gXAotICAgICAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIHN0YXRlLT5tYXJrLCAoaSsxKSpzaXplb2Yodm9pZCopKTsgXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIE1BUktfUE9QKGxhc3RtYXJrKSBcCi0gICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDEpOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1BfS0VFUChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAwKTsgXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIE1BUktfUE9QX0RJU0NBUkQobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKikpOyBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBKVU1QX05PTkUgICAgICAgICAgICAwCi0jZGVmaW5lIEpVTVBfTUFYX1VOVElMXzEgICAgIDEKLSNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMiAgICAgMgotI2RlZmluZSBKVU1QX01BWF9VTlRJTF8zICAgICAzCi0jZGVmaW5lIEpVTVBfTUlOX1VOVElMXzEgICAgIDQKLSNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMiAgICAgNQotI2RlZmluZSBKVU1QX01JTl9VTlRJTF8zICAgICA2Ci0jZGVmaW5lIEpVTVBfUkVQRUFUICAgICAgICAgIDcKLSNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzEgICAgOAotI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMiAgICA5Ci0jZGVmaW5lIEpVTVBfTUlOX1JFUEVBVF9PTkUgIDEwCi0jZGVmaW5lIEpVTVBfQlJBTkNIICAgICAgICAgIDExCi0jZGVmaW5lIEpVTVBfQVNTRVJUICAgICAgICAgIDEyCi0jZGVmaW5lIEpVTVBfQVNTRVJUX05PVCAgICAgIDEzCi0KLSNkZWZpbmUgRE9fSlVNUChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4pIFwKLSAgICBEQVRBX0FMTE9DKFNSRV9NQVRDSF9DT05URVhULCBuZXh0Y3R4KTsgXAotICAgIG5leHRjdHgtPmxhc3RfY3R4X3BvcyA9IGN0eF9wb3M7IFwKLSAgICBuZXh0Y3R4LT5qdW1wID0ganVtcHZhbHVlOyBcCi0gICAgbmV4dGN0eC0+cGF0dGVybiA9IG5leHRwYXR0ZXJuOyBcCi0gICAgY3R4X3BvcyA9IGFsbG9jX3BvczsgXAotICAgIGN0eCA9IG5leHRjdHg7IFwKLSAgICBnb3RvIGVudHJhbmNlOyBcCi0gICAganVtcGxhYmVsOiBcCi0gICAgd2hpbGUgKDApIC8qIGdjYyBkb2Vzbid0IGxpa2UgbGFiZWxzIGF0IGVuZCBvZiBzY29wZXMgKi8gXAotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlfc3NpemVfdCBsYXN0X2N0eF9wb3M7Ci0gICAgUHlfc3NpemVfdCBqdW1wOwotICAgIGNoYXIqIHB0cjsKLSAgICBTUkVfQ09ERSogcGF0dGVybjsKLSAgICBQeV9zc2l6ZV90IGNvdW50OwotICAgIFB5X3NzaXplX3QgbGFzdG1hcms7Ci0gICAgUHlfc3NpemVfdCBsYXN0aW5kZXg7Ci0gICAgdW5pb24gewotICAgICAgICBTUkVfQ09ERSBjaHI7Ci0gICAgICAgIFNSRV9SRVBFQVQqIHJlcDsKLSAgICB9IHU7Ci19IFNSRV9NQVRDSF9DT05URVhUOwotCi0vKiBjaGVjayBpZiBzdHJpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4gIHJldHVybnMgPDAgZm9yCi0gICBlcnJvciwgMCBmb3IgZmFpbHVyZSwgYW5kIDEgZm9yIHN1Y2Nlc3MgKi8KLUxPQ0FMKFB5X3NzaXplX3QpCi1TUkVfTUFUQ0goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCi17Ci0gICAgY2hhciogZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgUHlfc3NpemVfdCBhbGxvY19wb3MsIGN0eF9wb3MgPSAtMTsKLSAgICBQeV9zc2l6ZV90IGksIHJldCA9IDA7Ci0gICAgUHlfc3NpemVfdCBqdW1wOwotICAgIHVuc2lnbmVkIGludCBzaWdjb3VudD0wOwotCi0gICAgU1JFX01BVENIX0NPTlRFWFQqIGN0eDsKLSAgICBTUkVfTUFUQ0hfQ09OVEVYVCogbmV4dGN0eDsKLQotICAgIFRSQUNFKCgifCVwfCVwfEVOVEVSXG4iLCBwYXR0ZXJuLCBzdGF0ZS0+cHRyKSk7Ci0KLSAgICBEQVRBX0FMTE9DKFNSRV9NQVRDSF9DT05URVhULCBjdHgpOwotICAgIGN0eC0+bGFzdF9jdHhfcG9zID0gLTE7Ci0gICAgY3R4LT5qdW1wID0gSlVNUF9OT05FOwotICAgIGN0eC0+cGF0dGVybiA9IHBhdHRlcm47Ci0gICAgY3R4X3BvcyA9IGFsbG9jX3BvczsKLQotZW50cmFuY2U6Ci0KLSAgICBjdHgtPnB0ciA9IChjaGFyICopc3RhdGUtPnB0cjsKLQotICAgIGlmIChjdHgtPnBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKLSAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KLSAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IC4uLiAqLwotICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzNdICYmIChlbmQgLSBjdHgtPnB0cikvc3RhdGUtPmNoYXJzaXplIDwgY3R4LT5wYXR0ZXJuWzNdKSB7Ci0gICAgICAgICAgICBUUkFDRSgoInJlamVjdCAoZ290ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgY2hhcnMsICIKLSAgICAgICAgICAgICAgICAgICAibmVlZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAoZW5kIC0gY3R4LT5wdHIpL3N0YXRlLT5jaGFyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzNdKSk7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgfQotICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdICsgMTsKLSAgICB9Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgICsrc2lnY291bnQ7Ci0gICAgICAgIGlmICgoMCA9PSAoc2lnY291bnQgJiAweGZmZikpICYmIFB5RXJyX0NoZWNrU2lnbmFscygpKQotICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTlRFUlJVUFRFRCk7Ci0KLSAgICAgICAgc3dpdGNoICgqY3R4LT5wYXR0ZXJuKyspIHsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NQVJLOgotICAgICAgICAgICAgLyogc2V0IG1hcmsgKi8KLSAgICAgICAgICAgIC8qIDxNQVJLPiA8Z2lkPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFSSyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBpZiAoaSAmIDEpCi0gICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGkvMiArIDE7Ci0gICAgICAgICAgICBpZiAoaSA+IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgIC8qIHN0YXRlLT5sYXN0bWFyayBpcyB0aGUgaGlnaGVzdCB2YWxpZCBpbmRleCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWFyayBhcnJheS4gIElmIGl0IGlzIGluY3JlYXNlZCBieSBtb3JlIHRoYW4gMSwKLSAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJ2ZW5pbmcgbWFya3MgbXVzdCBiZSBzZXQgdG8gTlVMTCB0byBzaWduYWwKLSAgICAgICAgICAgICAgICAgICB0aGF0IHRoZXNlIG1hcmtzIGhhdmUgbm90IGJlZW4gZW5jb3VudGVyZWQuICovCi0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBqID0gc3RhdGUtPmxhc3RtYXJrICsgMTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IGkpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrW2orK10gPSBOVUxMOwotICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+bWFya1tpXSA9IGN0eC0+cHRyOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgotICAgICAgICAgICAgLyogbWF0Y2ggbGl0ZXJhbCBzdHJpbmcgKi8KLSAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT5wYXR0ZXJuWzBdKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKLSAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIHRoYXQgaXMgbm90IGxpdGVyYWwgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAvKiA8Tk9UX0xJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Tk9UX0xJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgPT0gY3R4LT5wYXR0ZXJuWzBdKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9TVUNDRVNTOgotICAgICAgICAgICAgLyogZW5kIG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNVQ0NFU1NcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FUOgotICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gcG9zaXRpb24gKi8KLSAgICAgICAgICAgIC8qIDxBVD4gPGNvZGU+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKCFTUkVfQVQoc3RhdGUsIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBjYXRlZ29yeSAqLwotICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfENBVEVHT1JZICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIXNyZV9jYXRlZ29yeShjdHgtPnBhdHRlcm5bMF0sIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BTlk6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyAoZXhjZXB0IGEgbmV3bGluZSkgKi8KLSAgICAgICAgICAgIC8qIDxBTlk+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBTllcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IFNSRV9JU19MSU5FQlJFQUsoU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKLSAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nICovCi0gICAgICAgICAgICAvKiA8QU5ZX0FMTD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWV9BTExcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9JTjoKLSAgICAgICAgICAgIC8qIG1hdGNoIHNldCBtZW1iZXIgKG9yIG5vbl9tZW1iZXIpICovCi0gICAgICAgICAgICAvKiA8SU4+IDxza2lwPiA8c2V0PiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5cbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFTUkVfQ0hBUlNFVChjdHgtPnBhdHRlcm4gKyAxLCBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMX0lHTk9SRSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkgIT0gc3RhdGUtPmxvd2VyKCpjdHgtPnBhdHRlcm4pKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSA9PSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0lOX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOX0lHTk9SRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZAotICAgICAgICAgICAgICAgIHx8ICFTUkVfQ0hBUlNFVChjdHgtPnBhdHRlcm4rMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNSRV9DT0RFKXN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfSlVNUDoKLSAgICAgICAgY2FzZSBTUkVfT1BfSU5GTzoKLSAgICAgICAgICAgIC8qIGp1bXAgZm9yd2FyZCAqLwotICAgICAgICAgICAgLyogPEpVTVA+IDxvZmZzZXQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0JSQU5DSDoKLSAgICAgICAgICAgIC8qIGFsdGVybmF0aW9uICovCi0gICAgICAgICAgICAvKiA8QlJBTkNIPiA8MD1za2lwPiBjb2RlIDxKVU1QPiAuLi4gPE5VTEw+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxCUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgTUFSS19QVVNIKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgZm9yICg7IGN0eC0+cGF0dGVyblswXTsgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXSkgewotICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0xJVEVSQUwgJiYKLSAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IGN0eC0+cGF0dGVyblsyXSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0lOICYmCi0gICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICFTUkVfQ0hBUlNFVChjdHgtPnBhdHRlcm4gKyAzLCAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9CUkFOQ0gsIGp1bXBfYnJhbmNoLCBjdHgtPnBhdHRlcm4rMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0tFRVAoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWF4aW1pemluZyByZWdleHApICovCi0KLSAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcwotICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQotICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAotICAgICAgICAgICAgICAgdXNlIHRoZSBNQVhfUkVQRUFUIG9wZXJhdG9yICovCi0KLSAgICAgICAgICAgIC8qIDxSRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KLQotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOwotCi0gICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IChlbmQgLSBjdHgtPnB0cikgLyBzdGF0ZS0+Y2hhcnNpemUpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7IC8qIGNhbm5vdCBtYXRjaCAqLwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIHJldCA9IFNSRV9DT1VOVChzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIGN0eC0+cGF0dGVyblsyXSk7Ci0gICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+Y291bnQ7Ci0KLSAgICAgICAgICAgIC8qIHdoZW4gd2UgYXJyaXZlIGhlcmUsIGNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YKLSAgICAgICAgICAgICAgIG1hdGNoZXMsIGFuZCBjdHgtPnB0ciBwb2ludHMgdG8gdGhlIHRhaWwgb2YgdGhlIHRhcmdldAotICAgICAgICAgICAgICAgc3RyaW5nLiAgY2hlY2sgaWYgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gbWF0Y2hlcywKLSAgICAgICAgICAgICAgIGFuZCBiYWNrdHJhY2sgaWYgbm90LiAqLwotCi0gICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotCi0gICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX0xJVEVSQUwpIHsKLSAgICAgICAgICAgICAgICAvKiB0YWlsIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbC4gc2tpcCBwb3NpdGlvbnMgd2hlcmUKLSAgICAgICAgICAgICAgICAgICB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBjYW5ub3QgcG9zc2libHkgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUuY2hyID0gY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXSsxXTsKLSAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IGN0eC0+dS5jaHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciAtPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVF9PTkVfMSwganVtcF9yZXBlYXRfb25lXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgLT0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8yLCBqdW1wX3JlcGVhdF9vbmVfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciAtPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX01JTl9SRVBFQVRfT05FOgotICAgICAgICAgICAgLyogbWF0Y2ggcmVwZWF0ZWQgc2VxdWVuY2UgKG1pbmltaXppbmcgcmVnZXhwKSAqLwotCi0gICAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIG9ubHkgd29ya3MgaWYgdGhlIHJlcGVhdGVkIGl0ZW0gaXMKLSAgICAgICAgICAgICAgIGV4YWN0bHkgb25lIGNoYXJhY3RlciB3aWRlLCBhbmQgd2UncmUgbm90IGFscmVhZHkKLSAgICAgICAgICAgICAgIGNvbGxlY3RpbmcgYmFja3RyYWNraW5nIHBvaW50cy4gIGZvciBvdGhlciBjYXNlcywKLSAgICAgICAgICAgICAgIHVzZSB0aGUgTUlOX1JFUEVBVCBvcGVyYXRvciAqLwotCi0gICAgICAgICAgICAvKiA8TUlOX1JFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNSU5fUkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOwotCi0gICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IChlbmQgLSBjdHgtPnB0cikgLyBzdGF0ZS0+Y2hhcnNpemUpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7IC8qIGNhbm5vdCBtYXRjaCAqLwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gMCkKLSAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gMDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIGNvdW50IHVzaW5nIHBhdHRlcm4gbWluIGFzIHRoZSBtYXhpbXVtICovCi0gICAgICAgICAgICAgICAgcmV0ID0gU1JFX0NPVU5UKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzFdKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKLSAgICAgICAgICAgICAgICAgICAgLyogZGlkbid0IG1hdGNoIG1pbmltdW0gbnVtYmVyIG9mIHRpbWVzICovCi0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcGFzdCBtaW5pbXVtIG1hdGNoZXMgb2YgcmVwZWF0ICovCi0gICAgICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKLSAgICAgICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemUgKiBjdHgtPmNvdW50OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotICAgICAgICAgICAgICAgIHdoaWxlICgoUHlfc3NpemVfdCljdHgtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVAotICAgICAgICAgICAgICAgICAgICAgICB8fCBjdHgtPmNvdW50IDw9IChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fUkVQRUFUX09ORSxqdW1wX21pbl9yZXBlYXRfb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gU1JFX0NPVU5UKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgMSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudCsrOwotICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUOgotICAgICAgICAgICAgLyogY3JlYXRlIHJlcGVhdCBjb250ZXh0LiAgYWxsIHRoZSBoYXJkIHdvcmsgaXMgZG9uZQotICAgICAgICAgICAgICAgYnkgdGhlIFVOVElMIG9wZXJhdG9yIChNQVhfVU5USUwsIE1JTl9VTlRJTCkgKi8KLSAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8VU5USUw+IHRhaWwgKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFUEVBVCAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOwotCi0gICAgICAgICAgICAvKiBpbnN0YWxsIG5ldyByZXBlYXQgY29udGV4dCAqLwotICAgICAgICAgICAgY3R4LT51LnJlcCA9IChTUkVfUkVQRUFUKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZigqY3R4LT51LnJlcCkpOwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gLTE7Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuID0gY3R4LT5wYXR0ZXJuOwotICAgICAgICAgICAgY3R4LT51LnJlcC0+cHJldiA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IE5VTEw7Ci0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKLQotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVCwganVtcF9yZXBlYXQsIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7Ci0gICAgICAgICAgICBQeU9iamVjdF9GUkVFKGN0eC0+dS5yZXApOwotCi0gICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NQVhfVU5USUw6Ci0gICAgICAgICAgICAvKiBtYXhpbWl6aW5nIHJlcGVhdCAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNQVhfVU5USUw+IHRhaWwgKi8KLQotICAgICAgICAgICAgLyogRklYTUU6IHdlIHByb2JhYmx5IG5lZWQgdG8gZGVhbCB3aXRoIHplcm8td2lkdGgKLSAgICAgICAgICAgICAgIG1hdGNoZXMgaW4gaGVyZS4uLiAqLwotCi0gICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKLSAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX1NUQVRFKTsKLQotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotCi0gICAgICAgICAgICBjdHgtPmNvdW50ID0gY3R4LT51LnJlcC0+Y291bnQrMTsKLQotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFYX1VOVElMICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5jb3VudCkpOwotCi0gICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzFdKSB7Ci0gICAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBtYXRjaGVzICovCi0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMSwganVtcF9tYXhfdW50aWxfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gfHwKLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdID09IFNSRV9NQVhSRVBFQVQpICYmCi0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciAhPSBjdHgtPnUucmVwLT5sYXN0X3B0cikgewotICAgICAgICAgICAgICAgIC8qIHdlIG1heSBoYXZlIGVub3VnaCBtYXRjaGVzLCBidXQgaWYgd2UgY2FuCi0gICAgICAgICAgICAgICAgICAgbWF0Y2ggYW5vdGhlciBpdGVtLCBkbyBzbyAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0gICAgICAgICAgICAgICAgTUFSS19QVVNIKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgICAgIC8qIHplcm8td2lkdGggbWF0Y2ggcHJvdGVjdGlvbiAqLwotICAgICAgICAgICAgICAgIERBVEFfUFVTSCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzIsIGp1bXBfbWF4X3VudGlsXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgICAgIERBVEFfUE9QKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE1BUktfUE9QKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIGNhbm5vdCBtYXRjaCBtb3JlIHJlcGVhdGVkIGl0ZW1zIGhlcmUuICBtYWtlIHN1cmUgdGhlCi0gICAgICAgICAgICAgICB0YWlsIG1hdGNoZXMgKi8KLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8zLCBqdW1wX21heF91bnRpbF8zLCBjdHgtPnBhdHRlcm4pOwotICAgICAgICAgICAgUkVUVVJOX09OX1NVQ0NFU1MocmV0KTsKLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1VOVElMOgotICAgICAgICAgICAgLyogbWluaW1pemluZyByZXBlYXQgKi8KLSAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8TUlOX1VOVElMPiB0YWlsICovCi0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNSU5fVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlcFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50LCBjdHgtPnUucmVwLT5wYXR0ZXJuKSk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKLSAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8xLCBqdW1wX21pbl91bnRpbF8xLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0KLSAgICAgICAgICAgIC8qIHNlZSBpZiB0aGUgdGFpbCBtYXRjaGVzICovCi0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMiwganVtcF9taW5fdW50aWxfMiwgY3R4LT5wYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLQotICAgICAgICAgICAgaWYgKChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdCi0gICAgICAgICAgICAgICAgJiYgY3R4LT51LnJlcC0+cGF0dGVyblsyXSAhPSBTUkVfTUFYUkVQRUFUKSB8fAotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPT0gY3R4LT51LnJlcC0+bGFzdF9wdHIpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgIC8qIHplcm8td2lkdGggbWF0Y2ggcHJvdGVjdGlvbiAqLwotICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IHN0YXRlLT5wdHI7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzMsanVtcF9taW5fdW50aWxfMywKLSAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgIERBVEFfUE9QKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGOgotICAgICAgICAgICAgLyogbWF0Y2ggYmFja3JlZmVyZW5jZSAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUYgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFyKiBwID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIGUgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSAhPSBTUkVfQ0hBUkdFVChzdGF0ZSwgcCwgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgotICAgICAgICAgICAgLyogbWF0Y2ggYmFja3JlZmVyZW5jZSAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfSUdOT1JFICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOwotICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciogcCA9IChjaGFyKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOwotICAgICAgICAgICAgICAgICAgICBjaGFyKiBlID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKQotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgcCwgMCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0VYSVNUUzoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0VYSVNUUyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIC8qIDxHUk9VUFJFRl9FWElTVFM+IDxncm91cD4gPHNraXA+IGNvZGV5ZXMgPEpVTVA+IGNvZGVubyAuLi4gKi8KLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOwotICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQVNTRVJUOgotICAgICAgICAgICAgLyogYXNzZXJ0IHN1YnBhdHRlcm4gKi8KLSAgICAgICAgICAgIC8qIDxBU1NFUlQ+IDxza2lwPiA8YmFjaz4gPHBhdHRlcm4+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBU1NFUlQgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHIgLSBzdGF0ZS0+Y2hhcnNpemUgKiBjdHgtPnBhdHRlcm5bMV07Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPnB0ciA8IHN0YXRlLT5iZWdpbm5pbmcpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfQVNTRVJULCBqdW1wX2Fzc2VydCwgY3R4LT5wYXR0ZXJuKzIpOwotICAgICAgICAgICAgUkVUVVJOX09OX0ZBSUxVUkUocmV0KTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlRfTk9UOgotICAgICAgICAgICAgLyogYXNzZXJ0IG5vdCBzdWJwYXR0ZXJuICovCi0gICAgICAgICAgICAvKiA8QVNTRVJUX05PVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVF9OT1QgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHIgLSBzdGF0ZS0+Y2hhcnNpemUgKiBjdHgtPnBhdHRlcm5bMV07Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPnB0ciA+PSBzdGF0ZS0+YmVnaW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX0FTU0VSVF9OT1QsIGp1bXBfYXNzZXJ0X25vdCwgY3R4LT5wYXR0ZXJuKzIpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgotICAgICAgICAgICAgLyogaW1tZWRpYXRlIGZhaWx1cmUgKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEZBSUxVUkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxVTktOT1dOICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblstMV0pKTsKLSAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfSUxMRUdBTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLWV4aXQ6Ci0gICAgY3R4X3BvcyA9IGN0eC0+bGFzdF9jdHhfcG9zOwotICAgIGp1bXAgPSBjdHgtPmp1bXA7Ci0gICAgREFUQV9QT1BfRElTQ0FSRChjdHgpOwotICAgIGlmIChjdHhfcG9zID09IC0xKQotICAgICAgICByZXR1cm4gcmV0OwotICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotCi0gICAgc3dpdGNoIChqdW1wKSB7Ci0gICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMjsKLSAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8zOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8zOwotICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzI6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzI7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMzoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMzsKLSAgICAgICAgY2FzZSBKVU1QX0JSQU5DSDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfYnJhbmNoOwotICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzE6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzE7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMTsKLSAgICAgICAgY2FzZSBKVU1QX1JFUEVBVDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0OwotICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8xOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzE7Ci0gICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzI6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMjsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9SRVBFQVRfT05FOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fUkVQRUFUX09ORVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl9yZXBlYXRfb25lOwotICAgICAgICBjYXNlIEpVTVBfQVNTRVJUOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnQ7Ci0gICAgICAgIGNhc2UgSlVNUF9BU1NFUlRfTk9UOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRfTk9UXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0X25vdDsKLSAgICAgICAgY2FzZSBKVU1QX05PTkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVRVUk4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCByZXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7IC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwotfQotCi1MT0NBTChQeV9zc2l6ZV90KQotU1JFX1NFQVJDSChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICBjaGFyKiBwdHIgPSAoY2hhciopc3RhdGUtPnN0YXJ0OwotICAgIGNoYXIqIGVuZCA9IChjaGFyKilzdGF0ZS0+ZW5kOwotICAgIFB5X3NzaXplX3Qgc3RhdHVzID0gMDsKLSAgICBQeV9zc2l6ZV90IHByZWZpeF9sZW4gPSAwOwotICAgIFB5X3NzaXplX3QgcHJlZml4X3NraXAgPSAwOwotICAgIFNSRV9DT0RFKiBwcmVmaXggPSBOVUxMOwotICAgIFNSRV9DT0RFKiBjaGFyc2V0ID0gTlVMTDsKLSAgICBTUkVfQ09ERSogb3ZlcmxhcCA9IE5VTEw7Ci0gICAgaW50IGZsYWdzID0gMDsKLQotICAgIGlmIChwYXR0ZXJuWzBdID09IFNSRV9PUF9JTkZPKSB7Ci0gICAgICAgIC8qIG9wdGltaXphdGlvbiBpbmZvIGJsb2NrICovCi0gICAgICAgIC8qIDxJTkZPPiA8MT1za2lwPiA8Mj1mbGFncz4gPDM9bWluPiA8ND1tYXg+IDw1PXByZWZpeCBpbmZvPiAgKi8KLQotICAgICAgICBmbGFncyA9IHBhdHRlcm5bMl07Ci0KLSAgICAgICAgaWYgKHBhdHRlcm5bM10gPiAxKSB7Ci0gICAgICAgICAgICAvKiBhZGp1c3QgZW5kIHBvaW50IChidXQgbWFrZSBzdXJlIHdlIGxlYXZlIGF0IGxlYXN0IG9uZQotICAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIHRoZXJlLCBzbyBsaXRlcmFsIHNlYXJjaCB3aWxsIHdvcmspICovCi0gICAgICAgICAgICBlbmQgLT0gKHBhdHRlcm5bM10tMSkgKiBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBpZiAoZW5kIDw9IHB0cikKLSAgICAgICAgICAgICAgICBlbmQgPSBwdHIgKyBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19QUkVGSVgpIHsKLSAgICAgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXggKi8KLSAgICAgICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCi0gICAgICAgICAgICBwcmVmaXhfbGVuID0gcGF0dGVybls1XTsKLSAgICAgICAgICAgIHByZWZpeF9za2lwID0gcGF0dGVybls2XTsKLSAgICAgICAgICAgIHByZWZpeCA9IHBhdHRlcm4gKyA3OwotICAgICAgICAgICAgb3ZlcmxhcCA9IHByZWZpeCArIHByZWZpeF9sZW4gLSAxOwotICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgU1JFX0lORk9fQ0hBUlNFVCkKLSAgICAgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLwotICAgICAgICAgICAgLyogPGNoYXJzZXQ+ICovCi0gICAgICAgICAgICBjaGFyc2V0ID0gcGF0dGVybiArIDU7Ci0KLSAgICAgICAgcGF0dGVybiArPSAxICsgcGF0dGVyblsxXTsKLSAgICB9Ci0KLSAgICBUUkFDRSgoInByZWZpeCA9ICVwICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKLSAgICAgICAgICAgcHJlZml4LCBwcmVmaXhfbGVuLCBwcmVmaXhfc2tpcCkpOwotICAgIFRSQUNFKCgiY2hhcnNldCA9ICVwXG4iLCBjaGFyc2V0KSk7Ci0KLSNpZiBkZWZpbmVkKFVTRV9GQVNUX1NFQVJDSCkKLSAgICBpZiAocHJlZml4X2xlbiA+IDEpIHsKLSAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeC4gIHVzZSB0aGUgb3ZlcmxhcAotICAgICAgICAgICB0YWJsZSB0byBza2lwIGZvcndhcmQgYXMgZmFzdCBhcyB3ZSBwb3NzaWJseSBjYW4gKi8KLSAgICAgICAgUHlfc3NpemVfdCBpID0gMDsKLSAgICAgICAgZW5kID0gKGNoYXIgKilzdGF0ZS0+ZW5kOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgIT0gcHJlZml4W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gb3ZlcmxhcFtpXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoKytpID09IHByZWZpeF9sZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvdW5kIGEgcG90ZW50aWFsIG1hdGNoICovCi0gICAgICAgICAgICAgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggU0NBTlxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHIgLSAocHJlZml4X2xlbiAtIDEpICogc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0ciAtIChwcmVmaXhfbGVuIC0gcHJlZml4X3NraXAgLSAxKSAqIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX0xJVEVSQUwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHdlIGdvdCBhbGwgb2YgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybiArIDIqcHJlZml4X3NraXApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBidXQgbm8gY2lnYXIgLS0gdHJ5IGFnYWluICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gb3ZlcmxhcFtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHBhdHRlcm5bMF0gPT0gU1JFX09QX0xJVEVSQUwpIHsKLSAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGxpdGVyYWwgY2hhcmFjdGVyLiAgdGhpcyBpcyB1c2VkCi0gICAgICAgICAgIGZvciBzaG9ydCBwcmVmaXhlcywgYW5kIGlmIGZhc3Qgc2VhcmNoIGlzIGRpc2FibGVkICovCi0gICAgICAgIFNSRV9DT0RFIGNociA9IHBhdHRlcm5bMV07Ci0gICAgICAgIGVuZCA9IChjaGFyKilzdGF0ZS0+ZW5kOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgIT0gY2hyKQotICAgICAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBMSVRFUkFMXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLwotICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuICsgMik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNoYXJzZXQpIHsKLSAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCi0gICAgICAgIGVuZCA9IChjaGFyKilzdGF0ZS0+ZW5kOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkVfQ0hBUlNFVChjaGFyc2V0LCBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIENIQVJTRVRcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0cjsKLSAgICAgICAgICAgIHN0YXR1cyA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLwotICAgICAgICB3aGlsZSAocHRyIDw9IGVuZCkgewotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHIgPSBwdHI7Ci0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotI2lmICFkZWZpbmVkKFNSRV9SRUNVUlNJVkUpCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzQKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDQKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3M0XyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGZhY3RvcmllcyBhbmQgZGVzdHJ1Y3RvcnMgKi8KIAogLyogc2VlIHNyZS5oIGZvciBvYmplY3QgZGVjbGFyYXRpb25zICovCi1zdGF0aWMgUHlPYmplY3QqcGF0dGVybl9uZXdfbWF0Y2goUGF0dGVybk9iamVjdCosIFNSRV9TVEFURSosIGludCk7CitzdGF0aWMgUHlPYmplY3QqcGF0dGVybl9uZXdfbWF0Y2goUGF0dGVybk9iamVjdCosIFNSRV9TVEFURSosIFB5X3NzaXplX3QpOwogc3RhdGljIFB5T2JqZWN0KnBhdHRlcm5fc2Nhbm5lcihQYXR0ZXJuT2JqZWN0KiwgUHlPYmplY3QqLCBQeU9iamVjdCoga3cpOwogCi1zdGF0aWMgaW50Ci1zcmVfbGl0ZXJhbF90ZW1wbGF0ZShpbnQgY2hhcnNpemUsIGNoYXIqIHB0ciwgUHlfc3NpemVfdCBsZW4pCi17Ci0gICAgLyogY2hlY2sgaWYgZ2l2ZW4gc3RyaW5nIGlzIGEgbGl0ZXJhbCB0ZW1wbGF0ZSAoaS5lLiBubyBlc2NhcGVzKSAqLwotICAgIHN0cnVjdCB7Ci0gICAgICAgIGludCBjaGFyc2l6ZTsKLSAgICB9IHN0YXRlID0gewotICAgICAgICBjaGFyc2l6ZQotICAgIH07Ci0gICAgd2hpbGUgKGxlbi0tID4gMCkgewotICAgICAgICBpZiAoU1JFX0NIQVJHRVQoKCZzdGF0ZSksIHB0ciwgMCkgPT0gJ1xcJykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBwdHIgKz0gY2hhcnNpemU7Ci0gICAgfQotICAgIHJldHVybiAxOwotfQotCiBzdGF0aWMgUHlPYmplY3QgKgogc3JlX2NvZGVzaXplKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewpAQCAtMTY2NSw3MiArMzA4LDQxIEBACiAKIHN0YXRpYyB2b2lkKgogZ2V0c3RyaW5nKFB5T2JqZWN0KiBzdHJpbmcsIFB5X3NzaXplX3QqIHBfbGVuZ3RoLAotICAgICAgICAgIGludCogcF9sb2dpY2FsX2NoYXJzaXplLCBpbnQqIHBfY2hhcnNpemUsCisgICAgICAgICAgaW50KiBwX2lzYnl0ZXMsIGludCogcF9jaGFyc2l6ZSwKICAgICAgICAgICBQeV9idWZmZXIgKnZpZXcpCiB7CiAgICAgLyogZ2l2ZW4gYSBweXRob24gb2JqZWN0LCByZXR1cm4gYSBkYXRhIHBvaW50ZXIsIGEgbGVuZ3RoIChpbgogICAgICAgIGNoYXJhY3RlcnMpLCBhbmQgYSBjaGFyYWN0ZXIgc2l6ZS4gIHJldHVybiBOVUxMIGlmIHRoZSBvYmplY3QKICAgICAgICBpcyBub3QgYSBzdHJpbmcgKG9yIG5vdCBjb21wYXRpYmxlKSAqLwogCi0gICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVyOwotICAgIFB5X3NzaXplX3Qgc2l6ZSwgYnl0ZXM7Ci0gICAgaW50IGNoYXJzaXplOwotICAgIHZvaWQqIHB0cjsKLQogICAgIC8qIFVuaWNvZGUgb2JqZWN0cyBkbyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSS4gU28sIGdldCB0aGUgZGF0YQogICAgICAgIGRpcmVjdGx5IGluc3RlYWQuICovCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhzdHJpbmcpKSB7CiAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyaW5nKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBwdHIgPSBQeVVuaWNvZGVfREFUQShzdHJpbmcpOwogICAgICAgICAqcF9sZW5ndGggPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpOwogICAgICAgICAqcF9jaGFyc2l6ZSA9IFB5VW5pY29kZV9LSU5EKHN0cmluZyk7Ci0gICAgICAgICpwX2xvZ2ljYWxfY2hhcnNpemUgPSA0OwotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICAqcF9pc2J5dGVzID0gMDsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EQVRBKHN0cmluZyk7CiAgICAgfQogCiAgICAgLyogZ2V0IHBvaW50ZXIgdG8gYnl0ZSBzdHJpbmcgYnVmZmVyICovCi0gICAgdmlldy0+bGVuID0gLTE7Ci0gICAgYnVmZmVyID0gUHlfVFlQRShzdHJpbmcpLT50cF9hc19idWZmZXI7Ci0gICAgaWYgKCFidWZmZXIgfHwgIWJ1ZmZlci0+YmZfZ2V0YnVmZmVyIHx8Ci0gICAgICAgICgqYnVmZmVyLT5iZl9nZXRidWZmZXIpKHN0cmluZywgdmlldywgUHlCVUZfU0lNUExFKSA8IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzdHJpbmcgb3IgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN0cmluZywgdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzdHJpbmcgb3IgYnVmZmVyIik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIC8qIGRldGVybWluZSBidWZmZXIgc2l6ZSAqLwotICAgIGJ5dGVzID0gdmlldy0+bGVuOwotICAgIHB0ciA9IHZpZXctPmJ1ZjsKKyAgICAqcF9sZW5ndGggPSB2aWV3LT5sZW47CisgICAgKnBfY2hhcnNpemUgPSAxOworICAgICpwX2lzYnl0ZXMgPSAxOwogCi0gICAgaWYgKGJ5dGVzIDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyIGhhcyBuZWdhdGl2ZSBzaXplIik7Ci0gICAgICAgIGdvdG8gZXJyOworICAgIGlmICh2aWV3LT5idWYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkJ1ZmZlciBpcyBOVUxMIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7CisgICAgICAgIHZpZXctPmJ1ZiA9IE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQotICAgIC8qIGRldGVybWluZSBjaGFyYWN0ZXIgc2l6ZSAqLwotICAgIHNpemUgPSBQeU9iamVjdF9TaXplKHN0cmluZyk7Ci0KLSAgICBpZiAoUHlCeXRlc19DaGVjayhzdHJpbmcpIHx8IGJ5dGVzID09IHNpemUpCi0gICAgICAgIGNoYXJzaXplID0gMTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ1ZmZlciBzaXplIG1pc21hdGNoIik7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgIH0KLQotICAgICpwX2xlbmd0aCA9IHNpemU7Ci0gICAgKnBfY2hhcnNpemUgPSBjaGFyc2l6ZTsKLSAgICAqcF9sb2dpY2FsX2NoYXJzaXplID0gY2hhcnNpemU7Ci0KLSAgICBpZiAocHRyID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgaXMgTlVMTCIpOwotICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgfQotICAgIHJldHVybiBwdHI7Ci0gIGVycjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKHZpZXcpOwotICAgIHZpZXctPmJ1ZiA9IE5VTEw7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHZpZXctPmJ1ZjsKIH0KIAogTE9DQUwoUHlPYmplY3QqKQpAQCAtMTc0MCw3ICszNTIsNyBAQAogICAgIC8qIHByZXBhcmUgc3RhdGUgb2JqZWN0ICovCiAKICAgICBQeV9zc2l6ZV90IGxlbmd0aDsKLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZSwgY2hhcnNpemU7CisgICAgaW50IGlzYnl0ZXMsIGNoYXJzaXplOwogICAgIHZvaWQqIHB0cjsKIAogICAgIG1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKFNSRV9TVEFURSkpOwpAQCAtMTc0OSwxNiArMzYxLDE2IEBACiAgICAgc3RhdGUtPmxhc3RpbmRleCA9IC0xOwogCiAgICAgc3RhdGUtPmJ1ZmZlci5idWYgPSBOVUxMOwotICAgIHB0ciA9IGdldHN0cmluZyhzdHJpbmcsICZsZW5ndGgsICZsb2dpY2FsX2NoYXJzaXplLCAmY2hhcnNpemUsICZzdGF0ZS0+YnVmZmVyKTsKKyAgICBwdHIgPSBnZXRzdHJpbmcoc3RyaW5nLCAmbGVuZ3RoLCAmaXNieXRlcywgJmNoYXJzaXplLCAmc3RhdGUtPmJ1ZmZlcik7CiAgICAgaWYgKCFwdHIpCiAgICAgICAgIGdvdG8gZXJyOwogCi0gICAgaWYgKGxvZ2ljYWxfY2hhcnNpemUgPT0gMSAmJiBwYXR0ZXJuLT5sb2dpY2FsX2NoYXJzaXplID4gMSkgeworICAgIGlmIChpc2J5dGVzICYmIHBhdHRlcm4tPmlzYnl0ZXMgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBhIHN0cmluZyBwYXR0ZXJuIG9uIGEgYnl0ZXMtbGlrZSBvYmplY3QiKTsKICAgICAgICAgZ290byBlcnI7CiAgICAgfQotICAgIGlmIChsb2dpY2FsX2NoYXJzaXplID4gMSAmJiBwYXR0ZXJuLT5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKKyAgICBpZiAoIWlzYnl0ZXMgJiYgcGF0dGVybi0+aXNieXRlcyA+IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCB1c2UgYSBieXRlcyBwYXR0ZXJuIG9uIGEgc3RyaW5nLWxpa2Ugb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyOwpAQCAtMTc3NSw3ICszODcsNyBAQAogICAgIGVsc2UgaWYgKGVuZCA+IGxlbmd0aCkKICAgICAgICAgZW5kID0gbGVuZ3RoOwogCi0gICAgc3RhdGUtPmxvZ2ljYWxfY2hhcnNpemUgPSBsb2dpY2FsX2NoYXJzaXplOworICAgIHN0YXRlLT5pc2J5dGVzID0gaXNieXRlczsKICAgICBzdGF0ZS0+Y2hhcnNpemUgPSBjaGFyc2l6ZTsKIAogICAgIHN0YXRlLT5iZWdpbm5pbmcgPSBwdHI7CkBAIC0xODE2LDYgKzQyOCwyNCBAQAogICAgICgoKGNoYXIqKShtZW1iZXIpIC0gKGNoYXIqKShzdGF0ZSktPmJlZ2lubmluZykgLyAoc3RhdGUpLT5jaGFyc2l6ZSkKIAogTE9DQUwoUHlPYmplY3QqKQorZ2V0c2xpY2UoaW50IGlzYnl0ZXMsIGNvbnN0IHZvaWQgKnB0ciwKKyAgICAgICAgIFB5T2JqZWN0KiBzdHJpbmcsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQoreworICAgIGlmIChpc2J5dGVzKSB7CisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3Qoc3RyaW5nKSAmJgorICAgICAgICAgICAgc3RhcnQgPT0gMCAmJiBlbmQgPT0gUHlCeXRlc19HRVRfU0laRShzdHJpbmcpKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoc3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoCisgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilwdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9TdWJzdHJpbmcoc3RyaW5nLCBzdGFydCwgZW5kKTsKKyAgICB9Cit9CisKK0xPQ0FMKFB5T2JqZWN0KikKIHN0YXRlX2dldHNsaWNlKFNSRV9TVEFURSogc3RhdGUsIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0KiBzdHJpbmcsIGludCBlbXB0eSkKIHsKICAgICBQeV9zc2l6ZV90IGksIGo7CkBAIC0xODM1LDExICs0NjUsMTEgQEAKICAgICAgICAgaiA9IFNUQVRFX09GRlNFVChzdGF0ZSwgc3RhdGUtPm1hcmtbaW5kZXgrMV0pOwogICAgIH0KIAotICAgIHJldHVybiBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgaSwgaik7CisgICAgcmV0dXJuIGdldHNsaWNlKHN0YXRlLT5pc2J5dGVzLCBzdGF0ZS0+YmVnaW5uaW5nLCBzdHJpbmcsIGksIGopOwogfQogCiBzdGF0aWMgdm9pZAotcGF0dGVybl9lcnJvcihpbnQgc3RhdHVzKQorcGF0dGVybl9lcnJvcihQeV9zc2l6ZV90IHN0YXR1cykKIHsKICAgICBzd2l0Y2ggKHN0YXR1cykgewogICAgIGNhc2UgU1JFX0VSUk9SX1JFQ1VSU0lPTl9MSU1JVDoKQEAgLTE4NjgsMTUgKzQ5OCwzNSBAQAogewogICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKLSAgICBpZiAoc2VsZi0+dmlldy5idWYpCi0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPnZpZXcpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+cGF0dGVybik7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5ncm91cGluZGV4KTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmluZGV4Z3JvdXApOwogICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgorTE9DQUwoUHlfc3NpemVfdCkKK3NyZV9tYXRjaChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybiwgaW50IG1hdGNoX2FsbCkKK3sKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDEpCisgICAgICAgIHJldHVybiBzcmVfdWNzMV9tYXRjaChzdGF0ZSwgcGF0dGVybiwgbWF0Y2hfYWxsKTsKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDIpCisgICAgICAgIHJldHVybiBzcmVfdWNzMl9tYXRjaChzdGF0ZSwgcGF0dGVybiwgbWF0Y2hfYWxsKTsKKyAgICBhc3NlcnQoc3RhdGUtPmNoYXJzaXplID09IDQpOworICAgIHJldHVybiBzcmVfdWNzNF9tYXRjaChzdGF0ZSwgcGF0dGVybiwgbWF0Y2hfYWxsKTsKK30KKworTE9DQUwoUHlfc3NpemVfdCkKK3NyZV9zZWFyY2goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgaWYgKHN0YXRlLT5jaGFyc2l6ZSA9PSAxKQorICAgICAgICByZXR1cm4gc3JlX3VjczFfc2VhcmNoKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDIpCisgICAgICAgIHJldHVybiBzcmVfdWNzMl9zZWFyY2goc3RhdGUsIHBhdHRlcm4pOworICAgIGFzc2VydChzdGF0ZS0+Y2hhcnNpemUgPT0gNCk7CisgICAgcmV0dXJuIHNyZV91Y3M0X3NlYXJjaChzdGF0ZSwgcGF0dGVybik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBmaXhfc3RyaW5nX3BhcmFtKFB5T2JqZWN0ICpzdHJpbmcsIFB5T2JqZWN0ICpzdHJpbmcyLCBjb25zdCBjaGFyICpvbGRuYW1lKQogewogICAgIGlmIChzdHJpbmcyICE9IE5VTEwpIHsKQEAgLTE5MDAsMTcgKzU1MCw1NCBAQAogICAgIHJldHVybiBzdHJpbmc7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitwYXR0ZXJuX21hdGNoKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RyaW5nIiwgInBvcyIsICJlbmRwb3MiLCAicGF0dGVybiIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZHBvcyA9IFBZX1NTSVpFX1RfTUFYOworICAgIFB5T2JqZWN0ICpwYXR0ZXJuID0gTlVMTDsKKyAgICBTUkVfU1RBVEUgc3RhdGU7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ8T25uJE86bWF0Y2giLCBfa2V5d29yZHMsCisgICAgICAgICZzdHJpbmcsICZwb3MsICZlbmRwb3MsICZwYXR0ZXJuKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RyaW5nID0gZml4X3N0cmluZ19wYXJhbShzdHJpbmcsIHBhdHRlcm4sICJwYXR0ZXJuIik7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0cmluZyA9IHN0YXRlX2luaXQoJnN0YXRlLCAoUGF0dGVybk9iamVjdCAqKXNlbGYsIHN0cmluZywgcG9zLCBlbmRwb3MpOworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OworCisgICAgVFJBQ0UoKCJ8JXB8JXB8TUFUQ0hcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CisKKyAgICBzdGF0dXMgPSBzcmVfbWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIDApOworCisgICAgVFJBQ0UoKCJ8JXB8JXB8RU5EXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN0YXRlX2ZpbmkoJnN0YXRlKTsKKworICAgIHJldHVybiAoUHlPYmplY3QgKilwYXR0ZXJuX25ld19tYXRjaChzZWxmLCAmc3RhdGUsIHN0YXR1cyk7Cit9CisKIHN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fbWF0Y2goUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKK3BhdHRlcm5fZnVsbG1hdGNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBQeU9iamVjdCAqc3RyaW5nID0gTlVMTCwgKnN0cmluZzIgPSBOVUxMOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CiAgICAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyAic3RyaW5nIiwgInBvcyIsICJlbmRwb3MiLCAicGF0dGVybiIsIE5VTEwgfTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPbm4kTzptYXRjaCIsIGt3bGlzdCwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPbm4kTzpmdWxsbWF0Y2giLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmluZywgJnN0YXJ0LCAmZW5kLCAmc3RyaW5nMikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xOTI0LDEzICs2MTEsOSBAQAogCiAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICBUUkFDRSgoInwlcHwlcHxNQVRDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKKyAgICBUUkFDRSgoInwlcHwlcHxGVUxMTUFUQ0hcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKLSAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VtYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgMSk7CiAKICAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC0xOTQ1LDcgKzYyOCw3IEBACiBwYXR0ZXJuX3NlYXJjaChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEwsICpzdHJpbmcyID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKQEAgLTE5NjUsMTEgKzY0OCw3IEBACiAKICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0hcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKLSAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICB9CisgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAKICAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKQEAgLTIwMjksNTkgKzcwOCwxMSBAQAogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKLWpvaW5fbGlzdChQeU9iamVjdCogbGlzdCwgUHlPYmplY3QqIHN0cmluZykKLXsKLSAgICAvKiBqb2luIGxpc3QgZWxlbWVudHMgKi8KLQotICAgIFB5T2JqZWN0KiBqb2luZXI7Ci0jaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMTA2MDAwMAotICAgIFB5T2JqZWN0KiBmdW5jdGlvbjsKLSAgICBQeU9iamVjdCogYXJnczsKLSNlbmRpZgotICAgIFB5T2JqZWN0KiByZXN1bHQ7Ci0KLSAgICBqb2luZXIgPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgMCwgMCk7Ci0gICAgaWYgKCFqb2luZXIpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKFB5TGlzdF9HRVRfU0laRShsaXN0KSA9PSAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgcmV0dXJuIGpvaW5lcjsKLSAgICB9Ci0KLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAxMDYwMDAwCi0gICAgZnVuY3Rpb24gPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGpvaW5lciwgImpvaW4iKTsKLSAgICBpZiAoIWZ1bmN0aW9uKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgYXJncyA9IFB5VHVwbGVfTmV3KDEpOwotICAgIGlmICghYXJncykgewotICAgICAgICBQeV9ERUNSRUYoZnVuY3Rpb24pOwotICAgICAgICBQeV9ERUNSRUYoam9pbmVyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgbGlzdCk7Ci0gICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChmdW5jdGlvbiwgYXJncyk7Ci0gICAgUHlfREVDUkVGKGFyZ3MpOyAvKiBhbHNvIHJlbW92ZXMgbGlzdCAqLwotICAgIFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0jZWxzZQotICAgIHJlc3VsdCA9IGNhbGwoCi0gICAgICAgICJzdHJpbmciLCAiam9pbiIsCi0gICAgICAgIFB5VHVwbGVfUGFjaygyLCBsaXN0LCBqb2luZXIpCi0gICAgICAgICk7Ci0jZW5kaWYKLSAgICBQeV9ERUNSRUYoam9pbmVyKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCoKIHBhdHRlcm5fZmluZGFsbChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgaSwgYiwgZTsKIAogICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMLCAqc3RyaW5nMiA9IE5VTEw7CkBAIC0yMTE0LDEyICs3NDUsNyBAQAogCiAgICAgICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OwogCi0gICAgICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9Ci0KKyAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMjEzNSw3ICs3NjEsOCBAQAogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICBiID0gU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUuc3RhcnQpOwogICAgICAgICAgICAgZSA9IFNUQVRFX09GRlNFVCgmc3RhdGUsIHN0YXRlLnB0cik7Ci0gICAgICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGIsIGUpOworICAgICAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIGIsIGUpOwogICAgICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBicmVhazsKQEAgLTIxODEsNyArODA4LDYgQEAKIAogfQogCi0jaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMjAyMDAwMAogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9maW5kaXRlcihQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewpAQCAtMjIwMyw3ICs4MjksNiBAQAogCiAgICAgcmV0dXJuIGl0ZXJhdG9yOwogfQotI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIHBhdHRlcm5fc3BsaXQoUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKQEAgLTIyMTEsNyArODM2LDcgQEAKICAgICBTUkVfU1RBVEUgc3RhdGU7CiAgICAgUHlPYmplY3QqIGxpc3Q7CiAgICAgUHlPYmplY3QqIGl0ZW07Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKICAgICBQeV9zc2l6ZV90IG47CiAgICAgUHlfc3NpemVfdCBpOwogICAgIHZvaWQqIGxhc3Q7CkBAIC0yMjQ2LDEyICs4NzEsNyBAQAogCiAgICAgICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OwogCi0gICAgICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9Ci0KKyAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMjI3MSw3ICs4OTEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogZ2V0IHNlZ21lbnQgYmVmb3JlIHRoaXMgbWF0Y2ggKi8KLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2UoCisgICAgICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCiAgICAgICAgICAgICBzdHJpbmcsIFNUQVRFX09GRlNFVCgmc3RhdGUsIGxhc3QpLAogICAgICAgICAgICAgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUuc3RhcnQpCiAgICAgICAgICAgICApOwpAQCAtMjMwMCw3ICs5MjAsNyBAQAogICAgIH0KIAogICAgIC8qIGdldCBzZWdtZW50IGZvbGxvd2luZyBsYXN0IG1hdGNoIChldmVuIGlmIGVtcHR5KSAqLwotICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKAorICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCiAgICAgICAgIHN0cmluZywgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgbGFzdCksIHN0YXRlLmVuZHBvcwogICAgICAgICApOwogICAgIGlmICghaXRlbSkKQEAgLTIzMjYsMTUgKzk0NiwxNiBAQAogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKKyAgICBQeU9iamVjdCogam9pbmVyOwogICAgIFB5T2JqZWN0KiBpdGVtOwogICAgIFB5T2JqZWN0KiBmaWx0ZXI7CiAgICAgUHlPYmplY3QqIGFyZ3M7CiAgICAgUHlPYmplY3QqIG1hdGNoOwogICAgIHZvaWQqIHB0cjsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeV9zc2l6ZV90IGksIGIsIGU7Ci0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemUsIGNoYXJzaXplOworICAgIGludCBpc2J5dGVzLCBjaGFyc2l6ZTsKICAgICBpbnQgZmlsdGVyX2lzX2NhbGxhYmxlOwogICAgIFB5X2J1ZmZlciB2aWV3OwogCkBAIC0yMzQ3LDEwICs5NjgsMTMgQEAKICAgICAgICAgLyogaWYgbm90IGNhbGxhYmxlLCBjaGVjayBpZiBpdCdzIGEgbGl0ZXJhbCBzdHJpbmcgKi8KICAgICAgICAgaW50IGxpdGVyYWw7CiAgICAgICAgIHZpZXcuYnVmID0gTlVMTDsKLSAgICAgICAgcHRyID0gZ2V0c3RyaW5nKHB0ZW1wbGF0ZSwgJm4sICZsb2dpY2FsX2NoYXJzaXplLCAmY2hhcnNpemUsICZ2aWV3KTsKKyAgICAgICAgcHRyID0gZ2V0c3RyaW5nKHB0ZW1wbGF0ZSwgJm4sICZpc2J5dGVzLCAmY2hhcnNpemUsICZ2aWV3KTsKICAgICAgICAgYiA9IGNoYXJzaXplOwogICAgICAgICBpZiAocHRyKSB7Ci0gICAgICAgICAgICBsaXRlcmFsID0gc3JlX2xpdGVyYWxfdGVtcGxhdGUoYiwgcHRyLCBuKTsKKyAgICAgICAgICAgIGlmIChjaGFyc2l6ZSA9PSAxKQorICAgICAgICAgICAgICAgIGxpdGVyYWwgPSBtZW1jaHIocHRyLCAnXFwnLCBuKSA9PSBOVUxMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpdGVyYWwgPSBQeVVuaWNvZGVfRmluZENoYXIocHRlbXBsYXRlLCAnXFwnLCAwLCBuLCAxKSA9PSAtMTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBsaXRlcmFsID0gMDsKQEAgLTIzOTQsMTIgKzEwMTgsNyBAQAogCiAgICAgICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OwogCi0gICAgICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9Ci0KKyAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMjQxNSw3ICsxMDM0LDggQEAKIAogICAgICAgICBpZiAoaSA8IGIpIHsKICAgICAgICAgICAgIC8qIGdldCBzZWdtZW50IGJlZm9yZSB0aGlzIG1hdGNoICovCi0gICAgICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGksIGIpOworICAgICAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICBzdHJpbmcsIGksIGIpOwogICAgICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQ3MCw3ICsxMDkwLDggQEAKIAogICAgIC8qIGdldCBzZWdtZW50IGZvbGxvd2luZyBsYXN0IG1hdGNoICovCiAgICAgaWYgKGkgPCBzdGF0ZS5lbmRwb3MpIHsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOworICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQ4NCwxMCArMTEwNSwyNSBAQAogICAgIFB5X0RFQ1JFRihmaWx0ZXIpOwogCiAgICAgLyogY29udmVydCBsaXN0IHRvIHNpbmdsZSBzdHJpbmcgKGFsc28gcmVtb3ZlcyBsaXN0KSAqLwotICAgIGl0ZW0gPSBqb2luX2xpc3QobGlzdCwgc3RyaW5nKTsKLQotICAgIGlmICghaXRlbSkKKyAgICBqb2luZXIgPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsIHN0cmluZywgMCwgMCk7CisgICAgaWYgKCFqb2luZXIpIHsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TGlzdF9HRVRfU0laRShsaXN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgaXRlbSA9IGpvaW5lcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzdGF0ZS5pc2J5dGVzKQorICAgICAgICAgICAgaXRlbSA9IF9QeUJ5dGVzX0pvaW4oam9pbmVyLCBsaXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbSA9IFB5VW5pY29kZV9Kb2luKGpvaW5lciwgbGlzdCk7CisgICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChzdWJuKQogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTm4iLCBpdGVtLCBuKTsKQEAgLTI1ODEsMTAgKzEyMTcsOTQgQEAKICNlbmRpZgogfQogCitzdGF0aWMgUHlPYmplY3QgKgorcGF0dGVybl9yZXByKFBhdHRlcm5PYmplY3QgKm9iaikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgaW50IHZhbHVlOworICAgIH0gZmxhZ19uYW1lc1tdID0geworICAgICAgICB7InJlLlRFTVBMQVRFIiwgU1JFX0ZMQUdfVEVNUExBVEV9LAorICAgICAgICB7InJlLklHTk9SRUNBU0UiLCBTUkVfRkxBR19JR05PUkVDQVNFfSwKKyAgICAgICAgeyJyZS5MT0NBTEUiLCBTUkVfRkxBR19MT0NBTEV9LAorICAgICAgICB7InJlLk1VTFRJTElORSIsIFNSRV9GTEFHX01VTFRJTElORX0sCisgICAgICAgIHsicmUuRE9UQUxMIiwgU1JFX0ZMQUdfRE9UQUxMfSwKKyAgICAgICAgeyJyZS5VTklDT0RFIiwgU1JFX0ZMQUdfVU5JQ09ERX0sCisgICAgICAgIHsicmUuVkVSQk9TRSIsIFNSRV9GTEFHX1ZFUkJPU0V9LAorICAgICAgICB7InJlLkRFQlVHIiwgU1JFX0ZMQUdfREVCVUd9LAorICAgICAgICB7InJlLkFTQ0lJIiwgU1JFX0ZMQUdfQVNDSUl9LAorICAgIH07CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZsYWdfaXRlbXM7CisgICAgaW50IGk7CisgICAgaW50IGZsYWdzID0gb2JqLT5mbGFnczsKKworICAgIC8qIE9taXQgcmUuVU5JQ09ERSBmb3IgdmFsaWQgc3RyaW5nIHBhdHRlcm5zLiAqLworICAgIGlmIChvYmotPmlzYnl0ZXMgPT0gMCAmJgorICAgICAgICAoZmxhZ3MgJiAoU1JFX0ZMQUdfTE9DQUxFfFNSRV9GTEFHX1VOSUNPREV8U1JFX0ZMQUdfQVNDSUkpKSA9PQorICAgICAgICAgU1JFX0ZMQUdfVU5JQ09ERSkKKyAgICAgICAgZmxhZ3MgJj0gflNSRV9GTEFHX1VOSUNPREU7CisKKyAgICBmbGFnX2l0ZW1zID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoIWZsYWdfaXRlbXMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IFB5X0FSUkFZX0xFTkdUSChmbGFnX25hbWVzKTsgaSsrKSB7CisgICAgICAgIGlmIChmbGFncyAmIGZsYWdfbmFtZXNbaV0udmFsdWUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZmxhZ19uYW1lc1tpXS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGZsYWdfaXRlbXMsIGl0ZW0pIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBmbGFncyAmPSB+ZmxhZ19uYW1lc1tpXS52YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiMHgleCIsIGZsYWdzKTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGZsYWdfaXRlbXMsIGl0ZW0pIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICB9CisKKyAgICBpZiAoUHlMaXN0X1NpemUoZmxhZ19pdGVtcykgPiAwKSB7CisgICAgICAgIFB5T2JqZWN0ICpmbGFnc19yZXN1bHQ7CisgICAgICAgIFB5T2JqZWN0ICpzZXAgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygifCIpOworICAgICAgICBpZiAoIXNlcCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgZmxhZ3NfcmVzdWx0ID0gUHlVbmljb2RlX0pvaW4oc2VwLCBmbGFnX2l0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKHNlcCk7CisgICAgICAgIGlmICghZmxhZ3NfcmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgicmUuY29tcGlsZSglLjIwMFIsICVTKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai0+cGF0dGVybiwgZmxhZ3NfcmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKGZsYWdzX3Jlc3VsdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgicmUuY29tcGlsZSglLjIwMFIpIiwgb2JqLT5wYXR0ZXJuKTsKKyAgICB9CisKK2RvbmU6CisgICAgUHlfREVDUkVGKGZsYWdfaXRlbXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFB5RG9jX1NUUlZBUihwYXR0ZXJuX21hdGNoX2RvYywKICJtYXRjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCiAgICAgTWF0Y2hlcyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmciKTsKIAorUHlEb2NfU1RSVkFSKHBhdHRlcm5fZnVsbG1hdGNoX2RvYywKKyJmdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAorICAgIE1hdGNoZXMgYWdhaW5zdCBhbGwgb2YgdGhlIHN0cmluZyIpOworCiBQeURvY19TVFJWQVIocGF0dGVybl9zZWFyY2hfZG9jLAogInNlYXJjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCiAgICAgU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZ1xuXApAQCAtMjYyMCw2ICsxMzQwLDggQEAKIHN0YXRpYyBQeU1ldGhvZERlZiBwYXR0ZXJuX21ldGhvZHNbXSA9IHsKICAgICB7Im1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX21hdGNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9tYXRjaF9kb2N9LAorICAgIHsiZnVsbG1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2Z1bGxtYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgIHBhdHRlcm5fZnVsbG1hdGNoX2RvY30sCiAgICAgeyJzZWFyY2giLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fc2VhcmNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9zZWFyY2hfZG9jfSwKICAgICB7InN1YiIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zdWIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLApAQCAtMjYzMCwxMCArMTM1Miw4IEBACiAgICAgICAgIHBhdHRlcm5fc3BsaXRfZG9jfSwKICAgICB7ImZpbmRhbGwiLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZmluZGFsbCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fZmluZGFsbF9kb2N9LAotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMjAwMDAKICAgICB7ImZpbmRpdGVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2ZpbmRpdGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9maW5kaXRlcl9kb2N9LAotI2VuZGlmCiAgICAgeyJzY2FubmVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3NjYW5uZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7Il9fY29weV9fIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2NvcHksIE1FVEhfTk9BUkdTfSwKICAgICB7Il9fZGVlcGNvcHlfXyIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9kZWVwY29weSwgTUVUSF9PfSwKQEAgLTI2NTgsNyArMTM3OCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpcGF0dGVybl9yZXByLCAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCkBAIC0yNzExLDcgKzE0MzEsNiBAQAogICAgIHNlbGYtPnBhdHRlcm4gPSBOVUxMOwogICAgIHNlbGYtPmdyb3VwaW5kZXggPSBOVUxMOwogICAgIHNlbGYtPmluZGV4Z3JvdXAgPSBOVUxMOwotICAgIHNlbGYtPnZpZXcuYnVmID0gTlVMTDsKIAogICAgIHNlbGYtPmNvZGVzaXplID0gbjsKIApAQCAtMjczMiwxNiArMTQ1MSwyMCBAQAogICAgIH0KIAogICAgIGlmIChwYXR0ZXJuID09IFB5X05vbmUpIHsKLSAgICAgICAgc2VsZi0+bG9naWNhbF9jaGFyc2l6ZSA9IC0xOwotICAgICAgICBzZWxmLT5jaGFyc2l6ZSA9IC0xOworICAgICAgICBzZWxmLT5pc2J5dGVzID0gLTE7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHBfbGVuZ3RoOwotICAgICAgICBpZiAoIWdldHN0cmluZyhwYXR0ZXJuLCAmcF9sZW5ndGgsICZzZWxmLT5sb2dpY2FsX2NoYXJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAmc2VsZi0+Y2hhcnNpemUsICZzZWxmLT52aWV3KSkgeworICAgICAgICBpbnQgY2hhcnNpemU7CisgICAgICAgIFB5X2J1ZmZlciB2aWV3OworICAgICAgICB2aWV3LmJ1ZiA9IE5VTEw7CisgICAgICAgIGlmICghZ2V0c3RyaW5nKHBhdHRlcm4sICZwX2xlbmd0aCwgJnNlbGYtPmlzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2l6ZSwgJnZpZXcpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAodmlldy5idWYpCisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICB9CiAKICAgICBQeV9JTkNSRUYocGF0dGVybik7CkBAIC0yODI3LDcgKzE1NTAsNyBAQAogICAgICAgICBza2lwID0gKmNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFZUUkFDRSgoIiVsdSAoc2tpcCB0byAlcClcbiIsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNraXAsIGNvZGUrc2tpcCkpOyAgICAgICAgXAotICAgICAgICBpZiAoc2tpcC1hZGogPiBlbmQtY29kZSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChza2lwLWFkaiA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKSAgICAgIFwKICAgICAgICAgICAgIEZBSUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb2RlKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKQEAgLTI4NTksOCArMTU4Miw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgb2Zmc2V0ID0gMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgKi8KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiBlbmQtY29kZSkKKyAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9TUkVfQ09ERV9CSVRTOyAvKiAyNTYtYml0IGJpdG1hcCAqLworICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBjb2RlICs9IG9mZnNldDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjg2OCw3ICsxNTkxLDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKICAgICAgICAgICAgIEdFVF9BUkc7IC8qIE51bWJlciBvZiBibG9ja3MgKi8KICAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9zaXplb2YoU1JFX0NPREUpOyAvKiAyNTYtYnl0ZSB0YWJsZSAqLwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGVuZC1jb2RlKQorICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCBlYWNoIGJ5dGUgcG9pbnRzIHRvIGEgdmFsaWQgYmxvY2sgKi8KICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpAQCAtMjg3Niw4ICsxNTk5LDggQEAKICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGUgKz0gb2Zmc2V0OwotICAgICAgICAgICAgb2Zmc2V0ID0gYXJnICogMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgdGltZXMgYXJnICovCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gZW5kLWNvZGUpCisgICAgICAgICAgICBvZmZzZXQgPSBhcmcgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOyAvKiAyNTYtYml0IGJpdG1hcCB0aW1lcyBhcmcgKi8KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgY29kZSArPSBvZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5NDAsNyArMTY2Myw3IEBACiAgICAgICAgICAgICAgICBzcmVfbWF0Y2goKSBjb2RlIGlzIHJvYnVzdCBldmVuIGlmIHRoZXkgZG9uJ3QsIGFuZCB0aGUgd29yc3QKICAgICAgICAgICAgICAgIHlvdSBjYW4gZ2V0IGlzIG5vbnNlbnNpY2FsIG1hdGNoIHJlc3VsdHMuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+IDIqZ3JvdXBzKzEpIHsKKyAgICAgICAgICAgIGlmIChhcmcgPiAyICogKHNpemVfdClncm91cHMgKyAxKSB7CiAgICAgICAgICAgICAgICAgVlRSQUNFKCgiYXJnPSVkLCBncm91cHM9JWRcbiIsIChpbnQpYXJnLCAoaW50KWdyb3VwcykpOwogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICB9CkBAIC0zMDI4LDExICsxNzUxLDExIEBACiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IHByZWZpeF9sZW4gPSBhcmc7CiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7CiAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgY29tZXMgdGhlIHByZWZpeCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBuZXdjb2RlLWNvZGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gKFB5X3VpbnRwdHJfdCkobmV3Y29kZSAtIGNvZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgICAgICAgICAgY29kZSArPSBwcmVmaXhfbGVuOwogICAgICAgICAgICAgICAgICAgICAvKiBBbmQgaGVyZSBjb21lcyB0aGUgb3ZlcmxhcCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA+IG5ld2NvZGUtY29kZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiAoUHlfdWludHB0cl90KShuZXdjb2RlIC0gY29kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgICAgICAgICAvKiBFYWNoIG92ZXJsYXAgdmFsdWUgc2hvdWxkIGJlIDwgcHJlZml4X2xlbiAqLwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4X2xlbjsgaSsrKSB7CkBAIC0zMTIzLDcgKzE4NDYsNyBAQAogICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKICAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPj0gZ3JvdXBzKQorICAgICAgICAgICAgaWYgKGFyZyA+PSAoc2l6ZV90KWdyb3VwcykKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTMxMzIsNyArMTg1NSw3IEBACiAgICAgICAgICAgICAgICAnZ3JvdXAnIGlzIGVpdGhlciBhbiBpbnRlZ2VyIGdyb3VwIG51bWJlciBvciBhIGdyb3VwIG5hbWUsCiAgICAgICAgICAgICAgICAndGhlbicgYW5kICdlbHNlJyBhcmUgc3ViLXJlZ2V4ZXMsIGFuZCAnZWxzZScgaXMgb3B0aW9uYWwuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+PSBncm91cHMpCisgICAgICAgICAgICBpZiAoYXJnID49IChzaXplX3QpZ3JvdXBzKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBHRVRfU0tJUF9BREooMSk7CiAgICAgICAgICAgICBjb2RlLS07IC8qIFRoZSBza2lwIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBhcmchICovCkBAIC0zMTYxLDcgKzE4ODQsNyBAQAogICAgICAgICAgICAgICAgdG8gYWxsb3cgYXJiaXRyYXJ5IGp1bXBzIGFueXdoZXJlIGluIHRoZSBjb2RlOyBzbyB3ZSBqdXN0IGxvb2sKICAgICAgICAgICAgICAgIGZvciBhIEpVTVAgb3Bjb2RlIHByZWNlZGluZyBvdXIgc2tpcCB0YXJnZXQuCiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCBlbmQtY29kZSAmJgorICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSAmJgogICAgICAgICAgICAgICAgIGNvZGVbc2tpcC0zXSA9PSBTUkVfT1BfSlVNUCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBWVFJBQ0UoKCJib3RoIHRoZW4gYW5kIGVsc2UgcGFydHMgcHJlc2VudFxuIikpOwpAQCAtMzI0NSw2ICsxOTY4LDEyIEBACiBzdGF0aWMgUHlPYmplY3QqCiBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChNYXRjaE9iamVjdCogc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGRlZikKIHsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICB2b2lkKiBwdHI7CisKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHNlbGYtPmdyb3VwcykgewogICAgICAgICAvKiByYWlzZSBJbmRleEVycm9yIGlmIHdlIHdlcmUgZ2l2ZW4gYSBiYWQgZ3JvdXAgbnVtYmVyICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKQEAgLTMyNjIsOSArMTk5MSwxNCBAQAogICAgICAgICByZXR1cm4gZGVmOwogICAgIH0KIAotICAgIHJldHVybiBQeVNlcXVlbmNlX0dldFNsaWNlKAotICAgICAgICBzZWxmLT5zdHJpbmcsIHNlbGYtPm1hcmtbaW5kZXhdLCBzZWxmLT5tYXJrW2luZGV4KzFdCi0gICAgICAgICk7CisgICAgcHRyID0gZ2V0c3RyaW5nKHNlbGYtPnN0cmluZywgJmxlbmd0aCwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gZ2V0c2xpY2UoaXNieXRlcywgcHRyLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmluZywgc2VsZi0+bWFya1tpbmRleF0sIHNlbGYtPm1hcmtbaW5kZXgrMV0pOworICAgIGlmIChpc2J5dGVzICYmIHZpZXcuYnVmICE9IE5VTEwpCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0zNjg0LDYgKzI0MTgsMjIgQEAKICAgICAgICAgcmV0dXJuIG1hdGNoX3JlZ3Moc2VsZik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCittYXRjaF9yZXByKE1hdGNoT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKmdyb3VwMCA9IG1hdGNoX2dldHNsaWNlX2J5X2luZGV4KHNlbGYsIDAsIFB5X05vbmUpOworICAgIGlmIChncm91cDAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPCVzIG9iamVjdDsgc3Bhbj0oJWQsICVkKSwgbWF0Y2g9JS41MFI+IiwKKyAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsCisgICAgICAgICAgICBzZWxmLT5tYXJrWzBdLCBzZWxmLT5tYXJrWzFdLCBncm91cDApOworICAgIFB5X0RFQ1JFRihncm91cDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIG1hdGNoX2dldHNldFtdID0gewogICAgIHsibGFzdGluZGV4IiwgKGdldHRlciltYXRjaF9sYXN0aW5kZXhfZ2V0LCAoc2V0dGVyKU5VTEx9LAogICAgIHsibGFzdGdyb3VwIiwgKGdldHRlciltYXRjaF9sYXN0Z3JvdXBfZ2V0LCAoc2V0dGVyKU5VTEx9LApAQCAtMzcxMiw3ICsyNDYyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpbWF0Y2hfcmVwciwgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMzczNiw3ICsyNDg2LDcgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fbmV3X21hdGNoKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFNSRV9TVEFURSogc3RhdGUsIGludCBzdGF0dXMpCitwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBTUkVfU1RBVEUqIHN0YXRlLCBQeV9zc2l6ZV90IHN0YXR1cykKIHsKICAgICAvKiBjcmVhdGUgbWF0Y2ggb2JqZWN0IChmcm9tIHN0YXRlIG9iamVjdCkgKi8KIApAQCAtMzgxNSwxNyArMjU2NSwxMyBAQAogewogICAgIFNSRV9TVEFURSogc3RhdGUgPSAmc2VsZi0+c3RhdGU7CiAgICAgUHlPYmplY3QqIG1hdGNoOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBzdGF0ZV9yZXNldChzdGF0ZSk7CiAKICAgICBzdGF0ZS0+cHRyID0gc3RhdGUtPnN0YXJ0OwogCi0gICAgaWYgKHN0YXRlLT5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX21hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91bWF0Y2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pLCAwKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM4NDYsMTcgKzI1OTIsMTMgQEAKIHsKICAgICBTUkVfU1RBVEUqIHN0YXRlID0gJnNlbGYtPnN0YXRlOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgc3RhdGVfcmVzZXQoc3RhdGUpOwogCiAgICAgc3RhdGUtPnB0ciA9IHN0YXRlLT5zdGFydDsKIAotICAgIGlmIChzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC00MDEzLDcgKzI3NTUsNSBAQAogICAgIHJldHVybiBtOwogfQogCi0jZW5kaWYgLyogIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkgKi8KLQogLyogdmltOnRzPTQ6c3c9NDpldAogKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NzbC5jIGIvTW9kdWxlcy9fc3NsLmMKaW5kZXggNDk5ZThiYS4uNWE5YTEzYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3NsLmMKKysrIGIvTW9kdWxlcy9fc3NsLmMKQEAgLTE0LDYgKzE0LDggQEAKICAgICAgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODEwOCNtc2cxMDI4NjcgPwogKi8KIAorI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisKICNpbmNsdWRlICJQeXRob24uaCIKIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC00Miw2ICs0NCw3MCBAQAogCiAjZW5kaWYKIAorLyogSW5jbHVkZSBzeW1ib2xzIGZyb20gX3NvY2tldCBtb2R1bGUgKi8KKyNpbmNsdWRlICJzb2NrZXRtb2R1bGUuaCIKKworc3RhdGljIFB5U29ja2V0TW9kdWxlX0FQSU9iamVjdCBQeVNvY2tldE1vZHVsZTsKKworI2lmIGRlZmluZWQoSEFWRV9QT0xMX0gpCisjaW5jbHVkZSA8cG9sbC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbmRpZgorCisvKiBJbmNsdWRlIE9wZW5TU0wgaGVhZGVyIGZpbGVzICovCisjaW5jbHVkZSAib3BlbnNzbC9yc2EuaCIKKyNpbmNsdWRlICJvcGVuc3NsL2NyeXB0by5oIgorI2luY2x1ZGUgIm9wZW5zc2wveDUwOS5oIgorI2luY2x1ZGUgIm9wZW5zc2wveDUwOXYzLmgiCisjaW5jbHVkZSAib3BlbnNzbC9wZW0uaCIKKyNpbmNsdWRlICJvcGVuc3NsL3NzbC5oIgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCisjaW5jbHVkZSAib3BlbnNzbC9yYW5kLmgiCisKKy8qIFNTTCBlcnJvciBvYmplY3QgKi8KK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xaZXJvUmV0dXJuRXJyb3JPYmplY3Q7CitzdGF0aWMgUHlPYmplY3QgKlB5U1NMV2FudFJlYWRFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50V3JpdGVFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xTeXNjYWxsRXJyb3JPYmplY3Q7CitzdGF0aWMgUHlPYmplY3QgKlB5U1NMRU9GRXJyb3JPYmplY3Q7CisKKy8qIEVycm9yIG1hcHBpbmdzICovCitzdGF0aWMgUHlPYmplY3QgKmVycl9jb2Rlc190b19uYW1lczsKK3N0YXRpYyBQeU9iamVjdCAqZXJyX25hbWVzX3RvX2NvZGVzOworc3RhdGljIFB5T2JqZWN0ICpsaWJfY29kZXNfdG9fbmFtZXM7CisKK3N0cnVjdCBweV9zc2xfZXJyb3JfY29kZSB7CisgICAgY29uc3QgY2hhciAqbW5lbW9uaWM7CisgICAgaW50IGxpYnJhcnksIHJlYXNvbjsKK307CitzdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSB7CisgICAgY29uc3QgY2hhciAqbGlicmFyeTsKKyAgICBpbnQgY29kZTsKK307CisKKy8qIEluY2x1ZGUgZ2VuZXJhdGVkIGRhdGEgKGVycm9yIGNvZGVzKSAqLworI2luY2x1ZGUgIl9zc2xfZGF0YS5oIgorCisvKiBPcGVuc3NsIGNvbWVzIHdpdGggVExTdjEuMSBhbmQgVExTdjEuMiBiZXR3ZWVuIDEuMC4waCBhbmQgMS4wLjEKKyAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvY2hhbmdlbG9nLmh0bWwKKyAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwMEwKKyMgZGVmaW5lIEhBVkVfVExTdjFfMiAxCisjZWxzZQorIyBkZWZpbmUgSEFWRV9UTFN2MV8yIDAKKyNlbmRpZgorCisvKiBTTkkgc3VwcG9ydCAoY2xpZW50LSBhbmQgc2VydmVyLXNpZGUpIGFwcGVhcmVkIGluIE9wZW5TU0wgMS4wLjAgYW5kIDAuOS44ZgorICogVGhpcyBpbmNsdWRlcyB0aGUgU1NMX3NldF9TU0xfQ1RYKCkgZnVuY3Rpb24uCisgKi8KKyNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjIGRlZmluZSBIQVZFX1NOSSAxCisjZWxzZQorIyBkZWZpbmUgSEFWRV9TTkkgMAorI2VuZGlmCisKIGVudW0gcHlfc3NsX2Vycm9yIHsKICAgICAvKiB0aGVzZSBtaXJyb3Igc3NsLmggKi8KICAgICBQWV9TU0xfRVJST1JfTk9ORSwKQEAgLTczLDU1ICsxMzksMTQgQEAKICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyLAogICAgIFBZX1NTTF9WRVJTSU9OX1NTTDM9MSwKICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyMywKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBQWV9TU0xfVkVSU0lPTl9UTFMxLAorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMSwKKyAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzIKKyNlbHNlCiAgICAgUFlfU1NMX1ZFUlNJT05fVExTMQotfTsKLQotc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIHsKLSAgICBjb25zdCBjaGFyICptbmVtb25pYzsKLSAgICBpbnQgbGlicmFyeSwgcmVhc29uOwotfTsKLQotc3RydWN0IHB5X3NzbF9saWJyYXJ5X2NvZGUgewotICAgIGNvbnN0IGNoYXIgKmxpYnJhcnk7Ci0gICAgaW50IGNvZGU7Ci19OwotCi0vKiBJbmNsdWRlIHN5bWJvbHMgZnJvbSBfc29ja2V0IG1vZHVsZSAqLwotI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIgotCi1zdGF0aWMgUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlOwotCi0jaWYgZGVmaW5lZChIQVZFX1BPTExfSCkKLSNpbmNsdWRlIDxwb2xsLmg+Ci0jZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1BPTExfSCkKLSNpbmNsdWRlIDxzeXMvcG9sbC5oPgogI2VuZGlmCi0KLS8qIEluY2x1ZGUgT3BlblNTTCBoZWFkZXIgZmlsZXMgKi8KLSNpbmNsdWRlICJvcGVuc3NsL3JzYS5oIgotI2luY2x1ZGUgIm9wZW5zc2wvY3J5cHRvLmgiCi0jaW5jbHVkZSAib3BlbnNzbC94NTA5LmgiCi0jaW5jbHVkZSAib3BlbnNzbC94NTA5djMuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3BlbS5oIgotI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKLQotLyogSW5jbHVkZSBnZW5lcmF0ZWQgZGF0YSAoZXJyb3IgY29kZXMpICovCi0jaW5jbHVkZSAiX3NzbF9kYXRhLmgiCi0KLS8qIFNTTCBlcnJvciBvYmplY3QgKi8KLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xaZXJvUmV0dXJuRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMV2FudFJlYWRFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50V3JpdGVFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xTeXNjYWxsRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMRU9GRXJyb3JPYmplY3Q7Ci0KLS8qIEVycm9yIG1hcHBpbmdzICovCi1zdGF0aWMgUHlPYmplY3QgKmVycl9jb2Rlc190b19uYW1lczsKLXN0YXRpYyBQeU9iamVjdCAqZXJyX25hbWVzX3RvX2NvZGVzOwotc3RhdGljIFB5T2JqZWN0ICpsaWJfY29kZXNfdG9fbmFtZXM7Cit9OwogCiAjaWZkZWYgV0lUSF9USFJFQUQKIApAQCAtMTczLDYgKzE5OCwxMSBAQAogIyBkZWZpbmUgT1BFTlNTTF9OT19DT01QCiAjZW5kaWYKIAorLyogWDUwOV9WRVJJRllfUEFSQU0gZ290IGFkZGVkIHRvIE9wZW5TU0wgaW4gMC45LjggKi8KKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDgwMGZMCisjIGRlZmluZSBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCisjZW5kaWYKKwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMTgxLDE0ICsyMTEsMjAgQEAKICAgICBjaGFyICpucG5fcHJvdG9jb2xzOwogICAgIGludCBucG5fcHJvdG9jb2xzX2xlbjsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5T2JqZWN0ICpzZXRfaG9zdG5hbWU7CisjZW5kaWYKKyAgICBpbnQgY2hlY2tfaG9zdG5hbWU7CiB9IFB5U1NMQ29udGV4dDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeU9iamVjdCAqU29ja2V0OyAvKiB3ZWFrcmVmIHRvIHNvY2tldCBvbiB3aGljaCB3ZSdyZSBsYXllcmVkICovCiAgICAgU1NMICpzc2w7CisgICAgUHlTU0xDb250ZXh0ICpjdHg7IC8qIHdlYWtyZWYgdG8gU1NMIGNvbnRleHQgKi8KICAgICBYNTA5ICpwZWVyX2NlcnQ7Ci0gICAgaW50IHNodXRkb3duX3NlZW5femVybzsKKyAgICBjaGFyIHNodXRkb3duX3NlZW5femVybzsKKyAgICBjaGFyIGhhbmRzaGFrZV9kb25lOwogICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGU7CiB9IFB5U1NMU29ja2V0OwogCkBAIC0zMTYsMTQgKzM1MiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfb2JqLCBlcnJzdHIsIGxpbmVubyk7CiAgICAgZWxzZQogICAgICAgICBtc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMgKF9zc2wuYzolZCkiLCBlcnJzdHIsIGxpbmVubyk7Ci0KICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGluaXRfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCJpTiIsIHNzbF9lcnJubywgbXNnKTsKKyAgICBpZiAoaW5pdF92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisKICAgICBlcnJfdmFsdWUgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHR5cGUsIGluaXRfdmFsdWUpOwogICAgIFB5X0RFQ1JFRihpbml0X3ZhbHVlKTsKICAgICBpZiAoZXJyX3ZhbHVlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGlmIChyZWFzb25fb2JqID09IE5VTEwpCiAgICAgICAgIHJlYXNvbl9vYmogPSBQeV9Ob25lOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGVycl92YWx1ZSwgJlB5SWRfcmVhc29uLCByZWFzb25fb2JqKSkKQEAgLTQzNywxMSArNDc3LDEzIEBACiAgKi8KIAogc3RhdGljIFB5U1NMU29ja2V0ICoKLW5ld1B5U1NMU29ja2V0KFNTTF9DVFggKmN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAorbmV3UHlTU0xTb2NrZXQoUHlTU0xDb250ZXh0ICpzc2xjdHgsIFB5U29ja2V0U29ja09iamVjdCAqc29jaywKICAgICAgICAgICAgICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGUsCiAgICAgICAgICAgICAgICBjaGFyICpzZXJ2ZXJfaG9zdG5hbWUpCiB7CiAgICAgUHlTU0xTb2NrZXQgKnNlbGY7CisgICAgU1NMX0NUWCAqY3R4ID0gc3NsY3R4LT5jdHg7CisgICAgbG9uZyBtb2RlOwogCiAgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVNTTFNvY2tldCwgJlB5U1NMU29ja2V0X1R5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCkBAIC00NTAsNyArNDkyLDEwIEBACiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gTlVMTDsKICAgICBzZWxmLT5zc2wgPSBOVUxMOwogICAgIHNlbGYtPlNvY2tldCA9IE5VTEw7CisgICAgc2VsZi0+Y3R4ID0gc3NsY3R4OwogICAgIHNlbGYtPnNodXRkb3duX3NlZW5femVybyA9IDA7CisgICAgc2VsZi0+aGFuZHNoYWtlX2RvbmUgPSAwOworICAgIFB5X0lOQ1JFRihzc2xjdHgpOwogCiAgICAgLyogTWFrZSBzdXJlIHRoZSBTU0wgZXJyb3Igc3RhdGUgaXMgaW5pdGlhbGl6ZWQgKi8KICAgICAodm9pZCkgRVJSX2dldF9zdGF0ZSgpOwpAQCAtNDU5LDEyICs1MDQsMTUgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+c3NsID0gU1NMX25ldyhjdHgpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCi0gICAgU1NMX3NldF9mZChzZWxmLT5zc2wsIHNvY2stPnNvY2tfZmQpOworICAgIFNTTF9zZXRfYXBwX2RhdGEoc2VsZi0+c3NsLHNlbGYpOworICAgIFNTTF9zZXRfZmQoc2VsZi0+c3NsLCBQeV9TQUZFX0RPV05DQVNUKHNvY2stPnNvY2tfZmQsIFNPQ0tFVF9ULCBpbnQpKTsKKyAgICBtb2RlID0gU1NMX01PREVfQUNDRVBUX01PVklOR19XUklURV9CVUZGRVI7CiAjaWZkZWYgU1NMX01PREVfQVVUT19SRVRSWQotICAgIFNTTF9zZXRfbW9kZShzZWxmLT5zc2wsIFNTTF9NT0RFX0FVVE9fUkVUUlkpOworICAgIG1vZGUgfD0gU1NMX01PREVfQVVUT19SRVRSWTsKICNlbmRpZgorICAgIFNTTF9zZXRfbW9kZShzZWxmLT5zc2wsIG1vZGUpOwogCi0jaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmIEhBVkVfU05JCiAgICAgaWYgKHNlcnZlcl9ob3N0bmFtZSAhPSBOVUxMKQogICAgICAgICBTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUoc2VsZi0+c3NsLCBzZXJ2ZXJfaG9zdG5hbWUpOwogI2VuZGlmCkBAIC00ODYsNiArNTM0LDEwIEBACiAKICAgICBzZWxmLT5zb2NrZXRfdHlwZSA9IHNvY2tldF90eXBlOwogICAgIHNlbGYtPlNvY2tldCA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIHNvY2ssIE5VTEwpOworICAgIGlmIChzZWxmLT5Tb2NrZXQgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtNTUyLDYgKzYwNCw3IEBACiAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNlbGYtPnBlZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzZWxmLT5zc2wpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisgICAgc2VsZi0+aGFuZHNoYWtlX2RvbmUgPSAxOwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtOTE4LDYgKzk3MSwxMjYgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK19nZXRfYWlhX3VyaShYNTA5ICpjZXJ0aWZpY2F0ZSwgaW50IG5pZCkgeworICAgIFB5T2JqZWN0ICpsc3QgPSBOVUxMLCAqb3N0ciA9IE5VTEw7CisgICAgaW50IGksIHJlc3VsdDsKKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1MgKmluZm87CisKKyAgICBpbmZvID0gWDUwOV9nZXRfZXh0X2QyaShjZXJ0aWZpY2F0ZSwgTklEX2luZm9fYWNjZXNzLCBOVUxMLCBOVUxMKTsKKyAgICBpZiAoKGluZm8gPT0gTlVMTCkgfHwgKHNrX0FDQ0VTU19ERVNDUklQVElPTl9udW0oaW5mbykgPT0gMCkpIHsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorCisgICAgaWYgKChsc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bShpbmZvKTsgaSsrKSB7CisgICAgICAgIEFDQ0VTU19ERVNDUklQVElPTiAqYWQgPSBza19BQ0NFU1NfREVTQ1JJUFRJT05fdmFsdWUoaW5mbywgaSk7CisgICAgICAgIEFTTjFfSUE1U1RSSU5HICp1cmk7CisKKyAgICAgICAgaWYgKChPQkpfb2JqMm5pZChhZC0+bWV0aG9kKSAhPSBuaWQpIHx8CisgICAgICAgICAgICAgICAgKGFkLT5sb2NhdGlvbi0+dHlwZSAhPSBHRU5fVVJJKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdXJpID0gYWQtPmxvY2F0aW9uLT5kLnVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgIG9zdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKil1cmktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLT5sZW5ndGgpOworICAgICAgICBpZiAob3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gUHlMaXN0X0FwcGVuZChsc3QsIG9zdHIpOworICAgICAgICBQeV9ERUNSRUYob3N0cik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICB9CisgICAgQVVUSE9SSVRZX0lORk9fQUNDRVNTX2ZyZWUoaW5mbyk7CisKKyAgICAvKiBjb252ZXJ0IHRvIHR1cGxlIG9yIE5vbmUgKi8KKyAgICBpZiAoUHlMaXN0X1NpemUobHN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeU9iamVjdCAqdHVwOworICAgICAgICB0dXAgPSBQeUxpc3RfQXNUdXBsZShsc3QpOworICAgICAgICBQeV9ERUNSRUYobHN0KTsKKyAgICAgICAgcmV0dXJuIHR1cDsKKyAgICB9CisKKyAgZmFpbDoKKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZShpbmZvKTsKKyAgICBQeV9YREVDUkVGKGxzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZ2V0X2NybF9kcChYNTA5ICpjZXJ0aWZpY2F0ZSkgeworICAgIFNUQUNLX09GKERJU1RfUE9JTlQpICpkcHM7CisgICAgaW50IGksIGosIHJlc3VsdDsKKyAgICBQeU9iamVjdCAqbHN0OworCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAwMDEwMDBMCisgICAgZHBzID0gWDUwOV9nZXRfZXh0X2QyaShjZXJ0aWZpY2F0ZSwgTklEX2NybF9kaXN0cmlidXRpb25fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisjZWxzZQorICAgIC8qIENhbGxzIHg1MDl2M19jYWNoZV9leHRlbnNpb25zIGFuZCBzZXRzIHVwIGNybGRwICovCisgICAgWDUwOV9jaGVja19jYShjZXJ0aWZpY2F0ZSk7CisgICAgZHBzID0gY2VydGlmaWNhdGUtPmNybGRwOworI2VuZGlmCisKKyAgICBpZiAoZHBzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorCisgICAgaWYgKChsc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvciAoaT0wOyBpIDwgc2tfRElTVF9QT0lOVF9udW0oZHBzKTsgaSsrKSB7CisgICAgICAgIERJU1RfUE9JTlQgKmRwOworICAgICAgICBTVEFDS19PRihHRU5FUkFMX05BTUUpICpnbnM7CisKKyAgICAgICAgZHAgPSBza19ESVNUX1BPSU5UX3ZhbHVlKGRwcywgaSk7CisgICAgICAgIGducyA9IGRwLT5kaXN0cG9pbnQtPm5hbWUuZnVsbG5hbWU7CisKKyAgICAgICAgZm9yIChqPTA7IGogPCBza19HRU5FUkFMX05BTUVfbnVtKGducyk7IGorKykgeworICAgICAgICAgICAgR0VORVJBTF9OQU1FICpnbjsKKyAgICAgICAgICAgIEFTTjFfSUE1U1RSSU5HICp1cmk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3VyaTsKKworICAgICAgICAgICAgZ24gPSBza19HRU5FUkFMX05BTUVfdmFsdWUoZ25zLCBqKTsKKyAgICAgICAgICAgIGlmIChnbi0+dHlwZSAhPSBHRU5fVVJJKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cmkgPSBnbi0+ZC51bmlmb3JtUmVzb3VyY2VJZGVudGlmaWVyOworICAgICAgICAgICAgb3VyaSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKXVyaS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLT5sZW5ndGgpOworICAgICAgICAgICAgaWYgKG91cmkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gUHlMaXN0X0FwcGVuZChsc3QsIG91cmkpOworICAgICAgICAgICAgUHlfREVDUkVGKG91cmkpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobHN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBjb252ZXJ0IHRvIHR1cGxlIG9yIE5vbmUgKi8KKyAgICBpZiAoUHlMaXN0X1NpemUobHN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeU9iamVjdCAqdHVwOworICAgICAgICB0dXAgPSBQeUxpc3RfQXNUdXBsZShsc3QpOworICAgICAgICBQeV9ERUNSRUYobHN0KTsKKyAgICAgICAgcmV0dXJuIHR1cDsKKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBfZGVjb2RlX2NlcnRpZmljYXRlKFg1MDkgKmNlcnRpZmljYXRlKSB7CiAKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKQEAgLTkyNyw5ICsxMTAwLDEwIEBACiAgICAgUHlPYmplY3QgKmlzc3VlcjsKICAgICBQeU9iamVjdCAqdmVyc2lvbjsKICAgICBQeU9iamVjdCAqc25fb2JqOworICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgQVNOMV9JTlRFR0VSICpzZXJpYWxOdW1iZXI7CiAgICAgY2hhciBidWZbMjA0OF07Ci0gICAgaW50IGxlbjsKKyAgICBpbnQgbGVuLCByZXN1bHQ7CiAgICAgQVNOMV9USU1FICpub3RCZWZvcmUsICpub3RBZnRlcjsKICAgICBQeU9iamVjdCAqcG5vdEJlZm9yZSwgKnBub3RBZnRlcjsKIApAQCAtMTAzNSw2ICsxMjA5LDQxIEBACiAgICAgICAgIFB5X0RFQ1JFRihwZWVyX2FsdF9uYW1lcyk7CiAgICAgfQogCisgICAgLyogQXV0aG9yaXR5IEluZm9ybWF0aW9uIEFjY2VzczogT0NTUCBVUklzICovCisgICAgb2JqID0gX2dldF9haWFfdXJpKGNlcnRpZmljYXRlLCBOSURfYWRfT0NTUCk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfSBlbHNlIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJPQ1NQIiwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWwxOworICAgICAgICB9CisgICAgfQorCisgICAgb2JqID0gX2dldF9haWFfdXJpKGNlcnRpZmljYXRlLCBOSURfYWRfY2FfaXNzdWVycyk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfSBlbHNlIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJjYUlzc3VlcnMiLCBvYmopOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDRFAgKENSTCBkaXN0cmlidXRpb24gcG9pbnRzKSAqLworICAgIG9iaiA9IF9nZXRfY3JsX2RwKGNlcnRpZmljYXRlKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgImNybERpc3RyaWJ1dGlvblBvaW50cyIsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byBmYWlsMTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEJJT19mcmVlKGJpb2J1Zik7CiAgICAgcmV0dXJuIHJldHZhbDsKIApAQCAtMTA0Niw2ICsxMjU1LDI0IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitfY2VydGlmaWNhdGVfdG9fZGVyKFg1MDkgKmNlcnRpZmljYXRlKQoreworICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzX2J1ZiA9IE5VTEw7CisgICAgaW50IGxlbjsKKyAgICBQeU9iamVjdCAqcmV0dmFsOworCisgICAgYnl0ZXNfYnVmID0gTlVMTDsKKyAgICBsZW4gPSBpMmRfWDUwOShjZXJ0aWZpY2F0ZSwgJmJ5dGVzX2J1Zik7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAvKiB0aGlzIGlzIGFjdHVhbGx5IGFuIGltbXV0YWJsZSBieXRlcyBzZXF1ZW5jZSAqLworICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKikgYnl0ZXNfYnVmLCBsZW4pOworICAgIE9QRU5TU0xfZnJlZShieXRlc19idWYpOworICAgIHJldHVybiByZXR2YWw7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVNTTF90ZXN0X2RlY29kZV9jZXJ0aWZpY2F0ZSAoUHlPYmplY3QgKm1vZCwgUHlPYmplY3QgKmFyZ3MpIHsKQEAgLTEwOTEsMzQgKzEzMTgsMjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVNTTF9wZWVyY2VydChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7Ci0gICAgaW50IGxlbjsKICAgICBpbnQgdmVyaWZpY2F0aW9uOwogICAgIGludCBiaW5hcnlfbW9kZSA9IDA7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxwOnBlZXJfY2VydGlmaWNhdGUiLCAmYmluYXJ5X21vZGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmICghc2VsZi0+aGFuZHNoYWtlX2RvbmUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFuZHNoYWtlIG5vdCBkb25lIHlldCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgaWYgKCFzZWxmLT5wZWVyX2NlcnQpCiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogCiAgICAgaWYgKGJpbmFyeV9tb2RlKSB7CiAgICAgICAgIC8qIHJldHVybiBjZXJ0IGluIERFUi1lbmNvZGVkIGZvcm1hdCAqLwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzX2J1ZiA9IE5VTEw7Ci0KLSAgICAgICAgYnl0ZXNfYnVmID0gTlVMTDsKLSAgICAgICAgbGVuID0gaTJkX1g1MDkoc2VsZi0+cGVlcl9jZXJ0LCAmYnl0ZXNfYnVmKTsKLSAgICAgICAgaWYgKGxlbiA8IDApIHsKLSAgICAgICAgICAgIFB5U1NMX1NldEVycm9yKHNlbGYsIGxlbiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIC8qIHRoaXMgaXMgYWN0dWFsbHkgYW4gaW1tdXRhYmxlIGJ5dGVzIHNlcXVlbmNlICovCi0gICAgICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSAgICAgICAgICAoKGNvbnN0IGNoYXIgKikgYnl0ZXNfYnVmLCBsZW4pOwotICAgICAgICBPUEVOU1NMX2ZyZWUoYnl0ZXNfYnVmKTsKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLQorICAgICAgICByZXR1cm4gX2NlcnRpZmljYXRlX3RvX2RlcihzZWxmLT5wZWVyX2NlcnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZlcmlmaWNhdGlvbiA9IFNTTF9DVFhfZ2V0X3ZlcmlmeV9tb2RlKFNTTF9nZXRfU1NMX0NUWChzZWxmLT5zc2wpKTsKICAgICAgICAgaWYgKCh2ZXJpZmljYXRpb24gJiBTU0xfVkVSSUZZX1BFRVIpID09IDApCkBAIC0xMjIxLDYgKzE0MzcsNDMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgUHlTU0xDb250ZXh0ICpQeVNTTF9nZXRfY29udGV4dChQeVNTTFNvY2tldCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgeworICAgIFB5X0lOQ1JFRihzZWxmLT5jdHgpOworICAgIHJldHVybiBzZWxmLT5jdHg7Cit9CisKK3N0YXRpYyBpbnQgUHlTU0xfc2V0X2NvbnRleHQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgeworCisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayh2YWx1ZSwgJlB5U1NMQ29udGV4dF9UeXBlKSkgeworI2lmICFIQVZFX1NOSQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwgInNldHRpbmcgYSBzb2NrZXQncyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiY29udGV4dCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgT3BlblNTTCBsaWJyYXJ5Iik7CisgICAgICAgIHJldHVybiAtMTsKKyNlbHNlCisgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmLT5jdHgpOworICAgICAgICBzZWxmLT5jdHggPSAoUHlTU0xDb250ZXh0ICopIHZhbHVlOworICAgICAgICBTU0xfc2V0X1NTTF9DVFgoc2VsZi0+c3NsLCBzZWxmLT5jdHgtPmN0eCk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiVGhlIHZhbHVlIG11c3QgYmUgYSBTU0xDb250ZXh0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX3NldF9jb250ZXh0X2RvYywKKyJfc2V0dGVyX2NvbnRleHQoY3R4KVxuXAorXAorVGhpcyBjaGFuZ2VzIHRoZSBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgU1NMU29ja2V0LiBUaGlzIGlzIHR5cGljYWxseVxuXAordXNlZCBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHNldCBieSB0aGUgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tcblwKK29uIHRoZSBTU0xDb250ZXh0IHRvIGNoYW5nZSB0aGUgY2VydGlmaWNhdGUgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZVxuXAorU1NMU29ja2V0IGJlZm9yZSB0aGUgY3J5cHRvZ3JhcGhpYyBleGNoYW5nZSBoYW5kc2hha2UgbWVzc2FnZXNcbiIpOworCisKKwogc3RhdGljIHZvaWQgUHlTU0xfZGVhbGxvYyhQeVNTTFNvY2tldCAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+cGVlcl9jZXJ0KSAgICAgICAgLyogUG9zc2libGUgbm90IHRvIGhhdmUgb25lPyAqLwpAQCAtMTIyOCw2ICsxNDgxLDcgQEAKICAgICBpZiAoc2VsZi0+c3NsKQogICAgICAgICBTU0xfZnJlZShzZWxmLT5zc2wpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+U29ja2V0KTsKKyAgICBQeV9YREVDUkVGKHNlbGYtPmN0eCk7CiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCkBAIC0xMjg2LDkgKzE1NDAsMTEgQEAKICAgICAvKiBTZWUgaWYgdGhlIHNvY2tldCBpcyByZWFkeSAqLwogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBpZiAod3JpdGluZykKLSAgICAgICAgcmMgPSBzZWxlY3Qocy0+c29ja19mZCsxLCBOVUxMLCAmZmRzLCBOVUxMLCAmdHYpOworICAgICAgICByYyA9IHNlbGVjdChQeV9TQUZFX0RPV05DQVNUKHMtPnNvY2tfZmQrMSwgU09DS0VUX1QsIGludCksCisgICAgICAgICAgICAgICAgICAgIE5VTEwsICZmZHMsIE5VTEwsICZ0dik7CiAgICAgZWxzZQotICAgICAgICByYyA9IHNlbGVjdChzLT5zb2NrX2ZkKzEsICZmZHMsIE5VTEwsIE5VTEwsICZ0dik7CisgICAgICAgIHJjID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgJmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUwogCiAjaWZkZWYgSEFWRV9QT0xMCkBAIC0xNjY4LDYgKzE5MjQsMTIgQEAKIAogI2VuZGlmIC8qIEhBVkVfT1BFTlNTTF9GSU5JU0hFRCAqLwogCitzdGF0aWMgUHlHZXRTZXREZWYgc3NsX2dldHNldGxpc3RbXSA9IHsKKyAgICB7ImNvbnRleHQiLCAoZ2V0dGVyKSBQeVNTTF9nZXRfY29udGV4dCwKKyAgICAgICAgICAgICAgICAoc2V0dGVyKSBQeVNTTF9zZXRfY29udGV4dCwgUHlTU0xfc2V0X2NvbnRleHRfZG9jfSwKKyAgICB7TlVMTH0sICAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKIHN0YXRpYyBQeU1ldGhvZERlZiBQeVNTTE1ldGhvZHNbXSA9IHsKICAgICB7ImRvX2hhbmRzaGFrZSIsIChQeUNGdW5jdGlvbilQeVNTTF9TU0xkb19oYW5kc2hha2UsIE1FVEhfTk9BUkdTfSwKICAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX1NTTHdyaXRlLCBNRVRIX1ZBUkFSR1MsCkBAIC0xNzIyLDYgKzE5ODQsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCiAgICAgUHlTU0xNZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLworICAgIHNzbF9nZXRzZXRsaXN0LCAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KIH07CiAKIApAQCAtMTc0Niw2ICsyMDEwLDEyIEBACiAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzEpCiAgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFRMU3YxX21ldGhvZCgpKTsKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzFfMSkKKyAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfMV9tZXRob2QoKSk7CisgICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9UTFMxXzIpCisgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFRMU3YxXzJfbWV0aG9kKCkpOworI2VuZGlmCiAgICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9TU0wzKQogICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhTU0x2M19tZXRob2QoKSk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgpAQCAtMTc3OSw2ICsyMDQ5LDExIEBACiAjaWZkZWYgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAogICAgIHNlbGYtPm5wbl9wcm90b2NvbHMgPSBOVUxMOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgc2VsZi0+c2V0X2hvc3RuYW1lID0gTlVMTDsKKyNlbmRpZgorICAgIC8qIERvbid0IGNoZWNrIGhvc3QgbmFtZSBieSBkZWZhdWx0ICovCisgICAgc2VsZi0+Y2hlY2tfaG9zdG5hbWUgPSAwOwogICAgIC8qIERlZmF1bHRzICovCiAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHNlbGYtPmN0eCwgU1NMX1ZFUklGWV9OT05FLCBOVUxMKTsKICAgICBvcHRpb25zID0gU1NMX09QX0FMTCAmIH5TU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTOwpAQCAtMTc4Niw2ICsyMDYxLDIxIEBACiAgICAgICAgIG9wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYyOwogICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc2VsZi0+Y3R4LCBvcHRpb25zKTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKKyAgICAvKiBBbGxvdyBhdXRvbWF0aWMgRUNESCBjdXJ2ZSBzZWxlY3Rpb24gKG9uIE9wZW5TU0wgMS4wLjIrKSwgb3IgdXNlCisgICAgICAgcHJpbWUyNTZ2MSBieSBkZWZhdWx0LiAgVGhpcyBpcyBBcGFjaGUgbW9kX3NzbCdzIGluaXRpYWxpemF0aW9uCisgICAgICAgcG9saWN5LCBzbyB3ZSBzaG91bGQgYmUgc2FmZS4gKi8KKyNpZiBkZWZpbmVkKFNTTF9DVFhfc2V0X2VjZGhfYXV0bykKKyAgICBTU0xfQ1RYX3NldF9lY2RoX2F1dG8oc2VsZi0+Y3R4LCAxKTsKKyNlbHNlCisgICAgeworICAgICAgICBFQ19LRVkgKmtleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShOSURfWDlfNjJfcHJpbWUyNTZ2MSk7CisgICAgICAgIFNTTF9DVFhfc2V0X3RtcF9lY2RoKHNlbGYtPmN0eCwga2V5KTsKKyAgICAgICAgRUNfS0VZX2ZyZWUoa2V5KTsKKyAgICB9CisjZW5kaWYKKyNlbmRpZgorCiAjZGVmaW5lIFNJRF9DVFggIlB5dGhvbiIKICAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQoc2VsZi0+Y3R4LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBTSURfQ1RYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoU0lEX0NUWCkpOwpAQCAtMTc5NCw5ICsyMDg0LDI4IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKK3N0YXRpYyBpbnQKK2NvbnRleHRfdHJhdmVyc2UoUHlTU0xDb250ZXh0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBQeV9WSVNJVChzZWxmLT5zZXRfaG9zdG5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnRleHRfY2xlYXIoUHlTU0xDb250ZXh0ICpzZWxmKQoreworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5X0NMRUFSKHNlbGYtPnNldF9ob3N0bmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQKIGNvbnRleHRfZGVhbGxvYyhQeVNTTENvbnRleHQgKnNlbGYpCiB7CisgICAgY29udGV4dF9jbGVhcihzZWxmKTsKICAgICBTU0xfQ1RYX2ZyZWUoc2VsZi0+Y3R4KTsKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECiAgICAgUHlNZW1fRnJlZShzZWxmLT5ucG5fcHJvdG9jb2xzKTsKQEAgLTE5NDMsMTAgKzIyNTIsNTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlIGZvciB2ZXJpZnlfbW9kZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGlmIChtb2RlID09IFNTTF9WRVJJRllfTk9ORSAmJiBzZWxmLT5jaGVja19ob3N0bmFtZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc2V0IHZlcmlmeV9tb2RlIHRvIENFUlRfTk9ORSB3aGVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19ob3N0bmFtZSBpcyBlbmFibGVkLiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzZWxmLT5jdHgsIG1vZGUsIE5VTEwpOwogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgSEFWRV9PUEVOU1NMX1ZFUklGWV9QQVJBTQorc3RhdGljIFB5T2JqZWN0ICoKK2dldF92ZXJpZnlfZmxhZ3MoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmbGFncyA9IFg1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFncyhzdG9yZS0+cGFyYW0pOworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF92ZXJpZnlfZmxhZ3MoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJnLCB2b2lkICpjKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBmbGFncywgc2V0LCBjbGVhcjsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiayIsICZuZXdfZmxhZ3MpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgZmxhZ3MgPSBYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3Moc3RvcmUtPnBhcmFtKTsKKyAgICBjbGVhciA9IGZsYWdzICYgfm5ld19mbGFnczsKKyAgICBzZXQgPSB+ZmxhZ3MgJiBuZXdfZmxhZ3M7CisgICAgaWYgKGNsZWFyKSB7CisgICAgICAgIGlmICghWDUwOV9WRVJJRllfUEFSQU1fY2xlYXJfZmxhZ3Moc3RvcmUtPnBhcmFtLCBjbGVhcikpIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzZXQpIHsKKyAgICAgICAgaWYgKCFYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3Moc3RvcmUtPnBhcmFtLCBzZXQpKSB7CisgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X29wdGlvbnMoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQogewpAQCAtMTk3Niw2ICsyMzMxLDMwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRfY2hlY2tfaG9zdG5hbWUoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoc2VsZi0+Y2hlY2tfaG9zdG5hbWUpOworfQorCitzdGF0aWMgaW50CitzZXRfY2hlY2tfaG9zdG5hbWUoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJnLCB2b2lkICpjKQoreworICAgIGludCBjaGVja19ob3N0bmFtZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInAiLCAmY2hlY2tfaG9zdG5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGNoZWNrX2hvc3RuYW1lICYmCisgICAgICAgICAgICBTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZShzZWxmLT5jdHgpID09IFNTTF9WRVJJRllfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19ob3N0bmFtZSBuZWVkcyBhIFNTTCBjb250ZXh0IHdpdGggZWl0aGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT5jaGVja19ob3N0bmFtZSA9IGNoZWNrX2hvc3RuYW1lOworICAgIHJldHVybiAwOworfQorCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeVRocmVhZFN0YXRlICp0aHJlYWRfc3RhdGU7CiAgICAgUHlPYmplY3QgKmNhbGxhYmxlOwpAQCAtMjAyMCw4ICsyMzk5LDggQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICBmcmVlKHB3X2luZm8tPnBhc3N3b3JkKTsKLSAgICBwd19pbmZvLT5wYXNzd29yZCA9IG1hbGxvYyhzaXplKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8tPnBhc3N3b3JkKTsKKyAgICBwd19pbmZvLT5wYXNzd29yZCA9IFB5TWVtX01hbGxvYyhzaXplKTsKICAgICBpZiAoIXB3X2luZm8tPnBhc3N3b3JkKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gYWxsb2NhdGUgcGFzc3dvcmQgYnVmZmVyIik7CkBAIC0yMTY1LDcyICsyNTQ0LDIxMiBAQAogICAgIH0KICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYihzZWxmLT5jdHgsIG9yaWdfcGFzc3dkX2NiKTsKICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YShzZWxmLT5jdHgsIG9yaWdfcGFzc3dkX3VzZXJkYXRhKTsKLSAgICBmcmVlKHB3X2luZm8ucGFzc3dvcmQpOworICAgIFB5TWVtX0ZyZWUocHdfaW5mby5wYXNzd29yZCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiAKIGVycm9yOgogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfY2IpOwogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfdXNlcmRhdGEpOwotICAgIGZyZWUocHdfaW5mby5wYXNzd29yZCk7CisgICAgUHlNZW1fRnJlZShwd19pbmZvLnBhc3N3b3JkKTsKICAgICBQeV9YREVDUkVGKGtleWZpbGVfYnl0ZXMpOwogICAgIFB5X1hERUNSRUYoY2VydGZpbGVfYnl0ZXMpOwogICAgIHJldHVybiBOVUxMOwogfQogCisvKiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIHJldHVybnMgLTEgb24gZXJyb3IKKyAqLworc3RhdGljIGludAorX2FkZF9jYV9jZXJ0cyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmRhdGEsIFB5X3NzaXplX3QgbGVuLAorICAgICAgICAgICAgICBpbnQgZmlsZXR5cGUpCit7CisgICAgQklPICpiaW9idWYgPSBOVUxMOworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIGludCByZXR2YWwgPSAwLCBlcnIsIGxvYWRlZCA9IDA7CisKKyAgICBhc3NlcnQoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX0FTTjEgfHwgZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX1BFTSk7CisKKyAgICBpZiAobGVuIDw9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiRW1wdHkgY2VydGlmaWNhdGUgZGF0YSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmIChsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNlcnRpZmljYXRlIGRhdGEgaXMgdG9vIGxvbmcuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBiaW9idWYgPSBCSU9fbmV3X21lbV9idWYoZGF0YSwgKGludClsZW4pOworICAgIGlmIChiaW9idWYgPT0gTlVMTCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoIkNhbid0IGFsbG9jYXRlIGJ1ZmZlciIsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBhc3NlcnQoc3RvcmUgIT0gTlVMTCk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBYNTA5ICpjZXJ0ID0gTlVMTDsKKyAgICAgICAgaW50IHI7CisKKyAgICAgICAgaWYgKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9BU04xKSB7CisgICAgICAgICAgICBjZXJ0ID0gZDJpX1g1MDlfYmlvKGJpb2J1ZiwgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjZXJ0ID0gUEVNX3JlYWRfYmlvX1g1MDkoYmlvYnVmLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmN0eC0+ZGVmYXVsdF9wYXNzd2RfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+Y3R4LT5kZWZhdWx0X3Bhc3N3ZF9jYWxsYmFja191c2VyZGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNlcnQgPT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgciA9IFg1MDlfU1RPUkVfYWRkX2NlcnQoc3RvcmUsIGNlcnQpOworICAgICAgICBYNTA5X2ZyZWUoY2VydCk7CisgICAgICAgIGlmICghcikgeworICAgICAgICAgICAgZXJyID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOworICAgICAgICAgICAgaWYgKChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfWDUwOSkgJiYKKyAgICAgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBYNTA5X1JfQ0VSVF9BTFJFQURZX0lOX0hBU0hfVEFCTEUpKSB7CisgICAgICAgICAgICAgICAgLyogY2VydCBhbHJlYWR5IGluIGhhc2ggdGFibGUsIG5vdCBhbiBlcnJvciAqLworICAgICAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2FkZWQrKzsKKyAgICB9CisKKyAgICBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgaWYgKChmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSkgJiYKKyAgICAgICAgICAgIChsb2FkZWQgPiAwKSAmJgorICAgICAgICAgICAgKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9BU04xKSAmJgorICAgICAgICAgICAgKEVSUl9HRVRfUkVBU09OKGVycikgPT0gQVNOMV9SX0hFQURFUl9UT09fTE9ORykpIHsKKyAgICAgICAgLyogRU9GIEFTTjEgZmlsZSwgbm90IGFuIGVycm9yICovCisgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICByZXR2YWwgPSAwOworICAgIH0gZWxzZSBpZiAoKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9QRU0pICYmCisgICAgICAgICAgICAgICAgICAgKGxvYWRlZCA+IDApICYmCisgICAgICAgICAgICAgICAgICAgKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9QRU0pICYmCisgICAgICAgICAgICAgICAgICAgKEVSUl9HRVRfUkVBU09OKGVycikgPT0gUEVNX1JfTk9fU1RBUlRfTElORSkpIHsKKyAgICAgICAgLyogRU9GIFBFTSBmaWxlLCBub3QgYW4gZXJyb3IgKi8KKyAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgIHJldHZhbCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHZhbCA9IC0xOworICAgIH0KKworICAgIEJJT19mcmVlKGJpb2J1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworCiBzdGF0aWMgUHlPYmplY3QgKgogbG9hZF92ZXJpZnlfbG9jYXRpb25zKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIGNoYXIgKmt3bGlzdFtdID0geyJjYWZpbGUiLCAiY2FwYXRoIiwgTlVMTH07Ci0gICAgUHlPYmplY3QgKmNhZmlsZSA9IE5VTEwsICpjYXBhdGggPSBOVUxMOworICAgIGNoYXIgKmt3bGlzdFtdID0geyJjYWZpbGUiLCAiY2FwYXRoIiwgImNhZGF0YSIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpjYWZpbGUgPSBOVUxMLCAqY2FwYXRoID0gTlVMTCwgKmNhZGF0YSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNhZmlsZV9ieXRlcyA9IE5VTEwsICpjYXBhdGhfYnl0ZXMgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKmNhZmlsZV9idWYgPSBOVUxMLCAqY2FwYXRoX2J1ZiA9IE5VTEw7Ci0gICAgaW50IHI7CisgICAgaW50IHIgPSAwLCBvayA9IDE7CiAKICAgICBlcnJubyA9IDA7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywKLSAgICAgICAgInxPTzpsb2FkX3ZlcmlmeV9sb2NhdGlvbnMiLCBrd2xpc3QsCi0gICAgICAgICZjYWZpbGUsICZjYXBhdGgpKQorICAgICAgICAifE9PTzpsb2FkX3ZlcmlmeV9sb2NhdGlvbnMiLCBrd2xpc3QsCisgICAgICAgICZjYWZpbGUsICZjYXBhdGgsICZjYWRhdGEpKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmIChjYWZpbGUgPT0gUHlfTm9uZSkKICAgICAgICAgY2FmaWxlID0gTlVMTDsKICAgICBpZiAoY2FwYXRoID09IFB5X05vbmUpCiAgICAgICAgIGNhcGF0aCA9IE5VTEw7Ci0gICAgaWYgKGNhZmlsZSA9PSBOVUxMICYmIGNhcGF0aCA9PSBOVUxMKSB7CisgICAgaWYgKGNhZGF0YSA9PSBQeV9Ob25lKQorICAgICAgICBjYWRhdGEgPSBOVUxMOworCisgICAgaWYgKGNhZmlsZSA9PSBOVUxMICYmIGNhcGF0aCA9PSBOVUxMICYmIGNhZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2FmaWxlIGFuZCBjYXBhdGggY2Fubm90IGJlIGJvdGggb21pdHRlZCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYWZpbGUsIGNhcGF0aCBhbmQgY2FkYXRhIGNhbm5vdCBiZSBhbGwgb21pdHRlZCIpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoY2FmaWxlICYmICFQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoY2FmaWxlLCAmY2FmaWxlX2J5dGVzKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhZmlsZSBzaG91bGQgYmUgYSB2YWxpZCBmaWxlc3lzdGVtIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjYXBhdGggJiYgIVB5VW5pY29kZV9GU0NvbnZlcnRlcihjYXBhdGgsICZjYXBhdGhfYnl0ZXMpKSB7Ci0gICAgICAgIFB5X1hERUNSRUYoY2FmaWxlX2J5dGVzKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYXBhdGggc2hvdWxkIGJlIGEgdmFsaWQgZmlsZXN5c3RlbSBwYXRoIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpZiAoY2FmaWxlKQotICAgICAgICBjYWZpbGVfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FmaWxlX2J5dGVzKTsKLSAgICBpZiAoY2FwYXRoKQotICAgICAgICBjYXBhdGhfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FwYXRoX2J5dGVzKTsKLSAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCi0gICAgciA9IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNlbGYtPmN0eCwgY2FmaWxlX2J1ZiwgY2FwYXRoX2J1Zik7Ci0gICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIC8qIHZhbGlkYXRhIGNhZGF0YSB0eXBlIGFuZCBsb2FkIGNhZGF0YSAqLworICAgIGlmIChjYWRhdGEpIHsKKyAgICAgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICAgICAgUHlPYmplY3QgKmNhZGF0YV9hc2NpaSA9IE5VTEw7CisKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihjYWRhdGEsICZidWYsIFB5QlVGX1NJTVBMRSkgPT0gMCkgeworICAgICAgICAgICAgaWYgKCFQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoJmJ1ZiwgJ0MnKSB8fCBidWYubmRpbSA+IDEpIHsKKyAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWRhdGEgc2hvdWxkIGJlIGEgY29udGlndW91cyBidWZmZXIgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHNpbmdsZSBkaW1lbnNpb24iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgciA9IF9hZGRfY2FfY2VydHMoc2VsZiwgYnVmLmJ1ZiwgYnVmLmxlbiwgU1NMX0ZJTEVUWVBFX0FTTjEpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICAgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBjYWRhdGFfYXNjaWkgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZyhjYWRhdGEpOworICAgICAgICAgICAgaWYgKGNhZGF0YV9hc2NpaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhZGF0YSBzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgb3IgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcy1saWtlIG9iamVjdCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByID0gX2FkZF9jYV9jZXJ0cyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY2FkYXRhX2FzY2lpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY2FkYXRhX2FzY2lpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAgUHlfREVDUkVGKGNhZGF0YV9hc2NpaSk7CisgICAgICAgICAgICBpZiAociA9PSAtMSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBsb2FkIGNhZmlsZSBvciBjYXBhdGggKi8KKyAgICBpZiAoY2FmaWxlIHx8IGNhcGF0aCkgeworICAgICAgICBpZiAoY2FmaWxlKQorICAgICAgICAgICAgY2FmaWxlX2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNhZmlsZV9ieXRlcyk7CisgICAgICAgIGlmIChjYXBhdGgpCisgICAgICAgICAgICBjYXBhdGhfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FwYXRoX2J5dGVzKTsKKyAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByID0gU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2VsZi0+Y3R4LCBjYWZpbGVfYnVmLCBjYXBhdGhfYnVmKTsKKyAgICAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHIgIT0gMSkgeworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgaWYgKGVycm5vICE9IDApIHsKKyAgICAgICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgZ290byBlbmQ7CisKKyAgZXJyb3I6CisgICAgb2sgPSAwOworICBlbmQ6CiAgICAgUHlfWERFQ1JFRihjYWZpbGVfYnl0ZXMpOwogICAgIFB5X1hERUNSRUYoY2FwYXRoX2J5dGVzKTsKLSAgICBpZiAociAhPSAxKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSAwKSB7Ci0gICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICB9CisgICAgaWYgKG9rKSB7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIyMzksNyArMjc1OCw3IEBACiAgICAgRklMRSAqZjsKICAgICBESCAqZGg7CiAKLSAgICBmID0gX1B5X2ZvcGVuKGZpbGVwYXRoLCAicmIiKTsKKyAgICBmID0gX1B5X2ZvcGVuX29iaihmaWxlcGF0aCwgInJiIik7CiAgICAgaWYgKGYgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgZmlsZXBhdGgpOwpAQCAtMjI4Nyw3ICsyODA2LDcgQEAKICAgICAgICAgICAgICZzb2NrLCAmc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAiaWRuYSIsICZob3N0bmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSNpZm5kZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmICFIQVZFX1NOSQogICAgICAgICBQeU1lbV9GcmVlKGhvc3RuYW1lKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzZXJ2ZXJfaG9zdG5hbWUgaXMgbm90IHN1cHBvcnRlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgeW91ciBPcGVuU1NMIGxpYnJhcnkiKTsKQEAgLTIyOTUsNyArMjgxNCw3IEBACiAjZW5kaWYKICAgICB9CiAKLSAgICByZXMgPSAoUHlPYmplY3QgKikgbmV3UHlTU0xTb2NrZXQoc2VsZi0+Y3R4LCBzb2NrLCBzZXJ2ZXJfc2lkZSwKKyAgICByZXMgPSAoUHlPYmplY3QgKikgbmV3UHlTU0xTb2NrZXQoc2VsZiwgc29jaywgc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lKTsKICAgICBpZiAoaG9zdG5hbWUgIT0gTlVMTCkKICAgICAgICAgUHlNZW1fRnJlZShob3N0bmFtZSk7CkBAIC0yMzgwLDkgKzI4OTksMjU5IEBACiB9CiAjZW5kaWYKIAorI2lmIEhBVkVfU05JICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKQorc3RhdGljIGludAorX3NlcnZlcm5hbWVfY2FsbGJhY2soU1NMICpzLCBpbnQgKmFsLCB2b2lkICphcmdzKQoreworICAgIGludCByZXQ7CisgICAgUHlTU0xDb250ZXh0ICpzc2xfY3R4ID0gKFB5U1NMQ29udGV4dCAqKSBhcmdzOworICAgIFB5U1NMU29ja2V0ICpzc2w7CisgICAgUHlPYmplY3QgKnNlcnZlcm5hbWVfbzsKKyAgICBQeU9iamVjdCAqc2VydmVybmFtZV9pZG5hOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgLyogVGhlIGhpZ2gtbGV2ZWwgc3NsLlNTTFNvY2tldCBvYmplY3QgKi8KKyAgICBQeU9iamVjdCAqc3NsX3NvY2tldDsKKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJuYW1lID0gU1NMX2dldF9zZXJ2ZXJuYW1lKHMsIFRMU0VYVF9OQU1FVFlQRV9ob3N0X25hbWUpOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisKKyAgICBpZiAoc3NsX2N0eC0+c2V0X2hvc3RuYW1lID09IE5VTEwpIHsKKyAgICAgICAgLyogcmVtb3ZlIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgdGhlIGNhbGwgYmFjayB3aGlsZSBpZiByZW1vdmluZyB0aGUKKyAgICAgICAgICogY2FsbGJhY2sgaXMgaW4gcHJvZ3Jlc3MgKi8KKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgfQorCisgICAgc3NsID0gU1NMX2dldF9hcHBfZGF0YShzKTsKKyAgICBhc3NlcnQoUHlTU0xTb2NrZXRfQ2hlY2soc3NsKSk7CisgICAgc3NsX3NvY2tldCA9IFB5V2Vha3JlZl9HZXRPYmplY3Qoc3NsLT5Tb2NrZXQpOworICAgIFB5X0lOQ1JFRihzc2xfc29ja2V0KTsKKyAgICBpZiAoc3NsX3NvY2tldCA9PSBQeV9Ob25lKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHNlcnZlcm5hbWUgPT0gTlVMTCkgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lLCBzc2xfY3R4LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlcnZlcm5hbWVfbyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhzZXJ2ZXJuYW1lKTsKKyAgICAgICAgaWYgKHNlcnZlcm5hbWVfbyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoKFB5T2JqZWN0ICopIHNzbF9jdHgpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzZXJ2ZXJuYW1lX2lkbmEgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc2VydmVybmFtZV9vLCAiaWRuYSIsIE5VTEwpOworICAgICAgICBpZiAoc2VydmVybmFtZV9pZG5hID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZXJ2ZXJuYW1lX28pOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcnZlcm5hbWVfbyk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzZXJ2ZXJuYW1lX28pOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJuYW1lX2lkbmEsIHNzbF9jdHgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoc2VydmVybmFtZV9pZG5hKTsKKyAgICB9CisgICAgUHlfREVDUkVGKHNzbF9zb2NrZXQpOworCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzc2xfY3R4LT5zZXRfaG9zdG5hbWUpOworICAgICAgICAqYWwgPSBTU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CisgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICAqYWwgPSAoaW50KSBQeUxvbmdfQXNMb25nKHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShyZXN1bHQpOworICAgICAgICAgICAgICAgICphbCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXQ7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihzc2xfc29ja2V0KTsKKyAgICAqYWwgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7CisgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKKworUHlEb2NfU1RSVkFSKFB5U1NMX3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrX2RvYywKKyJzZXRfc2VydmVybmFtZV9jYWxsYmFjayhtZXRob2QpXG5cCitcblwKK1RoaXMgc2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHNlcnZlciBuYW1lIGlzIHByb3ZpZGVkIGJ5XG5cCit0aGUgU1NML1RMUyBjbGllbnQgaW4gdGhlIFNOSSBleHRlbnNpb24uXG5cCitcblwKK0lmIHRoZSBhcmd1bWVudCBpcyBOb25lIHRoZW4gdGhlIGNhbGxiYWNrIGlzIGRpc2FibGVkLiBUaGUgbWV0aG9kIGlzIGNhbGxlZFxuXAord2l0aCB0aGUgU1NMU29ja2V0LCB0aGUgc2VydmVyIG5hbWUgYXMgYSBzdHJpbmcsIGFuZCB0aGUgU1NMQ29udGV4dCBvYmplY3QuXG5cCitTZWUgUkZDIDYwNjYgZm9yIGRldGFpbHMgb2YgdGhlIFNOSSBleHRlbnNpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzZXRfc2VydmVybmFtZV9jYWxsYmFjayhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworI2lmIEhBVkVfU05JICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKQorICAgIFB5T2JqZWN0ICpjYjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIsICZjYikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQ0xFQVIoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyAgICBpZiAoY2IgPT0gUHlfTm9uZSkgeworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzZWxmLT5jdHgsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGNiKSkgeworICAgICAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VsZi0+Y3R4LCBOVUxMKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNhbGxhYmxlIG9iamVjdCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKGNiKTsKKyAgICAgICAgc2VsZi0+c2V0X2hvc3RuYW1lID0gY2I7CisgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgX3NlcnZlcm5hbWVfY2FsbGJhY2spOworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9hcmcoc2VsZi0+Y3R4LCBzZWxmKTsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7CisjZWxzZQorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVGhlIFRMUyBleHRlbnNpb24gc2VydmVybmFtZSBjYWxsYmFjaywgIgorICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2ssICIKKyAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBpbiB0aGUgY3VycmVudCBPcGVuU1NMIGxpYnJhcnkuIik7CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9zdGF0c19kb2MsCisiY2VydF9zdG9yZV9zdGF0cygpIC0+IHsnY3JsJzogaW50LCAneDUwOV9jYSc6IGludCwgJ3g1MDknOiBpbnR9XG5cCitcblwKK1JldHVybnMgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLiBYLjUwOSBjZXJ0aWZpY2F0ZXMgd2l0aCBhXG5cCitDQSBleHRlbnNpb24gYW5kIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgaW5zaWRlIHRoZSBjb250ZXh0J3MgY2VydFxuXAorc3RvcmUuXG5cCitOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZVxuXAorYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjZXJ0X3N0b3JlX3N0YXRzKFB5U1NMQ29udGV4dCAqc2VsZikKK3sKKyAgICBYNTA5X1NUT1JFICpzdG9yZTsKKyAgICBYNTA5X09CSkVDVCAqb2JqOworICAgIGludCB4NTA5ID0gMCwgY3JsID0gMCwgcGtleSA9IDAsIGNhID0gMCwgaTsKKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZvciAoaSA9IDA7IGkgPCBza19YNTA5X09CSkVDVF9udW0oc3RvcmUtPm9ianMpOyBpKyspIHsKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBzd2l0Y2ggKG9iai0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBYNTA5X0xVX1g1MDk6CisgICAgICAgICAgICAgICAgeDUwOSsrOworICAgICAgICAgICAgICAgIGlmIChYNTA5X2NoZWNrX2NhKG9iai0+ZGF0YS54NTA5KSkgeworICAgICAgICAgICAgICAgICAgICBjYSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9MVV9DUkw6CisgICAgICAgICAgICAgICAgY3JsKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1MDlfTFVfUEtFWToKKyAgICAgICAgICAgICAgICBwa2V5Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qIElnbm9yZSBYNTA5X0xVX0ZBSUwsIFg1MDlfTFVfUkVUUlksIFg1MDlfTFVfUEtFWS4KKyAgICAgICAgICAgICAgICAgKiBBcyBmYXIgYXMgSSBjYW4gdGVsbCB0aGV5IGFyZSBpbnRlcm5hbCBzdGF0ZXMgYW5kIG5ldmVyCisgICAgICAgICAgICAgICAgICogc3RvcmVkIGluIGEgY2VydCBzdG9yZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJ7c2lzaXNpfSIsICJ4NTA5IiwgeDUwOSwgImNybCIsIGNybCwKKyAgICAgICAgIng1MDlfY2EiLCBjYSk7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfY2FfY2VydHNfZG9jLAorImdldF9jYV9jZXJ0cyhiaW5hcnlfZm9ybT1GYWxzZSkgLT4gbGlzdCBvZiBsb2FkZWQgY2VydGlmaWNhdGVcblwKK1xuXAorUmV0dXJucyBhIGxpc3Qgb2YgZGljdHMgd2l0aCBpbmZvcm1hdGlvbiBvZiBsb2FkZWQgQ0EgY2VydHMuIElmIHRoZVxuXAorb3B0aW9uYWwgYXJndW1lbnQgaXMgVHJ1ZSwgcmV0dXJucyBhIERFUi1lbmNvZGVkIGNvcHkgb2YgdGhlIENBIGNlcnRpZmljYXRlLlxuXAorTk9URTogQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmVcblwKK2JlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X2NhX2NlcnRzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJiaW5hcnlfZm9ybSIsIE5VTEx9OworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIFB5T2JqZWN0ICpjaSA9IE5VTEwsICpybGlzdCA9IE5VTEw7CisgICAgaW50IGk7CisgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8cDpnZXRfY2FfY2VydHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmJpbmFyeV9tb2RlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoKHJsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfWDUwOV9PQkpFQ1RfbnVtKHN0b3JlLT5vYmpzKTsgaSsrKSB7CisgICAgICAgIFg1MDlfT0JKRUNUICpvYmo7CisgICAgICAgIFg1MDkgKmNlcnQ7CisKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBpZiAob2JqLT50eXBlICE9IFg1MDlfTFVfWDUwOSkgeworICAgICAgICAgICAgLyogbm90IGEgeDUwOSBjZXJ0ICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBDQSBmb3IgYW55IHB1cnBvc2UgKi8KKyAgICAgICAgY2VydCA9IG9iai0+ZGF0YS54NTA5OworICAgICAgICBpZiAoIVg1MDlfY2hlY2tfY2EoY2VydCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChiaW5hcnlfbW9kZSkgeworICAgICAgICAgICAgY2kgPSBfY2VydGlmaWNhdGVfdG9fZGVyKGNlcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2kgPSBfZGVjb2RlX2NlcnRpZmljYXRlKGNlcnQpOworICAgICAgICB9CisgICAgICAgIGlmIChjaSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJsaXN0LCBjaSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoY2kpOworICAgIH0KKyAgICByZXR1cm4gcmxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihjaSk7CisgICAgUHlfWERFQ1JFRihybGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIGNvbnRleHRfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY2hlY2tfaG9zdG5hbWUiLCAoZ2V0dGVyKSBnZXRfY2hlY2tfaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF9jaGVja19ob3N0bmFtZSwgTlVMTH0sCiAgICAgeyJvcHRpb25zIiwgKGdldHRlcikgZ2V0X29wdGlvbnMsCiAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X29wdGlvbnMsIE5VTEx9LAorI2lmZGVmIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KKyAgICB7InZlcmlmeV9mbGFncyIsIChnZXR0ZXIpIGdldF92ZXJpZnlfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfdmVyaWZ5X2ZsYWdzLCBOVUxMfSwKKyNlbmRpZgogICAgIHsidmVyaWZ5X21vZGUiLCAoZ2V0dGVyKSBnZXRfdmVyaWZ5X21vZGUsCiAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF92ZXJpZnlfbW9kZSwgTlVMTH0sCiAgICAge05VTEx9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC0yNDA5LDYgKzMxNzgsMTIgQEAKICAgICB7InNldF9lY2RoX2N1cnZlIiwgKFB5Q0Z1bmN0aW9uKSBzZXRfZWNkaF9jdXJ2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9PLCBOVUxMfSwKICNlbmRpZgorICAgIHsic2V0X3NlcnZlcm5hbWVfY2FsbGJhY2siLCAoUHlDRnVuY3Rpb24pIHNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsIFB5U1NMX3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrX2RvY30sCisgICAgeyJjZXJ0X3N0b3JlX3N0YXRzIiwgKFB5Q0Z1bmN0aW9uKSBjZXJ0X3N0b3JlX3N0YXRzLAorICAgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgUHlTU0xfZ2V0X3N0YXRzX2RvY30sCisgICAgeyJnZXRfY2FfY2VydHMiLCAoUHlDRnVuY3Rpb24pIGdldF9jYV9jZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfZ2V0X2NhX2NlcnRzX2RvY30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjQzMiwxMCArMzIwNywxMCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLworICAgICh0cmF2ZXJzZXByb2MpIGNvbnRleHRfdHJhdmVyc2UsICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KKyAgICAoaW5xdWlyeSkgY29udGV4dF9jbGVhciwgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KQEAgLTI0NjIsMTIgKzMyMzcsMTcgQEAKIFB5U1NMX1JBTkRfYWRkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpidWY7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9zc2l6ZV90IGxlbiwgd3JpdHRlbjsKICAgICBkb3VibGUgZW50cm9weTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNkOlJBTkRfYWRkIiwgJmJ1ZiwgJmxlbiwgJmVudHJvcHkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBSQU5EX2FkZChidWYsIGxlbiwgZW50cm9weSk7CisgICAgZG8geworICAgICAgICB3cml0dGVuID0gUHlfTUlOKGxlbiwgSU5UX01BWCk7CisgICAgICAgIFJBTkRfYWRkKGJ1ZiwgKGludCl3cml0dGVuLCBlbnRyb3B5KTsKKyAgICAgICAgYnVmICs9IHdyaXR0ZW47CisgICAgICAgIGxlbiAtPSB3cml0dGVuOworICAgIH0gd2hpbGUgKGxlbik7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtMjU5MCw3ICszMzcwLDM4NCBAQAogI2VuZGlmIC8qIEhBVkVfT1BFTlNTTF9SQU5EICovCiAKIAorUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19kb2MsCisiZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgLT4gdHVwbGVcblwKK1xuXAorUmV0dXJuIHNlYXJjaCBwYXRocyBhbmQgZW52aXJvbm1lbnQgdmFycyB0aGF0IGFyZSB1c2VkIGJ5IFNTTENvbnRleHQnc1xuXAorc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgdG8gbG9hZCBkZWZhdWx0IENBcy4gVGhlIHZhbHVlcyBhcmVcblwKKydjZXJ0X2ZpbGVfZW52JywgJ2NlcnRfZmlsZScsICdjZXJ0X2Rpcl9lbnYnLCAnY2VydF9kaXInLiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpvZmlsZV9lbnYgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvZmlsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9kaXJfZW52ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2RpciA9IE5VTEw7CisKKyNkZWZpbmUgY29udmVydChpbmZvLCB0YXJnZXQpIHsgXAorICAgICAgICBjb25zdCBjaGFyICp0bXAgPSAoaW5mbyk7IFwKKyAgICAgICAgdGFyZ2V0ID0gTlVMTDsgXAorICAgICAgICBpZiAoIXRtcCkgeyBQeV9JTkNSRUYoUHlfTm9uZSk7IHRhcmdldCA9IFB5X05vbmU7IH0gXAorICAgICAgICBlbHNlIGlmICgodGFyZ2V0ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdCh0bXApKSA9PSBOVUxMKSB7IFwKKyAgICAgICAgICAgIHRhcmdldCA9IFB5Qnl0ZXNfRnJvbVN0cmluZyh0bXApOyB9IFwKKyAgICAgICAgaWYgKCF0YXJnZXQpIGdvdG8gZXJyb3I7IFwKKyAgICB9IHdoaWxlKDApCisKKyAgICBjb252ZXJ0KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudigpLCBvZmlsZV9lbnYpOworICAgIGNvbnZlcnQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGUoKSwgb2ZpbGUpOworICAgIGNvbnZlcnQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnYoKSwgb2Rpcl9lbnYpOworICAgIGNvbnZlcnQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2RpcigpLCBvZGlyKTsKKyN1bmRlZiBjb252ZXJ0CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTk5OTiIsIG9maWxlX2Vudiwgb2ZpbGUsIG9kaXJfZW52LCBvZGlyKTsKKworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKG9maWxlX2Vudik7CisgICAgUHlfWERFQ1JFRihvZmlsZSk7CisgICAgUHlfWERFQ1JFRihvZGlyX2Vudik7CisgICAgUHlfWERFQ1JFRihvZGlyKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0KgorYXNuMW9iajJweShBU04xX09CSkVDVCAqb2JqKQoreworICAgIGludCBuaWQ7CisgICAgY29uc3QgY2hhciAqbG4sICpzbjsKKyAgICBjaGFyIGJ1ZlsxMDBdOworICAgIFB5X3NzaXplX3QgYnVmbGVuOworCisgICAgbmlkID0gT0JKX29iajJuaWQob2JqKTsKKyAgICBpZiAobmlkID09IE5JRF91bmRlZikgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIlVua25vd24gb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzbiA9IE9CSl9uaWQyc24obmlkKTsKKyAgICBsbiA9IE9CSl9uaWQybG4obmlkKTsKKyAgICBidWZsZW4gPSBPQkpfb2JqMnR4dChidWYsIHNpemVvZihidWYpLCBvYmosIDEpOworICAgIGlmIChidWZsZW4gPCAwKSB7CisgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGJ1ZmxlbikgeworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaXNzcyMiLCBuaWQsIHNuLCBsbiwgYnVmLCBidWZsZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpc3NPIiwgbmlkLCBzbiwgbG4sIFB5X05vbmUpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX3R4dDJvYmpfZG9jLAorInR4dDJvYmoodHh0LCBuYW1lPUZhbHNlKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCitcblwKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNULiBCeSBkZWZhdWx0XG5cCitvYmplY3RzIGFyZSBsb29rZWQgdXAgYnkgT0lELiBXaXRoIG5hbWU9VHJ1ZSBzaG9ydCBhbmQgbG9uZyBuYW1lIGFyZSBhbHNvXG5cCittYXRjaGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitQeVNTTF90eHQyb2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InR4dCIsICJuYW1lIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgY2hhciAqdHh0OworICAgIGludCBuYW1lID0gMDsKKyAgICBBU04xX09CSkVDVCAqb2JqOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8cDp0eHQyb2JqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZ0eHQsICZuYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb2JqID0gT0JKX3R4dDJvYmoodHh0LCBuYW1lID8gMCA6IDEpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gb2JqZWN0ICclLjEwMHMnIiwgdHh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IGFzbjFvYmoycHkob2JqKTsKKyAgICBBU04xX09CSkVDVF9mcmVlKG9iaik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX25pZDJvYmpfZG9jLAorIm5pZDJvYmoobmlkKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCitcblwKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNUIGJ5IE5JRC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorUHlTU0xfbmlkMm9iaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgaW50IG5pZDsKKyAgICBBU04xX09CSkVDVCAqb2JqOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm5pZDJvYmoiLCAmbmlkKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKG5pZCA8IE5JRF91bmRlZikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIk5JRCBtdXN0IGJlIHBvc2l0aXZlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb2JqID0gT0JKX25pZDJvYmoobmlkKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAlaSIsIG5pZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBhc24xb2JqMnB5KG9iaik7CisgICAgQVNOMV9PQkpFQ1RfZnJlZShvYmopOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZmRlZiBfTVNDX1ZFUgorCitzdGF0aWMgUHlPYmplY3QqCitjZXJ0RW5jb2RpbmdUeXBlKERXT1JEIGVuY29kaW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKng1MDlfYXNuID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKnBrY3NfN19hc24gPSBOVUxMOworCisgICAgaWYgKHg1MDlfYXNuID09IE5VTEwpIHsKKyAgICAgICAgeDUwOV9hc24gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygieDUwOV9hc24iKTsKKyAgICAgICAgaWYgKHg1MDlfYXNuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBrY3NfN19hc24gPT0gTlVMTCkgeworICAgICAgICBwa2NzXzdfYXNuID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoInBrY3NfN19hc24iKTsKKyAgICAgICAgaWYgKHBrY3NfN19hc24gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzd2l0Y2goZW5jb2RpbmdUeXBlKSB7CisgICAgY2FzZSBYNTA5X0FTTl9FTkNPRElORzoKKyAgICAgICAgUHlfSU5DUkVGKHg1MDlfYXNuKTsKKyAgICAgICAgcmV0dXJuIHg1MDlfYXNuOworICAgIGNhc2UgUEtDU183X0FTTl9FTkNPRElORzoKKyAgICAgICAgUHlfSU5DUkVGKHBrY3NfN19hc24pOworICAgICAgICByZXR1cm4gcGtjc183X2FzbjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGVuY29kaW5nVHlwZSk7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QqCitwYXJzZUtleVVzYWdlKFBDQ0VSVF9DT05URVhUIHBDZXJ0Q3R4LCBEV09SRCBmbGFncykKK3sKKyAgICBDRVJUX0VOSEtFWV9VU0FHRSAqdXNhZ2U7CisgICAgRFdPUkQgc2l6ZSwgZXJyb3IsIGk7CisgICAgUHlPYmplY3QgKnJldHZhbDsKKworICAgIGlmICghQ2VydEdldEVuaGFuY2VkS2V5VXNhZ2UocENlcnRDdHgsIGZsYWdzLCBOVUxMLCAmc2l6ZSkpIHsKKyAgICAgICAgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IENSWVBUX0VfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyb3IpOworICAgIH0KKworICAgIHVzYWdlID0gKENFUlRfRU5IS0VZX1VTQUdFKilQeU1lbV9NYWxsb2Moc2l6ZSk7CisgICAgaWYgKHVzYWdlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQorCisgICAgLyogTm93IGdldCB0aGUgYWN0dWFsIGVuaGFuY2VkIHVzYWdlIHByb3BlcnR5ICovCisgICAgaWYgKCFDZXJ0R2V0RW5oYW5jZWRLZXlVc2FnZShwQ2VydEN0eCwgZmxhZ3MsIHVzYWdlLCAmc2l6ZSkpIHsKKyAgICAgICAgUHlNZW1fRnJlZSh1c2FnZSk7CisgICAgICAgIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBDUllQVF9FX05PVF9GT1VORCkgeworICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm9yKTsKKyAgICB9CisgICAgcmV0dmFsID0gUHlTZXRfTmV3KE5VTEwpOworICAgIGlmIChyZXR2YWwgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNhZ2UtPmNVc2FnZUlkZW50aWZpZXI7ICsraSkgeworICAgICAgICBpZiAodXNhZ2UtPnJncHN6VXNhZ2VJZGVudGlmaWVyW2ldKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqb2lkOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIG9pZCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHVzYWdlLT5yZ3BzelVzYWdlSWRlbnRpZmllcltpXSk7CisgICAgICAgICAgICBpZiAob2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQocmV0dmFsLCBvaWQpOworICAgICAgICAgICAgUHlfREVDUkVGKG9pZCk7CisgICAgICAgICAgICBpZiAoZXJyID09IC0xKSB7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBlcnJvcjoKKyAgICBQeU1lbV9GcmVlKHVzYWdlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXNfZG9jLAorImVudW1fY2VydGlmaWNhdGVzKHN0b3JlX25hbWUpIC0+IFtdXG5cCitcblwKK1JldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIGNlcnQgc3RvcmUuIHN0b3JlX25hbWUgbWF5IGJlIG9uZSBvZlxuXAorJ0NBJywgJ1JPT1QnIG9yICdNWScuIFRoZSBzeXN0ZW0gbWF5IHByb3ZpZGUgbW9yZSBjZXJ0IHN0b3JhZ2VzLCB0b28uXG5cCitUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGJ5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4gVGhlIHRydXN0IHNldHRpbmcgaXMgZWl0aGVyIGEgc2V0IG9mIE9JRHMgb3IgdGhlXG5cCitib29sZWFuIFRydWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9lbnVtX2NlcnRpZmljYXRlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY2hhciAqc3RvcmVfbmFtZTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUENDRVJUX0NPTlRFWFQgcENlcnRDdHggPSBOVUxMOworICAgIFB5T2JqZWN0ICprZXl1c2FnZSA9IE5VTEwsICpjZXJ0ID0gTlVMTCwgKmVuYyA9IE5VTEwsICp0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8czplbnVtX2NlcnRpZmljYXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc3RvcmVfbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoU3RvcmUgPSBDZXJ0T3BlblN5c3RlbVN0b3JlKChIQ1JZUFRQUk9WKU5VTEwsIHN0b3JlX25hbWUpOworICAgIGlmIChoU3RvcmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisKKyAgICB3aGlsZSAocENlcnRDdHggPSBDZXJ0RW51bUNlcnRpZmljYXRlc0luU3RvcmUoaFN0b3JlLCBwQ2VydEN0eCkpIHsKKyAgICAgICAgY2VydCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIqKXBDZXJ0Q3R4LT5wYkNlcnRFbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2VydEN0eC0+Y2JDZXJ0RW5jb2RlZCk7CisgICAgICAgIGlmICghY2VydCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZW5jID0gY2VydEVuY29kaW5nVHlwZShwQ2VydEN0eC0+ZHdDZXJ0RW5jb2RpbmdUeXBlKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGtleXVzYWdlID0gcGFyc2VLZXlVc2FnZShwQ2VydEN0eCwgQ0VSVF9GSU5EX1BST1BfT05MWV9FTkhLRVlfVVNBR0VfRkxBRyk7CisgICAgICAgIGlmIChrZXl1c2FnZSA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5dXNhZ2UpOworICAgICAgICAgICAga2V5dXNhZ2UgPSBwYXJzZUtleVVzYWdlKHBDZXJ0Q3R4LCBDRVJUX0ZJTkRfRVhUX09OTFlfRU5IS0VZX1VTQUdFX0ZMQUcpOworICAgICAgICB9CisgICAgICAgIGlmIChrZXl1c2FnZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0dXAgPSBQeVR1cGxlX05ldygzKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAwLCBjZXJ0KTsKKyAgICAgICAgY2VydCA9IE5VTEw7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAxLCBlbmMpOworICAgICAgICBlbmMgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMiwga2V5dXNhZ2UpOworICAgICAgICBrZXl1c2FnZSA9IE5VTEw7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgdHVwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0dXApOworICAgIH0KKyAgICBpZiAocENlcnRDdHgpIHsKKyAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgQ2VydEZyZWVDZXJ0aWZpY2F0ZUNvbnRleHQocENlcnRDdHgpOworICAgIH0KKworICAgIC8qIEluIGVycm9yIGNhc2VzIGNlcnQsIGVuYyBhbmQgdHVwIG1heSBub3QgYmUgTlVMTCAqLworICAgIFB5X1hERUNSRUYoY2VydCk7CisgICAgUHlfWERFQ1JFRihlbmMpOworICAgIFB5X1hERUNSRUYoa2V5dXNhZ2UpOworICAgIFB5X1hERUNSRUYodHVwKTsKKworICAgIGlmICghQ2VydENsb3NlU3RvcmUoaFN0b3JlLCAwKSkgeworICAgICAgICAvKiBUaGlzIGVycm9yIGNhc2UgbWlnaHQgc2hhZG93IGFub3RoZXIgZXhjZXB0aW9uLiovCisgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2VudW1fY3Jsc19kb2MsCisiZW51bV9jcmxzKHN0b3JlX25hbWUpIC0+IFtdXG5cCitcblwKK1JldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzJyBjZXJ0IHN0b3JlLiBzdG9yZV9uYW1lIG1heSBiZSBvbmUgb2ZcblwKKydDQScsICdST09UJyBvciAnTVknLiBUaGUgc3lzdGVtIG1heSBwcm92aWRlIG1vcmUgY2VydCBzdG9yYWdlcywgdG9vLlxuXAorVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChieXRlcywgZW5jb2RpbmdfdHlwZSkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2VudW1fY3JscyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY2hhciAqc3RvcmVfbmFtZTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUENDUkxfQ09OVEVYVCBwQ3JsQ3R4ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY3JsID0gTlVMTCwgKmVuYyA9IE5VTEwsICp0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8czplbnVtX2NybHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnN0b3JlX25hbWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaFN0b3JlID0gQ2VydE9wZW5TeXN0ZW1TdG9yZSgoSENSWVBUUFJPVilOVUxMLCBzdG9yZV9uYW1lKTsKKyAgICBpZiAoaFN0b3JlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorCisgICAgd2hpbGUgKHBDcmxDdHggPSBDZXJ0RW51bUNSTHNJblN0b3JlKGhTdG9yZSwgcENybEN0eCkpIHsKKyAgICAgICAgY3JsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciopcENybEN0eC0+cGJDcmxFbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3JsQ3R4LT5jYkNybEVuY29kZWQpOworICAgICAgICBpZiAoIWNybCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZW5jID0gY2VydEVuY29kaW5nVHlwZShwQ3JsQ3R4LT5kd0NlcnRFbmNvZGluZ1R5cGUpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0dXAgPSBQeVR1cGxlX05ldygyKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAwLCBjcmwpOworICAgICAgICBjcmwgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMSwgZW5jKTsKKyAgICAgICAgZW5jID0gTlVMTDsKKworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIHR1cCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIodHVwKTsKKyAgICB9CisgICAgaWYgKHBDcmxDdHgpIHsKKyAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgQ2VydEZyZWVDUkxDb250ZXh0KHBDcmxDdHgpOworICAgIH0KKworICAgIC8qIEluIGVycm9yIGNhc2VzIGNlcnQsIGVuYyBhbmQgdHVwIG1heSBub3QgYmUgTlVMTCAqLworICAgIFB5X1hERUNSRUYoY3JsKTsKKyAgICBQeV9YREVDUkVGKGVuYyk7CisgICAgUHlfWERFQ1JFRih0dXApOworCisgICAgaWYgKCFDZXJ0Q2xvc2VTdG9yZShoU3RvcmUsIDApKSB7CisgICAgICAgIC8qIFRoaXMgZXJyb3IgY2FzZSBtaWdodCBzaGFkb3cgYW5vdGhlciBleGNlcHRpb24uKi8KKyAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYgLyogX01TQ19WRVIgKi8KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuICovCiAKQEAgLTI2MDksNiArMzc2NiwxOCBAQAogICAgIHsiUkFORF9zdGF0dXMiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeVNTTF9SQU5EX3N0YXR1cywgTUVUSF9OT0FSR1MsCiAgICAgIFB5U1NMX1JBTkRfc3RhdHVzX2RvY30sCiAjZW5kaWYKKyAgICB7ImdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyIsIChQeUNGdW5jdGlvbilQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMsCisgICAgIE1FVEhfTk9BUkdTLCBQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfZG9jfSwKKyNpZmRlZiBfTVNDX1ZFUgorICAgIHsiZW51bV9jZXJ0aWZpY2F0ZXMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2VudW1fY2VydGlmaWNhdGVzX2RvY30sCisgICAgeyJlbnVtX2NybHMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZW51bV9jcmxzLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF9lbnVtX2NybHNfZG9jfSwKKyNlbmRpZgorICAgIHsidHh0Mm9iaiIsIChQeUNGdW5jdGlvbilQeVNTTF90eHQyb2JqLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF90eHQyb2JqX2RvY30sCisgICAgeyJuaWQyb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX25pZDJvYmosCisgICAgIE1FVEhfVkFSQVJHUywgUHlTU0xfbmlkMm9ial9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKQEAgLTI2NzAsNyArMzgzOSw3IEBACiAgICAgaWYgKF9zc2xfbG9ja3MgPT0gTlVMTCkgewogICAgICAgICBfc3NsX2xvY2tzX2NvdW50ID0gQ1JZUFRPX251bV9sb2NrcygpOwogICAgICAgICBfc3NsX2xvY2tzID0gKFB5VGhyZWFkX3R5cGVfbG9jayAqKQotICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQeVRocmVhZF90eXBlX2xvY2spICogX3NzbF9sb2Nrc19jb3VudCk7CisgICAgICAgICAgICBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5VGhyZWFkX3R5cGVfbG9jaykgKiBfc3NsX2xvY2tzX2NvdW50KTsKICAgICAgICAgaWYgKF9zc2xfbG9ja3MgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBtZW1zZXQoX3NzbF9sb2NrcywgMCwKQEAgLTI2ODIsNyArMzg1MSw3IEBACiAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgIGogPCBpOyAgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhfc3NsX2xvY2tzW2pdKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnJlZShfc3NsX2xvY2tzKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKF9zc2xfbG9ja3MpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODM2LDYgKzQwMDUsNjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfQ0VSVF9PUFRJT05BTCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNFUlRfUkVRVUlSRUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9DRVJUX1JFUVVJUkVEKTsKKyAgICAvKiBDUkwgdmVyaWZpY2F0aW9uIGZvciB2ZXJpZmljYXRpb25fZmxhZ3MgKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX0RFRkFVTFQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfQ1JMX0NIRUNLX0xFQUYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDS3xYNTA5X1ZfRkxBR19DUkxfQ0hFQ0tfQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX1g1MDlfU1RSSUNUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19YNTA5X1NUUklDVCk7CisKKyAgICAvKiBBbGVydCBEZXNjcmlwdGlvbnMgZnJvbSBzc2wuaCAqLworICAgIC8qIG5vdGUgUkVTRVJWRUQgY29uc3RhbnRzIG5vIGxvbmdlciBpbnRlbmRlZCBmb3IgdXNlIGhhdmUgYmVlbiByZW1vdmVkICovCisgICAgLyogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNiAqLworCisjZGVmaW5lIEFERF9BRF9DT05TVEFOVChzKSBcCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMRVJUX0RFU0NSSVBUSU9OXyIjcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9BRF8jI3MpCisKKyAgICBBRERfQURfQ09OU1RBTlQoQ0xPU0VfTk9USUZZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVU5FWFBFQ1RFRF9NRVNTQUdFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX1JFQ09SRF9NQUMpOworICAgIEFERF9BRF9DT05TVEFOVChSRUNPUkRfT1ZFUkZMT1cpOworICAgIEFERF9BRF9DT05TVEFOVChERUNPTVBSRVNTSU9OX0ZBSUxVUkUpOworICAgIEFERF9BRF9DT05TVEFOVChIQU5EU0hBS0VfRkFJTFVSRSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9DRVJUSUZJQ0FURSk7CisgICAgQUREX0FEX0NPTlNUQU5UKFVOU1VQUE9SVEVEX0NFUlRJRklDQVRFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfUkVWT0tFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX0VYUElSRUQpOworICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9VTktOT1dOKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSUxMRUdBTF9QQVJBTUVURVIpOworICAgIEFERF9BRF9DT05TVEFOVChVTktOT1dOX0NBKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQUNDRVNTX0RFTklFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ09ERV9FUlJPUik7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ1JZUFRfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChQUk9UT0NPTF9WRVJTSU9OKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5TVUZGSUNJRU5UX1NFQ1VSSVRZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5URVJOQUxfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChVU0VSX0NBTkNFTExFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKE5PX1JFTkVHT1RJQVRJT04pOworICAgIC8qIE5vdCBhbGwgY29uc3RhbnRzIGFyZSBpbiBvbGQgT3BlblNTTCB2ZXJzaW9ucyAqLworI2lmZGVmIFNTTF9BRF9VTlNVUFBPUlRFRF9FWFRFTlNJT04KKyAgICBBRERfQURfQ09OU1RBTlQoVU5TVVBQT1JURURfRVhURU5TSU9OKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9VTlJFQ09HTklaRURfTkFNRQorICAgIEFERF9BRF9DT05TVEFOVChVTlJFQ09HTklaRURfTkFNRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkKKyAgICBBRERfQURfQ09OU1RBTlQoVU5LTk9XTl9QU0tfSURFTlRJVFkpOworI2VuZGlmCisKKyN1bmRlZiBBRERfQURfQ09OU1RBTlQKIAogICAgIC8qIHByb3RvY29sIHZlcnNpb25zICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgpAQCAtMjg0OCw2ICs0MDc3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMjMpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMSk7CisjaWYgSEFWRV9UTFN2MV8yCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxXzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxXzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMik7CisjZW5kaWYKIAogICAgIC8qIHByb3RvY29sIG9wdGlvbnMgKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfQUxMIiwKQEAgLTI4NTUsNiArNDA5MCwxMCBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19TU0x2MiIsIFNTTF9PUF9OT19TU0x2Mik7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1NTTHYzIiwgU1NMX09QX05PX1NTTHYzKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fVExTdjEiLCBTU0xfT1BfTk9fVExTdjEpOworI2lmIEhBVkVfVExTdjFfMgorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MV8xIiwgU1NMX09QX05PX1RMU3YxXzEpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MV8yIiwgU1NMX09QX05PX1RMU3YxXzIpOworI2VuZGlmCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX1NJTkdMRV9ESF9VU0UiLCBTU0xfT1BfU0lOR0xFX0RIX1VTRSk7CkBAIC0yODY2LDcgKzQxMDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9PUF9OT19DT01QUkVTU0lPTik7CiAjZW5kaWYKIAotI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKKyNpZiBIQVZFX1NOSQogICAgIHIgPSBQeV9UcnVlOwogI2Vsc2UKICAgICByID0gUHlfRmFsc2U7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zdGF0LmMgYi9Nb2R1bGVzL19zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwMWZhOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3N0YXQuYwpAQCAtMCwwICsxLDU2MyBAQAorLyogc3RhdC5oIGludGVyZmFjZQorICoKKyAqIFRoZSBtb2R1bGUgZGVmaW5lcyBhbGwgU19JRiosIFNfSSosIFVGXyosIFNGXyogYW5kIFNUXyogY29uc3RhbnRzIHRvCisgKiBzZW5zaWJsZSBkZWZhdWx0IHZhbHVlcyBhcyB3ZWxsIGFzIGRlZmluZXMgU19JUyooKSBtYWNyb3MgaW4gb3JkZXIgdG8ga2VlcAorICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQgc3RhdC5weSBtb2R1bGUuCisgKgorICogTmV3IGNvbnN0YW50cyBhbmQgbWFjcm9zIHN1Y2ggYXMgU19JRkRPT1IgLyBTX0lTRE9PUigpIGFyZSBhbHdheXMgZGVmaW5lZAorICogYXMgaW50IDAuCisgKgorICogTk9URTogUE9TSVggb25seSBkZWZpbmVzIHRoZSB2YWx1ZXMgb2YgdGhlIFNfSSogcGVybWlzc2lvbiBiaXRzLgorICoKKyAqLworCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKyNpbmNsdWRlICJQeXRob24uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX1RZUEVTX0ggKi8KKworI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYgLyogSEFWRV9TWVNfU1RBVF9IICovCisKKyNpZmRlZiBNU19XSU5ET1dTCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKKyNlbmRpZgorCisvKiBGcm9tIFB5dGhvbidzIHN0YXQucHkgKi8KKyNpZm5kZWYgU19JTU9ERQorIyAgZGVmaW5lIFNfSU1PREUgMDc3NzcKKyNlbmRpZgorCisvKiBTX0lGWFhYIGNvbnN0YW50cyAoZmlsZSB0eXBlcykKKyAqCisgKiBPbmx5IHRoZSBuYW1lcyBhcmUgZGVmaW5lZCBieSBQT1NJWCBidXQgbm90IHRoZWlyIHZhbHVlLiBBbGwgY29tbW9uIGZpbGUKKyAqIHR5cGVzIHNlZW1zIHRvIGhhdmUgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBvbiBhbGwgcGxhdGZvcm1zLCB0aG91Z2guCisgKgorICogcHlwb3J0LmggZ3VhcmFudGVlcyBTX0lGTVQsIFNfSUZESVIsIFNfSUZDSFIsIFNfSUZSRUcgYW5kIFNfSUZMTksKKyAqLworCisjaWZuZGVmIFNfSUZCTEsKKyMgIGRlZmluZSBTX0lGQkxLIDAwNjAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZJRk8KKyMgIGRlZmluZSBTX0lGSUZPIDAwMTAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZTT0NLCisjICBkZWZpbmUgU19JRlNPQ0sgMDE0MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRkRPT1IKKyMgIGRlZmluZSBTX0lGRE9PUiAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGUE9SVAorIyAgZGVmaW5lIFNfSUZQT1JUIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZXSFQKKyMgIGRlZmluZSBTX0lGV0hUIDAKKyNlbmRpZgorCisKKy8qIFNfSVNYWFgoKQorICogcHlwb3J0LmggZGVmaW5lcyBTX0lTRElSKCksIFNfSVNSRUcoKSBhbmQgU19JU0NIUigpCisgKi8KKworI2lmbmRlZiBTX0lTQkxLCisjICBkZWZpbmUgU19JU0JMSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRkJMSykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNGSUZPCisjICBkZWZpbmUgU19JU0ZJRk8obW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZJRk8pCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTE5LCisjICBkZWZpbmUgU19JU0xOSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRkxOSykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNTT0NLCisjICBkZWZpbmUgU19JU1NPQ0sobW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZTT0NLKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU0RPT1IKKyMgIGRlZmluZSBTX0lTRE9PUihtb2RlKSAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lTUE9SVAorIyAgZGVmaW5lIFNfSVNQT1JUKG1vZGUpIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNXSFQKKyMgIGRlZmluZSBTX0lTV0hUKG1vZGUpIDAKKyNlbmRpZgorCisKKy8qIFNfSSogZmlsZSBwZXJtaXNzaW9uCisgKgorICogVGhlIHBlcm1pc3Npb24gYml0IHZhbHVlIGFyZSBkZWZpbmVkIGJ5IFBPU0lYIHN0YW5kYXJkcy4KKyAqLworI2lmbmRlZiBTX0lTVUlECisjICBkZWZpbmUgU19JU1VJRCAwNDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU0dJRAorIyAgZGVmaW5lIFNfSVNHSUQgMDIwMDAKKyNlbmRpZgorCisvKiB3aGF0IGlzIFNfRU5GTVQ/ICovCisjaWZuZGVmIFNfRU5GTVQKKyMgIGRlZmluZSBTX0VORk1UIFNfSVNHSUQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNWVFgKKyMgIGRlZmluZSBTX0lTVlRYIDAxMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSRUFECisjICBkZWZpbmUgU19JUkVBRCAwMDQwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JV1JJVEUKKyMgIGRlZmluZSBTX0lXUklURSAwMDIwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRVhFQworIyAgZGVmaW5lIFNfSUVYRUMgMDAxMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJXWFUKKyMgIGRlZmluZSBTX0lSV1hVIDAwNzAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSVVNSCisjICBkZWZpbmUgU19JUlVTUiAwMDQwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JV1VTUgorIyAgZGVmaW5lIFNfSVdVU1IgMDAyMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhVU1IKKyMgIGRlZmluZSBTX0lYVVNSIDAwMTAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSV1hHCisjICBkZWZpbmUgU19JUldYRyAwMDA3MAorI2VuZGlmCisKKyNpZm5kZWYgU19JUkdSUAorIyAgZGVmaW5lIFNfSVJHUlAgMDAwNDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdHUlAKKyMgIGRlZmluZSBTX0lXR1JQIDAwMDIwCisjZW5kaWYKKworI2lmbmRlZiBTX0lYR1JQCisjICBkZWZpbmUgU19JWEdSUCAwMDAxMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYTworIyAgZGVmaW5lIFNfSVJXWE8gMDAwMDcKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJPVEgKKyMgIGRlZmluZSBTX0lST1RIIDAwMDA0CisjZW5kaWYKKworI2lmbmRlZiBTX0lXT1RICisjICBkZWZpbmUgU19JV09USCAwMDAwMgorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyAgZGVmaW5lIFNfSVhPVEggMDAwMDEKKyNlbmRpZgorCisKKy8qIE5hbWVzIGZvciBmaWxlIGZsYWdzICovCisjaWZuZGVmIFVGX05PRFVNUAorIyAgZGVmaW5lIFVGX05PRFVNUCAweDAwMDAwMDAxCisjZW5kaWYKKworI2lmbmRlZiBVRl9JTU1VVEFCTEUKKyMgIGRlZmluZSBVRl9JTU1VVEFCTEUgMHgwMDAwMDAwMgorI2VuZGlmCisKKyNpZm5kZWYgVUZfQVBQRU5ECisjICBkZWZpbmUgVUZfQVBQRU5EIDB4MDAwMDAwMDQKKyNlbmRpZgorCisjaWZuZGVmIFVGX09QQVFVRQorIyAgZGVmaW5lIFVGX09QQVFVRSAweDAwMDAwMDA4CisjZW5kaWYKKworI2lmbmRlZiBVRl9OT1VOTElOSworIyAgZGVmaW5lIFVGX05PVU5MSU5LIDB4MDAwMDAwMTAKKyNlbmRpZgorCisjaWZuZGVmIFVGX0NPTVBSRVNTRUQKKyMgIGRlZmluZSBVRl9DT01QUkVTU0VEIDB4MDAwMDAwMjAKKyNlbmRpZgorCisjaWZuZGVmIFVGX0hJRERFTgorIyAgZGVmaW5lIFVGX0hJRERFTiAweDAwMDA4MDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9BUkNISVZFRAorIyAgZGVmaW5lIFNGX0FSQ0hJVkVEIDB4MDAwMTAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX0lNTVVUQUJMRQorIyAgZGVmaW5lIFNGX0lNTVVUQUJMRSAweDAwMDIwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9BUFBFTkQKKyMgIGRlZmluZSBTRl9BUFBFTkQgMHgwMDA0MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfTk9VTkxJTksKKyMgIGRlZmluZSBTRl9OT1VOTElOSyAweDAwMTAwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9TTkFQU0hPVAorIyAgZGVmaW5lIFNGX1NOQVBTSE9UIDB4MDAyMDAwMDAKKyNlbmRpZgorCitzdGF0aWMgbW9kZV90CitfUHlMb25nX0FzTW9kZV90KFB5T2JqZWN0ICpvcCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworICAgIG1vZGVfdCBtb2RlOworCisgICAgdmFsdWUgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob3ApOworICAgIGlmICgodmFsdWUgPT0gKHVuc2lnbmVkIGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAobW9kZV90KS0xOworCisgICAgbW9kZSA9IChtb2RlX3QpdmFsdWU7CisgICAgaWYgKCh1bnNpZ25lZCBsb25nKW1vZGUgIT0gdmFsdWUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJtb2RlIG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm4gKG1vZGVfdCktMTsKKyAgICB9CisgICAgcmV0dXJuIG1vZGU7Cit9CisKKworI2RlZmluZSBzdGF0X1NfSVNGVU5DKGlzZnVuYywgZG9jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRfICMjaXNmdW5jIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKSAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIG1vZGVfdCBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgICAgICAgICAgIFwKKyAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGlzZnVuYyhtb2RlKSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQeURvY19TVFJWQVIoc3RhdF8gIyMgaXNmdW5jICMjIF9kb2MsIGRvYykKKworc3RhdF9TX0lTRlVOQyhTX0lTRElSLAorICAgICJTX0lTRElSKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBkaXJlY3RvcnkuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0NIUiwKKyAgICAiU19JU0NIUihtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlIGZpbGUuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0JMSywKKyAgICAiU19JU0JMSyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTUkVHLAorICAgICJTX0lTUkVHKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSByZWd1bGFyIGZpbGUuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0ZJRk8sCisgICAgIlNfSVNGSUZPKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBGSUZPIChuYW1lZCBwaXBlKS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTTE5LLAorICAgICJTX0lTTE5LKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBzeW1ib2xpYyBsaW5rLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNTT0NLLAorICAgICJTX0lTU09DSyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgc29ja2V0LiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNET09SLAorICAgICJTX0lTRE9PUihtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgZG9vci4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTUE9SVCwKKyAgICAiU19JU1BPUlQobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhbiBldmVudCBwb3J0LiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNXSFQsCisgICAgIlNfSVNXSFQobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHdoaXRlb3V0LiIpOworCisKK1B5RG9jX1NUUlZBUihzdGF0X1NfSU1PREVfZG9jLAorIlJldHVybiB0aGUgcG9ydGlvbiBvZiB0aGUgZmlsZSdzIG1vZGUgdGhhdCBjYW4gYmUgc2V0IGJ5IG9zLmNobW9kKCkuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdGF0X1NfSU1PREUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkKK3sKKyAgICBtb2RlX3QgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobW9kZSAmIFNfSU1PREUpOworfQorCisKK1B5RG9jX1NUUlZBUihzdGF0X1NfSUZNVF9kb2MsCisiUmV0dXJuIHRoZSBwb3J0aW9uIG9mIHRoZSBmaWxlJ3MgbW9kZSB0aGF0IGRlc2NyaWJlcyB0aGUgZmlsZSB0eXBlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RhdF9TX0lGTVQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkKK3sKKyAgICBtb2RlX3QgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobW9kZSAmIFNfSUZNVCk7Cit9CisKKy8qIGZpbGUgdHlwZSBjaGFycyBhY2NvcmRpbmcgdG8KKyAgIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQ19Qcm9ncmFtbWluZy9QT1NJWF9SZWZlcmVuY2Uvc3lzL3N0YXQuaCAqLworCitzdGF0aWMgY2hhcgorZmlsZXR5cGUobW9kZV90IG1vZGUpCit7CisgICAgLyogY29tbW9uIGNhc2VzIGZpcnN0ICovCisgICAgaWYgKFNfSVNSRUcobW9kZSkpICByZXR1cm4gJy0nOworICAgIGlmIChTX0lTRElSKG1vZGUpKSAgcmV0dXJuICdkJzsKKyAgICBpZiAoU19JU0xOSyhtb2RlKSkgIHJldHVybiAnbCc7CisgICAgLyogc3BlY2lhbCBmaWxlcyAqLworICAgIGlmIChTX0lTQkxLKG1vZGUpKSAgcmV0dXJuICdiJzsKKyAgICBpZiAoU19JU0NIUihtb2RlKSkgIHJldHVybiAnYyc7CisgICAgaWYgKFNfSVNGSUZPKG1vZGUpKSByZXR1cm4gJ3AnOworICAgIGlmIChTX0lTU09DSyhtb2RlKSkgcmV0dXJuICdzJzsKKyAgICAvKiBub24tc3RhbmRhcmQgdHlwZXMgKi8KKyAgICBpZiAoU19JU0RPT1IobW9kZSkpIHJldHVybiAnRCc7CisgICAgaWYgKFNfSVNQT1JUKG1vZGUpKSByZXR1cm4gJ1AnOworICAgIGlmIChTX0lTV0hUKG1vZGUpKSAgcmV0dXJuICd3JzsKKyAgICAvKiB1bmtub3duICovCisgICAgcmV0dXJuICc/JzsKK30KKworc3RhdGljIHZvaWQKK2ZpbGVwZXJtKG1vZGVfdCBtb2RlLCBjaGFyICpidWYpCit7CisgICAgYnVmWzBdID0gbW9kZSAmIFNfSVJVU1IgPyAncicgOiAnLSc7CisgICAgYnVmWzFdID0gbW9kZSAmIFNfSVdVU1IgPyAndycgOiAnLSc7CisgICAgaWYgKG1vZGUgJiBTX0lTVUlEKSB7CisgICAgICAgIGJ1ZlsyXSA9IG1vZGUgJiBTX0lYVVNSID8gJ3MnIDogJ1MnOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZlsyXSA9IG1vZGUgJiBTX0lYVVNSID8gJ3gnIDogJy0nOworICAgIH0KKyAgICBidWZbM10gPSBtb2RlICYgU19JUkdSUCA/ICdyJyA6ICctJzsKKyAgICBidWZbNF0gPSBtb2RlICYgU19JV0dSUCA/ICd3JyA6ICctJzsKKyAgICBpZiAobW9kZSAmIFNfSVNHSUQpIHsKKyAgICAgICAgYnVmWzVdID0gbW9kZSAmIFNfSVhHUlAgPyAncycgOiAnUyc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmWzVdID0gbW9kZSAmIFNfSVhHUlAgPyAneCcgOiAnLSc7CisgICAgfQorICAgIGJ1Zls2XSA9IG1vZGUgJiBTX0lST1RIID8gJ3InIDogJy0nOworICAgIGJ1Zls3XSA9IG1vZGUgJiBTX0lXT1RIID8gJ3cnIDogJy0nOworICAgIGlmIChtb2RlICYgU19JU1ZUWCkgeworICAgICAgICBidWZbOF0gPSBtb2RlICYgU19JWE9USCA/ICd0JyA6ICdUJzsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZbOF0gPSBtb2RlICYgU19JWE9USCA/ICd4JyA6ICctJzsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUihzdGF0X2ZpbGVtb2RlX2RvYywKKyJDb252ZXJ0IGEgZmlsZSdzIG1vZGUgdG8gYSBzdHJpbmcgb2YgdGhlIGZvcm0gJy1yd3hyd3hyd3gnIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdGF0X2ZpbGVtb2RlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpCit7CisgICAgY2hhciBidWZbMTBdOworICAgIG1vZGVfdCBtb2RlOworCisgICAgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGJ1ZlswXSA9IGZpbGV0eXBlKG1vZGUpOworICAgIGZpbGVwZXJtKG1vZGUsICZidWZbMV0pOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCAxMCk7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIHN0YXRfbWV0aG9kc1tdID0geworICAgIHsiU19JU0RJUiIsICAgICAgICAgc3RhdF9TX0lTRElSLCAgTUVUSF9PLCBzdGF0X1NfSVNESVJfZG9jfSwKKyAgICB7IlNfSVNDSFIiLCAgICAgICAgIHN0YXRfU19JU0NIUiwgIE1FVEhfTywgc3RhdF9TX0lTQ0hSX2RvY30sCisgICAgeyJTX0lTQkxLIiwgICAgICAgICBzdGF0X1NfSVNCTEssICBNRVRIX08sIHN0YXRfU19JU0JMS19kb2N9LAorICAgIHsiU19JU1JFRyIsICAgICAgICAgc3RhdF9TX0lTUkVHLCAgTUVUSF9PLCBzdGF0X1NfSVNSRUdfZG9jfSwKKyAgICB7IlNfSVNGSUZPIiwgICAgICAgIHN0YXRfU19JU0ZJRk8sIE1FVEhfTywgc3RhdF9TX0lTRklGT19kb2N9LAorICAgIHsiU19JU0xOSyIsICAgICAgICAgc3RhdF9TX0lTTE5LLCAgTUVUSF9PLCBzdGF0X1NfSVNMTktfZG9jfSwKKyAgICB7IlNfSVNTT0NLIiwgICAgICAgIHN0YXRfU19JU1NPQ0ssIE1FVEhfTywgc3RhdF9TX0lTU09DS19kb2N9LAorICAgIHsiU19JU0RPT1IiLCAgICAgICAgc3RhdF9TX0lTRE9PUiwgTUVUSF9PLCBzdGF0X1NfSVNET09SX2RvY30sCisgICAgeyJTX0lTUE9SVCIsICAgICAgICBzdGF0X1NfSVNQT1JULCBNRVRIX08sIHN0YXRfU19JU1BPUlRfZG9jfSwKKyAgICB7IlNfSVNXSFQiLCAgICAgICAgIHN0YXRfU19JU1dIVCwgIE1FVEhfTywgc3RhdF9TX0lTV0hUX2RvY30sCisgICAgeyJTX0lNT0RFIiwgICAgICAgICBzdGF0X1NfSU1PREUsICBNRVRIX08sIHN0YXRfU19JTU9ERV9kb2N9LAorICAgIHsiU19JRk1UIiwgICAgICAgICAgc3RhdF9TX0lGTVQsICAgTUVUSF9PLCBzdGF0X1NfSUZNVF9kb2N9LAorICAgIHsiZmlsZW1vZGUiLCAgICAgICAgc3RhdF9maWxlbW9kZSwgTUVUSF9PLCBzdGF0X2ZpbGVtb2RlX2RvY30sCisgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKKworUHlEb2NfU1RSVkFSKG1vZHVsZV9kb2MsCisiU19JRk1UXzogZmlsZSB0eXBlIGJpdHNcblwKK1NfSUZESVI6IGRpcmVjdG9yeVxuXAorU19JRkNIUjogY2hhcmFjdGVyIGRldmljZVxuXAorU19JRkJMSzogYmxvY2sgZGV2aWNlXG5cCitTX0lGUkVHOiByZWd1bGFyIGZpbGVcblwKK1NfSUZJRk86IGZpZm8gKG5hbWVkIHBpcGUpXG5cCitTX0lGTE5LOiBzeW1ib2xpYyBsaW5rXG5cCitTX0lGU09DSzogc29ja2V0IGZpbGVcblwKK1NfSUZET09SOiBkb29yXG5cCitTX0lGUE9SVDogZXZlbnQgcG9ydFxuXAorU19JRldIVDogd2hpdGVvdXRcblwKK1xuIgorCisiU19JU1VJRDogc2V0IFVJRCBiaXRcblwKK1NfSVNHSUQ6IHNldCBHSUQgYml0XG5cCitTX0VORk1UOiBmaWxlIGxvY2tpbmcgZW5mb3JjZW1lbnRcblwKK1NfSVNWVFg6IHN0aWNreSBiaXRcblwKK1NfSVJFQUQ6IFVuaXggVjcgc3lub255bSBmb3IgU19JUlVTUlxuXAorU19JV1JJVEU6IFVuaXggVjcgc3lub255bSBmb3IgU19JV1VTUlxuXAorU19JRVhFQzogVW5peCBWNyBzeW5vbnltIGZvciBTX0lYVVNSXG5cCitTX0lSV1hVOiBtYXNrIGZvciBvd25lciBwZXJtaXNzaW9uc1xuXAorU19JUlVTUjogcmVhZCBieSBvd25lclxuXAorU19JV1VTUjogd3JpdGUgYnkgb3duZXJcblwKK1NfSVhVU1I6IGV4ZWN1dGUgYnkgb3duZXJcblwKK1NfSVJXWEc6IG1hc2sgZm9yIGdyb3VwIHBlcm1pc3Npb25zXG5cCitTX0lSR1JQOiByZWFkIGJ5IGdyb3VwXG5cCitTX0lXR1JQOiB3cml0ZSBieSBncm91cFxuXAorU19JWEdSUDogZXhlY3V0ZSBieSBncm91cFxuXAorU19JUldYTzogbWFzayBmb3Igb3RoZXJzIChub3QgaW4gZ3JvdXApIHBlcm1pc3Npb25zXG5cCitTX0lST1RIOiByZWFkIGJ5IG90aGVyc1xuXAorU19JV09USDogd3JpdGUgYnkgb3RoZXJzXG5cCitTX0lYT1RIOiBleGVjdXRlIGJ5IG90aGVyc1xuXAorXG4iCisKKyJVRl9OT0RVTVA6IGRvIG5vdCBkdW1wIGZpbGVcblwKK1VGX0lNTVVUQUJMRTogZmlsZSBtYXkgbm90IGJlIGNoYW5nZWRcblwKK1VGX0FQUEVORDogZmlsZSBtYXkgb25seSBiZSBhcHBlbmRlZCB0b1xuXAorVUZfT1BBUVVFOiBkaXJlY3RvcnkgaXMgb3BhcXVlIHdoZW4gdmlld2VkIHRocm91Z2ggYSB1bmlvbiBzdGFja1xuXAorVUZfTk9VTkxJTks6IGZpbGUgbWF5IG5vdCBiZSByZW5hbWVkIG9yIGRlbGV0ZWRcblwKK1VGX0NPTVBSRVNTRUQ6IE9TIFg6IGZpbGUgaXMgaGZzLWNvbXByZXNzZWRcblwKK1VGX0hJRERFTjogT1MgWDogZmlsZSBzaG91bGQgbm90IGJlIGRpc3BsYXllZFxuXAorU0ZfQVJDSElWRUQ6IGZpbGUgbWF5IGJlIGFyY2hpdmVkXG5cCitTRl9JTU1VVEFCTEU6IGZpbGUgbWF5IG5vdCBiZSBjaGFuZ2VkXG5cCitTRl9BUFBFTkQ6IGZpbGUgbWF5IG9ubHkgYmUgYXBwZW5kZWQgdG9cblwKK1NGX05PVU5MSU5LOiBmaWxlIG1heSBub3QgYmUgcmVuYW1lZCBvciBkZWxldGVkXG5cCitTRl9TTkFQU0hPVDogZmlsZSBpcyBhIHNuYXBzaG90IGZpbGVcblwKK1xuIgorCisiU1RfTU9ERVxuXAorU1RfSU5PXG5cCitTVF9ERVZcblwKK1NUX05MSU5LXG5cCitTVF9VSURcblwKK1NUX0dJRFxuXAorU1RfU0laRVxuXAorU1RfQVRJTUVcblwKK1NUX01USU1FXG5cCitTVF9DVElNRVxuXAorIik7CisKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBzdGF0bW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3N0YXQiLAorICAgIG1vZHVsZV9kb2MsCisgICAgLTEsCisgICAgc3RhdF9tZXRob2RzLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3N0YXQodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbTsKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzdGF0bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGRElSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZDSFIpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkJMSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGUkVHKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZJRk8pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkxOSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGU09DSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGRE9PUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGUE9SVCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGV0hUKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JU1VJRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lTR0lEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVNWVFgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19FTkZNVCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJFQUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV1JJVEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRVhFQykpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJXWFUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUlVTUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXVVNSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVhVU1IpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSV1hHKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJHUlApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV0dSUCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lYR1JQKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUldYTykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lST1RIKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdPVEgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JWE9USCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX05PRFVNUCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9JTU1VVEFCTEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfQVBQRU5EKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX09QQVFVRSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9OT1VOTElOSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9DT01QUkVTU0VEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0hJRERFTikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9BUkNISVZFRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9JTU1VVEFCTEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfQVBQRU5EKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX05PVU5MSU5LKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX1NOQVBTSE9UKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX01PREUiLCAwKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9JTk8iLCAxKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9ERVYiLCAyKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9OTElOSyIsIDMpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX1VJRCIsIDQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0dJRCIsIDUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX1NJWkUiLCA2KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9BVElNRSIsIDcpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX01USU1FIiwgOCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfQ1RJTUUiLCA5KSkgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3N0cnVjdC5jIGIvTW9kdWxlcy9fc3RydWN0LmMKaW5kZXggYTI0ODc1My4uMWRlOTRlNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3RydWN0LmMKKysrIGIvTW9kdWxlcy9fc3RydWN0LmMKQEAgLTI2LDYgKzI2LDcgQEAKICAgICBjb25zdCBzdHJ1Y3QgX2Zvcm1hdGRlZiAqZm10ZGVmOwogICAgIFB5X3NzaXplX3Qgb2Zmc2V0OwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeV9zc2l6ZV90IHJlcGVhdDsKIH0gZm9ybWF0Y29kZTsKIAogLyogU3RydWN0IG9iamVjdCBpbnRlcmZhY2UgKi8KQEAgLTExOTksMTIgKzEyMDAsMTEgQEAKICAgICBjYXNlICchJzogLyogTmV0d29yayBieXRlIG9yZGVyIGlzIGJpZy1lbmRpYW4gKi8KICAgICAgICAgcmV0dXJuIGJpZ2VuZGlhbl90YWJsZTsKICAgICBjYXNlICc9JzogeyAvKiBIb3N0IGJ5dGUgb3JkZXIgLS0gZGlmZmVyZW50IGZyb20gbmF0aXZlIGluIGFsaWdubWVudCEgKi8KLSAgICAgICAgaW50IG4gPSAxOwotICAgICAgICBjaGFyICpwID0gKGNoYXIgKikgJm47Ci0gICAgICAgIGlmICgqcCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIGxpbGVuZGlhbl90YWJsZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGJpZ2VuZGlhbl90YWJsZTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgICAgIHJldHVybiBsaWxlbmRpYW5fdGFibGU7CisjZWxzZQorICAgICAgICByZXR1cm4gYmlnZW5kaWFuX3RhYmxlOworI2VuZGlmCiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIC0tKnBmbXQ7IC8qIEJhY2sgb3V0IG9mIHBvaW50ZXIgaW5jcmVtZW50ICovCkBAIC0xMjQ4LDYgKzEyNDgsOSBAQAogICAgIHJldHVybiBzaXplOwogfQogCisvKgorICogU3RydWN0IG9iamVjdCBpbXBsZW1lbnRhdGlvbi4KKyAqLwogCiAvKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBmb3JtYXQgc3RyaW5nICovCiAKQEAgLTEyNjEsNyArMTI2NCw3IEBACiAgICAgY29uc3QgY2hhciAqczsKICAgICBjb25zdCBjaGFyICpmbXQ7CiAgICAgY2hhciBjOwotICAgIFB5X3NzaXplX3Qgc2l6ZSwgbGVuLCBudW0sIGl0ZW1zaXplOworICAgIFB5X3NzaXplX3Qgc2l6ZSwgbGVuLCBuY29kZXMsIG51bSwgaXRlbXNpemU7CiAKICAgICBmbXQgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5zX2Zvcm1hdCk7CiAKQEAgLTEyNzAsNiArMTI3Myw3IEBACiAgICAgcyA9IGZtdDsKICAgICBzaXplID0gMDsKICAgICBsZW4gPSAwOworICAgIG5jb2RlcyA9IDA7CiAgICAgd2hpbGUgKChjID0gKnMrKykgIT0gJ1wwJykgewogICAgICAgICBpZiAoUHlfSVNTUEFDRShQeV9DSEFSTUFTSyhjKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOTksOSArMTMwMyw5IEBACiAKICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgICAgICBjYXNlICdzJzogLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBjYXNlICdwJzogbGVuKys7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAncCc6IGxlbisrOyBuY29kZXMrKzsgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICd4JzogYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBsZW4gKz0gbnVtOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IGxlbiArPSBudW07IGlmIChudW0pIG5jb2RlcysrOyBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGl0ZW1zaXplID0gZS0+c2l6ZTsKQEAgLTEzMTYsMTQgKzEzMjAsMTQgQEAKICAgICB9CiAKICAgICAvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KLSAgICBpZiAoKGxlbiArIDEpID4gKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKGZvcm1hdGNvZGUpKSkgeworICAgIGlmICgobmNvZGVzICsgMSkgPiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoZm9ybWF0Y29kZSkpKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBzZWxmLT5zX3NpemUgPSBzaXplOwogICAgIHNlbGYtPnNfbGVuID0gbGVuOwotICAgIGNvZGVzID0gUHlNZW1fTUFMTE9DKChsZW4gKyAxKSAqIHNpemVvZihmb3JtYXRjb2RlKSk7CisgICAgY29kZXMgPSBQeU1lbV9NQUxMT0MoKG5jb2RlcyArIDEpICogc2l6ZW9mKGZvcm1hdGNvZGUpKTsKICAgICBpZiAoY29kZXMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xMzU1LDIzICsxMzU5LDI0IEBACiAgICAgICAgICAgICBjb2Rlcy0+b2Zmc2V0ID0gc2l6ZTsKICAgICAgICAgICAgIGNvZGVzLT5zaXplID0gbnVtOwogICAgICAgICAgICAgY29kZXMtPmZtdGRlZiA9IGU7CisgICAgICAgICAgICBjb2Rlcy0+cmVwZWF0ID0gMTsKICAgICAgICAgICAgIGNvZGVzKys7CiAgICAgICAgICAgICBzaXplICs9IG51bTsKICAgICAgICAgfSBlbHNlIGlmIChjID09ICd4JykgewogICAgICAgICAgICAgc2l6ZSArPSBudW07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAoLS1udW0gPj0gMCkgewotICAgICAgICAgICAgICAgIGNvZGVzLT5vZmZzZXQgPSBzaXplOwotICAgICAgICAgICAgICAgIGNvZGVzLT5zaXplID0gZS0+c2l6ZTsKLSAgICAgICAgICAgICAgICBjb2Rlcy0+Zm10ZGVmID0gZTsKLSAgICAgICAgICAgICAgICBjb2RlcysrOwotICAgICAgICAgICAgICAgIHNpemUgKz0gZS0+c2l6ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChudW0pIHsKKyAgICAgICAgICAgIGNvZGVzLT5vZmZzZXQgPSBzaXplOworICAgICAgICAgICAgY29kZXMtPnNpemUgPSBlLT5zaXplOworICAgICAgICAgICAgY29kZXMtPmZtdGRlZiA9IGU7CisgICAgICAgICAgICBjb2Rlcy0+cmVwZWF0ID0gbnVtOworICAgICAgICAgICAgY29kZXMrKzsKKyAgICAgICAgICAgIHNpemUgKz0gZS0+c2l6ZSAqIG51bTsKICAgICAgICAgfQogICAgIH0KICAgICBjb2Rlcy0+Zm10ZGVmID0gTlVMTDsKICAgICBjb2Rlcy0+b2Zmc2V0ID0gc2l6ZTsKICAgICBjb2Rlcy0+c2l6ZSA9IDA7CisgICAgY29kZXMtPnJlcGVhdCA9IDA7CiAKICAgICByZXR1cm4gMDsKIApAQCAtMTQ2MCwyMiArMTQ2NSwyNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAoY29kZSA9IHNvc2VsZi0+c19jb2RlczsgY29kZS0+Zm10ZGVmICE9IE5VTEw7IGNvZGUrKykgewotICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgY29uc3QgZm9ybWF0ZGVmICplID0gY29kZS0+Zm10ZGVmOwogICAgICAgICBjb25zdCBjaGFyICpyZXMgPSBzdGFydGZyb20gKyBjb2RlLT5vZmZzZXQ7Ci0gICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7Ci0gICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShyZXMsIGNvZGUtPnNpemUpOwotICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgbiA9ICoodW5zaWduZWQgY2hhciopcmVzOwotICAgICAgICAgICAgaWYgKG4gPj0gY29kZS0+c2l6ZSkKLSAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7Ci0gICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShyZXMgKyAxLCBuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHYgPSBlLT51bnBhY2socmVzLCBlKTsKKyAgICAgICAgUHlfc3NpemVfdCBqID0gY29kZS0+cmVwZWF0OworICAgICAgICB3aGlsZSAoai0tKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocmVzLCBjb2RlLT5zaXplKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+Zm9ybWF0ID09ICdwJykgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbiA9ICoodW5zaWduZWQgY2hhciopcmVzOworICAgICAgICAgICAgICAgIGlmIChuID49IGNvZGUtPnNpemUpCisgICAgICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplIC0gMTsKKyAgICAgICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShyZXMgKyAxLCBuKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdiA9IGUtPnVucGFjayhyZXMsIGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSsrLCB2KTsKKyAgICAgICAgICAgIHJlcyArPSBjb2RlLT5zaXplOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpKyssIHYpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNTU3LDYgKzE1NjYsMTQyIEBACiB9CiAKIAorLyogVW5wYWNrIGl0ZXJhdG9yIHR5cGUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeVN0cnVjdE9iamVjdCAqc287CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeV9zc2l6ZV90IGluZGV4OworfSB1bnBhY2tpdGVyb2JqZWN0OworCitzdGF0aWMgdm9pZAordW5wYWNraXRlcl9kZWFsbG9jKHVucGFja2l0ZXJvYmplY3QgKnNlbGYpCit7CisgICAgUHlfWERFQ1JFRihzZWxmLT5zbyk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+YnVmKTsKKyAgICBQeU9iamVjdF9HQ19EZWwoc2VsZik7Cit9CisKK3N0YXRpYyBpbnQKK3VucGFja2l0ZXJfdHJhdmVyc2UodW5wYWNraXRlcm9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUHlfVklTSVQoc2VsZi0+c28pOworICAgIFB5X1ZJU0lUKHNlbGYtPmJ1Zi5vYmopOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordW5wYWNraXRlcl9sZW4odW5wYWNraXRlcm9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpZiAoc2VsZi0+c28gPT0gTlVMTCkKKyAgICAgICAgbGVuID0gMDsKKyAgICBlbHNlCisgICAgICAgIGxlbiA9IChzZWxmLT5idWYubGVuIC0gc2VsZi0+aW5kZXgpIC8gc2VsZi0+c28tPnNfc2l6ZTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGxlbik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiB1bnBhY2tpdGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fbGVuZ3RoX2hpbnRfXyIsIChQeUNGdW5jdGlvbikgdW5wYWNraXRlcl9sZW4sIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VucGFja2l0ZXJfaXRlcm5leHQodW5wYWNraXRlcm9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIGlmIChzZWxmLT5zbyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc2VsZi0+aW5kZXggPj0gc2VsZi0+YnVmLmxlbikgeworICAgICAgICAvKiBJdGVyYXRvciBleGhhdXN0ZWQgKi8KKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+c28pOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT5idWYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgYXNzZXJ0KHNlbGYtPmluZGV4ICsgc2VsZi0+c28tPnNfc2l6ZSA8PSBzZWxmLT5idWYubGVuKTsKKyAgICByZXN1bHQgPSBzX3VucGFja19pbnRlcm5hbChzZWxmLT5zbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopIHNlbGYtPmJ1Zi5idWYgKyBzZWxmLT5pbmRleCk7CisgICAgc2VsZi0+aW5kZXggKz0gc2VsZi0+c28tPnNfc2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUHlUeXBlT2JqZWN0IHVucGFja2l0ZXJfdHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICJ1bnBhY2tfaXRlcmF0b3IiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZih1bnBhY2tpdGVyb2JqZWN0KSwgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIChkZXN0cnVjdG9yKXVucGFja2l0ZXJfZGVhbGxvYywgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgICAvKiB0cF9mbGFncyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYyl1bnBhY2tpdGVyX3RyYXZlcnNlLCAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIFB5T2JqZWN0X1NlbGZJdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIChpdGVybmV4dGZ1bmMpdW5wYWNraXRlcl9pdGVybmV4dCwgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICB1bnBhY2tpdGVyX21ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KK307CisKK1B5RG9jX1NUUlZBUihzX2l0ZXJfdW5wYWNrX19kb2NfXywKKyJTLml0ZXJfdW5wYWNrKGJ1ZmZlcikgLT4gaXRlcmF0b3IodjEsIHYyLCAuLi4pXG5cCitcblwKK1JldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyB0dXBsZXMgdW5wYWNrZWQgZnJvbSB0aGUgZ2l2ZW4gYnl0ZXNcblwKK3NvdXJjZSwgbGlrZSBhIHJlcGVhdGVkIGludm9jYXRpb24gb2YgdW5wYWNrX2Zyb20oKS4gIFJlcXVpcmVzXG5cCit0aGF0IHRoZSBieXRlcyBsZW5ndGggYmUgYSBtdWx0aXBsZSBvZiB0aGUgc3RydWN0IHNpemUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzX2l0ZXJfdW5wYWNrKFB5T2JqZWN0ICpfc28sIFB5T2JqZWN0ICppbnB1dCkKK3sKKyAgICBQeVN0cnVjdE9iamVjdCAqc28gPSAoUHlTdHJ1Y3RPYmplY3QgKikgX3NvOworICAgIHVucGFja2l0ZXJvYmplY3QgKnNlbGY7CisKKyAgICBhc3NlcnQoUHlTdHJ1Y3RfQ2hlY2soX3NvKSk7CisgICAgYXNzZXJ0KHNvLT5zX2NvZGVzICE9IE5VTEwpOworCisgICAgaWYgKHNvLT5zX3NpemUgPT0gMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGl0ZXJhdGl2ZWx5IHVucGFjayB3aXRoIGEgc3RydWN0IG9mIGxlbmd0aCAwIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYgPSAodW5wYWNraXRlcm9iamVjdCAqKSBQeVR5cGVfR2VuZXJpY0FsbG9jKCZ1bnBhY2tpdGVyX3R5cGUsIDApOworICAgIGlmIChzZWxmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihpbnB1dCwgJnNlbGYtPmJ1ZiwgUHlCVUZfU0lNUExFKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHNlbGYtPmJ1Zi5sZW4gJSBzby0+c19zaXplICE9IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGl2ZSB1bnBhY2tpbmcgcmVxdWlyZXMgYSBieXRlcyBsZW5ndGggIgorICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIG9mICV6ZCIsCisgICAgICAgICAgICAgICAgICAgICBzby0+c19zaXplKTsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKHNvKTsKKyAgICBzZWxmLT5zbyA9IHNvOworICAgIHNlbGYtPmluZGV4ID0gMDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7Cit9CisKKwogLyoKICAqIEd1dHMgb2YgdGhlIHBhY2sgZnVuY3Rpb24uCiAgKgpAQCAtMTU3OCw2MiArMTcyMyw2NyBAQAogICAgIG1lbXNldChidWYsICdcMCcsIHNvc2VsZi0+c19zaXplKTsKICAgICBpID0gb2Zmc2V0OwogICAgIGZvciAoY29kZSA9IHNvc2VsZi0+c19jb2RlczsgY29kZS0+Zm10ZGVmICE9IE5VTEw7IGNvZGUrKykgewotICAgICAgICBQeV9zc2l6ZV90IG47Ci0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCBpKyspOwogICAgICAgICBjb25zdCBmb3JtYXRkZWYgKmUgPSBjb2RlLT5mbXRkZWY7CiAgICAgICAgIGNoYXIgKnJlcyA9IGJ1ZiArIGNvZGUtPm9mZnNldDsKLSAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKLSAgICAgICAgICAgIGludCBpc3N0cmluZzsKLSAgICAgICAgICAgIHZvaWQgKnA7Ci0gICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7Ci0gICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncycgbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc3N0cmluZykgewotICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOwotICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4gPiBjb2RlLT5zaXplKQotICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplOwotICAgICAgICAgICAgaWYgKG4gPiAwKQotICAgICAgICAgICAgICAgIG1lbWNweShyZXMsIHAsIG4pOwotICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKLSAgICAgICAgICAgIGludCBpc3N0cmluZzsKLSAgICAgICAgICAgIHZvaWQgKnA7Ci0gICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7Ci0gICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncCcgbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc3N0cmluZykgewotICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOwotICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4gPiAoY29kZS0+c2l6ZSAtIDEpKQotICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplIC0gMTsKLSAgICAgICAgICAgIGlmIChuID4gMCkKLSAgICAgICAgICAgICAgICBtZW1jcHkocmVzICsgMSwgcCwgbik7Ci0gICAgICAgICAgICBpZiAobiA+IDI1NSkKLSAgICAgICAgICAgICAgICBuID0gMjU1OwotICAgICAgICAgICAgKnJlcyA9IFB5X1NBRkVfRE9XTkNBU1QobiwgUHlfc3NpemVfdCwgdW5zaWduZWQgY2hhcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZS0+cGFjayhyZXMsIHYsIGUpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgUHlfc3NpemVfdCBqID0gY29kZS0+cmVwZWF0OworICAgICAgICB3aGlsZSAoai0tKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSsrKTsKKyAgICAgICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuOworICAgICAgICAgICAgICAgIGludCBpc3N0cmluZzsKKyAgICAgICAgICAgICAgICB2b2lkICpwOworICAgICAgICAgICAgICAgIGlzc3RyaW5nID0gUHlCeXRlc19DaGVjayh2KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncycgbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc3N0cmluZykgeworICAgICAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHYpOworICAgICAgICAgICAgICAgICAgICBwID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobiA+IGNvZGUtPnNpemUpCisgICAgICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplOworICAgICAgICAgICAgICAgIGlmIChuID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHJlcywgcCwgbik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG47CisgICAgICAgICAgICAgICAgaW50IGlzc3RyaW5nOworICAgICAgICAgICAgICAgIHZvaWQgKnA7CisgICAgICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOworICAgICAgICAgICAgICAgIGlmICghaXNzdHJpbmcgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKHYpKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3AnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG4gPiAoY29kZS0+c2l6ZSAtIDEpKQorICAgICAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7CisgICAgICAgICAgICAgICAgaWYgKG4gPiAwKQorICAgICAgICAgICAgICAgICAgICBtZW1jcHkocmVzICsgMSwgcCwgbik7CisgICAgICAgICAgICAgICAgaWYgKG4gPiAyNTUpCisgICAgICAgICAgICAgICAgICAgIG4gPSAyNTU7CisgICAgICAgICAgICAgICAgKnJlcyA9IFB5X1NBRkVfRE9XTkNBU1QobiwgUHlfc3NpemVfdCwgdW5zaWduZWQgY2hhcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChlLT5wYWNrKHJlcywgdiwgZSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXMgKz0gY29kZS0+c2l6ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc2OSwxNCArMTkxOSwxOCBAQAogc19zaXplb2YoUHlTdHJ1Y3RPYmplY3QgKnNlbGYsIHZvaWQgKnVudXNlZCkKIHsKICAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgZm9ybWF0Y29kZSAqY29kZTsKIAotICAgIHNpemUgPSBzaXplb2YoUHlTdHJ1Y3RPYmplY3QpICsgc2l6ZW9mKGZvcm1hdGNvZGUpICogKHNlbGYtPnNfbGVuICsgMSk7CisgICAgc2l6ZSA9IHNpemVvZihQeVN0cnVjdE9iamVjdCkgKyBzaXplb2YoZm9ybWF0Y29kZSk7CisgICAgZm9yIChjb2RlID0gc2VsZi0+c19jb2RlczsgY29kZS0+Zm10ZGVmICE9IE5VTEw7IGNvZGUrKykKKyAgICAgICAgc2l6ZSArPSBzaXplb2YoZm9ybWF0Y29kZSk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzaXplKTsKIH0KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgKi8KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBzX21ldGhvZHNbXSA9IHsKKyAgICB7Iml0ZXJfdW5wYWNrIiwgICAgIHNfaXRlcl91bnBhY2ssICBNRVRIX08sIHNfaXRlcl91bnBhY2tfX2RvY19ffSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHNfcGFjaywgICAgICAgICBNRVRIX1ZBUkFSR1MsIHNfcGFja19fZG9jX199LAogICAgIHsicGFja19pbnRvIiwgICAgICAgc19wYWNrX2ludG8sICAgIE1FVEhfVkFSQVJHUywgc19wYWNrX2ludG9fX2RvY19ffSwKICAgICB7InVucGFjayIsICAgICAgICAgIHNfdW5wYWNrLCAgICAgICBNRVRIX08sIHNfdW5wYWNrX19kb2NfX30sCkBAIC0yMDI2LDkgKzIxODAsMzQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitQeURvY19TVFJWQVIoaXRlcl91bnBhY2tfZG9jLAorIml0ZXJfdW5wYWNrKGZtdCwgYnVmZmVyKSAtPiBpdGVyYXRvcih2MSwgdjIsIC4uLilcblwKK1xuXAorUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIHR1cGxlcyB1bnBhY2tlZCBmcm9tIHRoZSBnaXZlbiBieXRlc1xuXAorc291cmNlIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IHN0cmluZywgbGlrZSBhIHJlcGVhdGVkIGludm9jYXRpb24gb2ZcblwKK3VucGFja19mcm9tKCkuICBSZXF1aXJlcyB0aGF0IHRoZSBieXRlcyBsZW5ndGggYmUgYSBtdWx0aXBsZSBvZiB0aGVcblwKK2Zvcm1hdCBzdHJ1Y3Qgc2l6ZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2l0ZXJfdW5wYWNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqc19vYmplY3QsICpmbXQsICppbnB1dCwgKnJlc3VsdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086aXRlcl91bnBhY2siLCAmZm10LCAmaW5wdXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNfb2JqZWN0ID0gY2FjaGVfc3RydWN0KGZtdCk7CisgICAgaWYgKHNfb2JqZWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IHNfaXRlcl91bnBhY2soc19vYmplY3QsIGlucHV0KTsKKyAgICBQeV9ERUNSRUYoc19vYmplY3QpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbW9kdWxlX2Z1bmN0aW9uc1tdID0gewogICAgIHsiX2NsZWFyY2FjaGUiLCAgICAgKFB5Q0Z1bmN0aW9uKWNsZWFyY2FjaGUsICAgICAgICBNRVRIX05PQVJHUywgICAgY2xlYXJjYWNoZV9kb2N9LAogICAgIHsiY2FsY3NpemUiLCAgICAgICAgY2FsY3NpemUsICAgICAgIE1FVEhfTywgY2FsY3NpemVfZG9jfSwKKyAgICB7Iml0ZXJfdW5wYWNrIiwgICAgIGl0ZXJfdW5wYWNrLCAgICBNRVRIX1ZBUkFSR1MsICAgaXRlcl91bnBhY2tfZG9jfSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHBhY2ssICAgICAgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19kb2N9LAogICAgIHsicGFja19pbnRvIiwgICAgICAgcGFja19pbnRvLCAgICAgIE1FVEhfVkFSQVJHUywgICBwYWNrX2ludG9fZG9jfSwKICAgICB7InVucGFjayIsICAgICAgICAgIHVucGFjaywgTUVUSF9WQVJBUkdTLCAgIHVucGFja19kb2N9LApAQCAtMjA5OCwxMyArMjI3NywxMyBAQAogCiAgICAgLyogQ2hlY2sgZW5kaWFuIGFuZCBzd2FwIGluIGZhc3RlciBmdW5jdGlvbnMgKi8KICAgICB7Ci0gICAgICAgIGludCBvbmUgPSAxOwogICAgICAgICBmb3JtYXRkZWYgKm5hdGl2ZSA9IG5hdGl2ZV90YWJsZTsKICAgICAgICAgZm9ybWF0ZGVmICpvdGhlciwgKnB0cjsKLSAgICAgICAgaWYgKChpbnQpKih1bnNpZ25lZCBjaGFyKikmb25lKQotICAgICAgICAgICAgb3RoZXIgPSBsaWxlbmRpYW5fdGFibGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG90aGVyID0gYmlnZW5kaWFuX3RhYmxlOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgb3RoZXIgPSBsaWxlbmRpYW5fdGFibGU7CisjZWxzZQorICAgICAgICBvdGhlciA9IGJpZ2VuZGlhbl90YWJsZTsKKyNlbmRpZgogICAgICAgICAvKiBTY2FuIHRocm91Z2ggdGhlIG5hdGl2ZSB0YWJsZSwgZmluZCBhIG1hdGNoaW5nCiAgICAgICAgICAgIGVudHJ5IGluIHRoZSBlbmRpYW4gdGFibGUgYW5kIHN3YXAgaW4gdGhlCiAgICAgICAgICAgIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RidWZmZXIuYyBiL01vZHVsZXMvX3Rlc3RidWZmZXIuYwppbmRleCAzMTY2NjZlLi4wYzZlZjE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKKysrIGIvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogICAgICAgICBpZiAoaW5pdF9zbGljZShiYXNlLCBrZXksIDApIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyX29jY3VycmVkOwogICAgIH0KLSAgICBlbHNlIGlmIFB5VHVwbGVfQ2hlY2soa2V5KSB7CisgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhrZXkpKSB7CiAgICAgICAgIC8qIG11bHRpLWRpbWVuc2lvbmFsIHNsaWNlICovCiAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSA9IGtleTsKICAgICAgICAgUHlfc3NpemVfdCBpLCBuOwpAQCAtMjgzNywzNiArMjgzNywzNiBAQAogICAgIGlmIChzaW1wbGVfZm9ybWF0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX01BWF9ORElNIiwgTkRfTUFYX05ESU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9WQVJFWFBPUlQiLCBORF9WQVJFWFBPUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9XUklUQUJMRSIsIE5EX1dSSVRBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfRk9SVFJBTiIsIE5EX0ZPUlRSQU4pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9TQ0FMQVIiLCBORF9TQ0FMQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9QSUwiLCBORF9QSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9HRVRCVUZfRkFJTCIsIE5EX0dFVEJVRl9GQUlMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfR0VUQlVGX1VOREVGSU5FRCIsIE5EX0dFVEJVRl9VTkRFRklORUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9SRURJUkVDVCIsIE5EX1JFRElSRUNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9NQVhfTkRJTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfVkFSRVhQT1JUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9XUklUQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfRk9SVFJBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfU0NBTEFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9QSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX0dFVEJVRl9GQUlMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9HRVRCVUZfVU5ERUZJTkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9SRURJUkVDVCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU0lNUExFIiwgUHlCVUZfU0lNUExFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfV1JJVEFCTEUiLCBQeUJVRl9XUklUQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZPUk1BVCIsIFB5QlVGX0ZPUk1BVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX05EIiwgUHlCVUZfTkQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVTIiwgUHlCVUZfU1RSSURFUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0lORElSRUNUIiwgUHlCVUZfSU5ESVJFQ1QpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9DX0NPTlRJR1VPVVMiLCBQeUJVRl9DX0NPTlRJR1VPVVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GX0NPTlRJR1VPVVMiLCBQeUJVRl9GX0NPTlRJR1VPVVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9BTllfQ09OVElHVU9VUyIsIFB5QlVGX0FOWV9DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRlVMTCIsIFB5QlVGX0ZVTEwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GVUxMX1JPIiwgUHlCVUZfRlVMTF9STyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQ09SRFMiLCBQeUJVRl9SRUNPUkRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfUkVDT1JEU19STyIsIFB5QlVGX1JFQ09SRFNfUk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVEIiwgUHlCVUZfU1RSSURFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NUUklERURfUk8iLCBQeUJVRl9TVFJJREVEX1JPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ09OVElHIiwgUHlCVUZfQ09OVElHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ09OVElHX1JPIiwgUHlCVUZfQ09OVElHX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TSU1QTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1dSSVRBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GT1JNQVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX05EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9JTkRJUkVDVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQ19DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GX0NPTlRJR1VPVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0FOWV9DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GVUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GVUxMX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUNPUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUNPUkRTX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVEX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9DT05USUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0NPTlRJR19STyk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfUkVBRCIsIFB5QlVGX1JFQUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9XUklURSIsIFB5QlVGX1dSSVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9XUklURSk7CiAKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMgYi9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCmluZGV4IDkxZjI5MWEuLjUzODMyMmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwpAQCAtNjUsNiArNjUsNjkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgordGVzdF9zaXplb2ZfY190eXBlcyhQeU9iamVjdCAqc2VsZikKK3sKKyNkZWZpbmUgQ0hFQ0tfU0laRU9GKFRZUEUsIEVYUEVDVEVEKSAgICAgICAgIFwKKyAgICBpZiAoRVhQRUNURUQgIT0gc2l6ZW9mKFRZUEUpKSAgeyAgICAgICAgIFwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFRlc3RFcnJvciwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJzaXplb2YoJXMpID0gJXUgaW5zdGVhZCBvZiAldSIsIFwKKyAgICAgICAgICAgICNUWVBFLCBzaXplb2YoVFlQRSksIEVYUEVDVEVEKTsgIFwKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCopTlVMTDsgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIElTX1NJR05FRChUWVBFKSAoKChUWVBFKS0xKSA8IChUWVBFKTApCisjZGVmaW5lIENIRUNLX1NJR05ORVNTKFRZUEUsIFNJR05FRCkgICAgICAgICBcCisgICAgaWYgKElTX1NJR05FRChUWVBFKSAhPSBTSUdORUQpIHsgICAgICAgICBcCisgICAgICAgIFB5RXJyX0Zvcm1hdChUZXN0RXJyb3IsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAiJXMgc2lnbm5lc3MgaXMsIGluc3RlYWQgb2YgJWkiLCAgXAorICAgICAgICAgICAgI1RZUEUsIElTX1NJR05FRChUWVBFKSwgU0lHTkVEKTsgXAorICAgICAgICByZXR1cm4gKFB5T2JqZWN0KilOVUxMOyAgICAgICAgICAgICAgXAorICAgIH0KKworICAgIC8qIGludGVnZXIgdHlwZXMgKi8KKyAgICBDSEVDS19TSVpFT0YoUHlfVUNTMSwgMSk7CisgICAgQ0hFQ0tfU0laRU9GKFB5X1VDUzIsIDIpOworICAgIENIRUNLX1NJWkVPRihQeV9VQ1M0LCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1MxLCAwKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1MyLCAwKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1M0LCAwKTsKKyNpZmRlZiBIQVZFX0lOVDMyX1QKKyAgICBDSEVDS19TSVpFT0YoUFlfSU5UMzJfVCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfSU5UMzJfVCwgMSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VJTlQzMl9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX1VJTlQzMl9ULCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9VSU5UMzJfVCwgMCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVDY0X1QKKyAgICBDSEVDS19TSVpFT0YoUFlfSU5UNjRfVCwgOCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfSU5UNjRfVCwgMSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VJTlQ2NF9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX1VJTlQ2NF9ULCA4KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9VSU5UNjRfVCwgMCk7CisjZW5kaWYKKworICAgIC8qIHBvaW50ZXIvc2l6ZSB0eXBlcyAqLworICAgIENIRUNLX1NJWkVPRihzaXplX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhzaXplX3QsIDApOworICAgIENIRUNLX1NJWkVPRihQeV9zc2l6ZV90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfc3NpemVfdCwgMSk7CisKKyAgICBDSEVDS19TSVpFT0YoUHlfdWludHB0cl90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfdWludHB0cl90LCAwKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfaW50cHRyX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9pbnRwdHJfdCwgMSk7CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7CisKKyN1bmRlZiBJU19TSUdORUQKKyN1bmRlZiBDSEVDS19TSUdORVNTCisjdW5kZWYgQ0hFQ0tfU0laRU9GCit9CisKKworc3RhdGljIFB5T2JqZWN0KgogdGVzdF9saXN0X2FwaShQeU9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCogbGlzdDsKQEAgLTE0MjQsNiArMTQ4NywyMCBAQAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X3dpZGVjaGFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTFwiXFxVMDAxMTAwMDBcIiwgMSkgZGlkbid0IGZhaWwiKTsKKworICAgIHdpZGUgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgMSk7CisgICAgaWYgKHdpZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlVbmljb2RlX0FTX1VOSUNPREUod2lkZSlbMF0gPSBpbnZhbGlkWzBdOworICAgIGlmIChfUHlVbmljb2RlX1JlYWR5KHdpZGUpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF93aWRlY2hhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX1JlYWR5KCkgZGlkbid0IGZhaWwiKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjQzOSwxNCArMjUxNiwyNyBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocik7CiB9CiAKK3N0YXRpYyBpbnQKK2NoZWNrX3RpbWVfcm91bmRpbmcoaW50IHJvdW5kKQoreworICAgIGlmIChyb3VuZCAhPSBfUHlUaW1lX1JPVU5EX0RPV04gJiYgcm91bmQgIT0gX1B5VGltZV9ST1VORF9VUCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgcm91bmRpbmciKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIHRlc3RfcHl0aW1lX29iamVjdF90b190aW1lX3QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgdGltZV90IHNlYzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86cHl0aW1lX29iamVjdF90b190aW1lX3QiLCAmb2JqKSkKKyAgICBpbnQgcm91bmQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaTpweXRpbWVfb2JqZWN0X3RvX3RpbWVfdCIsICZvYmosICZyb3VuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZV90KG9iaiwgJnNlYykgPT0gLTEpCisgICAgaWYgKGNoZWNrX3RpbWVfcm91bmRpbmcocm91bmQpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lX3Qob2JqLCAmc2VjLCByb3VuZCkgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBfUHlMb25nX0Zyb21UaW1lX3Qoc2VjKTsKIH0KQEAgLTI0NTcsOSArMjU0NywxMiBAQAogICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgdGltZV90IHNlYzsKICAgICBsb25nIHVzZWM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOnB5dGltZV9vYmplY3RfdG9fdGltZXZhbCIsICZvYmopKQorICAgIGludCByb3VuZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pOnB5dGltZV9vYmplY3RfdG9fdGltZXZhbCIsICZvYmosICZyb3VuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXZhbChvYmosICZzZWMsICZ1c2VjKSA9PSAtMSkKKyAgICBpZiAoY2hlY2tfdGltZV9yb3VuZGluZyhyb3VuZCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWV2YWwob2JqLCAmc2VjLCAmdXNlYywgcm91bmQpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmwiLCBfUHlMb25nX0Zyb21UaW1lX3Qoc2VjKSwgdXNlYyk7CiB9CkBAIC0yNDcwLDEzICsyNTYzLDM1NCBAQAogICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgdGltZV90IHNlYzsKICAgICBsb25nIG5zZWM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOnB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMiLCAmb2JqKSkKKyAgICBpbnQgcm91bmQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaTpweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjIiwgJm9iaiwgJnJvdW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhvYmosICZzZWMsICZuc2VjKSA9PSAtMSkKKyAgICBpZiAoY2hlY2tfdGltZV9yb3VuZGluZyhyb3VuZCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKG9iaiwgJnNlYywgJm5zZWMsIHJvdW5kKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5sIiwgX1B5TG9uZ19Gcm9tVGltZV90KHNlYyksIG5zZWMpOwogfQogCitzdGF0aWMgdm9pZAorc2xvdF90cF9kZWwoUHlPYmplY3QgKnNlbGYpCit7CisgICAgX1B5X0lERU5USUZJRVIoX190cF9kZWxfXyk7CisgICAgUHlPYmplY3QgKmRlbCwgKnJlczsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA9PSAwKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIC8qIEV4ZWN1dGUgX19kZWxfXyBtZXRob2QsIGlmIGFueS4gKi8KKyAgICBkZWwgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChzZWxmLCAmUHlJZF9fX3RwX2RlbF9fKTsKKyAgICBpZiAoZGVsICE9IE5VTEwpIHsKKyAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZGVsLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGRlbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICBQeV9ERUNSRUYoZGVsKTsKKyAgICB9CisKKyAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgIC8qIHRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIG91dCAqLworCisgICAgLyogX19kZWxfXyByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICB7CisgICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gc2VsZi0+b2JfcmVmY250OworICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOworICAgICAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisgICAgfQorICAgIGFzc2VydCghUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpIHx8CisgICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aXRoX3RwX2RlbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeVR5cGVPYmplY3QgKnRwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOndpdGhfdHBfZGVsIiwgJm9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHRwID0gKFB5VHlwZU9iamVjdCAqKSBvYmo7CisgICAgaWYgKCFQeVR5cGVfQ2hlY2sob2JqKSB8fCAhUHlUeXBlX0hhc0ZlYXR1cmUodHAsIFB5X1RQRkxBR1NfSEVBUFRZUEUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaGVhcCB0eXBlIGV4cGVjdGVkLCBnb3QgJVIiLCBvYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHAtPnRwX2RlbCA9IHNsb3RfdHBfZGVsOworICAgIFB5X0lOQ1JFRihvYmopOworICAgIHJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGVzdF9pbmNyZWYoUHlPYmplY3QgKm9iKQoreworICAgIFB5X0lOQ1JFRihvYik7CisgICAgcmV0dXJuIG9iOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF94aW5jcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIFB5X1hJTkNSRUYoX3Rlc3RfaW5jcmVmKG9iaikpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9pbmNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5T2JqZWN0ICpvYmogPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgUHlfSU5DUkVGKF90ZXN0X2luY3JlZihvYmopKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfeGRlY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlfWERFQ1JFRihQeUxvbmdfRnJvbUxvbmcoMCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9kZWNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5X0RFQ1JFRihQeUxvbmdfRnJvbUxvbmcoMCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9pbmNyZWZfZGVjcmVmX0FQSShQeU9iamVjdCAqb2IpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBQeV9JbmNSZWYob2IpOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW1lbV9hbGxvYzAoUHlPYmplY3QgKnNlbGYpCit7CisgICAgdm9pZCAqcHRyOworCisgICAgcHRyID0gUHlNZW1fTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlNZW1fTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlNZW1fRnJlZShwdHIpOworCisgICAgcHRyID0gUHlPYmplY3RfTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlPYmplY3RfTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlPYmplY3RfRnJlZShwdHIpOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIHNpemVfdCBtYWxsb2Nfc2l6ZTsKKyAgICB2b2lkICpyZWFsbG9jX3B0cjsKKyAgICBzaXplX3QgcmVhbGxvY19uZXdfc2l6ZTsKKyAgICB2b2lkICpmcmVlX3B0cjsKK30gYWxsb2NfaG9va190OworCitzdGF0aWMgdm9pZCogaG9va19tYWxsb2MgKHZvaWQqIGN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5tYWxsb2Nfc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGhvb2stPmFsbG9jLm1hbGxvYyhob29rLT5hbGxvYy5jdHgsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCogaG9va19yZWFsbG9jICh2b2lkKiBjdHgsIHZvaWQqIHB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIGFsbG9jX2hvb2tfdCAqaG9vayA9IChhbGxvY19ob29rX3QgKiljdHg7CisgICAgaG9vay0+cmVhbGxvY19wdHIgPSBwdHI7CisgICAgaG9vay0+cmVhbGxvY19uZXdfc2l6ZSA9IG5ld19zaXplOworICAgIHJldHVybiBob29rLT5hbGxvYy5yZWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhvb2tfZnJlZSAodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5mcmVlX3B0ciA9IHB0cjsKKyAgICBob29rLT5hbGxvYy5mcmVlKGhvb2stPmFsbG9jLmN0eCwgcHRyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3Rfc2V0YWxsb2NhdG9ycyhQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4pCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZXJyb3JfbXNnOworICAgIGFsbG9jX2hvb2tfdCBob29rOworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplLCBzaXplMjsKKyAgICB2b2lkICpwdHIsICpwdHIyOworCisgICAgaG9vay5tYWxsb2Nfc2l6ZSA9IDA7CisgICAgaG9vay5yZWFsbG9jX3B0ciA9IE5VTEw7CisgICAgaG9vay5yZWFsbG9jX25ld19zaXplID0gMDsKKyAgICBob29rLmZyZWVfcHRyID0gTlVMTDsKKworICAgIGFsbG9jLmN0eCA9ICZob29rOworICAgIGFsbG9jLm1hbGxvYyA9ICZob29rX21hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gJmhvb2tfcmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gJmhvb2tfZnJlZTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmFsbG9jKTsKKworICAgIHNpemUgPSA0MjsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0ciA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiBwdHIgPSBQeU1lbV9NYWxsb2Moc2l6ZSk7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogcHRyID0gUHlPYmplY3RfTWFsbG9jKHNpemUpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIgPSBOVUxMOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3JfbXNnID0gIm1hbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2subWFsbG9jX3NpemUgIT0gc2l6ZSkgeworICAgICAgICBlcnJvcl9tc2cgPSAibWFsbG9jIGludmFsaWQgc2l6ZSI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzaXplMiA9IDIwMDsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0cjIgPSBQeU1lbV9SYXdSZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0cjIgPSBQeU1lbV9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6IHB0cjIgPSBQeU9iamVjdF9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIyID0gTlVMTDsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHB0cjIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2sucmVhbGxvY19wdHIgIT0gcHRyCisgICAgICAgIHx8IGhvb2sucmVhbGxvY19uZXdfc2l6ZSAhPSBzaXplMikgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBpbnZhbGlkIHBhcmFtZXRlcnMiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiBQeU1lbV9SYXdGcmVlKHB0cjIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IFB5TWVtX0ZyZWUocHRyMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogUHlPYmplY3RfRnJlZShwdHIyKTsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGhvb2suZnJlZV9wdHIgIT0gcHRyMikgeworICAgICAgICBlcnJvcl9tc2cgPSAiZnJlZSBpbnZhbGlkIHBvaW50ZXIiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJlcyA9IFB5X05vbmU7CisgICAgZ290byBmaW5hbGx5OworCitmYWlsOgorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIGVycm9yX21zZyk7CisKK2ZpbmFsbHk6CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmhvb2suYWxsb2MpOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5bWVtX3NldHJhd2FsbG9jYXRvcnMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIHRlc3Rfc2V0YWxsb2NhdG9ycyhQWU1FTV9ET01BSU5fUkFXKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcHltZW1fc2V0YWxsb2NhdG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gdGVzdF9zZXRhbGxvY2F0b3JzKFBZTUVNX0RPTUFJTl9NRU0pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiB0ZXN0X3NldGFsbG9jYXRvcnMoUFlNRU1fRE9NQUlOX09CSik7Cit9CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfZW1wdHksCisiIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ19ub19zaWduYXR1cmUsCisiVGhpcyBkb2NzdHJpbmcgaGFzIG5vIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUsCisiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUoJG1vZHVsZSwgLywgYm9vKVxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyLAorImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlMigkbW9kdWxlLCAvLCBib28pXG4iCisiXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBhbHNvIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZSgkbW9kdWxlLCAvLCBzaWcpXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUuIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMsCisiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcygkbW9kdWxlLCAvLCBwYXJhbWV0ZXIpXG4iCisiLS1cbiIKKyJcbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUgYW5kIHNvbWUgZXh0cmEgbmV3bGluZXMuIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzKG1vZHVsZSwgcz0nYXZvY2FkbycsXG4iCisiICAgICAgICBiPWInYnl0ZXMnLCBkPTMuMTQsIGk9MzUsIG49Tm9uZSwgdD1UcnVlLCBmPUZhbHNlLFxuIgorIiAgICAgICAgbG9jYWw9dGhlX251bWJlcl90aHJlZSwgc3lzPXN5cy5tYXhzaXplLFxuIgorIiAgICAgICAgZXhwPXN5cy5tYXhzaXplIC0gMSlcbiIKKyItLVxuIgorIlxuIgorIlxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSB3aXRoIHBhcmFtZXRlcnMsXG4iCisiYW5kIHRoZSBwYXJhbWV0ZXJzIHRha2UgZGVmYXVsdHMgb2YgdmFyeWluZyB0eXBlcy4iCispOworCiAjaWZkZWYgV0lUSF9USFJFQUQKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeVRocmVhZF90eXBlX2xvY2sgc3RhcnRfZXZlbnQ7CkBAIC0yNTcxLDExICszMDA1LDE3IEBACiAgICAgeyJyYWlzZV9leGNlcHRpb24iLCAgICAgICAgIHJhaXNlX2V4Y2VwdGlvbiwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyYWlzZV9tZW1vcnllcnJvciIsICAgKFB5Q0Z1bmN0aW9uKXJhaXNlX21lbW9yeWVycm9yLCAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9jb25maWciLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9jb25maWcsICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3NpemVvZl9jX3R5cGVzIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X3NpemVvZl9jX3R5cGVzLCBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2RhdGV0aW1lX2NhcGkiLCAgdGVzdF9kYXRldGltZV9jYXBpLCAgICAgICAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9saXN0X2FwaSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9saXN0X2FwaSwgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2RpY3RfaXRlcmF0aW9uIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X2RpY3RfaXRlcmF0aW9uLE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbGF6eV9oYXNoX2luaGVyaXRhbmNlIiwgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sYXp5X2hhc2hfaW5oZXJpdGFuY2UsTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FwaSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FwaSwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWsiLChQeUNGdW5jdGlvbil0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9pbmNyZWZfZG9lc250X2xlYWsiLCAoUHlDRnVuY3Rpb24pdGVzdF9pbmNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrIiwoUHlDRnVuY3Rpb24pdGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfZGVjcmVmX2RvZXNudF9sZWFrIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfZGVjcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfaW5jcmVmX2RlY3JlZl9BUEkiLCAgKFB5Q0Z1bmN0aW9uKXRlc3RfaW5jcmVmX2RlY3JlZl9BUEksICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLCAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FuZF9vdmVyZmxvdywKICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FzX2RvdWJsZSIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FzX2RvdWJsZSxNRVRIX05PQVJHU30sCkBAIC0yNjYzLDYgKzMxMDMsMzggQEAKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZV90IiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVfdCwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZXZhbCwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjIiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjLCAgTUVUSF9WQVJBUkdTfSwKKyAgICB7IndpdGhfdHBfZGVsIiwgICAgICAgICAgICAgd2l0aF90cF9kZWwsICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRlc3RfcHltZW1fYWxsb2MwIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fYWxsb2MwLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtX3NldHJhd2FsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9zZXRyYXdhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtX3NldGFsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5b2JqZWN0X3NldGFsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJub19kb2NzdHJpbmciLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1N9LAorICAgIHsiZG9jc3RyaW5nX2VtcHR5IiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfZW1wdHl9LAorICAgIHsiZG9jc3RyaW5nX25vX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX25vX3NpZ25hdHVyZX0sCisgICAgeyJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZTJ9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcyIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lc30sCisgICAgeyJkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfd2l0aF9kZWZhdWx0cyIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHN9LAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgeyJjYWxsX2luX3RlbXBvcmFyeV9jX3RocmVhZCIsIGNhbGxfaW5fdGVtcG9yYXJ5X2NfdGhyZWFkLCBNRVRIX08sCiAgICAgIFB5RG9jX1NUUigic2V0X2Vycm9yX2NsYXNzKGVycm9yX2NsYXNzKSAtPiBOb25lIil9LApAQCAtMjg4MSw2ICszMzUzLDggQEAKICAgICBQeV9JTkNSRUYoJlB5SW5zdGFuY2VNZXRob2RfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJpbnN0YW5jZW1ldGhvZCIsIChQeU9iamVjdCAqKSZQeUluc3RhbmNlTWV0aG9kX1R5cGUpOwogCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgInRoZV9udW1iZXJfdGhyZWUiLCAzKTsKKwogICAgIFRlc3RFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3Rlc3RjYXBpLmVycm9yIiwgTlVMTCwgTlVMTCk7CiAgICAgUHlfSU5DUkVGKFRlc3RFcnJvcik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFRlc3RFcnJvcik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0ZW1iZWQuYyBiL01vZHVsZXMvX3Rlc3RlbWJlZC5jCmluZGV4IDUxYjQzOWYuLmEyMWQyNTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Rlc3RlbWJlZC5jCisrKyBiL01vZHVsZXMvX3Rlc3RlbWJlZC5jCkBAIC0xLDcgKzEsMjYgQEAKICNpbmNsdWRlIDxQeXRob24uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCi12b2lkIHByaW50X3N1YmludGVycCh2b2lkKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW1iZWRkZWQgaW50ZXJwcmV0ZXIgdGVzdHMgdGhhdCBuZWVkIGEgY3VzdG9tIGV4ZQorICoKKyAqIEV4ZWN1dGVkIHZpYSAnRW1iZWRkaW5nVGVzdHMnIGluIExpYi90ZXN0L3Rlc3RfY2FwaS5weQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX3Rlc3RlbWJlZF9QeV9Jbml0aWFsaXplKHZvaWQpCit7CisgICAgLyogSEFDSzogdGhlICIuLyIgYXQgZnJvbnQgYXZvaWRzIGEgc2VhcmNoIGFsb25nIHRoZSBQQVRIIGluCisgICAgICAgTW9kdWxlcy9nZXRwYXRoLmMgKi8KKyAgICBQeV9TZXRQcm9ncmFtTmFtZShMIi4vX3Rlc3RlbWJlZCIpOworICAgIFB5X0luaXRpYWxpemUoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRlc3QgcmVwZWF0ZWQgaW5pdGFsaXNhdGlvbiBhbmQgc3ViaW50ZXJwcmV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHByaW50X3N1YmludGVycCh2b2lkKQogewogICAgIC8qIEp1c3Qgb3V0cHV0IHNvbWUgZGVidWcgc3R1ZmYgKi8KICAgICBQeVRocmVhZFN0YXRlICp0cyA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CkBAIC0xNCw3ICszMyw3IEBACiAgICAgKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3N0YXRpYyB2b2lkIHRlc3RfcmVwZWF0ZWRfaW5pdF9hbmRfc3ViaW50ZXJwcmV0ZXJzKHZvaWQpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqbWFpbnN0YXRlLCAqc3Vic3RhdGU7CiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTI0LDEwICs0Myw3IEBACiAKICAgICBmb3IgKGk9MDsgaTwzOyBpKyspIHsKICAgICAgICAgcHJpbnRmKCItLS0gUGFzcyAlZCAtLS1cbiIsIGkpOwotICAgICAgICAvKiBIQUNLOiB0aGUgIi4vIiBhdCBmcm9udCBhdm9pZHMgYSBzZWFyY2ggYWxvbmcgdGhlIFBBVEggaW4KLSAgICAgICAgICAgTW9kdWxlcy9nZXRwYXRoLmMgKi8KLSAgICAgICAgUHlfU2V0UHJvZ3JhbU5hbWUoTCIuL190ZXN0ZW1iZWQiKTsKLSAgICAgICAgUHlfSW5pdGlhbGl6ZSgpOworICAgICAgICBfdGVzdGVtYmVkX1B5X0luaXRpYWxpemUoKTsKICAgICAgICAgbWFpbnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC01NCw1ICs3MCw3MSBAQAogICAgICAgICBQeUV2YWxfUmVzdG9yZVRocmVhZChtYWluc3RhdGUpOwogICAgICAgICBQeV9GaW5hbGl6ZSgpOwogICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUZXN0IGZvcmNpbmcgYSBwYXJ0aWN1bGFyIElPIGVuY29kaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGNoZWNrX3N0ZGlvX2RldGFpbHMoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKiBlcnJvcnMpCit7CisgICAgLyogT3V0cHV0IGluZm8gZm9yIHRoZSB0ZXN0IGNhc2UgdG8gY2hlY2sgKi8KKyAgICBpZiAoZW5jb2RpbmcpIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlbmNvZGluZzogJXNcbiIsIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0XG4iKTsKKyAgICB9CisgICAgaWYgKGVycm9ycykgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVycm9yczogJXNcbiIsIGVycm9ycyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHRcbiIpOworICAgIH0KKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAvKiBGb3JjZSB0aGUgZ2l2ZW4gSU8gZW5jb2RpbmcgKi8KKyAgICBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGVuY29kaW5nLCBlcnJvcnMpOworICAgIF90ZXN0ZW1iZWRfUHlfSW5pdGlhbGl6ZSgpOworICAgIFB5UnVuX1NpbXBsZVN0cmluZygKKyAgICAgICAgImltcG9ydCBzeXM7IgorICAgICAgICAicHJpbnQoJ3N0ZGluOiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRpbikpOyIKKyAgICAgICAgInByaW50KCdzdGRvdXQ6IHswLmVuY29kaW5nfTp7MC5lcnJvcnN9Jy5mb3JtYXQoc3lzLnN0ZG91dCkpOyIKKyAgICAgICAgInByaW50KCdzdGRlcnI6IHswLmVuY29kaW5nfTp7MC5lcnJvcnN9Jy5mb3JtYXQoc3lzLnN0ZGVycikpOyIKKyAgICAgICAgInN5cy5zdGRvdXQuZmx1c2goKSIKKyAgICApOworICAgIFB5X0ZpbmFsaXplKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKHZvaWQpCit7CisgICAgLyogQ2hlY2sgdmFyaW91cyBjb21iaW5hdGlvbnMgKi8KKyAgICBwcmludGYoIi0tLSBVc2UgZGVmYXVsdHMgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKE5VTEwsIE5VTEwpOworICAgIHByaW50ZigiLS0tIFNldCBlcnJvcnMgb25seSAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoTlVMTCwgInN1cnJvZ2F0ZWVzY2FwZSIpOworICAgIHByaW50ZigiLS0tIFNldCBlbmNvZGluZyBvbmx5IC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscygibGF0aW4tMSIsIE5VTEwpOworICAgIHByaW50ZigiLS0tIFNldCBlbmNvZGluZyBhbmQgZXJyb3JzIC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscygibGF0aW4tMSIsICJzdXJyb2dhdGVlc2NhcGUiKTsKKworICAgIC8qIENoZWNrIGNhbGxpbmcgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgKi8KKyAgICBQeV9Jbml0aWFsaXplKCk7CisKKyAgICBpZiAoUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhOVUxMLCBOVUxMKSA9PSAwKSB7CisgICAgICAgIHByaW50ZigiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyIpOworICAgIH0KKyAgICBQeV9GaW5hbGl6ZSgpOworfQorCisvKiBEaWZmZXJlbnQgZW1iZWRkaW5nIHRlc3RzICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCisgICAgLyogVE9ETzogQ2hlY2sgdGhlIGFyZ3VtZW50IHN0cmluZyB0byBhbGxvdyBmb3IgbW9yZSB0ZXN0IGNhc2VzICovCisgICAgaWYgKGFyZ2MgPiAxKSB7CisgICAgICAgIC8qIEZvciBub3c6IGFzc3VtZSAiZm9yY2VkX2lvX2VuY29kaW5nICovCisgICAgICAgIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogUnVuIHRoZSBvcmlnaW5hbCBlbWJlZGRpbmcgdGVzdCBjYXNlIGJ5IGRlZmF1bHQgKi8KKyAgICAgICAgdGVzdF9yZXBlYXRlZF9pbml0X2FuZF9zdWJpbnRlcnByZXRlcnMoKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYyBiL01vZHVsZXMvX3Rlc3RpbXBvcnRtdWx0aXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWViNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQyBleHRlbnNpb25zIG1vZHVsZSB0byB0ZXN0IGltcG9ydGluZyBtdWx0aXBsZSBtb2R1bGVzIGZyb20gb25lIGNvbXBpbGVkCisgKiBmaWxlIChpc3N1ZTE2NDIxKS4gVGhpcyBmaWxlIGRlZmluZXMgMyBtb2R1bGVzIChfdGVzdGltcG9ydG1vZHVsZSwKKyAqIGZvbywgYmFyKSwgb25seSB0aGUgZmlyc3Qgb25lIGlzIGNhbGxlZCB0aGUgc2FtZSBhcyB0aGUgY29tcGlsZWQgZmlsZS4KKyAqLworI2luY2x1ZGU8UHl0aG9uLmg+CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX3Rlc3RpbXBvcnRtdWx0aXBsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGUiLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlIGRvYyIsCisgICAgLTEsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQyBQeUluaXRfX3Rlc3RpbXBvcnRtdWx0aXBsZSh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl90ZXN0aW1wb3J0bXVsdGlwbGUpOworfQorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9mb29tb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2ZvbyIsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfZm9vIGRvYyIsCisgICAgLTEsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQyBQeUluaXRfX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28odm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfZm9vbW9kdWxlKTsKK30KKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfYmFybW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXIiLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2JhciBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGVfYmFyKHZvaWQpeworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9iYXJtb2R1bGUpOworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYyBiL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCmluZGV4IGQxZGM2MWQuLjk5MjViMGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCkBAIC0xNyw2ICsxNyw4IEBACiBzdGF0aWMgbG9uZyBuYl90aHJlYWRzID0gMDsKIHN0YXRpYyBQeU9iamVjdCAqc3RyX2RpY3Q7CiAKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CisKIC8qIExvY2sgb2JqZWN0cyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC02OCw3ICs3MCw3IEBACiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICByID0gUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKGxvY2ssIG1pY3Jvc2Vjb25kcywgMSk7CiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgaWYgKHIgPT0gUFlfTE9DS19JTlRSKSB7CiAgICAgICAgICAgICAvKiBSdW4gc2lnbmFsIGhhbmRsZXJzIGlmIHdlIHdlcmUgaW50ZXJydXB0ZWQuICBQcm9wYWdhdGUKQEAgLTI1NSwxNCArMjU3LDE3IEBACiBzdGF0aWMgdm9pZAogcmxvY2tfZGVhbGxvYyhybG9ja29iamVjdCAqc2VsZikKIHsKLSAgICBhc3NlcnQoc2VsZi0+cmxvY2tfbG9jayk7CiAgICAgaWYgKHNlbGYtPmluX3dlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwotICAgIC8qIFVubG9jayB0aGUgbG9jayBzbyBpdCdzIHNhZmUgdG8gZnJlZSBpdCAqLwotICAgIGlmIChzZWxmLT5ybG9ja19jb3VudCA+IDApCi0gICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKyAgICAvKiBzZWxmLT5ybG9ja19sb2NrIGNhbiBiZSBOVUxMIGlmIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSBmYWlsZWQKKyAgICAgICBpbiBybG9ja19uZXcoKSAqLworICAgIGlmIChzZWxmLT5ybG9ja19sb2NrICE9IE5VTEwpIHsKKyAgICAgICAgLyogVW5sb2NrIHRoZSBsb2NrIHNvIGl0J3Mgc2FmZSB0byBmcmVlIGl0ICovCisgICAgICAgIGlmIChzZWxmLT5ybG9ja19jb3VudCA+IDApCisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CiAKLSAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKyAgICB9CiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKIH0KIApAQCAtMzc0LDEzICszNzksMTMgQEAKIHRvIGJlIGF2YWlsYWJsZSBmb3Igb3RoZXIgdGhyZWFkcy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXJsb2NrX2FjcXVpcmVfcmVzdG9yZShybG9ja29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3Jsb2NrX2FjcXVpcmVfcmVzdG9yZShybG9ja29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgbG9uZyBvd25lcjsKICAgICB1bnNpZ25lZCBsb25nIGNvdW50OwogICAgIGludCByID0gMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmcsICJrbDpfYWNxdWlyZV9yZXN0b3JlIiwgJmNvdW50LCAmb3duZXIpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiKGtsKTpfYWNxdWlyZV9yZXN0b3JlIiwgJmNvdW50LCAmb3duZXIpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2ssIDApKSB7CkBAIC00NTIsMTUgKzQ1NywxNiBAQAogCiAgICAgc2VsZiA9IChybG9ja29iamVjdCAqKSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKICAgICBpZiAoc2VsZiAhPSBOVUxMKSB7Ci0gICAgICAgIHNlbGYtPnJsb2NrX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7Ci0gICAgICAgIGlmIChzZWxmLT5ybG9ja19sb2NrID09IE5VTEwpIHsKLSAgICAgICAgICAgIHR5cGUtPnRwX2ZyZWUoc2VsZik7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGhyZWFkRXJyb3IsICJjYW4ndCBhbGxvY2F0ZSBsb2NrIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgICAgICBzZWxmLT5pbl93ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgICAgIHNlbGYtPnJsb2NrX293bmVyID0gMDsKICAgICAgICAgc2VsZi0+cmxvY2tfY291bnQgPSAwOworCisgICAgICAgIHNlbGYtPnJsb2NrX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgICAgIGlmIChzZWxmLT5ybG9ja19sb2NrID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUaHJlYWRFcnJvciwgImNhbid0IGFsbG9jYXRlIGxvY2siKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxmOwpAQCAtNDgyLDcgKzQ4OCw3IEBACiAgICAgeyJfaXNfb3duZWQiLCAgICAgKFB5Q0Z1bmN0aW9uKXJsb2NrX2lzX293bmVkLAogICAgICBNRVRIX05PQVJHUywgcmxvY2tfaXNfb3duZWRfZG9jfSwKICAgICB7Il9hY3F1aXJlX3Jlc3RvcmUiLCAoUHlDRnVuY3Rpb24pcmxvY2tfYWNxdWlyZV9yZXN0b3JlLAotICAgICBNRVRIX08sIHJsb2NrX2FjcXVpcmVfcmVzdG9yZV9kb2N9LAorICAgICBNRVRIX1ZBUkFSR1MsIHJsb2NrX2FjcXVpcmVfcmVzdG9yZV9kb2N9LAogICAgIHsiX3JlbGVhc2Vfc2F2ZSIsIChQeUNGdW5jdGlvbilybG9ja19yZWxlYXNlX3NhdmUsCiAgICAgIE1FVEhfTk9BUkdTLCBybG9ja19yZWxlYXNlX3NhdmVfZG9jfSwKICAgICB7Il9fZW50ZXJfXyIsICAgIChQeUNGdW5jdGlvbilybG9ja19hY3F1aXJlLApAQCAtNzQxLDcgKzc0Nyw3IEBACiAgICAgd3IgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKSBzZWxmLCBOVUxMKTsKICAgICBpZiAod3IgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7Ci0gICAgc2VsZi0+d3JfY2FsbGJhY2sgPSBQeUNGdW5jdGlvbl9OZXcoJndyX2NhbGxiYWNrX2RlZiwgd3IpOworICAgIHNlbGYtPndyX2NhbGxiYWNrID0gUHlDRnVuY3Rpb25fTmV3RXgoJndyX2NhbGxiYWNrX2RlZiwgd3IsIE5VTEwpOwogICAgIFB5X0RFQ1JFRih3cik7CiAgICAgaWYgKHNlbGYtPndyX2NhbGxiYWNrID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwpAQCAtMTAwMSw3ICsxMDA3LDcgQEAKICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKAogICAgICAgICAgICAgICAgICJVbmhhbmRsZWQgZXhjZXB0aW9uIGluIHRocmVhZCBzdGFydGVkIGJ5ICIpOwogICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbHVlLCAmdGIpOwotICAgICAgICAgICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgICAgICAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgICAgICAgICBpZiAoZmlsZSAhPSBOVUxMICYmIGZpbGUgIT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QoYm9vdC0+ZnVuYywgZmlsZSwgMCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMTcyLDYgKzExNzgsNjYgQEAKIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIGFuZCBzcGVjaWFsaXplZCBwdXJwb3NlcyBvbmx5LlxuXAogSW4gbW9zdCBhcHBsaWNhdGlvbnMgYHRocmVhZGluZy5lbnVtZXJhdGUoKWAgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4iKTsKIAorc3RhdGljIHZvaWQKK3JlbGVhc2Vfc2VudGluZWwodm9pZCAqd3IpCit7CisgICAgLyogVHJpY2t5OiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZQorICAgICAgIGlzIGJlaW5nIGRlbGV0ZWQuICBUaGVyZWZvcmUsIG9ubHkgc2ltcGxlIEMgY29kZSBjYW4gc2FmZWx5CisgICAgICAgZXhlY3V0ZSBoZXJlLiAqLworICAgIFB5T2JqZWN0ICpvYmogPSBQeVdlYWtyZWZfR0VUX09CSkVDVCh3cik7CisgICAgbG9ja29iamVjdCAqbG9jazsKKyAgICBpZiAob2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgYXNzZXJ0KFB5X1RZUEUob2JqKSA9PSAmTG9ja3R5cGUpOworICAgICAgICBsb2NrID0gKGxvY2tvYmplY3QgKikgb2JqOworICAgICAgICBpZiAobG9jay0+bG9ja2VkKSB7CisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sobG9jay0+bG9ja19sb2NrKTsKKyAgICAgICAgICAgIGxvY2stPmxvY2tlZCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogRGVhbGxvY2F0aW5nIGEgd2Vha3JlZiB3aXRoIGEgTlVMTCBjYWxsYmFjayBvbmx5IGNhbGxzCisgICAgICAgUHlPYmplY3RfR0NfRGVsKCksIHdoaWNoIGNhbid0IGNhbGwgYW55IFB5dGhvbiBjb2RlLiAqLworICAgIFB5X0RFQ1JFRih3cik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0aHJlYWRfX3NldF9zZW50aW5lbChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqd3I7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKKyAgICBsb2Nrb2JqZWN0ICpsb2NrOworCisgICAgaWYgKHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgIT0gTlVMTCkgeworICAgICAgICAvKiBXZSBtdXN0IHN1cHBvcnQgdGhlIHJlLWNyZWF0aW9uIG9mIHRoZSBsb2NrIGZyb20gYQorICAgICAgICAgICBmb3JrKCllZCBjaGlsZC4gKi8KKyAgICAgICAgYXNzZXJ0KHRzdGF0ZS0+b25fZGVsZXRlID09ICZyZWxlYXNlX3NlbnRpbmVsKTsKKyAgICAgICAgd3IgPSAoUHlPYmplY3QgKikgdHN0YXRlLT5vbl9kZWxldGVfZGF0YTsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUgPSBOVUxMOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhID0gTlVMTDsKKyAgICAgICAgUHlfREVDUkVGKHdyKTsKKyAgICB9CisgICAgbG9jayA9IG5ld2xvY2tvYmplY3QoKTsKKyAgICBpZiAobG9jayA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBUaGUgbG9jayBpcyBvd25lZCBieSB3aG9ldmVyIGNhbGxlZCBfc2V0X3NlbnRpbmVsKCksIGJ1dCB0aGUgd2Vha3JlZgorICAgICAgIGhhbmdzIHRvIHRoZSB0aHJlYWQgc3RhdGUuICovCisgICAgd3IgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKSBsb2NrLCBOVUxMKTsKKyAgICBpZiAod3IgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobG9jayk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhID0gKHZvaWQgKikgd3I7CisgICAgdHN0YXRlLT5vbl9kZWxldGUgPSAmcmVsZWFzZV9zZW50aW5lbDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIGxvY2s7Cit9CisKK1B5RG9jX1NUUlZBUihfc2V0X3NlbnRpbmVsX2RvYywKKyJfc2V0X3NlbnRpbmVsKCkgLT4gbG9ja1xuXAorXG5cCitTZXQgYSBzZW50aW5lbCBsb2NrIHRoYXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBjdXJyZW50IHRocmVhZFxuXAorc3RhdGUgaXMgZmluYWxpemVkIChhZnRlciBpdCBpcyB1bnRpZWQgZnJvbSB0aGUgaW50ZXJwcmV0ZXIpLlxuXAorXG5cCitUaGlzIGlzIGEgcHJpdmF0ZSBBUEkgZm9yIHRoZSB0aHJlYWRpbmcgbW9kdWxlLiIpOworCiBzdGF0aWMgUHlPYmplY3QgKgogdGhyZWFkX3N0YWNrX3NpemUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtMTI0Nyw2ICsxMzEzLDggQEAKICAgICAgTUVUSF9OT0FSR1MsIF9jb3VudF9kb2N9LAogICAgIHsic3RhY2tfc2l6ZSIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGhyZWFkX3N0YWNrX3NpemUsCiAgICAgIE1FVEhfVkFSQVJHUywgc3RhY2tfc2l6ZV9kb2N9LAorICAgIHsiX3NldF9zZW50aW5lbCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGhyZWFkX19zZXRfc2VudGluZWwsCisgICAgIE1FVEhfTk9BUkdTLCBfc2V0X3NlbnRpbmVsX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGtpbnRlci5jIGIvTW9kdWxlcy9fdGtpbnRlci5jCmluZGV4IDI2MmQ2NzkuLjZkNzc3ZDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3RraW50ZXIuYworKysgYi9Nb2R1bGVzL190a2ludGVyLmMKQEAgLTExNCw1MiArMTE0LDYwIEBACiAKIC8qIFRoZSB0aHJlYWRpbmcgc2l0dWF0aW9uIGlzIGNvbXBsaWNhdGVkLiAgVGNsIGlzIG5vdCB0aHJlYWQtc2FmZSwgZXhjZXB0CiAgICB3aGVuIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS10aHJlYWRzLgotICAgU28gd2UgbmVlZCB0byB1c2UgYSBsb2NrIGFyb3VuZCBhbGwgdXNlcyBvZiBUY2wuICBQcmV2aW91c2x5LCB0aGUgUHl0aG9uCi0gICBpbnRlcnByZXRlciBsb2NrIHdhcyB1c2VkIGZvciB0aGlzLiAgSG93ZXZlciwgdGhpcyBjYXVzZXMgcHJvYmxlbXMgd2hlbgotICAgb3RoZXIgUHl0aG9uIHRocmVhZHMgbmVlZCB0byBydW4gd2hpbGUgVGNsIGlzIGJsb2NrZWQgd2FpdGluZyBmb3IgZXZlbnRzLgogCi0gICBUbyBzb2x2ZSB0aGlzIHByb2JsZW0sIGEgc2VwYXJhdGUgbG9jayBmb3IgVGNsIGlzIGludHJvZHVjZWQuICBIb2xkaW5nIGl0Ci0gICBpcyBpbmNvbXBhdGlibGUgd2l0aCBob2xkaW5nIFB5dGhvbidzIGludGVycHJldGVyIGxvY2suICBUaGUgZm9sbG93aW5nIGZvdXIKLSAgIG1hY3JvcyBtYW5pcHVsYXRlIGJvdGggbG9ja3MgdG9nZXRoZXIuCisgICBTbyB3ZSBuZWVkIHRvIHVzZSBhIGxvY2sgYXJvdW5kIGFsbCB1c2VzIG9mIFRjbC4gIFByZXZpb3VzbHksIHRoZQorICAgUHl0aG9uIGludGVycHJldGVyIGxvY2sgd2FzIHVzZWQgZm9yIHRoaXMuICBIb3dldmVyLCB0aGlzIGNhdXNlcworICAgcHJvYmxlbXMgd2hlbiBvdGhlciBQeXRob24gdGhyZWFkcyBuZWVkIHRvIHJ1biB3aGlsZSBUY2wgaXMgYmxvY2tlZAorICAgd2FpdGluZyBmb3IgZXZlbnRzLgogCi0gICBFTlRFUl9UQ0wgYW5kIExFQVZFX1RDTCBhcmUgYnJhY2tldHMsIGp1c3QgbGlrZSBQeV9CRUdJTl9BTExPV19USFJFQURTIGFuZAotICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMuICBUaGV5IHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGEgY2FsbCBpbnRvIFRjbCBpcyBtYWRlCi0gICB0aGF0IGNvdWxkIGNhbGwgYW4gZXZlbnQgaGFuZGxlciwgb3Igb3RoZXJ3aXNlIGFmZmVjdCB0aGUgc3RhdGUgb2YgYSBUY2wKLSAgIGludGVycHJldGVyLiAgVGhlc2UgYXNzdW1lIHRoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaGFzIHRoZSBQeXRob24KLSAgIGludGVycHJldGVyIGxvY2s7IGluc2lkZSB0aGUgYnJhY2tldHMsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayBoYXMgYmVlbgotICAgcmVsZWFzZWQgYW5kIHRoZSBsb2NrIGZvciBUY2wgaGFzIGJlZW4gYWNxdWlyZWQuCisgICBUbyBzb2x2ZSB0aGlzIHByb2JsZW0sIGEgc2VwYXJhdGUgbG9jayBmb3IgVGNsIGlzIGludHJvZHVjZWQuCisgICBIb2xkaW5nIGl0IGlzIGluY29tcGF0aWJsZSB3aXRoIGhvbGRpbmcgUHl0aG9uJ3MgaW50ZXJwcmV0ZXIgbG9jay4KKyAgIFRoZSBmb2xsb3dpbmcgZm91ciBtYWNyb3MgbWFuaXB1bGF0ZSBib3RoIGxvY2tzIHRvZ2V0aGVyLgogCi0gICBTb21ldGltZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIGJvdGggdGhlIFB5dGhvbiBsb2NrIGFuZCB0aGUgVGNsIGxvY2suCi0gICAoRm9yIGV4YW1wbGUsIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSB0aGUgVGNsIGludGVycHJldGVyIHJlc3VsdCB0byBhCi0gICBQeXRob24gc3RyaW5nIG9iamVjdC4pICBUaGlzIGNhbiBiZSBkb25lIGJ5IHVzaW5nIGRpZmZlcmVudCBtYWNyb3MgdG8gY2xvc2UKLSAgIHRoZSBFTlRFUl9UQ0wgYmxvY2s6IEVOVEVSX09WRVJMQVAgcmVhY3F1aXJlcyB0aGUgUHl0aG9uIGxvY2sgKGFuZCByZXN0b3JlcwotICAgdGhlIHRocmVhZCBzdGF0ZSkgYnV0IGRvZXNuJ3QgcmVsZWFzZSB0aGUgVGNsIGxvY2s7IExFQVZFX09WRVJMQVBfVENMCi0gICByZWxlYXNlcyB0aGUgVGNsIGxvY2suCisgICBFTlRFUl9UQ0wgYW5kIExFQVZFX1RDTCBhcmUgYnJhY2tldHMsIGp1c3QgbGlrZQorICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBhbmQgUHlfRU5EX0FMTE9XX1RIUkVBRFMuICBUaGV5IHNob3VsZCBiZQorICAgdXNlZCB3aGVuZXZlciBhIGNhbGwgaW50byBUY2wgaXMgbWFkZSB0aGF0IGNvdWxkIGNhbGwgYW4gZXZlbnQKKyAgIGhhbmRsZXIsIG9yIG90aGVyd2lzZSBhZmZlY3QgdGhlIHN0YXRlIG9mIGEgVGNsIGludGVycHJldGVyLiAgVGhlc2UKKyAgIGFzc3VtZSB0aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGhhcyB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2s7CisgICBpbnNpZGUgdGhlIGJyYWNrZXRzLCB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2sgaGFzIGJlZW4gcmVsZWFzZWQKKyAgIGFuZCB0aGUgbG9jayBmb3IgVGNsIGhhcyBiZWVuIGFjcXVpcmVkLgorCisgICBTb21ldGltZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIGJvdGggdGhlIFB5dGhvbiBsb2NrIGFuZCB0aGUgVGNsCisgICBsb2NrLiAgKEZvciBleGFtcGxlLCB3aGVuIHRyYW5zZmVycmluZyBkYXRhIGZyb20gdGhlIFRjbAorICAgaW50ZXJwcmV0ZXIgcmVzdWx0IHRvIGEgUHl0aG9uIHN0cmluZyBvYmplY3QuKSAgVGhpcyBjYW4gYmUgZG9uZSBieQorICAgdXNpbmcgZGlmZmVyZW50IG1hY3JvcyB0byBjbG9zZSB0aGUgRU5URVJfVENMIGJsb2NrOiBFTlRFUl9PVkVSTEFQCisgICByZWFjcXVpcmVzIHRoZSBQeXRob24gbG9jayAoYW5kIHJlc3RvcmVzIHRoZSB0aHJlYWQgc3RhdGUpIGJ1dAorICAgZG9lc24ndCByZWxlYXNlIHRoZSBUY2wgbG9jazsgTEVBVkVfT1ZFUkxBUF9UQ0wgcmVsZWFzZXMgdGhlIFRjbAorICAgbG9jay4KIAogICAgQnkgY29udHJhc3QsIEVOVEVSX1BZVEhPTiBhbmQgTEVBVkVfUFlUSE9OIGFyZSB1c2VkIGluIFRjbCBldmVudAotICAgaGFuZGxlcnMgd2hlbiB0aGUgaGFuZGxlciBuZWVkcyB0byB1c2UgUHl0aG9uLiAgU3VjaCBldmVudCBoYW5kbGVycyBhcmUKLSAgIGVudGVyZWQgd2hpbGUgdGhlIGxvY2sgZm9yIFRjbCBpcyBoZWxkOyB0aGUgZXZlbnQgaGFuZGxlciBwcmVzdW1hYmx5IG5lZWRzCi0gICB0byB1c2UgUHl0aG9uLiAgRU5URVJfUFlUSE9OIHJlbGVhc2VzIHRoZSBsb2NrIGZvciBUY2wgYW5kIGFjcXVpcmVzCi0gICB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2ssIHJlc3RvcmluZyB0aGUgYXBwcm9wcmlhdGUgdGhyZWFkIHN0YXRlLCBhbmQKLSAgIExFQVZFX1BZVEhPTiByZWxlYXNlcyB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2sgYW5kIHJlLWFjcXVpcmVzIHRoZSBsb2NrCi0gICBmb3IgVGNsLiAgSXQgaXMgb2theSBmb3IgRU5URVJfVENML0xFQVZFX1RDTCBwYWlycyB0byBiZSBjb250YWluZWQgaW5zaWRlCi0gICB0aGUgY29kZSBiZXR3ZWVuIEVOVEVSX1BZVEhPTiBhbmQgTEVBVkVfUFlUSE9OLgorICAgaGFuZGxlcnMgd2hlbiB0aGUgaGFuZGxlciBuZWVkcyB0byB1c2UgUHl0aG9uLiAgU3VjaCBldmVudCBoYW5kbGVycworICAgYXJlIGVudGVyZWQgd2hpbGUgdGhlIGxvY2sgZm9yIFRjbCBpcyBoZWxkOyB0aGUgZXZlbnQgaGFuZGxlcgorICAgcHJlc3VtYWJseSBuZWVkcyB0byB1c2UgUHl0aG9uLiAgRU5URVJfUFlUSE9OIHJlbGVhc2VzIHRoZSBsb2NrIGZvcgorICAgVGNsIGFuZCBhY3F1aXJlcyB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2ssIHJlc3RvcmluZyB0aGUKKyAgIGFwcHJvcHJpYXRlIHRocmVhZCBzdGF0ZSwgYW5kIExFQVZFX1BZVEhPTiByZWxlYXNlcyB0aGUgUHl0aG9uCisgICBpbnRlcnByZXRlciBsb2NrIGFuZCByZS1hY3F1aXJlcyB0aGUgbG9jayBmb3IgVGNsLiAgSXQgaXMgb2theSBmb3IKKyAgIEVOVEVSX1RDTC9MRUFWRV9UQ0wgcGFpcnMgdG8gYmUgY29udGFpbmVkIGluc2lkZSB0aGUgY29kZSBiZXR3ZWVuCisgICBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTi4KIAotICAgVGhlc2UgbG9ja3MgZXhwYW5kIHRvIHNldmVyYWwgc3RhdGVtZW50cyBhbmQgYnJhY2tldHM7IHRoZXkgc2hvdWxkIG5vdCBiZQotICAgdXNlZCBpbiBicmFuY2hlcyBvZiBpZiBzdGF0ZW1lbnRzIGFuZCB0aGUgbGlrZS4KKyAgIFRoZXNlIGxvY2tzIGV4cGFuZCB0byBzZXZlcmFsIHN0YXRlbWVudHMgYW5kIGJyYWNrZXRzOyB0aGV5IHNob3VsZAorICAgbm90IGJlIHVzZWQgaW4gYnJhbmNoZXMgb2YgaWYgc3RhdGVtZW50cyBhbmQgdGhlIGxpa2UuCiAKLSAgIElmIFRjbCBpcyB0aHJlYWRlZCwgdGhpcyBhcHByb2FjaCB3b24ndCB3b3JrIGFueW1vcmUuIFRoZSBUY2wgaW50ZXJwcmV0ZXIgaXMKLSAgIG9ubHkgdmFsaWQgaW4gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgaXQsIGFuZCBhbGwgVGsgYWN0aXZpdHkgbXVzdCBoYXBwZW4gaW4gdGhpcwotICAgdGhyZWFkLCBhbHNvLiBUaGF0IG1lYW5zIHRoYXQgdGhlIG1haW5sb29wIG11c3QgYmUgaW52b2tlZCBpbiB0aGUgdGhyZWFkIHRoYXQKLSAgIGNyZWF0ZWQgdGhlIGludGVycHJldGVyLiBJbnZva2luZyBjb21tYW5kcyBmcm9tIG90aGVyIHRocmVhZHMgaXMgcG9zc2libGU7Ci0gICBfdGtpbnRlciB3aWxsIHF1ZXVlIGFuIGV2ZW50IGZvciB0aGUgaW50ZXJwcmV0ZXIgdGhyZWFkLCB3aGljaCB3aWxsIHRoZW4KLSAgIGV4ZWN1dGUgdGhlIGNvbW1hbmQgYW5kIHBhc3MgYmFjayB0aGUgcmVzdWx0LiBJZiB0aGUgbWFpbiB0aHJlYWQgaXMgbm90IGluIHRoZQotICAgbWFpbmxvb3AsIGFuZCBpbnZva2luZyBjb21tYW5kcyBjYXVzZXMgYW4gZXhjZXB0aW9uOyBpZiB0aGUgbWFpbiBsb29wIGlzIHJ1bm5pbmcKLSAgIGJ1dCBub3QgcHJvY2Vzc2luZyBldmVudHMsIHRoZSBjb21tYW5kIGludm9jYXRpb24gd2lsbCBibG9jay4KKyAgIElmIFRjbCBpcyB0aHJlYWRlZCwgdGhpcyBhcHByb2FjaCB3b24ndCB3b3JrIGFueW1vcmUuIFRoZSBUY2wKKyAgIGludGVycHJldGVyIGlzIG9ubHkgdmFsaWQgaW4gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgaXQsIGFuZCBhbGwgVGsKKyAgIGFjdGl2aXR5IG11c3QgaGFwcGVuIGluIHRoaXMgdGhyZWFkLCBhbHNvLiBUaGF0IG1lYW5zIHRoYXQgdGhlCisgICBtYWlubG9vcCBtdXN0IGJlIGludm9rZWQgaW4gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlCisgICBpbnRlcnByZXRlci4gSW52b2tpbmcgY29tbWFuZHMgZnJvbSBvdGhlciB0aHJlYWRzIGlzIHBvc3NpYmxlOworICAgX3RraW50ZXIgd2lsbCBxdWV1ZSBhbiBldmVudCBmb3IgdGhlIGludGVycHJldGVyIHRocmVhZCwgd2hpY2ggd2lsbAorICAgdGhlbiBleGVjdXRlIHRoZSBjb21tYW5kIGFuZCBwYXNzIGJhY2sgdGhlIHJlc3VsdC4gSWYgdGhlIG1haW4KKyAgIHRocmVhZCBpcyBub3QgaW4gdGhlIG1haW5sb29wLCBhbmQgaW52b2tpbmcgY29tbWFuZHMgY2F1c2VzIGFuCisgICBleGNlcHRpb247IGlmIHRoZSBtYWluIGxvb3AgaXMgcnVubmluZyBidXQgbm90IHByb2Nlc3NpbmcgZXZlbnRzLAorICAgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiB3aWxsIGJsb2NrLgogCi0gICBJbiBhZGRpdGlvbiwgZm9yIGEgdGhyZWFkZWQgVGNsLCBhIHNpbmdsZSBnbG9iYWwgdGNsX3RzdGF0ZSB3b24ndCBiZSBzdWZmaWNpZW50Ci0gICBhbnltb3JlLCBzaW5jZSBtdWx0aXBsZSBUY2wgaW50ZXJwcmV0ZXJzIG1heSBzaW11bHRhbmVvdXNseSBkaXNwYXRjaCBpbiBkaWZmZXJlbnQKLSAgIHRocmVhZHMuIFNvIHdlIHVzZSB0aGUgVGNsIFRMUyBBUEkuCisgICBJbiBhZGRpdGlvbiwgZm9yIGEgdGhyZWFkZWQgVGNsLCBhIHNpbmdsZSBnbG9iYWwgdGNsX3RzdGF0ZSB3b24ndAorICAgYmUgc3VmZmljaWVudCBhbnltb3JlLCBzaW5jZSBtdWx0aXBsZSBUY2wgaW50ZXJwcmV0ZXJzIG1heQorICAgc2ltdWx0YW5lb3VzbHkgZGlzcGF0Y2ggaW4gZGlmZmVyZW50IHRocmVhZHMuIFNvIHdlIHVzZSB0aGUgVGNsIFRMUworICAgQVBJLgogCiAqLwogCkBAIC0xNjgsNyArMTc2LDggQEAKICNpZmRlZiBUQ0xfVEhSRUFEUwogc3RhdGljIFRjbF9UaHJlYWREYXRhS2V5IHN0YXRlX2tleTsKIHR5cGVkZWYgUHlUaHJlYWRTdGF0ZSAqVGhyZWFkU3BlY2lmaWNEYXRhOwotI2RlZmluZSB0Y2xfdHN0YXRlICgqKFB5VGhyZWFkU3RhdGUqKilUY2xfR2V0VGhyZWFkRGF0YSgmc3RhdGVfa2V5LCBzaXplb2YoUHlUaHJlYWRTdGF0ZSopKSkKKyNkZWZpbmUgdGNsX3RzdGF0ZSBcCisgICAgKCooUHlUaHJlYWRTdGF0ZSoqKVRjbF9HZXRUaHJlYWREYXRhKCZzdGF0ZV9rZXksIHNpemVvZihQeVRocmVhZFN0YXRlKikpKQogI2Vsc2UKIHN0YXRpYyBQeVRocmVhZFN0YXRlICp0Y2xfdHN0YXRlID0gTlVMTDsKICNlbmRpZgpAQCAtMTc4LDcgKzE4Nyw4IEBACiAgICAgICAgIGlmKHRjbF9sb2NrKVB5VGhyZWFkX2FjcXVpcmVfbG9jayh0Y2xfbG9jaywgMSk7IHRjbF90c3RhdGUgPSB0c3RhdGU7CiAKICNkZWZpbmUgTEVBVkVfVENMIFwKLSAgICB0Y2xfdHN0YXRlID0gTlVMTDsgaWYodGNsX2xvY2spUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlfRU5EX0FMTE9XX1RIUkVBRFN9CisgICAgdGNsX3RzdGF0ZSA9IE5VTEw7IFwKKyAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeV9FTkRfQUxMT1dfVEhSRUFEU30KIAogI2RlZmluZSBFTlRFUl9PVkVSTEFQIFwKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtMTg4LDcgKzE5OCw4IEBACiAKICNkZWZpbmUgRU5URVJfUFlUSE9OIFwKICAgICB7IFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IHRjbF90c3RhdGU7IHRjbF90c3RhdGUgPSBOVUxMOyBcCi0gICAgICAgIGlmKHRjbF9sb2NrKVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5RXZhbF9SZXN0b3JlVGhyZWFkKCh0c3RhdGUpKTsgfQorICAgICAgICBpZih0Y2xfbG9jaykgXAorICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5RXZhbF9SZXN0b3JlVGhyZWFkKCh0c3RhdGUpKTsgfQogCiAjZGVmaW5lIExFQVZFX1BZVEhPTiBcCiAgICAgeyBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeUV2YWxfU2F2ZVRocmVhZCgpOyBcCkBAIC0xOTcsNyArMjA4LDggQEAKICNkZWZpbmUgQ0hFQ0tfVENMX0FQUEFSVE1FTlQgXAogICAgIGlmICgoKFRrYXBwT2JqZWN0ICopc2VsZiktPnRocmVhZGVkICYmIFwKICAgICAgICAgKChUa2FwcE9iamVjdCAqKXNlbGYpLT50aHJlYWRfaWQgIT0gVGNsX0dldEN1cnJlbnRUaHJlYWQoKSkgeyBcCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJDYWxsaW5nIFRjbCBmcm9tIGRpZmZlcmVudCBhcHBhcnRtZW50Iik7IFwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGxpbmcgVGNsIGZyb20gZGlmZmVyZW50IGFwcGFydG1lbnQiKTsgXAogICAgICAgICByZXR1cm4gMDsgXAogICAgIH0KIApAQCAtMjE5LDcgKzIzMSw3IEBACiAKIC8qKioqIFRrYXBwIE9iamVjdCBEZWNsYXJhdGlvbiAqKioqLwogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFRrYXBwX1R5cGU7CitzdGF0aWMgUHlPYmplY3QgKlRrYXBwX1R5cGU7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC0yMzksNyArMjUxLDYgQEAKICAgICBUY2xfT2JqVHlwZSAqU3RyaW5nVHlwZTsKIH0gVGthcHBPYmplY3Q7CiAKLSNkZWZpbmUgVGthcHBfQ2hlY2sodikgKFB5X1RZUEUodikgPT0gJlRrYXBwX1R5cGUpCiAjZGVmaW5lIFRrYXBwX0ludGVycCh2KSAoKChUa2FwcE9iamVjdCAqKSAodikpLT5pbnRlcnApCiAjZGVmaW5lIFRrYXBwX1Jlc3VsdCh2KSBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycCh2KSkKIApAQCAtMzEyLDExMCArMzIzLDkgQEAKICNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLwogCiAKLXN0YXRpYyBjaGFyICoKLUFzU3RyaW5nKFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRtcCkKLXsKLSAgICBpZiAoUHlCeXRlc19DaGVjayh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBQeUJ5dGVzX0FzU3RyaW5nKHZhbHVlKTsKLSAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0FzVVRGOCh2YWx1ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlPYmplY3RfU3RyKHZhbHVlKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZCh0bXAsIHYpICE9IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Bc1VURjgodik7Ci0gICAgfQotfQotCi0KIAogI2RlZmluZSBBUkdTWiA2NAogCi1zdGF0aWMgY2hhciAqCi1NZXJnZShQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqdG1wID0gTlVMTDsKLSAgICBjaGFyICphcmd2U3RvcmVbQVJHU1pdOwotICAgIGNoYXIgKiphcmd2ID0gTlVMTDsKLSAgICBpbnQgZnZTdG9yZVtBUkdTWl07Ci0gICAgaW50ICpmdiA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBhcmdjID0gMCwgZnZjID0gMCwgaTsKLSAgICBjaGFyICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKCEodG1wID0gUHlMaXN0X05ldygwKSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgYXJndiA9IGFyZ3ZTdG9yZTsKLSAgICBmdiA9IGZ2U3RvcmU7Ci0KLSAgICBpZiAoYXJncyA9PSBOVUxMKQotICAgICAgICBhcmdjID0gMDsKLQotICAgIGVsc2UgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgIGFyZ2MgPSAxOwotICAgICAgICBmdlswXSA9IDA7Ci0gICAgICAgIGlmICghKGFyZ3ZbMF0gPSBBc1N0cmluZyhhcmdzLCB0bXApKSkKLSAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGFyZ2MgPSBQeVR1cGxlX1NpemUoYXJncyk7Ci0KLSAgICAgICAgaWYgKGFyZ2MgPiBBUkdTWikgewotICAgICAgICAgICAgaWYgKCFDSEVDS19TSVpFKGFyZ2MsIHNpemVvZihjaGFyICopKSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAidHVwbGUgaXMgdG9vIGxvbmciKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcmd2ID0gKGNoYXIgKiopY2thbGxvYygoc2l6ZV90KWFyZ2MgKiBzaXplb2YoY2hhciAqKSk7Ci0gICAgICAgICAgICBmdiA9IChpbnQgKilja2FsbG9jKChzaXplX3QpYXJnYyAqIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgIGlmIChhcmd2ID09IE5VTEwgfHwgZnYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQeVR1cGxlX0dldEl0ZW0oYXJncywgaSk7Ci0gICAgICAgICAgICBpZiAoUHlUdXBsZV9DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIGZ2W2ldID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoIShhcmd2W2ldID0gTWVyZ2UodikpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICAgICAgZnZjKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2ID09IFB5X05vbmUpIHsKLSAgICAgICAgICAgICAgICBhcmdjID0gaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZ2W2ldID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIShhcmd2W2ldID0gQXNTdHJpbmcodiwgdG1wKSkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgICAgICBmdmMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXMgPSBUY2xfTWVyZ2UoYXJnYywgYXJndik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgIm1lcmdlIGZhaWxlZCIpOwotCi0gIGZpbmFsbHk6Ci0gICAgZm9yIChpID0gMDsgaSA8IGZ2YzsgaSsrKQotICAgICAgICBpZiAoZnZbaV0pIHsKLSAgICAgICAgICAgIGNrZnJlZShhcmd2W2ldKTsKLSAgICAgICAgfQotICAgIGlmIChhcmd2ICE9IGFyZ3ZTdG9yZSkKLSAgICAgICAgY2tmcmVlKEZSRUVDQVNUIGFyZ3YpOwotICAgIGlmIChmdiAhPSBmdlN0b3JlKQotICAgICAgICBja2ZyZWUoRlJFRUNBU1QgZnYpOwotCi0gICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC00MjksOCArMzM5LDEwIEBACiAgICAgICAgICAgICBjb25zdCBjaGFyICplID0gcyArIHNpemU7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgcSA9IGJ1ZiA9IChjaGFyICopUHlNZW1fTWFsbG9jKHNpemUpOwotICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdoaWxlIChzICE9IGUpIHsKICAgICAgICAgICAgICAgICBpZiAocyArIDEgIT0gZSAmJiBzWzBdID09ICdceGMwJyAmJiBzWzFdID09ICdceDgwJykgewogICAgICAgICAgICAgICAgICAgICAqcSsrID0gJ1wwJzsKQEAgLTQ3MSw4ICszODMsNyBAQAogICAgIFB5T2JqZWN0ICp2OwogCiAgICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKICAgICBpZiAoVGNsX1NwbGl0TGlzdCgoVGNsX0ludGVycCAqKU5VTEwsIGxpc3QsICZhcmdjLCAmYXJndikgIT0gVENMX09LKSB7CkBAIC01MDQsOSArNDE1LDkgQEAKICAgICByZXR1cm4gdjsKIH0KIAotLyogSW4gc29tZSBjYXNlcywgVGNsIHdpbGwgc3RpbGwgcmV0dXJuIHN0cmluZ3MgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUKLSAgIGxpc3RzLiBTcGxpdE9iaiB3YWxrcyB0aHJvdWdoIGEgbmVzdGVkIHR1cGxlLCBmaW5kaW5nIHN0cmluZyBvYmplY3RzIHRoYXQKLSAgIG5lZWQgdG8gYmUgc3BsaXQuICovCisvKiBJbiBzb21lIGNhc2VzLCBUY2wgd2lsbCBzdGlsbCByZXR1cm4gc3RyaW5ncyB0aGF0IGFyZSBzdXBwb3NlZCB0bworICAgYmUgbGlzdHMuIFNwbGl0T2JqIHdhbGtzIHRocm91Z2ggYSBuZXN0ZWQgdHVwbGUsIGZpbmRpbmcgc3RyaW5nCisgICBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSBzcGxpdC4gKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKIFNwbGl0T2JqKFB5T2JqZWN0ICphcmcpCkBAIC02MzgsOSArNTQ5LDEwIEBACiAgICAgVGthcHBPYmplY3QgKnY7CiAgICAgY2hhciAqYXJndjA7CiAKLSAgICB2ID0gUHlPYmplY3RfTmV3KFRrYXBwT2JqZWN0LCAmVGthcHBfVHlwZSk7CisgICAgdiA9IFB5T2JqZWN0X05ldyhUa2FwcE9iamVjdCwgKFB5VHlwZU9iamVjdCAqKSBUa2FwcF9UeXBlKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoVGthcHBfVHlwZSk7CiAKICAgICB2LT5pbnRlcnAgPSBUY2xfQ3JlYXRlSW50ZXJwKCk7CiAgICAgdi0+d2FudG9iamVjdHMgPSB3YW50b2JqZWN0czsKQEAgLTY1MSw3ICs1NjMsOCBAQAogCiAjaWZuZGVmIFRDTF9USFJFQURTCiAgICAgaWYgKHYtPnRocmVhZGVkKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJUY2wgaXMgdGhyZWFkZWQgYnV0IF90a2ludGVyIGlzIG5vdCIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRjbCBpcyB0aHJlYWRlZCBidXQgX3RraW50ZXIgaXMgbm90Iik7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNjg1LDcgKzU5OCw3IEBACiAgICAgICAgIFRjbF9TZXRWYXIodi0+aW50ZXJwLCAidGNsX2ludGVyYWN0aXZlIiwgIjAiLCBUQ0xfR0xPQkFMX09OTFkpOwogCiAgICAgLyogVGhpcyBpcyB1c2VkIHRvIGdldCB0aGUgYXBwbGljYXRpb24gY2xhc3MgZm9yIFRrIDQuMSBhbmQgdXAgKi8KLSAgICBhcmd2MCA9IChjaGFyKilja2FsbG9jKHN0cmxlbihjbGFzc05hbWUpICsgMSk7CisgICAgYXJndjAgPSAoY2hhciopYXR0ZW1wdGNrYWxsb2Moc3RybGVuKGNsYXNzTmFtZSkgKyAxKTsKICAgICBpZiAoIWFyZ3YwKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKQEAgLTcxOSw3ICs2MzIsNyBAQAogICAgICAgICBpZiAodXNlKQogICAgICAgICAgICAgbGVuICs9IHN0cmxlbih1c2UpICsgc2l6ZW9mICItdXNlICI7CiAKLSAgICAgICAgYXJncyA9IChjaGFyKilja2FsbG9jKGxlbik7CisgICAgICAgIGFyZ3MgPSAoY2hhciopYXR0ZW1wdGNrYWxsb2MobGVuKTsKICAgICAgICAgaWYgKCFhcmdzKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtNzg4LDE2ICs3MDEsMTcgQEAKICAgICBQeU9iamVjdCAqc3RyaW5nOyAvKiBUaGlzIGNhbm5vdCBjYXVzZSBjeWNsZXMuICovCiB9IFB5VGNsT2JqZWN0OwogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFB5VGNsT2JqZWN0X1R5cGU7Ci0jZGVmaW5lIFB5VGNsT2JqZWN0X0NoZWNrKHYpICAgICgodiktPm9iX3R5cGUgPT0gJlB5VGNsT2JqZWN0X1R5cGUpCitzdGF0aWMgUHlPYmplY3QgKlB5VGNsT2JqZWN0X1R5cGU7CisjZGVmaW5lIFB5VGNsT2JqZWN0X0NoZWNrKHYpICgodiktPm9iX3R5cGUgPT0gKFB5VHlwZU9iamVjdCAqKSBQeVRjbE9iamVjdF9UeXBlKQogCiBzdGF0aWMgUHlPYmplY3QgKgogbmV3UHlUY2xPYmplY3QoVGNsX09iaiAqYXJnKQogewogICAgIFB5VGNsT2JqZWN0ICpzZWxmOwotICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoUHlUY2xPYmplY3QsICZQeVRjbE9iamVjdF9UeXBlKTsKKyAgICBzZWxmID0gUHlPYmplY3RfTmV3KFB5VGNsT2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFB5VGNsT2JqZWN0X1R5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihQeVRjbE9iamVjdF9UeXBlKTsKICAgICBUY2xfSW5jclJlZkNvdW50KGFyZyk7CiAgICAgc2VsZi0+dmFsdWUgPSBhcmc7CiAgICAgc2VsZi0+c3RyaW5nID0gTlVMTDsKQEAgLTgwNyw5ICs3MjEsMTEgQEAKIHN0YXRpYyB2b2lkCiBQeVRjbE9iamVjdF9kZWFsbG9jKFB5VGNsT2JqZWN0ICpzZWxmKQogeworICAgIFB5T2JqZWN0ICp0cCA9IChQeU9iamVjdCAqKSBQeV9UWVBFKHNlbGYpOwogICAgIFRjbF9EZWNyUmVmQ291bnQoc2VsZi0+dmFsdWUpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+c3RyaW5nKTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgUHlfREVDUkVGKHRwKTsKIH0KIAogc3RhdGljIGNoYXIqCkBAIC04NDgsOCArNzY0LDEzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogUHlUY2xPYmplY3RfcmVwcihQeVRjbE9iamVjdCAqc2VsZikKIHsKLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dmFsdWUtPnR5cGVQdHItPm5hbWUsIHNlbGYtPnZhbHVlKTsKKyAgICBQeU9iamVjdCAqcmVwciwgKnN0ciA9IFB5VGNsT2JqZWN0X3N0cihzZWxmLCBOVUxMKTsKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdDogJVI+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dmFsdWUtPnR5cGVQdHItPm5hbWUsIHN0cik7CisgICAgUHlfREVDUkVGKHN0cik7CisgICAgcmV0dXJuIHJlcHI7CiB9CiAKICNkZWZpbmUgVEVTVF9DT05EKGNvbmQpICgoY29uZCkgPyBQeV9UcnVlIDogUHlfRmFsc2UpCkBAIC05MjMsNTAgKzg0NCwzNSBAQAogICAgIHswfSwKIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlUY2xPYmplY3RfVHlwZSA9IHsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX3RraW50ZXIuVGNsX09iaiIsICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLwotICAgIHNpemVvZihQeVRjbE9iamVjdCksICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAvKiBtZXRob2RzICovCi0gICAgKGRlc3RydWN0b3IpUHlUY2xPYmplY3RfZGVhbGxvYywvKnRwX2RlYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KLSAgICAocmVwcmZ1bmMpUHlUY2xPYmplY3RfcmVwciwgICAgICAgICAvKnRwX3JlcHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAocmVwcmZ1bmMpUHlUY2xPYmplY3Rfc3RyLCAgICAgICAgICAvKnRwX3N0ciovCi0gICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICBQeVRjbE9iamVjdF9yaWNoY29tcGFyZSwgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KLSAgICBQeVRjbE9iamVjdF9nZXRzZXRsaXN0LCAgICAgICAgICAgICAvKnRwX2dldHNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXNfZ2MqLworc3RhdGljIFB5VHlwZV9TbG90IFB5VGNsT2JqZWN0X1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgKGRlc3RydWN0b3IpUHlUY2xPYmplY3RfZGVhbGxvY30sCisgICAge1B5X3RwX3JlcHIsIChyZXByZnVuYylQeVRjbE9iamVjdF9yZXByfSwKKyAgICB7UHlfdHBfc3RyLCAocmVwcmZ1bmMpUHlUY2xPYmplY3Rfc3RyfSwKKyAgICB7UHlfdHBfZ2V0YXR0cm8sIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyfSwKKyAgICB7UHlfdHBfcmljaGNvbXBhcmUsIFB5VGNsT2JqZWN0X3JpY2hjb21wYXJlfSwKKyAgICB7UHlfdHBfZ2V0c2V0LCBQeVRjbE9iamVjdF9nZXRzZXRsaXN0fSwKKyAgICB7MCwgMH0KIH07CiAKK3N0YXRpYyBQeVR5cGVfU3BlYyBQeVRjbE9iamVjdF9UeXBlX3NwZWMgPSB7CisgICAgIl90a2ludGVyLlRjbF9PYmoiLAorICAgIHNpemVvZihQeVRjbE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgUHlUY2xPYmplY3RfVHlwZV9zbG90cywKK307CisKKworI2lmIFBZX1NJWkVfTUFYID4gSU5UX01BWAorI2RlZmluZSBDSEVDS19TVFJJTkdfTEVOR1RIKHMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocyAhPSBOVUxMICYmIHN0cmxlbihzKSA+PSBJTlRfTUFYKSB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJzdHJpbmcgaXMgdG9vIGxvbmciKTsgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIENIRUNLX1NUUklOR19MRU5HVEgocykKKyNlbmRpZgorCiBzdGF0aWMgVGNsX09iaioKIEFzT2JqKFB5T2JqZWN0ICp2YWx1ZSkKIHsKQEAgLTk3NSw4ICs4ODEsOCBAQAogICAgIGludCBvdmVyZmxvdzsKIAogICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFRjbF9OZXdTdHJpbmdPYmooUHlCeXRlc19BU19TVFJJTkcodmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBUY2xfTmV3Qnl0ZUFycmF5T2JqKCh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcodmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKHZhbHVlKSk7CiAgICAgZWxzZSBpZiAoUHlCb29sX0NoZWNrKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIFRjbF9OZXdCb29sZWFuT2JqKFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSkpOwogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHZhbHVlKSAmJgpAQCAtOTkzLDExICs4OTksMTMgQEAKICAgICAgICAgUHlfc3NpemVfdCBzaXplLCBpOwogCiAgICAgICAgIHNpemUgPSBQeVR1cGxlX1NpemUodmFsdWUpOworICAgICAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFRjbF9OZXdMaXN0T2JqKDAsIE5VTEwpOwogICAgICAgICBpZiAoIUNIRUNLX1NJWkUoc2l6ZSwgc2l6ZW9mKFRjbF9PYmogKikpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInR1cGxlIGlzIHRvbyBsb25nIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBhcmd2ID0gKFRjbF9PYmogKiopIGNrYWxsb2MoKChzaXplX3Qpc2l6ZSkgKiBzaXplb2YoVGNsX09iaiAqKSk7CisgICAgICAgIGFyZ3YgPSAoVGNsX09iaiAqKikgYXR0ZW1wdGNrYWxsb2MoKChzaXplX3Qpc2l6ZSkgKiBzaXplb2YoVGNsX09iaiAqKSk7CiAgICAgICAgIGlmKCFhcmd2KQogICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQpAQCAtMTAxOSw2ICs5MjcsOCBAQAogCiAgICAgICAgIGluYnVmID0gUHlVbmljb2RlX0RBVEEodmFsdWUpOwogICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodmFsdWUpOworICAgICAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFRjbF9OZXdVbmljb2RlT2JqKChjb25zdCB2b2lkICopIiIsIDApOwogICAgICAgICBpZiAoIUNIRUNLX1NJWkUoc2l6ZSwgc2l6ZW9mKFRjbF9VbmlDaGFyKSkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAic3RyaW5nIGlzIHRvbyBsb25nIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEwMjcsNyArOTM3LDcgQEAKICAgICAgICAgaWYgKGtpbmQgPT0gc2l6ZW9mKFRjbF9VbmlDaGFyKSkKICAgICAgICAgICAgIHJldHVybiBUY2xfTmV3VW5pY29kZU9iaihpbmJ1Ziwgc2l6ZSk7CiAgICAgICAgIGFsbG9jc2l6ZSA9ICgoc2l6ZV90KXNpemUpICogc2l6ZW9mKFRjbF9VbmlDaGFyKTsKLSAgICAgICAgb3V0YnVmID0gKFRjbF9VbmlDaGFyKilja2FsbG9jKGFsbG9jc2l6ZSk7CisgICAgICAgIG91dGJ1ZiA9IChUY2xfVW5pQ2hhciopYXR0ZW1wdGNrYWxsb2MoYWxsb2NzaXplKTsKICAgICAgICAgLyogRWxzZSBvdmVyZmxvdyBvY2N1cnJlZCwgYW5kIHdlIHRha2UgdGhlIG5leHQgZXhpdCAqLwogICAgICAgICBpZiAoIW91dGJ1ZikgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTExOTIsNyArMTEwMiw3IEBACiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJ0dXBsZSBpcyB0b28gbG9uZyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgb2JqdiA9IChUY2xfT2JqICoqKWNrYWxsb2MoKChzaXplX3Qpb2JqYykgKiBzaXplb2YoVGNsX09iaiAqKSk7CisgICAgICAgICAgICBvYmp2ID0gKFRjbF9PYmogKiopYXR0ZW1wdGNrYWxsb2MoKChzaXplX3Qpb2JqYykgKiBzaXplb2YoVGNsX09iaiAqKSk7CiAgICAgICAgICAgICBpZiAob2JqdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICBvYmpjID0gMDsKQEAgLTEzMjgsNyArMTIzOCwxMSBAQAogICAgICAgICBQeU9iamVjdCAqZXhjX3R5cGUsICpleGNfdmFsdWUsICpleGNfdGI7CiAgICAgICAgIGlmICghV2FpdEZvck1haW5sb29wKHNlbGYpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGV2ID0gKFRrYXBwX0NhbGxFdmVudCopY2thbGxvYyhzaXplb2YoVGthcHBfQ2FsbEV2ZW50KSk7CisgICAgICAgIGV2ID0gKFRrYXBwX0NhbGxFdmVudCopYXR0ZW1wdGNrYWxsb2Moc2l6ZW9mKFRrYXBwX0NhbGxFdmVudCkpOworICAgICAgICBpZiAoZXYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGV2LT5ldi5wcm9jID0gKFRjbF9FdmVudFByb2MqKVRrYXBwX0NhbGxQcm9jOwogICAgICAgICBldi0+c2VsZiA9IHNlbGY7CiAgICAgICAgIGV2LT5hcmdzID0gYXJnczsKQEAgLTEzNzYsNDIgKzEyOTAsNiBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxDYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICAvKiBDb3VsZCBkbyB0aGUgc2FtZSBoZXJlIGFzIGZvciBUa2FwcF9DYWxsKCksIGJ1dCB0aGlzIGlzIG5vdCB1c2VkCi0gICAgICAgbXVjaCwgc28gSSBjYW4ndCBiZSBib3RoZXJlZC4gIFVuZm9ydHVuYXRlbHkgVGNsIGRvZXNuJ3QgZXhwb3J0IGEKLSAgICAgICB3YXkgZm9yIHRoZSB1c2VyIHRvIGRvIHdoYXQgYWxsIGl0cyBHbG9iYWwqIHZhcmlhbnRzIGRvIChzYXZlIGFuZAotICAgICAgIHJlc2V0IHRoZSBzY29wZSBwb2ludGVyLCBjYWxsIHRoZSBsb2NhbCB2ZXJzaW9uLCByZXN0b3JlIHRoZSBzYXZlZAotICAgICAgIHNjb3BlIHBvaW50ZXIpLiAqLwotCi0gICAgY2hhciAqY21kOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAiZ2xvYmFsY2FsbCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIGNtZCAgPSBNZXJnZShhcmdzKTsKLSAgICBpZiAoY21kKSB7Ci0gICAgICAgIGludCBlcnI7Ci0gICAgICAgIEVOVEVSX1RDTAotICAgICAgICBlcnIgPSBUY2xfR2xvYmFsRXZhbChUa2FwcF9JbnRlcnAoc2VsZiksIGNtZCk7Ci0gICAgICAgIEVOVEVSX09WRVJMQVAKLSAgICAgICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgICAgICBMRUFWRV9PVkVSTEFQX1RDTAotICAgICAgICBja2ZyZWUoY21kKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogVGthcHBfRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqc2NyaXB0OwpAQCAtMTQyMSw2ICsxMjk5LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZXZhbCIsICZzY3JpcHQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgoc2NyaXB0KTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIAogICAgIEVOVEVSX1RDTApAQCAtMTQzNSwzNCArMTMxNCw2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxFdmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzY3JpcHQ7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgaW50IGVycjsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgImdsb2JhbGV2YWwgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdsb2JhbGV2YWwiLCAmc2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIEVOVEVSX1RDTAotICAgIGVyciA9IFRjbF9HbG9iYWxFdmFsKFRrYXBwX0ludGVycChzZWxmKSwgc2NyaXB0KTsKLSAgICBFTlRFUl9PVkVSTEFQCi0gICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgIHJlcyA9IFRraW50ZXJfRXJyb3Ioc2VsZik7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgIExFQVZFX09WRVJMQVBfVENMCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0V2YWxGaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpmaWxlTmFtZTsKQEAgLTE0NzIsNiArMTMyMyw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmV2YWxmaWxlIiwgJmZpbGVOYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKGZpbGVOYW1lKTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIAogICAgIEVOVEVSX1RDTApAQCAtMTQ5Miw5ICsxMzQ0LDEwIEBACiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IGVycjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZzY3JpcHQpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpyZWNvcmQiLCAmc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHNjcmlwdCk7CiAgICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7CiAKICAgICBFTlRFUl9UQ0wKQEAgLTE1MTUsMTQgKzEzNjgsMTQgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczphZGRlcnJvcmluZm8iLCAmbXNnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChtc2cpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCiAgICAgRU5URVJfVENMCiAgICAgVGNsX0FkZEVycm9ySW5mbyhUa2FwcF9JbnRlcnAoc2VsZiksIG1zZyk7CiAgICAgTEVBVkVfVENMCiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMTY0MCw4ICsxNDkzLDExIEBACiAgICAgICAgIGlmICghV2FpdEZvck1haW5sb29wKHNlbGYpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgZXYgPSAoVmFyRXZlbnQqKWNrYWxsb2Moc2l6ZW9mKFZhckV2ZW50KSk7Ci0KKyAgICAgICAgZXYgPSAoVmFyRXZlbnQqKWF0dGVtcHRja2FsbG9jKHNpemVvZihWYXJFdmVudCkpOworICAgICAgICBpZiAoZXYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGV2LT5zZWxmID0gc2VsZnB0cjsKICAgICAgICAgZXYtPmFyZ3MgPSBhcmdzOwogICAgICAgICBldi0+ZmxhZ3MgPSBmbGFnczsKQEAgLTE2OTksNiArMTU1NSw4IEBACiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3NPOnNldHZhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZTEsICZuYW1lMiwgJm5ld1ZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG5hbWUxKTsKKyAgICAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChuYW1lMik7CiAgICAgICAgIC8qIFhYWCBtdXN0IGhvbGQgdGNsIGxvY2sgYWxyZWFkeT8/PyAqLwogICAgICAgICBuZXd2YWwgPSBBc09iaihuZXdWYWx1ZSk7CiAgICAgICAgIEVOVEVSX1RDTApAQCAtMTc0NCwxMSArMTYwMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJuYW1lX2NvbnZlcnRlciwgJm5hbWUxLCAmbmFtZTIpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgobmFtZTIpOwogICAgIEVOVEVSX1RDTAogICAgIHRyZXMgPSBUY2xfR2V0VmFyMkV4KFRrYXBwX0ludGVycChzZWxmKSwgbmFtZTEsIG5hbWUyLCBmbGFncyk7CiAgICAgRU5URVJfT1ZFUkxBUAogICAgIGlmICh0cmVzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoKChUa2FwcE9iamVjdCopc2VsZiktPndhbnRvYmplY3RzKSB7CiAgICAgICAgICAgICByZXMgPSBGcm9tT2JqKHNlbGYsIHRyZXMpOwpAQCAtMTc4NSw2ICsxNjQ1LDggQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInN8czp1bnNldHZhciIsICZuYW1lMSwgJm5hbWUyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG5hbWUxKTsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG5hbWUyKTsKICAgICBFTlRFUl9UQ0wKICAgICBjb2RlID0gVGNsX1Vuc2V0VmFyMihUa2FwcF9JbnRlcnAoc2VsZiksIG5hbWUxLCBuYW1lMiwgZmxhZ3MpOwogICAgIEVOVEVSX09WRVJMQVAKQEAgLTE4MDcsNyArMTY2OSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogVGthcHBfR2xvYmFsVW5zZXRWYXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiB2YXJfaW52b2tlKFVuc2V0VmFyLCBzZWxmLCBhcmdzLCBUQ0xfTEVBVkVfRVJSX01TRyB8IFRDTF9HTE9CQUxfT05MWSk7CisgICAgcmV0dXJuIHZhcl9pbnZva2UoVW5zZXRWYXIsIHNlbGYsIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgVENMX0xFQVZFX0VSUl9NU0cgfCBUQ0xfR0xPQkFMX09OTFkpOwogfQogCiAKQEAgLTE4MjksNiArMTY5Miw3IEBACiAgICAgfQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpnZXRpbnQiLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgocyk7CiAgICAgaWYgKFRjbF9HZXRJbnQoVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdikgPT0gVENMX0VSUk9SKQogICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcihzZWxmKTsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIHYpOwpAQCAtMTg0OSw2ICsxNzEzLDcgQEAKICAgICB9CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdldGRvdWJsZSIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBpZiAoVGNsX0dldERvdWJsZShUa2FwcF9JbnRlcnAoc2VsZiksIHMsICZ2KSA9PSBUQ0xfRVJST1IpCiAgICAgICAgIHJldHVybiBUa2ludGVyX0Vycm9yKHNlbGYpOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJkIiwgdik7CkBAIC0xODY5LDYgKzE3MzQsNyBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6Z2V0Ym9vbGVhbiIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBpZiAoVGNsX0dldEJvb2xlYW4oVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdikgPT0gVENMX0VSUk9SKQogICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcihzZWxmKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHYpOwpAQCAtMTg4NCw2ICsxNzUwLDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZXhwcnN0cmluZyIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCiAgICAgRU5URVJfVENMCkBAIC0xOTA4LDYgKzE3NzUsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpleHBybG9uZyIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCiAgICAgRU5URVJfVENMCkBAIC0xOTMxLDYgKzE3OTksNyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmV4cHJkb3VibGUiLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgocyk7CiAgICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiVGthcHBfRXhwckRvdWJsZSIsIHJldHVybiAwKQogICAgIEVOVEVSX1RDTApAQCAtMTk1NSw2ICsxODI0LDcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpleHByYm9vbGVhbiIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKICAgICBFTlRFUl9UQ0wKICAgICByZXR2YWwgPSBUY2xfRXhwckJvb2xlYW4oVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdik7CkBAIC0yMDA3LDYgKzE4NzcsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXQ6c3BsaXRsaXN0IiwgInV0Zi04IiwgJmxpc3QpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgobGlzdCk7CiAgICAgaWYgKFRjbF9TcGxpdExpc3QoVGthcHBfSW50ZXJwKHNlbGYpLCBsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICZhcmdjLCAmYXJndikgPT0gVENMX0VSUk9SKSAgewogICAgICAgICBQeU1lbV9GcmVlKGxpc3QpOwpAQCAtMjA2OCwzMiArMTkzOSwxMiBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldDpzcGxpdCIsICJ1dGYtOCIsICZsaXN0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChsaXN0KTsKICAgICB2ID0gU3BsaXQobGlzdCk7CiAgICAgUHlNZW1fRnJlZShsaXN0KTsKICAgICByZXR1cm4gdjsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX01lcmdlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAibWVyZ2UgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcyA9IE1lcmdlKGFyZ3MpOwotCi0gICAgaWYgKHMpIHsKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocyk7Ci0gICAgICAgIGNrZnJlZShzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCiAKIAogLyoqIFRjbCBDb21tYW5kICoqLwpAQCAtMjIyMCw2ICsyMDcxLDcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic086Y3JlYXRlY29tbWFuZCIsICZjbWROYW1lLCAmZnVuYykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoY21kTmFtZSk7CiAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGZ1bmMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJjb21tYW5kIG5vdCBjYWxsYWJsZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIyNDEsNyArMjA5MywxMiBAQAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgaWYgKHNlbGYtPnRocmVhZGVkICYmIHNlbGYtPnRocmVhZF9pZCAhPSBUY2xfR2V0Q3VycmVudFRocmVhZCgpKSB7CiAgICAgICAgIFRjbF9Db25kaXRpb24gY29uZCA9IE5VTEw7Ci0gICAgICAgIENvbW1hbmRFdmVudCAqZXYgPSAoQ29tbWFuZEV2ZW50Kilja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKKyAgICAgICAgQ29tbWFuZEV2ZW50ICpldiA9IChDb21tYW5kRXZlbnQqKWF0dGVtcHRja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKKyAgICAgICAgaWYgKGV2ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBQeU1lbV9ERUwoZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBldi0+ZXYucHJvYyA9IChUY2xfRXZlbnRQcm9jKilUa2FwcF9Db21tYW5kUHJvYzsKICAgICAgICAgZXYtPmludGVycCA9IHNlbGYtPmludGVycDsKICAgICAgICAgZXYtPmNyZWF0ZSA9IDE7CkBAIC0yMjY3LDggKzIxMjQsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjI4MiwxMiArMjEzOCwxNyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmRlbGV0ZWNvbW1hbmQiLCAmY21kTmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoY21kTmFtZSk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChzZWxmLT50aHJlYWRlZCAmJiBzZWxmLT50aHJlYWRfaWQgIT0gVGNsX0dldEN1cnJlbnRUaHJlYWQoKSkgewogICAgICAgICBUY2xfQ29uZGl0aW9uIGNvbmQgPSBOVUxMOwogICAgICAgICBDb21tYW5kRXZlbnQgKmV2OwotICAgICAgICBldiA9IChDb21tYW5kRXZlbnQqKWNrYWxsb2Moc2l6ZW9mKENvbW1hbmRFdmVudCkpOworICAgICAgICBldiA9IChDb21tYW5kRXZlbnQqKWF0dGVtcHRja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKKyAgICAgICAgaWYgKGV2ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBldi0+ZXYucHJvYyA9IChUY2xfRXZlbnRQcm9jKilUa2FwcF9Db21tYW5kUHJvYzsKICAgICAgICAgZXYtPmludGVycCA9IHNlbGYtPmludGVycDsKICAgICAgICAgZXYtPmNyZWF0ZSA9IDA7CkBAIC0yMzA5LDggKzIxNzAsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgImNhbid0IGRlbGV0ZSBUY2wgY29tbWFuZCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTI0MTQsOCArMjI3NCw3IEBACiAgICAgRU5URVJfVENMCiAgICAgVGNsX0NyZWF0ZUZpbGVIYW5kbGVyKHRmaWxlLCBtYXNrLCBGaWxlSGFuZGxlciwgKENsaWVudERhdGEpIGRhdGEpOwogICAgIExFQVZFX1RDTAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI0MzksMTUgKzIyOTgsMTQgQEAKICAgICBFTlRFUl9UQ0wKICAgICBUY2xfRGVsZXRlRmlsZUhhbmRsZXIodGZpbGUpOwogICAgIExFQVZFX1RDTAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX0NSRUFURUZJTEVIQU5ETEVSICovCiAKIAogLyoqKiogVGt0dCBPYmplY3QgKHRpbWVyIHRva2VuKSAqKioqLwogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFRrdHRfVHlwZTsKK3N0YXRpYyBQeU9iamVjdCAqVGt0dF9UeXBlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMjQ3Miw4ICsyMzMwLDcgQEAKICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwogICAgICAgICBQeV9ERUNSRUYodik7IC8qIFNlZSBUa3R0X05ldygpICovCiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIFRrdHRfbWV0aG9kc1tdID0KQEAgLTI0ODcsOSArMjM0NCwxMCBAQAogewogICAgIFRrdHRPYmplY3QgKnY7CiAKLSAgICB2ID0gUHlPYmplY3RfTmV3KFRrdHRPYmplY3QsICZUa3R0X1R5cGUpOworICAgIHYgPSBQeU9iamVjdF9OZXcoVGt0dE9iamVjdCwgKFB5VHlwZU9iamVjdCAqKSBUa3R0X1R5cGUpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihUa3R0X1R5cGUpOwogCiAgICAgUHlfSU5DUkVGKGZ1bmMpOwogICAgIHYtPnRva2VuID0gTlVMTDsKQEAgLTI1MDUsMTAgKzIzNjMsMTIgQEAKIHsKICAgICBUa3R0T2JqZWN0ICp2ID0gKFRrdHRPYmplY3QgKilzZWxmOwogICAgIFB5T2JqZWN0ICpmdW5jID0gdi0+ZnVuYzsKKyAgICBQeU9iamVjdCAqdHAgPSAoUHlPYmplY3QgKikgUHlfVFlQRShzZWxmKTsKIAogICAgIFB5X1hERUNSRUYoZnVuYyk7CiAKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgUHlfREVDUkVGKHRwKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI1MjAsMzggKzIzODAsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi0+ZnVuYyA9PSBOVUxMID8gIiwgaGFuZGxlciBkZWxldGVkIiA6ICIiKTsKIH0KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa3R0X1R5cGUgPQotewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJ0a3RpbWVydG9rZW4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lICovCi0gICAgc2l6ZW9mKFRrdHRPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSAqLwotICAgIFRrdHRfRGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCAqLwotICAgIFRrdHRfUmVwciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KLSAgICBUa3R0X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCitzdGF0aWMgUHlUeXBlX1Nsb3QgVGt0dF9UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2RlYWxsb2MsIFRrdHRfRGVhbGxvY30sCisgICAge1B5X3RwX3JlcHIsIFRrdHRfUmVwcn0sCisgICAge1B5X3RwX21ldGhvZHMsIFRrdHRfbWV0aG9kc30sCisgICAgezAsIDB9CiB9OwogCitzdGF0aWMgUHlUeXBlX1NwZWMgVGt0dF9UeXBlX3NwZWMgPSB7CisgICAgInRrdGltZXJ0b2tlbiIsCisgICAgc2l6ZW9mKFRrdHRPYmplY3QpLAorICAgIDAsCisgICAgUHlfVFBGTEFHU19ERUZBVUxULAorICAgIFRrdHRfVHlwZV9zbG90cywKK307CiAKIAogLyoqIFRpbWVyIEhhbmRsZXIgKiovCkBAIC0yNjczLDggKzI1MTUsNyBAQAogICAgICAgICBleGNJbkNtZCA9IHZhbEluQ21kID0gdHJiSW5DbWQgPSBOVUxMOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjcwMCw4ICsyNTQxLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBxdWl0TWFpbkxvb3AgPSAxOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3NTEsMTUgKzI1OTEsMTUgQEAKICAgICB9CiAgICAgaWYgKF90a19leGlzdHMgPT0gTlVMTCB8fCBzdHJjbXAoX3RrX2V4aXN0cywgIjEiKSAhPSAwKSAgICAgewogICAgICAgICBpZiAoVGtfSW5pdChpbnRlcnApICAgICAgICAgICAgID09IFRDTF9FUlJPUikgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOwogI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKICAgICAgICAgICAgIHRrX2xvYWRfZmFpbGVkID0gMTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjc3Myw4ICsyNjEzLDcgQEAKICAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMpOwogICAgICgoVGthcHBPYmplY3QqKXNlbGYpLT53YW50b2JqZWN0cyA9IHdhbnRvYmplY3RzOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjc4Myw4ICsyNjIyLDcgQEAKIAogICAgICgoVGthcHBPYmplY3QqKXNlbGYpLT5kaXNwYXRjaGluZyA9IDE7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjc5NSw5ICsyNjMzLDcgQEAKICAgICB7IndpbGxkaXNwYXRjaCIsICAgICAgIFRrYXBwX1dpbGxEaXNwYXRjaCwgTUVUSF9OT0FSR1N9LAogICAgIHsid2FudG9iamVjdHMiLCAgICAgICAgICAgIFRrYXBwX1dhbnRPYmplY3RzLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiY2FsbCIsICAgICAgICAgICAgICAgICAgIFRrYXBwX0NhbGwsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnbG9iYWxjYWxsIiwgICAgICAgICAgICAgVGthcHBfR2xvYmFsQ2FsbCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImV2YWwiLCAgICAgICAgICAgICAgICAgICBUa2FwcF9FdmFsLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZ2xvYmFsZXZhbCIsICAgICAgICAgICAgIFRrYXBwX0dsb2JhbEV2YWwsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJldmFsZmlsZSIsICAgICAgICAgICAgICAgVGthcHBfRXZhbEZpbGUsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyZWNvcmQiLCAgICAgICAgICAgICAgICAgVGthcHBfUmVjb3JkLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiYWRkZXJyb3JpbmZvIiwgICAgICAgVGthcHBfQWRkRXJyb3JJbmZvLCBNRVRIX1ZBUkFSR1N9LApAQCAtMjgxNiw3ICsyNjUyLDYgQEAKICAgICB7ImV4cHJib29sZWFuIiwgICAgICAgIFRrYXBwX0V4cHJCb29sZWFuLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsic3BsaXRsaXN0IiwgICAgICAgICAgICAgIFRrYXBwX1NwbGl0TGlzdCwgTUVUSF9WQVJBUkdTfSwKICAgICB7InNwbGl0IiwgICAgICAgICAgICAgICAgICBUa2FwcF9TcGxpdCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Im1lcmdlIiwgICAgICAgICAgICAgICAgICBUa2FwcF9NZXJnZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImNyZWF0ZWNvbW1hbmQiLCAgICAgIFRrYXBwX0NyZWF0ZUNvbW1hbmQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJkZWxldGVjb21tYW5kIiwgICAgICBUa2FwcF9EZWxldGVDb21tYW5kLCBNRVRIX1ZBUkFSR1N9LAogI2lmZGVmIEhBVkVfQ1JFQVRFRklMRUhBTkRMRVIKQEAgLTI4MzksNDQgKzI2NzQsMjkgQEAKIHN0YXRpYyB2b2lkCiBUa2FwcF9EZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQogeworICAgIFB5T2JqZWN0ICp0cCA9IChQeU9iamVjdCAqKSBQeV9UWVBFKHNlbGYpOwogICAgIC8qQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7Ki8KICAgICBFTlRFUl9UQ0wKICAgICBUY2xfRGVsZXRlSW50ZXJwKFRrYXBwX0ludGVycChzZWxmKSk7CiAgICAgTEVBVkVfVENMCiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFB5X0RFQ1JFRih0cCk7CiAgICAgRGlzYWJsZUV2ZW50SG9vaygpOwogfQogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFRrYXBwX1R5cGUgPQotewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJ0a2FwcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lICovCi0gICAgc2l6ZW9mKFRrYXBwT2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSAqLwotICAgIFRrYXBwX0RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KLSAgICBUa2FwcF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCitzdGF0aWMgUHlUeXBlX1Nsb3QgVGthcHBfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCBUa2FwcF9EZWFsbG9jfSwKKyAgICB7UHlfdHBfbWV0aG9kcywgVGthcHBfbWV0aG9kc30sCisgICAgezAsIDB9Cit9OworCisKK3N0YXRpYyBQeVR5cGVfU3BlYyBUa2FwcF9UeXBlX3NwZWMgPSB7CisgICAgInRrYXBwIiwKKyAgICBzaXplb2YoVGthcHBPYmplY3QpLAorICAgIDAsCisgICAgUHlfVFBGTEFHU19ERUZBVUxULAorICAgIFRrYXBwX1R5cGVfc2xvdHMsCiB9OwogCiAKQEAgLTMwMTQsOSArMjgzNCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJhY3RpdmUsICZ3YW50b2JqZWN0cywgJndhbnRUaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN5bmMsICZ1c2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHNjcmVlbk5hbWUpOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoYmFzZU5hbWUpOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoY2xhc3NOYW1lKTsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHVzZSk7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIFRrYXBwX05ldyhzY3JlZW5OYW1lLCBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUsIHdhbnRvYmplY3RzLCAgICAgd2FudFRrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlLCB3YW50b2JqZWN0cywgd2FudFRrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmMsIHVzZSk7CiB9CiAKQEAgLTMwMzIsOCArMjg1Niw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBUa2ludGVyX2J1c3l3YWl0aW50ZXJ2YWwgPSBuZXdfdmFsOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIGNoYXIgc2V0YnVzeXdhaXRpbnRlcnZhbF9kb2NbXSA9CkBAIC0zMTY2LDI3ICsyOTg5LDYgQEAKIH0KIAogCi0vKiBhbGwgZXJyb3JzIHdpbGwgYmUgY2hlY2tlZCBpbiBvbmUgZmVsbCBzd29vcCBpbiBpbml0X3RraW50ZXIoKSAqLwotc3RhdGljIHZvaWQKLWluc19sb25nKFB5T2JqZWN0ICpkLCBjaGFyICpuYW1lLCBsb25nIHZhbCkKLXsKLSAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZyh2YWwpOwotICAgIGlmICh2KSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIG5hbWUsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotfQotc3RhdGljIHZvaWQKLWluc19zdHJpbmcoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCkKLXsKLSAgICBQeU9iamVjdCAqdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHZhbCk7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbmFtZSwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfdGtpbnRlcm1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgIl90a2ludGVyIiwKQEAgLTMyMDIsNDUgKzMwMDQsMTExIEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X190a2ludGVyKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdWV4ZSwgKmNleGU7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZUa2FwcF9UeXBlKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOworICBQeU9iamVjdCAqbSwgKnVleGUsICpjZXhlLCAqbzsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgdGNsX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgaWYgKHRjbF9sb2NrID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfdGtpbnRlcm1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBUa2ludGVyX1RjbEVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGtpbnRlci5UY2xFcnJvciIsIE5VTEwsIE5VTEwpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUY2xFcnJvciIsIFRraW50ZXJfVGNsRXJyb3IpOwotCi0gICAgaW5zX2xvbmcoZCwgIlJFQURBQkxFIiwgVENMX1JFQURBQkxFKTsKLSAgICBpbnNfbG9uZyhkLCAiV1JJVEFCTEUiLCBUQ0xfV1JJVEFCTEUpOwotICAgIGluc19sb25nKGQsICJFWENFUFRJT04iLCBUQ0xfRVhDRVBUSU9OKTsKLSAgICBpbnNfbG9uZyhkLCAiV0lORE9XX0VWRU5UUyIsIFRDTF9XSU5ET1dfRVZFTlRTKTsKLSAgICBpbnNfbG9uZyhkLCAiRklMRV9FVkVOVFMiLCBUQ0xfRklMRV9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJUSU1FUl9FVkVOVFMiLCBUQ0xfVElNRVJfRVZFTlRTKTsKLSAgICBpbnNfbG9uZyhkLCAiSURMRV9FVkVOVFMiLCBUQ0xfSURMRV9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJBTExfRVZFTlRTIiwgVENMX0FMTF9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJET05UX1dBSVQiLCBUQ0xfRE9OVF9XQUlUKTsKLSAgICBpbnNfc3RyaW5nKGQsICJUS19WRVJTSU9OIiwgVEtfVkVSU0lPTik7Ci0gICAgaW5zX3N0cmluZyhkLCAiVENMX1ZFUlNJT04iLCBUQ0xfVkVSU0lPTik7Ci0KLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVGthcHBUeXBlIiwgKFB5T2JqZWN0ICopJlRrYXBwX1R5cGUpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmVGt0dF9UeXBlKSA8IDApIHsKKyAgICBvID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGtpbnRlci5UY2xFcnJvciIsIE5VTEwsIE5VTEwpOworICAgIGlmIChvID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRrdHRUeXBlIiwgKFB5T2JqZWN0ICopJlRrdHRfVHlwZSk7CisgICAgUHlfSU5DUkVGKG8pOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRjbEVycm9yIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBUa2ludGVyX1RjbEVycm9yID0gbzsKIAotICAgIFB5X1RZUEUoJlB5VGNsT2JqZWN0X1R5cGUpID0gJlB5VHlwZV9UeXBlOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUY2xfT2JqIiwgKFB5T2JqZWN0ICopJlB5VGNsT2JqZWN0X1R5cGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkVBREFCTEUiLCBUQ0xfUkVBREFCTEUpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiV1JJVEFCTEUiLCBUQ0xfV1JJVEFCTEUpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVhDRVBUSU9OIiwgVENMX0VYQ0VQVElPTikpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJXSU5ET1dfRVZFTlRTIiwgVENMX1dJTkRPV19FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRklMRV9FVkVOVFMiLCBUQ0xfRklMRV9FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElNRVJfRVZFTlRTIiwgVENMX1RJTUVSX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJRExFX0VWRU5UUyIsIFRDTF9JRExFX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBTExfRVZFTlRTIiwgVENMX0FMTF9FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRE9OVF9XQUlUIiwgVENMX0RPTlRfV0FJVCkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJUS19WRVJTSU9OIiwgVEtfVkVSU0lPTikpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJUQ0xfVkVSU0lPTiIsIFRDTF9WRVJTSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG8gPSBQeVR5cGVfRnJvbVNwZWMoJlRrYXBwX1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUa2FwcFR5cGUiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRrYXBwX1R5cGUgPSBvOworCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmVGt0dF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGt0dFR5cGUiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRrdHRfVHlwZSA9IG87CisKKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZQeVRjbE9iamVjdF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGNsX09iaiIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUY2xPYmplY3RfVHlwZSA9IG87CiAKICNpZmRlZiBUS19BUVVBCiAgICAgLyogVGtfTWFjT1NYU2V0dXBUa05vdGlmaWVyIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBUY2wncyBzdWJzeXN0ZW1zCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190cmFjZW1hbGxvYy5jIGIvTW9kdWxlcy9fdHJhY2VtYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODBlOGVkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdHJhY2VtYWxsb2MuYwpAQCAtMCwwICsxLDE0MjkgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJoYXNodGFibGUuaCIKKyNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgorI2luY2x1ZGUgInB5dGhyZWFkLmgiCisjaW5jbHVkZSAib3NkZWZzLmgiCisKKy8qIFRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5TWVtX1Jhd01hbGxvYygpICovCisjZGVmaW5lIFRSQUNFX1JBV19NQUxMT0MKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQgdHJhY2VtYWxsb2Nfc3RvcCh2b2lkKTsKK3N0YXRpYyB2b2lkKiByYXdfbWFsbG9jKHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIHJhd19mcmVlKHZvaWQgKnB0cik7CisKKyNpZmRlZiBQeV9ERUJVRworIyAgZGVmaW5lIFRSQUNFX0RFQlVHCisjZW5kaWYKKworI2RlZmluZSBfU1RSKFZBTCkgI1ZBTAorI2RlZmluZSBTVFIoVkFMKSBfU1RSKFZBTCkKKworLyogUHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBzdHJ1Y3QgeworICAgIFB5TWVtQWxsb2NhdG9yIG1lbTsKKyAgICBQeU1lbUFsbG9jYXRvciByYXc7CisgICAgUHlNZW1BbGxvY2F0b3Igb2JqOworfSBhbGxvY2F0b3JzOworCitzdGF0aWMgc3RydWN0IHsKKyAgICAvKiBNb2R1bGUgaW5pdGlhbGl6ZWQ/CisgICAgICAgVmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KKyAgICBlbnVtIHsKKyAgICAgICAgVFJBQ0VNQUxMT0NfTk9UX0lOSVRJQUxJWkVELAorICAgICAgICBUUkFDRU1BTExPQ19JTklUSUFMSVpFRCwKKyAgICAgICAgVFJBQ0VNQUxMT0NfRklOQUxJWkVECisgICAgfSBpbml0aWFsaXplZDsKKworICAgIC8qIElzIHRyYWNlbWFsbG9jIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zPworICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisgICAgaW50IHRyYWNpbmc7CisKKyAgICAvKiBsaW1pdCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHRyYWNlYmFjaywgMSBieSBkZWZhdWx0LgorICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMLiAqLworICAgIGludCBtYXhfbmZyYW1lOworfSB0cmFjZW1hbGxvY19jb25maWcgPSB7VFJBQ0VNQUxMT0NfTk9UX0lOSVRJQUxJWkVELCAwLCAxfTsKKworI2lmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykgJiYgZGVmaW5lZChXSVRIX1RIUkVBRCkKKy8qIFRoaXMgbG9jayBpcyBuZWVkZWQgYmVjYXVzZSB0cmFjZW1hbGxvY19mcmVlKCkgaXMgY2FsbGVkIHdpdGhvdXQKKyAgIHRoZSBHSUwgaGVsZCBmcm9tIFB5TWVtX1Jhd0ZyZWUoKS4gSXQgY2Fubm90IGFjcXVpcmUgdGhlIGxvY2sgYmVjYXVzZSBpdAorICAgd291bGQgaW50cm9kdWNlIGEgZGVhZGxvY2sgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkuICovCitzdGF0aWMgUHlUaHJlYWRfdHlwZV9sb2NrIHRhYmxlc19sb2NrOworIyAgZGVmaW5lIFRBQkxFU19MT0NLKCkgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHRhYmxlc19sb2NrLCAxKQorIyAgZGVmaW5lIFRBQkxFU19VTkxPQ0soKSBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGFibGVzX2xvY2spCisjZWxzZQorICAgLyogdmFyaWFibGVzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworIyAgZGVmaW5lIFRBQkxFU19MT0NLKCkKKyMgIGRlZmluZSBUQUJMRVNfVU5MT0NLKCkKKyNlbmRpZgorCisvKiBQYWNrIHRoZSBmcmFtZV90IHN0cnVjdHVyZSB0byByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQgb24gNjQtYml0CisgICBhcmNoaXRlY3R1cmVzOiAxMiBieXRlcyBpbnN0ZWFkIG9mIDE2LiBUaGlzIG9wdGltaXphdGlvbiBtaWdodCBwcm9kdWNlCisgICBTSUdCVVMgb24gYXJjaGl0ZWN0dXJlcyBub3Qgc3VwcG9ydGluZyB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzICg2NC1iaXQKKyAgIElQUyBDUFU/KTogb24gc3VjaCBhcmNoaXRlY3R1cmUsIHRoZSBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgcGFja2VkLiAqLwordHlwZWRlZiBzdHJ1Y3QKKyNpZmRlZiBfX0dOVUNfXworX19hdHRyaWJ1dGVfXygocGFja2VkKSkKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCitfZGVjbHNwZWMoYWxpZ24oNCkpCisjZW5kaWYKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgaW50IGxpbmVubzsKK30gZnJhbWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5X3VoYXNoX3QgaGFzaDsKKyAgICBpbnQgbmZyYW1lOworICAgIGZyYW1lX3QgZnJhbWVzWzFdOworfSB0cmFjZWJhY2tfdDsKKworI2RlZmluZSBUUkFDRUJBQ0tfU0laRShORlJBTUUpIFwKKyAgICAgICAgKHNpemVvZih0cmFjZWJhY2tfdCkgKyBzaXplb2YoZnJhbWVfdCkgKiAoTkZSQU1FIC0gMSkpCisKKyNkZWZpbmUgTUFYX05GUkFNRSBcCisgICAgICAgICgoSU5UX01BWCAtIHNpemVvZih0cmFjZWJhY2tfdCkpIC8gc2l6ZW9mKGZyYW1lX3QpICsgMSkKKworc3RhdGljIFB5T2JqZWN0ICp1bmtub3duX2ZpbGVuYW1lID0gTlVMTDsKK3N0YXRpYyB0cmFjZWJhY2tfdCB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2s7CisKKy8qIFRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogU2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrIGluIGJ5dGVzICovCisgICAgc2l6ZV90IHNpemU7CisKKyAgICAvKiBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkICovCisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazsKK30gdHJhY2VfdDsKKworLyogU2l6ZSBpbiBieXRlcyBvZiBjdXJyZW50bHkgdHJhY2VkIG1lbW9yeS4KKyAgIFByb3RlY3RlZCBieSBUQUJMRVNfTE9DSygpLiAqLworc3RhdGljIHNpemVfdCB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID0gMDsKKworLyogUGVhayBzaXplIGluIGJ5dGVzIG9mIHRyYWNlZCBtZW1vcnkuCisgICBQcm90ZWN0ZWQgYnkgVEFCTEVTX0xPQ0soKS4gKi8KK3N0YXRpYyBzaXplX3QgdHJhY2VtYWxsb2NfcGVha190cmFjZWRfbWVtb3J5ID0gMDsKKworLyogSGFzaCB0YWJsZSB1c2VkIGFzIGEgc2V0IHRvIHRvIGludGVybiBmaWxlbmFtZXM6CisgICBQeU9iamVjdCogPT4gUHlPYmplY3QqLgorICAgUHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9IE5VTEw7CisKKy8qIEJ1ZmZlciB0byBzdG9yZSBhIG5ldyB0cmFjZWJhY2sgaW4gdHJhY2ViYWNrX25ldygpLgorICAgUHJvdGVjdGVkIGJ5IHRoZSBHSUwuICovCitzdGF0aWMgdHJhY2ViYWNrX3QgKnRyYWNlbWFsbG9jX3RyYWNlYmFjayA9IE5VTEw7CisKKy8qIEhhc2ggdGFibGUgdXNlZCBhcyBhIHNldCB0byBpbnRlcm4gdHJhY2ViYWNrczoKKyAgIHRyYWNlYmFja190KiA9PiB0cmFjZWJhY2tfdCoKKyAgIFByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICp0cmFjZW1hbGxvY190cmFjZWJhY2tzID0gTlVMTDsKKworLyogcG9pbnRlciAodm9pZCopID0+IHRyYWNlICh0cmFjZV90KS4KKyAgIFByb3RlY3RlZCBieSBUQUJMRVNfTE9DSygpLiAqLworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqdHJhY2VtYWxsb2NfdHJhY2VzID0gTlVMTDsKKworI2lmZGVmIFRSQUNFX0RFQlVHCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcDsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInRyYWNlbWFsbG9jOiAiKTsKKyAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXApOworICAgIHZhX2VuZChhcCk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIGZmbHVzaChzdGRlcnIpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFRSQUNFX1JBV19NQUxMT0MpCisjZGVmaW5lIFJFRU5UUkFOVF9USFJFQURMT0NBTAorCisvKiBJZiB5b3VyIE9TIGRvZXMgbm90IHByb3ZpZGUgbmF0aXZlIHRocmVhZCBsb2NhbCBzdG9yYWdlLCB5b3UgY2FuIGltcGxlbWVudAorICAgaXQgbWFudWFsbHkgdXNpbmcgYSBsb2NrLiBGdW5jdGlvbnMgb2YgdGhyZWFkLmMgY2Fubm90IGJlIHVzZWQgYmVjYXVzZQorICAgdGhleSB1c2UgUHlNZW1fUmF3TWFsbG9jKCkgd2hpY2ggbGVhZHMgdG8gYSByZWVudHJhbnQgY2FsbC4gKi8KKyNpZiAhKGRlZmluZWQoX1BPU0lYX1RIUkVBRFMpIHx8IGRlZmluZWQoTlRfVEhSRUFEUykpCisjICBlcnJvciAibmVlZCBuYXRpdmUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykiCisjZW5kaWYKKworc3RhdGljIGludCB0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5OworCisvKiBBbnkgbm9uLU5VTEwgcG9pbnRlciBjYW4gYmUgdXNlZCAqLworI2RlZmluZSBSRUVOVFJBTlQgUHlfVHJ1ZQorCitzdGF0aWMgaW50CitnZXRfcmVlbnRyYW50KHZvaWQpCit7CisgICAgdm9pZCAqcHRyID0gUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5KTsKKyAgICBpZiAocHRyICE9IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KHB0ciA9PSBSRUVOVFJBTlQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3NldF9yZWVudHJhbnQoaW50IHJlZW50cmFudCkKK3sKKyAgICBhc3NlcnQocmVlbnRyYW50ID09IDAgfHwgcmVlbnRyYW50ID09IDEpOworICAgIGlmIChyZWVudHJhbnQpIHsKKyAgICAgICAgYXNzZXJ0KFB5VGhyZWFkX2dldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSkgPT0gTlVMTCk7CisgICAgICAgIFB5VGhyZWFkX3NldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSwgUkVFTlRSQU5UKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkpID09IFJFRU5UUkFOVCk7CisgICAgICAgIFB5VGhyZWFkX3NldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSwgTlVMTCk7CisgICAgfQorfQorCisjZWxzZQorCisvKiBXSVRIX1RIUkVBRCBub3QgZGVmaW5lZDogUHl0aG9uIGNvbXBpbGVkIHdpdGhvdXQgdGhyZWFkcywKKyAgIG9yIFRSQUNFX1JBV19NQUxMT0Mgbm90IGRlZmluZWQ6IHZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgaW50IHRyYWNlbWFsbG9jX3JlZW50cmFudCA9IDA7CisKK3N0YXRpYyBpbnQKK2dldF9yZWVudHJhbnQodm9pZCkKK3sKKyAgICByZXR1cm4gdHJhY2VtYWxsb2NfcmVlbnRyYW50OworfQorCitzdGF0aWMgdm9pZAorc2V0X3JlZW50cmFudChpbnQgcmVlbnRyYW50KQoreworICAgIGFzc2VydCghcmVlbnRyYW50IHx8ICFnZXRfcmVlbnRyYW50KCkpOworICAgIHRyYWNlbWFsbG9jX3JlZW50cmFudCA9IHJlZW50cmFudDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitoYXNodGFibGVfY29tcGFyZV91bmljb2RlKGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSkKK3sKKyAgICBpZiAoa2V5ICE9IE5VTEwgJiYgZW50cnktPmtleSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gKFB5VW5pY29kZV9Db21wYXJlKChQeU9iamVjdCAqKWtleSwgKFB5T2JqZWN0ICopZW50cnktPmtleSkgPT0gMCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4ga2V5ID09IGVudHJ5LT5rZXk7Cit9CisKK3N0YXRpYyBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGhhc2h0YWJsZV9hbGxvYyA9IHttYWxsb2MsIGZyZWV9OworCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICoKK2hhc2h0YWJsZV9uZXcoc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMpCit7CisgICAgcmV0dXJuIF9QeV9oYXNodGFibGVfbmV3X2Z1bGwoZGF0YV9zaXplLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZnVuYywgY29tcGFyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsICZoYXNodGFibGVfYWxsb2MpOworfQorCitzdGF0aWMgdm9pZCoKK3Jhd19tYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvcnMucmF3Lm1hbGxvYyhhbGxvY2F0b3JzLnJhdy5jdHgsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorcmF3X2ZyZWUodm9pZCAqcHRyKQoreworICAgIGFsbG9jYXRvcnMucmF3LmZyZWUoYWxsb2NhdG9ycy5yYXcuY3R4LCBwdHIpOworfQorCitzdGF0aWMgUHlfdWhhc2hfdAoraGFzaHRhYmxlX2hhc2hfdHJhY2ViYWNrKGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICBjb25zdCB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrID0ga2V5OworICAgIHJldHVybiB0cmFjZWJhY2stPmhhc2g7Cit9CisKK3N0YXRpYyBpbnQKK2hhc2h0YWJsZV9jb21wYXJlX3RyYWNlYmFjayhjb25zdCB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmhlKQoreworICAgIGNvbnN0IHRyYWNlYmFja190ICp0cmFjZWJhY2syID0gaGUtPmtleTsKKyAgICBjb25zdCBmcmFtZV90ICpmcmFtZTEsICpmcmFtZTI7CisgICAgaW50IGk7CisKKyAgICBpZiAodHJhY2ViYWNrMS0+bmZyYW1lICE9IHRyYWNlYmFjazItPm5mcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKGk9MDsgaSA8IHRyYWNlYmFjazEtPm5mcmFtZTsgaSsrKSB7CisgICAgICAgIGZyYW1lMSA9ICZ0cmFjZWJhY2sxLT5mcmFtZXNbaV07CisgICAgICAgIGZyYW1lMiA9ICZ0cmFjZWJhY2syLT5mcmFtZXNbaV07CisKKyAgICAgICAgaWYgKGZyYW1lMS0+bGluZW5vICE9IGZyYW1lMi0+bGluZW5vKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKGZyYW1lMS0+ZmlsZW5hbWUgIT0gZnJhbWUyLT5maWxlbmFtZSkgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9Db21wYXJlKGZyYW1lMS0+ZmlsZW5hbWUsIGZyYW1lMi0+ZmlsZW5hbWUpICE9IDApOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19nZXRfZnJhbWUoUHlGcmFtZU9iamVjdCAqcHlmcmFtZSwgZnJhbWVfdCAqZnJhbWUpCit7CisgICAgUHlDb2RlT2JqZWN0ICpjb2RlOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgZnJhbWUtPmZpbGVuYW1lID0gdW5rbm93bl9maWxlbmFtZTsKKyAgICBmcmFtZS0+bGluZW5vID0gUHlGcmFtZV9HZXRMaW5lTnVtYmVyKHB5ZnJhbWUpOworICAgIGFzc2VydChmcmFtZS0+bGluZW5vID49IDApOworICAgIGlmIChmcmFtZS0+bGluZW5vIDwgMCkKKyAgICAgICAgZnJhbWUtPmxpbmVubyA9IDA7CisKKyAgICBjb2RlID0gcHlmcmFtZS0+Zl9jb2RlOworICAgIGlmIChjb2RlID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgY29kZSBvYmplY3Qgb2YgdGhlIGZyYW1lIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjb2RlLT5jb19maWxlbmFtZSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBnZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBjb2RlIG9iamVjdCIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxlbmFtZSA9IGNvZGUtPmNvX2ZpbGVuYW1lOworICAgIGFzc2VydChmaWxlbmFtZSAhPSBOVUxMKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZmlsZW5hbWUpKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZpbGVuYW1lIGlzIG5vdCBhbiB1bmljb2RlIHN0cmluZyIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFQeVVuaWNvZGVfSVNfUkVBRFkoZmlsZW5hbWUpKSB7CisgICAgICAgIC8qIERvbid0IG1ha2UgYSBVbmljb2RlIHN0cmluZyByZWFkeSB0byBhdm9pZCByZWVudHJhbnQgY2FsbHMKKyAgICAgICAgICAgdG8gdHJhY2VtYWxsb2NfbWFsbG9jKCkgb3IgdHJhY2VtYWxsb2NfcmVhbGxvYygpICovCisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZpbGVuYW1lIGlzIG5vdCBhIHJlYWR5IHVuaWNvZGUgc3RyaW5nIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIGludGVybiB0aGUgZmlsZW5hbWUgKi8KKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KHRyYWNlbWFsbG9jX2ZpbGVuYW1lcywgZmlsZW5hbWUpOworICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVuYW1lID0gKFB5T2JqZWN0ICopZW50cnktPmtleTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyBpcyByZXNwb25zaWJsZSB0byBrZWVwIGEgcmVmZXJlbmNlCisgICAgICAgICAgIHRvIHRoZSBmaWxlbmFtZSAqLworICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOworICAgICAgICBpZiAoX1B5X2hhc2h0YWJsZV9zZXQodHJhY2VtYWxsb2NfZmlsZW5hbWVzLCBmaWxlbmFtZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGludGVybiB0aGUgZmlsZW5hbWUiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLyogdGhlIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyB0YWJsZSBrZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgZmlsZW5hbWUgKi8KKyAgICBmcmFtZS0+ZmlsZW5hbWUgPSBmaWxlbmFtZTsKK30KKworc3RhdGljIFB5X3VoYXNoX3QKK3RyYWNlYmFja19oYXNoKHRyYWNlYmFja190ICp0cmFjZWJhY2spCit7CisgICAgLyogY29kZSBiYXNlZCBvbiB0dXBsZWhhc2goKSBvZiBPYmplY3RzL3R1cGxlb2JqZWN0LmMgKi8KKyAgICBQeV91aGFzaF90IHgsIHk7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBpbnQgbGVuID0gdHJhY2ViYWNrLT5uZnJhbWU7CisgICAgUHlfdWhhc2hfdCBtdWx0ID0gX1B5SEFTSF9NVUxUSVBMSUVSOworICAgIGZyYW1lX3QgKmZyYW1lOworCisgICAgeCA9IDB4MzQ1Njc4VUw7CisgICAgZnJhbWUgPSB0cmFjZWJhY2stPmZyYW1lczsKKyAgICB3aGlsZSAoLS1sZW4gPj0gMCkgeworICAgICAgICB5ID0gKFB5X3VoYXNoX3QpUHlPYmplY3RfSGFzaChmcmFtZS0+ZmlsZW5hbWUpOworICAgICAgICB5IF49IChQeV91aGFzaF90KWZyYW1lLT5saW5lbm87CisgICAgICAgIGZyYW1lKys7CisKKyAgICAgICAgeCA9ICh4IF4geSkgKiBtdWx0OworICAgICAgICAvKiB0aGUgY2FzdCBtaWdodCB0cnVuY2F0ZSBsZW47IHRoYXQgZG9lc24ndCBjaGFuZ2UgaGFzaCBzdGFiaWxpdHkgKi8KKyAgICAgICAgbXVsdCArPSAoUHlfdWhhc2hfdCkoODI1MjBVTCArIGxlbiArIGxlbik7CisgICAgfQorICAgIHggKz0gOTc1MzFVTDsKKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlYmFja19nZXRfZnJhbWVzKHRyYWNlYmFja190ICp0cmFjZWJhY2spCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOworICAgIFB5RnJhbWVPYmplY3QgKnB5ZnJhbWU7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIHRzdGF0ZSA9IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCk7CisjZWxzZQorICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CisjZW5kaWYKKyAgICBpZiAodHN0YXRlID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChweWZyYW1lID0gdHN0YXRlLT5mcmFtZTsgcHlmcmFtZSAhPSBOVUxMOyBweWZyYW1lID0gcHlmcmFtZS0+Zl9iYWNrKSB7CisgICAgICAgIHRyYWNlbWFsbG9jX2dldF9mcmFtZShweWZyYW1lLCAmdHJhY2ViYWNrLT5mcmFtZXNbdHJhY2ViYWNrLT5uZnJhbWVdKTsKKyAgICAgICAgYXNzZXJ0KHRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXS5maWxlbmFtZSAhPSBOVUxMKTsKKyAgICAgICAgYXNzZXJ0KHRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXS5saW5lbm8gPj0gMCk7CisgICAgICAgIHRyYWNlYmFjay0+bmZyYW1lKys7CisgICAgICAgIGlmICh0cmFjZWJhY2stPm5mcmFtZSA9PSB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHRyYWNlYmFja190ICoKK3RyYWNlYmFja19uZXcodm9pZCkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICAvKiBnZXQgZnJhbWVzICovCisgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2NfdHJhY2ViYWNrOworICAgIHRyYWNlYmFjay0+bmZyYW1lID0gMDsKKyAgICB0cmFjZWJhY2tfZ2V0X2ZyYW1lcyh0cmFjZWJhY2spOworICAgIGlmICh0cmFjZWJhY2stPm5mcmFtZSA9PSAwKQorICAgICAgICByZXR1cm4gJnRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjazsKKyAgICB0cmFjZWJhY2stPmhhc2ggPSB0cmFjZWJhY2tfaGFzaCh0cmFjZWJhY2spOworCisgICAgLyogaW50ZXJuIHRoZSB0cmFjZWJhY2sgKi8KKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MsIHRyYWNlYmFjayk7CisgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgdHJhY2ViYWNrID0gKHRyYWNlYmFja190ICopZW50cnktPmtleTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHRyYWNlYmFja190ICpjb3B5OworICAgICAgICBzaXplX3QgdHJhY2ViYWNrX3NpemU7CisKKyAgICAgICAgdHJhY2ViYWNrX3NpemUgPSBUUkFDRUJBQ0tfU0laRSh0cmFjZWJhY2stPm5mcmFtZSk7CisKKyAgICAgICAgY29weSA9IHJhd19tYWxsb2ModHJhY2ViYWNrX3NpemUpOworICAgICAgICBpZiAoY29weSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gaW50ZXJuIHRoZSB0cmFjZWJhY2s6IG1hbGxvYyBmYWlsZWQiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGNvcHksIHRyYWNlYmFjaywgdHJhY2ViYWNrX3NpemUpOworCisgICAgICAgIGlmIChfUHlfaGFzaHRhYmxlX3NldCh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCBjb3B5LCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIHJhd19mcmVlKGNvcHkpOworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGludGVybiB0aGUgdHJhY2ViYWNrOiBwdXRkYXRhIGZhaWxlZCIpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB0cmFjZWJhY2sgPSBjb3B5OworICAgIH0KKyAgICByZXR1cm4gdHJhY2ViYWNrOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19hZGRfdHJhY2Uodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrOworICAgIHRyYWNlX3QgdHJhY2U7CisgICAgaW50IHJlczsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKworICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja19uZXcoKTsKKyAgICBpZiAodHJhY2ViYWNrID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHRyYWNlLnNpemUgPSBzaXplOworICAgIHRyYWNlLnRyYWNlYmFjayA9IHRyYWNlYmFjazsKKworICAgIHJlcyA9IF9QeV9IQVNIVEFCTEVfU0VUKHRyYWNlbWFsbG9jX3RyYWNlcywgcHRyLCB0cmFjZSk7CisgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgIGFzc2VydCh0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5IDw9IFBZX1NJWkVfTUFYIC0gc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgKz0gc2l6ZTsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPiB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkpCisgICAgICAgICAgICB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5OworICAgIH0KKworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2Uodm9pZCAqcHRyKQoreworICAgIHRyYWNlX3QgdHJhY2U7CisKKyAgICBpZiAoX1B5X2hhc2h0YWJsZV9wb3AodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsICZ0cmFjZSwgc2l6ZW9mKHRyYWNlKSkpIHsKKyAgICAgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPj0gdHJhY2Uuc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgLT0gdHJhY2Uuc2l6ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgIHZvaWQgKnB0cjsKKworICAgIHB0ciA9IGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgc2l6ZSk7CisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIsIHNpemUpIDwgMCkgeworICAgICAgICAvKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSB0cmFjZSBmb3IgdGhlIG5ldyBtZW1vcnkgYmxvY2sgKi8KKyAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgICAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVEFCTEVTX1VOTE9DSygpOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKyAgICB2b2lkICpwdHIyOworCisgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOworICAgIGlmIChwdHIyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHB0ciAhPSBOVUxMKSB7CisgICAgICAgIC8qIGFuIGV4aXN0aW5nIG1lbW9yeSBibG9jayBoYXMgYmVlbiByZXNpemVkICovCisKKyAgICAgICAgVEFCTEVTX0xPQ0soKTsKKyAgICAgICAgdHJhY2VtYWxsb2NfcmVtb3ZlX3RyYWNlKHB0cik7CisKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIyLCBuZXdfc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIFRoZSBlcnJvciBjYW5ub3QgYmUgcmVwb3J0ZWQgdG8KKyAgICAgICAgICAgICAgIHRoZSBjYWxsZXIsIGJlY2F1c2UgcmVhbGxvYygpIG1heSBhbHJlYWR5IGhhdmUgc2hyaW5rZWQgdGhlCisgICAgICAgICAgICAgICBtZW1vcnkgYmxvY2sgYW5kIHNvIHJlbW92ZWQgYnl0ZXMuCisKKyAgICAgICAgICAgICAgIFRoaXMgY2FzZSBpcyB2ZXJ5IHVubGlrZWx5OiBhbiBoYXNoIGVudHJ5IGhhcyBqdXN0IGJlZW4KKyAgICAgICAgICAgICAgIHJlbGVhc2VkLCBzbyB0aGUgaGFzaCB0YWJsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgZnJlZSBlbnRyeS4KKworICAgICAgICAgICAgICAgVGhlIEdJTCBhbmQgdGhlIHRhYmxlIGxvY2sgZW5zdXJlcyB0aGF0IG9ubHkgb25lIHRocmVhZCBpcworICAgICAgICAgICAgICAgYWxsb2NhdGluZyBtZW1vcnkuICovCisgICAgICAgICAgICBhc3NlcnQoMCAmJiAic2hvdWxkIG5ldmVyIGhhcHBlbiIpOworICAgICAgICB9CisgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIG5ldyBhbGxvY2F0aW9uICovCisKKyAgICAgICAgVEFCTEVTX0xPQ0soKTsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIyLCBuZXdfc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAvKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSB0cmFjZSBmb3IgdGhlIG5ldyBtZW1vcnkgYmxvY2sgKi8KKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgICAgIGFsbG9jLT5mcmVlKGFsbG9jLT5jdHgsIHB0cjIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgIH0KKyAgICByZXR1cm4gcHRyMjsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2ZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworCisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAgLyogR0lMIGNhbm5vdCBiZSBsb2NrZWQgaW4gUHlNZW1fUmF3RnJlZSgpIGJlY2F1c2UgaXQgd291bGQgaW50cm9kdWNlCisgICAgICAgIGEgZGVhZGxvY2sgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkuICovCisKKyAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfbWFsbG9jX2dpbCh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHZvaWQgKnB0cjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5T2JqZXRfTWFsbG9jKCkgY2FsbHMgUHlNZW1fTWFsbG9jKCkgZm9yCisgICAgICAgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gNTEyIGJ5dGVzLCBkb24ndCB0cmFjZSB0aGUgc2FtZSBtZW1vcnkKKyAgICAgICBhbGxvY2F0aW9uIHR3aWNlLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICBwdHIgPSB0cmFjZW1hbGxvY19tYWxsb2MoY3R4LCBzaXplKTsKKworICAgIHNldF9yZWVudHJhbnQoMCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yZWFsbG9jX2dpbCh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIHZvaWQgKnB0cjI7CisKKyAgICBpZiAoZ2V0X3JlZW50cmFudCgpKSB7CisgICAgICAgIC8qIFJlZW50cmFudCBjYWxsIHRvIFB5TWVtX1JlYWxsb2MoKSBhbmQgUHlNZW1fUmF3UmVhbGxvYygpLgorICAgICAgICAgICBFeGFtcGxlOiBQeU1lbV9SYXdSZWFsbG9jKCkgaXMgY2FsbGVkIGludGVybmFsbHkgYnkgcHltYWxsb2MKKyAgICAgICAgICAgKF9QeU9iamVjdF9NYWxsb2MoKSBhbmQgIF9QeU9iamVjdF9SZWFsbG9jKCkpIHRvIGFsbG9jYXRlIGEgbmV3CisgICAgICAgICAgIGFyZW5hIChuZXdfYXJlbmEoKSkuICovCisgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKworICAgICAgICBwdHIyID0gYWxsb2MtPnJlYWxsb2MoYWxsb2MtPmN0eCwgcHRyLCBuZXdfc2l6ZSk7CisgICAgICAgIGlmIChwdHIyICE9IE5VTEwgJiYgcHRyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFRBQkxFU19MT0NLKCk7CisgICAgICAgICAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHRyMjsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5T2JqZXRfUmVhbGxvYygpIGNhbGxzIFB5TWVtX1JlYWxsb2MoKSBmb3IKKyAgICAgICBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiA1MTIgYnl0ZXMuIERvbid0IHRyYWNlIHRoZSBzYW1lIG1lbW9yeQorICAgICAgIGFsbG9jYXRpb24gdHdpY2UuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKworICAgIHB0cjIgPSB0cmFjZW1hbGxvY19yZWFsbG9jKGN0eCwgcHRyLCBuZXdfc2l6ZSk7CisKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIHJldHVybiBwdHIyOworfQorCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yYXdfbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbF9zdGF0ZTsKKyNlbmRpZgorICAgIHZvaWQgKnB0cjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5R0lMU3RhdGVfRW5zdXJlKCkgbWF5IGNhbGwgUHlNZW1fUmF3TWFsbG9jKCkKKyAgICAgICBpbmRpcmVjdGx5IHdoaWNoIHdvdWxkIGNhbGwgUHlHSUxTdGF0ZV9FbnN1cmUoKSBpZiByZWVudHJhbnQgYXJlIG5vdAorICAgICAgIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGdpbF9zdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisgICAgcHRyID0gdHJhY2VtYWxsb2NfbWFsbG9jKGN0eCwgc2l6ZSk7CisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbF9zdGF0ZSk7CisjZWxzZQorICAgIHB0ciA9IHRyYWNlbWFsbG9jX21hbGxvYyhjdHgsIHNpemUpOworI2VuZGlmCisKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmF3X3JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsX3N0YXRlOworI2VuZGlmCisgICAgdm9pZCAqcHRyMjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgLyogUmVlbnRyYW50IGNhbGwgdG8gUHlNZW1fUmF3UmVhbGxvYygpLiAqLworICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisKKyAgICAgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOworCisgICAgICAgIGlmIChwdHIyICE9IE5VTEwgJiYgcHRyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFRBQkxFU19MT0NLKCk7CisgICAgICAgICAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHRyMjsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5R0lMU3RhdGVfRW5zdXJlKCkgbWF5IGNhbGwgUHlNZW1fUmF3TWFsbG9jKCkKKyAgICAgICBpbmRpcmVjdGx5IHdoaWNoIHdvdWxkIGNhbGwgUHlHSUxTdGF0ZV9FbnN1cmUoKSBpZiByZWVudHJhbnQgY2FsbHMgYXJlCisgICAgICAgbm90IGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGdpbF9zdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisgICAgcHRyMiA9IHRyYWNlbWFsbG9jX3JlYWxsb2MoY3R4LCBwdHIsIG5ld19zaXplKTsKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsX3N0YXRlKTsKKyNlbHNlCisgICAgcHRyMiA9IHRyYWNlbWFsbG9jX3JlYWxsb2MoY3R4LCBwdHIsIG5ld19zaXplKTsKKyNlbmRpZgorCisgICAgc2V0X3JlZW50cmFudCgwKTsKKyAgICByZXR1cm4gcHRyMjsKK30KKyNlbmRpZiAgIC8qIFRSQUNFX1JBV19NQUxMT0MgKi8KKworc3RhdGljIGludAordHJhY2VtYWxsb2NfY2xlYXJfZmlsZW5hbWUoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IChQeU9iamVjdCAqKWVudHJ5LT5rZXk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordHJhY2ViYWNrX2ZyZWVfdHJhY2ViYWNrKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrID0gKHRyYWNlYmFja190ICopZW50cnktPmtleTsKKyAgICByYXdfZnJlZSh0cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCisvKiByZWVudHJhbnQgZmxhZyBtdXN0IGJlIHNldCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIEdJTCBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19jbGVhcl90cmFjZXModm9pZCkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIC8qIFRoZSBHSUwgcHJvdGVjdHMgdmFyaWFibGVzIGFnYWludCBjb25jdXJyZW50IGFjY2VzcyAqLworICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICAvKiBEaXNhYmxlIGFsc28gcmVlbnRyYW50IGNhbGxzIHRvIHRyYWNlbWFsbG9jX21hbGxvYygpIHRvIG5vdCBhZGQgYSBuZXcKKyAgICAgICB0cmFjZSB3aGlsZSB3ZSBhcmUgY2xlYXJpbmcgdHJhY2VzICovCisgICAgYXNzZXJ0KGdldF9yZWVudHJhbnQoKSk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID0gMDsKKyAgICB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSAwOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaCh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCB0cmFjZWJhY2tfZnJlZV90cmFjZWJhY2ssIE5VTEwpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2ViYWNrcyk7CisKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2godHJhY2VtYWxsb2NfZmlsZW5hbWVzLCB0cmFjZW1hbGxvY19jbGVhcl9maWxlbmFtZSwgTlVMTCk7CisgICAgX1B5X2hhc2h0YWJsZV9jbGVhcih0cmFjZW1hbGxvY19maWxlbmFtZXMpOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19pbml0KHZvaWQpCit7CisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCA9PSBUUkFDRU1BTExPQ19GSU5BTElaRUQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGhhcyBiZWVuIHVubG9hZGVkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAodHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID09IFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVEKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworCisjaWZkZWYgUkVFTlRSQU5UX1RIUkVBRExPQ0FMCisgICAgdHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9IFB5VGhyZWFkX2NyZWF0ZV9rZXkoKTsKKyAgICBpZiAodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9PSAtMSkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayA9PSBOVUxMKSB7CisgICAgICAgIHRhYmxlc19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAodGFibGVzX2xvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImNhbm5vdCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9IGhhc2h0YWJsZV9uZXcoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYylQeU9iamVjdF9IYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaHRhYmxlX2NvbXBhcmVfdW5pY29kZSk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2tzID0gaGFzaHRhYmxlX25ldygwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyloYXNodGFibGVfaGFzaF90cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jKWhhc2h0YWJsZV9jb21wYXJlX3RyYWNlYmFjayk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZXMgPSBoYXNodGFibGVfbmV3KHNpemVvZih0cmFjZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KTsKKworICAgIGlmICh0cmFjZW1hbGxvY19maWxlbmFtZXMgPT0gTlVMTCB8fCB0cmFjZW1hbGxvY190cmFjZWJhY2tzID09IE5VTEwKKyAgICAgICAgfHwgdHJhY2VtYWxsb2NfdHJhY2VzID09IE5VTEwpCisgICAgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdW5rbm93bl9maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKKyAgICBpZiAodW5rbm93bl9maWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnVua25vd25fZmlsZW5hbWUpOworCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLm5mcmFtZSA9IDE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5maWxlbmFtZSA9IHVua25vd25fZmlsZW5hbWU7CisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5saW5lbm8gPSAwOworICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5oYXNoID0gdHJhY2ViYWNrX2hhc2goJnRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjayk7CisKKyAgICAvKiBEaXNhYmxlIHRyYWNpbmcgYWxsb2NhdGlvbnMgdW50aWwgaG9va3MgYXJlIGluc3RhbGxlZC4gU2V0CisgICAgICAgYWxzbyB0aGUgcmVlbnRyYW50IGZsYWcgdG8gZGV0ZWN0IGJ1Z3M6IGZhaWwgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBzZXRfcmVlbnRyYW50KDEpIGlzIGNhbGxlZCB3aGlsZSB0cmFjaW5nIGlzIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19JTklUSUFMSVpFRDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2RlaW5pdCh2b2lkKQoreworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgIT0gVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQpCisgICAgICAgIHJldHVybjsKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19GSU5BTElaRUQ7CisKKyAgICB0cmFjZW1hbGxvY19zdG9wKCk7CisKKyAgICAvKiBkZXN0cm95IGhhc2ggdGFibGVzICovCisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworICAgIF9QeV9oYXNodGFibGVfZGVzdHJveSh0cmFjZW1hbGxvY19maWxlbmFtZXMpOworCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayAhPSBOVUxMKSB7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayh0YWJsZXNfbG9jayk7CisgICAgICAgIHRhYmxlc19sb2NrID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFJFRU5UUkFOVF9USFJFQURMT0NBTAorICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXkodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSk7CisjZW5kaWYKKworICAgIFB5X1hERUNSRUYodW5rbm93bl9maWxlbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3N0YXJ0KGludCBtYXhfbmZyYW1lKQoreworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2luaXQoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykgeworICAgICAgICAvKiBob29rIGFscmVhZHkgaW5zdGFsbGVkOiBkbyBub3RoaW5nICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGFzc2VydCgxIDw9IG1heF9uZnJhbWUgJiYgbWF4X25mcmFtZSA8PSBNQVhfTkZSQU1FKTsKKyAgICB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSA9IG1heF9uZnJhbWU7CisKKyAgICAvKiBhbGxvY2F0ZSBhIGJ1ZmZlciB0byBzdG9yZSBhIG5ldyB0cmFjZWJhY2sgKi8KKyAgICBzaXplID0gVFJBQ0VCQUNLX1NJWkUobWF4X25mcmFtZSk7CisgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9PSBOVUxMKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2sgPSByYXdfbWFsbG9jKHNpemUpOworICAgIGlmICh0cmFjZW1hbGxvY190cmFjZWJhY2sgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworICAgIGFsbG9jLm1hbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19tYWxsb2M7CisgICAgYWxsb2MucmVhbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19yZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSB0cmFjZW1hbGxvY19mcmVlOworCisgICAgYWxsb2MuY3R4ID0gJmFsbG9jYXRvcnMucmF3OworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworI2VuZGlmCisKKyAgICBhbGxvYy5tYWxsb2MgPSB0cmFjZW1hbGxvY19tYWxsb2NfZ2lsOworICAgIGFsbG9jLnJlYWxsb2MgPSB0cmFjZW1hbGxvY19yZWFsbG9jX2dpbDsKKyAgICBhbGxvYy5mcmVlID0gdHJhY2VtYWxsb2NfZnJlZTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm1lbTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jYXRvcnMubWVtKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jKTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm9iajsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jYXRvcnMub2JqKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgcmVhZHk6IHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nID0gMTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19zdG9wKHZvaWQpCit7CisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogc3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKyAgICB0cmFjZW1hbGxvY19jb25maWcudHJhY2luZyA9IDA7CisKKyAgICAvKiBzZXQgdGhlIHJlZW50cmFudCBmbGFnIHRvIGRldGVjdCBidWdzOiBmYWlsIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yIGlmCisgICAgICAgc2V0X3JlZW50cmFudCgxKSBpcyBjYWxsZWQgd2hpbGUgdHJhY2luZyBpcyBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisgICAgLyogdW5yZWdpc3RlciB0aGUgaG9vayBvbiBtZW1vcnkgYWxsb2NhdG9ycyAqLworI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jYXRvcnMucmF3KTsKKyNlbmRpZgorICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2NhdG9ycy5tZW0pOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmYWxsb2NhdG9ycy5vYmopOworCisgICAgLyogcmVsZWFzZSBtZW1vcnkgKi8KKyAgICB0cmFjZW1hbGxvY19jbGVhcl90cmFjZXMoKTsKKyAgICByYXdfZnJlZSh0cmFjZW1hbGxvY190cmFjZWJhY2spOworICAgIHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9IE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2xpbmVub19hc19vYmooaW50IGxpbmVubykKK3sKKyAgICBpZiAobGluZW5vID49IDApCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobGluZW5vKTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfaXNfdHJhY2luZ19kb2MsCisgICAgImlzX3RyYWNpbmcoKS0+Ym9vbFxuIgorICAgICJcbiIKKyAgICAiVHJ1ZSBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyxcbiIKKyAgICAiRmFsc2Ugb3RoZXJ3aXNlLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19pc190cmFjaW5nKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcodHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzX2RvYywKKyAgICAiY2xlYXJfdHJhY2VzKClcbiIKKyAgICAiXG4iCisgICAgIkNsZWFyIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHNldF9yZWVudHJhbnQoMSk7CisgICAgdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzKCk7CisgICAgc2V0X3JlZW50cmFudCgwKTsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QqCitmcmFtZV90b19weW9iamVjdChmcmFtZV90ICpmcmFtZSkKK3sKKyAgICBQeU9iamVjdCAqZnJhbWVfb2JqLCAqbGluZW5vX29iajsKKworICAgIGZyYW1lX29iaiA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmIChmcmFtZV9vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZnJhbWUtPmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIGZyYW1lLT5maWxlbmFtZSA9IFB5X05vbmU7CisgICAgUHlfSU5DUkVGKGZyYW1lLT5maWxlbmFtZSk7CisgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZV9vYmosIDAsIGZyYW1lLT5maWxlbmFtZSk7CisKKyAgICBhc3NlcnQoZnJhbWUtPmxpbmVubyA+PSAwKTsKKyAgICBsaW5lbm9fb2JqID0gbGluZW5vX2FzX29iaihmcmFtZS0+bGluZW5vKTsKKyAgICBpZiAobGluZW5vX29iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihmcmFtZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZV9vYmosIDEsIGxpbmVub19vYmopOworCisgICAgcmV0dXJuIGZyYW1lX29iajsKK30KKworc3RhdGljIFB5T2JqZWN0KgordHJhY2ViYWNrX3RvX3B5b2JqZWN0KHRyYWNlYmFja190ICp0cmFjZWJhY2ssIF9QeV9oYXNodGFibGVfdCAqaW50ZXJuX3RhYmxlKQoreworICAgIGludCBpOworICAgIFB5T2JqZWN0ICpmcmFtZXMsICpmcmFtZTsKKworICAgIGlmIChpbnRlcm5fdGFibGUgIT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5X0hBU0hUQUJMRV9HRVQoaW50ZXJuX3RhYmxlLCB0cmFjZWJhY2ssIGZyYW1lcykpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgcmV0dXJuIGZyYW1lczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lcyA9IFB5VHVwbGVfTmV3KHRyYWNlYmFjay0+bmZyYW1lKTsKKyAgICBpZiAoZnJhbWVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpPTA7IGkgPCB0cmFjZWJhY2stPm5mcmFtZTsgaSsrKSB7CisgICAgICAgIGZyYW1lID0gZnJhbWVfdG9fcHlvYmplY3QoJnRyYWNlYmFjay0+ZnJhbWVzW2ldKTsKKyAgICAgICAgaWYgKGZyYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZXMsIGksIGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJuX3RhYmxlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeV9IQVNIVEFCTEVfU0VUKGludGVybl90YWJsZSwgdHJhY2ViYWNrLCBmcmFtZXMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGZyYW1lcyk7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyogaW50ZXJuX3RhYmxlIGtlZXBzIGEgbmV3IHJlZmVyZW5jZSB0byBmcmFtZXMgKi8KKyAgICAgICAgUHlfSU5DUkVGKGZyYW1lcyk7CisgICAgfQorICAgIHJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlX3RvX3B5b2JqZWN0KHRyYWNlX3QgKnRyYWNlLCBfUHlfaGFzaHRhYmxlX3QgKmludGVybl90cmFjZWJhY2tzKQoreworICAgIFB5T2JqZWN0ICp0cmFjZV9vYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpzaXplLCAqdHJhY2ViYWNrOworCisgICAgdHJhY2Vfb2JqID0gUHlUdXBsZV9OZXcoMik7CisgICAgaWYgKHRyYWNlX29iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNpemUgPSBQeUxvbmdfRnJvbVNpemVfdCh0cmFjZS0+c2l6ZSk7CisgICAgaWYgKHNpemUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYodHJhY2Vfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0odHJhY2Vfb2JqLCAwLCBzaXplKTsKKworICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja190b19weW9iamVjdCh0cmFjZS0+dHJhY2ViYWNrLCBpbnRlcm5fdHJhY2ViYWNrcyk7CisgICAgaWYgKHRyYWNlYmFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih0cmFjZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTSh0cmFjZV9vYmosIDEsIHRyYWNlYmFjayk7CisKKyAgICByZXR1cm4gdHJhY2Vfb2JqOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgX1B5X2hhc2h0YWJsZV90ICp0cmFjZXM7CisgICAgX1B5X2hhc2h0YWJsZV90ICp0cmFjZWJhY2tzOworICAgIFB5T2JqZWN0ICpsaXN0OworfSBnZXRfdHJhY2VzX3Q7CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2dldF90cmFjZXNfZmlsbChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgZ2V0X3RyYWNlc190ICpnZXRfdHJhY2VzID0gdXNlcl9kYXRhOworICAgIHRyYWNlX3QgKnRyYWNlOworICAgIFB5T2JqZWN0ICp0cmFjZW1hbGxvY19vYmo7CisgICAgaW50IHJlczsKKworICAgIHRyYWNlID0gKHRyYWNlX3QgKilfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpOworCisgICAgdHJhY2VtYWxsb2Nfb2JqID0gdHJhY2VfdG9fcHlvYmplY3QodHJhY2UsIGdldF90cmFjZXMtPnRyYWNlYmFja3MpOworICAgIGlmICh0cmFjZW1hbGxvY19vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXMgPSBQeUxpc3RfQXBwZW5kKGdldF90cmFjZXMtPmxpc3QsIHRyYWNlbWFsbG9jX29iaik7CisgICAgUHlfREVDUkVGKHRyYWNlbWFsbG9jX29iaik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3B5b2JqZWN0X2RlY3JlZl9jYihfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IChQeU9iamVjdCAqKV9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19kb2MsCisgICAgIl9nZXRfdHJhY2VzKCkgLT4gbGlzdFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRyYWNlcyBvZiBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLlxuIgorICAgICJSZXR1cm4gYSBsaXN0IG9mIChzaXplOiBpbnQsIHRyYWNlYmFjazogdHVwbGUpIHR1cGxlcy5cbiIKKyAgICAidHJhY2ViYWNrIGlzIGEgdHVwbGUgb2YgKGZpbGVuYW1lOiBzdHIsIGxpbmVubzogaW50KSB0dXBsZXMuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm4gYW4gZW1wdHkgbGlzdCBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGRpc2FibGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfdHJhY2VzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIGdldF90cmFjZXNfdCBnZXRfdHJhY2VzOworICAgIGludCBlcnI7CisKKyAgICBnZXRfdHJhY2VzLnRyYWNlcyA9IE5VTEw7CisgICAgZ2V0X3RyYWNlcy50cmFjZWJhY2tzID0gTlVMTDsKKyAgICBnZXRfdHJhY2VzLmxpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChnZXRfdHJhY2VzLmxpc3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybiBnZXRfdHJhY2VzLmxpc3Q7CisKKyAgICAvKiB0aGUgdHJhY2ViYWNrIGhhc2ggdGFibGUgaXMgdXNlZCB0ZW1wb3JhcmlseSB0byBpbnRlcm4gdHJhY2ViYWNrIHR1cGxlCisgICAgICAgb2YgKGZpbGVuYW1lLCBsaW5lbm8pIHR1cGxlcyAqLworICAgIGdldF90cmFjZXMudHJhY2ViYWNrcyA9IGhhc2h0YWJsZV9uZXcoc2l6ZW9mKFB5T2JqZWN0ICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9kaXJlY3QpOworICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlYmFja3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgZ2V0X3RyYWNlcy50cmFjZXMgPSBfUHlfaGFzaHRhYmxlX2NvcHkodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIHNldF9yZWVudHJhbnQoMSk7CisgICAgZXJyID0gX1B5X2hhc2h0YWJsZV9mb3JlYWNoKGdldF90cmFjZXMudHJhY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2ZpbGwsICZnZXRfdHJhY2VzKTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIGlmIChlcnIpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBnb3RvIGZpbmFsbHk7CisKK2Vycm9yOgorICAgIFB5X0NMRUFSKGdldF90cmFjZXMubGlzdCk7CisKK2ZpbmFsbHk6CisgICAgaWYgKGdldF90cmFjZXMudHJhY2ViYWNrcyAhPSBOVUxMKSB7CisgICAgICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaChnZXRfdHJhY2VzLnRyYWNlYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VtYWxsb2NfcHlvYmplY3RfZGVjcmVmX2NiLCBOVUxMKTsKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KGdldF90cmFjZXMudHJhY2ViYWNrcyk7CisgICAgfQorICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlcyAhPSBOVUxMKQorICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koZ2V0X3RyYWNlcy50cmFjZXMpOworCisgICAgcmV0dXJuIGdldF90cmFjZXMubGlzdDsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrX2RvYywKKyAgICAiX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iailcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0IG9iaiB3YXMgYWxsb2NhdGVkLlxuIgorICAgICJSZXR1cm4gYSB0dXBsZSBvZiAoZmlsZW5hbWU6IHN0ciwgbGluZW5vOiBpbnQpIHR1cGxlcy5cbiIKKyAgICAiXG4iCisgICAgIlJldHVybiBOb25lIGlmIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgZGlzYWJsZWQgb3IgZGlkIG5vdFxuIgorICAgICJ0cmFjZSB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFjayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnR5cGU7CisgICAgdm9pZCAqcHRyOworICAgIHRyYWNlX3QgdHJhY2U7CisgICAgaW50IGZvdW5kOworCisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICB0eXBlID0gUHlfVFlQRShvYmopOworICAgIGlmIChQeVR5cGVfSVNfR0ModHlwZSkpCisgICAgICAgIHB0ciA9ICh2b2lkICopKChjaGFyICopb2JqIC0gc2l6ZW9mKFB5R0NfSGVhZCkpOworICAgIGVsc2UKKyAgICAgICAgcHRyID0gKHZvaWQgKilvYmo7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIGZvdW5kID0gX1B5X0hBU0hUQUJMRV9HRVQodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsIHRyYWNlKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHJldHVybiB0cmFjZWJhY2tfdG9fcHlvYmplY3QodHJhY2UudHJhY2ViYWNrLCBOVUxMKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX3N0YXJ0X2RvYywKKyAgICAic3RhcnQobmZyYW1lOiBpbnQ9MSlcbiIKKyAgICAiXG4iCisgICAgIlN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4gU2V0IGFsc28gdGhlIG1heGltdW0gbnVtYmVyIFxuIgorICAgICJvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZSB0byBuZnJhbWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX3N0YXJ0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG5mcmFtZSA9IDE7CisgICAgaW50IG5mcmFtZV9pbnQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnN0YXJ0IiwgJm5mcmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKG5mcmFtZSA8IDEgfHwgbmZyYW1lID4gTUFYX05GUkFNRSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ0aGUgbnVtYmVyIG9mIGZyYW1lcyBtdXN0IGJlIGluIHJhbmdlIFsxOyAlaV0iLAorICAgICAgICAgICAgICAgICAgICAgKGludClNQVhfTkZSQU1FKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5mcmFtZV9pbnQgPSBQeV9TQUZFX0RPV05DQVNUKG5mcmFtZSwgUHlfc3NpemVfdCwgaW50KTsKKworICAgIGlmICh0cmFjZW1hbGxvY19zdGFydChuZnJhbWVfaW50KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19zdG9wX2RvYywKKyAgICAic3RvcCgpXG4iCisgICAgIlxuIgorICAgICJTdG9wIHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgY2xlYXIgdHJhY2VzXG4iCisgICAgIm9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2Nfc3RvcChQeU9iamVjdCAqc2VsZikKK3sKKyAgICB0cmFjZW1hbGxvY19zdG9wKCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0X2RvYywKKyAgICAiZ2V0X3RyYWNlYmFja19saW1pdCgpIC0+IGludFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2tcbiIKKyAgICAib2YgYSB0cmFjZS5cbiIKKyAgICAiXG4iCisgICAgIkJ5IGRlZmF1bHQsIGEgdHJhY2Ugb2YgYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jayBvbmx5IHN0b3Jlc1xuIgorICAgICJ0aGUgbW9zdCByZWNlbnQgZnJhbWU6IHRoZSBsaW1pdCBpcyAxLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0KFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodHJhY2VtYWxsb2NfY29uZmlnLm1heF9uZnJhbWUpOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeV9kb2MsCisgICAgImdldF90cmFjZW1hbGxvY19tZW1vcnkoKSAtPiBpbnRcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgbWVtb3J5IHVzYWdlIGluIGJ5dGVzIG9mIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGVcbiIKKyAgICAidXNlZCBpbnRlcm5hbGx5IHRvIHRyYWNlIG1lbW9yeSBhbGxvY2F0aW9ucy4iKTsKKworc3RhdGljIFB5T2JqZWN0KgordHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeU9iamVjdCAqc2l6ZV9vYmo7CisKKyAgICBzaXplID0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworICAgIHNpemUgKz0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIHNpemUgKz0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgc2l6ZV9vYmogPSBQeUxvbmdfRnJvbVNpemVfdChzaXplKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTiIsIHNpemVfb2JqKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZWRfbWVtb3J5X2RvYywKKyAgICAiZ2V0X3RyYWNlZF9tZW1vcnkoKSAtPiAoaW50LCBpbnQpXG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIGN1cnJlbnQgc2l6ZSBhbmQgcGVhayBzaXplIG9mIG1lbW9yeSBibG9ja3MgdHJhY2VkXG4iCisgICAgImJ5IHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgYXMgYSB0dXBsZTogKGN1cnJlbnQ6IGludCwgcGVhazogaW50KS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgordHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnkoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBzaXplLCBwZWFrX3NpemU7CisgICAgUHlPYmplY3QgKnNpemVfb2JqLCAqcGVha19zaXplX29iajsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpaSIsIDAsIDApOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBzaXplID0gdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeTsKKyAgICBwZWFrX3NpemUgPSB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgc2l6ZV9vYmogPSBQeUxvbmdfRnJvbVNpemVfdChzaXplKTsKKyAgICBwZWFrX3NpemVfb2JqID0gUHlMb25nX0Zyb21TaXplX3QocGVha19zaXplKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTk4iLCBzaXplX29iaiwgcGVha19zaXplX29iaik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0geworICAgIHsiaXNfdHJhY2luZyIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19pc190cmFjaW5nLAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfaXNfdHJhY2luZ19kb2N9LAorICAgIHsiY2xlYXJfdHJhY2VzIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcywKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2NsZWFyX3RyYWNlc19kb2N9LAorICAgIHsiX2dldF90cmFjZXMiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlcywKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZXNfZG9jfSwKKyAgICB7Il9nZXRfb2JqZWN0X3RyYWNlYmFjayIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFjaywKKyAgICAgTUVUSF9PLCB0cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFja19kb2N9LAorICAgIHsic3RhcnQiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2Nfc3RhcnQsCisgICAgICBNRVRIX1ZBUkFSR1MsIHRyYWNlbWFsbG9jX3N0YXJ0X2RvY30sCisgICAgeyJzdG9wIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX3N0b3AsCisgICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2Nfc3RvcF9kb2N9LAorICAgIHsiZ2V0X3RyYWNlYmFja19saW1pdCIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0LAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdF9kb2N9LAorICAgIHsiZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSIsIChQeUNGdW5jdGlvbil0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5LAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeV9kb2N9LAorICAgIHsiZ2V0X3RyYWNlZF9tZW1vcnkiLCAoUHlDRnVuY3Rpb24pdHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnksCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeV9kb2N9LAorCisgICAgLyogc2VudGluZWwgKi8KKyAgICB7TlVMTCwgTlVMTH0KK307CisKK1B5RG9jX1NUUlZBUihtb2R1bGVfZG9jLAorIkRlYnVnIG1vZHVsZSB0byB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgbW9kdWxlX2RlZiA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90cmFjZW1hbGxvYyIsCisgICAgbW9kdWxlX2RvYywKKyAgICAwLCAvKiBub24tbmVnYXRpdmUgc2l6ZSB0byBiZSBhYmxlIHRvIHVubG9hZCB0aGUgbW9kdWxlICovCisgICAgbW9kdWxlX21ldGhvZHMsCisgICAgTlVMTCwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3RyYWNlbWFsbG9jKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm07CisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmbW9kdWxlX2RlZik7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAodHJhY2VtYWxsb2NfaW5pdCgpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbTsKK30KKworc3RhdGljIGludAorcGFyc2Vfc3lzX3hvcHRpb25zKFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBQeU9iamVjdCAqdmFsdWVsb25nOworICAgIGxvbmcgbmZyYW1lOworCisgICAgaWYgKHZhbHVlID09IFB5X1RydWUpCisgICAgICAgIHJldHVybiAxOworCisgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpOworICAgIGlmIChQeVVuaWNvZGVfR2V0TGVuZ3RoKHZhbHVlKSA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB2YWx1ZWxvbmcgPSBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QodmFsdWUsIDEwKTsKKyAgICBpZiAodmFsdWVsb25nID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG5mcmFtZSA9IFB5TG9uZ19Bc0xvbmcodmFsdWVsb25nKTsKKyAgICBQeV9ERUNSRUYodmFsdWVsb25nKTsKKyAgICBpZiAobmZyYW1lID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuZnJhbWUgPCAxIHx8IG5mcmFtZSA+IE1BWF9ORlJBTUUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKG5mcmFtZSwgbG9uZywgaW50KTsKK30KKworaW50CitfUHlUcmFjZU1hbGxvY19Jbml0KHZvaWQpCit7CisgICAgY2hhciAqcDsKKyAgICBpbnQgbmZyYW1lOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05UUkFDRU1BTExPQyIpKSAmJiAqcCAhPSAnXDAnKSB7CisgICAgICAgIGNoYXIgKmVuZHB0ciA9IHA7CisgICAgICAgIGxvbmcgdmFsdWU7CisKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICB2YWx1ZSA9IHN0cnRvbChwLCAmZW5kcHRyLCAxMCk7CisgICAgICAgIGlmICgqZW5kcHRyICE9ICdcMCcKKyAgICAgICAgICAgIHx8IHZhbHVlIDwgMQorICAgICAgICAgICAgfHwgdmFsdWUgPiBNQVhfTkZSQU1FCisgICAgICAgICAgICB8fCBlcnJubyA9PSBFUkFOR0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlBZVEhPTlRSQUNFTUFMTE9DOiBpbnZhbGlkIG51bWJlciBvZiBmcmFtZXMiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIG5mcmFtZSA9IChpbnQpdmFsdWU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqeG9wdGlvbnMsICprZXksICp2YWx1ZTsKKworICAgICAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CisgICAgICAgIGlmICh4b3B0aW9ucyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGtleSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ0cmFjZW1hbGxvYyIpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcih4b3B0aW9ucywga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIC8qIC1YIHRyYWNlbWFsbG9jIGlzIG5vdCB1c2VkICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIG5mcmFtZSA9IHBhcnNlX3N5c194b3B0aW9ucyh2YWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGlmIChuZnJhbWUgPCAwKSB7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCItWCB0cmFjZW1hbGxvYz1ORlJBTUU6IGludmFsaWQgbnVtYmVyIG9mIGZyYW1lcyIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX3N0YXJ0KG5mcmFtZSk7Cit9CisKK3ZvaWQKK19QeVRyYWNlTWFsbG9jX0Zpbmkodm9pZCkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisgICAgdHJhY2VtYWxsb2NfZGVpbml0KCk7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3dlYWtyZWYuYyBiL01vZHVsZXMvX3dlYWtyZWYuYwppbmRleCA4ODk5NWI4Li5kYTU4OTMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL193ZWFrcmVmLmMKKysrIGIvTW9kdWxlcy9fd2Vha3JlZi5jCkBAIC00LDI1ICs0LDU5IEBACiAjZGVmaW5lIEdFVF9XRUFLUkVGU19MSVNUUFRSKG8pIFwKICAgICAgICAgKChQeVdlYWtSZWZlcmVuY2UgKiopIFB5T2JqZWN0X0dFVF9XRUFLUkVGU19MSVNUUFRSKG8pKQogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgX3dlYWtyZWYKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWZmZWM3M2I4NTg0NjU5NmRdKi8KIAotUHlEb2NfU1RSVkFSKHdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfXywKLSJnZXR3ZWFrcmVmY291bnQob2JqZWN0KSAtLSByZXR1cm4gdGhlIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXNcbiIKLSJ0byAnb2JqZWN0Jy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3dlYWtyZWYuZ2V0d2Vha3JlZmNvdW50IC0+IFB5X3NzaXplX3QKKworICBvYmplY3Q6IG9iamVjdAorICAvCisKK1JldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byAnb2JqZWN0Jy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX18sCisiZ2V0d2Vha3JlZmNvdW50KCRtb2R1bGUsIG9iamVjdCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byBcJ29iamVjdFwnLiIpOworCisjZGVmaW5lIF9XRUFLUkVGX0dFVFdFQUtSRUZDT1VOVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0d2Vha3JlZmNvdW50IiwgKFB5Q0Z1bmN0aW9uKV93ZWFrcmVmX2dldHdlYWtyZWZjb3VudCwgTUVUSF9PLCBfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK193ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmplY3QpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmplY3QpCitfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCkKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CiAKLSAgICBpZiAoUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKFB5X1RZUEUob2JqZWN0KSkpIHsKLSAgICAgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdCA9IEdFVF9XRUFLUkVGU19MSVNUUFRSKG9iamVjdCk7CisgICAgX3JldHVybl92YWx1ZSA9IF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKG1vZHVsZSwgb2JqZWN0KTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoX3JldHVybl92YWx1ZSk7CiAKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9QeVdlYWtyZWZfR2V0V2Vha3JlZkNvdW50KCpsaXN0KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25nKDApOworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyBQeV9zc2l6ZV90Citfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqZWN0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAzMmVlZGJmZDdkNjllMTAgaW5wdXQ9Y2VkYjY5NzExYjZhMjUwN10qLworeworICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3Q7CisKKyAgICBpZiAoIVB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhQeV9UWVBFKG9iamVjdCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxpc3QgPSBHRVRfV0VBS1JFRlNfTElTVFBUUihvYmplY3QpOworICAgIHJldHVybiBfUHlXZWFrcmVmX0dldFdlYWtyZWZDb3VudCgqbGlzdCk7CiB9CiAKIApAQCAtNzgsOCArMTEyLDcgQEAKIAogc3RhdGljIFB5TWV0aG9kRGVmCiB3ZWFrcmVmX2Z1bmN0aW9uc1tdID0gIHsKLSAgICB7ImdldHdlYWtyZWZjb3VudCIsIHdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50LCAgICAgICAgTUVUSF9PLAotICAgICB3ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX199LAorICAgIF9XRUFLUkVGX0dFVFdFQUtSRUZDT1VOVF9NRVRIT0RERUYKICAgICB7ImdldHdlYWtyZWZzIiwgICAgIHdlYWtyZWZfZ2V0d2Vha3JlZnMsICAgICAgICAgICAgTUVUSF9PLAogICAgICB3ZWFrcmVmX2dldHdlYWtyZWZzX19kb2NfX30sCiAgICAgeyJwcm94eSIsICAgICAgICAgICB3ZWFrcmVmX3Byb3h5LCAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywKQEAgLTEwNiw3ICsxMzksNyBAQAogICAgIFB5T2JqZWN0ICptOwogCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmd2Vha3JlZm1vZHVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgaWYgKG0gIT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoJl9QeVdlYWtyZWZfUmVmVHlwZSk7CiAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAicmVmIiwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3dpbmFwaS5jIGIvTW9kdWxlcy9fd2luYXBpLmMKaW5kZXggYzUzZDU1YS4uYjc1NTE3OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fd2luYXBpLmMKKysrIGIvTW9kdWxlcy9fd2luYXBpLmMKQEAgLTYyLDYgKzYyLDggQEAKIAogI2RlZmluZSBUX0hBTkRMRSBUX1BPSU5URVIKIAorI2RlZmluZSBEV09SRF9NQVggNDI5NDk2NzI5NVUKKwogLyogR3JhYiBDYW5jZWxJb0V4IGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KIHN0YXRpYyBpbnQgaGFzX0NhbmNlbElvRXggPSAtMTsKIHN0YXRpYyBCT09MIChDQUxMQkFDSyAqUHlfQ2FuY2VsSW9FeCkoSEFORExFLCBMUE9WRVJMQVBQRUQpOwpAQCAtMTA1LDE3ICsxMDcsMzcgQEAKIHsKICAgICBEV09SRCBieXRlczsKICAgICBpbnQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisKICAgICBpZiAoc2VsZi0+cGVuZGluZykgewotICAgICAgICAvKiBtYWtlIGl0IGEgcHJvZ3JhbW1pbmcgZXJyb3IgdG8gZGVhbGxvY2F0ZSB3aGlsZSBvcGVyYXRpb24KLSAgICAgICAgICAgaXMgcGVuZGluZywgZXZlbiBpZiB3ZSBjYW4gc2FmZWx5IGNhbmNlbCBpdCAqLwogICAgICAgICBpZiAoY2hlY2tfQ2FuY2VsSW9FeCgpICYmCi0gICAgICAgICAgICAgICAgUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKSkKLSAgICAgICAgICAgIEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJmJ5dGVzLCBUUlVFKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9ucyBzdGlsbCBpbiBmbGlnaHQgd2hpbGUgZGVzdHJveWluZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiT3ZlcmxhcHBlZCBvYmplY3QsIHRoZSBwcm9jZXNzIG1heSBjcmFzaCIpOwotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgICAgICAgICBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpICYmCisgICAgICAgICAgICBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsICZieXRlcywgVFJVRSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBvcGVyYXRpb24gaXMgbm8gbG9uZ2VyIHBlbmRpbmcgLS0gbm90aGluZyB0byBkby4gKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChfUHlfRmluYWxpemluZyA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGUgb3BlcmF0aW9uIGlzIHN0aWxsIHBlbmRpbmcgLS0gZ2l2ZSBhIHdhcm5pbmcuICBUaGlzCisgICAgICAgICAgICAgICB3aWxsIHByb2JhYmx5IG9ubHkgaGFwcGVuIG9uIFdpbmRvd3MgWFAuICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9ucyBzdGlsbCBpbiBmbGlnaHQgd2hpbGUgZGVzdHJveWluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk92ZXJsYXBwZWQgb2JqZWN0LCB0aGUgcHJvY2VzcyBtYXkgY3Jhc2giKTsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBvcGVyYXRpb24gaXMgc3RpbGwgcGVuZGluZywgYnV0IHRoZSBwcm9jZXNzIGlzCisgICAgICAgICAgICAgICBwcm9iYWJseSBhYm91dCB0byBleGl0LCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSB0b28gbXVjaAorICAgICAgICAgICAgICAgYWJvdXQgbWVtb3J5IGxlYWtzLiAgTGVha2luZyBzZWxmIHByZXZlbnRzIGEgcG90ZW50aWFsCisgICAgICAgICAgICAgICBjcmFzaC4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgZGFlbW9uIHRocmVhZCBpcyBjbGVhbmVkCisgICAgICAgICAgICAgICB1cCBhdCBleGl0IC0tIHNlZSAjMTk1NjUuICBXZSBvbmx5IGV4cGVjdCB0byBnZXQgaGVyZQorICAgICAgICAgICAgICAgb24gV2luZG93cyBYUC4gKi8KKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICAgICAgICAgIFNldExhc3RFcnJvcihlcnIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQorCiAgICAgQ2xvc2VIYW5kbGUoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQpOwogICAgIFNldExhc3RFcnJvcihlcnIpOwogICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIub2JqKQpAQCAtMTE0Miw3ICsxMTY0LDcgQEAKICAgICBIQU5ETEUgaGFuZGxlOwogICAgIFB5X2J1ZmZlciBfYnVmLCAqYnVmOwogICAgIFB5T2JqZWN0ICpidWZvYmo7Ci0gICAgRFdPUkQgd3JpdHRlbjsKKyAgICBEV09SRCBsZW4sIHdyaXR0ZW47CiAgICAgQk9PTCByZXQ7CiAgICAgaW50IHVzZV9vdmVybGFwcGVkID0gMDsKICAgICBEV09SRCBlcnI7CkBAIC0xMTcwLDcgKzExOTIsOCBAQAogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXQgPSBXcml0ZUZpbGUoaGFuZGxlLCBidWYtPmJ1ZiwgYnVmLT5sZW4sICZ3cml0dGVuLAorICAgIGxlbiA9IChEV09SRClQeV9NSU4oYnVmLT5sZW4sIERXT1JEX01BWCk7CisgICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgYnVmLT5idWYsIGxlbiwgJndyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXBwZWQgPyAmb3ZlcmxhcHBlZC0+b3ZlcmxhcHBlZCA6IE5VTEwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKQEAgLTEzMjAsNiArMTM0Myw3IEBACiAgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsIFNUSUxMX0FDVElWRSk7CiAgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsIFNXX0hJREUpOwogICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCBXQUlUX09CSkVDVF8wKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgV0FJVF9BQkFORE9ORURfMCk7CiAgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsIFdBSVRfVElNRU9VVCk7CiAKICAgICBXSU5BUElfQ09OU1RBTlQoImkiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXJyYXltb2R1bGUuYyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwppbmRleCAzYWJhOWFkLi40YTFjMTU4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCkBAIC01MTMsNyArNTEzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRhcnJheWl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGkpCiB7Ci0gICAgcmVnaXN0ZXIgYXJyYXlvYmplY3QgKmFwOworICAgIGFycmF5b2JqZWN0ICphcDsKICAgICBhc3NlcnQoYXJyYXlfQ2hlY2sob3ApKTsKICAgICBhcCA9IChhcnJheW9iamVjdCAqKW9wOwogICAgIGFzc2VydChpPj0wICYmIGk8UHlfU0laRShhcCkpOwpAQCAtOTY4LDggKzk2OCwxMyBAQAogICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOwotICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CisgICAgICAgIFB5T2JqZWN0ICpzZWxmaTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgY291bnQrKzsKQEAgLTk5MCw4ICs5OTUsMTMgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOworICAgICAgICBQeU9iamVjdCAqc2VsZmk7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkgewogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylpKTsKQEAgLTEwMTYsNiArMTAyNiw4IEBACiAKICAgICBmb3IgKGkgPSAwLCBjbXAgPSAwIDsgY21wID09IDAgJiYgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICB9CkBAIC0xMDI4LDggKzEwNDAsMTMgQEAKICAgICBpbnQgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7Ci0gICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKKyAgICAgICAgUHlPYmplY3QgKnNlbGZpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkgewogICAgICAgICAgICAgaWYgKGFycmF5X2Fzc19zbGljZShzZWxmLCBpLCBpKzEsCkBAIC0xMDY4LDcgKzEwODUsOSBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInBvcCBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHYgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZixpKTsKKyAgICB2ID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChhcnJheV9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLCAoUHlPYmplY3QgKilOVUxMKSAhPSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMTE0LDEzICsxMTMzLDI1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfYnVmZmVyX2luZm8oYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgUHlPYmplY3QqIHJldHZhbCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEwsICp2OworCiAgICAgcmV0dmFsID0gUHlUdXBsZV9OZXcoMik7CiAgICAgaWYgKCFyZXR2YWwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDAsIFB5TG9uZ19Gcm9tVm9pZFB0cihzZWxmLT5vYl9pdGVtKSk7Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDEsIFB5TG9uZ19Gcm9tTG9uZygobG9uZykoUHlfU0laRShzZWxmKSkpKTsKKyAgICB2ID0gUHlMb25nX0Zyb21Wb2lkUHRyKHNlbGYtPm9iX2l0ZW0pOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMCwgdik7CisKKyAgICB2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKShQeV9TSVpFKHNlbGYpKSk7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAxLCB2KTsKIAogICAgIHJldHVybiByZXR2YWw7CiB9CkBAIC0xMjA2LDggKzEyMzcsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X3JldmVyc2UoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpdGVtc2l6ZSA9IHNlbGYtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKLSAgICByZWdpc3RlciBjaGFyICpwLCAqcTsKKyAgICBQeV9zc2l6ZV90IGl0ZW1zaXplID0gc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOworICAgIGNoYXIgKnAsICpxOwogICAgIC8qIGxpdHRsZSBidWZmZXIgdG8gaG9sZCBpdGVtcyB3aGlsZSBzd2FwcGluZyAqLwogICAgIGNoYXIgdG1wWzI1Nl07ICAgICAgLyogOCBpcyBwcm9iYWJseSBlbm91Z2ggLS0gYnV0IHdoeSBza2ltcCAqLwogICAgIGFzc2VydCgoc2l6ZV90KWl0ZW1zaXplIDw9IHNpemVvZih0bXApKTsKQEAgLTEzODYsMTMgKzE0MTcsMTYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqdiA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgdik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgdikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlEb2NfU1RSVkFSKHRvbGlzdF9kb2MsCkBAIC0xNjY0LDExICsxNjk4LDggQEAKIHN0YXRpYyBlbnVtIG1hY2hpbmVfZm9ybWF0X2NvZGUKIHR5cGVjb2RlX3RvX21mb3JtYXRfY29kZShjaGFyIHR5cGVjb2RlKQogewotI2lmZGVmIFdPUkRTX0JJR0VORElBTgotICAgIGNvbnN0IGludCBpc19iaWdfZW5kaWFuID0gMTsKLSNlbHNlCi0gICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSAwOwotI2VuZGlmCisgICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSBQWV9CSUdfRU5ESUFOOworCiAgICAgc2l6ZV90IGludHNpemU7CiAgICAgaW50IGlzX3NpZ25lZDsKIApAQCAtMjQ4Nyw2ICsyNTE4LDIwIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJDfE86YXJyYXkiLCAmYywgJmluaXRpYWwpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChpbml0aWFsICYmIGMgIT0gJ3UnKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soaW5pdGlhbCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJjYW5ub3QgdXNlIGEgc3RyIHRvIGluaXRpYWxpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJhbiBhcnJheSB3aXRoIHR5cGVjb2RlICclYyciLCBjKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFycmF5X0NoZWNrKGluaXRpYWwpICYmCisgICAgICAgICAgICAgICAgICgoYXJyYXlvYmplY3QqKWluaXRpYWwpLT5vYl9kZXNjci0+dHlwZWNvZGUgPT0gJ3UnKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiY2Fubm90IHVzZSBhIHVuaWNvZGUgYXJyYXkgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsaXplIGFuIGFycmF5IHdpdGggdHlwZWNvZGUgJyVjJyIsIGMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIShpbml0aWFsID09IE5VTEwgfHwgUHlMaXN0X0NoZWNrKGluaXRpYWwpCiAgICAgICAgICAgfHwgUHlCeXRlQXJyYXlfQ2hlY2soaW5pdGlhbCkKICAgICAgICAgICB8fCBQeUJ5dGVzX0NoZWNrKGluaXRpYWwpCkBAIC0yNjEzLDkgKzI2NTgsMTkgQEAKICJUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIG9iamVjdCB0eXBlIHdoaWNoIGNhbiBlZmZpY2llbnRseSByZXByZXNlbnRcblwKIGFuIGFycmF5IG9mIGJhc2ljIHZhbHVlczogY2hhcmFjdGVycywgaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50XG5cCiBudW1iZXJzLiAgQXJyYXlzIGFyZSBzZXF1ZW5jZSB0eXBlcyBhbmQgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGxpc3RzLFxuXAotZXhjZXB0IHRoYXQgdGhlIHR5cGUgb2Ygb2JqZWN0cyBzdG9yZWQgaW4gdGhlbSBpcyBjb25zdHJhaW5lZC4gIFRoZVxuXAotdHlwZSBpcyBzcGVjaWZpZWQgYXQgb2JqZWN0IGNyZWF0aW9uIHRpbWUgYnkgdXNpbmcgYSB0eXBlIGNvZGUsIHdoaWNoXG5cCi1pcyBhIHNpbmdsZSBjaGFyYWN0ZXIuICBUaGUgZm9sbG93aW5nIHR5cGUgY29kZXMgYXJlIGRlZmluZWQ6XG5cCitleGNlcHQgdGhhdCB0aGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbiB0aGVtIGlzIGNvbnN0cmFpbmVkLlxuIik7CisKK1B5RG9jX1NUUlZBUihhcnJheXR5cGVfZG9jLAorImFycmF5KHR5cGVjb2RlIFssIGluaXRpYWxpemVyXSkgLT4gYXJyYXlcblwKK1xuXAorUmV0dXJuIGEgbmV3IGFycmF5IHdob3NlIGl0ZW1zIGFyZSByZXN0cmljdGVkIGJ5IHR5cGVjb2RlLCBhbmRcblwKK2luaXRpYWxpemVkIGZyb20gdGhlIG9wdGlvbmFsIGluaXRpYWxpemVyIHZhbHVlLCB3aGljaCBtdXN0IGJlIGEgbGlzdCxcblwKK3N0cmluZyBvciBpdGVyYWJsZSBvdmVyIGVsZW1lbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXAorXG5cCitBcnJheXMgcmVwcmVzZW50IGJhc2ljIHZhbHVlcyBhbmQgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGxpc3RzLCBleGNlcHRcblwKK3RoZSB0eXBlIG9mIG9iamVjdHMgc3RvcmVkIGluIHRoZW0gaXMgY29uc3RyYWluZWQuIFRoZSB0eXBlIGlzIHNwZWNpZmllZFxuXAorYXQgb2JqZWN0IGNyZWF0aW9uIHRpbWUgYnkgdXNpbmcgYSB0eXBlIGNvZGUsIHdoaWNoIGlzIGEgc2luZ2xlIGNoYXJhY3Rlci5cblwKK1RoZSBmb2xsb3dpbmcgdHlwZSBjb2RlcyBhcmUgZGVmaW5lZDpcblwKIFxuXAogICAgIFR5cGUgY29kZSAgIEMgVHlwZSAgICAgICAgICAgICBNaW5pbXVtIHNpemUgaW4gYnl0ZXMgXG5cCiAgICAgJ2InICAgICAgICAgc2lnbmVkIGludGVnZXIgICAgIDEgXG5cCkBAIC0yNjM5LDIxICsyNjk0LDYgQEAKIEMgY29tcGlsZXIgdXNlZCB0byBidWlsZCBQeXRob24gc3VwcG9ydHMgJ2xvbmcgbG9uZycsIG9yLCBvbiBXaW5kb3dzLCBcblwKICdfX2ludDY0Jy5cblwKIFxuXAotVGhlIGNvbnN0cnVjdG9yIGlzOlxuXAotXG5cCi1hcnJheSh0eXBlY29kZSBbLCBpbml0aWFsaXplcl0pIC0tIGNyZWF0ZSBhIG5ldyBhcnJheVxuXAotIik7Ci0KLVB5RG9jX1NUUlZBUihhcnJheXR5cGVfZG9jLAotImFycmF5KHR5cGVjb2RlIFssIGluaXRpYWxpemVyXSkgLT4gYXJyYXlcblwKLVxuXAotUmV0dXJuIGEgbmV3IGFycmF5IHdob3NlIGl0ZW1zIGFyZSByZXN0cmljdGVkIGJ5IHR5cGVjb2RlLCBhbmRcblwKLWluaXRpYWxpemVkIGZyb20gdGhlIG9wdGlvbmFsIGluaXRpYWxpemVyIHZhbHVlLCB3aGljaCBtdXN0IGJlIGEgbGlzdCxcblwKLXN0cmluZyBvciBpdGVyYWJsZSBvdmVyIGVsZW1lbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXAotXG5cCi1BcnJheXMgcmVwcmVzZW50IGJhc2ljIHZhbHVlcyBhbmQgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGxpc3RzLCBleGNlcHRcblwKLXRoZSB0eXBlIG9mIG9iamVjdHMgc3RvcmVkIGluIHRoZW0gaXMgY29uc3RyYWluZWQuXG5cCi1cblwKIE1ldGhvZHM6XG5cCiBcblwKIGFwcGVuZCgpIC0tIGFwcGVuZCBhIG5ldyBpdGVtIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5XG5cCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jIGIvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYwppbmRleCBmNjhkODA0Li45ODg3MDE0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKQEAgLTEwLDggKzEwLDYgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAoZm9yIGF0ZXhpdF9jbGVhbnVwKSAqLwogc3RhdGljIFB5T2JqZWN0ICphdGV4aXRfY2xlYXIoUHlPYmplY3QqLCBQeU9iamVjdCopOwotLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAoZm9yIGF0ZXhpdF9jYWxsZnVuY3MpICovCi1zdGF0aWMgdm9pZCBhdGV4aXRfY2xlYW51cChQeU9iamVjdCopOwogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUgb2JqZWN0ICovCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGF0ZXhpdG1vZHVsZTsKIApAQCAtMzMsNiArMzEsMzUgQEAKICNkZWZpbmUgR0VUX0FURVhJVF9TVEFURShtb2QpICgoYXRleGl0bW9kdWxlX3N0YXRlKilQeU1vZHVsZV9HZXRTdGF0ZShtb2QpKQogCiAKK3N0YXRpYyB2b2lkCithdGV4aXRfZGVsZXRlX2NiKGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGUsIGludCBpKQoreworICAgIGF0ZXhpdF9jYWxsYmFjayAqY2I7CisKKyAgICBjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOworICAgIG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldID0gTlVMTDsKKyAgICBQeV9ERUNSRUYoY2ItPmZ1bmMpOworICAgIFB5X0RFQ1JFRihjYi0+YXJncyk7CisgICAgUHlfWERFQ1JFRihjYi0+a3dhcmdzKTsKKyAgICBQeU1lbV9GcmVlKGNiKTsKK30KKworLyogQ2xlYXIgYWxsIGNhbGxiYWNrcyB3aXRob3V0IGNhbGxpbmcgdGhlbSAqLworc3RhdGljIHZvaWQKK2F0ZXhpdF9jbGVhbnVwKGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGUpCit7CisgICAgYXRleGl0X2NhbGxiYWNrICpjYjsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbW9kc3RhdGUtPm5jYWxsYmFja3M7IGkrKykgeworICAgICAgICBjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOworICAgICAgICBpZiAoY2IgPT0gTlVMTCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF0ZXhpdF9kZWxldGVfY2IobW9kc3RhdGUsIGkpOworICAgIH0KKyAgICBtb2RzdGF0ZS0+bmNhbGxiYWNrcyA9IDA7Cit9CisKIC8qIEluc3RhbGxlZCBpbnRvIHB5dGhvbnJ1bi5jJ3MgYXRleGl0IG1lY2hhbmlzbSAqLwogCiBzdGF0aWMgdm9pZApAQCAtNzgsMzQgKzEwNSwxMiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgYXRleGl0X2NsZWFudXAobW9kdWxlKTsKKyAgICBhdGV4aXRfY2xlYW51cChtb2RzdGF0ZSk7CiAKICAgICBpZiAoZXhjX3R5cGUpCiAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjX3R5cGUsIGV4Y192YWx1ZSwgZXhjX3RiKTsKIH0KIAotc3RhdGljIHZvaWQKLWF0ZXhpdF9kZWxldGVfY2IoUHlPYmplY3QgKnNlbGYsIGludCBpKQotewotICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7Ci0gICAgYXRleGl0X2NhbGxiYWNrICpjYjsKLQotICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShzZWxmKTsKLSAgICBjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOwotICAgIG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldID0gTlVMTDsKLSAgICBQeV9ERUNSRUYoY2ItPmZ1bmMpOwotICAgIFB5X0RFQ1JFRihjYi0+YXJncyk7Ci0gICAgUHlfWERFQ1JFRihjYi0+a3dhcmdzKTsKLSAgICBQeU1lbV9GcmVlKGNiKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0ZXhpdF9jbGVhbnVwKFB5T2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpyID0gYXRleGl0X2NsZWFyKHNlbGYsIE5VTEwpOwotICAgIFB5X0RFQ1JFRihyKTsKLX0KLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBNb2R1bGUgbWV0aG9kcy4gKi8KIApAQCAtMTk0LDIxICsxOTksNTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdGV4aXRfY2xlYXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CisgICAgYXRleGl0X2NsZWFudXAoR0VUX0FURVhJVF9TVEFURShzZWxmKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihhdGV4aXRfbmNhbGxiYWNrc19fZG9jX18sCisiX25jYWxsYmFja3MoKSAtPiBpbnRcblwKK1xuXAorUmV0dXJuIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCBleGl0IGZ1bmN0aW9ucy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F0ZXhpdF9uY2FsbGJhY2tzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorewogICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7Ci0gICAgYXRleGl0X2NhbGxiYWNrICpjYjsKLSAgICBpbnQgaTsKIAogICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShzZWxmKTsKIAorICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobW9kc3RhdGUtPm5jYWxsYmFja3MpOworfQorCitzdGF0aWMgaW50CithdGV4aXRfbV90cmF2ZXJzZShQeU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgaW50IGk7CisgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKKworICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShzZWxmKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbW9kc3RhdGUtPm5jYWxsYmFja3M7IGkrKykgewotICAgICAgICBjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOworICAgICAgICBhdGV4aXRfY2FsbGJhY2sgKmNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CiAgICAgICAgIGlmIChjYiA9PSBOVUxMKQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihzZWxmLCBpKTsKKyAgICAgICAgUHlfVklTSVQoY2ItPmZ1bmMpOworICAgICAgICBQeV9WSVNJVChjYi0+YXJncyk7CisgICAgICAgIFB5X1ZJU0lUKGNiLT5rd2FyZ3MpOwogICAgIH0KLSAgICBtb2RzdGF0ZS0+bmNhbGxiYWNrcyA9IDA7Ci0gICAgUHlfUkVUVVJOX05PTkU7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2F0ZXhpdF9tX2NsZWFyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7CisgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOworICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHN0YXRlKTsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIxNiw2ICsyNTAsNyBAQAogewogICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7CiAgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKG0pOworICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHN0YXRlKTsKICAgICBQeU1lbV9GcmVlKG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzKTsKIH0KIApAQCAtMjQ2LDcgKzI4MSw3IEBACiAgICAgICAgIGlmIChlcSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKGVxKQotICAgICAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihzZWxmLCBpKTsKKyAgICAgICAgICAgIGF0ZXhpdF9kZWxldGVfY2IobW9kc3RhdGUsIGkpOwogICAgIH0KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTI2MCw2ICsyOTUsOCBAQAogICAgICAgICBhdGV4aXRfdW5yZWdpc3Rlcl9fZG9jX199LAogICAgIHsiX3J1bl9leGl0ZnVuY3MiLCAoUHlDRnVuY3Rpb24pIGF0ZXhpdF9ydW5fZXhpdGZ1bmNzLCBNRVRIX05PQVJHUywKICAgICAgICAgYXRleGl0X3J1bl9leGl0ZnVuY3NfX2RvY19ffSwKKyAgICB7Il9uY2FsbGJhY2tzIiwgKFB5Q0Z1bmN0aW9uKSBhdGV4aXRfbmNhbGxiYWNrcywgTUVUSF9OT0FSR1MsCisgICAgICAgIGF0ZXhpdF9uY2FsbGJhY2tzX19kb2NfX30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjc1LDE1ICszMTIsMTUgQEAKIAogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGF0ZXhpdG1vZHVsZSA9IHsKLQlQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0JImF0ZXhpdCIsCi0JYXRleGl0X19kb2NfXywKLQlzaXplb2YoYXRleGl0bW9kdWxlX3N0YXRlKSwKLQlhdGV4aXRfbWV0aG9kcywKLQlOVUxMLAotCU5VTEwsCi0JTlVMTCwKLQkoZnJlZWZ1bmMpYXRleGl0X2ZyZWUKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgImF0ZXhpdCIsCisgICAgYXRleGl0X19kb2NfXywKKyAgICBzaXplb2YoYXRleGl0bW9kdWxlX3N0YXRlKSwKKyAgICBhdGV4aXRfbWV0aG9kcywKKyAgICBOVUxMLAorICAgIGF0ZXhpdF9tX3RyYXZlcnNlLAorICAgIGF0ZXhpdF9tX2NsZWFyLAorICAgIChmcmVlZnVuYylhdGV4aXRfZnJlZQogfTsKIAogUHlNT0RJTklUX0ZVTkMKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXVkaW9vcC5jIGIvTW9kdWxlcy9hdWRpb29wLmMKaW5kZXggM2YwNDc2Mi4uMmQyODdmMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hdWRpb29wLmMKKysrIGIvTW9kdWxlcy9hdWRpb29wLmMKQEAgLTUsMTggKzUsNiBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKLSNpZiBTSVpFT0ZfSU5UID09IDQKLXR5cGVkZWYgaW50IFB5X0ludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgUHlfVUludDMyOwotI2Vsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSA0Ci10eXBlZGVmIGxvbmcgUHlfSW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgUHlfVUludDMyOwotI2Vsc2UKLSNlcnJvciAiTm8gNC1ieXRlIGludGVncmFsIHR5cGUiCi0jZW5kaWYKLSNlbmRpZgotCiB0eXBlZGVmIHNob3J0IFB5SW50MTY7CiAKICNpZiBkZWZpbmVkKF9fQ0hBUl9VTlNJR05FRF9fKQpAQCAtMzgsNyArMjYsNyBAQAogICAgICAgICB2YWwgPSBtYXh2YWw7CiAgICAgZWxzZSBpZiAodmFsIDwgbWludmFsICsgMSkKICAgICAgICAgdmFsID0gbWludmFsOwotICAgIHJldHVybiB2YWw7CisgICAgcmV0dXJuIChpbnQpdmFsOwogfQogCiAKQEAgLTE2MSw5ICsxNDksNiBAQAogICAgIFB5SW50MTYgICAgICAgICBzZWc7CiAgICAgdW5zaWduZWQgY2hhciAgIHV2YWw7CiAKLSAgICAvKiBUaGUgb3JpZ2luYWwgc294IGNvZGUgZG9lcyB0aGlzIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBub3QgaGVyZSAqLwotICAgIHBjbV92YWwgPSBwY21fdmFsID4+IDI7Ci0KICAgICAvKiB1LWxhdyBpbnZlcnRzIGFsbCBiaXRzICovCiAgICAgLyogR2V0IHRoZSBzaWduIGFuZCB0aGUgbWFnbml0dWRlIG9mIHRoZSB2YWx1ZS4gKi8KICAgICBpZiAocGNtX3ZhbCA8IDApIHsKQEAgLTI1OCw5ICsyNDMsNiBAQAogICAgIHNob3J0ICAgICAgICAgICBzZWc7CiAgICAgdW5zaWduZWQgY2hhciAgIGF2YWw7CiAKLSAgICAvKiBUaGUgb3JpZ2luYWwgc294IGNvZGUgZG9lcyB0aGlzIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBub3QgaGVyZSAqLwotICAgIHBjbV92YWwgPSBwY21fdmFsID4+IDM7Ci0KICAgICAvKiBBLWxhdyB1c2luZyBldmVuIGJpdCBpbnZlcnNpb24gKi8KICAgICBpZiAocGNtX3ZhbCA+PSAwKSB7CiAgICAgICAgIG1hc2sgPSAweEQ1OyAgICAgICAgICAgIC8qIHNpZ24gKDd0aCkgYml0ID0gMSAqLwpAQCAtMzA1LDE5ICsyODcsOTEgQEAKICAgICAxNTI4OSwgMTY4MTgsIDE4NTAwLCAyMDM1MCwgMjIzODUsIDI0NjIzLCAyNzA4NiwgMjk3OTQsIDMyNzY3CiB9OwogCi0jZGVmaW5lIENIQVJQKGNwLCBpKSAoKHNpZ25lZCBjaGFyICopKGNwK2kpKQotI2RlZmluZSBTSE9SVFAoY3AsIGkpICgoc2hvcnQgKikoY3AraSkpCi0jZGVmaW5lIExPTkdQKGNwLCBpKSAoKFB5X0ludDMyICopKGNwK2kpKQorI2RlZmluZSBHRVRJTlRYKFQsIGNwLCBpKSAgKCooVCAqKSgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpKQorI2RlZmluZSBTRVRJTlRYKFQsIGNwLCBpLCB2YWwpICBkbyB7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICooVCAqKSgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpID0gKFQpKHZhbCk7IFwKKyAgICB9IHdoaWxlICgwKQogCiAKKyNkZWZpbmUgR0VUSU5UOChjcCwgaSkgICAgICAgICAgR0VUSU5UWChzaWduZWQgY2hhciwgKGNwKSwgKGkpKQorI2RlZmluZSBHRVRJTlQxNihjcCwgaSkgICAgICAgICBHRVRJTlRYKHNob3J0LCAoY3ApLCAoaSkpCisjZGVmaW5lIEdFVElOVDMyKGNwLCBpKSAgICAgICAgIEdFVElOVFgoUFlfSU5UMzJfVCwgKGNwKSwgKGkpKQorCisjaWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIEdFVElOVDI0KGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gKyAgICAgICAgICAgICAgXAorICAgICAgICAoKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPDwgOCkgKyAgICAgICBcCisgICAgICAgICgoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gPDwgMTYpICkKKyNlbHNlCisjZGVmaW5lIEdFVElOVDI0KGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gKyAgICAgICAgICAgICAgXAorICAgICAgICAoKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPDwgOCkgKyAgICAgICBcCisgICAgICAgICgoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gPDwgMTYpICkKKyNlbmRpZgorCisKKyNkZWZpbmUgU0VUSU5UOChjcCwgaSwgdmFsKSAgICAgU0VUSU5UWChzaWduZWQgY2hhciwgKGNwKSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgU0VUSU5UMTYoY3AsIGksIHZhbCkgICAgU0VUSU5UWChzaG9ydCwgKGNwKSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgU0VUSU5UMzIoY3AsIGksIHZhbCkgICAgU0VUSU5UWChQWV9JTlQzMl9ULCAoY3ApLCAoaSksICh2YWwpKQorCisjaWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIFNFVElOVDI0KGNwLCBpLCB2YWwpICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSA9IChpbnQpKHZhbCk7ICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPSAoaW50KSh2YWwpID4+IDg7ICAgICBcCisgICAgICAgICgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSA9IChpbnQpKHZhbCkgPj4gMTY7ICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTRVRJTlQyNChjcCwgaSwgdmFsKSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gPSAoaW50KSh2YWwpOyAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdID0gKGludCkodmFsKSA+PiA4OyAgICAgXAorICAgICAgICAoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gPSAoaW50KSh2YWwpID4+IDE2OyAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKworI2RlZmluZSBHRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChzaXplID09IDEpID8gKGludClHRVRJTlQ4KChjcCksIChpKSkgOiAgICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMikgPyAoaW50KUdFVElOVDE2KChjcCksIChpKSkgOiAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAzKSA/IChpbnQpR0VUSU5UMjQoKGNwKSwgKGkpKSA6ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClHRVRJTlQzMigoY3ApLCAoaSkpKQorCisjZGVmaW5lIFNFVFJBV1NBTVBMRShzaXplLCBjcCwgaSwgdmFsKSAgZG8geyAgICBcCisgICAgICAgIGlmIChzaXplID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQ4KChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQxNigoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQyNCgoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQzMigoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQorCisKKyNkZWZpbmUgR0VUU0FNUExFMzIoc2l6ZSwgY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAxKSA/IChpbnQpR0VUSU5UOCgoY3ApLCAoaSkpIDw8IDI0IDogICBcCisgICAgICAgIChzaXplID09IDIpID8gKGludClHRVRJTlQxNigoY3ApLCAoaSkpIDw8IDE2IDogIFwKKyAgICAgICAgKHNpemUgPT0gMykgPyAoaW50KUdFVElOVDI0KChjcCksIChpKSkgPDwgOCA6ICAgXAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpR0VUSU5UMzIoKGNwKSwgKGkpKSkKKworI2RlZmluZSBTRVRTQU1QTEUzMihzaXplLCBjcCwgaSwgdmFsKSAgZG8geyAgICAgXAorICAgICAgICBpZiAoc2l6ZSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UOCgoY3ApLCAoaSksICh2YWwpID4+IDI0KTsgICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDIpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMTYoKGNwKSwgKGkpLCAodmFsKSA+PiAxNik7ICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDMpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMjQoKGNwKSwgKGkpLCAodmFsKSA+PiA4KTsgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMzIoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKKwogCiBzdGF0aWMgUHlPYmplY3QgKkF1ZGlvb3BFcnJvcjsKIAogc3RhdGljIGludAogYXVkaW9vcF9jaGVja19zaXplKGludCBzaXplKQogewotICAgIGlmIChzaXplICE9IDEgJiYgc2l6ZSAhPSAyICYmIHNpemUgIT0gNCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU2l6ZSBzaG91bGQgYmUgMSwgMiBvciA0Iik7CisgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTaXplIHNob3VsZCBiZSAxLCAyLCAzIG9yIDQiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGVsc2UKQEAgLTMzNiw0MyArMzkwLDYwIEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2dldHNhbXBsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworLypbY2xpbmljIGlucHV0XQorb3V0cHV0IHByZXNldCBmaWxlCittb2R1bGUgYXVkaW9vcAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NTYxOWY5MzVmMjY5MTk5YV0qLwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpbjpnZXRzYW1wbGUiLCAmY3AsICZsZW4sICZzaXplLCAmaSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5nZXRzYW1wbGUKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgaW5kZXg6IFB5X3NzaXplX3QKKyAgICAvCisKK1JldHVybiB0aGUgdmFsdWUgb2Ygc2FtcGxlIGluZGV4IGZyb20gdGhlIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9nZXRzYW1wbGVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5X3NzaXplX3QgaW5kZXgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjQ0ODI0OTdlNmY2ZTc4ZiBpbnB1dD04OGVkYmUyODcxMzkzNTQ5XSovCit7CisgICAgaW50IHZhbDsKKworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCBpIDwgMCB8fCBpID49IGxlbi9zaXplICkgeworICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZnJhZ21lbnQtPmxlbi93aWR0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiSW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKjIpOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSo0KTsKKyAgICB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGluZGV4KndpZHRoKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHZhbCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubWF4CisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBtYXhpbXVtIG9mIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhbGwgc2FtcGxlcyBpbiBhIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9tYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODUwNDdlZTEwMDFmMjMwNSBpbnB1dD0zMmJlYTVlYTBhYzhjMjIzXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICB1bnNpZ25lZCBpbnQgYWJzdmFsLCBtYXggPSAwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1heCIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoIGk9MDsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOwogICAgICAgICBpZiAodmFsIDwgMCkgYWJzdmFsID0gKC12YWwpOwogICAgICAgICBlbHNlIGFic3ZhbCA9IHZhbDsKICAgICAgICAgaWYgKGFic3ZhbCA+IG1heCkgbWF4ID0gYWJzdmFsOwpAQCAtMzgwLDgyICs0NTEsOTYgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobWF4KTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5taW5tYXgKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIGFsbCBzYW1wbGVzIGluIHRoZSBzb3VuZCBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbWlubWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbWlubWF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWFlOGY1NTEzYzY0ZmQ1NjkgaW5wdXQ9ODk4NDhlOWI5MjdhMDY5Nl0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgLyogLTEgdHJpY2sgYmVsb3cgaXMgbmVlZGVkIG9uIFdpbmRvd3MgdG8gc3VwcG9ydCAtMHg4MDAwMDAwMCB3aXRob3V0CiAgICAgYSB3YXJuaW5nICovCiAgICAgaW50IG1pbiA9IDB4N2ZmZmZmZmYsIG1heCA9IC0weDdGRkZGRkZGLTE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptaW5tYXgiLCAmY3AsICZsZW4sICZzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZSkgewotICAgICAgICBpZiAoc2l6ZSA9PSAxKSB2YWwgPSAoaW50KSAqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmIChzaXplID09IDIpIHZhbCA9IChpbnQpICpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmIChzaXplID09IDQpIHZhbCA9IChpbnQpICpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgPiBtYXgpIG1heCA9IHZhbDsKICAgICAgICAgaWYgKHZhbCA8IG1pbikgbWluID0gdmFsOwogICAgIH0KICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIG1pbiwgbWF4KTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYXZnKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgZG91YmxlIGF2ZyA9IDAuMDsKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYXZnCiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YXZnIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIGF2ZXJhZ2Ugb3ZlciBhbGwgc2FtcGxlcyBpbiB0aGUgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2F2Z19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03ZmNjZDY0NWM5NWY0ODYwIGlucHV0PTExMTQ0OTNjNzYxMTMzNGRdKi8KK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IGF2ZzsKKyAgICBkb3VibGUgc3VtID0gMC4wOworCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgYXZnICs9IHZhbDsKLSAgICB9Ci0gICAgaWYgKCBsZW4gPT0gMCApCi0gICAgICAgIHZhbCA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpCisgICAgICAgIHN1bSArPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgIGlmIChmcmFnbWVudC0+bGVuID09IDApCisgICAgICAgIGF2ZyA9IDA7CiAgICAgZWxzZQotICAgICAgICB2YWwgPSAoaW50KWZsb29yKGF2ZyAvIChkb3VibGUpKGxlbi9zaXplKSk7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWwpOworICAgICAgICBhdmcgPSAoaW50KWZsb29yKHN1bSAvIChkb3VibGUpKGZyYWdtZW50LT5sZW4vd2lkdGgpKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGF2Zyk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3Aucm1zCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSByb290LW1lYW4tc3F1YXJlIG9mIHRoZSBmcmFnbWVudCwgaS5lLiBzcXJ0KHN1bShTX2leMikvbikuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3JtcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3Jtc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03YjM5ODcwMmM4MWI3MDlkIGlucHV0PTRjYzU3YzZjOTQyMTlkNzhdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIHVuc2lnbmVkIGludCByZXM7CiAgICAgZG91YmxlIHN1bV9zcXVhcmVzID0gMC4wOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnJtcyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoIGk9MDsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBzdW1fc3F1YXJlcyArPSAoZG91YmxlKXZhbCooZG91YmxlKXZhbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBkb3VibGUgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgc3VtX3NxdWFyZXMgKz0gdmFsKnZhbDsKICAgICB9Ci0gICAgaWYgKCBsZW4gPT0gMCApCisgICAgaWYgKGZyYWdtZW50LT5sZW4gPT0gMCkKICAgICAgICAgcmVzID0gMDsKICAgICBlbHNlCi0gICAgICAgIHJlcyA9ICh1bnNpZ25lZCBpbnQpc3FydChzdW1fc3F1YXJlcyAvIChkb3VibGUpKGxlbi9zaXplKSk7CisgICAgICAgIHJlcyA9ICh1bnNpZ25lZCBpbnQpc3FydChzdW1fc3F1YXJlcyAvIChkb3VibGUpKGZyYWdtZW50LT5sZW4vd2lkdGgpKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVzKTsKIH0KIAotc3RhdGljIGRvdWJsZSBfc3VtMihzaG9ydCAqYSwgc2hvcnQgKmIsIFB5X3NzaXplX3QgbGVuKQorc3RhdGljIGRvdWJsZSBfc3VtMihjb25zdCBzaG9ydCAqYSwgY29uc3Qgc2hvcnQgKmIsIFB5X3NzaXplX3QgbGVuKQogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBkb3VibGUgc3VtID0gMC4wOwpAQCAtNDk4LDMyICs1ODMsMzggQEAKICoqIHN1bV9yaSBpcyBjYWxjdWxhdGVkIG9uY2UsIHN1bV9haWpfMiBpcyB1cGRhdGVkIGVhY2ggc3RlcCBhbmQgc3VtX2Fpal9yaQogKiogaXMgY29tcGxldGVseSByZWNhbGN1bGF0ZWQgZWFjaCBzdGVwLgogKi8KKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuZmluZGZpdAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHJlZmVyZW5jZTogUHlfYnVmZmVyCisgICAgLworCitUcnkgdG8gbWF0Y2ggcmVmZXJlbmNlIGFzIHdlbGwgYXMgcG9zc2libGUgdG8gYSBwb3J0aW9uIG9mIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9maW5kZml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfZmluZGZpdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X2J1ZmZlciAqcmVmZXJlbmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUwNWZkMDRkNDI0NGRiMzEgaW5wdXQ9NjJjMzA1NjA1ZTE4M2M5YV0qLwogewotICAgIHNob3J0ICpjcDEsICpjcDI7CisgICAgY29uc3Qgc2hvcnQgKmNwMSwgKmNwMjsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAgICAgUHlfc3NpemVfdCBqLCBiZXN0X2o7CiAgICAgZG91YmxlIGFqX20xLCBhal9sbTE7CiAgICAgZG91YmxlIHN1bV9yaV8yLCBzdW1fYWlqXzIsIHN1bV9haWpfcmksIHJlc3VsdCwgYmVzdF9yZXN1bHQsIGZhY3RvcjsKIAotICAgIC8qIFBhc3NpbmcgYSBzaG9ydCoqIGZvciBhbiAncycgYXJndW1lbnQgaXMgY29ycmVjdCBvbmx5Ci0gICAgICAgaWYgdGhlIHN0cmluZyBjb250ZW50cyBpcyBhbGlnbmVkIGZvciBpbnRlcnByZXRhdGlvbgotICAgICAgIGFzIHNob3J0W10uIER1ZSB0byB0aGUgZGVmaW5pdGlvbiBvZiBQeUJ5dGVzT2JqZWN0LAotICAgICAgIHRoaXMgaXMgY3VycmVudGx5IChQeXRob24gMi42KSB0aGUgY2FzZS4gKi8KLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3MjOmZpbmRmaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKikmY3AxLCAmbGVuMSwgKGNoYXIqKikmY3AyLCAmbGVuMikgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIGxlbjEgJiAxIHx8IGxlbjIgJiAxICkgeworICAgIGlmIChmcmFnbWVudC0+bGVuICYgMSB8fCByZWZlcmVuY2UtPmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBsZW4xID4+PSAxOwotICAgIGxlbjIgPj49IDE7CisgICAgY3AxID0gKGNvbnN0IHNob3J0ICopZnJhZ21lbnQtPmJ1ZjsKKyAgICBsZW4xID0gZnJhZ21lbnQtPmxlbiA+PiAxOworICAgIGNwMiA9IChjb25zdCBzaG9ydCAqKXJlZmVyZW5jZS0+YnVmOworICAgIGxlbjIgPSByZWZlcmVuY2UtPmxlbiA+PiAxOwogCi0gICAgaWYgKCBsZW4xIDwgbGVuMiApIHsKKyAgICBpZiAobGVuMSA8IGxlbjIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIkZpcnN0IHNhbXBsZSBzaG91bGQgYmUgbG9uZ2VyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgc3VtX3JpXzIgPSBfc3VtMihjcDIsIGNwMiwgbGVuMik7CiAgICAgc3VtX2Fpal8yID0gX3N1bTIoY3AxLCBjcDEsIGxlbjIpOwpAQCAtNTYwLDI3ICs2NTEsMzcgQEAKICoqIGZpbmRmYWN0b3IgZmluZHMgYSBmYWN0b3IgZiBzbyB0aGF0IHRoZSBlbmVyZ3kgaW4gQS1mQiBpcyBtaW5pbWFsLgogKiogU2VlIHRoZSBjb21tZW50IGZvciBmaW5kZml0IGZvciBkZXRhaWxzLgogKi8KKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuZmluZGZhY3RvcgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHJlZmVyZW5jZTogUHlfYnVmZmVyCisgICAgLworCitSZXR1cm4gYSBmYWN0b3IgRiBzdWNoIHRoYXQgcm1zKGFkZChmcmFnbWVudCwgbXVsKHJlZmVyZW5jZSwgLUYpKSkgaXMgbWluaW1hbC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZmluZGZhY3RvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2ZpbmRmYWN0b3JfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9idWZmZXIgKnJlZmVyZW5jZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kZGYzNWExZTU3NTc1Y2U0IGlucHV0PTgxNjY4MDMwMWQwMTJiMjFdKi8KIHsKLSAgICBzaG9ydCAqY3AxLCAqY3AyOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKKyAgICBjb25zdCBzaG9ydCAqY3AxLCAqY3AyOworICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGRvdWJsZSBzdW1fcmlfMiwgc3VtX2Fpal9yaSwgcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNzIzpmaW5kZmFjdG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsIChjaGFyKiopJmNwMiwgJmxlbjIpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCBsZW4xICYgMSB8fCBsZW4yICYgMSApIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiAmIDEgfHwgcmVmZXJlbmNlLT5sZW4gJiAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTdHJpbmdzIHNob3VsZCBiZSBldmVuLXNpemVkIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKCBsZW4xICE9IGxlbjIgKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gIT0gcmVmZXJlbmNlLT5sZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlNhbXBsZXMgc2hvdWxkIGJlIHNhbWUgc2l6ZSIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGxlbjIgPj49IDE7Ci0gICAgc3VtX3JpXzIgPSBfc3VtMihjcDIsIGNwMiwgbGVuMik7Ci0gICAgc3VtX2Fpal9yaSA9IF9zdW0yKGNwMSwgY3AyLCBsZW4yKTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKilmcmFnbWVudC0+YnVmOworICAgIGNwMiA9IChjb25zdCBzaG9ydCAqKXJlZmVyZW5jZS0+YnVmOworICAgIGxlbiA9IGZyYWdtZW50LT5sZW4gPj4gMTsKKyAgICBzdW1fcmlfMiA9IF9zdW0yKGNwMiwgY3AyLCBsZW4pOworICAgIHN1bV9haWpfcmkgPSBfc3VtMihjcDEsIGNwMiwgbGVuKTsKIAogICAgIHJlc3VsdCA9IHN1bV9haWpfcmkgLyBzdW1fcmlfMjsKIApAQCAtNTkxLDM3ICs2OTIsNDYgQEAKICoqIGZpbmRtYXggcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG4tc2l6ZWQgc2VnbWVudCBvZiB0aGUgaW5wdXQgc2FtcGxlCiAqKiB0aGF0IGNvbnRhaW5zIHRoZSBtb3N0IGVuZXJneS4KICovCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmZpbmRtYXgKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICBsZW5ndGg6IFB5X3NzaXplX3QKKyAgICAvCisKK1NlYXJjaCBmcmFnbWVudCBmb3IgYSBzbGljZSBvZiBzcGVjaWZpZWQgbnVtYmVyIG9mIHNhbXBsZXMgd2l0aCBtYXhpbXVtIGVuZXJneS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZmluZG1heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2ZpbmRtYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9zc2l6ZV90IGxlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMWQwYzJhMWU1NjU1MTM0IGlucHV0PTJmMzA0ODAxZWQ0MjM4M2NdKi8KIHsKLSAgICBzaG9ydCAqY3AxOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKKyAgICBjb25zdCBzaG9ydCAqY3AxOworICAgIFB5X3NzaXplX3QgbGVuMTsKICAgICBQeV9zc2l6ZV90IGosIGJlc3RfajsKICAgICBkb3VibGUgYWpfbTEsIGFqX2xtMTsKICAgICBkb3VibGUgcmVzdWx0LCBiZXN0X3Jlc3VsdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjbjpmaW5kbWF4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gJiAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTdHJpbmdzIHNob3VsZCBiZSBldmVuLXNpemVkIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbGVuMSA+Pj0gMTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKilmcmFnbWVudC0+YnVmOworICAgIGxlbjEgPSBmcmFnbWVudC0+bGVuID4+IDE7CiAKLSAgICBpZiAoIGxlbjIgPCAwIHx8IGxlbjEgPCBsZW4yICkgeworICAgIGlmIChsZW5ndGggPCAwIHx8IGxlbjEgPCBsZW5ndGgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIklucHV0IHNhbXBsZSBzaG91bGQgYmUgbG9uZ2VyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXN1bHQgPSBfc3VtMihjcDEsIGNwMSwgbGVuMik7CisgICAgcmVzdWx0ID0gX3N1bTIoY3AxLCBjcDEsIGxlbmd0aCk7CiAKICAgICBiZXN0X3Jlc3VsdCA9IHJlc3VsdDsKICAgICBiZXN0X2ogPSAwOwogCi0gICAgZm9yICggaj0xOyBqPD1sZW4xLWxlbjI7IGorKykgeworICAgIGZvciAoIGo9MTsgajw9bGVuMS1sZW5ndGg7IGorKykgewogICAgICAgICBhal9tMSA9IChkb3VibGUpY3AxW2otMV07Ci0gICAgICAgIGFqX2xtMSA9IChkb3VibGUpY3AxW2orbGVuMi0xXTsKKyAgICAgICAgYWpfbG0xID0gKGRvdWJsZSljcDFbaitsZW5ndGgtMV07CiAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYWpfbG0xKmFqX2xtMSAtIGFqX20xKmFqX20xOwogCkBAIC02MzUsMzEgKzc0NSwzNCBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoYmVzdF9qKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5hdmdwcAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgYXZlcmFnZSBwZWFrLXBlYWsgdmFsdWUgb3ZlciBhbGwgc2FtcGxlcyBpbiB0aGUgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2F2Z3BwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfYXZncHBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDZjODM4MGZkNmUzNDIwNyBpbnB1dD0wYjNjY2VlYWU0MjBhN2Q5XSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCi0gICAgICAgIHByZXZleHRyZW1lID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHByZXZ2YWwsIHByZXZleHRyZW1ldmFsaWQgPSAwLCBwcmV2ZXh0cmVtZSA9IDA7CiAgICAgZG91YmxlIHN1bSA9IDAuMDsKICAgICB1bnNpZ25lZCBpbnQgYXZnOwogICAgIGludCBkaWZmLCBwcmV2ZGlmZiwgbmV4dHJlbWUgPSAwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmF2Z3BwIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGxlbiA8PSBzaXplKQorICAgIGlmIChmcmFnbWVudC0+bGVuIDw9IHdpZHRoKQogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICggc2l6ZSA9PSAxICkgICAgICBwcmV2dmFsID0gKGludCkqQ0hBUlAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSBwcmV2dmFsID0gKGludCkqU0hPUlRQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgcHJldnZhbCA9IChpbnQpKkxPTkdQKGNwLCAwKTsKKyAgICBwcmV2dmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCAwKTsKICAgICBwcmV2ZGlmZiA9IDE3OyAvKiBBbnl0aGluZyAhPSAwLCAxICovCi0gICAgZm9yICggaT1zaXplOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gd2lkdGg7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOwogICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIHsKICAgICAgICAgICAgIGRpZmYgPSB2YWwgPCBwcmV2dmFsOwogICAgICAgICAgICAgaWYgKHByZXZkaWZmID09ICFkaWZmKSB7CkBAIC02NjcsNyArNzgwLDEyIEBACiAgICAgICAgICAgICAgICAgKiogZXh0cmVtZSB2YWx1ZSBhbmQgcmVtZW1iZXIuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAocHJldmV4dHJlbWV2YWxpZCkgewotICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmFicygoZG91YmxlKXByZXZ2YWwgLSAoZG91YmxlKXByZXZleHRyZW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZ2YWwgPCBwcmV2ZXh0cmVtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSAoZG91YmxlKSgodW5zaWduZWQgaW50KXByZXZleHRyZW1lIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXByZXZ2YWwpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gKz0gKGRvdWJsZSkoKHVuc2lnbmVkIGludClwcmV2dmFsIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXByZXZleHRyZW1lKTsKICAgICAgICAgICAgICAgICAgICAgbmV4dHJlbWUrKzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHJldmV4dHJlbWV2YWxpZCA9IDE7CkBAIC02ODQsMzAgKzgwMiwzMyBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhhdmcpOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLm1heHBwCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBtYXhpbXVtIHBlYWstcGVhayB2YWx1ZSBpbiB0aGUgc291bmQgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21heHBwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbWF4cHBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzMwMGMwYmQ3ZTg1MzVjMCBpbnB1dD02NzFhMTNlMTUxOGY4MGExXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCi0gICAgICAgIHByZXZleHRyZW1lID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHByZXZ2YWwsIHByZXZleHRyZW1ldmFsaWQgPSAwLCBwcmV2ZXh0cmVtZSA9IDA7CiAgICAgdW5zaWduZWQgaW50IG1heCA9IDAsIGV4dHJlbWVkaWZmOwogICAgIGludCBkaWZmLCBwcmV2ZGlmZjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptYXhwcCIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChsZW4gPD0gc2l6ZSkKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA8PSB3aWR0aCkKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKLSAgICBpZiAoIHNpemUgPT0gMSApICAgICAgcHJldnZhbCA9IChpbnQpKkNIQVJQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgcHJldnZhbCA9IChpbnQpKlNIT1JUUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHByZXZ2YWwgPSAoaW50KSpMT05HUChjcCwgMCk7CisgICAgcHJldnZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgMCk7CiAgICAgcHJldmRpZmYgPSAxNzsgLyogQW55dGhpbmcgIT0gMCwgMSAqLwotICAgIGZvciAoIGk9c2l6ZTsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IHdpZHRoOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKICAgICAgICAgaWYgKHZhbCAhPSBwcmV2dmFsKSB7CiAgICAgICAgICAgICBkaWZmID0gdmFsIDwgcHJldnZhbDsKICAgICAgICAgICAgIGlmIChwcmV2ZGlmZiA9PSAhZGlmZikgewpAQCAtNzM0LDIwOSArODU1LDIxMiBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtYXgpOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmNyb3NzCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBudW1iZXIgb2YgemVybyBjcm9zc2luZ3MgaW4gdGhlIGZyYWdtZW50IHBhc3NlZCBhcyBhbiBhcmd1bWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfY3Jvc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9jcm9zc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05OWU2NTcyZDdkN2NkYmYxIGlucHV0PWIxYjNmMTViODNmNmI0MWFdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBwcmV2dmFsOwogICAgIFB5X3NzaXplX3QgbmNyb3NzOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmNyb3NzIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNyb3NzID0gLTE7CiAgICAgcHJldnZhbCA9IDE3OyAvKiBBbnl0aGluZyA8PiAwLDEgKi8KLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPj4gNzsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA+PiAxNTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDMxOwotICAgICAgICB2YWwgPSB2YWwgJiAxOwotICAgICAgICBpZiAoIHZhbCAhPSBwcmV2dmFsICkgbmNyb3NzKys7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSkgPCAwOworICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIG5jcm9zcysrOwogICAgICAgICBwcmV2dmFsID0gdmFsOwogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG5jcm9zcyk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubXVsCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIGZhY3RvcjogZG91YmxlCisgICAgLworCitSZXR1cm4gYSBmcmFnbWVudCB0aGF0IGhhcyBhbGwgc2FtcGxlcyBpbiB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgbXVsdGlwbGllZCBieSB0aGUgZmxvYXRpbmctcG9pbnQgdmFsdWUgZmFjdG9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tdWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9tdWxfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBmYWN0b3IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTY5N2ViYmQ1ODUyZDM4ZiBpbnB1dD1jNzI2NjY3YmFhMTU3ZDNjXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIGRvdWJsZSBmYWN0b3IsIGZ2YWwsIG1heHZhbCwgbWludmFsOworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGRvdWJsZSBtYXh2YWwsIG1pbnZhbDsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lkOm11bCIsICZjcCwgJmxlbiwgJnNpemUsICZmYWN0b3IgKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbc2l6ZV07Ci0gICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1tzaXplXTsKKyAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3dpZHRoXTsKKyAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3dpZHRoXTsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4pOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhY3RvcjsKLSAgICAgICAgdmFsID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCl2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIHZhbCAqPSBmYWN0b3I7CisgICAgICAgIHZhbCA9IGZsb29yKGZib3VuZCh2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBpLCAoaW50KXZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC50b21vbm8KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgbGZhY3RvcjogZG91YmxlCisgICAgcmZhY3RvcjogZG91YmxlCisgICAgLworCitDb252ZXJ0IGEgc3RlcmVvIGZyYWdtZW50IHRvIGEgbW9ubyBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfdG9tb25vKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfdG9tb25vX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDM2ZTc3MTA1MjE2NjFkZCBpbnB1dD1jNGVjOTQ5YjNmNGRkZGZhXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBjcDsKICAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7CiAgICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDEgPSAwLCB2YWwyID0gMDsKLSAgICBkb3VibGUgZmFjMSwgZmFjMiwgZnZhbCwgbWF4dmFsLCBtaW52YWw7CisgICAgZG91YmxlIG1heHZhbCwgbWludmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqaWRkOnRvbW9ubyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNwLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjcCA9IHBjcC5idWY7Ci0gICAgbGVuID0gcGNwLmxlbjsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7CisgICAgY3AgPSBmcmFnbWVudC0+YnVmOworICAgIGxlbiA9IGZyYWdtZW50LT5sZW47CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoKChsZW4gLyBzaXplKSAmIDEpICE9IDApIHsKKyAgICBpZiAoKChsZW4gLyB3aWR0aCkgJiAxKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJub3QgYSB3aG9sZSBudW1iZXIgb2YgZnJhbWVzIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbc2l6ZV07Ci0gICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1tzaXplXTsKKyAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3dpZHRoXTsKKyAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3dpZHRoXTsKIAogICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4vMik7Ci0gICAgaWYgKCBydiA9PSAwICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwY3ApOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSoyICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMSA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDEgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMSA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDIgPSAoaW50KSpDSEFSUChjcCwgaSsxKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDIgPSAoaW50KSpTSE9SVFAoY3AsIGkrMik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwyID0gKGludCkqTE9OR1AoY3AsIGkrNCk7Ci0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbDEqZmFjMSArIChkb3VibGUpdmFsMipmYWMyOwotICAgICAgICB2YWwxID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkvMikgPSAoc2lnbmVkIGNoYXIpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpLzIpID0gKHNob3J0KXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpLzIpPSAoUHlfSW50MzIpdmFsMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHdpZHRoKjIpIHsKKyAgICAgICAgZG91YmxlIHZhbDEgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGNwLCBpKTsKKyAgICAgICAgZG91YmxlIHZhbDIgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGNwLCBpICsgd2lkdGgpOworICAgICAgICBkb3VibGUgdmFsID0gdmFsMSpsZmFjdG9yICsgdmFsMipyZmFjdG9yOworICAgICAgICB2YWwgPSBmbG9vcihmYm91bmQodmFsLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBTRVRSQVdTQU1QTEUod2lkdGgsIG5jcCwgaS8yLCB2YWwpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwY3ApOwogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC50b3N0ZXJlbworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBsZmFjdG9yOiBkb3VibGUKKyAgICByZmFjdG9yOiBkb3VibGUKKyAgICAvCisKK0dlbmVyYXRlIGEgc3RlcmVvIGZyYWdtZW50IGZyb20gYSBtb25vIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF90b3N0ZXJlbyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3Rvc3RlcmVvX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmZmNTA2ODFjODdmNGMxYyBpbnB1dD0yN2I2Mzk1ZWJmZGZmMzdhXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwxLCB2YWwyLCB2YWwgPSAwOwotICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBmdmFsLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBzaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBkb3VibGUgbWF4dmFsLCBtaW52YWw7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpZGQ6dG9zdGVyZW8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3NpemVdOwotICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbc2l6ZV07CisgICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1t3aWR0aF07CisgICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1t3aWR0aF07CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgvMikgeworICAgIGlmIChmcmFnbWVudC0+bGVuID4gUFlfU1NJWkVfVF9NQVgvMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4qMik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0KLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhYzE7Ci0gICAgICAgIHZhbDEgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotCi0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbCpmYWMyOwotICAgICAgICB2YWwyID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSoyKSA9IChzaWduZWQgY2hhcil2YWwxOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkqMikgPSAoc2hvcnQpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkqMikgPSAoUHlfSW50MzIpdmFsMTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSoyKzEpID0gKHNpZ25lZCBjaGFyKXZhbDI7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSoyKzIpID0gKHNob3J0KXZhbDI7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKjIrNCkgPSAoUHlfSW50MzIpdmFsMjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBkb3VibGUgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgaW50IHZhbDEgPSAoaW50KWZsb29yKGZib3VuZCh2YWwqbGZhY3RvciwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgaW50IHZhbDIgPSAoaW50KWZsb29yKGZib3VuZCh2YWwqcmZhY3RvciwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHdpZHRoLCBuY3AsIGkqMiwgdmFsMSk7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBpKjIgKyB3aWR0aCwgdmFsMik7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5hZGQKKworICAgIGZyYWdtZW50MTogUHlfYnVmZmVyCisgICAgZnJhZ21lbnQyOiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gYSBmcmFnbWVudCB3aGljaCBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIHR3byBzYW1wbGVzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hZGQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hZGRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50MSwgUHlfYnVmZmVyICpmcmFnbWVudDIsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mOTIxOGJmOWVhNzVjM2YxIGlucHV0PTRhOGQ0YmFlNGMxNjA1YzddKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3AxLCAqY3AyLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsMSA9IDAsIHZhbDIgPSAwLCBtaW52YWwsIG1heHZhbCwgbmV3dmFsOworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBtaW52YWwsIG1heHZhbCwgbmV3dmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyNpOmFkZCIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwMSwgJmxlbjEsICZjcDIsICZsZW4yLCAmc2l6ZSApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuMSwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQxLT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCBsZW4xICE9IGxlbjIgKSB7CisgICAgaWYgKGZyYWdtZW50MS0+bGVuICE9IGZyYWdtZW50Mi0+bGVuKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJMZW5ndGhzIHNob3VsZCBiZSB0aGUgc2FtZSIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbWF4dmFsID0gbWF4dmFsc1tzaXplXTsKLSAgICBtaW52YWwgPSBtaW52YWxzW3NpemVdOworICAgIG1heHZhbCA9IG1heHZhbHNbd2lkdGhdOworICAgIG1pbnZhbCA9IG1pbnZhbHNbd2lkdGhdOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbjEpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudDEtPmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuMTsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMSA9IChpbnQpKkNIQVJQKGNwMSwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwxID0gKGludCkqU0hPUlRQKGNwMSwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwxID0gKGludCkqTE9OR1AoY3AxLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQxLT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbDEgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50MS0+YnVmLCBpKTsKKyAgICAgICAgaW50IHZhbDIgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50Mi0+YnVmLCBpKTsKIAotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMiA9IChpbnQpKkNIQVJQKGNwMiwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwyID0gKGludCkqU0hPUlRQKGNwMiwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwyID0gKGludCkqTE9OR1AoY3AyLCBpKTsKLQotICAgICAgICBpZiAoc2l6ZSA8IDQpIHsKKyAgICAgICAgaWYgKHdpZHRoIDwgNCkgewogICAgICAgICAgICAgbmV3dmFsID0gdmFsMSArIHZhbDI7CiAgICAgICAgICAgICAvKiB0cnVuY2F0ZSBpbiBjYXNlIG9mIG92ZXJmbG93ICovCiAgICAgICAgICAgICBpZiAobmV3dmFsID4gbWF4dmFsKQpAQCAtOTUwLDEyMyArMTA3NCwxNzUgQEAKICAgICAgICAgICAgIG5ld3ZhbCA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpbmV3dmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KW5ld3ZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKW5ld3ZhbDsKKyAgICAgICAgU0VUUkFXU0FNUExFKHdpZHRoLCBuY3AsIGksIG5ld3ZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5iaWFzCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIGJpYXM6IGludAorICAgIC8KKworUmV0dXJuIGEgZnJhZ21lbnQgdGhhdCBpcyB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgd2l0aCBhIGJpYXMgYWRkZWQgdG8gZWFjaCBzYW1wbGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2JpYXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9iaWFzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgYmlhcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04ZWM4MGIzZjVkNTEwYTUxIGlucHV0PTJiNWNjZTVjM2JiNDgzOGNdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIGJpYXM7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgdW5zaWduZWQgaW50IHZhbCA9IDAsIG1hc2s7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaTpiaWFzIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplICwgJmJpYXMpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgbWFzayA9IG1hc2tzW3NpemVdOworICAgIG1hc2sgPSBtYXNrc1t3aWR0aF07CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIGNoYXIpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIHNob3J0KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKHVuc2lnbmVkIGludCkoUHlfVUludDMyKSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaWYgKHdpZHRoID09IDEpCisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKHVuc2lnbmVkIGNoYXIsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICBlbHNlIGlmICh3aWR0aCA9PSAyKQorICAgICAgICAgICAgdmFsID0gR0VUSU5UWCh1bnNpZ25lZCBzaG9ydCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIGVsc2UgaWYgKHdpZHRoID09IDMpCisgICAgICAgICAgICB2YWwgPSAoKHVuc2lnbmVkIGludClHRVRJTlQyNChmcmFnbWVudC0+YnVmLCBpKSkgJiAweGZmZmZmZnU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHdpZHRoID09IDQpOworICAgICAgICAgICAgdmFsID0gR0VUSU5UWChQWV9VSU5UMzJfVCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIH0KIAogICAgICAgICB2YWwgKz0gKHVuc2lnbmVkIGludCliaWFzOwogICAgICAgICAvKiB3cmFwIGFyb3VuZCBpbiBjYXNlIG9mIG92ZXJmbG93ICovCiAgICAgICAgIHZhbCAmPSBtYXNrOwogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodW5zaWduZWQgY2hhcil2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHVuc2lnbmVkIHNob3J0KXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKShQeV9VSW50MzIpdmFsOworICAgICAgICBpZiAod2lkdGggPT0gMSkKKyAgICAgICAgICAgIFNFVElOVFgodW5zaWduZWQgY2hhciwgbmNwLCBpLCB2YWwpOworICAgICAgICBlbHNlIGlmICh3aWR0aCA9PSAyKQorICAgICAgICAgICAgU0VUSU5UWCh1bnNpZ25lZCBzaG9ydCwgbmNwLCBpLCB2YWwpOworICAgICAgICBlbHNlIGlmICh3aWR0aCA9PSAzKQorICAgICAgICAgICAgU0VUSU5UMjQobmNwLCBpLCAoaW50KXZhbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHdpZHRoID09IDQpOworICAgICAgICAgICAgU0VUSU5UWChQWV9VSU5UMzJfVCwgbmNwLCBpLCB2YWwpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5yZXZlcnNlCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV2ZXJzZSB0aGUgc2FtcGxlcyBpbiBhIGZyYWdtZW50IGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfcmV2ZXJzZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3JldmVyc2VfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmVjM2M5MTMzN2Y1OTI1ZSBpbnB1dD02NjhmODkwY2Y5ZjlkMjI1XSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaSwgajsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnJldmVyc2UiLAotICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDI0OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKChpbnQpKlNIT1JUUChjcCwgaSkpIDw8IDE2OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotCi0gICAgICAgIGogPSBsZW4gLSBpIC0gc2l6ZTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaikgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiAyNCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaikgPSAoc2hvcnQpKHZhbCA+PiAxNik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBqKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBmcmFnbWVudC0+bGVuIC0gaSAtIHdpZHRoLCB2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYnl0ZXN3YXAKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IGJpZy1lbmRpYW4gc2FtcGxlcyB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4ybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfYnl0ZXN3YXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmZlNGFhNTg0YjdhM2Y1YiBpbnB1dD1mYWU3NjExY2VmZmE1YzgyXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaSwgajsKLSAgICBpbnQgc2l6ZSwgc2l6ZTIsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWk6bGluMmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnNpemUyKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZTIpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuL3NpemUgPiBQWV9TU0laRV9UX01BWC9zaXplMikgeworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCBqOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykKKyAgICAgICAgICAgIG5jcFtpICsgd2lkdGggLSAxIC0gal0gPSAoKHVuc2lnbmVkIGNoYXIgKilmcmFnbWVudC0+YnVmKVtpICsgal07CisgICAgfQorICAgIHJldHVybiBydjsKK30KKworLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5saW4ybGluCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIG5ld3dpZHRoOiBpbnQKKyAgICAvCisKK0NvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSwgMy0gYW5kIDQtYnl0ZSBmb3JtYXRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4ybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgbmV3d2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2Y5NDY4YTc0NDcyYTkzZSBpbnB1dD01Y2UwOGM4YWEyZjI0ZDk2XSovCit7CisgICAgdW5zaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBQeU9iamVjdCAqcnY7CisKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKG5ld3dpZHRoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZnJhZ21lbnQtPmxlbi93aWR0aCA+IFBZX1NTSVpFX1RfTUFYL25ld3dpZHRoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAobGVuL3NpemUpKnNpemUyKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKGZyYWdtZW50LT5sZW4vd2lkdGgpKm5ld3dpZHRoKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MCwgaj0wOyBpIDwgbGVuOyBpICs9IHNpemUsIGogKz0gc2l6ZTIgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCAyNDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA8PCAxNjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBpZiAoIHNpemUyID09IDEgKSAgKkNIQVJQKG5jcCwgaikgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiAyNCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplMiA9PSAyICkgKlNIT1JUUChuY3AsIGopID0gKHNob3J0KSh2YWwgPj4gMTYpOwotICAgICAgICBlbHNlIGlmICggc2l6ZTIgPT0gNCApICpMT05HUChuY3AsIGopID0gKFB5X0ludDMyKXZhbDsKKyAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgsIGogKz0gbmV3d2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgU0VUU0FNUExFMzIobmV3d2lkdGgsIG5jcCwgaiwgdmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTA4MiwyOSArMTI1OCwzOSBAQAogICAgIHJldHVybiBhOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLnJhdGVjdgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBuY2hhbm5lbHM6IGludAorICAgIGlucmF0ZTogaW50CisgICAgb3V0cmF0ZTogaW50CisgICAgc3RhdGU6IG9iamVjdAorICAgIHdlaWdodEE6IGludCA9IDEKKyAgICB3ZWlnaHRCOiBpbnQgPSAwCisgICAgLworCitDb252ZXJ0IHRoZSBmcmFtZSByYXRlIG9mIHRoZSBpbnB1dCBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfcmF0ZWN2KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfcmF0ZWN2X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgbmNoYW5uZWxzLCBpbnQgaW5yYXRlLCBpbnQgb3V0cmF0ZSwgUHlPYmplY3QgKnN0YXRlLCBpbnQgd2VpZ2h0QSwgaW50IHdlaWdodEIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTU4NWRkZGM0YjVmZjIzNiBpbnB1dD1hZmYzYWNkYzk0NDc2MTkxXSovCiB7CiAgICAgY2hhciAqY3AsICpuY3A7CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaW50IHNpemUsIG5jaGFubmVscywgaW5yYXRlLCBvdXRyYXRlLCB3ZWlnaHRBLCB3ZWlnaHRCOwogICAgIGludCBjaGFuLCBkLCAqcHJldl9pLCAqY3VyX2ksIGN1cl9vOwotICAgIFB5T2JqZWN0ICpzdGF0ZSwgKnNhbXBzLCAqc3RyLCAqcnYgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzYW1wcywgKnN0ciwgKnJ2ID0gTlVMTDsKICAgICBpbnQgYnl0ZXNfcGVyX2ZyYW1lOwogCi0gICAgd2VpZ2h0QSA9IDE7Ci0gICAgd2VpZ2h0QiA9IDA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lpaWlPfGlpOnJhdGVjdiIsICZjcCwgJmxlbiwgJnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuY2hhbm5lbHMsICZpbnJhdGUsICZvdXRyYXRlLCAmc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ3ZWlnaHRBLCAmd2VpZ2h0QikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKG5jaGFubmVscyA8IDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIiMgb2YgY2hhbm5lbHMgc2hvdWxkIGJlID49IDEiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChzaXplID4gSU5UX01BWCAvIG5jaGFubmVscykgeworICAgIGlmICh3aWR0aCA+IElOVF9NQVggLyBuY2hhbm5lbHMpIHsKICAgICAgICAgLyogVGhpcyBvdmVyZmxvdyB0ZXN0IGlzIHJpZ29yb3VzbHkgY29ycmVjdCBiZWNhdXNlCiAgICAgICAgICAgIGJvdGggbXVsdGlwbGljYW5kcyBhcmUgPj0gMS4gIFVzZSB0aGUgYXJndW1lbnQgbmFtZXMKICAgICAgICAgICAgZnJvbSB0aGUgZG9jcyBmb3IgdGhlIGVycm9yIG1zZy4gKi8KQEAgLTExMTIsMTMgKzEyOTgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCAqIG5jaGFubmVscyB0b28gYmlnIGZvciBhIEMgaW50Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBieXRlc19wZXJfZnJhbWUgPSBzaXplICogbmNoYW5uZWxzOworICAgIGJ5dGVzX3Blcl9mcmFtZSA9IHdpZHRoICogbmNoYW5uZWxzOwogICAgIGlmICh3ZWlnaHRBIDwgMSB8fCB3ZWlnaHRCIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLAogICAgICAgICAgICAgIndlaWdodEEgc2hvdWxkIGJlID49IDEsIHdlaWdodEIgc2hvdWxkIGJlID49IDAiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChsZW4gJSBieXRlc19wZXJfZnJhbWUgIT0gMCkgeworICAgIGFzc2VydChmcmFnbWVudC0+bGVuID49IDApOworICAgIGlmIChmcmFnbWVudC0+bGVuICUgYnl0ZXNfcGVyX2ZyYW1lICE9IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIm5vdCBhIHdob2xlIG51bWJlciBvZiBmcmFtZXMiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTEzOCwxNiArMTMyNSwxNiBAQAogICAgIGlmICgoc2l6ZV90KW5jaGFubmVscyA+IFBZX1NJWkVfTUFYL3NpemVvZihpbnQpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHByZXZfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKLSAgICBjdXJfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKKyAgICBwcmV2X2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CisgICAgY3VyX2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CiAgICAgaWYgKHByZXZfaSA9PSBOVUxMIHx8IGN1cl9pID09IE5VTEwpIHsKICAgICAgICAgKHZvaWQpIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBsZW4gLz0gYnl0ZXNfcGVyX2ZyYW1lOyAvKiAjIG9mIGZyYW1lcyAqLworICAgIGxlbiA9IGZyYWdtZW50LT5sZW4gLyBieXRlc19wZXJfZnJhbWU7IC8qICMgb2YgZnJhbWVzICovCiAKICAgICBpZiAoc3RhdGUgPT0gUHlfTm9uZSkgewogICAgICAgICBkID0gLW91dHJhdGU7CkBAIC0xMTg0LDcgKzEzNzEsNyBAQAogICAgICAgICAgICBjYXNlIGNlaWxpbmcobGVuL2lucmF0ZSkgKiBvdXRyYXRlLiAqLwogCiAgICAgICAgIC8qIGNvbXB1dGUgY2VpbGluZyhsZW4vaW5yYXRlKSB3aXRob3V0IG92ZXJmbG93ICovCi0gICAgICAgIFB5X3NzaXplX3QgcSA9IGxlbiA+IDAgPyAxICsgKGxlbiAtIDEpIC8gaW5yYXRlIDogMDsKKyAgICAgICAgUHlfc3NpemVfdCBxID0gMSArIChsZW4gLSAxKSAvIGlucmF0ZTsKICAgICAgICAgaWYgKG91dHJhdGUgPiBQWV9TU0laRV9UX01BWCAvIHEgLyBieXRlc19wZXJfZnJhbWUpCiAgICAgICAgICAgICBzdHIgPSBOVUxMOwogICAgICAgICBlbHNlCkBAIC0xMTk3LDYgKzEzODQsNyBAQAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIG5jcCA9IFB5Qnl0ZXNfQXNTdHJpbmcoc3RyKTsKKyAgICBjcCA9IGZyYWdtZW50LT5idWY7CiAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIHdoaWxlIChkIDwgMCkgewpAQCAtMTIyNywxMyArMTQxNSw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGNoYW4gPSAwOyBjaGFuIDwgbmNoYW5uZWxzOyBjaGFuKyspIHsKICAgICAgICAgICAgICAgICBwcmV2X2lbY2hhbl0gPSBjdXJfaVtjaGFuXTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9ICgoaW50KSpDSEFSUChjcCwgMCkpIDw8IDI0OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoKGludCkqU0hPUlRQKGNwLCAwKSkgPDwgMTY7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSA0KQotICAgICAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9IChpbnQpKkxPTkdQKGNwLCAwKTsKLSAgICAgICAgICAgICAgICBjcCArPSBzaXplOworICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gR0VUU0FNUExFMzIod2lkdGgsIGNwLCAwKTsKKyAgICAgICAgICAgICAgICBjcCArPSB3aWR0aDsKICAgICAgICAgICAgICAgICAvKiBpbXBsZW1lbnRzIGEgc2ltcGxlIGRpZ2l0YWwgZmlsdGVyICovCiAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoaW50KSgKICAgICAgICAgICAgICAgICAgICAgKChkb3VibGUpd2VpZ2h0QSAqIChkb3VibGUpY3VyX2lbY2hhbl0gKwpAQCAtMTI0OCwxODQgKzE0MzEsMTkzIEBACiAgICAgICAgICAgICAgICAgY3VyX28gPSAoaW50KSgoKGRvdWJsZSlwcmV2X2lbY2hhbl0gKiAoZG91YmxlKWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpY3VyX2lbY2hhbl0gKiAoZG91YmxlKShvdXRyYXRlIC0gZCkpIC8KICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlvdXRyYXRlKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgICAgICAgICAgICAgICAqQ0hBUlAobmNwLCAwKSA9IChzaWduZWQgY2hhcikoY3VyX28gPj4gMjQpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgKlNIT1JUUChuY3AsIDApID0gKHNob3J0KShjdXJfbyA+PiAxNik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSA0KQotICAgICAgICAgICAgICAgICAgICAqTE9OR1AobmNwLCAwKSA9IChQeV9JbnQzMikoY3VyX28pOwotICAgICAgICAgICAgICAgIG5jcCArPSBzaXplOworICAgICAgICAgICAgICAgIFNFVFNBTVBMRTMyKHdpZHRoLCBuY3AsIDAsIGN1cl9vKTsKKyAgICAgICAgICAgICAgICBuY3AgKz0gd2lkdGg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkIC09IGlucmF0ZTsKICAgICAgICAgfQogICAgIH0KICAgZXhpdDoKLSAgICBpZiAocHJldl9pICE9IE5VTEwpCi0gICAgICAgIGZyZWUocHJldl9pKTsKLSAgICBpZiAoY3VyX2kgIT0gTlVMTCkKLSAgICAgICAgZnJlZShjdXJfaSk7CisgICAgUHlNZW1fRnJlZShwcmV2X2kpOworICAgIFB5TWVtX0ZyZWUoY3VyX2kpOwogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5saW4ydWxhdworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK0NvbnZlcnQgc2FtcGxlcyBpbiB0aGUgYXVkaW8gZnJhZ21lbnQgdG8gdS1MQVcgZW5jb2RpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJ1bGF3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbGluMnVsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjYyNjNjYzg3N2M1ZTFiYyBpbnB1dD0yNDUwZDFiODcwYjZiYWMyXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmxpbjJ1bGF3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDAgOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi9zaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbi93aWR0aCk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7Ci0KLSAgICAgICAgKm5jcCsrID0gc3RfMTRsaW5lYXIydWxhdyh2YWwpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMih3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgICpuY3ArKyA9IHN0XzE0bGluZWFyMnVsYXcodmFsID4+IDE4KTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLnVsYXcybGluCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworQ29udmVydCBzb3VuZCBmcmFnbWVudHMgaW4gdS1MQVcgZW5jb2RpbmcgdG8gbGluZWFybHkgZW5jb2RlZCBzb3VuZCBmcmFnbWVudHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3VsYXcybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfdWxhdzJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTg2NGNiMzRlM2ExZDg3NiBpbnB1dD00NWQ1M2RkY2U1YmU3ZDA2XSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgdW5zaWduZWQgY2hhciBjdmFsOwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnVsYXcybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZSh3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYL3NpemUpIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA+IFBZX1NTSVpFX1RfTUFYL3dpZHRoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qc2l6ZSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4qd2lkdGgpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGN2YWwgPSAqY3ArKzsKLSAgICAgICAgdmFsID0gc3RfdWxhdzJsaW5lYXIxNihjdmFsKTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiA4KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodmFsKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKSh2YWw8PDE2KTsKKyAgICBjcCA9IGZyYWdtZW50LT5idWY7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW4qd2lkdGg7IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IHN0X3VsYXcybGluZWFyMTYoKmNwKyspIDw8IDE2OworICAgICAgICBTRVRTQU1QTEUzMih3aWR0aCwgbmNwLCBpLCB2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubGluMmFsYXcKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IHNhbXBsZXMgaW4gdGhlIGF1ZGlvIGZyYWdtZW50IHRvIGEtTEFXIGVuY29kaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4yYWxhdyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2xpbjJhbGF3X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ1YmYxNGJkMGZlNmZkY2QgaW5wdXQ9ZmZiMWVmOGJiMzlkYTk0NV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpsaW4yYWxhdyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi9zaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbi93aWR0aCk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7Ci0KLSAgICAgICAgKm5jcCsrID0gc3RfbGluZWFyMmFsYXcodmFsKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUU0FNUExFMzIod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICAqbmNwKysgPSBzdF9saW5lYXIyYWxhdyh2YWwgPj4gMTkpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYWxhdzJsaW4KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IHNvdW5kIGZyYWdtZW50cyBpbiBhLUxBVyBlbmNvZGluZyB0byBsaW5lYXJseSBlbmNvZGVkIHNvdW5kIGZyYWdtZW50cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYWxhdzJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hbGF3Mmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMmI2MDRkZGQwMzZlMWNkIGlucHV0PTQxNDA2MjYwNDZjZDE3NzJdKi8KIHsKICAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICB1bnNpZ25lZCBjaGFyIGN2YWw7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgdmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTphbGF3MmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUod2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWC9zaXplKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gPiBQWV9TU0laRV9UX01BWC93aWR0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKnNpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKndpZHRoKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CisgICAgY3AgPSBmcmFnbWVudC0+YnVmOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemU7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgY3ZhbCA9ICpjcCsrOwotICAgICAgICB2YWwgPSBzdF9hbGF3MmxpbmVhcjE2KGN2YWwpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFsID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWwpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKHZhbDw8MTYpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuKndpZHRoOyBpICs9IHdpZHRoKSB7CisgICAgICAgIHZhbCA9IHN0X2FsYXcybGluZWFyMTYoKmNwKyspIDw8IDE2OworICAgICAgICBTRVRTQU1QTEUzMih3aWR0aCwgbmNwLCBpLCB2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubGluMmFkcGNtCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIHN0YXRlOiBvYmplY3QKKyAgICAvCisKK0NvbnZlcnQgc2FtcGxlcyB0byA0IGJpdCBJbnRlbC9EVkkgQURQQ00gZW5jb2RpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJhZHBjbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2xpbjJhZHBjbV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlPYmplY3QgKnN0YXRlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQ2NTRjMjlkMjczMWZhZmUgaW5wdXQ9MTI5MTlkNTQ5YjkwYzkwYV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBzdGVwLCB2YWxwcmVkLCBkZWx0YSwKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHN0ZXAsIHZhbHByZWQsIGRlbHRhLAogICAgICAgICBpbmRleCwgc2lnbiwgdnBkaWZmLCBkaWZmOwotICAgIFB5T2JqZWN0ICpydiwgKnN0YXRlLCAqc3RyOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEwsICpzdHI7CiAgICAgaW50IG91dHB1dGJ1ZmZlciA9IDAsIGJ1ZmZlcnN0ZXA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lPOmxpbjJhZHBjbSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc3RhdGUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi8oc2l6ZSoyKSk7Ci0gICAgaWYgKCBzdHIgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbi8od2lkdGgqMikpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhzdHIpOwogCiAgICAgLyogRGVjb2RlIHN0YXRlLCBzaG91bGQgaGF2ZSAodmFsdWUsIHN0ZXApICovCkBAIC0xNDMzLDIxICsxNjI1LDI4IEBACiAgICAgICAgIC8qIEZpcnN0IHRpbWUsIGl0IHNlZW1zLiBTZXQgZGVmYXVsdHMgKi8KICAgICAgICAgdmFscHJlZCA9IDA7CiAgICAgICAgIGluZGV4ID0gMDsKLSAgICB9IGVsc2UgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKCFQeVR1cGxlX0NoZWNrKHN0YXRlKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic3RhdGUgbXVzdCBiZSBhIHR1cGxlIG9yIE5vbmUiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0gZWxzZSBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpKSB7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CiAKICAgICBzdGVwID0gc3RlcHNpemVUYWJsZVtpbmRleF07CiAgICAgYnVmZmVyc3RlcCA9IDE7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKSA+PiAxNjsKIAogICAgICAgICAvKiBTdGVwIDEgLSBjb21wdXRlIGRpZmZlcmVuY2Ugd2l0aCBwcmV2aW91cyB2YWx1ZSAqLwotICAgICAgICBkaWZmID0gdmFsIC0gdmFscHJlZDsKLSAgICAgICAgc2lnbiA9IChkaWZmIDwgMCkgPyA4IDogMDsKLSAgICAgICAgaWYgKCBzaWduICkgZGlmZiA9ICgtZGlmZik7CisgICAgICAgIGlmICh2YWwgPCB2YWxwcmVkKSB7CisgICAgICAgICAgICBkaWZmID0gdmFscHJlZCAtIHZhbDsKKyAgICAgICAgICAgIHNpZ24gPSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGlmZiA9IHZhbCAtIHZhbHByZWQ7CisgICAgICAgICAgICBzaWduID0gMDsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIFN0ZXAgMiAtIERpdmlkZSBhbmQgY2xhbXAgKi8KICAgICAgICAgLyogTm90ZToKQEAgLTE1MDcsMjUgKzE3MDYsMzUgQEAKICAgICAgICAgYnVmZmVyc3RlcCA9ICFidWZmZXJzdGVwOwogICAgIH0KICAgICBydiA9IFB5X0J1aWxkVmFsdWUoIihPKGlpKSkiLCBzdHIsIHZhbHByZWQsIGluZGV4KTsKKworICBleGl0OgogICAgIFB5X0RFQ1JFRihzdHIpOwogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5hZHBjbTJsaW4KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgc3RhdGU6IG9iamVjdAorICAgIC8KKworRGVjb2RlIGFuIEludGVsL0RWSSBBRFBDTSBjb2RlZCBmcmFnbWVudCB0byBhIGxpbmVhciBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYWRwY20ybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfYWRwY20ybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBQeU9iamVjdCAqc3RhdGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzcxOTY1Y2RjYzBhYTY5YiBpbnB1dD1mNTIyMTE0NGY1Y2E5ZWYwXSovCiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbHByZWQsIHN0ZXAsIGRlbHRhLCBpbmRleCwgc2lnbiwgdnBkaWZmOwotICAgIFB5T2JqZWN0ICpydiwgKnN0ciwgKnN0YXRlOworICAgIFB5X3NzaXplX3QgaSwgb3V0bGVuOworICAgIGludCB2YWxwcmVkLCBzdGVwLCBkZWx0YSwgaW5kZXgsIHNpZ24sIHZwZGlmZjsKKyAgICBQeU9iamVjdCAqcnYsICpzdHI7CiAgICAgaW50IGlucHV0YnVmZmVyID0gMCwgYnVmZmVyc3RlcDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaU86YWRwY20ybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUsICZzdGF0ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBEZWNvZGUgc3RhdGUsIHNob3VsZCBoYXZlICh2YWx1ZSwgc3RlcCkgKi8KQEAgLTE1MzMsMjMgKzE3NDIsMjggQEAKICAgICAgICAgLyogRmlyc3QgdGltZSwgaXQgc2VlbXMuIFNldCBkZWZhdWx0cyAqLwogICAgICAgICB2YWxwcmVkID0gMDsKICAgICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSApCi0gICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoIVB5VHVwbGVfQ2hlY2soc3RhdGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzdGF0ZSBtdXN0IGJlIGEgdHVwbGUgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuID4gKFBZX1NTSVpFX1RfTUFYLzIpL3NpemUpIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA+IChQWV9TU0laRV9UX01BWC8yKS93aWR0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKjIpOwotICAgIGlmICggc3RyID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBvdXRsZW4gPSBmcmFnbWVudC0+bGVuKndpZHRoKjI7CisgICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRsZW4pOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhzdHIpOworICAgIGNwID0gZnJhZ21lbnQtPmJ1ZjsKIAogICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKICAgICBidWZmZXJzdGVwID0gMDsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplKjI7IGkgKz0gc2l6ZSApIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpICs9IHdpZHRoKSB7CiAgICAgICAgIC8qIFN0ZXAgMSAtIGdldCB0aGUgZGVsdGEgdmFsdWUgYW5kIGNvbXB1dGUgbmV4dCBpbmRleCAqLwogICAgICAgICBpZiAoIGJ1ZmZlcnN0ZXAgKSB7CiAgICAgICAgICAgICBkZWx0YSA9IGlucHV0YnVmZmVyICYgMHhmOwpAQCAtMTU5NCw5ICsxODA4LDcgQEAKICAgICAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogCiAgICAgICAgIC8qIFN0ZXAgNiAtIE91dHB1dCB2YWx1ZSAqLwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh2YWxwcmVkID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWxwcmVkKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKSh2YWxwcmVkPDwxNik7CisgICAgICAgIFNFVFNBTVBMRTMyKHdpZHRoLCBuY3AsIGksIHZhbHByZWQgPDwgMTYpOwogICAgIH0KIAogICAgIHJ2ID0gUHlfQnVpbGRWYWx1ZSgiKE8oaWkpKSIsIHN0ciwgdmFscHJlZCwgaW5kZXgpOwpAQCAtMTYwNCwzMiArMTgxNiwzNSBAQAogICAgIHJldHVybiBydjsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy9hdWRpb29wLmMuaCIKKwogc3RhdGljIFB5TWV0aG9kRGVmIGF1ZGlvb3BfbWV0aG9kc1tdID0gewotICAgIHsgIm1heCIsIGF1ZGlvb3BfbWF4LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJtaW5tYXgiLCBhdWRpb29wX21pbm1heCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYXZnIiwgYXVkaW9vcF9hdmcsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgIm1heHBwIiwgYXVkaW9vcF9tYXhwcCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYXZncHAiLCBhdWRpb29wX2F2Z3BwLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJybXMiLCBhdWRpb29wX3JtcywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiZmluZGZpdCIsIGF1ZGlvb3BfZmluZGZpdCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiZmluZG1heCIsIGF1ZGlvb3BfZmluZG1heCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiZmluZGZhY3RvciIsIGF1ZGlvb3BfZmluZGZhY3RvciwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiY3Jvc3MiLCBhdWRpb29wX2Nyb3NzLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJtdWwiLCBhdWRpb29wX211bCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYWRkIiwgYXVkaW9vcF9hZGQsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImJpYXMiLCBhdWRpb29wX2JpYXMsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgInVsYXcybGluIiwgYXVkaW9vcF91bGF3MmxpbiwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibGluMnVsYXciLCBhdWRpb29wX2xpbjJ1bGF3LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhbGF3MmxpbiIsIGF1ZGlvb3BfYWxhdzJsaW4sIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImxpbjJhbGF3IiwgYXVkaW9vcF9saW4yYWxhdywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibGluMmxpbiIsIGF1ZGlvb3BfbGluMmxpbiwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYWRwY20ybGluIiwgYXVkaW9vcF9hZHBjbTJsaW4sIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImxpbjJhZHBjbSIsIGF1ZGlvb3BfbGluMmFkcGNtLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJ0b21vbm8iLCBhdWRpb29wX3RvbW9ubywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAidG9zdGVyZW8iLCBhdWRpb29wX3Rvc3RlcmVvLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJnZXRzYW1wbGUiLCBhdWRpb29wX2dldHNhbXBsZSwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAicmV2ZXJzZSIsIGF1ZGlvb3BfcmV2ZXJzZSwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAicmF0ZWN2IiwgYXVkaW9vcF9yYXRlY3YsIE1FVEhfVkFSQVJHUyB9LAorICAgIEFVRElPT1BfTUFYX01FVEhPRERFRgorICAgIEFVRElPT1BfTUlOTUFYX01FVEhPRERFRgorICAgIEFVRElPT1BfQVZHX01FVEhPRERFRgorICAgIEFVRElPT1BfTUFYUFBfTUVUSE9EREVGCisgICAgQVVESU9PUF9BVkdQUF9NRVRIT0RERUYKKyAgICBBVURJT09QX1JNU19NRVRIT0RERUYKKyAgICBBVURJT09QX0ZJTkRGSVRfTUVUSE9EREVGCisgICAgQVVESU9PUF9GSU5ETUFYX01FVEhPRERFRgorICAgIEFVRElPT1BfRklOREZBQ1RPUl9NRVRIT0RERUYKKyAgICBBVURJT09QX0NST1NTX01FVEhPRERFRgorICAgIEFVRElPT1BfTVVMX01FVEhPRERFRgorICAgIEFVRElPT1BfQUREX01FVEhPRERFRgorICAgIEFVRElPT1BfQklBU19NRVRIT0RERUYKKyAgICBBVURJT09QX1VMQVcyTElOX01FVEhPRERFRgorICAgIEFVRElPT1BfTElOMlVMQVdfTUVUSE9EREVGCisgICAgQVVESU9PUF9BTEFXMkxJTl9NRVRIT0RERUYKKyAgICBBVURJT09QX0xJTjJBTEFXX01FVEhPRERFRgorICAgIEFVRElPT1BfTElOMkxJTl9NRVRIT0RERUYKKyAgICBBVURJT09QX0FEUENNMkxJTl9NRVRIT0RERUYKKyAgICBBVURJT09QX0xJTjJBRFBDTV9NRVRIT0RERUYKKyAgICBBVURJT09QX1RPTU9OT19NRVRIT0RERUYKKyAgICBBVURJT09QX1RPU1RFUkVPX01FVEhPRERFRgorICAgIEFVRElPT1BfR0VUU0FNUExFX01FVEhPRERFRgorICAgIEFVRElPT1BfUkVWRVJTRV9NRVRIT0RERUYKKyAgICBBVURJT09QX0JZVEVTV0FQX01FVEhPRERFRgorICAgIEFVRElPT1BfUkFURUNWX01FVEhPRERFRgogICAgIHsgMCwgICAgICAgICAgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2JpbmFzY2lpLmMgYi9Nb2R1bGVzL2JpbmFzY2lpLmMKaW5kZXggYTg0YmFkYzcuLjQyZDA4ZGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYmluYXNjaWkuYworKysgYi9Nb2R1bGVzL2JpbmFzY2lpLmMKQEAgLTE4Myw2ICsxODMsMjcgQEAKICAgICAweDZlMTcsIDB4N2UzNiwgMHg0ZTU1LCAweDVlNzQsIDB4MmU5MywgMHgzZWIyLCAweDBlZDEsIDB4MWVmMCwKIH07CiAKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIGJpbmFzY2lpCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD00NGM2Zjg0MGNlNzA4ZjBjXSovCisKKy8qW3B5dGhvbiBpbnB1dF0KKworY2xhc3MgYXNjaWlfYnVmZmVyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2J1ZmZlcicKKyAgICBjb252ZXJ0ZXIgPSAnYXNjaWlfYnVmZmVyX2NvbnZlcnRlcicKKyAgICBpbXBsX2J5X3JlZmVyZW5jZSA9IFRydWUKKyAgICBjX2RlZmF1bHQgPSAie05VTEwsIE5VTEx9IgorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oWyJpZiAoIiwgbmFtZSwgIi5vYmopXG4gICBQeUJ1ZmZlcl9SZWxlYXNlKCYiLCBuYW1lLCAiKTtcbiJdKQorCitbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0zZWI3YjYzNjEwZGE5MmNkXSovCisKIHN0YXRpYyBpbnQKIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIoUHlPYmplY3QgKmFyZywgUHlfYnVmZmVyICpidWYpCiB7CkBAIC0yMjAsMTMgKzI0MSwyMSBAQAogICAgIHJldHVybiBQeV9DTEVBTlVQX1NVUFBPUlRFRDsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy9iaW5hc2NpaS5jLmgiCiAKLVB5RG9jX1NUUlZBUihkb2NfYTJiX3V1LCAiKGFzY2lpKSAtPiBiaW4uIERlY29kZSBhIGxpbmUgb2YgdXVlbmNvZGVkIGRhdGEiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl91dQorCisgICAgZGF0YTogYXNjaWlfYnVmZmVyCisgICAgLworCitEZWNvZGUgYSBsaW5lIG9mIHV1ZW5jb2RlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX3V1KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl91dV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01Nzc5ZjM5YjBiNDg0NTlmIGlucHV0PTdjYWZlYWY3M2RmNjNkMWNdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFzY2lpOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTIzNCwxMCArMjYzLDggQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBhc2NpaV9sZW4sIGJpbl9sZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfdXUiLCBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmcGFzY2lpKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzY2lpX2RhdGEgPSBwYXNjaWkuYnVmOwotICAgIGFzY2lpX2xlbiA9IHBhc2NpaS5sZW47CisgICAgYXNjaWlfZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBhc2NpaV9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoYXNjaWlfbGVuID49IDApOwogCkBAIC0yNDYsMTAgKzI3Myw4IEBACiAgICAgYXNjaWlfbGVuLS07CiAKICAgICAvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4pKSA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGJpbl9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIDsgYmluX2xlbiA+IDAgOyBhc2NpaV9sZW4tLSwgYXNjaWlfZGF0YSsrICkgewpAQCAtMjY5LDcgKzI5NCw2IEBACiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKCB0aGlzX2NoIDwgJyAnIHx8IHRoaXNfY2ggPiAoJyAnICsgNjQpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiSWxsZWdhbCBjaGFyIik7Ci0gICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQpAQCAtMjk4LDIxICszMjIsMjYgQEAKICAgICAgICAgaWYgKCB0aGlzX2NoICE9ICcgJyAmJiB0aGlzX2NoICE9ICcgJys2NCAmJgogICAgICAgICAgICAgIHRoaXNfY2ggIT0gJ1xuJyAmJiB0aGlzX2NoICE9ICdccicgKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJUcmFpbGluZyBnYXJiYWdlIik7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgcmV0dXJuIHJ2OwogfQogCi1QeURvY19TVFJWQVIoZG9jX2IyYV91dSwgIihiaW4pIC0+IGFzY2lpLiBVdWVuY29kZSBsaW5lIG9mIGRhdGEiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmIyYV91dQorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitVdWVuY29kZSBsaW5lIG9mIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfdXUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYjJhX3V1X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE4MTAyMWI2OWJiOWE0MTQgaW5wdXQ9MDBmZGY0NThjZThiNDY1Yl0qLwogewotICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTMyMCwyMiArMzQ5LDE3IEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgYmluX2xlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmIyYV91dSIsICZwYmluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgYmluX2xlbiA9IHBiaW4ubGVuOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGJpbl9sZW4gPSBkYXRhLT5sZW47CiAgICAgaWYgKCBiaW5fbGVuID4gNDUgKSB7CiAgICAgICAgIC8qIFRoZSA0NSBpcyBhIGxpbWl0IHRoYXQgYXBwZWFycyBpbiBhbGwgdXVlbmNvZGUncyAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJBdCBtb3N0IDQ1IGJ5dGVzIGF0IG9uY2UiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIFdlJ3JlIGxhenkgYW5kIGFsbG9jYXRlIHRvIG11Y2ggKGZpeGVkIHVwIGxhdGVyKSAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMiArIChiaW5fbGVuKzIpLzMqNCkpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMiArIChiaW5fbGVuKzIpLzMqNCkpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgLyogU3RvcmUgdGhlIGxlbmd0aCAqLwpAQCAtMzYxLDEwICszODUsOCBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC0zOTQsMTIgKzQxNiwxOSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYTJiX2Jhc2U2NCwgIihhc2NpaSkgLT4gYmluLiBEZWNvZGUgYSBsaW5lIG9mIGJhc2U2NCBkYXRhIik7CisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5hMmJfYmFzZTY0CisKKyAgICBkYXRhOiBhc2NpaV9idWZmZXIKKyAgICAvCisKK0RlY29kZSBhIGxpbmUgb2YgYmFzZTY0IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9hMmJfYmFzZTY0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2UzNTFiNzAyYmVkNTZkMiBpbnB1dD01ODcyYWNmNmUxY2FjMjQzXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBhc2NpaTsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC00MDgsMjUgKzQzNywxOSBAQAogICAgIFB5X3NzaXplX3QgYXNjaWlfbGVuLCBiaW5fbGVuOwogICAgIGludCBxdWFkX3BvcyA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfYmFzZTY0IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhc2NpaSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc2NpaV9kYXRhID0gcGFzY2lpLmJ1ZjsKLSAgICBhc2NpaV9sZW4gPSBwYXNjaWkubGVuOworICAgIGFzY2lpX2RhdGEgPSBkYXRhLT5idWY7CisgICAgYXNjaWlfbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGFzY2lpX2xlbiA+PSAwKTsKIAotICAgIGlmIChhc2NpaV9sZW4gPiBQWV9TU0laRV9UX01BWCAtIDMpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAoYXNjaWlfbGVuID4gUFlfU1NJWkVfVF9NQVggLSAzKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICBiaW5fbGVuID0gKChhc2NpaV9sZW4rMykvNCkqMzsgLyogVXBwZXIgYm91bmQsIGNvcnJlY3RlZCBsYXRlciAqLwogCiAgICAgLyogQWxsb2NhdGUgdGhlIGJ1ZmZlciAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogICAgIGJpbl9sZW4gPSAwOwogCkBAIC00NzksNyArNTAyLDYgQEAKICAgICB9CiAKICAgICBpZiAobGVmdGJpdHMgIT0gMCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJJbmNvcnJlY3QgcGFkZGluZyIpOwogICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ5MSwyNCArNTEzLDMwIEBACiAgICAgKi8KICAgICBpZiAoYmluX2xlbiA+IDApIHsKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsIGJpbl9sZW4pIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAwKTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX2Jhc2U2NCwgIihiaW4pIC0+IGFzY2lpLiBCYXNlNjQtY29kZSBsaW5lIG9mIGRhdGEiKTsKKworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX2Jhc2U2NAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitCYXNlNjQtY29kZSBsaW5lIG9mIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfYmFzZTY0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2IyYV9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2NkNjFmYmVlMjkxMzI4NSBpbnB1dD0xNGVjNGU0NzM3MTE3NGE5XSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtNTE2LDI2ICs1NDQsMjEgQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBiaW5fbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6YjJhX2Jhc2U2NCIsICZwYnVmKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJ1Zi5idWY7Ci0gICAgYmluX2xlbiA9IHBidWYubGVuOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGJpbl9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoYmluX2xlbiA+PSAwKTsKIAogICAgIGlmICggYmluX2xlbiA+IEJBU0U2NF9NQVhCSU4gKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIlRvbyBtdWNoIGRhdGEgZm9yIGJhc2U2NCBsaW5lIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBXZSdyZSBsYXp5IGFuZCBhbGxvY2F0ZSB0b28gbXVjaCAoZml4ZWQgdXAgbGF0ZXIpLgogICAgICAgICIrMyIgbGVhdmVzIHJvb20gZm9yIHVwIHRvIHR3byBwYWQgY2hhcmFjdGVycyBhbmQgYSB0cmFpbGluZwogICAgICAgIG5ld2xpbmUuICBOb3RlIHRoYXQgJ2InIGdldHMgZW5jb2RlZCBhcyAnWWc9PVxuJyAoMSBpbiwgNSBvdXQpLiAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbioyICsgMykpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbioyICsgMykpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGJpbl9sZW4gPiAwIDsgYmluX2xlbi0tLCBiaW5fZGF0YSsrICkgewpAQCAtNTYzLDE5ICs1ODYsMjQgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19hMmJfaHF4LCAiYXNjaWkgLT4gYmluLCBkb25lLiBEZWNvZGUgLmhxeCBjb2RpbmciKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl9ocXgKKworICAgIGRhdGE6IGFzY2lpX2J1ZmZlcgorICAgIC8KKworRGVjb2RlIC5ocXggY29kaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9hMmJfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTYwYmNkYmJkMjhiMTA1Y2QgaW5wdXQ9MGQ5MTRjNjgwZTBlZWQ1NV0qLwogewotICAgIFB5X2J1ZmZlciBwYXNjaWk7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtNTg0LDI1ICs2MTIsMTkgQEAKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpbnQgZG9uZSA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfaHF4IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhc2NpaSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc2NpaV9kYXRhID0gcGFzY2lpLmJ1ZjsKLSAgICBsZW4gPSBwYXNjaWkubGVuOworICAgIGFzY2lpX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAtIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBBbGxvY2F0ZSBhIHN0cmluZyB0aGF0IGlzIHRvbyBiaWcgKGZpeGVkIGxhdGVyKQogICAgICAgIEFkZCB0d28gdG8gdGhlIGluaXRpYWwgbGVuZ3RoIHRvIHByZXZlbnQgaW50ZXJuaW5nIHdoaWNoCiAgICAgICAgd291bGQgcHJlY2x1ZGUgc3Vic2VxdWVudCByZXNpemluZy4gICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4rMikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4rMikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggOyBsZW4gPiAwIDsgbGVuLS0sIGFzY2lpX2RhdGErKyApIHsKQEAgLTYxMiw3ICs2MzQsNiBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICggdGhpc19jaCA9PSBGQUlMICkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiSWxsZWdhbCBjaGFyIik7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC02MzUsNTUgKzY1Niw1MyBAQAogICAgIGlmICggbGVmdGJpdHMgJiYgIWRvbmUgKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhJbmNvbXBsZXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBoYXMgaW5jb21wbGV0ZSBudW1iZXIgb2YgYnl0ZXMiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYmluX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIGlmIChydikgewogICAgICAgICBQeU9iamVjdCAqcnJ2ID0gUHlfQnVpbGRWYWx1ZSgiT2kiLCBydiwgZG9uZSk7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgIHJldHVybiBycnY7CiAgICAgfQogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19ybGVjb2RlX2hxeCwgIkJpbmhleCBSTEUtY29kZSBiaW5hcnkgZGF0YSIpOworCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5ybGVjb2RlX2hxeAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitCaW5oZXggUkxFLWNvZGUgYmluYXJ5IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9ybGVjb2RlX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9ybGVjb2RlX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wOTA1ZGEzNDRkYmYwNjQ4IGlucHV0PWUxZjE3MTI0NDdhODJiMDldKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICB1bnNpZ25lZCBjaGFyICppbl9kYXRhLCAqb3V0X2RhdGE7CiAgICAgUHlPYmplY3QgKnJ2OwogICAgIHVuc2lnbmVkIGNoYXIgY2g7CiAgICAgUHlfc3NpemVfdCBpbiwgaW5lbmQsIGxlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOnJsZWNvZGVfaHF4IiwgJnBidWYpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaW5fZGF0YSA9IHBidWYuYnVmOwotICAgIGxlbiA9IHBidWYubGVuOworICAgIGluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBXb3JzdCBjYXNlOiBvdXRwdXQgaXMgdHdpY2UgYXMgYmlnIGFzIGlucHV0IChmaXhlZCBsYXRlcikgKi8KLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKKyAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIGluPTA7IGluPGxlbjsgaW4rKykgewpAQCAtNzEzLDE5ICs3MzIsMjUgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKG91dF9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX2hxeCwgIkVuY29kZSAuaHF4IGRhdGEiKTsKKworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX2hxeAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitFbmNvZGUgLmhxeCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYjJhX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9iMmFfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVhOTg3ODEwZDVlM2NkYmIgaW5wdXQ9OTU5NmViZTAxOWZlMTJiYV0qLwogewotICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTczMywyMyArNzU4LDE3IEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6YjJhX2hxeCIsICZwYmluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgbGVuID0gcGJpbi5sZW47CisgICAgYmluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBBbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IGxhcmdlIGVub3VnaCAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGxlbiA+IDAgOyBsZW4tLSwgYmluX2RhdGErKyApIHsKQEAgLTc3MCw0NyArNzg5LDQ1IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfcmxlZGVjb2RlX2hxeCwgIkRlY29kZSBoZXhiaW4gUkxFLWNvZGVkIHN0cmluZyIpOworCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5ybGVkZWNvZGVfaHF4CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK0RlY29kZSBoZXhiaW4gUkxFLWNvZGVkIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3JsZWRlY29kZV9ocXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mN2FmZDg5Yjc4OTk0NmFiIGlucHV0PTU0Y2RkNDlmYzAxNDQwMmNdKi8KIHsKLSAgICBQeV9idWZmZXIgcGluOwogICAgIHVuc2lnbmVkIGNoYXIgKmluX2RhdGEsICpvdXRfZGF0YTsKICAgICB1bnNpZ25lZCBjaGFyIGluX2J5dGUsIGluX3JlcGVhdDsKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBpbl9sZW4sIG91dF9sZW4sIG91dF9sZW5fbGVmdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOnJsZWRlY29kZV9ocXgiLCAmcGluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGluX2RhdGEgPSBwaW4uYnVmOwotICAgIGluX2xlbiA9IHBpbi5sZW47CisgICAgaW5fZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBpbl9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoaW5fbGVuID49IDApOwogCiAgICAgLyogRW1wdHkgc3RyaW5nIGlzIGEgc3BlY2lhbCBjYXNlICovCi0gICAgaWYgKCBpbl9sZW4gPT0gMCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKKyAgICBpZiAoIGluX2xlbiA9PSAwICkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwotICAgIH0KLSAgICBlbHNlIGlmIChpbl9sZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKKyAgICBlbHNlIGlmIChpbl9sZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIG9mIHJlYXNvbmFibGUgc2l6ZS4gUmVzaXplZCB3aGVuIG5lZWRlZCAqLwogICAgIG91dF9sZW4gPSBpbl9sZW4qMjsKLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dF9sZW4pKSA9PSBOVUxMICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0X2xlbikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgb3V0X2xlbl9sZWZ0ID0gb3V0X2xlbjsKICAgICBvdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCkBAIC04MjMsNyArODQwLDYgQEAKICAgICAgICAgICAgICBpZiAoIC0taW5fbGVuIDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoSW5jb21wbGV0ZSwgIiIpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgXAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgICAgICAgICAgIH0gXAogICAgICAgICAgICAgIGIgPSAqaW5fZGF0YSsrOyBcCkBAIC04MzQsNyArODUwLDcgQEAKICAgICAgICAgICAgICBpZiAoIC0tb3V0X2xlbl9sZWZ0IDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0X2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7IFwKICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwgMipvdXRfbGVuKSA8IDApIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgUHlfREVDUkVGKHJ2KTsgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgcmV0dXJuIE5VTEw7IH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgeyBQeV9YREVDUkVGKHJ2KTsgcmV0dXJuIE5VTEw7IH0gXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3V0X2xlbjsgXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9sZW5fbGVmdCA9IG91dF9sZW4tMTsgXApAQCAtODU2LDcgKzg3Miw2IEBACiAgICAgICAgICAgICAqKiBvZiB0aGUgc3RyaW5nIG9ubHkpLiBUaGlzIGlzIGEgcHJvZ3JhbW1lciBlcnJvci4KICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJPcnBoYW5lZCBSTEUgY29kZSBhdCBzdGFydCIpOwotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtODg3LDYwICs5MDIsNDEgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKG91dF9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19jcmNfaHF4LAotIihkYXRhLCBvbGRjcmMpIC0+IG5ld2NyYy4gQ29tcHV0ZSBocXggQ1JDIGluY3JlbWVudGFsbHkiKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2NyY19ocXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuY3JjX2hxeCAtPiBpbnQKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGNyYzogaW50CisgICAgLworCitDb21wdXRlIGhxeCBDUkMgaW5jcmVtZW50YWxseS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorYmluYXNjaWlfY3JjX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IGNyYykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MzRkYWMxOGRmYTg2M2Q3IGlucHV0PTY4MDYwOTMxYjJmNTFjOGFdKi8KIHsKLSAgICBQeV9idWZmZXIgcGluOwogICAgIHVuc2lnbmVkIGNoYXIgKmJpbl9kYXRhOwotICAgIHVuc2lnbmVkIGludCBjcmM7CisgICAgdW5zaWduZWQgaW50IHVjcmMgPSAodW5zaWduZWQgaW50KWNyYzsKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpjcmNfaHF4IiwgJnBpbiwgJmNyYykgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBiaW5fZGF0YSA9IHBpbi5idWY7Ci0gICAgbGVuID0gcGluLmxlbjsKKyAgICBiaW5fZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBsZW4gPSBkYXRhLT5sZW47CiAKICAgICB3aGlsZShsZW4tLSA+IDApIHsKLSAgICAgICAgY3JjPSgoY3JjPDw4KSYweGZmMDApXmNyY3RhYl9ocXhbKChjcmM+PjgpJjB4ZmYpXipiaW5fZGF0YSsrXTsKKyAgICAgICAgdWNyYz0oKHVjcmM8PDgpJjB4ZmYwMCleY3JjdGFiX2hxeFsoKHVjcmM+PjgpJjB4ZmYpXipiaW5fZGF0YSsrXTsKICAgICB9CiAKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgY3JjKTsKKyAgICByZXR1cm4gKGludCl1Y3JjOwogfQogCi1QeURvY19TVFJWQVIoZG9jX2NyYzMyLAotIihkYXRhLCBvbGRjcmMgPSAwKSAtPiBuZXdjcmMuIENvbXB1dGUgQ1JDLTMyIGluY3JlbWVudGFsbHkiKTsKLQotI2lmZGVmIFVTRV9aTElCX0NSQzMyCi0vKiBUaGlzIHdhcyB0YWtlbiBmcm9tIHpsaWJtb2R1bGUuYyBQeVpsaWJfY3JjMzIgKGJ1dCBpcyBQWV9TU0laRV9UX0NMRUFOKSAqLwotc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2NyYzMyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICB1bnNpZ25lZCBpbnQgY3JjMzJ2YWwgPSAwOyAgLyogY3JjMzIoMEwsIFpfTlVMTCwgMCkgKi8KLSAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBCeXRlICpidWY7Ci0gICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaW50IHNpZ25lZF92YWw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfEk6Y3JjMzIiLCAmcGJ1ZiwgJmNyYzMydmFsKSkKLSAgICByZXR1cm4gTlVMTDsKLSAgICBidWYgPSAoQnl0ZSopcGJ1Zi5idWY7Ci0gICAgbGVuID0gcGJ1Zi5sZW47Ci0gICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBidWYsIGxlbik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHNpZ25lZF92YWwgJiAweGZmZmZmZmZmVSk7Ci19Ci0jZWxzZSAgLyogVVNFX1pMSUJfQ1JDMzIgKi8KKyNpZm5kZWYgVVNFX1pMSUJfQ1JDMzIKIC8qICBDcmMgLSAzMiBCSVQgQU5TSSBYMy42NiBDUkMgY2hlY2tzdW0gZmlsZXMKICAgICBBbHNvIGtub3duIGFzOiBJU08gMzMwNwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwKQEAgLTEwNTgsMjAgKzEwNTQsNDIgQEAKIDB4NWQ2ODFiMDJVLCAweDJhNmYyYjk0VSwgMHhiNDBiYmUzN1UsIDB4YzMwYzhlYTFVLCAweDVhMDVkZjFiVSwKIDB4MmQwMmVmOGRVCiB9OworI2VuZGlmICAvKiBVU0VfWkxJQl9DUkMzMiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfY3JjMzIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuY3JjMzIgLT4gdW5zaWduZWRfaW50CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICBjcmM6IHVuc2lnbmVkX2ludChiaXR3aXNlPVRydWUpID0gMAorICAgIC8KKworQ29tcHV0ZSBDUkMtMzIgaW5jcmVtZW50YWxseS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIHVuc2lnbmVkIGludAorYmluYXNjaWlfY3JjMzJfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBjcmMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjIwYTk2MTY0MzM5M2M0ZiBpbnB1dD1iYmUzNDBiYzk5ZDI1YWE4XSovCisKKyNpZmRlZiBVU0VfWkxJQl9DUkMzMgorLyogVGhpcyB3YXMgdGFrZW4gZnJvbSB6bGlibW9kdWxlLmMgUHlabGliX2NyYzMyIChidXQgaXMgUFlfU1NJWkVfVF9DTEVBTikgKi8KK3sKKyAgICBCeXRlICpidWY7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaW50IHNpZ25lZF92YWw7CisKKyAgICBidWYgPSAoQnl0ZSopZGF0YS0+YnVmOworICAgIGxlbiA9IGRhdGEtPmxlbjsKKyAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjLCBidWYsIGxlbik7CisgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpc2lnbmVkX3ZhbCAmIDB4ZmZmZmZmZmZVOworfQorI2Vsc2UgIC8qIFVTRV9aTElCX0NSQzMyICovCiB7IC8qIEJ5IEppbSBBaGxzdHJvbTsgQWxsIHJpZ2h0cyB0cmFuc2ZlcnJlZCB0byBDTlJJICovCi0gICAgUHlfYnVmZmVyIHBiaW47CiAgICAgdW5zaWduZWQgY2hhciAqYmluX2RhdGE7Ci0gICAgdW5zaWduZWQgaW50IGNyYyA9IDA7ICAgICAgIC8qIGluaXRpYWwgdmFsdWUgb2YgQ1JDICovCiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgdW5zaWduZWQgaW50IHJlc3VsdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfEk6Y3JjMzIiLCAmcGJpbiwgJmNyYykgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBiaW5fZGF0YSA9IHBiaW4uYnVmOwotICAgIGxlbiA9IHBiaW4ubGVuOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGxlbiA9IGRhdGEtPmxlbjsKIAogICAgIGNyYyA9IH4gY3JjOwogICAgIHdoaWxlIChsZW4tLSA+IDApIHsKQEAgLTEwODAsMzggKzEwOTgsNDIgQEAKICAgICB9CiAKICAgICByZXN1bHQgPSAoY3JjIF4gMHhGRkZGRkZGRik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHJlc3VsdCAmIDB4ZmZmZmZmZmYpOworICAgIHJldHVybiByZXN1bHQgJiAweGZmZmZmZmZmOwogfQogI2VuZGlmICAvKiBVU0VfWkxJQl9DUkMzMiAqLwogCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5iMmFfaGV4CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK0hleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGJpbmFyeSBkYXRhLgorCitUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYnl0ZXMgb2JqZWN0LiAgVGhpcyBmdW5jdGlvbiBpcyBhbHNvCithdmFpbGFibGUgYXMgImhleGxpZnkoKSIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9oZXhsaWZ5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2IyYV9oZXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTc5MzE4OTIyYzJmOGZkYSBpbnB1dD05NjQyM2NmYTI5OWZmM2IxXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBhcmc7CiAgICAgY2hhciogYXJnYnVmOwogICAgIFB5X3NzaXplX3QgYXJnbGVuOwogICAgIFB5T2JqZWN0ICpyZXR2YWw7CiAgICAgY2hhciogcmV0YnVmOwogICAgIFB5X3NzaXplX3QgaSwgajsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6YjJhX2hleCIsICZwYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXJnYnVmID0gcGFyZy5idWY7Ci0gICAgYXJnbGVuID0gcGFyZy5sZW47CisgICAgYXJnYnVmID0gZGF0YS0+YnVmOworICAgIGFyZ2xlbiA9IGRhdGEtPmxlbjsKIAogICAgIGFzc2VydChhcmdsZW4gPj0gMCk7Ci0gICAgaWYgKGFyZ2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKKyAgICBpZiAoYXJnbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICByZXR2YWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGFyZ2xlbioyKTsKLSAgICBpZiAoIXJldHZhbCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKKyAgICBpZiAoIXJldHZhbCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIHJldGJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJldHZhbCk7CiAKICAgICAvKiBtYWtlIGhleCB2ZXJzaW9uIG9mIHN0cmluZywgdGFrZW4gZnJvbSBzaGFtb2R1bGUuYyAqLwpAQCAtMTEyMiwxNiArMTE0NCw5IEBACiAgICAgICAgIGMgPSBhcmdidWZbaV0gJiAweGY7CiAgICAgICAgIHJldGJ1ZltqKytdID0gUHlfaGV4ZGlnaXRzW2NdOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCi1QeURvY19TVFJWQVIoZG9jX2hleGxpZnksCi0iYjJhX2hleChkYXRhKSAtPiBzOyBIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBiaW5hcnkgZGF0YS5cblwKLVxuXAotVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4gIFRoaXMgZnVuY3Rpb24gaXMgYWxzb1xuXAotYXZhaWxhYmxlIGFzIFwiaGV4bGlmeSgpXCIuIik7Ci0KIAogc3RhdGljIGludAogdG9faW50KGludCBjKQpAQCAtMTE0OCwyMCArMTE2MywzMCBAQAogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl9oZXgKKworICAgIGhleHN0cjogYXNjaWlfYnVmZmVyCisgICAgLworCitCaW5hcnkgZGF0YSBvZiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKworaGV4c3RyIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBoZXggZGlnaXRzICh1cHBlciBvciBsb3dlciBjYXNlKS4KK1RoaXMgZnVuY3Rpb24gaXMgYWxzbyBhdmFpbGFibGUgYXMgInVuaGV4bGlmeSgpIi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3VuaGV4bGlmeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9hMmJfaGV4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDYxZGE0NTJiNWM2ZDI5MCBpbnB1dD05ZTFlN2YyZjk0ZGIyNGZkXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBhcmc7CiAgICAgY2hhciogYXJnYnVmOwogICAgIFB5X3NzaXplX3QgYXJnbGVuOwogICAgIFB5T2JqZWN0ICpyZXR2YWw7CiAgICAgY2hhciogcmV0YnVmOwogICAgIFB5X3NzaXplX3QgaSwgajsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6YTJiX2hleCIsIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZwYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXJnYnVmID0gcGFyZy5idWY7Ci0gICAgYXJnbGVuID0gcGFyZy5sZW47CisgICAgYXJnYnVmID0gaGV4c3RyLT5idWY7CisgICAgYXJnbGVuID0gaGV4c3RyLT5sZW47CiAKICAgICBhc3NlcnQoYXJnbGVuID49IDApOwogCkBAIC0xMTcwLDE2ICsxMTk1LDEzIEBACiAgICAgICogcmFpc2UgYW4gZXhjZXB0aW9uLgogICAgICAqLwogICAgIGlmIChhcmdsZW4gJSAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJPZGQtbGVuZ3RoIHN0cmluZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXR2YWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIChhcmdsZW4vMikpOwotICAgIGlmICghcmV0dmFsKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOworICAgIGlmICghcmV0dmFsKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgcmV0YnVmID0gUHlCeXRlc19BU19TVFJJTkcocmV0dmFsKTsKIAogICAgIGZvciAoaT1qPTA7IGkgPCBhcmdsZW47IGkgKz0gMikgewpAQCAtMTE5MiwyMSArMTIxNCwxMyBAQAogICAgICAgICB9CiAgICAgICAgIHJldGJ1ZltqKytdID0gKHRvcCA8PCA0KSArIGJvdDsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgcmV0dXJuIHJldHZhbDsKIAogICBmaW5hbGx5OgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgIFB5X0RFQ1JFRihyZXR2YWwpOwogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoZG9jX3VuaGV4bGlmeSwKLSJhMmJfaGV4KGhleHN0cikgLT4gczsgQmluYXJ5IGRhdGEgb2YgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG5cCi1cblwKLWhleHN0ciBtdXN0IGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgaGV4IGRpZ2l0cyAodXBwZXIgb3IgbG93ZXIgY2FzZSkuXG5cCi1UaGlzIGZ1bmN0aW9uIGlzIGFsc28gYXZhaWxhYmxlIGFzIFwidW5oZXhsaWZ5KClcIiIpOwotCiBzdGF0aWMgaW50IHRhYmxlX2hleFsxMjhdID0gewogICAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwKICAgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsCkBAIC0xMjIyLDI1ICsxMjM2LDI4IEBACiAKICNkZWZpbmUgTUFYTElORVNJWkUgNzYKIAotUHlEb2NfU1RSVkFSKGRvY19hMmJfcXAsICJEZWNvZGUgYSBzdHJpbmcgb2YgcXAtZW5jb2RlZCBkYXRhIik7CiAKLXN0YXRpYyBQeU9iamVjdCoKLWJpbmFzY2lpX2EyYl9xcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5hMmJfcXAKKworICAgIGRhdGE6IGFzY2lpX2J1ZmZlcgorICAgIGhlYWRlcjogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKKworRGVjb2RlIGEgc3RyaW5nIG9mIHFwLWVuY29kZWQgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IGhlYWRlcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNDRlZjg4MjcwMzUyMTE0IGlucHV0PTUxODdhMGQzZDhlNTRmM2JdKi8KIHsKICAgICBQeV9zc2l6ZV90IGluLCBvdXQ7CiAgICAgY2hhciBjaDsKLSAgICBQeV9idWZmZXIgcGRhdGE7Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKm9kYXRhOworICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpvZGF0YTsKICAgICBQeV9zc2l6ZV90IGRhdGFsZW4gPSAwOwogICAgIFB5T2JqZWN0ICpydjsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImRhdGEiLCAiaGVhZGVyIiwgTlVMTH07Ci0gICAgaW50IGhlYWRlciA9IDA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnxpOmEyYl9xcCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmcGRhdGEsICZoZWFkZXIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBkYXRhID0gcGRhdGEuYnVmOwotICAgIGRhdGFsZW4gPSBwZGF0YS5sZW47CisgICAgYXNjaWlfZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBkYXRhbGVuID0gZGF0YS0+bGVuOwogCiAgICAgLyogV2UgYWxsb2NhdGUgdGhlIG91dHB1dCBzYW1lIHNpemUgYXMgaW5wdXQsIHRoaXMgaXMgb3ZlcmtpbGwuCiAgICAgICogVGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIHVzZWQgY2FsbG9jKCkgc28gd2UnbGwgemVybyBvdXQgdGhlCkBAIC0xMjQ4LDcgKzEyNjUsNiBAQAogICAgICAqLwogICAgIG9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgUHlNZW1fTWFsbG9jKGRhdGFsZW4pOwogICAgIGlmIChvZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTI1NiwzMSArMTI3MiwzMSBAQAogCiAgICAgaW4gPSBvdXQgPSAwOwogICAgIHdoaWxlIChpbiA8IGRhdGFsZW4pIHsKLSAgICAgICAgaWYgKGRhdGFbaW5dID09ICc9JykgeworICAgICAgICBpZiAoYXNjaWlfZGF0YVtpbl0gPT0gJz0nKSB7CiAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgaWYgKGluID49IGRhdGFsZW4pIGJyZWFrOwogICAgICAgICAgICAgLyogU29mdCBsaW5lIGJyZWFrcyAqLwotICAgICAgICAgICAgaWYgKChkYXRhW2luXSA9PSAnXG4nKSB8fCAoZGF0YVtpbl0gPT0gJ1xyJykpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YVtpbl0gIT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW4gPCBkYXRhbGVuICYmIGRhdGFbaW5dICE9ICdcbicpIGluKys7CisgICAgICAgICAgICBpZiAoKGFzY2lpX2RhdGFbaW5dID09ICdcbicpIHx8IChhc2NpaV9kYXRhW2luXSA9PSAnXHInKSkgeworICAgICAgICAgICAgICAgIGlmIChhc2NpaV9kYXRhW2luXSAhPSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbiA8IGRhdGFsZW4gJiYgYXNjaWlfZGF0YVtpbl0gIT0gJ1xuJykgaW4rKzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGluIDwgZGF0YWxlbikgaW4rKzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFbaW5dID09ICc9JykgeworICAgICAgICAgICAgZWxzZSBpZiAoYXNjaWlfZGF0YVtpbl0gPT0gJz0nKSB7CiAgICAgICAgICAgICAgICAgLyogYnJva2VuIGNhc2UgZnJvbSBicm9rZW4gcHl0aG9uIHFwICovCiAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJz0nOwogICAgICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICgoKGRhdGFbaW5dID49ICdBJyAmJiBkYXRhW2luXSA8PSAnRicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgKGRhdGFbaW5dID49ICdhJyAmJiBkYXRhW2luXSA8PSAnZicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgKGRhdGFbaW5dID49ICcwJyAmJiBkYXRhW2luXSA8PSAnOScpKSAmJgotICAgICAgICAgICAgICAgICAgICAgKChkYXRhW2luKzFdID49ICdBJyAmJiBkYXRhW2luKzFdIDw9ICdGJykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAoZGF0YVtpbisxXSA+PSAnYScgJiYgZGF0YVtpbisxXSA8PSAnZicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gPj0gJzAnICYmIGRhdGFbaW4rMV0gPD0gJzknKSkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKCgoYXNjaWlfZGF0YVtpbl0gPj0gJ0EnICYmIGFzY2lpX2RhdGFbaW5dIDw9ICdGJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YVtpbl0gPj0gJ2EnICYmIGFzY2lpX2RhdGFbaW5dIDw9ICdmJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YVtpbl0gPj0gJzAnICYmIGFzY2lpX2RhdGFbaW5dIDw9ICc5JykpICYmCisgICAgICAgICAgICAgICAgICAgICAoKGFzY2lpX2RhdGFbaW4rMV0gPj0gJ0EnICYmIGFzY2lpX2RhdGFbaW4rMV0gPD0gJ0YnKSB8fAorICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhW2luKzFdID49ICdhJyAmJiBhc2NpaV9kYXRhW2luKzFdIDw9ICdmJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YVtpbisxXSA+PSAnMCcgJiYgYXNjaWlfZGF0YVtpbisxXSA8PSAnOScpKSkgewogICAgICAgICAgICAgICAgIC8qIGhleHZhbCAqLwotICAgICAgICAgICAgICAgIGNoID0gaGV4dmFsKGRhdGFbaW5dKSA8PCA0OworICAgICAgICAgICAgICAgIGNoID0gaGV4dmFsKGFzY2lpX2RhdGFbaW5dKSA8PCA0OwogICAgICAgICAgICAgICAgIGluKys7Ci0gICAgICAgICAgICAgICAgY2ggfD0gaGV4dmFsKGRhdGFbaW5dKTsKKyAgICAgICAgICAgICAgICBjaCB8PSBoZXh2YWwoYXNjaWlfZGF0YVtpbl0pOwogICAgICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gY2g7CiAgICAgICAgICAgICB9CkBAIC0xMjg4LDIyICsxMzA0LDIwIEBACiAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICc9JzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChoZWFkZXIgJiYgZGF0YVtpbl0gPT0gJ18nKSB7CisgICAgICAgIGVsc2UgaWYgKGhlYWRlciAmJiBhc2NpaV9kYXRhW2luXSA9PSAnXycpIHsKICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICcgJzsKICAgICAgICAgICAgIGluKys7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBvZGF0YVtvdXRdID0gZGF0YVtpbl07CisgICAgICAgICAgICBvZGF0YVtvdXRdID0gYXNjaWlfZGF0YVtpbl07CiAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgb3V0Kys7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKChydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilvZGF0YSwgb3V0KSkgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5TWVtX0ZyZWUob2RhdGEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIFB5TWVtX0ZyZWUob2RhdGEpOwogICAgIHJldHVybiBydjsKIH0KQEAgLTEzMTksNjIgKzEzMzMsNjIgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19iMmFfcXAsCi0iYjJhX3FwKGRhdGEsIHF1b3RldGFicz0wLCBpc3RleHQ9MSwgaGVhZGVyPTApIC0+IHM7IFxuXAotIEVuY29kZSBhIHN0cmluZyB1c2luZyBxdW90ZWQtcHJpbnRhYmxlIGVuY29kaW5nLiBcblwKLVxuXAotT24gZW5jb2RpbmcsIHdoZW4gaXN0ZXh0IGlzIHNldCwgbmV3bGluZXMgYXJlIG5vdCBlbmNvZGVkLCBhbmQgd2hpdGUgXG5cCi1zcGFjZSBhdCBlbmQgb2YgbGluZXMgaXMuICBXaGVuIGlzdGV4dCBpcyBub3Qgc2V0LCBcXHIgYW5kIFxcbiAoQ1IvTEYpIGFyZSBcblwKLWJvdGggZW5jb2RlZC4gIFdoZW4gcXVvdGV0YWJzIGlzIHNldCwgc3BhY2UgYW5kIHRhYnMgYXJlIGVuY29kZWQuIik7Ci0KIC8qIFhYWDogVGhpcyBpcyByaWRpY3Vsb3VzbHkgY29tcGxpY2F0ZWQgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZQogICogKG1vc3RseSkgd2l0aCB0aGUgcXVvcHJpIG1vZHVsZS4gIEl0IGRvZXNuJ3QgcmUtY3JlYXRlIHRoZSBxdW9wcmkKICAqIG1vZHVsZSBidWcgd2hlcmUgdGV4dCBlbmRpbmcgaW4gQ1JMRiBoYXMgdGhlIENSIGVuY29kZWQgKi8KLXN0YXRpYyBQeU9iamVjdCoKLWJpbmFzY2lpX2IyYV9xcCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5iMmFfcXAKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIHF1b3RldGFiczogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKKyAgICBpc3RleHQ6IGludChjX2RlZmF1bHQ9IjEiKSA9IFRydWUKKyAgICBoZWFkZXI6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisKK0VuY29kZSBhIHN0cmluZyB1c2luZyBxdW90ZWQtcHJpbnRhYmxlIGVuY29kaW5nLgorCitPbiBlbmNvZGluZywgd2hlbiBpc3RleHQgaXMgc2V0LCBuZXdsaW5lcyBhcmUgbm90IGVuY29kZWQsIGFuZCB3aGl0ZQorc3BhY2UgYXQgZW5kIG9mIGxpbmVzIGlzLiAgV2hlbiBpc3RleHQgaXMgbm90IHNldCwgXHIgYW5kIFxuIChDUi9MRikKK2FyZSBib3RoIGVuY29kZWQuICBXaGVuIHF1b3RldGFicyBpcyBzZXQsIHNwYWNlIGFuZCB0YWJzIGFyZSBlbmNvZGVkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX3FwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgcXVvdGV0YWJzLCBpbnQgaXN0ZXh0LCBpbnQgaGVhZGVyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZmMjk5MWJhNjQwZmZmM2UgaW5wdXQ9N2YyYTlhYWEwMDhlOTJiMl0qLwogewogICAgIFB5X3NzaXplX3QgaW4sIG91dDsKLSAgICBQeV9idWZmZXIgcGRhdGE7Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKm9kYXRhOworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGFidWYsICpvZGF0YTsKICAgICBQeV9zc2l6ZV90IGRhdGFsZW4gPSAwLCBvZGF0YWxlbiA9IDA7CiAgICAgUHlPYmplY3QgKnJ2OwogICAgIHVuc2lnbmVkIGludCBsaW5lbGVuID0gMDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImRhdGEiLCAicXVvdGV0YWJzIiwgImlzdGV4dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWFkZXIiLCBOVUxMfTsKLSAgICBpbnQgaXN0ZXh0ID0gMTsKLSAgICBpbnQgcXVvdGV0YWJzID0gMDsKLSAgICBpbnQgaGVhZGVyID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIGNoOwogICAgIGludCBjcmxmID0gMDsKICAgICB1bnNpZ25lZCBjaGFyICpwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAieSp8aWlpIiwga3dsaXN0LCAmcGRhdGEsCi0gICAgICAgICAgJnF1b3RldGFicywgJmlzdGV4dCwgJmhlYWRlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGRhdGEgPSBwZGF0YS5idWY7Ci0gICAgZGF0YWxlbiA9IHBkYXRhLmxlbjsKKyAgICBkYXRhYnVmID0gZGF0YS0+YnVmOworICAgIGRhdGFsZW4gPSBkYXRhLT5sZW47CiAKICAgICAvKiBTZWUgaWYgdGhpcyBzdHJpbmcgaXMgdXNpbmcgQ1JMRiBsaW5lIGVuZHMgKi8KICAgICAvKiBYWFg6IHRoaXMgZnVuY3Rpb24gaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBjb252ZXJ0aW5nIGFsbCBvZgogICAgICAqIHRoZSBlbmQgb2YgbGluZXMgdG8gYmUgdGhlIHNhbWUgZGVwZW5kaW5nIG9uIHRoaXMgZGV0ZWN0aW9uCiAgICAgICogaGVyZSAqLwotICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSBtZW1jaHIoZGF0YSwgJ1xuJywgZGF0YWxlbik7Ci0gICAgaWYgKChwICE9IE5VTEwpICYmIChwID4gZGF0YSkgJiYgKCoocC0xKSA9PSAnXHInKSkKKyAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgbWVtY2hyKGRhdGFidWYsICdcbicsIGRhdGFsZW4pOworICAgIGlmICgocCAhPSBOVUxMKSAmJiAocCA+IGRhdGFidWYpICYmICgqKHAtMSkgPT0gJ1xyJykpCiAgICAgICAgIGNybGYgPSAxOwogCiAgICAgLyogRmlyc3QsIHNjYW4gdG8gc2VlIGhvdyBtYW55IGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlbmNvZGVkICovCiAgICAgaW4gPSAwOwogICAgIHdoaWxlIChpbiA8IGRhdGFsZW4pIHsKLSAgICAgICAgaWYgKChkYXRhW2luXSA+IDEyNikgfHwKLSAgICAgICAgICAgIChkYXRhW2luXSA9PSAnPScpIHx8Ci0gICAgICAgICAgICAoaGVhZGVyICYmIGRhdGFbaW5dID09ICdfJykgfHwKLSAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJy4nKSAmJiAobGluZWxlbiA9PSAwKSAmJgotICAgICAgICAgICAgIChkYXRhW2luKzFdID09ICdcbicgfHwgZGF0YVtpbisxXSA9PSAnXHInIHx8IGRhdGFbaW4rMV0gPT0gMCkpIHx8Ci0gICAgICAgICAgICAoIWlzdGV4dCAmJiAoKGRhdGFbaW5dID09ICdccicpIHx8IChkYXRhW2luXSA9PSAnXG4nKSkpIHx8Ci0gICAgICAgICAgICAoKGRhdGFbaW5dID09ICdcdCcgfHwgZGF0YVtpbl0gPT0gJyAnKSAmJiAoaW4gKyAxID09IGRhdGFsZW4pKSB8fAotICAgICAgICAgICAgKChkYXRhW2luXSA8IDMzKSAmJgotICAgICAgICAgICAgIChkYXRhW2luXSAhPSAnXHInKSAmJiAoZGF0YVtpbl0gIT0gJ1xuJykgJiYKLSAgICAgICAgICAgICAocXVvdGV0YWJzIHx8ICgoZGF0YVtpbl0gIT0gJ1x0JykgJiYgKGRhdGFbaW5dICE9ICcgJykpKSkpCisgICAgICAgIGlmICgoZGF0YWJ1Zltpbl0gPiAxMjYpIHx8CisgICAgICAgICAgICAoZGF0YWJ1Zltpbl0gPT0gJz0nKSB8fAorICAgICAgICAgICAgKGhlYWRlciAmJiBkYXRhYnVmW2luXSA9PSAnXycpIHx8CisgICAgICAgICAgICAoKGRhdGFidWZbaW5dID09ICcuJykgJiYgKGxpbmVsZW4gPT0gMCkgJiYKKyAgICAgICAgICAgICAoZGF0YWJ1ZltpbisxXSA9PSAnXG4nIHx8IGRhdGFidWZbaW4rMV0gPT0gJ1xyJyB8fCBkYXRhYnVmW2luKzFdID09IDApKSB8fAorICAgICAgICAgICAgKCFpc3RleHQgJiYgKChkYXRhYnVmW2luXSA9PSAnXHInKSB8fCAoZGF0YWJ1Zltpbl0gPT0gJ1xuJykpKSB8fAorICAgICAgICAgICAgKChkYXRhYnVmW2luXSA9PSAnXHQnIHx8IGRhdGFidWZbaW5dID09ICcgJykgJiYgKGluICsgMSA9PSBkYXRhbGVuKSkgfHwKKyAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPCAzMykgJiYKKyAgICAgICAgICAgICAoZGF0YWJ1Zltpbl0gIT0gJ1xyJykgJiYgKGRhdGFidWZbaW5dICE9ICdcbicpICYmCisgICAgICAgICAgICAgKHF1b3RldGFicyB8fCAoKGRhdGFidWZbaW5dICE9ICdcdCcpICYmIChkYXRhYnVmW2luXSAhPSAnICcpKSkpKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoKGxpbmVsZW4gKyAzKSA+PSBNQVhMSU5FU0laRSkgewogICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwpAQCAtMTM4OSwyNiArMTQwMywyNiBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGlzdGV4dCAmJgotICAgICAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJ1xuJykgfHwKLSAgICAgICAgICAgICAgICAgKChpbisxIDwgZGF0YWxlbikgJiYgKGRhdGFbaW5dID09ICdccicpICYmCi0gICAgICAgICAgICAgICAgIChkYXRhW2luKzFdID09ICdcbicpKSkpCisgICAgICAgICAgICAgICAgKChkYXRhYnVmW2luXSA9PSAnXG4nKSB8fAorICAgICAgICAgICAgICAgICAoKGluKzEgPCBkYXRhbGVuKSAmJiAoZGF0YWJ1Zltpbl0gPT0gJ1xyJykgJiYKKyAgICAgICAgICAgICAgICAgKGRhdGFidWZbaW4rMV0gPT0gJ1xuJykpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBsaW5lbGVuID0gMDsKICAgICAgICAgICAgICAgICAvKiBQcm90ZWN0IGFnYWluc3Qgd2hpdGVzcGFjZSBvbiBlbmQgb2YgbGluZSAqLwotICAgICAgICAgICAgICAgIGlmIChpbiAmJiAoKGRhdGFbaW4tMV0gPT0gJyAnKSB8fCAoZGF0YVtpbi0xXSA9PSAnXHQnKSkpCisgICAgICAgICAgICAgICAgaWYgKGluICYmICgoZGF0YWJ1Zltpbi0xXSA9PSAnICcpIHx8IChkYXRhYnVmW2luLTFdID09ICdcdCcpKSkKICAgICAgICAgICAgICAgICAgICAgb2RhdGFsZW4gKz0gMjsKICAgICAgICAgICAgICAgICBpZiAoY3JsZikKICAgICAgICAgICAgICAgICAgICAgb2RhdGFsZW4gKz0gMjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG9kYXRhbGVuICs9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGFbaW5dID09ICdccicpCisgICAgICAgICAgICAgICAgaWYgKGRhdGFidWZbaW5dID09ICdccicpCiAgICAgICAgICAgICAgICAgICAgIGluICs9IDI7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKChpbiArIDEgIT0gZGF0YWxlbikgJiYKLSAgICAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gIT0gJ1xuJykgJiYKKyAgICAgICAgICAgICAgICAgICAgKGRhdGFidWZbaW4rMV0gIT0gJ1xuJykgJiYKICAgICAgICAgICAgICAgICAgICAgKGxpbmVsZW4gKyAxKSA+PSBNQVhMSU5FU0laRSkgewogICAgICAgICAgICAgICAgICAgICBsaW5lbGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNybGYpCkBAIC0xNDI5LDcgKzE0NDMsNiBAQAogICAgICAqLwogICAgIG9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgUHlNZW1fTWFsbG9jKG9kYXRhbGVuKTsKICAgICBpZiAob2RhdGEgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE0MzcsMTcgKzE0NTAsMTcgQEAKIAogICAgIGluID0gb3V0ID0gbGluZWxlbiA9IDA7CiAgICAgd2hpbGUgKGluIDwgZGF0YWxlbikgewotICAgICAgICBpZiAoKGRhdGFbaW5dID4gMTI2KSB8fAotICAgICAgICAgICAgKGRhdGFbaW5dID09ICc9JykgfHwKLSAgICAgICAgICAgIChoZWFkZXIgJiYgZGF0YVtpbl0gPT0gJ18nKSB8fAotICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnLicpICYmIChsaW5lbGVuID09IDApICYmCi0gICAgICAgICAgICAgKGRhdGFbaW4rMV0gPT0gJ1xuJyB8fCBkYXRhW2luKzFdID09ICdccicgfHwgZGF0YVtpbisxXSA9PSAwKSkgfHwKLSAgICAgICAgICAgICghaXN0ZXh0ICYmICgoZGF0YVtpbl0gPT0gJ1xyJykgfHwgKGRhdGFbaW5dID09ICdcbicpKSkgfHwKLSAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJ1x0JyB8fCBkYXRhW2luXSA9PSAnICcpICYmIChpbiArIDEgPT0gZGF0YWxlbikpIHx8Ci0gICAgICAgICAgICAoKGRhdGFbaW5dIDwgMzMpICYmCi0gICAgICAgICAgICAgKGRhdGFbaW5dICE9ICdccicpICYmIChkYXRhW2luXSAhPSAnXG4nKSAmJgorICAgICAgICBpZiAoKGRhdGFidWZbaW5dID4gMTI2KSB8fAorICAgICAgICAgICAgKGRhdGFidWZbaW5dID09ICc9JykgfHwKKyAgICAgICAgICAgIChoZWFkZXIgJiYgZGF0YWJ1Zltpbl0gPT0gJ18nKSB8fAorICAgICAgICAgICAgKChkYXRhYnVmW2luXSA9PSAnLicpICYmIChsaW5lbGVuID09IDApICYmCisgICAgICAgICAgICAgKGRhdGFidWZbaW4rMV0gPT0gJ1xuJyB8fCBkYXRhYnVmW2luKzFdID09ICdccicgfHwgZGF0YWJ1ZltpbisxXSA9PSAwKSkgfHwKKyAgICAgICAgICAgICghaXN0ZXh0ICYmICgoZGF0YWJ1Zltpbl0gPT0gJ1xyJykgfHwgKGRhdGFidWZbaW5dID09ICdcbicpKSkgfHwKKyAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJ1x0JyB8fCBkYXRhYnVmW2luXSA9PSAnICcpICYmIChpbiArIDEgPT0gZGF0YWxlbikpIHx8CisgICAgICAgICAgICAoKGRhdGFidWZbaW5dIDwgMzMpICYmCisgICAgICAgICAgICAgKGRhdGFidWZbaW5dICE9ICdccicpICYmIChkYXRhYnVmW2luXSAhPSAnXG4nKSAmJgogICAgICAgICAgICAgIChxdW90ZXRhYnMgfHwKLSAgICAgICAgICAgICghcXVvdGV0YWJzICYmICgoZGF0YVtpbl0gIT0gJ1x0JykgJiYgKGRhdGFbaW5dICE9ICcgJykpKSkpKQorICAgICAgICAgICAgKCFxdW90ZXRhYnMgJiYgKChkYXRhYnVmW2luXSAhPSAnXHQnKSAmJiAoZGF0YWJ1Zltpbl0gIT0gJyAnKSkpKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgobGluZWxlbiArIDMgKT49IE1BWExJTkVTSVpFKSB7CiAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJz0nOwpAQCAtMTQ1NiwxNiArMTQ2OSwxNiBAQAogICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJz0nOwotICAgICAgICAgICAgdG9faGV4KGRhdGFbaW5dLCAmb2RhdGFbb3V0XSk7CisgICAgICAgICAgICB0b19oZXgoZGF0YWJ1Zltpbl0sICZvZGF0YVtvdXRdKTsKICAgICAgICAgICAgIG91dCArPSAyOwogICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIGxpbmVsZW4gKz0gMzsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChpc3RleHQgJiYKLSAgICAgICAgICAgICAgICAoKGRhdGFbaW5dID09ICdcbicpIHx8Ci0gICAgICAgICAgICAgICAgICgoaW4rMSA8IGRhdGFsZW4pICYmIChkYXRhW2luXSA9PSAnXHInKSAmJgotICAgICAgICAgICAgICAgICAoZGF0YVtpbisxXSA9PSAnXG4nKSkpKQorICAgICAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJ1xuJykgfHwKKyAgICAgICAgICAgICAgICAgKChpbisxIDwgZGF0YWxlbikgJiYgKGRhdGFidWZbaW5dID09ICdccicpICYmCisgICAgICAgICAgICAgICAgIChkYXRhYnVmW2luKzFdID09ICdcbicpKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbGluZWxlbiA9IDA7CiAgICAgICAgICAgICAgICAgLyogUHJvdGVjdCBhZ2FpbnN0IHdoaXRlc3BhY2Ugb24gZW5kIG9mIGxpbmUgKi8KQEAgLTE0NzgsMTQgKzE0OTEsMTQgQEAKIAogICAgICAgICAgICAgICAgIGlmIChjcmxmKSBvZGF0YVtvdXQrK10gPSAnXHInOwogICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICdcbic7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGFbaW5dID09ICdccicpCisgICAgICAgICAgICAgICAgaWYgKGRhdGFidWZbaW5dID09ICdccicpCiAgICAgICAgICAgICAgICAgICAgIGluICs9IDI7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKChpbiArIDEgIT0gZGF0YWxlbikgJiYKLSAgICAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gIT0gJ1xuJykgJiYKKyAgICAgICAgICAgICAgICAgICAgKGRhdGFidWZbaW4rMV0gIT0gJ1xuJykgJiYKICAgICAgICAgICAgICAgICAgICAgKGxpbmVsZW4gKyAxKSA+PSBNQVhMSU5FU0laRSkgewogICAgICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnPSc7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjcmxmKSBvZGF0YVtvdXQrK10gPSAnXHInOwpAQCAtMTQ5MywyMiArMTUwNiwyMCBAQAogICAgICAgICAgICAgICAgICAgICBsaW5lbGVuID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGluZWxlbisrOwotICAgICAgICAgICAgICAgIGlmIChoZWFkZXIgJiYgZGF0YVtpbl0gPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgaWYgKGhlYWRlciAmJiBkYXRhYnVmW2luXSA9PSAnICcpIHsKICAgICAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJ18nOwogICAgICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gZGF0YVtpbisrXTsKKyAgICAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gZGF0YWJ1ZltpbisrXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKChydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilvZGF0YSwgb3V0KSkgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5TWVtX0ZyZWUob2RhdGEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIFB5TWVtX0ZyZWUob2RhdGEpOwogICAgIHJldHVybiBydjsKIH0KQEAgLTE1MTYsMjUgKzE1MjcsMjQgQEAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSAqLwogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIGJpbmFzY2lpX21vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJhMmJfdXUiLCAgICAgYmluYXNjaWlfYTJiX3V1LCAgICAgTUVUSF9WQVJBUkdTLCBkb2NfYTJiX3V1fSwKLSAgICB7ImIyYV91dSIsICAgICBiaW5hc2NpaV9iMmFfdXUsICAgICBNRVRIX1ZBUkFSR1MsIGRvY19iMmFfdXV9LAotICAgIHsiYTJiX2Jhc2U2NCIsIGJpbmFzY2lpX2EyYl9iYXNlNjQsIE1FVEhfVkFSQVJHUywgZG9jX2EyYl9iYXNlNjR9LAotICAgIHsiYjJhX2Jhc2U2NCIsIGJpbmFzY2lpX2IyYV9iYXNlNjQsIE1FVEhfVkFSQVJHUywgZG9jX2IyYV9iYXNlNjR9LAotICAgIHsiYTJiX2hxeCIsICAgIGJpbmFzY2lpX2EyYl9ocXgsICAgIE1FVEhfVkFSQVJHUywgZG9jX2EyYl9ocXh9LAotICAgIHsiYjJhX2hxeCIsICAgIGJpbmFzY2lpX2IyYV9ocXgsICAgIE1FVEhfVkFSQVJHUywgZG9jX2IyYV9ocXh9LAotICAgIHsiYjJhX2hleCIsICAgIGJpbmFzY2lpX2hleGxpZnksICAgIE1FVEhfVkFSQVJHUywgZG9jX2hleGxpZnl9LAotICAgIHsiYTJiX2hleCIsICAgIGJpbmFzY2lpX3VuaGV4bGlmeSwgIE1FVEhfVkFSQVJHUywgZG9jX3VuaGV4bGlmeX0sCi0gICAgeyJoZXhsaWZ5IiwgICAgYmluYXNjaWlfaGV4bGlmeSwgICAgTUVUSF9WQVJBUkdTLCBkb2NfaGV4bGlmeX0sCi0gICAgeyJ1bmhleGxpZnkiLCAgYmluYXNjaWlfdW5oZXhsaWZ5LCAgTUVUSF9WQVJBUkdTLCBkb2NfdW5oZXhsaWZ5fSwKLSAgICB7InJsZWNvZGVfaHF4IiwgICBiaW5hc2NpaV9ybGVjb2RlX2hxeCwgTUVUSF9WQVJBUkdTLCBkb2NfcmxlY29kZV9ocXh9LAotICAgIHsicmxlZGVjb2RlX2hxeCIsIGJpbmFzY2lpX3JsZWRlY29kZV9ocXgsIE1FVEhfVkFSQVJHUywKLSAgICAgZG9jX3JsZWRlY29kZV9ocXh9LAotICAgIHsiY3JjX2hxeCIsICAgIGJpbmFzY2lpX2NyY19ocXgsICAgIE1FVEhfVkFSQVJHUywgZG9jX2NyY19ocXh9LAotICAgIHsiY3JjMzIiLCAgICAgIGJpbmFzY2lpX2NyYzMyLCAgICAgIE1FVEhfVkFSQVJHUywgZG9jX2NyYzMyfSwKLSAgICB7ImEyYl9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfcXAsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICBkb2NfYTJiX3FwfSwKLSAgICB7ImIyYV9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfcXAsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICBkb2NfYjJhX3FwfSwKKyAgICBCSU5BU0NJSV9BMkJfVVVfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQjJBX1VVX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0EyQl9CQVNFNjRfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQjJBX0JBU0U2NF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9BMkJfSFFYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0IyQV9IUVhfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQTJCX0hFWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9CMkFfSEVYX01FVEhPRERFRgorICAgIHsidW5oZXhsaWZ5IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl9oZXgsIE1FVEhfVkFSQVJHUywKKyAgICAgICAgYmluYXNjaWlfYTJiX2hleF9fZG9jX199LAorICAgIHsiaGV4bGlmeSIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfaGV4LCBNRVRIX1ZBUkFSR1MsCisgICAgICAgIGJpbmFzY2lpX2IyYV9oZXhfX2RvY19ffSwKKyAgICBCSU5BU0NJSV9STEVDT0RFX0hRWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9STEVERUNPREVfSFFYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0NSQ19IUVhfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQ1JDMzJfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQTJCX1FQX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0IyQV9RUF9NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKaW5kZXggOWU5ZTk2Yy4uMDEzYzNmYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYwpAQCAtMjMsMTggKzIzLDMzIEBACiAgKiBBODQ0ICAgICAgICAgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICBVKzIwMTUgSE9SSVpPTlRBTCBCQVIKICAqLwogCi0jZGVmaW5lIEdCS19ERUNPREUoZGMxLCBkYzIsIGFzc2kpIFwKLSAgICBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGFhKSAoYXNzaSkgPSAweDIwMTQ7IFwKLSAgICBlbHNlIGlmICgoZGMxKSA9PSAweGE4ICYmIChkYzIpID09IDB4NDQpIChhc3NpKSA9IDB4MjAxNTsgXAotICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhNCkgKGFzc2kpID0gMHgwMGI3OyBcCi0gICAgZWxzZSBUUllNQVBfREVDKGdiMjMxMiwgYXNzaSwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCk7IFwKLSAgICBlbHNlIFRSWU1BUF9ERUMoZ2JrZXh0LCBhc3NpLCBkYzEsIGRjMik7CisjZGVmaW5lIEdCS19ERUNPREUoZGMxLCBkYzIsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGFhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoZGMxKSA9PSAweGE4ICYmIChkYzIpID09IDB4NDQpIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YTQpIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MDBiNyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCkpIHsgXAorICAgICAgICBPVVRDSEFSKGRlY29kZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGdia2V4dCwgZGVjb2RlZCwgZGMxLCBkYzIpKSB7ICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGRlY29kZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZGVmaW5lIEdCS19FTkNPREUoY29kZSwgYXNzaSkgXAotICAgIGlmICgoY29kZSkgPT0gMHgyMDE0KSAoYXNzaSkgPSAweGExYWE7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgPT0gMHgyMDE1KSAoYXNzaSkgPSAweGE4NDQ7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgPT0gMHgwMGI3KSAoYXNzaSkgPSAweGExYTQ7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkNfQ09ORChnYmNvbW1vbiwgYXNzaSwgY29kZSkpOworI2RlZmluZSBHQktfRU5DT0RFKGNvZGUsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjb2RlKSA9PSAweDIwMTQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhhMWFhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGNvZGUpID09IDB4MjAxNSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4YTg0NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjb2RlKSA9PSAweDAwYjcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGExYTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGFzc2ksIGNvZGUpKSB7IFwKKyAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogLyoKICAqIEdCMjMxMiBjb2RlYwpAQCAtNDIsMjcgKzU3LDMxIEBACiAKIEVOQ09ERVIoZ2IyMzEyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC03MiwyMCArOTEsMjEgQEAKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqKmluYnVmOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoZ2IyMzEyLCAqKm91dGJ1ZiwgYyBeIDB4ODAsIElOMiBeIDB4ODApIHsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCBkZWNvZGVkLCBjIF4gMHg4MCwgSU5CWVRFMiBeIDB4ODApKSB7CisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTk4LDI4ICsxMTgsMzEgQEAKIAogRU5DT0RFUihnYmspCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgR0JLX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIHJldHVybiAxOwotCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApIC8qIE1TQiB1bnNldDogR0IyMzEyICovCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQorICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSk7IC8qIE1TQiBzZXQ6IEdCSyAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7IC8qIE1TQiB1bnNldDogR0IyMzEyICovCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMjgsMjIgKzE1MSwyMiBAQAogREVDT0RFUihnYmspCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgR0JLX0RFQ09ERShjLCBJTjIsICoqb3V0YnVmKQotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBHQktfREVDT0RFKGMsIElOQllURTIsIHdyaXRlcikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTU2LDcyICsxNzksNjMgQEAKIAogRU5DT0RFUihnYjE4MDMwKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMShjKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaWYgKGMgPiAweDEwRkZGRikKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotICAgICAgICAgICAgcmV0dXJuIDI7IC8qIHN1cnJvZ2F0ZXMgcGFpciAqLwotI2Vsc2UKLSAgICAgICAgICAgIHJldHVybiAxOwotI2VuZGlmCi0gICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMDAwMCkgewotICAgICAgICAgICAgdWNzNF90IHRjID0gYyAtIDB4MTAwMDA7CisgICAgICAgIGlmIChjID49IDB4MTAwMDApIHsKKyAgICAgICAgICAgIFB5X1VDUzQgdGMgPSBjIC0gMHgxMDAwMDsKKyAgICAgICAgICAgIGFzc2VydCAoYyA8PSAweDEwRkZGRik7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KTsKIAotICAgICAgICAgICAgT1VUNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgT1VUQllURTQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgIE9VVDMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpCisgICAgICAgICAgICBPVVRCWVRFMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSk7CiAgICAgICAgICAgICB0YyAvPSAxMjY7Ci0gICAgICAgICAgICBPVVQyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICBPVVRCWVRFMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgT1VUMSgodW5zaWduZWQgY2hhcikodGMgKyAweDkwKSkKKyAgICAgICAgICAgIE9VVEJZVEUxKCh1bnNpZ25lZCBjaGFyKSh0YyArIDB4OTApKTsKIAotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0gICAgICAgICAgICBORVhUKDIsIDQpIC8qIHN1cnJvZ2F0ZXMgcGFpciAqLwotI2Vsc2UKLSAgICAgICAgICAgIE5FWFQoMSwgNCkKLSNlbmRpZgorICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgR0JLX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoZ2IxODAzMGV4dCwgY29kZSwgYyk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoZ2IxODAzMGV4dCwgY29kZSwgYykpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY29uc3Qgc3RydWN0IF9nYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXMgKnV0cnJhbmdlOwogCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCk7CiAKICAgICAgICAgICAgIGZvciAodXRycmFuZ2UgPSBnYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXM7CiAgICAgICAgICAgICAgICAgIHV0cnJhbmdlLT5maXJzdCAhPSAwOwogICAgICAgICAgICAgICAgICB1dHJyYW5nZSsrKQogICAgICAgICAgICAgICAgIGlmICh1dHJyYW5nZS0+Zmlyc3QgPD0gYyAmJgogICAgICAgICAgICAgICAgICAgICBjIDw9IHV0cnJhbmdlLT5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgdGM7CisgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdGM7CiAKICAgICAgICAgICAgICAgICAgICAgdGMgPSBjIC0gdXRycmFuZ2UtPmZpcnN0ICsKICAgICAgICAgICAgICAgICAgICAgICAgICB1dHJyYW5nZS0+YmFzZTsKIAotICAgICAgICAgICAgICAgICAgICBPVVQ0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEU0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgT1VUMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpOwogICAgICAgICAgICAgICAgICAgICB0YyAvPSAxMjY7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgICAgICAgICBPVVQxKCh1bnNpZ25lZCBjaGFyKXRjICsgMHg4MSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTEoKHVuc2lnbmVkIGNoYXIpdGMgKyAweDgxKTsKIAotICAgICAgICAgICAgICAgICAgICBORVhUKDEsIDQpCisgICAgICAgICAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjMwLDEzICsyNDQsMTMgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpKSAvKiBNU0Igc2V0OiBHQksgb3IgR0IxODAzMGV4dCAqLworICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSk7IC8qIE1TQiBzZXQ6IEdCSyBvciBHQjE4MDMwZXh0ICovCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApIC8qIE1TQiB1bnNldDogR0IyMzEyICovCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7IC8qIE1TQiB1bnNldDogR0IyMzEyICovCiAKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjQ1LDYxICsyNTksNjIgQEAKIERFQ09ERVIoZ2IxODAzMCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjEsIGMyOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTEsIGMyOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIGMyID0gSU4yOworICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgIGlmIChjMiA+PSAweDMwICYmIGMyIDw9IDB4MzkpIHsgLyogNCBieXRlcyBzZXEgKi8KICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBfZ2IxODAzMF90b191bmlibXBfcmFuZ2VzICp1dHI7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMzLCBjNDsKLSAgICAgICAgICAgIHVjczRfdCBsc2VxOworICAgICAgICAgICAgUHlfVUNTNCBsc2VxOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDQpCi0gICAgICAgICAgICBjMyA9IElOMzsKLSAgICAgICAgICAgIGM0ID0gSU40OworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig0KTsKKyAgICAgICAgICAgIGMzID0gSU5CWVRFMzsKKyAgICAgICAgICAgIGM0ID0gSU5CWVRFNDsKICAgICAgICAgICAgIGlmIChjIDwgMHg4MSB8fCBjMyA8IDB4ODEgfHwgYzQgPCAweDMwIHx8IGM0ID4gMHgzOSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIGMgLT0gMHg4MTsgIGMyIC09IDB4MzA7CiAgICAgICAgICAgICBjMyAtPSAweDgxOyBjNCAtPSAweDMwOwogCiAgICAgICAgICAgICBpZiAoYyA8IDQpIHsgLyogVSswMDgwIC0gVStGRkZGICovCi0gICAgICAgICAgICAgICAgbHNlcSA9ICgodWNzNF90KWMgKiAxMCArIGMyKSAqIDEyNjAgKwotICAgICAgICAgICAgICAgICAgICAodWNzNF90KWMzICogMTAgKyBjNDsKKyAgICAgICAgICAgICAgICBsc2VxID0gKChQeV9VQ1M0KWMgKiAxMCArIGMyKSAqIDEyNjAgKworICAgICAgICAgICAgICAgICAgICAoUHlfVUNTNCljMyAqIDEwICsgYzQ7CiAgICAgICAgICAgICAgICAgaWYgKGxzZXEgPCAzOTQyMCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHV0ciA9IGdiMTgwMzBfdG9fdW5pYm1wX3JhbmdlczsKICAgICAgICAgICAgICAgICAgICAgICAgICBsc2VxID49ICh1dHIgKyAxKS0+YmFzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB1dHIrKykgOwotICAgICAgICAgICAgICAgICAgICBPVVQxKHV0ci0+Zmlyc3QgLSB1dHItPmJhc2UgKyBsc2VxKQotICAgICAgICAgICAgICAgICAgICBORVhUKDQsIDEpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIodXRyLT5maXJzdCAtIHV0ci0+YmFzZSArIGxzZXEpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDQpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjID49IDE1KSB7IC8qIFUrMTAwMDAgLSBVKzEwRkZGRiAqLwotICAgICAgICAgICAgICAgIGxzZXEgPSAweDEwMDAwICsgKCgodWNzNF90KWMtMTUpICogMTAgKyBjMikKLSAgICAgICAgICAgICAgICAgICAgKiAxMjYwICsgKHVjczRfdCljMyAqIDEwICsgYzQ7CisgICAgICAgICAgICAgICAgbHNlcSA9IDB4MTAwMDAgKyAoKChQeV9VQ1M0KWMtMTUpICogMTAgKyBjMikKKyAgICAgICAgICAgICAgICAgICAgKiAxMjYwICsgKFB5X1VDUzQpYzMgKiAxMCArIGM0OwogICAgICAgICAgICAgICAgIGlmIChsc2VxIDw9IDB4MTBGRkZGKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChsc2VxKTsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTig0KQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGxzZXEpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDQpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogCi0gICAgICAgIEdCS19ERUNPREUoYywgYzIsICoqb3V0YnVmKQotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoZ2IxODAzMGV4dCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgR0JLX0RFQ09ERShjLCBjMiwgd3JpdGVyKQorICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGdiMTgwMzBleHQsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTMxOSw0OCArMzM0LDUxIEBACiBFTkNPREVSX1JFU0VUKGh6KQogewogICAgIGlmIChzdGF0ZS0+aSAhPSAwKSB7Ci0gICAgICAgIFdSSVRFMignficsICd9JykKKyAgICAgICAgV1JJVEVCWVRFMignficsICd9Jyk7CiAgICAgICAgIHN0YXRlLT5pID0gMDsKLSAgICAgICAgTkVYVF9PVVQoMikKKyAgICAgICAgTkVYVF9PVVQoMik7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCiBFTkNPREVSKGh6KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmkgPT0gMCkgewotICAgICAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBXUklURTMoJ34nLCAnfScsICh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAzKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTMoJ34nLCAnfScsICh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMyk7CiAgICAgICAgICAgICAgICAgc3RhdGUtPmkgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBVQ1M0SU5WQUxJRChjKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSAvKiBNU0Igc2V0OiBHQksgKi8KICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChzdGF0ZS0+aSA9PSAwKSB7Ci0gICAgICAgICAgICBXUklURTQoJ34nLCAneycsIGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpCi0gICAgICAgICAgICBORVhUKDEsIDQpCisgICAgICAgICAgICBXUklURUJZVEU0KCd+JywgJ3snLCBjb2RlID4+IDgsIGNvZGUgJiAweGZmKTsKKyAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgICAgICBzdGF0ZS0+aSA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBXUklURTIoY29kZSA+PiA4LCBjb2RlICYgMHhmZikKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoY29kZSA+PiA4LCBjb2RlICYgMHhmZik7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zODIsMTUgKzQwMCwxNiBAQAogREVDT0RFUihoeikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA9PSAnficpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBJTjI7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyID0gSU5CWVRFMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKICAgICAgICAgICAgIGlmIChjMiA9PSAnficpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoJ34nKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKCd+Jyk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMyID09ICd7JyAmJiBzdGF0ZS0+aSA9PSAwKQpAQCAtNDAxLDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgOyAvKiBsaW5lLWNvbnRpbnVhdGlvbiAqLwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgyLCAwKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00MDksMTQgKzQyOCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKHN0YXRlLT5pID09IDApIHsgLyogQVNDSUkgbW9kZSAqLwotICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsgLyogR0IgbW9kZSAqLwotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoZ2IyMzEyLCAqKm91dGJ1ZiwgYywgSU4yKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgYywgSU5CWVRFMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMKaW5kZXggZDNhZDA0Yi4uYjdhN2ViZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYwpAQCAtMzgsMzUgKzM4LDM5IEBACiAKIEVOQ09ERVIoYmlnNWhrc2NzKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gKippbmJ1ZjsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgKipvdXRidWYgPSAodW5zaWduZWQgY2hhciljOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGluc2l6ZSA9IDE7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIGlmIChjIDwgMHgxMDAwMCkgewotICAgICAgICAgICAgVFJZTUFQX0VOQyhiaWc1aGtzY3NfYm1wLCBjb2RlLCBjKSB7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1aGtzY3NfYm1wLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgIGlmIChjb2RlID09IE1VTFRJQykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0ID49IDIgJiYKKyAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zID49IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IElOQ0hBUjI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gMDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPj0gMiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKChjICYgMHhmZmRmKSA9PSAweDAwY2EpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoKCgqaW5idWYpWzFdICYgMHhmZmY3KSA9PSAweDAzMDQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKGMyICYgMHhmZmY3KSA9PSAweDAzMDQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gYmlnNWhrc2NzX3BhaXJlbmNfdGFibGVbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjID4+IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgqaW5idWYpWzFdID4+IDMpKSAmIDNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYzIgPj4gMykpICYgM107CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpemUgPSAyOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlubGVmdCA8IDIgJiYKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoZmxhZ3MgJiBNQkVOQ19GTFVTSCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTc3LDIxICs4MSwyNSBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYykpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPCAweDIwMDAwKQogICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgZWxzZSBpZiAoYyA8IDB4MzAwMDApIHsKLSAgICAgICAgICAgIFRSWU1BUF9FTkMoYmlnNWhrc2NzX25vbmJtcCwgY29kZSwgYyAmIDB4ZmZmZik7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiBpbnNpemU7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1aGtzY3Nfbm9uYm1wLCBjb2RlLCBjICYgMHhmZmZmKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweEZGKQotICAgICAgICBORVhUKGluc2l6ZSwgMikKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOworICAgICAgICBORVhUKGluc2l6ZSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMDIsMzMgKzExMCwzMiBAQAogREVDT0RFUihiaWc1aGtzY3MpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotICAgICAgICB1Y3M0X3QgZGVjb2RlZDsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIGlmICgweGM2ID4gYyB8fCBjID4gMHhjOCB8fCAoYyA8IDB4YzcgJiYgSU4yIDwgMHhhMSkpIHsKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMikgewotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgaWYgKDB4YzYgPiBjIHx8IGMgPiAweGM4IHx8IChjIDwgMHhjNyAmJiBJTkJZVEUyIDwgMHhhMSkpIHsKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGJpZzUsIGRlY29kZWQsIGMsIElOQllURTIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgVFJZTUFQX0RFQyhiaWc1aGtzY3MsIGRlY29kZWQsIGMsIElOMikKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoYmlnNWhrc2NzLCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHMgPSBCSDJTKGMsIElOMik7CisgICAgICAgICAgICBpbnQgcyA9IEJIMlMoYywgSU5CWVRFMik7CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoaW50YmFzZTsKIAogICAgICAgICAgICAgYXNzZXJ0KDB4ODcgPD0gYyAmJiBjIDw9IDB4ZmUpOwotICAgICAgICAgICAgYXNzZXJ0KDB4NDAgPD0gSU4yICYmIElOMiA8PSAweGZlKTsKKyAgICAgICAgICAgIGFzc2VydCgweDQwIDw9IElOQllURTIgJiYgSU5CWVRFMiA8PSAweGZlKTsKIAogICAgICAgICAgICAgaWYgKEJIMlMoMHg4NywgMHg0MCkgPD0gcyAmJiBzIDw9IEJIMlMoMHhhMCwgMHhmZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaGludGJhc2UgPSBiaWc1aGtzY3NfcGhpbnRfMDsKQEAgLTE0NiwyNSArMTUzLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9JTlRFUk5BTDsKIAogICAgICAgICAgICAgaWYgKGhpbnRiYXNlW3MgPj4gM10gJiAoMSA8PCAocyAmIDcpKSkgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoZGVjb2RlZCB8IDB4MjAwMDApCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkIHwgMHgyMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgT1VUMShkZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAoKGMgPDwgOCkgfCBJTjIpIHsKLSAgICAgICAgY2FzZSAweDg4NjI6IFdSSVRFMigweDAwY2EsIDB4MDMwNCk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4ODg2NDogV1JJVEUyKDB4MDBjYSwgMHgwMzBjKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHg4OGEzOiBXUklURTIoMHgwMGVhLCAweDAzMDQpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDg4YTU6IFdSSVRFMigweDAwZWEsIDB4MDMwYyk7IGJyZWFrOworICAgICAgICBzd2l0Y2ggKChjIDw8IDgpIHwgSU5CWVRFMikgeworICAgICAgICBjYXNlIDB4ODg2MjogT1VUQ0hBUjIoMHgwMGNhLCAweDAzMDQpOyBicmVhazsKKyAgICAgICAgY2FzZSAweDg4NjQ6IE9VVENIQVIyKDB4MDBjYSwgMHgwMzBjKTsgYnJlYWs7CisgICAgICAgIGNhc2UgMHg4OGEzOiBPVVRDSEFSMigweDAwZWEsIDB4MDMwNCk7IGJyZWFrOworICAgICAgICBjYXNlIDB4ODhhNTogT1VUQ0hBUjIoMHgwMGVhLCAweDAzMGMpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogcmV0dXJuIDE7CiAgICAgICAgIH0KIAotICAgICAgICBORVhUKDIsIDIpIC8qIGFsbCBkZWNvZGVkIGNvZGVwb2ludHMgYXJlIHBhaXJzLCBhYm92ZS4gKi8KKyAgICAgICAgTkVYVF9JTigyKTsgLyogYWxsIGRlY29kZWQgY29kZXBvaW50cyBhcmUgcGFpcnMsIGFib3ZlLiAqLwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYwppbmRleCBjYmMxNTQyLi41YzQwMWFhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYwpAQCAtNzMsNyArNzMsNyBAQAogI2RlZmluZSBGX1NISUZURUQgICAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIEZfRVNDVEhST1VHSE9VVCAgICAgICAgIDB4MDIKIAotI2RlZmluZSBTVEFURV9TRVRHKGRuLCB2KSAgICAgICAoKHN0YXRlKS0+Y1tkbl0pID0gKHYpOworI2RlZmluZSBTVEFURV9TRVRHKGRuLCB2KSAgICAgICBkbyB7ICgoc3RhdGUpLT5jW2RuXSkgPSAodik7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRFX0dFVEcoZG4pICAgICAgICAgICgoc3RhdGUpLT5jW2RuXSkKIAogI2RlZmluZSBTVEFURV9HMCAgICAgICAgICAgICAgICBTVEFURV9HRVRHKDApCkBAIC04NSwxMCArODUsMTAgQEAKICNkZWZpbmUgU1RBVEVfU0VURzIodikgICAgICAgICAgU1RBVEVfU0VURygyLCB2KQogI2RlZmluZSBTVEFURV9TRVRHMyh2KSAgICAgICAgICBTVEFURV9TRVRHKDMsIHYpCiAKLSNkZWZpbmUgU1RBVEVfU0VURkxBRyhmKSAgICAgICAgKChzdGF0ZSktPmNbNF0pIHw9IChmKTsKKyNkZWZpbmUgU1RBVEVfU0VURkxBRyhmKSAgICAgICAgZG8geyAoKHN0YXRlKS0+Y1s0XSkgfD0gKGYpOyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFURV9HRVRGTEFHKGYpICAgICAgICAoKHN0YXRlKS0+Y1s0XSAmIChmKSkKLSNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHKGYpICAgICAgKChzdGF0ZSktPmNbNF0pICY9IH4oZik7Ci0jZGVmaW5lIFNUQVRFX0NMRUFSRkxBR1MoKSAgICAgICgoc3RhdGUpLT5jWzRdKSA9IDA7CisjZGVmaW5lIFNUQVRFX0NMRUFSRkxBRyhmKSAgICAgIGRvIHsgKChzdGF0ZSktPmNbNF0pICY9IH4oZik7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNUQVRFX0NMRUFSRkxBR1MoKSAgICAgIGRvIHsgKChzdGF0ZSktPmNbNF0pID0gMDsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBJU08yMDIyX0NPTkZJRyAgICAgICAgICAoKGNvbnN0IHN0cnVjdCBpc28yMDIyX2NvbmZpZyAqKWNvbmZpZykKICNkZWZpbmUgQ09ORklHX0lTU0VUKGZsYWcpICAgICAgKElTTzIwMjJfQ09ORklHLT5mbGFncyAmIChmbGFnKSkKQEAgLTEwMiw4ICsxMDIsOCBAQAogLyotKi0gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIC0qLSovCiAKIHR5cGVkZWYgaW50ICgqaXNvMjAyMl9pbml0X2Z1bmMpKHZvaWQpOwotdHlwZWRlZiB1Y3M0X3QgKCppc28yMDIyX2RlY29kZV9mdW5jKShjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLXR5cGVkZWYgREJDSEFSICgqaXNvMjAyMl9lbmNvZGVfZnVuYykoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpOwordHlwZWRlZiBQeV9VQ1M0ICgqaXNvMjAyMl9kZWNvZGVfZnVuYykoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Cit0eXBlZGVmIERCQ0hBUiAoKmlzbzIwMjJfZW5jb2RlX2Z1bmMpKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCk7CiAKIHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uIHsKICAgICB1bnNpZ25lZCBjaGFyIG1hcms7CkBAIC0xMzIsNTMgKzEzMiw1MiBAQAogCiBFTkNPREVSX0lOSVQoaXNvMjAyMikKIHsKLSAgICBTVEFURV9DTEVBUkZMQUdTKCkKLSAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpCisgICAgU1RBVEVfQ0xFQVJGTEFHUygpOworICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpOwogICAgIHJldHVybiAwOwogfQogCiBFTkNPREVSX1JFU0VUKGlzbzIwMjIpCiB7CiAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkgewotICAgICAgICBXUklURTEoU0kpCi0gICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCisgICAgICAgIFdSSVRFQllURTEoU0kpOworICAgICAgICBORVhUX09VVCgxKTsKKyAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CiAgICAgfQogICAgIGlmIChTVEFURV9HMCAhPSBDSEFSU0VUX0FTQ0lJKSB7Ci0gICAgICAgIFdSSVRFMyhFU0MsICcoJywgJ0InKQotICAgICAgICBORVhUX09VVCgzKQotICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQorICAgICAgICBXUklURUJZVEUzKEVTQywgJygnLCAnQicpOworICAgICAgICBORVhUX09VVCgzKTsKKyAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCiBFTkNPREVSKGlzbzIwMjIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKICAgICAgICAgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gKmRzZzsKICAgICAgICAgREJDSEFSIGVuY29kZWQ7Ci0gICAgICAgIHVjczRfdCBjID0gKippbmJ1ZjsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgUHlfc3NpemVfdCBpbnNpemU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7CiAgICAgICAgICAgICBpZiAoU1RBVEVfRzAgIT0gQ0hBUlNFVF9BU0NJSSkgewotICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICcoJywgJ0InKQotICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMykKKyAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJygnLCAnQicpOworICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkgewotICAgICAgICAgICAgICAgIFdSSVRFMShTSSkKLSAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMShTSSk7CisgICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBERUNPREVfU1VSUk9HQVRFKGMpCi0gICAgICAgIGluc2l6ZSA9IEdFVF9JTlNJWkUoYyk7CisgICAgICAgIGluc2l6ZSA9IDE7CiAKICAgICAgICAgZW5jb2RlZCA9IE1BUF9VTk1BUFBBQkxFOwogICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7IGRzZy0+bWFyazsgZHNnKyspIHsKQEAgLTE4NywyNCArMTg2LDE0IEBACiAgICAgICAgICAgICBpZiAoZW5jb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpIHsKICAgICAgICAgICAgICAgICAvKiB0aGlzIGltcGxlbWVudGF0aW9uIHdvbid0IHdvcmsgZm9yIHBhaXIKICAgICAgICAgICAgICAgICAgKiBvZiBub24tYm1wIGNoYXJhY3RlcnMuICovCi0gICAgICAgICAgICAgICAgaWYgKGlubGVmdCA8IDIpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzICYgTUJFTkNfRkxVU0gpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gLTE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMjsKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMikgewotICAgICAgICAgICAgICAgICAgICB1Y3M0X3QgdTRpblsyXTsKLSAgICAgICAgICAgICAgICAgICAgdTRpblswXSA9ICh1Y3M0X3QpSU4xOwotICAgICAgICAgICAgICAgICAgICB1NGluWzFdID0gKHVjczRfdClJTjI7Ci0gICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSBkc2ctPmVuY29kZXIodTRpbiwgJmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSBkc2ctPmVuY29kZXIoJmMsICZsZW5ndGgpOwotI2Vsc2UKICAgICAgICAgICAgICAgICBlbmNvZGVkID0gZHNnLT5lbmNvZGVyKCZjLCAmbGVuZ3RoKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIGlmIChlbmNvZGVkICE9IE1BUF9VTk1BUFBBQkxFKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2l6ZSA9IGxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMjEsNDcgKzIxMCw0NiBAQAogICAgICAgICBzd2l0Y2ggKGRzZy0+cGxhbmUpIHsKICAgICAgICAgY2FzZSAwOiAvKiBHMCAqLwogICAgICAgICAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkgewotICAgICAgICAgICAgICAgIFdSSVRFMShTSSkKLSAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMShTSSk7CisgICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoU1RBVEVfRzAgIT0gZHNnLT5tYXJrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRzZy0+d2lkdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnKCcsIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJygnLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHNnLT5tYXJrID09IENIQVJTRVRfSklTWDAyMDgpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJyQnLCBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMykKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFMyhFU0MsICckJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBXUklURTQoRVNDLCAnJCcsICcoJywKLSAgICAgICAgICAgICAgICAgICAgICAgIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCg0KQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEU0KEVTQywgJyQnLCAnKCcsCisgICAgICAgICAgICAgICAgICAgICAgICBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCg0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOiAvKiBHMSAqLwogICAgICAgICAgICAgaWYgKFNUQVRFX0cxICE9IGRzZy0+bWFyaykgewogICAgICAgICAgICAgICAgIGlmIChkc2ctPndpZHRoID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJyknLCBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcxKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMykKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFMyhFU0MsICcpJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBXUklURTQoRVNDLCAnJCcsICcpJywKLSAgICAgICAgICAgICAgICAgICAgICAgIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCg0KQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEU0KEVTQywgJyQnLCAnKScsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcxKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKFNPKQotICAgICAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMShTTyk7CisgICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IC8qIEcyIGFuZCBHMyBpcyBub3Qgc3VwcG9ydGVkOiBubyBlbmNvZGluZyBpbgpAQCAtMjcwLDE0ICsyNTgsMTQgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChkc2ctPndpZHRoID09IDEpIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhcillbmNvZGVkKQotICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpZW5jb2RlZCk7CisgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFdSSVRFMihlbmNvZGVkID4+IDgsIGVuY29kZWQgJiAweGZmKQotICAgICAgICAgICAgTkVYVF9PVVQoMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoZW5jb2RlZCA+PiA4LCBlbmNvZGVkICYgMHhmZik7CisgICAgICAgICAgICBORVhUX09VVCgyKTsKICAgICAgICAgfQotICAgICAgICBORVhUX0lOKGluc2l6ZSkKKyAgICAgICAgTkVYVF9JTkNIQVIoaW5zaXplKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTI4NSwxNyArMjczLDE3IEBACiAKIERFQ09ERVJfSU5JVChpc28yMDIyKQogewotICAgIFNUQVRFX0NMRUFSRkxBR1MoKQotICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9TRVRHMihDSEFSU0VUX0FTQ0lJKQorICAgIFNUQVRFX0NMRUFSRkxBR1MoKTsKKyAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKKyAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKTsKKyAgICBTVEFURV9TRVRHMihDSEFSU0VUX0FTQ0lJKTsKICAgICByZXR1cm4gMDsKIH0KIAogREVDT0RFUl9SRVNFVChpc28yMDIyKQogewotICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKKyAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKKyAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzE0LDggKzMwMiw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0pJU1gwMjA4X0VYVCkgJiYgaSsxIDwgKmlubGVmdCAmJgotICAgICAgICAgICAgICAgICAoKmluYnVmKVtpXSA9PSAnJicgJiYgKCppbmJ1ZilbaSsxXSA9PSAnQCcpCisgICAgICAgICAgICAgICAgICgqaW5idWYpW2ldID09ICcmJyAmJiAoKmluYnVmKVtpKzFdID09ICdAJykgewogICAgICAgICAgICAgaSArPSAyOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGkgPj0gTUFYX0VTQ1NFUUxFTikKQEAgLTMyMywyNyArMzEyLDMzIEBACiAKICAgICBzd2l0Y2ggKGVzY2xlbikgewogICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKElOMiA9PSAnJCcpIHsKLSAgICAgICAgICAgIGNoYXJzZXQgPSBJTjMgfCBDSEFSU0VUX0RCQ1M7CisgICAgICAgIGlmIChJTkJZVEUyID09ICckJykgeworICAgICAgICAgICAgY2hhcnNldCA9IElOQllURTMgfCBDSEFSU0VUX0RCQ1M7CiAgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyc2V0ID0gSU4zOwotICAgICAgICAgICAgaWYgKElOMiA9PSAnKCcpIGRlc2lnbmF0aW9uID0gMDsKLSAgICAgICAgICAgIGVsc2UgaWYgKElOMiA9PSAnKScpIGRlc2lnbmF0aW9uID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOMiA9PSAnLicpCisgICAgICAgICAgICBjaGFyc2V0ID0gSU5CWVRFMzsKKyAgICAgICAgICAgIGlmIChJTkJZVEUyID09ICcoJykKKyAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChJTkJZVEUyID09ICcpJykKKyAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0cyKSAmJiBJTkJZVEUyID09ICcuJykKICAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDI7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAzOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAzOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAgaWYgKElOMiAhPSAnJCcpCisgICAgICAgIGlmIChJTkJZVEUyICE9ICckJykKICAgICAgICAgICAgIHJldHVybiA0OwogCi0gICAgICAgIGNoYXJzZXQgPSBJTjQgfCBDSEFSU0VUX0RCQ1M7Ci0gICAgICAgIGlmIChJTjMgPT0gJygnKSBkZXNpZ25hdGlvbiA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKElOMyA9PSAnKScpIGRlc2lnbmF0aW9uID0gMTsKLSAgICAgICAgZWxzZSByZXR1cm4gNDsKKyAgICAgICAgY2hhcnNldCA9IElOQllURTQgfCBDSEFSU0VUX0RCQ1M7CisgICAgICAgIGlmIChJTkJZVEUzID09ICcoJykKKyAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMDsKKyAgICAgICAgZWxzZSBpZiAoSU5CWVRFMyA9PSAnKScpCisgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIDY6IC8qIGRlc2lnbmF0aW9uIHdpdGggcHJlZml4ICovCiAgICAgICAgIGlmIChDT05GSUdfSVNTRVQoVVNFX0pJU1gwMjA4X0VYVCkgJiYKQEAgLTM2Myw1OCArMzU4LDY1IEBACiAgICAgaWYgKGNoYXJzZXQgIT0gQ0hBUlNFVF9BU0NJSSkgewogICAgICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnOwogCi0gICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsgZHNnLT5tYXJrOyBkc2crKykKKyAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOyBkc2ctPm1hcms7IGRzZysrKSB7CiAgICAgICAgICAgICBpZiAoZHNnLT5tYXJrID09IGNoYXJzZXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgaWYgKCFkc2ctPm1hcmspCiAgICAgICAgICAgICByZXR1cm4gZXNjbGVuOwogICAgIH0KIAotICAgIFNUQVRFX1NFVEcoZGVzaWduYXRpb24sIGNoYXJzZXQpCisgICAgU1RBVEVfU0VURyhkZXNpZ25hdGlvbiwgY2hhcnNldCk7CiAgICAgKmlubGVmdCAtPSBlc2NsZW47CiAgICAgKCppbmJ1ZikgKz0gZXNjbGVuOwogICAgIHJldHVybiAwOwogfQogCi0jZGVmaW5lIElTTzg4NTlfN19ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA8IDB4YTApIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpIDwgMHhjMCAmJiAoMHgyODhmM2JjOUwgJiAoMUwgPDwgKChjKS0weGEwKSkpKSAgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID49IDB4YjQgJiYgKGMpIDw9IDB4ZmUgJiYgKChjKSA+PSAweGQ0IHx8ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgKDB4YmZmZmZkNzdMICYgKDFMIDw8ICgoYyktMHhiNCkpKSkpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IDB4MDJkMCArIChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4YTEpIChhc3NpKSA9IDB4MjAxODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4YTIpIChhc3NpKSA9IDB4MjAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4YWYpIChhc3NpKSA9IDB4MjAxNTsKKyNkZWZpbmUgSVNPODg1OV83X0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA8IDB4YTApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA8IDB4YzAgJiYgKDB4Mjg4ZjNiYzlMICYgKDFMIDw8ICgoYyktMHhhMCkpKSkgeyBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID49IDB4YjQgJiYgKGMpIDw9IDB4ZmUgJiYgKChjKSA+PSAweGQ0IHx8ICAgICAgIFwKKyAgICAgICAgICAgICAoMHhiZmZmZmQ3N0wgJiAoMUwgPDwgKChjKS0weGI0KSkpKSkgeyAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgwMmQwICsgKGMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID09IDB4YTEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPT0gMHhhMikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxOSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA9PSAweGFmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogc3RhdGljIFB5X3NzaXplX3QKIGlzbzIwMjJwcm9jZXNzZzIoY29uc3Qgdm9pZCAqY29uZmlnLCBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbmJ1ZiwgUHlfc3NpemVfdCAqaW5sZWZ0LAotICAgICAgICAgICAgICAgICBQeV9VTklDT0RFICoqb3V0YnVmLCBQeV9zc2l6ZV90ICpvdXRsZWZ0KQorICAgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgLyogbm90IHdyaXR0ZW4gdG8gdXNlIGVuY29kZXIsIGRlY29kZXIgZnVuY3Rpb25zIGJlY2F1c2Ugb25seSBmZXcKICAgICAgKiBlbmNvZGluZ3MgdXNlIEcyIGRlc2lnbmF0aW9ucyBpbiBDSktDb2RlY3MgKi8KICAgICBpZiAoU1RBVEVfRzIgPT0gQ0hBUlNFVF9JU084ODU5XzEpIHsKLSAgICAgICAgaWYgKElOMyA8IDB4ODApCi0gICAgICAgICAgICBPVVQxKElOMyArIDB4ODApCisgICAgICAgIGlmIChJTkJZVEUzIDwgMHg4MCkKKyAgICAgICAgICAgIE9VVENIQVIoSU5CWVRFMyArIDB4ODApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMzsKICAgICB9CiAgICAgZWxzZSBpZiAoU1RBVEVfRzIgPT0gQ0hBUlNFVF9JU084ODU5XzcpIHsKLSAgICAgICAgSVNPODg1OV83X0RFQ09ERShJTjMgXiAweDgwLCAqKm91dGJ1ZikKLSAgICAgICAgZWxzZSByZXR1cm4gMzsKKyAgICAgICAgSVNPODg1OV83X0RFQ09ERShJTkJZVEUzIF4gMHg4MCwgd3JpdGVyKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMzsKICAgICB9CiAgICAgZWxzZSBpZiAoU1RBVEVfRzIgPT0gQ0hBUlNFVF9BU0NJSSkgewotICAgICAgICBpZiAoSU4zICYgMHg4MCkgcmV0dXJuIDM7Ci0gICAgICAgIGVsc2UgKipvdXRidWYgPSBJTjM7CisgICAgICAgIGlmIChJTkJZVEUzICYgMHg4MCkKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBPVVRDSEFSKElOQllURTMpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQkVSUl9JTlRFUk5BTDsKIAogICAgICgqaW5idWYpICs9IDM7CiAgICAgKmlubGVmdCAtPSAzOwotICAgICgqb3V0YnVmKSArPSAxOwotICAgICpvdXRsZWZ0IC09IDE7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTQyMyw1OCArNDI1LDU4IEBACiAgICAgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gKmRzZ2NhY2hlID0gTlVMTDsKIAogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKICAgICAgICAgUHlfc3NpemVfdCBlcnI7CiAKICAgICAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9FU0NUSFJPVUdIT1VUKSkgewogICAgICAgICAgICAgLyogRVNDIHRocm91Z2hvdXQgbW9kZToKICAgICAgICAgICAgICAqIGZvciBub24taXNvMjAyMiBlc2NhcGUgc2VxdWVuY2VzICovCi0gICAgICAgICAgICBXUklURTEoYykgLyogYXNzdW1lIGFzIElTTy04ODU5LTEgKi8KLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7IC8qIGFzc3VtZSBhcyBJU08tODg1OS0xICovCisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgaWYgKElTX0VTQ0VORChjKSkgewotICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX0VTQ1RIUk9VR0hPVVQpCisgICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfRVNDVEhST1VHSE9VVCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICBjYXNlIEVTQzoKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGlmIChJU19JU08yMDIyRVNDKElOMikpIHsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBpZiAoSVNfSVNPMjAyMkVTQyhJTkJZVEUyKSkgewogICAgICAgICAgICAgICAgIGVyciA9IGlzbzIwMjJwcm9jZXNzZXNjKGNvbmZpZywgc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5idWYsICZpbmxlZnQpOwogICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOMiA9PSAnTicpIHsvKiBTUzIgKi8KLSAgICAgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpCisgICAgICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0cyKSAmJiBJTkJZVEUyID09ICdOJykgey8qIFNTMiAqLworICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMyk7CiAgICAgICAgICAgICAgICAgZXJyID0gaXNvMjAyMnByb2Nlc3NnMihjb25maWcsIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlubGVmdCwgb3V0YnVmLCAmb3V0bGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlubGVmdCwgd3JpdGVyKTsKICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBXUklURTEoRVNDKQotICAgICAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9FU0NUSFJPVUdIT1VUKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKEVTQyk7CisgICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX0VTQ1RIUk9VR0hPVVQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTSToKICAgICAgICAgICAgIGlmIChDT05GSUdfSVNTRVQoTk9fU0hJRlQpKQogICAgICAgICAgICAgICAgIGdvdG8gYnlwYXNzOwotICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgIE5FWFRfSU4oMSkKKyAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNPOgogICAgICAgICAgICAgaWYgKENPTkZJR19JU1NFVChOT19TSElGVCkpCiAgICAgICAgICAgICAgICAgZ290byBieXBhc3M7Ci0gICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgIE5FWFRfSU4oMSkKKyAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMRjoKLSAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICBXUklURTEoTEYpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgIE9VVENIQVIoTEYpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGMgPCAweDIwKSAvKiBDMCAqLwpAQCAtNDg0LDcgKzQ4Niw3IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2hhcnNldDsKLSAgICAgICAgICAgICAgICB1Y3M0X3QgZGVjb2RlZDsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKQogICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gU1RBVEVfRzE7CkBAIC00OTIsNDMgKzQ5NCw0NCBAQAogICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gU1RBVEVfRzA7CiAKICAgICAgICAgICAgICAgICBpZiAoY2hhcnNldCA9PSBDSEFSU0VUX0FTQ0lJKSB7Ci1ieXBhc3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVCgxLCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRzZ2NhY2hlICE9IE5VTEwgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlLT5tYXJrID09IGNoYXJzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnID0gZHNnY2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZy0+bWFyayAhPSBjaGFyc2V0Ci0jaWZkZWYgUHlfREVCVUcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRzZy0+bWFyayAhPSAnXDAnCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtkc2crKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vb3AgKi87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGRzZy0+bWFyayAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2djYWNoZSA9IGRzZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoZHNnLT53aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGRzZy0+ZGVjb2RlcigqaW5idWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHNnLT53aWR0aDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZCA8IDB4MTAwMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURTEoZGVjb2RlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY29kZWQgPCAweDMwMDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KGRlY29kZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8qIEpJUyBYIDAyMTMgcGFpcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgV1JJVEUyKGRlY29kZWQgPj4gMTYsIGRlY29kZWQgJiAweGZmZmYpCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDIpCitieXBhc3M6CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBORVhUX0lOKGRzZy0+d2lkdGgpCisKKyAgICAgICAgICAgICAgICBpZiAoZHNnY2FjaGUgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICBkc2djYWNoZS0+bWFyayA9PSBjaGFyc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgZHNnID0gZHNnY2FjaGU7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBkc2ctPm1hcmsgIT0gY2hhcnNldAorI2lmZGVmIFB5X0RFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZHNnLT5tYXJrICE9ICdcMCcKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgIDsgZHNnKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZHNnLT5tYXJrICE9ICdcMCcpOworICAgICAgICAgICAgICAgICAgICBkc2djYWNoZSA9IGRzZzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKGRzZy0+d2lkdGgpOworICAgICAgICAgICAgICAgIGRlY29kZWQgPSBkc2ctPmRlY29kZXIoKmluYnVmKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRzZy0+d2lkdGg7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZCA8IDB4MTAwMDApIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjb2RlZCA8IDB4MzAwMDApIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7IC8qIEpJUyBYIDAyMTMgcGFpcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUjIoZGVjb2RlZCA+PiAxNiwgZGVjb2RlZCAmIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE5FWFRfSU4oZHNnLT53aWR0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTc3LDI1ICs1ODAsMjYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGtzeDEwMDFfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIFRSWU1BUF9ERUMoa3N4MTAwMSwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1rc3gxMDAxX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitrc3gxMDAxX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7Ci0gICAgICAgIFRSWU1BUF9FTkMoY3A5NDksIGNvZGVkLCAqZGF0YSkKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmICghKGNvZGVkICYgMHg4MDAwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQpAQCAtNjEzLDI3ICs2MTcsMjcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjA4X2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKKyAgICBQeV9VQ1M0IHU7CiAgICAgaWYgKGRhdGFbMF0gPT0gMHgyMSAmJiBkYXRhWzFdID09IDB4NDApIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgcmV0dXJuIDB4ZmYzYzsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIwOF9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMDhfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKICAgICAgICAgaWYgKCpkYXRhID09IDB4ZmYzYykgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICAgICAgcmV0dXJuIDB4MjE0MDsKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmICghKGNvZGVkICYgMHg4MDAwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CiAgICAgICAgIH0KQEAgLTY1NCwyMyArNjU4LDIzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhqaXN4MDIxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICByZXR1cm4gdTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTJfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEyX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7Ci0gICAgICAgIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmIChjb2RlZCAmIDB4ODAwMCkKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQgJiAweDdmZmY7CiAgICAgICAgIH0KQEAgLTcwNSwzMCArNzA5LDM0IEBACiB9CiAKICNkZWZpbmUgY29uZmlnICgodm9pZCAqKTIwMDApCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTNfMjAwMF8xX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKKyAgICBQeV9VQ1M0IHU7CiAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEodSwgZGF0YVswXSwgZGF0YVsxXSkKICAgICBlbHNlIGlmIChkYXRhWzBdID09IDB4MjEgJiYgZGF0YVsxXSA9PSAweDQwKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgIHJldHVybiAweGZmM2M7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSk7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiB1OwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTNfMjAwMF8yX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih1LCBkYXRhWzBdLCBkYXRhWzFdKQotICAgIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTJfQ0hBUih1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CkBAIC03MzYsMjggKzc0NCwzMiBAQAogfQogI3VuZGVmIGNvbmZpZwogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTNfMjAwNF8xX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKKyAgICBQeV9VQ1M0IHU7CiAgICAgaWYgKGRhdGFbMF0gPT0gMHgyMSAmJiBkYXRhWzFdID09IDB4NDApIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgcmV0dXJuIDB4ZmYzYzsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDA0XzJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKQEAgLTc2NSw3ICs3NzcsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM19lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoLCB2b2lkICpjb25maWcpCitqaXN4MDIxM19lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCwgdm9pZCAqY29uZmlnKQogewogICAgIERCQ0hBUiBjb2RlZDsKIApAQCAtNzc0LDI4ICs3ODYsMjggQEAKICAgICAgICAgaWYgKCpkYXRhID49IDB4MTAwMDApIHsKICAgICAgICAgICAgIGlmICgoKmRhdGEpID4+IDE2ID09IDB4MjAwMDAgPj4gMTYpIHsKICAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChjb2RlZCwgKmRhdGEpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqZGF0YSkgJiAweGZmZmYpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGVkLCAoKmRhdGEpICYgMHhmZmZmKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICB9CiAKICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoY29kZWQsICpkYXRhKQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmIChjb2RlZCA9PSBNVUxUSUMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1BUF9NVUxUSVBMRV9BVkFJTDsKICAgICAgICAgfQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKGNvZGVkICYgMHg4MDAwKQogICAgICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIHJldHVybiBjb2RlZDsKKwogICAgIGNhc2UgMjogLyogc2Vjb25kIGNoYXJhY3RlciBvZiB1bmljb2RlIHBhaXIgKi8KICAgICAgICAgY29kZWQgPSBmaW5kX3BhaXJlbmNtYXAoKHVjczJfdClkYXRhWzBdLCAodWNzMl90KWRhdGFbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwgSklTWDAyMTNfRU5DUEFJUlMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICBpZiAoY29kZWQgPT0gREJDSU5WKSB7CiAgICAgICAgICAgICAqbGVuZ3RoID0gMTsKICAgICAgICAgICAgIGNvZGVkID0gZmluZF9wYWlyZW5jbWFwKCh1Y3MyX3QpZGF0YVswXSwgMCwKQEAgLTgwNSwyMSArODE3LDI0IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvZGVkOworCiAgICAgY2FzZSAtMTogLyogZmx1c2ggdW50ZXJtaW5hdGVkICovCiAgICAgICAgICpsZW5ndGggPSAxOwogICAgICAgICBjb2RlZCA9IGZpbmRfcGFpcmVuY21hcCgodWNzMl90KWRhdGFbMF0sIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwgSklTWDAyMTNfRU5DUEFJUlMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICBpZiAoY29kZWQgPT0gREJDSU5WKQogICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIH0KIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwMF8xX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDAwXzFfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsICh2b2lkICopMjAwMCk7CiAgICAgaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKQEAgLTgzMSw3ICs4NDYsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDAwXzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDBfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgUHlfc3NpemVfdCBpbGVuZ3RoID0gKmxlbmd0aDsKQEAgLTg1NCw3ICs4NjksNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDAwXzJfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDBfMl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgKHZvaWQgKikyMDAwKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtODY2LDcgKzg4MSw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDRfMV9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwNF8xX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCBOVUxMKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtODc4LDcgKzg5Myw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDRfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwNF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBQeV9zc2l6ZV90IGlsZW5ndGggPSAqbGVuZ3RoOwpAQCAtOTAxLDcgKzkxNiw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDRfMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwNF8yX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCBOVUxMKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtOTEyLDM5ICs5MjcsNDMgQEAKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMDFfcl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgSklTWDAyMDFfUl9ERUNPREUoKmRhdGEsIHUpCi0gICAgZWxzZSByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CisgICAgUHlfVUNTNCB1OworICAgIEpJU1gwMjAxX1JfREVDT0RFX0NIQVIoKmRhdGEsIHUpCisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjAxX3JfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjAxX3JfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIEpJU1gwMjAxX1JfRU5DT0RFKCpkYXRhLCBjb2RlZCkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gY29kZWQ7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIwMV9rX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBKSVNYMDIwMV9LX0RFQ09ERSgqZGF0YSBeIDB4ODAsIHUpCi0gICAgZWxzZSByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CisgICAgUHlfVUNTNCB1OworICAgIEpJU1gwMjAxX0tfREVDT0RFX0NIQVIoKmRhdGEgXiAweDgwLCB1KQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiB1OwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIwMV9rX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIwMV9rX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBKSVNYMDIwMV9LX0VOQ09ERSgqZGF0YSwgY29kZWQpCi0gICAgZWxzZSByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIGNvZGVkIC0gMHg4MDsKIH0KIApAQCAtOTYxLDIzICs5ODAsMjMgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGdiMjMxMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhnYjIzMTIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIGlmIChUUllNQVBfREVDKGdiMjMxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1nYjIzMTJfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2diMjMxMl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewotICAgICAgICBUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmICghKGNvZGVkICYgMHg4MDAwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CiAgICAgICAgIH0KQEAgLTk4NiwxNCArMTAwNSwxNCBAQAogfQogCiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBkdW1teV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7CiAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1kdW1teV9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQorZHVtbXlfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jCmluZGV4IGE1MDA2OTYuLjJjNzc4OGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMKQEAgLTE5LDQwICsxOSw0MSBAQAogCiBFTkNPREVSKGNwOTMyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCiAgICAgICAgIGlmIChjIDw9IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZmY2MSAmJiBjIDw9IDB4ZmY5ZikgewotICAgICAgICAgICAgV1JJVEUxKGMgLSAweGZlYzApCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKGMgLSAweGZlYzApOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmOGYwICYmIGMgPD0gMHhmOGYzKSB7CiAgICAgICAgICAgICAvKiBXaW5kb3dzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsKICAgICAgICAgICAgIGlmIChjID09IDB4ZjhmMCkKLSAgICAgICAgICAgICAgICBPVVQxKDB4YTApCisgICAgICAgICAgICAgICAgT1VUQllURTEoMHhhMCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT1VUMShjIC0gMHhmZWYxICsgMHhmZCkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBPVVRCWVRFMShjIC0gMHhmZWYxICsgMHhmZCk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBVQ1M0SU5WQUxJRChjKQotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAotICAgICAgICBUUllNQVBfRU5DKGNwOTMyZXh0LCBjb2RlLCBjKSB7Ci0gICAgICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgICAgIE9VVDIoY29kZSAmIDB4ZmYpCisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTMyZXh0LCBjb2RlLCBjKSkgeworICAgICAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweGZmKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgLyogTVNCIHNldDogSklTIFggMDIxMiAqLwogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCkBAIC02MSwyMCArNjIsMjAgQEAKICAgICAgICAgICAgIGMyID0gY29kZSAmIDB4ZmY7CiAgICAgICAgICAgICBjMiA9ICgoKGMxIC0gMHgyMSkgJiAxKSA/IDB4NWUgOiAwKSArIChjMiAtIDB4MjEpOwogICAgICAgICAgICAgYzEgPSAoYzEgLSAweDIxKSA+PiAxOwotICAgICAgICAgICAgT1VUMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpCi0gICAgICAgICAgICBPVVQyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSkKKyAgICAgICAgICAgIE9VVEJZVEUxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSk7CisgICAgICAgICAgICBPVVRCWVRFMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhlMDAwICYmIGMgPCAweGU3NTgpIHsKICAgICAgICAgICAgIC8qIFVzZXItZGVmaW5lZCBhcmVhICovCi0gICAgICAgICAgICBjMSA9IChQeV9VTklDT0RFKShjIC0gMHhlMDAwKSAvIDE4ODsKLSAgICAgICAgICAgIGMyID0gKFB5X1VOSUNPREUpKGMgLSAweGUwMDApICUgMTg4OwotICAgICAgICAgICAgT1VUMShjMSArIDB4ZjApCi0gICAgICAgICAgICBPVVQyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSkKKyAgICAgICAgICAgIGMxID0gKFB5X1VDUzQpKGMgLSAweGUwMDApIC8gMTg4OworICAgICAgICAgICAgYzIgPSAoUHlfVUNTNCkoYyAtIDB4ZTAwMCkgJSAxODg7CisgICAgICAgICAgICBPVVRCWVRFMShjMSArIDB4ZjApOworICAgICAgICAgICAgT1VUQllURTIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC04MywzMyArODQsMzQgQEAKIERFQ09ERVIoY3A5MzIpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xLCBjMjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMSwgYzI7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQogICAgICAgICBpZiAoYyA8PSAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhhMCAmJiBjIDw9IDB4ZGYpIHsKICAgICAgICAgICAgIGlmIChjID09IDB4YTApCi0gICAgICAgICAgICAgICAgT1VUMSgweGY4ZjApIC8qIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZjhmMCk7IC8qIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmVjMCArIGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZlYzAgKyBjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZmQvKiAmJiBjIDw9IDB4ZmYqLykgewogICAgICAgICAgICAgLyogV2luZG93cyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgICAgICBPVVQxKDB4ZjhmMSAtIDB4ZmQgKyBjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUigweGY4ZjEgLSAweGZkICsgYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIGMyID0gSU4yOworICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBjMiA9IElOQllURTI7CiAKLSAgICAgICAgVFJZTUFQX0RFQyhjcDkzMmV4dCwgKipvdXRidWYsIGMsIGMyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoY3A5MzJleHQsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CiAgICAgICAgIGVsc2UgaWYgKChjID49IDB4ODEgJiYgYyA8PSAweDlmKSB8fCAoYyA+PSAweGUwICYmIGMgPD0gMHhlYSkpewogICAgICAgICAgICAgaWYgKGMyIDwgMHg0MCB8fCAoYzIgPiAweDdlICYmIGMyIDwgMHg4MCkgfHwgYzIgPiAweGZjKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMTE5LDIxICsxMjEsMjMgQEAKICAgICAgICAgICAgIGMgPSAoMiAqIGMgKyAoYzIgPCAweDVlID8gMCA6IDEpICsgMHgyMSk7CiAgICAgICAgICAgICBjMiA9IChjMiA8IDB4NWUgPyBjMiA6IGMyIC0gMHg1ZSkgKyAweDIxOwogCi0gICAgICAgICAgICBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZjAgJiYgYyA8PSAweGY5KSB7CiAgICAgICAgICAgICBpZiAoKGMyID49IDB4NDAgJiYgYzIgPD0gMHg3ZSkgfHwKICAgICAgICAgICAgICAgICAoYzIgPj0gMHg4MCAmJiBjMiA8PSAweGZjKSkKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZTAwMCArIDE4OCAqIChjIC0gMHhmMCkgKwotICAgICAgICAgICAgICAgICAgICAgKGMyIDwgMHg4MCA/IGMyIC0gMHg0MCA6IGMyIC0gMHg0MSkpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGUwMDAgKyAxODggKiAoYyAtIDB4ZjApICsKKyAgICAgICAgICAgICAgICAgICAgKGMyIDwgMHg4MCA/IGMyIC0gMHg0MCA6IGMyIC0gMHg0MSkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE0NiwyNSArMTUwLDI0IEBACiAKIEVOQ09ERVIoZXVjX2ppc18yMDA0KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgUHlfc3NpemVfdCBpbnNpemU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBERUNPREVfU1VSUk9HQVRFKGMpCi0gICAgICAgIGluc2l6ZSA9IEdFVF9JTlNJWkUoYyk7CisgICAgICAgIGluc2l6ZSA9IDE7CiAKICAgICAgICAgaWYgKGMgPD0gMHhGRkZGKSB7CiAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChjb2RlLCBjKQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykgeworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gTVVMVElDKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIE1CRU5DX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGZpbmRfcGFpcmVuY21hcCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCAwLApAQCAtMTc3LDggKzE4MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgYzIgPSBJTkNIQVIyOwogICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGZpbmRfcGFpcmVuY21hcCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsICgqaW5idWYpWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgYzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gREJDSU5WKSB7CkBAIC0xOTMsMTEgKzE5NywxMiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBlbHNlIGlmIChjID49IDB4ZmY2MSAmJiBjIDw9IDB4ZmY5ZikgewogICAgICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDEgaGFsZi13aWR0aCBrYXRha2FuYSAqLwotICAgICAgICAgICAgICAgIFdSSVRFMigweDhlLCBjIC0gMHhmZWMwKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgICAgICBXUklURUJZVEUyKDB4OGUsIGMgLSAweGZlYzApOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4ZmYzYykKQEAgLTIxMSwyMCArMjE2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PiAxNiA9PSBFTVBCQVNFID4+IDE2KSB7CiAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChjb2RlLCBjKQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyAmIDB4ZmZmZik7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiBpbnNpemU7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyAmIDB4ZmZmZikpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgewogICAgICAgICAgICAgLyogQ29kZXNldCAyICovCi0gICAgICAgICAgICBXUklURTMoMHg4ZiwgY29kZSA+PiA4LCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoaW5zaXplLCAzKQorICAgICAgICAgICAgV1JJVEVCWVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoaW5zaXplLCAzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIENvZGVzZXQgMSAqLwotICAgICAgICAgICAgV1JJVEUyKChjb2RlID4+IDgpIHwgMHg4MCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKGluc2l6ZSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKGluc2l6ZSwgMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzNCwxNCArMjQxLDEyIEBACiBERUNPREVSKGV1Y19qaXNfMjAwNCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0gICAgICAgIHVjczRfdCBjb2RlOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgY29kZSwgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjQ5LDExICsyNTQsMTEgQEAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDEgaGFsZi13aWR0aCBrYXRha2FuYSAqLwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyID49IDB4YTEgJiYgYzIgPD0gMHhkZikgewotICAgICAgICAgICAgICAgIE9VVDEoMHhmZWMwICsgYzIpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZWMwICsgYzIpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0yNjEsNDcgKzI2Niw1NSBAQAogICAgICAgICBlbHNlIGlmIChjID09IDB4OGYpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIsIGMzOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpCi0gICAgICAgICAgICBjMiA9IElOMiBeIDB4ODA7Ci0gICAgICAgICAgICBjMyA9IElOMyBeIDB4ODA7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyIF4gMHg4MDsKKyAgICAgICAgICAgIGMzID0gSU5CWVRFMyBeIDB4ODA7CiAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTMgUGxhbmUgMiBvciBKSVMgWCAwMjEyIChzZWUgTk9URVMpICovCi0gICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMigqKm91dGJ1ZiwgYzIsIGMzKQotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCAqKm91dGJ1ZiwgYzIsIGMzKSA7Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMyLCBjMykgewotICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICBORVhUX0lOKDMpCisgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih3cml0ZXIsIGMyLCBjMykKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIGRlY29kZWQsIGMyLCBjMykpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMyLCBjMykpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKEVNUEJBU0UgfCBjb2RlKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEyLCAqKm91dGJ1ZiwgYzIsIGMzKSA7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgzLCAxKQorICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxMiwgZGVjb2RlZCwgYzIsIGMzKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgTkVYVF9JTigzKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAgICAgICAgICAgICBjIF49IDB4ODA7Ci0gICAgICAgICAgICBjMiA9IElOMiBeIDB4ODA7CisgICAgICAgICAgICBjMiA9IElOQllURTIgXiAweDgwOwogCiAgICAgICAgICAgICAvKiBKSVMgWCAwMjEzIFBsYW5lIDEgKi8KLSAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKCoqb3V0YnVmLCBjLCBjMikKLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMSAmJiBjMiA9PSAweDQwKSAqKm91dGJ1ZiA9IDB4ZmYzYzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMiAmJiBjMiA9PSAweDMyKSAqKm91dGJ1ZiA9IDB4ZmY1ZTsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYywgYzIpIHsKLSAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgTkVYVF9JTigyKQorICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEod3JpdGVyLCBjLCBjMikKKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMSAmJiBjMiA9PSAweDQwKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjNjKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMiAmJiBjMiA9PSAweDMyKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjLCBjMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKEVNUEJBU0UgfCBjb2RlKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMsIGMyKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAyKQorICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjLCBjMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMxNSwzNSArMzI4LDM3IEBACiAKIEVOQ09ERVIoZXVjX2pwKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBVQ1M0SU5WQUxJRChjKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYyk7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgOwogICAgICAgICBlbHNlIGlmIChjID49IDB4ZmY2MSAmJiBjIDw9IDB4ZmY5ZikgewogICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCi0gICAgICAgICAgICBXUklURTIoMHg4ZSwgYyAtIDB4ZmVjMCkKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoMHg4ZSwgYyAtIDB4ZmVjMCk7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhmZjNjKSAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICAgICAgY29kZSA9IDB4MjE0MDsKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGE1KSB7IC8qIFlFTiBTSUdOICovCi0gICAgICAgICAgICBXUklURTEoMHg1Yyk7Ci0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKDB4NWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9IGVsc2UgaWYgKGMgPT0gMHgyMDNlKSB7IC8qIE9WRVJMSU5FICovCi0gICAgICAgICAgICBXUklURTEoMHg3ZSk7Ci0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKDB4N2UpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTM1MiwxMiArMzY3LDEyIEBACiAKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIHsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTIgKi8KLSAgICAgICAgICAgIFdSSVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVCgxLCAzKQorICAgICAgICAgICAgV1JJVEVCWVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjA4ICovCi0gICAgICAgICAgICBXUklURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNjcsMTMgKzM4MiwxMiBAQAogREVDT0RFUihldWNfanApCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMzgxLDExICszOTUsMTEgQEAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDEgaGFsZi13aWR0aCBrYXRha2FuYSAqLwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyID49IDB4YTEgJiYgYzIgPD0gMHhkZikgewotICAgICAgICAgICAgICAgIE9VVDEoMHhmZWMwICsgYzIpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZWMwICsgYzIpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0zOTMsMTIgKzQwNywxMyBAQAogICAgICAgICBlbHNlIGlmIChjID09IDB4OGYpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIsIGMzOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpCi0gICAgICAgICAgICBjMiA9IElOMjsKLSAgICAgICAgICAgIGMzID0gSU4zOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKKyAgICAgICAgICAgIGMzID0gSU5CWVRFMzsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTIgKi8KLSAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMTIsICoqb3V0YnVmLCBjMiBeIDB4ODAsIGMzIF4gMHg4MCkgewotICAgICAgICAgICAgICAgIE5FWFQoMywgMSkKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjEyLCBkZWNvZGVkLCBjMiBeIDB4ODAsIGMzIF4gMHg4MCkpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC00MDYsMTkgKzQyMSwyMCBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDggKi8KICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgICAgICBpZiAoYyA9PSAweGExICYmIGMyID09IDB4YzApCiAgICAgICAgICAgICAgICAgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KLSAgICAgICAgICAgICAgICAqKm91dGJ1ZiA9IDB4ZmYzYzsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmYzYyk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgICAgICBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgXiAweDgwLCBjMiBeIDB4ODApIDsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYyBeIDB4ODAsIGMyIF4gMHg4MCkpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQzMiwzNCArNDQ4LDQwIEBACiAKIEVOQ09ERVIoc2hpZnRfamlzKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCiAjaWZkZWYgU1RSSUNUX0JVSUxECiAgICAgICAgIEpJU1gwMjAxX1JfRU5DT0RFKGMsIGNvZGUpCiAjZWxzZQotICAgICAgICBpZiAoYyA8IDB4ODApIGNvZGUgPSBjOwotICAgICAgICBlbHNlIGlmIChjID09IDB4MDBhNSkgY29kZSA9IDB4NWM7IC8qIFlFTiBTSUdOICovCi0gICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDNlKSBjb2RlID0gMHg3ZTsgLyogT1ZFUkxJTkUgKi8KKyAgICAgICAgaWYgKGMgPCAweDgwKQorICAgICAgICAgICAgY29kZSA9IGM7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgwMGE1KQorICAgICAgICAgICAgY29kZSA9IDB4NWM7IC8qIFlFTiBTSUdOICovCisgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDNlKQorICAgICAgICAgICAgY29kZSA9IDB4N2U7IC8qIE9WRVJMSU5FICovCiAjZW5kaWYKICAgICAgICAgZWxzZSBKSVNYMDIwMV9LX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIFVDUzRJTlZBTElEKGMpCi0gICAgICAgIGVsc2UgY29kZSA9IE5PQ0hBUjsKKyAgICAgICAgZWxzZSBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlID0gTk9DSEFSOwogCiAgICAgICAgIGlmIChjb2RlIDwgMHg4MCB8fCAoY29kZSA+PSAweGExICYmIGNvZGUgPD0gMHhkZikpIHsKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsKIAotICAgICAgICAgICAgT1VUMSgodW5zaWduZWQgY2hhciljb2RlKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQllURTEoKHVuc2lnbmVkIGNoYXIpY29kZSk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBpZiAoY29kZSA9PSBOT0NIQVIpIHsKLSAgICAgICAgICAgIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYyk7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgICAgICA7CiAjaWZuZGVmIFNUUklDVF9CVUlMRAogICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGZmM2MpCiAgICAgICAgICAgICAgICAgY29kZSA9IDB4MjE0MDsgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KQEAgLTQ3NSw5ICs0OTcsOSBAQAogICAgICAgICBjMiA9IGNvZGUgJiAweGZmOwogICAgICAgICBjMiA9ICgoKGMxIC0gMHgyMSkgJiAxKSA/IDB4NWUgOiAwKSArIChjMiAtIDB4MjEpOwogICAgICAgICBjMSA9IChjMSAtIDB4MjEpID4+IDE7Ci0gICAgICAgIE9VVDEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKQotICAgICAgICBPVVQyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSkKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBPVVRCWVRFMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpOworICAgICAgICBPVVRCWVRFMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNDg2LDIxICs1MDgsMjEgQEAKIERFQ09ERVIoc2hpZnRfamlzKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICNpZmRlZiBTVFJJQ1RfQlVJTEQKLSAgICAgICAgSklTWDAyMDFfUl9ERUNPREUoYywgKipvdXRidWYpCisgICAgICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsIHdyaXRlcikKICNlbHNlCi0gICAgICAgIGlmIChjIDwgMHg4MCkgKipvdXRidWYgPSBjOworICAgICAgICBpZiAoYyA8IDB4ODApCisgICAgICAgICAgICBPVVRDSEFSKGMpOwogI2VuZGlmCi0gICAgICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgKipvdXRidWYpCisgICAgICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgd3JpdGVyKQogICAgICAgICBlbHNlIGlmICgoYyA+PSAweDgxICYmIGMgPD0gMHg5ZikgfHwgKGMgPj0gMHhlMCAmJiBjIDw9IDB4ZWEpKXsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPCAweDQwIHx8IChjMiA+IDB4N2UgJiYgYzIgPCAweDgwKSB8fCBjMiA+IDB4ZmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKQEAgLTUxMiwxMyArNTM0LDE0IEBACiAjaWZuZGVmIFNUUklDVF9CVUlMRAogICAgICAgICAgICAgaWYgKGMxID09IDB4MjEgJiYgYzIgPT0gMHg0MCkgewogICAgICAgICAgICAgICAgIC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCi0gICAgICAgICAgICAgICAgT1VUMSgweGZmM2MpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjNjKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMxLCBjMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC01MjcsNyArNTUwLDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgxLCAxKSAvKiBKSVMgWCAwMjAxICovCisgICAgICAgIE5FWFRfSU4oMSk7IC8qIEpJUyBYIDAyMDEgKi8KICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTU0MCwzMCArNTYzLDI5IEBACiAKIEVOQ09ERVIoc2hpZnRfamlzXzIwMDQpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlID0gTk9DSEFSOwogICAgICAgICBpbnQgYzEsIGMyOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBKSVNYMDIwMV9FTkNPREUoYywgY29kZSkKLSAgICAgICAgZWxzZSBERUNPREVfU1VSUk9HQVRFKGMpCiAKICAgICAgICAgaWYgKGNvZGUgPCAweDgwIHx8IChjb2RlID49IDB4YTEgJiYgY29kZSA8PSAweGRmKSkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWNvZGUpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWNvZGUpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGluc2l6ZSA9IDE7CiAKICAgICAgICAgaWYgKGNvZGUgPT0gTk9DSEFSKSB7CiAgICAgICAgICAgICBpZiAoYyA8PSAweGZmZmYpIHsKICAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChjb2RlLCBjKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGUsIGMpIHsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gTVVMVElDKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0IDwgMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIE1CRU5DX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGZpbmRfcGFpcmVuY21hcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVjczJfdCljLCAwLApAQCAtNTc2LDggKzU5OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoMiA9IElOQ0hBUjI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGZpbmRfcGFpcmVuY21hcCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCBJTjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgY2gyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpJU1gwMjEzX0VOQ1BBSVJTKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBEQkNJTlYpIHsKQEAgLTU5MywxNyArNjE2LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpIHsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIGFiYW5kb24gSklTIFggMDIxMiBjb2RlcyAqLwogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjID4+IDE2ID09IEVNUEJBU0UgPj4gMTYpIHsKICAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChjb2RlLCBjKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGUsIGMmMHhmZmZmKTsKLSAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBpbnNpemU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGUsIGMmMHhmZmZmKSkKKyAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwpAQCAtNjEyLDIwICs2MzgsMjcgQEAKICAgICAgICAgYzEgPSBjb2RlID4+IDg7CiAgICAgICAgIGMyID0gKGNvZGUgJiAweGZmKSAtIDB4MjE7CiAKLSAgICAgICAgaWYgKGMxICYgMHg4MCkgeyAvKiBQbGFuZSAyICovCi0gICAgICAgICAgICBpZiAoYzEgPj0gMHhlZSkgYzEgLT0gMHg4NzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4YWMgfHwgYzEgPT0gMHhhOCkgYzEgLT0gMHg0OTsKLSAgICAgICAgICAgIGVsc2UgYzEgLT0gMHg0MzsKKyAgICAgICAgaWYgKGMxICYgMHg4MCkgeworICAgICAgICAgICAgLyogUGxhbmUgMiAqLworICAgICAgICAgICAgaWYgKGMxID49IDB4ZWUpCisgICAgICAgICAgICAgICAgYzEgLT0gMHg4NzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4YWMgfHwgYzEgPT0gMHhhOCkKKyAgICAgICAgICAgICAgICBjMSAtPSAweDQ5OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGMxIC09IDB4NDM7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiBQbGFuZSAxICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogUGxhbmUgMSAqLwogICAgICAgICAgICAgYzEgLT0gMHgyMTsKKyAgICAgICAgfQogCi0gICAgICAgIGlmIChjMSAmIDEpIGMyICs9IDB4NWU7CisgICAgICAgIGlmIChjMSAmIDEpCisgICAgICAgICAgICBjMiArPSAweDVlOwogICAgICAgICBjMSA+Pj0gMTsKLSAgICAgICAgT1VUMShjMSArIChjMSA8IDB4MWYgPyAweDgxIDogMHhjMSkpCi0gICAgICAgIE9VVDIoYzIgKyAoYzIgPCAweDNmID8gMHg0MCA6IDB4NDEpKQorICAgICAgICBPVVRCWVRFMShjMSArIChjMSA8IDB4MWYgPyAweDgxIDogMHhjMSkpOworICAgICAgICBPVVRCWVRFMihjMiArIChjMiA8IDB4M2YgPyAweDQwIDogMHg0MSkpOwogCi0gICAgICAgIE5FWFQoaW5zaXplLCAyKQorICAgICAgICBORVhUKGluc2l6ZSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC02MzQsMTYgKzY2NywxNSBAQAogREVDT0RFUihzaGlmdF9qaXNfMjAwNCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKLSAgICAgICAgSklTWDAyMDFfREVDT0RFKGMsICoqb3V0YnVmKQorICAgICAgICBKSVNYMDIwMV9ERUNPREUoYywgd3JpdGVyKQogICAgICAgICBlbHNlIGlmICgoYyA+PSAweDgxICYmIGMgPD0gMHg5ZikgfHwgKGMgPj0gMHhlMCAmJiBjIDw9IDB4ZmMpKXsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyOwotICAgICAgICAgICAgdWNzNF90IGNvZGU7CisgICAgICAgICAgICBQeV9VQ1M0IGNvZGUsIGRlY29kZWQ7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA8IDB4NDAgfHwgKGMyID4gMHg3ZSAmJiBjMiA8IDB4ODApIHx8IGMyID4gMHhmYykKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIApAQCAtNjU0LDUwICs2ODYsNDcgQEAKIAogICAgICAgICAgICAgaWYgKGMxIDwgMHg1ZSkgeyAvKiBQbGFuZSAxICovCiAgICAgICAgICAgICAgICAgYzEgKz0gMHgyMTsKLSAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSgqKm91dGJ1ZiwKKyAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSh3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCAqKm91dGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBXUklURTIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZikKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMikKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCBkZWNvZGVkLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUjIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeyAvKiBQbGFuZSAyICovCi0gICAgICAgICAgICAgICAgaWYgKGMxID49IDB4NjcpIGMxICs9IDB4MDc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHg2MyB8fCBjMSA9PSAweDVmKSBjMSAtPSAweDM3OwotICAgICAgICAgICAgICAgIGVsc2UgYzEgLT0gMHgzZDsKKyAgICAgICAgICAgICAgICBpZiAoYzEgPj0gMHg2NykKKyAgICAgICAgICAgICAgICAgICAgYzEgKz0gMHgwNzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweDYzIHx8IGMxID09IDB4NWYpCisgICAgICAgICAgICAgICAgICAgIGMxIC09IDB4Mzc7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjMSAtPSAweDNkOwogCi0gICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIoKipvdXRidWYsCisgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIod3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCAqKm91dGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKSA7Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCBjb2RlLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgZGVjb2RlZCwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCBjb2RlLCBjMSwgYzIpKSB7CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMSwgMSkgLyogSklTIFggMDIwMSAqLworICAgICAgICBORVhUX0lOKDEpOyAvKiBKSVMgWCAwMjAxICovCiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKaW5kZXggZjU2OTdkZC4uMWFkNDFhNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYwpAQCAtMzMsNTEgKzMzLDU2IEBACiAKIEVOQ09ERVIoZXVjX2tyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoKGNvZGUgJiAweDgwMDApID09IDApIHsKICAgICAgICAgICAgIC8qIEtTIFggMTAwMSBjb2RlZCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgeyAgICAgICAgICAvKiBNYXBwaW5nIGlzIGZvdW5kIGluIENQOTQ5IGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgKiBidXQgd2UgZW5jb2RlIGl0IGluIEtTIFggMTAwMToxOTk4IEFubmV4IDMsCi0gICAgICAgICAgICAgICAgICogbWFrZS11cCBzZXF1ZW5jZSBmb3IgRVVDLUtSLiAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIE1hcHBpbmcgaXMgZm91bmQgaW4gQ1A5NDkgZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgYnV0IHdlIGVuY29kZSBpdCBpbiBLUyBYIDEwMDE6MTk5OCBBbm5leCAzLAorICAgICAgICAgICAgICAgbWFrZS11cCBzZXF1ZW5jZSBmb3IgRVVDLUtSLiAqLwogCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRig4KQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoOCk7CiAKICAgICAgICAgICAgIC8qIHN5bGxhYmxlIGNvbXBvc2l0aW9uIHByZWNlZGVuY2UgKi8KLSAgICAgICAgICAgIE9VVDEoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQyKEVVQ0tSX0pBTU9fRklMTEVSKQorICAgICAgICAgICAgT1VUQllURTEoRVVDS1JfSkFNT19GSVJTVEJZVEUpOworICAgICAgICAgICAgT1VUQllURTIoRVVDS1JfSkFNT19GSUxMRVIpOwogCiAgICAgICAgICAgICAvKiBBbGwgY29kZXBvaW50cyBpbiBDUDk0OSBleHRlbnNpb24gYXJlIGluIHVuaWNvZGUKICAgICAgICAgICAgICAqIEhhbmd1bCBTeWxsYWJsZSBhcmVhLiAqLwogICAgICAgICAgICAgYXNzZXJ0KDB4YWMwMCA8PSBjICYmIGMgPD0gMHhkN2EzKTsKICAgICAgICAgICAgIGMgLT0gMHhhYzAwOwogCi0gICAgICAgICAgICBPVVQzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUNCh1MmNna19jaG9zZW9uZ1tjIC8gNTg4XSkKLSAgICAgICAgICAgIE5FWFRfT1VUKDQpCisgICAgICAgICAgICBPVVRCWVRFMyhFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFNCh1MmNna19jaG9zZW9uZ1tjIC8gNTg4XSk7CisgICAgICAgICAgICBORVhUX09VVCg0KTsKIAotICAgICAgICAgICAgT1VUMShFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDIodTJjZ2tfanVuZ3Nlb25nWyhjIC8gMjgpICUgMjFdKQotICAgICAgICAgICAgT1VUMyhFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDQodTJjZ2tfam9uZ3Nlb25nW2MgJSAyOF0pCi0gICAgICAgICAgICBORVhUKDEsIDQpCisgICAgICAgICAgICBPVVRCWVRFMShFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFMih1MmNna19qdW5nc2VvbmdbKGMgLyAyOCkgJSAyMV0pOworICAgICAgICAgICAgT1VUQllURTMoRVVDS1JfSkFNT19GSVJTVEJZVEUpOworICAgICAgICAgICAgT1VUQllURTQodTJjZ2tfam9uZ3Nlb25nW2MgJSAyOF0pOworICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAyLDI0ICsxMDcsMjMgQEAKIERFQ09ERVIoZXVjX2tyKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCiAgICAgICAgIGlmIChjID09IEVVQ0tSX0pBTU9fRklSU1RCWVRFICYmCi0gICAgICAgICAgICBJTjIgPT0gRVVDS1JfSkFNT19GSUxMRVIpIHsKKyAgICAgICAgICAgIElOQllURTIgPT0gRVVDS1JfSkFNT19GSUxMRVIpIHsKICAgICAgICAgICAgIC8qIEtTIFggMTAwMToxOTk4IEFubmV4IDMgbWFrZS11cCBzZXF1ZW5jZSAqLwogICAgICAgICAgICAgREJDSEFSIGNobywganVuZywgam9uZzsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig4KQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig4KTsKICAgICAgICAgICAgIGlmICgoKmluYnVmKVsyXSAhPSBFVUNLUl9KQU1PX0ZJUlNUQllURSB8fAogICAgICAgICAgICAgICAgICgqaW5idWYpWzRdICE9IEVVQ0tSX0pBTU9fRklSU1RCWVRFIHx8CiAgICAgICAgICAgICAgICAgKCppbmJ1ZilbNl0gIT0gRVVDS1JfSkFNT19GSVJTVEJZVEUpCkBAIC0xNDUsMTEgKzE0OSwxMiBAQAogICAgICAgICAgICAgaWYgKGNobyA9PSBOT05FIHx8IGp1bmcgPT0gTk9ORSB8fCBqb25nID09IE5PTkUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgICAgIE9VVDEoMHhhYzAwICsgY2hvKjU4OCArIGp1bmcqMjggKyBqb25nKTsKLSAgICAgICAgICAgIE5FWFQoOCwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoMHhhYzAwICsgY2hvKjU4OCArIGp1bmcqMjggKyBqb25nKTsKKyAgICAgICAgICAgIE5FWFRfSU4oOCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGtzeDEwMDEsICoqb3V0YnVmLCBjIF4gMHg4MCwgSU4yIF4gMHg4MCkgewotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIGRlY29kZWQsIGMgXiAweDgwLCBJTkJZVEUyIF4gMHg4MCkpIHsKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMTY2LDI3ICsxNzEsMzEgQEAKIAogRU5DT0RFUihjcDk0OSkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQotICAgICAgICAgICAgT1VUMihjb2RlICYgMHhGRikgLyogTVNCIHNldDogQ1A5NDkgKi8KKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkgLyogTVNCIHVuc2V0OiBrcyB4IDEwMDEgKi8KLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCisgICAgICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7IC8qIE1TQiBzZXQ6IENQOTQ5ICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsgLyogTVNCIHVuc2V0OiBrcyB4IDEwMDEgKi8KKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE5NSwyMiArMjA0LDI0IEBACiBERUNPREVSKGNwOTQ5KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBUUllNQVBfREVDKGtzeDEwMDEsICoqb3V0YnVmLCBjIF4gMHg4MCwgSU4yIF4gMHg4MCk7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0RFQyhjcDk0OWV4dCwgKipvdXRidWYsIGMsIElOMik7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIGRlY29kZWQsIGMgXiAweDgwLCBJTkJZVEUyIF4gMHg4MCkpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGNwOTQ5ZXh0LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTI1MCwxOCArMjYxLDIwIEBACiAKIEVOQ09ERVIoam9oYWIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgaWYgKGMgPj0gMHhhYzAwICYmIGMgPD0gMHhkN2EzKSB7CiAgICAgICAgICAgICBjIC09IDB4YWMwMDsKQEAgLTI3Miw3ICsyODUsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgzMTMxICYmIGMgPD0gMHgzMTYzKQogICAgICAgICAgICAgY29kZSA9IHUyam9oYWJqYW1vW2MgLSAweDMxMzFdOwotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyLCB0MjsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHQxOwogCkBAIC0yODUsOSArMjk4LDkgQEAKICAgICAgICAgICAgICAgICB0MSA9IChjMSA8IDB4NGEgPyAoYzEgLSAweDIxICsgMHgxYjIpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMxIC0gMHgyMSArIDB4MTk3KSk7CiAgICAgICAgICAgICAgICAgdDIgPSAoKHQxICYgMSkgPyAweDVlIDogMCkgKyAoYzIgLSAweDIxKTsKLSAgICAgICAgICAgICAgICBPVVQxKHQxID4+IDEpCi0gICAgICAgICAgICAgICAgT1VUMih0MiA8IDB4NGUgPyB0MiArIDB4MzEgOiB0MiArIDB4NDMpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgICAgIE9VVEJZVEUxKHQxID4+IDEpOworICAgICAgICAgICAgICAgIE9VVEJZVEUyKHQyIDwgMHg0ZSA/IHQyICsgMHgzMSA6IHQyICsgMHg0Myk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTI5Niw5ICszMDksOSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhmZikKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhmZik7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0zNDgsMTggKzM2MSwxNyBAQAogREVDT0RFUihqb2hhYikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyICAgIGMgPSBJTjEsIGMyOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTEsIGMyOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgYzIgPSBJTkJZVEUyOwogCiAgICAgICAgIGlmIChjIDwgMHhkOCkgewogICAgICAgICAgICAgLyogam9oYWIgaGFuZ3VsICovCkBAIC0zODEsMzMgKzM5MywzMyBAQAogICAgICAgICAgICAgaWYgKGlfY2hvID09IEZJTEwpIHsKICAgICAgICAgICAgICAgICBpZiAoaV9qdW5nID09IEZJTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlfam9uZyA9PSBGSUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMwMDApCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzAwMCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMTAwIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2pvbmdzZW9uZ1tjX2pvbmddKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMxMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qb25nc2VvbmdbY19qb25nXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoaV9qb25nID09IEZJTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzEwMCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qdW5nc2VvbmdbY19qdW5nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMTAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fanVuZ3Nlb25nW2NfanVuZ10pOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChpX2p1bmcgPT0gRklMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaV9qb25nID09IEZJTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzEwMCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19jaG9zZW9uZ1tjX2Nob10pCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzEwMCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2Nob3Nlb25nW2NfY2hvXSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIE9VVDEoMHhhYzAwICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBpX2NobyAqIDU4OCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgaV9qdW5nICogMjggKwotICAgICAgICAgICAgICAgICAgICAgICAgIChpX2pvbmcgPT0gRklMTCA/IDAgOiBpX2pvbmcpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4YWMwMCArCisgICAgICAgICAgICAgICAgICAgICAgICBpX2NobyAqIDU4OCArCisgICAgICAgICAgICAgICAgICAgICAgICBpX2p1bmcgKiAyOCArCisgICAgICAgICAgICAgICAgICAgICAgICAoaV9qb25nID09IEZJTEwgPyAwIDogaV9qb25nKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogS1MgWCAxMDAxIGV4Y2VwdCBoYW5ndWwgamFtb3MgYW5kIHN5bGxhYmxlcyAqLwogICAgICAgICAgICAgaWYgKGMgPT0gMHhkZiB8fCBjID4gMHhmOSB8fApAQCAtNDI0LDkgKzQzNiwxMyBAQAogICAgICAgICAgICAgICAgIHQxID0gdDEgKyAodDIgPCAweDVlID8gMCA6IDEpICsgMHgyMTsKICAgICAgICAgICAgICAgICB0MiA9ICh0MiA8IDB4NWUgPyB0MiA6IHQyIC0gMHg1ZSkgKyAweDIxOwogCi0gICAgICAgICAgICAgICAgVFJZTUFQX0RFQyhrc3gxMDAxLCAqKm91dGJ1ZiwgdDEsIHQyKTsKLSAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCBkZWNvZGVkLCB0MSwgdDIpKSB7CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMKaW5kZXggOTE2Mjk4ZC4uNzIyYjI2YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYwpAQCAtMTMsMjYgKzEzLDMwIEBACiAKIEVOQ09ERVIoYmlnNSkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSAqKmluYnVmOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsKICAgICAgICAgICAgICoqb3V0YnVmID0gKHVuc2lnbmVkIGNoYXIpYzsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKLSAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgIE9VVDIoY29kZSAmIDB4RkYpCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTQxLDE5ICs0NSwxOSBAQAogREVDT0RFUihiaWc1KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBUUllNQVBfREVDKGJpZzUsICoqb3V0YnVmLCBjLCBJTjIpIHsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoYmlnNSwgZGVjb2RlZCwgYywgSU5CWVRFMikpIHsKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgcmV0dXJuIDE7CiAgICAgfQpAQCAtNjgsMjUgKzcyLDMwIEBACiAKIEVOQ09ERVIoY3A5NTApCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5NTBleHQsIGNvZGUsIGMpOwotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgIE9VVDIoY29kZSAmIDB4RkYpCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTUwZXh0LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtOTUsMjMgKzEwNCwyNSBAQAogREVDT0RFUihjcDk1MCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAotICAgICAgICBUUllNQVBfREVDKGNwOTUwZXh0LCAqKm91dGJ1ZiwgYywgSU4yKTsKLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGJpZzUsICoqb3V0YnVmLCBjLCBJTjIpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhjcDk1MGV4dCwgZGVjb2RlZCwgYywgSU5CWVRFMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGJpZzUsIGRlY29kZWQsIGMsIElOQllURTIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvYWxnX2ppc3gwMjAxLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaAppbmRleCAwYmM3ZGI1Li4zMDM0YjVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaApAQCAtMSwyNCArMSw2NSBAQAogI2RlZmluZSBKSVNYMDIwMV9SX0VOQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA8IDB4ODAgJiYgKGMpICE9IDB4NWMgJiYgKGMpICE9IDB4N2UpICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHg4MCAmJiAoYykgIT0gMHg1YyAmJiAoYykgIT0gMHg3ZSkgeyAgICAgXAogICAgICAgICAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4MDBhNSkgKGFzc2kpID0gMHg1YzsgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHgyMDNlKSAoYXNzaSkgPSAweDdlOworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4MDBhNSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg1YzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4MjAzZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg3ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwogI2RlZmluZSBKSVNYMDIwMV9LX0VOQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA+PSAweGZmNjEgJiYgKGMpIDw9IDB4ZmY5ZikgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gKGMpIC0gMHhmZWMwOworICAgIGlmICgoYykgPj0gMHhmZjYxICYmIChjKSA8PSAweGZmOWYpIHsgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IChjKSAtIDB4ZmVjMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKICNkZWZpbmUgSklTWDAyMDFfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEpJU1gwMjAxX1JfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBKSVNYMDIwMV9LX0VOQ09ERShjLCBhc3NpKQogCi0jZGVmaW5lIEpJU1gwMjAxX1JfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpIDwgMHg1YykgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDVjKSAoYXNzaSkgPSAweDAwYTU7ICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpIDwgMHg3ZSkgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHg3ZSkgKGFzc2kpID0gMHgyMDNlOyAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDdmKSAoYXNzaSkgPSAweDdmOwotI2RlZmluZSBKSVNYMDIwMV9LX0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA+PSAweGExICYmIChjKSA8PSAweGRmKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXNzaSkgPSAweGZlYzAgKyAoYyk7Ci0jZGVmaW5lIEpJU1gwMjAxX0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgYXNzaSkKKyNkZWZpbmUgSklTWDAyMDFfUl9ERUNPREVfQ0hBUihjLCBhc3NpKSAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPCAweDVjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDVjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4MDBhNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA8IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4MjAzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDdmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4N2Y7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgSklTWDAyMDFfUl9ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPCAweDVjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDVjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgwMGE1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA8IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDdmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHg3Zik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgSklTWDAyMDFfS19ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPj0gMHhhMSAmJiAoYykgPD0gMHhkZikgeyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHhmZWMwICsgKGMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIEpJU1gwMjAxX0tfREVDT0RFX0NIQVIoYywgYXNzaSkgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpID49IDB4YTEgJiYgKGMpIDw9IDB4ZGYpIHsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGZlYzAgKyAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBKSVNYMDIwMV9ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSklTWDAyMDFfUl9ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIEpJU1gwMjAxX0tfREVDT0RFKGMsIHdyaXRlcikKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKaW5kZXggYWIwNjgyYS4uMjViYWI0MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKQEAgLTMzLDcgKzMzLDcgQEAKIHR5cGVkZWYgc3RydWN0IGRiY3NfaW5kZXggZGVjb2RlX21hcDsKIAogc3RydWN0IHdpZGVkYmNzX2luZGV4IHsKLSAgICBjb25zdCB1Y3M0X3QgKm1hcDsKKyAgICBjb25zdCBQeV9VQ1M0ICptYXA7CiAgICAgdW5zaWduZWQgY2hhciBib3R0b20sIHRvcDsKIH07CiB0eXBlZGVmIHN0cnVjdCB3aWRlZGJjc19pbmRleCB3aWRlZGVjb2RlX21hcDsKQEAgLTU2LDcgKzU2LDcgQEAKIH07CiAKIHN0cnVjdCBwYWlyX2VuY29kZW1hcCB7Ci0gICAgdWNzNF90IHVuaXNlcTsKKyAgICBQeV9VQ1M0IHVuaXNlcTsKICAgICBEQkNIQVIgY29kZTsKIH07CiAKQEAgLTcyLDcgKzcyLDggQEAKICNkZWZpbmUgRU5DT0RFUihlbmNvZGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2VuY29kZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpjb25maWcsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgUHlfVU5JQ09ERSAqKmluYnVmLCBQeV9zc2l6ZV90IGlubGVmdCwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IGtpbmQsIHZvaWQgKmRhdGEsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X3NzaXplX3QgKmlucG9zLCBQeV9zc2l6ZV90IGlubGVuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCwgaW50IGZsYWdzKQogI2RlZmluZSBFTkNPREVSX1JFU0VUKGVuY29kaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZW5jb2RlX3Jlc2V0KCAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODYsMTIwICs4NywxMTggQEAKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2RlY29kZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpjb25maWcsICAgICAgICAgICAgICAgIFwKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmluYnVmLCBQeV9zc2l6ZV90IGlubGVmdCwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0KQorICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiAjZGVmaW5lIERFQ09ERVJfUkVTRVQoZW5jb2RpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19kZWNvZGVfcmVzZXQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwgY29uc3Qgdm9pZCAqY29uZmlnKQogCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDQKLSNkZWZpbmUgVUNTNElOVkFMSUQoY29kZSkgICAgICAgXAotICAgIGlmICgoY29kZSkgPiAweEZGRkYpICAgICAgICBcCi0gICAgcmV0dXJuIDE7Ci0jZWxzZQotI2RlZmluZSBVQ1M0SU5WQUxJRChjb2RlKSAgICAgICBcCi0gICAgaWYgKDApIDsKLSNlbmRpZgotCiAjZGVmaW5lIE5FWFRfSU4oaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCppbmJ1ZikgKz0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGlubGVmdCkgLT0gKGkpOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKmluYnVmKSArPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoaW5sZWZ0KSAtPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE5FWFRfSU5DSEFSKGkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqaW5wb3MpICs9IChpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgTkVYVF9PVVQobykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZikgKz0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAob3V0bGVmdCkgLT0gKG8pOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZikgKz0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAob3V0bGVmdCkgLT0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAjZGVmaW5lIE5FWFQoaSwgbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTkVYVF9JTihpKSBORVhUX09VVChvKQorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBORVhUX0lOQ0hBUihpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBORVhUX09VVChvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUkVRVUlSRV9JTkJVRihuKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoaW5sZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGlubGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCiAjZGVmaW5lIFJFUVVJUkVfT1VUQlVGKG4pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKG91dGxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBNQkVSUl9UT09TTUFMTDsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKG91dGxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09TTUFMTDsgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCi0jZGVmaW5lIElOMSAoKCppbmJ1ZilbMF0pCi0jZGVmaW5lIElOMiAoKCppbmJ1ZilbMV0pCi0jZGVmaW5lIElOMyAoKCppbmJ1ZilbMl0pCi0jZGVmaW5lIElONCAoKCppbmJ1ZilbM10pCisjZGVmaW5lIElOQllURTEgKCgqaW5idWYpWzBdKQorI2RlZmluZSBJTkJZVEUyICgoKmluYnVmKVsxXSkKKyNkZWZpbmUgSU5CWVRFMyAoKCppbmJ1ZilbMl0pCisjZGVmaW5lIElOQllURTQgKCgqaW5idWYpWzNdKQogCi0jZGVmaW5lIE9VVDEoYykgKCgqb3V0YnVmKVswXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDIoYykgKCgqb3V0YnVmKVsxXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDMoYykgKCgqb3V0YnVmKVsyXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDQoYykgKCgqb3V0YnVmKVszXSkgPSAoYyk7CisjZGVmaW5lIElOQ0hBUjEgKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsICppbnBvcykpCisjZGVmaW5lIElOQ0hBUjIgKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsICppbnBvcyArIDEpKQogCi0jZGVmaW5lIFdSSVRFMShjMSkgICAgICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigxKSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7Ci0jZGVmaW5lIFdSSVRFMihjMSwgYzIpICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigyKSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gKGMyKTsKLSNkZWZpbmUgV1JJVEUzKGMxLCBjMiwgYzMpICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDMpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsyXSA9IChjMyk7Ci0jZGVmaW5lIFdSSVRFNChjMSwgYzIsIGMzLCBjNCkgIFwKLSAgICBSRVFVSVJFX09VVEJVRig0KSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVszXSA9IChjNCk7CisjZGVmaW5lIE9VVENIQVIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcih3cml0ZXIsIChjKSkgPCAwKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfRVhDRVBUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotIyBkZWZpbmUgV1JJVEVVQ1M0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gMHhkODAwICsgKCgoYykgLSAweDEwMDAwKSA+PiAxMCk7ICAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IDB4ZGMwMCArICgoKGMpIC0gMHgxMDAwMCkgJiAweDNmZik7ICAgICAgICAgIFwKLSAgICBORVhUX09VVCgyKQotI2Vsc2UKLSMgZGVmaW5lIFdSSVRFVUNTNChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICoqb3V0YnVmID0gKFB5X1VOSUNPREUpKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBORVhUX09VVCgxKQotI2VuZGlmCisjZGVmaW5lIE9VVENIQVIyKGMxLCBjMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgX2MxID0gKGMxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgX2MyID0gKGMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCAyLCBQeV9NQVgoX2MxLCBjMikpIDwgMCkgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfRVhDRVBUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIF9jMSk7ICAgICBcCisgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MgKyAxLCBfYzIpOyBcCisgICAgICAgIHdyaXRlci0+cG9zICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBPVVRCWVRFMShjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzBdKSA9IChjKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgT1VUQllURTIoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVsxXSkgPSAoYyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIE9VVEJZVEUzKGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbMl0pID0gKGMpOyB9IHdoaWxlICgwKQorI2RlZmluZSBPVVRCWVRFNChjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzNdKSA9IChjKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBXUklURUJZVEUxKGMxKSAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFdSSVRFQllURTIoYzEsIGMyKSAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV1JJVEVCWVRFMyhjMSwgYzIsIGMzKSAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMyk7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzJdID0gKGMzKTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBXUklURUJZVEU0KGMxLCBjMiwgYzMsIGM0KSAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRig0KTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbM10gPSAoYzQpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgX1RSWU1BUF9FTkMobSwgYXNzaSwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKChtKS0+bWFwICE9IE5VTEwgJiYgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgXAogICAgICAgICAodmFsKTw9IChtKS0+dG9wICYmICgoYXNzaSkgPSAobSktPm1hcFsodmFsKSAtICAgICAgICAgIFwKICAgICAgICAgKG0pLT5ib3R0b21dKSAhPSBOT0NIQVIpCi0jZGVmaW5lIFRSWU1BUF9FTkNfQ09ORChjaGFyc2V0LCBhc3NpLCB1bmkpICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBUUllNQVBfRU5DKGNoYXJzZXQsIGFzc2ksIHVuaSkgICAgICAgICAgICAgICAgICAgICBcCiAgICAgX1RSWU1BUF9FTkMoJmNoYXJzZXQjI19lbmNtYXBbKHVuaSkgPj4gOF0sIGFzc2ksICh1bmkpICYgMHhmZikKLSNkZWZpbmUgVFJZTUFQX0VOQyhjaGFyc2V0LCBhc3NpLCB1bmkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgVFJZTUFQX0VOQ19DT05EKGNoYXJzZXQsIGFzc2ksIHVuaSkKIAotI2RlZmluZSBfVFJZTUFQX0RFQyhtLCBhc3NpLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICBcCi0gICAgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgKChhc3NpKSA9IChtKS0+bWFwWyh2YWwpIC0gICAgICAgICAgXAotICAgICAgICAobSktPmJvdHRvbV0pICE9IFVOSUlOVikKLSNkZWZpbmUgVFJZTUFQX0RFQyhjaGFyc2V0LCBhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbYzFdLCBhc3NpLCBjMikKLQotI2RlZmluZSBfVFJZTUFQX0VOQ19NUExBTkUobSwgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgdmFsKSAgICAgIFwKLSAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICBcCi0gICAgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoKGFzc3BsYW5lKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozXSkgIT0gMCAmJiBcCi0gICAgICAgICgoKGFzc2hpKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozICsgMV0pLCAxKSAmJiBcCi0gICAgICAgICgoKGFzc2xvKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozICsgMl0pLCAxKSkKLSNkZWZpbmUgVFJZTUFQX0VOQ19NUExBTkUoY2hhcnNldCwgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgdW5pKSBcCi0gICAgaWYgX1RSWU1BUF9FTkNfTVBMQU5FKCZjaGFyc2V0IyNfZW5jbWFwWyh1bmkpID4+IDhdLCBcCi0gICAgICAgICAgICAgICAgICAgICAgIGFzc3BsYW5lLCBhc3NoaSwgYXNzbG8sICh1bmkpICYgMHhmZikKLSNkZWZpbmUgVFJZTUFQX0RFQ19NUExBTkUoY2hhcnNldCwgYXNzaSwgcGxhbmUsIGMxLCBjMikgICAgICAgICBcCi0gICAgaWYgX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbcGxhbmVdW2MxXSwgYXNzaSwgYzIpCi0KLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotI2RlZmluZSBERUNPREVfU1VSUk9HQVRFKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYyA+PiAxMCA9PSAweGQ4MDAgPj4gMTApIHsgLyogaGlnaCBzdXJyb2dhdGUgKi8gICAgICAgICBcCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoSU4yID4+IDEwID09IDB4ZGMwMCA+PiAxMCkgeyAvKiBsb3cgc3Vycm9nYXRlICovIFwKLSAgICAgICAgICAgIGMgPSAweDEwMDAwICsgKCh1Y3M0X3QpKGMgLSAweGQ4MDApIDw8IDEwKSArIFwKLSAgICAgICAgICAgICgodWNzNF90KShJTjIpIC0gMHhkYzAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLSNkZWZpbmUgR0VUX0lOU0laRShjKSAgICgoYykgPiAweGZmZmYgPyAyIDogMSkKLSNlbHNlCi0jZGVmaW5lIERFQ09ERV9TVVJST0dBVEUoYykgezt9Ci0jZGVmaW5lIEdFVF9JTlNJWkUoYykgICAxCi0jZW5kaWYKKyNkZWZpbmUgX1RSWU1BUF9ERUMobSwgYXNzaSwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgobSktPm1hcCAhPSBOVUxMICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKGFzc2kpID0gKG0pLT5tYXBbKHZhbCkgLSAobSktPmJvdHRvbV0pICE9IFVOSUlOVikKKyNkZWZpbmUgVFJZTUFQX0RFQyhjaGFyc2V0LCBhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW2MxXSwgYXNzaSwgYzIpCiAKICNkZWZpbmUgQkVHSU5fTUFQUElOR1NfTElTVCBzdGF0aWMgY29uc3Qgc3RydWN0IGRiY3NfbWFwIF9tYXBwaW5nX2xpc3RbXSA9IHsKICNkZWZpbmUgTUFQUElOR19FTkNPTkxZKGVuYykgeyNlbmMsICh2b2lkKillbmMjI19lbmNtYXAsIE5VTEx9LApAQCAtMzI0LDcgKzMyMyw3IEBACiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBhaXJfZW5jb2RlbWFwICpoYXlzdGFjaywgaW50IGhheXN0YWNrc2l6ZSkKIHsKICAgICBpbnQgcG9zLCBtaW4sIG1heDsKLSAgICB1Y3M0X3QgdmFsdWUgPSBib2R5IDw8IDE2IHwgbW9kaWZpZXI7CisgICAgUHlfVUNTNCB2YWx1ZSA9IGJvZHkgPDwgMTYgfCBtb2RpZmllcjsKIAogICAgIG1pbiA9IDA7CiAgICAgbWF4ID0gaGF5c3RhY2tzaXplOwpAQCAtMzU5LDcgKzM1OCw3IEBACiB7CiAgICAgUHlPYmplY3QgKm8sICptb2Q7CiAKLSAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoKGNoYXIgKiltb2RuYW1lKTsKKyAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUobW9kbmFtZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oCmluZGV4IDQyMjdmYjIuLmE1ZDVhNzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaApAQCAtMiw3ICsyLDcgQEAKICAqIHN0YW5kYXJkcy4gKi8KIAogI2lmbmRlZiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQKLSNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEIDEKKyMgIGRlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQgMQogI2VuZGlmCiAKICNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoYXNzaSwgYykgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTExLDE3ICsxMSwyMCBAQAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1MjVEIHx8IChjKSA9PSAweDU0MUUgfHwgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1NjUzIHx8IChjKSA9PSAweDU5RjggfHwgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1QzVCIHx8IChjKSA9PSAweDVFNzcgfHwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg3NjI2IHx8IChjKSA9PSAweDdFNkIpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg3NjI2IHx8IChjKSA9PSAweDdFNkIpKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOyAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4OUIxRCkgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4OUIxRCkgeyAgICAgICAgICAgICAgICAgXAogICAgICAgICAoYXNzaSkgPSAweDgwMDAgfCAweDdkM2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChhc3NpLCBjKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDIwQjlGKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOworICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDIwQjlGKSB7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOyAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2lmbmRlZiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQKLSNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEIDIKKyMgIGRlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQgMgogI2VuZGlmCiAKICNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEoYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgIFwKQEAgLTM1LDkgKzM4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3QikgfHwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3QykgfHwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RCkgfHwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RSkpKSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RSkpKSB7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQ7ICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICBcCi0gICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMxKSA9PSAweDdEICYmIChjMikgPT0gMHgzQikgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IDB4OUIxRDsKKyNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIod3JpdGVyLCBjMSwgYzIpICAgICAgICAgICAgIFwKKyAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYzEpID09IDB4N0QgJiYgKGMyKSA9PSAweDNCKSB7ICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDlCMUQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTJfQ0hBUihhc3NpLCBjMSwgYzIpICAgICAgICAgIFwKKyAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYzEpID09IDB4N0QgJiYgKGMyKSA9PSAweDNCKSB7ICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg5QjFEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oCmluZGV4IGE2ZGNlYmYuLjFmOGMyOTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaApAQCAtNDA0OSw3ICs0MDQ5LDcgQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IF9nYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXMgewotICAgIFB5X1VOSUNPREUgICBmaXJzdCwgbGFzdDsKKyAgICBQeV9VQ1M0ICAgZmlyc3QsIGxhc3Q7CiAgICAgREJDSEFSICAgICAgIGJhc2U7CiB9IGdiMTgwMzBfdG9fdW5pYm1wX3Jhbmdlc1tdID0gewogezEyOCwxNjMsMH0sezE2NSwxNjYsMzZ9LHsxNjksMTc1LDM4fSx7MTc4LDE4Miw0NX0sezE4NCwyMTQsNTB9LHsyMTYsMjIzLDgxfSx7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmgKaW5kZXggZWRhOGU5ZS4uNzI5ZTRiYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaApAQCAtMyw3ICszLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lkZWRiY3NfaW5kZXggKmppc3gwMjEzX3BhaXJfZGVjbWFwOwogc3RhdGljIGNvbnN0IHN0cnVjdCBwYWlyX2VuY29kZW1hcCAqamlzeDAyMTNfcGFpcl9lbmNtYXA7CiAjZWxzZQotc3RhdGljIGNvbnN0IHVjczRfdCBfX2ppc3gwMjEzX3BhaXJfZGVjbWFwWzQ5XSA9IHsKK3N0YXRpYyBjb25zdCBQeV9VQ1M0IF9famlzeDAyMTNfcGFpcl9kZWNtYXBbNDldID0gewogODEwMjM0MDEwLDgxMDM2NTA4Miw4MTA0OTYxNTQsODEwNjI3MjI2LDgxMDc1ODI5OCw4MTY1MjU0NjYsODE2NjU2NTM4LAogODE2Nzg3NjEwLDgxNjkxODY4Miw4MTcwNDk3NTQsODE3NTc0MDQyLDgxODE2Mzg2Niw4MTg0MjYwMTAsODM4MjgzNDE4LAogMTUwNzQwNDgsVSxVLFUsMzkwNjAyMjQsMzkwNjAyMjUsNDI3MzAyNDAsNDI3MzAyNDEsMzkzODc5MDQsMzkzODc5MDUsMzk0NTM0NDAsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYwppbmRleCBjMDMyY2RiLi4wODdhZTliIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKQEAgLTEwLDE1ICsxMCwxNiBAQAogI2luY2x1ZGUgIm11bHRpYnl0ZWNvZGVjLmgiCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBjb25zdCBQeV9VTklDT0RFICAgICppbmJ1ZiwgKmluYnVmX3RvcCwgKmluYnVmX2VuZDsKKyAgICBQeU9iamVjdCAgICAgICAgICAgICppbm9iajsKKyAgICBQeV9zc2l6ZV90ICAgICAgICAgIGlucG9zLCBpbmxlbjsKICAgICB1bnNpZ25lZCBjaGFyICAgICAgICpvdXRidWYsICpvdXRidWZfZW5kOwogICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmV4Y29iaiwgKm91dG9iajsKIH0gTXVsdGlieXRlRW5jb2RlQnVmZmVyOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsICppbmJ1Zl90b3AsICppbmJ1Zl9lbmQ7Ci0gICAgUHlfVU5JQ09ERSAgICAgICAgICAqb3V0YnVmLCAqb3V0YnVmX2VuZDsKLSAgICBQeU9iamVjdCAgICAgICAgICAgICpleGNvYmosICpvdXRvYmo7CisgICAgUHlPYmplY3QgICAgICAgICAgICAqZXhjb2JqOworICAgIF9QeVVuaWNvZGVXcml0ZXIgICAgd3JpdGVyOwogfSBNdWx0aWJ5dGVEZWNvZGVCdWZmZXI7CiAKIFB5RG9jX1NUUlZBUihNdWx0aWJ5dGVDb2RlY19FbmNvZGVfX2RvY19fLApAQCAtNDUsMTEgKzQ2LDEzIEBACiBzdGF0aWMgY2hhciAqc3RyZWFta3dhcmdsaXN0W10gPSB7InN0cmVhbSIsICJlcnJvcnMiLCBOVUxMfTsKIAogc3RhdGljIFB5T2JqZWN0ICptdWx0aWJ5dGVjb2RlY19lbmNvZGUoTXVsdGlieXRlQ29kZWMgKiwKLSAgICAgICAgICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqLCBjb25zdCBQeV9VTklDT0RFICoqLCBQeV9zc2l6ZV90LAorICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICosIFB5T2JqZWN0ICosIFB5X3NzaXplX3QgKiwKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqLCBpbnQpOwogCiAjZGVmaW5lIE1CRU5DX1JFU0VUICAgICBNQkVOQ19NQVg8PDEgLyogcmVzZXQgYWZ0ZXIgYW4gZW5jb2Rpbmcgc2Vzc2lvbiAqLwogCitfUHlfSURFTlRJRklFUih3cml0ZSk7CisKIHN0YXRpYyBQeU9iamVjdCAqCiBtYWtlX3R1cGxlKFB5T2JqZWN0ICpvYmplY3QsIFB5X3NzaXplX3QgbGVuKQogewpAQCAtMTk3LDI5ICsyMDAsNiBAQAogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCi1zdGF0aWMgaW50Ci1leHBhbmRfZGVjb2RlYnVmZmVyKE11bHRpYnl0ZURlY29kZUJ1ZmZlciAqYnVmLCBQeV9zc2l6ZV90IGVzaXplKQotewotICAgIFB5X3NzaXplX3Qgb3JncG9zLCBvcmdzaXplOwotCi0gICAgb3JncG9zID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmIC0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLT5vdXRvYmopKTsKLSAgICBvcmdzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLSAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLT5vdXRvYmosIG9yZ3NpemUgKyAoCi0gICAgICAgIGVzaXplIDwgKG9yZ3NpemUgPj4gMSkgPyAob3Jnc2l6ZSA+PiAxKSB8IDEgOiBlc2l6ZSkpID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBidWYtPm91dGJ1ZiA9IFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi0+b3V0b2JqKSArIG9yZ3BvczsKLSAgICBidWYtPm91dGJ1Zl9lbmQgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYtPm91dG9iaikKLSAgICAgICAgICAgICAgICAgICAgICArIFB5VW5pY29kZV9HRVRfU0laRShidWYtPm91dG9iaik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLSNkZWZpbmUgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCBzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKHMpIDwgMSB8fCAoYnVmKS0+b3V0YnVmICsgKHMpID4gKGJ1ZiktPm91dGJ1Zl9lbmQpICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGV4cGFuZF9kZWNvZGVidWZmZXIoYnVmLCBzKSA9PSAtMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQogCiAvKioKICAqIE11bHRpYnl0ZUNvZGVjIG9iamVjdApAQCAtMjQ3LDcgKzIyNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gMDsgLyogcmV0cnkgaXQgKi8KICAgICAgICAgY2FzZSBNQkVSUl9UT09GRVc6CiAgICAgICAgICAgICByZWFzb24gPSAiaW5jb21wbGV0ZSBtdWx0aWJ5dGUgc2VxdWVuY2UiOwotICAgICAgICAgICAgZXNpemUgPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1Zl9lbmQgLSBidWYtPmluYnVmKTsKKyAgICAgICAgICAgIGVzaXplID0gKFB5X3NzaXplX3QpYnVmLT5pbnBvczsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1CRVJSX0lOVEVSTkFMOgogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKQEAgLTI2MSwxNCArMjQxLDI0IEBACiAgICAgfQogCiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7Ci0gICAgICAgIGNvbnN0IFB5X1VOSUNPREUgcmVwbGNoYXIgPSAnPycsICppbmJ1ZiA9ICZyZXBsY2hhcjsKKyAgICAgICAgUHlPYmplY3QgKnJlcGxjaGFyOwogICAgICAgICBQeV9zc2l6ZV90IHI7CisgICAgICAgIFB5X3NzaXplX3QgaW5wb3M7CisgICAgICAgIGludCBraW5kOworICAgICAgICB2b2lkICpkYXRhOwogCisgICAgICAgIHJlcGxjaGFyID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKCc/Jyk7CisgICAgICAgIGlmIChyZXBsY2hhciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChyZXBsY2hhcik7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShyZXBsY2hhcik7CisKKyAgICAgICAgaW5wb3MgPSAwOwogICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IG91dGxlZnQ7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwogCi0gICAgICAgICAgICBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmX2VuZCAtIGJ1Zi0+b3V0YnVmKTsKLSAgICAgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLCAmaW5idWYsIDEsCisgICAgICAgICAgICByID0gY29kZWMtPmVuY29kZShzdGF0ZSwgY29kZWMtPmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsIGRhdGEsICZpbnBvcywgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYtPm91dGJ1Ziwgb3V0bGVmdCwgMCk7CiAgICAgICAgICAgICBpZiAociA9PSBNQkVSUl9UT09TTUFMTCkgewogICAgICAgICAgICAgICAgIFJFUVVJUkVfRU5DT0RFQlVGRkVSKGJ1ZiwgLTEpOwpAQCAtMjc4LDI1ICsyNjgsMjcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIFB5X0RFQ1JFRihyZXBsY2hhcik7CisKICAgICAgICAgaWYgKHIgIT0gMCkgewogICAgICAgICAgICAgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCAxKTsKICAgICAgICAgICAgICpidWYtPm91dGJ1ZisrID0gJz8nOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChlcnJvcnMgPT0gRVJST1JfSUdOT1JFIHx8IGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7Ci0gICAgICAgIGJ1Zi0+aW5idWYgKz0gZXNpemU7CisgICAgICAgIGJ1Zi0+aW5wb3MgKz0gZXNpemU7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHN0YXJ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+aW5idWYgLSBidWYtPmluYnVmX3RvcCk7CisgICAgc3RhcnQgPSAoUHlfc3NpemVfdClidWYtPmlucG9zOwogICAgIGVuZCA9IHN0YXJ0ICsgZXNpemU7CiAKICAgICAvKiB1c2UgY2FjaGVkIGV4Y2VwdGlvbiBvYmplY3QgaWYgYXZhaWxhYmxlICovCiAgICAgaWYgKGJ1Zi0+ZXhjb2JqID09IE5VTEwpIHsKLSAgICAgICAgYnVmLT5leGNvYmogPSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9DcmVhdGUoY29kZWMtPmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVmLT5pbmJ1Zl90b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWZfdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCwgcmVhc29uKTsKKyAgICAgICAgYnVmLT5leGNvYmogPSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzT25ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYy0+ZW5jb2RpbmcsIGJ1Zi0+aW5vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCByZWFzb24pOwogICAgICAgICBpZiAoYnVmLT5leGNvYmogPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KQEAgLTMyNSwxMCArMzE3LDEwIEBACiAgICAgfQogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh0b2JqKSkgewotICAgICAgICBjb25zdCBQeV9VTklDT0RFICp1cmF3ID0gUHlVbmljb2RlX0FTX1VOSUNPREUodG9iaik7CisgICAgICAgIFB5X3NzaXplX3QgaW5wb3M7CiAKLSAgICAgICAgcmV0c3RyID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKGNvZGVjLCBzdGF0ZSwgJnVyYXcsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodG9iaiksIEVSUk9SX1NUUklDVCwKKyAgICAgICAgcmV0c3RyID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKGNvZGVjLCBzdGF0ZSwgdG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICZpbnBvcywgRVJST1JfU1RSSUNULAogICAgICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0gpOwogICAgICAgICBpZiAocmV0c3RyID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKQEAgLTM0NywxNSArMzM5LDE1IEBACiAKICAgICBuZXdwb3MgPSBQeUxvbmdfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0ocmV0b2JqLCAxKSk7CiAgICAgaWYgKG5ld3BvcyA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIG5ld3BvcyArPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1Zl9lbmQgLSBidWYtPmluYnVmX3RvcCk7Ci0gICAgaWYgKG5ld3BvcyA8IDAgfHwgYnVmLT5pbmJ1Zl90b3AgKyBuZXdwb3MgPiBidWYtPmluYnVmX2VuZCkgeworICAgICAgICBuZXdwb3MgKz0gKFB5X3NzaXplX3QpYnVmLT5pbmxlbjsKKyAgICBpZiAobmV3cG9zIDwgMCB8fCBuZXdwb3MgPiBidWYtPmlubGVuKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbmRleEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uICV6ZCBmcm9tIGVycm9yIGhhbmRsZXIgb3V0IG9mIGJvdW5kcyIsCiAgICAgICAgICAgICAgICAgICAgICBuZXdwb3MpOwogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9Ci0gICAgYnVmLT5pbmJ1ZiA9IGJ1Zi0+aW5idWZfdG9wICsgbmV3cG9zOworICAgIGJ1Zi0+aW5wb3MgPSBuZXdwb3M7CiAKICAgICBQeV9ERUNSRUYocmV0b2JqKTsKICAgICBQeV9ERUNSRUYocmV0c3RyKTsKQEAgLTM3NCw3ICszNjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVycm9ycywgUHlfc3NpemVfdCBlKQogewogICAgIFB5T2JqZWN0ICpyZXRvYmogPSBOVUxMLCAqcmV0dW5pID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHJldHVuaXNpemUsIG5ld3BvczsKKyAgICBQeV9zc2l6ZV90IG5ld3BvczsKICAgICBjb25zdCBjaGFyICpyZWFzb247CiAgICAgUHlfc3NpemVfdCBlc2l6ZSwgc3RhcnQsIGVuZDsKIApAQCAtMzg1LDcgKzM3Nyw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoZSkgewogICAgICAgICBjYXNlIE1CRVJSX1RPT1NNQUxMOgotICAgICAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCAtMSk7CiAgICAgICAgICAgICByZXR1cm4gMDsgLyogcmV0cnkgaXQgKi8KICAgICAgICAgY2FzZSBNQkVSUl9UT09GRVc6CiAgICAgICAgICAgICByZWFzb24gPSAiaW5jb21wbGV0ZSBtdWx0aWJ5dGUgc2VxdWVuY2UiOwpAQCAtMzk1LDYgKzM4Niw4IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBjb2RlYyBlcnJvciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBjYXNlIE1CRVJSX0VYQ0VQVElPTjoKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gcnVudGltZSBlcnJvciIpOwpAQCAtNDAzLDggKzM5Niw5IEBACiAgICAgfQogCiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7Ci0gICAgICAgIFJFUVVJUkVfREVDT0RFQlVGRkVSKGJ1ZiwgMSk7Ci0gICAgICAgICpidWYtPm91dGJ1ZisrID0gUHlfVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVI7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmYnVmLT53cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogICAgIGlmIChlcnJvcnMgPT0gRVJST1JfSUdOT1JFIHx8IGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7CiAgICAgICAgIGJ1Zi0+aW5idWYgKz0gZXNpemU7CkBAIC00NDcsMTUgKzQ0MSw4IEBACiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KIAotICAgIGlmIChQeVVuaWNvZGVfQXNVbmljb2RlKHJldHVuaSkgPT0gTlVMTCkKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmYnVmLT53cml0ZXIsIHJldHVuaSkgPCAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICByZXR1bmlzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKHJldHVuaSk7Ci0gICAgaWYgKHJldHVuaXNpemUgPiAwKSB7Ci0gICAgICAgIFJFUVVJUkVfREVDT0RFQlVGRkVSKGJ1ZiwgcmV0dW5pc2l6ZSk7Ci0gICAgICAgIG1lbWNweSgoY2hhciAqKWJ1Zi0+b3V0YnVmLCBQeVVuaWNvZGVfQVNfVU5JQ09ERShyZXR1bmkpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dW5pc2l6ZSAqIFB5X1VOSUNPREVfU0laRSk7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmICs9IHJldHVuaXNpemU7Ci0gICAgfQogCiAgICAgbmV3cG9zID0gUHlMb25nX0FzU3NpemVfdChQeVR1cGxlX0dFVF9JVEVNKHJldG9iaiwgMSkpOwogICAgIGlmIChuZXdwb3MgPCAwICYmICFQeUVycl9PY2N1cnJlZCgpKQpAQCAtNDc5LDE5ICs0NjYsMjkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoTXVsdGlieXRlQ29kZWMgKmNvZGVjLAogICAgICAgICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqZGF0YSwgUHlfc3NpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0ZXh0LCBQeV9zc2l6ZV90ICppbnBvc190LAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplcnJvcnMsIGludCBmbGFncykKIHsKICAgICBNdWx0aWJ5dGVFbmNvZGVCdWZmZXIgYnVmOwogICAgIFB5X3NzaXplX3QgZmluYWxzaXplLCByID0gMDsKKyAgICBQeV9zc2l6ZV90IGRhdGFsZW47CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodGV4dCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodGV4dCk7CiAKICAgICBpZiAoZGF0YWxlbiA9PSAwICYmICEoZmxhZ3MgJiBNQkVOQ19SRVNFVCkpCiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwogCiAgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgYnVmLm91dG9iaiA9IE5VTEw7Ci0gICAgYnVmLmluYnVmID0gYnVmLmluYnVmX3RvcCA9ICpkYXRhOwotICAgIGJ1Zi5pbmJ1Zl9lbmQgPSBidWYuaW5idWZfdG9wICsgZGF0YWxlbjsKKyAgICBidWYuaW5vYmogPSB0ZXh0OyAgIC8qIGJvcnJvd2VkIHJlZmVyZW5jZSAqLworICAgIGJ1Zi5pbnBvcyA9IDA7CisgICAgYnVmLmlubGVuID0gZGF0YWxlbjsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoYnVmLmlub2JqKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoYnVmLmlub2JqKTsKIAogICAgIGlmIChkYXRhbGVuID4gKFBZX1NTSVpFX1RfTUFYIC0gMTYpIC8gMikgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtNTA0LDE0ICs1MDEsMTQgQEAKICAgICBidWYub3V0YnVmID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhidWYub3V0b2JqKTsKICAgICBidWYub3V0YnVmX2VuZCA9IGJ1Zi5vdXRidWYgKyBQeUJ5dGVzX0dFVF9TSVpFKGJ1Zi5vdXRvYmopOwogCi0gICAgd2hpbGUgKGJ1Zi5pbmJ1ZiA8IGJ1Zi5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQ7Ci0KKyAgICB3aGlsZSAoYnVmLmlucG9zIDwgYnVmLmlubGVuKSB7CiAgICAgICAgIC8qIHdlIGRvbid0IHJldXNlIGlubGVmdCBhbmQgb3V0bGVmdCBoZXJlLgogICAgICAgICAgKiBlcnJvciBjYWxsYmFja3MgY2FuIHJlbG9jYXRlIHRoZSBjdXJzb3IgYW55d2hlcmUgb24gYnVmZmVyKi8KLSAgICAgICAgaW5sZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5pbmJ1Zl9lbmQgLSBidWYuaW5idWYpOwotICAgICAgICBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWZfZW5kIC0gYnVmLm91dGJ1Zik7Ci0gICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLCAmYnVmLmluYnVmLCBpbmxlZnQsCisgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmX2VuZCAtIGJ1Zi5vdXRidWYpOworCisgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmLmlucG9zLCBidWYuaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYub3V0YnVmLCBvdXRsZWZ0LCBmbGFncyk7CiAgICAgICAgIGlmICgociA9PSAwKSB8fCAociA9PSBNQkVSUl9UT09GRVcgJiYgIShmbGFncyAmIE1CRU5DX0ZMVVNIKSkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTU0Miw3ICs1MzksOCBAQAogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZidWYub3V0b2JqLCBmaW5hbHNpemUpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKLSAgICAqZGF0YSA9IGJ1Zi5pbmJ1ZjsKKyAgICBpZiAoaW5wb3NfdCkKKyAgICAgICAgKmlucG9zX3QgPSBidWYuaW5wb3M7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKICAgICByZXR1cm4gYnVmLm91dG9iajsKIApAQCAtNTU3LDcgKzU1NSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgc3RhdGU7Ci0gICAgUHlfVU5JQ09ERSAqZGF0YTsKICAgICBQeU9iamVjdCAqZXJyb3JjYiwgKnIsICphcmcsICp1Y3Z0OwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuOwpAQCAtNTgwLDExICs1NzcsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShhcmcsICZkYXRhbGVuKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShhcmcpIDwgMCkgewogICAgICAgICBQeV9YREVDUkVGKHVjdnQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgZGF0YWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGFyZyk7CiAKICAgICBlcnJvcmNiID0gaW50ZXJuYWxfZXJyb3JfY2FsbGJhY2soZXJyb3JzKTsKICAgICBpZiAoZXJyb3JjYiA9PSBOVUxMKSB7CkBAIC01OTYsNyArNTkzLDcgQEAKICAgICAgICAgc2VsZi0+Y29kZWMtPmVuY2luaXQoJnN0YXRlLCBzZWxmLT5jb2RlYy0+Y29uZmlnKSAhPSAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICByID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKHNlbGYtPmNvZGVjLCAmc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgIChjb25zdCBQeV9VTklDT0RFICoqKSZkYXRhLCBkYXRhbGVuLCBlcnJvcmNiLAorICAgICAgICAgICAgICAgICAgICBhcmcsIE5VTEwsIGVycm9yY2IsCiAgICAgICAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQpOwogICAgIGlmIChyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtNjE3LDEwICs2MTQsMTAgQEAKIHsKICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSBzdGF0ZTsKICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgYnVmOwotICAgIFB5T2JqZWN0ICplcnJvcmNiOworICAgIFB5T2JqZWN0ICplcnJvcmNiLCAqcmVzOwogICAgIFB5X2J1ZmZlciBwZGF0YTsKICAgICBjb25zdCBjaGFyICpkYXRhLCAqZXJyb3JzID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGRhdGFsZW4sIGZpbmFsc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGRhdGFsZW47CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ5Knx6OmRlY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNrd2FyZ2xpc3QsICZwZGF0YSwgJmVycm9ycykpCkBAIC02NDAsMjkgKzYzNywyMyBAQAogICAgICAgICByZXR1cm4gbWFrZV90dXBsZShQeVVuaWNvZGVfTmV3KDAsIDApLCAwKTsKICAgICB9CiAKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJmJ1Zi53cml0ZXIpOworICAgIGJ1Zi53cml0ZXIubWluX2xlbmd0aCA9IGRhdGFsZW47CiAgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgYnVmLmluYnVmID0gYnVmLmluYnVmX3RvcCA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsKICAgICBidWYuaW5idWZfZW5kID0gYnVmLmluYnVmX3RvcCArIGRhdGFsZW47Ci0gICAgYnVmLm91dG9iaiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBkYXRhbGVuKTsKLSAgICBpZiAoYnVmLm91dG9iaiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBidWYub3V0YnVmID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaik7Ci0gICAgaWYgKGJ1Zi5vdXRidWYgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgYnVmLm91dGJ1Zl9lbmQgPSBidWYub3V0YnVmICsgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopOwogCiAgICAgaWYgKHNlbGYtPmNvZGVjLT5kZWNpbml0ICE9IE5VTEwgJiYKICAgICAgICAgc2VsZi0+Y29kZWMtPmRlY2luaXQoJnN0YXRlLCBzZWxmLT5jb2RlYy0+Y29uZmlnKSAhPSAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIHdoaWxlIChidWYuaW5idWYgPCBidWYuaW5idWZfZW5kKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCBvdXRsZWZ0LCByOworICAgICAgICBQeV9zc2l6ZV90IGlubGVmdCwgcjsKIAogICAgICAgICBpbmxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLmluYnVmX2VuZCAtIGJ1Zi5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1Zl9lbmQgLSBidWYub3V0YnVmKTsKIAogICAgICAgICByID0gc2VsZi0+Y29kZWMtPmRlY29kZSgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAmYnVmLmluYnVmLCBpbmxlZnQsICZidWYub3V0YnVmLCBvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5idWYsIGlubGVmdCwgJmJ1Zi53cml0ZXIpOwogICAgICAgICBpZiAociA9PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGVsc2UgaWYgKG11bHRpYnl0ZWNvZGVjX2RlY2Vycm9yKHNlbGYtPmNvZGVjLCAmc3RhdGUsCkBAIC02NzAsMjMgKzY2MSwyMCBAQAogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogCi0gICAgZmluYWxzaXplID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWYgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYub3V0b2JqKSk7Ci0KLSAgICBpZiAoZmluYWxzaXplICE9IFB5VW5pY29kZV9HRVRfU0laRShidWYub3V0b2JqKSkKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmYnVmLndyaXRlcik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwogICAgIEVSUk9SX0RFQ1JFRihlcnJvcmNiKTsKLSAgICByZXR1cm4gbWFrZV90dXBsZShidWYub3V0b2JqLCBkYXRhbGVuKTsKKyAgICByZXR1cm4gbWFrZV90dXBsZShyZXMsIGRhdGFsZW4pOwogCiBlcnJvcmV4aXQ6CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIEVSUk9SX0RFQ1JFRihlcnJvcmNiKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIFB5X1hERUNSRUYoYnVmLm91dG9iaik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZidWYud3JpdGVyKTsKIAogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNzUyLDkgKzc0MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pc3RyLCBpbnQgZmluYWwpCiB7CiAgICAgUHlPYmplY3QgKnVjdnQsICpyID0gTlVMTDsKLSAgICBQeV9VTklDT0RFICppbmJ1ZiwgKmluYnVmX2VuZCwgKmluYnVmX3RtcCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBkYXRhbGVuLCBvcmlncGVuZGluZzsKLSAgICB3Y2hhcl90ICpkYXRhOworICAgIFB5T2JqZWN0ICppbmJ1ZiA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpbnBvcywgZGF0YWxlbjsKKyAgICBQeU9iamVjdCAqb3JpZ3BlbmRpbmcgPSBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh1bmlzdHIpKQogICAgICAgICB1Y3Z0ID0gTlVMTDsKQEAgLTc3MCw2OSArNzU4LDY2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkYXRhID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUodW5pc3RyLCAmZGF0YWxlbik7Ci0gICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgb3JpZ3BlbmRpbmcgPSBjdHgtPnBlbmRpbmdzaXplOworICAgIGlmIChjdHgtPnBlbmRpbmcpIHsKKyAgICAgICAgUHlPYmplY3QgKmluYnVmX3RtcDsKIAotICAgIGlmIChvcmlncGVuZGluZyA+IDApIHsKLSAgICAgICAgaWYgKGRhdGFsZW4gPiBQWV9TU0laRV9UX01BWCAtIGN0eC0+cGVuZGluZ3NpemUpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAvKiBpbmJ1Zl90bXAgPT0gTlVMTCAqLwotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIH0KLSAgICAgICAgaW5idWZfdG1wID0gUHlNZW1fTmV3KFB5X1VOSUNPREUsIGRhdGFsZW4gKyBjdHgtPnBlbmRpbmdzaXplKTsKKyAgICAgICAgUHlfSU5DUkVGKGN0eC0+cGVuZGluZyk7CisgICAgICAgIG9yaWdwZW5kaW5nID0gY3R4LT5wZW5kaW5nOworCisgICAgICAgIFB5X0lOQ1JFRihjdHgtPnBlbmRpbmcpOworICAgICAgICBpbmJ1Zl90bXAgPSBjdHgtPnBlbmRpbmc7CisgICAgICAgIFB5VW5pY29kZV9BcHBlbmQoJmluYnVmX3RtcCwgdW5pc3RyKTsKICAgICAgICAgaWYgKGluYnVmX3RtcCA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIG1lbWNweShpbmJ1Zl90bXAsIGN0eC0+cGVuZGluZywKLSAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIGN0eC0+cGVuZGluZ3NpemUpOwotICAgICAgICBtZW1jcHkoaW5idWZfdG1wICsgY3R4LT5wZW5kaW5nc2l6ZSwKLSAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHVuaXN0ciksCi0gICAgICAgICAgICBQeV9VTklDT0RFX1NJWkUgKiBkYXRhbGVuKTsKLSAgICAgICAgZGF0YWxlbiArPSBjdHgtPnBlbmRpbmdzaXplOwotICAgICAgICBjdHgtPnBlbmRpbmdzaXplID0gMDsKKyAgICAgICAgUHlfQ0xFQVIoY3R4LT5wZW5kaW5nKTsKICAgICAgICAgaW5idWYgPSBpbmJ1Zl90bXA7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgaW5idWYgPSAoUHlfVU5JQ09ERSAqKVB5VW5pY29kZV9BU19VTklDT0RFKHVuaXN0cik7CisgICAgZWxzZSB7CisgICAgICAgIG9yaWdwZW5kaW5nID0gTlVMTDsKIAotICAgIGluYnVmX2VuZCA9IGluYnVmICsgZGF0YWxlbjsKKyAgICAgICAgUHlfSU5DUkVGKHVuaXN0cik7CisgICAgICAgIGluYnVmID0gdW5pc3RyOworICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGluYnVmKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIGlucG9zID0gMDsKKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5idWYpOwogCiAgICAgciA9IG11bHRpYnl0ZWNvZGVjX2VuY29kZShjdHgtPmNvZGVjLCAmY3R4LT5zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VOSUNPREUgKiopJmluYnVmLCBkYXRhbGVuLAotICAgICAgICAgICAgICAgICAgICBjdHgtPmVycm9ycywgZmluYWwgPyBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlucG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5lcnJvcnMsIGZpbmFsID8gTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCA6IDApOwogICAgIGlmIChyID09IE5VTEwpIHsKICAgICAgICAgLyogcmVjb3ZlciB0aGUgb3JpZ2luYWwgcGVuZGluZyBidWZmZXIgKi8KLSAgICAgICAgaWYgKG9yaWdwZW5kaW5nID4gMCkKLSAgICAgICAgICAgIG1lbWNweShjdHgtPnBlbmRpbmcsIGluYnVmX3RtcCwKLSAgICAgICAgICAgICAgICBQeV9VTklDT0RFX1NJWkUgKiBvcmlncGVuZGluZyk7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSBvcmlncGVuZGluZzsKKyAgICAgICAgUHlfQ0xFQVIoY3R4LT5wZW5kaW5nKTsKKyAgICAgICAgY3R4LT5wZW5kaW5nID0gb3JpZ3BlbmRpbmc7CisgICAgICAgIG9yaWdwZW5kaW5nID0gTlVMTDsKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQorICAgIFB5X1hERUNSRUYob3JpZ3BlbmRpbmcpOwogCi0gICAgaWYgKGluYnVmIDwgaW5idWZfZW5kKSB7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAoUHlfc3NpemVfdCkoaW5idWZfZW5kIC0gaW5idWYpOwotICAgICAgICBpZiAoY3R4LT5wZW5kaW5nc2l6ZSA+IE1BWEVOQ1BFTkRJTkcpIHsKKyAgICBpZiAoaW5wb3MgPCBkYXRhbGVuKSB7CisgICAgICAgIGlmIChkYXRhbGVuIC0gaW5wb3MgPiBNQVhFTkNQRU5ESU5HKSB7CiAgICAgICAgICAgICAvKiBub3JtYWwgY29kZWNzIGNhbid0IHJlYWNoIGhlcmUgKi8KLSAgICAgICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAwOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1VuaWNvZGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVuZGluZyBidWZmZXIgb3ZlcmZsb3ciKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgICAgICB9Ci0gICAgICAgIG1lbWNweShjdHgtPnBlbmRpbmcsIGluYnVmLAotICAgICAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSAqIFB5X1VOSUNPREVfU0laRSk7CisgICAgICAgIGN0eC0+cGVuZGluZyA9IFB5VW5pY29kZV9TdWJzdHJpbmcoaW5idWYsIGlucG9zLCBkYXRhbGVuKTsKKyAgICAgICAgaWYgKGN0eC0+cGVuZGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBub3JtYWwgY29kZWNzIGNhbid0IHJlYWNoIGhlcmUgKi8KKyAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGluYnVmX3RtcCAhPSBOVUxMKQotICAgICAgICBQeU1lbV9EZWwoaW5idWZfdG1wKTsKKyAgICBQeV9ERUNSRUYoaW5idWYpOwogICAgIFB5X1hERUNSRUYodWN2dCk7CiAgICAgcmV0dXJuIHI7CiAKIGVycm9yZXhpdDoKLSAgICBpZiAoaW5idWZfdG1wICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0RlbChpbmJ1Zl90bXApOwogICAgIFB5X1hERUNSRUYocik7CiAgICAgUHlfWERFQ1JFRih1Y3Z0KTsKKyAgICBQeV9YREVDUkVGKG9yaWdwZW5kaW5nKTsKKyAgICBQeV9YREVDUkVGKGluYnVmKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODU5LDE3ICs4NDQsNyBAQAogewogICAgIGJ1Zi0+aW5idWYgPSBidWYtPmluYnVmX3RvcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YTsKICAgICBidWYtPmluYnVmX2VuZCA9IGJ1Zi0+aW5idWZfdG9wICsgc2l6ZTsKLSAgICBpZiAoYnVmLT5vdXRvYmogPT0gTlVMTCkgeyAvKiBvbmx5IGlmIG91dG9iaiBpcyBub3QgYWxsb2NhdGVkIHlldCAqLwotICAgICAgICBidWYtPm91dG9iaiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBzaXplKTsKLSAgICAgICAgaWYgKGJ1Zi0+b3V0b2JqID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmID0gUHlVbmljb2RlX0FzVW5pY29kZShidWYtPm91dG9iaik7Ci0gICAgICAgIGlmIChidWYtPm91dGJ1ZiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBidWYtPm91dGJ1Zl9lbmQgPSBidWYtPm91dGJ1ZiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRShidWYtPm91dG9iaik7Ci0gICAgfQotCisgICAgYnVmLT53cml0ZXIubWluX2xlbmd0aCArPSBzaXplOwogICAgIHJldHVybiAwOwogfQogCkBAIC04NzgsMTQgKzg1MywxMyBAQAogICAgICAgICAgICAgICAgICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgKmJ1ZikKIHsKICAgICB3aGlsZSAoYnVmLT5pbmJ1ZiA8IGJ1Zi0+aW5idWZfZW5kKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCBvdXRsZWZ0OworICAgICAgICBQeV9zc2l6ZV90IGlubGVmdDsKICAgICAgICAgUHlfc3NpemVfdCByOwogCiAgICAgICAgIGlubGVmdCA9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWYpOwotICAgICAgICBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmX2VuZCAtIGJ1Zi0+b3V0YnVmKTsKIAogICAgICAgICByID0gY3R4LT5jb2RlYy0+ZGVjb2RlKCZjdHgtPnN0YXRlLCBjdHgtPmNvZGVjLT5jb25maWcsCi0gICAgICAgICAgICAmYnVmLT5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLT5vdXRidWYsIG91dGxlZnQpOworICAgICAgICAgICAgJmJ1Zi0+aW5idWYsIGlubGVmdCwgJmJ1Zi0+d3JpdGVyKTsKICAgICAgICAgaWYgKHIgPT0gMCB8fCByID09IE1CRVJSX1RPT0ZFVykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBlbHNlIGlmIChtdWx0aWJ5dGVjb2RlY19kZWNlcnJvcihjdHgtPmNvZGVjLCAmY3R4LT5zdGF0ZSwKQEAgLTkyNyw3ICs5MDEsNyBAQAogICAgICAgICBpZiAociAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtOTYzLDcgKzkzNyw3IEBACiAgICAgfQogCiAgICAgc2VsZi0+Y29kZWMgPSAoKE11bHRpYnl0ZUNvZGVjT2JqZWN0ICopY29kZWMpLT5jb2RlYzsKLSAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgc2VsZi0+cGVuZGluZyA9IE5VTEw7CiAgICAgc2VsZi0+ZXJyb3JzID0gaW50ZXJuYWxfZXJyb3JfY2FsbGJhY2soZXJyb3JzKTsKICAgICBpZiAoc2VsZi0+ZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtMTA1OCw4ICsxMDMyLDkgQEAKICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgYnVmOwogICAgIGNoYXIgKmRhdGEsICp3ZGF0YSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIHBkYXRhOwotICAgIFB5X3NzaXplX3Qgd3NpemUsIGZpbmFsc2l6ZSA9IDAsIHNpemUsIG9yaWdwZW5kaW5nOworICAgIFB5X3NzaXplX3Qgd3NpemUsIHNpemUsIG9yaWdwZW5kaW5nOwogICAgIGludCBmaW5hbCA9IDA7CisgICAgUHlPYmplY3QgKnJlczsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfGk6ZGVjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxrd2FyZ2xpc3QsICZwZGF0YSwgJmZpbmFsKSkKQEAgLTEwNjcsNyArMTA0Miw4IEBACiAgICAgZGF0YSA9IHBkYXRhLmJ1ZjsKICAgICBzaXplID0gcGRhdGEubGVuOwogCi0gICAgYnVmLm91dG9iaiA9IGJ1Zi5leGNvYmogPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgb3JpZ3BlbmRpbmcgPSBzZWxmLT5wZW5kaW5nc2l6ZTsKIAogICAgIGlmIChzZWxmLT5wZW5kaW5nc2l6ZSA9PSAwKSB7CkBAIC0xMDgxLDggKzEwNTcsMTAgQEAKICAgICAgICAgfQogICAgICAgICB3c2l6ZSA9IHNpemUgKyBzZWxmLT5wZW5kaW5nc2l6ZTsKICAgICAgICAgd2RhdGEgPSBQeU1lbV9NYWxsb2Mod3NpemUpOwotICAgICAgICBpZiAod2RhdGEgPT0gTlVMTCkKKyAgICAgICAgaWYgKHdkYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICAgICAgfQogICAgICAgICBtZW1jcHkod2RhdGEsIHNlbGYtPnBlbmRpbmcsIHNlbGYtPnBlbmRpbmdzaXplKTsKICAgICAgICAgbWVtY3B5KHdkYXRhICsgc2VsZi0+cGVuZGluZ3NpemUsIGRhdGEsIHNpemUpOwogICAgICAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CkBAIC0xMTA5LDIzICsxMDg3LDIyIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAKLSAgICBmaW5hbHNpemUgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1ZiAtIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKLSAgICBpZiAoZmluYWxzaXplICE9IFB5VW5pY29kZV9HRVRfU0laRShidWYub3V0b2JqKSkKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmYnVmLndyaXRlcik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBpZiAod2RhdGEgIT0gZGF0YSkKICAgICAgICAgUHlNZW1fRGVsKHdkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIHJldHVybiBidWYub3V0b2JqOworICAgIHJldHVybiByZXM7CiAKIGVycm9yZXhpdDoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgaWYgKHdkYXRhICE9IE5VTEwgJiYgd2RhdGEgIT0gZGF0YSkKICAgICAgICAgUHlNZW1fRGVsKHdkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIFB5X1hERUNSRUYoYnVmLm91dG9iaik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZidWYud3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTI2NSwxMyArMTI0MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kLCBQeV9zc2l6ZV90IHNpemVoaW50KQogewogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7Ci0gICAgUHlPYmplY3QgKmNyZXM7Ci0gICAgUHlfc3NpemVfdCByc2l6ZSwgZmluYWxzaXplID0gMDsKKyAgICBQeU9iamVjdCAqY3JlcywgKnJlczsKKyAgICBQeV9zc2l6ZV90IHJzaXplOwogCiAgICAgaWYgKHNpemVoaW50ID09IDApCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfTmV3KDAsIDApOwogCi0gICAgYnVmLm91dG9iaiA9IGJ1Zi5leGNvYmogPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgY3JlcyA9IE5VTEw7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0xMzAzLDE5ICsxMjgxLDE5IEBACiAgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShjcmVzKSA+IFBZX1NTSVpFX1RfTUFYIC0gc2VsZi0+cGVuZGluZ3NpemUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKSArIHNlbGYtPnBlbmRpbmdzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgICAgICAgICAgICAgICAgICBjdHJkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoY3RyKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEsIHNlbGYtPnBlbmRpbmcsIHNlbGYtPnBlbmRpbmdzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjcmVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNyZXMpOwotICAgICAgICAgICAgICAgICAgICBjcmVzID0gY3RyOwotICAgICAgICAgICAgICAgICAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykgKyBzZWxmLT5wZW5kaW5nc2l6ZTsKKyAgICAgICAgICAgIGN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcnNpemUpOworICAgICAgICAgICAgaWYgKGN0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICAgICAgY3RyZGF0YSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGN0cik7CisgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOworICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY3JlcyksCisgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykpOworICAgICAgICAgICAgUHlfREVDUkVGKGNyZXMpOworICAgICAgICAgICAgY3JlcyA9IGN0cjsKKyAgICAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKTsKQEAgLTEzNDAsMjkgKzEzMTgsMjcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICAgICAgfQogCi0gICAgICAgIGZpbmFsc2l6ZSA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmIC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKICAgICAgICAgUHlfREVDUkVGKGNyZXMpOwogICAgICAgICBjcmVzID0gTlVMTDsKIAotICAgICAgICBpZiAoc2l6ZWhpbnQgPCAwIHx8IGZpbmFsc2l6ZSAhPSAwIHx8IHJzaXplID09IDApCisgICAgICAgIGlmIChzaXplaGludCA8IDAgfHwgYnVmLndyaXRlci5wb3MgIT0gMCB8fCByc2l6ZSA9PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc2l6ZWhpbnQgPSAxOyAvKiByZWFkIDEgbW9yZSBieXRlIGFuZCByZXRyeSAqLwogICAgIH0KIAotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlfWERFQ1JFRihjcmVzKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIHJldHVybiBidWYub3V0b2JqOworICAgIHJldHVybiByZXM7CiAKIGVycm9yZXhpdDoKICAgICBQeV9YREVDUkVGKGNyZXMpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xNTk1LDcgKzE1NzEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmlzdHIpCiB7CiAgICAgUHlPYmplY3QgKnN0ciwgKndyOwotICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKIAogICAgIHN0ciA9IGVuY29kZXJfZW5jb2RlX3N0YXRlZnVsKFNUQVRFRlVMX0VDVFgoc2VsZiksIHVuaXN0ciwgMCk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQpAQCAtMTY0OSwyNSArMTYyNCwyMiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ic3RyZWFtd3JpdGVyX3Jlc2V0KE11bHRpYnl0ZVN0cmVhbVdyaXRlck9iamVjdCAqc2VsZikKIHsKLSAgICBjb25zdCBQeV9VTklDT0RFICpwZW5kaW5nOwogICAgIFB5T2JqZWN0ICpwd3J0OwogCi0gICAgcGVuZGluZyA9IHNlbGYtPnBlbmRpbmc7CiAgICAgcHdydCA9IG11bHRpYnl0ZWNvZGVjX2VuY29kZShzZWxmLT5jb2RlYywgJnNlbGYtPnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAmcGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUsIHNlbGYtPmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgc2VsZi0+cGVuZGluZywgTlVMTCwgc2VsZi0+ZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUKTsKICAgICAvKiBzb21lIHBlbmRpbmcgYnVmZmVyIGNhbiBiZSB0cnVuY2F0ZWQgd2hlbiBVbmljb2RlRW5jb2RlRXJyb3IgaXMKICAgICAgKiByYWlzZWQgb24gJ3N0cmljdCcgbW9kZS4gYnV0LCAncmVzZXQnIG1ldGhvZCBpcyBkZXNpZ25lZCB0bwogICAgICAqIHJlc2V0IHRoZSBwZW5kaW5nIGJ1ZmZlciBvciBzdGF0ZXMgc28gZmFpbGVkIHN0cmluZyBzZXF1ZW5jZQogICAgICAqIG91Z2h0IHRvIGJlIG1pc3NlZCAqLwotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nKTsKICAgICBpZiAocHdydCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrKHB3cnQpKTsKICAgICBpZiAoUHlCeXRlc19TaXplKHB3cnQpID4gMCkgewogICAgICAgICBQeU9iamVjdCAqd3I7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKIAogICAgICAgICB3ciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+c3RyZWFtLCAmUHlJZF93cml0ZSwgIk8iLCBwd3J0KTsKICAgICAgICAgaWYgKHdyID09IE5VTEwpIHsKQEAgLTE3MDYsNyArMTY3OCw3IEBACiAgICAgc2VsZi0+Y29kZWMgPSAoKE11bHRpYnl0ZUNvZGVjT2JqZWN0ICopY29kZWMpLT5jb2RlYzsKICAgICBzZWxmLT5zdHJlYW0gPSBzdHJlYW07CiAgICAgUHlfSU5DUkVGKHN0cmVhbSk7Ci0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIHNlbGYtPnBlbmRpbmcgPSBOVUxMOwogICAgIHNlbGYtPmVycm9ycyA9IGludGVybmFsX2Vycm9yX2NhbGxiYWNrKGVycm9ycyk7CiAgICAgaWYgKHNlbGYtPmVycm9ycyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCmluZGV4IDFiNmVmNTUuLjViOGMyMjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaApAQCAtMTAsMTIgKzEwLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiB1aW50MzJfdAotdHlwZWRlZiB1aW50MzJfdCB1Y3M0X3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWNzNF90OwotI2VuZGlmCi0KICNpZmRlZiB1aW50MTZfdAogdHlwZWRlZiB1aW50MTZfdCB1Y3MyX3QsIERCQ0hBUjsKICNlbHNlCkBAIC0yNywxMyArMjEsMTQgQEAKICAgICBpbnQgaTsKICAgICB1bnNpZ25lZCBjaGFyIGNbOF07CiAgICAgdWNzMl90IHUyWzRdOwotICAgIHVjczRfdCB1NFsyXTsKKyAgICBQeV9VQ1M0IHU0WzJdOwogfSBNdWx0aWJ5dGVDb2RlY19TdGF0ZTsKIAogdHlwZWRlZiBpbnQgKCptYmNvZGVjX2luaXQpKGNvbnN0IHZvaWQgKmNvbmZpZyk7CiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmVuY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtpbmQsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICppbnBvcywgUHlfc3NpemVfdCBpbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CiB0eXBlZGVmIGludCAoKm1iZW5jb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC00NCw3ICszOSw3IEBACiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmRlY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiB0eXBlZGVmIGludCAoKm1iZGVjb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcpOwogdHlwZWRlZiBQeV9zc2l6ZV90ICgqbWJkZWNvZGVyZXNldF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC04MSw4ICs3Niw3IEBACiAjZGVmaW5lIE1BWEVOQ1BFTkRJTkcgICAyCiAjZGVmaW5lIF9NdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJfSEVBRCAgICAgICAgICBcCiAgICAgX011bHRpYnl0ZVN0YXRlZnVsQ29kZWNfSEVBRCAgICAgICAgICAgICAgICBcCi0gICAgUHlfVU5JQ09ERSBwZW5kaW5nW01BWEVOQ1BFTkRJTkddOyAgICAgICAgICBcCi0gICAgUHlfc3NpemVfdCBwZW5kaW5nc2l6ZTsKKyAgICBQeU9iamVjdCAqcGVuZGluZzsKIHR5cGVkZWYgc3RydWN0IHsKICAgICBfTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyX0hFQUQKIH0gTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyQ29udGV4dDsKQEAgLTExOCwxNiArMTEyLDE3IEBACiAjZGVmaW5lIE1CRVJSX1RPT1NNQUxMICAgICAgICAgICgtMSkgLyogaW5zdWZmaWNpZW50IG91dHB1dCBidWZmZXIgc3BhY2UgKi8KICNkZWZpbmUgTUJFUlJfVE9PRkVXICAgICAgICAgICAgKC0yKSAvKiBpbmNvbXBsZXRlIGlucHV0IGJ1ZmZlciAqLwogI2RlZmluZSBNQkVSUl9JTlRFUk5BTCAgICAgICAgICAoLTMpIC8qIGludGVybmFsIHJ1bnRpbWUgZXJyb3IgKi8KKyNkZWZpbmUgTUJFUlJfRVhDRVBUSU9OICAgICAgICAgKC00KSAvKiBhbiBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkICovCiAKICNkZWZpbmUgRVJST1JfU1RSSUNUICAgICAgICAgICAgKFB5T2JqZWN0ICopKDEpCiAjZGVmaW5lIEVSUk9SX0lHTk9SRSAgICAgICAgICAgIChQeU9iamVjdCAqKSgyKQogI2RlZmluZSBFUlJPUl9SRVBMQUNFICAgICAgICAgICAoUHlPYmplY3QgKikoMykKICNkZWZpbmUgRVJST1JfSVNDVVNUT00ocCkgICAgICAgKChwKSA8IEVSUk9SX1NUUklDVCB8fCBFUlJPUl9SRVBMQUNFIDwgKHApKQotI2RlZmluZSBFUlJPUl9ERUNSRUYocCkgZG8geyAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwICE9IE5VTEwgJiYgRVJST1JfSVNDVVNUT00ocCkpIHsgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCk7CisjZGVmaW5lIEVSUk9SX0RFQ1JFRihwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHAgIT0gTlVMTCAmJiBFUlJPUl9JU0NVU1RPTShwKSkgICAgICAgICBcCisgICAgICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApOwogCiAjZGVmaW5lIE1CRU5DX0ZMVVNIICAgICAgICAgICAgIDB4MDAwMSAvKiBlbmNvZGUgYWxsIGNoYXJhY3RlcnMgZW5jb2RhYmxlICovCiAjZGVmaW5lIE1CRU5DX01BWCAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNICmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fYnoybW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL19iejJtb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjAxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9fYnoybW9kdWxlLmMuaApAQCAtMCwwICsxLDE2MiBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX18sCisiY29tcHJlc3MoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LlxuIgorIlxuIgorIlJldHVybnMgYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcJ1wnIG90aGVyd2lzZS5cbiIKKyJcbiIKKyJXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBjb21wcmVzc29yLCBjYWxsIHRoZVxuIgorImZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4iKTsKKworI2RlZmluZSBfQloyX0JaMkNPTVBSRVNTT1JfQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3MoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoc2VsZiwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoX19kb2NfXywKKyJmbHVzaCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy5cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgbGVmdCBpbiBpbnRlcm5hbCBidWZmZXJzLlxuIgorIlxuIgorIlRoZSBjb21wcmVzc29yIG9iamVjdCBtYXkgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLiIpOworCisjZGVmaW5lIF9CWjJfQloyQ09NUFJFU1NPUl9GTFVTSF9NRVRIT0RERUYgICAgXAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoLCBNRVRIX05PQVJHUywgX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfaW1wbChCWjJDb21wcmVzc29yICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19iejJfQloyQ29tcHJlc3Nvcl9mbHVzaChCWjJDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sCisiQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsPTksIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGUgYSBjb21wcmVzc29yIG9iamVjdCBmb3IgY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LlxuIgorIlxuIgorIiAgY29tcHJlc3NsZXZlbFxuIgorIiAgICBDb21wcmVzc2lvbiBsZXZlbCwgYXMgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCA5LlxuIgorIlxuIgorIkZvciBvbmUtc2hvdCBjb21wcmVzc2lvbiwgdXNlIHRoZSBjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuIik7CisKK3N0YXRpYyBpbnQKK19iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKEJaMkNvbXByZXNzb3IgKnNlbGYsIGludCBjb21wcmVzc2xldmVsKTsKKworc3RhdGljIGludAorX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgaW50IGNvbXByZXNzbGV2ZWwgPSA5OworCisgICAgaWYgKChQeV9UWVBFKHNlbGYpID09ICZCWjJDb21wcmVzc29yX1R5cGUpICYmCisgICAgICAgICFfUHlBcmdfTm9LZXl3b3JkcygiQloyQ29tcHJlc3NvciIsIGt3YXJncykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInxpOkJaMkNvbXByZXNzb3IiLAorICAgICAgICAmY29tcHJlc3NsZXZlbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19faW1wbCgoQloyQ29tcHJlc3NvciAqKXNlbGYsIGNvbXByZXNzbGV2ZWwpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfXywKKyJkZWNvbXByZXNzKCRzZWxmLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LlxuIgorIlxuIgorIlJldHVybnMgYSBjaHVuayBvZiBkZWNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYlwnXCcgb3RoZXJ3aXNlLlxuIgorIlxuIgorIkF0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWRcbiIKKyJyYWlzZXMgYW4gRU9GRXJyb3IuICBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW1cbiIKKyJpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLiIpOworCisjZGVmaW5lIF9CWjJfQloyREVDT01QUkVTU09SX0RFQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcyhCWjJEZWNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fX19kb2NfXywKKyJCWjJEZWNvbXByZXNzb3IoKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgZGVjb21wcmVzc29yIG9iamVjdCBmb3IgZGVjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuXG4iCisiXG4iCisiRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuIik7CisKK3N0YXRpYyBpbnQKK19iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoQloyRGVjb21wcmVzc29yICpzZWxmKTsKKworc3RhdGljIGludAorX2J6Ml9CWjJEZWNvbXByZXNzb3JfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKworICAgIGlmICgoUHlfVFlQRShzZWxmKSA9PSAmQloyRGVjb21wcmVzc29yX1R5cGUpICYmCisgICAgICAgICFfUHlBcmdfTm9Qb3NpdGlvbmFsKCJCWjJEZWNvbXByZXNzb3IiLCBhcmdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIGlmICgoUHlfVFlQRShzZWxmKSA9PSAmQloyRGVjb21wcmVzc29yX1R5cGUpICYmCisgICAgICAgICFfUHlBcmdfTm9LZXl3b3JkcygiQloyRGVjb21wcmVzc29yIiwga3dhcmdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoKEJaMkRlY29tcHJlc3NvciAqKXNlbGYpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjFjYTQ0MDU1MTlhMDkzMSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fbHptYW1vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fbHptYW1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhZDg4MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL19sem1hbW9kdWxlLmMuaApAQCAtMCwwICsxLDI0NSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzX19kb2NfXywKKyJjb21wcmVzcygkc2VsZiwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlByb3ZpZGUgZGF0YSB0byB0aGUgY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiUmV0dXJucyBhIGNodW5rIG9mIGNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYlwnXCcgb3RoZXJ3aXNlLlxuIgorIlxuIgorIldoZW4geW91IGhhdmUgZmluaXNoZWQgcHJvdmlkaW5nIGRhdGEgdG8gdGhlIGNvbXByZXNzb3IsIGNhbGwgdGhlXG4iCisiZmx1c2goKSBtZXRob2QgdG8gZmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLiIpOworCisjZGVmaW5lIF9MWk1BX0xaTUFDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbilfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3NfaW1wbChDb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3MoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9fZG9jX18sCisiZmx1c2goJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJGaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuXG4iCisiXG4iCisiUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy5cbiIKKyJcbiIKKyJUaGUgY29tcHJlc3NvciBvYmplY3QgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4iKTsKKworI2RlZmluZSBfTFpNQV9MWk1BQ09NUFJFU1NPUl9GTFVTSF9NRVRIT0RERUYgICAgXAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pX2x6bWFfTFpNQUNvbXByZXNzb3JfZmx1c2gsIE1FVEhfTk9BUkdTLCBfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQUNvbXByZXNzb3JfZmx1c2hfaW1wbChDb21wcmVzc29yICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoKENvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX2RvY19fLAorImRlY29tcHJlc3MoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiUmV0dXJucyBhIGNodW5rIG9mIGRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCdcJyBvdGhlcndpc2UuXG4iCisiXG4iCisiQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZFxuIgorInJhaXNlcyBhbiBFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbVxuIgorImlzIGlnbm9yZWQgYW5kIHNhdmVkIGluIHRoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuIik7CisKKyNkZWZpbmUgX0xaTUFfTFpNQURFQ09NUFJFU1NPUl9ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKERlY29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzcyhEZWNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoc2VsZiwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sCisiTFpNQURlY29tcHJlc3Nvcihmb3JtYXQ9Rk9STUFUX0FVVE8sIG1lbWxpbWl0PU5vbmUsIGZpbHRlcnM9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhIGRlY29tcHJlc3NvciBvYmplY3QgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LlxuIgorIlxuIgorIiAgZm9ybWF0XG4iCisiICAgIFNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAgSWYgdGhpcyBpc1xuIgorIiAgICBGT1JNQVRfQVVUTyAodGhlIGRlZmF1bHQpLCB0aGUgZGVjb21wcmVzc29yIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3RcbiIKKyIgICAgd2hldGhlciB0aGUgaW5wdXQgaXMgRk9STUFUX1haIG9yIEZPUk1BVF9BTE9ORS4gIFN0cmVhbXMgY3JlYXRlZCB3aXRoXG4iCisiICAgIEZPUk1BVF9SQVcgY2Fubm90IGJlIGF1dG9kZXRlY3RlZC5cbiIKKyIgIG1lbWxpbWl0XG4iCisiICAgIExpbWl0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIGRlY29tcHJlc3Nvci4gIFRoaXMgd2lsbCBjYXVzZVxuIgorIiAgICBkZWNvbXByZXNzaW9uIHRvIGZhaWwgaWYgdGhlIGlucHV0IGNhbm5vdCBiZSBkZWNvbXByZXNzZWQgd2l0aGluIHRoZVxuIgorIiAgICBnaXZlbiBsaW1pdC5cbiIKKyIgIGZpbHRlcnNcbiIKKyIgICAgQSBjdXN0b20gZmlsdGVyIGNoYWluLiAgVGhpcyBhcmd1bWVudCBpcyByZXF1aXJlZCBmb3IgRk9STUFUX1JBVywgYW5kXG4iCisiICAgIG5vdCBhY2NlcHRlZCB3aXRoIGFueSBvdGhlciBmb3JtYXQuICBXaGVuIHByb3ZpZGVkLCB0aGlzIHNob3VsZCBiZSBhXG4iCisiICAgIHNlcXVlbmNlIG9mIGRpY3RzLCBlYWNoIGluZGljYXRpbmcgdGhlIElEIGFuZCBvcHRpb25zIGZvciBhIHNpbmdsZVxuIgorIiAgICBmaWx0ZXIuXG4iCisiXG4iCisiRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuIik7CisKK3N0YXRpYyBpbnQKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19faW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIGludCBmb3JtYXQsIFB5T2JqZWN0ICptZW1saW1pdCwgUHlPYmplY3QgKmZpbHRlcnMpOworCitzdGF0aWMgaW50CitfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmb3JtYXQiLCAibWVtbGltaXQiLCAiZmlsdGVycyIsIE5VTEx9OworICAgIGludCBmb3JtYXQgPSBGT1JNQVRfQVVUTzsKKyAgICBQeU9iamVjdCAqbWVtbGltaXQgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpmaWx0ZXJzID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgInxpT086TFpNQURlY29tcHJlc3NvciIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZvcm1hdCwgJm1lbWxpbWl0LCAmZmlsdGVycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoKERlY29tcHJlc3NvciAqKXNlbGYsIGZvcm1hdCwgbWVtbGltaXQsIGZpbHRlcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfX2RvY19fLAorImlzX2NoZWNrX3N1cHBvcnRlZCgkbW9kdWxlLCBjaGVja19pZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gaW50ZWdyaXR5IGNoZWNrIGlzIHN1cHBvcnRlZC5cbiIKKyJcbiIKKyJBbHdheXMgcmV0dXJucyBUcnVlIGZvciBDSEVDS19OT05FIGFuZCBDSEVDS19DUkMzMi4iKTsKKworI2RlZmluZSBfTFpNQV9JU19DSEVDS19TVVBQT1JURURfTUVUSE9EREVGICAgIFwKKyAgICB7ImlzX2NoZWNrX3N1cHBvcnRlZCIsIChQeUNGdW5jdGlvbilfbHptYV9pc19jaGVja19zdXBwb3J0ZWQsIE1FVEhfVkFSQVJHUywgX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgY2hlY2tfaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBjaGVja19pZDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiaTppc19jaGVja19zdXBwb3J0ZWQiLAorICAgICAgICAmY2hlY2tfaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkX2ltcGwobW9kdWxlLCBjaGVja19pZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfX2RvY19fLAorIl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoJG1vZHVsZSwgZmlsdGVyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGVuY29kaW5nIHRoZSBvcHRpb25zIChwcm9wZXJ0aWVzKSBvZiB0aGUgZmlsdGVyIHNwZWNpZmllZCBieSAqZmlsdGVyKiAoYSBkaWN0KS5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuIik7CisKKyNkZWZpbmUgX0xaTUFfX0VOQ09ERV9GSUxURVJfUFJPUEVSVElFU19NRVRIT0RERUYgICAgXAorICAgIHsiX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLCBNRVRIX1ZBUkFSR1MsIF9sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX2ZpbHRlciBmaWx0ZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBsem1hX2ZpbHRlciBmaWx0ZXIgPSB7TFpNQV9WTElfVU5LTk9XTiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAorICAgICAgICBsem1hX2ZpbHRlcl9jb252ZXJ0ZXIsICZmaWx0ZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllc19pbXBsKG1vZHVsZSwgZmlsdGVyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmaWx0ZXIgKi8KKyAgICBpZiAoZmlsdGVyLmlkICE9IExaTUFfVkxJX1VOS05PV04pCisgICAgICAgUHlNZW1fRnJlZShmaWx0ZXIub3B0aW9ucyk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19fZG9jX18sCisiX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcygkbW9kdWxlLCBmaWx0ZXJfaWQsIGVuY29kZWRfcHJvcHMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXIgc3BlY2lmaWVkIGJ5ICpmaWx0ZXIqIChhIGRpY3QpLlxuIgorIlxuIgorIlRoZSByZXN1bHQgZG9lcyBub3QgaW5jbHVkZSB0aGUgZmlsdGVyIElEIGl0c2VsZiwgb25seSB0aGUgb3B0aW9ucy4iKTsKKworI2RlZmluZSBfTFpNQV9fREVDT0RFX0ZJTFRFUl9QUk9QRVJUSUVTX01FVEhPRERFRiAgICBcCisgICAgeyJfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMsIE1FVEhfVkFSQVJHUywgX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGx6bWFfdmxpIGZpbHRlcl9pZCwgUHlfYnVmZmVyICplbmNvZGVkX3Byb3BzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgbHptYV92bGkgZmlsdGVyX2lkOworICAgIFB5X2J1ZmZlciBlbmNvZGVkX3Byb3BzID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPJnkqOl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAorICAgICAgICBsem1hX3ZsaV9jb252ZXJ0ZXIsICZmaWx0ZXJfaWQsICZlbmNvZGVkX3Byb3BzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChtb2R1bGUsIGZpbHRlcl9pZCwgJmVuY29kZWRfcHJvcHMpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGVuY29kZWRfcHJvcHMgKi8KKyAgICBpZiAoZW5jb2RlZF9wcm9wcy5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZW5jb2RlZF9wcm9wcyk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTgwOGZlYzgyMTZhYzcxMmIgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX3BpY2tsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fcGlja2xlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBhNjFlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX3BpY2tsZS5jLmgKQEAgLTAsMCArMSw0OTEgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19fZG9jX18sCisiY2xlYXJfbWVtbygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNsZWFycyB0aGUgcGlja2xlclwncyBcIm1lbW9cIi5cbiIKKyJcbiIKKyJUaGUgbWVtbyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZW1lbWJlcnMgd2hpY2ggb2JqZWN0cyB0aGVcbiIKKyJwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZVxuIgorInBpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlblxuIgorInJlLXVzaW5nIHBpY2tsZXJzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUl9DTEVBUl9NRU1PX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhcl9tZW1vIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vLCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtbyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19fLAorImR1bXAoJHNlbGYsIG9iaiwgLylcbiIKKyItLVxuIgorIlxuIgorIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBvcGVuIGZpbGUuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSX0RVTVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyX2R1bXAsIE1FVEhfTywgX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19fZG9jX18sCisiUGlja2xlcihmaWxlLCBwcm90b2NvbD1Ob25lLCBmaXhfaW1wb3J0cz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgorIlxuIgorIlRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW5cbiIKKyJwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0XG4iCisicHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLlxuIgorIlxuIgorIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2xcbiIKKyJ2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGVcbiIKKyJ2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgorIlxuIgorIlRoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlXG4iCisiYnl0ZXMgYXJndW1lbnQuIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnlcbiIKKyJ3cml0aW5nLCBhIGlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHNcbiIKKyJ0aGlzIGludGVyZmFjZS5cbiIKKyJcbiIKKyJJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnlcbiIKKyJ0byBtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvblxuIgorIjIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLiIpOworCitzdGF0aWMgaW50CitfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpOworCitzdGF0aWMgaW50CitfcGlja2xlX1BpY2tsZXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZmlsZTsKKyAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfE9wOlBpY2tsZXIiLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbCgoUGlja2xlck9iamVjdCAqKXNlbGYsIGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX18sCisiY2xlYXIoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImNsZWFyIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhciwgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXIoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX18sCisiY29weSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5LCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weShQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19fX2RvY19fLAorIl9fcmVkdWNlX18oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJJbXBsZW1lbnQgcGlja2xlIHN1cHBvcnQuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX19fUkVEVUNFX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9sb2FkX19kb2NfXywKKyJsb2FkKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiTG9hZCBhIHBpY2tsZS5cbiIKKyJcbiIKKyJSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlblxuIgorImluIHRoZSBjb25zdHJ1Y3RvciwgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5XG4iCisic3BlY2lmaWVkIHRoZXJlaW4uIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJfTE9BRF9NRVRIT0RERUYgICAgXAorICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlcl9sb2FkLCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9sb2FkKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzc19fZG9jX18sCisiZmluZF9jbGFzcygkc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZS5cbiIKKyJcbiIKKyJJZiBuZWNlc3NhcnksIHRoZSBtb2R1bGUgd2lsbCBiZSBpbXBvcnRlZC4gU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGVcbiIKKyJ0aGlzIG1ldGhvZCAoZS5nLiB0byByZXN0cmljdCB1bnBpY2tsaW5nIG9mIGFyYml0cmFyeSBjbGFzc2VzIGFuZFxuIgorImZ1bmN0aW9ucykuXG4iCisiXG4iCisiVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbiBvYmplY3QgaXNcbiIKKyJuZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSX0ZJTkRfQ0xBU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRfY2xhc3MiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzcywgTUVUSF9WQVJBUkdTLCBfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOworICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZpbmRfY2xhc3MiLAorICAgICAgICAyLCAyLAorICAgICAgICAmbW9kdWxlX25hbWUsICZnbG9iYWxfbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19fX2RvY19fLAorIlVucGlja2xlcihmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz1cJ0FTQ0lJXCcsIGVycm9ycz1cJ3N0cmljdFwnKVxuIgorIi0tXG4iCisiXG4iCisiVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgorIlxuIgorIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm9cbiIKKyJwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdFwnc1xuIgorInJlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLlxuIgorIlxuIgorIlRoZSBhcmd1bWVudCAqZmlsZSogbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlc1xuIgorImFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm9cbiIKKyJhcmd1bWVudHMuICBCb3RoIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhXG4iCisiYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgcmVhZGluZywgYSBpby5CeXRlc0lPIG9iamVjdCwgb3IgYW55XG4iCisib3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgorIlxuIgorIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKixcbiIKKyJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtXG4iCisiZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKKyJtYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGVcbiIKKyIqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZ1xuIgorImluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZSBkZWZhdWx0IHRvIFwnQVNDSUlcJyBhbmQgXCdzdHJpY3RcJyxcbiIKKyJyZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgXCdieXRlc1wnIHRvIHJlYWQgdGhlc2UgOC1iaXRcbiIKKyJzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuIik7CisKK3N0YXRpYyBpbnQKK19waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIGludAorX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmZpbGU7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9ICJBU0NJSSI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gInN0cmljdCI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfCRwc3M6VW5waWNrbGVyIiwgX2tleXdvcmRzLAorICAgICAgICAmZmlsZSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbCgoVW5waWNrbGVyT2JqZWN0ICopc2VsZiwgZmlsZSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX18sCisiY2xlYXIoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYgICAgXAorICAgIHsiY2xlYXIiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXIsIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXJfaW1wbChVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXIoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX18sCisiY29weSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weSwgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weShVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19fX2RvY19fLAorIl9fcmVkdWNlX18oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJJbXBsZW1lbnQgcGlja2xpbmcgc3VwcG9ydC4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX2ltcGwoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18oVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2R1bXBfX2RvY19fLAorImR1bXAoJG1vZHVsZSwgLywgb2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLCBidXQgbWF5XG4iCisiYmUgbW9yZSBlZmZpY2llbnQuXG4iCisiXG4iCisiVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlblxuIgorInByb3RvY29sIHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUgZGVmYXVsdFxuIgorInByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy5cbiIKKyJcbiIKKyJTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sXG4iCisidmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlXG4iCisidmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC5cbiIKKyJcbiIKKyJUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZVxuIgorImJ5dGVzIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeVxuIgorIndyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0c1xuIgorInRoaXMgaW50ZXJmYWNlLlxuIgorIlxuIgorIklmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeVxuIgorInRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uXG4iCisiMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9EVU1QX01FVEhPRERFRiAgICBcCisgICAgeyJkdW1wIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfZHVtcCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfZHVtcF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7Im9iaiIsICJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeU9iamVjdCAqZmlsZTsKKyAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPT3xPJHA6ZHVtcCIsIF9rZXl3b3JkcywKKyAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90b2NvbCwgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfZHVtcF9pbXBsKG1vZHVsZSwgb2JqLCBmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2R1bXBzX19kb2NfXywKKyJkdW1wcygkbW9kdWxlLCAvLCBvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKKyJcbiIKKyJUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuXG4iCisicHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUgZGVmYXVsdFxuIgorInByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy5cbiIKKyJcbiIKKyJTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sXG4iCisidmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlXG4iCisidmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC5cbiIKKyJcbiIKKyJJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsXG4iCisidHJ5IHRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW5cbiIKKyJQeXRob24gMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9EVU1QU19NRVRIT0RERUYgICAgXAorICAgIHsiZHVtcHMiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9kdW1wcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfZHVtcHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2R1bXBzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfE8kcDpkdW1wcyIsIF9rZXl3b3JkcywKKyAgICAgICAgJm9iaiwgJnByb3RvY29sLCAmZml4X2ltcG9ydHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9kdW1wc19pbXBsKG1vZHVsZSwgb2JqLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2xvYWRfX2RvY19fLAorImxvYWQoJG1vZHVsZSwgLywgZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLFxuIgorIiAgICAgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIGFuZCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIHBpY2tsZSBkYXRhIHN0b3JlZCBpbiBhIGZpbGUuXG4iCisiXG4iCisiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmVcbiIKKyJlZmZpY2llbnQuXG4iCisiXG4iCisiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBub1xuIgorInByb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0XCdzXG4iCisicmVwcmVzZW50YXRpb24gYXJlIGlnbm9yZWQuXG4iCisiXG4iCisiVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzXG4iCisiYW4gaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBub1xuIgorImFyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGFcbiIKKyJiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciByZWFkaW5nLCBhIGlvLkJ5dGVzSU8gb2JqZWN0LCBvciBhbnlcbiIKKyJvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCisiXG4iCisiT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLFxuIgorIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKKyJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgorIm1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZVxuIgorIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCisiaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gXCdBU0NJSVwnIGFuZCBcJ3N0cmljdFwnLFxuIgorInJlc3BlY3RpdmVseS4gIFRoZSAqZW5jb2RpbmcqIGNhbiBiZSBcJ2J5dGVzXCcgdG8gcmVhZCB0aGVzZSA4LWJpdFxuIgorInN0cmluZyBpbnN0YW5jZXMgYXMgYnl0ZXMgb2JqZWN0cy4iKTsKKworI2RlZmluZSBfUElDS0xFX0xPQURfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWQiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9sb2FkLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9sb2FkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2xvYWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmZpbGU7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9ICJBU0NJSSI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gInN0cmljdCI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfCRwc3M6bG9hZCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfbG9hZF9pbXBsKG1vZHVsZSwgZmlsZSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2xvYWRzX19kb2NfXywKKyJsb2FkcygkbW9kdWxlLCAvLCBkYXRhLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz1cJ0FTQ0lJXCcsXG4iCisiICAgICAgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIGFuZCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGdpdmVuIHBpY2tsZSBkYXRhLlxuIgorIlxuIgorIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm9cbiIKKyJwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdFwnc1xuIgorInJlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLlxuIgorIlxuIgorIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKixcbiIKKyJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtXG4iCisiZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKKyJtYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGVcbiIKKyIqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZ1xuIgorImluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZSBkZWZhdWx0IHRvIFwnQVNDSUlcJyBhbmQgXCdzdHJpY3RcJyxcbiIKKyJyZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgXCdieXRlc1wnIHRvIHJlYWQgdGhlc2UgOC1iaXRcbiIKKyJzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9MT0FEU19NRVRIT0RERUYgICAgXAorICAgIHsibG9hZHMiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfbG9hZHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZGF0YSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZHMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJkYXRhIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiQVNDSUkiOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9ICJzdHJpY3QiOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT3wkcHNzOmxvYWRzIiwgX2tleXdvcmRzLAorICAgICAgICAmZGF0YSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9sb2Fkc19pbXBsKG1vZHVsZSwgZGF0YSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Zjk2NWI2YzcwMThjODk4ZCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9hdWRpb29wLmMuaCBiL01vZHVsZXMvY2xpbmljL2F1ZGlvb3AuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWY1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9hdWRpb29wLmMuaApAQCAtMCwwICsxLDg4OSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfZ2V0c2FtcGxlX19kb2NfXywKKyJnZXRzYW1wbGUoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBpbmRleCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgdmFsdWUgb2Ygc2FtcGxlIGluZGV4IGZyb20gdGhlIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfR0VUU0FNUExFX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRzYW1wbGUiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9nZXRzYW1wbGUsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9nZXRzYW1wbGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZ2V0c2FtcGxlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBQeV9zc2l6ZV90IGluZGV4KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZ2V0c2FtcGxlKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgUHlfc3NpemVfdCBpbmRleDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppbjpnZXRzYW1wbGUiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJmluZGV4KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfZ2V0c2FtcGxlX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBpbmRleCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX21heF9fZG9jX18sCisibWF4KCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbWF4aW11bSBvZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYWxsIHNhbXBsZXMgaW4gYSBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX01BWF9NRVRIT0RERUYgICAgXAorICAgIHsibWF4IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbWF4LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21heChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bWF4IiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9tYXhfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9taW5tYXhfX2RvY19fLAorIm1pbm1heCgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIGFsbCBzYW1wbGVzIGluIHRoZSBzb3VuZCBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX01JTk1BWF9NRVRIT0RERUYgICAgXAorICAgIHsibWlubWF4IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbWlubWF4LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWlubWF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21pbm1heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21pbm1heChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bWlubWF4IiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9taW5tYXhfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9hdmdfX2RvY19fLAorImF2ZygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGF2ZXJhZ2Ugb3ZlciBhbGwgc2FtcGxlcyBpbiB0aGUgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9BVkdfTUVUSE9EREVGICAgIFwKKyAgICB7ImF2ZyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2F2ZywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2F2Z19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hdmdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hdmcoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmF2ZyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYXZnX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3Bfcm1zX19kb2NfXywKKyJybXMoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSByb290LW1lYW4tc3F1YXJlIG9mIHRoZSBmcmFnbWVudCwgaS5lLiBzcXJ0KHN1bShTX2leMikvbikuIik7CisKKyNkZWZpbmUgQVVESU9PUF9STVNfTUVUSE9EREVGICAgIFwKKyAgICB7InJtcyIsIChQeUNGdW5jdGlvbilhdWRpb29wX3JtcywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3Jtc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9ybXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9ybXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOnJtcyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3Bfcm1zX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfZmluZGZpdF9fZG9jX18sCisiZmluZGZpdCgkbW9kdWxlLCBmcmFnbWVudCwgcmVmZXJlbmNlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVHJ5IHRvIG1hdGNoIHJlZmVyZW5jZSBhcyB3ZWxsIGFzIHBvc3NpYmxlIHRvIGEgcG9ydGlvbiBvZiBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX0ZJTkRGSVRfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRmaXQiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9maW5kZml0LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfZmluZGZpdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9maW5kZml0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgUHlfYnVmZmVyICpyZWZlcmVuY2UpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9maW5kZml0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9idWZmZXIgcmVmZXJlbmNlID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnkqOmZpbmRmaXQiLAorICAgICAgICAmZnJhZ21lbnQsICZyZWZlcmVuY2UpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9maW5kZml0X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsICZyZWZlcmVuY2UpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisgICAgLyogQ2xlYW51cCBmb3IgcmVmZXJlbmNlICovCisgICAgaWYgKHJlZmVyZW5jZS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcmVmZXJlbmNlKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2ZpbmRmYWN0b3JfX2RvY19fLAorImZpbmRmYWN0b3IoJG1vZHVsZSwgZnJhZ21lbnQsIHJlZmVyZW5jZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGZhY3RvciBGIHN1Y2ggdGhhdCBybXMoYWRkKGZyYWdtZW50LCBtdWwocmVmZXJlbmNlLCAtRikpKSBpcyBtaW5pbWFsLiIpOworCisjZGVmaW5lIEFVRElPT1BfRklOREZBQ1RPUl9NRVRIT0RERUYgICAgXAorICAgIHsiZmluZGZhY3RvciIsIChQeUNGdW5jdGlvbilhdWRpb29wX2ZpbmRmYWN0b3IsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9maW5kZmFjdG9yX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRmYWN0b3JfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9idWZmZXIgKnJlZmVyZW5jZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRmYWN0b3IoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciByZWZlcmVuY2UgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqeSo6ZmluZGZhY3RvciIsCisgICAgICAgICZmcmFnbWVudCwgJnJlZmVyZW5jZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2ZpbmRmYWN0b3JfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgJnJlZmVyZW5jZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKyAgICAvKiBDbGVhbnVwIGZvciByZWZlcmVuY2UgKi8KKyAgICBpZiAocmVmZXJlbmNlLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZyZWZlcmVuY2UpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfZmluZG1heF9fZG9jX18sCisiZmluZG1heCgkbW9kdWxlLCBmcmFnbWVudCwgbGVuZ3RoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2VhcmNoIGZyYWdtZW50IGZvciBhIHNsaWNlIG9mIHNwZWNpZmllZCBudW1iZXIgb2Ygc2FtcGxlcyB3aXRoIG1heGltdW0gZW5lcmd5LiIpOworCisjZGVmaW5lIEFVRElPT1BfRklORE1BWF9NRVRIT0RERUYgICAgXAorICAgIHsiZmluZG1heCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2ZpbmRtYXgsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9maW5kbWF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRtYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9zc2l6ZV90IGxlbmd0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRtYXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIFB5X3NzaXplX3QgbGVuZ3RoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Km46ZmluZG1heCIsCisgICAgICAgICZmcmFnbWVudCwgJmxlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2ZpbmRtYXhfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgbGVuZ3RoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYXZncHBfX2RvY19fLAorImF2Z3BwKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgYXZlcmFnZSBwZWFrLXBlYWsgdmFsdWUgb3ZlciBhbGwgc2FtcGxlcyBpbiB0aGUgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9BVkdQUF9NRVRIT0RERUYgICAgXAorICAgIHsiYXZncHAiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9hdmdwcCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2F2Z3BwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2F2Z3BwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYXZncHAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmF2Z3BwIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9hdmdwcF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX21heHBwX19kb2NfXywKKyJtYXhwcCgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG1heGltdW0gcGVhay1wZWFrIHZhbHVlIGluIHRoZSBzb3VuZCBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX01BWFBQX01FVEhPRERFRiAgICBcCisgICAgeyJtYXhwcCIsIChQeUNGdW5jdGlvbilhdWRpb29wX21heHBwLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWF4cHBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbWF4cHBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9tYXhwcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bWF4cHAiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX21heHBwX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfY3Jvc3NfX2RvY19fLAorImNyb3NzKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbnVtYmVyIG9mIHplcm8gY3Jvc3NpbmdzIGluIHRoZSBmcmFnbWVudCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9DUk9TU19NRVRIT0RERUYgICAgXAorICAgIHsiY3Jvc3MiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9jcm9zcywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2Nyb3NzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2Nyb3NzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfY3Jvc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmNyb3NzIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9jcm9zc19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX211bF9fZG9jX18sCisibXVsKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgZmFjdG9yLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZnJhZ21lbnQgdGhhdCBoYXMgYWxsIHNhbXBsZXMgaW4gdGhlIG9yaWdpbmFsIGZyYWdtZW50IG11bHRpcGxpZWQgYnkgdGhlIGZsb2F0aW5nLXBvaW50IHZhbHVlIGZhY3Rvci4iKTsKKworI2RlZmluZSBBVURJT09QX01VTF9NRVRIT0RERUYgICAgXAorICAgIHsibXVsIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbXVsLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbXVsX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX211bF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGZhY3Rvcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX211bChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGRvdWJsZSBmYWN0b3I7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWQ6bXVsIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZmYWN0b3IpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9tdWxfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGZhY3Rvcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX3RvbW9ub19fZG9jX18sCisidG9tb25vKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgbGZhY3RvciwgcmZhY3RvciwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgYSBzdGVyZW8gZnJhZ21lbnQgdG8gYSBtb25vIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfVE9NT05PX01FVEhPRERFRiAgICBcCisgICAgeyJ0b21vbm8iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF90b21vbm8sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF90b21vbm9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfdG9tb25vX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF90b21vbm8oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBkb3VibGUgbGZhY3RvcjsKKyAgICBkb3VibGUgcmZhY3RvcjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppZGQ6dG9tb25vIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZsZmFjdG9yLCAmcmZhY3RvcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3RvbW9ub19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgbGZhY3RvciwgcmZhY3Rvcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX3Rvc3RlcmVvX19kb2NfXywKKyJ0b3N0ZXJlbygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIGxmYWN0b3IsIHJmYWN0b3IsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJHZW5lcmF0ZSBhIHN0ZXJlbyBmcmFnbWVudCBmcm9tIGEgbW9ubyBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX1RPU1RFUkVPX01FVEhPRERFRiAgICBcCisgICAgeyJ0b3N0ZXJlbyIsIChQeUNGdW5jdGlvbilhdWRpb29wX3Rvc3RlcmVvLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfdG9zdGVyZW9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfdG9zdGVyZW9faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBsZmFjdG9yLCBkb3VibGUgcmZhY3Rvcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3Rvc3RlcmVvKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgZG91YmxlIGxmYWN0b3I7CisgICAgZG91YmxlIHJmYWN0b3I7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWRkOnRvc3RlcmVvIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZsZmFjdG9yLCAmcmZhY3RvcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3Rvc3RlcmVvX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBsZmFjdG9yLCByZmFjdG9yKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYWRkX19kb2NfXywKKyJhZGQoJG1vZHVsZSwgZnJhZ21lbnQxLCBmcmFnbWVudDIsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZnJhZ21lbnQgd2hpY2ggaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gc2FtcGxlcyBwYXNzZWQgYXMgcGFyYW1ldGVycy4iKTsKKworI2RlZmluZSBBVURJT09QX0FERF9NRVRIT0RERUYgICAgXAorICAgIHsiYWRkIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYWRkLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYWRkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FkZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQxLCBQeV9idWZmZXIgKmZyYWdtZW50MiwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYWRkKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudDEgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIGZyYWdtZW50MiA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqeSppOmFkZCIsCisgICAgICAgICZmcmFnbWVudDEsICZmcmFnbWVudDIsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2FkZF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50MSwgJmZyYWdtZW50Miwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50MSAqLworICAgIGlmIChmcmFnbWVudDEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50MSk7CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQyICovCisgICAgaWYgKGZyYWdtZW50Mi5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQyKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2JpYXNfX2RvY19fLAorImJpYXMoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBiaWFzLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZnJhZ21lbnQgdGhhdCBpcyB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgd2l0aCBhIGJpYXMgYWRkZWQgdG8gZWFjaCBzYW1wbGUuIik7CisKKyNkZWZpbmUgQVVESU9PUF9CSUFTX01FVEhPRERFRiAgICBcCisgICAgeyJiaWFzIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYmlhcywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2JpYXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYmlhc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IGJpYXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9iaWFzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGJpYXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWk6YmlhcyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmYmlhcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2JpYXNfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGJpYXMpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9yZXZlcnNlX19kb2NfXywKKyJyZXZlcnNlKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldmVyc2UgdGhlIHNhbXBsZXMgaW4gYSBmcmFnbWVudCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9SRVZFUlNFX01FVEhPRERFRiAgICBcCisgICAgeyJyZXZlcnNlIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfcmV2ZXJzZSwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3JldmVyc2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfcmV2ZXJzZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3JldmVyc2UoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOnJldmVyc2UiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3JldmVyc2VfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9ieXRlc3dhcF9fZG9jX18sCisiYnl0ZXN3YXAoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBiaWctZW5kaWFuIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4iKTsKKworI2RlZmluZSBBVURJT09QX0JZVEVTV0FQX01FVEhPRERFRiAgICBcCisgICAgeyJieXRlc3dhcCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2J5dGVzd2FwLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYnl0ZXN3YXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYnl0ZXN3YXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9ieXRlc3dhcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6Ynl0ZXN3YXAiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2J5dGVzd2FwX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbGluMmxpbl9fZG9jX18sCisibGluMmxpbigkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIG5ld3dpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzYW1wbGVzIGJldHdlZW4gMS0sIDItLCAzLSBhbmQgNC1ieXRlIGZvcm1hdHMuIik7CisKKyNkZWZpbmUgQVVESU9PUF9MSU4yTElOX01FVEhPRERFRiAgICBcCisgICAgeyJsaW4ybGluIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbGluMmxpbiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2xpbjJsaW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IG5ld3dpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmxpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGludCBuZXd3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppaTpsaW4ybGluIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZuZXd3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIG5ld3dpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfcmF0ZWN2X19kb2NfXywKKyJyYXRlY3YoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBuY2hhbm5lbHMsIGlucmF0ZSwgb3V0cmF0ZSwgc3RhdGUsXG4iCisiICAgICAgIHdlaWdodEE9MSwgd2VpZ2h0Qj0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCB0aGUgZnJhbWUgcmF0ZSBvZiB0aGUgaW5wdXQgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9SQVRFQ1ZfTUVUSE9EREVGICAgIFwKKyAgICB7InJhdGVjdiIsIChQeUNGdW5jdGlvbilhdWRpb29wX3JhdGVjdiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3JhdGVjdl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9yYXRlY3ZfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBuY2hhbm5lbHMsIGludCBpbnJhdGUsIGludCBvdXRyYXRlLCBQeU9iamVjdCAqc3RhdGUsIGludCB3ZWlnaHRBLCBpbnQgd2VpZ2h0Qik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3JhdGVjdihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGludCBuY2hhbm5lbHM7CisgICAgaW50IGlucmF0ZTsKKyAgICBpbnQgb3V0cmF0ZTsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisgICAgaW50IHdlaWdodEEgPSAxOworICAgIGludCB3ZWlnaHRCID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppaWlpT3xpaTpyYXRlY3YiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJm5jaGFubmVscywgJmlucmF0ZSwgJm91dHJhdGUsICZzdGF0ZSwgJndlaWdodEEsICZ3ZWlnaHRCKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfcmF0ZWN2X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBuY2hhbm5lbHMsIGlucmF0ZSwgb3V0cmF0ZSwgc3RhdGUsIHdlaWdodEEsIHdlaWdodEIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9saW4ydWxhd19fZG9jX18sCisibGluMnVsYXcoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzYW1wbGVzIGluIHRoZSBhdWRpbyBmcmFnbWVudCB0byB1LUxBVyBlbmNvZGluZy4iKTsKKworI2RlZmluZSBBVURJT09QX0xJTjJVTEFXX01FVEhPRERFRiAgICBcCisgICAgeyJsaW4ydWxhdyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2xpbjJ1bGF3LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMnVsYXdfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMnVsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4ydWxhdyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bGluMnVsYXciLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJ1bGF3X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfdWxhdzJsaW5fX2RvY19fLAorInVsYXcybGluKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgc291bmQgZnJhZ21lbnRzIGluIHUtTEFXIGVuY29kaW5nIHRvIGxpbmVhcmx5IGVuY29kZWQgc291bmQgZnJhZ21lbnRzLiIpOworCisjZGVmaW5lIEFVRElPT1BfVUxBVzJMSU5fTUVUSE9EREVGICAgIFwKKyAgICB7InVsYXcybGluIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfdWxhdzJsaW4sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF91bGF3Mmxpbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF91bGF3Mmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3VsYXcybGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTp1bGF3MmxpbiIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfdWxhdzJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9saW4yYWxhd19fZG9jX18sCisibGluMmFsYXcoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzYW1wbGVzIGluIHRoZSBhdWRpbyBmcmFnbWVudCB0byBhLUxBVyBlbmNvZGluZy4iKTsKKworI2RlZmluZSBBVURJT09QX0xJTjJBTEFXX01FVEhPRERFRiAgICBcCisgICAgeyJsaW4yYWxhdyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2xpbjJhbGF3LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMmFsYXdfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmFsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4yYWxhdyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bGluMmFsYXciLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJhbGF3X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYWxhdzJsaW5fX2RvY19fLAorImFsYXcybGluKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgc291bmQgZnJhZ21lbnRzIGluIGEtTEFXIGVuY29kaW5nIHRvIGxpbmVhcmx5IGVuY29kZWQgc291bmQgZnJhZ21lbnRzLiIpOworCisjZGVmaW5lIEFVRElPT1BfQUxBVzJMSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImFsYXcybGluIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYWxhdzJsaW4sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9hbGF3Mmxpbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hbGF3Mmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FsYXcybGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTphbGF3MmxpbiIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYWxhdzJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9saW4yYWRwY21fX2RvY19fLAorImxpbjJhZHBjbSgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIHN0YXRlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzYW1wbGVzIHRvIDQgYml0IEludGVsL0RWSSBBRFBDTSBlbmNvZGluZy4iKTsKKworI2RlZmluZSBBVURJT09QX0xJTjJBRFBDTV9NRVRIT0RERUYgICAgXAorICAgIHsibGluMmFkcGNtIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbGluMmFkcGNtLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMmFkcGNtX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJhZHBjbV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlPYmplY3QgKnN0YXRlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmFkcGNtKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgUHlPYmplY3QgKnN0YXRlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlPOmxpbjJhZHBjbSIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmc3RhdGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9saW4yYWRwY21faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIHN0YXRlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYWRwY20ybGluX19kb2NfXywKKyJhZHBjbTJsaW4oJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBzdGF0ZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSBhbiBJbnRlbC9EVkkgQURQQ00gY29kZWQgZnJhZ21lbnQgdG8gYSBsaW5lYXIgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9BRFBDTTJMSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImFkcGNtMmxpbiIsIChQeUNGdW5jdGlvbilhdWRpb29wX2FkcGNtMmxpbiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2FkcGNtMmxpbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hZHBjbTJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5T2JqZWN0ICpzdGF0ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FkcGNtMmxpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIFB5T2JqZWN0ICpzdGF0ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppTzphZHBjbTJsaW4iLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJnN0YXRlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYWRwY20ybGluX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBzdGF0ZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmU4NDBiYmE1ZDQwYzJjZSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9iaW5hc2NpaS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9iaW5hc2NpaS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0NzE4MAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL2JpbmFzY2lpLmMuaApAQCAtMCwwICsxLDQ3OCBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2EyYl91dV9fZG9jX18sCisiYTJiX3V1KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZWNvZGUgYSBsaW5lIG9mIHV1ZW5jb2RlZCBkYXRhLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0EyQl9VVV9NRVRIT0RERUYgICAgXAorICAgIHsiYTJiX3V1IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl91dSwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9hMmJfdXVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl91dV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfdXUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOmEyYl91dSIsCisgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl91dV9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYjJhX3V1X19kb2NfXywKKyJiMmFfdXUoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlV1ZW5jb2RlIGxpbmUgb2YgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfVVVfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV91dSIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfdXUsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYjJhX3V1X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfdXVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX3V1KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpiMmFfdXUiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfdXVfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2EyYl9iYXNlNjRfX2RvY19fLAorImEyYl9iYXNlNjQoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSBhIGxpbmUgb2YgYmFzZTY0IGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQTJCX0JBU0U2NF9NRVRIT0RERUYgICAgXAorICAgIHsiYTJiX2Jhc2U2NCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfYmFzZTY0LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2EyYl9iYXNlNjRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX2Jhc2U2NChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyY6YTJiX2Jhc2U2NCIsCisgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl9iYXNlNjRfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2IyYV9iYXNlNjRfX2RvY19fLAorImIyYV9iYXNlNjQoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkJhc2U2NC1jb2RlIGxpbmUgb2YgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfQkFTRTY0X01FVEhPRERFRiAgICBcCisgICAgeyJiMmFfYmFzZTY0IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9iYXNlNjQsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYjJhX2Jhc2U2NF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX2Jhc2U2NF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfYmFzZTY0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpiMmFfYmFzZTY0IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX2Jhc2U2NF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYTJiX2hxeF9fZG9jX18sCisiYTJiX2hxeCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIC5ocXggY29kaW5nLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0EyQl9IUVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImEyYl9ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9hMmJfaHF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOmEyYl9ocXgiLAorICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9ybGVjb2RlX2hxeF9fZG9jX18sCisicmxlY29kZV9ocXgoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkJpbmhleCBSTEUtY29kZSBiaW5hcnkgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9STEVDT0RFX0hRWF9NRVRIT0RERUYgICAgXAorICAgIHsicmxlY29kZV9ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfcmxlY29kZV9ocXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfcmxlY29kZV9ocXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX3JsZWNvZGVfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX3JsZWNvZGVfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpybGVjb2RlX2hxeCIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX3JsZWNvZGVfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9iMmFfaHF4X19kb2NfXywKKyJiMmFfaHF4KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJFbmNvZGUgLmhxeCBkYXRhLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0IyQV9IUVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV9ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9iMmFfaHF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmIyYV9ocXgiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9ybGVkZWNvZGVfaHF4X19kb2NfXywKKyJybGVkZWNvZGVfaHF4KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZWNvZGUgaGV4YmluIFJMRS1jb2RlZCBzdHJpbmcuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfUkxFREVDT0RFX0hRWF9NRVRIT0RERUYgICAgXAorICAgIHsicmxlZGVjb2RlX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9ybGVkZWNvZGVfaHF4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX3JsZWRlY29kZV9ocXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX3JsZWRlY29kZV9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfcmxlZGVjb2RlX2hxeChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6cmxlZGVjb2RlX2hxeCIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX3JsZWRlY29kZV9ocXhfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2NyY19ocXhfX2RvY19fLAorImNyY19ocXgoJG1vZHVsZSwgZGF0YSwgY3JjLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29tcHV0ZSBocXggQ1JDIGluY3JlbWVudGFsbHkuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQ1JDX0hRWF9NRVRIT0RERUYgICAgXAorICAgIHsiY3JjX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9jcmNfaHF4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2NyY19ocXhfX2RvY19ffSwKKworc3RhdGljIGludAorYmluYXNjaWlfY3JjX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IGNyYyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9jcmNfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGludCBjcmM7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTpjcmNfaHF4IiwKKyAgICAgICAgJmRhdGEsICZjcmMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IGJpbmFzY2lpX2NyY19ocXhfaW1wbChtb2R1bGUsICZkYXRhLCBjcmMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2NyYzMyX19kb2NfXywKKyJjcmMzMigkbW9kdWxlLCBkYXRhLCBjcmM9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbXB1dGUgQ1JDLTMyIGluY3JlbWVudGFsbHkuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQ1JDMzJfTUVUSE9EREVGICAgIFwKKyAgICB7ImNyYzMyIiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2NyYzMyLCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2NyYzMyX19kb2NfX30sCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2JpbmFzY2lpX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgY3JjKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2NyYzMyKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCBjcmMgPSAwOworICAgIHVuc2lnbmVkIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxJOmNyYzMyIiwKKyAgICAgICAgJmRhdGEsICZjcmMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IGJpbmFzY2lpX2NyYzMyX2ltcGwobW9kdWxlLCAmZGF0YSwgY3JjKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2IyYV9oZXhfX2RvY19fLAorImIyYV9oZXgoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGJpbmFyeSBkYXRhLlxuIgorIlxuIgorIlRoZSByZXR1cm4gdmFsdWUgaXMgYSBieXRlcyBvYmplY3QuICBUaGlzIGZ1bmN0aW9uIGlzIGFsc29cbiIKKyJhdmFpbGFibGUgYXMgXCJoZXhsaWZ5KClcIi4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfSEVYX01FVEhPRERFRiAgICBcCisgICAgeyJiMmFfaGV4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9oZXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYjJhX2hleF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX2hleF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfaGV4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpiMmFfaGV4IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX2hleF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYTJiX2hleF9fZG9jX18sCisiYTJiX2hleCgkbW9kdWxlLCBoZXhzdHIsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJCaW5hcnkgZGF0YSBvZiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiIKKyJcbiIKKyJoZXhzdHIgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGhleCBkaWdpdHMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLlxuIgorIlRoaXMgZnVuY3Rpb24gaXMgYWxzbyBhdmFpbGFibGUgYXMgXCJ1bmhleGxpZnkoKVwiLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0EyQl9IRVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImEyYl9oZXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX2hleCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9hMmJfaGV4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfaGV4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX2hleChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgaGV4c3RyID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPJjphMmJfaGV4IiwKKyAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmhleHN0cikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfaGV4X2ltcGwobW9kdWxlLCAmaGV4c3RyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBoZXhzdHIgKi8KKyAgICBpZiAoaGV4c3RyLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZoZXhzdHIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2EyYl9xcF9fZG9jX18sCisiYTJiX3FwKCRtb2R1bGUsIC8sIGRhdGEsIGhlYWRlcj1GYWxzZSlcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSBhIHN0cmluZyBvZiBxcC1lbmNvZGVkIGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQTJCX1FQX01FVEhPRERFRiAgICBcCisgICAgeyJhMmJfcXAiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX3FwLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgYmluYXNjaWlfYTJiX3FwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfcXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBoZWFkZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX3FwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJoZWFkZXIiLCBOVUxMfTsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgaGVhZGVyID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk8mfGk6YTJiX3FwIiwgX2tleXdvcmRzLAorICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmZGF0YSwgJmhlYWRlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfcXBfaW1wbChtb2R1bGUsICZkYXRhLCBoZWFkZXIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYjJhX3FwX19kb2NfXywKKyJiMmFfcXAoJG1vZHVsZSwgLywgZGF0YSwgcXVvdGV0YWJzPUZhbHNlLCBpc3RleHQ9VHJ1ZSwgaGVhZGVyPUZhbHNlKVxuIgorIi0tXG4iCisiXG4iCisiRW5jb2RlIGEgc3RyaW5nIHVzaW5nIHF1b3RlZC1wcmludGFibGUgZW5jb2RpbmcuXG4iCisiXG4iCisiT24gZW5jb2RpbmcsIHdoZW4gaXN0ZXh0IGlzIHNldCwgbmV3bGluZXMgYXJlIG5vdCBlbmNvZGVkLCBhbmQgd2hpdGVcbiIKKyJzcGFjZSBhdCBlbmQgb2YgbGluZXMgaXMuICBXaGVuIGlzdGV4dCBpcyBub3Qgc2V0LCBcXHIgYW5kIFxcbiAoQ1IvTEYpXG4iCisiYXJlIGJvdGggZW5jb2RlZC4gIFdoZW4gcXVvdGV0YWJzIGlzIHNldCwgc3BhY2UgYW5kIHRhYnMgYXJlIGVuY29kZWQuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQjJBX1FQX01FVEhPRERFRiAgICBcCisgICAgeyJiMmFfcXAiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX3FwLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgYmluYXNjaWlfYjJhX3FwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfcXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBxdW90ZXRhYnMsIGludCBpc3RleHQsIGludCBoZWFkZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX3FwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJxdW90ZXRhYnMiLCAiaXN0ZXh0IiwgImhlYWRlciIsIE5VTEx9OworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGludCBxdW90ZXRhYnMgPSAwOworICAgIGludCBpc3RleHQgPSAxOworICAgIGludCBoZWFkZXIgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAieSp8aWlpOmIyYV9xcCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRhdGEsICZxdW90ZXRhYnMsICZpc3RleHQsICZoZWFkZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX3FwX2ltcGwobW9kdWxlLCAmZGF0YSwgcXVvdGV0YWJzLCBpc3RleHQsIGhlYWRlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjhlMmJjYzY5NTZiNjIxMyBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy96bGlibW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NGE4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy96bGlibW9kdWxlLmMuaApAQCAtMCwwICsxLDQ1MyBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHpsaWJfY29tcHJlc3NfX2RvY19fLAorImNvbXByZXNzKCRtb2R1bGUsIGJ5dGVzLCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBkYXRhLlxuIgorIlxuIgorIiAgYnl0ZXNcbiIKKyIgICAgQmluYXJ5IGRhdGEgdG8gYmUgY29tcHJlc3NlZC5cbiIKKyIgIGxldmVsXG4iCisiICAgIENvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX2NvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpieXRlcywgaW50IGxldmVsKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGJ5dGVzID0ge05VTEwsIE5VTEx9OworICAgIGludCBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSp8aTpjb21wcmVzcyIsCisgICAgICAgICZieXRlcywgJmxldmVsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY29tcHJlc3NfaW1wbChtb2R1bGUsICZieXRlcywgbGV2ZWwpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGJ5dGVzICovCisgICAgaWYgKGJ5dGVzLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZieXRlcyk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoemxpYl9kZWNvbXByZXNzX19kb2NfXywKKyJkZWNvbXByZXNzKCRtb2R1bGUsIGRhdGEsIHdiaXRzPU1BWF9XQklUUywgYnVmc2l6ZT1ERUZfQlVGX1NJWkUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuY29tcHJlc3NlZCBkYXRhLlxuIgorIlxuIgorIiAgZGF0YVxuIgorIiAgICBDb21wcmVzc2VkIGRhdGEuXG4iCisiICB3Yml0c1xuIgorIiAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLlxuIgorIiAgYnVmc2l6ZVxuIgorIiAgICBUaGUgaW5pdGlhbCBvdXRwdXQgYnVmZmVyIHNpemUuIik7CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX2RlY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHdiaXRzLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2RlY29tcHJlc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdiaXRzID0gTUFYX1dCSVRTOworICAgIHVuc2lnbmVkIGludCBidWZzaXplID0gREVGX0JVRl9TSVpFOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxpTyY6ZGVjb21wcmVzcyIsCisgICAgICAgICZkYXRhLCAmd2JpdHMsIHVpbnRfY29udmVydGVyLCAmYnVmc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX2RlY29tcHJlc3NfaW1wbChtb2R1bGUsICZkYXRhLCB3Yml0cywgYnVmc2l6ZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX2NvbXByZXNzb2JqX19kb2NfXywKKyJjb21wcmVzc29iaigkbW9kdWxlLCAvLCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIG1ldGhvZD1ERUZMQVRFRCxcbiIKKyIgICAgICAgICAgICB3Yml0cz1NQVhfV0JJVFMsIG1lbUxldmVsPURFRl9NRU1fTEVWRUwsXG4iCisiICAgICAgICAgICAgc3RyYXRlZ3k9Wl9ERUZBVUxUX1NUUkFURUdZLCB6ZGljdD1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiICBsZXZlbFxuIgorIiAgICBUaGUgY29tcHJlc3Npb24gbGV2ZWwgKGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAtOTsgZGVmYXVsdCBpcyA2KS5cbiIKKyIgICAgSGlnaGVyIGNvbXByZXNzaW9uIGxldmVscyBhcmUgc2xvd2VyLCBidXQgcHJvZHVjZSBzbWFsbGVyIHJlc3VsdHMuXG4iCisiICBtZXRob2RcbiIKKyIgICAgVGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gIElmIGdpdmVuLCB0aGlzIG11c3QgYmUgREVGTEFURUQuXG4iCisiICB3Yml0c1xuIgorIiAgICBUaGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAocmFuZ2U6IDguLjE1KS5cbiIKKyIgIG1lbUxldmVsXG4iCisiICAgIENvbnRyb2xzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLlxuIgorIiAgICBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAxIHRvIDkuICBIaWdoZXIgdmFsdWVzIHJlc3VsdCBpbiBoaWdoZXIgbWVtb3J5XG4iCisiICAgIHVzYWdlLCBmYXN0ZXIgY29tcHJlc3Npb24sIGFuZCBzbWFsbGVyIG91dHB1dC5cbiIKKyIgIHN0cmF0ZWd5XG4iCisiICAgIFVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgUG9zc2libGUgdmFsdWVzIGFyZVxuIgorIiAgICBaX0RFRkFVTFRfU1RSQVRFR1ksIFpfRklMVEVSRUQsIGFuZCBaX0hVRkZNQU5fT05MWS5cbiIKKyIgIHpkaWN0XG4iCisiICAgIFRoZSBwcmVkZWZpbmVkIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgLSBhIHNlcXVlbmNlIG9mIGJ5dGVzXG4iCisiICAgIGNvbnRhaW5pbmcgc3Vic2VxdWVuY2VzIHRoYXQgYXJlIGxpa2VseSB0byBvY2N1ciBpbiB0aGUgaW5wdXQgZGF0YS4iKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTT0JKX01FVEhPRERFRiAgICBcCisgICAgeyJjb21wcmVzc29iaiIsIChQeUNGdW5jdGlvbil6bGliX2NvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgemxpYl9jb21wcmVzc29ial9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBsZXZlbCwgaW50IG1ldGhvZCwgaW50IHdiaXRzLCBpbnQgbWVtTGV2ZWwsIGludCBzdHJhdGVneSwgUHlfYnVmZmVyICp6ZGljdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NvbXByZXNzb2JqKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsibGV2ZWwiLCAibWV0aG9kIiwgIndiaXRzIiwgIm1lbUxldmVsIiwgInN0cmF0ZWd5IiwgInpkaWN0IiwgTlVMTH07CisgICAgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworICAgIGludCBtZXRob2QgPSBERUZMQVRFRDsKKyAgICBpbnQgd2JpdHMgPSBNQVhfV0JJVFM7CisgICAgaW50IG1lbUxldmVsID0gREVGX01FTV9MRVZFTDsKKyAgICBpbnQgc3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7CisgICAgUHlfYnVmZmVyIHpkaWN0ID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAifGlpaWlpeSo6Y29tcHJlc3NvYmoiLCBfa2V5d29yZHMsCisgICAgICAgICZsZXZlbCwgJm1ldGhvZCwgJndiaXRzLCAmbWVtTGV2ZWwsICZzdHJhdGVneSwgJnpkaWN0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY29tcHJlc3NvYmpfaW1wbChtb2R1bGUsIGxldmVsLCBtZXRob2QsIHdiaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksICZ6ZGljdCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgemRpY3QgKi8KKyAgICBpZiAoemRpY3Qub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX2RlY29tcHJlc3NvYmpfX2RvY19fLAorImRlY29tcHJlc3NvYmooJG1vZHVsZSwgLywgd2JpdHM9TUFYX1dCSVRTLCB6ZGljdD1iXCdcJylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGRlY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiICB3Yml0c1xuIgorIiAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLlxuIgorIiAgemRpY3RcbiIKKyIgICAgVGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeS4gIFRoaXMgbXVzdCBiZSB0aGUgc2FtZVxuIgorIiAgICBkaWN0aW9uYXJ5IGFzIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IgdGhhdCBwcm9kdWNlZCB0aGUgaW5wdXQgZGF0YS4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NPQkpfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcHJlc3NvYmoiLCAoUHlDRnVuY3Rpb24pemxpYl9kZWNvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgemxpYl9kZWNvbXByZXNzb2JqX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2RlY29tcHJlc3NvYmpfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgd2JpdHMsIFB5T2JqZWN0ICp6ZGljdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2RlY29tcHJlc3NvYmooUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJ3Yml0cyIsICJ6ZGljdCIsIE5VTEx9OworICAgIGludCB3Yml0cyA9IE1BWF9XQklUUzsKKyAgICBQeU9iamVjdCAqemRpY3QgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAifGlPOmRlY29tcHJlc3NvYmoiLCBfa2V5d29yZHMsCisgICAgICAgICZ3Yml0cywgJnpkaWN0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfZGVjb21wcmVzc29ial9pbXBsKG1vZHVsZSwgd2JpdHMsIHpkaWN0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoemxpYl9Db21wcmVzc19jb21wcmVzc19fZG9jX18sCisiY29tcHJlc3MoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBkYXRhLlxuIgorIlxuIgorIiAgZGF0YVxuIgorIiAgICBCaW5hcnkgZGF0YSB0byBiZSBjb21wcmVzc2VkLlxuIgorIlxuIgorIkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGxcbiIKKyJiZSBzdG9yZWQgaW4gaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy5cbiIKKyJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLiIpOworCisjZGVmaW5lIFpMSUJfQ09NUFJFU1NfQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfQ29tcHJlc3NfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgemxpYl9Db21wcmVzc19jb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9Db21wcmVzc19jb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2NvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kjpjb21wcmVzcyIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfQ29tcHJlc3NfY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19fZG9jX18sCisiZGVjb21wcmVzcygkc2VsZiwgZGF0YSwgbWF4X2xlbmd0aD0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhLlxuIgorIlxuIgorIiAgZGF0YVxuIgorIiAgICBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb21wcmVzcy5cbiIKKyIgIG1heF9sZW5ndGhcbiIKKyIgICAgVGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEuXG4iCisiICAgIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgorIiAgICB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS5cbiIKKyJcbiIKKyJBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpblxuIgorImludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG4iCisiQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfREVDT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbil6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbChjb21wb2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfRGVjb21wcmVzc19kZWNvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSp8TyY6ZGVjb21wcmVzcyIsCisgICAgICAgICZkYXRhLCB1aW50X2NvbnZlcnRlciwgJm1heF9sZW5ndGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSwgbWF4X2xlbmd0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX0NvbXByZXNzX2ZsdXNoX19kb2NfXywKKyJmbHVzaCgkc2VsZiwgbW9kZT16bGliLlpfRklOSVNILCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCisiXG4iCisiICBtb2RlXG4iCisiICAgIE9uZSBvZiB0aGUgY29uc3RhbnRzIFpfU1lOQ19GTFVTSCwgWl9GVUxMX0ZMVVNILCBaX0ZJTklTSC5cbiIKKyIgICAgSWYgbW9kZSA9PSBaX0ZJTklTSCwgdGhlIGNvbXByZXNzb3Igb2JqZWN0IGNhbiBubyBsb25nZXIgYmVcbiIKKyIgICAgdXNlZCBhZnRlciBjYWxsaW5nIHRoZSBmbHVzaCgpIG1ldGhvZC4gIE90aGVyd2lzZSwgbW9yZSBkYXRhXG4iCisiICAgIGNhbiBzdGlsbCBiZSBjb21wcmVzc2VkLiIpOworCisjZGVmaW5lIFpMSUJfQ09NUFJFU1NfRkxVU0hfTUVUSE9EREVGICAgIFwKKyAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfQ29tcHJlc3NfZmx1c2gsIE1FVEhfVkFSQVJHUywgemxpYl9Db21wcmVzc19mbHVzaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9Db21wcmVzc19mbHVzaF9pbXBsKGNvbXBvYmplY3QgKnNlbGYsIGludCBtb2RlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfQ29tcHJlc3NfZmx1c2goY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IG1vZGUgPSBaX0ZJTklTSDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAifGk6Zmx1c2giLAorICAgICAgICAmbW9kZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX0NvbXByZXNzX2ZsdXNoX2ltcGwoc2VsZiwgbW9kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9aTElCX0NPUFkpCisKK1B5RG9jX1NUUlZBUih6bGliX0NvbXByZXNzX2NvcHlfX2RvY19fLAorImNvcHkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBjb3B5IG9mIHRoZSBjb21wcmVzc2lvbiBvYmplY3QuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKXpsaWJfQ29tcHJlc3NfY29weSwgTUVUSF9OT0FSR1MsIHpsaWJfQ29tcHJlc3NfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9Db21wcmVzc19jb3B5X2ltcGwoY29tcG9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2NvcHkoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gemxpYl9Db21wcmVzc19jb3B5X2ltcGwoc2VsZik7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfWkxJQl9DT1BZKSAqLworCisjaWZuZGVmIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChaTElCX0NPTVBSRVNTX0NPUFlfTUVUSE9EREVGKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1pMSUJfQ09QWSkKKworUHlEb2NfU1RSVkFSKHpsaWJfRGVjb21wcmVzc19jb3B5X19kb2NfXywKKyJjb3B5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgY29weSBvZiB0aGUgZGVjb21wcmVzc2lvbiBvYmplY3QuIik7CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pemxpYl9EZWNvbXByZXNzX2NvcHksIE1FVEhfTk9BUkdTLCB6bGliX0RlY29tcHJlc3NfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2NvcHlfaW1wbChjb21wb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfRGVjb21wcmVzc19jb3B5KGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIHpsaWJfRGVjb21wcmVzc19jb3B5X2ltcGwoc2VsZik7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfWkxJQl9DT1BZKSAqLworCisjaWZuZGVmIFpMSUJfREVDT01QUkVTU19DT1BZX01FVEhPRERFRgorICAgICNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGKSAqLworCitQeURvY19TVFJWQVIoemxpYl9EZWNvbXByZXNzX2ZsdXNoX19kb2NfXywKKyJmbHVzaCgkc2VsZiwgbGVuZ3RoPXpsaWIuREVGX0JVRl9TSVpFLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBkZWNvbXByZXNzZWQgZGF0YS5cbiIKKyJcbiIKKyIgIGxlbmd0aFxuIgorIiAgICB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiIpOworCisjZGVmaW5lIFpMSUJfREVDT01QUkVTU19GTFVTSF9NRVRIT0RERUYgICAgXAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pemxpYl9EZWNvbXByZXNzX2ZsdXNoLCBNRVRIX1ZBUkFSR1MsIHpsaWJfRGVjb21wcmVzc19mbHVzaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2ZsdXNoX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgdW5zaWduZWQgaW50IGxlbmd0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfZmx1c2goY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IERFRl9CVUZfU0laRTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAifE8mOmZsdXNoIiwKKyAgICAgICAgdWludF9jb252ZXJ0ZXIsICZsZW5ndGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9EZWNvbXByZXNzX2ZsdXNoX2ltcGwoc2VsZiwgbGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoemxpYl9hZGxlcjMyX19kb2NfXywKKyJhZGxlcjMyKCRtb2R1bGUsIGRhdGEsIHZhbHVlPTEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb21wdXRlIGFuIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGRhdGEuXG4iCisiXG4iCisiICB2YWx1ZVxuIgorIiAgICBTdGFydGluZyB2YWx1ZSBvZiB0aGUgY2hlY2tzdW0uXG4iCisiXG4iCisiVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzIGFuIGludGVnZXIuIik7CisKKyNkZWZpbmUgWkxJQl9BRExFUjMyX01FVEhPRERFRiAgICBcCisgICAgeyJhZGxlcjMyIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfYWRsZXIzMiwgTUVUSF9WQVJBUkdTLCB6bGliX2FkbGVyMzJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfYWRsZXIzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IHZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfYWRsZXIzMihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWUgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxJOmFkbGVyMzIiLAorICAgICAgICAmZGF0YSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfYWRsZXIzMl9pbXBsKG1vZHVsZSwgJmRhdGEsIHZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfY3JjMzJfX2RvY19fLAorImNyYzMyKCRtb2R1bGUsIGRhdGEsIHZhbHVlPTAsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb21wdXRlIGEgQ1JDLTMyIGNoZWNrc3VtIG9mIGRhdGEuXG4iCisiXG4iCisiICB2YWx1ZVxuIgorIiAgICBTdGFydGluZyB2YWx1ZSBvZiB0aGUgY2hlY2tzdW0uXG4iCisiXG4iCisiVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzIGFuIGludGVnZXIuIik7CisKKyNkZWZpbmUgWkxJQl9DUkMzMl9NRVRIT0RERUYgICAgXAorICAgIHsiY3JjMzIiLCAoUHlDRnVuY3Rpb24pemxpYl9jcmMzMiwgTUVUSF9WQVJBUkdTLCB6bGliX2NyYzMyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jcmMzMihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxJOmNyYzMyIiwKKyAgICAgICAgJmRhdGEsICZ2YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX2NyYzMyX2ltcGwobW9kdWxlLCAmZGF0YSwgdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJjOTQ3MzcyMWNhN2M5NjIgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbWF0aG1vZHVsZS5jIGIvTW9kdWxlcy9jbWF0aG1vZHVsZS5jCmluZGV4IDM2YmY0YTEuLjkxYjM2OWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY21hdGhtb2R1bGUuYworKysgYi9Nb2R1bGVzL2NtYXRobW9kdWxlLmMKQEAgLTEwNjAsNyArMTA2MCw3IEBACiBjbWF0aF9pc2luZihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfY29tcGxleCB6OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiRDppc25hbiIsICZ6KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkQ6aXNpbmYiLCAmeikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoUHlfSVNfSU5GSU5JVFkoei5yZWFsKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfSVNfSU5GSU5JVFkoei5pbWFnKSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMgYi9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKaW5kZXggZjM1YWEzNi4uMGFjMDMxNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC94bWxwYXJzZS5jCisrKyBiL01vZHVsZXMvZXhwYXQveG1scGFyc2UuYwpAQCAtMiwxMiArMiw2IEBACiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgogKi8KIAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNldCgpLCBtZW1jcHkoKSAqLwotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIFVJTlRfTUFYICovCi0jaW5jbHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSgpICovCi0KICNkZWZpbmUgWE1MX0JVSUxESU5HX0VYUEFUIDEKIAogI2lmZGVmIENPTVBJTEVEX0ZST01fRFNQCkBAIC0yMiw2ICsxNiwxMiBAQAogI2luY2x1ZGUgPGV4cGF0X2NvbmZpZy5oPgogI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNldCgpLCBtZW1jcHkoKSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIFVJTlRfTUFYICovCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSgpICovCisKICNpbmNsdWRlICJhc2NpaS5oIgogI2luY2x1ZGUgImV4cGF0LmgiCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvZXhwYXQveG1scm9sZS5jIGIvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKaW5kZXggNDQ3NzJlMi4uOWE4Zjg1ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKKysrIGIvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKQEAgLTIsOCArMiw2IEBACiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgogKi8KIAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCiAjaWZkZWYgQ09NUElMRURfRlJPTV9EU1AKICNpbmNsdWRlICJ3aW5jb25maWcuaCIKICNlbGlmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKQEAgLTE4LDYgKzE2LDggQEAKICNlbmRpZgogI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAjaW5jbHVkZSAiZXhwYXRfZXh0ZXJuYWwuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgInhtbHJvbGUuaCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvZXhwYXQveG1sdG9rLmMgYi9Nb2R1bGVzL2V4cGF0L3htbHRvay5jCmluZGV4IGI5Y2Q3YTQuLmZkNmJmN2EgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZXhwYXQveG1sdG9rLmMKKysrIGIvTW9kdWxlcy9leHBhdC94bWx0b2suYwpAQCAtMiw4ICsyLDYgQEAKICAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCiAqLwogCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KICNpZmRlZiBDT01QSUxFRF9GUk9NX0RTUAogI2luY2x1ZGUgIndpbmNvbmZpZy5oIgogI2VsaWYgZGVmaW5lZChNQUNPU19DTEFTU0lDKQpAQCAtMTgsNiArMTYsOCBAQAogI2VuZGlmCiAjZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RTUCAqLwogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKICNpbmNsdWRlICJleHBhdF9leHRlcm5hbC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAieG1sdG9rLmgiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jIGIvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYwppbmRleCA2ODBmNjMwLi42YTE0NWRjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCisrKyBiL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKQEAgLTIyLDcgKzIyLDE0IEBACiAjICBkZWZpbmUgRkFVTFRIQU5ETEVSX1VTRVIKICNlbmRpZgogCi0jZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpCisvKiBjYXN0IHNpemVfdCB0byBpbnQgYmVjYXVzZSB3cml0ZSgpIHRha2VzIGFuIGludCBvbiBXaW5kb3dzCisgICAoYW55d2F5LCB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiAzMCBjaGFyYWN0ZXJzKSAqLworI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIChpbnQpc3RybGVuKHN0cikpCisKK19QeV9JREVOVElGSUVSKGVuYWJsZSk7CitfUHlfSURFTlRJRklFUihmaWxlbm8pOworX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKIAogI2lmZGVmIEhBVkVfU0lHQUNUSU9OCiB0eXBlZGVmIHN0cnVjdCBzaWdhY3Rpb24gX1B5X3NpZ2hhbmRsZXJfdDsKQEAgLTc5LDkgKzg2LDYgQEAKIHN0YXRpYyB1c2VyX3NpZ25hbF90ICp1c2VyX3NpZ25hbHM7CiAKIC8qIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGNvbWUgZnJvbSBQeXRob246IE1vZHVsZXMvc2lnbmFsbW9kdWxlLmMgKi8KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTlNJRyAxMgotI2VuZGlmCiAjaWZuZGVmIE5TSUcKICMgaWYgZGVmaW5lZChfTlNJRykKICMgIGRlZmluZSBOU0lHIF9OU0lHICAgICAgICAgICAgLyogRm9yIEJTRC9TeXNWICovCkBAIC0xMzEsMTcgKzEzNSwxOSBAQAogZmF1bHRoYW5kbGVyX2dldF9maWxlbm8oUHlPYmplY3QgKmZpbGUsIGludCAqcF9mZCkKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIF9QeV9JREVOVElGSUVSKGZpbGVubyk7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogICAgIGxvbmcgZmRfbG9uZzsKICAgICBpbnQgZmQ7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMIHx8IGZpbGUgPT0gUHlfTm9uZSkgewotICAgICAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICAgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMuc3RkZXJyIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAoZmlsZSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAic3lzLnN0ZGVyciBpcyBOb25lIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZmlsZSwgJlB5SWRfZmlsZW5vLCAiIik7CkBAIC00NDgsNyArNDU0LDcgQEAKICAgICAgICAgLyogZ2V0IHRoZSB0aHJlYWQgaG9sZGluZyB0aGUgR0lMLCBOVUxMIGlmIG5vIHRocmVhZCBob2xkIHRoZSBHSUwgKi8KICAgICAgICAgY3VycmVudCA9IF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKIAotICAgICAgICB3cml0ZSh0aHJlYWQuZmQsIHRocmVhZC5oZWFkZXIsIHRocmVhZC5oZWFkZXJfbGVuKTsKKyAgICAgICAgd3JpdGUodGhyZWFkLmZkLCB0aHJlYWQuaGVhZGVyLCAoaW50KXRocmVhZC5oZWFkZXJfbGVuKTsKIAogICAgICAgICBlcnJtc2cgPSBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHModGhyZWFkLmZkLCB0aHJlYWQuaW50ZXJwLCBjdXJyZW50KTsKICAgICAgICAgb2sgPSAoZXJybXNnID09IE5VTEwpOwpAQCAtNDc2LDcgKzQ4Miw3IEBACiAKICAgICBQeV9DTEVBUih0aHJlYWQuZmlsZSk7CiAgICAgaWYgKHRocmVhZC5oZWFkZXIpIHsKLSAgICAgICAgZnJlZSh0aHJlYWQuaGVhZGVyKTsKKyAgICAgICAgUHlNZW1fRnJlZSh0aHJlYWQuaGVhZGVyKTsKICAgICAgICAgdGhyZWFkLmhlYWRlciA9IE5VTEw7CiAgICAgfQogfQpAQCAtNTA1LDcgKzUxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVvdXQgKCVsdTolMDJsdTolMDJsdSkhXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGhvdXIsIG1pbiwgc2VjKTsKIAotICAgIHJldHVybiBzdHJkdXAoYnVmZmVyKTsKKyAgICByZXR1cm4gX1B5TWVtX1N0cmR1cChidWZmZXIpOwogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC01NzEsNyArNTc3LDcgQEAKICAgICBpZiAoUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZChmYXVsdGhhbmRsZXJfdGhyZWFkLCBOVUxMKSA9PSAtMSkgewogICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGhyZWFkLnJ1bm5pbmcpOwogICAgICAgICBQeV9DTEVBUih0aHJlYWQuZmlsZSk7Ci0gICAgICAgIGZyZWUoaGVhZGVyKTsKKyAgICAgICAgUHlNZW1fRnJlZShoZWFkZXIpOwogICAgICAgICB0aHJlYWQuaGVhZGVyID0gTlVMTDsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gc3RhcnQgd2F0Y2hkb2cgdGhyZWFkIik7CkBAIC03MzAsOSArNzM2LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHVzZXJfc2lnbmFscyA9PSBOVUxMKSB7Ci0gICAgICAgIHVzZXJfc2lnbmFscyA9IGNhbGxvYyhOU0lHLCBzaXplb2YodXNlcl9zaWduYWxfdCkpOworICAgICAgICB1c2VyX3NpZ25hbHMgPSBQeU1lbV9NYWxsb2MoTlNJRyAqIHNpemVvZih1c2VyX3NpZ25hbF90KSk7CiAgICAgICAgIGlmICh1c2VyX3NpZ25hbHMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBtZW1zZXQodXNlcl9zaWduYWxzLCAwLCBOU0lHICogc2l6ZW9mKHVzZXJfc2lnbmFsX3QpKTsKICAgICB9CiAgICAgdXNlciA9ICZ1c2VyX3NpZ25hbHNbc2lnbnVtXTsKIApAQCAtMTA0Nyw5ICsxMDU0LDExIEBACiBmYXVsdGhhbmRsZXJfZW52X29wdGlvbnModm9pZCkKIHsKICAgICBQeU9iamVjdCAqeG9wdGlvbnMsICprZXksICptb2R1bGUsICpyZXM7Ci0gICAgX1B5X0lERU5USUZJRVIoZW5hYmxlKTsKKyAgICBjaGFyICpwOwogCi0gICAgaWYgKCFQeV9HRVRFTlYoIlBZVEhPTkZBVUxUSEFORExFUiIpKSB7CisgICAgaWYgKCEoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTkZBVUxUSEFORExFUiIpKSAmJiAqcCAhPSAnXDAnKSkgeworICAgICAgICAvKiBQWVRIT05GQVVMVEhBTkRMRVIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbWlzc2luZworICAgICAgICAgICBvciBhbiBlbXB0eSBzdHJpbmcgKi8KICAgICAgICAgaW50IGhhc19rZXk7CiAKICAgICAgICAgeG9wdGlvbnMgPSBQeVN5c19HZXRYT3B0aW9ucygpOwpAQCAtMTEzNyw3ICsxMTQ2LDcgQEAKICAgICBpZiAodXNlcl9zaWduYWxzICE9IE5VTEwpIHsKICAgICAgICAgZm9yIChzaWdudW09MDsgc2lnbnVtIDwgTlNJRzsgc2lnbnVtKyspCiAgICAgICAgICAgICBmYXVsdGhhbmRsZXJfdW5yZWdpc3RlcigmdXNlcl9zaWduYWxzW3NpZ251bV0sIHNpZ251bSk7Ci0gICAgICAgIGZyZWUodXNlcl9zaWduYWxzKTsKKyAgICAgICAgUHlNZW1fRnJlZSh1c2VyX3NpZ25hbHMpOwogICAgICAgICB1c2VyX3NpZ25hbHMgPSBOVUxMOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9mY250bG1vZHVsZS5jIGIvTW9kdWxlcy9mY250bG1vZHVsZS5jCmluZGV4IDY3NjkwOTguLmNmMGFjMTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZmNudGxtb2R1bGUuYworKysgYi9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKQEAgLTIwOCwxMSArMjA4LDcgQEAKICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWZkZWYgX19WTVMKLSAgICByZXQgPSBpb2N0bChmZCwgY29kZSwgKHZvaWQgKilhcmcpOwotI2Vsc2UKICAgICByZXQgPSBpb2N0bChmZCwgY29kZSwgYXJnKTsKLSNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJldCA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwpAQCAtMzI3LDExICszMjMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVub2JqLCAmc3RhcnRvYmosICZ3aGVuY2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJsb2NrZiBub3Qgc3VwcG9ydGVkIG9uIE9TLzIgKEVNWCkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSNlbHNlCiAjaWZuZGVmIExPQ0tfU0gKICNkZWZpbmUgTE9DS19TSCAgICAgICAgIDEgICAgICAgLyogc2hhcmVkIGxvY2sgKi8KICNkZWZpbmUgTE9DS19FWCAgICAgICAgIDIgICAgICAgLyogZXhjbHVzaXZlIGxvY2sgKi8KQEAgLTM4NSw3ICszNzYsNiBAQAogICAgIH0KICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7Ci0jZW5kaWYgIC8qIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpICovCiB9CiAKIFB5RG9jX1NUUlZBUihsb2NrZl9kb2MsCkBAIC00MzIsMTg4ICs0MjIsMTc5IEBACiAKIC8qIE1vZHVsZSBpbml0aWFsaXNhdGlvbiAqLwogCi1zdGF0aWMgaW50Ci1pbnMoUHlPYmplY3QqIGQsIGNoYXIqIHN5bWJvbCwgbG9uZyB2YWx1ZSkKLXsKLSAgICBQeU9iamVjdCogdiA9IFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSk7Ci0gICAgaWYgKCF2IHx8IFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIHN5bWJvbCwgdikgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQeV9ERUNSRUYodik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgSU5TKHgpIGlmIChpbnMoZCwgI3gsIChsb25nKXgpKSByZXR1cm4gLTEKIAogc3RhdGljIGludAotYWxsX2lucyhQeU9iamVjdCogZCkKK2FsbF9pbnMoUHlPYmplY3QqIG0pCiB7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19TSCIsIChsb25nKUxPQ0tfU0gpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19FWCIsIChsb25nKUxPQ0tfRVgpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19OQiIsIChsb25nKUxPQ0tfTkIpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19VTiIsIChsb25nKUxPQ0tfVU4pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfRVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfTkIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfVU4pKSByZXR1cm4gLTE7CiAvKiBHTlUgZXh0ZW5zaW9ucywgYXMgb2YgZ2xpYmMgMi4yLjQgKi8KICNpZmRlZiBMT0NLX01BTkQKLSAgICBpZiAoaW5zKGQsICJMT0NLX01BTkQiLCAobG9uZylMT0NLX01BTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfTUFORCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIExPQ0tfUkVBRAotICAgIGlmIChpbnMoZCwgIkxPQ0tfUkVBRCIsIChsb25nKUxPQ0tfUkVBRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19SRUFEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19XUklURQotICAgIGlmIChpbnMoZCwgIkxPQ0tfV1JJVEUiLCAobG9uZylMT0NLX1dSSVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1dSSVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19SVwotICAgIGlmIChpbnMoZCwgIkxPQ0tfUlciLCAobG9uZylMT0NLX1JXKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1JXKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBGX0RVUEZECi0gICAgaWYgKGlucyhkLCAiRl9EVVBGRCIsIChsb25nKUZfRFVQRkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRFVQRkQpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBGX0RVUEZEX0NMT0VYRUMKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9EVVBGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRGRAotICAgIGlmIChpbnMoZCwgIkZfR0VURkQiLCAobG9uZylGX0dFVEZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVEZEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRGRAotICAgIGlmIChpbnMoZCwgIkZfU0VURkQiLCAobG9uZylGX1NFVEZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVEZEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRGTAotICAgIGlmIChpbnMoZCwgIkZfR0VURkwiLCAobG9uZylGX0dFVEZMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVEZMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRGTAotICAgIGlmIChpbnMoZCwgIkZfU0VURkwiLCAobG9uZylGX1NFVEZMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVEZMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRMSwotICAgIGlmIChpbnMoZCwgIkZfR0VUTEsiLCAobG9uZylGX0dFVExLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVExLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMSwotICAgIGlmIChpbnMoZCwgIkZfU0VUTEsiLCAobG9uZylGX1NFVExLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMS1cKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLVyIsIChsb25nKUZfU0VUTEtXKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLVykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUT1dOCi0gICAgaWYgKGlucyhkLCAiRl9HRVRPV04iLCAobG9uZylGX0dFVE9XTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRPV04pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVE9XTgotICAgIGlmIChpbnMoZCwgIkZfU0VUT1dOIiwgKGxvbmcpRl9TRVRPV04pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUT1dOKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRTSUcKLSAgICBpZiAoaW5zKGQsICJGX0dFVFNJRyIsIChsb25nKUZfR0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVFNJRykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUU0lHCi0gICAgaWYgKGlucyhkLCAiRl9TRVRTSUciLCAobG9uZylGX1NFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRTSUcpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1JETENLCi0gICAgaWYgKGlucyhkLCAiRl9SRExDSyIsIChsb25nKUZfUkRMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfUkRMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1dSTENLCi0gICAgaWYgKGlucyhkLCAiRl9XUkxDSyIsIChsb25nKUZfV1JMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfV1JMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1VOTENLCi0gICAgaWYgKGlucyhkLCAiRl9VTkxDSyIsIChsb25nKUZfVU5MQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVU5MQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIExGUyBjb25zdGFudHMgKi8KICNpZmRlZiBGX0dFVExLNjQKLSAgICBpZiAoaW5zKGQsICJGX0dFVExLNjQiLCAobG9uZylGX0dFVExLNjQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEs2NCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEs2NAotICAgIGlmIChpbnMoZCwgIkZfU0VUTEs2NCIsIChsb25nKUZfU0VUTEs2NCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMSzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMS1c2NAotICAgIGlmIChpbnMoZCwgIkZfU0VUTEtXNjQiLCAobG9uZylGX1NFVExLVzY0KSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLVzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAvKiBHTlUgZXh0ZW5zaW9ucywgYXMgb2YgZ2xpYmMgMi4yLjQuICovCiAjaWZkZWYgRkFTWU5DCi0gICAgaWYgKGlucyhkLCAiRkFTWU5DIiwgKGxvbmcpRkFTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGQVNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExFQVNFCi0gICAgaWYgKGlucyhkLCAiRl9TRVRMRUFTRSIsIChsb25nKUZfU0VUTEVBU0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEVBU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVExFQVNFCi0gICAgaWYgKGlucyhkLCAiRl9HRVRMRUFTRSIsIChsb25nKUZfR0VUTEVBU0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEVBU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX05PVElGWQotICAgIGlmIChpbnMoZCwgIkZfTk9USUZZIiwgKGxvbmcpRl9OT1RJRlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfTk9USUZZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAvKiBPbGQgQlNEIGZsb2NrKCkuICovCiAjaWZkZWYgRl9FWExDSwotICAgIGlmIChpbnMoZCwgIkZfRVhMQ0siLCAobG9uZylGX0VYTENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0VYTENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TSExDSwotICAgIGlmIChpbnMoZCwgIkZfU0hMQ0siLCAobG9uZylGX1NITENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NITENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIE9TIFggc3BlY2lmaWNzICovCiAjaWZkZWYgRl9GVUxMRlNZTkMKLSAgICBpZiAoaW5zKGQsICJGX0ZVTExGU1lOQyIsIChsb25nKUZfRlVMTEZTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0ZVTExGU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfTk9DQUNIRQotICAgIGlmIChpbnMoZCwgIkZfTk9DQUNIRSIsIChsb25nKUZfTk9DQUNIRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9OT0NBQ0hFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEZvciBGX3tHRVR8U0VUfUZMICovCiAjaWZkZWYgRkRfQ0xPRVhFQwotICAgIGlmIChpbnMoZCwgIkZEX0NMT0VYRUMiLCAobG9uZylGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEZvciBGX05PVElGWSAqLwogI2lmZGVmIEROX0FDQ0VTUwotICAgIGlmIChpbnMoZCwgIkROX0FDQ0VTUyIsIChsb25nKUROX0FDQ0VTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQUNDRVNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fTU9ESUZZCi0gICAgaWYgKGlucyhkLCAiRE5fTU9ESUZZIiwgKGxvbmcpRE5fTU9ESUZZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9NT0RJRlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9DUkVBVEUKLSAgICBpZiAoaW5zKGQsICJETl9DUkVBVEUiLCAobG9uZylETl9DUkVBVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0NSRUFURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0RFTEVURQotICAgIGlmIChpbnMoZCwgIkROX0RFTEVURSIsIChsb25nKUROX0RFTEVURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fREVMRVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fUkVOQU1FCi0gICAgaWYgKGlucyhkLCAiRE5fUkVOQU1FIiwgKGxvbmcpRE5fUkVOQU1FKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9SRU5BTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9BVFRSSUIKLSAgICBpZiAoaW5zKGQsICJETl9BVFRSSUIiLCAobG9uZylETl9BVFRSSUIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0FUVFJJQikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX01VTFRJU0hPVAotICAgIGlmIChpbnMoZCwgIkROX01VTFRJU0hPVCIsIChsb25nKUROX01VTFRJU0hPVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fTVVMVElTSE9UKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NUUk9QVFNfSAogICAgIC8qIFVuaXggOTggZ3VhcmFudGVlcyB0aGF0IHRoZXNlIGFyZSBpbiBzdHJvcHRzLmguICovCi0gICAgSU5TKElfUFVTSCk7Ci0gICAgSU5TKElfUE9QKTsKLSAgICBJTlMoSV9MT09LKTsKLSAgICBJTlMoSV9GTFVTSCk7Ci0gICAgSU5TKElfRkxVU0hCQU5EKTsKLSAgICBJTlMoSV9TRVRTSUcpOwotICAgIElOUyhJX0dFVFNJRyk7Ci0gICAgSU5TKElfRklORCk7Ci0gICAgSU5TKElfUEVFSyk7Ci0gICAgSU5TKElfU1JET1BUKTsKLSAgICBJTlMoSV9HUkRPUFQpOwotICAgIElOUyhJX05SRUFEKTsKLSAgICBJTlMoSV9GRElOU0VSVCk7Ci0gICAgSU5TKElfU1RSKTsKLSAgICBJTlMoSV9TV1JPUFQpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BVU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUE9QKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0xPT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkxVU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkxVU0hCQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRklORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QRUVLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NSRE9QVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HUkRPUFQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTlJFQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkRJTlNFUlQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1RSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NXUk9QVCkpIHJldHVybiAtMTsKICNpZmRlZiBJX0dXUk9QVAogICAgIC8qIGRlc3BpdGUgdGhlIGNvbW1lbnQgYWJvdmUsIG9sZC1pc2ggZ2xpYmNzIG1pc3MgYSBjb3VwbGUuLi4gKi8KLSAgICBJTlMoSV9HV1JPUFQpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dXUk9QVCkpIHJldHVybiAtMTsKICNlbmRpZgotICAgIElOUyhJX1NFTkRGRCk7Ci0gICAgSU5TKElfUkVDVkZEKTsKLSAgICBJTlMoSV9MSVNUKTsKLSAgICBJTlMoSV9BVE1BUkspOwotICAgIElOUyhJX0NLQkFORCk7Ci0gICAgSU5TKElfR0VUQkFORCk7Ci0gICAgSU5TKElfQ0FOUFVUKTsKLSAgICBJTlMoSV9TRVRDTFRJTUUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFTkRGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9SRUNWRkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTElTVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9BVE1BUkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfQ0tCQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dFVEJBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfQ0FOUFVUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFVENMVElNRSkpIHJldHVybiAtMTsKICNpZmRlZiBJX0dFVENMVElNRQotICAgIElOUyhJX0dFVENMVElNRSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR0VUQ0xUSU1FKSkgcmV0dXJuIC0xOwogI2VuZGlmCi0gICAgSU5TKElfTElOSyk7Ci0gICAgSU5TKElfVU5MSU5LKTsKLSAgICBJTlMoSV9QTElOSyk7Ci0gICAgSU5TKElfUFVOTElOSyk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9VTkxJTkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUExJTkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUFVOTElOSykpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgcmV0dXJuIDA7CkBAIC02MzUsNyArNjE2LDcgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfZmNudGwodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQ7CisgICAgUHlPYmplY3QgKm07CiAKICAgICAvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgYWRkIHRoZSBmdW5jdGlvbnMgYW5kIGRvY3VtZW50YXRpb24gKi8KICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZmY250bG1vZHVsZSk7CkBAIC02NDMsNyArNjI0LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwotICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIGFsbF9pbnMoZCk7CisgICAgaWYgKGFsbF9pbnMobSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9mcGVjdGxtb2R1bGUuYyBiL01vZHVsZXMvZnBlY3RsbW9kdWxlLmMKaW5kZXggNmFmMmY4Mi4uMDUyYjgzNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9mcGVjdGxtb2R1bGUuYworKysgYi9Nb2R1bGVzL2ZwZWN0bG1vZHVsZS5jCkBAIC03MCwxMCArNzAsNiBAQAogCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKICMgIGluY2x1ZGUgPGllZWVmcC5oPgotI2VsaWYgZGVmaW5lZChfX1ZNUykKLSNkZWZpbmUgX19ORVdfU1RBUkxFVAotI2luY2x1ZGUgPHN0YXJsZXQuaD4KLSNpbmNsdWRlIDxpZWVlZGVmLmg+CiAjZW5kaWYKIAogI2lmbmRlZiBXQU5UX1NJR0ZQRV9IQU5ETEVSCkBAIC0xODIsMjMgKzE3OCw2IEBACiAgICAgaWVlZV9zZXRfZnBfY29udHJvbChmcF9jb250cm9sKTsKICAgICBQeU9TX3NldHNpZyhTSUdGUEUsIGhhbmRsZXIpOwogCi0vKi0tIERFQyBBTFBIQSBWTVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2VsaWYgZGVmaW5lZChfX0FMUEhBKSAmJiBkZWZpbmVkKF9fVk1TKQotICAgICAgICBJRUVFIGNscm1zazsKLSAgICAgICAgSUVFRSBzZXRtc2s7Ci0gICAgICAgIGNscm1zay5pZWVlJHFfZmxhZ3MgPQotICAgICAgICAgICAgICAgIElFRUUkTV9UUkFQX0VOQUJMRV9VTkYgfCAgSUVFRSRNX1RSQVBfRU5BQkxFX0lORSB8Ci0gICAgICAgICAgICAgICAgIElFRUUkTV9NQVBfVU1aOwotICAgICAgICBzZXRtc2suaWVlZSRxX2ZsYWdzID0KLSAgICAgICAgICAgICAgICBJRUVFJE1fVFJBUF9FTkFCTEVfSU5WIHwgSUVFRSRNX1RSQVBfRU5BQkxFX0RaRSB8Ci0gICAgICAgICAgICAgICAgSUVFRSRNX1RSQVBfRU5BQkxFX09WRjsKLSAgICAgICAgc3lzJGllZWVfc2V0X2ZwX2NvbnRyb2woJmNscm1zaywgJnNldG1zaywgMCk7Ci0gICAgICAgIFB5T1Nfc2V0c2lnKFNJR0ZQRSwgaGFuZGxlcik7Ci0KLS8qLS0gSFAgSUE2NCBWTVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2VsaWYgZGVmaW5lZChfX2lhNjQpICYmIGRlZmluZWQoX19WTVMpCi0gICAgUHlPU19zZXRzaWcoU0lHRlBFLCBoYW5kbGVyKTsKLQogLyotLSBDcmF5IFVuaWNvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNlbGlmIGRlZmluZWQoY3JheSkKICAgICAvKiBVTklDT1MgZGVsaXZlcnMgU0lHRlBFIGJ5IGRlZmF1bHQsIGJ1dCBubyBtYXRoZXJyICovCkBAIC0yNTEsMTQgKzIzMCw2IEBACiAjaWZkZWYgX19GcmVlQlNEX18KICAgICBmcHJlc2V0c3RpY2t5KGZwZ2V0c3RpY2t5KCkpOwogICAgIGZwc2V0bWFzaygwKTsKLSNlbGlmIGRlZmluZWQoX19WTVMpCi0gICAgICAgIElFRUUgY2xybXNrOwotICAgICAgICAgY2xybXNrLmllZWUkcV9mbGFncyA9Ci0gICAgICAgICAgICAgICAgSUVFRSRNX1RSQVBfRU5BQkxFX1VORiB8ICBJRUVFJE1fVFJBUF9FTkFCTEVfSU5FIHwKLSAgICAgICAgICAgICAgICBJRUVFJE1fTUFQX1VNWiB8IElFRUUkTV9UUkFQX0VOQUJMRV9JTlYgfAotICAgICAgICAgICAgICAgIElFRUUkTV9UUkFQX0VOQUJMRV9EWkUgfCBJRUVFJE1fVFJBUF9FTkFCTEVfT1ZGIHwKLSAgICAgICAgICAgICAgICBJRUVFJE1fSU5IRVJJVDsKLSAgICAgICAgc3lzJGllZWVfc2V0X2ZwX2NvbnRyb2woJmNscm1zaywgMCwgMCk7CiAjZWxzZQogICAgIGZwdXRzKCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXG4iLCBzdGRlcnIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2djbW9kdWxlLmMgYi9Nb2R1bGVzL2djbW9kdWxlLmMKaW5kZXggYzY2ZGQzOC4uOWJiMzY2NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nY21vZHVsZS5jCisrKyBiL01vZHVsZXMvZ2Ntb2R1bGUuYwpAQCAtMTY4LDYgKzE2OCwxOCBAQAogc3RhdGljIGludCBkZWJ1ZzsKIHN0YXRpYyBQeU9iamVjdCAqdG1vZCA9IE5VTEw7CiAKKy8qIFJ1bm5pbmcgc3RhdHMgcGVyIGdlbmVyYXRpb24gKi8KK3N0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgY29sbGVjdGlvbnMgKi8KKyAgICBQeV9zc2l6ZV90IGNvbGxlY3Rpb25zOworICAgIC8qIHRvdGFsIG51bWJlciBvZiBjb2xsZWN0ZWQgb2JqZWN0cyAqLworICAgIFB5X3NzaXplX3QgY29sbGVjdGVkOworICAgIC8qIHRvdGFsIG51bWJlciBvZiB1bmNvbGxlY3RhYmxlIG9iamVjdHMgKHB1dCBpbnRvIGdjLmdhcmJhZ2UpICovCisgICAgUHlfc3NpemVfdCB1bmNvbGxlY3RhYmxlOworfTsKKworc3RhdGljIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIGdlbmVyYXRpb25fc3RhdHNbTlVNX0dFTkVSQVRJT05TXTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2NfcmVmcyB2YWx1ZXMuCiAKQEAgLTIxMSwxMCArMjIzLDEwIEBACiAjZGVmaW5lIEdDX1JFQUNIQUJMRSAgICAgICAgICAgICAgICAgICAgX1B5R0NfUkVGU19SRUFDSEFCTEUKICNkZWZpbmUgR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICBfUHlHQ19SRUZTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFCiAKLSNkZWZpbmUgSVNfVFJBQ0tFRChvKSAoKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyAhPSBHQ19VTlRSQUNLRUQpCi0jZGVmaW5lIElTX1JFQUNIQUJMRShvKSAoKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyA9PSBHQ19SRUFDSEFCTEUpCisjZGVmaW5lIElTX1RSQUNLRUQobykgKF9QeUdDX1JFRlMobykgIT0gR0NfVU5UUkFDS0VEKQorI2RlZmluZSBJU19SRUFDSEFCTEUobykgKF9QeUdDX1JFRlMobykgPT0gR0NfUkVBQ0hBQkxFKQogI2RlZmluZSBJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvKSAoIFwKLSAgICAoQVNfR0MobykpLT5nYy5nY19yZWZzID09IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKQorICAgIF9QeUdDX1JFRlMobykgPT0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpCiAKIC8qKiogbGlzdCBmdW5jdGlvbnMgKioqLwogCkBAIC0zMjksOCArMzQxLDggQEAKIHsKICAgICBQeUdDX0hlYWQgKmdjID0gY29udGFpbmVycy0+Z2MuZ2NfbmV4dDsKICAgICBmb3IgKDsgZ2MgIT0gY29udGFpbmVyczsgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgewotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgPT0gR0NfUkVBQ0hBQkxFKTsKLSAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBQeV9SRUZDTlQoRlJPTV9HQyhnYykpOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID09IEdDX1JFQUNIQUJMRSk7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgUHlfUkVGQ05UKEZST01fR0MoZ2MpKSk7CiAgICAgICAgIC8qIFB5dGhvbidzIGN5Y2xpYyBnYyBzaG91bGQgbmV2ZXIgc2VlIGFuIGluY29taW5nIHJlZmNvdW50CiAgICAgICAgICAqIG9mIDA6ICBpZiBzb21ldGhpbmcgZGVjcmVmJ2VkIHRvIDAsIGl0IHNob3VsZCBoYXZlIGJlZW4KICAgICAgICAgICogZGVhbGxvY2F0ZWQgaW1tZWRpYXRlbHkgYXQgdGhhdCB0aW1lLgpAQCAtMzQ5LDcgKzM2MSw3IEBACiAgICAgICAgICAqIHNvIHNlcmlvdXMgdGhhdCBtYXliZSB0aGlzIHNob3VsZCBiZSBhIHJlbGVhc2UtYnVpbGQKICAgICAgICAgICogY2hlY2sgaW5zdGVhZCBvZiBhbiBhc3NlcnQ/CiAgICAgICAgICAqLwotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgIT0gMCk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7CiAgICAgfQogfQogCkBAIC0zNjQsOSArMzc2LDkgQEAKICAgICAgICAgICogZ2VuZXJhdGlvbiBiZWluZyBjb2xsZWN0ZWQsIHdoaWNoIGNhbiBiZSByZWNvZ25pemVkCiAgICAgICAgICAqIGJlY2F1c2Ugb25seSB0aGV5IGhhdmUgcG9zaXRpdmUgZ2NfcmVmcy4KICAgICAgICAgICovCi0gICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyAhPSAwKTsgLyogZWxzZSByZWZjb3VudCB3YXMgdG9vIHNtYWxsICovCi0gICAgICAgIGlmIChnYy0+Z2MuZ2NfcmVmcyA+IDApCi0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcy0tOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOyAvKiBlbHNlIHJlZmNvdW50IHdhcyB0b28gc21hbGwgKi8KKyAgICAgICAgaWYgKF9QeUdDSGVhZF9SRUZTKGdjKSA+IDApCisgICAgICAgICAgICBfUHlHQ0hlYWRfREVDUkVGKGdjKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zOTUsNyArNDA3LDcgQEAKIHsKICAgICBpZiAoUHlPYmplY3RfSVNfR0Mob3ApKSB7CiAgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBBU19HQyhvcCk7Ci0gICAgICAgIGNvbnN0IFB5X3NzaXplX3QgZ2NfcmVmcyA9IGdjLT5nYy5nY19yZWZzOworICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGdjX3JlZnMgPSBfUHlHQ0hlYWRfUkVGUyhnYyk7CiAKICAgICAgICAgaWYgKGdjX3JlZnMgPT0gMCkgewogICAgICAgICAgICAgLyogVGhpcyBpcyBpbiBtb3ZlX3VucmVhY2hhYmxlJ3MgJ3lvdW5nJyBsaXN0LCBidXQKQEAgLTQwMyw3ICs0MTUsNyBAQAogICAgICAgICAgICAgICogd2UgbmVlZCB0byBkbyBpcyB0ZWxsIG1vdmVfdW5yZWFjaGFibGUgdGhhdCBpdCdzCiAgICAgICAgICAgICAgKiByZWFjaGFibGUuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gMTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoZ2NfcmVmcyA9PSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSkgewogICAgICAgICAgICAgLyogVGhpcyBoYWQgZ2NfcmVmcyA9IDAgd2hlbiBtb3ZlX3VucmVhY2hhYmxlIGdvdApAQCAtNDEzLDcgKzQyNSw3IEBACiAgICAgICAgICAgICAgKiBhZ2Fpbi4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCByZWFjaGFibGUpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSAxOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCAxKTsKICAgICAgICAgfQogICAgICAgICAvKiBFbHNlIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KICAgICAgICAgICogSWYgZ2NfcmVmcyA+IDAsIGl0IG11c3QgYmUgaW4gbW92ZV91bnJlYWNoYWJsZSdzICd5b3VuZycKQEAgLTQ1Nyw3ICs0NjksNyBAQAogICAgIHdoaWxlIChnYyAhPSB5b3VuZykgewogICAgICAgICBQeUdDX0hlYWQgKm5leHQ7CiAKLSAgICAgICAgaWYgKGdjLT5nYy5nY19yZWZzKSB7CisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykpIHsKICAgICAgICAgICAgIC8qIGdjIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gb3V0c2lkZSB0aGUKICAgICAgICAgICAgICAqIG9yaWdpbmFsICd5b3VuZycuICBNYXJrIGl0IGFzIHN1Y2gsIGFuZCB0cmF2ZXJzZQogICAgICAgICAgICAgICogaXRzIHBvaW50ZXJzIHRvIGZpbmQgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtYXkKQEAgLTQ2OCw4ICs0ODAsOCBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKICAgICAgICAgICAgIHRyYXZlcnNlcHJvYyB0cmF2ZXJzZSA9IFB5X1RZUEUob3ApLT50cF90cmF2ZXJzZTsKLSAgICAgICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyA+IDApOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID4gMCk7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgICAgICAodm9pZCkgdHJhdmVyc2Uob3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpc2l0cHJvYyl2aXNpdF9yZWFjaGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKil5b3VuZyk7CkBAIC00ODgsNyArNTAwLDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgbmV4dCA9IGdjLT5nYy5nY19uZXh0OwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCB1bnJlYWNoYWJsZSk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICAgICAgZ2MgPSBuZXh0OwogICAgIH0KQEAgLTUwOCwyMiArNTIwLDE5IEBACiAgICAgfQogfQogCi0vKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaGFzIGEgZmluYWxpemF0aW9uIG1ldGhvZC4gKi8KKy8qIFJldHVybiB0cnVlIGlmIG9iamVjdCBoYXMgYSBwcmUtUEVQIDQ0MiBmaW5hbGl6YXRpb24gbWV0aG9kLiAqLwogc3RhdGljIGludAotaGFzX2ZpbmFsaXplcihQeU9iamVjdCAqb3ApCitoYXNfbGVnYWN5X2ZpbmFsaXplcihQeU9iamVjdCAqb3ApCiB7Ci0gICAgaWYgKFB5R2VuX0NoZWNrRXhhY3Qob3ApKQotICAgICAgICByZXR1cm4gUHlHZW5fTmVlZHNGaW5hbGl6aW5nKChQeUdlbk9iamVjdCAqKW9wKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvcC0+b2JfdHlwZS0+dHBfZGVsICE9IE5VTEw7CisgICAgcmV0dXJuIG9wLT5vYl90eXBlLT50cF9kZWwgIT0gTlVMTDsKIH0KIAotLyogTW92ZSB0aGUgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSB3aXRoIF9fZGVsX18gbWV0aG9kcyBpbnRvIGBmaW5hbGl6ZXJzYC4KKy8qIE1vdmUgdGhlIG9iamVjdHMgaW4gdW5yZWFjaGFibGUgd2l0aCB0cF9kZWwgc2xvdHMgaW50byBgZmluYWxpemVyc2AuCiAgKiBPYmplY3RzIG1vdmVkIGludG8gYGZpbmFsaXplcnNgIGhhdmUgZ2NfcmVmcyBzZXQgdG8gR0NfUkVBQ0hBQkxFOyB0aGUKICAqIG9iamVjdHMgcmVtYWluaW5nIGluIHVucmVhY2hhYmxlIGFyZSBsZWZ0IGF0IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFLgogICovCiBzdGF0aWMgdm9pZAotbW92ZV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqdW5yZWFjaGFibGUsIFB5R0NfSGVhZCAqZmluYWxpemVycykKK21vdmVfbGVnYWN5X2ZpbmFsaXplcnMoUHlHQ19IZWFkICp1bnJlYWNoYWJsZSwgUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQogewogICAgIFB5R0NfSGVhZCAqZ2M7CiAgICAgUHlHQ19IZWFkICpuZXh0OwpAQCAtNTM3LDE0ICs1NDYsMTQgQEAKICAgICAgICAgYXNzZXJ0KElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSk7CiAgICAgICAgIG5leHQgPSBnYy0+Z2MuZ2NfbmV4dDsKIAotICAgICAgICBpZiAoaGFzX2ZpbmFsaXplcihvcCkpIHsKKyAgICAgICAgaWYgKGhhc19sZWdhY3lfZmluYWxpemVyKG9wKSkgewogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCBmaW5hbGl6ZXJzKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogfQogCi0vKiBBIHRyYXZlcnNhbCBjYWxsYmFjayBmb3IgbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlLiAqLworLyogQSB0cmF2ZXJzYWwgY2FsbGJhY2sgZm9yIG1vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUuICovCiBzdGF0aWMgaW50CiB2aXNpdF9tb3ZlKFB5T2JqZWN0ICpvcCwgUHlHQ19IZWFkICp0b2xpc3QpCiB7CkBAIC01NTIsNyArNTYxLDcgQEAKICAgICAgICAgaWYgKElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSkgewogICAgICAgICAgICAgUHlHQ19IZWFkICpnYyA9IEFTX0dDKG9wKTsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgdG9saXN0KTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtNTYyLDcgKzU3MSw3IEBACiAgKiBpbnRvIGZpbmFsaXplcnMgc2V0LgogICovCiBzdGF0aWMgdm9pZAotbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlKFB5R0NfSGVhZCAqZmluYWxpemVycykKK21vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUoUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQogewogICAgIHRyYXZlcnNlcHJvYyB0cmF2ZXJzZTsKICAgICBQeUdDX0hlYWQgKmdjID0gZmluYWxpemVycy0+Z2MuZ2NfbmV4dDsKQEAgLTczNSw3ICs3NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBtc2csIFB5X1RZUEUob3ApLT50cF9uYW1lLCBvcCk7CiB9CiAKLS8qIEhhbmRsZSB1bmNvbGxlY3RhYmxlIGdhcmJhZ2UgKGN5Y2xlcyB3aXRoIGZpbmFsaXplcnMsIGFuZCBzdHVmZiByZWFjaGFibGUKKy8qIEhhbmRsZSB1bmNvbGxlY3RhYmxlIGdhcmJhZ2UgKGN5Y2xlcyB3aXRoIHRwX2RlbCBzbG90cywgYW5kIHN0dWZmIHJlYWNoYWJsZQogICogb25seSBmcm9tIHN1Y2ggY3ljbGVzKS4KICAqIElmIERFQlVHX1NBVkVBTEwsIGFsbCBvYmplY3RzIGluIGZpbmFsaXplcnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBtb2R1bGUKICAqIGdhcmJhZ2UgbGlzdCAoYSBQeXRob24gbGlzdCksIGVsc2Ugb25seSB0aGUgb2JqZWN0cyBpbiBmaW5hbGl6ZXJzIHdpdGgKQEAgLTc0NSw3ICs3NTQsNyBAQAogICogVGhlIGZpbmFsaXplcnMgbGlzdCBpcyBtYWRlIGVtcHR5IG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4uCiAgKi8KIHN0YXRpYyBpbnQKLWhhbmRsZV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqZmluYWxpemVycywgUHlHQ19IZWFkICpvbGQpCitoYW5kbGVfbGVnYWN5X2ZpbmFsaXplcnMoUHlHQ19IZWFkICpmaW5hbGl6ZXJzLCBQeUdDX0hlYWQgKm9sZCkKIHsKICAgICBQeUdDX0hlYWQgKmdjID0gZmluYWxpemVycy0+Z2MuZ2NfbmV4dDsKIApAQCAtNzU3LDcgKzc2Niw3IEBACiAgICAgZm9yICg7IGdjICE9IGZpbmFsaXplcnM7IGdjID0gZ2MtPmdjLmdjX25leHQpIHsKICAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CiAKLSAgICAgICAgaWYgKChkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpIHx8IGhhc19maW5hbGl6ZXIob3ApKSB7CisgICAgICAgIGlmICgoZGVidWcgJiBERUJVR19TQVZFQUxMKSB8fCBoYXNfbGVnYWN5X2ZpbmFsaXplcihvcCkpIHsKICAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC03NjcsNiArNzc2LDc0IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKy8qIFJ1biBmaXJzdC10aW1lIGZpbmFsaXplcnMgKGlmIGFueSkgb24gYWxsIHRoZSBvYmplY3RzIGluIGNvbGxlY3RhYmxlLgorICogTm90ZSB0aGF0IHRoaXMgbWF5IHJlbW92ZSBzb21lIChvciBldmVuIGFsbCkgb2YgdGhlIG9iamVjdHMgZnJvbSB0aGUKKyAqIGxpc3QsIGR1ZSB0byByZWZjb3VudHMgZmFsbGluZyB0byAwLgorICovCitzdGF0aWMgdm9pZAorZmluYWxpemVfZ2FyYmFnZShQeUdDX0hlYWQgKmNvbGxlY3RhYmxlKQoreworICAgIGRlc3RydWN0b3IgZmluYWxpemU7CisgICAgUHlHQ19IZWFkIHNlZW47CisKKyAgICAvKiBXaGlsZSB3ZSdyZSBnb2luZyB0aHJvdWdoIHRoZSBsb29wLCBgZmluYWxpemUob3ApYCBtYXkgY2F1c2Ugb3AsIG9yCisgICAgICogb3RoZXIgb2JqZWN0cywgdG8gYmUgcmVjbGFpbWVkIHZpYSByZWZjb3VudHMgZmFsbGluZyB0byB6ZXJvLiAgU28KKyAgICAgKiB0aGVyZSdzIGxpdHRsZSB3ZSBjYW4gcmVseSBvbiBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBpbnB1dAorICAgICAqIGBjb2xsZWN0YWJsZWAgbGlzdCBhY3Jvc3MgaXRlcmF0aW9ucy4gIEZvciBzYWZldHksIHdlIGFsd2F5cyB0YWtlIHRoZQorICAgICAqIGZpcnN0IG9iamVjdCBpbiB0aGF0IGxpc3QgYW5kIG1vdmUgaXQgdG8gYSB0ZW1wb3JhcnkgYHNlZW5gIGxpc3QuCisgICAgICogSWYgb2JqZWN0cyB2YW5pc2ggZnJvbSB0aGUgYGNvbGxlY3RhYmxlYCBhbmQgYHNlZW5gIGxpc3RzIHdlIGRvbid0CisgICAgICogY2FyZS4KKyAgICAgKi8KKyAgICBnY19saXN0X2luaXQoJnNlZW4pOworCisgICAgd2hpbGUgKCFnY19saXN0X2lzX2VtcHR5KGNvbGxlY3RhYmxlKSkgeworICAgICAgICBQeUdDX0hlYWQgKmdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7CisgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOworICAgICAgICBnY19saXN0X21vdmUoZ2MsICZzZWVuKTsKKyAgICAgICAgaWYgKCFfUHlHQ0hlYWRfRklOQUxJWkVEKGdjKSAmJgorICAgICAgICAgICAgICAgIFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmCisgICAgICAgICAgICAgICAgKGZpbmFsaXplID0gUHlfVFlQRShvcCktPnRwX2ZpbmFsaXplKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX0ZJTkFMSVpFRChnYywgMSk7CisgICAgICAgICAgICBQeV9JTkNSRUYob3ApOworICAgICAgICAgICAgZmluYWxpemUob3ApOworICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBnY19saXN0X21lcmdlKCZzZWVuLCBjb2xsZWN0YWJsZSk7Cit9CisKKy8qIFdhbGsgdGhlIGNvbGxlY3RhYmxlIGxpc3QgYW5kIGNoZWNrIHRoYXQgdGhleSBhcmUgcmVhbGx5IHVucmVhY2hhYmxlCisgICBmcm9tIHRoZSBvdXRzaWRlIChzb21lIG9iamVjdHMgY291bGQgaGF2ZSBiZWVuIHJlc3VycmVjdGVkIGJ5IGEKKyAgIGZpbmFsaXplcikuICovCitzdGF0aWMgaW50CitjaGVja19nYXJiYWdlKFB5R0NfSGVhZCAqY29sbGVjdGFibGUpCit7CisgICAgUHlHQ19IZWFkICpnYzsKKyAgICBmb3IgKGdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7IGdjICE9IGNvbGxlY3RhYmxlOworICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIFB5X1JFRkNOVChGUk9NX0dDKGdjKSkpOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOworICAgIH0KKyAgICBzdWJ0cmFjdF9yZWZzKGNvbGxlY3RhYmxlKTsKKyAgICBmb3IgKGdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7IGdjICE9IGNvbGxlY3RhYmxlOworICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID49IDApOworICAgICAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmV2aXZlX2dhcmJhZ2UoUHlHQ19IZWFkICpjb2xsZWN0YWJsZSkKK3sKKyAgICBQeUdDX0hlYWQgKmdjOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKKyAgICB9Cit9CisKIC8qIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgYnkgY2xlYXJpbmcgdGhlIGNvbnRhaW5lcnMgaW52b2x2ZWQuICBUaGlzIGlzCiAgKiB0cmlja3kgYnVzaW5lc3MgYXMgdGhlIGxpc3RzIGNhbiBiZSBjaGFuZ2luZyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaAogICogb2JqZWN0cyBtYXkgYmUgZnJlZWQuICBJdCBpcyBwb3NzaWJsZSBJIHNjcmV3ZWQgc29tZXRoaW5nIHVwIGhlcmUuCkBAIC03ODAsNyArODU3LDYgQEAKICAgICAgICAgUHlHQ19IZWFkICpnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OwogICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKIAotICAgICAgICBhc3NlcnQoSVNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUob3ApKTsKICAgICAgICAgaWYgKGRlYnVnICYgREVCVUdfU0FWRUFMTCkgewogICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChnYXJiYWdlLCBvcCk7CiAgICAgICAgIH0KQEAgLTc5NCw3ICs4NzAsNyBAQAogICAgICAgICBpZiAoY29sbGVjdGFibGUtPmdjLmdjX25leHQgPT0gZ2MpIHsKICAgICAgICAgICAgIC8qIG9iamVjdCBpcyBzdGlsbCBhbGl2ZSwgbW92ZSBpdCwgaXQgbWF5IGRpZSBsYXRlciAqLwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCBvbGQpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04NDEsNyArOTE3LDggQEAKIC8qIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24uICBSZWFkIHRoaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlCiAgKiBjb2xsZWN0aW9uIHByb2Nlc3Mgd29ya3MuICovCiBzdGF0aWMgUHlfc3NpemVfdAotY29sbGVjdChpbnQgZ2VuZXJhdGlvbiwgUHlfc3NpemVfdCAqbl9jb2xsZWN0ZWQsIFB5X3NzaXplX3QgKm5fdW5jb2xsZWN0YWJsZSkKK2NvbGxlY3QoaW50IGdlbmVyYXRpb24sIFB5X3NzaXplX3QgKm5fY29sbGVjdGVkLCBQeV9zc2l6ZV90ICpuX3VuY29sbGVjdGFibGUsCisgICAgICAgIGludCBub2ZhaWwpCiB7CiAgICAgaW50IGk7CiAgICAgUHlfc3NpemVfdCBtID0gMDsgLyogIyBvYmplY3RzIGNvbGxlY3RlZCAqLwpAQCAtODUyLDYgKzkyOSw3IEBACiAgICAgUHlHQ19IZWFkIGZpbmFsaXplcnM7ICAvKiBvYmplY3RzIHdpdGgsICYgcmVhY2hhYmxlIGZyb20sIF9fZGVsX18gKi8KICAgICBQeUdDX0hlYWQgKmdjOwogICAgIGRvdWJsZSB0MSA9IDAuMDsKKyAgICBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyAqc3RhdHMgPSAmZ2VuZXJhdGlvbl9zdGF0c1tnZW5lcmF0aW9uXTsKIAogICAgIGlmIChkZWJ1ZyAmIERFQlVHX1NUQVRTKSB7CiAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJnYzogY29sbGVjdGluZyBnZW5lcmF0aW9uICVkLi4uXG4iLApAQCAtOTE1LDE5ICs5OTMsMTUgQEAKICAgICB9CiAKICAgICAvKiBBbGwgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSBhcmUgdHJhc2gsIGJ1dCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tCi0gICAgICogZmluYWxpemVycyBjYW4ndCBzYWZlbHkgYmUgZGVsZXRlZC4gIFB5dGhvbiBwcm9ncmFtbWVycyBzaG91bGQgdGFrZQotICAgICAqIGNhcmUgbm90IHRvIGNyZWF0ZSBzdWNoIHRoaW5ncy4gIEZvciBQeXRob24sIGZpbmFsaXplcnMgbWVhbnMKLSAgICAgKiBpbnN0YW5jZSBvYmplY3RzIHdpdGggX19kZWxfXyBtZXRob2RzLiAgV2Vha3JlZnMgd2l0aCBjYWxsYmFja3MKLSAgICAgKiBjYW4gYWxzbyBjYWxsIGFyYml0cmFyeSBQeXRob24gY29kZSBidXQgdGhleSB3aWxsIGJlIGRlYWx0IHdpdGggYnkKLSAgICAgKiBoYW5kbGVfd2Vha3JlZnMoKS4KKyAgICAgKiBsZWdhY3kgZmluYWxpemVycyAoZS5nLiB0cF9kZWwpIGNhbid0IHNhZmVseSBiZSBkZWxldGVkLgogICAgICAqLwogICAgIGdjX2xpc3RfaW5pdCgmZmluYWxpemVycyk7Ci0gICAgbW92ZV9maW5hbGl6ZXJzKCZ1bnJlYWNoYWJsZSwgJmZpbmFsaXplcnMpOwotICAgIC8qIGZpbmFsaXplcnMgY29udGFpbnMgdGhlIHVucmVhY2hhYmxlIG9iamVjdHMgd2l0aCBhIGZpbmFsaXplcjsKKyAgICBtb3ZlX2xlZ2FjeV9maW5hbGl6ZXJzKCZ1bnJlYWNoYWJsZSwgJmZpbmFsaXplcnMpOworICAgIC8qIGZpbmFsaXplcnMgY29udGFpbnMgdGhlIHVucmVhY2hhYmxlIG9iamVjdHMgd2l0aCBhIGxlZ2FjeSBmaW5hbGl6ZXI7CiAgICAgICogdW5yZWFjaGFibGUgb2JqZWN0cyByZWFjaGFibGUgKmZyb20qIHRob3NlIGFyZSBhbHNvIHVuY29sbGVjdGFibGUsCiAgICAgICogYW5kIHdlIG1vdmUgdGhvc2UgaW50byB0aGUgZmluYWxpemVycyBsaXN0IHRvby4KICAgICAgKi8KLSAgICBtb3ZlX2ZpbmFsaXplcl9yZWFjaGFibGUoJmZpbmFsaXplcnMpOworICAgIG1vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUoJmZpbmFsaXplcnMpOwogCiAgICAgLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIGNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQgYW5kIHByaW50CiAgICAgICogZGVidWdnaW5nIGluZm9ybWF0aW9uLgpAQCAtOTQzLDExICsxMDE3LDIwIEBACiAgICAgLyogQ2xlYXIgd2Vha3JlZnMgYW5kIGludm9rZSBjYWxsYmFja3MgYXMgbmVjZXNzYXJ5LiAqLwogICAgIG0gKz0gaGFuZGxlX3dlYWtyZWZzKCZ1bnJlYWNoYWJsZSwgb2xkKTsKIAotICAgIC8qIENhbGwgdHBfY2xlYXIgb24gb2JqZWN0cyBpbiB0aGUgdW5yZWFjaGFibGUgc2V0LiAgVGhpcyB3aWxsIGNhdXNlCi0gICAgICogdGhlIHJlZmVyZW5jZSBjeWNsZXMgdG8gYmUgYnJva2VuLiAgSXQgbWF5IGFsc28gY2F1c2Ugc29tZSBvYmplY3RzCi0gICAgICogaW4gZmluYWxpemVycyB0byBiZSBmcmVlZC4KLSAgICAgKi8KLSAgICBkZWxldGVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisgICAgLyogQ2FsbCB0cF9maW5hbGl6ZSBvbiBvYmplY3RzIHdoaWNoIGhhdmUgb25lLiAqLworICAgIGZpbmFsaXplX2dhcmJhZ2UoJnVucmVhY2hhYmxlKTsKKworICAgIGlmIChjaGVja19nYXJiYWdlKCZ1bnJlYWNoYWJsZSkpIHsKKyAgICAgICAgcmV2aXZlX2dhcmJhZ2UoJnVucmVhY2hhYmxlKTsKKyAgICAgICAgZ2NfbGlzdF9tZXJnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBDYWxsIHRwX2NsZWFyIG9uIG9iamVjdHMgaW4gdGhlIHVucmVhY2hhYmxlIHNldC4gIFRoaXMgd2lsbCBjYXVzZQorICAgICAgICAgKiB0aGUgcmVmZXJlbmNlIGN5Y2xlcyB0byBiZSBicm9rZW4uICBJdCBtYXkgYWxzbyBjYXVzZSBzb21lIG9iamVjdHMKKyAgICAgICAgICogaW4gZmluYWxpemVycyB0byBiZSBmcmVlZC4KKyAgICAgICAgICovCisgICAgICAgIGRlbGV0ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsKKyAgICB9CiAKICAgICAvKiBDb2xsZWN0IHN0YXRpc3RpY3Mgb24gdW5jb2xsZWN0YWJsZSBvYmplY3RzIGZvdW5kIGFuZCBwcmludAogICAgICAqIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gKi8KQEAgLTk3OCw3ICsxMDYxLDcgQEAKICAgICAgKiByZWFjaGFibGUgbGlzdCBvZiBnYXJiYWdlLiAgVGhlIHByb2dyYW1tZXIgaGFzIHRvIGRlYWwgd2l0aAogICAgICAqIHRoaXMgaWYgdGhleSBpbnNpc3Qgb24gY3JlYXRpbmcgdGhpcyB0eXBlIG9mIHN0cnVjdHVyZS4KICAgICAgKi8KLSAgICAodm9pZCloYW5kbGVfZmluYWxpemVycygmZmluYWxpemVycywgb2xkKTsKKyAgICAodm9pZCloYW5kbGVfbGVnYWN5X2ZpbmFsaXplcnMoJmZpbmFsaXplcnMsIG9sZCk7CiAKICAgICAvKiBDbGVhciBmcmVlIGxpc3Qgb25seSBkdXJpbmcgdGhlIGNvbGxlY3Rpb24gb2YgdGhlIGhpZ2hlc3QKICAgICAgKiBnZW5lcmF0aW9uICovCkBAIC05ODcsMTYgKzEwNzAsMjUgQEAKICAgICB9CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBpZiAoZ2Nfc3RyID09IE5VTEwpCi0gICAgICAgICAgICBnY19zdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiZ2FyYmFnZSBjb2xsZWN0aW9uIik7Ci0gICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShnY19zdHIpOwotICAgICAgICBQeV9GYXRhbEVycm9yKCJ1bmV4cGVjdGVkIGV4Y2VwdGlvbiBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIik7CisgICAgICAgIGlmIChub2ZhaWwpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZ2Nfc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ2Nfc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGdjX3N0cik7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJ1bmV4cGVjdGVkIGV4Y2VwdGlvbiBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIik7CisgICAgICAgIH0KICAgICB9CiAKKyAgICAvKiBVcGRhdGUgc3RhdHMgKi8KICAgICBpZiAobl9jb2xsZWN0ZWQpCiAgICAgICAgICpuX2NvbGxlY3RlZCA9IG07CiAgICAgaWYgKG5fdW5jb2xsZWN0YWJsZSkKICAgICAgICAgKm5fdW5jb2xsZWN0YWJsZSA9IG47CisgICAgc3RhdHMtPmNvbGxlY3Rpb25zKys7CisgICAgc3RhdHMtPmNvbGxlY3RlZCArPSBtOworICAgIHN0YXRzLT51bmNvbGxlY3RhYmxlICs9IG47CiAgICAgcmV0dXJuIG4rbTsKIH0KIApAQCAtMTA0NSw3ICsxMTM3LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlc3VsdCwgY29sbGVjdGVkLCB1bmNvbGxlY3RhYmxlOwogICAgIGludm9rZV9nY19jYWxsYmFjaygic3RhcnQiLCBnZW5lcmF0aW9uLCAwLCAwKTsKLSAgICByZXN1bHQgPSBjb2xsZWN0KGdlbmVyYXRpb24sICZjb2xsZWN0ZWQsICZ1bmNvbGxlY3RhYmxlKTsKKyAgICByZXN1bHQgPSBjb2xsZWN0KGdlbmVyYXRpb24sICZjb2xsZWN0ZWQsICZ1bmNvbGxlY3RhYmxlLCAwKTsKICAgICBpbnZva2VfZ2NfY2FsbGJhY2soInN0b3AiLCBnZW5lcmF0aW9uLCBjb2xsZWN0ZWQsIHVuY29sbGVjdGFibGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMzQzLDYgKzE0MzUsNTIgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitQeURvY19TVFJWQVIoZ2NfZ2V0X3N0YXRzX19kb2NfXywKKyJnZXRfc3RhdHMoKSAtPiBbLi4uXVxuIgorIlxuIgorIlJldHVybiBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgcGVyLWdlbmVyYXRpb24gc3RhdGlzdGljcy5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorZ2NfZ2V0X3N0YXRzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQoreworICAgIGludCBpOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgc3RydWN0IGdjX2dlbmVyYXRpb25fc3RhdHMgc3RhdHNbTlVNX0dFTkVSQVRJT05TXSwgKnN0OworCisgICAgLyogVG8gZ2V0IGNvbnNpc3RlbnQgdmFsdWVzIGRlc3BpdGUgYWxsb2NhdGlvbnMgd2hpbGUgY29uc3RydWN0aW5nCisgICAgICAgdGhlIHJlc3VsdCBsaXN0LCB3ZSB1c2UgYSBzbmFwc2hvdCBvZiB0aGUgcnVubmluZyBzdGF0cy4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0dFTkVSQVRJT05TOyBpKyspIHsKKyAgICAgICAgc3RhdHNbaV0gPSBnZW5lcmF0aW9uX3N0YXRzW2ldOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fR0VORVJBVElPTlM7IGkrKykgeworICAgICAgICBQeU9iamVjdCAqZGljdDsKKyAgICAgICAgc3QgPSAmc3RhdHNbaV07CisgICAgICAgIGRpY3QgPSBQeV9CdWlsZFZhbHVlKCJ7c25zbnNufSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xsZWN0aW9ucyIsIHN0LT5jb2xsZWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbGxlY3RlZCIsIHN0LT5jb2xsZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmNvbGxlY3RhYmxlIiwgc3QtPnVuY29sbGVjdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocmVzdWx0LCBkaWN0KSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCiBQeURvY19TVFJWQVIoZ2NfaXNfdHJhY2tlZF9fZG9jX18sCiAiaXNfdHJhY2tlZChvYmopIC0+IGJvb2xcbiIKICJcbiIKQEAgLTEzNzIsNiArMTUxMCw3IEBACiAiaXNlbmFibGVkKCkgLS0gUmV0dXJucyB0cnVlIGlmIGF1dG9tYXRpYyBjb2xsZWN0aW9uIGlzIGVuYWJsZWQuXG4iCiAiY29sbGVjdCgpIC0tIERvIGEgZnVsbCBjb2xsZWN0aW9uIHJpZ2h0IG5vdy5cbiIKICJnZXRfY291bnQoKSAtLSBSZXR1cm4gdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBjb3VudHMuXG4iCisiZ2V0X3N0YXRzKCkgLS0gUmV0dXJuIGxpc3Qgb2YgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgcGVyLWdlbmVyYXRpb24gc3RhdHMuXG4iCiAic2V0X2RlYnVnKCkgLS0gU2V0IGRlYnVnZ2luZyBmbGFncy5cbiIKICJnZXRfZGVidWcoKSAtLSBHZXQgZGVidWdnaW5nIGZsYWdzLlxuIgogInNldF90aHJlc2hvbGQoKSAtLSBTZXQgdGhlIGNvbGxlY3Rpb24gdGhyZXNob2xkcy5cbiIKQEAgLTEzOTMsNiArMTUzMiw3IEBACiAgICAgeyJjb2xsZWN0IiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZ2NfY29sbGVjdCwKICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgICAgICAgICAgIGdjX2NvbGxlY3RfX2RvY19ffSwKICAgICB7ImdldF9vYmplY3RzIiwgICAgZ2NfZ2V0X29iamVjdHMsTUVUSF9OT0FSR1MsICBnY19nZXRfb2JqZWN0c19fZG9jX199LAorICAgIHsiZ2V0X3N0YXRzIiwgICAgICBnY19nZXRfc3RhdHMsIE1FVEhfTk9BUkdTLCBnY19nZXRfc3RhdHNfX2RvY19ffSwKICAgICB7ImlzX3RyYWNrZWQiLCAgICAgZ2NfaXNfdHJhY2tlZCwgTUVUSF9PLCAgICAgICBnY19pc190cmFja2VkX19kb2NfX30sCiAgICAgeyJnZXRfcmVmZXJyZXJzIiwgIGdjX2dldF9yZWZlcnJlcnMsIE1FVEhfVkFSQVJHUywKICAgICAgICAgZ2NfZ2V0X3JlZmVycmVyc19fZG9jX199LApAQCAtMTQ4MCw4ICsxNjIwLDI5IEBACiAgICAgcmV0dXJuIG47CiB9CiAKK1B5X3NzaXplX3QKK19QeUdDX0NvbGxlY3ROb0ZhaWwodm9pZCkKK3sKKyAgICBQeV9zc2l6ZV90IG47CisKKyAgICAvKiBJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uIGludGVycHJldGVyIHNodXRkb3duLAorICAgICAgIGFuZCB0aGVyZWZvcmUgbm90IHJlY3Vyc2l2ZWx5LiAgVW5mb3J0dW5hdGVseSwgd2hlbiB0aGVyZSBhcmUgZGFlbW9uCisgICAgICAgdGhyZWFkcywgYSBkYWVtb24gdGhyZWFkIGNhbiBzdGFydCBhIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24gKGFuZCB0aGVuIG5ldmVyIGZpbmlzaCBpdCkuCisgICAgICAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4NzEzI21zZzE5NTE3OCBmb3IgYW4gZXhhbXBsZS4KKyAgICAgICAqLworICAgIGlmIChjb2xsZWN0aW5nKQorICAgICAgICBuID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgY29sbGVjdGluZyA9IDE7CisgICAgICAgIG4gPSBjb2xsZWN0KE5VTV9HRU5FUkFUSU9OUyAtIDEsIE5VTEwsIE5VTEwsIDEpOworICAgICAgICBjb2xsZWN0aW5nID0gMDsKKyAgICB9CisgICAgcmV0dXJuIG47Cit9CisKIHZvaWQKLV9QeUdDX0Zpbmkodm9pZCkKK19QeUdDX0R1bXBTaHV0ZG93blN0YXRzKHZvaWQpCiB7CiAgICAgaWYgKCEoZGVidWcgJiBERUJVR19TQVZFQUxMKQogICAgICAgICAmJiBnYXJiYWdlICE9IE5VTEwgJiYgUHlMaXN0X0dFVF9TSVpFKGdhcmJhZ2UpID4gMCkgewpAQCAtMTQ5Miw4ICsxNjUzLDEyIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1lc3NhZ2UgPSAiZ2M6ICV6ZCB1bmNvbGxlY3RhYmxlIG9iamVjdHMgYXQgIiBcCiAgICAgICAgICAgICAgICAgInNodXRkb3duOyB1c2UgZ2Muc2V0X2RlYnVnKGdjLkRFQlVHX1VOQ09MTEVDVEFCTEUpIHRvIGxpc3QgdGhlbSI7Ci0gICAgICAgIGlmIChQeUVycl9XYXJuRm9ybWF0KFB5RXhjX1Jlc291cmNlV2FybmluZywgMCwgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9TSVpFKGdhcmJhZ2UpKSA8IDApCisgICAgICAgIC8qIFB5RXJyX1dhcm5Gb3JtYXQgZG9lcyB0b28gbWFueSB0aGluZ3MgYW5kIHdlIGFyZSBhdCBzaHV0ZG93biwKKyAgICAgICAgICAgdGhlIHdhcm5pbmdzIG1vZHVsZSdzIGRlcGVuZGVuY2llcyAoZS5nLiBsaW5lY2FjaGUpIG1heSBiZSBnb25lCisgICAgICAgICAgIGFscmVhZHkuICovCisgICAgICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXRGb3JtYXQoUHlFeGNfUmVzb3VyY2VXYXJuaW5nLCAiZ2MiLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnYyIsIE5VTEwsIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9TSVpFKGdhcmJhZ2UpKSkKICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKICAgICAgICAgaWYgKGRlYnVnICYgREVCVUdfVU5DT0xMRUNUQUJMRSkgewogICAgICAgICAgICAgUHlPYmplY3QgKnJlcHIgPSBOVUxMLCAqYnl0ZXMgPSBOVUxMOwpAQCAtMTUwMiw3ICsxNjY3LDcgQEAKICAgICAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2FyYmFnZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigKLSAgICAgICAgICAgICAgICAgICAgIiAgICAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICVzXG4iLAogICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhieXRlcykKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIH0KQEAgLTE1MTAsNyArMTY3NSwxMyBAQAogICAgICAgICAgICAgUHlfWERFQ1JFRihieXRlcyk7CiAgICAgICAgIH0KICAgICB9Cit9CisKK3ZvaWQKK19QeUdDX0Zpbmkodm9pZCkKK3sKICAgICBQeV9DTEVBUihjYWxsYmFja3MpOworICAgIFB5X0NMRUFSKHRtb2QpOwogfQogCiAvKiBmb3IgZGVidWdnaW5nICovCkBAIC0xNTU1LDcgKzE3MjYsOCBAQAogICAgICAgICBzaXplb2YoUHlHQ19IZWFkKSArIGJhc2ljc2l6ZSk7CiAgICAgaWYgKGcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgZy0+Z2MuZ2NfcmVmcyA9IEdDX1VOVFJBQ0tFRDsKKyAgICBnLT5nYy5nY19yZWZzID0gMDsKKyAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZywgR0NfVU5UUkFDS0VEKTsKICAgICBnZW5lcmF0aW9uc1swXS5jb3VudCsrOyAvKiBudW1iZXIgb2YgYWxsb2NhdGVkIEdDIG9iamVjdHMgKi8KICAgICBpZiAoZ2VuZXJhdGlvbnNbMF0uY291bnQgPiBnZW5lcmF0aW9uc1swXS50aHJlc2hvbGQgJiYKICAgICAgICAgZW5hYmxlZCAmJgpAQCAtMTU4Miw4ICsxNzU0LDE1IEBACiBQeVZhck9iamVjdCAqCiBfUHlPYmplY3RfR0NfTmV3VmFyKFB5VHlwZU9iamVjdCAqdHAsIFB5X3NzaXplX3Qgbml0ZW1zKQogewotICAgIGNvbnN0IHNpemVfdCBzaXplID0gX1B5T2JqZWN0X1ZBUl9TSVpFKHRwLCBuaXRlbXMpOwotICAgIFB5VmFyT2JqZWN0ICpvcCA9IChQeVZhck9iamVjdCAqKSBfUHlPYmplY3RfR0NfTWFsbG9jKHNpemUpOworICAgIHNpemVfdCBzaXplOworICAgIFB5VmFyT2JqZWN0ICpvcDsKKworICAgIGlmIChuaXRlbXMgPCAwKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2l6ZSA9IF9QeU9iamVjdF9WQVJfU0laRSh0cCwgbml0ZW1zKTsKKyAgICBvcCA9IChQeVZhck9iamVjdCAqKSBfUHlPYmplY3RfR0NfTWFsbG9jKHNpemUpOwogICAgIGlmIChvcCAhPSBOVUxMKQogICAgICAgICBvcCA9IFB5T2JqZWN0X0lOSVRfVkFSKG9wLCB0cCwgbml0ZW1zKTsKICAgICByZXR1cm4gb3A7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2dldHBhdGguYyBiL01vZHVsZXMvZ2V0cGF0aC5jCmluZGV4IGZmMTRmZGQuLmMwNTc3MzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2V0cGF0aC5jCisrKyBiL01vZHVsZXMvZ2V0cGF0aC5jCkBAIC0xMTAsMTEgKzExMCw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBQUkVGSVgKLSMgIGlmZGVmIF9fVk1TCi0jICAgIGRlZmluZSBQUkVGSVggIiIKLSMgIGVsc2UKLSMgICAgZGVmaW5lIFBSRUZJWCAiL3Vzci9sb2NhbCIKLSMgIGVuZGlmCisjICBkZWZpbmUgUFJFRklYICIvdXNyL2xvY2FsIgogI2VuZGlmCiAKICNpZm5kZWYgRVhFQ19QUkVGSVgKQEAgLTEzNCw4ICsxMzAsNiBAQAogc3RhdGljIHdjaGFyX3QgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKIHN0YXRpYyB3Y2hhcl90IHByb2dwYXRoW01BWFBBVEhMRU4rMV07CiBzdGF0aWMgd2NoYXJfdCAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLXN0YXRpYyBpbnQgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMDsKLXN0YXRpYyB3Y2hhcl90ICpsaWJfcHl0aG9uID0gTCJsaWIvcHl0aG9uIiBWRVJTSU9OOwogCiBzdGF0aWMgdm9pZAogcmVkdWNlKHdjaGFyX3QgKmRpcikKQEAgLTMxNyw3ICszMTEsOCBAQAogICAgYnl0ZXMgbG9uZy4KICovCiBzdGF0aWMgaW50Ci1zZWFyY2hfZm9yX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfcHJlZml4KQorc2VhcmNoX2Zvcl9wcmVmaXgod2NoYXJfdCAqYXJndjBfcGF0aCwgd2NoYXJfdCAqaG9tZSwgd2NoYXJfdCAqX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKmxpYl9weXRob24pCiB7CiAgICAgc2l6ZV90IG47CiAgICAgd2NoYXJfdCAqdnBhdGg7CkBAIC0zNDYsNyArMzQxLDcgQEAKICAgICAgICAgICAgIHdjc25jcHkocHJlZml4LCBhcmd2MF9wYXRoLCBNQVhQQVRITEVOKTsKICAgICAgICAgICAgIHByZWZpeFtNQVhQQVRITEVOXSA9IEwnXDAnOwogICAgICAgICAgICAgam9pbnBhdGgocHJlZml4LCB2cGF0aCk7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHZwYXRoKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUodnBhdGgpOwogICAgICAgICAgICAgam9pbnBhdGgocHJlZml4LCBMIkxpYiIpOwogICAgICAgICAgICAgam9pbnBhdGgocHJlZml4LCBMQU5ETUFSSyk7CiAgICAgICAgICAgICBpZiAoaXNtb2R1bGUocHJlZml4KSkKQEAgLTM4Myw3ICszNzgsOCBAQAogICAgTUFYUEFUSExFTiBieXRlcyBsb25nLgogKi8KIHN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfZXhlY19wcmVmaXgod2NoYXJfdCAqYXJndjBfcGF0aCwgd2NoYXJfdCAqaG9tZSwgd2NoYXJfdCAqX2V4ZWNfcHJlZml4KQorc2VhcmNoX2Zvcl9leGVjX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLAorICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpfZXhlY19wcmVmaXgsIHdjaGFyX3QgKmxpYl9weXRob24pCiB7CiAgICAgc2l6ZV90IG47CiAKQEAgLTQ5MywxMiArNDg5LDE0IEBACiAgICAgY2hhciBleGVjcGF0aFtNQVhQQVRITEVOKzFdOwogI2VuZGlmCiAgICAgd2NoYXJfdCAqX3B5dGhvbnBhdGgsICpfcHJlZml4LCAqX2V4ZWNfcHJlZml4OworICAgIHdjaGFyX3QgKmxpYl9weXRob247CiAKICAgICBfcHl0aG9ucGF0aCA9IF9QeV9jaGFyMndjaGFyKFBZVEhPTlBBVEgsIE5VTEwpOwogICAgIF9wcmVmaXggPSBfUHlfY2hhcjJ3Y2hhcihQUkVGSVgsIE5VTEwpOwogICAgIF9leGVjX3ByZWZpeCA9IF9QeV9jaGFyMndjaGFyKEVYRUNfUFJFRklYLCBOVUxMKTsKKyAgICBsaWJfcHl0aG9uID0gX1B5X2NoYXIyd2NoYXIoImxpYi9weXRob24iIFZFUlNJT04sIE5VTEwpOwogCi0gICAgaWYgKCFfcHl0aG9ucGF0aCB8fCAhX3ByZWZpeCB8fCAhX2V4ZWNfcHJlZml4KSB7CisgICAgaWYgKCFfcHl0aG9ucGF0aCB8fCAhX3ByZWZpeCB8fCAhX2V4ZWNfcHJlZml4IHx8ICFsaWJfcHl0aG9uKSB7CiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAiVW5hYmxlIHRvIGRlY29kZSBwYXRoIHZhcmlhYmxlcyBpbiBnZXRwYXRoLmM6ICIKICAgICAgICAgICAgICJtZW1vcnkgZXJyb3IiKTsKQEAgLTU2Miw4ICs1NjAsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHByb2dwYXRoWzBdID0gJ1wwJzsKLSAgICBpZiAocGF0aF9idWZmZXIgIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRnJlZShwYXRoX2J1ZmZlcik7CisgICAgUHlNZW1fUmF3RnJlZShwYXRoX2J1ZmZlcik7CiAgICAgaWYgKHByb2dwYXRoWzBdICE9IFNFUCAmJiBwcm9ncGF0aFswXSAhPSAnXDAnKQogICAgICAgICBhYnNvbHV0aXplKHByb2dwYXRoKTsKICAgICB3Y3NuY3B5KGFyZ3YwX3BhdGgsIHByb2dwYXRoLCBNQVhQQVRITEVOKTsKQEAgLTYwNSw3ICs2MDIsNyBAQAogICAgICAgICAgICAgLyogVXNlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeSBhcyB0aGUgcHJvZ3BhdGggKi8KICAgICAgICAgICAgIHdjc25jcHkoYXJndjBfcGF0aCwgd2J1ZiwgTUFYUEFUSExFTik7CiAgICAgICAgIH0KLSAgICAgICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNjY3LDcgKzY2NCw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIShwZm91bmQgPSBzZWFyY2hfZm9yX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLCBfcHJlZml4KSkpIHsKKyAgICBwZm91bmQgPSBzZWFyY2hfZm9yX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLCBfcHJlZml4LCBsaWJfcHl0aG9uKTsKKyAgICBpZiAoIXBmb3VuZCkgewogICAgICAgICBpZiAoIVB5X0Zyb3plbkZsYWcpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbGlicmFyaWVzIDxwcmVmaXg+XG4iKTsKQEAgLTY5MCw3ICs2ODgsOSBAQAogICAgIHppcF9wYXRoW2J1ZnN6IC0gNl0gPSBWRVJTSU9OWzBdOwogICAgIHppcF9wYXRoW2J1ZnN6IC0gNV0gPSBWRVJTSU9OWzJdOwogCi0gICAgaWYgKCEoZWZvdW5kID0gc2VhcmNoX2Zvcl9leGVjX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLCBfZXhlY19wcmVmaXgpKSkgeworICAgIGVmb3VuZCA9IHNlYXJjaF9mb3JfZXhlY19wcmVmaXgoYXJndjBfcGF0aCwgaG9tZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9leGVjX3ByZWZpeCwgbGliX3B5dGhvbik7CisgICAgaWYgKCFlZm91bmQpIHsKICAgICAgICAgaWYgKCFQeV9Gcm96ZW5GbGFnKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHBsYXRmb3JtIGRlcGVuZGVudCBsaWJyYXJpZXMgPGV4ZWNfcHJlZml4PlxuIik7CkBAIC03MDcsMTMgKzcwNywxMSBAQAogICAgICAqLwogICAgIGJ1ZnN6ID0gMDsKIAotICAgIGlmIChfcnRweXBhdGgpIHsKKyAgICBpZiAoX3J0cHlwYXRoICYmIF9ydHB5cGF0aFswXSAhPSAnXDAnKSB7CiAgICAgICAgIHNpemVfdCBydHB5cGF0aF9sZW47CiAgICAgICAgIHJ0cHlwYXRoID0gX1B5X2NoYXIyd2NoYXIoX3J0cHlwYXRoLCAmcnRweXBhdGhfbGVuKTsKICAgICAgICAgaWYgKHJ0cHlwYXRoICE9IE5VTEwpCiAgICAgICAgICAgICBidWZzeiArPSBydHB5cGF0aF9sZW4gKyAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfcnRweXBhdGggPSBOVUxMOwogICAgIH0KIAogICAgIGRlZnBhdGggPSBfcHl0aG9ucGF0aDsKQEAgLTczNyw2MCArNzM1LDU1IEBACiAgICAgYnVmc3ogKz0gd2NzbGVuKHppcF9wYXRoKSArIDE7CiAgICAgYnVmc3ogKz0gd2NzbGVuKGV4ZWNfcHJlZml4KSArIDE7CiAKLSAgICBidWYgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhidWZzeipzaXplb2Yod2NoYXJfdCkpOwotCisgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoYnVmc3ogKiBzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZHluYW1pYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZGVmYXVsdCBzdGF0aWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBMIiIgUFlUSE9OUEFUSDsKKyAgICAgICAgUHlfRmF0YWxFcnJvcigKKyAgICAgICAgICAgICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZHluYW1pYyBQWVRIT05QQVRIIik7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBSdW4tdGltZSB2YWx1ZSBvZiAkUFlUSE9OUEFUSCBnb2VzIGZpcnN0ICovCi0gICAgICAgIGlmIChydHB5cGF0aCkgewotICAgICAgICAgICAgd2NzY3B5KGJ1ZiwgcnRweXBhdGgpOwotICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVsaW1pdGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWZbMF0gPSAnXDAnOwogCi0gICAgICAgIC8qIE5leHQgaXMgdGhlIGRlZmF1bHQgemlwIHBhdGggKi8KLSAgICAgICAgd2NzY2F0KGJ1ZiwgemlwX3BhdGgpOworICAgIC8qIFJ1bi10aW1lIHZhbHVlIG9mICRQWVRIT05QQVRIIGdvZXMgZmlyc3QgKi8KKyAgICBpZiAocnRweXBhdGgpIHsKKyAgICAgICAgd2NzY3B5KGJ1ZiwgcnRweXBhdGgpOwogICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotCi0gICAgICAgIC8qIE5leHQgZ29lcyBtZXJnZSBvZiBjb21waWxlLXRpbWUgJFBZVEhPTlBBVEggd2l0aAotICAgICAgICAgKiBkeW5hbWljYWxseSBsb2NhdGVkIHByZWZpeC4KLSAgICAgICAgICovCi0gICAgICAgIGRlZnBhdGggPSBfcHl0aG9ucGF0aDsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIHdjaGFyX3QgKmRlbGltID0gd2NzY2hyKGRlZnBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlZnBhdGhbMF0gIT0gU0VQKSB7Ci0gICAgICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgcHJlZml4KTsKLSAgICAgICAgICAgICAgICB3Y3NjYXQoYnVmLCBzZXBhcmF0b3IpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gZGVsaW0gLSBkZWZwYXRoICsgMTsKLSAgICAgICAgICAgICAgICBzaXplX3QgZW5kID0gd2NzbGVuKGJ1ZikgKyBsZW47Ci0gICAgICAgICAgICAgICAgd2NzbmNhdChidWYsIGRlZnBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihidWYgKyBlbmQpID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHdjc2NhdChidWYsIGRlZnBhdGgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmcGF0aCA9IGRlbGltICsgMTsKLSAgICAgICAgfQotICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotCi0gICAgICAgIC8qIEZpbmFsbHksIG9uIGdvZXMgdGhlIGRpcmVjdG9yeSBmb3IgZHluYW1pYy1sb2FkIG1vZHVsZXMgKi8KLSAgICAgICAgd2NzY2F0KGJ1ZiwgZXhlY19wcmVmaXgpOwotCi0gICAgICAgIC8qIEFuZCBwdWJsaXNoIHRoZSByZXN1bHRzICovCi0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZjsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMTsKICAgICB9CisgICAgZWxzZQorICAgICAgICBidWZbMF0gPSAnXDAnOworCisgICAgLyogTmV4dCBpcyB0aGUgZGVmYXVsdCB6aXAgcGF0aCAqLworICAgIHdjc2NhdChidWYsIHppcF9wYXRoKTsKKyAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOworCisgICAgLyogTmV4dCBnb2VzIG1lcmdlIG9mIGNvbXBpbGUtdGltZSAkUFlUSE9OUEFUSCB3aXRoCisgICAgICogZHluYW1pY2FsbHkgbG9jYXRlZCBwcmVmaXguCisgICAgICovCisgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHdjaGFyX3QgKmRlbGltID0gd2NzY2hyKGRlZnBhdGgsIERFTElNKTsKKworICAgICAgICBpZiAoZGVmcGF0aFswXSAhPSBTRVApIHsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIHByZWZpeCk7CisgICAgICAgICAgICB3Y3NjYXQoYnVmLCBzZXBhcmF0b3IpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlbGltKSB7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gZGVsaW0gLSBkZWZwYXRoICsgMTsKKyAgICAgICAgICAgIHNpemVfdCBlbmQgPSB3Y3NsZW4oYnVmKSArIGxlbjsKKyAgICAgICAgICAgIHdjc25jYXQoYnVmLCBkZWZwYXRoLCBsZW4pOworICAgICAgICAgICAgKihidWYgKyBlbmQpID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIGRlZnBhdGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmcGF0aCA9IGRlbGltICsgMTsKKyAgICB9CisgICAgd2NzY2F0KGJ1ZiwgZGVsaW1pdGVyKTsKKworICAgIC8qIEZpbmFsbHksIG9uIGdvZXMgdGhlIGRpcmVjdG9yeSBmb3IgZHluYW1pYy1sb2FkIG1vZHVsZXMgKi8KKyAgICB3Y3NjYXQoYnVmLCBleGVjX3ByZWZpeCk7CisKKyAgICAvKiBBbmQgcHVibGlzaCB0aGUgcmVzdWx0cyAqLworICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZjsKIAogICAgIC8qIFJlZHVjZSBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IHRvIHRoZWlyIGVzc2VuY2UsCiAgICAgICogZS5nLiAvdXNyL2xvY2FsL2xpYi9weXRob24xLjUgaXMgcmVkdWNlZCB0byAvdXNyL2xvY2FsLgpAQCAtODE4LDExICs4MTEsMTEgQEAKICAgICBlbHNlCiAgICAgICAgIHdjc25jcHkoZXhlY19wcmVmaXgsIF9leGVjX3ByZWZpeCwgTUFYUEFUSExFTik7CiAKLSAgICBQeU1lbV9GcmVlKF9weXRob25wYXRoKTsKLSAgICBQeU1lbV9GcmVlKF9wcmVmaXgpOwotICAgIFB5TWVtX0ZyZWUoX2V4ZWNfcHJlZml4KTsKLSAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRnJlZShydHB5cGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZShfcHl0aG9ucGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZShfcHJlZml4KTsKKyAgICBQeU1lbV9SYXdGcmVlKF9leGVjX3ByZWZpeCk7CisgICAgUHlNZW1fUmF3RnJlZShsaWJfcHl0aG9uKTsKKyAgICBQeU1lbV9SYXdGcmVlKHJ0cHlwYXRoKTsKIH0KIAogCkBAIC04MzEsMTggKzgyNCwxNSBAQAogUHlfU2V0UGF0aChjb25zdCB3Y2hhcl90ICpwYXRoKQogewogICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGggIT0gTlVMTCkgewotICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkKQotICAgICAgICAgICAgUHlNZW1fRnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDA7CiAgICAgfQogICAgIGlmIChwYXRoICE9IE5VTEwpIHsKICAgICAgICAgZXh0ZXJuIHdjaGFyX3QgKlB5X0dldFByb2dyYW1OYW1lKHZvaWQpOwogICAgICAgICB3Y2hhcl90ICpwcm9nID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKICAgICAgICAgd2NzbmNweShwcm9ncGF0aCwgcHJvZywgTUFYUEFUSExFTik7CiAgICAgICAgIGV4ZWNfcHJlZml4WzBdID0gcHJlZml4WzBdID0gTCdcMCc7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAxOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKQogICAgICAgICAgICAgd2NzY3B5KG1vZHVsZV9zZWFyY2hfcGF0aCwgcGF0aCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9ncnBtb2R1bGUuYyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKaW5kZXggMDQyY2YwNS4uYzhhOTM3MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9ncnBtb2R1bGUuYworKysgYi9Nb2R1bGVzL2dycG1vZHVsZS5jCkBAIC01OCwxNyArNTgsMTIgQEAKIAogI2RlZmluZSBTRVQoaSx2YWwpIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgaSwgdmFsKQogICAgIFNFVChzZXRJbmRleCsrLCBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHAtPmdyX25hbWUpKTsKLSNpZmRlZiBfX1ZNUwotICAgIFNFVChzZXRJbmRleCsrLCBQeV9Ob25lKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0jZWxzZQogICAgIGlmIChwLT5ncl9wYXNzd2QpCiAgICAgICAgICAgICBTRVQoc2V0SW5kZXgrKywgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChwLT5ncl9wYXNzd2QpKTsKICAgICBlbHNlIHsKICAgICAgICAgICAgIFNFVChzZXRJbmRleCsrLCBQeV9Ob25lKTsKICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICB9Ci0jZW5kaWYKICAgICBTRVQoc2V0SW5kZXgrKywgX1B5TG9uZ19Gcm9tR2lkKHAtPmdyX2dpZCkpOwogICAgIFNFVChzZXRJbmRleCsrLCB3KTsKICN1bmRlZiBTRVQKQEAgLTIxMCw5ICsyMDUsMTQgQEAKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0R3JwVHlwZSwgJnN0cnVjdF9ncm91cF90eXBlX2Rlc2MpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJzdHJ1Y3RfZ3JvdXAiLCAoUHlPYmplY3QgKikgJlN0cnVjdEdycFR5cGUpOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RHcnBUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ncm91cF90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInN0cnVjdF9ncm91cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZTdHJ1Y3RHcnBUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGluaXRpYWxpemVkID0gMTsKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvaGFzaGxpYi5oIGIvTW9kdWxlcy9oYXNobGliLmgKaW5kZXggNDU5OTE0Ni4uNTFjNjhmNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9oYXNobGliLmgKKysrIGIvTW9kdWxlcy9oYXNobGliLmgKQEAgLTI2LDMgKzI2LDM2IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgICAgICB9IFwKICAgICB9IHdoaWxlKDApOworCisvKgorICogSGVscGVyIGNvZGUgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvIHRoZSBoYXNoIG9iamVjdCB3aGVuIHRoZSBHSUwgaXMKKyAqIHJlbGVhc2VkIGFyb3VuZCBhIENQVSBjb25zdW1pbmcgaGFzaGxpYiBvcGVyYXRpb24uIEFsbCBjb2RlIHBhdGhzIHRoYXQKKyAqIGFjY2VzcyBhIG11dGFibGUgcGFydCBvZiBvYmogbXVzdCBiZSBlbmNsb3NlZCBpbiBhIEVOVEVSX0hBU0hMSUIgLworICogTEVBVkVfSEFTSExJQiBibG9jayBvciBleHBsaWNpdGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIGxvY2sgaW5zaWRlCisgKiBhIFBZX0JFR0lOIC8gRU5EX0FMTE9XX1RIUkVBRFMgYmxvY2sgaWYgdGhleSB3aXNoIHRvIHJlbGVhc2UgdGhlIEdJTCBmb3IKKyAqIGFuIG9wZXJhdGlvbi4KKyAqLworCisjaWZkZWYgV0lUSF9USFJFQUQKKyNpbmNsdWRlICJweXRocmVhZC5oIgorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKKyAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKKyAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCisgICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCisgICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAorICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9CisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAorICAgICAgICB9CisjZWxzZQorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKKyNlbmRpZgorCisvKiBUT0RPKGdwcyk6IFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgYSBtb2R1bGUgb3IgRVZQb2JqZWN0IGF0dHJpYnV0ZQorICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gb3B0aW1pemUgYmFzZWQgb24gdGhlIHBsYXRmb3JtIHRoZXkncmUgdXNpbmcuICovCisjZGVmaW5lIEhBU0hMSUJfR0lMX01JTlNJWkUgMjA0OAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2h0YWJsZS5jIGIvTW9kdWxlcy9oYXNodGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNmMzEzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9oYXNodGFibGUuYwpAQCAtMCwwICsxLDUxOSBAQAorLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoYXNoIHRhYmxlIChfUHlfaGFzaHRhYmxlX3QpIGlzIGJhc2VkIG9uIHRoZSBjZnVoYXNoCisgICBwcm9qZWN0OgorICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJjZnUvCisKKyAgIENvcHlyaWdodCBvZiBjZnVoYXNoOgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRpb24gZGF0ZTogMjAwNS0wNi0yNCAyMToyMjo0MAorICAgQXV0aG9yczogRG9uCisgICBDaGFuZ2UgbG9nOgorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUgRG9uIE93ZW5zCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgICBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJoYXNodGFibGUuaCIKKworI2RlZmluZSBIQVNIVEFCTEVfTUlOX1NJWkUgMTYKKyNkZWZpbmUgSEFTSFRBQkxFX0hJR0ggMC41MAorI2RlZmluZSBIQVNIVEFCTEVfTE9XIDAuMTAKKyNkZWZpbmUgSEFTSFRBQkxFX1JFSEFTSF9GQUNUT1IgMi4wIC8gKEhBU0hUQUJMRV9MT1cgKyBIQVNIVEFCTEVfSElHSCkKKworI2RlZmluZSBCVUNLRVRTX0hFQUQoU0xJU1QpIFwKKyAgICAgICAgKChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKilfUHlfU0xJU1RfSEVBRCgmKFNMSVNUKSkpCisjZGVmaW5lIFRBQkxFX0hFQUQoSFQsIEJVQ0tFVCkgXAorICAgICAgICAoKF9QeV9oYXNodGFibGVfZW50cnlfdCAqKV9QeV9TTElTVF9IRUFEKCYoSFQpLT5idWNrZXRzW0JVQ0tFVF0pKQorI2RlZmluZSBFTlRSWV9ORVhUKEVOVFJZKSBcCisgICAgICAgICgoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopX1B5X1NMSVNUX0lURU1fTkVYVChFTlRSWSkpCisjZGVmaW5lIEhBU0hUQUJMRV9JVEVNX1NJWkUoSFQpIFwKKyAgICAgICAgKHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QpICsgKEhUKS0+ZGF0YV9zaXplKQorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCBoYXNodGFibGVfcmVoYXNoKF9QeV9oYXNodGFibGVfdCAqaHQpOworCitzdGF0aWMgdm9pZAorX1B5X3NsaXN0X2luaXQoX1B5X3NsaXN0X3QgKmxpc3QpCit7CisgICAgbGlzdC0+aGVhZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlfc2xpc3RfcHJlcGVuZChfUHlfc2xpc3RfdCAqbGlzdCwgX1B5X3NsaXN0X2l0ZW1fdCAqaXRlbSkKK3sKKyAgICBpdGVtLT5uZXh0ID0gbGlzdC0+aGVhZDsKKyAgICBsaXN0LT5oZWFkID0gaXRlbTsKK30KKworc3RhdGljIHZvaWQKK19QeV9zbGlzdF9yZW1vdmUoX1B5X3NsaXN0X3QgKmxpc3QsIF9QeV9zbGlzdF9pdGVtX3QgKnByZXZpb3VzLAorICAgICAgICAgICAgICAgICBfUHlfc2xpc3RfaXRlbV90ICppdGVtKQoreworICAgIGlmIChwcmV2aW91cyAhPSBOVUxMKQorICAgICAgICBwcmV2aW91cy0+bmV4dCA9IGl0ZW0tPm5leHQ7CisgICAgZWxzZQorICAgICAgICBsaXN0LT5oZWFkID0gaXRlbS0+bmV4dDsKK30KKworUHlfdWhhc2hfdAorX1B5X2hhc2h0YWJsZV9oYXNoX2ludChjb25zdCB2b2lkICprZXkpCit7CisgICAgcmV0dXJuIChQeV91aGFzaF90KWtleTsKK30KKworUHlfdWhhc2hfdAorX1B5X2hhc2h0YWJsZV9oYXNoX3B0cihjb25zdCB2b2lkICprZXkpCit7CisgICAgcmV0dXJuIChQeV91aGFzaF90KV9QeV9IYXNoUG9pbnRlcigodm9pZCAqKWtleSk7Cit9CisKK2ludAorX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpCit7CisgICAgcmV0dXJuIGVudHJ5LT5rZXkgPT0ga2V5OworfQorCisvKiBtYWtlcyBzdXJlIHRoZSByZWFsIHNpemUgb2YgdGhlIGJ1Y2tldHMgYXJyYXkgaXMgYSBwb3dlciBvZiAyICovCitzdGF0aWMgc2l6ZV90Cityb3VuZF9zaXplKHNpemVfdCBzKQoreworICAgIHNpemVfdCBpOworICAgIGlmIChzIDwgSEFTSFRBQkxFX01JTl9TSVpFKQorICAgICAgICByZXR1cm4gSEFTSFRBQkxFX01JTl9TSVpFOworICAgIGkgPSAxOworICAgIHdoaWxlIChpIDwgcykKKyAgICAgICAgaSA8PD0gMTsKKyAgICByZXR1cm4gaTsKK30KKworX1B5X2hhc2h0YWJsZV90ICoKK19QeV9oYXNodGFibGVfbmV3X2Z1bGwoc2l6ZV90IGRhdGFfc2l6ZSwgc2l6ZV90IGluaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMgY29weV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jIGdldF9kYXRhX3NpemVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCAqYWxsb2NhdG9yKQoreworICAgIF9QeV9oYXNodGFibGVfdCAqaHQ7CisgICAgc2l6ZV90IGJ1Y2tldHNfc2l6ZTsKKyAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGFsbG9jOworCisgICAgaWYgKGFsbG9jYXRvciA9PSBOVUxMKSB7CisgICAgICAgIGFsbG9jLm1hbGxvYyA9IFB5TWVtX1Jhd01hbGxvYzsKKyAgICAgICAgYWxsb2MuZnJlZSA9IFB5TWVtX1Jhd0ZyZWU7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgYWxsb2MgPSAqYWxsb2NhdG9yOworCisgICAgaHQgPSAoX1B5X2hhc2h0YWJsZV90ICopYWxsb2MubWFsbG9jKHNpemVvZihfUHlfaGFzaHRhYmxlX3QpKTsKKyAgICBpZiAoaHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGh0OworCisgICAgaHQtPm51bV9idWNrZXRzID0gcm91bmRfc2l6ZShpbml0X3NpemUpOworICAgIGh0LT5lbnRyaWVzID0gMDsKKyAgICBodC0+ZGF0YV9zaXplID0gZGF0YV9zaXplOworCisgICAgYnVja2V0c19zaXplID0gaHQtPm51bV9idWNrZXRzICogc2l6ZW9mKGh0LT5idWNrZXRzWzBdKTsKKyAgICBodC0+YnVja2V0cyA9IGFsbG9jLm1hbGxvYyhidWNrZXRzX3NpemUpOworICAgIGlmIChodC0+YnVja2V0cyA9PSBOVUxMKSB7CisgICAgICAgIGFsbG9jLmZyZWUoaHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtc2V0KGh0LT5idWNrZXRzLCAwLCBidWNrZXRzX3NpemUpOworCisgICAgaHQtPmhhc2hfZnVuYyA9IGhhc2hfZnVuYzsKKyAgICBodC0+Y29tcGFyZV9mdW5jID0gY29tcGFyZV9mdW5jOworICAgIGh0LT5jb3B5X2RhdGFfZnVuYyA9IGNvcHlfZGF0YV9mdW5jOworICAgIGh0LT5mcmVlX2RhdGFfZnVuYyA9IGZyZWVfZGF0YV9mdW5jOworICAgIGh0LT5nZXRfZGF0YV9zaXplX2Z1bmMgPSBnZXRfZGF0YV9zaXplX2Z1bmM7CisgICAgaHQtPmFsbG9jID0gYWxsb2M7CisgICAgcmV0dXJuIGh0OworfQorCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9uZXcoc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYykKK3sKKyAgICByZXR1cm4gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChkYXRhX3NpemUsIEhBU0hUQUJMRV9NSU5fU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Z1bmMsIGNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc2l6ZV90CitfUHlfaGFzaHRhYmxlX3NpemUoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgaHY7CisKKyAgICBzaXplID0gc2l6ZW9mKF9QeV9oYXNodGFibGVfdCk7CisKKyAgICAvKiBidWNrZXRzICovCisgICAgc2l6ZSArPSBodC0+bnVtX2J1Y2tldHMgKiBzaXplb2YoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopOworCisgICAgLyogZW50cmllcyAqLworICAgIHNpemUgKz0gaHQtPmVudHJpZXMgKiBIQVNIVEFCTEVfSVRFTV9TSVpFKGh0KTsKKworICAgIC8qIGRhdGEgbGlua2VkIGZyb20gZW50cmllcyAqLworICAgIGlmIChodC0+Z2V0X2RhdGFfc2l6ZV9mdW5jKSB7CisgICAgICAgIGZvciAoaHYgPSAwOyBodiA8IGh0LT5udW1fYnVja2V0czsgaHYrKykgeworICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgICAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGh2KTsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgICAgICB2b2lkICpkYXRhOworCisgICAgICAgICAgICAgICAgZGF0YSA9IF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgICAgICAgICAgICAgIHNpemUgKz0gaHQtPmdldF9kYXRhX3NpemVfZnVuYyhkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KKworI2lmZGVmIFB5X0RFQlVHCit2b2lkCitfUHlfaGFzaHRhYmxlX3ByaW50X3N0YXRzKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGNoYWluX2xlbiwgbWF4X2NoYWluX2xlbiwgdG90YWxfY2hhaW5fbGVuLCBuY2hhaW5zOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgc2l6ZV90IGh2OworICAgIGRvdWJsZSBsb2FkOworCisgICAgc2l6ZSA9IF9QeV9oYXNodGFibGVfc2l6ZShodCk7CisKKyAgICBsb2FkID0gKGRvdWJsZSlodC0+ZW50cmllcyAvIGh0LT5udW1fYnVja2V0czsKKworICAgIG1heF9jaGFpbl9sZW4gPSAwOworICAgIHRvdGFsX2NoYWluX2xlbiA9IDA7CisgICAgbmNoYWlucyA9IDA7CisgICAgZm9yIChodiA9IDA7IGh2IDwgaHQtPm51bV9idWNrZXRzOyBodisrKSB7CisgICAgICAgIGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOworICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICAgICAgY2hhaW5fbGVuID0gMDsKKyAgICAgICAgICAgIGZvciAoOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgICAgIGNoYWluX2xlbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoYWluX2xlbiA+IG1heF9jaGFpbl9sZW4pCisgICAgICAgICAgICAgICAgbWF4X2NoYWluX2xlbiA9IGNoYWluX2xlbjsKKyAgICAgICAgICAgIHRvdGFsX2NoYWluX2xlbiArPSBjaGFpbl9sZW47CisgICAgICAgICAgICBuY2hhaW5zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRmKCJoYXNoIHRhYmxlICVwOiBlbnRyaWVzPSUiCisgICAgICAgICAgIFBZX0ZPUk1BVF9TSVpFX1QgInUvJSIgUFlfRk9STUFUX1NJWkVfVCAidSAoJS4wZiUlKSwgIiwKKyAgICAgICAgICAgaHQsIGh0LT5lbnRyaWVzLCBodC0+bnVtX2J1Y2tldHMsIGxvYWQgKiAxMDAuMCk7CisgICAgaWYgKG5jaGFpbnMpCisgICAgICAgIHByaW50ZigiYXZnX2NoYWluX2xlbj0lLjFmLCAiLCAoZG91YmxlKXRvdGFsX2NoYWluX2xlbiAvIG5jaGFpbnMpOworICAgIHByaW50ZigibWF4X2NoYWluX2xlbj0lIiBQWV9GT1JNQVRfU0laRV9UICJ1LCAlIiBQWV9GT1JNQVRfU0laRV9UICJ1IGtCXG4iLAorICAgICAgICAgICBtYXhfY2hhaW5fbGVuLCBzaXplIC8gMTAyNCk7Cit9CisjZW5kaWYKKworLyogR2V0IGFuIGVudHJ5LiBSZXR1cm4gTlVMTCBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LiAqLworX1B5X2hhc2h0YWJsZV9lbnRyeV90ICoKK19QeV9oYXNodGFibGVfZ2V0X2VudHJ5KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBpbmRleCk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXlfaGFzaCA9PSBrZXlfaGFzaCAmJiBodC0+Y29tcGFyZV9mdW5jKGtleSwgZW50cnkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50CitfaGFzaHRhYmxlX3BvcF9lbnRyeShfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXksIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKyAgICBzaXplX3QgaW5kZXg7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgKnByZXZpb3VzOworCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIHByZXZpb3VzID0gTlVMTDsKKyAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaW5kZXgpOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgIGlmIChlbnRyeS0+a2V5X2hhc2ggPT0ga2V5X2hhc2ggJiYgaHQtPmNvbXBhcmVfZnVuYyhrZXksIGVudHJ5KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwcmV2aW91cyA9IGVudHJ5OworICAgIH0KKworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIF9QeV9zbGlzdF9yZW1vdmUoJmh0LT5idWNrZXRzW2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QgKilwcmV2aW91cywKKyAgICAgICAgICAgICAgICAgICAgIChfUHlfc2xpc3RfaXRlbV90ICopZW50cnkpOworICAgIGh0LT5lbnRyaWVzLS07CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShodCwgZGF0YSwgZGF0YV9zaXplLCBlbnRyeSk7CisgICAgaHQtPmFsbG9jLmZyZWUoZW50cnkpOworCisgICAgaWYgKChmbG9hdClodC0+ZW50cmllcyAvIChmbG9hdClodC0+bnVtX2J1Y2tldHMgPCBIQVNIVEFCTEVfTE9XKQorICAgICAgICBoYXNodGFibGVfcmVoYXNoKGh0KTsKKyAgICByZXR1cm4gMTsKK30KKworLyogQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBoYXNoLiBUaGUga2V5IG11c3Qgbm90IGJlIHByZXNlbnQgaW4gdGhlIGhhc2ggdGFibGUuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBtZW1vcnkgZXJyb3IuICovCitpbnQKK19QeV9oYXNodGFibGVfc2V0KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKyAgICBzaXplX3QgaW5kZXg7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGFzc2VydChkYXRhICE9IE5VTEwgfHwgZGF0YV9zaXplID09IDApOworI2lmbmRlZiBOREVCVUcKKyAgICAvKiBEb24ndCB3cml0ZSB0aGUgYXNzZXJ0aW9uIG9uIGEgc2luZ2xlIGxpbmUgYmVjYXVzZSBpdCBpcyBpbnRlcmVzdGluZworICAgICAgIHRvIGtub3cgdGhlIGR1cGxpY2F0ZWQgZW50cnkgaWYgdGhlIGFzc2VydGlvbiBmYWlsZWQuIFRoZSBlbnRyeSBjYW4KKyAgICAgICBiZSByZWFkIHVzaW5nIGEgZGVidWdnZXIuICovCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeShodCwga2V5KTsKKyAgICBhc3NlcnQoZW50cnkgPT0gTlVMTCk7CisjZW5kaWYKKworICAgIGtleV9oYXNoID0gaHQtPmhhc2hfZnVuYyhrZXkpOworICAgIGluZGV4ID0ga2V5X2hhc2ggJiAoaHQtPm51bV9idWNrZXRzIC0gMSk7CisKKyAgICBlbnRyeSA9IGh0LT5hbGxvYy5tYWxsb2MoSEFTSFRBQkxFX0lURU1fU0laRShodCkpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7CisgICAgICAgIC8qIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZW50cnktPmtleSA9ICh2b2lkICopa2V5OworICAgIGVudHJ5LT5rZXlfaGFzaCA9IGtleV9oYXNoOworCisgICAgYXNzZXJ0KGRhdGFfc2l6ZSA9PSBodC0+ZGF0YV9zaXplKTsKKyAgICBtZW1jcHkoX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKGVudHJ5KSwgZGF0YSwgZGF0YV9zaXplKTsKKworICAgIF9QeV9zbGlzdF9wcmVwZW5kKCZodC0+YnVja2V0c1tpbmRleF0sIChfUHlfc2xpc3RfaXRlbV90KillbnRyeSk7CisgICAgaHQtPmVudHJpZXMrKzsKKworICAgIGlmICgoZmxvYXQpaHQtPmVudHJpZXMgLyAoZmxvYXQpaHQtPm51bV9idWNrZXRzID4gSEFTSFRBQkxFX0hJR0gpCisgICAgICAgIGhhc2h0YWJsZV9yZWhhc2goaHQpOworICAgIHJldHVybiAwOworfQorCisvKiBHZXQgZGF0YSBmcm9tIGFuIGVudHJ5LiBDb3B5IGVudHJ5IGRhdGEgaW50byBkYXRhIGFuZCByZXR1cm4gMSBpZiB0aGUgZW50cnkKKyAgIGV4aXN0cywgcmV0dXJuIDAgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LiAqLworaW50CitfUHlfaGFzaHRhYmxlX2dldChfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXksIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGFzc2VydChkYXRhICE9IE5VTEwpOworCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeShodCwga2V5KTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgX1B5X0hBU0hUQUJMRV9FTlRSWV9SRUFEX0RBVEEoaHQsIGRhdGEsIGRhdGFfc2l6ZSwgZW50cnkpOworICAgIHJldHVybiAxOworfQorCitpbnQKK19QeV9oYXNodGFibGVfcG9wKF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBhc3NlcnQoZGF0YSAhPSBOVUxMKTsKKyAgICBhc3NlcnQoaHQtPmZyZWVfZGF0YV9mdW5jID09IE5VTEwpOworICAgIHJldHVybiBfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBkYXRhLCBkYXRhX3NpemUpOworfQorCisvKiBEZWxldGUgYW4gZW50cnkuIFRoZSBlbnRyeSBtdXN0IGV4aXN0LiAqLwordm9pZAorX1B5X2hhc2h0YWJsZV9kZWxldGUoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBpbnQgZm91bmQgPSBfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBOVUxMLCAwKTsKKyAgICBhc3NlcnQoZm91bmQpOworI2Vsc2UKKyAgICAodm9pZClfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBOVUxMLCAwKTsKKyNlbmRpZgorfQorCisvKiBQcm90b3R5cGUgZm9yIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3JlYWNoCisgICBrZXkvdmFsdWUgcGFpciBpbiB0aGUgaGFzaCBieSBoYXNodGFibGVfZm9yZWFjaCgpLiAgSXRlcmF0aW9uCisgICBzdG9wcyBpZiBhIG5vbi16ZXJvIHZhbHVlIGlzIHJldHVybmVkLiAqLworaW50CitfUHlfaGFzaHRhYmxlX2ZvcmVhY2goX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKSAoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpCit7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKyAgICBzaXplX3QgaHY7CisKKyAgICBmb3IgKGh2ID0gMDsgaHYgPCBodC0+bnVtX2J1Y2tldHM7IGh2KyspIHsKKyAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGh2KTsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgIGludCByZXMgPSBmdW5jKGVudHJ5LCBhcmcpOworICAgICAgICAgICAgaWYgKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraGFzaHRhYmxlX3JlaGFzaChfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBidWNrZXRzX3NpemUsIG5ld19zaXplLCBidWNrZXQ7CisgICAgX1B5X3NsaXN0X3QgKm9sZF9idWNrZXRzID0gTlVMTDsKKyAgICBzaXplX3Qgb2xkX251bV9idWNrZXRzOworCisgICAgbmV3X3NpemUgPSByb3VuZF9zaXplKChzaXplX3QpKGh0LT5lbnRyaWVzICogSEFTSFRBQkxFX1JFSEFTSF9GQUNUT1IpKTsKKyAgICBpZiAobmV3X3NpemUgPT0gaHQtPm51bV9idWNrZXRzKQorICAgICAgICByZXR1cm47CisKKyAgICBvbGRfbnVtX2J1Y2tldHMgPSBodC0+bnVtX2J1Y2tldHM7CisKKyAgICBidWNrZXRzX3NpemUgPSBuZXdfc2l6ZSAqIHNpemVvZihodC0+YnVja2V0c1swXSk7CisgICAgb2xkX2J1Y2tldHMgPSBodC0+YnVja2V0czsKKyAgICBodC0+YnVja2V0cyA9IGh0LT5hbGxvYy5tYWxsb2MoYnVja2V0c19zaXplKTsKKyAgICBpZiAoaHQtPmJ1Y2tldHMgPT0gTlVMTCkgeworICAgICAgICAvKiBjYW5jZWwgcmVoYXNoIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KKyAgICAgICAgaHQtPmJ1Y2tldHMgPSBvbGRfYnVja2V0cyA7CisgICAgICAgIC8qIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1lbXNldChodC0+YnVja2V0cywgMCwgYnVja2V0c19zaXplKTsKKworICAgIGh0LT5udW1fYnVja2V0cyA9IG5ld19zaXplOworCisgICAgZm9yIChidWNrZXQgPSAwOyBidWNrZXQgPCBvbGRfbnVtX2J1Y2tldHM7IGJ1Y2tldCsrKSB7CisgICAgICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksICpuZXh0OworICAgICAgICBmb3IgKGVudHJ5ID0gQlVDS0VUU19IRUFEKG9sZF9idWNrZXRzW2J1Y2tldF0pOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IG5leHQpIHsKKyAgICAgICAgICAgIHNpemVfdCBlbnRyeV9pbmRleDsKKworICAgICAgICAgICAgYXNzZXJ0KGh0LT5oYXNoX2Z1bmMoZW50cnktPmtleSkgPT0gZW50cnktPmtleV9oYXNoKTsKKyAgICAgICAgICAgIG5leHQgPSBFTlRSWV9ORVhUKGVudHJ5KTsKKyAgICAgICAgICAgIGVudHJ5X2luZGV4ID0gZW50cnktPmtleV9oYXNoICYgKG5ld19zaXplIC0gMSk7CisKKyAgICAgICAgICAgIF9QeV9zbGlzdF9wcmVwZW5kKCZodC0+YnVja2V0c1tlbnRyeV9pbmRleF0sIChfUHlfc2xpc3RfaXRlbV90KillbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBodC0+YWxsb2MuZnJlZShvbGRfYnVja2V0cyk7Cit9CisKK3ZvaWQKK19QeV9oYXNodGFibGVfY2xlYXIoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCAqbmV4dDsKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAoaT0wOyBpIDwgaHQtPm51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGkpOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBFTlRSWV9ORVhUKGVudHJ5KTsKKyAgICAgICAgICAgIGlmIChodC0+ZnJlZV9kYXRhX2Z1bmMpCisgICAgICAgICAgICAgICAgaHQtPmZyZWVfZGF0YV9mdW5jKF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpKTsKKyAgICAgICAgICAgIGh0LT5hbGxvYy5mcmVlKGVudHJ5KTsKKyAgICAgICAgfQorICAgICAgICBfUHlfc2xpc3RfaW5pdCgmaHQtPmJ1Y2tldHNbaV0pOworICAgIH0KKyAgICBodC0+ZW50cmllcyA9IDA7CisgICAgaGFzaHRhYmxlX3JlaGFzaChodCk7Cit9CisKK3ZvaWQKK19QeV9oYXNodGFibGVfZGVzdHJveShfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGh0LT5udW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIF9QeV9zbGlzdF9pdGVtX3QgKmVudHJ5ID0gaHQtPmJ1Y2tldHNbaV0uaGVhZDsKKyAgICAgICAgd2hpbGUgKGVudHJ5KSB7CisgICAgICAgICAgICBfUHlfc2xpc3RfaXRlbV90ICplbnRyeV9uZXh0ID0gZW50cnktPm5leHQ7CisgICAgICAgICAgICBpZiAoaHQtPmZyZWVfZGF0YV9mdW5jKQorICAgICAgICAgICAgICAgIGh0LT5mcmVlX2RhdGFfZnVuYyhfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KSk7CisgICAgICAgICAgICBodC0+YWxsb2MuZnJlZShlbnRyeSk7CisgICAgICAgICAgICBlbnRyeSA9IGVudHJ5X25leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBodC0+YWxsb2MuZnJlZShodC0+YnVja2V0cyk7CisgICAgaHQtPmFsbG9jLmZyZWUoaHQpOworfQorCisvKiBSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIHRhYmxlICovCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9jb3B5KF9QeV9oYXNodGFibGVfdCAqc3JjKQoreworICAgIF9QeV9oYXNodGFibGVfdCAqZHN0OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgc2l6ZV90IGJ1Y2tldDsKKyAgICBpbnQgZXJyOworICAgIHZvaWQgKmRhdGEsICpuZXdfZGF0YTsKKworICAgIGRzdCA9IF9QeV9oYXNodGFibGVfbmV3X2Z1bGwoc3JjLT5kYXRhX3NpemUsIHNyYy0+bnVtX2J1Y2tldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5oYXNoX2Z1bmMsIHNyYy0+Y29tcGFyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy0+Y29weV9kYXRhX2Z1bmMsIHNyYy0+ZnJlZV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5nZXRfZGF0YV9zaXplX2Z1bmMsICZzcmMtPmFsbG9jKTsKKyAgICBpZiAoZHN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChidWNrZXQ9MDsgYnVja2V0IDwgc3JjLT5udW1fYnVja2V0czsgYnVja2V0KyspIHsKKyAgICAgICAgZW50cnkgPSBUQUJMRV9IRUFEKHNyYywgYnVja2V0KTsKKyAgICAgICAgZm9yICg7IGVudHJ5OyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgICAgICBpZiAoc3JjLT5jb3B5X2RhdGFfZnVuYykgeworICAgICAgICAgICAgICAgIGRhdGEgPSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBuZXdfZGF0YSA9IHNyYy0+Y29weV9kYXRhX2Z1bmMoZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKG5ld19kYXRhICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGVyciA9IF9QeV9oYXNodGFibGVfc2V0KGRzdCwgZW50cnktPmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X2RhdGEsIHNyYy0+ZGF0YV9zaXplKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVyciA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBlcnIgPSBfUHlfaGFzaHRhYmxlX3NldChkc3QsIGVudHJ5LT5rZXksIGRhdGEsIHNyYy0+ZGF0YV9zaXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koZHN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZHN0OworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2h0YWJsZS5oIGIvTW9kdWxlcy9oYXNodGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY5OTkzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9oYXNodGFibGUuaApAQCAtMCwwICsxLDEyOCBAQAorI2lmbmRlZiBQeV9IQVNIVEFCTEVfSAorI2RlZmluZSBQeV9IQVNIVEFCTEVfSAorCisvKiBUaGUgd2hvbGUgQVBJIGlzIHByaXZhdGUgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKwordHlwZWRlZiBzdHJ1Y3QgX1B5X3NsaXN0X2l0ZW1fcyB7CisgICAgc3RydWN0IF9QeV9zbGlzdF9pdGVtX3MgKm5leHQ7Cit9IF9QeV9zbGlzdF9pdGVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBfUHlfc2xpc3RfaXRlbV90ICpoZWFkOworfSBfUHlfc2xpc3RfdDsKKworI2RlZmluZSBfUHlfU0xJU1RfSVRFTV9ORVhUKElURU0pICgoKF9QeV9zbGlzdF9pdGVtX3QgKilJVEVNKS0+bmV4dCkKKworI2RlZmluZSBfUHlfU0xJU1RfSEVBRChTTElTVCkgKCgoX1B5X3NsaXN0X3QgKilTTElTVCktPmhlYWQpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VkIGJ5IF9QeV9oYXNodGFibGVfdC5idWNrZXRzIHRvIGxpbmsgZW50cmllcyAqLworICAgIF9QeV9zbGlzdF9pdGVtX3QgX1B5X3NsaXN0X2l0ZW07CisKKyAgICBjb25zdCB2b2lkICprZXk7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKworICAgIC8qIGRhdGEgZm9sbG93cyAqLworfSBfUHlfaGFzaHRhYmxlX2VudHJ5X3Q7CisKKyNkZWZpbmUgX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSBcCisgICAgICAgICgoY2hhciAqKShFTlRSWSkgKyBzaXplb2YoX1B5X2hhc2h0YWJsZV9lbnRyeV90KSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKEVOVFJZKSBcCisgICAgICAgICgqKHZvaWQgKiopX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShUQUJMRSwgREFUQSwgREFUQV9TSVpFLCBFTlRSWSkgXAorICAgIGRvIHsgXAorICAgICAgICBhc3NlcnQoKERBVEFfU0laRSkgPT0gKFRBQkxFKS0+ZGF0YV9zaXplKTsgXAorICAgICAgICBtZW1jcHkoREFUQSwgX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSwgREFUQV9TSVpFKTsgXAorICAgIH0gd2hpbGUgKDApCisKK3R5cGVkZWYgUHlfdWhhc2hfdCAoKl9QeV9oYXNodGFibGVfaGFzaF9mdW5jKSAoY29uc3Qgdm9pZCAqa2V5KTsKK3R5cGVkZWYgaW50ICgqX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMpIChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqaGUpOwordHlwZWRlZiB2b2lkKiAoKl9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMpKHZvaWQgKmRhdGEpOwordHlwZWRlZiB2b2lkICgqX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYykodm9pZCAqZGF0YSk7Cit0eXBlZGVmIHNpemVfdCAoKl9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jKSh2b2lkICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCogKCptYWxsb2MpIChzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiByZWxlYXNlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpwdHIpOworfSBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgc2l6ZV90IG51bV9idWNrZXRzOworICAgIHNpemVfdCBlbnRyaWVzOyAvKiBUb3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFibGUuICovCisgICAgX1B5X3NsaXN0X3QgKmJ1Y2tldHM7CisgICAgc2l6ZV90IGRhdGFfc2l6ZTsKKworICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYyBjb3B5X2RhdGFfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2ZyZWVfZGF0YV9mdW5jIGZyZWVfZGF0YV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jIGdldF9kYXRhX3NpemVfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGFsbG9jOworfSBfUHlfaGFzaHRhYmxlX3Q7CisKKy8qIGhhc2ggYW5kIGNvbXBhcmUgZnVuY3Rpb25zIGZvciBpbnRlZ2VycyBhbmQgcG9pbnRlcnMgKi8KK1B5QVBJX0ZVTkMoUHlfdWhhc2hfdCkgX1B5X2hhc2h0YWJsZV9oYXNoX3B0cihjb25zdCB2b2lkICprZXkpOworUHlBUElfRlVOQyhQeV91aGFzaF90KSBfUHlfaGFzaHRhYmxlX2hhc2hfaW50KGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpOworCitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX25ldygKKyAgICBzaXplX3QgZGF0YV9zaXplLAorICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMpOworUHlBUElfRlVOQyhfUHlfaGFzaHRhYmxlX3QgKikgX1B5X2hhc2h0YWJsZV9uZXdfZnVsbCgKKyAgICBzaXplX3QgZGF0YV9zaXplLAorICAgIHNpemVfdCBpbml0X3NpemUsCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2NvcHlfZGF0YV9mdW5jIGNvcHlfZGF0YV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMgZ2V0X2RhdGFfc2l6ZV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgKmFsbG9jYXRvcik7CitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX2NvcHkoX1B5X2hhc2h0YWJsZV90ICpzcmMpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2NsZWFyKF9QeV9oYXNodGFibGVfdCAqaHQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koX1B5X2hhc2h0YWJsZV90ICpodCk7CisKK3R5cGVkZWYgaW50ICgqX1B5X2hhc2h0YWJsZV9mb3JlYWNoX2Z1bmMpIChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICphcmcpOworCitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9mb3JlYWNoKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgX1B5X2hhc2h0YWJsZV9mb3JlYWNoX2Z1bmMgZnVuYywgdm9pZCAqYXJnKTsKK1B5QVBJX0ZVTkMoc2l6ZV90KSBfUHlfaGFzaHRhYmxlX3NpemUoX1B5X2hhc2h0YWJsZV90ICpodCk7CisKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV9lbnRyeV90KikgX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXkpOworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfc2V0KAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5LAorICAgIHZvaWQgKmRhdGEsCisgICAgc2l6ZV90IGRhdGFfc2l6ZSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9nZXQoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXksCisgICAgdm9pZCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9zaXplKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX3BvcCgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSwKKyAgICB2b2lkICpkYXRhLAorICAgIHNpemVfdCBkYXRhX3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2RlbGV0ZSgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSk7CisKKyNkZWZpbmUgX1B5X0hBU0hUQUJMRV9TRVQoVEFCTEUsIEtFWSwgREFUQSkgXAorICAgIF9QeV9oYXNodGFibGVfc2V0KFRBQkxFLCBLRVksICYoREFUQSksIHNpemVvZihEQVRBKSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0dFVChUQUJMRSwgS0VZLCBEQVRBKSBcCisgICAgX1B5X2hhc2h0YWJsZV9nZXQoVEFCTEUsIEtFWSwgJihEQVRBKSwgc2l6ZW9mKERBVEEpKQorCisjZW5kaWYgICAvKiBQeV9MSU1JVEVEX0FQSSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCmluZGV4IDAxMjMxODEuLmFlNWIxNjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICppdDsKLSAgICBpbnQgbnVtcmVhZDsKKyAgICBpbnQgbnVtcmVhZDsgIC8qIDAgPD0gbnVtcmVhZCA8PSBMSU5LQ0VMTFMgKi8KICAgICBQeU9iamVjdCAqbmV4dGxpbms7CiAgICAgUHlPYmplY3QgKih2YWx1ZXNbTElOS0NFTExTXSk7CiB9IHRlZWRhdGFvYmplY3Q7CkBAIC00MDksNyArNDA5LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgdGVlZGF0YW9iamVjdCAqZGF0YW9iajsKLSAgICBpbnQgaW5kZXg7CisgICAgaW50IGluZGV4OyAgICAvKiAwIDw9IGluZGV4IDw9IExJTktDRUxMUyAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKIH0gdGVlb2JqZWN0OwogCkBAIC0xNDkyLDE5ICsxNDkyLDIyIEBACiAgICAgUHlfc3NpemVfdCBvbGRuZXh0OwogICAgIFB5T2JqZWN0ICooKml0ZXJuZXh0KShQeU9iamVjdCAqKTsKIAorICAgIGlmIChpdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGl0ZXJuZXh0ID0gKlB5X1RZUEUoaXQpLT50cF9pdGVybmV4dDsKICAgICB3aGlsZSAobHotPmNudCA8IGx6LT5uZXh0KSB7CiAgICAgICAgIGl0ZW0gPSBpdGVybmV4dChpdCk7CiAgICAgICAgIGlmIChpdGVtID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZW1wdHk7CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgbHotPmNudCsrOwogICAgIH0KICAgICBpZiAoc3RvcCAhPSAtMSAmJiBsei0+Y250ID49IHN0b3ApCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVtcHR5OwogICAgIGl0ZW0gPSBpdGVybmV4dChpdCk7CiAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZW1wdHk7CiAgICAgbHotPmNudCsrOwogICAgIG9sZG5leHQgPSBsei0+bmV4dDsKICAgICAvKiBUaGUgKHNpemVfdCkgY2FzdCBiZWxvdyBhdm9pZHMgdGhlIGRhbmdlciBvZiB1bmRlZmluZWQKQEAgLTE1MTMsNiArMTUxNiwxMCBAQAogICAgIGlmIChsei0+bmV4dCA8IG9sZG5leHQgfHwgKHN0b3AgIT0gLTEgJiYgbHotPm5leHQgPiBzdG9wKSkKICAgICAgICAgbHotPm5leHQgPSBzdG9wOwogICAgIHJldHVybiBpdGVtOworCitlbXB0eToKKyAgICBQeV9DTEVBUihsei0+aXQpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTUyMiw2ICsxNTI5LDE4IEBACiAgICAgICogdGhlbiAnc2V0c3RhdGUnIHdpdGggdGhlIG5leHQgYW5kIGNvdW50CiAgICAgICovCiAgICAgUHlPYmplY3QgKnN0b3A7CisgICAgaWYgKGx6LT5pdCA9PSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICplbXB0eV9saXN0OworICAgICAgICBQeU9iamVjdCAqZW1wdHlfaXQ7CisgICAgICAgIGVtcHR5X2xpc3QgPSBQeUxpc3RfTmV3KDApOworICAgICAgICBpZiAoZW1wdHlfbGlzdCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGVtcHR5X2l0ID0gUHlPYmplY3RfR2V0SXRlcihlbXB0eV9saXN0KTsKKyAgICAgICAgUHlfREVDUkVGKGVtcHR5X2xpc3QpOworICAgICAgICBpZiAoZW1wdHlfaXQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhObiluIiwgUHlfVFlQRShseiksIGVtcHR5X2l0LCAwLCAwKTsKKyAgICB9CiAgICAgaWYgKGx6LT5zdG9wID09IC0xKSB7CiAgICAgICAgIHN0b3AgPSBQeV9Ob25lOwogICAgICAgICBQeV9JTkNSRUYoc3RvcCk7CkBAIC0yMDU3LDYgKzIwNzYsMTggQEAKICAgICBQeV9UWVBFKGx6KS0+dHBfZnJlZShseik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitwcm9kdWN0X3NpemVvZihwcm9kdWN0b2JqZWN0ICpseiwgdm9pZCAqdW51c2VkKQoreworICAgIFB5X3NzaXplX3QgcmVzOworCisgICAgcmVzID0gc2l6ZW9mKHByb2R1Y3RvYmplY3QpOworICAgIHJlcyArPSBQeVR1cGxlX0dFVF9TSVpFKGx6LT5wb29scykgKiBzaXplb2YoUHlfc3NpemVfdCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorCitQeURvY19TVFJWQVIoc2l6ZW9mX2RvYywgIlJldHVybnMgc2l6ZSBpbiBtZW1vcnksIGluIGJ5dGVzLiIpOworCiBzdGF0aWMgaW50CiBwcm9kdWN0X3RyYXZlcnNlKHByb2R1Y3RvYmplY3QgKmx6LCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKQEAgLTIyMjYsNiArMjI1Nyw4IEBACiAgICAgIHJlZHVjZV9kb2N9LAogICAgIHsiX19zZXRzdGF0ZV9fIiwgICAgKFB5Q0Z1bmN0aW9uKXByb2R1Y3Rfc2V0c3RhdGUsICAgIE1FVEhfTywKICAgICAgc2V0c3RhdGVfZG9jfSwKKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilwcm9kdWN0X3NpemVvZiwgICAgICBNRVRIX05PQVJHUywKKyAgICAgc2l6ZW9mX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yMzY2LDYgKzIzOTksMTYgQEAKICAgICBQeV9UWVBFKGNvKS0+dHBfZnJlZShjbyk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitjb21iaW5hdGlvbnNfc2l6ZW9mKGNvbWJpbmF0aW9uc29iamVjdCAqY28sIHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeV9zc2l6ZV90IHJlczsKKworICAgIHJlcyA9IHNpemVvZihjb21iaW5hdGlvbnNvYmplY3QpOworICAgIHJlcyArPSBjby0+ciAqIHNpemVvZihQeV9zc2l6ZV90KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKIHN0YXRpYyBpbnQKIGNvbWJpbmF0aW9uc190cmF2ZXJzZShjb21iaW5hdGlvbnNvYmplY3QgKmNvLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKQEAgLTI1MzcsNiArMjU4MCw4IEBACiAgICAgIHJlZHVjZV9kb2N9LAogICAgIHsiX19zZXRzdGF0ZV9fIiwgICAgKFB5Q0Z1bmN0aW9uKWNvbWJpbmF0aW9uc19zZXRzdGF0ZSwgICAgTUVUSF9PLAogICAgICBzZXRzdGF0ZV9kb2N9LAorICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWNvbWJpbmF0aW9uc19zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCisgICAgIHNpemVvZl9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjY5NSw2ICsyNzQwLDE2IEBACiAgICAgUHlfVFlQRShjbyktPnRwX2ZyZWUoY28pOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorY3dyX3NpemVvZihjd3JvYmplY3QgKmNvLCB2b2lkICp1bnVzZWQpCit7CisgICAgUHlfc3NpemVfdCByZXM7CisKKyAgICByZXMgPSBzaXplb2YoY3dyb2JqZWN0KTsKKyAgICByZXMgKz0gY28tPnIgKiBzaXplb2YoUHlfc3NpemVfdCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorCiBzdGF0aWMgaW50CiBjd3JfdHJhdmVyc2UoY3dyb2JqZWN0ICpjbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CkBAIC0yODU0LDYgKzI5MDksOCBAQAogICAgICByZWR1Y2VfZG9jfSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbiljd3Jfc2V0c3RhdGUsICAgIE1FVEhfTywKICAgICAgc2V0c3RhdGVfZG9jfSwKKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbiljd3Jfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAorICAgICBzaXplb2ZfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTMwMzAsNiArMzA4NywxNyBAQAogICAgIFB5X1RZUEUocG8pLT50cF9mcmVlKHBvKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3Blcm11dGF0aW9uc19zaXplb2YocGVybXV0YXRpb25zb2JqZWN0ICpwbywgdm9pZCAqdW51c2VkKQoreworICAgIFB5X3NzaXplX3QgcmVzOworCisgICAgcmVzID0gc2l6ZW9mKHBlcm11dGF0aW9uc29iamVjdCk7CisgICAgcmVzICs9IFB5VHVwbGVfR0VUX1NJWkUocG8tPnBvb2wpICogc2l6ZW9mKFB5X3NzaXplX3QpOworICAgIHJlcyArPSBwby0+ciAqIHNpemVvZihQeV9zc2l6ZV90KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKIHN0YXRpYyBpbnQKIHBlcm11dGF0aW9uc190cmF2ZXJzZShwZXJtdXRhdGlvbnNvYmplY3QgKnBvLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKQEAgLTMyMzUsNiArMzMwMyw4IEBACiAgICAgIHJlZHVjZV9kb2N9LAogICAgIHsiX19zZXRzdGF0ZV9fIiwgICAgKFB5Q0Z1bmN0aW9uKXBlcm11dGF0aW9uc19zZXRzdGF0ZSwgICAgTUVUSF9PLAogICAgICBzZXRzdGF0ZV9kb2N9LAorICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKXBlcm11dGF0aW9uc19zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCisgICAgIHNpemVvZl9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNDAzOSwxNCArNDEwOSwxNyBAQAogewogICAgIHJlcGVhdG9iamVjdCAqcm87CiAgICAgUHlPYmplY3QgKmVsZW1lbnQ7Ci0gICAgUHlfc3NpemVfdCBjbnQgPSAtMTsKKyAgICBQeV9zc2l6ZV90IGNudCA9IC0xLCBuX2t3ZHMgPSAwOwogICAgIHN0YXRpYyBjaGFyICprd2FyZ3NbXSA9IHsib2JqZWN0IiwgInRpbWVzIiwgTlVMTH07CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xuOnJlcGVhdCIsIGt3YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZWxlbWVudCwgJmNudCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA9PSAyICYmIGNudCA8IDApCisgICAgaWYgKGt3ZHMgIT0gTlVMTCkKKyAgICAgICAgbl9rd2RzID0gUHlEaWN0X1NpemUoa3dkcyk7CisgICAgLyogRG9lcyB1c2VyIHN1cHBseSB0aW1lcyBhcmd1bWVudD8gKi8KKyAgICBpZiAoKFB5VHVwbGVfU2l6ZShhcmdzKSArIG5fa3dkcyA9PSAyKSAmJiBjbnQgPCAwKQogICAgICAgICBjbnQgPSAwOwogCiAgICAgcm8gPSAocmVwZWF0b2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21haW4uYyBiL01vZHVsZXMvbWFpbi5jCmluZGV4IDNjZmM5YzMuLjg3YTIxZDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWFpbi5jCisrKyBiL01vZHVsZXMvbWFpbi5jCkBAIC01LDExICs1LDYgQEAKIAogI2luY2x1ZGUgPGxvY2FsZS5oPgogCi0jaWZkZWYgX19WTVMKLSNlcnJvciAiUEVQIDExOiBWTVMgaXMgbm93IHVuc3VwcG9ydGVkLCBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy40IgotI2luY2x1ZGUgPHVuaXhsaWIuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2lmZGVmIEhBVkVfRkNOVExfSApAQCAtMjIsMTUgKzE3LDExIEBACiAjaW5jbHVkZSA8Y3J0ZGJnLmg+CiAjZW5kaWYKIAotI2lmIChkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAjZGVmaW5lIFBZVEhPTkhPTUVIRUxQICI8cHJlZml4PlxcbGliIgogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBQWVRIT05IT01FSEVMUCAiPHByZWZpeD4vTGliIgotI2Vsc2UKICNkZWZpbmUgUFlUSE9OSE9NRUhFTFAgIjxwcmVmaXg+L3B5dGhvblguWCIKICNlbmRpZgotI2VuZGlmCiAKICNpbmNsdWRlICJweWdldG9wdC5oIgogCkBAIC00Nyw3ICszOCw3IEBACiBzdGF0aWMgaW50ICBvcmlnX2FyZ2M7CiAKIC8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCi0jZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSm06T3FSc1N0dXZWVzp4WDo/IgorI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUlKbTpPcVJzU3R1dlZXOnhYOj8iCiAKICNkZWZpbmUgUFJPR1JBTV9PUFRTIEJBU0VfT1BUUwogCkBAIC02OSw2ICs2MCw3IEBACiBzdGF0aWMgY2hhciAqdXNhZ2VfMiA9ICJcCiAtaSAgICAgOiBpbnNwZWN0IGludGVyYWN0aXZlbHkgYWZ0ZXIgcnVubmluZyBzY3JpcHQ7IGZvcmNlcyBhIHByb21wdCBldmVuXG5cCiAgICAgICAgICBpZiBzdGRpbiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB0ZXJtaW5hbDsgYWxzbyBQWVRIT05JTlNQRUNUPXhcblwKKy1JICAgICA6IGlzb2xhdGUgUHl0aG9uIGZyb20gdGhlIHVzZXIncyBlbnZpcm9ubWVudCAoaW1wbGllcyAtRSBhbmQgLXMpXG5cCiAtbSBtb2QgOiBydW4gbGlicmFyeSBtb2R1bGUgYXMgYSBzY3JpcHQgKHRlcm1pbmF0ZXMgb3B0aW9uIGxpc3QpXG5cCiAtTyAgICAgOiBvcHRpbWl6ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgc2xpZ2h0bHk7IGFsc28gUFlUSE9OT1BUSU1JWkU9eFxuXAogLU9PICAgIDogcmVtb3ZlIGRvYy1zdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSAtTyBvcHRpbWl6YXRpb25zXG5cCkBAIC0xMjcsMjYgKzExOSwxNCBAQAogICAgICAgICBmcHJpbnRmKGYsIHVzYWdlXzUsIERFTElNLCBQWVRIT05IT01FSEVMUCk7CiAgICAgICAgIGZwdXRzKHVzYWdlXzYsIGYpOwogICAgIH0KLSNpZiBkZWZpbmVkKF9fVk1TKQotICAgIGlmIChleGl0Y29kZSA9PSAwKSB7Ci0gICAgICAgIC8qIHN1cHByZXNzICdlcnJvcicgbWVzc2FnZSAqLwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFNUUyRNX0lOSElCX01TRyArIFNTJF9BQk9SVCAqLwotICAgICAgICByZXR1cm4gMHgxMDAwMDAyYzsKLSAgICB9Ci0jZWxzZQogICAgIHJldHVybiBleGl0Y29kZTsKLSNlbmRpZgotICAgIC8qTk9UUkVBQ0hFRCovCiB9CiAKIHN0YXRpYyB2b2lkIFJ1blN0YXJ0dXBGaWxlKFB5Q29tcGlsZXJGbGFncyAqY2YpCiB7CiAgICAgY2hhciAqc3RhcnR1cCA9IFB5X0dFVEVOVigiUFlUSE9OU1RBUlRVUCIpOwogICAgIGlmIChzdGFydHVwICE9IE5VTEwgJiYgc3RhcnR1cFswXSAhPSAnXDAnKSB7Ci0gICAgICAgIEZJTEUgKmZwID0gZm9wZW4oc3RhcnR1cCwgInIiKTsKKyAgICAgICAgRklMRSAqZnAgPSBfUHlfZm9wZW4oc3RhcnR1cCwgInIiKTsKICAgICAgICAgaWYgKGZwICE9IE5VTEwpIHsKICAgICAgICAgICAgICh2b2lkKSBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncyhmcCwgc3RhcnR1cCwgMCwgY2YpOwogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTE2NSw2ICsxNDUsMzIgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIFJ1bkludGVyYWN0aXZlSG9vayh2b2lkKQoreworICAgIFB5T2JqZWN0ICpzeXMsICpob29rLCAqcmVzdWx0OworICAgIHN5cyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgic3lzIik7CisgICAgaWYgKHN5cyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGhvb2sgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHN5cywgIl9faW50ZXJhY3RpdmVob29rX18iKTsKKyAgICBQeV9ERUNSRUYoc3lzKTsKKyAgICBpZiAoaG9vayA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhvb2ssIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoaG9vayk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgICByZXR1cm47CisKK2Vycm9yOgorICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJGYWlsZWQgY2FsbGluZyBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX1xuIik7CisgICAgUHlFcnJfUHJpbnQoKTsKKyAgICBQeUVycl9DbGVhcigpOworfQorCiAKIHN0YXRpYyBpbnQgUnVuTW9kdWxlKHdjaGFyX3QgKm1vZG5hbWUsIGludCBzZXRfYXJndjApCiB7CkBAIC0xNzIsMTcgKzE3OCwyMCBAQAogICAgIHJ1bnB5ID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJydW5weSIpOwogICAgIGlmIChydW5weSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGltcG9ydCBydW5weSBtb2R1bGVcbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHJ1bm1vZHVsZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcocnVucHksICJfcnVuX21vZHVsZV9hc19tYWluIik7CiAgICAgaWYgKHJ1bm1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGFjY2VzcyBydW5weS5fcnVuX21vZHVsZV9hc19tYWluXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKG1vZG5hbWUsIHdjc2xlbihtb2RuYW1lKSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGNvbnZlcnQgbW9kdWxlIG5hbWUgdG8gdW5pY29kZVxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5tb2R1bGUpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xOTEsNiArMjAwLDcgQEAKICAgICBpZiAocnVuYXJncyA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgYXJndW1lbnRzIGZvciBydW5weS5fcnVuX21vZHVsZV9hc19tYWluXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgUHlfREVDUkVGKHJ1bm1vZHVsZSk7CiAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOwpAQCAtMjM1LDggKzI0NSwxMCBAQAogICAgIC8qIGFyZ3YwIGlzIHVzYWJsZSBhcyBhbiBpbXBvcnQgc291cmNlLCBzbyBwdXQgaXQgaW4gc3lzLnBhdGhbMF0KICAgICAgICBhbmQgaW1wb3J0IF9fbWFpbl9fICovCiAgICAgc3lzX3BhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKLSAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkKKyAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMucGF0aCIpOwogICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBpZiAoUHlMaXN0X1NldEl0ZW0oc3lzX3BhdGgsIDAsIGFyZ3YwKSkgewogICAgICAgICBhcmd2MCA9IE5VTEw7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjYsNyArMzc4LDcgQEAKICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gaW50ZXJwcmV0LiAqLwogCiAgICAgICAgICAgICBsZW4gPSB3Y3NsZW4oX1B5T1Nfb3B0YXJnKSArIDEgKyAxOwotICAgICAgICAgICAgY29tbWFuZCA9ICh3Y2hhcl90ICopbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIGxlbik7CisgICAgICAgICAgICBjb21tYW5kID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogbGVuKTsKICAgICAgICAgICAgIGlmIChjb21tYW5kID09IE5VTEwpCiAgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSAtYyBhcmd1bWVudCIpOwpAQCAtMzk4LDYgKzQxMCwxMiBAQAogICAgICAgICAgICAgUHlfSW50ZXJhY3RpdmVGbGFnKys7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlICdJJzoKKyAgICAgICAgICAgIFB5X0lzb2xhdGVkRmxhZysrOworICAgICAgICAgICAgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSsrOworICAgICAgICAgICAgUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnKys7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAvKiBjYXNlICdKJzogcmVzZXJ2ZWQgZm9yIEp5dGhvbiAqLwogCiAgICAgICAgIGNhc2UgJ08nOgpAQCAtNDc1LDcgKzQ5Myw3IEBACiAgICAgICAgIHJldHVybiB1c2FnZSgwLCBhcmd2WzBdKTsKIAogICAgIGlmICh2ZXJzaW9uKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHl0aG9uICVzXG4iLCBQWV9WRVJTSU9OKTsKKyAgICAgICAgcHJpbnRmKCJQeXRob24gJXNcbiIsIFBZX1ZFUlNJT04pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTQ5NSw3ICs1MTMsNyBAQAogICAgICAgICAqd3AgIT0gTCdcMCcpIHsKICAgICAgICAgd2NoYXJfdCAqYnVmLCAqd2FybmluZzsKIAotICAgICAgICBidWYgPSAod2NoYXJfdCAqKW1hbGxvYygod2NzbGVuKHdwKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbih3cCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBQWVRIT05XQVJOSU5HUyIpOwpAQCAtNTA1LDcgKzUyMyw3IEBACiAgICAgICAgICAgICAgd2FybmluZyA9IHdjc3RvayhOVUxMLCBMIiwiKSkgewogICAgICAgICAgICAgUHlTeXNfQWRkV2Fybk9wdGlvbih3YXJuaW5nKTsKICAgICAgICAgfQotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYnVmKTsKICAgICB9CiAjZWxzZQogICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OV0FSTklOR1MiKSkgJiYgKnAgIT0gJ1wwJykgewpAQCAtNTE0LDEyICs1MzIsMTIgQEAKIAogICAgICAgICAvKiBzZXR0bGUgZm9yIHN0cnRvayBoZXJlIGFzIHRoZXJlJ3Mgbm8gb25lIHN0YW5kYXJkCiAgICAgICAgICAgIEM4OSB3Y3N0b2sgKi8KLSAgICAgICAgYnVmID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHApICsgMSk7CisgICAgICAgIGJ1ZiA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKHN0cmxlbihwKSArIDEpOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9OV0FSTklOR1MiKTsKICAgICAgICAgc3RyY3B5KGJ1ZiwgcCk7Ci0gICAgICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgICAgIG9sZGxvYyA9IF9QeU1lbV9SYXdTdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwogICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgICAgIGZvciAocCA9IHN0cnRvayhidWYsICIsIik7IHAgIT0gTlVMTDsgcCA9IHN0cnRvayhOVUxMLCAiLCIpKSB7CiAjaWZkZWYgX19BUFBMRV9fCkBAIC01MzcsMjIgKzU1NSwxNSBAQAogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICB9CiAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIG9sZGxvYyk7Ci0gICAgICAgIGZyZWUob2xkbG9jKTsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYnVmKTsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmIChjb21tYW5kID09IE5VTEwgJiYgbW9kdWxlID09IE5VTEwgJiYgX1B5T1Nfb3B0aW5kIDwgYXJnYyAmJgogICAgICAgICB3Y3NjbXAoYXJndltfUHlPU19vcHRpbmRdLCBMIi0iKSAhPSAwKQogICAgIHsKLSNpZmRlZiBfX1ZNUwotICAgICAgICBmaWxlbmFtZSA9IGRlY2MkdHJhbnNsYXRlX3Ztcyhhcmd2W19QeU9TX29wdGluZF0pOwotICAgICAgICBpZiAoZmlsZW5hbWUgPT0gKGNoYXIgKikwIHx8IGZpbGVuYW1lID09IChjaGFyICopLTEpCi0gICAgICAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbX1B5T1Nfb3B0aW5kXTsKLQotI2Vsc2UKICAgICAgICAgZmlsZW5hbWUgPSBhcmd2W19QeU9TX29wdGluZF07Ci0jZW5kaWYKICAgICB9CiAKICAgICBzdGRpbl9pc19pbnRlcmFjdGl2ZSA9IFB5X0ZkSXNJbnRlcmFjdGl2ZShzdGRpbiwgKGNoYXIgKikwKTsKQEAgLTU4OCwxMSArNTk5LDYgQEAKICNlbmRpZiAvKiAhTVNfV0lORE9XUyAqLwogICAgICAgICAvKiBMZWF2ZSBzdGRlcnIgYWxvbmUgLSBpdCBzaG91bGQgYmUgdW5idWZmZXJlZCBhbnl3YXkuICovCiAgICAgfQotI2lmZGVmIF9fVk1TCi0gICAgZWxzZSB7Ci0gICAgICAgIHNldHZidWYgKHN0ZG91dCwgKGNoYXIgKilOVUxMLCBfSU9MQkYsIEJVRlNJWik7Ci0gICAgfQotI2VuZGlmIC8qIF9fVk1TICovCiAKICNpZmRlZiBfX0FQUExFX18KICAgICAvKiBPbiBNYWNPUyBYLCB3aGVuIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgZW1iZWRkZWQgaW4gYW4KQEAgLTYwOCw3ICs2MTQsNyBAQAogICAgICAgICB3Y2hhcl90KiBidWZmZXI7CiAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocCkgKyAxOwogCi0gICAgICAgIGJ1ZmZlciA9IG1hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBidWZmZXIgPSBQeU1lbV9SYXdNYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9ORVhFQ1VUQUJMRSIpOwpAQCAtNjgyLDcgKzY4OCw3IEBACiAKICAgICBpZiAoY29tbWFuZCkgewogICAgICAgICBzdHMgPSBydW5fY29tbWFuZChjb21tYW5kLCAmY2YpOwotICAgICAgICBmcmVlKGNvbW1hbmQpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGNvbW1hbmQpOwogICAgIH0gZWxzZSBpZiAobW9kdWxlKSB7CiAgICAgICAgIHN0cyA9IChSdW5Nb2R1bGUobW9kdWxlLCAxKSAhPSAwKTsKICAgICB9CkBAIC02OTEsNiArNjk3LDcgQEAKICAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMDsgLyogZG8gZXhpdCBvbiBTeXN0ZW1FeGl0ICovCiAgICAgICAgICAgICBSdW5TdGFydHVwRmlsZSgmY2YpOworICAgICAgICAgICAgUnVuSW50ZXJhY3RpdmVIb29rKCk7CiAgICAgICAgIH0KICAgICAgICAgLyogWFhYICovCiAKQEAgLTc1Niw2ICs3NjMsNyBAQAogICAgIGlmIChQeV9JbnNwZWN0RmxhZyAmJiBzdGRpbl9pc19pbnRlcmFjdGl2ZSAmJgogICAgICAgICAoZmlsZW5hbWUgIT0gTlVMTCB8fCBjb21tYW5kICE9IE5VTEwgfHwgbW9kdWxlICE9IE5VTEwpKSB7CiAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMDsKKyAgICAgICAgUnVuSW50ZXJhY3RpdmVIb29rKCk7CiAgICAgICAgIC8qIFhYWCAqLwogICAgICAgICBzdHMgPSBQeVJ1bl9BbnlGaWxlRmxhZ3Moc3RkaW4sICI8c3RkaW4+IiwgJmNmKSAhPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvbWFrZXNldHVwIGIvTW9kdWxlcy9tYWtlc2V0dXAKaW5kZXggNDBkZmE5ZC4uOGI1Y2MyOCAxMDA3NTUKLS0tIGEvTW9kdWxlcy9tYWtlc2V0dXAKKysrIGIvTW9kdWxlcy9tYWtlc2V0dXAKQEAgLTIxNyw3ICsyMTcsNyBAQAogCQkJKikgc3JjPSckKHNyY2RpcikvJyIkc3JjZGlyLyRzcmMiOzsKIAkJCWVzYWMKIAkJCWNhc2UgJGRvY29uZmlnIGluCi0JCQlubykJY2M9IiRjYyBcJChDQ1NIQVJFRCkgXCQoQ0ZMQUdTKSBcJChDUFBGTEFHUykiOzsKKwkJCW5vKQljYz0iJGNjIFwkKENDU0hBUkVEKSBcJChQWV9DRkxBR1MpIFwkKFBZX0NQUEZMQUdTKSI7OwogCQkJKikKIAkJCQljYz0iJGNjIFwkKFBZX0NPUkVfQ0ZMQUdTKSI7OwogCQkJZXNhYwpAQCAtMjI5LDExICsyMjksNyBAQAogCQllc2FjCiAJCWZvciBtb2QgaW4gJG1vZHMKIAkJZG8KLQkJCWNhc2UgJG9ianMgaW4KLQkJCSokbW9kLm8qKQliYXNlPSRtb2Q7OwotCQkJKikJCWJhc2U9JHttb2R9bW9kdWxlOzsKLQkJCWVzYWMKLQkJCWZpbGU9IiRzcmNkaXIvJGJhc2VcJChTTykiCisJCQlmaWxlPSIkc3JjZGlyLyRtb2RcJChFWFRfU1VGRklYKSIKIAkJCWNhc2UgJGRvY29uZmlnIGluCiAJCQlubykJU0hBUkVETU9EUz0iJFNIQVJFRE1PRFMgJGZpbGUiOzsKIAkJCWVzYWMKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWQ1bW9kdWxlLmMgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCmluZGV4IDEyZTE4N2MuLjVjYjNkMzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWQ1bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tZDVtb2R1bGUuYwpAQCAtOTEsMTAgKzkxLDYgQEAKICAgICAgICAoeSlbM10gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICBcCiAgICAgICAgKHkpWzFdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQogCi0jaWZuZGVmIE1JTgotICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCi0jZW5kaWYKLQogCiAvKiBNRDUgbWFjcm9zICovCiAKQEAgLTI0NCw5ICsyNDAsOSBAQAogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBNRDVfQkxPQ0tTSVpFOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBNRDVfQkxPQ0tTSVpFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuID0gTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoTUQ1X0JMT0NLU0laRSAtIG1kNS0+Y3VybGVuKSk7CisgICAgICAgICAgIG4gPSBQeV9NSU4oaW5sZW4sIChQeV9zc2l6ZV90KShNRDVfQkxPQ0tTSVpFIC0gbWQ1LT5jdXJsZW4pKTsKICAgICAgICAgICAgbWVtY3B5KG1kNS0+YnVmICsgbWQ1LT5jdXJsZW4sIGluLCAoc2l6ZV90KW4pOwotICAgICAgICAgICBtZDUtPmN1cmxlbiAgICArPSBuOworICAgICAgICAgICBtZDUtPmN1cmxlbiAgICArPSAoTUQ1X0lOVDMyKW47CiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IG47CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IG47CiAgICAgICAgICAgIGlmIChtZDUtPmN1cmxlbiA9PSBNRDVfQkxPQ0tTSVpFKSB7CkBAIC00NDMsNyArNDM5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBNRDVfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiTUQ1IiwgMyk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgibWQ1IiwgMyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NzYsOCArNTcyLDE3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19tZDUodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJk1ENXR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJk1ENXR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX21kNW1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfbWQ1bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmTUQ1dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJNRDVUeXBlIiwgKFB5T2JqZWN0ICopJk1ENXR5cGUpOworICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwppbmRleCAxMTA3ZWI4Li4xMzcxNDI0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL21tYXBtb2R1bGUuYworKysgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlIDxQeXRob24uaD4KKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAogI2lmbmRlZiBNU19XSU5ET1dTCiAjZGVmaW5lIFVOSVgKQEAgLTEwOCw2ICsxMDksNyBAQAogICAgIGludCBmZDsKICNlbmRpZgogCisgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIGFjY2Vzc19tb2RlIGFjY2VzczsKIH0gbW1hcF9vYmplY3Q7CiAKQEAgLTEzNCw2ICsxMzYsOCBAQAogICAgIH0KICNlbmRpZiAvKiBVTklYICovCiAKKyAgICBpZiAobV9vYmotPndlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIG1fb2JqKTsKICAgICBQeV9UWVBFKG1fb2JqKS0+dHBfZnJlZSgoUHlPYmplY3QqKW1fb2JqKTsKIH0KIApAQCAtNzA1LDYgKzcwOSwxOSBAQAogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYsICZQeUlkX2Nsb3NlLCBOVUxMKTsKIH0KIAorI2lmZGVmIE1TX1dJTkRPV1MKK3N0YXRpYyBQeU9iamVjdCAqCittbWFwX19zaXplb2ZfX21ldGhvZChtbWFwX29iamVjdCAqc2VsZiwgdm9pZCAqdW51c2VkKQoreworICAgIFB5X3NzaXplX3QgcmVzOworCisgICAgcmVzID0gc2l6ZW9mKG1tYXBfb2JqZWN0KTsKKyAgICBpZiAoc2VsZi0+dGFnbmFtZSkKKyAgICAgICAgcmVzICs9IHN0cmxlbihzZWxmLT50YWduYW1lKSArIDE7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbW1hcF9vYmplY3RfbWV0aG9kc1tdID0gewogICAgIHsiY2xvc2UiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKSBtbWFwX2Nsb3NlX21ldGhvZCwgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7ImZpbmQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbikgbW1hcF9maW5kX21ldGhvZCwgICAgICAgICBNRVRIX1ZBUkFSR1N9LApAQCAtNzIyLDYgKzczOSw5IEBACiAgICAgeyJ3cml0ZV9ieXRlIiwgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfd3JpdGVfYnl0ZV9tZXRob2QsICAgTUVUSF9WQVJBUkdTfSwKICAgICB7Il9fZW50ZXJfXyIsICAgICAgIChQeUNGdW5jdGlvbikgbW1hcF9fZW50ZXJfX21ldGhvZCwgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJfX2V4aXRfXyIsICAgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfX2V4aXRfX21ldGhvZCwgICAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfX3NpemVvZl9fbWV0aG9kLCAgICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAge05VTEwsICAgICAgICAgTlVMTH0gICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTEwMzIsNyArMTA1Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIG9mZnNldG9mKG1tYXBfb2JqZWN0LCB3ZWFrcmVmbGlzdCksICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgbW1hcF9vYmplY3RfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCkBAIC0xMTU0LDEyICsxMTc0LDYgQEAKICAgICAgICAgKHZvaWQpZmNudGwoZmQsIEZfRlVMTEZTWU5DKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfRlNUQVQKLSMgIGlmZGVmIF9fVk1TCi0gICAgLyogb24gT3BlblZNUyB3ZSBtdXN0IGVuc3VyZSB0aGF0IGFsbCBieXRlcyBhcmUgd3JpdHRlbiB0byB0aGUgZmlsZSAqLwotICAgIGlmIChmZCAhPSAtMSkgewotICAgICAgICBmc3luYyhmZCk7Ci0gICAgfQotIyAgZW5kaWYKICAgICBpZiAoZmQgIT0gLTEgJiYgZnN0YXQoZmQsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKSB7CiAgICAgICAgIGlmIChtYXBfc2l6ZSA9PSAwKSB7CiAgICAgICAgICAgICBpZiAoc3Quc3Rfc2l6ZSA9PSAwKSB7CkBAIC0xMTkwLDYgKzEyMDQsNyBAQAogICAgIG1fb2JqLT5kYXRhID0gTlVMTDsKICAgICBtX29iai0+c2l6ZSA9IChzaXplX3QpIG1hcF9zaXplOwogICAgIG1fb2JqLT5wb3MgPSAoc2l6ZV90KSAwOworICAgIG1fb2JqLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgbV9vYmotPmV4cG9ydHMgPSAwOwogICAgIG1fb2JqLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYgKGZkID09IC0xKSB7CkBAIC0xMjAzLDE4ICsxMjE4LDE4IEBACiAgICAgICAgIGZsYWdzIHw9IE1BUF9BTk9OWU1PVVM7CiAjZWxzZQogICAgICAgICAvKiBTVlI0IG1ldGhvZCB0byBtYXAgYW5vbnltb3VzIG1lbW9yeSBpcyB0byBvcGVuIC9kZXYvemVybyAqLwotICAgICAgICBmZCA9IGRldnplcm8gPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworICAgICAgICBmZCA9IGRldnplcm8gPSBfUHlfb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKICAgICAgICAgaWYgKGRldnplcm8gPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtX29iaik7CiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9vYmotPmZkID0gZHVwKGZkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1fb2JqLT5mZCA9IF9QeV9kdXAoZmQpOwogICAgICAgICBpZiAobV9vYmotPmZkID09IC0xKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobV9vYmopOwotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzk0LDYgKzE0MDksNyBAQAogICAgIC8qIHNldCB0aGUgaW5pdGlhbCBwb3NpdGlvbiAqLwogICAgIG1fb2JqLT5wb3MgPSAoc2l6ZV90KSAwOwogCisgICAgbV9vYmotPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBtX29iai0+ZXhwb3J0cyA9IDA7CiAgICAgLyogc2V0IHRoZSB0YWcgbmFtZSAqLwogICAgIGlmICh0YWduYW1lICE9IE5VTEwgJiYgKnRhZ25hbWUgIT0gJ1wwJykgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9vc3NhdWRpb2Rldi5jIGIvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCmluZGV4IDgxN2UyMDQuLjJkMGRkMDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvb3NzYXVkaW9kZXYuYworKysgYi9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKQEAgLTExNSw3ICsxMTUsOSBAQAogICAgICAgIG9uZSBvcGVuIGF0IGEgdGltZS4gIFRoaXMgZG9lcyAqbm90KiBhZmZlY3QgbGF0ZXIgSS9POyBPU1MKICAgICAgICBwcm92aWRlcyBhIHNwZWNpYWwgaW9jdGwoKSBmb3Igbm9uLWJsb2NraW5nIHJlYWQvd3JpdGUsIHdoaWNoIGlzCiAgICAgICAgZXhwb3NlZCB2aWEgb3NzX25vbmJsb2NrKCkgYmVsb3cuICovCi0gICAgaWYgKChmZCA9IG9wZW4oZGV2aWNlbmFtZSwgaW1vZGV8T19OT05CTE9DSykpID09IC0xKSB7CisgICAgZmQgPSBfUHlfb3BlbihkZXZpY2VuYW1lLCBpbW9kZXxPX05PTkJMT0NLKTsKKworICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZGV2aWNlbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE3Nyw3ICsxNzksOCBAQAogICAgICAgICAgICAgZGV2aWNlbmFtZSA9ICIvZGV2L21peGVyIjsKICAgICB9CiAKLSAgICBpZiAoKGZkID0gb3BlbihkZXZpY2VuYW1lLCBPX1JEV1IpKSA9PSAtMSkgeworICAgIGZkID0gX1B5X29wZW4oZGV2aWNlbmFtZSwgT19SRFdSKTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGRldmljZW5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNDUsNyArMjQ4LDcgQEAKICAgICBpbnQgYXJnOwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10LCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI3MCw3ICsyNzMsNyBAQAogICAgIGludCBhcmcgPSAwOwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10LCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI5MCw3ICsyOTMsNyBAQAogICAgIGludCBydjsKIAogICAgIGFzc2VydChzdHJsZW4oZm5hbWUpIDw9IDMwKTsKLSAgICBzdHJjYXQoYXJnZm10LCBmbmFtZSk7CisgICAgc3RybmNhdChhcmdmbXQsIGZuYW1lLCAzMCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGFyZ2ZtdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC04OTEsNyArODk0LDcgQEAKICAgICAvKiBBbGlhc2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwogICAgIHsgImZsdXNoIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9zc19zeW5jLCBNRVRIX1ZBUkFSR1MgfSwKIAotICAgIC8qIFN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgKi8KKyAgICAvKiBTdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sICovCiAgICAgeyAiX19lbnRlcl9fIiwgICAgICBvc3Nfc2VsZiwgTUVUSF9OT0FSR1MgfSwKICAgICB7ICJfX2V4aXRfXyIsICAgICAgIG9zc19leGl0LCBNRVRIX1ZBUkFSR1MgfSwKIApAQCAtOTAzLDcgKzkwNiw3IEBACiAgICAgeyAiY2xvc2UiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pb3NzX21peGVyX2Nsb3NlLCBNRVRIX05PQVJHUyB9LAogICAgIHsgImZpbGVubyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9zc19taXhlcl9maWxlbm8sIE1FVEhfTk9BUkdTIH0sCiAKLSAgICAvKiBTdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sICovCisgICAgLyogU3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCAqLwogICAgIHsgIl9fZW50ZXJfXyIsICAgICAgb3NzX3NlbGYsIE1FVEhfTk9BUkdTIH0sCiAgICAgeyAiX19leGl0X18iLCAgICAgICBvc3NfZXhpdCwgTUVUSF9WQVJBUkdTIH0sCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvb3ZlcmxhcHBlZC5jIGIvTW9kdWxlcy9vdmVybGFwcGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0MmVmYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvb3ZlcmxhcHBlZC5jCkBAIC0wLDAgKzEsMTM4MCBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIG92ZXJsYXBwZWQgSU8KKyAqCisgKiBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSBNb2R1bGVzL193aW5hcGkuYyBvZiBDUHl0aG9uCisgKi8KKworLyogWFhYIGNoZWNrIG92ZXJmbG93IGFuZCBEV09SRCA8LT4gUHlfc3NpemVfdCBjb252ZXJzaW9ucworICAgQ2hlY2sgaXRlbXNpemUgKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorCisjZGVmaW5lIFdJTkRPV1NfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxtc3dzb2NrLmg+CisKKyNpZiBkZWZpbmVkKE1TX1dJTjMyKSAmJiAhZGVmaW5lZChNU19XSU42NCkKKyMgIGRlZmluZSBGX1BPSU5URVIgImsiCisjICBkZWZpbmUgVF9QT0lOVEVSIFRfVUxPTkcKKyNlbHNlCisjICBkZWZpbmUgRl9QT0lOVEVSICJLIgorIyAgZGVmaW5lIFRfUE9JTlRFUiBUX1VMT05HTE9ORworI2VuZGlmCisKKyNkZWZpbmUgRl9IQU5ETEUgRl9QT0lOVEVSCisjZGVmaW5lIEZfVUxPTkdfUFRSIEZfUE9JTlRFUgorI2RlZmluZSBGX0RXT1JEICJrIgorI2RlZmluZSBGX0JPT0wgImkiCisjZGVmaW5lIEZfVUlOVCAiSSIKKworI2RlZmluZSBUX0hBTkRMRSBUX1BPSU5URVIKKworZW51bSB7VFlQRV9OT05FLCBUWVBFX05PVF9TVEFSVEVELCBUWVBFX1JFQUQsIFRZUEVfV1JJVEUsIFRZUEVfQUNDRVBULAorICAgICAgVFlQRV9DT05ORUNULCBUWVBFX0RJU0NPTk5FQ1QsIFRZUEVfQ09OTkVDVF9OQU1FRF9QSVBFLAorICAgICAgVFlQRV9XQUlUX05BTUVEX1BJUEVfQU5EX0NPTk5FQ1R9OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIE9WRVJMQVBQRUQgb3ZlcmxhcHBlZDsKKyAgICAvKiBGb3IgY29udmVuaWVuY2UsIHdlIHN0b3JlIHRoZSBmaWxlIGhhbmRsZSB0b28gKi8KKyAgICBIQU5ETEUgaGFuZGxlOworICAgIC8qIEVycm9yIHJldHVybmVkIGJ5IGxhc3QgbWV0aG9kIGNhbGwgKi8KKyAgICBEV09SRCBlcnJvcjsKKyAgICAvKiBUeXBlIG9mIG9wZXJhdGlvbiAqLworICAgIERXT1JEIHR5cGU7CisgICAgdW5pb24geworICAgICAgICAvKiBCdWZmZXIgdXNlZCBmb3IgcmVhZGluZzogVFlQRV9SRUFEIGFuZCBUWVBFX0FDQ0VQVCAqLworICAgICAgICBQeU9iamVjdCAqcmVhZF9idWZmZXI7CisgICAgICAgIC8qIEJ1ZmZlciB1c2VkIGZvciB3cml0aW5nOiBUWVBFX1dSSVRFICovCisgICAgICAgIFB5X2J1ZmZlciB3cml0ZV9idWZmZXI7CisgICAgfTsKK30gT3ZlcmxhcHBlZE9iamVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIE9WRVJMQVBQRUQgKk92ZXJsYXBwZWQ7CisgICAgSEFORExFIElvY3BIYW5kbGU7CisgICAgY2hhciBBZGRyZXNzWzFdOworfSBXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdENvbnRleHQ7CisKKy8qCisgKiBNYXAgV2luZG93cyBlcnJvciBjb2RlcyB0byBzdWJjbGFzc2VzIG9mIE9TRXJyb3IKKyAqLworCitzdGF0aWMgUHlPYmplY3QgKgorU2V0RnJvbVdpbmRvd3NFcnIoRFdPUkQgZXJyKQoreworICAgIFB5T2JqZWN0ICpleGNlcHRpb25fdHlwZTsKKworICAgIGlmIChlcnIgPT0gMCkKKyAgICAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQ6CisgICAgICAgICAgICBleGNlcHRpb25fdHlwZSA9IFB5RXhjX0Nvbm5lY3Rpb25SZWZ1c2VkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUlJPUl9DT05ORUNUSU9OX0FCT1JURUQ6CisgICAgICAgICAgICBleGNlcHRpb25fdHlwZSA9IFB5RXhjX0Nvbm5lY3Rpb25BYm9ydGVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl90eXBlID0gUHlFeGNfT1NFcnJvcjsKKyAgICB9CisgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKGV4Y2VwdGlvbl90eXBlLCBlcnIpOworfQorCisvKgorICogU29tZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGxvYWRlZCBhdCBydW50aW1lCisgKi8KKworc3RhdGljIExQRk5fQUNDRVBURVggUHlfQWNjZXB0RXggPSBOVUxMOworc3RhdGljIExQRk5fQ09OTkVDVEVYIFB5X0Nvbm5lY3RFeCA9IE5VTEw7CitzdGF0aWMgTFBGTl9ESVNDT05ORUNURVggUHlfRGlzY29ubmVjdEV4ID0gTlVMTDsKK3N0YXRpYyBCT09MIChDQUxMQkFDSyAqUHlfQ2FuY2VsSW9FeCkoSEFORExFLCBMUE9WRVJMQVBQRUQpID0gTlVMTDsKKworI2RlZmluZSBHRVRfV1NBX1BPSU5URVIocywgeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChTT0NLRVRfRVJST1IgIT0gV1NBSW9jdGwocywgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkd1aWQjI3gsIHNpemVvZihHdWlkIyN4KSwgJlB5XyMjeCwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFB5XyMjeCksICZkd0J5dGVzLCBOVUxMLCBOVUxMKSkKKworc3RhdGljIGludAoraW5pdGlhbGl6ZV9mdW5jdGlvbl9wb2ludGVycyh2b2lkKQoreworICAgIEdVSUQgR3VpZEFjY2VwdEV4ID0gV1NBSURfQUNDRVBURVg7CisgICAgR1VJRCBHdWlkQ29ubmVjdEV4ID0gV1NBSURfQ09OTkVDVEVYOworICAgIEdVSUQgR3VpZERpc2Nvbm5lY3RFeCA9IFdTQUlEX0RJU0NPTk5FQ1RFWDsKKyAgICBISU5TVEFOQ0UgaEtlcm5lbDMyOworICAgIFNPQ0tFVCBzOworICAgIERXT1JEIGR3Qnl0ZXM7CisKKyAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CisgICAgaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFHRVRfV1NBX1BPSU5URVIocywgQWNjZXB0RXgpIHx8CisgICAgICAgICFHRVRfV1NBX1BPSU5URVIocywgQ29ubmVjdEV4KSB8fAorICAgICAgICAhR0VUX1dTQV9QT0lOVEVSKHMsIERpc2Nvbm5lY3RFeCkpCisgICAgeworICAgICAgICBjbG9zZXNvY2tldChzKTsKKyAgICAgICAgU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgY2xvc2Vzb2NrZXQocyk7CisKKyAgICAvKiBPbiBXaW5YUCB3ZSB3aWxsIGhhdmUgUHlfQ2FuY2VsSW9FeCA9PSBOVUxMICovCisgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlKCJLRVJORUwzMiIpOworICAgICooRkFSUFJPQyAqKSZQeV9DYW5jZWxJb0V4ID0gR2V0UHJvY0FkZHJlc3MoaEtlcm5lbDMyLCAiQ2FuY2VsSW9FeCIpOworICAgIHJldHVybiAwOworfQorCisvKgorICogQ29tcGxldGlvbiBwb3J0IHN0dWZmCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIENyZWF0ZUlvQ29tcGxldGlvblBvcnRfZG9jLAorICAgICJDcmVhdGVJb0NvbXBsZXRpb25Qb3J0KGhhbmRsZSwgcG9ydCwga2V5LCBjb25jdXJyZW5jeSkgLT4gcG9ydFxuXG4iCisgICAgIkNyZWF0ZSBhIGNvbXBsZXRpb24gcG9ydCBvciByZWdpc3RlciBhIGhhbmRsZSB3aXRoIGEgcG9ydC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIEZpbGVIYW5kbGU7CisgICAgSEFORExFIEV4aXN0aW5nQ29tcGxldGlvblBvcnQ7CisgICAgVUxPTkdfUFRSIENvbXBsZXRpb25LZXk7CisgICAgRFdPUkQgTnVtYmVyT2ZDb25jdXJyZW50VGhyZWFkczsKKyAgICBIQU5ETEUgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFIEZfVUxPTkdfUFRSIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZGaWxlSGFuZGxlLCAmRXhpc3RpbmdDb21wbGV0aW9uUG9ydCwgJkNvbXBsZXRpb25LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZOdW1iZXJPZkNvbmN1cnJlbnRUaHJlYWRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChGaWxlSGFuZGxlLCBFeGlzdGluZ0NvbXBsZXRpb25Qb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbktleSwgTnVtYmVyT2ZDb25jdXJyZW50VGhyZWFkcyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCByZXQpOworfQorCitQeURvY19TVFJWQVIoCisgICAgR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2MsCisgICAgIkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMocG9ydCwgbXNlY3MpIC0+IChlcnIsIGJ5dGVzLCBrZXksIGFkZHJlc3MpXG5cbiIKKyAgICAiR2V0IGEgbWVzc2FnZSBmcm9tIGNvbXBsZXRpb24gcG9ydC4gIFdhaXQgZm9yIHVwIHRvIG1zZWNzIG1pbGxpc2Vjb25kcy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIENvbXBsZXRpb25Qb3J0ID0gTlVMTDsKKyAgICBEV09SRCBOdW1iZXJPZkJ5dGVzID0gMDsKKyAgICBVTE9OR19QVFIgQ29tcGxldGlvbktleSA9IDA7CisgICAgT1ZFUkxBUFBFRCAqT3ZlcmxhcHBlZCA9IE5VTEw7CisgICAgRFdPUkQgTWlsbGlzZWNvbmRzOworICAgIERXT1JEIGVycjsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29tcGxldGlvblBvcnQsICZNaWxsaXNlY29uZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKENvbXBsZXRpb25Qb3J0LCAmTnVtYmVyT2ZCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb21wbGV0aW9uS2V5LCAmT3ZlcmxhcHBlZCwgTWlsbGlzZWNvbmRzKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIGlmIChPdmVybGFwcGVkID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGVyciA9PSBXQUlUX1RJTUVPVVQpCisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfRFdPUkQgRl9EV09SRCBGX1VMT05HX1BUUiBGX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLCBOdW1iZXJPZkJ5dGVzLCBDb21wbGV0aW9uS2V5LCBPdmVybGFwcGVkKTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvYywKKyAgICAiUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMocG9ydCwgYnl0ZXMsIGtleSwgYWRkcmVzcykgLT4gTm9uZVxuXG4iCisgICAgIlBvc3QgYSBtZXNzYWdlIHRvIGNvbXBsZXRpb24gcG9ydC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBDb21wbGV0aW9uUG9ydDsKKyAgICBEV09SRCBOdW1iZXJPZkJ5dGVzOworICAgIFVMT05HX1BUUiBDb21wbGV0aW9uS2V5OworICAgIE9WRVJMQVBQRUQgKk92ZXJsYXBwZWQ7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCBGX1VMT05HX1BUUiBGX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZDb21wbGV0aW9uUG9ydCwgJk51bWJlck9mQnl0ZXMsICZDb21wbGV0aW9uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmT3ZlcmxhcHBlZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKENvbXBsZXRpb25Qb3J0LCBOdW1iZXJPZkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25LZXksIE92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogV2FpdCBmb3IgYSBoYW5kbGUKKyAqLworCitzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSB7CisgICAgSEFORExFIENvbXBsZXRpb25Qb3J0OworICAgIExQT1ZFUkxBUFBFRCBPdmVybGFwcGVkOworfTsKKworc3RhdGljIFZPSUQgQ0FMTEJBQ0sKK1Bvc3RUb1F1ZXVlQ2FsbGJhY2soUFZPSUQgbHBQYXJhbWV0ZXIsIEJPT0wgVGltZXJPcldhaXRGaXJlZCkKK3sKKyAgICBzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSAqcCA9IChzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSopIGxwUGFyYW1ldGVyOworCisgICAgUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMocC0+Q29tcGxldGlvblBvcnQsIFRpbWVyT3JXYWl0RmlyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcC0+T3ZlcmxhcHBlZCk7CisgICAgLyogaWdub3JlIHBvc3NpYmxlIGVycm9yISAqLworICAgIFB5TWVtX0ZyZWUocCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBSZWdpc3RlcldhaXRXaXRoUXVldWVfZG9jLAorICAgICJSZWdpc3RlcldhaXRXaXRoUXVldWUoT2JqZWN0LCBDb21wbGV0aW9uUG9ydCwgT3ZlcmxhcHBlZCwgVGltZW91dClcbiIKKyAgICAiICAgIC0+IFdhaXRIYW5kbGVcblxuIgorICAgICJSZWdpc3RlciB3YWl0IGZvciBPYmplY3Q7IHdoZW4gY29tcGxldGUgQ29tcGxldGlvblBvcnQgaXMgbm90aWZpZWQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgTmV3V2FpdE9iamVjdDsKKyAgICBIQU5ETEUgT2JqZWN0OworICAgIFVMT05HIE1pbGxpc2Vjb25kczsKKyAgICBzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSBkYXRhLCAqcGRhdGE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9IQU5ETEUgRl9QT0lOVEVSIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLkNvbXBsZXRpb25Qb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS5PdmVybGFwcGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmTWlsbGlzZWNvbmRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwZGF0YSA9IFB5TWVtX01hbGxvYyhzaXplb2Yoc3RydWN0IFBvc3RDYWxsYmFja0RhdGEpKTsKKyAgICBpZiAocGRhdGEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworCisgICAgKnBkYXRhID0gZGF0YTsKKworICAgIGlmICghUmVnaXN0ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KAorICAgICAgICAgICAgJk5ld1dhaXRPYmplY3QsIE9iamVjdCwgKFdBSVRPUlRJTUVSQ0FMTEJBQ0spUG9zdFRvUXVldWVDYWxsYmFjaywKKyAgICAgICAgICAgIHBkYXRhLCBNaWxsaXNlY29uZHMsCisgICAgICAgICAgICBXVF9FWEVDVVRFSU5XQUlUVEhSRUFEIHwgV1RfRVhFQ1VURU9OTFlPTkNFKSkKKyAgICB7CisgICAgICAgIFB5TWVtX0ZyZWUocGRhdGEpOworICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgfQorCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIE5ld1dhaXRPYmplY3QpOworfQorCitQeURvY19TVFJWQVIoCisgICAgVW5yZWdpc3RlcldhaXRfZG9jLAorICAgICJVbnJlZ2lzdGVyV2FpdChXYWl0SGFuZGxlKSAtPiBOb25lXG5cbiIKKyAgICAiVW5yZWdpc3RlciB3YWl0IGhhbmRsZS5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9VbnJlZ2lzdGVyV2FpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIFdhaXRIYW5kbGU7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZXYWl0SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gVW5yZWdpc3RlcldhaXQoV2FpdEhhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBFdmVudCBmdW5jdGlvbnMgLS0gY3VycmVudGx5IG9ubHkgdXNlZCBieSB0ZXN0cworICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBDcmVhdGVFdmVudF9kb2MsCisgICAgIkNyZWF0ZUV2ZW50KEV2ZW50QXR0cmlidXRlcywgTWFudWFsUmVzZXQsIEluaXRpYWxTdGF0ZSwgTmFtZSkiCisgICAgIiAtPiBIYW5kbGVcblxuIgorICAgICJDcmVhdGUgYW4gZXZlbnQuICBFdmVudEF0dHJpYnV0ZXMgbXVzdCBiZSBOb25lLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0NyZWF0ZUV2ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqRXZlbnRBdHRyaWJ1dGVzOworICAgIEJPT0wgTWFudWFsUmVzZXQ7CisgICAgQk9PTCBJbml0aWFsU3RhdGU7CisgICAgUHlfVU5JQ09ERSAqTmFtZTsKKyAgICBIQU5ETEUgRXZlbnQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iIEZfQk9PTCBGX0JPT0wgIloiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmRXZlbnRBdHRyaWJ1dGVzLCAmTWFudWFsUmVzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZJbml0aWFsU3RhdGUsICZOYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoRXZlbnRBdHRyaWJ1dGVzICE9IFB5X05vbmUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJFdmVudEF0dHJpYnV0ZXMgbXVzdCBiZSBOb25lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBFdmVudCA9IENyZWF0ZUV2ZW50VyhOVUxMLCBNYW51YWxSZXNldCwgSW5pdGlhbFN0YXRlLCBOYW1lKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKEV2ZW50ID09IE5VTEwpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0hBTkRMRSwgRXZlbnQpOworfQorCitQeURvY19TVFJWQVIoCisgICAgU2V0RXZlbnRfZG9jLAorICAgICJTZXRFdmVudChIYW5kbGUpIC0+IE5vbmVcblxuIgorICAgICJTZXQgZXZlbnQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfU2V0RXZlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBIYW5kbGU7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZIYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBTZXRFdmVudChIYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoCisgICAgUmVzZXRFdmVudF9kb2MsCisgICAgIlJlc2V0RXZlbnQoSGFuZGxlKSAtPiBOb25lXG5cbiIKKyAgICAiUmVzZXQgZXZlbnQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfUmVzZXRFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIEhhbmRsZTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJkhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFJlc2V0RXZlbnQoSGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIEJpbmQgc29ja2V0IGhhbmRsZSB0byBsb2NhbCBwb3J0IHdpdGhvdXQgZG9pbmcgc2xvdyBnZXRhZGRyaW5mbygpCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIEJpbmRMb2NhbF9kb2MsCisgICAgIkJpbmRMb2NhbChoYW5kbGUsIGZhbWlseSkgLT4gTm9uZVxuXG4iCisgICAgIkJpbmQgYSBzb2NrZXQgaGFuZGxlIHRvIGFuIGFyYml0cmFyeSBsb2NhbCBwb3J0LlxuIgorICAgICJmYW1pbHkgc2hvdWxkIEFGX0lORVQgb3IgQUZfSU5FVDYuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfQmluZExvY2FsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgU29ja2V0OworICAgIGludCBGYW1pbHk7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgImkiLCAmU29ja2V0LCAmRmFtaWx5KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoRmFtaWx5ID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisgICAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgYWRkci5zaW5fcG9ydCA9IDA7CisgICAgICAgIGFkZHIuc2luX2FkZHIuU191bi5TX2FkZHIgPSBJTkFERFJfQU5ZOworICAgICAgICByZXQgPSBiaW5kKFNvY2tldCwgKFNPQ0tBRERSKikmYWRkciwgc2l6ZW9mKGFkZHIpKSAhPSBTT0NLRVRfRVJST1I7CisgICAgfSBlbHNlIGlmIChGYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICAgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgYWRkci5zaW42X3BvcnQgPSAwOworICAgICAgICBhZGRyLnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgICAgICByZXQgPSBiaW5kKFNvY2tldCwgKFNPQ0tBRERSKikmYWRkciwgc2l6ZW9mKGFkZHIpKSAhPSBTT0NLRVRfRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleHBlY3RlZCB0dXBsZSBvZiBsZW5ndGggMiBvciA0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogV2luZG93cyBlcXVpdmFsZW50IG9mIG9zLnN0cmVycm9yKCkgLS0gY29tcGFyZSBfY3R5cGVzL2NhbGxwcm9jLmMKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgRm9ybWF0TWVzc2FnZV9kb2MsCisgICAgIkZvcm1hdE1lc3NhZ2UoZXJyb3JfY29kZSkgLT4gZXJyb3JfbWVzc2FnZVxuXG4iCisgICAgIlJldHVybiBlcnJvciBtZXNzYWdlIGZvciBhbiBlcnJvciBjb2RlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9Gb3JtYXRNZXNzYWdlKFB5T2JqZWN0ICppZ25vcmUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIERXT1JEIGNvZGUsIG47CisgICAgV0NIQVIgKmxwTXNnQnVmOworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9EV09SRCwgJmNvZGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG4gPSBGb3JtYXRNZXNzYWdlVyhGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIgfAorICAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxBTkdJRChMQU5HX05FVVRSQUwsIFNVQkxBTkdfREVGQVVMVCksCisgICAgICAgICAgICAgICAgICAgICAgIChMUFdTVFIpICZscE1zZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKG4pIHsKKyAgICAgICAgd2hpbGUgKGlzd3NwYWNlKGxwTXNnQnVmW24tMV0pKQorICAgICAgICAgICAgLS1uOworICAgICAgICBscE1zZ0J1ZltuXSA9IEwnXDAnOworICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKCJ1IiwgbHBNc2dCdWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJ1bmtub3duIGVycm9yIGNvZGUgJXUiLCBjb2RlKTsKKyAgICB9CisgICAgTG9jYWxGcmVlKGxwTXNnQnVmKTsKKyAgICByZXR1cm4gcmVzOworfQorCisKKy8qCisgKiBNYXJrIG9wZXJhdGlvbiBhcyBjb21wbGV0ZWQgLSB1c2VkIHdoZW4gcmVhZGluZyBwcm9kdWNlcyBFUlJPUl9CUk9LRU5fUElQRQorICovCisKK3N0YXRpYyB2b2lkCittYXJrX2FzX2NvbXBsZXRlZChPVkVSTEFQUEVEICpvdikKK3sKKyAgICBvdi0+SW50ZXJuYWwgPSAwOworICAgIGlmIChvdi0+aEV2ZW50ICE9IE5VTEwpCisgICAgICAgIFNldEV2ZW50KG92LT5oRXZlbnQpOworfQorCisvKgorICogQSBQeXRob24gb2JqZWN0IHdyYXBwaW5nIGFuIE9WRVJMQVBQRUQgc3RydWN0dXJlIGFuZCBvdGhlciB1c2VmdWwgZGF0YQorICogZm9yIG92ZXJsYXBwZWQgSS9PCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfZG9jLAorICAgICJPdmVybGFwcGVkIG9iamVjdCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgT3ZlcmxhcHBlZE9iamVjdCAqc2VsZjsKKyAgICBIQU5ETEUgZXZlbnQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImV2ZW50IiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifCIgRl9IQU5ETEUsIGt3bGlzdCwgJmV2ZW50KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZXZlbnQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBUUlVFLCBGQUxTRSwgTlVMTCk7CisgICAgICAgIGlmIChldmVudCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIH0KKworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoT3ZlcmxhcHBlZE9iamVjdCwgdHlwZSk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkgeworICAgICAgICBpZiAoZXZlbnQgIT0gTlVMTCkKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+aGFuZGxlID0gTlVMTDsKKyAgICBzZWxmLT5lcnJvciA9IDA7CisgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9ORTsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IE5VTEw7CisgICAgbWVtc2V0KCZzZWxmLT5vdmVybGFwcGVkLCAwLCBzaXplb2YoT1ZFUkxBUFBFRCkpOworICAgIG1lbXNldCgmc2VsZi0+d3JpdGVfYnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7CisgICAgaWYgKGV2ZW50KQorICAgICAgICBzZWxmLT5vdmVybGFwcGVkLmhFdmVudCA9IGV2ZW50OworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCitzdGF0aWMgdm9pZAorT3ZlcmxhcHBlZF9kZWFsbG9jKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgRFdPUkQgYnl0ZXM7CisgICAgRFdPUkQgb2xkZXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgQk9PTCB3YWl0ID0gRkFMU0U7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIUhhc092ZXJsYXBwZWRJb0NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCkgJiYKKyAgICAgICAgc2VsZi0+dHlwZSAhPSBUWVBFX05PVF9TVEFSVEVEKQorICAgIHsKKyAgICAgICAgaWYgKFB5X0NhbmNlbElvRXggJiYgUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKSkKKyAgICAgICAgICAgIHdhaXQgPSBUUlVFOworCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmV0ID0gR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlcywgd2FpdCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgc3dpdGNoIChyZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgICAgIGNhc2UgRVJST1JfTk9UX0ZPVU5EOgorICAgICAgICAgICAgY2FzZSBFUlJPUl9PUEVSQVRJT05fQUJPUlRFRDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICIlUiBzdGlsbCBoYXMgcGVuZGluZyBvcGVyYXRpb24gYXQgIgorICAgICAgICAgICAgICAgICAgICAiZGVhbGxvY2F0aW9uLCB0aGUgcHJvY2VzcyBtYXkgY3Jhc2giLCBzZWxmKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQgIT0gTlVMTCkKKyAgICAgICAgQ2xvc2VIYW5kbGUoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQpOworCisgICAgc3dpdGNoIChzZWxmLT50eXBlKSB7CisgICAgY2FzZSBUWVBFX1JFQUQ6CisgICAgY2FzZSBUWVBFX0FDQ0VQVDoKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZF9idWZmZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZUEVfV1JJVEU6CisgICAgICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIub2JqKQorICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+d3JpdGVfYnVmZmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBTZXRMYXN0RXJyb3Iob2xkZXJyKTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfY2FuY2VsX2RvYywKKyAgICAiY2FuY2VsKCkgLT4gTm9uZVxuXG4iCisgICAgIkNhbmNlbCBvdmVybGFwcGVkIG9wZXJhdGlvbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9jYW5jZWwoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICBCT09MIHJldCA9IFRSVUU7CisKKyAgICBpZiAoc2VsZi0+dHlwZSA9PSBUWVBFX05PVF9TVEFSVEVECisgICAgICAgIHx8IHNlbGYtPnR5cGUgPT0gVFlQRV9XQUlUX05BTUVEX1BJUEVfQU5EX0NPTk5FQ1QpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCisgICAgaWYgKCFIYXNPdmVybGFwcGVkSW9Db21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKFB5X0NhbmNlbElvRXgpCisgICAgICAgICAgICByZXQgPSBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSBDYW5jZWxJbyhzZWxmLT5oYW5kbGUpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0KKworICAgIC8qIENhbmNlbElvRXggcmV0dXJucyBFUlJPUl9OT1RfRk9VTkQgaWYgdGhlIEkvTyBjb21wbGV0ZWQgaW4tYmV0d2VlbiAqLworICAgIGlmICghcmV0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PVF9GT1VORCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9nZXRyZXN1bHRfZG9jLAorICAgICJnZXRyZXN1bHQod2FpdD1GYWxzZSkgLT4gcmVzdWx0XG5cbiIKKyAgICAiUmV0cmlldmUgcmVzdWx0IG9mIG9wZXJhdGlvbi4gIElmIHdhaXQgaXMgdHJ1ZSB0aGVuIGl0IGJsb2Nrc1xuIgorICAgICJ1bnRpbCB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLiAgSWYgd2FpdCBpcyBmYWxzZSBhbmQgdGhlXG4iCisgICAgIm9wZXJhdGlvbiBpcyBzdGlsbCBwZW5kaW5nIHRoZW4gYW4gZXJyb3IgaXMgcmFpc2VkLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9nZXRyZXN1bHQoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQk9PTCB3YWl0ID0gRkFMU0U7CisgICAgRFdPUkQgdHJhbnNmZXJyZWQgPSAwOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifCIgRl9CT09MLCAmd2FpdCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgPT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIG5vdCB5ZXQgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChzZWxmLT50eXBlID09IFRZUEVfTk9UX1NUQVJURUQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gZmFpbGVkIHRvIHN0YXJ0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsICZ0cmFuc2ZlcnJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CisgICAgICAgICAgICBpZiAoKHNlbGYtPnR5cGUgPT0gVFlQRV9SRUFEIHx8IHNlbGYtPnR5cGUgPT0gVFlQRV9BQ0NFUFQpICYmIHNlbGYtPnJlYWRfYnVmZmVyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KKworICAgIHN3aXRjaCAoc2VsZi0+dHlwZSkgeworICAgICAgICBjYXNlIFRZUEVfUkVBRDoKKyAgICAgICAgICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrRXhhY3Qoc2VsZi0+cmVhZF9idWZmZXIpKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2ZlcnJlZCAhPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnJlYWRfYnVmZmVyKSAmJgorICAgICAgICAgICAgICAgIF9QeUJ5dGVzX1Jlc2l6ZSgmc2VsZi0+cmVhZF9idWZmZXIsIHRyYW5zZmVycmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5yZWFkX2J1ZmZlcik7CisgICAgICAgICAgICByZXR1cm4gc2VsZi0+cmVhZF9idWZmZXI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHRyYW5zZmVycmVkKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX1JlYWRGaWxlX2RvYywKKyAgICAiUmVhZEZpbGUoaGFuZGxlLCBzaXplKSAtPiBPdmVybGFwcGVkW21lc3NhZ2VdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCByZWFkIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1JlYWRGaWxlKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBEV09SRCBucmVhZDsKKyAgICBQeU9iamVjdCAqYnVmOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JELCAmaGFuZGxlLCAmc2l6ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIFNJWkVPRl9TSVpFX1QgPD0gU0laRU9GX0xPTkcKKyAgICBzaXplID0gUHlfTUlOKHNpemUsIChEV09SRClQWV9TU0laRV9UX01BWCk7CisjZW5kaWYKKyAgICBidWYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIFB5X01BWChzaXplLCAxKSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1JFQUQ7CisgICAgc2VsZi0+aGFuZGxlID0gaGFuZGxlOworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gYnVmOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFJlYWRGaWxlKGhhbmRsZSwgUHlCeXRlc19BU19TVFJJTkcoYnVmKSwgc2l6ZSwgJm5yZWFkLAorICAgICAgICAgICAgICAgICAgICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9XU0FSZWN2X2RvYywKKyAgICAiUmVjdkZpbGUoaGFuZGxlLCBzaXplLCBmbGFncykgLT4gT3ZlcmxhcHBlZFttZXNzYWdlXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgcmVjZWl2ZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9XU0FSZWN2KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBEV09SRCBmbGFncyA9IDA7CisgICAgRFdPUkQgbnJlYWQ7CisgICAgUHlPYmplY3QgKmJ1ZjsKKyAgICBXU0FCVUYgd3NhYnVmOworICAgIGludCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQgInwiIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZzaXplLCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBTSVpFT0ZfU0laRV9UIDw9IFNJWkVPRl9MT05HCisgICAgc2l6ZSA9IFB5X01JTihzaXplLCAoRFdPUkQpUFlfU1NJWkVfVF9NQVgpOworI2VuZGlmCisgICAgYnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBQeV9NQVgoc2l6ZSwgMSkpOworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9SRUFEOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IGJ1ZjsKKyAgICB3c2FidWYubGVuID0gc2l6ZTsKKyAgICB3c2FidWYuYnVmID0gUHlCeXRlc19BU19TVFJJTkcoYnVmKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXU0FSZWN2KChTT0NLRVQpaGFuZGxlLCAmd3NhYnVmLCAxLCAmbnJlYWQsICZmbGFncywKKyAgICAgICAgICAgICAgICAgICZzZWxmLT5vdmVybGFwcGVkLCBOVUxMKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSAocmV0IDwgMCA/IFdTQUdldExhc3RFcnJvcigpIDogRVJST1JfU1VDQ0VTUyk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Xcml0ZUZpbGVfZG9jLAorICAgICJXcml0ZUZpbGUoaGFuZGxlLCBidWYpIC0+IE92ZXJsYXBwZWRbYnl0ZXNfdHJhbnNmZXJyZWRdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCB3cml0ZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9Xcml0ZUZpbGUoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBQeU9iamVjdCAqYnVmb2JqOworICAgIERXT1JEIHdyaXR0ZW47CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJPIiwgJmhhbmRsZSwgJmJ1Zm9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2UoYnVmb2JqLCAieSoiLCAmc2VsZi0+d3JpdGVfYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiBTSVpFT0ZfU0laRV9UID4gU0laRU9GX0xPTkcKKyAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiA+IChQeV9zc2l6ZV90KVVMT05HX01BWCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZmZlciB0byBsYXJnZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1dSSVRFOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXcml0ZUZpbGUoaGFuZGxlLCBzZWxmLT53cml0ZV9idWZmZXIuYnVmLAorICAgICAgICAgICAgICAgICAgICAoRFdPUkQpc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4sICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9XU0FTZW5kX2RvYywKKyAgICAiV1NBU2VuZChoYW5kbGUsIGJ1ZiwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbYnl0ZXNfdHJhbnNmZXJyZWRdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBzZW5kIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1dTQVNlbmQoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBQeU9iamVjdCAqYnVmb2JqOworICAgIERXT1JEIGZsYWdzOworICAgIERXT1JEIHdyaXR0ZW47CisgICAgV1NBQlVGIHdzYWJ1ZjsKKyAgICBpbnQgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmJ1Zm9iaiwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZShidWZvYmosICJ5KiIsICZzZWxmLT53cml0ZV9idWZmZXIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworI2lmIFNJWkVPRl9TSVpFX1QgPiBTSVpFT0ZfTE9ORworICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIubGVuID4gKFB5X3NzaXplX3QpVUxPTkdfTUFYKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPndyaXRlX2J1ZmZlcik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYnVmZmVyIHRvIGxhcmdlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfV1JJVEU7CisgICAgc2VsZi0+aGFuZGxlID0gaGFuZGxlOworICAgIHdzYWJ1Zi5sZW4gPSAoRFdPUkQpc2VsZi0+d3JpdGVfYnVmZmVyLmxlbjsKKyAgICB3c2FidWYuYnVmID0gc2VsZi0+d3JpdGVfYnVmZmVyLmJ1ZjsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXU0FTZW5kKChTT0NLRVQpaGFuZGxlLCAmd3NhYnVmLCAxLCAmd3JpdHRlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCwgTlVMTCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gKHJldCA8IDAgPyBXU0FHZXRMYXN0RXJyb3IoKSA6IEVSUk9SX1NVQ0NFU1MpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfQWNjZXB0RXhfZG9jLAorICAgICJBY2NlcHRFeChsaXN0ZW5faGFuZGxlLCBhY2NlcHRfaGFuZGxlKSAtPiBPdmVybGFwcGVkW2FkZHJlc3NfYXNfYnl0ZXNdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCB3YWl0IGZvciBjbGllbnQgdG8gY29ubmVjdCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9BY2NlcHRFeChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgTGlzdGVuU29ja2V0OworICAgIFNPQ0tFVCBBY2NlcHRTb2NrZXQ7CisgICAgRFdPUkQgQnl0ZXNSZWNlaXZlZDsKKyAgICBEV09SRCBzaXplOworICAgIFB5T2JqZWN0ICpidWY7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmTGlzdGVuU29ja2V0LCAmQWNjZXB0U29ja2V0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSArIDE2OworICAgIGJ1ZiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSoyKTsKKyAgICBpZiAoIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9BQ0NFUFQ7CisgICAgc2VsZi0+aGFuZGxlID0gKEhBTkRMRSlMaXN0ZW5Tb2NrZXQ7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBidWY7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfQWNjZXB0RXgoTGlzdGVuU29ja2V0LCBBY2NlcHRTb2NrZXQsIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZSwgc2l6ZSwgJkJ5dGVzUmVjZWl2ZWQsICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogV1NBR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCisKK3N0YXRpYyBpbnQKK3BhcnNlX2FkZHJlc3MoUHlPYmplY3QgKm9iaiwgU09DS0FERFIgKkFkZHJlc3MsIGludCBMZW5ndGgpCit7CisgICAgY2hhciAqSG9zdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBQb3J0OworICAgIHVuc2lnbmVkIGxvbmcgRmxvd0luZm87CisgICAgdW5zaWduZWQgbG9uZyBTY29wZUlkOworCisgICAgbWVtc2V0KEFkZHJlc3MsIDAsIExlbmd0aCk7CisKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShvYmosICJzSCIsICZIb3N0LCAmUG9ydCkpCisgICAgeworICAgICAgICBBZGRyZXNzLT5zYV9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBpZiAoV1NBU3RyaW5nVG9BZGRyZXNzQShIb3N0LCBBRl9JTkVULCBOVUxMLCBBZGRyZXNzLCAmTGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAoKFNPQ0tBRERSX0lOKilBZGRyZXNzKS0+c2luX3BvcnQgPSBodG9ucyhQb3J0KTsKKyAgICAgICAgcmV0dXJuIExlbmd0aDsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlBcmdfUGFyc2VUdXBsZShvYmosICJzSGtrIiwgJkhvc3QsICZQb3J0LCAmRmxvd0luZm8sICZTY29wZUlkKSkKKyAgICB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIEFkZHJlc3MtPnNhX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBpZiAoV1NBU3RyaW5nVG9BZGRyZXNzQShIb3N0LCBBRl9JTkVUNiwgTlVMTCwgQWRkcmVzcywgJkxlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKChTT0NLQUREUl9JTjYqKUFkZHJlc3MpLT5zaW42X3BvcnQgPSBodG9ucyhQb3J0KTsKKyAgICAgICAgKChTT0NLQUREUl9JTjYqKUFkZHJlc3MpLT5zaW42X2Zsb3dpbmZvID0gRmxvd0luZm87CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9zY29wZV9pZCA9IFNjb3BlSWQ7CisgICAgICAgIHJldHVybiBMZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Nvbm5lY3RFeF9kb2MsCisgICAgIkNvbm5lY3RFeChjbGllbnRfaGFuZGxlLCBhZGRyZXNzX2FzX2J5dGVzKSAtPiBPdmVybGFwcGVkW05vbmVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBjb25uZWN0LiAgY2xpZW50X2hhbmRsZSBzaG91bGQgYmUgdW5ib3VuZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQ29ubmVjdEV4KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBDb25uZWN0U29ja2V0OworICAgIFB5T2JqZWN0ICpBZGRyZXNzT2JqOworICAgIGNoYXIgQWRkcmVzc0J1ZltzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNildOworICAgIFNPQ0tBRERSICpBZGRyZXNzID0gKFNPQ0tBRERSKilBZGRyZXNzQnVmOworICAgIGludCBMZW5ndGg7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJPIiwgJkNvbm5lY3RTb2NrZXQsICZBZGRyZXNzT2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgTGVuZ3RoID0gc2l6ZW9mKEFkZHJlc3NCdWYpOworICAgIExlbmd0aCA9IHBhcnNlX2FkZHJlc3MoQWRkcmVzc09iaiwgQWRkcmVzcywgTGVuZ3RoKTsKKyAgICBpZiAoTGVuZ3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9DT05ORUNUOworICAgIHNlbGYtPmhhbmRsZSA9IChIQU5ETEUpQ29ubmVjdFNvY2tldDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQeV9Db25uZWN0RXgoQ29ubmVjdFNvY2tldCwgQWRkcmVzcywgTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IFdTQUdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfRGlzY29ubmVjdEV4X2RvYywKKyAgICAiRGlzY29ubmVjdEV4KGhhbmRsZSwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbTm9uZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIGNvbm5lY3QuICBjbGllbnRfaGFuZGxlIHNob3VsZCBiZSB1bmJvdW5kLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9EaXNjb25uZWN0RXgoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIFNvY2tldDsKKyAgICBEV09SRCBmbGFnczsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwgJlNvY2tldCwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfRElTQ09OTkVDVDsKKyAgICBzZWxmLT5oYW5kbGUgPSAoSEFORExFKVNvY2tldDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQeV9EaXNjb25uZWN0RXgoU29ja2V0LCAmc2VsZi0+b3ZlcmxhcHBlZCwgZmxhZ3MsIDApOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGVfZG9jLAorICAgICJDb25uZWN0TmFtZWRQaXBlKGhhbmRsZSkgLT4gT3ZlcmxhcHBlZFtOb25lXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd2FpdCBmb3IgYSBjbGllbnQgdG8gY29ubmVjdC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZShPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgUGlwZTsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZQaXBlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQ09OTkVDVF9OQU1FRF9QSVBFOworICAgIHNlbGYtPmhhbmRsZSA9IFBpcGU7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gQ29ubmVjdE5hbWVkUGlwZShQaXBlLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfUElQRV9DT05ORUNURUQ6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCisvKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIHdheSB0byBkbyBhbiBvdmVybGFwcGVkIGNvbm5lY3QgdG8gYQorICAgcGlwZS4gIFdlIGluc3RlYWQgdXNlIFdhaXROYW1lZFBpcGUoKSBhbmQgQ3JlYXRlRmlsZSgpIGluIGEgdGhyZWFkCisgICBwb29sIHRocmVhZC4gIElmIGEgY29ubmVjdGlvbiBzdWNjZWVkcyB3aXRoaW4gYSB0aW1lIGxpbWl0ICgxMAorICAgc2Vjb25kcykgdGhlbiBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cygpIGlzIHVzZWQgdG8gcmV0dXJuIHRoZQorICAgcGlwZSBoYW5kbGUgdG8gdGhlIGNvbXBsZXRpb24gcG9ydC4gKi8KKworc3RhdGljIERXT1JEIFdJTkFQSQorV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RJblRocmVhZChXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdENvbnRleHQgKmN0eCkKK3sKKyAgICBIQU5ETEUgUGlwZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIERXT1JEIFN0YXJ0ID0gR2V0VGlja0NvdW50KCk7CisgICAgRFdPUkQgRGVhZGxpbmUgPSBTdGFydCArIDEwKjEwMDA7CisgICAgRFdPUkQgRXJyb3IgPSAwOworICAgIERXT1JEIFRpbWVvdXQ7CisgICAgQk9PTCBTdWNjZXNzOworCisgICAgZm9yICggOyA7ICkgeworICAgICAgICBUaW1lb3V0ID0gRGVhZGxpbmUgLSBHZXRUaWNrQ291bnQoKTsKKyAgICAgICAgaWYgKChpbnQpVGltZW91dCA8IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU3VjY2VzcyA9IFdhaXROYW1lZFBpcGUoY3R4LT5BZGRyZXNzLCBUaW1lb3V0KTsKKyAgICAgICAgRXJyb3IgPSBTdWNjZXNzID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgICAgICBzd2l0Y2ggKEVycm9yKSB7CisgICAgICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgICAgICAgICAgUGlwZUhhbmRsZSA9IENyZWF0ZUZpbGUoY3R4LT5BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgT1BFTl9FWElTVElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKFBpcGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFUlJPUl9TRU1fVElNRU9VVDoKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhjdHgtPklvY3BIYW5kbGUsIEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVMT05HX1BUUilQaXBlSGFuZGxlLCBjdHgtPk92ZXJsYXBwZWQpKQorICAgICAgICBDbG9zZUhhbmRsZShQaXBlSGFuZGxlKTsKKyAgICBmcmVlKGN0eCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX1dhaXROYW1lZFBpcGVBbmRDb25uZWN0X2RvYywKKyAgICAiV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QoYWRkciwgaW9jcF9oYW5kbGUpIC0+IE92ZXJsYXBwZWRbcGlwZV9oYW5kbGVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBjb25uZWN0aW9uIHRvIGFkZHJlc3MsIG5vdGlmeWluZyBpb2NwX2hhbmRsZSB3aGVuXG4iCisgICAgImZpbmlzaGVkIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1dhaXROYW1lZFBpcGVBbmRDb25uZWN0KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKkFkZHJlc3M7CisgICAgUHlfc3NpemVfdCBBZGRyZXNzTGVuZ3RoOworICAgIEhBTkRMRSBJb2NwSGFuZGxlOworICAgIE9WRVJMQVBQRUQgT3ZlcmxhcHBlZDsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisgICAgV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RDb250ZXh0ICpjdHg7CisgICAgUHlfc3NpemVfdCBDb250ZXh0TGVuZ3RoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIyIgRl9IQU5ETEUgRl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmQWRkcmVzcywgJkFkZHJlc3NMZW5ndGgsICZJb2NwSGFuZGxlLCAmT3ZlcmxhcHBlZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIENvbnRleHRMZW5ndGggPSAoQWRkcmVzc0xlbmd0aCArCisgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdENvbnRleHQsIEFkZHJlc3MpKTsKKyAgICBjdHggPSBjYWxsb2MoMSwgQ29udGV4dExlbmd0aCArIDEpOworICAgIGlmIChjdHggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgbWVtY3B5KGN0eC0+QWRkcmVzcywgQWRkcmVzcywgQWRkcmVzc0xlbmd0aCArIDEpOworICAgIGN0eC0+T3ZlcmxhcHBlZCA9ICZzZWxmLT5vdmVybGFwcGVkOworICAgIGN0eC0+SW9jcEhhbmRsZSA9IElvY3BIYW5kbGU7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9XQUlUX05BTUVEX1BJUEVfQU5EX0NPTk5FQ1Q7CisgICAgc2VsZi0+aGFuZGxlID0gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBRdWV1ZVVzZXJXb3JrSXRlbShXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdEluVGhyZWFkLCBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RfRVhFQ1VURUxPTkdGVU5DVElPTik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorT3ZlcmxhcHBlZF9nZXRhZGRyZXNzKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVm9pZFB0cigmc2VsZi0+b3ZlcmxhcHBlZCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK092ZXJsYXBwZWRfZ2V0cGVuZGluZyhPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoIUhhc092ZXJsYXBwZWRJb0NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnR5cGUgIT0gVFlQRV9OT1RfU1RBUlRFRCk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBPdmVybGFwcGVkX21ldGhvZHNbXSA9IHsKKyAgICB7ImdldHJlc3VsdCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9nZXRyZXN1bHQsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9nZXRyZXN1bHRfZG9jfSwKKyAgICB7ImNhbmNlbCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9jYW5jZWwsCisgICAgIE1FVEhfTk9BUkdTLCBPdmVybGFwcGVkX2NhbmNlbF9kb2N9LAorICAgIHsiUmVhZEZpbGUiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfUmVhZEZpbGUsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9SZWFkRmlsZV9kb2N9LAorICAgIHsiV1NBUmVjdiIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XU0FSZWN2LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV1NBUmVjdl9kb2N9LAorICAgIHsiV3JpdGVGaWxlIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dyaXRlRmlsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dyaXRlRmlsZV9kb2N9LAorICAgIHsiV1NBU2VuZCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XU0FTZW5kLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV1NBU2VuZF9kb2N9LAorICAgIHsiQWNjZXB0RXgiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfQWNjZXB0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9BY2NlcHRFeF9kb2N9LAorICAgIHsiQ29ubmVjdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Nvbm5lY3RFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Nvbm5lY3RFeF9kb2N9LAorICAgIHsiRGlzY29ubmVjdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeF9kb2N9LAorICAgIHsiQ29ubmVjdE5hbWVkUGlwZSIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZV9kb2N9LAorICAgIHsiV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QiLAorICAgICAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdF9kb2N9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5TWVtYmVyRGVmIE92ZXJsYXBwZWRfbWVtYmVyc1tdID0geworICAgIHsiZXJyb3IiLCBUX1VMT05HLAorICAgICBvZmZzZXRvZihPdmVybGFwcGVkT2JqZWN0LCBlcnJvciksCisgICAgIFJFQURPTkxZLCAiRXJyb3IgZnJvbSBsYXN0IG9wZXJhdGlvbiJ9LAorICAgIHsiZXZlbnQiLCBUX0hBTkRMRSwKKyAgICAgb2Zmc2V0b2YoT3ZlcmxhcHBlZE9iamVjdCwgb3ZlcmxhcHBlZCkgKyBvZmZzZXRvZihPVkVSTEFQUEVELCBoRXZlbnQpLAorICAgICBSRUFET05MWSwgIk92ZXJsYXBwZWQgZXZlbnQgaGFuZGxlIn0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgT3ZlcmxhcHBlZF9nZXRzZXRzW10gPSB7CisgICAgeyJhZGRyZXNzIiwgKGdldHRlcilPdmVybGFwcGVkX2dldGFkZHJlc3MsIE5VTEwsCisgICAgICJBZGRyZXNzIG9mIG92ZXJsYXBwZWQgc3RydWN0dXJlIn0sCisgICAgeyJwZW5kaW5nIiwgKGdldHRlcilPdmVybGFwcGVkX2dldHBlbmRpbmcsIE5VTEwsCisgICAgICJXaGV0aGVyIHRoZSBvcGVyYXRpb24gaXMgcGVuZGluZyJ9LAorICAgIHtOVUxMfSwKK307CisKK1B5VHlwZU9iamVjdCBPdmVybGFwcGVkVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAvKiB0cF9uYW1lICAgICAgICAgICAqLyAiX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCIsCisgICAgLyogdHBfYmFzaWNzaXplICAgICAgKi8gc2l6ZW9mKE92ZXJsYXBwZWRPYmplY3QpLAorICAgIC8qIHRwX2l0ZW1zaXplICAgICAgICovIDAsCisgICAgLyogdHBfZGVhbGxvYyAgICAgICAgKi8gKGRlc3RydWN0b3IpIE92ZXJsYXBwZWRfZGVhbGxvYywKKyAgICAvKiB0cF9wcmludCAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2dldGF0dHIgICAgICAgICovIDAsCisgICAgLyogdHBfc2V0YXR0ciAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yZXNlcnZlZCAgICAgICAqLyAwLAorICAgIC8qIHRwX3JlcHIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfYXNfbnVtYmVyICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19zZXF1ZW5jZSAgICAqLyAwLAorICAgIC8qIHRwX2FzX21hcHBpbmcgICAgICovIDAsCisgICAgLyogdHBfaGFzaCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9jYWxsICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX3N0ciAgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZ2V0YXR0cm8gICAgICAgKi8gMCwKKyAgICAvKiB0cF9zZXRhdHRybyAgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX2J1ZmZlciAgICAgICovIDAsCisgICAgLyogdHBfZmxhZ3MgICAgICAgICAgKi8gUHlfVFBGTEFHU19ERUZBVUxULAorICAgIC8qIHRwX2RvYyAgICAgICAgICAgICovICJPVkVSTEFQUEVEIHN0cnVjdHVyZSB3cmFwcGVyIiwKKyAgICAvKiB0cF90cmF2ZXJzZSAgICAgICAqLyAwLAorICAgIC8qIHRwX2NsZWFyICAgICAgICAgICovIDAsCisgICAgLyogdHBfcmljaGNvbXBhcmUgICAgKi8gMCwKKyAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLyAwLAorICAgIC8qIHRwX2l0ZXIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfaXRlcm5leHQgICAgICAgKi8gMCwKKyAgICAvKiB0cF9tZXRob2RzICAgICAgICAqLyBPdmVybGFwcGVkX21ldGhvZHMsCisgICAgLyogdHBfbWVtYmVycyAgICAgICAgKi8gT3ZlcmxhcHBlZF9tZW1iZXJzLAorICAgIC8qIHRwX2dldHNldCAgICAgICAgICovIE92ZXJsYXBwZWRfZ2V0c2V0cywKKyAgICAvKiB0cF9iYXNlICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2RpY3QgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZGVzY3JfZ2V0ICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZXNjcl9zZXQgICAgICAqLyAwLAorICAgIC8qIHRwX2RpY3RvZmZzZXQgICAgICovIDAsCisgICAgLyogdHBfaW5pdCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9hbGxvYyAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX25ldyAgICAgICAgICAgICovIE92ZXJsYXBwZWRfbmV3LAorfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIG92ZXJsYXBwZWRfZnVuY3Rpb25zW10gPSB7CisgICAgeyJDcmVhdGVJb0NvbXBsZXRpb25Qb3J0Iiwgb3ZlcmxhcHBlZF9DcmVhdGVJb0NvbXBsZXRpb25Qb3J0LAorICAgICBNRVRIX1ZBUkFSR1MsIENyZWF0ZUlvQ29tcGxldGlvblBvcnRfZG9jfSwKKyAgICB7IkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMiLCBvdmVybGFwcGVkX0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMsCisgICAgIE1FVEhfVkFSQVJHUywgR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2N9LAorICAgIHsiUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMiLCBvdmVybGFwcGVkX1Bvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzLAorICAgICBNRVRIX1ZBUkFSR1MsIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvY30sCisgICAgeyJGb3JtYXRNZXNzYWdlIiwgb3ZlcmxhcHBlZF9Gb3JtYXRNZXNzYWdlLAorICAgICBNRVRIX1ZBUkFSR1MsIEZvcm1hdE1lc3NhZ2VfZG9jfSwKKyAgICB7IkJpbmRMb2NhbCIsIG92ZXJsYXBwZWRfQmluZExvY2FsLAorICAgICBNRVRIX1ZBUkFSR1MsIEJpbmRMb2NhbF9kb2N9LAorICAgIHsiUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlIiwgb3ZlcmxhcHBlZF9SZWdpc3RlcldhaXRXaXRoUXVldWUsCisgICAgIE1FVEhfVkFSQVJHUywgUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlX2RvY30sCisgICAgeyJVbnJlZ2lzdGVyV2FpdCIsIG92ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXQsCisgICAgIE1FVEhfVkFSQVJHUywgVW5yZWdpc3RlcldhaXRfZG9jfSwKKyAgICB7IkNyZWF0ZUV2ZW50Iiwgb3ZlcmxhcHBlZF9DcmVhdGVFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBDcmVhdGVFdmVudF9kb2N9LAorICAgIHsiU2V0RXZlbnQiLCBvdmVybGFwcGVkX1NldEV2ZW50LAorICAgICBNRVRIX1ZBUkFSR1MsIFNldEV2ZW50X2RvY30sCisgICAgeyJSZXNldEV2ZW50Iiwgb3ZlcmxhcHBlZF9SZXNldEV2ZW50LAorICAgICBNRVRIX1ZBUkFSR1MsIFJlc2V0RXZlbnRfZG9jfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3ZlcmxhcHBlZF9tb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfb3ZlcmxhcHBlZCIsCisgICAgTlVMTCwKKyAgICAtMSwKKyAgICBvdmVybGFwcGVkX2Z1bmN0aW9ucywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCisjZGVmaW5lIFdJTkFQSV9DT05TVEFOVChmbXQsIGNvbikgXAorICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICNjb24sIFB5X0J1aWxkVmFsdWUoZm10LCBjb24pKQorCitQeU1PRElOSVRfRlVOQworUHlJbml0X19vdmVybGFwcGVkKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm0sICpkOworCisgICAgLyogRW5zdXJlIFdTQVN0YXJ0dXAoKSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemluZyBmdW5jdGlvbiBwb2ludGVycyAqLworICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9zb2NrZXQiKTsKKyAgICBpZiAoIW0pCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihtKTsKKworICAgIGlmIChpbml0aWFsaXplX2Z1bmN0aW9uX3BvaW50ZXJzKCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeVR5cGVfUmVhZHkoJk92ZXJsYXBwZWRUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmb3ZlcmxhcHBlZF9tb2R1bGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIk92ZXJsYXBwZWQiLCAoUHlPYmplY3QgKikmT3ZlcmxhcHBlZFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKKworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfSU9fUEVORElORyk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBFUlJPUl9ORVROQU1FX0RFTEVURUQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfU0VNX1RJTUVPVVQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgSU5GSU5JVEUpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0hBTkRMRSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0hBTkRMRSwgTlVMTCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBTT19VUERBVEVfQUNDRVBUX0NPTlRFWFQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBURl9SRVVTRV9TT0NLRVQpOworCisgICAgcmV0dXJuIG07Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jIGIvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYwppbmRleCBlNTk4MDQ2Li4zNmU5ODkzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCisrKyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKQEAgLTgzLDU0ICs4Myw3OCBAQAogICAgICAgICAgICBpbnQgbGluZW5vLCAgICAgICAgICAgICAgICAgIC8qIGluY2x1ZGUgbGluZSBudW1iZXJzPyAgICAgICAgICovCiAgICAgICAgICAgIGludCBjb2xfb2Zmc2V0KSAgICAgICAgICAgICAgLyogaW5jbHVkZSBjb2x1bW4gb2Zmc2V0cz8gICAgICAgKi8KIHsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTCwgKnc7CisKICAgICBpZiAobiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQorCiAgICAgaWYgKElTTk9OVEVSTUlOQUwoVFlQRShuKSkpIHsKICAgICAgICAgaW50IGk7Ci0gICAgICAgIFB5T2JqZWN0ICp2OwotICAgICAgICBQeU9iamVjdCAqdzsKIAotICAgICAgICB2ID0gbWtzZXEoMSArIE5DSChuKSArIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAodik7CisgICAgICAgIHJlc3VsdCA9IG1rc2VxKDEgKyBOQ0gobikgKyAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKTsKLSAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgcmV0dXJuICgoUHlPYmplY3QqKSBOVUxMKTsKLSAgICAgICAgfQotICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCAwLCB3KTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMCwgdyk7CisKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSsrKSB7CiAgICAgICAgICAgICB3ID0gbm9kZTJ0dXBsZShDSElMRChuLCBpKSwgbWtzZXEsIGFkZGVsZW0sIGxpbmVubywgY29sX29mZnNldCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCBpKzEsIHcpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCBpKzEsIHcpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkKLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHYsIGkrMSwgUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKSk7Ci0gICAgICAgIHJldHVybiAodik7CisgICAgICAgIGlmIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpIHsKKyAgICAgICAgICAgIHcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCBpKzEsIHcpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKElTVEVSTUlOQUwoVFlQRShuKSkpIHsKLSAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IG1rc2VxKDIgKyBsaW5lbm8gKyBjb2xfb2Zmc2V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKSk7Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDEsIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSkpOwotICAgICAgICAgICAgaWYgKGxpbmVubyA9PSAxKQotICAgICAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMiwgUHlMb25nX0Zyb21Mb25nKG4tPm5fbGluZW5vKSk7Ci0gICAgICAgICAgICBpZiAoY29sX29mZnNldCA9PSAxKQotICAgICAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMywgUHlMb25nX0Zyb21Mb25nKG4tPm5fY29sX29mZnNldCkpOworICAgICAgICByZXN1bHQgPSBta3NlcSgyICsgbGluZW5vICsgY29sX29mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMCwgdyk7CisKKyAgICAgICAgdyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDEsIHcpOworCisgICAgICAgIGlmIChsaW5lbm8gPT0gMSkgeworICAgICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2xpbmVubyk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDIsIHcpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAocmVzdWx0KTsKKworICAgICAgICBpZiAoY29sX29mZnNldCA9PSAxKSB7CisgICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKG4tPm5fY29sX29mZnNldCk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDMsIHcpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5yZWNvZ25pemVkIHBhcnNlIHRyZWUgbm9kZSB0eXBlIik7CiAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7CiAgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIC8qCiAgKiAgRW5kIG9mIG1hdGVyaWFsIGNvcHlyaWdodGVkIGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bS4KQEAgLTQ1MywzMyArNDc3LDQ2IEBACiBzdGF0aWMgUHlPYmplY3QqCiBwYXJzZXJfY29tcGlsZXN0KFB5U1RfT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQogewotICAgIFB5T2JqZWN0KiAgICAgcmVzID0gMDsKLSAgICBQeUFyZW5hKiAgICAgIGFyZW5hOworICAgIFB5T2JqZWN0KiAgICAgcmVzID0gTlVMTDsKKyAgICBQeUFyZW5hKiAgICAgIGFyZW5hID0gTlVMTDsKICAgICBtb2RfdHkgICAgICAgIG1vZDsKLSAgICBjaGFyKiAgICAgICAgIHN0ciA9ICI8c3ludGF4LXRyZWU+IjsKKyAgICBQeU9iamVjdCogICAgIGZpbGVuYW1lID0gTlVMTDsKICAgICBpbnQgb2s7CiAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsic3QiLCAiZmlsZW5hbWUiLCBOVUxMfTsKIAogICAgIGlmIChzZWxmID09IE5VTEwgfHwgUHlNb2R1bGVfQ2hlY2soc2VsZikpCi0gICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiTyF8czpjb21waWxlc3QiLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5U1RfVHlwZSwgJnNlbGYsICZzdHIpOworICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk8hfE8mOmNvbXBpbGVzdCIsIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlTVF9UeXBlLCAmc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lKTsKICAgICBlbHNlCi0gICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifHM6Y29tcGlsZSIsICZrZXl3b3Jkc1sxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cik7CisgICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE8mOmNvbXBpbGUiLCAma2V5d29yZHNbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSk7CisgICAgaWYgKCFvaykKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGlmIChvaykgewotICAgICAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7Ci0gICAgICAgIGlmIChhcmVuYSkgewotICAgICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShzZWxmLT5zdF9ub2RlLCAmKHNlbGYtPnN0X2ZsYWdzKSwgc3RyLCBhcmVuYSk7Ci0gICAgICAgICAgIGlmIChtb2QpIHsKLSAgICAgICAgICAgICAgIHJlcyA9IChQeU9iamVjdCAqKVB5QVNUX0NvbXBpbGUobW9kLCBzdHIsICYoc2VsZi0+c3RfZmxhZ3MpLCBhcmVuYSk7Ci0gICAgICAgICAgIH0KLSAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKLSAgICAgICAgfQorICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxzeW50YXgtdHJlZT4iKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIHJldHVybiAocmVzKTsKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgaWYgKCFhcmVuYSkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KHNlbGYtPnN0X25vZGUsICZzZWxmLT5zdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgYXJlbmEpOworICAgIGlmICghbW9kKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgcmVzID0gKFB5T2JqZWN0ICopUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlbGYtPnN0X2ZsYWdzLCAtMSwgYXJlbmEpOworZXJyb3I6CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisgICAgaWYgKGFyZW5hICE9IE5VTEwpCisgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogCkBAIC04MDksOCArODQ2LDEzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdHJuID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICBpZiAoc3RybiAhPSBOVUxMKQotICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkoc3RybiwgdGVtcF9zdHIsIGxlbiArIDEpOworICAgICAgICAgICAgaWYgKHN0cm4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGVsZW0pOworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHN0cm4sIHRlbXBfc3RyLCBsZW4gKyAxKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICghSVNOT05URVJNSU5BTCh0eXBlKSkgewpAQCAtODcwLDcgKzkxMiw3IEBACiAgICAgICAgICAqICBUaGUgdHVwbGUgaXMgc2ltcGxlLCBidXQgaXQgZG9lc24ndCBzdGFydCB3aXRoIGEgc3RhcnQgc3ltYm9sLgogICAgICAgICAgKiAgUmFpc2UgYW4gZXhjZXB0aW9uIG5vdyBhbmQgYmUgZG9uZSB3aXRoIGl0LgogICAgICAgICAgKi8KLSAgICAgICAgdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCJvcyIsIHR1cGxlLAorICAgICAgICB0dXBsZSA9IFB5X0J1aWxkVmFsdWUoIk9zIiwgdHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIHN5bnRheC10cmVlOyBjYW5ub3Qgc3RhcnQgd2l0aCB0ZXJtaW5hbCBzeW1ib2wuIik7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChwYXJzZXJfZXJyb3IsIHR1cGxlKTsKICAgICAgICAgUHlfWERFQ1JFRih0dXBsZSk7CkBAIC05MDYsOCArOTQ4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXMtPm5fc3RyID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcy0+bl9zdHIgIT0gTlVMTCAmJiB0ZW1wICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkocmVzLT5uX3N0ciwgdGVtcCwgbGVuICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcy0+bl9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkocmVzLT5uX3N0ciwgdGVtcCwgbGVuICsgMSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCmluZGV4IDc2N2E2NjUuLjhjZDU0ODUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKQEAgLTEsMTUgKzEsMTQgQEAKIAogLyogUE9TSVggbW9kdWxlIGltcGxlbWVudGF0aW9uICovCiAKLS8qIFRoaXMgZmlsZSBpcyBhbHNvIHVzZWQgZm9yIFdpbmRvd3MgTlQvTVMtV2luIGFuZCBPUy8yLiAgSW4gdGhhdCBjYXNlIHRoZQotICAgbW9kdWxlIGFjdHVhbGx5IGNhbGxzIGl0c2VsZiAnbnQnIG9yICdvczInLCBub3QgJ3Bvc2l4JywgYW5kIGEgZmV3CisvKiBUaGlzIGZpbGUgaXMgYWxzbyB1c2VkIGZvciBXaW5kb3dzIE5UL01TLVdpbi4gIEluIHRoYXQgY2FzZSB0aGUKKyAgIG1vZHVsZSBhY3R1YWxseSBjYWxscyBpdHNlbGYgJ250Jywgbm90ICdwb3NpeCcsIGFuZCBhIGZldwogICAgZnVuY3Rpb25zIGFyZSBlaXRoZXIgdW5pbXBsZW1lbnRlZCBvciBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseS4gIFRoZSBzb3VyY2UKICAgIGFzc3VtZXMgdGhhdCBmb3IgV2luZG93cyBOVCwgdGhlIG1hY3JvICdNU19XSU5ET1dTJyBpcyBkZWZpbmVkIGluZGVwZW5kZW50CiAgICBvZiB0aGUgY29tcGlsZXIgdXNlZC4gIERpZmZlcmVudCBjb21waWxlcnMgZGVmaW5lIHRoZWlyIG93biBmZWF0dXJlCi0gICB0ZXN0IG1hY3JvLCBlLmcuICdfX0JPUkxBTkRDX18nIG9yICdfTVNDX1ZFUicuICBGb3IgT1MvMiwgdGhlIGNvbXBpbGVyCi0gICBpbmRlcGVuZGVudCBtYWNybyBQWU9TX09TMiBzaG91bGQgYmUgZGVmaW5lZC4gIE9uIE9TLzIgdGhlIGRlZmF1bHQKLSAgIGNvbXBpbGVyIGlzIGFzc3VtZWQgdG8gYmUgSUJNJ3MgVmlzdWFsQWdlIEMrKyAoVkFDUFApLiAgUFlDQ19HQ0MgaXMgdXNlZAotICAgYXMgdGhlIGNvbXBpbGVyIHNwZWNpZmljIG1hY3JvIGZvciB0aGUgRU1YIHBvcnQgb2YgZ2NjIHRvIE9TLzIuICovCisgICB0ZXN0IG1hY3JvLCBlLmcuICdfX0JPUkxBTkRDX18nIG9yICdfTVNDX1ZFUicuICovCisKKwogCiAjaWZkZWYgX19BUFBMRV9fCiAgICAvKgpAQCAtMzAsMTEgKzI5LDYgQEAKICNpbmNsdWRlICJwb3NpeG1vZHVsZS5oIgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fVk1TKQotIyAgICBlcnJvciAiUEVQIDExOiBWTVMgaXMgbm93IHVuc3VwcG9ydGVkLCBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy40IgotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4KLSNlbmRpZiAvKiBkZWZpbmVkKF9fVk1TKSAqLwotCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC00NiwyMiArNDAsNiBAQAogY29ycmVzcG9uZGluZyBVbml4IG1hbnVhbCBlbnRyaWVzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNhbGxzLiIpOwogCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2Vycm9yICJQRVAgMTE6IE9TLzIgaXMgbm93IHVuc3VwcG9ydGVkLCBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy40IgotI2RlZmluZSAgSU5DTF9ET1MKLSNkZWZpbmUgIElOQ0xfRE9TRVJST1JTCi0jZGVmaW5lICBJTkNMX0RPU1BST0NFU1MKLSNkZWZpbmUgIElOQ0xfTk9QTUFQSQotI2luY2x1ZGUgPG9zMi5oPgotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxpby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2VuZGlmCi0jaW5jbHVkZSAib3NkZWZzLmgiCi0jZW5kaWYKLQogI2lmZGVmIEhBVkVfU1lTX1VJT19ICiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogI2VuZGlmCkBAIC0xMTQsNyArOTIsNyBAQAogI3VuZGVmIEhBVkVfU0NIRURfU0VUQUZGSU5JVFkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX1NZU19YQVRUUl9IKSAmJiBkZWZpbmVkKF9fR0xJQkNfXykKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX1hBVFRSX0gpICYmIGRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pICYmICFkZWZpbmVkKF9fR05VX18pCiAjZGVmaW5lIFVTRV9YQVRUUlMKICNlbmRpZgogCkBAIC0xMzIsNiArMTEwLDE4IEBACiAjaW5jbHVkZSA8ZGxmY24uaD4KICNlbmRpZgogCisjaWZkZWYgX19ocHV4CisjaW5jbHVkZSA8c3lzL21wY3RsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgXAorICAgIGRlZmluZWQoX19PcGVuQlNEX18pICAgfHwgXAorICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgfHwgXAorICAgIGRlZmluZWQoX19OZXRCU0RfXykgICAgfHwgXAorICAgIGRlZmluZWQoX19BUFBMRV9fKQorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogIyAgZGVmaW5lIFRFUk1TSVpFX1VTRV9DT05JTwogI2VsaWYgZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKQpAQCAtMTQ2LDI5ICsxMzYsMTkgQEAKIAogLyogVmFyaW91cyBjb21waWxlcnMgaGF2ZSBvbmx5IGNlcnRhaW4gcG9zaXggZnVuY3Rpb25zICovCiAvKiBYWFggR29zaCBJIHdpc2ggdGhlc2Ugd2VyZSBhbGwgbW92ZWQgaW50byBweWNvbmZpZy5oICovCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbHNlCiAjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoX19RTlhfXykgICAgICAgICAgIC8qIFdhdGNvbSBjb21waWxlciAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgMQogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQotI2lmIGRlZmluZWQoX19PUzJfXykKLSNkZWZpbmUgSEFWRV9FWEVDViAgICAgIDEKLSNkZWZpbmUgSEFWRV9XQUlUICAgICAgIDEKLSNlbmRpZgogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNlbHNlCiAjaWZkZWYgX19CT1JMQU5EQ19fICAgICAgICAgICAgIC8qIEJvcmxhbmQgY29tcGlsZXIgKi8KICNkZWZpbmUgSEFWRV9FWEVDViAgICAgIDEKLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9PUEVORElSICAgIDEKICNkZWZpbmUgSEFWRV9QSVBFICAgICAgIDEKICNkZWZpbmUgSEFWRV9TWVNURU0gICAgIDEKICNkZWZpbmUgSEFWRV9XQUlUICAgICAgIDEKICNlbHNlCiAjaWZkZWYgX01TQ19WRVIgICAgICAgICAvKiBNaWNyb3NvZnQgY29tcGlsZXIgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9HRVRQUElEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRMT0dJTiAgIDEKICNkZWZpbmUgSEFWRV9TUEFXTlYgICAgIDEKQEAgLTE3OSwxNiArMTU5LDEyIEBACiAjZGVmaW5lIEhBVkVfRlNZTkMgICAgICAxCiAjZGVmaW5lIGZzeW5jIF9jb21taXQKICNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykgfHwgZGVmaW5lZChfX1ZNUykKLS8qIEV2ZXJ5dGhpbmcgbmVlZGVkIGlzIGRlZmluZWQgaW4gUEMvb3MyZW14L3B5Y29uZmlnLmggb3Igdm1zL3B5Y29uZmlnLmggKi8KLSNlbHNlICAgICAgICAgICAgICAgICAgIC8qIGFsbCBvdGhlciBjb21waWxlcnMgKi8KIC8qIFVuaXggZnVuY3Rpb25zIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lc24ndCBjaGVjayBmb3IgKi8KICNkZWZpbmUgSEFWRV9FWEVDViAgICAgIDEKICNkZWZpbmUgSEFWRV9GT1JLICAgICAgIDEKICNpZiBkZWZpbmVkKF9fVVNMQ19fKSAmJiBkZWZpbmVkKF9fU0NPX1ZFUlNJT05fXykgICAgICAgLyogU0NPIFVESyBDb21waWxlciAqLwogI2RlZmluZSBIQVZFX0ZPUksxICAgICAgMQogI2VuZGlmCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfR0VURUdJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VURVVJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VUR0lEICAgICAxCkBAIC0yMDAsMTQgKzE3NiwxNSBAQAogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQogI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQogI2RlZmluZSBIQVZFX1RUWU5BTUUgICAgMQotI2VuZGlmICAvKiBQWU9TX09TMiAmJiBQWUNDX0dDQyAmJiBfX1ZNUyAqLwogI2VuZGlmICAvKiBfTVNDX1ZFUiAqLwogI2VuZGlmICAvKiBfX0JPUkxBTkRDX18gKi8KICNlbmRpZiAgLyogISBfX1dBVENPTUNfXyB8fCBfX1FOWF9fICovCi0jZW5kaWYgLyogISBfX0lCTUNfXyAqLwogCiAKLQorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIG9zCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD04Y2ZmMDk2ZDExMzMyODhmXSovCiAKICNpZm5kZWYgX01TQ19WRVIKIApAQCAtMzM1LDEwICszMTIsNiBAQAogI2VuZGlmCiAjZW5kaWYgLyogX01TQ19WRVIgKi8KIAotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmIC8qIE9TMiAqLwotCiAjaWZuZGVmIE1BWFBBVEhMRU4KICNpZiBkZWZpbmVkKFBBVEhfTUFYKSAmJiBQQVRIX01BWCA+IDEwMjQKICNkZWZpbmUgTUFYUEFUSExFTiBQQVRIX01BWApAQCAtMzgwLDcgKzM1Myw3IEBACiAjdW5kZWYgU1RBVAogI3VuZGVmIEZTVEFUCiAjdW5kZWYgU1RSVUNUX1NUQVQKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogIyAgICAgICBkZWZpbmUgU1RBVCB3aW4zMl9zdGF0CiAjICAgICAgIGRlZmluZSBMU1RBVCB3aW4zMl9sc3RhdAogIyAgICAgICBkZWZpbmUgRlNUQVQgd2luMzJfZnN0YXQKQEAgLTQwMyw2ICszNzYsOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2RlZmluZSBEV09SRF9NQVggNDI5NDk2NzI5NVUKKwogCiAjaWZkZWYgTVNfV0lORE9XUwogc3RhdGljIGludApAQCAtNDM2LDEwOCArNDExLDIxMyBAQAogaW50CiBfUHlfVWlkX0NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwKQogeworICAgIHVpZF90IHVpZDsKKyAgICBQeU9iamVjdCAqaW5kZXg7CiAgICAgaW50IG92ZXJmbG93OwogICAgIGxvbmcgcmVzdWx0OwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiKTsKKyAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CisKKyAgICBpbmRleCA9IFB5TnVtYmVyX0luZGV4KG9iaik7CisgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ1aWQgc2hvdWxkIGJlIGludGVnZXIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmosICZvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93IDwgMCkKLSAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgaWYgKCFvdmVyZmxvdyAmJiByZXN1bHQgPT0gLTEpIHsKLSAgICAgICAgLyogZXJyb3Igb3IgLTEgKi8KLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgKih1aWRfdCAqKXAgPSAodWlkX3QpLTE7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiB1bnNpZ25lZCB1aWRfdCAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7Ci0gICAgICAgIGlmIChvdmVyZmxvdyA+IDApIHsKLSAgICAgICAgICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgodWlkX3QpdXJlc3VsdCA9PSAodWlkX3QpLTEpCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgICAgICAgICB1cmVzdWx0ID0gcmVzdWx0OworCisgICAgLyoKKyAgICAgKiBIYW5kbGluZyB1aWRfdCBpcyBjb21wbGljYXRlZCBmb3IgdHdvIHJlYXNvbnM6CisgICAgICogICogQWx0aG91Z2ggdWlkX3QgaXMgKGFsd2F5cz8pIHVuc2lnbmVkLCBpdCBzdGlsbAorICAgICAqICAgIGFjY2VwdHMgLTEuCisgICAgICogICogV2UgZG9uJ3Qga25vdyBpdHMgc2l6ZSBpbiBhZHZhbmNlLS1pdCBtYXkgYmUKKyAgICAgKiAgICBiaWdnZXIgdGhhbiBhbiBpbnQsIG9yIGl0IG1heSBiZSBzbWFsbGVyIHRoYW4KKyAgICAgKiAgICBhIGxvbmcuCisgICAgICoKKyAgICAgKiBTbyBhIGJpdCBvZiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgaW4gb3JkZXIuCisgICAgICogU3RhcnQgd2l0aCBpbnRlcnByZXRpbmcgdGhlIHZhbHVlIHBhc3NlZAorICAgICAqIGluIGFzIGEgc2lnbmVkIGxvbmcgYW5kIHNlZSBpZiBpdCB3b3Jrcy4KKyAgICAgKi8KKworICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKworICAgIGlmICghb3ZlcmZsb3cpIHsKKyAgICAgICAgdWlkID0gKHVpZF90KXJlc3VsdDsKKworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAvKiBJdCdzIGEgbGVnaXRpbWF0ZSAtMSwgd2UncmUgZG9uZS4gKi8KKyAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICAgICAgfQorCisgICAgICAgIC8qIEFueSBvdGhlciBuZWdhdGl2ZSBudW1iZXIgaXMgZGlzYWxsb3dlZC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKworICAgICAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCiAgICAgICAgIGlmIChzaXplb2YodWlkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCi0gICAgICAgICAgICAodW5zaWduZWQgbG9uZykodWlkX3QpdXJlc3VsdCAhPSB1cmVzdWx0KQotICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAqKHVpZF90ICopcCA9ICh1aWRfdCl1cmVzdWx0OworICAgICAgICAgICAgKGxvbmcpdWlkICE9IHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQorCisgICAgaWYgKG92ZXJmbG93IDwgMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3c7CisKKyAgICAvKgorICAgICAqIE9rYXksIHRoZSB2YWx1ZSBvdmVyZmxvd2VkIGEgc2lnbmVkIGxvbmcuICBJZiBpdAorICAgICAqIGZpdHMgaW4gYW4gKnVuc2lnbmVkKiBsb25nLCBpdCBtYXkgc3RpbGwgYmUgb2theSwKKyAgICAgKiBhcyB1aWRfdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBvbiB0aGlzIHBsYXRmb3JtLgorICAgICAqLworICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoaW5kZXgpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHVpZCA9ICh1aWRfdCl1cmVzdWx0OworCisgICAgLyoKKyAgICAgKiBJZiB1aWQgPT0gKHVpZF90KS0xLCB0aGUgdXNlciBhY3R1YWxseSBwYXNzZWQgaW4gVUxPTkdfTUFYLAorICAgICAqIGJ1dCB0aGlzIHZhbHVlIHdvdWxkIGdldCBpbnRlcnByZXRlZCBhcyAodWlkX3QpLTEgIGJ5IGNob3duCisgICAgICogYW5kIGl0cyBzaWJsaW5ncy4gICBUaGF0J3Mgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQhICBTbyB3ZQorICAgICAqIHRocm93IGFuIG92ZXJmbG93IGV4Y2VwdGlvbiBpbnN0ZWFkLiAgIChXZSBhbHJlYWR5CisgICAgICogaGFuZGxlZCBhIHJlYWwgLTEgd2l0aCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coKSBhYm92ZS4pCisgICAgICovCisgICAgaWYgKHVpZCA9PSAodWlkX3QpLTEpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisKKyAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCisgICAgaWYgKHNpemVvZih1aWRfdCkgPCBzaXplb2YobG9uZykgJiYKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpdWlkICE9IHVyZXN1bHQpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworc3VjY2VzczoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOworICAgICoodWlkX3QgKilwID0gdWlkOwogICAgIHJldHVybiAxOwogCi1PdmVyZmxvd0Rvd246Cit1bmRlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJ1c2VyIGlkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7Ci0gICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICJ1aWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKKyAgICBnb3RvIGZhaWw7CiAKLU92ZXJmbG93VXA6CitvdmVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgInVzZXIgaWQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgInVpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK2ZhaWw6CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICByZXR1cm4gMDsKIH0KIAogaW50CiBfUHlfR2lkX0NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwKQogeworICAgIGdpZF90IGdpZDsKKyAgICBQeU9iamVjdCAqaW5kZXg7CiAgICAgaW50IG92ZXJmbG93OwogICAgIGxvbmcgcmVzdWx0OwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiKTsKKyAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CisKKyAgICBpbmRleCA9IFB5TnVtYmVyX0luZGV4KG9iaik7CisgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJnaWQgc2hvdWxkIGJlIGludGVnZXIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmosICZvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93IDwgMCkKLSAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgaWYgKCFvdmVyZmxvdyAmJiByZXN1bHQgPT0gLTEpIHsKLSAgICAgICAgLyogZXJyb3Igb3IgLTEgKi8KLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgKihnaWRfdCAqKXAgPSAoZ2lkX3QpLTE7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiB1bnNpZ25lZCBnaWRfdCAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7Ci0gICAgICAgIGlmIChvdmVyZmxvdyA+IDApIHsKLSAgICAgICAgICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoZ2lkX3QpdXJlc3VsdCA9PSAoZ2lkX3QpLTEpCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgICAgICAgICB1cmVzdWx0ID0gcmVzdWx0OworCisgICAgLyoKKyAgICAgKiBIYW5kbGluZyBnaWRfdCBpcyBjb21wbGljYXRlZCBmb3IgdHdvIHJlYXNvbnM6CisgICAgICogICogQWx0aG91Z2ggZ2lkX3QgaXMgKGFsd2F5cz8pIHVuc2lnbmVkLCBpdCBzdGlsbAorICAgICAqICAgIGFjY2VwdHMgLTEuCisgICAgICogICogV2UgZG9uJ3Qga25vdyBpdHMgc2l6ZSBpbiBhZHZhbmNlLS1pdCBtYXkgYmUKKyAgICAgKiAgICBiaWdnZXIgdGhhbiBhbiBpbnQsIG9yIGl0IG1heSBiZSBzbWFsbGVyIHRoYW4KKyAgICAgKiAgICBhIGxvbmcuCisgICAgICoKKyAgICAgKiBTbyBhIGJpdCBvZiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgaW4gb3JkZXIuCisgICAgICogU3RhcnQgd2l0aCBpbnRlcnByZXRpbmcgdGhlIHZhbHVlIHBhc3NlZAorICAgICAqIGluIGFzIGEgc2lnbmVkIGxvbmcgYW5kIHNlZSBpZiBpdCB3b3Jrcy4KKyAgICAgKi8KKworICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKworICAgIGlmICghb3ZlcmZsb3cpIHsKKyAgICAgICAgZ2lkID0gKGdpZF90KXJlc3VsdDsKKworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAvKiBJdCdzIGEgbGVnaXRpbWF0ZSAtMSwgd2UncmUgZG9uZS4gKi8KKyAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICAgICAgfQorCisgICAgICAgIC8qIEFueSBvdGhlciBuZWdhdGl2ZSBudW1iZXIgaXMgZGlzYWxsb3dlZC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICB9CisKKyAgICAgICAgLyogRW5zdXJlIHRoZSB2YWx1ZSB3YXNuJ3QgdHJ1bmNhdGVkLiAqLwogICAgICAgICBpZiAoc2l6ZW9mKGdpZF90KSA8IHNpemVvZihsb25nKSAmJgotICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKGdpZF90KXVyZXN1bHQgIT0gdXJlc3VsdCkKLSAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgKihnaWRfdCAqKXAgPSAoZ2lkX3QpdXJlc3VsdDsKKyAgICAgICAgICAgIChsb25nKWdpZCAhPSByZXN1bHQpCisgICAgICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKyAgICAgICAgZ290byBzdWNjZXNzOwogICAgIH0KKworICAgIGlmIChvdmVyZmxvdyA8IDApCisgICAgICAgIGdvdG8gdW5kZXJmbG93OworCisgICAgLyoKKyAgICAgKiBPa2F5LCB0aGUgdmFsdWUgb3ZlcmZsb3dlZCBhIHNpZ25lZCBsb25nLiAgSWYgaXQKKyAgICAgKiBmaXRzIGluIGFuICp1bnNpZ25lZCogbG9uZywgaXQgbWF5IHN0aWxsIGJlIG9rYXksCisgICAgICogYXMgZ2lkX3QgbWF5IGJlIHVuc2lnbmVkIGxvbmcgb24gdGhpcyBwbGF0Zm9ybS4KKyAgICAgKi8KKyAgICB1cmVzdWx0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nKGluZGV4KTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBnaWQgPSAoZ2lkX3QpdXJlc3VsdDsKKworICAgIC8qCisgICAgICogSWYgZ2lkID09IChnaWRfdCktMSwgdGhlIHVzZXIgYWN0dWFsbHkgcGFzc2VkIGluIFVMT05HX01BWCwKKyAgICAgKiBidXQgdGhpcyB2YWx1ZSB3b3VsZCBnZXQgaW50ZXJwcmV0ZWQgYXMgKGdpZF90KS0xICBieSBjaG93bgorICAgICAqIGFuZCBpdHMgc2libGluZ3MuICAgVGhhdCdzIG5vdCB3aGF0IHRoZSB1c2VyIG1lYW50ISAgU28gd2UKKyAgICAgKiB0aHJvdyBhbiBvdmVyZmxvdyBleGNlcHRpb24gaW5zdGVhZC4gICAoV2UgYWxyZWFkeQorICAgICAqIGhhbmRsZWQgYSByZWFsIC0xIHdpdGggUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KCkgYWJvdmUuKQorICAgICAqLworICAgIGlmIChnaWQgPT0gKGdpZF90KS0xKQorICAgICAgICBnb3RvIG92ZXJmbG93OworCisgICAgLyogRW5zdXJlIHRoZSB2YWx1ZSB3YXNuJ3QgdHJ1bmNhdGVkLiAqLworICAgIGlmIChzaXplb2YoZ2lkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCisgICAgICAgICh1bnNpZ25lZCBsb25nKWdpZCAhPSB1cmVzdWx0KQorICAgICAgICBnb3RvIG92ZXJmbG93OworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK3N1Y2Nlc3M6CisgICAgUHlfREVDUkVGKGluZGV4KTsKKyAgICAqKGdpZF90ICopcCA9IGdpZDsKICAgICByZXR1cm4gMTsKIAotT3ZlcmZsb3dEb3duOgordW5kZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgaWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgImdpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgIGdvdG8gZmFpbDsKIAotT3ZlcmZsb3dVcDoKK292ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgaWQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgImdpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK2ZhaWw6CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICByZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBNU19XSU5ET1dTICovCkBAIC01NjAsMjUgKzY0MCwyOSBAQAogX2ZkX2NvbnZlcnRlcihQeU9iamVjdCAqbywgaW50ICpwLCBjb25zdCBjaGFyICphbGxvd2VkKQogewogICAgIGludCBvdmVyZmxvdzsKLSAgICBsb25nIGxvbmdfdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobywgJm92ZXJmbG93KTsKLSAgICBpZiAoUHlGbG9hdF9DaGVjayhvKSB8fAotICAgICAgICAobG9uZ192YWx1ZSA9PSAtMSAmJiAhb3ZlcmZsb3cgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBsb25nIGxvbmdfdmFsdWU7CisKKyAgICBQeU9iamVjdCAqaW5kZXggPSBQeU51bWJlcl9JbmRleChvKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSAlcywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkLCBQeV9UWVBFKG8pLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgJXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCwgUHlfVFlQRShvKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIGxvbmdfdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coaW5kZXgsICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICBpZiAob3ZlcmZsb3cgPiAwIHx8IGxvbmdfdmFsdWUgPiBJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25lZCBpbnRlZ2VyIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChvdmVyZmxvdyA8IDAgfHwgbG9uZ192YWx1ZSA8IElOVF9NSU4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIGludGVnZXIgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisKICAgICAqcCA9IChpbnQpbG9uZ192YWx1ZTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTYyNiw3ICs3MTAsNyBAQAogICogICBwYXRoLmZ1bmN0aW9uX25hbWUKICAqICAgICBJZiBub24tTlVMTCwgcGF0aF9jb252ZXJ0ZXIgd2lsbCB1c2UgdGhhdCBhcyB0aGUgbmFtZQogICogICAgIG9mIHRoZSBmdW5jdGlvbiBpbiBlcnJvciBtZXNzYWdlcy4KLSAqICAgICAoSWYgcGF0aC5hcmd1bWVudF9uYW1lIGlzIE5VTEwgaXQgb21pdHMgdGhlIGZ1bmN0aW9uIG5hbWUuKQorICogICAgIChJZiBwYXRoLmZ1bmN0aW9uX25hbWUgaXMgTlVMTCBpdCBvbWl0cyB0aGUgZnVuY3Rpb24gbmFtZS4pCiAgKiAgIHBhdGguYXJndW1lbnRfbmFtZQogICogICAgIElmIG5vbi1OVUxMLCBwYXRoX2NvbnZlcnRlciB3aWxsIHVzZSB0aGF0IGFzIHRoZSBuYW1lCiAgKiAgICAgb2YgdGhlIHBhcmFtZXRlciBpbiBlcnJvciBtZXNzYWdlcy4KQEAgLTY3OCw4ICs3NjIsOCBAQAogICogcGF0aF9jbGVhbnVwKCkuICBIb3dldmVyIGl0IGlzIHNhZmUgdG8gZG8gc28uKQogICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAqZnVuY3Rpb25fbmFtZTsKLSAgICBjaGFyICphcmd1bWVudF9uYW1lOworICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWU7CisgICAgY29uc3QgY2hhciAqYXJndW1lbnRfbmFtZTsKICAgICBpbnQgbnVsbGFibGU7CiAgICAgaW50IGFsbG93X2ZkOwogICAgIHdjaGFyX3QgKndpZGU7CkBAIC02OTAsNiArNzc0LDkgQEAKICAgICBQeU9iamVjdCAqY2xlYW51cDsKIH0gcGF0aF90OwogCisjZGVmaW5lIFBBVEhfVF9JTklUSUFMSVpFKGZ1bmN0aW9uX25hbWUsIG51bGxhYmxlLCBhbGxvd19mZCkgXAorICAgIHtmdW5jdGlvbl9uYW1lLCBOVUxMLCBudWxsYWJsZSwgYWxsb3dfZmQsIE5VTEwsIE5VTEwsIDAsIDAsIE5VTEwsIE5VTEx9CisKIHN0YXRpYyB2b2lkCiBwYXRoX2NsZWFudXAocGF0aF90ICpwYXRoKSB7CiAgICAgaWYgKHBhdGgtPmNsZWFudXApIHsKQEAgLTczNywxNSArODI0LDE0IEBACiAgICAgaWYgKHVuaWNvZGUpIHsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHdjaGFyX3QgKndpZGU7Ci0gICAgICAgIGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfU0laRSh1bmljb2RlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IDMyNzY3KSB7Ci0gICAgICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1ZhbHVlRXJyb3IsICIlcyB0b28gbG9uZyBmb3IgV2luZG93cyIpOworCisgICAgICAgIHdpZGUgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZSh1bmljb2RlLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKCF3aWRlKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotCi0gICAgICAgIHdpZGUgPSBQeVVuaWNvZGVfQXNVbmljb2RlKHVuaWNvZGUpOwotICAgICAgICBpZiAoIXdpZGUpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA+IDMyNzY3KSB7CisgICAgICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1ZhbHVlRXJyb3IsICIlcyB0b28gbG9uZyBmb3IgV2luZG93cyIpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTgwMyw3ICs4ODksNyBAQAogCiAgICAgbGVuZ3RoID0gUHlCeXRlc19HRVRfU0laRShieXRlcyk7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChsZW5ndGggPiBNQVhfUEFUSCkgeworICAgIGlmIChsZW5ndGggPiBNQVhfUEFUSC0xKSB7CiAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CiAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTEwNCwxMCArMTE5MCw2IEBACiAjZWxzZQogICAgIGNoYXIgKiplOwogI2VuZGlmCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBBUElSRVQgcmM7Ci0gICAgY2hhciAgIGJ1ZmZlclsxMDI0XTsgLyogT1MvMiBQcm92aWRlcyBhIERvY3VtZW50ZWQgTWF4IG9mIDEwMjQgQ2hhcnMgKi8KLSNlbmRpZgogCiAgICAgZCA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoZCA9PSBOVUxMKQpAQCAtMTE3NiwyMCArMTI1OCw2IEBACiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICB9CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIHJjID0gRG9zUXVlcnlFeHRMSUJQQVRIKGJ1ZmZlciwgQkVHSU5fTElCUEFUSCk7Ci0gICAgaWYgKHJjID09IE5PX0VSUk9SKSB7IC8qIChub3QgYSB0eXBlLCBlbnZuYW1lIGlzIE5PVCAnQkVHSU5fTElCUEFUSCcpICovCi0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJCRUdJTkxJQlBBVEgiLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSAgICByYyA9IERvc1F1ZXJ5RXh0TElCUEFUSChidWZmZXIsIEVORF9MSUJQQVRIKTsKLSAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsgLyogKG5vdCBhIHR5cG8sIGVudm5hbWUgaXMgTk9UICdFTkRfTElCUEFUSCcpICovCi0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJFTkRMSUJQQVRIIiwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gZDsKIH0KIApAQCAtMTIwMCwyNSArMTI2OCw2IEBACiB7CiAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIH0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKGNoYXIqIG5hbWUpCi17Ci0gICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19PU0Vycm9yLCBuYW1lKTsKLX0KLQotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUoUHlPYmplY3QqIG5hbWUpCi17Ci0gICAgUHlPYmplY3QgKm5hbWVfc3RyLCAqcmM7Ci0gICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZShQeUJ5dGVzX0FzU3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShuYW1lKSk7Ci0gICAgUHlfREVDUkVGKG5hbWUpOwotICAgIHJjID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9zdHIpOwotICAgIFB5X1hERUNSRUYobmFtZV9zdHIpOwotICAgIHJldHVybiByYzsKLX0KIAogI2lmZGVmIE1TX1dJTkRPV1MKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMjM3LDI0ICsxMjg2LDEzIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13aW4zMl9lcnJvcl91bmljb2RlKGNoYXIqIGZ1bmN0aW9uLCB3Y2hhcl90KiBmaWxlbmFtZSkKLXsKLSAgICAvKiBYWFggLSBzZWUgd2luMzJfZXJyb3IgZm9yIGNvbW1lbnRzIG9uICdmdW5jdGlvbicgKi8KLSAgICBlcnJubyA9IEdldExhc3RFcnJvcigpOwotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aFVuaWNvZGVGaWxlbmFtZShlcnJubywgZmlsZW5hbWUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm5vKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIHdpbjMyX2Vycm9yX29iamVjdChjaGFyKiBmdW5jdGlvbiwgUHlPYmplY3QqIGZpbGVuYW1lKQogewogICAgIC8qIFhYWCAtIHNlZSB3aW4zMl9lcnJvciBmb3IgY29tbWVudHMgb24gJ2Z1bmN0aW9uJyAqLwogICAgIGVycm5vID0gR2V0TGFzdEVycm9yKCk7CiAgICAgaWYgKGZpbGVuYW1lKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgZXJybm8sCiAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKICAgICBlbHNlCkBAIC0xMjYzLDEwOCArMTMwMSwzMCBAQAogCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCi0vKgotICogU29tZSBmdW5jdGlvbnMgcmV0dXJuIFdpbjMyIGVycm9ycywgb3RoZXJzIG9ubHkgZXZlciB1c2UgcG9zaXhfZXJyb3IKLSAqICh0aGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4Y2VwdGlvbnMpCi0gKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1wYXRoX3Bvc2l4X2Vycm9yKGNoYXIgKmZ1bmN0aW9uX25hbWUsIHBhdGhfdCAqcGF0aCkKLXsKLSAgICBpZiAocGF0aC0+bmFycm93KQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShwYXRoLT5uYXJyb3cpOwotICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotcGF0aF9lcnJvcihjaGFyICpmdW5jdGlvbl9uYW1lLCBwYXRoX3QgKnBhdGgpCitwYXRoX2Vycm9yKHBhdGhfdCAqcGF0aCkKIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKHBhdGgtPm5hcnJvdykKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKGZ1bmN0aW9uX25hbWUsIHBhdGgtPm5hcnJvdyk7Ci0gICAgaWYgKHBhdGgtPndpZGUpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKGZ1bmN0aW9uX25hbWUsIHBhdGgtPndpZGUpOwotICAgIHJldHVybiB3aW4zMl9lcnJvcihmdW5jdGlvbl9uYW1lLCBOVUxMKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcGF0aC0+b2JqZWN0KTsKICNlbHNlCi0gICAgcmV0dXJuIHBhdGhfcG9zaXhfZXJyb3IoZnVuY3Rpb25fbmFtZSwgcGF0aCk7CisgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBwYXRoLT5vYmplY3QpOwogI2VuZGlmCiB9CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgSGVscGVyIEZ1bmN0aW9uIHRvIFRyaW0gYW5kIEZvcm1hdCBPUy8yIE1lc3NhZ2VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1vczJfZm9ybWF0bXNnKGNoYXIgKm1zZ2J1ZiwgaW50IG1zZ2xlbiwgY2hhciAqcmVhc29uKQotewotICAgIG1zZ2J1Zlttc2dsZW5dID0gJ1wwJzsgLyogT1MvMiBEb2Vzbid0IEd1YXJhbnRlZSBhIFRlcm1pbmF0b3IgKi8KLQotICAgIGlmIChzdHJsZW4obXNnYnVmKSA+IDApIHsgLyogSWYgTm9uLUVtcHR5IE1zZywgVHJpbSBDUkxGICovCi0gICAgICAgIGNoYXIgKmxhc3RjID0gJm1zZ2J1Zlsgc3RybGVuKG1zZ2J1ZiktMSBdOwotCi0gICAgICAgIHdoaWxlIChsYXN0YyA+IG1zZ2J1ZiAmJiBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpsYXN0YykpKQotICAgICAgICAgICAgKmxhc3RjLS0gPSAnXDAnOyAvKiBUcmltIFRyYWlsaW5nIFdoaXRlc3BhY2UgKENSTEYpICovCi0gICAgfQotCi0gICAgLyogQWRkIE9wdGlvbmFsIFJlYXNvbiBUZXh0ICovCi0gICAgaWYgKHJlYXNvbikgewotICAgICAgICBzdHJjYXQobXNnYnVmLCAiIDogIik7Ci0gICAgICAgIHN0cmNhdChtc2didWYsIHJlYXNvbik7Ci0gICAgfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgRGVjb2RlIGFuIE9TLzIgT3BlcmF0aW5nIFN5c3RlbSBFcnJvciBDb2RlCi0gKgotICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBsb29rdXAgYW4gT1MvMiBlcnJvciBjb2RlIGFuZCByZXR1cm4gYQotICogdGV4dCBtZXNzYWdlIHdlIGNhbiB1c2UgdG8gcmFpc2UgYSBQeXRob24gZXhjZXB0aW9uLgotICoKLSAqIE5vdGVzOgotICogICBUaGUgbWVzc2FnZXMgZm9yIGVycm9ycyByZXR1cm5lZCBmcm9tIHRoZSBPUy8yIGtlcm5lbCByZXNpZGUgaW4KLSAqICAgdGhlIGZpbGUgT1NPMDAxLk1TRyBpbiB0aGUgXE9TMiBkaXJlY3RvcnkgaGllcmFyY2h5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGNoYXIgKgotb3MyX3N0cmVycm9yKGNoYXIgKm1zZ2J1ZiwgaW50IG1zZ2J1ZmxlbiwgaW50IGVycm9yY29kZSwgY2hhciAqcmVhc29uKQotewotICAgIEFQSVJFVCByYzsKLSAgICBVTE9ORyAgbXNnbGVuOwotCi0gICAgLyogUmV0cmlldmUgS2VybmVsLVJlbGF0ZWQgRXJyb3IgTWVzc2FnZSBmcm9tIE9TTzAwMS5NU0cgRmlsZSAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9IERvc0dldE1lc3NhZ2UoTlVMTCwgMCwgbXNnYnVmLCBtc2didWZsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIGVycm9yY29kZSwgIm9zbzAwMS5tc2ciLCAmbXNnbGVuKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHJjID09IE5PX0VSUk9SKQotICAgICAgICBvczJfZm9ybWF0bXNnKG1zZ2J1ZiwgbXNnbGVuLCByZWFzb24pOwotICAgIGVsc2UKLSAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIG1zZ2J1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBPUyBlcnJvciAjJWQiLCBlcnJvcmNvZGUpOwotCi0gICAgcmV0dXJuIG1zZ2J1ZjsKLX0KLQotLyogU2V0IGFuIE9TLzItc3BlY2lmaWMgZXJyb3IgYW5kIHJldHVybiBOVUxMLiAgT1MvMiBrZXJuZWwKLSAgIGVycm9ycyBhcmUgbm90IGluIGEgZ2xvYmFsIHZhcmlhYmxlIGUuZy4gJ2Vycm5vJyBub3IgYXJlCi0gICB0aGV5IGNvbmdydWVudCB3aXRoIHBvc2l4IGVycm9yIG51bWJlcnMuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1vczJfZXJyb3IoaW50IGNvZGUpCitwYXRoX2Vycm9yMihwYXRoX3QgKnBhdGgsIHBhdGhfdCAqcGF0aDIpCiB7Ci0gICAgY2hhciB0ZXh0WzEwMjRdOwotICAgIFB5T2JqZWN0ICp2OwotCi0gICAgb3MyX3N0cmVycm9yKHRleHQsIHNpemVvZih0ZXh0KSwgY29kZSwgIiIpOwotCi0gICAgdiA9IFB5X0J1aWxkVmFsdWUoIihpcykiLCBjb2RlLCB0ZXh0KTsKLSAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19PU0Vycm9yLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsgLyogU2lnbmFsIHRvIFB5dGhvbiB0aGF0IGFuIEV4Y2VwdGlvbiBpcyBQZW5kaW5nICovCisjaWZkZWYgTVNfV0lORE9XUworICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgIDAsIHBhdGgtPm9iamVjdCwgcGF0aDItPm9iamVjdCk7CisjZWxzZQorICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKFB5RXhjX09TRXJyb3IsCisgICAgICAgIHBhdGgtPm9iamVjdCwgcGF0aDItPm9iamVjdCk7CisjZW5kaWYKIH0KIAotI2VuZGlmIC8qIE9TMiAqLwogCiAvKiBQT1NJWCBnZW5lcmljIG1ldGhvZHMgKi8KIApAQCAtMTM4OCw2NSArMTM0OCwzMSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfMXN0cihQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LCBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCitwb3NpeF8xc3RyKGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgUHlPYmplY3QgKmFyZ3MsIGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgaW50ICgqZnVuYykoY29uc3QgY2hhciopKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDEgPSBOVUxMOwotICAgIGNoYXIgKnBhdGgxOworICAgIHBhdGhfdCBwYXRoOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9IGZ1bmNfbmFtZTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoMSA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgxKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gKCpmdW5jKShwYXRoMSk7CisgICAgcmVzID0gKCpmdW5jKShwYXRoLm5hcnJvdyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoMSk7Ci0gICAgUHlfREVDUkVGKG9wYXRoMSk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAogCiAjaWZkZWYgTVNfV0lORE9XUwotc3RhdGljIFB5T2JqZWN0Kgotd2luMzJfMXN0cihQeU9iamVjdCogYXJncywgY2hhciogZnVuYywKLSAgICAgICAgICAgY2hhciogZm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNBKShMUENTVFIpLAotICAgICAgICAgICBjaGFyKiB3Zm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNXKShMUFdTVFIpKQotewotICAgIFB5T2JqZWN0ICp1bmk7Ci0gICAgY29uc3QgY2hhciAqYW5zaTsKLSAgICBCT09MIHJlc3VsdDsKLQotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHdmb3JtYXQsICZ1bmkpKQotICAgIHsKLSAgICAgICAgd2NoYXJfdCAqd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pKTsKLSAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJlc3VsdCA9IGZ1bmNXKHdzdHIpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoZnVuYywgdW5pKTsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgUHlFcnJfQ2xlYXIoKTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsICZhbnNpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHdpbjMyX3dhcm5fYnl0ZXNfYXBpKCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXN1bHQgPSBmdW5jQShhbnNpKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuYywgYW5zaSk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotCi19Ci0KIC8qIFRoaXMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHRoZSBDIGxpYnJhcnkncyBjaGRpciBmdW5jdGlvbiwKICAgIGJ1dCBvbmUgdGhhdCBwcm9kdWNlcyBXaW4zMiBlcnJvcnMgaW5zdGVhZCBvZiBET1MgZXJyb3IgY29kZXMuCiAgICBjaGRpciBpcyBlc3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIFNldEN1cnJlbnREaXJlY3Rvcnk7IGhvd2V2ZXIsCkBAIC0xNDU1LDE4ICsxMzgxLDE4IEBACiBzdGF0aWMgQk9PTCBfX3N0ZGNhbGwKIHdpbjMyX2NoZGlyKExQQ1NUUiBwYXRoKQogewotICAgIGNoYXIgbmV3X3BhdGhbTUFYX1BBVEgrMV07CisgICAgY2hhciBuZXdfcGF0aFtNQVhfUEFUSF07CiAgICAgaW50IHJlc3VsdDsKICAgICBjaGFyIGVudls0XSA9ICI9eDoiOwogCiAgICAgaWYoIVNldEN1cnJlbnREaXJlY3RvcnlBKHBhdGgpKQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeUEoTUFYX1BBVEgrMSwgbmV3X3BhdGgpOworICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlBKFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCksIG5ld19wYXRoKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8qIEluIHRoZSBBTlNJIEFQSSwgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgcGF0aHMgbG9uZ2VyCi0gICAgICAgdGhhbiBNQVhfUEFUSC4gKi8KLSAgICBhc3NlcnQocmVzdWx0IDw9IE1BWF9QQVRIKzEpOworICAgICAgIHRoYW4gTUFYX1BBVEgtMSAobm90IGluY2x1ZGluZyB0aGUgZmluYWwgbnVsbCBjaGFyYWN0ZXIpLiAqLworICAgIGFzc2VydChyZXN1bHQgPCBQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpKTsKICAgICBpZiAoc3RybmNtcChuZXdfcGF0aCwgIlxcXFwiLCAyKSA9PSAwIHx8CiAgICAgICAgIHN0cm5jbXAobmV3X3BhdGgsICIvLyIsIDIpID09IDApCiAgICAgICAgIC8qIFVOQyBwYXRoLCBub3RoaW5nIHRvIGRvLiAqLwpAQCAtMTQ4MCwyNCArMTQwNiwyNCBAQAogc3RhdGljIEJPT0wgX19zdGRjYWxsCiB3aW4zMl93Y2hkaXIoTFBDV1NUUiBwYXRoKQogewotICAgIHdjaGFyX3QgX25ld19wYXRoW01BWF9QQVRIKzFdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CisgICAgd2NoYXJfdCBfbmV3X3BhdGhbTUFYX1BBVEhdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CiAgICAgaW50IHJlc3VsdDsKICAgICB3Y2hhcl90IGVudls0XSA9IEwiPXg6IjsKIAogICAgIGlmKCFTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRIKzEsIG5ld19wYXRoKTsKKyAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpLCBuZXdfcGF0aCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpZiAocmVzdWx0ID4gTUFYX1BBVEgrMSkgewotICAgICAgICBuZXdfcGF0aCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGlmIChyZXN1bHQgPiBQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpKSB7CisgICAgICAgIG5ld19wYXRoID0gUHlNZW1fUmF3TWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghbmV3X3BhdGgpIHsKICAgICAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcocmVzdWx0LCBuZXdfcGF0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUobmV3X3BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgfQpAQCAtMTUwOCw3ICsxNDM0LDcgQEAKICAgICBlbnZbMV0gPSBuZXdfcGF0aFswXTsKICAgICByZXN1bHQgPSBTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhlbnYsIG5ld19wYXRoKTsKICAgICBpZiAobmV3X3BhdGggIT0gX25ld19wYXRoKQotICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShuZXdfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtMTUyMywxMyArMTQ0OSwxMyBAQAogI2RlZmluZSBIQVZFX1NUQVRfTlNFQyAxCiAKIHN0cnVjdCB3aW4zMl9zdGF0ewotICAgIGludCBzdF9kZXY7CisgICAgdW5zaWduZWQgbG9uZyBzdF9kZXY7CiAgICAgX19pbnQ2NCBzdF9pbm87CiAgICAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKICAgICBpbnQgc3Rfbmxpbms7CiAgICAgaW50IHN0X3VpZDsKICAgICBpbnQgc3RfZ2lkOwotICAgIGludCBzdF9yZGV2OworICAgIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKICAgICBfX2ludDY0IHN0X3NpemU7CiAgICAgdGltZV90IHN0X2F0aW1lOwogICAgIGludCBzdF9hdGltZV9uc2VjOwpAQCAtMTU4OCw2ICsxNTE0LDggQEAKICAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwogICAgIHJlc3VsdC0+c3RfbW9kZSA9IGF0dHJpYnV0ZXNfdG9fbW9kZShpbmZvLT5kd0ZpbGVBdHRyaWJ1dGVzKTsKICAgICByZXN1bHQtPnN0X3NpemUgPSAoKChfX2ludDY0KWluZm8tPm5GaWxlU2l6ZUhpZ2gpPDwzMikgKyBpbmZvLT5uRmlsZVNpemVMb3c7CisgICAgcmVzdWx0LT5zdF9kZXYgPSBpbmZvLT5kd1ZvbHVtZVNlcmlhbE51bWJlcjsKKyAgICByZXN1bHQtPnN0X3JkZXYgPSByZXN1bHQtPnN0X2RldjsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0Q3JlYXRpb25UaW1lLCAmcmVzdWx0LT5zdF9jdGltZSwgJnJlc3VsdC0+c3RfY3RpbWVfbnNlYyk7CiAgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdExhc3RXcml0ZVRpbWUsICZyZXN1bHQtPnN0X210aW1lLCAmcmVzdWx0LT5zdF9tdGltZV9uc2VjKTsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdEFjY2Vzc1RpbWUsICZyZXN1bHQtPnN0X2F0aW1lLCAmcmVzdWx0LT5zdF9hdGltZV9uc2VjKTsKQEAgLTE1OTUsOSArMTUyMyw5IEBACiAgICAgcmVzdWx0LT5zdF9pbm8gPSAoKChfX2ludDY0KWluZm8tPm5GaWxlSW5kZXhIaWdoKTw8MzIpICsgaW5mby0+bkZpbGVJbmRleExvdzsKICAgICBpZiAocmVwYXJzZV90YWcgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykgewogICAgICAgICAvKiBmaXJzdCBjbGVhciB0aGUgU19JRk1UIGJpdHMgKi8KLSAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiAwMTcwMDAwKTsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiBTX0lGTVQpOwogICAgICAgICAvKiBub3cgc2V0IHRoZSBiaXRzIHRoYXQgbWFrZSB0aGlzIGEgc3ltbGluayAqLwotICAgICAgICByZXN1bHQtPnN0X21vZGUgfD0gMDEyMDAwMDsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IFNfSUZMTks7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNjUwLDcgKzE1NzgsNyBAQAogfQogCiAvKiBHcmFiIEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCi1zdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAwOworc3RhdGljIGludCBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlID0gLTE7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKShIQU5ETEUsIExQV1NUUiwgRFdPUkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CiBzdGF0aWMgaW50CkBAIC0xNjYxLDcgKzE1ODksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQpOwogCiAgICAgLyogb25seSByZWNoZWNrICovCi0gICAgaWYgKCFoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQorICAgIGlmICgtMSA9PSBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQogICAgIHsKICAgICAgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlVyhMIktFUk5FTDMyIik7CiAgICAgICAgICooRkFSUFJPQyopJlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZUEgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsCkBAIC0xNjg3LDcgKzE2MTUsNyBAQAogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgYnVmID0gKHdjaGFyX3QgKiltYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFidWYpIHsKICAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTY5NywxMiArMTYyNSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1Zl9zaXplLCBWT0xVTUVfTkFNRV9ET1MpOwogCiAgICAgaWYoIXJlc3VsdF9sZW5ndGgpIHsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBpZighQ2xvc2VIYW5kbGUoaGRsKSkgewotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtMTc5Myw3ICsxNzIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMTg4OSw3ICsxODE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMjI4OCw3ICsyMjE2LDkgQEAKICNlbHNlCiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAxLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpc3QtPnN0X2lubykpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgJiYgIWRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAyLCBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhzdC0+c3RfZGV2KSk7CisjZWxpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORylzdC0+c3RfZGV2KSk7CiAjZWxzZQpAQCAtMjQyMyw1MyArMjM1MywxNTggQEAKICAgICAgICAgcmVzdWx0ID0gU1RBVChwYXRoLT5uYXJyb3csICZzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgIGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IoInN0YXQiLCBwYXRoKTsKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CisgICAgfQogCiAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X3N0YXRfX2RvY19fLAotInN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKSAtPiBzdGF0IHJlc3VsdFxuXG5cCi1QZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC5cblwKLVxuXAotcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBhIHN0cmluZyBvciBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLSAgZGlyX2ZkIG1heSBub3QgYmUgc3VwcG9ydGVkIG9uIHlvdXIgcGxhdGZvcm07IGlmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZ1xuXAotICBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1JdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuXAotICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKyNpZmRlZiBIQVZFX0ZTVEFUQVQKKyAgICAjZGVmaW5lIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyBwYXRoX3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorCisgICAgdHlwZSA9ICJwYXRoX3QiCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorCisgICAgY29udmVydGVyID0gJ3BhdGhfY29udmVydGVyJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGFsbG93X2ZkPUZhbHNlLCBudWxsYWJsZT1GYWxzZSk6CisgICAgICAgICMgcmlnaHQgbm93IHBhdGhfdCBkb2Vzbid0IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICMgdG8gc3VwcG9ydCBhIGRlZmF1bHQgdmFsdWUsIHlvdSdsbCBuZWVkIHRvIG92ZXJyaWRlIGluaXRpYWxpemUoKS4KKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IHNwZWNpZnkgYSBkZWZhdWx0IHRvIHRoZSBwYXRoX3QgY29udmVydGVyISIpCisKKyAgICAgICAgaWYgc2VsZi5jX2RlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzcGVjaWZ5IGEgY19kZWZhdWx0IHRvIHRoZSBwYXRoX3QgY29udmVydGVyISIpCisKKyAgICAgICAgc2VsZi5udWxsYWJsZSA9IG51bGxhYmxlCisgICAgICAgIHNlbGYuYWxsb3dfZmQgPSBhbGxvd19mZAorCisgICAgZGVmIHByZV9yZW5kZXIoc2VsZik6CisgICAgICAgIGRlZiBzdHJpZnkodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihpbnQoYm9vbCh2YWx1ZSkpKQorCisgICAgICAgICMgYWRkIHNlbGYucHlfbmFtZSBoZXJlIHdoZW4gbWVyZ2luZyB3aXRoIHBvc2l4bW9kdWxlIGNvbnZlcnNpb24KKyAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSAnUEFUSF9UX0lOSVRJQUxJWkUoInt9Iiwge30sIHt9KScuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5mdW5jdGlvbi5uYW1lLAorICAgICAgICAgICAgc3RyaWZ5KHNlbGYubnVsbGFibGUpLAorICAgICAgICAgICAgc3RyaWZ5KHNlbGYuYWxsb3dfZmQpLAorICAgICAgICAgICAgKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHJldHVybiAicGF0aF9jbGVhbnVwKCYiICsgc2VsZi5uYW1lICsgIik7XG4iCisKKworY2xhc3MgZGlyX2ZkX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBjb252ZXJ0ZXIgPSAnT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaW4gKHVuc3BlY2lmaWVkLCBOb25lKToKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ0RFRkFVTFRfRElSX0ZEJworCisKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTVjOWY0NTZmNTMyNDRmYzNdKi8KKworLypbY2xpbmljIGlucHV0XQorCitvcy5zdGF0CisKKyAgICBwYXRoIDogcGF0aF90KGFsbG93X2ZkPVRydWUpCisgICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIGEgcmVsYXRpdmUgc3RyaW5nOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0bworICAgICAgICB0aGF0IGRpcmVjdG9yeS4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgICAgICAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KKworZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZAorICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhCisgIE5vdEltcGxlbWVudGVkRXJyb3IuCisKK0l0J3MgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGggYXMKKyAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKG9zX3N0YXRfX2RvY19fLAorInN0YXQoJG1vZHVsZSwgLywgcGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguXG4iCisiXG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggdG8gYmUgZXhhbWluZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgYSByZWxhdGl2ZSBzdHJpbmc7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvXG4iCisiICAgIHRoYXQgZGlyZWN0b3J5LlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIHN0YXQgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJkaXJfZmQgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG4iCisiICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuIgorIlxuIgorIkl0XCdzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzXG4iCisiICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKworI2RlZmluZSBPU19TVEFUX01FVEhPRERFRiAgICBcCisgICAgeyJzdGF0IiwgKFB5Q0Z1bmN0aW9uKW9zX3N0YXQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19zdGF0X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zdGF0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX3N0YXRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBkaXJfZmQsIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3RhdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07Ci0gICAgcGF0aF90IHBhdGg7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJzdGF0IiwgMCwgMSk7CiAgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOwogICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOwotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7CiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mcDpzdGF0Iiwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKLSNpZmRlZiBIQVZFX0ZTVEFUQVQKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZCwKLSNlbHNlCi0gICAgICAgIGRpcl9mZF91bmF2YWlsYWJsZSwgJmRpcl9mZCwKLSNlbmRpZgotICAgICAgICAmZm9sbG93X3N5bWxpbmtzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuX3ZhbHVlID0gcG9zaXhfZG9fc3RhdCgic3RhdCIsICZwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiTyZ8JE8mcDpzdGF0IiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCwgJmZvbGxvd19zeW1saW5rcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zdGF0X2ltcGwobW9kdWxlLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBkaXJfZmQsIGludCBmb2xsb3dfc3ltbGlua3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjFkY2FhNWUyNGRiOTg4MiBpbnB1dD01YWUxNTViZDQ3NWZkMjBhXSovCit7CisgICAgcmV0dXJuIHBvc2l4X2RvX3N0YXQoInN0YXQiLCBwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7Cit9CisKIFB5RG9jX1NUUlZBUihwb3NpeF9sc3RhdF9fZG9jX18sCiAibHN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUpIC0+IHN0YXQgcmVzdWx0XG5cblwKIExpa2Ugc3RhdCgpLCBidXQgZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cblwKQEAgLTI0ODUsNiArMjUyMCw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibHN0YXQiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpsc3RhdCIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9GU1RBVEFUCkBAIC0yNDk0LDQ0ICsyNTMwLDEyMiBAQAogI2VuZGlmCiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoInN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoImxzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9hY2Nlc3NfX2RvY19fLAotImFjY2VzcyhwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcCi0gZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cblwKLVVzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguICBSZXR1cm5zIFRydWUgaWYgZ3JhbnRlZCxcblwKLUZhbHNlIG90aGVyd2lzZS5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLUlmIGVmZmVjdGl2ZV9pZHMgaXMgVHJ1ZSwgYWNjZXNzIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCBpbnN0ZWFkIG9mXG5cCi0gIHRoZSByZWFsIHVpZC9naWQuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1kaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuXAotICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG5cCi0gIE5vdEltcGxlbWVudGVkRXJyb3IuXG5cCi1cblwKLU5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuXAotICByb3V0aW5lIGNhbiBiZSB1c2VkIGluIGEgc3VpZC9zZ2lkIGVudmlyb25tZW50IHRvIHRlc3QgaWYgdGhlIGludm9raW5nIHVzZXJcblwKLSAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLlxuXAotVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsIG9yIHRoZSBpbmNsdXNpdmUtT1JcblwKLSAgb2YgUl9PSywgV19PSywgYW5kIFhfT0suIik7CisKKyNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAorICAgICNkZWZpbmUgT1NfQUNDRVNTX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIE9TX0FDQ0VTU19ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisvKltjbGluaWMgaW5wdXRdCitvcy5hY2Nlc3MKKworICAgIHBhdGg6IHBhdGhfdChhbGxvd19mZD1UcnVlKQorICAgICAgICBQYXRoIHRvIGJlIHRlc3RlZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC4KKworICAgIG1vZGU6IGludAorICAgICAgICBPcGVyYXRpbmctc3lzdGVtIG1vZGUgYml0ZmllbGQuICBDYW4gYmUgRl9PSyB0byB0ZXN0IGV4aXN0ZW5jZSwKKyAgICAgICAgb3IgdGhlIGluY2x1c2l2ZS1PUiBvZiBSX09LLCBXX09LLCBhbmQgWF9PSy4KKworICAgICoKKworICAgIGRpcl9mZCA6IGRpcl9mZCA9IE5vbmUKKyAgICAgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAorICAgICAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQKKyAgICAgICAgZGlyZWN0b3J5LgorCisgICAgZWZmZWN0aXZlX2lkczogYm9vbCA9IEZhbHNlCisgICAgICAgIElmIFRydWUsIGFjY2VzcyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQgaW5zdGVhZCBvZgorICAgICAgICB0aGUgcmVhbCB1aWQvZ2lkLgorCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgICAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLAorICAgICAgICBhY2Nlc3Mgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlCisgICAgICAgIHRoZSBsaW5rIHBvaW50cyB0by4KKworVXNlIHRoZSByZWFsIHVpZC9naWQgdG8gdGVzdCBmb3IgYWNjZXNzIHRvIGEgcGF0aC4KKwore3BhcmFtZXRlcnN9CitkaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZAorICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhCisgIE5vdEltcGxlbWVudGVkRXJyb3IuCisKK05vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpcworICByb3V0aW5lIGNhbiBiZSB1c2VkIGluIGEgc3VpZC9zZ2lkIGVudmlyb25tZW50IHRvIHRlc3QgaWYgdGhlIGludm9raW5nIHVzZXIKKyAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihvc19hY2Nlc3NfX2RvY19fLAorImFjY2VzcygkbW9kdWxlLCAvLCBwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcbiIKKyIgICAgICAgZm9sbG93X3N5bWxpbmtzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJVc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIHRvIGJlIHRlc3RlZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC5cbiIKKyIgIG1vZGVcbiIKKyIgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsXG4iCisiICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXRcbiIKKyIgICAgZGlyZWN0b3J5LlxuIgorIiAgZWZmZWN0aXZlX2lkc1xuIgorIiAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2ZcbiIKKyIgICAgdGhlIHJlYWwgdWlkL2dpZC5cbiIKKyIgIGZvbGxvd19zeW1saW5rc1xuIgorIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgorIiAgICBhY2Nlc3Mgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJkaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgorIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgorIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXNcbiIKKyIgIHJvdXRpbmUgY2FuIGJlIHVzZWQgaW4gYSBzdWlkL3NnaWQgZW52aXJvbm1lbnQgdG8gdGVzdCBpZiB0aGUgaW52b2tpbmcgdXNlclxuIgorIiAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLiIpOworCisjZGVmaW5lIE9TX0FDQ0VTU19NRVRIT0RERUYgICAgXAorICAgIHsiYWNjZXNzIiwgKFB5Q0Z1bmN0aW9uKW9zX2FjY2VzcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2FjY2Vzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfYWNjZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX2FjY2Vzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGludCBkaXJfZmQsIGludCBlZmZlY3RpdmVfaWRzLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2FjY2VzcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRpcl9mZCIsICJlZmZlY3RpdmVfaWRzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwotICAgIHBhdGhfdCBwYXRoOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRpcl9mZCIsICJlZmZlY3RpdmVfaWRzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImFjY2VzcyIsIDAsIDEpOwogICAgIGludCBtb2RlOwogICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZWZmZWN0aXZlX2lkcyA9IDA7CiAgICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPJml8JE8mcHA6YWNjZXNzIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLCBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZlZmZlY3RpdmVfaWRzLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2FjY2Vzc19pbXBsKG1vZHVsZSwgJnBhdGgsIG1vZGUsIGRpcl9mZCwgZWZmZWN0aXZlX2lkcywgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19hY2Nlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkLCBpbnQgZWZmZWN0aXZlX2lkcywgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNmVkNGYxNTFiZTlkZjBmIGlucHV0PTJlMmU3NTk0MzcxZjViN2VdKi8KK3sKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTI1NDAsMTcgKzI2NTQsNiBAQAogICAgIGludCByZXN1bHQ7CiAjZW5kaWYKIAotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJml8JE8mcHA6YWNjZXNzIiwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsCi0jaWZkZWYgSEFWRV9GQUNDRVNTQVQKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZCwKLSNlbHNlCi0gICAgICAgIGRpcl9mZF91bmF2YWlsYWJsZSwgJmRpcl9mZCwKLSNlbmRpZgotICAgICAgICAmZWZmZWN0aXZlX2lkcywgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAjaWZuZGVmIEhBVkVfRkFDQ0VTU0FUCiAgICAgaWYgKGZvbGxvd19zeW1saW5rc19zcGVjaWZpZWQoImFjY2VzcyIsIGZvbGxvd19zeW1saW5rcykpCiAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTI1NjMsMTAgKzI2NjYsMTAgQEAKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgaWYgKHBhdGgud2lkZSAhPSBOVUxMKQotICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgud2lkZSk7CisgICAgaWYgKHBhdGgtPndpZGUgIT0gTlVMTCkKKyAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLT53aWRlKTsKICAgICBlbHNlCi0gICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC5uYXJyb3cpOworICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgtPm5hcnJvdyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIC8qCkBAIC0yNTc4LDcgKzI2ODEsNyBAQAogICAgICAqIChEaXJlY3RvcmllcyBjYW5ub3QgYmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MuKQogICAgICovCiAgICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKAotICAgICAgICAoYXR0ciAhPSAweEZGRkZGRkZGKSAmJgorICAgICAgICAoYXR0ciAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgJiYKICAgICAgICAgICAgICghKG1vZGUgJiAyKSB8fAogICAgICAgICAgICAgIShhdHRyICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpIHx8CiAgICAgICAgICAgICAoYXR0ciAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpKTsKQEAgLTI1OTQsMTEgKzI2OTcsMTEgQEAKICAgICAgICAgICAgIGZsYWdzIHw9IEFUX1NZTUxJTktfTk9GT0xMT1c7CiAgICAgICAgIGlmIChlZmZlY3RpdmVfaWRzKQogICAgICAgICAgICAgZmxhZ3MgfD0gQVRfRUFDQ0VTUzsKLSAgICAgICAgcmVzdWx0ID0gZmFjY2Vzc2F0KGRpcl9mZCwgcGF0aC5uYXJyb3csIG1vZGUsIGZsYWdzKTsKKyAgICAgICAgcmVzdWx0ID0gZmFjY2Vzc2F0KGRpcl9mZCwgcGF0aC0+bmFycm93LCBtb2RlLCBmbGFncyk7CiAgICAgfQogICAgIGVsc2UKICNlbmRpZgotICAgICAgICByZXN1bHQgPSBhY2Nlc3MocGF0aC5uYXJyb3csIG1vZGUpOworICAgICAgICByZXN1bHQgPSBhY2Nlc3MocGF0aC0+bmFycm93LCBtb2RlKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZyghcmVzdWx0KTsKICNlbmRpZgpAQCAtMjYwNiw3ICsyNzA5LDYgQEAKICNpZm5kZWYgSEFWRV9GQUNDRVNTQVQKIGV4aXQ6CiAjZW5kaWYKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKQEAgLTI2MjMsMzUgKzI3MjUsNjggQEAKICNkZWZpbmUgWF9PSyAxCiAjZW5kaWYKIAorCiAjaWZkZWYgSEFWRV9UVFlOQU1FCi1QeURvY19TVFJWQVIocG9zaXhfdHR5bmFtZV9fZG9jX18sCi0idHR5bmFtZShmZCkgLT4gc3RyaW5nXG5cblwKLVJldHVybiB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgZGV2aWNlIGNvbm5lY3RlZCB0byAnZmQnLiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy50dHluYW1lIC0+IERlY29kZUZTRGVmYXVsdAorCisgICAgZmQ6IGludAorICAgICAgICBJbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBoYW5kbGUuCisKKyAgICAvCisKK1JldHVybiB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgZGV2aWNlIGNvbm5lY3RlZCB0byAnZmQnLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIob3NfdHR5bmFtZV9fZG9jX18sCisidHR5bmFtZSgkbW9kdWxlLCBmZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgZGV2aWNlIGNvbm5lY3RlZCB0byBcJ2ZkXCcuXG4iCisiXG4iCisiICBmZFxuIgorIiAgICBJbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBoYW5kbGUuIik7CisKKyNkZWZpbmUgT1NfVFRZTkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsidHR5bmFtZSIsIChQeUNGdW5jdGlvbilvc190dHluYW1lLCBNRVRIX1ZBUkFSR1MsIG9zX3R0eW5hbWVfX2RvY19ffSwKKworc3RhdGljIGNoYXIgKgorb3NfdHR5bmFtZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBmZCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF90dHluYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3R0eW5hbWUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGlkOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBjaGFyICpfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJpOnR0eW5hbWUiLAorICAgICAgICAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3R0eW5hbWVfaW1wbChtb2R1bGUsIGZkKTsKKyAgICBpZiAoX3JldHVybl92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgY2hhciAqCitvc190dHluYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWNlZTdiYzRjZmZlYzAxYTIgaW5wdXQ9NWY3MmNhODNlNzZiM2I0NV0qLworewogICAgIGNoYXIgKnJldDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTp0dHluYW1lIiwgJmlkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSNpZiBkZWZpbmVkKF9fVk1TKQotICAgIC8qIGZpbGUgZGVzY3JpcHRvciAwIG9ubHksIHRoZSBkZWZhdWx0IGlucHV0IGRldmljZSAoc3RkaW4pICovCi0gICAgaWYgKGlkID09IDApIHsKLSAgICAgICAgcmV0ID0gdHR5bmFtZSgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcmV0ID0gTlVMTDsKLSAgICB9Ci0jZWxzZQotICAgIHJldCA9IHR0eW5hbWUoaWQpOwotI2VuZGlmCisgICAgcmV0ID0gdHR5bmFtZShmZCk7CiAgICAgaWYgKHJldCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChyZXQpOworICAgICAgICBwb3NpeF9lcnJvcigpOworICAgIHJldHVybiByZXQ7CiB9CisjZWxzZQorI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRgogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0NURVJNSUQKQEAgLTI2OTMsNiArMjgyOCw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hkaXIiOwogI2lmZGVmIEhBVkVfRkNIRElSCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTI3MDgsOCArMjg0NCw2IEBACiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSB3aW4zMl9jaGRpcihwYXRoLm5hcnJvdyk7CiAgICAgcmVzdWx0ID0gIXJlc3VsdDsgLyogb24gdW5peCwgc3VjY2VzcyA9IDAsIG9uIHdpbmRvd3MsIHN1Y2Nlc3MgPSAhMCAqLwotI2VsaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXN1bHQgPSBfY2hkaXIyKHBhdGgubmFycm93KTsKICNlbHNlCiAjaWZkZWYgSEFWRV9GQ0hESVIKICAgICBpZiAocGF0aC5mZCAhPSAtMSkKQEAgLTI3MjEsNyArMjg1NSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigiY2hkaXIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0yNzg1LDYgKzI5MTksNyBAQAogI2VuZGlmCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNobW9kIjsKICNpZmRlZiBIQVZFX0ZDSE1PRAogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC0yODEwLDcgKzI5NDUsNyBAQAogICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgud2lkZSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgubmFycm93KTsKLSAgICBpZiAoYXR0ciA9PSAweEZGRkZGRkZGKQorICAgIGlmIChhdHRyID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKQogICAgICAgICByZXN1bHQgPSAwOwogICAgIGVsc2UgewogICAgICAgICBpZiAobW9kZSAmIF9TX0lXUklURSkKQEAgLTI4MjUsNyArMjk2MCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgiY2htb2QiLCBwYXRoLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwpAQCAtMjg3OSw3ICszMDE0LDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImNobW9kIiwgJnBhdGgpOworICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTI5MjMsMjAgKzMwNTgsMjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9sY2htb2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIGludCBpOwogICAgIGludCByZXM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6bGNobW9kIiwgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZpKSkKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaG1vZCI7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6bGNobW9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmaSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNobW9kKHBhdGgsIGkpOworICAgIHJlcyA9IGxjaG1vZChwYXRoLm5hcnJvdywgaSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX0xDSE1PRCAqLwpAQCAtMjk2NCw2ICszMTAyLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmbGFncyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hmbGFncyI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZrfCRpOmNoZmxhZ3MiLCBrZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MsICZmb2xsb3dfc3ltbGlua3MpKQpAQCAtMjk4NCw3ICszMTIzLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJjaGZsYWdzIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMzAwNywyMiArMzE0NiwyNCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2xjaGZsYWdzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBwYXRoX3QgcGF0aDsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2hmbGFncyI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJms6bGNoZmxhZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aCwgJmZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaGZsYWdzKHBhdGgsIGZsYWdzKTsKKyAgICByZXMgPSBsY2hmbGFncyhwYXRoLm5hcnJvdywgZmxhZ3MpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfTENIRkxBR1MgKi8KIApAQCAtMzAzNCw3ICszMTc1LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9jaHJvb3QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBwb3NpeF8xc3RyKGFyZ3MsICJPJjpjaHJvb3QiLCBjaHJvb3QpOworICAgIHJldHVybiBwb3NpeF8xc3RyKCJjaHJvb3QiLCBhcmdzLCAiTyY6Y2hyb290IiwgY2hyb290KTsKIH0KICNlbmRpZgogCkBAIC0zMTE2LDYgKzMyNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hvd24iOwogI2lmZGVmIEhBVkVfRkNIT1dOCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTMxNzMsNyArMzMxNSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigiY2hvd24iLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0zMjIyLDMwICszMzY0LDMyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbGNob3duKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBwYXRoX3QgcGF0aDsKICAgICB1aWRfdCB1aWQ7CiAgICAgZ2lkX3QgZ2lkOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2hvd24iOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZPJk8mOmxjaG93biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9VaWRfQ29udmVydGVyLCAmdWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfR2lkX0NvbnZlcnRlciwgJmdpZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNob3duKHBhdGgsIHVpZCwgZ2lkKTsKKyAgICByZXMgPSBsY2hvd24ocGF0aC5uYXJyb3csIHVpZCwgZ2lkKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KICNlbmRpZiAvKiBIQVZFX0xDSE9XTiAqLwogCiAKLSNpZmRlZiBIQVZFX0dFVENXRAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2dldGN3ZChpbnQgdXNlX2J5dGVzKQogewpAQCAtMzI1OSwxMiArMzQwMywxMiBAQAogICAgICAgICBQeU9iamVjdCAqcmVzb2JqOwogICAgICAgICBEV09SRCBsZW47CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoc2l6ZW9mIHdidWYvIHNpemVvZiB3YnVmWzBdLCB3YnVmKTsKKyAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoUHlfQVJSQVlfTEVOR1RIKHdidWYpLCB3YnVmKTsKICAgICAgICAgLyogSWYgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gsIGxlbiBkb2VzIG5vdCBpbmNsdWRlIHRoZQogICAgICAgICAgICB0ZXJtaW5hdGluZyBcMC4gSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIGxlbiBpbmNsdWRlcwogICAgICAgICAgICB0aGUgc3BhY2UgbmVlZGVkIGZvciB0aGUgdGVybWluYXRvci4gKi8KLSAgICAgICAgaWYgKGxlbiA+PSBzaXplb2Ygd2J1Zi8gc2l6ZW9mIHdidWZbMF0pIHsKLSAgICAgICAgICAgIHdidWYyID0gbWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGlmIChsZW4gPj0gUHlfQVJSQVlfTEVOR1RIKHdidWYpKSB7CisgICAgICAgICAgICB3YnVmMiA9IFB5TWVtX1Jhd01hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICAgICAgaWYgKHdidWYyKQogICAgICAgICAgICAgICAgIGxlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKGxlbiwgd2J1ZjIpOwogICAgICAgICB9CkBAIC0zMjc0LDExICszNDE4LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoIWxlbikgewotICAgICAgICAgICAgaWYgKHdidWYyICE9IHdidWYpIGZyZWUod2J1ZjIpOwotICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJnZXRjd2R1IiwgTlVMTCk7CisgICAgICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikKKyAgICAgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYyKTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICAgICAgICAgfQogICAgICAgICByZXNvYmogPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdidWYyLCBsZW4pOwotICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikgZnJlZSh3YnVmMik7CisgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKQorICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmMik7CiAgICAgICAgIHJldHVybiByZXNvYmo7CiAgICAgfQogCkBAIC0zMjg3LDExICszNDMzLDcgQEAKICNlbmRpZgogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgcmVzID0gX2dldGN3ZDIoYnVmLCBzaXplb2YgYnVmKTsKLSNlbHNlCiAgICAgcmVzID0gZ2V0Y3dkKGJ1Ziwgc2l6ZW9mIGJ1Zik7Ci0jZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC0zMzE5LDcgKzM0NjEsNiBAQAogewogICAgIHJldHVybiBwb3NpeF9nZXRjd2QoMSk7CiB9Ci0jZW5kaWYKIAogI2lmICgoIWRlZmluZWQoSEFWRV9MSU5LKSkgJiYgZGVmaW5lZChNU19XSU5ET1dTKSkKICNkZWZpbmUgSEFWRV9MSU5LIDEKQEAgLTMzNTgsNiArMzQ5OSw4IEBACiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOwogICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgICAgc3JjLmZ1bmN0aW9uX25hbWUgPSAibGluayI7CisgICAgZHN0LmZ1bmN0aW9uX25hbWUgPSAibGluayI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnxPJk8mcDpsaW5rIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnNyYywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmZHN0LApAQCAtMzM4OCw3ICszNTMxLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJsaW5rIiwgZHN0Lm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UKQEAgLTM0MDYsNyArMzU0OSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigibGluayIsICZkc3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtMzQzNiw3MiArMzU3OSwzNSBAQAogICB0aGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgcmVmZXIgdG8gYSBkaXJlY3RvcnkuXG5cCiAgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKLSNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIGludCBmZCA9IC0xOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCi0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKK3N0YXRpYyBQeU9iamVjdCAqCitfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICp2OwogICAgIEhBTkRMRSBoRmluZEZpbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICBCT09MIHJlc3VsdDsKICAgICBXSU4zMl9GSU5EX0RBVEEgRmlsZURhdGE7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOyAvKiBPdmVyYWxsb2NhdGUgZm9yIFxcKi4qXDAgKi8KKyAgICBjaGFyIG5hbWVidWZbTUFYX1BBVEgrNF07IC8qIE92ZXJhbGxvY2F0ZSBmb3IgIlwqLioiICovCiAgICAgY2hhciAqYnVmcHRyID0gbmFtZWJ1ZjsKICAgICAvKiBvbmx5IGNsYWltIHRvIGhhdmUgc3BhY2UgZm9yIE1BWF9QQVRIICovCi0gICAgUHlfc3NpemVfdCBsZW4gPSBzaXplb2YobmFtZWJ1ZiktNTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X0FSUkFZX0xFTkdUSChuYW1lYnVmKS00OwogICAgIFB5T2JqZWN0ICpwbyA9IE5VTEw7CiAgICAgd2NoYXJfdCAqd25hbWVidWYgPSBOVUxMOwotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSNpZm5kZWYgTUFYX1BBVEgKLSNkZWZpbmUgTUFYX1BBVEggICAgQ0NITUFYUEFUSAotI2VuZGlmCi0gICAgY2hhciAqcHQ7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOwotICAgIEhESVIgIGhkaXIgPSAxOwotICAgIFVMT05HIHNyY2hjbnQgPSAxOwotICAgIEZJTEVGSU5EQlVGMyAgIGVwOwotICAgIEFQSVJFVCByYzsKLSNlbHNlCi0gICAgUHlPYmplY3QgKnY7Ci0gICAgRElSICpkaXJwID0gTlVMTDsKLSAgICBzdHJ1Y3QgZGlyZW50ICplcDsKLSAgICBpbnQgcmV0dXJuX3N0cjsgLyogaWYgZmFsc2UsIHJldHVybiBieXRlcyAqLwotI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5udWxsYWJsZSA9IDE7Ci0jaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBwYXRoLmZkID0gLTE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyY6bGlzdGRpciIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFggU2hvdWxkIHJlZG8gdGhpcyBwdXR0aW5nIHRoZSAobm93IGZvdXIpIHZlcnNpb25zIG9mIG9wZW5kaXIKLSAgICAgICBpbiBzZXBhcmF0ZSBmaWxlcyBpbnN0ZWFkIG9mIGhhdmluZyB0aGVtIGFsbCBoZXJlLi4uICovCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCi0gICAgaWYgKCFwYXRoLm5hcnJvdykgeworICAgIGlmICghcGF0aC0+bmFycm93KSB7CiAgICAgICAgIFdJTjMyX0ZJTkRfREFUQVcgd0ZpbGVEYXRhOwogICAgICAgICB3Y2hhcl90ICpwb193Y2hhcnM7CiAKLSAgICAgICAgaWYgKCFwYXRoLndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLworICAgICAgICBpZiAoIXBhdGgtPndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLwogICAgICAgICAgICAgcG9fd2NoYXJzID0gTCIuIjsKICAgICAgICAgICAgIGxlbiA9IDE7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwb193Y2hhcnMgPSBwYXRoLndpZGU7Ci0gICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC53aWRlKTsKKyAgICAgICAgICAgIHBvX3djaGFycyA9IHBhdGgtPndpZGU7CisgICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC0+d2lkZSk7CiAgICAgICAgIH0KICAgICAgICAgLyogVGhlICs1IGlzIHNvIHdlIGNhbiBhcHBlbmQgIlxcKi4qXDAiICovCi0gICAgICAgIHduYW1lYnVmID0gbWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHduYW1lYnVmID0gUHlNZW1fTWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghd25hbWVidWYpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CkBAIC0zNTA5LDggKzM2MTUsOCBAQAogICAgICAgICB3Y3NjcHkod25hbWVidWYsIHBvX3djaGFycyk7CiAgICAgICAgIGlmIChsZW4gPiAwKSB7CiAgICAgICAgICAgICB3Y2hhcl90IHdjaCA9IHduYW1lYnVmW2xlbi0xXTsKLSAgICAgICAgICAgIGlmICh3Y2ggIT0gTCcvJyAmJiB3Y2ggIT0gTCdcXCcgJiYgd2NoICE9IEwnOicpCi0gICAgICAgICAgICAgICAgd25hbWVidWZbbGVuKytdID0gTCdcXCc7CisgICAgICAgICAgICBpZiAod2NoICE9IFNFUCAmJiB3Y2ggIT0gQUxUU0VQICYmIHdjaCAhPSBMJzonKQorICAgICAgICAgICAgICAgIHduYW1lYnVmW2xlbisrXSA9IFNFUDsKICAgICAgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiArIGxlbiwgTCIqLioiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CkBAIC0zNTI0LDggKzM2MzAsNyBAQAogICAgICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKQogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZEZpcnN0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBkbyB7CkBAIC0zNTU0LDE5ICszNjU5LDE5IEBACiAgICAgICAgICAgICAgICBpdCBnb3QgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5LiAqLwogICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZE5leHRGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKIAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQotICAgIHN0cmNweShuYW1lYnVmLCBwYXRoLm5hcnJvdyk7Ci0gICAgbGVuID0gcGF0aC5sZW5ndGg7CisgICAgc3RyY3B5KG5hbWVidWYsIHBhdGgtPm5hcnJvdyk7CisgICAgbGVuID0gcGF0aC0+bGVuZ3RoOwogICAgIGlmIChsZW4gPiAwKSB7CiAgICAgICAgIGNoYXIgY2ggPSBuYW1lYnVmW2xlbi0xXTsKLSAgICAgICAgaWYgKGNoICE9IFNFUCAmJiBjaCAhPSBBTFRTRVAgJiYgY2ggIT0gJzonKQotICAgICAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSAnLyc7CisgICAgICAgIGlmIChjaCAhPSAnXFwnICYmIGNoICE9ICcvJyAmJiBjaCAhPSAnOicpCisgICAgICAgICAgICBuYW1lYnVmW2xlbisrXSA9ICdcXCc7CiAgICAgICAgIHN0cmNweShuYW1lYnVmICsgbGVuLCAiKi4qIik7CiAgICAgfQogCkBAIC0zNTgxLDcgKzM2ODYsNyBAQAogICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yKCJGaW5kRmlyc3RGaWxlIiwgbmFtZWJ1Zik7CisgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGRvIHsKQEAgLTM2MDksNyArMzcxNCw3IEBACiAgICAgICAgICAgIGl0IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkuICovCiAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcigiRmluZE5leHRGaWxlIiwgbmFtZWJ1Zik7CisgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKQEAgLTM2MTksOTIgKzM3MjQsMzUgQEAKICAgICAgICAgaWYgKEZpbmRDbG9zZShoRmluZEZpbGUpID09IEZBTFNFKSB7CiAgICAgICAgICAgICBpZiAobGlzdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcl9vYmplY3QoIkZpbmRDbG9zZSIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAod25hbWVidWYpCi0gICAgICAgIGZyZWUod25hbWVidWYpOwotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgUHlNZW1fRnJlZSh3bmFtZWJ1Zik7CiAKICAgICByZXR1cm4gbGlzdDsKK30gIC8qIGVuZCBvZiBfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIgKi8KIAotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBpZiAocGF0aC5sZW5ndGggPj0gTUFYX1BBVEgpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJwYXRoIHRvbyBsb25nIik7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0gICAgc3RyY3B5KG5hbWVidWYsIHBhdGgubmFycm93KTsKLSAgICBmb3IgKHB0ID0gbmFtZWJ1ZjsgKnB0OyBwdCsrKQotICAgICAgICBpZiAoKnB0ID09IEFMVFNFUCkKLSAgICAgICAgICAgICpwdCA9IFNFUDsKLSAgICBpZiAobmFtZWJ1ZltsZW4tMV0gIT0gU0VQKQotICAgICAgICBuYW1lYnVmW2xlbisrXSA9IFNFUDsKLSAgICBzdHJjcHkobmFtZWJ1ZiArIGxlbiwgIiouKiIpOworI2Vsc2UgIC8qIHRodXMgUE9TSVgsIGllOiBub3QgKE1TX1dJTkRPV1MgYW5kIG5vdCBIQVZFX09QRU5ESVIpICovCiAKLSAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICByYyA9IERvc0ZpbmRGaXJzdChuYW1lYnVmLCAgICAgICAgIC8qIFdpbGRjYXJkIFBhdHRlcm4gdG8gTWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICAmaGRpciwgICAgICAgICAgIC8qIEhhbmRsZSB0byBVc2UgV2hpbGUgU2VhcmNoIERpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgICAgICAgIEZJTEVfUkVBRE9OTFkgfCBGSUxFX0hJRERFTiB8IEZJTEVfU1lTVEVNIHwgRklMRV9ESVJFQ1RPUlksCi0gICAgICAgICAgICAgICAgICAgICAgJmVwLCBzaXplb2YoZXApLCAvKiBTdHJ1Y3R1cmUgdG8gUmVjZWl2ZSBEaXJlY3RvcnkgRW50cnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAmc3JjaGNudCwgICAgICAgIC8qIE1heCBhbmQgQWN0dWFsIENvdW50IG9mIEVudHJpZXMgUGVyIEl0ZXJhdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgIEZJTF9TVEFOREFSRCk7ICAgLyogRm9ybWF0IG9mIEVudHJ5IChFQXMgb3IgTm90KSAqLwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGVycm5vID0gRU5PRU5UOwotICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIGxpc3QgPSBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgubmFycm93KTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIGlmIChzcmNoY250ID4gMCkgeyAvKiBJZiBEaXJlY3RvcnkgaXMgTk9UIFRvdGFsbHkgRW1wdHksICovCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChlcC5hY2hOYW1lWzBdID09ICcuJwotICAgICAgICAgICAgJiYgKGVwLmFjaE5hbWVbMV0gPT0gJ1wwJyB8fCAoZXAuYWNoTmFtZVsxXSA9PSAnLicgJiYgZXAuYWNoTmFtZVsyXSA9PSAnXDAnKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7IC8qIFNraXAgT3ZlciAiLiIgYW5kICIuLiIgTmFtZXMgKi8KLQotICAgICAgICAgICAgc3RyY3B5KG5hbWVidWYsIGVwLmFjaE5hbWUpOwotCi0gICAgICAgICAgICAvKiBMZWF2ZSBDYXNlIG9mIE5hbWUgQWxvbmUgLS0gSW4gTmF0aXZlIEZvcm0gKi8KLSAgICAgICAgICAgIC8qIChSZW1vdmVkIEZvcmNlZCBMb3dlcmNhc2luZyBDb2RlKSAqLwotCi0gICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKG5hbWVidWYpOwotICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHYpICE9IDApIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICB9IHdoaWxlIChEb3NGaW5kTmV4dChoZGlyLCAmZXAsIHNpemVvZihlcCksICZzcmNoY250KSA9PSBOT19FUlJPUiAmJiBzcmNoY250ID4gMCk7Ci0gICAgfQotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0KLSAgICByZXR1cm4gbGlzdDsKLSNlbHNlCitzdGF0aWMgUHlPYmplY3QgKgorX3Bvc2l4X2xpc3RkaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBQeU9iamVjdCAqdjsKKyAgICBESVIgKmRpcnAgPSBOVUxMOworICAgIHN0cnVjdCBkaXJlbnQgKmVwOworICAgIGludCByZXR1cm5fc3RyOyAvKiBpZiBmYWxzZSwgcmV0dXJuIGJ5dGVzICovCisjaWZkZWYgSEFWRV9GRE9QRU5ESVIKKyAgICBpbnQgZmQgPSAtMTsKKyNlbmRpZgogCiAgICAgZXJybm8gPSAwOwogI2lmZGVmIEhBVkVfRkRPUEVORElSCi0gICAgaWYgKHBhdGguZmQgIT0gLTEpIHsKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpIHsKICAgICAgICAgLyogY2xvc2VkaXIoKSBjbG9zZXMgdGhlIEZELCBzbyB3ZSBkdXBsaWNhdGUgaXQgKi8KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBmZCA9IGR1cChwYXRoLmZkKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgICAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgICAgIGxpc3QgPSBwb3NpeF9lcnJvcigpOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9CisgICAgICAgIGZkID0gX1B5X2R1cChwYXRoLT5mZCk7CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIHJldHVybl9zdHIgPSAxOwogCkBAIC0zNzE2LDEwICszNzY0LDEwIEBACiAjZW5kaWYKICAgICB7CiAgICAgICAgIGNoYXIgKm5hbWU7Ci0gICAgICAgIGlmIChwYXRoLm5hcnJvdykgewotICAgICAgICAgICAgbmFtZSA9IHBhdGgubmFycm93OworICAgICAgICBpZiAocGF0aC0+bmFycm93KSB7CisgICAgICAgICAgICBuYW1lID0gcGF0aC0+bmFycm93OwogICAgICAgICAgICAgLyogb25seSByZXR1cm4gYnl0ZXMgaWYgdGhleSBzcGVjaWZpZWQgYSBieXRlcyBvYmplY3QgKi8KLSAgICAgICAgICAgIHJldHVybl9zdHIgPSAhKFB5Qnl0ZXNfQ2hlY2socGF0aC5vYmplY3QpKTsKKyAgICAgICAgICAgIHJldHVybl9zdHIgPSAhKFB5Qnl0ZXNfQ2hlY2socGF0aC0+b2JqZWN0KSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBuYW1lID0gIi4iOwpAQCAtMzczMiwxNCArMzc4MCwxNCBAQAogICAgIH0KIAogICAgIGlmIChkaXJwID09IE5VTEwpIHsKLSAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IoImxpc3RkaXIiLCAmcGF0aCk7CisgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogI2lmZGVmIEhBVkVfRkRPUEVORElSCiAgICAgICAgIGlmIChmZCAhPSAtMSkgewogICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgfQotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCisjZW5kaWYKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CkBAIC0zNzU1LDcgKzM4MDMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IoImxpc3RkaXIiLCAmcGF0aCk7CisgICAgICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNzg1LDE3ICszODMzLDQ0IEBACiAjaWZkZWYgSEFWRV9GRE9QRU5ESVIKICAgICAgICAgaWYgKGZkID4gLTEpCiAgICAgICAgICAgICByZXdpbmRkaXIoZGlycCk7Ci0jZW5kaWYgLyogSEFWRV9GRE9QRU5ESVIgKi8KKyNlbmRpZgogICAgICAgICBjbG9zZWRpcihkaXJwKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9CiAKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotCiAgICAgcmV0dXJuIGxpc3Q7Cit9ICAvKiBlbmQgb2YgX3Bvc2l4X2xpc3RkaXIgKi8KKyNlbmRpZiAgLyogd2hpY2ggT1MgKi8KIAotI2VuZGlmIC8qIHdoaWNoIE9TICovCi19ICAvKiBlbmQgb2YgcG9zaXhfbGlzdGRpciAqLworc3RhdGljIFB5T2JqZWN0ICoKK3Bvc2l4X2xpc3RkaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIHBhdGhfdCBwYXRoOworICAgIFB5T2JqZWN0ICpsaXN0ID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7CisKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxpc3RkaXIiOworICAgIHBhdGgubnVsbGFibGUgPSAxOworI2lmZGVmIEhBVkVfRkRPUEVORElSCisgICAgcGF0aC5hbGxvd19mZCA9IDE7CisgICAgcGF0aC5mZCA9IC0xOworI2VuZGlmCisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyY6bGlzdGRpciIsIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCisgICAgcmV0dXJuX3ZhbHVlID0gX2xpc3RkaXJfd2luZG93c19ub19vcGVuZGlyKCZwYXRoLCBsaXN0KTsKKyNlbHNlCisgICAgcmV0dXJuX3ZhbHVlID0gX3Bvc2l4X2xpc3RkaXIoJnBhdGgsIGxpc3QpOworI2VuZGlmCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQogCiAjaWZkZWYgTVNfV0lORE9XUwogLyogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGFic3BhdGggb24gd2luMzIgKi8KQEAgLTM4MDMsMTQgKzM4NzgsMTQgQEAKIHBvc2l4X19nZXRmdWxscGF0aG5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgY2hhciBvdXRidWZbTUFYX1BBVEgqMl07CisgICAgY2hhciBvdXRidWZbTUFYX1BBVEhdOwogICAgIGNoYXIgKnRlbXA7CiAgICAgUHlPYmplY3QgKnBvOwogCiAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8Ol9nZXRmdWxscGF0aG5hbWUiLCAmcG8pKQogICAgIHsKICAgICAgICAgd2NoYXJfdCAqd3BhdGg7Ci0gICAgICAgIHdjaGFyX3Qgd291dGJ1ZltNQVhfUEFUSCoyXSwgKndvdXRidWZwID0gd291dGJ1ZjsKKyAgICAgICAgd2NoYXJfdCB3b3V0YnVmW01BWF9QQVRIXSwgKndvdXRidWZwID0gd291dGJ1ZjsKICAgICAgICAgd2NoYXJfdCAqd3RlbXA7CiAgICAgICAgIERXT1JEIHJlc3VsdDsKICAgICAgICAgUHlPYmplY3QgKnY7CkBAIC0zODIyLDcgKzM4OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0FSUkFZX0xFTkdUSCh3b3V0YnVmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3V0YnVmLCAmd3RlbXApOwogICAgICAgICBpZiAocmVzdWx0ID4gUHlfQVJSQVlfTEVOR1RIKHdvdXRidWYpKSB7Ci0gICAgICAgICAgICB3b3V0YnVmcCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICAgICAgd291dGJ1ZnAgPSBQeU1lbV9NYWxsb2MocmVzdWx0ICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgICAgIGlmICghd291dGJ1ZnApCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXN1bHQgPSBHZXRGdWxsUGF0aE5hbWVXKHdwYXRoLCByZXN1bHQsIHdvdXRidWZwLCAmd3RlbXApOwpAQCAtMzgzMiw3ICszOTA3LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdiA9IHdpbjMyX2Vycm9yX29iamVjdCgiR2V0RnVsbFBhdGhOYW1lVyIsIHBvKTsKICAgICAgICAgaWYgKHdvdXRidWZwICE9IHdvdXRidWYpCi0gICAgICAgICAgICBmcmVlKHdvdXRidWZwKTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUod291dGJ1ZnApOwogICAgICAgICByZXR1cm4gdjsKICAgICB9CiAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwpAQCAtMzkwMiw3ICszOTc3LDcgQEAKICAgICBpZighYnVmX3NpemUpCiAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoIkdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSIsIHBvKTsKIAotICAgIHRhcmdldF9wYXRoID0gKHdjaGFyX3QgKiltYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgdGFyZ2V0X3BhdGggPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYygoYnVmX3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZighdGFyZ2V0X3BhdGgpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogCkBAIC0zOTE2LDM2ICszOTkxLDExIEBACiAKICAgICB0YXJnZXRfcGF0aFtyZXN1bHRfbGVuZ3RoXSA9IDA7CiAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih0YXJnZXRfcGF0aCwgcmVzdWx0X2xlbmd0aCk7Ci0gICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIAogfSAvKiBlbmQgb2YgcG9zaXhfX2dldGZpbmFscGF0aG5hbWUgKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X19nZXRmaWxlaW5mb3JtYXRpb24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIEhBTkRMRSBoRmlsZTsKLSAgICBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBpbmZvOwotICAgIGludCBmZDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgJmZkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotCi0gICAgaEZpbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKLSAgICBpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotCi0gICAgaWYgKCFHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZShoRmlsZSwgJmluZm8pKQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoIl9nZXRmaWxlaW5mb3JtYXRpb24iLCBOVUxMKTsKLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpaWkiLCBpbmZvLmR3Vm9sdW1lU2VyaWFsTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5GaWxlSW5kZXhIaWdoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5GaWxlSW5kZXhMb3cpOwotfQotCiBQeURvY19TVFJWQVIocG9zaXhfX2lzZGlyX19kb2NfXywKICJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iKTsKIApAQCAtMzk4NCw2ICs0MDM0LDU1IEBACiAgICAgZWxzZQogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiB9CisKK1B5RG9jX1NUUlZBUihwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWVfX2RvY19fLAorIlJldHVybiB2b2x1bWUgbW91bnQgcG9pbnQgb2YgdGhlIHNwZWNpZmllZCBwYXRoLiIpOworCisvKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgaXNtb3VudCBvbiB3aW5kb3dzICovCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcG8sICpyZXN1bHQ7CisgICAgd2NoYXJfdCAqcGF0aCwgKm1vdW50cGF0aD1OVUxMOworICAgIHNpemVfdCBidWZsZW47CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8Ol9nZXR2b2x1bWVwYXRobmFtZSIsICZwbykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHBhdGggPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShwbywgJmJ1Zmxlbik7CisgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmbGVuICs9IDE7CisKKyAgICAvKiBWb2x1bWUgcGF0aCBzaG91bGQgYmUgc2hvcnRlciB0aGFuIGVudGlyZSBwYXRoICovCisgICAgYnVmbGVuID0gUHlfTUFYKGJ1ZmxlbiwgTUFYX1BBVEgpOworCisgICAgaWYgKGJ1ZmxlbiA+IERXT1JEX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInBhdGggdG9vIGxvbmciKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbW91bnRwYXRoID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoYnVmbGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBpZiAobW91bnRwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldFZvbHVtZVBhdGhOYW1lVyhwYXRoLCBtb3VudHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NBRkVfRE9XTkNBU1QoYnVmbGVuLCBzaXplX3QsIERXT1JEKSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KSB7CisgICAgICAgIHJlc3VsdCA9IHdpbjMyX2Vycm9yX29iamVjdCgiX2dldHZvbHVtZXBhdGhuYW1lIiwgcG8pOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIobW91bnRwYXRoLCB3Y3NsZW4obW91bnRwYXRoKSk7CisKK2V4aXQ6CisgICAgUHlNZW1fRnJlZShtb3VudHBhdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisvKiBlbmQgb2YgcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lICovCisKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIFB5RG9jX1NUUlZBUihwb3NpeF9ta2Rpcl9fZG9jX18sCkBAIC00MDA4LDYgKzQxMDcsNyBAQAogICAgIGludCByZXN1bHQ7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gIm1rZGlyIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnxpJE8mOm1rZGlyIiwga2V5d29yZHMsCiAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsCiAjaWZkZWYgSEFWRV9NS0RJUkFUCkBAIC00MDI3LDcgKzQxMjcsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoIm1rZGlyIiwgcGF0aC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlCkBAIC00MDQ0LDcgKzQxNDQsNyBAQAogI2VuZGlmCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzdWx0IDwgMCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJta2RpciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTQxNjIsNiArNDI2Miw4IEBACiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOwogICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgICAgc3JjLmZ1bmN0aW9uX25hbWUgPSBmdW5jdGlvbl9uYW1lOworICAgIGRzdC5mdW5jdGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZTsKICAgICBzdHJjcHkoZm9ybWF0LCAiTyZPJnwkTyZPJjoiKTsKICAgICBzdHJjYXQoZm9ybWF0LCBmdW5jdGlvbl9uYW1lKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsIGZvcm1hdCwga2V5d29yZHMsCkBAIC00MTk1LDcgKzQyOTcsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoZnVuY3Rpb25fbmFtZSwgZHN0Lm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00MjEwLDcgKzQzMTIsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoZnVuY3Rpb25fbmFtZSwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC00Mjc0LDYgKzQzNzYsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJybWRpciI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOnJtZGlyIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9VTkxJTktBVApAQCAtNDMwMiw3ICs0NDA1LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJybWRpciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTQ0MzAsNiArNDUzMyw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInVubGluayI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOnVubGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfVU5MSU5LQVQKQEAgLTQ0NTgsNyArNDU2Miw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigidW5saW5rIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDc2MSw2ICs0ODY1LDcgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidXRpbWUiOwogICAgIG1lbXNldCgmdXRpbWUsIDAsIHNpemVvZih1dGltZV90KSk7CiAjaWYgVVRJTUVfSEFWRV9GRAogICAgIHBhdGguYWxsb3dfZmQgPSAxOwpAQCAtNDc5Niw5ICs0OTAxLDkgQEAKICAgICAgICAgfQogICAgICAgICB1dGltZS5ub3cgPSAwOwogICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKFB5VHVwbGVfR0VUX0lURU0odGltZXMsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhX3NlYywgJmFfbnNlYykgPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYV9zZWMsICZhX25zZWMsIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEgfHwKICAgICAgICAgICAgIF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhQeVR1cGxlX0dFVF9JVEVNKHRpbWVzLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbV9zZWMsICZtX25zZWMpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1fc2VjLCAmbV9uc2VjLCBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xKSB7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgdXRpbWUuYXRpbWVfcyA9IGFfc2VjOwpAQCAtNDg1NiwxOCArNDk2MSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICB3aW4zMl9lcnJvcl9vYmplY3QoInV0aW1lIiwgcGF0aC5vYmplY3QpOworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAogICAgIGlmICh1dGltZS5ub3cpIHsKLSAgICAgICAgU1lTVEVNVElNRSBub3c7Ci0gICAgICAgIEdldFN5c3RlbVRpbWUoJm5vdyk7Ci0gICAgICAgIGlmICghU3lzdGVtVGltZVRvRmlsZVRpbWUoJm5vdywgJm10aW1lKSB8fAotICAgICAgICAgICAgIVN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZub3csICZhdGltZSkpIHsKLSAgICAgICAgICAgIHdpbjMyX2Vycm9yKCJ1dGltZSIsIE5VTEwpOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9CisgICAgICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZtdGltZSk7CisgICAgICAgIGF0aW1lID0gbXRpbWU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB0aW1lX3RfdG9fRklMRV9USU1FKHV0aW1lLmF0aW1lX3MsIHV0aW1lLmF0aW1lX25zLCAmYXRpbWUpOwpAQCAtNDg3OCw3ICs0OTc4LDcgQEAKICAgICAgICAgICAgYXMgdGhhdCBtYXkgY29uZnVzZSB0aGUgdXNlciBpbnRvIGJlbGlldmluZyB0aGF0CiAgICAgICAgICAgIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBmaWxlLCB3aGVuIGl0IGFsc28KICAgICAgICAgICAgY291bGQgYmUgdGhlIHRpbWUgc3RhbXAgdGhhdCBnaXZlcyBhIHByb2JsZW0uICovCi0gICAgICAgIHdpbjMyX2Vycm9yKCJ1dGltZSIsIE5VTEwpOworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTQ5NjEsOCArNTA2MSwxMCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShieXRlcyk7CiAgICAgKm91dCA9IFB5TWVtX01hbGxvYyhzaXplKzEpOwotICAgIGlmICghKm91dCkKKyAgICBpZiAoISpvdXQpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIG1lbWNweSgqb3V0LCBQeUJ5dGVzX0FzU3RyaW5nKGJ5dGVzKSwgc2l6ZSsxKTsKICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogICAgIHJldHVybiAxOwpAQCAtNDk5MCw4ICs1MDkyLDEwIEBACiAgICAgfQogICAgIGVudmMgPSAwOwogICAgIGtleXMgPSBQeU1hcHBpbmdfS2V5cyhlbnYpOworICAgIGlmICgha2V5cykKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB2YWxzID0gUHlNYXBwaW5nX1ZhbHVlcyhlbnYpOwotICAgIGlmICgha2V5cyB8fCAhdmFscykKKyAgICBpZiAoIXZhbHMpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeUxpc3RfQ2hlY2soa2V5cykgfHwgIVB5TGlzdF9DaGVjayh2YWxzKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtNTAxMiwxMCArNTExNiw2IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICAvKiBPbWl0IFBzZXVkby1FbnYgVmFycyB0aGF0IFdvdWxkIENvbmZ1c2UgUHJvZ3JhbXMgaWYgUGFzc2VkIE9uICovCi0gICAgICAgIGlmIChzdHJpY21wKGssICJCRUdJTkxJQlBBVEgiKSAhPSAwICYmIHN0cmljbXAoaywgIkVORExJQlBBVEgiKSAhPSAwKSB7Ci0jZW5kaWYKICAgICAgICAgayA9IFB5Qnl0ZXNfQXNTdHJpbmcoa2V5Mik7CiAgICAgICAgIHYgPSBQeUJ5dGVzX0FzU3RyaW5nKHZhbDIpOwogICAgICAgICBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGtleTIpICsgUHlCeXRlc19HRVRfU0laRSh2YWwyKSArIDI7CkBAIC01MDMxLDkgKzUxMzEsNiBAQAogICAgICAgICBlbnZsaXN0W2VudmMrK10gPSBwOwogICAgICAgICBQeV9ERUNSRUYoa2V5Mik7CiAgICAgICAgIFB5X0RFQ1JFRih2YWwyKTsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAgICAgUHlfREVDUkVGKHZhbHMpOwogICAgIFB5X0RFQ1JFRihrZXlzKTsKQEAgLTUxNTksNiArNTI1Niw3IEBACiAgICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJleGVjdmUiOwogI2lmZGVmIEhBVkVfRkVYRUNWRQogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC01MTk4LDcgKzUyOTYsNyBAQAogCiAgICAgLyogSWYgd2UgZ2V0IGhlcmUgaXQncyBkZWZpbml0ZWx5IGFuIGVycm9yICovCiAKLSAgICBwYXRoX3Bvc2l4X2Vycm9yKCJleGVjdmUiLCAmcGF0aCk7CisgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAKICAgICB3aGlsZSAoLS1lbnZjID49IDApCiAgICAgICAgIFB5TWVtX0RFTChlbnZsaXN0W2VudmNdKTsKQEAgLTUyNzQsMTggKzUzNzIsMTIgQEAKICAgICB9CiAgICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3Bhd252YWwgPSBzcGF3bnYobW9kZSwgcGF0aCwgYXJndmxpc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZWxzZQogICAgIGlmIChtb2RlID09IF9PTERfUF9PVkVSTEFZKQogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzcGF3bnZhbCA9IF9zcGF3bnYobW9kZSwgcGF0aCwgYXJndmxpc3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZW5kaWYKIAogICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBhcmdjKTsKICAgICBQeV9ERUNSRUYob3BhdGgpOwpAQCAtNTI5MywxMSArNTM4NSw3IEBACiAgICAgaWYgKHNwYXdudmFsID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBlbHNlCi0jaWYgU0laRU9GX0xPTkcgPT0gU0laRU9GX1ZPSURfUAotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibCIsIChsb25nKSBzcGF3bnZhbCk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTCIsIChQWV9MT05HX0xPTkcpIHNwYXdudmFsKTsKLSNlbmRpZgorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSLCBzcGF3bnZhbCk7CiB9CiAKIApAQCAtNTM3MywyNyArNTQ2MSwxNyBAQAogICAgIGlmIChlbnZsaXN0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbF8xOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3Bhd252YWwgPSBzcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2Vsc2UKICAgICBpZiAobW9kZSA9PSBfT0xEX1BfT1ZFUkxBWSkKICAgICAgICAgbW9kZSA9IF9QX09WRVJMQVk7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc3Bhd252YWwgPSBfc3Bhd252ZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbmRpZgogCiAgICAgaWYgKHNwYXdudmFsID09IC0xKQogICAgICAgICAodm9pZCkgcG9zaXhfZXJyb3IoKTsKICAgICBlbHNlCi0jaWYgU0laRU9GX0xPTkcgPT0gU0laRU9GX1ZPSURfUAotICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLSNlbHNlCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoIkwiLCAoUFlfTE9OR19MT05HKSBzcGF3bnZhbCk7Ci0jZW5kaWYKKyAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSLCBzcGF3bnZhbCk7CiAKICAgICB3aGlsZSAoLS1lbnZjID49IDApCiAgICAgICAgIFB5TWVtX0RFTChlbnZsaXN0W2VudmNdKTsKQEAgLTU0MDUsMTgzICs1NDgzLDYgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiBPUy8yIHN1cHBvcnRzIHNwYXdudnAgJiBzcGF3bnZwZSBuYXRpdmVseSAqLwotI2lmIGRlZmluZWQoUFlPU19PUzIpCi1QeURvY19TVFJWQVIocG9zaXhfc3Bhd252cF9fZG9jX18sCi0ic3Bhd252cChtb2RlLCBmaWxlLCBhcmdzKVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdmaWxlJyBpbiBhIG5ldyBwcm9jZXNzLCB1c2luZyB0aGUgZW52aXJvbm1lbnRcblwKLXNlYXJjaCBwYXRoIHRvIGZpbmQgdGhlIGZpbGUuXG5cCi1cblwKLSAgICBtb2RlOiBtb2RlIG9mIHByb2Nlc3MgY3JlYXRpb25cblwKLSAgICBmaWxlOiBleGVjdXRhYmxlIGZpbGUgbmFtZVxuXAotICAgIGFyZ3M6IHR1cGxlIG9yIGxpc3Qgb2Ygc3RyaW5ncyIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3Bhd252cChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3Y7Ci0gICAgY2hhciAqKmFyZ3ZsaXN0OwotICAgIGludCBtb2RlLCBpLCBhcmdjOwotICAgIFB5X2ludHB0cl90IHNwYXdudmFsOwotICAgIFB5T2JqZWN0ICooKmdldGl0ZW0pKFB5T2JqZWN0ICosIFB5X3NzaXplX3QpOwotCi0gICAgLyogc3Bhd252cCBoYXMgdGhyZWUgYXJndW1lbnRzOiAobW9kZSwgcGF0aCwgYXJndiksIHdoZXJlCi0gICAgICAgYXJndiBpcyBhIGxpc3Qgb3IgdHVwbGUgb2Ygc3RyaW5ncy4gKi8KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU8mTzpzcGF3bnZwIiwgJm1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmYXJndikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKLSAgICBpZiAoUHlMaXN0X0NoZWNrKGFyZ3YpKSB7Ci0gICAgICAgIGFyZ2MgPSBQeUxpc3RfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5TGlzdF9HZXRJdGVtOwotICAgIH0KLSAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKGFyZ3YpKSB7Ci0gICAgICAgIGFyZ2MgPSBQeVR1cGxlX1NpemUoYXJndik7Ci0gICAgICAgIGdldGl0ZW0gPSBQeVR1cGxlX0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNwYXdudnAoKSBhcmcgMiBtdXN0IGJlIGEgdHVwbGUgb3IgbGlzdCIpOwotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBhcmd2bGlzdCA9IFB5TWVtX05FVyhjaGFyICosIGFyZ2MrMSk7Ci0gICAgaWYgKGFyZ3ZsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgaWYgKCFmc2NvbnZlcnRfc3RyZHVwKCgqZ2V0aXRlbSkoYXJndiwgaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJndmxpc3RbaV0pKSB7Ci0gICAgICAgICAgICBmcmVlX3N0cmluZ19hcnJheShhcmd2bGlzdCwgaSk7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJzcGF3bnZwKCkgYXJnIDIgbXVzdCBjb250YWluIG9ubHkgc3RyaW5ncyIpOwotICAgICAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIGFyZ3ZsaXN0W2FyZ2NdID0gTlVMTDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHNwYXdudmFsID0gc3Bhd252cChtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0jZWxzZQotICAgIHNwYXdudmFsID0gX3NwYXdudnAobW9kZSwgcGF0aCwgYXJndmxpc3QpOwotI2VuZGlmCi0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBhcmdjKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOwotCi0gICAgaWYgKHNwYXdudmFsID09IC0xKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLX0KLQotCi1QeURvY19TVFJWQVIocG9zaXhfc3Bhd252cGVfX2RvY19fLAotInNwYXdudnBlKG1vZGUsIGZpbGUsIGFyZ3MsIGVudilcblxuXAotRXhlY3V0ZSB0aGUgcHJvZ3JhbSAnZmlsZScgaW4gYSBuZXcgcHJvY2VzcywgdXNpbmcgdGhlIGVudmlyb25tZW50XG5cCi1zZWFyY2ggcGF0aCB0byBmaW5kIHRoZSBmaWxlLlxuXAotXG5cCi0gICAgbW9kZTogbW9kZSBvZiBwcm9jZXNzIGNyZWF0aW9uXG5cCi0gICAgZmlsZTogZXhlY3V0YWJsZSBmaWxlIG5hbWVcblwKLSAgICBhcmdzOiB0dXBsZSBvciBsaXN0IG9mIGFyZ3VtZW50c1xuXAotICAgIGVudjogZGljdGlvbmFyeSBvZiBzdHJpbmdzIG1hcHBpbmcgdG8gc3RyaW5ncyIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3Bhd252cGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOwotICAgIFB5T2JqZWN0ICphcmd2LCAqZW52OwotICAgIGNoYXIgKiphcmd2bGlzdDsKLSAgICBjaGFyICoqZW52bGlzdDsKLSAgICBQeU9iamVjdCAqcmVzPU5VTEw7Ci0gICAgaW50IG1vZGU7Ci0gICAgUHlfc3NpemVfdCBhcmdjLCBpLCBlbnZjOwotICAgIFB5X2ludHB0cl90IHNwYXdudmFsOwotICAgIFB5T2JqZWN0ICooKmdldGl0ZW0pKFB5T2JqZWN0ICosIFB5X3NzaXplX3QpOwotICAgIGludCBsYXN0YXJnID0gMDsKLQotICAgIC8qIHNwYXdudnBlIGhhcyBmb3VyIGFyZ3VtZW50czogKG1vZGUsIHBhdGgsIGFyZ3YsIGVudiksIHdoZXJlCi0gICAgICAgYXJndiBpcyBhIGxpc3Qgb3IgdHVwbGUgb2Ygc3RyaW5ncyBhbmQgZW52IGlzIGEgZGljdGlvbmFyeQotICAgICAgIGxpa2UgcG9zaXguZW52aXJvbi4gKi8KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWV0T086c3Bhd252cGUiLCAmbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2LCAmZW52KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwotICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5VHVwbGVfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cGUoKSBhcmcgMiBtdXN0IGJlIGEgdHVwbGUgb3IgbGlzdCIpOwotICAgICAgICBnb3RvIGZhaWxfMDsKLSAgICB9Ci0gICAgaWYgKCFQeU1hcHBpbmdfQ2hlY2soZW52KSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNwYXdudnBlKCkgYXJnIDMgbXVzdCBiZSBhIG1hcHBpbmcgb2JqZWN0Iik7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLQotICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKLSAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICBnb3RvIGZhaWxfMDsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBpZiAoIWZzY29udmVydF9zdHJkdXAoKCpnZXRpdGVtKShhcmd2LCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmd2bGlzdFtpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxhc3RhcmcgPSBpOwotICAgICAgICAgICAgZ290byBmYWlsXzE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbGFzdGFyZyA9IGFyZ2M7Ci0gICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwotCi0gICAgZW52bGlzdCA9IHBhcnNlX2Vudmxpc3QoZW52LCAmZW52Yyk7Ci0gICAgaWYgKGVudmxpc3QgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsXzE7Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBzcGF3bnZhbCA9IHNwYXdudnBlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKLSNlbHNlCi0gICAgc3Bhd252YWwgPSBfc3Bhd252cGUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotI2VuZGlmCi0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChzcGF3bnZhbCA9PSAtMSkKLSAgICAgICAgKHZvaWQpIHBvc2l4X2Vycm9yKCk7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLQotICAgIHdoaWxlICgtLWVudmMgPj0gMCkKLSAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwotICAgIFB5TWVtX0RFTChlbnZsaXN0KTsKLSAgZmFpbF8xOgotICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBsYXN0YXJnKTsKLSAgZmFpbF8wOgotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmIC8qIEhBVkVfU1BBV05WICovCiAKIApAQCAtNjA4NCw3ICs1OTg1LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9vcGVucHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogewotICAgIGludCBtYXN0ZXJfZmQsIHNsYXZlX2ZkOworICAgIGludCBtYXN0ZXJfZmQgPSAtMSwgc2xhdmVfZmQgPSAtMTsKICNpZm5kZWYgSEFWRV9PUEVOUFRZCiAgICAgY2hhciAqIHNsYXZlX25hbWU7CiAjZW5kaWYKQEAgLTYwOTcsMzcgKzU5OTgsNTYgQEAKIAogI2lmZGVmIEhBVkVfT1BFTlBUWQogICAgIGlmIChvcGVucHR5KCZtYXN0ZXJfZmQsICZzbGF2ZV9mZCwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzbGF2ZV9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCiAjZWxpZiBkZWZpbmVkKEhBVkVfX0dFVFBUWSkKICAgICBzbGF2ZV9uYW1lID0gX2dldHB0eSgmbWFzdGVyX2ZkLCBPX1JEV1IsIDA2NjYsIDApOwogICAgIGlmIChzbGF2ZV9uYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgc2xhdmVfZmQgPSBvcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CisgICAgc2xhdmVfZmQgPSBfUHlfb3BlbihzbGF2ZV9uYW1lLCBPX1JEV1IpOwogICAgIGlmIChzbGF2ZV9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCiAjZWxzZQogICAgIG1hc3Rlcl9mZCA9IG9wZW4oREVWX1BUWV9GSUxFLCBPX1JEV1IgfCBPX05PQ1RUWSk7IC8qIG9wZW4gbWFzdGVyICovCiAgICAgaWYgKG1hc3Rlcl9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCiAgICAgc2lnX3NhdmVkID0gUHlPU19zZXRzaWcoU0lHQ0hMRCwgU0lHX0RGTCk7CisKICAgICAvKiBjaGFuZ2UgcGVybWlzc2lvbiBvZiBzbGF2ZSAqLwogICAgIGlmIChncmFudHB0KG1hc3Rlcl9mZCkgPCAwKSB7CiAgICAgICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOwogICAgIH0KKwogICAgIC8qIHVubG9jayBzbGF2ZSAqLwogICAgIGlmICh1bmxvY2twdChtYXN0ZXJfZmQpIDwgMCkgewogICAgICAgICBQeU9TX3NldHNpZyhTSUdDSExELCBzaWdfc2F2ZWQpOwotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKICAgICB9CisKICAgICBQeU9TX3NldHNpZyhTSUdDSExELCBzaWdfc2F2ZWQpOworCiAgICAgc2xhdmVfbmFtZSA9IHB0c25hbWUobWFzdGVyX2ZkKTsgLyogZ2V0IG5hbWUgb2Ygc2xhdmUgKi8KICAgICBpZiAoc2xhdmVfbmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBzbGF2ZV9mZCA9IG9wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBzbGF2ZSAqLwogICAgIGlmIChzbGF2ZV9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICNpZiAhZGVmaW5lZChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChIQVZFX0RFVl9QVEMpCiAgICAgaW9jdGwoc2xhdmVfZmQsIElfUFVTSCwgInB0ZW0iKTsgLyogcHVzaCBwdGVtICovCiAgICAgaW9jdGwoc2xhdmVfZmQsIElfUFVTSCwgImxkdGVybSIpOyAvKiBwdXNoIGxkdGVybSAqLwpAQCAtNjEzOSw2ICs2MDU5LDE2IEBACiAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIG1hc3Rlcl9mZCwgc2xhdmVfZmQpOwogCitwb3NpeF9lcnJvcjoKKyAgICBwb3NpeF9lcnJvcigpOworI2lmIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkKK2Vycm9yOgorI2VuZGlmCisgICAgaWYgKG1hc3Rlcl9mZCAhPSAtMSkKKyAgICAgICAgY2xvc2UobWFzdGVyX2ZkKTsKKyAgICBpZiAoc2xhdmVfZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKHNsYXZlX2ZkKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfT1BFTlBUWSkgfHwgZGVmaW5lZChIQVZFX19HRVRQVFkpIHx8IGRlZmluZWQoSEFWRV9ERVZfUFRNWCkgKi8KIApAQCAtNjYzMSwyMyArNjU2MSw4IEBACiAgICAgaW50IHNpZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTpraWxsIiwgJnBpZCwgJnNpZykpCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChzaWcgPT0gWENQVF9TSUdOQUxfSU5UUiB8fCBzaWcgPT0gWENQVF9TSUdOQUxfQlJFQUspIHsKLSAgICAgICAgQVBJUkVUIHJjOwotICAgICAgICBpZiAoKHJjID0gRG9zU2VuZFNpZ25hbEV4Y2VwdGlvbihwaWQsIHNpZykpICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7Ci0KLSAgICB9IGVsc2UgaWYgKHNpZyA9PSBYQ1BUX1NJR05BTF9LSUxMUFJPQykgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIGlmICgocmMgPSBEb3NLaWxsUHJvY2VzcyhES1BfUFJPQ0VTUywgcGlkKSkgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsgLyogVW5yZWNvZ25pemVkIFNpZ25hbCBSZXF1ZXN0ZWQgKi8KLSNlbHNlCiAgICAgaWYgKGtpbGwocGlkLCBzaWcpID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSNlbmRpZgogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTY2ODUsMTYgKzY2MDAsMTcgQEAKIHdpbjMyX2tpbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgRFdPUkQgcGlkLCBzaWcsIGVycjsKKyAgICBwaWRfdCBwaWQ7CisgICAgRFdPUkQgc2lnLCBlcnI7CiAgICAgSEFORExFIGhhbmRsZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAia2s6a2lsbCIsICZwaWQsICZzaWcpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJrOmtpbGwiLCAmcGlkLCAmc2lnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBDb25zb2xlIHByb2Nlc3NlcyB3aGljaCBzaGFyZSBhIGNvbW1vbiBjb25zb2xlIGNhbiBiZSBzZW50IENUUkwrQyBvcgogICAgICAgIENUUkwrQlJFQUsgZXZlbnRzLCBwcm92aWRlZCB0aGV5IGhhbmRsZSBzYWlkIGV2ZW50cy4gKi8KICAgICBpZiAoc2lnID09IENUUkxfQ19FVkVOVCB8fCBzaWcgPT0gQ1RSTF9CUkVBS19FVkVOVCkgewotICAgICAgICBpZiAoR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50KHNpZywgcGlkKSA9PSAwKSB7CisgICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCAoRFdPUkQpcGlkKSA9PSAwKSB7CiAgICAgICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CiAgICAgICAgIH0KQEAgLTY3MDQsNyArNjYyMCw3IEBACiAKICAgICAvKiBJZiB0aGUgc2lnbmFsIGlzIG91dHNpZGUgb2Ygd2hhdCBHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQgY2FuIHVzZSwKICAgICAgICBhdHRlbXB0IHRvIG9wZW4gYW5kIHRlcm1pbmF0ZSB0aGUgcHJvY2Vzcy4gKi8KLSAgICBoYW5kbGUgPSBPcGVuUHJvY2VzcyhQUk9DRVNTX0FMTF9BQ0NFU1MsIEZBTFNFLCBwaWQpOworICAgIGhhbmRsZSA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRkFMU0UsIChEV09SRClwaWQpOwogICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgewogICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CkBAIC03MTEwLDcgKzcwMjYsNyBAQAogICAgIFB5X2ludHB0cl90IHBpZDsKICAgICBpbnQgc3RhdHVzLCBvcHRpb25zOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6d2FpdHBpZCIsICZwaWQsICZvcHRpb25zKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiaTp3YWl0cGlkIiwgJnBpZCwgJm9wdGlvbnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcGlkID0gX2N3YWl0KCZzdGF0dXMsIHBpZCwgb3B0aW9ucyk7CkBAIC03MTE5LDcgKzcwMzUsNyBAQAogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKIAogICAgIC8qIHNoaWZ0IHRoZSBzdGF0dXMgbGVmdCBhIGJ5dGUgc28gdGhpcyBpcyBtb3JlIGxpa2UgdGhlIFBPU0lYIHdhaXRwaWQgKi8KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmkiLCBQeUxvbmdfRnJvbVBpZChwaWQpLCBzdGF0dXMgPDwgOCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoX1B5X1BBUlNFX0lOVFBUUiAiaSIsIHBpZCwgc3RhdHVzIDw8IDgpOwogfQogI2VuZGlmIC8qIEhBVkVfV0FJVFBJRCB8fCBIQVZFX0NXQUlUICovCiAKQEAgLTcxNzAsNiArNzA4Niw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJlYWRsaW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6cmVhZGxpbmsiLCBrZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfUkVBRExJTktBVApAQCAtNzE5MCw3ICs3MTA3LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGxlbmd0aCA8IDApIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigicmVhZGxpbmsiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC03MjI2LDggKzcxNDMsOSBAQAogLyogR3JhYiBDcmVhdGVTeW1ib2xpY0xpbmtXIGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KIHN0YXRpYyBEV09SRCAoQ0FMTEJBQ0sgKlB5X0NyZWF0ZVN5bWJvbGljTGlua1cpKExQV1NUUiwgTFBXU1RSLCBEV09SRCkgPSBOVUxMOwogc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfQ3JlYXRlU3ltYm9saWNMaW5rQSkoTFBTVFIsIExQU1RSLCBEV09SRCkgPSBOVUxMOworCiBzdGF0aWMgaW50Ci1jaGVja19DcmVhdGVTeW1ib2xpY0xpbmsoKQorY2hlY2tfQ3JlYXRlU3ltYm9saWNMaW5rKHZvaWQpCiB7CiAgICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKICAgICAvKiBvbmx5IHJlY2hlY2sgKi8KQEAgLTcyNDEsNTUgKzcxNTksNTcgQEAKICAgICByZXR1cm4gKFB5X0NyZWF0ZVN5bWJvbGljTGlua1cgJiYgUHlfQ3JlYXRlU3ltYm9saWNMaW5rQSk7CiB9CiAKLXZvaWQgX2Rpcm5hbWVXKFdDSEFSICpwYXRoKSB7Ci0gICAgLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KLQorLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KK3N0YXRpYyB2b2lkCitfZGlybmFtZVcoV0NIQVIgKnBhdGgpCit7CiAgICAgV0NIQVIgKnB0cjsKIAogICAgIC8qIHdhbGsgdGhlIHBhdGggZnJvbSB0aGUgZW5kIHVudGlsIGEgYmFja3NsYXNoIGlzIGVuY291bnRlcmVkICovCi0gICAgZm9yKHB0ciA9IHBhdGggKyB3Y3NsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkKLSAgICB7Ci0gICAgICAgIGlmKCpwdHIgPT0gKkwiXFwiIHx8ICpwdHIgPT0gKkwiLyIpIHsKKyAgICBmb3IocHRyID0gcGF0aCArIHdjc2xlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKSB7CisgICAgICAgIGlmICgqcHRyID09IEwnXFwnIHx8ICpwdHIgPT0gTCcvJykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgICpwdHIgPSAwOwogfQogCi12b2lkIF9kaXJuYW1lQShjaGFyICpwYXRoKSB7Ci0gICAgLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KLQorLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KK3N0YXRpYyB2b2lkCitfZGlybmFtZUEoY2hhciAqcGF0aCkKK3sKICAgICBjaGFyICpwdHI7CiAKICAgICAvKiB3YWxrIHRoZSBwYXRoIGZyb20gdGhlIGVuZCB1bnRpbCBhIGJhY2tzbGFzaCBpcyBlbmNvdW50ZXJlZCAqLwotICAgIGZvcihwdHIgPSBwYXRoICsgc3RybGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pCi0gICAgewotICAgICAgICBpZigqcHRyID09ICdcXCcgfHwgKnB0ciA9PSAnLycpIHsKKyAgICBmb3IocHRyID0gcGF0aCArIHN0cmxlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKSB7CisgICAgICAgIGlmICgqcHRyID09ICdcXCcgfHwgKnB0ciA9PSAnLycpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgIH0KICAgICAqcHRyID0gMDsKIH0KIAotaW50IF9pc19hYnNXKFdDSEFSICpwYXRoKSB7Ci0gICAgLyogSXMgdGhpcyBwYXRoIGFic29sdXRlPyAqLwotCisvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCitzdGF0aWMgaW50CitfaXNfYWJzVyhjb25zdCBXQ0hBUiAqcGF0aCkKK3sKICAgICByZXR1cm4gcGF0aFswXSA9PSBMJ1xcJyB8fCBwYXRoWzBdID09IEwnLycgfHwgcGF0aFsxXSA9PSBMJzonOwogCiB9CiAKLWludCBfaXNfYWJzQShjaGFyICpwYXRoKSB7Ci0gICAgLyogSXMgdGhpcyBwYXRoIGFic29sdXRlPyAqLwotCisvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCitzdGF0aWMgaW50CitfaXNfYWJzQShjb25zdCBjaGFyICpwYXRoKQorewogICAgIHJldHVybiBwYXRoWzBdID09ICdcXCcgfHwgcGF0aFswXSA9PSAnLycgfHwgcGF0aFsxXSA9PSAnOic7CiAKIH0KIAotdm9pZCBfam9pblcoV0NIQVIgKmRlc3RfcGF0aCwgY29uc3QgV0NIQVIgKnJvb3QsIGNvbnN0IFdDSEFSICpyZXN0KSB7Ci0gICAgLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KLSAgICBpbnQgcm9vdF9sZW47CisvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLworc3RhdGljIHZvaWQKK19qb2luVyhXQ0hBUiAqZGVzdF9wYXRoLCBjb25zdCBXQ0hBUiAqcm9vdCwgY29uc3QgV0NIQVIgKnJlc3QpCit7CisgICAgc2l6ZV90IHJvb3RfbGVuOwogCi0gICAgaWYoX2lzX2Fic1cocmVzdCkpIHsKKyAgICBpZiAoX2lzX2Fic1cocmVzdCkpIHsKICAgICAgICAgd2NzY3B5KGRlc3RfcGF0aCwgcmVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03Mjk4LDE3ICs3MjE4LDE5IEBACiAKICAgICB3Y3NjcHkoZGVzdF9wYXRoLCByb290KTsKICAgICBpZihyb290X2xlbikgewotICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gKkwiXFwiOwotICAgICAgICByb290X2xlbiArPSAxOworICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gTCdcXCc7CisgICAgICAgIHJvb3RfbGVuKys7CiAgICAgfQogICAgIHdjc2NweShkZXN0X3BhdGgrcm9vdF9sZW4sIHJlc3QpOwogfQogCi12b2lkIF9qb2luQShjaGFyICpkZXN0X3BhdGgsIGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKnJlc3QpIHsKLSAgICAvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLwotICAgIGludCByb290X2xlbjsKKy8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCitzdGF0aWMgdm9pZAorX2pvaW5BKGNoYXIgKmRlc3RfcGF0aCwgY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqcmVzdCkKK3sKKyAgICBzaXplX3Qgcm9vdF9sZW47CiAKLSAgICBpZihfaXNfYWJzQShyZXN0KSkgeworICAgIGlmIChfaXNfYWJzQShyZXN0KSkgewogICAgICAgICBzdHJjcHkoZGVzdF9wYXRoLCByZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTczMTgsMTQgKzcyNDAsMTUgQEAKICAgICBzdHJjcHkoZGVzdF9wYXRoLCByb290KTsKICAgICBpZihyb290X2xlbikgewogICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gJ1xcJzsKLSAgICAgICAgcm9vdF9sZW4gKz0gMTsKKyAgICAgICAgcm9vdF9sZW4rKzsKICAgICB9CiAgICAgc3RyY3B5KGRlc3RfcGF0aCtyb290X2xlbiwgcmVzdCk7CiB9CiAKLWludCBfY2hlY2tfZGlyVyhXQ0hBUiAqc3JjLCBXQ0hBUiAqZGVzdCkKKy8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCitzdGF0aWMgaW50CitfY2hlY2tfZGlyVyhXQ0hBUiAqc3JjLCBXQ0hBUiAqZGVzdCkKIHsKLSAgICAvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgc3JjX2luZm87CiAgICAgV0NIQVIgZGVzdF9wYXJlbnRbTUFYX1BBVEhdOwogICAgIFdDSEFSIHNyY19yZXNvbHZlZFtNQVhfUEFUSF0gPSBMIiI7CkBAIC03MzQxLDE4ICs3MjY0LDE5IEBACiAgICAgKTsKIH0KIAotaW50IF9jaGVja19kaXJBKGNoYXIgKnNyYywgY2hhciAqZGVzdCkKKy8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCitzdGF0aWMgaW50CitfY2hlY2tfZGlyQShjaGFyICpzcmMsIGNoYXIgKmRlc3QpCiB7Ci0gICAgLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIHNyY19pbmZvOwogICAgIGNoYXIgZGVzdF9wYXJlbnRbTUFYX1BBVEhdOwogICAgIGNoYXIgc3JjX3Jlc29sdmVkW01BWF9QQVRIXSA9ICIiOwogCiAgICAgLyogZGVzdF9wYXJlbnQgPSBvcy5wYXRoLmRpcm5hbWUoZGVzdCkgKi8KICAgICBzdHJjcHkoZGVzdF9wYXJlbnQsIGRlc3QpOwotICAgIF9kaXJuYW1lVyhkZXN0X3BhcmVudCk7CisgICAgX2Rpcm5hbWVBKGRlc3RfcGFyZW50KTsKICAgICAvKiBzcmNfcmVzb2x2ZWQgPSBvcy5wYXRoLmpvaW4oZGVzdF9wYXJlbnQsIHNyYykgKi8KLSAgICBfam9pblcoc3JjX3Jlc29sdmVkLCBkZXN0X3BhcmVudCwgc3JjKTsKKyAgICBfam9pbkEoc3JjX3Jlc29sdmVkLCBkZXN0X3BhcmVudCwgc3JjKTsKICAgICByZXR1cm4gKAogICAgICAgICBHZXRGaWxlQXR0cmlidXRlc0V4QShzcmNfcmVzb2x2ZWQsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJnNyY19pbmZvKQogICAgICAgICAmJiBzcmNfaW5mby5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZCkBAIC03Mzc4LDggKzczMDIsMTAgQEAKICNlbmRpZgogCiAgICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJzeW1saW5rIjsKICAgICBzcmMuYXJndW1lbnRfbmFtZSA9ICJzcmMiOwogICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgICAgZHN0LmZ1bmN0aW9uX25hbWUgPSAic3ltbGluayI7CiAgICAgZHN0LmFyZ3VtZW50X25hbWUgPSAiZHN0IjsKIAogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTc0MzIsNyArNzM1OCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgic3ltbGluayIsIHNyYy5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNzQ0OCw3ICs3Mzc0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJzeW1saW5rIiwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC03NjEwLDMxICs3NTM2LDcgQEAKIHRpbWVzLiAgVGhlIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBuYW1lZCB0dXBsZSB3aXRoIHRoZXNlIGZpZWxkczpcblwKICAgKHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWUsIGVsYXBzZWRfdGltZSkiKTsKIAotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLXN0YXRpYyBsb25nCi1zeXN0ZW1fdXB0aW1lKHZvaWQpCi17Ci0gICAgVUxPTkcgICAgIHZhbHVlID0gMDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBEb3NRdWVyeVN5c0luZm8oUVNWX01TX0NPVU5ULCBRU1ZfTVNfQ09VTlQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3RpbWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQotewotICAgIC8qIEN1cnJlbnRseSBPbmx5IFVwdGltZSBpcyBQcm92aWRlZCAtLSBPdGhlcnMgTGF0ZXIgKi8KLSAgICByZXR1cm4gYnVpbGRfdGltZXNfcmVzdWx0KAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc191dGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19zdGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19jdXRpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKTAgLyogdC50bXNfY3N0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlzeXN0ZW1fdXB0aW1lKCkgLyAxMDAwKTsKLX0KLSNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7CkBAIC03NjU2LDcgKzc1NTgsNyBAQAogICAgICAgICAoZG91YmxlKTAsCiAgICAgICAgIChkb3VibGUpMCk7CiB9Ci0jZWxzZSAvKiBOZWl0aGVyIFdpbmRvd3Mgbm9yIE9TLzIgKi8KKyNlbHNlIC8qIE5vdCBXaW5kb3dzICovCiAjZGVmaW5lIE5FRURfVElDS1NfUEVSX1NFQ09ORAogc3RhdGljIGxvbmcgdGlja3NfcGVyX3NlY29uZCA9IC0xOwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTc3NzYsNiArNzY3OCwxMCBAQAogCiAvKiBGdW5jdGlvbnMgYWN0aW5nIG9uIGZpbGUgZGVzY3JpcHRvcnMgKi8KIAorI2lmZGVmIE9fQ0xPRVhFQworZXh0ZXJuIGludCBfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VuZGlmCisKIFB5RG9jX1NUUlZBUihwb3NpeF9vcGVuX19kb2NfXywKICJvcGVuKHBhdGgsIGZsYWdzLCBtb2RlPTBvNzc3LCAqLCBkaXJfZmQ9Tm9uZSlcblxuXAogT3BlbiBhIGZpbGUgZm9yIGxvdyBsZXZlbCBJTy4gIFJldHVybnMgYSBmaWxlIGhhbmRsZSAoaW50ZWdlcikuXG5cCkBAIC03Nzk1LDggKzc3MDEsMTQgQEAKICAgICBpbnQgZmQ7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZmxhZ3MiLCAibW9kZSIsICJkaXJfZmQiLCBOVUxMfTsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJl9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZWxpZiAhZGVmaW5lZChNU19XSU5ET1dTKQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gIm9wZW4iOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXxpJE8mOm9wZW4iLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAmZmxhZ3MsICZtb2RlLApAQCAtNzgwOCw2ICs3NzIwLDEyIEBACiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisjaWZkZWYgTVNfV0lORE9XUworICAgIGZsYWdzIHw9IE9fTk9JTkhFUklUOworI2VsaWYgZGVmaW5lZChPX0NMT0VYRUMpCisgICAgZmxhZ3MgfD0gT19DTE9FWEVDOworI2VuZGlmCisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChwYXRoLndpZGUpCkBAIC03ODIzLDE2ICs3NzQxLDE3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChmZCA9PSAtMSkgewotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgLyogZm9yY2UgdXNlIG9mIHBvc2l4X2Vycm9yIGhlcmUgZm9yIGV4YWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgIGlmIChwYXRoLndpZGUpCi0gICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9lcnJvcigpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigib3BlbiIsICZwYXRoKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHBhdGgub2JqZWN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAorI2lmbmRlZiBNU19XSU5ET1dTCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpZmQpOwogCiBleGl0OgpAQCAtNzg5MywxMyArNzgxMiwxNCBAQAogcG9zaXhfZHVwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgZmQ7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZHVwIiwgJmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBmZCA9IGR1cChmZCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBmZCA9IF9QeV9kdXAoZmQpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKIH0KIApAQCAtNzkwOSwxNiArNzgyOSw4MiBAQAogRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvci4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2R1cDIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcG9zaXhfZHVwMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgaW50IGZkLCBmZDIsIHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOmR1cDIiLCAmZmQsICZmZDIpKQorICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJmZCIsICJmZDIiLCAiaW5oZXJpdGFibGUiLCBOVUxMfTsKKyAgICBpbnQgZmQsIGZkMjsKKyAgICBpbnQgaW5oZXJpdGFibGUgPSAxOworICAgIGludCByZXM7CisjaWYgZGVmaW5lZChIQVZFX0RVUDMpICYmIFwKKyAgICAhKGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQMkZEX0NMT0VYRUMpKQorICAgIC8qIGR1cDMoKSBpcyBhdmFpbGFibGUgb24gTGludXggMi42LjI3KyBhbmQgZ2xpYmMgMi45ICovCisgICAgaW50IGR1cDNfd29ya3MgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaWl8aTpkdXAyIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZkLCAmZmQyLCAmaW5oZXJpdGFibGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmICghX1B5VmVyaWZ5X2ZkX2R1cDIoZmQsIGZkMikpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgLyogQ2hhcmFjdGVyIGZpbGVzIGxpa2UgY29uc29sZSBjYW5ub3QgYmUgbWFrZSBub24taW5oZXJpdGFibGUgKi8KKyAgICBpZiAoIWluaGVyaXRhYmxlICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoZmQyLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUDJGRF9DTE9FWEVDKQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoIWluaGVyaXRhYmxlKQorICAgICAgICByZXMgPSBmY250bChmZCwgRl9EVVAyRkRfQ0xPRVhFQywgZmQyKTsKKyAgICBlbHNlCisgICAgICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyNlbHNlCisKKyNpZmRlZiBIQVZFX0RVUDMKKyAgICBpZiAoIWluaGVyaXRhYmxlICYmIGR1cDNfd29ya3MgIT0gMCkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGR1cDMoZmQsIGZkMiwgT19DTE9FWEVDKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIGlmIChkdXAzX3dvcmtzID09IC0xKQorICAgICAgICAgICAgICAgIGR1cDNfd29ya3MgPSAoZXJybm8gIT0gRU5PU1lTKTsKKyAgICAgICAgICAgIGlmIChkdXAzX3dvcmtzKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlIHx8IGR1cDNfd29ya3MgPT0gMCkKKyAgICB7CisjZW5kaWYKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgICAgIGlmICghaW5oZXJpdGFibGUgJiYgX1B5X3NldF9pbmhlcml0YWJsZShmZDIsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgY2xvc2UoZmQyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisjaWZkZWYgSEFWRV9EVVAzCisgICAgfQorI2VuZGlmCisKKyNlbmRpZgorCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNzk2Miw3ICs3OTQ4LDcgQEAKIHBvc2l4X2xzZWVrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgZmQsIGhvdzsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIFBZX0xPTkdfTE9ORyBwb3MsIHJlczsKICNlbHNlCiAgICAgb2ZmX3QgcG9zLCByZXM7CkBAIC03OTkwLDcgKzc5NzYsNyBAQAogICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIGhvdyk7CiAjZWxzZQogICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIGhvdyk7CkBAIC04MjAyLDcgKzgxODgsNyBAQAogICAgIH0KICAgICBsZW4gPSBwYnVmLmxlbjsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAobGVuID4gSU5UX01BWCkKICAgICAgICAgbGVuID0gSU5UX01BWDsKICAgICBzaXplID0gd3JpdGUoZmQsIHBidWYuYnVmLCAoaW50KWxlbik7CkBAIC04MjM5LDEyICs4MjI1LDEzIEBACiAgICAgb2ZmX3Qgc2J5dGVzOwogICAgIHN0cnVjdCBzZl9oZHRyIHNmOwogICAgIGludCBmbGFncyA9IDA7Ci0gICAgc2YuaGVhZGVycyA9IE5VTEw7Ci0gICAgc2YudHJhaWxlcnMgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJvdXQiLCAiaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0IiwgImNvdW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlcnMiLCAidHJhaWxlcnMiLCAiZmxhZ3MiLCBOVUxMfTsKIAorICAgIHNmLmhlYWRlcnMgPSBOVUxMOworICAgIHNmLnRyYWlsZXJzID0gTlVMTDsKKwogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgImlpTyZPJnxPT2k6c2VuZGZpbGUiLAogICAgICAgICBrZXl3b3JkcywgJm91dCwgJmluLCBfcGFyc2Vfb2ZmX3QsICZvZmZzZXQsIF9wYXJzZV9vZmZfdCwgJnNieXRlcywKQEAgLTgzNjgsMTYgKzgzNTUsMTIgQEAKICAgICBpbnQgcmVzOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpmc3RhdCIsICZmZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmZGVmIF9fVk1TCi0gICAgLyogb24gT3BlblZNUyB3ZSBtdXN0IGVuc3VyZSB0aGF0IGFsbCBieXRlcyBhcmUgd3JpdHRlbiB0byB0aGUgZmlsZSAqLwotICAgIGZzeW5jKGZkKTsKLSNlbmRpZgogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBGU1RBVChmZCwgJnN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgIT0gMCkgewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJmc3RhdCIsIE5VTEwpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICNlbmRpZgpAQCAtODQxMCwzNSArODM5Myw2OSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X3BpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBIRklMRSByZWFkLCB3cml0ZTsKLSAgICBBUElSRVQgcmM7Ci0KLSAgICByYyA9IERvc0NyZWF0ZVBpcGUoICZyZWFkLCAmd3JpdGUsIDQwOTYpOwotICAgIGlmIChyYyAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7Ci0KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIHJlYWQsIHdyaXRlKTsKLSNlbHNlCi0jaWYgIWRlZmluZWQoTVNfV0lORE9XUykKICAgICBpbnQgZmRzWzJdOwotICAgIGludCByZXM7Ci0gICAgcmVzID0gcGlwZShmZHMpOwotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmZHNbMF0sIGZkc1sxXSk7Ci0jZWxzZSAvKiBNU19XSU5ET1dTICovCisjaWZkZWYgTVNfV0lORE9XUwogICAgIEhBTkRMRSByZWFkLCB3cml0ZTsKLSAgICBpbnQgcmVhZF9mZCwgd3JpdGVfZmQ7CisgICAgU0VDVVJJVFlfQVRUUklCVVRFUyBhdHRyOwogICAgIEJPT0wgb2s7Ci0gICAgb2sgPSBDcmVhdGVQaXBlKCZyZWFkLCAmd3JpdGUsIE5VTEwsIDApOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiQ3JlYXRlUGlwZSIsIE5VTEwpOwotICAgIHJlYWRfZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXJlYWQsIDApOwotICAgIHdyaXRlX2ZkID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdCl3cml0ZSwgMSk7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCByZWFkX2ZkLCB3cml0ZV9mZCk7Ci0jZW5kaWYgLyogTVNfV0lORE9XUyAqLworI2Vsc2UKKyAgICBpbnQgcmVzOwogI2VuZGlmCisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgYXR0ci5uTGVuZ3RoID0gc2l6ZW9mKGF0dHIpOworICAgIGF0dHIubHBTZWN1cml0eURlc2NyaXB0b3IgPSBOVUxMOworICAgIGF0dHIuYkluaGVyaXRIYW5kbGUgPSBGQUxTRTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBvayA9IENyZWF0ZVBpcGUoJnJlYWQsICZ3cml0ZSwgJmF0dHIsIDApOworICAgIGlmIChvaykgeworICAgICAgICBmZHNbMF0gPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXJlYWQsIF9PX1JET05MWSk7CisgICAgICAgIGZkc1sxXSA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3Qpd3JpdGUsIF9PX1dST05MWSk7CisgICAgICAgIGlmIChmZHNbMF0gPT0gLTEgfHwgZmRzWzFdID09IC0xKSB7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShyZWFkKTsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHdyaXRlKTsKKyAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworI2Vsc2UKKworI2lmZGVmIEhBVkVfUElQRTIKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmVzID0gcGlwZTIoZmRzLCBPX0NMT0VYRUMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmVzICE9IDAgJiYgZXJybm8gPT0gRU5PU1lTKQorICAgIHsKKyNlbmRpZgorICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IHBpcGUoZmRzKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAocmVzID09IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkc1swXSwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzBdKTsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMV0pOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmRzWzFdLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMF0pOworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1sxXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBIQVZFX1BJUEUyCisgICAgfQorI2VuZGlmCisKKyAgICBpZiAocmVzICE9IDApCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisjZW5kaWYgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKIH0KICNlbmRpZiAgLyogSEFWRV9QSVBFICovCiAKQEAgLTg3NDEsNiArODc1OCw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibGVuZ3RoIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInRydW5jYXRlIjsKICNpZmRlZiBIQVZFX0ZUUlVOQ0FURQogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC04NzU4LDcgKzg3NzYsNyBAQAogICAgICAgICByZXMgPSB0cnVuY2F0ZShwYXRoLm5hcnJvdywgbGVuZ3RoKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXN1bHQgPSBwYXRoX3Bvc2l4X2Vycm9yKCJ0cnVuY2F0ZSIsICZwYXRoKTsKKyAgICAgICAgcmVzdWx0ID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmVzdWx0ID0gUHlfTm9uZTsKQEAgLTkxODEsNiArOTE5OSwxMCBAQAogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgOCwgUHlMb25nX0Zyb21Mb25nKChsb25nKSBzdC5mX2ZsYWcpKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDksIFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3QuZl9uYW1lbWF4KSk7CiAjZW5kaWYKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJldHVybiB2OwogfQpAQCAtOTIzMCw2ICs5MjUyLDcgQEAKICAgICBzdHJ1Y3Qgc3RhdHZmcyBzdDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAic3RhdHZmcyI7CiAjaWZkZWYgSEFWRV9GU1RBVFZGUwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC05MjU2LDcgKzkyNzksNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfcG9zaXhfZXJyb3IoInN0YXR2ZnMiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC05NDkzLDYgKzk1MTYsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgIm5hbWUiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicGF0aGNvbmYiOwogI2lmZGVmIEhBVkVfRlBBVEhDT05GCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTk1MTMsNyArOTUzNyw3IEBACiAgICAgICAgICAgICAvKiBjb3VsZCBiZSBhIHBhdGggb3IgbmFtZSBwcm9ibGVtICovCiAgICAgICAgICAgICBwb3NpeF9lcnJvcigpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBwYXRoX3Bvc2l4X2Vycm9yKCJwYXRoY29uZiIsICZwYXRoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZyhsaW1pdCk7CkBAIC05Njk1LDcgKzk3MTksNyBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGludCBuYW1lOwogICAgIGNoYXIgYnVmZmVyWzI1NV07Ci0gICAgaW50IGxlbjsKKyAgICBzaXplX3QgbGVuOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpjb25mc3RyIiwgY29udl9jb25mc3RyX2NvbmZuYW1lLCAmbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTcxMiw3ICs5NzM2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgodW5zaWduZWQgaW50KWxlbiA+PSBzaXplb2YoYnVmZmVyKSkgeworICAgIGlmIChsZW4gPj0gc2l6ZW9mKGJ1ZmZlcikpIHsKICAgICAgICAgY2hhciAqYnVmID0gUHlNZW1fTWFsbG9jKGxlbik7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTAyNDIsNyArMTAyNjYsNyBAQAogICAgIGludCBuYW1lOwogCiAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOnN5c2NvbmYiLCBjb252X3N5c2NvbmZfY29uZm5hbWUsICZuYW1lKSkgewotICAgICAgICBpbnQgdmFsdWU7CisgICAgICAgIGxvbmcgdmFsdWU7CiAKICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICB2YWx1ZSA9IHN5c2NvbmYobmFtZSk7CkBAIC0xMDU3Miw2ICsxMDU5Niw4IEBACiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CiAgICAgbWVtc2V0KCZhdHRyaWJ1dGUsIDAsIHNpemVvZihhdHRyaWJ1dGUpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiZ2V0eGF0dHIiOworICAgIGF0dHJpYnV0ZS5mdW5jdGlvbl9uYW1lID0gImdldHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfCRwOmdldHhhdHRyIiwga2V5d29yZHMsCiAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKQEAgLTEwNTg4LDcgKzEwNjE0LDcgQEAKICAgICAgICAgc3RhdGljIFB5X3NzaXplX3QgYnVmZmVyX3NpemVzW10gPSB7MTI4LCBYQVRUUl9TSVpFX01BWCwgMH07CiAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZXNbaV07CiAgICAgICAgIGlmICghYnVmZmVyX3NpemUpIHsKLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImdldHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBidWZmZXJfc2l6ZSk7CkBAIC0xMDYxMCw3ICsxMDYzNiw3IEBACiAgICAgICAgICAgICBidWZmZXIgPSBOVUxMOwogICAgICAgICAgICAgaWYgKGVycm5vID09IEVSQU5HRSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImdldHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KIApAQCAtMTA2NDksNiArMTA2NzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbGFncyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAic2V0eGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CiAgICAgbWVtc2V0KCZ2YWx1ZSwgMCwgc2l6ZW9mKHZhbHVlKSk7CkBAIC0xMDY3Niw3ICsxMDcwMyw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7CiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInNldHhhdHRyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMTA3MTAsNyArMTA3MzcsOSBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImF0dHJpYnV0ZSIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicmVtb3ZleGF0dHIiOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CisgICAgYXR0cmlidXRlLmZ1bmN0aW9uX25hbWUgPSAicmVtb3ZleGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8JHA6cmVtb3ZleGF0dHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzLApAQCAtMTA3MzIsNyArMTA3NjEsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTOwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJyZW1vdmV4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTEwNzY4LDYgKzEwNzk3LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGlzdHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBwYXRoLmZkID0gLTE7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mJHA6bGlzdHhhdHRyIiwga2V5d29yZHMsCkBAIC0xMDc4Niw3ICsxMDgxNiw3IEBACiAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZXNbaV07CiAgICAgICAgIGlmICghYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgIC8qIEVSQU5HRSAqLwotICAgICAgICAgICAgcGF0aF9lcnJvcigibGlzdHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBidWZmZXIgPSBQeU1lbV9NQUxMT0MoYnVmZmVyX3NpemUpOwpAQCAtMTA4MTAsNyArMTA4NDAsNyBAQAogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJsaXN0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwOTg4LDE0ICsxMTAxOCwxNTQgQEAKIH0KICNlbmRpZiAvKiBkZWZpbmVkKFRFUk1TSVpFX1VTRV9DT05JTykgfHwgZGVmaW5lZChURVJNU0laRV9VU0VfSU9DVEwpICovCiAKK1B5RG9jX1NUUlZBUihwb3NpeF9jcHVfY291bnRfX2RvY19fLAorImNwdV9jb3VudCgpIC0+IGludGVnZXJcblxuXAorUmV0dXJuIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLCBvciBOb25lIGlmIHRoaXMgdmFsdWUgY2Fubm90IGJlXG5cCitlc3RhYmxpc2hlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Bvc2l4X2NwdV9jb3VudChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgbmNwdSA9IDA7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFNZU1RFTV9JTkZPIHN5c2luZm87CisgICAgR2V0U3lzdGVtSW5mbygmc3lzaW5mbyk7CisgICAgbmNwdSA9IHN5c2luZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnM7CisjZWxpZiBkZWZpbmVkKF9faHB1eCkKKyAgICBuY3B1ID0gbXBjdGwoTVBDX0dFVE5VTVNQVVMsIE5VTEwsIE5VTEwpOworI2VsaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX05QUk9DRVNTT1JTX09OTE4pCisgICAgbmNwdSA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOworI2VsaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgIHx8IFwKKyAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgfHwgXAorICAgICAgZGVmaW5lZChfX05ldEJTRF9fKSAgICB8fCBcCisgICAgICBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICBpbnQgbWliWzJdOworICAgIHNpemVfdCBsZW4gPSBzaXplb2YobmNwdSk7CisgICAgbWliWzBdID0gQ1RMX0hXOworICAgIG1pYlsxXSA9IEhXX05DUFU7CisgICAgaWYgKHN5c2N0bChtaWIsIDIsICZuY3B1LCAmbGVuLCBOVUxMLCAwKSAhPSAwKQorICAgICAgICBuY3B1ID0gMDsKKyNlbmRpZgorICAgIGlmIChuY3B1ID49IDEpCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobmNwdSk7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGdldF9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgImdldF9pbmhlcml0YWJsZShmZCkgLT4gYm9vbFxuIiBcCisgICAgIlxuIiBcCisgICAgIkdldCB0aGUgY2xvc2Utb24tZXhlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldF9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkOworICAgIGludCBpbmhlcml0YWJsZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpnZXRfaW5oZXJpdGFibGUiLCAmZmQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBpbmhlcml0YWJsZSA9IF9QeV9nZXRfaW5oZXJpdGFibGUoZmQpOworICAgIGlmIChpbmhlcml0YWJsZSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoaW5oZXJpdGFibGUpOworfQorCitQeURvY19TVFJWQVIoc2V0X2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAic2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSlcbiIgXAorICAgICJcbiIgXAorICAgICJTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldF9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkLCBpbmhlcml0YWJsZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c2V0X2luaGVyaXRhYmxlIiwgJmZkLCAmaW5oZXJpdGFibGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUsIE5VTEwpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKworI2lmZGVmIE1TX1dJTkRPV1MKK1B5RG9jX1NUUlZBUihnZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAiZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShmZCkgLT4gYm9vbFxuIiBcCisgICAgIlxuIiBcCisgICAgIkdldCB0aGUgY2xvc2Utb24tZXhlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldF9oYW5kbGVfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICI6Z2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsICZoYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghR2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSloYW5kbGUsICZmbGFncykpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoZmxhZ3MgJiBIQU5ETEVfRkxBR19JTkhFUklUKTsKK30KKworUHlEb2NfU1RSVkFSKHNldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJzZXRfaGFuZGxlX2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSlcbiIgXAorICAgICJcbiIgXAorICAgICJTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBoYW5kbGUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldF9oYW5kbGVfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBpbmhlcml0YWJsZSA9IDE7CisgICAgUHlfaW50cHRyX3QgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6c2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZpbmhlcml0YWJsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyA9IEhBTkRMRV9GTEFHX0lOSEVSSVQ7CisgICAgZWxzZQorICAgICAgICBmbGFncyA9IDA7CisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKWhhbmRsZSwgSEFORExFX0ZMQUdfSU5IRVJJVCwgZmxhZ3MpKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZW5kaWYgICAvKiBNU19XSU5ET1dTICovCisKKworLypbY2xpbmljIGlucHV0XQorZHVtcCBidWZmZXIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworI2lmbmRlZiBPU19UVFlOQU1FX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfVFRZTkFNRV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19UVFlOQU1FX01FVEhPRERFRikgKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZDA3MWJiYzhmNDllYTEyIGlucHV0PTUyNGNlMmUwMjFlNGViYTZdKi8KKwogCiBzdGF0aWMgUHlNZXRob2REZWYgcG9zaXhfbWV0aG9kc1tdID0gewotICAgIHsiYWNjZXNzIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2FjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9hY2Nlc3NfX2RvY19ffSwKLSNpZmRlZiBIQVZFX1RUWU5BTUUKLSAgICB7InR0eW5hbWUiLCAgICAgICAgIHBvc2l4X3R0eW5hbWUsIE1FVEhfVkFSQVJHUywgcG9zaXhfdHR5bmFtZV9fZG9jX199LAotI2VuZGlmCisKKyAgICBPU19TVEFUX01FVEhPRERFRgorICAgIE9TX0FDQ0VTU19NRVRIT0RERUYKKyAgICBPU19UVFlOQU1FX01FVEhPRERFRgorCiAgICAgeyJjaGRpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfY2hkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfY2hkaXJfX2RvY19ffSwKQEAgLTExMDMzLDEyICsxMTIwMywxMCBAQAogI2lmZGVmIEhBVkVfQ1RFUk1JRAogICAgIHsiY3Rlcm1pZCIsICAgICAgICAgcG9zaXhfY3Rlcm1pZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2N0ZXJtaWRfX2RvY19ffSwKICNlbmRpZgotI2lmZGVmIEhBVkVfR0VUQ1dECiAgICAgeyJnZXRjd2QiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZ2V0Y3dkX3VuaWNvZGUsCiAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGN3ZF9fZG9jX199LAogICAgIHsiZ2V0Y3dkYiIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2dldGN3ZF9ieXRlcywKICAgICBNRVRIX05PQVJHUywgcG9zaXhfZ2V0Y3dkYl9fZG9jX199LAotI2VuZGlmCiAjaWYgZGVmaW5lZChIQVZFX0xJTkspIHx8IGRlZmluZWQoTVNfV0lORE9XUykKICAgICB7ImxpbmsiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9saW5rLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKQEAgLTExMDgxLDkgKzExMjQ5LDYgQEAKICAgICB7InJtZGlyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9ybWRpciwKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9ybWRpcl9fZG9jX199LAotICAgIHsic3RhdCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3N0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfc3RhdF9fZG9jX199LAogICAgIHsic3RhdF9mbG9hdF90aW1lcyIsIHN0YXRfZmxvYXRfdGltZXMsIE1FVEhfVkFSQVJHUywgc3RhdF9mbG9hdF90aW1lc19fZG9jX199LAogI2lmIGRlZmluZWQoSEFWRV9TWU1MSU5LKQogICAgIHsic3ltbGluayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3N5bWxpbmssCkBAIC0xMTExOCwxMCArMTEyODMsNiBAQAogI2lmZGVmIEhBVkVfU1BBV05WCiAgICAgeyJzcGF3bnYiLCAgICAgICAgICBwb3NpeF9zcGF3bnYsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252X19kb2NfX30sCiAgICAgeyJzcGF3bnZlIiwgICAgICAgICBwb3NpeF9zcGF3bnZlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudmVfX2RvY19ffSwKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIHsic3Bhd252cCIsICAgICAgICAgcG9zaXhfc3Bhd252cCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZwX19kb2NfX30sCi0gICAgeyJzcGF3bnZwZSIsICAgICAgICBwb3NpeF9zcGF3bnZwZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZwZV9fZG9jX199LAotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYgLyogSEFWRV9TUEFXTlYgKi8KICNpZmRlZiBIQVZFX0ZPUksxCiAgICAgeyJmb3JrMSIsICAgICAgIHBvc2l4X2ZvcmsxLCBNRVRIX05PQVJHUywgcG9zaXhfZm9yazFfX2RvY19ffSwKQEAgLTExMjY5LDcgKzExNDMwLDggQEAKICAgICB7ImNsb3NlcmFuZ2UiLCAgICAgIHBvc2l4X2Nsb3NlcmFuZ2UsIE1FVEhfVkFSQVJHUywgcG9zaXhfY2xvc2VyYW5nZV9fZG9jX199LAogICAgIHsiZGV2aWNlX2VuY29kaW5nIiwgZGV2aWNlX2VuY29kaW5nLCBNRVRIX1ZBUkFSR1MsIGRldmljZV9lbmNvZGluZ19fZG9jX199LAogICAgIHsiZHVwIiwgICAgICAgICAgICAgcG9zaXhfZHVwLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2R1cF9fZG9jX199LAotICAgIHsiZHVwMiIsICAgICAgICAgICAgcG9zaXhfZHVwMiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9kdXAyX19kb2NfX30sCisgICAgeyJkdXAyIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZHVwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHBvc2l4X2R1cDJfX2RvY19ffSwKICNpZmRlZiBIQVZFX0xPQ0tGCiAgICAgeyJsb2NrZiIsICAgICAgICAgICBwb3NpeF9sb2NrZiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9sb2NrZl9fZG9jX199LAogI2VuZGlmCkBAIC0xMTQwMCw5ICsxMTU2Miw5IEBACiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHsiX2dldGZ1bGxwYXRobmFtZSIsICAgICAgICBwb3NpeF9fZ2V0ZnVsbHBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHsiX2dldGZpbmFscGF0aG5hbWUiLCAgICAgICBwb3NpeF9fZ2V0ZmluYWxwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKLSAgICB7Il9nZXRmaWxlaW5mb3JtYXRpb24iLCAgICAgcG9zaXhfX2dldGZpbGVpbmZvcm1hdGlvbiwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7Il9pc2RpciIsICAgICAgICAgICAgICAgICAgcG9zaXhfX2lzZGlyLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X19pc2Rpcl9fZG9jX199LAogICAgIHsiX2dldGRpc2t1c2FnZSIsICAgICAgICAgICB3aW4zMl9fZ2V0ZGlza3VzYWdlLCBNRVRIX1ZBUkFSR1MsIHdpbjMyX19nZXRkaXNrdXNhZ2VfX2RvY19ffSwKKyAgICB7Il9nZXR2b2x1bWVwYXRobmFtZSIsICAgICAgcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZV9fZG9jX199LAogI2VuZGlmCiAjaWZkZWYgSEFWRV9HRVRMT0FEQVZHCiAgICAgeyJnZXRsb2FkYXZnIiwgICAgICBwb3NpeF9nZXRsb2FkYXZnLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0bG9hZGF2Z19fZG9jX199LApAQCAtMTE0MzgsNjkgKzExNjAwLDIwIEBACiAjaWYgZGVmaW5lZChURVJNU0laRV9VU0VfQ09OSU8pIHx8IGRlZmluZWQoVEVSTVNJWkVfVVNFX0lPQ1RMKQogICAgIHsiZ2V0X3Rlcm1pbmFsX3NpemUiLCBnZXRfdGVybWluYWxfc2l6ZSwgTUVUSF9WQVJBUkdTLCB0ZXJtc2l6ZV9fZG9jX199LAogI2VuZGlmCisgICAgeyJjcHVfY291bnQiLCAoUHlDRnVuY3Rpb24pcG9zaXhfY3B1X2NvdW50LAorICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2NwdV9jb3VudF9fZG9jX199LAorICAgIHsiZ2V0X2luaGVyaXRhYmxlIiwgcG9zaXhfZ2V0X2luaGVyaXRhYmxlLCBNRVRIX1ZBUkFSR1MsIGdldF9pbmhlcml0YWJsZV9fZG9jX199LAorICAgIHsic2V0X2luaGVyaXRhYmxlIiwgcG9zaXhfc2V0X2luaGVyaXRhYmxlLCBNRVRIX1ZBUkFSR1MsIHNldF9pbmhlcml0YWJsZV9fZG9jX199LAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICB7ImdldF9oYW5kbGVfaW5oZXJpdGFibGUiLCBwb3NpeF9nZXRfaGFuZGxlX2luaGVyaXRhYmxlLAorICAgICBNRVRIX1ZBUkFSR1MsIGdldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19ffSwKKyAgICB7InNldF9oYW5kbGVfaW5oZXJpdGFibGUiLCBwb3NpeF9zZXRfaGFuZGxlX2luaGVyaXRhYmxlLAorICAgICBNRVRIX1ZBUkFSR1MsIHNldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19ffSwKKyNlbmRpZgogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIAogCi1zdGF0aWMgaW50Ci1pbnMoUHlPYmplY3QgKm1vZHVsZSwgY2hhciAqc3ltYm9sLCBsb25nIHZhbHVlKQotewotICAgIHJldHVybiBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtb2R1bGUsIHN5bWJvbCwgdmFsdWUpOwotfQotCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLS8qIEluc2VydCBQbGF0Zm9ybS1TcGVjaWZpYyBDb25zdGFudCBWYWx1ZXMgKFN0cmluZ3MgJiBOdW1iZXJzKSBvZiBDb21tb24gVXNlICovCi1zdGF0aWMgaW50IGluc2VydHZhbHVlcyhQeU9iamVjdCAqbW9kdWxlKQotewotICAgIEFQSVJFVCAgICByYzsKLSAgICBVTE9ORyAgICAgdmFsdWVzW1FTVl9NQVgrMV07Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgY2hhciAgICAgKnZlciwgdG1wWzUwXTsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9IERvc1F1ZXJ5U3lzSW5mbygxTCwgUVNWX01BWCwgJnZhbHVlc1sxXSwgc2l6ZW9mKFVMT05HKSAqIFFTVl9NQVgpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAocmMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgb3MyX2Vycm9yKHJjKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChpbnMobW9kdWxlLCAibWVtaW5zdGFsbGVkIiwgdmFsdWVzW1FTVl9UT1RQSFlTTUVNXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1lbWtlcm5lbCIsICAgIHZhbHVlc1tRU1ZfVE9UUkVTTUVNXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1lbXZpcnR1YWwiLCAgIHZhbHVlc1tRU1ZfVE9UQVZBSUxNRU1dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWF4cGF0aGxlbiIsICAgdmFsdWVzW1FTVl9NQVhfUEFUSF9MRU5HVEhdKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWF4bmFtZWxlbiIsICAgdmFsdWVzW1FTVl9NQVhfQ09NUF9MRU5HVEhdKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAicmV2aXNpb24iLCAgICAgdmFsdWVzW1FTVl9WRVJTSU9OX1JFVklTSU9OXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgInRpbWVzbGljZSIsICAgIHZhbHVlc1tRU1ZfTUlOX1NMSUNFXSkpIHJldHVybiAtMTsKLQotICAgIHN3aXRjaCAodmFsdWVzW1FTVl9WRVJTSU9OX01JTk9SXSkgewotICAgIGNhc2UgMDogIHZlciA9ICIyLjAwIjsgYnJlYWs7Ci0gICAgY2FzZSAxMDogdmVyID0gIjIuMTAiOyBicmVhazsKLSAgICBjYXNlIDExOiB2ZXIgPSAiMi4xMSI7IGJyZWFrOwotICAgIGNhc2UgMzA6IHZlciA9ICIzLjAwIjsgYnJlYWs7Ci0gICAgY2FzZSA0MDogdmVyID0gIjQuMDAiOyBicmVhazsKLSAgICBjYXNlIDUwOiB2ZXIgPSAiNS4wMCI7IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFB5T1Nfc25wcmludGYodG1wLCBzaXplb2YodG1wKSwKLSAgICAgICAgICAgICAgICAgICAgICAiJWQtJWQiLCB2YWx1ZXNbUVNWX1ZFUlNJT05fTUFKT1JdLAotICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tRU1ZfVkVSU0lPTl9NSU5PUl0pOwotICAgICAgICB2ZXIgPSAmdG1wWzBdOwotICAgIH0KLQotICAgIC8qIEFkZCBJbmRpY2F0b3Igb2YgdGhlIFZlcnNpb24gb2YgdGhlIE9wZXJhdGluZyBTeXN0ZW0gKi8KLSAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobW9kdWxlLCAidmVyc2lvbiIsIHRtcCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBBZGQgSW5kaWNhdG9yIG9mIFdoaWNoIERyaXZlIHdhcyBVc2VkIHRvIEJvb3QgdGhlIFN5c3RlbSAqLwotICAgIHRtcFswXSA9ICdBJyArIHZhbHVlc1tRU1ZfQk9PVF9EUklWRV0gLSAxOwotICAgIHRtcFsxXSA9ICc6JzsKLSAgICB0bXBbMl0gPSAnXDAnOwotCi0gICAgcmV0dXJuIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG1vZHVsZSwgImJvb3Rkcml2ZSIsIHRtcCk7Ci19Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoSEFWRV9TWU1MSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpCiBzdGF0aWMgaW50CiBlbmFibGVfc3ltbGluaygpCkBAIC0xMTUzMSw0MDEgKzExNjQ0LDQxMCBAQAogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TWU1MSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCiAKIHN0YXRpYyBpbnQKLWFsbF9pbnMoUHlPYmplY3QgKmQpCithbGxfaW5zKFB5T2JqZWN0ICptKQogewogI2lmZGVmIEZfT0sKLSAgICBpZiAoaW5zKGQsICJGX09LIiwgKGxvbmcpRl9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9PSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJfT0sKLSAgICBpZiAoaW5zKGQsICJSX09LIiwgKGxvbmcpUl9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUl9PSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdfT0sKLSAgICBpZiAoaW5zKGQsICJXX09LIiwgKGxvbmcpV19PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV19PSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFhfT0sKLSAgICBpZiAoaW5zKGQsICJYX09LIiwgKGxvbmcpWF9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWF9PSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE5HUk9VUFNfTUFYCi0gICAgaWYgKGlucyhkLCAiTkdST1VQU19NQVgiLCAobG9uZylOR1JPVVBTX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkdST1VQU19NQVgpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBUTVBfTUFYCi0gICAgaWYgKGlucyhkLCAiVE1QX01BWCIsIChsb25nKVRNUF9NQVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRNUF9NQVgpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXQ09OVElOVUVECi0gICAgaWYgKGlucyhkLCAiV0NPTlRJTlVFRCIsIChsb25nKVdDT05USU5VRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdDT05USU5VRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXTk9IQU5HCi0gICAgaWYgKGlucyhkLCAiV05PSEFORyIsIChsb25nKVdOT0hBTkcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdOT0hBTkcpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXVU5UUkFDRUQKLSAgICBpZiAoaW5zKGQsICJXVU5UUkFDRUQiLCAobG9uZylXVU5UUkFDRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdVTlRSQUNFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUkRPTkxZCi0gICAgaWYgKGlucyhkLCAiT19SRE9OTFkiLCAobG9uZylPX1JET05MWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SRE9OTFkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1dST05MWQotICAgIGlmIChpbnMoZCwgIk9fV1JPTkxZIiwgKGxvbmcpT19XUk9OTFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fV1JPTkxZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SRFdSCi0gICAgaWYgKGlucyhkLCAiT19SRFdSIiwgKGxvbmcpT19SRFdSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JEV1IpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05ERUxBWQotICAgIGlmIChpbnMoZCwgIk9fTkRFTEFZIiwgKGxvbmcpT19OREVMQVkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTkRFTEFZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT05CTE9DSwotICAgIGlmIChpbnMoZCwgIk9fTk9OQkxPQ0siLCAobG9uZylPX05PTkJMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PTkJMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19BUFBFTkQKLSAgICBpZiAoaW5zKGQsICJPX0FQUEVORCIsIChsb25nKU9fQVBQRU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0FQUEVORCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRFNZTkMKLSAgICBpZiAoaW5zKGQsICJPX0RTWU5DIiwgKGxvbmcpT19EU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19EU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUlNZTkMKLSAgICBpZiAoaW5zKGQsICJPX1JTWU5DIiwgKGxvbmcpT19SU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU1lOQwotICAgIGlmIChpbnMoZCwgIk9fU1lOQyIsIChsb25nKU9fU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0NUVFkKLSAgICBpZiAoaW5zKGQsICJPX05PQ1RUWSIsIChsb25nKU9fTk9DVFRZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PQ1RUWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQ1JFQVQKLSAgICBpZiAoaW5zKGQsICJPX0NSRUFUIiwgKGxvbmcpT19DUkVBVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19DUkVBVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRVhDTAotICAgIGlmIChpbnMoZCwgIk9fRVhDTCIsIChsb25nKU9fRVhDTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19FWENMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19UUlVOQwotICAgIGlmIChpbnMoZCwgIk9fVFJVTkMiLCAobG9uZylPX1RSVU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RSVU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19CSU5BUlkKLSAgICBpZiAoaW5zKGQsICJPX0JJTkFSWSIsIChsb25nKU9fQklOQVJZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0JJTkFSWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVEVYVAotICAgIGlmIChpbnMoZCwgIk9fVEVYVCIsIChsb25nKU9fVEVYVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19URVhUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19YQVRUUgotICAgIGlmIChpbnMoZCwgIk9fWEFUVFIiLCAobG9uZylPX1hBVFRSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1hBVFRSKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19MQVJHRUZJTEUKLSAgICBpZiAoaW5zKGQsICJPX0xBUkdFRklMRSIsIChsb25nKU9fTEFSR0VGSUxFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0xBUkdFRklMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU0hMT0NLCi0gICAgaWYgKGlucyhkLCAiT19TSExPQ0siLCAobG9uZylPX1NITE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TSExPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0VYTE9DSwotICAgIGlmIChpbnMoZCwgIk9fRVhMT0NLIiwgKGxvbmcpT19FWExPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRVhMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19FWEVDCi0gICAgaWYgKGlucyhkLCAiT19FWEVDIiwgKGxvbmcpT19FWEVDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NFQVJDSAotICAgIGlmIChpbnMoZCwgIk9fU0VBUkNIIiwgKGxvbmcpT19TRUFSQ0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU0VBUkNIKSkgcmV0dXJuIC0xOworI2VuZGlmCisjaWZkZWYgT19QQVRICisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUEFUSCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVFRZX0lOSVQKLSAgICBpZiAoaW5zKGQsICJPX1RUWV9JTklUIiwgKGxvbmcpT19UVFlfSU5JVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19UVFlfSU5JVCkpIHJldHVybiAtMTsKKyNlbmRpZgorI2lmZGVmIE9fVE1QRklMRQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RNUEZJTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQUklPX1BST0NFU1MKLSAgICBpZiAoaW5zKGQsICJQUklPX1BST0NFU1MiLCAobG9uZylQUklPX1BST0NFU1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBSSU9fUFJPQ0VTUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBSSU9fUEdSUAotICAgIGlmIChpbnMoZCwgIlBSSU9fUEdSUCIsIChsb25nKVBSSU9fUEdSUCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUFJJT19QR1JQKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUFJJT19VU0VSCi0gICAgaWYgKGlucyhkLCAiUFJJT19VU0VSIiwgKGxvbmcpUFJJT19VU0VSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQUklPX1VTRVIpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0NMT0VYRUMKLSAgICBpZiAoaW5zKGQsICJPX0NMT0VYRUMiLCAobG9uZylPX0NMT0VYRUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQ0xPRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQUNDTU9ERQotICAgIGlmIChpbnMoZCwgIk9fQUNDTU9ERSIsIChsb25nKU9fQUNDTU9ERSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19BQ0NNT0RFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIAogI2lmZGVmIFNFRUtfSE9MRQotICAgIGlmIChpbnMoZCwgIlNFRUtfSE9MRSIsIChsb25nKVNFRUtfSE9MRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0VFS19IT0xFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0VFS19EQVRBCi0gICAgaWYgKGlucyhkLCAiU0VFS19EQVRBIiwgKGxvbmcpU0VFS19EQVRBKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRUVLX0RBVEEpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogTVMgV2luZG93cyAqLwogI2lmZGVmIE9fTk9JTkhFUklUCiAgICAgLyogRG9uJ3QgaW5oZXJpdCBpbiBjaGlsZCBwcm9jZXNzZXMuICovCi0gICAgaWYgKGlucyhkLCAiT19OT0lOSEVSSVQiLCAobG9uZylPX05PSU5IRVJJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0lOSEVSSVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBfT19TSE9SVF9MSVZFRAogICAgIC8qIE9wdGltaXplIGZvciBzaG9ydCBsaWZlIChrZWVwIGluIG1lbW9yeSkuICovCiAgICAgLyogTVMgZm9yZ290IHRvIGRlZmluZSB0aGlzIG9uZSB3aXRoIGEgbm9uLXVuZGVyc2NvcmUgZm9ybSB0b28uICovCi0gICAgaWYgKGlucyhkLCAiT19TSE9SVF9MSVZFRCIsIChsb25nKV9PX1NIT1JUX0xJVkVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT19TSE9SVF9MSVZFRCIsIF9PX1NIT1JUX0xJVkVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19URU1QT1JBUlkKICAgICAvKiBBdXRvbWF0aWNhbGx5IGRlbGV0ZSB3aGVuIGxhc3QgaGFuZGxlIGlzIGNsb3NlZC4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1RFTVBPUkFSWSIsIChsb25nKU9fVEVNUE9SQVJZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RFTVBPUkFSWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUkFORE9NCiAgICAgLyogT3B0aW1pemUgZm9yIHJhbmRvbSBhY2Nlc3MuICovCi0gICAgaWYgKGlucyhkLCAiT19SQU5ET00iLCAobG9uZylPX1JBTkRPTSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SQU5ET00pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NFUVVFTlRJQUwKICAgICAvKiBPcHRpbWl6ZSBmb3Igc2VxdWVudGlhbCBhY2Nlc3MuICovCi0gICAgaWYgKGlucyhkLCAiT19TRVFVRU5USUFMIiwgKGxvbmcpT19TRVFVRU5USUFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogR05VIGV4dGVuc2lvbnMuICovCiAjaWZkZWYgT19BU1lOQwogICAgIC8qIFNlbmQgYSBTSUdJTyBzaWduYWwgd2hlbmV2ZXIgaW5wdXQgb3Igb3V0cHV0CiAgICAgICAgYmVjb21lcyBhdmFpbGFibGUgb24gZmlsZSBkZXNjcmlwdG9yICovCi0gICAgaWYgKGlucyhkLCAiT19BU1lOQyIsIChsb25nKU9fQVNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQVNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0RJUkVDVAogICAgIC8qIERpcmVjdCBkaXNrIGFjY2Vzcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX0RJUkVDVCIsIChsb25nKU9fRElSRUNUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0RJUkVDVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRElSRUNUT1JZCiAgICAgLyogTXVzdCBiZSBhIGRpcmVjdG9yeS4gICAgICAqLwotICAgIGlmIChpbnMoZCwgIk9fRElSRUNUT1JZIiwgKGxvbmcpT19ESVJFQ1RPUlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRElSRUNUT1JZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0ZPTExPVwogICAgIC8qIERvIG5vdCBmb2xsb3cgbGlua3MuICAgICAgKi8KLSAgICBpZiAoaW5zKGQsICJPX05PRk9MTE9XIiwgKGxvbmcpT19OT0ZPTExPVykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0ZPTExPVykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9MSU5LUwogICAgIC8qIEZhaWxzIGlmIGxpbmsgY291bnQgb2YgdGhlIG5hbWVkIGZpbGUgaXMgZ3JlYXRlciB0aGFuIDEgKi8KLSAgICBpZiAoaW5zKGQsICJPX05PTElOS1MiLCAobG9uZylPX05PTElOS1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9MSU5LUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9BVElNRQogICAgIC8qIERvIG5vdCB1cGRhdGUgdGhlIGFjY2VzcyB0aW1lLiAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9BVElNRSIsIChsb25nKU9fTk9BVElNRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0FUSU1FKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBUaGVzZSBjb21lIGZyb20gc3lzZXhpdHMuaCAqLwogI2lmZGVmIEVYX09LCi0gICAgaWYgKGlucyhkLCAiRVhfT0siLCAobG9uZylFWF9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfT0sgKi8KICNpZmRlZiBFWF9VU0FHRQotICAgIGlmIChpbnMoZCwgIkVYX1VTQUdFIiwgKGxvbmcpRVhfVVNBR0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1VTQUdFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1VTQUdFICovCiAjaWZkZWYgRVhfREFUQUVSUgotICAgIGlmIChpbnMoZCwgIkVYX0RBVEFFUlIiLCAobG9uZylFWF9EQVRBRVJSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9EQVRBRVJSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0RBVEFFUlIgKi8KICNpZmRlZiBFWF9OT0lOUFVUCi0gICAgaWYgKGlucyhkLCAiRVhfTk9JTlBVVCIsIChsb25nKUVYX05PSU5QVVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PSU5QVVQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9JTlBVVCAqLwogI2lmZGVmIEVYX05PVVNFUgotICAgIGlmIChpbnMoZCwgIkVYX05PVVNFUiIsIChsb25nKUVYX05PVVNFUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9VU0VSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PVVNFUiAqLwogI2lmZGVmIEVYX05PSE9TVAotICAgIGlmIChpbnMoZCwgIkVYX05PSE9TVCIsIChsb25nKUVYX05PSE9TVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9IT1NUKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PSE9TVCAqLwogI2lmZGVmIEVYX1VOQVZBSUxBQkxFCi0gICAgaWYgKGlucyhkLCAiRVhfVU5BVkFJTEFCTEUiLCAobG9uZylFWF9VTkFWQUlMQUJMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfVU5BVkFJTEFCTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfVU5BVkFJTEFCTEUgKi8KICNpZmRlZiBFWF9TT0ZUV0FSRQotICAgIGlmIChpbnMoZCwgIkVYX1NPRlRXQVJFIiwgKGxvbmcpRVhfU09GVFdBUkUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1NPRlRXQVJFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1NPRlRXQVJFICovCiAjaWZkZWYgRVhfT1NFUlIKLSAgICBpZiAoaW5zKGQsICJFWF9PU0VSUiIsIChsb25nKUVYX09TRVJSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9PU0VSUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9PU0VSUiAqLwogI2lmZGVmIEVYX09TRklMRQotICAgIGlmIChpbnMoZCwgIkVYX09TRklMRSIsIChsb25nKUVYX09TRklMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfT1NGSUxFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX09TRklMRSAqLwogI2lmZGVmIEVYX0NBTlRDUkVBVAotICAgIGlmIChpbnMoZCwgIkVYX0NBTlRDUkVBVCIsIChsb25nKUVYX0NBTlRDUkVBVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfQ0FOVENSRUFUKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0NBTlRDUkVBVCAqLwogI2lmZGVmIEVYX0lPRVJSCi0gICAgaWYgKGlucyhkLCAiRVhfSU9FUlIiLCAobG9uZylFWF9JT0VSUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfSU9FUlIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfSU9FUlIgKi8KICNpZmRlZiBFWF9URU1QRkFJTAotICAgIGlmIChpbnMoZCwgIkVYX1RFTVBGQUlMIiwgKGxvbmcpRVhfVEVNUEZBSUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1RFTVBGQUlMKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1RFTVBGQUlMICovCiAjaWZkZWYgRVhfUFJPVE9DT0wKLSAgICBpZiAoaW5zKGQsICJFWF9QUk9UT0NPTCIsIChsb25nKUVYX1BST1RPQ09MKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9QUk9UT0NPTCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9QUk9UT0NPTCAqLwogI2lmZGVmIEVYX05PUEVSTQotICAgIGlmIChpbnMoZCwgIkVYX05PUEVSTSIsIChsb25nKUVYX05PUEVSTSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9QRVJNKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PUEVSTSAqLwogI2lmZGVmIEVYX0NPTkZJRwotICAgIGlmIChpbnMoZCwgIkVYX0NPTkZJRyIsIChsb25nKUVYX0NPTkZJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfQ09ORklHKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0NPTkZJRyAqLwogI2lmZGVmIEVYX05PVEZPVU5ECi0gICAgaWYgKGlucyhkLCAiRVhfTk9URk9VTkQiLCAobG9uZylFWF9OT1RGT1VORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9URk9VTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9URk9VTkQgKi8KIAogICAgIC8qIHN0YXR2ZnMgKi8KICNpZmRlZiBTVF9SRE9OTFkKLSAgICBpZiAoaW5zKGQsICJTVF9SRE9OTFkiLCAobG9uZylTVF9SRE9OTFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX1JET05MWSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBTVF9SRE9OTFkgKi8KICNpZmRlZiBTVF9OT1NVSUQKLSAgICBpZiAoaW5zKGQsICJTVF9OT1NVSUQiLCAobG9uZylTVF9OT1NVSUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX05PU1VJRCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBTVF9OT1NVSUQgKi8KIAorICAgICAgIC8qIEdOVSBleHRlbnNpb25zICovCisjaWZkZWYgU1RfTk9ERVYKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTk9ERVYpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfTk9ERVYgKi8KKyNpZmRlZiBTVF9OT0VYRUMKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTk9FWEVDKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX05PRVhFQyAqLworI2lmZGVmIFNUX1NZTkNIUk9OT1VTCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX1NZTkNIUk9OT1VTKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX1NZTkNIUk9OT1VTICovCisjaWZkZWYgU1RfTUFORExPQ0sKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTUFORExPQ0spKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfTUFORExPQ0sgKi8KKyNpZmRlZiBTVF9XUklURQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9XUklURSkpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9XUklURSAqLworI2lmZGVmIFNUX0FQUEVORAorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9BUFBFTkQpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfQVBQRU5EICovCisjaWZkZWYgU1RfTk9BVElNRQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT0FUSU1FKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX05PQVRJTUUgKi8KKyNpZmRlZiBTVF9OT0RJUkFUSU1FCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX05PRElSQVRJTUUpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfTk9ESVJBVElNRSAqLworI2lmZGVmIFNUX1JFTEFUSU1FCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX1JFTEFUSU1FKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX1JFTEFUSU1FICovCisKICAgICAvKiBGcmVlQlNEIHNlbmRmaWxlKCkgY29uc3RhbnRzICovCiAjaWZkZWYgU0ZfTk9ESVNLSU8KLSAgICBpZiAoaW5zKGQsICJTRl9OT0RJU0tJTyIsIChsb25nKVNGX05PRElTS0lPKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9OT0RJU0tJTykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNGX01OT1dBSVQKLSAgICBpZiAoaW5zKGQsICJTRl9NTk9XQUlUIiwgKGxvbmcpU0ZfTU5PV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfTU5PV0FJVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNGX1NZTkMKLSAgICBpZiAoaW5zKGQsICJTRl9TWU5DIiwgKGxvbmcpU0ZfU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogY29uc3RhbnRzIGZvciBwb3NpeF9mYWR2aXNlICovCiAjaWZkZWYgUE9TSVhfRkFEVl9OT1JNQUwKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX05PUk1BTCIsIChsb25nKVBPU0lYX0ZBRFZfTk9STUFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX05PUk1BTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfU0VRVUVOVElBTAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfU0VRVUVOVElBTCIsIChsb25nKVBPU0lYX0ZBRFZfU0VRVUVOVElBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9TRVFVRU5USUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9SQU5ET00KLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX1JBTkRPTSIsIChsb25nKVBPU0lYX0ZBRFZfUkFORE9NKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1JBTkRPTSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfTk9SRVVTRQotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfTk9SRVVTRSIsIChsb25nKVBPU0lYX0ZBRFZfTk9SRVVTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9OT1JFVVNFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9XSUxMTkVFRAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfV0lMTE5FRUQiLCAobG9uZylQT1NJWF9GQURWX1dJTExORUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1dJTExORUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9ET05UTkVFRAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfRE9OVE5FRUQiLCAobG9uZylQT1NJWF9GQURWX0RPTlRORUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX0RPTlRORUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBjb25zdGFudHMgZm9yIHdhaXRpZCAqLwogI2lmIGRlZmluZWQoSEFWRV9TWVNfV0FJVF9IKSAmJiBkZWZpbmVkKEhBVkVfV0FJVElEKQotICAgIGlmIChpbnMoZCwgIlBfUElEIiwgKGxvbmcpUF9QSUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9QR0lEIiwgKGxvbmcpUF9QR0lEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfQUxMIiwgKGxvbmcpUF9BTEwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfUElEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQX1BHSUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfQUxMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV0VYSVRFRAotICAgIGlmIChpbnMoZCwgIldFWElURUQiLCAobG9uZylXRVhJVEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXRVhJVEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV05PV0FJVAotICAgIGlmIChpbnMoZCwgIldOT1dBSVQiLCAobG9uZylXTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXTk9XQUlUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV1NUT1BQRUQKLSAgICBpZiAoaW5zKGQsICJXU1RPUFBFRCIsIChsb25nKVdTVE9QUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXU1RPUFBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9FWElURUQKLSAgICBpZiAoaW5zKGQsICJDTERfRVhJVEVEIiwgKGxvbmcpQ0xEX0VYSVRFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0VYSVRFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9EVU1QRUQKLSAgICBpZiAoaW5zKGQsICJDTERfRFVNUEVEIiwgKGxvbmcpQ0xEX0RVTVBFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0RVTVBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9UUkFQUEVECi0gICAgaWYgKGlucyhkLCAiQ0xEX1RSQVBQRUQiLCAobG9uZylDTERfVFJBUFBFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX1RSQVBQRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfQ09OVElOVUVECi0gICAgaWYgKGlucyhkLCAiQ0xEX0NPTlRJTlVFRCIsIChsb25nKUNMRF9DT05USU5VRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9DT05USU5VRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIGNvbnN0YW50cyBmb3IgbG9ja2YgKi8KICNpZmRlZiBGX0xPQ0sKLSAgICBpZiAoaW5zKGQsICJGX0xPQ0siLCAobG9uZylGX0xPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVExPQ0sKLSAgICBpZiAoaW5zKGQsICJGX1RMT0NLIiwgKGxvbmcpRl9UTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9UTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVUxPQ0sKLSAgICBpZiAoaW5zKGQsICJGX1VMT0NLIiwgKGxvbmcpRl9VTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9VTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVEVTVAotICAgIGlmIChpbnMoZCwgIkZfVEVTVCIsIChsb25nKUZfVEVTVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9URVNUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NQQVdOVgotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKGlucyhkLCAiUF9XQUlUIiwgKGxvbmcpUF9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9XQUlUIiwgKGxvbmcpUF9OT1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9PVkVSTEFZIiwgKGxvbmcpUF9PVkVSTEFZKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVCVUciLCAobG9uZylQX0RFQlVHKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfU0VTU0lPTiIsIChsb25nKVBfU0VTU0lPTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFVEFDSCIsIChsb25nKVBfREVUQUNIKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfUE0iLCAobG9uZylQX1BNKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVGQVVMVCIsIChsb25nKVBfREVGQVVMVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX01JTklNSVpFIiwgKGxvbmcpUF9NSU5JTUlaRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX01BWElNSVpFIiwgKGxvbmcpUF9NQVhJTUlaRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0ZVTExTQ1JFRU4iLCAobG9uZylQX0ZVTExTQ1JFRU4pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9XSU5ET1dFRCIsIChsb25nKVBfV0lORE9XRUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9GT1JFR1JPVU5EIiwgKGxvbmcpUF9GT1JFR1JPVU5EKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfQkFDS0dST1VORCIsIChsb25nKVBfQkFDS0dST1VORCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PQ0xPU0UiLCAobG9uZylQX05PQ0xPU0UpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1NFU1NJT04iLCAobG9uZylQX05PU0VTU0lPTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1FVT1RFIiwgKGxvbmcpUF9RVU9URSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1RJTERFIiwgKGxvbmcpUF9USUxERSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1VOUkVMQVRFRCIsIChsb25nKVBfVU5SRUxBVEVEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVCVUdERVNDIiwgKGxvbmcpUF9ERUJVR0RFU0MpKSByZXR1cm4gLTE7Ci0jZWxzZQotICAgIGlmIChpbnMoZCwgIlBfV0FJVCIsIChsb25nKV9QX1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVQiLCAobG9uZylfUF9OT1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9PVkVSTEFZIiwgKGxvbmcpX09MRF9QX09WRVJMQVkpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVRPIiwgKGxvbmcpX1BfTk9XQUlUTykpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFVEFDSCIsIChsb25nKV9QX0RFVEFDSCkpIHJldHVybiAtMTsKLSNlbmRpZgorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9XQUlUIiwgX1BfV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfTk9XQUlUIiwgX1BfTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9PVkVSTEFZIiwgX09MRF9QX09WRVJMQVkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX05PV0FJVE8iLCBfUF9OT1dBSVRPKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9ERVRBQ0giLCBfUF9ERVRBQ0gpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU0NIRURfSAotICAgIGlmIChpbnMoZCwgIlNDSEVEX09USEVSIiwgKGxvbmcpU0NIRURfT1RIRVIpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiU0NIRURfRklGTyIsIChsb25nKVNDSEVEX0ZJRk8pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiU0NIRURfUlIiLCAobG9uZylTQ0hFRF9SUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfT1RIRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0ZJRk8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1JSKSkgcmV0dXJuIC0xOwogI2lmZGVmIFNDSEVEX1NQT1JBRElDCi0gICAgaWYgKGlucyhkLCAiU0NIRURfU1BPUkFESUMiLCAobG9uZylTQ0hFRF9TUE9SQURJQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfU1BPUkFESUMpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0JBVENICi0gICAgaWYgKGlucyhkLCAiU0NIRURfQkFUQ0giLCAobG9uZylTQ0hFRF9CQVRDSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfQkFUQ0gpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9JRExFCi0gICAgaWYgKGlucyhkLCAiU0NIRURfSURMRSIsIChsb25nKVNDSEVEX0lETEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0lETEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9SRVNFVF9PTl9GT1JLCi0gICAgaWYgKGlucyhkLCAiU0NIRURfUkVTRVRfT05fRk9SSyIsIChsb25nKVNDSEVEX1JFU0VUX09OX0ZPUkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1JFU0VUX09OX0ZPUkspKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9TWVMKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9TWVMiLCAobG9uZylTQ0hFRF9TWVMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1NZUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0lBCi0gICAgaWYgKGlucyhkLCAiU0NIRURfSUEiLCAobG9uZylTQ0hFRF9JQSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfSUEpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9GU1MKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GU1MiLCAobG9uZylTQ0hFRF9GU1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0ZTUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0ZYCi0gICAgaWYgKGlucyhkLCAiU0NIRURfRlgiLCAobG9uZylTQ0hFRF9GU1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ0hFRF9GWCIsIFNDSEVEX0ZTUykpIHJldHVybiAtMTsKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBVU0VfWEFUVFJTCi0gICAgaWYgKGlucyhkLCAiWEFUVFJfQ1JFQVRFIiwgKGxvbmcpWEFUVFJfQ1JFQVRFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlhBVFRSX1JFUExBQ0UiLCAobG9uZylYQVRUUl9SRVBMQUNFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlhBVFRSX1NJWkVfTUFYIiwgKGxvbmcpWEFUVFJfU0laRV9NQVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhBVFRSX0NSRUFURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWEFUVFJfUkVQTEFDRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWEFUVFJfU0laRV9NQVgpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIFJUTERfTEFaWQotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0xBWlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTEFaWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfTk9XCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTk9XKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX05PVykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfR0xPQkFMCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfR0xPQkFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0dMT0JBTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfTE9DQUwKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9MT0NBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9MT0NBTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfTk9ERUxFVEUKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT0RFTEVURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9OT0RFTEVURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfTk9MT0FECi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTk9MT0FEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX05PTE9BRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfREVFUEJJTkQKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9ERUVQQklORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9ERUVQQklORCkpIHJldHVybiAtMTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBpZiAoaW5zZXJ0dmFsdWVzKGQpKSByZXR1cm4gLTE7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTE5MzQsMTAgKzEyMDU2LDYgQEAKICNkZWZpbmUgSU5JVEZVTkMgUHlJbml0X250CiAjZGVmaW5lIE1PRE5BTUUgIm50IgogCi0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2RlZmluZSBJTklURlVOQyBQeUluaXRfb3MyCi0jZGVmaW5lIE1PRE5BTUUgIm9zMiIKLQogI2Vsc2UKICNkZWZpbmUgSU5JVEZVTkMgUHlJbml0X3Bvc2l4CiAjZGVmaW5lIE1PRE5BTUUgInBvc2l4IgpAQCAtMTIxMjUsMTkgKzEyMjQzLDIzIEBACiAgICAgaWYgKCFpbml0aWFsaXplZCkgewogI2lmIGRlZmluZWQoSEFWRV9XQUlUSUQpICYmICFkZWZpbmVkKF9fQVBQTEVfXykKICAgICAgICAgd2FpdGlkX3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIud2FpdGlkX3Jlc3VsdCI7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJldhaXRpZFJlc3VsdFR5cGUsICZ3YWl0aWRfcmVzdWx0X2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJldhaXRpZFJlc3VsdFR5cGUsICZ3YWl0aWRfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKLSAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnN0YXRfcmVzdWx0IjsKKyAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5uYW1lID0gIm9zLnN0YXRfcmVzdWx0IjsgLyogc2VlIGlzc3VlICMxOTIwOSAqLwogICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLmZpZWxkc1s3XS5uYW1lID0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQ7CiAgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MuZmllbGRzWzhdLm5hbWUgPSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKICAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5maWVsZHNbOV0ubmFtZSA9IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0UmVzdWx0VHlwZSwgJnN0YXRfcmVzdWx0X2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRSZXN1bHRUeXBlLCAmc3RhdF9yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHN0cnVjdHNlcV9uZXcgPSBTdGF0UmVzdWx0VHlwZS50cF9uZXc7CiAgICAgICAgIFN0YXRSZXN1bHRUeXBlLnRwX25ldyA9IHN0YXRyZXN1bHRfbmV3OwogCi0gICAgICAgIHN0YXR2ZnNfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi5zdGF0dmZzX3Jlc3VsdCI7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRWRlNSZXN1bHRUeXBlLCAmc3RhdHZmc19yZXN1bHRfZGVzYyk7CisgICAgICAgIHN0YXR2ZnNfcmVzdWx0X2Rlc2MubmFtZSA9ICJvcy5zdGF0dmZzX3Jlc3VsdCI7IC8qIHNlZSBpc3N1ZSAjMTkyMDkgKi8KKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0VkZTUmVzdWx0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dmZzX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICNpZmRlZiBORUVEX1RJQ0tTX1BFUl9TRUNPTkQKICMgIGlmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAmJiBkZWZpbmVkKF9TQ19DTEtfVENLKQogICAgICAgICB0aWNrc19wZXJfc2Vjb25kID0gc3lzY29uZihfU0NfQ0xLX1RDSyk7CkBAIC0xMjE1MCwxMiArMTIyNzIsMTUgQEAKIAogI2lmIGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRQQVJBTSkgfHwgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFNDSEVEVUxFUikKICAgICAgICAgc2NoZWRfcGFyYW1fZGVzYy5uYW1lID0gTU9ETkFNRSAiLnNjaGVkX3BhcmFtIjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU2NoZWRQYXJhbVR5cGUsICZzY2hlZF9wYXJhbV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTY2hlZFBhcmFtVHlwZSwgJnNjaGVkX3BhcmFtX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBTY2hlZFBhcmFtVHlwZS50cF9uZXcgPSBzY2hlZF9wYXJhbV9uZXc7CiAjZW5kaWYKIAogICAgICAgICAvKiBpbml0aWFsaXplIFRlcm1pbmFsU2l6ZV9pbmZvICovCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlRlcm1pbmFsU2l6ZVR5cGUsICZUZXJtaW5hbFNpemVfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVGVybWluYWxTaXplVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUZXJtaW5hbFNpemVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2lmIGRlZmluZWQoSEFWRV9XQUlUSUQpICYmICFkZWZpbmVkKF9fQVBQTEVfXykKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJldhaXRpZFJlc3VsdFR5cGUpOwpAQCAtMTIxNzMsMTEgKzEyMjk4LDEzIEBACiAjZW5kaWYKIAogICAgIHRpbWVzX3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIudGltZXNfcmVzdWx0IjsKLSAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZUaW1lc1Jlc3VsdFR5cGUsICZ0aW1lc19yZXN1bHRfZGVzYyk7CisgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUaW1lc1Jlc3VsdFR5cGUsICZ0aW1lc19yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInRpbWVzX3Jlc3VsdCIsIChQeU9iamVjdCAqKSZUaW1lc1Jlc3VsdFR5cGUpOwogCiAgICAgdW5hbWVfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi51bmFtZV9yZXN1bHQiOwotICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlVuYW1lUmVzdWx0VHlwZSwgJnVuYW1lX3Jlc3VsdF9kZXNjKTsKKyAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlVuYW1lUmVzdWx0VHlwZSwgJnVuYW1lX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAidW5hbWVfcmVzdWx0IiwgKFB5T2JqZWN0ICopJlVuYW1lUmVzdWx0VHlwZSk7CiAKICNpZmRlZiBfX0FQUExFX18KQEAgLTEyMjU1LDcgKzEyMzgyLDYgQEAKICAgICBpbml0aWFsaXplZCA9IDE7CiAKICAgICByZXR1cm4gbTsKLQogfQogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHdkbW9kdWxlLmMgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCmluZGV4IDI4NWZkOWMuLmViYjg3MTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHdkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wd2Rtb2R1bGUuYwpAQCAtNjksMTggKzY5LDEwIEBACiAjZGVmaW5lIFNFVFMoaSx2YWwpIHNldHModiwgaSwgdmFsKQogCiAgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5wd19uYW1lKTsKLSNpZmRlZiBfX1ZNUwotICAgIFNFVFMoc2V0SW5kZXgrKywgIiIpOwotI2Vsc2UKICAgICBTRVRTKHNldEluZGV4KyssIHAtPnB3X3Bhc3N3ZCk7Ci0jZW5kaWYKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIHNldEluZGV4KyssIF9QeUxvbmdfRnJvbVVpZChwLT5wd191aWQpKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIHNldEluZGV4KyssIF9QeUxvbmdfRnJvbUdpZChwLT5wd19naWQpKTsKLSNpZmRlZiBfX1ZNUwotICAgIFNFVFMoc2V0SW5kZXgrKywgIiIpOwotI2Vsc2UKICAgICBTRVRTKHNldEluZGV4KyssIHAtPnB3X2dlY29zKTsKLSNlbmRpZgogICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+cHdfZGlyKTsKICAgICBTRVRTKHNldEluZGV4KyssIHAtPnB3X3NoZWxsKTsKIApAQCAtMTY4LDEyICsxNjAsOCBAQAogICAgIHN0cnVjdCBwYXNzd2QgKnA7CiAgICAgaWYgKChkID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoKHAgPSBnZXRwd3VpZCgwKSkgIT0gTlVMTCkgewotI2Vsc2UKICAgICBzZXRwd2VudCgpOwogICAgIHdoaWxlICgocCA9IGdldHB3ZW50KCkpICE9IE5VTEwpIHsKLSNlbmRpZgogICAgICAgICBQeU9iamVjdCAqdiA9IG1rcHdlbnQocCk7CiAgICAgICAgIGlmICh2ID09IE5VTEwgfHwgUHlMaXN0X0FwcGVuZChkLCB2KSAhPSAwKSB7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHYpOwpAQCAtMjIwLDggKzIwOCw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RQd2RUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfcHdkX3R5cGVfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0UHdkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfcHdkX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGluaXRpYWxpemVkID0gMTsKICAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSAmU3RydWN0UHdkVHlwZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B5ZXhwYXQuYyBiL01vZHVsZXMvcHlleHBhdC5jCmluZGV4IDQ1NjgwYWUuLjk3ZjJiNTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHlleHBhdC5jCisrKyBiL01vZHVsZXMvcHlleHBhdC5jCkBAIC0xMCw2ICsxMCw5IEBACiAKICNkZWZpbmUgRklYX1RSQUNFCiAKK3N0YXRpYyBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlIEV4cGF0TWVtb3J5SGFuZGxlciA9IHsKKyAgICBQeU9iamVjdF9NYWxsb2MsIFB5T2JqZWN0X1JlYWxsb2MsIFB5T2JqZWN0X0ZyZWV9OworCiBlbnVtIEhhbmRsZXJUeXBlcyB7CiAgICAgU3RhcnRFbGVtZW50LAogICAgIEVuZEVsZW1lbnQsCkBAIC00MDMsNiArNDA2LDEwIEBACiBteV9DaGFyYWN0ZXJEYXRhSGFuZGxlcih2b2lkICp1c2VyRGF0YSwgY29uc3QgWE1MX0NoYXIgKmRhdGEsIGludCBsZW4pCiB7CiAgICAgeG1scGFyc2VvYmplY3QgKnNlbGYgPSAoeG1scGFyc2VvYmplY3QgKikgdXNlckRhdGE7CisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmJ1ZmZlciA9PSBOVUxMKQogICAgICAgICBjYWxsX2NoYXJhY3Rlcl9oYW5kbGVyKHNlbGYsIGRhdGEsIGxlbik7CiAgICAgZWxzZSB7CkBAIC00MzcsNiArNDQ0LDkgQEAKICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciwgKnJ2LCAqYXJnczsKICAgICAgICAgaW50IGksIG1heDsKIAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoZmx1c2hfY2hhcmFjdGVyX2J1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8qIFNldCBtYXggdG8gdGhlIG51bWJlciBvZiBzbG90cyBmaWxsZWQgaW4gYXR0c1tdOyBtYXgvMiBpcwpAQCAtNTIwLDYgKzUzMCw4IEBACiAgICAgSU5JVCBcCiBcCiAgICAgaWYgKGhhdmVfaGFuZGxlcihzZWxmLCBOQU1FKSkgeyBcCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSBcCisgICAgICAgICAgICByZXR1cm4gUkVUVVJOOyBcCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkgXAogICAgICAgICAgICAgcmV0dXJuIFJFVFVSTjsgXAogICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSBQQVJBTV9GT1JNQVQgO1wKQEAgLTYzNCw2ICs2NDYsOSBAQAogICAgICAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCAqbW9kZWxvYmosICpuYW1lb2JqOwogCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICAgICAgbW9kZWxvYmogPSBjb252X2NvbnRlbnRfbW9kZWwobW9kZWwsIChjb252X3N0cmluZ190b191bmljb2RlKSk7CkBAIC04MTksNyArODM0LDggQEAKICAgICAgICAgcyArPSBNQVhfQ0hVTktfU0laRTsKICAgICAgICAgc2xlbiAtPSBNQVhfQ0hVTktfU0laRTsKICAgICB9Ci0gICAgcmMgPSBYTUxfUGFyc2Uoc2VsZi0+aXRzZWxmLCBzLCBzbGVuLCBpc0ZpbmFsKTsKKyAgICBhc3NlcnQoTUFYX0NIVU5LX1NJWkUgPCBJTlRfTUFYICYmIHNsZW4gPCBJTlRfTUFYKTsKKyAgICByYyA9IFhNTF9QYXJzZShzZWxmLT5pdHNlbGYsIHMsIChpbnQpc2xlbiwgaXNGaW5hbCk7CiAKIGRvbmU6CiAgICAgaWYgKHZpZXcuYnVmICE9IE5VTEwpCkBAIC04OTIsNyArOTA4LDcgQEAKICAgICAgICAgdm9pZCAqYnVmID0gWE1MX0dldEJ1ZmZlcihzZWxmLT5pdHNlbGYsIEJVRl9TSVpFKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHJlYWRtZXRob2QpOwotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0X3BhcnNlX3Jlc3VsdChzZWxmLCAwKTsKICAgICAgICAgfQogCiAgICAgICAgIGJ5dGVzX3JlYWQgPSByZWFkaW5zdChidWYsIEJVRl9TSVpFLCByZWFkbWV0aG9kKTsKQEAgLTEwMDEsNyArMTAxNyw3IEBACiAgICAgUHlPYmplY3RfR0NfVHJhY2sobmV3X3BhcnNlcik7CiAKICAgICBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgbmV3X3BhcnNlci0+YnVmZmVyID0gbWFsbG9jKG5ld19wYXJzZXItPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgbmV3X3BhcnNlci0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19wYXJzZXItPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgaWYgKG5ld19wYXJzZXItPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwMTgsNyArMTAzNCw3IEBACiAgICAgZm9yIChpID0gMDsgaGFuZGxlcl9pbmZvW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogICAgICAgICAvKiBkbyBub3RoaW5nICovOwogCi0gICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBtYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CisgICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CiAgICAgaWYgKCFuZXdfcGFyc2VyLT5oYW5kbGVycykgewogICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTEyNiwxNCArMTE0MiwxOSBAQAogICAgIHZvaWQgKmRhdGE7CiAgICAgdW5zaWduZWQgaW50IGtpbmQ7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisKICAgICBpZiAodGVtcGxhdGVfYnVmZmVyWzFdID09IDApIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICAgICAgdGVtcGxhdGVfYnVmZmVyW2ldID0gaTsKICAgICB9CiAKICAgICB1ID0gUHlVbmljb2RlX0RlY29kZSgoY2hhciopIHRlbXBsYXRlX2J1ZmZlciwgMjU2LCBuYW1lLCAicmVwbGFjZSIpOwotICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKQorICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKSB7CisgICAgICAgIFB5X1hERUNSRUYodSk7CiAgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICAgIH0KIAogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KSAhPSAyNTYpIHsKICAgICAgICAgUHlfREVDUkVGKHUpOwpAQCAtMTE3OSwyOCArMTIwMCwyNiBAQAogICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsKICAgICBzZWxmLT5uc19wcmVmaXhlcyA9IDA7CiAgICAgc2VsZi0+aGFuZGxlcnMgPSBOVUxMOwotICAgIGlmIChuYW1lc3BhY2Vfc2VwYXJhdG9yICE9IE5VTEwpIHsKLSAgICAgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZU5TKGVuY29kaW5nLCAqbmFtZXNwYWNlX3NlcGFyYXRvcik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlKGVuY29kaW5nKTsKLSAgICB9Ci0jaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQotICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQotICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKLSAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCi0gICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQucHJlZml4KTsKLSNlbmRpZgogICAgIHNlbGYtPmludGVybiA9IGludGVybjsKICAgICBQeV9YSU5DUkVGKHNlbGYtPmludGVybik7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICAvKiBuYW1lc3BhY2Vfc2VwYXJhdG9yIGlzIGVpdGhlciBOVUxMIG9yIGNvbnRhaW5zIG9uZSBjaGFyICsgXDAgKi8KKyAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlX01NKGVuY29kaW5nLCAmRXhwYXRNZW1vcnlIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3NlcGFyYXRvcik7CiAgICAgaWYgKHNlbGYtPml0c2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiWE1MX1BhcnNlckNyZWF0ZSBmYWlsZWQiKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisjaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQorICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQorICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKKyAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCisgICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQuZXhwYXQuaGFzaHNhbHQpOworI2VuZGlmCiAgICAgWE1MX1NldFVzZXJEYXRhKHNlbGYtPml0c2VsZiwgKHZvaWQgKilzZWxmKTsKICAgICBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihzZWxmLT5pdHNlbGYsCiAgICAgICAgICAgICAgICAgICAoWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIpIFB5VW5rbm93bkVuY29kaW5nSGFuZGxlciwgTlVMTCk7CkBAIC0xMjA4LDcgKzEyMjcsNyBAQAogICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykKICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKIAotICAgIHNlbGYtPmhhbmRsZXJzID0gbWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOworICAgIHNlbGYtPmhhbmRsZXJzID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOwogICAgIGlmICghc2VsZi0+aGFuZGxlcnMpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEyMzUsMTEgKzEyNTQsMTEgQEAKICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW2ldID0gTlVMTDsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShzZWxmLT5oYW5kbGVycyk7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+aGFuZGxlcnMpOwogICAgICAgICBzZWxmLT5oYW5kbGVycyA9IE5VTEw7CiAgICAgfQogICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbnRlcm4pOwpAQCAtMTQzOSw3ICsxNDU4LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKGIpIHsKICAgICAgICAgICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKHNlbGYtPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTQ1MCw3ICsxNDY5LDcgQEAKICAgICAgICAgZWxzZSBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTUxMiw5ICsxNTMxLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBmcmVlIGV4aXN0aW5nIGJ1ZmZlciAqLwotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgIH0KLSAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhuZXdfYnVmZmVyX3NpemUpOworICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19idWZmZXJfc2l6ZSk7CiAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9weXRob24uYyBiL01vZHVsZXMvcHl0aG9uLmMKaW5kZXggZjc4MWQ5YS4uOTgxMWMwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weXRob24uYworKysgYi9Nb2R1bGVzL3B5dGhvbi5jCkBAIC0yMyw5ICsyMywxMiBAQAogICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOwogICAgIGludCBpLCByZXM7CiAgICAgY2hhciAqb2xkbG9jOworI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgZnBfZXhjZXB0X3QgbTsKKyNlbmRpZgogCi0gICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqKGFyZ2MrMSkpOwotICAgIGFyZ3ZfY29weTIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSooYXJnYysxKSk7CisgICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiAoYXJnYysxKSk7CisgICAgYXJndl9jb3B5MiA9ICh3Y2hhcl90ICoqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogKGFyZ2MrMSkpOwogICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgIHJldHVybiAxOwpAQCAtMzcsMTcgKzQwLDIxIEBACiAgICAgICogZXhjZXB0aW9ucyBieSBkZWZhdWx0LiAgSGVyZSB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgICovCiAjaWZkZWYgX19GcmVlQlNEX18KLSAgICBmcF9leGNlcHRfdCBtOwotCiAgICAgbSA9IGZwZ2V0bWFzaygpOwogICAgIGZwc2V0bWFzayhtICYgfkZQX1hfT0ZMKTsKICNlbmRpZgotICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKLSAgICAgICAgICAgIGZyZWUob2xkbG9jKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOwpAQCAtNTgsMTMgKzY1LDEzIEBACiAgICAgYXJndl9jb3B5MlthcmdjXSA9IGFyZ3ZfY29weVthcmdjXSA9IE5VTEw7CiAKICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgIGZyZWUob2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgcmVzID0gUHlfTWFpbihhcmdjLCBhcmd2X2NvcHkpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkpOworICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgcmV0dXJuIHJlczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IDhmYWM1MjYuLmFlODM4MDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTYsNiArNiw3IEBACiAKIC8qIFN0YW5kYXJkIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTc2LDYgKzc3LDU1IEBACiAgICAoc2VlIGlzc3VlICMxNzI4OSBmb3IgdGhlIG1vdGl2YXRpb24pLiAqLwogc3RhdGljIGNoYXIgKmNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnM7CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2s7CisgIFB5T2JqZWN0ICpzdGFydHVwX2hvb2s7CisgIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vazsKKyAgUHlPYmplY3QgKmNvbXBsZXRlcjsKKyAgUHlPYmplY3QgKmJlZ2lkeDsKKyAgUHlPYmplY3QgKmVuZGlkeDsKK30gcmVhZGxpbmVzdGF0ZTsKKworCisjZGVmaW5lIHJlYWRsaW5lX3N0YXRlKG8pICgocmVhZGxpbmVzdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG8pKQorCitzdGF0aWMgaW50CityZWFkbGluZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+c3RhcnR1cF9ob29rKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGVyKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5iZWdpZHgpOworICAgUHlfQ0xFQVIoc3RhdGUtPmVuZGlkeCk7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZGxpbmVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5zdGFydHVwX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRlcik7CisgICAgUHlfVklTSVQoc3RhdGUtPmJlZ2lkeCk7CisgICAgUHlfVklTSVQoc3RhdGUtPmVuZGlkeCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkbGluZV9mcmVlKHZvaWQgKm0pCit7CisgICAgcmVhZGxpbmVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZiByZWFkbGluZW1vZHVsZTsKKworI2RlZmluZSByZWFkbGluZXN0YXRlX2dsb2JhbCAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJnJlYWRsaW5lbW9kdWxlKSkpCisKKwogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc2VuZCBvbmUgbGluZSB0byByZWFkbGluZSdzIGluaXQgZmlsZSBwYXJzZXIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTg2LDEyICsxMzYsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogTWFrZSBhIGNvcHkgLS0gcmxfcGFyc2VfYW5kX2JpbmQoKSBtb2RpZmllcyBpdHMgYXJndW1lbnQgKi8KICAgICAvKiBCZXJuYXJkIEhlcnpvZyAqLwotICAgIGNvcHkgPSBtYWxsb2MoMSArIHN0cmxlbihzKSk7CisgICAgY29weSA9IFB5TWVtX01hbGxvYygxICsgc3RybGVuKHMpKTsKICAgICBpZiAoY29weSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzdHJjcHkoY29weSwgcyk7CiAgICAgcmxfcGFyc2VfYW5kX2JpbmQoY29weSk7Ci0gICAgZnJlZShjb3B5KTsgLyogRnJlZSB0aGUgY29weSAqLworICAgIFB5TWVtX0ZyZWUoY29weSk7IC8qIEZyZWUgdGhlIGNvcHkgKi8KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjUxLDIzICszMDEsMjEgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHNwZWNpZnkgaG9vayBmdW5jdGlvbnMgaW4gUHl0aG9uICovCiAKLXN0YXRpYyBQeU9iamVjdCAqY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKnN0YXJ0dXBfaG9vayA9IE5VTEw7CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCi1zdGF0aWMgUHlPYmplY3QgKnByZV9pbnB1dF9ob29rID0gTlVMTDsKKwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IHNldF9ob29rKCJjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiwKLSAgICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOworICAgICAgICAgICAgICAgICAgICAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOwogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSwogICAgIC8qIFdlIGNhbm5vdCBzZXQgdGhpcyBob29rIGdsb2JhbGx5LCBzaW5jZSBpdCByZXBsYWNlcyB0aGUKICAgICAgICBkZWZhdWx0IGNvbXBsZXRpb24gZGlzcGxheS4gKi8KICAgICBybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID0KLSAgICAgICAgY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA/CisgICAgICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID8KICNpZiBkZWZpbmVkKF9STF9GVU5DVElPTl9UWVBFREVGKQogICAgICAgICAocmxfY29tcGRpc3BfZnVuY190ICopb25fY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA6IDA7CiAjZWxzZQpAQCAtMjg4LDcgKzMzNiw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3N0YXJ0dXBfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHNldF9ob29rKCJzdGFydHVwX2hvb2siLCAmc3RhcnR1cF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInN0YXJ0dXBfaG9vayIsICZyZWFkbGluZXN0YXRlX2dsb2JhbC0+c3RhcnR1cF9ob29rLCBhcmdzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19zZXRfc3RhcnR1cF9ob29rLApAQCAtMzA1LDcgKzM1Myw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3ByZV9pbnB1dF9ob29rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnByZV9pbnB1dF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vaywgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X3ByZV9pbnB1dF9ob29rLApAQCAtMzIwLDEwICszNjgsMTAgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc3BlY2lmeSBhIHdvcmQgY29tcGxldGVyIGluIFB5dGhvbiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKmNvbXBsZXRlciA9IE5VTEw7CiAKLXN0YXRpYyBQeU9iamVjdCAqYmVnaWR4ID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqZW5kaWR4ID0gTlVMTDsKKworCisKIAogCiAvKiBHZXQgdGhlIGNvbXBsZXRpb24gdHlwZSBmb3IgdGhlIHNjb3BlIG9mIHRoZSB0YWItY29tcGxldGlvbiAqLwpAQCAtMzQzLDggKzM5MSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2JlZ2lkeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIFB5X0lOQ1JFRihiZWdpZHgpOwotICAgIHJldHVybiBiZWdpZHg7CisgICAgUHlfSU5DUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIHJldHVybiByZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4OwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9iZWdpZHgsCkBAIC0zNTcsOCArNDA1LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZW5kaWR4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgUHlfSU5DUkVGKGVuZGlkeCk7Ci0gICAgcmV0dXJuIGVuZGlkeDsKKyAgICBQeV9JTkNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmV0dXJuIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHg7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2VuZGlkeCwKQEAgLTUyMyw3ICs1NzEsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9jb21wbGV0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBzZXRfaG9vaygiY29tcGxldGVyIiwgJmNvbXBsZXRlciwgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJjb21wbGV0ZXIiLCAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X2NvbXBsZXRlciwKQEAgLTUzNywxMSArNTg1LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2NvbXBsZXRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSAgICBpZiAoY29tcGxldGVyID09IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KLSAgICBQeV9JTkNSRUYoY29tcGxldGVyKTsKLSAgICByZXR1cm4gY29tcGxldGVyOworICAgIFB5X0lOQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyKTsKKyAgICByZXR1cm4gcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlcjsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfY29tcGxldGVyLApAQCAtNzQ1LDkgKzc5Myw2IEBACiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgaWYgKGZ1bmMgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqcjsKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKLSNlbmRpZgogICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmMsIE5VTEwpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTc2NCw5ICs4MDksNiBAQAogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBQeV9YREVDUkVGKHIpOwogICAgICAgZG9uZToKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC03NzksNyArODIxLDE1IEBACiBvbl9zdGFydHVwX2hvb2soKQogI2VuZGlmCiB7Ci0gICAgcmV0dXJuIG9uX2hvb2soc3RhcnR1cF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnN0YXJ0dXBfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCkBAIC03OTAsNyArODQwLDE1IEBACiBvbl9wcmVfaW5wdXRfaG9vaygpCiAjZW5kaWYKIHsKLSAgICByZXR1cm4gb25faG9vayhwcmVfaW5wdXRfaG9vayk7CisgICAgaW50IHI7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgorICAgIHIgPSBvbl9ob29rKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAjZW5kaWYKIApAQCAtODE3LDcgKzg3NSw3IEBACiAgICAgICAgIGlmIChQeUxpc3RfU2V0SXRlbShtLCBpLCBzKSA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vaywKKyAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPaSIsIG1hdGNoZXNbMF0sIG0sIG1heF9sZW5ndGgpOwogCiAgICAgUHlfREVDUkVGKG0pOyBtPU5VTEw7CkBAIC04NDcsMTMgKzkwNSwxMyBAQAogb25fY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhdGUpCiB7CiAgICAgY2hhciAqcmVzdWx0ID0gTlVMTDsKLSAgICBpZiAoY29tcGxldGVyICE9IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCiAgICAgICAgIHJsX2F0dGVtcHRlZF9jb21wbGV0aW9uX292ZXIgPSAxOwotICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNvbXBsZXRlciwgInNpIiwgdGV4dCwgc3RhdGUpOworICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIsICJzaSIsIHRleHQsIHN0YXRlKTsKICAgICAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIGlmIChyID09IFB5X05vbmUpIHsKQEAgLTg4NiwyNCArOTQ0LDMyIEBACiBzdGF0aWMgY2hhciAqKgogZmxleF9jb21wbGV0ZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiB7CisgICAgY2hhciAqKnJlc3VsdDsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCiAjaWZkZWYgSEFWRV9STF9DT01QTEVUSU9OX0FQUEVORF9DSEFSQUNURVIKICAgICBybF9jb21wbGV0aW9uX2FwcGVuZF9jaGFyYWN0ZXIgPSdcMCc7CiAjZW5kaWYKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fU1VQUFJFU1NfQVBQRU5ECiAgICAgcmxfY29tcGxldGlvbl9zdXBwcmVzc19hcHBlbmQgPSAwOwogI2VuZGlmCi0gICAgUHlfWERFQ1JFRihiZWdpZHgpOwotICAgIFB5X1hERUNSRUYoZW5kaWR4KTsKLSAgICBiZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0YXJ0KTsKLSAgICBlbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIGVuZCk7Ci0gICAgcmV0dXJuIGNvbXBsZXRpb25fbWF0Y2hlcyh0ZXh0LCAqb25fY29tcGxldGlvbik7CisgICAgUHlfWERFQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4KTsKKyAgICBQeV9YREVDUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHgpOworICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0YXJ0KTsKKyAgICByZWFkbGluZXN0YXRlX2dsb2JhbC0+ZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBlbmQpOworICAgIHJlc3VsdCA9IGNvbXBsZXRpb25fbWF0Y2hlcyh0ZXh0LCAqb25fY29tcGxldGlvbik7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCiAvKiBIZWxwZXIgdG8gaW5pdGlhbGl6ZSBHTlUgcmVhZGxpbmUgcHJvcGVybHkuICovCiAKIHN0YXRpYyB2b2lkCi1zZXR1cF9yZWFkbGluZSh2b2lkKQorc2V0dXBfcmVhZGxpbmUocmVhZGxpbmVzdGF0ZSAqbW9kX3N0YXRlKQogewogI2lmZGVmIFNBVkVfTE9DQUxFCiAgICAgY2hhciAqc2F2ZWRfbG9jYWxlID0gc3RyZHVwKHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCkpOwpAQCAtOTMzLDEwICs5OTksNiBAQAogICAgIHVzaW5nX2hpc3RvcnkoKTsKIAogICAgIHJsX3JlYWRsaW5lX25hbWUgPSAicHl0aG9uIjsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIC8qIEFsbG93ICRpZiB0ZXJtPSBpbiAuaW5wdXRyYyB0byB3b3JrICovCi0gICAgcmxfdGVybWluYWxfbmFtZSA9IGdldGVudigiVEVSTSIpOwotI2VuZGlmCiAgICAgLyogRm9yY2UgcmViaW5kIG9mIFRBQiB0byBpbnNlcnQtdGFiICovCiAgICAgcmxfYmluZF9rZXkoJ1x0JywgcmxfaW5zZXJ0KTsKICAgICAvKiBCaW5kIGJvdGggRVNDLVRBQiBhbmQgRVNDLUVTQyB0byB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiAqLwpAQCAtOTU1LDggKzEwMTcsMjMgQEAKICAgICAgICAgc3RyZHVwKCIgXHRcbmB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiw8Pi8/Iik7CiAgICAgICAgIC8qIEFsbCBub25hbHBoYW51bXMgZXhjZXB0ICcuJyAqLwogCi0gICAgYmVnaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKLSAgICBlbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOworICAgIG1vZF9zdGF0ZS0+YmVnaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKyAgICBtb2Rfc3RhdGUtPmVuZGlkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisKKyNpZm5kZWYgX19BUFBMRV9fCisgICAgaWYgKCFpc2F0dHkoU1RET1VUX0ZJTEVOTykpIHsKKyAgICAgICAgLyogSXNzdWUgIzE5ODg0OiBzdGRvdXQgaXMgbm8gYSB0ZXJtaW5hbC4gRGlzYWJsZSBtZXRhIG1vZGlmaWVyCisgICAgICAgICAgIGtleXMgdG8gbm90IHdyaXRlIHRoZSBBTlNJIHNlcXVlbmNlICJcMDMzWzEwMzRoIiBpbnRvIHN0ZG91dC4gT24KKyAgICAgICAgICAgdGVybWluYWxzIHN1cHBvcnRpbmcgOCBiaXQgY2hhcmFjdGVycyBsaWtlIFRFUk09eHRlcm0tMjU2Y29sb3IKKyAgICAgICAgICAgKHdoaWNoIGlzIG5vdyB0aGUgZGVmYXVsdCBGZWRvcmEgc2luY2UgRmVkb3JhIDE4KSwgdGhlIG1ldGEga2V5IGlzCisgICAgICAgICAgIHVzZWQgdG8gZW5hYmxlIHN1cHBvcnQgb2YgOCBiaXQgY2hhcmFjdGVycyAoQU5TSSBzZXF1ZW5jZQorICAgICAgICAgICAiXDAzM1sxMDM0aCIpLgorCisgICAgICAgICAgIFdpdGggbGliZWRpdCwgdGhpcyBjYWxsIG1ha2VzIHJlYWRsaW5lKCkgY3Jhc2guICovCisgICAgICAgIHJsX3ZhcmlhYmxlX2JpbmQgKCJlbmFibGUtbWV0YS1rZXkiLCAib2ZmIik7CisgICAgfQorI2VuZGlmCisKICAgICAvKiBJbml0aWFsaXplIChhbGxvd3MgLmlucHV0cmMgdG8gb3ZlcnJpZGUpCiAgICAgICoKICAgICAgKiBYWFg6IEEgYnVnIGluIHRoZSByZWFkbGluZS0yLjIgbGlicmFyeSBjYXVzZXMgYSBtZW1vcnkgbGVhawpAQCAtOTg4LDcgKzEwNjUsNyBAQAogZXh0ZXJuIFB5VGhyZWFkU3RhdGUqIF9QeU9TX1JlYWRsaW5lVFN0YXRlOwogCiBzdGF0aWMgY2hhciAqCi1yZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKK3JlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjb25zdCBjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQogewogICAgIGNoYXIgKiBub3RfZG9uZV9yZWFkaW5nID0gIiI7CiAgICAgZmRfc2V0IHNlbGVjdHNldDsKQEAgLTEwNjMsNyArMTE0MCw3IEBACiAKIAogc3RhdGljIGNoYXIgKgotcmVhZGxpbmVfdW50aWxfZW50ZXJfb3Jfc2lnbmFsKGNoYXIgKnByb21wdCwgaW50ICpzaWduYWwpCityZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKIHsKICAgICBQeU9TX3NpZ2hhbmRsZXJfdCBvbGRfaW50aGFuZGxlcjsKICAgICBjaGFyICpwOwpAQCAtMTA5MCw3ICsxMTY3LDcgQEAKIAogCiBzdGF0aWMgY2hhciAqCi1jYWxsX3JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorY2FsbF9yZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKICAgICBzaXplX3QgbjsKICAgICBjaGFyICpwLCAqcTsKQEAgLTExMjEsNyArMTE5OCw3IEBACiAKICAgICAvKiBXZSBnb3QgYW4gRU9GLCByZXR1cm4gYSBlbXB0eSBzdHJpbmcuICovCiAgICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBwID0gUHlNZW1fTWFsbG9jKDEpOworICAgICAgICBwID0gUHlNZW1fUmF3TWFsbG9jKDEpOwogICAgICAgICBpZiAocCAhPSBOVUxMKQogICAgICAgICAgICAgKnAgPSAnXDAnOwogICAgICAgICBSRVNUT1JFX0xPQ0FMRShzYXZlZF9sb2NhbGUpCkBAIC0xMTQ5LDcgKzEyMjYsNyBAQAogICAgIC8qIENvcHkgdGhlIG1hbGxvYydlZCBidWZmZXIgaW50byBhIFB5TWVtX01hbGxvYydlZCBvbmUgYW5kCiAgICAgICAgcmVsZWFzZSB0aGUgb3JpZ2luYWwuICovCiAgICAgcSA9IHA7Ci0gICAgcCA9IFB5TWVtX01hbGxvYyhuKzIpOworICAgIHAgPSBQeU1lbV9SYXdNYWxsb2MobisyKTsKICAgICBpZiAocCAhPSBOVUxMKSB7CiAgICAgICAgIHN0cm5jcHkocCwgcSwgbik7CiAgICAgICAgIHBbbl0gPSAnXG4nOwpAQCAtMTE3NSwxMiArMTI1MiwxMiBAQAogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAicmVhZGxpbmUiLAogICAgIGRvY19tb2R1bGUsCi0gICAgLTEsCisgICAgc2l6ZW9mKHJlYWRsaW5lc3RhdGUpLAogICAgIHJlYWRsaW5lX21ldGhvZHMsCiAgICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAorICAgIHJlYWRsaW5lX3RyYXZlcnNlLAorICAgIHJlYWRsaW5lX2NsZWFyLAorICAgIHJlYWRsaW5lX2ZyZWUKIH07CiAKIApAQCAtMTE4OCw2ICsxMjY1LDcgQEAKIFB5SW5pdF9yZWFkbGluZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptOworICAgIHJlYWRsaW5lc3RhdGUgKm1vZF9zdGF0ZTsKIAogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmIChzdHJuY21wKHJsX2xpYnJhcnlfdmVyc2lvbiwgbGliZWRpdF92ZXJzaW9uX3RhZywgc3RybGVuKGxpYmVkaXRfdmVyc2lvbl90YWcpKSA9PSAwKSB7CkBAIC0xMjA0LDcgKzEyODIsOCBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbW9kX3N0YXRlID0gKHJlYWRsaW5lc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUobSk7CiAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IGNhbGxfcmVhZGxpbmU7Ci0gICAgc2V0dXBfcmVhZGxpbmUoKTsKKyAgICBzZXR1cF9yZWFkbGluZShtb2Rfc3RhdGUpOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZXNvdXJjZS5jIGIvTW9kdWxlcy9yZXNvdXJjZS5jCmluZGV4IGIyOTRhOGMuLjNhMWNmMDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVzb3VyY2UuYworKysgYi9Nb2R1bGVzL3Jlc291cmNlLmMKQEAgLTEwNiw2ICsxMDYsNDQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50CitweTJybGltaXQoUHlPYmplY3QgKmN1cm9iaiwgUHlPYmplY3QgKm1heG9iaiwgc3RydWN0IHJsaW1pdCAqcmxfb3V0KQoreworI2lmICFkZWZpbmVkKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQpCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZyhtYXhvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAvKiBUaGUgbGltaXRzIGFyZSBwcm9iYWJseSBiaWdnZXIgdGhhbiBhIGxvbmcgKi8KKyAgICBybF9vdXQtPnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZ0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZ0xvbmcobWF4b2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IHJsX291dC0+cmxpbV9jdXIgJiBSTElNX0lORklOSVRZOworICAgIHJsX291dC0+cmxpbV9tYXggPSBybF9vdXQtPnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKKyAgICByZXR1cm4gMDsKKworfQorCitzdGF0aWMgUHlPYmplY3QqCitybGltaXQycHkoc3RydWN0IHJsaW1pdCBybCkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcmVzb3VyY2VfZ2V0cmxpbWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTEyNiwxNSArMTY0LDcgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQotICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworICAgIHJldHVybiBybGltaXQycHkocmwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTY2LDI1ICsxOTYsMTAgQEAKICAgICBjdXJvYmogPSBQeVR1cGxlX0dFVF9JVEVNKGxpbWl0cywgMCk7CiAgICAgbWF4b2JqID0gUHlUdXBsZV9HRVRfSVRFTShsaW1pdHMsIDEpOwogCi0jaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKLSAgICBybC5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKLSAgICBpZiAocmwucmxpbV9jdXIgPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIGlmIChweTJybGltaXQoY3Vyb2JqLCBtYXhvYmosICZybCkgPCAwKSB7CiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nKG1heG9iaik7Ci0gICAgaWYgKHJsLnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSNlbHNlCi0gICAgLyogVGhlIGxpbWl0cyBhcmUgcHJvYmFibHkgYmlnZ2VyIHRoYW4gYSBsb25nICovCi0gICAgcmwucmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nTG9uZyhjdXJvYmopOwotICAgIGlmIChybC5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nTG9uZyhtYXhvYmopOwotICAgIGlmIChybC5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0jZW5kaWYKKyAgICB9CiAKLSAgICBybC5ybGltX2N1ciA9IHJsLnJsaW1fY3VyICYgUkxJTV9JTkZJTklUWTsKLSAgICBybC5ybGltX21heCA9IHJsLnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKICAgICBpZiAoc2V0cmxpbWl0KHJlc291cmNlLCAmcmwpID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTIwNSw2ICsyMjAsNDggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2lmZGVmIEhBVkVfUFJMSU1JVAorc3RhdGljIFB5T2JqZWN0ICoKK3Jlc291cmNlX3BybGltaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHN0cnVjdCBybGltaXQgb2xkX2xpbWl0LCBuZXdfbGltaXQ7CisgICAgaW50IHJlc291cmNlLCByZXR2YWw7CisgICAgcGlkX3QgcGlkOworICAgIFB5T2JqZWN0ICpjdXJvYmo9TlVMTCwgKm1heG9iaj1OVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIml8KE9PKTpwcmxpbWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpZCwgJnJlc291cmNlLCAmY3Vyb2JqLCAmbWF4b2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAocmVzb3VyY2UgPCAwIHx8IHJlc291cmNlID49IFJMSU1fTkxJTUlUUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHJlc291cmNlIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoY3Vyb2JqICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHB5MnJsaW1pdChjdXJvYmosIG1heG9iaiwgJm5ld19saW1pdCkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSBwcmxpbWl0KHBpZCwgcmVzb3VyY2UsICZuZXdfbGltaXQsICZvbGRfbGltaXQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dmFsID0gcHJsaW1pdChwaWQsIHJlc291cmNlLCBOVUxMLCAmb2xkX2xpbWl0KTsKKyAgICB9CisKKyAgICBpZiAocmV0dmFsID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50IGxpbWl0IGV4Y2VlZHMgbWF4aW11bSBsaW1pdCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmxpbWl0MnB5KG9sZF9saW1pdCk7Cit9CisjZW5kaWYgLyogSEFWRV9QUkxJTUlUICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiByZXNvdXJjZV9nZXRwYWdlc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKQEAgLTIyOSw2ICsyODYsOSBAQAogcmVzb3VyY2VfbWV0aG9kc1tdID0gewogICAgIHsiZ2V0cnVzYWdlIiwgICAgcmVzb3VyY2VfZ2V0cnVzYWdlLCAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRybGltaXQiLCAgICByZXNvdXJjZV9nZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKKyNpZmRlZiBIQVZFX1BSTElNSVQKKyAgICB7InBybGltaXQiLCAgICAgIHJlc291cmNlX3BybGltaXQsICAgICBNRVRIX1ZBUkFSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRybGltaXQiLCAgICByZXNvdXJjZV9zZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldHBhZ2VzaXplIiwgIHJlc291cmNlX2dldHBhZ2VzaXplLCBNRVRIX05PQVJHU30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMjYzLDgwICszMjMsMTE5IEBACiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KICAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFB5RXhjX09TRXJyb3IpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFJVc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ydXNhZ2VfZGVzYyk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFJVc2FnZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3J1c2FnZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBQeV9JTkNSRUYoJlN0cnVjdFJVc2FnZVR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3J1c2FnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCopICZTdHJ1Y3RSVXNhZ2VUeXBlKTsKIAogICAgIC8qIGluc2VydCBjb25zdGFudHMgKi8KICNpZmRlZiBSTElNSVRfQ1BVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9DUFUiLCBSTElNSVRfQ1BVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ1BVKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0ZTSVpFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9GU0laRSIsIFJMSU1JVF9GU0laRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0ZTSVpFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0RBVEEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0RBVEEiLCBSTElNSVRfREFUQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0RBVEEpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfU1RBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NUQUNLIiwgUkxJTUlUX1NUQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU1RBQ0spOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfQ09SRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQ09SRSIsIFJMSU1JVF9DT1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ09SRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9OT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05PRklMRSIsIFJMSU1JVF9OT0ZJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX09GSUxFIiwgUkxJTUlUX09GSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfVk1FTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfVk1FTSIsIFJMSU1JVF9WTUVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfVk1FTSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9BUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQVMiLCBSTElNSVRfQVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9BUyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9SU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1JTUyIsIFJMSU1JVF9SU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SU1MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTlBST0MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05QUk9DIiwgUkxJTUlUX05QUk9DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTlBST0MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTUVNTE9DSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTUVNTE9DSyIsIFJMSU1JVF9NRU1MT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTUVNTE9DSyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9TQlNJWkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NCU0laRSIsIFJMSU1JVF9TQlNJWkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TQlNJWkUpOwogI2VuZGlmCiAKKy8qIExpbnV4IHNwZWNpZmljICovCisjaWZkZWYgUkxJTUlUX01TR1FVRVVFCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX01TR1FVRVVFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX05JQ0UKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTklDRSk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9SVFBSSU8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfUlRQUklPKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1JUVElNRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SVFRJTUUpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfU0lHUEVORElORworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TSUdQRU5ESU5HKTsKKyNlbmRpZgorCisvKiB0YXJnZXQgKi8KICNpZmRlZiBSVVNBR0VfU0VMRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfU0VMRiIsIFJVU0FHRV9TRUxGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfU0VMRik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9DSElMRFJFTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfQ0hJTERSRU4iLCBSVVNBR0VfQ0hJTERSRU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9DSElMRFJFTik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9CT1RICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9CT1RIIiwgUlVTQUdFX0JPVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9CT1RIKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX1RIUkVBRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfVEhSRUFEIiwgUlVTQUdFX1RIUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX1RIUkVBRCk7CisjZW5kaWYKKworLyogRnJlZUJTRCBzcGVjaWZpYyAqLworCisjaWZkZWYgUkxJTUlUX1NXQVAKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU1dBUCk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9TQlNJWkUKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU0JTSVpFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX05QVFMKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTlBUUyk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwppbmRleCA5NTJhMDkxLi5mZmFmODY1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKQEAgLTQ3LDE5ICs0NywxMSBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHV0aWxzLmg+Ci0jZW5kaWYKLQogI2lmZGVmIE1TX1dJTkRPV1MKICMgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCiAjICBpbmNsdWRlIDx3aW5zb2NrLmg+CiAjZWxzZQogIyAgZGVmaW5lIFNPQ0tFVCBpbnQKLSMgIGlmIGRlZmluZWQoX19WTVMpCi0jICAgIGluY2x1ZGUgPHNvY2tldC5oPgotIyAgZW5kaWYKICNlbmRpZgogCiAvKiBsaXN0IG9mIFB5dGhvbiBvYmplY3RzIGFuZCB0aGVpciBmaWxlIGRlc2NyaXB0b3IgKi8KQEAgLTIyMCwxMCArMjEyLDE4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIC8qIE9uIE9wZW5CU0QgNS40LCB0aW1ldmFsLnR2X3NlYyBpcyBhIGxvbmcuCisgICAgICAgICAqIEV4YW1wbGU6IGxvbmcgaXMgNjQtYml0LCB3aGVyZWFzIHRpbWVfdCBpcyAzMi1iaXQuICovCiAgICAgICAgIHRpbWVfdCBzZWM7Ci0gICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXZhbCh0b3V0LCAmc2VjLCAmdHYudHZfdXNlYykgPT0gLTEpCisgICAgICAgIC8qIE9uIE9TIFggNjQtYml0LCB0aW1ldmFsLnR2X3VzZWMgaXMgYW4gaW50IChhbmQgdGh1cyBzdGlsbCA0CisgICAgICAgICAgIGJ5dGVzIGFzIHJlcXVpcmVkKSwgYnV0IG5vIGxvbmdlciBkZWZpbmVkIGJ5IGEgbG9uZy4gKi8KKyAgICAgICAgbG9uZyB1c2VjOworICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWV2YWwodG91dCwgJnNlYywgJnVzZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlUaW1lX1JPVU5EX1VQKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgLyogT24gV2luZG93cywgdGltZXZhbC50dl9zZWMgaXMgYSBsb25nICgzMiBiaXQpLAorICAgICAgICAgKiB3aGVyZWFzIHRpbWVfdCBjYW4gYmUgNjQtYml0LiAqLwogICAgICAgICBhc3NlcnQoc2l6ZW9mKHR2LnR2X3NlYykgPT0gc2l6ZW9mKGxvbmcpKTsKICNpZiBTSVpFT0ZfVElNRV9UID4gU0laRU9GX0xPTkcKICAgICAgICAgaWYgKHNlYyA+IExPTkdfTUFYKSB7CkBAIC0yMzQsMTMgKzIzNCwxMCBAQAogI2VuZGlmCiAgICAgICAgIHR2LnR2X3NlYyA9IChsb25nKXNlYzsKICNlbHNlCi0gICAgICAgIC8qIDY0LWJpdCBPUyBYIGhhcyBzdHJ1Y3QgdGltZXZhbC50dl91c2VjIGFzIGFuIGludCAoYW5kIHRodXMgc3RpbGwgNAotICAgICAgICAgICBieXRlcyBhcyByZXF1aXJlZCksIGJ1dCBubyBsb25nZXIgZGVmaW5lZCBieSBhIGxvbmcuICovCi0gICAgICAgIGxvbmcgdHZfdXNlYzsKLSAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1ldmFsKHRvdXQsICZ0di50dl9zZWMsICZ0dl91c2VjKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB0di50dl91c2VjID0gdHZfdXNlYzsKKyAgICAgICAgYXNzZXJ0KHNpemVvZih0di50dl9zZWMpID49IHNpemVvZihzZWMpKTsKKyAgICAgICAgdHYudHZfc2VjID0gc2VjOwogI2VuZGlmCisgICAgICAgIHR2LnR2X3VzZWMgPSB1c2VjOwogICAgICAgICBpZiAodHYudHZfc2VjIDwgMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0aW1lb3V0IG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMwMyw5ICszMDAsOSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXQgPSBQeVR1cGxlX1BhY2soMywgaWZkbGlzdCwgb2ZkbGlzdCwgZWZkbGlzdCk7CiAKLSAgICAgICAgUHlfREVDUkVGKGlmZGxpc3QpOwotICAgICAgICBQeV9ERUNSRUYob2ZkbGlzdCk7Ci0gICAgICAgIFB5X0RFQ1JFRihlZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihpZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihvZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihlZmRsaXN0KTsKICAgICB9CiAKICAgZmluYWxseToKQEAgLTcwNSw2ICs3MDIsMTMgQEAKIAogc3RhdGljIFB5VHlwZU9iamVjdCBkZXZwb2xsX1R5cGU7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkZXZwb2xsX2Vycl9jbG9zZWQodm9pZCkKK3sKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGRldnBvbGwgb2JqZWN0Iik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgZGV2cG9sbF9mbHVzaChkZXZwb2xsT2JqZWN0ICpzZWxmKQogewogICAgIGludCBzaXplLCBuOwpAQCAtNzQ2LDYgKzc1MCw5IEBACiAgICAgaW50IGZkOwogICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50cyA9IFBPTExJTiB8IFBPTExQUkkgfCBQT0xMT1VUOwogCisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TyY6cmVnaXN0ZXIiLCAmbywgdXNob3J0X2NvbnZlcnRlciwgJmV2ZW50cykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC04MDksNiArODE2LDkgQEAKIHsKICAgICBpbnQgZmQ7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvciggbyApOwogICAgIGlmIChmZCA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MzgsNiArODQ4LDkgQEAKICAgICBsb25nIHRpbWVvdXQ7CiAgICAgUHlPYmplY3QgKnZhbHVlLCAqbnVtMSwgKm51bTI7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInBvbGwiLCAwLCAxLCAmdG91dCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTE2LDYgKzkyOSw2MCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50CitkZXZwb2xsX2ludGVybmFsX2Nsb3NlKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaW50IHNhdmVfZXJybm8gPSAwOworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsID49IDApIHsKKyAgICAgICAgaW50IGZkID0gc2VsZi0+ZmRfZGV2cG9sbDsKKyAgICAgICAgc2VsZi0+ZmRfZGV2cG9sbCA9IC0xOworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGlmIChjbG9zZShmZCkgPCAwKQorICAgICAgICAgICAgc2F2ZV9lcnJubyA9IGVycm5vOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0KKyAgICByZXR1cm4gc2F2ZV9lcnJubzsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZGV2cG9sbF9jbG9zZShkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGVycm5vID0gZGV2cG9sbF9pbnRlcm5hbF9jbG9zZShzZWxmKTsKKyAgICBpZiAoZXJybm8gPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoZGV2cG9sbF9jbG9zZV9kb2MsCisiY2xvc2UoKSAtPiBOb25lXG5cCitcblwKK0Nsb3NlIHRoZSBkZXZwb2xsIGZpbGUgZGVzY3JpcHRvci4gRnVydGhlciBvcGVyYXRpb25zIG9uIHRoZSBkZXZwb2xsXG5cCitvYmplY3Qgd2lsbCByYWlzZSBhbiBleGNlcHRpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfZ2V0X2Nsb3NlZChkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfZmlsZW5vKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5mZF9kZXZwb2xsKTsKK30KKworUHlEb2NfU1RSVkFSKGRldnBvbGxfZmlsZW5vX2RvYywKKyJmaWxlbm8oKSAtPiBpbnRcblwKK1xuXAorUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IuIik7CisKIHN0YXRpYyBQeU1ldGhvZERlZiBkZXZwb2xsX21ldGhvZHNbXSA9IHsKICAgICB7InJlZ2lzdGVyIiwgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX3JlZ2lzdGVyLAogICAgICBNRVRIX1ZBUkFSR1MsICBkZXZwb2xsX3JlZ2lzdGVyX2RvY30sCkBAIC05MjUsOSArOTkyLDE5IEBACiAgICAgIE1FVEhfTywgICAgICAgIGRldnBvbGxfdW5yZWdpc3Rlcl9kb2N9LAogICAgIHsicG9sbCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfcG9sbCwKICAgICAgTUVUSF9WQVJBUkdTLCAgZGV2cG9sbF9wb2xsX2RvY30sCisgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9jbG9zZSwgICAgTUVUSF9OT0FSR1MsCisgICAgIGRldnBvbGxfY2xvc2VfZG9jfSwKKyAgICB7ImZpbGVubyIsICAgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX2ZpbGVubywgICAgTUVUSF9OT0FSR1MsCisgICAgIGRldnBvbGxfZmlsZW5vX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKK3N0YXRpYyBQeUdldFNldERlZiBkZXZwb2xsX2dldHNldGxpc3RbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpZGV2cG9sbF9nZXRfY2xvc2VkLCBOVUxMLAorICAgICAiVHJ1ZSBpZiB0aGUgZGV2cG9sbCBvYmplY3QgaXMgY2xvc2VkIn0sCisgICAgezB9LAorfTsKKwogc3RhdGljIGRldnBvbGxPYmplY3QgKgogbmV3RGV2UG9sbE9iamVjdCh2b2lkKQogewpAQCAtOTQ1LDcgKzEwMjIsNyBAQAogICAgICovCiAgICAgbGltaXRfcmVzdWx0ID0gZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZsaW1pdCk7CiAgICAgaWYgKGxpbWl0X3Jlc3VsdCAhPSAtMSkKLSAgICAgICAgZmRfZGV2cG9sbCA9IG9wZW4oIi9kZXYvcG9sbCIsIE9fUkRXUik7CisgICAgICAgIGZkX2RldnBvbGwgPSBfUHlfb3BlbigiL2Rldi9wb2xsIiwgT19SRFdSKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGxpbWl0X3Jlc3VsdCA9PSAtMSkgewpAQCAtOTgxLDEyICsxMDU4LDggQEAKIHN0YXRpYyB2b2lkCiBkZXZwb2xsX2RlYWxsb2MoZGV2cG9sbE9iamVjdCAqc2VsZikKIHsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgY2xvc2Uoc2VsZi0+ZmRfZGV2cG9sbCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQorICAgICh2b2lkKWRldnBvbGxfaW50ZXJuYWxfY2xvc2Uoc2VsZik7CiAgICAgUHlNZW1fREVMKHNlbGYtPmZkcyk7Ci0KICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTEwMjIsNiArMTA5NSw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIGRldnBvbGxfbWV0aG9kcywgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgZGV2cG9sbF9nZXRzZXRsaXN0LCAgICAgICAgIC8qIHRwX2dldHNldCAqLwogfTsKICNlbmRpZiAgLyogSEFWRV9TWVNfREVWUE9MTF9IICovCiAKQEAgLTExMDUsNyArMTE4MCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcHllcG9sbF9lcnJfY2xvc2VkKHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBlcG9sbCBmZCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZXBvbGwgb2JqZWN0Iik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTExMzcsNiArMTIxMiw3IEBACiAgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBIQVZFX0VQT0xMX0NSRUFURTEKKyAgICAgICAgZmxhZ3MgfD0gRVBPTExfQ0xPRVhFQzsKICAgICAgICAgaWYgKGZsYWdzKQogICAgICAgICAgICAgc2VsZi0+ZXBmZCA9IGVwb2xsX2NyZWF0ZTEoZmxhZ3MpOwogICAgICAgICBlbHNlCkBAIC0xMTUyLDYgKzEyMjgsMTQgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyNpZm5kZWYgSEFWRV9FUE9MTF9DUkVBVEUxCisgICAgaWYgKGZkID09IC0xICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoc2VsZi0+ZXBmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIApAQCAtMTI1MSwxNiArMTMzNSwxNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgY2FzZSBFUE9MTF9DVExfQUREOgotICAgICAgICBjYXNlIEVQT0xMX0NUTF9NT0Q6CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgRVBPTExfQ1RMX0FERDoKKyAgICBjYXNlIEVQT0xMX0NUTF9NT0Q6CiAgICAgICAgIGV2LmV2ZW50cyA9IGV2ZW50czsKICAgICAgICAgZXYuZGF0YS5mZCA9IGZkOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJlc3VsdCA9IGVwb2xsX2N0bChlcGZkLCBvcCwgZmQsICZldik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVQT0xMX0NUTF9ERUw6CisgICAgY2FzZSBFUE9MTF9DVExfREVMOgogICAgICAgICAvKiBJbiBrZXJuZWwgdmVyc2lvbnMgYmVmb3JlIDIuNi45LCB0aGUgRVBPTExfQ1RMX0RFTAogICAgICAgICAgKiBvcGVyYXRpb24gcmVxdWlyZWQgYSBub24tTlVMTCBwb2ludGVyIGluIGV2ZW50LCBldmVuCiAgICAgICAgICAqIHRob3VnaCB0aGlzIGFyZ3VtZW50IGlzIGlnbm9yZWQuICovCkBAIC0xMjczLDcgKzEzNTcsNyBAQAogICAgICAgICB9CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAgIHJlc3VsdCA9IC0xOwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICB9CkBAIC0xMzc4LDcgKzE0NjIsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHRpbWVvdXQgPSAoaW50KShkdGltZW91dCAqIDEwMDAuMCk7CisgICAgICAgIC8qIGVwb2xsX3dhaXQoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsIHJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgIHRvIHdhaXQgKmF0IGxlYXN0KiBkdGltZW91dCBzZWNvbmRzLiAqLworICAgICAgICB0aW1lb3V0ID0gKGludCljZWlsKGR0aW1lb3V0ICogMTAwMC4wKTsKICAgICB9CiAKICAgICBpZiAobWF4ZXZlbnRzID09IC0xKSB7CkBAIC0xMzkzLDcgKzE0NzksNiBAQAogCiAgICAgZXZzID0gUHlNZW1fTmV3KHN0cnVjdCBlcG9sbF9ldmVudCwgbWF4ZXZlbnRzKTsKICAgICBpZiAoZXZzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNDMyLDYgKzE1MTcsMjQgQEAKIGluIHNlY29uZHMgKGFzIGZsb2F0KS4gLTEgbWFrZXMgcG9sbCB3YWl0IGluZGVmaW5pdGVseS5cblwKIFVwIHRvIG1heGV2ZW50cyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXBvbGxfZW50ZXIocHlFcG9sbF9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChzZWxmLT5lcGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIHB5ZXBvbGxfZXJyX2Nsb3NlZCgpOworCisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcHllcG9sbF9leGl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiBweWVwb2xsX21ldGhvZHNbXSA9IHsKICAgICB7ImZyb21mZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2Zyb21mZCwKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9DTEFTUywgcHllcG9sbF9mcm9tZmRfZG9jfSwKQEAgLTE0NDcsNiArMTU1MCwxMCBAQAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgIHB5ZXBvbGxfdW5yZWdpc3Rlcl9kb2N9LAogICAgIHsicG9sbCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfcG9sbCwKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgICAgICBweWVwb2xsX3BvbGxfZG9jfSwKKyAgICB7Il9fZW50ZXJfXyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9lbnRlciwgICAgIE1FVEhfTk9BUkdTLAorICAgICBOVUxMfSwKKyAgICB7Il9fZXhpdF9fIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2V4aXQsICAgICBNRVRIX1ZBUkFSR1MsCisgICAgIE5VTEx9LAogICAgIHtOVUxMLCAgICAgIE5VTEx9LAogfTsKIApAQCAtMTYwNCwxNyArMTcxMSwxNyBAQAogICoga2V2ZW50IGlzIG5vdCBzdGFuZGFyZCBhbmQgaXRzIG1lbWJlcnMgdmFyeSBhY3Jvc3MgQlNEcy4KICAqLwogI2lmICFkZWZpbmVkKF9fT3BlbkJTRF9fKQotIyAgIGRlZmluZSBJREVOVF9UWVBFCVRfVUlOVFBUUlQKLSMgICBkZWZpbmUgSURFTlRfQ0FTVAlQeV9pbnRwdHJfdAotIyAgIGRlZmluZSBEQVRBX1RZUEUJVF9JTlRQVFJUCisjICAgZGVmaW5lIElERU5UX1RZUEUgIFRfVUlOVFBUUlQKKyMgICBkZWZpbmUgSURFTlRfQ0FTVCAgUHlfaW50cHRyX3QKKyMgICBkZWZpbmUgREFUQV9UWVBFICAgVF9JTlRQVFJUCiAjICAgZGVmaW5lIERBVEFfRk1UX1VOSVQgSU5UUFRSVF9GTVRfVU5JVAotIyAgIGRlZmluZSBJREVOVF9Bc1R5cGUJUHlMb25nX0FzVWludHB0cl90CisjICAgZGVmaW5lIElERU5UX0FzVHlwZSBQeUxvbmdfQXNVaW50cHRyX3QKICNlbHNlCi0jICAgZGVmaW5lIElERU5UX1RZUEUJVF9VSU5UCi0jICAgZGVmaW5lIElERU5UX0NBU1QJaW50Ci0jICAgZGVmaW5lIERBVEFfVFlQRQlUX0lOVAorIyAgIGRlZmluZSBJREVOVF9UWVBFICBUX1VJTlQKKyMgICBkZWZpbmUgSURFTlRfQ0FTVCAgaW50CisjICAgZGVmaW5lIERBVEFfVFlQRSAgIFRfSU5UCiAjICAgZGVmaW5lIERBVEFfRk1UX1VOSVQgImkiCi0jICAgZGVmaW5lIElERU5UX0FzVHlwZQlQeUxvbmdfQXNVbnNpZ25lZExvbmcKKyMgICBkZWZpbmUgSURFTlRfQXNUeXBlIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwogI2VuZGlmCiAKIC8qIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IHN0b3JlIHB5dGhvbiBvYmplY3RzIGluIHVkYXRhLCBiZWNhdXNlCkBAIC0xNjY2LDcgKzE3NzMsNyBAQAogCiAgICAgaWYgKFB5TG9uZ19DaGVjayhwZmQpCiAjaWYgSURFTlRfVFlQRSA9PSBUX1VJTlQKLQkmJiBQeUxvbmdfQXNVbnNpZ25lZExvbmcocGZkKSA8PSBVSU5UX01BWAorICAgICAgICAmJiBQeUxvbmdfQXNVbnNpZ25lZExvbmcocGZkKSA8PSBVSU5UX01BWAogI2VuZGlmCiAgICAgKSB7CiAgICAgICAgIHNlbGYtPmUuaWRlbnQgPSBJREVOVF9Bc1R5cGUocGZkKTsKQEAgLTE3MDgsMjIgKzE4MTUsMjIgQEAKICAgICB9CiAKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6CisgICAgY2FzZSBQeV9FUToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA9PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTkU6CisgICAgY2FzZSBQeV9ORToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCAhPSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTEU6CisgICAgY2FzZSBQeV9MRToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfR0U6CisgICAgY2FzZSBQeV9HRToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA+PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTFQ6CisgICAgY2FzZSBQeV9MVDoKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8IDApOwogICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9HVDoKKyAgICBjYXNlIFB5X0dUOgogICAgICAgICByZXN1bHQgPSAocmVzdWx0ID4gMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE3NzUsNyArMTg4Miw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgoga3F1ZXVlX3F1ZXVlX2Vycl9jbG9zZWQodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGtxdWV1ZSBmZCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQga3F1ZXVlIG9iamVjdCIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xODE3LDEzICsxOTI0LDE5IEBACiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmtxZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBrcXVldWVfcXVldWVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotCiAgICAgaWYgKChhcmdzICE9IE5VTEwgJiYgUHlPYmplY3RfU2l6ZShhcmdzKSkgfHwKICAgICAgICAgICAgICAgICAgICAgKGt3ZHMgIT0gTlVMTCAmJiBQeU9iamVjdF9TaXplKGt3ZHMpKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTE5MjksOCArMjA0Miw4IEBACiAgICAgICAgIHB0aW1lb3V0c3BlYyA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TnVtYmVyX0NoZWNrKG90aW1lb3V0KSkgewotICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKG90aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aW1lb3V0LnR2X3NlYywgJnRpbWVvdXQudHZfbnNlYykgPT0gLTEpCisgICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob3RpbWVvdXQsICZ0aW1lb3V0LnR2X3NlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGltZW91dC50dl9uc2VjLCBfUHlUaW1lX1JPVU5EX1VQKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIGlmICh0aW1lb3V0LnR2X3NlYyA8IDApIHsKQEAgLTIxNDMsNyArMjI1Niw3IEBACiB0aGF0IGFyZSByZWFkeS5cblwKIFxuXAogKioqIElNUE9SVEFOVCBOT1RJQ0UgKioqXG5cCi1PbiBXaW5kb3dzIGFuZCBPcGVuVk1TLCBvbmx5IHNvY2tldHMgYXJlIHN1cHBvcnRlZDsgb24gVW5peCwgYWxsIGZpbGVcblwKK09uIFdpbmRvd3Mgb25seSBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQ7IG9uIFVuaXgsIGFsbCBmaWxlXG5cCiBkZXNjcmlwdG9ycyBjYW4gYmUgdXNlZC4iKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIHNlbGVjdF9tZXRob2RzW10gPSB7CkBAIC0yMTYxLDcgKzIyNzQsNyBAQAogIlRoaXMgbW9kdWxlIHN1cHBvcnRzIGFzeW5jaHJvbm91cyBJL08gb24gbXVsdGlwbGUgZmlsZSBkZXNjcmlwdG9ycy5cblwKIFxuXAogKioqIElNUE9SVEFOVCBOT1RJQ0UgKioqXG5cCi1PbiBXaW5kb3dzIGFuZCBPcGVuVk1TLCBvbmx5IHNvY2tldHMgYXJlIHN1cHBvcnRlZDsgb24gVW5peCwgYWxsIGZpbGUgZGVzY3JpcHRvcnMuIik7CitPbiBXaW5kb3dzIG9ubHkgc29ja2V0cyBhcmUgc3VwcG9ydGVkOyBvbiBVbml4LCBhbGwgZmlsZSBkZXNjcmlwdG9ycy4iKTsKIAogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIHNlbGVjdG1vZHVsZSA9IHsKQEAgLTIxOTUsNyArMjMwOCw3IEBACiAjdW5kZWYgUElQRV9CVUYKICNkZWZpbmUgUElQRV9CVUYgNTEyCiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElQRV9CVUYiLCBQSVBFX0JVRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElQRV9CVUYpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfUE9MTCkgJiYgIWRlZmluZWQoSEFWRV9CUk9LRU5fUE9MTCkKQEAgLTIyMTAsMjcgKzIzMjMsMjcgQEAKICNlbmRpZgogICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KCZwb2xsX1R5cGUpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTElOIiwgUE9MTElOKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExQUkkiLCBQT0xMUFJJKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExPVVQiLCBQT0xMT1VUKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExFUlIiLCBQT0xMRVJSKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExIVVAiLCBQT0xMSFVQKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExOVkFMIiwgUE9MTE5WQUwpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMSU4pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMUFJJKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE9VVCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExFUlIpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMSFVQKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE5WQUwpOwogCiAjaWZkZWYgUE9MTFJETk9STQotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFJETk9STSIsIFBPTExSRE5PUk0pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMUkROT1JNKTsKICNlbmRpZgogI2lmZGVmIFBPTExSREJBTkQKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExSREJBTkQiLCBQT0xMUkRCQU5EKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFJEQkFORCk7CiAjZW5kaWYKICNpZmRlZiBQT0xMV1JOT1JNCi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMV1JOT1JNIiwgUE9MTFdSTk9STSk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExXUk5PUk0pOwogI2VuZGlmCiAjaWZkZWYgUE9MTFdSQkFORAotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFdSQkFORCIsIFBPTExXUkJBTkQpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMV1JCQU5EKTsKICNlbmRpZgogI2lmZGVmIFBPTExNU0cKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExNU0ciLCBQT0xMTVNHKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE1TRyk7CiAjZW5kaWYKICAgICB9CiAjZW5kaWYgLyogSEFWRV9QT0xMICovCkBAIC0yMjQ4LDI1ICsyMzYxLDI1IEBACiAgICAgUHlfSU5DUkVGKCZweUVwb2xsX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXBvbGwiLCAoUHlPYmplY3QgKikgJnB5RXBvbGxfVHlwZSk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExJTiIsIEVQT0xMSU4pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTE9VVCIsIEVQT0xMT1VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExQUkkiLCBFUE9MTFBSSSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMRVJSIiwgRVBPTExFUlIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTEhVUCIsIEVQT0xMSFVQKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExFVCIsIEVQT0xMRVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMSU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFBSSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExFUlIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMSFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTEVUKTsKICNpZmRlZiBFUE9MTE9ORVNIT1QKICAgICAvKiBLZXJuZWwgMi42LjIrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMT05FU0hPVCIsIEVQT0xMT05FU0hPVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExPTkVTSE9UKTsKICNlbmRpZgogICAgIC8qIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTF9SREhVUCIsIEVQT0xMUkRIVVApOyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFJETk9STSIsIEVQT0xMUkROT1JNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExSREJBTkQiLCBFUE9MTFJEQkFORCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMV1JOT1JNIiwgRVBPTExXUk5PUk0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFdSQkFORCIsIEVQT0xMV1JCQU5EKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExNU0ciLCBFUE9MTE1TRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExSRE5PUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMUkRCQU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFdSTk9STSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExXUkJBTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMTVNHKTsKIAogI2lmZGVmIEVQT0xMX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExfQ0xPRVhFQyIsIEVQT0xMX0NMT0VYRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMX0NMT0VYRUMpOwogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9FUE9MTCAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTFtb2R1bGUuYyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCmluZGV4IGQwZjMxOGQuLmI0NGZlMTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhMW1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCkBAIC05MiwxMCArOTIsNiBAQAogICAgICAoeSlbNF0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVs1XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICAgIFwKICAgICAgKHkpWzZdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVs3XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQogCi0jaWZuZGVmIE1JTgotICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCi0jZW5kaWYKLQogCiAvKiBTSEExIG1hY3JvcyAqLwogCkBAIC0yMjAsOSArMjE2LDkgQEAKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gU0hBMV9CTE9DS1NJWkU7CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IFNIQTFfQkxPQ0tTSVpFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuID0gTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoU0hBMV9CTE9DS1NJWkUgLSBzaGExLT5jdXJsZW4pKTsKKyAgICAgICAgICAgbiA9IFB5X01JTihpbmxlbiwgKFB5X3NzaXplX3QpKFNIQTFfQkxPQ0tTSVpFIC0gc2hhMS0+Y3VybGVuKSk7CiAgICAgICAgICAgIG1lbWNweShzaGExLT5idWYgKyBzaGExLT5jdXJsZW4sIGluLCAoc2l6ZV90KW4pOwotICAgICAgICAgICBzaGExLT5jdXJsZW4gICArPSBuOworICAgICAgICAgICBzaGExLT5jdXJsZW4gICArPSAoU0hBMV9JTlQzMiluOwogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBuOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBuOwogICAgICAgICAgICBpZiAoc2hhMS0+Y3VybGVuID09IFNIQTFfQkxPQ0tTSVpFKSB7CkBAIC00MTUsNyArNDExLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBTSEExX2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTEiLCA0KTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGExIiwgNCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NDgsOCArNTQ0LDE3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zaGExKHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEExdHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMXR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTFtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTFtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEExdHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEExVHlwZSIsIChQeU9iamVjdCAqKSZTSEExdHlwZSk7CisgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jIGIvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYwppbmRleCA5ZjZiNDE2Li5iMDViZmMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKQEAgLTIxLDEzICsyMSw2IEBACiAjaW5jbHVkZSAiaGFzaGxpYi5oIgogCiAKLS8qIEVuZGlhbm5lc3MgdGVzdGluZyBhbmQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgVGVzdEVuZGlhbm5lc3ModmFyaWFibGUpIHtpbnQgaT0xOyB2YXJpYWJsZT1QQ1RfQklHX0VORElBTjtcCi0gICAgICAgIGlmICgqKChjaGFyKikmaSk9PTEpIHZhcmlhYmxlPVBDVF9MSVRUTEVfRU5ESUFOO30KLQotI2RlZmluZSBQQ1RfTElUVExFX0VORElBTiAxCi0jZGVmaW5lIFBDVF9CSUdfRU5ESUFOIDAKLQogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNIQV9CWVRFOwpAQCAtNTAsNyArNDMsNiBAQAogICAgIFNIQV9JTlQzMiBkaWdlc3RbOF07ICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZGlnZXN0ICovCiAgICAgU0hBX0lOVDMyIGNvdW50X2xvLCBjb3VudF9oaTsgICAgICAgLyogNjQtYml0IGJpdCBjb3VudCAqLwogICAgIFNIQV9CWVRFIGRhdGFbU0hBX0JMT0NLU0laRV07ICAgICAgIC8qIFNIQSBkYXRhIGJ1ZmZlciAqLwotICAgIGludCBFbmRpYW5uZXNzOwogICAgIGludCBsb2NhbDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVucHJvY2Vzc2VkIGFtb3VudCBpbiBkYXRhICovCiAgICAgaW50IGRpZ2VzdHNpemU7CiB9IFNIQW9iamVjdDsKQEAgLTU4LDEzICs1MCwxMSBAQAogLyogV2hlbiBydW4gb24gYSBsaXR0bGUtZW5kaWFuIENQVSB3ZSBuZWVkIHRvIHBlcmZvcm0gYnl0ZSByZXZlcnNhbCBvbiBhbgogICAgYXJyYXkgb2YgbG9uZ3dvcmRzLiAqLwogCi1zdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UMzIgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCwgaW50IEVuZGlhbm5lc3MpCisjaWYgUFlfTElUVExFX0VORElBTgorc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDMyICpidWZmZXIsIGludCBieXRlQ291bnQpCiB7CiAgICAgU0hBX0lOVDMyIHZhbHVlOwogCi0gICAgaWYgKCBFbmRpYW5uZXNzID09IFBDVF9CSUdfRU5ESUFOICkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYnl0ZUNvdW50IC89IHNpemVvZigqYnVmZmVyKTsKICAgICB3aGlsZSAoYnl0ZUNvdW50LS0pIHsKICAgICAgICAgdmFsdWUgPSAqYnVmZmVyOwpAQCAtNzMsMTAgKzYzLDEwIEBACiAgICAgICAgICpidWZmZXIrKyA9ICggdmFsdWUgPDwgMTYgKSB8ICggdmFsdWUgPj4gMTYgKTsKICAgICB9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgU0hBY29weShTSEFvYmplY3QgKnNyYywgU0hBb2JqZWN0ICpkZXN0KQogewotICAgIGRlc3QtPkVuZGlhbm5lc3MgPSBzcmMtPkVuZGlhbm5lc3M7CiAgICAgZGVzdC0+bG9jYWwgPSBzcmMtPmxvY2FsOwogICAgIGRlc3QtPmRpZ2VzdHNpemUgPSBzcmMtPmRpZ2VzdHNpemU7CiAgICAgZGVzdC0+Y291bnRfbG8gPSBzcmMtPmNvdW50X2xvOwpAQCAtMTMxLDcgKzEyMSw5IEBACiAgICAgICAgIFNIQV9JTlQzMiBTWzhdLCBXWzY0XSwgdDAsIHQxOwogCiAgICAgbWVtY3B5KFcsIHNoYV9pbmZvLT5kYXRhLCBzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKLSAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSksIHNoYV9pbmZvLT5FbmRpYW5uZXNzKTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKKyNlbmRpZgogCiAgICAgZm9yIChpID0gMTY7IGkgPCA2NDsgKytpKSB7CiAgICAgICAgICAgICAgICAgV1tpXSA9IEdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIEdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdOwpAQCAtMjI4LDcgKzIyMCw2IEBACiBzdGF0aWMgdm9pZAogc2hhX2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gMHg2QTA5RTY2N0w7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IDB4QkI2N0FFODVMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSAweDNDNkVGMzcyTDsKQEAgLTI0Niw3ICsyMzcsNiBAQAogc3RhdGljIHZvaWQKIHNoYTIyNF9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IDB4YzEwNTllZDhMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSAweDM2N2NkNTA3TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gMHgzMDcwZGQxN0w7CkBAIC0yODQsNyArMjc0LDcgQEAKICAgICAgICAgbWVtY3B5KCgoU0hBX0JZVEUgKikgc2hhX2luZm8tPmRhdGEpICsgc2hhX2luZm8tPmxvY2FsLCBidWZmZXIsIGkpOwogICAgICAgICBjb3VudCAtPSBpOwogICAgICAgICBidWZmZXIgKz0gaTsKLSAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IGk7CisgICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSAoaW50KWk7CiAgICAgICAgIGlmIChzaGFfaW5mby0+bG9jYWwgPT0gU0hBX0JMT0NLU0laRSkgewogICAgICAgICAgICAgc2hhX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgICAgIH0KQEAgLTI5OSw3ICsyODksNyBAQAogICAgICAgICBzaGFfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICB9CiAgICAgbWVtY3B5KHNoYV9pbmZvLT5kYXRhLCBidWZmZXIsIGNvdW50KTsKLSAgICBzaGFfaW5mby0+bG9jYWwgPSBjb3VudDsKKyAgICBzaGFfaW5mby0+bG9jYWwgPSAoaW50KWNvdW50OwogfQogCiAvKiBmaW5pc2ggY29tcHV0aW5nIHRoZSBTSEEgZGlnZXN0ICovCkBAIC01MTEsOSArNTAxLDkgQEAKIFNIQTI1Nl9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKICAgICBpZiAoKChTSEFvYmplY3QgKilzZWxmKS0+ZGlnZXN0c2l6ZSA9PSAzMikKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMjU2IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTI1NiIsIDYpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMjI0IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTIyNCIsIDYpOwogfQogCiBzdGF0aWMgUHlHZXRTZXREZWYgU0hBX2dldHNldGVyc1tdID0gewpAQCAtNzE2LDExICs3MDYsMjMgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3NoYTI1Nih2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmU0hBMjI0dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMjI0dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9UWVBFKCZTSEEyNTZ0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEyNTZ0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zaGEyNTZtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTI1Nm1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTIyNHR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMjI0VHlwZSIsIChQeU9iamVjdCAqKSZTSEEyMjR0eXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTI1NnR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMjU2VHlwZSIsIChQeU9iamVjdCAqKSZTSEEyNTZ0eXBlKTsKKyAgICByZXR1cm4gbTsKKwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYyBiL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKaW5kZXggNTUzNmZkNS4uNDdjNTdlNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCkBAIC0yMiwxMyArMjIsNiBAQAogCiAjaWZkZWYgUFlfTE9OR19MT05HIC8qIElmIG5vIFBZX0xPTkdfTE9ORywgZG9uJ3QgY29tcGlsZSBhbnl0aGluZyEgKi8KIAotLyogRW5kaWFubmVzcyB0ZXN0aW5nIGFuZCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBUZXN0RW5kaWFubmVzcyh2YXJpYWJsZSkge2ludCBpPTE7IHZhcmlhYmxlPVBDVF9CSUdfRU5ESUFOO1wKLSAgICAgICAgaWYgKCooKGNoYXIqKSZpKT09MSkgdmFyaWFibGU9UENUX0xJVFRMRV9FTkRJQU47fQotCi0jZGVmaW5lIFBDVF9MSVRUTEVfRU5ESUFOIDEKLSNkZWZpbmUgUENUX0JJR19FTkRJQU4gMAotCiAvKiBTb21lIHVzZWZ1bCB0eXBlcyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgU0hBX0JZVEU7CkBAIC01Miw3ICs0NSw2IEBACiAgICAgU0hBX0lOVDY0IGRpZ2VzdFs4XTsgICAgICAgICAgICAgICAgLyogTWVzc2FnZSBkaWdlc3QgKi8KICAgICBTSEFfSU5UMzIgY291bnRfbG8sIGNvdW50X2hpOyAgICAgICAvKiA2NC1iaXQgYml0IGNvdW50ICovCiAgICAgU0hBX0JZVEUgZGF0YVtTSEFfQkxPQ0tTSVpFXTsgICAgICAgLyogU0hBIGRhdGEgYnVmZmVyICovCi0gICAgaW50IEVuZGlhbm5lc3M7CiAgICAgaW50IGxvY2FsOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5wcm9jZXNzZWQgYW1vdW50IGluIGRhdGEgKi8KICAgICBpbnQgZGlnZXN0c2l6ZTsKIH0gU0hBb2JqZWN0OwpAQCAtNjAsMTMgKzUyLDExIEBACiAvKiBXaGVuIHJ1biBvbiBhIGxpdHRsZS1lbmRpYW4gQ1BVIHdlIG5lZWQgdG8gcGVyZm9ybSBieXRlIHJldmVyc2FsIG9uIGFuCiAgICBhcnJheSBvZiBsb25nd29yZHMuICovCiAKLXN0YXRpYyB2b2lkIGxvbmdSZXZlcnNlKFNIQV9JTlQ2NCAqYnVmZmVyLCBpbnQgYnl0ZUNvdW50LCBpbnQgRW5kaWFubmVzcykKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCitzdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UNjQgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCkKIHsKICAgICBTSEFfSU5UNjQgdmFsdWU7CiAKLSAgICBpZiAoIEVuZGlhbm5lc3MgPT0gUENUX0JJR19FTkRJQU4gKQotICAgICAgICByZXR1cm47Ci0KICAgICBieXRlQ291bnQgLz0gc2l6ZW9mKCpidWZmZXIpOwogICAgIHdoaWxlIChieXRlQ291bnQtLSkgewogICAgICAgICB2YWx1ZSA9ICpidWZmZXI7CkBAIC04MywxMCArNzMsMTAgQEAKICAgICAgICAgICAgICAgICBidWZmZXIrKzsKICAgICB9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgU0hBY29weShTSEFvYmplY3QgKnNyYywgU0hBb2JqZWN0ICpkZXN0KQogewotICAgIGRlc3QtPkVuZGlhbm5lc3MgPSBzcmMtPkVuZGlhbm5lc3M7CiAgICAgZGVzdC0+bG9jYWwgPSBzcmMtPmxvY2FsOwogICAgIGRlc3QtPmRpZ2VzdHNpemUgPSBzcmMtPmRpZ2VzdHNpemU7CiAgICAgZGVzdC0+Y291bnRfbG8gPSBzcmMtPmNvdW50X2xvOwpAQCAtMTQxLDcgKzEzMSw5IEBACiAgICAgU0hBX0lOVDY0IFNbOF0sIFdbODBdLCB0MCwgdDE7CiAKICAgICBtZW1jcHkoVywgc2hhX2luZm8tPmRhdGEsIHNpemVvZihzaGFfaW5mby0+ZGF0YSkpOwotICAgIGxvbmdSZXZlcnNlKFcsIChpbnQpc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSwgc2hhX2luZm8tPkVuZGlhbm5lc3MpOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSkpOworI2VuZGlmCiAKICAgICBmb3IgKGkgPSAxNjsgaSA8IDgwOyArK2kpIHsKICAgICAgICAgICAgICAgICBXW2ldID0gR2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgR2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl07CkBAIC0yNTQsNyArMjQ2LDYgQEAKIHN0YXRpYyB2b2lkCiBzaGE1MTJfaW5pdChTSEFvYmplY3QgKnNoYV9pbmZvKQogewotICAgIFRlc3RFbmRpYW5uZXNzKHNoYV9pbmZvLT5FbmRpYW5uZXNzKQogICAgIHNoYV9pbmZvLT5kaWdlc3RbMF0gPSBQeV9VTEwoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzFdID0gUHlfVUxMKDB4YmI2N2FlODU4NGNhYTczYik7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsyXSA9IFB5X1VMTCgweDNjNmVmMzcyZmU5NGY4MmIpOwpAQCAtMjcyLDcgKzI2Myw2IEBACiBzdGF0aWMgdm9pZAogc2hhMzg0X2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gUHlfVUxMKDB4Y2JiYjlkNWRjMTA1OWVkOCk7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IFB5X1VMTCgweDYyOWEyOTJhMzY3Y2Q1MDcpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSBQeV9VTEwoMHg5MTU5MDE1YTMwNzBkZDE3KTsKQEAgLTMxMCw3ICszMDAsNyBAQAogICAgICAgICBtZW1jcHkoKChTSEFfQllURSAqKSBzaGFfaW5mby0+ZGF0YSkgKyBzaGFfaW5mby0+bG9jYWwsIGJ1ZmZlciwgaSk7CiAgICAgICAgIGNvdW50IC09IGk7CiAgICAgICAgIGJ1ZmZlciArPSBpOwotICAgICAgICBzaGFfaW5mby0+bG9jYWwgKz0gaTsKKyAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IChpbnQpaTsKICAgICAgICAgaWYgKHNoYV9pbmZvLT5sb2NhbCA9PSBTSEFfQkxPQ0tTSVpFKSB7CiAgICAgICAgICAgICBzaGE1MTJfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICAgICAgfQpAQCAtMzI1LDcgKzMxNSw3IEBACiAgICAgICAgIHNoYTUxMl90cmFuc2Zvcm0oc2hhX2luZm8pOwogICAgIH0KICAgICBtZW1jcHkoc2hhX2luZm8tPmRhdGEsIGJ1ZmZlciwgY291bnQpOwotICAgIHNoYV9pbmZvLT5sb2NhbCA9IGNvdW50OworICAgIHNoYV9pbmZvLT5sb2NhbCA9IChpbnQpY291bnQ7CiB9CiAKIC8qIGZpbmlzaCBjb21wdXRpbmcgdGhlIFNIQSBkaWdlc3QgKi8KQEAgLTU3Nyw5ICs1NjcsOSBAQAogU0hBNTEyX2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewogICAgIGlmICgoKFNIQW9iamVjdCAqKXNlbGYpLT5kaWdlc3RzaXplID09IDY0KQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEE1MTIiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhNTEyIiwgNik7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEEzODQiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhMzg0IiwgNik7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiBTSEFfZ2V0c2V0ZXJzW10gPSB7CkBAIC03ODIsMTMgKzc3MiwyNCBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fc2hhNTEyKHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEEzODR0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEzODR0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X1RZUEUoJlNIQTUxMnR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTUxMnR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTUxMm1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhNTEybW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBMzg0dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEEzODRUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTM4NHR5cGUpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBNTEydHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEE1MTJUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTUxMnR5cGUpOworICAgIHJldHVybiBtOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCmluZGV4IDcwNGM5ZjUuLmZlZGFkZGYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwpAQCAtOSw3ICs5LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwotI2luY2x1ZGUgPFdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaWZkZWYgSEFWRV9QUk9DRVNTX0gKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZW5kaWYKQEAgLTM3LDExICszNyw2IEBACiAjZGVmaW5lIFNJR19FUlIgKChQeU9TX3NpZ2hhbmRsZXJfdCkoLTEpKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTlNJRyAxMgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbmRpZgotCiAjaWZuZGVmIE5TSUcKICMgaWYgZGVmaW5lZChfTlNJRykKICMgIGRlZmluZSBOU0lHIF9OU0lHICAgICAgICAgICAgLyogRm9yIEJTRC9TeXNWICovCkBAIC03OCwxMCArNzMsNiBAQAogICAgYSB3b3JraW5nIGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3MgaW4gYWxsIHRocmVlIGNhc2VzIC0tIHRoZQogICAgaGFuZGxlciBpZ25vcmVzIHNpZ25hbHMgaWYgZ2V0cGlkKCkgaXNuJ3QgdGhlIHNhbWUgYXMgaW4gdGhlIG1haW4KICAgIHRocmVhZC4gIFhYWCBUaGlzIGlzIGEgaGFjay4KLQotICAgR05VIHB0aCBpcyBhIHVzZXItc3BhY2UgdGhyZWFkaW5nIGxpYnJhcnksIGFuZCBhcyBzdWNoLCBhbGwgdGhyZWFkcwotICAgcnVuIHdpdGhpbiB0aGUgc2FtZSBwcm9jZXNzLiBJbiB0aGlzIGNhc2UsIGlmIHRoZSBjdXJyZW50bHkgcnVubmluZwotICAgdGhyZWFkIGlzIG5vdCB0aGUgbWFpbl90aHJlYWQsIHNlbmQgdGhlIHNpZ25hbCB0byB0aGUgbWFpbl90aHJlYWQuCiAqLwogCiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTE4MCwxNSArMTcxLDMxIEBACiAgICAgcmV0dXJuIFB5RXJyX0NoZWNrU2lnbmFscygpOwogfQogCitzdGF0aWMgaW50CityZXBvcnRfd2FrZXVwX2Vycm9yKHZvaWQgKmRhdGEpCit7CisgICAgaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICBlcnJubyA9IChpbnQpIChQeV9pbnRwdHJfdCkgZGF0YTsKKyAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgUHlTeXNfV3JpdGVTdGRlcnIoIkV4Y2VwdGlvbiBpZ25vcmVkIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbCB3YWtldXAgZmQ6XG4iKTsKKyAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgZXJybm8gPSBzYXZlX2Vycm5vOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogdHJpcF9zaWduYWwoaW50IHNpZ19udW0pCiB7CiAgICAgdW5zaWduZWQgY2hhciBieXRlOworICAgIGludCByYyA9IDA7CiAKICAgICBIYW5kbGVyc1tzaWdfbnVtXS50cmlwcGVkID0gMTsKICAgICBpZiAod2FrZXVwX2ZkICE9IC0xKSB7CiAgICAgICAgIGJ5dGUgPSAodW5zaWduZWQgY2hhcilzaWdfbnVtOwotICAgICAgICB3cml0ZSh3YWtldXBfZmQsICZieXRlLCAxKTsKKyAgICAgICAgd2hpbGUgKChyYyA9IHdyaXRlKHdha2V1cF9mZCwgJmJ5dGUsIDEpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgIGlmIChyYyA9PSAtMSkKKyAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsKHJlcG9ydF93YWtldXBfZXJyb3IsICh2b2lkICopIChQeV9pbnRwdHJfdCkgZXJybm8pOwogICAgIH0KICAgICBpZiAoaXNfdHJpcHBlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAzLDEzICsyMTAsNiBAQAogewogICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CiAKLSNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFdJVEhfUFRIKQotICAgIGlmIChQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpIHsKLSAgICAgICAgcHRoX3JhaXNlKCoocHRoX3QgKikgbWFpbl90aHJlYWQsIHNpZ19udW0pOwotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAvKiBTZWUgTk9URVMgc2VjdGlvbiBhYm92ZSAqLwogICAgIGlmIChnZXRwaWQoKSA9PSBtYWluX3BpZCkKQEAgLTIzMSw3ICsyMzEsNiBAQAogICAgICAqIG1ha2VzIHRoaXMgdHJ1ZS4gIFNlZSBhbHNvIGlzc3VlODM1NC4gKi8KICAgICBQeU9TX3NldHNpZyhzaWdfbnVtLCBzaWduYWxfaGFuZGxlcik7CiAjZW5kaWYKLSAgICB9CiAKICAgICAvKiBJc3N1ZSAjMTAzMTE6IGFzeW5jaHJvbm91c2x5IGV4ZWN1dGluZyBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIG5vdAogICAgICAgIG11dGF0ZSBlcnJubyB1bmRlciB0aGUgZmVldCBvZiB1bnN1c3BlY3RpbmcgQyBjb2RlLiAqLwpAQCAtODAwLDcgKzc5OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYWxzLCAmdGltZW91dCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyh0aW1lb3V0LCAmdHZfc2VjLCAmdHZfbnNlYykgPT0gLTEpCisgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyh0aW1lb3V0LCAmdHZfc2VjLCAmdHZfbnNlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGJ1Zi50dl9zZWMgPSB0dl9zZWM7CiAgICAgYnVmLnR2X25zZWMgPSB0dl9uc2VjOwpAQCAtOTgzLDkgKzk4MywxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogI2lmIGRlZmluZWQoSEFWRV9TSUdXQUlUSU5GTykgfHwgZGVmaW5lZChIQVZFX1NJR1RJTUVEV0FJVCkKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTaWdpbmZvVHlwZSwgJnN0cnVjdF9zaWdpbmZvX2Rlc2MpOwotCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlNpZ2luZm9UeXBlLCAmc3RydWN0X3NpZ2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmU2lnaW5mb1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3NpZ2luZm8iLCAoUHlPYmplY3QqKSAmU2lnaW5mb1R5cGUpOwogICAgIGluaXRpYWxpemVkID0gMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCmluZGV4IDMyYjRlYmEuLmIzN2U3OTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwpAQCAtMTUsNyArMTUsNyBAQAogCiBNb2R1bGUgaW50ZXJmYWNlOgogCi0tIHNvY2tldC5lcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3Igc29ja2V0IHNwZWNpZmljIGVycm9ycworLSBzb2NrZXQuZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIHNvY2tldCBzcGVjaWZpYyBlcnJvcnMsIGFsaWFzIGZvciBPU0Vycm9yCiAtIHNvY2tldC5nYWllcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3IgZ2V0YWRkcmluZm8vZ2V0bmFtZWluZm8gZXJyb3JzLAogICAgIGEgc3ViY2xhc3Mgb2Ygc29ja2V0LmVycm9yCiAtIHNvY2tldC5oZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIGdldGhvc3RieSogZXJyb3JzLApAQCAtMzMsOCArMzMsOCBAQAogLSBzb2NrZXQubnRvaGwoMzIgYml0IHZhbHVlKSAtLT4gbmV3IGludCBvYmplY3QKIC0gc29ja2V0Lmh0b25zKDE2IGJpdCB2YWx1ZSkgLS0+IG5ldyBpbnQgb2JqZWN0CiAtIHNvY2tldC5odG9ubCgzMiBiaXQgdmFsdWUpIC0tPiBuZXcgaW50IG9iamVjdAotLSBzb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCBbLCBmYW1pbHksIHNvY2t0eXBlLCBwcm90bywgZmxhZ3NdKQotICAgIC0tPiBMaXN0IG9mIChmYW1pbHksIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzb2NrYWRkcikKKy0gc29ja2V0LmdldGFkZHJpbmZvKGhvc3QsIHBvcnQgWywgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3NdKQorICAgIC0tPiBMaXN0IG9mIChmYW1pbHksIHR5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyKQogLSBzb2NrZXQuZ2V0bmFtZWluZm8oc29ja2FkZHIsIGZsYWdzKSAtLT4gKGhvc3QsIHBvcnQpCiAtIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sIGV0Yy46IGNvbnN0YW50cyBmcm9tIDxzb2NrZXQuaD4KIC0gc29ja2V0Lmhhc19pcHY2OiBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgSVB2NiBpcyBzdXBwb3J0ZWQKQEAgLTk1LDE4ICs5NSwxNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotCiAvKiBTb2NrZXQgb2JqZWN0IGRvY3VtZW50YXRpb24gKi8KIFB5RG9jX1NUUlZBUihzb2NrX2RvYywKLSJzb2NrZXQoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkgLT4gc29ja2V0IG9iamVjdFxuXAorInNvY2tldChmYW1pbHk9QUZfSU5FVCwgdHlwZT1TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmlsZW5vPU5vbmUpIC0+IHNvY2tldCBvYmplY3RcblwKIFxuXAogT3BlbiBhIHNvY2tldCBvZiB0aGUgZ2l2ZW4gdHlwZS4gIFRoZSBmYW1pbHkgYXJndW1lbnQgc3BlY2lmaWVzIHRoZVxuXAogYWRkcmVzcyBmYW1pbHk7IGl0IGRlZmF1bHRzIHRvIEFGX0lORVQuICBUaGUgdHlwZSBhcmd1bWVudCBzcGVjaWZpZXNcblwKIHdoZXRoZXIgdGhpcyBpcyBhIHN0cmVhbSAoU09DS19TVFJFQU0sIHRoaXMgaXMgdGhlIGRlZmF1bHQpXG5cCiBvciBkYXRhZ3JhbSAoU09DS19ER1JBTSkgc29ja2V0LiAgVGhlIHByb3RvY29sIGFyZ3VtZW50IGRlZmF1bHRzIHRvIDAsXG5cCiBzcGVjaWZ5aW5nIHRoZSBkZWZhdWx0IHByb3RvY29sLiAgS2V5d29yZCBhcmd1bWVudHMgYXJlIGFjY2VwdGVkLlxuXAorVGhlIHNvY2tldCBpcyBjcmVhdGVkIGFzIG5vbi1pbmhlcml0YWJsZS5cblwKIFxuXAogQSBzb2NrZXQgb2JqZWN0IHJlcHJlc2VudHMgb25lIGVuZHBvaW50IG9mIGEgbmV0d29yayBjb25uZWN0aW9uLlxuXAogXG5cCkBAIC0xMTcsNyArMTE1LDcgQEAKIGNsb3NlKCkgLS0gY2xvc2UgdGhlIHNvY2tldFxuXAogY29ubmVjdChhZGRyKSAtLSBjb25uZWN0IHRoZSBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzc1xuXAogY29ubmVjdF9leChhZGRyKSAtLSBjb25uZWN0LCByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIGFuIGV4Y2VwdGlvblxuXAotX2R1cCgpIC0tIHJldHVybiBhIG5ldyBzb2NrZXQgZmQgZHVwbGljYXRlZCBmcm9tIGZpbGVubygpXG5cCitkdXAoKSAtLSByZXR1cm4gYSBuZXcgc29ja2V0IGZkIGR1cGxpY2F0ZWQgZnJvbSBmaWxlbm8oKVxuXAogZmlsZW5vKCkgLS0gcmV0dXJuIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yXG5cCiBnZXRwZWVybmFtZSgpIC0tIHJldHVybiByZW1vdGUgYWRkcmVzcyBbKl1cblwKIGdldHNvY2tuYW1lKCkgLS0gcmV0dXJuIGxvY2FsIGFkZHJlc3NcblwKQEAgLTE5MCw3ICsxODgsNyBAQAogI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIChkZWZpbmVkKF9fQVBQTEVfXykgfHwgXAogICAgIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiswIDwgNTAzMDAwKSB8fCBcCiAgICAgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBcCi0gICAgZGVmaW5lZChfX1ZNUykgfHwgIWRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykpCisgICAgIWRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykpCiAjZGVmaW5lIFVTRV9HRVRBRERSSU5GT19MT0NLCiAjZW5kaWYKIApAQCAtMjE0LDIyICsyMTIsMTEgQEAKICMgaW5jbHVkZSA8Y3R5cGUuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX1ZNUykKLSMgIGluY2x1ZGUgPGlvY3RsLmg+Ci0jZW5kaWYKLQogI2lmZGVmIF9fQVBQTEVfXwogIyBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNlbmRpZgogCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotIyBkZWZpbmUgIElOQ0xfRE9TCi0jIGRlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSMgZGVmaW5lICBJTkNMX05PUE1BUEkKLSMgaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19zZ2kpICYmIF9DT01QSUxFUl9WRVJTSU9OPjcwMCAmJiAhX1NHSUFQSQogLyogbWFrZSBzdXJlIHRoYXQgdGhlIHJlZW50cmFudCAoZ2V0aG9zdGJ5YWRkcl9yIGV0YykKICAgIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgY29ycmVjdGx5IGlmIGNvbXBpbGluZyB3aXRoCkBAIC0yODYsMTIgKzI3Myw3IEBACiAjIGluY2x1ZGUgPHVuaXN0ZC5oPgogCiAvKiBIZWFkZXJzIG5lZWRlZCBmb3IgaW5ldF9udG9hKCkgYW5kIGluZXRfYWRkcigpICovCi0jIGlmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19WQUNQUCkKLSMgIGluY2x1ZGUgPG5ldGRiLmg+Ci10eXBlZGVmIHNpemVfdCBzb2NrbGVuX3Q7Ci0jIGVsc2UKICMgICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSMgZW5kaWYKIAogIyAgaW5jbHVkZSA8ZmNudGwuaD4KIApAQCAtMzcxLDIyICszNTMsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCi0vKiBPbiBXaW5kb3dzIGEgc29ja2V0IGlzIHJlYWxseSBhIGhhbmRsZSBub3QgYW4gZmQgKi8KLXN0YXRpYyBTT0NLRVQKLWR1cF9zb2NrZXQoU09DS0VUIGhhbmRsZSkKLXsKLSAgICBXU0FQUk9UT0NPTF9JTkZPIGluZm87Ci0KLSAgICBpZiAoV1NBRHVwbGljYXRlU29ja2V0KGhhbmRsZSwgR2V0Q3VycmVudFByb2Nlc3NJZCgpLCAmaW5mbykpCi0gICAgICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsKLQotICAgIHJldHVybiBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLCBGUk9NX1BST1RPQ09MX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICBGUk9NX1BST1RPQ09MX0lORk8sICZpbmZvLCAwLCBXU0FfRkxBR19PVkVSTEFQUEVEKTsKLX0KICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2Vzb2NrZXQKLSNlbHNlCi0vKiBPbiBVbml4IHdlIGNhbiB1c2UgZHVwIHRvIGR1cGxpY2F0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgc29ja2V0Ki8KLSNkZWZpbmUgZHVwX3NvY2tldChmZCkgZHVwKGZkKQogI2VuZGlmCiAKICNpZmRlZiBNU19XSU4zMgpAQCAtMzk1LDExICszNjIsNiBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIFNPQ0tFVENMT1NFIHNvY2xvc2UKLSNkZWZpbmUgTk9fRFVQIC8qIFNvY2tldHMgYXJlIE5vdCBBY3R1YWwgRmlsZSBIYW5kbGVzIHVuZGVyIE9TLzIgKi8KLSNlbmRpZgotCiAjaWZuZGVmIFNPQ0tFVENMT1NFCiAjZGVmaW5lIFNPQ0tFVENMT1NFIGNsb3NlCiAjZW5kaWYKQEAgLTQzNywxMSArMzk5LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBfX1ZNUwotLyogVENQL0lQIFNlcnZpY2VzIGZvciBWTVMgdXNlcyBhIG1heGltdW0gc2VuZC9yZWN2IGJ1ZmZlciBsZW5ndGggKi8KLSNkZWZpbmUgU0VHTUVOVF9TSVpFICgzMiAqIDEwMjQgLTEpCi0jZW5kaWYKLQogLyogQ29udmVydCAic29ja19hZGRyX3QgKiIgdG8gInN0cnVjdCBzb2NrYWRkciAqIi4gKi8KICNkZWZpbmUgU0FTMlNBKHgpICAgICAgICgmKCh4KS0+c2EpKQogCkBAIC00NTksNiArNDE2LDEwIEBACiAjZGVmaW5lIElOVkFMSURfU09DS0VUICgtMSkKICNlbmRpZgogCisjaWZuZGVmIElOQUREUl9OT05FCisjZGVmaW5lIElOQUREUl9OT05FICgtMSkKKyNlbmRpZgorCiAvKiBYWFggVGhlcmUncyBhIHByb2JsZW0gaGVyZTogKnN0YXRpYyogZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9zZWQgdG8gaGF2ZQogICAgYSBQeSBwcmVmaXggKG9yIHVzZSBDYXBpdGFsaXplZFdvcmRzKS4gIExhdGVyLi4uICovCiAKQEAgLTUxOSw2ICs0ODAsMTEgQEAKICAgICAoZXJybm8gPT0gZXhwZWN0ZWQpCiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKKy8qIERvZXMgV1NBU29ja2V0KCkgc3VwcG9ydCB0aGUgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQgZmxhZz8gKi8KK3N0YXRpYyBpbnQgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IC0xOworI2VuZGlmCisKIC8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHJhaXNlIGFuIGVycm9yIGFjY29yZGluZyB0byBlcnJubwogICAgYW5kIHJldHVybiBhIE5VTEwgcG9pbnRlciBmcm9tIGEgZnVuY3Rpb24uICovCiAKQEAgLTUzNCw0MiArNTAwLDYgQEAKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5RXhjX09TRXJyb3IsIGVycl9ubyk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChzb2NrX2Vycm5vKCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQVBJUkVUIHJjOwotICAgICAgICBVTE9ORyAgbXNnbGVuOwotICAgICAgICBjaGFyIG91dGJ1ZlsxMDBdOwotICAgICAgICBpbnQgbXllcnJvcmNvZGUgPSBzb2NrX2Vycm5vKCk7Ci0KLSAgICAgICAgLyogUmV0cmlldmUgc29ja2V0LXJlbGF0ZWQgZXJyb3IgbWVzc2FnZSBmcm9tIE1QVE4uTVNHIGZpbGUgKi8KLSAgICAgICAgcmMgPSBEb3NHZXRNZXNzYWdlKE5VTEwsIDAsIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBteWVycm9yY29kZSAtIFNPQ0JBU0VFUlIgKyAyNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtcHRuLm1zZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNnbGVuKTsKLSAgICAgICAgaWYgKHJjID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdjsKLQotICAgICAgICAgICAgLyogT1MvMiBkb2Vzbid0IGd1YXJhbnRlZSBhIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgICAgIG91dGJ1Zlttc2dsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChzdHJsZW4ob3V0YnVmKSA+IDApIHsKLSAgICAgICAgICAgICAgICAvKiBJZiBub24tZW1wdHkgbXNnLCB0cmltIENSTEYgKi8KLSAgICAgICAgICAgICAgICBjaGFyICpsYXN0YyA9ICZvdXRidWZbIHN0cmxlbihvdXRidWYpLTEgXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobGFzdGMgPiBvdXRidWYgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqbGFzdGMpKSkgewotICAgICAgICAgICAgICAgICAgICAvKiBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgKENSTEYpICovCi0gICAgICAgICAgICAgICAgICAgICpsYXN0Yy0tID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiKGlzKSIsIG15ZXJyb3Jjb2RlLCBvdXRidWYpOwotICAgICAgICAgICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19PU0Vycm9yLCB2KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCiAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIH0KIApAQCAtNjE3LDM3ICs1NDcsMTQgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotI2lmZGVmIF9fVk1TCi0vKiBGdW5jdGlvbiB0byBzZW5kIGluIHNlZ21lbnRzICovCi1zdGF0aWMgaW50Ci1zZW5kc2VnbWVudGVkKGludCBzb2NrX2ZkLCBjaGFyICpidWYsIGludCBsZW4sIGludCBmbGFncykKLXsKLSAgICBpbnQgbiA9IDA7Ci0gICAgaW50IHJlbWFpbmluZyA9IGxlbjsKLQotICAgIHdoaWxlIChyZW1haW5pbmcgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzZWdtZW50OwotCi0gICAgICAgIHNlZ21lbnQgPSAocmVtYWluaW5nID49IFNFR01FTlRfU0laRSA/IFNFR01FTlRfU0laRSA6IHJlbWFpbmluZyk7Ci0gICAgICAgIG4gPSBzZW5kKHNvY2tfZmQsIGJ1Ziwgc2VnbWVudCwgZmxhZ3MpOwotICAgICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICB9Ci0gICAgICAgIHJlbWFpbmluZyAtPSBzZWdtZW50OwotICAgICAgICBidWYgKz0gc2VnbWVudDsKLSAgICB9IC8qIGVuZCB3aGlsZSAqLwotCi0gICAgcmV0dXJuIGxlbjsKLX0KLSNlbmRpZgotCiAvKiBGdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBzZXR0aW5nIG9mIHNvY2tldCBibG9ja2luZyBtb2RlCiAgICBpbnRlcm5hbGx5LiBibG9jayA9ICgxIHwgMCkuICovCiBzdGF0aWMgaW50CiBpbnRlcm5hbF9zZXRibG9ja2luZyhQeVNvY2tldFNvY2tPYmplY3QgKnMsIGludCBibG9jaykKIHsKLSNpZm5kZWYgTVNfV0lORE9XUwotICAgIGludCBkZWxheV9mbGFnOworI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpIFwKKyAgICAmJiAhKChkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmIGRlZmluZWQoRklPTkJJTykpKQorICAgIGludCBkZWxheV9mbGFnLCBuZXdfZGVsYXlfZmxhZzsKICNlbmRpZgogI2lmZGVmIFNPQ0tfTk9OQkxPQ0sKICAgICBpZiAoYmxvY2spCkBAIC02NTgsMjAgKzU2NSwxOCBAQAogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmbmRlZiBNU19XSU5ET1dTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgYmxvY2sgPSAhYmxvY2s7Ci0gICAgaW9jdGwocy0+c29ja19mZCwgRklPTkJJTywgKGNhZGRyX3QpJmJsb2NrLCBzaXplb2YoYmxvY2spKTsKLSNlbGlmIGRlZmluZWQoX19WTVMpCisjaWYgKGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9OQklPKSkKICAgICBibG9jayA9ICFibG9jazsKICAgICBpb2N0bChzLT5zb2NrX2ZkLCBGSU9OQklPLCAodW5zaWduZWQgaW50ICopJmJsb2NrKTsKLSNlbHNlICAvKiAhUFlPU19PUzIgJiYgIV9fVk1TICovCisjZWxzZQogICAgIGRlbGF5X2ZsYWcgPSBmY250bChzLT5zb2NrX2ZkLCBGX0dFVEZMLCAwKTsKICAgICBpZiAoYmxvY2spCi0gICAgICAgIGRlbGF5X2ZsYWcgJj0gKH5PX05PTkJMT0NLKTsKKyAgICAgICAgbmV3X2RlbGF5X2ZsYWcgPSBkZWxheV9mbGFnICYgKH5PX05PTkJMT0NLKTsKICAgICBlbHNlCi0gICAgICAgIGRlbGF5X2ZsYWcgfD0gT19OT05CTE9DSzsKLSAgICBmY250bChzLT5zb2NrX2ZkLCBGX1NFVEZMLCBkZWxheV9mbGFnKTsKLSNlbmRpZiAvKiAhUFlPU19PUzIgKi8KKyAgICAgICAgbmV3X2RlbGF5X2ZsYWcgPSBkZWxheV9mbGFnIHwgT19OT05CTE9DSzsKKyAgICBpZiAobmV3X2RlbGF5X2ZsYWcgIT0gZGVsYXlfZmxhZykKKyAgICAgICAgZmNudGwocy0+c29ja19mZCwgRl9TRVRGTCwgbmV3X2RlbGF5X2ZsYWcpOworI2VuZGlmCiAjZWxzZSAvKiBNU19XSU5ET1dTICovCiAgICAgYmxvY2sgPSAhYmxvY2s7CiAgICAgaW9jdGxzb2NrZXQocy0+c29ja19mZCwgRklPTkJJTywgKHVfbG9uZyopJmJsb2NrKTsKQEAgLTg1NSw4ICs3NjAsNiBAQAogewogICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczsKICAgICBpbnQgZXJyb3I7Ci0gICAgaW50IGQxLCBkMiwgZDMsIGQ0OwotICAgIGNoYXIgY2g7CiAKICAgICBtZW1zZXQoKHZvaWQgKikgYWRkcl9yZXQsICdcMCcsIHNpemVvZigqYWRkcl9yZXQpKTsKICAgICBpZiAobmFtZVswXSA9PSAnXDAnKSB7CkBAIC05MDUsNyArODA4LDEwIEBACiAgICAgICAgIGZyZWVhZGRyaW5mbyhyZXMpOwogICAgICAgICByZXR1cm4gc2l6OwogICAgIH0KLSAgICBpZiAobmFtZVswXSA9PSAnPCcgJiYgc3RyY21wKG5hbWUsICI8YnJvYWRjYXN0PiIpID09IDApIHsKKyAgICAvKiBzcGVjaWFsLWNhc2UgYnJvYWRjYXN0IC0gaW5ldF9hZGRyKCkgYmVsb3cgY2FuIHJldHVybiBJTkFERFJfTk9ORSBmb3IKKyAgICAgKiB0aGlzICovCisgICAgaWYgKHN0cmNtcChuYW1lLCAiMjU1LjI1NS4yNTUuMjU1IikgPT0gMCB8fAorICAgICAgICBzdHJjbXAobmFtZSwgIjxicm9hZGNhc3Q+IikgPT0gMCkgewogICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKICAgICAgICAgaWYgKGFmICE9IEFGX0lORVQgJiYgYWYgIT0gQUZfVU5TUEVDKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKQEAgLTkyMSwyMCArODI3LDUzIEBACiAgICAgICAgIHNpbi0+c2luX2FkZHIuc19hZGRyID0gSU5BRERSX0JST0FEQ0FTVDsKICAgICAgICAgcmV0dXJuIHNpemVvZihzaW4tPnNpbl9hZGRyKTsKICAgICB9Ci0gICAgaWYgKHNzY2FuZihuYW1lLCAiJWQuJWQuJWQuJWQlYyIsICZkMSwgJmQyLCAmZDMsICZkNCwgJmNoKSA9PSA0ICYmCi0gICAgICAgIDAgPD0gZDEgJiYgZDEgPD0gMjU1ICYmIDAgPD0gZDIgJiYgZDIgPD0gMjU1ICYmCi0gICAgICAgIDAgPD0gZDMgJiYgZDMgPD0gMjU1ICYmIDAgPD0gZDQgJiYgZDQgPD0gMjU1KSB7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotICAgICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7Ci0gICAgICAgIHNpbi0+c2luX2FkZHIuc19hZGRyID0gaHRvbmwoCi0gICAgICAgICAgICAoKGxvbmcpIGQxIDw8IDI0KSB8ICgobG9uZykgZDIgPDwgMTYpIHwKLSAgICAgICAgICAgICgobG9uZykgZDMgPDwgOCkgfCAoKGxvbmcpIGQ0IDw8IDApKTsKLSAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAgIC8qIGF2b2lkIGEgbmFtZSByZXNvbHV0aW9uIGluIGNhc2Ugb2YgbnVtZXJpYyBhZGRyZXNzICovCisjaWZkZWYgSEFWRV9JTkVUX1BUT04KKyAgICAvKiBjaGVjayBmb3IgYW4gSVB2NCBhZGRyZXNzICovCisgICAgaWYgKGFmID09IEFGX1VOU1BFQyB8fCBhZiA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJfcmV0OworICAgICAgICBtZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIG5hbWUsICZzaW4tPnNpbl9hZGRyKSA+IDApIHsKKyAgICAgICAgICAgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KLSAgICAgICAgc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOworICAgICAgICAgICAgc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOwogI2VuZGlmCi0gICAgICAgIHJldHVybiA0OworICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KICAgICB9CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAvKiBjaGVjayBmb3IgYW4gSVB2NiBhZGRyZXNzIC0gaWYgdGhlIGFkZHJlc3MgY29udGFpbnMgYSBzY29wZSBJRCwgd2UKKyAgICAgKiBmYWxsYmFjayB0byBnZXRhZGRyaW5mbygpLCB3aGljaCBjYW4gaGFuZGxlIHRyYW5zbGF0aW9uIGZyb20gaW50ZXJmYWNlCisgICAgICogbmFtZSB0byBpbnRlcmZhY2UgaW5kZXggKi8KKyAgICBpZiAoKGFmID09IEFGX1VOU1BFQyB8fCBhZiA9PSBBRl9JTkVUNikgJiYgIXN0cmNocihuYW1lLCAnJScpKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIG5hbWUsICZzaW4tPnNpbjZfYWRkcikgPiAwKSB7CisgICAgICAgICAgICBzaW4tPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgICAgICAgIHNpbi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBFTkFCTEVfSVBWNiAqLworI2Vsc2UgLyogSEFWRV9JTkVUX1BUT04gKi8KKyAgICAvKiBjaGVjayBmb3IgYW4gSVB2NCBhZGRyZXNzICovCisgICAgaWYgKGFmID09IEFGX0lORVQgfHwgYWYgPT0gQUZfVU5TUEVDKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJfcmV0OworICAgICAgICBtZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworICAgICAgICBpZiAoKHNpbi0+c2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKG5hbWUpKSAhPSBJTkFERFJfTk9ORSkgeworICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgICAgICAgc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBIQVZFX0lORVRfUFRPTiAqLworCisgICAgLyogcGVyZm9ybSBhIG5hbWUgcmVzb2x1dGlvbiAqLwogICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwogICAgIGhpbnRzLmFpX2ZhbWlseSA9IGFmOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTEyMjYsNyArMTE2NSw3IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0xJTlVYX0NBTl9ICisjaWZkZWYgQUZfQ0FOCiAgICAgY2FzZSBBRl9DQU46CiAgICAgewogICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfY2FuICphID0gKHN0cnVjdCBzb2NrYWRkcl9jYW4gKilhZGRyOwpAQCAtMTMyOSwxMSArMTI2OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYWRkci0+c3VuX2ZhbWlseSA9IHMtPnNvY2tfZmFtaWx5OwogICAgICAgICBtZW1jcHkoYWRkci0+c3VuX3BhdGgsIHBhdGgsIGxlbik7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAgICAgKmxlbl9yZXQgPSBzaXplb2YoKmFkZHIpOwotI2Vsc2UKICAgICAgICAgKmxlbl9yZXQgPSBsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKLSNlbmRpZgogICAgICAgICByZXR2YWwgPSAxOwogICAgIHVuaXhfb3V0OgogICAgICAgICBQeV9ERUNSRUYoYXJncyk7CkBAIC0xNjU0LDEwICsxNTg5LDEyIEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0xJTlVYX0NBTl9ICisjaWYgZGVmaW5lZChBRl9DQU4pICYmIGRlZmluZWQoQ0FOX1JBVykgJiYgZGVmaW5lZChDQU5fQkNNKQogICAgIGNhc2UgQUZfQ0FOOgogICAgICAgICBzd2l0Y2ggKHMtPnNvY2tfcHJvdG8pIHsKICAgICAgICAgY2FzZSBDQU5fUkFXOgorICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBDQU5fQkNNOgogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfY2FuICphZGRyOwogICAgICAgICAgICAgUHlPYmplY3QgKmludGVyZmFjZU5hbWU7CkBAIC0xODU5LDcgKzE3OTYsNyBAQAogICAgIH0KICNlbmRpZgogCi0jaWZkZWYgSEFWRV9MSU5VWF9DQU5fSAorI2lmZGVmIEFGX0NBTgogICAgIGNhc2UgQUZfQ0FOOgogICAgIHsKICAgICAgICAgKmxlbl9yZXQgPSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9jYW4pOwpAQCAtMTk0OCw4ICsxODg1LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNtc2doLT5jbXNnX2xlbikpOwogCiAgICAgLyogTm90ZSB0aGF0IFBPU0lYIGFsbG93cyBtc2dfY29udHJvbGxlbiB0byBiZSBvZiBzaWduZWQgdHlwZS4gKi8KLSAgICBpZiAoY21zZ2ggPT0gTlVMTCB8fCBtc2ctPm1zZ19jb250cm9sID09IE5VTEwgfHwgbXNnLT5tc2dfY29udHJvbGxlbiA8IDApCisgICAgaWYgKGNtc2doID09IE5VTEwgfHwgbXNnLT5tc2dfY29udHJvbCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKKyAgICAvKiBOb3RlIHRoYXQgUE9TSVggYWxsb3dzIG1zZ19jb250cm9sbGVuIHRvIGJlIG9mIGEgc2lnbmVkIHR5cGUuIFRoaXMgaXMKKyAgICAgICBhbm5veWluZyB1bmRlciBPUyBYIGFzIGl0J3MgdW5zaWduZWQgdGhlcmUgYW5kIHNvIGl0IHRyaWdnZXJzIGEKKyAgICAgICB0YXV0b2xvZ2ljYWwgY29tcGFyaXNvbiB3YXJuaW5nIHVuZGVyIENsYW5nIHdoZW4gY29tcGFyZWQgYWdhaW5zdCAwLgorICAgICAgIFNpbmNlIHRoZSBjaGVjayBpcyB2YWxpZCBvbiBvdGhlciBwbGF0Zm9ybXMsIHNpbGVuY2UgdGhlIHdhcm5pbmcgdW5kZXIKKyAgICAgICBDbGFuZy4gKi8KKyAgICAjaWZkZWYgX19jbGFuZ19fCisgICAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd0YXV0b2xvZ2ljYWwtY29tcGFyZSIKKyAgICAjZW5kaWYKKyAgICBpZiAobXNnLT5tc2dfY29udHJvbGxlbiA8IDApCisgICAgICAgIHJldHVybiAwOworICAgICNpZmRlZiBfX2NsYW5nX18KKyAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisgICAgI2VuZGlmCiAgICAgaWYgKHNwYWNlIDwgY21zZ19sZW5fZW5kKQogICAgICAgICBzcGFjZSA9IGNtc2dfbGVuX2VuZDsKICAgICBjbXNnX29mZnNldCA9IChjaGFyICopY21zZ2ggLSAoY2hhciAqKW1zZy0+bXNnX2NvbnRyb2w7CkBAIC0yMDE2LDYgKzE5NjcsMTEgQEAKICAgICBQeU9iamVjdCAqYWRkciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IHRpbWVvdXQ7CisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorICAgIC8qIGFjY2VwdDQoKSBpcyBhdmFpbGFibGUgb24gTGludXggMi42LjI4KyBhbmQgZ2xpYmMgMi4xMCAqLworICAgIHN0YXRpYyBpbnQgYWNjZXB0NF93b3JrcyA9IC0xOworI2VuZGlmCisKICAgICBpZiAoIWdldHNvY2thZGRybGVuKHMsICZhZGRybGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbWVtc2V0KCZhZGRyYnVmLCAwLCBhZGRybGVuKTsKQEAgLTIwMjQsMTAgKzE5ODAsMjQgQEAKICAgICAgICAgcmV0dXJuIHNlbGVjdF9lcnJvcigpOwogCiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKICAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgICAgIGlmIChhY2NlcHQ0X3dvcmtzICE9IDApIHsKKyAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0NChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0NLX0NMT0VYRUMpOworICAgICAgICAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUICYmIGFjY2VwdDRfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvKiBPbiBMaW51eCBvbGRlciB0aGFuIDIuNi4yOCwgYWNjZXB0NCgpIGZhaWxzIHdpdGggRU5PU1lTICovCisgICAgICAgICAgICAgICAgYWNjZXB0NF93b3JrcyA9IChlcnJubyAhPSBFTk9TWVMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhY2NlcHQ0X3dvcmtzID09IDApCisgICAgICAgICAgICBuZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CisjZWxzZQogICAgICAgICBuZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CisjZW5kaWYKICAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIApAQCAtMjA0MCw2ICsyMDEwLDI1IEBACiAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQogICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKW5ld2ZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOworICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgfQorI2Vsc2UKKworI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICBpZiAoIWFjY2VwdDRfd29ya3MpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG5ld2ZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIFNPQ0tFVENMT1NFKG5ld2ZkKTsKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgc29jayA9IFB5TG9uZ19Gcm9tU29ja2V0X3QobmV3ZmQpOwogICAgIGlmIChzb2NrID09IE5VTEwpIHsKICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOwpAQCAtMjIxOSwxMyArMjIwOCw3IEBACiAgICAgICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoZmxhZyk7CiAgICAgfQotI2lmZGVmIF9fVk1TCi0gICAgLyogc29ja2xlbl90IGlzIHVuc2lnbmVkIHNvIG5vIG5lZ2F0aXZlIHRlc3QgaXMgbmVlZGVkLAotICAgICAgIHRlc3QgYnVmbGVuID09IDAgaXMgcHJldmlvdXNseSBkb25lICovCi0gICAgaWYgKGJ1ZmxlbiA+IDEwMjQpIHsKLSNlbHNlCiAgICAgaWYgKGJ1ZmxlbiA8PSAwIHx8IGJ1ZmxlbiA+IDEwMjQpIHsKLSNlbmRpZgogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0IGJ1ZmxlbiBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzE0LDggKzIyOTcsOCBAQAogUHlEb2NfU1RSVkFSKGRldGFjaF9kb2MsCiAiZGV0YWNoKClcblwKIFxuXAotQ2xvc2UgdGhlIHNvY2tldCBvYmplY3Qgd2l0aG91dCBjbG9zaW5nIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci5cCi1UaGUgb2JqZWN0IGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbCwgYnV0IHRoZSBmaWxlIGRlc2NyaXB0b3JcCitDbG9zZSB0aGUgc29ja2V0IG9iamVjdCB3aXRob3V0IGNsb3NpbmcgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLlxuXAorVGhlIG9iamVjdCBjYW5ub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwsIGJ1dCB0aGUgZmlsZSBkZXNjcmlwdG9yXG5cCiBjYW4gYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4gIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmV0dXJuZWQuIik7CiAKIHN0YXRpYyBpbnQKQEAgLTI1OTUsMTAgKzI1NzgsNiBAQAogewogICAgIFB5X3NzaXplX3Qgb3V0bGVuID0gLTE7CiAgICAgaW50IHRpbWVvdXQ7Ci0jaWZkZWYgX19WTVMKLSAgICBpbnQgcmVtYWluaW5nOwotICAgIGNoYXIgKnJlYWRfYnVmOwotI2VuZGlmCiAKICAgICBpZiAoIUlTX1NFTEVDVEFCTEUocykpIHsKICAgICAgICAgc2VsZWN0X2Vycm9yKCk7CkBAIC0yNjA5LDEyICsyNTg4LDE4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotI2lmbmRlZiBfX1ZNUwogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKKyAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgb3V0bGVuID0gcmVjdihzLT5zb2NrX2ZkLCBjYnVmLCAoaW50KWxlbiwgZmxhZ3MpOworI2Vsc2UKICAgICAgICAgb3V0bGVuID0gcmVjdihzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzKTsKKyNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewpAQCAtMjYyOCw0OCArMjYxMyw2IEBACiAgICAgICAgIHMtPmVycm9yaGFuZGxlcigpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotI2Vsc2UKLSAgICByZWFkX2J1ZiA9IGNidWY7Ci0gICAgcmVtYWluaW5nID0gbGVuOwotICAgIHdoaWxlIChyZW1haW5pbmcgIT0gMCkgewotICAgICAgICB1bnNpZ25lZCBpbnQgc2VnbWVudDsKLSAgICAgICAgaW50IG5yZWFkID0gLTE7Ci0KLSAgICAgICAgc2VnbWVudCA9IHJlbWFpbmluZyAvU0VHTUVOVF9TSVpFOwotICAgICAgICBpZiAoc2VnbWVudCAhPSAwKSB7Ci0gICAgICAgICAgICBzZWdtZW50ID0gU0VHTUVOVF9TSVpFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2VnbWVudCA9IHJlbWFpbmluZzsKLSAgICAgICAgfQotCi0gICAgICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCi0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7Ci0gICAgICAgIGlmICghdGltZW91dCkKLSAgICAgICAgICAgIG5yZWFkID0gcmVjdihzLT5zb2NrX2ZkLCByZWFkX2J1Ziwgc2VnbWVudCwgZmxhZ3MpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAodGltZW91dCA9PSAxKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBFTkRfU0VMRUNUX0xPT1AocykKLQotICAgICAgICBpZiAobnJlYWQgPCAwKSB7Ci0gICAgICAgICAgICBzLT5lcnJvcmhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAobnJlYWQgIT0gcmVtYWluaW5nKSB7Ci0gICAgICAgICAgICByZWFkX2J1ZiArPSBucmVhZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVtYWluaW5nIC09IHNlZ21lbnQ7Ci0gICAgICAgIHJlYWRfYnVmICs9IHNlZ21lbnQ7Ci0gICAgfQotICAgIG91dGxlbiA9IHJlYWRfYnVmIC0gY2J1ZjsKLSNlbmRpZiAvKiAhX19WTVMgKi8KLQogICAgIHJldHVybiBvdXRsZW47CiB9CiAKQEAgLTI4MjAsMTQgKzI3NjMsMTEgQEAKICAgICBtZW1zZXQoJmFkZHJidWYsIDAsIGFkZHJsZW4pOwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkgewotI2lmbmRlZiBNU19XSU5ET1dTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pOwotI2Vsc2UKLSAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCAoaW50KWxlbiwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmYWRkcmJ1ZiwgJmFkZHJsZW4pOwotI2VuZGlmCiAjZWxzZQogICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKQEAgLTMzMDksMTIgKzMyNDksMTUgQEAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDEsIGludGVydmFsKTsKLSAgICBpZiAoIXRpbWVvdXQpCi0jaWZkZWYgX19WTVMKLSAgICAgICAgbiA9IHNlbmRzZWdtZW50ZWQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKKyAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MpOwogI2Vsc2UKICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CkBAIC0zMzYyLDggKzMzMDUsMTAgQEAKICAgICAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdChzLCAxKTsKICAgICAgICAgbiA9IC0xOwogICAgICAgICBpZiAoIXRpbWVvdXQpIHsKLSNpZmRlZiBfX1ZNUwotICAgICAgICAgICAgbiA9IHNlbmRzZWdtZW50ZWQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MpOwogI2Vsc2UKICAgICAgICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CiAjZW5kaWYKQEAgLTM0NTgsOCArMzQwMywxNyBAQAogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMSwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKLSAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MsIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOworICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgKGludClsZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOworI2Vsc2UKKyAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisjZW5kaWYKKyAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKQEAgLTM5MTQsOCArMzg2OCwxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tfcmVwcihQeVNvY2tldFNvY2tPYmplY3QgKnMpCiB7CisgICAgbG9uZyBzb2NrX2ZkOworICAgIC8qIE9uIFdpbmRvd3MsIHRoaXMgdGVzdCBpcyBuZWVkZWQgYmVjYXVzZSBTT0NLRVRfVCBpcyB1bnNpZ25lZCAqLworICAgIGlmIChzLT5zb2NrX2ZkID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgIHNvY2tfZmQgPSAtMTsKKyAgICB9CiAjaWYgU0laRU9GX1NPQ0tFVF9UID4gU0laRU9GX0xPTkcKLSAgICBpZiAocy0+c29ja19mZCA+IExPTkdfTUFYKSB7CisgICAgZWxzZSBpZiAocy0+c29ja19mZCA+IExPTkdfTUFYKSB7CiAgICAgICAgIC8qIHRoaXMgY2FuIG9jY3VyIG9uIFdpbjY0LCBhbmQgYWN0dWFsbHkgdGhlcmUgaXMgYSBzcGVjaWFsCiAgICAgICAgICAgIHVnbHkgcHJpbnRmIGZvcm1hdHRlciBmb3IgZGVjaW1hbCBwb2ludGVyIGxlbmd0aCBpbnRlZ2VyCiAgICAgICAgICAgIHByaW50aW5nLCBvbmx5IGJvdGhlciBpZiBuZWNlc3NhcnkqLwpAQCAtMzkyNSw5ICszODg0LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgc29ja19mZCA9IChsb25nKXMtPnNvY2tfZmQ7CiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KAogICAgICAgICAiPHNvY2tldCBvYmplY3QsIGZkPSVsZCwgZmFtaWx5PSVkLCB0eXBlPSVkLCBwcm90bz0lZD4iLAotICAgICAgICAobG9uZylzLT5zb2NrX2ZkLCBzLT5zb2NrX2ZhbWlseSwKKyAgICAgICAgc29ja19mZCwgcy0+c29ja19mYW1pbHksCiAgICAgICAgIHMtPnNvY2tfdHlwZSwKICAgICAgICAgcy0+c29ja19wcm90byk7CiB9CkBAIC0zOTUyLDYgKzM5MTMsMTIgQEAKIAogLyogSW5pdGlhbGl6ZSBhIG5ldyBzb2NrZXQgb2JqZWN0LiAqLwogCisjaWZkZWYgU09DS19DTE9FWEVDCisvKiBzb2NrZXQoKSBhbmQgc29ja2V0cGFpcigpIGZhaWwgd2l0aCBFSU5WQUwgb24gTGludXgga2VybmVsIG9sZGVyCisgKiB0aGFuIDIuNi4yNyBpZiBTT0NLX0NMT0VYRUMgZmxhZyBpcyBzZXQgaW4gdGhlIHNvY2tldCB0eXBlLiAqLworc3RhdGljIGludCBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAtMTsKKyNlbmRpZgorCiAvKkFSR1NVU0VEKi8KIHN0YXRpYyBpbnQKIHNvY2tfaW5pdG9iaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtMzk2MSw2ICszOTI4LDEzIEBACiAgICAgU09DS0VUX1QgZmQgPSBJTlZBTElEX1NPQ0tFVDsKICAgICBpbnQgZmFtaWx5ID0gQUZfSU5FVCwgdHlwZSA9IFNPQ0tfU1RSRUFNLCBwcm90byA9IDA7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImZhbWlseSIsICJ0eXBlIiwgInByb3RvIiwgImZpbGVubyIsIDB9OworI2lmbmRlZiBNU19XSU5ET1dTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZzb2NrX2Nsb2V4ZWNfd29ya3M7CisjZWxzZQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCisjZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInxpaWlPOnNvY2tldCIsIGtleXdvcmRzLApAQCAtNDAwNSwxNCArMzk3OSw3NCBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgLyogV2luZG93cyBpbXBsZW1lbnRhdGlvbiAqLworI2lmbmRlZiBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVAorI2RlZmluZSBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCAweDgwCisjZW5kaWYKKwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICBpZiAoc3VwcG9ydF93c2Ffbm9faW5oZXJpdCkgeworICAgICAgICAgICAgZmQgPSBXU0FTb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXU0FfRkxBR19PVkVSTEFQUEVEIHwgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQpOworICAgICAgICAgICAgaWYgKGZkID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgICAgICAgICAgLyogV2luZG93cyA3IG9yIFdpbmRvd3MgMjAwOCBSMiB3aXRob3V0IFNQMSBvciB0aGUgaG90Zml4ICovCisgICAgICAgICAgICAgICAgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IDA7CisgICAgICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgfQogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgewogICAgICAgICAgICAgc2V0X2Vycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIXN1cHBvcnRfd3NhX25vX2luaGVyaXQpIHsKKyAgICAgICAgICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSlmZCwgSEFORExFX0ZMQUdfSU5IRVJJVCwgMCkpIHsKKyAgICAgICAgICAgICAgICBjbG9zZXNvY2tldChmZCk7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICAvKiBVTklYICovCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICAgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyAhPSAwKSB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUgfCBTT0NLX0NMT0VYRUMsIHByb3RvKTsKKyAgICAgICAgICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmQgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogTGludXggb2xkZXIgdGhhbiAyLjYuMjcgZG9lcyBub3Qgc3VwcG9ydCBTT0NLX0NMT0VYRUMgKi8KKyAgICAgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgfQorICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICAgICAgc2V0X2Vycm9yKCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkgeworICAgICAgICAgICAgU09DS0VUQ0xPU0UoZmQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAgICAgaW5pdF9zb2Nrb2JqZWN0KHMsIGZkLCBmYW1pbHksIHR5cGUsIHByb3RvKTsKIApAQCAtNDU3OCwxNiArNDYxMiwzNiBAQAogewogICAgIFNPQ0tFVF9UIGZkLCBuZXdmZDsKICAgICBQeU9iamVjdCAqbmV3ZmRvYmo7Ci0KKyNpZmRlZiBNU19XSU5ET1dTCisgICAgV1NBUFJPVE9DT0xfSU5GTyBpbmZvOworI2VuZGlmCiAKICAgICBmZCA9IFB5TG9uZ19Bc1NvY2tldF90KGZkb2JqKTsKICAgICBpZiAoZmQgPT0gKFNPQ0tFVF9UKSgtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBuZXdmZCA9IGR1cF9zb2NrZXQoZmQpOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoV1NBRHVwbGljYXRlU29ja2V0KGZkLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCksICZpbmZvKSkKKyAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworCisgICAgbmV3ZmQgPSBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLCBGUk9NX1BST1RPQ09MX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgRlJPTV9QUk9UT0NPTF9JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICZpbmZvLCAwLCBXU0FfRkxBR19PVkVSTEFQUEVEKTsKICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCiAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKIAorICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSluZXdmZCwgSEFORExFX0ZMQUdfSU5IRVJJVCwgMCkpIHsKKyAgICAgICAgY2xvc2Vzb2NrZXQobmV3ZmQpOworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2Vsc2UKKyAgICAvKiBPbiBVTklYLCBkdXAgY2FuIGJlIHVzZWQgdG8gZHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBzb2NrZXQgKi8KKyAgICBuZXdmZCA9IF9QeV9kdXAoZmQpOworICAgIGlmIChuZXdmZCA9PSBJTlZBTElEX1NPQ0tFVCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKKwogICAgIG5ld2Zkb2JqID0gUHlMb25nX0Zyb21Tb2NrZXRfdChuZXdmZCk7CiAgICAgaWYgKG5ld2Zkb2JqID09IE5VTEwpCiAgICAgICAgIFNPQ0tFVENMT1NFKG5ld2ZkKTsKQEAgLTQ2MTUsNiArNDY2OSwxMiBAQAogICAgIFNPQ0tFVF9UIHN2WzJdOwogICAgIGludCBmYW1pbHksIHR5cGUgPSBTT0NLX1NUUkVBTSwgcHJvdG8gPSAwOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmc29ja19jbG9leGVjX3dvcmtzOworI2Vsc2UKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGludCByZXQ7CiAKICNpZiBkZWZpbmVkKEFGX1VOSVgpCiAgICAgZmFtaWx5ID0gQUZfVU5JWDsKQEAgLTQ2MjQsOSArNDY4NCwzOCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGlpaTpzb2NrZXRwYWlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhbWlseSwgJnR5cGUsICZwcm90bykpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgLyogQ3JlYXRlIGEgcGFpciBvZiBzb2NrZXQgZmRzICovCi0gICAgaWYgKHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpIDwgMCkKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyAhPSAwKSB7CisgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlIHwgU09DS19DTE9FWEVDLCBwcm90bywgc3YpOworICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICBpZiAocmV0ID49IDApIHsKKyAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUlOVkFMKSB7CisgICAgICAgICAgICAgICAgLyogTGludXggb2xkZXIgdGhhbiAyLjYuMjcgZG9lcyBub3Qgc3VwcG9ydCBTT0NLX0NMT0VYRUMgKi8KKyAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAwOworICAgICAgICAgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcmV0ID0gc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvLCBzdik7CisgICAgfQorICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmV0IDwgMCkKICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc3ZbMF0sIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApCisgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzdlsxXSwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgczAgPSBuZXdfc29ja29iamVjdChzdlswXSwgZmFtaWx5LCB0eXBlLCBwcm90byk7CiAgICAgaWYgKHMwID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmluYWxseTsKQEAgLTQ2NDgsNyArNDczNyw3IEBACiB9CiAKIFB5RG9jX1NUUlZBUihzb2NrZXRwYWlyX2RvYywKLSJzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KVxuXAorInNvY2tldHBhaXIoW2ZhbWlseVssIHR5cGUgWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KVxuXAogXG5cCiBDcmVhdGUgYSBwYWlyIG9mIHNvY2tldCBvYmplY3RzIGZyb20gdGhlIHNvY2tldHMgcmV0dXJuZWQgYnkgdGhlIHBsYXRmb3JtXG5cCiBzb2NrZXRwYWlyKCkgZnVuY3Rpb24uXG5cCkBAIC00NzgyLDkgKzQ4NzEsNiBAQAogc3RhdGljIFB5T2JqZWN0Kgogc29ja2V0X2luZXRfYXRvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0jaWZuZGVmIElOQUREUl9OT05FCi0jZGVmaW5lIElOQUREUl9OT05FICgtMSkKLSNlbmRpZgogI2lmZGVmIEhBVkVfSU5FVF9BVE9OCiAgICAgc3RydWN0IGluX2FkZHIgYnVmOwogI2VuZGlmCkBAIC00ODI2LDcgKzQ5MTIsNyBAQAogICAgIC8qIHNwZWNpYWwtY2FzZSB0aGlzIGFkZHJlc3MgYXMgaW5ldF9hZGRyIG1pZ2h0IHJldHVybiBJTkFERFJfTk9ORQogICAgICAqIGZvciB0aGlzICovCiAgICAgaWYgKHN0cmNtcChpcF9hZGRyLCAiMjU1LjI1NS4yNTUuMjU1IikgPT0gMCkgewotICAgICAgICBwYWNrZWRfYWRkciA9IDB4RkZGRkZGRkY7CisgICAgICAgIHBhY2tlZF9hZGRyID0gSU5BRERSX0JST0FEQ0FTVDsKICAgICB9IGVsc2UgewogCiAgICAgICAgIHBhY2tlZF9hZGRyID0gaW5ldF9hZGRyKGlwX2FkZHIpOwpAQCAtNDg3NCw3ICs0OTYwLDcgQEAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoaW5ldF9udG9hKHBhY2tlZF9hZGRyKSk7CiB9CiAKLSNpZmRlZiBIQVZFX0lORVRfUFRPTgorI2lmIGRlZmluZWQoSEFWRV9JTkVUX1BUT04pIHx8IGRlZmluZWQoTVNfV0lORE9XUykKIAogUHlEb2NfU1RSVkFSKGluZXRfcHRvbl9kb2MsCiAiaW5ldF9wdG9uKGFmLCBpcCkgLT4gcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nXG5cCkBAIC00ODgyLDYgKzQ5NjgsMTAgQEAKIENvbnZlcnQgYW4gSVAgYWRkcmVzcyBmcm9tIHN0cmluZyBmb3JtYXQgdG8gYSBwYWNrZWQgc3RyaW5nIHN1aXRhYmxlXG5cCiBmb3IgdXNlIHdpdGggbG93LWxldmVsIG5ldHdvcmsgZnVuY3Rpb25zLiIpOwogCisjZW5kaWYKKworI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisKIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrZXRfaW5ldF9wdG9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTQ4ODksNyArNDk3OSw3IEBACiAgICAgY2hhciogaXA7CiAgICAgaW50IHJldHZhbDsKICNpZmRlZiBFTkFCTEVfSVBWNgotICAgIGNoYXIgcGFja2VkW01BWChzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSldOworICAgIGNoYXIgcGFja2VkW1B5X01BWChzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSldOwogI2Vsc2UKICAgICBjaGFyIHBhY2tlZFtzaXplb2Yoc3RydWN0IGluX2FkZHIpXTsKICNlbmRpZgpAQCAtNDkyNiwxMiArNTAxNiw1MiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiB9CisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK3N0YXRpYyBQeU9iamVjdCAqCitzb2NrZXRfaW5ldF9wdG9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgYWY7CisgICAgY2hhciogaXA7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICAgIElOVCByZXQsIHNpemU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlzOmluZXRfcHRvbiIsICZhZiwgJmlwKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzaXplID0gc2l6ZW9mKGFkZHIpOworICAgIHJldCA9IFdTQVN0cmluZ1RvQWRkcmVzc0EoaXAsIGFmLCBOVUxMLCAoTFBTT0NLQUREUikmYWRkciwgJnNpemUpOworCisgICAgaWYgKHJldCkgeworICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19PU0Vycm9yLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSBpZihhZiA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luKikmYWRkcjsKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKikmKGFkZHI0LT5zaW5fYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyNC0+c2luX2FkZHIpKTsKKyAgICB9IGVsc2UgaWYgKGFmID09IEFGX0lORVQ2KSB7CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyICopJihhZGRyLnNpbjZfYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkci5zaW42X2FkZHIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwgInVua25vd24gYWRkcmVzcyBmYW1pbHkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9JTkVUX1BUT04pIHx8IGRlZmluZWQoTVNfV0lORE9XUykKIAogUHlEb2NfU1RSVkFSKGluZXRfbnRvcF9kb2MsCiAiaW5ldF9udG9wKGFmLCBwYWNrZWRfaXApIC0+IHN0cmluZyBmb3JtYXR0ZWQgSVAgYWRkcmVzc1xuXAogXG5cCiBDb252ZXJ0IGEgcGFja2VkIElQIGFkZHJlc3Mgb2YgdGhlIGdpdmVuIGZhbWlseSB0byBzdHJpbmcgZm9ybWF0LiIpOwogCisjZW5kaWYKKworCisjaWZkZWYgSEFWRV9JTkVUX1BUT04KIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrZXRfaW5ldF9udG9wKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTQ5NDAsNyArNTA3MCw3IEBACiAgICAgaW50IGxlbjsKICAgICBjb25zdCBjaGFyKiByZXR2YWw7CiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBjaGFyIGlwW01BWChJTkVUX0FERFJTVFJMRU4sIElORVQ2X0FERFJTVFJMRU4pICsgMV07CisgICAgY2hhciBpcFtQeV9NQVgoSU5FVF9BRERSU1RSTEVOLCBJTkVUNl9BRERSU1RSTEVOKSArIDFdOwogI2Vsc2UKICAgICBjaGFyIGlwW0lORVRfQUREUlNUUkxFTiArIDFdOwogI2VuZGlmCkBAIC00OTg1LDYgKzUxMTUsNzAgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorCitzdGF0aWMgUHlPYmplY3QgKgorc29ja2V0X2luZXRfbnRvcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGFmOworICAgIGNoYXIqIHBhY2tlZDsKKyAgICBpbnQgbGVuOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICBEV09SRCBhZGRybGVuLCByZXQsIHJldGxlbjsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGNoYXIgaXBbUHlfTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKKyNlbHNlCisgICAgY2hhciBpcFtJTkVUX0FERFJTVFJMRU4gKyAxXTsKKyNlbmRpZgorCisgICAgLyogR3VhcmFudGVlIE5VTC10ZXJtaW5hdGlvbiBmb3IgUHlVbmljb2RlX0Zyb21TdHJpbmcoKSBiZWxvdyAqLworICAgIG1lbXNldCgodm9pZCAqKSAmaXBbMF0sICdcMCcsIHNpemVvZihpcCkpOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpeSM6aW5ldF9udG9wIiwgJmFmLCAmcGFja2VkLCAmbGVuKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoYWYgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBhZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYWRkcjsKKworICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGxlbmd0aCBvZiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbXNldChhZGRyNCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgICAgICBhZGRyNC0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG1lbWNweSgmKGFkZHI0LT5zaW5fYWRkciksIHBhY2tlZCwgc2l6ZW9mKGFkZHI0LT5zaW5fYWRkcikpOworICAgICAgICBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgfSBlbHNlIGlmIChhZiA9PSBBRl9JTkVUNikgeworICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBsZW5ndGggb2YgcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBtZW1jcHkoJihhZGRyLnNpbjZfYWRkciksIHBhY2tlZCwgc2l6ZW9mKGFkZHIuc2luNl9hZGRyKSk7CisgICAgICAgIGFkZHJsZW4gPSBzaXplb2YoYWRkcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAidW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCIsIGFmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0bGVuID0gc2l6ZW9mKGlwKTsKKyAgICByZXQgPSBXU0FBZGRyZXNzVG9TdHJpbmdBKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCBhZGRybGVuLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAsICZyZXRsZW4pOworCisgICAgaWYgKHJldCkgeworICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19PU0Vycm9yLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhpcCk7CisgICAgfQorfQorCiAjZW5kaWYgLyogSEFWRV9JTkVUX1BUT04gKi8KIAogLyogUHl0aG9uIGludGVyZmFjZSB0byBnZXRhZGRyaW5mbyhob3N0LCBwb3J0KS4gKi8KQEAgLTUwMDYsNyArNTIwMCw3IEBACiAgICAgUHlPYmplY3QgKmFsbCA9IChQeU9iamVjdCAqKU5VTEw7CiAgICAgUHlPYmplY3QgKmlkbmEgPSBOVUxMOwogCi0gICAgZmFtaWx5ID0gc29ja3R5cGUgPSBwcm90b2NvbCA9IGZsYWdzID0gMDsKKyAgICBzb2NrdHlwZSA9IHByb3RvY29sID0gZmxhZ3MgPSAwOwogICAgIGZhbWlseSA9IEFGX1VOU1BFQzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPT3xpaWlpOmdldGFkZHJpbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga3duYW1lcywgJmhvYmosICZwb2JqLCAmZmFtaWx5LCAmc29ja3R5cGUsCkBAIC01MDUxLDkgKzUyNDUsOSBAQAogI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKEFJX05VTUVSSUNTRVJWKQogICAgIGlmICgoZmxhZ3MgJiBBSV9OVU1FUklDU0VSVikgJiYgKHBwdHIgPT0gTlVMTCB8fCAocHB0clswXSA9PSAnMCcgJiYgcHB0clsxXSA9PSAwKSkpIHsKICAgICAgICAgLyogT24gT1NYIHVwdG8gYXQgbGVhc3QgT1NYIDEwLjggZ2V0YWRkcmluZm8gY3Jhc2hlcwotCSAqIGlmIEFJX05VTUVSSUNTRVJWIGlzIHNldCBhbmQgdGhlIHNlcnZuYW1lIGlzIE5VTEwgb3IgIjAiLgotCSAqIFRoaXMgd29ya2Fyb3VuZCBhdm9pZHMgYSBzZWdmYXVsdCBpbiBsaWJzeXN0ZW0uCi0JICovCisgICAgICAgICAqIGlmIEFJX05VTUVSSUNTRVJWIGlzIHNldCBhbmQgdGhlIHNlcnZuYW1lIGlzIE5VTEwgb3IgIjAiLgorICAgICAgICAgKiBUaGlzIHdvcmthcm91bmQgYXZvaWRzIGEgc2VnZmF1bHQgaW4gbGlic3lzdGVtLgorICAgICAgICAgKi8KICAgICAgICAgcHB0ciA9ICIwMCI7CiAgICAgfQogI2VuZGlmCkBAIC01MTA1LDggKzUyOTksOCBAQAogfQogCiBQeURvY19TVFJWQVIoZ2V0YWRkcmluZm9fZG9jLAotImdldGFkZHJpbmZvKGhvc3QsIHBvcnQgWywgZmFtaWx5LCBzb2NrdHlwZSwgcHJvdG8sIGZsYWdzXSlcblwKLSAgICAtPiBsaXN0IG9mIChmYW1pbHksIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzb2NrYWRkcilcblwKKyJnZXRhZGRyaW5mbyhob3N0LCBwb3J0IFssIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzXSlcblwKKyAgICAtPiBsaXN0IG9mIChmYW1pbHksIHR5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyKVxuXAogXG5cCiBSZXNvbHZlIGhvc3QgYW5kIHBvcnQgaW50byBhZGRyaW5mbyBzdHJ1Y3QuIik7CiAKQEAgLTU0NTEsNyArNTY0NSw3IEBACiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9hdG9uX2RvY30sCiAgICAgeyJpbmV0X250b2EiLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X250b2EsCiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9udG9hX2RvY30sCi0jaWZkZWYgSEFWRV9JTkVUX1BUT04KKyNpZiBkZWZpbmVkKEhBVkVfSU5FVF9QVE9OKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgeyJpbmV0X3B0b24iLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X3B0b24sCiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9wdG9uX2RvY30sCiAgICAgeyJpbmV0X250b3AiLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X250b3AsCkBAIC01NTI2LDMyICs1NzIwLDYgQEAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIAotI2lmZGVmIFBZT1NfT1MyCi0jZGVmaW5lIE9TX0lOSVRfREVGSU5FRAotCi0vKiBBZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGZvciBPUy8yICovCi0KLXN0YXRpYyBpbnQKLW9zX2luaXQodm9pZCkKLXsKLSNpZm5kZWYgUFlDQ19HQ0MKLSAgICBpbnQgcmMgPSBzb2NrX2luaXQoKTsKLQotICAgIGlmIChyYyA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAxOyAvKiBTdWNjZXNzICovCi0gICAgfQotCi0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiT1MvMiBUQ1AvSVAgRXJyb3IjICVkIiwgc29ja19lcnJubygpKTsKLQotICAgIHJldHVybiAwOyAgLyogRmFpbHVyZSAqLwotI2Vsc2UKLSAgICAvKiBObyBuZWVkIHRvIGluaXRpYWxpemUgc29ja2V0cyB3aXRoIEdDQy9FTVggKi8KLSAgICByZXR1cm4gMTsgLyogU3VjY2VzcyAqLwotI2VuZGlmCi19Ci0KLSNlbmRpZiAvKiBQWU9TX09TMiAqLwotCiAKICNpZm5kZWYgT1NfSU5JVF9ERUZJTkVECiBzdGF0aWMgaW50CkBAIC01NjA4LDYgKzU3NzYsMTYgQEAKICAgICBpZiAoIW9zX2luaXQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPT0gLTEpIHsKKyAgICAgICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsKKyAgICAgICAgRFdPUkQgbWFqb3IgPSAoRFdPUkQpTE9CWVRFKExPV09SRCh2ZXJzaW9uKSk7CisgICAgICAgIERXT1JEIG1pbm9yID0gKERXT1JEKUhJQllURShMT1dPUkQodmVyc2lvbikpOworICAgICAgICAvKiBuZWVkIFdpbmRvd3MgNyBTUDEsIDIwMDggUjIgU1AxIG9yIGxhdGVyICovCisgICAgICAgIHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPSAobWFqb3IgPj0gNiAmJiBtaW5vciA+PSAxKTsKKyAgICB9CisjZW5kaWYKKwogICAgIFB5X1RZUEUoJnNvY2tfdHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc29ja2V0bW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQpAQCAtNTY2MSwxODQgKzU4MzksMTg3IEBACiAKICAgICAvKiBBZGRyZXNzIGZhbWlsaWVzICh3ZSBvbmx5IHN1cHBvcnQgQUZfSU5FVCBhbmQgQUZfVU5JWCkgKi8KICNpZmRlZiBBRl9VTlNQRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVU5TUEVDIiwgQUZfVU5TUEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9VTlNQRUMpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lORVQiLCBBRl9JTkVUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JTkVUKTsKICNpZmRlZiBBRl9JTkVUNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JTkVUNiIsIEFGX0lORVQ2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JTkVUNik7CiAjZW5kaWYgLyogQUZfSU5FVDYgKi8KICNpZiBkZWZpbmVkKEFGX1VOSVgpCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1VOSVgiLCBBRl9VTklYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9VTklYKTsKICNlbmRpZiAvKiBBRl9VTklYICovCiAjaWZkZWYgQUZfQVgyNQogICAgIC8qIEFtYXRldXIgUmFkaW8gQVguMjUgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVgyNSIsIEFGX0FYMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FYMjUpOwogI2VuZGlmCiAjaWZkZWYgQUZfSVBYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lQWCIsIEFGX0lQWCk7IC8qIE5vdmVsbCBJUFggKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JUFgpOyAvKiBOb3ZlbGwgSVBYICovCiAjZW5kaWYKICNpZmRlZiBBRl9BUFBMRVRBTEsKICAgICAvKiBBcHBsZXRhbGsgRERQICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FQUExFVEFMSyIsIEFGX0FQUExFVEFMSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVBQTEVUQUxLKTsKICNlbmRpZgogI2lmZGVmIEFGX05FVFJPTQogICAgIC8qIEFtYXRldXIgcmFkaW8gTmV0Uk9NICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVFJPTSIsIEFGX05FVFJPTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTkVUUk9NKTsKICNlbmRpZgogI2lmZGVmIEFGX0JSSURHRQogICAgIC8qIE11bHRpcHJvdG9jb2wgYnJpZGdlICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0JSSURHRSIsIEFGX0JSSURHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQlJJREdFKTsKICNlbmRpZgogI2lmZGVmIEFGX0FUTVBWQwogICAgIC8qIEFUTSBQVkNzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FUTVBWQyIsIEFGX0FUTVBWQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVRNUFZDKTsKICNlbmRpZgogI2lmZGVmIEFGX0FBTDUKICAgICAvKiBSZXNlcnZlZCBmb3IgV2VybmVyJ3MgQVRNICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FBTDUiLCBBRl9BQUw1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BQUw1KTsKICNlbmRpZgogI2lmZGVmIEFGX1gyNQogICAgIC8qIFJlc2VydmVkIGZvciBYLjI1IHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfWDI1IiwgQUZfWDI1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9YMjUpOwogI2VuZGlmCiAjaWZkZWYgQUZfSU5FVDYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSU5FVDYiLCBBRl9JTkVUNik7IC8qIElQIHZlcnNpb24gNiAqLworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQ2KTsgLyogSVAgdmVyc2lvbiA2ICovCiAjZW5kaWYKICNpZmRlZiBBRl9ST1NFCiAgICAgLyogQW1hdGV1ciBSYWRpbyBYLjI1IFBMUCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ST1NFIiwgQUZfUk9TRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUk9TRSk7CiAjZW5kaWYKICNpZmRlZiBBRl9ERUNuZXQKICAgICAvKiBSZXNlcnZlZCBmb3IgREVDbmV0IHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfREVDbmV0IiwgQUZfREVDbmV0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ERUNuZXQpOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUQkVVSQogICAgIC8qIFJlc2VydmVkIGZvciA4MDIuMkxMQyBwcm9qZWN0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVEJFVUkiLCBBRl9ORVRCRVVJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRCRVVJKTsKICNlbmRpZgogI2lmZGVmIEFGX1NFQ1VSSVRZCiAgICAgLyogU2VjdXJpdHkgY2FsbGJhY2sgcHNldWRvIEFGICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NFQ1VSSVRZIiwgQUZfU0VDVVJJVFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1NFQ1VSSVRZKTsKICNlbmRpZgogI2lmZGVmIEFGX0tFWQogICAgIC8qIFBGX0tFWSBrZXkgbWFuYWdlbWVudCBBUEkgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfS0VZIiwgQUZfS0VZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9LRVkpOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUTElOSwogICAgIC8qICAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ORVRMSU5LIiwgQUZfTkVUTElOSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfUk9VVEUiLCBORVRMSU5LX1JPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRMSU5LKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1JPVVRFKTsKICNpZmRlZiBORVRMSU5LX1NLSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19TS0lQIiwgTkVUTElOS19TS0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1NLSVApOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19XMQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1cxIiwgTkVUTElOS19XMSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19XMSk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19VU0VSU09DSyIsIE5FVExJTktfVVNFUlNPQ0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0ZJUkVXQUxMIiwgTkVUTElOS19GSVJFV0FMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19VU0VSU09DSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19GSVJFV0FMTCk7CiAjaWZkZWYgTkVUTElOS19UQ1BESUFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVENQRElBRyIsIE5FVExJTktfVENQRElBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19UQ1BESUFHKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfTkZMT0cKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ORkxPRyIsIE5FVExJTktfTkZMT0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfTkZMT0cpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19YRlJNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfWEZSTSIsIE5FVExJTktfWEZSTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19YRlJNKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfQVJQRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0FSUEQiLCBORVRMSU5LX0FSUEQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfQVJQRCk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1JPVVRFNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1JPVVRFNiIsIE5FVExJTktfUk9VVEU2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1JPVVRFNik7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19JUDZfRlciLCBORVRMSU5LX0lQNl9GVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19JUDZfRlcpOwogI2lmZGVmIE5FVExJTktfRE5SVE1TRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0ROUlRNU0ciLCBORVRMSU5LX0ROUlRNU0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfRE5SVE1TRyk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1RBUEJBU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19UQVBCQVNFIiwgTkVUTElOS19UQVBCQVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1RBUEJBU0UpOwogI2VuZGlmCiAjZW5kaWYgLyogQUZfTkVUTElOSyAqLwogI2lmZGVmIEFGX1JPVVRFCiAgICAgLyogQWxpYXMgdG8gZW11bGF0ZSA0LjRCU0QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUk9VVEUiLCBBRl9ST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUk9VVEUpOworI2VuZGlmCisjaWZkZWYgQUZfTElOSworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0xJTkspOwogI2VuZGlmCiAjaWZkZWYgQUZfQVNICiAgICAgLyogQXNoICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FTSCIsIEFGX0FTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVNIKTsKICNlbmRpZgogI2lmZGVmIEFGX0VDT05FVAogICAgIC8qIEFjb3JuIEVjb25ldCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9FQ09ORVQiLCBBRl9FQ09ORVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0VDT05FVCk7CiAjZW5kaWYKICNpZmRlZiBBRl9BVE1TVkMKICAgICAvKiBBVE0gU1ZDcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BVE1TVkMiLCBBRl9BVE1TVkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FUTVNWQyk7CiAjZW5kaWYKICNpZmRlZiBBRl9TTkEKICAgICAvKiBMaW51eCBTTkEgUHJvamVjdCAobnV0dGVycyEpICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NOQSIsIEFGX1NOQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU05BKTsKICNlbmRpZgogI2lmZGVmIEFGX0lSREEKICAgICAvKiBJUkRBIHNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSVJEQSIsIEFGX0lSREEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lSREEpOwogI2VuZGlmCiAjaWZkZWYgQUZfUFBQT1gKICAgICAvKiBQUFBvWCBzb2NrZXRzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1BQUE9YIiwgQUZfUFBQT1gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1BQUE9YKTsKICNlbmRpZgogI2lmZGVmIEFGX1dBTlBJUEUKICAgICAvKiBXYW5waXBlIEFQSSBTb2NrZXRzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1dBTlBJUEUiLCBBRl9XQU5QSVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9XQU5QSVBFKTsKICNlbmRpZgogI2lmZGVmIEFGX0xMQwogICAgIC8qIExpbnV4IExMQyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9MTEMiLCBBRl9MTEMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0xMQyk7CiAjZW5kaWYKIAogI2lmZGVmIFVTRV9CTFVFVE9PVEgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQkxVRVRPT1RIIiwgQUZfQkxVRVRPT1RIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19MMkNBUCIsIEJUUFJPVE9fTDJDQVApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX0hDSSIsIEJUUFJPVE9fSENJKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0hDSSIsIFNPTF9IQ0kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0JMVUVUT09USCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19MMkNBUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19IQ0kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9IQ0kpOwogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9GSUxURVIiLCBIQ0lfRklMVEVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBIQ0lfRklMVEVSKTsKICNlbmRpZgogI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9USU1FX1NUQU1QIiwgSENJX1RJTUVfU1RBTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9USU1FX1NUQU1QKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfREFUQV9ESVIiLCBIQ0lfREFUQV9ESVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX1NDTyIsIEJUUFJPVE9fU0NPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBIQ0lfREFUQV9ESVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fU0NPKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX1JGQ09NTSIsIEJUUFJPVE9fUkZDT01NKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX1JGQ09NTSk7CiAgICAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIkJEQUREUl9BTlkiLCAiMDA6MDA6MDA6MDA6MDA6MDAiKTsKICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAiQkRBRERSX0xPQ0FMIiwgIjAwOjAwOjAwOkZGOkZGOkZGIik7CiAjZW5kaWYKIAogI2lmZGVmIEFGX0NBTgogICAgIC8qIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0NBTiIsIEFGX0NBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQ0FOKTsKICNlbmRpZgogI2lmZGVmIFBGX0NBTgogICAgIC8qIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX0NBTiIsIFBGX0NBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfQ0FOKTsKICNlbmRpZgogCiAvKiBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzICovCiAjaWZkZWYgQUZfUkRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1JEUyIsIEFGX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUkRTKTsKICNlbmRpZgogI2lmZGVmIFBGX1JEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQRl9SRFMiLCBQRl9SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBGX1JEUyk7CiAjZW5kaWYKIAogLyogS2VybmVsIGV2ZW50IG1lc3NhZ2VzICovCiAjaWZkZWYgUEZfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX1NZU1RFTSIsIFBGX1NZU1RFTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfU1lTVEVNKTsKICNlbmRpZgogI2lmZGVmIEFGX1NZU1RFTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9TWVNURU0iLCBBRl9TWVNURU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1NZU1RFTSk7CiAjZW5kaWYKIAogI2lmZGVmIEFGX1BBQ0tFVApAQCAtNTg3MCw0NDcgKzYwNTEsNDYzIEBACiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfTElOVVhfVElQQ19ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1RJUEMiLCBBRl9USVBDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9USVBDKTsKIAogICAgIC8qIGZvciBhZGRyZXNzZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19BRERSX05BTUVTRVEiLCBUSVBDX0FERFJfTkFNRVNFUSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQUREUl9OQU1FIiwgVElQQ19BRERSX05BTUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0FERFJfSUQiLCBUSVBDX0FERFJfSUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQUREUl9OQU1FU0VRKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0FERFJfTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19BRERSX0lEKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1pPTkVfU0NPUEUiLCBUSVBDX1pPTkVfU0NPUEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NMVVNURVJfU0NPUEUiLCBUSVBDX0NMVVNURVJfU0NPUEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX05PREVfU0NPUEUiLCBUSVBDX05PREVfU0NPUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfWk9ORV9TQ09QRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DTFVTVEVSX1NDT1BFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX05PREVfU0NPUEUpOwogCiAgICAgLyogZm9yIHNldHNvY2tvcHQoKSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVElQQyIsIFNPTF9USVBDKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19JTVBPUlRBTkNFIiwgVElQQ19JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TUkNfRFJPUFBBQkxFIiwgVElQQ19TUkNfRFJPUFBBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19ERVNUX0RST1BQQUJMRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfREVTVF9EUk9QUEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NPTk5fVElNRU9VVCIsIFRJUENfQ09OTl9USU1FT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVElQQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NSQ19EUk9QUEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfREVTVF9EUk9QUEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ09OTl9USU1FT1VUKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0xPV19JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19MT1dfSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTUVESVVNX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX01FRElVTV9JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19ISUdIX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0hJR0hfSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19MT1dfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19NRURJVU1fSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19ISUdIX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSk7CiAKICAgICAvKiBmb3Igc3Vic2NyaXB0aW9ucyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9QT1JUUyIsIFRJUENfU1VCX1BPUlRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJfU0VSVklDRSIsIFRJUENfU1VCX1NFUlZJQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX1BPUlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQl9TRVJWSUNFKTsKICNpZmRlZiBUSVBDX1NVQl9DQU5DRUwKICAgICAvKiBkb2Vzbid0IHNlZW0gdG8gYmUgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJfQ0FOQ0VMIiwgVElQQ19TVUJfQ0FOQ0VMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQl9DQU5DRUwpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfV0FJVF9GT1JFVkVSIiwgVElQQ19XQUlUX0ZPUkVWRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1BVQkxJU0hFRCIsIFRJUENfUFVCTElTSEVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19XSVRIRFJBV04iLCBUSVBDX1dJVEhEUkFXTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCU0NSX1RJTUVPVVQiLCBUSVBDX1NVQlNDUl9USU1FT1VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DRkdfU1JWIiwgVElQQ19DRkdfU1JWKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19UT1BfU1JWIiwgVElQQ19UT1BfU1JWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1dBSVRfRk9SRVZFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19QVUJMSVNIRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfV0lUSERSQVdOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQlNDUl9USU1FT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NGR19TUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfVE9QX1NSVik7CiAjZW5kaWYKIAogICAgIC8qIFNvY2tldCB0eXBlcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1NUUkVBTSIsIFNPQ0tfU1RSRUFNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19ER1JBTSIsIFNPQ0tfREdSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfU1RSRUFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX0RHUkFNKTsKIC8qIFdlIGhhdmUgaW5jb21wbGV0ZSBzb2NrZXQgc3VwcG9ydC4gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19SQVciLCBTT0NLX1JBVyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfU0VRUEFDS0VUIiwgU09DS19TRVFQQUNLRVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1NFUVBBQ0tFVCk7CiAjaWYgZGVmaW5lZChTT0NLX1JETSkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19SRE0iLCBTT0NLX1JETSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19SRE0pOwogI2VuZGlmCiAjaWZkZWYgU09DS19DTE9FWEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfQ0xPRVhFQyIsIFNPQ0tfQ0xPRVhFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19DTE9FWEVDKTsKICNlbmRpZgogI2lmZGVmIFNPQ0tfTk9OQkxPQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19OT05CTE9DSyIsIFNPQ0tfTk9OQkxPQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfTk9OQkxPQ0spOwogI2VuZGlmCiAKICNpZmRlZiAgU09fREVCVUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fREVCVUciLCBTT19ERUJVRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fREVCVUcpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0FDQ0VQVENPTk4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fQUNDRVBUQ09OTiIsIFNPX0FDQ0VQVENPTk4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0FDQ0VQVENPTk4pOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JFVVNFQUREUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SRVVTRUFERFIiLCBTT19SRVVTRUFERFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JFVVNFQUREUik7CiAjZW5kaWYKICNpZmRlZiBTT19FWENMVVNJVkVBRERSVVNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0VYQ0xVU0lWRUFERFJVU0UiLCBTT19FWENMVVNJVkVBRERSVVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19FWENMVVNJVkVBRERSVVNFKTsKICNlbmRpZgogCiAjaWZkZWYgIFNPX0tFRVBBTElWRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19LRUVQQUxJVkUiLCBTT19LRUVQQUxJVkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0tFRVBBTElWRSk7CiAjZW5kaWYKICNpZmRlZiAgU09fRE9OVFJPVVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0RPTlRST1VURSIsIFNPX0RPTlRST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fRE9OVFJPVVRFKTsKICNlbmRpZgogI2lmZGVmICBTT19CUk9BRENBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fQlJPQURDQVNUIiwgU09fQlJPQURDQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19CUk9BRENBU1QpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1VTRUxPT1BCQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1VTRUxPT1BCQUNLIiwgU09fVVNFTE9PUEJBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1VTRUxPT1BCQUNLKTsKICNlbmRpZgogI2lmZGVmICBTT19MSU5HRVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fTElOR0VSIiwgU09fTElOR0VSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19MSU5HRVIpOwogI2VuZGlmCiAjaWZkZWYgIFNPX09PQklOTElORQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19PT0JJTkxJTkUiLCBTT19PT0JJTkxJTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX09PQklOTElORSk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkVVU0VQT1JUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JFVVNFUE9SVCIsIFNPX1JFVVNFUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkVVU0VQT1JUKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRCVUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU05EQlVGIiwgU09fU05EQlVGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRCVUYpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JDVkJVRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SQ1ZCVUYiLCBTT19SQ1ZCVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JDVkJVRik7CiAjZW5kaWYKICNpZmRlZiAgU09fU05ETE9XQVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU05ETE9XQVQiLCBTT19TTkRMT1dBVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU05ETE9XQVQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JDVkxPV0FUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JDVkxPV0FUIiwgU09fUkNWTE9XQVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JDVkxPV0FUKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRUSU1FTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRUSU1FTyIsIFNPX1NORFRJTUVPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRUSU1FTyk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWVElNRU8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkNWVElNRU8iLCBTT19SQ1ZUSU1FTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWVElNRU8pOwogI2VuZGlmCiAjaWZkZWYgIFNPX0VSUk9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0VSUk9SIiwgU09fRVJST1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0VSUk9SKTsKICNlbmRpZgogI2lmZGVmICBTT19UWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1RZUEUiLCBTT19UWVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19UWVBFKTsKICNlbmRpZgogI2lmZGVmICBTT19TRVRGSUIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU0VURklCIiwgU09fU0VURklCKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TRVRGSUIpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1BBU1NDUkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1BBU1NDUkVEIiwgU09fUEFTU0NSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1BBU1NDUkVEKTsKICNlbmRpZgogI2lmZGVmICBTT19QRUVSQ1JFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19QRUVSQ1JFRCIsIFNPX1BFRVJDUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19QRUVSQ1JFRCk7CiAjZW5kaWYKICNpZmRlZiAgTE9DQUxfUEVFUkNSRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9DQUxfUEVFUkNSRUQiLCBMT0NBTF9QRUVSQ1JFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DQUxfUEVFUkNSRUQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0JJTkRUT0RFVklDRQogICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0JJTkRUT0RFVklDRSk7CiAjZW5kaWYKKyNpZmRlZiAgU09fUFJJT1JJVFkKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19QUklPUklUWSk7CisjZW5kaWYKIAogICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciAibGlzdGVuIiAqLwogI2lmZGVmICBTT01BWENPTk4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09NQVhDT05OIiwgU09NQVhDT05OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT01BWENPTk4pOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09NQVhDT05OIiwgNSk7IC8qIENvbW1vbiB2YWx1ZSAqLwogI2VuZGlmCiAKICAgICAvKiBBbmNpbGxpYXJ5IG1lc3NhZ2UgdHlwZXMgKi8KICNpZmRlZiAgU0NNX1JJR0hUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ01fUklHSFRTIiwgU0NNX1JJR0hUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NNX1JJR0hUUyk7CiAjZW5kaWYKICNpZmRlZiAgU0NNX0NSRURFTlRJQUxTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDTV9DUkVERU5USUFMUyIsIFNDTV9DUkVERU5USUFMUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NNX0NSRURFTlRJQUxTKTsKICNlbmRpZgogI2lmZGVmICBTQ01fQ1JFRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NNX0NSRURTIiwgU0NNX0NSRURTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fQ1JFRFMpOwogI2VuZGlmCiAKICAgICAvKiBGbGFncyBmb3Igc2VuZCwgcmVjdiAqLwogI2lmZGVmICBNU0dfT09CCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19PT0IiLCBNU0dfT09CKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfT09CKTsKICNlbmRpZgogI2lmZGVmICBNU0dfUEVFSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfUEVFSyIsIE1TR19QRUVLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfUEVFSyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0RPTlRST1VURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRE9OVFJPVVRFIiwgTVNHX0RPTlRST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0RPTlRST1VURSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0RPTlRXQUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19ET05UV0FJVCIsIE1TR19ET05UV0FJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0RPTlRXQUlUKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRU9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FT1IiLCBNU0dfRU9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRU9SKTsKICNlbmRpZgogI2lmZGVmICBNU0dfVFJVTkMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX1RSVU5DIiwgTVNHX1RSVU5DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfVFJVTkMpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19DVFJVTkMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0NUUlVOQyIsIE1TR19DVFJVTkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19DVFJVTkMpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19XQUlUQUxMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19XQUlUQUxMIiwgTVNHX1dBSVRBTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19XQUlUQUxMKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQlRBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQlRBRyIsIE1TR19CVEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQlRBRyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VUQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VUQUciLCBNU0dfRVRBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VUQUcpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19OT1NJR05BTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTk9TSUdOQUwiLCBNU0dfTk9TSUdOQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19OT1NJR05BTCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX05PVElGSUNBVElPTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTk9USUZJQ0FUSU9OIiwgTVNHX05PVElGSUNBVElPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX05PVElGSUNBVElPTik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0NNU0dfQ0xPRVhFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ01TR19DTE9FWEVDIiwgTVNHX0NNU0dfQ0xPRVhFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0NNU0dfQ0xPRVhFQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VSUlFVRVVFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FUlJRVUVVRSIsIE1TR19FUlJRVUVVRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VSUlFVRVVFKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQ09ORklSTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ09ORklSTSIsIE1TR19DT05GSVJNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQ09ORklSTSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX01PUkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX01PUkUiLCBNU0dfTU9SRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX01PUkUpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FT0YKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VPRiIsIE1TR19FT0YpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FT0YpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19CQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQkNBU1QiLCBNU0dfQkNBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19CQ0FTVCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX01DQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19NQ0FTVCIsIE1TR19NQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX01DQVNUKTsKKyNlbmRpZgorI2lmZGVmIE1TR19GQVNUT1BFTgorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19GQVNUT1BFTik7CiAjZW5kaWYKIAogICAgIC8qIFByb3RvY29sIGxldmVsIGFuZCBudW1iZXJzLCB1c2FibGUgZm9yIFtnc11ldHNvY2tvcHQgKi8KICNpZmRlZiAgU09MX1NPQ0tFVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfU09DS0VUIiwgU09MX1NPQ0tFVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1NPQ0tFVCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0lQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9JUCIsIFNPTF9JUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0lQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9JUCIsIDApOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9JUFgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQWCIsIFNPTF9JUFgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9JUFgpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9BWDI1Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9BWDI1IiwgU09MX0FYMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9BWDI1KTsKICNlbmRpZgogI2lmZGVmICBTT0xfQVRBTEsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0FUQUxLIiwgU09MX0FUQUxLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQVRBTEspOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9ORVRST00KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX05FVFJPTSIsIFNPTF9ORVRST00pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9ORVRST00pOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9ST1NFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9ST1NFIiwgU09MX1JPU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9ST1NFKTsKICNlbmRpZgogI2lmZGVmICBTT0xfVENQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9UQ1AiLCBTT0xfVENQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVENQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9UQ1AiLCA2KTsKICNlbmRpZgogI2lmZGVmICBTT0xfVURQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9VRFAiLCBTT0xfVURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVURQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9VRFAiLCAxNyk7CiAjZW5kaWYKICNpZmRlZiBTT0xfQ0FOX0JBU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0NBTl9CQVNFIiwgU09MX0NBTl9CQVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQ0FOX0JBU0UpOwogI2VuZGlmCiAjaWZkZWYgU09MX0NBTl9SQVcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0NBTl9SQVciLCBTT0xfQ0FOX1JBVyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVciLCBDQU5fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQ0FOX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBVyk7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xJTlVYX0NBTl9ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FRkZfRkxBRyIsIENBTl9FRkZfRkxBRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SVFJfRkxBRyIsIENBTl9SVFJfRkxBRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FUlJfRkxBRyIsIENBTl9FUlJfRkxBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VGRl9GTEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUlRSX0ZMQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FUlJfRkxBRyk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1NGRl9NQVNLIiwgQ0FOX1NGRl9NQVNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VGRl9NQVNLIiwgQ0FOX0VGRl9NQVNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VSUl9NQVNLIiwgQ0FOX0VSUl9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fU0ZGX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FRkZfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VSUl9NQVNLKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfTElOVVhfQ0FOX1JBV19ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfRklMVEVSIiwgQ0FOX1JBV19GSUxURVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX0VSUl9GSUxURVIiLCBDQU5fUkFXX0VSUl9GSUxURVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX0xPT1BCQUNLIiwgQ0FOX1JBV19MT09QQkFDSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfUkVDVl9PV05fTVNHUyIsIENBTl9SQVdfUkVDVl9PV05fTVNHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19GSUxURVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfRVJSX0ZJTFRFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19MT09QQkFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19SRUNWX09XTl9NU0dTKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0JDTV9ICisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0JDTSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU0VUVVAiLCBUWF9TRVRVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfREVMRVRFIiwgVFhfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9SRUFEIiwgVFhfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU0VORCIsIFRYX1NFTkQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1NFVFVQIiwgUlhfU0VUVVApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX0RFTEVURSIsIFJYX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfUkVBRCIsIFJYX1JFQUQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1NUQVRVUyIsIFRYX1NUQVRVUyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfRVhQSVJFRCIsIFRYX0VYUElSRUQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1NUQVRVUyIsIFJYX1NUQVRVUyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfVElNRU9VVCIsIFJYX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX0NIQU5HRUQiLCBSWF9DSEFOR0VEKTsKICNlbmRpZgogI2lmZGVmIFNPTF9SRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1JEUyIsIFNPTF9SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9SRFMpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NBTkNFTF9TRU5UX1RPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DQU5DRUxfU0VOVF9UTyIsIFJEU19DQU5DRUxfU0VOVF9UTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NBTkNFTF9TRU5UX1RPKTsKICNlbmRpZgogI2lmZGVmIFJEU19HRVRfTVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0dFVF9NUiIsIFJEU19HRVRfTVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19HRVRfTVIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0ZSRUVfTVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0ZSRUVfTVIiLCBSRFNfRlJFRV9NUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0ZSRUVfTVIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JFQ1ZFUlIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JFQ1ZFUlIiLCBSRFNfUkVDVkVSUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JFQ1ZFUlIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NPTkdfTU9OSVRPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ09OR19NT05JVE9SIiwgUkRTX0NPTkdfTU9OSVRPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NPTkdfTU9OSVRPUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfR0VUX01SX0ZPUl9ERVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19HRVRfTVJfRk9SX0RFU1QiLCBSRFNfR0VUX01SX0ZPUl9ERVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfR0VUX01SX0ZPUl9ERVNUKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVAiLCBJUFBST1RPX0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVAiLCAwKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0hPUE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19IT1BPUFRTIiwgSVBQUk9UT19IT1BPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0hPUE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUNNUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lDTVAiLCBJUFBST1RPX0lDTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUNNUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lDTVAiLCAxKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lHTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JR01QIiwgSVBQUk9UT19JR01QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lHTVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fR0dQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fR0dQIiwgSVBQUk9UT19HR1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fR0dQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQVjQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUFY0IiwgSVBQUk9UT19JUFY0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQVjQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjYiLCBJUFBST1RPX0lQVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBJUCIsIElQUFJPVE9fSVBJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUElQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1RDUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RDUCIsIElQUFJPVE9fVENQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1RDUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RDUCIsIDYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRUdQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRUdQIiwgSVBQUk9UT19FR1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRUdQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1BVUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1BVUCIsIElQUFJPVE9fUFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1BVUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19VRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19VRFAiLCBJUFBST1RPX1VEUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19VRFApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19VRFAiLCAxNyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JRFAiLCBJUFBST1RPX0lEUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JRFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSEVMTE8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19IRUxMTyIsIElQUFJPVE9fSEVMTE8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSEVMTE8pOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTkQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19ORCIsIElQUFJPVE9fTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTkQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19UUCIsIElQUFJPVE9fVFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjYiLCBJUFBST1RPX0lQVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19ST1VUSU5HCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUk9VVElORyIsIElQUFJPVE9fUk9VVElORyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19ST1VUSU5HKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0ZSQUdNRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRlJBR01FTlQiLCBJUFBST1RPX0ZSQUdNRU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0ZSQUdNRU5UKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1JTVlAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SU1ZQIiwgSVBQUk9UT19SU1ZQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JTVlApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fR1JFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fR1JFIiwgSVBQUk9UT19HUkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fR1JFKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0VTUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0VTUCIsIElQUFJPVE9fRVNQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0VTUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19BSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0FIIiwgSVBQUk9UT19BSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19BSCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19NT0JJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19NT0JJTEUiLCBJUFBST1RPX01PQklMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19NT0JJTEUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUNNUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUFY2IiwgSVBQUk9UT19JQ01QVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUNNUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX05PTkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19OT05FIiwgSVBQUk9UT19OT05FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX05PTkUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0RTVE9QVFMiLCBJUFBST1RPX0RTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19YVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19YVFAiLCBJUFBST1RPX1hUUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19YVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRU9OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRU9OIiwgSVBQUk9UT19FT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRU9OKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1BJTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1BJTSIsIElQUFJPVE9fUElNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1BJTSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUENPTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUENPTVAiLCBJUFBST1RPX0lQQ09NUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUENPTVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVlJSUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1ZSUlAiLCBJUFBST1RPX1ZSUlApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVlJSUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19TQ1RQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fU0NUUCIsIElQUFJPVE9fU0NUUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19TQ1RQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0JJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0JJUCIsIElQUFJPVE9fQklQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0JJUCk7CiAjZW5kaWYKIC8qKi8KICNpZmRlZiAgSVBQUk9UT19SQVcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SQVciLCBJUFBST1RPX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19SQVcpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SQVciLCAyNTUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTUFYIiwgSVBQUk9UT19NQVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTUFYKTsKICNlbmRpZgogCiAjaWZkZWYgIFNZU1BST1RPX0NPTlRST0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1lTUFJPVE9fQ09OVFJPTCIsIFNZU1BST1RPX0NPTlRST0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNZU1BST1RPX0NPTlRST0wpOwogI2VuZGlmCiAKICAgICAvKiBTb21lIHBvcnQgY29uZmlndXJhdGlvbiAqLwogI2lmZGVmICBJUFBPUlRfUkVTRVJWRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1JFU0VSVkVEIiwgSVBQT1JUX1JFU0VSVkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBPUlRfUkVTRVJWRUQpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1JFU0VSVkVEIiwgMTAyNCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQT1JUX1VTRVJSRVNFUlZFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfVVNFUlJFU0VSVkVEIiwgSVBQT1JUX1VTRVJSRVNFUlZFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQT1JUX1VTRVJSRVNFUlZFRCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfVVNFUlJFU0VSVkVEIiwgNTAwMCk7CiAjZW5kaWYKIAogICAgIC8qIFNvbWUgcmVzZXJ2ZWQgSVAgdi40IGFkZHJlc3NlcyAqLwogI2lmZGVmICBJTkFERFJfQU5ZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTlkiLCBJTkFERFJfQU5ZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfQU5ZKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTlkiLCAweDAwMDAwMDAwKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfQlJPQURDQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9CUk9BRENBU1QiLCBJTkFERFJfQlJPQURDQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfQlJPQURDQVNUKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9CUk9BRENBU1QiLCAweGZmZmZmZmZmKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfTE9PUEJBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0xPT1BCQUNLIiwgSU5BRERSX0xPT1BCQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfTE9PUEJBQ0spOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0xPT1BCQUNLIiwgMHg3RjAwMDAwMSk7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX1VOU1BFQ19HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfVU5TUEVDX0dST1VQIiwgSU5BRERSX1VOU1BFQ19HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX1VOU1BFQ19HUk9VUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfVU5TUEVDX0dST1VQIiwgMHhlMDAwMDAwMCk7CiAjZW5kaWYKQEAgLTYzMjEsMzU0ICs2NTE4LDM1MyBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQUxMSE9TVFNfR1JPVVAiLCAweGUwMDAwMDAxKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfTUFYX0xPQ0FMX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9NQVhfTE9DQUxfR1JPVVAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQUREUl9NQVhfTE9DQUxfR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9NQVhfTE9DQUxfR1JPVVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX01BWF9MT0NBTF9HUk9VUCIsIDB4ZTAwMDAwZmYpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9OT05FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9OT05FIiwgSU5BRERSX05PTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9OT05FKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9OT05FIiwgMHhmZmZmZmZmZik7CiAjZW5kaWYKIAogICAgIC8qIElQdjQgW2dzXWV0c29ja29wdCBvcHRpb25zICovCiAjaWZkZWYgIElQX09QVElPTlMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfT1BUSU9OUyIsIElQX09QVElPTlMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX09QVElPTlMpOwogI2VuZGlmCiAjaWZkZWYgIElQX0hEUklOQ0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfSERSSU5DTCIsIElQX0hEUklOQ0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0hEUklOQ0wpOwogI2VuZGlmCiAjaWZkZWYgIElQX1RPUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9UT1MiLCBJUF9UT1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1RPUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVFRMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RUTCIsIElQX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVFRMKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRUNWT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRUNWT1BUUyIsIElQX1JFQ1ZPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRUNWT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVDVlJFVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVDVlJFVE9QVFMiLCBJUF9SRUNWUkVUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVDVlJFVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFQ1ZEU1RBRERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFQ1ZEU1RBRERSIiwgSVBfUkVDVkRTVEFERFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFQ1ZEU1RBRERSKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRVRPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFVE9QVFMiLCBJUF9SRVRPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRVRPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUF9NVUxUSUNBU1RfSUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX0lGIiwgSVBfTVVMVElDQVNUX0lGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NVUxUSUNBU1RfSUYpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX1RUTCIsIElQX01VTFRJQ0FTVF9UVEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9UVEwpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01VTFRJQ0FTVF9MT09QIiwgSVBfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUF9BRERfTUVNQkVSU0hJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9BRERfTUVNQkVSU0hJUCIsIElQX0FERF9NRU1CRVJTSElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9BRERfTUVNQkVSU0hJUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfRFJPUF9NRU1CRVJTSElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0RST1BfTUVNQkVSU0hJUCIsIElQX0RST1BfTUVNQkVSU0hJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfRFJPUF9NRU1CRVJTSElQKTsKICNlbmRpZgogI2lmZGVmICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUF9NQVhfTUVNQkVSU0hJUFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTUFYX01FTUJFUlNISVBTIiwgSVBfTUFYX01FTUJFUlNISVBTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NQVhfTUVNQkVSU0hJUFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX1RSQU5TUEFSRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RSQU5TUEFSRU5UIiwgSVBfVFJBTlNQQVJFTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1RSQU5TUEFSRU5UKTsKICNlbmRpZgogCiAgICAgLyogSVB2NiBbZ3NdZXRzb2Nrb3B0IG9wdGlvbnMsIGRlZmluZWQgaW4gUkZDMjU1MyAqLwogI2lmZGVmICBJUFY2X0pPSU5fR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9KT0lOX0dST1VQIiwgSVBWNl9KT0lOX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0pPSU5fR1JPVVApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTEVBVkVfR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9MRUFWRV9HUk9VUCIsIElQVjZfTEVBVkVfR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTEVBVkVfR1JPVVApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0hPUFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfSE9QUyIsIElQVjZfTVVMVElDQVNUX0hPUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0hPUFMpOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0lGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTVVMVElDQVNUX0lGIiwgSVBWNl9NVUxUSUNBU1RfSUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0lGKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTVVMVElDQVNUX0xPT1AiLCBJUFY2X01VTFRJQ0FTVF9MT09QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X1VOSUNBU1RfSE9QUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1VOSUNBU1RfSE9QUyIsIElQVjZfVU5JQ0FTVF9IT1BTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1VOSUNBU1RfSE9QUyk7CiAjZW5kaWYKICAgICAvKiBBZGRpdGlvbmFsIElQVjYgc29ja2V0IG9wdGlvbnMsIGRlZmluZWQgaW4gUkZDIDM0OTMgKi8KICNpZmRlZiBJUFY2X1Y2T05MWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1Y2T05MWSIsIElQVjZfVjZPTkxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1Y2T05MWSk7CiAjZW5kaWYKICAgICAvKiBBZHZhbmNlZCBJUFY2IHNvY2tldCBvcHRpb25zLCBmcm9tIFJGQyAzNTQyICovCiAjaWZkZWYgSVBWNl9DSEVDS1NVTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0NIRUNLU1VNIiwgSVBWNl9DSEVDS1NVTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9DSEVDS1NVTSk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0RPTlRGUkFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfRE9OVEZSQUciLCBJUFY2X0RPTlRGUkFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0RPTlRGUkFHKTsKICNlbmRpZgogI2lmZGVmIElQVjZfRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0RTVE9QVFMiLCBJUFY2X0RTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0hPUExJTUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfSE9QTElNSVQiLCBJUFY2X0hPUExJTUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0hPUExJTUlUKTsKICNlbmRpZgogI2lmZGVmIElQVjZfSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0hPUE9QVFMiLCBJUFY2X0hPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X05FWFRIT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9ORVhUSE9QIiwgSVBWNl9ORVhUSE9QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X05FWFRIT1ApOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9QQVRITVRVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUEFUSE1UVSIsIElQVjZfUEFUSE1UVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9QQVRITVRVKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUEtUSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1BLVElORk8iLCBJUFY2X1BLVElORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUEtUSU5GTyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZEU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVkRTVE9QVFMiLCBJUFY2X1JFQ1ZEU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZEU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkhPUExJTUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVkhPUExJTUlUIiwgSVBWNl9SRUNWSE9QTElNSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkhPUExJTUlUKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkhPUE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWSE9QT1BUUyIsIElQVjZfUkVDVkhPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkhPUE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWUEtUSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZQS1RJTkZPIiwgSVBWNl9SRUNWUEtUSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWUEtUSU5GTyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZSVEhEUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZSVEhEUiIsIElQVjZfUkVDVlJUSERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZSVEhEUik7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZUQ0xBU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWVENMQVNTIiwgSVBWNl9SRUNWVENMQVNTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZUQ0xBU1MpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SVEhEUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSIiwgSVBWNl9SVEhEUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SVEhEUik7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSRFNUT1BUUyIsIElQVjZfUlRIRFJEU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSX1RZUEVfMAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSX1RZUEVfMCIsIElQVjZfUlRIRFJfVFlQRV8wKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSX1RZUEVfMCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZQQVRITVRVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlBBVEhNVFUiLCBJUFY2X1JFQ1ZQQVRITVRVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZQQVRITVRVKTsKICNlbmRpZgogI2lmZGVmIElQVjZfVENMQVNTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVENMQVNTIiwgSVBWNl9UQ0xBU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVENMQVNTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfVVNFX01JTl9NVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9VU0VfTUlOX01UVSIsIElQVjZfVVNFX01JTl9NVFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVVNFX01JTl9NVFUpOwogI2VuZGlmCiAKICAgICAvKiBUQ1Agb3B0aW9ucyAqLwogI2lmZGVmICBUQ1BfTk9ERUxBWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfTk9ERUxBWSIsIFRDUF9OT0RFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfTk9ERUxBWSk7CiAjZW5kaWYKICNpZmRlZiAgVENQX01BWFNFRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfTUFYU0VHIiwgVENQX01BWFNFRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX01BWFNFRyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0NPUksKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0NPUksiLCBUQ1BfQ09SSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0NPUkspOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9LRUVQSURMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUElETEUiLCBUQ1BfS0VFUElETEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9LRUVQSURMRSk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBJTlRWTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUElOVFZMIiwgVENQX0tFRVBJTlRWTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBJTlRWTCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBDTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0tFRVBDTlQiLCBUQ1BfS0VFUENOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBDTlQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9TWU5DTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1NZTkNOVCIsIFRDUF9TWU5DTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9TWU5DTlQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9MSU5HRVIyCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9MSU5HRVIyIiwgVENQX0xJTkdFUjIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9MSU5HRVIyKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfREVGRVJfQUNDRVBUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9ERUZFUl9BQ0NFUFQiLCBUQ1BfREVGRVJfQUNDRVBUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfREVGRVJfQUNDRVBUKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfV0lORE9XX0NMQU1QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9XSU5ET1dfQ0xBTVAiLCBUQ1BfV0lORE9XX0NMQU1QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfV0lORE9XX0NMQU1QKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfSU5GTyIsIFRDUF9JTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfSU5GTyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX1FVSUNLQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9RVUlDS0FDSyIsIFRDUF9RVUlDS0FDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX1FVSUNLQUNLKTsKICNlbmRpZgotCisjaWZkZWYgIFRDUF9GQVNUT1BFTgorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9GQVNUT1BFTik7CisjZW5kaWYKIAogICAgIC8qIElQWCBvcHRpb25zICovCiAjaWZkZWYgIElQWF9UWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQWF9UWVBFIiwgSVBYX1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQWF9UWVBFKTsKICNlbmRpZgogCiAvKiBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzICovCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9BUkdTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfQVJHUyIsIFJEU19DTVNHX1JETUFfQVJHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9BUkdTKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfREVTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX0RFU1QiLCBSRFNfQ01TR19SRE1BX0RFU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfREVTVCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX01BUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX01BUCIsIFJEU19DTVNHX1JETUFfTUFQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX01BUCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX1NUQVRVUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX1NUQVRVUyIsIFJEU19DTVNHX1JETUFfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX1NUQVRVUyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX1VQREFURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX1VQREFURSIsIFJEU19DTVNHX1JETUFfVVBEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX1VQREFURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9SRUFEV1JJVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfUkVBRFdSSVRFIiwgUkRTX1JETUFfUkVBRFdSSVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9SRUFEV1JJVEUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfRkVOQ0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfRkVOQ0UiLCBSRFNfUkRNQV9GRU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfRkVOQ0UpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfSU5WQUxJREFURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9JTlZBTElEQVRFIiwgUkRTX1JETUFfSU5WQUxJREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfSU5WQUxJREFURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9VU0VfT05DRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9VU0VfT05DRSIsIFJEU19SRE1BX1VTRV9PTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9VU0VfT05DRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9ET05UV0FJVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9ET05UV0FJVCIsIFJEU19SRE1BX0RPTlRXQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9ET05UV0FJVCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9OT1RJRllfTUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfTk9USUZZX01FIiwgUkRTX1JETUFfTk9USUZZX01FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9OT1RJRllfTUUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfU0lMRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX1NJTEVOVCIsIFJEU19SRE1BX1NJTEVOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfU0lMRU5UKTsKICNlbmRpZgogCiAgICAgLyogZ2V0e2FkZHIsbmFtZX1pbmZvIHBhcmFtZXRlcnMgKi8KICNpZmRlZiBFQUlfQUREUkZBTUlMWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQUREUkZBTUlMWSIsIEVBSV9BRERSRkFNSUxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQUREUkZBTUlMWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfQUdBSU4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0FHQUlOIiwgRUFJX0FHQUlOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQUdBSU4pOwogI2VuZGlmCiAjaWZkZWYgRUFJX0JBREZMQUdTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9CQURGTEFHUyIsIEVBSV9CQURGTEFHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0JBREZMQUdTKTsKICNlbmRpZgogI2lmZGVmIEVBSV9GQUlMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9GQUlMIiwgRUFJX0ZBSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9GQUlMKTsKICNlbmRpZgogI2lmZGVmIEVBSV9GQU1JTFkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0ZBTUlMWSIsIEVBSV9GQU1JTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9GQU1JTFkpOwogI2VuZGlmCiAjaWZkZWYgRUFJX01FTU9SWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTUVNT1JZIiwgRUFJX01FTU9SWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX01FTU9SWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTk9EQVRBCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9OT0RBVEEiLCBFQUlfTk9EQVRBKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTk9EQVRBKTsKICNlbmRpZgogI2lmZGVmIEVBSV9OT05BTUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX05PTkFNRSIsIEVBSV9OT05BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9OT05BTUUpOwogI2VuZGlmCiAjaWZkZWYgRUFJX09WRVJGTE9XCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9PVkVSRkxPVyIsIEVBSV9PVkVSRkxPVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX09WRVJGTE9XKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TRVJWSUNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TRVJWSUNFIiwgRUFJX1NFUlZJQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TRVJWSUNFKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TT0NLVFlQRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfU09DS1RZUEUiLCBFQUlfU09DS1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TT0NLVFlQRSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TWVNURU0iLCBFQUlfU1lTVEVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfU1lTVEVNKTsKICNlbmRpZgogI2lmZGVmIEVBSV9CQURISU5UUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQkFESElOVFMiLCBFQUlfQkFESElOVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9CQURISU5UUyk7CiAjZW5kaWYKICNpZmRlZiBFQUlfUFJPVE9DT0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1BST1RPQ09MIiwgRUFJX1BST1RPQ09MKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfUFJPVE9DT0wpOwogI2VuZGlmCiAjaWZkZWYgRUFJX01BWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTUFYIiwgRUFJX01BWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX01BWCk7CiAjZW5kaWYKICNpZmRlZiBBSV9QQVNTSVZFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX1BBU1NJVkUiLCBBSV9QQVNTSVZFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9QQVNTSVZFKTsKICNlbmRpZgogI2lmZGVmIEFJX0NBTk9OTkFNRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9DQU5PTk5BTUUiLCBBSV9DQU5PTk5BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0NBTk9OTkFNRSk7CiAjZW5kaWYKICNpZmRlZiBBSV9OVU1FUklDSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9OVU1FUklDSE9TVCIsIEFJX05VTUVSSUNIT1NUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9OVU1FUklDSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBBSV9OVU1FUklDU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9OVU1FUklDU0VSViIsIEFJX05VTUVSSUNTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9OVU1FUklDU0VSVik7CiAjZW5kaWYKICNpZmRlZiBBSV9NQVNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX01BU0siLCBBSV9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9NQVNLKTsKICNlbmRpZgogI2lmZGVmIEFJX0FMTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9BTEwiLCBBSV9BTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0FMTCk7CiAjZW5kaWYKICNpZmRlZiBBSV9WNE1BUFBFRF9DRkcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfVjRNQVBQRURfQ0ZHIiwgQUlfVjRNQVBQRURfQ0ZHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9WNE1BUFBFRF9DRkcpOwogI2VuZGlmCiAjaWZkZWYgQUlfQUREUkNPTkZJRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9BRERSQ09ORklHIiwgQUlfQUREUkNPTkZJRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQUREUkNPTkZJRyk7CiAjZW5kaWYKICNpZmRlZiBBSV9WNE1BUFBFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9WNE1BUFBFRCIsIEFJX1Y0TUFQUEVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9WNE1BUFBFRCk7CiAjZW5kaWYKICNpZmRlZiBBSV9ERUZBVUxUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0RFRkFVTFQiLCBBSV9ERUZBVUxUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9ERUZBVUxUKTsKICNlbmRpZgogI2lmZGVmIE5JX01BWEhPU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTUFYSE9TVCIsIE5JX01BWEhPU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX01BWEhPU1QpOwogI2VuZGlmCiAjaWZkZWYgTklfTUFYU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9NQVhTRVJWIiwgTklfTUFYU0VSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTUFYU0VSVik7CiAjZW5kaWYKICNpZmRlZiBOSV9OT0ZRRE4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTk9GUUROIiwgTklfTk9GUUROKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OT0ZRRE4pOwogI2VuZGlmCiAjaWZkZWYgTklfTlVNRVJJQ0hPU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTlVNRVJJQ0hPU1QiLCBOSV9OVU1FUklDSE9TVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTlVNRVJJQ0hPU1QpOwogI2VuZGlmCiAjaWZkZWYgTklfTkFNRVJFUUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTkFNRVJFUUQiLCBOSV9OQU1FUkVRRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTkFNRVJFUUQpOwogI2VuZGlmCiAjaWZkZWYgTklfTlVNRVJJQ1NFUlYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTlVNRVJJQ1NFUlYiLCBOSV9OVU1FUklDU0VSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTlVNRVJJQ1NFUlYpOwogI2VuZGlmCiAjaWZkZWYgTklfREdSQU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfREdSQU0iLCBOSV9ER1JBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfREdSQU0pOwogI2VuZGlmCiAKICAgICAvKiBzaHV0ZG93bigpIHBhcmFtZXRlcnMgKi8KICNpZmRlZiBTSFVUX1JECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkQiLCBTSFVUX1JEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTSFVUX1JEKTsKICNlbGlmIGRlZmluZWQoU0RfUkVDRUlWRSkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIFNEX1JFQ0VJVkUpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIDApOwogI2VuZGlmCiAjaWZkZWYgU0hVVF9XUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1dSIiwgU0hVVF9XUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0hVVF9XUik7CiAjZWxpZiBkZWZpbmVkKFNEX1NFTkQpCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCBTRF9TRU5EKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCAxKTsKICNlbmRpZgogI2lmZGVmIFNIVVRfUkRXUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEV1IiLCBTSFVUX1JEV1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNIVVRfUkRXUik7CiAjZWxpZiBkZWZpbmVkKFNEX0JPVEgpCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkRXUiIsIFNEX0JPVEgpOwogI2Vsc2UKQEAgLTY2ODgsMTQgKzY4ODQsMTQgQEAKICAgICAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCBuYW1lc1tpXSwgdG1wKTsKICAgICAgICAgfQogICAgIH0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX09GRiIsIFJDVkFMTF9PRkYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfT04iLCBSQ1ZBTExfT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfU09DS0VUTEVWRUxPTkxZIiwgUkNWQUxMX1NPQ0tFVExFVkVMT05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX09GRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX09OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfU09DS0VUTEVWRUxPTkxZKTsKICNpZmRlZiBSQ1ZBTExfSVBMRVZFTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfSVBMRVZFTCIsIFJDVkFMTF9JUExFVkVMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfSVBMRVZFTCk7CiAjZW5kaWYKICNpZmRlZiBSQ1ZBTExfTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9NQVgiLCBSQ1ZBTExfTUFYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfTUFYKTsKICNlbmRpZgogI2VuZGlmIC8qIF9NU1RDUElQXyAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAppbmRleCAwNDM1ODc4Li5iODNmOWFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCisrKyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKQEAgLTgsNyArOCw3IEBACiAjICAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogIyBlbmRpZgogIyBpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jIGlmICEoZGVmaW5lZChfX0NZR1dJTl9fKSB8fCAoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX1ZBQ1BQKSkpCisjIGlmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAjICBpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgogIyBlbmRpZgogCkBAIC04MCw2ICs4MCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nhbi9yYXcuaD4KICNlbmRpZgogCisjaWZkZWYgSEFWRV9MSU5VWF9DQU5fQkNNX0gKKyNpbmNsdWRlIDxsaW51eC9jYW4vYmNtLmg+CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfU1lTX1NZU19ET01BSU5fSAogI2luY2x1ZGUgPHN5cy9zeXNfZG9tYWluLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3B3ZG1vZHVsZS5jIGIvTW9kdWxlcy9zcHdkbW9kdWxlLmMKaW5kZXggMTk0YWUxOS4uNjhlYTFiNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcHdkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zcHdkbW9kdWxlLmMKQEAgLTI2LDIyICsyNiwyNCBAQAogI2lmIGRlZmluZWQoSEFWRV9HRVRTUE5BTSkgfHwgZGVmaW5lZChIQVZFX0dFVFNQRU5UKQogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBzdHJ1Y3Rfc3B3ZF90eXBlX2ZpZWxkc1tdID0gewotICAgIHsic3BfbmFtIiwgImxvZ2luIG5hbWUifSwKLSAgICB7InNwX3B3ZCIsICJlbmNyeXB0ZWQgcGFzc3dvcmQifSwKKyAgICB7InNwX25hbXAiLCAibG9naW4gbmFtZSJ9LAorICAgIHsic3BfcHdkcCIsICJlbmNyeXB0ZWQgcGFzc3dvcmQifSwKICAgICB7InNwX2xzdGNoZyIsICJkYXRlIG9mIGxhc3QgY2hhbmdlIn0sCiAgICAgeyJzcF9taW4iLCAibWluICNkYXlzIGJldHdlZW4gY2hhbmdlcyJ9LAogICAgIHsic3BfbWF4IiwgIm1heCAjZGF5cyBiZXR3ZWVuIGNoYW5nZXMifSwKICAgICB7InNwX3dhcm4iLCAiI2RheXMgYmVmb3JlIHB3IGV4cGlyZXMgdG8gd2FybiB1c2VyIGFib3V0IGl0In0sCi0gICAgeyJzcF9pbmFjdCIsICIjZGF5cyBhZnRlciBwdyBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgYmxvY2tlZCJ9LAotICAgIHsic3BfZXhwaXJlIiwgIiNkYXlzIHNpbmNlIDE5NzAtMDEtMDEgdW50aWwgYWNjb3VudCBpcyBkaXNhYmxlZCJ9LAorICAgIHsic3BfaW5hY3QiLCAiI2RheXMgYWZ0ZXIgcHcgZXhwaXJlcyB1bnRpbCBhY2NvdW50IGlzIGRpc2FibGVkIn0sCisgICAgeyJzcF9leHBpcmUiLCAiI2RheXMgc2luY2UgMTk3MC0wMS0wMSB3aGVuIGFjY291bnQgZXhwaXJlcyJ9LAogICAgIHsic3BfZmxhZyIsICJyZXNlcnZlZCJ9LAorICAgIHsic3BfbmFtIiwgImxvZ2luIG5hbWU7IGRlcHJlY2F0ZWQifSwgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworICAgIHsic3BfcHdkIiwgImVuY3J5cHRlZCBwYXNzd29yZDsgZGVwcmVjYXRlZCJ9LCAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAgICAgezB9CiB9OwogCiBQeURvY19TVFJWQVIoc3RydWN0X3Nwd2RfX2RvY19fLAogInNwd2Quc3RydWN0X3Nwd2Q6IFJlc3VsdHMgZnJvbSBnZXRzcCooKSByb3V0aW5lcy5cblxuXAogVGhpcyBvYmplY3QgbWF5IGJlIGFjY2Vzc2VkIGVpdGhlciBhcyBhIDktdHVwbGUgb2ZcblwKLSAgKHNwX25hbSxzcF9wd2Qsc3BfbHN0Y2hnLHNwX21pbixzcF9tYXgsc3Bfd2FybixzcF9pbmFjdCxzcF9leHBpcmUsc3BfZmxhZylcblwKKyAgKHNwX25hbXAsc3BfcHdkcCxzcF9sc3RjaGcsc3BfbWluLHNwX21heCxzcF93YXJuLHNwX2luYWN0LHNwX2V4cGlyZSxzcF9mbGFnKVxuXAogb3IgdmlhIHRoZSBvYmplY3QgYXR0cmlidXRlcyBhcyBuYW1lZCBpbiB0aGUgYWJvdmUgdHVwbGUuIik7CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2Mgc3RydWN0X3Nwd2RfdHlwZV9kZXNjID0gewpAQCAtODYsNiArODgsOCBAQAogICAgIFNFVEkoc2V0SW5kZXgrKywgcC0+c3BfaW5hY3QpOwogICAgIFNFVEkoc2V0SW5kZXgrKywgcC0+c3BfZXhwaXJlKTsKICAgICBTRVRJKHNldEluZGV4KyssIHAtPnNwX2ZsYWcpOworICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+c3BfbmFtcCk7IC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHNwX25hbSAqLworICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+c3BfcHdkcCk7IC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHNwX3B3ZCAqLwogCiAjdW5kZWYgU0VUUwogI3VuZGVmIFNFVEkKQEAgLTE5Niw5ICsyMDAsMTEgQEAKICAgICBtPVB5TW9kdWxlX0NyZWF0ZSgmc3B3ZG1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0U3B3ZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9zcHdkX3R5cGVfZGVzYyk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFNwd2RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9zcHdkX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikgJlN0cnVjdFNwd2RUeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInN0cnVjdF9zcHdkIiwgKFB5T2JqZWN0ICopICZTdHJ1Y3RTcHdkVHlwZSk7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcmUuaCBiL01vZHVsZXMvc3JlLmgKaW5kZXggMGE4ZjBjZi4uNDJmZTI4ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcmUuaAorKysgYi9Nb2R1bGVzL3NyZS5oCkBAIC0zMSw5ICszMSw3IEBACiAgICAgUHlPYmplY3QqIHBhdHRlcm47IC8qIHBhdHRlcm4gc291cmNlIChvciBOb25lKSAqLwogICAgIGludCBmbGFnczsgLyogZmxhZ3MgdXNlZCB3aGVuIGNvbXBpbGluZyBwYXR0ZXJuIHNvdXJjZSAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZTsgLyogcGF0dGVybiBjaGFyc2l6ZSAob3IgLTEpICovCi0gICAgaW50IGNoYXJzaXplOwotICAgIFB5X2J1ZmZlciB2aWV3OworICAgIGludCBpc2J5dGVzOyAvKiBwYXR0ZXJuIHR5cGUgKDEgLSBieXRlcywgMCAtIHN0cmluZywgLTEgLSBOb25lKSAqLwogICAgIC8qIHBhdHRlcm4gY29kZSAqLwogICAgIFB5X3NzaXplX3QgY29kZXNpemU7CiAgICAgU1JFX0NPREUgY29kZVsxXTsKQEAgLTczLDkgKzcxLDggQEAKICAgICAvKiBhdHRyaWJ1dGVzIGZvciB0aGUgbWF0Y2ggb2JqZWN0ICovCiAgICAgUHlPYmplY3QqIHN0cmluZzsKICAgICBQeV9zc2l6ZV90IHBvcywgZW5kcG9zOwotICAgIC8qIGNoYXJhY3RlciBzaXplICovCi0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemU7IC8qIGtpbmQgb2YgdGhpbmc6IDEgLSBieXRlcywgMi80IC0gdW5pY29kZSAqLwotICAgIGludCBjaGFyc2l6ZTsKKyAgICBpbnQgaXNieXRlczsKKyAgICBpbnQgY2hhcnNpemU7IC8qIGNoYXJhY3RlciBzaXplICovCiAgICAgLyogcmVnaXN0ZXJzICovCiAgICAgUHlfc3NpemVfdCBsYXN0aW5kZXg7CiAgICAgUHlfc3NpemVfdCBsYXN0bWFyazsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oIGIvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKaW5kZXggMTNjODk1OC4uNTk0MGQ1YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKKysrIGIvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKQEAgLTgxLDYgKzgxLDggQEAKICNkZWZpbmUgU1JFX0ZMQUdfRE9UQUxMIDE2CiAjZGVmaW5lIFNSRV9GTEFHX1VOSUNPREUgMzIKICNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSA2NAorI2RlZmluZSBTUkVfRkxBR19ERUJVRyAxMjgKKyNkZWZpbmUgU1JFX0ZMQUdfQVNDSUkgMjU2CiAjZGVmaW5lIFNSRV9JTkZPX1BSRUZJWCAxCiAjZGVmaW5lIFNSRV9JTkZPX0xJVEVSQUwgMgogI2RlZmluZSBTUkVfSU5GT19DSEFSU0VUIDQKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlX2xpYi5oIGIvTW9kdWxlcy9zcmVfbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2YzVhNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvc3JlX2xpYi5oCkBAIC0wLDAgKzEsMTM0MyBAQAorLyoKKyAqIFNlY3JldCBMYWJzJyBSZWd1bGFyIEV4cHJlc3Npb24gRW5naW5lCisgKgorICogcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGVuZ2luZQorICoKKyAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDAxIGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTZWUgdGhlIF9zcmUuYyBmaWxlIGZvciBpbmZvcm1hdGlvbiBvbiB1c2FnZSBhbmQgcmVkaXN0cmlidXRpb24uCisgKi8KKworLyogU3RyaW5nIG1hdGNoaW5nIGVuZ2luZSAqLworCisvKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMsIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciBzZXR0aW5ncyAqLworCitMT0NBTChpbnQpCitTUkUoYXQpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DSEFSKiBwdHIsIFNSRV9DT0RFIGF0KQoreworICAgIC8qIGNoZWNrIGlmIHBvaW50ZXIgaXMgYXQgZ2l2ZW4gcG9zaXRpb24gKi8KKworICAgIFB5X3NzaXplX3QgdGhpc3AsIHRoYXRwOworCisgICAgc3dpdGNoIChhdCkgeworCisgICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HOgorICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19TVFJJTkc6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyk7CisKKyAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfTElORToKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nIHx8CisgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBwdHJbLTFdKSk7CisKKyAgICBjYXNlIFNSRV9BVF9FTkQ6CisgICAgICAgIHJldHVybiAoKCh2b2lkKikgKHB0cisxKSA9PSBzdGF0ZS0+ZW5kICYmCisgICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgcHRyWzBdKSkgfHwKKyAgICAgICAgICAgICAgICAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCkpOworCisgICAgY2FzZSBTUkVfQVRfRU5EX0xJTkU6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCB8fAorICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgcHRyWzBdKSk7CisKKyAgICBjYXNlIFNSRV9BVF9FTkRfU1RSSU5HOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQpOworCisgICAgY2FzZSBTUkVfQVRfQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX05PTl9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfTE9DX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX0xPQ19OT05fQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfVU5JX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX1VOSV9OT05fQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOworCisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0xPQ0FMKGludCkKK1NSRShjaGFyc2V0KShTUkVfQ09ERSogc2V0LCBTUkVfQ09ERSBjaCkKK3sKKyAgICAvKiBjaGVjayBpZiBjaGFyYWN0ZXIgaXMgYSBtZW1iZXIgb2YgdGhlIGdpdmVuIHNldCAqLworCisgICAgaW50IG9rID0gMTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgc3dpdGNoICgqc2V0KyspIHsKKworICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgorICAgICAgICAgICAgcmV0dXJuICFvazsKKworICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgorICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLworICAgICAgICAgICAgaWYgKGNoID09IHNldFswXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgorICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIGlmIChzcmVfY2F0ZWdvcnkoc2V0WzBdLCAoaW50KSBjaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0Kys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgorICAgICAgICAgICAgLyogPENIQVJTRVQ+IDxiaXRtYXA+ICovCisgICAgICAgICAgICBpZiAoY2ggPCAyNTYgJiYKKyAgICAgICAgICAgICAgICAoc2V0W2NoL1NSRV9DT0RFX0JJVFNdICYgKDF1IDw8IChjaCAmIChTUkVfQ09ERV9CSVRTLTEpKSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCArPSAyNTYvU1JFX0NPREVfQklUUzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX1JBTkdFOgorICAgICAgICAgICAgLyogPFJBTkdFPiA8bG93ZXI+IDx1cHBlcj4gKi8KKyAgICAgICAgICAgIGlmIChzZXRbMF0gPD0gY2ggJiYgY2ggPD0gc2V0WzFdKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCArPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTkVHQVRFOgorICAgICAgICAgICAgb2sgPSAhb2s7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9CSUdDSEFSU0VUOgorICAgICAgICAgICAgLyogPEJJR0NIQVJTRVQ+IDxibG9ja2NvdW50PiA8MjU2IGJsb2NraW5kaWNlcz4gPGJsb2Nrcz4gKi8KKyAgICAgICAgeworICAgICAgICAgICAgUHlfc3NpemVfdCBjb3VudCwgYmxvY2s7CisgICAgICAgICAgICBjb3VudCA9ICooc2V0KyspOworCisgICAgICAgICAgICBpZiAoY2ggPCAweDEwMDAwdSkKKyAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBibG9jayA9IC0xOworICAgICAgICAgICAgc2V0ICs9IDI1Ni9zaXplb2YoU1JFX0NPREUpOworICAgICAgICAgICAgaWYgKGJsb2NrID49MCAmJgorICAgICAgICAgICAgICAgIChzZXRbKGJsb2NrICogMjU2ICsgKGNoICYgMjU1KSkvU1JFX0NPREVfQklUU10gJgorICAgICAgICAgICAgICAgICAgICAoMXUgPDwgKGNoICYgKFNSRV9DT0RFX0JJVFMtMSkpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0ICs9IGNvdW50ICogKDI1Ni9TUkVfQ09ERV9CSVRTKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIGludGVybmFsIGVycm9yIC0tIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IGl0CisgICAgICAgICAgICAgICBoZXJlLCBzbyBsZXQncyBqdXN0IHByZXRlbmQgaXQgZGlkbid0IG1hdGNoLi4uICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworTE9DQUwoUHlfc3NpemVfdCkgU1JFKG1hdGNoKShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybiwgaW50IG1hdGNoX2FsbCk7CisKK0xPQ0FMKFB5X3NzaXplX3QpCitTUkUoY291bnQpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIFNSRV9DT0RFIGNocjsKKyAgICBTUkVfQ0hBUiBjOworICAgIFNSRV9DSEFSKiBwdHIgPSAoU1JFX0NIQVIgKilzdGF0ZS0+cHRyOworICAgIFNSRV9DSEFSKiBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgIFB5X3NzaXplX3QgaTsKKworICAgIC8qIGFkanVzdCBlbmQgKi8KKyAgICBpZiAobWF4Y291bnQgPCBlbmQgLSBwdHIgJiYgbWF4Y291bnQgIT0gU1JFX01BWFJFUEVBVCkKKyAgICAgICAgZW5kID0gcHRyICsgbWF4Y291bnQ7CisKKyAgICBzd2l0Y2ggKHBhdHRlcm5bMF0pIHsKKworICAgIGNhc2UgU1JFX09QX0lOOgorICAgICAgICAvKiByZXBlYXRlZCBzZXQgKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgSU5cbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIFNSRShjaGFyc2V0KShwYXR0ZXJuICsgMiwgKnB0cikpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9BTlk6CisgICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAhU1JFX0lTX0xJTkVCUkVBSygqcHRyKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6CisgICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gIHNraXAgdG8gdGhlIGVuZCBvZiB0aGUgdGFyZ2V0CisgICAgICAgICAgIHN0cmluZywgYW5kIGJhY2t0cmFjayBmcm9tIHRoZXJlICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWV9BTExcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICBwdHIgPSBlbmQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKKyAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICBjID0gKFNSRV9DSEFSKSBjaHI7CisjaWYgU0laRU9GX1NSRV9DSEFSIDwgNAorICAgICAgICBpZiAoKFNSRV9DT0RFKSBjICE9IGNocikKKyAgICAgICAgICAgIDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyID09IGMpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcigqcHRyKSA9PSBjaHIpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKKyAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIGMgPSAoU1JFX0NIQVIpIGNocjsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gY2hyKQorICAgICAgICAgICAgcHRyID0gZW5kOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gYykKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKCpwdHIpICE9IGNocikKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybiAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBTVUJQQVRURVJOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgd2hpbGUgKChTUkVfQ0hBUiopIHN0YXRlLT5wdHIgPCBlbmQpIHsKKyAgICAgICAgICAgIGkgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuLCAwKTsKKyAgICAgICAgICAgIGlmIChpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGlmICghaSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBwYXR0ZXJuLCBwdHIsCisgICAgICAgICAgICAgICAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyIC0gcHRyKSk7CisgICAgICAgIHJldHVybiAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyIC0gcHRyOworICAgIH0KKworICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKKyAgICAgICAgICAgcHRyIC0gKFNSRV9DSEFSKikgc3RhdGUtPnB0cikpOworICAgIHJldHVybiBwdHIgLSAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyOworfQorCisjaWYgMCAvKiBub3QgdXNlZCBpbiB0aGlzIHJlbGVhc2UgKi8KK0xPQ0FMKGludCkKK1NSRShpbmZvKShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICAvKiBjaGVjayBpZiBhbiBTUkVfT1BfSU5GTyBibG9jayBtYXRjaGVzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBTUkVfQ09ERSBvYmplY3RzIHRvIHNraXAgaWYgc3VjY2Vzc2Z1bCwgMAorICAgICAgIGlmIG5vIG1hdGNoICovCisKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSKikgc3RhdGUtPmVuZDsKKyAgICBTUkVfQ0hBUiogcHRyID0gKFNSRV9DSEFSKikgc3RhdGUtPnB0cjsKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICAvKiBjaGVjayBtaW5pbWFsIGxlbmd0aCAqLworICAgIGlmIChwYXR0ZXJuWzNdICYmIGVuZCAtIHB0ciA8IHBhdHRlcm5bM10pCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogY2hlY2sga25vd24gcHJlZml4ICovCisgICAgaWYgKHBhdHRlcm5bMl0gJiBTUkVfSU5GT19QUkVGSVggJiYgcGF0dGVybls1XSA+IDEpIHsKKyAgICAgICAgLyogPGxlbmd0aD4gPHNraXA+IDxwcmVmaXggZGF0YT4gPG92ZXJsYXAgZGF0YT4gKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhdHRlcm5bNV07IGkrKykKKyAgICAgICAgICAgIGlmICgoU1JFX0NPREUpIHB0cltpXSAhPSBwYXR0ZXJuWzcgKyBpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHBhdHRlcm5bMF0gKyAyICogcGF0dGVybls2XTsKKyAgICB9CisgICAgcmV0dXJuIHBhdHRlcm5bMF07Cit9CisjZW5kaWYKKworLyogVGhlIG1hY3JvcyBiZWxvdyBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IHJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkKKyAqIGNhbGxzIHRoYXQgKmZhaWxlZCogYW5kIGRvICpub3QqIHJldHVybiBpbW1lZGlhdGVseSAoSU9XLCB0aG9zZQorICogdGhhdCB3aWxsIGJhY2t0cmFjaykuIEV4cGxhaW5pbmc6CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIHRydWU6IHRoYXQncyB1c3VhbGx5IGEgc3VjY2VzcworICogICAoYmVzaWRlcyBhdHlwaWNhbCBjYXNlcyBsaWtlIEFTU0VSVF9OT1QpLCB0aGVyZWZvcmUgdGhlcmUncyBubworICogICByZWFzb24gdG8gcmVzdG9yZSBsYXN0bWFyazsKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgZmFsc2UgYnV0IHRoZSBjdXJyZW50IFNSRShtYXRjaCkoKQorICogICBpcyByZXR1cm5pbmcgdG8gdGhlIGNhbGxlcjogSWYgdGhlIGN1cnJlbnQgU1JFKG1hdGNoKSgpIGlzIHRoZQorICogICB0b3AgZnVuY3Rpb24gb2YgdGhlIHJlY3Vyc2lvbiwgcmV0dXJuaW5nIGZhbHNlIHdpbGwgYmUgYSBtYXRjaGluZworICogICBmYWlsdXJlLCBhbmQgaXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgbGFzdG1hcmsgaXMgcG9pbnRpbmcgdG8uCisgKiAgIElmIGl0J3MgKm5vdCogdGhlIHRvcCBmdW5jdGlvbiwgaXQgd2lsbCBiZSBhIHJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkKKyAqICAgZmFpbHVyZSBieSBpdHNlbGYsIGFuZCB0aGUgY2FsbGluZyBTUkUobWF0Y2gpKCkgd2lsbCBoYXZlIHRvIGRlYWwKKyAqICAgd2l0aCB0aGUgZmFpbHVyZSBieSB0aGUgc2FtZSBydWxlcyBleHBsYWluZWQgaGVyZSAoaXQgd2lsbCByZXN0b3JlCisgKiAgIGxhc3RtYXJrIGJ5IGl0c2VsZiBpZiBuZWNlc3NhcnkpOworICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgY29udGludWUgdGhlCisgKiAgIG91dHNpZGUgJ2ZvcicgbG9vcDogbXVzdCBiZSBwcm90ZWN0ZWQgd2hlbiBicmVha2luZywgc2luY2UgdGhlIG5leHQKKyAqICAgT1AgY291bGQgcG90ZW50aWFsbHkgZGVwZW5kIG9uIGxhc3RtYXJrOworICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGFnYWluCisgKiAgIGluc2lkZSBhIGxvY2FsIGZvci93aGlsZSBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCBiZXR3ZWVuIGVhY2gKKyAqICAgbG9vcCBpdGVyYXRpb24sIHNpbmNlIHRoZSByZWN1cnNpdmUgU1JFKG1hdGNoKSgpIGNvdWxkIGRvIGFueXRoaW5nLAorICogICBhbmQgY291bGQgcG90ZW50aWFsbHkgZGVwZW5kIG9uIGxhc3RtYXJrLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjaGVjayB0aGUgZGlzY3Vzc2lvbiBhdCBTRiBwYXRjaCAjNzEyOTAwLgorICovCisjZGVmaW5lIExBU1RNQVJLX1NBVkUoKSAgICAgXAorICAgIGRvIHsgXAorICAgICAgICBjdHgtPmxhc3RtYXJrID0gc3RhdGUtPmxhc3RtYXJrOyBcCisgICAgICAgIGN0eC0+bGFzdGluZGV4ID0gc3RhdGUtPmxhc3RpbmRleDsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIExBU1RNQVJLX1JFU1RPUkUoKSAgXAorICAgIGRvIHsgXAorICAgICAgICBzdGF0ZS0+bGFzdG1hcmsgPSBjdHgtPmxhc3RtYXJrOyBcCisgICAgICAgIHN0YXRlLT5sYXN0aW5kZXggPSBjdHgtPmxhc3RpbmRleDsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVUVVJOX0VSUk9SKGkpIGRvIHsgcmV0dXJuIGk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgUkVUVVJOX0ZBSUxVUkUgZG8geyByZXQgPSAwOyBnb3RvIGV4aXQ7IH0gd2hpbGUoMCkKKyNkZWZpbmUgUkVUVVJOX1NVQ0NFU1MgZG8geyByZXQgPSAxOyBnb3RvIGV4aXQ7IH0gd2hpbGUoMCkKKworI2RlZmluZSBSRVRVUk5fT05fRVJST1IoaSkgXAorICAgIGRvIHsgaWYgKGkgPCAwKSBSRVRVUk5fRVJST1IoaSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFVFVSTl9PTl9TVUNDRVNTKGkpIFwKKyAgICBkbyB7IFJFVFVSTl9PTl9FUlJPUihpKTsgaWYgKGkgPiAwKSBSRVRVUk5fU1VDQ0VTUzsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVUVVJOX09OX0ZBSUxVUkUoaSkgXAorICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA9PSAwKSBSRVRVUk5fRkFJTFVSRTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTRlkoeCkgI3gKKworI2RlZmluZSBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0eXBlLCBwdHIpIFwKK2RvIHsgXAorICAgIGFsbG9jX3BvcyA9IHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2U7IFwKKyAgICBUUkFDRSgoImFsbG9jYXRpbmcgJXMgaW4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKKyAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAorICAgICAgICAgICBTRlkodHlwZSksIGFsbG9jX3Bvcywgc2l6ZW9mKHR5cGUpKSk7IFwKKyAgICBpZiAoc2l6ZW9mKHR5cGUpID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIGFsbG9jX3BvcykgeyBcCisgICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplb2YodHlwZSkpOyBcCisgICAgICAgIGlmIChqIDwgMCkgcmV0dXJuIGo7IFwKKyAgICAgICAgaWYgKGN0eF9wb3MgIT0gLTEpIFwKKyAgICAgICAgICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCBTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7IFwKKyAgICB9IFwKKyAgICBwdHIgPSAodHlwZSopKHN0YXRlLT5kYXRhX3N0YWNrK2FsbG9jX3Bvcyk7IFwKKyAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemVvZih0eXBlKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgdHlwZSwgcHRyLCBwb3MpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgibG9va2luZyB1cCAlcyBhdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBTRlkodHlwZSksIHBvcykpOyBcCisgICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaytwb3MpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgZGF0YSwgc2l6ZSkgXAorZG8geyBcCisgICAgVFJBQ0UoKCJjb3B5IGRhdGEgaW4gJXAgdG8gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKKyAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAorICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLCBzaXplKSk7IFwKKyAgICBpZiAoc2l6ZSA+IHN0YXRlLT5kYXRhX3N0YWNrX3NpemUgLSBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlKSB7IFwKKyAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemUpOyBcCisgICAgICAgIGlmIChqIDwgMCkgcmV0dXJuIGo7IFwKKyAgICAgICAgaWYgKGN0eF9wb3MgIT0gLTEpIFwKKyAgICAgICAgICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCBTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7IFwKKyAgICB9IFwKKyAgICBtZW1jcHkoc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgZGF0YSwgc2l6ZSk7IFwKKyAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemU7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19QT1Aoc3RhdGUsIGRhdGEsIHNpemUsIGRpc2NhcmQpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgiY29weSBkYXRhIHRvICVwIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKKyAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAorICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAorICAgIG1lbWNweShkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpOyBcCisgICAgaWYgKGRpc2NhcmQpIFwKKyAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemUpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgiZGlzY2FyZCBkYXRhIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKKyAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAorICAgICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAorICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIERBVEFfUFVTSCh4KSBcCisgICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSkKKyNkZWZpbmUgREFUQV9QT1AoeCkgXAorICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSwgMSkKKyNkZWZpbmUgREFUQV9QT1BfRElTQ0FSRCh4KSBcCisgICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZW9mKCooeCkpKQorI2RlZmluZSBEQVRBX0FMTE9DKHQscCkgXAorICAgIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHQsIHApCisjZGVmaW5lIERBVEFfTE9PS1VQX0FUKHQscCxwb3MpIFwKKyAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSx0LHAscG9zKQorCisjZGVmaW5lIE1BUktfUFVTSChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBpID0gbGFzdG1hcms7IC8qIGN0eC0+bGFzdG1hcmsgbWF5IGNoYW5nZSBpZiByZWFsbG9jYXRlZCAqLyBcCisgICAgICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgc3RhdGUtPm1hcmssIChpKzEpKnNpemVvZih2b2lkKikpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUFSS19QT1AobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMSk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBNQVJLX1BPUF9LRUVQKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDApOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUFSS19QT1BfRElTQ0FSRChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEpVTVBfTk9ORSAgICAgICAgICAgIDAKKyNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMSAgICAgMQorI2RlZmluZSBKVU1QX01BWF9VTlRJTF8yICAgICAyCisjZGVmaW5lIEpVTVBfTUFYX1VOVElMXzMgICAgIDMKKyNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMSAgICAgNAorI2RlZmluZSBKVU1QX01JTl9VTlRJTF8yICAgICA1CisjZGVmaW5lIEpVTVBfTUlOX1VOVElMXzMgICAgIDYKKyNkZWZpbmUgSlVNUF9SRVBFQVQgICAgICAgICAgNworI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMSAgICA4CisjZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8yICAgIDkKKyNkZWZpbmUgSlVNUF9NSU5fUkVQRUFUX09ORSAgMTAKKyNkZWZpbmUgSlVNUF9CUkFOQ0ggICAgICAgICAgMTEKKyNkZWZpbmUgSlVNUF9BU1NFUlQgICAgICAgICAgMTIKKyNkZWZpbmUgSlVNUF9BU1NFUlRfTk9UICAgICAgMTMKKworI2RlZmluZSBET19KVU1QWChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4sIG1hdGNoYWxsKSBcCisgICAgREFUQV9BTExPQyhTUkUobWF0Y2hfY29udGV4dCksIG5leHRjdHgpOyBcCisgICAgbmV4dGN0eC0+bGFzdF9jdHhfcG9zID0gY3R4X3BvczsgXAorICAgIG5leHRjdHgtPmp1bXAgPSBqdW1wdmFsdWU7IFwKKyAgICBuZXh0Y3R4LT5wYXR0ZXJuID0gbmV4dHBhdHRlcm47IFwKKyAgICBuZXh0Y3R4LT5tYXRjaF9hbGwgPSBtYXRjaGFsbDsgXAorICAgIGN0eF9wb3MgPSBhbGxvY19wb3M7IFwKKyAgICBjdHggPSBuZXh0Y3R4OyBcCisgICAgZ290byBlbnRyYW5jZTsgXAorICAgIGp1bXBsYWJlbDogXAorICAgIHdoaWxlICgwKSAvKiBnY2MgZG9lc24ndCBsaWtlIGxhYmVscyBhdCBlbmQgb2Ygc2NvcGVzICovIFwKKworI2RlZmluZSBET19KVU1QKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAorICAgIERPX0pVTVBYKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybiwgY3R4LT5tYXRjaF9hbGwpCisKKyNkZWZpbmUgRE9fSlVNUDAoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuKSBcCisgICAgRE9fSlVNUFgoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuLCAwKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlfc3NpemVfdCBsYXN0X2N0eF9wb3M7CisgICAgUHlfc3NpemVfdCBqdW1wOworICAgIFNSRV9DSEFSKiBwdHI7CisgICAgU1JFX0NPREUqIHBhdHRlcm47CisgICAgUHlfc3NpemVfdCBjb3VudDsKKyAgICBQeV9zc2l6ZV90IGxhc3RtYXJrOworICAgIFB5X3NzaXplX3QgbGFzdGluZGV4OworICAgIHVuaW9uIHsKKyAgICAgICAgU1JFX0NPREUgY2hyOworICAgICAgICBTUkVfUkVQRUFUKiByZXA7CisgICAgfSB1OworICAgIGludCBtYXRjaF9hbGw7Cit9IFNSRShtYXRjaF9jb250ZXh0KTsKKworLyogY2hlY2sgaWYgc3RyaW5nIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICByZXR1cm5zIDwwIGZvcgorICAgZXJyb3IsIDAgZm9yIGZhaWx1cmUsIGFuZCAxIGZvciBzdWNjZXNzICovCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKG1hdGNoKShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybiwgaW50IG1hdGNoX2FsbCkKK3sKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IGFsbG9jX3BvcywgY3R4X3BvcyA9IC0xOworICAgIFB5X3NzaXplX3QgaSwgcmV0ID0gMDsKKyAgICBQeV9zc2l6ZV90IGp1bXA7CisgICAgdW5zaWduZWQgaW50IHNpZ2NvdW50PTA7CisKKyAgICBTUkUobWF0Y2hfY29udGV4dCkqIGN0eDsKKyAgICBTUkUobWF0Y2hfY29udGV4dCkqIG5leHRjdHg7CisKKyAgICBUUkFDRSgoInwlcHwlcHxFTlRFUlxuIiwgcGF0dGVybiwgc3RhdGUtPnB0cikpOworCisgICAgREFUQV9BTExPQyhTUkUobWF0Y2hfY29udGV4dCksIGN0eCk7CisgICAgY3R4LT5sYXN0X2N0eF9wb3MgPSAtMTsKKyAgICBjdHgtPmp1bXAgPSBKVU1QX05PTkU7CisgICAgY3R4LT5wYXR0ZXJuID0gcGF0dGVybjsKKyAgICBjdHgtPm1hdGNoX2FsbCA9IG1hdGNoX2FsbDsKKyAgICBjdHhfcG9zID0gYWxsb2NfcG9zOworCitlbnRyYW5jZToKKworICAgIGN0eC0+cHRyID0gKFNSRV9DSEFSICopc3RhdGUtPnB0cjsKKworICAgIGlmIChjdHgtPnBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKKyAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KKyAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IC4uLiAqLworICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzNdICYmIChQeV91aW50cHRyX3QpKGVuZCAtIGN0eC0+cHRyKSA8IGN0eC0+cGF0dGVyblszXSkgeworICAgICAgICAgICAgVFJBQ0UoKCJyZWplY3QgKGdvdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIGNoYXJzLCAiCisgICAgICAgICAgICAgICAgICAgIm5lZWQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsCisgICAgICAgICAgICAgICAgICAgZW5kIC0gY3R4LT5wdHIsIChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bM10pKTsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV0gKyAxOworICAgIH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgKytzaWdjb3VudDsKKyAgICAgICAgaWYgKCgwID09IChzaWdjb3VudCAmIDB4ZmZmKSkgJiYgUHlFcnJfQ2hlY2tTaWduYWxzKCkpCisgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lOVEVSUlVQVEVEKTsKKworICAgICAgICBzd2l0Y2ggKCpjdHgtPnBhdHRlcm4rKykgeworCisgICAgICAgIGNhc2UgU1JFX09QX01BUks6CisgICAgICAgICAgICAvKiBzZXQgbWFyayAqLworICAgICAgICAgICAgLyogPE1BUks+IDxnaWQ+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVJLICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gaS8yICsgMTsKKyAgICAgICAgICAgIGlmIChpID4gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgLyogc3RhdGUtPmxhc3RtYXJrIGlzIHRoZSBoaWdoZXN0IHZhbGlkIGluZGV4IGluIHRoZQorICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrIGFycmF5LiAgSWYgaXQgaXMgaW5jcmVhc2VkIGJ5IG1vcmUgdGhhbiAxLAorICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnZlbmluZyBtYXJrcyBtdXN0IGJlIHNldCB0byBOVUxMIHRvIHNpZ25hbAorICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlc2UgbWFya3MgaGF2ZSBub3QgYmVlbiBlbmNvdW50ZXJlZC4gKi8KKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGogPSBzdGF0ZS0+bGFzdG1hcmsgKyAxOworICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgaSkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmtbaisrXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5tYXJrW2ldID0gY3R4LT5wdHI7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgICAgICAvKiBtYXRjaCBsaXRlcmFsIHN0cmluZyAqLworICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgY3R4LT5wdHJbMF0gIT0gY3R4LT5wYXR0ZXJuWzBdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6CisgICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyB0aGF0IGlzIG5vdCBsaXRlcmFsIGNoYXJhY3RlciAqLworICAgICAgICAgICAgLyogPE5PVF9MSVRFUkFMPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKFNSRV9DT0RFKSBjdHgtPnB0clswXSA9PSBjdHgtPnBhdHRlcm5bMF0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9TVUNDRVNTOgorICAgICAgICAgICAgLyogZW5kIG9mIHBhdHRlcm4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNVQ0NFU1NcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmICghY3R4LT5tYXRjaF9hbGwgfHwgY3R4LT5wdHIgPT0gc3RhdGUtPmVuZCkgeworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX0FUOgorICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gcG9zaXRpb24gKi8KKyAgICAgICAgICAgIC8qIDxBVD4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKCFTUkUoYXQpKHN0YXRlLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgorICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gY2F0ZWdvcnkgKi8KKyAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxDQVRFR09SWSAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFzcmVfY2F0ZWdvcnkoY3R4LT5wYXR0ZXJuWzBdLCBjdHgtPnB0clswXSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BTlk6CisgICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyAoZXhjZXB0IGEgbmV3bGluZSkgKi8KKyAgICAgICAgICAgIC8qIDxBTlk+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBTllcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgU1JFX0lTX0xJTkVCUkVBSyhjdHgtPnB0clswXSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nICovCisgICAgICAgICAgICAvKiA8QU5ZX0FMTD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWV9BTExcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfSU46CisgICAgICAgICAgICAvKiBtYXRjaCBzZXQgbWVtYmVyIChvciBub25fbWVtYmVyKSAqLworICAgICAgICAgICAgLyogPElOPiA8c2tpcD4gPHNldD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuICsgMSwgKmN0eC0+cHRyKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMX0lHTk9SRSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSAhPSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcigqY3R4LT5wdHIpID09IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0lOX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOX0lHTk9SRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZAorICAgICAgICAgICAgICAgIHx8ICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikpKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9KVU1QOgorICAgICAgICBjYXNlIFNSRV9PUF9JTkZPOgorICAgICAgICAgICAgLyoganVtcCBmb3J3YXJkICovCisgICAgICAgICAgICAvKiA8SlVNUD4gPG9mZnNldD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVAgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQlJBTkNIOgorICAgICAgICAgICAgLyogYWx0ZXJuYXRpb24gKi8KKyAgICAgICAgICAgIC8qIDxCUkFOQ0g+IDwwPXNraXA+IGNvZGUgPEpVTVA+IC4uLiA8TlVMTD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEJSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICBmb3IgKDsgY3R4LT5wYXR0ZXJuWzBdOyBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfTElURVJBTCAmJgorICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpICpjdHgtPnB0ciAhPSBjdHgtPnBhdHRlcm5bMl0pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IFNSRV9PUF9JTiAmJgorICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAhU1JFKGNoYXJzZXQpKGN0eC0+cGF0dGVybiArIDMsIChTUkVfQ09ERSkgKmN0eC0+cHRyKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQlJBTkNILCBqdW1wX2JyYW5jaCwgY3R4LT5wYXR0ZXJuKzEpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9LRUVQKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVRfT05FOgorICAgICAgICAgICAgLyogbWF0Y2ggcmVwZWF0ZWQgc2VxdWVuY2UgKG1heGltaXppbmcgcmVnZXhwKSAqLworCisgICAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIG9ubHkgd29ya3MgaWYgdGhlIHJlcGVhdGVkIGl0ZW0gaXMKKyAgICAgICAgICAgICAgIGV4YWN0bHkgb25lIGNoYXJhY3RlciB3aWRlLCBhbmQgd2UncmUgbm90IGFscmVhZHkKKyAgICAgICAgICAgICAgIGNvbGxlY3RpbmcgYmFja3RyYWNraW5nIHBvaW50cy4gIGZvciBvdGhlciBjYXNlcywKKyAgICAgICAgICAgICAgIHVzZSB0aGUgTUFYX1JFUEVBVCBvcGVyYXRvciAqLworCisgICAgICAgICAgICAvKiA8UkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiBlbmQgLSBjdHgtPnB0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgcmV0ID0gU1JFKGNvdW50KShzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIGN0eC0+cGF0dGVyblsyXSk7CisgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKyAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7CisgICAgICAgICAgICBjdHgtPnB0ciArPSBjdHgtPmNvdW50OworCisgICAgICAgICAgICAvKiB3aGVuIHdlIGFycml2ZSBoZXJlLCBjb3VudCBjb250YWlucyB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICBtYXRjaGVzLCBhbmQgY3R4LT5wdHIgcG9pbnRzIHRvIHRoZSB0YWlsIG9mIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgIHN0cmluZy4gIGNoZWNrIGlmIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIG1hdGNoZXMsCisgICAgICAgICAgICAgICBhbmQgYmFja3RyYWNrIGlmIG5vdC4gKi8KKworICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX1NVQ0NFU1MgJiYKKyAgICAgICAgICAgICAgICBjdHgtPnB0ciA9PSBzdGF0ZS0+ZW5kKSB7CisgICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfTElURVJBTCkgeworICAgICAgICAgICAgICAgIC8qIHRhaWwgc3RhcnRzIHdpdGggYSBsaXRlcmFsLiBza2lwIHBvc2l0aW9ucyB3aGVyZQorICAgICAgICAgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGNhbm5vdCBwb3NzaWJseSBtYXRjaCAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5jaHIgPSBjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdKzFdOworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fCAqY3R4LT5wdHIgIT0gY3R4LT51LmNocikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLS07CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVF9PTkVfMSwganVtcF9yZXBlYXRfb25lXzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHItLTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVF9PTkVfMiwganVtcF9yZXBlYXRfb25lXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHItLTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOworICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1JFUEVBVF9PTkU6CisgICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWluaW1pemluZyByZWdleHApICovCisKKyAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcworICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQorICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAorICAgICAgICAgICAgICAgdXNlIHRoZSBNSU5fUkVQRUFUIG9wZXJhdG9yICovCisKKyAgICAgICAgICAgIC8qIDxNSU5fUkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9SRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7CisKKyAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gZW5kIC0gY3R4LT5wdHIpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7IC8qIGNhbm5vdCBtYXRjaCAqLworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gMCkKKyAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gMDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGNvdW50IHVzaW5nIHBhdHRlcm4gbWluIGFzIHRoZSBtYXhpbXVtICovCisgICAgICAgICAgICAgICAgcmV0ID0gU1JFKGNvdW50KShzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIGN0eC0+cGF0dGVyblsxXSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQorICAgICAgICAgICAgICAgICAgICAvKiBkaWRuJ3QgbWF0Y2ggbWluaW11bSBudW1iZXIgb2YgdGltZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwYXN0IG1pbmltdW0gbWF0Y2hlcyBvZiByZXBlYXQgKi8KKyAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OworICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUyAmJgorICAgICAgICAgICAgICAgICghbWF0Y2hfYWxsIHx8IGN0eC0+cHRyID09IHN0YXRlLT5lbmQpKSB7CisgICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdID09IFNSRV9NQVhSRVBFQVQKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgY3R4LT5jb3VudCA8PSAoUHlfc3NpemVfdCljdHgtPnBhdHRlcm5bMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1JFUEVBVF9PTkUsanVtcF9taW5fcmVwZWF0X29uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNSRShjb3VudCkoc3RhdGUsIGN0eC0+cGF0dGVybiszLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX1JFUEVBVDoKKyAgICAgICAgICAgIC8qIGNyZWF0ZSByZXBlYXQgY29udGV4dC4gIGFsbCB0aGUgaGFyZCB3b3JrIGlzIGRvbmUKKyAgICAgICAgICAgICAgIGJ5IHRoZSBVTlRJTCBvcGVyYXRvciAoTUFYX1VOVElMLCBNSU5fVU5USUwpICovCisgICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFVOVElMPiB0YWlsICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVQgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgLyogaW5zdGFsbCBuZXcgcmVwZWF0IGNvbnRleHQgKi8KKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSAoU1JFX1JFUEVBVCopIFB5T2JqZWN0X01BTExPQyhzaXplb2YoKmN0eC0+dS5yZXApKTsKKyAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IC0xOworICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiA9IGN0eC0+cGF0dGVybjsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPnByZXYgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBOVUxMOworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7CisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVQsIGp1bXBfcmVwZWF0LCBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OworICAgICAgICAgICAgUHlPYmplY3RfRlJFRShjdHgtPnUucmVwKTsKKworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUFYX1VOVElMOgorICAgICAgICAgICAgLyogbWF4aW1pemluZyByZXBlYXQgKi8KKyAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8TUFYX1VOVElMPiB0YWlsICovCisKKyAgICAgICAgICAgIC8qIEZJWE1FOiB3ZSBwcm9iYWJseSBuZWVkIHRvIGRlYWwgd2l0aCB6ZXJvLXdpZHRoCisgICAgICAgICAgICAgICBtYXRjaGVzIGluIGhlcmUuLi4gKi8KKworICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7CisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7CisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1BWF9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQpKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgeworICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzEsIGp1bXBfbWF4X3VudGlsXzEsCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdIHx8CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgIT0gY3R4LT51LnJlcC0+bGFzdF9wdHIpIHsKKyAgICAgICAgICAgICAgICAvKiB3ZSBtYXkgaGF2ZSBlbm91Z2ggbWF0Y2hlcywgYnV0IGlmIHdlIGNhbgorICAgICAgICAgICAgICAgICAgIG1hdGNoIGFub3RoZXIgaXRlbSwgZG8gc28gKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworICAgICAgICAgICAgICAgIE1BUktfUFVTSChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICAvKiB6ZXJvLXdpZHRoIG1hdGNoIHByb3RlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IHN0YXRlLT5wdHI7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8yLCBqdW1wX21heF91bnRpbF8yLAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgICAgICBEQVRBX1BPUCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBNQVJLX1BPUChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBjYW5ub3QgbWF0Y2ggbW9yZSByZXBlYXRlZCBpdGVtcyBoZXJlLiAgbWFrZSBzdXJlIHRoZQorICAgICAgICAgICAgICAgdGFpbCBtYXRjaGVzICovCisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMywganVtcF9tYXhfdW50aWxfMywgY3R4LT5wYXR0ZXJuKTsKKyAgICAgICAgICAgIFJFVFVSTl9PTl9TVUNDRVNTKHJldCk7CisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX01JTl9VTlRJTDoKKyAgICAgICAgICAgIC8qIG1pbmltaXppbmcgcmVwZWF0ICovCisgICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1JTl9VTlRJTD4gdGFpbCAqLworCisgICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX1NUQVRFKTsKKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICBjdHgtPmNvdW50ID0gY3R4LT51LnJlcC0+Y291bnQrMTsKKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUlOX1VOVElMICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJXBcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5jb3VudCwgY3R4LT51LnJlcC0+cGF0dGVybikpOworCisgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzFdKSB7CisgICAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBtYXRjaGVzICovCisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMSwganVtcF9taW5fdW50aWxfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworCisgICAgICAgICAgICAvKiBzZWUgaWYgdGhlIHRhaWwgbWF0Y2hlcyAqLworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzIsIGp1bXBfbWluX3VudGlsXzIsIGN0eC0+cGF0dGVybik7CisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisKKyAgICAgICAgICAgIGlmICgoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXQorICAgICAgICAgICAgICAgICYmIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gIT0gU1JFX01BWFJFUEVBVCkgfHwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID09IGN0eC0+dS5yZXAtPmxhc3RfcHRyKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAvKiB6ZXJvLXdpZHRoIG1hdGNoIHByb3RlY3Rpb24gKi8KKyAgICAgICAgICAgIERBVEFfUFVTSCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOworICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOworICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8zLGp1bXBfbWluX3VudGlsXzMsCisgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICBEQVRBX1BPUCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKKyAgICAgICAgICAgIC8qIG1hdGNoIGJhY2tyZWZlcmVuY2UgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOworICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07CisgICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKmN0eC0+cHRyICE9ICpwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgorICAgICAgICAgICAgLyogbWF0Y2ggYmFja3JlZmVyZW5jZSAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfSUdOT1JFICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOworICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07CisgICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSAhPSBzdGF0ZS0+bG93ZXIoKnApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfRVhJU1RTOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfRVhJU1RTICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgLyogPEdST1VQUkVGX0VYSVNUUz4gPGdyb3VwPiA8c2tpcD4gY29kZXllcyA8SlVNUD4gY29kZW5vIC4uLiAqLworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOworICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07CisgICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlQ6CisgICAgICAgICAgICAvKiBhc3NlcnQgc3VicGF0dGVybiAqLworICAgICAgICAgICAgLyogPEFTU0VSVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyIDwgc3RhdGUtPmJlZ2lubmluZykKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIERPX0pVTVAwKEpVTVBfQVNTRVJULCBqdW1wX2Fzc2VydCwgY3R4LT5wYXR0ZXJuKzIpOworICAgICAgICAgICAgUkVUVVJOX09OX0ZBSUxVUkUocmV0KTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlRfTk9UOgorICAgICAgICAgICAgLyogYXNzZXJ0IG5vdCBzdWJwYXR0ZXJuICovCisgICAgICAgICAgICAvKiA8QVNTRVJUX05PVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVF9OT1QgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHIgLSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICBpZiAoc3RhdGUtPnB0ciA+PSBzdGF0ZS0+YmVnaW5uaW5nKSB7CisgICAgICAgICAgICAgICAgRE9fSlVNUDAoSlVNUF9BU1NFUlRfTk9ULCBqdW1wX2Fzc2VydF9ub3QsIGN0eC0+cGF0dGVybisyKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfRkFJTFVSRToKKyAgICAgICAgICAgIC8qIGltbWVkaWF0ZSBmYWlsdXJlICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxGQUlMVVJFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8VU5LTk9XTiAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bLTFdKSk7CisgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lMTEVHQUwpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIGN0eF9wb3MgPSBjdHgtPmxhc3RfY3R4X3BvczsKKyAgICBqdW1wID0gY3R4LT5qdW1wOworICAgIERBVEFfUE9QX0RJU0NBUkQoY3R4KTsKKyAgICBpZiAoY3R4X3BvcyA9PSAtMSkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisKKyAgICBzd2l0Y2ggKGp1bXApIHsKKyAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8yOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8yOworICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzM6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8zXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzM7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMjoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMjsKKyAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8zOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8zOworICAgICAgICBjYXNlIEpVTVBfQlJBTkNIOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9CUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9icmFuY2g7CisgICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMTsKKyAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8xOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8xOworICAgICAgICBjYXNlIEpVTVBfUkVQRUFUOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXQ7CisgICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzE6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMTsKKyAgICAgICAgY2FzZSBKVU1QX1JFUEVBVF9PTkVfMjoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUX09ORV8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0X29uZV8yOworICAgICAgICBjYXNlIEpVTVBfTUlOX1JFUEVBVF9PTkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9SRVBFQVRfT05FXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3JlcGVhdF9vbmU7CisgICAgICAgIGNhc2UgSlVNUF9BU1NFUlQ6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX2Fzc2VydDsKKyAgICAgICAgY2FzZSBKVU1QX0FTU0VSVF9OT1Q6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVF9OT1RcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnRfbm90OworICAgICAgICBjYXNlIEpVTVBfTk9ORToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFVFVSTiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIHJldCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCit9CisKK0xPQ0FMKFB5X3NzaXplX3QpCitTUkUoc2VhcmNoKShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICBTUkVfQ0hBUiogcHRyID0gKFNSRV9DSEFSICopc3RhdGUtPnN0YXJ0OworICAgIFNSRV9DSEFSKiBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgIFB5X3NzaXplX3Qgc3RhdHVzID0gMDsKKyAgICBQeV9zc2l6ZV90IHByZWZpeF9sZW4gPSAwOworICAgIFB5X3NzaXplX3QgcHJlZml4X3NraXAgPSAwOworICAgIFNSRV9DT0RFKiBwcmVmaXggPSBOVUxMOworICAgIFNSRV9DT0RFKiBjaGFyc2V0ID0gTlVMTDsKKyAgICBTUkVfQ09ERSogb3ZlcmxhcCA9IE5VTEw7CisgICAgaW50IGZsYWdzID0gMDsKKworICAgIGlmIChwYXR0ZXJuWzBdID09IFNSRV9PUF9JTkZPKSB7CisgICAgICAgIC8qIG9wdGltaXphdGlvbiBpbmZvIGJsb2NrICovCisgICAgICAgIC8qIDxJTkZPPiA8MT1za2lwPiA8Mj1mbGFncz4gPDM9bWluPiA8ND1tYXg+IDw1PXByZWZpeCBpbmZvPiAgKi8KKworICAgICAgICBmbGFncyA9IHBhdHRlcm5bMl07CisKKyAgICAgICAgaWYgKHBhdHRlcm5bM10gPiAxKSB7CisgICAgICAgICAgICAvKiBhZGp1c3QgZW5kIHBvaW50IChidXQgbWFrZSBzdXJlIHdlIGxlYXZlIGF0IGxlYXN0IG9uZQorICAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIHRoZXJlLCBzbyBsaXRlcmFsIHNlYXJjaCB3aWxsIHdvcmspICovCisgICAgICAgICAgICBlbmQgLT0gcGF0dGVyblszXSAtIDE7CisgICAgICAgICAgICBpZiAoZW5kIDw9IHB0cikKKyAgICAgICAgICAgICAgICBlbmQgPSBwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19QUkVGSVgpIHsKKyAgICAgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXggKi8KKyAgICAgICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCisgICAgICAgICAgICBwcmVmaXhfbGVuID0gcGF0dGVybls1XTsKKyAgICAgICAgICAgIHByZWZpeF9za2lwID0gcGF0dGVybls2XTsKKyAgICAgICAgICAgIHByZWZpeCA9IHBhdHRlcm4gKyA3OworICAgICAgICAgICAgb3ZlcmxhcCA9IHByZWZpeCArIHByZWZpeF9sZW4gLSAxOworICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgU1JFX0lORk9fQ0hBUlNFVCkKKyAgICAgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLworICAgICAgICAgICAgLyogPGNoYXJzZXQ+ICovCisgICAgICAgICAgICBjaGFyc2V0ID0gcGF0dGVybiArIDU7CisKKyAgICAgICAgcGF0dGVybiArPSAxICsgcGF0dGVyblsxXTsKKyAgICB9CisKKyAgICBUUkFDRSgoInByZWZpeCA9ICVwICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKKyAgICAgICAgICAgcHJlZml4LCBwcmVmaXhfbGVuLCBwcmVmaXhfc2tpcCkpOworICAgIFRSQUNFKCgiY2hhcnNldCA9ICVwXG4iLCBjaGFyc2V0KSk7CisKKyNpZiBkZWZpbmVkKFVTRV9GQVNUX1NFQVJDSCkKKyAgICBpZiAocHJlZml4X2xlbiA+IDEpIHsKKyAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeC4gIHVzZSB0aGUgb3ZlcmxhcAorICAgICAgICAgICB0YWJsZSB0byBza2lwIGZvcndhcmQgYXMgZmFzdCBhcyB3ZSBwb3NzaWJseSBjYW4gKi8KKyAgICAgICAgUHlfc3NpemVfdCBpID0gMDsKKworICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICBpZiAocHJlZml4X2xlbiA+IGVuZCAtIHB0cikKKyAgICAgICAgICAgIHJldHVybiAwOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHByZWZpeF9sZW47IGkrKykKKyAgICAgICAgICAgIGlmICgoU1JFX0NPREUpKFNSRV9DSEFSKSBwcmVmaXhbaV0gIT0gcHJlZml4W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisjZW5kaWYKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAgICAgICAgICAgU1JFX0NIQVIgYyA9IChTUkVfQ0hBUikgcHJlZml4WzBdOworICAgICAgICAgICAgd2hpbGUgKCpwdHIrKyAhPSBjKSB7CisgICAgICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmICgqcHRyID09IChTUkVfQ0hBUikgcHJlZml4W2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK2kgIT0gcHJlZml4X2xlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIGZvdW5kIGEgcG90ZW50aWFsIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBTQ0FOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyIC0gKHByZWZpeF9sZW4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0ciAtIChwcmVmaXhfbGVuIC0gcHJlZml4X3NraXAgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4gKyAyKnByZWZpeF9za2lwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgYnV0IG5vIGNpZ2FyIC0tIHRyeSBhZ2FpbiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKytwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOworICAgICAgICAgICAgfSB3aGlsZSAoaSAhPSAwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChwYXR0ZXJuWzBdID09IFNSRV9PUF9MSVRFUkFMKSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBsaXRlcmFsIGNoYXJhY3Rlci4gIHRoaXMgaXMgdXNlZAorICAgICAgICAgICBmb3Igc2hvcnQgcHJlZml4ZXMsIGFuZCBpZiBmYXN0IHNlYXJjaCBpcyBkaXNhYmxlZCAqLworICAgICAgICBTUkVfQ0hBUiBjID0gKFNSRV9DSEFSKSBwYXR0ZXJuWzFdOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBwYXR0ZXJuWzFdKQorICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyNlbmRpZgorICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAgICB3aGlsZSAoKnB0ciAhPSBjKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggTElURVJBTFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gKytwdHI7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQorICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuICsgMiwgMCk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGNoYXJzZXQpIHsKKyAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCisgICAgICAgIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRShjaGFyc2V0KShjaGFyc2V0LCAqcHRyKSkKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIENIQVJTRVRcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0cjsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4sIDApOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcHRyKys7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCisgICAgICAgIHdoaWxlIChwdHIgPD0gZW5kKSB7CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0hcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gc3RhdGUtPnB0ciA9IHB0cisrOworICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybiwgMCk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKyN1bmRlZiBTUkVfQ0hBUgorI3VuZGVmIFNJWkVPRl9TUkVfQ0hBUgorI3VuZGVmIFNSRQorCisvKiB2aW06dHM9NDpzdz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCmluZGV4IDM3ZGY4MmQuLmNkYjRmZmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYworKysgYi9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKQEAgLTExLDEyICsxMSwxMiBAQAogICAgIFB5T2JqZWN0ICp0OwogCiAgICAgY2hhciAqc3RyOwotICAgIGNoYXIgKmZpbGVuYW1lOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKICAgICBjaGFyICpzdGFydHN0cjsKICAgICBpbnQgc3RhcnQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNzczpzeW10YWJsZSIsICZzdHIsICZmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0c3RyKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNPJnM6c3ltdGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUsICZzdGFydHN0cikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzdHJjbXAoc3RhcnRzdHIsICJleGVjIikgPT0gMCkKICAgICAgICAgc3RhcnQgPSBQeV9maWxlX2lucHV0OwpAQCAtMjcsOSArMjcsMTEgQEAKICAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICJzeW10YWJsZSgpIGFyZyAzIG11c3QgYmUgJ2V4ZWMnIG9yICdldmFsJyBvciAnc2luZ2xlJyIpOworICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc3QgPSBQeV9TeW10YWJsZVN0cmluZyhzdHIsIGZpbGVuYW1lLCBzdGFydCk7CisgICAgc3QgPSBQeV9TeW10YWJsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICBpZiAoc3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdCA9IChQeU9iamVjdCAqKXN0LT5zdF90b3A7CkBAIC02OSwzMCArNzEsMzAgQEAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzeW10YWJsZW1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlVTRSIsIFVTRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9HTE9CQUwiLCBERUZfR0xPQkFMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0xPQ0FMIiwgREVGX0xPQ0FMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX1BBUkFNIiwgREVGX1BBUkFNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0ZSRUUiLCBERUZfRlJFRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFX0NMQVNTIiwgREVGX0ZSRUVfQ0xBU1MpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfSU1QT1JUIiwgREVGX0lNUE9SVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9CT1VORCIsIERFRl9CT1VORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfR0xPQkFMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfTE9DQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9QQVJBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0ZSRUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9GUkVFX0NMQVNTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfSU1QT1JUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfQk9VTkQpOwogCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfRlVOQ1RJT04iLCBGdW5jdGlvbkJsb2NrKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9DTEFTUyIsIENsYXNzQmxvY2spOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUWVBFX01PRFVMRSIsIE1vZHVsZUJsb2NrKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUFRfSU1QT1JUX1NUQVIiLCBPUFRfSU1QT1JUX1NUQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUFRfVE9QTEVWRUwiLCBPUFRfVE9QTEVWRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9QVF9JTVBPUlRfU1RBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT1BUX1RPUExFVkVMKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0NBTCIsIExPQ0FMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiR0xPQkFMX0VYUExJQ0lUIiwgR0xPQkFMX0VYUExJQ0lUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiR0xPQkFMX0lNUExJQ0lUIiwgR0xPQkFMX0lNUExJQ0lUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRlJFRSIsIEZSRUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDRUxMIiwgQ0VMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEdMT0JBTF9FWFBMSUNJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgR0xPQkFMX0lNUExJQ0lUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGUkVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDRUxMKTsKIAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ09QRV9PRkYiLCBTQ09QRV9PRkZTRVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ09QRV9NQVNLIiwgU0NPUEVfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NPUEVfTUFTSyk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jIGIvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYwppbmRleCBmYzNmMzc1Li5mMmQ0NGZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCisrKyBiL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKQEAgLTI3Nyw0NCArMjc3LDQ0IEBACiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KIAogICAgIC8qIFByaW9yaXRpZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0VNRVJHIiwgICAgICAgTE9HX0VNRVJHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0FMRVJUIiwgICAgICAgTE9HX0FMRVJUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0NSSVQiLCAgICAgICAgTE9HX0NSSVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfRVJSIiwgICAgICAgICBMT0dfRVJSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1dBUk5JTkciLCBMT0dfV0FSTklORyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19OT1RJQ0UiLCAgTE9HX05PVElDRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19JTkZPIiwgICAgICAgIExPR19JTkZPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0RFQlVHIiwgICAgICAgTE9HX0RFQlVHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfRU1FUkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19BTEVSVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NSSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19FUlIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19XQVJOSU5HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTk9USUNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0RFQlVHKTsKIAogICAgIC8qIG9wZW5sb2coKSBvcHRpb24gZmxhZ3MgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1BJRCIsICAgICAgICAgTE9HX1BJRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DT05TIiwgICAgICAgIExPR19DT05TKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05ERUxBWSIsICBMT0dfTkRFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfUElEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQ09OUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05ERUxBWSk7CiAjaWZkZWYgTE9HX09ERUxBWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfT0RFTEFZIiwgIExPR19PREVMQVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19PREVMQVkpOwogI2VuZGlmCiAjaWZkZWYgTE9HX05PV0FJVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTk9XQUlUIiwgIExPR19OT1dBSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19OT1dBSVQpOwogI2VuZGlmCiAjaWZkZWYgTE9HX1BFUlJPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfUEVSUk9SIiwgIExPR19QRVJST1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19QRVJST1IpOwogI2VuZGlmCiAKICAgICAvKiBGYWNpbGl0aWVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19LRVJOIiwgICAgICAgIExPR19LRVJOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1VTRVIiLCAgICAgICAgTE9HX1VTRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTUFJTCIsICAgICAgICBMT0dfTUFJTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19EQUVNT04iLCAgTE9HX0RBRU1PTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19BVVRIIiwgICAgICAgIExPR19BVVRIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xQUiIsICAgICAgICAgTE9HX0xQUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDAiLCAgTE9HX0xPQ0FMMCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDEiLCAgTE9HX0xPQ0FMMSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDIiLCAgTE9HX0xPQ0FMMik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDMiLCAgTE9HX0xPQ0FMMyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDQiLCAgTE9HX0xPQ0FMNCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDUiLCAgTE9HX0xPQ0FMNSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDYiLCAgTE9HX0xPQ0FMNik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDciLCAgTE9HX0xPQ0FMNyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0tFUk4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19VU0VSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTUFJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0RBRU1PTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0FVVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MUFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDcpOwogCiAjaWZuZGVmIExPR19TWVNMT0cKICNkZWZpbmUgTE9HX1NZU0xPRyAgICAgICAgICAgICAgTE9HX0RBRU1PTgpAQCAtMzI5LDEzICszMjksMTMgQEAKICNkZWZpbmUgTE9HX0NST04gICAgICAgICAgICAgICAgTE9HX0RBRU1PTgogI2VuZGlmCiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1NZU0xPRyIsICBMT0dfU1lTTE9HKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0NST04iLCAgICAgICAgTE9HX0NST04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfVVVDUCIsICAgICAgICBMT0dfVVVDUCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19ORVdTIiwgICAgICAgIExPR19ORVdTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfU1lTTE9HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQ1JPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1VVQ1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19ORVdTKTsKIAogI2lmZGVmIExPR19BVVRIUFJJVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQVVUSFBSSVYiLCAgICBMT0dfQVVUSFBSSVYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19BVVRIUFJJVik7CiAjZW5kaWYKIAogICAgIHJldHVybiBtOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy90aW1lbW9kdWxlLmMgYi9Nb2R1bGVzL3RpbWVtb2R1bGUuYwppbmRleCA0MmVjMzY2Li5kMDkxN2E0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3RpbWVtb2R1bGUuYworKysgYi9Nb2R1bGVzL3RpbWVtb2R1bGUuYwpAQCAtMzcsMTYgKzM3LDYgQEAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAjZW5kaWYgLyogIV9fV0FUQ09NQ19fIHx8IF9fUU5YX18gKi8KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0jZGVmaW5lIElOQ0xfRE9TCi0jZGVmaW5lIElOQ0xfRVJST1JTCi0jaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgogI2VuZGlmCkBAIC0yMDMsNyArMTkzLDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPOmNsb2NrX3NldHRpbWUiLCAmY2xrX2lkLCAmb2JqKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKG9iaiwgJnR2X3NlYywgJnR2X25zZWMpID09IC0xKQorICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob2JqLCAmdHZfc2VjLCAmdHZfbnNlYywgX1B5VGltZV9ST1VORF9ET1dOKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdHAudHZfc2VjID0gdHZfc2VjOwogICAgIHRwLnR2X25zZWMgPSB0dl9uc2VjOwpAQCAtMzUxLDcgKzM0MSw3IEBACiAgICAgICAgIHdoZW50ID0gdGltZShOVUxMKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZV90KG90LCAmd2hlbnQpID09IC0xKQorICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVfdChvdCwgJndoZW50LCBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgICpwd2hlbiA9IHdoZW50OwpAQCAtNTQzLDYgKzUzMywyNiBAQAogICAgLyogd2NzZnRpbWUoKSBkb2Vzbid0IGZvcm1hdCBjb3JyZWN0bHkgdGltZSB6b25lcywgc2VlIGlzc3VlICMxMDY1MyAqLwogIyAgdW5kZWYgSEFWRV9XQ1NGVElNRQogI2VuZGlmCisjZGVmaW5lIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyBcCisiQ29tbW9ubHkgdXNlZCBmb3JtYXQgY29kZXM6XG5cCitcblwKKyVZICBZZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLlxuXAorJW0gIE1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDEyXS5cblwKKyVkICBEYXkgb2YgdGhlIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDMxXS5cblwKKyVIICBIb3VyICgyNC1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCwyM10uXG5cCislTSAgTWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAwLDU5XS5cblwKKyVTICBTZWNvbmQgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsNjFdLlxuXAorJXogIFRpbWUgem9uZSBvZmZzZXQgZnJvbSBVVEMuXG5cCislYSAgTG9jYWxlJ3MgYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lLlxuXAorJUEgIExvY2FsZSdzIGZ1bGwgd2Vla2RheSBuYW1lLlxuXAorJWIgIExvY2FsZSdzIGFiYnJldmlhdGVkIG1vbnRoIG5hbWUuXG5cCislQiAgTG9jYWxlJ3MgZnVsbCBtb250aCBuYW1lLlxuXAorJWMgIExvY2FsZSdzIGFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24uXG5cCislSSAgSG91ciAoMTItaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsMTJdLlxuXAorJXAgIExvY2FsZSdzIGVxdWl2YWxlbnQgb2YgZWl0aGVyIEFNIG9yIFBNLlxuXAorXG5cCitPdGhlciBjb2RlcyBtYXkgYmUgYXZhaWxhYmxlIG9uIHlvdXIgcGxhdGZvcm0uICBTZWUgZG9jdW1lbnRhdGlvbiBmb3JcblwKK3RoZSBDIGxpYnJhcnkgc3RyZnRpbWUgZnVuY3Rpb24uXG4iCiAKICNpZmRlZiBIQVZFX1NUUkZUSU1FCiAjaWZkZWYgSEFWRV9XQ1NGVElNRQpAQCAtNjQwLDYgKzY1MCwxOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CisjZWxpZiAoZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKHN1bikpICYmIGRlZmluZWQoSEFWRV9XQ1NGVElNRSkKKyAgICBmb3Iob3V0YnVmID0gd2NzY2hyKGZtdCwgJyUnKTsKKyAgICAgICAgb3V0YnVmICE9IE5VTEw7CisgICAgICAgIG91dGJ1ZiA9IHdjc2NocihvdXRidWYrMiwgJyUnKSkKKyAgICB7CisgICAgICAgIC8qIElzc3VlICMxOTYzNDogT24gQUlYLCB3Y3NmdGltZSgieSIsICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgcmV0dXJucyAiMC8iIGluc3RlYWQgb2YgIjk5IiAqLworICAgICAgICBpZiAob3V0YnVmWzFdID09IEwneScgJiYgYnVmLnRtX3llYXIgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0ICV5IHJlcXVpcmVzIHllYXIgPj0gMTkwMCBvbiBBSVgiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQogI2VuZGlmCiAKICAgICBmbXRsZW4gPSB0aW1lX3N0cmxlbihmbXQpOwpAQCAtNjk0LDEzICs3MTcsMTMgQEAKIAogI3VuZGVmIHRpbWVfY2hhcgogI3VuZGVmIGZvcm1hdF90aW1lCi0KIFB5RG9jX1NUUlZBUihzdHJmdGltZV9kb2MsCiAic3RyZnRpbWUoZm9ybWF0WywgdHVwbGVdKSAtPiBzdHJpbmdcblwKIFxuXAogQ29udmVydCBhIHRpbWUgdHVwbGUgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHNwZWNpZmljYXRpb24uXG5cCiBTZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2Rlcy4gV2hlbiB0aGUgdGltZSB0dXBsZVxuXAotaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLiIpOworaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAjZW5kaWYgLyogSEFWRV9TVFJGVElNRSAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzIzLDcgKzc0Niw5IEBACiAic3RycHRpbWUoc3RyaW5nLCBmb3JtYXQpIC0+IHN0cnVjdF90aW1lXG5cCiBcblwKIFBhcnNlIGEgc3RyaW5nIHRvIGEgdGltZSB0dXBsZSBhY2NvcmRpbmcgdG8gYSBmb3JtYXQgc3BlY2lmaWNhdGlvbi5cblwKLVNlZSB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGZvciBmb3JtYXR0aW5nIGNvZGVzIChzYW1lIGFzIHN0cmZ0aW1lKCkpLiIpOworU2VlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZSBtYW51YWwgZm9yIGZvcm1hdHRpbmcgY29kZXMgKHNhbWUgYXNcblwKK3N0cmZ0aW1lKCkpLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBfYXNjdGltZShzdHJ1Y3QgdG0gKnRpbWVwdHIpCkBAIC03OTgsMTEgKzgyMywzMSBAQAogICAgIHRpbWVfdCB0dDsKICAgICBpZiAoIWdldHRtYXJnKHR1cCwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOworI2lmZGVmIF9BSVgKKyAgICAvKiB5ZWFyIDwgMTkwMiBvciB5ZWFyID4gMjAzNyAqLworICAgIGlmIChidWYudG1feWVhciA8IDIgfHwgYnVmLnRtX3llYXIgPiAxMzcpIHsKKyAgICAgICAgLyogSXNzdWUgIzE5NzQ4OiBPbiBBSVgsIG1rdGltZSgpIGRvZXNuJ3QgcmVwb3J0IG92ZXJmbG93IGVycm9yIGZvcgorICAgICAgICAgKiB0aW1lc3RhbXAgPCAtMl4zMSBvciB0aW1lc3RhbXAgPiAyKiozMS0xLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJta3RpbWUgYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbHNlCiAgICAgYnVmLnRtX3dkYXkgPSAtMTsgIC8qIHNlbnRpbmVsOyBvcmlnaW5hbCB2YWx1ZSBpZ25vcmVkICovCisjZW5kaWYKICAgICB0dCA9IG1rdGltZSgmYnVmKTsKICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwgYnV0IHRtX3dkYXkKICAgICAgKiBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLwotICAgIGlmICh0dCA9PSAodGltZV90KSgtMSkgJiYgYnVmLnRtX3dkYXkgPT0gLTEpIHsKKyAgICBpZiAodHQgPT0gKHRpbWVfdCkoLTEpCisjaWZuZGVmIF9BSVgKKyAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dAorICAgICAgICAgKiB0bV93ZGF5IGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCisgICAgICAgICYmIGJ1Zi50bV93ZGF5ID09IC0xCisjZWxzZQorICAgICAgICAvKiBvbiBBSVgsIHRtX3dkYXkgaXMgYWx3YXlzIHNldHMsIGV2ZW4gb24gZXJyb3IgKi8KKyNlbmRpZgorICAgICAgICkKKyAgICB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm1rdGltZSBhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MzcsNiArODgyLDggQEAKICAgICAvKiBSZXNldCB0aW1lem9uZSwgYWx0em9uZSwgZGF5bGlnaHQgYW5kIHR6bmFtZSAqLwogICAgIFB5SW5pdF90aW1lem9uZShtKTsKICAgICBQeV9ERUNSRUYobSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtMTI3MywxOSArMTMyMCwxMSBAQAogI2lmIGRlZmluZWQoSEFWRV9UWk5BTUUpICYmICFkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICAgICBQeU9iamVjdCAqb3R6MCwgKm90ejE7CiAgICAgdHpzZXQoKTsKLSNpZmRlZiBQWU9TX09TMgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJ0aW1lem9uZSIsIF90aW1lem9uZSk7Ci0jZWxzZSAvKiAhUFlPU19PUzIgKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAidGltZXpvbmUiLCB0aW1lem9uZSk7Ci0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNpZmRlZiBIQVZFX0FMVFpPTkUKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiYWx0em9uZSIsIGFsdHpvbmUpOwogI2Vsc2UKLSNpZmRlZiBQWU9TX09TMgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJhbHR6b25lIiwgX3RpbWV6b25lLTM2MDApOwotI2Vsc2UgLyogIVBZT1NfT1MyICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImFsdHpvbmUiLCB0aW1lem9uZS0zNjAwKTsKLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImRheWxpZ2h0IiwgZGF5bGlnaHQpOwogICAgIG90ejAgPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKHR6bmFtZVswXSwgInN1cnJvZ2F0ZWVzY2FwZSIpOwpAQCAtMTQ2OCw4ICsxNTA3LDkgQEAKICAgICBQeUluaXRfdGltZXpvbmUobSk7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFRpbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfdGltZV90eXBlX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFRpbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF90aW1lX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHdpbnZlci5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHdpbnZlcik7CkBAIC0xNTgxLDcgKzE2MjEsNyBAQAogICAgICAgICAgICAgRFdPUkQgcmM7CiAgICAgICAgICAgICBIQU5ETEUgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKICAgICAgICAgICAgIFJlc2V0RXZlbnQoaEludGVycnVwdEV2ZW50KTsKLSAgICAgICAgICAgIHJjID0gV2FpdEZvclNpbmdsZU9iamVjdChoSW50ZXJydXB0RXZlbnQsIHVsX21pbGxpcyk7CisgICAgICAgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3RFeChoSW50ZXJydXB0RXZlbnQsIHVsX21pbGxpcywgRkFMU0UpOwogICAgICAgICAgICAgaWYgKHJjID09IFdBSVRfT0JKRUNUXzApIHsKICAgICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCiAgICAgICAgICAgICAgICAgZXJybm8gPSBFSU5UUjsKQEAgLTE1OTEsMTUgKzE2MzEsNiBAQAogICAgICAgICB9CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAvKiBUaGlzIFNsZWVwICpJUyogSW50ZXJydXB0YWJsZSBieSBFeGNlcHRpb25zICovCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGlmIChEb3NTbGVlcChzZWNzICogMTAwMCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICNlbHNlCiAgICAgLyogWFhYIENhbid0IGludGVycnVwdCB0aGlzIHNsZWVwICovCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YS5jIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCmluZGV4IGY0ZDM2MDguLjM5NzlmNjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGEuYworKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKQEAgLTEzLDEwICsxMywxOCBAQAogCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJ1Y25oYXNoLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSB1bmljb2RlZGF0YQorY2xhc3MgdW5pY29kZWRhdGEuVUNEICdQcmV2aW91c0RCVmVyc2lvbiAqJyAnJlVDRF9UeXBlJworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NmRhYzE1MzA4MmQxNTBiY10qLworCiAvKiBjaGFyYWN0ZXIgcHJvcGVydGllcyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0xMDcsMjUgKzExNSw2MyBAQAogCiAvKiAtLS0gTW9kdWxlIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX2RlY2ltYWxfX2RvY19fLAotImRlY2ltYWwodW5pY2hyWywgZGVmYXVsdF0pXG5cCi1cblwKLVJldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHVuaWNoclxuXAotYXMgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWZcblwKLW5vdCBnaXZlbiwgVmFsdWVFcnJvciBpcyByYWlzZWQuIik7CisvKltjbGluaWMgaW5wdXRdCisKK3VuaWNvZGVkYXRhLlVDRC5kZWNpbWFsCisKKyAgICB1bmljaHI6IG9iamVjdCh0eXBlPSdQeVVuaWNvZGVPYmplY3QgKicsIHN1YmNsYXNzX29mPScmUHlVbmljb2RlX1R5cGUnKQorICAgIGRlZmF1bHQ6IG9iamVjdD1OVUxMCisgICAgLworCitDb252ZXJ0cyBhIFVuaWNvZGUgY2hhcmFjdGVyIGludG8gaXRzIGVxdWl2YWxlbnQgZGVjaW1hbCB2YWx1ZS4KKworUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyCithcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZgorbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX19kb2NfXywKKyJkZWNpbWFsKCRzZWxmLCB1bmljaHIsIGRlZmF1bHQ9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIHZhbHVlLlxuIgorIlxuIgorIlJldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHVuaWNoclxuIgorImFzIGludGVnZXIuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmXG4iCisibm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBVTklDT0RFREFUQV9VQ0RfREVDSU1BTF9NRVRIT0RERUYgICAgXAorICAgIHsiZGVjaW1hbCIsIChQeUNGdW5jdGlvbil1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbCwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfZGVjaW1hbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKFByZXZpb3VzREJWZXJzaW9uICpzZWxmLCBQeVVuaWNvZGVPYmplY3QgKnVuaWNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX2RlY2ltYWwoUHJldmlvdXNEQlZlcnNpb24gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5VW5pY29kZU9iamVjdCAqdjsKLSAgICBQeU9iamVjdCAqZGVmb2JqID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeVVuaWNvZGVPYmplY3QgKnVuaWNocjsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8hfE86ZGVjaW1hbCIsCisgICAgICAgICZQeVVuaWNvZGVfVHlwZSwgJnVuaWNociwgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gdW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfaW1wbChzZWxmLCB1bmljaHIsIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKFByZXZpb3VzREJWZXJzaW9uICpzZWxmLCBQeVVuaWNvZGVPYmplY3QgKnVuaWNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODY4OTY2OTg5NmQyOTNkZiBpbnB1dD1jMjVjOWQyYjRkZTA3NmIxXSovCit7CiAgICAgaW50IGhhdmVfb2xkID0gMDsKICAgICBsb25nIHJjOwogICAgIFB5X1VDUzQgYzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8TzpkZWNpbWFsIiwgJlB5VW5pY29kZV9UeXBlLCAmdiwgJmRlZm9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGMgPSBnZXR1Y2hhcih2KTsKKyAgICBjID0gZ2V0dWNoYXIodW5pY2hyKTsKICAgICBpZiAoYyA9PSAoUHlfVUNTNCktMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE0NSwxNCArMTkxLDE0IEBACiAgICAgaWYgKCFoYXZlX29sZCkKICAgICAgICAgcmMgPSBQeV9VTklDT0RFX1RPREVDSU1BTChjKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGlmIChkZWZvYmogPT0gTlVMTCkgeworICAgICAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgZGVjaW1hbCIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZGVmb2JqKTsKLSAgICAgICAgICAgIHJldHVybiBkZWZvYmo7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJjKTsKQEAgLTEyMjcsMTIgKzEyNzMsMTYgQEAKICAgICBQeV9VQ1M0IGNvZGU7CiAKICAgICBjaGFyKiBuYW1lOwotICAgIGludCBuYW1lbGVuOworICAgIFB5X3NzaXplX3QgbmFtZWxlbjsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpsb29rdXAiLCAmbmFtZSwgJm5hbWVsZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobmFtZWxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0tleUVycm9yLCAibmFtZSB0b28gbG9uZyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBpZiAoIV9nZXRjb2RlKHNlbGYsIG5hbWUsIG5hbWVsZW4sICZjb2RlLCAxKSkgeworICAgIGlmICghX2dldGNvZGUoc2VsZiwgbmFtZSwgKGludCluYW1lbGVuLCAmY29kZSwgMSkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0tleUVycm9yLCAidW5kZWZpbmVkIGNoYXJhY3RlciBuYW1lICclcyciLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTI1MCw3ICsxMzAwLDcgQEAKIC8qIFhYWCBBZGQgZG9jIHN0cmluZ3MuICovCiAKIHN0YXRpYyBQeU1ldGhvZERlZiB1bmljb2RlZGF0YV9mdW5jdGlvbnNbXSA9IHsKLSAgICB7ImRlY2ltYWwiLCB1bmljb2RlZGF0YV9kZWNpbWFsLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX2RlY2ltYWxfX2RvY19ffSwKKyAgICBVTklDT0RFREFUQV9VQ0RfREVDSU1BTF9NRVRIT0RERUYKICAgICB7ImRpZ2l0IiwgdW5pY29kZWRhdGFfZGlnaXQsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfZGlnaXRfX2RvY19ffSwKICAgICB7Im51bWVyaWMiLCB1bmljb2RlZGF0YV9udW1lcmljLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX251bWVyaWNfX2RvY19ffSwKICAgICB7ImNhdGVnb3J5IiwgdW5pY29kZWRhdGFfY2F0ZWdvcnksIE1FVEhfVkFSQVJHUywKQEAgLTEzMjcsNyArMTM3Nyw2IEBACiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSB0aGVcblwKIFVuaWNvZGVEYXRhIEZpbGUgRm9ybWF0ICIgVU5JREFUQV9WRVJTSU9OICIuIik7CiAKLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiB1bmljb2RlZGF0YW1vZHVsZSA9IHsKICAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAogICAgICAgICAidW5pY29kZWRhdGEiLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCmluZGV4IDVkNWRjYTguLmVjMTFmYTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKQEAgLTEsNiArMSw2IEBACiAvKiB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAzLjIgKi8KIAotI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMS4wIgorI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMy4wIgogLyogYSBsaXN0IG9mIHVuaXF1ZSBkYXRhYmFzZSByZWNvcmRzICovCiBjb25zdCBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkIF9QeVVuaWNvZGVfRGF0YWJhc2VfUmVjb3Jkc1tdID0gewogICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKQEAgLTEyMCw2ICsxMjAsNyBAQAogICAgIHs0LCAzMCwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAzMSwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAzMiwgMTQsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezE5LCAwLCA1LCAwLCA1LCAwfSwKICAgICB7MTksIDAsIDUsIDAsIDUsIDEwfSwKICAgICB7MTgsIDAsIDUsIDAsIDUsIDB9LApAQCAtMTM2LDcgKzEzNyw2IEBACiAgICAgezE5LCAwLCA1LCAwLCA1LCAxMzZ9LAogICAgIHs3LCAwLCA5LCAwLCA1LCAwfSwKICAgICB7MzAsIDAsIDUsIDAsIDUsIDB9LAotICAgIHsxNCwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezQsIDM2LCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDAsIDE0LCAwLCA1LCAwfSwKICAgICB7NywgMCwgNCwgMCwgNSwgMH0sCkBAIC0xNzcsNiArMTc3LDcgQEAKICAgICB7MTksIDAsIDEsIDAsIDUsIDgwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAwfSwKICAgICB7OCwgMCwgMSwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAxNSwgMCwgNSwgMH0sCiAgICAgezUsIDksIDEsIDAsIDUsIDB9LAogICAgIHs0LCAxLCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDIzNCwgMTQsIDAsIDUsIDB9LApAQCAtMTkwLDcgKzE5MSw2IEBACiAgICAgezI5LCAwLCAxOSwgMCwgNSwgMTcwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAxNzB9LAogICAgIHsxMCwgMCwgMTgsIDAsIDUsIDEzNn0sCi0gICAgezE0LCAwLCAxNSwgMCwgNSwgMH0sCiAgICAgezE0LCAwLCAxLCAwLCA1LCAwfSwKICAgICB7MTQsIDAsIDQsIDAsIDUsIDB9LAogICAgIHsyMSwgMCwgMTksIDAsIDQsIDB9LApAQCAtMjEzLDYgKzIxMywxMCBAQAogICAgIHsyNiwgMCwgMTEsIDAsIDUsIDEzNn0sCiAgICAgezIwLCAwLCAxOSwgMCwgNSwgMH0sCiAgICAgezI3LCAwLCAxMywgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMCwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMSwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMiwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMywgMCwgNSwgMH0sCiAgICAgezksIDAsIDksIDAsIDUsIDEzNn0sCiAgICAgezI3LCAwLCAxMCwgMCwgNSwgMTM2fSwKICAgICB7MjcsIDAsIDE5LCAwLCA1LCAxMzZ9LApAQCAtNjM4LDYgKzY0MiwxMCBAQAogICAgICJTIiwKICAgICAiV1MiLAogICAgICJPTiIsCisgICAgIkxSSSIsCisgICAgIlJMSSIsCisgICAgIkZTSSIsCisgICAgIlBESSIsCiAgICAgTlVMTAogfTsKIGNvbnN0IGNoYXIgKl9QeVVuaWNvZGVfRWFzdEFzaWFuV2lkdGhOYW1lc1tdID0gewpAQCAtMTI3MywzNSArMTI4MSwzNSBAQAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIAogICAgIDAsIDEwNywgMTA3LCAxMDcsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDgsIDEwOCwgCiAgICAgMTA4LCAxMDgsIDEwOCwgMCwgNzgsIDc4LCAxMDksIDExMCwgMTEwLCAxMTEsIDExMiwgMTEzLCAyNiwgMjYsIDgxLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMTE0LCAxMTUsIDExNiwgMTEzLCAwLCAwLCAxMTMsIDExMywgMTE3LCAxMTcsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExOSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMjAsIAotICAgIDEyMSwgMTIyLCAxMTQsIDExNSwgMTE2LCAxMjMsIDEyNCwgMTI1LCAxMjUsIDEyNiwgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgODYsIDgxLCA4MSwgODYsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTEwLCAKLSAgICAxMjgsIDEyOCwgMTEzLCAxMTcsIDExNywgMTI5LCAxMTcsIDExNywgMTE3LCAxMTcsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExOCwgMTE3LCAxMTgsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE4LCAxMTMsIDExNywgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDEwOCwgMjYsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDExOSwgMTE5LCA4MSwgODEsIDI2LCA4NiwgODEsIDgxLCA4NiwgCi0gICAgMTE3LCAxMTcsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTE3LCAxMTcsIAotICAgIDExNywgMTMyLCAxMzIsIDExNywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDEzMywgMTE3LCAxMzQsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCAKKyAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAxMTQsIDExNSwgMTE2LCAxMTMsIDExNywgMCwgMTEzLCAxMTMsIDExOCwgMTE4LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMjAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTIxLCAKKyAgICAxMjIsIDEyMywgMTE0LCAxMTUsIDExNiwgMTI0LCAxMjUsIDEyNiwgMTI2LCAxMjcsIDg2LCA4MSwgODEsIDgxLCA4MSwgODEsIAorICAgIDg2LCA4MSwgODEsIDg2LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDExMCwgCisgICAgMTI5LCAxMjksIDExMywgMTE4LCAxMTgsIDEzMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTksIDExOCwgMTE5LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOSwgMTEzLCAxMTgsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKKyAgICAxMDgsIDI2LCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCAxMjAsIDEyMCwgODEsIDgxLCAyNiwgODYsIDgxLCA4MSwgODYsIAorICAgIDExOCwgMTE4LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDExOCwgMTE4LCAKKyAgICAxMTgsIDEzMywgMTMzLCAxMTgsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCisgICAgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAxMTcsIDExOCwgMTM0LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgCiAgICAgODYsIDg2LCA4NiwgODEsIDg2LCA4NiwgODEsIDg2LCA4MSwgODEsIDgxLCA4NiwgODEsIDg2LCA4MSwgODYsIDgxLCA4NiwgCi0gICAgODEsIDgxLCAwLCAwLCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDExNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2LCAKKyAgICA4MSwgODEsIDAsIDAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIAogICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDgxLCAKQEAgLTEzMTQsMTEgKzEzMjIsMTEgQEAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCA4NiwgODYsIDg2LCAKICAgICAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNywgMCwgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOCwgMCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCAKLSAgICA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4NiwgODYsIDEyMCwgMTIxLCAxMjIsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgMTIxLCAxMjIsIDEyMywgODEsIDgxLCA4MSwgCiAgICAgODYsIDgxLCA4MSwgODYsIDg2LCA4MSwgODEsIDgxLCA4MSwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgCkBAIC0xNDQ0LDQxICsxNDUyLDQwIEBACiAgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAogICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKLSAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIAotICAgIDgxLCA4MSwgODEsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA4MSwgODEsIAorICAgIDgxLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNDk4LDE1ICsxNTA1LDE2IEBACiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2MywgMTY0LCAwLCAKLSAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAxNzIsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTYzLCAxNjQsIDAsIDAsIDAsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIAogICAgIDE0MiwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIApAQCAtMTUyMSw3ICsxNTI5LDcgQEAKICAgICA4MywgNTMsIDgzLCA4MywgODMsIDg1LCA0OCwgODEsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAogICAgIDE1MywgMTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA4NCwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzUsIDEzNSwgMTM1LCAxNzIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxMzgsIDEzOCwgMTM1LCAxMzUsIDEzNSwgMTc0LCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNTUwLDcgKzE1NTgsNyBAQAogICAgIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgxLCA4NiwgMTM5LCAxMzksIDEzOSwgMCwgMCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MSwgODYsIDEzOSwgMTM5LCAxMzUsIDAsIDAsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzNSwgMTM5LCAxMzUsIApAQCAtMTU2NiwxNyArMTU3NCwxNyBAQAogICAgIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIDE0NiwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE0NywgMTM1LCAxNDcsIDEzOSwgMTM5LCAxNDcsIDE0NywgMTM1LCAxNDcsIDE3NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTQ3LCAxMzUsIDE0NywgMTM5LCAxMzksIDE0NywgMTQ3LCAxMzUsIDE0NywgMTc1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgODMsIAogICAgIDgzLCA4MywgODMsIDgzLCA4MywgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4NiwgODEsIAogICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDEzNSwgCiAgICAgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDE3NCwgMTQyLCAxMzksIDEzOSwgNDgsIDQ4LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxNzUsIDE0MiwgMTM5LCAxMzksIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzNSwgMTM1LCAxMzUsIDE3NCwgMTc0LCAwLCAwLCAwLCAKKyAgICAxMzksIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNzUsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCkBAIC0xNTg4LDggKzE1OTYsOCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIAotICAgIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODMsIDE3NSwgODYsIDg2LCA4NiwgODYsIDg2LCAKLSAgICA4MSwgODEsIDg2LCA4NiwgODYsIDg2LCA4MSwgMTM5LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDQ4LCAKKyAgICA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgzLCAxNzYsIDg2LCA4NiwgODYsIDg2LCA4NiwgCisgICAgODEsIDgxLCA4NiwgODYsIDg2LCA4NiwgODEsIDEzOSwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgODYsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgODEsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIApAQCAtMTYwMiw5ICsxNjEwLDkgQEAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTEsIDUxLCA1MSwgNTEsIDUxLCAKICAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAKICAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDgxLCA4MSwgODYsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDgxLCAxNzYsIDE3NywgODYsIDE3OCwgODEsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgODEsIDE3NywgMTc4LCA4NiwgMTc5LCA4MSwgODEsIDgxLCA4MSwgCiAgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc5LCA4NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwLCA4NiwgCiAgICAgODEsIDg2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCkBAIC0xNjEzLDcgKzE2MjEsNyBAQAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDM1LCAxODAsIDQ3LCA0NywgNDQsIDQ3LCAKKyAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCAzNSwgMTgxLCA0NywgNDcsIDQ0LCA0NywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCkBAIC0xNjI1LDY1ICsxNjMzLDY1IEBACiAgICAgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQzLCA0MywgMCwgMCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQzLCAwLCAzOCwgMCwgMzgsIDAsIDM4LCAwLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgCi0gICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIAotICAgIDQzLCAxODEsIDQzLCAxODEsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIAotICAgIDE4MiwgNTgsIDE4MSwgNTgsIDU4LCA3NiwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTgzLCAzOCwgMTgzLCAxODIsIAotICAgIDc2LCA3NiwgNzYsIDQzLCA0MywgNDMsIDE4MSwgMCwgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIDAsIDc2LCA3NiwgCi0gICAgNzYsIDQzLCA0MywgNDMsIDE4MSwgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MywgMzgsIDc2LCAxODQsIDE4NCwgCi0gICAgMCwgMCwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTgzLCAzOCwgMTgzLCAxODIsIDE4NCwgNTgsIDAsIDE4NSwgMTg1LCAKLSAgICAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODcsIDE4NywgMTg3LCAxODgsIDE4OSwgCisgICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIAorICAgIDQzLCAxODIsIDQzLCAxODIsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIAorICAgIDE4MywgNTgsIDE4MiwgNTgsIDU4LCA3NiwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTg0LCAzOCwgMTg0LCAxODMsIAorICAgIDc2LCA3NiwgNzYsIDQzLCA0MywgNDMsIDE4MiwgMCwgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIDAsIDc2LCA3NiwgCisgICAgNzYsIDQzLCA0MywgNDMsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgMzgsIDc2LCAxODUsIDE4NSwgCisgICAgMCwgMCwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTg0LCAzOCwgMTg0LCAxODMsIDE4NSwgNTgsIDAsIDE4NiwgMTg2LCAKKyAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxNzQsIDE3NCwgMTc0LCAxODgsIDE4OSwgCiAgICAgMTkwLCAxOTEsIDg0LCAxOTAsIDE5MCwgMTkwLCAyMiwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5MywgMTk0LCAxOTUsIAogICAgIDE5NiwgMjIsIDIyLCAyMiwgMTM4LCAxOTcsIDE5NywgMTk3LCAyMiwgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgCiAgICAgMjA0LCAyMSwgMjA1LCAxMTAsIDIwNSwgMjA2LCAyMDcsIDIyLCAxOTIsIDE5MiwgMTM4LCAyOCwgMzYsIDIyLCAxOTIsIAogICAgIDEzOCwgMTk3LCAyMDgsIDIwOCwgMTM4LCAxMzgsIDEzOCwgMjA5LCAxNjMsIDE2NCwgMTkyLCAxOTIsIDE5MiwgMTM4LCAKICAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDc4LCAxMzgsIDIwOCwgMTM4LCAxMzgsIDE5MiwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxODYsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAyMTAsIDUxLCAwLCAwLCAzNCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIAotICAgIDIxMSwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxMCwgMzQsIDM0LCAzNCwgMzQsIDIxMCwgMjEwLCAyMTAsIDIxMCwgCi0gICAgMjEwLCAyMTEsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMCwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA1MSwgNTEsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMjE2LCAyMTcsIDg1LCA4NSwgCi0gICAgMjMsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDE3NSwgMTc1LCA4MSwgODEsIAotICAgIDgxLCA4MSwgMTc1LCAxNzUsIDE3NSwgODEsIDgxLCA4MiwgODIsIDgyLCA4MiwgODEsIDgyLCA4MiwgODIsIDE3NSwgMTc1LCAKLSAgICA4MSwgODYsIDgxLCAxNzUsIDE3NSwgODYsIDg2LCA4NiwgODYsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyMTgsIDIxOCwgNDksIDIxOSwgMjYsIDIxOSwgMjE4LCA0OSwgMjYsIDIxOSwgMzUsIDQ5LCA0OSwgCi0gICAgNDksIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDYsIDI2LCA0OSwgMjE5LCAyNiwgNzgsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMjYsIAotICAgIDI2LCAyMTgsIDIxOSwgMjE5LCAyNiwgNDksIDI2LCAyMjAsIDI2LCA0OSwgMjYsIDE4MywgMjIwLCA0OSwgNDksIDIyMSwgCi0gICAgMzUsIDQ5LCA0OSwgNDQsIDQ5LCAzNSwgMTU2LCAxNTYsIDE1NiwgMTU2LCAzNSwgMjYsIDIxOCwgMzUsIDM1LCA0OSwgNDksIAotICAgIDIyMiwgNzgsIDc4LCA3OCwgNzgsIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMjYsIDc4LCAyNiwgMjYsIDQ3LCA4MCwgMjIzLCAKLSAgICAyMjMsIDIyMywgMzcsIDM3LCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAzNywgMzcsIDM3LCAzNywgMjIzLCAyMjQsIAotICAgIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjUsIDIyNSwgMjI1LCAKLSAgICAyMjUsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNSwgCi0gICAgMjI1LCAyMjUsIDIyNSwgMTczLCAxNzMsIDE3MywgNDQsIDQ3LCAxNzMsIDE3MywgMTczLCAxNzMsIDM3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjI2LCAyMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyNiwgMjYsIDI2LCAyNiwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE4NywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDAsIDIxMCwgMjExLCAyMTIsIAorICAgIDIxMywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMjE0LCA1MSwgMCwgMCwgMzQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgCisgICAgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMTQsIDM0LCAzNCwgMzQsIDM0LCAyMTQsIDIxNCwgMjE0LCAKKyAgICAyMTQsIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDAsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAorICAgIDUxLCA1MSwgNTEsIDUxLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDIyMCwgMjIxLCA4NSwgCisgICAgODUsIDIzLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgMTc2LCAxNzYsIAorICAgIDgxLCA4MSwgODEsIDgxLCAxNzYsIDE3NiwgMTc2LCA4MSwgODEsIDgyLCA4MiwgODIsIDgyLCA4MSwgODIsIDgyLCA4MiwgCisgICAgMTc2LCAxNzYsIDgxLCA4NiwgODEsIDE3NiwgMTc2LCA4NiwgODYsIDg2LCA4NiwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMiwgMjIyLCA0OSwgMjIzLCAyNiwgMjIzLCAyMjIsIDQ5LCAyNiwgMjIzLCAzNSwgCisgICAgNDksIDQ5LCA0OSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0NiwgMjYsIDQ5LCAyMjMsIDI2LCA3OCwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCAyNiwgMjYsIDIyMiwgMjIzLCAyMjMsIDI2LCA0OSwgMjYsIDIyNCwgMjYsIDQ5LCAyNiwgMTg0LCAyMjQsIDQ5LCA0OSwgCisgICAgMjI1LCAzNSwgNDksIDQ5LCA0NCwgNDksIDM1LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDM1LCAyNiwgMjIyLCAzNSwgMzUsIDQ5LCAKKyAgICA0OSwgMjI2LCA3OCwgNzgsIDc4LCA3OCwgNDksIDM1LCAzNSwgMzUsIDM1LCAyNiwgNzgsIDI2LCAyNiwgNDcsIDgwLCAyMjcsIAorICAgIDIyNywgMjI3LCAzNywgMzcsIDIyNywgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDM3LCAzNywgMzcsIDM3LCAyMjcsIDIyOCwgCisgICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMjksIAorICAgIDIyOSwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjksIDIyOSwgMjI5LCAKKyAgICAyMjksIDIyOSwgMjI5LCAxNzMsIDE3MywgMTczLCA0NCwgNDcsIDE3MywgMTczLCAxNzMsIDE3MywgMzcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyMzAsIDIzMCwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMwLCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjcsIDIyNiwgMjI2LCAyNiwgMjYsIDQwLCAyNiwgNDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMSwgMjMwLCAyMzAsIDI2LCAyNiwgNDAsIDI2LCA0MCwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDQwLCAyMjgsIDIyOSwgMjI5LCAyMzAsIDc4LCA3OCwgNDAsIDIyOSwgMjMwLCAKLSAgICAyMjgsIDIyOSwgMjMwLCAyMjgsIDc4LCA0MCwgNzgsIDIyOSwgMjMxLCAyMzIsIDc4LCAyMjksIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgMjI5LCAyMjgsIDIyOCwgMjI5LCA0MCwgMjI5LCAyMjksIDIyOCwgMjI4LCA0MCwgMjMwLCA0MCwgMjMwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgMjI5LCAyMzMsIDIyMiwgMjI5LCAyMjIsIDIyMiwgMjI4LCAyMjgsIDIyOCwgNDAsIDQwLCA0MCwgNDAsIDc4LCAyMjgsIAotICAgIDc4LCAyMjgsIDIyOSwgMjI5LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIyOSwgCi0gICAgMjMwLCAyMjgsIDIyOCwgMjI5LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOSwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMzQsIDQwLCAyMzAsIDc4LCAyMjksIDIyOSwgMjI5LCAyMjksIDIyOCwgCi0gICAgMjI4LCAyMjksIDIyOSwgNzgsIDIyNiwgMjM0LCAyMzQsIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIyOCwgMjI4LCAKLSAgICAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIyOSwgMjI5LCAyMzAsIDIzMCwgCi0gICAgMjI5LCAyMjksIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAKLSAgICA0MCwgNzgsIDc4LCAyMjgsIDQwLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNDAsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOSwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIAotICAgIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIzMCwgMjMwLCA3OCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI4LCAyMjgsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzUsIDIzNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNDAsIDIzMiwgMjMzLCAyMzMsIDIzNCwgNzgsIDc4LCA0MCwgMjMzLCAyMzQsIAorICAgIDIzMiwgMjMzLCAyMzQsIDIzMiwgNzgsIDQwLCA3OCwgMjMzLCAyMzUsIDIzNiwgNzgsIDIzMywgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICAyMzMsIDIzMiwgMjMyLCAyMzMsIDQwLCAyMzMsIDIzMywgMjMyLCAyMzIsIDQwLCAyMzQsIDQwLCAyMzQsIDQwLCA0MCwgNDAsIAorICAgIDQwLCAyMzMsIDIzNywgMjI2LCAyMzMsIDIyNiwgMjI2LCAyMzIsIDIzMiwgMjMyLCA0MCwgNDAsIDQwLCA0MCwgNzgsIDIzMiwgCisgICAgNzgsIDIzMiwgMjMzLCAyMzMsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjMzLCAKKyAgICAyMzQsIDIzMiwgMjMyLCAyMzMsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMzLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzOCwgNDAsIDIzNCwgNzgsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMyLCAKKyAgICAyMzIsIDIzMywgMjMzLCA3OCwgMjMwLCAyMzgsIDIzOCwgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMyLCAyMzIsIAorICAgIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMzLCAyMzMsIDIzNCwgMjM0LCAKKyAgICAyMzMsIDIzMywgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIAorICAgIDQwLCA3OCwgNzgsIDIzMiwgNDAsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA0MCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMzLCA3OCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAyMzQsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzIsIDIzMiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzOSwgMjQwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIApAQCAtMTcwMywxNCArMTcxMSwxNCBAQAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMjMsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKLSAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCi0gICAgMjM4LCAyMzgsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKKyAgICAzNCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjI3LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCisgICAgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAorICAgIDI0MiwgMjQyLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCkBAIC0xNzQ1LDE0ICsxNzUzLDE0IEBACiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAKLSAgICAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMTYzLCAxNjQsIDE2MywgMTY0LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAogICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKICAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyOCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgMTYzLCAxNjQsIDc4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMiwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgMTYzLCAxNjQsIDc4LCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIApAQCAtMTc2OSwzMCArMTc3NywzMCBAQAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDE2MywgMTY0LCA5LCAxMCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIAotICAgIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgMTYzLCAxNjQsIDE2MywgMTY0LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyMiwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgNzgsIDIyOCwgNzgsIDc4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgCisgICAgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjI2LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCA3OCwgMjMyLCA3OCwgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIAotICAgIDIyMiwgMjEyLCAyMTIsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDIzOSwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDc4LCAyMjgsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIAorICAgIDIyNiwgMjE2LCAyMTYsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDI0MywgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDc4LCAyMzIsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKQEAgLTE4MzgsMTA1ICsxODQ2LDEwNSBAQAogICAgIDEzOCwgNTIsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDg0LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDEsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMCwgMCwgMCwgMjQyLCAyNDMsIDI0MywgMjQzLCAKLSAgICAyNDAsIDI0NCwgMTcwLCAyNDUsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgCi0gICAgMjQwLCAyNDAsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTAsIAotICAgIDI0MCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjUxLCAyNTIsIDI1MywgMjU0LCAKLSAgICAyNTUsIDI1NSwgMjQ4LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQxLCAyNDAsIDI1NiwgMjU2LCAyNTYsIDI0NCwgCi0gICAgMTcwLCAyNDMsIDI0MCwgMjYsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIAotICAgIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgCi0gICAgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAyNDYsIDI0NywgMjQ3LCAyNDcsIAorICAgIDI0NCwgMjQ4LCAxNzAsIDI0OSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAKKyAgICAyNDQsIDI0NCwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NCwgCisgICAgMjQ0LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNTUsIDI1NiwgMjU3LCAyNTgsIAorICAgIDI1OSwgMjU5LCAyNTIsIDI0OCwgMjQ4LCAyNDgsIDI0OCwgMjQ4LCAyNDUsIDI0NCwgMjYwLCAyNjAsIDI2MCwgMjQ4LCAKKyAgICAxNzAsIDI0NywgMjQ0LCAyNiwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgCisgICAgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAxNzAsIAorICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDI1NywgMTcwLCAxNzAsIDAsIDAsIDI1OCwgMjU4LCAyNTksIDI1OSwgMjQ0LCAyNjAsIDI2MSwgCi0gICAgMjQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAxNzAsIAotICAgIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIAotICAgIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAyNjEsIDE3MCwgMTcwLCAwLCAwLCAyNjIsIDI2MiwgMjYzLCAyNjMsIDI0OCwgMjY0LCAyNjUsIAorICAgIDI1MiwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMTcwLCAKKyAgICAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgCisgICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDI1NywgMTcwLCAxNzAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjQzLCAyNDQsIDI0NCwgMjYwLCAyNjEsIDAsIDAsIDAsIDAsIAorICAgIDI2MSwgMTcwLCAxNzAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjQ3LCAyNDgsIDI0OCwgMjY0LCAyNjUsIDAsIDAsIDAsIDAsIAogICAgIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDAsIDI2MiwgMjYyLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjMsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMTcwLCAxNzAsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMCwgMjY2LCAyNjYsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMCwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjQxLCAyNjYsIDI2NiwgCi0gICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI2MiwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAotICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDAsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI0NSwgMjcwLCAyNzAsIAorICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNjYsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKKyAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKQEAgLTE5NjIsNyArMTk3MCw3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjQ0LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIApAQCAtMTk3MSwxMSArMTk3OSwxMSBAQAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNTMsIDUzLCA1MywgNTMsIAogICAgIDUzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCAxMzgsIDEzOCwgCkBAIC0xOTk5LDcgKzIwMDcsNyBAQAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ0LCA0NywgNDQsIAotICAgIDQ3LCA0NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUyLCAyNjcsIDI2NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTIsIDI3MSwgMjcxLCA0NCwgNDcsIDQ0LCAKICAgICA0NywgMCwgNDQsIDQ3LCA0NCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NywgNDQsIAogICAgIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0yMDA4LDcgKzIwMTYsNyBAQAogICAgIDQ4LCA0OCwgNDgsIDEzNSwgNDgsIDQ4LCA0OCwgMTQyLCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM5LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgODAsIDgwLCA4NSwgMjIxLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCA4MCwgODAsIDg1LCAyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDAsIDAsIDAsIDAsIApAQCAtMjAyNCwxMyArMjAzMiwxMyBAQAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDg2LCAKICAgICA4NiwgODYsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgCiAgICAgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTc0LCA4MywgODMsIAorICAgIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzksIDE3NSwgODMsIDgzLCAKICAgICA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIDUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0yMDYwLDQ5NyArMjA2OCw0OTYgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgODMsIDEzOSwgCiAgICAgMTQyLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMTcwLCAxNzAsIDI3MCwgMTcwLCAyNzAsIDE3MCwgMTcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDE3MCwgMjcwLCAxNzAsIDI3MCwgMTcwLCAxNzAsIDI3MCwgMjcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMCwgMCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAyNzEsIDI3MiwgMjcxLCAyNzMsIDI3MywgMjczLCAyNzMsIAotICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyMTEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAKLSAgICAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMCwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDAsIDI3MSwgMCwgMjcxLCAyNzEsIAotICAgIDAsIDI3MSwgMjcxLCAwLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzMsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAyNzQsIAorICAgIDAsIDAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3NCwgMjc0LCAKICAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCi0gICAgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDE5NSwgMjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDE3MCwgMTcwLCAyNzQsIDE3MCwgMjc0LCAxNzAsIDE3MCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAxNzAsIDI3NCwgMTcwLCAyNzQsIDE3MCwgMTcwLCAyNzQsIDI3NCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDAsIDAsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMjc2LCAyNiwgMCwgMCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc4LCAyNzksIAotICAgIDI3NywgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI3NywgMjgwLCAyODAsIDI4MSwgMjgxLCAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgCi0gICAgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIDI0MywgMjQzLCAyNzgsIDI3OSwgMjc3LCAyNzcsIAotICAgIDI3NywgMjc3LCAyODEsIDI4MSwgMjgxLCAyODIsIDI3NywgMjgyLCAwLCAyNzcsIDI4MiwgMjc3LCAyNzcsIDI4MCwgMjgzLCAKLSAgICAyODQsIDI4MywgMjg0LCAyODMsIDI4NCwgMjg1LCAyNzcsIDI3NywgMjg2LCAyODcsIDI4OCwgMjg4LCAyODksIDAsIDI3NywgCi0gICAgMjkwLCAyODUsIDI3NywgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTE3LCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDE4NywgMCwgMjkxLCAyOTEsIDI5MiwgMjkzLCAyOTIsIDI5MSwgCi0gICAgMjkxLCAyOTQsIDI5NSwgMjkxLCAyOTYsIDI5NywgMjk4LCAyOTcsIDI5NywgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIAotICAgIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTcsIDI5MSwgMzAwLCAzMDEsIDMwMCwgMjkxLCAyOTEsIDMwMiwgMzAyLCAKLSAgICAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgCi0gICAgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAyOTQsIDI5MSwgMjk1LCAzMDMsIAotICAgIDMwNCwgMzAzLCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKLSAgICAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCi0gICAgMjk0LCAzMDEsIDI5NSwgMzAxLCAyOTQsIDI5NSwgMzA2LCAzMDcsIDMwOCwgMzA2LCAzMDYsIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzEwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMTAsIDMxMCwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAwLCAwLCAwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAKLSAgICAwLCAwLCAwLCAyOTMsIDI5MywgMzAxLCAzMDMsIDMxMSwgMjkzLCAyOTMsIDAsIDMxMiwgMzEzLCAzMTMsIDMxMywgMzEzLCAKLSAgICAzMTIsIDMxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0LCAzMTQsIDMxNCwgMjYsIDMwLCAwLCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgODMsIDEzOCwgODMsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAyNzUsIDI3NiwgMjc1LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgCisgICAgMjc3LCAyNzcsIDI3NywgMjc3LCAyMTUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIAorICAgIDI3NSwgMjc1LCAyNzUsIDI3NSwgMCwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDAsIDI3NSwgMCwgMjc1LCAyNzUsIDAsIAorICAgIDI3NSwgMjc1LCAwLCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzcsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAyNzgsIDI3OCwgCisgICAgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTk1LCAyNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMjgwLCAyNiwgMCwgMCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCisgICAgNzEsIDcxLCA3MSwgNzEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgyLCAyODMsIDI4MSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MSwgCisgICAgMjg0LCAyODQsIDI4NSwgMjg1LCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIAorICAgIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI0NywgMjQ3LCAyODIsIDI4MywgMjgxLCAyODEsIDI4MSwgMjgxLCAKKyAgICAyODUsIDI4NSwgMjg1LCAyODYsIDI4MSwgMjg2LCAwLCAyODEsIDI4NiwgMjgxLCAyODEsIDI4NCwgMjg3LCAyODgsIDI4NywgCisgICAgMjg4LCAyODcsIDI4OCwgMjg5LCAyODEsIDI4MSwgMjkwLCAyOTEsIDI5MiwgMjkyLCAyOTMsIDAsIDI4MSwgMjk0LCAyODksIAorICAgIDI4MSwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTE4LCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDE3NCwgMCwgMjk1LCAyOTUsIDI5NiwgMjk3LCAyOTYsIDI5NSwgMjk1LCAyOTgsIAorICAgIDI5OSwgMjk1LCAzMDAsIDMwMSwgMzAyLCAzMDEsIDMwMSwgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAKKyAgICAzMDMsIDMwMywgMzAzLCAzMDEsIDI5NSwgMzA0LCAzMDUsIDMwNCwgMjk1LCAyOTUsIDMwNiwgMzA2LCAzMDYsIDMwNiwgCisgICAgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIAorICAgIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAyOTgsIDI5NSwgMjk5LCAzMDcsIDMwOCwgMzA3LCAKKyAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCisgICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMjk4LCAzMDUsIAorICAgIDI5OSwgMzA1LCAyOTgsIDI5OSwgMzEwLCAzMTEsIDMxMiwgMzEwLCAzMTAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTQsIDMxNCwgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAKKyAgICAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAwLCAyOTcsIAorICAgIDI5NywgMzA1LCAzMDcsIDMxNSwgMjk3LCAyOTcsIDAsIDMxNiwgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTYsIDMxNiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE4LCAzMTgsIDMxOCwgMjYsIDMwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgMCwgMCwgMCwgODMsIDEzOCwgODMsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgODMsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAotICAgIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDAsIDAsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAxMDcsIDAsIDAsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAxMDQsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDAsIDAsIDAsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMzUsIDg2LCAxMzUsIDgxLCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDgxLCAxNzUsIAotICAgIDg2LCAwLCAwLCAwLCAwLCAxNDIsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMzE2LCAzMTYsIDEwNCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAKLSAgICAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgCi0gICAgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMCwgMTM5LCAxMzUsIAotICAgIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTQyLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAotICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKLSAgICAxNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCAKLSAgICAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTQyLCAxNDEsIDgzLCA4MywgCi0gICAgMTg4LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzOSwgMTM1LCAxNTAsIDE1MCwgMTM1LCAxMzUsIDEzNSwgMTQyLCAxNDIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc0LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxNzQsIDE0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIAotICAgIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDgzLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAxMDcsIDAsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMTA3LCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMCwgMTA0LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgCisgICAgMzIwLCAwLCAwLCAwLCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA3LCAxMzUsIDEzNSwgMTM1LCAwLCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgMCwgMTM1LCA4NiwgMTM1LCA4MSwgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCA4MSwgMTc2LCA4NiwgMCwgMCwgMCwgMCwgMTQyLCAKKyAgICAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0LCAxMDQsIAorICAgIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDMyMCwgMzIwLCAKKyAgICAxMDQsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDAsIDEzOSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE0MiwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgCisgICAgODMsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKKyAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDE0MiwgMTQxLCA4MywgODMsIDE4OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDgxLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDE0OSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzNSwgMTUwLCAxNTAsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDE0MiwgMTQyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCAKKyAgICA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NSwgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDgzLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIAorICAgIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNDUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKICAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCiAgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzOSwgMTM5LCAxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDAsIDAsIAorICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM1LCA1MywgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAKLSAgICAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTksIDMxOSwgCi0gICAgMTc1LCAxNzUsIDE3NSwgODAsIDgwLCA4MCwgMzIwLCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODAsIDgwLCA4MSwgODEsIAotICAgIDgxLCA4MSwgODEsIDg2LCA4NiwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEsIAotICAgIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTgsIDMxOCwgCi0gICAgMzE4LCAzMTgsIDMxOCwgMzE4LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIzLCAzMjMsIDE3NiwgMTc2LCAxNzYsIDgwLCA4MCwgODAsIAorICAgIDMyNCwgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA4NiwgCisgICAgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgwLCA4MCwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODYsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODEsIAotICAgIDgxLCA4MSwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MSwgODEsIDgxLCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAwLCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMCwgCisgICAgNDksIDQ5LCAwLCAwLCA0OSwgMCwgMCwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgCisgICAgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgCi0gICAgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgNDksIDM1LCAwLCAwLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMCwgMTMwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTMwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAwLCAKLSAgICAxMzAsIDEzMCwgMCwgMTMwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIAotICAgIDAsIDEzMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDM1LCAwLCAwLCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAKKyAgICAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAwLCAwLCAwLCAwLCAxMzEsIDAsIDEzMSwgCisgICAgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAKKyAgICAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMzIzLCAwLCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDIxOCwgMjE4LCAwLCAwLCAwLCAwLCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMjM3LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI3LCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDIyMiwgMjIyLCAwLCAwLCAwLCAwLCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMjQxLCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMjY4LCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAwLCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIApAQCAtMjU2MCw3NyArMjU2Nyw3NiBAQAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAotICAgIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKQEAgLTI2NDMsMTcgKzI2NDksMTcgQEAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMCwgCi0gICAgMCwgCisgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMCwgMCwgCiB9OwogCiAvKiBkZWNvbXBvc2l0aW9uIGRhdGEgKi8KQEAgLTUxNzgsNyArNTE4NCw2IEBACiAJeyAyNTUsIDcsIDgsIDI1NSwgMCB9LAogCXsgMjU1LCA3LCA5LCAyNTUsIDAgfSwKIAl7IDEsIDUsIDI1NSwgMjU1LCAwIH0sCi0JeyAxNSwgMTQsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDEwLCAyNTUsIDI1NSwgMCB9LAogCXsgMTgsIDI1NSwgMjU1LCAyNTUsIDAgfSwKIAl7IDE5LCAyNTUsIDI1NSwgMjU1LCAwIH0sCkBAIC01MTkxLDYgKzUxOTYsNyBAQAogCXsgMjU1LCAyNTUsIDksIDI1NSwgMCB9LAogCXsgMTksIDMwLCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCA4LCAyNTUsIDI1NSwgMCB9LAorCXsgMjU1LCAyNywgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjIsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDIzLCAyNTUsIDI1NSwgMCB9LAogCXsgOSwgMjU1LCAyNTUsIDI1NSwgMCB9LApAQCAtNTIwNSw4ICs1MjExLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5nZXNfM18yXzBfaW5kZXhbXSA9IHsKICAgICAwLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCAyLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAKICAgICAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyLCAyLCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIAotICAgIDM2LCAyLCAyLCAyLCAzNywgMzgsIDIsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIAotICAgIDUxLCAyLCA1MiwgMiwgMiwgNTMsIDU0LCA1NSwgNTYsIDU3LCAyLCAyLCA1OCwgNTksIDYwLCAyLCAyLCA2MSwgNjIsIDYzLCAKKyAgICAzNiwgMiwgMiwgMiwgMzcsIDM4LCAyLCAzOSwgMiwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIAorICAgIDUwLCAyLCA1MSwgMiwgMiwgNTIsIDUzLCA1NCwgNTUsIDU2LCAyLCA1NywgNTgsIDU5LCA2MCwgMiwgMiwgNjEsIDYyLCA2MywgCiAgICAgNjQsIDY1LCA2NSwgMiwgMiwgMiwgMiwgNjYsIDIsIDY3LCA2OCwgNjksIDcwLCA3MSwgMiwgMiwgMiwgNzIsIDczLCA3NCwgCiAgICAgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDIsIDIsIDIsIDIsIDIsIDIsIDgyLCAyLCAyLCAyLCAyLCAyLCA4MywgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01MjE3LDggKzUyMjMsOCBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTQsIDk1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NiwgNTAsIDUwLCAKLSAgICA5NywgOTgsIDUwLCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk0LCA5NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTYsIDQ5LCA0OSwgCisgICAgOTcsIDk4LCA0OSwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUyMjksMTMgKzUyMzUsMTMgQEAKICAgICAxMTksIDEyMCwgMTIxLCAxMjIsIDIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAyLCAyLCAyLCAyLCAyLCAyLCAxMjgsIDIsIAogICAgIDEyOSwgMTMwLCAxMzEsIDIsIDEzMiwgMiwgMTMzLCAyLCAyLCAyLCAxMzQsIDIsIDIsIDIsIDEzNSwgMTM2LCAxMzcsIDEzOCwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTM5LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNDAsIDIsIDE0MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAotICAgIDUwLCAxNDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE0MCwgMiwgMTQxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDE0MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDE0MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDE0MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMTQ0LCAxNDUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTI2Miw5ICs1MjY4LDkgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OCwgNTAsIDE3OSwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNzgsIDQ5LCAxNzksIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTUwNSw3ICs1NTExLDcgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTU2MjcsNyArNTYzMyw3IEBACiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01Nzg3LDcwOSArNTc5MywyNjcgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDQsIDAsIDAsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDEsIDEsIDAsIDAsIDAsIAorICAgIDQsIDM1LCA4LCA2LCA3LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAxLCAxLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDksIAogICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NSwgNDYsIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDQsIDAsIDAsIDM3LCAzOCwgMzksIDQwLCAKLSAgICA0MSwgNDIsIDEsIDEsIDAsIDAsIDAsIDQsIDM2LCA4LCA2LCA3LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCAxLCAxLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NSwgCi0gICAgNDYsIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAKICAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKLSAgICAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIDksIDAsIAotICAgIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTY0OTcsMTUgKzYwNjEsMjAgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC02NTE1LDMzICs2MDg0LDQ3MCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAorICAgIDksIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhbmdlX3JlY29yZCogZ2V0X2NoYW5nZV8zXzJfMChQeV9VQ1M0IG4pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKaW5kZXggMzgzODg4Mi4uN2NjYjEyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaApAQCAtNiw3ICs2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxleGljb25bXSA9IHsKICAgICA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgODcsIDczLCA4NCwgMjAwLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3NiwgCiAgICAgMTk3LCA4MywgNzcsIDY1LCA3NiwgMjA0LCA4MywgNzMsIDcxLCAyMDYsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDIwNCwgCi0gICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjcsIDc0LCAyMDMsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCA3NywgCisgICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIDY3LCA3NCwgMjAzLCA3NywgCiAgICAgNjUsIDg0LCA3MiwgNjksIDc3LCA2NSwgODQsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA4OSwgODAsIDg0LCA3MywgNjUsIAogICAgIDIwNiwgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgMjAwLCA2NywgNzksIDc3LCA4MCwgNjUsIDg0LCA3MywgCiAgICAgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDY3LCA4NSwgNzgsIDY5LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA4MywgODksIDc3LCAKQEAgLTI3LDI0ICsyNywyNCBAQAogICAgIDc1LCA2NSwgNzgsIDE5MywgMTk0LCA3NywgNzksIDY4LCA3MywgNzAsIDczLCA2OSwgMjEwLCA2OCwgNzksIDIxMiwgNzUsIAogICAgIDY1LCA3OCwgNzEsIDg4LCAyMDEsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4NCwgNzMsIDY2LCA2OSwgCiAgICAgODQsIDY1LCAyMDYsIDc5LCAxOTgsIDczLCA3OCwgNzMsIDg0LCA3MywgNjUsIDIwNCwgNzcsIDY5LCA2OSwgMjA1LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgODksIDY1LCA3OCwgNzcsIDY1LCAyMTAsIDc1LCA3MiwgNzcsIDY5LCAKLSAgICAyMTAsIDg1LCAxMjgsIDg3LCA3MiwgNzMsIDg0LCAxOTcsIDY3LCA2NSwgODIsIDgyLCA3MywgNjksIDIxMCwgNzMsIDEyOCwgCi0gICAgNjUsIDgyLCA4MiwgNzksIDg3LCAxMjgsIDc5LCAxMjgsIDY1LCA2NiwgNzksIDg2LCAxOTcsIDc3LCA2NSwgODIsIDc1LCAKLSAgICAxMjgsIDg5LCA2OSwgMjAwLCA2NSwgODIsIDgyLCA3OSwgMjE1LCA2NywgNzksIDgwLCA4NCwgNzMsIDE5NSwgODAsIDcyLCAKLSAgICA2NSwgODMsIDY5LCA0NSwgMTk3LCA3NywgNzksIDc4LCA3MSwgNzksIDc2LCA3MywgNjUsIDIwNiwgNjgsIDY5LCA4NiwgNjUsIAotICAgIDc4LCA2NSwgNzEsIDY1LCA4MiwgMjAxLCA2NiwgNzYsIDY1LCA2NywgMjAzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4OSwgCi0gICAgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDkwLCA2OSwgMTk2LCAKLSAgICA4NCwgNzIsIDY1LCAyMDUsIDc0LCA3OSwgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIAotICAgIDY5LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDE5NiwgNjYsIDc5LCAyMTYsIDcyLCA2OSwgNjYsIDgyLCA2OSwgCi0gICAgMjE1LCA3NywgNzMsIDY1LCAyMDcsIDgwLCA3NiwgODUsIDIxMSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCAKLSAgICA2OCwgMjExLCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA2OCwgODIsIDY1LCA4NywgNzMsIDc4LCA3MSwgCi0gICAgMjExLCA2NywgNzIsIDc5LCA4MywgNjksIDc5LCA3OCwgMTk5LCA3MiwgNjUsIDc2LCA3MCwgODcsIDczLCA2OCwgODQsIAorICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDIwNCwgNzcsIDg5LCA2NSwgNzgsIDc3LCA2NSwgMjEwLCA4NSwgMTI4LCA3NSwgCisgICAgNzIsIDc3LCA2OSwgMjEwLCA4NywgNzIsIDczLCA4NCwgMTk3LCA2NSwgNjYsIDc5LCA4NiwgMTk3LCA2NywgNjUsIDgyLCAKKyAgICA4MiwgNzMsIDY5LCAyMTAsIDczLCAxMjgsIDY1LCA4MiwgODIsIDc5LCA4NywgMTI4LCA4OSwgNjksIDIwMCwgNzksIDEyOCwgCisgICAgNzcsIDY1LCA4MiwgNzUsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNjcsIDc5LCA4MCwgODQsIDczLCAxOTUsIDgwLCAKKyAgICA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NywgNzcsIDc5LCA3OCwgNzEsIDc5LCA3NiwgNzMsIDY1LCAyMDYsIDY4LCA2OSwgODYsIAorICAgIDY1LCA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgNjYsIDc2LCA2NSwgNjcsIDIwMywgODQsIDczLCA3NiwgMTk3LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA5MCwgNjksIAorICAgIDE5NiwgODQsIDcyLCA2NSwgMjA1LCA3NCwgNzksIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgCisgICAgNzksIDc1LCA2OSwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxOTYsIDY2LCA3OSwgMjE2LCA3MiwgNjksIDY2LCAKKyAgICA4MiwgNjksIDIxNSwgNzcsIDczLCA2NSwgMjA3LCA4MCwgNzYsIDg1LCAyMTEsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIAorICAgIDY1LCA4MiwgNjgsIDIxMSwgNzEsIDY5LCA3OSwgODIsIDcxLCA3MywgNjUsIDIwNiwgNjgsIDgyLCA2NSwgODcsIDczLCA3OCwgCisgICAgNzEsIDIxMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzIsIDY1LCA3NiwgNzAsIDg3LCA3MywgNjgsIDg0LCAKICAgICAyMDAsIDY2LCA2NSwgNzYsIDczLCA3OCwgNjksIDgzLCAxOTcsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDIxMywgODQsIDg3LCAKICAgICA3OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTYsIAotICAgIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNzMsIDE5NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgNzksIDEyOCwgNjUsIDc2LCA2OSwgMTk4LCA4NCwgODcsIDIwNywgCi0gICAgNzIsIDY5LCA2NSwgODYsIDIxNywgNjcsIDc5LCA3OCwgODMsIDc5LCA3OCwgNjUsIDc4LCAyMTIsIDc5LCA4NiwgNjksIAotICAgIDIxMCwgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIAorICAgIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNjUsIDc2LCA2OSwgMTk4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgMTI4LCA4NCwgODcsIDIwNywgCisgICAgNzIsIDY5LCA2NSwgODYsIDIxNywgNzksIDg2LCA2OSwgMjEwLCA2NywgNzksIDc4LCA4MywgNzksIDc4LCA2NSwgNzgsIAorICAgIDIxMiwgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIAogICAgIDIxNSwgNzIsIDY1LCAyMDAsIDc5LCA3OCwgMTk3LCA2OCwgNzksIDg3LCAyMDYsIDcyLCA3MywgNzEsIDIwMCwgNzAsIDg1LCAKICAgICA3NiwgNzYsIDg3LCA3MywgNjgsIDg0LCAyMDAsIDY2LCA4MiwgNjUsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDY5LCA4MSwgODUsIAogICAgIDY1LCAyMDQsIDg0LCA2NSwgMTk5LCA2NiwgNjUsIDgyLCAxMjgsIDY4LCA3OSwgNzcsIDczLCA3OCwgMjA3LCA3OCwgODUsIApAQCAtNjUsNDkgKzY1LDQ5IEBACiAgICAgNzYsIDg1LCAxOTcsIDgzLCA3MiwgNjUsIDgyLCA2NSwgNjgsIDE5MywgODMsIDczLCA3OCwgNzIsIDY1LCA3NiwgMTkzLCAKICAgICA3NSwgNjUsIDEyOCwgODIsIDg1LCA3OCwgNzMsIDE5NSwgODMsIDY1LCA4NSwgODIsIDY1LCA4MywgNzIsIDg0LCA4MiwgCiAgICAgMTkzLCA4NCwgNjksIDg0LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDY5LCA4MywgNjksIDgyLCA2OSwgMjEyLCAKLSAgICA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgNzEsIDg1LCA4MiwgNzcsIDg1LCA3NSwgNzIsIDIwMSwgNzcsIDY1LCAxMjgsIAotICAgIDc3LCA2NSwgODksIDY5LCAyMDMsIDc3LCA2OSwgNjksIDg0LCA2OSwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA4MywgODksIDgyLCA3MywgNjUsIDE5NSwgNzAsIDczLCA4NiwgNjksIDEyOCwgODAsIDY1LCAxMjgsIDg5LCA2NSwgCi0gICAgMTI4LCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgNzMsIDg4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgCi0gICAgNjksIDgwLCA2NywgNzIsIDE5MywgNzgsIDY1LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgMTI4LCA3NiwgNzksIDc4LCAKLSAgICAxOTksIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc1LCA3MywgMTk1LCA3MiwgNjUsIDc3LCA5MCwgMTkzLCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDIwNiwgODIsIDY1LCAxMjgsIAotICAgIDgzLCA2NSwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODYsIDczLCA2OSwgMjEyLCA3NiwgCi0gICAgNjUsIDIwNywgOTAsIDkwLCA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDg4LCAKLSAgICAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDY1LCAxMjgsIDkwLCAKLSAgICA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgODUsIAotICAgIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgOTAsIDkwLCA4MywgODksIDY1LCAxMjgsIAotICAgIDkwLCA5MCwgODMsIDY1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCA5MCwgCi0gICAgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIDEyOCwgCi0gICAgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODAsIAotICAgIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIAotICAgIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAxMjgsIAotICAgIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCA5MCwgCi0gICAgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgODMsIDgwLCAxMjgsIDkwLCA4NywgNzgsIDc0LCAKLSAgICAxMjgsIDkwLCA4NywgNzgsIDY2LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3NCwgMTI4LCA5MCwgODcsIDY1LCA4MiwgNjUsIAotICAgIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIAotICAgIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCA3NywgMTI4LCA5MCwgODUsIDY2LCA4NSwgCi0gICAgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgzLCA3MiwgNjUsIDEyOCwgOTAsIDgyLCA2NSwgCi0gICAgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCA3OSwgCi0gICAgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCA2OSwgCi0gICAgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCA3OCwgNzksIDgyLCAKLSAgICAxMjgsIDkwLCA3MywgNzYsIDY4LCA2OSwgMTI4LCA5MCwgNzMsIDcxLCA5MCwgNjUsIDE5OSwgOTAsIDczLCA3MSwgMTI4LCAKLSAgICA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3MywgNjYsIDEyOCwgOTAsIDczLCAxOTQsIDkwLCA3MywgNTEsIDEyOCwgOTAsIDIwMSwgCi0gICAgOTAsIDcyLCA4OSwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODQsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDkwLCAKLSAgICA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDgwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDcyLCA4NywgNjksIAotICAgIDEyOCwgOTAsIDcyLCA4NywgNjUsIDEyOCwgOTAsIDcyLCA4NSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODQsIDEyOCwgOTAsIAotICAgIDcyLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCA3MiwgCi0gICAgODUsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDEyOCwgOTAsIDcyLCAKLSAgICA4NSwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgMTI4LCAKLSAgICA5MCwgNzIsIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAxMjgsIAotICAgIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA2OSwgODgsIDEyOCwgOTAsIDcyLCA2OSwgODQsIDEyOCwgOTAsIDcyLCA2OSwgCi0gICAgODAsIDEyOCwgOTAsIDcyLCA2OSwgNjksIDEyOCwgOTAsIDcyLCA2OSwgMTI4LCA5MCwgNzIsIDE5NywgOTAsIDcyLCA2NSwgCi0gICAgODgsIDEyOCwgOTAsIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIDEyOCwgCi0gICAgOTAsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIDcyLCAKLSAgICAxMjgsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIDY5LCAKLSAgICA3OCwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgOTAsIAotICAgIDY5LCA1MCwgMTI4LCA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgOTAsIAotICAgIDY1LCA4OSwgNzMsIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAKKyAgICA3MiwgNjUsIDc3LCA5MCwgMTkzLCA4MywgODksIDgyLCA3MywgNjUsIDE5NSwgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIAorICAgIDcxLCA4NSwgODIsIDc3LCA4NSwgNzUsIDcyLCAyMDEsIDc3LCA2NSwgMTI4LCA3NywgNjUsIDg5LCA2OSwgMjAzLCA3NywgCisgICAgNjksIDY5LCA4NCwgNjksIDIwMSwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzAsIDczLCA4NiwgNjksIAorICAgIDEyOCwgODAsIDY1LCAxMjgsIDg5LCA2NSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgNzMsIDg4LCAxMjgsIDY5LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNjksIDgwLCA2NywgNzIsIDE5MywgNzgsIDY1LCAxMjgsIDgzLCA2OSwgODYsIAorICAgIDY5LCA3OCwgMTI4LCA3NiwgNzksIDc4LCAxOTksIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc1LCA3MywgCisgICAgMTk1LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDIwNiwgODIsIDY1LCAKKyAgICAxMjgsIDgzLCA2NSwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODYsIDczLCA2OSwgMjEyLCAKKyAgICA3NiwgNjUsIDIwNywgOTAsIDkwLCA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIAorICAgIDg4LCAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDY1LCAxMjgsIAorICAgIDkwLCA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgCisgICAgODUsIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgOTAsIDkwLCA4MywgODksIDY1LCAKKyAgICAxMjgsIDkwLCA5MCwgODMsIDY1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCAKKyAgICA5MCwgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIAorICAgIDEyOCwgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgCisgICAgODAsIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgCisgICAgOTAsIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAKKyAgICAxMjgsIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCAKKyAgICA5MCwgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgODMsIDgwLCAxMjgsIDkwLCA4NywgNzgsIAorICAgIDc0LCAxMjgsIDkwLCA4NywgNzgsIDY2LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3NCwgMTI4LCA5MCwgODcsIDY1LCA4MiwgCisgICAgNjUsIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA4NSwgNzksIDg4LCAKKyAgICAxMjgsIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCA3NywgMTI4LCA5MCwgODUsIDY2LCAKKyAgICA4NSwgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgzLCA3MiwgNjUsIDEyOCwgOTAsIDgyLCAKKyAgICA2NSwgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCAKKyAgICA3OSwgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCAKKyAgICA2OSwgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCA3OCwgNzksIAorICAgIDgyLCAxMjgsIDkwLCA3MywgNzYsIDY4LCA2OSwgMTI4LCA5MCwgNzMsIDcxLCA5MCwgNjUsIDE5OSwgOTAsIDczLCA3MSwgCisgICAgMTI4LCA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3MywgNjYsIDEyOCwgOTAsIDczLCAxOTQsIDkwLCA3MywgNTEsIDEyOCwgOTAsIAorICAgIDIwMSwgOTAsIDcyLCA4OSwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODQsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDg4LCAxMjgsIAorICAgIDkwLCA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDgwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDcyLCA4NywgCisgICAgNjksIDEyOCwgOTAsIDcyLCA4NywgNjUsIDEyOCwgOTAsIDcyLCA4NSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODQsIDEyOCwgCisgICAgOTAsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCAKKyAgICA3MiwgODUsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDEyOCwgOTAsIAorICAgIDcyLCA4NSwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgCisgICAgMTI4LCA5MCwgNzIsIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAKKyAgICAxMjgsIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA2OSwgODgsIDEyOCwgOTAsIDcyLCA2OSwgODQsIDEyOCwgOTAsIDcyLCAKKyAgICA2OSwgODAsIDEyOCwgOTAsIDcyLCA2OSwgNjksIDEyOCwgOTAsIDcyLCA2OSwgMTI4LCA5MCwgNzIsIDE5NywgOTAsIDcyLCAKKyAgICA2NSwgODgsIDEyOCwgOTAsIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIAorICAgIDEyOCwgOTAsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIAorICAgIDcyLCAxMjgsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIAorICAgIDY5LCA3OCwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgCisgICAgOTAsIDY5LCA1MCwgMTI4LCA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgCisgICAgOTAsIDY1LCA4OSwgNzMsIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAKICAgICAxMjgsIDkwLCA2NSwgODIsIDgxLCA2NSwgMTI4LCA5MCwgNjUsIDgxLCA2OSwgMTk4LCA5MCwgNjUsIDc3LCA4OCwgMTI4LCAKICAgICA5MCwgNjUsIDIwNCwgOTAsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDY1LCA3MywgMjA2LCA5MCwgNjUsIDczLCAxMjgsIDkwLCAKICAgICA2NSwgNzIsIDEyOCwgOTAsIDY1LCAyMDAsIDkwLCA2NSwgNzEsIDEyOCwgOTAsIDY1LCA2OSwgNzAsIDEyOCwgOTAsIDQ4LCAKQEAgLTUyNSw3OSArNTI1LDc5IEBACiAgICAgODQsIDg1LCA4NCwgODQsIDg5LCAxMjgsIDg0LCA4NSwgODQsIDY5LCA4OSwgNjUsIDgzLCA2NSwgODQsIDEyOCwgODQsIDg1LCAKICAgICA4NCwgMTI4LCA4NCwgODUsIDgyLCA4OCwgMTI4LCA4NCwgODUsIDgyLCA4NSwgMTI4LCA4NCwgODUsIDgyLCA4NCwgNzYsIAogICAgIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc5LCA1MCwgMTI4LCA4NCwgODUsIDgyLCA3OCwgODMsIDg0LCA3MywgNzYsIDY5LCAKLSAgICAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDY2LCA2NSwgNzgsIAotICAgIDEyOCwgODQsIDg1LCA4MiwgMTI4LCA4NCwgODUsIDgwLCAxMjgsIDg0LCA4NSwgNzksIDg4LCAxMjgsIDg0LCA4NSwgNzksIAotICAgIDg0LCAxMjgsIDg0LCA4NSwgNzksIDgwLCAxMjgsIDg0LCA4NSwgNzksIDEyOCwgODQsIDg1LCA3OCwgNzgsIDg5LCAxMjgsIAotICAgIDg0LCA4NSwgNzcsIDY5LCA4NCwgNjksIDgzLCAxMjgsIDg0LCA4NSwgNzcsIDY1LCA2OSwgMTI4LCA4NCwgODUsIDc3LCAKLSAgICAxMjgsIDg0LCA4NSwgNzYsIDczLCA4MCwgMTI4LCA4NCwgODUsIDc1LCA4NywgNjksIDc4LCA4NCwgNzMsIDgzLCAxMjgsIAotICAgIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAyMDMsIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg0LCA4NSwgCi0gICAgNzEsIDE3OCwgODQsIDg1LCA2NSwgODIsIDY5LCAxOTksIDg0LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA4NCwgODUsIDY1LCAKLSAgICA2OSwgMTI4LCA4NCwgMjEzLCA4NCwgODQsIDg1LCA4NSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCAKLSAgICA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA2NSwgNzEsIDEyOCwgODQsIDg0LCA4NSwgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIAotICAgIDEyOCwgODQsIDg0LCA4NCwgNjUsIDEyOCwgODQsIDg0LCA4MywgODUsIDEyOCwgODQsIDg0LCA4MywgNzksIDEyOCwgODQsIAotICAgIDg0LCA4MywgNzMsIDEyOCwgODQsIDg0LCA4MywgNjksIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY5LCAxMjgsIDg0LCA4NCwgCi0gICAgODMsIDY1LCAxMjgsIDg0LCA4NCwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzMsIDczLCAxMjgsIDg0LCA4NCwgNzMsIDEyOCwgCi0gICAgODQsIDg0LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDg1LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCA3OSwgMTI4LCAKLSAgICA4NCwgODQsIDcyLCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3MywgMTI4LCA4NCwgODQsIDcyLCA2OSwgNjksIDEyOCwgODQsIAotICAgIDg0LCA3MiwgNjksIDEyOCwgODQsIDg0LCA3MiwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNzIsIDEyOCwgODQsIDg0LCA2OSwgCi0gICAgNzIsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDIwMCwgODQsIDg0LCA2OSwgNzIsIDEyOCwgODQsIDg0LCAKLSAgICA2OSwgMjAwLCA4NCwgODQsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODQsIAotICAgIDg0LCA2NSwgODUsIDEyOCwgODQsIDg0LCA2NSwgNzMsIDEyOCwgODQsIDg0LCA2NSwgNjUsIDEyOCwgODQsIDg0LCA1MCwgCi0gICAgMTI4LCA4NCwgODMsIDg3LCA2OSwgMTI4LCA4NCwgODMsIDg3LCA2NSwgMTI4LCA4NCwgODMsIDg2LCAxMjgsIDg0LCA4MywgCi0gICAgODMsIDY5LCAxMjgsIDg0LCA4MywgODMsIDY1LCAxMjgsIDg0LCA4MywgNzIsIDg1LCA3MSwgODMsIDEyOCwgODQsIDgzLCAKLSAgICA3MiwgNzksIDc5LCA3NSwgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDIwMywgODQsIDgzLCA3MiwgNjksIDgzLCAxMjgsIAotICAgIDg0LCA4MywgNzIsIDY5LCA3MSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgMTk5LCA4NCwgODMsIDcyLCA2OSwgMTI4LCA4NCwgCi0gICAgODMsIDcyLCA2NSwgMTI4LCA4NCwgODMsIDY5LCA4MiwgNjksIDEyOCwgODQsIDgzLCA2NSwgNjgsIDczLCAxMjgsIDg0LCAKLSAgICA4MywgNjUsIDY4LCAyMDEsIDg0LCA4MywgNjUsIDY1LCA2OCwgNzMsIDg5LCAxMjgsIDg0LCA4MywgNjUsIDY1LCAxMjgsIAotICAgIDg0LCA4MywgMTkzLCA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCA4NCwgODIsIDg1LCA4NCwgNzIsIDEyOCwgCi0gICAgODQsIDgyLCA4NSwgNzgsIDc1LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIDg0LCA2OSwgMTk2LCA4NCwgODIsIDg1LCAKLSAgICA3NywgODAsIDY5LCA4NCwgMTI4LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgODIsIDg1LCA2NywgNzUsIDEyOCwgODQsIAotICAgIDgyLCA3OSwgODAsIDczLCA2NywgNjUsIDIwNCwgODQsIDgyLCA3OSwgODAsIDcyLCA4OSwgMTI4LCA4NCwgODIsIDc5LCA3NywgCi0gICAgNzMsIDc1LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAotICAgIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgwLCAKLSAgICA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgCi0gICAgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDIwNiwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc2LCAKLSAgICA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc2LCA3NiwgNjksIDg5LCA2NiwgODUsIDgzLCAxMjgsIAotICAgIDg0LCA4MiwgNzksIDc1LCA4NSwgODQsIDY1LCA4MywgODQsIDIwMSwgODQsIDgyLCA3OSwgNjksIDkwLCA2OSwgNzgsIDczLCAKLSAgICA2NSwgMjA2LCA4NCwgODIsIDczLCA4NSwgNzcsIDgwLCA3MiwgMTI4LCA4NCwgODIsIDczLCA4NCwgNzksIDIxMSwgODQsIAotICAgIDgyLCA3MywgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA3MywgNzcsIDc5LCAKLSAgICA4NSwgMTI4LCA4NCwgODIsIDczLCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzksIDY4LCAxMjgsIAotICAgIDg0LCA4MiwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDc5LCAKLSAgICAyMDYsIDg0LCA4MiwgNzMsIDczLCA4MywgNjUsIDgwLCAxMjgsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIAotICAgIDIxMSwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDc4LCAKLSAgICAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3NiwgNzMsIAotICAgIDY1LCA4NCwgMTk3LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCA4NCwgMTI4LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCAKLSAgICAyMTIsIDg0LCA4MiwgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIAotICAgIDY1LCAyMTAsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDg0LCA4MiwgCi0gICAgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NCwgODIsIDczLCA2NSwgNzgsIAotICAgIDcxLCA3NiwgNjksIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDE5NywgODQsIDgyLCA3MywgNjUsIDEyOCwgCi0gICAgODQsIDgyLCA3MywgMTI4LCA4NCwgODIsIDY5LCA4MywgNzMsIDc2LCA3NiwgNzksIDEyOCwgODQsIDgyLCA2OSwgNzgsIDY4LCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDc4LCAxOTYsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTEsIDEyOCwgODQsIAotICAgIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MCwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDQ5LCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4MiwgNjksIDE5NywgODQsIDgyLCA2OSwgNjUsIDY4LCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDg0LCA4MiwgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDgwLCA2OSwgOTAsIDczLCA4NSwgNzcsIDEyOCwgCi0gICAgODQsIDgyLCA2NSwgNzgsIDgzLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4MCwgNzksIAotICAgIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgMjEyLCA4NCwgODIsIDY1LCA3OCwgCi0gICAgODMsIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgODMsIAotICAgIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3NywgODcsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA3NywgMTI4LCA4NCwgCi0gICAgODIsIDY1LCAyMDUsIDg0LCA4MiwgNjUsIDczLCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3MywgMjA2LCA4NCwgODIsIDY1LCAKLSAgICA3MywgNzYsIDczLCA3OCwgMTk5LCA4NCwgODIsIDY1LCA3MCwgNzAsIDczLCA2NywgMTI4LCA4NCwgODIsIDY1LCA3MCwgNzAsIAotICAgIDczLCAxOTUsIDg0LCA4MiwgNjUsIDY4LCAxOTcsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA4MiwgCi0gICAgNjUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDEyOCwgODQsIDc5LCA4OCwgMTI4LCA4NCwgNzksIDg3LCA2OSwgODIsIDEyOCwgCi0gICAgODQsIDc5LCA4NSwgODIsIDc4LCA3OSwgNzMsIDIxMSwgODQsIDc5LCA4NCwgNjUsIDIwNCwgODQsIDc5LCA4NCwgMTI4LCAKLSAgICA4NCwgNzksIDgyLCA4NCwgNzksIDczLCA4MywgMTk3LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgODMsIDEyOCwgODQsIAotICAgIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDIxMSwgODQsIDc5LCA4MiwgNjcsIDcyLCAxMjgsIDg0LCA3OSwgODEsIDEyOCwgCi0gICAgODQsIDc5LCA4MCwgNjYsIDY1LCA4MiwgMTI4LCA4NCwgNzksIDgwLCA0NSwgNzYsIDczLCA3MSwgNzIsIDg0LCA2OSwgMTk2LCAKLSAgICA4NCwgNzksIDgwLCAxMjgsIDg0LCA3OSwgMjA4LCA4NCwgNzksIDc5LCA4NCwgNzIsIDEyOCwgODQsIDc5LCA3OSwgNzgsIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCA3OSwgNzgsIDcxLCA4NSwgNjksIDEyOCwgODQsIDc5LCA3OCwgCi0gICAgNzEsIDg1LCAxOTcsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTYsIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNjksIDQ1LCA1NSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU0LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTMsIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MiwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUxLCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDY5LCA0NSwgNTAsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgMTI4LCAKLSAgICA4NCwgNzksIDc4LCA2NSwgMjA0LCA4NCwgNzksIDc3LCA4MCwgNzMsIDEyOCwgODQsIDc5LCA3NywgNjUsIDg0LCA3OSwgCi0gICAgMTI4LCA4NCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzUsIDg5LCAyMDcsIDg0LCA3OSwgNzMsIDc2LCAKLSAgICA2OSwgODQsIDEyOCwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA3OSwgNjgsIDIwNywgODQsIAotICAgIDc5LCA2NSwgNzgsIDY4LCA2NSwgNzUsIDcyLCA3MywgNjUsIDg0LCAxMjgsIDg0LCA3OSwgNjUsIDEyOCwgODQsIDc4LCAKKyAgICAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDc1LCA3MywgODMsIAorICAgIDIwMCwgODQsIDg1LCA4MiwgNjYsIDY1LCA3OCwgMTI4LCA4NCwgODUsIDgyLCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgODQsIDg1LCA3OSwgODQsIDEyOCwgODQsIDg1LCA3OSwgODAsIDEyOCwgODQsIDg1LCA3OSwgCisgICAgMTI4LCA4NCwgODUsIDc4LCA3OCwgODksIDEyOCwgODQsIDg1LCA3NywgNjksIDg0LCA2OSwgODMsIDEyOCwgODQsIDg1LCAKKyAgICA3NywgNjUsIDY5LCAxMjgsIDg0LCA4NSwgNzcsIDEyOCwgODQsIDg1LCA3NiwgNzMsIDgwLCAxMjgsIDg0LCA4NSwgNzUsIAorICAgIDg3LCA2OSwgNzgsIDg0LCA3MywgODMsIDEyOCwgODQsIDg1LCA3NSwgMTI4LCA4NCwgODUsIDcxLCA4MiwgNzMsIDIwMywgCisgICAgODQsIDg1LCA3MSwgNTAsIDEyOCwgODQsIDg1LCA3MSwgMTc4LCA4NCwgODUsIDY1LCA4MiwgNjksIDE5OSwgODQsIDg1LCAKKyAgICA2NSwgNjksIDgwLCAxMjgsIDg0LCA4NSwgNjUsIDY5LCAxMjgsIDg0LCAyMTMsIDg0LCA4NCwgODUsIDg1LCAxMjgsIDg0LCAKKyAgICA4NCwgODUsIDY4LCA2OCwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDY1LCA3MSwgMTI4LCA4NCwgODQsIAorICAgIDg1LCAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgMTI4LCA4NCwgODQsIDg0LCA2NSwgMTI4LCA4NCwgODQsIDgzLCA4NSwgCisgICAgMTI4LCA4NCwgODQsIDgzLCA3OSwgMTI4LCA4NCwgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2OSwgNjksIDEyOCwgCisgICAgODQsIDg0LCA4MywgNjksIDEyOCwgODQsIDg0LCA4MywgNjUsIDEyOCwgODQsIDg0LCA3OSwgNzksIDEyOCwgODQsIDg0LCAKKyAgICA3MywgNzMsIDEyOCwgODQsIDg0LCA3MywgMTI4LCA4NCwgODQsIDcyLCA4NywgNjksIDEyOCwgODQsIDg0LCA3MiwgODUsIAorICAgIDEyOCwgODQsIDg0LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIAorICAgIDg0LCA4NCwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2NSwgNjUsIDEyOCwgCisgICAgODQsIDg0LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCAKKyAgICA4NCwgODQsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjUsIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgODQsIDY1LCA4NSwgMTI4LCA4NCwgODQsIDY1LCA3MywgMTI4LCA4NCwgCisgICAgODQsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDUwLCAxMjgsIDg0LCA4MywgODcsIDY5LCAxMjgsIDg0LCA4MywgODcsIDY1LCAKKyAgICAxMjgsIDg0LCA4MywgODYsIDEyOCwgODQsIDgzLCA4MywgNjksIDEyOCwgODQsIDgzLCA4MywgNjUsIDEyOCwgODQsIDgzLCAKKyAgICA3MiwgODUsIDcxLCA4MywgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgCisgICAgMjAzLCA4NCwgODMsIDcyLCA2OSwgODMsIDEyOCwgODQsIDgzLCA3MiwgNjksIDcxLCAxMjgsIDg0LCA4MywgNzIsIDY5LCAKKyAgICAxOTksIDg0LCA4MywgNzIsIDY5LCAxMjgsIDg0LCA4MywgNzIsIDY1LCAxMjgsIDg0LCA4MywgNjksIDgyLCA2OSwgMTI4LCAKKyAgICA4NCwgODMsIDY1LCA2OCwgNzMsIDEyOCwgODQsIDgzLCA2NSwgNjgsIDIwMSwgODQsIDgzLCA2NSwgNjUsIDY4LCA3MywgODksIAorICAgIDEyOCwgODQsIDgzLCA2NSwgNjUsIDEyOCwgODQsIDgzLCAxOTMsIDg0LCA4MiwgODksIDY2LCA3NiwgNzMsIDc5LCAyMDYsIAorICAgIDg0LCA4MiwgODUsIDg0LCA3MiwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNzUsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDY3LCA2NSwgCisgICAgODQsIDY5LCAxOTYsIDg0LCA4MiwgODUsIDc3LCA4MCwgNjksIDg0LCAxMjgsIDg0LCA4MiwgODUsIDY5LCAxMjgsIDg0LCAKKyAgICA4MiwgODUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA2NSwgMjA0LCA4NCwgODIsIDc5LCA4MCwgNzIsIAorICAgIDg5LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgCisgICAgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3OCwgMTI4LCA4NCwgODIsIAorICAgIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDg0LCAKKyAgICA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgMjA2LCA4NCwgODIsIAorICAgIDc5LCA3NywgNzMsIDc1LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzYsIDc2LCAKKyAgICA2OSwgODksIDY2LCA4NSwgODMsIDEyOCwgODQsIDgyLCA3OSwgNzUsIDg1LCA4NCwgNjUsIDgzLCA4NCwgMjAxLCA4NCwgODIsIAorICAgIDc5LCA2OSwgOTAsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDg0LCA4MiwgNzMsIDg1LCA3NywgODAsIDcyLCAxMjgsIDg0LCA4MiwgCisgICAgNzMsIDg0LCA3OSwgMjExLCA4NCwgODIsIDczLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCAKKyAgICA3MywgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIAorICAgIDgwLCA3OSwgNjgsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCA3MywgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDE5NywgCisgICAgODQsIDgyLCA3MywgNzksIDIwNiwgODQsIDgyLCA3MywgNzMsIDgzLCA2NSwgODAsIDEyOCwgODQsIDgyLCA3MywgNzEsIDgyLCAKKyAgICA2NSwgNzcsIDc3LCA3OSwgMjExLCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNzMsIDcxLCA3OSwgODIsIAorICAgIDcxLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgODIsIDczLCA3MCwgCisgICAgNzksIDc2LCA3MywgNjUsIDg0LCAxOTcsIDg0LCA4MiwgNzMsIDY4LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCA4MiwgNzMsIDY4LCAKKyAgICA2OSwgNzgsIDIxMiwgODQsIDgyLCA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIAorICAgIDg1LCA3NiwgNjUsIDIxMCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODIsIDc5LCA4NSwgNzgsIDE5NiwgCisgICAgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg0LCA4MiwgNzMsIAorICAgIDY1LCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4NCwgODIsIDczLCA2NSwgCisgICAgMTI4LCA4NCwgODIsIDczLCAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4NCwgODIsIDY5LCAKKyAgICA3OCwgNjgsIDEyOCwgODQsIDgyLCA2OSwgNzgsIDE5NiwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MSwgCisgICAgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUwLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCAKKyAgICA0NSwgNDksIDEyOCwgODQsIDgyLCA2OSwgNjksIDEyOCwgODQsIDgyLCA2OSwgMTk3LCA4NCwgODIsIDY5LCA2NSwgNjgsIAorICAgIDczLCA3OCwgNzEsIDEyOCwgODQsIDgyLCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgODAsIDY5LCA5MCwgNzMsIDg1LCA3NywgCisgICAgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDg2LCA2OSwgODIsIDgzLCA2NSwgMjA0LCA4NCwgODIsIDY1LCA3OCwgODMsIDgwLCAKKyAgICA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCAyMTIsIDg0LCA4MiwgNjUsIAorICAgIDc4LCA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCAKKyAgICA4MywgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc3LCA4NywgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDc3LCAxMjgsIAorICAgIDg0LCA4MiwgNjUsIDIwNSwgODQsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDczLCAyMDYsIDg0LCA4MiwgCisgICAgNjUsIDczLCA3NiwgNzMsIDc4LCAxOTksIDg0LCA4MiwgNjUsIDcwLCA3MCwgNzMsIDY3LCAxMjgsIDg0LCA4MiwgNjUsIDcwLCAKKyAgICA3MCwgNzMsIDE5NSwgODQsIDgyLCA2NSwgNjgsIDE5NywgODQsIDgyLCA2NSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODQsIAorICAgIDgyLCA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgMTI4LCA4NCwgNzksIDg4LCAxMjgsIDg0LCA3OSwgODcsIDY5LCA4MiwgCisgICAgMTI4LCA4NCwgNzksIDg1LCA4MiwgNzgsIDc5LCA3MywgMjExLCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgNzksIDg0LCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDg0LCA3OSwgNzMsIDgzLCAxOTcsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgCisgICAgMTI4LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgMjExLCA4NCwgNzksIDgyLCA2NywgNzIsIDEyOCwgODQsIDc5LCAKKyAgICA4MSwgMTI4LCA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAxMjgsIDg0LCA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIAorICAgIDY5LCAxOTYsIDg0LCA3OSwgODAsIDEyOCwgODQsIDc5LCAyMDgsIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgNzksIAorICAgIDc5LCA3OCwgMTI4LCA4NCwgNzksIDc4LCA3OSwgODMsIDEyOCwgODQsIDc5LCA3OCwgNzEsIDg1LCA2OSwgMTI4LCA4NCwgCisgICAgNzksIDc4LCA3MSwgODUsIDE5NywgODQsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NiwgMTI4LCAKKyAgICA4NCwgNzksIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIDEyOCwgODQsIDc5LCA3OCwgNjksIAorICAgIDQ1LCA1MywgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgCisgICAgODQsIDc5LCA3OCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDg0LCA3OSwgNzcsIDgwLCA3MywgMTI4LCA4NCwgNzksIDc3LCA2NSwgODQsIAorICAgIDc5LCAxMjgsIDg0LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3NSwgODksIDIwNywgODQsIDc5LCA3MywgCisgICAgNzYsIDY5LCA4NCwgMTI4LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDc5LCA2OCwgMjA3LCAKKyAgICA4NCwgNzksIDY1LCA3OCwgNjgsIDY1LCA3NSwgNzIsIDczLCA2NSwgODQsIDEyOCwgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIAogICAgIDEyOCwgODQsIDc2LCA4NiwgMTI4LCA4NCwgNzYsIDg1LCAxMjgsIDg0LCA3NiwgNzksIDEyOCwgODQsIDc2LCA3MywgMTI4LCAKICAgICA4NCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgODQsIDc2LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDg1LCAxMjgsIAogICAgIDg0LCA3NiwgNzIsIDc5LCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3MywgMTI4LCA4NCwgCkBAIC03OTYsNDA5ICs3OTYsNDEwIEBACiAgICAgNjksIDg0LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA4MywgODUsIDY1LCAKICAgICAxMjgsIDgzLCAyMTMsIDgzLCA4NCwgODgsIDEyOCwgODMsIDg0LCA4NywgNjUsIDEyOCwgODMsIDg0LCA4NSwgNjgsIDg5LCAKICAgICAxMjgsIDgzLCA4NCwgODUsIDY3LCA3NSwgNDUsIDc5LCA4NSwgMjEyLCA4MywgODQsIDgzLCAxMjgsIDgzLCA4NCwgODIsIAotICAgIDc5LCA3NSwgNjksIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDU3LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTUsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIAotICAgIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgMTk3LCA4MywgODQsIDgyLCA3MywgODAsIDY5LCAKLSAgICAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIAotICAgIDczLCA3NSwgNjksIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDczLCA2OCwgNjksIDEyOCwgCi0gICAgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzYsIDIxNywgODMsIDg0LCA4MiwgNjksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDgzLCAKLSAgICA4NCwgODIsIDY5LCA4MywgMjExLCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIAotICAgIDY1LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NywgNjYsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDY1LCA4NCwgODUsIDc3LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgNzcsIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNjUsIDg0LCA4NSwgMjA1LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIAotICAgIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgCi0gICAgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCAKLSAgICA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIAotICAgIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIDcyLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIAotICAgIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAotICAgIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgCi0gICAgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCAKLSAgICA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgODQsIDY5LCA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIAotICAgIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgCi0gICAgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDY1LCA4NSwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA4MywgCi0gICAgMTI4LCA4MywgODQsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDgzLCA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIAotICAgIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgCi0gICAgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCAKLSAgICA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAKLSAgICAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCAKLSAgICA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIAotICAgIDg1LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAxMjgsIDgzLCA4MywgNzksIDc5LCAxMjgsIDgzLCA4MywgCi0gICAgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgCi0gICAgODMsIDgzLCA3MywgNzMsIDEyOCwgODMsIDgzLCA3MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIAotICAgIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDg1LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgCi0gICAgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgCi0gICAgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIAotICAgIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAKLSAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgCi0gICAgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCAKLSAgICA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIAotICAgIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCAKLSAgICA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgCi0gICAgNjUsIDEyOCwgODMsIDgzLCA2NSwgNzMsIDEyOCwgODMsIDgzLCA2NSwgNjUsIDEyOCwgODMsIDgzLCA1MSwgMTI4LCA4MywgCi0gICAgODMsIDUwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCAKLSAgICA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIAotICAgIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgCi0gICAgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCAKLSAgICA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgMTI4LCA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCAKLSAgICA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzYsIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIAotICAgIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgCi0gICAgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCAKLSAgICA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA2OCwgNjksIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgCi0gICAgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIAotICAgIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAKLSAgICAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA4MywgODAsIAotICAgIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgCi0gICAgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCAKLSAgICA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIAotICAgIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgCi0gICAgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAKLSAgICAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIAotICAgIDE5NywgODMsIDgwLCA2NSwgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIAotICAgIDg3LCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgCi0gICAgNjUsIDg2LCA2OSwgMjE3LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCAKLSAgICA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIAotICAgIDgzLCA3OSwgODUsIDEyOCwgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIAotICAgIDc5LCA3OSwgMjA2LCA4MywgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgCi0gICAgNzgsIDEyOCwgODMsIDc5LCA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCAKLSAgICA2OCwgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDIxMSwgODMsIDc5LCA3MiwgMTI4LCA4MywgNzksIAotICAgIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAyMTIsIAotICAgIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIDIxMCwgCi0gICAgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAKLSAgICA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIAotICAgIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAKLSAgICAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzgsIDc5LCA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCAKLSAgICA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgMTk3LCA4MywgNzgsIDY1LCA3MywgNzYsIDEyOCwgODMsIAotICAgIDc4LCAxOTMsIDgzLCA3NywgNzksIDc1LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgODIsIDc1LCA3MywgNzgsIDE5OSwgCi0gICAgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAKLSAgICAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIAotICAgIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgCi0gICAgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgMjEyLCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAKLSAgICAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgMTI4LCA4MywgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjgsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDY3LCAxOTcsIDgzLCA3NiwgCi0gICAgNjksIDY5LCA4MCwgMjE3LCA4MywgNzYsIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCAKLSAgICA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgNjUsIAotICAgIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCA4NywgCi0gICAgMTI4LCA4MywgNzUsIDg1LCA3NiwgNzYsIDEyOCwgODMsIDc1LCA4NSwgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCAKLSAgICA3OSwgMjA2LCA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDczLCA2OSwgODIsIDEyOCwgODMsIDc1LCAyMDEsIDgzLCAKLSAgICA3NSwgNjksIDg3LCA2OSwgMTk2LCA4MywgNzUsIDY1LCA4NCwgNjksIDEyOCwgODMsIDc1LCAxMjgsIDgzLCA3NCwgNjksIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgODIsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA4OSwgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCA4MywgNzMsIDg4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCAKLSAgICA3MiwgMjExLCA4MywgNzMsIDg4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgODMsIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCAKLSAgICA4MywgNzMsIDg4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgCi0gICAgNzMsIDc4LCAxOTksIDgzLCA3MywgODgsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgODMsIDczLCA4OCwgNDUsIDc2LCAKLSAgICA3MywgNzgsIDE5NywgODMsIDczLCAyMTYsIDgzLCA3MywgODQsIDY5LCAxMjgsIDgzLCA3MywgODMsIDY1LCAxMjgsIDgzLCAKLSAgICA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCi0gICAgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgCi0gICAgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIAotICAgIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIAotICAgIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTEsIAotICAgIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUwLCAxMjgsIDgzLCA3MywgCi0gICAgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDczLCAKLSAgICA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgODMsIAotICAgIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAKLSAgICAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIAotICAgIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgMjA2LCA4MywgCi0gICAgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCAKLSAgICA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIDEyOCwgODMsIAotICAgIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgCi0gICAgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgCi0gICAgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCAKLSAgICA3MywgNzEsIDUyLCAxMjgsIDgzLCA3MywgNzEsIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCAKLSAgICA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgMjExLCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIAotICAgIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDY2LCAxOTcsIDgzLCAyMDEsIDgzLCA3MiwgODksIDg4LCAxMjgsIAotICAgIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCA3MiwgODksIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgCi0gICAgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIDg5LCA2OSwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAKLSAgICAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIAotICAgIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAxMjgsIDgzLCA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIAotICAgIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgCi0gICAgNzIsIDg1LCA4NSwgMTI4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCAKLSAgICA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgNzIsIDg1LCA3MCwgCi0gICAgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCA3MiwgODUsIDY5LCAKLSAgICA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIAotICAgIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzcsIDgwLCAKLSAgICAxMjgsIDgzLCA3MiwgODIsIDczLCA3MywgMTI4LCA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA4NywgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIAotICAgIDcyLCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgCi0gICAgODMsIDcyLCA3OSwgODIsIDg0LCA2OSwgNzgsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY3LCA2NSwgNzUsIAotICAgIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIAotICAgIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCAKLSAgICA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgCi0gICAgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgCi0gICAgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIAotICAgIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCAyMTIsIDgzLCA3MiwgNzksIDgxLCAxMjgsIDgzLCA3MiwgNzksIDIwOSwgODMsIDcyLCA3OSwgODAsIDEyOCwgCi0gICAgODMsIDcyLCA3OSwgNzksIDg0LCA3MywgNzgsIDE5OSwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAKLSAgICAxMjgsIDgzLCA3MiwgNzksIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgMTk3LCA4MywgNzIsIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIAotICAgIDY1LCA3NiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgCi0gICAgNzIsIDczLCA4MiwgMjEyLCA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDIxMCwgODMsIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIAotICAgIDg0LCAyMDcsIDgzLCA3MiwgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgCi0gICAgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAKLSAgICAxOTMsIDgzLCA3MiwgNzMsIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIAotICAgIDcyLCA3MywgNjgsIDEyOCwgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIAotICAgIDgzLCA3MiwgNjksIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgODUsIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCAKLSAgICA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgCi0gICAgODMsIDcyLCA3MywgNzEsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIAotICAgIDgzLCA3MiwgNjksIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIAotICAgIDY1LCA4NCwgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIAotICAgIDgzLCA3MiwgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgODYsIDczLCA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCAKLSAgICA2NSwgODQsIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIAotICAgIDgyLCA4MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgODIsIDUwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgCi0gICAgNzcsIDgyLCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIAotICAgIDE5NiwgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgNjgsIDY4LCAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAKLSAgICAxMjgsIDgzLCA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCAKLSAgICA2NSwgMjE1LCA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCAKLSAgICA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIAotICAgIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgCi0gICAgNzgsIDg0LCAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgNDUsIAotICAgIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIDEyOCwgCi0gICAgODMsIDY5LCA4NSwgNzgsIDg5LCA2NSwgNzcsIDEyOCwgODMsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNjksIDg0LCAKLSAgICA3MCwgNzksIDc4LCAxMjgsIDgzLCA2OSwgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4MywgODEsIAotICAgIDg1LCA3MywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgCi0gICAgNjksIDgyLCA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAKLSAgICAyMTEsIDgzLCA2OSwgODEsIDg1LCA2OSwgNzgsIDY3LCAxOTcsIDgzLCA2OSwgODAsIDg0LCA2OSwgNzcsIDY2LCA2OSwgODIsIAotICAgIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgCi0gICAgNzksIDIxMCwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgzLCA2OSwgNzgsIDg0LCA3MywgMTI4LCA4MywgNjksIDc3LCAKLSAgICA4NSwgNzgsIDY3LCA3MywgMTkzLCA4MywgNjksIDc3LCA3NSwgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDc3LCA3NSwgCi0gICAgMTI4LCA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDY5LCA3NywgNzMsIDgzLCA3OSwgNzAsIAotICAgIDIxMiwgODMsIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA3NywgCi0gICAgNzMsIDc4LCA3MywgNzcsIDE5MywgODMsIDY5LCA3NywgNzMsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA4MywgNjksIDc3LCAKLSAgICA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgMjA2LCA4MywgNjksIAotICAgIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCAKLSAgICA3NiwgMTk3LCA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIAotICAgIDc5LCA3MywgNjcsIDY5LCAxOTYsIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUwLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAKLSAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgCi0gICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIAotICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTIsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUzLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTUsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTIsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgCi0gICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIAotICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDksIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCAKLSAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAKLSAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIAotICAgIDE5MywgODMsIDY5LCA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIAotICAgIDgzLCA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgCisgICAgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAorICAgIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU3LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTUsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCAKKyAgICA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgCisgICAgMTk3LCA4MywgODQsIDgyLCA3MywgODAsIDY5LCAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCAKKyAgICA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIDczLCA3NSwgNjksIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDczLCA2OCwgNjksIDEyOCwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzYsIDIxNywgODMsIDg0LCA4MiwgCisgICAgNjksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDgzLCA4NCwgODIsIDY5LCA4MywgMjExLCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCAKKyAgICA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIDY1LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NywgNjYsIAorICAgIDY5LCA4MiwgODIsIDg5LCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDc3LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgCisgICAgNjUsIDg0LCA4NSwgNzcsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgMjA1LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCAKKyAgICA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIAorICAgIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgCisgICAgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCAKKyAgICA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIAorICAgIDcyLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgCisgICAgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgCisgICAgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIAorICAgIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgCisgICAgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgODQsIDY5LCAKKyAgICA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIDEyOCwgODMsIAorICAgIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDY1LCA4NSwgCisgICAgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA4NCwgCisgICAgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA4MywgMTI4LCA4MywgODQsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDgzLCAKKyAgICA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgCisgICAgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgCisgICAgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCAKKyAgICA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIAorICAgIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIAorICAgIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIDg1LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgCisgICAgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAKKyAgICAxMjgsIDgzLCA4MywgNzksIDc5LCAxMjgsIDgzLCA4MywgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCAKKyAgICA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgODMsIDgzLCA3MywgNzMsIDEyOCwgODMsIDgzLCA3MywgNjksIAorICAgIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIAorICAgIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgCisgICAgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAKKyAgICAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIAorICAgIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKKyAgICA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAorICAgIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgCisgICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCAKKyAgICA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDgzLCA2NSwgNzgsIAorICAgIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCAKKyAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgODMsIDgzLCA2NSwgNzMsIDEyOCwgODMsIDgzLCA2NSwgCisgICAgNjUsIDEyOCwgODMsIDgzLCA1MSwgMTI4LCA4MywgODMsIDUwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgCisgICAgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIAorICAgIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgCisgICAgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCAKKyAgICA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIAorICAgIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgCisgICAgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzYsIAorICAgIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgCisgICAgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA2OCwgNjksIAorICAgIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgCisgICAgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCA2NywgNzMsIAorICAgIDY1LCA3NiwgMTI4LCA4MywgODAsIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgCisgICAgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIAorICAgIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIAorICAgIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgCisgICAgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgODMsIDgwLCA2NSwgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCAKKyAgICA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIDg3LCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIAorICAgIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMjE3LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgCisgICAgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCAKKyAgICA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgODUsIDEyOCwgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIAorICAgIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIDc5LCA3OSwgMjA2LCA4MywgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIAorICAgIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgNzgsIDEyOCwgODMsIDc5LCA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgCisgICAgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIAorICAgIDIxMSwgODMsIDc5LCA3MiwgMTI4LCA4MywgNzksIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgCisgICAgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIAorICAgIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAyMTIsIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgCisgICAgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIDIxMCwgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgCisgICAgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCAKKyAgICA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzgsIDc5LCAKKyAgICA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgMTk3LCAKKyAgICA4MywgNzgsIDY1LCA3MywgNzYsIDEyOCwgODMsIDc4LCAxOTMsIDgzLCA3NywgNzksIDc1LCA3MywgNzgsIDE5OSwgODMsIAorICAgIDc3LCA3MywgODIsIDc1LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgCisgICAgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIAorICAgIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgCisgICAgMjEyLCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgMTI4LCA4MywgNzYsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjgsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIAorICAgIDgzLCA3NiwgNzMsIDY3LCAxOTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgMjE3LCA4MywgNzYsIDY5LCA2OSwgODAsIDczLCA3OCwgCisgICAgMTk5LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCAKKyAgICA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgNjUsIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIAorICAgIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCA4NywgMTI4LCA4MywgNzUsIDg1LCA3NiwgNzYsIDEyOCwgODMsIDc1LCA4NSwgCisgICAgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCA3OSwgMjA2LCA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDczLCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDc1LCAyMDEsIDgzLCA3NSwgNjksIDg3LCA2OSwgMTk2LCA4MywgNzUsIDY1LCA4NCwgNjksIAorICAgIDEyOCwgODMsIDc1LCAxMjgsIDgzLCA3NCwgNjksIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgCisgICAgODIsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA4OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCA4MywgNzMsIDg4LCAKKyAgICA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCA3MiwgMjExLCA4MywgNzMsIDg4LCA4NCwgNzIsIDEyOCwgODMsIAorICAgIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAKKyAgICA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNzMsIDg4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgCisgICAgMTI4LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA3MywgODgsIDQ1LCA4MCwgNjksIDgyLCAKKyAgICA0NSwgNjksIDIwNSwgODMsIDczLCA4OCwgNDUsIDc2LCA3MywgNzgsIDE5NywgODMsIDczLCAyMTYsIDgzLCA3MywgODQsIAorICAgIDY5LCAxMjgsIDgzLCA3MywgODMsIDY1LCAxMjgsIDgzLCA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCAKKyAgICA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCAKKyAgICA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgCisgICAgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgCisgICAgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIAorICAgIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgCisgICAgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTEsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIAorICAgIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUwLCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIAorICAgIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgODMsIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgCisgICAgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAKKyAgICAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIAorICAgIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgMjA2LCA4MywgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCAKKyAgICA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIDEyOCwgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgCisgICAgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgCisgICAgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCAKKyAgICA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCA3MywgNzEsIDUyLCAxMjgsIDgzLCA3MywgNzEsIAorICAgIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgCisgICAgMjExLCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCAKKyAgICA4MywgNzMsIDY2LCAxOTcsIDgzLCAyMDEsIDgzLCA3MiwgODksIDg4LCAxMjgsIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCAKKyAgICA3MiwgODksIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIAorICAgIDg5LCA2OSwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgCisgICAgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAKKyAgICAxMjgsIDgzLCA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCAKKyAgICA4MywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4NSwgMTI4LCA4MywgNzIsIAorICAgIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgCisgICAgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCAKKyAgICA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgNzIsIDg1LCA3MCwgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIAorICAgIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCA3MiwgODUsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgCisgICAgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgCisgICAgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCAKKyAgICA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzcsIDgwLCAxMjgsIDgzLCA3MiwgODIsIDczLCA3MywgCisgICAgMTI4LCA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDc5LCA4NywgNjksIDgyLCAKKyAgICAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIDcyLCA3OSwgODQsIDEyOCwgODMsIAorICAgIDcyLCA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgODMsIDcyLCA3OSwgODIsIDg0LCA2OSwgCisgICAgNzgsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY3LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAKKyAgICA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgCisgICAgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIAorICAgIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgCisgICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIAorICAgIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCAKKyAgICA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIAorICAgIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAyMTIsIDgzLCA3MiwgCisgICAgNzksIDgxLCAxMjgsIDgzLCA3MiwgNzksIDIwOSwgODMsIDcyLCA3OSwgODAsIDEyOCwgODMsIDcyLCA3OSwgNzksIDg0LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAxMjgsIDgzLCA3MiwgNzksIAorICAgIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCA3OSwgMTk3LCA4MywgNzIsIAorICAgIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIDY1LCA3NiwgNjUsIDY1LCAKKyAgICAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgNzIsIDczLCA4MiwgMjEyLCAKKyAgICA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCA3MiwgNzMsIDIxMCwgODMsIAorICAgIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIDg0LCAyMDcsIDgzLCA3MiwgCisgICAgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgNzMsIDc4LCAxMjgsIDgzLCAKKyAgICA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAxOTMsIDgzLCA3MiwgNzMsIAorICAgIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDczLCAxMjgsIAorICAgIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIDcyLCA3MywgNjgsIDEyOCwgCisgICAgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIDgzLCA3MiwgNjksIDg4LCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODUsIAorICAgIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgCisgICAgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgNzEsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIDgzLCA3MiwgNjksIAorICAgIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgODMsIDcyLCA2OSwgCisgICAgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAxMjgsIDgzLCAKKyAgICA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIDY1LCA4NCwgCisgICAgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIDgzLCA3MiwgCisgICAgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCAKKyAgICA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCA2NSwgODQsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIDgyLCA4MCwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDUwLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgNzcsIDgyLCAKKyAgICA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgCisgICAgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCAKKyAgICAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAxMjgsIDgzLCAKKyAgICA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCA2NSwgMjE1LCAKKyAgICA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCA2OSwgODgsIAorICAgIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIDgyLCA2NSwgCisgICAgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCAKKyAgICAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgNDUsIDg0LCA3MiwgCisgICAgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIDEyOCwgODMsIDY5LCAKKyAgICA4NSwgNzgsIDg5LCA2NSwgNzcsIDEyOCwgODMsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNjksIDg0LCA3MCwgNzksIAorICAgIDc4LCAxMjgsIDgzLCA2OSwgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4MywgODEsIDg1LCA3MywgCisgICAgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgNjksIDgyLCAKKyAgICA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAyMTEsIAorICAgIDgzLCA2OSwgODEsIDg1LCA2OSwgNzgsIDY3LCAxOTcsIDgzLCA2OSwgODAsIDg0LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgCisgICAgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIAorICAgIDIxMCwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgzLCA2OSwgNzgsIDg0LCA3MywgMTI4LCA4MywgNjksIDc3LCA4NSwgCisgICAgNzgsIDY3LCA3MywgMTkzLCA4MywgNjksIDc3LCA3NSwgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDc3LCA3NSwgMTI4LCAKKyAgICA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDY5LCA3NywgNzMsIDgzLCA3OSwgNzAsIDIxMiwgODMsIAorICAgIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA3NywgNzMsIDc4LCAKKyAgICA3MywgNzcsIDE5MywgODMsIDY5LCA3NywgNzMsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA4MywgNjksIDc3LCA3MywgNjcsIAorICAgIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgMjA2LCA4MywgNjksIDc3LCA3MywgCisgICAgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCAKKyAgICA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIDc5LCA3MywgCisgICAgNjcsIDY5LCAxOTYsIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU2LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUzLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUwLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA0OCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIAorICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OCwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU2LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTIsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDksIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUzLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUzLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIAorICAgIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTUsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTIsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU2LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgCisgICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIAorICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUzLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDksIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUwLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgCisgICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIDE5MywgCisgICAgODMsIDY5LCA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgCiAgICAgMTI4LCA4MywgNjksIDY5LCAyMDYsIDgzLCA2OSwgNjksIDY4LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNjksIDY5LCAKICAgICA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgMjA0LCA4MywgNjksIDY3LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgNjcsIAogICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDY5LCA2NywgODIsIDY5LCA4NCwgCkBAIC0xMjkyLDI3MzEgKzEyOTMsMjczMyBAQAogICAgIDY3LCAyMDMsIDgyLCA3OSwgNjcsIDEyOCwgODIsIDc5LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA3OSwgNjUsIDgzLCA4NCwgCiAgICAgNjksIDE5NiwgODIsIDc5LCA2NSwgODIsIDEyOCwgODIsIDc5LCA2NSwgMTI4LCA4MiwgNzgsIDg5LCA3MywgNzgsIDE5OSwgCiAgICAgODIsIDc4LCA3OSwgNzksIDc4LCAxMjgsIDgyLCA3OCwgNzksIDc5LCAyMDYsIDgyLCA3OCwgNjUsIDIwNSwgODIsIDc3LCAKLSAgICA4NCwgMTI4LCA4MiwgNzYsIDc5LCAxMjgsIDgyLCA3NiwgNzcsIDEyOCwgODIsIDc2LCA2OSwgMTI4LCA4MiwgNzQsIDY5LCAKLSAgICAyMTEsIDgyLCA3NCwgNjksIDEyOCwgODIsIDc0LCAxOTcsIDgyLCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNzMsIDg0LCAKLSAgICA4NSwgNjUsIDc2LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgyLCA3MywgODQsIDgzLCA3MywgCi0gICAgMTI4LCA4MiwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDczLCA4MywgNzIsIDEyOCwgODIsIDczLCA4MiwgNjUsIDEyOCwgCi0gICAgODIsIDczLCA4MCwgMTI4LCA4MiwgNzMsIDc4LCA3MSwgMjExLCA4MiwgNzMsIDc4LCA3MCwgNzksIDgyLCA5MCwgNjUsIDc4LCAKLSAgICA2OCwgNzksIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3MywgNzcsIDcxLCA2NiwgNjUsIDEyOCwgODIsIDczLCA3NSwgODIsIAotICAgIDczLCA3NSwgMTI4LCA4MiwgNzMsIDcxLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgCi0gICAgODIsIDY4LCA4MywgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCAKLSAgICA0NSwgODQsIDc5LCA0NSwgNzYsIDY5LCA3MCwgMjEyLCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIAotICAgIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgODIsIDczLCAKLSAgICA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgCi0gICAgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgODMsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgCi0gICAgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIAotICAgIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCAKLSAgICA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIAotICAgIDg0LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCAKLSAgICA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIAotICAgIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgyLCA3MywgNjksIDg1LCAyMDQsIDgyLCA3MywgNjksIDc2LCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDY5LCAxMjgsIDgyLCA3MywgNjcsIDY5LCA3NywgMTI4LCA4MiwgNzMsIDY3LCA2OSwgMTI4LCAKLSAgICA4MiwgNzMsIDY3LCAxOTcsIDgyLCA3MywgNjYsIDY2LCA3OSwgNzgsIDEyOCwgODIsIDczLCA2NSwgMjA0LCA4MiwgNzIsIAotICAgIDc5LCA4NCwgNzMsIDE5NSwgODIsIDcyLCA3OSwgMTI4LCA4MiwgNzIsIDIwNywgODIsIDcyLCA2NSwgMTI4LCA4MiwgNzEsIAotICAgIDg5LCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MiwgNzEsIDg5LCA2NSwgNzgsIDEyOCwgODIsIDcxLCA4OSwgMTkzLCA4MiwgCi0gICAgNjksIDg2LCA3OSwgNzYsIDg2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA4NiwgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDczLCA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgCi0gICAgODIsIDgzLCA2OSwgNjgsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDE5NiwgODIsIDY5LCA4NiwgNjksIDgyLCAKLSAgICA4MywgMTk3LCA4MiwgNjksIDg1LCA4OCwgMTI4LCA4MiwgNjksIDg1LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCAyMDYsIDgyLCA2OSwgODQsIDgyLCA3OSwgNzAsIDc2LCA2OSwgMjE2LCA4MiwgCi0gICAgNjksIDg0LCA4MiwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDg0LCA3OSwgODIsIDg0LCAxMjgsIDgyLCA2OSwgODMsIDg1LCAKLSAgICA4MCwgNzMsIDc4LCA4NSwgODMsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3OSwgNzksIDc3LCAxMjgsIDgyLCA2OSwgODMsIAotICAgIDg0LCA4MiwgNzMsIDY3LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MywgODQsIDEyOCwgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgCi0gICAgODMsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgNzYsIDg1LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDgzLCA3MywgODMsIDg0LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDgzLCA3MywgNjgsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDIwMCwgODIsIDY5LCA4MiwgNjksIDc4LCA3MSwgCi0gICAgNzEsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgyLCA2OSwgNzUsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgwLCA4MiwgNjksIDgzLCAKLSAgICA2OSwgNzgsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3NywgNjksIDc4LCAyMTIsIDgyLCA2OSwgODAsIAotICAgIDcyLCAxMjgsIDgyLCA2OSwgODAsIDY5LCA4NCwgNzMsIDg0LCA3MywgNzksIDIwNiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgCi0gICAgNjksIDE5NiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA2OSwgNjUsIDIxMiwgODIsIDY5LCAKLSAgICA4MCwgNjUsIDg5LCA2NSwgMTI4LCA4MiwgNjksIDgwLCA2NSwgMTI4LCA4MiwgNjksIDgwLCAxOTMsIDgyLCA2OSwgNzgsIAotICAgIDg0LCA3OSwgNzEsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc4LCAxMjgsIDgyLCA2OSwgMjA2LCA4MiwgNjksIDc3LCA4NSwgCi0gICAgMTI4LCA4MiwgNjksIDc3LCA2OSwgNjgsIDg5LCAxMjgsIDgyLCA2OSwgNzYsIDczLCA3MSwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4MiwgNjksIDc2LCA3MywgNjksIDg2LCA2OSwgMTk2LCA4MiwgNjksIDc2LCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgCi0gICAgNjksIDc2LCA2NSwgNjUsIDEyOCwgODIsIDY5LCA3NCwgNjUsIDc4LCAxOTksIDgyLCA2OSwgNzMsIDE5NiwgODIsIDY5LCAKLSAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MiwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUxLCAxMjgsIAotICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDEyOCwgCi0gICAgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgMjExLCA4MiwgNjksIDcxLCA3MywgODMsIDg0LCA2OSwgODIsIDY5LCAxOTYsIDgyLCAKLSAgICA2OSwgNzEsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzEsIDczLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIAotICAgIDczLCA2NSwgMTI4LCA4MiwgNjksIDcwLCA3OSwgODIsIDc3LCA2OSwgMTk2LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCA3OCwgCi0gICAgNjcsIDE5NywgODIsIDY5LCA2OCwgODUsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCAKLSAgICA2NywgODksIDY3LCA3NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA2OSwgNjcsIAotICAgIDg0LCA3MywgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKLSAgICAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIAotICAgIDc2LCAxOTcsIDgyLCA2OSwgNjcsIDgyLCA2OSwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDY3LCA3OSwgCi0gICAgODIsIDY4LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjcsIDc5LCAKLSAgICA4MiwgMTk2LCA4MiwgNjksIDY3LCA2OSwgODAsIDg0LCA3MywgODYsIDE5NywgODIsIDY5LCA2NywgNjksIDczLCA4NiwgNjksIAotICAgIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCA0NSwgNTAsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgCi0gICAgODIsIDEyOCwgODIsIDY5LCA2NSwgNzIsIDc3LCA4NSwgNzUsIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCAKLSAgICA2OCwgMjA3LCA4MiwgNjgsIDY5LCAyMDQsIDgyLCA2NiwgNjUsIDgzLCAxOTMsIDgyLCA2NSwgODksIDgzLCAxMjgsIDgyLCAKLSAgICA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgNjUsIAotICAgIDEyOCwgODIsIDY1LCA4NCwgNzIsIDE5MywgODIsIDY1LCA4NCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIAotICAgIDgzLCA4NywgNjUsIDY4LCA3MywgMTI4LCA4MiwgNjUsIDgzLCA3OSwgODUsIDIwNCwgODIsIDY1LCA4MywgNzIsIDY1LCAKLSAgICAxMjgsIDgyLCA2NSwgODEsIDEyOCwgODIsIDY1LCA4MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODIsIDY1LCA3OCwgNzEsIAotICAgIDE5NywgODIsIDY1LCA3OCwgNjUsIDEyOCwgODIsIDY1LCA3OCwgMTI4LCA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2NSwgNzcsIAotICAgIDY2LCA2NSwgODQsIDEyOCwgODIsIDY1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDEyOCwgODIsIDY1LCA3NSwgNjUsIDY1LCA4MiwgCi0gICAgNjUsIDY1LCA3OCwgODMsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY1LCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNjUsIDczLCAKLSAgICA4MywgNjksIDE5NiwgODIsIDY1LCA3MywgNzgsIDY2LCA3OSwgODcsIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgODksIAotICAgIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgMjE3LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA4MiwgNjUsIDczLCA2OCwgCi0gICAgMjA3LCA4MiwgNjUsIDczLCA2OCwgNjUsIDEyOCwgODIsIDY1LCA3MiwgNzcsIDY1LCA4NCwgODUsIDc2LCA3NiwgNjUsIAotICAgIDIwMCwgODIsIDY1LCA3MiwgMTI4LCA4MiwgNjUsIDcwLCA2OSwgMTI4LCA4MiwgNjUsIDY5LCA3NywgMTI4LCA4MiwgNjUsIAotICAgIDY4LCA3MywgNzksIDY1LCA2NywgODQsIDczLCA4NiwgMTk3LCA4MiwgNjUsIDY4LCA3MywgNzksIDEyOCwgODIsIDY1LCA2OCwgCi0gICAgNzMsIDIwNywgODIsIDY1LCA2OCwgMjAxLCA4MiwgNjUsIDY4LCAxMjgsIDgyLCA2NSwgMTk2LCA4MiwgNjUsIDY3LCA4MSwgCi0gICAgODUsIDY5LCAyMTIsIDgyLCA2NSwgNjcsIDczLCA3OCwgNzEsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCA4NCwgMTI4LCAKLSAgICA4MiwgNjUsIDY2LCA2NiwgNzMsIDIxMiwgODIsIDY1LCA2NiwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIAotICAgIDUxLCAxMjgsIDgyLCA2NSwgNTAsIDEyOCwgODIsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDQ4LCA1MCwgNTcsIDEyOCwgODIsIAotICAgIDQ4LCA1MCwgNTYsIDEyOCwgODIsIDQ4LCA1MCwgNTUsIDEyOCwgODIsIDQ4LCA1MCwgNTQsIDEyOCwgODIsIDQ4LCA1MCwgCi0gICAgNTMsIDEyOCwgODIsIDQ4LCA1MCwgNTIsIDEyOCwgODIsIDQ4LCA1MCwgNTEsIDEyOCwgODIsIDQ4LCA1MCwgNTAsIDEyOCwgCi0gICAgODIsIDQ4LCA1MCwgNDksIDEyOCwgODIsIDQ4LCA1MCwgNDgsIDEyOCwgODIsIDQ4LCA0OSwgNTcsIDEyOCwgODIsIDQ4LCAKLSAgICA0OSwgNTYsIDEyOCwgODIsIDQ4LCA0OSwgNTUsIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDgyLCA0OCwgNDksIAotICAgIDU0LCAxMjgsIDgyLCA0OCwgNDksIDUzLCAxMjgsIDgyLCA0OCwgNDksIDUyLCAxMjgsIDgyLCA0OCwgNDksIDUxLCAxMjgsIAotICAgIDgyLCA0OCwgNDksIDUwLCAxMjgsIDgyLCA0OCwgNDksIDQ5LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA4MiwgCi0gICAgNDgsIDQ5LCA0OCwgMTI4LCA4MiwgNDgsIDQ4LCA1NywgMTI4LCA4MiwgNDgsIDQ4LCA1NiwgMTI4LCA4MiwgNDgsIDQ4LCAKLSAgICA1NSwgMTI4LCA4MiwgNDgsIDQ4LCA1NCwgMTI4LCA4MiwgNDgsIDQ4LCA1MywgMTI4LCA4MiwgNDgsIDQ4LCA1MiwgMTI4LCAKLSAgICA4MiwgNDgsIDQ4LCA1MSwgNjYsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCAxMjgsIAotICAgIDgyLCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgMTI4LCA4MiwgNDgsIDQ4LCA0OSwgMTI4LCA4MiwgCi0gICAgNDUsIDY3LCA4MiwgNjksIDE5NywgODEsIDg5LCA4OCwgMTI4LCA4MSwgODksIDg1LCAxMjgsIDgxLCA4OSwgODQsIDEyOCwgCi0gICAgODEsIDg5LCA4MiwgODgsIDEyOCwgODEsIDg5LCA4MiwgMTI4LCA4MSwgODksIDgwLCAxMjgsIDgxLCA4OSwgNzksIDEyOCwgCi0gICAgODEsIDg5LCA3MywgMTI4LCA4MSwgODksIDY5LCA2OSwgMTI4LCA4MSwgODksIDY5LCAxMjgsIDgxLCA4OSwgNjUsIDY1LCAKLSAgICAxMjgsIDgxLCA4OSwgNjUsIDEyOCwgODEsIDg5LCAxMjgsIDgxLCA4NywgNzMsIDEyOCwgODEsIDg3LCA2OSwgNjksIDEyOCwgCi0gICAgODEsIDg3LCA2OSwgMTI4LCA4MSwgODcsIDY1LCA2NSwgMTI4LCA4MSwgODcsIDY1LCAxMjgsIDgxLCA4NSwgODgsIDEyOCwgCi0gICAgODEsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCAxMjgsIDgxLCA4NSwgODQsIDEyOCwgCi0gICAgODEsIDg1LCA4MywgNzIsIDgzLCA3MiwgNjUsIDg5LCA2NSwgMTI4LCA4MSwgODUsIDgyLCA4OCwgMTI4LCA4MSwgODUsIDgyLCAKLSAgICAxMjgsIDgxLCA4NSwgODAsIDEyOCwgODEsIDg1LCA3OSwgODgsIDEyOCwgODEsIDg1LCA3OSwgODQsIDE5NywgODEsIDg1LCAKLSAgICA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNzksIDg0LCAxMjgsIDgxLCA4NSwgNzksIDgwLCAxMjgsIAotICAgIDgxLCA4NSwgNzksIDEyOCwgODEsIDg1LCA3NSwgMTI4LCA4MSwgODUsIDczLCA3OCwgODQsIDY5LCA4MywgODMsIDY5LCA3OCwgCi0gICAgNjcsIDY5LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2OSwgODMsIDczLCA3NywgMTkzLCA4MSwgODUsIDczLCAKLSAgICA3OCwgNjcsIDg1LCA3OCwgODgsIDEyOCwgODEsIDg1LCA3MywgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDgxLCA4NSwgNzMsIAotICAgIDc2LCA3NiwgMTI4LCA4MSwgODUsIDczLCA2NywgMjAzLCA4MSwgODUsIDczLCAxMjgsIDgxLCA4NSwgNzAsIDEyOCwgODEsIAotICAgIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCA2OSwgMTk2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDIwNiwgODEsIDg1LCA2OSwgNjksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDY5LCAKLSAgICAyMDYsIDgxLCA4NSwgNjksIDEyOCwgODEsIDg1LCA2NiwgODUsIDg0LCA4MywgMTI4LCA4MSwgODUsIDY1LCA4NCwgNjksIAotICAgIDgyLCA3OCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MSwgODUsIDY1LCA4MiwgCi0gICAgODQsIDY5LCA4MiwgMjExLCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCAKLSAgICAyMTAsIDgxLCA4NSwgNjUsIDc4LCA4NCwgNzMsIDg0LCAyMTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgODUsIDgwLCA3NiwgCi0gICAgMTk3LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgODQsIDEyOCwgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIAotICAgIDIxMiwgODEsIDg1LCA2NSwgNjgsIDEyOCwgODEsIDg1LCA2NSwgMTk2LCA4MSwgODUsIDY1LCAxMjgsIDgxLCA4NSwgMTI4LCAKLSAgICA4MSwgMjA4LCA4MSwgNzksIDg4LCAxMjgsIDgxLCA3OSwgODQsIDEyOCwgODEsIDc5LCA4MCwgNzIsIDEyOCwgODEsIDc5LCAKLSAgICA4MCwgNjUsIDEyOCwgODEsIDc5LCA4MCwgMTI4LCA4MSwgNzksIDc5LCAxMjgsIDgxLCA3OSwgMjA3LCA4MSwgNzksIDcwLCAKLSAgICAxMjgsIDgxLCA3OSwgMTk4LCA4MSwgNzksIDY1LCAxMjgsIDgxLCA3OSwgMTI4LCA4MSwgNzgsIDEyOCwgODEsIDczLCA4OCwgCi0gICAgMTI4LCA4MSwgNzMsIDg0LCA4MywgNjUsIDEyOCwgODEsIDczLCA4NCwgMTI4LCA4MSwgNzMsIDgwLCAxMjgsIDgxLCA3MywgCi0gICAgNzMsIDEyOCwgODEsIDczLCA2OSwgODgsIDEyOCwgODEsIDczLCA2OSwgODQsIDEyOCwgODEsIDczLCA2OSwgODAsIDEyOCwgCi0gICAgODEsIDczLCA2OSwgMTI4LCA4MSwgNzMsIDEyOCwgODEsIDcyLCA4NywgNzMsIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAKLSAgICAxMjgsIDgxLCA3MiwgODcsIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCAKLSAgICA4MSwgNzIsIDg1LCAxMjgsIDgxLCA3MiwgNzksIDEyOCwgODEsIDcyLCA3MywgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCAKLSAgICA4MSwgNzIsIDY5LCAxMjgsIDgxLCA3MiwgNjUsIDY1LCAxMjgsIDgxLCA3MiwgNjUsIDEyOCwgODEsIDcxLCA2NSwgMTI4LCAKLSAgICA4MSwgNjksIDg0LCA2NSwgNzgsIDY1LCAxMjgsIDgxLCA2OSwgNjksIDEyOCwgODEsIDY5LCAxMjgsIDgxLCA2NSwgODUsIAotICAgIDEyOCwgODEsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDgxLCA2NSwgODIsIDc4LCA2OSwgMjE3LCA4MSwgNjUsIDgyLCAxMjgsIAotICAgIDgxLCA2NSwgODEsIDEyOCwgODEsIDY1LCA4MCwgNzIsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCA4MywgMTI4LCA4MSwgCi0gICAgNjUsIDc3LCA2NSwgODQsIDIxMSwgODEsIDY1LCA3NiwgMTkzLCA4MSwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIAotICAgIDEyOCwgODEsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDcwLCAxMjgsIDgxLCA2NSwgMTk4LCA4MSwgNjUsIDY4LCA3NywgNjUsIAotICAgIDEyOCwgODEsIDY1LCA2NSwgNzMsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDgxLCA2NSwgNjUsIDcwLCAxMjgsIAotICAgIDgxLCA0OCwgNDgsIDU1LCAxMjgsIDgxLCA0OCwgNDgsIDU0LCAxMjgsIDgxLCA0OCwgNDgsIDUzLCAxMjgsIDgxLCA0OCwgCi0gICAgNDgsIDUyLCAxMjgsIDgxLCA0OCwgNDgsIDUxLCAxMjgsIDgxLCA0OCwgNDgsIDUwLCAxMjgsIDgxLCA0OCwgNDgsIDQ5LCAKLSAgICAxMjgsIDgwLCA5MCwgMTI4LCA4MCwgODksIDg4LCAxMjgsIDgwLCA4OSwgODQsIDEyOCwgODAsIDg5LCA4MiwgODgsIDEyOCwgCi0gICAgODAsIDg5LCA4MiwgMTI4LCA4MCwgODksIDgwLCAxMjgsIDgwLCA4OSwgMTI4LCA4MCwgODcsIDc5LCA4OSwgMTI4LCA4MCwgCi0gICAgODcsIDc5LCA3OSwgMTI4LCA4MCwgODcsIDc5LCAxMjgsIDgwLCA4NywgMjA3LCA4MCwgODcsIDczLCA3MywgMTI4LCA4MCwgCi0gICAgODcsIDczLCAxMjgsIDgwLCA4NywgNjksIDY5LCAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIDg3LCA2NSwgNjUsIDEyOCwgCi0gICAgODAsIDg3LCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgODUsIDg4LCAxMjgsIDgwLCA4NSwgODUsIDg0LCAxMjgsIDgwLCA4NSwgCi0gICAgODUsIDEyOCwgODAsIDg1LCA4NCwgODIsIDY5LCA3MCwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDg0LCAKLSAgICAxMjgsIDgwLCA4NSwgMjEyLCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3OCwgMTI4LCA4MCwgODUsIDgzLCA3MiwgODAsIAotICAgIDczLCA3NSwgNjUsIDEyOCwgODAsIDg1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIDgyLCA4OCwgMTI4LCA4MCwgCi0gICAgODUsIDgyLCA4MywgNjksIDEyOCwgODAsIDg1LCA4MiwgODAsIDc2LCAxOTcsIDgwLCA4NSwgODIsIDc4LCA2NSwgNzcsIDY1LCAKLSAgICAxMjgsIDgwLCA4NSwgODIsIDczLCA4NCwgODksIDEyOCwgODAsIDg1LCA4MiwgNzMsIDcwLCA4OSwgMTI4LCA4MCwgODUsIAotICAgIDgyLCAxMjgsIDgwLCA4NSwgODEsIDEyOCwgODAsIDg1LCA4MCwgMTI4LCA4MCwgODUsIDc5LCA4OCwgMTI4LCA4MCwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIDgwLCA4NSwgNzgsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA4NSwgCi0gICAgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDc4LCAKLSAgICA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODUsIDc3LCA4MCwgMTI4LCA4MCwgODUsIDc3LCAxMjgsIAotICAgIDgwLCA4NSwgNjksIDEyOCwgODAsIDg1LCA2NiwgNzYsIDczLCAxOTUsIDgwLCA4NSwgNjUsIDgxLCAxMjgsIDgwLCA4NSwgCi0gICAgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIDg1LCA0OSwgMTI4LCA4MCwgODUsIDEyOCwgODAsIDg0LCA3MiwgCi0gICAgNjUsIDcyLCAxOTMsIDgwLCA4NCwgNjksIDEyOCwgODAsIDgzLCA3MywgNzYsIDIwMSwgODAsIDgzLCA3MywgNzAsIDczLCAKLSAgICA4MywgODQsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgCi0gICAgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIAotICAgIDgzLCA4NCwgNzksIDIwNiwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCAKLSAgICA2NSwgMTI4LCA4MCwgODMsIDczLCAxMjgsIDgwLCA4MywgMTI4LCA4MCwgODIsIDc5LCA4NiwgNjksIDEyOCwgODAsIDgyLCAKLSAgICA3OSwgODQsIDc5LCA4NiwgNjUsIDgyLCA4OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgNzksIDIxMSwgODAsIDgyLCA3OSwgODQsIAotICAgIDY5LCA2NywgODQsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIDc4LCAKLSAgICA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgODAsIAotICAgIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCA3OSwgCi0gICAgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIDc4LCAKLSAgICA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgNjksIAotICAgIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgCi0gICAgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDc5LCAKLSAgICA3MCwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODAsIDgyLCA3OSwgNjgsIDg1LCA2NywgODQsIDEyOCwgODAsIDgyLCA3OSwgNjgsIAotICAgIDg1LCA2NywgMjEyLCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCAKLSAgICAxOTcsIDgwLCA4MiwgNzMsIDg2LCA2NSwgNjcsIDIxNywgODAsIDgyLCA3MywgODMsIDcyLCA4NCwgNzIsIDY1LCA3NywgNjUsIAotICAgIDg0LCA4MiwgMTkzLCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgCi0gICAgODIsIDczLCA3OCwgMjEyLCA4MCwgODIsIDczLCA3OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAKLSAgICAxMjgsIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIAotICAgIDgzLCA2OSwgODQsIDEyOCwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgCi0gICAgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MCwgNzksIDc4LCA2OCwgNjksIAotICAgIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA3OCwgNzUsIDcyLCA2NSwgMTI4LCA4MCwgODIsIDY5LCA3MCwgCi0gICAgNjUsIDY3LCAxOTcsIDgwLCA4MiwgNjksIDY3LCA3MywgODAsIDczLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDY5LCAKLSAgICA2NywgNjksIDY4LCA3MywgNzgsIDE5OSwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgwLCA4MiwgNjksIAotICAgIDY3LCA2OSwgNjgsIDY5LCAyMTEsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDY3LCA2OSwgCi0gICAgNjgsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDE5NywgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAKLSAgICAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAyMDEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIAotICAgIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCAyMTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgCi0gICAgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCAyMDYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCAKLSAgICA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgMjAxLCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIAotICAgIDY1LCAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDgwLCA2NSwgMTI4LCAKLSAgICA4MCwgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIAotICAgIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAKLSAgICAxMjgsIDgwLCA3OSwgODUsIDc4LCAxOTYsIDgwLCA3OSwgODUsIDc2LCA4NCwgODIsIDIxNywgODAsIDc5LCA4NSwgNjcsIAotICAgIDcyLCAxMjgsIDgwLCA3OSwgODQsIDY1LCA4NCwgNzksIDEyOCwgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA4MCwgCi0gICAgNzksIDIxMiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA3OSwgODMsIDg0LCAKLSAgICA2NiwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNzksIDgzLCA4NCwgMTI4LCA4MCwgNzksIAotICAgIDgzLCAyMTIsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgCi0gICAgNjcsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDg1LCAyMTEsIDgwLCA3OSwgODAsIDgwLCAKLSAgICA2OSwgODIsIDEyOCwgODAsIDc5LCA4MCwgMTI4LCA4MCwgNzksIDIwOCwgODAsIDc5LCA3OSwgNjgsIDc2LCA2OSwgMTI4LCAKLSAgICA4MCwgNzksIDc5LCAxMjgsIDgwLCA3OSwgNzgsIDY4LCA3OSwgMTI4LCA4MCwgNzksIDIwNiwgODAsIDc5LCA3NywgNzcsIAotICAgIDY5LCA2OSwgMTI4LCA4MCwgNzksIDc3LCA3NywgNjksIDE5NywgODAsIDc5LCA3NiwgNzMsIDgzLCA3MiwgMTI4LCA4MCwgCi0gICAgNzksIDc2LCA3MywgNjcsIDE5NywgODAsIDc5LCA3NiwgMjAxLCA4MCwgNzksIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc2LCAKLSAgICAxOTcsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIDczLCA2OSwgMTI4LCA4MCwgNzksIDc1LCA3OSwgNzQsIDczLCAxMjgsIAotICAgIDgwLCA3OSwgNzMsIDc4LCA4NCwgMjExLCA4MCwgNzksIDczLCA3OCwgODQsIDc5LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDgyLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDE5NiwgODAsIDc5LCA3MywgNzgsIDg0LCAxMjgsIDgwLCAKLSAgICA3OSwgNzMsIDc4LCAyMTIsIDgwLCA3OSwgNjksIDg0LCA4MiwgMjE3LCA4MCwgNzksIDY5LCA4NCwgNzMsIDE5NSwgODAsIAotICAgIDc5LCA2OCwgNjUsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA2NSwgMTI4LCA4MCwgNzksIDEyOCwgODAsIDIwNywgODAsIAotICAgIDc4LCA2OSwgODUsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgwLCA3NiwgODUsIDg0LCA3OSwgMTI4LCA4MCwgNzYsIDg1LCA4MywgCi0gICAgNDUsIDc3LCA3MywgNzgsIDg1LCAyMTEsIDgwLCA3NiwgODUsIDgzLCAxMjgsIDgwLCA3NiwgODUsIDgyLCA2NSwgNzYsIAotICAgIDEyOCwgODAsIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIAotICAgIDgwLCA3NiwgODUsIDcxLCAxMjgsIDgwLCA3NiwgODUsIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgCi0gICAgODAsIDcyLCA4NSwgMTI4LCA4MCwgNzYsIDY5LCA4NCwgNzIsIDgyLCA3OSwgNzgsIDEyOCwgODAsIDc2LCA2OCwgMTI4LCAKLSAgICA4MCwgNzYsIDY1LCA4OSwgNzMsIDc4LCAxOTksIDgwLCA3NiwgNjUsIDgzLCA4NCwgNzMsIDY3LCA4MywgMTI4LCA4MCwgNzYsIAotICAgIDY1LCA3OCwgNjksIDEyOCwgODAsIDc2LCA2NSwgNzgsIDE5NywgODAsIDc2LCA2NSwgNzgsIDY3LCAyMDMsIDgwLCA3NiwgCi0gICAgNjUsIDc1LCAxMjgsIDgwLCA3NiwgNjUsIDcxLCA3MywgNzksIDIxMSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3MiwgNzksIDc2LCAKLSAgICA2OCwgNjksIDIxMCwgODAsIDc2LCA2NSwgNjcsIDE5NywgODAsIDc2LCA2NSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNzMsIAotICAgIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA2NSwgMTI4LCA4MCwgNzMsIDg4LCAxMjgsIDgwLCA3MywgCi0gICAgODcsIDgyLCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCAKLSAgICA3MCwgNzksIDgyLCAyMDMsIDgwLCA3MywgODQsIDEyOCwgODAsIDczLCA4MywgODQsIDc5LCA3NiwgMTI4LCA4MCwgNzMsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA3MiwgMTI4LCA4MCwgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3MywgODIsIDczLCA3MSwgCi0gICAgMTI4LCA4MCwgNzMsIDgyLCA3MywgMTk5LCA4MCwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA4MCwgNzMsIDgwLCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgwLCA3MywgODAsIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA4MCwgNzMsIAotICAgIDgwLCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgCi0gICAgMjA0LCA4MCwgNzMsIDc4LCA2OSwgNjUsIDgwLCA4MCwgNzYsIDY5LCAxMjgsIDgwLCA3MywgNzgsIDE5NywgODAsIDczLCAKLSAgICA3OCwgNjUsIDgyLCA2NiwgNzksIDgyLCA2NSwgODMsIDEyOCwgODAsIDczLCA3NiwgNzYsIDEyOCwgODAsIDczLCA3NiwgCi0gICAgMTk3LCA4MCwgNzMsIDc2LCA2NywgODIsIDc5LCAyMTUsIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCAKLSAgICA3NSwgNzksIDEyOCwgODAsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDE5OSwgODAsIDczLCA2OSwgODgsIDEyOCwgODAsIDczLCAKLSAgICA2OSwgODUsIDgwLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIAotICAgIDczLCA2OSwgODUsIDc2LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIAotICAgIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKLSAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3MywgNjksIAotICAgIDg1LCAyMDgsIDgwLCA3MywgNjksIDg0LCAxMjgsIDgwLCA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDY5LCA4NCwgCi0gICAgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODEsIDEyOCwgODAsIDczLCA2OSwgNjcsIDY5LCAxMjgsIDgwLCA3MywgNjksIDEyOCwgCi0gICAgODAsIDczLCA2NywgNzUsIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgODUsIDg0LCAKLSAgICA3OSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA3NywgMTkzLCA4MCwgNzMsIDY1LCA3OCwgNzksIDEyOCwgODAsIAotICAgIDIwMSwgODAsIDcyLCA4NywgNjUsIDEyOCwgODAsIDcyLCA4NSwgODQsIDcyLCA2NSwgNzksIDEyOCwgODAsIDcyLCA4NSwgCi0gICAgMjEwLCA4MCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDcyLCA4MiwgNjUsIDgzLCA2OSwgMTI4LCA4MCwgNzIsIDc5LCAKLSAgICA3OCwgNjksIDgzLCAxMjgsIDgwLCA3MiwgNzksIDY5LCA3OCwgNzMsIDY3LCA3MywgNjUsIDIwNiwgODAsIDcyLCA3OSwgNjUsIAotICAgIDEyOCwgODAsIDcyLCA3OSwgMTI4LCA4MCwgNzIsIDIwNywgODAsIDcyLCA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgNzMsIAotICAgIDc4LCA4NCwgNzIsIDg1LCAxMjgsIDgwLCA3MiwgNzMsIDc2LCA3OSwgODMsIDc5LCA4MCwgNzIsIDY5LCA4MiwgMjExLCA4MCwgCi0gICAgNzIsIDczLCA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODQsIAotICAgIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MywgNzMsIDc5LCAKLSAgICA4MywgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzIsIAotICAgIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKLSAgICAyMDAsIDgwLCA3MiwgNzMsIDEyOCwgODAsIDcyLCAyMDEsIDgwLCA3MiwgNjksIDY5LCAxMjgsIDgwLCA3MiwgNjksIDEyOCwgCi0gICAgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTQsIDgwLCA3MiwgNjUsIDgyLCAKLSAgICA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgODAsIDcyLCA2NSwgODIsIDEyOCwgODAsIDcyLCA2NSwgNzgsIDEyOCwgODAsIAotICAgIDcyLCA2NSwgNzcsIDEyOCwgODAsIDcyLCA2NSwgNzMsIDgzLCA4NCwgNzksIDIxMSwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgCi0gICAgODAsIDE5MywgODAsIDcyLCA2NSwgNjUsIDgyLCA3NSwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCAKLSAgICA3MiwgNjUsIDEyOCwgODAsIDcxLCAxMjgsIDgwLCA3MCwgMTI4LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA4MCwgNjksIDg1LCAKLSAgICA4NCwgNjUsIDY5LCAxMjgsIDgwLCA2OSwgODUsIDg0LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDc5LCA3NSwgNzksIAotICAgIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzMsIDEyOCwgODAsIDY5LCA4NCwgCi0gICAgNjUsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDc2LCA3NiwgNjksIDE5NiwgODAsIDY5LCA4MywgNzksIAotICAgIDEyOCwgODAsIDY5LCA4MywgMjA3LCA4MCwgNjksIDgzLCA3MiwgNTAsIDEyOCwgODAsIDY5LCA4MywgNjksIDg0LCAxOTMsIAotICAgIDgwLCA2OSwgMjExLCA4MCwgNjksIDgyLCA4NCwgNzIsIDIwNywgODAsIDY5LCA4MiwgODMsIDgwLCA2OSwgNjcsIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIAotICAgIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA3MywgNjUsIDIwNiwgODAsIDY5LCA4MiwgCi0gICAgODMsIDY5LCA4NiwgNjksIDgyLCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIAotICAgIDc2LCA2NSwgODIsIDEyOCwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgCi0gICAgNjksIDgyLCA3NywgNzMsIDg0LCA4NCwgNjksIDE5NiwgODAsIDY5LCA4MiwgNzcsIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCAKLSAgICA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgCi0gICAgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIDgyLCA3MCwgNzksIDgyLCA3NywgNzMsIDc4LCAxOTksIDgwLCA2OSwgODIsIDcwLCAKLSAgICA2OSwgNjcsIDg0LCA4NSwgMjA1LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgODAsIDY5LCA4MiwgNzAsIAotICAgIDY5LCA2NywgODQsIDE5MywgODAsIDY5LCA4MiwgNjcsIDg1LCA4MywgODMsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgCi0gICAgNjcsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY5LCA4MCwgNjksIDIxMiwgODAsIDY5LCAKLSAgICA3OSwgODIsIDg0LCAyMDAsIDgwLCA2OSwgNzksIDgwLCA3NiwgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA4MywgNjksIAotICAgIDc3LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgCi0gICAgNzEsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIDEyOCwgODAsIDY5LCA3OCwgODMsIDczLCA4NiwgMTk3LCAKLSAgICA4MCwgNjksIDc4LCA3OCwgMjE3LCA4MCwgNjksIDc4LCA3MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA4NSwgNzMsIAotICAgIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA3NSwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNzgsIDY5LCA4NCwgODIsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA2NywgNzMsIDc2LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAKLSAgICA3OCwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgMjA2LCA4MCwgNjksIDczLCA4NCwgNzIsIDEyOCwgODAsIAotICAgIDY5LCA3MiwgNjksIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCAyMDAsIDgwLCA2OSwgNzIsIDEyOCwgODAsIDY5LCAyMDAsIAotICAgIDgwLCA2OSwgNjksIDkwLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgwLCAKLSAgICAxMjgsIDgwLCA2OSwgNjksIDc3LCAxMjgsIDgwLCA2OSwgNjksIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIAotICAgIDczLCA2NSwgNzgsIDgzLCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDc4LCAxMjgsIDgwLCA2OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDY1LCA3NiwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNjksIDY4LCAKLSAgICA2NSwgMjA0LCA4MCwgNjksIDY1LCA2NywgNzIsIDEyOCwgODAsIDY5LCA2NSwgNjcsIDY5LCAxMjgsIDgwLCA2OSwgNjUsIAotICAgIDY3LCAxOTcsIDgwLCA2OCwgNzAsIDEyOCwgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgNjUsIDkwLCA2OSwgODIsIAotICAgIDEyOCwgODAsIDY1LCA4OSwgNjksIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA4OSwgMTI4LCA4MCwgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA2NSwgMjE1LCA4MCwgCi0gICAgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NSwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCAKLSAgICA3OCwgMTI4LCA4MCwgNjUsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDg0LCAyMDAsIAotICAgIDgwLCA2NSwgODQsIDY1LCA3NSwgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgMTI4LCA4MCwgCi0gICAgNjUsIDgzLCA4NSwgODEsIDEyOCwgODAsIDY1LCA4MywgODMsIDgwLCA3OSwgODIsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCAKLSAgICA4NiwgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgCi0gICAgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgCi0gICAgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgODMsIDY5LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIAotICAgIDgyLCA4NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgODQsIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgCi0gICAgNzMsIDIwOCwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIAotICAgIDY5LCAxOTYsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgCi0gICAgODAsIDY1LCA4MiwgMjEyLCA4MCwgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCAKLSAgICA4NCwgNzMsIDcxLCA3NywgNjksIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIAotICAgIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCAKLSAgICA4MywgNzMsIDIxMSwgODAsIDY1LCA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIAotICAgIDc2LCA2OSwgNzYsIDc5LCA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgCi0gICAgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIAotICAgIDczLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgCi0gICAgNjUsIDc2LCA2OSwgODMsIDc3LCAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCAKLSAgICA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgMjAwLCA4MCwgNjUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAKLSAgICAxMjgsIDgwLCA2NSwgODAsIDY5LCA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIAotICAgIDY1LCA4MCwgMTI4LCA4MCwgNjUsIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDg5LCA3MywgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA4OSwgNjUsIDc4LCA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA4NCwgNzMsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA3MSwgODIsIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc5LCA3NiwgCi0gICAgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCAKLSAgICA4OSwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNjUsIAotICAgIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCA4MCwgNjUsIDc4LCAKLSAgICA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIAotICAgIDc1LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgNzcsIDgzLCA3MiwgCi0gICAgNjUsIDY5LCAxMjgsIDgwLCA2NSwgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA3NywgNzMsIDc4LCAKLSAgICA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgNzgsIAotICAgIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgCi0gICAgMTI4LCA4MCwgNjUsIDc2LCA4NSwgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc2LCAyMDUsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODMsIAotICAgIDEyOCwgODAsIDY1LCA3NiwgNjksIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgMTk5LCA4MCwgCi0gICAgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIAotICAgIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDc1LCA4MCwgCi0gICAgNjUsIDIwMywgODAsIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCAKLSAgICA4MiwgNjUsIDEyOCwgODAsIDY1LCA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzMsIDEyOCwgODAsIDY1LCA3MiwgNzYsIAotICAgIDY1LCA4NiwgMjAxLCA4MCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgNzEsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDcxLCAxOTcsIAotICAgIDgwLCA2NSwgNjgsIDc3LCAxOTMsIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgCi0gICAgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgNjUsIDg0LCA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIAotICAgIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgCi0gICAgNjUsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCAKLSAgICA0OCwgNDksIDQ5LCAxMjgsIDgwLCA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIAotICAgIDU2LCAxMjgsIDgwLCA0OCwgNDgsIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIAotICAgIDgwLCA0OCwgNDgsIDUyLCAxMjgsIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgCi0gICAgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCAKLSAgICA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIAotICAgIDEyOCwgNzksIDg4LCA3MywgMTkzLCA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIAotICAgIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgCi0gICAgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCAKLSAgICA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIAotICAgIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgCi0gICAgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIAotICAgIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgCi0gICAgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgCi0gICAgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCAKLSAgICA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIAotICAgIDc4LCA2NSwgMjA0LCA3OSwgODIsIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIDE5NywgCi0gICAgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAyMTIsIDc5LCAKLSAgICA4MiwgNzUsIDcyLCA3OSwgMjA2LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDczLCA3MSwgNzMsIAotICAgIDc4LCAxMjgsIDc5LCA4MiwgNjksIDQ1LCA1MCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgCi0gICAgNjgsIDY5LCAyMTAsIDc5LCA4MiwgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDc5LCAKLSAgICA4MCwgODQsIDczLCA3OSwgMjA2LCA3OSwgODAsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIAotICAgIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgCi0gICAgODAsIDc5LCA4MywgNzMsIDc4LCAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA3MiwgNzMsIDg1LCAKLSAgICA2NywgNzIsIDg1LCA4MywgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzksIDgwLCA2OSwgODIsIAotICAgIDY1LCA4NCwgNzksIDIxMCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzMsIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA3MywgCi0gICAgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCAKLSAgICA3MywgNzgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIAotICAgIDc4LCA0NSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDc5LCAKLSAgICA5MCwgNjksIDEyOCwgNzksIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDc5LCA4NSwgMTI4LCA3OSwgNzksIAotICAgIDc3LCA4NSwgMTI4LCA3OSwgNzksIDY5LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNzksIDc4LCA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCAKLSAgICA4MiwgMTI4LCA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIAotICAgIDc5LCA3OCwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKLSAgICAxOTcsIDc5LCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIAotICAgIDgzLCA4MywgNzMsIDc5LCAyMDYsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgCi0gICAgNzksIDIwNiwgNzksIDc3LCA2OSwgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCAKLSAgICA3OSwgNzgsIDEyOCwgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIAotICAgIDY4LCAxMjgsIDc5LCA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIAotICAgIDc5LCA3NCwgNzMsIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgCi0gICAgNzksIDcyLCA3NywgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCAKLSAgICA3NSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIAotICAgIDY3LCA2OSwgODIsIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgCi0gICAgNzksIDcwLCA3MCwgMTI4LCA3OSwgNjksIDg5LCAxMjgsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCA2OSwgNzgsIDEyOCwgCi0gICAgNzksIDY4LCAxOTYsIDc5LCA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAKLSAgICAxMjgsIDc5LCA2NywgODQsIDY5LCAyMTIsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDc5LCAKLSAgICA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgNzAsIDczLCAKLSAgICA3NiwgNzMsIDEyOCwgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIAotICAgIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgMTI4LCA3OSwgCi0gICAgNjUsIDg5LCAxMjgsIDc5LCA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA3OSwgMTkzLCA3OSwgNDgsIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA1MywgNDgsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgNTIsIDU2LCAxMjgsIAotICAgIDc5LCA0OCwgNTIsIDU1LCAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAxMjgsIDc5LCA0OCwgCi0gICAgNTIsIDUyLCAxMjgsIDc5LCA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCA0OCwgNTIsIDQ5LCAKLSAgICAxMjgsIDc5LCA0OCwgNTIsIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIDU2LCAxMjgsIDc5LCAKLSAgICA0OCwgNTEsIDU1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjcsIDEyOCwgNzksIAotICAgIDQ4LCA1MSwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1MywgMTI4LCA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzksIDQ4LCAKLSAgICA1MSwgNTEsIDEyOCwgNzksIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIDQ4LCA1MSwgNDgsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1NywgCi0gICAgMTI4LCA3OSwgNDgsIDUwLCA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCA1NCwgMTI4LCA3OSwgCi0gICAgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc5LCAKLSAgICA0OCwgNTAsIDUyLCAxMjgsIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIDc5LCA0OCwgNTAsIAotICAgIDQ5LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCA0OSwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA0OSwgNTQsIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIDEyOCwgNzksIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgNzksIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIDQ4LCA0OSwgNDgsIAotICAgIDY3LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA0OSwgCi0gICAgNDgsIDEyOCwgNzksIDQ4LCA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCA0OCwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA0OCwgNTQsIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjgsIAotICAgIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDc5LCA0OCwgNDgsIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIDUwLCAxMjgsIDc5LCAKLSAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIAotICAgIDc5LCA0NSwgNzMsIDEyOCwgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCA4OSwgODAsIDEyOCwgCi0gICAgNzgsIDkwLCA4OSwgMTI4LCA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA4NSwgODIsIDEyOCwgNzgsIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIDkwLCA4NSwgNzksIAotICAgIDg4LCAxMjgsIDc4LCA5MCwgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIAotICAgIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDczLCA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDc4LCA5MCwgNzMsIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA2OSwgODUsIDc3LCAxMjgsIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIDkwLCA2NSwgODQsIAotICAgIDEyOCwgNzgsIDkwLCA2NSwgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIAotICAgIDE5MywgNzgsIDg5LCA4NywgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgODUsIDEyOCwgNzgsIAotICAgIDg5LCA4NSwgODQsIDEyOCwgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAKLSAgICAxMjgsIDc4LCA4OSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCAKLSAgICA4OSwgNzksIDc5LCAxMjgsIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIAotICAgIDEyOCwgNzgsIDg5LCA3MywgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIAotICAgIDczLCAyMTEsIDc4LCA4OSwgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgCi0gICAgNzksIDEyOCwgNzgsIDg5LCA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAKLSAgICA4NCwgMTI4LCA3OCwgODksIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCAKLSAgICA3OCwgODksIDIwMSwgNzgsIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCAKLSAgICA3OCwgODksIDY5LCA3MiwgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIAotICAgIDEyOCwgNzgsIDg5LCAxOTYsIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIAotICAgIDczLCAxMjgsIDc4LCA4OSwgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgCi0gICAgNjUsIDY1LCAxMjgsIDc4LCA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgCi0gICAgNzgsIDg3LCA3MywgMTI4LCA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgCi0gICAgNzgsIDg3LCAxMjgsIDc4LCA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgCi0gICAgODUsIDEyOCwgNzgsIDg1LCA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgCi0gICAgNzgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDc4LCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCAKLSAgICA4NSwgNzgsIDg1LCAyMTgsIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIAotICAgIDg1LCA3OCwgNjUsIDg2LCA3MywgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgCi0gICAgODIsIDIwNywgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIAotICAgIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgCi0gICAgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgCi0gICAgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCAKLSAgICA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDUwLCA1MCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgCi0gICAgODUsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgNjUsIAotICAgIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzgsIAotICAgIDg1LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCAKLSAgICAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIAotICAgIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgCi0gICAgNDgsIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDg1LCAKLSAgICA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgODUsIDc3LCAxMjgsIDc4LCA4NCwgMjEzLCAKLSAgICA3OCwgODQsIDc5LCA4MSwgODAsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDczLCA2OSwgMTk3LCA3OCwgODQsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA2NiwgNjUsIDEyOCwgNzgsIDg0LCA2OSwgODUsIDc3LCAxMjgsIDc4LCA4NCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgCi0gICAgNjksIDY5LCAxMjgsIDc4LCA4NCwgNjUsIDgwLCAxMjgsIDc4LCA4NCwgNjUsIDIwOCwgNzgsIDg0LCA2NSwgNjUsIDEyOCwgCi0gICAgNzgsIDgzLCA4NSwgNzksIDIxMiwgNzgsIDgzLCA4NSwgNzgsIDEyOCwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzgsIDgzLCAKLSAgICA3OSwgNzcsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4NCwgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDgwLCAxMjgsIAotICAgIDc4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA4NSwgODQsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDIxMiwgCi0gICAgNzgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNzMsIDY5LCAKLSAgICA2OSwgMTI4LCA3OCwgODMsIDcyLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjUsIDgxLCAxMjgsIDc4LCA4MywgNzIsIAotICAgIDY1LCAxMjgsIDc4LCA4MywgNjksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA4MywgNjksIDc4LCAxMjgsIDc4LCA4MywgCi0gICAgNjUsIDEyOCwgNzgsIDgyLCA4OSwgODgsIDEyOCwgNzgsIDgyLCA4OSwgODQsIDEyOCwgNzgsIDgyLCA4OSwgODIsIDg4LCAKLSAgICAxMjgsIDc4LCA4MiwgODksIDgyLCAxMjgsIDc4LCA4MiwgODksIDgwLCAxMjgsIDc4LCA4MiwgODksIDEyOCwgNzgsIDgyLCAKLSAgICA4NSwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODQsIDEyOCwgNzgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4MiwgODUsIAotICAgIDgyLCAxMjgsIDc4LCA4MiwgODUsIDgwLCAxMjgsIDc4LCA4MiwgODUsIDEyOCwgNzgsIDgyLCA3OSwgODgsIDEyOCwgNzgsIAotICAgIDgyLCA3OSwgODAsIDEyOCwgNzgsIDgyLCA3OSwgMTI4LCA3OCwgODIsIDY5LCA4OCwgMTI4LCA3OCwgODIsIDY5LCA4NCwgCi0gICAgMTI4LCA3OCwgODIsIDY5LCA4MCwgMTI4LCA3OCwgODIsIDY5LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgCi0gICAgNjUsIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDc5LCA4OSwgMTI4LCA3OCwgCi0gICAgNzksIDg4LCAxMjgsIDc4LCA3OSwgODYsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIAotICAgIDEyOCwgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA3OCwgCi0gICAgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3OCwgNzksIDg0LCA2OSwgNjYsIDc5LCA3OSwgNzUsIDEyOCwgNzgsIDc5LCAKLSAgICA4NCwgNjksIDY2LCA3OSwgNzksIDIwMywgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIAotICAgIDg0LCA2NywgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgCi0gICAgMjEyLCA3OCwgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCAKLSAgICA4MiwgODQsIDcyLCA2OSwgODIsIDIwNiwgNzgsIDc5LCA4MiwgODQsIDIwMCwgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIAotICAgIDc4LCA3OSwgMjEwLCA3OCwgNzksIDgwLCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDc5LCAxMjgsIAotICAgIDc4LCA3OSwgNzgsIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA4MCwgNzksIDg0LCAKLSAgICA2NSwgNjYsIDc2LCAxOTcsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIDczLCA3OCwgNjksIDgyLCAxMjgsIDc4LCA3OSwgNzgsIAotICAgIDQ1LCA2NiwgODIsIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgCi0gICAgNzUsIDcyLCA4NSwgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCAKLSAgICA2NiwgODIsIDY5LCA2NSwgMjAzLCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzksIAotICAgIDc5LCAxMjgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3MywgNzMsIDEyOCwgCi0gICAgNzgsIDc4LCA3OCwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjksIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY5LCAxMjgsIDc4LCAKLSAgICA3OCwgNzgsIDY1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA3OCwgNzgsIDEyOCwgNzgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgCi0gICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCAKLSAgICA3MywgMTI4LCA3OCwgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCAKLSAgICA3OCwgNzgsIDY2LCA4MywgODAsIDEyOCwgNzgsIDc3LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgCi0gICAgNzgsIDc2LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTMsIAotICAgIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgCi0gICAgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCAKLSAgICA0OCwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDEyOCwgCi0gICAgNzgsIDc2LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTAsIAotICAgIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA3NiwgMTI4LCA3OCwgNzUsIDc5LCA3NywgMTI4LCA3OCwgNzUsIAotICAgIDIwNywgNzgsIDc1LCA3MywgNzgsIDY4LCA3MywgMTI4LCA3OCwgNzUsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgCi0gICAgNzQsIDg5LCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDc0LCAKLSAgICA4OSwgODIsIDEyOCwgNzgsIDc0LCA4OSwgODAsIDEyOCwgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCAKLSAgICA3OCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4NSwgODIsIDEyOCwgNzgsIDc0LCA4NSwgODEsIDY1LCAxMjgsIAotICAgIDc4LCA3NCwgODUsIDgwLCAxMjgsIDc4LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgCi0gICAgNzQsIDg1LCA2OSwgODEsIDEyOCwgNzgsIDc0LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODUsIDEyOCwgNzgsIDc0LCAKLSAgICA3OSwgODgsIDEyOCwgNzgsIDc0LCA3OSwgODQsIDEyOCwgNzgsIDc0LCA3OSwgODAsIDEyOCwgNzgsIDc0LCA3OSwgNzksIAotICAgIDEyOCwgNzgsIDc0LCA3OSwgMTI4LCA3OCwgNzQsIDczLCA4OCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIAotICAgIDczLCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgNjksIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCAKLSAgICA3MywgMTI4LCA3OCwgNzQsIDIwMSwgNzgsIDc0LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA4NCwgMTI4LCAKLSAgICA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNjUsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIAotICAgIDc0LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCAxOTcsIDc4LCA3NCwgCi0gICAgNjksIDEyOCwgNzgsIDc0LCA2NSwgODEsIDEyOCwgNzgsIDc0LCA2NSwgODAsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAKLSAgICA3NiwgNzMsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjUsIDY1LCAxMjgsIDc4LCA3MywgODgsIAotICAgIDEyOCwgNzgsIDczLCA4NCwgODIsIDY5LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIDgyLCA4NSwgCi0gICAgNzEsIDg1LCAxMjgsIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgNzgsIDY5LCAKLSAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgNzMsIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgMTk3LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIAotICAgIDY4LCA2NSwgMTc4LCA3OCwgNzMsIDc3LCAxMjgsIDc4LCA3MywgMjA1LCA3OCwgNzMsIDc1LCA3MiwgNjUsIDcyLCA3MywgCi0gICAgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDEyOCwgNzgsIDczLCAKLSAgICA3MiwgODMsIDcyLCA4NiwgNjUsIDgzLCA2NSwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA3NywgNzMsIDc4LCAxMjgsIAotICAgIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDY5LCA4MywgNzIsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc4LCA3MywgCi0gICAgNzEsIDcyLCAyMTIsIDc4LCA3MywgNzEsIDcxLCA2NSwgNzIsIDczLCA4NCwgNjUsIDEyOCwgNzgsIDczLCA2OSwgODgsIAotICAgIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzgsIDczLCA2OSwgCi0gICAgODUsIDc4LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA2NSwgNzgsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIAotICAgIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCAKLSAgICA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgMjA2LCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCAxMjgsIDc4LCAKLSAgICA3MywgNjYsIDEyOCwgNzgsIDczLCA2NSwgMTI4LCA3OCwgNzMsIDUwLCAxMjgsIDc4LCA3MiwgODUsIDY5LCAxMjgsIDc4LCAKLSAgICA3MiwgNzQsIDY1LCAxMjgsIDc4LCA3MiwgMTI4LCA3OCwgNzEsIDg5LCA2OSwgMTI4LCA3OCwgNzEsIDg2LCA2OSwgMTI4LCAKLSAgICA3OCwgNzEsIDg1LCA4NSwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg0LCAxMjgsIAotICAgIDc4LCA3MSwgODUsIDc5LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCAKLSAgICAxMjgsIDc4LCA3MSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgNzksIDg1LCAxMjgsIDc4LCA3MSwgNzksIDIxMywgNzgsIDcxLCAKLSAgICA3OSwgODQsIDEyOCwgNzgsIDcxLCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3OSwgODAsIDEyOCwgNzgsIDcxLCA3OSwgNzgsIAotICAgIDEyOCwgNzgsIDcxLCA3OSwgNzcsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDcyLCAxMjgsIDc4LCA3MSwgNzksIDY5LCAyMDAsIAotICAgIDc4LCA3MSwgMjA3LCA3OCwgNzEsIDc1LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDg3LCA2NSwgNjksIDc4LCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAotICAgIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA2OSwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKLSAgICAxOTcsIDc4LCA3MSwgNzUsIDczLCA3OCwgNjgsIDIwMSwgNzgsIDcxLCA3NSwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIAotICAgIDc1LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODIsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgxLCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgNjUsIDc3LCA3MywgMTI4LCA3OCwgNzEsIAotICAgIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgCi0gICAgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzIsIDY1LCAxMjgsIDc4LCA3MSwgNzEsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDc4LCAKLSAgICA3MSwgNzEsIDg1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIAotICAgIDgxLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgMjA5LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgCi0gICAgNzEsIDg1LCA3OSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2OSwgNjksIDg0LCAKLSAgICAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIDgzLCA3MiwgNjUsIDE5NywgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgCi0gICAgMjA2LCA3OCwgNzEsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzksIDEyOCwgCi0gICAgNzgsIDcxLCA3MSwgNzMsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCAKLSAgICA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDIxMywgNzgsIAotICAgIDcxLCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA2OSwgCi0gICAgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCAKLSAgICA4MCwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgCi0gICAgMTI4LCA3OCwgNzEsIDcxLCAxMjgsIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgNjksIDg1LCA4MiwgNjksIDg1LCAKLSAgICA4NCwgMTI4LCA3OCwgNzEsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDY5LCA2OSwgMTI4LCAKLSAgICA3OCwgNzEsIDY5LCA2NSwgNjgsIDY1LCA3NiwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA4NSwgCi0gICAgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCA3OCwgNzEsIDY1LCAyMTEsIDc4LCA3MSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgCi0gICAgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIDc4LCA3MSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDEyOCwgNzgsIDcxLCAKLSAgICA2NSwgNzMsIDEyOCwgNzgsIDcxLCA2NSwgNzIsIDEyOCwgNzgsIDcxLCA2NSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgMTkzLCAKLSAgICA3OCwgNzAsIDEyOCwgNzgsIDY5LCA4OCwgMjEyLCA3OCwgNjksIDg4LCAxMjgsIDc4LCA2OSwgODcsIDgzLCA4MCwgNjUsIAotICAgIDgwLCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NywgNzYsIDczLCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4NywgMTI4LCA3OCwgCi0gICAgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIDc4LCA2OSwgODUsIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCAKLSAgICA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgODQsIDY5LCAxOTYsIDc4LCA2OSwgODEsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgCi0gICAgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzYsIDEyOCwgCi0gICAgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIDcxLCAKLSAgICA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgNjcsIDc1LCA4NCwgNzMsIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgODMsIAotICAgIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3OCwgCi0gICAgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIDY4LCAKLSAgICA4NSwgNzgsIDEyOCwgNzgsIDY4LCAyMTMsIDc4LCA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgNzksIDg0LCAxMjgsIDc4LCAKLSAgICA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIDc5LCAxMjgsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc4LCA2OCwgNzksIAotICAgIDc3LCA2NiwgODUsIDEyOCwgNzgsIDY4LCA3OSwgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgCi0gICAgODQsIDEyOCwgNzgsIDY4LCA3MywgODEsIDEyOCwgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAKLSAgICAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCA2OCwgNzMsIDY4LCA2NSwgMTI4LCA3OCwgNjgsIDczLCA2NSwgODEsIAotICAgIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4NCwgCi0gICAgMTI4LCA3OCwgNjgsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDgwLCAxMjgsIDc4LCAKLSAgICA2OCwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDEyOCwgNzgsIDY4LCA2NSwgODgsIDEyOCwgNzgsIDY4LCA2NSwgODQsIAotICAgIDEyOCwgNzgsIDY4LCA2NSwgODAsIDEyOCwgNzgsIDY4LCA2NSwgNzcsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDc4LCA3MSwgCi0gICAgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjgsIDY1LCAxOTMsIDc4LCAKLSAgICA2NiwgODksIDg4LCAxMjgsIDc4LCA2NiwgODksIDg0LCAxMjgsIDc4LCA2NiwgODksIDgyLCA4OCwgMTI4LCA3OCwgNjYsIAotICAgIDg5LCA4MiwgMTI4LCA3OCwgNjYsIDg5LCA4MCwgMTI4LCA3OCwgNjYsIDg5LCAxMjgsIDc4LCA2NiwgODUsIDg4LCAxMjgsIAotICAgIDc4LCA2NiwgODUsIDg0LCAxMjgsIDc4LCA2NiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgMTI4LCA3OCwgCi0gICAgNjYsIDg1LCA4MCwgMTI4LCA3OCwgNjYsIDg1LCAxMjgsIDc4LCA2NiwgNzksIDg4LCAxMjgsIDc4LCA2NiwgNzksIDg0LCAKLSAgICAxMjgsIDc4LCA2NiwgNzksIDgwLCAxMjgsIDc4LCA2NiwgNzksIDEyOCwgNzgsIDY2LCA3MywgODgsIDEyOCwgNzgsIDY2LCAKLSAgICA3MywgODQsIDEyOCwgNzgsIDY2LCA3MywgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2NiwgNzMsIAotICAgIDY5LCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgMTI4LCA3OCwgNjYsIDczLCAxMjgsIDc4LCA2NiwgNzIsIDEyOCwgNzgsIAotICAgIDY2LCA2NSwgODgsIDEyOCwgNzgsIDY2LCA2NSwgODQsIDEyOCwgNzgsIDY2LCA2NSwgODAsIDEyOCwgNzgsIDY2LCA2NSwgCi0gICAgMTI4LCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCAxMjgsIDc4LCA2NSwgODgsIDczLCAKLSAgICA2NSwgMjA2LCA3OCwgNjUsIDg4LCAxMjgsIDc4LCA2NSwgODUsIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY1LCA4NSwgNjgsIAotICAgIDczLCAyMTgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgCi0gICAgNzgsIDY1LCA4MywgNzUsIDY1LCA4MCwgMjAxLCA3OCwgNjUsIDgzLCA3MiwgNzMsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCAKLSAgICA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgCi0gICAgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgODIsIDEyOCwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgCi0gICAgNjUsIDc5LCAyMTEsIDc4LCA2NSwgNzgsIDgzLCA2NSwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCAKLSAgICA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIAotICAgIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIAotICAgIDY1LCA3NSwgMTI4LCA3OCwgNjUsIDczLCA4MiwgMTkzLCA3OCwgNjUsIDczLCAyMDQsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIAotICAgIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDcxLCA2NSwgMTI4LCA3OCwgNjUsIDcxLCAxOTMsIDc4LCA2NSwgCi0gICAgNzEsIDEyOCwgNzgsIDY1LCAxOTksIDc4LCA2NSwgNjksIDEyOCwgNzgsIDY1LCA2NiwgNzYsIDY1LCAxMjgsIDc4LCA2NSwgCi0gICAgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgNjUsIAotICAgIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNjUsIAotICAgIDQ1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA0OSwgMTI4LCA3OCwgNDgsIDUyLCA0OCwgCi0gICAgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDY1LCAxMjgsIDc4LCAKLSAgICA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MiwgMTI4LCA3OCwgNDgsIAotICAgIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIDQ4LCA1MSwgCi0gICAgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgNTYsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc4LCAKLSAgICA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCA0OCwgNTAsIDUxLCAxMjgsIDc4LCA0OCwgNTAsIAotICAgIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA0OCwgNDksIDU3LCAxMjgsIAotICAgIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDEyOCwgCi0gICAgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDQ4LCAKLSAgICA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDQ4LCA0OSwgNDksIAotICAgIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIAotICAgIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDQ4LCA0OCwgCi0gICAgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgNDksIDEyOCwgCi0gICAgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAyMTcsIDc3LCA4OSwgODgsIDEyOCwgNzcsIDg5LCAKLSAgICA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCA3NywgODksIDgwLCAxMjgsIDc3LCA4OSwgNjUsIAotICAgIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgMjE3LCA3NywgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAKLSAgICAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCAKLSAgICA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgCi0gICAgODYsIDgzLCAxMjgsIDc3LCA4NiwgNzksIDgwLCAxMjgsIDc3LCA4NiwgNzMsIDEyOCwgNzcsIDg2LCA2OSwgODUsIDY1LCAKLSAgICA2OSwgNzgsIDcxLCA2NSwgNzcsIDEyOCwgNzcsIDg2LCAxMjgsIDc3LCAyMTQsIDc3LCA4NSwgODgsIDEyOCwgNzcsIDg1LCAKLSAgICA4NSwgODMsIDczLCA3NSwgNjUsIDg0LCA3OSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgODUsIDgyLCA2OCwgNzIsIDY1LCA3NCwgCi0gICAgMTkzLCA3NywgODUsIDg1LCAxMjgsIDc3LCA4NSwgODQsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgCi0gICAgODMsIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA4MiwgNzksIDc5LCA3NywgMTI4LCA3NywgODUsIDgzLCA3MiwgNTEsIAotICAgIDEyOCwgNzcsIDg1LCA4MywgNzIsIDE3OSwgNzcsIDg1LCA4MywgNzIsIDEyOCwgNzcsIDg1LCA4MywgMjAwLCA3NywgODUsIAotICAgIDgyLCA4OCwgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIDc3LCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgCi0gICAgODIsIDY4LCA2NSwgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgODUsIDgyLCAxMjgsIDc3LCA4NSwgODEsIDY4LCAKLSAgICA2NSwgNzcsIDEyOCwgNzcsIDg1LCA4MCwgMTI4LCA3NywgODUsIDc5LCA4OCwgMTI4LCA3NywgODUsIDc5LCA4NCwgMTI4LCAKLSAgICA3NywgODUsIDc5LCA4MCwgMTI4LCA3NywgODUsIDc5LCA3NywgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIAotICAgIDg1LCA3OCwgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCA2NSwgNzIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgCi0gICAgNjksIDg0LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCAyMTIsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCAKLSAgICA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgCi0gICAgODQsIDczLCA3OSwgMjA2LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCAKLSAgICA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgODUsIDc2LCA4NCwgNzMsIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIAotICAgIDIwMSwgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgCi0gICAgODUsIDcxLCA4MywgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NSwgMTk5LCA3NywgODUsIDY5LCAxMjgsIDc3LCA4NSwgCi0gICAgNjcsIDcyLCAxMjgsIDc3LCA4NSwgNjcsIDIwMCwgNzcsIDg1LCA2NywgNjUsIDY1LCA2OCwgMTI4LCA3NywgODUsIDY1LCAKLSAgICA3OCwgMTI4LCA3NywgODUsIDY1LCA2OSwgMTI4LCA3NywgODUsIDQ1LCA3MSwgNjUsIDY1LCA3MiwgNzYsIDY1LCAxOTMsIAotICAgIDc3LCAyMTMsIDc3LCA4MywgMTI4LCA3NywgODAsIDY1LCAxMjgsIDc3LCA3OSwgODksIDY1LCA3MywgMTI4LCA3NywgNzksIAotICAgIDg4LCAxMjgsIDc3LCA3OSwgODYsIDczLCAxOTcsIDc3LCA3OSwgODYsIDY5LCAxOTYsIDc3LCA3OSwgODUsIDg0LCA3MiwgCi0gICAgMTI4LCA3NywgNzksIDg1LCA4NCwgMjAwLCA3NywgNzksIDg1LCA4MywgNjksIDEyOCwgNzcsIDc5LCA4NSwgODMsIDE5NywgCi0gICAgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA4MywgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIAotICAgIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNzcsIDc5LCA4NSwgNzgsIDIxMiwgNzcsIDc5LCA4NSwgCi0gICAgNzgsIDY4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCAxOTYsIDc3LCA3OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzcsIDc5LCAKLSAgICA4NCwgMTI4LCA3NywgNzksIDgyLCA4NCwgODUsIDg1LCA3NywgMTI4LCA3NywgNzksIDgyLCA4NCwgNjUsIDgyLCAxMjgsIAotICAgIDc3LCA3OSwgODIsIDgwLCA3MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNzcsIDc5LCA4MiwgNzgsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzcsIDc5LCA4MCwgMTI4LCA3NywgNzksIDc5LCA4MywgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIAotICAgIDc3LCA3OSwgNzksIDc4LCAxMjgsIDc3LCA3OSwgNzksIDIwNiwgNzcsIDc5LCA3OSwgNzcsIDgwLCA4NSwgODEsIDEyOCwgCi0gICAgNzcsIDc5LCA3OSwgNzcsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDc5LCA3OSwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzMsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgNzgsIAotICAgIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgCi0gICAgNzksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA3NywgNzksIDc4LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNzcsIAotICAgIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzcsIDc5LCA3OCwgNzksIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgCi0gICAgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA3OSwgNzgsIDc1LCA2OSwgODksIDEyOCwgNzcsIDc5LCAKLSAgICA3OCwgNzUsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDczLCAxMjgsIDc3LCA3OSwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIAotICAgIDgxLCAxMjgsIDc3LCA3OSwgNzgsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIAotICAgIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAKLSAgICAxMjgsIDc3LCA3OSwgNjgsIDY5LCAxMjgsIDc3LCA3OSwgNjYsIDczLCA3NiwgMTk3LCA3NywgNzksIDY1LCAxMjgsIDc3LCAKLSAgICAyMDcsIDc3LCA3OCwgODksIDY1LCAyMDUsIDc3LCA3OCwgNjUsIDgzLCAxMjgsIDc3LCA3NywgODMsIDgwLCAxMjgsIDc3LCAKLSAgICA3NywgMTI4LCA3NywgMjA1LCA3NywgNzYsIDY1LCAxMjgsIDc3LCA3NiwgMTI4LCA3NywgNzUsIDgwLCA2NSwgODIsIDY1LCAKLSAgICAyMDksIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgNzMsIDgzLCA4MiwgNjUsIDEyOCwgNzcsIDczLCAKLSAgICA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgMTI4LCA3NywgNzMsIDgyLCA2OSwgNjgsIAotICAgIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgCi0gICAgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3NywgNzMsIDc4LCA3MywgODMsIDg0LCAKLSAgICA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNzMsIDc4LCA3MywgNjgsIDczLCA4MywgNjcsIAotICAgIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY2LCA4NSwgODMsIDEyOCwgNzcsIDczLCA3NywgNjksIDEyOCwgNzcsIDczLCA3NywgCi0gICAgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgNzMsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDc3LCAKLSAgICA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCA3NiwgNzUsIDIxNywgNzcsIDczLCA3NiwgMTI4LCAKLSAgICA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzMsIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCA3NSwgODIsIAotICAgIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3MywgNjksIAotICAgIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAotICAgIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzcsIDczLCA2OSwgNjksIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgCi0gICAgNzMsIDY4LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA3MywgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCAKLSAgICA3NywgNzMsIDY4LCA2OCwgNzYsIDE5NywgNzcsIDczLCAxOTYsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDY3LCA3OSwgODAsIAotICAgIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCAKLSAgICAyMDcsIDc3LCA3MywgNjcsIDIxMCwgNzcsIDcyLCA5MCwgMTI4LCA3NywgNzIsIDY1LCAxMjgsIDc3LCA3MiwgMTI4LCA3NywgCi0gICAgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4NCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDcxLCAKLSAgICA4NSwgODIsIDEyOCwgNzcsIDcxLCA4NSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCA3NywgNzEsIDg1LCAxMjgsIDc3LCA3MSwgNzksIDg4LCAxMjgsIAotICAgIDc3LCA3MSwgNzksIDg0LCAxMjgsIDc3LCA3MSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgNzksIDEyOCwgNzcsIDcxLCAyMDcsIAotICAgIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDczLCA2OSwgMTI4LCA3NywgNzEsIDY5LCA4OCwgMTI4LCA3NywgCi0gICAgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDg1LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAKLSAgICA3OSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzAsIDg1LCA3NywgMTI4LCA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIAotICAgIDY2LCA3MywgMTI4LCA3NywgNzEsIDY2LCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3NywgCi0gICAgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgODEsIAotICAgIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgMTI4LCA3NywgNzEsIDY1LCA4OCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgCi0gICAgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCAxMjgsIDc3LCA3MSwgMTI4LCA3NywgNzAsIDc5LCA3OCwgCi0gICAgMTI4LCA3NywgNzAsIDc5LCAyMDYsIDc3LCA3MCwgNzksIDEyOCwgNzcsIDcwLCA3MywgODksIDY1LCA4MSwgMTI4LCA3NywgCi0gICAgNzAsIDczLCA2OSwgNjksIDEyOCwgNzcsIDcwLCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3MCwgNjksIDg1LCA4MSwgMTI4LCAKLSAgICA3NywgNzAsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA3MCwgNjUsIDY1LCAxMjgsIDc3LCA2OSwgOTAsIDkwLCA3OSwgCi0gICAgMTI4LCA3NywgNjksIDg4LCAxMjgsIDc3LCA2OSwgODUsIDIxMiwgNzcsIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgCi0gICAgNzgsIDc0LCA3OSwgNzcsIDc4LCA2OCwgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCA3OCwgMTI4LCA3NywgNjksIDg0LCAKLSAgICA4MiwgNzksIDEyOCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgCi0gICAgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAKLSAgICAxMjgsIDc3LCA2OSwgODQsIDY5LCA3NSwgMTI4LCA3NywgNjksIDg0LCA2OSwgNzEsIDEyOCwgNzcsIDY5LCA4NCwgNjUsIAotICAgIDc2LCAxMjgsIDc3LCA2OSwgODQsIDE5MywgNzcsIDY5LCA4MywgODMsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc3LCA2OSwgCi0gICAgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODMsIDgzLCA2NSwgNzEsIDE5NywgNzcsIDY5LCA4MywgNzksIAotICAgIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgNzcsIDY5LCA4MiwgNzksIDczLCA4NCwgCi0gICAgNzMsIDE5NSwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDE5MywgNzcsIDY5LCAKLSAgICA4MiwgNzMsIDY4LCA3MywgNjUsIDc4LCA4MywgMTI4LCA3NywgNjksIDgyLCA3MywgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIAotICAgIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgMjE3LCA3NywgCi0gICAgNjksIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIDY5LCA3NywgNzksIDEyOCwgNzcsIDY5LCAKLSAgICA3NywgNjYsIDY5LCA4MiwgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIAotICAgIDc3LCA2NiwgNjksIDIxMCwgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgCi0gICAgNzcsIDY5LCAyMDUsIDc3LCA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCA3NiwgNzMsIDc1LCAxMjgsIDc3LCAKLSAgICA2OSwgNzMsIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgMTI4LCA3NywgNjksIDcxLCA2NSwgODAsIAotICAgIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA3NiwgNzMsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgCi0gICAgODUsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDc3LCAKLSAgICAxMjgsIDc3LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NywgNjksIDY4LCA3MywgODUsIDc3LCAxMjgsIDc3LCA2OSwgNjgsIAotICAgIDczLCA4NSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjcsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDY3LCA2NSwgCi0gICAgMjA0LCA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCAyMTIsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAKLSAgICAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDE5NywgNzcsIAotICAgIDY4LCA4NSwgMjA2LCA3NywgMTk2LCA3NywgNjcsIDcyLCAyMTMsIDc3LCA2NywgNzIsIDY1LCAyMDYsIDc3LCAxOTUsIDc3LCAKLSAgICA2NiwgODUsIDc5LCA4MSwgMTI4LCA3NywgNjYsIDg1LCA3OSwgMTI4LCA3NywgNjYsIDg1LCA2OSwgMTI4LCA3NywgNjYsIAotICAgIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA3NywgCi0gICAgNjYsIDc5LCAxMjgsIDc3LCA2NiwgNzMsIDg0LCAxMjgsIDc3LCA2NiwgNzMsIDIxMiwgNzcsIDY2LCA3MywgODIsIDczLCAKLSAgICA2OSwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NiwgNjksIAotICAgIDg1LCA4MiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDc3LCAxMjgsIDc3LCA2NiwgNjksIDgyLCA2NSwgNjksIDEyOCwgCi0gICAgNzcsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDc1LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjksIDY5LCAKLSAgICAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIDY2LCA2NSwgODEsIDEyOCwgNzcsIDY2LCA2NSwgNzgsIDg5LCA3MywgMTI4LCAKLSAgICA3NywgNjYsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA2NSwgNzUsIDY5LCA4NCwgMTI4LCA3NywgNjYsIAotICAgIDY1LCA2NSwgMTI4LCA3NywgNjYsIDY1LCAxOTMsIDc3LCA2NiwgMTkzLCA3NywgNjYsIDUyLCAxMjgsIDc3LCA2NiwgNTEsIAotICAgIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgNjYsIDEyOCwgNzcsIDE5NCwgNzcsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA4OSwgMTI4LCA3NywgNjUsIDg4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODgsIDEyOCwgNzcsIAotICAgIDY1LCA4NSwgMTI4LCA3NywgNjUsIDg0LCA4NCwgNzksIDY3LCA3NSwgMTI4LCA3NywgNjUsIDg0LCA4MiwgNzMsIDg4LCAKLSAgICAxMjgsIDc3LCA2NSwgODQsIDY5LCA4MiwgNzMsIDY1LCA3NiwgODMsIDEyOCwgNzcsIDY1LCA4NCwgMTI4LCA3NywgNjUsIAotICAgIDgzLCAyMTMsIDc3LCA2NSwgODMsIDgzLCA3MywgNzgsIDcxLCAxMjgsIDc3LCA2NSwgODMsIDgzLCA2NSwgNzEsIDY5LCAKLSAgICAxMjgsIDc3LCA2NSwgODMsIDc5LCA4MiwgMTkzLCA3NywgNjUsIDgzLCA3NSwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNzAsIAotICAgIDY1LCA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDUwLCAxMjgsIDc3LCA2NSwgODMsIDY3LCA4NSwgNzYsIDczLCA3OCwgCi0gICAgMTk3LCA3NywgNjUsIDgyLCA4OSwgMTI4LCA3NywgNjUsIDgyLCA4NSwgNzUsIDg1LCAxMjgsIDc3LCA2NSwgODIsIDg0LCAKLSAgICA4OSwgODIsIDczLCAxOTMsIDc3LCA2NSwgODIsIDgyLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgODIsIDgyLCA3MywgNjUsIAotICAgIDcxLCAxOTcsIDc3LCA2NSwgODIsIDc1LCA2OSwgODIsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MiwgMTI4LCA3NywgCi0gICAgNjUsIDgyLCA3NSwgNDUsIDUxLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTAsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCAKLSAgICA0OSwgMTI4LCA3NywgNjUsIDgyLCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNzIsIDEyOCwgNzcsIDY1LCA4MiwgNjcsIAotICAgIDY1LCA4NCwgNzksIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCAKLSAgICA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4MywgNzMsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIAotICAgIDg0LCA2NSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCAxOTMsIDc3LCA2NSwgODIsIDEyOCwgNzcsIDY1LCA4MSwgCi0gICAgNjUsIDcwLCAxMjgsIDc3LCA2NSwgODEsIDEyOCwgNzcsIDY1LCA4MCwgNzYsIDE5NywgNzcsIDY1LCA4MCwgNzMsIDgxLCAKLSAgICAxMjgsIDc3LCA2NSwgMjA4LCA3NywgNjUsIDc5LCAxMjgsIDc3LCA2NSwgNzgsIDgzLCA4OSwgNzksIDc4LCAxMjgsIDc3LCAKLSAgICA2NSwgNzgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMjE4LCA3NywgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA3OCwgNzEsIDY1LCA3NiwgNjUsIDc3LCAxMjgsIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDc2LCA3MywgCi0gICAgNzgsIDE5OSwgNzcsIDY1LCA3OCwgNjgsIDY1LCA3MywgMTk1LCA3NywgNjUsIDc4LCA2NywgNzIsIDIxMywgNzcsIDY1LCAKLSAgICA3OCwgNjUsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDc3LCA2NSwgNzYsIDg0LCA2OSwgODMsIDE5NywgNzcsIDY1LCA3NiwgNjksIAotICAgIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzcsIDY1LCA3NiwgMTk3LCA3NywgNjUsIDc2LCA2NSwgCi0gICAgNzUsIDc5LCAyMDYsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDY1LCAxMjgsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIAotICAgIDE5MywgNzcsIDY1LCA3MywgOTAsIDY5LCAxMjgsIDc3LCA2NSwgNzMsIDg5LCA2NSwgNzcsIDc5LCA3NSwgMTI4LCA3NywgCi0gICAgNjUsIDczLCA4NCwgNjUsIDczLCA3NSwgNzIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDgyLCA4NSwgMTI4LCA3NywgNjUsIDczLCAKLSAgICA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgNjUsIDczLCA3NywgNjUsIDc2LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MywgNzYsIAotICAgIDY2LCA3OSwgMjE2LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCA3NywgNjUsIDczLCA2OCwgNjksIDc4LCAKLSAgICAxMjgsIDc3LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MiwgNzQsIDc5LCA3OCwgMTk5LCA3NywgNjUsIDcyLCA3MiwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDY1LCA3NSwgCi0gICAgNzIsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNzcsIDY1LCA3MiwgMTI4LCAKLSAgICA3NywgNjUsIDcxLCA3OCwgNzMsIDcwLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNjksIDgzLCA3MywgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA3NCwgNjksIDg0LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA4NiwgCi0gICAgNjksIDg1LCA4OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzUsIDgwLCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDcxLCAKLSAgICA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3NywgNjYsIDY1LCAxMjgsIDc3LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NSwgNjksIDc2LCA2OSwgNjksIDEyOCwgCi0gICAgNzcsIDY1LCA2OSwgNzUsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDY1LCA2OCwgODksIDY1LCAxMjgsIDc3LCA2NSwgNjgsIDg1LCAKLSAgICAxMjgsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMjAwLCA3NywgNjUsIDY4LCA2OCwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIAotICAgIDE5MywgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCi0gICAgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NSwgNjcsIAotICAgIDg1LCA4NCwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDIwNiwgCi0gICAgNzcsIDY1LCA2NywgNzIsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY1LCA2NSwgODksIDg5LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCAKLSAgICA2NSwgNzMsIDEyOCwgNzcsIDY1LCA2NSwgMTI4LCA3NywgNjUsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDUyLCAxMjgsIDc3LCAKLSAgICA0OCwgNTIsIDUxLCAxMjgsIDc3LCA0OCwgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDQ5LCAxMjgsIDc3LCA0OCwgNTIsIAotICAgIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDUyLCA0OCwgMTI4LCA3NywgNDgsIDUxLCA1NywgMTI4LCA3NywgNDgsIDUxLCA1NiwgCi0gICAgMTI4LCA3NywgNDgsIDUxLCA1NSwgMTI4LCA3NywgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIDUxLCA1MywgMTI4LCA3NywgCi0gICAgNDgsIDUxLCA1MiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc3LCAKLSAgICA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgNTEsIDUwLCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIAotICAgIDUxLCA0OSwgMTI4LCA3NywgNDgsIDUxLCA0OCwgMTI4LCA3NywgNDgsIDUwLCA1NywgMTI4LCA3NywgNDgsIDUwLCA1NiwgCi0gICAgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIDEyOCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIDQ4LCA1MCwgNTQsIDEyOCwgCi0gICAgNzcsIDQ4LCA1MCwgNTMsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUyLCAxMjgsIDc3LCAKLSAgICA0OCwgNTAsIDUxLCAxMjgsIDc3LCA0OCwgNTAsIDUwLCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgMTI4LCA3NywgNDgsIAotICAgIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCA0OCwgMTI4LCA3NywgNDgsIDQ5LCA1NywgMTI4LCA3NywgNDgsIDQ5LCA1NiwgCi0gICAgMTI4LCA3NywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDY1LCAKLSAgICAxMjgsIDc3LCA0OCwgNDksIDU0LCAxMjgsIDc3LCA0OCwgNDksIDUzLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MywgMTI4LCAKLSAgICA3NywgNDgsIDQ5LCA1MiwgMTI4LCA3NywgNDgsIDQ5LCA1MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzIsIDEyOCwgNzcsIAotICAgIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjksIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjYsIAotICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCA0OCwgNDksIDQ5LCAxMjgsIAotICAgIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIDQ4LCA1NywgMTI4LCA3NywgCi0gICAgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgMTI4LCA3NywgNDgsIDQ4LCAKLSAgICA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIAotICAgIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NSwgCi0gICAgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCA4OSwgODgsIDEyOCwgNzYsIAotICAgIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCA4OSwgODAsIDEyOCwgNzYsIAotICAgIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIDEyOCwgNzYsIDg3LCA3OSwgCi0gICAgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIDczLCAxMjgsIDc2LCA4NywgCi0gICAgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIDg4LCAxMjgsIDc2LCA4NSwgCi0gICAgODUsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3NiwgODUsIDgwLCAxMjgsIDc2LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDc2LCA4NSwgNzksIDEyOCwgCi0gICAgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgNzYsIDg1LCAyMDUsIDc2LCAKLSAgICA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCA3MiwgODUsIDgyLCAxMjgsIDc2LCA4NSwgNzIsIAotICAgIDEyOCwgNzYsIDg1LCA3MSwgNzEsIDY1LCA3MSwgNjksIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDc2LCAxMjgsIDc2LCA4NSwgCi0gICAgNzEsIDY1LCAyMDQsIDc2LCA4NSwgNjksIDEyOCwgNzYsIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA4NSwgNTEsIDEyOCwgCi0gICAgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDE3OCwgNzYsIDgyLCA3OSwgMTI4LCA3NiwgODIsIDc3LCAxMjgsIDc2LCA4MiwgCi0gICAgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgMTk3LCAKLSAgICA3NiwgNzksIDg4LCAxMjgsIDc2LCA3OSwgODcsIDY5LCA4MiwgNjksIDE5NiwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzYsIAotICAgIDc5LCA4NywgNDUsIDE4NSwgNzYsIDc5LCA4NiwgMTk3LCA3NiwgNzksIDg1LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA4NSwgCi0gICAgNjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIDc2LCA3OSwgODUsIDY4LCA3NiwgMjE3LCA3NiwgNzksIDg0LCAKLSAgICA4NSwgODMsIDEyOCwgNzYsIDc5LCA4NCwgMTI4LCA3NiwgNzksIDgyLCA4MiwgODksIDEyOCwgNzYsIDc5LCA4MiwgODIsIAotICAgIDY1LCA3MywgNzgsIDY5LCAxMjgsIDc2LCA3OSwgODEsIDEyOCwgNzYsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCA4NCwgCi0gICAgMTI4LCA3NiwgNzksIDc5LCA4MCwgNjksIDE5NiwgNzYsIDc5LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgMjA4LCA3NiwgCi0gICAgNzksIDc5LCA3OCwgMTI4LCA3NiwgNzksIDc5LCAyMDMsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc5LCA3OCwgODMsIDg1LCAKLSAgICA3NywgMTI4LCA3NiwgNzksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDE5MywgNzYsIDc5LCA3OCwgNzEsIAotICAgIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODksIDgyLCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKLSAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDgzLCA3OSwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgCi0gICAgNzIsIDQ1LCA3OSwgODMsIDIxMSwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzcsIAotICAgIDY1LCA2OCwgMjEwLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3MiwgNjUsIDcxLCAKLSAgICA2NSwgNzYsIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNjUsIDIxMCwgNzYsIAotICAgIDc5LCA3NywgNzcsIDY1LCA2OSwgMTI4LCA3NiwgNzksIDc3LCAxMjgsIDc2LCA3OSwgMjA1LCA3NiwgNzksIDc2LCA3NiwgCi0gICAgNzMsIDgwLCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3NiwgNzYsIDEyOCwgNzYsIDc5LCA3MSwgMjEwLCA3NiwgNzksIDcxLCAKLSAgICA3OSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNzksIDcxLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NiwgNzksIDcxLCAxMjgsIAotICAgIDc2LCA3OSwgNjgsIDY5LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzksIDc3LCA3OSwgODQsIDczLCAKLSAgICA4NiwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzUsIDczLCA3OCwgNzEsIDQ1LCA4MywgNzIsIDczLCA3MCwgMjEyLCA3NiwgNzksIAotICAgIDY3LCAyMDMsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA3NiwgNzksIDY1LCAxMjgsIDc2LCA3OCwgMTI4LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc5LCA3OSwgCi0gICAgMTI4LCA3NiwgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3NiwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNzksIDc5LCAKLSAgICAxMjgsIDc2LCA3NiwgNzYsIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDczLCA3MywgMTI4LCA3NiwgNzYsIDc2LCA3MywgMTI4LCAKLSAgICA3NiwgNzYsIDc2LCA2OSwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDg1LCAxMjgsIAotICAgIDc2LCA3NiwgNzYsIDY1LCA3MywgMTI4LCA3NiwgNzYsIDc2LCA2NSwgNjUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDEyOCwgCi0gICAgNzYsIDc2LCA3NiwgMTI4LCA3NiwgNzQsIDg1LCA2OCwgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCAKLSAgICA3NCwgMTI4LCA3NiwgNzMsIDg4LCAxMjgsIDc2LCA3MywgODcsIDc4LCAxMjgsIDc2LCA3MywgODYsIDgyLCAxOTcsIDc2LCAKLSAgICA3MywgODQsIDg0LCA3NiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgNjksIDIxMCwgNzYsIDczLCA4NCwgODIsIDE5MywgNzYsIAotICAgIDczLCA4NCwgMTI4LCA3NiwgNzMsIDgzLCAyMTMsIDc2LCA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIAotICAgIDc2LCA3MywgODEsIDEyOCwgNzYsIDczLCA4MCwgODMsIDg0LCA3MywgNjcsIDc1LCAxMjgsIDc2LCA3MywgNzgsIDc1LCA3MywgCi0gICAgNzgsIDE5OSwgNzYsIDczLCA3OCwgMjAzLCA3NiwgNzMsIDc4LCA3MSwgODMsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCAKLSAgICA4MywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgMjExLCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU3LCAxMjgsIDc2LCA3MywgNzgsIAotICAgIDY5LCA0NSwgNTUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1MSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDQ5LCAKLSAgICAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MCwgMTI4LCA3NiwgNzMsIAotICAgIDc3LCA3NywgODUsIDEyOCwgNzYsIDczLCA3NywgNzcsIDIxMywgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMTk2LCA3NiwgCi0gICAgNzMsIDc3LCA3MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDEyOCwgNzYsIDczLCAKLSAgICA3NywgNjksIDEyOCwgNzYsIDczLCA3NywgNjYsIDIxMywgNzYsIDczLCA3NiwgODksIDEyOCwgNzYsIDczLCA3NiwgNzMsIAotICAgIDg0LCA3MiwgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgNzYsIDczLCA3MSwgNzIsIDg0LCA3MiwgNzksIDg1LCA4MywgNjksIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCAKLSAgICA3MywgNzAsIDY5LCAxMjgsIDc2LCA3MywgNjksIDg4LCAxMjgsIDc2LCA3MywgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDc2LCA3MywgNjksIDY5LCAxMjgsIDc2LCA3MywgNjksIDEyOCwgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIAotICAgIDY2LCA4MiwgNjUsIDEyOCwgNzYsIDczLCA2NiwgNjksIDgyLCA4NCwgODksIDEyOCwgNzYsIDczLCA2NSwgNjYsIDczLCA3NiwgCi0gICAgNzMsIDg0LCAyMTcsIDc2LCA3MiwgNzMsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAotICAgIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzIsIDY1LCA2NSwgMTI4LCA3NiwgNzIsIDEyOCwgNzYsIDY5LCA5MCwgNzIsIAotICAgIDEyOCwgNzYsIDY5LCA4OCwgMTI4LCA3NiwgNjksIDg2LCA2OSwgMjA0LCA3NiwgNjksIDg1LCA3NywgMTI4LCA3NiwgNjksIAotICAgIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgMTI4LCA3NiwgCi0gICAgNjksIDIxMywgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgODMsIDEyOCwgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgMTI4LCAKLSAgICA3NiwgNjksIDIxMiwgNzYsIDY5LCA4MywgODMsIDY5LCAyMTAsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgNzgsIAotICAgIDEyOCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDc2LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA3OSwgCi0gICAgODAsIDY1LCA4MiwgNjgsIDEyOCwgNzYsIDY5LCA3OSwgMTI4LCA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAKLSAgICAyMTAsIDc2LCA2OSwgNzgsIDczLCA4MywgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA2OSwgNzgsIDY5LCA4MiwgCi0gICAgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDIwMCwgNzYsIDY5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAKLSAgICAxOTMsIDc2LCA2OSwgNzcsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDc3LCA3OSwgNzMsIDEyOCwgNzYsIDY5LCA3NiwgNjksIAotICAgIDg0LCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAxMjgsIAotICAgIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIAotICAgIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCA3MSwgNzIsIDIxMiwgCi0gICAgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCAKLSAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgwLCA3OSwgCi0gICAgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDc2LCAKLSAgICA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgCi0gICAgMTk5LCA3NiwgNjksIDcwLCA4NCwgMTI4LCA3NiwgNjksIDY5LCA4MiwgNjUsIDY5LCA4NywgNjUsIDEyOCwgNzYsIDY5LCAKLSAgICA2OSwgNzUsIDEyOCwgNzYsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc2LCA2OSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNzYsIAotICAgIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgNzAsIDEyOCwgNzYsIDY5LCA2NSwgMTk4LCA3NiwgCi0gICAgNjksIDY1LCA2OCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgMTk2LCAKLSAgICA3NiwgNjgsIDY1LCA3OCwgMTI4LCA3NiwgNjgsIDUwLCAxMjgsIDc2LCA2NywgMjAxLCA3NiwgNjcsIDE5NywgNzYsIDY1LCAKLSAgICA5MCwgMjE3LCA3NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NiwgNjUsIDg4LCAxMjgsIDc2LCA2NSwgODcsIAotICAgIDEyOCwgNzYsIDY1LCAyMTUsIDc2LCA2NSwgODUsIDc2LCA2NSwgMTI4LCA3NiwgNjUsIDg1LCA3NSwgNjUsIDIxOCwgNzYsIAotICAgIDY1LCA4NCwgNzMsIDc4LCA2NSwgODQsIDE5NywgNzYsIDY1LCA4NCwgNzMsIDc1LCAxMjgsIDc2LCA2NSwgODQsIDY5LCA4MiwgCi0gICAgNjUsIDIwNCwgNzYsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCAKLSAgICA2NSwgMjA0LCA3NiwgNjUsIDgyLCA3MSwgNjksIDIxMCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAxMjgsIDc2LCA2NSwgODIsIAotICAgIDcxLCAxOTcsIDc2LCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDEyOCwgNzYsIAotICAgIDY1LCA3OCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgNzYsIDY1LCA3OCwgNzEsIDg1LCA2NSwgNzEsIDE5NywgNzYsIDY1LCA3OCwgCi0gICAgNjksIDgzLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCAxMjgsIDc2LCAKLSAgICA2NSwgNzcsIDY5LCAxOTYsIDc2LCA2NSwgNzcsIDY5LCAxMjgsIDc2LCA2NSwgNzcsIDE5NywgNzYsIDY1LCA3NywgNjgsIAotICAgIDY1LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDc3LCA2NSwgCi0gICAgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzYsIDEyOCwgNzYsIDY1LCAyMDQsIDc2LCA2NSwgNzUsIDc1LCA3MiwgNjUsIDc4LCAKLSAgICA3MSwgODksIDY1LCA3OSwgMTI4LCA3NiwgNjUsIDc0LCA2NSwgNzgsIDg5LCA2NSwgNzYsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIAotICAgIDIwMSwgNzYsIDY1LCA3MiwgODMsIDcyLCA4NSwgMTI4LCA3NiwgNjUsIDcyLCAxMjgsIDc2LCA2NSwgNzEsIDg1LCA4MywgCi0gICAgMTI4LCA3NiwgNjUsIDcxLCAyMTMsIDc2LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMjEwLCA3NiwgCi0gICAgNjUsIDcxLCA2NSwgNjYsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDE5NCwgNzYsIDY1LCA2OSwgODYsIDEyOCwgNzYsIDY1LCAKLSAgICA2OSwgMTI4LCA3NiwgNjUsIDY4LCAyMTcsIDc2LCA2NSwgNjcsIDc1LCAxMjgsIDc2LCA2NSwgNjcsIDY1LCAxMjgsIDc2LCAKLSAgICA2NSwgNjYsIDc5LCA4NSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzYsIDY1LCA2NiwgNzksIDgyLCAxMjgsIDc2LCA2NSwgNjYsIAotICAgIDczLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDc2LCA2NSwgCi0gICAgNjYsIDY1LCA4NCwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCAxMjgsIDc2LCAKLSAgICA2NSwgNjUsIDc3LCA4NSwgMTI4LCA3NiwgNjUsIDY1LCA3NywgMTI4LCA3NiwgNjUsIDY1LCA3MywgMTI4LCA3NiwgNDgsIAotICAgIDQ4LCA1NCwgNjUsIDEyOCwgNzYsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgCi0gICAgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3NSwgODksIDg1LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA4OSwgODUsIAotICAgIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIDc2LCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODksIDczLCAxMjgsIAotICAgIDc1LCA4OSwgNjksIDEyOCwgNzUsIDg5LCA2NSwgODQsIDcyLCA3OSwgMjExLCA3NSwgODksIDY1LCA2NSwgMTI4LCA3NSwgCi0gICAgODksIDY1LCAxMjgsIDc1LCA4OCwgODcsIDczLCAxMjgsIDc1LCA4OCwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDg3LCAKLSAgICA2OSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNjUsIDEyOCwgNzUsIDg4LCA4NSwgMTI4LCAKLSAgICA3NSwgODgsIDc5LCAxMjgsIDc1LCA4OCwgNzMsIDEyOCwgNzUsIDg4LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA2OSwgMTI4LCAKLSAgICA3NSwgODgsIDY1LCA2NSwgMTI4LCA3NSwgODgsIDY1LCAxMjgsIDc1LCA4NywgODUsIDUxLCA0OSwgNTYsIDEyOCwgNzUsIAotICAgIDg3LCA3OSwgNzksIDEyOCwgNzUsIDg3LCA3OSwgMTI4LCA3NSwgODcsIDczLCA3MywgMTI4LCA3NSwgODcsIDczLCAxMjgsIAotICAgIDc1LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4NywgNjksIDEyOCwgNzUsIDg3LCA2NSwgODksIDEyOCwgNzUsIDg3LCA2NSwgCi0gICAgNjksIDg0LCAxMjgsIDc1LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgCi0gICAgODgsIDEyOCwgNzUsIDg1LCA4NSwgNzIsIDEyOCwgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgCi0gICAgNzUsIDg1LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCAKLSAgICA3MywgODIsIDc5LCAxMjgsIDc1LCA4NSwgODIsIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDc1LCA4NSwgODIsIDEyOCwgNzUsIDg1LCAyMTAsIDc1LCA4NSwgODEsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgMjA4LCA3NSwgODUsIDc5LCA3NywgMTI4LCA3NSwgODUsIDc5LCAxMjgsIAotICAgIDc1LCA4NSwgNzgsIDcxLCAxMjgsIDc1LCA4NSwgNzgsIDY4LCA2OCwgNjUsIDc2LCA3MywgODksIDY1LCAxMjgsIDc1LCA4NSwgCi0gICAgNzYsIDEyOCwgNzUsIDg1LCAyMDQsIDc1LCA4NSwgNjksIDg0LCAxMjgsIDc1LCA4NSwgNTUsIDEyOCwgNzUsIDg1LCA1MiwgCi0gICAgMTI4LCA3NSwgODUsIDE4MCwgNzUsIDg1LCA1MSwgMTI4LCA3NSwgODUsIDE3OSwgNzUsIDg0LCAxMjgsIDc1LCA4MywgODMsIAotICAgIDg1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCA4NSwgMTI4LCA3NSwgODMsIDgzLCA3OSwgNzksIDEyOCwgNzUsIDgzLCA4MywgCi0gICAgNzksIDEyOCwgNzUsIDgzLCA4MywgNzMsIDczLCAxMjgsIDc1LCA4MywgODMsIDczLCAxMjgsIDc1LCA4MywgODMsIDY5LCAKLSAgICA2OSwgMTI4LCA3NSwgODMsIDgzLCA2OSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIAotICAgIDczLCAxMjgsIDc1LCA4MywgODMsIDY1LCA2NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgMTI4LCA3NSwgODMsIDgzLCAxMjgsIAotICAgIDc1LCA4MywgNzMsIDEyOCwgNzUsIDgyLCA2OSwgNzcsIDY1LCA4MywgODQsIDczLCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgCi0gICAgNzcsIDc5LCA4OSwgODAsIDc5LCA4MiwgODIsIDc5LCA3OSwgNzgsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIAotICAgIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAKLSAgICAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDE5MywgNzUsIDgwLCA4NSwgMTI4LCA3NSwgODAsIDc5LCA4MSwgMTI4LCAKLSAgICA3NSwgODAsIDc5LCA3OSwgMTI4LCA3NSwgODAsIDc5LCAxMjgsIDc1LCA4MCwgNzMsIDEyOCwgNzUsIDgwLCA2OSwgODUsIAotICAgIDg4LCAxMjgsIDc1LCA4MCwgNjksIDY5LCAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgODIsIDY1LCA4MSwgCi0gICAgMTI4LCA3NSwgODAsIDY1LCA3OCwgMTI4LCA3NSwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODgsIDEyOCwgNzUsIDc5LCA4NiwgCi0gICAgODUsIDg1LCAxMjgsIDc1LCA3OSwgODQsIDc5LCAxMjgsIDc1LCA3OSwgODIsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDc5LCAKLSAgICA4MiwgNzksIDc4LCA3MywgODMsIDEyOCwgNzUsIDc5LCA4MiwgNjksIDY1LCAyMDYsIDc1LCA3OSwgODIsIDY1LCA3OCwgNzMsIAotICAgIDE5NSwgNzUsIDc5LCA4MSwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzUsIDc5LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA3OSwgCi0gICAgODAsIDEyOCwgNzUsIDc5LCA3OSwgODAsIDc5LCAxMjgsIDc1LCA3OSwgNzksIDc3LCA4NSwgODUsIDg0LCAxMjgsIDc1LCAKLSAgICA3OSwgNzksIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIAotICAgIDc3LCAxOTMsIDc1LCA3OSwgNzcsIDIwMSwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgNjUsIDEyOCwgNzUsIDc5LCA3NywgCi0gICAgNjYsIDg1LCA4NiwgMTkzLCA3NSwgNzksIDc3LCA2NiwgMjEzLCA3NSwgNzksIDc1LCA3OSwgMTI4LCA3NSwgNzksIDc1LCAKLSAgICAxMjgsIDc1LCA3OSwgMjAzLCA3NSwgNzksIDczLCAxMjgsIDc1LCA3OSwgMjAxLCA3NSwgNzksIDcyLCAxMjgsIDc1LCA3OSwgCi0gICAgNzEsIDcyLCA3OSwgNzcsIDEyOCwgNzUsIDc5LCA2OSwgODQsIDEyOCwgNzUsIDc5LCA2NSwgNzYsIDY1LCAxMjgsIDc1LCAKLSAgICA3OSwgNjUsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzUsIAotICAgIDc4LCA3MywgNzAsIDY5LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCAxOTcsIDc1LCA3NywgMTI4LCA3NSwgMjA1LCA3NSwgNzYsIAotICAgIDczLCA4NCwgNzksIDc4LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCAKLSAgICAxOTMsIDc1LCA3NiwgNjUsIDEyOCwgNzUsIDc2LCAxMjgsIDc1LCA3NSwgODUsIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgCi0gICAgNzUsIDczLCAxMjgsIDc1LCA3NSwgNjksIDY5LCAxMjgsIDc1LCA3NSwgNjksIDEyOCwgNzUsIDc1LCA2NSwgMTI4LCA3NSwgCi0gICAgNzUsIDEyOCwgNzUsIDc0LCA2OSwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCAKLSAgICA4NCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgCi0gICAgNzksIDc1LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDczLCAKLSAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIAotICAgIDc1LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgCi0gICAgNzUsIDczLCA4OSwgNjksIDc5LCAyMDMsIDc1LCA3MywgODgsIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCAKLSAgICA4MywgNzMsIDc4LCAxOTksIDc1LCA3MywgODMsIDgzLCAxMjgsIDc1LCA3MywgODMsIDIxMSwgNzUsIDczLCA4MywgNzMsIAotICAgIDc3LCA1MywgMTI4LCA3NSwgNzMsIDgzLCA3MywgNzcsIDE4MSwgNzUsIDczLCA4MywgNzIsIDEyOCwgNzUsIDczLCA4MywgCi0gICAgNjUsIDc2LCAxMjgsIDc1LCA3MywgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzksIDc3LCAKLSAgICA2OSwgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIAotICAgIDc1LCA3MywgODIsIDc5LCAxMjgsIDc1LCA3MywgODIsIDcxLCA3MiwgNzMsIDIxOCwgNzUsIDczLCA4MSwgMTI4LCA3NSwgCi0gICAgNzMsIDgwLCAxMjgsIDc1LCA3MywgMjA4LCA3NSwgNzMsIDc4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NSwgNzMsIDc4LCAKLSAgICA2OCwgNjksIDgyLCA3MSwgNjUsIDgyLCA4NCwgNjksIDc4LCAxMjgsIDc1LCA3MywgNzcsIDc5LCA3OCwgNzksIDEyOCwgNzUsIAotICAgIDczLCA3MywgMTI4LCA3NSwgNzMsIDcyLCAxMjgsIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIAotICAgIDc1LCA3MywgNjksIDY5LCA3NywgMTI4LCA3NSwgNzMsIDY5LCAxMjgsIDc1LCA3MywgNjgsIDEyOCwgNzUsIDczLCAxOTYsIAotICAgIDc1LCA3MywgNjcsIDc1LCAxMjgsIDc1LCA3MiwgOTAsIDEyOCwgNzUsIDcyLCA4NywgNjUsIDczLCAxMjgsIDc1LCA3MiwgCi0gICAgODUsIDY5LCA3OCwgNDUsIDc2LCA4NSwgMTk3LCA3NSwgNzIsIDg1LCA2OSwgMjA2LCA3NSwgNzIsIDg1LCA2OCwgNjUsIDc3LCAKLSAgICAxMjgsIDc1LCA3MiwgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIDc5LCAyMTIsIDc1LCAKLSAgICA3MiwgNzksIDc4LCAxMjgsIDc1LCA3MiwgNzksIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIAotICAgIDIwNywgNzUsIDcyLCA3NywgMjEzLCA3NSwgNzIsIDczLCA4NCwgMTI4LCA3NSwgNzIsIDczLCA3OCwgODksIDY1LCAxMjgsIAotICAgIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDIwMCwgNzUsIDcyLCA3MywgMTI4LCA3NSwgNzIsIDcyLCA3OSwgMTI4LCA3NSwgCi0gICAgNzIsIDcyLCA2NSwgMTI4LCA3NSwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNzUsIDcyLCAKLSAgICA2OSwgNjksIDEyOCwgNzUsIDcyLCA2OSwgMTI4LCA3NSwgNzIsIDY1LCA4MiwgNzksIDgzLCA3MiwgODQsIDcyLCAyMDEsIAotICAgIDc1LCA3MiwgNjUsIDgyLCAxMjgsIDc1LCA3MiwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNzIsIDY1LCA3OCwgMTk5LCA3NSwgCi0gICAgNzIsIDY1LCA3OCwgNjgsIDE5MywgNzUsIDcyLCA2NSwgNzgsIDEyOCwgNzUsIDcyLCA2NSwgNzcsIDg0LCAyMDEsIDc1LCAKLSAgICA3MiwgNjUsIDc1LCA2NSwgODMsIDgzLCA3MywgNjUsIDIwNiwgNzUsIDcyLCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA2NSwgNzIsIAotICAgIDEyOCwgNzUsIDcyLCA2NSwgMjAwLCA3NSwgNzIsIDY1LCA2NSwgMTI4LCA3NSwgNzEsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIAotICAgIDY1LCA4MCwgMTI4LCA3NSwgNjksIDg5LCA2NywgNjUsIDIwOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgODIsIDY4LCAKLSAgICAxMjgsIDc1LCA2OSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODksIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODMsIAotICAgIDcyLCA2OSwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgCi0gICAgODAsIDg1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCA3OSwgMjEyLCA3NSwgNjksIDg1LCA3NywgMTI4LCA3NSwgNjksIDg1LCAKLSAgICA3NSwgNjksIDg1LCA4NCwgNzgsIDY4LCA2NSwgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIAotICAgIDY1LCA2OSwgODQsIDc3LCA2OSwgODUsIDc4LCAxMjgsIDc1LCA2OSwgODUsIDY1LCA2OSwgODIsIDczLCAxMjgsIDc1LCA2OSwgCi0gICAgODQsIDg0LCAyMDEsIDc1LCA2OSwgODMsIDcyLCA1MCwgMTI4LCA3NSwgNjksIDgyLCA2OSwgODQsIDEyOCwgNzUsIDY5LCAKLSAgICA3OSwgODcsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIAotICAgIDc3LCA2NSwgODQsIDE5MywgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgMTkzLCA3NSwgNjksIDc4LCA2NSwgODQsIDEyOCwgCi0gICAgNzUsIDY5LCA3OCwgMTI4LCA3NSwgNjksIDIwNiwgNzUsIDY5LCA3NywgODAsIDg1LCA3NiwgMTI4LCA3NSwgNjksIDc3LCAKLSAgICA4MCwgODUsIDIwNCwgNzUsIDY5LCA3NywgODAsIDc2LCA3MywgMTI4LCA3NSwgNjksIDc3LCA4MCwgNzYsIDIwMSwgNzUsIAotICAgIDY5LCA3NywgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc3LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgCi0gICAgNjksIDc2LCA4NiwgNzMsIDIwNiwgNzUsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzIsIDY5LCAyMDAsIDc1LCAKLSAgICA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MCwgODUsIDc2LCA2NSwgMTI4LCA3NSwgNjksIDY5LCA4MywgODUsIDEyOCwgNzUsIAotICAgIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA3NSwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY3LCA2NSwgNzYsIDEyOCwgCi0gICAgNzUsIDY2LCAxMjgsIDc1LCA2NSwgOTAsIDY1LCA3NSwgMjAwLCA3NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKLSAgICA3NSwgNjUsIDg5LCA2NSwgMjAwLCA3NSwgNjUsIDg4LCAxMjgsIDc1LCA2NSwgODcsIDczLCAxMjgsIDc1LCA2NSwgODYsIAotICAgIDg5LCA3NSwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDIwNiwgNzUsIDY1LCA4NSwgCi0gICAgMTI4LCA3NSwgNjUsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY1LCAKLSAgICA4NCwgNzIsIDY1LCA3NSwgMTkzLCA3NSwgNjUsIDg0LCA2NSwgODYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA2NSwgODQsIAotICAgIDY1LCA4NiwgMTkzLCA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCA3OCwgNjUsIDQ1LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCAKLSAgICA3OCwgMTkzLCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIAotICAgIDIwNiwgNzUsIDY1LCA4MywgODIsIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIDc1LCA2NSwgODMsIDc1LCA2NSwgCi0gICAgNzYsIDEyOCwgNzUsIDY1LCA4MywgNzUsIDY1LCAyMDQsIDc1LCA2NSwgODMsIDcyLCA3NywgNzMsIDgyLCAyMDEsIDc1LCAKLSAgICA2NSwgODIsIDgzLCA3MiwgNjUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDgyLCA3OSwgODIsIDczLCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDgyLCAyMDcsIDc1LCA2NSwgODIsIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA2NSwgCi0gICAgODIsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzUsIAotICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDY1LCAKLSAgICAxMjgsIDc1LCA2NSwgODAsIDgwLCAxOTMsIDc1LCA2NSwgODAsIDc5LCAxMjgsIDc1LCA2NSwgODAsIDcyLCAxMjgsIDc1LCAKLSAgICA2NSwgODAsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIAotICAgIDc1LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2NSwgNzgsIDE5OSwgNzUsIDY1LCA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgCi0gICAgNjUsIDc3LCA1MiwgMTI4LCA3NSwgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIDc3LCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAKLSAgICAxMjgsIDc1LCA2NSwgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCAKLSAgICA2NSwgNzMsIDg0LCA3MiwgMjAxLCA3NSwgNjUsIDczLCA4MiwgNzMsIDEyOCwgNzUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDIwMSwgNzUsIDY1LCA3MCwgNjUsIDEyOCwgNzUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDE5OCwgNzUsIDY1LCA2OCwgNTMsIAotICAgIDEyOCwgNzUsIDY1LCA2OCwgMTgxLCA3NSwgNjUsIDY4LCA1MiwgMTI4LCA3NSwgNjUsIDY4LCA1MSwgMTI4LCA3NSwgNjUsIAotICAgIDY4LCAxNzksIDc1LCA2NSwgNjgsIDUwLCAxMjgsIDc1LCA2NSwgNjgsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIAotICAgIDY2LCAxMjgsIDc1LCA2NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3NSwgNjUsIDY1LCA3MCwgCi0gICAgMTI4LCA3NSwgNjUsIDUwLCAxMjgsIDc1LCA2NSwgMTc4LCA3NSwgNDgsIDQ4LCA1NiwgMTI4LCA3NSwgNDgsIDQ4LCA1NSwgCi0gICAgMTI4LCA3NSwgNDgsIDQ4LCA1NCwgMTI4LCA3NSwgNDgsIDQ4LCA1MywgMTI4LCA3NSwgNDgsIDQ4LCA1MiwgMTI4LCA3NSwgCi0gICAgNDgsIDQ4LCA1MSwgMTI4LCA3NSwgNDgsIDQ4LCA1MCwgMTI4LCA3NSwgNDgsIDQ4LCA0OSwgMTI4LCA3NCwgODcsIDY1LCAKLSAgICAxMjgsIDc0LCA4NSwgODUsIDEyOCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgODUsIDgzLCA4NCwgNzMsIDcwLCA3MywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NCwgODUsIDgwLCA3MywgODQsIDY5LCA4MiwgMTI4LCA3NCwgODUsIDc5LCA4NCwgCi0gICAgMTI4LCA3NCwgODUsIDc5LCA4MCwgMTI4LCA3NCwgODUsIDc4LCA3OSwgMTI4LCA3NCwgODUsIDc4LCA2OSwgMTI4LCA3NCwgCi0gICAgODUsIDc2LCA4OSwgMTI4LCA3NCwgODUsIDY5LCA4NSwgNzMsIDEyOCwgNzQsIDg1LCA2OCwgODUsIDc2LCAxMjgsIDc0LCAKLSAgICA4NSwgNjgsIDcxLCA2OSwgMTI4LCA3NCwgODUsIDY4LCA2OSwgNzksIDQ1LCA4MywgODAsIDY1LCA3OCwgNzMsIDgzLCAyMDAsIAotICAgIDc0LCA3OSwgODksIDc5LCA4NSwgMjExLCA3NCwgNzksIDg5LCAxMjgsIDc0LCA3OSwgODYsIDY5LCAxMjgsIDc0LCA3OSwgCi0gICAgMjEyLCA3NCwgNzksIDc4LCA3MSwgMTI4LCA3NCwgNzksIDc4LCAxOTMsIDc0LCA3OSwgNzUsIDY5LCA4MiwgMTI4LCA3NCwgCi0gICAgNzksIDczLCA3OCwgNjksIDY4LCAxMjgsIDc0LCA3OSwgNzMsIDc4LCAxMjgsIDc0LCA3OSwgNjUsIDEyOCwgNzQsIDc0LCAKLSAgICA4OSwgODgsIDEyOCwgNzQsIDc0LCA4OSwgODQsIDEyOCwgNzQsIDc0LCA4OSwgODAsIDEyOCwgNzQsIDc0LCA4OSwgMTI4LCAKLSAgICA3NCwgNzQsIDg1LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzQsIAotICAgIDc0LCA4NSwgODIsIDEyOCwgNzQsIDc0LCA4NSwgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc0LCA3NCwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgMTI4LCA3NCwgNzQsIDg1LCAxMjgsIDc0LCA3NCwgNzksIDg4LCAKLSAgICAxMjgsIDc0LCA3NCwgNzksIDg0LCAxMjgsIDc0LCA3NCwgNzksIDgwLCAxMjgsIDc0LCA3NCwgNzksIDEyOCwgNzQsIDc0LCAKLSAgICA3MywgODgsIDEyOCwgNzQsIDc0LCA3MywgODQsIDEyOCwgNzQsIDc0LCA3MywgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIAotICAgIDg4LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODAsIDEyOCwgNzQsIDc0LCA3MywgCi0gICAgNjksIDEyOCwgNzQsIDc0LCA3MywgMTI4LCA3NCwgNzQsIDY5LCA2OSwgMTI4LCA3NCwgNzQsIDY5LCAxMjgsIDc0LCA3NCwgCi0gICAgNjUsIDEyOCwgNzQsIDczLCA3NiwgMTI4LCA3NCwgNzMsIDczLCAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCAKLSAgICA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NCwgNzMsIDY1LCAxMjgsIDc0LCA3MiwgNzksIDEyOCwgNzQsIDcyLCA2OSwgNzIsIAotICAgIDEyOCwgNzQsIDcyLCA2NSwgNzgsIDEyOCwgNzQsIDcyLCA2NSwgNzcsIDEyOCwgNzQsIDcyLCA2NSwgNjUsIDEyOCwgNzQsIAotICAgIDcyLCA2NSwgMTI4LCA3NCwgNjksIDg1LCAxMjgsIDc0LCA2OSwgODIsIDg1LCA4MywgNjUsIDc2LCA2OSwgNzcsIDEyOCwgCi0gICAgNzQsIDY5LCA4MiwgNjUsIDIwNiwgNzQsIDY5LCA4MiwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCA3NCwgNjksIDcyLCAKLSAgICAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NCwgNjksIDY5LCA3NywgMTI4LCAKLSAgICA3NCwgNjksIDY1LCA3OCwgODMsIDEyOCwgNzQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzQsIDY1LCA4NiwgNzMsIAotICAgIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc0LCA2NSwgODUsIDEyOCwgNzQsIDY1LCA4MiwgMTI4LCA3NCwgNjUsIDgwLCA2NSwgCi0gICAgNzgsIDY5LCA4MywgMTk3LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDEyOCwgNzQsIDY1LCA3OCwgODUsIDY1LCA4MiwgODksIAotICAgIDEyOCwgNzQsIDY1LCA3NiwgNzYsIDY1LCA3NCwgNjUsIDc2LCA2NSwgNzYsIDc5LCA4NSwgNzIsIDc5LCA4NSwgMTI4LCA3NCwgCi0gICAgNjUsIDczLCAxMjgsIDc0LCA2NSwgNzIsIDEyOCwgNzQsIDY1LCA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NywgNzUsIDQ1LCAKLSAgICA3OSwgNDUsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc0LCA2NSwgNjcsIDIwMywgNzQsIDQ1LCA4MywgNzMsIAotICAgIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDIwMiwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgNjUsIDEyOCwgCi0gICAgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgMTkzLCA3MywgOTAsIDcyLCA2OSwgMTI4LCA3MywgOTAsIDY1LCA3NSwgNjUsIDg5LCAKLSAgICAxOTMsIDczLCA4OSwgNjksIDc1LCAxMjgsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg1LCA3NCwgNjUsIAotICAgIDEyOCwgNzMsIDg1LCAxMjgsIDczLCA4NCwgMjExLCA3MywgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIAotICAgIDg0LCA2OSwgNzcsIDEyOCwgNzMsIDgzLCA4MywgNzIsIDY1LCA4MiwgMTI4LCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgCi0gICAgODMsIDc5LCAyMDYsIDczLCA4MywgNjksIDc4LCA0NSwgNzMsIDgzLCA2OSwgNzgsIDEyOCwgNzMsIDgzLCA2NSwgNzUsIDczLCAKLSAgICAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDc5LCA3OCwgNDUsIDY3LCA3OSwgCi0gICAgODAsIDgwLCA2OSwgMjEwLCA3MywgODIsIDc5LCA3OCwgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCA2OSwgMTk2LCAKLSAgICA3MywgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCAxMjgsIDczLCA3OSwgODQsIDE5MywgNzMsIAotICAgIDc5LCA4MiwgMTI4LCA3MywgNzksIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA3MywgNzgsIDg2LCA3MywgODMsIDczLCA2NiwgCi0gICAgNzYsIDE5NywgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIDY4LCAxMjgsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCAKLSAgICAxOTYsIDczLCA3OCwgODYsIDY5LCA4MiwgODMsIDE5NywgNzMsIDc4LCA4NCwgODIsIDc5LCA2OCwgODUsIDY3LCA2OSwgODIsIAotICAgIDEyOCwgNzMsIDc4LCA4NCwgNzMsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3MywgCi0gICAgMTk1LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgCi0gICAgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzksIDY3LCA3NSwgCi0gICAgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzMsIDc4LCA4NCwgNjksIDgyLCAKLSAgICA3NiwgNjUsIDY3LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIAotICAgIDY5LCA4MywgMjEyLCA3MywgNzgsIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgCi0gICAgMjA0LCA3MywgNzgsIDgzLCA4NSwgNzYsIDY1LCAyMTAsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCA2OSwgNzgsIDg0LCAKLSAgICA2NSwgMjA0LCA3MywgNzgsIDgzLCA3MywgNjgsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAKLSAgICA3OCwgNjUsIDIwNCwgNzMsIDc4LCA4MCwgODUsIDIxMiwgNzMsIDc4LCA3OCwgNzksIDY3LCA2OSwgNzgsIDY3LCA2OSwgCi0gICAgMTI4LCA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDIxMCwgCi0gICAgNzMsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCA3OCwgNzMsIDEyOCwgNzMsIDc4LCAKLSAgICA3MiwgNzMsIDY2LCA3MywgMjEyLCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgMjEyLCA3MywgNzgsIDcxLCA4NywgNjUsIAotICAgIDkwLCAxMjgsIDczLCA3OCwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgNzAsIDc2LCA4NSwgCi0gICAgNjksIDc4LCA2NywgNjksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIDg5LCAxMjgsIDczLCA3OCwgNzAsIDczLCAKLSAgICA3OCwgNzMsIDg0LCAyMTcsIDczLCA3OCwgNjgsIDg1LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc4LCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDIxMiwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3MywgNzgsIDY4LCA3MywgCi0gICAgNjcsIDY1LCA4NCwgNzksIDIxMCwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgNzMsIDc4LCA2OCwgNzMsIDY1LCAyMDYsIDczLCAKLSAgICA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3MywgNzgsIDY4LCA2OSwgODAsIDY5LCA3OCwgNjgsIDY5LCA3OCwgMjEyLCA3MywgNzgsIAotICAgIDY3LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMjExLCA3MywgCi0gICAgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDEyOCwgNzMsIDc4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgMTk3LCAKLSAgICA3MywgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3MywgNzgsIDY3LCA3NiwgODUsIDY4LCA3MywgNzgsIDE5OSwgNzMsIAotICAgIDc4LCA2NywgNzIsIDEyOCwgNzMsIDc4LCA2NiwgNzksIDIxNiwgNzMsIDc4LCA2NSwgODAsIDEyOCwgNzMsIDc4LCA0NSwgCi0gICAgNjUsIDc2LCA2NSwgNzAsIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc3LCA4MCwgNjksIDgyLCAKLSAgICA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgNzMsIAotICAgIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA3MywgNzcsIDc4LCAxMjgsIDczLCA3NywgNzMsIDgzLCA2OSwgCi0gICAgNzksIDIxMSwgNzMsIDc3LCA3MywgNzgsIDUxLCAxMjgsIDczLCA3NywgNzMsIDc4LCAxMjgsIDczLCA3NywgNzMsIDIwNiwgCi0gICAgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIAotICAgIDgyLCA2NSwgMTI4LCA3MywgNzcsIDczLCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNjgsIDczLCA2NSwgCi0gICAgODIsIDcxLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA2NSwgNzEsIDE5NywgNzMsIDc2LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDczLCA3NiwgODUsIDg5LCAxMjgsIDczLCA3NiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIAotICAgIDc2LCA4NSwgODQsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgCi0gICAgNTEsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDIxMywgNzMsIDc2LCAKLSAgICA1MCwgMTI4LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDE5MywgNzMsIDc0LCAxMjgsIDczLCAKLSAgICA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3MSwgNzMsIDEyOCwgNzMsIDcxLCAyMDEsIDczLCA3MSwgNzEsIAotICAgIDg3LCA4MywgMTI4LCA3MywgNzAsIDczLCA3OCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKLSAgICAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDczLCAKLSAgICA2OSwgODUsIDY3LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIAotICAgIDczLCA2OSwgODUsIDc4LCAxOTksIDczLCA2OCwgNzYsIDY5LCAxMjgsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDczLCA2OCwgCi0gICAgNzMsIDIwNSwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NywgNDgsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY4LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2NywgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY4LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU1LCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NSwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDU0LCA2OCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNTEsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ5LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU1LCA0OCwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNzAsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDY5LCA1NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNTAsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU0LCA1NCwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNTMsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1NywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTMsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNTAsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUwLCA1MiwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA3MCwgNTYsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjgsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU3LCA0OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NiwgNzAsIDQ4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTMsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA1MiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNTEsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUxLCA2NywgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNjgsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA1MCwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNDksIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA2NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTYsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2NywgNzIsIDc5LCA4NSwgMTI4LCA3MywgCi0gICAgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgNzMsIDc3LCA2NSwgODQsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCAKLSAgICA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNjcsIDY5LCA3NiwgNjUsIDc4LCA2OCwgNzMsIDY3LCA0NSwgODksIDgyLCAxMjgsIAotICAgIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIDczLCA2NSwgODUsIDY4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA1MywgCi0gICAgMTI4LCA3MywgNDgsIDQ5LCA1MiwgMTI4LCA3MywgNDgsIDQ5LCA1MSwgMTI4LCA3MywgNDgsIDQ5LCA1MCwgMTI4LCA3MywgCi0gICAgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDEyOCwgNzMsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDczLCAKLSAgICA0OCwgNDksIDQ4LCAxMjgsIDczLCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1NywgMTI4LCA3MywgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA3MywgNDgsIDQ4LCA1NSwgMTI4LCA3MywgNDgsIDQ4LCA1NCwgMTI4LCA3MywgNDgsIDQ4LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIDEyOCwgNzMsIDQ4LCA0OCwgNTIsIDEyOCwgNzMsIDQ4LCA0OCwgNTEsIDEyOCwgCi0gICAgNzMsIDQ4LCA0OCwgNTAsIDEyOCwgNzMsIDQ4LCA0OCwgNDksIDEyOCwgNzMsIDQ1LCA4OSwgODUsIDEyOCwgNzMsIDQ1LCAKLSAgICA4OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCAxMjgsIDczLCA0NSwgODksIAotICAgIDY1LCA2OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgNDUsIDc5LCAxMjgsIDczLCA0NSwgODksIDY1LCAxMjgsIDczLCA0NSwgCi0gICAgNzksIDQ1LCA3MywgMTI4LCA3MywgNDUsIDc5LCAxMjgsIDczLCA0NSwgNjksIDg1LCAxMjgsIDczLCA0NSwgNjYsIDY5LCAKLSAgICA2NSwgNzcsIDEyOCwgNzMsIDQ1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgNzMsIDQ1LCA2NSwgMTI4LCA3MiwgOTAsIAotICAgIDkwLCA5MCwgNzEsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA5MCwgODAsIDEyOCwgNzIsIDkwLCA5MCwgCi0gICAgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIDcyLCA5MCwgODQsIDEyOCwgNzIsIDkwLCA3MSwgCi0gICAgMTI4LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDcyLCA4OSwgODAsIDc5LCA2OCwgNzMsIDY1LCAKLSAgICA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzIsIAotICAgIDg5LCA4MCwgNzIsIDY5LCA3OCwgNDUsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCAKLSAgICAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MiwgODgsIDg3LCA3MSwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4MCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgCi0gICAgMTI4LCA3MiwgODgsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDc5LCA4MCwgMTI4LCA3MiwgCi0gICAgODgsIDc5LCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDgwLCAKLSAgICAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDg4LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIDcyLCA4OCwgNzMsIDEyOCwgNzIsIDg4LCA2OSwgODgsIDEyOCwgNzIsIAotICAgIDg4LCA2OSwgODAsIDEyOCwgNzIsIDg4LCA2OSwgMTI4LCA3MiwgODgsIDY1LCA4OCwgMTI4LCA3MiwgODgsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCAxMjgsIDcyLCA4NywgODUsIDEyOCwgNzIsIDg3LCA2NSwgCi0gICAgNzMsIDgyLCAxMjgsIDcyLCA4NiwgMTI4LCA3MiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzIsIDg1LCA4MiwgNjUsIDc4LCAKLSAgICAxMjgsIDcyLCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIDcyLCA4NSwgNzgsIAotICAgIDY4LCA4MiwgNjksIDE5NiwgNzIsIDg1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCA2NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgCi0gICAgNjUsIDIwNiwgNzIsIDg1LCA3NiwgNTAsIDEyOCwgNzIsIDg1LCA3MywgNzMsIDg0LCA3OSwgMTI4LCA3MiwgODUsIDY2LCAKLSAgICA1MCwgMTI4LCA3MiwgODUsIDY2LCAxNzgsIDcyLCA4NSwgNjYsIDEyOCwgNzIsIDg1LCA2NSwgODIsIDY1LCA2OCwgNjgsIAotICAgIDc5LCAxMjgsIDcyLCA4NCwgODMsIDEyOCwgNzIsIDg0LCA3NCwgMTI4LCA3MiwgODIsIDg5LCA4NiwgNzgsIDczLCAxOTMsIAotICAgIDcyLCA4MCwgODcsIDcxLCAxMjgsIDcyLCA4MCwgNjUsIDEyOCwgNzIsIDgwLCAxMjgsIDcyLCA3OSwgODUsIDgzLCAxOTcsIAotICAgIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIDEyOCwgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCAKLSAgICAyMTEsIDcyLCA3OSwgODUsIDgyLCAxMjgsIDcyLCA3OSwgODUsIDIxMCwgNzIsIDc5LCA4NCwgNjksIDc2LCAxMjgsIDcyLCAKLSAgICA3OSwgODQsIDY1LCAxMjgsIDcyLCA3OSwgODMsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA4MywgNjksIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgODMsIDE5NywgNzIsIDc5LCA4MiwgNzgsIDgzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA3NiwgMjE3LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1NCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgCi0gICAgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIAotICAgIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OSwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgCi0gICAgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIAotICAgIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCAKLSAgICA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MiwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MSwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA0OSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgCi0gICAgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIAotICAgIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCAKLSAgICA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OCwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1NCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA3MywgMTI4LCA3MiwgNzksIDgyLCAxOTMsIDcyLCA3OSwgNzksIAotICAgIDgyLCA4NSwgMTI4LCA3MiwgNzksIDc5LCA4MCwgMTI4LCA3MiwgNzksIDc5LCA3OCwgMTI4LCA3MiwgNzksIDc5LCA3NSwgCi0gICAgNjksIDE5NiwgNzIsIDc5LCA3OCwgNjksIDg5LCA2NiwgNjksIDY5LCAxMjgsIDcyLCA3OSwgNzgsIDY5LCAyMTcsIDcyLCAKLSAgICA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDY3LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgCi0gICAgNzMsIDE5NSwgNzIsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgMTk5LCA3MiwgNzksIDc2LCAKLSAgICA2NSwgNzcsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIDIwNSwgNzIsIDc5LCA3NSwgNjUsIDEyOCwgNzIsIDc5LCA3MywgMTI4LCAKLSAgICA3MiwgNzksIDY3LCA3MiwgNzksIDEyOCwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDg4LCAxMjgsIAotICAgIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAxMjgsIDcyLCA3OCwgNzksIDg0LCAxMjgsIDcyLCA3OCwgCi0gICAgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDgwLCAKLSAgICAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDc4LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIDcyLCA3OCwgNzMsIDEyOCwgNzIsIDc4LCA2OSwgODgsIDEyOCwgNzIsIAotICAgIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgMTI4LCA3MiwgNzgsIDY1LCA4OCwgMTI4LCA3MiwgNzgsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCAxMjgsIDcyLCA3NywgODksIDg4LCAxMjgsIDcyLCA3NywgCi0gICAgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgMTI4LCA3MiwgNzcsIDg5LCAKLSAgICAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODUsIDg0LCAxMjgsIDcyLCA3NywgODUsIDgyLCA4OCwgMTI4LCAKLSAgICA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzIsIAotICAgIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIDEyOCwgNzIsIDc3LCA3OSwgCi0gICAgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgNzIsIDc3LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA3OSwgMTI4LCA3MiwgCi0gICAgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCA3MiwgNzcsIDczLCA4MCwgMTI4LCA3MiwgNzcsIDczLCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCAxMjgsIDcyLCA3NywgNzMsIAotICAgIDEyOCwgNzIsIDc3LCA2OSwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgMTI4LCA3MiwgNzcsIDY1LCA4NCwgMTI4LCA3MiwgNzcsIAotICAgIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCAxMjgsIDcyLCA3NiwgODksIDg4LCAxMjgsIDcyLCA3NiwgODksIDg0LCAxMjgsIAotICAgIDcyLCA3NiwgODksIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgMTI4LCA3MiwgNzYsIDg5LCA4MCwgMTI4LCA3MiwgCi0gICAgNzYsIDg5LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDg0LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAKLSAgICA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIDg1LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzIsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCAxMjgsIDcyLCA3NiwgODUsIDEyOCwgNzIsIAotICAgIDc2LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA3OSwgMTI4LCA3MiwgNzYsIDczLCA4OCwgCi0gICAgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODgsIDEyOCwgCi0gICAgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCAxMjgsIDcyLCA3NiwgNzMsIDEyOCwgNzIsIDc2LCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDc2LCA2OSwgODAsIDEyOCwgNzIsIDc2LCA2OSwgMTI4LCA3MiwgNzYsIDY1LCA4OCwgMTI4LCAKLSAgICA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgMTI4LCA3MiwgNzYsIDY1LCAxMjgsIDcyLCA3NSwgMTI4LCAKLSAgICA3MiwgNzMsIDkwLCA2NiwgMTI4LCA3MiwgNzMsIDgzLCA4NCwgNzksIDgyLCA3MywgMTk1LCA3MiwgNzMsIDgyLCA3MywgODEsIAotICAgIDEyOCwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MywgODAsIDY5LCA2OSwgMTk2LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgyLCA2OSwgCi0gICAgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgNDUsIDE4NSwgNzIsIDczLCA3MSwgNzIsIDQ1LCA3MiwgNjksIDY5LCA3NiwgNjksIAotICAgIDE5NiwgNzIsIDczLCA2OSwgODgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDcyLCA3MywgNjksIDg1LCAyMDAsIDcyLCAKLSAgICA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDcyLCA3MywgMTk1LCA3MiwgNzMsIDY5LCAxMjgsIDcyLCA3MywgNjgsIAotICAgIDczLCA3OCwgMTk5LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNzIsIDczLCA2OCwgNjksIDEyOCwgNzIsIDczLCA2NiwgCi0gICAgNzMsIDgzLCA2NywgODUsIDgzLCAxMjgsIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MiwgODUsIDEyOCwgNzIsIDcyLCAKLSAgICA3MywgMTI4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA3MiwgNzIsIDY5LCAxMjgsIDcyLCA3MiwgNjUsIDY1LCAxMjgsIDcyLCAKLSAgICA3MSwgMTI4LCA3MiwgNjksIDg4LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDgyLCA2NSwgCi0gICAgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA3MiwgNjksIDgyLCA4NSwgODQsIDg1LCAxMjgsIDcyLCAKLSAgICA2OSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgODIsIDc3LCA3MywgODQsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNzMsIAotICAgIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA2OSwgODMsIDEyOCwgNzIsIDY5LCA4MiwgNjksIDEyOCwgCi0gICAgNzIsIDY5LCA4MiwgNjYsIDEyOCwgNzIsIDY5LCA4MiwgNjUsIDY5LCA4NSwgMjA1LCA3MiwgNjksIDc4LCA3MSwgMTI4LCAKLSAgICA3MiwgNjksIDc4LCAxOTksIDcyLCA2OSwgNzcsIDgwLCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgODQsIDEyOCwgNzIsIAotICAgIDY5LCA3NiwgNzcsIDY5LCAyMTIsIDcyLCA2OSwgNzYsIDIwNSwgNzIsIDY5LCA3NiwgNzMsIDY3LCA3OSwgODAsIDg0LCA2OSwgCi0gICAgODIsIDEyOCwgNzIsIDY5LCA3NSwgODUsIDg0LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjksIDczLCA4MywgNjksIDczLCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDg2LCA4OSwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCA3NiwgMjE3LCA3MiwgNjksIAotICAgIDY1LCA4NiwgNjksIDc4LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgMjA2LCA3MiwgNjksIDY1LCA4MiwgODQsIDgzLCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDgyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3MiwgNjksIDY1LCA4MiwgODQsIAotICAgIDEyOCwgNzIsIDY5LCA2NSwgODIsIDIxMiwgNzIsIDY5LCA2NSwgODIsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAKLSAgICAyMDQsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIAotICAgIDc5LCA3OCwgMTk3LCA3MiwgNjksIDY1LCA2OCwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgNjUsIDgzLCAKLSAgICAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIDcyLCA2NSwgODUsIAotICAgIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgNzIsIDY1LCA4NCwgCi0gICAgNjksIDEyOCwgNzIsIDY1LCA4NCwgNjcsIDcyLCA3MywgNzgsIDE5OSwgNzIsIDY1LCA4NCwgNjUsIDE5OCwgNzIsIDY1LCAKLSAgICA4MywgNjksIDIxMCwgNzIsIDY1LCA4MywgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgNzgsIAotICAgIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgMjA2LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIDEyOCwgCi0gICAgNzIsIDY1LCA4MiwgNzUsIDc2LCA2OSwgNjUsIDIwNiwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcyLCAKLSAgICA2NSwgODIsIDE5NiwgNzIsIDY1LCA4MCwgODAsIDIxNywgNzIsIDY1LCA3OCwgODUsIDc4LCA3OSwgMjA3LCA3MiwgNjUsIAotICAgIDc4LCA3MSwgOTAsIDcyLCA3OSwgMjEzLCA3MiwgNjUsIDc4LCA2OCwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDIxMSwgCi0gICAgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgMTI4LCA3MiwgNjUsIDc4LCAKLSAgICA2OCwgNjYsIDY1LCA3MSwgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MiwgNjUsIDc4LCA0NSwgNjUsIDc1LCA2NSwgODQsIAotICAgIDEyOCwgNzIsIDY1LCA3NywgOTAsIDY1LCAxMjgsIDcyLCA2NSwgNzcsIDgzLCA4NCwgNjksIDIxMCwgNzIsIDY1LCA3NywgCi0gICAgNzcsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIDIxMCwgNzIsIDY1LCA3NywgNjYsIDg1LCA4MiwgNzEsIDY5LCAKLSAgICA4MiwgMTI4LCA3MiwgNjUsIDc2LCA4MSwgNjUsIDEyOCwgNzIsIDY1LCA3NiwgNzksIDEyOCwgNzIsIDY1LCA3NiwgNzAsIAotICAgIDQ1LCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIDY5LCA4MiwgCi0gICAgNjgsIDEyOCwgNzIsIDY1LCA3NiwgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAxMjgsIDcyLCAKLSAgICA2NSwgNzMsIDgyLCA2NywgODUsIDg0LCAxMjgsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA2NSwgNzEsIDc2LCA2NSwgCi0gICAgMjE4LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA3MiwgNjUsIDcwLCAKLSAgICA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2NSwgNjksIDcxLCAyMDQsIDcyLCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjUsIAotICAgIDY1LCA3NywgMTI4LCA3MiwgNjUsIDE5MywgNzIsIDY1LCA0NSwgNzIsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU2LCAxMjgsIAotICAgIDcyLCA0OCwgNDgsIDU1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgMTI4LCA3MiwgCi0gICAgNDgsIDQ4LCA1MywgMTI4LCA3MiwgNDgsIDQ4LCA1MiwgMTI4LCA3MiwgNDgsIDQ4LCA1MSwgMTI4LCA3MiwgNDgsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNDgsIDQ4LCA0OSwgMTI4LCA3MiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzEsIDg5LCA4NSwgMTI4LCAKLSAgICA3MSwgODksIDc5LCA3OCwgMTI4LCA3MSwgODksIDc5LCAxMjgsIDcxLCA4OSwgNzMsIDEyOCwgNzEsIDg5LCA3MCwgMjEzLCAKLSAgICA3MSwgODksIDY5LCA2OSwgMTI4LCA3MSwgODksIDY1LCA4MywgMTI4LCA3MSwgODksIDY1LCA2NSwgMTI4LCA3MSwgODksIAotICAgIDY1LCAxMjgsIDcxLCA4OSwgMTI4LCA3MSwgODcsIDg1LCAxMjgsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDg3LCA2OSwgNjksIAotICAgIDEyOCwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgODcsIDY1LCAxMjgsIDcxLCA4NiwgMTI4LCAKLSAgICA3MSwgODUsIDgyLCA4NSwgODMsIDcyLCAxMjgsIDcxLCA4NSwgODIsIDg1LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA2NSwgNzcsIAotICAgIDg1LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA4NSwgODIsIDU1LCAxMjgsIDcxLCA4NSwgNzgsIDg1LCAxMjgsIDcxLCA4NSwgCi0gICAgNzgsIDIxMywgNzEsIDg1LCAyMDUsIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCA3MywgODQsIDY1LCA4MiwgMTI4LCA3MSwgCi0gICAgODUsIDE5OSwgNzEsIDg1LCA2OSwgNzIsIDEyOCwgNzEsIDg1LCA2OSwgMjAwLCA3MSwgODUsIDY4LCAxMjgsIDcxLCA4NSwgCi0gICAgMTk2LCA3MSwgODUsIDY1LCA4MiwgNjgsIDgzLCA3NywgNjUsIDc4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDY4LCAKLSAgICA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgCi0gICAgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjUsIDc4LCAyMDEsIDcxLCA4NSwgMTkzLCA3MSwgODUsIDE3OCwgNzEsIDg0LCA2OSwgCi0gICAgMjEwLCA3MSwgODMsIDg1LCA3NywgMTI4LCA3MSwgODMsIDg1LCAyMDUsIDcxLCA4MiwgMjEzLCA3MSwgODIsIDc5LCA4NywgCi0gICAgNzMsIDc4LCAxOTksIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzEsIDgyLCA3OSwgNzgsIDg0LCA3MiwgNzMsIDgzLCAKLSAgICA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MSwgODIsIDczLCA3OCwgNzgsIDczLCA3OCwgMTk5LCA3MSwgODIsIDczLCA3NywgNjUsIAotICAgIDY3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA2OSwgNzEsIDc5LCA4MiwgNzMsIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY5LCAKLSAgICAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIAotICAgIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDIwNiwgCi0gICAgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgMjEwLCA3MSwgODIsIDY5LCA2NSwgMjEyLCA3MSwgODIsIDY1LCA4NiwgNjksIDg5LCAKLSAgICA2NSwgODIsIDE5NiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3MSwgODIsIAotICAgIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgODYsIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDY1LCA4MywgODMsIDEyOCwgNzEsIAotICAgIDgyLCA2NSwgODMsIDIxMSwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIDE5NywgNzEsIDgyLCA2NSwgODAsIDY5LCA4MywgCi0gICAgMTI4LCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNzEsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDcxLCA4MiwgNjUsIDY4LCAKLSAgICA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDcxLCA4MiwgNjUsIDY3LCAxOTcsIAotICAgIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDc5LCA4MiwgODQsIDcyLCA3NywgNzMsIDc1LCA3OSwgMjA2LCA3MSwgNzksIDgyLCA4NCwgCi0gICAgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODMsIDg5LCAKLSAgICA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgNzEsIAotICAgIDczLCAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIDcxLCA3OSwgNzksIDE5NiwgNzEsIDc5LCA3OCwgNzEsIDEyOCwgNzEsIAotICAgIDc5LCA3NiwgNjgsIDEyOCwgNzEsIDc5LCA3NSwgMTI4LCA3MSwgNzksIDczLCA3OCwgMTk5LCA3MSwgNzksIDY2LCA3NiwgCi0gICAgNzMsIDc4LCAxMjgsIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCA3OSwgNjUsIDIwNCwgNzEsIDc5LCA2NSwgMTI4LCA3MSwgCi0gICAgNzgsIDg5LCA3MywgODMsIDEyOCwgNzEsIDc4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3MSwgNzYsIDc5LCAKLSAgICA4NywgNzMsIDc4LCAxOTksIDcxLCA3NiwgNzksIDg0LCA4NCwgNjUsIDIwNCwgNzEsIDc2LCA3OSwgNjYsIDE5NywgNzEsIAotICAgIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCA3NiwgNjksIDczLCA2NywgMjAwLCA3MSwgNzYsIDY1LCA3MSwgCi0gICAgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCA3NCwgNjksIDEyOCwgNzEsIDczLCA4OCwgMTI4LCA3MSwgCi0gICAgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcxLCA3MywgODMsIDIwMCwgNzEsIDczLCA4MywgNjUsIDc2LCAKLSAgICAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDcxLCA3MywgODIsIDc2LCAxMjgsIDcxLCA3MywgODIsIAotICAgIDUxLCAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCA4MiwgNTAsIDEyOCwgNzEsIDczLCA4MiwgMTc4LCA3MSwgNzMsIAotICAgIDgwLCAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIDEyOCwgNzEsIDczLCA3NywgCi0gICAgNjksIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIDcxLCA2NSwgMTI4LCA3MSwgNzMsIDY5LCA4NCwgMTI4LCA3MSwgCi0gICAgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjYsIDc5LCA4NSwgMjExLCA3MSwgNzMsIDY2LCA2NSwgMTI4LCAKLSAgICA3MSwgNzMsIDUyLCAxMjgsIDcxLCA3MywgMTgwLCA3MSwgNzIsIDkwLCAxMjgsIDcxLCA3MiwgODcsIDY1LCAxMjgsIDcxLCAKLSAgICA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCAxOTMsIDcxLCA3MiwgODUsIDEyOCwgNzEsIAotICAgIDcyLCA3OSwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODMsIDg0LCAxMjgsIDcxLCA3MiwgNzksIDEyOCwgNzEsIDcyLCA3MywgCi0gICAgMTI4LCA3MSwgNzIsIDcyLCA2NSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDc4LCAKLSAgICAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIAotICAgIDcyLCA2OSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg0LCAxMjgsIDcxLCA3MiwgNjksIDY5LCAKLSAgICAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIDcxLCA3MiwgNjUsIDg5LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCAKLSAgICA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDgwLCAxMjgsIDcxLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIAotICAgIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCA4NSwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNzEsIDcyLCA2NSwgNzMsIDIwNiwgNzEsIDcyLCA2NSwgNjgsIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDc3LCA2NSwgNjksIAotICAgIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDcxLCA4NywgNjksIDY5LCAxMjgsIAotICAgIDcxLCA3MSwgODcsIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgCi0gICAgNzEsIDg1LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzEsIDcxLCAKLSAgICA4NSwgODIsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDEyOCwgNzEsIDcxLCA3OSwgODgsIDEyOCwgNzEsIDcxLCA3OSwgCi0gICAgODQsIDEyOCwgNzEsIDcxLCA3OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgODgsIDEyOCwgNzEsIDcxLCA3MywgODQsIDEyOCwgCi0gICAgNzEsIDcxLCA3MywgNjksIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgMTI4LCAKLSAgICA3MSwgNzEsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDY5LCA4NCwgMTI4LCA3MSwgNzEsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIAotICAgIDY1LCA4OCwgMTI4LCA3MSwgNzEsIDY1LCA4NCwgMTI4LCA3MSwgNzEsIDY1LCA2NSwgMTI4LCA3MSwgNjksIDg0LCAxOTMsIAotICAgIDcxLCA2OSwgODMsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgCi0gICAgODQsIDczLCA3OCwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAyMDYsIDcxLCA2OSwgODMsIDcyLCA1MCwgMTI4LCAKLSAgICA3MSwgNjksIDgyLCA4MywgNzIsIDY1LCA4OSwgNzMsIDc3LCAxMjgsIDcxLCA2OSwgODIsIDc3LCA2NSwgMjA2LCA3MSwgNjksIAotICAgIDgyLCA2OSwgODMsIDcyLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgMjAwLCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgMTk1LCA3MSwgNjksIDc4LCAKLSAgICA4NCwgNzYsIDE5NywgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcxLCA2OSwgNzgsIDczLCA3NSwgCi0gICAgMjAxLCA3MSwgNjksIDc4LCA2OSwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzcsIDczLCA3OCwgNzMsIDEyOCwgNzEsIDY5LCAKLSAgICA3NywgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNjksIDIwNSwgNzEsIDY5LCA2OCwgNzksIDc2LCA2NSwgCi0gICAgMTI4LCA3MSwgNjksIDY4LCA2OSwgMTI4LCA3MSwgNjksIDY2LCAyMDcsIDcxLCA2OSwgNjYsIDE5MywgNzEsIDY5LCA2NSwgCi0gICAgODIsIDEyOCwgNzEsIDY5LCA2NSwgMjEwLCA3MSwgNjgsIDY1LCA3OCwgMTI4LCA3MSwgNjcsIDczLCA3MSwgMTI4LCA3MSwgCi0gICAgNjcsIDY1LCAyMDYsIDcxLCA2NiwgNzksIDc4LCAxMjgsIDcxLCA2NiwgNzMsIDY5LCAxOTcsIDcxLCA2NiwgNjksIDg1LCAKLSAgICA4OCwgMTI4LCA3MSwgNjYsIDY5LCA4NCwgMTI4LCA3MSwgNjYsIDY1LCA4OSwgNzMsIDEyOCwgNzEsIDY2LCA2NSwgNzUsIAotICAgIDg1LCA4MiwgODUsIDc4LCA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgCi0gICAgODQsIDg0LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCAKLSAgICA2NSwgODUsIDc4LCA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIAotICAgIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIDg0LCA2OSwgMTI4LCA3MSwgNjUsIDgzLCA3MiwgCi0gICAgNjUsIDc4LCAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgMTI4LCA3MSwgNjUsIDgyLCA3OSwgNzgsIAotICAgIDEyOCwgNzEsIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCA4MiwgNjgsIDY5LCA3OCwgMTI4LCA3MSwgCi0gICAgNjUsIDgyLCA1MSwgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIDE5NiwgNzEsIDY1LCAyMDgsIDcxLCA2NSwgNzgsIDc3LCAKLSAgICA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDY4LCAxOTMsIDcxLCA2NSwgNzgsIAotICAgIDUwLCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCA2NSwgCi0gICAgMTI4LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2OSwgMTI4LCA3MSwgNjUsIDc3LCAxOTcsIDcxLCA2NSwgCi0gICAgNzcsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDIwNCwgNzEsIDY1LCAKLSAgICA3MSwgMTI4LCA3MSwgNjUsIDcwLCAxMjgsIDcxLCA2NSwgMTk4LCA3MSwgNjUsIDY5LCA4NCwgODQsIDY1LCA0NSwgODAsIAotICAgIDczLCA3NiwgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNjgsIDc5LCA3NiwgMTI4LCA3MSwgNjUsIDY4LCAxMjgsIDcxLCA2NSwgCi0gICAgMTk2LCA3MSwgNjUsIDY2LCA2NSwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MSwgCi0gICAgNjUsIDE3OCwgNzEsIDQ4LCA1MywgNTIsIDEyOCwgNzEsIDQ4LCA1MywgNTEsIDEyOCwgNzEsIDQ4LCA1MywgNTAsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MywgNDksIDEyOCwgNzEsIDQ4LCA1MywgNDgsIDEyOCwgNzEsIDQ4LCA1MiwgNTcsIDEyOCwgNzEsIDQ4LCAKLSAgICA1MiwgNTYsIDEyOCwgNzEsIDQ4LCA1MiwgNTUsIDEyOCwgNzEsIDQ4LCA1MiwgNTQsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIAotICAgIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAxMjgsIDcxLCA0OCwgNTIsIDUyLCAxMjgsIDcxLCA0OCwgNTIsIDUxLCA2NSwgCi0gICAgMTI4LCA3MSwgNDgsIDUyLCA1MSwgMTI4LCA3MSwgNDgsIDUyLCA1MCwgMTI4LCA3MSwgNDgsIDUyLCA0OSwgMTI4LCA3MSwgCi0gICAgNDgsIDUyLCA0OCwgMTI4LCA3MSwgNDgsIDUxLCA1NywgMTI4LCA3MSwgNDgsIDUxLCA1NiwgMTI4LCA3MSwgNDgsIDUxLCAKLSAgICA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIAotICAgIDU0LCAxMjgsIDcxLCA0OCwgNTEsIDUzLCAxMjgsIDcxLCA0OCwgNTEsIDUyLCAxMjgsIDcxLCA0OCwgNTEsIDUxLCAxMjgsIAotICAgIDcxLCA0OCwgNTEsIDUwLCAxMjgsIDcxLCA0OCwgNTEsIDQ5LCAxMjgsIDcxLCA0OCwgNTEsIDQ4LCAxMjgsIDcxLCA0OCwgCi0gICAgNTAsIDU3LCAxMjgsIDcxLCA0OCwgNTAsIDU2LCAxMjgsIDcxLCA0OCwgNTAsIDU1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAKLSAgICA2NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgMTI4LCA3MSwgNDgsIDUwLCA1MywgMTI4LCA3MSwgNDgsIDUwLCA1MiwgMTI4LCAKLSAgICA3MSwgNDgsIDUwLCA1MSwgMTI4LCA3MSwgNDgsIDUwLCA1MCwgMTI4LCA3MSwgNDgsIDUwLCA0OSwgMTI4LCA3MSwgNDgsIAotICAgIDUwLCA0OCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDEyOCwgNzEsIDQ4LCA0OSwgNTcsIDEyOCwgNzEsIDQ4LCA0OSwgCi0gICAgNTYsIDEyOCwgNzEsIDQ4LCA0OSwgNTUsIDEyOCwgNzEsIDQ4LCA0OSwgNTQsIDEyOCwgNzEsIDQ4LCA0OSwgNTMsIDEyOCwgCi0gICAgNzEsIDQ4LCA0OSwgNTIsIDEyOCwgNzEsIDQ4LCA0OSwgNTEsIDEyOCwgNzEsIDQ4LCA0OSwgNTAsIDEyOCwgNzEsIDQ4LCAKLSAgICA0OSwgNDksIDY1LCAxMjgsIDcxLCA0OCwgNDksIDQ5LCAxMjgsIDcxLCA0OCwgNDksIDQ4LCAxMjgsIDcxLCA0OCwgNDgsIAotICAgIDU3LCAxMjgsIDcxLCA0OCwgNDgsIDU2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCAKLSAgICAxMjgsIDcxLCA0OCwgNDgsIDUzLCAxMjgsIDcxLCA0OCwgNDgsIDUyLCAxMjgsIDcxLCA0OCwgNDgsIDUxLCAxMjgsIDcxLCAKLSAgICA0OCwgNDgsIDUwLCAxMjgsIDcxLCA0OCwgNDgsIDQ5LCAxMjgsIDcwLCA4OSwgODgsIDEyOCwgNzAsIDg5LCA4NCwgMTI4LCAKLSAgICA3MCwgODksIDgwLCAxMjgsIDcwLCA4OSwgNjUsIDEyOCwgNzAsIDg3LCA3MywgMTI4LCA3MCwgODcsIDY5LCA2OSwgMTI4LCAKLSAgICA3MCwgODcsIDY5LCAxMjgsIDcwLCA4NywgNjUsIDY1LCAxMjgsIDcwLCA4NywgNjUsIDEyOCwgNzAsIDg2LCA4MywgNTEsIAotICAgIDEyOCwgNzAsIDg2LCA4MywgNTAsIDEyOCwgNzAsIDg2LCA4MywgNDksIDEyOCwgNzAsIDg1LCA4OCwgMTI4LCA3MCwgODUsIAotICAgIDg0LCAxMjgsIDcwLCA4NSwgODMsIDY5LCAxMjgsIDcwLCA4NSwgODMsIDE5MywgNzAsIDg1LCA4MiwgODgsIDEyOCwgNzAsIAotICAgIDg1LCA4MCwgMTI4LCA3MCwgODUsIDc4LCA2OSwgODIsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgNjUsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDcwLCA4NSwgNzYsIDc2LCA3OCwgNjksIDgzLCAKLSAgICA4MywgMTI4LCA3MCwgODUsIDc2LCAyMDQsIDcwLCA4NSwgNzQsIDczLCAxMjgsIDcwLCA4NSwgNjksIDg0LCAxMjgsIDcwLCAKLSAgICA4NSwgNjksIDIwNCwgNzAsIDg1LCA2OSwgMTI4LCA3MCwgODQsIDcyLCA3OSwgODIsIDE5MywgNzAsIDgyLCA3OSwgODcsIAotICAgIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgCi0gICAgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgNzgsIDg0LCAKLSAgICA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgNzEsIDEyOCwgNzAsIAotICAgIDgyLCA3OSwgMTk5LCA3MCwgODIsIDczLCA4NCwgODUsIDEyOCwgNzAsIDgyLCA3MywgNjksIDgzLCAxMjgsIDcwLCA4MiwgCi0gICAgNzMsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCAKLSAgICA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA2OSwgNjksIDEyOCwgNzAsIAotICAgIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCA2NSwgCi0gICAgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCAKLSAgICA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA4NCwgODksIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIAotICAgIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgCi0gICAgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODcsIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIAotICAgIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgCi0gICAgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCAKLSAgICA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIAotICAgIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAKLSAgICAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAxOTcsIDcwLCA3OSwgNzksIDg0LCA2NiwgNjUsIDc2LCA3NiwgCi0gICAgMTI4LCA3MCwgNzksIDc5LCA4NCwgMTI4LCA3MCwgNzksIDc5LCA2OCwgMTI4LCA3MCwgNzksIDc5LCAxMjgsIDcwLCA3OSwgCi0gICAgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgNzcsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCAKLSAgICA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzksIAotICAgIDc2LCA2OCwgNjksIDE5NiwgNzAsIDc5LCA3MSwgNzEsIDg5LCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgMTI4LCA3MCwgNzYsIAotICAgIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4NSwgODQsIDY5LCAKLSAgICAxMjgsIDcwLCA3NiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzAsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MCwgNzYsIAotICAgIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgCi0gICAgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjUsIDIwNCwgNzAsIDc2LCA3OSwgODAsIDgwLCAyMTcsIDcwLCAKLSAgICA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIAotICAgIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgNzAsIDc2LCA2OSwgODgsIDY5LCAxOTYsIDcwLCA3NiwgNjksIDg1LCA4MiwgCi0gICAgNDUsIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCAKLSAgICA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIAotICAgIDcwLCA3NiwgNjUsIDcxLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgCi0gICAgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCAKLSAgICA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIAotICAgIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgCi0gICAgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCAKLSAgICA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzMsIDg2LCAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIAotICAgIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCA3MywgODMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MywgCi0gICAgNzgsIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAKLSAgICAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIAotICAgIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgCi0gICAgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCAKLSAgICA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIAotICAgIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MCwgCi0gICAgNzMsIDc4LCA2NSwgNzgsIDY3LCA3MywgNjUsIDc2LCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzAsIDczLCAKLSAgICA3NiwgNzYsIDY5LCAxOTYsIDcwLCA3MywgNzYsIDc2LCAxMjgsIDcwLCA3MywgNzYsIDIwNCwgNzAsIDczLCA3NiwgMTk3LCAKLSAgICA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAotICAgIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCi0gICAgMTk3LCA3MCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIDczLCA3MCwgODQsIDg5LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKLSAgICAyMTcsIDcwLCA3MywgNzAsIDg0LCA3MiwgODMsIDEyOCwgNzAsIDczLCA3MCwgODQsIDcyLCAxMjgsIDcwLCA3MywgNzAsIAotICAgIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDczLCA2OSwgNzYsIDY4LCAKLSAgICAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzAsIDc2LCAxMjgsIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDY5LCAKLSAgICA4NSwgODgsIDEyOCwgNzAsIDY5LCA4NSwgNzAsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIAotICAgIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA3MywgMjExLCA3MCwgCi0gICAgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIAotICAgIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgNjksIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgCi0gICAgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCAKLSAgICA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIDY5LCA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIAotICAgIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgCi0gICAgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIDY5LCA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAKLSAgICAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIAotICAgIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3MCwgODUsIDIwNCwgNzAsIDY5LCA2NSwgODIsIDEyOCwgCi0gICAgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OSwgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCAKLSAgICA2NSwgMjE2LCA3MCwgNjUsIDg0LCA3MywgNzEsIDg1LCA2OSwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAotICAgIDcwLCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgCi0gICAgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCAKLSAgICA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCA4MSwgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCAKLSAgICA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIDgzLCA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIAotICAgIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgNzAsIDY1LCA3NiwgNzYsIDczLCA3OCwgMTk5LCA3MCwgNjUsIDc2LCA3NiwgCi0gICAgNjksIDIwNiwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCAKLSAgICA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgODIsIDg5LCAxMjgsIAotICAgIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgCi0gICAgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIAotICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgCi0gICAgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCAKLSAgICA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIAotICAgIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgCi0gICAgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIAotICAgIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgCi0gICAgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIAotICAgIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgCi0gICAgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAKLSAgICAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCAKLSAgICA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIAotICAgIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgCi0gICAgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgCi0gICAgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCAKLSAgICA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAKLSAgICAxMjgsIDY5LCA4OSwgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjksIDcxLCA3NiwgNjUsIDgzLCA4MywgNjksIDgzLCAxMjgsIAotICAgIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgCi0gICAgODgsIDg0LCA4MiwgNjUsIDg0LCA2OSwgODIsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA4OCwgODQsIAotICAgIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3MiwgNzMsIDcxLCAyMDAsIDY5LCA4OCwgCi0gICAgODQsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA4NCwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCAKLSAgICA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgCi0gICAgNzgsIDIxMiwgNjksIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgCi0gICAgODgsIDczLCA4MywgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCAKLSAgICA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCAyMDYsIDY5LCA4OCwgNjcsIDcyLCA2NSwgNzgsIDcxLCA2OSwgMTI4LCA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAKLSAgICAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIDg3LCA2OSwgMTI4LCA2OSwgODYsIAotICAgIDY5LCA4MiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDg1LCA4MiwgCi0gICAgNzksIDgwLCA2OSwgNjUsIDIwNiwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNDUsIDY1LCA3MCwgODIsIDczLCA2NywgNjUsIAotICAgIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgMjE3LCA2OSwgODUsIDgyLCAKLSAgICAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDc5LCAxMjgsIDY5LCAKLSAgICA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCA0NSwgNjksIDEyOCwgNjksIAotICAgIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA4OCwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIDg0LCA2NSwgMTI4LCA2OSwgCi0gICAgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgODIsIDc4LCA3MywgODQsIDg5LCAKLSAgICAxMjgsIDY5LCA4NCwgNjYsIDEyOCwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAxMjgsIDY5LCA4MywgODQsIAotICAgIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIDY5LCAxOTYsIDY5LCA4MywgCi0gICAgNzIsIDY5LCA1MSwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgNjksIDgzLCA3MiwgMTc4LCA2OSwgODMsIDcyLCAKLSAgICA0OSwgNTQsIDEyOCwgNjksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2OSwgODMsIDY3LCAxMjgsIDY5LCA4MywgNjUsIAotICAgIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIDY2LCA2NSwgODIsIDgyLCA2OSwgCi0gICAgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgODIsIDcxLCAxMjgsIDY5LCA4MiwgCi0gICAgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgNjksIDgxLCA4NSwgNzMsIDY4LCAKLSAgICAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIAotICAgIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIDY1LCA3NiwgMTI4LCA2OSwgODAsIDgzLCA3MywgCi0gICAgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIDY5LCA4MCwgNzksIDY3LCA3MiwgMTI4LCAKLSAgICA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgCi0gICAgNjUsIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCAKLSAgICA3NywgNjUsIDEyOCwgNjksIDc5LCA4NCwgMTI4LCA2OSwgNzksIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCAKLSAgICA2OSwgNzksIDc2LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIAotICAgIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgCi0gICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAKLSAgICA0NSwgNDksIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIAotICAgIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAKLSAgICAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIAotICAgIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgMTI4LCA2OSwgNzgsIDgxLCAxMjgsIDY5LCA3OCwgCi0gICAgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIAotICAgIDEyOCwgNjksIDc4LCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAKLSAgICAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNjksIDc4LCA2OCwgNjksIAotICAgIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA4MywgMTI4LCA2OSwgCi0gICAgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDczLCA3OCwgMTk5LCAKLSAgICA2OSwgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIAotICAgIDczLCA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDg0LCA3MywgMTk1LCA2OSwgCi0gICAgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCA2OCwgNjksIDgyLCA4OSwgMTI4LCAKLSAgICA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIDczLCA4MywgNzIsIDc3LCA2OSwgCi0gICAgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDc2LCA4NCwgMTI4LCAKLSAgICA2OSwgNzYsIDc2LCA3MywgODAsIDg0LCA3MywgMTk1LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA3MywgODMsIDEyOCwgNjksIAotICAgIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgCi0gICAgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDEyOCwgNjksIDc2LCAKLSAgICA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgMTI4LCA2OSwgNzYsIDY5LCA3NywgNjksIAotICAgIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgCi0gICAgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCAKLSAgICA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIAotICAgIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIAotICAgIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgCi0gICAgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCAKLSAgICA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgCi0gICAgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCAKLSAgICA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIAotICAgIDY1LCA2NSwgMTI4LCA2OSwgNjksIDcyLCAxMjgsIDY5LCA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA2OCwgNzMsIDc4LCAxMjgsIDY5LCA2OCwgNjgsIAotICAgIDEyOCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgCi0gICAgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCAKLSAgICA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIAotICAgIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgCi0gICAgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCAKLSAgICA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIAotICAgIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIAotICAgIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgCi0gICAgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCAKLSAgICA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCAKLSAgICA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIAotICAgIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgCi0gICAgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCAKLSAgICA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCAKLSAgICA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIAotICAgIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCAKLSAgICA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIAotICAgIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIDg1LCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIAotICAgIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIDcyLCA2OSwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgCi0gICAgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgNjksIDEyOCwgNjgsIDkwLCA2OSwgMTI4LCA2OCwgCi0gICAgOTAsIDY1LCA2NSwgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIAotICAgIDY4LCA4OSwgMjA3LCA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIAotICAgIDg3LCA2OSwgMTI4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgCi0gICAgODYsIDY4LCAxMjgsIDY4LCA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA4NSwgODMsIDc1LCAKLSAgICAxMjgsIDY4LCA4NSwgODMsIDcyLCA2OSwgNzgsIDc4LCA2NSwgMTI4LCA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjgsIDg1LCA4MiwgNTAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIDc4LCA2OCwgNzMsIDg1LCAyMTEsIDY4LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDY4LCA4NSwgNzksIDEyOCwgNjgsIDg1LCA3OCwgNTIsIDEyOCwgNjgsIDg1LCA3OCwgNTEsIDEyOCwgCi0gICAgNjgsIDg1LCA3OCwgMTc5LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgCi0gICAgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCA2OCwgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgCi0gICAgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODIsIDg1LCA3NywgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgCi0gICAgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCA4MCwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCAKLSAgICA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzksIDc3LCA2OSwgNjgsIDY1LCA4MiwgMjE3LCA2OCwgODIsIAotICAgIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3MywgODYsIDE5NywgNjgsIDgyLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA4MiwgCi0gICAgNzMsIDIwNCwgNjgsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCAKLSAgICA4MiwgNjUsIDc3LCAxMjgsIDY4LCA4MiwgNjUsIDIwNSwgNjgsIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIAotICAgIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCi0gICAgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIAotICAgIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgCi0gICAgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCAKLSAgICA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIAotICAgIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgCi0gICAgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCAKLSAgICA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAotICAgIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIAotICAgIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAotICAgIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAotICAgIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgCi0gICAgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCAKLSAgICA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIAotICAgIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgCi0gICAgMTI4LCA2OCwgNzksIDczLCA4NCwgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIAotICAgIDY4LCA3OSwgNjgsIDY5LCA3NSwgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgCi0gICAgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIAotICAgIDY5LCAxOTcsIDY4LCA3OSwgNjUsIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCAKLSAgICA3NiwgODUsIDEyOCwgNjgsIDc2LCA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCAKLSAgICA2OCwgNzYsIDcyLCA2NSwgMTI4LCA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCAKLSAgICA2OCwgNzUsIDY1LCA4MiwgMTI4LCA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIAotICAgIDc0LCA2OSwgODIsIDg2LCAxMjgsIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgCi0gICAgMjE3LCA2OCwgNzMsIDg2LCA3OSwgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCAKLSAgICA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIAotICAgIDY4LCAxOTcsIDY4LCA3MywgODYsIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAKLSAgICAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIAotICAgIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgCi0gICAgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCAKLSAgICA4MywgODAsIDY5LCA4MiwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIAotICAgIDc3LCA3OSwgODUsIDEyOCwgNjgsIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgCi0gICAgODUsIDc5LCA4NSwgMjExLCA2OCwgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCAKLSAgICA2OSwgMTk2LCA2OCwgNzMsIDgzLCA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDg0LCA3NiwgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgCi0gICAgNzMsIDgwLCA4NCwgNjksIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCAKLSAgICA3OCwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIAotICAgIDY2LCA2NSwgMjEyLCA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgCi0gICAgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIAotICAgIDc5LCA3OCwgNDUsIDUwLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgCi0gICAgNjgsIDczLCA3NywgNzMsIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIAotICAgIDczLCAxOTMsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgCi0gICAgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIAotICAgIDc5LCAyMTEsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgCi0gICAgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCAKLSAgICA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIAotICAgIDIxMSwgNjgsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgCi0gICAgODQsIDIxNywgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCAKLSAgICA3MCwgNjksIDgyLCA2OSwgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgCi0gICAgNjcsIDE5NywgNjgsIDczLCA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCAKLSAgICA2OSwgODMsIDczLCAyMTEsIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCAKLSAgICA3MywgNjUsIDg0LCA3OSwgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIAotICAgIDY1LCA4MywgODQsIDc5LCA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgCi0gICAgNzcsIDc5LCA3OCwgNjgsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCAKLSAgICA2OSwgMjEwLCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIAotICAgIDczLCA3NSwgMTkzLCA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgCi0gICAgNjUsIDc2LCAxMjgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCAKLSAgICA3MywgOTAsIDY5LCAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIAotICAgIDgyLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgCi0gICAgNzksIDEyOCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgCi0gICAgNjgsIDcyLCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCAKLSAgICA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIAotICAgIDgyLCA3NywgNjUsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgCi0gICAgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCAKLSAgICA2NSwgNzYsIDg1LCAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCAKLSAgICA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIAotICAgIDg4LCA3MywgNjUsIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgCi0gICAgNjksIDc4LCA4NCwgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCAKLSAgICA3MywgNzEsIDc4LCAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgCi0gICAgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCAKLSAgICA4MiwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIAotICAgIDgyLCA4NCwgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgCi0gICAgODQsIDczLCA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCAKLSAgICA3OCwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIAotICAgIDY5LCA3OCwgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgCi0gICAgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCAKLSAgICA2OCwgNjksIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIAotICAgIDgyLCAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgCi0gICAgNzcsIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCAKLSAgICA3MywgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAorICAgIDg0LCAxMjgsIDgyLCA3NiwgNzksIDEyOCwgODIsIDc2LCA3NywgMTI4LCA4MiwgNzYsIDczLCAxMjgsIDgyLCA3NiwgNjksIAorICAgIDEyOCwgODIsIDc0LCA2OSwgMjExLCA4MiwgNzQsIDY5LCAxMjgsIDgyLCA3NCwgMTk3LCA4MiwgNzMsIDg2LCA2OSwgODIsIAorICAgIDEyOCwgODIsIDczLCA4NCwgODUsIDY1LCA3NiwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgCisgICAgNzMsIDg0LCA4MywgNzMsIDEyOCwgODIsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA3MywgODMsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgODIsIDY1LCAxMjgsIDgyLCA3MywgODAsIDEyOCwgODIsIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3OCwgNzAsIAorICAgIDc5LCA4MiwgOTAsIDY1LCA3OCwgNjgsIDc5LCAxMjgsIDgyLCA3MywgMjA2LCA4MiwgNzMsIDc3LCA3MSwgNjYsIDY1LCAKKyAgICAxMjgsIDgyLCA3MywgNzUsIDgyLCA3MywgNzUsIDEyOCwgODIsIDczLCA3MSwgODYsIDY5LCA2OCwgNzMsIDE5NSwgODIsIAorICAgIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA3MiwgNjUsIDc4LCAKKyAgICAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDc2LCA2OSwgNzAsIDIxMiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCAKKyAgICA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCAKKyAgICA3OCwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgCisgICAgNzYsIDQ1LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIAorICAgIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIAorICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgCisgICAgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAKKyAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNjUsIDc4LCAKKyAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCAKKyAgICA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCAKKyAgICA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgCisgICAgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MiwgNzMsIDY5LCAKKyAgICA4NSwgMjA0LCA4MiwgNzMsIDY5LCA3NiwgMTI4LCA4MiwgNzMsIDY5LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCA2OSwgNzcsIAorICAgIDEyOCwgODIsIDczLCA2NywgNjksIDEyOCwgODIsIDczLCA2NywgMTk3LCA4MiwgNzMsIDY2LCA2NiwgNzksIDc4LCAxMjgsIAorICAgIDgyLCA3MywgNjUsIDIwNCwgODIsIDcyLCA3OSwgODQsIDczLCAxOTUsIDgyLCA3MiwgNzksIDEyOCwgODIsIDcyLCAyMDcsIAorICAgIDgyLCA3MiwgNjUsIDEyOCwgODIsIDcxLCA4OSwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODIsIDcxLCA4OSwgNjUsIDc4LCAKKyAgICAxMjgsIDgyLCA3MSwgODksIDE5MywgODIsIDY5LCA4NiwgNzksIDc2LCA4NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgODYsIAorICAgIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNjksIDg2LCA3MywgCisgICAgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAKKyAgICAxOTYsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIDEyOCwgODIsIDY5LCA4NSwgMTI4LCAKKyAgICA4MiwgNjksIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIDg0LCA4MiwgNzksIAorICAgIDcwLCA3NiwgNjksIDIxNiwgODIsIDY5LCA4NCwgODIsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4NCwgNzksIDgyLCA4NCwgCisgICAgMTI4LCA4MiwgNjksIDgzLCA4NSwgODAsIDczLCA3OCwgODUsIDgzLCAxMjgsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzksIDc5LCAKKyAgICA3NywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDY5LCAxOTYsIDgyLCA2OSwgODMsIDg0LCAxMjgsIAorICAgIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgCisgICAgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MywgNzMsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCAKKyAgICAyMDAsIDgyLCA2OSwgODIsIDY5LCA3OCwgNzEsIDcxLCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MiwgNjksIDc1LCA2NSwgNzgsIAorICAgIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIDY3LCA2OSwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCA3MiwgMTI4LCA4MiwgNjksIDgwLCA2OSwgODQsIDczLCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDY5LCAxOTYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDEyOCwgODIsIAorICAgIDY5LCA4MCwgNjksIDY1LCAyMTIsIDgyLCA2OSwgODAsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY5LCA4MCwgNjUsIDEyOCwgCisgICAgODIsIDY5LCA4MCwgMTkzLCA4MiwgNjksIDc4LCA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgMTI4LCAKKyAgICA4MiwgNjksIDIwNiwgODIsIDY5LCA3NywgODUsIDEyOCwgODIsIDY5LCA3NywgNjksIDY4LCA4OSwgMTI4LCA4MiwgNjksIAorICAgIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNzMsIDY5LCA4NiwgNjksIDE5NiwgODIsIDY5LCA3NiwgCisgICAgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCAKKyAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgCisgICAgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTIsIDEyOCwgODIsIDY5LCAKKyAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MSwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUwLCAxMjgsIAorICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDIxMSwgODIsIDY5LCA3MSwgCisgICAgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCA4MiwgNjksIDcxLCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDcxLCAKKyAgICA3MywgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCA3MywgNjUsIDEyOCwgODIsIDY5LCA3MCwgNzksIDgyLCA3NywgNjksIAorICAgIDE5NiwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDgyLCA2OSwgNjgsIDg1LCA4MCwgNzYsIDczLCA2NywgCisgICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCAKKyAgICA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNjksIDY3LCA4NCwgNzMsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MiwgNjksIAorICAgIDY3LCA4NCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAKKyAgICAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4MiwgNjksIDY3LCA4MiwgNjksIDY1LCA4NCwgNzMsIAorICAgIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDc5LCA4MiwgCisgICAgNjgsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY3LCA3OSwgODIsIDE5NiwgODIsIDY5LCA2NywgNjksIDgwLCA4NCwgNzMsIDg2LCAKKyAgICAxOTcsIDgyLCA2OSwgNjcsIDY5LCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgNDUsIAorICAgIDUwLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDcyLCA3NywgODUsIDc1LCAKKyAgICAxMjgsIDgyLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MiwgNjgsIDIwNywgODIsIDY4LCA2OSwgMjA0LCA4MiwgNjYsIDY1LCAKKyAgICA4MywgMTkzLCA4MiwgNjUsIDg5LCA4MywgMTI4LCA4MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIAorICAgIDg0LCA3MywgNzksIDEyOCwgODIsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDcyLCAxOTMsIDgyLCA2NSwgCisgICAgODQsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDEyOCwgODIsIDY1LCA4MywgODcsIDY1LCA2OCwgNzMsIDEyOCwgODIsIDY1LCAKKyAgICA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODMsIDcyLCA2NSwgMTI4LCA4MiwgNjUsIDgxLCAxMjgsIDgyLCA2NSwgODAsIAorICAgIDczLCA4MywgNzcsIDY1LCAxMjgsIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgCisgICAgNzgsIDEyOCwgODIsIDY1LCA3NywgMjExLCA4MiwgNjUsIDc3LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgNzUsIDcyLCAKKyAgICA2NSwgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNzUsIDY1LCA2NSwgODIsIDY1LCA2NSwgNzgsIDgzLCA2NSwgODksIDY1LCAxMjgsIAorICAgIDgyLCA2NSwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDY1LCA3MywgODMsIDY5LCAxOTYsIDgyLCA2NSwgNzMsIDc4LCA2NiwgCisgICAgNzksIDg3LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIDg5LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIAorICAgIDIxNywgODIsIDY1LCA3MywgNzYsIDEyOCwgODIsIDY1LCA3MywgNjgsIDIwNywgODIsIDY1LCA3MywgNjgsIDY1LCAxMjgsIAorICAgIDgyLCA2NSwgNzIsIDc3LCA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAyMDAsIDgyLCA2NSwgNzIsIDEyOCwgODIsIDY1LCA3MCwgCisgICAgNjksIDEyOCwgODIsIDY1LCA2OSwgNzcsIDEyOCwgODIsIDY1LCA2OCwgNzMsIDc5LCA2NSwgNjcsIDg0LCA3MywgODYsIAorICAgIDE5NywgODIsIDY1LCA2OCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgNjgsIDczLCAyMDcsIDgyLCA2NSwgNjgsIDIwMSwgODIsIAorICAgIDY1LCA2OCwgMTI4LCA4MiwgNjUsIDE5NiwgODIsIDY1LCA2NywgODEsIDg1LCA2OSwgMjEyLCA4MiwgNjUsIDY3LCA3MywgCisgICAgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgODQsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCAyMTIsIDgyLCAKKyAgICA2NSwgNjYsIDEyOCwgODIsIDY1LCA2NSwgNzMsIDEyOCwgODIsIDY1LCA1MSwgMTI4LCA4MiwgNjUsIDUwLCAxMjgsIDgyLCAKKyAgICA2NSwgNDUsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAxMjgsIDgyLCA0OCwgNTAsIDU2LCAxMjgsIDgyLCA0OCwgNTAsIAorICAgIDU1LCAxMjgsIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCA0OCwgNTAsIDUzLCAxMjgsIDgyLCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDgyLCA0OCwgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIDgyLCA0OCwgNDksIDU2LCAxMjgsIDgyLCA0OCwgNDksIDU1LCAKKyAgICAxMjgsIDgyLCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgMTI4LCA4MiwgNDgsIDQ5LCA1MywgMTI4LCAKKyAgICA4MiwgNDgsIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCA1MSwgMTI4LCA4MiwgNDgsIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDEyOCwgODIsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIDQ4LCA0OCwgNTUsIDEyOCwgODIsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgODIsIDQ4LCA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgNTIsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDgyLCAKKyAgICA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODIsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIDEyOCwgODIsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgxLCA4OSwgCisgICAgODgsIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg0LCAxMjgsIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgxLCA4OSwgCisgICAgODIsIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDc5LCAxMjgsIDgxLCA4OSwgNzMsIDEyOCwgODEsIDg5LCA2OSwgCisgICAgNjksIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgCisgICAgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIDgxLCA4NywgNjksIDEyOCwgODEsIDg3LCA2NSwgCisgICAgNjUsIDEyOCwgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgCisgICAgODYsIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIDg0LCAxMjgsIDgxLCA4NSwgODMsIDcyLCA4MywgNzIsIDY1LCAKKyAgICA4OSwgNjUsIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgODEsIDg1LCA4MiwgMTI4LCA4MSwgODUsIDgwLCAxMjgsIDgxLCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgxLCA4NSwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgCisgICAgMjA2LCA4MSwgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgCisgICAgNzUsIDEyOCwgODEsIDg1LCA3MywgNzgsIDg0LCA2OSwgODMsIDgzLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MSwgODUsIDczLCAKKyAgICA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODEsIDg1LCA3MywgNzgsIDY3LCA4NSwgNzgsIDg4LCAxMjgsIAorICAgIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCA3NiwgNzYsIDEyOCwgODEsIDg1LCA3MywgCisgICAgNjcsIDIwMywgODEsIDg1LCA3MywgMTI4LCA4MSwgODUsIDcwLCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAKKyAgICA3OCwgNjksIDE5NiwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDgxLCA4NSwgNjksIDY5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA2OSwgMjA2LCA4MSwgODUsIDY5LCAxMjgsIAorICAgIDgxLCA4NSwgNjYsIDg1LCA4NCwgODMsIDEyOCwgODEsIDg1LCA2NSwgODQsIDY5LCA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgCisgICAgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgODMsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDIxMSwgODEsIDg1LCAKKyAgICA2NSwgODIsIDg0LCA2OSwgODIsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgMjEwLCA4MSwgODUsIDY1LCA3OCwgODQsIAorICAgIDczLCA4NCwgMjE3LCA4MSwgODUsIDY1LCA2OCwgODIsIDg1LCA4MCwgNzYsIDE5NywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgCisgICAgNzgsIDg0LCAxMjgsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCAyMTIsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgxLCAKKyAgICA4NSwgNjUsIDE5NiwgODEsIDg1LCA2NSwgMTI4LCA4MSwgODUsIDEyOCwgODEsIDIwOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgCisgICAgNzksIDg0LCAxMjgsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDgxLCA3OSwgODAsIDY1LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgCisgICAgODEsIDc5LCA3OSwgMTI4LCA4MSwgNzksIDIwNywgODEsIDc5LCA3MCwgMTI4LCA4MSwgNzksIDE5OCwgODEsIDc5LCA2NSwgCisgICAgMTI4LCA4MSwgNzksIDEyOCwgODEsIDc4LCAxMjgsIDgxLCA3MywgODgsIDEyOCwgODEsIDczLCA4NCwgODMsIDY1LCAxMjgsIAorICAgIDgxLCA3MywgODQsIDEyOCwgODEsIDczLCA4MCwgMTI4LCA4MSwgNzMsIDczLCAxMjgsIDgxLCA3MywgNjksIDg4LCAxMjgsIAorICAgIDgxLCA3MywgNjksIDg0LCAxMjgsIDgxLCA3MywgNjksIDgwLCAxMjgsIDgxLCA3MywgNjksIDEyOCwgODEsIDczLCAxMjgsIAorICAgIDgxLCA3MiwgODcsIDczLCAxMjgsIDgxLCA3MiwgODcsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCA4MSwgCisgICAgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDcyLCA4NywgNjUsIDEyOCwgODEsIDcyLCA4NSwgMTI4LCA4MSwgNzIsIDc5LCAKKyAgICAxMjgsIDgxLCA3MiwgNzMsIDEyOCwgODEsIDcyLCA2OSwgNjksIDEyOCwgODEsIDcyLCA2OSwgMTI4LCA4MSwgNzIsIDY1LCAKKyAgICA2NSwgMTI4LCA4MSwgNzIsIDY1LCAxMjgsIDgxLCA3MSwgNjUsIDEyOCwgODEsIDY5LCA4NCwgNjUsIDc4LCA2NSwgMTI4LCAKKyAgICA4MSwgNjksIDY5LCAxMjgsIDgxLCA2OSwgMTI4LCA4MSwgNjUsIDg1LCAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCAKKyAgICA4MSwgNjUsIDgyLCA3OCwgNjksIDIxNywgODEsIDY1LCA4MiwgMTI4LCA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIAorICAgIDcyLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgCisgICAgNzYsIDE5MywgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCAKKyAgICA3MCwgMTI4LCA4MSwgNjUsIDE5OCwgODEsIDY1LCA2OCwgNzcsIDY1LCAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCAKKyAgICA2NSwgNjUsIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY1LCA3MCwgMTI4LCA4MSwgNDgsIDQ4LCA1NSwgMTI4LCA4MSwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA4MSwgNDgsIDQ4LCA1MywgMTI4LCA4MSwgNDgsIDQ4LCA1MiwgMTI4LCA4MSwgNDgsIDQ4LCA1MSwgCisgICAgMTI4LCA4MSwgNDgsIDQ4LCA1MCwgMTI4LCA4MSwgNDgsIDQ4LCA0OSwgMTI4LCA4MCwgOTAsIDEyOCwgODAsIDg5LCA4OCwgCisgICAgMTI4LCA4MCwgODksIDg0LCAxMjgsIDgwLCA4OSwgODIsIDg4LCAxMjgsIDgwLCA4OSwgODIsIDEyOCwgODAsIDg5LCA4MCwgCisgICAgMTI4LCA4MCwgODksIDEyOCwgODAsIDg3LCA3OSwgODksIDEyOCwgODAsIDg3LCA3OSwgNzksIDEyOCwgODAsIDg3LCA3OSwgCisgICAgMTI4LCA4MCwgODcsIDIwNywgODAsIDg3LCA3MywgNzMsIDEyOCwgODAsIDg3LCA3MywgMTI4LCA4MCwgODcsIDY5LCA2OSwgCisgICAgMTI4LCA4MCwgODcsIDY5LCAxMjgsIDgwLCA4NywgNjUsIDY1LCAxMjgsIDgwLCA4NywgMTI4LCA4MCwgODYsIDEyOCwgODAsIAorICAgIDg1LCA4OCwgMTI4LCA4MCwgODUsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDg1LCAxMjgsIDgwLCA4NSwgODQsIDgyLCA2OSwgCisgICAgNzAsIDY1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDIxMiwgODAsIDg1LCAKKyAgICA4MywgNzIsIDgwLCA3MywgNzgsIDEyOCwgODAsIDg1LCA4MywgNzIsIDgwLCA3MywgNzUsIDY1LCAxMjgsIDgwLCA4NSwgODMsIAorICAgIDcyLCA3MywgNzgsIDE5OSwgODAsIDg1LCA4MiwgODgsIDEyOCwgODAsIDg1LCA4MiwgODMsIDY5LCAxMjgsIDgwLCA4NSwgCisgICAgODIsIDgwLCA3NiwgMTk3LCA4MCwgODUsIDgyLCA3OCwgNjUsIDc3LCA2NSwgMTI4LCA4MCwgODUsIDgyLCA3MywgODQsIDg5LCAKKyAgICAxMjgsIDgwLCA4NSwgODIsIDczLCA3MCwgODksIDEyOCwgODAsIDg1LCA4MiwgMTI4LCA4MCwgODUsIDgxLCAxMjgsIDgwLCAKKyAgICA4NSwgODAsIDEyOCwgODAsIDg1LCA3OSwgODgsIDEyOCwgODAsIDg1LCA3OSwgODAsIDEyOCwgODAsIDg1LCA3OSwgMTI4LCAKKyAgICA4MCwgODUsIDc4LCA3MSwgNjUsIDY1LCA3NywgMTI4LCA4MCwgODUsIDc4LCA3MSwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIAorICAgIDg1LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgCisgICAgODAsIDg1LCA3NywgODAsIDEyOCwgODAsIDg1LCA3NywgMTI4LCA4MCwgODUsIDY5LCAxMjgsIDgwLCA4NSwgNjYsIDc2LCAKKyAgICA3MywgMTk1LCA4MCwgODUsIDY1LCA4MSwgMTI4LCA4MCwgODUsIDY1LCA2OSwgMTI4LCA4MCwgODUsIDUwLCAxMjgsIDgwLCAKKyAgICA4NSwgNDksIDEyOCwgODAsIDg1LCAxMjgsIDgwLCA4NCwgNzIsIDY1LCA3MiwgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCAKKyAgICA4MywgNzMsIDc2LCAyMDEsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgCisgICAgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIAorICAgIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCA3MywgCisgICAgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIAorICAgIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgCisgICAgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgNzksIDg0LCA2OSwgNjcsIDg0LCA2OSwgMTk2LCA4MCwgODIsIDc5LCAKKyAgICA4MywgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgCisgICAgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCAKKyAgICA4MiwgNzksIDgwLCA2OSwgODIsIDg0LCAyMTcsIDgwLCA4MiwgNzksIDgwLCA2OSwgNzYsIDc2LCA2OSwgMjEwLCA4MCwgODIsIAorICAgIDc5LCA3OSwgNzAsIDEyOCwgODAsIDgyLCA3OSwgNzYsIDc5LCA3OCwgNzEsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDc2LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDE5NywgODAsIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDgyLCAKKyAgICA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2OSwgODMsIDgzLCAxMjgsIAorICAgIDgwLCA4MiwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgwLCA4MiwgCisgICAgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgODYsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgMTk3LCA4MCwgODIsIDczLCA4NiwgNjUsIDY3LCAyMTcsIAorICAgIDgwLCA4MiwgNzMsIDgzLCA3MiwgODQsIDcyLCA2NSwgNzcsIDY1LCA4NCwgODIsIDE5MywgODAsIDgyLCA3MywgNzgsIDg0LCAKKyAgICA4MywgMTI4LCA4MCwgODIsIDczLCA3OCwgODQsIDEyOCwgODAsIDgyLCA3MywgNzgsIDIxMiwgODAsIDgyLCA3MywgNzgsIAorICAgIDY3LCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc3LCA2OSwgMTI4LCA4MCwgODIsIDczLCA3NywgMTk3LCA4MCwgCisgICAgODIsIDY5LCA4NiwgNzMsIDc5LCA4NSwgMjExLCA4MCwgODIsIDY5LCA4MywgNjksIDg0LCAxMjgsIDgwLCA4MiwgNjksIDgzLCAKKyAgICA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgCisgICAgNzksIDIwNiwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgNjgsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODAsIDgyLCAKKyAgICA2OSwgNzgsIDc1LCA3MiwgNjUsIDEyOCwgODAsIDgyLCA2OSwgNzAsIDY1LCA2NywgMTk3LCA4MCwgODIsIDY5LCA2NywgNzMsIAorICAgIDgwLCA3MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA4MiwgCisgICAgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMjExLCA4MCwgODIsIDY5LCAKKyAgICA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIAorICAgIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgCisgICAgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDg5LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCAKKyAgICA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIDc4LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIAorICAgIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgCisgICAgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDEyOCwgODAsIDgwLCA4NiwgCisgICAgMTI4LCA4MCwgODAsIDc3LCAxMjgsIDgwLCA4MCwgNjUsIDEyOCwgODAsIDc5LCA4OSwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIAorICAgIDgwLCA3OSwgODcsIDY5LCA4MiwgMjExLCA4MCwgNzksIDg3LCA2OSwgODIsIDEyOCwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgCisgICAgNjksIDE5NiwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDg1LCAKKyAgICA3NiwgODQsIDgyLCAyMTcsIDgwLCA3OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzksIDg0LCA2NSwgODQsIDc5LCAxMjgsIAorICAgIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIDE5NywgODAsIDc5LCAyMTIsIDgwLCA3OSwgODMsIDg0LCA4MCwgNzksIDgzLCA3MywgCisgICAgODQsIDczLCA3OSwgMjA2LCA4MCwgNzksIDgzLCA4NCwgNjYsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDgzLCA4NCwgNjUsIAorICAgIDIwNCwgODAsIDc5LCA4MywgODQsIDEyOCwgODAsIDc5LCA4MywgMjEyLCA4MCwgNzksIDgzLCA4MywgNjksIDgzLCA4MywgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgODIsIDgyLCAKKyAgICA2OSwgNjcsIDg0LCA4NSwgMjExLCA4MCwgNzksIDgwLCA4MCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODAsIDEyOCwgODAsIAorICAgIDc5LCAyMDgsIDgwLCA3OSwgNzksIDY4LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3OSwgMTI4LCA4MCwgNzksIDc4LCA2OCwgCisgICAgNzksIDEyOCwgODAsIDc5LCAyMDYsIDgwLCA3OSwgNzcsIDc3LCA2OSwgNjksIDEyOCwgODAsIDc5LCA3NywgNzcsIDY5LCAKKyAgICAxOTcsIDgwLCA3OSwgNzYsIDczLCA4MywgNzIsIDEyOCwgODAsIDc5LCA3NiwgNzMsIDY3LCAxOTcsIDgwLCA3OSwgNzYsIAorICAgIDIwMSwgODAsIDc5LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3NiwgMTk3LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgCisgICAgNjksIDEyOCwgODAsIDc5LCA3NSwgNzksIDc0LCA3MywgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDIxMSwgODAsIDc5LCAKKyAgICA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIAorICAgIDY5LCAxOTYsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgCisgICAgODIsIDIxNywgODAsIDc5LCA2OSwgODQsIDczLCAxOTUsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCAKKyAgICA3OSwgNjUsIDEyOCwgODAsIDc5LCAxMjgsIDgwLCAyMDcsIDgwLCA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCAKKyAgICA4MCwgNzYsIDg1LCA4NCwgNzksIDEyOCwgODAsIDc2LCA4NSwgODMsIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzYsIAorICAgIDg1LCA4MywgMTI4LCA4MCwgNzYsIDg1LCA4MiwgNjUsIDc2LCAxMjgsIDgwLCA3NiwgODUsIDc3LCA2OSwgMTk2LCA4MCwgCisgICAgNzYsIDg1LCA3NywgMTI4LCA4MCwgNzYsIDg1LCA3NSwgMTI4LCA4MCwgNzYsIDg1LCA3MSwgMTI4LCA4MCwgNzYsIDg1LCAKKyAgICAxMjgsIDgwLCA3NiwgNzksIDg3LCAxMjgsIDgwLCA3NiwgNzksIDgwLCA3MiwgODUsIDEyOCwgODAsIDc2LCA2OSwgODQsIAorICAgIDcyLCA4MiwgNzksIDc4LCAxMjgsIDgwLCA3NiwgNjgsIDEyOCwgODAsIDc2LCA2NSwgODksIDczLCA3OCwgMTk5LCA4MCwgCisgICAgNzYsIDY1LCA4MywgODQsIDczLCA2NywgODMsIDEyOCwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDgwLCA3NiwgNjUsIDc4LCAKKyAgICAxOTcsIDgwLCA3NiwgNjUsIDc4LCA2NywgMjAzLCA4MCwgNzYsIDY1LCA3NSwgMTI4LCA4MCwgNzYsIDY1LCA3MSwgNzMsIAorICAgIDc5LCAyMTEsIDgwLCA3NiwgNjUsIDY3LCA2OSwgNzIsIDc5LCA3NiwgNjgsIDY5LCAyMTAsIDgwLCA3NiwgNjUsIDY3LCAKKyAgICAxOTcsIDgwLCA3NiwgNjUsIDEyOCwgODAsIDczLCA5MCwgOTAsIDczLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzMsIAorICAgIDkwLCA5MCwgNjUsIDEyOCwgODAsIDczLCA4OCwgMTI4LCA4MCwgNzMsIDg3LCA4MiwgMTI4LCA4MCwgNzMsIDg0LCA2NywgCisgICAgNzIsIDcwLCA3OSwgODIsIDc1LCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgMjAzLCA4MCwgNzMsIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgODMsIDg0LCA3OSwgNzYsIDEyOCwgODAsIDczLCA4MywgNjksIDc2LCA2OSwgNzIsIDEyOCwgODAsIAorICAgIDczLCA4MywgNjcsIDY5LCA4MywgMTI4LCA4MCwgNzMsIDgyLCA3MywgNzEsIDEyOCwgODAsIDczLCA4MiwgNzMsIDE5OSwgCisgICAgODAsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgODAsIDczLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNzMsIDgwLCAKKyAgICA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgODAsIDczLCA4MCwgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIAorICAgIDgwLCA3MywgODAsIDEyOCwgODAsIDczLCA3OCwgODcsIDcyLCA2OSwgNjksIDIwNCwgODAsIDczLCA3OCwgNjksIDY1LCA4MCwgCisgICAgODAsIDc2LCA2OSwgMTI4LCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MywgNzgsIDY1LCA4MiwgNjYsIDc5LCA4MiwgNjUsIDgzLCAKKyAgICAxMjgsIDgwLCA3MywgNzYsIDc2LCAxMjgsIDgwLCA3MywgNzYsIDE5NywgODAsIDczLCA3NiwgNjcsIDgyLCA3OSwgMjE1LCAKKyAgICA4MCwgNzMsIDc1LCA4NSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNzUsIDc5LCAxMjgsIDgwLCA3MywgNzEsIDEyOCwgODAsIAorICAgIDczLCAxOTksIDgwLCA3MywgNjksIDg4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgCisgICAgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCisgICAgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIAorICAgIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzcsIDczLCA2OSwgODUsIAorICAgIDc3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgwLCA3MywgCisgICAgNjksIDg1LCA4MCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgMjA4LCA4MCwgNzMsIDY5LCA4NCwgMTI4LCA4MCwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODQsIDEyOCwgODAsIDczLCA2OSwgNjksIDgxLCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDY3LCA2OSwgMTI4LCA4MCwgNzMsIDY5LCAxMjgsIDgwLCA3MywgNjcsIDc1LCA2OSwgODQsIDEyOCwgODAsIAorICAgIDczLCA2NywgNzUsIDEyOCwgODAsIDczLCA2NSwgODMsIDg1LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgCisgICAgNzcsIDE5MywgODAsIDczLCA2NSwgNzgsIDc5LCAxMjgsIDgwLCAyMDEsIDgwLCA3MiwgODcsIDY1LCAxMjgsIDgwLCA3MiwgCisgICAgODUsIDg0LCA3MiwgNjUsIDc5LCAxMjgsIDgwLCA3MiwgODUsIDIxMCwgODAsIDcyLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCAKKyAgICA3MiwgODIsIDY1LCA4MywgNjksIDEyOCwgODAsIDcyLCA3OSwgNzgsIDY5LCA4MywgMTI4LCA4MCwgNzIsIDc5LCA2OSwgNzgsIAorICAgIDczLCA2NywgNzMsIDY1LCAyMDYsIDgwLCA3MiwgNzksIDY1LCAxMjgsIDgwLCA3MiwgNzksIDEyOCwgODAsIDcyLCAyMDcsIAorICAgIDgwLCA3MiwgNzgsIDY1LCA2OSwgMjAzLCA4MCwgNzIsIDczLCA3OCwgODQsIDcyLCA4NSwgMTI4LCA4MCwgNzIsIDczLCA3NiwgCisgICAgNzksIDgzLCA3OSwgODAsIDcyLCA2OSwgODIsIDIxMSwgODAsIDcyLCA3MywgNzYsIDczLCA4MCwgODAsIDczLCA3OCwgMTk3LCAKKyAgICA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MiwgCisgICAgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgMjAwLCA4MCwgNzIsIDczLCAxMjgsIDgwLCA3MiwgMjAxLCAKKyAgICA4MCwgNzIsIDY5LCA2OSwgMTI4LCA4MCwgNzIsIDY5LCAxMjgsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5OCwgODAsIAorICAgIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk0LCA4MCwgNzIsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgCisgICAgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCA3MiwgNjUsIDc3LCAxMjgsIDgwLCA3MiwgNjUsIDczLCAKKyAgICA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIDgwLCAxOTMsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIAorICAgIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIAorICAgIDEyOCwgODAsIDY5LCA4NSwgODgsIDEyOCwgODAsIDY5LCA4NSwgODQsIDY1LCA2OSwgMTI4LCA4MCwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCAKKyAgICA2OSwgODQsIDY1LCA4MywgODQsIDczLCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIAorICAgIDY1LCA3NiwgNzYsIDY5LCAxOTYsIDgwLCA2OSwgODMsIDc5LCAxMjgsIDgwLCA2OSwgODMsIDIwNywgODAsIDY5LCA4MywgCisgICAgNzIsIDUwLCAxMjgsIDgwLCA2OSwgODMsIDY5LCA4NCwgMTkzLCA4MCwgNjksIDIxMSwgODAsIDY5LCA4MiwgODQsIDcyLCAKKyAgICAyMDcsIDgwLCA2OSwgODIsIDgzLCA4MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIAorICAgIDc4LCA2NSwgMjA0LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgMjA2LCA4MCwgCisgICAgNjksIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA2OSwgODYsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDgwLCAKKyAgICA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDgyLCAxMjgsIDgwLCA2OSwgODIsIDgwLCA2OSwgCisgICAgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODAsIDY5LCA4MiwgNzcsIDczLCA4NCwgODQsIDY5LCAxOTYsIDgwLCAKKyAgICA2OSwgODIsIDc3LCA2NSwgNzgsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgCisgICAgNzMsIDEyOCwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDIwMSwgODAsIDY5LCA4MiwgNzAsIDc5LCAKKyAgICA4MiwgNzcsIDczLCA3OCwgMTk5LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgODAsIDY5LCA4MiwgNzAsIAorICAgIDY5LCA2NywgODQsIDY1LCAxMjgsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDgwLCA2OSwgODIsIDY3LCA4NSwgCisgICAgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDY3LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MCwgNjksIDg0LCAKKyAgICAxMjgsIDgwLCA2OSwgODAsIDY5LCAyMTIsIDgwLCA2OSwgNzksIDgyLCA4NCwgMjAwLCA4MCwgNjksIDc5LCA4MCwgNzYsIAorICAgIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgODMsIDY5LCA3NywgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgODMsIDg1LCAKKyAgICAxMjgsIDgwLCA2OSwgNzgsIDgzLCA3MywgODYsIDE5NywgODAsIDY5LCA3OCwgNzgsIDIxNywgODAsIDY5LCA3OCwgNzMsIAorICAgIDcyLCA3MywgMTI4LCA4MCwgNjksIDc4LCA3MSwgODUsIDczLCA3OCwgMTI4LCA4MCwgNjksIDc4LCA3MSwgNzUsIDY1LCA3NiwgCisgICAgMTI4LCA4MCwgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgNjcsIDczLCAKKyAgICA3NiwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIAorICAgIDIwNiwgODAsIDY5LCA3MywgODQsIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgCisgICAgMjAwLCA4MCwgNjksIDcyLCAxMjgsIDgwLCA2OSwgMjAwLCA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIDY5LCA2OSwgCisgICAgODMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MCwgMTI4LCA4MCwgNjksIDY5LCA3NywgMTI4LCA4MCwgNjksIDY5LCAKKyAgICAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDc4LCA4MywgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIAorICAgIDg0LCA4MiwgNzMsIDY1LCA3OCwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA2OCwgCisgICAgNjksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDY5LCA2OCwgNjUsIDIwNCwgODAsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgwLCAKKyAgICA2OSwgNjUsIDY3LCA2OSwgMTI4LCA4MCwgNjksIDY1LCA2NywgMTk3LCA4MCwgNjgsIDczLCAxMjgsIDgwLCA2OCwgNzAsIAorICAgIDEyOCwgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgNjUsIDkwLCA2OSwgODIsIDEyOCwgODAsIDY1LCA4OSwgNjksIAorICAgIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODAsIDY1LCA4OSwgMTI4LCA4MCwgCisgICAgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA2NSwgMjE1LCA4MCwgNjUsIDg2LCA3MywgODksIDY1LCAKKyAgICA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NSwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA4MCwgNjUsIAorICAgIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDg0LCAyMDAsIDgwLCA2NSwgODQsIDY1LCA3NSwgCisgICAgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDgzLCA4NSwgODEsIDEyOCwgCisgICAgODAsIDY1LCA4MywgODMsIDgwLCA3OSwgODIsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIAorICAgIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCAKKyAgICA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgCisgICAgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgODMsIDY5LCAKKyAgICA4MSwgMTI4LCA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIDgyLCA4NSwgNzcsIDEyOCwgODAsIAorICAgIDY1LCA4MiwgODQsIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgNzMsIDIwOCwgODAsIDY1LCA4MiwgCisgICAgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgwLCA2NSwgODIsIAorICAgIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgODAsIDY1LCA4MiwgMjEyLCA4MCwgCisgICAgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCA4NCwgNzMsIDcxLCA3NywgNjksIAorICAgIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgCisgICAgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDIxMSwgODAsIDY1LCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDc5LCA3MSwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDczLCAxMjgsIDgwLCA2NSwgODIsIAorICAgIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCAKKyAgICAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4MCwgNjUsIDgyLCA2NSwgCisgICAgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAKKyAgICA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIDY1LCA4MCwgMTI4LCA4MCwgNjUsIAorICAgIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA3MywgCisgICAgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc4LCAKKyAgICA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4NCwgNzMsIAorICAgIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDY1LCA3OCwgCisgICAgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODIsIAorICAgIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc5LCA3NiwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgCisgICAgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCA4OSwgNjUsIDgyLCAxMjgsIDgwLCAKKyAgICA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIAorICAgIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgCisgICAgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCA4MCwgNjUsIDc4LCA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCAKKyAgICA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIDc1LCA2NSwgNzIsIDEyOCwgODAsIAorICAgIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgNzcsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgCisgICAgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA3NywgNzMsIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCAKKyAgICA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgNzgsIDY5LCA3OCwgNzEsIDEyOCwgODAsIAorICAgIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgMTI4LCA4MCwgNjUsIDc2LCA4NSwgCisgICAgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCAyMDUsIDgwLCAKKyAgICA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODMsIDEyOCwgODAsIDY1LCA3NiwgNjksIAorICAgIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgMTk5LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgCisgICAgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDc1LCA4MCwgNjUsIDIwMywgODAsIDY1LCA3MywgCisgICAgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIDEyOCwgODAsIDY1LCAKKyAgICA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzMsIDEyOCwgODAsIDY1LCA3MiwgNzYsIDY1LCA4NiwgMjAxLCA4MCwgNjUsIAorICAgIDcyLCAxMjgsIDgwLCA2NSwgNzEsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDcxLCAxOTcsIDgwLCA2NSwgNjgsIDc3LCAxOTMsIAorICAgIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgNjUsIDY4LCAxMjgsIDgwLCA2NSwgCisgICAgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAxMjgsIDgwLCA2NSwgNjUsIDg0LCAKKyAgICA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIDY1LCA2NSwgODIsIDY1LCA2OSwgCisgICAgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgNjUsIDY1LCA0NSwgODAsIDczLCAKKyAgICA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCA0OCwgNDksIDQ5LCAxMjgsIDgwLCAKKyAgICA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIDU2LCAxMjgsIDgwLCA0OCwgNDgsIAorICAgIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIDgwLCA0OCwgNDgsIDUyLCAxMjgsIAorICAgIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgCisgICAgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAKKyAgICAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIDEyOCwgNzksIDg4LCA3MywgMTkzLCAKKyAgICA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIAorICAgIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCAKKyAgICA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIAorICAgIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIAorICAgIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAKKyAgICAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIAorICAgIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIAorICAgIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAKKyAgICAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA3OSwgODIsIAorICAgIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIDE5NywgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgCisgICAgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAyMTIsIDc5LCA4MiwgNzUsIDcyLCA3OSwgMjA2LCAKKyAgICA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCAxMjgsIDc5LCA4MiwgNjksIAorICAgIDQ1LCA1MCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNjgsIDY5LCAyMTAsIDc5LCA4MiwgCisgICAgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDc5LCA4MCwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA3OSwgODAsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDc4LCAKKyAgICAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA3MiwgNzMsIDg1LCA2NywgNzIsIDg1LCA4MywgCisgICAgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIAorICAgIDIxMCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzMsIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA3MywgNzgsIDE5OSwgCisgICAgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIAorICAgIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgCisgICAgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDc5LCA5MCwgNjksIAorICAgIDEyOCwgNzksIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDc5LCA4NSwgMTI4LCA3OSwgNzksIDc3LCA4NSwgCisgICAgMTI4LCA3OSwgNzksIDY5LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDc4LCAKKyAgICA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCA4MiwgMTI4LCAKKyAgICA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIDc5LCA3OCwgNjksIAorICAgIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDc5LCA3OCwgCisgICAgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCAKKyAgICAyMDYsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDIwNiwgNzksIAorICAgIDc3LCA2OSwgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCA3OSwgNzgsIDEyOCwgCisgICAgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIDY4LCAxMjgsIDc5LCAKKyAgICA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIDc5LCA3NCwgNzMsIAorICAgIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgNzksIDcyLCA3NywgCisgICAgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCA3NSwgMTI4LCA3OSwgCisgICAgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgODIsIAorICAgIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgNzksIDcwLCA3MCwgCisgICAgMTI4LCA3OSwgNjksIDg5LCAxMjgsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCA2OSwgNzgsIDEyOCwgNzksIDY4LCAxOTYsIAorICAgIDc5LCA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAxMjgsIDc5LCA2NywgCisgICAgODQsIDY5LCAyMTIsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDc5LCA2NywgNjcsIDc2LCAKKyAgICA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIDY2LCA2OSwgNzYsIDg1LCAKKyAgICA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgMTI4LCA3OSwgNjUsIDg5LCAxMjgsIDc5LCAKKyAgICA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgMTkzLCA3OSwgNDgsIAorICAgIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgNTIsIDU2LCAxMjgsIDc5LCA0OCwgNTIsIDU1LCAKKyAgICAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAxMjgsIDc5LCA0OCwgNTIsIDUyLCAxMjgsIDc5LCAKKyAgICA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCA0OCwgNTIsIDQ5LCAxMjgsIDc5LCA0OCwgNTIsIAorICAgIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIDU2LCAxMjgsIDc5LCA0OCwgNTEsIDU1LCAxMjgsIAorICAgIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjcsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY2LCAKKyAgICAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgMTI4LCA3OSwgNDgsIDUxLCA1MywgMTI4LCAKKyAgICA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDEyOCwgNzksIAorICAgIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIDQ4LCA1MSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1NywgMTI4LCA3OSwgNDgsIDUwLCAKKyAgICA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCA1NCwgMTI4LCA3OSwgNDgsIDUwLCA1MywgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIDc5LCA0OCwgNTAsIDQ5LCAxMjgsIDc5LCA0OCwgCisgICAgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCA0OSwgNTUsIDEyOCwgNzksIDQ4LCA0OSwgNTQsIAorICAgIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIDEyOCwgNzksIDQ4LCA0OSwgNTEsIDEyOCwgNzksIAorICAgIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY3LCAxMjgsIDc5LCA0OCwgCisgICAgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCA0OCwgNTUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIAorICAgIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA0OCwgCisgICAgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCAxMjgsIDc5LCA0OCwgNDgsIAorICAgIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIDUwLCAxMjgsIDc5LCA0OCwgNDgsIDQ5LCA2NSwgCisgICAgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIDc5LCA0NSwgNzMsIDEyOCwgCisgICAgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgMTI4LCA3OCwgOTAsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCA4OSwgODAsIDEyOCwgNzgsIDkwLCA4OSwgMTI4LCAKKyAgICA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDEyOCwgNzgsIAorICAgIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA5MCwgCisgICAgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIDc5LCA4OCwgMTI4LCA3OCwgCisgICAgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgMTI4LCA3OCwgOTAsIDczLCAKKyAgICA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIAorICAgIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIAorICAgIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIDkwLCA2NSwgODQsIDEyOCwgNzgsIDkwLCA2NSwgCisgICAgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIDE5MywgNzgsIDg5LCA4NywgCisgICAgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgODUsIDEyOCwgNzgsIDg5LCA4NSwgODQsIDEyOCwgCisgICAgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4MCwgMTI4LCAKKyAgICA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAxMjgsIDc4LCA4OSwgNzksIAorICAgIDg4LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgNzksIDc5LCAxMjgsIAorICAgIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIDEyOCwgNzgsIDg5LCA3MywgCisgICAgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIDczLCAyMTEsIDc4LCA4OSwgCisgICAgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgNzksIDEyOCwgNzgsIDg5LCAKKyAgICA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgODksIAorICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCA3OCwgODksIDIwMSwgNzgsIAorICAgIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCA3OCwgODksIDY5LCA3MiwgCisgICAgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIDEyOCwgNzgsIDg5LCAxOTYsIAorICAgIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIDczLCAxMjgsIDc4LCA4OSwgCisgICAgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgNjUsIDY1LCAxMjgsIDc4LCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgNzgsIDg3LCA3MywgMTI4LCAKKyAgICA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgNzgsIDg3LCAxMjgsIDc4LCAKKyAgICA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDg1LCAKKyAgICA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgNzgsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4NSwgNzksIAorICAgIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCA4NSwgNzgsIDg1LCAyMTgsIAorICAgIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIDg1LCA3OCwgNjUsIDg2LCA3MywgCisgICAgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgODIsIDIwNywgNzgsIDg1LCA3NywgCisgICAgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCAKKyAgICA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIAorICAgIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIAorICAgIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgCisgICAgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDksIDE3NywgNzgsIDg1LCA0OCwgNTAsIDUwLCAKKyAgICA2NSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAorICAgIDUwLCA0OCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgCisgICAgODUsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3OCwgODUsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MSwgCisgICAgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTUsIDEyOCwgCisgICAgNzgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTIsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNzgsIDg0LCA4NSwgODUsIDEyOCwgNzgsIDg0LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCAyMTMsIDc4LCA4NCwgCisgICAgNzksIDgxLCA4MCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNzMsIDY5LCAxOTcsIDc4LCA4NCwgNjksIDg1LCA3OCwgNzEsIDY2LCAKKyAgICA2NSwgMTI4LCA3OCwgODQsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA2OSwgNjksIAorICAgIDEyOCwgNzgsIDg0LCA2NSwgODAsIDEyOCwgNzgsIDg0LCA2NSwgMjA4LCA3OCwgODQsIDY1LCA2NSwgMTI4LCA3OCwgODMsIAorICAgIDg1LCA3OSwgMjEyLCA3OCwgODMsIDg1LCA3OCwgMTI4LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3OCwgODMsIDc5LCA3NywgCisgICAgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODAsIDEyOCwgNzgsIDgzLCAKKyAgICA3MywgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgMjEyLCA3OCwgODMsIAorICAgIDcyLCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4MywgNzIsIDg1LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA3MywgNjksIDY5LCAKKyAgICAxMjgsIDc4LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgODEsIDEyOCwgNzgsIDgzLCA3MiwgNjUsIAorICAgIDEyOCwgNzgsIDgzLCA2OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2NSwgCisgICAgMTI4LCA3OCwgODIsIDg5LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIDEyOCwgCisgICAgNzgsIDgyLCA4OSwgODIsIDEyOCwgNzgsIDgyLCA4OSwgODAsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODIsIDg1LCAKKyAgICA4OCwgMTI4LCA3OCwgODIsIDg1LCA4NCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODIsIAorICAgIDEyOCwgNzgsIDgyLCA4NSwgODAsIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDc5LCA4OCwgMTI4LCA3OCwgODIsIAorICAgIDc5LCA4MCwgMTI4LCA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNjksIDg0LCAxMjgsIAorICAgIDc4LCA4MiwgNjksIDgwLCAxMjgsIDc4LCA4MiwgNjksIDEyOCwgNzgsIDgyLCA2NSwgODgsIDEyOCwgNzgsIDgyLCA2NSwgCisgICAgODQsIDEyOCwgNzgsIDgyLCA2NSwgODAsIDEyOCwgNzgsIDgyLCA2NSwgMTI4LCA3OCwgNzksIDg5LCAxMjgsIDc4LCA3OSwgCisgICAgODgsIDEyOCwgNzgsIDc5LCA4NiwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA3OSwgODQsIDg0LCA3OSwgMTI4LCAKKyAgICA3OCwgNzksIDg0LCA2OSwgODMsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDc4LCA3OSwgODQsIAorICAgIDY5LCA3MiwgNjksIDY1LCAxOTYsIDc4LCA3OSwgODQsIDY5LCA2NiwgNzksIDc5LCA3NSwgMTI4LCA3OCwgNzksIDg0LCA2OSwgCisgICAgNjYsIDc5LCA3OSwgMjAzLCA3OCwgNzksIDg0LCA2OSwgMTI4LCA3OCwgNzksIDg0LCAxOTcsIDc4LCA3OSwgODQsIDY3LCAKKyAgICA3MiwgNjksIDE5NiwgNzgsIDc5LCA4NCwgNjcsIDcyLCAxMjgsIDc4LCA3OSwgODQsIDEyOCwgNzgsIDc5LCAyMTIsIDc4LCAKKyAgICA3OSwgODMsIDY5LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIDgyLCA4NCwgNzIsIAorICAgIDY5LCA4MiwgMjA2LCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgNzksIDgyLCA3NywgNjUsIDIwNCwgNzgsIDc5LCAyMTAsIAorICAgIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAxMjgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIDc5LCA3OCwgCisgICAgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIAorICAgIDE5NywgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDY2LCA4MiwgCisgICAgNjksIDY1LCA3NSwgNzMsIDc4LCAxOTksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCA3NSwgNzIsIDg1LCAKKyAgICA3NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIDY2LCA4MiwgNjksIAorICAgIDY1LCAyMDMsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIAorICAgIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDczLCA3MywgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA3MywgMTI4LCA3OCwgNzgsIDc4LCA2OSwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjUsIAorICAgIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNjUsIDEyOCwgNzgsIDc4LCA3OCwgMTI4LCA3OCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgNzksIDEyOCwgCisgICAgNzgsIDc4LCA3MSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzEsIDczLCAxMjgsIDc4LCAKKyAgICA3OCwgNzEsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAxMjgsIDc4LCA3OCwgNjYsIAorICAgIDgzLCA4MCwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIDc2LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NywgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgCisgICAgNzYsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA3OCwgNzYsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OCwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDc2LCAxMjgsIDc4LCA3NSwgNzksIDc3LCAxMjgsIDc4LCA3NSwgMjA3LCA3OCwgNzUsIAorICAgIDczLCA3OCwgNjgsIDczLCAxMjgsIDc4LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODksIDg4LCAKKyAgICAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgMTI4LCAKKyAgICA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIDc4LCA3NCwgODUsIAorICAgIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MSwgNjUsIDEyOCwgNzgsIDc0LCA4NSwgCisgICAgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCA3NCwgODUsIDY5LCAKKyAgICA4MSwgMTI4LCA3OCwgNzQsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4NSwgMTI4LCA3OCwgNzQsIDc5LCA4OCwgMTI4LCAKKyAgICA3OCwgNzQsIDc5LCA4NCwgMTI4LCA3OCwgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgMTI4LCA3OCwgNzQsIAorICAgIDc5LCAxMjgsIDc4LCA3NCwgNzMsIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDgwLCAxMjgsIAorICAgIDc4LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCA3MywgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA3NCwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIDczLCAxMjgsIDc4LCAKKyAgICA3NCwgMjAxLCA3OCwgNzQsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3NCwgNjksIAorICAgIDg1LCA2NSwgNjksIDc4LCA2NSwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY5LCA2OSwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDE5NywgNzgsIDc0LCA2OSwgMTI4LCA3OCwgCisgICAgNzQsIDY1LCA4MSwgMTI4LCA3OCwgNzQsIDY1LCA4MCwgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDc2LCA3MywgMTI4LCAKKyAgICA3OCwgNzQsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2NSwgNjUsIDEyOCwgNzgsIDczLCA4OCwgMTI4LCA3OCwgNzMsIAorICAgIDg0LCA4MiwgNjksIDEyOCwgNzgsIDczLCA4MywgNjUsIDcxLCAxMjgsIDc4LCA3MywgODIsIDg1LCA3MSwgODUsIDEyOCwgCisgICAgNzgsIDczLCA4MCwgMTI4LCA3OCwgNzMsIDc4LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA4OSwgMTI4LCAKKyAgICA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDc4LCAxMjgsIDc4LCA3MywgNzgsIAorICAgIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA3MywgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OCwgCisgICAgNzMsIDc4LCAxOTcsIDc4LCA3MywgNzgsIDY4LCA2NSwgNTAsIDEyOCwgNzgsIDczLCA3OCwgNjgsIDY1LCAxNzgsIDc4LCAKKyAgICA3MywgNzcsIDEyOCwgNzgsIDczLCAyMDUsIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIAorICAgIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgMTI4LCA3OCwgNzMsIDcyLCA4MywgNzIsIDg2LCA2NSwgCisgICAgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCAKKyAgICA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzgsIAorICAgIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgCisgICAgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNzMsIAorICAgIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKKyAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc4LCA3MywgNjksIAorICAgIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIDczLCA2NiwgMTI4LCA3OCwgNzMsIAorICAgIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDcyLCA3NCwgNjUsIDEyOCwgNzgsIAorICAgIDcyLCAxMjgsIDc4LCA3MSwgODksIDY5LCAxMjgsIDc4LCA3MSwgODYsIDY5LCAxMjgsIDc4LCA3MSwgODUsIDg1LCAxMjgsIAorICAgIDc4LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDEyOCwgCisgICAgNzgsIDcxLCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3OSwgODgsIAorICAgIDEyOCwgNzgsIDcxLCA3OSwgODUsIDEyOCwgNzgsIDcxLCA3OSwgMjEzLCA3OCwgNzEsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIAorICAgIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDc5LCA3NywgCisgICAgMTI4LCA3OCwgNzEsIDc5LCA2OSwgNzIsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDIwMCwgNzgsIDcxLCAyMDcsIDc4LCA3MSwgCisgICAgNzUsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAorICAgIDY5LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDE5NywgNzgsIDcxLCA3NSwgNzMsIDc4LCA2OCwgCisgICAgMjAxLCA3OCwgNzEsIDc1LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCAKKyAgICA3NSwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc4LCA3MSwgNzUsIAorICAgIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA2NSwgNzcsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzMsIAorICAgIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA3MywgNjksIDEyOCwgNzgsIDcxLCA3MiwgCisgICAgNjUsIDEyOCwgNzgsIDcxLCA3MSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgyLCA2NSwgNjksIAorICAgIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgODUsIDc5LCAyMDksIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA3NywgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgODUsIAorICAgIDY1LCA2OSwgODMsIDcyLCA2NSwgMTk3LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCAyMDYsIDc4LCA3MSwgNzEsIDg1LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDc5LCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3MywgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIAorICAgIDcxLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMjEzLCA3OCwgNzEsIDcxLCA2OSwgNzgsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgCisgICAgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgODUsIDgyLCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNjksIDY1LCA2OCwgNjUsIAorICAgIDc2LCAxMjgsIDc4LCA3MSwgNjUsIDg4LCAxMjgsIDc4LCA3MSwgNjUsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDg0LCAxMjgsIAorICAgIDc4LCA3MSwgNjUsIDIxMSwgNzgsIDcxLCA2NSwgODEsIDEyOCwgNzgsIDcxLCA2NSwgODAsIDEyOCwgNzgsIDcxLCA2NSwgCisgICAgNzgsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgMTI4LCA3OCwgNzEsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCAKKyAgICA3MiwgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCAxOTMsIDc4LCA3MCwgMTI4LCA3OCwgNjksIDg4LCAKKyAgICAyMTIsIDc4LCA2OSwgODgsIDEyOCwgNzgsIDY5LCA4NywgODMsIDgwLCA2NSwgODAsIDY5LCA4MiwgMTI4LCA3OCwgNjksIAorICAgIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg3LCAxMjgsIDc4LCA2OSwgODUsIDg0LCA4MiwgNjUsIDIwNCwgCisgICAgNzgsIDY5LCA4NSwgODQsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg0LCAxMjgsIDc4LCA2OSwgMjEyLCA3OCwgNjksIDgzLCAKKyAgICA4NCwgNjksIDE5NiwgNzgsIDY5LCA4MSwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzgsIDY5LCA4MCwgODQsIDg1LCA3OCwgNjksIAorICAgIDEyOCwgNzgsIDY5LCA4MCwgMTI4LCA3OCwgNjksIDc5LCAxMjgsIDc4LCA2OSwgMjA3LCA3OCwgNjksIDc4LCA2NSwgNzgsIAorICAgIDc5LCAxMjgsIDc4LCA2OSwgNzgsIDEyOCwgNzgsIDY5LCA3NiwgMTI4LCA3OCwgNjksIDczLCA4NCwgNzIsIDY5LCAyMTAsIAorICAgIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA2NywgCisgICAgNzUsIDg0LCA3MywgNjksIDEyOCwgNzgsIDY5LCA2NiwgNjksIDc4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDc4LCAKKyAgICA2OCwgODUsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc4LCA2OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjgsIAorICAgIDg1LCA4MiwgMTI4LCA3OCwgNjgsIDg1LCA4MCwgMTI4LCA3OCwgNjgsIDg1LCA3OCwgMTI4LCA3OCwgNjgsIDIxMywgNzgsIAorICAgIDY4LCA3OSwgODgsIDEyOCwgNzgsIDY4LCA3OSwgODQsIDEyOCwgNzgsIDY4LCA3OSwgODAsIDEyOCwgNzgsIDY4LCA3OSwgCisgICAgNzksIDEyOCwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzgsIDY4LCA3OSwgNzcsIDY2LCA4NSwgMTI4LCA3OCwgNjgsIDc5LCAKKyAgICA3NiwgMTk3LCA3OCwgNjgsIDczLCA4OCwgMTI4LCA3OCwgNjgsIDczLCA4NCwgMTI4LCA3OCwgNjgsIDczLCA4MSwgMTI4LCAKKyAgICA3OCwgNjgsIDczLCA4MCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY4LCA3MywgNjksIDEyOCwgNzgsIAorICAgIDY4LCA3MywgNjgsIDY1LCAxMjgsIDc4LCA2OCwgNzMsIDY1LCA4MSwgMTI4LCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3OCwgCisgICAgNjgsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA2NSwgNjksIDgyLCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNzgsIDY4LCA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgMTI4LCAKKyAgICA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA4MCwgMTI4LCA3OCwgNjgsIAorICAgIDY1LCA3NywgMTI4LCA3OCwgNjgsIDY1LCA2NSwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA2OCwgCisgICAgNjUsIDY1LCAxMjgsIDc4LCA2OCwgNjUsIDE5MywgNzgsIDY2LCA4OSwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODQsIDEyOCwgCisgICAgNzgsIDY2LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgODksIDgyLCAxMjgsIDc4LCA2NiwgODksIDgwLCAxMjgsIDc4LCAKKyAgICA2NiwgODksIDEyOCwgNzgsIDY2LCA4NSwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODQsIDEyOCwgNzgsIDY2LCA4NSwgODIsIAorICAgIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAxMjgsIDc4LCA2NiwgODUsIDgwLCAxMjgsIDc4LCA2NiwgODUsIDEyOCwgNzgsIAorICAgIDY2LCA3OSwgODgsIDEyOCwgNzgsIDY2LCA3OSwgODQsIDEyOCwgNzgsIDY2LCA3OSwgODAsIDEyOCwgNzgsIDY2LCA3OSwgCisgICAgMTI4LCA3OCwgNjYsIDczLCA4OCwgMTI4LCA3OCwgNjYsIDczLCA4NCwgMTI4LCA3OCwgNjYsIDczLCA4MCwgMTI4LCA3OCwgCisgICAgNjYsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY2LCA3MywgNjksIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCAxMjgsIDc4LCAKKyAgICA2NiwgNzMsIDEyOCwgNzgsIDY2LCA3MiwgMTI4LCA3OCwgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCAKKyAgICA3OCwgNjYsIDY1LCA4MCwgMTI4LCA3OCwgNjYsIDY1LCAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAorICAgIDc4LCA2NSwgODksIDEyOCwgNzgsIDY1LCA4OCwgNzMsIDY1LCAyMDYsIDc4LCA2NSwgODgsIDEyOCwgNzgsIDY1LCA4NSwgCisgICAgODQsIDcyLCA4MywgMTI4LCA3OCwgNjUsIDg1LCA2OCwgNzMsIDIxOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCAKKyAgICA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3OCwgNjUsIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDc4LCA2NSwgODMsIAorICAgIDcyLCA3MywgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc4LCA2NSwgCisgICAgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzgsIDY1LCAKKyAgICA4MiwgMTI4LCA3OCwgNjUsIDgxLCAxMjgsIDc4LCA2NSwgNzksIDIxMSwgNzgsIDY1LCA3OCwgODMsIDY1LCA3OCwgNjUsIAorICAgIDgxLCAxMjgsIDc4LCA2NSwgNzgsIDcxLCA3NywgNzksIDc4LCA4NCwgNzIsIDc5LCAxMjgsIDc4LCA2NSwgNzgsIDY4LCAKKyAgICAxMjgsIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgNzcsIDY5LCAxMjgsIDc4LCA2NSwgNzcsIDE5NywgNzgsIDY1LCAKKyAgICA3NywgNTAsIDEyOCwgNzgsIDY1LCA3NywgMTI4LCA3OCwgNjUsIDc1LCAxMjgsIDc4LCA2NSwgNzMsIDgyLCAxOTMsIDc4LCAKKyAgICA2NSwgNzMsIDIwNCwgNzgsIDY1LCA3MSwgODIsIDIwMSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzEsIAorICAgIDY1LCAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDY1LCA3MSwgMTI4LCA3OCwgNjUsIDE5OSwgNzgsIDY1LCA2OSwgMTI4LCAKKyAgICA3OCwgNjUsIDY2LCA3NiwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIAorICAgIDY1LCA2NSwgNzUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDczLCAxMjgsIDc4LCA2NSwgCisgICAgMTkzLCA3OCwgNjUsIDUwLCAxMjgsIDc4LCA2NSwgNDUsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDUwLCAxMjgsIDc4LCA0OCwgCisgICAgNTIsIDQ5LCAxMjgsIDc4LCA0OCwgNTIsIDQ4LCAxMjgsIDc4LCA0OCwgNTEsIDU3LCAxMjgsIDc4LCA0OCwgNTEsIDU2LCAKKyAgICAxMjgsIDc4LCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgMTI4LCA3OCwgNDgsIDUxLCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDUxLCA1MywgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIAorICAgIDc4LCA0OCwgNTEsIDUyLCAxMjgsIDc4LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgMTI4LCA3OCwgCisgICAgNDgsIDUxLCA1MCwgMTI4LCA3OCwgNDgsIDUxLCA0OSwgMTI4LCA3OCwgNDgsIDUxLCA0OCwgMTI4LCA3OCwgNDgsIDUwLCAKKyAgICA1NywgMTI4LCA3OCwgNDgsIDUwLCA1NiwgMTI4LCA3OCwgNDgsIDUwLCA1NSwgMTI4LCA3OCwgNDgsIDUwLCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDEyOCwgNzgsIDQ4LCA1MCwgNTIsIDEyOCwgNzgsIAorICAgIDQ4LCA1MCwgNTEsIDEyOCwgNzgsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNzgsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDY2LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAKKyAgICA2NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3OCwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNDgsIDQ4LCA1NywgCisgICAgMTI4LCA3OCwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgCisgICAgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNDgsIDQ4LCA1MiwgMTI4LCA3OCwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNDgsIDQ4LCAKKyAgICA1MCwgMTI4LCA3OCwgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzgsIDQ1LCA2NSwgODIsIAorICAgIDIxNywgNzcsIDg5LCA4OCwgMTI4LCA3NywgODksIDg0LCAxMjgsIDc3LCA4OSwgODMsIDc2LCA3MywgODQsIDY5LCAxMjgsIAorICAgIDc3LCA4OSwgODAsIDEyOCwgNzcsIDg5LCA2NSwgMTI4LCA3NywgODksIDE5MywgNzcsIDg5LCAxMjgsIDc3LCAyMTcsIDc3LCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDc3LCA4NywgNzksIDEyOCwgNzcsIDg3LCA3MywgNzMsIDEyOCwgNzcsIDg3LCA3MywgMTI4LCAKKyAgICA3NywgODcsIDY5LCA2OSwgMTI4LCA3NywgODcsIDY5LCAxMjgsIDc3LCA4NywgNjUsIDY1LCAxMjgsIDc3LCA4NywgNjUsIAorICAgIDEyOCwgNzcsIDg3LCAxMjgsIDc3LCAyMTUsIDc3LCA4NiwgODMsIDEyOCwgNzcsIDg2LCA3OSwgODAsIDEyOCwgNzcsIDg2LCAKKyAgICA3MywgMTI4LCA3NywgODYsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNzEsIDY1LCA3NywgMTI4LCA3NywgODYsIDEyOCwgNzcsIAorICAgIDIxNCwgNzcsIDg1LCA4OCwgMTI4LCA3NywgODUsIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCA2NSwgNzgsIDEyOCwgCisgICAgNzcsIDg1LCA4NSwgODIsIDY4LCA3MiwgNjUsIDc0LCAxOTMsIDc3LCA4NSwgODUsIDEyOCwgNzcsIDg1LCA4NCwgMTI4LCAKKyAgICA3NywgODUsIDgzLCA3MywgNjcsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDE5NSwgNzcsIDg1LCA4MywgNzIsIDgyLCA3OSwgNzksIAorICAgIDc3LCAxMjgsIDc3LCA4NSwgODMsIDcyLCA1MSwgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCA3NywgODUsIDgzLCA3MiwgCisgICAgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgODIsIDg4LCAxMjgsIDc3LCA4NSwgODIsIDcxLCA4NSwgNTAsIDEyOCwgCisgICAgNzcsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDY1LCAxMjgsIDc3LCA4NSwgODIsIDY4LCAxOTMsIDc3LCAKKyAgICA4NSwgODIsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIDY1LCA3NywgMTI4LCA3NywgODUsIDgwLCAxMjgsIDc3LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDc3LCA4NSwgNzksIDg0LCAxMjgsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDc3LCA4NSwgNzksIDc3LCA2NSwgCisgICAgNjksIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgNzgsIDY1LCAKKyAgICA3MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIAorICAgIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA4NSwgCisgICAgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIAorICAgIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA4NSwgNzYsIDg0LCA3MywgCisgICAgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAKKyAgICAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzEsIDgzLCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAKKyAgICAxOTksIDc3LCA4NSwgNjksIDEyOCwgNzcsIDg1LCA2NywgNzIsIDEyOCwgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCAKKyAgICA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNDUsIAorICAgIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCA4MCwgNjUsIDEyOCwgNzcsIAorICAgIDc5LCA4OSwgNjUsIDczLCAxMjgsIDc3LCA3OSwgODgsIDEyOCwgNzcsIDc5LCA4NiwgNzMsIDE5NywgNzcsIDc5LCA4NiwgCisgICAgNjksIDE5NiwgNzcsIDc5LCA4NSwgODQsIDcyLCAxMjgsIDc3LCA3OSwgODUsIDg0LCAyMDAsIDc3LCA3OSwgODUsIDgzLCAKKyAgICA2OSwgMTI4LCA3NywgNzksIDg1LCA4MywgMTk3LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDgzLCAxMjgsIAorICAgIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgMjA2LCA3NywgCisgICAgNzksIDg1LCA3OCwgMjEyLCA3NywgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDE5NiwgNzcsIDc5LCAKKyAgICA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNzksIDg0LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA4NSwgODUsIDc3LCAxMjgsIAorICAgIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgNzcsIDc5LCA4MiwgODAsIDcyLCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCAKKyAgICA2NSwgMjA0LCA3NywgNzksIDgyLCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NywgNzksIDgwLCAxMjgsIDc3LCA3OSwgNzksIAorICAgIDgzLCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzcsIDc5LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgMjA2LCA3NywgCisgICAgNzksIDc5LCA3NywgODAsIDg1LCA4MSwgMTI4LCA3NywgNzksIDc5LCA3NywgNjksIDg1LCA4NCwgMTI4LCA3NywgNzksIDc5LCAKKyAgICAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MywgNjksIDY5LCA3OCwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzIsIDEyOCwgNzcsIAorICAgIDc5LCA3OCwgODQsIDIwMCwgNzcsIDc5LCA3OCwgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDgzLCA4NCwgCisgICAgNjUsIDY2LCA3NiwgMTk3LCA3NywgNzksIDc4LCA3OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgyLCAKKyAgICA2NSwgNzMsIDc2LCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NywgNzksIDc4LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NywgNzksIDc4LCA3OSwgCisgICAgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA3NywgNzksIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDc5LCAKKyAgICA3OCwgNzUsIDY5LCA4OSwgMTI4LCA3NywgNzksIDc4LCA3NSwgNjksIDIxNywgNzcsIDc5LCA3OCwgNzMsIDEyOCwgNzcsIAorICAgIDc5LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgNzcsIDc5LCA3OCwgNjksIDIxNywgNzcsIDc5LCA3OCwgCisgICAgMTI4LCA3NywgNzksIDIwNiwgNzcsIDc5LCA3NiwgMTI4LCA3NywgNzksIDcyLCA2NSwgNzcsIDc3LCA2NSwgMTk2LCA3NywgCisgICAgNzksIDY4LCA4NSwgNzYsIDIwNywgNzcsIDc5LCA2OCwgNjksIDgzLCA4NCwgODksIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAKKyAgICA4MywgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDEyOCwgNzcsIDc5LCA2NiwgNzMsIAorICAgIDc2LCAxOTcsIDc3LCA3OSwgNjUsIDEyOCwgNzcsIDIwNywgNzcsIDc4LCA4OSwgNjUsIDIwNSwgNzcsIDc4LCA2NSwgODMsIAorICAgIDEyOCwgNzcsIDc3LCA4MywgODAsIDEyOCwgNzcsIDc3LCAxMjgsIDc3LCAyMDUsIDc3LCA3NiwgNjUsIDEyOCwgNzcsIDc2LCAKKyAgICAxMjgsIDc3LCA3NSwgODAsIDY1LCA4MiwgNjUsIDIwOSwgNzcsIDczLCA4OCwgMTI4LCA3NywgNzMsIDg0LCAxMjgsIDc3LCAKKyAgICA3MywgODMsIDgyLCA2NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgNjYsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDc3LCA3MywgODIsIAorICAgIDczLCAxMjgsIDc3LCA3MywgODIsIDY5LCA2OCwgMTI4LCA3NywgNzMsIDgwLCAxMjgsIDc3LCA3MywgNzgsIDg5LCAxMjgsIAorICAgIDc3LCA3MywgNzgsIDg1LCA4MywgNDUsIDc5LCA4MiwgNDUsIDgwLCA3NiwgODUsIDIxMSwgNzcsIDczLCA3OCwgODUsIDgzLCAKKyAgICAxMjgsIDc3LCA3MywgNzgsIDczLCA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzMsIDc4LCA3MywgNzcsIDY1LCAxMjgsIAorICAgIDc3LCA3MywgNzgsIDczLCA2OCwgNzMsIDgzLCA2NywgMTI4LCA3NywgNzMsIDc4LCA3MywgNjYsIDg1LCA4MywgMTI4LCA3NywgCisgICAgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCAKKyAgICA3MywgNzYsIDc2LCA2OSwgODQsIDEyOCwgNzcsIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgMjA0LCA3NywgNzMsIAorICAgIDc2LCA3NSwgMjE3LCA3NywgNzMsIDc2LCAxMjgsIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDc1LCA4MiwgNzMsIDEyOCwgNzcsIDczLCA3MywgNzgsIDEyOCwgNzcsIDczLCAKKyAgICA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKKyAgICA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NywgNzMsIDY5LCAKKyAgICA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgCisgICAgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDY1LCA3OCwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNjksIDg1LCA3NywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3NywgCisgICAgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgNzcsIDczLCAKKyAgICA2OCwgNjgsIDc2LCA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCA3NywgNzMsIAorICAgIDE5NiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgNjcsIDc5LCA4MCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDc5LCA4MCwgCisgICAgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDIwNywgNzcsIDczLCA2NywgMjEwLCA3NywgNzIsIDkwLCAKKyAgICAxMjgsIDc3LCA3MiwgNjUsIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAKKyAgICAxMjgsIDc3LCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCAKKyAgICA3NywgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIAorICAgIDc3LCA3MSwgODUsIDEyOCwgNzcsIDcxLCA3OSwgODgsIDEyOCwgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgCisgICAgODAsIDEyOCwgNzcsIDcxLCA3OSwgMTI4LCA3NywgNzEsIDIwNywgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgCisgICAgNzMsIDY5LCAxMjgsIDc3LCA3MSwgNjksIDg4LCAxMjgsIDc3LCA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgCisgICAgNzcsIDcxLCA2NiwgODUsIDEyOCwgNzcsIDcxLCA2NiwgNzksIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3MCwgODUsIDc3LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDczLCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA4NSwgNzgsIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNjksIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgCisgICAgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCA4MSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCAxMjgsIDc3LCAKKyAgICA3MSwgNjUsIDg4LCAxMjgsIDc3LCA3MSwgNjUsIDg0LCAxMjgsIDc3LCA3MSwgNjUsIDgwLCAxMjgsIDc3LCA3MSwgNjUsIAorICAgIDEyOCwgNzcsIDcxLCAxMjgsIDc3LCA3MCwgNzksIDc4LCAxMjgsIDc3LCA3MCwgNzksIDIwNiwgNzcsIDcwLCA3OSwgMTI4LCAKKyAgICA3NywgNzAsIDczLCA4OSwgNjUsIDgxLCAxMjgsIDc3LCA3MCwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgNzcsIDcwLCA2OSwgODUsIDgxLCAxMjgsIDc3LCA3MCwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzcsIDcwLCA2NSwgCisgICAgNjUsIDEyOCwgNzcsIDY5LCA5MCwgOTAsIDc5LCAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NSwgMjEyLCA3NywgCisgICAgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCA3OCwgNzQsIDc5LCA3NywgNzgsIDY4LCA2OSwgODUsIDgxLCAxMjgsIDc3LCAKKyAgICA2OSwgODUsIDc4LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3OSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgCisgICAgMjA0LCA3NywgNjksIDg0LCA4MiwgNzMsIDY1LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCAKKyAgICA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDc1LCAxMjgsIDc3LCA2OSwgODQsIAorICAgIDY5LCA3MSwgMTI4LCA3NywgNjksIDg0LCA2NSwgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgCisgICAgNjksIDc4LCA3MywgNjUsIDIwNiwgNzcsIDY5LCA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MywgODMsIDY1LCAKKyAgICA3MSwgMTk3LCA3NywgNjksIDgzLCA3OSwgMTI4LCA3NywgNjksIDgzLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgMTI4LCAKKyAgICA3NywgNjksIDgyLCA3OSwgNzMsIDg0LCA3MywgMTk1LCA3NywgNjksIDgyLCA3NSwgNzIsIDY1LCAxMjgsIDc3LCA2OSwgODIsIAorICAgIDc1LCA3MiwgMTkzLCA3NywgNjksIDgyLCA3MywgNjgsIDczLCA2NSwgNzgsIDgzLCAxMjgsIDc3LCA2OSwgODIsIDczLCAKKyAgICAxMjgsIDc3LCA2OSwgODIsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCA4OSwgMTI4LCA3NywgNjksIAorICAgIDgyLCA2NywgODUsIDgyLCAyMTcsIDc3LCA2OSwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgCisgICAgNjksIDc3LCA3OSwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NywgNjksIDc3LCAKKyAgICA2NiwgNjksIDgyLCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgMjEwLCA3NywgNjksIDc3LCA0NSwgODEsIDc5LCA4MCwgNzIsIAorICAgIDEyOCwgNzcsIDY5LCA3NywgMTI4LCA3NywgNjksIDIwNSwgNzcsIDY5LCA3NiwgNzksIDY4LCA3MywgMTk1LCA3NywgNjksIAorICAgIDc2LCA3MywgNzUsIDEyOCwgNzcsIDY5LCA3MywgOTAsIDczLCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4NCwgNzksIDc4LCAKKyAgICAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgCisgICAgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDY5LCAKKyAgICA3NywgODUsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIAorICAgIDczLCA4NSwgNzcsIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3NywgNjksIDY4LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA2OSwgNjUsIDg0LCAxMjgsIDc3LCA2OSwgNjUsIDIxMiwgCisgICAgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDE5NiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDY5LCAKKyAgICA2NSwgODMsIDg1LCA4MiwgMTk3LCA3NywgNjgsIDg1LCAyMDYsIDc3LCAxOTYsIDc3LCA2NywgNzIsIDIxMywgNzcsIDY3LCAKKyAgICA3MiwgNjUsIDIwNiwgNzcsIDE5NSwgNzcsIDY2LCA4NSwgNzksIDgxLCAxMjgsIDc3LCA2NiwgODUsIDc5LCAxMjgsIDc3LCAKKyAgICA2NiwgODUsIDY5LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCAxMjgsIAorICAgIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgODQsIDEyOCwgNzcsIDY2LCA3MywgCisgICAgMjEyLCA3NywgNjYsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA3MywgMTI4LCA3NywgNjYsIDY5LCAKKyAgICA4NSwgODgsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgNzcsIDEyOCwgNzcsIAorICAgIDY2LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY5LCA3OCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgNzUsIDY5LCA2OSwgCisgICAgODQsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDY2LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA4MSwgMTI4LCA3NywgCisgICAgNjYsIDY1LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NiwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAKKyAgICA3NSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAxMjgsIDc3LCA2NiwgNjUsIDE5MywgNzcsIDY2LCAxOTMsIDc3LCAKKyAgICA2NiwgNTIsIDEyOCwgNzcsIDY2LCA1MSwgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgMTI4LCA3NywgMTk0LCA3NywgCisgICAgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDg5LCAxMjgsIDc3LCA2NSwgODgsIDczLCA3NywgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA4OCwgMTI4LCA3NywgNjUsIDg1LCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAorICAgIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgCisgICAgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDY1LCAKKyAgICA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCA2NSwgODMsIDc1LCAxMjgsIAorICAgIDc3LCA2NSwgODMsIDcyLCA3MCwgNjUsIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNTAsIDEyOCwgNzcsIDY1LCA4MywgCisgICAgNjcsIDg1LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA2NSwgODIsIDg5LCAxMjgsIDc3LCA2NSwgODIsIDg1LCA3NSwgODUsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgODQsIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIDg5LCA3MywgNzgsIDE5OSwgCisgICAgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCAKKyAgICA3NSwgNDUsIDUyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTEsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MCwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDQ5LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCAKKyAgICA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDgzLCA3MywgODQsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDY1LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIAorICAgIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCA2NSwgNzAsIDEyOCwgNzcsIDY1LCA4MSwgMTI4LCA3NywgNjUsIDgwLCA3NiwgCisgICAgMTk3LCA3NywgNjUsIDgwLCA3MywgODEsIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCA2NSwgNzksIDEyOCwgNzcsIDY1LCA3OCwgCisgICAgODMsIDg5LCA3OSwgNzgsIDEyOCwgNzcsIDY1LCA3OCwgODMsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDc4LCA3MSwgNjUsIDc2LCA2NSwgNzcsIDEyOCwgNzcsIAorICAgIDY1LCA3OCwgNjgsIDY1LCA3MywgNzYsIDczLCA3OCwgMTk5LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCAxOTUsIDc3LCA2NSwgCisgICAgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3NiwgODQsIDY5LCAKKyAgICA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgNjksIDgyLCA3MywgMTI4LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgNjUsIAorICAgIDc2LCAxOTcsIDc3LCA2NSwgNzYsIDY1LCA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgCisgICAgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgMTkzLCA3NywgNjUsIDczLCA5MCwgNjksIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCAKKyAgICA3NywgNzksIDc1LCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIAorICAgIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgCisgICAgMTI4LCA3NywgNjUsIDczLCA3NiwgNjYsIDc5LCAyMTYsIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIDc3LCAKKyAgICA2NSwgNzMsIDY4LCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgMTI4LCA3NywgNjUsIDcyLCA3NCwgNzksIDc4LCAxOTksIAorICAgIDc3LCA2NSwgNzIsIDcyLCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgCisgICAgNzIsIDY1LCA4MCwgNjUsIDc1LCA3MiwgMTI4LCA3NywgNjUsIDcyLCA2NSwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCAKKyAgICA3NywgNjUsIDcyLCAxMjgsIDc3LCA2NSwgNzEsIDc4LCA3MywgNzAsIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA2OSwgODMsIAorICAgIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA4OSwgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDc0LCA2OSwgODQsIDEyOCwgCisgICAgNzcsIDY1LCA2OSwgNzcsIDg2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA3NSwgODAsIDY5LCA3OCwgMTI4LCAKKyAgICA3NywgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNzEsIDY2LCA3MywgCisgICAgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY1LCAKKyAgICA2OSwgNzYsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NSwgNjksIDg1LCA4MCwgMTI4LCA3NywgNjUsIDY4LCA4OSwgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA2OCwgODUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAyMDAsIDc3LCA2NSwgNjgsIDY4LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDY4LCA2OCwgMTkzLCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIAorICAgIDc5LCA3OCwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA2NSwgCisgICAgNjcsIDgyLCA3OSwgMjA2LCA3NywgNjUsIDY3LCA3MiwgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjUsIDY1LCA4OSwgODksIDY1LCAKKyAgICA2NSwgMTI4LCA3NywgNjUsIDY1LCA3MywgMTI4LCA3NywgNjUsIDY1LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MiwgNTIsIDEyOCwgNzcsIDQ4LCA1MiwgNTEsIDEyOCwgNzcsIDQ4LCA1MiwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNDksIAorICAgIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNTIsIDQ4LCAxMjgsIDc3LCA0OCwgNTEsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTEsIDU2LCAxMjgsIDc3LCA0OCwgNTEsIDU1LCAxMjgsIDc3LCA0OCwgNTEsIDU0LCAxMjgsIDc3LCA0OCwgCisgICAgNTEsIDUzLCAxMjgsIDc3LCA0OCwgNTEsIDUyLCAxMjgsIDc3LCA0OCwgNTEsIDUxLCA2NiwgMTI4LCA3NywgNDgsIDUxLCAKKyAgICA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDEyOCwgNzcsIDQ4LCA1MSwgNTAsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIAorICAgIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCAxMjgsIDc3LCA0OCwgNTEsIDQ4LCAxMjgsIDc3LCA0OCwgNTAsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1NiwgMTI4LCA3NywgNDgsIDUwLCA1NSwgMTI4LCA3NywgCisgICAgNDgsIDUwLCA1NCwgMTI4LCA3NywgNDgsIDUwLCA1MywgMTI4LCA3NywgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MCwgNTIsIDEyOCwgNzcsIDQ4LCA1MCwgNTEsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIAorICAgIDUwLCAxMjgsIDc3LCA0OCwgNTAsIDQ5LCAxMjgsIDc3LCA0OCwgNTAsIDQ4LCAxMjgsIDc3LCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNDksIDU2LCAxMjgsIDc3LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDEyOCwgNzcsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUzLCAxMjgsIDc3LCA0OCwgNDksIDUyLCAxMjgsIDc3LCA0OCwgNDksIDUxLCAxMjgsIDc3LCA0OCwgNDksIAorICAgIDUwLCA3MiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzEsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcwLCAxMjgsIDc3LCA0OCwgCisgICAgNDksIDUwLCA2OSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjgsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY3LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUwLCA2NiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNDksIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCAxMjgsIDc3LCA0OCwgCisgICAgNDgsIDU3LCAxMjgsIDc3LCA0OCwgNDgsIDU2LCAxMjgsIDc3LCA0OCwgNDgsIDU1LCAxMjgsIDc3LCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDc3LCA0OCwgNDgsIDUzLCAxMjgsIDc3LCA0OCwgNDgsIDUyLCAxMjgsIDc3LCA0OCwgNDgsIDUxLCA2NSwgMTI4LCAKKyAgICA3NywgNDgsIDQ4LCA1MSwgMTI4LCA3NywgNDgsIDQ4LCA1MCwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjYsIDEyOCwgNzcsIAorICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCAxMjgsIDc2LCAyMTgsIDc2LCA4OSwgODksIDEyOCwgNzYsIAorICAgIDg5LCA4OCwgMTI4LCA3NiwgODksIDg0LCAxMjgsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDc2LCA4OSwgODIsIDEyOCwgNzYsIAorICAgIDg5LCA4MCwgMTI4LCA3NiwgODksIDY4LCA3MywgNjUsIDIwNiwgNzYsIDg5LCA2NywgNzMsIDY1LCAyMDYsIDc2LCA4OCwgCisgICAgMTI4LCA3NiwgODcsIDc5LCA3OSwgMTI4LCA3NiwgODcsIDc5LCAxMjgsIDc2LCA4NywgNzMsIDczLCAxMjgsIDc2LCA4NywgCisgICAgNzMsIDEyOCwgNzYsIDg3LCA2OSwgMTI4LCA3NiwgODcsIDY1LCA2NSwgMTI4LCA3NiwgODcsIDY1LCAxMjgsIDc2LCA4NSwgCisgICAgODgsIDEyOCwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgODUsIDg0LCAxMjgsIDc2LCA4NSwgODIsIDg4LCAxMjgsIDc2LCA4NSwgCisgICAgODAsIDEyOCwgNzYsIDg1LCA3OSwgODgsIDEyOCwgNzYsIDg1LCA3OSwgODQsIDEyOCwgNzYsIDg1LCA3OSwgODAsIDEyOCwgCisgICAgNzYsIDg1LCA3OSwgMTI4LCA3NiwgODUsIDc4LCA3MSwgODMsIDczLCAxMjgsIDc2LCA4NSwgNzgsIDY1LCA4NCwgMTk3LCAKKyAgICA3NiwgODUsIDIwNSwgNzYsIDg1LCA3NiwgMTI4LCA3NiwgODUsIDczLCA4MywgMTI4LCA3NiwgODUsIDcyLCA4NSwgODIsIAorICAgIDEyOCwgNzYsIDg1LCA3MiwgMTI4LCA3NiwgODUsIDcxLCA3MSwgNjUsIDcxLCA2OSwgMTI4LCA3NiwgODUsIDcxLCA2NSwgCisgICAgNzYsIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDIwNCwgNzYsIDg1LCA2OSwgMTI4LCA3NiwgODUsIDY1LCA2OSwgODAsIDEyOCwgCisgICAgNzYsIDg1LCA1MSwgMTI4LCA3NiwgODUsIDUwLCAxMjgsIDc2LCA4NSwgMTc4LCA3NiwgODIsIDc5LCAxMjgsIDc2LCA4MiwgCisgICAgNzcsIDEyOCwgNzYsIDgyLCA3MywgMTI4LCA3NiwgODIsIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDE5NywgNzYsIDc5LCA4OCwgMTI4LCA3NiwgNzksIDg3LCA2OSwgODIsIAorICAgIDY5LCAxOTYsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDc2LCA3OSwgODcsIDQ1LCAxODUsIDc2LCA3OSwgODYsIDE5NywgNzYsIAorICAgIDc5LCA4NSwgODIsIDY5LCAxMjgsIDc2LCA3OSwgODUsIDY4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA3NiwgCisgICAgNzksIDg1LCA2OCwgNzYsIDIxNywgNzYsIDc5LCA4NCwgODUsIDgzLCAxMjgsIDc2LCA3OSwgODQsIDEyOCwgNzYsIDc5LCAKKyAgICA4MiwgODIsIDg5LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NiwgNzksIDgxLCAxMjgsIAorICAgIDc2LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA3OSwgODAsIDY5LCAxOTYsIDc2LCA3OSwgCisgICAgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDIwOCwgNzYsIDc5LCA3OSwgNzgsIDEyOCwgNzYsIDc5LCA3OSwgMjAzLCA3NiwgCisgICAgNzksIDc5LCAxMjgsIDc2LCA3OSwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCAKKyAgICA3OSwgNzgsIDcxLCAxOTMsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDg5LCA4MiwgCisgICAgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgNzksIDIwNCwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIDcxLCA0NSwgCisgICAgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIAorICAgIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKKyAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDY1LCAyMTAsIDc2LCA3OSwgNzcsIDc3LCA2NSwgNjksIDEyOCwgNzYsIDc5LCA3NywgCisgICAgMTI4LCA3NiwgNzksIDIwNSwgNzYsIDc5LCA3NiwgNzYsIDczLCA4MCwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzYsIDc2LCAKKyAgICAxMjgsIDc2LCA3OSwgNzEsIDIxMCwgNzYsIDc5LCA3MSwgNzksIDg0LCA4OSwgODAsIDE5NywgNzYsIDc5LCA3MSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDIwNSwgNzYsIDc5LCA3MSwgMTI4LCA3NiwgNzksIDY4LCA2OSwgODMsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgNjcsIDc5LCA3NywgNzksIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDc1LCA3MywgNzgsIAorICAgIDcxLCA0NSwgODMsIDcyLCA3MywgNzAsIDIxMiwgNzYsIDc5LCA2NywgMjAzLCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA4NiwgCisgICAgNjksIDEyOCwgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDc5LCA2NSwgMTI4LCA3NiwgNzgsIDEyOCwgCisgICAgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCAKKyAgICA3NiwgNzYsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgMTI4LCA3NiwgNzYsIAorICAgIDc2LCA3MywgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNjksIDY5LCAxMjgsIDc2LCA3NiwgCisgICAgNzYsIDY5LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgNzMsIDEyOCwgNzYsIDc2LCAKKyAgICA3NiwgNjUsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDEyOCwgNzYsIDc0LCA4NSwgNjgsIAorICAgIDczLCA3NCwgNjksIDEyOCwgNzYsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDEyOCwgNzYsIDczLCA4OCwgMTI4LCA3NiwgNzMsIAorICAgIDg3LCA3OCwgMTI4LCA3NiwgNzMsIDg2LCA4MiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgNzYsIDE5NywgNzYsIDczLCA4NCwgCisgICAgODQsIDY5LCAyMTAsIDc2LCA3MywgODQsIDgyLCAxOTMsIDc2LCA3MywgODQsIDEyOCwgNzYsIDczLCA4MywgMjEzLCA3NiwgCisgICAgNzMsIDgyLCAxOTMsIDc2LCA3MywgODEsIDg1LCA3MywgMTk2LCA3NiwgNzMsIDgxLCAxMjgsIDc2LCA3MywgODAsIDgzLCAKKyAgICA4NCwgNzMsIDY3LCA3NSwgMTI4LCA3NiwgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDc2LCA3MywgNzgsIDIwMywgNzYsIAorICAgIDczLCA3OCwgNzEsIDgzLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDczLCA3OCwgNjksIDIxMSwgCisgICAgNzYsIDczLCA3OCwgNjksIDQ1LCA1NywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCAKKyAgICA0NSwgNTEsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIAorICAgIDc2LCA3MywgNzcsIDc3LCA4NSwgNTAsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDc2LCA3MywgNzcsIDc3LCAKKyAgICAyMTMsIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDE5NiwgNzYsIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgNzYsIDczLCA3NywgNzMsIDg0LCAxMjgsIDc2LCA3MywgNzcsIDY5LCAxMjgsIDc2LCA3MywgNzcsIDY2LCAyMTMsIAorICAgIDc2LCA3MywgNzYsIDg5LCAxMjgsIDc2LCA3MywgNzYsIDczLCA4NCwgNzIsIDEyOCwgNzYsIDczLCA3NiwgMTI4LCA3NiwgCisgICAgNzMsIDcxLCA3MiwgODQsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzIsIDc5LCA4NSwgODMsIAorICAgIDY5LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNzMsIDcwLCA2OSwgMTI4LCA3NiwgNzMsIDY5LCA4OCwgCisgICAgMTI4LCA3NiwgNzMsIDY5LCA4NCwgMTI4LCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3NiwgNzMsIDY5LCA2OSwgMTI4LCA3NiwgCisgICAgNzMsIDY5LCAxMjgsIDc2LCA3MywgNjgsIDEyOCwgNzYsIDczLCA2NiwgODIsIDY1LCAxMjgsIDc2LCA3MywgNjYsIDY5LCAKKyAgICA4MiwgODQsIDg5LCAxMjgsIDc2LCA3MywgNjUsIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA3NiwgNzIsIDczLCA3MywgCisgICAgMTI4LCA3NiwgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDE5OSwgNzYsIDcyLCAKKyAgICA2NSwgNjUsIDEyOCwgNzYsIDcyLCAxMjgsIDc2LCA2OSwgOTAsIDcyLCAxMjgsIDc2LCA2OSwgODgsIDEyOCwgNzYsIDY5LCAKKyAgICA4NiwgNjksIDIwNCwgNzYsIDY5LCA4NSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgNjksIAorICAgIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc2LCA2OSwgODUsIDEyOCwgNzYsIDY5LCAyMTMsIDc2LCA2OSwgODQsIDg0LCA2OSwgCisgICAgODIsIDgzLCAxMjgsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDEyOCwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgODMsIDgzLCAKKyAgICA2OSwgMjEwLCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIAorICAgIDcyLCA2NSwgMjA2LCA3NiwgNjksIDgwLCAxMjgsIDc2LCA2OSwgNzksIDgwLCA2NSwgODIsIDY4LCAxMjgsIDc2LCA2OSwgCisgICAgNzksIDEyOCwgNzYsIDY5LCA3OCwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NiwgNjksIDc4LCA3MywgODMsIAorICAgIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNjksIDc4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAKKyAgICAyMDAsIDc2LCA2OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNjksIDc4LCA3MSwgMTkzLCA3NiwgNjksIDc3LCA3OSwgNzgsIAorICAgIDEyOCwgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA3NiwgNjksIDc2LCA2OSwgCisgICAgMjEyLCA3NiwgNjksIDIwMywgNzYsIDY5LCA3MywgNzcsIDc3LCA2NSwgMTI4LCA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgCisgICAgNzYsIDY5LCA3MSwgODMsIDEyOCwgNzYsIDY5LCA3MSwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDcxLCA2OSwgODQsIDc5LCAKKyAgICAyMTEsIDc2LCA2OSwgNzEsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA3NiwgNjksIAorICAgIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgNzEsIDcyLCAyMTIsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDg0LCAKKyAgICA2OSwgMjA1LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzIsIAorICAgIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3NiwgCisgICAgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIAorICAgIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA3MCwgODQsIDEyOCwgCisgICAgNzYsIDY5LCA2OSwgODIsIDY1LCA2OSwgODcsIDY1LCAxMjgsIDc2LCA2OSwgNjksIDc1LCAxMjgsIDc2LCA2OSwgNjksIDY5LCAKKyAgICA2OSwgMTI4LCA3NiwgNjksIDY4LCA3MSwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAorICAgIDc2LCA2OSwgNjUsIDcwLCAxMjgsIDc2LCA2OSwgNjUsIDE5OCwgNzYsIDY5LCA2NSwgNjgsIDczLCA3OCwgMTk5LCA3NiwgCisgICAgNjksIDY1LCA2OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDE5NiwgNzYsIDY4LCA2NSwgNzgsIDEyOCwgNzYsIDY4LCAKKyAgICA1MCwgMTI4LCA3NiwgNjcsIDIwMSwgNzYsIDY3LCAxOTcsIDc2LCA2NSwgOTAsIDIxNywgNzYsIDY1LCA4OSwgNjUsIDc4LCAKKyAgICA3OCwgNjUsIDEyOCwgNzYsIDY1LCA4OCwgMTI4LCA3NiwgNjUsIDg3LCAxMjgsIDc2LCA2NSwgMjE1LCA3NiwgNjUsIDg1LCAKKyAgICA3NiwgNjUsIDEyOCwgNzYsIDY1LCA4NSwgNzUsIDY1LCAyMTgsIDc2LCA2NSwgODQsIDczLCA3OCwgNjUsIDg0LCAxOTcsIAorICAgIDc2LCA2NSwgODQsIDczLCA3NSwgMTI4LCA3NiwgNjUsIDg0LCA2OSwgODIsIDY1LCAyMDQsIDc2LCA2NSwgODQsIDE5NywgCisgICAgNzYsIDY1LCA4MywgMjEyLCA3NiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAKKyAgICAyMTAsIDc2LCA2NSwgODIsIDcxLCA2OSwgMTI4LCA3NiwgNjUsIDgyLCA3MSwgMTk3LCA3NiwgNjUsIDgxLCAxMjgsIDc2LCAKKyAgICA2NSwgODAsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCAxMjgsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIAorICAgIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAxOTcsIDc2LCA2NSwgNzgsIDY5LCA4MywgMTI4LCA3NiwgNjUsIDc3LCA2OSwgCisgICAgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjUsIDc3LCAKKyAgICA2OSwgMTI4LCA3NiwgNjUsIDc3LCAxOTcsIDc2LCA2NSwgNzcsIDY4LCA2NSwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCAKKyAgICA3NiwgNjUsIDc3LCA2NiwgNjgsIDE5MywgNzYsIDY1LCA3NywgNjUsIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc2LCAxMjgsIAorICAgIDc2LCA2NSwgMjA0LCA3NiwgNjUsIDc1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzYsIDY1LCA3NCwgCisgICAgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCAyMDEsIDc2LCA2NSwgNzIsIDgzLCA3MiwgODUsIAorICAgIDEyOCwgNzYsIDY1LCA3MiwgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIDEyOCwgNzYsIDY1LCA3MSwgMjEzLCA3NiwgNjUsIAorICAgIDcxLCA2NSwgODIsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDIxMCwgNzYsIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2NSwgCisgICAgNzEsIDY1LCAxOTQsIDc2LCA2NSwgNjksIDg2LCAxMjgsIDc2LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2OCwgMjE3LCA3NiwgCisgICAgNjUsIDY3LCA3NSwgMTI4LCA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDY2LCA3MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA3NiwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzYsIDY1LCA2NSwgCisgICAgNzgsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIDY1LCA3NywgODUsIDEyOCwgNzYsIDY1LCAKKyAgICA2NSwgNzcsIDEyOCwgNzYsIDY1LCA2NSwgNzMsIDEyOCwgNzYsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc2LCA0OCwgNDgsIAorICAgIDUwLCA2NSwgMTI4LCA3NiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzYsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgCisgICAgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NSwgODksIDg1LCAxMjgsIDc1LCA4OSwgNzksIDEyOCwgNzUsIDg5LCAKKyAgICA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg5LCA3MywgMTI4LCA3NSwgODksIDY5LCAxMjgsIDc1LCA4OSwgNjUsIAorICAgIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA2NSwgNjUsIDEyOCwgNzUsIDg5LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA3MywgCisgICAgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA4NywgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDczLCAKKyAgICAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCAKKyAgICA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgNzksIAorICAgIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIDg3LCA3MywgMTI4LCA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODcsIAorICAgIDY5LCAxMjgsIDc1LCA4NywgNjUsIDg5LCAxMjgsIDc1LCA4NywgNjUsIDY5LCA4NCwgMTI4LCA3NSwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA3NSwgODYsIDY1LCAxMjgsIDc1LCA4NiwgMTI4LCA3NSwgODUsIDg4LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAxMjgsIAorICAgIDc1LCA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIDEyOCwgCisgICAgNzUsIDg1LCA4MiwgODgsIDEyOCwgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgODUsIDgyLCAKKyAgICA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCA3NSwgODUsIDgyLCAxMjgsIDc1LCA4NSwgMjEwLCAKKyAgICA3NSwgODUsIDgxLCAxMjgsIDc1LCA4NSwgNzksIDg4LCAxMjgsIDc1LCA4NSwgNzksIDgwLCAxMjgsIDc1LCA4NSwgNzksIAorICAgIDIwOCwgNzUsIDg1LCA3OSwgNzcsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIAorICAgIDc4LCA2OCwgNjgsIDY1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgCisgICAgODUsIDY5LCA4NCwgMTI4LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgNTIsIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgCisgICAgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgMTI4LCA3NSwgODMsIDgzLCA4NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgCisgICAgODUsIDEyOCwgNzUsIDgzLCA4MywgNzksIDc5LCAxMjgsIDc1LCA4MywgODMsIDc5LCAxMjgsIDc1LCA4MywgODMsIDczLCAKKyAgICA3MywgMTI4LCA3NSwgODMsIDgzLCA3MywgMTI4LCA3NSwgODMsIDgzLCA2OSwgNjksIDEyOCwgNzUsIDgzLCA4MywgNjksIAorICAgIDEyOCwgNzUsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDY1LCA3MywgMTI4LCA3NSwgODMsIDgzLCA2NSwgCisgICAgNjUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDEyOCwgNzUsIDgzLCA4MywgMTI4LCA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgCisgICAgNjksIDc3LCA2NSwgODMsIDg0LCA3MywgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIAorICAgIDgyLCA3OSwgNzksIDc4LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCAKKyAgICA3NywgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIAorICAgIDc3LCAxOTMsIDc1LCA4MCwgODUsIDEyOCwgNzUsIDgwLCA3OSwgODEsIDEyOCwgNzUsIDgwLCA3OSwgNzksIDEyOCwgNzUsIAorICAgIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA3NSwgODAsIDY5LCA2OSwgCisgICAgMTI4LCA3NSwgODAsIDY5LCAxMjgsIDc1LCA4MCwgNjUsIDgyLCA2NSwgODEsIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgCisgICAgNzUsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODYsIDg1LCA4NSwgMTI4LCA3NSwgNzksIDg0LCAKKyAgICA3OSwgMTI4LCA3NSwgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIAorICAgIDc1LCA3OSwgODIsIDY5LCA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAxOTUsIDc1LCA3OSwgODEsIDc4LCA2OCwgCisgICAgNzksIDc4LCAxMjgsIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDgwLCAxMjgsIDc1LCA3OSwgNzksIDgwLCAKKyAgICA3OSwgMTI4LCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgMTI4LCA3NSwgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIAorICAgIDg0LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgMTkzLCA3NSwgNzksIDc3LCAKKyAgICAyMDEsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDE5MywgNzUsIAorICAgIDc5LCA3NywgNjYsIDIxMywgNzUsIDc5LCA3NSwgNzksIDEyOCwgNzUsIDc5LCA3NSwgMTI4LCA3NSwgNzksIDIwMywgNzUsIAorICAgIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgMTI4LCA3NSwgNzksIDcxLCA3MiwgNzksIDc3LCAxMjgsIAorICAgIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjUsIDc2LCA2NSwgMTI4LCA3NSwgNzksIDY1LCAxMjgsIDc1LCA3OCwgCisgICAgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc1LCA3OCwgNzMsIDcwLCA2OSwgMTI4LCAKKyAgICA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgNzcsIDEyOCwgNzUsIDIwNSwgNzUsIDc2LCA3MywgODQsIDc5LCA3OCwgMTI4LCAKKyAgICA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgMTkzLCA3NSwgNzYsIDY1LCAxMjgsIAorICAgIDc1LCA3NiwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NSwgNzksIDEyOCwgNzUsIDc1LCA3MywgMTI4LCA3NSwgNzUsIAorICAgIDY5LCA2OSwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIDc1LCAxMjgsIDc1LCA3NCwgNjksIAorICAgIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzUsIDczLCA4OSwgCisgICAgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3NSwgNzMsIAorICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgCisgICAgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzUsIDczLCAKKyAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgMjAzLCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDczLCA4MywgODMsIDczLCA3OCwgMTk5LCA3NSwgCisgICAgNzMsIDgzLCA4MywgMTI4LCA3NSwgNzMsIDgzLCAyMTEsIDc1LCA3MywgODMsIDczLCA3NywgNTMsIDEyOCwgNzUsIDczLCAKKyAgICA4MywgNzMsIDc3LCAxODEsIDc1LCA3MywgODMsIDcyLCAxMjgsIDc1LCA3MywgODMsIDY1LCA3NiwgMTI4LCA3NSwgNzMsIAorICAgIDgyLCA3OSwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCAKKyAgICA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgCisgICAgMTI4LCA3NSwgNzMsIDgyLCA3MSwgNzIsIDczLCAyMTgsIDc1LCA3MywgODEsIDEyOCwgNzUsIDczLCA4MCwgMTI4LCA3NSwgCisgICAgNzMsIDIwOCwgNzUsIDczLCA3OCwgODMsIDcyLCA3MywgODAsIDEyOCwgNzUsIDczLCA3OCwgNjgsIDY5LCA4MiwgNzEsIDY1LCAKKyAgICA4MiwgODQsIDY5LCA3OCwgMTI4LCA3NSwgNzMsIDc3LCA3OSwgNzgsIDc5LCAxMjgsIDc1LCA3MywgNzMsIDEyOCwgNzUsIAorICAgIDczLCA3MiwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCA3NSwgNzMsIDY5LCA2OSwgCisgICAgNzcsIDEyOCwgNzUsIDczLCA2OSwgMTI4LCA3NSwgNzMsIDY4LCAxMjgsIDc1LCA3MywgMTk2LCA3NSwgNzMsIDY3LCA3NSwgCisgICAgMTI4LCA3NSwgNzIsIDkwLCAxMjgsIDc1LCA3MiwgODcsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDg1LCA2OSwgNzgsIDQ1LCAKKyAgICA3NiwgODUsIDE5NywgNzUsIDcyLCA4NSwgNjksIDIwNiwgNzUsIDcyLCA4NSwgNjgsIDY1LCA3NywgMTI4LCA3NSwgNzIsIAorICAgIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgODUsIDEyOCwgNzUsIDcyLCA3OSwgMjEyLCA3NSwgNzIsIDc5LCA3OCwgCisgICAgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDEyOCwgNzUsIDcyLCAyMDcsIDc1LCA3MiwgCisgICAgNzcsIDIxMywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCA3MywgNzgsIDg5LCA2NSwgMTI4LCA3NSwgNzIsIDczLCAKKyAgICA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIDcyLCA3MiwgNzksIDEyOCwgNzUsIDcyLCA3MiwgNjUsIAorICAgIDEyOCwgNzUsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDc1LCA3MiwgNjksIDczLCAxMjgsIDc1LCA3MiwgNjksIDY5LCAxMjgsIAorICAgIDc1LCA3MiwgNjksIDEyOCwgNzUsIDcyLCA2NSwgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCA3NSwgNzIsIDY1LCA4MiwgCisgICAgMTI4LCA3NSwgNzIsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNzgsIDE5OSwgNzUsIDcyLCA2NSwgNzgsIDY4LCAKKyAgICAxOTMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjUsIDc3LCA4NCwgMjAxLCA3NSwgNzIsIDY1LCA3NSwgNjUsIAorICAgIDgzLCA4MywgNzMsIDY1LCAyMDYsIDc1LCA3MiwgNjUsIDczLCAxMjgsIDc1LCA3MiwgNjUsIDcyLCAxMjgsIDc1LCA3MiwgCisgICAgNjUsIDIwMCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgODksIDY3LCA2NSwgODAsIDEyOCwgCisgICAgNzUsIDY5LCA4OSwgNjcsIDY1LCAyMDgsIDc1LCA2OSwgODksIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3NSwgNjksIDg4LCAKKyAgICAxMjgsIDc1LCA2OSwgODUsIDg5LCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIAorICAgIDgwLCAxMjgsIDc1LCA2OSwgODUsIDgzLCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgwLCA4NSwgODEsIDEyOCwgCisgICAgNzUsIDY5LCA4NSwgNzksIDIxMiwgNzUsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY5LCA4NSwgODQsIDc4LCAKKyAgICA2OCwgNjUsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDg0LCA3NywgNjksIAorICAgIDg1LCA3OCwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDgyLCA3MywgMTI4LCA3NSwgNjksIDg0LCA4NCwgMjAxLCA3NSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzUsIDY5LCA4MiwgNjksIDg0LCAxMjgsIDc1LCA2OSwgNzksIDg3LCAxMjgsIDc1LCAKKyAgICA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCAxOTMsIAorICAgIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDE5MywgNzUsIDY5LCA3OCwgNjUsIDg0LCAxMjgsIDc1LCA2OSwgNzgsIDEyOCwgCisgICAgNzUsIDY5LCAyMDYsIDc1LCA2OSwgNzcsIDgwLCA4NSwgNzYsIDEyOCwgNzUsIDY5LCA3NywgODAsIDg1LCAyMDQsIDc1LCAKKyAgICA2OSwgNzcsIDgwLCA3NiwgNzMsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCAyMDEsIDc1LCA2OSwgNzcsIDgwLCA3MiwgODIsIAorICAgIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NywgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NiwgODYsIDczLCAKKyAgICAyMDYsIDc1LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA3NSwgNjksIDcyLCAxMjgsIDc1LCAKKyAgICA2OSwgNzAsIDg1LCA3NiwgNjUsIDEyOCwgNzUsIDY5LCA2OSwgODMsIDg1LCAxMjgsIDc1LCA2OSwgNjksIDgwLCA3MywgNzgsIAorICAgIDE5OSwgNzUsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2NywgNjUsIDc2LCAxMjgsIDc1LCA2NiwgMTI4LCA3NSwgNjUsIAorICAgIDkwLCA2NSwgNzUsIDIwMCwgNzUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4OSwgNjUsIDIwMCwgCisgICAgNzUsIDY1LCA4OCwgMTI4LCA3NSwgNjUsIDg3LCA3MywgMTI4LCA3NSwgNjUsIDg2LCA4OSwgNzUsIDY1LCAxMjgsIDc1LCAKKyAgICA2NSwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgODUsIDEyOCwgNzUsIDY1LCA4NCwgNzksIAorICAgIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCA4MywgODQsIDczLCAxMjgsIDc1LCA2NSwgODQsIDcyLCA2NSwgNzUsIDE5MywgCisgICAgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCA2NSwgODYsIDE5MywgNzUsIDY1LCAKKyAgICA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgNzgsIDE5MywgNzUsIDY1LCA4MywgCisgICAgODIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAyMDYsIDc1LCA2NSwgODMsIDgyLCAKKyAgICA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgMTkzLCA3NSwgNjUsIDgzLCA3NSwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODMsIAorICAgIDc1LCA2NSwgMjA0LCA3NSwgNjUsIDgzLCA3MiwgNzcsIDczLCA4MiwgMjAxLCA3NSwgNjUsIDgyLCA4MywgNzIsIDY1LCA3OCwgCisgICAgNjUsIDEyOCwgNzUsIDY1LCA4MiwgNzksIDgyLCA3MywgNzMsIDEyOCwgNzUsIDY1LCA4MiwgMjA3LCA3NSwgNjUsIDgyLCAKKyAgICA2OSwgMjA2LCA3NSwgNjUsIDgyLCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDgyLCA2NSwgNzgsIDEyOCwgNzUsIAorICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKKyAgICA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgCisgICAgNjksIDc5LCA4NSwgNzgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIAorICAgIDg1LCA3OCwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2NSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDgwLCA4MCwgCisgICAgMTkzLCA3NSwgNjUsIDgwLCA3OSwgMTI4LCA3NSwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgNzYsIDEyOCwgCisgICAgNzUsIDY1LCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA3NSwgNjUsIDc4LCA3MSwgMTI4LCAKKyAgICA3NSwgNjUsIDc4LCAxOTksIDc1LCA2NSwgNzgsIDY1LCA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NywgNTIsIDEyOCwgNzUsIAorICAgIDY1LCA3NywgNTAsIDEyOCwgNzUsIDY1LCA3NywgMTI4LCA3NSwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc1LCA2NSwgCisgICAgNjYsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDc1LCAxMjgsIDc1LCA2NSwgMjAzLCA3NSwgNjUsIDczLCA4NCwgNzIsIDIwMSwgCisgICAgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAyMDEsIDc1LCA2NSwgNzAsIDY1LCAKKyAgICAxMjgsIDc1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCAxOTgsIDc1LCA2NSwgNjgsIDUzLCAxMjgsIDc1LCA2NSwgNjgsIDE4MSwgCisgICAgNzUsIDY1LCA2OCwgNTIsIDEyOCwgNzUsIDY1LCA2OCwgNTEsIDEyOCwgNzUsIDY1LCA2OCwgMTc5LCA3NSwgNjUsIDY4LCAKKyAgICA1MCwgMTI4LCA3NSwgNjUsIDY4LCAxMjgsIDc1LCA2NSwgNjYsIDE5MywgNzUsIDY1LCA2NiwgMTI4LCA3NSwgNjUsIDY1LCAKKyAgICA3MywgMTI4LCA3NSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCA1MCwgMTI4LCAKKyAgICA3NSwgNjUsIDE3OCwgNzUsIDQ4LCA0OCwgNTYsIDEyOCwgNzUsIDQ4LCA0OCwgNTUsIDEyOCwgNzUsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzUsIDQ4LCA0OCwgNTMsIDEyOCwgNzUsIDQ4LCA0OCwgNTIsIDEyOCwgNzUsIDQ4LCA0OCwgNTEsIDEyOCwgNzUsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzUsIDQ4LCA0OCwgNDksIDEyOCwgNzQsIDg3LCA2NSwgMTI4LCA3NCwgODUsIDg1LCAxMjgsIAorICAgIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MywgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgNzQsIDg1LCA3OSwgODQsIDEyOCwgNzQsIDg1LCA3OSwgODAsIAorICAgIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCA3OCwgNjksIDEyOCwgNzQsIDg1LCA3NiwgODksIDEyOCwgNzQsIAorICAgIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIDg1LCA3NiwgMTI4LCA3NCwgODUsIDY4LCA3MSwgNjksIDEyOCwgCisgICAgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCA3NCwgNzksIDg5LCA3OSwgODUsIAorICAgIDIxMSwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgNzksIDg2LCA2OSwgMTI4LCA3NCwgNzksIDIxMiwgNzQsIDc5LCA3OCwgNzEsIAorICAgIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NCwgNzksIDc1LCA2OSwgODIsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDY5LCA2OCwgCisgICAgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgODksIDg4LCAxMjgsIDc0LCA3NCwgCisgICAgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgNzQsIDc0LCA4NSwgODgsIDEyOCwgCisgICAgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDgyLCAxMjgsIDc0LCAKKyAgICA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgNzQsIAorICAgIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDc5LCA4NCwgCisgICAgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgNzMsIDg4LCAxMjgsIDc0LCA3NCwgCisgICAgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3NCwgNzQsIDczLCAKKyAgICA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAxMjgsIDc0LCA3NCwgNzMsIAorICAgIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIDY1LCAxMjgsIDc0LCA3MywgNzYsIAorICAgIDEyOCwgNzQsIDczLCA3MywgMTI4LCA3NCwgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgCisgICAgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MiwgNjksIDcyLCAxMjgsIDc0LCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDc0LCA3MiwgNjUsIDc3LCAxMjgsIDc0LCA3MiwgNjUsIDY1LCAxMjgsIDc0LCA3MiwgNjUsIDEyOCwgNzQsIDY5LCAKKyAgICA4NSwgMTI4LCA3NCwgNjksIDgyLCA4NSwgODMsIDY1LCA3NiwgNjksIDc3LCAxMjgsIDc0LCA2OSwgODIsIDY1LCAyMDYsIAorICAgIDc0LCA2OSwgODIsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDEyOCwgNzQsIDY5LCA3MiwgMTI4LCA3NCwgNjksIDIwMCwgNzQsIAorICAgIDY5LCA3MSwgNzksIDcxLCA2NSwgNzgsIDEyOCwgNzQsIDY5LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA2NSwgNzgsIDgzLCAKKyAgICAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCisgICAgMTI4LCA3NCwgNjUsIDg1LCAxMjgsIDc0LCA2NSwgODIsIDEyOCwgNzQsIDY1LCA4MCwgNjUsIDc4LCA2OSwgODMsIDE5NywgCisgICAgNzQsIDY1LCA4MCwgNjUsIDc4LCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDc0LCA2NSwgNzYsIDc2LCAKKyAgICA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIDY1LCA3MywgMTI4LCA3NCwgNjUsIAorICAgIDcyLCAxMjgsIDc0LCA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2NSwgNjcsIDc1LCA0NSwgNzksIDQ1LCA3NiwgNjUsIDc4LCA4NCwgCisgICAgNjksIDgyLCA3OCwgMTI4LCA3NCwgNjUsIDY3LCAyMDMsIDc0LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCAKKyAgICA2OSwgMTk2LCAyMDIsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIAorICAgIDE5MywgNzMsIDkwLCA3MiwgNjksIDEyOCwgNzMsIDkwLCA2NSwgNzUsIDY1LCA4OSwgMTkzLCA3MywgODksIDY5LCA3NSwgCisgICAgMTI4LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIDczLCA4NSwgMTI4LCA3MywgCisgICAgODQsIDIxMSwgNzMsIDg0LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA4NCwgNjksIDc3LCAxMjgsIDczLCAKKyAgICA4MywgODMsIDcyLCA2NSwgODIsIDEyOCwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIDgzLCA3OSwgMjA2LCA3MywgODMsIAorICAgIDc5LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgODMsIDY5LCA3OCwgNDUsIDczLCA4MywgNjksIDc4LCAxMjgsIDczLCA4MywgCisgICAgNjUsIDc1LCA3MywgMTkzLCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA3OSwgNzgsIAorICAgIDQ1LCA2NywgNzksIDgwLCA4MCwgNjksIDIxMCwgNzMsIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc5LCA4NCwgNzMsIDcwLCA3MywgCisgICAgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA3MywgNzksIDg0LCAKKyAgICAxOTMsIDczLCA3OSwgODIsIDEyOCwgNzMsIDc5LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNzMsIDc4LCA4NiwgNzMsIAorICAgIDgzLCA3MywgNjYsIDc2LCAxOTcsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgNzgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA2OSwgMTk2LCA3MywgNzgsIDg2LCA2OSwgODIsIDgzLCAxOTcsIDczLCA3OCwgODQsIDgyLCA3OSwgNjgsIDg1LCAKKyAgICA2NywgNjksIDgyLCAxMjgsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIAorICAgIDY1LCA2NiwgNzMsIDE5NSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgCisgICAgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIAorICAgIDY3LCA4NCwgNzMsIDc4LCAxOTksIDczLCA3OCwgODQsIDY5LCA4MiwgODIsIDc5LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3MywgCisgICAgNzgsIDg0LCA2OSwgODIsIDgwLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIAorICAgIDc5LCA2NywgNzUsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDczLCA3OCwgCisgICAgODQsIDY5LCA4MiwgNzYsIDY1LCA2NywgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3MywgNzksIDIxMCwgNzMsIDc4LCAKKyAgICA4NCwgNjksIDgyLCA2OSwgODMsIDIxMiwgNzMsIDc4LCA4NCwgNjksIDgyLCA2NywgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIAorICAgIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCAKKyAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgNzYsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAorICAgIDcxLCA4MiwgNjUsIDIwNCwgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCA3MywgNzgsIDgzLCA4NCwgODIsIDg1LCA3NywgCisgICAgNjksIDc4LCA4NCwgNjUsIDIwNCwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgMTI4LCA3MywgNzgsIDgzLCA2OSwgODIsIDg0LCAKKyAgICA3MywgNzksIDIwNiwgNzMsIDc4LCA4MywgNjksIDY3LCA4NCwgMTI4LCA3MywgNzgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIAorICAgIDczLCA3OSwgNzgsIDY1LCAyMDQsIDczLCA3OCwgODAsIDg1LCAyMTIsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgCisgICAgNjksIDEyOCwgNzMsIDc4LCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDgyLCAxMjgsIDczLCA3OCwgNzgsIDY5LCAKKyAgICAyMTAsIDczLCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIDczLCAxMjgsIDczLCAKKyAgICA3OCwgNzIsIDczLCA2NiwgNzMsIDIxMiwgNzMsIDc4LCA3MiwgNjksIDgyLCA2OSwgNzgsIDIxMiwgNzMsIDc4LCA3MSwgODcsIAorICAgIDY1LCA5MCwgMTI4LCA3MywgNzgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDcwLCA3NiwgCisgICAgODUsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA3MywgNzgsIDcwLCAKKyAgICA3MywgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDY4LCA4NSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3OCwgNjgsIAorICAgIDczLCA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzMsIDc4LCA2OCwgCisgICAgNzMsIDY3LCA2NSwgODQsIDc5LCAyMTAsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDczLCA2NSwgMjA2LCAKKyAgICA3MywgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIAorICAgIDc4LCA2NywgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgCisgICAgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIAorICAgIDE5NywgNzMsIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAKKyAgICAxOTksIDczLCA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNjYsIDc5LCAyMTYsIDczLCA3OCwgNjUsIDgwLCAxMjgsIDczLCAKKyAgICA3OCwgNDUsIDY1LCA3NiwgNjUsIDcwLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3NywgODAsIAorICAgIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAKKyAgICAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3OCwgMTI4LCA3MywgNzcsIAorICAgIDczLCA4MywgNjksIDc5LCAyMTEsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCA3MywgNzcsIDczLCA3OCwgMTI4LCA3MywgCisgICAgNzcsIDczLCAyMDYsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCAKKyAgICA4NCwgNzIsIDc5LCA4MiwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIAorICAgIDY4LCA3MywgNjUsIDgyLCA3MSwgNzksIDc4LCAxMjgsIDczLCA3NywgNjUsIDcxLCAxOTcsIDczLCA3NiwgODUsIDg5LCA2NSwgCisgICAgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzYsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDczLCA3NiwgODUsIDg0LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDczLCA3NiwgNzMsIAorICAgIDc3LCA3NywgODUsIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAKKyAgICAyMTMsIDczLCA3NiwgNTAsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCAKKyAgICA3NCwgMTI4LCA3MywgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzEsIDczLCAxMjgsIDczLCA3MSwgMjAxLCAKKyAgICA3MywgNzEsIDcxLCA4NywgODMsIDEyOCwgNzMsIDcwLCA3MywgNzgsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKKyAgICA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDczLCA2OSwgODUsIDc4LCAKKyAgICA3MSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgCisgICAgODUsIDgwLCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCAKKyAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgCisgICAgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIAorICAgIDY3LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgMTk5LCA3MywgNjgsIDc2LCA2OSwgMTI4LCA3MywgNjgsIDczLCA3NywgCisgICAgMTI4LCA3MywgNjgsIDczLCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTcsIDQ4LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU2LCA2OCwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjcsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2OCwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTUsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU1LCA1NCwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA0OSwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDgsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDcwLCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA2OSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDUwLCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTQsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUzLCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA1MywgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUwLCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MCwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNzAsIDU2LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY4LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTYsIDcwLCAKKyAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUzLCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDUxLCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1MSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDY4LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDQ5LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUyLCA2OSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDU2LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1MCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjcsIDcyLCA3OSwgODUsIAorICAgIDEyOCwgNzMsIDY3LCA3MiwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCA3OSwgODMsIDEyOCwgCisgICAgNzMsIDY3LCA3MiwgNjUsIDY4LCA3MywgNzgsIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIDczLCA2NywgNDUsIAorICAgIDg5LCA4MiwgMTI4LCA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgCisgICAgNzMsIDQ4LCA0OSwgNTMsIDEyOCwgNzMsIDQ4LCA0OSwgNTIsIDEyOCwgNzMsIDQ4LCA0OSwgNTEsIDEyOCwgNzMsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ5LCAxMjgsIDczLCA0OCwgNDksIAorICAgIDQ4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgMTI4LCA3MywgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgNzMsIDQ4LCA0OCwgNTYsIDEyOCwgNzMsIDQ4LCA0OCwgNTUsIDEyOCwgNzMsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgNzMsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAxMjgsIDczLCA0OCwgNDgsIDUyLCAxMjgsIDczLCAKKyAgICA0OCwgNDgsIDUxLCAxMjgsIDczLCA0OCwgNDgsIDUwLCAxMjgsIDczLCA0OCwgNDgsIDQ5LCAxMjgsIDczLCA0NSwgODksIAorICAgIDg1LCAxMjgsIDczLCA0NSwgODksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgCisgICAgMTI4LCA3MywgNDUsIDg5LCA2NSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDg5LCAKKyAgICA2NSwgMTI4LCA3MywgNDUsIDc5LCA0NSwgNzMsIDEyOCwgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDY5LCA4NSwgMTI4LCAKKyAgICA3MywgNDUsIDY2LCA2OSwgNjUsIDc3LCAxMjgsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDczLCA0NSwgNjUsIAorICAgIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgOTAsIDgwLCAxMjgsIAorICAgIDcyLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA4NywgNzEsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgOTAsIDg0LCAxMjgsIAorICAgIDcyLCA5MCwgNzEsIDEyOCwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgNjksIDgzLCA3MywgMjExLCA3MiwgODksIDgwLCA3OSwgCisgICAgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzIsIDg5LCA4MCwgCisgICAgNzIsIDY5LCA3OCwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDIwNiwgNzIsIDg4LCA4NywgNzEsIDEyOCwgNzIsIDg4LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODAsIDEyOCwgNzIsIAorICAgIDg4LCA4NSwgNzksIDEyOCwgNzIsIDg4LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA3OSwgCisgICAgODAsIDEyOCwgNzIsIDg4LCA3OSwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIDczLCA4NCwgMTI4LCA3MiwgCisgICAgODgsIDczLCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKKyAgICA4OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCA3MiwgODgsIDczLCAxMjgsIDcyLCA4OCwgNjksIAorICAgIDg4LCAxMjgsIDcyLCA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCA2NSwgODgsIDEyOCwgNzIsIAorICAgIDg4LCA2NSwgODQsIDEyOCwgNzIsIDg4LCA2NSwgODAsIDEyOCwgNzIsIDg4LCA2NSwgMTI4LCA3MiwgODcsIDg1LCAxMjgsIAorICAgIDcyLCA4NywgNjUsIDczLCA4MiwgMTI4LCA3MiwgODYsIDEyOCwgNzIsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcyLCA4NSwgCisgICAgODIsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCAKKyAgICA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCAxOTYsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIAorICAgIDcyLCA4NSwgNzcsIDY1LCAyMDYsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCA4NSwgNzMsIDczLCA4NCwgNzksIDEyOCwgCisgICAgNzIsIDg1LCA2NiwgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCA4NSwgNjUsIDgyLCAKKyAgICA2NSwgNjgsIDY4LCA3OSwgMTI4LCA3MiwgODQsIDgzLCAxMjgsIDcyLCA4NCwgNzQsIDEyOCwgNzIsIDgyLCA4OSwgODYsIAorICAgIDc4LCA3MywgMTkzLCA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODAsIDY1LCAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIAorICAgIDg1LCA4MywgMTk3LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgCisgICAgNzYsIDY1LCA4MywgMjExLCA3MiwgNzksIDg1LCA4MiwgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCAKKyAgICA3NiwgMTI4LCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgzLCA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgODMsIDY5LCAxMjgsIDcyLCA3OSwgODIsIDgzLCAxOTcsIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTQsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTQsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAorICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCAKKyAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgCisgICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTEsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIAorICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKKyAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCisgICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDksIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNDksIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIAorICAgIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCAKKyAgICA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgCisgICAgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgMTkzLCA3MiwgNzksIDc5LCA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgODAsIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgCisgICAgNzIsIDc5LCA3OSwgNzUsIDY5LCAxOTYsIDcyLCA3OSwgNzgsIDY5LCA4OSwgNjYsIDY5LCA2OSwgMTI4LCA3MiwgNzksIDc4LCAKKyAgICA2OSwgMjE3LCA3MiwgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIDczLCA2NywgMTI4LCA3MiwgNzksIDc3LCA3OSwgODQsIAorICAgIDcyLCA2OSwgODQsIDczLCAxOTUsIDcyLCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA3OSwgNzYsIDY4LCA3MywgNzgsIDE5OSwgCisgICAgNzIsIDc5LCA3NiwgNjUsIDc3LCAxMjgsIDcyLCA3OSwgNzYsIDY1LCAyMDUsIDcyLCA3OSwgNzUsIDY1LCAxMjgsIDcyLCAKKyAgICA3OSwgNzMsIDEyOCwgNzIsIDc5LCA2NywgNzIsIDc5LCAxMjgsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDcyLCA3OCwgODUsIAorICAgIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDc5LCA4NCwgCisgICAgMTI4LCA3MiwgNzgsIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCA3MiwgNzgsIDczLCA4NCwgMTI4LCA3MiwgCisgICAgNzgsIDczLCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKKyAgICA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgMTI4LCA3MiwgNzgsIDczLCAxMjgsIDcyLCA3OCwgNjksIAorICAgIDg4LCAxMjgsIDcyLCA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIDc4LCA2NSwgODgsIDEyOCwgNzIsIAorICAgIDc4LCA2NSwgODQsIDEyOCwgNzIsIDc4LCA2NSwgODAsIDEyOCwgNzIsIDc4LCA2NSwgMTI4LCA3MiwgNzcsIDg5LCA4OCwgCisgICAgMTI4LCA3MiwgNzcsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4OSwgODIsIDEyOCwgNzIsIDc3LCA4OSwgODAsIDEyOCwgCisgICAgNzIsIDc3LCA4OSwgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4NCwgMTI4LCA3MiwgNzcsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODIsIDEyOCwgNzIsIDc3LCA4NSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDcyLCA3NywgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgMTI4LCA3MiwgNzcsIDg1LCAxMjgsIAorICAgIDcyLCA3NywgNzksIDg4LCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCA3NywgNzksIDgwLCAxMjgsIDcyLCA3NywgCisgICAgNzksIDEyOCwgNzIsIDc3LCA3MywgODgsIDEyOCwgNzIsIDc3LCA3MywgODQsIDEyOCwgNzIsIDc3LCA3MywgODAsIDEyOCwgCisgICAgNzIsIDc3LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgMTI4LCAKKyAgICA3MiwgNzcsIDczLCAxMjgsIDcyLCA3NywgNjksIDEyOCwgNzIsIDc3LCA2NSwgODgsIDEyOCwgNzIsIDc3LCA2NSwgODQsIAorICAgIDEyOCwgNzIsIDc3LCA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgNzYsIDg5LCA4OCwgMTI4LCA3MiwgNzYsIAorICAgIDg5LCA4NCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDEyOCwgNzIsIDc2LCA4OSwgCisgICAgODAsIDEyOCwgNzIsIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4NCwgMTI4LCA3MiwgCisgICAgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIDc2LCA4NSwgODAsIDEyOCwgNzIsIDc2LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgMTI4LCA3MiwgNzYsIAorICAgIDg1LCAxMjgsIDcyLCA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAxMjgsIDcyLCA3NiwgNzksIDEyOCwgNzIsIAorICAgIDc2LCA3MywgODgsIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCA3MywgODAsIDEyOCwgNzIsIDc2LCA3MywgCisgICAgNjksIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgMTI4LCA3MiwgNzYsIDczLCAKKyAgICAxMjgsIDcyLCA3NiwgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCA3NiwgNjksIDEyOCwgNzIsIDc2LCAKKyAgICA2NSwgODgsIDEyOCwgNzIsIDc2LCA2NSwgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIDEyOCwgNzIsIDc2LCA2NSwgMTI4LCAKKyAgICA3MiwgNzUsIDEyOCwgNzIsIDczLCA5MCwgNjYsIDEyOCwgNzIsIDczLCA4MywgODQsIDc5LCA4MiwgNzMsIDE5NSwgNzIsIAorICAgIDczLCA4MiwgNzMsIDgxLCAxMjgsIDcyLCA3MywgNzEsIDcyLCA0NSwgODMsIDgwLCA2OSwgNjksIDE5NiwgNzIsIDczLCA3MSwgCisgICAgNzIsIDQ1LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDQ1LCAxODUsIDcyLCA3MywgNzEsIDcyLCA0NSwgNzIsIAorICAgIDY5LCA2OSwgNzYsIDY5LCAxOTYsIDcyLCA3MywgNjksIDg4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgzLCA3MywgCisgICAgNzksIDgzLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgMjAwLCA3MiwgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCA3MiwgNzMsIDE5NSwgNzIsIDczLCA2OSwgCisgICAgMTI4LCA3MiwgNzMsIDY4LCA3MywgNzgsIDE5OSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDcyLCA3MywgNjgsIDY5LCAKKyAgICAxMjgsIDcyLCA3MywgNjYsIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA3MiwgNzIsIDg3LCA2NSwgMTI4LCA3MiwgNzIsIAorICAgIDg1LCAxMjgsIDcyLCA3MiwgNzMsIDEyOCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNzIsIDcyLCA2OSwgMTI4LCA3MiwgNzIsIAorICAgIDY1LCA2NSwgMTI4LCA3MiwgNzEsIDEyOCwgNzIsIDY5LCA4OCwgNzMsIDcwLCA3OSwgODIsIDIwNSwgNzIsIDY5LCA4OCwgCisgICAgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNzIsIDY5LCA4OCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDg0LCAKKyAgICA4NSwgMTI4LCA3MiwgNjksIDgyLCA4NSwgMTI4LCA3MiwgNjksIDgyLCA3NywgNzMsIDg0LCA3MywgNjUsIDIwNiwgNzIsIAorICAgIDY5LCA4MiwgNzcsIDczLCA3OSwgNzgsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNjksIDgzLCAxMjgsIDcyLCA2OSwgCisgICAgODIsIDY5LCAxMjgsIDcyLCA2OSwgODIsIDY2LCAxMjgsIDcyLCA2OSwgODIsIDY1LCA2OSwgODUsIDIwNSwgNzIsIDY5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzIsIDY5LCA3OCwgMTk5LCA3MiwgNjksIDc3LCA4MCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIAorICAgIDg0LCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgMjEyLCA3MiwgNjksIDc2LCAyMDUsIDcyLCA2OSwgNzYsIDczLCA2NywgCisgICAgNzksIDgwLCA4NCwgNjksIDgyLCAxMjgsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY5LCAKKyAgICA3MywgODMsIDY5LCA3MywgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgNzYsIAorICAgIDIxNywgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDY5LCA2NSwgCisgICAgODIsIDg0LCA4MywgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzIsIDY5LCAKKyAgICA2NSwgODIsIDg0LCAxMjgsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDgyLCA0NSwgNzgsIDc5LCA0NSwgNjksIAorICAgIDg2LCA3MywgMjA0LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgCisgICAgODMsIDg0LCA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgNjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3MiwgNjksIDY1LCAKKyAgICA2OCwgNzMsIDc4LCA3MSwgMTI4LCA3MiwgNjYsIDY1LCA4MywgNjUsIDQ1LCA2OSwgODMsIDY1LCA4MywgMTkzLCA3MiwgNjYsIAorICAgIDY1LCA4MywgMTkzLCA3MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MiwgNjUsIDg2LCA2OSwgMTI4LCA3MiwgCisgICAgNjUsIDg1LCA4MCwgODQsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzIsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDcyLCAKKyAgICA2NSwgODQsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDY3LCA3MiwgNzMsIDc4LCAxOTksIDcyLCA2NSwgODQsIDY1LCAxOTgsIAorICAgIDcyLCA2NSwgODMsIDY5LCAyMTAsIDcyLCA2NSwgODMsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDIwNiwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCAKKyAgICAxMjgsIDcyLCA2NSwgODIsIDc1LCA3NiwgNjksIDY1LCAyMDYsIDcyLCA2NSwgODIsIDY4LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MiwgNjUsIDgyLCAxOTYsIDcyLCA2NSwgODAsIDgwLCAyMTcsIDcyLCA2NSwgNzgsIDg1LCA3OCwgNzksIDIwNywgCisgICAgNzIsIDY1LCA3OCwgNzEsIDkwLCA3MiwgNzksIDIxMywgNzIsIDY1LCA3OCwgNjgsIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAKKyAgICAyMTEsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDEyOCwgNzIsIAorICAgIDY1LCA3OCwgNjgsIDY2LCA2NSwgNzEsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgNDUsIDY1LCA3NSwgCisgICAgNjUsIDg0LCAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA4MywgODQsIDY5LCAyMTAsIDcyLCAKKyAgICA2NSwgNzcsIDc3LCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NywgNzcsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIDY2LCA4NSwgODIsIAorICAgIDcxLCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NiwgODEsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDc5LCAxMjgsIDcyLCA2NSwgCisgICAgNzYsIDcwLCA0NSwgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDcyLCA2NSwgNzYsIDcwLCAxMjgsIDcyLCA2NSwgNzYsIDY2LCAKKyAgICA2OSwgODIsIDY4LCAxMjgsIDcyLCA2NSwgNzYsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgNzMsIDg0LCA4NSwgCisgICAgMTI4LCA3MiwgNjUsIDczLCA4MiwgNjcsIDg1LCA4NCwgMTI4LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA3MiwgNjUsIDcxLCAKKyAgICA3NiwgNjUsIDIxOCwgNzIsIDY1LCA3MSwgNzYsIDEyOCwgNzIsIDY1LCA3MCwgODUsIDc1LCA3MiwgNjUsIDEyOCwgNzIsIAorICAgIDY1LCA3MCwgODUsIDc1LCA3MiwgMTI4LCA3MiwgNjUsIDY5LCA3MSwgMjA0LCA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgCisgICAgNzIsIDY1LCA2NSwgNzcsIDEyOCwgNzIsIDY1LCAxOTMsIDcyLCA2NSwgNDUsIDcyLCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MiwgNDgsIDQ4LCA1NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzIsIDQ4LCA0OCwgNTMsIDEyOCwgNzIsIDQ4LCA0OCwgNTIsIDEyOCwgNzIsIDQ4LCA0OCwgNTEsIDEyOCwgNzIsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzIsIDQ4LCA0OCwgNDksIDEyOCwgNzIsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgCisgICAgODUsIDEyOCwgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCA3OSwgMTI4LCA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgCisgICAgNzAsIDIxMywgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCA2NSwgODMsIDEyOCwgNzEsIDg5LCA2NSwgNjUsIDEyOCwgCisgICAgNzEsIDg5LCA2NSwgMTI4LCA3MSwgODksIDEyOCwgNzEsIDg3LCA4NSwgMTI4LCA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgCisgICAgNjksIDY5LCAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgCisgICAgODYsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCAKKyAgICA4MiwgNjUsIDc3LCA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA1NSwgMTI4LCA3MSwgODUsIDc4LCA4NSwgCisgICAgMTI4LCA3MSwgODUsIDc4LCAyMTMsIDcxLCA4NSwgMjA1LCA3MSwgODUsIDc2LCAxMjgsIDcxLCA4NSwgNzMsIDg0LCA2NSwgCisgICAgODIsIDEyOCwgNzEsIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgNzEsIDg1LCA2OCwgCisgICAgMTI4LCA3MSwgODUsIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA4MywgNzcsIDY1LCA3OCwgMTI4LCA3MSwgODUsIDY1LCAKKyAgICA4MiwgNjgsIDY5LCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgMTk2LCA3MSwgODUsIAorICAgIDY1LCA4MiwgNjgsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY1LCA3OCwgMjAxLCA3MSwgODUsIDE5MywgNzEsIDg1LCAxNzgsIAorICAgIDcxLCA4NCwgNjksIDIxMCwgNzEsIDgzLCA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIAorICAgIDgyLCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDcxLCA4MiwgNzksIDc4LCA4NCwgCisgICAgNzIsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzEsIDgyLCA3MywgNzgsIDc4LCA3MywgNzgsIDE5OSwgNzEsIDgyLCAKKyAgICA3MywgNzcsIDY1LCA2NywgNzMsIDc4LCAxOTksIDcxLCA4MiwgNjksIDcxLCA3OSwgODIsIDczLCA2NSwgMjA2LCA3MSwgODIsIAorICAgIDY5LCA2OSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgCisgICAgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIAorICAgIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDIxMCwgNzEsIDgyLCA2OSwgNjUsIDIxMiwgNzEsIDgyLCA2NSwgCisgICAgODYsIDY5LCA4OSwgNjUsIDgyLCAxOTYsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIAorICAgIDEyOCwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAKKyAgICAxMjgsIDcxLCA4MiwgNjUsIDg2LCAxOTcsIDcxLCA4MiwgNjUsIDg0LCA2OSwgODIsIDEyOCwgNzEsIDgyLCA2NSwgODMsIAorICAgIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAyMTEsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNjksIDc3LCAxOTcsIDcxLCA4MiwgCisgICAgNjUsIDgwLCA2OSwgODMsIDEyOCwgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDcxLCA4MiwgNjUsIDczLCA3OCwgMTI4LCAKKyAgICA3MSwgODIsIDY1LCA2OCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA4MiwgNjUsIDY3LCA2OSwgMTI4LCA3MSwgODIsIAorICAgIDY1LCA2NywgMTk3LCA3MSwgODAsIDY1LCAxMjgsIDcxLCA3OSwgODIsIDg0LCA3MiwgNzcsIDczLCA3NSwgNzksIDIwNiwgCisgICAgNzEsIDc5LCA4MiwgODQsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4NCwgNjksIDgyLCA3MywgMTI4LCA3MSwgNzksIDgyLCAKKyAgICA3MSwgNzksIDgzLCA4OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIAorICAgIDcxLCA3OSwgODIsIDcxLCA3MywgMTI4LCA3MSwgNzksIDgyLCA2NSwgMTI4LCA3MSwgNzksIDc5LCAxOTYsIDcxLCA3OSwgCisgICAgNzgsIDcxLCAxMjgsIDcxLCA3OSwgNzYsIDY4LCAxMjgsIDcxLCA3OSwgNzUsIDEyOCwgNzEsIDc5LCA3MywgNzgsIDE5OSwgCisgICAgNzEsIDc5LCA2NiwgNzYsIDczLCA3OCwgMTI4LCA3MSwgNzksIDY1LCA3NiwgMTI4LCA3MSwgNzksIDY1LCAyMDQsIDcxLCAKKyAgICA3OSwgNjUsIDEyOCwgNzEsIDc4LCA4OSwgNzMsIDgzLCAxMjgsIDcxLCA3OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAorICAgIDEyOCwgNzEsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgNzYsIDc5LCA4NCwgODQsIDY1LCAyMDQsIDcxLCA3NiwgCisgICAgNzksIDY2LCAxOTcsIDcxLCA3NiwgNzMsIDgzLCA4MywgNjUsIDc4LCA2OCwgMjA3LCA3MSwgNzYsIDY5LCA3MywgNjcsIAorICAgIDIwMCwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDEyOCwgNzEsIDc2LCA2NSwgMTI4LCA3MSwgNzQsIDY5LCAxMjgsIAorICAgIDcxLCA3MywgODgsIDEyOCwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNzMsIDgzLCAyMDAsIAorICAgIDcxLCA3MywgODMsIDY1LCA3NiwgMTI4LCA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3MSwgNzMsIDgyLCA3NiwgCisgICAgMTI4LCA3MSwgNzMsIDgyLCA1MSwgMTI4LCA3MSwgNzMsIDgyLCAxNzksIDcxLCA3MywgODIsIDUwLCAxMjgsIDcxLCA3MywgCisgICAgODIsIDE3OCwgNzEsIDczLCA4MCwgMTI4LCA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA3NywgNjksIDc2LCAKKyAgICAxMjgsIDcxLCA3MywgNzcsIDY5LCAyMDQsIDcxLCA3MywgNzcsIDEyOCwgNzEsIDczLCA3MSwgNjUsIDEyOCwgNzEsIDczLCAKKyAgICA2OSwgODQsIDEyOCwgNzEsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNjYsIDY2LCA3OSwgODUsIDIxMSwgNzEsIAorICAgIDczLCA2NiwgNjUsIDEyOCwgNzEsIDczLCA1MiwgMTI4LCA3MSwgNzMsIDE4MCwgNzEsIDcyLCA5MCwgMTI4LCA3MSwgNzIsIAorICAgIDg3LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgMTkzLCA3MSwgCisgICAgNzIsIDg1LCAxMjgsIDcxLCA3MiwgNzksIDg1LCAxMjgsIDcxLCA3MiwgNzksIDgzLCA4NCwgMTI4LCA3MSwgNzIsIDc5LCAKKyAgICAxMjgsIDcxLCA3MiwgNzMsIDEyOCwgNzEsIDcyLCA3MiwgNjUsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDg4LCAxMjgsIDcxLCAKKyAgICA3MiwgNjksIDg1LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzEsIAorICAgIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDgyLCA2NSwgNjksIDEyOCwgCisgICAgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NCwgMTI4LCAKKyAgICA3MSwgNzIsIDY5LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCAxMjgsIDcxLCA3MiwgMTk3LCA3MSwgNzIsIDY1LCA4OSwgNzgsIAorICAgIDEyOCwgNzEsIDcyLCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA4MCwgMTI4LCA3MSwgNzIsIDY1LCA3OCwgCisgICAgMTI4LCA3MSwgNzIsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgODUsIDEyOCwgNzEsIDcyLCAKKyAgICA2NSwgNzMsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIDczLCAyMDYsIDcxLCA3MiwgNjUsIDY4LCAxMjgsIDcxLCA3MiwgNjUsIAorICAgIDY1LCA3NywgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDczLCAxMjgsIDcxLCA3MSwgCisgICAgODcsIDY5LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDcxLCAKKyAgICA4NywgNjUsIDEyOCwgNzEsIDcxLCA4NSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODQsIDEyOCwgNzEsIDcxLCA4NSwgODIsIAorICAgIDg4LCAxMjgsIDcxLCA3MSwgODUsIDgyLCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgCisgICAgODQsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgODUsIDc5LCAxMjgsIDcxLCA3MSwgNzksIDg4LCAKKyAgICAxMjgsIDcxLCA3MSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDg4LCAxMjgsIDcxLCAKKyAgICA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzEsIAorICAgIDcxLCA3MywgNjksIDEyOCwgNzEsIDcxLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA2OSwgODQsIDEyOCwgNzEsIDcxLCA2OSwgCisgICAgODAsIDEyOCwgNzEsIDcxLCA2NSwgODgsIDEyOCwgNzEsIDcxLCA2NSwgODQsIDEyOCwgNzEsIDcxLCA2NSwgNjUsIDEyOCwgCisgICAgNzEsIDY5LCA4NCwgMTkzLCA3MSwgNjksIDgzLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODUsIAorICAgIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgNzgsIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgMjA2LCA3MSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzEsIDY5LCA4MiwgODMsIDcyLCA2NSwgODksIDczLCA3NywgMTI4LCA3MSwgNjksIDgyLCAKKyAgICA3NywgNjUsIDIwNiwgNzEsIDY5LCA4MiwgNjksIDgzLCA3MiwgMTI4LCA3MSwgNjksIDgyLCA2OSwgODMsIDIwMCwgNzEsIAorICAgIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCAKKyAgICA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3OCwgODQsIDc2LCAxOTcsIDcxLCA2OSwgNzgsIDczLCA4NCwgNzMsIDg2LCA2OSwgCisgICAgMTI4LCA3MSwgNjksIDc4LCA3MywgNzUsIDIwMSwgNzEsIDY5LCA3OCwgNjksIDgyLCA3MywgMTk1LCA3MSwgNjksIDc3LCAKKyAgICA3MywgNzgsIDczLCAxMjgsIDcxLCA2OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDY5LCAyMDUsIAorICAgIDcxLCA2OSwgNjgsIDc5LCA3NiwgNjUsIDEyOCwgNzEsIDY5LCA2OCwgNjksIDEyOCwgNzEsIDY5LCA2NiwgMjA3LCA3MSwgCisgICAgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIDgyLCAxMjgsIDcxLCA2OSwgNjUsIDIxMCwgNzEsIDY4LCA2NSwgNzgsIDEyOCwgCisgICAgNzEsIDY3LCA3MywgNzEsIDEyOCwgNzEsIDY3LCA2NSwgMjA2LCA3MSwgNjYsIDc5LCA3OCwgMTI4LCA3MSwgNjYsIDczLCAKKyAgICA2OSwgMTk3LCA3MSwgNjYsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDY2LCA2OSwgODQsIDEyOCwgNzEsIDY2LCA2NSwgODksIAorICAgIDczLCAxMjgsIDcxLCA2NiwgNjUsIDc1LCA4NSwgODIsIDg1LCA3OCwgNjksIDc4LCAxMjgsIDcxLCA2NiwgMTI4LCA3MSwgCisgICAgNjUsIDg5LCA2NSwgNzgsIDg1LCA3NSwgNzMsIDg0LCA4NCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNzEsIDY1LCA4OSwgMTI4LCA3MSwgNjUsIDg1LCA3OCwgODQsIDc2LCA2OSwgODQsIDEyOCwgNzEsIDY1LCA4NCwgCisgICAgNzIsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzEsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgNzEsIDY1LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA4MywgNzIsIDg1LCA3OCwgNzMsIAorICAgIDEyOCwgNzEsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA2NSwgODIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcxLCA2NSwgCisgICAgODIsIDY4LCA2OSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgNTEsIDEyOCwgNzEsIDY1LCA4MCwgODAsIDY5LCAxOTYsIDcxLCAKKyAgICA2NSwgMjA4LCA3MSwgNjUsIDc4LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIDczLCA2NSwgMTI4LCA3MSwgNjUsIAorICAgIDc4LCA2OCwgMTkzLCA3MSwgNjUsIDc4LCA1MCwgMTI4LCA3MSwgNjUsIDc4LCAxNzgsIDcxLCA2NSwgNzcsIDc3LCA2NSwgCisgICAgMTI4LCA3MSwgNjUsIDc3LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA3NywgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjksIDEyOCwgCisgICAgNzEsIDY1LCA3NywgMTk3LCA3MSwgNjUsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCAKKyAgICA2NSwgNzcsIDY1LCAyMDQsIDcxLCA2NSwgNzEsIDEyOCwgNzEsIDY1LCA3MCwgMTI4LCA3MSwgNjUsIDE5OCwgNzEsIDY1LCAKKyAgICA2OSwgODQsIDg0LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDY4LCA3OSwgNzYsIDEyOCwgNzEsIAorICAgIDY1LCA2OCwgMTI4LCA3MSwgNjUsIDE5NiwgNzEsIDY1LCA2NiwgNjUsIDEyOCwgNzEsIDY1LCA2NiwgMTkzLCA3MSwgNjUsIAorICAgIDY1LCA3MCwgODUsIDEyOCwgNzEsIDY1LCAxNzgsIDcxLCA0OCwgNTMsIDUyLCAxMjgsIDcxLCA0OCwgNTMsIDUxLCAxMjgsIAorICAgIDcxLCA0OCwgNTMsIDUwLCAxMjgsIDcxLCA0OCwgNTMsIDQ5LCAxMjgsIDcxLCA0OCwgNTMsIDQ4LCAxMjgsIDcxLCA0OCwgCisgICAgNTIsIDU3LCAxMjgsIDcxLCA0OCwgNTIsIDU2LCAxMjgsIDcxLCA0OCwgNTIsIDU1LCAxMjgsIDcxLCA0OCwgNTIsIDU0LCAKKyAgICAxMjgsIDcxLCA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MywgMTI4LCA3MSwgNDgsIDUyLCA1MiwgMTI4LCAKKyAgICA3MSwgNDgsIDUyLCA1MSwgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDEyOCwgNzEsIDQ4LCA1MiwgNTAsIDEyOCwgNzEsIAorICAgIDQ4LCA1MiwgNDksIDEyOCwgNzEsIDQ4LCA1MiwgNDgsIDEyOCwgNzEsIDQ4LCA1MSwgNTcsIDEyOCwgNzEsIDQ4LCA1MSwgCisgICAgNTYsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCAKKyAgICA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgMTI4LCA3MSwgNDgsIDUxLCA1MywgMTI4LCA3MSwgNDgsIDUxLCA1MiwgMTI4LCAKKyAgICA3MSwgNDgsIDUxLCA1MSwgMTI4LCA3MSwgNDgsIDUxLCA1MCwgMTI4LCA3MSwgNDgsIDUxLCA0OSwgMTI4LCA3MSwgNDgsIAorICAgIDUxLCA0OCwgMTI4LCA3MSwgNDgsIDUwLCA1NywgMTI4LCA3MSwgNDgsIDUwLCA1NiwgMTI4LCA3MSwgNDgsIDUwLCA1NSwgCisgICAgMTI4LCA3MSwgNDgsIDUwLCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDEyOCwgNzEsIDQ4LCA1MCwgNTMsIDEyOCwgCisgICAgNzEsIDQ4LCA1MCwgNTIsIDEyOCwgNzEsIDQ4LCA1MCwgNTEsIDEyOCwgNzEsIDQ4LCA1MCwgNTAsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MCwgNDksIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCAxMjgsIDcxLCA0OCwgNDksIAorICAgIDU3LCAxMjgsIDcxLCA0OCwgNDksIDU2LCAxMjgsIDcxLCA0OCwgNDksIDU1LCAxMjgsIDcxLCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDcxLCA0OCwgNDksIDUzLCAxMjgsIDcxLCA0OCwgNDksIDUyLCAxMjgsIDcxLCA0OCwgNDksIDUxLCAxMjgsIDcxLCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDcxLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgMTI4LCA3MSwgNDgsIDQ5LCAKKyAgICA0OCwgMTI4LCA3MSwgNDgsIDQ4LCA1NywgMTI4LCA3MSwgNDgsIDQ4LCA1NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjYsIAorICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCA2NSwgCisgICAgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgMTI4LCA3MSwgNDgsIDQ4LCA1MywgMTI4LCA3MSwgNDgsIDQ4LCA1MiwgMTI4LCA3MSwgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA3MSwgNDgsIDQ4LCA1MCwgMTI4LCA3MSwgNDgsIDQ4LCA0OSwgMTI4LCA3MCwgODksIDg4LCAKKyAgICAxMjgsIDcwLCA4OSwgODQsIDEyOCwgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAxMjgsIDcwLCA4NywgNzMsIDEyOCwgCisgICAgNzAsIDg3LCA2OSwgNjksIDEyOCwgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDY1LCA2NSwgMTI4LCA3MCwgODcsIDY1LCAKKyAgICAxMjgsIDcwLCA4NiwgODMsIDUxLCAxMjgsIDcwLCA4NiwgODMsIDUwLCAxMjgsIDcwLCA4NiwgODMsIDQ5LCAxMjgsIDcwLCAKKyAgICA4NSwgODgsIDEyOCwgNzAsIDg1LCA4NCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCA3MCwgODUsIDgzLCAxOTMsIDcwLCAKKyAgICA4NSwgODIsIDg4LCAxMjgsIDcwLCA4NSwgODAsIDEyOCwgNzAsIDg1LCA3OCwgNjksIDgyLCA2NSwgMjA0LCA3MCwgODUsIAorICAgIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MCwgCisgICAgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCA3MCwgODUsIDc0LCA3MywgMTI4LCAKKyAgICA3MCwgODUsIDY5LCA4NCwgMTI4LCA3MCwgODUsIDY5LCAyMDQsIDcwLCA4NSwgNjksIDEyOCwgNzAsIDg0LCA3MiwgNzksIAorICAgIDgyLCAxOTMsIDcwLCA4MywgNzMsIDEyOCwgNzAsIDgyLCA3OSwgODcsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgCisgICAgNzksIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCAKKyAgICA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIAorICAgIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgNzEsIDEyOCwgNzAsIDgyLCA3OSwgMTk5LCA3MCwgODIsIDczLCA4NCwgCisgICAgODUsIDEyOCwgNzAsIDgyLCA3MywgNjksIDgzLCAxMjgsIDcwLCA4MiwgNzMsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDY3LCAKKyAgICA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIAorICAgIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA2OSwgNjksIDEyOCwgNzAsIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgCisgICAgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCA2NSwgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCAKKyAgICA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIAorICAgIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgCisgICAgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCAKKyAgICA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIAorICAgIDc5LCA4NSwgODIsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgCisgICAgNzMsIDc4LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODcsIDY1LCAKKyAgICA4MiwgNjgsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIAorICAgIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgCisgICAgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCAKKyAgICA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIAorICAgIDcwLCA3OSwgNzksIDg0LCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAKKyAgICAxOTcsIDcwLCA3OSwgNzksIDg0LCA2NiwgNjUsIDc2LCA3NiwgMTI4LCA3MCwgNzksIDc5LCA4NCwgMTI4LCA3MCwgNzksIAorICAgIDc5LCA2OCwgMTI4LCA3MCwgNzksIDc5LCAxMjgsIDcwLCA3OSwgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgCisgICAgNzcsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzksIDc2LCA2OCwgNjksIDE5NiwgNzAsIDc5LCA3MSwgCisgICAgNzEsIDg5LCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgMTI4LCA3MCwgNzYsIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA4NCwgCisgICAgNjksIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4NSwgODQsIDY5LCAxMjgsIDcwLCA3NiwgODUsIDgzLCA3MiwgNjksIAorICAgIDE5NiwgNzAsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MCwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgCisgICAgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCAKKyAgICA4MiwgNjUsIDIwNCwgNzAsIDc2LCA3OSwgODAsIDgwLCAyMTcsIDcwLCA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIAorICAgIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgCisgICAgNzAsIDc2LCA2OSwgODgsIDY5LCAxOTYsIDcwLCA3NiwgNjksIDg1LCA4MiwgNDUsIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIAorICAgIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIDcwLCA3NiwgNjUsIDcxLCA4MywgMTI4LCA3MCwgCisgICAgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCAKKyAgICA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIAorICAgIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIAorICAgIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA4NCwgCisgICAgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzMsIDg2LCAKKyAgICAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCAKKyAgICA3MywgODMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MywgNzgsIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIAorICAgIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAKKyAgICAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCAKKyAgICA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIAorICAgIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIAorICAgIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgCisgICAgNzMsIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MCwgNzMsIDc4LCA2NSwgNzgsIDY3LCA3MywgNjUsIDc2LCAxMjgsIDcwLCAKKyAgICA3MywgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzAsIDczLCA3NiwgNzYsIDY5LCAxOTYsIDcwLCA3MywgNzYsIDc2LCAxMjgsIAorICAgIDcwLCA3MywgNzYsIDIwNCwgNzAsIDczLCA3NiwgMTk3LCA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCisgICAgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKKyAgICA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgMTk3LCA3MCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIAorICAgIDczLCA3MCwgODQsIDg5LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAyMTcsIDcwLCA3MywgNzAsIDg0LCA3MiwgODMsIDEyOCwgCisgICAgNzAsIDczLCA3MCwgODQsIDcyLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKKyAgICA2OSwgNjksIDIwNiwgNzAsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzAsIAorICAgIDc2LCAxMjgsIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDY5LCA4NSwgODgsIDEyOCwgNzAsIDY5LCA4NSwgNzAsIDY5LCA4NSwgCisgICAgNjUsIDY5LCA4NCwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAKKyAgICAxMjgsIDcwLCA2OSwgODIsIDgyLCA3MywgMjExLCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIAorICAgIDgyLCA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgCisgICAgNjksIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCAKKyAgICA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIAorICAgIDY5LCA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIAorICAgIDc4LCA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIAorICAgIDY5LCA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgCisgICAgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3MCwgODUsIAorICAgIDIwNCwgNzAsIDY5LCA2NSwgODIsIDEyOCwgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OSwgCisgICAgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCA2NSwgMjE2LCA3MCwgNjUsIDg0LCA3MywgNzEsIDg1LCA2OSwgMTI4LCA3MCwgCisgICAgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCAKKyAgICA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIAorICAgIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCA4MSwgCisgICAgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIDgzLCAKKyAgICA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgNzAsIDY1LCA3NiwgNzYsIAorICAgIDczLCA3OCwgMTk5LCA3MCwgNjUsIDc2LCA3NiwgNjksIDIwNiwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgCisgICAgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCAKKyAgICA2NSwgNjcsIDg0LCA3OSwgODIsIDg5LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIAorICAgIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAKKyAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIAorICAgIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzcsIDY1LCA2OSwgCisgICAgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgCisgICAgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCAKKyAgICA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgCisgICAgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCAKKyAgICA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIAorICAgIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgCisgICAgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCAKKyAgICA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCAKKyAgICA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgCisgICAgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgCisgICAgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCAKKyAgICA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIAorICAgIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIAorICAgIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgCisgICAgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCAKKyAgICA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIAorICAgIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIAorICAgIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAxMjgsIDY5LCA4OSwgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjksIDcxLCA3NiwgCisgICAgNjUsIDgzLCA4MywgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCAKKyAgICA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgODgsIDg0LCA4MiwgNjUsIDg0LCA2OSwgODIsIDgyLCA2OSwgODMsIDg0LCA4MiwgCisgICAgNzMsIDY1LCAyMDQsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCAKKyAgICA3MiwgNzMsIDcxLCAyMDAsIDY5LCA4OCwgODQsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA4NCwgNjksIAorICAgIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgCisgICAgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgNzgsIDIxMiwgNjksIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCAKKyAgICA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgODgsIDczLCA4MywgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgCisgICAgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA4OCwgNjcsIDcyLCA2NSwgNzgsIDcxLCA2OSwgMTI4LCAKKyAgICA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIAorICAgIDg3LCA2OSwgMTI4LCA2OSwgODYsIDY5LCA4MiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgCisgICAgNzEsIDEyOCwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNjUsIDIwNiwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNDUsIDY1LCAKKyAgICA3MCwgODIsIDczLCA2NywgNjUsIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgCisgICAgMjE3LCA2OSwgODUsIDgyLCAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgCisgICAgNDUsIDc5LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCAKKyAgICA0NSwgNjksIDEyOCwgNjksIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA4OCwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIAorICAgIDg0LCA2NSwgMTI4LCA2OSwgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgCisgICAgODIsIDc4LCA3MywgODQsIDg5LCAxMjgsIDY5LCA4NCwgNjYsIDEyOCwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAKKyAgICAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIAorICAgIDY5LCAxOTYsIDY5LCA4MywgNzIsIDY5LCA1MSwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgNjksIDgzLCA3MiwgCisgICAgMTc4LCA2OSwgODMsIDcyLCA0OSwgNTQsIDEyOCwgNjksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2OSwgODMsIDY3LCAKKyAgICAxMjgsIDY5LCA4MywgNjUsIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIAorICAgIDY2LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgCisgICAgODIsIDcxLCAxMjgsIDY5LCA4MiwgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIAorICAgIDIxMiwgNjksIDgxLCA4NSwgNzMsIDY4LCAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKKyAgICAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIAorICAgIDY1LCA3NiwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAKKyAgICAyMDYsIDY5LCA4MCwgNzksIDY3LCA3MiwgMTI4LCA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIAorICAgIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgNjUsIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCAKKyAgICA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCA3NywgNjUsIDEyOCwgNjksIDc5LCA4NCwgMTI4LCA2OSwgNzksIAorICAgIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCA2OSwgNzksIDc2LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIAorICAgIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgCisgICAgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCAKKyAgICA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNDksIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIAorICAgIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgCisgICAgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCAKKyAgICA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgCisgICAgMTI4LCA2OSwgNzgsIDgxLCAxMjgsIDY5LCA3OCwgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgCisgICAgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc4LCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCAKKyAgICA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIAorICAgIDEyOCwgNjksIDc4LCA2OCwgNjksIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgCisgICAgNjksIDgyLCA4MywgMTI4LCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCAKKyAgICA3OSwgODMsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIAorICAgIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgCisgICAgNjUsIDg0LCA3MywgMTk1LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCAKKyAgICA2OCwgNjksIDgyLCA4OSwgMTI4LCA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIAorICAgIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgCisgICAgNjksIDc2LCA4NCwgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDg0LCA3MywgMTk1LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCAKKyAgICA3MywgODMsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIAorICAgIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCAKKyAgICA2OSwgNzgsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgCisgICAgMTI4LCA2OSwgNzYsIDY5LCA3NywgNjksIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIAorICAgIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgCisgICAgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCAKKyAgICA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIAorICAgIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgCisgICAgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCAKKyAgICA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIAorICAgIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAKKyAgICAxMjgsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIAorICAgIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIDY1LCA2NSwgMTI4LCA2OSwgNjksIDcyLCAxMjgsIDY5LCAKKyAgICA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIAorICAgIDY5LCA2OCwgNzMsIDc4LCAxMjgsIDY5LCA2OCwgNjgsIDEyOCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIAorICAgIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIAorICAgIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgCisgICAgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCAKKyAgICA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIAorICAgIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIAorICAgIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgCisgICAgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCAKKyAgICA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCAKKyAgICA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIAorICAgIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCAKKyAgICA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCAKKyAgICA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIAorICAgIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAKKyAgICAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCAKKyAgICA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIAorICAgIDg1LCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIAorICAgIDcyLCA2OSwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgCisgICAgNjksIDEyOCwgNjgsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDY1LCA2NSwgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgCisgICAgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIDY4LCA4OSwgMjA3LCA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIAorICAgIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIDg3LCA2OSwgMTI4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIAorICAgIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgODYsIDY4LCAxMjgsIDY4LCA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgCisgICAgNjksIDgzLCAxMjgsIDY4LCA4NSwgODMsIDc1LCAxMjgsIDY4LCA4NSwgODMsIDcyLCA2OSwgNzgsIDc4LCA2NSwgMTI4LCAKKyAgICA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDg1LCA4MiwgNTAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIAorICAgIDc4LCA2OCwgNzMsIDg1LCAyMTEsIDY4LCA4NSwgNzksIDg4LCAxMjgsIDY4LCA4NSwgNzksIDEyOCwgNjgsIDg1LCA3OCwgCisgICAgNTIsIDEyOCwgNjgsIDg1LCA3OCwgNTEsIDEyOCwgNjgsIDg1LCA3OCwgMTc5LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgCisgICAgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCA2OCwgCisgICAgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODIsIDg1LCA3NywgCisgICAgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCA4MCwgNzYsIDY5LCAKKyAgICA4NCwgMTI4LCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzksIAorICAgIDc3LCA2OSwgNjgsIDY1LCA4MiwgMjE3LCA2OCwgODIsIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3MywgODYsIDE5NywgCisgICAgNjgsIDgyLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA4MiwgNzMsIDIwNCwgNjgsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDY4LCAKKyAgICA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCA4MiwgNjUsIDc3LCAxMjgsIDY4LCA4MiwgNjUsIDIwNSwgNjgsIAorICAgIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgCisgICAgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAKKyAgICAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgCisgICAgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCAKKyAgICA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIAorICAgIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgCisgICAgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgNjYsIDc2LCAKKyAgICA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCA4NCwgODQsIAorICAgIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgCisgICAgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIAorICAgIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCisgICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCAKKyAgICA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIAorICAgIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgCisgICAgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCAKKyAgICA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgMTI4LCA2OCwgNzksIDczLCA4NCwgCisgICAgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIDY4LCA3OSwgNjgsIDY5LCA3NSwgCisgICAgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCAKKyAgICA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCAxOTcsIDY4LCA3OSwgNjUsIAorICAgIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCA3NiwgODUsIDEyOCwgNjgsIDc2LCAKKyAgICA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCA2OCwgNzYsIDcyLCA2NSwgMTI4LCAKKyAgICA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCA2OCwgNzUsIDY1LCA4MiwgMTI4LCAKKyAgICA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIDc0LCA2OSwgODIsIDg2LCAxMjgsIAorICAgIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgMjE3LCA2OCwgNzMsIDg2LCA3OSwgCisgICAgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCAKKyAgICA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIAorICAgIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAKKyAgICAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCAxOTcsIDY4LCA3MywgODYsIAorICAgIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgCisgICAgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCAKKyAgICA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCA4MywgODAsIDY5LCA4MiwgODMsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgNjgsIAorICAgIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgODUsIDc5LCA4NSwgMjExLCA2OCwgCisgICAgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA2OCwgNzMsIDgzLCAKKyAgICA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3NiwgCisgICAgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDgwLCA4NCwgNjksIAorICAgIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2OCwgCisgICAgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIDY2LCA2NSwgMjEyLCAKKyAgICA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIAorICAgIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUwLCAKKyAgICAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgNjgsIDczLCA3NywgNzMsIAorICAgIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIDczLCAxOTMsIDY4LCA3MywgCisgICAgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCAKKyAgICA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIAorICAgIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDY4LCA3MywgCisgICAgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCAKKyAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCA3MSwgNjUsIDc3LCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MCwgCisgICAgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDIxNywgNjgsIDczLCAKKyAgICA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgCisgICAgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCAKKyAgICA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCAyMTEsIAorICAgIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgCisgICAgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCAKKyAgICA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIAorICAgIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCA2OSwgMjEwLCA2OCwgCisgICAgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgMTkzLCAKKyAgICA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDc2LCAxMjgsIAorICAgIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKKyAgICAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIAorICAgIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzksIDEyOCwgNjgsIAorICAgIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3MiwgCisgICAgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY5LCAKKyAgICAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDgyLCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgCisgICAgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAKKyAgICAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCA2OCwgNjksIDg5LCAKKyAgICA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIDg4LCA3MywgNjUsIAorICAgIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgNjksIDc4LCA4NCwgCisgICAgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCA3MywgNzEsIDc4LCAKKyAgICAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDY5LCAKKyAgICA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MiwgNjksIAorICAgIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgODQsIDczLCAKKyAgICA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIAorICAgIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIDY5LCA3OCwgCisgICAgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgNzgsIDY1LCAKKyAgICA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCA2OCwgNjksIAorICAgIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCAKKyAgICAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIAorICAgIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCA3MywgCisgICAgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAogICAgIDE5NywgNjgsIDY5LCA3NSwgNjUsIDEyOCwgNjgsIDY5LCA3NSwgMTI4LCA2OCwgNjksIDczLCAxMjgsIDY4LCA2OSwgNzIsIAogICAgIDczLCAxMjgsIDY4LCA2OSwgNzEsIDgyLCA2OSwgMTk3LCA2OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgCiAgICAgMTI4LCA2OCwgNjksIDcwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCA3OCwgNjksIDgzLCAyMTEsIDY4LCA2OSwgNjksIDgyLCAKQEAgLTQ1NDcsOTYgKzQ1NTAsOTYgQEAKICAgICA3MywgNzksIDIwNiwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDY1LCA3NiwgODQsIDY1LCAxMjgsIAogICAgIDY1LCA3NiwgODAsIDcyLCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA3MiwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgCiAgICAgNzgsIDY1LCAxMjgsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNjUsIDc2LCA4MCwgNjUsIAotICAgIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCA3NiwgNzYsIDczLCA2NSwgCi0gICAgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIDY1LCA3NiwgNzUsIDY1LCAKLSAgICA3NiwgNzMsIDQ1LCA1MCwgMTI4LCA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCAxMjgsIDY1LCA3NiwgNzMsIDcxLCA3OCwgNjksIAotICAgIDE5NiwgNjUsIDc2LCA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCA3OCwgMTI4LCA2NSwgNzYsIDczLCA2OSwgCi0gICAgMjA2LCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIDcwLCA2NSwgMTI4LCA2NSwgNzYsIDY5LCA4NSwgMjEyLCA2NSwgCi0gICAgNzYsIDY5LCA4MiwgODQsIDEyOCwgNjUsIDc2LCA2OSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgNjksIDc3LCA2NiwgNzMsIDY3LCAKLSAgICAxMjgsIDY1LCA3NiwgNjksIDcwLCAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgNjksIDEyOCwgNjUsIDc2LCA2NSwgODksIAotICAgIDcyLCAxOTcsIDY1LCA3NiwgNjUsIDgyLCAyMDUsIDY1LCA3NiwgNjUsIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDQ1LCA3NiwgCi0gICAgNjUsIDc1LCA4NSwgNzgsIDY1LCAxMjgsIDY1LCA3NSwgODQsIDczLCA2OSwgODMsIDY5LCA3NiwgODMsIDc1LCA2NSwgNjYsIAotICAgIDEyOCwgNjUsIDc1LCA4MywgNjUsIDEyOCwgNjUsIDc1LCA3MiwgNzcsIDczLCA3NywgNzMsIDE5NSwgNjUsIDc1LCA2NiwgCi0gICAgNjUsIDIxMCwgNjUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3NSwgNjUsIDgyLCAxOTMsIDY1LCA3MywgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgODYsIDczLCA3NiwgNzMsIDIwMywgNjUsIDczLCA4NCwgNzksIDIwNiwgNjUsIAotICAgIDczLCA4MiwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDY1LCA3MywgNzgsIDIxMywgNjUsIDczLCA3OCwgNzgsIDEyOCwgCi0gICAgNjUsIDczLCA3NiwgNzcsIDEyOCwgNjUsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIDcyLCA4NiwgODUsIDgzLCAKLSAgICAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgNzIsIDY1LCA3OCwgMTk5LCAKLSAgICA2NSwgNzIsIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCA3MSwgODUsIDc4LCA3MSwgCi0gICAgMTI4LCA2NSwgNzEsIDc5LCA3MSwgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNjUsIDcwLCA4NCwgNjksIDIxMCwgNjUsIDcwLCA4MywgNjUsIDY1LCA4MSwgMTI4LCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAKLSAgICAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDY5LCA2OCwgMTI4LCA2NSwgNzAsIAotICAgIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCA3MCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2OSwgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODksIDEyOCwgNjUsIDY5LCA4MywgNjcsIDg1LCA3NiwgNjUsIDgwLCAKLSAgICA3MywgODUsIDgzLCAxMjgsIDY1LCA2OSwgODMsIDY3LCAxMjgsIDY1LCA2OSwgODMsIDEyOCwgNjUsIDY5LCA4MiwgNzMsIAotICAgIDY1LCAyMDQsIDY1LCA2OSwgODIsIDEyOCwgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgCi0gICAgNjUsIDY5LCA3NiwgMTI4LCA2NSwgNjksIDc1LCAxMjgsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCA2NSwgNjksIDcxLCAKLSAgICAxMjgsIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDY5LCAxMjgsIDY1LCA2OSwgNjgsIAotICAgIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNjgsIDEyOCwgNjUsIDY5LCA2NiwgMTI4LCA2NSwgCi0gICAgNjgsIDg2LCA2NSwgNzgsIDg0LCA2NSwgNzEsIDY5LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCAKLSAgICA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OCwgNjksIDE5OSwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgODMsIDY5LCAxOTYsIAotICAgIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDIxMSwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgNjUsIDIwMywgCi0gICAgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgNjksIAotICAgIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgODQsIDE5NywgCi0gICAgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIDE5NywgNjUsIDY3LCAKLSAgICA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgNjksIDY4LCA3MSwgCi0gICAgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDY3LCAKLSAgICA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA4MCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgNDUsIAotICAgIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAxMjgsIDY1LCA2NywgCi0gICAgNjcsIDY5LCA3OCwgMjEyLCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIDgzLCA3NywgNjUsIAotICAgIDIwNCwgNjUsIDY2LCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgNjUsIDgzLCA3MywgCi0gICAgNjUsIDIwNiwgNjUsIDY2LCA2NiwgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2NiwgNjUsIDcwLCAKLSAgICA3MywgNzYsIDczLCAxMjgsIDY1LCA2NiwgMTc4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjUsIAotICAgIDg5LCAxMjgsIDY1LCA2NSwgODcsIDEyOCwgNjUsIDY1LCA3OSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIDY1LCA2NSwgNjYsIAotICAgIDY1LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OSwgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCAKLSAgICA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIAotICAgIDUwLCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUxLCAxMjgsIDY1LCA2NSwgCi0gICAgNDgsIDUwLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ4LCAxMjgsIDY1LCAKLSAgICA2NSwgNDgsIDQ5LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU1LCAxMjgsIAotICAgIDY1LCA2NSwgNDgsIDQ5LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUyLCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDksIAotICAgIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NSwgMTI4LCAKLSAgICA2NSwgNjUsIDQ4LCA0OCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MywgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCAKLSAgICA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNDksIDEyOCwgNjUsIDQ4LCA1NSwgNDgsIDEyOCwgNjUsIDQ4LCA1NCwgNTcsIAotICAgIDEyOCwgNjUsIDQ4LCA1NCwgNTYsIDEyOCwgNjUsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIDEyOCwgNjUsIAotICAgIDQ4LCA1NCwgNTMsIDEyOCwgNjUsIDQ4LCA1NCwgNTIsIDEyOCwgNjUsIDQ4LCA1NCwgNTEsIDEyOCwgNjUsIDQ4LCA1NCwgCi0gICAgNTAsIDEyOCwgNjUsIDQ4LCA1NCwgNDksIDEyOCwgNjUsIDQ4LCA1NCwgNDgsIDEyOCwgNjUsIDQ4LCA1MywgNTcsIDEyOCwgCi0gICAgNjUsIDQ4LCA1MywgNTYsIDEyOCwgNjUsIDQ4LCA1MywgNTUsIDEyOCwgNjUsIDQ4LCA1MywgNTQsIDEyOCwgNjUsIDQ4LCAKLSAgICA1MywgNTMsIDEyOCwgNjUsIDQ4LCA1MywgNTIsIDEyOCwgNjUsIDQ4LCA1MywgNTEsIDEyOCwgNjUsIDQ4LCA1MywgNTAsIAotICAgIDEyOCwgNjUsIDQ4LCA1MywgNDksIDEyOCwgNjUsIDQ4LCA1MywgNDgsIDEyOCwgNjUsIDQ4LCA1MiwgNTcsIDEyOCwgNjUsIAotICAgIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIDQ4LCA1MiwgNTUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIDQ4LCA1MiwgCi0gICAgNTMsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAKLSAgICA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIAotICAgIDEyOCwgNjUsIDQ4LCA1MiwgNDksIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCAxMjgsIAotICAgIDY1LCA0OCwgNTEsIDU3LCAxMjgsIDY1LCA0OCwgNTEsIDU2LCAxMjgsIDY1LCA0OCwgNTEsIDU1LCAxMjgsIDY1LCA0OCwgCi0gICAgNTEsIDU0LCAxMjgsIDY1LCA0OCwgNTEsIDUzLCAxMjgsIDY1LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA0OCwgNTEsIDUxLCAKLSAgICAxMjgsIDY1LCA0OCwgNTEsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTIsIAotICAgIDY1LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgCi0gICAgNTMsIDY1LCAxMjgsIDY1LCA0NSwgNjksIDg1LCAxMjgsIDQ1LCA4NSwgMjA1LCA0NSwgODAsIDcyLCA4MiwgODUsIDEyOCwgCi0gICAgNDUsIDc1LCA3MiwgODksIDg1LCAxOTYsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNDUsIDY4LCA5MCwgODUsIAotICAgIDE5NiwgNDUsIDY3LCA3MiwgNjUsIDIxMCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIAorICAgIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzcsIDEyOCwgNjUsIDc2LCA3NiwgNzksIDEyOCwgNjUsIAorICAgIDc2LCA3NiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NiwgNzYsIDIwMSwgNjUsIDc2LCA3NiwgNjUsIDIwMCwgCisgICAgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgNDUsIDUwLCAxMjgsIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDEyOCwgNjUsIDc2LCAKKyAgICA3MywgNzEsIDc4LCA2OSwgMTk2LCA2NSwgNzYsIDczLCA3MCwgODUsIDEyOCwgNjUsIDc2LCA3MywgNjksIDc4LCAxMjgsIAorICAgIDY1LCA3NiwgNzMsIDY5LCAyMDYsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgNzAsIDY1LCAxMjgsIDY1LCA3NiwgCisgICAgNjksIDg1LCAyMTIsIDY1LCA3NiwgNjksIDgyLCA4NCwgMTI4LCA2NSwgNzYsIDY5LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCAKKyAgICA2OSwgNzcsIDY2LCA3MywgNjcsIDEyOCwgNjUsIDc2LCA2OSwgNzAsIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCA2OSwgCisgICAgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDE5NywgNjUsIDc2LCA2NSwgODIsIDIwNSwgNjUsIDc2LCA2NSwgODAsIDcyLCAKKyAgICAxMjgsIDY1LCA3NiwgNDUsIDc2LCA2NSwgNzUsIDg1LCA3OCwgNjUsIDEyOCwgNjUsIDc1LCA4NCwgNzMsIDY5LCA4MywgNjksIAorICAgIDc2LCA4MywgNzUsIDY1LCA2NiwgMTI4LCA2NSwgNzUsIDgzLCA2NSwgMTI4LCA2NSwgNzUsIDcyLCA3NywgNzMsIDc3LCA3MywgCisgICAgMTk1LCA2NSwgNzUsIDY2LCA2NSwgMjEwLCA2NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc1LCA2NSwgODIsIDE5MywgCisgICAgNjUsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDczLCA4NiwgNzMsIDc2LCA3MywgMjAzLCA2NSwgNzMsIDg0LCAKKyAgICA3OSwgMjA2LCA2NSwgNzMsIDgyLCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgNjUsIDczLCA3OCwgMjEzLCA2NSwgNzMsIAorICAgIDc4LCA3OCwgMTI4LCA2NSwgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgCisgICAgNzIsIDg2LCA4NSwgODMsIDEyOCwgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCAKKyAgICA3MiwgNjUsIDc4LCAxOTksIDY1LCA3MiwgNjUsIDcxLCA3MSwgNjUsIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIAorICAgIDcxLCA4NSwgNzgsIDcxLCAxMjgsIDY1LCA3MSwgNzksIDcxLCAyMDEsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3MSwgNjUsIDczLCAKKyAgICA3OCwgMTI4LCA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzAsIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgODIsIAorICAgIDczLCA2NywgNjUsIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAKKyAgICAxMjgsIDY1LCA3MCwgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgNjUsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA4OSwgMTI4LCA2NSwgNjksIDgzLCA2NywgCisgICAgODUsIDc2LCA2NSwgODAsIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgNjcsIDEyOCwgNjUsIDY5LCA4MywgMTI4LCAKKyAgICA2NSwgNjksIDgyLCA3MywgNjUsIDIwNCwgNjUsIDY5LCA4MiwgMTI4LCA2NSwgNjksIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIAorICAgIDc2LCA2NSwgMTI4LCA2NSwgNjksIDc2LCAxMjgsIDY1LCA2OSwgNzUsIDEyOCwgNjUsIDY5LCA3MSwgNjksIDY1LCAyMDYsIAorICAgIDY1LCA2OSwgNzEsIDEyOCwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgNjksIDEyOCwgCisgICAgNjUsIDY5LCA2OCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIDY5LCA2OCwgMTI4LCA2NSwgNjksIDY2LCAKKyAgICAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgODQsIDY1LCA3MSwgNjksIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIAorICAgIDEyOCwgNjUsIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCA2OSwgMTk5LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgCisgICAgNjksIDE5NiwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgMjExLCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDY4LCAKKyAgICA2NSwgMjAzLCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIAorICAgIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NSwgNjcsIDg1LCAKKyAgICA4NCwgMTk3LCA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCA3NiwgMjE3LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgCisgICAgMTk3LCA2NSwgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDczLCAxOTUsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCAKKyAgICA2OSwgNjgsIDcxLCA2OSwgMTI4LCA2NSwgNjcsIDY3LCA4NSwgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDY1LCA2NywgNjcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDY3LCA2NywgNjksIDgwLCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgCisgICAgNzgsIDg0LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIAorICAgIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCAyMTIsIDY1LCA2NywgNjUsIDY4LCA2OSwgNzcsIDIxNywgNjUsIDY2LCA4OSwgCisgICAgODMsIDc3LCA2NSwgMjA0LCA2NSwgNjYsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA2NiwgNzUsIDcyLCAKKyAgICA2NSwgODMsIDczLCA2NSwgMjA2LCA2NSwgNjYsIDY2LCA4MiwgNjksIDg2LCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIAorICAgIDY2LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY2LCAxNzgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDY1LCA2NSwgODksIDEyOCwgNjUsIDY1LCA4NywgMTI4LCA2NSwgNjUsIDc5LCAxMjgsIDY1LCA2NSwgNzQsIDEyOCwgCisgICAgNjUsIDY1LCA2NiwgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNTAsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNTEsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTcsIDEyOCwgNjUsIAorICAgIDY1LCA0OCwgNTAsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTQsIDEyOCwgCisgICAgNjUsIDY1LCA0OCwgNTAsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTEsIAorICAgIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MywgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA0OSwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MCwgMTI4LCA2NSwgCisgICAgNjUsIDQ4LCA0OSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNDksIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA2NSwgNjUsIDQ4LCA0OCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIAorICAgIDY1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDgsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTEsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA0OSwgMTI4LCA2NSwgNDgsIDU1LCA0OCwgMTI4LCA2NSwgNDgsIAorICAgIDU0LCA1NywgMTI4LCA2NSwgNDgsIDU0LCA1NiwgMTI4LCA2NSwgNDgsIDU0LCA1NSwgMTI4LCA2NSwgNDgsIDU0LCA1NCwgCisgICAgMTI4LCA2NSwgNDgsIDU0LCA1MywgMTI4LCA2NSwgNDgsIDU0LCA1MiwgMTI4LCA2NSwgNDgsIDU0LCA1MSwgMTI4LCA2NSwgCisgICAgNDgsIDU0LCA1MCwgMTI4LCA2NSwgNDgsIDU0LCA0OSwgMTI4LCA2NSwgNDgsIDU0LCA0OCwgMTI4LCA2NSwgNDgsIDUzLCAKKyAgICA1NywgMTI4LCA2NSwgNDgsIDUzLCA1NiwgMTI4LCA2NSwgNDgsIDUzLCA1NSwgMTI4LCA2NSwgNDgsIDUzLCA1NCwgMTI4LCAKKyAgICA2NSwgNDgsIDUzLCA1MywgMTI4LCA2NSwgNDgsIDUzLCA1MiwgMTI4LCA2NSwgNDgsIDUzLCA1MSwgMTI4LCA2NSwgNDgsIAorICAgIDUzLCA1MCwgMTI4LCA2NSwgNDgsIDUzLCA0OSwgMTI4LCA2NSwgNDgsIDUzLCA0OCwgMTI4LCA2NSwgNDgsIDUyLCA1NywgCisgICAgMTI4LCA2NSwgNDgsIDUyLCA1NiwgMTI4LCA2NSwgNDgsIDUyLCA1NSwgMTI4LCA2NSwgNDgsIDUyLCA1NCwgMTI4LCA2NSwgCisgICAgNDgsIDUyLCA1MywgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTMsIDEyOCwgNjUsIDQ4LCA1MiwgNTIsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MiwgNTEsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAxMjgsIDY1LCA0OCwgNTIsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDUyLCA1MCwgMTI4LCA2NSwgNDgsIDUyLCA0OSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgCisgICAgNDgsIDEyOCwgNjUsIDQ4LCA1MSwgNTcsIDEyOCwgNjUsIDQ4LCA1MSwgNTYsIDEyOCwgNjUsIDQ4LCA1MSwgNTUsIDEyOCwgCisgICAgNjUsIDQ4LCA1MSwgNTQsIDEyOCwgNjUsIDQ4LCA1MSwgNTMsIDEyOCwgNjUsIDQ4LCA1MSwgNTIsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MSwgNTEsIDEyOCwgNjUsIDQ4LCA1MSwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDQ5LCA1MiwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA2NSwgCisgICAgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNjUsIDQ1LCA2OSwgODUsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCAKKyAgICA4NSwgMTI4LCA0NSwgNzUsIDcyLCA4OSwgODUsIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIAorICAgIDkwLCA4NSwgMTk2LCA0NSwgNjcsIDcyLCA2NSwgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGxleGljb25fb2Zmc2V0W10gPSB7Ci0gICAgMCwgMCwgNiwgMTAsIDE4LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ0LCA1MCwgNjIsIDcwLCA4MCwgOTMsIDEwMiwgMTA4LCAKKyAgICAwLCAwLCA2LCAxMCwgMTgsIDIzLCAyNywgMzQsIDM5LCA0MSwgNDcsIDUwLCA2MiwgNzAsIDgwLCA5MywgMTAyLCAxMDgsIAogICAgIDExMywgMTIxLCAxMzAsIDEzNSwgMTQwLCAxNDMsIDE0NywgMTUzLCAxNTgsIDE2MywgMTcxLCAxNzgsIDE4NiwgMTkxLCAKICAgICAxOTQsIDIwMCwgMjA4LCAyMTUsIDIyNSwgMjMwLCAyMzcsIDI0NiwgMjQ5LCAyNTQsIDI1NywgMjYzLCAyNjcsIDI3MiwgCiAgICAgMjgxLCAyODgsIDI5NSwgMzAxLCAzMTAsIDMxNSwgMzIxLCAzMjcsIDMzNSwgMTQ0LCAzNDEsIDM0OSwgMzUwLCAzNTgsIAotICAgIDM2MSwgMzY3LCAzNjksIDM3NSwgMzgyLCAzODQsIDM5MSwgMzk1LCA0MDMsIDQxMCwgNDE1LCA0MTcsIDQyMiwgNDI5LCAKLSAgICA0MzEsIDI5OSwgNDM3LCA0MzksIDQ0NCwgNDQ5LCA0NTIsIDQ1NywgNDYzLCA0NzAsIDQ3OSwgNDg5LCA0OTQsIDQ5OCwgCisgICAgMzYxLCAzNjcsIDM2OSwgMzc1LCAzODIsIDM4NCwgMzkxLCAzOTUsIDQwMywgNDEwLCA0MTIsIDQxNywgNDIyLCA0MjcsIAorICAgIDQzNCwgNDM2LCAyOTksIDQ0MiwgNDQ1LCA0NDcsIDQ1MiwgNDU3LCA0NjMsIDQ3MCwgNDc5LCA0ODksIDQ5NCwgNDk4LCAKICAgICA1MDUsIDUxOCwgNTIyLCA1MzEsIDUzOCwgNTQ1LCA1NDgsIDU1NCwgNTU4LCA1NjIsIDU3MiwgNTgwLCA1ODgsIDU5NiwgCi0gICAgNjA1LCA2MTMsIDYxOCwgNjE5LCA2MjMsIDYzMSwgNjM4LCA2NDgsIDY1OSwgNjYzLCA2NjYsIDY3MCwgNjczLCAzNDgsIAotICAgIDY3OCwgNjg3LCA2OTEsIDY5NywgNzAzLCA3MDUsIDcwOCwgNzExLCA3MTQsIDcxOCwgNzIyLCA3MzEsIDczOSwgNzQ0LCAKKyAgICA2MDUsIDYxMywgNjE4LCA2MTksIDYyMywgNjMxLCA2MzgsIDY0OCwgNjUyLCA2NjMsIDY2NywgNjcwLCA2NzMsIDY3OCwgCisgICAgMzQ4LCA2ODIsIDY5MSwgNjk3LCA3MDMsIDcwNSwgNzA4LCA3MTEsIDcxNCwgNzE4LCA3MjIsIDczMSwgNzM5LCA3NDQsIAogICAgIDc0NywgNzUxLCA3NTcsIDc2NCwgNzcxLCA3NzYsIDc4NSwgNzk0LCA4MDEsIDgwNSwgODE4LCA4MjcsIDgzNSwgODQxLCAKICAgICA1NTcsIDg1MCwgODYwLCA4NjcsIDg3MywgODc5LCA4ODYsIDg5NCwgODk4LCA3NDksIDkwNiwgOTE1LCA1MDMsIDkyMywgCiAgICAgOTI4LCA5MzQsIDE3LCA5NDMsIDk0OCwgOTUxLCA5NTUsIDk1OSwgOTY2LCA5NjksIDk3NiwgOTgwLCA5ODgsIDk5MiwgCi0gICAgMTAwMCwgMTAwNCwgMTAwNywgMTAxNCwgMTAyMSwgMTkyLCAxMDI0LCAxMDI5LCAxMDM5LCAxMDQ4LCAxMDU1LCAxMDYxLCAKLSAgICAxMDY5LCAxMDcyLCAxMDc3LCAxMDgzLCAxMDkxLCAxMDk3LCAxMTAyLCAxMTA1LCAxMTA4LCAxMTEsIDExMTMsIDExMTcsIAotICAgIDExMjMsIDExMjksIDExMzIsIDExMzgsIDExNDIsIDExNDcsIDExNTMsIDExNTgsIDExNjgsIDExNzIsIDExNzUsIDExNzgsIAorICAgIDEwMDAsIDEwMDQsIDEwMDcsIDEwMTQsIDEwMjEsIDE5MiwgMTAyNCwgMTAyOSwgMTAzOSwgMTA0OCwgMTA1NSwgMTA2MCwgCisgICAgMTA2NiwgMTA3MiwgMTA4MCwgMTA4MywgMTA4OCwgMTA5NCwgMTEwMiwgMTEwNywgMTExMCwgMTExMywgMTExLCAxMTE4LCAKKyAgICAxMTIyLCAxMTI4LCAxMTM0LCAxMTM3LCAxMTQzLCAxMTQ3LCAxMTUyLCAxMTU4LCAxMTY4LCAxMTcyLCAxMTc1LCAxMTc4LCAKICAgICAxMTg3LCAxMTkxLCAxMTk0LCAxMTk5LCAxMjA0LCAxMjEwLCAxMjE1LCAxMjIwLCAxMjI1LCAxMjI5LCAxMjM0LCAxMjQwLCAKICAgICAxMjQ1LCAxMjUwLCAxMjU0LCAxMjYwLCAxMjY1LCAxMjcwLCAxMjc1LCAxMjc5LCAxMjg0LCAxMjg5LCAxMjk0LCAxMzAwLCAKICAgICAxMzA2LCAxMzEyLCAxMzE3LCAxMzIxLCAxMzI2LCAxMzMxLCAxMzM2LCAxMzQwLCAxMzQ1LCAxMzUwLCAxMzU1LCAxMzYwLCAKQEAgLTQ2NTAsNyArNDY1Myw3IEBACiAgICAgMTY2NSwgMTY3MCwgMTY3NSwgMTY3OSwgMTY4MiwgMTY4NywgMTY5MiwgMTY5NywgMTcwMiwgMTcwOCwgMTcxMywgMTcxNywgCiAgICAgMTMyMiwgMTcyMCwgMTcyNSwgMTczMCwgMTMyNywgMTczNCwgMTczOCwgMTc0NSwgMTMzMiwgMTc1MiwgMTMzNywgMTc1NiwgCiAgICAgMTc1OCwgMTc2MywgMTc2OSwgMTM0MSwgMTc3NCwgMTc4MywgMTM0NiwgMTc4OCwgMTc5NCwgMTM1MSwgMTc5OSwgMTgwNCwgCi0gICAgMTgwNywgMTgxMiwgMTgxNiwgMTgyMCwgMTgyNCwgMTgyNywgMTgzMSwgMTM1NiwgMTM2MSwgMTE1NiwgMTgzNiwgMTg0MiwgCisgICAgMTgwNywgMTgxMiwgMTgxNiwgMTgyMCwgMTgyNCwgMTgyNywgMTgzMSwgMTM1NiwgMTM2MSwgMTA1OCwgMTgzNiwgMTg0MiwgCiAgICAgMTg0OCwgMTg1NCwgMTg2MCwgMTg2NiwgMTg3MiwgMTg3OCwgMTg4NCwgMTg4OSwgMTg5NSwgMTkwMSwgMTkwNywgMTkxMywgCiAgICAgMTkxOSwgMTkyNSwgMTkzMSwgMTkzNywgMTk0MywgMTk0OCwgMTk1MywgMTk1OCwgMTk2MywgMTk2OCwgMTk3MywgMTk3OCwgCiAgICAgMTk4MywgMTk4OCwgMTk5MywgMTk5OSwgMjAwNCwgMjAxMCwgMjAxNSwgMjAyMSwgMjAyNywgMjAzMiwgMjAzOCwgMjA0NCwgCkBAIC00Njc3LDcgKzQ2ODAsNyBAQAogICAgIDMyNDEsIDMyNDUsIDMyNDgsIDMyNjEsIDMyNjUsIDMyNjksIDMyNzMsIDMyNzcsIDMyODEsIDMyODQsIDMyODgsIDMyOTIsIAogICAgIDMyOTcsIDMzMDEsIDMzMDYsIDMzMTEsIDMzMTYsIDMzMjAsIDMzMjMsIDMzMjYsIDMzMzIsIDMzMzYsIDMzNDAsIDMzNDMsIAogICAgIDMzNDcsIDMzNTEsIDMzNTQsIDMzNjAsIDMzNjUsIDMzNzAsIDMzNzYsIDMzODEsIDMzODYsIDMzOTIsIDMzOTgsIDM0MDMsIAotICAgIDM0MDgsIDM0MTMsIDExMTUsIDU0NywgMzQxOCwgMzQyMSwgMzQyNiwgMzQzMCwgMzQzMywgMzQzNywgMzQ0MiwgMzQ0NywgCisgICAgMzQwOCwgMzQxMywgMTEyMCwgNTQ3LCAzNDE4LCAzNDIxLCAzNDI2LCAzNDMwLCAzNDMzLCAzNDM3LCAzNDQyLCAzNDQ3LCAKICAgICAzNDUxLCAzNDU2LCAzNDYwLCAzNDY1LCAzNDY5LCAzNDczLCAzNDc5LCAzNDg1LCAzNDg4LCAzNDkxLCAzNDk3LCAzNTA0LCAKICAgICAzNTExLCAzNTE3LCAzNTI0LCAzNTI5LCAzNTMzLCAzNTQwLCAzNTQ3LCAzNTUyLCAzNTU2LCAzNTY2LCAzNTcwLCAzNTc0LCAKICAgICAzNTc5LCAzNTg0LCAzNTk0LCAyMTA3LCAzNTk5LCAzNjAzLCAzNjA2LCAzNjEyLCAzNjE3LCAzNjIzLCAzNjI5LCAzNjM0LCAKQEAgLTQ3MjYsNyArNDcyOSw3IEBACiAgICAgNjY4MywgNjY5OCwgNjcxMywgNjcyOCwgNjc0MywgNjc1OCwgNjc3MywgNjc4OCwgNjgwMywgNjgxOCwgNjgzMywgNjg0OCwgCiAgICAgNjg2MywgNjg3OCwgNjg5MywgNjkwOCwgNjkyMywgNjkzOCwgNjk1MywgNjk2OCwgNjk4MywgNjk5OCwgNzAxMywgNzAyOCwgCiAgICAgNzAzNywgNzA0NiwgNzA1MSwgNzA1NywgNzA2NywgNzA3MSwgNzA3NiwgNzA4MSwgNzA4OSwgNzA5MywgNzA5NiwgNzEwMCwgCi0gICAgMjk3NSwgNzEwMywgNzEwOCwgMjk4LCA0NDIsIDcxMTQsIDcxMjIsIDcxMjYsIDcxMzAsIDcxMzMsIDcxMzcsIDcxNDMsIAorICAgIDI5NzUsIDcxMDMsIDcxMDgsIDI5OCwgNDI1LCA3MTE0LCA3MTIyLCA3MTI2LCA3MTMwLCA3MTMzLCA3MTM3LCA3MTQzLCAKICAgICA3MTQ3LCA3MTU1LCA3MTYxLCA3MTY2LCA3MTczLCA3MTgwLCA3MTg2LCA3MTkxLCA3MTk4LCA3MjA0LCA3MjEyLCA3MjE2LCAKICAgICA3MjIxLCA3MjMzLCA3MjQ0LCA3MjUxLCA3MjU1LCA3MjU5LCA3MjY1LCAzMjMzLCA3MjY5LCA3Mjc1LCA3MjgwLCA3Mjg1LCAKICAgICA3MjkwLCA3Mjk2LCA3MzAxLCA3MzA2LCA3MzExLCA3MzE2LCA3MzIyLCA3MzI3LCA3MzMyLCA3MzM4LCA3MzQzLCA3MzQ5LCAKQEAgLTQ3NTUsNzI1MiArNDc1OCw3MjUwIEBACiAgICAgODY0NSwgODY0OSwgODY1MywgODY1OCwgODY2NSwgODY3NiwgODY4NCwgODY5NCwgODcwMCwgODcwNywgODcxMiwgODcxNiwgCiAgICAgODcyNywgODc0MCwgODc1MSwgODc2NCwgODc3NSwgODc4NywgODc5OSwgODgxMSwgODgyNCwgODgzNywgODg0NCwgODg1MCwgCiAgICAgODg2NCwgODg3MSwgODg3NywgODg4MSwgODg4NiwgODg5MCwgODg5NywgODkwNSwgODkwOSwgODkxNSwgODkxOSwgODkyNSwgCi0gICAgODkzNSwgODkzOSwgODk0NCwgODk0OSwgODk1NiwgODk2MiwgODk3MiwgNzkwOSwgODk3OCwgODk4MiwgODk4OSwgNzY4LCAKLSAgICA4OTkzLCA4OTk3LCA5MDAyLCA5MDA3LCA5MDEyLCA5MDE2LCA5MDIyLCA5MDMwLCA5MDM2LCA5MDQwLCA5MDQ2LCA5MDU2LCAKLSAgICA5MDYwLCA5MDY2LCA5MDcxLCA5MDc1LCA5MDgxLCA5MDg3LCAyMTYxLCA5MDkyLCA5MDk0LCA5MDk5LCA5MTA3LCA5MTE2LCAKLSAgICA5MTIwLCA5MTI2LCA5MTMxLCA5MTM2LCA5MTQxLCA5MTQ2LCA5MTUyLCA5MTU3LCA5MTYyLCA0MDA2LCA5MTY3LCA5MTcyLCAKLSAgICA5MTc2LCA5MTgyLCA5MTg3LCA5MTkzLCA5MTk4LCA5MjAzLCA5MjA5LCA5MjE0LCA5MTIxLCA5MjIwLCA5MjI0LCA5MjMxLCAKLSAgICA5MjM3LCA5MjQyLCA5MjQ2LCA2MTgzLCA5MjUxLCA5MjYwLCA5MjY1LCA5MjcwLCA4MjE4LCA4MjI1LCA5Mjc1LCAyODUzLCAKLSAgICA5Mjc5LCA5Mjg0LCA5Mjg5LCA5MTMyLCA5MjkzLCA5Mjk4LCA5MTM3LCA5MTQyLCA5MzAzLCA5MzEwLCA5MzE3LCA5MzIzLCAKLSAgICA5MzI5LCA5MzM1LCA5MzQwLCA5MzQ1LCA5MzUwLCA5MTQ3LCA5MTUzLCA5MzU2LCA5MzYyLCA5MzY3LCA5Mzc1LCA5MTU4LCAKLSAgICA5MzgwLCA5OTAsIDkzODMsIDkzOTEsIDkzOTcsIDk0MDMsIDk0MTIsIDk0MjAsIDk0MjUsIDk0MzEsIDk0MzksIDk0NDYsIAotICAgIDk0NjEsIDk0NzgsIDk0OTcsIDk1MDYsIDk1MTQsIDk1MjksIDk1NDAsIDk1NTAsIDk1NjAsIDk1NjgsIDk1NzQsIDk1ODYsIAotICAgIDk1OTUsIDk2MDMsIDk2MTAsIDk2MTcsIDk2MjMsIDk2MjgsIDk2MzYsIDk2NDYsIDk2NTMsIDk2NjMsIDk2NzMsIDk2ODMsIAotICAgIDk2OTEsIDk2OTgsIDk3MDcsIDk3MTcsIDk3MzEsIDk3NDYsIDk3NTUsIDk3NjMsIDk3NjgsIDk3NzIsIDk3ODEsIDk3ODcsIAotICAgIDk3OTIsIDk4MDIsIDk4MTIsIDk4MjIsIDk4MjcsIDk4MzEsIDk4NDAsIDk4NDUsIDk4NTUsIDk4NjYsIDk4NzksIDk4ODcsIAotICAgIDk5MDAsIDk5MTIsIDk5MjAsIDk5MjUsIDk5MjksIDk5MzUsIDk5NDAsIDk5NDgsIDk5NTYsIDk5NjMsIDk5NjgsIDk5NzYsIAotICAgIDk5ODIsIDk5ODUsIDk5ODksIDk5OTUsIDEwMDAzLCAxMDAwOCwgMTAwMTIsIDEwMDIwLCAxMDAyOSwgMTAwMzcsIDEwMDQzLCAKLSAgICAxMDA0NywgMTAwNTQsIDEwMDY1LCAxMDA2OSwgMTAwNzIsIDEwMDc4LCA5MTYzLCAxMDA4MywgMTAwODksIDEwMDk2LCAKLSAgICAxMDEwMiwgMTAxMDcsIDEwMTE0LCAxMDEyMSwgMTAxMjgsIDEwMTM1LCAxMDE0MiwgMTAxNDksIDEwMTU2LCAxMDE2MywgCi0gICAgMTAxNjgsIDk0NzQsIDEwMTczLCAxMDE3OSwgMTAxODYsIDEwMTkzLCAxMDE5OCwgMTAyMDUsIDEwMjE0LCAxMDIxOCwgCi0gICAgMTAyMzAsIDgyNTYsIDEwMjM0LCAxMDIzNywgMTAyNDEsIDEwMjQ1LCAxMDI0OSwgMTAyNTMsIDEwMjU5LCAxMDI2NSwgCi0gICAgMTAyNzAsIDEwMjc2LCAxMDI4MSwgMTAyODYsIDEwMjkyLCAxMDI5NywgMTAzMDIsIDg5NTIsIDEwMzA3LCAxMDMxMSwgCi0gICAgMTAzMTUsIDEwMzE5LCAxMDMyNCwgMTAzMjksIDEwMzM3LCAxMDM0MywgMTAzNDcsIDEwMzUxLCAxMDM1OCwgMTAzNjMsIAotICAgIDEwMzcxLCAxMDM3NiwgMTAzODAsIDEwMzgzLCAxMDM4OSwgMTAzOTYsIDEwNDAwLCAxMDQwMywgMTA0MDgsIDEwNDEyLCAKLSAgICA0MDQ1LCAxMDQxOCwgMTA0MjcsIDM2LCAxMDQzNSwgMTA0NDEsIDEwNDQ2LCA4OTY3LCAxMDQ1MSwgMTA0NTYsIDEwNDYwLCAKLSAgICAxMDQ2MywgMTA0NzgsIDEwNDk3LCAxMDUwOSwgMTA1MjIsIDEwNTM1LCAxMDU0OCwgMTA1NjIsIDEwNTc1LCAxMDU5MCwgCi0gICAgMTA1OTcsIDkxNjgsIDEwNjAzLCAxMDYxNywgMTA2MjIsIDEwNjI4LCAxMDYzMywgMTA2NDEsIDEwNjQ2LCA4MDQwLCAKLSAgICAxMDY1MSwgMTA2NTQsIDEwNjYxLCAxMDY2NiwgMTA2NzAsIDI4NTgsIDk5OCwgMTA2NzYsIDEwNjgwLCAxMDY4NiwgMTA2OTIsIAotICAgIDEwNjk3LCAxMDcwMywgMTA3MDgsIDkxNzcsIDEwNzE0LCAxMDcyMCwgMTA3MjUsIDEwNzMwLCAxMDczOCwgMTA3NDQsIAotICAgIDEwNzU3LCAxMDc2NSwgMTA3NzIsIDkxODMsIDEwNzc4LCAxMDc4NiwgMTA3OTQsIDEwODAxLCAxMDgxNCwgMTA4MjYsIAotICAgIDEwODM2LCAxMDg0NCwgMTA4NTEsIDEwODU4LCAxMDg2NywgMTA4NzYsIDEwODg0LCAxMDg5MSwgMTA4OTYsIDEwOTAyLCAKLSAgICA5MTg4LCAxMDkwNywgMTA5MTMsIDkxOTQsIDEwOTE4LCAxMDkyMSwgMTA5MjgsIDEwOTM0LCAxMDk0NywgODY2OSwgMTA5NTgsIAotICAgIDEwOTY0LCAxMDk3MywgMTA5ODEsIDEwOTg4LCAxMDk5NCwgMTEwMDAsIDExMDA1LCAxMTAwOSwgMTEwMTQsIDEwNDcwLCAKLSAgICAxMTAyMCwgOTE5OSwgMTEwMjcsIDExMDMyLCAxMTAzOSwgMTEwNDUsIDExMDUxLCAxMTA1NiwgMTEwNjQsIDExMDcyLCAKLSAgICAxMTA3OSwgMTEwODMsIDExMDk3LCAxMTEwNywgMTExMTIsIDExMTE2LCAxMTEyNywgMTExMzMsIDExMTM4LCAxMTE0MywgCi0gICAgOTIwNCwgOTIxMCwgMTExNDcsIDExMTUwLCAxMTE1NSwgMTExNjcsIDExMTc0LCAxMTE3OSwgMTExODMsIDExMTg4LCAKLSAgICAxMTE5MiwgMTExOTksIDExMjA1LCA5MjE1LCA5MTIyLCAxMTIxMiwgMjg2MywgOCwgMTEyMTksIDExMjI0LCAxMTIyOCwgCi0gICAgMTEyMzQsIDExMjQyLCAxMTI1MiwgMTEyNTcsIDExMjYyLCAxMTI2OSwgMTEyNzYsIDExMjgwLCAxMTI5MSwgMTEzMDEsIAotICAgIDExMzEwLCAxMTMyMiwgMTEzMjcsIDExMzMxLCAxMTMzOSwgMTEzNTMsIDExMzU3LCAxMTM2MCwgMTEzNjgsIDExMzc1LCAKLSAgICAxMTM4MywgMTEzODcsIDExMzk4LCAxMTQwMiwgMTE0MDksIDExNDE0LCAxMTQxOCwgMTE0MjQsIDExNDI5LCAxMTQzMywgCi0gICAgMTE0MzksIDExNDQ0LCAxMTQ1NSwgMTE0NTksIDExNDYyLCAxMTQ2OCwgMTE0NzMsIDExNDc5LCAxMTQ4NSwgMTE0OTIsIAotICAgIDExNTAzLCAxMTUxMywgMTE1MjMsIDExNTMyLCAxMTUzOSwgMTE1NDgsIDkyMjUsIDkyMzIsIDkyMzgsIDkyNDMsIDExNTU0LCAKLSAgICAxMTU2MCwgOTI0NywgMTE1NjYsIDExNTY5LCAxMTU3NiwgMTE1ODEsIDExNTk2LCAxMTYxMiwgMTE2MjcsIDExNjM1LCAKLSAgICAxMTY0MSwgMTE2NDYsIDgzOCwgNDIwLCAxMTY1MSwgMTE2NTksIDExNjY2LCAxMTY3MiwgMTE2NzcsIDExNjgyLCA5MjUyLCAKLSAgICAxMTY4NCwgMTE2ODgsIDExNjkzLCAxMTY5NywgMTE3MDcsIDExNzEyLCAxMTcxNiwgMTE3MjUsIDExNzI5LCAxMTczMiwgCi0gICAgOTI2MSwgMTE3MzksIDExNzQyLCAxMTc1MCwgMTE3NTcsIDExNzY1LCAxMTc2OSwgMTE3NzYsIDExNzg1LCAxMTc4OCwgCi0gICAgMTE3OTIsIDExNzk2LCAxMTgwMiwgMTE4MDYsIDExODEwLCAxMTgxNCwgMTE4MjAsIDExODMwLCAxMTgzNCwgMTE4NDIsIAotICAgIDExODQ2LCAxMTg1MywgMTE4NTcsIDExODYyLCAxMTg2NiwgMTE4NzMsIDExODc5LCAxMTg4NywgMTE4OTMsIDExODk4LCAKLSAgICAxMTkwOCwgMTE5MTMsIDExOTE4LCAxMTkyMiwgMTE5MzAsIDM5MDUsIDExOTM4LCAxMTk0MywgOTI2NiwgMTE5NDcsIAotICAgIDExOTUxLCAxMTk1NCwgMTE5NjIsIDExOTY5LCAxMTk3MywgNTk5MSwgMTE5NzcsIDExOTgyLCAxMTk4NiwgMTE5OTcsIAotICAgIDEyMDA3LCAxMjAxMiwgMTIwMTgsIDEyMDIyLCAxMjAyNSwgMTIwMzMsIDEyMDM4LCAxMjA0MywgMTIwNTAsIDEyMDU1LCAKLSAgICA5MjcxLCAxMjA2MCwgMTIwNjQsIDEyMDcxLCAxNzIyLCA2MTQ1LCAxMjA3NiwgMTIwODEsIDEyMDg2LCAxMjA5MSwgMTIwOTcsIAotICAgIDEyMTAyLCAxMjEwOCwgMTIxMTMsIDEyMTE4LCAxMjEyMywgMTIxMjgsIDEyMTMzLCAxMjEzOCwgMTIxNDMsIDEyMTQ4LCAKLSAgICAxMjE1MywgMTIxNTgsIDEyMTYzLCAxMjE2OCwgMTIxNzMsIDEyMTc4LCAxMjE4MywgMTIxODgsIDEyMTk0LCAxMjE5OSwgCi0gICAgMTIyMDQsIDEyMjA5LCAxMjIxNCwgMTIyMTksIDEyMjI1LCAxMjIzMCwgMTIyMzUsIDEyMjQxLCAxMjI0NiwgMTIyNTIsIAotICAgIDEyMjU3LCAxMjI2MywgMTIyNjgsIDEyMjczLCAxMjI3OCwgMTIyODMsIDEyMjg5LCAxMjI5NCwgMTIyOTksIDEyMzA0LCAKLSAgICA3MzcsIDEzOSwgMTIzMTIsIDEyMzE2LCAxMjMyMSwgMTIzMjYsIDEyMzMwLCAxMjMzNCwgMTIzMzgsIDEyMzQzLCAxMjM0NywgCi0gICAgMTIzNTIsIDEyMzU2LCAxMjM1OSwgMTIzNjMsIDEyMzY3LCAxMjM3MywgMTIzNzgsIDEyMzg4LCAxMjM5NCwgMTI0MDIsIAotICAgIDEyNDA2LCAxMjQxMCwgMTI0MTcsIDEyNDI1LCAxMjQzNCwgMTI0NDUsIDEyNDUyLCAxMjQ1OSwgMTI0NjMsIDEyNDcyLCAKLSAgICAxMjQ4MSwgMTI0ODksIDEyNDk4LCAxMjUwNywgMTI1MTYsIDEyNTI1LCAxMjUzNSwgMTI1NDUsIDEyNTU1LCAxMjU2NSwgCi0gICAgMTI1NzUsIDEyNTg0LCAxMjU5NCwgMTI2MDQsIDEyNjE0LCAxMjYyNCwgMTI2MzQsIDEyNjQ0LCAxMjY1NCwgMTI2NjMsIAotICAgIDEyNjczLCAxMjY4MywgMTI2OTMsIDEyNzAzLCAxMjcxMywgMTI3MjMsIDEyNzMyLCAxMjc0MiwgMTI3NTIsIDEyNzYyLCAKLSAgICAxMjc3MiwgMTI3ODIsIDEyNzkyLCAxMjgwMiwgMTI4MTIsIDEyODIyLCAxMjgzMSwgMTI4NDEsIDEyODUxLCAxMjg2MSwgCi0gICAgMTI4NzEsIDEyODgxLCAxMjg5MSwgMTI5MDEsIDEyOTExLCAxMjkyMSwgMTI5MzEsIDEyOTQwLCAxMjU2LCAxMjk0NiwgCi0gICAgMTI5NDksIDEyOTUzLCAxMjk1OCwgMTI5NjUsIDEyOTcxLCAxMjk3NiwgMTI5ODAsIDEyOTg1LCAxMjk5NCwgMTMwMDIsIAotICAgIDEzMDA3LCAxMzAxMSwgMTMwMTUsIDEzMDIxLCAxMzAyNiwgMTMwMzIsIDkyODAsIDEzMDM3LCAxMzA0MiwgMTMwNTEsIAotICAgIDkyODUsIDEzMDU2LCAxMzA1OSwgMTMwNjUsIDEzMDczLCA5MjkwLCAxMzA4MCwgMTMwODQsIDEzMDg4LCAxMzA5MiwgCi0gICAgMTMxMDIsIDEzMTA4LCAxMzExNCwgMTMxMTksIDEzMTI4LCAxMzEzNiwgMTMxNDMsIDEzMTUwLCAxMzE1NSwgMTMxNjIsIAotICAgIDEzMTY3LCAxMzE3MSwgMTMxNzQsIDEzMTg1LCAxMzE5NSwgMTMyMDQsIDEzMjEyLCAxMzIyMywgMTMyMzUsIDEzMjQ1LCAKLSAgICAxMzI1MCwgMTMyNTQsIDEzMjU5LCAxMzI2NCwgMTMyNjgsIDEzMjc0LCAxMzI4MiwgMTMyODksIDEzMzAwLCAxMzMwNSwgCi0gICAgMTMzMTUsIDEzMzE5LCAxMzMyMiwgMTMzMjksIDEzMzM5LCAxMzM0OCwgMTMzNTUsIDEzMzU5LCAxMzM2NiwgMTMzNzIsIAotICAgIDEzMzc3LCAxMzM4MiwgMTMzODYsIDEzMzk1LCAxMzQwMCwgMTM0MDYsIDEzNDEwLCAxMzQxNSwgMTM0MTksIDEzNDI4LCAKLSAgICAxMzQzNiwgMTM0NDQsIDEzNDUxLCAxMzQ1OSwgMTM0NzEsIDEzNDgyLCAxMzQ5MiwgMTM0OTksIDEzNTA1LCAxMzUxNCwgCi0gICAgMTM1MjUsIDEzNTM0LCAxMzU0NiwgMTM1NTgsIDEzNTcwLCAxMzU4MCwgMTM1ODksIDEzNTk4LCAxMzYwNiwgMTM2MTMsIAotICAgIDEzNjIyLCAxMzYzMCwgMTM2MzQsIDEzNjQwLCAxMzY0NiwgMTM2NTEsIDc3NTMsIDEzNjU1LCAxMzY1NywgMTM2NjEsIAotICAgIDEzNjY2LCAxMzY3MiwgMTM2ODEsIDEzNjg1LCAxMzY5MywgMTM3MDAsIDEzNzA5LCAxMzcxOCwgMTM3MjcsIDEzNzM2LCAKLSAgICAxMzc0NSwgMTM3NTQsIDEzNzYzLCAxMzc3MiwgMTM3ODIsIDEzNzkyLCAxMzgwMSwgMTM4MDcsIDEzODE0LCAxMzgyMSwgCi0gICAgMTM4MjcsIDEzODQxLCAxMzg0OCwgMTM4NTYsIDEzODY1LCAxMzg3MSwgMTM4ODAsIDEzODg5LCAxMzkwMCwgMTM5MTAsIAotICAgIDEzOTE4LCAxMzkyNSwgMTM5MzMsIDEzOTQyLCAxMzk1NSwgMTM5NjMsIDEzOTcwLCAxMzk4MywgMTM5ODksIDEzOTk1LCAKLSAgICAxNDAwNSwgMTQwMTQsIDE0MDIzLCAxNDAyOCwgMTQwMzIsIDE0MDM4LCAxNDA0NCwgMTQwNTEsIDg5NjYsIDE0MDU2LCAKLSAgICAxNDA2MSwgMTQwNjgsIDE0MDczLCAxMjM2OSwgMTQwNzgsIDE0MDg2LCAxNDA5MiwgMTQwOTcsIDE0MTA1LCAxNDExMywgCi0gICAgMTQxMjAsIDE0MTI4LCAxNDEzNCwgMTQxNDIsIDE0MTUwLCAxNDE1NiwgMTQxNjEsIDE0MTY3LCAxNDE3NCwgMTQxODAsIAotICAgIDE0MTg1LCAxNDE4OSwgMTQyMDAsIDE0MjA4LCAxNDIxNCwgMTQyMTksIDE0MjI4LCAxNDIzNCwgMTQyMzksIDE0MjQ4LCAKLSAgICAxNDI2MiwgMzg1MywgMTQyNjYsIDE0MjcxLCAxNDI3NiwgMTQyODIsIDE0Mjg3LCAxNDI5MiwgMTQyOTYsIDE0MzAxLCAKLSAgICAxNDMwNiwgMTQzMTEsIDc3NTIsIDE0MzE2LCAxNDMyMSwgMTQzMjYsIDE0MzMxLCAxNDMzNiwgMTQzNDAsIDE0MzQ1LCAKLSAgICAxNDM1MCwgMTQzNTUsIDE0MzYwLCAxNDM2NiwgMTQzNzIsIDE0Mzc3LCAxNDM4MSwgMTQzODYsIDE0MzkxLCAxNDM5NiwgCi0gICAgOTI5NCwgMTQ0MDEsIDE0NDA2LCAxNDQxMSwgMTQ0MTYsIDE0NDIxLCAxNDQzOCwgMTQ0NTYsIDE0NDY4LCAxNDQ4MSwgCi0gICAgMTQ0OTgsIDE0NTE0LCAxNDUzMSwgMTQ1NDEsIDE0NTYwLCAxNDU3MSwgMTQ1ODIsIDE0NTkzLCAxNDYwNCwgMTQ2MTYsIAotICAgIDE0NjI3LCAxNDYzOCwgMTQ2NTUsIDE0NjY2LCAxNDY3NywgMTQ2ODIsIDkyOTksIDE0Njg3LCAxNDY5MSwgMjM4MSwgCi0gICAgMTQ2OTUsIDE0Njk4LCAxNDcwNCwgMTQ3MTIsIDE0NzIwLCAxNDcyNSwgMTQ3MzMsIDE0NzQxLCAxNDc0OCwgMTQ3NTMsIAotICAgIDE0NzU5LCAxNDc2NiwgMTQ3NzQsIDE0NzgxLCAxNDc5MywgMTQ4MDEsIDE0ODA2LCAxMTU5MCwgMTQ4MTIsIDE0ODIxLCAKLSAgICAxNDgzMCwgMTQ4MzgsIDE0ODQ1LCAxNDg1MSwgMTQ4NTksIDE0ODY2LCAxNDg3MiwgMTQ4NzksIDE0ODg1LCAxNDg5NCwgCi0gICAgMTQ5MDIsIDE0OTEyLCAxNDkxOSwgMTQ5MjUsIDE0OTMzLCAxNDkzOSwgMTQ5NDcsIDE0OTU0LCAxNDk2NywgMTQ5NzQsIAotICAgIDE0OTgzLCAxNDk5MiwgMTUwMDEsIDE1MDA5LCAxNTAxOSwgMTUwMjYsIDE1MDMxLCAzNTYwLCAxNTAzOCwgMTUwNDMsIAotICAgIDEzNzIsIDE1MDQ3LCAxNDMxNywgMTUwNTEsIDE1MDU3LCAxNTA2MSwgMTUwNjksIDE1MDgxLCAxNTA4NiwgMTUwOTMsIAotICAgIDE1MDk5LCAxNTEwNCwgMTUxMTEsIDE0MzIyLCAxNTExNSwgMTUxMTksIDE1MTIzLCAxNDMyNywgMTUxMjcsIDE0MzMyLCAKLSAgICAxNTEzMSwgMTUxMzgsIDE1MTQzLCAxNTE0NywgMTUxNTQsIDE1MTU4LCAxNTE2NiwgMTUxNzMsIDE1MTc3LCAxNTE4NCwgCi0gICAgMTUyMDEsIDE1MjEwLCAxNTIxNCwgMTUyMTcsIDE1MjI1LCAxNTIzMSwgMTUyMzYsIDM2MzgsIDE1MjQwLCAxNTI0MiwgCi0gICAgMTUyNTAsIDE1MjU3LCAxNTI2NywgMTUyNzksIDE1Mjg0LCAxNTI5MCwgMTUyOTUsIDE1Mjk5LCAxNTMwNSwgMTUzMTAsIAotICAgIDE1MzE2LCAxNTMxOSwgMTUzMjYsIDE1MzM0LCAxNTM0MSwgMTUzNDcsIDE1MzUzLCAxNTM1OCwgMTUzNjUsIDE1MzcxLCAKLSAgICAxNTM3NiwgMTUzODMsIDE1Mzg3LCAxNTM5MywgMTUzOTcsIDE1NDA0LCAxNTQxMCwgMTU0MTYsIDE1NDI0LCAxNTQzMCwgCi0gICAgMTU0MzUsIDE1NDQxLCAxNTQ0OSwgMTU0NTcsIDE1NDYzLCAxNTQ2OSwgMTU0NzQsIDE1NDgxLCAxNTQ4NiwgMTU0OTAsIAotICAgIDE1NDk2LCAxNTUwMSwgMTU1MDgsIDE1NTEzLCAxNTUxOSwgMTU1MjIsIDE1NTI4LCAxNTUzNCwgMTU1MzcsIDE1NTQxLCAKLSAgICAxNTU1MywgMTU1NTksIDE1NTY0LCAxNTU3MSwgMTU1NzcsIDE1NTgzLCAxNTU5NCwgMTU2MDQsIDE1NjEzLCAxNTYyMSwgCi0gICAgMTU2MjgsIDE1NjM5LCAxNTY0OSwgMTU2NTksIDE1NjY3LCAxNTY3MCwgMTQzNDYsIDE1Njc1LCAxNTY4MCwgMTQzNTEsIAotICAgIDE0NDg2LCAxNTY4OCwgMTU3MDEsIDE1NzE2LCAxNTcyNywgMTQ1MDMsIDE1NzQ1LCAxNTc1OCwgMTU3NzEsIDE1NzgyLCAKLSAgICAxMDQ4NSwgMTU3OTMsIDE1ODA2LCAxNTgyNSwgMTU4MzYsIDE1ODQ3LCAxNTg1OCwgMjY0OSwgMTU4NzEsIDE1ODc1LCAKLSAgICAxNTg4MywgMTU4OTgsIDE1OTEzLCAxNTkyNCwgMTU5MzEsIDE1OTM3LCAxNTk0NSwgMTU5NDksIDE1OTU1LCAxNTk1OCwgCi0gICAgMTU5NjgsIDE1OTc2LCAxNTk4MywgMTU5OTEsIDE2MDAxLCAxNjAwNiwgMTYwMTMsIDE2MDE4LCAxNjAyNSwgMTYwMzYsIAotICAgIDE2MDQ2LCAxNjA1MiwgMTYwNTcsIDE2MDYyLCAxNDM1NiwgMTYwNjYsIDE2MDcyLCAxNjA3OCwgMTYwODMsIDE2MDg4LCAKLSAgICAxNjA5MywgMTYwOTcsIDE0MzYxLCAxNDM2NywgMTYxMDEsIDE0MzczLCAxNjEwNiwgMTYxMTQsIDE2MTIzLCAxNjEzMCwgCi0gICAgOTE0MywgMTYxMzQsIDE2MTM2LCAxNjE0MSwgMTYxNDYsIDE2MTUyLCAxNjE1NywgMTYxNjIsIDE2MTY3LCAxNjE3MiwgCi0gICAgMTYxNzYsIDE2MTgyLCAxNjE4OCwgMTYxOTMsIDE2MTk5LCAxNjIwNCwgMTYyMDksIDE2MjE1LCAxNjIyMCwgMTYyMjUsIAotICAgIDE2MjMwLCAxNjIzNSwgMTYyNDEsIDE2MjQ2LCAxNjI1MSwgMTYyNTcsIDE2MjYzLCAxNjI2OCwgMTYyNzMsIDE2MjgwLCAKLSAgICAxNjI4NiwgMTYyOTcsIDE2MzA0LCAxNjMwOSwgMTYzMTMsIDE2MzE3LCAxNjMyMCwgMTYzMjgsIDE2MzMzLCAxNjM0MCwgCi0gICAgMTYzNDcsIDE2MzUzLCAxNjM1OCwgMTYzNjMsIDE2MzcwLCAxNjM4MCwgMTYzODUsIDE2MzkyLCAxNjM5OCwgMTY0MDgsIAotICAgIDE2NDE4LCAxNjQzMiwgMTY0NDYsIDE2NDYwLCAxNjQ3NCwgMTY0ODksIDE2NTA0LCAxNjUyMSwgMTY1MzksIDE2NTUyLCAKLSAgICAxNjU1OCwgMTY1NjMsIDE2NTY4LCAxNjU3MiwgMTY1NzcsIDE2NTg1LCAxNjU5MSwgMTY1OTYsIDE2NjAxLCAxNjYwNSwgCi0gICAgMTY2MTAsIDE2NjE0LCAxNjYxOSwgMTY2MjMsIDE2NjM0LCAxNjY0MCwgMTY2NDUsIDE2NjUwLCAxNjY1NywgMTY2NjIsIAotICAgIDE2NjY2LCAxNjY3MSwgMTY2NzYsIDE2NjgyLCAxNjY4OSwgMTY2OTUsIDE2NzAwLCAxNjcwNCwgMTY3MTAsIDE2NzE1LCAKLSAgICAxNjcyMCwgMTY3MjQsIDE2NzMwLCAxNjczNSwgMTY3NDAsIDE2NzQ3LCAxNjc1MiwgMTMxMDQsIDE2NzU2LCAxNjc2MSwgCi0gICAgMTY3NjUsIDE2NzcwLCAxNjc3NiwgMTY3ODIsIDE2Nzg5LCAxNjc5OSwgMTY4MDcsIDE2ODE0LCAxNjgxOSwgMTY4MjMsIAotICAgIDE2ODMyLCAxNjg0MCwgMTY4NDcsIDE2ODU0LCAxNjg2MCwgMTY4NjYsIDE2ODcxLCAxNjg3NiwgMTY4ODIsIDE2ODg3LCAKLSAgICAxNjg5MywgMTY4OTgsIDE2OTA0LCAxNjkxMCwgMTY5MTcsIDE2OTIzLCAxNjkyOCwgMTY5MzMsIDkzNDEsIDE2OTQyLCAKLSAgICAxNjk0NSwgMTY5NTEsIDE2OTU2LCAxNjk2MSwgMTY5NzEsIDE2OTc4LCAxNjk4NCwgMTY5ODksIDE2OTk0LCAxNzAwMCwgCi0gICAgMTcwMDUsIDE3MDExLCAxNzAxNiwgMTcwMjIsIDE3MDI4LCAxNzAzMywgMTcwNDEsIDE3MDQ4LCAxNzA1MywgMTcwNTgsIAotICAgIDE3MDY0LCAxNzA2OSwgMTcwNzMsIDE3MDgyLCAxNzA5MywgMTcxMDAsIDE3MTA1LCAxNzExMywgMTcxMTksIDE3MTI2LCAKLSAgICAxNzEzMiwgMTcxMzcsIDE3MTQxLCAxNzE0NywgMTcxNTIsIDE3MTU3LCAxNzE2MiwgMTQ0MCwgNzc3NywgMjg3NywgMTcxNjYsIAotICAgIDE3MTcwLCAxNzE3NCwgMTcxNzgsIDE3MTgyLCAxNzE4NiwgMTcxODksIDE3MTk2LCAxNzIwNCwgMTQzODcsIDE3MjExLCAKLSAgICAxNzIyMSwgMTcyMjksIDE3MjM2LCAxNzI0NCwgMTcyNTQsIDE3MjYzLCAxNzI3NiwgMTcyODEsIDE3Mjg2LCAxNzI5NCwgCi0gICAgMTczMDEsIDEzMjAwLCAxMzIwOSwgMTczMDgsIDE3MzE4LCAxNzMzMywgMTczMzksIDE3MzQ2LCAxNzM1MywgMTczNTksIAotICAgIDE3MzY3LCAxNzM3NywgMTczODcsIDE0MzkyLCAxNzM5NiwgMTc0MDIsIDE3NDA4LCAxNzQxNiwgMTc0MjQsIDE3NDI5LCAKLSAgICAxNzQzOCwgMTc0NDYsIDE3NDU4LCAxNzQ2OCwgMTc0NzgsIDE3NDg4LCAxNzQ5NywgMTc1MDksIDE3NTE5LCAxNzUyOSwgCi0gICAgMTc1NDAsIDE3NTQ1LCAxNzU1NywgMTc1NjksIDE3NTgxLCAxNzU5MywgMTc2MDUsIDE3NjE3LCAxNzYyOSwgMTc2NDEsIAotICAgIDE3NjUzLCAxNzY2NSwgMTc2NzYsIDE3Njg4LCAxNzcwMCwgMTc3MTIsIDE3NzI0LCAxNzczNiwgMTc3NDgsIDE3NzYwLCAKLSAgICAxNzc3MiwgMTc3ODQsIDE3Nzk2LCAxNzgwNywgMTc4MTksIDE3ODMxLCAxNzg0MywgMTc4NTUsIDE3ODY3LCAxNzg3OSwgCi0gICAgMTc4OTEsIDE3OTAzLCAxNzkxNSwgMTc5MjcsIDE3OTM4LCAxNzk1MCwgMTc5NjIsIDE3OTc0LCAxNzk4NiwgMTc5OTgsIAotICAgIDE4MDEwLCAxODAyMiwgMTgwMzQsIDE4MDQ2LCAxODA1OCwgMTgwNjksIDE4MDgxLCAxODA5MywgMTgxMDUsIDE4MTE3LCAKLSAgICAxODEyOSwgMTgxNDEsIDE4MTUzLCAxODE2NSwgMTgxNzcsIDE4MTg5LCAxODIwMCwgMTgyMTIsIDE4MjI0LCAxODIzNiwgCi0gICAgMTgyNDgsIDE4MjYwLCAxODI3MiwgMTgyODQsIDE4Mjk2LCAxODMwOCwgMTgzMjAsIDE4MzMxLCAxODM0MywgMTgzNTUsIAotICAgIDE4MzY3LCAxODM3OSwgMTgzOTEsIDE4NDAzLCAxODQxNSwgMTg0MjcsIDE4NDM5LCAxODQ1MSwgMTg0NjIsIDE4NDc0LCAKLSAgICAxODQ4NiwgMTg0OTgsIDE4NTEwLCAxODUyMywgMTg1MzYsIDE4NTQ5LCAxODU2MiwgMTg1NzUsIDE4NTg4LCAxODYwMSwgCi0gICAgMTg2MTMsIDE4NjI2LCAxODYzOSwgMTg2NTIsIDE4NjY1LCAxODY3OCwgMTg2OTEsIDE4NzA0LCAxODcxNywgMTg3MzAsIAotICAgIDE4NzQzLCAxODc1NSwgMTg3NjgsIDE4NzgxLCAxODc5NCwgMTg4MDcsIDE4ODIwLCAxODgzMywgMTg4NDYsIDE4ODU5LCAKLSAgICAxODg3MiwgMTg4ODUsIDE4ODk3LCAxODkxMCwgMTg5MjMsIDE4OTM2LCAxODk0OSwgMTg5NjIsIDE4OTc1LCAxODk4OCwgCi0gICAgMTkwMDEsIDE5MDE0LCAxOTAyNywgMTkwMzksIDE5MDUyLCAxOTA2NSwgMTkwNzgsIDE5MDkxLCAxOTEwNCwgMTkxMTcsIAotICAgIDE5MTMwLCAxOTE0MywgMTkxNTYsIDE5MTY5LCAxOTE4MSwgMTkxOTQsIDE5MjA3LCAxOTIyMCwgMTkyMzMsIDE5MjQ2LCAKLSAgICAxOTI1OSwgMTkyNzIsIDE5Mjg1LCAxOTI5OCwgMTkzMTEsIDE5MzIzLCAxOTMzNCwgMTkzNDcsIDE5MzYwLCAxOTM3MywgCi0gICAgMTkzODYsIDE5Mzk5LCAxOTQxMiwgMTk0MjUsIDE5NDM4LCAxOTQ1MSwgMTk0NjQsIDE5NDc2LCAxOTQ4OSwgMTk1MDIsIAotICAgIDE5NTE1LCAxOTUyOCwgMTk1NDEsIDE5NTU0LCAxOTU2NywgMTk1ODAsIDE5NTkzLCAxOTYwNiwgMTk2MTgsIDE5NjMxLCAKLSAgICAxOTY0NCwgMTk2NTcsIDE5NjcwLCAxOTY4MywgMTk2OTYsIDE5NzA5LCAxOTcyMiwgMTk3MzUsIDE5NzQ4LCAxOTc2MCwgCi0gICAgMTk3NzMsIDE5Nzg2LCAxOTc5OSwgMTk4MTIsIDE5ODI1LCAxOTgzOCwgMTk4NTEsIDE5ODY0LCAxOTg3NywgMTk4OTAsIAotICAgIDE5OTAyLCAxOTkxNSwgMTk5MjgsIDE5OTQxLCAxOTk1NCwgMTk5NjcsIDE5OTgwLCAxOTk5MywgMjAwMDYsIDIwMDE5LCAKLSAgICAyMDAzMiwgMjAwNDQsIDIwMDU3LCAyMDA3MCwgMjAwODMsIDIwMDk2LCAyMDEwOSwgMjAxMjIsIDIwMTM1LCAyMDE0OCwgCi0gICAgMjAxNjEsIDIwMTc0LCAyMDE4NiwgMjAxOTksIDIwMjEyLCAyMDIyNSwgMjAyMzgsIDIwMjUxLCAyMDI2NCwgMjAyNzcsIAotICAgIDIwMjkwLCAyMDMwMywgMjAzMTYsIDIwMzI4LCAyMDM0MSwgMjAzNTQsIDIwMzY3LCAyMDM4MCwgMjAzOTMsIDIwNDA2LCAKLSAgICAyMDQxOSwgMjA0MzIsIDIwNDQ1LCAyMDQ1OCwgMjA0NzAsIDIwNDgzLCAyMDQ5NiwgMjA1MDksIDIwNTIyLCAyMDUzNSwgCi0gICAgMjA1NDgsIDIwNTYxLCAyMDU3NCwgMjA1ODcsIDIwNjAwLCAyMDYxMiwgMjA2MjUsIDIwNjM4LCAyMDY1MSwgMjA2NjQsIAotICAgIDIwNjc3LCAyMDY5MCwgMjA3MDMsIDIwNzE2LCAyMDcyOSwgMjA3NDIsIDIwNzU0LCAyMDc2NSwgMjA3NzMsIDIwNzgxLCAKLSAgICAyMDc4OCwgMjA3OTQsIDIwNzk4LCAyMDgwNCwgMjA4MTAsIDIwODE4LCAyMDgyNCwgMjA4MjksIDIwODMzLCAyMDg0MiwgCi0gICAgOTE0OCwgMjA4NTMsIDIwODYwLCAyMDg2OCwgMjA4NzUsIDIwODgyLCAxMDk0MSwgMjA4ODksIDIwODk4LCAyMDkwMywgCi0gICAgMjA5MDgsIDc4MDUsIDIwOTE1LCAyMDkyMCwgMjA5MjMsIDIwOTI4LCAyMDkzNiwgMjA5NDMsIDIwOTUwLCAyMDk1NywgCi0gICAgMjA5NjMsIDIwOTcyLCAyMDk4MSwgMjA5ODcsIDIwOTk2LCAyMTAwMCwgMjEwMDYsIDIxMDExLCAyMTAyMSwgMjEwMjgsIAotICAgIDIxMDM0LCAyMTA0MiwgMjEwNDgsIDIxMDU1LCAyMTA2NSwgMjEwNzQsIDIxMDc4LCAyMTA4NSwgMjEwODksIDIxMDk0LCAKLSAgICAyMTEwMCwgMjExMDgsIDIxMTEyLCAyMTEyMiwgMTQ0MDIsIDIxMTMxLCAyMTEzNywgMjExNDEsIDIxMTUwLCAxNDQwNywgCi0gICAgMjExNTYsIDIxMTYzLCAyMTE3NCwgMjExODIsIDIxMTkxLCAyMTE5OSwgODkzMSwgMjEyMDcsIDIxMjEyLCAyMTIxOCwgCi0gICAgMjEyMjMsIDIxMjI3LCAyMTIzMSwgMjEyMzUsIDk2MzIsIDIxMjQwLCAyMTI0OCwgMjEyNTUsIDIxMjY0LCAyMTI3MSwgCi0gICAgMjEyNzgsIDEwODcxLCAyMTI4NSwgMjEyOTEsIDIxMjk1LCAyMTMwMSwgMjEzMDgsIDIxMzE0LCAyMTMyMiwgMjEzMjgsIAotICAgIDIxMzM1LCAyMTM0MSwgMjEzNDcsIDIxMzU2LCAyMTM2MCwgMjEzNjgsIDIxMzc3LCAyMTM4NCwgMjEzODksIDIxMzkzLCAKLSAgICAyMTQwNCwgMjE0MDksIDIxNDE0LCAyMTQxOSwgMjE0MzIsIDc5OTUsIDIxNDM2LCAyMTQ0MiwgMjE0NTAsIDIxNDU0LCAKLSAgICAyMTQ2MSwgMjE0NzAsIDIxNDc1LCAxNDY3OCwgMjE0ODMsIDIxNDg3LCAyMTQ5OSwgMjE1MDQsIDIxNTA4LCAyMTUxMSwgCi0gICAgMjE1MTcsIDIxNTIzLCAyMTUyOCwgMjE1MzIsIDIxNTM1LCAyMTU0NiwgMjE1NTEsIDkzNzYsIDIxNTU4LCAyMTU2MywgCi0gICAgOTM4MSwgMjE1NjgsIDIxNTczLCAyMTU3OCwgMjE1ODMsIDIxNTg4LCAyMTU5MywgMjE1OTgsIDIxNjAzLCAyMTYwOCwgCi0gICAgMjE2MTMsIDIxNjE4LCAyMTYyMywgMjE2MjksIDIxNjM0LCAyMTYzOSwgMjE2NDQsIDIxNjQ5LCAyMTY1NCwgMjE2NTksIAotICAgIDIxNjY0LCAyMTY2OSwgMjE2NzQsIDIxNjgwLCAyMTY4NiwgMjE2OTEsIDIxNjk2LCAyMTcwMSwgMjE3MDYsIDIxNzExLCAKLSAgICAyMTcxNiwgMjE3MjEsIDIxNzI2LCAyMTczMSwgMjE3MzcsIDIxNzQyLCAyMTc0NywgMjE3NTIsIDIxNzU4LCAyMTc2NCwgCi0gICAgMjE3NjksIDIxNzc0LCAyMTc3OSwgMjE3ODQsIDIxNzg5LCAyMTc5NCwgMjE3OTksIDIxODA0LCAyMTgxMCwgMjE4MTUsIAotICAgIDIxODIwLCAyMTgyNSwgMjE4MzAsIDIxODM2LCAyMTg0MSwgMjE4NDYsIDIxODUwLCAxMzY4LCAxMjksIDIxODU4LCAyMTg2MiwgCi0gICAgMjE4NjYsIDIxODcwLCAyMTg3NSwgMjE4NzksIDEzMTEwLCAxMjQ2OSwgMjE4ODMsIDIxODg4LCAyMTg5MiwgMjE4OTcsIAotICAgIDIxOTAxLCAyMTkwNiwgMjE5MTAsIDIxOTE2LCAyMTkyMSwgMjE5MjUsIDIxOTI5LCAyMTkzNywgMjE5NDEsIDIxOTQ1LCAKLSAgICAyMTk1MCwgMjE5NTUsIDIxOTU5LCAyMTk2NSwgMjE5NzAsIDIxOTc0LCAyMTk3OSwgMjE5ODQsIDIxOTg4LCAyMTk5NSwgCi0gICAgMjIwMDIsIDIyMDA5LCAyMjAxMywgMjIwMTcsIDIyMDIyLCAyMjAyNiwgMjIwMjksIDIyMDM1LCAyMjA0OCwgMjIwNTMsIAotICAgIDIyMDYyLCAyMjA2NywgOTQyMSwgMjIwNzIsIDIyMDc1LCAyNzEyLCAyNzE3LCAyMjA3OSwgMjIwODUsIDIyMDkxLCA3MjA5LCAKLSAgICAyMjA5NiwgMjIxMDEsIDIyMTA2LCAyMjExMiwgMjIxMTcsIDEzODk2LCAyMjEyMiwgMjIxMjcsIDIyMTMyLCAyMjEzNywgCi0gICAgMjIxNDMsIDIyMTQ4LCAyMjE1MywgMjIxNTksIDIyMTY0LCAyMjE2OCwgMjIxNzMsIDIyMTc4LCAyMjE4MywgMjIxODgsIAotICAgIDIyMTkyLCAyMjE5NywgMjIyMDEsIDIyMjA2LCAyMjIxMSwgMjIyMTYsIDIyMjIxLCAyMjIyNSwgMjIyMzAsIDIyMjM0LCAKLSAgICAyMjIzOSwgMjIyNDQsIDIyMjQ5LCAyMjI1NCwgMjg4NiwgMjIxNjksIDIyMjU4LCAyMjI2NiwgMjIyNzMsIDk3MjYsIAotICAgIDIyMjg1LCAyMjI5MywgMjIxNzQsIDIyMzAwLCAyMjMwNSwgMjIzMTMsIDIyMTc5LCAyMjMxOCwgMjIzMjMsIDIyMzMxLCAKLSAgICAyMjMzNiwgMjIxODQsIDIyMzQxLCAyMjM0NiwgMjIzNTAsIDIyMzU2LCAyMjM2NCwgMjIzNjcsIDIyMzc0LCAyMjM3OCwgCi0gICAgMjIzODIsIDIyMzg4LCAyMjM5NSwgMjI0MDAsIDg5NTgsIDE3MjcsIDE3MzIsIDIyNDA0LCAyMjQxMCwgMjI0MTYsIDIyNDIxLCAKLSAgICAyMjQyNSwgMjI0MjksIDIyNDMzLCAyMjQzNywgMjI0NDEsIDIyNDQ1LCAyMjQ0OSwgMjI0NTIsIDIyNDU4LCAyMjQ2NSwgCi0gICAgMjI0NzMsIDIyNDc5LCAyMjQ4NSwgMjI0OTAsIDIyNDk1LCAyMjQ5OSwgMTM4MTYsIDEzODIzLCAyMjUwNCwgMjI1MTYsIAotICAgIDIyNTE5LCAyMjUyNiwgMTYzNDksIDIyNTMzLCAyMjU0MSwgMjI1NTIsIDIyNTYxLCAyMjU3NCwgMjI1ODQsIDIyNTk4LCAKLSAgICAyMjYxMCwgMjI2MjQsIDIyNjM2LCAyMjY0NiwgMjI2NTgsIDIyNjY0LCAyMjY3OSwgMjI3MDMsIDIyNzIxLCAyMjc0MCwgCi0gICAgMjI3NTMsIDIyNzY3LCAyMjc4NSwgMjI4MDEsIDIyODE4LCAyMjgzNiwgMjI4NDcsIDIyODY2LCAyMjg4MywgMjI5MDMsIAotICAgIDIyOTIxLCAyMjkzMywgMjI5NDcsIDIyOTYxLCAyMjk3MywgMjI5OTAsIDIzMDA5LCAyMzAyNywgMjMwMzksIDIzMDU3LCAKLSAgICAyMzA3NiwgMTQ1NDYsIDIzMDg5LCAyMzEwOSwgMjMxMjEsIDEwNTE2LCAyMzEzMywgMjMxMzgsIDIzMTQzLCAyMzE0OCwgCi0gICAgMjMxNTQsIDIzMTU5LCAyMzE2MywgMjMxNzAsIDIzOTgsIDIzMTc0LCAyMzE4MCwgMjMxODQsIDIzMTg3LCAyMzE5MSwgCi0gICAgMjMxOTksIDIzMjA1LCAyMjIwMiwgMjMyMDksIDIzMjE4LCAyMzIyOSwgMjMyMzUsIDIzMjQxLCAyMzI1MCwgMjMyNTgsIAotICAgIDIzMjY1LCAyMzI3MCwgMjMyNzQsIDIzMjgxLCAyMzI4NywgMjMyOTYsIDIzMzA0LCAyMzMxMSwgMjMzMjEsIDIzMzMwLCAKLSAgICAyMzM0MCwgMjMzNDUsIDIzMzU0LCAyMzM2MywgMjMzNzQsIDIzMzg1LCAzOTYzLCAyMzM5NSwgMjMzOTksIDIzNDA5LCAKLSAgICAyMzQxNywgMjM0MjcsIDIzNDM4LCAyMzQ0MywgMjM0NTMsIDIzNDYxLCAyMzQ2OCwgMjM0NzQsIDIzNDgxLCAyMzQ4NiwgCi0gICAgMjIyMTIsIDIzNDkwLCAyMzQ5OSwgMjM1MDMsIDIzNTA2LCAyMzUxMSwgMjM1MTgsIDIzNTI3LCAyMzUzNSwgMjM1NDMsIAotICAgIDIzNTUzLCAyMzU2MiwgMjM1NjgsIDIzNTc0LCAyMjIxNywgMjIyMjIsIDIzNTc4LCAyMzU4OCwgMjM1OTgsIDIzNjA4LCAKLSAgICAyMzYxNiwgMjM2MjMsIDIzNjMzLCAyMzY0MSwgMjM2NDksIDIzNjU1LCAyMzY2MywgOTMwLCAyMzY3MiwgMTQ3MzcsIDU0MiwgCi0gICAgMjM2ODYsIDIzNjk1LCAyMzcwMywgMjM3MTQsIDIzNzI1LCAyMzczNSwgMjM3NDQsIDIzNzU2LCAyMzc2NSwgMjM3NzQsIAotICAgIDIzNzgwLCAyMzc4OSwgMjM3OTgsIDIzODA4LCAyMzgxNiwgMjM4MjQsIDkzNTMsIDIzODMwLCAyMzgzMywgMjM4MzcsIAotICAgIDIzODQyLCAyMzg0NywgOTg0MSwgMjIyMzUsIDIyMjQwLCAyMzg1NSwgMjM4NjEsIDIzODY3LCAyMzg3MiwgMjM4NzcsIAotICAgIDIzODgxLCAyMzg4OSwgMjM4OTUsIDIzOTAxLCAyMzkwNSwgMzUyNSwgMjM5MTMsIDIzOTE4LCAyMzkyMywgMjM5MjcsIAotICAgIDIzOTMxLCA5OTIxLCAyMzkzOCwgMjM5NDYsIDIzOTYwLCAyMzk2NywgMjM5NzMsIDk5MzAsIDk5MzYsIDIzOTgxLCAyMzk4OSwgCi0gICAgMjM5OTYsIDI0MDAxLCAyNDAwNiwgMjIyNDUsIDI0MDEyLCAyNDAyMywgMjQwMjcsIDI0MDMyLCAyNjAxLCAyNDAzNywgCi0gICAgMjQwNDgsIDI0MDU0LCAyNDA1OSwgMjQwNjMsIDI0MDY3LCAyNDA3MCwgMjQwNzcsIDI0MDg0LCAyNDA5MSwgMjQwOTcsIAotICAgIDI0MTAxLCAyMjI1MCwgMjQxMDYsIDI0MTEwLCAyNDExNCwgMTAzNywgMjQxMTksIDI0MTI0LCAyNDEyOSwgMjQxMzQsIAotICAgIDI0MTM5LCAyNDE0NCwgMjQxNDksIDI0MTU0LCAyNDE1OSwgMjQxNjQsIDI0MTY5LCAyNDE3NCwgMjQxNzksIDI0MTg0LCAKLSAgICAyNDE5MCwgMjQxOTUsIDI0MjAwLCAyNDIwNSwgMjQyMTAsIDI0MjE1LCAyNDIyMCwgMjQyMjYsIDI0MjMxLCAyNDIzNiwgCi0gICAgMjQyNDEsIDI0MjQ2LCAyNDI1MSwgMjQyNTYsIDI0MjYxLCAyNDI2NywgMjQyNzMsIDI0Mjc4LCAyNDI4NCwgMjQyODksIAotICAgIDI0Mjk0LCA1LCAyNDMwMCwgMjQzMDQsIDI0MzA4LCAyNDMxMiwgMjQzMTcsIDI0MzIxLCAyNDMyNSwgMjQzMjksIDI0MzMzLCAKLSAgICAyNDMzOCwgMjQzNDIsIDI0MzQ3LCAyNDM1MSwgMjQzNTQsIDI0MzU4LCAyNDM2MywgMjQzNjcsIDI0MzcyLCAyNDM3NiwgCi0gICAgMjQzODAsIDI0Mzg0LCAyNDM4OSwgMjQzOTMsIDI0Mzk3LCAyNDQwNywgMjQ0MTIsIDI0NDE2LCAyNDQyMCwgMjQ0MjUsIAotICAgIDI0NDMwLCAyNDQzOSwgMjQ0NDQsIDI0NDQ5LCAyNDQ1MywgMjQ0NTcsIDI0NDcwLCAyNDQ4MiwgMjQ0OTEsIDI0NTAwLCAKLSAgICAyNDUwNiwgMjQ1MTEsIDI0NTE1LCAyNDUxOSwgMjQ1MjksIDI0NTM4LCAyNDU0NiwgMjQ1NTIsIDI0NTU3LCAyNDU2MSwgCi0gICAgMjQ1NjgsIDI0NTc4LCAyNDU4NywgMjQ1OTUsIDI0NjAzLCAyNDYxMCwgMjQ2MTgsIDI0NjI3LCAyNDYzNiwgMjQ2NDQsIAotICAgIDI0NjQ5LCAyNDY1MywgMjQ2NTcsIDI0NjYwLCAyNDY2MiwgMjQ2NjYsIDI0NjcwLCAyNDY3NSwgMjQ2ODAsIDI0Njg0LCAKLSAgICAyNDY4OCwgMjQ2OTEsIDI0Njk1LCAyNDY5OCwgMjQ3MDIsIDI0NzA1LCAyNDcwOCwgMjQ3MTIsIDI0NzE4LCAyNDcyMiwgCi0gICAgMjQ3MjYsIDI0NzMwLCAyNDczNSwgMjQ3NDAsIDI0NzQ1LCAyNDc0OSwgMjQ3NTIsIDI0NzU3LCAyNDc2MywgMjQ3NjgsIAotICAgIDI0Nzc0LCAyNDc3OSwgMjQ3ODMsIDI0Nzg3LCAyNDc5MSwgMjQ3OTYsIDI0ODAwLCAyNDgwNSwgMjQ4MDksIDI0ODEzLCAKLSAgICAyNDgyMCwgMjQ4MjQsIDI0ODI3LCAyNDgzMSwgMjQ4MzcsIDI0ODQzLCAyNDg0NywgMjQ4NTEsIDI0ODU2LCAyNDg2MywgCi0gICAgMjQ4NjksIDI0ODczLCAyNDg4MiwgMjQ4ODYsIDI0ODkwLCAyNDg5MywgMjQ4OTksIDI0OTA0LCAyNDkxMCwgMTQ4OSwgCi0gICAgMTc5MSwgMjQ5MTUsIDI0OTIwLCAyNDkyNSwgMjQ5MzAsIDI0OTM1LCAyNDk0MCwgMjQ5NDUsIDIxNDgsIDIxOTQsIDI0OTUwLCAKLSAgICAyNDk1MywgMjQ5NTcsIDI0OTYxLCAyNDk2NiwgMjQ5NzAsIDI0OTc0LCAyNDk3NywgMjQ5ODIsIDI0OTg3LCAyNDk5MSwgCi0gICAgMjQ5OTQsIDI0OTk5LCAyNTAwMywgMjUwMDgsIDI1MDEyLCAxNDc0OSwgMjUwMTcsIDI1MDIwLCAyNTAyMywgMjUwMjcsIAotICAgIDI1MDMyLCAyNTAzNiwgMjUwNDksIDI1MDUzLCAyNTA1NiwgMjUwNjQsIDI1MDczLCAyNTA4MCwgMjUwODUsIDI1MDkxLCAKLSAgICAyNTA5NywgMjUxMDUsIDI1MTEyLCAyNTExOSwgMjUxMjMsIDI1MTI3LCAyNTEzMSwgMjUxMzYsIDI1MTQxLCAyNTE0NSwgCi0gICAgMjUxNTMsIDI1MTU4LCAyNTE3MCwgMjUxODEsIDI1MTg2LCAyNTE5MCwgMjUxOTQsIDI1MjAwLCAyNTIwNSwgMjUyMTAsIAotICAgIDI1MjE0LCAyNTIxOCwgMjUyMjEsIDI1MjI3LCA3OTE1LCAyMzE2LCAyNTIzMSwgMjUyMzYsIDI1MjUyLCA5NDY4LCAyNTI3MiwgCi0gICAgMjUyODEsIDI1Mjk3LCAyNTMwMSwgMjUzMDQsIDI1MzEwLCAyNTMyMCwgMjUzMjYsIDI1MzM1LCAyNTM1MCwgMjUzNjIsIAotICAgIDI1MzczLCAyNTM4MSwgMjUzOTAsIDI1Mzk2LCAyNTQwNSwgMjU0MTUsIDI1NDI2LCAyNTQzNywgMjU0NDYsIDI1NDUzLCAKLSAgICAyNTQ2MiwgMjU0NzAsIDI1NDc3LCAyNTQ4NSwgMjU0OTIsIDI1NDk5LCAyNTUxMiwgMjU1MTksIDI1NTI1LCAyNTUzMCwgCi0gICAgMjU1MzksIDI1NTQ1LCAyNTU1MCwgMjU1NTgsIDI1NTY1LCAyMzQxOSwgMjU1NzcsIDI1NTg5LCAyNTYwMywgMjU2MTEsIAotICAgIDI1NjE4LCAyNTYzMCwgMjU2MzksIDI1NjQ4LCAyNTY1NiwgMjU2NjQsIDI1NjcyLCAyNTY3OSwgMjU2ODgsIDI1Njk2LCAKLSAgICAyNTcwNiwgMjU3MTUsIDI1NzI1LCAyNTczNCwgMjU3NDMsIDI1NzUxLCAyNTc1NiwgMjU3NjAsIDI1NzYzLCAyNTc2NywgCi0gICAgMjU3NzEsIDI1Nzc1LCAyNTc3OSwgMjU3ODMsIDI1Nzg5LCAyNTc5NSwgMjU4MDMsIDE0Nzk0LCAyNTgxMCwgMjU4MTUsIAotICAgIDI1ODIyLCAyNTgyOCwgMjU4MzUsIDE0ODAyLCAyNTg0MiwgMjU4NDUsIDI1ODU3LCAyNTg2NSwgMjU4NzEsIDI1ODc2LCAKLSAgICAyNTg4MCwgOTg3MSwgMjU4OTEsIDI1OTAxLCAyNTkxMCwgMjU5MTcsIDI1OTIxLCAxNDgwNywgMjU5MjQsIDI1OTMxLCAKLSAgICAyNTkzNSwgMjU5NDEsIDI1OTQ0LCAyNTk1MSwgMjU5NTcsIDI1OTY0LCAyNTk3MCwgMjU5NzQsIDI1OTc5LCAyNTk4MywgCi0gICAgMjU5OTIsIDI1OTk5LCAyNjAwNSwgNzk1NiwgMjYwMTIsIDI2MDIwLCAyNjAyNywgMjYwMzMsIDI2MDM4LCAyNjA0NCwgCi0gICAgMjYwNTAsIDI2MDU4LCAyNjA2MiwgMjYwNjUsIDI2MDY3LCAyNTc2OCwgMjYwNzYsIDI2MDgyLCAyNjA5MiwgMjYwOTcsIAotICAgIDI2MTA0LCAyNjExMCwgMjYxMTUsIDI2MTIwLCAyNjEyNSwgMjYxMjksIDI2MTM0LCAyNjE0MSwgMjYxNTAsIDI2MTU0LCAKLSAgICAyNjE2MSwgMjYxNzAsIDI2MTc2LCAyNjE4MSwgMjYxODcsIDI2MTkyLCAyNjE5OSwgMjYyMTAsIDI2MjE1LCAyNjIxOSwgCi0gICAgMjYyMjksIDI2MjM1LCAyNjIzOSwgMjYyNDQsIDI2MjU0LCAyNjI2MywgMjYyNjcsIDI2Mjc0LCAyNjI4MiwgMjYyODksIAotICAgIDI2Mjk1LCAyNjMwMCwgMjYzMDgsIDI2MzE1LCAyNjMyNywgMjYzMzYsIDI2MzQwLCAxMzA0NiwgMjYzNDgsIDI2MzU4LCAKLSAgICAyNjM2MiwgMjUwNjAsIDI2MzczLCAyNjM3OCwgMjYzODIsIDI2Mzg5LCAyNjM5NiwgMjE5NjEsIDI1NjkzLCAyNjQwMSwgCi0gICAgMjY0MDUsIDI2NDA4LCAyMjg1MywgMjY0MTMsIDI2NDI3LCAyNjQ0MywgMjY0NjEsIDI2NDgwLCAyNjQ5NywgMjY1MTUsIAotICAgIDIyODcyLCAyNjUzMiwgMjY1NTIsIDIyODg5LCAyNjU2NCwgMjY1NzYsIDE1NzMyLCAyNjU4OCwgMjI5MDksIDI2NjAyLCAKLSAgICAyNjYxNCwgMTA1MjksIDI2NjI4LCAyNjYzMywgMjY2MzgsIDI2NjQzLCAyNjY0OSwgMjY2NTUsIDI2NjYxLCAyNjY2NSwgCi0gICAgMjY2NzIsIDI2Njc3LCAyNjY4NywgMjY2OTMsIDEwMTc2LCAyNjY5OSwgMjY3MDEsIDI2NzA2LCAyNjcxNCwgMjY3MTgsIAotICAgIDI2MTM3LCAyNjcyNCwgMjY3MzEsIDExNTE3LCAxMTUyNywgMjY3MzgsIDI2NzQ4LCAyNjc1MywgMjY3NTcsIDI2NzYwLCAKLSAgICAyNjc2NiwgMjY3NzQsIDI2Nzg2LCAyNjc5NiwgMjY4MTIsIDI2ODI1LCAyNjgzOSwgMTU3NTAsIDI2ODUzLCAyNjg2MCwgCi0gICAgMjY4NjQsIDI2ODY3LCAyNjg3MiwgMjY4NzYsIDI2ODgzLCAyNjg5MCwgMjY5MDAsIDI2OTA1LCAyNjkxMCwgMjY5MTUsIAotICAgIDI2OTIzLCAyNjkzMSwgMjY5NDAsIDI2OTQ1LCA5NTY1LCAyNjk0OSwgMjY5NTIsIDI2OTU1LCAyNjk2MCwgMjY5NjcsIAotICAgIDI2OTcyLCAyNjk4OCwgMjY5OTYsIDI3MDA0LCA5NDE2LCAyNzAxMiwgMjcwMTcsIDI3MDIxLCAyNzAyNywgMjcwMzMsIAotICAgIDI3MDM2LCAyNzA0MiwgMjcwNTQsIDI3MDYyLCAyNzA2OSwgMjcwNzUsIDI3MDgyLCAyNzA5MywgMjcxMDcsIDI3MTIwLCAKLSAgICAyNzEyOSwgMjcxMzgsIDI3MTUwLCAyNzE2MSwgMjcxNzEsIDI3MTgwLCAyNzE4OSwgMjcxOTcsIDI3MjA4LCA3OTM4LCAKLSAgICAyNzIxNSwgMjcyMjEsIDI3MjI2LCAyNzIzMiwgMjcyMzksIDI3MjQ5LCAyNzI1OSwgMjcyNjgsIDI3Mjc0LCAyNzI4MSwgCi0gICAgMjcyODYsIDI3MjkzLCAyNzMwMSwgMjczMDksIDI3MzIxLCA2MjQ2LCAyNzMyOCwgMjczMzcsIDI3MzQ1LCAyNzM1MSwgCi0gICAgMjczNTcsIDI3MzYyLCAyNzM2NiwgMjczNjksIDI3Mzc1LCAyNzM4MiwgMjczODcsIDI3MzkyLCAyNzM5NiwgMjc0MDgsIAotICAgIDI3NDE5LCAyNzQyOCwgMjc0MzYsIDE0OTM0LCAyNzQ0MSwgMjc0NDcsIDI3NDUzLCAxMTUxMCwgODYzNSwgMjc0NTgsIAotICAgIDI3NDYyLCAyNzQ2NSwgMjc0NjgsIDI3NDc0LCAyNzQ4MiwgMjc0OTAsIDI3NDk0LCAyNzQ5OCwgMjc1MDMsIDI3NTA2LCAKLSAgICAyNzUxNSwgMjc1MTksIDI3NTI3LCAyNzUzOCwgMjc1NDIsIDI3NTQ4LCAyNzU1NCwgMjc1NTgsIDI3NTY0LCAyNzU3MiwgCi0gICAgMjc1OTQsIDI3NjE4LCAyNzYyNSwgMjc2MzIsIDI3NjM4LCAyNzY0NiwgMjc2NTIsIDI3NjU3LCAyNzY2OCwgMjc2ODYsIAotICAgIDI3NjkzLCAyNzcwMSwgMjc3MDUsIDI3NzE0LCAyNzcyNywgMjc3MzUsIDI3NzQ3LCAyNzc1OCwgMjc3NjgsIDI3NzgyLCAKLSAgICAyNzc5MSwgMjc3OTksIDI3ODExLCA5NDg1LCAyNzgyMiwgMjc4MzMsIDI3ODQ1LCAyNzg1NSwgMjc4NjQsIDI3ODY5LCAKLSAgICAyNzg3MywgMjc4ODEsIDI3ODkxLCAyNzg5NiwgMjc5MDAsIDI3OTAzLCAyNzkwNiwgMjc5MTQsIDI3OTIyLCAyNzkzMSwgCi0gICAgMjc5NDEsIDI3OTUwLCAyNzk1NiwgMjc5NzAsIDI2NjMsIDI3OTkyLCAyODAwMywgMjgwMTIsIDI4MDIyLCAyODAzNCwgCi0gICAgMjgwNDMsIDI4MDUyLCAyODA2MiwgMjgwNzAsIDI4MDc4LCAyODA4NywgMjgwOTIsIDI4MTAzLCAyODEwOCwgMjgxMTksIAotICAgIDI4MTIzLCAyODEzMywgMjgxNDIsIDI4MTUwLCAyODE2MCwgMjgxNzAsIDI4MTc4LCAyODE4NywgMjgxOTQsIDI4MjAyLCAKLSAgICAyODIwOSwgMjgyMTgsIDI4MjIyLCAyODIzMCwgMjgyMzcsIDI4MjQ1LCAyODI1MiwgMjgyNjMsIDI4Mjc4LCAyODI4NSwgCi0gICAgMjgyOTEsIDI4MzAxLCAyODMxMCwgMjgzMTYsIDI4MzIwLCAyODMyNywgMjgzMzEsIDE0MDE4LCAyODMzNywgMjgzNDEsIAotICAgIDI4MzQ2LCAyODM1MywgMjgzNTcsIDI4MzYxLCAyODM2OSwgMjgzNzcsIDI4MzgzLCAyODM5MiwgMjgzOTksIDI4NDA0LCAKLSAgICAyODQwOSwgMjg0MTksIDIzNDg4LCAyODQyMywgMjg0MjYsIDI4NDMxLCAyODQzNiwgMjg0NDEsIDI4NDQ2LCAyODQ1MSwgCi0gICAgMjg0NTYsIDI4NDYxLCAyODQ2NiwgMjg0NzIsIDI4NDc3LCAyODQ4MiwgMjg0ODgsIDEyMTgsIDcwNCwgMjg0OTMsIDI4NTAyLCAKLSAgICAyMzY0LCAyODUwOSwgMjg1MTQsIDI4NTE4LCAyODUyNCwgMTI2NywgNTQ2LCAzMTgsIDI4NTI5LCAyODUzOCwgMjg1NDYsIAotICAgIDI4NTU1LCAyODU2MywgMjg1NzQsIDI4NTgzLCAyODU5MSwgMjg1OTUsIDI4NTk4LCAyODYwNiwgMjg2MTQsIDI4NjE5LCAKLSAgICAxNDc2MiwgMjg2MjUsIDI4NjMxLCAyODYzNywgNTg3MiwgMjg2NDIsIDI4NjQ2LCAyODY1MiwgMjg2NTYsIDI4NjYzLCAKLSAgICAxNDU1LCAyODY2OSwgMjg2NzYsIDk1NzIsIDI4NjgwLCAyODY5MCwgMjg2OTgsIDI4NzA0LCAyODcxMywgMjg3MjEsIAotICAgIDI4NzI3LCAyODczNSwgMjg3NDIsIDExMTAzLCAyODc0OCwgMjg3NTUsIDI4NzYwLCAyODc2NywgMTQ5NiwgMjE0NywgCi0gICAgMjg3NzMsIDI4Nzc5LCAyODc4NiwgMjg3OTcsIDI4ODA4LCAyODgxNiwgMjg4MjMsIDI4ODMzLCAyODg0MiwgMjg4NTAsIAotICAgIDI4ODU5LCAyODg2NiwgMjg4NzMsIDI4ODg2LCAyODg5NywgMTI3MiwgMjg5MTYsIDI4OTIxLCAyODkyOSwgMzU3NSwgCi0gICAgMjg5MzMsIDI4OTM4LCAyODk0MiwgMTQ1OSwgMjQ2ODksIDI4OTUyLCAyODk1NiwgMjg5NjEsIDI4OTY1LCAzNDkzLCAKLSAgICAyODk3MSwgMjg5NzksIDI4OTg2LCAyODk5NywgMjkwMDUsIDI5MDEzLCAzNTc2LCAyNzksIDI5MDE4LCAyOTAyNiwgMjkwMzQsIAotICAgIDI5MDQxLCAyOTA0NywgMjkwNTIsIDIyMTYsIDI5MDU5LCAyOTA2NSwgMjU5NzUsIDI2MjA1LCAyOTA3MSwgMTA2LCAyOTA3NSwgCi0gICAgMjkwNzksIDI5MDg1LCA2MTUsIDkzMjEsIDI5MDkwLCAyOTA5NywgMjkxMDMsIDIzMjcsIDI5MTA3LCAyOTExMSwgMTUxNzQsIAotICAgIDI5MTE0LCAyOTExOSwgMjkxMjYsIDI5MTMyLCAyOTEzNywgMjkxNDUsIDI5MTUyLCAyOTE1OCwgMjIzMzgsIDI5MTYyLCAKLSAgICAyOTE2NiwgMzY0NiwgMTY2MTIsIDI5MTcwLCAyOTE3NSwgMjkxNzgsIDI5MTg2LCAyOTE5NCwgMjkxOTksIDI5MjAyLCAKLSAgICAyOTIwOSwgMjkyMTksIDI5MjMxLCAyOTIzNiwgMjkyNDAsIDI5MjQ4LCAyOTI1NSwgMjkyNjEsIDI5MjY4LCAyOTI3NSwgCi0gICAgMjkyNzgsIDI5MjgyLCAyOTI4NiwgMTQ2MywgMjkyOTYsIDI5Mjk4LCAyOTMwMywgMjkzMDksIDI5MzE1LCAyOTMyMCwgCi0gICAgMjkzMjUsIDI5MzMwLCAyOTMzNSwgMjkzNDAsIDI5MzQ1LCAyOTM1MCwgMjkzNTUsIDI5MzYwLCAyOTM2NSwgMjkzNzAsIAotICAgIDI5Mzc1LCAyOTM4MCwgMjkzODUsIDI5MzkxLCAyOTM5NywgMjk0MDMsIDI5NDA5LCAyOTQxNCwgMjk0MTksIDI5NDI0LCAKLSAgICAyOTQzMCwgMjk0MzUsIDI5NDQwLCAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MiwgMjk0NjcsIDI5NDcyLCAyOTQ3NywgCi0gICAgMjk0ODIsIDI5NDg4LCAyOTQ5MywgMjk0OTksIDI5NTA0LCAyOTUwOSwgMjk1MTQsIDI5NTE5LCAyOTUyNSwgMjk1MzAsIAotICAgIDI5NTM2LCAyOTU0MSwgMjk1NDYsIDI5NTUxLCAyOTU1NiwgMjk1NjEsIDI5NTY2LCAyOTU3MSwgMjk1NzYsIDI5NTgxLCAKLSAgICAyOTU4NywgMjk1OTMsIDI5NTk5LCAyOTYwNCwgMjk2MDksIDI5NjE0LCAyOTYxOSwgMjk2MjUsIDI5NjMxLCAyOTYzNywgCi0gICAgMjk2NDMsIDI5NjQ5LCAyOTY1NSwgMjk2NjAsIDI5NjY2LCAyOTY3MSwgMjk2NzYsIDI5NjgxLCAyOTY4NiwgMjk2OTIsIAotICAgIDI0NDMsIDI5Njk3LCAyNDUwLCAyNDU3LCAyNzU0LCAyOTcwMiwgMjQ2MywgMjQ3MywgMjk3MDgsIDI5NzEyLCAyOTcxNywgCi0gICAgMjk3MjIsIDI5NzI4LCAyOTczMywgMjk3MzgsIDI5NzQyLCAyOTc0NywgMjk3NTMsIDI5NzU4LCAyOTc2MywgMjk3NjgsIAotICAgIDI5Nzc0LCAyOTc3OSwgMjk3ODMsIDI5Nzg3LCAyOTc5MiwgMjk3OTcsIDI5ODAyLCAyOTgwNywgMjk4MTIsIDI5ODE4LCAKLSAgICAyOTgyNCwgMjk4MjksIDI5ODMzLCAyOTgzOCwgMjk4NDQsIDI5ODQ4LCAyOTg1MywgMjk4NTgsIDI5ODYzLCAyOTg2OCwgCi0gICAgMjk4NzIsIDI5ODc1LCAyOTg4MCwgMjk4ODUsIDI5ODkwLCAyOTg5NSwgMjk5MDAsIDI5OTA2LCAyOTkxMiwgMjk5MTcsIAotICAgIDI5OTIyLCAyOTkyNiwgMjk5MzEsIDI5OTM2LCAyOTk0MSwgMjk5NDYsIDI5OTUxLCAyOTk1NSwgMjk5NjAsIDI5OTY1LCAKLSAgICAyOTk3MCwgMjk5NzQsIDI5OTc4LCAyOTk4MiwgMjk5ODcsIDI5OTk1LCAzMDAwMCwgMzAwMDYsIDMwMDEyLCAzMDAxOCwgCi0gICAgMzAwMjMsIDMwMDI3LCAzMDAzMCwgMzAwMzUsIDMwMDQwLCAzMDA0NCwgMzAwNDksIDMwMDUzLCAzMDA1OCwgMzAwNjIsIAotICAgIDMwMDY1LCAzMDA3MCwgMTcyODksIDMwMDc1LCAzMDA4MCwgMzAwODUsIDMwMDkzLCAyMTI2NywgMjg2NzMsIDkwMTksIAotICAgIDMwMDk4LCAzMDEwMywgMzAxMDcsIDMwMTEyLCAzMDExNiwgMzAxMjAsIDMwMTI1LCAzMDEyOSwgMzAxMzIsIDMwMTM1LCAKLSAgICAzMDEzOSwgMzAxNDQsIDMwMTQ4LCAzMDE1NiwgMzAxNjAsIDMwMTYzLCAzMDE2OCwgMzAxNzIsIDMwMTc2LCAzMDE4MSwgCi0gICAgMzAxODYsIDMwMTkwLCAzMDE5NiwgMzAyMDEsIDMwMjA2LCAzMDIxMywgMzAyMjAsIDMwMjI0LCAzMDIyNywgMzAyMzMsIAotICAgIDMwMjQyLCAzMDI0OSwgMzAyNTcsIDMwMjY0LCAzMDI2OCwgMzAyNzMsIDMwMjc3LCAzMDI4MSwgMzAyODcsIDMwMjkzLCAKLSAgICAzMDI5NywgMzAzMDMsIDMwMzA4LCAzMDMxMywgMzAzMjAsIDMwMzI2LCAzMDMzMiwgMzAzMzgsIDMwMzQ0LCAzMDM1MSwgCi0gICAgMzAzNTcsIDMwMzYzLCAzMDM2OSwgMzAzNzUsIDMwMzgxLCAzMDM4NywgMzAzOTMsIDMwNDAwLCAzMDQwNiwgMzA0MTMsIAotICAgIDMwNDE5LCAzMDQyNSwgMzA0MzEsIDMwNDM3LCAzMDQ0MywgMzA0NDksIDMwNDU1LCAzMDQ2MSwgMzA0NjcsIDExNDExLCAKLSAgICAzMDQ3MywgMzA0NzgsIDMwNDgzLCAzMDQ4NiwgMzA0OTQsIDMwNDk5LCAzMDUwOCwgMzA1MTQsIDMwNTE5LCAzMDUyNCwgCi0gICAgMzA1MjksIDMwNTMzLCAzMDUzOCwgMzA1NDMsIDMwNTQ4LCAzMDU1MywgMzA1NTgsIDMwNTY1LCAzMDU3MiwgMzA1NzgsIAotICAgIDMwNTg0LCAzMDU4OSwgMTYyOTAsIDMwNTk2LCAzMDYwMiwgMzA2MDksIDMwNjE1LCAzMDYyMSwgMzA2MjYsIDMwNjM0LCAKLSAgICAzMDYzOSwgMTYwNjksIDMwNjQzLCAzMDY0OCwgMzA2NTMsIDMwNjU5LCAzMDY2NCwgMzA2NjksIDMwNjczLCAzMDY3OCwgCi0gICAgMzA2ODMsIDMwNjg5LCAzMDY5NCwgMzA2OTksIDMwNzAzLCAzMDcwOCwgMzA3MTMsIDMwNzE3LCAzMDcyMiwgMzA3MjcsIAotICAgIDMwNzMyLCAzMDczNiwgMzA3NDEsIDMwNzQ2LCAzMDc1MSwgMzA3NTUsIDMwNzU5LCAxNTI4MCwgMzA3NjMsIDMwNzcyLCAKLSAgICAzMDc3OCwgMzA3ODQsIDMwNzkzLCAzMDgwMSwgMzA4MTAsIDMwODE4LCAzMDgyMywgMzA4MjcsIDMwODM0LCAzMDg0MCwgCi0gICAgMzA4NDQsIDMwODQ3LCAzMDg1MiwgMzA4NjEsIDMwODY5LCAzMDg3NCwgMTQ5NSwgMzA4ODAsIDMwODgzLCAzMDg4NywgCi0gICAgMjI0MTEsIDIyNDE3LCAzMDg5MywgMzA4OTcsIDMwOTA4LCAzMDkxOSwgMzA5MzAsIDMwOTQyLCAzMDk0OSwgMzA5NTYsIAotICAgIDMwOTYxLCAzMDk2NSwgNTkwOSwgNzU1LCAyMTI2NiwgMzA5NzMsIDMwOTc4LCAzMDk4MiwgMzA5ODcsIDMwOTkxLCAzMDk5NywgCi0gICAgMzEwMDIsIDMxMDA4LCAzMTAxMywgMzEwMTksIDMxMDI0LCAzMTAzMCwgMzEwMzUsIDMxMDQxLCAzMTA0NywgMzEwNTMsIAotICAgIDMxMDU4LCAzMTAxNCwgMzEwMjAsIDMxMDYyLCAzMTA2NywgMzEwNzMsIDMxMDc4LCAzMTA4NCwgMzEwODksIDMxMDk1LCAKLSAgICAzMTEwMCwgMzEwMjUsIDEwNDE0LCAzMTEwNCwgMzEwMzYsIDMxMDQyLCAzMTA0OCwgMjgzMSwgMzQyMywgMzExMTAsIAotICAgIDMxMTEzLCAzMTExOSwgMzExMjUsIDMxMTMxLCAzMTEzOCwgMzExNDQsIDMxMTUwLCAzMTE1NiwgMzExNjIsIDMxMTY4LCAKLSAgICAzMTE3NCwgMzExODAsIDMxMTg2LCAzMTE5MiwgMzExOTgsIDMxMjA0LCAzMTIxMCwgMzEyMTcsIDMxMjIzLCAzMTIyOSwgCi0gICAgMzEyMzUsIDMxMjQxLCAzMTI0NywgMzEyNTAsIDMxMjU1LCAzMTI1OCwgMzEyNjUsIDMxMjczLCAzMTI3OCwgMzEyODMsIAotICAgIDMxMjg5LCAzMTI5NCwgMzEyOTksIDMxMzAzLCAzMTMwOCwgMzEzMTQsIDMxMzE5LCAzMTMyNSwgMzEzMzAsIDMxMzM2LCAKLSAgICAzMTM0MSwgMzEzNDcsIDMxMzUzLCAzMTM1NywgMzEzNjIsIDMxMzY3LCAzMTM3MiwgMzEzNzcsIDMxMzgxLCAzMTM4NiwgCi0gICAgMzEzOTEsIDMxMzk2LCAzMTQwMiwgMzE0MDgsIDMxNDE0LCAzMTQyMCwgMzE0MjUsIDMxNDI5LCAzMTQzMiwgMzE0MzgsIAotICAgIDMxNDQ0LCAzMTQ1MywgMzE0NjEsIDMxNDY4LCAzMTQ3MywgMzE0NzcsIDMxNDgxLCAzMTQ4NiwgMTUxMzMsIDMxNDkxLCAKLSAgICAzMTQ5OSwgMzE1MDUsIDM2ODMsIDEzNzcsIDMxNTEwLCAzMTUxNCwgODAwNSwgMzE1MjAsIDMxNTI2LCAzMTUzMywgODAxNCwgCi0gICAgMzE1MzcsIDMxNTQzLCAzMTU1MCwgMzE1NTYsIDMxNTY1LCAzMTU3MywgMzE1ODUsIDMxNTg5LCAzMTU5NiwgMzE2MDIsIAotICAgIDMxNjA2LCAzMTYwOSwgMzE2MTgsIDMxNjI2LCAzMTAxNSwgMzE2MzEsIDMxNjQxLCAzMTY1MSwgMzE2NjEsIDMxNjY3LCAKLSAgICAzMTY3MiwgMzE2ODIsIDMxNjg3LCAzMTcwMCwgMzE3MTQsIDMxNzI1LCAzMTczNywgMzE3NDksIDMxNzYzLCAzMTc3NiwgCi0gICAgMzE3ODgsIDMxODAwLCAxNDU4NywgMzE4MTQsIDMxODE5LCAzMTgyNCwgMzE4MjgsIDMxODMyLCAzMTgzNiwgMTc4MCwgCi0gICAgMjcxNTksIDMxODQwLCAzMTg0NSwgMzEwNjMsIDMxODUwLCAzMTg1MywgMzE4NTgsIDMxODYzLCAzMTg2OCwgMzE4NzQsIAotICAgIDMxODgwLCAxMDA5MSwgMzE4ODUsIDMxODkyLCAxNTY4NCwgMzE4OTgsIDMxOTAzLCAzMTkwOCwgMzE5MTIsIDMxOTE3LCAKLSAgICAzMTkyMiwgMzEwNjgsIDMxOTI3LCAzMTkzMiwgMzE5MzcsIDMxOTQzLCAzMTA3NCwgMzE5NDgsIDMxOTUxLCAzMTk1OCwgCi0gICAgMzE5NjYsIDMxOTcyLCAzMTk3OCwgMzE5ODQsIDMxOTk1LCAzMjAwMCwgMzIwMDcsIDMyMDE0LCAzMjAyMSwgMzIwMjksIAotICAgIDMyMDM4LCAzMjA0NywgMzIwNTMsIDMyMDU5LCAzMjA2NywgMzEwNzksIDMyMDcyLCAzMjA3OCwgMzIwODQsIDMxMDg1LCAKLSAgICAzMjA4OSwgMzIwOTQsIDMyMTAyLCAzMjExMCwgMzIxMTYsIDMyMTIzLCAzMjEyOSwgMzIxMzYsIDMyMTQzLCAzMjE0OSwgCi0gICAgMzIxNTcsIDMyMTY3LCAzMjE3NCwgMzIxNzksIDMyMTg1LCAzMjE5MCwgMzIxOTUsIDMyMjAyLCAzMjIxMSwgMzIyMTksIAotICAgIDMyMjI0LCAzMjIzMCwgMzIyMzcsIDMyMjQ1LCAzMjI1MSwgMzIyNTYsIDMyMjYyLCAzMjI3MSwgMjc5MzYsIDMyMjc4LCAKLSAgICAzMjI4MiwgMzIyODcsIDMyMjk2LCAzMjMwMSwgMzIzMDYsIDMyMzExLCAxMjM5OCwgMzIzMTksIDMyMzI0LCAzMjMyOSwgCi0gICAgMzIzMzQsIDMyMzM4LCAzMjM0MywgMzIzNDgsIDMyMzU1LCAzMjM2MCwgMzIzNjUsIDMyMzcwLCAzMTA5MCwgMjEyMDMsIAotICAgIDMyMzc2LCAyNTE5LCAyNDQsIDMyMzc5LCAzMjM4MiwgMzIzODYsIDMyMzkwLCAzMjQwMCwgMzI0MDgsIDMyNDEyLCAzMjQxOSwgCi0gICAgMzI0MjYsIDMyNDMwLCAzMjQzMywgMzI0MzksIDMyNDQ3LCAzMjQ1NSwgMzI0NTksIDMyNDYzLCAzMjQ2NiwgMzI0NzMsIAotICAgIDMyNDc3LCAzMjQ4MSwgMzI0ODgsIDMyNDk2LCAzMTAyNiwgMzI1MDMsIDMyNTExLCAxMDE1MSwgNjYwLCAzMDgsIDMyNTIzLCAKLSAgICAzMjUyOCwgMzI1MzMsIDMyNTM5LCAzMjU0NCwgMzI1NDksIDM3MDQsIDMyNTU0LCAzMjU1NywgMzI1NjIsIDMyNTY3LCAKLSAgICAzMjU3MiwgMzI1NzcsIDMyNTgyLCAzMjU4OSwgMjI1MTIsIDMyNTk0LCAzMjU5OSwgMzI2MDQsIDMyNjA5LCAzMjYxNCwgCi0gICAgMzI2MjAsIDMyNjI1LCAzMjYzMSwgMzEyNjEsIDMyNjM3LCAzMjY0MiwgMzI2NDgsIDMyNjU0LCAzMjY2NCwgMzI2NjksIAotICAgIDMyNjc0LCAzMjY3OCwgMzI2ODMsIDMyNjg4LCAzMjY5MywgMzI2OTgsIDMyNzExLCAzMjcxNiwgMjIyODksIDE2NjkyLCAKLSAgICAzNzEwLCAzMjcyMCwgMzI3MjUsIDMyNzMwLCAzMjczNiwgMzI3NDEsIDMyNzQ2LCAzMjc1MCwgMzI3NTUsIDMyNzYwLCAKLSAgICAzMjc2NiwgMzI3NzEsIDMyNzc2LCAxMzgyLCAzMjc4MCwgMzI3ODUsIDMyNzkwLCAzMjc5NSwgMzI3OTksIDMyODA0LCAKLSAgICAzMjgwOSwgMzI4MTQsIDMyODIwLCAzMjgyNiwgMzI4MzEsIDMyODM1LCAzMjgzOSwgMzI4NDQsIDMyODQ5LCAzMjg1NCwgCi0gICAgMzI4NTgsIDMyODY2LCAzMjg3MCwgMzI4NzYsIDMyODgwLCAzMjg4NywgMTY0ODUsIDMxMDM3LCAzMjg5MywgMzI5MDAsIAotICAgIDMyOTA4LCAzMjkxNSwgMzI5MjEsIDMyOTM0LCAzMjk0NiwgMzI5NTIsIDMyOTU2LCAyNzczLCAzMjk2MCwgMzI5NjQsIAotICAgIDMyNDY4LCAzMjk3MywgMzI5ODQsIDMyOTg5LCAzMjk5NCwgMzI5OTksIDMzMDAzLCAzMzAwOCwgMjI0MjIsIDMzMDEyLCAKLSAgICAzMzAxNiwgMzMwMjEsIDMxMDQzLCAyMTI4NywgMzMwMjUsIDMzMDMwLCAzMzAzNiwgMzMwNDEsIDMzMDQ1LCAzMzA0OSwgCi0gICAgMzMwNTIsIDMzMDU2LCAzMzA2MiwgMzMwNzMsIDMzMDg1LCAzMTA0OSwgMzMwOTAsIDMzMDkzLCAzMzA5NywgMzQ3LCAKLSAgICAzMzEwMiwgMzMxMDcsIDMzMTEyLCAzMzExNywgMzMxMjIsIDMzMTI3LCAzMzEzMywgMzMxMzgsIDMzMTQzLCAzMzE0OSwgCi0gICAgMzMxNTQsIDMzMTYwLCAzMzE2NSwgMzMxNzEsIDMzMTc2LCAzMzE4MSwgMzMxODYsIDMzMTkxLCAzMzE5NiwgMzMyMDEsIAotICAgIDMzMjA2LCAzMzIxMSwgMzMyMTcsIDMzMjIyLCAzMzIyNywgMzMyMzIsIDMzMjM3LCAzMzI0MiwgMzMyNDcsIDMzMjUyLCAKLSAgICAzMzI1OCwgMzMyNjQsIDMzMjY5LCAzMzI3NCwgMzMyNzksIDMzMjg0LCAzMzI4OSwgMzMyOTQsIDMzMjk5LCAzMzMwNCwgCi0gICAgMzMzMDksIDMzMzE0LCAzMzMxOSwgMzMzMjQsIDMzMzI5LCAzMzMzNCwgMzMzMzksIDMzMzQ0LCAzMzM0OSwgMzMzNTQsIAotICAgIDMzMzYwLCAzMTMsIDI2LCAzMzM2NSwgMzMzNjksIDMzMzczLCAzMzM4MSwgMzMzODUsIDMzMzg5LCAzMzM5MiwgMzMzOTUsIAotICAgIDMzMzk3LCAzMzQwMiwgMzM0MDYsIDMzNDExLCAzMzQxNSwgMzM0MjAsIDMzNDI0LCAzMzQyOSwgMzM0MzMsIDMzNDM2LCAKLSAgICAzMzQzOCwgMzM0NDIsIDMzNDQ3LCAzMzQ1MSwgMzM0NjIsIDMzNDY1LCAzMzQ2NywgMzM0NzEsIDMzNDgzLCAzMzQ5MiwgCi0gICAgMzM0OTYsIDMzNTAwLCAzMzUwNiwgMzM1MTEsIDMzNTIwLCAzMzUyNiwgMzM1MzEsIDMzNTM2LCAzMzU0MCwgMzM1NDUsIAotICAgIDMzNTUyLCAzMzU1NywgMzM1NjMsIDMzNTY4LCAzMzU3MiwgMzM1NzksIDI1NzAxLCAyNTcxMSwgMzM1ODMsIDMzNTg4LCAKLSAgICAzMzU5MywgMzM1OTgsIDMzNjA1LCAzMzYwOSwgMzM2MTYsIDgxMTMsIDMzNjIyLCAzMzYzMSwgMzM2MzksIDMzNjU0LCAKLSAgICAzMzY2OCwgMzM2NzYsIDMzNjg3LCAzMzY5NiwgMzM3MDEsIDcyMjcsIDMzNzExLCAzMzcxNiwgMzM3MjEsIDMzNzI1LCAKLSAgICAzMzcyOCwgMzM3MzIsIDMzNzM3LCAzMzc0MSwgMzM3NDgsIDMzNzUzLCAzMzc1OCwgODkxMiwgMzM3NjgsIDMzNzcwLCAKLSAgICAzMzc3MywgMzM3NzcsIDMzNzgzLCAzMzc4NywgMzM3OTIsIDMzNzk3LCAzMzgwMywgMzM4MDgsIDMzODE0LCAzMzgxOSwgCi0gICAgMzM4MjksIDMzODM4LCAzMzg0NiwgMzM4NTEsIDMzODU3LCAzMzg2MiwgMzM4NjksIDMzODczLCAzMzg4MSwgMzM4ODgsIAotICAgIDMzOTAxLCAzMzkwOSwgMzM5MTMsIDMzOTIzLCAzMzkyOCwgMzM5MzIsIDMzOTQwLCAzMzk0OCwgMzM5NTIsIDMzOTYxLCAKLSAgICAzMzk2NywgMzM5NzIsIDMzOTgwLCAzMzk5MCwgMzM5OTksIDM0MDA4LCAzNDAxNywgMzQwMjgsIDM0MDM2LCAzNDA0NywgCi0gICAgMzQwNTYsIDM0MDYzLCAzNDA2OSwgMzQwNzQsIDM0MDg1LCAzNDA5MCwgMzQwOTQsIDM0MDk3LCAzNDEwMSwgMzQxMDksIAotICAgIDM0MTE1LCAzNDEyMywgMzQxMzAsIDM0MTM2LCAzNDE0MSwgMzQxNDcsIDI0MTgsIDM0MTUxLCAzNDE1MywgMzQxNTgsIAotICAgIDM0MTYzLCAzNDE2OCwgMzQxNzEsIDM0MTczLCAzNDE3NywgMzQxODAsIDM0MTg3LCAzNDE5MSwgOTg4NCwgMzQxOTUsIAotICAgIDM0MjAxLCAzNDIxMSwgMzQyMTYsIDM0MjIyLCAzNDIyNiwgMzQyMzEsIDM0MjQ0LCAyNjA4NywgMzQyNTAsIDM0MjU5LCAKLSAgICAxNzQ2MiwgMzQyNjYsIDM0Mjc1LCAzMTY0NywgMzQyODMsIDM0Mjg4LCAzNDI5MiwgMzQzMDAsIDM0MzA3LCAzNDMxMiwgCi0gICAgMzQzMTYsIDM0MzIxLCAzNDMyNSwgMzQzMzMsIDM0MzM5LCAzNDM0NSwgMzQzNTAsIDM0MzU0LCAzNDM1NywgMzQzNjIsIAotICAgIDM0Mzc1LCAzNDM5MSwgMjI5NzksIDM0NDA4LCAzNDQyMCwgMzQ0MzcsIDM0NDQ5LCAzNDQ2MywgMjI5OTYsIDIzMDE1LCAKLSAgICAzNDQ3NSwgMzQ0ODcsIDI2ODAsIDM0NTAxLCAzNDUwNiwgMzQ1MTEsIDM0NTE2LCAzNDUyMCwgMzQ1MjcsIDM0NTM5LCAKLSAgICAzNDU0NSwgMzQ1NDgsIDM0NTU5LCAzNDU3MCwgMzQ1NzUsIDMyMDY0LCA2OTUsIDM0NTc5LCAzNDU4MywgMzQ1ODcsIAotICAgIDM0NTkwLCAzNDU5NSwgMzQ2MDAsIDM0NjA2LCAzNDYxMSwgMzQ2MTYsIDM0NjIyLCAzNDYyOCwgMzQ2MzMsIDM0NjM3LCAKLSAgICAzNDY0MiwgMzQ2NDcsIDM0NjUyLCAzNDY1NiwgMzQ2NTksIDM0NjY1LCAzNDY3MCwgMzQ2NzUsIDM0NjgwLCAzNDY4NCwgCi0gICAgMzQ2ODksIDM0Njk1LCAzNDcwMywgMjYzMjAsIDM0NzA4LCAzNDcxMywgMzQ3MjAsIDM0NzI2LCAzNDczMiwgMzQ3MzcsIAotICAgIDM0NzQ1LCAyMjUyMSwgMzQ3NTIsIDM0NzU3LCAzNDc2MiwgMzQ3NjcsIDM0NzcxLCAzNDc3NCwgMzQ3NzksIDM0NzgzLCAKLSAgICAzNDc4NywgMzQ3OTQsIDM0ODAwLCAzNDgwNiwgMzQ4MTIsIDM0ODE5LCAzNDgyNCwgMzQ4MzAsIDMzOTQzLCAzNDgzNCwgCi0gICAgMzQ4MzgsIDM0ODQzLCAzNDg1NiwgMzQ4NjEsIDM0ODY3LCAzNDg3NSwgMzQ4ODIsIDM0ODkwLCAzNDkwMCwgMzQ5MDYsIAotICAgIDM0OTEyLCAzNDkxOCwgMzQ5MjIsIDM0OTMxLCAzNDkzOSwgMzQ5NDYsIDM0OTUxLCAzNDk1NiwgMTA0MzcsIDM0OTYxLCAKLSAgICAzNDk2OSwgMzQ5NzYsIDM0OTgyLCAzNDk5MiwgMzQ5OTcsIDM1MDAzLCAzNTAxMSwgMzYwOCwgMzUwMTgsIDM1MDI1LCAKLSAgICAzNjE0LCAzNTAyOSwgMzUwMzQsIDM1MDQ1LCAzNTA1MiwgMzUwNTgsIDM1MDY3LCAzNTA3MSwgNDAxNSwgMzUwNzQsIAotICAgIDM1MDgxLCAzNTA4NywgMzUwOTMsIDM1MTAxLCAzNTExMSwgMjkwNDIsIDM1MTE4LCAzNTEyNiwgMzUxMzEsIDM1MTM3LCAKLSAgICAzNTE0MiwgMjU5NDcsIDM1MTQ4LCAzNTE1NSwgMzUxNjEsIDM1MTcwLCAyMzY2MCwgMzUxNzcsIDM1MTgyLCAzNTE4NiwgCi0gICAgMzUxOTQsIDM1MjAyLCA5NjAwLCA1ODk1LCAzNTIwOSwgMzUyMTMsIDM1MjE1LCAzNTIxOSwgMzUyMjQsIDM1MjI2LCAKLSAgICAzNTIzMiwgMzUyMzcsIDM1MjQyLCAzNTI0OSwgMzI1ODUsIDM1MjU1LCAzNTI2MCwgMzUyNjQsIDM1MjY5LCAzNTI3MywgCi0gICAgMzUyODIsIDM1Mjg2LCAzNTI5MiwgMzUyOTksIDM1MzA1LCAzNTMxMiwgMzUzMTcsIDM1MzI2LCAzNTMzMSwgMzUzMzUsIAotICAgIDM1MzQwLCAzNTM0NywgMzUzNTUsIDM1MzYzLCAzNTM2OCwgMjEzNDMsIDM1MzcyLCAzNTM3NSwgMzUzNzksIDM1MzgzLCAKLSAgICAzNTM4NywgMzUzOTAsIDM1MzkyLCAzNTQwMCwgMzU0MDQsIDM1NDExLCAzNTQxNSwgMzU0MTksIDM1NDI3LCAzNTQzNCwgCi0gICAgMzU0NDQsIDM1NDQ4LCAzNTQ1MiwgMzU0NjAsIDM1NDY4LCAzNTQ3NCwgMzU0NzksIDM1NDg4LCAxMzM1MCwgMzU0OTQsIAotICAgIDM1NTAzLCAzNTUwOCwgMzU1MTUsIDM1NTIzLCAzNTUzMSwgMzU1MzksIDM1NTQ2LCAzNTU1MywgMzU1NjAsIDM1NTY3LCAKLSAgICAzNTU3NCwgMzU1NzksIDM1NTg1LCAzNTYwMiwgMzU2MTAsIDM1NjIwLCAzNTYyOCwgMzU2MzUsIDQwNywgMzU2MzksIAotICAgIDM1NjQ1LCAzNTY0OSwgMzU2NTQsIDMzNjkyLCAzNTY2MCwgMzU2NjMsIDM1NjY3LCAzNTY3NSwgMzYxOSwgMzU2ODMsIAotICAgIDM1Njg5LCAzNTY5NSwgMzU3MDQsIDM1NzE0LCAzNTcyMSwgMzU3MjcsIDM2MjUsIDM2MzEsIDM1NzM2LCAzNTc0MywgCi0gICAgMzU3NTEsIDM1NzU2LCAzNTc2MCwgMzU3NjcsIDM1Nzc1LCAzNTc4MiwgMzU3ODgsIDM1Nzk3LCAzNTgwNywgMzU4MTMsIAotICAgIDM1ODIxLCAzNTgzMCwgMzU4MzcsIDM1ODQ1LCAzNTg1MiwgMjIwMTksIDM1ODU2LCAzNTg2MywgMzU4NjksIDM1ODc5LCAKLSAgICAzNTg4OCwgMzU4OTksIDM1OTAzLCAzNTkxMywgMzU5MTksIDM1OTI2LCAzNTkzNCwgMzU5NDMsIDM1OTUyLCAzNTk2MiwgCi0gICAgMzU5NzMsIDM1OTgwLCAzNTk4NSwgMzU5OTIsIDMwMjksIDM2MDAwLCAzNjAwNiwgMzYwMTEsIDM2MDE3LCAzNjAyMywgCi0gICAgMzYwMjgsIDM2MDQxLCAzNjA1NCwgMzYwNjcsIDM2MDc0LCAzNjA4MCwgMzYwODgsIDM2MDk2LCAzNjEwMSwgMzYxMDUsIAotICAgIDE0NjksIDM2MTA5LCAzNjExNCwgMzYxMTksIDM2MTI0LCAzNjEyOSwgMzYxMzUsIDM2MTQwLCAzNjE0NSwgMzYxNTAsIAotICAgIDM2MTU1LCAzNjE2MCwgMzYxNjUsIDM2MTcwLCAzNjE3NiwgMzYxODIsIDM2MTg3LCAzNjE5MiwgMzYxOTgsIDM2MjAzLCAKLSAgICAzNjIwOCwgMzYyMTMsIDM2MjE5LCAzNjIyNCwgMzYyMjksIDM2MjM0LCAzNjIzOSwgMzYyNDUsIDM2MjUwLCAzNjI1NSwgCi0gICAgMzYyNjEsIDM2MjY2LCAzNjI3MSwgMzYyNzYsIDM2MjgxLCAzNjI4NiwgMzYyOTIsIDM2Mjk3LCAzNjMwMywgMzYzMDgsIAotICAgIDM2MzE0LCAzNjMxOSwgMzYzMjQsIDM2MzI5LCAzNjMzNSwgMzYzNDEsIDM2MzQ3LCAzNjM1MywgMzYzNTksIDM2MzY1LCAKLSAgICAzNjM3MSwgMzYzNzcsIDM2MzgyLCAzNjM4NywgMzYzOTMsIDM2Mzk4LCAzNjQwMywgMzY0MDgsIDM2NDEzLCAzNjQxOCwgCi0gICAgMzY0MjMsIDM2NDI4LCAzNjQzNCwgMzY0MzksIDM2NDQ0LCAzNjQ1MCwgMzY0NTYsIDEwMSwgMzY0NjEsIDM2NDYzLCAKLSAgICAzNjQ2NywgMzY0NzEsIDM2NDc1LCAzNjQ4MCwgMzY0ODQsIDk1MjEsIDM2NDg4LCAzNjQ5NCwgMTc0MSwgNjI4MCwgMzY1MDAsIAotICAgIDM2NTAzLCAzNjUwOCwgMzY1MTIsIDM2NTE3LCAzNjUyMSwgMzY1MjUsIDM2NTMwLCAxMDIzOCwgMzY1MzQsIDM2NTM4LCAKLSAgICAzNjU0MiwgMzY1NDYsIDE1MzcyLCAzNjU1MSwgMzY1NTUsIDM2NTYwLCAzNjU2NSwgMzY1NzAsIDM2NTc0LCAzNjU4MSwgCi0gICAgMjYxMTEsIDM2NTg3LCAzNjU5MCwgMzY1OTQsIDM2NTk5LCAzNjYwNSwgMzY2MDksIDM2NjE3LCAzNjYyMywgMzY2MjgsIAotICAgIDM2NjMyLCAzNjYzOCwgMzY2NDIsIDM2NjQ2LCAzNDYyLCAzNDY3LCAyOTIzNCwgMzY2NDksIDM2NjUzLCAzNjY1NywgCi0gICAgMzY2NjEsIDM2NjY5LCAzNjY3NiwgMzY2ODAsIDM2Njg3LCAzNjY5MiwgMzE3LCAzNjY5NywgMzY3MDEsIDM2NzA3LCAKLSAgICAzNjcxOSwgMzY3MjUsIDM2NzMxLCAzNjczNSwgMzY3NDEsIDM2NzUwLCAzNjc1NCwgMzY3NTgsIDM2NzYzLCAzNjc2OSwgCi0gICAgMzY3NzQsIDM2Nzc4LCAzNjc4MywgMzY3ODcsIDM2NzkxLCAzNjc5OCwgMzY4MDQsIDM2ODA5LCAzNjgyNCwgMzY4MzksIAotICAgIDM2ODU0LCAzNjg3MCwgMzY4ODgsIDEwMTg4LCAzNjkwMiwgMzY5MDksIDM2OTEzLCAzNjkxNiwgMzY5MjUsIDM2OTMwLCAKLSAgICAzNjkzNCwgMzY5NDIsIDMzODk0LCAzNjk1MCwgMzY5NTQsIDM2OTY0LCAzNjk3NSwgMjkyMDQsIDM2OTg4LCAzNjk5MiwgCi0gICAgMzcwMDEsIDM3MDA5LCA5Nzc4LCAxNDkwMCwgMzcwMTMsIDIyNDM0LCAzNzAxNiwgMzAxNTIsIDM3MDIxLCA5Nzc3LCAKLSAgICAzNzAyNiwgMzcwMzIsIDM3MDM3LCAzNzA0MywgMzcwNDgsIDM3MDU0LCAzNzA1OSwgMzcwNjUsIDM3MDcwLCAzNzA3NiwgCi0gICAgMzcwODIsIDM3MDg4LCAzNzA5MywgMzcwNDksIDM3MDU1LCAzNzA2MCwgMzcwNjYsIDM3MDcxLCAzNzA3NywgMzcwODMsIAotICAgIDgxMjYsIDM4NzQsIDM3MDk3LCAzNzEwNSwgMzcxMDksIDM3MTEyLCAzNzExNiwgMzcxMjEsIDM3MTI2LCAzNzEzMiwgCi0gICAgMzcxMzgsIDM3MTQzLCAzNzE0NywgMjU5NTksIDM3MTUxLCAzNzE1NSwgMzcxNjEsIDM3MTY1LCA5MDQyLCAzNzE3NCwgCi0gICAgMzcxODEsIDM3MTg1LCAxMTg2OCwgMzcxOTIsIDM3MTk4LCAzNzIwMywgMzcyMTAsIDM3MjE3LCAzNzIyNCwgMjg1NTAsIAotICAgIDgwNDksIDM3MjMxLCAzNzIzOCwgMzcyNDUsIDM3MjUxLCAzNzI1NiwgMzcyNjMsIDM3Mjc0LCAzNzI4MCwgMzcyODUsIAotICAgIDM3MjkwLCAzNzI5NSwgMzczMDIsIDM3MDUwLCAzNzMwNiwgMzczMTYsIDM3MzI3LCAzNzMzMywgMzczMzgsIDM3MzQzLCAKLSAgICAzNzM0OCwgMzczNTMsIDM3MzU4LCAzNzM2MiwgMzczNjYsIDM3MzcyLCAzNzM4MCwgMjMxOSwgODY1LCAxMDI1NCwgMTAyNjYsIAotICAgIDEwMjcxLCAxMDI3NywgMzczODksIDEwMjgyLCAxMDI4NywgMTAyOTMsIDM3Mzk0LCAzNzQwNCwgMzc0MDgsIDEwMjk4LCAKLSAgICAzNzQxMywgMTY4OTAsIDM3NDE2LCAzNzQyMSwgMzc0MjUsIDM3NDMwLCAzNzQzNSwgMzc0NDIsIDM3NDQ5LCAzNzQ1MywgCi0gICAgMzc0NTYsIDM3NDY0LCAxMDIwMSwgMzc0NzEsIDM3NDc0LCAzNzQ4MCwgMzc0OTAsIDU5MjksIDM3NDk5LCAzNzUwMywgCi0gICAgMzc1MTEsIDM3NTE1LCAzNzUyNSwgMzc1MzEsIDM3NTQyLCAzNzU0OCwgMzc1NTQsIDM3NTU5LCAzNzU2NSwgMzc1NzEsIAotICAgIDM3NTc3LCAzNzU4MiwgMzc1ODUsIDM3NTkyLCAzNzU5OCwgMzc2MDMsIDM3NjEwLCAzNzYxNywgMzc2MjEsIDM3NjMxLCAKLSAgICAzNzY0NCwgMzc2NTMsIDM3NjYyLCAzNzY3MywgMzc2ODYsIDM3Njk3LCAzNzcwNiwgMzc3MTcsIDM3NzIyLCAzNzczMSwgCi0gICAgMzc3MzYsIDEwMzAzLCAzNzc0MiwgMzc3NDksIDM3NzU3LCAzNzc2MiwgMzc3NjYsIDM3NzczLCAzNzc4MCwgMzgyOSwgMTYsIAotICAgIDM3Nzg0LCAzNzc4OSwgMTY3NDQsIDM3NzkzLCAzNzc5NiwgMzc3OTksIDI4MDU2LCAzNzgwMywgMjg1NTksIDM3ODExLCAKLSAgICAzNzgxNSwgMzc4MTksIDM3ODIyLCAzNzgyOCwgMzcwNzIsIDM3ODM0LCAzNzg0MiwgMzc4NDgsIDM3ODU1LCAyODAzOSwgCi0gICAgMzc4NTksIDI4MjMzLCAzNzg2MywgMzc4NzIsIDM3ODc4LCAzNzg4NCwgMzc4ODksIDM3ODkzLCAzNzg5OSwgMzc5MDMsIAotICAgIDM3OTExLCAzNzkxOSwgMjYxNzcsIDM3OTI1LCAzNzkzMiwgMzc5MzgsIDM3OTQzLCAzNzk0OCwgMzc5NTIsIDM3OTU4LCAKLSAgICAzNzk2MywgMzc5NjksIDQwNTYsIDc5MSwgMzc5NzYsIDM3OTgwLCAzNzk4MywgMTUyNjIsIDM3OTk1LCAzNTgyNiwgMzgwMDYsIAotICAgIDM4MDA5LCAzODAxNiwgMzgwMjAsIDM4MDI2LCAzODAzMCwgMzgwMzYsIDM4MDQxLCAzODA0NywgMzgwNTIsIDM4MDU3LCAKLSAgICAzODA2MSwgMzgwNjUsIDM4MDcwLCAzODA3NSwgMzgwODUsIDM4MDkxLCAzODEwNCwgMzgxMTAsIDM4MTE2LCAzODEyMywgCi0gICAgMzgxMjgsIDM4MTM0LCAzODEzOSwgMTY2MzAsIDE0NzIsIDEwMTksIDMxMTkzLCAzMTE5OSwgMzgxNDQsIDMxMjA1LCAKLSAgICAzMTIxOCwgMzEyMjQsIDMxMjMwLCAzODE1MCwgMzEyMzYsIDMxMjQyLCAzODE1NiwgMzgxNjIsIDIyLCAzODE3MCwgMzgxNzcsIAotICAgIDM4MTgxLCAzODE4NSwgMzgxOTMsIDMxOTUzLCAzODE5NywgMzgyMDEsIDM4MjA4LCAzODIxMywgMzgyMTcsIDM4MjIyLCAKLSAgICAzODIyOCwgMzgyMzMsIDM4MjM5LCAzODI0NCwgMzgyNDgsIDM4MjUyLCAzODI1NiwgMzgyNjEsIDM4MjY1LCAzODI3MCwgCi0gICAgMzgyNzQsIDM4MjgxLCAzODI4NiwgMzgyOTAsIDM4Mjk1LCAzODI5OSwgMzgzMDQsIDM4MzA4LCAzODMxMywgMzgzMTksIAotICAgIDE1NDgyLCAxNTQ4NywgMzgzMjQsIDM4MzI4LCAzODMzMSwgMzgzMzUsIDIxMTcwLCAzODM0MCwgMzgzNDQsIDM4MzUwLCAKLSAgICAzODM1NywgMzgzNjIsIDM4MzcyLCAzODM3NywgMzgzODUsIDM4Mzg5LCAzODM5MiwgMzE5NjgsIDM4Mzk2LCA0MTA5LCAKLSAgICAzODQwMSwgMzg0MDYsIDM4NDEwLCAzODQxNSwgMzg0MTksIDM4NDI0LCAxMzM2OCwgMzg0MzUsIDM4NDM5LCAzODQ0MiwgCi0gICAgMzg0NDcsIDM4NDUxLCAzODQ1NSwgMzg0NTgsIDM4NDYyLCA4MTQ1LCAxMzM4NCwgMzg0NjUsIDM4NDY4LCAzODQ3NCwgCi0gICAgMzg0NzksIDM4NDg1LCAzODQ5MCwgMzg0OTYsIDM4NTAxLCAzODUwNywgMzg1MTIsIDM4NTE4LCAzODUyNCwgMzg1MzAsIAotICAgIDM4NTM1LCAzODUzOSwgMzg1NDMsIDM4NTUyLCAzODU2OCwgMzg1ODQsIDM4NTk0LCAyNzk0NiwgMzg2MDEsIDM4NjA1LCAKLSAgICAzODYxMCwgMzg2MTUsIDM4NjE5LCAzODYyMywgMzU5NDcsIDM4NjI5LCAzODYzNCwgMzg2MzgsIDM4NjQ1LCAzODY1MCwgCi0gICAgMzg2NTQsIDM4NjU4LCAyNjk3OSwgMzg2NjQsIDIxNDM4LCAzODY2OSwgMzg2NzYsIDM4Njg0LCAzODY5MCwgMzg2OTcsIAotICAgIDM4NzA1LCAzODcxMSwgMzg3MTUsIDM4NzIxLCAzODcyOSwgMzg3MzMsIDM4NzQyLCA5NTAyLCAzODc1MCwgMzg3NTQsIAotICAgIDM4NzYyLCAzODc2OSwgMzg3NzQsIDM4Nzc5LCAzODc4MywgMzg3ODYsIDM4NzkwLCAzODc5MywgMzg3OTcsIDM4ODA0LCAKLSAgICAzODgwOSwgMzg4MTUsIDI2Mzk4LCAzMTI1NiwgMzg4MTksIDM4ODI2LCAzODgzMiwgMzg4MzgsIDM4ODQzLCAzODg0NiwgCi0gICAgMzg4NDgsIDM4ODU1LCAzODg2MiwgMzg4NjgsIDM4ODcyLCAzODg3NSwgMzg4NzksIDM4ODgzLCAzODg4NywgMzg4OTIsIAotICAgIDM4ODk2LCAzODkwMCwgMzg5MDMsIDM4OTA3LCAzODkyMSwgMjMwNDUsIDM4OTQwLCAzODk1MywgMzg5NjYsIDM4OTc5LCAKLSAgICAyMzA2MywgMzg5OTQsIDEwNDkwLCAzOTAwOSwgMzkwMTUsIDM5MDE5LCAzOTAyMywgMzkwMzAsIDM5MDM1LCAzOTAzOSwgCi0gICAgMzkwNDYsIDM5MDUyLCAzOTA1NywgMzkwNjMsIDM5MDczLCAzOTA4NSwgMzkwOTYsIDM5MTAxLCAzOTEwOCwgMzkxMTIsIAotICAgIDM5MTE2LCAzOTExOSwgMTU4NzgsIDM2NzcsIDM5MTI3LCAxNTUwOSwgMzkxNDAsIDM5MTQ3LCAzOTE1MSwgMzkxNTUsIAotICAgIDM5MTYwLCAzOTE2NSwgMzkxNzEsIDM5MTc1LCAzOTE3OSwgMzkxODIsIDc3NDIsIDE1NTIwLCAzOTE4NywgMzkxOTEsIAotICAgIDM5MTk3LCAzOTIwNiwgMzkyMTEsIDM5MjE4LCAzNTgwMywgMzkyMjQsIDM5MjI5LCAzOTIzMywgMzkyMzgsIDM5MjQ1LCAKLSAgICAzOTI0OSwgMzkyNTIsIDM5MjU2LCAzOTI2MSwgMTQ1NTIsIDM5MjY4LCAzOTI3NSwgMTA2NiwgMzkyNzksIDM5Mjg0LCAKLSAgICAzOTI4OSwgMzkyOTUsIDM5MzAwLCAzOTMwNSwgMzkzMDksIDM5MzE5LCAzOTMyNCwgMzkzMzAsIDM5MzM1LCAzOTM0MSwgCi0gICAgMzkzNDYsIDM5MzUyLCAzOTM2MiwgMzkzNjcsIDM5MzcyLCAzOTM3NiwgNzIyOSwgNzI0MSwgMzkzODEsIDM5Mzg0LCAKLSAgICAzOTM5MSwgMzkzOTcsIDM0MDU5LCAzNDA2NiwgMzk0MDYsIDM5NDEwLCAzMjAxNiwgMzk0MTgsIDM5NDI5LCAzOTQzNywgCi0gICAgMzU5OTUsIDM5NDQ0LCAzOTQ0OSwgMzk0NTQsIDM5NDY1LCAzOTQ3MiwgMzk0ODMsIDMyMDQwLCAyMTQ0NCwgMzk0OTEsIAotICAgIDczNSwgMzk0OTYsIDM5NTAyLCAyODAzMCwgMzk1MDgsIDM5NTEzLCAzOTUyMywgMzk1MzIsIDM5NTM5LCAzOTU0NSwgCi0gICAgMzk1NDksIDM5NTUyLCAzOTU1OSwgMzk1NjUsIDM5NTcyLCAzOTU3OCwgMzk1ODgsIDM5NTk2LCAzOTYwMiwgMzk2MDgsIAotICAgIDM5NjEzLCAzOTYxNywgMzk2MjQsIDM5NjMwLCAzOTYzNywgMzg4ODgsIDUzNSwgMTM4MDUsIDM5NjQzLCAzOTY0OCwgCi0gICAgMzk2NTEsIDM5NjU3LCAzOTY2NSwgMTM5NiwgMzk2NzAsIDM5Njc0LCAzOTY3OSwgMzk2ODYsIDM5NjkyLCAzOTY5NiwgCi0gICAgMzk3MDAsIDM5NzA1LCAzOTcxNCwgMzk3MjEsIDM5NzMxLCAzOTczNywgMjgwNzQsIDM5NzU0LCAzOTc2MywgMzk3NzEsIAotICAgIDM5Nzc3LCAzOTc4MiwgMzk3ODksIDM5Nzk1LCAzOTgwMywgMzk4MTIsIDM5ODIwLCAzOTgyNCwgMzk4MjksIDM5ODM3LCAKLSAgICAzMjA0OSwgMzk4NDMsIDM5ODYyLCAxNTgxMSwgMzk4NzYsIDM5ODkyLCAzOTkwNiwgMzk5MTIsIDM5OTE3LCAzOTkyMiwgCi0gICAgMzk5MjcsIDM5OTMzLCAzMjA1NSwgMzk5MzgsIDM5OTQ1LCAzOTk1MCwgMzk5NTQsIDM0NSwgMjkzNiwgMzk5NjEsIDM5OTY2LCAKLSAgICAzOTk3MSwgMjczMDUsIDM5NzkyLCAzOTk3NSwgMzk5ODAsIDM5OTg4LCAzOTk5MiwgMzk5OTUsIDQwMDAxLCA0MDAwNywgCi0gICAgNDAwMTEsIDI4MTI5LCA0MDAxNCwgNDAwMTksIDQwMDIzLCA0MDAyNiwgNDAwMzEsIDQwMDM1LCA0MDA0MCwgNDAwNDUsIAotICAgIDQwMDQ5LCA0MDA1NCwgNDAwNTgsIDQwMDYyLCAyMTE2NiwgMjExNzcsIDQwMDY2LCA0MDA3MSwgNDAwNzcsIDI2OTM2LCAKLSAgICA0MDA4MiwgNDAwODYsIDIxMjUzLCAxNjA1OSwgNDAwODksIDQwMDk0LCA0MDA5OSwgNDAxMDQsIDQwMTA5LCA0MDExNCwgCi0gICAgNDAxMTksIDQwMTI0LCA0NDcsIDQzLCAzMTI3NCwgMzEyNzksIDMxMjg0LCAzMTI5MCwgMzEyOTUsIDMxMzAwLCA0MDEyOSwgCi0gICAgMzEzMDQsIDQwMTMzLCA0MDEzNywgNDAxNDEsIDMxMzA5LCAzMTMxNSwgNDAxNTUsIDMxMzI2LCAzMTMzMSwgNDAxNjMsIAotICAgIDQwMTY4LCAzMTMzNywgNDAxNzMsIDQwMTc4LCA0MDE4MywgNDAxODgsIDQwMTk0LCA0MDIwMCwgNDAyMDYsIDMxMzU0LCAKLSAgICA0MDIxOSwgNDAyMjUsIDMxMzU4LCA0MDIyOSwgMzEzNjMsIDQwMjM0LCAzMTM2OCwgMzEzNzMsIDQwMjM3LCA0MDI0MiwgCi0gICAgNDAyNDYsIDMwOTIzLCA0MDI1MiwgMTM1OTIsIDQwMjU5LCA0MDI2NCwgMzEzNzgsIDQwMjY4LCA0MDI3MywgNDAyNzgsIAotICAgIDQwMjgzLCA0MDI4NywgNDAyOTIsIDQwMjk3LCA0MDMwMywgNDAzMDgsIDQwMzEzLCA0MDMxOSwgNDAzMjUsIDQwMzMwLCAKLSAgICA0MDMzNCwgNDAzMzksIDQwMzQ0LCA0MDM0OSwgNDAzNTMsIDQwMzU4LCA0MDM2MywgNDAzNjgsIDQwMzc0LCA0MDM4MCwgCi0gICAgNDAzODYsIDQwMzkxLCA0MDM5NSwgNDA0MDAsIDQwNDA0LCAzMTM4MiwgMzEzODcsIDMxMzkyLCA0MDQwOCwgNDA0MTIsIAotICAgIDQwNDE2LCAzMTM5NywgMzE0MDMsIDMxNDA5LCAzMTQyMSwgNDA0MjgsIDI1OTk2LCA0MDQzMiwgNDA0MzYsIDQwNDQxLCAKLSAgICA0MDQ0NiwgNDA0NTEsIDQwNDU2LCA0MDQ2MCwgNDA0NjQsIDQwNDc0LCA0MDQ3OSwgNDA0ODQsIDQwNDg4LCA0MDQ5MiwgCi0gICAgNDA0OTUsIDQwNTAzLCAzMTQ2OSwgNDA1MDgsIDE0NzksIDQwNTE0LCA0MDUyMiwgNDA1MzEsIDQwNTM1LCA0MDUzOSwgCi0gICAgNDA1NDcsIDQwNTUzLCA0MDU2MSwgNDA1NzcsIDQwNTgxLCA0MDU4NSwgNDA1OTAsIDQwNjA1LCAzMTUwNiwgMTc0OSwgCi0gICAgMTIwNDgsIDQwNjA5LCAxMzc4LCA0MDYyMSwgNDA2MjIsIDQwNjMwLCA0MDYzNywgNDA2NDIsIDQwNjQ5LCA0MDY1NCwgCi0gICAgOTM3MiwgMTExNCwgMTAzMjUsIDQwNjYxLCA0MDY2NiwgNDA2NjksIDQwNjcyLCA0MDY4MSwgMTI4NiwgNDA2ODYsIDM5MDM2LCAKLSAgICA0MDY5MywgNDA2OTgsIDIyNDg2LCAyNTU3LCA0MDcwMiwgMTA3MzQsIDQwNzEyLCA0MDcxOCwgMjMzNywgMjM0NywgNDA3MjcsIAotICAgIDQwNzM2LCA0MDc0NiwgNDA3NTcsIDMyOTMsIDM0MjEyLCAxMDM3NywgMzgwNywgMTY2NjgsIDEyOTEsIDQwNzYyLCA0MDc3MCwgCi0gICAgNDA3NzcsIDQwNzgyLCA0MDc4NiwgNDA3OTAsIDIzODU4LCAxMDQwNCwgNDA3OTgsIDQwODA3LCA0MDgxNiwgNDA4MjQsIAotICAgIDQwODMxLCA0MDg0MiwgNDA4NDcsIDQwODYwLCA0MDg3MywgNDA4ODUsIDQwODk3LCA0MDkwOSwgNDA5MjIsIDQwOTMzLCAKLSAgICA0MDk0NCwgNDA5NTQsIDQwOTYyLCA0MDk3MCwgNDA5ODIsIDQwOTk0LCA0MTAwNSwgNDEwMTQsIDQxMDIyLCA0MTAyOSwgCi0gICAgNDEwNDEsIDQxMDQ4LCA0MTA1NywgNDEwNjQsIDQxMDc3LCA0MTA4MiwgNDEwOTIsIDQxMDk3LCA0MTEwMywgNDExMDgsIAotICAgIDM3MTgyLCA0MTExMiwgNDExMTksIDQxMTIzLCA0MTEzMCwgNDExMzgsIDI1MTgsIDQxMTQ1LCA0MTE1NiwgNDExNjYsIAotICAgIDQxMTc1LCA0MTE4MywgNDExOTMsIDQxMjAxLCA0MTIxMSwgNDEyMjAsIDQxMjI1LCA0MTIzMSwgNDEyMzcsIDM3MDksIAotICAgIDQxMjQ4LCA0MTI1OCwgNDEyNjcsIDQxMjc2LCA0MTI4NiwgNDEyOTQsIDQxMzAzLCA0MTMwOCwgNDEzMTMsIDQxMzE4LCAKLSAgICAxNzA1LCAzNywgNDEzMjYsIDQxMzM0LCA0MTM0NSwgNDEzNTYsIDE2MzQzLCA0MTM2NiwgNDEzNzAsIDQxMzc3LCA0MTM4MywgCi0gICAgNDEzODgsIDQxMzkyLCA0MTQwMywgNDE0MTMsIDQxNDIyLCA0MTQzMywgMTY3MTcsIDE2NzIyLCA0MTQzOCwgNDE0NDcsIAotICAgIDQxNDUyLCA0MTQ2MiwgNDE0NjcsIDQxNDc1LCA0MTQ4MywgNDE0OTAsIDQxNDk2LCA3MDc4LCAyMjgsIDQxNTAwLCA0MTUwNiwgCi0gICAgNDE1MTEsIDQxNTE0LCAyMTE3LCAzOTE1MiwgNDE1MjIsIDQxNTI2LCA0MTUyOSwgMTUxMiwgNDE1MzUsIDEzOTY3LCAxMjk2LCAKLSAgICA0MTU0MCwgNDE1NTMsIDQxNTY3LCAyNjQzLCA0MTU4NSwgNDE1OTcsIDQxNjA5LCAyNjU3LCAyNjc0LCA0MTYyMywgNDE2MzYsIAotICAgIDI2ODksIDQxNjUwLCA0MTY2MiwgMjcwNCwgNDE2NzYsIDEzMDIsIDEzMDgsIDEzMTQsIDEwNjUyLCA0MTY4MSwgNDE2ODYsIAotICAgIDQxNjkxLCA0MTY5NSwgNDE3MTAsIDQxNzI1LCA0MTc0MCwgNDE3NTUsIDQxNzcwLCA0MTc4NSwgNDE4MDAsIDQxODE1LCAKLSAgICA0MTgzMCwgNDE4NDUsIDQxODYwLCA0MTg3NSwgNDE4OTAsIDQxOTA1LCA0MTkyMCwgNDE5MzUsIDQxOTUwLCA0MTk2NSwgCi0gICAgNDE5ODAsIDQxOTk1LCA0MjAxMCwgNDIwMjUsIDQyMDQwLCA0MjA1NSwgNDIwNzAsIDQyMDg1LCA0MjEwMCwgNDIxMTUsIAotICAgIDQyMTMwLCA0MjE0NSwgNDIxNjAsIDQyMTc1LCA0MjE5MCwgNDIyMDUsIDQyMjIwLCA0MjIzNSwgNDIyNTAsIDQyMjY1LCAKLSAgICA0MjI4MCwgNDIyOTUsIDQyMzEwLCA0MjMyNSwgNDIzNDAsIDQyMzU1LCA0MjM3MCwgNDIzODUsIDQyNDAwLCA0MjQxNSwgCi0gICAgNDI0MzAsIDQyNDQ1LCA0MjQ2MCwgNDI0NzUsIDQyNDkwLCA0MjUwNSwgNDI1MjAsIDQyNTM1LCA0MjU1MCwgNDI1NjUsIAotICAgIDQyNTgwLCA0MjU5NSwgNDI2MTAsIDQyNjI1LCA0MjY0MCwgNDI2NTUsIDQyNjcwLCA0MjY4NSwgNDI3MDAsIDQyNzE1LCAKLSAgICA0MjczMCwgNDI3NDUsIDQyNzYwLCA0Mjc3NSwgNDI3OTAsIDQyODA1LCA0MjgyMCwgNDI4MzUsIDQyODUwLCA0Mjg2NSwgCi0gICAgNDI4ODAsIDQyODk1LCA0MjkxMCwgNDI5MjUsIDQyOTQwLCA0Mjk1NSwgNDI5NzAsIDQyOTg1LCA0MzAwMCwgNDMwMTUsIAotICAgIDQzMDMwLCA0MzA0NSwgNDMwNjAsIDQzMDc1LCA0MzA5MCwgNDMxMDUsIDQzMTIwLCA0MzEzNSwgNDMxNTAsIDQzMTY1LCAKLSAgICA0MzE4MCwgNDMxOTUsIDQzMjEwLCA0MzIyNSwgNDMyNDAsIDQzMjU1LCA0MzI3MCwgNDMyODUsIDQzMzAwLCA0MzMxNSwgCi0gICAgNDMzMzAsIDQzMzQ1LCA0MzM2MCwgNDMzNzUsIDQzMzkwLCA0MzQwNSwgNDM0MjAsIDQzNDM1LCA0MzQ1MCwgNDM0NjUsIAotICAgIDQzNDgwLCA0MzQ5NSwgNDM1MTAsIDQzNTI1LCA0MzU0MCwgNDM1NTUsIDQzNTcwLCA0MzU4NSwgNDM2MDAsIDQzNjE1LCAKLSAgICA0MzYzMCwgNDM2NDUsIDQzNjYwLCA0MzY3NSwgNDM2OTAsIDQzNzA1LCA0MzcyMCwgNDM3MzUsIDQzNzUwLCA0Mzc2NSwgCi0gICAgNDM3ODAsIDQzNzk1LCA0MzgxMCwgNDM4MjUsIDQzODQwLCA0Mzg1NSwgNDM4NzAsIDQzODg1LCA0MzkwMCwgNDM5MTUsIAotICAgIDQzOTMwLCA0Mzk0NSwgNDM5NjAsIDQzOTc1LCA0Mzk5MCwgNDQwMDUsIDQ0MDIwLCA0NDAzNSwgNDQwNTAsIDQ0MDY1LCAKLSAgICA0NDA4MCwgNDQwOTUsIDQ0MTEwLCA0NDEyNSwgNDQxNDAsIDQ0MTU1LCA0NDE3MCwgNDQxODUsIDQ0MjAwLCA0NDIxNSwgCi0gICAgNDQyMzAsIDQ0MjQ1LCA0NDI2MCwgNDQyNzUsIDQ0MjkwLCA0NDMwNSwgNDQzMjAsIDQ0MzM1LCA0NDM1MCwgNDQzNjUsIAotICAgIDQ0MzgwLCA0NDM5NSwgNDQ0MTAsIDQ0NDI1LCA0NDQ0MCwgNDQ0NTUsIDQ0NDcwLCA0NDQ4NSwgNDQ1MDAsIDQ0NTE1LCAKLSAgICA0NDUzMCwgNDQ1NDUsIDQ0NTYwLCA0NDU3NSwgNDQ1OTAsIDQ0NjA1LCA0NDYyMCwgNDQ2MzUsIDQ0NjUwLCA0NDY2NSwgCi0gICAgNDQ2ODAsIDQ0Njk1LCA0NDcxMCwgNDQ3MjUsIDQ0NzQwLCA0NDc1NSwgNDQ3NzAsIDQ0Nzg1LCA0NDgwMCwgNDQ4MTUsIAotICAgIDQ0ODMwLCA0NDg0NSwgNDQ4NjAsIDQ0ODc1LCA0NDg5MCwgNDQ5MDUsIDQ0OTIwLCA0NDkzNSwgNDQ5NTAsIDQ0OTY1LCAKLSAgICA0NDk4MCwgNDQ5OTUsIDQ1MDEwLCA0NTAyNSwgNDUwNDAsIDQ1MDU1LCA0NTA3MCwgNDUwODUsIDQ1MTAwLCA0NTExNSwgCi0gICAgNDUxMzAsIDQ1MTQ1LCA0NTE2MCwgNDUxNzUsIDQ1MTkwLCA0NTIwNSwgNDUyMjAsIDQ1MjM1LCA0NTI1MCwgNDUyNjUsIAotICAgIDQ1MjgwLCA0NTI5NSwgNDUzMTAsIDQ1MzI1LCA0NTM0MCwgNDUzNTUsIDQ1MzcwLCA0NTM4NSwgNDU0MDAsIDQ1NDE1LCAKLSAgICA0NTQzMCwgNDU0NDUsIDQ1NDYwLCA0NTQ3NSwgNDU0OTAsIDQ1NTA1LCA0NTUyMCwgNDU1MzUsIDQ1NTUwLCA0NTU2NSwgCi0gICAgNDU1ODAsIDQ1NTk1LCA0NTYxMCwgNDU2MjUsIDQ1NjQwLCA0NTY1NSwgNDU2NzAsIDQ1Njg1LCA0NTcwMCwgNDU3MTUsIAotICAgIDQ1NzMwLCA0NTc0NSwgNDU3NjAsIDQ1Nzc1LCA0NTc5MCwgNDU4MDUsIDQ1ODIwLCA0NTgzNSwgNDU4NTAsIDQ1ODY1LCAKLSAgICA0NTg4MCwgNDU4OTUsIDQ1OTEwLCA0NTkyNSwgNDU5NDAsIDQ1OTU1LCA0NTk3MCwgNDU5ODUsIDQ2MDAwLCA0NjAxNSwgCi0gICAgNDYwMzAsIDQ2MDQ1LCA0NjA2MCwgNDYwNzUsIDQ2MDkwLCA0NjEwNSwgNDYxMjAsIDQ2MTM1LCA0NjE1MCwgNDYxNjUsIAotICAgIDQ2MTgwLCA0NjE5NSwgNDYyMTAsIDQ2MjI1LCA0NjI0MCwgNDYyNTUsIDQ2MjcwLCA0NjI4NSwgNDYzMDAsIDQ2MzE1LCAKLSAgICA0NjMzMCwgNDYzNDUsIDQ2MzYwLCA0NjM3NSwgNDYzOTAsIDQ2NDA1LCA0NjQyMCwgNDY0MzUsIDQ2NDUwLCA0NjQ2NSwgCi0gICAgNDY0ODAsIDQ2NDk1LCA0NjUxMCwgNDY1MjUsIDQ2NTQwLCA0NjU1NSwgNDY1NzAsIDQ2NTg1LCA0NjYwMCwgNDY2MTUsIAotICAgIDQ2NjMwLCA0NjY0NSwgNDY2NjAsIDQ2Njc1LCA0NjY5MCwgNDY3MDUsIDQ2NzIwLCA0NjczNSwgNDY3NTAsIDQ2NzY1LCAKLSAgICA0Njc4MCwgNDY3OTUsIDQ2ODEwLCA0NjgyNSwgNDY4NDAsIDQ2ODU1LCA0Njg3MCwgNDY4ODUsIDQ2OTAwLCA0NjkxNSwgCi0gICAgNDY5MzAsIDQ2OTQ1LCA0Njk2MCwgNDY5NzUsIDQ2OTkwLCA0NzAwNSwgNDcwMjAsIDQ3MDM1LCA0NzA1MCwgNDcwNjUsIAotICAgIDQ3MDgwLCA0NzA5NSwgNDcxMTAsIDQ3MTI1LCA0NzE0MCwgNDcxNTUsIDQ3MTcwLCA0NzE4NSwgNDcyMDAsIDQ3MjE1LCAKLSAgICA0NzIzMCwgNDcyNDUsIDQ3MjYwLCA0NzI3NSwgNDcyOTAsIDQ3MzA1LCA0NzMyMCwgNDczMzUsIDQ3MzUwLCA0NzM2NSwgCi0gICAgNDczODAsIDQ3Mzk1LCA0NzQxMCwgNDc0MjUsIDQ3NDQwLCA0NzQ1NSwgNDc0NzAsIDQ3NDg1LCA0NzUwMCwgNDc1MTUsIAotICAgIDQ3NTMwLCA0NzU0NSwgNDc1NjAsIDQ3NTc1LCA0NzU5MCwgNDc2MDUsIDQ3NjIwLCA0NzYzNSwgNDc2NTAsIDQ3NjY1LCAKLSAgICA0NzY4MCwgNDc2OTUsIDQ3NzEwLCA0NzcyNSwgNDc3NDAsIDQ3NzU1LCA0Nzc3MCwgNDc3ODUsIDQ3ODAwLCA0NzgxNSwgCi0gICAgNDc4MzAsIDQ3ODQ1LCA0Nzg2MCwgNDc4NzUsIDQ3ODkwLCA0NzkwNSwgNDc5MjAsIDQ3OTM1LCA0Nzk1MCwgNDc5NjUsIAotICAgIDQ3OTgwLCA0Nzk5NSwgNDgwMTAsIDQ4MDI1LCA0ODA0MCwgNDgwNTUsIDQ4MDcwLCA0ODA4NSwgNDgxMDAsIDQ4MTE1LCAKLSAgICA0ODEzMCwgNDgxNDUsIDQ4MTYwLCA0ODE3NSwgNDgxOTAsIDQ4MjA1LCA0ODIyMCwgNDgyMzUsIDQ4MjUwLCA0ODI2NSwgCi0gICAgNDgyODAsIDQ4Mjk1LCA0ODMxMCwgNDgzMjUsIDQ4MzQwLCA0ODM1NSwgNDgzNzAsIDQ4Mzg1LCA0ODQwMCwgNDg0MTUsIAotICAgIDQ4NDMwLCA0ODQ0NSwgNDg0NjAsIDQ4NDc1LCA0ODQ5MCwgNDg1MDUsIDQ4NTIwLCA0ODUzNSwgNDg1NTAsIDQ4NTY1LCAKLSAgICA0ODU4MCwgNDg1OTUsIDQ4NjEwLCA0ODYyNSwgNDg2NDAsIDQ4NjU1LCA0ODY3MCwgNDg2ODUsIDQ4NzAwLCA0ODcxNSwgCi0gICAgNDg3MzAsIDQ4NzQ1LCA0ODc2MCwgNDg3NzUsIDQ4NzkwLCA0ODgwNSwgNDg4MjAsIDQ4ODM1LCA0ODg1MCwgNDg4NjUsIAotICAgIDQ4ODgwLCA0ODg5NSwgNDg5MTAsIDQ4OTI1LCA0ODk0MCwgNDg5NTUsIDQ4OTcwLCA0ODk4NSwgNDkwMDAsIDQ5MDE1LCAKLSAgICA0OTAzMCwgNDkwNDUsIDQ5MDYwLCA0OTA3NSwgNDkwOTAsIDQ5MTA1LCA0OTEyMCwgNDkxMzUsIDQ5MTUwLCA0OTE2NSwgCi0gICAgNDkxODAsIDQ5MTk1LCA0OTIxMCwgNDkyMjUsIDQ5MjQwLCA0OTI1NSwgNDkyNzAsIDQ5Mjg1LCA0OTMwMCwgNDkzMTUsIAotICAgIDQ5MzMwLCA0OTM0NSwgNDkzNjAsIDQ5Mzc1LCA0OTM5MCwgNDk0MDUsIDQ5NDIwLCA0OTQzNSwgNDk0NTAsIDQ5NDY1LCAKLSAgICA0OTQ4MCwgNDk0OTUsIDQ5NTExLCA0OTUyNywgNDk1NDMsIDQ5NTU5LCA0OTU3NSwgNDk1OTEsIDQ5NjA3LCA0OTYyMywgCi0gICAgNDk2MzksIDQ5NjU1LCA0OTY3MSwgNDk2ODcsIDQ5NzAzLCA0OTcxOSwgNDk3MzUsIDQ5NzUxLCA0OTc2NywgNDk3ODMsIAotICAgIDQ5Nzk5LCA0OTgxNSwgNDk4MzEsIDQ5ODQ3LCA0OTg2MywgNDk4NzksIDQ5ODk1LCA0OTkxMSwgNDk5MjcsIDQ5OTQzLCAKLSAgICA0OTk1OSwgNDk5NzUsIDQ5OTkxLCA1MDAwNywgNTAwMjMsIDUwMDM5LCA1MDA1NSwgNTAwNzEsIDUwMDg3LCA1MDEwMywgCi0gICAgNTAxMTksIDUwMTM1LCA1MDE1MSwgNTAxNjcsIDUwMTgzLCA1MDE5OSwgNTAyMTUsIDUwMjMxLCA1MDI0NywgNTAyNjMsIAotICAgIDUwMjc5LCA1MDI5NSwgNTAzMTEsIDUwMzI3LCA1MDM0MywgNTAzNTksIDUwMzc1LCA1MDM5MSwgNTA0MDcsIDUwNDIzLCAKLSAgICA1MDQzOSwgNTA0NTUsIDUwNDcxLCA1MDQ4NywgNTA1MDMsIDUwNTE5LCA1MDUzNSwgNTA1NTEsIDUwNTY3LCA1MDU4MywgCi0gICAgNTA1OTksIDUwNjE1LCA1MDYzMSwgNTA2NDcsIDUwNjYzLCA1MDY3OSwgNTA2OTUsIDUwNzExLCA1MDcyNywgNTA3NDMsIAotICAgIDUwNzU5LCA1MDc3NSwgNTA3OTEsIDUwODA3LCA1MDgyMywgNTA4MzksIDUwODU1LCA1MDg3MSwgNTA4ODcsIDUwOTAzLCAKLSAgICA1MDkxOSwgNTA5MzUsIDUwOTUxLCA1MDk2NywgNTA5ODMsIDUwOTk5LCA1MTAxNSwgNTEwMzEsIDUxMDQ3LCA1MTA2MywgCi0gICAgNTEwNzksIDUxMDk1LCA1MTExMSwgNTExMjcsIDUxMTQzLCA1MTE1OSwgNTExNzUsIDUxMTkxLCA1MTIwNywgNTEyMjMsIAotICAgIDUxMjM5LCA1MTI1NSwgNTEyNzEsIDUxMjg3LCA1MTMwMywgNTEzMTksIDUxMzM1LCA1MTM1MSwgNTEzNjcsIDUxMzgzLCAKLSAgICA1MTM5OSwgNTE0MTUsIDUxNDMxLCA1MTQ0NywgNTE0NjMsIDUxNDc5LCA1MTQ5NSwgNTE1MTEsIDUxNTI3LCA1MTU0MywgCi0gICAgNTE1NTksIDUxNTc1LCA1MTU5MSwgNTE2MDcsIDUxNjIzLCA1MTYzOSwgNTE2NTUsIDUxNjcxLCA1MTY4NywgNTE3MDMsIAotICAgIDUxNzE5LCA1MTczNSwgNTE3NTEsIDUxNzY3LCA1MTc4MywgNTE3OTksIDUxODE1LCA1MTgzMSwgNTE4NDcsIDUxODYzLCAKLSAgICA1MTg3OSwgNTE4OTUsIDUxOTExLCA1MTkyNywgNTE5NDMsIDUxOTU5LCA1MTk3NSwgNTE5OTEsIDUyMDA3LCA1MjAyMywgCi0gICAgNTIwMzksIDUyMDU1LCA1MjA3MSwgNTIwODcsIDUyMTAzLCA1MjExOSwgNTIxMzUsIDUyMTUxLCA1MjE2NywgNTIxODMsIAotICAgIDUyMTk5LCA1MjIxNSwgNTIyMzEsIDUyMjQ3LCA1MjI2MywgNTIyNzksIDUyMjk1LCA1MjMxMSwgNTIzMjcsIDUyMzQzLCAKLSAgICA1MjM1OSwgNTIzNzUsIDUyMzkxLCA1MjQwNywgNTI0MjMsIDUyNDM5LCA1MjQ1NSwgNTI0NzEsIDUyNDg3LCA1MjUwMywgCi0gICAgNTI1MTksIDUyNTM1LCA1MjU1MSwgNTI1NjcsIDUyNTgzLCA1MjU5OSwgNTI2MTUsIDUyNjMxLCA1MjY0NywgNTI2NjMsIAotICAgIDUyNjc5LCA1MjY5NSwgNTI3MTEsIDUyNzI3LCA1Mjc0MywgNTI3NTksIDUyNzc1LCA1Mjc5MSwgNTI4MDcsIDUyODIzLCAKLSAgICA1MjgzOSwgNTI4NTUsIDUyODcxLCA1Mjg4NywgNTI5MDMsIDUyOTE5LCA1MjkzNSwgNTI5NTEsIDUyOTY3LCA1Mjk4MywgCi0gICAgNTI5OTksIDUzMDE1LCA1MzAzMSwgNTMwNDcsIDUzMDYzLCA1MzA3OSwgNTMwOTUsIDUzMTExLCA1MzEyNywgNTMxNDMsIAotICAgIDUzMTU5LCA1MzE3NSwgNTMxOTEsIDUzMjA3LCA1MzIyMywgNTMyMzksIDUzMjU1LCA1MzI3MSwgNTMyODcsIDUzMzAzLCAKLSAgICA1MzMxOSwgNTMzMzUsIDUzMzUxLCA1MzM2NywgNTMzODMsIDUzMzk5LCA1MzQxNSwgNTM0MzEsIDUzNDQ3LCA1MzQ2MywgCi0gICAgNTM0NzksIDUzNDk1LCA1MzUxMSwgNTM1MjcsIDUzNTQzLCA1MzU1OSwgNTM1NzUsIDUzNTkxLCA1MzYwNywgNTM2MjMsIAotICAgIDUzNjM5LCA1MzY1NSwgNTM2NzEsIDUzNjg3LCA1MzcwMywgNTM3MTksIDUzNzM1LCA1Mzc1MSwgNTM3NjcsIDUzNzgzLCAKLSAgICA1Mzc5OSwgNTM4MTUsIDUzODMxLCA1Mzg0NywgNTM4NjMsIDUzODc5LCA1Mzg5NSwgNTM5MTEsIDUzOTI3LCA1Mzk0MywgCi0gICAgNTM5NTksIDUzOTc1LCA1Mzk5MSwgNTQwMDcsIDU0MDIzLCA1NDAzOSwgNTQwNTUsIDU0MDcxLCA1NDA4NywgNTQxMDMsIAotICAgIDU0MTE5LCA1NDEzNSwgNTQxNTEsIDU0MTY3LCA1NDE4MywgNTQxOTksIDU0MjE1LCA1NDIzMSwgNTQyNDcsIDU0MjYzLCAKLSAgICA1NDI3OSwgNTQyOTUsIDU0MzExLCA1NDMyNywgNTQzNDMsIDU0MzU5LCA1NDM3NSwgNTQzOTEsIDU0NDA3LCA1NDQyMywgCi0gICAgNTQ0MzksIDU0NDU1LCA1NDQ3MSwgNTQ0ODcsIDU0NTAzLCA1NDUxOSwgNTQ1MzUsIDU0NTUxLCA1NDU2NywgNTQ1ODMsIAotICAgIDU0NTk5LCA1NDYxNSwgNTQ2MzEsIDU0NjQ3LCA1NDY2MywgNTQ2NzksIDU0Njk1LCA1NDcxMSwgNTQ3MjcsIDU0NzQzLCAKLSAgICA1NDc1OSwgNTQ3NzUsIDU0NzkxLCA1NDgwNywgNTQ4MjMsIDU0ODM5LCA1NDg1NSwgNTQ4NzEsIDU0ODg3LCA1NDkwMywgCi0gICAgNTQ5MTksIDU0OTM1LCA1NDk1MSwgNTQ5NjcsIDU0OTgzLCA1NDk5OSwgNTUwMTUsIDU1MDMxLCA1NTA0NywgNTUwNjMsIAotICAgIDU1MDc5LCA1NTA5NSwgNTUxMTEsIDU1MTI3LCA1NTE0MywgNTUxNTksIDU1MTc1LCA1NTE5MSwgNTUyMDcsIDU1MjIzLCAKLSAgICA1NTIzOSwgNTUyNTUsIDU1MjcxLCA1NTI4NywgNTUzMDMsIDU1MzE5LCA1NTMzNSwgNTUzNTEsIDU1MzY3LCA1NTM4MywgCi0gICAgNTUzOTksIDU1NDE1LCA1NTQzMSwgNTU0NDcsIDU1NDYzLCA1NTQ3OSwgNTU0OTUsIDU1NTExLCA1NTUyNywgNTU1NDMsIAotICAgIDU1NTU5LCA1NTU3NSwgNTU1OTEsIDU1NjA3LCA1NTYyMywgNTU2MzksIDU1NjU1LCA1NTY3MSwgNTU2ODcsIDU1NzAzLCAKLSAgICA1NTcxOSwgNTU3MzUsIDU1NzUxLCA1NTc2NywgNTU3ODMsIDU1Nzk5LCA1NTgxNSwgNTU4MzEsIDU1ODQ3LCA1NTg2MywgCi0gICAgNTU4NzksIDU1ODk1LCA1NTkxMSwgNTU5MjcsIDU1OTQzLCA1NTk1OSwgNTU5NzUsIDU1OTkxLCA1NjAwNywgNTYwMjMsIAotICAgIDU2MDM5LCA1NjA1NSwgNTYwNzEsIDU2MDg3LCA1NjEwMywgNTYxMTksIDU2MTM1LCA1NjE1MSwgNTYxNjcsIDU2MTgzLCAKLSAgICA1NjE5OSwgNTYyMTUsIDU2MjMxLCA1NjI0NywgNTYyNjMsIDU2Mjc5LCA1NjI5NSwgNTYzMTEsIDU2MzI3LCA1NjM0MywgCi0gICAgNTYzNTksIDU2Mzc1LCA1NjM5MSwgNTY0MDcsIDU2NDIzLCA1NjQzOSwgNTY0NTUsIDU2NDcxLCA1NjQ4NywgNTY1MDMsIAotICAgIDU2NTE5LCA1NjUzNSwgNTY1NTEsIDU2NTY3LCA1NjU4MywgNTY1OTksIDU2NjE1LCA1NjYzMSwgNTY2NDcsIDU2NjYzLCAKLSAgICA1NjY3OSwgNTY2OTUsIDU2NzExLCA1NjcyNywgNTY3NDMsIDU2NzU5LCA1Njc3NSwgNTY3OTEsIDU2ODA3LCA1NjgyMywgCi0gICAgNTY4MzksIDU2ODU1LCA1Njg3MSwgNTY4ODcsIDU2OTAzLCA1NjkxOSwgNTY5MzUsIDU2OTUxLCA1Njk2NywgNTY5ODMsIAotICAgIDU2OTk5LCA1NzAxNSwgNTcwMzEsIDU3MDQ3LCA1NzA2MywgNTcwNzksIDU3MDk1LCA1NzExMSwgNTcxMjcsIDU3MTQzLCAKLSAgICA1NzE1OSwgNTcxNzUsIDU3MTkxLCA1NzIwNywgNTcyMjMsIDU3MjM5LCA1NzI1NSwgNTcyNzEsIDU3Mjg3LCA1NzMwMywgCi0gICAgNTczMTksIDU3MzM1LCA1NzM1MSwgNTczNjcsIDU3MzgzLCA1NzM5OSwgNTc0MTUsIDU3NDMxLCA1NzQ0NywgNTc0NjMsIAotICAgIDU3NDc5LCA1NzQ5NSwgNTc1MTEsIDU3NTI3LCA1NzU0MywgNTc1NTksIDU3NTc1LCA1NzU5MSwgNTc2MDcsIDU3NjIzLCAKLSAgICA1NzYzOSwgNTc2NTUsIDU3NjcxLCA1NzY4NywgNTc3MDMsIDU3NzE5LCA1NzczNSwgNTc3NTEsIDU3NzY3LCA1Nzc4MywgCi0gICAgNTc3OTksIDU3ODE1LCA1NzgzMSwgNTc4NDcsIDU3ODYzLCA1Nzg3OSwgNTc4OTUsIDU3OTExLCA1NzkyNywgNTc5NDMsIAotICAgIDU3OTU5LCA1Nzk3NSwgNTc5OTEsIDU4MDA3LCA1ODAyMywgNTgwMzksIDU4MDU1LCA1ODA3MSwgNTgwODcsIDU4MTAzLCAKLSAgICA1ODExOSwgNTgxMzUsIDU4MTUxLCA1ODE2NywgNTgxODIsIDE2NzQ5LCA1ODE5MSwgNTgxOTcsIDU4MjAzLCA1ODIxMywgCi0gICAgNTgyMjEsIDE0ODgxLCAxNTQzMiwgOTk1MywgNTgyMzQsIDE1MjAsIDU4MjQyLCAzNzYxLCAyNzQxNSwgNzE4MywgNTgyNDgsIAotICAgIDU4MjUzLCA1ODI1OCwgNTgyNjMsIDU4MjY4LCA1ODI3NCwgNTgyNzksIDU4Mjg1LCA1ODI5MCwgNTgyOTYsIDU4MzAxLCAKLSAgICA1ODMwNiwgNTgzMTEsIDU4MzE2LCA1ODMyMiwgNTgzMjcsIDU4MzMyLCA1ODMzNywgNTgzNDIsIDU4MzQ3LCA1ODM1MiwgCi0gICAgNTgzNTcsIDU4MzYzLCA1ODM2OCwgNTgzNzQsIDU4MzgxLCAyNTYxLCA1ODM4NiwgNTgzOTIsIDg1MjYsIDU4Mzk2LCAKLSAgICA1ODQwMSwgNTg0MDgsIDU4NDE2LCA0MCwgNTg0MjAsIDU4NDI2LCA1ODQzMSwgNTg0MzYsIDU4NDQwLCA1ODQ0NSwgNTg0NDksIAotICAgIDU4NDUzLCAxMDY3NywgNTg0NTcsIDU4NDY3LCA1ODQ4MCwgNTg0OTEsIDU4NTA0LCA1ODUxMSwgNTg1MTcsIDU4NTIyLCAKLSAgICA1ODUyOCwgNTg1MzQsIDU4NTQwLCA1ODU0NSwgNTg1NTAsIDU4NTU1LCA1ODU2MCwgNTg1NjQsIDU4NTY5LCA1ODU3NCwgCi0gICAgNTg1NzksIDU4NTg1LCA1ODU5MSwgNTg1OTcsIDU4NjAyLCA1ODYwNiwgNTg2MTEsIDU4NjE2LCA1ODYyMCwgNTg2MjUsIAotICAgIDU4NjMwLCA1ODYzNSwgNTg2MzksIDEwNjkzLCAxMDcwNCwgMTA3MDksIDE1NjMsIDU4NjQzLCAxNTY4LCA1ODY0OSwgCi0gICAgMTYyMjYsIDU4NjUyLCA1ODY1OCwgMTU5OSwgNTg2NjQsIDE2MDUsIDE2MTEsIDEwNzM5LCA1ODY2OSwgNTg2NzcsIDU4Njg0LCAKLSAgICA1ODY4OCwgNTg2OTQsIDU4Njk5LCAzMDk1MiwgNTg3MDQsIDU4NzExLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCAxNjE2LCAKLSAgICAxNjMxOCwgNTg3MzMsIDU4NzM3LCAxNjMyOSwgMTEyMCwgNTg3NDEsIDU4NzQ4LCA1ODc1MywgNTg3NTcsIDE2MzU0LCAKLSAgICAxNjIwLCAzNzMyMSwgNTg3NjAsIDU4NzY1LCA1ODc3NSwgNTg3ODQsIDU4Nzg5LCA1ODc5MywgNTg3OTksIDE2MjUsIAotICAgIDM5MjMwLCA1ODgwNCwgNTg4MTMsIDU4ODE5LCA1ODgyNCwgMTA4OTcsIDEwOTAzLCA1ODgzMCwgNTg4NDIsIDU4ODU5LCAKLSAgICA1ODg3NiwgNTg4OTMsIDU4OTEwLCA1ODkyNywgNTg5NDQsIDU4OTYxLCA1ODk3OCwgNTg5OTUsIDU5MDEyLCA1OTAyOSwgCi0gICAgNTkwNDYsIDU5MDYzLCA1OTA4MCwgNTkwOTcsIDU5MTE0LCA1OTEzMSwgNTkxNDgsIDU5MTY1LCA1OTE4MiwgNTkxOTksIAotICAgIDU5MjE2LCA1OTIzMywgNTkyNTAsIDU5MjY3LCA1OTI4NCwgNTkzMDEsIDU5MzE4LCA1OTMzNSwgNTkzNTIsIDU5MzY5LCAKLSAgICA1OTM4NiwgNTk0MDMsIDU5NDIwLCA1OTQzNywgNTk0NTQsIDU5NDcxLCA1OTQ4OCwgNTk1MDUsIDU5NTIyLCA1OTUzOSwgCi0gICAgNTk1NTYsIDU5NTczLCA1OTU5MCwgNTk2MDcsIDU5NjI0LCA1OTY0MSwgNTk2NTgsIDU5Njc1LCA1OTY4NiwgNTk2OTEsIAotICAgIDE2MzAsIDU5Njk1LCA1OTcwMSwgNTk3MDYsIDU5NzExLCA5MzE5LCAxNjM1LCA1OTcxNywgNTk3MjYsIDI3NzEwLCA1OTczMSwgCi0gICAgNTk3NDIsIDU5NzUyLCA1OTc1NywgNTk3NjQsIDU5NzcwLCA1OTc3NSwgNTk3ODAsIDE2NjA2LCA1OTc4NCwgMTA5MTQsIAotICAgIDE2NDAsIDEwOTE5LCA1OTc5MCwgNTk3OTUsIDU5ODAxLCA1OTgwNiwgNTk4MTEsIDU5ODE2LCA1OTgyMSwgNTk4MjYsIAotICAgIDU5ODMxLCA1OTgzNiwgNTk4NDIsIDU5ODQ4LCA1OTg1NCwgNTk4NTksIDU5ODYzLCA1OTg2OCwgNTk4NzMsIDU5ODc3LCAKLSAgICA1OTg4MiwgNTk4ODcsIDU5ODkyLCA1OTg5NiwgNTk5MDEsIDU5OTA3LCA1OTkxMiwgNTk5MTcsIDU5OTIxLCA1OTkyNiwgCi0gICAgNTk5MzEsIDU5OTM3LCA1OTk0MiwgNTk5NDcsIDU5OTUzLCA1OTk1OSwgNTk5NjQsIDU5OTY4LCA1OTk3MywgNTk5NzgsIAotICAgIDU5OTgzLCA1OTk4NywgNTk5OTIsIDU5OTk3LCA2MDAwMiwgNjAwMDgsIDYwMDE0LCA2MDAxOSwgNjAwMjMsIDYwMDI3LCAKLSAgICA2MDAzMiwgNjAwMzcsIDYwMDQyLCAyOTEwOCwgNjAwNDYsIDYwMDUxLCA2MDA1NiwgNjAwNjIsIDYwMDY3LCA2MDA3MiwgCi0gICAgNjAwNzYsIDYwMDgxLCA2MDA4NiwgNjAwOTIsIDYwMDk3LCA2MDEwMiwgNjAxMDgsIDYwMTE0LCA2MDExOSwgNjAxMjMsIAotICAgIDYwMTI4LCA2MDEzMywgNjAxMzcsIDYwMTQyLCA2MDE0NywgNjAxNTIsIDYwMTU4LCA2MDE2NCwgNjAxNjksIDYwMTczLCAKLSAgICA2MDE3OCwgNjAxODMsIDYwMTg3LCA2MDE5MiwgNjAxOTcsIDYwMjAyLCA2MDIwNiwgNjAyMDksIDMxNjE0LCA2MDIxNCwgCi0gICAgNjAyMjIsIDE2NjcyLCAzNjYzLCAxMTAxMCwgNjAyMjgsIDYwMjM4LCA2MDI1MywgMTEwMTUsIDYwMjY0LCA2MDI2OSwgCi0gICAgNjAyODAsIDYwMjkyLCA2MDMwNCwgNjAzMTYsIDI2OTUsIDYwMzI4LCA2MDMzMywgNjAzNDUsIDYwMzQ5LCA2MDM1NSwgCi0gICAgNjAzNjEsIDYwMzY2LCAxNjUyLCAxMDY3LCA2MDM3NSwgNjAzODAsIDM5MjgwLCA2MDM4NCwgNjAzODgsIDYwMzkzLCAKLSAgICA2MDM5NywgMTY3NTcsIDYwNDAyLCA2MDQwNSwgNjA0MTMsIDYwNDIxLCAxNjU2LCAxMTA0MCwgMTEwNDYsIDE2NjEsIAotICAgIDYwNDI5LCA2MDQzNiwgNjA0NDEsIDYwNDUwLCA2MDQ2MCwgNjA0NjcsIDYwNDcyLCA2MDQ3NywgMTY2NiwgNjA0ODQsIAotICAgIDYwNDg5LCAxNjg3MiwgNjA0OTMsIDYwNDk4LCA2MDUwNSwgNjA1MTEsIDYwNTE1LCA2MDUyNiwgNjA1MzYsIDE2ODk0LCAKLSAgICA5MjI3LCA5MjM0LCAxNjcxLCA2MDU0MywgNjA1NDksIDYwNTU3LCA2MDU2NCwgNjA1NzAsIDYwNTc3LCA2MDU4OSwgNjA1OTUsIAotICAgIDYwNjAwLCA2MDYxMiwgNjA2MjMsIDYwNjMyLCA2MDY0MiwgMzc0MCwgMzA3ODgsIDMwNzk3LCAxNjkzNCwgMTY3NiwgMTY4MCwgCi0gICAgNjA2NTAsIDYwNjYxLCA2MDY2NiwgMTY4MywgNjA2NzQsIDYwNjc5LCAxNjk4NSwgNjA2OTEsIDYwNjk3LCA2MDcwMiwgCi0gICAgNjA3MTAsIDE2ODgsIDYwNzE1LCA2MDcyMCwgNjA3MjgsIDYwNzM2LCA2MDc0MywgNjA3NTIsIDYwNzYwLCA2MDc2OSwgCi0gICAgMTY5MywgNjA3NzMsIDE2OTgsIDYwNzc4LCA2MDc4NSwgMTcwNTksIDYwNzkzLCA2MDc5OSwgNjA4MDQsIDYwODEyLCAKLSAgICA2MDgxOSwgNjA4MjcsIDIyNTU3LCA2MDgzMiwgMTExNzUsIDYwODQxLCA2MDg0NywgNjA4NTQsIDYwODYxLCA2MDg2NywgCi0gICAgNjA4NzcsIDYwODgzLCA2MDg4OCwgNjA4OTksIDYwOTA0LCA2MDkxMiwgMTExODQsIDExMTg5LCA2MDkyMCwgNjA5MjYsIAotICAgIDYwOTM0LCAzODA1LCAxNzEwMSwgMzkzNjgsIDYwOTM5LCA2MDk0NSwgNjA5NTAsIDYwOTU4LCA2MDk2NSwgMTIwMjksIAotICAgIDYwOTcwLCA2MDk3NiwgMTcwOSwgNjA5ODEsIDYwOTg0LCAxMTI3LCA2MDk5MCwgNjA5OTUsIDYxMDAwLCA2MTAwNiwgCi0gICAgNjEwMTEsIDYxMDE2LCA2MTAyMSwgNjEwMjYsIDYxMDMxLCA2MTAzNiwgMTcxOCwgOSwgNjEwNDIsIDYxMDQ2LCA2MTA1MSwgCi0gICAgNjEwNTUsIDYxMDU5LCA2MTA2MywgMzE4NTQsIDYxMDY4LCA2MTA3MywgNjEwNzgsIDYxMDgyLCA2MTA4NSwgNjEwODksIAotICAgIDYxMDkzLCA2MTA5OCwgNjExMDIsIDYxMTA3LCA2MTExMSwgMzQ1OTEsIDM0NTk2LCAzNDYwMSwgNjExMTQsIDYxMTIxLCAKLSAgICA2MTEyNywgMzkwODksIDYxMTM3LCAzNDYwNywgMzIxMTIsIDMxODY5LCAzMTg3NSwgMzQ2MjMsIDMxODgxLCA2MTE0MiwgCi0gICAgNjExNDcsIDMyMTQ1LCA2MTE1MSwgNjExNTQsIDYxMTU4LCA2MTE2NSwgNjExNjgsIDYxMTczLCA2MTE3NywgNjExODEsIAotICAgIDYxMTg0LCA2MTE5NCwgNjEyMDYsIDYxMjEzLCA2MTIxOSwgNjEyMjYsIDMzNTQ4LCA2MTIyOSwgODU0MywgODc3LCA2MTIzMiwgCi0gICAgNjEyMzYsIDYxMjQxLCAzNjkwLCA2MTI0NSwgNjEyNDgsIDEzNjI1LCA2MTI1NSwgNjEyNjIsIDYxMjc1LCA2MTI4MywgCi0gICAgNjEyOTIsIDYxMzAxLCA2MTMwNiwgNjEzMTYsIDYxMzI5LCA2MTM0MSwgNjEzNDgsIDYxMzUzLCA2MTM2MiwgNjEzNzUsIAotICAgIDM2MDM1LCA2MTM5MywgNjEzOTgsIDYxNDA1LCA2MTQxMSwgNjUyLCA2MTQxNiwgNjE0MjQsIDYxNDMxLCAyNzI1NCwgNjI3LCAKLSAgICA2MTQzNywgNjE0NDMsIDYxNDUzLCA2MTQ1OSwgNjE0NjQsIDMxODk5LCA2MDAzLCAzMTkxMywgNjE0NjgsIDYxNDc4LCAKLSAgICA2MTQ4MywgNjE0OTMsIDYxNTA4LCA2MTUxNCwgNjE1MjAsIDMxOTIzLCA2MTUyNSwgMzEwNjksIDYxNTI5LCA2MTUzNCwgCi0gICAgNjE1MzksIDYxNTQzLCA2MTU0OCwgMTY5MzcsIDYxNTU1LCA2MTU2MCwgNjE1NjQsIDYwNDQsIDMxOTQ5LCA2MTU2OCwgCi0gICAgNjE1NzQsIDMxMiwgNjE1ODQsIDYxNTkxLCA2MTU5OCwgNjE2MDMsIDYxNjEyLCA1ODc2OSwgNjE2MTgsIDYxNjI2LCAKLSAgICA2MTYzMCwgNjE2MzQsIDYxNjM4LCA2MTY0MiwgNjE2NDcsIDYxNjUxLCA2MTY1NywgNjE2NjUsIDYxNjcwLCA2MTY3NSwgCi0gICAgNjE2NzksIDYxNjg0LCA2MTY4OCwgNjE2OTIsIDYxNjk4LCA2MTcwNCwgNjE3MDksIDYxNzEzLCAzMjA3MywgNjE3MTgsIAotICAgIDMyMDc5LCAzMjA4NSwgNjE3MjMsIDYxNzI5LCA2MTczNiwgNjE3NDEsIDYxNzQ1LCAzMTA4NiwgMTY1OTksIDYxNzQ4LCAKLSAgICA2MTc1MiwgNjE3NTcsIDYxNzY0LCA2MTc3MCwgNjE3NzQsIDYxNzc5LCAzODc5OSwgNjE3ODUsIDYxNzg5LCA2MTc5MywgCi0gICAgNjE3OTgsIDYxODA0LCA2MTgxMCwgNjE4MjIsIDYxODMxLCA2MTg0MSwgNjE4NDcsIDYxODU0LCA2MTg1OSwgNjE4NjQsIAotICAgIDYxODY4LCA2MTg3MSwgNjE4NzcsIDYxODg0LCA2MTg4OSwgNjE4OTQsIDYxOTAxLCA2MTkwOCwgNjE5MTQsIDYxOTE5LCAKLSAgICA2MTkyNCwgNjE5MzIsIDMyMDkwLCAyNDIzLCA2MTkzNywgNjE5NDIsIDYxOTQ4LCA2MTk1MywgNjE5NTksIDYxOTY0LCAKLSAgICA2MTk2OSwgNjE5NzQsIDYxOTgwLCAzMjExMSwgNjE5ODUsIDYxOTkxLCA2MTk5NywgNjIwMDMsIDMyMTc1LCA2MjAwOCwgCi0gICAgNjIwMTMsIDYyMDE4LCAzMjE4NiwgNjIwMjMsIDYyMDI4LCA2MjAzMywgNjIwMzksIDYyMDQ1LCAzMjE5MSwgNjIwNTAsIAotICAgIDYyMDU1LCA2MjA2MCwgMzIyNDYsIDMyMjUyLCA2MjA2NSwgNjIwNzAsIDMyMjU3LCA2MjA3NSwgMjc5MzcsIDMyMjc5LCAKLSAgICAzMjI4MywgNjIwODAsIDYyMDU2LCA2MjA4NCwgNjIwOTIsIDYyMDk4LCA2MjEwNiwgNjIxMTMsIDYyMTE5LCA2MjEyOSwgCi0gICAgNjIxMzUsIDYyMTQyLCAxMDYyNCwgMzIyOTcsIDYyMTQ4LCA2MjE2MSwgNjIxNzAsIDYyMTc2LCA2MjE4NSwgNjIxOTEsIAotICAgIDIzNDk1LCA2MjE5OCwgNjIyMDUsIDYyMjE1LCAzMjI0NywgNjIyMTgsIDYyMjI1LCA2MjIzMCwgNjIyMzQsIDYyMjM4LCAKLSAgICA2MjI0MywgNjEyMCwgNjIyNDcsIDYyMjUyLCA2MjI1NywgMzQ2ODUsIDM0NjkwLCA2MjI2MSwgMzQ3MDQsIDYyMjY2LCAKLSAgICAzNDcwOSwgNjIyNzEsIDYyMjc3LCAzNDcyMSwgMzQ3MjcsIDM0NzMzLCA2MjI4MiwgNjIyODgsIDIyNTIyLCA2MjI5OSwgCi0gICAgNjIzMDIsIDYyMzE0LCA2MjMyMiwgMzIzMjAsIDYyMzI2LCA2MjMzNSwgNjIzNDUsIDYyMzU0LCAzMjMzMCwgNjIzNTksIAotICAgIDYyMzY2LCA2MjM3NSwgNjIzODEsIDYyMzg5LCA2MjM5NiwgNjA5NSwgNDM5NywgNjI0MDEsIDMyMjU4LCA2MjQwNywgCi0gICAgNjI0MTAsIDYyNDE2LCA2MjQyMywgNjI0MjgsIDYyNDMzLCAyMzQwNSwgNjI0MzcsIDYyNDQzLCA2MjQ0OSwgNjI0NTQsIAotICAgIDYyNDU5LCA2MjQ2MywgNjI0NjksIDYyNDc1LCAzMzQ1OCwgODYzLCAzNTY5OCwgMzY2MTksIDM2NjI1LCAzMjM2NiwgCi0gICAgNjI0ODAsIDYyNDg0LCA2MjQ4OCwgNjI0OTEsIDYyNTA0LCA2MjUxMCwgNjI1MTQsIDYyNTE3LCA2MjUyMiwgMzM3NjEsIAotICAgIDYyNTI2LCAzMTA5MSwgMjEyNzQsIDYyNTMyLCA2MDI0LCA2MDMyLCA5MDY4LCA2MjUzNSwgNjI1NDAsIDYyNTQ1LCA2MjU1MCwgCi0gICAgNjI1NTUsIDYyNTYwLCA2MjU2NSwgNjI1NzAsIDYyNTc1LCA2MjU4MCwgNjI1ODYsIDYyNTkxLCA2MjU5NiwgNjI2MDIsIAotICAgIDYyNjA3LCA2MjYxMiwgNjI2MTcsIDYyNjIyLCA2MjYyNywgNjI2MzIsIDYyNjM4LCA2MjY0MywgNjI2NDksIDYyNjU0LCAKLSAgICA2MjY1OSwgNjI2NjQsIDYyNjY5LCA2MjY3NCwgNjI2NzksIDYyNjg0LCA2MjY4OSwgNjI2OTQsIDYyNjk5LCA2MjcwNSwgCi0gICAgNjI3MTAsIDYyNzE1LCA2MjcyMCwgNjI3MjUsIDYyNzMwLCA2MjczNSwgNjI3NDEsIDYyNzQ2LCA2Mjc1MSwgNjI3NTYsIAotICAgIDYyNzYxLCA2Mjc2NiwgNjI3NzEsIDYyNzc2LCA2Mjc4MSwgNjI3ODYsIDYyNzkyLCA2Mjc5NywgNjI4MDIsIDYyODA3LCAKLSAgICA2MjgxMiwgNjI4MTgsIDYyODI0LCA2MjgyOSwgNjI4MzUsIDYyODQwLCA2Mjg0NSwgNjI4NTAsIDYyODU1LCA2Mjg2MCwgCi0gICAgMTUxMywgMjQ1LCA2Mjg2NSwgNjI4NjksIDYyODczLCA2Mjg3NywgMjUxMTYsIDYyODgxLCA2Mjg4NSwgNjI4OTAsIDYyODk0LCAKLSAgICA2Mjg5OSwgNjI5MDMsIDYyOTA4LCA2MjkxMywgNjI5MTgsIDYyOTIyLCA2MjkyNiwgNjI5MzEsIDYyOTM1LCAxMzM2MiwgCi0gICAgNjI5NDAsIDYyOTQ0LCA2Mjk1MSwgNjI5NjEsIDE1MTkzLCA2Mjk3MCwgNjI5NzksIDYyOTgzLCA2Mjk4OCwgNjI5OTMsIAotICAgIDYyOTk3LCAyNDkwNywgMzAxOSwgNjMwMDEsIDE3MzUwLCA2MzAwNywgNjMwMTYsIDYzMDI0LCA2MzAzMCwgNjMwNDIsIAotICAgIDYzMDU0LCA2MzA1OCwgNjMwNjMsIDYzMDY3LCA2MzA3MywgNjMwNzksIDYzMDg0LCA2MzA5NCwgNjMxMDQsIDYzMTEwLCAKLSAgICA2MzExNSwgNjMxMTksIDYzMTI0LCA2MzEzMCwgNjMxMzksIDYzMTQ4LCA2MzE1NiwgMTU1NDcsIDYzMTYwLCA2MzE2OSwgCi0gICAgNjMxNzcsIDYzMTg5LCA2MzIwMCwgNjMyMTEsIDYzMjIwLCA2MzIyNCwgNjMyMzMsIDYzMjQzLCA2MzI1MSwgNjMyNTcsIAotICAgIDYzMjYyLCA2MzI2OCwgNjMyNzMsIDk4LCAzMDkwMCwgNjMyODQsIDI2MjQ5LCAyNjI1OSwgNjMyOTAsIDYzMjk3LCA2MzMwMywgCi0gICAgNjMzMDcsIDYzMzE3LCA2MzMyOCwgNjMzMzYsIDYzMzQ1LCA2MzM1MCwgNjMzNTUsIDYzMzU5LCAxNzMwNCwgNjMzNjcsIAotICAgIDYzMzcxLCA2MzM3NywgNjMzODcsIDYzMzk0LCA2MzQwMCwgMzQ3ODQsIDYzNDA2LCA2MzQwOCwgNjM0MTEsIDYzNDE1LCAKLSAgICA2MzQyNSwgNjM0MzEsIDYzNDM4LCAxMzMwOCwgNjM0NDUsIDYzNDUxLCA2MzQ2MCwgNjM0NjksIDYzNDc1LCA2MzQ4MSwgCi0gICAgNjM0ODcsIDYzNDkyLCA2MzQ5OSwgNjM1MDYsIDYzNTEyLCA2MzUyNSwgNjM1MzQsIDYzNTQzLCA2MzU0OCwgNjM1NTIsIAotICAgIDYzNTU4LCA2MzU2NSwgNjM1NzIsIDYzNTc5LCA2MzU4NiwgNjM1OTMsIDYzNTk4LCA2MzYwMiwgNjM2MDYsIDYzNjA5LCAKLSAgICA2MzYxOSwgNjM2MjMsIDYzNjM1LCA2MzY0NCwgNjM2NDgsIDYzNjUzLCA2MzY1NywgNjM2NjMsIDYzNjY4LCA2MzY3NSwgCi0gICAgNjM2ODQsIDYzNjkyLCA2MzcwMCwgNjM3MDUsIDYzNzA5LCA2MzcxNCwgNjM3MTksIDYzNzI5LCA2MzczNywgNjM3NDIsIAotICAgIDYzNzQ2LCA2Mzc1MCwgNjM3NTYsIDYzNzY4LCA2Mzc3NiwgNjM3ODYsIDYzNzkzLCA2Mzc5OSwgNjM4MDQsIDYzODA4LCAKLSAgICA2MzgxMiwgNjM4MTYsIDYzODI1LCA2MzgzNCwgNjM4NDMsIDYzODQ5LCA2Mzg1NSwgNjM4NjEsIDYzODY2LCA2Mzg3MywgCi0gICAgNjM4NzksIDYzODg3LCA2Mzg5NCwgMTI0NTYsIDYzOTAwLCA2MzkwNiwgNjM5MTAsIDE0MjMxLCA2MzkxNCwgNjM5MTksIAotICAgIDYzOTI5LCA2MzkzOCwgNjM5NDQsIDYzOTUwLCA2Mzk1OCwgNjM5NjUsIDYzOTY5LCA2Mzk3MywgNjM5NzksIDYzOTg3LCAKLSAgICA2Mzk5NCwgNjQwMDAsIDY0MDExLCA2NDAxNSwgNjQwMTksIDY0MDIzLCA2NDAyNiwgNjQwMzIsIDY0MDM3LCA2NDA0MSwgCi0gICAgNjQwNDUsIDY0MDU0LCA2NDA2MiwgNjQwNjksIDY0MDc1LCA2NDA4MiwgMjQwMjksIDM4ODQxLCA2NDA4NywgNjQwOTUsIAotICAgIDY0MDk5LCA2NDEwMywgNjQxMDYsIDY0MTE0LCA2NDEyMSwgNjQxMjcsIDY0MTM2LCA2NDE0NCwgNjQxNTAsIDY0MTU1LCAKLSAgICA2NDE1OSwgNjQxNjQsIDY0MTY4LCA2NDE3MiwgNjQxNzcsIDY0MTg2LCA2NDE5MCwgNjQxOTcsIDY0MjA0LCA2NDIxMCwgCi0gICAgNjQyMTgsIDY0MjI0LCA2NDIzNSwgNjQyNDMsIDY0MjQ5LCAyMjY1MiwgNjQyNTgsIDY0MjY1LCA2NDI3MiwgNjQyNzksIAotICAgIDY0Mjg2LCA2NDI5MywgNDE4NzAsIDEzMTQ2LCA2NDMwMCwgNjQzMDcsIDY0MzEyLCAzNDgyMCwgNjIxNywgNjQzMTgsIAotICAgIDY0MzIzLCA2NDMyOCwgNjQzMzQsIDY0MzQwLCA2NDM0NiwgNjQzNTEsIDY0MzU2LCA2NDM2MSwgNjQzNjYsIDY0MzcyLCAKLSAgICA2NDM3NywgNjQzODMsIDY0Mzg4LCA2NDM5NCwgNjQzOTksIDY0NDA0LCA2NDQwOSwgNjQ0MTQsIDY0NDE5LCA2NDQyNCwgCi0gICAgNjQ0MjksIDY0NDM1LCA2NDQ0MCwgNjQ0NDYsIDY0NDUxLCA2NDQ1NiwgNjQ0NjEsIDY0NDY2LCA2NDQ3MSwgNjQ0NzYsIAotICAgIDY0NDgyLCA2NDQ4NywgNjQ0OTIsIDY0NDk3LCA2NDUwMiwgNjQ1MDcsIDY0NTEyLCA2NDUxNywgNjQ1MjIsIDY0NTI3LCAKLSAgICA2NDUzMiwgNjQ1MzgsIDY0NTQzLCA2NDU0OCwgNjQ1NTMsIDY0NTU4LCA2NDU2MywgNjQ1NjgsIDY0NTczLCA2NDU3OCwgCi0gICAgNjQ1ODQsIDY0NTg5LCA2NDU5NCwgNjQ1OTksIDY0NjA0LCA2NDYwOSwgNjQ2MTQsIDY0NjE5LCA2NDYyNCwgNjQ2MjksIAotICAgIDY0NjM0LCA2NDYzOSwgNjQ2NDQsIDY0NjUwLCAxODM0LCAyMjQsIDM3NDE3LCA2NDY1NSwgNjQ2NTgsIDY0NjYzLCA2NDY2NywgCi0gICAgNjQ2NzAsIDY0Njc1LCA2MzY5NiwgNjQ2ODYsIDY0Njk2LCA2NDcwMywgNjQ3MTksIDY0NzI4LCA2NDczOCwgNjQ3NDgsIAotICAgIDY0NzU2LCA2NDc3MCwgNjQ3NzgsIDY0NzgyLCA2NDc4NSwgNjQ3OTIsIDY0Nzk4LCA2NDgwOSwgNjQ4MjEsIDY0ODMyLCAKLSAgICA2NDg0MSwgNjQ4NDgsIDEyOTcsIDIzMjk0LCA2NDg1OCwgMjU5MCwgNjQ4NjIsIDY0ODcxLCAxMTMzLCAxNzI3NywgMzgwNTQsIAotICAgIDY0ODc5LCA2NDg4NywgNjQ5MDEsIDY0OTE0LCA2NDkxOCwgNjQ5MjMsIDY0OTI4LCA2NDkzMywgNjQ5MzksIDY0OTQ1LCAKLSAgICA2NDk1MCwgODUzNSwgNjQ5NTUsIDY0OTU5LCA2NDk2NywgMTEwNDEsIDY0OTcyLCA2NDk3OCwgNjQ5ODcsIDE3MjEsIAotICAgIDExMDUzLCA3MzYsIDY0OTkxLCA2NTAwMCwgNjUwMTAsIDI3MDEzLCA2NTAxOSwgNjUwMjUsIDE2ODQ5LCA2NTAzMSwgCi0gICAgNjUwMzUsIDM5NjQsIDExMzg0LCA2NTA0MSwgNjUwNDgsIDYwNjU2LCA2NTA1MiwgNjUwNTYsIDM5ODgsIDE4OSwgMTQxNDYsIAotICAgIDY1MDYyLCA2NTA3NCwgNjUwNzgsIDY1MDg0LCAyNzczMCwgNjUwODgsIDExMzcyLCAyNzMwLCA0LCA2NTA5MywgNjUxMDMsIAotICAgIDY1MTA5LCA2NTEyMCwgNjUxMjcsIDY1MTMzLCA2NTEzOSwgNjUxNDcsIDY1MTU0LCA2NTE2MCwgNjUxNzAsIDY1MTgwLCAKLSAgICA2NTE5MCwgMjM0ODIsIDEzMDksIDY1MTk5LCA2NTIwMywgNjUyMDcsIDY1MjEzLCA2NTIxNywgMjc1MywgMjc1OSwgODUzMiwgCi0gICAgMjI2NCwgNjUyMjEsIDY1MjI1LCA2NTIzNCwgNjUyNDIsIDY1MjUzLCA2NTI2MSwgNjUyNjksIDY1Mjc1LCA2NTI4MCwgCi0gICAgNjUyOTEsIDY1MzAyLCA2NTMxMCwgNjUzMTYsIDk2ODcsIDY1MzIxLCA2NTMyOSwgNjUzMzMsIDY1MzM3LCA2NTM0MSwgCi0gICAgNjUzNTMsIDI4MTE1LCA2NTM2MCwgNjUzNzAsIDY1Mzc2LCA2NTM4MiwgOTc4OSwgNjUzOTIsIDY1NDAzLCA2NTQxMywgCi0gICAgNjU0MjIsIDY1NDI2LCA2NTQzMywgMTEzNSwgMTE3MCwgNjU0NDMsIDY1NDQ4LCA2NTQ1NiwgNjU0NjQsIDY1NDc1LCAKLSAgICA2NTQ4MiwgNjU0OTYsIDE0MDc1LCAzOTMsIDY1NTA2LCA2NTUxMCwgNjU1MTgsIDY1NTI3LCA2NTUzNSwgNjU1NDEsIAotICAgIDY1NTU1LCA2NTU2MiwgNjU1NjgsIDY1NTc3LCA2NTU4NCwgNjU1OTQsIDY1NjAyLCAzODEyLCAxNTYsIDY1NjEwLCA2NTYyMSwgCi0gICAgNjU2MjUsIDY1NjM3LCAyNzkyOCwgMTYxLCA2NTY0MywgNjU2NDgsIDY1NjUyLCA2NTY1OSwgNjU2NjUsIDY1NjczLCAKLSAgICA2NTY4MCwgODgxOCwgNjU2ODcsIDY1Njk2LCA2NTcwNCwgMzg3OCwgNjU3MTcsIDgxOTksIDY1NzIxLCAyNzk4LCA0NTAsIAotICAgIDY1NzI2LCA2NTczOSwgNjU3NDQsIDE4MzMsIDY2OCwgNjU3NDgsIDM4OTUsIDY1NzU2LCA2NTc2MiwgNjU3NjYsIDkzMSwgCi0gICAgNjU3NzYsIDY1Nzg1LCA2NTc5MCwgMTQ5MTUsIDE0OTIyLCA0NTIzMiwgNjU3OTQsIDM4MjIsIDEzMDM0LCA2NTgwMiwgCi0gICAgNjU4MDksIDIzNTM4LCA2NTgxMywgNjU4MjAsIDY1ODI2LCA2NTgzMSwgNjU4MzYsIDE0OTM1LCAzNzIsIDY1ODQxLCAKLSAgICA2NTg1MywgNjU4NTksIDY1ODY3LCAyODEwLCAxNzUzLCA2NTg3NSwgNjU4NzcsIDY1ODgyLCA2NTg4NywgNjU4OTIsIAotICAgIDY1ODk4LCA2NTkwMywgNjU5MDgsIDY1OTEzLCA2NTkxOCwgNjU5MjMsIDY1OTI4LCA2NTkzNCwgNjU5MzksIDY1OTQ0LCAKLSAgICA2NTk0OSwgNjU5NTQsIDY1OTU5LCA2NTk2NCwgNjU5NjksIDY1OTc0LCA2NTk4MCwgNjU5ODUsIDY1OTkwLCA2NTk5NSwgCi0gICAgNjYwMDEsIDY2MDA2LCA2NjAxMiwgNjYwMTcsIDY2MDIyLCA2NjAyNywgNjYwMzIsIDY2MDM3LCA2NjA0MiwgNjYwNDcsIAotICAgIDY2MDUzLCA2NjA1OCwgNjYwNjQsIDY2MDY5LCA2NjA3NCwgNjYwNzksIDY2MDg0LCA2NjA4OSwgNjYwOTQsIDY2MDk5LCAKLSAgICA2NjEwNCwgNjYxMTAsIDY2MTE1LCA2NjEyMCwgNjYxMjUsIDY2MTI5LCA2NjEzMywgNjYxMzgsIDY2MTQyLCA2NjE0NywgCi0gICAgNjYxNTIsIDY2MTU4LCA2NjE2MywgNjYxNjcsIDY2MTcyLCA2NjE3NiwgNjYxNzksIDY2MTgxLCA2NjE4NSwgNjYxODgsIAotICAgIDY2MTkzLCA2NjE5NywgNjYyMDEsIDY2MjA1LCA2NjIwOSwgNjYyMTgsIDY2MjIyLCAzMjUyNCwgNjYyMjUsIDMyNTI5LCAKLSAgICA2NjIzMiwgNjYyMzcsIDMyNTM0LCA2NjI0NiwgNjYyNTUsIDMyNTQwLCA2NjI2MCwgMzI1NDUsIDY2MjY5LCA2NjI3NCwgCi0gICAgMTE1NzEsIDY2Mjc4LCA2NjI4MywgNjYyODgsIDMyNTUwLCA2NjI5MiwgNDAxOTYsIDY2Mjk2LCA2NjI5OSwgNjYzMDMsIAotICAgIDgyMTEsIDY2MzA5LCA2NjMxNCwgNjYzMTgsIDM3MDUsIDMyNTU1LCA2NjMyMSwgNjYzMjUsIDY2MzI4LCA2NjMzMywgCi0gICAgNjYzMzcsIDY2MzQzLCA2NjM1MSwgNjYzNjQsIDY2MzczLCA2NjM3OSwgNjYzODQsIDY2MzkwLCA2NjM5NCwgNjY0MDAsIAotICAgIDY2NDA4LCA2NjQxMywgNjY0MTcsIDY2NDI0LCA2NjQzMCwgNjY0MzgsIDY2NDQ3LCA2NjQ1NSwgMzI1NTgsIDY2NDYyLCAKLSAgICA2NjQ3MiwgNjY0ODEsIDY2NDk0LCA2NjQ5OSwgNjY1MDQsIDY2NTEzLCA2NjUxOSwgNjY1MjYsIDY2NTM3LCA2NjU0OSwgCi0gICAgNjY1NTYsIDY2NTY1LCA2NjU3NCwgNjY1ODMsIDY2NTkwLCA2NjU5NiwgNjY2MDMsIDY2NjExLCA2NjYxOCwgNjY2MjYsIAotICAgIDY2NjM1LCA2NjY0MywgNjY2NTAsIDY2NjU4LCA2NjY2NywgNjY2NzUsIDY2Njg0LCA2NjY5NCwgNjY3MDMsIDY2NzExLCAKLSAgICA2NjcxOCwgNjY3MjYsIDY2NzM1LCA2Njc0MywgNjY3NTIsIDY2NzYyLCA2Njc3MSwgNjY3NzksIDY2Nzg4LCA2Njc5OCwgCi0gICAgNjY4MDcsIDY2ODE3LCA2NjgyOCwgNjY4MzgsIDY2ODQ3LCA2Njg1NSwgNjY4NjIsIDY2ODcwLCA2Njg3OSwgNjY4ODcsIAotICAgIDY2ODk2LCA2NjkwNiwgNjY5MTUsIDY2OTIzLCA2NjkzMiwgNjY5NDIsIDY2OTUxLCA2Njk2MSwgNjY5NzIsIDY2OTgyLCAKLSAgICA2Njk5MSwgNjY5OTksIDY3MDA4LCA2NzAxOCwgNjcwMjcsIDY3MDM3LCA2NzA0OCwgNjcwNTgsIDY3MDY3LCA2NzA3NywgCi0gICAgNjcwODgsIDY3MDk4LCA2NzEwOSwgNjcxMjEsIDY3MTMyLCA2NzE0MiwgNjcxNTEsIDY3MTU5LCA2NzE2NiwgNjcxNzQsIAotICAgIDY3MTgzLCA2NzE5MSwgNjcyMDAsIDY3MjEwLCA2NzIxOSwgNjcyMjcsIDY3MjM2LCA2NzI0NiwgNjcyNTUsIDY3MjY1LCAKLSAgICA2NzI3NiwgNjcyODYsIDY3Mjk1LCA2NzMwMywgNjczMTIsIDY3MzIyLCA2NzMzMSwgNjczNDEsIDY3MzUyLCA2NzM2MiwgCi0gICAgNjczNzEsIDY3MzgxLCA2NzM5MiwgNjc0MDIsIDY3NDEzLCA2NzQyNSwgNjc0MzYsIDY3NDQ2LCA2NzQ1NSwgNjc0NjMsIAotICAgIDY3NDcyLCA2NzQ4MiwgNjc0OTEsIDY3NTAxLCA2NzUxMiwgNjc1MjIsIDY3NTMxLCA2NzU0MSwgNjc1NTIsIDY3NTYyLCAKLSAgICA2NzU3MywgNjc1ODUsIDY3NTk2LCA2NzYwNiwgNjc2MTUsIDY3NjI1LCA2NzYzNiwgNjc2NDYsIDY3NjU3LCA2NzY2OSwgCi0gICAgNjc2ODAsIDY3NjkwLCA2NzcwMSwgNjc3MTMsIDY3NzI0LCA2NzczNiwgNjc3NDksIDY3NzYxLCA2Nzc3MiwgNjc3ODIsIAotICAgIDY3NzkxLCA2Nzc5OSwgNjc4MDYsIDY3ODE0LCA2NzgyMywgNjc4MzEsIDY3ODQwLCA2Nzg1MCwgNjc4NTksIDY3ODY3LCAKLSAgICA2Nzg3NiwgNjc4ODYsIDY3ODk1LCA2NzkwNSwgNjc5MTYsIDY3OTI2LCA2NzkzNSwgNjc5NDMsIDY3OTUyLCA2Nzk2MiwgCi0gICAgNjc5NzEsIDY3OTgxLCA2Nzk5MiwgNjgwMDIsIDY4MDExLCA2ODAyMSwgNjgwMzIsIDY4MDQyLCA2ODA1MywgNjgwNjUsIAotICAgIDY4MDc2LCA2ODA4NiwgNjgwOTUsIDY4MTAzLCA2ODExMiwgNjgxMjIsIDY4MTMxLCA2ODE0MSwgNjgxNTIsIDY4MTYyLCAKLSAgICA2ODE3MSwgNjgxODEsIDY4MTkyLCA2ODIwMiwgNjgyMTMsIDY4MjI1LCA2ODIzNiwgNjgyNDYsIDY4MjU1LCA2ODI2NSwgCi0gICAgNjgyNzYsIDY4Mjg2LCA2ODI5NywgNjgzMDksIDY4MzIwLCA2ODMzMCwgNjgzNDEsIDY4MzUzLCA2ODM2NCwgNjgzNzYsIAotICAgIDY4Mzg5LCA2ODQwMSwgNjg0MTIsIDY4NDIyLCA2ODQzMSwgNjg0MzksIDY4NDQ4LCA2ODQ1OCwgNjg0NjcsIDY4NDc3LCAKLSAgICA2ODQ4OCwgNjg0OTgsIDY4NTA3LCA2ODUxNywgNjg1MjgsIDY4NTM4LCA2ODU0OSwgNjg1NjEsIDY4NTcyLCA2ODU4MiwgCi0gICAgNjg1OTEsIDY4NjAxLCA2ODYxMiwgNjg2MjIsIDY4NjMzLCA2ODY0NSwgNjg2NTYsIDY4NjY2LCA2ODY3NywgNjg2ODksIAotICAgIDY4NzAwLCA2ODcxMiwgNjg3MjUsIDY4NzM3LCA2ODc0OCwgNjg3NTgsIDY4NzY3LCA2ODc3NywgNjg3ODgsIDY4Nzk4LCAKLSAgICA2ODgwOSwgNjg4MjEsIDY4ODMyLCA2ODg0MiwgNjg4NTMsIDY4ODY1LCA2ODg3NiwgNjg4ODgsIDY4OTAxLCA2ODkxMywgCi0gICAgNjg5MjQsIDY4OTM0LCA2ODk0NSwgNjg5NTcsIDY4OTY4LCA2ODk4MCwgNjg5OTMsIDY5MDA1LCA2OTAxNiwgNjkwMjgsIAotICAgIDY5MDQxLCA2OTA1MywgNjkwNjYsIDY5MDgwLCA2OTA5MywgNjkxMDUsIDY5MTE2LCA2OTEyNiwgNjkxMzUsIDY5MTQzLCAKLSAgICA2OTE1MCwgNjkxNTUsIDgwNTgsIDY5MTYyLCAzMjU2OCwgNjkxNjcsIDY5MTcyLCAzMjU3MywgNjkxNzgsIDIwOTE2LCAKLSAgICAzMjU3OCwgNjkxODMsIDY5MTg5LCA2OTE5NywgNjkyMDMsIDY5MjA5LCA2OTIxNiwgNjkyMjMsIDY5MjI4LCA2OTIzMiwgCi0gICAgNjkyMzUsIDY5MjM5LCA2OTI0OCwgNjkyNTQsIDY5MjY2LCA2OTI3NywgNjkyODEsIDMwODEsIDgwMzMsIDY5Mjg2LCAKLSAgICA2OTI4OSwgNjkyOTEsIDY5Mjk1LCA2OTI5OSwgNjkzMDMsIDY5MzA5LCA2OTMxNCwgMjU5MjcsIDY5MzE5LCA2OTMyMywgCi0gICAgNjkzMjYsIDY5MzMxLCA2OTMzNSwgNjkzNDIsIDY5MzQ4LCA2OTM1MiwgNjE3MCwgNjkzNTYsIDMyNTk1LCA2OTM2MSwgCi0gICAgNjkzNjgsIDY5Mzc3LCA2OTM4NSwgNjkzOTYsIDY5NDA0LCA2OTQxMiwgNjk0MTksIDY5NDI2LCA2OTQzMiwgNjk0NDMsIAotICAgIDMyNjAwLCA2OTQ0OCwgNjk0NTksIDY5NDcxLCA2OTQ3OSwgNjk0OTAsIDY5NDk5LCA2OTUxMCwgNjk1MTUsIDY5NTIzLCAKLSAgICAyNTU2LCA2OTUyOCwgMzQyNzAsIDY5NTQxLCA2OTU0NSwgNjk1NTcsIDY5NTY1LCA2OTU3MCwgNjk1NzgsIDE3NDcyLCAKLSAgICA2OTU4OSwgNjk1OTUsIDY5NjAyLCA2OTYxMCwgNjk2MTYsIDMyNjEwLCA2OTYyMSwgMzkxNCwgNTgyMTcsIDY5NjI4LCAKLSAgICA2OTYzMSwgNjk2MzksIDY5NjUyLCA2OTY2NSwgNjk2NzgsIDY5NjkxLCA2OTY5OCwgNjk3MDksIDY5NzE4LCA0MTY4NywgCi0gICAgNDE2OTIsIDY5NzIzLCA2OTcyNywgNjk3MzUsIDY5NzQyLCA2OTc1MSwgNjk3NTksIDY5NzY1LCA2OTc3NCwgNjk3ODIsIAotICAgIDY5NzkwLCA2OTc5NCwgNjk4MDMsIDY5ODEyLCA2OTgyMiwgNjk4MzUsIDY5ODQ4LCA2OTg1OCwgMzI2MTUsIDY5ODY0LCAKLSAgICA2OTg3MSwgNjk4NzcsIDMyNjIxLCA2OTg4MiwgNjk4ODUsIDY5ODg5LCA2OTg5NywgNjk5MDYsIDQxNDI1LCA2OTkxNCwgCi0gICAgNjk5MjMsIDY5OTMxLCA2OTkzOCwgNjk5NDYsIDY5OTU2LCA2OTk2NSwgNjk5NzQsIDY5OTgzLCA2OTk5MSwgNzAwMDIsIAotICAgIDcwMDEyLCA5MzU5LCAyMTU1NCwgNzAwMjEsIDcwMDI2LCA3MDAzMSwgNzAwMzUsIDcwMDM5LCA3MDA0NCwgNzAwNTAsIAotICAgIDcwMDU1LCA3MDA2MCwgNzAwNjYsIDcwMDcxLCA3MDA3NiwgMjE1MTksIDcwMDgxLCA3MDA4OCwgNzAwOTYsIDcwMTA0LCAKLSAgICA3MDEwOSwgNzAxMTYsIDcwMTIzLCA3MDEyOCwgNzAxMzIsIDcwMTM2LCA3MDE0NCwgNzAxNTIsIDMyNjM4LCA3MDE1OCwgCi0gICAgNzAxNjQsIDcwMTc2LCA3MDE4MiwgNzAxODYsIDcwMTkzLCA3MDE5OCwgNzAyMDksIDcwMjE5LCA3MDIyOSwgNzAyNDEsIAotICAgIDcwMjQ3LCA3MDI1NywgNzAyNjcsIDMyNjY1LCA3MDI3NiwgNzAyODUsIDcwMjkxLCA3MDMwMywgNzAzMTQsIDcwMzIxLCAKLSAgICA3MDMyNiwgNzAzMzAsIDcwMzM4LCA3MDM0NCwgNzAzNDksIDcwMzU0LCA3MDM2MSwgNzAzNjksIDcwMzgxLCA3MDM5MSwgCi0gICAgNzA0MDAsIDcwNDA5LCA3MDQxNiwgMzQxMzIsIDIzODM0LCA3MDQyMiwgNzA0MjcsIDcwNDMxLCA3MDQzNSwgNzA0NDAsIAotICAgIDcwNDQ2LCA3MDQ1NywgNzA0NzAsIDcwNDc1LCA3MDQ4MiwgMzI2NzAsIDcwNDg3LCA3MDQ5OSwgNzA1MDgsIDcwNTE4LCAKLSAgICA3MDUyOSwgNzA1NDIsIDcwNTQ5LCA3MDU1OCwgNzA1NjcsIDcwNTc1LCA3MDU4MCwgNzA1ODYsIDEwNTgsIDcwNTkxLCAKLSAgICA3MDU5NiwgNzA2MDEsIDcwNjA2LCA3MDYxMiwgNzA2MTcsIDcwNjIyLCA3MDYyOCwgNzA2MzQsIDcwNjM5LCA3MDY0MywgCi0gICAgNzA2NDgsIDcwNjUzLCA3MDY1OCwgNTg3MjksIDcwNjYzLCA3MDY2OCwgNzA2NzMsIDcwNjc4LCA3MDY4NCwgNzA2OTAsIAotICAgIDcwNjk1LCA3MDY5OSwgNzA3MDQsIDcwNzA5LCA3MDcxNCwgNzA3MjAsIDcwNzI1LCA3MDczMSwgNzA3MzYsIDcwNzQxLCAKLSAgICA3MDc0NiwgNzA3NTEsIDcwNzU1LCA3MDc2MSwgNzA3NjYsIDcwNzc1LCA3MDc4MCwgNzA3ODUsIDcwNzkwLCA3MDc5NSwgCi0gICAgNzA3OTksIDcwODA2LCA3MDgxMiwgMTcxMjIsIDE3MTI5LCA3MDgxNywgNzA4MjEsIDcwODI1LCA3MDgyOSwgNzA4MzMsIAotICAgIDQ1NDg3LCA3MDgzNywgNzA3NjcsIDcwODM5LCA3MDg0OSwgMzI2NzksIDcwODUyLCA3MDg2MSwgNzA4NjcsIDYxNDMsIAotICAgIDMyNjg0LCA3MDg3MSwgNzA4NzcsIDcwODgyLCA3MDg4OCwgNzA4OTMsIDcwODk3LCA3MDkwNCwgNzA5MDksIDcwOTE5LCAKLSAgICA3MDkyOCwgNzA5MzIsIDcwOTM4LCA3MDk0NCwgNzA5NTAsIDcwOTU0LCA3MDk2MiwgNzA5NjksIDcwOTc3LCA3MDk4NSwgCi0gICAgMzI2ODksIDcwOTkyLCA3MDk5NSwgNzEwMDIsIDcxMDA4LCA3MTAxMywgNzEwMTcsIDcxMDIzLCA3MTAzMCwgNzEwMzUsIAotICAgIDcxMDM5LCA3MTA0OCwgNzEwNTYsIDcxMDYyLCA3MTA2NywgMzI2OTQsIDcxMDc0LCA3MTA4MSwgNzEwODcsIDcxMDkyLCAKLSAgICA3MTA5OCwgNzExMDUsIDcxMTExLCAyMTI4MSwgMjc0MzgsIDcxMTE3LCA3MTEyMiwgNzExMjgsIDcxMTQwLCA3MDgwMCwgCi0gICAgNzA4MDcsIDIxNDU3LCA3MTE1MCwgNzExNTUsIDcxMTYyLCA3MTE2OCwgNzExNzUsIDcxMTgxLCA3MTE5MiwgNzExOTcsIAotICAgIDkxMDMsIDcxMjA1LCA3MTIwOCwgNzEyMTQsIDcxMjE4LCA3MTIyMiwgNzEyMjUsIDcxMjMxLCAzMjQ0MywgNjE5NCwgOTY0LCAKLSAgICAxMzQxMiwgNzEyMzgsIDcxMjQ0LCA3MTI1MCwgNzEyNTYsIDcxMjYyLCA3MTI2OCwgNzEyNzQsIDcxMjgwLCA3MTI4NiwgCi0gICAgNzEyOTEsIDcxMjk2LCA3MTMwMSwgNzEzMDYsIDcxMzExLCA3MTMxNiwgNzEzMjEsIDcxMzI2LCA3MTMzMSwgNzEzMzYsIAotICAgIDcxMzQxLCA3MTM0NiwgNzEzNTEsIDcxMzU3LCA3MTM2MiwgNzEzNjcsIDcxMzczLCA3MTM3OCwgNzEzODMsIDcxMzg5LCAKLSAgICA3MTM5NSwgNzE0MDEsIDcxNDA3LCA3MTQxMywgNzE0MTksIDcxNDI1LCA3MTQzMSwgNzE0MzcsIDcxNDQyLCA3MTQ0NywgCi0gICAgNzE0NTMsIDcxNDU4LCA3MTQ2MywgNzE0NjksIDcxNDc0LCA3MTQ3OSwgNzE0ODQsIDcxNDg5LCA3MTQ5NCwgNzE0OTksIAotICAgIDcxNTA0LCA3MTUwOSwgNzE1MTQsIDcxNTE5LCA3MTUyNCwgNzE1MjksIDcxNTM1LCA3MTU0MCwgNzE1NDUsIDcxNTUwLCAKLSAgICA3MTU1NiwgNzE1NjEsIDcxNTY2LCA3MTU3MSwgNzE1NzYsIDcxNTgyLCA3MTU4NywgNzE1OTIsIDcxNTk3LCA3MTYwMiwgCi0gICAgNzE2MDcsIDcxNjEyLCA3MTYxNywgNzE2MjIsIDcxNjI3LCA3MTYzMiwgNzE2MzcsIDcxNjQyLCA3MTY0NywgNzE2NTIsIAotICAgIDcxNjU3LCA3MTY2MiwgNzE2NjcsIDcxNjcyLCA3MTY3NywgNzE2ODMsIDcxNjg4LCA3MTY5MywgNzE2OTgsIDcxNzAzLCAKLSAgICA3MTcwOCwgNzE3MTMsIDcxNzE4LCAxODY0LCAxNDIsIDcxNzIzLCA3MTcyNywgNzE3MzEsIDcxNzM2LCA3MTc0NCwgNzE3NDgsIAotICAgIDcxNzU1LCA3MTc2MywgNzE3NjcsIDcxNzgwLCA3MTc4OCwgNzE3OTIsIDcxNzk1LCA3MTgwMCwgNzE4MDQsIDcxODA5LCAKLSAgICA3MTgxMywgNzE4MjEsIDcxODI1LCAyMDkyNCwgNzE4MzAsIDcxODM0LCA2MDkzMCwgNzE4MzgsIDcxODQxLCA3MTg0OSwgCi0gICAgNzE4NTcsIDcxODY1LCA3MTg3MCwgNzE4NzcsIDcxODgzLCA3MTg4OSwgNzE4OTQsIDcxOTAxLCA3MTkwNiwgNzE5MTQsIAotICAgIDY0OTA2LCA3MTkyMSwgNzE5MjYsIDcxOTMxLCA3MTkzNSwgMTE2MzgsIDcxOTM5LCA3MTk0NCwgNzE5NDksIDcxOTUzLCAKLSAgICA3MTk1NiwgNzE5NjIsIDcxOTY2LCA3MTk3NiwgNzE5ODUsIDcxOTg4LCA3MTk5MiwgNzE5OTksIDcyMDEyLCA3MjAxOCwgCi0gICAgNzIwMjYsIDcyMDM3LCA3MjA0OCwgNzIwNTksIDcyMDcwLCA3MjA3OSwgNzIwODUsIDcyMDk0LCA3MjEwMiwgNzIxMTIsIAotICAgIDcyMTI1LCA3MjEzMiwgNzIxNDMsIDcyMTQ5LCA3MjE1NCwgNzIxNTksIDcyMTY1LCA3MjE3MSwgNzIxODEsIDcyMTkwLCAKLSAgICA3MDQ4OSwgNzIxOTgsIDcyMjA0LCA3MjIxMiwgNzIyMTgsIDcyMjI2LCA3MjIyOSwgNzIyMzMsIDcyMjM3LCA3MjI0MCwgCi0gICAgNzIyNDYsIDcyMjUyLCA3MjI2MCwgNzIyNzIsIDcyMjg0LCA3MjI5MSwgNzIyOTUsIDcyMzA2LCA3MjMxNCwgNzIzMjEsIAotICAgIDcyMzMzLCA3MjM0MSwgNzIzNDksIDcyMzU2LCA3MjM2MiwgNzIzNzIsIDcyMzgxLCA3MjM4NiwgNzIzOTYsIDcyNDA1LCAKLSAgICA0MDc1MSwgNzI0MTIsIDcyNDE2LCA3MjQyMSwgNzI0MjksIDcyNDM2LCA3MjQ0MiwgNzI0NDYsIDcyNDU2LCA3MjQ2NywgCi0gICAgNzI0NzUsIDcyNDgyLCA3MjQ5NCwgNzI1MDYsIDcyNTE1LCA2OTUzMSwgNzI1MjIsIDcyNTMzLCA3MjU0NywgNzI1NTUsIAotICAgIDcyNTY1LCA3MjU3MiwgNzI1ODAsIDcyNTkyLCA3MjYwMSwgNzI2MDksIDcyNjE5LCA3MjYzMCwgNzI2NDIsIDcyNjUxLCAKLSAgICA3MjY2MSwgNzI2NjgsIDcyNjc3LCA3MjY5MiwgNzI3MDAsIDcyNzEwLCA3MjcxOSwgNzI3MjcsIDcyNzQwLCA3Mjc1NSwgCi0gICAgNzI3NTksIDcyNzY4LCA3Mjc4MCwgNzI3OTEsIDcyODAyLCA3MjgxMywgNzI4MjMsIDcyODM0LCA3Mjg0MiwgNzI4NDgsIAotICAgIDcyODU4LCA3Mjg2NiwgNzI4NzIsIDI5MDA3LCA3Mjg3NywgNzI4ODMsIDcyODg4LCA3Mjg5NSwgOTcwMSwgMTc0OTIsIAotICAgIDcyOTAxLCA3MjkxMCwgNzI5MTUsIDcyOTE5LCA3MjkyNiwgNzI5MzIsIDcyOTM3LCA3Mjk0MiwgNzI5NTAsIDcyOTU4LCAKLSAgICA3Mjk2MiwgNzI5NjUsIDcyOTY4LCA3Mjk3MCwgNzI5NzcsIDcyOTgzLCA3Mjk5NCwgNzI5OTksIDczMDAzLCA3MzAxMCwgCi0gICAgNzMwMTYsIDczMDIxLCA3MzAyOSwgNjU0MDUsIDY1NDE1LCA3MzAzNSwgNzMwNDIsIDczMDUyLCAxMDYxMSwgNzMwNTksIAotICAgIDczMDY0LCAyOTIwMywgNzMwNzMsIDczMDc4LCA3MzA4NSwgNzMwOTUsIDczMTAzLCA3MzExMSwgNzMxMjAsIDczMTI2LCAKLSAgICA3MzEzMiwgNzMxMzksIDczMTQ2LCA3MzE1MSwgNzMxNTUsIDczMTYzLCA3MzE2OCwgNzMxNzMsIDczMTgxLCA3MzE4OCwgCi0gICAgNzMxOTMsIDczMTk5LCA3MzIwMiwgNzMyMDYsIDczMjE1LCA3MTc3NSwgNzMyMjQsIDczMjI4LCA3MzIzNCwgNzMyNDUsIAotICAgIDczMjU1LCAxNzUwMSwgNzMyNjYsIDczMjc0LCAxNzUxMywgNzMyODEsIDczMjg1LCA3MzI5NCwgMjczMjQsIDczMzAxLCAKLSAgICA3MzMwNSwgNzMzMTAsIDczMzI3LCA3MzMzOSwgMTA1NjksIDczMzUxLCA3MzM1NiwgNzMzNjEsIDczMzY2LCAyMDk5NywgCi0gICAgNzMzNzAsIDczMzc1LCA3MzM4MCwgNzMzODYsIDczMzkxLCA1ODQ2LCAyMTAwMSwgNzMzOTYsIDczNDAxLCA3MzQwNywgCi0gICAgNzM0MTQsIDczNDE5LCA3MzQyNCwgNzM0MzAsIDczNDM2LCA3MzQ0MiwgNzM0NDcsIDczNDUzLCA3MzQ1NywgNzM0NzEsIAotICAgIDczNDc5LCA3MzQ4NywgNzM0OTMsIDczNDk4LCA3MzUwNSwgNzM1MTUsIDczNTI0LCA3MzUyOSwgNzM1MzQsIDczNTQyLCAKLSAgICA3MzU0NywgNzM1NTMsIDczNTU4LCA3MzU2NywgNTk3ODYsIDczNTcyLCA3MzU3NSwgNzM1OTMsIDczNjEyLCA3MzYyNSwgCi0gICAgNzM2MzksIDczNjU1LCA3MzY2MiwgNzM2NjksIDczNjc1LCA3MzY4MiwgNzM2ODcsIDczNjkzLCA3MzY5OSwgNzM3MDcsIAotICAgIDczNzEzLCA3MzcxOCwgNzM3MjMsIDczNzM5LCAxMDU4MiwgNzM3NTMsIDczNzYwLCA3Mzc2OCwgNzM3NzQsIDczNzc4LCAKLSAgICA3Mzc4MSwgNzM3ODYsIDczNzkxLCA3Mzc5OCwgNzM4MDMsIDczODEyLCA3MzgxNywgNzM4MjMsIDczODMyLCA3Mzg0MSwgCi0gICAgNzM4NDYsIDczODUwLCA3Mzg1OCwgNzM4NjcsIDExNjY3LCA3Mzg3NiwgNzM4ODQsIDczODg5LCA3Mzg5NSwgMTE2NzgsIAotICAgIDczOTAwLCA3MzkwMywgNzM5MDgsIDczOTE4LCA3MzkyNywgNzM5MzIsIDczOTM4LCA3Mzk0MywgNzM5NTEsIDczOTU4LCAKLSAgICA3Mzk2OSwgNzM5NzksIDczOTg0LCA2NDgzNCwgNzM5ODksIDczOTk1LCA3NDAwMCwgNzQwMDcsIDc0MDE2LCA3NDAyNCwgCi0gICAgNzQwMzAsIDc0MDM2LCA3NDA0MywgNzQwNDksIDc0MDUzLCAxNjk0NywgMzA1NSwgNzQwNTgsIDc0MDYyLCA3NDA2NiwgCi0gICAgNzQwNzIsIDc0MDgxLCA3NDA4NywgNzQwOTQsIDc0MDk4LCA3NDExOSwgNzQxNDEsIDc0MTU3LCA3NDE3NCwgNzQxOTMsIAotICAgIDc0MjAyLCA3NDIxMiwgNzQyMTksIDc0MjI2LCAyNzIxMSwgNzQyMzIsIDc0MjM2LCA3NDI0NCwgNzQyNTYsIDc0MjYyLCAKLSAgICA3NDI3MCwgNzQyNzQsIDc0MjgyLCA3NDI4OSwgNzQyOTMsIDc0Mjk5LCA3NDMwNSwgNzQzMTAsIDM1NjMsIDQxODg3LCAKLSAgICA3NDMxNiwgNzQzMjAsIDc0MzI0LCA3NDMyOCwgNzQzMzMsIDc0MzM4LCA3NDM0MywgNzQzNDksIDc0MzU1LCA3NDM2MSwgCi0gICAgNzQzNjgsIDc0Mzc0LCA3NDM4MSwgNzQzODcsIDc0MzkzLCA3NDM5OCwgNzQ0MDQsIDc0NDA5LCA3NDQxMywgNzQ0MTgsIAotICAgIDc0NDIyLCA3NDQyNywgNDE5MDIsIDc0NDMxLCA3NDQzNiwgNzQ0NDQsIDc0NDQ4LCA3NDQ1MywgNzQ0NjAsIDc0NDY5LCAKLSAgICA3NDQ3NSwgNzQ0NzksIDc0NDg2LCA3NDQ5MCwgNzQ0OTMsIDc0NTAwLCA3NDUwOSwgNzQ1MTQsIDc0NTE4LCA3NDUyNiwgCi0gICAgNzQ1MzUsIDc0NTM5LCA3NDU0NywgNzQ1NTMsIDc0NTU4LCA3NDU2MywgNzQ1NjksIDc0NTc1LCA3NDU4MCwgNzQ1ODQsIAotICAgIDc0NTkwLCA3NDU5NSwgNzQ1OTksIDc0NjAzLCA3NDYwNiwgNzQ2MTEsIDc0NjE5LCA3NDYyOSwgNzQ2MzQsIDM5Mzg3LCAKLSAgICA3NDY0MiwgNzQ2NTQsIDc0NjU4LCA3NDY2NCwgNzQ2NzYsIDc0Njg3LCA3NDY5NCwgNzQ3MDAsIDc0NzA3LCA3NDcxOSwgCi0gICAgNzQ3MjYsIDc0NzMyLCAyMTA3NSwgNzQ3MzYsIDc0NzQyLCA3NDc0OSwgNzQ3NTUsIDc0NzYxLCA3NDc2NiwgNzQ3NzEsIAotICAgIDc0Nzc2LCA3NDc4NSwgNzAzMywgNzQ3OTAsIDE2NDEzLCA3NDc5NiwgNzQ4MDAsIDc0ODA0LCA3NDgwOCwgNzQ4MTYsIAotICAgIDc0ODI1LCA3NDgyOSwgNzQ4MzYsIDc0ODQ1LCA3NDg1OCwgNzQ4NjQsIDc0NDIzLCAzMDA2NywgNzQ4NjksIDc0ODcxLCAKLSAgICA3NDg3NiwgNzQ4ODEsIDc0ODg2LCA3NDg5MSwgNzQ4OTYsIDc0OTAxLCA3NDkwNiwgNzQ5MTEsIDc0OTE2LCA3NDkyMSwgCi0gICAgNzQ5MjYsIDc0OTMxLCA3NDkzNiwgNzQ5NDEsIDc0OTQ3LCA3NDk1MiwgNzQ5NTcsIDc0OTYyLCA3NDk2NywgNzQ5NzIsIAotICAgIDc0OTc3LCA3NDk4MiwgNzQ5ODcsIDc0OTkzLCA3NDk5OSwgNzUwMDUsIDc1MDEwLCA3NTAxNSwgNzUwMjcsIDc1MDMyLCAKLSAgICAxODcwLCA0OSwgNzUwMzcsIDc1MDQyLCAzMjcyMSwgNzUwNDYsIDMyNzI2LCAzMjczMSwgMzI3MzcsIDMyNzQyLCA3NTA1MCwgCi0gICAgMzI3NDcsIDIyMDcwLCA3NTA3MiwgNzUwNzYsIDc1MDgwLCA3NTA4NSwgNzUwODksIDMyNzUxLCA3NTA5MywgNzUxMDEsIAotICAgIDMyNzU2LCA3NTEwOCwgNzUxMTEsIDc1MTE2LCA3NTEyMCwgOTUzNiwgNzUxMjksIDMyNzYxLCAyMTkzMiwgNzUxMzIsIAotICAgIDc1MTM2LCAxNDI4LCA3NTE0MSwgMzI3NzIsIDc1MTQ0LCA3NTE0OSwgMjU3MjAsIDI1NzMwLCAzNTIzMywgNzUxNTQsIAotICAgIDc1MTU5LCA3NTE2NCwgNzUxNjksIDc1MTc1LCA3NTE4MCwgNzUxODksIDc1MTk0LCA3NTIwMSwgNzUyMDcsIDc1MjEyLCAKLSAgICA3NTIxNywgNzUyMjIsIDc1MjMyLCA3NTI0MSwgNzUyNDYsIDc1MjU0LCA3NTI1OCwgNzUyNjYsIDMyNTg2LCAzNzI4OCwgCi0gICAgNzUyNzMsIDc1Mjc5LCA3NTI4NCwgNzUyODksIDEyMDA5LCA3NTI5NCwgNzUzMDAsIDc1MzA1LCA3NTMxMiwgNzUzMTgsIAotICAgIDc1MzIzLCA3NTMzMSwgNzUzNDEsIDc1MzUxLCA3NTM1NywgNzUzNjIsIDc1MzY4LCAxNzUyMywgNzUzNzUsIDM2MDQ4LCAKLSAgICA3NTM4OCwgNzUzOTMsIDc1Mzk5LCAzMDk2OCwgNzU0MTIsIDc1NDE4LCA3NTQyMiwgNzU0MzEsIDc1NDM4LCA3NTQ0NCwgCi0gICAgNzU0NTIsIDc1NDYxLCA3NTQ2OCwgNzU0NzQsIDc1NDc3LCA3NTQ4MSwgMjU4NjEsIDc1NDg1LCA3NTQ5MiwgNzU0OTgsIAotICAgIDc1NTA2LCA3NTUxMSwgMjM5NzcsIDc1NTE3LCA3NTUyMCwgNzU1MjgsIDc1NTM2LCA3NTU1MCwgNzU1NTcsIDc1NTYzLCAKLSAgICA3NTU3MCwgNzU1NzYsIDMyNzg2LCA3NTU4MCwgNzU1ODcsIDc1NTk1LCA3NTYwMywgNzU2MDksIDMyNzkxLCA3NTYxNywgCi0gICAgNzU2MjMsIDc1NjI4LCA3NTYzOCwgNzU2NDQsIDc1NjUzLCAzMDgwNSwgMzQ2OTEsIDc1NjYxLCA3NTY2NiwgNzU2NzEsIAotICAgIDc1Njc1LCA3NTY4MCwgNzU2ODQsIDc1NjkyLCAxNDkwNywgMzk0MDAsIDc1Njk3LCA3NTcwMiwgMzI3OTYsIDYyMjMyLCAKLSAgICA3NTcwNiwgNzU3MTEsIDc1NzE1LCA3NTcyNCwgNzU3MzIsIDc1NzM4LCA3NTc0MywgNzU3NDksIDc1NzU2LCA3NTc2MiwgCi0gICAgNzU3NjcsIDc1NzcyLCA3NTc4MSwgNzU3OTMsIDc1ODA4LCAzMzA1OCwgNzU4MTQsIDE2NTMyLCAzMjgwMCwgNzU4MTgsIAotICAgIDc1ODI1LCAyNDA4NywgNzU4MzEsIDc1ODM4LCA3NTg0NywgNzU4NTQsIDc1ODYzLCA3NTg2OSwgNzU4NzQsIDc1ODgyLCAKLSAgICA3NTg4OCwgMzI4MTAsIDc1ODkzLCA3NTkwMiwgNzQ2ODIsIDc1OTExLCA3NTkxOCwgNzU5MjQsIDc1OTMwLCA3NTk0MCwgCi0gICAgNzU5NDgsIDc1OTU1LCA3NTk1OSwgMzI4MTUsIDc1OTYyLCAzMjgyMSwgMzI4MjcsIDc1OTY3LCA3NTk3NSwgNzU5ODMsIAotICAgIDc1OTkzLCA3NjAwMiwgNzYwMTAsIDc2MDE3LCA3NjAyNywgMzI4MzIsIDc2MDMxLCA3NjAzMywgNzYwMzcsIDc2MDQyLCAKLSAgICA3NjA0NiwgNzYwNTAsIDc2MDU2LCA3NjA2MSwgNzYwNjUsIDc2MDc2LCA3NjA4MSwgNzYwODYsIDMwNjAsIDc2MDkwLCAKLSAgICA3NjA5NywgNzYxMDEsIDc2MTEwLCA3NjExOCwgNzYxMjUsIDc2MTMwLCA3NjEzNSwgNjIyNzgsIDc2MTM5LCA3NjE0MiwgCi0gICAgNzYxNDgsIDc2MTU2LCA3NjE2MiwgNzYxNjYsIDc2MTcxLCA3NjE3OCwgNzYxODMsIDc2MTg5LCAzNDcyMiwgNzYxOTQsIAotICAgIDc2MTk3LCA3NjIwMiwgNzYyMDYsIDc2MjExLCA3NjIxNiwgNzYyMjAsIDc2MjI4LCA3NjIzMiwgMjU3MzksIDI1NzQ4LCAKLSAgICA3NjIzOCwgNzYyNDQsIDc2MjUwLCA3NjI1NSwgNzYyNTksIDc2MjYyLCA3NjI3MiwgNzYyODEsIDc2Mjg2LCA3NjI5MiwgCi0gICAgNzYyOTksIDc2MzA1LCA3NjMwOSwgNzYzMTcsIDc2MzIyLCAzNDcyOCwgNzYzMjYsIDc2MzM0LCA3NjM0MCwgNzYzNDcsIAotICAgIDc2MzUyLCA3NjM1NiwgNzYzNjEsIDU4NDAzLCAzNDczNCwgNzYzNjcsIDc2MzcyLCA3NjM3NiwgNzYzODEsIDc2Mzg2LCAKLSAgICA3NjM5MSwgNzYzOTUsIDc2NDAwLCA3NjQwNSwgNzY0MTEsIDc2NDE2LCA3NjQyMSwgNzY0MjcsIDc2NDMzLCA3NjQzOCwgCi0gICAgNzY0NDIsIDc2NDQ3LCA3NjQ1MiwgNzY0NTcsIDc2NDYxLCAyNDA4NiwgNzY0NjYsIDc2NDcxLCA3NjQ3NywgNzY0ODMsIAotICAgIDc2NDg5LCA3NjQ5NCwgNzY0OTgsIDc2NTAzLCA3NjUwOCwgNzY1MTMsIDc2NTE3LCA3NjUyMiwgNzY1MjcsIDc2NTMyLCAKLSAgICA3NjUzNywgNzY1NDEsIDMyODQwLCA3NjU0OSwgNzY1NTMsIDc2NTYxLCA3NjU2OSwgNzY1ODAsIDc2NTg1LCA3NjU4OSwgCi0gICAgMjIzODQsIDc2NTk0LCA3NjYwMCwgNzY2MTAsIDc2NjE3LCA3NjYyMiwgNzY2MzEsIDc2NjM2LCA3NjY0MCwgNzY2NDUsIAotICAgIDc2NjUzLCA3NjY2MSwgNzY2NjgsIDY1MDY4LCA3NjY3NCwgNzY2ODIsIDc2Njg5LCA3NjcwMCwgNzY3MDYsIDc2NzEwLCAKLSAgICA3NjcxNiwgMzI4NTAsIDc2NzE5LCA3NjcyNiwgNzY3MzQsIDc2NzM5LCAzOTU5MSwgNzY3NDMsIDc2NzQ4LCA3Njc1NSwgCi0gICAgNzY3NjAsIDg5ODUsIDc2NzY0LCA3Njc3MiwgNzY3NzksIDc2Nzg2LCA3Njc5MiwgNzY4MDYsIDYzMzQwLCA3NjgxNCwgCi0gICAgNzY4MjAsIDc2ODI0LCA3NjgyNywgNzY4MzUsIDc2ODQyLCA3Njg0NywgNzY4NjAsIDc2ODY3LCA3Njg3MSwgNzY4NzgsIAotICAgIDc2ODgzLCA2MDgyMywgNzY4ODgsIDc2ODkxLCA3Njg5OCwgNzY5MDQsIDc2OTA4LCA3NjkxNiwgNzY5MjUsIDc2OTM1LCAKLSAgICA3Njk0NSwgNzY5NTQsIDc2OTYyLCA3Njk3MywgNzY5NzgsIDc2OTgyLCA3Njk4NywgNzY5OTEsIDM1MzY0LCA3Njk5OSwgCi0gICAgMjEzNDQsIDM1MzczLCA3NzAwNCwgNzcwMDksIDc3MDE0LCA3NzAxOSwgNzcwMjQsIDc3MDI5LCA3NzAzNCwgNzcwMzgsIAotICAgIDc3MDQzLCA3NzA0OCwgNzcwNTMsIDc3MDU4LCA3NzA2MywgNzcwNjgsIDc3MDcyLCA3NzA3NywgNzcwODIsIDc3MDg2LCAKLSAgICA3NzA5MCwgNzcwOTQsIDc3MDk4LCA3NzEwMywgNzcxMDgsIDc3MTEyLCA3NzExNywgNzcxMjEsIDc3MTI1LCA3NzEzMCwgCi0gICAgNzcxMzUsIDc3MTQwLCA3NzE0NSwgNzcxNDksIDc3MTU0LCA3NzE1OSwgNzcxNjMsIDc3MTY4LCA3NzE3MywgNzcxNzgsIAotICAgIDc3MTgzLCA3NzE4OCwgNzcxOTMsIDc3MTk4LCA3NzIwMywgNzcyMDgsIDc3MjEzLCA3NzIxOCwgNzcyMjMsIDc3MjI4LCAKLSAgICA3NzIzMywgNzcyMzgsIDc3MjQzLCA3NzI0OCwgNzcyNTMsIDc3MjU4LCA3NzI2MywgNzcyNjcsIDc3MjcyLCA3NzI3NywgCi0gICAgNzcyODIsIDc3Mjg3LCA3NzI5MiwgNzcyOTcsIDc3MzAyLCA3NzMwNywgNzczMTIsIDc3MzE3LCA3NzMyMiwgNzczMjYsIAotICAgIDc3MzMxLCA3NzMzNSwgNzczNDAsIDc3MzQ1LCA3NzM1MCwgNzczNTUsIDc3MzYwLCA3NzM2NSwgNzczNzAsIDc3Mzc1LCAKLSAgICA3NzM4MCwgNzczODQsIDc3Mzg4LCA3NzM5MywgNzczOTgsIDc3NDAyLCA3NzQwNywgNzc0MTIsIDc3NDE2LCA3NzQyMSwgCi0gICAgNzc0MjYsIDc3NDMxLCA3NzQzNiwgNzc0NDAsIDc3NDQ1LCA3NzQ1MCwgNzc0NTQsIDc3NDU5LCA3NzQ2MywgNzc0NjcsIAotICAgIDc3NDcxLCA3NzQ3NSwgNzc0ODAsIDc3NDg0LCA3NzQ4OCwgNzc0OTIsIDc3NDk2LCA3NzUwMCwgNzc1MDQsIDc3NTA4LCAKLSAgICA3NzUxMiwgNzc1MTYsIDc3NTIxLCA3NzUyNiwgNzc1MzEsIDc3NTM2LCA3NzU0MSwgNzc1NDYsIDc3NTUxLCA3NzU1NiwgCi0gICAgNzc1NjEsIDc3NTY2LCA3NzU3MCwgNzc1NzQsIDc3NTc4LCA3NzU4MiwgNzc1ODYsIDc3NTkwLCA3NzU5NSwgNzc1OTksIAotICAgIDc3NjA0LCA3NzYwOCwgNzc2MTMsIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMxLCA3NzYzNSwgNzc2MzksIDc3NjQzLCAKLSAgICA3NzY0NywgNzc2NTEsIDc3NjU1LCA3NzY1OSwgNzc2NjMsIDc3NjY3LCA3NzY3MSwgNzc2NzUsIDc3Njc5LCA3NzY4MywgCi0gICAgNzc2ODcsIDc3NjkyLCA3NzY5NywgNzc3MDEsIDc3NzA1LCA3NzcwOSwgNzc3MTMsIDc3NzE3LCA3NzcyMSwgNzc3MjYsIAotICAgIDc3NzMwLCA3NzczNCwgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU1LCA3Nzc1OSwgNzc3NjQsIDc3NzY4LCAKLSAgICA3Nzc3MiwgNzc3NzYsIDc3NzgwLCA3Nzc4NCwgNzc3ODgsIDc3NzkyLCA3Nzc5NiwgNzc4MDAsIDc3ODA0LCA3NzgwOCwgCisgICAgODkzNSwgODkzOSwgODk0NCwgODk0OSwgODk1NiwgODk2MiwgODk3MiwgNzkwOSwgODk3OCwgODk4MiwgODk4OSwgODk5NiwgCisgICAgNzY4LCA5MDAwLCA5MDA0LCA5MDA5LCA5MDE0LCA5MDE5LCA5MDIzLCA5MDI5LCA5MDM3LCA5MDQzLCA5MDQ3LCA5MDUzLCAKKyAgICA5MDYzLCA5MDY3LCA5MDczLCA5MDc4LCA5MDgyLCA5MDg4LCA5MDk0LCAyMTYxLCA5MDk5LCA5MTAxLCA5MTA2LCA5MTE0LCAKKyAgICA5MTIzLCA5MTI3LCA5MTMzLCA5MTM4LCA5MTQzLCA5MTQ4LCA5MTUzLCA5MTU5LCA5MTY0LCA5MTY5LCA0MDA2LCA5MTc0LCAKKyAgICA5MTc5LCA5MTgzLCA5MTg5LCA5MTk0LCA5MjAwLCA5MjA1LCA5MjEwLCA5MjE2LCA5MjIxLCA5MTI4LCA5MjI3LCA5MjMxLCAKKyAgICA5MjM4LCA5MjQ0LCA5MjQ5LCA5MjUzLCA2MTgzLCA5MjU4LCA5MjY3LCA5MjcyLCA5Mjc3LCA4MjE4LCA4MjI1LCA5MjgyLCAKKyAgICAyODUzLCA5Mjg2LCA5MjkxLCA5Mjk2LCA5MTM5LCA5MzAwLCA5MzA1LCA5MTQ0LCA5MTQ5LCA5MzEwLCA5MzE3LCA5MzI0LCAKKyAgICA5MzMwLCA5MzM2LCA5MzQyLCA5MzQ3LCA5MzUyLCA5MzU3LCA5MTU0LCA5MTYwLCA5MzYzLCA5MzY5LCA5Mzc0LCA5MzgyLCAKKyAgICA5MTY1LCA5Mzg3LCA5OTAsIDkzOTAsIDkzOTgsIDk0MDQsIDk0MTAsIDk0MTksIDk0MjcsIDk0MzIsIDk0MzgsIDk0NDYsIAorICAgIDk0NTMsIDk0NjgsIDk0ODUsIDk1MDQsIDk1MTMsIDk1MjEsIDk1MzYsIDk1NDcsIDk1NTcsIDk1NjcsIDk1NzUsIDk1ODEsIAorICAgIDk1OTMsIDk2MDIsIDk2MTAsIDk2MTcsIDk2MjQsIDk2MzAsIDk2MzUsIDk2NDMsIDk2NTMsIDk2NjAsIDk2NzAsIDk2ODAsIAorICAgIDk2OTAsIDk2OTgsIDk3MDUsIDk3MTQsIDk3MjQsIDk3MzgsIDk3NTMsIDk3NjIsIDk3NzAsIDk3NzUsIDk3NzksIDk3ODgsIAorICAgIDk3OTQsIDk3OTksIDk4MDksIDk4MTksIDk4MjksIDk4MzQsIDk4MzgsIDk4NDcsIDk4NTIsIDk4NjIsIDk4NzMsIDk4ODYsIAorICAgIDk4OTQsIDk5MDcsIDk5MTksIDk5MjcsIDk5MzIsIDk5MzYsIDk5NDIsIDk5NDcsIDk5NTUsIDk5NjMsIDk5NzAsIDk5NzUsIAorICAgIDk5ODMsIDk5ODksIDk5OTIsIDk5OTYsIDEwMDAyLCAxMDAxMCwgMTAwMTUsIDEwMDE5LCAxMDAyNywgMTAwMzYsIDEwMDQ0LCAKKyAgICAxMDA1MCwgMTAwNTQsIDEwMDYxLCAxMDA3MiwgMTAwNzYsIDEwMDc5LCAxMDA4NSwgOTE3MCwgMTAwOTAsIDEwMDk2LCAKKyAgICAxMDEwMywgMTAxMDksIDEwMTE0LCAxMDEyMSwgMTAxMjgsIDEwMTM1LCAxMDE0MiwgMTAxNDksIDEwMTU2LCAxMDE2MywgCisgICAgMTAxNzAsIDEwMTc1LCA5NDgxLCAxMDE4MCwgMTAxODYsIDEwMTkzLCAxMDIwMCwgMTAyMDUsIDEwMjEyLCAxMDIyMSwgCisgICAgMTAyMjUsIDEwMjM3LCA4MjU2LCAxMDI0MSwgMTAyNDQsIDEwMjQ4LCAxMDI1MiwgMTAyNTYsIDEwMjYwLCAxMDI2NiwgCisgICAgMTAyNzIsIDEwMjc3LCAxMDI4MywgMTAyODgsIDEwMjkzLCAxMDI5OSwgMTAzMDQsIDEwMzA5LCA4OTUyLCAxMDMxNCwgCisgICAgMTAzMTgsIDEwMzIyLCAxMDMyNiwgMTAzMzEsIDEwMzM2LCAxMDM0NCwgMTAzNTAsIDEwMzU0LCAxMDM1OCwgMTAzNjUsIAorICAgIDEwMzcwLCAxMDM3OCwgMTAzODMsIDEwMzg3LCAxMDM5MCwgMTAzOTYsIDEwNDAzLCAxMDQwNywgMTA0MTAsIDEwNDE1LCAKKyAgICAxMDQxOSwgNDA0NSwgMTA0MjUsIDEwNDM0LCAzNiwgMTA0NDIsIDEwNDQ4LCAxMDQ1MywgODk2NywgMTA0NTgsIDEwNDYzLCAKKyAgICAxMDQ2NywgMTA0NzAsIDEwNDg1LCAxMDUwNCwgMTA1MTYsIDEwNTI5LCAxMDU0MiwgMTA1NTUsIDEwNTY5LCAxMDU4MiwgCisgICAgMTA1OTcsIDEwNjA0LCA5MTc1LCAxMDYxMCwgMTA2MjQsIDEwNjI5LCAxMDYzNSwgMTA2NDAsIDEwNjQ4LCAxMDY1MywgCisgICAgODA0MCwgMTA2NTgsIDEwNjYxLCAxMDY2OCwgMTA2NzMsIDEwNjc3LCAyODU4LCA5OTgsIDEwNjgzLCAxMDY4NywgMTA2OTMsIAorICAgIDEwNjk5LCAxMDcwNCwgMTA3MTAsIDEwNzE1LCA5MTg0LCAxMDcyMSwgMTA3MjcsIDEwNzMyLCAxMDczNywgMTA3NDUsIAorICAgIDEwNzUxLCAxMDc2NCwgMTA3NzIsIDEwNzc5LCA5MTkwLCAxMDc4NSwgMTA3OTMsIDEwODAxLCAxMDgwOCwgMTA4MjEsIAorICAgIDEwODMzLCAxMDg0MywgMTA4NTEsIDEwODU4LCAxMDg2NSwgMTA4NzQsIDEwODgzLCAxMDg5MSwgMTA4OTgsIDEwOTAzLCAKKyAgICAxMDkwOSwgOTE5NSwgMTA5MTQsIDEwOTIwLCA5MjAxLCAxMDkyNSwgMTA5MjgsIDEwOTM1LCAxMDk0MSwgMTA5NTQsIDg2NjksIAorICAgIDEwOTY1LCAxMDk3MSwgMTA5ODAsIDEwOTg4LCAxMDk5NSwgMTEwMDEsIDExMDA3LCAxMTAxMiwgMTEwMTYsIDExMDIxLCAKKyAgICAxMDQ3NywgMTEwMjcsIDkyMDYsIDExMDM0LCAxMTAzOSwgMTEwNDYsIDExMDUyLCAxMTA1OCwgMTEwNjMsIDExMDcxLCAKKyAgICAxMTA3OSwgMTEwODYsIDExMDkwLCAxMTEwNCwgMTExMTQsIDExMTE5LCAxMTEyMywgMTExMzQsIDExMTQwLCAxMTE0NSwgCisgICAgMTExNTAsIDkyMTEsIDkyMTcsIDExMTU0LCAxMTE1NywgMTExNjIsIDExMTc0LCAxMTE4MSwgMTExODYsIDExMTkwLCAKKyAgICAxMTE5NSwgMTExOTksIDExMjA2LCAxMTIxMiwgOTIyMiwgOTEyOSwgMTEyMTksIDI4NjMsIDgsIDExMjI2LCAxMTIzMSwgCisgICAgMTEyMzUsIDExMjQxLCAxMTI0OSwgMTEyNTksIDExMjY0LCAxMTI2OSwgMTEyNzYsIDExMjgzLCAxMTI4NywgMTEyOTgsIAorICAgIDExMzA4LCAxMTMxNywgMTEzMjksIDExMzM0LCAxMTMzOCwgMTEzNDYsIDExMzYwLCAxMTM2NCwgMTEzNjcsIDExMzc1LCAKKyAgICAxMTM4MiwgMTEzOTAsIDExMzk0LCAxMTQwNSwgMTE0MDksIDExNDE2LCAxMTQyMSwgMTE0MjUsIDExNDMxLCAxMTQzNiwgCisgICAgMTE0NDAsIDExNDQ2LCAxMTQ1MSwgMTE0NjIsIDExNDY2LCAxMTQ2OSwgMTE0NzUsIDExNDgwLCAxMTQ4NiwgMTE0OTIsIAorICAgIDExNDk5LCAxMTUxMCwgMTE1MjAsIDExNTMwLCAxMTUzOSwgMTE1NDYsIDExNTU1LCA5MjMyLCA5MjM5LCA5MjQ1LCA5MjUwLCAKKyAgICAxMTU2MSwgMTE1NjcsIDkyNTQsIDExNTczLCAxMTU3NiwgMTE1ODMsIDExNTg4LCAxMTYwMywgMTE2MTksIDExNjM0LCAKKyAgICAxMTY0MiwgMTE2NDgsIDExNjUzLCA4MzgsIDQyMCwgMTE2NTgsIDExNjY2LCAxMTY3MywgMTE2NzksIDExNjg0LCAxMTY4OSwgCisgICAgOTI1OSwgMTE2OTEsIDExNjk1LCAxMTcwMCwgMTE3MDQsIDExNzE0LCAxMTcxOSwgMTE3MjMsIDExNzMyLCAxMTczNiwgCisgICAgMTE3MzksIDkyNjgsIDExNzQ2LCAxMTc0OSwgMTE3NTcsIDExNzY0LCAxMTc3MiwgMTE3NzYsIDExNzgzLCAxMTc5MiwgCisgICAgMTE3OTUsIDExNzk5LCAxMTgwMywgMTE4MDksIDExODEzLCAxMTgxNywgMTE4MjEsIDExODI3LCAxMTgzNywgMTE4NDEsIAorICAgIDExODQ5LCAxMTg1MywgMTE4NjAsIDExODY0LCAxMTg2OSwgMTE4NzMsIDExODgwLCAxMTg4NiwgMTE4OTQsIDExOTAwLCAKKyAgICAxMTkwNSwgMTE5MTUsIDExOTIwLCAxMTkyNSwgMTE5MjksIDExOTM3LCAzOTA1LCAxMTk0NSwgMTE5NTAsIDkyNzMsIAorICAgIDExOTU0LCAxMTk1OCwgMTE5NjEsIDExOTY5LCAxMTk3NiwgMTE5ODAsIDU5OTEsIDExOTg0LCAxMTk4OSwgMTE5OTMsIAorICAgIDEyMDA0LCAxMjAxNCwgMTIwMTksIDEyMDI1LCAxMjAyOSwgMTIwMzIsIDEyMDQwLCAxMjA0NSwgMTIwNTAsIDEyMDU3LCAKKyAgICAxMjA2MiwgOTI3OCwgMTIwNjcsIDEyMDcxLCAxMjA3OCwgMTcyMiwgNjE0NSwgMTIwODMsIDEyMDg4LCAxMjA5MywgMTIwOTgsIAorICAgIDEyMTA0LCAxMjEwOSwgMTIxMTUsIDEyMTIwLCAxMjEyNSwgMTIxMzAsIDEyMTM1LCAxMjE0MCwgMTIxNDUsIDEyMTUwLCAKKyAgICAxMjE1NSwgMTIxNjAsIDEyMTY1LCAxMjE3MCwgMTIxNzUsIDEyMTgwLCAxMjE4NSwgMTIxOTAsIDEyMTk1LCAxMjIwMSwgCisgICAgMTIyMDYsIDEyMjExLCAxMjIxNiwgMTIyMjEsIDEyMjI2LCAxMjIzMiwgMTIyMzcsIDEyMjQyLCAxMjI0OCwgMTIyNTMsIAorICAgIDEyMjU5LCAxMjI2NCwgMTIyNzAsIDEyMjc1LCAxMjI4MCwgMTIyODUsIDEyMjkwLCAxMjI5NiwgMTIzMDEsIDEyMzA2LCAKKyAgICAxMjMxMSwgNzM3LCAxMzksIDEyMzE5LCAxMjMyMywgMTIzMjgsIDEyMzMzLCAxMjMzNywgMTIzNDEsIDEyMzQ1LCAxMjM1MCwgCisgICAgMTIzNTQsIDEyMzU5LCAxMjM2MywgMTIzNjYsIDEyMzcwLCAxMjM3NCwgMTIzODAsIDEyMzg1LCAxMjM5NSwgMTI0MDEsIAorICAgIDEyNDA5LCAxMjQxMywgMTI0MTcsIDEyNDI0LCAxMjQzMiwgMTI0NDEsIDEyNDUyLCAxMjQ1OSwgMTI0NjYsIDEyNDcwLCAKKyAgICAxMjQ3OSwgMTI0ODgsIDEyNDk2LCAxMjUwNSwgMTI1MTQsIDEyNTIzLCAxMjUzMiwgMTI1NDIsIDEyNTUyLCAxMjU2MiwgCisgICAgMTI1NzIsIDEyNTgyLCAxMjU5MSwgMTI2MDEsIDEyNjExLCAxMjYyMSwgMTI2MzEsIDEyNjQxLCAxMjY1MSwgMTI2NjEsIAorICAgIDEyNjcwLCAxMjY4MCwgMTI2OTAsIDEyNzAwLCAxMjcxMCwgMTI3MjAsIDEyNzMwLCAxMjczOSwgMTI3NDksIDEyNzU5LCAKKyAgICAxMjc2OSwgMTI3NzksIDEyNzg5LCAxMjc5OSwgMTI4MDksIDEyODE5LCAxMjgyOSwgMTI4MzgsIDEyODQ4LCAxMjg1OCwgCisgICAgMTI4NjgsIDEyODc4LCAxMjg4OCwgMTI4OTgsIDEyOTA4LCAxMjkxOCwgMTI5MjgsIDEyOTM4LCAxMjk0NywgMTI1NiwgCisgICAgMTI5NTMsIDEyOTU2LCAxMjk2MCwgMTI5NjUsIDEyOTcyLCAxMjk3OCwgMTI5ODMsIDEyOTg3LCAxMjk5MiwgMTMwMDEsIAorICAgIDEzMDA5LCAxMzAxNCwgMTMwMTgsIDEzMDIyLCAxMzAyOCwgMTMwMzMsIDEzMDM5LCA5Mjg3LCAxMzA0NCwgMTMwNDksIAorICAgIDEzMDU4LCA5MjkyLCAxMzA2MywgMTMwNjYsIDEzMDcyLCAxMzA4MCwgOTI5NywgMTMwODcsIDEzMDkxLCAxMzA5NSwgCisgICAgMTMwOTksIDEzMTA5LCAxMzExNSwgMTMxMjEsIDEzMTI2LCAxMzEzNSwgMTMxNDMsIDEzMTUwLCAxMzE1NywgMTMxNjIsIAorICAgIDEzMTY5LCAxMzE3NCwgMTMxNzgsIDEzMTgxLCAxMzE5MiwgMTMyMDIsIDEzMjExLCAxMzIxOSwgMTMyMzAsIDEzMjQyLCAKKyAgICAxMzI1MiwgMTMyNTcsIDEzMjYxLCAxMzI2NiwgMTMyNzEsIDEzMjc1LCAxMzI4MSwgMTMyODksIDEzMjk2LCAxMzMwNywgCisgICAgMTMzMTIsIDEzMzIyLCAxMzMyNiwgMTMzMjksIDEzMzM2LCAxMzM0NiwgMTMzNTUsIDEzMzYyLCAxMzM2NiwgMTMzNzMsIAorICAgIDEzMzc5LCAxMzM4NCwgMTMzODksIDEzMzkzLCAxMzQwMiwgMTM0MDcsIDEzNDEzLCAxMzQxNywgMTM0MjIsIDEzNDI2LCAKKyAgICAxMzQzNSwgMTM0NDMsIDEzNDUxLCAxMzQ1OCwgMTM0NjYsIDEzNDc4LCAxMzQ4OSwgMTM0OTksIDEzNTA2LCAxMzUxMiwgCisgICAgMTM1MjEsIDEzNTMyLCAxMzU0MSwgMTM1NTMsIDEzNTY1LCAxMzU3NywgMTM1ODcsIDEzNTk2LCAxMzYwNSwgMTM2MTMsIAorICAgIDEzNjIwLCAxMzYyOSwgMTM2MzcsIDEzNjQxLCAxMzY0NywgMTM2NTMsIDEzNjU4LCA3NzUzLCAxMzY2MiwgMTM2NjQsIAorICAgIDEzNjY4LCAxMzY3MywgMTM2NzksIDEzNjg4LCAxMzY5MiwgMTM2OTgsIDEzNzA2LCAxMzcxMywgMTM3MjIsIDEzNzMxLCAKKyAgICAxMzc0MCwgMTM3NDksIDEzNzU4LCAxMzc2NywgMTM3NzYsIDEzNzg1LCAxMzc5NSwgMTM4MDUsIDEzODE0LCAxMzgyMCwgCisgICAgMTM4MjcsIDEzODM0LCAxMzg0MCwgMTM4NTQsIDEzODYxLCAxMzg2OSwgMTM4NzgsIDEzODg0LCAxMzg5MywgMTM5MDIsIAorICAgIDEzOTEzLCAxMzkyMywgMTM5MzEsIDEzOTM4LCAxMzk0NiwgMTM5NTUsIDEzOTY4LCAxMzk3NiwgMTM5ODMsIDEzOTk2LCAKKyAgICAxNDAwMiwgMTQwMDgsIDE0MDE4LCAxNDAyNywgMTQwMzYsIDE0MDQxLCAxNDA0NSwgMTQwNTEsIDE0MDU3LCAxNDA2NCwgCisgICAgODk2NiwgMTQwNjksIDE0MDc0LCAxNDA4MSwgMTQwODYsIDEyMzc2LCAxNDA5MSwgMTQwOTksIDE0MTA1LCAxNDExMCwgCisgICAgMTQxMTgsIDE0MTI2LCAxNDEzMywgMTQxNDEsIDE0MTQ3LCAxNDE1NSwgMTQxNjMsIDE0MTY5LCAxNDE3NCwgMTQxODAsIAorICAgIDE0MTg3LCAxNDE5MywgMTQxOTgsIDE0MjAyLCAxNDIxMywgMTQyMjEsIDE0MjI3LCAxNDIzMiwgMTQyNDEsIDE0MjQ3LCAKKyAgICAxNDI1MiwgMTQyNjEsIDE0Mjc1LCAzODUzLCAxNDI3OSwgMTQyODQsIDE0Mjg5LCAxNDI5NSwgMTQzMDAsIDE0MzA1LCAKKyAgICAxNDMwOSwgMTQzMTQsIDE0MzE5LCAxNDMyNCwgNzc1MiwgMTQzMjksIDE0MzM0LCAxNDMzOSwgMTQzNDQsIDE0MzQ5LCAKKyAgICAxNDM1MywgMTQzNTgsIDE0MzYzLCAxNDM2OCwgMTQzNzMsIDE0Mzc5LCAxNDM4NSwgMTQzOTAsIDE0Mzk0LCAxNDM5OSwgCisgICAgMTQ0MDQsIDE0NDA5LCA5MzAxLCAxNDQxNCwgMTQ0MTksIDE0NDI0LCAxNDQyOSwgMTQ0MzQsIDE0NDUxLCAxNDQ2OSwgCisgICAgMTQ0ODEsIDE0NDk0LCAxNDUxMSwgMTQ1MjcsIDE0NTQ0LCAxNDU1NCwgMTQ1NzMsIDE0NTg0LCAxNDU5NSwgMTQ2MDYsIAorICAgIDE0NjE3LCAxNDYyOSwgMTQ2NDAsIDE0NjUxLCAxNDY2OCwgMTQ2NzksIDE0NjkwLCAxNDY5NSwgOTMwNiwgMTQ3MDAsIAorICAgIDE0NzA0LCAyMzgxLCAxNDcwOCwgMTQ3MTEsIDE0NzE3LCAxNDcyNSwgMTQ3MzMsIDE0NzM4LCAxNDc0NiwgMTQ3NTQsIAorICAgIDE0NzYxLCAxNDc2NiwgMTQ3NzIsIDE0Nzc5LCAxNDc4NywgMTQ3OTQsIDE0ODA2LCAxNDgxNCwgMTQ4MTksIDExNTk3LCAKKyAgICAxNDgyNSwgMTQ4MzQsIDE0ODQzLCAxNDg1MSwgMTQ4NTgsIDE0ODY0LCAxNDg3MiwgMTQ4NzksIDE0ODg1LCAxNDg5MiwgCisgICAgMTQ4OTgsIDE0OTA3LCAxNDkxNSwgMTQ5MjUsIDE0OTMyLCAxNDkzOCwgMTQ5NDYsIDE0OTUyLCAxNDk2MCwgMTQ5NjcsIAorICAgIDE0OTgwLCAxNDk4NywgMTQ5OTYsIDE1MDA1LCAxNTAxNCwgMTUwMjIsIDE1MDMyLCAxNTAzOSwgMTUwNDQsIDM1NjAsIAorICAgIDE1MDUxLCAxNTA1NiwgMTM3MiwgMTUwNjAsIDE0MzMwLCAxNTA2NCwgMTUwNzAsIDE1MDc0LCAxNTA4MiwgMTUwOTQsIAorICAgIDE1MDk5LCAxNTEwNiwgMTUxMTIsIDE1MTE3LCAxNTEyNCwgMTQzMzUsIDE1MTI4LCAxNTEzMiwgMTUxMzYsIDE0MzQwLCAKKyAgICAxNTE0MCwgMTQzNDUsIDE1MTQ0LCAxNTE1MSwgMTUxNTYsIDE1MTYwLCAxNTE2NywgMTUxNzEsIDE1MTc5LCAxNTE4NiwgCisgICAgMTUxOTAsIDE1MTk3LCAxNTIxNCwgMTUyMjMsIDE1MjI3LCAxNTIzMCwgMTUyMzgsIDE1MjQ0LCAxNTI0OSwgMzYzOCwgCisgICAgMTUyNTMsIDE1MjU1LCAxNTI2MywgMTUyNzAsIDE1MjgwLCAxNTI5MiwgMTUyOTcsIDE1MzAzLCAxNTMwOCwgMTUzMTIsIAorICAgIDE1MzE4LCAxNTMyMywgMTUzMjksIDE1MzMyLCAxNTMzOSwgMTUzNDcsIDE1MzU0LCAxNTM2MCwgMTUzNjYsIDE1MzcxLCAKKyAgICAxNTM3OCwgMTUzODQsIDE1Mzg5LCAxNTM5NiwgMTU0MDAsIDE1NDA2LCAxNTQxMCwgMTU0MTcsIDE1NDIzLCAxNTQyOSwgCisgICAgMTU0MzcsIDE1NDQzLCAxNTQ0OCwgMTU0NTQsIDE1NDYyLCAxNTQ3MCwgMTU0NzYsIDE1NDgyLCAxNTQ4NywgMTU0OTQsIAorICAgIDE1NDk5LCAxNTUwMywgMTU1MDksIDE1NTE0LCAxNTUyMSwgMTU1MjYsIDE1NTMyLCAxNTUzNSwgMTU1NDEsIDE1NTQ3LCAKKyAgICAxNTU1MCwgMTU1NTQsIDE1NTY2LCAxNTU3MiwgMTU1NzcsIDE1NTg0LCAxNTU5MCwgMTU1OTYsIDE1NjA3LCAxNTYxNywgCisgICAgMTU2MjYsIDE1NjM0LCAxNTY0MSwgMTU2NTIsIDE1NjYyLCAxNTY3MiwgMTU2ODAsIDE1NjgzLCAxNDM1OSwgMTU2ODgsIAorICAgIDE1NjkzLCAxNDM2NCwgMTQ0OTksIDE1NzAxLCAxNTcxNCwgMTU3MjksIDE1NzQwLCAxNDUxNiwgMTU3NTgsIDE1NzcxLCAKKyAgICAxNTc4NCwgMTU3OTUsIDEwNDkyLCAxNTgwNiwgMTU4MTksIDE1ODM4LCAxNTg0OSwgMTU4NjAsIDE1ODcxLCAyNjQ5LCAKKyAgICAxNTg4NCwgMTU4ODgsIDE1ODk2LCAxNTkxMSwgMTU5MjYsIDE1OTM3LCAxNTk0NCwgMTU5NTAsIDE1OTU4LCAxNTk2MiwgCisgICAgMTU5NjgsIDE1OTcxLCAxNTk4MSwgMTU5ODksIDE1OTk2LCAxNjAwNCwgMTYwMTQsIDE2MDE5LCAxNjAyNiwgMTYwMzEsIAorICAgIDE2MDM4LCAxNjA0OSwgMTYwNTksIDE2MDY1LCAxNjA3MCwgMTYwNzUsIDE0MzY5LCAxNjA3OSwgMTYwODUsIDE2MDkxLCAKKyAgICAxNjA5NiwgMTYxMDEsIDE2MTA2LCAxNjExMCwgMTQzNzQsIDE0MzgwLCAxNjExNCwgMTQzODYsIDE2MTE5LCAxNjEyNywgCisgICAgMTYxMzYsIDE2MTQzLCA5MTUwLCAxNjE0NywgMTYxNDksIDE2MTU0LCAxNjE1OSwgMTYxNjUsIDE2MTcwLCAxNjE3NSwgCisgICAgMTYxODAsIDE2MTg1LCAxNjE4OSwgMTYxOTUsIDE2MjAxLCAxNjIwNiwgMTYyMTIsIDE2MjE3LCAxNjIyMiwgMTYyMjgsIAorICAgIDE2MjMzLCAxNjIzOCwgMTYyNDMsIDE2MjQ4LCAxNjI1NCwgMTYyNTksIDE2MjY0LCAxNjI3MCwgMTYyNzYsIDE2MjgxLCAKKyAgICAxNjI4NiwgMTYyOTMsIDE2Mjk5LCAxNjMxMCwgMTYzMTcsIDE2MzIyLCAxNjMyNiwgMTYzMzAsIDE2MzMzLCAxNjM0MSwgCisgICAgMTYzNDYsIDE2MzUzLCAxNjM2MCwgMTYzNjYsIDE2MzcxLCAxNjM3NiwgMTYzODMsIDE2MzkzLCAxNjM5OCwgMTY0MDUsIAorICAgIDE2NDExLCAxNjQyMSwgMTY0MzEsIDE2NDQ1LCAxNjQ1OSwgMTY0NzMsIDE2NDg3LCAxNjUwMiwgMTY1MTcsIDE2NTM0LCAKKyAgICAxNjU1MiwgMTY1NjUsIDE2NTcxLCAxNjU3NiwgMTY1ODEsIDE2NTg1LCAxNjU5MCwgMTY1OTgsIDE2NjA0LCAxNjYwOSwgCisgICAgMTY2MTQsIDE2NjE4LCAxNjYyMywgMTY2MjcsIDE2NjMyLCAxNjYzNiwgMTY2NDcsIDE2NjUzLCAxNjY1OCwgMTY2NjMsIAorICAgIDE2NjcwLCAxNjY3NSwgMTY2NzksIDE2Njg0LCAxNjY4OSwgMTY2OTUsIDE2NzAyLCAxNjcwOCwgMTY3MTMsIDE2NzE3LCAKKyAgICAxNjcyMywgMTY3MjgsIDE2NzMzLCAxNjczNywgMTY3NDMsIDE2NzQ4LCAxNjc1MywgMTY3NjAsIDE2NzY1LCAxMzExMSwgCisgICAgMTY3NjksIDE2Nzc0LCAxNjc3OCwgMTY3ODMsIDE2Nzg5LCAxNjc5NSwgMTY4MDIsIDE2ODEyLCAxNjgyMCwgMTY4MjcsIAorICAgIDE2ODMyLCAxNjgzNiwgMTY4NDUsIDE2ODUzLCAxNjg2MCwgMTY4NjcsIDE2ODczLCAxNjg3OSwgMTY4ODQsIDE2ODg5LCAKKyAgICAxNjg5NSwgMTY5MDAsIDE2OTA2LCAxNjkxMSwgMTY5MTcsIDE2OTIzLCAxNjkzMCwgMTY5MzYsIDE2OTQxLCAxNjk0NiwgCisgICAgOTM0OCwgMTY5NTUsIDE2OTU4LCAxNjk2NCwgMTY5NjksIDE2OTc0LCAxNjk4NCwgMTY5OTEsIDE2OTk3LCAxNzAwMiwgCisgICAgMTcwMDcsIDE3MDEzLCAxNzAxOCwgMTcwMjQsIDE3MDI5LCAxNzAzNSwgMTcwNDEsIDE3MDQ2LCAxNzA1NCwgMTcwNjEsIAorICAgIDE3MDY2LCAxNzA3MSwgMTcwNzcsIDE3MDgyLCAxNzA4NiwgMTcwOTUsIDE3MTA2LCAxNzExMywgMTcxMTgsIDE3MTI2LCAKKyAgICAxNzEzMiwgMTcxMzksIDE3MTQ1LCAxNzE1MCwgMTcxNTQsIDE3MTYwLCAxNzE2NSwgMTcxNzAsIDE3MTc1LCAxNDQwLCAKKyAgICA3Nzc3LCAyODc3LCAxNzE3OSwgMTcxODMsIDE3MTg3LCAxNzE5MSwgMTcxOTUsIDE3MTk5LCAxNzIwMiwgMTcyMDksIAorICAgIDE3MjE3LCAxNDQwMCwgMTcyMjQsIDE3MjM0LCAxNzI0MiwgMTcyNDksIDE3MjU3LCAxNzI2NywgMTcyNzYsIDE3Mjg5LCAKKyAgICAxNzI5NCwgMTcyOTksIDE3MzA3LCAxNzMxNCwgMTMyMDcsIDEzMjE2LCAxNzMyMSwgMTczMzEsIDE3MzQ2LCAxNzM1MiwgCisgICAgMTczNTksIDE3MzY2LCAxNzM3MiwgMTczODAsIDE3MzkwLCAxNzQwMCwgMTQ0MDUsIDE3NDA5LCAxNzQxNSwgMTc0MjEsIAorICAgIDE3NDI5LCAxNzQzNywgMTc0NDIsIDE3NDUxLCAxNzQ1OSwgMTc0NzEsIDE3NDgxLCAxNzQ5MSwgMTc1MDEsIDE3NTEwLCAKKyAgICAxNzUyMiwgMTc1MzIsIDE3NTQyLCAxNzU1MywgMTc1NTgsIDE3NTcwLCAxNzU4MiwgMTc1OTQsIDE3NjA2LCAxNzYxOCwgCisgICAgMTc2MzAsIDE3NjQyLCAxNzY1NCwgMTc2NjYsIDE3Njc4LCAxNzY4OSwgMTc3MDEsIDE3NzEzLCAxNzcyNSwgMTc3MzcsIAorICAgIDE3NzQ5LCAxNzc2MSwgMTc3NzMsIDE3Nzg1LCAxNzc5NywgMTc4MDksIDE3ODIwLCAxNzgzMiwgMTc4NDQsIDE3ODU2LCAKKyAgICAxNzg2OCwgMTc4ODAsIDE3ODkyLCAxNzkwNCwgMTc5MTYsIDE3OTI4LCAxNzk0MCwgMTc5NTEsIDE3OTYzLCAxNzk3NSwgCisgICAgMTc5ODcsIDE3OTk5LCAxODAxMSwgMTgwMjMsIDE4MDM1LCAxODA0NywgMTgwNTksIDE4MDcxLCAxODA4MiwgMTgwOTQsIAorICAgIDE4MTA2LCAxODExOCwgMTgxMzAsIDE4MTQyLCAxODE1NCwgMTgxNjYsIDE4MTc4LCAxODE5MCwgMTgyMDIsIDE4MjEzLCAKKyAgICAxODIyNSwgMTgyMzcsIDE4MjQ5LCAxODI2MSwgMTgyNzMsIDE4Mjg1LCAxODI5NywgMTgzMDksIDE4MzIxLCAxODMzMywgCisgICAgMTgzNDQsIDE4MzU2LCAxODM2OCwgMTgzODAsIDE4MzkyLCAxODQwNCwgMTg0MTYsIDE4NDI4LCAxODQ0MCwgMTg0NTIsIAorICAgIDE4NDY0LCAxODQ3NSwgMTg0ODcsIDE4NDk5LCAxODUxMSwgMTg1MjMsIDE4NTM2LCAxODU0OSwgMTg1NjIsIDE4NTc1LCAKKyAgICAxODU4OCwgMTg2MDEsIDE4NjE0LCAxODYyNiwgMTg2MzksIDE4NjUyLCAxODY2NSwgMTg2NzgsIDE4NjkxLCAxODcwNCwgCisgICAgMTg3MTcsIDE4NzMwLCAxODc0MywgMTg3NTYsIDE4NzY4LCAxODc4MSwgMTg3OTQsIDE4ODA3LCAxODgyMCwgMTg4MzMsIAorICAgIDE4ODQ2LCAxODg1OSwgMTg4NzIsIDE4ODg1LCAxODg5OCwgMTg5MTAsIDE4OTIzLCAxODkzNiwgMTg5NDksIDE4OTYyLCAKKyAgICAxODk3NSwgMTg5ODgsIDE5MDAxLCAxOTAxNCwgMTkwMjcsIDE5MDQwLCAxOTA1MiwgMTkwNjUsIDE5MDc4LCAxOTA5MSwgCisgICAgMTkxMDQsIDE5MTE3LCAxOTEzMCwgMTkxNDMsIDE5MTU2LCAxOTE2OSwgMTkxODIsIDE5MTk0LCAxOTIwNywgMTkyMjAsIAorICAgIDE5MjMzLCAxOTI0NiwgMTkyNTksIDE5MjcyLCAxOTI4NSwgMTkyOTgsIDE5MzExLCAxOTMyNCwgMTkzMzYsIDE5MzQ3LCAKKyAgICAxOTM2MCwgMTkzNzMsIDE5Mzg2LCAxOTM5OSwgMTk0MTIsIDE5NDI1LCAxOTQzOCwgMTk0NTEsIDE5NDY0LCAxOTQ3NywgCisgICAgMTk0ODksIDE5NTAyLCAxOTUxNSwgMTk1MjgsIDE5NTQxLCAxOTU1NCwgMTk1NjcsIDE5NTgwLCAxOTU5MywgMTk2MDYsIAorICAgIDE5NjE5LCAxOTYzMSwgMTk2NDQsIDE5NjU3LCAxOTY3MCwgMTk2ODMsIDE5Njk2LCAxOTcwOSwgMTk3MjIsIDE5NzM1LCAKKyAgICAxOTc0OCwgMTk3NjEsIDE5NzczLCAxOTc4NiwgMTk3OTksIDE5ODEyLCAxOTgyNSwgMTk4MzgsIDE5ODUxLCAxOTg2NCwgCisgICAgMTk4NzcsIDE5ODkwLCAxOTkwMywgMTk5MTUsIDE5OTI4LCAxOTk0MSwgMTk5NTQsIDE5OTY3LCAxOTk4MCwgMTk5OTMsIAorICAgIDIwMDA2LCAyMDAxOSwgMjAwMzIsIDIwMDQ1LCAyMDA1NywgMjAwNzAsIDIwMDgzLCAyMDA5NiwgMjAxMDksIDIwMTIyLCAKKyAgICAyMDEzNSwgMjAxNDgsIDIwMTYxLCAyMDE3NCwgMjAxODcsIDIwMTk5LCAyMDIxMiwgMjAyMjUsIDIwMjM4LCAyMDI1MSwgCisgICAgMjAyNjQsIDIwMjc3LCAyMDI5MCwgMjAzMDMsIDIwMzE2LCAyMDMyOSwgMjAzNDEsIDIwMzU0LCAyMDM2NywgMjAzODAsIAorICAgIDIwMzkzLCAyMDQwNiwgMjA0MTksIDIwNDMyLCAyMDQ0NSwgMjA0NTgsIDIwNDcxLCAyMDQ4MywgMjA0OTYsIDIwNTA5LCAKKyAgICAyMDUyMiwgMjA1MzUsIDIwNTQ4LCAyMDU2MSwgMjA1NzQsIDIwNTg3LCAyMDYwMCwgMjA2MTMsIDIwNjI1LCAyMDYzOCwgCisgICAgMjA2NTEsIDIwNjY0LCAyMDY3NywgMjA2OTAsIDIwNzAzLCAyMDcxNiwgMjA3MjksIDIwNzQyLCAyMDc1NSwgMjA3NjcsIAorICAgIDIwNzc4LCAyMDc4NiwgMjA3OTQsIDIwODAxLCAyMDgwNywgMjA4MTEsIDIwODE3LCAyMDgyMywgMjA4MzEsIDIwODM3LCAKKyAgICAyMDg0MiwgMjA4NDYsIDIwODU1LCA5MTU1LCAyMDg2NiwgMjA4NzMsIDIwODgxLCAyMDg4OCwgMjA4OTUsIDEwOTQ4LCAKKyAgICAyMDkwMiwgMjA5MTEsIDIwOTE2LCAyMDkyMSwgNzgwNSwgMjA5MjgsIDIwOTMzLCAyMDkzNiwgMjA5NDEsIDIwOTQ5LCAKKyAgICAyMDk1NiwgMjA5NjMsIDIwOTcwLCAyMDk3NiwgMjA5ODUsIDIwOTk0LCAyMTAwMCwgMjEwMDksIDIxMDEzLCAyMTAxOSwgCisgICAgMjEwMjQsIDIxMDM0LCAyMTA0MSwgMjEwNDcsIDIxMDU1LCAyMTA2MSwgMjEwNjgsIDIxMDc4LCAyMTA4NywgMjEwOTEsIAorICAgIDIxMDk4LCAyMTEwMiwgMjExMDcsIDIxMTEzLCAyMTEyMSwgMjExMjUsIDIxMTM1LCAxNDQxNSwgMjExNDQsIDIxMTUwLCAKKyAgICAyMTE1NCwgMjExNjMsIDE0NDIwLCAyMTE2OSwgMjExNzYsIDIxMTg3LCAyMTE5NSwgMjEyMDQsIDIxMjEyLCA4OTMxLCAKKyAgICAyMTIyMCwgMjEyMjUsIDIxMjMxLCAyMTIzNiwgMjEyNDAsIDIxMjQ0LCAyMTI0OCwgOTYzOSwgMjEyNTMsIDIxMjYxLCAKKyAgICAyMTI2OCwgMjEyNzcsIDIxMjg0LCAyMTI5MSwgMTA4NzgsIDIxMjk4LCAyMTMwNCwgMjEzMDgsIDIxMzE0LCAyMTMyMSwgCisgICAgMjEzMjcsIDIxMzM1LCAyMTM0MSwgMjEzNDgsIDIxMzU0LCAyMTM2MCwgMjEzNjksIDIxMzczLCAyMTM4MSwgMjEzOTAsIAorICAgIDIxMzk3LCAyMTQwMiwgMjE0MDYsIDIxNDE3LCAyMTQyMiwgMjE0MjcsIDIxNDMyLCAyMTQ0NSwgNzk5NSwgMjE0NDksIAorICAgIDIxNDU1LCAyMTQ2MywgMjE0NjcsIDIxNDc0LCAyMTQ4MywgMjE0ODgsIDE0NjkxLCAyMTQ5NiwgMjE1MDAsIDIxNTEyLCAKKyAgICAyMTUxNywgMjE1MjEsIDIxNTI0LCAyMTUzMCwgMjE1MzYsIDIxNTQxLCAyMTU0NSwgMjE1NDgsIDIxNTU5LCAyMTU2NCwgCisgICAgOTM4MywgMjE1NzEsIDIxNTc2LCA5Mzg4LCAyMTU4MSwgMjE1ODYsIDIxNTkxLCAyMTU5NiwgMjE2MDEsIDIxNjA2LCAKKyAgICAyMTYxMSwgMjE2MTYsIDIxNjIxLCAyMTYyNiwgMjE2MzEsIDIxNjM2LCAyMTY0MiwgMjE2NDcsIDIxNjUyLCAyMTY1NywgCisgICAgMjE2NjIsIDIxNjY3LCAyMTY3MiwgMjE2NzcsIDIxNjgyLCAyMTY4NywgMjE2OTMsIDIxNjk5LCAyMTcwNCwgMjE3MDksIAorICAgIDIxNzE0LCAyMTcxOSwgMjE3MjQsIDIxNzI5LCAyMTczNCwgMjE3MzksIDIxNzQ0LCAyMTc1MCwgMjE3NTUsIDIxNzYwLCAKKyAgICAyMTc2NSwgMjE3NzEsIDIxNzc3LCAyMTc4MiwgMjE3ODcsIDIxNzkyLCAyMTc5NywgMjE4MDIsIDIxODA3LCAyMTgxMiwgCisgICAgMjE4MTcsIDIxODIzLCAyMTgyOCwgMjE4MzMsIDIxODM4LCAyMTg0MywgMjE4NDksIDIxODU0LCAyMTg1OSwgMjE4NjMsIAorICAgIDEzNjgsIDEyOSwgMjE4NzEsIDIxODc1LCAyMTg3OSwgMjE4ODMsIDIxODg4LCAyMTg5MiwgMTMxMTcsIDEyNDc2LCAyMTg5NiwgCisgICAgMjE5MDEsIDIxOTA1LCAyMTkxMCwgMjE5MTQsIDIxOTE5LCAyMTkyMywgMjE5MjksIDIxOTM0LCAyMTkzOCwgMjE5NDIsIAorICAgIDIxOTUwLCAyMTk1NCwgMjE5NTgsIDIxOTYzLCAyMTk2OCwgMjE5NzIsIDIxOTc4LCAyMTk4MywgMjE5ODcsIDIxOTkyLCAKKyAgICAyMTk5NywgMjIwMDEsIDIyMDA4LCAyMjAxNSwgMjIwMjIsIDIyMDI2LCAyMjAzMCwgMjIwMzUsIDIyMDM5LCAyMjA0MiwgCisgICAgMjIwNDgsIDIyMDYxLCAyMjA2NiwgMjIwNzUsIDIyMDgwLCA5NDI4LCAyMjA4NSwgMjIwODgsIDI3MTIsIDI3MTcsIDIyMDkyLCAKKyAgICAyMjA5OCwgMjIxMDQsIDcyMDksIDIyMTA5LCAyMjExNCwgMjIxMTksIDIyMTI1LCAyMjEzMCwgMTM5MDksIDIyMTM1LCAKKyAgICAyMjE0MCwgMjIxNDUsIDIyMTUwLCAyMjE1NiwgMjIxNjEsIDIyMTY2LCAyMjE3MiwgMjIxNzcsIDIyMTgxLCAyMjE4NiwgCisgICAgMjIxOTEsIDIyMTk2LCAyMjIwMSwgMjIyMDUsIDIyMjEwLCAyMjIxNCwgMjIyMTksIDIyMjI0LCAyMjIyOSwgMjIyMzQsIAorICAgIDIyMjM4LCAyMjI0MywgMjIyNDcsIDIyMjUyLCAyMjI1NywgMjIyNjIsIDIyMjY3LCAyODg2LCAyMjE4MiwgMjIyNzEsIAorICAgIDIyMjc5LCAyMjI4NiwgOTczMywgMjIyOTgsIDIyMzA2LCAyMjE4NywgMjIzMTMsIDIyMzE4LCAyMjMyNiwgMjIxOTIsIAorICAgIDIyMzMxLCAyMjMzNiwgMjIzNDQsIDIyMzQ5LCAyMjE5NywgMjIzNTQsIDIyMzU5LCAyMjM2MywgMjIzNjksIDIyMzc3LCAKKyAgICAyMjM4MCwgMjIzODcsIDIyMzkxLCAyMjM5NSwgMjI0MDEsIDIyNDA4LCAyMjQxMywgODk1OCwgMTcyNywgMTczMiwgMjI0MTcsIAorICAgIDIyNDIzLCAyMjQyOSwgMjI0MzQsIDIyNDM4LCAyMjQ0MiwgMjI0NDYsIDIyNDUwLCAyMjQ1NCwgMjI0NTgsIDIyNDYyLCAKKyAgICAyMjQ2NiwgMjI0NjksIDIyNDc1LCAyMjQ4MiwgMjI0OTAsIDIyNDk2LCAyMjUwMiwgMjI1MDcsIDIyNTEyLCAyMjUxNiwgCisgICAgMTM4MjksIDEzODM2LCAyMjUyMSwgMjI1MzMsIDIyNTM2LCAyMjU0MywgMTYzNjIsIDIyNTUwLCAyMjU1OCwgMjI1NjksIAorICAgIDIyNTc4LCAyMjU5MSwgMjI2MDEsIDIyNjE1LCAyMjYyNywgMjI2NDEsIDIyNjUzLCAyMjY2MywgMjI2NzUsIDIyNjgxLCAKKyAgICAyMjY5NiwgMjI3MjAsIDIyNzM4LCAyMjc1NywgMjI3NzAsIDIyNzg0LCAyMjgwMiwgMjI4MTgsIDIyODM1LCAyMjg1MywgCisgICAgMjI4NjQsIDIyODgzLCAyMjkwMCwgMjI5MjAsIDIyOTM4LCAyMjk1MCwgMjI5NjQsIDIyOTc4LCAyMjk5MCwgMjMwMDcsIAorICAgIDIzMDI2LCAyMzA0NCwgMjMwNTYsIDIzMDc0LCAyMzA5MywgMTQ1NTksIDIzMTA2LCAyMzEyNiwgMjMxMzgsIDEwNTIzLCAKKyAgICAyMzE1MCwgMjMxNTUsIDIzMTYwLCAyMzE2NSwgMjMxNzEsIDIzMTc2LCAyMzE4MCwgMjMxODcsIDIzOTgsIDIzMTkxLCAKKyAgICAyMzE5NywgMjMyMDEsIDIzMjA0LCAyMzIwOCwgMjMyMTYsIDIzMjIyLCAyMjIxNSwgMjMyMjYsIDIzMjM1LCAyMzI0NiwgCisgICAgMjMyNTIsIDIzMjU4LCAyMzI2NywgMjMyNzUsIDIzMjgyLCAyMzI4NywgMjMyOTEsIDIzMjk4LCAyMzMwNCwgMjMzMTMsIAorICAgIDIzMzIxLCAyMzMyOCwgMjMzMzgsIDIzMzQ3LCAyMzM1NywgMjMzNjIsIDIzMzcxLCAyMzM4MCwgMjMzOTEsIDIzNDAyLCAKKyAgICAzOTYzLCAyMzQxMiwgMjM0MTYsIDIzNDI2LCAyMzQzNCwgMjM0NDQsIDIzNDU1LCAyMzQ2MCwgMjM0NzAsIDIzNDc4LCAKKyAgICAyMzQ4NSwgMjM0OTEsIDIzNDk4LCAyMzUwMywgMjIyMjUsIDIzNTA3LCAyMzUxNiwgMjM1MjAsIDIzNTIzLCAyMzUyOCwgCisgICAgMjM1MzUsIDIzNTQ0LCAyMzU1MiwgMjM1NjAsIDIzNTcwLCAyMzU3OSwgMjM1ODUsIDIzNTkxLCAyMjIzMCwgMjIyMzUsIAorICAgIDIzNTk1LCAyMzYwNSwgMjM2MTUsIDIzNjI1LCAyMzYzMywgMjM2NDAsIDIzNjUwLCAyMzY1OCwgMjM2NjYsIDIzNjcyLCAKKyAgICAyMzY4MCwgOTMwLCAyMzY4OSwgMTQ3NTAsIDU0MiwgMjM3MDMsIDIzNzEyLCAyMzcyMCwgMjM3MzEsIDIzNzQyLCAyMzc1MiwgCisgICAgMjM3NjEsIDIzNzczLCAyMzc4MiwgMjM3OTEsIDIzNzk3LCAyMzgwNiwgMjM4MTUsIDIzODI1LCAyMzgzMywgMjM4NDEsIAorICAgIDkzNjAsIDIzODQ3LCAyMzg1MCwgMjM4NTQsIDIzODU5LCAyMzg2NCwgOTg0OCwgMjIyNDgsIDIyMjUzLCAyMzg3MiwgCisgICAgMjM4NzgsIDIzODg0LCAyMzg4OSwgMjM4OTQsIDIzODk4LCAyMzkwNiwgMjM5MTIsIDIzOTE4LCAyMzkyMiwgMzUyNSwgCisgICAgMjM5MzAsIDIzOTM1LCAyMzk0MCwgMjM5NDQsIDIzOTQ4LCA5OTI4LCAyMzk1NSwgMjM5NjMsIDIzOTc3LCAyMzk4NCwgCisgICAgMjM5OTAsIDk5MzcsIDk5NDMsIDIzOTk4LCAyNDAwNiwgMjQwMTMsIDI0MDE4LCAyNDAyMywgMjIyNTgsIDI0MDI5LCAKKyAgICAyNDA0MCwgMjQwNDQsIDI0MDQ5LCAyNjAxLCAyNDA1NCwgMjQwNjUsIDI0MDcxLCAyNDA3NiwgMjQwODAsIDI0MDg0LCAKKyAgICAyNDA4NywgMjQwOTQsIDI0MTAxLCAyNDEwOCwgMjQxMTQsIDI0MTE4LCAyMjI2MywgMjQxMjMsIDI0MTI3LCAyNDEzMSwgCisgICAgMTAzNywgMjQxMzYsIDI0MTQxLCAyNDE0NiwgMjQxNTEsIDI0MTU2LCAyNDE2MSwgMjQxNjYsIDI0MTcxLCAyNDE3NiwgCisgICAgMjQxODEsIDI0MTg2LCAyNDE5MSwgMjQxOTYsIDI0MjAxLCAyNDIwNywgMjQyMTIsIDI0MjE3LCAyNDIyMiwgMjQyMjcsIAorICAgIDI0MjMyLCAyNDIzNywgMjQyNDMsIDI0MjQ4LCAyNDI1MywgMjQyNTgsIDI0MjYzLCAyNDI2OCwgMjQyNzMsIDI0Mjc4LCAKKyAgICAyNDI4NCwgMjQyOTAsIDI0Mjk1LCAyNDMwMSwgMjQzMDYsIDI0MzExLCA1LCAyNDMxNywgMjQzMjEsIDI0MzI1LCAyNDMyOSwgCisgICAgMjQzMzQsIDI0MzM4LCAyNDM0MiwgMjQzNDYsIDI0MzUwLCAyNDM1NSwgMjQzNTksIDI0MzY0LCAyNDM2OCwgMjQzNzEsIAorICAgIDI0Mzc1LCAyNDM4MCwgMjQzODQsIDI0Mzg5LCAyNDM5MywgMjQzOTcsIDI0NDAxLCAyNDQwNiwgMjQ0MTAsIDI0NDE0LCAKKyAgICAyNDQyNCwgMjQ0MjksIDI0NDMzLCAyNDQzNywgMjQ0NDIsIDI0NDQ3LCAyNDQ1NiwgMjQ0NjEsIDI0NDY2LCAyNDQ3MCwgCisgICAgMjQ0NzQsIDI0NDg3LCAyNDQ5OSwgMjQ1MDgsIDI0NTE3LCAyNDUyMywgMjQ1MjgsIDI0NTMyLCAyNDUzNiwgMjQ1NDYsIAorICAgIDI0NTU1LCAyNDU2MywgMjQ1NjksIDI0NTc0LCAyNDU3OCwgMjQ1ODUsIDI0NTk1LCAyNDYwNCwgMjQ2MTIsIDI0NjIwLCAKKyAgICAyNDYyNywgMjQ2MzUsIDI0NjQ0LCAyNDY1MywgMjQ2NjEsIDI0NjY2LCAyNDY3MCwgMjQ2NzQsIDI0Njc3LCAyNDY3OSwgCisgICAgMjQ2ODMsIDI0Njg3LCAyNDY5MiwgMjQ2OTcsIDI0NzAxLCAyNDcwNSwgMjQ3MDgsIDI0NzEyLCAyNDcxNSwgMjQ3MTksIAorICAgIDI0NzIyLCAyNDcyNSwgMjQ3MjksIDI0NzM1LCAyNDczOSwgMjQ3NDMsIDI0NzQ3LCAyNDc1MiwgMjQ3NTcsIDI0NzYyLCAKKyAgICAyNDc2NiwgMjQ3NjksIDI0Nzc0LCAyNDc4MCwgMjQ3ODUsIDI0NzkxLCAyNDc5NiwgMjQ4MDAsIDI0ODA0LCAyNDgwOCwgCisgICAgMjQ4MTMsIDI0ODE3LCAyNDgyMiwgMjQ4MjYsIDI0ODMwLCAyNDgzNywgMjQ4NDEsIDI0ODQ0LCAyNDg0OCwgMjQ4NTQsIAorICAgIDI0ODYwLCAyNDg2NCwgMjQ4NjgsIDI0ODczLCAyNDg4MCwgMjQ4ODYsIDI0ODkwLCAyNDg5OSwgMjQ5MDMsIDI0OTA3LCAKKyAgICAyNDkxMCwgMjQ5MTYsIDI0OTIxLCAyNDkyNywgMTQ4OSwgMTc5MSwgMjQ5MzIsIDI0OTM3LCAyNDk0MiwgMjQ5NDcsIAorICAgIDI0OTUyLCAyNDk1NywgMjQ5NjIsIDIxNDgsIDIxOTQsIDI0OTY3LCAyNDk3MCwgMjQ5NzQsIDI0OTc4LCAyNDk4MywgCisgICAgMjQ5ODcsIDI0OTkxLCAyNDk5NCwgMjQ5OTksIDI1MDA0LCAyNTAwOCwgMjUwMTEsIDI1MDE2LCAyNTAyMCwgMjUwMjUsIAorICAgIDI1MDI5LCAxNDc2MiwgMjUwMzQsIDI1MDM3LCAyNTA0MCwgMjUwNDQsIDI1MDQ5LCAyNTA1MywgMjUwNjYsIDI1MDcwLCAKKyAgICAyNTA3MywgMjUwODEsIDI1MDkwLCAyNTA5NywgMjUxMDIsIDI1MTA4LCAyNTExNCwgMjUxMjIsIDI1MTI5LCAyNTEzNiwgCisgICAgMjUxNDAsIDI1MTQ0LCAyNTE0OCwgMjUxNTMsIDI1MTU4LCAyNTE2MiwgMjUxNzAsIDI1MTc1LCAyNTE4NywgMjUxOTgsIAorICAgIDI1MjAzLCAyNTIwNywgMjUyMTEsIDI1MjE3LCAyNTIyMiwgMjUyMjcsIDI1MjMxLCAyNTIzNSwgMjUyMzgsIDI1MjQ0LCAKKyAgICA3OTE1LCAyMzE2LCAyNTI0OCwgMjUyNTMsIDI1MjY5LCA5NDc1LCAyNTI4OSwgMjUyOTgsIDI1MzE0LCAyNTMxOCwgMjUzMjEsIAorICAgIDI1MzI3LCAyNTMzNywgMjUzNDMsIDI1MzUyLCAyNTM2NywgMjUzNzksIDI1MzkwLCAyNTM5OCwgMjU0MDcsIDI1NDEzLCAKKyAgICAyNTQyMiwgMjU0MzIsIDI1NDQzLCAyNTQ1NCwgMjU0NjMsIDI1NDcwLCAyNTQ3OSwgMjU0ODcsIDI1NDk0LCAyNTUwMiwgCisgICAgMjU1MDksIDI1NTE2LCAyNTUyOSwgMjU1MzYsIDI1NTQyLCAyNTU0NywgMjU1NTYsIDI1NTYyLCAyNTU2NywgMjU1NzUsIAorICAgIDI1NTgyLCAyMzQzNiwgMjU1OTQsIDI1NjA2LCAyNTYyMCwgMjU2MjgsIDI1NjM1LCAyNTY0NywgMjU2NTYsIDI1NjY1LCAKKyAgICAyNTY3MywgMjU2ODEsIDI1Njg5LCAyNTY5NiwgMjU3MDUsIDI1NzEzLCAyNTcyMywgMjU3MzIsIDI1NzQyLCAyNTc1MSwgCisgICAgMjU3NjAsIDI1NzY4LCAyNTc3MywgMjU3NzcsIDI1NzgwLCAyNTc4NCwgMjU3ODgsIDI1NzkyLCAyNTc5NiwgMjU4MDAsIAorICAgIDI1ODA2LCAyNTgxMiwgMjU4MjAsIDE0ODA3LCAyNTgyNywgMjU4MzIsIDI1ODM5LCAyNTg0NSwgMjU4NTIsIDE0ODE1LCAKKyAgICAyNTg1OSwgMjU4NjIsIDI1ODc0LCAyNTg4MiwgMjU4ODgsIDI1ODkzLCAyNTg5NywgOTg3OCwgMjU5MDgsIDI1OTE4LCAKKyAgICAyNTkyNywgMjU5MzQsIDI1OTM4LCAxNDgyMCwgMjU5NDEsIDI1OTQ4LCAyNTk1MiwgMjU5NTgsIDI1OTYxLCAyNTk2OCwgCisgICAgMjU5NzQsIDI1OTgxLCAyNTk4NywgMjU5OTEsIDI1OTk2LCAyNjAwMCwgMjYwMDksIDI2MDE2LCAyNjAyMiwgNzk1NiwgCisgICAgMjYwMjksIDI2MDM3LCAyNjA0NCwgMjYwNTAsIDI2MDU1LCAyNjA2MSwgMjYwNjcsIDI2MDc1LCAyNjA3OSwgMjYwODIsIAorICAgIDI2MDg0LCAyNTc4NSwgMjYwOTMsIDI2MDk5LCAyNjEwOSwgMjYxMTQsIDI2MTIxLCAyNjEyNywgMjYxMzIsIDI2MTM3LCAKKyAgICAyNjE0MiwgMjYxNDYsIDI2MTUxLCAyNjE1OCwgMjYxNjcsIDI2MTcxLCAyNjE3OCwgMjYxODcsIDI2MTkzLCAyNjE5OCwgCisgICAgMjYyMDQsIDI2MjA5LCAyNjIxNiwgMjYyMjcsIDI2MjMyLCAyNjIzNiwgMjYyNDYsIDI2MjUyLCAyNjI1NiwgMjYyNjEsIAorICAgIDI2MjcxLCAyNjI4MCwgMjYyODQsIDI2MjkxLCAyNjI5OSwgMjYzMDYsIDI2MzEyLCAyNjMxNywgMjYzMjUsIDI2MzMyLCAKKyAgICAyNjM0NCwgMjYzNTMsIDI2MzU3LCAxMzA1MywgMjYzNjUsIDI2Mzc1LCAyNjM3OSwgMjUwNzcsIDI2MzkwLCAyNjM5NSwgCisgICAgMjYzOTksIDI2NDA2LCAyNjQxMywgMjE5NzQsIDI1NzEwLCAyNjQxOCwgMjY0MjIsIDI2NDI1LCAyMjg3MCwgMjY0MzAsIAorICAgIDI2NDQ0LCAyNjQ2MCwgMjY0NzgsIDI2NDk3LCAyNjUxNCwgMjY1MzIsIDIyODg5LCAyNjU0OSwgMjY1NjksIDIyOTA2LCAKKyAgICAyNjU4MSwgMjY1OTMsIDE1NzQ1LCAyNjYwNSwgMjI5MjYsIDI2NjE5LCAyNjYzMSwgMTA1MzYsIDI2NjQ1LCAyNjY1MCwgCisgICAgMjY2NTUsIDI2NjYwLCAyNjY2NiwgMjY2NzIsIDI2Njc4LCAyNjY4MiwgMjY2ODksIDI2Njk0LCAyNjcwNCwgMjY3MTAsIAorICAgIDEwMTgzLCAyNjcxNiwgMjY3MTgsIDI2NzIzLCAyNjczMSwgMjY3MzUsIDI2MTU0LCAyNjc0MSwgMjY3NDgsIDExNTI0LCAKKyAgICAxMTUzNCwgMjY3NTUsIDI2NzY1LCAyNjc3MCwgMjY3NzQsIDI2Nzc3LCAyNjc4MywgMjY3OTEsIDI2ODAzLCAyNjgxMywgCisgICAgMjY4MjksIDI2ODQyLCAyNjg1NiwgMTU3NjMsIDI2ODcwLCAyNjg3NywgMjY4ODEsIDI2ODg0LCAyNjg4OSwgMjY4OTMsIAorICAgIDI2OTAwLCAyNjkwNywgMjY5MTcsIDI2OTIyLCAyNjkyNywgMjY5MzIsIDI2OTQwLCAyNjk0OCwgMjY5NTcsIDI2OTYyLCAKKyAgICA5NTcyLCAyNjk2NiwgMjY5NjksIDI2OTcyLCAyNjk3NywgMjY5ODQsIDI2OTg5LCAyNzAwNSwgMjcwMTMsIDI3MDIxLCAKKyAgICA5NDIzLCAyNzAyOSwgMjcwMzQsIDI3MDM4LCAyNzA0NCwgMjcwNTAsIDI3MDUzLCAyNzA1OSwgMjcwNzEsIDI3MDc5LCAKKyAgICAyNzA4NiwgMjcwOTIsIDI3MDk5LCAyNzExMCwgMjcxMjQsIDI3MTM3LCAyNzE0NiwgMjcxNTUsIDI3MTY3LCAyNzE3OCwgCisgICAgMjcxODgsIDI3MTk3LCAyNzIwNiwgMjcyMTQsIDI3MjI1LCA3OTM4LCAyNzIzMiwgMjcyMzgsIDI3MjQzLCAyNzI0OSwgCisgICAgMjcyNTYsIDI3MjY2LCAyNzI3NiwgMjcyODUsIDI3MjkxLCAyNzI5OCwgMjczMDMsIDI3MzEwLCAyNzMxOCwgMjczMjYsIAorICAgIDI3MzM4LCA2MjQ2LCAyNzM0NSwgMjczNTQsIDI3MzYyLCAyNzM2OCwgMjczNzQsIDI3Mzc5LCAyNzM4MywgMjczODYsIAorICAgIDI3MzkyLCAyNzM5OSwgMjc0MDQsIDI3NDA5LCAyNzQxMywgMjc0MjUsIDI3NDM2LCAyNzQ0NSwgMjc0NTMsIDE0OTQ3LCAKKyAgICAyNzQ1OCwgMjc0NjQsIDI3NDcwLCAxMTUxNywgODYzNSwgMjc0NzUsIDI3NDc5LCAyNzQ4MywgMjc0ODYsIDI3NDg5LCAKKyAgICAyNzQ5NSwgMjc1MDMsIDI3NTExLCAyNzUxNSwgMjc1MTksIDI3NTI0LCAyNzUyNywgMjc1MzYsIDI3NTQwLCAyNzU0OCwgCisgICAgMjc1NTksIDI3NTYzLCAyNzU2OSwgMjc1NzUsIDI3NTc5LCAyNzU4NSwgMjc1OTMsIDI3NjE1LCAyNzYzOSwgMjc2NDYsIAorICAgIDI3NjUzLCAyNzY1OSwgMjc2NjcsIDI3NjczLCAyNzY3OCwgMjc2ODksIDI3NzA3LCAyNzcxNCwgMjc3MjIsIDI3NzI2LCAKKyAgICAyNzczNSwgMjc3NDgsIDI3NzU2LCAyNzc2OCwgMjc3NzksIDI3Nzg5LCAyNzgwMywgMjc4MTIsIDI3ODIwLCAyNzgzMiwgCisgICAgOTQ5MiwgMjc4NDMsIDI3ODU0LCAyNzg2NiwgMjc4NzYsIDI3ODg1LCAyNzg5MCwgMjc4OTQsIDI3OTAyLCAyNzkxMiwgCisgICAgMjc5MTcsIDI3OTIxLCAyNzkyNCwgMjc5MjcsIDI3OTM1LCAyNzk0MywgMjc5NTIsIDI3OTYyLCAyNzk3MSwgMjc5NzcsIAorICAgIDI3OTkxLCAyNjYzLCAyODAxMywgMjgwMjQsIDI4MDMzLCAyODA0MywgMjgwNTUsIDI4MDY0LCAyODA3MywgMjgwODMsIAorICAgIDI4MDkxLCAyODA5OSwgMjgxMDgsIDI4MTEzLCAyODEyNCwgMjgxMjksIDI4MTQwLCAyODE0NCwgMjgxNTQsIDI4MTYzLCAKKyAgICAyODE3MSwgMjgxODEsIDI4MTkxLCAyODE5OSwgMjgyMDgsIDI4MjE1LCAyODIyMywgMjgyMzAsIDI4MjM5LCAyODI0MywgCisgICAgMjgyNTEsIDI4MjU4LCAyODI2NiwgMjgyNzMsIDI4Mjg0LCAyODI5OSwgMjgzMDYsIDI4MzEyLCAyODMyMiwgMjgzMzEsIAorICAgIDI4MzM3LCAyODM0MSwgMjgzNDgsIDI4MzUyLCAxNDAzMSwgMjgzNTgsIDI4MzYyLCAyODM2NywgMjgzNzQsIDI4Mzc4LCAKKyAgICAyODM4MiwgMjgzOTAsIDI4Mzk4LCAyODQwNCwgMjg0MTMsIDI4NDIwLCAyODQyNSwgMjg0MzAsIDI4NDQwLCAyMzUwNSwgCisgICAgMjg0NDQsIDI4NDQ3LCAyODQ1MiwgMjg0NTcsIDI4NDYyLCAyODQ2NywgMjg0NzIsIDI4NDc3LCAyODQ4MiwgMjg0ODcsIAorICAgIDI4NDkzLCAyODQ5OCwgMjg1MDMsIDI4NTA5LCAxMjE4LCA3MDQsIDI4NTE0LCAyODUyMywgMjM2NCwgMjg1MzAsIDI4NTM1LCAKKyAgICAyODUzOSwgMjg1NDUsIDEyNjcsIDU0NiwgMzE4LCAyODU1MCwgMjg1NTksIDI4NTY3LCAyODU3NiwgMjg1ODQsIDI4NTk1LCAKKyAgICAyODYwNCwgMjg2MTIsIDI4NjE2LCAyODYxOSwgMjg2MjcsIDI4NjM1LCAyODY0MCwgMTQ3NzUsIDI4NjQ2LCAyODY1MiwgCisgICAgMjg2NTgsIDU4NzIsIDI4NjYzLCAyODY2NywgMjg2NzMsIDI4Njc3LCAyODY4NCwgMTQ1NSwgMjg2OTAsIDI4Njk3LCA5NTc5LCAKKyAgICAyODcwMSwgMjg3MTEsIDI4NzE5LCAyODcyNSwgMjg3MzQsIDI4NzQyLCAyODc0OCwgMjg3NTYsIDI4NzYzLCAxMTExMCwgCisgICAgMjg3NjksIDI4Nzc2LCAyODc4MSwgMjg3ODgsIDE0OTYsIDIxNDcsIDI4Nzk0LCAyODgwMCwgMjg4MDcsIDI4ODE4LCAKKyAgICAyODgyOSwgMjg4MzcsIDI4ODQ0LCAyODg1NCwgMjg4NjMsIDI4ODcxLCAyODg4MCwgMjg4ODcsIDI4ODk0LCAyODkwNywgCisgICAgMjg5MTgsIDEyNzIsIDI4OTM3LCAyODk0MiwgMjg5NTAsIDM1NzUsIDI4OTU0LCAyODk1OSwgMjg5NjMsIDE0NTksIDI0NzA2LCAKKyAgICAyODk3MywgMjg5NzcsIDI4OTgyLCAyODk4NiwgMzQ5MywgMjg5OTIsIDI5MDAwLCAyOTAwNywgMjkwMTgsIDI5MDI2LCAKKyAgICAyOTAzNCwgMzU3NiwgMjc5LCAyOTAzOSwgMjkwNDcsIDI5MDU1LCAyOTA2MiwgMjkwNjgsIDI5MDczLCAyMjE2LCAyOTA4MCwgCisgICAgMjkwODYsIDI1OTkyLCAyNjIyMiwgMjkwOTIsIDEwNiwgMjkwOTYsIDI5MTAwLCAyOTEwNiwgNjE1LCA5MzI4LCAyOTExMSwgCisgICAgMjkxMTgsIDI5MTI0LCAyMzI3LCAyOTEyOCwgMjkxMzIsIDE1MTg3LCAyOTEzNSwgMjkxNDAsIDI5MTQ3LCAyOTE1MywgCisgICAgMjkxNTgsIDI5MTY2LCAyOTE3MywgMjkxNzksIDIyMzUxLCAyOTE4MywgMjkxODcsIDM2NDYsIDE2NjI1LCAyOTE5MSwgCisgICAgMjkxOTYsIDI5MTk5LCAyOTIwNywgMjkyMTUsIDI5MjIwLCAyOTIyMywgMjkyMzAsIDI5MjQwLCAyOTI1MiwgMjkyNTcsIAorICAgIDI5MjYxLCAyOTI2OSwgMjkyNzYsIDI5MjgyLCAyOTI4OSwgMjkyOTYsIDI5Mjk5LCAyOTMwMywgMjkzMDcsIDE0NjMsIAorICAgIDI5MzE3LCAyOTMxOSwgMjkzMjQsIDI5MzMwLCAyOTMzNiwgMjkzNDEsIDI5MzQ2LCAyOTM1MSwgMjkzNTYsIDI5MzYxLCAKKyAgICAyOTM2NiwgMjkzNzEsIDI5Mzc2LCAyOTM4MSwgMjkzODYsIDI5MzkxLCAyOTM5NiwgMjk0MDEsIDI5NDA2LCAyOTQxMiwgCisgICAgMjk0MTgsIDI5NDI0LCAyOTQzMCwgMjk0MzUsIDI5NDQwLCAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MSwgMjk0NjYsIAorICAgIDI5NDcyLCAyOTQ3NywgMjk0ODMsIDI5NDg4LCAyOTQ5MywgMjk0OTgsIDI5NTAzLCAyOTUwOSwgMjk1MTQsIDI5NTIwLCAKKyAgICAyOTUyNSwgMjk1MzAsIDI5NTM1LCAyOTU0MCwgMjk1NDYsIDI5NTUxLCAyOTU1NywgMjk1NjIsIDI5NTY3LCAyOTU3MiwgCisgICAgMjk1NzcsIDI5NTgyLCAyOTU4NywgMjk1OTIsIDI5NTk3LCAyOTYwMiwgMjk2MDgsIDI5NjE0LCAyOTYyMCwgMjk2MjUsIAorICAgIDI5NjMwLCAyOTYzNSwgMjk2NDAsIDI5NjQ2LCAyOTY1MiwgMjk2NTgsIDI5NjY0LCAyOTY3MCwgMjk2NzYsIDI5NjgxLCAKKyAgICAyOTY4NywgMjk2OTIsIDI5Njk3LCAyOTcwMiwgMjk3MDcsIDI5NzEzLCAyNDQzLCAyOTcxOCwgMjQ1MCwgMjQ1NywgMjc1NCwgCisgICAgMjk3MjMsIDI0NjMsIDI0NzMsIDI5NzI5LCAyOTczMywgMjk3MzgsIDI5NzQzLCAyOTc0OSwgMjk3NTQsIDI5NzU5LCAKKyAgICAyOTc2MywgMjk3NjgsIDI5Nzc0LCAyOTc3OSwgMjk3ODQsIDI5Nzg5LCAyOTc5NSwgMjk4MDAsIDI5ODA0LCAyOTgwOCwgCisgICAgMjk4MTMsIDI5ODE4LCAyOTgyMywgMjk4MjgsIDI5ODMzLCAyOTgzOSwgMjk4NDUsIDI5ODUwLCAyOTg1NCwgMjk4NTksIAorICAgIDI5ODY1LCAyOTg2OSwgMjk4NzQsIDI5ODc5LCAyOTg4NCwgMjk4ODksIDI5ODkzLCAyOTg5NiwgMjk5MDEsIDI5OTA2LCAKKyAgICAyOTkxMSwgMjk5MTYsIDI5OTIxLCAyOTkyNywgMjk5MzMsIDI5OTM4LCAyOTk0MywgMjk5NDcsIDI5OTUyLCAyOTk1NywgCisgICAgMjk5NjIsIDI5OTY3LCAyOTk3MiwgMjk5NzYsIDI5OTgxLCAyOTk4NiwgMjk5OTEsIDI5OTk1LCAyOTk5OSwgMzAwMDMsIAorICAgIDMwMDA4LCAzMDAxNiwgMzAwMjEsIDMwMDI3LCAzMDAzMywgMzAwMzksIDMwMDQ0LCAzMDA0OCwgMzAwNTEsIDMwMDU2LCAKKyAgICAzMDA2MSwgMzAwNjUsIDMwMDcwLCAzMDA3NCwgMzAwNzksIDMwMDgzLCAzMDA4NiwgMzAwOTEsIDE3MzAyLCAzMDA5NiwgCisgICAgMzAxMDEsIDMwMTA2LCAzMDExNCwgMjEyODAsIDI4Njk0LCA5MDI2LCAzMDExOSwgMzAxMjQsIDMwMTI4LCAzMDEzMywgCisgICAgMzAxMzcsIDMwMTQxLCAzMDE0NiwgMzAxNTAsIDMwMTUzLCAzMDE1NiwgMzAxNjAsIDMwMTY1LCAzMDE2OSwgMzAxNzcsIAorICAgIDMwMTgxLCAzMDE4NCwgMzAxODksIDMwMTkzLCAzMDE5NywgMzAyMDIsIDMwMjA3LCAzMDIxMSwgMzAyMTcsIDMwMjIyLCAKKyAgICAzMDIyNywgMzAyMzQsIDMwMjQxLCAzMDI0NSwgMzAyNDgsIDMwMjU0LCAzMDI2MywgMzAyNzAsIDMwMjc4LCAzMDI4NSwgCisgICAgMzAyODksIDMwMjk0LCAzMDI5OCwgMzAzMDIsIDMwMzA4LCAzMDMxNCwgMzAzMTgsIDMwMzI0LCAzMDMyOSwgMzAzMzQsIAorICAgIDMwMzM4LCAzMDM0NSwgMzAzNTEsIDMwMzU3LCAzMDM2MywgMzAzNjksIDMwMzc2LCAzMDM4MiwgMzAzODgsIDMwMzk0LCAKKyAgICAzMDQwMCwgMzA0MDYsIDMwNDEyLCAzMDQxOCwgMzA0MjUsIDMwNDMxLCAzMDQzOCwgMzA0NDQsIDMwNDUwLCAzMDQ1NiwgCisgICAgMzA0NjIsIDMwNDY4LCAzMDQ3NCwgMzA0ODAsIDMwNDg2LCAzMDQ5MiwgMTE0MTgsIDMwNDk4LCAzMDUwMywgMzA1MDgsIAorICAgIDMwNTExLCAzMDUxOSwgMzA1MjQsIDMwNTMzLCAzMDUzOSwgMzA1NDQsIDMwNTQ5LCAzMDU1NCwgMzA1NTgsIDMwNTYzLCAKKyAgICAzMDU2OCwgMzA1NzMsIDMwNTc4LCAzMDU4MywgMzA1OTAsIDMwNTk3LCAzMDYwMywgMzA2MDksIDMwNjE0LCAxNjMwMywgCisgICAgMzA2MjEsIDMwNjI3LCAzMDYzNCwgMzA2NDAsIDMwNjQ2LCAzMDY1MSwgMzA2NTksIDMwNjY0LCAxNjA4MiwgMzA2NjgsIAorICAgIDMwNjczLCAzMDY3OCwgMzA2ODQsIDMwNjg5LCAzMDY5NCwgMzA2OTgsIDMwNzAzLCAzMDcwOCwgMzA3MTQsIDMwNzE5LCAKKyAgICAzMDcyNCwgMzA3MjgsIDMwNzMzLCAzMDczOCwgMzA3NDIsIDMwNzQ3LCAzMDc1MiwgMzA3NTcsIDMwNzYxLCAzMDc2NiwgCisgICAgMzA3NzEsIDMwNzc2LCAzMDc4MCwgMzA3ODQsIDE1MjkzLCAzMDc4OCwgMzA3OTcsIDMwODAzLCAzMDgwOSwgMzA4MTgsIAorICAgIDMwODI2LCAzMDgzNSwgMzA4NDMsIDMwODQ4LCAzMDg1MiwgMzA4NTksIDMwODY1LCAzMDg2OSwgMzA4NzIsIDMwODc3LCAKKyAgICAzMDg4NiwgMzA4OTQsIDMwODk5LCAxNDk1LCAzMDkwNSwgMzA5MDgsIDMwOTEyLCAyMjQyNCwgMjI0MzAsIDMwOTE4LCAKKyAgICAzMDkyMiwgMzA5MzMsIDMwOTQ0LCAzMDk1NSwgMzA5NjcsIDMwOTc0LCAzMDk4MSwgMzA5ODYsIDMwOTkwLCA1OTA5LCA3NTUsIAorICAgIDIxMjc5LCAzMDk5OCwgMzEwMDMsIDMxMDA3LCAzMTAxMiwgMzEwMTYsIDMxMDIyLCAzMTAyNywgMzEwMzMsIDMxMDM4LCAKKyAgICAzMTA0NCwgMzEwNDksIDMxMDU1LCAzMTA2MCwgMzEwNjYsIDMxMDcyLCAzMTA3OCwgMzEwODMsIDMxMDM5LCAzMTA0NSwgCisgICAgMzEwODcsIDMxMDkyLCAzMTA5OCwgMzExMDMsIDMxMTA5LCAzMTExNCwgMzExMjAsIDMxMTI1LCAzMTA1MCwgMTA0MjEsIAorICAgIDMxMTI5LCAzMTA2MSwgMzEwNjcsIDMxMDczLCAyODMxLCAzNDIzLCAzMTEzNSwgMzExMzgsIDMxMTQ0LCAzMTE1MCwgCisgICAgMzExNTYsIDMxMTYzLCAzMTE2OSwgMzExNzUsIDMxMTgxLCAzMTE4NywgMzExOTMsIDMxMTk5LCAzMTIwNSwgMzEyMTEsIAorICAgIDMxMjE3LCAzMTIyMywgMzEyMjksIDMxMjM1LCAzMTI0MiwgMzEyNDgsIDMxMjU0LCAzMTI2MCwgMzEyNjYsIDMxMjcyLCAKKyAgICAzMTI3NSwgMzEyODAsIDMxMjgzLCAzMTI5MCwgMzEyOTgsIDMxMzAzLCAzMTMwOCwgMzEzMTQsIDMxMzE5LCAzMTMyNCwgCisgICAgMzEzMjgsIDMxMzMzLCAzMTMzOSwgMzEzNDQsIDMxMzUwLCAzMTM1NSwgMzEzNjEsIDMxMzY2LCAzMTM3MiwgMzEzNzgsIAorICAgIDMxMzgyLCAzMTM4NywgMzEzOTIsIDMxMzk3LCAzMTQwMiwgMzE0MDYsIDMxNDExLCAzMTQxNiwgMzE0MjEsIDMxNDI3LCAKKyAgICAzMTQzMywgMzE0MzksIDMxNDQ1LCAzMTQ1MCwgMzE0NTQsIDMxNDU3LCAzMTQ2MywgMzE0NjksIDMxNDc4LCAzMTQ4NiwgCisgICAgMzE0OTMsIDMxNDk4LCAzMTUwMiwgMzE1MDYsIDMxNTExLCAxNTE0NiwgMzE1MTYsIDMxNTI0LCAzMTUzMCwgMzY4MywgCisgICAgMTM3NywgMzE1MzUsIDMxNTM5LCA4MDA1LCAzMTU0NSwgMzE1NTEsIDMxNTU4LCA4MDE0LCAzMTU2MiwgMzE1NjgsIDMxNTc1LCAKKyAgICAzMTU4MSwgMzE1OTAsIDMxNTk4LCAzMTYxMCwgMzE2MTQsIDMxNjIxLCAzMTYyNywgMzE2MzEsIDMxNjM0LCAzMTY0MywgCisgICAgMzE2NTEsIDMxMDQwLCAzMTY1NiwgMzE2NjYsIDMxNjc2LCAzMTY4NiwgMzE2OTIsIDMxNjk3LCAzMTcwNywgMzE3MTIsIAorICAgIDMxNzI1LCAzMTczOSwgMzE3NTAsIDMxNzYyLCAzMTc3NCwgMzE3ODgsIDMxODAxLCAzMTgxMywgMzE4MjUsIDE0NjAwLCAKKyAgICAzMTgzOSwgMzE4NDQsIDMxODQ5LCAzMTg1MywgMzE4NTcsIDMxODYxLCAxNzgwLCAyNzE3NiwgMzE4NjUsIDMxODcwLCAKKyAgICAzMTA4OCwgMzE4NzUsIDMxODc4LCAzMTg4MywgMzE4ODgsIDMxODkzLCAzMTg5OSwgMzE5MDUsIDEwMDk4LCAzMTkxMCwgCisgICAgMzE5MTcsIDE1Njk3LCAzMTkyMywgMzE5MjgsIDMxOTMzLCAzMTkzNywgMzE5NDIsIDMxOTQ3LCAzMTA5MywgMzE5NTIsIAorICAgIDMxOTU3LCAzMTk2MiwgMzE5NjgsIDMxMDk5LCAzMTk3MywgMzE5NzYsIDMxOTgzLCAzMTk5MSwgMzE5OTcsIDMyMDAzLCAKKyAgICAzMjAwOSwgMzIwMjAsIDMyMDI1LCAzMjAzMiwgMzIwMzksIDMyMDQ2LCAzMjA1NCwgMzIwNjMsIDMyMDcyLCAzMjA3OCwgCisgICAgMzIwODQsIDMyMDkyLCAzMTEwNCwgMzIwOTcsIDMyMTAzLCAzMjEwOSwgMzExMTAsIDMyMTE0LCAzMjExOSwgMzIxMjcsIAorICAgIDMyMTM1LCAzMjE0MSwgMzIxNDgsIDMyMTU0LCAzMjE2MSwgMzIxNjgsIDMyMTc0LCAzMjE4MiwgMzIxOTIsIDMyMTk5LCAKKyAgICAzMjIwNCwgMzIyMTAsIDMyMjE1LCAzMjIyMCwgMzIyMjcsIDMyMjM2LCAzMjI0NCwgMzIyNDksIDMyMjU1LCAzMjI2MiwgCisgICAgMzIyNzAsIDMyMjc2LCAzMjI4MSwgMzIyODcsIDMyMjk2LCAyNzk1NywgMzIzMDMsIDMyMzA3LCAzMjMxMiwgMzIzMjEsIAorICAgIDMyMzI2LCAzMjMzMSwgMzIzMzYsIDEyNDA1LCAzMjM0NCwgMzIzNDksIDMyMzU0LCAzMjM1OSwgMzIzNjMsIDMyMzY4LCAKKyAgICAzMjM3MywgMzIzODAsIDMyMzg1LCAzMjM5MCwgMzIzOTUsIDMxMTE1LCAyMTIxNiwgMzI0MDEsIDI1MTksIDI0NCwgMzI0MDQsIAorICAgIDMyNDA3LCAzMjQxMSwgMzI0MTUsIDMyNDI1LCAzMjQzMywgMzI0MzcsIDMyNDQ0LCAzMjQ1MSwgMzI0NTUsIDMyNDU4LCAKKyAgICAzMjQ2NCwgMzI0NzIsIDMyNDgwLCAzMjQ4NCwgMzI0ODgsIDMyNDkxLCAzMjQ5OCwgMzI1MDIsIDMyNTA2LCAzMjUxMywgCisgICAgMzI1MjEsIDMxMDUxLCAzMjUyOCwgMzI1MzYsIDEwMTU4LCA2NjQsIDMwOCwgMzI1NDgsIDMyNTUzLCAzMjU1OCwgMzI1NjQsIAorICAgIDMyNTY5LCAzMjU3NCwgMzcwNCwgMzI1NzksIDMyNTgyLCAzMjU4NywgMzI1OTIsIDMyNTk3LCAzMjYwMiwgMzI2MDcsIAorICAgIDMyNjE0LCAyMjUyOSwgMzI2MTksIDMyNjI0LCAzMjYyOSwgMzI2MzQsIDMyNjM5LCAzMjY0NSwgMzI2NTAsIDMyNjU2LCAKKyAgICAzMTI4NiwgMzI2NjIsIDMyNjY3LCAzMjY3MywgMzI2NzksIDMyNjg5LCAzMjY5NCwgMzI2OTksIDMyNzAzLCAzMjcwOCwgCisgICAgMzI3MTMsIDMyNzE4LCAzMjcyMywgMzI3MzYsIDMyNzQxLCAyMjMwMiwgMTY3MDUsIDM3MTAsIDMyNzQ1LCAzMjc1MCwgCisgICAgMzI3NTUsIDMyNzYxLCAzMjc2NiwgMzI3NzEsIDMyNzc1LCAzMjc4MCwgMzI3ODUsIDMyNzkxLCAzMjc5NiwgMzI4MDEsIAorICAgIDEzODIsIDMyODA1LCAzMjgxMCwgMzI4MTUsIDMyODIwLCAzMjgyNCwgMzI4MjksIDMyODM0LCAzMjgzOSwgMzI4NDUsIAorICAgIDMyODUxLCAzMjg1NiwgMzI4NjAsIDMyODY0LCAzMjg2OSwgMzI4NzQsIDMyODc5LCAzMjg4MywgMzI4OTEsIDMyODk1LCAKKyAgICAzMjkwMSwgMzI5MDUsIDMyOTEyLCAxNjQ5OCwgMzEwNjIsIDMyOTE4LCAzMjkyNSwgMzI5MzMsIDMyOTQwLCAzMjk0NiwgCisgICAgMzI5NTksIDMyOTcxLCAzMjk3NywgMzI5ODEsIDI3NzMsIDMyOTg1LCAzMjk4OSwgMzI0OTMsIDMyOTk4LCAzMzAwOSwgCisgICAgMzMwMTQsIDMzMDE5LCAzMzAyNCwgMzMwMjgsIDMzMDMzLCAyMjQzNSwgMzMwMzcsIDMzMDQxLCAzMzA0NiwgMzEwNjgsIAorICAgIDIxMzAwLCAzMzA1MCwgMzMwNTUsIDMzMDYxLCAzMzA2NiwgMzMwNzAsIDMzMDc0LCAzMzA3NywgMzMwODEsIDMzMDg3LCAKKyAgICAzMzA5OCwgMzMxMTAsIDMxMDc0LCAzMzExNSwgMzMxMTgsIDMzMTIyLCAzNDcsIDMzMTI3LCAzMzEzMiwgMzMxMzcsIAorICAgIDMzMTQyLCAzMzE0NywgMzMxNTIsIDMzMTU4LCAzMzE2MywgMzMxNjgsIDMzMTc0LCAzMzE3OSwgMzMxODUsIDMzMTkwLCAKKyAgICAzMzE5NiwgMzMyMDEsIDMzMjA2LCAzMzIxMSwgMzMyMTYsIDMzMjIxLCAzMzIyNiwgMzMyMzEsIDMzMjM2LCAzMzI0MiwgCisgICAgMzMyNDcsIDMzMjUyLCAzMzI1NywgMzMyNjIsIDMzMjY3LCAzMzI3MiwgMzMyNzcsIDMzMjgzLCAzMzI4OSwgMzMyOTQsIAorICAgIDMzMjk5LCAzMzMwNCwgMzMzMDksIDMzMzE0LCAzMzMxOSwgMzMzMjQsIDMzMzI5LCAzMzMzNCwgMzMzMzksIDMzMzQ0LCAKKyAgICAzMzM0OSwgMzMzNTQsIDMzMzU5LCAzMzM2NCwgMzMzNjksIDMzMzc0LCAzMzM3OSwgMzMzODUsIDMxMywgMjYsIDMzMzkwLCAKKyAgICAzMzM5NCwgMzMzOTgsIDMzNDA2LCAzMzQxMCwgMzM0MTQsIDMzNDE3LCAzMzQyMCwgMzM0MjIsIDMzNDI3LCAzMzQzMSwgCisgICAgMzM0MzYsIDMzNDQwLCAzMzQ0NSwgMzM0NDksIDMzNDU0LCAzMzQ1OCwgMzM0NjEsIDMzNDYzLCAzMzQ2NywgMzM0NzIsIAorICAgIDMzNDc2LCAzMzQ4NywgMzM0OTAsIDMzNDkyLCAzMzQ5NiwgMzM1MDgsIDMzNTE3LCAzMzUyMSwgMzM1MjUsIDMzNTMxLCAKKyAgICAzMzUzNiwgMzM1NDUsIDMzNTUxLCAzMzU1NiwgMzM1NjEsIDMzNTY1LCAzMzU3MCwgMzM1NzcsIDMzNTgyLCAzMzU4OCwgCisgICAgMzM1OTMsIDMzNTk3LCAzMzYwNCwgMjU3MTgsIDI1NzI4LCAzMzYwOCwgMzM2MTMsIDMzNjE4LCAzMzYyMywgMzM2MzAsIAorICAgIDMzNjM0LCAzMzY0MSwgODExMywgMzM2NDcsIDMzNjU2LCAzMzY2NCwgMzM2NzksIDMzNjkzLCAzMzcwMSwgMzM3MTIsIAorICAgIDMzNzIxLCAzMzcyNiwgNzIyNywgMzM3MzYsIDMzNzQxLCAzMzc0NiwgMzM3NTAsIDMzNzUzLCAzMzc1NywgMzM3NjIsIAorICAgIDMzNzY2LCAzMzc3MywgMzM3NzgsIDMzNzgzLCA4OTEyLCAzMzc5MywgMzM3OTUsIDMzNzk4LCAzMzgwMiwgMzM4MDgsIAorICAgIDMzODEyLCAzMzgxNywgMzM4MjIsIDMzODI4LCAzMzgzMywgMzM4MzksIDMzODQ0LCAzMzg1NCwgMzM4NjMsIDMzODcxLCAKKyAgICAzMzg3NiwgMzM4ODIsIDMzODg3LCAzMzg5NCwgMzM4OTgsIDMzOTA2LCAzMzkxMywgMzM5MjYsIDMzOTM0LCAzMzkzOCwgCisgICAgMzM5NDgsIDMzOTUzLCAzMzk1NywgMzM5NjUsIDMzOTczLCAzMzk3NywgMzM5ODYsIDMzOTkyLCAzMzk5NywgMzQwMDUsIAorICAgIDM0MDE1LCAzNDAyNCwgMzQwMzMsIDM0MDQyLCAzNDA1MywgMzQwNjEsIDM0MDcyLCAzNDA4MSwgMzQwODgsIDM0MDk0LCAKKyAgICAzNDA5OSwgMzQxMTAsIDM0MTE1LCAzNDExOSwgMzQxMjIsIDM0MTI2LCAzNDEzNCwgMzQxNDAsIDM0MTQ4LCAzNDE1NSwgCisgICAgMzQxNjEsIDM0MTY2LCAzNDE3MiwgMjQxOCwgMzQxNzYsIDM0MTc4LCAzNDE4MywgMzQxODgsIDM0MTkzLCAzNDE5NiwgCisgICAgMzQxOTgsIDM0MjAyLCAzNDIwNSwgMzQyMTIsIDM0MjE2LCA5ODkxLCAzNDIyMCwgMzQyMjYsIDM0MjM2LCAzNDI0MSwgCisgICAgMzQyNDcsIDM0MjUxLCAzNDI1NiwgMzQyNjksIDI2MTA0LCAzNDI3NSwgMzQyODQsIDE3NDc1LCAzNDI5MSwgMzQzMDAsIAorICAgIDMxNjcyLCAzNDMwOCwgMzQzMTMsIDM0MzE3LCAzNDMyNSwgMzQzMzIsIDM0MzM3LCAzNDM0MSwgMzQzNDYsIDM0MzUwLCAKKyAgICAzNDM1OCwgMzQzNjQsIDM0MzcwLCAzNDM3NSwgMzQzNzksIDM0MzgyLCAzNDM4NywgMzQ0MDAsIDM0NDE2LCAyMjk5NiwgCisgICAgMzQ0MzMsIDM0NDQ1LCAzNDQ2MiwgMzQ0NzQsIDM0NDg4LCAyMzAxMywgMjMwMzIsIDM0NTAwLCAzNDUxMiwgMjY4MCwgCisgICAgMzQ1MjYsIDM0NTMxLCAzNDUzNiwgMzQ1NDEsIDM0NTQ1LCAzNDU1MiwgMzQ1NjQsIDM0NTcwLCAzNDU3MywgMzQ1ODQsIAorICAgIDM0NTk1LCAzNDYwMCwgMzIwODksIDY5NSwgMzQ2MDQsIDM0NjA4LCAzNDYxMiwgMzQ2MTUsIDM0NjIwLCAzNDYyNSwgCisgICAgMzQ2MzEsIDM0NjM2LCAzNDY0MSwgMzQ2NDcsIDM0NjUzLCAzNDY1OCwgMzQ2NjIsIDM0NjY3LCAzNDY3MiwgMzQ2NzcsIAorICAgIDM0NjgxLCAzNDY4NCwgMzQ2OTAsIDM0Njk1LCAzNDcwMCwgMzQ3MDUsIDM0NzA5LCAzNDcxNCwgMzQ3MjAsIDM0NzI4LCAKKyAgICAyNjMzNywgMzQ3MzMsIDM0NzM4LCAzNDc0NSwgMzQ3NTEsIDM0NzU3LCAzNDc2MiwgMzQ3NzAsIDIyNTM4LCAzNDc3NywgCisgICAgMzQ3ODIsIDM0Nzg3LCAzNDc5MiwgMzQ3OTYsIDM0Nzk5LCAzNDgwNCwgMzQ4MDgsIDM0ODEyLCAzNDgxOSwgMzQ4MjUsIAorICAgIDM0ODMxLCAzNDgzNywgMzQ4NDQsIDM0ODQ5LCAzNDg1NSwgMzM5NjgsIDM0ODU5LCAzNDg2MywgMzQ4NjgsIDM0ODgxLCAKKyAgICAzNDg4NiwgMzQ4OTIsIDM0OTAwLCAzNDkwNywgMzQ5MTUsIDM0OTI1LCAzNDkzMSwgMzQ5MzcsIDM0OTQzLCAzNDk0NywgCisgICAgMzQ5NTYsIDM0OTY0LCAzNDk3MSwgMzQ5NzYsIDM0OTgxLCAxMDQ0NCwgMzQ5ODYsIDM0OTk0LCAzNTAwMSwgMzUwMDcsIAorICAgIDM1MDE3LCAzNTAyMiwgMzUwMjgsIDM1MDM2LCAzNjA4LCAzNTA0MywgMzUwNTAsIDM2MTQsIDM1MDU0LCAzNTA1OSwgCisgICAgMzUwNzAsIDM1MDc3LCAzNTA4MywgMzUwOTIsIDM1MDk2LCA0MDE1LCAzNTA5OSwgMzUxMDYsIDM1MTEyLCAzNTExOCwgCisgICAgMzUxMjYsIDM1MTM2LCAyOTA2MywgMzUxNDMsIDM1MTUxLCAzNTE1NiwgMzUxNjIsIDM1MTY3LCAyNTk2NCwgMzUxNzMsIAorICAgIDM1MTgwLCAzNTE4NiwgMzUxOTUsIDIzNjc3LCAzNTIwMiwgMzUyMDcsIDM1MjExLCAzNTIxOSwgMzUyMjcsIDk2MDcsIAorICAgIDU4OTUsIDM1MjM0LCAzNTIzOCwgMzUyNDAsIDM1MjQ0LCAzNTI0OSwgMzUyNTEsIDM1MjU3LCAzNTI2MiwgMzUyNjcsIAorICAgIDM1Mjc0LCAzMjYxMCwgMzUyODAsIDM1Mjg1LCAzNTI4OSwgMzUyOTQsIDM1Mjk4LCAzNTMwNywgMzUzMTEsIDM1MzE3LCAKKyAgICAzNTMyNCwgMzUzMzAsIDM1MzM3LCAzNTM0MiwgMzUzNTEsIDM1MzU2LCAzNTM2MCwgMzUzNjUsIDM1MzcyLCAzNTM4MCwgCisgICAgMzUzODgsIDM1MzkzLCAyMTM1NiwgMzUzOTcsIDM1NDAwLCAzNTQwNCwgMzU0MDgsIDM1NDEyLCAzNTQxNSwgMzU0MTcsIAorICAgIDM1NDI1LCAzNTQyOSwgMzU0MzYsIDM1NDQwLCAzNTQ0NCwgMzU0NTIsIDM1NDU5LCAzNTQ2OSwgMzU0NzMsIDM1NDc3LCAKKyAgICAzNTQ4NSwgMzU0OTMsIDM1NDk5LCAzNTUwNCwgMzU1MTMsIDEzMzU3LCAzNTUxOSwgMzU1MjgsIDM1NTMzLCAzNTU0MCwgCisgICAgMzU1NDgsIDM1NTU2LCAzNTU2NCwgMzU1NzEsIDM1NTc4LCAzNTU4NSwgMzU1OTIsIDM1NTk5LCAzNTYwNCwgMzU2MTAsIAorICAgIDM1NjI3LCAzNTYzNSwgMzU2NDUsIDM1NjUzLCAzNTY2MCwgNDA3LCAzNTY2NCwgMzU2NzAsIDM1Njc0LCAzNTY3OSwgCisgICAgMzM3MTcsIDM1Njg1LCAzNTY4OCwgMzU2OTIsIDM1NzAwLCAzNjE5LCAzNTcwOCwgMzU3MTQsIDM1NzIwLCAzNTcyOSwgCisgICAgMzU3MzksIDM1NzQ2LCAzNTc1MiwgMzYyNSwgMzYzMSwgMzU3NjEsIDM1NzY4LCAzNTc3NiwgMzU3ODEsIDM1Nzg1LCAKKyAgICAzNTc5MiwgMzU4MDAsIDM1ODA3LCAzNTgxMywgMzU4MjIsIDM1ODMyLCAzNTgzOCwgMzU4NDYsIDM1ODU1LCAzNTg2MiwgCisgICAgMzU4NzAsIDM1ODc3LCAyMjAzMiwgMzU4ODEsIDM1ODg4LCAzNTg5NCwgMzU5MDQsIDM1OTEzLCAzNTkyNCwgMzU5MjgsIAorICAgIDM1OTM4LCAzNTk0NCwgMzU5NTEsIDM1OTU5LCAzNTk2OCwgMzU5NzcsIDM1OTg3LCAzNTk5OCwgMzYwMDUsIDM2MDEwLCAKKyAgICAzNjAxNywgMzAyOSwgMzYwMjUsIDM2MDMxLCAzNjAzNiwgMzYwNDIsIDM2MDQ4LCAzNjA1MywgMzYwNjYsIDM2MDc5LCAKKyAgICAzNjA5MiwgMzYwOTksIDM2MTA1LCAzNjExMywgMzYxMjEsIDM2MTI2LCAzNjEzMCwgMTQ2OSwgMzYxMzQsIDM2MTM5LCAKKyAgICAzNjE0NCwgMzYxNDksIDM2MTU0LCAzNjE2MCwgMzYxNjUsIDM2MTcwLCAzNjE3NSwgMzYxODAsIDM2MTg1LCAzNjE5MCwgCisgICAgMzYxOTUsIDM2MjAxLCAzNjIwNywgMzYyMTIsIDM2MjE3LCAzNjIyMywgMzYyMjgsIDM2MjMzLCAzNjIzOCwgMzYyNDQsIAorICAgIDM2MjQ5LCAzNjI1NCwgMzYyNTksIDM2MjY0LCAzNjI3MCwgMzYyNzUsIDM2MjgwLCAzNjI4NiwgMzYyOTEsIDM2Mjk2LCAKKyAgICAzNjMwMSwgMzYzMDYsIDM2MzExLCAzNjMxNywgMzYzMjIsIDM2MzI4LCAzNjMzMywgMzYzMzksIDM2MzQ0LCAzNjM0OSwgCisgICAgMzYzNTQsIDM2MzYwLCAzNjM2NiwgMzYzNzIsIDM2Mzc4LCAzNjM4NCwgMzYzOTAsIDM2Mzk2LCAzNjQwMiwgMzY0MDcsIAorICAgIDM2NDEyLCAzNjQxOCwgMzY0MjMsIDM2NDI4LCAzNjQzMywgMzY0MzgsIDM2NDQzLCAzNjQ0OCwgMzY0NTMsIDM2NDU5LCAKKyAgICAzNjQ2NCwgMzY0NjksIDM2NDc1LCAzNjQ4MSwgMTAxLCAzNjQ4NiwgMzY0ODgsIDM2NDkyLCAzNjQ5NiwgMzY1MDAsIAorICAgIDM2NTA1LCAzNjUwOSwgOTUyOCwgMzY1MTMsIDM2NTE5LCAxNzQxLCA2MjgwLCAzNjUyNSwgMzY1MjgsIDM2NTMzLCAzNjUzNywgCisgICAgMzY1NDIsIDM2NTQ2LCAzNjU1MCwgMzY1NTUsIDEwMjQ1LCAzNjU1OSwgMzY1NjMsIDM2NTY3LCAzNjU3MSwgMTUzODUsIAorICAgIDM2NTc2LCAzNjU4MCwgMzY1ODUsIDM2NTkwLCAzNjU5NSwgMzY1OTksIDM2NjA2LCAyNjEyOCwgMzY2MTIsIDM2NjE1LCAKKyAgICAzNjYxOSwgMzY2MjQsIDM2NjMwLCAzNjYzNCwgMzY2NDIsIDM2NjQ4LCAzNjY1MywgMzY2NTcsIDM2NjYzLCAzNjY2NywgCisgICAgMzY2NzEsIDM0NjIsIDM0NjcsIDI5MjU1LCAzNjY3NCwgMzY2NzgsIDM2NjgyLCAzNjY4NiwgMzY2OTAsIDM2Njk4LCAKKyAgICAzNjcwNSwgMzY3MDksIDM2NzE2LCAzNjcyMSwgMzE3LCAzNjcyNiwgMzY3MzAsIDM2NzM2LCAzNjc0OCwgMzY3NTQsIAorICAgIDM2NzYwLCAzNjc2NCwgMzY3NzAsIDM2Nzc5LCAzNjc4MywgMzY3ODcsIDM2NzkyLCAzNjc5OCwgMzY4MDMsIDM2ODA3LCAKKyAgICAzNjgxMiwgMzY4MTYsIDM2ODIwLCAzNjgyNywgMzY4MzMsIDM2ODM4LCAzNjg1MywgMzY4NjgsIDM2ODgzLCAzNjg5OSwgCisgICAgMzY5MTcsIDEwMTk1LCAzNjkzMSwgMzY5MzgsIDM2OTQyLCAzNjk0NSwgMzY5NTQsIDM2OTU5LCAzNjk2MywgMzY5NzEsIAorICAgIDMzOTE5LCAzNjk3OSwgMzY5ODMsIDM2OTkzLCAzNzAwNCwgMjkyMjUsIDM3MDE3LCAzNzAyMSwgMzcwMzAsIDM3MDM4LCAKKyAgICA5Nzg1LCAxNDkxMywgMzcwNDIsIDIyNDQ3LCAzNzA0NSwgMzAxNzMsIDM3MDUwLCA5Nzg0LCAzNzA1NSwgMzcwNjEsIAorICAgIDM3MDY2LCAzNzA3MiwgMzcwNzcsIDM3MDgzLCAzNzA4OCwgMzcwOTQsIDM3MDk5LCAzNzEwNSwgMzcxMTEsIDM3MTE3LCAKKyAgICAzNzEyMiwgMzcwNzgsIDM3MDg0LCAzNzA4OSwgMzcwOTUsIDM3MTAwLCAzNzEwNiwgMzcxMTIsIDgxMjYsIDM4NzQsIAorICAgIDM3MTI2LCAzNzEzNCwgMzcxMzgsIDM3MTQxLCAzNzE0NSwgMzcxNTAsIDM3MTU1LCAzNzE2MSwgMzcxNjcsIDM3MTcyLCAKKyAgICAzNzE3NiwgMjU5NzYsIDM3MTgwLCAzNzE4NCwgMzcxOTAsIDM3MTk0LCA5MDQ5LCAzNzIwMywgMzcyMTAsIDM3MjE0LCAKKyAgICAxMTg3NSwgMzcyMjEsIDM3MjI3LCAzNzIzMiwgMzcyMzksIDM3MjQ2LCAzNzI1MywgMjg1NzEsIDgwNDksIDM3MjYwLCAKKyAgICAzNzI2NywgMzcyNzQsIDM3MjgwLCAzNzI4NSwgMzcyOTIsIDM3MzAzLCAzNzMwOSwgMzczMTQsIDM3MzE5LCAzNzMyNCwgCisgICAgMzczMzEsIDM3MDc5LCAzNzMzNSwgMzczNDUsIDM3MzU2LCAzNzM2MiwgMzczNjcsIDM3MzcyLCAzNzM3NywgMzczODIsIAorICAgIDM3Mzg3LCAzNzM5MSwgMzczOTUsIDM3NDAxLCAzNzQwOSwgMjMxOSwgODY1LCAxMDI2MSwgMTAyNzMsIDEwMjc4LCAxMDI4NCwgCisgICAgMzc0MTgsIDEwMjg5LCAxMDI5NCwgMTAzMDAsIDM3NDIzLCAzNzQzMywgMzc0MzcsIDEwMzA1LCAzNzQ0MiwgMTY5MDMsIAorICAgIDM3NDQ1LCAzNzQ1MCwgMzc0NTQsIDM3NDU5LCAzNzQ2NCwgMzc0NzEsIDM3NDc4LCAzNzQ4MiwgMzc0ODUsIDM3NDkzLCAKKyAgICAxMDIwOCwgMzc1MDAsIDM3NTAzLCAzNzUwOSwgMzc1MTksIDU5MjksIDM3NTI4LCAzNzUzMiwgMzc1NDAsIDM3NTQ0LCAKKyAgICAzNzU1NCwgMzc1NjAsIDM3NTcxLCAzNzU3NywgMzc1ODMsIDM3NTg4LCAzNzU5NCwgMzc2MDAsIDM3NjA2LCAzNzYxMSwgCisgICAgMzc2MTQsIDM3NjIxLCAzNzYyNywgMzc2MzIsIDM3NjM5LCAzNzY0NiwgMzc2NTAsIDM3NjYwLCAzNzY3MywgMzc2ODIsIAorICAgIDM3NjkxLCAzNzcwMiwgMzc3MTUsIDM3NzI2LCAzNzczNSwgMzc3NDYsIDM3NzUxLCAzNzc2MCwgMzc3NjUsIDEwMzEwLCAKKyAgICAzNzc3MSwgMzc3NzgsIDM3Nzg2LCAzNzc5MSwgMzc3OTUsIDM3ODAyLCAzNzgwOSwgMzgyOSwgMTYsIDM3ODEzLCAzNzgxOCwgCisgICAgMTY3NTcsIDM3ODIyLCAzNzgyNSwgMzc4MjgsIDI4MDc3LCAzNzgzMiwgMjg1ODAsIDM3ODQwLCAzNzg0NCwgMzc4NDgsIAorICAgIDM3ODUxLCAzNzg1NywgMzcxMDEsIDM3ODYzLCAzNzg3MSwgMzc4NzcsIDM3ODg0LCAyODA2MCwgMzc4ODgsIDI4MjU0LCAKKyAgICAzNzg5MiwgMzc5MDEsIDM3OTA3LCAzNzkxMywgMzc5MTgsIDM3OTIyLCAzNzkyOCwgMzc5MzIsIDM3OTQwLCAzNzk0OCwgCisgICAgMjYxOTQsIDM3OTU0LCAzNzk2MSwgMzc5NjcsIDM3OTcyLCAzNzk3NywgMzc5ODEsIDM3OTg3LCAzNzk5MiwgMzc5OTgsIAorICAgIDQwNTYsIDc5MSwgMzgwMDUsIDM4MDA5LCAzODAxMiwgMTUyNzUsIDM4MDI0LCAzNTg1MSwgMzgwMzUsIDM4MDM4LCAzODA0NSwgCisgICAgMzgwNDksIDM4MDU1LCAzODA1OSwgMzgwNjUsIDM4MDcwLCAzODA3NiwgMzgwODEsIDM4MDg2LCAzODA5MCwgMzgwOTQsIAorICAgIDM4MDk5LCAzODEwNCwgMzgxMTQsIDM4MTIwLCAzODEzMywgMzgxMzksIDM4MTQ1LCAzODE1MiwgMzgxNTcsIDM4MTYzLCAKKyAgICAzODE2OCwgMTY2NDMsIDE0NzIsIDEwMTksIDMxMjE4LCAzMTIyNCwgMzgxNzMsIDMxMjMwLCAzMTI0MywgMzEyNDksIAorICAgIDMxMjU1LCAzODE3OSwgMzEyNjEsIDMxMjY3LCAzODE4NSwgMzgxOTEsIDIyLCAzODE5OSwgMzgyMDYsIDM4MjEwLCAzODIxNCwgCisgICAgMzgyMjIsIDMxOTc4LCAzODIyNiwgMzgyMzAsIDM4MjM3LCAzODI0MiwgMzgyNDYsIDM4MjUxLCAzODI1NywgMzgyNjIsIAorICAgIDM4MjY4LCAzODI3MywgMzgyNzcsIDM4MjgxLCAzODI4NSwgMzgyOTAsIDM4Mjk0LCAzODI5OSwgMzgzMDMsIDM4MzEwLCAKKyAgICAzODMxNSwgMzgzMTksIDM4MzI0LCAzODMyOCwgMzgzMzMsIDM4MzM3LCAzODM0MiwgMzgzNDgsIDE1NDk1LCAxNTUwMCwgCisgICAgMzgzNTMsIDM4MzU3LCAzODM2MCwgMzgzNjQsIDIxMTgzLCAzODM2OSwgMzgzNzMsIDM4Mzc5LCAzODM4NiwgMzgzOTEsIAorICAgIDM4NDAxLCAzODQwNiwgMzg0MTQsIDM4NDE4LCAzODQyMSwgMzE5OTMsIDM4NDI1LCA0MTA5LCAzODQzMCwgMzg0MzUsIAorICAgIDM4NDM5LCAzODQ0NCwgMzg0NDgsIDM4NDUzLCAxMzM3NSwgMzg0NjQsIDM4NDY4LCAzODQ3MSwgMzg0NzYsIDM4NDgwLCAKKyAgICAzODQ4NCwgMzg0ODcsIDM4NDkxLCA4MTQ1LCAxMzM5MSwgMzg0OTQsIDM4NDk3LCAzODUwMywgMzg1MDgsIDM4NTE0LCAKKyAgICAzODUxOSwgMzg1MjUsIDM4NTMwLCAzODUzNiwgMzg1NDEsIDM4NTQ3LCAzODU1MywgMzg1NTksIDM4NTY0LCAzODU2OCwgCisgICAgMzg1NzIsIDM4NTgxLCAzODU5NywgMzg2MTMsIDM4NjIzLCAyNzk2NywgMzg2MzAsIDM4NjM0LCAzODYzOSwgMzg2NDQsIAorICAgIDM4NjQ4LCAzODY1MiwgMzU5NzIsIDM4NjU4LCAzODY2MywgMzg2NjcsIDM4Njc0LCAzODY3OSwgMzg2ODMsIDM4Njg3LCAKKyAgICAyNjk5NiwgMzg2OTMsIDIxNDUxLCAzODY5OCwgMzg3MDUsIDM4NzEzLCAzODcxOSwgMzg3MjYsIDM4NzM0LCAzODc0MCwgCisgICAgMzg3NDQsIDM4NzUwLCAzODc1OCwgMzg3NjIsIDM4NzcxLCA5NTA5LCAzODc3OSwgMzg3ODMsIDM4NzkxLCAzODc5OCwgCisgICAgMzg4MDMsIDM4ODA4LCAzODgxMiwgMzg4MTUsIDM4ODE5LCAzODgyMiwgMzg4MjYsIDM4ODMzLCAzODgzOCwgMzg4NDQsIAorICAgIDI2NDE1LCAzMTI4MSwgMzg4NDgsIDM4ODU1LCAzODg2MSwgMzg4NjcsIDM4ODcyLCAzODg3NSwgMzg4NzcsIDM4ODg0LCAKKyAgICAzODg5MSwgMzg4OTcsIDM4OTAxLCAzODkwNCwgMzg5MDgsIDM4OTEyLCAzODkxNiwgMzg5MjEsIDM4OTI1LCAzODkyOSwgCisgICAgMzg5MzIsIDM4OTM2LCAzODk1MCwgMjMwNjIsIDM4OTY5LCAzODk4MiwgMzg5OTUsIDM5MDA4LCAyMzA4MCwgMzkwMjMsIAorICAgIDEwNDk3LCAzOTAzOCwgMzkwNDQsIDM5MDQ4LCAzOTA1MiwgMzkwNTksIDM5MDY0LCAzOTA2OCwgMzkwNzUsIDM5MDgxLCAKKyAgICAzOTA4NiwgMzkwOTIsIDM5MTAyLCAzOTExNCwgMzkxMjUsIDM5MTMwLCAzOTEzNywgMzkxNDEsIDM5MTQ1LCAzOTE0OCwgCisgICAgMTU4OTEsIDM2NzcsIDM5MTU2LCAxNTUyMiwgMzkxNjksIDM5MTc2LCAzOTE4MCwgMzkxODQsIDM5MTg5LCAzOTE5NCwgCisgICAgMzkyMDAsIDM5MjA0LCAzOTIwOCwgMzkyMTEsIDc3NDIsIDE1NTMzLCAzOTIxNiwgMzkyMjAsIDM5MjI2LCAzOTIzNSwgCisgICAgMzkyNDAsIDM5MjQ3LCAzNTgyOCwgMzkyNTMsIDM5MjU4LCAzOTI2MiwgMzkyNjcsIDM5Mjc0LCAzOTI3OCwgMzkyODEsIAorICAgIDM5Mjg1LCAzOTI5MCwgMTQ1NjUsIDM5Mjk3LCAzOTMwNCwgMTA3NywgMzkzMDgsIDM5MzEzLCAzOTMxOCwgMzkzMjQsIAorICAgIDM5MzI5LCAzOTMzNCwgMzkzMzgsIDM5MzQ4LCAzOTM1MywgMzkzNTksIDM5MzY0LCAzOTM3MCwgMzkzNzUsIDM5MzgxLCAKKyAgICAzOTM5MSwgMzkzOTYsIDM5NDAxLCAzOTQwNSwgNzIyOSwgNzI0MSwgMzk0MTAsIDM5NDEzLCAzOTQyMCwgMzk0MjYsIAorICAgIDM0MDg0LCAzNDA5MSwgMzk0MzUsIDM5NDM5LCAzMjA0MSwgMzk0NDcsIDM5NDU4LCAzOTQ2NiwgMzYwMjAsIDM5NDczLCAKKyAgICAzOTQ3OCwgMzk0ODMsIDM5NDk0LCAzOTUwMSwgMzk1MTIsIDMyMDY1LCAyMTQ1NywgMzk1MjAsIDczNSwgMzk1MjUsIAorICAgIDM5NTMxLCAyODA1MSwgMzk1MzcsIDM5NTQyLCAzOTU1MiwgMzk1NjEsIDM5NTY4LCAzOTU3NCwgMzk1NzgsIDM5NTgxLCAKKyAgICAzOTU4OCwgMzk1OTQsIDM5NjAxLCAzOTYwNywgMzk2MTcsIDM5NjI1LCAzOTYzMSwgMzk2MzcsIDM5NjQyLCAzOTY0NiwgCisgICAgMzk2NTMsIDM5NjU5LCAzOTY2NiwgMzg5MTcsIDUzNSwgMTM4MTgsIDM5NjcyLCAzOTY3NywgMzk2ODAsIDM5Njg2LCAKKyAgICAzOTY5NCwgMTM5NiwgMzk2OTksIDM5NzAzLCAzOTcwOCwgMzk3MTUsIDM5NzIxLCAzOTcyNSwgMzk3MjksIDM5NzM0LCAKKyAgICAzOTc0MywgMzk3NTAsIDM5NzYwLCAzOTc2NiwgMjgwOTUsIDM5NzgzLCAzOTc5MiwgMzk4MDAsIDM5ODA2LCAzOTgxMSwgCisgICAgMzk4MTgsIDM5ODI0LCAzOTgzMiwgMzk4NDEsIDM5ODQ5LCAzOTg1MywgMzk4NTgsIDM5ODY2LCAzMjA3NCwgMzk4NzIsIAorICAgIDM5ODkxLCAxNTgyNCwgMzk5MDUsIDM5OTIxLCAzOTkzNSwgMzk5NDEsIDM5OTQ2LCAzOTk1MSwgMzk5NTYsIDM5OTYyLCAKKyAgICAzMjA4MCwgMzk5NjcsIDM5OTc0LCAzOTk3OSwgMzk5ODMsIDM0NSwgMjkzNiwgMzk5OTAsIDM5OTk1LCA0MDAwMCwgMjczMjIsIAorICAgIDM5ODIxLCA0MDAwNCwgNDAwMDksIDQwMDE3LCA0MDAyMSwgNDAwMjQsIDQwMDMwLCA0MDAzNiwgNDAwNDAsIDI4MTUwLCAKKyAgICA0MDA0MywgNDAwNDgsIDQwMDUyLCA0MDA1NSwgNDAwNjAsIDQwMDY0LCA0MDA2OSwgNDAwNzQsIDQwMDc4LCA0MDA4MywgCisgICAgNDAwODcsIDQwMDkxLCAyMTE3OSwgMjExOTAsIDQwMDk1LCA0MDEwMCwgNDAxMDYsIDI2OTUzLCA0MDExMSwgNDAxMTUsIAorICAgIDIxMjY2LCAxNjA3MiwgNDAxMTgsIDQwMTIzLCA0MDEyOCwgNDAxMzMsIDQwMTM4LCA0MDE0MywgNDAxNDgsIDQwMTUzLCAKKyAgICA0NTAsIDQ5LCAzMTI5OSwgMzEzMDQsIDMxMzA5LCAzMTMxNSwgMzEzMjAsIDMxMzI1LCA0MDE1OCwgMzEzMjksIDQwMTYyLCAKKyAgICA0MDE2NiwgNDAxNzAsIDMxMzM0LCAzMTM0MCwgNDAxODQsIDMxMzUxLCAzMTM1NiwgNDAxOTIsIDQwMTk3LCAzMTM2MiwgCisgICAgNDAyMDIsIDQwMjA3LCA0MDIxMiwgNDAyMTcsIDQwMjIzLCA0MDIyOSwgNDAyMzUsIDMxMzc5LCA0MDI0OCwgNDAyNTQsIAorICAgIDMxMzgzLCA0MDI1OCwgMzEzODgsIDQwMjYzLCAzMTM5MywgMzEzOTgsIDQwMjY2LCA0MDI3MSwgNDAyNzUsIDMwOTQ4LCAKKyAgICA0MDI4MSwgMTM1OTksIDQwMjg4LCA0MDI5MywgMzE0MDMsIDQwMjk3LCA0MDMwMiwgNDAzMDcsIDQwMzEyLCA0MDMxNiwgCisgICAgNDAzMjEsIDQwMzI2LCA0MDMzMiwgNDAzMzcsIDQwMzQyLCA0MDM0OCwgNDAzNTQsIDQwMzU5LCA0MDM2MywgNDAzNjgsIAorICAgIDQwMzczLCA0MDM3OCwgNDAzODIsIDQwMzg3LCA0MDM5MiwgNDAzOTcsIDQwNDAzLCA0MDQwOSwgNDA0MTUsIDQwNDIwLCAKKyAgICA0MDQyNCwgNDA0MjksIDQwNDMzLCAzMTQwNywgMzE0MTIsIDMxNDE3LCA0MDQzNywgNDA0NDEsIDQwNDQ1LCAzMTQyMiwgCisgICAgMzE0MjgsIDMxNDM0LCAzMTQ0NiwgNDA0NTcsIDI2MDEzLCA0MDQ2MSwgNDA0NjUsIDQwNDcwLCA0MDQ3NSwgNDA0ODAsIAorICAgIDQwNDg1LCA0MDQ4OSwgNDA0OTMsIDQwNTAzLCA0MDUwOCwgNDA1MTMsIDQwNTE3LCA0MDUyMSwgNDA1MjQsIDQwNTMyLCAKKyAgICAzMTQ5NCwgNDA1MzcsIDE0NzksIDQwNTQzLCA0MDU1MSwgNDA1NjAsIDQwNTY0LCA0MDU2OCwgNDA1NzYsIDQwNTgyLCAKKyAgICA0MDU5MCwgNDA2MDYsIDQwNjEwLCA0MDYxNCwgNDA2MTksIDQwNjM0LCAzMTUzMSwgMTc0OSwgMTIwNTUsIDQwNjM4LCAKKyAgICAxMzc4LCA0MDY1MCwgNDA2NTEsIDQwNjU5LCA0MDY2NiwgNDA2NzEsIDQwNjc4LCA0MDY4MywgOTM3OSwgMTExOSwgMTAzMzIsIAorICAgIDQwNjkwLCA0MDY5NSwgNDA2OTgsIDQwNzAxLCA0MDcxMCwgMTI4NiwgNDA3MTUsIDM5MDY1LCA0MDcyMiwgNDA3MjcsIAorICAgIDQwNzMxLCAyMjUwMywgMjU1NywgNDA3MzksIDEwNzQxLCA0MDc0OSwgNDA3NTUsIDIzMzcsIDIzNDcsIDQwNzY0LCA0MDc3MywgCisgICAgNDA3ODMsIDQwNzk0LCAzMjkzLCAzNDIzNywgMTAzODQsIDM4MDcsIDE2NjgxLCAxMjkxLCA0MDc5OSwgNDA4MDcsIDQwODE0LCAKKyAgICA0MDgxOSwgNDA4MjMsIDQwODI3LCAyMzg3NSwgMTA0MTEsIDQwODM1LCA0MDg0NCwgNDA4NTMsIDQwODYxLCA0MDg2OCwgCisgICAgNDA4NzksIDQwODg0LCA0MDg5NywgNDA5MTAsIDQwOTIyLCA0MDkzNCwgNDA5NDYsIDQwOTU5LCA0MDk3MCwgNDA5ODEsIAorICAgIDQwOTkxLCA0MDk5OSwgNDEwMDcsIDQxMDE5LCA0MTAzMSwgNDEwNDIsIDQxMDUxLCA0MTA1OSwgNDEwNjYsIDQxMDc4LCAKKyAgICA0MTA4NSwgNDEwOTQsIDQxMTAxLCA0MTExNCwgNDExMTksIDQxMTI5LCA0MTEzNCwgNDExNDAsIDQxMTQ1LCAzNzIxMSwgCisgICAgNDExNDksIDQxMTU2LCA0MTE2MCwgNDExNjcsIDQxMTc1LCAyNTE4LCA0MTE4MiwgNDExOTMsIDQxMjAzLCA0MTIxMiwgCisgICAgNDEyMjAsIDQxMjMwLCA0MTIzOCwgNDEyNDgsIDQxMjU3LCA0MTI2MiwgNDEyNjgsIDQxMjc0LCAzNzA5LCA0MTI4NSwgCisgICAgNDEyOTUsIDQxMzA0LCA0MTMxMywgNDEzMjMsIDQxMzMxLCA0MTM0MCwgNDEzNDUsIDQxMzUwLCA0MTM1NSwgMTcwNSwgMzcsIAorICAgIDQxMzYzLCA0MTM3MSwgNDEzODIsIDQxMzkzLCAxNjM1NiwgNDE0MDMsIDQxNDA3LCA0MTQxNCwgNDE0MjAsIDQxNDI1LCAKKyAgICA0MTQyOSwgNDE0NDAsIDQxNDUwLCA0MTQ1OSwgNDE0NzAsIDE2NzMwLCAxNjczNSwgNDE0NzUsIDQxNDg0LCA0MTQ4OSwgCisgICAgNDE0OTksIDQxNTA0LCA0MTUxMiwgNDE1MjAsIDQxNTI3LCA0MTUzMywgNzA3OCwgMjI4LCA0MTUzNywgNDE1NDMsIDQxNTQ4LCAKKyAgICA0MTU1MSwgMjExNywgMzkxODEsIDQxNTU5LCA0MTU2MywgNDE1NjYsIDE1MTIsIDQxNTcyLCAxMzk4MCwgMTI5NiwgNDE1NzcsIAorICAgIDQxNTkwLCA0MTYwNCwgMjY0MywgNDE2MjIsIDQxNjM0LCA0MTY0NiwgMjY1NywgMjY3NCwgNDE2NjAsIDQxNjczLCAyNjg5LCAKKyAgICA0MTY4NywgNDE2OTksIDI3MDQsIDQxNzEzLCAxMzAyLCAxMzA4LCAxMzE0LCAxMDY1OSwgNDE3MTgsIDQxNzIzLCA0MTcyOCwgCisgICAgNDE3MzIsIDQxNzQ3LCA0MTc2MiwgNDE3NzcsIDQxNzkyLCA0MTgwNywgNDE4MjIsIDQxODM3LCA0MTg1MiwgNDE4NjcsIAorICAgIDQxODgyLCA0MTg5NywgNDE5MTIsIDQxOTI3LCA0MTk0MiwgNDE5NTcsIDQxOTcyLCA0MTk4NywgNDIwMDIsIDQyMDE3LCAKKyAgICA0MjAzMiwgNDIwNDcsIDQyMDYyLCA0MjA3NywgNDIwOTIsIDQyMTA3LCA0MjEyMiwgNDIxMzcsIDQyMTUyLCA0MjE2NywgCisgICAgNDIxODIsIDQyMTk3LCA0MjIxMiwgNDIyMjcsIDQyMjQyLCA0MjI1NywgNDIyNzIsIDQyMjg3LCA0MjMwMiwgNDIzMTcsIAorICAgIDQyMzMyLCA0MjM0NywgNDIzNjIsIDQyMzc3LCA0MjM5MiwgNDI0MDcsIDQyNDIyLCA0MjQzNywgNDI0NTIsIDQyNDY3LCAKKyAgICA0MjQ4MiwgNDI0OTcsIDQyNTEyLCA0MjUyNywgNDI1NDIsIDQyNTU3LCA0MjU3MiwgNDI1ODcsIDQyNjAyLCA0MjYxNywgCisgICAgNDI2MzIsIDQyNjQ3LCA0MjY2MiwgNDI2NzcsIDQyNjkyLCA0MjcwNywgNDI3MjIsIDQyNzM3LCA0Mjc1MiwgNDI3NjcsIAorICAgIDQyNzgyLCA0Mjc5NywgNDI4MTIsIDQyODI3LCA0Mjg0MiwgNDI4NTcsIDQyODcyLCA0Mjg4NywgNDI5MDIsIDQyOTE3LCAKKyAgICA0MjkzMiwgNDI5NDcsIDQyOTYyLCA0Mjk3NywgNDI5OTIsIDQzMDA3LCA0MzAyMiwgNDMwMzcsIDQzMDUyLCA0MzA2NywgCisgICAgNDMwODIsIDQzMDk3LCA0MzExMiwgNDMxMjcsIDQzMTQyLCA0MzE1NywgNDMxNzIsIDQzMTg3LCA0MzIwMiwgNDMyMTcsIAorICAgIDQzMjMyLCA0MzI0NywgNDMyNjIsIDQzMjc3LCA0MzI5MiwgNDMzMDcsIDQzMzIyLCA0MzMzNywgNDMzNTIsIDQzMzY3LCAKKyAgICA0MzM4MiwgNDMzOTcsIDQzNDEyLCA0MzQyNywgNDM0NDIsIDQzNDU3LCA0MzQ3MiwgNDM0ODcsIDQzNTAyLCA0MzUxNywgCisgICAgNDM1MzIsIDQzNTQ3LCA0MzU2MiwgNDM1NzcsIDQzNTkyLCA0MzYwNywgNDM2MjIsIDQzNjM3LCA0MzY1MiwgNDM2NjcsIAorICAgIDQzNjgyLCA0MzY5NywgNDM3MTIsIDQzNzI3LCA0Mzc0MiwgNDM3NTcsIDQzNzcyLCA0Mzc4NywgNDM4MDIsIDQzODE3LCAKKyAgICA0MzgzMiwgNDM4NDcsIDQzODYyLCA0Mzg3NywgNDM4OTIsIDQzOTA3LCA0MzkyMiwgNDM5MzcsIDQzOTUyLCA0Mzk2NywgCisgICAgNDM5ODIsIDQzOTk3LCA0NDAxMiwgNDQwMjcsIDQ0MDQyLCA0NDA1NywgNDQwNzIsIDQ0MDg3LCA0NDEwMiwgNDQxMTcsIAorICAgIDQ0MTMyLCA0NDE0NywgNDQxNjIsIDQ0MTc3LCA0NDE5MiwgNDQyMDcsIDQ0MjIyLCA0NDIzNywgNDQyNTIsIDQ0MjY3LCAKKyAgICA0NDI4MiwgNDQyOTcsIDQ0MzEyLCA0NDMyNywgNDQzNDIsIDQ0MzU3LCA0NDM3MiwgNDQzODcsIDQ0NDAyLCA0NDQxNywgCisgICAgNDQ0MzIsIDQ0NDQ3LCA0NDQ2MiwgNDQ0NzcsIDQ0NDkyLCA0NDUwNywgNDQ1MjIsIDQ0NTM3LCA0NDU1MiwgNDQ1NjcsIAorICAgIDQ0NTgyLCA0NDU5NywgNDQ2MTIsIDQ0NjI3LCA0NDY0MiwgNDQ2NTcsIDQ0NjcyLCA0NDY4NywgNDQ3MDIsIDQ0NzE3LCAKKyAgICA0NDczMiwgNDQ3NDcsIDQ0NzYyLCA0NDc3NywgNDQ3OTIsIDQ0ODA3LCA0NDgyMiwgNDQ4MzcsIDQ0ODUyLCA0NDg2NywgCisgICAgNDQ4ODIsIDQ0ODk3LCA0NDkxMiwgNDQ5MjcsIDQ0OTQyLCA0NDk1NywgNDQ5NzIsIDQ0OTg3LCA0NTAwMiwgNDUwMTcsIAorICAgIDQ1MDMyLCA0NTA0NywgNDUwNjIsIDQ1MDc3LCA0NTA5MiwgNDUxMDcsIDQ1MTIyLCA0NTEzNywgNDUxNTIsIDQ1MTY3LCAKKyAgICA0NTE4MiwgNDUxOTcsIDQ1MjEyLCA0NTIyNywgNDUyNDIsIDQ1MjU3LCA0NTI3MiwgNDUyODcsIDQ1MzAyLCA0NTMxNywgCisgICAgNDUzMzIsIDQ1MzQ3LCA0NTM2MiwgNDUzNzcsIDQ1MzkyLCA0NTQwNywgNDU0MjIsIDQ1NDM3LCA0NTQ1MiwgNDU0NjcsIAorICAgIDQ1NDgyLCA0NTQ5NywgNDU1MTIsIDQ1NTI3LCA0NTU0MiwgNDU1NTcsIDQ1NTcyLCA0NTU4NywgNDU2MDIsIDQ1NjE3LCAKKyAgICA0NTYzMiwgNDU2NDcsIDQ1NjYyLCA0NTY3NywgNDU2OTIsIDQ1NzA3LCA0NTcyMiwgNDU3MzcsIDQ1NzUyLCA0NTc2NywgCisgICAgNDU3ODIsIDQ1Nzk3LCA0NTgxMiwgNDU4MjcsIDQ1ODQyLCA0NTg1NywgNDU4NzIsIDQ1ODg3LCA0NTkwMiwgNDU5MTcsIAorICAgIDQ1OTMyLCA0NTk0NywgNDU5NjIsIDQ1OTc3LCA0NTk5MiwgNDYwMDcsIDQ2MDIyLCA0NjAzNywgNDYwNTIsIDQ2MDY3LCAKKyAgICA0NjA4MiwgNDYwOTcsIDQ2MTEyLCA0NjEyNywgNDYxNDIsIDQ2MTU3LCA0NjE3MiwgNDYxODcsIDQ2MjAyLCA0NjIxNywgCisgICAgNDYyMzIsIDQ2MjQ3LCA0NjI2MiwgNDYyNzcsIDQ2MjkyLCA0NjMwNywgNDYzMjIsIDQ2MzM3LCA0NjM1MiwgNDYzNjcsIAorICAgIDQ2MzgyLCA0NjM5NywgNDY0MTIsIDQ2NDI3LCA0NjQ0MiwgNDY0NTcsIDQ2NDcyLCA0NjQ4NywgNDY1MDIsIDQ2NTE3LCAKKyAgICA0NjUzMiwgNDY1NDcsIDQ2NTYyLCA0NjU3NywgNDY1OTIsIDQ2NjA3LCA0NjYyMiwgNDY2MzcsIDQ2NjUyLCA0NjY2NywgCisgICAgNDY2ODIsIDQ2Njk3LCA0NjcxMiwgNDY3MjcsIDQ2NzQyLCA0Njc1NywgNDY3NzIsIDQ2Nzg3LCA0NjgwMiwgNDY4MTcsIAorICAgIDQ2ODMyLCA0Njg0NywgNDY4NjIsIDQ2ODc3LCA0Njg5MiwgNDY5MDcsIDQ2OTIyLCA0NjkzNywgNDY5NTIsIDQ2OTY3LCAKKyAgICA0Njk4MiwgNDY5OTcsIDQ3MDEyLCA0NzAyNywgNDcwNDIsIDQ3MDU3LCA0NzA3MiwgNDcwODcsIDQ3MTAyLCA0NzExNywgCisgICAgNDcxMzIsIDQ3MTQ3LCA0NzE2MiwgNDcxNzcsIDQ3MTkyLCA0NzIwNywgNDcyMjIsIDQ3MjM3LCA0NzI1MiwgNDcyNjcsIAorICAgIDQ3MjgyLCA0NzI5NywgNDczMTIsIDQ3MzI3LCA0NzM0MiwgNDczNTcsIDQ3MzcyLCA0NzM4NywgNDc0MDIsIDQ3NDE3LCAKKyAgICA0NzQzMiwgNDc0NDcsIDQ3NDYyLCA0NzQ3NywgNDc0OTIsIDQ3NTA3LCA0NzUyMiwgNDc1MzcsIDQ3NTUyLCA0NzU2NywgCisgICAgNDc1ODIsIDQ3NTk3LCA0NzYxMiwgNDc2MjcsIDQ3NjQyLCA0NzY1NywgNDc2NzIsIDQ3Njg3LCA0NzcwMiwgNDc3MTcsIAorICAgIDQ3NzMyLCA0Nzc0NywgNDc3NjIsIDQ3Nzc3LCA0Nzc5MiwgNDc4MDcsIDQ3ODIyLCA0NzgzNywgNDc4NTIsIDQ3ODY3LCAKKyAgICA0Nzg4MiwgNDc4OTcsIDQ3OTEyLCA0NzkyNywgNDc5NDIsIDQ3OTU3LCA0Nzk3MiwgNDc5ODcsIDQ4MDAyLCA0ODAxNywgCisgICAgNDgwMzIsIDQ4MDQ3LCA0ODA2MiwgNDgwNzcsIDQ4MDkyLCA0ODEwNywgNDgxMjIsIDQ4MTM3LCA0ODE1MiwgNDgxNjcsIAorICAgIDQ4MTgyLCA0ODE5NywgNDgyMTIsIDQ4MjI3LCA0ODI0MiwgNDgyNTcsIDQ4MjcyLCA0ODI4NywgNDgzMDIsIDQ4MzE3LCAKKyAgICA0ODMzMiwgNDgzNDcsIDQ4MzYyLCA0ODM3NywgNDgzOTIsIDQ4NDA3LCA0ODQyMiwgNDg0MzcsIDQ4NDUyLCA0ODQ2NywgCisgICAgNDg0ODIsIDQ4NDk3LCA0ODUxMiwgNDg1MjcsIDQ4NTQyLCA0ODU1NywgNDg1NzIsIDQ4NTg3LCA0ODYwMiwgNDg2MTcsIAorICAgIDQ4NjMyLCA0ODY0NywgNDg2NjIsIDQ4Njc3LCA0ODY5MiwgNDg3MDcsIDQ4NzIyLCA0ODczNywgNDg3NTIsIDQ4NzY3LCAKKyAgICA0ODc4MiwgNDg3OTcsIDQ4ODEyLCA0ODgyNywgNDg4NDIsIDQ4ODU3LCA0ODg3MiwgNDg4ODcsIDQ4OTAyLCA0ODkxNywgCisgICAgNDg5MzIsIDQ4OTQ3LCA0ODk2MiwgNDg5NzcsIDQ4OTkyLCA0OTAwNywgNDkwMjIsIDQ5MDM3LCA0OTA1MiwgNDkwNjcsIAorICAgIDQ5MDgyLCA0OTA5NywgNDkxMTIsIDQ5MTI3LCA0OTE0MiwgNDkxNTcsIDQ5MTcyLCA0OTE4NywgNDkyMDIsIDQ5MjE3LCAKKyAgICA0OTIzMiwgNDkyNDcsIDQ5MjYyLCA0OTI3NywgNDkyOTIsIDQ5MzA3LCA0OTMyMiwgNDkzMzcsIDQ5MzUyLCA0OTM2NywgCisgICAgNDkzODIsIDQ5Mzk3LCA0OTQxMiwgNDk0MjcsIDQ5NDQyLCA0OTQ1NywgNDk0NzIsIDQ5NDg3LCA0OTUwMiwgNDk1MTcsIAorICAgIDQ5NTMyLCA0OTU0OCwgNDk1NjQsIDQ5NTgwLCA0OTU5NiwgNDk2MTIsIDQ5NjI4LCA0OTY0NCwgNDk2NjAsIDQ5Njc2LCAKKyAgICA0OTY5MiwgNDk3MDgsIDQ5NzI0LCA0OTc0MCwgNDk3NTYsIDQ5NzcyLCA0OTc4OCwgNDk4MDQsIDQ5ODIwLCA0OTgzNiwgCisgICAgNDk4NTIsIDQ5ODY4LCA0OTg4NCwgNDk5MDAsIDQ5OTE2LCA0OTkzMiwgNDk5NDgsIDQ5OTY0LCA0OTk4MCwgNDk5OTYsIAorICAgIDUwMDEyLCA1MDAyOCwgNTAwNDQsIDUwMDYwLCA1MDA3NiwgNTAwOTIsIDUwMTA4LCA1MDEyNCwgNTAxNDAsIDUwMTU2LCAKKyAgICA1MDE3MiwgNTAxODgsIDUwMjA0LCA1MDIyMCwgNTAyMzYsIDUwMjUyLCA1MDI2OCwgNTAyODQsIDUwMzAwLCA1MDMxNiwgCisgICAgNTAzMzIsIDUwMzQ4LCA1MDM2NCwgNTAzODAsIDUwMzk2LCA1MDQxMiwgNTA0MjgsIDUwNDQ0LCA1MDQ2MCwgNTA0NzYsIAorICAgIDUwNDkyLCA1MDUwOCwgNTA1MjQsIDUwNTQwLCA1MDU1NiwgNTA1NzIsIDUwNTg4LCA1MDYwNCwgNTA2MjAsIDUwNjM2LCAKKyAgICA1MDY1MiwgNTA2NjgsIDUwNjg0LCA1MDcwMCwgNTA3MTYsIDUwNzMyLCA1MDc0OCwgNTA3NjQsIDUwNzgwLCA1MDc5NiwgCisgICAgNTA4MTIsIDUwODI4LCA1MDg0NCwgNTA4NjAsIDUwODc2LCA1MDg5MiwgNTA5MDgsIDUwOTI0LCA1MDk0MCwgNTA5NTYsIAorICAgIDUwOTcyLCA1MDk4OCwgNTEwMDQsIDUxMDIwLCA1MTAzNiwgNTEwNTIsIDUxMDY4LCA1MTA4NCwgNTExMDAsIDUxMTE2LCAKKyAgICA1MTEzMiwgNTExNDgsIDUxMTY0LCA1MTE4MCwgNTExOTYsIDUxMjEyLCA1MTIyOCwgNTEyNDQsIDUxMjYwLCA1MTI3NiwgCisgICAgNTEyOTIsIDUxMzA4LCA1MTMyNCwgNTEzNDAsIDUxMzU2LCA1MTM3MiwgNTEzODgsIDUxNDA0LCA1MTQyMCwgNTE0MzYsIAorICAgIDUxNDUyLCA1MTQ2OCwgNTE0ODQsIDUxNTAwLCA1MTUxNiwgNTE1MzIsIDUxNTQ4LCA1MTU2NCwgNTE1ODAsIDUxNTk2LCAKKyAgICA1MTYxMiwgNTE2MjgsIDUxNjQ0LCA1MTY2MCwgNTE2NzYsIDUxNjkyLCA1MTcwOCwgNTE3MjQsIDUxNzQwLCA1MTc1NiwgCisgICAgNTE3NzIsIDUxNzg4LCA1MTgwNCwgNTE4MjAsIDUxODM2LCA1MTg1MiwgNTE4NjgsIDUxODg0LCA1MTkwMCwgNTE5MTYsIAorICAgIDUxOTMyLCA1MTk0OCwgNTE5NjQsIDUxOTgwLCA1MTk5NiwgNTIwMTIsIDUyMDI4LCA1MjA0NCwgNTIwNjAsIDUyMDc2LCAKKyAgICA1MjA5MiwgNTIxMDgsIDUyMTI0LCA1MjE0MCwgNTIxNTYsIDUyMTcyLCA1MjE4OCwgNTIyMDQsIDUyMjIwLCA1MjIzNiwgCisgICAgNTIyNTIsIDUyMjY4LCA1MjI4NCwgNTIzMDAsIDUyMzE2LCA1MjMzMiwgNTIzNDgsIDUyMzY0LCA1MjM4MCwgNTIzOTYsIAorICAgIDUyNDEyLCA1MjQyOCwgNTI0NDQsIDUyNDYwLCA1MjQ3NiwgNTI0OTIsIDUyNTA4LCA1MjUyNCwgNTI1NDAsIDUyNTU2LCAKKyAgICA1MjU3MiwgNTI1ODgsIDUyNjA0LCA1MjYyMCwgNTI2MzYsIDUyNjUyLCA1MjY2OCwgNTI2ODQsIDUyNzAwLCA1MjcxNiwgCisgICAgNTI3MzIsIDUyNzQ4LCA1Mjc2NCwgNTI3ODAsIDUyNzk2LCA1MjgxMiwgNTI4MjgsIDUyODQ0LCA1Mjg2MCwgNTI4NzYsIAorICAgIDUyODkyLCA1MjkwOCwgNTI5MjQsIDUyOTQwLCA1Mjk1NiwgNTI5NzIsIDUyOTg4LCA1MzAwNCwgNTMwMjAsIDUzMDM2LCAKKyAgICA1MzA1MiwgNTMwNjgsIDUzMDg0LCA1MzEwMCwgNTMxMTYsIDUzMTMyLCA1MzE0OCwgNTMxNjQsIDUzMTgwLCA1MzE5NiwgCisgICAgNTMyMTIsIDUzMjI4LCA1MzI0NCwgNTMyNjAsIDUzMjc2LCA1MzI5MiwgNTMzMDgsIDUzMzI0LCA1MzM0MCwgNTMzNTYsIAorICAgIDUzMzcyLCA1MzM4OCwgNTM0MDQsIDUzNDIwLCA1MzQzNiwgNTM0NTIsIDUzNDY4LCA1MzQ4NCwgNTM1MDAsIDUzNTE2LCAKKyAgICA1MzUzMiwgNTM1NDgsIDUzNTY0LCA1MzU4MCwgNTM1OTYsIDUzNjEyLCA1MzYyOCwgNTM2NDQsIDUzNjYwLCA1MzY3NiwgCisgICAgNTM2OTIsIDUzNzA4LCA1MzcyNCwgNTM3NDAsIDUzNzU2LCA1Mzc3MiwgNTM3ODgsIDUzODA0LCA1MzgyMCwgNTM4MzYsIAorICAgIDUzODUyLCA1Mzg2OCwgNTM4ODQsIDUzOTAwLCA1MzkxNiwgNTM5MzIsIDUzOTQ4LCA1Mzk2NCwgNTM5ODAsIDUzOTk2LCAKKyAgICA1NDAxMiwgNTQwMjgsIDU0MDQ0LCA1NDA2MCwgNTQwNzYsIDU0MDkyLCA1NDEwOCwgNTQxMjQsIDU0MTQwLCA1NDE1NiwgCisgICAgNTQxNzIsIDU0MTg4LCA1NDIwNCwgNTQyMjAsIDU0MjM2LCA1NDI1MiwgNTQyNjgsIDU0Mjg0LCA1NDMwMCwgNTQzMTYsIAorICAgIDU0MzMyLCA1NDM0OCwgNTQzNjQsIDU0MzgwLCA1NDM5NiwgNTQ0MTIsIDU0NDI4LCA1NDQ0NCwgNTQ0NjAsIDU0NDc2LCAKKyAgICA1NDQ5MiwgNTQ1MDgsIDU0NTI0LCA1NDU0MCwgNTQ1NTYsIDU0NTcyLCA1NDU4OCwgNTQ2MDQsIDU0NjIwLCA1NDYzNiwgCisgICAgNTQ2NTIsIDU0NjY4LCA1NDY4NCwgNTQ3MDAsIDU0NzE2LCA1NDczMiwgNTQ3NDgsIDU0NzY0LCA1NDc4MCwgNTQ3OTYsIAorICAgIDU0ODEyLCA1NDgyOCwgNTQ4NDQsIDU0ODYwLCA1NDg3NiwgNTQ4OTIsIDU0OTA4LCA1NDkyNCwgNTQ5NDAsIDU0OTU2LCAKKyAgICA1NDk3MiwgNTQ5ODgsIDU1MDA0LCA1NTAyMCwgNTUwMzYsIDU1MDUyLCA1NTA2OCwgNTUwODQsIDU1MTAwLCA1NTExNiwgCisgICAgNTUxMzIsIDU1MTQ4LCA1NTE2NCwgNTUxODAsIDU1MTk2LCA1NTIxMiwgNTUyMjgsIDU1MjQ0LCA1NTI2MCwgNTUyNzYsIAorICAgIDU1MjkyLCA1NTMwOCwgNTUzMjQsIDU1MzQwLCA1NTM1NiwgNTUzNzIsIDU1Mzg4LCA1NTQwNCwgNTU0MjAsIDU1NDM2LCAKKyAgICA1NTQ1MiwgNTU0NjgsIDU1NDg0LCA1NTUwMCwgNTU1MTYsIDU1NTMyLCA1NTU0OCwgNTU1NjQsIDU1NTgwLCA1NTU5NiwgCisgICAgNTU2MTIsIDU1NjI4LCA1NTY0NCwgNTU2NjAsIDU1Njc2LCA1NTY5MiwgNTU3MDgsIDU1NzI0LCA1NTc0MCwgNTU3NTYsIAorICAgIDU1NzcyLCA1NTc4OCwgNTU4MDQsIDU1ODIwLCA1NTgzNiwgNTU4NTIsIDU1ODY4LCA1NTg4NCwgNTU5MDAsIDU1OTE2LCAKKyAgICA1NTkzMiwgNTU5NDgsIDU1OTY0LCA1NTk4MCwgNTU5OTYsIDU2MDEyLCA1NjAyOCwgNTYwNDQsIDU2MDYwLCA1NjA3NiwgCisgICAgNTYwOTIsIDU2MTA4LCA1NjEyNCwgNTYxNDAsIDU2MTU2LCA1NjE3MiwgNTYxODgsIDU2MjA0LCA1NjIyMCwgNTYyMzYsIAorICAgIDU2MjUyLCA1NjI2OCwgNTYyODQsIDU2MzAwLCA1NjMxNiwgNTYzMzIsIDU2MzQ4LCA1NjM2NCwgNTYzODAsIDU2Mzk2LCAKKyAgICA1NjQxMiwgNTY0MjgsIDU2NDQ0LCA1NjQ2MCwgNTY0NzYsIDU2NDkyLCA1NjUwOCwgNTY1MjQsIDU2NTQwLCA1NjU1NiwgCisgICAgNTY1NzIsIDU2NTg4LCA1NjYwNCwgNTY2MjAsIDU2NjM2LCA1NjY1MiwgNTY2NjgsIDU2Njg0LCA1NjcwMCwgNTY3MTYsIAorICAgIDU2NzMyLCA1Njc0OCwgNTY3NjQsIDU2NzgwLCA1Njc5NiwgNTY4MTIsIDU2ODI4LCA1Njg0NCwgNTY4NjAsIDU2ODc2LCAKKyAgICA1Njg5MiwgNTY5MDgsIDU2OTI0LCA1Njk0MCwgNTY5NTYsIDU2OTcyLCA1Njk4OCwgNTcwMDQsIDU3MDIwLCA1NzAzNiwgCisgICAgNTcwNTIsIDU3MDY4LCA1NzA4NCwgNTcxMDAsIDU3MTE2LCA1NzEzMiwgNTcxNDgsIDU3MTY0LCA1NzE4MCwgNTcxOTYsIAorICAgIDU3MjEyLCA1NzIyOCwgNTcyNDQsIDU3MjYwLCA1NzI3NiwgNTcyOTIsIDU3MzA4LCA1NzMyNCwgNTczNDAsIDU3MzU2LCAKKyAgICA1NzM3MiwgNTczODgsIDU3NDA0LCA1NzQyMCwgNTc0MzYsIDU3NDUyLCA1NzQ2OCwgNTc0ODQsIDU3NTAwLCA1NzUxNiwgCisgICAgNTc1MzIsIDU3NTQ4LCA1NzU2NCwgNTc1ODAsIDU3NTk2LCA1NzYxMiwgNTc2MjgsIDU3NjQ0LCA1NzY2MCwgNTc2NzYsIAorICAgIDU3NjkyLCA1NzcwOCwgNTc3MjQsIDU3NzQwLCA1Nzc1NiwgNTc3NzIsIDU3Nzg4LCA1NzgwNCwgNTc4MjAsIDU3ODM2LCAKKyAgICA1Nzg1MiwgNTc4NjgsIDU3ODg0LCA1NzkwMCwgNTc5MTYsIDU3OTMyLCA1Nzk0OCwgNTc5NjQsIDU3OTgwLCA1Nzk5NiwgCisgICAgNTgwMTIsIDU4MDI4LCA1ODA0NCwgNTgwNjAsIDU4MDc2LCA1ODA5MiwgNTgxMDgsIDU4MTI0LCA1ODE0MCwgNTgxNTYsIAorICAgIDU4MTcyLCA1ODE4OCwgNTgyMDQsIDU4MjE5LCAxNjc2MiwgNTgyMjgsIDU4MjM0LCA1ODI0MCwgNTgyNTAsIDU4MjU4LCAKKyAgICAxNDg5NCwgMTU0NDUsIDk5NjAsIDU4MjcxLCAxNTIwLCA1ODI3OSwgMzc2MSwgMjc0MzIsIDcxODMsIDU4Mjg1LCA1ODI5MCwgCisgICAgNTgyOTUsIDU4MzAwLCA1ODMwNSwgNTgzMTEsIDU4MzE2LCA1ODMyMiwgNTgzMjcsIDU4MzMzLCA1ODMzOCwgNTgzNDMsIAorICAgIDU4MzQ4LCA1ODM1MywgNTgzNTksIDU4MzY0LCA1ODM2OSwgNTgzNzQsIDU4Mzc5LCA1ODM4NCwgNTgzODksIDU4Mzk0LCAKKyAgICA1ODQwMCwgNTg0MDUsIDU4NDExLCA1ODQxOCwgMjU2MSwgNTg0MjMsIDU4NDI5LCA4NTI2LCA1ODQzMywgNTg0MzgsIAorICAgIDU4NDQ1LCA1ODQ1MywgNDAsIDU4NDU3LCA1ODQ2MywgNTg0NjgsIDU4NDczLCA1ODQ3NywgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgCisgICAgMTA2ODQsIDU4NDk0LCA1ODUwNCwgNTg1MTcsIDU4NTI4LCA1ODU0MSwgNTg1NDgsIDU4NTU0LCA1ODU1OSwgNTg1NjUsIAorICAgIDU4NTcxLCA1ODU3NywgNTg1ODIsIDU4NTg3LCA1ODU5MiwgNTg1OTcsIDU4NjAxLCA1ODYwNiwgNTg2MTEsIDU4NjE2LCAKKyAgICA1ODYyMiwgNTg2MjgsIDU4NjM0LCA1ODYzOSwgNTg2NDMsIDU4NjQ4LCA1ODY1MywgNTg2NTcsIDU4NjYyLCA1ODY2NywgCisgICAgNTg2NzIsIDU4Njc2LCAxMDcwMCwgMTA3MTEsIDEwNzE2LCAxNTYzLCA1ODY4MCwgMTU2OCwgNTg2ODYsIDE2MjM5LCAKKyAgICA1ODY4OSwgNTg2OTUsIDE1OTksIDU4NzAxLCAxNjA1LCAxNjExLCAxMDc0NiwgNTg3MDYsIDU4NzE0LCA1ODcyMSwgNTg3MjUsIAorICAgIDU4NzMxLCA1ODczNiwgMzA5NzcsIDU4NzQxLCA1ODc0OCwgNTg3NTMsIDU4NzU3LCA1ODc2MSwgMTYxNiwgMTYzMzEsIAorICAgIDU4NzcwLCA1ODc3NCwgMTYzNDIsIDExMjUsIDU4Nzc4LCA1ODc4NSwgNTg3OTAsIDU4Nzk0LCAxNjM2NywgMTYyMCwgCisgICAgMzczNTAsIDU4Nzk3LCA1ODgwMiwgNTg4MTIsIDU4ODIxLCA1ODgyNiwgNTg4MzAsIDU4ODM2LCAxNjI1LCAzOTI1OSwgCisgICAgNTg4NDEsIDU4ODUwLCA1ODg1NiwgNTg4NjEsIDEwOTA0LCAxMDkxMCwgNTg4NjcsIDU4ODc5LCA1ODg5NiwgNTg5MTMsIAorICAgIDU4OTMwLCA1ODk0NywgNTg5NjQsIDU4OTgxLCA1ODk5OCwgNTkwMTUsIDU5MDMyLCA1OTA0OSwgNTkwNjYsIDU5MDgzLCAKKyAgICA1OTEwMCwgNTkxMTcsIDU5MTM0LCA1OTE1MSwgNTkxNjgsIDU5MTg1LCA1OTIwMiwgNTkyMTksIDU5MjM2LCA1OTI1MywgCisgICAgNTkyNzAsIDU5Mjg3LCA1OTMwNCwgNTkzMjEsIDU5MzM4LCA1OTM1NSwgNTkzNzIsIDU5Mzg5LCA1OTQwNiwgNTk0MjMsIAorICAgIDU5NDQwLCA1OTQ1NywgNTk0NzQsIDU5NDkxLCA1OTUwOCwgNTk1MjUsIDU5NTQyLCA1OTU1OSwgNTk1NzYsIDU5NTkzLCAKKyAgICA1OTYxMCwgNTk2MjcsIDU5NjQ0LCA1OTY2MSwgNTk2NzgsIDU5Njk1LCA1OTcxMiwgNTk3MjMsIDU5NzI4LCAxNjMwLCAKKyAgICA1OTczMiwgNTk3MzgsIDU5NzQzLCA1OTc0OCwgOTMyNiwgMTYzNSwgNTk3NTQsIDU5NzYzLCAyNzczMSwgNTk3NjgsIAorICAgIDU5Nzc5LCA1OTc4OSwgNTk3OTQsIDU5ODAxLCA1OTgwNywgNTk4MTIsIDU5ODE3LCAxNjYxOSwgNTk4MjEsIDEwOTIxLCAKKyAgICAxNjQwLCAxMDkyNiwgNTk4MjcsIDU5ODMyLCA1OTgzOCwgNTk4NDMsIDU5ODQ4LCA1OTg1MywgNTk4NTgsIDU5ODYzLCAKKyAgICA1OTg2OCwgNTk4NzMsIDU5ODc5LCA1OTg4NSwgNTk4OTEsIDU5ODk2LCA1OTkwMCwgNTk5MDUsIDU5OTEwLCA1OTkxNCwgCisgICAgNTk5MTksIDU5OTI0LCA1OTkyOSwgNTk5MzMsIDU5OTM4LCA1OTk0NCwgNTk5NDksIDU5OTU0LCA1OTk1OCwgNTk5NjMsIAorICAgIDU5OTY4LCA1OTk3NCwgNTk5NzksIDU5OTg0LCA1OTk5MCwgNTk5OTYsIDYwMDAxLCA2MDAwNSwgNjAwMTAsIDYwMDE1LCAKKyAgICA2MDAyMCwgNjAwMjQsIDYwMDI5LCA2MDAzNCwgNjAwMzksIDYwMDQ1LCA2MDA1MSwgNjAwNTYsIDYwMDYwLCA2MDA2NCwgCisgICAgNjAwNjksIDYwMDc0LCA2MDA3OSwgMjkxMjksIDYwMDgzLCA2MDA4OCwgNjAwOTMsIDYwMDk5LCA2MDEwNCwgNjAxMDksIAorICAgIDYwMTEzLCA2MDExOCwgNjAxMjMsIDYwMTI5LCA2MDEzNCwgNjAxMzksIDYwMTQ1LCA2MDE1MSwgNjAxNTYsIDYwMTYwLCAKKyAgICA2MDE2NSwgNjAxNzAsIDYwMTc0LCA2MDE3OSwgNjAxODQsIDYwMTg5LCA2MDE5NSwgNjAyMDEsIDYwMjA2LCA2MDIxMCwgCisgICAgNjAyMTUsIDYwMjIwLCA2MDIyNCwgNjAyMjksIDYwMjM0LCA2MDIzOSwgNjAyNDMsIDYwMjQ2LCAzMTYzOSwgNjAyNTEsIAorICAgIDYwMjU5LCAxNjY4NSwgMzY2MywgMTEwMTcsIDYwMjY1LCA2MDI3NSwgNjAyOTAsIDExMDIyLCA2MDMwMSwgNjAzMDYsIAorICAgIDYwMzE3LCA2MDMyOSwgNjAzNDEsIDYwMzUzLCAyNjk1LCA2MDM2NSwgNjAzNzAsIDYwMzgyLCA2MDM4NiwgNjAzOTIsIAorICAgIDYwMzk4LCA2MDQwMywgMTY1MiwgMTA3OCwgNjA0MTIsIDYwNDE3LCAzOTMwOSwgNjA0MjEsIDYwNDI1LCA2MDQzMCwgCisgICAgNjA0MzQsIDE2NzcwLCA2MDQzOSwgNjA0NDIsIDYwNDUwLCA2MDQ1OCwgMTY1NiwgMTEwNDcsIDExMDUzLCAxNjYxLCAKKyAgICA2MDQ2NiwgNjA0NzMsIDYwNDc4LCA2MDQ4NywgNjA0OTcsIDYwNTA0LCA2MDUwOSwgNjA1MTQsIDE2NjYsIDYwNTIxLCAKKyAgICA2MDUyNiwgMTY4ODUsIDYwNTMwLCA2MDUzNSwgNjA1NDIsIDYwNTQ4LCA2MDU1MiwgNjA1NjMsIDYwNTczLCAxNjkwNywgCisgICAgOTIzNCwgOTI0MSwgMTY3MSwgNjA1ODAsIDYwNTg2LCA2MDU5NCwgNjA2MDEsIDYwNjA3LCA2MDYxNCwgNjA2MjYsIDYwNjMyLCAKKyAgICA2MDYzNywgNjA2NDksIDYwNjYwLCA2MDY2OSwgNjA2NzksIDM3NDAsIDMwODEzLCAzMDgyMiwgMTY5NDcsIDE2NzYsIDE2ODAsIAorICAgIDYwNjg3LCA2MDY5OCwgNjA3MDMsIDE2ODMsIDYwNzExLCA2MDcxNiwgMTY5OTgsIDYwNzI4LCA2MDczNCwgNjA3MzksIAorICAgIDYwNzQ3LCAxNjg4LCA2MDc1MiwgNjA3NTcsIDYwNzY1LCA2MDc3MywgNjA3ODAsIDYwNzg5LCA2MDc5NywgNjA4MDYsIAorICAgIDE2OTMsIDYwODEwLCAxNjk4LCA2MDgxNSwgNjA4MjIsIDE3MDcyLCA2MDgzMCwgNjA4MzYsIDYwODQxLCA2MDg0OSwgCisgICAgNjA4NTYsIDYwODY0LCAyMjU3NCwgNjA4NjksIDExMTgyLCA2MDg3OCwgNjA4ODQsIDYwODkxLCA2MDg5OCwgNjA5MDQsIAorICAgIDYwOTE0LCA2MDkyMCwgNjA5MjUsIDYwOTM2LCA2MDk0MSwgNjA5NDksIDExMTkxLCAxMTE5NiwgNjA5NTcsIDYwOTYzLCAKKyAgICA2MDk3MSwgMzgwNSwgMTcxMTQsIDM5Mzk3LCA2MDk3NiwgNjA5ODIsIDYwOTg3LCA2MDk5NSwgNjEwMDIsIDEyMDM2LCAKKyAgICA2MTAwNywgNjEwMTMsIDE3MDksIDYxMDE4LCA2MTAyMSwgMTEzMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDMsIAorICAgIDYxMDQ4LCA2MTA1MywgNjEwNTgsIDYxMDYzLCA2MTA2OCwgNjEwNzMsIDE3MTgsIDksIDYxMDc5LCA2MTA4MywgNjEwODgsIAorICAgIDYxMDkyLCA2MTA5NiwgNjExMDAsIDMxODc5LCA2MTEwNSwgNjExMTAsIDYxMTE1LCA2MTExOSwgNjExMjIsIDYxMTI2LCAKKyAgICA2MTEzMCwgNjExMzUsIDYxMTM5LCA2MTE0NCwgNjExNDgsIDM0NjE2LCAzNDYyMSwgMzQ2MjYsIDYxMTUxLCA2MTE1OCwgCisgICAgNjExNjQsIDM5MTE4LCA2MTE3NCwgMzQ2MzIsIDMyMTM3LCAzMTg5NCwgMzE5MDAsIDM0NjQ4LCAzMTkwNiwgNjExNzksIAorICAgIDYxMTg0LCAzMjE3MCwgNjExODgsIDYxMTkxLCA2MTE5NSwgNjEyMDIsIDYxMjA1LCA2MTIxMCwgNjEyMTQsIDYxMjE4LCAKKyAgICA2MTIyMSwgNjEyMzEsIDYxMjQzLCA2MTI1MCwgNjEyNTYsIDYxMjYzLCAzMzU3MywgNjEyNjYsIDg1NDMsIDg3NywgNjEyNjksIAorICAgIDYxMjczLCA2MTI3OCwgMzY5MCwgNjEyODIsIDYxMjg1LCAxMzYzMiwgNjEyOTIsIDYxMjk5LCA2MTMxMiwgNjEzMjAsIAorICAgIDYxMzI5LCA2MTMzOCwgNjEzNDMsIDYxMzUzLCA2MTM2NiwgNjEzNzgsIDYxMzg1LCA2MTM5MCwgNjEzOTksIDYxNDEyLCAKKyAgICAzNjA2MCwgNjE0MzAsIDYxNDM1LCA2MTQ0MiwgNjE0NDgsIDY1NiwgNjE0NTMsIDYxNDYxLCA2MTQ2OCwgMjcyNzEsIDYyNywgCisgICAgNjE0NzQsIDYxNDgwLCA2MTQ5MCwgNjE0OTYsIDYxNTAxLCAzMTkyNCwgNjAwMywgMzE5MzgsIDYxNTA1LCA2MTUxNSwgCisgICAgNjE1MjAsIDYxNTMwLCA2MTU0NSwgNjE1NTEsIDYxNTU3LCAzMTk0OCwgNjE1NjIsIDMxMDk0LCA2MTU2NiwgNjE1NzEsIAorICAgIDYxNTc2LCA2MTU4MCwgNjE1ODUsIDE2OTUwLCA2MTU5MiwgNjE1OTcsIDYxNjAxLCA2MDQ0LCAzMTk3NCwgNjE2MDUsIAorICAgIDYxNjExLCAzMTIsIDYxNjIxLCA2MTYyOCwgNjE2MzUsIDYxNjQwLCA2MTY0OSwgNTg4MDYsIDYxNjU1LCA2MTY2MywgCisgICAgNjE2NjcsIDYxNjcxLCA2MTY3NSwgNjE2NzksIDYxNjg0LCA2MTY4OCwgNjE2OTQsIDYxNzAyLCA2MTcwNywgNjE3MTIsIAorICAgIDYxNzE2LCA2MTcyMSwgNjE3MjUsIDYxNzI5LCA2MTczNSwgNjE3NDEsIDYxNzQ2LCA2MTc1MCwgMzIwOTgsIDYxNzU1LCAKKyAgICAzMjEwNCwgMzIxMTAsIDYxNzYwLCA2MTc2NiwgNjE3NzMsIDYxNzc4LCA2MTc4MiwgMzExMTEsIDE2NjEyLCA2MTc4NSwgCisgICAgNjE3ODksIDYxNzk0LCA2MTgwMSwgNjE4MDcsIDYxODExLCA2MTgxNiwgMzg4MjgsIDYxODIyLCA2MTgyNiwgNjE4MzAsIAorICAgIDYxODM1LCA2MTg0MSwgNjE4NDcsIDYxODU5LCA2MTg2OCwgNjE4NzgsIDYxODg0LCA2MTg5MSwgNjE4OTYsIDYxOTAxLCAKKyAgICA2MTkwNSwgNjE5MDgsIDYxOTE0LCA2MTkyMSwgNjE5MjYsIDYxOTMxLCA2MTkzOCwgNjE5NDUsIDYxOTUxLCA2MTk1NiwgCisgICAgNjE5NjEsIDYxOTY5LCAzMjExNSwgMjQyMywgNjE5NzQsIDYxOTc5LCA2MTk4NSwgNjE5OTAsIDYxOTk2LCA2MjAwMSwgCisgICAgNjIwMDYsIDYyMDExLCA2MjAxNywgMzIxMzYsIDYyMDIyLCA2MjAyOCwgNjIwMzQsIDYyMDQwLCAzMjIwMCwgNjIwNDUsIAorICAgIDYyMDUwLCA2MjA1NSwgMzIyMTEsIDYyMDYwLCA2MjA2NSwgNjIwNzAsIDYyMDc2LCA2MjA4MiwgMzIyMTYsIDYyMDg3LCAKKyAgICA2MjA5MiwgNjIwOTcsIDMyMjcxLCAzMjI3NywgNjIxMDIsIDYyMTA3LCAzMjI4MiwgNjIxMTIsIDI3OTU4LCAzMjMwNCwgCisgICAgMzIzMDgsIDYyMTE3LCA2MjA5MywgNjIxMjEsIDYyMTI5LCA2MjEzNSwgNjIxNDMsIDYyMTUwLCA2MjE1NiwgNjIxNjYsIAorICAgIDYyMTcyLCA2MjE3OSwgMTA2MzEsIDMyMzIyLCA2MjE4NSwgNjIxOTgsIDYyMjA3LCA2MjIxMywgNjIyMjIsIDYyMjI4LCAKKyAgICAyMzUxMiwgNjIyMzUsIDYyMjQyLCA2MjI1MiwgMzIyNzIsIDYyMjU1LCA2MjI2MiwgNjIyNjcsIDYyMjcxLCA2MjI3NSwgCisgICAgNjIyODAsIDYxMjAsIDYyMjg0LCA2MjI4OSwgNjIyOTQsIDM0NzEwLCAzNDcxNSwgNjIyOTgsIDM0NzI5LCA2MjMwMywgCisgICAgMzQ3MzQsIDYyMzA4LCA2MjMxNCwgMzQ3NDYsIDM0NzUyLCAzNDc1OCwgNjIzMTksIDYyMzI1LCAyMjUzOSwgNjIzMzYsIAorICAgIDYyMzM5LCA2MjM1MSwgNjIzNTksIDMyMzQ1LCA2MjM2MywgNjIzNzIsIDYyMzgyLCA2MjM5MSwgMzIzNTUsIDYyMzk2LCAKKyAgICA2MjQwMywgNjI0MTIsIDYyNDE4LCA2MjQyNiwgNjI0MzMsIDYwOTUsIDQzOTcsIDYyNDM4LCAzMjI4MywgNjI0NDQsIAorICAgIDYyNDQ3LCA2MjQ1MywgNjI0NjAsIDYyNDY1LCA2MjQ3MCwgMjM0MjIsIDYyNDc0LCA2MjQ4MCwgNjI0ODYsIDYyNDkxLCAKKyAgICA2MjQ5NiwgNjI1MDAsIDYyNTA2LCA2MjUxMiwgMzM0ODMsIDg2MywgMzU3MjMsIDM2NjQ0LCAzNjY1MCwgMzIzOTEsIAorICAgIDYyNTE3LCA2MjUyMSwgNjI1MjUsIDYyNTI4LCA2MjU0MSwgNjI1NDcsIDYyNTUxLCA2MjU1NCwgNjI1NTksIDMzNzg2LCAKKyAgICA2MjU2MywgMzExMTYsIDIxMjg3LCA2MjU2OSwgNjAyNCwgNjAzMiwgOTA3NSwgNjI1NzIsIDYyNTc3LCA2MjU4MiwgNjI1ODcsIAorICAgIDYyNTkyLCA2MjU5NywgNjI2MDIsIDYyNjA3LCA2MjYxMiwgNjI2MTcsIDYyNjIzLCA2MjYyOCwgNjI2MzMsIDYyNjM5LCAKKyAgICA2MjY0NCwgNjI2NDksIDYyNjU0LCA2MjY1OSwgNjI2NjQsIDYyNjY5LCA2MjY3NSwgNjI2ODAsIDYyNjg2LCA2MjY5MSwgCisgICAgNjI2OTYsIDYyNzAxLCA2MjcwNiwgNjI3MTEsIDYyNzE2LCA2MjcyMSwgNjI3MjYsIDYyNzMxLCA2MjczNiwgNjI3NDIsIAorICAgIDYyNzQ3LCA2Mjc1MiwgNjI3NTcsIDYyNzYyLCA2Mjc2NywgNjI3NzIsIDYyNzc4LCA2Mjc4MywgNjI3ODgsIDYyNzkzLCAKKyAgICA2Mjc5OCwgNjI4MDMsIDYyODA4LCA2MjgxMywgNjI4MTgsIDYyODIzLCA2MjgyOSwgNjI4MzQsIDYyODM5LCA2Mjg0NCwgCisgICAgNjI4NDksIDYyODU1LCA2Mjg2MSwgNjI4NjYsIDYyODcyLCA2Mjg3NywgNjI4ODIsIDYyODg3LCA2Mjg5MiwgNjI4OTcsIAorICAgIDE1MTMsIDI0NSwgNjI5MDIsIDYyOTA2LCA2MjkxMCwgNjI5MTQsIDI1MTMzLCA2MjkxOCwgNjI5MjIsIDYyOTI3LCA2MjkzMSwgCisgICAgNjI5MzYsIDYyOTQwLCA2Mjk0NSwgNjI5NTAsIDYyOTU1LCA2Mjk1OSwgNjI5NjMsIDYyOTY4LCA2Mjk3MiwgMTMzNjksIAorICAgIDYyOTc3LCA2Mjk4MSwgNjI5ODgsIDYyOTk4LCAxNTIwNiwgNjMwMDcsIDYzMDE2LCA2MzAyMCwgNjMwMjUsIDYzMDMwLCAKKyAgICA2MzAzNCwgMjQ5MjQsIDMwMTksIDYzMDM4LCA2MzA0NCwgMTczNjMsIDYzMDQ4LCA2MzA1NywgNjMwNjUsIDYzMDcxLCAKKyAgICA2MzA4MywgNjMwOTUsIDYzMDk5LCA2MzEwNCwgNjMxMDgsIDYzMTE0LCA2MzEyMCwgNjMxMjUsIDYzMTM1LCA2MzE0NSwgCisgICAgNjMxNTEsIDYzMTU2LCA2MzE2MCwgNjMxNjUsIDYzMTcxLCA2MzE4MCwgNjMxODksIDYzMTk3LCAxNTU2MCwgNjMyMDEsIAorICAgIDYzMjEwLCA2MzIxOCwgNjMyMzAsIDYzMjQxLCA2MzI1MiwgNjMyNjEsIDYzMjY1LCA2MzI3NCwgNjMyODQsIDYzMjkyLCAKKyAgICA2MzI5OCwgNjMzMDMsIDYzMzA5LCA2MzMxNCwgOTgsIDMwOTI1LCA2MzMyNSwgMjYyNjYsIDI2Mjc2LCA2MzMzMSwgNjMzMzgsIAorICAgIDYzMzQ0LCA2MzM0OCwgNjMzNTgsIDYzMzY5LCA2MzM3NywgNjMzODYsIDYzMzkxLCA2MzM5NiwgNjM0MDAsIDE3MzE3LCAKKyAgICA2MzQwOCwgNjM0MTIsIDYzNDE4LCA2MzQyOCwgNjM0MzUsIDYzNDQxLCAzNDgwOSwgNjM0NDcsIDYzNDQ5LCA2MzQ1MiwgCisgICAgNjM0NTYsIDYzNDY2LCA2MzQ3MiwgNjM0NzksIDEzMzE1LCA2MzQ4NiwgNjM0OTIsIDYzNTAxLCA2MzUxMCwgNjM1MTYsIAorICAgIDYzNTIyLCA2MzUyOCwgNjM1MzMsIDYzNTQwLCA2MzU0NywgNjM1NTMsIDYzNTY2LCA2MzU3NSwgNjM1ODQsIDYzNTg5LCAKKyAgICA2MzU5MywgNjM1OTksIDYzNjA2LCA2MzYxMywgNjM2MjAsIDYzNjI3LCA2MzYzNCwgNjM2MzksIDYzNjQzLCA2MzY0NywgCisgICAgNjM2NTAsIDYzNjYwLCA2MzY2NCwgNjM2NzYsIDYzNjg1LCA2MzY4OSwgNjM2OTQsIDYzNjk4LCA2MzcwNCwgNjM3MDksIAorICAgIDYzNzE2LCA2MzcyNSwgNjM3MzMsIDYzNzQxLCA2Mzc0NiwgNjM3NTAsIDYzNzU1LCA2Mzc2MCwgNjM3NzAsIDYzNzc4LCAKKyAgICA2Mzc4MywgNjM3ODcsIDYzNzkxLCA2Mzc5NywgNjM4MDksIDYzODE3LCA2MzgyNywgNjM4MzQsIDYzODQwLCA2Mzg0NSwgCisgICAgNjM4NDksIDYzODUzLCA2Mzg1NywgNjM4NjYsIDYzODc1LCA2Mzg4NCwgNjM4OTAsIDYzODk2LCA2MzkwMiwgNjM5MDcsIAorICAgIDYzOTE0LCA2MzkyMCwgNjM5MjgsIDYzOTM1LCAxMjQ2MywgNjM5NDEsIDYzOTQ3LCA2Mzk1MSwgMTQyNDQsIDYzOTU1LCAKKyAgICA2Mzk2MCwgNjM5NzAsIDYzOTc5LCA2Mzk4NSwgNjM5OTEsIDYzOTk5LCA2NDAwNiwgNjQwMTAsIDY0MDE0LCA2NDAyMCwgCisgICAgNjQwMjgsIDY0MDM1LCA2NDA0MSwgNjQwNTIsIDY0MDU2LCA2NDA2MCwgNjQwNjQsIDY0MDY3LCA2NDA3MywgNjQwNzgsIAorICAgIDY0MDgyLCA2NDA4NiwgNjQwOTUsIDY0MTAzLCA2NDExMCwgNjQxMTYsIDY0MTIzLCAyNDA0NiwgMzg4NzAsIDY0MTI4LCAKKyAgICA2NDEzNiwgNjQxNDAsIDY0MTQ0LCA2NDE0NywgNjQxNTUsIDY0MTYyLCA2NDE2OCwgNjQxNzcsIDY0MTg1LCA2NDE5MSwgCisgICAgNjQxOTYsIDY0MjAwLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxOCwgNjQyMjcsIDY0MjMxLCA2NDIzOCwgNjQyNDUsIAorICAgIDY0MjUxLCA2NDI1OSwgNjQyNjUsIDY0Mjc2LCA2NDI4NCwgNjQyOTAsIDIyNjY5LCA2NDI5OSwgNjQzMDYsIDY0MzEzLCAKKyAgICA2NDMyMCwgNjQzMjcsIDY0MzM0LCA0MTkwNywgMTMxNTMsIDY0MzQxLCA2NDM0OCwgNjQzNTMsIDM0ODQ1LCA2MjE3LCAKKyAgICA2NDM1OSwgNjQzNjQsIDY0MzY5LCA2NDM3NSwgNjQzODEsIDY0Mzg3LCA2NDM5MiwgNjQzOTcsIDY0NDAyLCA2NDQwNywgCisgICAgNjQ0MTMsIDY0NDE4LCA2NDQyNCwgNjQ0MjksIDY0NDM1LCA2NDQ0MCwgNjQ0NDUsIDY0NDUwLCA2NDQ1NSwgNjQ0NjAsIAorICAgIDY0NDY1LCA2NDQ3MCwgNjQ0NzYsIDY0NDgxLCA2NDQ4NywgNjQ0OTIsIDY0NDk3LCA2NDUwMiwgNjQ1MDcsIDY0NTEyLCAKKyAgICA2NDUxNywgNjQ1MjMsIDY0NTI4LCA2NDUzMywgNjQ1MzgsIDY0NTQzLCA2NDU0OCwgNjQ1NTMsIDY0NTU4LCA2NDU2MywgCisgICAgNjQ1NjgsIDY0NTczLCA2NDU3OSwgNjQ1ODQsIDY0NTg5LCA2NDU5NCwgNjQ1OTksIDY0NjA0LCA2NDYwOSwgNjQ2MTQsIAorICAgIDY0NjE5LCA2NDYyNSwgNjQ2MzAsIDY0NjM1LCA2NDY0MCwgNjQ2NDUsIDY0NjUwLCA2NDY1NSwgNjQ2NjAsIDY0NjY1LCAKKyAgICA2NDY3MCwgNjQ2NzUsIDY0NjgwLCA2NDY4NSwgNjQ2OTEsIDE4MzQsIDIyNCwgMzc0NDYsIDY0Njk2LCA2NDY5OSwgNjQ3MDQsIAorICAgIDY0NzA4LCA2NDcxMSwgNjQ3MTYsIDYzNzM3LCA2NDcyNywgNjQ3MzcsIDY0NzQ0LCA2NDc2MCwgNjQ3NjksIDY0Nzc5LCAKKyAgICA2NDc4OSwgNjQ3OTcsIDY0ODExLCA2NDgxOSwgNjQ4MjMsIDY0ODI2LCA2NDgzMywgNjQ4MzksIDY0ODUwLCA2NDg2MiwgCisgICAgNjQ4NzMsIDY0ODgyLCA2NDg4OSwgMTI5NywgMjMzMTEsIDY0ODk5LCAyNTkwLCA2NDkwMywgNjQ5MTIsIDExMzgsIDE3MjkwLCAKKyAgICAzODA4MywgNjQ5MjAsIDY0OTI4LCA2NDk0MiwgNjQ5NTUsIDY0OTU5LCA2NDk2NCwgNjQ5NjksIDY0OTc0LCA2NDk4MCwgCisgICAgNjQ5ODYsIDY0OTkxLCA4NTM1LCA2NDk5NiwgNjUwMDAsIDY1MDA4LCAxMTA0OCwgNjUwMTMsIDY1MDE5LCA2NTAyOCwgCisgICAgMTcyMSwgMTEwNjAsIDczNiwgNjUwMzIsIDY1MDQxLCA2NTA1MSwgMjcwMzAsIDY1MDYwLCA2NTA2NiwgMTY4NjIsIDY1MDcyLCAKKyAgICA2NTA3NiwgMzk2NCwgMTEzOTEsIDY1MDgyLCA2NTA4OSwgNjA2OTMsIDY1MDkzLCA2NTA5NywgMzk4OCwgMTg5LCAxNDE1OSwgCisgICAgNjUxMDMsIDY1MTE1LCA2NTExOSwgNjUxMjUsIDI3NzUxLCA2NTEyOSwgMTEzNzksIDI3MzAsIDQsIDY1MTM0LCA2NTE0NCwgCisgICAgNjUxNTAsIDY1MTYxLCA2NTE2OCwgNjUxNzQsIDY1MTgwLCA2NTE4OCwgNjUxOTUsIDY1MjAxLCA2NTIxMSwgNjUyMjEsIAorICAgIDY1MjMxLCAyMzQ5OSwgMTMwOSwgNjUyNDAsIDY1MjQ0LCA2NTI0OCwgNjUyNTQsIDY1MjU4LCAyNzUzLCAyNzU5LCA4NTMyLCAKKyAgICAyMjY0LCA2NTI2MiwgNjUyNjYsIDY1Mjc1LCA2NTI4MywgNjUyOTQsIDY1MzAyLCA2NTMxMCwgNjUzMTYsIDY1MzIxLCAKKyAgICA2NTMzMiwgNjUzNDMsIDY1MzUxLCA2NTM1NywgOTY5NCwgNjUzNjIsIDY1MzcwLCA2NTM3NCwgNjUzNzgsIDY1MzgyLCAKKyAgICA2NTM5NCwgMjgxMzYsIDY1NDAxLCA2NTQxMSwgNjU0MTcsIDY1NDIzLCA5Nzk2LCA2NTQzMywgNjU0NDQsIDY1NDU0LCAKKyAgICA2NTQ2MywgNjU0NjcsIDY1NDc0LCAxMTQwLCAxMTcwLCA2NTQ4NCwgNjU0ODksIDY1NDk3LCA2NTUwNSwgNjU1MTYsIAorICAgIDY1NTIzLCA2NTUzNywgMTQwODgsIDM5MywgNjU1NDcsIDY1NTUxLCA2NTU1OSwgNjU1NjgsIDY1NTc2LCA2NTU4MiwgCisgICAgNjU1OTYsIDY1NjAzLCA2NTYwOSwgNjU2MTgsIDY1NjI1LCA2NTYzNSwgNjU2NDMsIDM4MTIsIDE1NiwgNjU2NTEsIDY1NjYyLCAKKyAgICA2NTY2NiwgNjU2NzgsIDI3OTQ5LCAxNjEsIDY1Njg0LCA2NTY4OSwgNjU2OTMsIDY1NzAwLCA2NTcwNiwgNjU3MTQsIAorICAgIDY1NzIxLCA4ODE4LCA2NTcyOCwgNjU3MzcsIDY1NzQ1LCAzODc4LCA2NTc1OCwgODE5OSwgNjU3NjIsIDI3OTgsIDQ0MywgCisgICAgNjU3NjcsIDY1NzgwLCA2NTc4NSwgMTgzMywgNjUwLCA2NTc4OSwgMzg5NSwgNjU3OTcsIDY1ODAzLCA2NTgwNywgOTMxLCAKKyAgICA2NTgxNywgNjU4MjYsIDY1ODMxLCAxNDkyOCwgMTQ5MzUsIDQ1MjY5LCA2NTgzNSwgMzgyMiwgMTMwNDEsIDY1ODQzLCAKKyAgICA2NTg1MCwgMjM1NTUsIDY1ODU0LCA2NTg2MSwgNjU4NjcsIDY1ODcyLCA2NTg3NywgMTQ5NDgsIDM3MiwgNjU4ODIsIAorICAgIDY1ODk0LCA2NTkwMCwgNjU5MDgsIDI4MTAsIDE3NTMsIDY1OTE2LCA2NTkxOCwgNjU5MjMsIDY1OTI4LCA2NTkzMywgCisgICAgNjU5MzksIDY1OTQ0LCA2NTk0OSwgNjU5NTQsIDY1OTU5LCA2NTk2NCwgNjU5NjksIDY1OTc1LCA2NTk4MCwgNjU5ODUsIAorICAgIDY1OTkwLCA2NTk5NSwgNjYwMDAsIDY2MDA1LCA2NjAxMCwgNjYwMTUsIDY2MDIxLCA2NjAyNiwgNjYwMzEsIDY2MDM2LCAKKyAgICA2NjA0MiwgNjYwNDcsIDY2MDUzLCA2NjA1OCwgNjYwNjMsIDY2MDY4LCA2NjA3MywgNjYwNzgsIDY2MDgzLCA2NjA4OCwgCisgICAgNjYwOTQsIDY2MDk5LCA2NjEwNSwgNjYxMTAsIDY2MTE1LCA2NjEyMCwgNjYxMjUsIDY2MTMwLCA2NjEzNSwgNjYxNDAsIAorICAgIDY2MTQ1LCA2NjE1MSwgNjYxNTYsIDY2MTYxLCA2NjE2NiwgNjYxNzAsIDY2MTc0LCA2NjE3OSwgNjYxODMsIDY2MTg4LCAKKyAgICA2NjE5MywgNjYxOTksIDY2MjA0LCA2NjIwOCwgNjYyMTMsIDY2MjE3LCA2NjIyMCwgNjYyMjIsIDY2MjI2LCA2NjIyOSwgCisgICAgNjYyMzQsIDY2MjM4LCA2NjI0MiwgNjYyNDYsIDY2MjUwLCA2NjI1OSwgNjYyNjMsIDMyNTQ5LCA2NjI2NiwgMzI1NTQsIAorICAgIDY2MjczLCA2NjI3OCwgMzI1NTksIDY2Mjg3LCA2NjI5NiwgMzI1NjUsIDY2MzAxLCAzMjU3MCwgNjYzMTAsIDY2MzE1LCAKKyAgICAxMTU3OCwgNjYzMTksIDY2MzI0LCA2NjMyOSwgMzI1NzUsIDY2MzMzLCA0MDIyNSwgNjYzMzcsIDY2MzQwLCA2NjM0NCwgCisgICAgODIxMSwgNjYzNTAsIDY2MzU1LCA2NjM1OSwgMzcwNSwgMzI1ODAsIDY2MzYyLCA2NjM2NiwgNjYzNjksIDY2Mzc0LCAKKyAgICA2NjM3OCwgNjYzODQsIDY2MzkyLCA2NjQwNSwgNjY0MTQsIDY2NDIwLCA2NjQyNSwgNjY0MzEsIDY2NDM1LCA2NjQ0MSwgCisgICAgNjY0NDksIDY2NDU0LCA2NjQ1OCwgNjY0NjUsIDY2NDcxLCA2NjQ3OSwgNjY0ODgsIDY2NDk2LCAzMjU4MywgNjY1MDMsIAorICAgIDY2NTEzLCA2NjUyMiwgNjY1MzUsIDY2NTQwLCA2NjU0NSwgNjY1NTQsIDY2NTYwLCA2NjU2NywgNjY1NzgsIDY2NTkwLCAKKyAgICA2NjU5NywgNjY2MDYsIDY2NjE1LCA2NjYyNCwgNjY2MzEsIDY2NjM3LCA2NjY0NCwgNjY2NTIsIDY2NjU5LCA2NjY2NywgCisgICAgNjY2NzYsIDY2Njg0LCA2NjY5MSwgNjY2OTksIDY2NzA4LCA2NjcxNiwgNjY3MjUsIDY2NzM1LCA2Njc0NCwgNjY3NTIsIAorICAgIDY2NzU5LCA2Njc2NywgNjY3NzYsIDY2Nzg0LCA2Njc5MywgNjY4MDMsIDY2ODEyLCA2NjgyMCwgNjY4MjksIDY2ODM5LCAKKyAgICA2Njg0OCwgNjY4NTgsIDY2ODY5LCA2Njg3OSwgNjY4ODgsIDY2ODk2LCA2NjkwMywgNjY5MTEsIDY2OTIwLCA2NjkyOCwgCisgICAgNjY5MzcsIDY2OTQ3LCA2Njk1NiwgNjY5NjQsIDY2OTczLCA2Njk4MywgNjY5OTIsIDY3MDAyLCA2NzAxMywgNjcwMjMsIAorICAgIDY3MDMyLCA2NzA0MCwgNjcwNDksIDY3MDU5LCA2NzA2OCwgNjcwNzgsIDY3MDg5LCA2NzA5OSwgNjcxMDgsIDY3MTE4LCAKKyAgICA2NzEyOSwgNjcxMzksIDY3MTUwLCA2NzE2MiwgNjcxNzMsIDY3MTgzLCA2NzE5MiwgNjcyMDAsIDY3MjA3LCA2NzIxNSwgCisgICAgNjcyMjQsIDY3MjMyLCA2NzI0MSwgNjcyNTEsIDY3MjYwLCA2NzI2OCwgNjcyNzcsIDY3Mjg3LCA2NzI5NiwgNjczMDYsIAorICAgIDY3MzE3LCA2NzMyNywgNjczMzYsIDY3MzQ0LCA2NzM1MywgNjczNjMsIDY3MzcyLCA2NzM4MiwgNjczOTMsIDY3NDAzLCAKKyAgICA2NzQxMiwgNjc0MjIsIDY3NDMzLCA2NzQ0MywgNjc0NTQsIDY3NDY2LCA2NzQ3NywgNjc0ODcsIDY3NDk2LCA2NzUwNCwgCisgICAgNjc1MTMsIDY3NTIzLCA2NzUzMiwgNjc1NDIsIDY3NTUzLCA2NzU2MywgNjc1NzIsIDY3NTgyLCA2NzU5MywgNjc2MDMsIAorICAgIDY3NjE0LCA2NzYyNiwgNjc2MzcsIDY3NjQ3LCA2NzY1NiwgNjc2NjYsIDY3Njc3LCA2NzY4NywgNjc2OTgsIDY3NzEwLCAKKyAgICA2NzcyMSwgNjc3MzEsIDY3NzQyLCA2Nzc1NCwgNjc3NjUsIDY3Nzc3LCA2Nzc5MCwgNjc4MDIsIDY3ODEzLCA2NzgyMywgCisgICAgNjc4MzIsIDY3ODQwLCA2Nzg0NywgNjc4NTUsIDY3ODY0LCA2Nzg3MiwgNjc4ODEsIDY3ODkxLCA2NzkwMCwgNjc5MDgsIAorICAgIDY3OTE3LCA2NzkyNywgNjc5MzYsIDY3OTQ2LCA2Nzk1NywgNjc5NjcsIDY3OTc2LCA2Nzk4NCwgNjc5OTMsIDY4MDAzLCAKKyAgICA2ODAxMiwgNjgwMjIsIDY4MDMzLCA2ODA0MywgNjgwNTIsIDY4MDYyLCA2ODA3MywgNjgwODMsIDY4MDk0LCA2ODEwNiwgCisgICAgNjgxMTcsIDY4MTI3LCA2ODEzNiwgNjgxNDQsIDY4MTUzLCA2ODE2MywgNjgxNzIsIDY4MTgyLCA2ODE5MywgNjgyMDMsIAorICAgIDY4MjEyLCA2ODIyMiwgNjgyMzMsIDY4MjQzLCA2ODI1NCwgNjgyNjYsIDY4Mjc3LCA2ODI4NywgNjgyOTYsIDY4MzA2LCAKKyAgICA2ODMxNywgNjgzMjcsIDY4MzM4LCA2ODM1MCwgNjgzNjEsIDY4MzcxLCA2ODM4MiwgNjgzOTQsIDY4NDA1LCA2ODQxNywgCisgICAgNjg0MzAsIDY4NDQyLCA2ODQ1MywgNjg0NjMsIDY4NDcyLCA2ODQ4MCwgNjg0ODksIDY4NDk5LCA2ODUwOCwgNjg1MTgsIAorICAgIDY4NTI5LCA2ODUzOSwgNjg1NDgsIDY4NTU4LCA2ODU2OSwgNjg1NzksIDY4NTkwLCA2ODYwMiwgNjg2MTMsIDY4NjIzLCAKKyAgICA2ODYzMiwgNjg2NDIsIDY4NjUzLCA2ODY2MywgNjg2NzQsIDY4Njg2LCA2ODY5NywgNjg3MDcsIDY4NzE4LCA2ODczMCwgCisgICAgNjg3NDEsIDY4NzUzLCA2ODc2NiwgNjg3NzgsIDY4Nzg5LCA2ODc5OSwgNjg4MDgsIDY4ODE4LCA2ODgyOSwgNjg4MzksIAorICAgIDY4ODUwLCA2ODg2MiwgNjg4NzMsIDY4ODgzLCA2ODg5NCwgNjg5MDYsIDY4OTE3LCA2ODkyOSwgNjg5NDIsIDY4OTU0LCAKKyAgICA2ODk2NSwgNjg5NzUsIDY4OTg2LCA2ODk5OCwgNjkwMDksIDY5MDIxLCA2OTAzNCwgNjkwNDYsIDY5MDU3LCA2OTA2OSwgCisgICAgNjkwODIsIDY5MDk0LCA2OTEwNywgNjkxMjEsIDY5MTM0LCA2OTE0NiwgNjkxNTcsIDY5MTY3LCA2OTE3NiwgNjkxODQsIAorICAgIDY5MTkxLCA2OTE5NiwgODA1OCwgNjkyMDMsIDMyNTkzLCA2OTIwOCwgNjkyMTMsIDMyNTk4LCA2OTIxOSwgMjA5MjksIAorICAgIDMyNjAzLCA2OTIyNCwgNjkyMzAsIDY5MjM4LCA2OTI0NCwgNjkyNTAsIDY5MjU3LCA2OTI2NCwgNjkyNjksIDY5MjczLCAKKyAgICA2OTI3NiwgNjkyODAsIDY5Mjg5LCA2OTI5NSwgNjkzMDcsIDY5MzE4LCA2OTMyMiwgMzA4MSwgODAzMywgNjkzMjcsIAorICAgIDY5MzMwLCA2OTMzMiwgNjkzMzYsIDY5MzQwLCA2OTM0NCwgNjkzNTAsIDY5MzU1LCAyNTk0NCwgNjkzNjAsIDY5MzY0LCAKKyAgICA2OTM2NywgNjkzNzIsIDY5Mzc2LCA2OTM4MywgNjkzODksIDY5MzkzLCA2MTcwLCA2OTM5NywgMzI2MjAsIDY5NDAyLCAKKyAgICA2OTQwOSwgNjk0MTgsIDY5NDI2LCA2OTQzNywgNjk0NDUsIDY5NDUzLCA2OTQ2MCwgNjk0NjcsIDY5NDczLCA2OTQ4NCwgCisgICAgMzI2MjUsIDY5NDg5LCA2OTUwMCwgNjk1MTIsIDY5NTIwLCA2OTUzMSwgNjk1NDAsIDY5NTUxLCA2OTU1NiwgNjk1NjQsIAorICAgIDI1NTYsIDY5NTY5LCAzNDI5NSwgNjk1ODIsIDY5NTg2LCA2OTU5OCwgNjk2MDYsIDY5NjExLCA2OTYxOSwgMTc0ODUsIAorICAgIDY5NjMwLCA2OTYzNiwgNjk2NDMsIDY5NjUxLCA2OTY1NywgMzI2MzUsIDY5NjYyLCAzOTE0LCA1ODI1NCwgNjk2NjksIAorICAgIDY5NjcyLCA2OTY4MCwgNjk2OTMsIDY5NzA2LCA2OTcxOSwgNjk3MzIsIDY5NzM5LCA2OTc1MCwgNjk3NTksIDQxNzI0LCAKKyAgICA0MTcyOSwgNjk3NjQsIDY5NzY4LCA2OTc3NiwgNjk3ODMsIDY5NzkyLCA2OTgwMCwgNjk4MDYsIDY5ODE1LCA2OTgyMywgCisgICAgNjk4MzEsIDY5ODM1LCA2OTg0NCwgNjk4NTMsIDY5ODYzLCA2OTg3NiwgNjk4ODksIDY5ODk5LCAzMjY0MCwgNjk5MDUsIAorICAgIDY5OTEyLCA2OTkxOCwgMzI2NDYsIDY5OTIzLCA2OTkyNiwgNjk5MzAsIDY5OTM4LCA2OTk0NywgNDE0NjIsIDY5OTU1LCAKKyAgICA2OTk2NCwgNjk5NzIsIDY5OTc5LCA2OTk4NywgNjk5OTcsIDcwMDA2LCA3MDAxNSwgNzAwMjQsIDcwMDMyLCA3MDA0MywgCisgICAgNzAwNTMsIDkzNjYsIDIxNTY3LCA3MDA2MiwgNzAwNjcsIDcwMDcyLCA3MDA3NiwgNzAwODAsIDcwMDg1LCA3MDA5MSwgCisgICAgNzAwOTYsIDcwMTAxLCA3MDEwNywgNzAxMTIsIDcwMTE3LCAyMTUzMiwgNzAxMjIsIDcwMTI5LCA3MDEzNywgNzAxNDUsIAorICAgIDcwMTUwLCA3MDE1NywgNzAxNjQsIDcwMTY5LCA3MDE3MywgNzAxNzcsIDcwMTg1LCA3MDE5MywgMzI2NjMsIDcwMTk5LCAKKyAgICA3MDIwNSwgNzAyMTcsIDcwMjIzLCA3MDIyNywgNzAyMzQsIDcwMjM5LCA3MDI1MCwgNzAyNjAsIDcwMjcwLCA3MDI4MiwgCisgICAgNzAyODgsIDcwMjk4LCA3MDMwOCwgMzI2OTAsIDcwMzE3LCA3MDMyNiwgNzAzMzIsIDcwMzQ0LCA3MDM1NSwgNzAzNjIsIAorICAgIDcwMzY3LCA3MDM3MSwgNzAzNzksIDcwMzg1LCA3MDM5MCwgNzAzOTUsIDcwNDAyLCA3MDQxMCwgNzA0MjIsIDcwNDMyLCAKKyAgICA3MDQ0MSwgNzA0NTAsIDcwNDU3LCAzNDE1NywgMjM4NTEsIDcwNDYzLCA3MDQ2OCwgNzA0NzIsIDcwNDc2LCA3MDQ4MSwgCisgICAgNzA0ODcsIDcwNDk4LCA3MDUxMSwgNzA1MTYsIDcwNTIzLCAzMjY5NSwgNzA1MjgsIDcwNTQwLCA3MDU0OSwgNzA1NTksIAorICAgIDcwNTcwLCA3MDU4MywgNzA1OTAsIDcwNTk5LCA3MDYwOCwgNzA2MTYsIDcwNjIxLCA3MDYyNywgMTA2OSwgNzA2MzIsIAorICAgIDcwNjM3LCA3MDY0MiwgNzA2NDcsIDcwNjUzLCA3MDY1OCwgNzA2NjMsIDcwNjY5LCA3MDY3NSwgNzA2ODAsIDcwNjg0LCAKKyAgICA3MDY4OSwgNzA2OTQsIDcwNjk5LCA1ODc2NiwgNzA3MDQsIDcwNzA5LCA3MDcxNCwgNzA3MTksIDcwNzI1LCA3MDczMSwgCisgICAgNzA3MzYsIDcwNzQwLCA3MDc0NSwgNzA3NTAsIDcwNzU1LCA3MDc2MSwgNzA3NjYsIDcwNzcyLCA3MDc3NywgNzA3ODIsIAorICAgIDcwNzg3LCA3MDc5MiwgNzA3OTYsIDcwODAyLCA3MDgwNywgNzA4MTYsIDcwODIxLCA3MDgyNiwgNzA4MzEsIDcwODM2LCAKKyAgICA3MDg0MCwgNzA4NDcsIDcwODUzLCAxNzEzNSwgMTcxNDIsIDcwODU4LCA3MDg2MiwgNzA4NjYsIDcwODcwLCA3MDg3NCwgCisgICAgNDU1MjQsIDcwODc4LCA3MDgwOCwgNzA4ODAsIDcwODkwLCAzMjcwNCwgNzA4OTMsIDcwOTAyLCA3MDkwOCwgNjE0MywgCisgICAgMzI3MDksIDcwOTEyLCA3MDkxOCwgNzA5MjMsIDcwOTI5LCA3MDkzNCwgNzA5MzgsIDcwOTQ1LCA3MDk1MCwgNzA5NjAsIAorICAgIDcwOTY5LCA3MDk3MywgNzA5NzksIDcwOTg1LCA3MDk5MSwgNzA5OTUsIDcxMDAzLCA3MTAxMCwgNzEwMTgsIDcxMDI2LCAKKyAgICAzMjcxNCwgNzEwMzMsIDcxMDM2LCA3MTA0MywgNzEwNDksIDcxMDU0LCA3MTA1OCwgNzEwNjQsIDcxMDcxLCA3MTA3NiwgCisgICAgNzEwODAsIDcxMDg5LCA3MTA5NywgNzExMDMsIDcxMTA4LCAzMjcxOSwgNzExMTUsIDcxMTIyLCA3MTEyOCwgNzExMzMsIAorICAgIDcxMTM5LCA3MTE0NiwgNzExNTIsIDIxMjk0LCAyNzQ1NSwgNzExNTgsIDcxMTYzLCA3MTE2OSwgNzExODEsIDcwODQxLCAKKyAgICA3MDg0OCwgMjE0NzAsIDcxMTkxLCA3MTE5NiwgNzEyMDMsIDcxMjA5LCA3MTIxNiwgNzEyMjIsIDcxMjMzLCA3MTIzOCwgCisgICAgOTExMCwgNzEyNDYsIDcxMjQ5LCA3MTI1NSwgNzEyNTksIDcxMjYzLCA3MTI2NiwgNzEyNzIsIDMyNDY4LCA2MTk0LCA5NjQsIAorICAgIDEzNDE5LCA3MTI3OSwgNzEyODUsIDcxMjkxLCA3MTI5NywgNzEzMDMsIDcxMzA5LCA3MTMxNSwgNzEzMjEsIDcxMzI3LCAKKyAgICA3MTMzMiwgNzEzMzcsIDcxMzQyLCA3MTM0NywgNzEzNTIsIDcxMzU3LCA3MTM2MiwgNzEzNjcsIDcxMzcyLCA3MTM3NywgCisgICAgNzEzODIsIDcxMzg3LCA3MTM5MiwgNzEzOTgsIDcxNDAzLCA3MTQwOCwgNzE0MTQsIDcxNDE5LCA3MTQyNCwgNzE0MzAsIAorICAgIDcxNDM2LCA3MTQ0MiwgNzE0NDgsIDcxNDU0LCA3MTQ2MCwgNzE0NjYsIDcxNDcyLCA3MTQ3OCwgNzE0ODMsIDcxNDg4LCAKKyAgICA3MTQ5NCwgNzE0OTksIDcxNTA0LCA3MTUxMCwgNzE1MTUsIDcxNTIwLCA3MTUyNSwgNzE1MzAsIDcxNTM1LCA3MTU0MCwgCisgICAgNzE1NDUsIDcxNTUwLCA3MTU1NSwgNzE1NjAsIDcxNTY1LCA3MTU3MCwgNzE1NzYsIDcxNTgxLCA3MTU4NiwgNzE1OTEsIAorICAgIDcxNTk3LCA3MTYwMiwgNzE2MDcsIDcxNjEyLCA3MTYxNywgNzE2MjMsIDcxNjI4LCA3MTYzMywgNzE2MzgsIDcxNjQzLCAKKyAgICA3MTY0OCwgNzE2NTMsIDcxNjU4LCA3MTY2MywgNzE2NjgsIDcxNjczLCA3MTY3OCwgNzE2ODMsIDcxNjg4LCA3MTY5MywgCisgICAgNzE2OTgsIDcxNzAzLCA3MTcwOCwgNzE3MTMsIDcxNzE4LCA3MTcyNCwgNzE3MjksIDcxNzM0LCA3MTczOSwgNzE3NDQsIAorICAgIDcxNzQ5LCA3MTc1NCwgNzE3NTksIDE4NjQsIDE0MiwgNzE3NjQsIDcxNzY4LCA3MTc3MiwgNzE3NzcsIDcxNzg1LCA3MTc4OSwgCisgICAgNzE3OTYsIDcxODA0LCA3MTgwOCwgNzE4MjEsIDcxODI5LCA3MTgzMywgNzE4MzYsIDcxODQxLCA3MTg0NSwgNzE4NTAsIAorICAgIDcxODU0LCA3MTg2MiwgNzE4NjYsIDIwOTM3LCA3MTg3MSwgNzE4NzUsIDYwOTY3LCA3MTg3OSwgNzE4ODIsIDcxODkwLCAKKyAgICA3MTg5OCwgNzE5MDYsIDcxOTExLCA3MTkxOCwgNzE5MjQsIDcxOTMwLCA3MTkzNSwgNzE5NDIsIDcxOTQ3LCA3MTk1NSwgCisgICAgNjQ5NDcsIDcxOTYyLCA3MTk2NywgNzE5NzIsIDcxOTc2LCAxMTY0NSwgNzE5ODAsIDcxOTg1LCA3MTk5MCwgNzE5OTQsIAorICAgIDcxOTk3LCA3MjAwMywgNzIwMDcsIDcyMDE3LCA3MjAyNiwgNzIwMjksIDcyMDMzLCA3MjA0MCwgNzIwNTMsIDcyMDU5LCAKKyAgICA3MjA2NywgNzIwNzgsIDcyMDg5LCA3MjEwMCwgNzIxMTEsIDcyMTIwLCA3MjEyNiwgNzIxMzUsIDcyMTQzLCA3MjE1MywgCisgICAgNzIxNjYsIDcyMTczLCA3MjE4NCwgNzIxOTAsIDcyMTk1LCA3MjIwMCwgNzIyMDYsIDcyMjEyLCA3MjIyMiwgNzIyMzEsIAorICAgIDcwNTMwLCA3MjIzOSwgNzIyNDUsIDcyMjUzLCA3MjI1OSwgNzIyNjcsIDcyMjcwLCA3MjI3NCwgNzIyNzgsIDcyMjgxLCAKKyAgICA3MjI4NywgNzIyOTMsIDcyMzAxLCA3MjMxMywgNzIzMjUsIDcyMzMyLCA3MjMzNiwgNzIzNDcsIDcyMzU1LCA3MjM2MiwgCisgICAgNzIzNzQsIDcyMzgyLCA3MjM5MCwgNzIzOTcsIDcyNDAzLCA3MjQxMywgNzI0MjIsIDcyNDI3LCA3MjQzNywgNzI0NDYsIAorICAgIDQwNzg4LCA3MjQ1MywgNzI0NTcsIDcyNDYyLCA3MjQ3MCwgNzI0NzcsIDcyNDgzLCA3MjQ4NywgNzI0OTcsIDcyNTA4LCAKKyAgICA3MjUxNiwgNzI1MjMsIDcyNTM1LCA3MjU0NywgNzI1NTYsIDY5NTcyLCA3MjU2MywgNzI1NzQsIDcyNTg4LCA3MjU5NiwgCisgICAgNzI2MDYsIDcyNjEzLCA3MjYyMSwgNzI2MzMsIDcyNjQyLCA3MjY1MCwgNzI2NjAsIDcyNjcxLCA3MjY4MywgNzI2OTIsIAorICAgIDcyNzAyLCA3MjcwOSwgNzI3MTgsIDcyNzMzLCA3Mjc0MSwgNzI3NTEsIDcyNzYwLCA3Mjc2OCwgNzI3ODEsIDcyNzk2LCAKKyAgICA3MjgwMCwgNzI4MDksIDcyODIxLCA3MjgzMiwgNzI4NDMsIDcyODU0LCA3Mjg2NCwgNzI4NzUsIDcyODgzLCA3Mjg4OSwgCisgICAgNzI4OTksIDcyOTA3LCA3MjkxMywgMjkwMjgsIDcyOTE4LCA3MjkyNCwgNzI5MjksIDcyOTM2LCA5NzA4LCAxNzUwNSwgCisgICAgNzI5NDIsIDcyOTUxLCA3Mjk1NiwgNzI5NjAsIDcyOTY3LCA3Mjk3MywgNzI5NzgsIDcyOTgzLCA3Mjk5MSwgNzI5OTksIAorICAgIDczMDAzLCA3MzAwNiwgNzMwMDksIDczMDExLCA3MzAxOCwgNzMwMjQsIDczMDM1LCA3MzA0MCwgNzMwNDQsIDczMDUxLCAKKyAgICA3MzA1NywgNzMwNjIsIDczMDcwLCA2NTQ0NiwgNjU0NTYsIDczMDc2LCA3MzA4MywgNzMwOTMsIDEwNjE4LCA3MzEwMCwgCisgICAgNzMxMDUsIDI5MjI0LCA3MzExNCwgNzMxMTksIDczMTI2LCA3MzEzNiwgNzMxNDQsIDczMTUyLCA3MzE2MSwgNzMxNjcsIAorICAgIDczMTczLCA3MzE4MCwgNzMxODcsIDczMTkyLCA3MzE5NiwgNzMyMDQsIDczMjA5LCA3MzIxNCwgNzMyMjIsIDczMjI5LCAKKyAgICA3MzIzNCwgNzMyNDAsIDczMjQzLCA3MzI0NywgNzMyNTYsIDcxODE2LCA3MzI2NSwgNzMyNjksIDczMjc1LCA3MzI4NiwgCisgICAgNzMyOTYsIDE3NTE0LCA3MzMwNywgNzMzMTUsIDE3NTI2LCA3MzMyMiwgNzMzMjYsIDczMzM1LCAyNzM0MSwgNzMzNDIsIAorICAgIDczMzQ2LCA3MzM1MSwgNzMzNjgsIDczMzgwLCAxMDU3NiwgNzMzOTIsIDczMzk3LCA3MzQwMiwgNzM0MDcsIDIxMDEwLCAKKyAgICA3MzQxMSwgNzM0MTYsIDczNDIxLCA3MzQyNywgNzM0MzIsIDU4NDYsIDIxMDE0LCA3MzQzNywgNzM0NDIsIDczNDQ4LCAKKyAgICA3MzQ1NSwgNzM0NjAsIDczNDY1LCA3MzQ3MSwgNzM0NzcsIDczNDgzLCA3MzQ4OCwgNzM0OTQsIDczNDk4LCA3MzUxMiwgCisgICAgNzM1MjAsIDczNTI4LCA3MzUzNCwgNzM1MzksIDczNTQ2LCA3MzU1NiwgNzM1NjUsIDczNTcwLCA3MzU3NSwgNzM1ODMsIAorICAgIDczNTg4LCA3MzU5NCwgNzM1OTksIDczNjA4LCA1OTgyMywgNzM2MTMsIDczNjE2LCA3MzYzNCwgNzM2NTMsIDczNjY2LCAKKyAgICA3MzY4MCwgNzM2OTYsIDczNzAzLCA3MzcxMCwgNzM3MTYsIDczNzIzLCA3MzcyOCwgNzM3MzQsIDczNzQwLCA3Mzc0OCwgCisgICAgNzM3NTQsIDczNzU5LCA3Mzc2NCwgNzM3ODAsIDEwNTg5LCA3Mzc5NCwgNzM4MDEsIDczODA5LCA3MzgxNSwgNzM4MTksIAorICAgIDczODIyLCA3MzgyNywgNzM4MzIsIDczODM5LCA3Mzg0NCwgNzM4NTMsIDczODU4LCA3Mzg2NCwgNzM4NzMsIDczODgyLCAKKyAgICA3Mzg4NywgNzM4OTEsIDczODk5LCA3MzkwOCwgMTE2NzQsIDczOTE3LCA3MzkyNSwgNzM5MzAsIDczOTM2LCAxMTY4NSwgCisgICAgNzM5NDEsIDczOTQ0LCA3Mzk0OSwgNzM5NTksIDczOTY4LCA3Mzk3MywgNzM5NzksIDczOTg0LCA3Mzk5MiwgNzM5OTksIAorICAgIDc0MDEwLCA3NDAyMCwgNzQwMjUsIDY0ODc1LCA3NDAzMCwgNzQwMzYsIDc0MDQxLCA3NDA0OCwgNzQwNTcsIDc0MDY1LCAKKyAgICA3NDA3MSwgNzQwNzcsIDc0MDg0LCA3NDA5MCwgNzQwOTQsIDE2OTYwLCAzMDU1LCA3NDA5OSwgNzQxMDMsIDc0MTA3LCAKKyAgICA3NDExMywgNzQxMjIsIDc0MTI4LCA3NDEzNSwgNzQxMzksIDc0MTYwLCA3NDE4MiwgNzQxOTgsIDc0MjE1LCA3NDIzNCwgCisgICAgNzQyNDMsIDc0MjUzLCA3NDI2MCwgNzQyNjcsIDI3MjI4LCA3NDI3MywgNzQyNzcsIDc0Mjg1LCA3NDI5NywgNzQzMDMsIAorICAgIDc0MzExLCA3NDMxNSwgNzQzMjMsIDc0MzMwLCA3NDMzNCwgNzQzNDAsIDc0MzQ2LCA3NDM1MSwgMzU2MywgNDE5MjQsIAorICAgIDc0MzU3LCA3NDM2MSwgNzQzNjUsIDc0MzY5LCA3NDM3NCwgNzQzNzksIDc0Mzg0LCA3NDM5MCwgNzQzOTYsIDc0NDAyLCAKKyAgICA3NDQwOSwgNzQ0MTUsIDc0NDIyLCA3NDQyOCwgNzQ0MzQsIDc0NDM5LCA3NDQ0NSwgNzQ0NTAsIDc0NDU0LCA3NDQ1OSwgCisgICAgNzQ0NjMsIDc0NDY4LCA0MTkzOSwgNzQ0NzIsIDc0NDc3LCA3NDQ4NSwgNzQ0ODksIDc0NDk0LCA3NDUwMSwgNzQ1MTAsIAorICAgIDc0NTE2LCA3NDUyMCwgNzQ1MjcsIDc0NTMxLCA3NDUzNCwgNzQ1NDEsIDc0NTUwLCA3NDU1NSwgNzQ1NTksIDc0NTY3LCAKKyAgICA3NDU3NiwgNzQ1ODAsIDc0NTg4LCA3NDU5NCwgNzQ1OTksIDc0NjA0LCA3NDYxMCwgNzQ2MTYsIDc0NjIxLCA3NDYyNSwgCisgICAgNzQ2MzEsIDc0NjM2LCA3NDY0MCwgNzQ2NDQsIDc0NjQ3LCA3NDY1MiwgNzQ2NjAsIDc0NjcwLCA3NDY3NSwgMzk0MTYsIAorICAgIDc0NjgzLCA3NDY5NSwgNzQ2OTksIDc0NzA1LCA3NDcxNywgNzQ3MjgsIDc0NzM1LCA3NDc0MSwgNzQ3NDgsIDc0NzYwLCAKKyAgICA3NDc2NywgNzQ3NzMsIDIxMDg4LCA3NDc3NywgNzQ3ODMsIDc0NzkwLCA3NDc5NiwgNzQ4MDIsIDc0ODA3LCA3NDgxMiwgCisgICAgNzQ4MTcsIDc0ODI2LCA3MDMzLCA3NDgzMSwgMTY0MjYsIDc0ODM3LCA3NDg0MSwgNzQ4NDUsIDc0ODQ5LCA3NDg1NywgCisgICAgNzQ4NjYsIDc0ODcwLCA3NDg3NywgNzQ4ODYsIDc0ODk5LCA3NDkwNSwgNzQ0NjQsIDMwMDg4LCA3NDkxMCwgNzQ5MTIsIAorICAgIDc0OTE3LCA3NDkyMiwgNzQ5MjcsIDc0OTMyLCA3NDkzNywgNzQ5NDIsIDc0OTQ3LCA3NDk1MiwgNzQ5NTcsIDc0OTYyLCAKKyAgICA3NDk2NywgNzQ5NzIsIDc0OTc3LCA3NDk4MiwgNzQ5ODgsIDc0OTkzLCA3NDk5OCwgNzUwMDMsIDc1MDA4LCA3NTAxMywgCisgICAgNzUwMTgsIDc1MDIzLCA3NTAyOCwgNzUwMzQsIDc1MDQwLCA3NTA0NiwgNzUwNTEsIDc1MDU2LCA3NTA2OCwgNzUwNzMsIAorICAgIDE4NzAsIDQ2LCA3NTA3OCwgNzUwODMsIDMyNzQ2LCA3NTA4NywgMzI3NTEsIDMyNzU2LCAzMjc2MiwgMzI3NjcsIDc1MDkxLCAKKyAgICAzMjc3MiwgMjIwODMsIDc1MTEzLCA3NTExNywgNzUxMjEsIDc1MTI2LCA3NTEzMCwgMzI3NzYsIDc1MTM0LCA3NTE0MiwgCisgICAgMzI3ODEsIDc1MTQ5LCA3NTE1MiwgNzUxNTcsIDc1MTYxLCA5NTQzLCA3NTE3MCwgMzI3ODYsIDIxOTQ1LCA3NTE3MywgCisgICAgNzUxNzcsIDE0MjgsIDc1MTgyLCAzMjc5NywgNzUxODUsIDc1MTkwLCAyNTczNywgMjU3NDcsIDM1MjU4LCA3NTE5NSwgCisgICAgNzUyMDAsIDc1MjA1LCA3NTIxMCwgNzUyMTYsIDc1MjIxLCA3NTIzMCwgNzUyMzUsIDc1MjQyLCA3NTI0OCwgNzUyNTMsIAorICAgIDc1MjU4LCA3NTI2MywgNzUyNzMsIDc1MjgyLCA3NTI4NywgNzUyOTUsIDc1Mjk5LCA3NTMwNywgMzI2MTEsIDM3MzE3LCAKKyAgICA3NTMxNCwgNzUzMjAsIDc1MzI1LCA3NTMzMCwgMTIwMTYsIDc1MzM1LCA3NTM0MSwgNzUzNDYsIDc1MzUzLCA3NTM1OSwgCisgICAgNzUzNjQsIDc1MzcyLCA3NTM4MiwgNzUzOTIsIDc1Mzk4LCA3NTQwMywgNzU0MDksIDE3NTM2LCA3NTQxNiwgMzYwNzMsIAorICAgIDc1NDI5LCA3NTQzNCwgNzU0NDAsIDMwOTkzLCA3NTQ1MywgNzU0NTksIDc1NDYzLCA3NTQ3MiwgNzU0NzksIDc1NDg1LCAKKyAgICA3NTQ5MywgNzU1MDIsIDc1NTA5LCA3NTUxNSwgNzU1MTgsIDc1NTIyLCAyNTg3OCwgNzU1MjYsIDc1NTMzLCA3NTUzOSwgCisgICAgNzU1NDcsIDc1NTUyLCAyMzk5NCwgNzU1NTgsIDc1NTYxLCA3NTU2OSwgNzU1NzcsIDc1NTkxLCA3NTU5OCwgNzU2MDQsIAorICAgIDc1NjExLCA3NTYxNywgMzI4MTEsIDc1NjIxLCA3NTYyOCwgNzU2MzYsIDc1NjQ0LCA3NTY1MCwgMzI4MTYsIDc1NjU4LCAKKyAgICA3NTY2NCwgNzU2NjksIDc1Njc5LCA3NTY4NSwgNzU2OTQsIDMwODMwLCAzNDcxNiwgNzU3MDIsIDc1NzA3LCA3NTcxMiwgCisgICAgNzU3MTYsIDc1NzIxLCA3NTcyNSwgNzU3MzMsIDE0OTIwLCAzOTQyOSwgNzU3MzgsIDc1NzQzLCAzMjgyMSwgNjIyNjksIAorICAgIDc1NzQ3LCA3NTc1MiwgNzU3NTYsIDc1NzY1LCA3NTc3MywgNzU3NzksIDc1Nzg0LCA3NTc5MCwgNzU3OTcsIDc1ODAzLCAKKyAgICA3NTgwOCwgNzU4MTMsIDc1ODIyLCA3NTgzNCwgNzU4NDksIDMzMDgzLCA3NTg1NSwgMTY1NDUsIDMyODI1LCA3NTg1OSwgCisgICAgNzU4NjYsIDI0MTA0LCA3NTg3MiwgNzU4NzksIDc1ODg4LCA3NTg5NSwgNzU5MDQsIDc1OTEwLCA3NTkxNSwgNzU5MjMsIAorICAgIDc1OTI5LCAzMjgzNSwgNzU5MzQsIDc1OTQzLCA3NDcyMywgNzU5NTIsIDc1OTU5LCA3NTk2NSwgNzU5NzEsIDc1OTgxLCAKKyAgICA3NTk4OSwgNzU5OTYsIDc2MDAwLCAzMjg0MCwgNzYwMDMsIDMyODQ2LCAzMjg1MiwgNzYwMDgsIDc2MDE2LCA3NjAyNCwgCisgICAgNzYwMzQsIDc2MDQzLCA3NjA1MSwgNzYwNTgsIDc2MDY4LCAzMjg1NywgNzYwNzIsIDc2MDc0LCA3NjA3OCwgNzYwODMsIAorICAgIDc2MDg3LCA3NjA5MSwgNzYwOTcsIDc2MTAyLCA3NjEwNiwgNzYxMTcsIDc2MTIyLCA3NjEyNywgMzA2MCwgNzYxMzEsIAorICAgIDc2MTM4LCA3NjE0MiwgNzYxNTEsIDc2MTU5LCA3NjE2NiwgNzYxNzEsIDc2MTc2LCA2MjMxNSwgNzYxODAsIDc2MTgzLCAKKyAgICA3NjE4OSwgNzYxOTcsIDc2MjAzLCA3NjIwNywgNzYyMTIsIDc2MjE5LCA3NjIyNCwgNzYyMzAsIDM0NzQ3LCA3NjIzNSwgCisgICAgNzYyMzgsIDc2MjQzLCA3NjI0NywgNzYyNTIsIDc2MjU3LCA3NjI2MSwgNzYyNjksIDc2MjczLCAyNTc1NiwgMjU3NjUsIAorICAgIDc2Mjc5LCA3NjI4NSwgNzYyOTEsIDc2Mjk2LCA3NjMwMCwgNzYzMDMsIDc2MzEzLCA3NjMyMiwgNzYzMjcsIDc2MzMzLCAKKyAgICA3NjM0MCwgNzYzNDYsIDc2MzUwLCA3NjM1OCwgNzYzNjMsIDM0NzUzLCA3NjM2NywgNzYzNzUsIDc2MzgxLCA3NjM4OCwgCisgICAgNzYzOTMsIDc2Mzk3LCA3NjQwMiwgNTg0NDAsIDM0NzU5LCA3NjQwOCwgNzY0MTMsIDc2NDE3LCA3NjQyMiwgNzY0MjcsIAorICAgIDc2NDMyLCA3NjQzNiwgNzY0NDEsIDc2NDQ2LCA3NjQ1MiwgNzY0NTcsIDc2NDYyLCA3NjQ2OCwgNzY0NzQsIDc2NDc5LCAKKyAgICA3NjQ4MywgNzY0ODgsIDc2NDkzLCA3NjQ5OCwgNzY1MDIsIDI0MTAzLCA3NjUwNywgNzY1MTIsIDc2NTE4LCA3NjUyNCwgCisgICAgNzY1MzAsIDc2NTM1LCA3NjUzOSwgNzY1NDQsIDc2NTQ5LCA3NjU1NCwgNzY1NTgsIDc2NTYzLCA3NjU2OCwgNzY1NzMsIAorICAgIDc2NTc4LCA3NjU4MiwgMzI4NjUsIDc2NTkwLCA3NjU5NCwgNzY2MDIsIDc2NjEwLCA3NjYyMSwgNzY2MjYsIDc2NjMwLCAKKyAgICAyMjM5NywgNzY2MzUsIDc2NjQxLCA3NjY1MSwgNzY2NTgsIDc2NjYzLCA3NjY3MiwgNzY2NzcsIDc2NjgxLCA3NjY4NiwgCisgICAgNzY2OTQsIDc2NzAyLCA3NjcwOSwgNjUxMDksIDc2NzE1LCA3NjcyMywgNzY3MzAsIDc2NzQxLCA3Njc0NywgNzY3NTEsIAorICAgIDc2NzU3LCAzMjg3NSwgNzY3NjAsIDc2NzY3LCA3Njc3NSwgNzY3ODAsIDM5NjIwLCA3Njc4NCwgNzY3ODksIDc2Nzk2LCAKKyAgICA3NjgwMSwgODk5MiwgNzY4MDUsIDc2ODEzLCA3NjgyMCwgNzY4MjcsIDc2ODMzLCA3Njg0NywgNjMzODEsIDc2ODU1LCAKKyAgICA3Njg2MSwgNzY4NjUsIDc2ODY4LCA3Njg3NiwgNzY4ODMsIDc2ODg4LCA3NjkwMSwgNzY5MDgsIDc2OTEyLCA3NjkxOSwgCisgICAgNzY5MjQsIDYwODYwLCA3NjkyOSwgNzY5MzIsIDc2OTM5LCA3Njk0NSwgNzY5NDksIDc2OTU3LCA3Njk2NiwgNzY5NzYsIAorICAgIDc2OTg2LCA3Njk5NSwgNzcwMDMsIDc3MDE0LCA3NzAxOSwgNzcwMjMsIDc3MDI4LCA3NzAzMiwgMzUzODksIDc3MDQwLCAKKyAgICAyMTM1NywgMzUzOTgsIDc3MDQ1LCA3NzA1MCwgNzcwNTUsIDc3MDYwLCA3NzA2NSwgNzcwNzAsIDc3MDc1LCA3NzA3OSwgCisgICAgNzcwODQsIDc3MDg5LCA3NzA5NCwgNzcwOTksIDc3MTA0LCA3NzEwOSwgNzcxMTMsIDc3MTE4LCA3NzEyMywgNzcxMjcsIAorICAgIDc3MTMxLCA3NzEzNSwgNzcxMzksIDc3MTQ0LCA3NzE0OSwgNzcxNTMsIDc3MTU4LCA3NzE2MiwgNzcxNjYsIDc3MTcxLCAKKyAgICA3NzE3NiwgNzcxODEsIDc3MTg2LCA3NzE5MCwgNzcxOTUsIDc3MjAwLCA3NzIwNCwgNzcyMDksIDc3MjE0LCA3NzIxOSwgCisgICAgNzcyMjQsIDc3MjI5LCA3NzIzNCwgNzcyMzksIDc3MjQ0LCA3NzI0OSwgNzcyNTQsIDc3MjU5LCA3NzI2NCwgNzcyNjksIAorICAgIDc3Mjc0LCA3NzI3OSwgNzcyODQsIDc3Mjg5LCA3NzI5NCwgNzcyOTksIDc3MzA0LCA3NzMwOCwgNzczMTMsIDc3MzE4LCAKKyAgICA3NzMyMywgNzczMjgsIDc3MzMzLCA3NzMzOCwgNzczNDMsIDc3MzQ4LCA3NzM1MywgNzczNTgsIDc3MzYzLCA3NzM2NywgCisgICAgNzczNzIsIDc3Mzc2LCA3NzM4MSwgNzczODYsIDc3MzkxLCA3NzM5NiwgNzc0MDEsIDc3NDA2LCA3NzQxMSwgNzc0MTYsIAorICAgIDc3NDIxLCA3NzQyNSwgNzc0MjksIDc3NDM0LCA3NzQzOSwgNzc0NDMsIDc3NDQ4LCA3NzQ1MywgNzc0NTcsIDc3NDYyLCAKKyAgICA3NzQ2NywgNzc0NzIsIDc3NDc3LCA3NzQ4MSwgNzc0ODYsIDc3NDkxLCA3NzQ5NSwgNzc1MDAsIDc3NTA0LCA3NzUwOCwgCisgICAgNzc1MTIsIDc3NTE2LCA3NzUyMSwgNzc1MjUsIDc3NTI5LCA3NzUzMywgNzc1MzcsIDc3NTQxLCA3NzU0NSwgNzc1NDksIAorICAgIDc3NTUzLCA3NzU1NywgNzc1NjIsIDc3NTY3LCA3NzU3MiwgNzc1NzcsIDc3NTgyLCA3NzU4NywgNzc1OTIsIDc3NTk3LCAKKyAgICA3NzYwMiwgNzc2MDcsIDc3NjExLCA3NzYxNSwgNzc2MTksIDc3NjIzLCA3NzYyNywgNzc2MzEsIDc3NjM2LCA3NzY0MCwgCisgICAgNzc2NDUsIDc3NjQ5LCA3NzY1NCwgNzc2NTksIDc3NjYzLCA3NzY2NywgNzc2NzIsIDc3Njc2LCA3NzY4MCwgNzc2ODQsIAorICAgIDc3Njg4LCA3NzY5MiwgNzc2OTYsIDc3NzAwLCA3NzcwNCwgNzc3MDgsIDc3NzEyLCA3NzcxNiwgNzc3MjAsIDc3NzI0LCAKKyAgICA3NzcyOCwgNzc3MzMsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NywgCisgICAgNzc3NzEsIDc3Nzc1LCA3Nzc3OSwgNzc3ODMsIDc3Nzg3LCA3Nzc5MSwgNzc3OTYsIDc3ODAwLCA3NzgwNSwgNzc4MDksIAogICAgIDc3ODEzLCA3NzgxNywgNzc4MjEsIDc3ODI1LCA3NzgyOSwgNzc4MzMsIDc3ODM3LCA3Nzg0MSwgNzc4NDUsIDc3ODQ5LCAKLSAgICA3Nzg1MywgNzc4NTcsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc1LCA3Nzg4MCwgNzc4ODQsIDc3ODg4LCA3Nzg5MiwgCi0gICAgNzc4OTYsIDc3OTAwLCA3NzkwNCwgNzc5MDgsIDc3OTEyLCA3NzkxNywgNzc5MjEsIDc3OTI2LCA3NzkzMCwgNzc5MzUsIAotICAgIDc3OTM5LCA3Nzk0NCwgNzc5NDgsIDc3OTU0LCA3Nzk1OSwgNzc5NjMsIDc3OTY4LCA3Nzk3MiwgNzc5NzcsIDc3OTgxLCAKLSAgICA3Nzk4NiwgNzc5OTAsIDc3OTk1LCAxNTIxLCA3Nzk5OSwgMjgyNCwgMTc1OSwgMTc2NCwgNzgwMDMsIDc4MDA3LCAyODI4LCAKLSAgICA3ODAxMSwgMTM5NywgNzgwMTYsIDEzNDIsIDc4MDIwLCAyODQwLCA3ODAyNCwgNzgwMzEsIDc4MDM4LCA3ODA1MiwgMjg0NCwgCi0gICAgNzEzMSwgNzgwNjEsIDc4MDY5LCA3ODA3NiwgNzgwODcsIDc4MDk2LCA3ODEwMywgNzgxMTUsIDc4MTI4LCA3ODE0MSwgCi0gICAgNzgxNTIsIDc4MTU3LCA3ODE2NCwgNzgxNzYsIDc4MTgwLCAyODQ4LCAxMTc0MCwgNzgxOTAsIDc4MTk1LCA3ODIwNCwgCi0gICAgNzgyMTQsIDI4NTIsIDc4MjE5LCA3ODIyMywgNzgyMjgsIDc4MjM1LCA3ODI0MSwgNzgyNDksIDc4MjYxLCAxMzQ3LCAKLSAgICAxMzAzNSwgNzgyNzEsIDc4Mjc1LCA3ODI4MSwgNzgyOTUsIDc4MzA3LCA3ODMxOSwgNzgzMjksIDc4MzM4LCA3ODM0NywgCi0gICAgNzgzNTYsIDc4MzY0LCA3ODM3NSwgNzgzODMsIDQwNTEsIDc4MzkzLCA3ODQwNCwgNzg0MTMsIDc4NDE5LCA3ODQzNCwgCi0gICAgNzg0NDEsIDc4NDQ3LCAzNTQ4OSwgNzg0NTIsIDI4NzYsIDEzMDM5LCA3ODQ1NiwgNzg0NjMsIDg5MzAsIDc4NDcyLCAyODgxLCAKLSAgICAzMjMzNiwgNzg0NzgsIDYwNTcyLCA3ODQ4NSwgNzg0OTEsIDc4NTAyLCA3ODUwOCwgNzg1MTUsIDc4NTIxLCA3ODUyOSwgCi0gICAgNzg1MzYsIDc4NTQyLCA3ODU1MiwgNzg1NjEsIDc4NTcyLCA3ODU3OSwgNzg1ODUsIDc4NTk1LCA3ODYwMywgNzg2MDksIAotICAgIDc4NjI0LCA3ODYzMCwgNzg2MzUsIDc4NjQyLCA3ODY0NSwgNzg2NTEsIDc4NjU4LCA3ODY2NCwgNzg2NzIsIDc4NjgxLCAKLSAgICA3ODY4OSwgNzg2OTUsIDc4NzA0LCA0MTQyNywgNzg3MTgsIDc4NzIzLCA3ODcyOSwgMTQ3NDQsIDc4NzM0LCA3ODc0NywgCi0gICAgNzg3NTYsIDc4NzY0LCA3ODc3MSwgNzg3NzUsIDc4Nzc5LCA3ODc4MiwgNzg3ODksIDc4Nzk2LCA3ODgwNCwgNzg4MTIsIAotICAgIDc4ODIxLCA3ODgyOSwgMTQ2NzEsIDc4ODM3LCA3ODg0MiwgNzg4NDYsIDc4ODU4LCA3ODg2NSwgNzg4NzQsIDc0OCwgCi0gICAgNzg4ODQsIDc4ODkzLCA3ODkwNCwgMjg5NywgNzg5MDgsIDc4OTEyLCA3ODkxOCwgNzg5MzEsIDc4OTQzLCA3ODk1MywgCi0gICAgNzg5NjIsIDc4OTc0LCAyNjM1MiwgNzg5ODUsIDc4OTkzLCA3OTAwMiwgNzkwMTMsIDc5MDI0LCA3OTAzNCwgNzkwNDQsIAotICAgIDc5MDUzLCA3OTA2MSwgMTEzMDUsIDc5MDY4LCA3OTA3MiwgNzkwNzUsIDc5MDgwLCA3OTA4NSwgNzkwODksIDc5MDk1LCAKLSAgICAxMzUyLCAxMTgxMSwgNzkxMDIsIDc5MTEzLCA3OTEyMiwgNzkxMzAsIDc5MTM5LCA3OTE0NywgNzkxNjMsIDc5MTc0LCAKLSAgICA3OTE4MywgNzkxOTEsIDc5MjAzLCA3OTIxNCwgNzkyMzAsIDc5MjQwLCA3OTI2MSwgNzkyNzQsIDc5MjgyLCA3OTI4OSwgCi0gICAgMTQ4NTUsIDc5MzAyLCA3OTMwNywgNzkzMTMsIDU5MDgsIDc5MzE5LCA3OTMyMiwgNzkzMjksIDc5MzM5LCA4MTc2LCAKLSAgICA3OTM0NiwgNzkzNTEsIDc5MzU2LCA3OTM2MSwgNzkzNjksIDc5Mzc4LCA3OTM4NiwgOTc0OSwgOTc1OCwgNzkzOTEsIAotICAgIDc5NDAyLCA3OTQwNywgNzk0MTMsIDI5MTMsIDI5MTgsIDc5NDE5LCAxMDg3MiwgNzk0MjUsIDc5NDMyLCA3OTQzOSwgCi0gICAgNzk0NTIsIDIyNTEsIDY4LCA3OTQ1NywgNzk0NjIsIDc5NDcyLCA3OTQ3OCwgNzk0ODcsIDc5NDk1LCA3OTUwNSwgNzk1MDksIAotICAgIDc5NTE0LCA3OTUxOCwgNzk1MzAsIDI5NDEsIDc5NTM4LCA3OTU0NiwgNzk1NTEsIDc5NTYyLCA3OTU3MywgNzk1ODIsIAotICAgIDc5NTg3LCA3OTU5MywgNzk1OTgsIDc5NjA4LCA3OTYxOCwgNzk2MjMsIDc5NjI5LCA3OTYzNCwgNzk2NDMsIDIxMzk3LCAKLSAgICA3OTY0NywgNDEyOCwgMjAsIDc5NjUyLCA3OTY2MSwgNzk2NjgsIDc5Njc1LCA3OTY4MSwgNzk2ODcsIDg2NCwgNzk2OTIsIAotICAgIDc5Njk3LCA2MDkwMCwgNzk3MDIsIDc5NzA3LCA3OTcxMywgNzk3MTksIDc5NzI3LCA3OTczMiwgNzk3MzksIDc5NzQ1LCAKLSAgICA3OTc1MCwgMzgwMDEsIDQxMzIxLCA3OTc1NiwgMjk0NSwgMzIsIDc5NzY2LCA3OTc3OSwgNzk3ODQsIDc5NzkyLCA3OTc5NywgCi0gICAgNzk4MDMsIDI5NjcsIDI4Mjg5LCA3OTgwOCwgNzk4MTYsIDc5ODIzLCA3OTgyOCwgNTg2NDUsIDYxOTAzLCA3OTgzNywgCi0gICAgNzk4NDEsIDE3MDQsIDE4MTMsIDc5ODQ2LCA3OTg1MSwgNzk4NTgsIDE4MTcsIDI0NywgNzk4NjUsIDc5ODcxLCAyOTg5LCAKLSAgICA3OTg3NiwgNzk4ODEsIDc5ODg4LCAxODIxLCA3OTg5MywgNzk4OTksIDc5OTA0LCA3OTkxNiwgNjExOSwgNzk5MjYsIDE4MjgsIAotICAgIDc5OTMyLCA3OTkzNywgNzk5NDQsIDc5OTUxLCA3OTk2NiwgNzk5NzMsIDc5OTg0LCA3OTk5MiwgMjYxOCwgNzk5OTYsIAotICAgIDgwMDA4LCA4MDAxMywgODAwMTcsIDgwMDIzLCAyODExNCwgMjI1NiwgODAwMjcsIDgwMDM4LCA4MDA0MiwgODAwNDYsIAotICAgIDgwMDUyLCA4MDA1NiwgODAwNjUsIDgwMDY5LCA4MDA4MCwgODAwODQsIDIzMDIsIDMyMTY1LCA4MDA4OCwgODAwOTgsIAotICAgIDMwODAsIDkzNjQsIDgwMTA2LCA4MDExMSwgODAxMTUsIDgwMTI0LCA4MDEzMSwgODAxMzcsIDMwNTAsIDE3MTM5LCA4MDE0MSwgCi0gICAgODAxNTQsIDgwMTcyLCA4MDE3NywgODAxODUsIDgwMTkzLCA4MDIwMywgOTk3OCwgMTMxNDcsIDgwMjE1LCA4MDIyOCwgCi0gICAgODAyMzUsIDgwMjQyLCA4MDI1OCwgODAyNjUsIDgwMjcxLCAxMDk1LCA4MDI3OCwgODAyODUsIDgwMjk1LCA4MDMwNCwgCi0gICAgODAzMTYsIDQyMjkxLCA4MDMyNCwgMzA2NCwgMTIwMjMsIDgwMzI3LCA4MDMzNSwgODAzMzksIDc4MjMxLCAzMDY4LCAKLSAgICA4MDM0MywgMjExNzgsIDEyMDM5LCAzNzU2LCA4MDM0NywgMzA3NCwgODAzNTEsIDgwMzYxLCA4MDM2NywgODAzNzMsIAotICAgIDgwMzc5LCA4MDM4NSwgODAzOTEsIDgwMzk3LCA4MDQwMywgODA0MDksIDgwNDE1LCA4MDQyMSwgODA0MjcsIDgwNDMzLCAKLSAgICA4MDQzOSwgODA0NDUsIDgwNDUxLCA4MDQ1NywgODA0NjMsIDgwNDY5LCA4MDQ3NSwgODA0ODEsIDgwNDg3LCA4MDQ5MywgCi0gICAgODA0OTksIDgwNTA1LCA4MDUxMSwgODA1MTgsIDgwNTI1LCA4MDUzMSwgODA1MzcsIDgwNTQzLCA4MDU0OSwgODA1NTUsIAotICAgIDgwNTYxLCAxMzU3LCAxNjA0OSwgMTIwNjEsIDgwNTY3LCA4MDU3MiwgODA1NzcsIDgwNTgyLCA4MDU4NywgODA1OTIsIAotICAgIDgwNTk3LCA4MDYwMiwgODA2MDcsIDgwNjEyLCA4MDYxNywgODA2MjIsIDgwNjI3LCA4MDYzMiwgODA2MzcsIDgwNjQyLCAKLSAgICA4MDY0NywgODA2NTIsIDgwNjU3LCA4MDY2MiwgODA2NjcsIDgwNjcyLCA4MDY3NywgODA2ODIsIDgwNjg3LCA4MDY5MiwgCi0gICAgODA2OTgsIDgwNzAzLCA4MDcwOCwgODA3MTQsIDgwNzE5LCA4MDcyNSwgODA3MzAsIDgwNzM1LCA4MDc0MSwgODA3NDYsIAotICAgIDgwNzUxLCA4MDc1NiwgODA3NjEsIDgwNzY2LCA4MDc3MSwgODA3NzYsIDgwNzgxLCA4MDM2MiwgODAzNjgsIDgwMzc0LCAKLSAgICA4MDM4MCwgODAzODYsIDgwMzkyLCA4MDM5OCwgODA0MDQsIDgwNDEwLCA4MDQxNiwgODA0MjIsIDgwNDI4LCA4MDQzNCwgCi0gICAgODA0NDAsIDgwNDQ2LCA4MDc4NywgODA0NTIsIDgwNDU4LCA4MDQ2NCwgODA3OTMsIDgwNDcwLCA4MDQ3NiwgODA0ODIsIAotICAgIDgwNDg4LCA4MDQ5NCwgODA1MDAsIDgwNTA2LCA4MDUyNiwgODA3OTksIDgwODA1LCA4MDUzMiwgODA4MTEsIDgwNTM4LCAKLSAgICA4MDU0NCwgODA1NTAsIDgwNTU2LCA4MDU2MiwgMzA5MSwgMzA5NiwgODA4MTcsIDgwODIyLCA4MDgyNSwgODA4MzEsIAotICAgIDgwODM3LCA4MDg0NCwgODA4NDksIDgwODU0LCAyMzA3LCAKKyAgICA3Nzg1NCwgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgNzc4ODIsIDc3ODg2LCA3Nzg5MCwgCisgICAgNzc4OTQsIDc3ODk4LCA3NzkwMywgNzc5MDcsIDc3OTExLCA3NzkxNiwgNzc5MjEsIDc3OTI1LCA3NzkyOSwgNzc5MzMsIAorICAgIDc3OTM3LCA3Nzk0MSwgNzc5NDUsIDc3OTQ5LCA3Nzk1MywgNzc5NTgsIDc3OTYyLCA3Nzk2NywgNzc5NzEsIDc3OTc2LCAKKyAgICA3Nzk4MCwgNzc5ODUsIDc3OTg5LCA3Nzk5NSwgNzgwMDAsIDc4MDA0LCA3ODAwOSwgNzgwMTMsIDc4MDE4LCA3ODAyMiwgCisgICAgNzgwMjcsIDc4MDMxLCA3ODAzNiwgMTUyMSwgNzgwNDAsIDI4MjQsIDE3NTksIDE3NjQsIDc4MDQ0LCA3ODA0OCwgMjgyOCwgCisgICAgNzgwNTIsIDEzOTcsIDc4MDU3LCAxMzQyLCA3ODA2MSwgMjg0MCwgNzgwNjUsIDc4MDcyLCA3ODA3OSwgNzgwOTMsIDI4NDQsIAorICAgIDcxMzEsIDc4MTAyLCA3ODExMCwgNzgxMTcsIDc4MTI4LCA3ODEzNywgNzgxNDQsIDc4MTU2LCA3ODE2OSwgNzgxODIsIAorICAgIDc4MTkzLCA3ODE5OCwgNzgyMDUsIDc4MjE3LCA3ODIyMSwgMjg0OCwgMTE3NDcsIDc4MjMxLCA3ODIzNiwgNzgyNDUsIAorICAgIDc4MjU1LCAyODUyLCA3ODI2MCwgNzgyNjQsIDc4MjY5LCA3ODI3NiwgNzgyODIsIDc4MjkwLCA3ODMwMiwgMTM0NywgCisgICAgMTMwNDIsIDc4MzEyLCA3ODMxNiwgNzgzMjIsIDc4MzM2LCA3ODM0OCwgNzgzNjAsIDc4MzcwLCA3ODM3OSwgNzgzODgsIAorICAgIDc4Mzk3LCA3ODQwNSwgNzg0MTYsIDc4NDI0LCA0MDUxLCA3ODQzNCwgNzg0NDUsIDc4NDU0LCA3ODQ2MCwgNzg0NzUsIAorICAgIDc4NDgyLCA3ODQ4OCwgMzU1MTQsIDc4NDkzLCAyODc2LCAxMzA0NiwgNzg0OTcsIDc4NTA0LCA4OTMwLCA3ODUxMywgMjg4MSwgCisgICAgMzIzNjEsIDc4NTE5LCA2MDYwOSwgNzg1MjYsIDc4NTMyLCA3ODU0MywgNzg1NDksIDc4NTU2LCA3ODU2MiwgNzg1NzAsIAorICAgIDc4NTc3LCA3ODU4MywgNzg1OTMsIDc4NjAyLCA3ODYxMywgNzg2MjAsIDc4NjI2LCA3ODYzNiwgNzg2NDQsIDc4NjUwLCAKKyAgICA3ODY2NSwgNzg2NzEsIDc4Njc2LCA3ODY4MywgNzg2ODYsIDc4NjkyLCA3ODY5OSwgNzg3MDUsIDc4NzEzLCA3ODcyMiwgCisgICAgNzg3MzAsIDc4NzM2LCA3ODc0NSwgNDE0NjQsIDc4NzU5LCA3ODc2NCwgNzg3NzAsIDE0NzU3LCA3ODc3NSwgNzg3ODgsIAorICAgIDc4Nzk3LCA3ODgwNSwgNzg4MTIsIDc4ODE2LCA3ODgyMCwgNzg4MjMsIDc4ODMwLCA3ODgzNywgNzg4NDUsIDc4ODUzLCAKKyAgICA3ODg2MiwgNzg4NzAsIDE0Njg0LCA3ODg3OCwgNzg4ODMsIDc4ODg3LCA3ODg5OSwgNzg5MDYsIDc4OTE1LCA3NDgsIAorICAgIDc4OTI1LCA3ODkzNCwgNzg5NDUsIDI4OTcsIDc4OTQ5LCA3ODk1MywgNzg5NTksIDc4OTcyLCA3ODk4NCwgNzg5OTQsIAorICAgIDc5MDAzLCA3OTAxNSwgMjYzNjksIDc5MDI2LCA3OTAzNCwgNzkwNDMsIDc5MDU0LCA3OTA2NSwgNzkwNzUsIDc5MDg1LCAKKyAgICA3OTA5NCwgNzkxMDIsIDExMzEyLCA3OTEwOSwgNzkxMTMsIDc5MTE2LCA3OTEyMSwgNzkxMjYsIDc5MTMwLCA3OTEzNiwgCisgICAgMTM1MiwgMTE4MTgsIDc5MTQzLCA3OTE1NCwgNzkxNjMsIDc5MTcxLCA3OTE4MCwgNzkxODgsIDc5MjA0LCA3OTIxNSwgCisgICAgNzkyMjQsIDc5MjMyLCA3OTI0NCwgNzkyNTUsIDc5MjcxLCA3OTI4MSwgNzkzMDIsIDc5MzE1LCA3OTMyMywgNzkzMzAsIAorICAgIDE0ODY4LCA3OTM0MywgNzkzNDgsIDc5MzU0LCA1OTA4LCA3OTM2MCwgNzkzNjMsIDc5MzcwLCA3OTM4MCwgODE3NiwgCisgICAgNzkzODcsIDc5MzkyLCA3OTM5NywgNzk0MDIsIDc5NDEwLCA3OTQxOSwgNzk0MjcsIDk3NTYsIDk3NjUsIDc5NDMyLCAKKyAgICA3OTQ0MywgNzk0NDgsIDc5NDU0LCAyOTEzLCAyOTE4LCA3OTQ2MCwgMTA4NzksIDc5NDY2LCA3OTQ3MywgNzk0ODAsIAorICAgIDc5NDkzLCAyMjUxLCA2OCwgNzk0OTgsIDc5NTAzLCA3OTUxMywgNzk1MTksIDc5NTI4LCA3OTUzNiwgNzk1NDYsIDc5NTUwLCAKKyAgICA3OTU1NSwgNzk1NTksIDc5NTcxLCAyOTQxLCA3OTU3OSwgNzk1ODcsIDc5NTkyLCA3OTYwMywgNzk2MTQsIDc5NjIzLCAKKyAgICA3OTYyOCwgNzk2MzQsIDc5NjM5LCA3OTY0OSwgNzk2NTksIDc5NjY0LCA3OTY3MCwgNzk2NzQsIDc5Njc5LCA3OTY4OCwgCisgICAgMjE0MTAsIDc5NjkyLCA0MTI4LCAyMCwgNzk2OTcsIDc5NzA2LCA3OTcxMywgNzk3MjAsIDc5NzI2LCA3OTczMiwgODY0LCAKKyAgICA3OTczNywgNzk3NDIsIDYwOTM3LCA3OTc0NywgNzk3NTIsIDc5NzU4LCA3OTc2NCwgNzk3NzIsIDc5Nzc3LCA3OTc4NCwgCisgICAgNzk3OTAsIDc5Nzk1LCAzODAzMCwgNDEzNTgsIDc5ODAxLCAyOTQ1LCAzMiwgNzk4MTEsIDc5ODI0LCA3OTgyOSwgNzk4MzcsIAorICAgIDc5ODQyLCA3OTg0OCwgMjk2NywgMjgzMTAsIDc5ODUzLCA3OTg2MSwgNzk4NjgsIDc5ODczLCA1ODY4MiwgNjE5NDAsIAorICAgIDc5ODgyLCA3OTg4NiwgMTcwNCwgMTgxMywgNzk4OTEsIDc5ODk2LCA3OTkwMywgMTgxNywgMjQ3LCA3OTkxMCwgNzk5MTYsIAorICAgIDI5ODksIDc5OTIxLCA3OTkyNiwgNzk5MzMsIDE4MjEsIDc5OTM4LCA3OTk0NCwgNzk5NDksIDc5OTYxLCA2MTE5LCA3OTk3MSwgCisgICAgMTgyOCwgNzk5NzcsIDc5OTgyLCA3OTk4OSwgNzk5OTYsIDgwMDExLCA4MDAxOCwgODAwMjksIDgwMDM3LCAyNjE4LCAKKyAgICA4MDA0MSwgODAwNTMsIDgwMDU4LCA4MDA2MiwgODAwNjgsIDI4MTM1LCAyMjU2LCA4MDA3MiwgODAwODMsIDgwMDg3LCAKKyAgICA4MDA5MSwgODAwOTcsIDgwMTAxLCA4MDExMCwgODAxMTQsIDgwMTI1LCA4MDEyOSwgMjMwMiwgMzIxOTAsIDgwMTMzLCAKKyAgICA4MDE0MywgMzA4MCwgOTM3MSwgODAxNTEsIDgwMTU2LCA4MDE2MCwgODAxNjksIDgwMTc2LCA4MDE4MiwgMzA1MCwgMTcxNTIsIAorICAgIDgwMTg2LCA4MDE5OSwgODAyMTcsIDgwMjIyLCA4MDIzMCwgODAyMzgsIDgwMjQ4LCA5OTg1LCAxMzE1NCwgODAyNjAsIAorICAgIDgwMjczLCA4MDI4MCwgODAyODcsIDgwMzAzLCA4MDMxMCwgODAzMTYsIDEwNjQsIDgwMzIzLCA4MDMzMCwgODAzNDAsIAorICAgIDgwMzQ5LCA4MDM2MSwgNDIzMjgsIDgwMzY5LCAzMDY0LCAxMjAzMCwgODAzNzIsIDgwMzgwLCA4MDM4NCwgNzgyNzIsIAorICAgIDMwNjgsIDgwMzg4LCAyMTE5MSwgMTIwNDYsIDM3NTYsIDgwMzkyLCAzMDc0LCA4MDM5NiwgODA0MDYsIDgwNDEyLCA4MDQxOCwgCisgICAgODA0MjQsIDgwNDMwLCA4MDQzNiwgODA0NDIsIDgwNDQ4LCA4MDQ1NCwgODA0NjAsIDgwNDY2LCA4MDQ3MiwgODA0NzgsIAorICAgIDgwNDg0LCA4MDQ5MCwgODA0OTYsIDgwNTAyLCA4MDUwOCwgODA1MTQsIDgwNTIwLCA4MDUyNiwgODA1MzIsIDgwNTM4LCAKKyAgICA4MDU0NCwgODA1NTAsIDgwNTU2LCA4MDU2MywgODA1NzAsIDgwNTc2LCA4MDU4MiwgODA1ODgsIDgwNTk0LCA4MDYwMCwgCisgICAgODA2MDYsIDEzNTcsIDE2MDYyLCAxMjA2OCwgODA2MTIsIDgwNjE3LCA4MDYyMiwgODA2MjcsIDgwNjMyLCA4MDYzNywgCisgICAgODA2NDIsIDgwNjQ3LCA4MDY1MiwgODA2NTcsIDgwNjYyLCA4MDY2NywgODA2NzIsIDgwNjc3LCA4MDY4MiwgODA2ODcsIAorICAgIDgwNjkyLCA4MDY5NywgODA3MDIsIDgwNzA3LCA4MDcxMiwgODA3MTcsIDgwNzIyLCA4MDcyNywgODA3MzIsIDgwNzM3LCAKKyAgICA4MDc0MywgODA3NDgsIDgwNzUzLCA4MDc1OSwgODA3NjQsIDgwNzcwLCA4MDc3NSwgODA3ODAsIDgwNzg2LCA4MDc5MSwgCisgICAgODA3OTYsIDgwODAxLCA4MDgwNiwgODA4MTEsIDgwODE2LCA4MDgyMSwgODA4MjYsIDgwNDA3LCA4MDQxMywgODA0MTksIAorICAgIDgwNDI1LCA4MDQzMSwgODA0MzcsIDgwNDQzLCA4MDQ0OSwgODA0NTUsIDgwNDYxLCA4MDQ2NywgODA0NzMsIDgwNDc5LCAKKyAgICA4MDQ4NSwgODA0OTEsIDgwODMyLCA4MDQ5NywgODA1MDMsIDgwNTA5LCA4MDgzOCwgODA1MTUsIDgwNTIxLCA4MDUyNywgCisgICAgODA1MzMsIDgwNTM5LCA4MDU0NSwgODA1NTEsIDgwNTcxLCA4MDg0NCwgODA4NTAsIDgwNTc3LCA4MDg1NiwgODA1ODMsIAorICAgIDgwNTg5LCA4MDU5NSwgODA2MDEsIDgwNjA3LCAzMDkxLCAzMDk2LCA4MDg2MiwgODA4NjcsIDgwODcwLCA4MDg3NiwgCisgICAgODA4ODIsIDgwODg5LCA4MDg5NCwgODA4OTksIDIzMDcsIAogfTsKIAogLyogY29kZS0+bmFtZSBwaHJhc2Vib29rICovCiAjZGVmaW5lIHBocmFzZWJvb2tfc2hpZnQgNwogI2RlZmluZSBwaHJhc2Vib29rX3Nob3J0IDIwOQogc3RhdGljIHVuc2lnbmVkIGNoYXIgcGhyYXNlYm9va1tdID0gewotICAgIDAsIDIxOSwgMTgsIDI0NSwgMzEsIDc4LCAyMjMsIDI1NCwgNzgsIDU0LCA1MCwgMjQ3LCAxMzIsIDUwLCAyMjUsIDE4MiwgCi0gICAgNTAsIDI1NCwgMTI2LCAyNTQsIDU3LCA0MywgMjI2LCAzLCA0NCwgMjI2LCAzLCAyNTMsIDIxNiwgOTYsIDUwLCAyNDksIAotICAgIDIxOSwgMjQwLCAxNjcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjE5LCA0NiwgMjEsIDIxMCwgODYsIDIxLCAxMTAsIDIxLCAKLSAgICAxMDUsIDIxLCAxNTgsIDIxLCAxNjEsIDIxLCAxODksIDIxLCAxOTQsIDIxLCAxOTgsIDIxLCAxOTUsIDIxLCAyMDAsIDI0OSwgCi0gICAgMjI2LCAyMjAsIDE1MCwgMjMzLCAxNSwgNTAsIDI0NSwgOTgsIDUwLCAyNDIsIDEzMCwgNTAsIDIyNCwgMTMsIDc4LCAyNDksIAotICAgIDIxNywgMjUzLCAyMDYsIDcsIDYsIDEsIDYxLCA3LCA2LCAxLCAyNTMsIDE1OCwgNywgNiwgMSwgMjUxLCA2NiwgNywgNiwgMSwgCi0gICAgMjQ5LCA2MCwgNywgNiwgMSwgNzUsIDcsIDYsIDEsIDI0NSwgNiwgNywgNiwgMSwgMjQzLCAyMDIsIDcsIDYsIDEsIDI0MiwgCi0gICAgNjAsIDcsIDYsIDEsIDczLCA3LCA2LCAxLCAyMzUsIDE0NCwgNywgNiwgMSwgMjM1LCAyMywgNywgNiwgMSwgMTU2LCA3LCA2LCAKLSAgICAxLCAxOTMsIDcsIDYsIDEsIDIzMCwgMjUsIDcsIDYsIDEsIDc2LCA3LCA2LCAxLCAyMjYsIDEwNSwgNywgNiwgMSwgMjI0LCAKLSAgICA5NiwgNywgNiwgMSwgMTUzLCA3LCA2LCAxLCAyMjIsIDkxLCA3LCA2LCAxLCAyMTcsIDE1MiwgNywgNiwgMSwgNzAsIDcsIDYsIAotICAgIDEsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMTIsIDk4LCA3LCA2LCAxLCAyMTEsIDE3OCwgNywgNiwgMSwgMjExLCAxMTcsIDcsIAotICAgIDYsIDEsIDIxMCwgMTU5LCA0MywgNDIsIDEyNywgMjIzLCA1MCwgMjE5LCA0NiwgNDQsIDQyLCAxMjcsIDI1MCwgMzEsIDI1NSwgCi0gICAgMTQsIDEyMSwgMjMyLCAyMTMsIDI0MiwgMTM3LCAyNTUsIDE0LCA3LCA0LCAxLCA2MSwgNywgNCwgMSwgMjUzLCAxNTgsIDcsIAotICAgIDQsIDEsIDI1MSwgNjYsIDcsIDQsIDEsIDI0OSwgNjAsIDcsIDQsIDEsIDc1LCA3LCA0LCAxLCAyNDUsIDYsIDcsIDQsIDEsIAotICAgIDI0MywgMjAyLCA3LCA0LCAxLCAyNDIsIDYwLCA3LCA0LCAxLCA3MywgNywgNCwgMSwgMjM1LCAxNDQsIDcsIDQsIDEsIDIzNSwgCi0gICAgMjMsIDcsIDQsIDEsIDE1NiwgNywgNCwgMSwgMTkzLCA3LCA0LCAxLCAyMzAsIDI1LCA3LCA0LCAxLCA3NiwgNywgNCwgMSwgCi0gICAgMjI2LCAxMDUsIDcsIDQsIDEsIDIyNCwgOTYsIDcsIDQsIDEsIDE1MywgNywgNCwgMSwgMjIyLCA5MSwgNywgNCwgMSwgMjE3LCAKLSAgICAxNTIsIDcsIDQsIDEsIDcwLCA3LCA0LCAxLCAyMTQsIDEwNSwgNywgNCwgMSwgMjEyLCA5OCwgNywgNCwgMSwgMjExLCAxNzgsIAotICAgIDcsIDQsIDEsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE1OSwgNDMsIDI0OSwgOTksIDEyNywgNjcsIDIzMiwgMjEzLCA0NCwgCi0gICAgMjQ5LCA5OSwgMTI3LCAxODIsIDIyOCwgNzMsIDIxOSwgMTgsIDIzNSwgMTkzLCAyNDUsIDMxLCA3OCwgMjUwLCAxNzYsIDUwLCAKLSAgICAyMjQsIDIyOCwgNTAsIDI0OSwgOTgsIDUwLCAyMTEsIDQwLCA1MCwgMjUxLCAxMzUsIDEzMCwgMjIxLCAxNzMsIDUwLCAyNDgsIAotICAgIDEsIDI0OSwgMTYzLCA1MCwgMjQ0LCAxMzYsIDIyNiwgMTU0LCAyMzUsIDIzOCwgMjMzLCA0MiwgNTIsIDI1NCwgMTEwLCAKLSAgICAyMjMsIDI1NCwgNzgsIDIyOCwgNTIsIDUwLCAyMTksIDUyLCAyNDAsIDE2OCwgMjIzLCAxMDIsIDUwLCAyMzEsIDIzMiwgCi0gICAgMjQ4LCA3MSwgNTAsIDIyNSwgMjEsIDUwLCAyMTgsIDIzLCAxMDUsIDIxOCwgMjMsIDE1OCwgMjU1LCAzLCAyNTUsIDE0LCAKLSAgICAyMzAsIDIyOCwgNTAsIDIyNSwgNjgsIDUwLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDI1MCwgMTgzLCAyMTgsIDIzLCAxMTAsIAotICAgIDIzMSwgMTQ4LCAyMjYsIDE1NCwgMjM1LCAyMzgsIDIyMiwgMjQ3LCA1MiwgMjU0LCAxMTAsIDIyMywgMjU0LCA3OCwgMjEyLCAKLSAgICAxMTQsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIDIxMiwgMTE0LCAyNDQsIAotICAgIDIsIDEzNCwgMjI0LCAxOSwgMjM1LCAxOTMsIDIyNCwgMTMsIDc4LCA3LCA2LCAxLCAxMTUsIDIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAxMTUsIDIsIDE4MiwgNywgNiwgMSwgCi0gICAgMTE1LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA2LCAxLCAyNTQsIDI0MywgNywgNiwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDE2MCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDE2MCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgCi0gICAgMjQyLCAxMzYsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNTAsIDMwLCA3LCA2LCAKLSAgICAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDUsIDU5LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxODIsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzAsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMTgyLCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgMSwgMjMwLCA4NCwgNTAsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIAotICAgIDI1MCwgMzAsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyMTYsIDE1MSwgNywgNCwgMSwgMjIwLCA3NiwgMjIyLCA5MSwgNywgNCwgMSwgMTE1LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMTE1LCAyLCAxODIsIDcsIDQsIDEsIAotICAgIDExNSwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMjU0LCAyNDMsIDcsIDQsIAotICAgIDEsIDI1MSwgNjcsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAxNjAsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDE0MiwgCi0gICAgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAxNjAsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIAotICAgIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjUwLCAzMCwgNywgNCwgCi0gICAgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjQ1LCA1OSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAxNDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMwLCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDE4MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDEsIDI0NywgMTY5LCA1MCwgNywgNCwgMSwgMTQ0LCAKLSAgICAyLCA5MSwgNywgNCwgMSwgMTA0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjUwLCAzMCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAxNDIsIDcsIDQsIDEsIAotICAgIDIxNiwgMTUxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAxMTUsIDIsIDIzMSwgMjMyLCA3LCA0LCAKLSAgICAxLCAxMTUsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgCi0gICAgMTQ2LCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI0LCA3LCA0LCAxLCAxMTUsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAyNTEsIAotICAgIDY3LCAyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDE0MiwgNywgNiwgMSwgMjUxLCA2NywgMiwgMjUwLCAzMCwgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjUxLCA2NywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDksIAotICAgIDYxLCAyLCA5MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgOTEsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDE2MCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDE2MCwgMiwgMjUxLCAxNDYsIAotICAgIDcsIDYsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAotICAgIDIyNCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTYwLCAKLSAgICAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTAsIAotICAgIDMwLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTEsIDE0NiwgNywgNiwgCi0gICAgMSwgMjQzLCAyMDMsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQzLCAyMDMsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgCi0gICAgMzAsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDkxLCA3LCA0LCAxLCAyNDIsIAotICAgIDYxLCAyLCA5MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDE4MiwgNywgNiwgMSwgCi0gICAgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDI0MCwgMTU0LCAKLSAgICAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAKLSAgICAyMjQsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDU5LCA0OCwgNywgNCwgCi0gICAgMSwgMjQ3LCAxMTksIDczLCA3LCA2LCAyNywgMjM2LCAzMSwgNywgNCwgMjcsIDIzNiwgMzEsIDcsIDYsIDEsIDIzNSwgMTQ1LCAKLSAgICAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMjUwLCAxODMsIAotICAgIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMzMsIDIzOSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIAotICAgIDE0MiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDE0MiwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAKLSAgICAyMzMsIDE0OSwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgOTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAKLSAgICA5MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMTQyLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAxNDIsIDcsIDYsIDEsIDIzMCwgMjYsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjUwLCAKLSAgICAyMzQsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzAsIDI2LCAyMjQsIDIwNCwgMjUxLCA3OCwgCi0gICAgMjU0LCA1NywgNywgNiwgMSwgMjQ1LCAxMzgsIDcsIDQsIDEsIDI0NSwgMTM4LCA3LCA2LCAxLCAxNDQsIDIsIDIzMSwgMjMyLCAKLSAgICA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxNDQsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNDQsIDIsIAotICAgIDI1MSwgMTQ2LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgNTIsIDE0MiwgNywgNiwgMjcsIAotICAgIDIyNiwgMjM0LCA3LCA0LCAyNywgMjI2LCAyMzQsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAxNDIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAxNDIsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgCi0gICAgMTgzLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjIyLCA5MiwgMiwgMTQyLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIAotICAgIDI1MCwgMzAsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMTgzLCA3LCAKLSAgICA0LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIyMiwgCi0gICAgOTIsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyNTAsIDE4MywgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAyMzQsIAotICAgIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDE4MiwgCi0gICAgNywgNCwgMSwgMTA0LCAyLCAxODIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDEwNCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDEwNCwgMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDEwNCwgCi0gICAgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDIyMiwgMjM0LCA0OCwgNywgNiwgMSwgMTA0LCAyLCA1MiwgMTQyLCAKLSAgICA3LCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjI2LCAyMjQsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzAsIDcsIAotICAgIDYsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgCi0gICAgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAKLSAgICAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MSwgCi0gICAgNywgNCwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCA1NywgMiwgMTAzLCA3LCA2LCAxLCA1NywgMiwgMjE2LCAxMSwgNywgNCwgCi0gICAgMSwgNTcsIDIsIDIxNiwgMTEsIDcsIDYsIDEsIDEzOCwgMTk0LCA3LCA0LCAxLCAxMzgsIDE5NCwgNywgNiwgMSwgMjA0LCAKLSAgICA3NiwgNywgNiwgMSwgMjUxLCA2NywgMiwgMTAzLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAxMDMsIDcsIDYsIDEsIDI1NCwgCi0gICAgMjE5LCAyNDksIDYwLCA3LCA2LCAxLCAyNDksIDYxLCAyLCAxMDMsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDIxNiwgMTEsIDcsIAotICAgIDQsIDEsIDI0OSwgNjEsIDIsIDIxNiwgMTEsIDcsIDQsIDEsIDIxNSwgOTQsIDI0OCwgNTQsIDcsIDYsIDEsIDIyMywgNDksIAotICAgIDc1LCA3LCA2LCAxLCAyMjEsIDE5NSwgNywgNiwgMSwgMjA0LCA3NSwgNywgNiwgMSwgMjQ1LCA3LCAyLCAxMDMsIDcsIDQsIAotICAgIDEsIDI0NSwgNywgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDEwNywgNywgNCwgMSwgCi0gICAgMjQwLCAyMDEsIDcsIDYsIDEsIDIzNSwgMTg1LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDYsIDEsIDIzNSwgMjQsIAotICAgIDIsIDEwMywgNywgNCwgMSwgMjM1LCAyNCwgMiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTMwLCA3LCA0LCAxLCAKLSAgICAyMzMsIDEwMCwgMiwgOTEsIDcsIDYsIDEsIDIxNSwgOTQsIDE5MywgNywgNiwgMSwgMjMwLCAyNiwgMiwgNDMsIDEwMywgNywgCi0gICAgNCwgMSwgMjMwLCAyNiwgMiwgMTk5LCA0NCwgMjMzLCAzNiwgNywgNiwgMSwgMTQ0LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0MCwgMjQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ4LCA3LCA2LCAxLCAyMjYsIDIxOSwgNywgNCwgCi0gICAgMSwgMjI2LCAyMTksIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAxMDMsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAxMDMsIDcsIDEsIAotICAgIDIxMCwgMjE0LCA3LCA2LCAxLCAxMzgsIDEwNSwgNywgNCwgMSwgMTM4LCAxMDUsIDcsIDYsIDEsIDI0NSwgNzUsIDcsIDEsIAotICAgIDIyMywgNDksIDI0NSwgNzYsIDIzMiwgMTIzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjI2LCA2NiwgMTAzLCA3LCA2LCAxLCAKLSAgICAyMTcsIDE1MywgMiwgMTAzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMTAzLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ4LCA3LCA2LCAxLCAKLSAgICAyMTQsIDE1NywgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNiwgMSwgMjExLCAxMTgsIDIsIDEwMywgNywgNCwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDEwMywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIAotICAgIDYsIDEsIDI0NSwgOCwgNywgNiwgMSwgMjQ1LCA5LCAyMjMsIDQ4LCA3LCA0LCAxLCAyNDUsIDksIDIyMywgNDgsIDcsIDQsIAotICAgIDEsIDI0NSwgOSwgMiwgMjE3LCA3NywgNywgMSwgMTEzLCAyLCA5MSwgNywgNiwgMSwgMTM4LCAxODksIDcsIDQsIDEsIDEzOCwgCi0gICAgMTg5LCA3LCAxLCAyMzUsIDE5MywgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgMSwgMjExLCAxODEsIDcsIDEsIAotICAgIDI0OCwgNDcsIDI1MCwgMTEsIDcsIDEsIDIzMywgNzcsIDI1MCwgMTEsIDcsIDEsIDI1NCwgMTM3LCAyNTAsIDExLCA3LCAxLCAKLSAgICAyMjMsIDU1LCAyNTAsIDExLCA3LCA2LCAxLCAyNDYsIDQwLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNCwgCi0gICAgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDYsIDQwLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjMyLCAKLSAgICAxODgsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjMyLCAxODgsIDcsIDYsIDEsIAotICAgIDIyOCwgMTg2LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjI4LCAxODYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAKLSAgICAyNTAsIDIzNCwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMjM0LCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgCi0gICAgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIAotICAgIDIzMSwgMjMyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIxNSwgOTQsIDc1LCA3LCA2LCAxLCAxMTUsIDIsIDI0OCwgMiwgMjIsIDIzMSwgCi0gICAgMjMyLCA3LCA0LCAxLCAxMTUsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxMTUsIDIsIDU5LCA3NywgMjIsIAotICAgIDIzMSwgMjMyLCA3LCA0LCAxLCAxMTUsIDIsIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyNTQsIDI0NCwgMiwgCi0gICAgMjMxLCAyMzIsIDcsIDQsIDEsIDI1NCwgMjQ0LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDkxLCA3LCA0LCAKLSAgICAxLCAyNDMsIDIwMywgMiwgOTEsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIAotICAgIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjUwLCAyMzQsIAotICAgIDcsIDYsIDEsIDE0NCwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDE0NCwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjI2LCAyMjUsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCAyMjYsIDIyNSwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAyNDUsIDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDUsIDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDI0NiwgMzksIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDQsIDEsIDIxMCwgMTU5LCA3LCA0LCAxLCAKLSAgICAyNDYsIDM5LCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMTQyLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyNDAsIDE5OSwgNywgNiwgMSwgMjExLCAxODEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMzAsIAotICAgIDI2LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNzcsIDIyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgCi0gICAgMjIyLCAyMzQsIDc3LCAyMiwgMTQyLCA3LCA2LCAxLCAyNTQsIDI0NCwgMiwgMTQyLCA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxOCwgMTAzLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxOCwgMTAzLCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTE1LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMTUsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgCi0gICAgMSwgMTYwLCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTYwLCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDE0NCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCAKLSAgICA2LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgCi0gICAgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMDQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgMSwgMjIyLCAKLSAgICA5MiwgMiwgMjQ5LCAyMjAsIDUxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyNDksIDIyMCwgNTEsIDcsIDYsIDEsIDIxNywgCi0gICAgMTUzLCAyLCAyNDksIDIyMCwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDksIDIyMCwgNTEsIDcsIDYsIDEsIDIxMCwgCi0gICAgMjMxLCA3LCA0LCAxLCAyMTAsIDIzMSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0MiwgNjEsIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxOTksIDQ0LCAyMzMsIDM2LCA3LCA0LCAxLCAyNDksIDYxLCAyLCAKLSAgICAyNDksIDEwMCwgNywgNiwgMSwgMjI2LCAxMzQsIDcsIDQsIDEsIDIyNiwgMTM0LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA2LCAxLCAxMTUsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTE1LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIAotICAgIDE0NCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI0OSwgCi0gICAgMTAwLCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDQsIDcsIDQsIDEsIDI0OCwgMTQzLCAyNDcsIDIyMCwgNywgNCwgMSwgCi0gICAgMjI0LCAzMSwgMjQ3LCAyMjAsIDcsIDYsIDEsIDExNSwgMiwgOTEsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICAyNTEsIDY3LCAyLCA5MSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDEzMCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI0NywgCi0gICAgMjU1LCA5MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyMTcsIDI1MCwgMjE3LCA3NywgNywgNiwgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA3LCA0LCAxLCAyNDIsIDE4MCwgMjE4LCAKLSAgICAxMjksIDcsIDYsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAxMzAsIDcsIDYsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAxNjAsIDIsIDkxLCA3LCA2LCAxLCAyMzUsIDE0NSwgMiwgOTEsIDcsIDQsIAotICAgIDEsIDIzNSwgMTQ1LCAyLCA5MSwgNywgNiwgMSwgNCwgMjI0LCA5NywgMiwgMjQxLCA1MiwgMjE3LCA3NywgNywgNCwgMSwgCi0gICAgMjI0LCA5NywgMiwgMjQxLCA1MiwgMjE3LCA3NywgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDkxLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgOTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICAyMTUsIDk0LCA2MSwgNywgNCwgMSwgMjU0LCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDI1NCwgMTQzLCA3LCA0LCAxLCA1NywgCi0gICAgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc2LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgMjE3LCA3NywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMTAzLCA3LCA0LCAxLCAyMjMsIDQ5LCA3NSwgNywgNCwgMSwgCi0gICAgMjIxLCAxOTUsIDcsIDQsIDEsIDIyMSwgMTk2LCAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzUsIDcsIDQsIDEsIDIyMywgNDksIAotICAgIDIwNCwgNzUsIDcsIDQsIDEsIDIyMywgNDksIDIwNCwgMTYwLCAyLCAxMDMsIDcsIDQsIDEsIDI1MCwgMCwgMjIzLCA0OSwgCi0gICAgMjA0LCA3NSwgNywgNCwgMSwgMjQ3LCAxMTksIDIzNSwgMTQ1LCAyLCA5MSwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDEwMywgCi0gICAgNywgNCwgMSwgMTE5LCAyNDMsIDIwMiwgNywgMSwgNCwgNiwgMjQzLCAyMDIsIDcsIDQsIDEsIDI0MywgMTA3LCA3LCA0LCAxLCAKLSAgICAyMjMsIDE1MSwgMjQwLCAyNDgsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjAsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDEwMywgCi0gICAgNywgNCwgMSwgMjQxLCAyMDgsIDIsIDEwMywgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE4NSwgCi0gICAgNywgMSwgNCwgNiwgNzMsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjUyLCA0MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjMzLCAxLCA3LCA0LCAxLCAKLSAgICAyMTUsIDk0LCAxOTMsIDcsIDQsIDEsIDIxNSwgOTQsIDIzMiwgNTAsIDIsIDE5OSwgMjMzLCAzNiwgNywgNCwgMSwgMjMyLCAKLSAgICA1MCwgMiwgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCA0MywgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMjMsIDU1LCAKLSAgICAxMDMsIDcsIDEsIDQsIDYsIDIzMCwgMjUsIDcsIDQsIDEsIDI1MiwgMTM0LCA3NiwgNywgMSwgNCwgNiwgMjI2LCAyMzQsIDcsIAotICAgIDQsIDEsIDI1MCwgMCwgMjI2LCAyMDEsIDcsIDQsIDEsIDIyNSwgMTMzLCA3LCA0LCAxLCAyMTUsIDk0LCAxNTMsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAKLSAgICAxMDMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCAKLSAgICA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjQ0LCA4NywgNywgNCwgMSwgMjIzLCA0OSwgMjIzLCAyMjQsIDIsIDI0NCwgODcsIDcsIAotICAgIDEsIDQsIDYsIDE1MywgNywgMSwgNCwgNiwgMjM1LCAxOTMsIDE1MywgNywgNCwgMSwgMjIyLCA5MiwgMiwgMTAzLCA3LCA0LCAKLSAgICAxLCAyNDUsIDc1LCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDIxOCwgMTAzLCAyMiwgMTAzLCA3LCA0LCAxLCAKLSAgICAyMTgsIDIzMSwgMjIzLCA0OSwgMjQ1LCA3NSwgNywgNCwgMSwgMjQ1LCA3NiwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNSwgCi0gICAgOTQsIDIxNywgMTUyLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAxMDQsIDEzMCwgNywgCi0gICAgNCwgMSwgMjE0LCAxNTcsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCAKLSAgICA0LCAxLCAyMTUsIDk0LCAyMTIsIDk4LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTEsIDExNywgNywgMSwgNCwgNiwgMjExLCAxMTcsIAotICAgIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNDksIDEwMCwgNywgNCwgCi0gICAgMSwgMjQ1LCA4LCA3LCA0LCAxLCAyNDUsIDksIDIsIDI0OSwgMTAwLCA3LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDEsIAotICAgIDIyNSwgMTM5LCAyMTMsIDEzNSwgMjQzLCAyNDksIDcsIDEsIDIzNSwgMTkzLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDEsIAotICAgIDIxOCwgMTEwLCAyNTEsIDY2LCA3LCAxLCAyNTEsIDI0NiwgMjUwLCAxMSwgNywgMSwgNCwgNiwgMjUzLCAxNTgsIDcsIDQsIAotICAgIDEsIDI1MCwgMCwgMjA0LCA3NSwgNywgMSwgNCwgNiwgMjQzLCAyMDMsIDIsIDEwMywgNywgMSwgNCwgNiwgMjQyLCA2MCwgNywgCi0gICAgNCwgMSwgMjM1LCAxNDUsIDIsIDI0OSwgMTI3LCA3LCA0LCAxLCAyMTUsIDk0LCAyMzUsIDIzLCA3LCAxLCA0LCA2LCAxNTYsIAotICAgIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDEwMywgNywgMSwgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgMSwgMjIzLCA0OSwgCi0gICAgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgNCwgMSwgMjQ2LCA0MCwgMjQ3LCAyMjAsIDcsIDQsIDEsIDI0OCwgMjYsIAotICAgIDI0NywgMjIwLCA3LCA0LCAxLCAyNDYsIDQwLCAyNDcsIDIyMSwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNSwgMTg1LCAKLSAgICAyNDcsIDIyMCwgNywgNCwgMSwgMjE2LCAyMzUsIDI0NywgMjIwLCA3LCA0LCAxLCAyMTcsIDI5LCAyNDcsIDIyMSwgMiwgCi0gICAgMjQ5LCAxMDAsIDcsIDQsIDEsIDI0NCwgMTM0LCAyNDcsIDIyMCwgNywgNCwgMSwgMjMyLCAxMDAsIDI0NywgMjIwLCA3LCA0LCAKLSAgICAxLCAyMzIsIDUxLCAyNDcsIDIyMCwgNywgMSwgMjUxLCAyNDYsIDIyNSwgMTgxLCA3LCAxLCAyNTEsIDI1NCwgMjI1LCAxODEsIAotICAgIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjEsIDIsIDI0NCwgODcsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjEsIDIsIDI0NCwgCi0gICAgODgsIDIyLCAyMTcsIDc3LCA1OCwgMSwgNCwgMjQyLCA2MCwgNTgsIDEsIDQsIDI0MiwgNjEsIDIsIDEwMywgNTgsIDEsIDQsIAotICAgIDIzNSwgMTQ0LCA1OCwgMSwgNCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjIzLCAKLSAgICAyMjQsIDIsIDEwMywgNTgsIDEsIDQsIDYsIDIzNSwgMTkzLCAxNTMsIDU4LCAxLCA0LCAyMTIsIDk4LCA1OCwgMSwgNCwgCi0gICAgMjExLCAxMTcsIDU4LCAxLCAyMjQsIDE5MCwgNTgsIDEsIDUyLCAyMjQsIDE5MCwgNTgsIDEsIDIxNSwgOTQsIDI0OSwgMjE5LCAKLSAgICA1OCwgMSwgMjU0LCA1NywgNTgsIDEsIDIyMywgNDksIDI0OSwgMjE5LCA1OCwgMSwgNDQsIDE2MywgMjIyLCAyMzMsIDU4LCAKLSAgICAxLCA0MywgMTYzLCAyMjIsIDIzMywgNTgsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDIyMywgNDksIDI0MiwgCi0gICAgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDQzLCAyNTMsIDI0OSwgNTgsIDEsIDQ0LCAyNTMsIDI0OSwgNTgsIDEsIDEyMCwgMjUzLCAKLSAgICAyNDksIDU4LCAxLCAxMjQsIDI1MywgMjQ5LCA1OCwgMSwgMjUwLCAzMSwgMjU1LCAxNCwgMjUwLCAyMzQsIDU4LCAxLCA2NywgCi0gICAgMjMyLCAyMTMsIDU4LCAxLCAyMzEsIDIzMiwgNTgsIDEsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDI0MiwgMTM3LCAyNTUsIAotICAgIDE0LCA1OCwgMSwgMTIxLCA2NywgMjMyLCAyMTMsIDU4LCAxLCAxMjEsIDIzMSwgMjMyLCA1OCwgMSwgMTIxLCAyNDIsIDEzNywgCi0gICAgMjU1LCAxNCwgNTgsIDEsIDEyMSwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMjE1LCAyMjIsIDI0OSwgMjI2LCA1OCwgMSwgCi0gICAgMTYzLCAyMTUsIDIyMiwgMjQ5LCAyMjYsIDU4LCAxLCAyNTAsIDE3MywgNDQsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAyNTAsIAotICAgIDE3MywgNDMsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAxMjAsIDIxNywgODcsIDU4LCAxLCAxMjQsIDIxNywgODcsIDU4LCAxLCAKLSAgICA5NiwgNTAsIDU4LCAxLCAyMzAsIDE4MiwgNTAsIDI1MSwgMTQ2LCA1OSwgNDgsIDIyMiwgMjM0LCA0OCwgMjI2LCAyMjQsIDQsIAotICAgIDE4MiwgNTIsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDIyMywgMzYsIDEwMywgNTgsIDEsIDI0OSwgMTMxLCAyNTUsIDE0LCAKLSAgICA1OCwgMSwgNCwgMjQzLCAxMDcsIDU4LCAxLCA0LCAxNTYsIDU4LCAxLCA0LCAyMjIsIDkxLCA1OCwgMSwgNCwgMjExLCAxNzgsIAotICAgIDU4LCAxLCA0LCAyMjMsIDQ5LCAyNDIsIDE4MCwgMjE4LCAxMjksIDU4LCAxLCAyNDUsIDIwLCAxMzgsIDEzMCwgNTgsIDEsIAotICAgIDEyNSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDEzOCwgMTMwLCA1OCwgMSwgCi0gICAgMjQ1LCAxOSwgMTM4LCAxMzAsIDU4LCAxLCAyMTAsIDI1NCwgMjQ4LCA0NCwgMTM4LCA3OCwgNTgsIDEsIDIxMSwgNzAsIAotICAgIDI0OCwgNDQsIDEzOCwgNzgsIDU4LCAxLCAyMTMsIDEzMywgNTgsIDEsIDIxNCwgMTg2LCA1OCwgMSwgNTIsIDI1NCwgNTcsIAotICAgIDU4LCAxLCAxMjEsIDEyNCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDEyMCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDQzLCAKLSAgICAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgNDQsIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCAyMjIsIDIzMywgNTgsIDEsIDIzMCwgCi0gICAgMjI0LCAyNDIsIDEzNywgMjU1LCAxNCwgNTgsIDEsIDIzMCwgMjI0LCA1MiwgMjQyLCAxMzcsIDI1NSwgMTQsIDU4LCAxLCAKLSAgICAyMzAsIDIyNCwgNTIsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDEyMSwgMTgyLCA1OCwgMSwgMjIzLCAxNTcsIDI0OSwgCi0gICAgMjI2LCA1OCwgMSwgMjUyLCA1OCwgMTI1LCAyMTYsIDMwLCA1OCwgMSwgMjQ1LCAxNDMsIDEyNSwgMjE2LCAzMCwgNTgsIDEsIAotICAgIDI1MiwgNTgsIDEyMSwgMjE2LCAzMCwgNTgsIDEsIDI0NSwgMTQzLCAxMjEsIDIxNiwgMzAsIDU4LCAxLCAyMjAsIDU0LCA1OCwgCi0gICAgMSwgMjA0LCAyMjAsIDU0LCA1OCwgMSwgMTIxLCA0MywgNzQsIDM4LCAyNDIsIDEzNywgMjU1LCAxNCwgMzgsIDI1NSwgMywgCi0gICAgMjU1LCAxNCwgMzgsIDI1MCwgMzEsIDI1NSwgMTQsIDM4LCAxODIsIDM4LCAyMzEsIDIzMiwgMzgsIDIyNiwgMTE5LCAzOCwgCi0gICAgMjUxLCAxNDYsIDM4LCA1OSwgNDgsIDM4LCAyNDgsIDEsIDM4LCAyNDEsIDUyLCA0OCwgMzgsIDIyMiwgMjM0LCA0OCwgMzgsIAotICAgIDUyLCAyNTUsIDMsIDI1NSwgMTQsIDM4LCAyNTAsIDIzNCwgMzgsIDY3LCAyMzIsIDIxNCwgNDgsIDM4LCA1MiwgNjcsIDIzMiwgCi0gICAgMjE0LCA0OCwgMzgsIDUyLCAyNDIsIDEzNywgMjU1LCAxNCwgMzgsIDI1MCwgMjU1LCAzOCwgMjM1LCAxOTMsIDI1MSwgMTQ2LCAKLSAgICAzOCwgMjE1LCA5NCwgMjQ5LCAyMjAsIDQ4LCAzOCwgMjQ5LCAyMjAsIDQ4LCAzOCwgMjIzLCA0OSwgMjQ5LCAyMjAsIDQ4LCAKLSAgICAzOCwgMjQ5LCAyMjAsIDc3LCAyMjIsIDI1MSwgMzgsIDI0MiwgMTM3LCAyNTUsIDE1LCA1MSwgMzgsIDI1NSwgMywgMjU1LCAKLSAgICAxNSwgNTEsIDM4LCA0MywgMjE3LCA4OCwgNTEsIDM4LCA0NCwgMjE3LCA4OCwgNTEsIDM4LCA0MywgMjU0LCAxMTAsIDQ4LCAKLSAgICAzOCwgMjQwLCAyNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNCwgNTEsIDM4LCAxMjAsIDIxNywgODgsIDUxLCAzOCwgMTI0LCAKLSAgICAyMTcsIDg4LCA1MSwgMzgsIDk2LCA1LCA1MSwgMzgsIDIzMCwgMTgyLCA1LCA1MSwgMzgsIDIyNiwgNjQsIDI0MSwgNTIsIAotICAgIDUxLCAzOCwgMjIzLCA1NSwgMjQxLCA1MiwgNTEsIDM4LCA1OSwgNTEsIDM4LCAyNDgsIDIsIDUxLCAzOCwgMjIyLCAyMzQsIAotICAgIDUxLCAzOCwgMjQ5LCAyMjAsIDUxLCAzOCwgMjUwLCAxODMsIDM4LCAyMjYsIDIyNCwgMzgsIDY3LCAyMzIsIDIxNCwgNTEsIAotICAgIDM4LCAyNTEsIDE0MCwgNTEsIDM4LCAyMzUsIDE5MywgNTIsIDI1NCwgMjQsIDUxLCAzOCwgMjUwLCAyMzUsIDUxLCAzOCwgCi0gICAgMjUwLCAzMSwgMjU1LCAxNSwgNTEsIDM4LCAyNTEsIDE0NywgNTEsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDcsIDUxLCAzOCwgCi0gICAgMjE2LCA4OSwgNTEsIDM4LCAyMzEsIDIzMywgNTEsIDM4LCAxMjEsIDIzMiwgMjEzLCAzOCwgNTIsIDEyMSwgMjMyLCAyMTMsIAotICAgIDM4LCAyMTYsIDg5LCAyMjYsIDEyMCwgMzgsIDIxOSwgMjUxLCAyMTgsIDEwMywgMjI2LCAxMjAsIDM4LCAxOTksIDIxOCwgCi0gICAgMTAzLCAyMjYsIDEyMCwgMzgsIDIxOSwgMjUxLCAyMTksIDQ3LCAyMjYsIDEyMCwgMzgsIDE5OSwgMjE5LCA0NywgMjI2LCAKLSAgICAxMjAsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNCwgNTEsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDAsIDUxLCAzOCwgNDIsIDUxLCAKLSAgICAzOCwgMjIxLCAxODAsIDUxLCAzOCwgMjExLCAxNzksIDQ4LCAzOCwgNjcsIDE4MiwgMzgsIDUyLCAyMjYsIDExOSwgMzgsIAotICAgIDI0MiwgMTM3LCAxMzgsIDc4LCAzOCwgMjU1LCAzLCAxMzgsIDc4LCAzOCwgMjYsIDIyNSwgMTc1LCAzOCwgMjYsIDIzNCwgMiwgCi0gICAgMzgsIDI2LCAyNDcsIDI1MiwgMjE2LCAxOCwgMzgsIDI2LCAyMTAsIDIxOSwgMzgsIDI1MSwgMTQwLCA0OCwgMzgsIDI0NSwgCi0gICAgOTgsIDUsIDUxLCAzOCwgNTIsIDY3LCAyMzIsIDIxNCwgNTEsIDM4LCA0MywgMjU0LCAxMTAsIDUxLCAzOCwgMjI4LCA1MiwgCi0gICAgMjE2LCA4OSwgNDgsIDM4LCAyNDEsIDU4LCA0OCwgMzgsIDI1NCwgMTQ4LCAxMjgsIDIxNiwgNDIsIDQ4LCAzOCwgNDMsIDQ0LCAKLSAgICA4MCwgNTEsIDM4LCAyMTQsIDE1MywgODAsIDUxLCAzOCwgMjQyLCAxNDIsIDIzNSwgNjMsIDM4LCA0NCwgMjUzLCAyNTAsIAotICAgIDQ4LCAzOCwgNDMsIDE2MywgMjIyLCAyMzQsIDQ4LCAzOCwgMjQ0LCAxMzEsIDM4LCAyMTEsIDE3OSwgNTEsIDM4LCA0MywgCi0gICAgMjUzLCAyNTAsIDUxLCAzOCwgNDQsIDI1MywgMjUwLCA1MSwgMzgsIDQ0LCAyNTMsIDI1MCwgMjIsIDEyMCwgMjUzLCAyNTAsIAotICAgIDUxLCAzOCwgNDQsIDE2MywgMjIyLCAyMzQsIDQ4LCAzOCwgNTksIDc3LCAyMjIsIDI1MSwgMzgsIDI1MywgMjE3LCA1MSwgCi0gICAgMzgsIDUyLCAyMjIsIDIzNCwgNTEsIDM4LCAyMTAsIDM1LCA0OCwgMzgsIDUyLCAyNTEsIDE0NywgNTEsIDM4LCA1MiwgMjUxLCAKLSAgICAxNDYsIDM4LCA1MiwgMjMxLCAyMzIsIDM4LCA1MiwgMjMxLCAyMzMsIDUxLCAzOCwgNTIsIDE4MiwgMzgsIDUyLCAyMzUsIAotICAgIDE5MywgMjUxLCAxNDYsIDM4LCA1MiwgOTcsIDgwLCA1MSwgMzgsIDcsIDQsIDEsIDYxLCAzOCwgNywgNCwgMSwgNzUsIDM4LCAKLSAgICA3LCA0LCAxLCA3MywgMzgsIDcsIDQsIDEsIDc2LCAzOCwgNywgNCwgMSwgNzAsIDM4LCA3LCA0LCAxLCAyNTEsIDY2LCAzOCwgCi0gICAgNywgNCwgMSwgMjQ5LCA2MCwgMzgsIDcsIDQsIDEsIDI0MiwgNjAsIDM4LCA3LCA0LCAxLCAxOTMsIDM4LCA3LCA0LCAxLCAKLSAgICAxNTMsIDM4LCA3LCA0LCAxLCAyMTcsIDE1MiwgMzgsIDcsIDQsIDEsIDIxNCwgMTA1LCAzOCwgNywgNCwgMSwgMjExLCAxNzgsIAotICAgIDI2LCA2LCAxLCAyNDEsIDE5NiwgMjYsIDQsIDEsIDI0MSwgMTk2LCAyNiwgNiwgMSwgMjU0LCAyMywgMjIxLCAyNDYsIDI2LCAKLSAgICA0LCAxLCAyNTQsIDIzLCAyMjEsIDI0NiwgMjYsIDIyNywgMTk4LCA1MCwgMjYsIDIzMiwgMTA4LCAyMjcsIDE5OCwgNTAsIAotICAgIDI2LCA2LCAxLCAyMjYsIDUxLCAyNDcsIDIyNywgMjYsIDQsIDEsIDIyNiwgNTEsIDI0NywgMjI3LCAyNiwgMjEwLCAyMTksIAotICAgIDI2LCA0LCAyMjMsIDQ5LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA0LCAyNDYsIDExOCwgMjMyLCA4MywgMjE5LCAKLSAgICAxNzgsIDg3LCAyNiwgNCwgMjIzLCA0OSwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDIyNCwgMTMsIAotICAgIDc4LCAyNiwgMjE2LCAxOCwgMjYsIDI0NywgMjUyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxNiwgMTgsIAotICAgIDI2LCAyNTQsIDk3LCAyMTcsIDIsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDI0NSwgNjQsIAotICAgIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMTYsIAotICAgIDE4LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAxOCwgMjYsIAotICAgIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyNTQsIDE0MywgMjYsIDYsIDEsIAotICAgIDI1MiwgMjYsIDI2LCA2LCAxLCAyNDMsIDEwNywgMjYsIDYsIDEsIDI0OCwgNTQsIDI2LCA2LCAxLCAyNDUsIDEwMCwgMjYsIAotICAgIDYsIDEsIDIxMCwgODUsIDI2LCA2LCAxLCAyNDUsIDYzLCAyNiwgNiwgMSwgMjE2LCAxNzksIDI2LCA2LCAxLCAyMzUsIDE4NSwgCi0gICAgMjYsIDYsIDEsIDIzNCwgMjIyLCAyNiwgNiwgMSwgMjMzLCA5OCwgMjYsIDYsIDEsIDIzMCwgMTAyLCAyNiwgNiwgMSwgMjI3LCAKLSAgICAyMzcsIDI2LCA2LCAxLCAyMTEsIDE1NywgMjYsIDYsIDEsIDIyNiwgMTk5LCAyNiwgNiwgMSwgMjI1LCAxMDgsIDI2LCA2LCAKLSAgICAxLCAyMjMsIDM3LCAyNiwgNiwgMSwgMjE5LCAxNzcsIDI2LCA2LCAxLCAyMTcsIDQxLCAyNiwgNiwgMSwgMjE0LCAxNTcsIAotICAgIDI2LCA2LCAxLCAyMjUsIDEzMywgMjYsIDYsIDEsIDI1MCwgMTEwLCAyNiwgNiwgMSwgMjI0LCAxNjEsIDI2LCA2LCAxLCAKLSAgICAyMjYsIDIwMSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIAotICAgIDI1MSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgMTgsIDI2LCAKLSAgICA0LCAxLCAyNDUsIDY0LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjQ3LCAyNTIsIDIyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjU0LCAxNDMsIDI2LCA0LCAxLCAyNTIsIDI2LCAyNiwgCi0gICAgNCwgMSwgMjQzLCAxMDcsIDI2LCA0LCAxLCAyNDgsIDU0LCAyNiwgNCwgMSwgMjQ1LCAxMDAsIDI2LCA0LCAxLCAyMTAsIDg1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2MywgMjYsIDQsIDEsIDIxNiwgMTc5LCAyNiwgNCwgMSwgMjM1LCAxODUsIDI2LCA0LCAxLCAyMzQsIAotICAgIDIyMiwgMjYsIDQsIDEsIDIzMywgOTgsIDI2LCA0LCAxLCAyMzAsIDEwMiwgMjYsIDQsIDEsIDIyNywgMjM3LCAyNiwgNCwgMSwgCi0gICAgMjExLCAxNTcsIDI2LCA0LCAxLCAyMjYsIDE5OSwgMjYsIDQsIDEsIDIyNSwgMTA4LCAyNiwgNCwgMSwgMjIzLCAzNywgMjYsIAotICAgIDQsIDEsIDQwLCAyMTksIDE3NywgMjYsIDQsIDEsIDIxOSwgMTc3LCAyNiwgNCwgMSwgMjE3LCA0MSwgMjYsIDQsIDEsIDIxNCwgCi0gICAgMTU3LCAyNiwgNCwgMSwgMjI1LCAxMzMsIDI2LCA0LCAxLCAyNTAsIDExMCwgMjYsIDQsIDEsIDIyNCwgMTYxLCAyNiwgNCwgCi0gICAgMSwgMjI2LCAyMDEsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTEsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAKLSAgICAyNTEsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE4LCAyNiwgCi0gICAgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgMTgsIDI2LCA2LCAyMzQsIDI0NywgODcsIDI2LCAyNTIsIDI3LCA4NywgMjYsIAotICAgIDIxNiwgMTgwLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDEsIDUyLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNTUsIDMsIDIyLCAKLSAgICAyNDEsIDUyLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDgsIDIsIDIyLCAyNDEsIDUyLCA4NywgMjYsIDIyNSwgMTM0LCA4NywgCi0gICAgMjYsIDIyNSwgMTA5LCA4NywgMjYsIDIzNCwgMjQ3LCA4NywgMjYsIDEsIDI1NCwgMjMsIDIzNCwgNiwgMjYsIDQsIDEsIAotICAgIDI1NCwgMjMsIDIzNCwgNiwgMjYsIDEsIDIxOCwgMTM3LCAyNiwgNCwgMSwgMjE4LCAxMzcsIDI2LCAxLCAyNDcsIDIyNywgCi0gICAgMjYsIDQsIDEsIDI0NywgMjI3LCAyNiwgMSwgMjM0LCA2LCAyNiwgNCwgMSwgMjM0LCA2LCAyNiwgMSwgMjIxLCAyNDYsIDI2LCAKLSAgICA0LCAxLCAyMjEsIDI0NiwgODEsIDYsIDEsIDIyMCwgNTUsIDgxLCA0LCAxLCAyMjAsIDU1LCA4MSwgNiwgMSwgMjQ0LCAxNDAsIAotICAgIDgxLCA0LCAxLCAyNDQsIDE0MCwgODEsIDYsIDEsIDIzNCwgMTE3LCA4MSwgNCwgMSwgMjM0LCAxMTcsIDgxLCA2LCAxLCAKLSAgICAyNDEsIDQ1LCA4MSwgNCwgMSwgMjQxLCA0NSwgODEsIDYsIDEsIDI0MywgMTAyLCA4MSwgNCwgMSwgMjQzLCAxMDIsIDgxLCAKLSAgICA2LCAxLCAyMjAsIDIyLCA4MSwgNCwgMSwgMjIwLCAyMiwgODEsIDYsIDEsIDI0OCwgNjksIDgxLCA0LCAxLCAyNDgsIDY5LCAKLSAgICAyNiwgMjM0LCAyMjMsIDg3LCAyNiwgMjIzLCAzOCwgODcsIDI2LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCAxLCAyMTAsIAotICAgIDIyNCwgMjYsIDYsIDIxNiwgMTgwLCA4NywgMjYsIDIzMiwgODMsIDI0NSwgMTAxLCA4NywgMjYsIDIyMywgNDksIDIzMiwgCi0gICAgODMsIDI0NSwgMTAxLCA4NywgMjYsIDYsIDEsIDIyMCwgNywgMjYsIDQsIDEsIDIyMCwgNywgMjYsIDYsIDIzMiwgODMsIAotICAgIDIxOSwgMTc4LCA4NywgMjYsIDYsIDEsIDIyMSwgMjQzLCAyNiwgNCwgMSwgMjIxLCAyNDMsIDI2LCAyMjMsIDM4LCAyLCAKLSAgICAyMTgsIDEwMywgODcsIDI2LCA2LCAyMjMsIDQ5LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA2LCAyNDYsIDExOCwgCi0gICAgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgNiwgMjIzLCA0OSwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgCi0gICAgMzMsIDYsIDEsIDIzNiwgNjEsIDIsIDI0MiwgMTM2LCAzMywgNiwgMSwgMjM1LCAxODksIDMzLCA2LCAxLCAyNDcsIDE2MiwgCi0gICAgMzMsIDYsIDEsIDI0MiwgMTg3LCAzMywgNiwgMSwgMjE0LCAyMDIsIDIzNiwgNjAsIDMzLCA2LCAxLCAyNDYsIDM2LCAzMywgCi0gICAgNiwgMSwgMjUxLCA3NiwgNzMsIDMzLCA2LCAxLCAyMTEsIDgsIDMzLCA2LCAxLCAyMzUsIDEyNiwgMzMsIDYsIDEsIDIzMiwgCi0gICAgMTg3LCAzMywgNiwgMSwgMjI4LCAxNzgsIDMzLCA2LCAxLCAyMTUsIDE3NCwgMzMsIDYsIDEsIDIzNCwgNDgsIDMzLCA2LCAxLCAKLSAgICAyNDAsIDE1NCwgMiwgMjQyLCAxMzYsIDMzLCA2LCAxLCAyMTksIDI1MSwgNzAsIDMzLCA2LCAxLCAyNDYsIDMyLCAzMywgNiwgCi0gICAgMSwgNjEsIDMzLCA2LCAxLCAyNTIsIDc1LCAzMywgNiwgMSwgMjEzLCAyNTUsIDMzLCA2LCAxLCAyNDIsIDIzNiwgMzMsIDYsIAotICAgIDEsIDI0OCwgOTAsIDMzLCA2LCAxLCAyMzYsIDYwLCAzMywgNiwgMSwgMjEwLCA3NCwgMzMsIDYsIDEsIDIxMCwgOTQsIDMzLCAKLSAgICA2LCAxLCA3MywgMzMsIDYsIDEsIDIxOSwgMjUxLCA3MywgMzMsIDYsIDEsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTc0LCAzMywgCi0gICAgNiwgMSwgMjQ1LCAxNTksIDMzLCA2LCAxLCAyNDUsIDE1MCwgMzMsIDYsIDEsIDc2LCAzMywgNiwgMSwgMjI1LCAyMjEsIDMzLCAKLSAgICA2LCAxLCAyNDUsIDkyLCAzMywgNiwgMSwgMjQ1LCA4MiwgMzMsIDYsIDEsIDIxNywgMjIsIDMzLCA2LCAxLCA3MCwgMzMsIDYsIAotICAgIDEsIDI0NSwgMjAyLCAzMywgNiwgMSwgMTYyLCAzMywgNiwgMSwgMjE1LCAxNzgsIDMzLCA2LCAxLCAyNTAsIDEzMSwgMzMsIAotICAgIDYsIDEsIDIyMCwgMTAyLCAzMywgNiwgMSwgMjIwLCA2NSwgMzMsIDYsIDEsIDI0MiwgMywgNTAsIDMzLCA2LCAxLCAyMTEsIAotICAgIDI3LCAzMywgNiwgMSwgMjE5LCA1MiwgNTAsIDMzLCA2LCAxLCA3NSwgMzMsIDYsIDEsIDIxMCwgMjEyLCAzMywgNiwgMSwgCi0gICAgMTkxLCAzMywgNCwgMSwgNjEsIDMzLCA0LCAxLCAyNTIsIDc1LCAzMywgNCwgMSwgMjEzLCAyNTUsIDMzLCA0LCAxLCAyNDIsIAotICAgIDIzNiwgMzMsIDQsIDEsIDI0OCwgOTAsIDMzLCA0LCAxLCAyMzYsIDYwLCAzMywgNCwgMSwgMjEwLCA3NCwgMzMsIDQsIDEsIAotICAgIDIxMCwgOTQsIDMzLCA0LCAxLCA3MywgMzMsIDQsIDEsIDIxOSwgMjUxLCA3MywgMzMsIDQsIDEsIDE3NiwgMzMsIDQsIDEsIAotICAgIDI0NSwgMTc0LCAzMywgNCwgMSwgMjQ1LCAxNTksIDMzLCA0LCAxLCAyNDUsIDE1MCwgMzMsIDQsIDEsIDc2LCAzMywgNCwgMSwgCi0gICAgMjI1LCAyMjEsIDMzLCA0LCAxLCAyNDUsIDkyLCAzMywgNCwgMSwgMjQ1LCA4MiwgMzMsIDQsIDEsIDIxNywgMjIsIDMzLCA0LCAKLSAgICAxLCA3MCwgMzMsIDQsIDEsIDI0NSwgMjAyLCAzMywgNCwgMSwgMTYyLCAzMywgNCwgMSwgMjE1LCAxNzgsIDMzLCA0LCAxLCAKLSAgICAyNTAsIDEzMSwgMzMsIDQsIDEsIDIyMCwgMTAyLCAzMywgNCwgMSwgMjIwLCA2NSwgMzMsIDQsIDEsIDI0MiwgMywgNTAsIAotICAgIDMzLCA0LCAxLCAyMTEsIDI3LCAzMywgNCwgMSwgMjE5LCA1MiwgNTAsIDMzLCA0LCAxLCA3NSwgMzMsIDQsIDEsIDIxMCwgCi0gICAgMjEyLCAzMywgNCwgMSwgMTkxLCAzMywgNCwgMSwgMjM2LCA2MSwgMiwgMjQyLCAxMzYsIDMzLCA0LCAxLCAyMzUsIDE4OSwgCi0gICAgMzMsIDQsIDEsIDI0NywgMTYyLCAzMywgNCwgMSwgMjQyLCAxODcsIDMzLCA0LCAxLCAyMTQsIDIwMiwgMjM2LCA2MCwgMzMsIAotICAgIDQsIDEsIDI0NiwgMzYsIDMzLCA0LCAxLCAyNTEsIDc2LCA3MywgMzMsIDQsIDEsIDIxMSwgOCwgMzMsIDQsIDEsIDIzNSwgCi0gICAgMTI2LCAzMywgNCwgMSwgMjMyLCAxODcsIDMzLCA0LCAxLCAyMjgsIDE3OCwgMzMsIDQsIDEsIDIxNSwgMTc0LCAzMywgNCwgCi0gICAgMSwgMjM0LCA0OCwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDIsIDEzNiwgMzMsIDQsIDEsIDIxOSwgMjUxLCA3MCwgMzMsIAotICAgIDQsIDEsIDI0NiwgMzIsIDMzLCA2LCAxLCAyMjYsIDIwMSwgMzMsIDQsIDEsIDIyNiwgMjAxLCAzMywgNiwgMSwgMjExLCA1OSwgCi0gICAgMzMsIDQsIDEsIDIxMSwgNTksIDMzLCA2LCAxLCAyMzUsIDE4MywgNzUsIDMzLCA0LCAxLCAyMzUsIDE4MywgNzUsIDMzLCA2LCAKLSAgICAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgCi0gICAgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxODMsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIzNSwgMTgzLCAKLSAgICAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNiwgMSwgCi0gICAgMjMzLCAyMzMsIDMzLCA0LCAxLCAyMzMsIDIzMywgMzMsIDYsIDEsIDIyNCwgMTYxLCAzMywgNCwgMSwgMjI0LCAxNjEsIDMzLCAKLSAgICA2LCAxLCAyNDQsIDgyLCAzMywgNCwgMSwgMjQ0LCA4MiwgMzMsIDYsIDEsIDIzNSwgMTQ2LCAzMywgNCwgMSwgMjM1LCAxNDYsIAotICAgIDMzLCA2LCAxLCAyMzUsIDE0NywgMiwgNTIsIDI0MiwgMTM3LCAyNTUsIDE0LCAzMywgNCwgMSwgMjM1LCAxNDcsIDIsIDUyLCAKLSAgICAyNDIsIDEzNywgMjU1LCAxNCwgMzMsIDYsIDEsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjE0LCAyMDUsIDMzLCA2LCAxLCAyMjIsIAotICAgIDE4NSwgMjI2LCAyMDEsIDMzLCA0LCAxLCAyMjIsIDE4NSwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAKLSAgICA2NSwgMzMsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIDY1LCAzMywgNiwgMSwgMjI2LCAxNDAsIDMzLCA0LCAxLCAyMjYsIAotICAgIDE0MCwgMzMsIDYsIDEsIDIzNCwgNiwgMzMsIDQsIDEsIDIzNCwgNiwgMzMsIDIxNiwgMTQ2LCA1MCwgMzgsIDMzLCAyMTYsIAotICAgIDY1LCAzOCwgMzMsIDIyNiwgNjUsIDM4LCAzMywgMjQ4LCAxNTQsIDIyNSwgMTgsIDM4LCAzMywgMjI0LCAxNTUsIDIyNSwgCi0gICAgMTgsIDM4LCAzMywgMjI1LCAzLCAzOCwgMzMsIDI0MCwgMjExLCAyMTYsIDE0NiwgNTAsIDM4LCAzMywgMjMwLCAxOTEsIDUwLCAKLSAgICAzMywgNiwgMSwgMjE5LCAyNTEsIDI0MCwgMTU0LCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjE5LCAyNTEsIDI0MCwgMTU0LCAKLSAgICAyLCAyMTcsIDc3LCAzMywgNiwgMSwgMjIwLCAxNDYsIDUwLCAzMywgNCwgMSwgMjIwLCAxNDYsIDUwLCAzMywgNiwgMSwgCi0gICAgMjQ1LCA5MywgMiwgMjE2LCAxMTQsIDMzLCA0LCAxLCAyNDUsIDkzLCAyLCAyMTYsIDExNCwgMzMsIDYsIDEsIDI0MiwgMjM3LCAKLSAgICAyLCAyMTQsIDE1NiwgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyMTQsIDE1NiwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCA5MSwgCi0gICAgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgCi0gICAgMSwgMjQyLCAyMzcsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgCi0gICAgMjEwLCA3NSwgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNiwgMSwgMjM1LCAxMywgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDI0OCwgMzksIAotICAgIDMzLCA2LCAxLCAyMzUsIDEzLCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAKLSAgICAyMzUsIDEzLCAyLCA5MSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDkxLCAzMywgNiwgMSwgMjUyLCAxMjQsIDE3NiwgMzMsIDQsIAotICAgIDEsIDI1MiwgMTI0LCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0NSwgMTUxLCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNiwgMjcsIDI0NSwgMTUxLCAyNDIsIDIzNiwgMzMsIDQsIDI3LCAyNDUsIDE1MSwgMjQyLCAyMzYsIAotICAgIDMzLCA2LCAxLCAyMjUsIDIyMiwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDIyNSwgMjIyLCAyLCAyMzAsIDIyNCwgCi0gICAgMTAzLCAzMywgNiwgMSwgMjU1LCAyMCwgMTYyLCAzMywgNCwgMSwgMjU1LCAyMCwgMTYyLCAzMywgNiwgMSwgMjQ1LCA4MywgCi0gICAgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0NSwgODMsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMTcsIDIzLCAyLCAyNDgsIDM5LCAKLSAgICAzMywgNCwgMSwgMjE3LCAyMywgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxOCwgMTIxLCA3MCwgMzMsIDQsIDEsIDIxOCwgCi0gICAgMTIxLCA3MCwgMzMsIDYsIDEsIDIxOCwgMTIxLCAxMDQsIDIsIDkxLCAzMywgNCwgMSwgMjE4LCAxMjEsIDEwNCwgMiwgOTEsIAotICAgIDMzLCA2LCAxLCAyNDIsIDQ5LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgMjQ4LCAzOSwgMzMsIDYsIDI3LCAKLSAgICAyMTcsIDIzLCAyMTUsIDE3OCwgMzMsIDQsIDI3LCAyMTcsIDIzLCAyMTUsIDE3OCwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyNTAsIDEzMiwgMiwgNjcsIDkxLCAKLSAgICAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIyMCwgMzMsIDMzLCA0LCAxLCAyMjAsIDMzLCAzMywgCi0gICAgNiwgMSwgMjU1LCAyMCwgMjUwLCAxMzEsIDMzLCA0LCAxLCAyNTUsIDIwLCAyNTAsIDEzMSwgMzMsIDYsIDEsIDI1NSwgMjAsIAotICAgIDI1MCwgMTMyLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjU1LCAyMCwgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCAxLCAKLSAgICAyMjYsIDU4LCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNTEsIDE0NiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTMsIDIsIDEwMywgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTc1LCAKLSAgICAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjQ1LCAxNzUsIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMTAzLCAKLSAgICAzMywgNCwgMSwgMjQ1LCAxNTEsIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTUxLCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgCi0gICAgMjQ1LCAxNTEsIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyMzQsIDEyNywgMjUwLCAxMzEsIDMzLCA0LCAxLCAyMzQsIDEyNywgCi0gICAgMjUwLCAxMzEsIDMzLCA2LCAxLCAyNDUsIDE2MCwgMiwgMjE3LCA3NywgMzMsIDQsIDEsIDI0NSwgMTYwLCAyLCAyMTcsIDc3LCAKLSAgICAzMywgNCwgMSwgMjI2LCA1OCwgMzMsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAxLCAxMTUsIDIsIDI1MSwgCi0gICAgMTQ2LCAzMywgNiwgMSwgMTE1LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxMTUsIDIsIDI0OCwgMSwgMzMsIDYsIDI3LCAxMTUsIAotICAgIDIzNiwgNjAsIDMzLCA0LCAyNywgMTE1LCAyMzYsIDYwLCAzMywgNiwgMSwgMjM2LCA2MSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAKLSAgICAxLCAyMzYsIDYxLCAyLCAyNTEsIDE0NiwgMzMsIDYsIDEsIDIyMSwgMTk1LCAzMywgNCwgMSwgMjIxLCAxOTUsIDMzLCA2LCAKLSAgICAxLCAyMjEsIDE5NiwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjIxLCAxOTYsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDIxMCwgNzUsIAotICAgIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMSwgCi0gICAgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDI1NSwgMjAsIDI0NiwgMzYsIDMzLCA0LCAxLCAyNTUsIAotICAgIDIwLCAyNDYsIDM2LCAzMywgNiwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCAzMywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgCi0gICAgMjMyLCAzMywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDMzLCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjUyLCAxMzQsIDc2LCAzMywgCi0gICAgNCwgMSwgMjUyLCAxMzQsIDc2LCAzMywgNiwgMSwgMjUyLCAxMzQsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjUyLCAKLSAgICAxMzQsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMTYwLCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxNjAsIDIsIDI0OCwgMSwgCi0gICAgMzMsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDMzLCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMyLCAzMywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNDgsIDEsIDMzLCA0LCAxLCAxMDQsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDQsIDEsIAotICAgIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyNTAsIDEzMiwgMiwgCi0gICAgMjQ4LCAxLCAzMywgNiwgMSwgMjQyLCAyMzcsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgMjQ4LCAzOSwgCi0gICAgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIAotICAgIDI0MiwgMjM3LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgCi0gICAgMzMsIDYsIDEsIDI0MiwgNDksIDIsIDEwMywgMzMsIDQsIDEsIDI0MiwgNDksIDIsIDEwMywgMzMsIDYsIDEsIDI0MiwgNDksIAotICAgIDIsIDkxLCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgOTEsIDMzLCA2LCAxLCAyMzQsIDE0LCAyNDgsIDkwLCAzMywgNCwgMSwgCi0gICAgMjM0LCAxNCwgMjQ4LCA5MCwgMzMsIDYsIDEsIDIzNCwgMTQsIDI0NywgMTYyLCAzMywgNCwgMSwgMjM0LCAxNCwgMjQ3LCAKLSAgICAxNjIsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTAsIDI3LCAzMywgNCwgMSwgMjM0LCAxNCwgMjEwLCAyNywgMzMsIDYsIDEsIAotICAgIDIzNCwgMTQsIDI0NiwgMzAsIDMzLCA0LCAxLCAyMzQsIDE0LCAyNDYsIDMwLCAzMywgNiwgMSwgMjM0LCAxNCwgMjMyLCAKLSAgICAxODcsIDMzLCA0LCAxLCAyMzQsIDE0LCAyMzIsIDE4NywgMzMsIDYsIDEsIDIzNCwgMTQsIDIyOCwgMTc4LCAzMywgNCwgMSwgCi0gICAgMjM0LCAxNCwgMjI4LCAxNzgsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTksIDEwOSwgMzMsIDQsIDEsIDIzNCwgMTQsIDIxOSwgCi0gICAgMTA5LCAzMywgNiwgMSwgMjM0LCAxNCwgMjE2LCA2MCwgMzMsIDQsIDEsIDIzNCwgMTQsIDIxNiwgNjAsIDMzLCA2LCAxLCAKLSAgICAyMjMsIDQ5LCAyMTAsIDk0LCAzMywgNCwgMSwgMjIzLCA0OSwgMjEwLCA5NCwgMzMsIDYsIDEsIDI0NSwgMTc1LCAyLCAxMDMsIAotICAgIDMzLCA0LCAxLCAyNDUsIDE3NSwgMiwgMTAzLCAzMywgNiwgMSwgMjMyLCAyNTQsIDMzLCA0LCAxLCAyMzIsIDI1NCwgMzMsIAotICAgIDYsIDEsIDIyMywgMzksIDMzLCA0LCAxLCAyMjMsIDM5LCAzMywgNiwgMSwgMjExLCA5MiwgMzMsIDQsIDEsIDIxMSwgOTIsIAotICAgIDMzLCA2LCAxLCAyMjQsIDg4LCAzMywgNCwgMSwgMjI0LCA4OCwgMzMsIDYsIDEsIDIxMiwgMjIsIDMzLCA0LCAxLCAyMTIsIAotICAgIDIyLCAzMywgNiwgMSwgMjU0LCAxNjYsIDE3NiwgMzMsIDQsIDEsIDI1NCwgMTY2LCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE3NSwgCi0gICAgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTc1LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjQ1LCAKLSAgICAxNTEsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1MSwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIAotICAgIDIyNSwgMjIyLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjI1LCAyMjIsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMjAsIDM0LCAKLSAgICAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjIwLCAzNCwgMiwgMjQ4LCAzOSwgMTUwLCA2LCAxLCAyNTMsIDE2NCwgMTUwLCA2LCAKLSAgICAxLCAyNTIsIDM5LCAxNTAsIDYsIDEsIDI0MiwgMjAzLCAxNTAsIDYsIDEsIDI0OCwgMjIxLCAxNTAsIDYsIDEsIDI0NSwgCi0gICAgMjEzLCAxNTAsIDYsIDEsIDIxMCwgMTE2LCAxNTAsIDYsIDEsIDI0NSwgMTk3LCAxNTAsIDYsIDEsIDI0NSwgNjUsIDE1MCwgCi0gICAgNiwgMSwgMTExLCAxNTAsIDYsIDEsIDIxMCwgNzQsIDE1MCwgNiwgMSwgMjM1LCAyMjcsIDE1MCwgNiwgMSwgMjMyLCAxOTAsIAotICAgIDE1MCwgNiwgMSwgMjExLCAxNjAsIDE1MCwgNiwgMSwgMjUxLCAzMywgMTUwLCA2LCAxLCAyMzQsIDE2NSwgMTUwLCA2LCAxLCAKLSAgICAyNDEsIDY4LCAxNTAsIDYsIDEsIDIzNSwgMTQxLCAxNTAsIDYsIDEsIDI0MiwgMjQ2LCAxNTAsIDYsIDEsIDI1MCwgMTI2LCAKLSAgICAxNTAsIDYsIDEsIDIzMSwgNTgsIDE1MCwgNiwgMSwgMjExLCA4LCAxNTAsIDYsIDEsIDIyOCwgMzksIDE1MCwgNiwgMSwgCi0gICAgMjIwLCAxMDIsIDE1MCwgNiwgMSwgMjEzLCAxMzgsIDE1MCwgNiwgMSwgMjUwLCAxNTcsIDE1MCwgNiwgMSwgMjI1LCAyMDUsIAotICAgIDE1MCwgNiwgMSwgMjM1LCAxMTAsIDE1MCwgNiwgMSwgMjA1LCAxNTAsIDYsIDEsIDIyMSwgMTYxLCAxNTAsIDYsIDEsIDIxMywgCi0gICAgMTc5LCAxNTAsIDYsIDEsIDIxNiwgNjIsIDE1MCwgNiwgMSwgMjIzLCA5NSwgMTUwLCA2LCAxLCAyNDksIDIzOCwgMTUwLCA2LCAKLSAgICAxLCAyMTAsIDI0OSwgMTUwLCA2LCAxLCAyMjUsIDQ2LCAxNTAsIDYsIDEsIDIzNCwgMTc2LCAxNTAsIDYsIDEsIDIyNiwgCi0gICAgMjIyLCAxNTAsIDYsIDEsIDI0NCwgMTQyLCAxNTAsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzMywgMTUwLCAyNTQsIDU3LCAKLSAgICAxNTAsIDI0NSwgMTU0LCA3OCwgMTUwLCAyNDUsIDMxLCA3OCwgMTUwLCAyNDksIDIxOSwgMTUwLCAyMjQsIDEzLCA3OCwgCi0gICAgMTUwLCAyNTUsIDIxLCA3OCwgMTUwLCA0LCAxLCAyNTMsIDE2NCwgMTUwLCA0LCAxLCAyNTIsIDM5LCAxNTAsIDQsIDEsIAotICAgIDI0MiwgMjAzLCAxNTAsIDQsIDEsIDI0OCwgMjIxLCAxNTAsIDQsIDEsIDI0NSwgMjEzLCAxNTAsIDQsIDEsIDIxMCwgMTE2LCAKLSAgICAxNTAsIDQsIDEsIDI0NSwgMTk3LCAxNTAsIDQsIDEsIDI0NSwgNjUsIDE1MCwgNCwgMSwgMTExLCAxNTAsIDQsIDEsIDIxMCwgCi0gICAgNzQsIDE1MCwgNCwgMSwgMjM1LCAyMjcsIDE1MCwgNCwgMSwgMjMyLCAxOTAsIDE1MCwgNCwgMSwgMjExLCAxNjAsIDE1MCwgCi0gICAgNCwgMSwgMjUxLCAzMywgMTUwLCA0LCAxLCAyMzQsIDE2NSwgMTUwLCA0LCAxLCAyNDEsIDY4LCAxNTAsIDQsIDEsIDIzNSwgCi0gICAgMTQxLCAxNTAsIDQsIDEsIDI0MiwgMjQ2LCAxNTAsIDQsIDEsIDI1MCwgMTI2LCAxNTAsIDQsIDEsIDIzMSwgNTgsIDE1MCwgCi0gICAgNCwgMSwgMjExLCA4LCAxNTAsIDQsIDEsIDIyOCwgMzksIDE1MCwgNCwgMSwgMjIwLCAxMDIsIDE1MCwgNCwgMSwgMjEzLCAKLSAgICAxMzgsIDE1MCwgNCwgMSwgMjUwLCAxNTcsIDE1MCwgNCwgMSwgMjI1LCAyMDUsIDE1MCwgNCwgMSwgMjM1LCAxMTAsIDE1MCwgCi0gICAgNCwgMSwgMjA1LCAxNTAsIDQsIDEsIDIyMSwgMTYxLCAxNTAsIDQsIDEsIDIxMywgMTc5LCAxNTAsIDQsIDEsIDIxNiwgNjIsIAotICAgIDE1MCwgNCwgMSwgMjIzLCA5NSwgMTUwLCA0LCAxLCAyNDksIDIzOCwgMTUwLCA0LCAxLCAyMTAsIDI0OSwgMTUwLCA0LCAxLCAKLSAgICAyMjUsIDQ2LCAxNTAsIDQsIDEsIDIzNCwgMTc2LCAxNTAsIDQsIDEsIDIyNiwgMjIyLCAxNTAsIDQsIDEsIDI0NCwgMTQyLCAKLSAgICAxNTAsIDQsIDI3LCAyNDUsIDIxNCwgMjEwLCAyNDksIDE1MCwgMjQzLCAyMjksIDIxOCwgMTI5LCAxNTAsIDI0MCwgMTY4LCAKLSAgICAxNTAsIDI0NiwgOTUsIDUwLCA5NCwgMjU1LCAxNSwgMjQ1LCA1NywgOTQsIDI1NSwgMTUsIDIyMSwgMTYyLCA5NCwgMjU1LCAKLSAgICAxNSwgMjIwLCA4OCwgOTQsIDI1NSwgMTUsIDIxMCwgMTA0LCAyMjQsIDcxLCA5NCwgMjU1LCAxNSwgMjEwLCAxMDQsIDI0MywgCi0gICAgMTI1LCA5NCwgMjU1LCAxNSwgMjE2LCA3NSwgOTQsIDI1NSwgMTUsIDIyMywgNDcsIDk0LCAyNTUsIDE1LCAyMTAsIDEwMywgCi0gICAgOTQsIDI1NSwgMTUsIDIyNSwgMjQ1LCA5NCwgMjU1LCAxNSwgMjExLCAyMCwgOTQsIDI1NSwgMTUsIDIxNiwgMjE0LCA5NCwgCi0gICAgMjU1LCAxNSwgMjQzLCA0MSwgOTQsIDI1NSwgMTUsIDI0MywgNDIsIDIzMCwgNjksIDk0LCAyNTUsIDE1LCAyNDMsIDM5LCAKLSAgICA5NCwgMjU1LCAxNSwgMjI0LCA3MiwgMjI2LCAxNiwgOTQsIDI1NSwgMTUsIDIxNiwgMjUzLCAyNDMsIDU2LCA5NCwgMjU1LCAKLSAgICAxNSwgMjI1LCAyMjYsIDk0LCAyNTUsIDE1LCAyNTMsIDIwMCwgMjQyLCA0MSwgOTQsIDI1NSwgMTUsIDIzMCwgNzksIDk0LCAKLSAgICAyNTUsIDE1LCAyMzEsIDIwOCwgOTQsIDI1NSwgMTUsIDIzMSwgNDksIDk0LCAyNTUsIDE1LCAyMzEsIDUwLCAyMzQsIDE3NywgCi0gICAgOTQsIDI1NSwgMTUsIDI0OCwgMTYzLCA5NCwgMjU1LCAxNSwgMjI0LCA4MywgOTQsIDI1NSwgMTUsIDIxNiwgMjUzLCAyMjQsIAotICAgIDY3LCA5NCwgMjU1LCAxNSwgMjExLCAzMCwgMjUyLCA0MCwgMjEwLCAyMzAsIDk0LCAyNTUsIDE1LCAyMjYsIDIwNywgOTQsIAotICAgIDI1NSwgMTUsIDIzNiwgMTksIDk0LCAyNTUsIDE1LCAyNDgsIDcwLCA5NCwgMjU1LCAxNSwgMjEwLCAzMywgOTQsIDE2NCwgCi0gICAgMjMxLCAxNDMsIDI1MCwgMzUsIDk0LCAyMjUsIDExLCAyMjAsIDM2LCA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyMSwgMTYyLCAKLSAgICA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyNSwgMjM5LCA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyNCwgNzYsIDk0LCAyMjUsIAotICAgIDExLCAyNDEsIDE1OCwgOTQsIDIyNSwgMTEsIDIxNSwgMTc2LCA5NCwgMjI1LCAxMSwgMjIxLCAxNjIsIDk0LCAyMjUsIDExLCAKLSAgICAyMjUsIDIzOSwgOTQsIDIyNSwgMTEsIDIyNCwgNzYsIDk0LCAyMjUsIDExLCAyNDEsIDYxLCA5NCwgMjI1LCAxMSwgMjQxLCAKLSAgICA2MiwgMjQxLCAyNTIsIDMxLCAyMTQsIDMsIDk0LCAyMjUsIDExLCAyMjQsIDE3LCA5NCwgMjI1LCAxMSwgMjQ4LCAyMDgsIAotICAgIDE3NywgMjMxLCAxNzEsIDk0LCAyMjUsIDExLCAyMzEsIDM4LCA5NCwgMjI0LCAxNDEsIDIzMSwgMTY4LCA5NCwgMjI1LCAxMSwgCi0gICAgMjIzLCAxNjksIDk0LCAyMjQsIDE0MSwgMjI1LCAyNDcsIDk0LCAyMjUsIDExLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIAotICAgIDIyNSwgMTEsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDIyNCwgMTQxLCAyMTksIDUzLCAyMjUsIDI0MSwgOTQsIDE2NCwgCi0gICAgMjE0LCAxNjAsIDI0NywgMTIwLCA5NCwgMTY0LCAyMzIsIDEwOCwgMjQ3LCAxMjAsIDk0LCAyMjQsIDE0MSwgMjI3LCAxOTUsIAotICAgIDI0MiwgNDAsIDk0LCAyMjUsIDExLCAyMjQsIDc3LCAyMjQsIDcxLCA5NCwgMSwgMjU0LCAxNzAsIDk0LCAxLCAyNTIsIDI4LCAKLSAgICA5NCwgMSwgMjQyLCAyMDEsIDk0LCAxLCAyNDgsIDE4OSwgOTQsIDEsIDI0MSwgMjM4LCA5NCwgMSwgMjE0LCAzLCA5NCwgMSwgCi0gICAgMjEwLCA5NywgOTQsIDEsIDI0MSwgMTk3LCA5NCwgMSwgMjE2LCAyMzAsIDk0LCAxLCAyMTAsIDIzMywgOTQsIDEsIDQwLCAKLSAgICAyMzQsIDI1MCwgOTQsIDEsIDIzNCwgMjUwLCA5NCwgMSwgMjMzLCA5NCwgOTQsIDEsIDQwLCAyMzEsIDY1LCA5NCwgMSwgCi0gICAgMjMxLCA2NSwgOTQsIDEsIDQwLCAyMjcsIDE5NCwgOTQsIDEsIDIyNywgMTk0LCA5NCwgMSwgMjIxLCAyNDksIDk0LCAxLCAKLSAgICAyNTMsIDE2MiwgOTQsIDEsIDQwLCAyMjUsIDIyMSwgOTQsIDEsIDIyNSwgMjIxLCA5NCwgMSwgNDAsIDIxNSwgMTc5LCA5NCwgCi0gICAgMSwgMjE1LCAxNzksIDk0LCAxLCAyMjQsIDM5LCA5NCwgMSwgMjIzLCA2NywgOTQsIDEsIDIyMCwgMjAsIDk0LCAxLCAyMTcsIAotICAgIDM4LCA5NCwgMjcsIDIxMSwgNiwgNTIsIDIxNCwgMywgOTQsIDI3LCAyMTEsIDYsIDIxNCwgNCwgMjEwLCAyMzMsIDk0LCAyNywgCi0gICAgMjExLCA2LCA1MiwgMjEwLCAyMzMsIDk0LCAyMjQsIDE0MSwgMjQzLCA0MSwgOTQsIDIyNCwgMTQxLCAyNDMsIDM5LCAxMCwgCi0gICAgNTQsIDUwLCAxMCwgNSwgMjIxLCAyNDIsIDEwLCAyNDQsIDMwLCAyMzEsIDE1NCwgMTAsIDUsIDIyMiwgMjMsIDEwLCA1LCAKLSAgICAyMjEsIDI0NSwgMjU0LCAzNywgMjQ5LCAxMDksIDIyMiwgMTkzLCAyNTQsIDM3LCAyNDQsIDQsIDIyMiwgMTkzLCAxMCwgCi0gICAgMjIzLCAxMzQsIDI1NCwgMzcsIDIyNSwgMTgzLCAyMzAsIDE5MywgNTAsIDI1NCwgMzcsIDIyNSwgMTgzLCAyMTYsIDI0OCwgCi0gICAgMjE2LCAxNDgsIDUwLCAyNTQsIDIyMSwgNTAsIDEwLCAyNDksIDIxOSwgMTAsIDI0OCwgMTUwLCAyMjAsIDEzNywgMTAsIAotICAgIDIyNSwgMTMsIDIxMywgMjQxLCA1MCwgMTAsIDUsIDIzMCwgMTc0LCAxMCwgNSwgMjIyLCAzLCAyNTQsIDE3MiwgMjEyLCA0NSwgCi0gICAgMTAsIDUsIDI1NCwgMTcyLCAyNTMsIDIyMSwgMTAsIDUsIDIyMywgMTY3LCAyNTQsIDE3MSwgMTAsIDUsIDIyMywgMTc1LCAKLSAgICAyNTQsIDE1MiwgMjU0LCAxMDQsIDEwLCA1LCAyMTcsIDcwLCAxMCwgNCwgMTI1LCAyMTcsIDgwLCAxMCwgNCwgMTI1LCAyNywgCi0gICAgMTEyLCAyLCAyMzMsIDEwMywgMiwgMjExLCA0MywgMTAsIDQsIDEyNSwgMjEwLCAxMDgsIDEwLCA0LCAyNDQsIDE2NSwgMTAsIAotICAgIDQsIDI0OCwgMTg0LCAxMCwgNCwgMjM0LCAyMDUsIDEwLCAyMjAsIDE1MCwgMTAsIDIxNSwgMjExLCA1OSwgMjI0LCAxNDEsIAotICAgIDc4LCAxMCwgMjI0LCAxMywgNzgsIDEwLCAxLCAyMzQsIDIwOSwgMjExLCA0MywgMTAsIDEsIDI0MiwgMTksIDEwLCAxLCAKLSAgICAxMTIsIDIsIDIzMSwgMjI4LCA0OCwgMTAsIDEsIDExMiwgMiwgMjAyLCA0OCwgMTAsIDEsIDIxMiwgMzEsIDIsIDIwMiwgNDgsIAotICAgIDEwLCAxLCAxMTIsIDIsIDIwMiwgNTEsIDEwLCAxLCA3OSwgMiwgMjAyLCA0OCwgMTAsIDEsIDI1NCwgMTcwLCAxMCwgMSwgCi0gICAgMjUyLCA1NCwgMTAsIDEsIDIxNywgOCwgMjMxLCAxNjQsIDEwLCAxLCAyMTcsIDcsIDEwLCAxLCAyMTYsIDE5MiwgMTAsIDEsIAotICAgIDIzNSwgMTIzLCAxMCwgMSwgMjQyLCAzNywgMTAsIDEsIDIzNCwgMTI5LCAxMCwgMSwgMjQ4LCAxOTUsIDEwLCAxLCAyMTYsIAotICAgIDIwMiwgMTAsIDEsIDIyMywgOTUsIDEwLCAxLCAyMTAsIDEwOCwgMTAsIDEsIDIyMSwgMTY2LCAxMCwgMSwgMjIwLCA1OSwgCi0gICAgMTAsIDEsIDIyMiwgMjYsIDEwLCAxLCAyNDgsIDIxNiwgMTAsIDEsIDIxNywgODAsIDEwLCAxLCAyMTAsIDExMSwgMTAsIDEsIAotICAgIDI1NCwgMTk2LCAxMCwgMSwgMjQyLCAyNDQsIDEwLCAxLCAyMzQsIDE3NSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjM0LCAKLSAgICAxNzUsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDc5LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDEzNCwgMTcwLCA0OCwgMTAsIAotICAgIDIxNywgNDMsIDEwLCAxLCAyNDQsIDE0MiwgMTAsIDEsIDIyNCwgODEsIDEwLCAxLCAyMzQsIDI1MCwgMTAsIDEsIDIzMywgCi0gICAgMTAyLCAxMCwgMSwgMjMxLCA3OCwgMTAsIDEsIDIyOCwgNjIsIDEwLCAxLCAyNDEsIDIxOCwgMTAsIDEsIDIxMiwgMzAsIDEwLCAKLSAgICAxLCAxMTIsIDIzMSwgMTkyLCAxMCwgMSwgMjExLCA0MywgMTAsIDI0NCwgMTYzLCAxMCwgMjQ4LCAxODIsIDEwLCAyMzQsIAotICAgIDIwMywgMTAsIDI0NCwgMTY1LCAxMCwgMjQ4LCAxODQsIDEwLCAyMzQsIDIwNSwgMTAsIDIyMCwgOTMsIDEwLCAyMTgsIDQ1LCAKLSAgICAxMCwgMjMxLCAyMjYsIDQ4LCAxMCwgMjAyLCA0OCwgMTAsIDIwMiwgNTEsIDEwLCAyMTgsIDY1LCAyNTQsIDE3MCwgMTAsIAotICAgIDIzNSwgMTkzLCAyNDgsIDE4NCwgMTAsIDE2NCwgMjI4LCA2MywgMjQyLCAyMTgsIDEwLCAyMDksIDI1NSwgMTAsIDI1LCA1LCAKLSAgICA0LCAyMTQsIDEwNiwgNDgsIDEwLCAyNSwgNSwgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA0OCwgMTAsIDI1LCA1LCA1OSwgNTEsIAotICAgIDEwLCAyMjMsIDQ5LCAyNDgsIDE4NCwgMTAsIDI0NCwgMTY2LCAyLCAxMTMsIDI0NywgMTE4LCAxMCwgMjEyLCAzMiwgMjAyLCAKLSAgICA1MSwgMjU0LCAzNywgMjEsIDIxMCwgODYsIDI1NCwgMzcsIDIxLCAxMTAsIDI1NCwgMzcsIDIxLCAxMDUsIDI1NCwgMzcsIAotICAgIDIxLCAxNTgsIDI1NCwgMzcsIDIxLCAxNjEsIDI1NCwgMzcsIDIxLCAxODksIDI1NCwgMzcsIDIxLCAxOTQsIDI1NCwgMzcsIAotICAgIDIxLCAxOTgsIDI1NCwgMzcsIDIxLCAxOTUsIDI1NCwgMzcsIDIxLCAyMDAsIDEwLCAyMjUsIDE4MiwgNTAsIDEwLCAyNDgsIAotICAgIDgzLCAyMjAsIDEzNywgMTAsIDIxNiwgMTQ2LCAyMjAsIDEzNywgMTAsIDI0NCwgODEsIDIyNSwgOSwgMjE4LCAxNTYsIDEwLCAKLSAgICAxLCAyNDcsIDExOSwgMjUyLCA1NCwgMTAsIDEsIDI0NywgMTE5LCAyMjQsIDgxLCAxMCwgMSwgMjE4LCAyMywgMjU0LCAxNzAsIAotICAgIDEwLCAxLCAxMTIsIDIxMiwgNDYsIDEwLCAxLCAxMTIsIDIsIDIxMiwgMzIsIDIwMiwgNDgsIDEwLCAxLCAxMTIsIDIsIDIxMiwgCi0gICAgMzIsIDIwMiwgNTEsIDEwLCAxLCAxMjUsIDI0MiwgMTksIDEwLCAxLCAxMjUsIDIwMiwgMjU0LCAxNzAsIDEwLCAxLCAxMjUsIAotICAgIDIwMiwgMjEyLCAzMCwgMTAsIDEsIDEwNCwgMiwgMjAyLCA0OCwgMTAsIDEsIDEyNSwgMjAyLCAyMTEsIDQzLCAxMCwgMSwgCi0gICAgMjE1LCAxNDgsIDEwLCAxLCAyMTUsIDE0NiwgMTAsIDEsIDI1MiwgNjQsIDEwLCAxLCAyMTcsIDgsIDIsIDIyMiwgMjMzLCAKLSAgICAxMCwgMSwgMjE3LCA4LCAyLCAxMzQsIDE3MCwgNzcsIDI0NiwgMTAzLCAxMCwgMSwgMjI1LCAyMDUsIDEwLCAxLCAyMTcsIDUsIAotICAgIDEwLCAxLCAyNTIsIDUyLCAxMCwgMSwgMTIyLCAyLCAyMDIsIDQ4LCAxMCwgMSwgMTIyLCAyLCAxMTMsIDE3MCwgNjcsIDQ4LCAKLSAgICAxMCwgMSwgMjI3LCAxNTMsIDEwLCAxLCAyNDYsIDQzLCAxMCwgMSwgMTIyLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIAotICAgIDI2LCAxMCwgMSwgMjE3LCAyNCwgMTAsIDEsIDI0OCwgMTMwLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDIyMiwgMjMzLCAxMCwgMSwgCi0gICAgMjQ4LCAxOTYsIDIsIDU5LCA1MSwgMTAsIDEsIDI0OCwgMTk2LCAyLCA1OSwgMjUyLCA0MywgMjIsIDQsIDIxNywgODAsIDEwLCAKLSAgICAxLCAyNDgsIDIwMSwgMTAsIDEsIDI0OCwgMTMyLCAxMCwgMSwgMjQ2LCA3MCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAxMzQsIAotICAgIDE3MCwgNzcsIDI0NiwgMTAzLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyMjIsIDE3MSwgCi0gICAgMTAsIDEsIDIyMywgOTYsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMjMsIAotICAgIDk2LCAyLCA1OSwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA1OSwgCi0gICAgMjUyLCA0MywgMjIsIDU5LCA0OCwgMTAsIDEsIDIyMywgOTYsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIzNSwgMTIwLCAKLSAgICAxMCwgMSwgMjIzLCA5NiwgMiwgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCA1OSwgMjUyLCA0MywgMjIsIAotICAgIDU5LCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyMjEsIDE2NywgMiwgMTM0LCAxNzAsIAotICAgIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMjIsIDI3LCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAyMjIsIAotICAgIDI3LCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIDgxLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgCi0gICAgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDU5LCAyMzAsIAotICAgIDEwOSwgNTEsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDUxLCAxMCwgMSwgMjEzLCAyNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgCi0gICAgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjI1LCAyMDMsIDEwLCAxLCAyMjQsIDgyLCAyLCA1OSwgNDgsIDEwLCAxLCAyMjQsIDgyLCAKLSAgICAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMzQsIDE3NCwgMTAsIDEsIDIxNywgMjUwLCAyMzQsIDI1MCwgMTAsIDEsIDIzNCwgCi0gICAgMjUxLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIzNCwgMjUxLCAyLCA1OSwgNDgsIDEwLCAxLCAyMjksIDc5LCAxMCwgMSwgMjM0LCAKLSAgICAyNTEsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDI0MywgMTIyLCAxMCwgMSwgMjQzLCAxMjMsIDIsIDIyMiwgMjMzLCAxMCwgCi0gICAgMSwgMjI5LCAyLCAxMCwgMSwgMjQzLCAxMjMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDI0MiwgMTAxLCAxMCwgMSwgMjQzLCAKLSAgICAxMjMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIzMywgMTAzLCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIzMywgMTAzLCAKLSAgICAyLCA1OSwgNDgsIDEwLCAxLCAyMzMsIDEwMywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjMzLCAxMDMsIDIsIDEzNCwgCi0gICAgMTcwLCA1MSwgMTAsIDEsIDIyOCwgNjMsIDIsIDU5LCA1MSwgMTAsIDEsIDIyOCwgNjMsIDI0MiwgMjE4LCAxMCwgMSwgMjIyLCAKLSAgICAyMTQsIDEwLCAxLCAyMjgsIDYzLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIyOCwgNjMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MSwgMTAsIDEsIDIxNywgMjcsIDIsIDU5LCA0OCwgMTAsIDEsIDI0MSwgMjE5LCAyLCA3OSwgCi0gICAgNDgsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzEsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDIsIDIwMiwgNDgsIDEwLCAKLSAgICAxLCAyMTcsIDgsIDIzMSwgMTY1LCAyNDIsIDE3MSwgMTAsIDEsIDIxMiwgMzEsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjM0LCAKLSAgICA3MywgMjI2LCAyMzQsIDEwLCAxLCAyMjYsIDIzNCwgMTAsIDEsIDcwLCAxMCwgMSwgMjEwLCAyMTIsIDEwLCAxLCAyMzQsIAotICAgIDczLCAyMTAsIDIxMiwgMTAsIDEsIDIxMiwgMzEsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIxMywgMjU1LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDIxMSwgNDMsIDEwLCAxLCA3OSwgMiwgMjE3LCA3NywgMTAsIDEsIDc5LCAyLCA0LCAyMTQsIDEwNSwgMTAsIAotICAgIDEsIDIxMiwgMzEsIDIsIDU5LCA0OCwgMTAsIDEsIDc1LCAxMCwgMSwgNzksIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDc5LCAKLSAgICAyNTIsIDEzMiwgMTAsIDEsIDc5LCAyNTIsIDEzMywgMiwgMjAyLCA0OCwgMTAsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTAsIDEsIAotICAgIDI1NCwgMjQzLCAxMCwgNCwgMTI1LCAyNywgMjIyLCAyNywgMiwgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTIsIDEwLCA0LCAKLSAgICAxMjUsIDI3LCAyMjQsIDgyLCAyLCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MiwgMTAsIDQsIDEyNSwgNjYsIDY1LCAxNywgCi0gICAgMTAsIDQsIDEyNSwgMjMzLCAxMDMsIDI1NCwgMTcwLCAxMCwgNCwgMTI1LCAyMzUsIDEyMywgMTAsIDQsIDEyNSwgMTM0LCAKLSAgICAyNDcsIDExOCwgMTAsIDQsIDEyNSwgMjIxLCAxNjYsIDEwLCAyNDUsIDE0MywgNjQsIDI1MywgMTY2LCAxMCwgMjE4LCAxNTIsIAotICAgIDY0LCAyMjIsIDEzOCwgMjQ1LCAxNzUsIDI0MSwgMTU1LCAxMCwgNCwgMTI1LCAyMjIsIDE4MywgMjEwLCA4NiwgMTAsIDQsIAotICAgIDEyNSwgMjE0LCAxNTksIDIyMywgMTE1LCAyMTAsIDg2LCAxMCwgNCwgMTI1LCAyNDcsIDExOSwgMjQxLCAyMzYsIDY0LCAKLSAgICAyMzQsIDEyOSwgMTAsIDQsIDEyNSwgNjYsIDUzLCAxNywgMTAsIDQsIDEyMSwgMjIxLCAxNjYsIDEwLCA0LCAxMjUsIDIzMSwgCi0gICAgMjI3LCAxMCwgNCwgMjEyLCAzMCwgMTAsIDQsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIAotICAgIDIyOCwgNjIsIDEwLCAyMjUsIDQxLCA2NCwgMjIyLCAxMywgMTAsIDI0NSwgMTUyLCAyNTAsIDE3NSwgMTIxLCAyMTgsIDEyOSwgCi0gICAgMTAsIDI0NSwgMTUyLCAyNTAsIDE3NSwgMTI1LCAyMTgsIDEyOSwgMTAsIDIyMiwgMTgzLCAxMjUsIDIxOCwgMTMwLCAyLCAKLSAgICAyNDQsIDEwNCwgMjUwLCAxNzQsIDEwLCA0LCAxMjEsIDIzMSwgNzgsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMjM1LCAxOTMsIAotICAgIDIxNCwgMTA1LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMjEwLCA4NiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEwNSwgMjQ1LCAyMiwgCi0gICAgMjU0LCAzNywgMjEsIDE1OCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE2MSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE4OSwgCi0gICAgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE5NCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE5OCwgMjQ1LCAyMiwgMjU0LCAzNywgCi0gICAgMjEsIDE5NSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDIwMCwgMTAsIDEsIDIyMCwgNjAsIDIsIDU5LCA1MSwgMTAsIDEsIAotICAgIDI0OCwgMjE3LCAyLCA1OSwgNTEsIDEwLCAxLCAyNDIsIDI0NSwgMiwgNTksIDUxLCAxMCwgNSwgMjE5LCAxNTgsIDI1NCwgCi0gICAgMTI2LCAxMCwgNSwgMjE5LCAxNTgsIDIyNCwgMjM1LCAyMzEsIDU4LCAxMCwgMSwgMjQxLCAyMTksIDIsIDIzNSwgMTkzLCAKLSAgICAyMTQsIDEwNSwgMTg4LCAyNDUsIDE0MywgNjQsIDIyNiwgMTQsIDE4OCwgMjE4LCAxOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAxODgsIDIxOCwgNjcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTg4LCAyMTgsIDE5LCAyNDksIDIyNiwgMTg4LCAyMTgsIDY3LCAKLSAgICAyNDksIDIyNiwgMTg4LCAyMDMsIDI0OSwgMjI2LCAxODgsIDI0OSwgMjI3LCAyMTksIDEwNiwgMjMzLCA0NiwgMTg4LCAyNDksIAotICAgIDIyNywgMjE5LCAxMDYsIDIyMiwgMjUxLCAxODgsIDIxOCwgMTksIDI0OSwgMjI3LCAyMTksIDEwNiwgMjMzLCA0NiwgMTg4LCAKLSAgICAyMTgsIDY3LCAyNDksIDIyNywgMjE5LCAxMDYsIDIyMiwgMjUxLCAxODgsIDI0OSwgMTgwLCAxODgsIDI0MiwgMSwgMjI2LCAKLSAgICAyNTAsIDE4OCwgMjQyLCAxLCAyMzEsIDM2LCAxODgsIDI0MiwgMSwgMjUzLCAyMTgsIDE4OCwgMjU1LCAyMSwgNzgsIDE4OCwgCi0gICAgMSwgMjU0LCAxNzQsIDE4OCwgMSwgMjE4LCAyMywgMjU0LCAxNzQsIDE4OCwgMSwgMjUyLCAyNSwgMTg4LCAxLCAyNDMsIAotICAgIDExMywgMTg4LCAxLCAyNDMsIDExNCwgMjQzLCA5MSwgMTg4LCAxLCAyNDgsIDE5MiwgMTg4LCAxLCAyNDcsIDExOSwgMjQ4LCAKLSAgICAxOTMsIDIyMiwgMjI5LCAxODgsIDEsIDI0MSwgMjM4LCAxODgsIDEsIDIxMiwgMzAsIDE4OCwgMSwgMjEwLCAxMDgsIDE4OCwgCi0gICAgMSwgMjQxLCAxOTUsIDE4OCwgMSwgMjE2LCAyMjYsIDE4OCwgMSwgMjE2LCAyMjcsIDI0MywgOTEsIDE4OCwgMSwgMjEwLCAKLSAgICAxOTksIDE4OCwgMSwgMjEwLCAyMDAsIDI0MSwgMjM4LCAxODgsIDEsIDIzNCwgMjI1LCAxODgsIDEsIDIzMywgMTAxLCAxODgsIAotICAgIDEsIDIzMCwgMTkwLCAxODgsIDEsIDIyNywgMTk0LCAxODgsIDEsIDIyMCwgMTQzLCAxODgsIDEsIDQwLCAyMjAsIDE0MywgCi0gICAgMTg4LCAxLCA3NSwgMTg4LCAxLCAyMjUsIDIyMSwgMTg4LCAxLCAyMjMsIDQ5LCAyMjUsIDIyMSwgMTg4LCAxLCAyMjIsIDI0LCAKLSAgICAxODgsIDEsIDIyNCwgNzUsIDE4OCwgMSwgMjIyLCAyMjksIDE4OCwgMSwgMjIwLCAyMCwgMTg4LCAxLCAyMTcsIDM2LCAxODgsIAotICAgIDEsIDIyNSwgMTY5LCAyNTIsIDEyLCAxODgsIDEsIDIyNSwgMTY5LCAyNDIsIDI0MiwgMTg4LCAxLCAyMjUsIDE2OSwgMjQ4LCAKLSAgICAyMCwgMTg4LCAyMjQsIDE1MSwgNDgsIDE4OCwgMjI0LCAxNTEsIDUxLCAxODgsIDIyNCwgMTUxLCAyNDYsIDExNywgMTg4LCAKLSAgICAyMTAsIDE3LCA0OCwgMTg4LCAyMTAsIDE3LCA1MSwgMTg4LCAyMTAsIDE3LCAyNDYsIDExNywgMTg4LCAyMjMsIDEzMSwgNDgsIAotICAgIDE4OCwgMjIzLCAxMzEsIDUxLCAxODgsIDI0NiwgMTE4LCAyMTAsIDI0LCAyNDEsIDQ0LCAxODgsIDI0NiwgMTE4LCAyMTAsIAotICAgIDI0LCAyNTQsIDEwNSwgMTg4LCAyNDEsIDI0MSwgNDgsIDE4OCwgMjQxLCAyNDEsIDUxLCAxODgsIDI0MSwgMjQwLCAyNDYsIAotICAgIDExNywgMTg4LCAyNDUsIDc5LCA0OCwgMTg4LCAyNDUsIDc5LCA1MSwgMTg4LCAyMjIsIDEwNywgMTg4LCAyNDQsIDEzNiwgCi0gICAgMjQ3LCAxMjAsIDE4OCwgMjIzLCAyNDgsIDE4OCwgMjIyLCAxMzQsIDE4OCwgMTEzLCA2NywgMTcwLCA0OCwgMTg4LCAxMTMsIAotICAgIDY3LCAxNzAsIDUxLCAxODgsIDEzNCwgMTcwLCA0OCwgMTg4LCAxMzQsIDE3MCwgNTEsIDE4OCwgMjI2LCAyNDgsIDIzMiwgCi0gICAgMjE0LCA0OCwgMTg4LCAyMjYsIDI0OCwgMjMyLCAyMTQsIDUxLCAxODgsIDIzMCwgNTYsIDE4OCwgMjUyLCAxMzEsIDE4OCwgCi0gICAgMSwgMjE5LCA0OSwgMjEwLCA4MCwgMTg4LCAxLCAyMTksIDQ5LCAyMzQsIDEyMiwgMTg4LCAxLCAyMTksIDQ5LCAyNDQsIAotICAgIDE1NCwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyNDAsIDI1MCwgNTEsIDEwLCAxLCAyNTIsIDU1LCAyLCA1OSwgCi0gICAgMjUyLCA0MywgMjIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCAKLSAgICA1MSwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCAyNTIsIDQzLCAyMiwgMTEzLCAxNzAsIAotICAgIDQ4LCAxMCwgMSwgMjUyLCA1NSwgMiwgMTEzLCAxNzAsIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDEwLCAxLCAyNTIsIDU1LCAyLCAKLSAgICAyMzUsIDE5MywgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMjUyLCA1NSwgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAxMjIsIDIsIAotICAgIDExMywgMTcwLCA0OCwgMTAsIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIDUxLCAxMCwgMSwgMjQ4LCAKLSAgICAxOTYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgMjUyLCA0MywgMjIsIDQsIDIxNywgODAsIDEwLCAxLCAyNDgsIDE5NiwgMiwgCi0gICAgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDIyMywgOTYsIDIsIDkxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIAotICAgIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIAotICAgIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIAotICAgIDQ4LCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDI0NCwgMTQzLCAyLCAxMzQsIDE3MCwgMjI1LCAKLSAgICA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCAyMzQsIDE3NSwgMiwgNTksIDQ4LCAxMCwgMSwgMjM0LCAxNzUsIDIsIDEzNCwgCi0gICAgMTcwLCA0OCwgMTAsIDEsIDIzNCwgMTc1LCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCA2NiwgCi0gICAgMiwgNTksIDQ4LCAxMCwgMSwgNjYsIDIsIDU5LCA1MSwgMTAsIDEsIDIyOCwgNjMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIAotICAgIDIyOCwgNjMsIDIsIDQsIDIxNywgODAsIDEwLCAxLCAyMjgsIDYzLCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIzMywgMTAzLCAKLSAgICAyLCAxMzAsIDEwLCAxLCAyMjMsIDk2LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgCi0gICAgMjAyLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAxMCwgMSwgMTIyLCAyLCA0LCAKLSAgICAxMCwgMSwgMjE3LCA4MSwgNTEsIDEwLCAxLCAxMjIsIDIsIDQsIDEwLCAxLCAyMTcsIDgxLCAyMiwgMTEzLCAyNDcsIDExOCwgCi0gICAgMTAsIDEsIDIyMSwgMTY3LCAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIDEwLCAxLCAyMjMsIDk2LCAKLSAgICAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIDEwLCAxLCAxMjIsIDIsIDQsIDEwLCAxLCAyMTcsIAotICAgIDgxLCA0OCwgMTAsIDEsIDExMiwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMywgNDgsIDEwLCAxLCAxMTIsIDIsIDI0NSwgCi0gICAgMjIsIDI1NCwgMzcsIDIxLCAxMzQsIDQ4LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMTEzLCA0OCwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEzNCwgNDgsIDEwLCAxLCAKLSAgICAyNDQsIDE2OCwgNzksIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyNDQsIDExLCA1MSwgMTAsIDEsIDIxMiwgMzEsIDIsIAotICAgIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIAotICAgIDEzNCwgNDgsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgCi0gICAgNzksIDI1MiwgMTMzLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTM0LCA0OCwgMTAsIDEsIDEyMiwgMiwgMjQ1LCAyMiwgCi0gICAgMjU0LCAzNywgMjEsIDI0NCwgMTEsIDUxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyNDQsIAotICAgIDExLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAyMzUsIDE5MywgMjE0LCAxMDUsIDEwLCAxLCAyMzQsIDI1MSwgMiwgMTEzLCAKLSAgICAxNzAsIDQ4LCAyMTYsIDIwNSwgMSwgMjQyLCA0NiwgMjE2LCAyMDUsIDEsIDIyMCwgNjgsIDIxNiwgMjA1LCAxLCAyMjgsIAotICAgIDYxLCAyMTYsIDIwNSwgMSwgMjIzLCAxODQsIDIxNiwgMjA1LCAxLCAyNTIsIDE4OSwgMjE2LCAyMDUsIDEsIDIzMiwgMjUxLCAKLSAgICAyMTYsIDIwNSwgMSwgMjM1LCA4LCAyMTYsIDIwNSwgMSwgMjU0LCAxNTksIDIxNiwgMjA1LCAxLCAyMTQsIDI1LCAyMTYsIAotICAgIDIwNSwgMSwgMjMxLCA3NywgMjE2LCAyMDUsIDEsIDI0NCwgMTk0LCAyMTYsIDIwNSwgMSwgMjQ4LCAyMywgMjE2LCAyMDUsIAotICAgIDEsIDIxNiwgMjA3LCAyMTYsIDIwNSwgMSwgMjMzLCAxMzEsIDIxNiwgMjA1LCAxLCAyNDMsIDEzMSwgMjE2LCAyMDUsIDEsIAotICAgIDI0MiwgMTc3LCAyMTYsIDIwNSwgMSwgMjIxLCAxNjUsIDIxNiwgMjA1LCAxLCAyNDgsIDE0OCwgMjE2LCAyMDUsIDEsIDIxMCwgCi0gICAgMTAwLCAyMTYsIDIwNSwgMSwgMjE3LCAzNywgMjE2LCAyMDUsIDEsIDIxMSwgMTAzLCAyMTYsIDIwNSwgMSwgMjI1LCAyMzMsIAotICAgIDIxNiwgMjA1LCAxLCAyMzUsIDEyOCwgMjE2LCAyMDUsIDEsIDI1MCwgMTM0LCAyMTYsIDIwNSwgMSwgMjE1LCAxNTUsIDIxNiwgCi0gICAgMjA1LCAxLCAyNDEsIDE4OCwgMjE2LCAyMDUsIDEsIDIzNCwgMTMxLCAyMTYsIDIwNSwgMSwgMjE2LCAyMDYsIDIxNiwgMjA1LCAKLSAgICAxLCAyMTAsIDExNSwgMjE2LCAyMDUsIDEsIDIyMCwgNTgsIDIxNiwgMjA1LCAxLCAyMjIsIDMwLCAyMTYsIDIwNSwgMSwgCi0gICAgMjQ4LCAyMTksIDIxNiwgMjA1LCAxLCAxMTEsIDIxNiwgMjA1LCAxLCAyMTAsIDIzLCAyMTYsIDIwNSwgMSwgMjU0LCAxOTMsIAotICAgIDIxNiwgMjA1LCAxLCAyNDIsIDI0MywgMjE2LCAyMDUsIDEsIDIyNCwgODUsIDIxNiwgMjA1LCAxLCAyMTIsIDYzLCAyMTYsIAotICAgIDIwNSwgMjU1LCAyMiwgMjE2LCAyMDUsIDI1NSwgMzgsIDIxNiwgMjA1LCAyNDAsIDExNCwgMjE2LCAyMDUsIDI0NSwgMjA4LCAKLSAgICAyMTYsIDIwNSwgMjE0LCAyMjIsIDIxNiwgMjA1LCAyMjYsIDE4MiwgMjE2LCAyMDUsIDI0NSwgMjE2LCAyMTYsIDIwNSwgCi0gICAgMjQ1LCAxNiwgMjE2LCAyMDUsIDIyNiwgMjQ3LCAyMTYsIDIwNSwgMjI2LCAyNTUsIDIxNiwgMjA1LCAyMTgsIDQ1LCAyMTYsIAotICAgIDIwNSwgMSwgMjI5LCAyMjUsIDIyOCwgMTM3LCAyMSwgMjEwLCA4NiwgMjI4LCAxMzcsIDIxLCAxMTAsIDIyOCwgMTM3LCAyMSwgCi0gICAgMTA1LCAyMjgsIDEzNywgMjEsIDE1OCwgMjI4LCAxMzcsIDIxLCAxNjEsIDIyOCwgMTM3LCAyMSwgMTg5LCAyMjgsIDEzNywgCi0gICAgMjEsIDE5NCwgMjI4LCAxMzcsIDIxLCAxOTgsIDIyOCwgMTM3LCAyMSwgMTk1LCAyMjgsIDEzNywgMjEsIDIwMCwgMjI4LCAKLSAgICAxMzcsIDEsIDYxLCAyMjgsIDEzNywgMSwgMjQ1LCAyMDksIDIyOCwgMTM3LCAxLCA3MywgMjI4LCAxMzcsIDEsIDc1LCAyMjgsIAotICAgIDEzNywgMSwgNzAsIDIyOCwgMTM3LCAxLCAyMjYsIDE4MywgMjI4LCAxMzcsIDEsIDc2LCAyMjgsIDEzNywgMSwgMjQ4LCAKLSAgICAyMDksIDIyOCwgMTM3LCAxLCAyMzAsIDI1LCAyMjgsIDEzNywgMSwgMjUyLCAxOTEsIDIyOCwgMTM3LCAxLCAxOTAsIDIyOCwgCi0gICAgMTM3LCAxLCAyMTcsIDEwNSwgMjI4LCAxMzcsIDEsIDIzNSwgMTQxLCAyMjgsIDEzNywgMSwgMjUwLCAxNTcsIDIyOCwgMTM3LCAKLSAgICAxLCAyNDgsIDIyMSwgMjI4LCAxMzcsIDEsIDIwNSwgMjI4LCAxMzcsIDEsIDIyMiwgMTc5LCAyMjgsIDEzNywgMSwgMjA2LCAKLSAgICAyMjgsIDEzNywgMSwgMjQzLCA3OSwgMjI4LCAxMzcsIDEsIDI0NCwgMTk2LCAyMjgsIDEzNywgMSwgMTc2LCAyMjgsIDEzNywgCi0gICAgMSwgMjMzLCAxMzUsIDIyOCwgMTM3LCAxLCAyMjksIDIyOSwgMjExLCAyMjMsIDIyOCwgMTM3LCAxLCAxODQsIDIyOCwgMTM3LCAKLSAgICAxLCAyMjcsIDE2NSwgMjI4LCAxMzcsIDEsIDE5NywgMjI4LCAxMzcsIDEsIDE2MiwgMjI4LCAxMzcsIDEsIDIxMiwgNjUsIAotICAgIDIyOCwgMTM3LCAxLCAxOTEsIDIyOCwgMTM3LCAxLCAyMjcsIDE2NiwgMjExLCAyMjMsIDIyOCwgMTM3LCAxLCAyMzUsIDYxLCAKLSAgICAyMzUsIDE0MSwgMjI4LCAxMzcsIDEsIDIzNSwgNjEsIDI1MCwgMTU3LCAyMjgsIDEzNywgMSwgMjM1LCA2MSwgMjA1LCAyMjgsIAotICAgIDEzNywgMzgsIDIxOSwgMjUxLCAxMjUsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMjE5LCAyNTEsIDEyMSwgMjE2LCAzMCwgCi0gICAgMjI4LCAxMzcsIDM4LCAyMTksIDI1MSwgMjIyLCAyMjgsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAyNDgsIDM4LCAKLSAgICAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMTI1LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMTIxLCAyMTYsIAotICAgIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMjIyLCAyMjgsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMjI5LCAxOTMsIDc4LCAKLSAgICAyMjgsIDEzNywgMzgsIDUyLCA1OSwgNDgsIDIyOCwgMTM3LCAxMjUsIDEzOCwgMjU0LCA1NywgMjI4LCAxMzcsIDEyMSwgCi0gICAgMTM4LCAyNTQsIDU3LCAyMjgsIDEzNywgMTYsIDIyNiwgMTg0LCAyNDgsIDUwLCAyMjgsIDEzNywgMTYsIDI0MywgNzgsIAotICAgIDIyOCwgMTM3LCAyNDksIDIxOSwgMjI4LCAxMzcsIDI0NSwgMzEsIDc4LCAyMjgsIDEzNywgMjMzLCAxMDgsIDIyMSwgMjUyLCAKLSAgICAxLCAyNTQsIDE3NiwgMjIxLCAyNTIsIDEsIDI1MSwgMjI4LCAyMjEsIDI1MiwgMSwgMjQzLCAxMTIsIDIyMSwgMjUyLCAxLCAKLSAgICAyNDgsIDE5NCwgMjIxLCAyNTIsIDEsIDIzNSwgMTUyLCAyMjEsIDI1MiwgMSwgMjUyLCAxODksIDIyMSwgMjUyLCAxLCAyMTAsIAotICAgIDg5LCAyMjEsIDI1MiwgMSwgMjM1LCAxNjAsIDIyMSwgMjUyLCAxLCAyMTYsIDY3LCAyMjEsIDI1MiwgMSwgMjEwLCAxODIsIAotICAgIDIyMSwgMjUyLCAxLCAyMzUsIDksIDIyMSwgMjUyLCAxLCAyMzMsIDEyOCwgMjIxLCAyNTIsIDEsIDIzMCwgMTkwLCAyMjEsIAotICAgIDI1MiwgMSwgMjI3LCAxOTQsIDIyMSwgMjUyLCAxLCAyMTksIDE1NiwgMjIxLCAyNTIsIDEsIDIzNSwgMjU1LCAyMjEsIDI1MiwgCi0gICAgMSwgMjQ0LCAxMjEsIDIyMSwgMjUyLCAxLCAyMTUsIDE4MSwgMjIxLCAyNTIsIDEsIDIyNCwgMTAsIDIyMSwgMjUyLCAxLCAKLSAgICAyMjIsIDIyOSwgMjIxLCAyNTIsIDEsIDIyMCwgODUsIDIyMSwgMjUyLCAxLCAyMTcsIDEwMCwgMjIxLCAyNTIsIDE2NCwgCi0gICAgMjM1LCAyNTUsIDIyMSwgMjUyLCAxNjQsIDIzNSwgMjU0LCAyMjEsIDI1MiwgMTY0LCAyMjYsIDI0MywgMjIxLCAyNTIsIAotICAgIDE2NCwgMjQ4LCAyMDcsIDIyMSwgMjUyLCA1OCwgMSwgMjQ1LCAxMDUsIDIxMCwgMTgyLCAyMjEsIDI1MiwgMTY0LCAyNDUsIAotICAgIDEwNSwgMjEwLCAxODIsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3NSwgMjIxLCAyNTIsIDI1LCA1LCA3NSwgMjIxLCAyNTIsIAotICAgIDI1LCA1LCAyMjYsIDExOCwgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDI1NSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAyMjYsIDExOCwgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA2MSwgMjIxLCAKLSAgICAyNTIsIDI1LCA1LCA2MSwgMjIxLCAyNTIsIDU4LCAxLCAyMTksIDI1MSwgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMjE5LCAyNTEsIAotICAgIDYxLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNzAsIDIyMSwgMjUyLCAyNSwgNSwgNzAsIDIyMSwgMjUyLCA1OCwgMSwgNzMsIAotICAgIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3MywgMjIxLCAyNTIsIDI1LCA1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCA3NiwgMjIxLCAKLSAgICAyNTIsIDI1LCA1LCAyMTgsIDQ1LCAyMjEsIDI1MiwgMTY0LCAyMjksIDkyLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIyOSwgOTIsIAotICAgIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAyMTgsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAxMTQsIDIyMSwgMjUyLCAKLSAgICAyMjQsIDE0MSwgMjUyLCAxMTQsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjUzLCAyMDEsIDIyMSwgMjUyLCAyMjQsIDE0MSwgCi0gICAgMjIwLCA4LCAyMjEsIDI1MiwgMjU1LCAyMSwgNzgsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjMxLCA2OCwgMjI0LCA0NSwgMjIxLCAKLSAgICAyNTIsIDIyNCwgMTQxLCAyMTAsIDMxLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIyNCwgNDUsIDIyMSwgMjUyLCAyMjQsIDE0MSwgCi0gICAgMjEwLCAxMTQsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjE1LCA5MCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDksIDIyMSwgCi0gICAgMjUyLCAyMjQsIDE0MSwgMjE5LCA1MywgMjMxLCAxNDUsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAxMDAsIDIzMSwgMTgyLCAKLSAgICAxLCAyNDIsIDI0LCAyMzEsIDE4MiwgMSwgMjU1LCAyNSwgMjMxLCAxODIsIDEsIDI1NCwgMjE2LCAyMzEsIDE4MiwgMSwgCi0gICAgMjU0LCAyNTUsIDIzMSwgMTgyLCAxLCAyNTQsIDIwOSwgMjMxLCAxODIsIDEsIDIxNCwgMTI0LCAyMzEsIDE4MiwgMSwgMjUzLCAKLSAgICAxNjAsIDIzMSwgMTgyLCAxLCAyMzUsIDE2MCwgMjMxLCAxODIsIDEsIDI1MywgMTk4LCAyMzEsIDE4MiwgMSwgMjU0LCAxODEsIAotICAgIDIzMSwgMTgyLCAxLCAyNTQsIDE4NiwgMjMxLCAxODIsIDEsIDI1NCwgMTc4LCAyMzEsIDE4MiwgMSwgMjU0LCAxMzYsIDIzMSwgCi0gICAgMTgyLCAxLCAyNTQsIDEyMywgMjMxLCAxODIsIDEsIDI1MywgMjM3LCAyMzEsIDE4MiwgMSwgMjM1LCAyNTUsIDIzMSwgMTgyLCAKLSAgICAxLCAyNTQsIDcyLCAyMzEsIDE4MiwgMSwgMjUzLCAyMDgsIDIzMSwgMTgyLCAxLCAyNTQsIDQ1LCAyMzEsIDE4MiwgMSwgCi0gICAgMjU0LCA0MSwgMjMxLCAxODIsIDEsIDI1MywgMjMxLCAyMzEsIDE4MiwgMSwgMjUzLCAyMDYsIDIzMSwgMTgyLCAxLCAyNDYsIAotICAgIDU1LCAyMzEsIDE4MiwgMSwgMjM1LCAyLCAyMzEsIDE4MiwgMSwgMjU0LCAxOTYsIDIzMSwgMTgyLCAyNTQsIDIyMiwgNzgsIAotICAgIDIzMSwgMTgyLCAyMTMsIDEzNiwgNzgsIDIzMSwgMTgyLCAyNDMsIDUzLCA3OCwgMjMxLCAxODIsIDIyNCwgMTQwLCAxMCwgMSwgCi0gICAgMjUyLCA1NSwgMiwgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMTUxLCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIDgxLCAKLSAgICAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAKLSAgICAxLCAyMjQsIDgyLCAyLCA1OSwgNTEsIDEwLCAxLCAyMzMsIDEwMywgMiwgNTIsIDEzMCwgMTAsIDEsIDY2LCAyLCAxMzQsIAotICAgIDE3MCwgNDgsIDEwLCAxLCA3OSwgMiwgMTEzLCAxNzAsIDI1MiwgNDMsIDIyLCAyMDIsIDQ4LCAxMCwgMSwgNzksIDIsIDExMywgCi0gICAgMTcwLCAyNTIsIDQzLCAyMiwgNTksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjMyLCAxMjMsIDEwLCAxLCAyMTIsIDMxLCAyLCAKLSAgICA1OSwgMjExLCAyMzEsIDEwLCAxLCAyMjIsIDIwMSwgMjExLCA0MywgMTAsIDI0OSwgOTksIDI0NCwgMTY1LCAxMCwgMjQ5LCAKLSAgICA5OSwgMjQ4LCAxODQsIDEwLCAyNDksIDk5LCAyMzQsIDIwNSwgMTAsIDI0OSwgOTksIDI0NCwgMTYzLCAxMCwgMjQ5LCA5OSwgCi0gICAgMjQ4LCAxODIsIDEwLCAyNDksIDk5LCAyMzQsIDIwMywgMTAsIDEzOCwgMTIzLCA1OSwgNDgsIDEwLCAxMzgsIDExMywgMTcwLCAKLSAgICA0OCwgMTAsIDEzOCwgMjMyLCAxMjQsIDQ4LCAxMCwgMTM4LCAxMjMsIDU5LCA1MSwgMTAsIDEzOCwgMTEzLCAxNzAsIDUxLCAKLSAgICAxMCwgMTM4LCAyMzIsIDEyNCwgNTEsIDEwLCAyMDQsIDI0NCwgMTYzLCAxMCwgMjA0LCAyNDgsIDE4MiwgMTAsIDIwNCwgCi0gICAgMjM0LCAyMDMsIDEwLCA0LCAxMjUsIDIxMiwgMzAsIDEwLCAyNDQsIDE2NiwgMiwgMjIyLCAyMzMsIDEwLCAyNDQsIDE2NiwgCi0gICAgMiwgNTksIDQ4LCAxMCwgMjM0LCAyMDYsIDIsIDU5LCA1MSwgMTAsIDQzLCAyNTMsIDI1MCwgNDgsIDEwLCA0NCwgMjUzLCAKLSAgICAyNTAsIDQ4LCAxMCwgNDMsIDI1MywgMjUwLCA1MSwgMTAsIDQ0LCAyNTMsIDI1MCwgNTEsIDEwLCA1MiwgNDQsIDI1MywgCi0gICAgMjUwLCA0OCwgMTAsIDUyLCA0NCwgMjUzLCAyNTAsIDc3LCAyLCAyNDcsIDEyMCwgMTAsIDQ0LCAyNTMsIDI1MCwgNzcsIDIsIAotICAgIDI0NywgMTIwLCAxMCwgMjQ4LCAxODUsIDIsIDI0NywgMTIwLCA4NCwgNSwgMjM1LCAxOTMsIDI1MCwgMjU1LCA4NCwgNSwgCi0gICAgMjUwLCAyNTUsIDg0LCA1LCAyNTQsIDc1LCA4NCwgNSwgMjEzLCAxNDcsIDg0LCAxLCAyMTksIDI1MSwgNjEsIDg0LCAxLCAKLSAgICA2MSwgODQsIDEsIDI1NSwgNzMsIDg0LCAxLCA3MywgODQsIDEsIDIzNiwgMzMsIDg0LCAxLCA3MCwgODQsIDEsIDIxNCwgCi0gICAgMTE4LCA4NCwgMSwgMTQ5LCAxNTMsIDg0LCAxLCAxNDksIDE1NiwgODQsIDEsIDI1MSwgMiwgNzUsIDg0LCAxLCAyMTksIAotICAgIDI1MSwgNzUsIDg0LCAxLCA3NSwgODQsIDEsIDI1NCwgMjAxLCA4NCwgMSwgMjUxLCAyLCA3NiwgODQsIDEsIDIxOSwgMjUxLCAKLSAgICA3NiwgODQsIDEsIDc2LCA4NCwgMSwgMjUzLCAxOTIsIDg0LCAxLCAxNzYsIDg0LCAxLCAyMzQsIDEzMiwgODQsIDEsIDI0MywgCi0gICAgMTM1LCA4NCwgMSwgMjQyLCAyNDksIDg0LCAxLCAyMjksIDc3LCA4NCwgMSwgMjUxLCAzMywgODQsIDEsIDI1MCwgMTU3LCAKLSAgICA4NCwgMSwgMjM1LCAxNDEsIDg0LCAxLCAyMzUsIDExNCwgODQsIDEsIDIyNywgMTY1LCA4NCwgMSwgMjE1LCAxNTYsIDg0LCAKLSAgICAxLCAyMTUsIDE0NCwgODQsIDEsIDI0OCwgMTM1LCA4NCwgMSwgMjQ4LCAxMTksIDg0LCAxLCAyMjgsIDExMCwgODQsIDEsIAotICAgIDIxNywgMTA1LCA4NCwgMSwgMjE2LCAyMDgsIDg0LCAxLCAyNDgsIDIyMSwgODQsIDEsIDI0OCwgMjUsIDg0LCAxLCAxOTcsIAotICAgIDg0LCAxLCAyMjgsIDkyLCA4NCwgMSwgMTkwLCA4NCwgMSwgMjI1LCAxNDcsIDg0LCAxLCAyNTIsIDE5MSwgODQsIDEsIDI1MiwgCi0gICAgMTgsIDg0LCAxLCAxODQsIDg0LCAxLCAxOTEsIDg0LCAxLCAyMDUsIDg0LCAxLCAyMjIsIDE3OSwgODQsIDEsIDIzMywgMTM1LCAKLSAgICA4NCwgMSwgMjMyLCAxODQsIDg0LCAxLCAyMzIsIDE3NSwgODQsIDEsIDIxNCwgMjcsIDg0LCAxLCAyMjAsIDEwMiwgODQsIDEsIAotICAgIDIxOCwgMjIzLCA4NCwgMSwgMjA2LCA4NCwgMSwgMTYyLCA4NCwgMjUsIDUsIDIyNiwgMjM0LCA4NCwgMjUsIDUsIDIyNiwgCi0gICAgMTgxLCA4NCwgNSwgMjI3LCAyMDUsIDg0LCA1LCAyNTMsIDE3NSwgODQsIDI1LCA1LCAyNTUsIDczLCA4NCwgMjUsIDUsIDczLCAKLSAgICA4NCwgMjUsIDUsIDIzNiwgMzMsIDg0LCAyNSwgNSwgNzAsIDg0LCAyNSwgNSwgMjE0LCAxMTgsIDg0LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTMsIDg0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgODQsIDI1LCA1LCAyNTEsIDIsIDc1LCA4NCwgMjUsIDUsIDIxOSwgCi0gICAgMjUxLCA3NSwgODQsIDI1LCA1LCA3NSwgODQsIDI1LCA1LCAyNTQsIDIwMSwgODQsIDI1LCA1LCAyNTEsIDIsIDc2LCA4NCwgCi0gICAgMjUsIDUsIDIxOSwgMjUxLCA3NiwgODQsIDI1LCA1LCA3NiwgODQsIDI1LCA1LCAyNTMsIDE5MiwgODQsIDUsIDIxMywgMTUyLCAKLSAgICA4NCwgMjUsIDUsIDIyNCwgMTg1LCA3NSwgODQsIDI1LCA1LCAyNTMsIDE3MSwgODQsIDIyNiwgMjA0LCA4NCwgMjE4LCAxMTEsIAotICAgIDUsIDIxNCwgMjE2LCA4NCwgMjE4LCAxMTEsIDUsIDI1NCwgNzcsIDg0LCAyNDIsIDEzNywgMjU1LCAxNCwgODQsIDI1NSwgMywgCi0gICAgMjU1LCAxNCwgODQsIDI1LCA1LCAyNTEsIDIsIDE5OSwgNzUsIDg0LCAyNSwgNSwgMjE0LCAyMTQsIDg0LCAyNSwgNSwgMjE0LCAKLSAgICAxMTcsIDg0LCAxLCAyMjQsIDg4LCA4NCwgMSwgMjM0LCAxMTUsIDg0LCAxLCAyNDIsIDIyNiwgODQsIDEsIDIxMCwgMTE2LCAKLSAgICA4NCwgMSwgMjQ4LCAxMjQsIDg0LCAxLCAyMjMsIDM5LCA4NCwgMSwgMjQ0LCAxOTYsIDg0LCAxLCAyMTAsIDE2OCwgODQsIDEsIAotICAgIDE0OSwgMjIyLCAxODAsIDg0LCAxLCAxNDksIDIzMiwgMTg1LCA4NCwgMjUsIDUsIDE0OSwgMTU2LCA4NCwgMjUsIDUsIDE0OSwgCi0gICAgMjMyLCAxODUsIDg0LCAyNDgsIDE3OCwgODQsIDUyLCAyNDgsIDE3OCwgODQsIDIxLCAyMTAsIDg2LCA4NCwgMjEsIDExMCwgCi0gICAgODQsIDIxLCAxMDUsIDg0LCAyMSwgMTU4LCA4NCwgMjEsIDE2MSwgODQsIDIxLCAxODksIDg0LCAyMSwgMTk0LCA4NCwgMjEsIAotICAgIDE5OCwgODQsIDIxLCAxOTUsIDg0LCAyMSwgMjAwLCA4NCwgMjU1LCAyMSwgNTAsIDg0LCA1LCAxMjUsIDIxOSwgMTcsIDI0NywgCi0gICAgMTIwLCA4NCwgMSwgMjUxLCAyLCA2MSwgODQsIDEsIDIyNiwgMjM0LCA4NCwgMSwgMjI2LCAxODEsIDg0LCAxLCAyNTMsIAotICAgIDE3MSwgODQsIDEsIDIxNCwgMjE0LCA4NCwgMSwgMjE0LCAxMTcsIDg0LCAxLCAyMTAsIDgyLCA4NCwgMSwgMTE0LCAxOTEsIAotICAgIDg0LCAxLCAyNDMsIDI5LCA4NCwgMSwgMjM1LCA5NiwgODQsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgODQsIDEsIDI0OCwgCi0gICAgMTI1LCA4NCwgMSwgMjUyLCAxMTEsIDE0NiwgNSwgMjUwLCAyNTUsIDE0NiwgNSwgMjU0LCA3NSwgMTQ2LCA1LCAyMTMsIAotICAgIDE0NywgMTQ2LCAxLCA2MSwgMTQ2LCAxLCAyNTUsIDczLCAxNDYsIDEsIDczLCAxNDYsIDEsIDIzNiwgMzMsIDE0NiwgMSwgCi0gICAgNzAsIDE0NiwgMSwgMjE0LCAxMTgsIDE0NiwgMSwgMTQ5LCAxNTMsIDE0NiwgMSwgMTQ5LCAxNTYsIDE0NiwgMSwgNzUsIAotICAgIDE0NiwgMSwgMjU0LCAyMDEsIDE0NiwgMSwgNzYsIDE0NiwgMSwgMjUzLCAxOTIsIDE0NiwgMSwgMTc2LCAxNDYsIDEsIDIzNCwgCi0gICAgMTMyLCAxNDYsIDEsIDI0MywgMTM1LCAxNDYsIDEsIDI0MiwgMjQ5LCAxNDYsIDEsIDIyOSwgNzcsIDE0NiwgMSwgMjUxLCAKLSAgICAzMywgMTQ2LCAxLCAyNTAsIDE1NywgMTQ2LCAxLCAyMzUsIDE0MSwgMTQ2LCAxLCAyMzUsIDExNCwgMTQ2LCAxLCAyMjcsIAotICAgIDE2NSwgMTQ2LCAxLCAyMTUsIDE1NiwgMTQ2LCAxLCAyMTUsIDE0NCwgMTQ2LCAxLCAyNDgsIDEzNSwgMTQ2LCAxLCAyNDgsIAotICAgIDExOSwgMTQ2LCAxLCAyMjgsIDExMCwgMTQ2LCAxLCAyMTcsIDEwNSwgMTQ2LCAxLCAyMTYsIDIwOCwgMTQ2LCAxLCAyNDgsIAotICAgIDIyMSwgMTQ2LCAxLCAyNDgsIDI1LCAxNDYsIDEsIDE5NywgMTQ2LCAxLCAxOTAsIDE0NiwgMSwgMjI1LCAxNDcsIDE0NiwgMSwgCi0gICAgMjUyLCAxOTEsIDE0NiwgMSwgMjUyLCAxOCwgMTQ2LCAxLCAxODQsIDE0NiwgMSwgMTkxLCAxNDYsIDEsIDIwNSwgMTQ2LCAxLCAKLSAgICAyMzMsIDEzNSwgMTQ2LCAxLCAyMjAsIDEwMiwgMTQ2LCAxLCAyMTgsIDIyMywgMTQ2LCAxLCAyMDYsIDE0NiwgMSwgMTYyLCAKLSAgICAxNDYsIDUsIDIyNywgMjA1LCAxNDYsIDUsIDI1MywgMTc1LCAxNDYsIDI1LCA1LCAyNTUsIDczLCAxNDYsIDI1LCA1LCA3MywgCi0gICAgMTQ2LCAyNSwgNSwgMjM2LCAzMywgMTQ2LCAyNSwgNSwgNzAsIDE0NiwgMjUsIDUsIDIxNCwgMTE4LCAxNDYsIDI1LCA1LCAKLSAgICAxNDksIDE1MywgMTQ2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTQ2LCAyNSwgNSwgNzUsIDE0NiwgMjUsIDUsIDI1NCwgCi0gICAgMjAxLCAxNDYsIDI1LCA1LCA3NiwgMTQ2LCAyNSwgNSwgMjUzLCAxOTIsIDE0NiwgNSwgMjEzLCAxNTIsIDE0NiwgMSwgMjM0LCAKLSAgICAxMjQsIDIxNywgMTA1LCAxNDYsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMTQ2LCAxLCAyMjIsIDE3OSwgMTQ2LCAxLCAyMjMsIAotICAgIDM5LCAxNDYsIDEsIDIxMCwgMTY4LCAxNDYsIDEsIDE0OSwgMjIyLCAxODAsIDE0NiwgMSwgMTQ5LCAyMzIsIDE4NSwgMTQ2LCAKLSAgICAyNSwgNSwgMTQ5LCAxNTYsIDE0NiwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE0NiwgMjEsIDIxMCwgODYsIDE0NiwgMjEsIAotICAgIDExMCwgMTQ2LCAyMSwgMTA1LCAxNDYsIDIxLCAxNTgsIDE0NiwgMjEsIDE2MSwgMTQ2LCAyMSwgMTg5LCAxNDYsIDIxLCAKLSAgICAxOTQsIDE0NiwgMjEsIDE5OCwgMTQ2LCAyMSwgMTk1LCAxNDYsIDIxLCAyMDAsIDE0NiwgMSwgMjIzLCAxODgsIDIsIDIzMCwgCi0gICAgMjI0LCAyNDcsIDI1NCwgMTQ2LCAxLCAyMjMsIDE4OCwgMiwgMjMyLCAxMDgsIDI0NywgMjU0LCAxNDYsIDIyMiwgMTE4LCAKLSAgICA3OCwgMTQ2LCAyMjIsIDExOCwgNTAsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDExMCwgMTQ2LCAyNDksIDk4LCAyMjcsIAotICAgIDE5NywgMTA1LCAxNDYsIDI0OSwgOTgsIDIyNywgMTk3LCAxNTgsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDE2MSwgMTQ2LCAKLSAgICAyNDksIDk4LCAyMjcsIDE5NywgMTIzLCAyMzMsIDE2LCAyMTYsIDIwMSwgMjE2LCAxOTYsIDI0OCwgNDgsIDE0NiwgMjQ5LCAKLSAgICA5OCwgMjQ4LCA0OSwgMjE5LCAxMTksIDE0NiwgMjM1LCAxNjEsIDE0NiwgMjQzLCAxMDMsIDc4LCAxODMsIDUsIDI1NCwgCi0gICAgMjU0LCAyNTEsIDI0MywgMTgzLCA1LCAyNTEsIDI0MywgMTgzLCA1LCAyMTMsIDE0NywgMTgzLCAxLCA2MSwgMTgzLCAxLCAKLSAgICAyNTUsIDczLCAxODMsIDEsIDczLCAxODMsIDEsIDIzNiwgMzMsIDE4MywgMSwgNzAsIDE4MywgMSwgMjE0LCAxMTgsIDE4MywgCi0gICAgMSwgMjQ1LCAyMDksIDE4MywgMSwgMjU0LCAyMDEsIDE4MywgMSwgMjI2LCAxODMsIDE4MywgMSwgMjUzLCAxOTIsIDE4MywgCi0gICAgMSwgMTc2LCAxODMsIDEsIDIzNCwgMTMyLCAxODMsIDEsIDI0MywgMTM1LCAxODMsIDEsIDI0MiwgMjQ5LCAxODMsIDEsIAotICAgIDIyOSwgNzcsIDE4MywgMSwgMjUxLCAzMywgMTgzLCAxLCAyNTAsIDE1NywgMTgzLCAxLCAyMzUsIDE0MSwgMTgzLCAxLCAKLSAgICAyMzUsIDExNCwgMTgzLCAxLCAyMjcsIDE2NSwgMTgzLCAxLCAyMTUsIDE1NiwgMTgzLCAxLCAyMTUsIDE0NCwgMTgzLCAxLCAKLSAgICAyNDgsIDEzNSwgMTgzLCAxLCAyNDgsIDExOSwgMTgzLCAxLCAyMjgsIDExMCwgMTgzLCAxLCAyMTcsIDEwNSwgMTgzLCAxLCAKLSAgICAyMTYsIDIwOCwgMTgzLCAxLCAyNDgsIDIyMSwgMTgzLCAxLCAyNDgsIDI1LCAxODMsIDEsIDE5NywgMTgzLCAxLCAxOTAsIAotICAgIDE4MywgMSwgMjI1LCAxNDcsIDE4MywgMSwgMjUyLCAxOTEsIDE4MywgMSwgMjUyLCAxOCwgMTgzLCAxLCAxODQsIDE4MywgMSwgCi0gICAgMTkxLCAxODMsIDEsIDIwNSwgMTgzLCAxLCAyMzMsIDEzNSwgMTgzLCAxLCAyMzIsIDE4NCwgMTgzLCAxLCAyMTQsIDI3LCAKLSAgICAxODMsIDEsIDIyMCwgMTAyLCAxODMsIDEsIDIwNiwgMTgzLCAxLCAxNjIsIDE4MywgNSwgMjI3LCAyMDUsIDE4MywgMjUsIDUsIAotICAgIDI1NSwgNzMsIDE4MywgMjUsIDUsIDczLCAxODMsIDI1LCA1LCAyMzYsIDMzLCAxODMsIDI1LCA1LCA3MCwgMTgzLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE4MywgMjUsIDUsIDI0NSwgMjA5LCAxODMsIDI1LCA1LCAyNTQsIDIwMSwgMTgzLCAyNSwgNSwgMjI2LCAKLSAgICAxODMsIDE4MywgMjUsIDUsIDI1MywgMTkyLCAxODMsIDUsIDIxMywgMTUyLCAxODMsIDUsIDIxNCwgMjE4LCAxODMsIDEsIAotICAgIDIzNCwgMTE1LCAxODMsIDEsIDI0MiwgMjI2LCAxODMsIDEsIDIxMCwgMTE2LCAxODMsIDEsIDIyMiwgMTc5LCAxODMsIDEsIAotICAgIDI0NCwgMTk2LCAxODMsIDIxLCAyMTAsIDg2LCAxODMsIDIxLCAxMTAsIDE4MywgMjEsIDEwNSwgMTgzLCAyMSwgMTU4LCAKLSAgICAxODMsIDIxLCAxNjEsIDE4MywgMjEsIDE4OSwgMTgzLCAyMSwgMTk0LCAxODMsIDIxLCAxOTgsIDE4MywgMjEsIDE5NSwgCi0gICAgMTgzLCAyMSwgMjAwLCAxODMsIDIxNiwgNzQsIDE4MywgMjU0LCAyNTMsIDE4MywgMjM1LCAxNzgsIDE4MywgMjE0LCAxNDYsIAotICAgIDE4MywgMjQ1LCAxODEsIDIyNiwgMTg4LCAxODMsIDUsIDIxMSwgNzgsIDE3MSwgNSwgMjUwLCAyNTUsIDE3MSwgNSwgMjU0LCAKLSAgICA3NSwgMTcxLCA1LCAyMTMsIDE0NywgMTcxLCAxLCA2MSwgMTcxLCAxLCAyNTUsIDczLCAxNzEsIDEsIDczLCAxNzEsIDEsIAotICAgIDIzNiwgMzMsIDE3MSwgMSwgNzAsIDE3MSwgMSwgMjE0LCAxMTgsIDE3MSwgMSwgMTQ5LCAxNTMsIDE3MSwgMSwgMTQ5LCAKLSAgICAxNTYsIDE3MSwgMjUsIDI1MSwgMiwgNzUsIDE3MSwgMSwgNzUsIDE3MSwgMSwgMjU0LCAyMDEsIDE3MSwgMjUsIDI1MSwgMiwgCi0gICAgNzYsIDE3MSwgMSwgNzYsIDE3MSwgMSwgMjUzLCAxOTIsIDE3MSwgMSwgMTc2LCAxNzEsIDEsIDIzNCwgMTMyLCAxNzEsIDEsIAotICAgIDI0MywgMTM1LCAxNzEsIDEsIDI0MiwgMjQ5LCAxNzEsIDEsIDIyOSwgNzcsIDE3MSwgMSwgMjUxLCAzMywgMTcxLCAxLCAKLSAgICAyNTAsIDE1NywgMTcxLCAxLCAyMzUsIDE0MSwgMTcxLCAxLCAyMzUsIDExNCwgMTcxLCAxLCAyMjcsIDE2NSwgMTcxLCAxLCAKLSAgICAyMTUsIDE1NiwgMTcxLCAxLCAyMTUsIDE0NCwgMTcxLCAxLCAyNDgsIDEzNSwgMTcxLCAxLCAyNDgsIDExOSwgMTcxLCAxLCAKLSAgICAyMjgsIDExMCwgMTcxLCAxLCAyMTcsIDEwNSwgMTcxLCAxLCAyMTYsIDIwOCwgMTcxLCAxLCAyNDgsIDIyMSwgMTcxLCAxLCAKLSAgICAyNDgsIDI1LCAxNzEsIDEsIDE5NywgMTcxLCAxLCAxOTAsIDE3MSwgMSwgMjI1LCAxNDcsIDE3MSwgMSwgMjUyLCAxOTEsIAotICAgIDE3MSwgMSwgMjUyLCAxOCwgMTcxLCAxLCAxODQsIDE3MSwgMSwgMTkxLCAxNzEsIDEsIDIwNSwgMTcxLCAxLCAyMzMsIDEzNSwgCi0gICAgMTcxLCAxLCAyMzIsIDE4NCwgMTcxLCAxLCAyMTQsIDI3LCAxNzEsIDEsIDIyMCwgMTAyLCAxNzEsIDEsIDIxOCwgMjIzLCAKLSAgICAxNzEsIDEsIDIwNiwgMTcxLCAxLCAxNjIsIDE3MSwgNSwgMjI3LCAyMDUsIDE3MSwgNSwgMjUzLCAxNzUsIDE3MSwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDE3MSwgMjUsIDUsIDczLCAxNzEsIDI1LCA1LCAyMzYsIDMzLCAxNzEsIDI1LCA1LCA3MCwgMTcxLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE3MSwgMjUsIDUsIDE0OSwgMTUzLCAxNzEsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNzEsIDI1LCA1LCAKLSAgICAyNTEsIDIsIDc1LCAxNzEsIDI1LCA1LCA3NSwgMTcxLCAyNSwgNSwgMjU0LCAyMDEsIDE3MSwgMjUsIDUsIDI1MSwgMiwgNzYsIAotICAgIDE3MSwgMjUsIDUsIDc2LCAxNzEsIDI1LCA1LCAyNTMsIDE5MiwgMTcxLCA1LCAyMTMsIDE1MiwgMTcxLCAyMjYsIDIwNCwgCi0gICAgMTcxLCAxLCAxNDksIDIyMiwgMTgwLCAxNzEsIDEsIDE0OSwgMjMyLCAxODUsIDE3MSwgMjUsIDUsIDE0OSwgMTU2LCAxNzEsIAotICAgIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzEsIDIxLCAyMTAsIDg2LCAxNzEsIDIxLCAxMTAsIDE3MSwgMjEsIDEwNSwgMTcxLCAKLSAgICAyMSwgMTU4LCAxNzEsIDIxLCAxNjEsIDE3MSwgMjEsIDE4OSwgMTcxLCAyMSwgMTk0LCAxNzEsIDIxLCAxOTgsIDE3MSwgMjEsIAotICAgIDE5NSwgMTcxLCAyMSwgMjAwLCAxNzEsIDI1NSwgMjEsIDUwLCAxNzEsIDIyMiwgMTE4LCA1MCwgMTU3LCA1LCAyNTAsIDI1NSwgCi0gICAgMTU3LCA1LCAyNTQsIDc1LCAxNTcsIDUsIDIxMywgMTQ3LCAxNTcsIDEsIDYxLCAxNTcsIDEsIDI1NSwgNzMsIDE1NywgMSwgCi0gICAgNzMsIDE1NywgMSwgMjM2LCAzMywgMTU3LCAxLCA3MCwgMTU3LCAxLCAyMTQsIDExOCwgMTU3LCAxLCAxNDksIDE1MywgMTU3LCAKLSAgICAxLCAxNDksIDE1NiwgMTU3LCAxLCA3NSwgMTU3LCAxLCAyNTQsIDIwMSwgMTU3LCAxLCA3NiwgMTU3LCAxLCAyNTMsIDE5MiwgCi0gICAgMTU3LCAxLCAxNzYsIDE1NywgMSwgMjM0LCAxMzIsIDE1NywgMSwgMjQzLCAxMzUsIDE1NywgMSwgMjQyLCAyNDksIDE1NywgCi0gICAgMSwgMjI5LCA3NywgMTU3LCAxLCAyNTEsIDMzLCAxNTcsIDEsIDI1MCwgMTU3LCAxNTcsIDEsIDIzNSwgMTQxLCAxNTcsIDEsIAotICAgIDIzNSwgMTE0LCAxNTcsIDEsIDIyNywgMTY1LCAxNTcsIDEsIDIxNSwgMTU2LCAxNTcsIDEsIDIxNSwgMTQ0LCAxNTcsIDEsIAotICAgIDI0OCwgMTM1LCAxNTcsIDEsIDI0OCwgMTE5LCAxNTcsIDEsIDIyOCwgMTEwLCAxNTcsIDEsIDIxNywgMTA1LCAxNTcsIDEsIAotICAgIDIxNiwgMjA4LCAxNTcsIDEsIDI0OCwgMjIxLCAxNTcsIDEsIDI0OCwgMjUsIDE1NywgMSwgMTk3LCAxNTcsIDEsIDE5MCwgCi0gICAgMTU3LCAxLCAyMjUsIDE0NywgMTU3LCAxLCAyNTIsIDE5MSwgMTU3LCAxLCAyNTIsIDE4LCAxNTcsIDEsIDE4NCwgMTU3LCAxLCAKLSAgICAxOTEsIDE1NywgMSwgMjA1LCAxNTcsIDEsIDIzMywgMTM1LCAxNTcsIDEsIDIzMiwgMTg0LCAxNTcsIDEsIDIxNCwgMjcsIAotICAgIDE1NywgMSwgMjIwLCAxMDIsIDE1NywgMSwgMjE4LCAyMjMsIDE1NywgMSwgMjA2LCAxNTcsIDEsIDE2MiwgMTU3LCA1LCAKLSAgICAyMjcsIDIwNSwgMTU3LCA1LCAyNTMsIDE3NSwgMTU3LCAyNSwgNSwgMjU1LCA3MywgMTU3LCAyNSwgNSwgNzMsIDE1NywgMjUsIAotICAgIDUsIDIzNiwgMzMsIDE1NywgMjUsIDUsIDcwLCAxNTcsIDI1LCA1LCAyMTQsIDExOCwgMTU3LCAyNSwgNSwgMTQ5LCAxNTMsIAotICAgIDE1NywgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE1NywgMjUsIDUsIDc1LCAxNTcsIDI1LCA1LCAyNTQsIDIwMSwgMTU3LCAyNSwgCi0gICAgNSwgNzYsIDE1NywgMjUsIDUsIDI1MywgMTkyLCAxNTcsIDUsIDIxMywgMTUyLCAxNTcsIDI1NCwgMjAyLCAyMzMsIDIzLCAKLSAgICA3OCwgMTU3LCAyNTMsIDE5MywgMjMzLCAyMywgNzgsIDE1NywgMSwgMjIyLCAxNzksIDE1NywgMSwgMjIzLCAzOSwgMTU3LCAKLSAgICAxLCAyMTAsIDE2OCwgMTU3LCAxLCAxNDksIDIyMiwgMTgwLCAxNTcsIDEsIDE0OSwgMjMyLCAxODUsIDE1NywgMjUsIDUsIAotICAgIDE0OSwgMTU2LCAxNTcsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNTcsIDIxLCAyMTAsIDg2LCAxNTcsIDIxLCAxMTAsIDE1NywgCi0gICAgMjEsIDEwNSwgMTU3LCAyMSwgMTU4LCAxNTcsIDIxLCAxNjEsIDE1NywgMjEsIDE4OSwgMTU3LCAyMSwgMTk0LCAxNTcsIDIxLCAKLSAgICAxOTgsIDE1NywgMjEsIDE5NSwgMTU3LCAyMSwgMjAwLCAxNTcsIDIzNSwgMTYxLCAxNTcsIDEsIDIxMiwgNjUsIDE1NywgCi0gICAgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDE1NywgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIDE1NywgMjQ0LCAyLCAxMzQsIDIyNCwgCi0gICAgMTksIDE1NywgMjQ0LCAyLCAxMjMsIDIxOSwgMTE3LCAxNTcsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMTU3LCAyNDQsIDIsIAotICAgIDEzNCwgMjE5LCAxMTYsIDM2LCA1LCAyNTQsIDc1LCAzNiwgNSwgMjEzLCAxNDcsIDM2LCAxLCA2MSwgMzYsIDEsIDI1NSwgCi0gICAgNzMsIDM2LCAxLCA3MywgMzYsIDEsIDIzNiwgMzMsIDM2LCAxLCA3MCwgMzYsIDEsIDIxNCwgMTE4LCAzNiwgMSwgNzUsIDM2LCAKLSAgICAxLCAyNDUsIDIwOSwgMzYsIDEsIDI1NCwgMjAxLCAzNiwgMSwgNzYsIDM2LCAxLCAyMjYsIDE4MywgMzYsIDEsIDI1MywgCi0gICAgMTkyLCAzNiwgMSwgMTc2LCAzNiwgMSwgMjI5LCA3NywgMzYsIDEsIDI1MSwgMzMsIDM2LCAxLCAyMzUsIDE0MSwgMzYsIDEsIAotICAgIDIyNywgMTY1LCAzNiwgMSwgMjE1LCAxNTYsIDM2LCAxLCAyMjgsIDExMCwgMzYsIDEsIDIxNywgMTA1LCAzNiwgMSwgMTk3LCAKLSAgICAzNiwgMSwgMjI4LCA5MiwgMzYsIDEsIDE5MCwgMzYsIDEsIDE4NCwgMzYsIDEsIDE5MSwgMzYsIDEsIDIwNSwgMzYsIDEsIAotICAgIDIyMiwgMTc5LCAzNiwgMSwgMjMzLCAxMzUsIDM2LCAxLCAyMzIsIDE4NCwgMzYsIDEsIDIzMiwgMTc1LCAzNiwgMSwgMjE0LCAKLSAgICAyNywgMzYsIDEsIDIyMCwgMTAyLCAzNiwgMSwgMjE4LCAyMjMsIDM2LCAxLCAyMDYsIDM2LCAxLCAxNjIsIDM2LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMzYsIDI1LCA1LCA3MywgMzYsIDI1LCA1LCAyMzYsIDMzLCAzNiwgMjUsIDUsIDcwLCAzNiwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAzNiwgMjUsIDUsIDc1LCAzNiwgMjUsIDUsIDI0NSwgMjA5LCAzNiwgMjUsIDUsIDI1NCwgMjAxLCAzNiwgCi0gICAgMjUsIDUsIDc2LCAzNiwgMjUsIDUsIDIyNiwgMTgzLCAzNiwgMjUsIDUsIDI1MywgMTkyLCAzNiwgNSwgMjEzLCAxNTIsIDM2LCAKLSAgICAyMjYsIDIwNCwgMzYsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMzYsIDIxLCAyMTAsIDg2LCAzNiwgMjEsIDExMCwgMzYsIAotICAgIDIxLCAxMDUsIDM2LCAyMSwgMTU4LCAzNiwgMjEsIDE2MSwgMzYsIDIxLCAxODksIDM2LCAyMSwgMTk0LCAzNiwgMjEsIDE5OCwgCi0gICAgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMjAwLCAzNiwgNTQsIDIxNiwgMjQ3LCAzNiwgNTQsIDEyMywgMjQwLCAyMTAsIDM2LCAKLSAgICA1NCwgMTIzLCAyMTYsIDE0NywgMzYsIDI0OCwgMTQ2LCA1MCwgMzYsIDIzMCwgMTM1LCA1MCwgMzYsIDIxMSwgNDUsIDUwLCAKLSAgICAzNiwgMjQ4LCA4NywgNTAsIDM2LCAyNDksIDEzOSwgNTAsIDM2LCAyNTMsIDIzOCwgNzcsIDUwLCAzNiwgMjIyLCAxMTgsIAotICAgIDUwLCAzNiwgNTQsIDUwLCAxNDgsIDUsIDI1MCwgMjU1LCAxNDgsIDUsIDI1NCwgNzUsIDE0OCwgNSwgMjEzLCAxNDcsIDE0OCwgCi0gICAgMSwgNjEsIDE0OCwgMSwgMjU1LCA3MywgMTQ4LCAxLCA3MywgMTQ4LCAxLCAyMzYsIDMzLCAxNDgsIDEsIDcwLCAxNDgsIDEsIAotICAgIDIxNCwgMTE4LCAxNDgsIDEsIDE0OSwgMTUzLCAxNDgsIDEsIDE0OSwgMTU2LCAxNDgsIDEsIDc1LCAxNDgsIDEsIDI0NSwgCi0gICAgMjA5LCAxNDgsIDEsIDI1NCwgMjAxLCAxNDgsIDEsIDc2LCAxNDgsIDEsIDIyNiwgMTgzLCAxNDgsIDEsIDI1MywgMTkyLCAKLSAgICAxNDgsIDEsIDE3NiwgMTQ4LCAxLCAyMzQsIDEzMiwgMTQ4LCAxLCAyNDMsIDEzNSwgMTQ4LCAxLCAyNDIsIDI0OSwgMTQ4LCAKLSAgICAxLCAyMjksIDc3LCAxNDgsIDEsIDI1MSwgMzMsIDE0OCwgMSwgMjUwLCAxNTcsIDE0OCwgMSwgMjM1LCAxNDEsIDE0OCwgMSwgCi0gICAgMjM1LCAxMTQsIDE0OCwgMSwgMjI3LCAxNjUsIDE0OCwgMSwgMjE1LCAxNTYsIDE0OCwgMSwgMjE1LCAxNDQsIDE0OCwgMSwgCi0gICAgMjQ4LCAxMzUsIDE0OCwgMSwgMjQ4LCAxMTksIDE0OCwgMSwgMjI4LCAxMTAsIDE0OCwgMSwgMjE3LCAxMDUsIDE0OCwgMSwgCi0gICAgMjE2LCAyMDgsIDE0OCwgMSwgMjQ4LCAyMjEsIDE0OCwgMSwgMjQ4LCAyNSwgMTQ4LCAxLCAxOTcsIDE0OCwgMSwgMTkwLCAKLSAgICAxNDgsIDEsIDIyNSwgMTQ3LCAxNDgsIDEsIDI1MiwgMTkxLCAxNDgsIDEsIDI1MiwgMTgsIDE0OCwgMSwgMTg0LCAxNDgsIDEsIAotICAgIDE5MSwgMTQ4LCAxLCAyMDUsIDE0OCwgMSwgMjIyLCAxNzksIDE0OCwgMSwgMjMzLCAxMzUsIDE0OCwgMSwgMjMyLCAxODQsIAotICAgIDE0OCwgMSwgMjE0LCAyNywgMTQ4LCAxLCAyMjAsIDEwMiwgMTQ4LCAxLCAyMTgsIDIyMywgMTQ4LCAxLCAyMDYsIDE0OCwgMSwgCi0gICAgMTYyLCAxNDgsIDUsIDI1MywgMTc1LCAxNDgsIDI1LCA1LCAyNTUsIDczLCAxNDgsIDI1LCA1LCA3MywgMTQ4LCAyNSwgNSwgCi0gICAgMjM2LCAzMywgMTQ4LCAyNSwgNSwgNzAsIDE0OCwgMjUsIDUsIDIxNCwgMTE4LCAxNDgsIDI1LCA1LCAxNDksIDE1MywgMTQ4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTQ4LCAyNSwgNSwgNzUsIDE0OCwgMjUsIDUsIDI0NSwgMjA5LCAxNDgsIDI1LCA1LCAKLSAgICAyNTQsIDIwMSwgMTQ4LCAyNSwgNSwgNzYsIDE0OCwgMjUsIDUsIDIyNiwgMTgzLCAxNDgsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMTQ4LCA1LCAyMTMsIDE1MiwgMTQ4LCAyMzMsIDIzLCA3OCwgMTQ4LCAyNTQsIDIwMiwgMjMzLCAyMywgNzgsIDE0OCwgMSwgCi0gICAgMjE1LCAxODMsIDE0OCwgMSwgMjQ2LCAzOCwgMTQ4LCAxLCAxNDksIDIyMiwgMTgwLCAxNDgsIDEsIDE0OSwgMjMyLCAxODUsIAotICAgIDE0OCwgMjUsIDUsIDE0OSwgMTU2LCAxNDgsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNDgsIDIxLCAyMTAsIDg2LCAxNDgsIAotICAgIDIxLCAxMTAsIDE0OCwgMjEsIDEwNSwgMTQ4LCAyMSwgMTU4LCAxNDgsIDIxLCAxNjEsIDE0OCwgMjEsIDE4OSwgMTQ4LCAyMSwgCi0gICAgMTk0LCAxNDgsIDIxLCAxOTgsIDE0OCwgMjEsIDE5NSwgMTQ4LCAyMSwgMjAwLCAxNDgsIDI0NCwgMiwgMjEsIDIxMCwgODcsIAotICAgIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTIzLCAzMSwgMjI2LCAyMzcsIDIyNCwgCi0gICAgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDExMywgMzEsIDIyNiwgMjM3LCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAKLSAgICAyNDQsIDIsIDIxLCAxMzQsIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTIzLCAKLSAgICAzMSwgMjQ1LCA0MiwgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTEzLCAzMSwgMjQ1LCA0MiwgMjI0LCAKLSAgICAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTM0LCAzMSwgMjQ1LCA0MiwgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgCi0gICAgNSwgMjE1LCA4NCwgMTY1LCA1LCAyNTQsIDc1LCAxNjUsIDUsIDIxMywgMTQ3LCAxNjUsIDEsIDYxLCAxNjUsIDEsIDI1NSwgCi0gICAgNzMsIDE2NSwgMSwgNzMsIDE2NSwgMSwgMjM2LCAzMywgMTY1LCAxLCA3MCwgMTY1LCAxLCAyMTQsIDExOCwgMTY1LCAxLCAKLSAgICAxNDksIDE1MywgMTY1LCAxLCAxNDksIDE1NiwgMTY1LCAxLCA3NSwgMTY1LCAxLCAyNDUsIDIwOSwgMTY1LCAxLCAyNTQsIAotICAgIDIwMSwgMTY1LCAxLCA3NiwgMTY1LCAxLCAyMjYsIDE4MywgMTY1LCAxLCAyNTMsIDE5MiwgMTY1LCAxLCAxNzYsIDE2NSwgMSwgCi0gICAgMjM0LCAxMzIsIDE2NSwgMSwgMjQzLCAxMzUsIDE2NSwgMSwgMjQyLCAyNDksIDE2NSwgMSwgMjI5LCA3NywgMTY1LCAxLCAKLSAgICAyNTEsIDMzLCAxNjUsIDEsIDI1MCwgMTU3LCAxNjUsIDEsIDIzNSwgMTQxLCAxNjUsIDEsIDIzNSwgMTE0LCAxNjUsIDEsIAotICAgIDIyNywgMTY1LCAxNjUsIDEsIDIxNSwgMTU2LCAxNjUsIDEsIDIxNSwgMTQ0LCAxNjUsIDEsIDI0OCwgMTM1LCAxNjUsIDEsIAotICAgIDI0OCwgMTE5LCAxNjUsIDEsIDIyOCwgMTEwLCAxNjUsIDEsIDIxNywgMTA1LCAxNjUsIDEsIDIxNiwgMjA4LCAxNjUsIDEsIAotICAgIDI0OCwgMjIxLCAxNjUsIDEsIDI0OCwgMjUsIDE2NSwgMSwgMTk3LCAxNjUsIDEsIDE5MCwgMTY1LCAxLCAyMjUsIDE0NywgCi0gICAgMTY1LCAxLCAyNTIsIDE5MSwgMTY1LCAxLCAyNTIsIDE4LCAxNjUsIDEsIDE4NCwgMTY1LCAxLCAxOTEsIDE2NSwgMSwgMjA1LCAKLSAgICAxNjUsIDEsIDIyMiwgMTc5LCAxNjUsIDEsIDIzMywgMTM1LCAxNjUsIDEsIDIzMiwgMTg0LCAxNjUsIDEsIDIxNCwgMjcsIAotICAgIDE2NSwgMSwgMjIwLCAxMDIsIDE2NSwgMSwgMjE4LCAyMjMsIDE2NSwgMSwgMjA2LCAxNjUsIDEsIDE2MiwgMTY1LCA1LCAKLSAgICAyMjcsIDIwNSwgMTY1LCA1LCAyNTMsIDE3NSwgMTY1LCAyNSwgNSwgMjU1LCA3MywgMTY1LCAyNSwgNSwgNzMsIDE2NSwgMjUsIAotICAgIDUsIDIzNiwgMzMsIDE2NSwgMjUsIDUsIDcwLCAxNjUsIDI1LCA1LCAyMTQsIDExOCwgMTY1LCAyNSwgNSwgMTQ5LCAxNTMsIAotICAgIDE2NSwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE2NSwgMjUsIDUsIDc1LCAxNjUsIDI1LCA1LCAyNDUsIDIwOSwgMTY1LCAyNSwgCi0gICAgNSwgMjU0LCAyMDEsIDE2NSwgMjUsIDUsIDc2LCAxNjUsIDI1LCA1LCAyMjYsIDE4MywgMTY1LCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDE2NSwgNSwgMjEzLCAxNTIsIDE2NSwgMjMzLCAyMywgNzgsIDE2NSwgMjU0LCAyMDIsIDIzMywgMjMsIDc4LCAxNjUsIDEsIAotICAgIDI0NCwgMTk2LCAxNjUsIDEsIDE0OSwgMjIyLCAxODAsIDE2NSwgMSwgMTQ5LCAyMzIsIDE4NSwgMTY1LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTYsIDE2NSwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE2NSwgMjEsIDIxMCwgODYsIDE2NSwgMjEsIDExMCwgMTY1LCAyMSwgCi0gICAgMTA1LCAxNjUsIDIxLCAxNTgsIDE2NSwgMjEsIDE2MSwgMTY1LCAyMSwgMTg5LCAxNjUsIDIxLCAxOTQsIDE2NSwgMjEsIAotICAgIDE5OCwgMTY1LCAyMSwgMTk1LCAxNjUsIDIxLCAyMDAsIDE2NSwgNSwgMjM1LCAxMDIsIDE2NSwgNSwgMjE0LCAxNjEsIDEzNiwgCi0gICAgNSwgMjU0LCA3NSwgMTM2LCA1LCAyMTMsIDE0NywgMTM2LCAxLCA2MSwgMTM2LCAxLCAyNTUsIDczLCAxMzYsIDEsIDczLCAKLSAgICAxMzYsIDEsIDIzNiwgMzMsIDEzNiwgMSwgNzAsIDEzNiwgMSwgMjE0LCAxMTgsIDEzNiwgMSwgMTQ5LCAxNTMsIDEzNiwgMSwgCi0gICAgMTQ5LCAxNTYsIDEzNiwgMSwgNzUsIDEzNiwgMSwgMjQ1LCAyMDksIDEzNiwgMSwgMjU0LCAyMDEsIDEzNiwgMSwgNzYsIAotICAgIDEzNiwgMSwgMjI2LCAxODMsIDEzNiwgMSwgMjUzLCAxOTIsIDEzNiwgMSwgMTc2LCAxMzYsIDEsIDIzNCwgMTMyLCAxMzYsIAotICAgIDEsIDI0MywgMTM1LCAxMzYsIDEsIDI0MiwgMjQ5LCAxMzYsIDEsIDIyOSwgNzcsIDEzNiwgMSwgMjUxLCAzMywgMTM2LCAxLCAKLSAgICAyNTAsIDE1NywgMTM2LCAxLCAyMzUsIDE0MSwgMTM2LCAxLCAyMzUsIDExNCwgMTM2LCAxLCAyMjcsIDE2NSwgMTM2LCAxLCAKLSAgICAyMTUsIDE1NiwgMTM2LCAxLCAyMTUsIDE0NCwgMTM2LCAxLCAyNDgsIDEzNSwgMTM2LCAxLCAyNDgsIDExOSwgMTM2LCAxLCAKLSAgICAyMjgsIDExMCwgMTM2LCAxLCAyMTcsIDEwNSwgMTM2LCAxLCAyMTYsIDIwOCwgMTM2LCAxLCAyNDgsIDIyMSwgMTM2LCAxLCAKLSAgICAyNDgsIDI1LCAxMzYsIDEsIDE5NywgMTM2LCAxLCAyMjgsIDkyLCAxMzYsIDEsIDE5MCwgMTM2LCAxLCAyMjUsIDE0NywgCi0gICAgMTM2LCAxLCAyNTIsIDE5MSwgMTM2LCAxLCAyNTIsIDE4LCAxMzYsIDEsIDE4NCwgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjA1LCAKLSAgICAxMzYsIDEsIDIyMiwgMTc5LCAxMzYsIDEsIDIzMywgMTM1LCAxMzYsIDEsIDIzMiwgMTg0LCAxMzYsIDEsIDIzMiwgMTc1LCAKLSAgICAxMzYsIDEsIDIxNCwgMjcsIDEzNiwgMSwgMjIwLCAxMDIsIDEzNiwgMSwgMjE4LCAyMjMsIDEzNiwgMSwgMjA2LCAxMzYsIDEsIAotICAgIDE2MiwgMTM2LCAxLCAyMTUsIDEyNSwgMTM2LCA1LCAyNTMsIDE3NSwgMTM2LCAyNSwgNSwgMjU1LCA3MywgMTM2LCAyNSwgNSwgCi0gICAgNzMsIDEzNiwgMjUsIDUsIDIzNiwgMzMsIDEzNiwgMjUsIDUsIDcwLCAxMzYsIDI1LCA1LCAyMTQsIDExOCwgMTM2LCAyNSwgCi0gICAgNSwgMTQ5LCAxNTMsIDEzNiwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDEzNiwgMjUsIDUsIDc1LCAxMzYsIDI1LCA1LCAyNDUsIAotICAgIDIwOSwgMTM2LCAyNSwgNSwgMjU0LCAyMDEsIDEzNiwgMjUsIDUsIDc2LCAxMzYsIDI1LCA1LCAyMjYsIDE4MywgMTM2LCAyNSwgCi0gICAgNSwgMjUzLCAxOTIsIDEzNiwgNSwgMjEzLCAxNTIsIDEzNiwgMSwgNTksIDIyMywgNzMsIDEzNiwgMjUzLCAxOTMsIDIzMywgCi0gICAgMjMsIDc4LCAxMzYsIDEsIDE0OSwgMjIyLCAxODAsIDEzNiwgMSwgMTQ5LCAyMzIsIDE4NSwgMTM2LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTYsIDEzNiwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDEzNiwgMjEsIDIxMCwgODYsIDEzNiwgMjEsIDExMCwgMTM2LCAyMSwgCi0gICAgMTA1LCAxMzYsIDIxLCAxNTgsIDEzNiwgMjEsIDE2MSwgMTM2LCAyMSwgMTg5LCAxMzYsIDIxLCAxOTQsIDEzNiwgMjEsIAotICAgIDE5OCwgMTM2LCAyMSwgMTk1LCAxMzYsIDIxLCAyMDAsIDEzNiwgNTQsIDIxNiwgMjQ3LCAxMzYsIDU0LCAxMjMsIDI0MCwgCi0gICAgMjEwLCAxMzYsIDU0LCAxMjMsIDIxNiwgMTQ3LCAxMzYsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAxMzYsIDI0NCwgMiwgMTIzLCAKLSAgICAyNDIsIDI3LCAxMzYsIDI0NCwgMiwgMTM0LCAyMjQsIDE5LCAxMzYsIDI0OCwgMTUwLCA3OCwgMTM2LCAxLCAyNTAsIDk5LCAKLSAgICAyMjgsIDExMSwgMTM2LCAxLCAyNTAsIDk5LCAyMzAsIDI1LCAxMzYsIDEsIDI1MCwgOTksIDIyMiwgMTgwLCAxMzYsIDEsIAotICAgIDI1MCwgOTksIDE1NiwgMTM2LCAxLCAyNTAsIDk5LCAyMzIsIDE4NSwgMTM2LCAxLCAyNTAsIDk5LCAyMzUsIDIzLCAxNzUsIAotICAgIDUsIDI1NCwgNzQsIDE3NSwgNSwgMjEzLCAxNDYsIDE3NSwgMSwgMjUzLCAxNjUsIDE3NSwgMSwgMjU1LCAyNywgMTc1LCAxLCAKLSAgICAyNTQsIDIyMywgMTc1LCAxLCAyNTQsIDIzOCwgMTc1LCAxLCAyMzUsIDE1MSwgMTc1LCAxLCAyMzYsIDMyLCAxNzUsIDEsIAotICAgIDIxNCwgMTEwLCAxNzUsIDEsIDIxNCwgMTEyLCAxNzUsIDEsIDIzNSwgMTczLCAxNzUsIDEsIDIzNSwgMTc0LCAxNzUsIDEsIAotICAgIDIzNiwgMTgsIDE3NSwgMSwgMjM2LCAyMCwgMTc1LCAxLCAyNDUsIDE3LCAxNzUsIDEsIDI0NSwgMjA0LCAxNzUsIDEsIDI1NCwgCi0gICAgMTg4LCAxNzUsIDEsIDIyNiwgMTA4LCAxNzUsIDEsIDIyNiwgMTc3LCAxNzUsIDEsIDI1MywgMTc4LCAxNzUsIDEsIDI1NCwgCi0gICAgMTQ2LCAyMzQsIDE4NywgMTc1LCAxLCAyMzEsIDIwOSwgMjM0LCAxODcsIDE3NSwgMSwgMjU0LCAxNDYsIDI0MywgODIsIAotICAgIDE3NSwgMSwgMjMxLCAyMDksIDI0MywgODIsIDE3NSwgMSwgMjM0LCAyMjksIDIyOSwgMjIyLCAxNzUsIDEsIDIyMSwgMjM2LCAKLSAgICAyNDMsIDgyLCAxNzUsIDEsIDI1NCwgMTQ2LCAyNTAsIDIxNiwgMTc1LCAxLCAyMzEsIDIwOSwgMjUwLCAyMTYsIDE3NSwgMSwgCi0gICAgMjU0LCAxNDYsIDIzNSwgMTI3LCAxNzUsIDEsIDIzMSwgMjA5LCAyMzUsIDEyNywgMTc1LCAxLCAyMTcsIDk4LCAyMjksIAotICAgIDIyMiwgMTc1LCAxLCAyMTcsIDk4LCAyMjEsIDIzNSwgMjI5LCAyMjMsIDE3NSwgMSwgMjIxLCAyMzYsIDIzNSwgMTI3LCAKLSAgICAxNzUsIDEsIDI1NCwgMTQ2LCAyMTUsIDE1MiwgMTc1LCAxLCAyMzEsIDIwOSwgMjE1LCAxNTIsIDE3NSwgMSwgMjU0LCAxNDYsIAotICAgIDI0OCwgMTI2LCAxNzUsIDEsIDIzMSwgMjA5LCAyNDgsIDEyNiwgMTc1LCAxLCAyMzAsIDUzLCAyMjksIDE4MCwgMTc1LCAxLCAKLSAgICAyMjEsIDIzNiwgMjQ4LCAxMjYsIDE3NSwgMSwgMjU0LCAxNDYsIDIxNywgMzAsIDE3NSwgMSwgMjMxLCAyMDksIDIxNywgMzAsIAotICAgIDE3NSwgMSwgMjU0LCAxNDYsIDI0OCwgMTQ0LCAxNzUsIDEsIDIzMSwgMjA5LCAyNDgsIDE0NCwgMTc1LCAxLCAyNDgsIDE3NCwgCi0gICAgMjI5LCAxODAsIDE3NSwgMSwgMjIxLCAyMzYsIDI0OCwgMTQ0LCAxNzUsIDEsIDI1NCwgMTQ2LCAyMjUsIDIyOCwgMTc1LCAxLCAKLSAgICAyMzEsIDIwOSwgMjI1LCAyMjgsIDE3NSwgMSwgMjU0LCAxNDYsIDI1MiwgMTEyLCAxNzUsIDEsIDIzMSwgMjA5LCAyNTIsIAotICAgIDExMiwgMTc1LCAxLCAyMzEsIDEzMSwgMTc1LCAxLCAyNTQsIDEzMSwgMjUyLCAxMTIsIDE3NSwgMSwgMjExLCA1MSwgMTc1LCAKLSAgICAxLCAyMjMsIDEzMywgMTc1LCAxLCAyNDgsIDE3NCwgMjMzLCA2NywgMTc1LCAxLCAyMTQsIDEsIDE3NSwgMSwgMjE3LCA5OCwgCi0gICAgMjIxLCAyMTAsIDE3NSwgMSwgMjMwLCA1MywgMjIxLCAyMTAsIDE3NSwgMSwgMjQ4LCAxNzQsIDIyMSwgMjEwLCAxNzUsIDEsIAotICAgIDI0MSwgMjQyLCAxNzUsIDEsIDIzMCwgNTMsIDIzMywgNjcsIDE3NSwgMSwgMjQ0LCAxNTYsIDE3NSwgNSwgMjU0LCAxNzcsIAotICAgIDE3NSwgMjUsIDUsIDI1NCwgMjMzLCAxNzUsIDI1LCA1LCAyMzQsIDE1NSwgMjU0LCAyNDAsIDE3NSwgMjUsIDUsIDI0NywgCi0gICAgMjI4LCAyNTQsIDI0MCwgMTc1LCAyNSwgNSwgMjM0LCAxNTUsIDIzNSwgMTcwLCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjM1LCAKLSAgICAxNzAsIDE3NSwgMjUsIDUsIDIzNCwgMTU1LCAyMjYsIDg4LCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjI2LCA4OCwgMTc1LCAKLSAgICAyNSwgNSwgMjQzLCAxMjQsIDE3NSwgMjUsIDUsIDIzNCwgMTUsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyMzQsIDE1LCAxNzUsIAotICAgIDI1LCA1LCAyMzQsIDE3LCAyNDgsIDY3LCAxNzUsIDI1LCA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAyNTQsIDIzMywgMTc1LCAyNSwgCi0gICAgNSwgMjM0LCAxNiwgMjQyLCA0NywgMjQ3LCAyMjgsIDI1NCwgMjMzLCAxNzUsIDI1LCA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAKLSAgICAyNDMsIDgxLCAxNzUsIDI1LCA1LCAyNDMsIDgxLCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjQzLCAxMjQsIDE3NSwgMjUsIDUsIAotICAgIDI0NywgMjI4LCAyNDMsIDgxLCAxNzUsIDIyNCwgMTQxLCAyMzMsIDIwNywgMTY4LCAxMzUsIDIzNCwgMjksIDIzNCwgMjQ2LCAKLSAgICAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgMTI4LCAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgOTksIDE2OCwgMTM1LCAyMzQsIAotICAgIDEwNiwgMjM0LCA5NSwgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMzQsIDEwMywgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMjMsIDE1NCwgCi0gICAgMTY4LCAxMzUsIDIyOSwgNSwgMjI4LCAyNDgsIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDE0NywgMTY4LCAxMzUsIDI1MCwgCi0gICAgODcsIDI1MCwgOTUsIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDE0NiwgMTY4LCAxMzUsIDIxOSwgNTksIDIxOSwgNTgsIAotICAgIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDgzLCAxNjgsIDEzNSwgMjEwLCAyNDUsIDIxMCwgMjUyLCAxNjgsIDEzNSwgMjQ3LCAKLSAgICAxNDYsIDI1MCwgMTU0LCAxNjgsIDEzNSwgMjE2LCA0MiwgMjI1LCAyMzgsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjE2LCAyMDAsIAotICAgIDE2OCwgMTM1LCAyMTYsIDE1NywgMjI5LCAyMDEsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjI1LCAxMTEsIDE2OCwgMTM1LCAKLSAgICAyMjgsIDc1LCAyMjksIDk4LCAxNjgsIDEzNSwgMjQ3LCAxNDYsIDI0OCwgNjgsIDE2OCwgMTM1LCAyMTYsIDQyLCAyMTcsIAotICAgIDU1LCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMTMxLCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMjA0LCAxNjgsIDEzNSwgCi0gICAgMjE2LCAxNTcsIDIxNiwgMTU0LCAxNjgsIDEzNSwgMjI4LCA3NSwgMjI3LCAyMzcsIDE2OCwgMTM1LCAyNTEsIDIwNiwgMjUyLCAKLSAgICAxNjQsIDE2OCwgMTM1LCAyMjUsIDE3LCAyMjUsIDQyLCAxNjgsIDEzNSwgMjI1LCAxMjIsIDIyNSwgMTEzLCAxNjgsIDEzNSwgCi0gICAgMjQ0LCA0NCwgMjQ0LCAxOTYsIDE2OCwgMTM1LCAyMjUsIDEyMiwgMjI1LCAxNDEsIDE2OCwgMTM1LCAyNDQsIDQ0LCAyNDQsIAotICAgIDE3MywgMTY4LCAxMzUsIDIyNSwgMTIyLCAyMjEsIDI0NywgMTY4LCAxMzUsIDIzMCwgMTYyLCAxODQsIDE2OCwgMTM1LCAKLSAgICAyMTAsIDI0NSwgMjExLCA3OSwgMTY4LCAxMzUsIDIyMiwgMjEyLCAyMjIsIDEzOSwgMTY4LCAxMzUsIDIyMiwgMTQwLCAxNjgsIAotICAgIDEzNSwgMjMyLCAxNTcsIDIzMiwgMjA2LCAxNjgsIDEzNSwgMjMyLCA5OCwgMTY4LCAxMzUsIDIxMSwgMjI4LCAyMTIsIDYxLCAKLSAgICAxNjgsIDEzNSwgMjE5LCA1OSwgMjIyLCA2LCAxNjgsIDEzNSwgMjE5LCA1OSwgMjIyLCAxMTQsIDE2OCwgMTM1LCAyMTksIAotICAgIDU5LCAyMTgsIDgyLCAxNjgsIDEzNSwgMjQxLCA2OSwgMjQxLCAxNTksIDE2OCwgMTM1LCAyMzIsIDE1NywgMjUwLCA2OCwgCi0gICAgMTY4LCAxMzUsIDE0NCwgMjU0LCAxMTUsIDE2OCwgMTM1LCAyNDEsIDY5LCAyMjgsIDcwLCAxNjgsIDEzNSwgMjI2LCA2OCwgCi0gICAgMTY4LCAxMzUsIDIyMSwgMjMwLCA2MSwgMTY4LCAxMzUsIDIzMSwgMjA0LCAyNDIsIDE3LCAxNjgsIDEzNSwgMjIxLCAyMzAsIAotICAgIDI1NSwgNzMsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAxMzYsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzMsIDE2OCwgMTM1LCAKLSAgICAyMjEsIDIzMCwgMjM2LCAzMywgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIDIxNCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIAotICAgIDIxMiwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3MCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIDExOCwgMTY4LCAxMzUsIDIyNSwgCi0gICAgMTI0LCAxNjgsIDI0OSwgOTgsIDE2LCAyNTIsIDE2NSwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3NSwgMTY4LCAxMzUsIDIyMSwgCi0gICAgMjMwLCAyNTQsIDI0MywgMTY4LCAxMzUsIDIyMSwgMjMwLCA3NiwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyNTQsIDIwMiwgMjMxLCAKLSAgICAxOTgsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAyMDIsIDIzMSwgMTk5LCAxNjgsIDEzNSwgMjMzLCAxMDYsIDE2OCwgCi0gICAgMTM1LCAyMzEsIDE5NSwgMTY4LCAxMzUsIDIzMSwgMTk2LCAxNjgsIDEzNSwgMjMxLCAyMDQsIDI0NSwgMTgwLCAxNjgsIAotICAgIDEzNSwgMjMxLCAyMDQsIDIxNiwgMTU2LCAxNjgsIDEzNSwgMjMxLCAyMDQsIDIxNSwgMjI4LCAxNjgsIDEzNSwgMjMxLCAKLSAgICAyMDQsIDI1MCwgMTM1LCAxNjgsIDEzNSwgMjE2LCAxOTgsIDE2OCwgMTM1LCAyMjgsIDIwNSwgMTY4LCAxMzUsIDIxMSwgNzMsIAotICAgIDE2OCwgMTM1LCAyNDQsIDM1LCAxNjgsIDIxLCAyMTAsIDg2LCAxNjgsIDIxLCAxMTAsIDE2OCwgMjEsIDEwNSwgMTY4LCAyMSwgCi0gICAgMTU4LCAxNjgsIDIxLCAxNjEsIDE2OCwgMjEsIDE4OSwgMTY4LCAyMSwgMTk0LCAxNjgsIDIxLCAxOTgsIDE2OCwgMjEsIAotICAgIDE5NSwgMTY4LCAyMSwgMjAwLCAxNjgsIDEzNSwgMjU0LCAxMTEsIDE2OCwgMTM1LCAyMzQsIDEwNCwgMjA5LCAyMDksIDEsIAotICAgIDIzNCwgMjgsIDIwOSwgMjA5LCAxLCAyMzQsIDEwNiwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDIzNCwgMTA2LCAyMTcsIDYyLCAKLSAgICAyMDksIDIwOSwgMSwgMjI5LCA0LCAyMDksIDIwOSwgMSwgMjQ5LCAyMzgsIDIwOSwgMjA5LCAxLCAyMTksIDU5LCAyMTcsIAotICAgIDYyLCAyMDksIDIwOSwgMSwgMjI3LCAxMzQsIDIwOSwgMjA5LCAxLCAyNDcsIDE0NSwgMjA5LCAyMDksIDEsIDExMSwgMjA5LCAKLSAgICAyMDksIDEsIDIxNiwgMTU3LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjE2LCAxNTcsIDIxNywgNjIsIDIwOSwgMjA5LCAxLCAKLSAgICAyMjgsIDc0LCAyMDksIDIwOSwgMSwgMjUxLCAyMDUsIDIwOSwgMjA5LCAxLCAyMjUsIDE2LCAyMDksIDIwOSwgMSwgMjI1LCAKLSAgICAxMjIsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyMTcsIDYyLCAyMDksIDIwOSwgMSwgMjI1LCAxMjIsIDIxNywgCi0gICAgNjIsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjMwLCAxNjEsIDIwOSwgMjA5LCAxLCAKLSAgICAyMTAsIDI0NCwgMjA5LCAyMDksIDEsIDIzMiwgMTU3LCAyMzIsIDIwNiwgMjA5LCAyMDksIDEsIDIzMiwgMTU3LCAyMzIsIAotICAgIDEyMSwgMjA5LCAyMDksIDEsIDIxMSwgMjI3LCAyMDksIDIwOSwgMSwgMjE5LCA1OSwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIAotICAgIDI0MSwgNjksIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCA3NiwgMjA5LCAyMDksIDEsIDI0MSwgNjksIDIxNywgNjIsIDIwOSwgCi0gICAgMjA5LCAyNDUsIDE2MywgMjA5LCAyMDksIDI1LCA1LCA2MSwgMjA5LCAyMDksIDI1LCA1LCAyMzEsIDIwNCwgMjM0LCAyMzQsIAotICAgIDIwOSwgMjA5LCAyNSwgNSwgMjU1LCA3MywgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDEzNiwgMjA5LCAyMDksIDI1LCA1LCA3MywgCi0gICAgMjA5LCAyMDksIDI1LCA1LCAyMzYsIDMzLCAyMDksIDIwOSwgMjUsIDUsIDIxMSwgMTE3LCAyMDksIDIwOSwgMjUsIDUsIAotICAgIDIxMCwgMTY5LCAyMDksIDIwOSwgMjUsIDUsIDcwLCAyMDksIDIwOSwgMjUsIDUsIDIxNCwgMTE4LCAyMDksIDIwOSwgMjUsIAotICAgIDUsIDIzMSwgMjA0LCAyMzQsIDEzLCAyMDksIDIwOSwgMjIwLCAxNDUsIDUsIDIzMiwgMTU2LCAyMDksIDIwOSwgMjIwLCAKLSAgICAxNDUsIDUsIDIyNywgMTM0LCAyMDksIDIwOSwgMjUsIDUsIDc1LCAyMDksIDIwOSwgMjUsIDUsIDI0NSwgMTk1LCAyMDksIAotICAgIDIwOSwgMjUsIDUsIDc2LCAyMDksIDIwOSwgMjUsIDUsIDI1MywgMTY3LCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMjAxLCAKLSAgICAyMDksIDIwOSwgMjM0LCAyOSwgMjMzLCAxMzUsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA0LCAyNDUsIDE4MCwgMjA5LCAyMDksIAotICAgIDEzOCwgMjMxLCAyMDQsIDIxNiwgMTU2LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwNCwgMjE2LCAxMTcsIDIwOSwgMjA5LCAKLSAgICAxMzgsIDIzMSwgMjA0LCAyNTAsIDIyMywgMjA5LCAyMDksIDI1MSwgNCwgNzgsIDIwOSwgMjA5LCAyMjgsIDIxNCwgMjA5LCAKLSAgICAyMDksIDIxLCAyMTAsIDg2LCAyMDksIDIwOSwgMjEsIDExMCwgMjA5LCAyMDksIDIxLCAxMDUsIDIwOSwgMjA5LCAyMSwgCi0gICAgMTU4LCAyMDksIDIwOSwgMjEsIDE2MSwgMjA5LCAyMDksIDIxLCAxODksIDIwOSwgMjA5LCAyMSwgMTk0LCAyMDksIDIwOSwgCi0gICAgMjEsIDE5OCwgMjA5LCAyMDksIDIxLCAxOTUsIDIwOSwgMjA5LCAyMSwgMjAwLCAyMDksIDIwOSwgMjQxLCA2OSwgMjI4LCAKLSAgICA3NCwgMjA5LCAyMDksIDI0MSwgNjksIDIzMCwgMTYxLCAyMDksIDIwOSwgMSwgMjM0LCAxMDcsIDI0MiwgMTc0LCAyMDksIAotICAgIDIwOSwgMSwgMjM0LCAxMDcsIDIyNywgMTM0LCA2MywgMywgMjI2LCAyMDQsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIAotICAgIDIzMCwgMjQ4LCAyMTUsIDE4OSwgNjEsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIDIzMCwgMjQ4LCAyNTUsIDE1OSwgCi0gICAgMjIyLCAyMTYsIDI1MiwgNzcsIDE4NCwgNjMsIDE2NCwgMjQyLCAxMTUsIDIxMSwgMCwgMjMwLCAyNDgsIDI1NSwgMTU5LCAKLSAgICAyNDIsIDExNSwgMjE1LCAxNzMsIDE4NCwgNjMsIDE2NCwgNjUsIDIxMSwgMCwgMjMwLCAyNDgsIDIzMSwgOTMsIDE4NCwgNjMsIAotICAgIDE2NCwgMjQ5LCAyNTIsIDIxMSwgMCwgMjMwLCAyNDgsIDIyMCwgMTA5LCAxODQsIDYzLCAxNjQsIDI1MCwgMjM5LCAyMTEsIAotICAgIDAsIDIzMCwgMjQ4LCAyMjUsIDExMiwgMjIwLCA5NiwgMTg0LCA2MywgMTY0LCAyMTEsIDAsIDIzMCwgMjQ4LCAyMTUsIDE3MywgCi0gICAgMjIwLCA5NiwgMTg0LCA2MywgMTY0LCAyMjEsIDIwOCwgMjIwLCA5NSwgNjMsIDE2NCwgMjUxLCAxMjgsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDcsIDYzLCAxNjQsIDI1MSwgMjIzLCAyMjAsIDMsIDIxMSwgMCwgMjMwLCAyNDcsIDYzLCAxNjQsIDIzNSwgMTk3LCAyMTUsIAotICAgIDE3MiwgNjMsIDE2NCwgMjQ4LCA2MSwgMjE1LCAxNzMsIDI1MSwgMTI3LCA2MywgMTY0LCAyMjAsIDk1LCA2MywgMTY0LCAKLSAgICAyMjcsIDEzOSwgMjIwLCA5NSwgNjMsIDE2NCwgMjE1LCAxNzMsIDIyMCwgOTUsIDYzLCAxNjQsIDIyNywgMTM5LCAyMTUsIAotICAgIDE3MywgMjIwLCA5NSwgNjMsIDE2NCwgMjIyLCAyMzYsIDI1MCwgMTIyLCAyMTgsIDIzNiwgMjIwLCA5NSwgNjMsIDE2NCwgCi0gICAgMjIzLCA0MiwgMjQyLCAxNDYsIDIyMCwgOTUsIDYzLCAxNjQsIDI1MCwgMjM5LCAyNTUsIDE2MywgMjIyLCAxNDQsIDIzMSwgCi0gICAgOTIsIDE5OSwgMjUxLCA3LCA2MywgMTY0LCAyNDIsIDExNSwgMjE1LCAxNzIsIDYzLCAyMzIsIDE0NCwgNSwgMjUwLCAxNTUsIAotICAgIDIyMiwgMTQzLCA2MywgMjMyLCAxNDQsIDUsIDIzMiwgMjUyLCAyMjIsIDE0MywgNjMsIDI1MywgMjEyLCA1LCAyMjAsIDEwNSwgCi0gICAgMjQzLCA2NSwgMjU1LCAxNjQsIDIyMiwgMTQzLCA2MywgMjUzLCAyMTIsIDUsIDI1NSwgMTYxLCAxOTAsIDYzLCAyNTMsIAotICAgIDIxMiwgNSwgMjIxLCAxODIsIDIxNSwgMTY4LCA2MywgNSwgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDMsIDY0LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDIsIDE3NiwgNjMsIDUsIDIyMywgMTMwLCAyNDcsIDE1OSwgMjQyLCAxMTYsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MywgNjQsIDYzLCA1LCAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MiwgMTc2LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDI0NywgMTU5LCAyMjMsIDEzMCwgMjI5LCAyMTgsIDYzLCAyMSwgMjEwLCA4NiwgNjMsIDIxLCAxMTAsIDYzLCAKLSAgICAyMSwgMTA1LCA2MywgMjEsIDE1OCwgNjMsIDIxLCAxNjEsIDYzLCAyMSwgMTg5LCA2MywgMjEsIDE5NCwgNjMsIDIxLCAxOTgsIAotICAgIDYzLCAyMSwgMTk1LCA2MywgMjEsIDIwMCwgNjMsIDIxLCAxNjMsIDExMCwgNjMsIDIxLCAxNjMsIDEwNSwgNjMsIDIxLCAKLSAgICAxNjMsIDE1OCwgNjMsIDIxLCAxNjMsIDE2MSwgNjMsIDIxLCAxNjMsIDE4OSwgNjMsIDIxLCAxNjMsIDE5NCwgNjMsIDIxLCAKLSAgICAxNjMsIDE5OCwgNjMsIDIxLCAxNjMsIDE5NSwgNjMsIDIxLCAxNjMsIDIwMCwgNjMsIDIxLCAxNjMsIDIxMCwgODYsIDYzLCAKLSAgICAxNjQsIDI1MSwgMTMwLCAyMjIsIDE0MywgNjMsIDE2NCwgMjI5LCA2OCwgMjUxLCA2OCwgMjI3LCAxNDksIDIxMCwgMjUsIAotICAgIDYzLCAxNjQsIDI1MCwgMjM5LCAyNTUsIDE2MywgMjIyLCAxNDQsIDI1MSwgNjksIDIzMCwgMjAyLCAyNTEsIDcsIDYzLCAKLSAgICAxNjQsIDIyOSwgNjgsIDI1MSwgNjgsIDIyMCwgMTA2LCAyMjIsIDE0MywgNjMsIDE2NCwgMjUwLCAxMzIsIDIzMCwgMjQ3LCAKLSAgICA2MywgMTY0LCAyMTUsIDE4NCwgMjU1LCAxNjAsIDYzLCAxNjQsIDI0MiwgMTAwLCAyMjIsIDE0NCwgMjQyLCA2MywgNjMsIAotICAgIDE2NCwgMjQyLCAxMDAsIDIyMiwgMTQ0LCAyNDIsIDY5LCA2MywgMTY0LCAyNTQsIDExNiwgMjM0LCAxMjMsIDI0MiwgNjMsIAotICAgIDYzLCAxNjQsIDI1NCwgMTE2LCAyMzQsIDEyMywgMjQyLCA2OSwgNjMsIDUsIDIxMSwgNjUsIDIxNSwgMTcxLCA2MywgNSwgCi0gICAgMjMxLCAxNjcsIDIxNSwgMTcxLCA2MywgMSwgMTc2LCA2MywgMSwgMjM0LCAxMzIsIDYzLCAxLCAyNDMsIDEzNSwgNjMsIDEsIAotICAgIDI0MiwgMjQ5LCA2MywgMSwgMjI5LCA3NywgNjMsIDEsIDI1MSwgMzMsIDYzLCAxLCAyNTAsIDE1NywgNjMsIDEsIDIzNSwgCi0gICAgMTQxLCA2MywgMSwgMjI3LCAxNjUsIDYzLCAxLCAyMTUsIDE1NiwgNjMsIDEsIDIxNSwgMTQ0LCA2MywgMSwgMjQ4LCAxMzUsIAotICAgIDYzLCAxLCAyNDgsIDExOSwgNjMsIDEsIDIyOCwgMTEwLCA2MywgMSwgMjE3LCAxMDUsIDYzLCAxLCAyMTYsIDIwOCwgNjMsIAotICAgIDEsIDI0OCwgMjIxLCA2MywgMSwgMjQ4LCAyNSwgNjMsIDEsIDE5NywgNjMsIDEsIDE5MCwgNjMsIDEsIDIyNSwgMTQ3LCA2MywgCi0gICAgMSwgMjUyLCAxOTEsIDYzLCAxLCAyNTIsIDE4LCA2MywgMSwgMTg0LCA2MywgMSwgMjE1LCAxODMsIDYzLCAxLCAyMTUsIAotICAgIDE3NSwgNjMsIDEsIDI0NiwgMzgsIDYzLCAxLCAyNDYsIDMzLCA2MywgMSwgMjEyLCA2NSwgNjMsIDEsIDIxMCwgODIsIDYzLCAKLSAgICAxLCAyMTAsIDExNiwgNjMsIDEsIDI1NSwgMTY2LCA2MywgMSwgMTkxLCA2MywgMSwgMjA1LCA2MywgMSwgMjMzLCAxMzUsIAotICAgIDYzLCAxLCAyMjAsIDEwMiwgNjMsIDEsIDIxOCwgMjIzLCA2MywgMSwgMjA2LCA2MywgMSwgMTYyLCA2MywgMSwgNjEsIDYzLCAKLSAgICAxLCAyMzMsIDIzMSwgNjMsIDEsIDI0NCwgNzcsIDIwNSwgNjMsIDEsIDIzNCwgNDYsIDYzLCAxLCAyMjIsIDE3OSwgNjMsIAotICAgIDI1LCA1LCAyNTUsIDczLCA2MywgMjUsIDUsIDczLCA2MywgMjUsIDUsIDIzNiwgMzMsIDYzLCAyNSwgNSwgNzAsIDYzLCAyNSwgCi0gICAgNSwgMjE0LCAxMTgsIDYzLCAyNSwgNSwgMTQ5LCAxNTMsIDYzLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgNjMsIDI1LCA1LCAKLSAgICAxNDksIDE1NiwgNjMsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCA2MywgMjUsIDUsIDc1LCA2MywgMjUsIDUsIDI0NSwgMjA5LCAKLSAgICA2MywgMjUsIDUsIDc2LCA2MywgMjUsIDUsIDIyNiwgMTgzLCA2MywgNSwgMjIyLCAyMjEsIDIxOCwgODQsIDIyOSwgNzgsIAotICAgIDIyMiwgMjExLCA2MywgNSwgMjIyLCAyMTYsIDI1MiwgNzYsIDYzLCAyNSwgNSwgMjIzLCA0OSwgNzMsIDYzLCAyNSwgNSwgCi0gICAgMjIzLCA0OSwgMjM2LCAzMywgNjMsIDUsIDIyNywgMTQ5LCAyMTAsIDI2LCAyMjksIDIyNiwgMjQ4LCAyMjEsIDYzLCA1LCAKLSAgICAyMTksIDcxLCAyMzMsIDYwLCA2MywgMTY0LCAyNDIsIDI5LCA2MywgMTY0LCAyMjYsIDU3LCA2MywgNSwgMjMzLCA2MywgCi0gICAgMjIyLCAxNDMsIDYzLCA1LCAyMTEsIDcwLCAyMjIsIDE0MywgNjMsIDUsIDIzMywgNjQsIDIxNSwgMTg0LCAyNTEsIDcsIDYzLCAKLSAgICA1LCAyMzEsIDk1LCAyNTEsIDcsIDYzLCA1LCAyNDIsIDExOSwgMjUxLCA4LCAyMjMsIDQwLCA2MywgNSwgMjQyLCAxMTksIAotICAgIDIzMSwgODUsIDIyMywgNDAsIDYzLCA1LCAyMzUsIDE5MywgMjMxLCA5NSwgMjUxLCA3LCA2MywgMjE4LCA3MywgNSwgMjMzLCAKLSAgICA2NCwgMjE1LCAxODQsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIAotICAgIDIzNSwgMTkzLCAyMzEsIDk1LCAyNTEsIDcsIDYzLCAyMTgsIDczLCAxLCAxNzYsIDYzLCAyMTgsIDczLCAxLCAyMzQsIDEzMiwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI0MywgMTM1LCA2MywgMjE4LCA3MywgMSwgMjQyLCAyNDksIDYzLCAyMTgsIDczLCAxLCAyMjksIAotICAgIDc3LCA2MywgMjE4LCA3MywgMSwgMjUxLCAzMywgNjMsIDIxOCwgNzMsIDEsIDI1MCwgMTU3LCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjM1LCAxNDEsIDYzLCAyMTgsIDczLCAxLCAyMjcsIDE2NSwgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTU2LCA2MywgMjE4LCAKLSAgICA3MywgMSwgMjE1LCAxNDQsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMTE5LCA2MywgCi0gICAgMjE4LCA3MywgMSwgMjI4LCAxMTAsIDYzLCAyMTgsIDczLCAxLCAyMTcsIDEwNSwgNjMsIDIxOCwgNzMsIDEsIDIxNiwgMjA4LCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjQ4LCAyMjEsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDI1LCA2MywgMjE4LCA3MywgMSwgMTk3LCAKLSAgICA2MywgMjE4LCA3MywgMSwgMTkwLCA2MywgMjE4LCA3MywgMSwgMjI1LCAxNDcsIDYzLCAyMTgsIDczLCAxLCAyNTIsIDE5MSwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI1MiwgMTgsIDYzLCAyMTgsIDczLCAxLCAxODQsIDYzLCAyMTgsIDczLCAxLCAyMTUsIDE4MywgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTc1LCA2MywgMjE4LCA3MywgMSwgMjQ2LCAzOCwgNjMsIDIxOCwgNzMsIDEsIDI0NiwgCi0gICAgMzMsIDYzLCAyMTgsIDczLCAxLCAyMTIsIDY1LCA2MywgMjE4LCA3MywgMSwgMjEwLCA4MiwgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIxMCwgMTE2LCA2MywgMjE4LCA3MywgMSwgMjU1LCAxNjYsIDYzLCAyMTgsIDczLCAxLCAxOTEsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMDUsIDYzLCAyMTgsIDczLCAxLCAyMzMsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDIyMCwgMTAyLCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjE4LCAyMjMsIDYzLCAyMTgsIDczLCAxLCAyMDYsIDYzLCAyMTgsIDczLCAxLCAxNjIsIDYzLCAyMTgsIDczLCAxLCA2MSwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDIzMywgMjMxLCA2MywgMjE4LCA3MywgMSwgMjQ0LCA3NywgMjEyLCA2NSwgNjMsIDIxOCwgNzMsIAotICAgIDEsIDI0NCwgNzcsIDE5MSwgNjMsIDIxOCwgNzMsIDEsIDI0NCwgNzcsIDIwNSwgNjMsIDIzMywgMjE4LCAyMjIsIDE0MSwgCi0gICAgMjM0LCAxMzIsIDYzLCAyMzMsIDIxOCwgMjIyLCAxNDEsIDIzNCwgMTMzLCAyNTEsIDY5LCAyMzAsIDIwMiwgMjUxLCA3LCAKLSAgICA2MywgMjUwLCAyNTIsIDUsIDExNCwgMjUyLCA3MCwgNjMsIDI1MCwgMjUyLCA1LCAxOTIsIDI1MiwgNzAsIDYzLCAyNTAsIAotICAgIDI1MiwgNSwgMjUwLCAyNTMsIDIxNywgMjAsIDYzLCAyNTAsIDI1MiwgNSwgMjIxLCAyMDcsIDI1NSwgMTY1LCA2MywgMTYsIAotICAgIDI0NiwgOTEsIDI1MSwgMTI1LCA2MywgMTYsIDIyMywgMTI5LCAyMjIsIDIyMiwgNjMsIDE2LCAyMjYsIDc3LCAyNDMsIDYzLCAKLSAgICA2MywgMTYsIDIyMywgMTI5LCAyMjIsIDIyMywgMjIzLCA0MiwgMjQyLCAxNDUsIDYzLCAxNiwgMjI1LCAxMTIsIDE5MCwgNjMsIAotICAgIDE2LCAyMjgsIDU5LCAyNTEsIDEyNSwgNjMsIDE2LCAyMjgsIDU5LCAyNTEsIDEyNiwgMjI3LCAxMzksIDI1NSwgMTYyLCA2MywgCi0gICAgMTYsIDIyOCwgNTksIDI1MSwgMTI2LCAyNDIsIDExNywgMjU1LCAxNjIsIDYzLCAxNiwgMjI4LCA1OSwgMjUxLCAxMjYsIAotICAgIDI1MSwgNjksIDI1NSwgMTYyLCA2MywgNSwgMjIzLCAxMzAsIDIyOSwgMjE5LCAyMjMsIDEzMCwgMjQ3LCAxNTgsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MiwgMTE2LCA2MywgMTY0LCAyNTEsIDEyOSwgMjIwLCAzLCAyNDIsIDIxNSwgMjMwLCAKLSAgICAyNDgsIDIyMywgNDEsIDYzLCAxNjQsIDIzMCwgMTYzLCAyMTEsIDAsIDI0MiwgMjE1LCAyMzAsIDI0OCwgMjIzLCA0MSwgNjMsIAotICAgIDE2NCwgMjI3LCAxMzksIDIxNSwgMTcyLCA2MywgMTY0LCA2NSwgMjUxLCAxNTIsIDIyMiwgMjEzLCAyMTEsIDAsIDIzMCwgCi0gICAgMjQ4LCAyMzEsIDkzLCAxODQsIDYzLCAxNjQsIDI0OSwgMjUyLCAyNTEsIDE1MiwgMjIyLCAyMTMsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDgsIDIyMCwgMTA5LCAxODQsIDIyMiwgMjUwLCAyMTcsIDI1NSwgNTAsIDIzMywgNDUsIDIxNywgMjU1LCA1MCwgMjIyLCAKLSAgICAyNTAsIDIxNywgMjU1LCA1LCAyLCAyNDcsIDExOCwgMjMzLCA0NSwgMjE3LCAyNTUsIDUsIDIsIDI0NywgMTE4LCA2MywgCi0gICAgMTY0LCAyMzMsIDU1LCAyMzEsIDk2LCAyMjIsIDE0MywgNjMsIDE2NCwgMjE1LCAyNTAsIDIzMSwgOTYsIDIyMiwgMTQzLCAKLSAgICA2OCwgMSwgMTc2LCA2OCwgMSwgMjM0LCAxMzIsIDY4LCAxLCAyNDMsIDEzNSwgNjgsIDEsIDI0MiwgMjQ5LCA2OCwgMSwgCi0gICAgMjI5LCA3NywgNjgsIDEsIDI1MSwgMzMsIDY4LCAxLCAyNTAsIDE1NywgNjgsIDEsIDIzNSwgMTQxLCA2OCwgMSwgMjM1LCAKLSAgICAxMTQsIDY4LCAxLCAyMjcsIDE2NSwgNjgsIDEsIDIyOCwgNzYsIDY4LCAxLCAyMTUsIDE1NiwgNjgsIDEsIDIxNSwgMTQ0LCAKLSAgICA2OCwgMSwgMjQ4LCAxMzUsIDY4LCAxLCAyNDgsIDExOSwgNjgsIDEsIDIyOCwgMTEwLCA2OCwgMSwgMjE3LCAxMDUsIDY4LCAKLSAgICAxLCAyMTYsIDIwOCwgNjgsIDEsIDI0OCwgMjIxLCA2OCwgMSwgMjQ4LCAyNSwgNjgsIDEsIDE5NywgNjgsIDEsIDE5MCwgNjgsIAotICAgIDEsIDIyNSwgMTQ3LCA2OCwgMSwgMjUyLCAxOTEsIDY4LCAxLCAyNTIsIDE4LCA2OCwgMSwgMTg0LCA2OCwgMSwgMTkxLCA2OCwgCi0gICAgMSwgMjA1LCA2OCwgMSwgMjMzLCAxMzUsIDY4LCAxLCAyMTIsIDY1LCA2OCwgMSwgMjA2LCA2OCwgMSwgMTYyLCA2OCwgMSwgCi0gICAgMjMyLCAxODQsIDY4LCAxLCA2MSwgNjgsIDEsIDIyMCwgODYsIDYxLCA2OCwgMSwgNzMsIDY4LCAxLCAyMzYsIDMzLCA2OCwgCi0gICAgMSwgNzAsIDY4LCAxLCAyMTQsIDExOCwgNjgsIDEsIDc1LCA2OCwgMSwgMjMwLCAxNTEsIDc1LCA2OCwgMSwgNzYsIDY4LCAxLCAKLSAgICAyNTMsIDE5MiwgNjgsIDI1LCA1LCAyMTcsIDY0LCAyNTUsIDczLCA2OCwgMjUsIDUsIDI1NSwgNzMsIDY4LCAyNSwgNSwgNzMsIAotICAgIDY4LCAyNSwgNSwgMjM2LCAzMywgNjgsIDI1LCA1LCA3MCwgNjgsIDI1LCA1LCAyMTQsIDExOCwgNjgsIDI1LCA1LCA3NSwgCi0gICAgNjgsIDI1LCA1LCAyNTQsIDIwMSwgNjgsIDI1LCA1LCAyMzAsIDE1MSwgMjM2LCAzMywgNjgsIDI1LCA1LCAyMzAsIDE1MSwgCi0gICAgNzYsIDY4LCAyNSwgNSwgMTYwLCA0OCwgNjgsIDUsIDI1NCwgNzUsIDY4LCA1LCA1OSwgNTEsIDY4LCA1LCAyMTMsIDE0NywgCi0gICAgNjgsIDUsIDIxMywgMTUyLCA2OCwgNSwgMjUzLCAyMzUsIDY4LCAxMTYsIDUsIDE0NywgMTkxLCA2OCwgMTE2LCA1LCAxNDcsIAotICAgIDIwNSwgNjgsIDExNiwgNSwgMTQ3LCAyMTIsIDY1LCA2OCwgMTE2LCA1LCAxNDcsIDE2MiwgNjgsIDEsIDI0MiwgMTMyLCAKLSAgICAyMDYsIDY4LCAyMSwgMjEwLCA4NiwgNjgsIDIxLCAxMTAsIDY4LCAyMSwgMTA1LCA2OCwgMjEsIDE1OCwgNjgsIDIxLCAxNjEsIAotICAgIDY4LCAyMSwgMTg5LCA2OCwgMjEsIDE5NCwgNjgsIDIxLCAxOTgsIDY4LCAyMSwgMTk1LCA2OCwgMjEsIDIwMCwgNjgsIDUsIAotICAgIDIzMiwgMTkyLCAyMjEsIDE3MiwgNjgsIDUsIDIyMSwgMTcyLCA2OCwgMTYsIDIzMiwgMTUzLCA2OCwgMTYsIDI0OSwgMjEzLCAKLSAgICA2OCwgMTYsIDI1NCwgMjIwLCA2OCwgMTYsIDI0MywgNDgsIDY4LCAxLCAyMjAsIDEwMiwgNjgsIDEsIDIxOCwgMjIzLCA2OCwgCi0gICAgMSwgMTQ5LCAxNTMsIDY4LCAxLCAxNDksIDIyMiwgMTgwLCA2OCwgMSwgMTQ5LCAxNTYsIDY4LCAxLCAxNDksIDIzMiwgMTg1LCAKLSAgICA2OCwgMjUsIDUsIDE0OSwgMTUzLCA2OCwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDY4LCAyNSwgNSwgMTQ5LCAxNTYsIDY4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgNjgsIDEsIDIzMCwgMTUxLCAyMjksIDc3LCA2OCwgMSwgMjMwLCAxNTEsIDIzNSwgCi0gICAgMTE0LCA2OCwgMSwgMjMwLCAxNTEsIDI1MiwgMTExLCA2OCwgMSwgMjMwLCAxNTEsIDI1MiwgMTA2LCA2OCwgMTE2LCA1LCAKLSAgICAyMzAsIDE1MSwgMTQ3LCAxOTcsIDY4LCAxMTYsIDUsIDIzMCwgMTUxLCAxNDcsIDE4NCwgNjgsIDExNiwgNSwgMjMwLCAxNTEsIAotICAgIDE0NywgMjMzLCAxMzUsIDY4LCAxLCAyMjAsIDEwOCwgMjM0LCAyMTMsIDIyMCwgMTAyLCA2OCwgMjUsIDUsIDIyMCwgMTA4LCAKLSAgICAyMzQsIDIxMywgMjQ1LCA1NSwgNjgsIDEzOCwgMTY0LCAyMjAsIDEwOCwgMjM0LCAyMTMsIDI0MSwgMjQ3LCA2OCwgMTM4LCAKLSAgICAxNjQsIDIyMCwgMTA4LCAyMzQsIDIxMywgMjM0LCAxODMsIDIyNSwgMTIxLCA2OCwgMSwgMjEyLCA3LCAyMjQsIDEwOCwgCi0gICAgMjM0LCAyMTMsIDIxNiwgMjA4LCA2OCwgMSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIyNCwgMTE0LCA2OCwgMjUsIAotICAgIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyNDUsIDU1LCA2OCwgMjUsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgCi0gICAgMjEzLCAyMTQsIDIxNCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI5LCA2OCwgNSwgMjEyLCA3LCAKLSAgICAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjgsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyNywgCi0gICAgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI2LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAKLSAgICAyMTMsIDIxNiwgMjUsIDY4LCAxLCAyNDUsIDIxOSwgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMjgsIDExMCwgNjgsIDEsIDI0NSwgCi0gICAgMjE5LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxMCwgMTc2LCA2OCwgMSwgMjQ1LCAyMTksIDIyNCwgMTA4LCAyMzQsIDIxMywgCi0gICAgMjQyLCAyMTcsIDY4LCAyNSwgNSwgMjQzLCA1OSwgMjM0LCAyMTMsIDczLCA2OCwgMjUsIDUsIDIzNCwgMTg4LCAyMjYsIAotICAgIDIzNCwgNjgsIDI1LCA1LCAyMzQsIDE4OCwgNzAsIDY4LCAyNSwgNSwgMjM0LCAxODgsIDI0NSwgMjA5LCA2OCwgMSwgMjIwLCAKLSAgICA4NiwgMTc2LCA2OCwgMSwgMjIwLCA4NiwgMjM0LCAxMzIsIDY4LCAxLCAyMjAsIDg2LCAyNDMsIDEzNSwgNjgsIDEsIDIyMCwgCi0gICAgODYsIDI1MSwgMzMsIDY4LCAxLCAyMjAsIDg2LCAyMTAsIDExNiwgNjgsIDEsIDIyMCwgODYsIDIyNywgMTY1LCA2OCwgMSwgCi0gICAgMjIwLCA4NiwgMjQ4LCAyMjEsIDY4LCAxLCAyMjAsIDg2LCAxOTcsIDY4LCAxLCAyMjAsIDg2LCAyMjUsIDE0NywgNjgsIDEsIAotICAgIDIyMCwgODYsIDI0NCwgMTk2LCA2OCwgMSwgMjIwLCA4NiwgMjUyLCAxOTEsIDY4LCAxLCAyMjAsIDg2LCAyMTYsIDIwOCwgCi0gICAgNjgsIDEsIDIyMCwgODYsIDE2MiwgNjgsIDExNiwgNSwgMjIwLCA4NiwgMTQ3LCAyMTIsIDY1LCA2OCwgMjUsIDUsIDIyMCwgCi0gICAgODYsIDI1NSwgNzMsIDY4LCAyNSwgNSwgMjIwLCA4NiwgNzUsIDY4LCAyNSwgNSwgMjIwLCA4NiwgMTYwLCA0OCwgNjgsIDI1LCAKLSAgICA1LCAyMjAsIDg2LCA0MCwgMjExLCAxMTcsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAKLSAgICAyNywgNjgsIDUsIDIyMCwgODYsIDIxNiwgMjUsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI0LCA2OCwgNSwgMjIwLCA4NiwgCi0gICAgMjQ5LCAxNTIsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg2LCAyNDksIDE1MiwgMjE2LCAyNywgNjgsIDUsIDIyMCwgODYsIAotICAgIDI0OSwgMTUyLCAyNDUsIDE1MywgMjE2LCAzMCwgNjgsIDEsIDIyMiwgMTI4LCAyMjYsIDYzLCAyNDQsIDE5NiwgNjgsIDUsIAotICAgIDIyMiwgMTI4LCAyMjYsIDYzLCAyMTYsIDI1LCA2OCwgMjIwLCA4NiwgMjEsIDIxMCwgODYsIDY4LCAyMjAsIDg2LCAyMSwgCi0gICAgMTEwLCA2OCwgMjIwLCA4NiwgMjEsIDEwNSwgNjgsIDIyMCwgODYsIDIxLCAxNTgsIDY4LCAyMjAsIDg2LCAyMSwgMTYxLCAKLSAgICA2OCwgMjIwLCA4NiwgMjEsIDE4OSwgNjgsIDIyMCwgODYsIDIxLCAxOTQsIDY4LCAyMjAsIDg2LCAyMSwgMTk4LCA2OCwgCi0gICAgMjIwLCA4NiwgMjEsIDE5NSwgNjgsIDIyMCwgODYsIDIxLCAyMDAsIDY4LCA1LCAyMzQsIDEyNiwgMjE2LCAyOSwgNjgsIDUsIAotICAgIDIzNCwgMTI2LCAyMTYsIDI3LCA2OCwgMjUsIDUsIDI1NCwgMTkwLCA2MSwgNjgsIDI1LCA1LCAyNTQsIDE5MCwgMjU0LCAKLSAgICAyMDEsIDY4LCAxNiwgMjIwLCA4NiwgMTEwLCA2OCwgMTYsIDIyMCwgODYsIDI0NSwgMzAsIDk4LCA2LCAxLCAyNTQsIDEyMywgCi0gICAgOTgsIDYsIDEsIDI1MiwgMTUyLCA5OCwgNiwgMSwgMjQzLCAxMDYsIDk4LCA2LCAxLCAyNDcsIDEyOCwgOTgsIDYsIDEsIAotICAgIDI0NSwgMTUwLCA5OCwgNiwgMSwgMjEzLCAxNjAsIDk4LCA2LCAxLCAyMTAsIDg5LCA5OCwgNiwgMSwgMjE3LCA2MCwgOTgsIAotICAgIDYsIDEsIDIzNSwgMjU1LCA5OCwgNiwgMSwgMjM0LCAyMzQsIDk4LCA2LCAxLCAyMzMsIDgxLCA5OCwgNiwgMSwgMjMxLCAKLSAgICAxODUsIDk4LCA2LCAxLCAyMjksIDE5NSwgOTgsIDYsIDEsIDIyNiwgMTk2LCA5OCwgNiwgMSwgMjI2LCAxNywgOTgsIDYsIDEsIAotICAgIDIxMCwgNzgsIDk4LCA2LCAxLCAyMjMsIDE3MSwgOTgsIDYsIDEsIDIyMSwgMjQzLCA5OCwgNiwgMSwgMjE3LCA1MCwgOTgsIAotICAgIDYsIDEsIDIxNCwgMTkwLCA5OCwgNiwgMSwgMjI1LCAxNDAsIDk4LCA2LCAxLCAyMzQsIDEyMSwgOTgsIDYsIDEsIDI0MiwgCi0gICAgMjQxLCA5OCwgNiwgMSwgMjI0LCA3MywgOTgsIDYsIDEsIDIyMCwgMjAsIDk4LCA2LCAxLCAyNTAsIDk3LCA5OCwgNiwgMSwgCi0gICAgMjUxLCA3LCA5OCwgNiwgMSwgMjM1LCAxMDAsIDk4LCA2LCAxLCAyNTAsIDQwLCA5OCwgNiwgMSwgMjUwLCAxNDMsIDk4LCA2LCAKLSAgICAxLCAyMTEsIDE2MywgOTgsIDYsIDEsIDIzNSwgMTExLCA5OCwgNiwgMSwgMjQyLCA0MywgOTgsIDYsIDEsIDI0MSwgMjM4LCAKLSAgICA5OCwgNiwgMSwgMjQxLCAxNzUsIDk4LCA2LCAxLCAyMTIsIDIyLCA5OCwgNiwgMSwgMjQyLCA0LCA5OCwgNiwgMSwgMjQxLCAKLSAgICA2NSwgOTgsIDYsIDEsIDIxMCwgMjQ2LCA5OCwgNiwgMSwgMjU0LCAyMzIsIDk4LCAxLCAyNTQsIDEyMywgOTgsIDEsIDI1MiwgCi0gICAgMTUyLCA5OCwgMSwgMjQzLCAxMDYsIDk4LCAxLCAyNDcsIDEyOCwgOTgsIDEsIDI0NSwgMTUwLCA5OCwgMSwgMjEzLCAxNjAsIAotICAgIDk4LCAxLCAyMTAsIDg5LCA5OCwgMSwgMjE3LCA2MCwgOTgsIDEsIDIzNSwgMjU1LCA5OCwgMSwgMjM0LCAyMzQsIDk4LCAxLCAKLSAgICAyMzMsIDgxLCA5OCwgMSwgMjMxLCAxODUsIDk4LCAxLCAyMjksIDE5NSwgOTgsIDEsIDIyNiwgMTk2LCA5OCwgMSwgMjI2LCAKLSAgICAxNywgOTgsIDEsIDIxMCwgNzgsIDk4LCAxLCAyMjMsIDE3MSwgOTgsIDEsIDIyMSwgMjQzLCA5OCwgMSwgMjE3LCA1MCwgOTgsIAotICAgIDEsIDIxNCwgMTkwLCA5OCwgMSwgMjI1LCAxNDAsIDk4LCAxLCAyMzQsIDEyMSwgOTgsIDEsIDI0MiwgMjQxLCA5OCwgMSwgCi0gICAgMjI0LCA3MywgOTgsIDEsIDIyMCwgMjAsIDk4LCAxLCAyNTAsIDk3LCA5OCwgMSwgMjUxLCA3LCA5OCwgMSwgMjM1LCAxMDAsIAotICAgIDk4LCAxLCAyNTAsIDQwLCA5OCwgMSwgMjUwLCAxNDMsIDk4LCAxLCAyMTEsIDE2MywgOTgsIDEsIDIzNSwgMTExLCA5OCwgMSwgCi0gICAgMjQyLCA0MywgOTgsIDEsIDI0MSwgMjM4LCA5OCwgMSwgMjQxLCAxNzUsIDk4LCAxLCAyMTIsIDIyLCA5OCwgMSwgMjQyLCA0LCAKLSAgICA5OCwgMSwgMjQxLCA2NSwgOTgsIDEsIDI0NCwgMTIxLCA5OCwgMSwgMjEwLCAyNDYsIDk4LCAxLCAyNDUsIDE2NSwgOTgsIDEsIAotICAgIDIxNSwgOTQsIDI0MywgMTA2LCA5OCwgMSwgMjU0LCAxOTYsIDk4LCAyMjYsIDE1LCAyMjAsIDEzNywgNTgsIDEsIDk4LCAKLSAgICAyMjksIDE5NSwgOTgsIDEsIDI1NCwgMjMyLCA5OCwgMSwgMjQyLCAzLCA1MCwgOTgsIDEsIDIzMywgMTI3LCA1MCwgMjQsIAotICAgIDEwMCwgMjM0LCA1OCwgMjQsIDEwMCwgMjE4LCAyMTUsIDI0LCAxMDAsIDIyOCwgMjI2LCAyNCwgMTAwLCAyMTYsIDEwMSwgCi0gICAgMjQsIDEwMCwgMjE4LCAyMDQsIDI0LCAxMDAsIDIyMywgMjYsIDI0LCAxMDAsIDIzMCwgMjE3LCAyNCwgMTAwLCAyMjUsIDk1LCAKLSAgICAyNCwgMTAwLCAyMTgsIDIxMiwgMjQsIDEwMCwgMjE5LCAxNDgsIDI0LCAxMDAsIDIxOCwgMjA5LCAyNCwgMTAwLCAyMzYsIAotICAgIDU2LCAyNCwgMTAwLCAyNTAsIDQ2LCAyNCwgMTAwLCAyMTgsIDIxOSwgMjQsIDEwMCwgMjUwLCAxMDYsIDI0LCAxMDAsIDIzNCwgCi0gICAgMTEwLCAyNCwgMTAwLCAyMTYsIDE3MywgMjQsIDEwMCwgMjI1LCAxMzEsIDI0LCAxMDAsIDI0MSwgMTcyLCAyNCwgMTAwLCAKLSAgICAyMjgsIDIyMiwgMjQsIDEwMCwgMjE4LCAyMTMsIDI0LCAxMDAsIDIyOCwgMjE2LCAyNCwgMTAwLCAyMjgsIDIyMCwgMjQsIAotICAgIDEwMCwgMjE2LCA5OCwgMjQsIDEwMCwgMjIzLCAxNCwgMjQsIDEwMCwgMjE4LCAyMTEsIDI0LCAxMDAsIDIyMywgMjQsIDI0LCAKLSAgICAxMDAsIDIzNCwgMjE4LCAyNCwgMTAwLCAyMzAsIDIxMCwgMjQsIDEwMCwgMjM0LCAyMjEsIDI0LCAxMDAsIDIyNSwgOTAsIAotICAgIDI0LCAxMDAsIDIyNSwgODgsIDI0LCAxMDAsIDIyNSwgNzYsIDI0LCAxMDAsIDIyNSwgODQsIDI0LCAxMDAsIDIyNSwgODIsIAotICAgIDI0LCAxMDAsIDIyNSwgNzksIDI0LCAxMDAsIDIyNSwgODEsIDI0LCAxMDAsIDIyNSwgNzgsIDI0LCAxMDAsIDIyNSwgODMsIAotICAgIDI0LCAxMDAsIDIyNSwgOTMsIDI0LCAxMDAsIDIyNSwgOTQsIDI0LCAxMDAsIDIyNSwgNzcsIDI0LCAxMDAsIDIyNSwgODcsIAotICAgIDI0LCAxMDAsIDIzNCwgMjE5LCAyNCwgMTAwLCAyMzQsIDIxNywgMjQsIDEwMCwgMjE5LCAxNDEsIDI0LCAxMDAsIDIxOSwgCi0gICAgMTM5LCAyNCwgMTAwLCAyMTksIDEzMSwgMjQsIDEwMCwgMjE5LCAxMzQsIDI0LCAxMDAsIDIxOSwgMTQwLCAyNCwgMTAwLCAKLSAgICAyMTksIDEzNiwgMjQsIDEwMCwgMjE5LCAxMzUsIDI0LCAxMDAsIDIxOSwgMTMzLCAyNCwgMTAwLCAyMTksIDE0NCwgMjQsIAotICAgIDEwMCwgMjE5LCAxNDYsIDI0LCAxMDAsIDIxOSwgMTQ3LCAyNCwgMTAwLCAyMTksIDE0MiwgMjQsIDEwMCwgMjE5LCAxMzIsIAotICAgIDI0LCAxMDAsIDIxOSwgMTM3LCAyNCwgMTAwLCAyMTksIDE0NSwgMjQsIDEwMCwgMjUwLCA5MCwgMjQsIDEwMCwgMjUwLCA4OCwgCi0gICAgMjQsIDEwMCwgMjUwLCAxNjgsIDI0LCAxMDAsIDI1MCwgMTY2LCAyNCwgMTAwLCAyMjYsIDMyLCAyNCwgMTAwLCAyMzYsIDUxLCAKLSAgICAyNCwgMTAwLCAyMzYsIDQyLCAyNCwgMTAwLCAyMzYsIDUwLCAyNCwgMTAwLCAyMzYsIDQ3LCAyNCwgMTAwLCAyMzYsIDQ1LCAKLSAgICAyNCwgMTAwLCAyMzYsIDQ5LCAyNCwgMTAwLCAyMTgsIDIxNiwgMjQsIDEwMCwgMjM2LCA1NCwgMjQsIDEwMCwgMjM2LCA1NSwgCi0gICAgMjQsIDEwMCwgMjM2LCA0MywgMjQsIDEwMCwgMjM2LCA0OCwgMjQsIDEwMCwgMjExLCAyNiwgMjQsIDEwMCwgMjUwLCA0NSwgCi0gICAgMjQsIDEwMCwgMjUwLCA5MSwgMjQsIDEwMCwgMjUwLCA4OSwgMjQsIDEwMCwgMjUwLCAxNjksIDI0LCAxMDAsIDI1MCwgMTY3LCAKLSAgICAyNCwgMTAwLCAyNTAsIDEwNCwgMjQsIDEwMCwgMjUwLCAxMDUsIDI0LCAxMDAsIDI1MCwgOTIsIDI0LCAxMDAsIDI1MCwgCi0gICAgMTcwLCAyNCwgMTAwLCAyMjUsIDEyOSwgMjQsIDEwMCwgMjM0LCAyMjAsIDI0LCAxMDAsIDIxOCwgMjE3LCAyNCwgMTAwLCAKLSAgICAyMTEsIDMyLCAyNCwgMTAwLCAyMzQsIDQ5LCAyNCwgMTAwLCAyMjgsIDIxOCwgMjQsIDEwMCwgMjI4LCAyMjQsIDI0LCAxMDAsIAotICAgIDIyOCwgMjIzLCAyNCwgMTAwLCAyMTYsIDk1LCAyNCwgMTAwLCAyNDQsIDEwMywgMjQsIDE0MywgMjQ0LCAxMDMsIDI0LCAKLSAgICAxNDMsIDYxLCAyNCwgMTQzLCAyNTQsIDI0MywgMjQsIDE0MywgMTkxLCAyNCwgMTQzLCAyMTEsIDkyLCAyNCwgMTQzLCAyNDUsIAotICAgIDExNywgMjQsIDE0MywgNzUsIDI0LCAxNDMsIDIxMSwgMzYsIDI0LCAxNDMsIDIxMSwgNDcsIDI0LCAxNDMsIDc2LCAyNCwgCi0gICAgMTQzLCAyMTIsIDY1LCAyNCwgMTQzLCAyMTIsIDYyLCAyNCwgMTQzLCAyMjYsIDIzNCwgMjQsIDE0MywgMjEwLCAyNDQsIDI0LCAKLSAgICAxNDMsIDcwLCAyNCwgMTQzLCAyMTIsIDExLCAyNCwgMTQzLCAyMTIsIDIyLCAyNCwgMTQzLCAyMTEsIDI1MCwgMjQsIDE0MywgCi0gICAgMjEwLCAyMTIsIDI0LCAxNDMsIDI0NSwgNTUsIDI0LCAxNDMsIDIxMSwgOCwgMjQsIDE0MywgNzMsIDI0LCAxNDMsIDI1NSwgCi0gICAgMTU3LCAyNCwgMTQzLCAyNTUsIDE1NiwgMjQsIDE0MywgMjExLCAxMDYsIDI0LCAxNDMsIDIxMSwgMTA0LCAyNCwgMTQzLCAKLSAgICAyNDUsIDExNSwgMjQsIDE0MywgMjQ1LCAxMTQsIDI0LCAxNDMsIDI0NSwgMTE2LCAyNCwgMTQzLCAyMTEsIDM1LCAyNCwgCi0gICAgMTQzLCAyMTEsIDM0LCAyNCwgMTQzLCAyMjcsIDg0LCAyNCwgMTQzLCAyMjcsIDg1LCAyNCwgMTQzLCAyMjcsIDc4LCAyNCwgCi0gICAgMTQzLCAyMjcsIDgzLCAyNCwgMTQzLCAyMjcsIDgxLCAyNCwgMTQzLCAyMTAsIDIzOCwgMjQsIDE0MywgMjEwLCAyMzcsIDI0LCAKLSAgICAxNDMsIDIxMCwgMjM2LCAyNCwgMTQzLCAyMTAsIDIzOSwgMjQsIDE0MywgMjEwLCAyNDAsIDI0LCAxNDMsIDIxNSwgMzAsIAotICAgIDI0LCAxNDMsIDIxNSwgMjksIDI0LCAxNDMsIDIxNSwgMjcsIDI0LCAxNDMsIDIxNSwgMjQsIDI0LCAxNDMsIDIxNSwgMjUsIAotICAgIDI0LCAxNDMsIDIxMCwgMjExLCAyNCwgMTQzLCAyMTAsIDIwOCwgMjQsIDE0MywgMjEwLCAyMDksIDI0LCAxNDMsIDIxMCwgCi0gICAgMjAzLCAyNCwgMTQzLCAyMTAsIDIwNCwgMjQsIDE0MywgMjEwLCAyMDUsIDI0LCAxNDMsIDIxMCwgMjA3LCAyNCwgMTQzLCAKLSAgICAyNDUsIDQ5LCAyNCwgMTQzLCAyNDUsIDUxLCAyNCwgMTQzLCAyMTEsIDcsIDI0LCAxNDMsIDI0MCwgMTUzLCAyNCwgMTQzLCAKLSAgICAyNDAsIDE0NSwgMjQsIDE0MywgMjQwLCAxNDgsIDI0LCAxNDMsIDI0MCwgMTQ2LCAyNCwgMTQzLCAyNDAsIDE1MCwgMjQsIAotICAgIDE0MywgMjQwLCAxNTIsIDI0LCAxNDMsIDI1NCwgMzQsIDI0LCAxNDMsIDI1NCwgMzEsIDI0LCAxNDMsIDI1NCwgMjksIDI0LCAKLSAgICAxNDMsIDI1NCwgMzAsIDI0LCAxNDMsIDIxOCwgMjIwLCAyNCwgMTQzLCAyNTUsIDE1OCwgMjQsIDE0MywgMjExLCAxMDUsIAotICAgIDI0LCAxNDMsIDIxMSwgMzMsIDI0LCAxNDMsIDIyNywgODAsIDI0LCAxNDMsIDIyNywgNzksIDI0LCA5MCwgMjM0LCA1OCwgCi0gICAgMjQsIDkwLCAyMTgsIDIxNSwgMjQsIDkwLCAyMzQsIDUxLCAyNCwgOTAsIDIyOCwgMjI2LCAyNCwgOTAsIDIyOCwgMjI0LCAKLSAgICAyNCwgOTAsIDIyOCwgMjIzLCAyNCwgOTAsIDIxNiwgMTAxLCAyNCwgOTAsIDIyMywgMjYsIDI0LCA5MCwgMjIzLCAyMSwgMjQsIAotICAgIDkwLCAyMjMsIDE4LCAyNCwgOTAsIDIyMywgMTEsIDI0LCA5MCwgMjIzLCA2LCAyNCwgOTAsIDIyMywgMSwgMjQsIDkwLCAKLSAgICAyMjMsIDEyLCAyNCwgOTAsIDIyMywgMjQsIDI0LCA5MCwgMjMwLCAyMTcsIDI0LCA5MCwgMjI1LCA5NSwgMjQsIDkwLCAyMjUsIAotICAgIDg0LCAyNCwgOTAsIDIxOSwgMTQ4LCAyNCwgOTAsIDIxOCwgMjA5LCAyNCwgOTAsIDIzNiwgNTYsIDI0LCA5MCwgMjUwLCA0NiwgCi0gICAgMjQsIDkwLCAyNTAsIDEwNiwgMjQsIDkwLCAyMzQsIDExMCwgMjQsIDkwLCAyMTYsIDE3MywgMjQsIDkwLCAyMjUsIDEzMSwgCi0gICAgMjQsIDkwLCAyNDEsIDE3MiwgMjQsIDkwLCAyMzQsIDUyLCAyNCwgOTAsIDIzNCwgNTAsIDI0LCA5MCwgMjI4LCAyMjIsIDI0LCAKLSAgICA5MCwgMjI4LCAyMTYsIDI0LCA5MCwgMjI4LCAyMTgsIDI0LCA5MCwgMjI4LCAyMjEsIDI0LCA5MCwgMjI4LCAyMTcsIDI0LCAKLSAgICA5MCwgMjE2LCA5OCwgMjQsIDkwLCAyMTYsIDk1LCAyNCwgOTAsIDIyMywgMTksIDI0LCA5MCwgMjIzLCAxNCwgMjQsIDkwLCAKLSAgICAyMjMsIDAsIDI0LCA5MCwgMjIyLCAyNTUsIDI0LCA5MCwgMjE4LCAyMTEsIDI0LCA5MCwgMjIzLCAxNiwgMjQsIDkwLCAyMjMsIAotICAgIDE1LCAyNCwgOTAsIDIyMywgOCwgMjQsIDkwLCAyMjMsIDEwLCAyNCwgOTAsIDIyMywgMjMsIDI0LCA5MCwgMjIzLCAzLCAyNCwgCi0gICAgOTAsIDIyMywgMTMsIDI0LCA5MCwgMjIzLCAyMiwgMjQsIDkwLCAyMjIsIDI1NCwgMjQsIDkwLCAyMzAsIDIxMywgMjQsIDkwLCAKLSAgICAyMzAsIDIwOCwgMjQsIDkwLCAyMzAsIDIxMCwgMjQsIDkwLCAyMzAsIDIwNywgMjQsIDkwLCAyMzAsIDIwNSwgMjQsIDkwLCAKLSAgICAyMzAsIDIxMSwgMjQsIDkwLCAyMzAsIDIxNiwgMjQsIDkwLCAyMzAsIDIxNCwgMjQsIDkwLCAyMzQsIDIyMSwgMjQsIDkwLCAKLSAgICAyMjUsIDg2LCAyNCwgOTAsIDIyNSwgODcsIDI0LCA5MCwgMjI1LCA5MiwgMjQsIDkwLCAyMzQsIDIxOSwgMjQsIDkwLCAyMTksIAotICAgIDE0MSwgMjQsIDkwLCAyMTksIDEzMSwgMjQsIDkwLCAyMTksIDEzNCwgMjQsIDkwLCAyMTksIDEzNiwgMjQsIDkwLCAyMjYsIAotICAgIDMyLCAyNCwgOTAsIDIzNiwgNTEsIDI0LCA5MCwgMjM2LCA0NCwgMjQsIDkwLCAyMTgsIDIxNiwgMjQsIDkwLCAyMzYsIDUyLCAKLSAgICAyNCwgOTAsIDIxMSwgMjYsIDI0LCA5MCwgMjExLCAyMiwgMjQsIDkwLCAyMTEsIDIzLCAyNCwgOTAsIDIyNSwgMTI5LCAyNCwgCi0gICAgOTAsIDIzNCwgMjIwLCAyNCwgOTAsIDI0MSwgMTcwLCAyNCwgOTAsIDI0MSwgMTY4LCAyNCwgOTAsIDI0MSwgMTcxLCAyNCwgCi0gICAgOTAsIDI0MSwgMTY5LCAyNCwgOTAsIDIxMSwgMzIsIDI0LCA5MCwgMjM0LCA1NCwgMjQsIDkwLCAyMzQsIDUzLCAyNCwgOTAsIAotICAgIDIzNCwgNTcsIDI0LCA5MCwgMjM0LCA1NSwgMjQsIDkwLCAyMzQsIDU2LCAyNCwgOTAsIDIxOCwgMjEzLCAyOSwgMywgMTYyLCAKLSAgICAyOSwgMywgMjQwLCAyMjIsIDI5LCAzLCAyNDEsIDE4MCwgMjksIDMsIDI0MiwgNDYsIDI5LCAzLCAyNDEsIDIyMCwgMjksIDMsIAotICAgIDI0MSwgMjM4LCAyOSwgMywgMjQxLCA2OCwgMjksIDMsIDI0MSwgNjcsIDI5LCAzLCAyMzMsIDEzNSwgMjksIDMsIDIzMiwgCi0gICAgOTgsIDI5LCAzLCAyMzIsIDI0MSwgMjksIDMsIDIzMywgMTM0LCAyOSwgMywgMjMzLCA1MCwgMjksIDMsIDIzMywgNTgsIDI5LCAKLSAgICAzLCAyMzIsIDE1NiwgMjksIDMsIDIzMiwgNzAsIDI5LCAzLCAyNDEsIDE4OSwgMjksIDMsIDI0MSwgMTgzLCAyOSwgMywgCi0gICAgMjQxLCAxODUsIDI5LCAzLCAyNDEsIDE4OCwgMjksIDMsIDI0MSwgMTg2LCAyOSwgMywgMjQxLCAxODcsIDI5LCAzLCAyNDEsIAotICAgIDE4NCwgMjksIDMsIDI0MSwgMTgyLCAyOSwgMywgMTg0LCAyOSwgMywgMjMwLCAxMDIsIDI5LCAzLCAyMzAsIDIzMCwgMjksIAotICAgIDMsIDIzMSwgMjM3LCAyOSwgMywgMjMxLCA4MCwgMjksIDMsIDIzMSwgOTEsIDI5LCAzLCAyMzAsIDE2MSwgMjksIDMsIDIzMCwgCi0gICAgNDIsIDI5LCAzLCAyMTcsIDE2MywgMjksIDMsIDIxNywgMTU3LCAyOSwgMywgMjE3LCAxNTksIDI5LCAzLCAyMTcsIDE2MiwgCi0gICAgMjksIDMsIDIxNywgMTYwLCAyOSwgMywgMjE3LCAxNjEsIDI5LCAzLCAyMTcsIDE1OCwgMjksIDMsIDIxNywgMTU2LCAyOSwgCi0gICAgMywgMjA1LCAyOSwgMywgMjIyLCAxNDAsIDI5LCAzLCAyMjMsIDM1LCAyOSwgMywgMjIzLCAxODQsIDI5LCAzLCAyMjMsIAotICAgIDEwOCwgMjksIDMsIDIyMywgMTI4LCAyOSwgMywgMjIyLCAyMTEsIDI5LCAzLCAyMjIsIDEwOSwgMjksIDMsIDIwNiwgMjksIAotICAgIDMsIDIxOCwgODMsIDI5LCAzLCAyMTksIDE5MSwgMjksIDMsIDIyMiwgMzEsIDI5LCAzLCAyMjEsIDE3MCwgMjksIDMsIDIyMSwgCi0gICAgMTgxLCAyOSwgMywgMjE5LCA1OCwgMjksIDMsIDIxNywgMjUzLCAyOSwgMywgMjIwLCAxMDIsIDI5LCAzLCAyMTksIDIyNSwgCi0gICAgMjksIDMsIDIyMCwgMzIsIDI5LCAzLCAyMjAsIDk4LCAyOSwgMywgMjIwLCA2MSwgMjksIDMsIDIyMCwgNjMsIDI5LCAzLCAKLSAgICAyMjAsIDcsIDI5LCAzLCAyMTksIDIwOCwgMjksIDMsIDIyNCwgODgsIDI5LCAzLCAyMjQsIDMwLCAyOSwgMywgMjI0LCA1MywgCi0gICAgMjksIDMsIDIyNCwgODcsIDI5LCAzLCAyMjQsIDY4LCAyOSwgMywgMjI0LCA2OSwgMjksIDMsIDIyNCwgNDIsIDI5LCAzLCAKLSAgICAyMjQsIDQxLCAyOSwgMywgMjIzLCAyNDIsIDI5LCAzLCAyMjMsIDIzOCwgMjksIDMsIDIyMywgMjQxLCAyOSwgMywgMjIzLCAKLSAgICAyMzksIDI5LCAzLCAyMjMsIDI0MCwgMjksIDMsIDIyNCwgNjUsIDI5LCAzLCAyMjQsIDU5LCAyOSwgMywgMjI0LCA2MSwgMjksIAotICAgIDMsIDIyNCwgNjQsIDI5LCAzLCAyMjQsIDYyLCAyOSwgMywgMjI0LCA2MywgMjksIDMsIDIyNCwgNjAsIDI5LCAzLCAyMjQsIAotICAgIDU4LCAyOSwgMywgMjI0LCA1NCwgMjksIDMsIDIyNCwgNTcsIDI5LCAzLCAyMjQsIDU1LCAyOSwgMywgMjI0LCA1NiwgMjksIAotICAgIDMsIDI1MiwgMTkxLCAyOSwgMywgMjUxLCAxMjUsIDI5LCAzLCAyNTIsIDYsIDI5LCAzLCAyNTIsIDE4OSwgMjksIDMsIDI1MiwgCi0gICAgNjYsIDI5LCAzLCAyNTIsIDc1LCAyOSwgMywgMjUxLCAyMDUsIDI5LCAzLCAyNTEsIDgzLCAyOSwgMywgMjE0LCAyNywgMjksIAotICAgIDMsIDIxMiwgMTE2LCAyOSwgMywgMjEzLCAxNzYsIDI5LCAzLCAyMTQsIDI2LCAyOSwgMywgMjEzLCAyNTAsIDI5LCAzLCAKLSAgICAyMTMsIDI1NSwgMjksIDMsIDIxMywgMTM4LCAyOSwgMywgMjEyLCAxMDcsIDI5LCAzLCAyMTcsIDEwNSwgMjksIDMsIDIxNSwgCi0gICAgMTE4LCAyOSwgMywgMjE2LCAxMTcsIDI5LCAzLCAyMTcsIDEwMSwgMjksIDMsIDIxNywgMTEsIDI5LCAzLCAyMTcsIDIyLCAKLSAgICAyOSwgMywgMTExLCAyOSwgMywgMjE1LCA4MCwgMjksIDMsIDI1MSwgMzMsIDI5LCAzLCAyNDksIDExMiwgMjksIDMsIDI1MCwgCi0gICAgNTEsIDI5LCAzLCAyNTEsIDMyLCAyOSwgMywgMjUwLCAxODIsIDI5LCAzLCAyNTAsIDE5MCwgMjksIDMsIDI0OSwgMjM4LCAKLSAgICAyOSwgMywgMjQ5LCA4MSwgMjksIDMsIDIxMSwgMTY1LCAyOSwgMywgMjExLCAxNDEsIDI5LCAzLCAyMTEsIDE1NywgMjksIDMsIAotICAgIDIxMSwgMTY0LCAyOSwgMywgMjExLCAxNjEsIDI5LCAzLCAyMTEsIDE2MiwgMjksIDMsIDIxMSwgMTQ4LCAyOSwgMywgMjExLCAKLSAgICAxNDcsIDI5LCAzLCAyMTEsIDEzNiwgMjksIDMsIDIxMSwgMTMyLCAyOSwgMywgMjExLCAxMzUsIDI5LCAzLCAyMTEsIDEzMywgCi0gICAgMjksIDMsIDIxMSwgMTM0LCAyOSwgMywgMTk3LCAyOSwgMywgMjI3LCAyMzcsIDI5LCAzLCAyMjgsIDIzMywgMjksIDMsIAotICAgIDIyOSwgMjI1LCAyOSwgMywgMjI5LCAxMDMsIDI5LCAzLCAyMjksIDEwNywgMjksIDMsIDIyOCwgNzQsIDI5LCAzLCAyMjcsIAotICAgIDE3NCwgMjksIDMsIDIyNywgMTY1LCAyOSwgMywgMjI3LCAxMjgsIDI5LCAzLCAyMjcsIDE0OCwgMjksIDMsIDIyNywgMTY0LCAKLSAgICAyOSwgMywgMjI3LCAxNTUsIDI5LCAzLCAyMjcsIDE1NiwgMjksIDMsIDIyNywgMTM0LCAyOSwgMywgMjI3LCAxMTksIDI5LCAKLSAgICAzLCAyNDIsIDE4MCwgNjEsIDI5LCAzLCAyNDIsIDE4MCwgNzAsIDI5LCAzLCAyNDIsIDE4MCwgNzMsIDI5LCAzLCAyNDIsIAotICAgIDE4MCwgMjU1LCA3MywgMjksIDMsIDI0MiwgMTgwLCAyNDUsIDIwOSwgMjksIDMsIDI0MiwgMTgwLCA3NSwgMjksIDMsIDI0MiwgCi0gICAgMTgwLCA3NiwgMjksIDMsIDI0MiwgMTgwLCAyMTIsIDY1LCAyOSwgMywgMTc2LCAyOSwgMywgMjMzLCAyMTcsIDI5LCAzLCAKLSAgICAyMzQsIDkyLCAyOSwgMywgMjM1LCAxMCwgMjksIDMsIDIzNCwgMTgxLCAyOSwgMywgMjM0LCAxODIsIDI5LCAzLCAyMzQsIAotICAgIDI4LCAyOSwgMywgMjM0LCAyNywgMjksIDMsIDIzMywgMTgyLCAyOSwgMywgMjMzLCAxNzYsIDI5LCAzLCAyMzMsIDE4MSwgCi0gICAgMjksIDMsIDIzMywgMTc3LCAyOSwgMywgMjMzLCAxNzgsIDI5LCAzLCAyMzMsIDE3MSwgMjksIDMsIDIzMywgMTY1LCAyOSwgCi0gICAgMywgMjMzLCAxNjcsIDI5LCAzLCAyMzMsIDE3MCwgMjksIDMsIDIzMywgMTY4LCAyOSwgMywgMjMzLCAxNjksIDI5LCAzLCAKLSAgICAyMzMsIDE2NiwgMjksIDMsIDIzMywgMTY0LCAyOSwgMywgMjMzLCAxNjAsIDI5LCAzLCAyMzMsIDE2MywgMjksIDMsIDIzMywgCi0gICAgMTYxLCAyOSwgMywgMjMzLCAxNjIsIDI5LCAzLCAyMTIsIDY1LCAyOSwgMywgMjExLCAxOTUsIDI5LCAzLCAyMTEsIDI1MCwgCi0gICAgMjksIDMsIDIxMiwgNjQsIDI5LCAzLCAyMTIsIDE3LCAyOSwgMywgMjEyLCAyMiwgMjksIDMsIDIxMSwgMjI3LCAyOSwgMywgCi0gICAgMjExLCAyMjYsIDI5LCAzLCAyMjUsIDEzOSwgNjEsIDI5LCAzLCAyMjUsIDEzOSwgNzAsIDI5LCAzLCAyMjUsIDEzOSwgNzMsIAotICAgIDI5LCAzLCAyMjUsIDEzOSwgMjU1LCA3MywgMjksIDMsIDIyNSwgMTM5LCAyNDUsIDIwOSwgMjksIDMsIDIyNSwgMTM5LCA3NSwgCi0gICAgMjksIDMsIDIyNSwgMTM5LCA3NiwgMjksIDMsIDIxMCwgMTE2LCAyOSwgMywgMjEwLCAxMywgMjksIDMsIDIxMCwgNDQsIDI5LCAKLSAgICAzLCAyMTAsIDExNSwgMjksIDMsIDIxMCwgOTIsIDI5LCAzLCAyMTAsIDk0LCAyOSwgMywgMjEwLCAyMywgMjksIDMsIDIxMCwgCi0gICAgMCwgMjksIDMsIDIxMCwgODIsIDI5LCAzLCAyMTAsIDYyLCAyOSwgMywgMjEwLCA2OSwgMjksIDMsIDIxMCwgODEsIDI5LCAzLCAKLSAgICAyMTAsIDczLCAyOSwgMywgMjEwLCA3NCwgMjksIDMsIDIxMCwgNjcsIDI5LCAzLCAyMTAsIDUzLCAyOSwgMywgMTkxLCAyOSwgCi0gICAgMywgMjEwLCAyMTIsIDI5LCAzLCAyMTEsIDgsIDI5LCAzLCAyMTEsIDEwMywgMjksIDMsIDIxMSwgNDQsIDI5LCAzLCAyMTEsIAotICAgIDQ3LCAyOSwgMywgMjEwLCAyNDQsIDI5LCAzLCAyMTAsIDIzNSwgMjksIDMsIDI0OCwgMjIxLCAyOSwgMywgMjQ2LCA3OCwgCi0gICAgMjksIDMsIDI0OCwgMywgMjksIDMsIDI0OCwgMjIwLCAyOSwgMywgMjQ4LCA3NywgMjksIDMsIDI0OCwgOTAsIDI5LCAzLCAKLSAgICAyNDcsIDE0NSwgMjksIDMsIDI0NiwgNDcsIDI5LCAzLCAyNDgsIDEzNSwgMjksIDMsIDI0OCwgMTAwLCAyOSwgMywgMjQ4LCAKLSAgICAxMTIsIDI5LCAzLCAyNDgsIDEzNCwgMjksIDMsIDI0OCwgMTIyLCAyOSwgMywgMjQ4LCAxMjMsIDI5LCAzLCAyNDgsIDEwNSwgCi0gICAgMjksIDMsIDI0OCwgOTEsIDI5LCAzLCAyMzUsIDE0MSwgMjksIDMsIDIzNSwgNTEsIDI5LCAzLCAyMzUsIDEwOCwgMjksIDMsIAotICAgIDIzNSwgMTQwLCAyOSwgMywgMjM1LCAxMjQsIDI5LCAzLCAyMzUsIDEyNiwgMjksIDMsIDIzNSwgNjgsIDI5LCAzLCAyMzUsIAotICAgIDMxLCAyOSwgMywgMjQzLCAxMzUsIDI5LCAzLCAyNDIsIDExMywgMjksIDMsIDI0MiwgMjE0LCAyOSwgMywgMjQzLCAxMzIsIAotICAgIDI5LCAzLCAyNDMsIDU1LCAyOSwgMywgMjQzLCA2MiwgMjksIDMsIDI0MiwgMTc0LCAyOSwgMywgMjQyLCAxNzMsIDI5LCAzLCAKLSAgICAyNDIsIDc4LCAyOSwgMywgMjQyLCA3NCwgMjksIDMsIDI0MiwgNzcsIDI5LCAzLCAyNDIsIDc1LCAyOSwgMywgMjQyLCA3NiwgCi0gICAgMjksIDMsIDI0MywgMjksIDI5LCAzLCAyNDMsIDksIDI5LCAzLCAyNDMsIDE5LCAyOSwgMywgMjQzLCAyOCwgMjksIDMsIAotICAgIDI0MywgMjMsIDI5LCAzLCAyNDMsIDI0LCAyOSwgMywgMjQzLCAxMywgMjksIDMsIDI0MiwgMjU0LCAyOSwgMywgMjE2LCAKLSAgICAyMDgsIDI5LCAzLCAyMTYsIDEzNiwgMjksIDMsIDIxNiwgMTc1LCAyOSwgMywgMjE2LCAyMDcsIDI5LCAzLCAyMTYsIDE5NCwgCi0gICAgMjksIDMsIDIxNiwgMTk1LCAyOSwgMywgMjE2LCAxNTYsIDI5LCAzLCAyMTYsIDEyOCwgMjksIDMsIDI1MCwgMTU3LCAyOSwgCi0gICAgMywgMjUwLCA2OSwgMjksIDMsIDI1MCwgMTEwLCAyOSwgMywgMjUwLCAxNTYsIDI5LCAzLCAyNTAsIDEyOCwgMjksIDMsIAotICAgIDI1MCwgMTMxLCAyOSwgMywgMjUwLCA4NiwgMjksIDMsIDI1MCwgNTgsIDI5LCAzLCAyMjUsIDE0NywgMjksIDMsIDIyNSwgCi0gICAgMTE0LCAyOSwgMywgMjI1LCAxMzMsIDI5LCAzLCAyMjUsIDE0NiwgMjksIDMsIDIyNSwgMTM1LCAyOSwgMywgMjI1LCAxMzYsIAotICAgIDI5LCAzLCAyMjUsIDEyMSwgMjksIDMsIDIyNSwgMTEwLCAyOSwgMywgMjE1LCAxODMsIDI5LCAzLCAyMTUsIDE2MywgMjksIAotICAgIDMsIDIxNSwgMTY3LCAyOSwgMywgMjE1LCAxODIsIDI5LCAzLCAyMTUsIDE3NywgMjksIDMsIDIxNSwgMTc4LCAyOSwgMywgCi0gICAgMjE1LCAxNjYsIDI5LCAzLCAyMTUsIDE2MSwgMjksIDMsIDIxNSwgMzksIDI5LCAzLCAyMTUsIDMxLCAyOSwgMywgMjE1LCAKLSAgICAzNSwgMjksIDMsIDIxNSwgMzgsIDI5LCAzLCAyMTUsIDM2LCAyOSwgMywgMjE1LCAzNywgMjksIDMsIDIxNSwgMzMsIDI5LCAKLSAgICAzLCAyMTUsIDMyLCAyOSwgMywgMjQ0LCAxOTYsIDI5LCAzLCAyNDMsIDIzNCwgMjksIDMsIDI0NCwgMTIxLCAyOSwgMywgCi0gICAgMjQ0LCAxOTUsIDI5LCAzLCAyNDQsIDE0NywgMjksIDMsIDI0NCwgMTU0LCAyOSwgMywgMjQ0LCA0MywgMjksIDMsIDI0MywgCi0gICAgMjEzLCAyOSwgMywgMTkwLCAyOSwgMywgMjI0LCAxNTAsIDI5LCAzLCAyMjUsIDEwOCwgMjksIDMsIDIyNiwgODksIDI5LCAzLCAKLSAgICAyMjUsIDIxMSwgMjksIDMsIDIyNSwgMjIxLCAyOSwgMywgMjI1LCAxNiwgMjksIDMsIDIyNCwgMTE0LCAyOSwgMywgMjIyLCAKLSAgICA5OSwgMjksIDMsIDIzMCwgMzEsIDI5LCAzLCAyNDMsIDIwNywgMjksIDM4LCAyNDMsIDUzLCAyMiwgMjUsIDIzMywgMjMsIAotICAgIDc4LCAyOSwgMzgsIDI1LCAyMzMsIDIzLCA3OCwgMjksIDM4LCAyNDMsIDUzLCA3OCwgMjksIDIyMSwgMTczLCA3OCwgMjksIAotICAgIDIxMSwgMjA4LCAyOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyOSwgMjQ5LCAyMTksIDI5LCAyMjAsIDE1MCwgMjksIDI0OSwgCi0gICAgMjI2LCAyOSwgMjI0LCAxOTksIDI0OSwgMjI2LCAyOSwgMjI0LCAxMywgNzgsIDI5LCAyMjYsIDE1LCAyMjAsIDEzNywgMjksIAotICAgIDIxLCAxMTAsIDI5LCAyMSwgMTA1LCAyOSwgMjEsIDE1OCwgMjksIDIxLCAxNjEsIDI5LCAyMSwgMTg5LCAyOSwgMjEsIDE5NCwgCi0gICAgMjksIDIxLCAxOTgsIDI5LCAyMSwgMTk1LCAyOSwgMjEsIDIwMCwgMjksIDU0LCAyMTYsIDI0NywgMjksIDU0LCAyMTUsIDczLCAKLSAgICAyOSwgNTQsIDIxNiwgMTYyLCAyOSwgNTQsIDI0NCwgMTUsIDI5LCA1NCwgMjQ0LCAxMTQsIDI5LCA1NCwgMjE5LCAxMTEsIAotICAgIDI5LCA1NCwgMjIwLCAxMTYsIDI5LCA1NCwgMjQ1LCAxODQsIDI5LCA1NCwgMjI4LCAxOTUsIDI5LCA1NCwgMjQwLCAyMTAsIAotICAgIDI5LCA1NCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyOSwgMywgMjIxLCAxNzcsIDIzMCwgNDIsIDI5LCAzLCAyMzAsIDM4LCAyOSwgCi0gICAgMywgMjMwLCAzOSwgMjksIDMsIDIzMCwgNDAsIDI5LCAzLCAyMjEsIDE3NywgMjUxLCA4MywgMjksIDMsIDI1MSwgODAsIDI5LCAKLSAgICAzLCAyNTEsIDgxLCAyOSwgMywgMjUxLCA4MiwgMjksIDMsIDIyMSwgMTc3LCAyNDMsIDIxMywgMjksIDMsIDI0MywgMjA5LCAKLSAgICAyOSwgMywgMjQzLCAyMTAsIDI5LCAzLCAyNDMsIDIxMSwgMjksIDMsIDIyMSwgMTc3LCAyMjQsIDExNCwgMjksIDMsIDIyNCwgCi0gICAgMTEwLCAyOSwgMywgMjI0LCAxMTEsIDI5LCAzLCAyMjQsIDExMiwgMjksIDIxNiwgMzEsIDE2NCwgMjEwLCAyNDcsIDI5LCAKLSAgICAyMTYsIDMxLCAxNjQsIDI0OCwgNDEsIDI5LCAyMTYsIDMxLCAxNjQsIDIyMiwgMjM4LCAyOSwgMjE2LCAzMSwgMTY0LCAyMTksIAotICAgIDI1MSwgMjIyLCAyMzgsIDI5LCAyMTYsIDMxLCAxNjQsIDI0NywgMjM1LCAyOSwgMjE2LCAzMSwgMTY0LCAyMzQsIDE2NCwgCi0gICAgMjksIDIxNiwgMzEsIDE2NCwgMjUwLCA5NCwgMjksIDIxNiwgMzEsIDE2NCwgMjQxLCAxNzcsIDI5LCAyMTYsIDMxLCAxNjQsIAotICAgIDI0OCwgNDAsIDI5LCAyMTYsIDMxLCAxNjQsIDIzMywgMTk0LCAxNjksIDEsIDYxLCAxNjksIDEsIDc1LCAxNjksIDEsIDczLCAKLSAgICAxNjksIDEsIDc2LCAxNjksIDEsIDcwLCAxNjksIDEsIDIxNCwgMTA1LCAxNjksIDEsIDI0MywgMTM1LCAxNjksIDEsIDE3NiwgCi0gICAgMTY5LCAxLCAyNDMsIDYyLCAxNjksIDEsIDI0MiwgMjE0LCAxNjksIDEsIDI0MiwgMTc0LCAxNjksIDEsIDI0MiwgMTEzLCAKLSAgICAxNjksIDEsIDI0MiwgNzksIDE2OSwgMSwgMTYyLCAxNjksIDEsIDI0MSwgMjM4LCAxNjksIDEsIDI0MSwgMTgwLCAxNjksIDEsIAotICAgIDI0MSwgNjgsIDE2OSwgMSwgMjQwLCAyMjIsIDE2OSwgMSwgMjQwLCAyMDEsIDE2OSwgMSwgMjMzLCAxMzUsIDE2OSwgMSwgCi0gICAgMjMzLCA1OCwgMTY5LCAxLCAyMzIsIDI0MSwgMTY5LCAxLCAyMzIsIDE1NiwgMTY5LCAxLCAyMzIsIDk4LCAxNjksIDEsIAotICAgIDIzMiwgNzEsIDE2OSwgMSwgMTg0LCAxNjksIDEsIDIzMSwgOTEsIDE2OSwgMSwgMjMwLCAyMzAsIDE2OSwgMSwgMjMwLCAKLSAgICAxNjEsIDE2OSwgMSwgMjMwLCAxMDIsIDE2OSwgMSwgMTk3LCAxNjksIDEsIDI0MSwgOTAsIDE2OSwgMSwgMjI5LCAyMTMsIAotICAgIDE2OSwgMSwgMjI5LCAxMDcsIDE2OSwgMSwgMjI4LCAyMzMsIDE2OSwgMSwgMjI4LCA3NCwgMTY5LCAxLCAyMjcsIDIzNywgCi0gICAgMTY5LCAxLCAyMjcsIDE3NiwgMTY5LCAxLCAyMjQsIDI5LCAxNjksIDEsIDIyNCwgMTYsIDE2OSwgMSwgMjI0LCA5LCAxNjksIAotICAgIDEsIDIyNCwgMSwgMTY5LCAxLCAyMjMsIDI0NiwgMTY5LCAxLCAyMjMsIDI0NCwgMTY5LCAxLCAyMDYsIDE2OSwgMSwgMjIyLCAKLSAgICA5MSwgMTY5LCAxLCAyMjEsIDE4MSwgMTY5LCAxLCAyMTksIDE5MSwgMTY5LCAxLCAyMTksIDU4LCAxNjksIDEsIDIxOCwgODMsIAotICAgIDE2OSwgMSwgMjE4LCAyLCAxNjksIDEsIDI0OCwgMjIxLCAxNjksIDEsIDIxNywgMTA1LCAxNjksIDEsIDI0OCwgOTAsIDE2OSwgCi0gICAgMSwgMjE3LCAyMiwgMTY5LCAxLCAyNDgsIDMsIDE2OSwgMSwgMjE2LCAxMTcsIDE2OSwgMSwgMjQ3LCAxNDUsIDE2OSwgMSwgCi0gICAgMjQ2LCA3OCwgMTY5LCAxLCAyNDYsIDUwLCAxNjksIDEsIDI0NywgMTU2LCAxNjksIDEsIDIxNiwgNTksIDE2OSwgMSwgMjE2LCAKLSAgICA1OCwgMTY5LCAxLCAyMTYsIDQ3LCAxNjksIDEsIDIxNiwgNDYsIDE2OSwgMSwgMjE2LCA0NSwgMTY5LCAxLCAyMTYsIDQ0LCAKLSAgICAxNjksIDEsIDIxNSwgMTgzLCAxNjksIDEsIDIxNSwgMTc4LCAxNjksIDEsIDIxNSwgMTY3LCAxNjksIDEsIDIxNSwgMTY2LCAKLSAgICAxNjksIDEsIDIxNSwgMTYzLCAxNjksIDEsIDIxNSwgMTYyLCAxNjksIDEsIDIxMiwgNjUsIDE2OSwgMSwgMjEyLCAyMiwgCi0gICAgMTY5LCAxLCAyMTEsIDI1MCwgMTY5LCAxLCAyMTEsIDIyNywgMTY5LCAxLCAyMTEsIDE5NSwgMTY5LCAxLCAyMTEsIDE4MywgCi0gICAgMTY5LCAxLCAxOTEsIDE2OSwgMSwgMjExLCA0NywgMTY5LCAxLCAyMTEsIDgsIDE2OSwgMSwgMjEwLCAyNDQsIDE2OSwgMSwgCi0gICAgMjEwLCAyMTIsIDE2OSwgMSwgMjEwLCAxNzcsIDE4LCAxOSwgMjQwLCAxNjgsIDE4LCAxOSwgNzUsIDE4LCAxOSwgMjU1LCAKLSAgICAzNywgMTgsIDE5LCA3MywgMTgsIDE5LCAyMzYsIDMzLCAxOCwgMTksIDc2LCAxOCwgMTksIDIyNiwgMTgzLCAxOCwgMTksIAotICAgIDIxMSwgMTE2LCAyMjYsIDE4MywgMTgsIDE5LCA3MiwgMjQ1LCAyMDksIDE4LCAxOSwgNzIsIDczLCAxOCwgMTksIDYxLCAxOCwgCi0gICAgMTksIDI1NSwgNzMsIDE4LCAxOSwgMjEyLCAyMiwgMTgsIDE5LCAxNTksIDIxMiwgMjIsIDE4LCAxOSwgMjExLCAyNTAsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTEsIDI1MCwgMTgsIDE5LCAyMTEsIDI0MiwgMTgsIDE5LCAxNTksIDIxMSwgMjQyLCAxOCwgMTksIDIxMSwgCi0gICAgMjI3LCAxOCwgMTksIDE1OSwgMjExLCAyMjcsIDE4LCAxOSwgMjExLCAyMTUsIDE4LCAxOSwgMTU5LCAyMTEsIDIxNSwgMTgsIAotICAgIDE5LCAyMjksIDE5MCwgMjExLCAyMTUsIDE4LCAxOSwgMjEyLCA2NSwgMTgsIDE5LCAxNTksIDIxMiwgNjUsIDE4LCAxOSwgCi0gICAgMjEyLCA2NCwgMTgsIDE5LCAxNTksIDIxMiwgNjQsIDE4LCAxOSwgMjI5LCAxOTAsIDIxMiwgNjQsIDE4LCAxOSwgMjU0LCAKLSAgICAyMDEsIDE4LCAxOSwgMjExLCAxMTYsIDIxMiwgOTgsIDE4LCAxOSwgMjQyLCAxODAsIDIxOCwgMTI5LCAxOCwgMTksIDQwLCAKLSAgICAxNDIsIDE4LCAxOSwgNDAsIDI0MiwgMTM2LCAxOCwgMTksIDQwLCAyNTEsIDE3NSwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCAKLSAgICA0MCwgMjE2LCAxNCwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgNDQsIDE2MywgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIAotICAgIDIyMiwgMjMzLCAxOCwgMTksIDQwLCA1MiwgMTQyLCAxOCwgMTksIDQwLCA1MiwgMjE5LCAyNTEsIDY3LCAyMTgsIDkwLCAxOCwgCi0gICAgMTksIDQwLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDE4LCAxOSwgNDAsIDIxOSwgMjUxLCAyMDMsIDkxLCAxOCwgMTksIDQwLCAKLSAgICAyMjUsIDIyLCAxOCwgMTksIDQwLCAxMjQsIDIxNywgODcsIDE4LCAxOSwgMjQ1LCAxNTAsIDE4LCAxOSwgMjM1LCAyNTUsIAotICAgIDE4LCAxOSwgMjI2LCAxOTYsIDE4LCAxOSwgMjU0LCAxMjMsIDE4LCAxOSwgMjI1LCAyMjEsIDE4LCAxOSwgMjI2LCA4NywgCi0gICAgMTgsIDE5LCAyMjUsIDEwOCwgMTgsIDE5LCAyMjUsIDcxLCAxOCwgMTksIDIyNSwgMTYsIDE4LCAxOSwgMjI0LCAyNDksIDE4LCAKLSAgICAxOSwgMjExLCAxMTYsIDIyNCwgMjQ5LCAxOCwgMTksIDcyLCAyNDEsIDIyMCwgMTgsIDE5LCA3MiwgMjQxLCAxODAsIDE4LCAKLSAgICAxOSwgMTkwLCAxOCwgMTksIDIyNiwgODksIDE4LCAxOSwgMjI0LCAxMTIsIDE4LCAxOSwgMTU5LCAyMjQsIDExMiwgMTgsIAotICAgIDE5LCAyMjQsIDExMCwgMTgsIDE5LCAxNTksIDIyNCwgMTEwLCAxOCwgMTksIDIyNCwgMTA5LCAxOCwgMTksIDE1OSwgMjI0LCAKLSAgICAxMDksIDE4LCAxOSwgMjI0LCAxMDcsIDE4LCAxOSwgMTU5LCAyMjQsIDEwNywgMTgsIDE5LCAyMjQsIDEwNiwgMTgsIDE5LCAKLSAgICAxNTksIDIyNCwgMTA2LCAxOCwgMTksIDIyNCwgMTE0LCAxOCwgMTksIDE1OSwgMjI0LCAxMTQsIDE4LCAxOSwgMjI0LCAxMTMsIAotICAgIDE4LCAxOSwgMTU5LCAyMjQsIDExMywgMTgsIDE5LCAyMTEsIDExNiwgMjI0LCAxMTMsIDE4LCAxOSwgMjI2LCAxMDUsIDE4LCAKLSAgICAxOSwgMTU5LCAyMjYsIDEwNSwgMTgsIDE5LCA3MiwgMjQyLCA2MCwgMTgsIDE5LCAyMTcsIDIyLCAxOCwgMTksIDIxNywgOTksIAotICAgIDE4LCAxOSwgMjE2LCAxMTcsIDE4LCAxOSwgMjE2LCAxMDMsIDE4LCAxOSwgMTExLCAxOCwgMTksIDIxNiwgMTcsIDE4LCAxOSwgCi0gICAgMjExLCAxMTYsIDIxNiwgMTcsIDE4LCAxOSwgNzIsIDI0OCwgNzcsIDE4LCAxOSwgNzIsIDI0OCwgMywgMTgsIDE5LCAyMTcsIAotICAgIDEwNSwgMTgsIDE5LCAyMTcsIDEwMSwgMTgsIDE5LCAyMTUsIDc4LCAxOCwgMTksIDE1OSwgMjE1LCA3OCwgMTgsIDE5LCAKLSAgICAyMTUsIDYyLCAxOCwgMTksIDE1OSwgMjE1LCA2MiwgMTgsIDE5LCAyMTUsIDYxLCAxOCwgMTksIDE1OSwgMjE1LCA2MSwgMTgsIAotICAgIDE5LCAxMDUsIDE4LCAxOSwgMTU5LCAxMDUsIDE4LCAxOSwgMjE1LCA1NCwgMTgsIDE5LCAxNTksIDIxNSwgNTQsIDE4LCAxOSwgCi0gICAgMjE1LCA4MCwgMTgsIDE5LCAxNTksIDIxNSwgODAsIDE4LCAxOSwgMjE1LCA3OSwgMTgsIDE5LCAxNTksIDIxNSwgNzksIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxNSwgNzksIDE4LCAxOSwgMjE3LCAxNTIsIDE4LCAxOSwgMjE1LCAxNTEsIDE4LCAxOSwgMjE1LCAKLSAgICAxMzUsIDE4LCAxOSwgMjE1LCAxMzMsIDE4LCAxOSwgMjE1LCAxNTYsIDE4LCAxOSwgMjM0LCAxODIsIDE4LCAxOSwgMjM1LCAKLSAgICA3LCAxOCwgMTksIDIzNCwgOTIsIDE4LCAxOSwgMjM0LCA4MywgMTgsIDE5LCAyMzQsIDI4LCAxOCwgMTksIDIzNCwgMTAsIAotICAgIDE4LCAxOSwgMjExLCAxMTYsIDIzNCwgMTAsIDE4LCAxOSwgMTc2LCAxOCwgMTksIDIzNSwgMTAsIDE4LCAxOSwgMjMzLCAKLSAgICAxNzgsIDE4LCAxOSwgMTU5LCAyMzMsIDE3OCwgMTgsIDE5LCAyMzMsIDE3NiwgMTgsIDE5LCAxNTksIDIzMywgMTc2LCAxOCwgCi0gICAgMTksIDIzMywgMTc1LCAxOCwgMTksIDE1OSwgMjMzLCAxNzUsIDE4LCAxOSwgMjMzLCAxNzQsIDE4LCAxOSwgMTU5LCAyMzMsIAotICAgIDE3NCwgMTgsIDE5LCAyMzMsIDE3MywgMTgsIDE5LCAxNTksIDIzMywgMTczLCAxOCwgMTksIDIzMywgMTgyLCAxOCwgMTksIAotICAgIDE1OSwgMjMzLCAxODIsIDE4LCAxOSwgMjMzLCAxODEsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MSwgMTgsIDE5LCAyMjksIDE5MCwgCi0gICAgMjMzLCAxODEsIDE4LCAxOSwgMjM1LCAyMywgMTgsIDE5LCAyMzMsIDE4MywgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDE3NiwgCi0gICAgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDg0LCAxOCwgMTksIDIxOSwgMjcsIDIzNCwgMjMsIDE4LCAxOSwgMjE5LCAyNywgMjM0LCAKLSAgICAyNDgsIDE4LCAxOSwgMjUwLCAxOTAsIDE4LCAxOSwgMjUxLCAzMSwgMTgsIDE5LCAyNTAsIDUxLCAxOCwgMTksIDI1MCwgNDEsIAotICAgIDE4LCAxOSwgMjQ5LCAyMzgsIDE4LCAxOSwgMjQ5LCAxNzQsIDE4LCAxOSwgMjExLCAxMTYsIDI0OSwgMTc0LCAxOCwgMTksIAotICAgIDI1MSwgMzMsIDE4LCAxOSwgMjUxLCAzMiwgMTgsIDE5LCAyNDksIDc5LCAxOCwgMTksIDE1OSwgMjQ5LCA3OSwgMTgsIDE5LCAKLSAgICAyNDksIDc3LCAxOCwgMTksIDE1OSwgMjQ5LCA3NywgMTgsIDE5LCAyNDksIDc2LCAxOCwgMTksIDE1OSwgMjQ5LCA3NiwgMTgsIAotICAgIDE5LCAyNDksIDc1LCAxOCwgMTksIDE1OSwgMjQ5LCA3NSwgMTgsIDE5LCAyNDksIDc0LCAxOCwgMTksIDE1OSwgMjQ5LCA3NCwgCi0gICAgMTgsIDE5LCAyNDksIDgxLCAxOCwgMTksIDE1OSwgMjQ5LCA4MSwgMTgsIDE5LCAyNDksIDgwLCAxOCwgMTksIDE1OSwgMjQ5LCAKLSAgICA4MCwgMTgsIDE5LCAyMjksIDE5MCwgMjQ5LCA4MCwgMTgsIDE5LCAyNTEsIDY2LCAxOCwgMTksIDIyMSwgMjA5LCAyMTYsIAotICAgIDIxMCwgMTgsIDE5LCAyMzEsIDkxLCAxOCwgMTksIDIzMSwgMjM2LCAxOCwgMTksIDIzMCwgMjMwLCAxOCwgMTksIDIzMCwgCi0gICAgMjAxLCAxOCwgMTksIDIzMCwgMTYxLCAxOCwgMTksIDIzMCwgMTMyLCAxOCwgMTksIDIxMSwgMTE2LCAyMzAsIDEzMiwgMTgsIAotICAgIDE5LCAxODQsIDE4LCAxOSwgMjMxLCAyMzcsIDE4LCAxOSwgMjMwLCA0MCwgMTgsIDE5LCAxNTksIDIzMCwgNDAsIDE4LCAxOSwgCi0gICAgMjMwLCAzOCwgMTgsIDE5LCAxNTksIDIzMCwgMzgsIDE4LCAxOSwgMjMwLCAzNywgMTgsIDE5LCAxNTksIDIzMCwgMzcsIDE4LCAKLSAgICAxOSwgMjMwLCAzNiwgMTgsIDE5LCAxNTksIDIzMCwgMzYsIDE4LCAxOSwgMjMwLCAzNSwgMTgsIDE5LCAxNTksIDIzMCwgMzUsIAotICAgIDE4LCAxOSwgMjMwLCA0MiwgMTgsIDE5LCAxNTksIDIzMCwgNDIsIDE4LCAxOSwgMjMwLCA0MSwgMTgsIDE5LCAxNTksIDIzMCwgCi0gICAgNDEsIDE4LCAxOSwgMjI5LCAxOTAsIDIzMCwgNDEsIDE4LCAxOSwgMTkzLCAxOCwgMTksIDE1OSwgMTkzLCAxOCwgMTksIAotICAgIDIzMCwgMjM0LCAxOCwgMTksIDI1MywgMjA1LCAxOTMsIDE4LCAxOSwgMjIxLCAyMDksIDE5MywgMTgsIDE5LCAyMjksIDEwNywgCi0gICAgMTgsIDE5LCAyMjksIDIyNCwgMTgsIDE5LCAyMjgsIDIzMywgMTgsIDE5LCAyMjgsIDIwOCwgMTgsIDE5LCAyMjgsIDc0LCAKLSAgICAxOCwgMTksIDIyOCwgNjQsIDE4LCAxOSwgMjExLCAxMTYsIDIyOCwgNjQsIDE4LCAxOSwgMTk3LCAxOCwgMTksIDIyOSwgCi0gICAgMjI1LCAxOCwgMTksIDIyNywgMTcyLCAxOCwgMTksIDE1OSwgMjI3LCAxNzIsIDE4LCAxOSwgMjI3LCAxNzQsIDE4LCAxOSwgCi0gICAgMTU5LCAyMjcsIDE3NCwgMTgsIDE5LCAyMjcsIDE3MywgMTgsIDE5LCAxNTksIDIyNywgMTczLCAxOCwgMTksIDIyOSwgMTkwLCAKLSAgICAyMjcsIDE3MywgMTgsIDE5LCAyMzAsIDI1LCAxOCwgMTksIDcyLCAyMjksIDc5LCAxOCwgMTksIDIyOCwgMjM4LCAxOCwgMTksIAotICAgIDIzMywgNTgsIDE4LCAxOSwgMjMzLCAxMzMsIDE4LCAxOSwgMjMyLCAyNDEsIDE4LCAxOSwgMjMyLCAyMjcsIDE4LCAxOSwgCi0gICAgMjMyLCAxNTYsIDE4LCAxOSwgMjMyLCAxMjcsIDE4LCAxOSwgMjExLCAxMTYsIDIzMiwgMTI3LCAxOCwgMTksIDIzMywgMTM1LCAKLSAgICAxOCwgMTksIDIzMywgMTM0LCAxOCwgMTksIDIzMiwgNjgsIDE4LCAxOSwgMTU5LCAyMzIsIDY4LCAxOCwgMTksIDIzMiwgNjcsIAotICAgIDE4LCAxOSwgMTU5LCAyMzIsIDY3LCAxOCwgMTksIDIzMiwgNjYsIDE4LCAxOSwgMTU5LCAyMzIsIDY2LCAxOCwgMTksIDIzMiwgCi0gICAgNjUsIDE4LCAxOSwgMTU5LCAyMzIsIDY1LCAxOCwgMTksIDIzMiwgNjQsIDE4LCAxOSwgMTU5LCAyMzIsIDY0LCAxOCwgMTksIAotICAgIDIzMiwgNzAsIDE4LCAxOSwgMTU5LCAyMzIsIDcwLCAxOCwgMTksIDIzMiwgNjksIDE4LCAxOSwgMTU5LCAyMzIsIDY5LCAxOCwgCi0gICAgMTksIDE1NiwgMTgsIDE5LCAxNTksIDE1NiwgMTgsIDE5LCAxNDcsIDE1NiwgMTgsIDE5LCAyMjEsIDE4MSwgMTgsIDE5LCAKLSAgICAyMjIsIDI5LCAxOCwgMTksIDIxOSwgMTkxLCAxOCwgMTksIDIxOSwgMTc1LCAxOCwgMTksIDIxOSwgNTgsIDE4LCAxOSwgCi0gICAgMjE5LCA0MCwgMTgsIDE5LCAyMTEsIDExNiwgMjE5LCA0MCwgMTgsIDE5LCAyMDYsIDE4LCAxOSwgMjIyLCAzMSwgMTgsIDE5LCAKLSAgICAyMTcsIDI0OSwgMTgsIDE5LCAxNTksIDIxNywgMjQ5LCAxOCwgMTksIDIxNywgMjQzLCAxOCwgMTksIDE1OSwgMjE3LCAyNDMsIAotICAgIDE4LCAxOSwgMjE3LCAyNDIsIDE4LCAxOSwgMTU5LCAyMTcsIDI0MiwgMTgsIDE5LCAyMTcsIDIzOCwgMTgsIDE5LCAxNTksIAotICAgIDIxNywgMjM4LCAxOCwgMTksIDIxNywgMjM3LCAxOCwgMTksIDE1OSwgMjE3LCAyMzcsIDE4LCAxOSwgMjE3LCAyNTMsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTcsIDI1MywgMTgsIDE5LCAyMTcsIDI1MiwgMTgsIDE5LCAxNTksIDIxNywgMjUyLCAxOCwgMTksIDIyOSwgCi0gICAgMTkwLCAyMTcsIDI1MiwgMTgsIDE5LCAyMjIsIDkxLCAxOCwgMTksIDI1MywgMjA1LCAyMjIsIDkxLCAxOCwgMTksIDIxNywgCi0gICAgMjU0LCAxOCwgMTksIDI1MSwgMjE4LCAyMjIsIDkxLCAxOCwgMTksIDIzMCwgMTI3LCAyMTksIDEwOCwgMTgsIDE5LCAyMjksIAotICAgIDE5MCwgMjE5LCA5OSwgMTgsIDE5LCAyMjksIDE5MCwgMjIyLCA4OSwgMTgsIDE5LCAyMjksIDE5MCwgMjE4LCAyMzUsIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxOCwgODYsIDE4LCAxOSwgMjI5LCAxOTAsIDIxOSwgOTgsIDE4LCAxOSwgMjI5LCAxOTAsIDIyMSwgCi0gICAgMTg0LCAxOCwgMTksIDIyMCwgNjMsIDE4LCAxOSwgMjIwLCAzMiwgMTgsIDE5LCAyMjAsIDI3LCAxOCwgMTksIDIyMCwgNywgCi0gICAgMTgsIDE5LCAyMjAsIDEsIDE4LCAxOSwgMjIwLCAxMDIsIDE4LCAxOSwgMjIwLCA5OCwgMTgsIDE5LCAyMTksIDIwNiwgMTgsIAotICAgIDE5LCAxNTksIDIxOSwgMjA2LCAxOCwgMTksIDIxOSwgMjA1LCAxOCwgMTksIDE1OSwgMjE5LCAyMDUsIDE4LCAxOSwgMjE5LCAKLSAgICAyMDQsIDE4LCAxOSwgMTU5LCAyMTksIDIwNCwgMTgsIDE5LCAyMTksIDIwMywgMTgsIDE5LCAxNTksIDIxOSwgMjAzLCAxOCwgCi0gICAgMTksIDIxOSwgMjAyLCAxOCwgMTksIDE1OSwgMjE5LCAyMDIsIDE4LCAxOSwgMjE5LCAyMDgsIDE4LCAxOSwgMTU5LCAyMTksIAotICAgIDIwOCwgMTgsIDE5LCAyMTksIDIwNywgMTgsIDE5LCAxNTksIDIxOSwgMjA3LCAxOCwgMTksIDIyMCwgMTA0LCAxOCwgMTksIAotICAgIDIxMSwgNDcsIDE4LCAxOSwgMjExLCAxMDEsIDE4LCAxOSwgMjExLCA4LCAxOCwgMTksIDIxMCwgMjU1LCAxOCwgMTksIDIxMCwgCi0gICAgMjQ0LCAxOCwgMTksIDIxMCwgMjI5LCAxOCwgMTksIDIxMSwgMTE2LCAyMTAsIDIyOSwgMTgsIDE5LCAxOTEsIDE4LCAxOSwgCi0gICAgMjExLCAxMDMsIDE4LCAxOSwgMjEwLCAxNzQsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NCwgMTgsIDE5LCAyMTAsIDE3MywgMTgsIAotICAgIDE5LCAxNTksIDIxMCwgMTczLCAxOCwgMTksIDIxMCwgMTcyLCAxOCwgMTksIDE1OSwgMjEwLCAxNzIsIDE4LCAxOSwgMjEwLCAKLSAgICAxNzEsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MSwgMTgsIDE5LCAyMTAsIDE3MCwgMTgsIDE5LCAxNTksIDIxMCwgMTcwLCAxOCwgCi0gICAgMTksIDIxMCwgMTc2LCAxOCwgMTksIDE1OSwgMjEwLCAxNzYsIDE4LCAxOSwgMjEwLCAxNzUsIDE4LCAxOSwgMTU5LCAyMTAsIAotICAgIDE3NSwgMTgsIDE5LCAyMjksIDE5MCwgMjEwLCAxNzUsIDE4LCAxOSwgMjExLCAxMTcsIDE4LCAxOSwgMjUyLCA0LCAyMTEsIAotICAgIDExNywgMTgsIDE5LCAxNTksIDIxMSwgMTE3LCAxOCwgMTksIDIyMSwgMjA5LCAyMTEsIDgsIDE4LCAxOSwgMjIzLCAxMjgsIAotICAgIDE4LCAxOSwgMjIzLCAyMjMsIDIyMywgMTI4LCAxOCwgMTksIDE1OSwgMjMzLCA1OCwgMTgsIDE5LCAyMjMsIDE4MywgMTgsIAotICAgIDE5LCAyMjMsIDM1LCAxOCwgMTksIDIyMiwgMjM5LCAxOCwgMTksIDIyMiwgMjExLCAxOCwgMTksIDIyMiwgMTk3LCAxOCwgCi0gICAgMTksIDE1OSwgMjMyLCAxNTYsIDE4LCAxOSwgMjA1LCAxOCwgMTksIDIyMywgMTg0LCAxOCwgMTksIDE1OSwgMjMzLCAxMzUsIAotICAgIDE4LCAxOSwgMjIyLCAxMDgsIDE4LCAxOSwgMTU5LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTMsIDE4LCAxOSwgMTU5LCAxNTMsIAotICAgIDE4LCAxOSwgMTQ3LCAxNTMsIDE4LCAxOSwgMjQ0LCAxNTQsIDE4LCAxOSwgMjQ0LCAxOTMsIDE4LCAxOSwgMjQ0LCAxMjEsIAotICAgIDE4LCAxOSwgMjQ0LCAxMDgsIDE4LCAxOSwgMjQ0LCA0MywgMTgsIDE5LCAyNDQsIDM0LCAxOCwgMTksIDI0NCwgMTk2LCAxOCwgCi0gICAgMTksIDI0NCwgMTk1LCAxOCwgMTksIDI0MywgMjEyLCAxOCwgMTksIDE1OSwgMjQzLCAyMTIsIDE4LCAxOSwgMjQ1LCA2LCAKLSAgICAxOCwgMTksIDIxNiwgMTk1LCAxOCwgMTksIDIzMCwgMjMsIDIxNiwgMTk1LCAxOCwgMTksIDIxNiwgMTc1LCAxOCwgMTksIAotICAgIDIzMCwgMjMsIDIxNiwgMTc1LCAxOCwgMTksIDIxNiwgMTcxLCAxOCwgMTksIDIzMCwgMjMsIDIxNiwgMTcxLCAxOCwgMTksIAotICAgIDIxNiwgMTU2LCAxOCwgMTksIDIxNiwgMTUzLCAxOCwgMTksIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjA3LCAxOCwgMTksIAotICAgIDIxNiwgMTI3LCAxOCwgMTksIDE1OSwgMjE2LCAxMjcsIDE4LCAxOSwgMjE2LCAyMTAsIDE4LCAxOSwgMjE1LCAxNDIsIDE4LCAKLSAgICAxOSwgMjE1LCAxNDAsIDE4LCAxOSwgMjE1LCAxMzksIDE4LCAxOSwgMjE1LCAxNDQsIDE4LCAxOSwgMjE1LCAxNDUsIDE4LCAKLSAgICAxOSwgMjE1LCA1MiwgMTgsIDE5LCAyMTUsIDUxLCAxOCwgMTksIDIxNSwgNTAsIDE4LCAxOSwgMjE1LCA1MywgMTgsIDE5LCAKLSAgICAyMjcsIDE5MywgMjQxLCAyMzgsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgMTgwLCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIAotICAgIDE2MSwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCA2OCwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCA1MywgMTgsIDE5LCAyMjcsIAotICAgIDE5MywgMTYyLCAxOCwgMTksIDIyNywgMTkzLCAyNDIsIDQ2LCAxOCwgMTksIDIyNywgMTkzLCAyNDIsIDYwLCAxOCwgMTksIAotICAgIDIyNywgMTkyLCAyNDIsIDYwLCAxOCwgMTksIDI0MSwgMTU0LCAxOCwgMTksIDIyNCwgODQsIDE4LCAxOSwgMjI0LCA1MywgCi0gICAgMTgsIDE5LCAyMjQsIDQ4LCAxOCwgMTksIDIyNCwgNDIsIDE4LCAxOSwgMjI0LCAzNywgMTgsIDE5LCAyMjQsIDg4LCAxOCwgCi0gICAgMTksIDIyNCwgODcsIDE4LCAxOSwgMjI0LCA5NiwgMTgsIDE5LCAyMTYsIDU1LCAxOCwgMTksIDIxNiwgNTMsIDE4LCAxOSwgCi0gICAgMjE2LCA1MiwgMTgsIDE5LCAyMTYsIDU2LCAxOCwgMTksIDE1OSwgMjIzLCAxMjgsIDE4LCAxOSwgMTU5LCAyMjMsIDM1LCAKLSAgICAxOCwgMTksIDE1OSwgMjIyLCAyMTEsIDE4LCAxOSwgMTU5LCAyMDUsIDE4LCAxOSwgMjI5LCA3NSwgMTgsIDE5LCAyMjksIAotICAgIDI3LCAxOCwgMTksIDIyOSwgMjMsIDE4LCAxOSwgMjI5LCA0LCAxOCwgMTksIDIyOCwgMjU1LCAxOCwgMTksIDIyOSwgNzcsIAotICAgIDE4LCAxOSwgMjI5LCA3NiwgMTgsIDE5LCAyMjksIDc5LCAxOCwgMTksIDIyOCwgMTAzLCAxOCwgMTksIDIyMSwgMjA5LCAKLSAgICAyMjAsIDYzLCAxOCwgMTksIDIyMSwgMjA5LCAyMjAsIDMyLCAxOCwgMTksIDIyMSwgMjA5LCAyMjAsIDcsIDE4LCAxOSwgCi0gICAgMjIxLCAyMDksIDIyMCwgMTAyLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE5NSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKLSAgICAxNzUsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTU2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIwOCwgMTgsIDE5LCAyMTEsIAotICAgIDIxMywgMjE2LCAyMTAsIDE4LCAxOSwgMjMyLCAyNDgsIDE4LCAxOSwgMjMyLCAyNDcsIDE4LCAxOSwgMjMyLCAyNDYsIDE4LCAKLSAgICAxOSwgMjMyLCAyNDUsIDE4LCAxOSwgMjMyLCAyNTQsIDE4LCAxOSwgMjMyLCAyNTMsIDE4LCAxOSwgMjMyLCAyNTUsIDE4LCAKLSAgICAxOSwgMjE2LCAyMDksIDIxNiwgMTk1LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE3NSwgMTgsIDE5LCAyMTYsIDIwOSwgCi0gICAgMjE2LCAxNzEsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMTU2LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE1MywgMTgsIDE5LCAKLSAgICAyMTYsIDIwOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMjA3LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIAotICAgIDIxMCwgMTgsIDE5LCAyNTQsIDE4OSwgMjUzLCAxNTgsIDE4LCAxOSwgMjUxLCAyMTgsIDc1LCAxOCwgMTksIDI1MSwgMjE4LCAKLSAgICA3MywgMTgsIDE5LCAyNTEsIDIxOCwgNzYsIDE4LCAxOSwgMjUxLCAyMTgsIDYxLCAxOCwgMTksIDI1MSwgMjE4LCAyMTIsIAotICAgIDIyLCAxOCwgMTksIDI1MSwgMjE4LCAyMTEsIDI1MCwgMTgsIDE5LCAyNTEsIDIxOCwgMjExLCAyMjcsIDE4LCAxOSwgMjUxLCAKLSAgICAyMTgsIDIxMiwgNjUsIDE4LCAxOSwgMjUxLCAyMTgsIDIyOSwgMTA3LCAxOCwgMTksIDI1MSwgMjE4LCAyMjgsIDIzMywgMTgsIAotICAgIDE5LCAyNTEsIDIxOCwgMjI4LCA3NCwgMTgsIDE5LCAyNTEsIDIxOCwgMTk3LCAxOCwgMTksIDI1MSwgMjE4LCAyMzQsIDE4MiwgCi0gICAgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCA5MiwgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCAyOCwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgMTc2LCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDIzOCwgMTgsIDE5LCAyMjEsIDIwOSwgMjQxLCAxODAsIDE4LCAxOSwgMjIxLCAKLSAgICAyMDksIDI0MSwgNjgsIDE4LCAxOSwgMjIxLCAyMDksIDE2MiwgMTgsIDE5LCA3MiwgMjQyLCAyMjAsIDE4LCAxOSwgNzIsIAotICAgIDI0MiwgMjI0LCAxOCwgMTksIDcyLCAyNDIsIDIzNiwgMTgsIDE5LCA3MiwgMjQyLCAyMzUsIDE4LCAxOSwgNzIsIDI0MiwgCi0gICAgMjI1LCAxOCwgMTksIDcyLCAyNDIsIDI0OSwgMTgsIDE5LCA3MiwgMjIyLCAxNDAsIDE4LCAxOSwgNzIsIDIyMiwgMjExLCAKLSAgICAxOCwgMTksIDcyLCAyMjMsIDEyOCwgMTgsIDE5LCA3MiwgMjIzLCAxMDgsIDE4LCAxOSwgNzIsIDIyMywgMzUsIDE4LCAxOSwgCi0gICAgNzIsIDIwNSwgMTgsIDE5LCA3MiwgMjExLCAxOTUsIDE4LCAxOSwgNzIsIDIxMSwgMjI3LCAxOCwgMTksIDcyLCAyMTIsIDIyLCAKLSAgICAxOCwgMTksIDcyLCAyMTIsIDE3LCAxOCwgMTksIDcyLCAyMTEsIDI1MCwgMTgsIDE5LCA3MiwgMjEyLCA2NSwgMTgsIDE5LCAKLSAgICA3MiwgMjQwLCAxOTQsIDE4LCAxOSwgNzIsIDI0MCwgMTk1LCAxOCwgMTksIDcyLCAyNDAsIDE5OCwgMTgsIDE5LCA3MiwgCi0gICAgMjQwLCAxOTcsIDE4LCAxOSwgNzIsIDI0MCwgMTk2LCAxOCwgMTksIDcyLCAyNDAsIDIwMCwgMTgsIDE5LCA3MiwgMjE2LCAKLSAgICAxMzYsIDE4LCAxOSwgNzIsIDIxNiwgMTU2LCAxOCwgMTksIDcyLCAyMTYsIDE5NSwgMTgsIDE5LCA3MiwgMjE2LCAxOTQsIAotICAgIDE4LCAxOSwgNzIsIDIxNiwgMTc1LCAxOCwgMTksIDcyLCAyMTYsIDIwOCwgMTgsIDE5LCA3MiwgMjE1LCAxMjMsIDE4LCAxOSwgCi0gICAgNzIsIDIxNSwgMTMzLCAxOCwgMTksIDcyLCAyMTUsIDE1MSwgMTgsIDE5LCA3MiwgMjE1LCAxNTAsIDE4LCAxOSwgNzIsIAotICAgIDIxNSwgMTM1LCAxOCwgMTksIDcyLCAyMTUsIDE1NiwgMTgsIDE5LCA3MiwgMjI0LCAxNTAsIDE4LCAxOSwgNzIsIDIyNSwgCi0gICAgMTYsIDE4LCAxOSwgNzIsIDIyNSwgMjIxLCAxOCwgMTksIDcyLCAyMjUsIDIxMSwgMTgsIDE5LCA3MiwgMjI1LCAxMDgsIDE4LCAKLSAgICAxOSwgNzIsIDE5MCwgMTgsIDE5LCA3MiwgMjI2LCAxMDUsIDE4LCAxOSwgNzIsIDI0MiwgMTEzLCAxOCwgMTksIDcyLCAyNDIsIAotICAgIDE3NCwgMTgsIDE5LCA3MiwgMjQzLCA2MiwgMTgsIDE5LCA3MiwgMjQzLCA1NSwgMTgsIDE5LCA3MiwgMjQyLCAyMTQsIDE4LCAKLSAgICAxOSwgNzIsIDI0MywgMTM1LCAxOCwgMTksIDcyLCAyMzQsIDEwMCwgMTgsIDE5LCA3MiwgMjM0LCAxMDUsIDE4LCAxOSwgNzIsIAotICAgIDIzNCwgMTE5LCAxOCwgMTksIDcyLCAyMzQsIDExOCwgMTgsIDE5LCA3MiwgMjM0LCAxMTIsIDE4LCAxOSwgNzIsIDIzNCwgCi0gICAgMTMyLCAxOCwgMTksIDcyLCAyMzQsIDQxLCAxOCwgMTksIDcyLCAyMzQsIDQyLCAxOCwgMTksIDcyLCAyMzQsIDQ1LCAxOCwgCi0gICAgMTksIDcyLCAyMzQsIDQ0LCAxOCwgMTksIDcyLCAyMzQsIDQzLCAxOCwgMTksIDcyLCAyMzQsIDQ2LCAxOCwgMTksIDcyLCAKLSAgICAyMzQsIDQ3LCAxOCwgMTksIDcyLCAyMjcsIDIzNywgMTgsIDE5LCA3MiwgMjI4LCA3NCwgMTgsIDE5LCA3MiwgMjI5LCAxMDcsIAotICAgIDE4LCAxOSwgNzIsIDIyOSwgMTAzLCAxOCwgMTksIDcyLCAyMjgsIDIzMywgMTgsIDE5LCA3MiwgMTk3LCAxOCwgMTksIDcyLCAKLSAgICAyMzAsIDEwMiwgMTgsIDE5LCA3MiwgMjMwLCAxNjEsIDE4LCAxOSwgNzIsIDIzMSwgOTEsIDE4LCAxOSwgNzIsIDIzMSwgODAsIAotICAgIDE4LCAxOSwgNzIsIDIzMCwgMjMwLCAxOCwgMTksIDcyLCAxODQsIDE4LCAxOSwgNzIsIDIxMCwgMjEyLCAxOCwgMTksIDcyLCAKLSAgICAyMTAsIDI0NCwgMTgsIDE5LCA3MiwgMjExLCA0NywgMTgsIDE5LCA3MiwgMjExLCA0NCwgMTgsIDE5LCA3MiwgMjExLCA4LCAKLSAgICAxOCwgMTksIDcyLCAxOTEsIDE4LCAxOSwgNzIsIDIzNSwgNTEsIDE4LCAxOSwgMjIxLCAyMDksIDIzNSwgNTEsIDE4LCAxOSwgCi0gICAgNzIsIDIzNSwgNjgsIDE4LCAxOSwgNzIsIDIzNSwgMTI2LCAxOCwgMTksIDcyLCAyMzUsIDEyNCwgMTgsIDE5LCA3MiwgMjM1LCAKLSAgICAxMDgsIDE4LCAxOSwgMjIxLCAyMDksIDIzNSwgMTA4LCAxOCwgMTksIDcyLCAyMzUsIDE0MSwgMTgsIDE5LCA3MiwgMjM1LCAKLSAgICA4MSwgMTgsIDE5LCA3MiwgMjM1LCA4NSwgMTgsIDE5LCA3MiwgMjM1LCA5NSwgMTgsIDE5LCA3MiwgMjM1LCA5NCwgMTgsIAotICAgIDE5LCA3MiwgMjM1LCA5MywgMTgsIDE5LCA3MiwgMjM1LCA5NiwgMTgsIDE5LCA3MiwgMjMyLCA5OCwgMTgsIDE5LCA3MiwgCi0gICAgMjMyLCAxNTYsIDE4LCAxOSwgNzIsIDIzMywgNTgsIDE4LCAxOSwgNzIsIDIzMywgNTAsIDE4LCAxOSwgNzIsIDIzMiwgMjQxLCAKLSAgICAxOCwgMTksIDcyLCAyMzMsIDEzNSwgMTgsIDE5LCA3MiwgMjQ3LCAxNDksIDE4LCAxOSwgNzIsIDI0NywgMTUwLCAxOCwgMTksIAotICAgIDcyLCAyNDcsIDE1NSwgMTgsIDE5LCA3MiwgMjQ3LCAxNTQsIDE4LCAxOSwgNzIsIDI0NywgMTUxLCAxOCwgMTksIDcyLCAKLSAgICAyNDcsIDE1NiwgMTgsIDE5LCA3MiwgMjMyLCAyNDQsIDE4LCAxOSwgNzIsIDIzMiwgMjQ2LCAxOCwgMTksIDcyLCAyMzIsIAotICAgIDI1MCwgMTgsIDE5LCA3MiwgMjMyLCAyNDksIDE4LCAxOSwgNzIsIDIzMiwgMjQ4LCAxOCwgMTksIDcyLCAyMzIsIDI1NCwgCi0gICAgMTgsIDE5LCA3MiwgMjE2LCA1MCwgMTgsIDE5LCA3MiwgMjE2LCA1MiwgMTgsIDE5LCA3MiwgMjE2LCA1NSwgMTgsIDE5LCAKLSAgICA3MiwgMjE2LCA1NCwgMTgsIDE5LCA3MiwgMjE2LCA1MywgMTgsIDE5LCA3MiwgMjE2LCA1NiwgMTgsIDE5LCA3MiwgMjE2LCAKLSAgICA0NSwgMTgsIDE5LCA3MiwgMjE2LCA0NiwgMTgsIDE5LCA3MiwgMjE2LCA1OCwgMTgsIDE5LCA3MiwgMjE2LCA1NywgMTgsIAotICAgIDE5LCA3MiwgMjE2LCA0NywgMTgsIDE5LCA3MiwgMjE2LCA1OSwgMTgsIDE5LCA3MiwgMjEwLCAxMywgMTgsIDE5LCA3MiwgCi0gICAgMjEwLCAyMywgMTgsIDE5LCA3MiwgMjEwLCA5NCwgMTgsIDE5LCA3MiwgMjEwLCA5MiwgMTgsIDE5LCA3MiwgMjEwLCA0NCwgCi0gICAgMTgsIDE5LCA3MiwgMjEwLCAxMTYsIDE4LCAxOSwgNzIsIDIxMCwgMTU5LCAxOCwgMTksIDcyLCA2NSwgMjEwLCAxNTksIDE4LCAKLSAgICAxOSwgNzIsIDI0NiwgMjgsIDE4LCAxOSwgNzIsIDI0NiwgMjksIDE4LCAxOSwgNzIsIDI0NiwgMzYsIDE4LCAxOSwgNzIsIAotICAgIDI0NiwgMzUsIDE4LCAxOSwgNzIsIDI0NiwgMzEsIDE4LCAxOSwgNzIsIDI0NiwgMzgsIDE4LCAxOSwgNzIsIDIxOCwgODMsIAotICAgIDE4LCAxOSwgNzIsIDIxOSwgNTgsIDE4LCAxOSwgNzIsIDIyMSwgMTgxLCAxOCwgMTksIDcyLCAyMjEsIDE3MCwgMTgsIDE5LCAKLSAgICA3MiwgMjE5LCAxOTEsIDE4LCAxOSwgNzIsIDIwNiwgMTgsIDE5LCA3MiwgMjE5LCAyMjUsIDE4LCAxOSwgNzIsIDIyMCwgNywgCi0gICAgMTgsIDE5LCA3MiwgMjIwLCA2MywgMTgsIDE5LCA3MiwgMjIwLCA2MSwgMTgsIDE5LCA3MiwgMjIwLCAzMiwgMTgsIDE5LCAKLSAgICA3MiwgMjIwLCAxMDIsIDE4LCAxOSwgNzIsIDIyMCwgMTA0LCAxOCwgMTksIDcyLCAyMTUsIDE2MywgMTgsIDE5LCA3MiwgCi0gICAgMjE1LCAxNjYsIDE4LCAxOSwgNzIsIDIxNSwgMTc4LCAxOCwgMTksIDcyLCAyMTUsIDE3NywgMTgsIDE5LCA3MiwgMjE1LCAKLSAgICAxNjcsIDE4LCAxOSwgNzIsIDIxNSwgMTgzLCAxOCwgMTksIDcyLCAyNTAsIDY5LCAxOCwgMTksIDcyLCAyNTAsIDg2LCAxOCwgCi0gICAgMTksIDcyLCAyNTAsIDEzMSwgMTgsIDE5LCA3MiwgMjUwLCAxMjgsIDE4LCAxOSwgNzIsIDI1MCwgMTEwLCAxOCwgMTksIDcyLCAKLSAgICAyNTAsIDE1NywgMTgsIDE5LCA3MiwgMjE1LCAxMjYsIDE4LCAxOSwgNzIsIDIxNSwgMTI3LCAxOCwgMTksIDcyLCAyMTUsIAotICAgIDEzMCwgMTgsIDE5LCA3MiwgMjE1LCAxMjksIDE4LCAxOSwgNzIsIDIxNSwgMTI4LCAxOCwgMTksIDcyLCAyMTUsIDEzMSwgCi0gICAgMTgsIDE5LCAyNTAsIDExMSwgNTAsIDE4LCAxOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAxOCwgMTksIDIyNCwgODAsIDE4LCAKLSAgICAxOSwgMjI5LCA3MywgMTgsIDE5LCAyMjgsIDEwMCwgMTgsIDE5LCAyMjgsIDk5LCAxOCwgMTksIDIyOCwgOTgsIDE4LCAxOSwgCi0gICAgMjI4LCA5NywgMTgsIDE5LCAyMjgsIDEwMiwgMTgsIDE5LCAyMjgsIDEwMSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjUsIAotICAgIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI0LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMywgMTgsIDE5LCAyMTEsIDIxMywgCi0gICAgMjE2LCAxMjIsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIxLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyOCwgMTgsIDE5LCAKLSAgICAyMTEsIDIxMywgMjE2LCAxMjcsIDE4LCAxOSwgMjExLCAyMTMsIDQwLCAyMTYsIDIxMCwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgMjEyLCA5OCwgMjI2LCAyMjYsIDIxOSwgMTksIDc4LCAyMjYsIDIyNiwgMSwgMjUyLCA0OCwgMjI2LCAyMjYsIDEsIDIzMiwgCi0gICAgODcsIDIyNiwgMjI2LCAxLCAyNDQsIDE1MSwgMjI2LCAyMjYsIDEsIDIyMiwgMTUsIDIyNiwgMjI2LCAxLCAyMjgsIDE5MywgCi0gICAgMjI2LCAyMjYsIDEsIDIxNCwgMjI2LCAyMjYsIDIyNiwgMSwgMjQ4LCAxOTcsIDIyNiwgMjI2LCAxLCAyMTYsIDgwLCAyMjYsIAotICAgIDIyNiwgMSwgMjQ5LCAyMjksIDIyNiwgMjI2LCAxLCAyNTAsIDE4MCwgMjI2LCAyMjYsIDEsIDIzMCwgOTEsIDIyNiwgMjI2LCAKLSAgICAxLCAyNDIsIDE1NiwgMjI2LCAyMjYsIDEsIDIyOSwgNjMsIDIyNiwgMjI2LCAxLCAyMTgsIDEyMiwgMjI2LCAyMjYsIDEsIAotICAgIDIyMiwgMTM1LCAyMjYsIDIyNiwgMSwgMjU0LCAxOTgsIDIyNiwgMjI2LCAxLCAyMjYsIDE4NywgMjI2LCAyMjYsIDEsIDIxNCwgCi0gICAgMTUwLCAyMjYsIDIyNiwgMSwgMjQ1LCAyMzEsIDIyNiwgMjI2LCAxLCAyMzUsIDE4OCwgMjI2LCAyMjYsIDEsIDI0NSwgMjMyLCAKLSAgICAyMjYsIDIyNiwgMSwgMjI2LCAxNTgsIDIyNiwgMjI2LCAxLCAyMTQsIDIwNiwgMjI2LCAyMjYsIDEsIDIzNiwgMzksIDIyNiwgCi0gICAgMjI2LCAxLCAyNDUsIDIyOSwgMjI2LCAyMjYsIDEsIDIyNSwgMjAyLCAyMjYsIDIyNiwgMjQ0LCAxNTAsIDc4LCAyMjYsIAotICAgIDIyNiwgMjIzLCA0OSwgMjQ0LCAxNTAsIDc4LCAxNzgsIDEsIDI0NCwgMTQxLCAyNDQsIDEzMywgMjQ0LCAxNTUsIDI0NSwgNiwgCi0gICAgMTc4LCAxLCAyMTQsIDEwNSwgMTc4LCAxLCAyMTQsIDEzNSwgMjE0LCAxNTEsIDcwLCAxNzgsIDEsIDIxMCwgMjE0LCAxNzgsIAotICAgIDEsIDIxMSwgMTE3LCAxNzgsIDEsIDIxMiwgOTgsIDE3OCwgMSwgMjE2LCAxMzAsIDIxNiwgMTI5LCAyMTYsIDE1MSwgMTc4LCAKLSAgICAxLCAyNDUsIDU5LCAxNzgsIDEsIDI1NCwgOTMsIDYxLCAxNzgsIDEsIDIyNiwgMTQzLCA3NiwgMTc4LCAxLCAyNTUsIDE3LCAKLSAgICA2MSwgMTc4LCAxLCAyNTQsIDIyNywgMTc4LCAxLCAyMzIsIDEzMywgNzYsIDE3OCwgMSwgMjE5LCAyNDQsIDc2LCAxNzgsIDEsIAotICAgIDc2LCAxNzgsIDEsIDIyNiwgMjM0LCAxNzgsIDEsIDIyNiwgMTk2LCAxNzgsIDEsIDIyMywgMTY0LCAyMjMsIDE3NywgMjIzLCAKLSAgICA5NCwgMTUzLCAxNzgsIDEsIDIzNCwgMTkzLCAxNzgsIDEsIDI1MCwgMTc3LCAxNzgsIDEsIDIzNCwgMTk0LCAyMzUsIDIzLCAKLSAgICAxNzgsIDEsIDI0MywgMjAyLCAxNzgsIDEsIDI0NSwgMTM4LCAxNzgsIDEsIDI0MywgNTgsIDI0MiwgNjYsIDI0MywgMjAyLCAKLSAgICAxNzgsIDEsIDI0MywgOTYsIDE3OCwgMSwgMjExLCAxODgsIDIxMSwgMTgyLCAyMTIsIDk4LCAxNzgsIDEsIDI0MiwgMzgsIAotICAgIDI0MiwgNjAsIDE3OCwgMSwgMjQyLCA0MiwgMjQyLCA2MCwgMTc4LCAxLCAyMzIsIDEzNSwgMjQyLCA2MCwgMTc4LCAxLCAKLSAgICAyMTksIDI0NywgMjQyLCA2MCwgMTc4LCAxLCAyMjksIDE4NSwgMjI3LCAxNTcsIDIyOSwgMTg2LCAyMzAsIDI1LCAxNzgsIDEsIAotICAgIDIxOSwgMjQ1LCAyMzAsIDI1LCAxNzgsIDEsIDI0NiwgMTE1LCAxNzgsIDEsIDIzNSwgMTY4LCAyMzUsIDE3MiwgMjM1LCAKLSAgICAxNjIsIDczLCAxNzgsIDEsIDc1LCAxNzgsIDEsIDIzNSwgMTE3LCAyMzUsIDE0NCwgMTc4LCAxLCAyNDMsIDQzLCAxNzgsIDEsIAotICAgIDIzMiwgMTM2LCAyNTQsIDI0MywgMTc4LCAxLCAyMTksIDI0OSwgNjEsIDE3OCwgMSwgMjM1LCAxNTQsIDI0NSwgMTEzLCAKLSAgICAxNzgsIDEsIDIyNSwgMTY0LCAyMjUsIDE4NiwgMjI2LCAxMDUsIDE3OCwgMSwgMjU0LCAxNjMsIDI0NSwgMTExLCAxNzgsIDEsIAotICAgIDIxOSwgMjQsIDIyMiwgOTEsIDE3OCwgMSwgMjE5LCAxNzksIDIzMiwgMTMyLCAyMjIsIDkxLCAxNzgsIDEsIDIxOSwgMjQzLCAKLSAgICAyMjIsIDkxLCAxNzgsIDEsIDI1MSwgNjYsIDE3OCwgMSwgMjEwLCAxNTksIDE3OCwgMSwgMjE2LCA2MywgMjE2LCA3MywgCi0gICAgMjE1LCA0MSwgMjE3LCAxNTIsIDE3OCwgMSwgMjE5LCAyNDIsIDIxNywgMTUyLCAxNzgsIDEsIDI0OSwgNjAsIDE3OCwgMSwgCi0gICAgMjUyLCAzMSwgMjUyLCAzNCwgMjUxLCAyMjQsIDI1MywgMTU4LCAxNzgsIDEsIDIxOSwgMjQ4LCAyNTMsIDE1OCwgMTc4LCAxLCAKLSAgICAyNDYsIDExNCwgMTc4LCAxLCAyMjYsIDE3MSwgMTc4LCAxLCAyNDUsIDE5NiwgMjQ1LCAxOTgsIDc1LCAxNzgsIDEsIDIzMSwgCi0gICAgMTc4LCAyMzEsIDE4NiwgMTkzLCAxNzgsIDEsIDIzMiwgMTM0LCAxOTMsIDE3OCwgMSwgMjE5LCAyNDYsIDE5MywgMTc4LCAxLCAKLSAgICAyMzMsIDczLCAyMzMsIDExNCwgMjMyLCAxNDMsIDE1NiwgMTc4LCAxLCAyNDYsIDExNiwgMTc4LCAxLCAyMzUsIDIzMCwgCi0gICAgMTc4LCAxLCAyMzUsIDIzMSwgMTc4LCAxLCAyNDgsIDIxMCwgMjQ4LCAyMTUsIDI0OSwgNjAsIDE3OCwgMSwgMjI2LCAxMzgsIAotICAgIDI0NSwgNTgsIDc2LCAxNzgsIDEsIDI0NSwgMjI3LCAxNzgsIDEsIDIzNSwgMTg3LCAxNzgsIDEsIDI0OSwgNzgsIDE3OCwgMSwgCi0gICAgMjUxLCAxNywgMTc4LCAxLCAyNTAsIDE4OSwgMTc4LCAxLCAyMTgsIDE2MSwgMTc4LCAxLCAyMzIsIDEzMSwgMTc4LCAxLCAKLSAgICAyMTksIDI0MSwgMTc4LCAxLCAyNDAsIDExMCwgMTc4LCAxLCAyMjQsIDk2LCAxNzgsIDEsIDIxMSwgMTc4LCAxNzgsIDIxOSwgCi0gICAgMTU1LCAyMjQsIDE0MCwgMTc4LCAyMzAsIDg1LCAyMjQsIDE0MCwgMTc4LCAyNDksIDEzMSwgMjI0LCAxNDAsIDE3OCwgMjU0LCAKLSAgICA2LCA4NywgMTc4LCAyMTUsIDgyLCA4NywgMTc4LCAyNTIsIDQ2LCA4NywgMjE3LCA4MywgMSwgNjEsIDIxNywgODMsIDEsIAotICAgIDczLCAyMTcsIDgzLCAxLCA3MCwgMjE3LCA4MywgMSwgMTc2LCAyMTcsIDgzLCAxLCAyNDMsIDEzNSwgMjE3LCA4MywgMSwgCi0gICAgMjI5LCA3NywgMjE3LCA4MywgMSwgMjE3LCAxMDUsIDIxNywgODMsIDEsIDI0OCwgMjIxLCAyMTcsIDgzLCAxLCAxOTcsIAotICAgIDIxNywgODMsIDEsIDE5MCwgMjE3LCA4MywgMSwgMjUyLCAxOTEsIDIxNywgODMsIDEsIDE4NCwgMjE3LCA4MywgMSwgMTkxLCAKLSAgICAyMTcsIDgzLCAxLCAyMzMsIDEzNSwgMjE3LCA4MywgMSwgMjEyLCA2NSwgMjE3LCA4MywgMSwgMjA2LCAyMTcsIDgzLCAxLCAKLSAgICAxNjIsIDIxNywgODMsIDI1LCA1LCA3MywgMjE3LCA4MywgMjUsIDUsIDcwLCAyMTcsIDgzLCA1LCAyMTMsIDE1MiwgMjQyLCAKLSAgICA3LCAxLCA2MSwgMjQyLCA3LCAxLCA3MywgMjQyLCA3LCAxLCA3MCwgMjQyLCA3LCAxLCAxNzYsIDI0MiwgNywgMSwgMjQzLCAKLSAgICAxMzUsIDI0MiwgNywgMSwgMjI5LCA3NywgMjQyLCA3LCAxLCAyMTcsIDEwNSwgMjQyLCA3LCAxLCAyNDgsIDIyMSwgMjQyLCAKLSAgICA3LCAxLCAxOTcsIDI0MiwgNywgMSwgMTkwLCAyNDIsIDcsIDEsIDI1MiwgMTkxLCAyNDIsIDcsIDEsIDE4NCwgMjQyLCA3LCAKLSAgICAxLCAxOTEsIDI0MiwgNywgMSwgMjA1LCAyNDIsIDcsIDEsIDIzMywgMTM1LCAyNDIsIDcsIDEsIDIxMiwgNjUsIDI0MiwgNywgCi0gICAgMSwgMjA2LCAyNDIsIDcsIDEsIDE2MiwgMjQyLCA3LCAyNSwgNSwgNzMsIDI0MiwgNywgMjUsIDUsIDcwLCAyNDIsIDcsIDUsIAotICAgIDIyNiwgNDksIDIyNSwgMTI2LCAyMTksIDE1NSwgMjI0LCAxNDAsIDIyNSwgMTI2LCA1MiwgMjI0LCAxNDAsIDI1MSwgMTIwLCAKLSAgICAxLCA2MSwgMjUxLCAxMjAsIDEsIDczLCAyNTEsIDEyMCwgMSwgNzAsIDI1MSwgMTIwLCAxLCAxNzYsIDI1MSwgMTIwLCAxLCAKLSAgICAyNDMsIDEzNSwgMjUxLCAxMjAsIDEsIDIyOSwgNzcsIDI1MSwgMTIwLCAxLCAyMTcsIDEwNSwgMjUxLCAxMjAsIDEsIDI0OCwgCi0gICAgMjIxLCAyNTEsIDEyMCwgMSwgMTk3LCAyNTEsIDEyMCwgMSwgMTkwLCAyNTEsIDEyMCwgMSwgMjUyLCAxOTEsIDI1MSwgMTIwLCAKLSAgICAxLCAxODQsIDI1MSwgMTIwLCAxLCAxOTEsIDI1MSwgMTIwLCAxLCAyMDUsIDI1MSwgMTIwLCAxLCAyMzMsIDEzNSwgMjUxLCAKLSAgICAxMjAsIDEsIDIxMiwgNjUsIDI1MSwgMTIwLCAxLCAyMDYsIDI1MSwgMTIwLCAxLCAxNjIsIDI1MSwgMTIwLCAyNSwgNSwgNzMsIAotICAgIDI1MSwgMTIwLCAyNSwgNSwgNzAsIDIxNywgODIsIDEsIDYxLCAyMTcsIDgyLCAxLCA3MywgMjE3LCA4MiwgMSwgNzAsIDIxNywgCi0gICAgODIsIDEsIDE3NiwgMjE3LCA4MiwgMSwgMjQzLCAxMzUsIDIxNywgODIsIDEsIDIyOSwgNzcsIDIxNywgODIsIDEsIDIxNywgCi0gICAgMTA1LCAyMTcsIDgyLCAxLCAyNDgsIDIyMSwgMjE3LCA4MiwgMSwgMTk3LCAyMTcsIDgyLCAxLCAxOTAsIDIxNywgODIsIDEsIAotICAgIDI1MiwgMTkxLCAyMTcsIDgyLCAxLCAxODQsIDIxNywgODIsIDEsIDE5MSwgMjE3LCA4MiwgMSwgMjMzLCAxMzUsIDIxNywgCi0gICAgODIsIDEsIDIxMiwgNjUsIDIxNywgODIsIDEsIDIwNiwgMjE3LCA4MiwgMjUsIDUsIDczLCAyMTcsIDgyLCAyNSwgNSwgNzAsIAotICAgIDY5LCAxLCAxNzYsIDY5LCAxLCAyMzQsIDEzMiwgNjksIDEsIDIzNCwgMjgsIDY5LCAxLCAyMzQsIDEwNSwgNjksIDEsIDIyOSwgCi0gICAgNCwgNjksIDEsIDI1MSwgMzMsIDY5LCAxLCAyNTAsIDE1NywgNjksIDEsIDI0OSwgMjM4LCA2OSwgMSwgMjUwLCA4NiwgNjksIAotICAgIDEsIDIyNywgMTM0LCA2OSwgMSwgMjQ4LCAyMjEsIDY5LCAxLCAyMTUsIDE0NCwgNjksIDEsIDI0NywgMTQ1LCA2OSwgMSwgCi0gICAgMjE1LCAxMzksIDY5LCAxLCAyMjgsIDgwLCA2OSwgMSwgMjE3LCAxMDUsIDY5LCAxLCAyMTYsIDIwOCwgNjksIDEsIDExMSwgCi0gICAgNjksIDEsIDIxNiwgMTU2LCA2OSwgMSwgMjI4LCA3NCwgNjksIDEsIDI1MiwgMTkxLCA2OSwgMSwgMjI1LCAxNDcsIDY5LCAxLCAKLSAgICAyMjUsIDE2LCA2OSwgMSwgMjI1LCAxMjEsIDY5LCAxLCAyMzAsIDE2MSwgNjksIDEsIDIxMCwgMjQ0LCA2OSwgMSwgMjIyLCAKLSAgICAyMTEsIDY5LCAxLCAyMzIsIDE1NiwgNjksIDEsIDIxMywgMTM4LCA2OSwgMSwgMjIwLCAxMDIsIDY5LCAxLCAyMTgsIDE4NCwgCi0gICAgNjksIDEsIDIwNiwgNjksIDEsIDE2MiwgNjksIDEsIDIzMywgMTM1LCA2OSwgMSwgMjI0LCA4OCwgNjksIDIzNSwgMjQzLCAKLSAgICAyNSwgMjI0LCA3NCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA4NywgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA1MywgNjksIAotICAgIDIzNSwgMjQzLCAyNSwgMjI0LCA0OCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAzMCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAKLSAgICAyLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjMsIDI0NiwgNjksIDIzNSwgMjQzLCAyNSwgMjIzLCAyNDUsIDY5LCAyMzUsIDI0MywgCi0gICAgMjUsIDIyMiwgMTAwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjIsIDkzLCA2OSwgMjM1LCAyNDMsIDI1LCAyMzIsIDYyLCA2OSwgCi0gICAgMjM1LCAyNDMsIDI1LCAyMzIsIDUyLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDY5LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIAotICAgIDgwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDM4LCAyMTUsIDQ5LCAxMTAsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgMzgsIAotICAgIDIxNSwgNDksIDEwNSwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA3MCwgNjksIDI1LCAyMzUsIDIyOSwgMjU0LCA0NSwgNjksIAotICAgIDI1LCAyMzUsIDIyOSwgMjU1LCA3MywgNjksIDI1LCA1LCAyNTUsIDczLCA2OSwgMjUsIDUsIDczLCA2OSwgMjUsIDUsIDIzNiwgCi0gICAgMzMsIDY5LCAyNSwgNSwgMjExLCAxMTcsIDY5LCAyNSwgNSwgMjEwLCAxNjksIDY5LCAyNSwgNSwgNzAsIDY5LCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDY5LCAyNSwgNSwgMjE0LCAyMjksIDY5LCAyNSwgNSwgMjI2LCAyMzQsIDY5LCAyNSwgNSwgMTkxLCA2OSwgCi0gICAgMjUsIDUsIDIzNiwgNjAsIDY5LCAyNSwgNSwgNzUsIDY5LCAyNSwgNSwgMjU0LCAyNDMsIDY5LCAyNSwgNSwgMjU0LCAyMDEsIAotICAgIDY5LCAyNSwgNSwgMjI2LCAxODMsIDY5LCAyNSwgNSwgMjUzLCAxOTIsIDY5LCA1LCAyMjgsIDIwNiwgNjksIDUsIDIyMywgCi0gICAgMTI2LCA2OSwgNSwgMjEwLCAxODAsIDY5LCA1LCAyMzAsIDUyLCA2OSwgNSwgMjE1LCAyMTMsIDY5LCA1LCAyNTIsIDE0MywgCi0gICAgNjksIDUsIDIyMiwgMjA2LCA2OSwgNSwgMjE2LCA0MCwgNjksIDUsIDIzNCwgMjQxLCA2OSwgNSwgMjU0LCAyMDMsIDY5LCA1LCAKLSAgICAyMjEsIDI0NCwgMjIxLCAyMzgsIDY5LCA1LCAyMTMsIDE0OSwgNjksIDUsIDI0OSwgMjMyLCA2OSwgNSwgMjUyLCAxMTcsIAotICAgIDY5LCA1LCAyMzQsIDEyNSwgNjksIDUsIDI1MiwgMTM3LCA2OSwgNSwgMjUxLCA5LCAyMjUsIDcyLCAyMzMsIDE4NywgNjksIAotICAgIDUsIDIzMywgMzAsIDIxNiwgMTcsIDY5LCA1LCAyNTIsIDIwLCA2OSwgNSwgMjI1LCAxMjMsIDIzMCwgOTksIDY5LCA1LCAKLSAgICAyMzQsIDksIDY5LCAyNDksIDk4LCAxNiwgMjIzLCAyOCwgNjksIDUsIDI1MywgMTc0LCA2OSwgNSwgMjUzLCAxOTUsIDY5LCAKLSAgICAyMSwgMjEwLCA4NiwgNjksIDIxLCAxMTAsIDY5LCAyMSwgMTA1LCA2OSwgMjEsIDE1OCwgNjksIDIxLCAxNjEsIDY5LCAyMSwgCi0gICAgMTg5LCA2OSwgMjEsIDE5NCwgNjksIDIxLCAxOTgsIDY5LCAyMSwgMTk1LCA2OSwgMjEsIDIwMCwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjE5LCA0MywgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjMwLCA3MSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjI1LCA3MSwgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjUyLCA0OSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjUxLCAxMDMsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIyNCwgMjE1LCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMjQsIDIwOSwgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjI0LCAyMDcsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIyNCwgMjEzLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMjQsIDIxMSwgODMsIDI1MSwgMjM2LCAKLSAgICA4MywgMjQ1LCAxNjMsIDgzLCAyNDksIDIxOSwgODMsIDI0MywgMjI5LCAyMTgsIDEyOSwgODMsIDI0OSwgMjI2LCA4MywgCi0gICAgMjQ0LCAxMSwgMjQ3LCAxMTgsIDgzLCAyMTYsIDM5LCAyMTksIDUyLCAyNDAsIDE2OCwgODMsIDIxOSwgMTkwLCAzLCAyNTEsIAotICAgIDE3MiwgMjMxLCAxNTQsIDgzLCAyMzEsIDE4MywgMjQ5LCAyMTksIDgzLCAyMzEsIDE4MywgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA4MywgMjI4LCAxOTEsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgMTU3LCAxMTAsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgCi0gICAgMTU3LCAxMDUsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgMTU3LCAxNTgsIDgzLCAyNSwgMjIwLCAxMzcsIDgzLCAyMSwgMjEwLCAKLSAgICA4NiwgODMsIDIxLCAxMTAsIDgzLCAyMSwgMTA1LCA4MywgMjEsIDE1OCwgODMsIDIxLCAxNjEsIDgzLCAyMSwgMTg5LCA4MywgCi0gICAgMjEsIDE5NCwgODMsIDIxLCAxOTgsIDgzLCAyMSwgMTk1LCA4MywgMjEsIDIwMCwgODMsIDEsIDYxLCA4MywgMSwgNzUsIDgzLCAKLSAgICAxLCA3MywgODMsIDEsIDc2LCA4MywgMSwgNzAsIDgzLCAxLCAyMjYsIDIzNCwgODMsIDEsIDIxNCwgMjE0LCA4MywgMSwgCi0gICAgMjQ1LCAyMDksIDgzLCAxLCAxOTcsIDgzLCAxLCAyNTQsIDExNSwgODMsIDEsIDI1MiwgMTkxLCA4MywgMSwgMTkwLCA4MywgCi0gICAgMSwgMjI0LCA4OCwgODMsIDEsIDI0MywgMTM1LCA4MywgMSwgMTg0LCA4MywgMSwgMjMzLCAxMzUsIDgzLCAxLCAyMDYsIDgzLCAKLSAgICAxLCAyMjAsIDEwMiwgODMsIDEsIDIxNywgMTA1LCA4MywgMSwgMjQ4LCAyMjEsIDgzLCAxLCAyNTAsIDE1NywgODMsIDEsIAotICAgIDIzNSwgMTQxLCA4MywgMSwgMTkxLCA4MywgMSwgMjA1LCA4MywgMSwgMjEyLCA2NSwgODMsIDEsIDI0NCwgMTk2LCA4MywgMSwgCi0gICAgMTc2LCA4MywgMSwgMjM0LCAxMzIsIDgzLCAxLCAyMTUsIDE4MywgODMsIDEsIDIxMCwgMTE2LCA4MywgMSwgMjQyLCA0NiwgCi0gICAgODMsIDEsIDIxMCwgMTYsIDgzLCAxLCAyMzIsIDI1NCwgODMsIDEsIDIxMCwgNjksIDgzLCAxLCAyNTAsIDExMCwgODMsIDEsIAotICAgIDIxNiwgMzksIDE5OSwgMjUsIDUwLCA4MywgMSwgMjE2LCAzOSwgNzUsIDgzLCAxLCAyMTYsIDM5LCA3MywgODMsIDEsIDIxNiwgCi0gICAgMzksIDc2LCA4MywgMSwgMjE2LCAzOSwgNzAsIDgzLCAxLCAyMTYsIDM5LCAyMjYsIDIzNCwgODMsIDEsIDIxNiwgMzksIAotICAgIDIxNCwgMjE0LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAxMTUsIDgzLCAxLCAyMTYsIDM5LCAyNTIsIDE5MSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDE5MCwgODMsIDEsIDIxNiwgMzksIDIyNCwgODgsIDgzLCAxLCAyMTYsIDM5LCAyNDMsIDEzNSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDE4NCwgODMsIDEsIDIxNiwgMzksIDIxNywgMTA1LCA4MywgMSwgMjE2LCAzOSwgMjQ4LCAyMjEsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAyNTAsIDE1NywgODMsIDEsIDIxNiwgMzksIDIzNSwgMTQxLCA4MywgMSwgMjE2LCAzOSwgMjE1LCAxODMsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAxOTEsIDgzLCAxLCAyMTYsIDM5LCAyMTIsIDY1LCA4MywgMSwgMjE2LCAzOSwgMTc2LCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMjQzLCAxMzIsIDgzLCAxLCAyMTYsIDM5LCAyNDIsIDQ2LCA4MywgMSwgMjE2LCAzOSwgMjM1LCAxMDcsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAyMjgsIDIzMSwgODMsIDEsIDIxNiwgMzksIDI0NiwgMzgsIDgzLCAxLCAyMTksIDE5MCwgNzUsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgNzMsIDgzLCAxLCAyMTksIDE5MCwgMjM1LCAxNTIsIDgzLCAxLCAyMTksIDE5MCwgMjE0LCAyMTQsIDgzLCAKLSAgICAxLCAyMTksIDE5MCwgNzAsIDgzLCAxLCAyMTksIDE5MCwgMjU0LCAxMTUsIDgzLCAxLCAyMTksIDE5MCwgMTc2LCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDI0MywgMTM1LCA4MywgMSwgMjE5LCAxOTAsIDE2MiwgODMsIDEsIDIxOSwgMTkwLCAxOTAsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgMjIwLCAxMDIsIDgzLCAxLCAyMTksIDE5MCwgMjE3LCAxMDUsIDgzLCAxLCAyMTksIDE5MCwgMjQ4LCAyMjEsIAotICAgIDgzLCAxLCAyMTksIDE5MCwgMjM1LCAxNDEsIDgzLCAxLCAyMTksIDE5MCwgMjQ0LCAxOTYsIDgzLCAxLCAyMTksIDE5MCwgCi0gICAgMjQzLCAxMzIsIDgzLCAxLCAyMTksIDE5MCwgMjQyLCA0NiwgODMsIDEsIDIxOSwgMTkwLCAyMTUsIDE4MywgODMsIDEsIAotICAgIDIxOSwgMTkwLCAyMTAsIDExNiwgODMsIDEsIDIxOSwgMTkwLCAyMjMsIDE4NCwgODMsIDEsIDIxOSwgMTkwLCAyNTAsIDE1NywgCi0gICAgODMsIDEsIDIxOSwgMTkwLCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDczLCA4MywgMSwgMjMxLCAxODMsIDE3NiwgODMsIAotICAgIDEsIDIzMSwgMTgzLCAyMDUsIDgzLCAxLCAyMzEsIDE4MywgMjQ0LCAxOTYsIDgzLCAxLCAyMzEsIDE4MywgMjEwLCA4MiwgCi0gICAgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjU0LCA3NiwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTMsIAotICAgIDE0OCwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDgsIDE4NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIzNSwgMTkzLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTYyLCAKLSAgICAyNDMsIDExNiwgMjUyLCAxNTUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDEzNCwgMjUyLCAxNTUsIDgzLCAxLCAyNTQsIAotICAgIDE2MiwgMjQzLCAxMTYsIDYxLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCA3MywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMTc2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMjksIDc3LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyNTEsIDMzLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTUsIDE1NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE1LCAxNDQsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMTM1LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMjgsIDExMCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE3LCAxMDUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDI0OCwgMjIxLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxOTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIyNSwgCi0gICAgMTQ3LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTgsIDIyMywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAKLSAgICA4MiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI1NCwgCi0gICAgMjA5LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDIxNiwgMzksIDI1NCwgCi0gICAgMTYyLCAyNDMsIDExNiwgMjEwLCA4MiwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0MiwgMjQ5LCAKLSAgICA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjI5LCA3NywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgCi0gICAgMjQzLCAxMTYsIDI1MSwgMzMsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzUsIDExNCwgODMsIDEsIAotICAgIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNSwgMTU2LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMjQ4LCAxMTksIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDIzMSwgCi0gICAgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMjUsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMTgsIDIyMywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OSwgNzIsIDgzLCAxLCAyMzEsIDE4MywgCi0gICAgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAKLSAgICAxMTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE2MywgNzAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE2MywgCi0gICAgMTkxLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjUyLCAxOCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMjQ4LCAyMTEsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzIsIDI1NCwgMTgsIDE5LCAKLSAgICAyMjYsIDEwOSwgMTgsIDE5LCAyNTMsIDE2NywgMTgsIDE5LCAyNTUsIDI4LCAxOCwgMTksIDIxMiwgMjUsIDE4LCAxOSwgCi0gICAgMjI0LCAyMjEsIDE4LCAxOSwgMjI1LCAyMjksIDE4LCAxOSwgMjI0LCAxMDUsIDE4LCAxOSwgMjE3LCAzMSwgMTgsIDE5LCAKLSAgICAyMzQsIDE4OSwgMTgsIDE5LCAyMzMsIDE3OSwgMTgsIDE5LCAyMzEsIDEzMiwgMTgsIDE5LCAyMjgsIDM3LCAxOCwgMTksIAotICAgIDIyOSwgMTgxLCAxOCwgMTksIDIzMywgNjgsIDE4LCAxOSwgMjE5LCAyMiwgMTgsIDE5LCAyMjEsIDIxMSwgMTgsIDE5LCAKLSAgICAyMTksIDIzMiwgMTgsIDE5LCAyMjAsIDY2LCAxOCwgMTksIDIxOSwgMjAxLCAxOCwgMTksIDIxMCwgMjIwLCAxOCwgMTksIAotICAgIDIxMSwgNTIsIDE4LCAxOSwgMjIzLCAxMzQsIDE4LCAxOSwgMjI3LCAxNzEsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTcxLCAKLSAgICAxOCwgMTksIDIyNywgMTcwLCAxOCwgMTksIDIyNiwgMjE2LCAyMjcsIDE3MCwgMTgsIDE5LCAyMjcsIDE2OSwgMTgsIDE5LCAKLSAgICAyMjYsIDIxNiwgMjI3LCAxNjksIDE4LCAxOSwgMjI3LCAxNjgsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTY4LCAxOCwgMTksIAotICAgIDIyMiwgMTA1LCAxOCwgMTksIDIyMiwgMTA0LCAxOCwgMTksIDIyMiwgMTAzLCAxOCwgMTksIDIyMiwgMTAyLCAxOCwgMTksIAotICAgIDIyMiwgMTAxLCAxOCwgMTksIDIyMiwgMTA5LCAxOCwgMTksIDIyNiwgMjE2LCAyMjYsIDEwNSwgMTgsIDE5LCAyMjYsIDIxNiwgCi0gICAgMjE3LCAxNTIsIDE4LCAxOSwgMjI2LCAyMTYsIDIzNSwgMjMsIDE4LCAxOSwgMjI2LCAyMTYsIDI1MSwgNjYsIDE4LCAxOSwgCi0gICAgMjI2LCAyMTYsIDE5MywgMTgsIDE5LCAyMjYsIDIxNiwgMjMwLCAyNSwgMTgsIDE5LCAyMjYsIDIxNiwgMjIyLCA5MSwgMTgsIAotICAgIDE5LCAyMjYsIDIxNiwgMjIwLCAxMDQsIDE4LCAxOSwgMjQ1LCAyMTksIDIxMiwgOTgsIDE4LCAxOSwgMjEyLCA3LCAyMTIsIAotICAgIDk4LCAxOCwgMTksIDQwLCA0LCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgMjIzLCAxNTcsIDI0NywgMTIwLCAxOCwgMTksIDIyMywgCi0gICAgMjIzLCAyMjIsIDEwNiwgMTgsIDE5LCAxNTksIDIzMiwgMTI3LCAxOCwgMTksIDE1OSwgMjMzLCAxMzQsIDE4LCAxOSwgMjE2LCAKLSAgICAxMjYsIDE4LCAxOSwgMjE2LCAxMjgsIDE4LCAxOSwgMjE1LCAxMzYsIDE4LCAxOSwgMjE1LCAxMzgsIDE4LCAxOSwgMjE1LCAKLSAgICAxNDMsIDE4LCAxOSwgMjE2LCA0OSwgMTgsIDE5LCAyMTYsIDUxLCAxOCwgMTksIDIyMSwgMjA5LCAyMTksIDIwNiwgMTgsIAotICAgIDE5LCAyMjEsIDIwOSwgMjIwLCAxLCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDUzLCAxOCwgMTksIDcyLCAyNDIsIDczLCAxOCwgCi0gICAgMTksIDcyLCAyNDgsIDUyLCAyNDMsIDU1LCAxOCwgMTksIDcyLCAyNDMsIDEzMiwgMTgsIDE5LCA3MiwgMjQyLCA3OCwgMTgsIAotICAgIDE5LCAyMjEsIDIwOSwgMjM1LCAzMywgMTgsIDE5LCA3MiwgMjM1LCAzMSwgMTgsIDE5LCAyNTIsIDY4LCAyNDgsIDUyLCAKLSAgICAxNTYsIDE4LCAxOSwgMjUyLCA2OCwgMjQ4LCA1MiwgMTUzLCAxOCwgMTksIDcyLCAyNDgsIDQ3LCAyMjIsIDkxLCAyMzIsIAotICAgIDIyMywgMjEzLCAxMjIsIDIzMywgMTAsIDIzMiwgMjIzLCAxLCAxNzYsIDIzMiwgMjIzLCAxLCAyMzQsIDEzMiwgMjMyLCAKLSAgICAyMjMsIDEsIDI0MywgMTM1LCAyMzIsIDIyMywgMSwgMjQyLCAyNDksIDIzMiwgMjIzLCAxLCAyMjksIDc3LCAyMzIsIDIyMywgCi0gICAgMSwgMjUxLCAzMywgMjMyLCAyMjMsIDEsIDI1MCwgMTU3LCAyMzIsIDIyMywgMSwgMjM1LCAxNDEsIDIzMiwgMjIzLCAxLCAKLSAgICAyMzUsIDExNCwgMjMyLCAyMjMsIDEsIDIxMSwgNzEsIDIzMiwgMjIzLCAxLCAyMTcsIDEwNSwgMjMyLCAyMjMsIDEsIDIxNiwgCi0gICAgMjA4LCAyMzIsIDIyMywgMSwgMjQ4LCAyMjEsIDIzMiwgMjIzLCAxLCAyNDgsIDI1LCAyMzIsIDIyMywgMSwgMTk3LCAyMzIsIAotICAgIDIyMywgMSwgMTkwLCAyMzIsIDIyMywgMSwgMjI1LCAxNDcsIDIzMiwgMjIzLCAxLCAyNTIsIDE5MSwgMjMyLCAyMjMsIDEsIAotICAgIDI1MiwgMTgsIDIzMiwgMjIzLCAxLCAxODQsIDIzMiwgMjIzLCAxLCAxOTEsIDIzMiwgMjIzLCAxLCAyMDUsIDIzMiwgMjIzLCAKLSAgICAxLCAyMzMsIDEzNSwgMjMyLCAyMjMsIDEsIDIxMiwgNjUsIDIzMiwgMjIzLCAxLCAyMjAsIDEwMiwgMjMyLCAyMjMsIDEsIAotICAgIDIxOCwgMjIzLCAyMzIsIDIyMywgMSwgMjA2LCAyMzIsIDIyMywgMSwgMTYyLCAyMzIsIDIyMywgMjUsIDUsIDYxLCAyMzIsIAotICAgIDIyMywgMjUsIDUsIDczLCAyMzIsIDIyMywgMjUsIDUsIDcwLCAyMzIsIDIyMywgMjUsIDUsIDI0NSwgMjA5LCAyMzIsIDIyMywgCi0gICAgMjUsIDUsIDI1NCwgMjAxLCAyMzIsIDIyMywgMjUsIDUsIDIyNiwgMTgzLCAyMzIsIDIyMywgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAyMzIsIDIyMywgMjUsIDUsIDc1LCAyMzIsIDIyMywgMjUsIDUsIDc2LCAyMzIsIDIyMywgMjE4LCA3MywgMSwgMTkxLCAyMzIsIAotICAgIDIyMywgMjE4LCA3MywgMSwgMjA1LCAyMzIsIDIyMywgMjE4LCA3MywgMSwgMjEyLCA2NSwgMjMyLCAyMjMsIDQsIDEsIDE3NiwgCi0gICAgMjMyLCAyMjMsIDQsIDEsIDIyOSwgNzcsIDIzMiwgMjIzLCA0LCAxLCAyNTQsIDc1LCAyMzIsIDIyMywgNCwgMSwgMjE3LCAKLSAgICAxMDUsIDIzMiwgMjIzLCA0LCAxLCAxOTcsIDIzMiwgMjIzLCA0LCAxLCAxOTAsIDIzMiwgMjIzLCA0LCAxLCAxODQsIDIzMiwgCi0gICAgMjIzLCA0LCAxLCAyMDUsIDIzMiwgMjIzLCA0LCAxLCAyMzMsIDEzNSwgMjMyLCAyMjMsIDUsIDIzMCwgODksIDIzMiwgMjIzLCAKLSAgICA1LCAyMzQsIDE3MSwgMjMyLCAyMjMsIDUsIDIyMiwgMzIsIDIzMiwgMjIzLCA1LCAyMzIsIDEyNywgMjMyLCAyMjMsIDI0NSwgCi0gICAgMzEsIDc4LCAyMzIsIDIyMywgMjI0LCAxMywgNzgsIDIzMiwgMjIzLCAyMSwgMjEwLCA4NiwgMjMyLCAyMjMsIDIxLCAxMTAsIAotICAgIDIzMiwgMjIzLCAyMSwgMTA1LCAyMzIsIDIyMywgMjEsIDE1OCwgMjMyLCAyMjMsIDIxLCAxNjEsIDIzMiwgMjIzLCAyMSwgCi0gICAgMTg5LCAyMzIsIDIyMywgMjEsIDE5NCwgMjMyLCAyMjMsIDIxLCAxOTgsIDIzMiwgMjIzLCAyMSwgMTk1LCAyMzIsIDIyMywgCi0gICAgMjEsIDIwMCwgMzksIDIzMywgNTksIDEsIDE3NiwgMzksIDIzMywgNTksIDEsIDIxMSwgMTY1LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMjI5LCA3NywgMzksIDIzMywgNTksIDEsIDIxNSwgMTgzLCAzOSwgMjMzLCA1OSwgMSwgMjA2LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMTkxLCAzOSwgMjMzLCA1OSwgMSwgMjE3LCAxMDUsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDIwOCwgMzksIDIzMywgNTksIDEsIAotICAgIDIzMywgMTM1LCAzOSwgMjMzLCA1OSwgMSwgMTkwLCAzOSwgMjMzLCA1OSwgMSwgMjI1LCAxNDcsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxODQsIDM5LCAyMzMsIDU5LCAxLCAyNDQsIDE5NiwgMzksIDIzMywgNTksIDEsIDIxNCwgMjcsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxNjIsIDM5LCAyMzMsIDU5LCAxLCAyMjQsIDg4LCAzOSwgMjMzLCA1OSwgMSwgMjM0LCAxMzIsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAyMTUsIDE3NSwgMzksIDIzMywgNTksIDEsIDE5NywgMzksIDIzMywgNTksIDEsIDYxLCAzOSwgMjMzLCA1OSwgMSwgNzMsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyNDUsIDIwOSwgMzksIDIzMywgNTksIDEsIDI0NSwgMTk3LCAzOSwgMjMzLCA1OSwgMSwgNzAsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyMjYsIDE4MywgMzksIDIzMywgNTksIDEsIDc2LCAzOSwgMjMzLCA1OSwgMSwgMjE0LCAyMTQsIAotICAgIDM5LCAyMzMsIDU5LCAxLCA3NSwgMzksIDIzMywgNTksIDEsIDI1MywgMTkwLCAzOSwgMjMzLCA1OSwgMSwgMjU0LCAyMDEsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI4LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNywgMzksIDIzMywgNTksIDEsIDIxNiwgCi0gICAgMjYsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI1LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNCwgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjUsIDIyNCwgODgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjQsIDg4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTc2LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjksIDc3LCAxNjYsIDM5LCAKLSAgICAxNzMsIDEsIDEyMSwgMTc2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAyMjksIDc3LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE1LCAxODMsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMDYsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTUsIDE4MywgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjEsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNywgMTA1LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjE2LCAyMDgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTcsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTIxLCAyMTcsIDEwNSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNiwgMjA4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTk3LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI1LCAxNDcsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjUsIDE0NywgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI0NCwgMTk2LCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyNSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTM1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjQ0LCAxOTYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxMzUsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNjIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNDgsIDIyMSwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDI1MiwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ4LCAKLSAgICAyMjEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNTIsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTg0LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxMzgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE4NCwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjEsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE4LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAotICAgIDIxOCwgODIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1LCAyMTksIDIzOSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCA3MywgCi0gICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM2LCAzMywgMTY2LCAzOSwgMTczLCAyNSwgNSwgNzAsIDE2NiwgMzksIDE3MywgMjUsIAotICAgIDUsIDIxNCwgMTE4LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3NSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU0LCAyNDMsIDE2NiwgCi0gICAgMzksIDE3MywgMjUsIDUsIDc2LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjcsIDAsIDE2NiwgMzksIDE3MywgMjUsIDUsIAotICAgIDIxNCwgMjE0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTMsIDE2NywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCAyOCwgCi0gICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTEsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNiwgMTA5LCAxNjYsIDM5LCAKLSAgICAxNzMsIDI1LCA1LCAyMjYsIDI1MywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAyMTAsIDE2NiwgMzksIDE3MywgMjUsIDUsIAotICAgIDIzNSwgMTUyLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMTQsIDEwNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjI5LCA3OSwgCi0gICAgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjMwLCAyNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMTkzLCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDQwLCAyMzUsIDIzLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNDksIDYwLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNTMsIDE1OCwgCi0gICAgMTY2LCAzOSwgMTczLCAxMzgsIDIzMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNTcsIDE2NiwgMzksIDE3MywgCi0gICAgMjEsIDIxMCwgODYsIDE2NiwgMzksIDE3MywgMjEsIDExMCwgMTY2LCAzOSwgMTczLCAyMSwgMTA1LCAxNjYsIDM5LCAxNzMsIAotICAgIDIxLCAxNTgsIDE2NiwgMzksIDE3MywgMjEsIDE2MSwgMTY2LCAzOSwgMTczLCAyMSwgMTg5LCAxNjYsIDM5LCAxNzMsIDIxLCAKLSAgICAxOTQsIDE2NiwgMzksIDE3MywgMjEsIDE5OCwgMTY2LCAzOSwgMTczLCAyMSwgMTk1LCAxNjYsIDM5LCAxNzMsIDIxLCAyMDAsIAotICAgIDE2NiwgMzksIDE3MywgODksIDIxLCAxMTAsIDE2NiwgMzksIDE3MywgNSwgMjMzLCAxMjAsIDE2NiwgMzksIDE3MywgNSwgCi0gICAgMjMzLCAxMTksIDY5LCAxNiwgMjI1LCAyMzYsIDY5LCAxNiwgMjMwLCA3MiwgMjM0LCAyNSwgNjksIDE2LCAyMjUsIDcyLCAKLSAgICAyMzQsIDI1LCA2OSwgMTYsIDI1MiwgNTAsIDIzNCwgMjUsIDY5LCAxNiwgMjUxLCAxMDQsIDIzNCwgMjUsIDY5LCAxNiwgCi0gICAgMjI0LCAyMTYsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMTAsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMDgsIDIzNCwgMjUsIAotICAgIDY5LCAxNiwgMjI0LCAyMTQsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMTIsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNzMsIAotICAgIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjksIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjgsIDIzNCwgMjUsIDY5LCAxNiwgCi0gICAgMjQ4LCAxNzEsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNzAsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjcsIDIzNCwgMjUsIAotICAgIDY5LCAxNiwgMjE1LCA4NywgNjksIDE2LCAyMzAsIDcyLCAyMjIsIDIwNSwgNjksIDE2LCAyMjUsIDcyLCAyMjIsIDIwNSwgCi0gICAgNjksIDE2LCAyNTIsIDUwLCAyMjIsIDIwNSwgNjksIDE2LCAyNTEsIDEwNCwgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMTYsIAotICAgIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjEwLCAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIwOCwgMjIyLCAyMDUsIDY5LCAxNiwgCi0gICAgMjI0LCAyMTQsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjEyLCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE3MywgMjIyLCAKLSAgICAyMDUsIDY5LCAxNiwgMjQ4LCAxNjksIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTY4LCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIAotICAgIDE3MSwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNzAsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTY3LCAyMjIsIDIwNSwgCi0gICAgMjUxLCAxMjEsIDEsIDE3NiwgMjUxLCAxMjEsIDEsIDI0MywgMTM1LCAyNTEsIDEyMSwgMSwgMjI5LCA3NywgMjUxLCAxMjEsIAotICAgIDEsIDIyOSwgMjIsIDI1MSwgMTIxLCAxLCAxOTAsIDI1MSwgMTIxLCAxLCAyNTIsIDE5MSwgMjUxLCAxMjEsIDEsIDE4NCwgCi0gICAgMjUxLCAxMjEsIDEsIDIzMCwgMTA1LCAyNTEsIDEyMSwgMSwgMjE3LCAxMDUsIDI1MSwgMTIxLCAxLCAyNDgsIDIyMSwgMjUxLCAKLSAgICAxMjEsIDEsIDE5NywgMjUxLCAxMjEsIDEsIDIyOCwgMzYsIDI1MSwgMTIxLCAxLCAyNTEsIDMzLCAyNTEsIDEyMSwgMSwgCi0gICAgMjM1LCAxNDEsIDI1MSwgMTIxLCAxLCAyMjcsIDE2NSwgMjUxLCAxMjEsIDEsIDIyNywgMTU4LCAyNTEsIDEyMSwgMSwgMTkxLCAKLSAgICAyNTEsIDEyMSwgMSwgMjA1LCAyNTEsIDEyMSwgMSwgMjMzLCAxMzUsIDI1MSwgMTIxLCAxLCAyMTQsIDI3LCAyNTEsIDEyMSwgCi0gICAgMSwgMjA2LCAyNTEsIDEyMSwgMSwgNjEsIDI1MSwgMTIxLCAxLCAxNjIsIDI1MSwgMTIxLCAyNSwgNSwgNzMsIDI1MSwgMTIxLCAKLSAgICAyNSwgNSwgNzAsIDI1MSwgMTIxLCAyNSwgNSwgNzUsIDI1MSwgMTIxLCAyNSwgNSwgNzYsIDI1MSwgMTIxLCAyNSwgNSwgCi0gICAgMjU0LCAyNDMsIDI1MSwgMTIxLCAyMjYsIDYwLCAyNTEsIDEyMSwgMjQ1LCAxNDMsIDY0LCAyMjEsIDE3MiwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDE3NiwgMzksIDg5LCAxLCAxMjUsIDIzNCwgMTMyLCAzOSwgODksIDEsIDEyNSwgMjMzLCAxNzEsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAxNzYsIDM5LCA4OSwgMSwgMTIxLCAyMzMsIDE3MSwgMzksIDg5LCAxLCAxMjEsIDIzNCwgMTMyLCAzOSwgODksIDEsIAotICAgIDIyOSwgNzcsIDM5LCA4OSwgMSwgMTI1LCAyNTEsIDMzLCAzOSwgODksIDEsIDEyNSwgMjUwLCAxNTcsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAyNTEsIDMzLCAzOSwgODksIDEsIDEyMSwgMjA2LCAzOSwgODksIDEsIDEyMSwgMjUwLCAxNTcsIDM5LCA4OSwgMSwgCi0gICAgMjI3LCAxNjUsIDM5LCA4OSwgMSwgMjIzLCAxNDAsIDM5LCA4OSwgMSwgMTI1LCAyMjMsIDEzOCwgMzksIDg5LCAxLCAyNDgsIAotICAgIDIyMSwgMzksIDg5LCAxLCAxMjEsIDIyMywgMTM4LCAzOSwgODksIDEsIDIyMywgMTQ5LCAzOSwgODksIDEsIDEyNSwgMjE3LCAKLSAgICAxMDUsIDM5LCA4OSwgMSwgMTI1LCAyMTYsIDIwOCwgMzksIDg5LCAxLCAxMjEsIDIxNywgMTA1LCAzOSwgODksIDEsIDEyMSwgCi0gICAgMjE2LCAyMDgsIDM5LCA4OSwgMSwgMTk3LCAzOSwgODksIDEsIDI1MiwgMTkxLCAzOSwgODksIDEsIDEyNSwgMTkwLCAzOSwgCi0gICAgODksIDEsIDEyNSwgMjI1LCAxNDcsIDM5LCA4OSwgMSwgMTI1LCAyNDQsIDE5NiwgMzksIDg5LCAxLCAxMjEsIDE5MCwgMzksIAotICAgIDg5LCAxLCAxMjEsIDI0NCwgMTk2LCAzOSwgODksIDEsIDEyMSwgMjI1LCAxNDcsIDM5LCA4OSwgMSwgMTg0LCAzOSwgODksIAotICAgIDEsIDEyMSwgMTkxLCAzOSwgODksIDEsIDEyNSwgMTkxLCAzOSwgODksIDEsIDIwNSwgMzksIDg5LCAxLCAyMjIsIDEzNywgCi0gICAgMzksIDg5LCAxLCAyMzMsIDEzNSwgMzksIDg5LCAxLCAyMzIsIDkzLCAzOSwgODksIDEsIDIxMiwgNjUsIDM5LCA4OSwgMSwgCi0gICAgMTI1LCAyMjAsIDEwMiwgMzksIDg5LCAxLCAxMjUsIDIxOCwgMjIzLCAzOSwgODksIDEsIDEyNSwgMjA2LCAzOSwgODksIDEsIAotICAgIDEyNSwgMTYyLCAzOSwgODksIDEsIDIzMiwgMTg0LCAzOSwgODksIDEsIDYxLCAzOSwgODksIDEsIDEyMSwgMTYyLCAzOSwgCi0gICAgODksIDEsIDczLCAzOSwgODksIDEsIDIzNiwgMzMsIDM5LCA4OSwgMSwgNzAsIDM5LCA4OSwgMSwgMjE0LCAxMTgsIDM5LCAKLSAgICA4OSwgMSwgMjQ1LCAyMDksIDM5LCA4OSwgMSwgMjI2LCAxODMsIDM5LCA4OSwgMSwgMjMzLCAxMjAsIDM5LCA4OSwgMSwgCi0gICAgMjQyLCAxMzIsIDIwNiwgMzksIDg5LCAxMTYsIDUsIDE0NywgMjA1LCAzOSwgODksIDExNiwgNSwgMTQ3LCAyMzMsIDEzNSwgCi0gICAgMzksIDg5LCAxMTYsIDUsIDIzMywgMTM2LCAyMTcsIDU4LCAyMzMsIDEwOSwgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjM0LCAKLSAgICAyMzEsIDIzMywgMTA5LCAzOSwgODksIDExNiwgNSwgNDAsIDIyOSwgNzcsIDM5LCA4OSwgMTE2LCA1LCAxMjEsIDE5MCwgMzksIAotICAgIDg5LCAxMTYsIDUsIDEyNSwgMjIzLCAxMzksIDE3NywgMTIxLCAxOTAsIDM5LCA4OSwgMTE2LCA1LCAxODQsIDM5LCA4OSwgCi0gICAgMTE2LCA1LCAyNTIsIDE5MSwgMzksIDg5LCAxMTYsIDUsIDIwNiwgMzksIDg5LCA1LCAyMjIsIDEwLCAzOSwgODksIDI1LCA1LCAKLSAgICA2MSwgMzksIDg5LCAyNSwgNSwgMjMxLCAyMDQsIDIyMSwgMjI2LCAzOSwgODksIDI1LCA1LCAyNTUsIDczLCAzOSwgODksIAotICAgIDI1LCA1LCAyMTcsIDY0LCAyNTUsIDczLCAzOSwgODksIDI1LCA1LCA3MywgMzksIDg5LCAyNSwgNSwgMjM2LCAzMywgMzksIAotICAgIDg5LCAyNSwgNSwgMjE0LCAyMTQsIDM5LCA4OSwgMjUsIDUsIDIxNCwgMTE3LCAzOSwgODksIDI1LCA1LCA3MCwgMzksIDg5LCAKLSAgICAyNSwgNSwgMjE0LCAxMTgsIDM5LCA4OSwgMjUsIDUsIDc2LCAzOSwgODksIDI1LCA1LCAyMjcsIDEsIDUxLCAzOSwgODksIAotICAgIDI1LCA1LCAyMjYsIDEwOSwgMzksIDg5LCAyNSwgNSwgNzUsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjQzLCAzOSwgODksIDI1LCAKLSAgICA1LCAyMjYsIDE4MywgMzksIDg5LCAyNSwgNSwgMjU0LCAyMDEsIDM5LCA4OSwgMjUsIDUsIDg5LCAyNTQsIDIwMSwgMzksIAotICAgIDg5LCAyNSwgNSwgMjI3LCAxLCA0OCwgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjM0LCAyMzAsIDM5LCA4OSwgNSwgMjE2LCAyOSwgCi0gICAgMzksIDg5LCA1LCAyMTYsIDI4LCAzOSwgODksIDUsIDIzNCwgOTcsIDIxNiwgMjcsIDM5LCA4OSwgNSwgMjM0LCA5NywgMjE2LCAKLSAgICAyNiwgMzksIDg5LCA1LCAyMzQsIDk3LCAyMTYsIDI1LCAzOSwgODksIDUsIDIyMywgMTg4LCAyNDIsIDQ1LCAzOSwgODksIDUsIAotICAgIDIzMSwgMjA0LCAyMjEsIDI1MywgMzksIDg5LCA1LCAyMzQsIDk2LCAyMzQsIDIxNSwgMzksIDg5LCAzOCwgMjQ5LCAxMTUsIAotICAgIDI0NywgMTIwLCAzOSwgODksIDI0MSwgNDYsIDIxLCAyMTAsIDg2LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxMTAsIDM5LCA4OSwgCi0gICAgMjQxLCA0NiwgMjEsIDEwNSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTU4LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxNjEsIDM5LCAKLSAgICA4OSwgMjQxLCA0NiwgMjEsIDE4OSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTk0LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxOTgsIAotICAgIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE5NSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMjAwLCAzOSwgODksIDg5LCAyMSwgMjEwLCAKLSAgICA4NiwgMzksIDg5LCA4OSwgMjEsIDExMCwgMzksIDg5LCA4OSwgMjEsIDEwNSwgMzksIDg5LCA4OSwgMjEsIDE1OCwgMzksIAotICAgIDg5LCA4OSwgMjEsIDE2MSwgMzksIDg5LCA4OSwgMjEsIDE4OSwgMzksIDg5LCA4OSwgMjEsIDE5NCwgMzksIDg5LCA4OSwgCi0gICAgMjEsIDE5OCwgMzksIDg5LCA4OSwgMjEsIDE5NSwgMzksIDg5LCA4OSwgMjEsIDIwMCwgMzksIDg5LCA1LCAyMTEsIDI0OSwgCi0gICAgMzksIDg5LCA1LCAyMTEsIDI0OCwgMzksIDg5LCA1LCAyMjEsIDIxNSwgMzksIDg5LCA1LCAyMzQsIDE2MCwgMzksIDg5LCA1LCAKLSAgICAyNDAsIDIzMiwgMzksIDg5LCA1LCAyNDcsIDEzNCwgMzksIDg5LCA1LCAyMjMsIDQ5LCAyMjIsIDE4NywgMjIzLCAxNDksIAotICAgIDM5LCA4OSwgNSwgMjMxLCAyMDQsIDIxMSwgNzIsIDM5LCA4OSwgNSwgMjM1LCA2LCAzOSwgODksIDUsIDIzNSwgNSwgMzksIAotICAgIDg5LCA1LCAyMjEsIDIyMiwgMzksIDg5LCA1LCAyMjEsIDIyMSwgMzksIDg5LCA1LCAyNDIsIDksIDM5LCA4OSwgNSwgMjUxLCAKLSAgICAzMCwgMTAyLCA1LCAyMTQsIDIwMCwgMjIzLCAzMCwgMTAyLCA1LCAyMTQsIDIwMCwgMjUxLCAxLCAxMDIsIDUsIDI1MCwgCi0gICAgMTg2LCAxMDIsIDUsIDIxOCwgMTUsIDEwMiwgNSwgMjUxLCAyMzMsIDEwMiwgMSwgMjU0LCAxODQsIDEwMiwgMSwgMjU0LCAKLSAgICAxODUsIDIxNywgMTMsIDEwMiwgMSwgMjM2LCAyOSwgMTAyLCAxLCAyMzYsIDMwLCAyMTcsIDEzLCAxMDIsIDEsIDIxNCwgCi0gICAgMjAzLCAxMDIsIDEsIDIxNCwgMjA0LCAyMTcsIDEzLCAxMDIsIDEsIDIyMywgMTg4LCAyMjMsIDc5LCAxMDIsIDEsIDIyMywgCi0gICAgMTg4LCAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDEsIDIzMywgMTM2LCAyMzMsIDI0LCAxMDIsIDEsIDIzMywgMTM2LCAyMzMsIAotICAgIDI1LCAyMTcsIDEzLCAxMDIsIDEsIDI0NSwgMTc5LCAxMDIsIDEsIDI1NCwgMTk5LCAxMDIsIDEsIDIyNiwgMjEyLCAxMDIsIAotICAgIDEsIDIyNiwgMjEzLCAyMTcsIDEzLCAxMDIsIDEsIDE3NiwgMTAyLCAxLCAyMzUsIDEzLCAyMzEsIDIwNywgMTAyLCAxLCAKLSAgICAyNDMsIDEzNSwgMTAyLCAxLCAyNDMsIDEzNiwgMjQyLCAxNjEsIDEwMiwgMSwgMjI5LCA3NywgMTAyLCAxLCAyNTEsIDMzLCAKLSAgICAxMDIsIDEsIDI1MSwgMzQsIDIzMywgMTIzLCAxMDIsIDEsIDIzNSwgMTQxLCAxMDIsIDEsIDIzNSwgMTQyLCAyMzUsIDExOCwgCi0gICAgMTAyLCAxLCAyMjcsIDE2NSwgMTAyLCAxLCAyMTcsIDEwNiwgMjMzLCA3NiwgMTAyLCAxLCAyMTcsIDEwNiwgMjMwLCA2NywgCi0gICAgMjMxLCAyMDcsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMCwgNjcsIDI1NCwgMTQ1LCAxMDIsIDEsIDI0OCwgMjIyLCAyMzAsIDY3LCAKLSAgICAyMzEsIDIwNywgMTAyLCAxLCAyMjksIDIyOSwgMjIzLCAxNTIsIDEwMiwgMSwgMjE3LCAxMDUsIDEwMiwgMSwgMjE3LCAxMDYsIAotICAgIDIxNywgMzUsIDEwMiwgMSwgMjQ4LCAyMjEsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMSwgMjI1LCAxMDIsIDEsIDE5NywgMTAyLCAKLSAgICAxLCAxOTAsIDEwMiwgMSwgMjI2LCA5MCwgMjM0LCAyMjYsIDEwMiwgMSwgMjUyLCAxOTEsIDEwMiwgMSwgMjUyLCAxOTIsIAotICAgIDIzNCwgMTcyLCAxMDIsIDEsIDE4NCwgMTAyLCAxLCAxOTEsIDEwMiwgMSwgMjA1LCAxMDIsIDEsIDIzMywgMTM1LCAxMDIsIAotICAgIDEsIDIxMiwgNjUsIDEwMiwgMSwgMjIyLCAzNCwgMjIyLCAyMCwgMTAyLCAxLCAyMjIsIDM0LCAyMjEsIDIzMywgMTAyLCAxLCAKLSAgICAyMDYsIDEwMiwgMSwgMTYyLCAxMDIsIDUsIDIyMywgNzAsIDEwMiwgMjUsIDUsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIxNCwgCi0gICAgMTk5LCAxMDIsIDI1LCA1LCAyMTQsIDIwMCwgMjIxLCAyMjksIDEwMiwgMjUsIDUsIDIxOCwgNDcsIDEwMiwgMjUsIDUsIAotICAgIDIxOCwgNDgsIDIzNiwgMjEsIDEwMiwgMjUsIDUsIDIyMywgMTg4LCAyMjMsIDc5LCAxMDIsIDI1LCA1LCAyMjMsIDE4OCwgCi0gICAgMjIzLCA4MCwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjMzLCAxMzYsIDIzMywgMjQsIDEwMiwgMjUsIDUsIDIzMywgMTM2LCAKLSAgICAyMzMsIDI1LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTcsIDY1LCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAyMjMsIDc5LCAxMDIsIAotICAgIDI1LCA1LCAyMTcsIDY2LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDI1LCAKLSAgICA1LCAyMjUsIDE4NCwgMTAyLCAyNSwgNSwgMjI1LCAxODUsIDIxNywgMTMsIDEwMiwgMjU0LCAyNTAsIDI1NCwgMjQ5LCAxMDIsIAotICAgIDEsIDIzNCwgMjUxLCAyMjEsIDIyOCwgMTAyLCAxLCAyMzQsIDEwMiwgMjIxLCAyMjgsIDEwMiwgMSwgMjE1LCAzNCwgMjIxLCAKLSAgICAyMjgsIDEwMiwgMSwgMjQ1LCAyMDMsIDIyMSwgMjI4LCAxMDIsIDEsIDIxNCwgMCwgMjIxLCAyMjgsIDEwMiwgMSwgMjEwLCAKLSAgICAxMDcsIDIyMSwgMjI4LCAxMDIsIDEsIDI1MywgMjA5LCAyMjEsIDIyOCwgMTAyLCAyMSwgMjEwLCA4NiwgMTAyLCAyMSwgCi0gICAgMTEwLCAxMDIsIDIxLCAxMDUsIDEwMiwgMjEsIDE1OCwgMTAyLCAyMSwgMTYxLCAxMDIsIDIxLCAxODksIDEwMiwgMjEsIAotICAgIDE5NCwgMTAyLCAyMSwgMTk4LCAxMDIsIDIxLCAxOTUsIDEwMiwgMjEsIDIwMCwgMTAyLCAyMjYsIDI5LCAxMDIsIDIyNiwgCi0gICAgNTUsIDEwMiwgMjExLCAyMzgsIDEwMiwgMjUwLCAyMzYsIDIyNiwgNDgsIDEwMiwgMjUwLCAyMzYsIDIxOSwgMTcyLCAxMDIsIAotICAgIDI1MCwgMjM2LCAyMjYsIDIsIDEwMiwgMjI2LCA1NCwgMTAyLCAyOCwgMTYsIDI0NywgMTI2LCAxMDIsIDI4LCAxNiwgMjQ4LCAKLSAgICA1MSwgMTAyLCAyOCwgMTYsIDI0NiwgNjQsIDEwMiwgMjgsIDE2LCAyNDgsIDE3NiwgMTAyLCAyOCwgMTYsIDI0OCwgMTc3LCAKLSAgICAyMTgsIDE1LCAxMDIsIDI4LCAxNiwgMjQ3LCAyMDUsIDEwMiwgMjgsIDE2LCAyNDgsIDIxNCwgMTAyLCAyOCwgMTYsIDI0OCwgCi0gICAgMzMsIDEwMiwgMjgsIDE2LCAyNDgsIDE5OCwgMTAyLCAyOCwgMTYsIDI0OCwgMTc3LCAyNDMsIDU3LCAxMDIsIDI4LCAxNiwgCi0gICAgMzgsIDIxNywgOSwgMTAyLCAyOCwgMTYsIDM4LCAyNDUsIDE0MSwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE2NywgMTAyLCAKLSAgICAyOCwgMTYsIDM4LCAyMzQsIDE2OSwgMTAyLCAyOCwgMTYsIDM4LCAyMzUsIDEyMiwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIAotICAgIDE2OCwgMiwgMjM1LCAxMjIsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzAsIDIsIDIzNSwgMTIyLCAxMDIsIDI4LCAxNiwgCi0gICAgMzgsIDI1MiwgMzcsIDEwMiwgMjgsIDE2LCAzOCwgMjQyLCAxNjUsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjA0LCAyNDYsIAotICAgIDc0LCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDIwNCwgMjQ4LCAyMTIsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjUwLCAwLCAKLSAgICAyMTUsIDExMSwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyNTAsIDAsIDIxNywgNzMsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAKLSAgICAyMDQsIDIyNiwgNDMsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAyMDQsIDIyNCwgMTM5LCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgCi0gICAgMjUwLCAwLCAyMjUsIDM4LCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgMjUwLCAwLCAyMjUsIDI2LCAxMDIsIDI4LCAxNiwgMjMzLCAKLSAgICA0NCwgMjA0LCAyMjUsIDYxLCAyMDcsIDUsIDIyNiwgMjYsIDIwNywgNSwgMjI2LCAzOSwgMjA3LCA1LCAyMjYsIDM1LCAyMDcsIAotICAgIDEsIDYxLCAyMDcsIDEsIDczLCAyMDcsIDEsIDcwLCAyMDcsIDEsIDI1NCwgMjQzLCAyMDcsIDEsIDc2LCAyMDcsIDEsIDc1LCAKLSAgICAyMDcsIDEsIDI0NSwgNTUsIDIwNywgMSwgMTc2LCAyMDcsIDEsIDIyNCwgODgsIDIwNywgMSwgMjQzLCAxMzUsIDIwNywgMSwgCi0gICAgMjI5LCA3NywgMjA3LCAxLCAyNTEsIDMzLCAyMDcsIDEsIDIzNSwgMTQxLCAyMDcsIDEsIDIxMCwgMTE2LCAyMDcsIDEsIAotICAgIDIyNywgMTY1LCAyMDcsIDEsIDIxNywgMTA1LCAyMDcsIDEsIDI0OCwgMjIxLCAyMDcsIDEsIDE5NywgMjA3LCAxLCAxOTAsIAotICAgIDIwNywgMSwgMjQ0LCAxOTYsIDIwNywgMSwgMjE0LCAyNywgMjA3LCAxLCAyNTIsIDE5MSwgMjA3LCAxLCAxODQsIDIwNywgMSwgCi0gICAgMTkxLCAyMDcsIDEsIDIwNSwgMjA3LCAxLCAyMzMsIDEzNSwgMjA3LCAxLCAyMTIsIDY1LCAyMDcsIDEsIDIwNiwgMjA3LCAxLCAKLSAgICAyMTEsIDE2NSwgMjA3LCAxLCAxNjIsIDIwNywgMTE2LCA1LCAyMjYsIDUyLCAyMDcsIDExNiwgNSwgMjI2LCAyOCwgMjA3LCAKLSAgICAxMTYsIDUsIDIyNiwgMjUsIDIwNywgMjUsIDUsIDIyNiwgNDIsIDIwNywgMjUsIDUsIDIyNiwgMjQsIDIwNywgMjUsIDUsIAotICAgIDIyNiwgNDYsIDIwNywgMjUsIDUsIDIyNiwgMzQsIDIwNywgMjUsIDUsIDIyNiwgNTMsIDIwNywgMjUsIDUsIDIyNiwgNDQsIAotICAgIDIwNywgNSwgMjI2LCA1NiwgMjA3LCA1LCAyMTMsIDE1MiwgMjA3LCAxMTYsIDUsIDIyNSwgMjQ4LCAxODQsIDIwNywgMTE2LCAKLSAgICA1LCAyMjUsIDI0OCwgMjEyLCA2NSwgMjA3LCAxLCAyMzQsIDEzMiwgMjA3LCAxLCAyMTcsIDIzMSwgMjA3LCAyMSwgMjEwLCAKLSAgICA4NiwgMjA3LCAyMSwgMTEwLCAyMDcsIDIxLCAxMDUsIDIwNywgMjEsIDE1OCwgMjA3LCAyMSwgMTYxLCAyMDcsIDIxLCAxODksIAotICAgIDIwNywgMjEsIDE5NCwgMjA3LCAyMSwgMTk4LCAyMDcsIDIxLCAxOTUsIDIwNywgMjEsIDIwMCwgMjA3LCAyNTMsIDE3NSwgCi0gICAgMjA3LCAxLCAyMjMsIDUyLCAyMDcsIDEsIDIzMywgNywgMjA3LCAxLCAyNTIsIDE4LCAyMDcsIDEsIDQwLCAyMzUsIDIzLCAKLSAgICAyMDcsIDEsIDQwLCAxOTMsIDI1MiwgMTIwLCAxLCA2MSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCA2MSwgMjUyLCAxMjAsIDEsIAotICAgIDE2MiwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAxNjIsIDI1MiwgMTIwLCAxLCAyMzEsIDE4MSwgMTYyLCAyNTIsIDEyMCwgMSwgCi0gICAgMjUyLCAxOTEsIDI1MiwgMTIwLCAxLCAyMzQsIDIxMiwgMjUyLCAxOTEsIDI1MiwgMTIwLCAxLCAxOTAsIDI1MiwgMTIwLCAxLCAKLSAgICAyMTksIDE2NCwgMTkwLCAyNTIsIDEyMCwgMSwgMTk3LCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDE5NywgMjUyLCAxMjAsIDEsIAotICAgIDIxMiwgNjUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjEyLCA2NSwgMjUyLCAxMjAsIDEsIDIyNiwgNjcsIDIxMiwgNjUsIAotICAgIDI1MiwgMTIwLCAxLCAyNDMsIDEzNSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAyNDMsIDEzNSwgMjUyLCAxMjAsIDEsIDIzNSwgCi0gICAgMTQxLCAyNTIsIDEyMCwgMSwgMjQ4LCAyMjEsIDI1MiwgMTIwLCAxLCAyMDUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjA1LCAKLSAgICAyNTIsIDEyMCwgMSwgMTg0LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDE4NCwgMjUyLCAxMjAsIDEsIDIxOSwgMjYsIDIxNywgCi0gICAgMTA1LCAyNTIsIDEyMCwgMSwgMjI4LCA1NSwgMjE3LCAxMDUsIDI1MiwgMTIwLCAxLCAyMDYsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMjA2LCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDIwNiwgMjUyLCAxMjAsIDEsIDE5MSwgMjUyLCAxMjAsIDEsIDIxOSwgCi0gICAgMTY0LCAxOTEsIDI1MiwgMTIwLCAxLCAyMjksIDc3LCAyNTIsIDEyMCwgMSwgMjMzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMjMzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMjcsIDE2NSwgMjUyLCAxMjAsIDEsIDI1MSwgMzMsIDI1MiwgMTIwLCAxLCAKLSAgICAyMjksIDE0OCwgMjUyLCAxMjAsIDEsIDIzMSwgMTI0LCAyNTIsIDEyMCwgMSwgNzMsIDI1MiwgMTIwLCAxLCA3MCwgMjUyLCAKLSAgICAxMjAsIDUsIDIxNiwgMzMsIDI1MiwgMTIwLCAyNSwgNSwgNzUsIDI1MiwgMTIwLCAyNSwgNSwgMjI2LCA2NywgNzUsIDI1MiwgCi0gICAgMTIwLCAyNSwgNSwgMjQ1LCAyMDksIDI1MiwgMTIwLCAyNSwgNSwgNzMsIDI1MiwgMTIwLCAyNSwgNSwgMjM0LCAyMTIsIDczLCAKLSAgICAyNTIsIDEyMCwgMjUsIDUsIDc2LCAyNTIsIDEyMCwgMjUsIDUsIDIzNCwgMjEyLCA3NiwgMjUyLCAxMjAsIDI1LCA1LCA3MCwgCi0gICAgMjUyLCAxMjAsIDI1LCA1LCAxMDQsIDMxLCAyMTksIDE2NCwgMjA2LCAyNTIsIDEyMCwgMTE2LCA1LCAyMjksIDc5LCAyNTIsIAotICAgIDEyMCwgMTE2LCA1LCAyNDIsIDYwLCAyNTIsIDEyMCwgMjI2LCAzNywgMjUyLCAxMjAsIDIyNiwgMzMsIDI1MiwgMTIwLCAxNiwgCi0gICAgMjUxLCAyNDEsIDIyOSwgMjI5LCAyMzEsIDM3LCAyNTIsIDEyMCwgMTYsIDI1MSwgMjQxLCAyMjUsIDY0LCAyNTIsIDEyMCwgCi0gICAgMTYsIDI1MSwgMjQxLCAyMzUsIDQ4LCAyNTIsIDEyMCwgMTYsIDI1MSwgMjQxLCAyMjYsIDM3LCAxOTYsIDEsIDE3NiwgMTk2LCAKLSAgICAxLCAyMzQsIDM5LCAxOTYsIDEsIDIzNCwgMTMyLCAxOTYsIDEsIDI0MywgMTM1LCAxOTYsIDEsIDI0MiwgMTg2LCAxOTYsIDEsIAotICAgIDIyOSwgNzcsIDE5NiwgMSwgMjUxLCAzMywgMTk2LCAxLCAyNTAsIDE1NywgMTk2LCAxLCAyMzUsIDE0MSwgMTk2LCAxLCAKLSAgICAyMjcsIDE2NSwgMTk2LCAxLCAyMTcsIDEwNSwgMTk2LCAxLCAyMTYsIDIwOCwgMTk2LCAxLCAyNDgsIDIyMSwgMTk2LCAxLCAKLSAgICAxOTcsIDE5NiwgMSwgMTkwLCAxOTYsIDEsIDIyNSwgNDIsIDE5NiwgMSwgMjI1LCAxNDcsIDE5NiwgMSwgMjQ0LCAxOTYsIAotICAgIDE5NiwgMSwgMjQ0LCA3NSwgMTk2LCAxLCAyNTIsIDE5MSwgMTk2LCAxLCAyNTEsIDIyMiwgMTk2LCAxLCAxODQsIDE5NiwgMSwgCi0gICAgMjMwLCAxNjgsIDE5NiwgMSwgMjE1LCAxODMsIDE5NiwgMSwgMjE1LCAxNzUsIDE5NiwgMSwgMjQ2LCAzOCwgMTk2LCAxLCAKLSAgICAxOTEsIDE5NiwgMSwgMjA1LCAxOTYsIDEsIDIzMywgMTM1LCAxOTYsIDEsIDE2MiwgMTk2LCAxLCAyNDEsIDE1MywgMTk2LCAKLSAgICAxLCAyMTQsIDI3LCAxOTYsIDEsIDIwNiwgMTk2LCAxLCAyMjAsIDEwMiwgMTk2LCAxLCAyMTIsIDY1LCAxOTYsIDEsIDYxLCAKLSAgICAxOTYsIDIxOCwgNzMsIDEsIDE5MSwgMTk2LCAyMTgsIDczLCAxLCAyMDUsIDE5NiwgMjUsIDUsIDI1NSwgNzMsIDE5NiwgMjUsIAotICAgIDUsIDczLCAxOTYsIDI1LCA1LCA3NiwgMTk2LCAyNSwgNSwgMjI2LCAxODMsIDE5NiwgMjUsIDUsIDcwLCAxOTYsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMTk2LCAyNSwgNSwgNzUsIDE5NiwgMTE2LCA1LCAyMzUsIDIzLCAxOTYsIDExNiwgNSwgMTkzLCAxOTYsIAotICAgIDExNiwgNSwgMTU2LCAxOTYsIDExNiwgNSwgMjMwLCAyNSwgMTk2LCAxMTYsIDUsIDIyNiwgMTA1LCAxOTYsIDExNiwgNSwgCi0gICAgMTUzLCAxOTYsIDExNiwgNSwgMjE3LCAxNTIsIDE5NiwgMTE2LCA1LCAyMjcsIDE0MiwgMTk2LCAxMTYsIDUsIDIzNCwgMjMwLCAKLSAgICAxOTYsIDUsIDIyMywgMTUwLCAxOTYsIDUsIDIyNywgMjA1LCAxOTYsIDIyNCwgMTQxLCAyMTcsIDEwMywgMTk2LCAyMjQsIAotICAgIDE0MSwgMjI3LCAxNTIsIDIxNiwgMTIwLCAyMTcsIDEwMywgMTk2LCAyMjQsIDE0MSwgMjUwLCAxNjQsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDIxNSwgMTcwLCAyNTAsIDE2NCwgMTk2LCAyMjQsIDE0MSwgMjE1LCAxNjksIDE5NiwgMjEsIDIxMCwgODYsIDE5NiwgCi0gICAgMjEsIDExMCwgMTk2LCAyMSwgMTA1LCAxOTYsIDIxLCAxNTgsIDE5NiwgMjEsIDE2MSwgMTk2LCAyMSwgMTg5LCAxOTYsIDIxLCAKLSAgICAxOTQsIDE5NiwgMjEsIDE5OCwgMTk2LCAyMSwgMTk1LCAxOTYsIDIxLCAyMDAsIDE5NiwgMSwgMjE1LCAxNTYsIDE5NiwgMSwgCi0gICAgMjE1LCAxNDQsIDE5NiwgMSwgMjQ4LCAxMzUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDIxMCwgODYsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMjEsIDExMCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTA1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAKLSAgICAxNTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE2MSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTg5LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDIxLCAxOTQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE5OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgCi0gICAgMTk1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAyMDAsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMzLCAxMzUsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMSwgMjUzLCAyMDYsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU0LCAyMTYsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMSwgMjU0LCAxMTUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU0LCAxNzgsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjMzLCAxMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAzNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAKLSAgICAyNTUsIDM2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NSwgMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAyOSwgCi0gICAgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzIsIDI0MSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzUsIDE3MSwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAxLCAyMzYsIDM0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzNSwgMTkwLCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDIzNSwgMTc5LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgOTgsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjE0LCAyMjEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjE0LCAyMTksIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgCi0gICAgMjE0LCAxNjgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjE0LCAxMTEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMzLCAKLSAgICA1OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDEwOCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDIxMiwgCi0gICAgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDE1MCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDg2LCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgMTU2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIyNiwgMTM3LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDIyNiwgMjUyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIyNiwgMTI1LCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDEsIDIyNiwgMjIyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIzMCwgMTAzLCAyMTUsIDEyMSwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAyNDMsIDEzMCwgMjE1LCAxMjIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjMwLCAxMDEsIDIxNSwgMTIyLCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDIyMywgOTIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI1LCAxNDUsIDIyNiwgMjEwLCAyNTAsIDEwMywgCi0gICAgMjU0LCAyMDgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI0LCAxNDEsIDIzMCwgOTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI0LCAKLSAgICAxNDEsIDUyLCAyMzAsIDk4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjE4LCA4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIAotICAgIDI0MSwgMjI2LCAzOCwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIyNCwgMTI5LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgCi0gICAgMjUxLCAxOSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIzMywgOCwgMjIxLCAyMjUsIDIwNywgMjI0LCAxNDEsIDI1MSwgCi0gICAgMjQxLCAyMzUsIDEzLCAyMjEsIDIyNSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDI0OCwgMjIyLCAyMjEsIDIyNSwgMjA3LCAKLSAgICAyMjQsIDE0MSwgMjUxLCAyNDEsIDI1MiwgMTkyLCAyMjEsIDIyNSwgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMTAsIDIxMywgCi0gICAgMjUyLCAxMzgsIDIyMCwgNzcsIDIxMywgMjUyLCAxMzgsIDIyNCwgMTk4LCAyMTMsIDI1MiwgNSwgMjI4LCAyMDksIDIxMywgCi0gICAgMjUyLCA1LCAyMTEsIDgwLCAyMzAsIDIyMiwgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyNTQsIDIxMywgMjM1LCAKLSAgICAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgCi0gICAgMjExLCA4MCwgMjM0LCAxOTgsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDI1MSwgMiwgNTEsIDIxMywgMjUyLCAKLSAgICAxMzgsIDIxMSwgODAsIDIzNCwgMTk4LCAyMzUsIDI0MywgMjE4LCAxLCAyMjEsIDE5NywgMjEzLCAyNTIsIDEzOCwgNTIsIAotICAgIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjE1LCAyMTEsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjM0LCAxOTgsIDI1NCwgCi0gICAgNzcsIDIxMywgMjUyLCAxMzgsIDU5LCA1MSwgMjEzLCAyNTIsIDEzOCwgMTEzLCAxNzAsIDUxLCAyMTMsIDI1MiwgMTM4LCAKLSAgICAxMzQsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIDIyMiwgMjQwLCAyMzQsIDIwOSwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAKLSAgICAyNTIsIDEzOCwgMjUzLCAyMDQsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjE4LCAwLCAyMTMsIAotICAgIDI1MiwgNSwgMjEzLCAxNDgsIDIxNCwgMjE2LCAyMTMsIDI1MiwgNSwgMjIzLCA0OSwgMjEzLCAxNDgsIDIxNCwgMjE2LCAKLSAgICAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgNzcsIDIxMywgMjUyLCA1LCAyMjMsIDQ5LCAyMTMsIDE0OCwgMjU0LCA3NywgCi0gICAgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTQsIDIxNywgMiwgMjE3LCA3NywgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyNTQsIAotICAgIDc4LCAyLCAyMTcsIDc3LCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjU0LCA5MSwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDI1MiwgCi0gICAgMTY2LCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjE0LCAyMCwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDIxNCwgMjEsIDIsIAotICAgIDIxNywgNzcsIDIxMywgMjUyLCA1LCAyMTYsIDY4LCAyMTMsIDI1MiwgNSwgMjQxLCAxOTEsIDE5OSwgMjU0LCA3NSwgMjEzLCAKLSAgICAyNTIsIDUsIDE5OSwgMjU0LCA3NSwgMjEzLCAyNTIsIDUsIDIyMiwgMTQyLCAxOTksIDI1NCwgNzUsIDIxMywgMjUyLCA1LCAKLSAgICAyNTQsIDc2LCAyMTQsIDIyMywgMjMwLCA5MCwgMjEzLCAyNTIsIDUsIDI1NCwgMjAsIDIxMywgMjUyLCA1LCAyMjIsIDE4NywgCi0gICAgMjU0LCAyMCwgMjEzLCAyNTIsIDEzOCwgMjUxLCAyLCA0OCwgMjEzLCAyNTIsIDUsIDIzNSwgMTAyLCAyMTMsIDI1MiwgNSwgCi0gICAgMjE0LCAxNjEsIDcsIDEsIDQsIDYsIDYxLCA3LCAxLCA0LCA2LCAyNTQsIDI0MywgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAKLSAgICAyNDMsIDcsIDEsIDQsIDYsIDI1MiwgMTM0LCAyNTMsIDE1OCwgNywgMSwgNCwgNiwgMjUxLCA2NiwgNywgMSwgNCwgNiwgCi0gICAgMjQ5LCA2MCwgNywgMSwgNCwgNiwgMjQ1LCA1OSwgNywgMSwgNCwgNiwgNzUsIDcsIDQsIDEsIDIxNSwgOTQsIDIwNCwgNzUsIAotICAgIDcsIDQsIDEsIDIxNSwgOTQsIDczLCA3LCAxLCA0LCA2LCAyMzUsIDE0NCwgNywgMSwgNCwgNiwgMjM1LCAyMywgNywgMSwgNCwgCi0gICAgNiwgMjMzLCAxNDksIDIsIDkxLCA3LCAxLCA0LCA2LCAxOTMsIDcsIDEsIDQsIDYsIDIyMywgNDksIDIzMCwgMjUsIDcsIDEsIAotICAgIDQsIDYsIDc2LCA3LCAxLCA0LCA2LCAyMDQsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgNzYsIDcsIDQsIDEsIDIxOSwgMTg3LCAKLSAgICAyMDQsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgMjI2LCAyMzQsIDcsIDEsIAotICAgIDQsIDYsIDIyNiwgMTM0LCA3LCA0LCAxLCAyMTYsIDE0LCAxNjMsIDc2LCA3LCA0LCAxLCAyNTEsIDE3NSwgMTYzLCA3NiwgNywgCi0gICAgMSwgNCwgNiwgMjI2LCAxMDUsIDcsIDEsIDQsIDYsIDIyMywgNDksIDE1MywgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTUzLCA3LCAKLSAgICAxLCA0LCA2LCAyMTcsIDE1MiwgNywgMSwgNCwgNiwgNzAsIDcsIDQsIDEsIDIxOSwgMTg3LCA3MCwgNywgNCwgMSwgMjE5LCAKLSAgICAxODcsIDI0OCwgMCwgNzAsIDcsIDQsIDEsIDIxOSwgMTg3LCAyMTUsIDk0LCAxOTMsIDcsIDEsIDQsIDYsIDIxNCwgMTA1LCAKLSAgICA3LCAxLCA0LCA2LCAyMTIsIDk4LCA3LCAxLCA0LCA2LCAyMTAsIDE1OSwgNywgMSwgNCwgNiwgMjQ1LCA4LCA3LCAxLCAyMTMsIAotICAgIDEzNSwgMjMzLCA4MiwgMjE4LCAyNTAsIDcsIDEsIDI1NCwgMTk2LCAyNiwgMSwgNCwgNiwgMjQzLCAxMDcsIDI2LCAxLCA0LCAKLSAgICA2LCAyMzMsIDk4LCAyNiwgMSwgNCwgNiwgMjI1LCAxMDgsIDI2LCAxLCA0LCA2LCAyMjMsIDM3LCAyNiwgMSwgNCwgNiwgCi0gICAgMjI0LCAxNjEsIDMzLCAxLCA0LCA2LCAyNDUsIDE3NCwgNTgsIDEsIDYsIDYxLCA1OCwgMSwgNiwgMjU0LCAyNDMsIDU4LCAxLCAKLSAgICA2LCAyNTMsIDE1OCwgNTgsIDEsIDYsIDI1MiwgMTM0LCAyNTMsIDE1OCwgNTgsIDEsIDYsIDI0OSwgNjAsIDU4LCAxLCA2LCAKLSAgICA3NSwgNTgsIDEsIDYsIDIyMywgNDksIDc1LCA1OCwgMSwgNiwgMjQzLCAyMDIsIDU4LCAxLCA2LCAyNDIsIDYwLCA1OCwgMSwgCi0gICAgNiwgNzMsIDU4LCAxLCA2LCAyMzUsIDE0NCwgNTgsIDEsIDYsIDIzNSwgMjMsIDU4LCAxLCA2LCAxNTYsIDU4LCAxLCA2LCAKLSAgICAxOTMsIDU4LCAxLCA2LCAyMzAsIDI1LCA1OCwgMSwgNiwgMjIzLCA0OSwgMjMwLCAyNSwgNTgsIDEsIDYsIDc2LCA1OCwgMSwgCi0gICAgNiwgMjI2LCAxMzQsIDU4LCAxLCA2LCAyMjYsIDEwNSwgNTgsIDEsIDYsIDE1MywgNTgsIDEsIDYsIDIxNywgMTUyLCA1OCwgCi0gICAgMSwgNiwgNzAsIDU4LCAxLCA2LCAyMTIsIDk4LCA1OCwgMSwgNCwgNjEsIDU4LCAxLCA0LCAyMTUsIDk0LCA2MSwgNTgsIDEsIAotICAgIDQsIDI1NCwgMTQzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjU0LCAyNDMsIDU4LCAxLCA0LCAyNTMsIDE1OCwgNTgsIDEsIDQsIAotICAgIDI0OSwgNjAsIDU4LCAxLCA0LCA3NSwgNTgsIDEsIDQsIDIyMSwgMTk1LCA1OCwgMSwgNCwgMjA0LCA3NSwgNTgsIDEsIDQsIAotICAgIDIxNSwgOTQsIDIwNCwgNzUsIDU4LCAxLCA0LCAyNDMsIDIwMiwgNTgsIDEsIDQsIDIxNSwgOTQsIDczLCA1OCwgMSwgNCwgCi0gICAgMjM1LCAyMywgNTgsIDEsIDQsIDE5MywgNTgsIDEsIDQsIDI0NSwgMTM4LCA1OCwgMSwgNCwgNzYsIDU4LCAxLCA0LCAyMDQsIAotICAgIDc2LCA1OCwgMSwgNCwgMjE2LCAxNCwgMTYzLCA3NiwgNTgsIDEsIDQsIDI1MSwgMTc1LCAxNjMsIDc2LCA1OCwgMSwgNCwgCi0gICAgMjI2LCAxMDUsIDU4LCAxLCA0LCAyMTcsIDE1MiwgNTgsIDEsIDQsIDcwLCA1OCwgMSwgNCwgMjE5LCAxODcsIDcwLCA1OCwgCi0gICAgMSwgNCwgMjE1LCA5NCwgMTkzLCA1OCwgMSwgNCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyNTQsIDE5NiwgNTgsIDEsIDQsIAotICAgIDI1MiwgMjYsIDU4LCAxLCA0LCAyNiwgMjQzLCAxMDcsIDU4LCAxLCA0LCAyNDgsIDU0LCA1OCwgMSwgNCwgMjYsIDIyNSwgCi0gICAgMTMzLCA1OCwgMSwgNCwgMjUwLCAxMTAsIDcsIDIxOCwgNjUsIDQsIDEsIDczLCA3LCAyMTgsIDY1LCA0LCAxLCAxNTMsIDcsIAotICAgIDIxOCwgNjUsIDQsIDEsIDcwLCA3LCAyMTgsIDY1LCA0LCAxLCAyMTQsIDEwNSwgMjYsIDIxOCwgNjUsIDQsIDEsIDI1MiwgCi0gICAgMjYsIDI2LCAyMTgsIDY1LCA0LCAxLCAyNDMsIDEwNywgMjYsIDIxOCwgNjUsIDQsIDEsIDIyMywgMzcsIDI2LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMjUsIDEzMywgMjYsIDIxOCwgNjUsIDQsIDEsIDI1MCwgMTEwLCA3LCA0LCAxLCAyMTQsIDIxNCwgNywgNCwgMSwgCi0gICAgNTcsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDI0NSwgCi0gICAgNywgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMyLCA1MCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMwLCAKLSAgICAyNiwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjQ0LCA4OCwgMjIsIDIzMCwgMjI0LCAxODIsIAotICAgIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyMzAsIDIyNCwgMTgyLCAKLSAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjE1LCA5NCwgMjQzLCAyMDIsIDU4LCAxLCAKLSAgICAzMywgMjQ1LCAxNTAsIDcsIDQsIDEsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNCwgMSwgMjE2LCAyMTEsIDIsIDIxOCwgCi0gICAgMTA3LCA3LCA0LCA2LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTg2LCAyLCA5MSwgNywgNCwgMSwgMjI2LCAKLSAgICAxMDYsIDIsIDkxLCA3LCA0LCA2LCAxLCAxMDQsIDIsIDkxLCA3LCA0LCAxLCAyMTQsIDE1OCwgMiwgOTEsIDcsIDQsIDEsIAotICAgIDU3LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ1LCA3LCAKLSAgICAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMyLCA1MCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ1LCA3NiwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAxMTUsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjU0LCAxNDQsIDIsIDIyMywgCi0gICAgNTUsIDEwMywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjQxLCA1MiwgMjIsIDIxNywgNzcsIDcsIDQsIDEsIDE2MCwgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA0LCAxLCAyMDQsIDE2MCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMjMsIDQ5LCAyMDQsIDE2MCwgCi0gICAgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDAsIDE1NCwgCi0gICAgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMDQsIDE0NCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDUsIDc2LCAyLCAKLSAgICAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDEwNCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDUsIDksIDIsIDIyMywgNTUsIAotICAgIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMTQzLCA1OCwgMSwgNCwgMjUxLCA2NiwgNTgsIDEsIDQsIDI1MSwgNjcsIAotICAgIDIsIDI0OSwgMTAwLCA1OCwgMSwgNCwgMjQ1LCA1OSwgNTgsIDEsIDQsIDIyMywgNDksIDIwNCwgNzUsIDU4LCAxLCA0LCAKLSAgICAyNDUsIDYsIDU4LCAxLCA0LCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDkxLCA1OCwgMSwgNCwgMTE5LCAyNDMsIDIwMiwgNTgsIAotICAgIDEsIDQsIDIxNSwgOTQsIDI0MiwgNjAsIDU4LCAxLCA0LCAyNDAsIDE1NCwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE4NSwgCi0gICAgNTgsIDEsIDQsIDYsIDczLCA1OCwgMSwgNCwgNiwgMjQwLCAxNTQsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxNDUsIDIsIAotICAgIDI0OSwgMTI3LCA1OCwgMSwgNCwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDEwMywgNTgsIDEsIDQsIDIzMywgMTQ5LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDU4LCAxLCA0LCA2LCAxNTYsIDU4LCAxLCA0LCAyMzIsIDUwLCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIAotICAgIDk0LCAyMzIsIDUwLCAyLCAxOTksIDIzMywgMzYsIDU4LCAxLCA0LCAyMzAsIDI2LCAyLCA0MywgMTAzLCA1OCwgMSwgNCwgCi0gICAgMjMwLCAyNiwgMiwgMjIzLCA1NSwgMTAzLCA1OCwgMSwgNCwgNiwgMjMwLCAyNSwgNTgsIDEsIDQsIDI1MiwgMTM0LCA3NiwgCi0gICAgNTgsIDEsIDQsIDIyNSwgMTMzLCA1OCwgMSwgNCwgMjIyLCA5MiwgMiwgMTAzLCA1OCwgMSwgNCwgMjQ1LCA3NSwgNTgsIDEsIAotICAgIDQsIDIxNywgMTUzLCAyLCAyMjYsIDY2LCAxMDMsIDU4LCAxLCA0LCAxMDQsIDEzMCwgNTgsIDEsIDQsIDIxNCwgMTU3LCA1OCwgCi0gICAgMSwgNCwgNiwgNzAsIDU4LCAxLCA0LCAyMTQsIDEwNiwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjE0LCAxMDUsIDU4LCAKLSAgICAxLCA0LCAyMTAsIDE1OSwgNTgsIDEsIDQsIDIxMCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDU4LCAxLCA0LCAyMTAsIDE2MCwgCi0gICAgMiwgMjQ5LCAxMDAsIDU4LCAxLCA0LCAyNDUsIDgsIDU4LCAxLCA0LCAyMTYsIDE3OSwgMzgsIDI0NiwgMTE4LCAyNDIsIAotICAgIDEzNywgMjU1LCAxNCwgMzgsIDI0NiwgMTE4LCAyNTUsIDMsIDI1NSwgMTQsIDM4LCAyMTksIDY5LCA1MSwgMzgsIDIxOCwgNiwgCi0gICAgNzgsIDM4LCAyMzEsIDIzMSwgMzgsIDI0MiwgMTM0LCAzOCwgMjMxLCAyMjksIDM4LCAyNTUsIDEsIDM4LCAyNDIsIDEzNSwgCi0gICAgMzgsIDI1NSwgMiwgMzgsIDcsIDQsIDEsIDIyMywgMjI0LCA1MSwgMzgsIDI1MSwgMTQ1LCAzOCwgMjMxLCAyMzAsIDM4LCAKLSAgICA1MiwgMjUwLCAzMSwgNDgsIDM4LCAyMjYsIDIyNSwgNDgsIDM4LCAyMTAsIDM1LCA1MSwgMzgsIDIzNSwgMTcyLCA1MSwgMzgsIAotICAgIDIxNCwgMTUxLCA0OCwgMzgsIDIxNCwgMTM0LCA0OCwgMzgsIDcsIDQsIDEsIDI0NCwgNjMsIDIwNCwgMTE1LCA0OCwgMzgsIAotICAgIDcsIDQsIDEsIDI1NCwgMjQzLCAzOCwgNywgNCwgMSwgMjU0LCA3MywgMzgsIDcsIDQsIDEsIDI1MywgMTc2LCAzOCwgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMjUwLCAxODMsIDM4LCA3LCA0LCAxLCAyMzUsIDIxMywgMjQ5LCA2MCwgMzgsIDcsIDQsIDEsIDI0NSwgCi0gICAgNTksIDM4LCA3LCA0LCAxLCAyNDMsIDIwMiwgMzgsIDcsIDEsIDQsIDYsIDI0MywgMjAyLCAzOCwgNywgNCwgMSwgMjM1LCAKLSAgICAyMywgMzgsIDcsIDQsIDEsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE5MywgMzgsIDcsIDQsIAotICAgIDEsIDIzMCwgMjUsIDM4LCA3LCAxLCA0LCA2LCAyMzAsIDI1LCAzOCwgNywgMSwgNCwgNiwgMTUzLCAzOCwgNywgNCwgMSwgCi0gICAgMjIzLCAyMjQsIDIyMiwgMTg2LCAzOCwgNywgNCwgMSwgMjIyLCA5MSwgMzgsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MSwgMzgsIAotICAgIDcsIDQsIDEsIDIxMCwgMTU5LCAzOCwgNTIsIDIzNSwgMTkzLCAyNTEsIDE0NywgNTEsIDM4LCAyNTQsIDE0OCwgMTI4LCAKLSAgICAyMTYsIDQyLCA1MSwgMzgsIDQzLCAyNTMsIDI1MCwgNDgsIDM4LCA0NCwgMjUzLCAyNTAsIDIyLCAxMjQsIDI1MywgMjUwLCAKLSAgICA1MSwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDUxLCA3LCA2LCAKLSAgICAxLCA1NywgMiwgNTksIDQ4LCA3LCA0LCAxLCA1NywgMiwgNTksIDQ4LCA3LCA2LCAxLCA1NywgMiwgNTksIDUxLCA3LCA0LCAKLSAgICAxLCA1NywgMiwgNTksIDUxLCA3LCA2LCAxLCA1NywgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCA1NywgMiwgMjMyLCAyMTQsIAotICAgIDUxLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDE4NCwgMjIsIDE0MiwgNywgNCwgMSwgMjUxLCA2NywgMiwgMjUwLCAKLSAgICAxODQsIDIyLCAxNDIsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgNTksIDQ4LCAKLSAgICA3LCA2LCAxLCAyNDksIDYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDI0OSwgNjEsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAzMSwgCi0gICAgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAKLSAgICAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzMywgCi0gICAgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAKLSAgICA1MSwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE4NCwgMjIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMTg0LCAyMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDI0NSwgNywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDUsIAotICAgIDcsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQyLCA2MSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAKLSAgICAyNDIsIDYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgCi0gICAgMjQ4LCAxLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyNDgsIDEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMTgzLCA3LCA0LCAKLSAgICAxLCAyNDIsIDYxLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUxLCAxNDcsIDUxLCA3LCA0LCAxLCAyNDIsIAotICAgIDYxLCAyLCAyNTEsIDE0NywgNTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDIxNiwgODksIDUxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAxNDIsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIAotICAgIDE0MiwgNywgNiwgMSwgMjM1LCAyNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIAotICAgIDIzNSwgMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAyMzMsIDE0OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgCi0gICAgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMzIsIDIxNCwgCi0gICAgNTEsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMzEsIDUxLCAKLSAgICA3LCA2LCAxLCAyMzIsIDUwLCAyLCAxNDIsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIDE0MiwgNywgNiwgMSwgMjMyLCA1MCwgMiwgCi0gICAgNTksIDQ4LCA3LCA0LCAxLCAyMzIsIDUwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDU5LCA1MSwgNywgNCwgCi0gICAgMSwgMjMyLCA1MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIAotICAgIDU5LCA0OCwgNywgNiwgMSwgMjMwLCAyNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCA1OSwgNTEsIDcsIDYsIAotICAgIDEsIDIzMCwgMjYsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAyMzAsIDI2LCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDE0NCwgCi0gICAgMiwgMjE2LCA4OSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDIxNiwgODksIDIyLCAyNDgsIDEsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDI0OCwgMSwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDYsIAotICAgIDEsIDIyNiwgMTA2LCAyLCAxNDIsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAxNDIsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCA1OSwgCi0gICAgNDgsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAKLSAgICA1OSwgNTEsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgMjUyLCA0MywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgCi0gICAgNCwgMSwgMjIzLCAyMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAKLSAgICAyMjIsIDkyLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgNTksIAotICAgIDUxLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTUsIDMsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI1NSwgMywgCi0gICAgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAyMzUsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTIsIAotICAgIDIsIDI1MCwgMjM1LCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA1OSwgMjUyLCA0MywgMjIsIDU5LCA0OCwgNywgCi0gICAgNCwgMSwgMjIyLCA5MiwgMiwgNTksIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIxNywgMTUzLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUzLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIAotICAgIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCA1MSwgNywgCi0gICAgNiwgMSwgMTA0LCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDg5LCAyMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgODksIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAKLSAgICAyNDgsIDEsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAyNDgsIDEsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAxODIsIAotICAgIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxODIsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNCwgCi0gICAgMTA2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDIsIAotICAgIDEzNiwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDYsIDEsIDIxMiwgCi0gICAgOTksIDIsIDI0OCwgMSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTIsIAotICAgIDk5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCA1OSwgCi0gICAgNDgsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDEsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyNTAsIDMwLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgCi0gICAgMjEwLCAxNjAsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAKLSAgICAyMTcsIDE1MywgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDExNSwgMiwgNDQsIDE2MywgMjIyLCAyMzMsIDcsIDQsIDEsIDE5OSwgCi0gICAgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxOTksIDIyMiwgOTIsIDIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMTk5LCAKLSAgICAyMjIsIDkyLCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAyMjAsIDc2LCAyMjIsIDkxLCA3LCA0LCAxLCAyNDgsIDU0LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDExNSwgMiwgMjQxLCA1MiwgNDgsIAotICAgIDcsIDQsIDEsIDExNSwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNCwgCi0gICAgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAKLSAgICAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIAotICAgIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAKLSAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAKLSAgICAyNTEsIDE0NywgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMjQxLCA1MiwgNDgsIDcsIAotICAgIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxODIsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxODIsIDcsIAotICAgIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCA1OSwgCisgICAgMCwgMjE5LCAyMCwgMjQ1LCAzOSwgNzksIDIyNCwgMSwgNzksIDU0LCA1MCwgMjQ3LCAxNDAsIDUwLCAyMjUsIDE4NSwgNTAsIAorICAgIDI1NCwgMTM0LCAyNTQsIDY1LCA0MywgMjI2LCA3LCA0NCwgMjI2LCA3LCAyNTMsIDIyNCwgOTYsIDUwLCAyNDksIDIyNywgCisgICAgMjQwLCAxNzQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjE5LCA0OCwgMjEsIDIxMCwgODYsIDIxLCAxMTEsIDIxLCAxMDUsIDIxLCAKKyAgICAxNTgsIDIxLCAxNjEsIDIxLCAxOTAsIDIxLCAxOTUsIDIxLCAxOTksIDIxLCAxOTYsIDIxLCAyMDEsIDI0OSwgMjM0LCAyMjAsIAorICAgIDE1MiwgMjMzLCAyMSwgNTAsIDI0NSwgMTA2LCA1MCwgMjQyLCAxMzcsIDUwLCAyMjQsIDE2LCA3OSwgMjQ5LCAyMjUsIDI1MywgCisgICAgMjE0LCA3LCA2LCAxLCA2MSwgNywgNiwgMSwgMjUzLCAxNjYsIDcsIDYsIDEsIDI1MSwgNzQsIDcsIDYsIDEsIDI0OSwgNjgsIAorICAgIDcsIDYsIDEsIDc2LCA3LCA2LCAxLCAyNDUsIDE0LCA3LCA2LCAxLCAyNDMsIDIwOSwgNywgNiwgMSwgMjQyLCA2NywgNywgNiwgCisgICAgMSwgNzQsIDcsIDYsIDEsIDIzNSwgMTUwLCA3LCA2LCAxLCAyMzUsIDI5LCA3LCA2LCAxLCAxNTYsIDcsIDYsIDEsIDE5NCwgCisgICAgNywgNiwgMSwgMjMwLCAzMCwgNywgNiwgMSwgNzgsIDcsIDYsIDEsIDIyNiwgMTA5LCA3LCA2LCAxLCAyMjQsIDk5LCA3LCA2LCAKKyAgICAxLCAxNTMsIDcsIDYsIDEsIDIyMiwgOTMsIDcsIDYsIDEsIDIxNywgMTUzLCA3LCA2LCAxLCA2OSwgNywgNiwgMSwgMjE0LCAKKyAgICAxMDUsIDcsIDYsIDEsIDIxMiwgOTgsIDcsIDYsIDEsIDIxMSwgMTc4LCA3LCA2LCAxLCAyMTEsIDExNywgNywgNiwgMSwgCisgICAgMjEwLCAxNTksIDQzLCA0MiwgMTI3LCAyMjMsIDUzLCAyMTksIDQ4LCA0NCwgNDIsIDEyNywgMjUwLCAzOSwgMjU1LCAyMywgCisgICAgMTIxLCAyMzIsIDIxOSwgMjQyLCAxNDQsIDI1NSwgMjMsIDcsIDQsIDEsIDYxLCA3LCA0LCAxLCAyNTMsIDE2NiwgNywgNCwgCisgICAgMSwgMjUxLCA3NCwgNywgNCwgMSwgMjQ5LCA2OCwgNywgNCwgMSwgNzYsIDcsIDQsIDEsIDI0NSwgMTQsIDcsIDQsIDEsIAorICAgIDI0MywgMjA5LCA3LCA0LCAxLCAyNDIsIDY3LCA3LCA0LCAxLCA3NCwgNywgNCwgMSwgMjM1LCAxNTAsIDcsIDQsIDEsIDIzNSwgCisgICAgMjksIDcsIDQsIDEsIDE1NiwgNywgNCwgMSwgMTk0LCA3LCA0LCAxLCAyMzAsIDMwLCA3LCA0LCAxLCA3OCwgNywgNCwgMSwgCisgICAgMjI2LCAxMDksIDcsIDQsIDEsIDIyNCwgOTksIDcsIDQsIDEsIDE1MywgNywgNCwgMSwgMjIyLCA5MywgNywgNCwgMSwgMjE3LCAKKyAgICAxNTMsIDcsIDQsIDEsIDY5LCA3LCA0LCAxLCAyMTQsIDEwNSwgNywgNCwgMSwgMjEyLCA5OCwgNywgNCwgMSwgMjExLCAxNzgsIAorICAgIDcsIDQsIDEsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE1OSwgNDMsIDI0OSwgMTA3LCAxMjcsIDY3LCAyMzIsIDIxOSwgCisgICAgNDQsIDI0OSwgMTA3LCAxMjcsIDE4NCwgMjI4LCA3OCwgMjE5LCAyMCwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCAyNTAsIAorICAgIDE4NCwgNTAsIDIyNCwgMjMxLCA1MCwgMjQ5LCAxMDYsIDUwLCAyMTEsIDQwLCA1MCwgMjUxLCAxNDMsIDEzMCwgMjIxLCAKKyAgICAxNzUsIDUwLCAyNDgsIDksIDI0OSwgMTcxLCA1MCwgMjQ0LCAxNDQsIDIyNiwgMTU4LCAyMzUsIDI0NSwgMjMzLCA0OCwgNTIsIAorICAgIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAyMjgsIDU3LCA1MCwgMjE5LCA1NCwgMjQwLCAxNzUsIDIyMywgMTA1LCA1MCwgMjMxLCAKKyAgICAyMzcsIDI0OCwgNzksIDUwLCAyMjUsIDI0LCA1MCwgMjE4LCAyNCwgMTA1LCAyMTgsIDI0LCAxNTgsIDI1NSwgMTIsIDI1NSwgCisgICAgMjMsIDIzMCwgMjMzLCA1MCwgMjI1LCA3MSwgNTAsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjUwLCAxOTEsIDIxOCwgMjQsIAorICAgIDExMSwgMjMxLCAxNTMsIDIyNiwgMTU4LCAyMzUsIDI0NSwgMjIyLCAyNTAsIDUyLCAyNTQsIDExOCwgMjI0LCAxLCA3OSwgCisgICAgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgMjEyLCAKKyAgICAxMTQsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMjM1LCAyMDAsIDIyNCwgMTYsIDc5LCA3LCA2LCAxLCAxMTYsIDIsIDI0MiwgCisgICAgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDE4NCwgNywgNiwgMSwgMTE2LCAyLCAyNDgsIDksIDcsIDYsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA2LCAxLCAKKyAgICAyNTQsIDI1MiwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDE2MCwgMiwgMjQyLCAxNDMsIDcsIDYsIAorICAgIDEsIDE2MCwgMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDE2MCwgMiwgMjQ4LCA5LCA3LCA2LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyNDUsIDY3LCA3LCA2LCAxLCAyMzAsIAorICAgIDMxLCAyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMTQyLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDE0NCwgMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgOSwgMjMwLCA4OSwgCisgICAgNTAsIDcsIDYsIDEsIDE0NCwgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgMTQyLCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgCisgICAgMTQyLCA3LCA2LCAxLCAyMTYsIDE1MiwgNywgNCwgMSwgMjIwLCA3OCwgMjIyLCA5MywgNywgNCwgMSwgMTE2LCAyLCAyNDIsIAorICAgIDE0MywgNywgNCwgMSwgMTE2LCAyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTE2LCAyLCAKKyAgICAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgCisgICAgMjU0LCAyNTIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAxNjAsIDIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxNjAsIDIsIDI0OCwgOSwgNywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgNywgNCwgMSwgMjQ1LCA2NywgNywgNCwgMSwgMjMwLCAKKyAgICAzMSwgMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxNDQsIDIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDksIDI0NywgMTc3LCAKKyAgICA1MCwgNywgNCwgMSwgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMTA0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAxNDIsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAKKyAgICAxNDIsIDcsIDQsIDEsIDIxNiwgMTUyLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxMTYsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAxMTYsIDIsIDIyNiwgMjI4LCAKKyAgICA3LCA2LCAxLCAyNTEsIDc1LCAyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDE0MiwgNywgNiwgMSwgMjUxLCA3NSwgMiwgCisgICAgMjUwLCAzOCwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgNTksIDQ4LCA3LCA0LCAKKyAgICAxLCAyNTEsIDc1LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNTEsIDc1LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDI1MCwgCisgICAgMjQyLCA3LCA2LCAxLCAyNDksIDY5LCAyLCA5MSwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgOTEsIDcsIDYsIDEsIDE2MCwgMiwgCisgICAgMjMxLCAyMzcsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE2MCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgCisgICAgMSwgMTYwLCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDI0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIAorICAgIDI0MywgMjEwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDI0MywgMjEwLCAKKyAgICAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA5MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDE4NCwgNywgNCwgMSwgMjQwLCAKKyAgICAxNjEsIDIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAKKyAgICAyMzcsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI1MSwgMTU0LCA3LCAKKyAgICA2LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgCisgICAgMjQwLCAxNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ3LCAxMjcsIDc0LCA3LCA2LCAyNywgMjM2LCAzOCwgNywgNCwgMjcsIAorICAgIDIzNiwgMzgsIDcsIDYsIDEsIDIzNSwgMTUxLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAzOCwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzMsIAorICAgIDI0NSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDE0MiwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDE0MiwgNywgNiwgMSwgMjMzLCAKKyAgICAxNTUsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIAorICAgIDI0NywgMTI4LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgOTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMTQyLCA3LCA0LCAxLCAyMzAsIDMxLCAKKyAgICAyLCAxNDIsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDE5MSwgNywgCisgICAgNiwgMSwgMjMwLCAzMSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzAsIAorICAgIDMxLCAyMjQsIDIwNywgMjUxLCA4NiwgMjU0LCA2NSwgNywgNiwgMSwgMjQ1LCAxNDYsIDcsIDQsIDEsIDI0NSwgMTQ2LCA3LCAKKyAgICA2LCAxLCAxNDQsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDI1MSwgCisgICAgMTU0LCA3LCA0LCAxLCAxNDQsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCisgICAgMiwgNTIsIDE0MiwgNywgNiwgMjcsIDIyNiwgMjM4LCA3LCA0LCAyNywgMjI2LCAyMzgsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAxNDIsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAxNDIsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgCisgICAgMjIzLCAyMjcsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIyMywgMjI3LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMTQyLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAxNDIsIDcsIDYsIDEsIAorICAgIDIyMiwgOTQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIAorICAgIDI1MCwgMTkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDIsIAorICAgIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMTcsIDE1NCwgCisgICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDkxLCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDE4NCwgNywgNCwgMSwgMTA0LCAyLCAxODQsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDEwNCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDEwNCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDEwNCwgMiwgMjUxLCAxNTQsIAorICAgIDcsIDYsIDEsIDEwNCwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDIyMiwgMjM3LCA0OCwgNywgNiwgMSwgCisgICAgMTA0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjgsIDcsIAorICAgIDQsIDEsIDEwNCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMiwgOTksIAorICAgIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzOCwgCisgICAgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMjEwLCAKKyAgICAxNjAsIDIsIDE0MiwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIAorICAgIDIwMCwgMjIyLCA5MywgNywgNCwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCA1NywgMiwgMTAzLCA3LCA2LCAxLCA1NywgMiwgCisgICAgMjE2LCAxMiwgNywgNCwgMSwgNTcsIDIsIDIxNiwgMTIsIDcsIDYsIDEsIDEzOCwgMTk1LCA3LCA0LCAxLCAxMzgsIDE5NSwgCisgICAgNywgNiwgMSwgMjA0LCA3OCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTAzLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAxMDMsIDcsIAorICAgIDYsIDEsIDI1NCwgMjI4LCAyNDksIDY4LCA3LCA2LCAxLCAyNDksIDY5LCAyLCAxMDMsIDcsIDYsIDEsIDI0OSwgNjksIDIsIAorICAgIDIxNiwgMTIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIxNiwgMTIsIDcsIDQsIDEsIDIxNSwgOTQsIDI0OCwgNjIsIDcsIDYsIAorICAgIDEsIDIyMywgNTIsIDc2LCA3LCA2LCAxLCAyMjEsIDE5NywgNywgNiwgMSwgMjA0LCA3NiwgNywgNiwgMSwgMjQ1LCAxNSwgMiwgCisgICAgMTAzLCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgCisgICAgMTE0LCA3LCA0LCAxLCAyNDAsIDIwOCwgNywgNiwgMSwgMjM1LCAxOTIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA5MSwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgMTAzLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAxMDMsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAxMzAsIDcsIDQsIDEsIDIzMywgMTA2LCAyLCA5MSwgNywgNiwgMSwgMjE1LCA5NCwgMTk0LCA3LCA2LCAxLCAyMzAsIDMxLCAKKyAgICAyLCA0MywgMTAzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMDAsIDQ0LCAyMzMsIDQyLCA3LCA2LCAxLCAxNDQsIDIsIDIzMCwgCisgICAgMjI5LCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNTUsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNTUsIDcsIDYsIDEsIAorICAgIDIyNiwgMjIzLCA3LCA0LCAxLCAyMjYsIDIyMywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDEwMywgNywgNCwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDEwMywgNywgMSwgMjEwLCAyMTQsIDcsIDYsIDEsIDEzOCwgMTA1LCA3LCA0LCAxLCAxMzgsIDEwNSwgNywgNiwgCisgICAgMSwgMjQ1LCA4MywgNywgMSwgMjIzLCA1MiwgMjQ1LCA4NCwgMjMyLCAxMjksIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMjYsIAorICAgIDcwLCAxMDMsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAxMDMsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAxMDMsIDcsIDYsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNTUsIDcsIDQsIDEsIDEwNCwgMiwgCisgICAgMjQwLCAyNTUsIDcsIDYsIDEsIDIxNCwgMTU3LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCA2LCAxLCAyMTEsIAorICAgIDExOCwgMiwgMTAzLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMTAzLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDQsIAorICAgIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgNiwgMSwgMjQ1LCAxNiwgNywgNiwgMSwgMjQ1LCAxNywgMjIzLCA1MSwgNywgNCwgMSwgCisgICAgMjQ1LCAxNywgMjIzLCA1MSwgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjE3LCA3OCwgNywgMSwgMTEzLCAyLCA5MSwgNywgNiwgCisgICAgMSwgMTM4LCAxOTAsIDcsIDQsIDEsIDEzOCwgMTkwLCA3LCAxLCAyMzUsIDIwMCwgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCAKKyAgICA5MSwgNywgMSwgMjExLCAxODEsIDcsIDEsIDI0OCwgNTUsIDI1MCwgMTksIDcsIDEsIDIzMywgODMsIDI1MCwgMTksIDcsIDEsIAorICAgIDI1NCwgMTQ1LCAyNTAsIDE5LCA3LCAxLCAyMjMsIDU4LCAyNTAsIDE5LCA3LCA2LCAxLCAyNDYsIDQ4LCAyLCAyNTAsIDI0MiwgCisgICAgNywgNiwgMSwgMjQ5LCA2OSwgMiwgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDYsIDQ4LCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNiwgMSwgMjMyLCAxOTQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA0LCAxLCAyMzUsIDE1MCwgNywgNCwgCisgICAgMSwgMjMyLCAxOTQsIDcsIDYsIDEsIDIyOCwgMTkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCA0LCAxLCAyMzUsIDE1MCwgNywgCisgICAgNCwgMSwgMjI4LCAxOTEsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAyNDIsIDcsIAorICAgIDYsIDEsIDI0MCwgMTYxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMjQyLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgCisgICAgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNTAsIDI0MiwgCisgICAgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgNzYsIAorICAgIDcsIDYsIDEsIDExNiwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDI0OCwgMTAsIDIyLCAKKyAgICAyMzEsIDIzNywgNywgNiwgMSwgMTE2LCAyLCA1OSwgNzIsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCA1OSwgNzIsIAorICAgIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjU0LCAyNTMsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMjMxLCAKKyAgICAyMzcsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCA5MSwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDkxLCA3LCA2LCAxLCAyNDMsIAorICAgIDIxMCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjM1LCAzMCwgMiwgCisgICAgMjUwLCAyNDIsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI4LCA3LCA0LCAKKyAgICAxLCAxNDQsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI5LCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgMjI2LCAyMjksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjQ1LCAxNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIAorICAgIDI0NSwgMTcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0NiwgNDcsIAorICAgIDcsIDYsIDEsIDI0OSwgNjksIDIsIDQsIDEsIDIxMCwgMTU5LCA3LCA0LCAxLCAyNDYsIDQ3LCA3LCA2LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMTQyLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDIwNiwgNywgNiwgMSwgMjExLCAxODEsIAorICAgIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDIsIDE0MywgNywgNiwgMSwgCisgICAgMTE2LCAyLCAyMjIsIDIzNywgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDcyLCAyMiwgMTQyLCA3LCAKKyAgICA2LCAxLCAyNTQsIDI1MywgMiwgMTQyLCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxOCwgCisgICAgMTA1LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDUyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMTE2LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjM1LCAyMDAsIDI1MSwgCisgICAgMTU0LCA3LCA0LCAxLCAxMTYsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTYwLCAyLCA1MiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCisgICAgMSwgMTYwLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDI0MCwgMTYxLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIAorICAgIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAorICAgIDEsIDE0NCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAKKyAgICA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA0LCAKKyAgICAxLCAyMjIsIDk0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDYsIDEsIDIxMCwgMjMxLCA3LCA0LCAxLCAyMTAsIDIzMSwgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyMDAsIDQ0LCAyMzMsIDQyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyNDksIDEwOCwgNywgNiwgMSwgMjI2LCAxMzgsIDcsIDQsIAorICAgIDEsIDIyNiwgMTM4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA2LCAKKyAgICAxLCAxMTYsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTE2LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxOTEsIDcsIAorICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjMxLCAyMzcsIDcsIAorICAgIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA0OCwgNywgNCwgMSwgCisgICAgMTQ0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDE0NCwgMiwgCisgICAgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjExLCAxMTgsIAorICAgIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0OSwgCisgICAgMTA4LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MCwgNywgNCwgCisgICAgMSwgMjQ4LCAxNTEsIDI0NywgMjI4LCA3LCA0LCAxLCAyMjQsIDM0LCAyNDcsIDIyOCwgNywgNiwgMSwgMTE2LCAyLCA5MSwgCisgICAgNywgNiwgMSwgMjUxLCA3NSwgMiwgOTEsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDkxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgMTMwLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjE3LCAyNTEsIAorICAgIDIxNywgNzgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgNywgNiwgMSwgMjQyLCAxODcsIDIxOCwgCisgICAgMTMxLCA3LCA0LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDYsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAxMzAsIAorICAgIDcsIDYsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCA2LCAxLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAxNjAsIDIsIDkxLCA3LCAKKyAgICA2LCAxLCAyMzUsIDE1MSwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCA5MSwgNywgNiwgMSwgNCwgMjI0LCAxMDAsIDIsIAorICAgIDI0MSwgNTksIDIxNywgNzgsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyNDEsIDU5LCAyMTcsIDc4LCA3LCA2LCAxLCAyMjMsIAorICAgIDIyNywgMiwgOTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCA5MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIDIxNSwgOTQsIDYxLCA3LCA0LCAxLCAyNTQsIDE1MSwgNywgNCwgMSwgMjE1LCAKKyAgICA5NCwgMjU0LCAxNTEsIDcsIDQsIDEsIDU3LCAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzgsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIAorICAgIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAxMDMsIDcsIDQsIAorICAgIDEsIDIyMywgNTIsIDc2LCA3LCA0LCAxLCAyMjEsIDE5NywgNywgNCwgMSwgMjIxLCAxOTgsIDIsIDEwMywgNywgNCwgMSwgCisgICAgMjA0LCA3NiwgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCA3NiwgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCAxNjAsIDIsIDEwMywgCisgICAgNywgNCwgMSwgMjUwLCA4LCAyMjMsIDUyLCAyMDQsIDc2LCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTEsIDIsIDkxLCA3LCAKKyAgICA0LCAxLCAyNDMsIDIxMCwgMiwgMTAzLCA3LCA0LCAxLCAxMTksIDI0MywgMjA5LCA3LCAxLCA0LCA2LCAyNDMsIDIwOSwgNywgCisgICAgNCwgMSwgMjQzLCAxMTQsIDcsIDQsIDEsIDIyMywgMTU0LCAyNDAsIDI1NSwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2NywgCisgICAgNywgNCwgMSwgMjQyLCA2OCwgMiwgMTAzLCA3LCA0LCAxLCAyNDEsIDIxNSwgMiwgMTAzLCA3LCA0LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTkyLCA3LCAxLCA0LCA2LCA3NCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTIsIDQ5LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjIzLCA1OCwgMTAzLCAKKyAgICA3LCA0LCAxLCAyMzMsIDcsIDcsIDQsIDEsIDIxNSwgOTQsIDE5NCwgNywgNCwgMSwgMjE1LCA5NCwgMjMyLCA1NSwgMiwgCisgICAgMjAwLCAyMzMsIDQyLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxMDMsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDQzLCAxMDMsIDcsIAorICAgIDQsIDEsIDIzMCwgMzEsIDIsIDIyMywgNTgsIDEwMywgNywgMSwgNCwgNiwgMjMwLCAzMCwgNywgNCwgMSwgMjUyLCAxNDIsIAorICAgIDc4LCA3LCAxLCA0LCA2LCAyMjYsIDIzOCwgNywgNCwgMSwgMjUwLCA4LCAyMjYsIDIwNSwgNywgNCwgMSwgMjI1LCAxMzYsIAorICAgIDcsIDQsIDEsIDIxNSwgOTQsIDE1MywgNywgNCwgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDIwMCwgMjMzLCA0MiwgNywgNCwgCisgICAgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDEwMywgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIwMCwgMjMzLCA0MiwgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyNDQsIDk1LCA3LCA0LCAxLCAyMjMsIDUyLCAKKyAgICAyMjMsIDIyNywgMiwgMjQ0LCA5NSwgNywgMSwgNCwgNiwgMTUzLCA3LCAxLCA0LCA2LCAyMzUsIDIwMCwgMTUzLCA3LCA0LCAKKyAgICAxLCAyMjIsIDk0LCAyLCAxMDMsIDcsIDQsIDEsIDI0NSwgODMsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MSwgMiwgCisgICAgMjE4LCAxMDUsIDIyLCAxMDMsIDcsIDQsIDEsIDIxOCwgMjMzLCAyMjMsIDUyLCAyNDUsIDgzLCA3LCA0LCAxLCAyNDUsIDg0LCAKKyAgICAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjE1LCA5NCwgMjE3LCAxNTMsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMjMsIDU4LCAKKyAgICAxMDMsIDcsIDQsIDEsIDEwNCwgMTMwLCA3LCA0LCAxLCAyMTQsIDE1NywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgCisgICAgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxNSwgOTQsIDIxMiwgOTgsIDcsIDQsIDEsIDIxNSwgOTQsIAorICAgIDIxMSwgMTE3LCA3LCAxLCA0LCA2LCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCisgICAgMSwgMjEwLCAxNjAsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDUsIDE2LCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyNDksIAorICAgIDEwOCwgNywgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCAxLCAyMjUsIDE0MiwgMjEzLCAxMzUsIDI0NCwgMSwgNywgMSwgCisgICAgMjM1LCAyMDAsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgMSwgMjE4LCAxMTIsIDI1MSwgNzQsIDcsIDEsIDI1MSwgMjU0LCAKKyAgICAyNTAsIDE5LCA3LCAxLCA0LCA2LCAyNTMsIDE2NiwgNywgNCwgMSwgMjUwLCA4LCAyMDQsIDc2LCA3LCAxLCA0LCA2LCAyNDMsIAorICAgIDIxMCwgMiwgMTAzLCA3LCAxLCA0LCA2LCAyNDIsIDY3LCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjQ5LCAxMzUsIDcsIDQsIAorICAgIDEsIDIxNSwgOTQsIDIzNSwgMjksIDcsIDEsIDQsIDYsIDE1NiwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDEwMywgNywgMSwgCisgICAgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCA5MSwgNywgMSwgMjIzLCA1MiwgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCA5MSwgNywgCisgICAgNCwgMSwgMjQ2LCA0OCwgMjQ3LCAyMjgsIDcsIDQsIDEsIDI0OCwgMzQsIDI0NywgMjI4LCA3LCA0LCAxLCAyNDYsIDQ4LCAKKyAgICAyNDcsIDIyOSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIxNSwgMTg2LCAyNDcsIDIyOCwgNywgNCwgMSwgMjE2LCAyMzYsIAorICAgIDI0NywgMjI4LCA3LCA0LCAxLCAyMTcsIDMwLCAyNDcsIDIyOSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NCwgMTQyLCAKKyAgICAyNDcsIDIyOCwgNywgNCwgMSwgMjMyLCAxMDUsIDI0NywgMjI4LCA3LCA0LCAxLCAyMzIsIDU2LCAyNDcsIDIyOCwgNywgMSwgCisgICAgMjUxLCAyNTQsIDIyNSwgMTg0LCA3LCAxLCAyNTIsIDYsIDIyNSwgMTg0LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY4LCAyLCAKKyAgICAyNDQsIDk1LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY4LCAyLCAyNDQsIDk2LCAyMiwgMjE3LCA3OCwgNTgsIDEsIDQsIAorICAgIDI0MiwgNjcsIDU4LCAxLCA0LCAyNDIsIDY4LCAyLCAxMDMsIDU4LCAxLCA0LCAyMzUsIDE1MCwgNTgsIDEsIDQsIDE1MywgCisgICAgNTgsIDEsIDQsIDIxNSwgOTQsIDE1MywgNTgsIDEsIDQsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAxMDMsIDU4LCAxLCA0LCA2LCAKKyAgICAyMzUsIDIwMCwgMTUzLCA1OCwgMSwgNCwgMjEyLCA5OCwgNTgsIDEsIDQsIDIxMSwgMTE3LCA1OCwgMSwgMjI0LCAxOTMsIAorICAgIDU4LCAxLCA1MiwgMjI0LCAxOTMsIDU4LCAxLCAyMTUsIDk0LCAyNDksIDIyNywgNTgsIDEsIDI1NCwgNjUsIDU4LCAxLCAKKyAgICAyMjMsIDUyLCAyNDksIDIyNywgNTgsIDEsIDQ0LCAxNjMsIDIyMiwgMjM2LCA1OCwgMSwgNDMsIDE2MywgMjIyLCAyMzYsIAorICAgIDU4LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDU4LCAxLCAyMjMsIDUyLCAyNDIsIDE4NywgMjE4LCAxMzEsIDU4LCAxLCA0MywgCisgICAgMjU0LCAxLCA1OCwgMSwgNDQsIDI1NCwgMSwgNTgsIDEsIDEyMCwgMjU0LCAxLCA1OCwgMSwgMTI0LCAyNTQsIDEsIDU4LCAxLCAKKyAgICAyNTAsIDM5LCAyNTUsIDIzLCAyNTAsIDI0MiwgNTgsIDEsIDY3LCAyMzIsIDIxOSwgNTgsIDEsIDIzMSwgMjM3LCA1OCwgMSwgCisgICAgMjU1LCAxMiwgMjU1LCAyMywgNTgsIDEsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMTIxLCA2NywgMjMyLCAyMTksIDU4LCAKKyAgICAxLCAxMjEsIDIzMSwgMjM3LCA1OCwgMSwgMTIxLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDEyMSwgMjU1LCAxMiwgCisgICAgMjU1LCAyMywgNTgsIDEsIDIxNSwgMjIzLCAyNDksIDIzNCwgNTgsIDEsIDE2MywgMjE1LCAyMjMsIDI0OSwgMjM0LCA1OCwgCisgICAgMSwgMjUwLCAxODEsIDQ0LCAxNjMsIDIyMiwgMjM2LCA1OCwgMSwgMjUwLCAxODEsIDQzLCAxNjMsIDIyMiwgMjM2LCA1OCwgCisgICAgMSwgMTIwLCAyMTcsIDg4LCA1OCwgMSwgMTI0LCAyMTcsIDg4LCA1OCwgMSwgOTYsIDUwLCA1OCwgMSwgMjMwLCAxODcsIDUwLCAKKyAgICAyNTEsIDE1NCwgNTksIDQ4LCAyMjIsIDIzNywgNDgsIDIyNiwgMjI4LCA0LCAxODQsIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCAKKyAgICA1OCwgMSwgMjIzLCAzOSwgMTAzLCA1OCwgMSwgMjQ5LCAxMzksIDI1NSwgMjMsIDU4LCAxLCA0LCAyNDMsIDExNCwgNTgsIDEsIAorICAgIDQsIDE1NiwgNTgsIDEsIDQsIDIyMiwgOTMsIDU4LCAxLCA0LCAyMTEsIDE3OCwgNTgsIDEsIDQsIDIyMywgNTIsIDI0MiwgCisgICAgMTg3LCAyMTgsIDEzMSwgNTgsIDEsIDI0NSwgMjgsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAxMzgsIDEzMCwgNTgsIDEsIAorICAgIDIzMCwgMjMwLCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAxMzgsIDEzMCwgNTgsIAorICAgIDEsIDIxMCwgMjU0LCAyNDgsIDUyLCAxMzgsIDc5LCA1OCwgMSwgMjExLCA3MCwgMjQ4LCA1MiwgMTM4LCA3OSwgNTgsIDEsIAorICAgIDIxMywgMTMzLCA1OCwgMSwgMjE0LCAxODYsIDU4LCAxLCA1MiwgMjU0LCA2NSwgNTgsIDEsIDEyMSwgMTI0LCAyNTQsIDEsIAorICAgIDU4LCAxLCAxMjEsIDEyMCwgMjU0LCAxLCA1OCwgMSwgMTIxLCA0MywgMjU0LCAxLCA1OCwgMSwgMTIxLCA0NCwgMjU0LCAxLCAKKyAgICA1OCwgMSwgMTIxLCAyMjIsIDIzNiwgNTgsIDEsIDIzMCwgMjI5LCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDIzMCwgCisgICAgMjI5LCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAyMzAsIDIyOSwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIDU4LCAxLCAKKyAgICAxMjEsIDE4NCwgNTgsIDEsIDIyMywgMTYwLCAyNDksIDIzNCwgNTgsIDEsIDI1MiwgNjYsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIAorICAgIDI0NSwgMTUxLCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAyNTIsIDY2LCAxMjEsIDIxNiwgMzEsIDU4LCAxLCAyNDUsIDE1MSwgCisgICAgMTIxLCAyMTYsIDMxLCA1OCwgMSwgMjIwLCA1NiwgNTgsIDEsIDIwNCwgMjIwLCA1NiwgNTgsIDEsIDEyMSwgNDMsIDc1LCAKKyAgICAzOCwgMjQyLCAxNDQsIDI1NSwgMjMsIDM4LCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjUwLCAzOSwgMjU1LCAyMywgMzgsIAorICAgIDE4NCwgMzgsIDIzMSwgMjM3LCAzOCwgMjI2LCAxMjMsIDM4LCAyNTEsIDE1NCwgMzgsIDU5LCA0OCwgMzgsIDI0OCwgOSwgCisgICAgMzgsIDI0MSwgNTksIDQ4LCAzOCwgMjIyLCAyMzcsIDQ4LCAzOCwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIDM4LCAyNTAsIAorICAgIDI0MiwgMzgsIDY3LCAyMzIsIDIyMCwgNDgsIDM4LCA1MiwgNjcsIDIzMiwgMjIwLCA0OCwgMzgsIDUyLCAyNDIsIDE0NCwgCisgICAgMjU1LCAyMywgMzgsIDI1MSwgNywgMzgsIDIzNSwgMjAwLCAyNTEsIDE1NCwgMzgsIDIxNSwgOTQsIDI0OSwgMjI4LCA0OCwgCisgICAgMzgsIDI0OSwgMjI4LCA0OCwgMzgsIDIyMywgNTIsIDI0OSwgMjI4LCA0OCwgMzgsIDI0OSwgMjI4LCA3MiwgMjIyLCAyNTQsIAorICAgIDM4LCAyNDIsIDE0NCwgMjU1LCAyNCwgNTEsIDM4LCAyNTUsIDEyLCAyNTUsIDI0LCA1MSwgMzgsIDQzLCAyMTcsIDg5LCA1MSwgCisgICAgMzgsIDQ0LCAyMTcsIDg5LCA1MSwgMzgsIDQzLCAyNTQsIDExOCwgNDgsIDM4LCAyNDAsIDI1NSwgMzgsIDQzLCAxNjMsIAorICAgIDIyMiwgMjM3LCA1MSwgMzgsIDEyMCwgMjE3LCA4OSwgNTEsIDM4LCAxMjQsIDIxNywgODksIDUxLCAzOCwgOTYsIDUsIDUxLCAKKyAgICAzOCwgMjMwLCAxODcsIDUsIDUxLCAzOCwgMjI2LCA2OCwgMjQxLCA1OSwgNTEsIDM4LCAyMjMsIDU4LCAyNDEsIDU5LCA1MSwgCisgICAgMzgsIDU5LCA1MSwgMzgsIDI0OCwgMTAsIDUxLCAzOCwgMjIyLCAyMzcsIDUxLCAzOCwgMjQ5LCAyMjgsIDUxLCAzOCwgMjUwLCAKKyAgICAxOTEsIDM4LCAyMjYsIDIyOCwgMzgsIDY3LCAyMzIsIDIyMCwgNTEsIDM4LCAyNTEsIDE0OCwgNTEsIDM4LCAyMzUsIDIwMCwgCisgICAgNTIsIDI1NCwgMzIsIDUxLCAzOCwgMjUwLCAyNDMsIDUxLCAzOCwgMjUwLCAzOSwgMjU1LCAyNCwgNTEsIDM4LCAyNTEsIAorICAgIDE1NSwgNTEsIDM4LCAyMzUsIDIwMCwgMjUxLCAxNTUsIDUxLCAzOCwgMjE2LCA5MCwgNTEsIDM4LCAyMzEsIDIzOCwgNTEsIAorICAgIDM4LCAxMjEsIDIzMiwgMjE5LCAzOCwgNTIsIDEyMSwgMjMyLCAyMTksIDM4LCAyMTYsIDkwLCAyMjYsIDEyNCwgMzgsIDIxOSwgCisgICAgMjUzLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDM4LCAyMDAsIDIxOCwgMTA1LCAyMjYsIDEyNCwgMzgsIDIxOSwgMjUzLCAyMTksIAorICAgIDQ5LCAyMjYsIDEyNCwgMzgsIDIwMCwgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNywgNTEsIDM4LCAKKyAgICAyMzUsIDIwMCwgMjUxLCAxNDgsIDUxLCAzOCwgNDIsIDUxLCAzOCwgMjIxLCAxODIsIDUxLCAzOCwgMjExLCAxNzksIDQ4LCAKKyAgICAzOCwgNjcsIDE4NCwgMzgsIDUyLCAyMjYsIDEyMywgMzgsIDI0MiwgMTQ0LCAxMzgsIDc5LCAzOCwgMjU1LCAxMiwgMTM4LCAKKyAgICA3OSwgMzgsIDI2LCAyMjUsIDE3OCwgMzgsIDI2LCAyMzQsIDgsIDM4LCAyNiwgMjQ4LCA0LCAyMTYsIDE5LCAzOCwgMjYsIAorICAgIDIxMCwgMjE5LCAzOCwgMjUxLCAxNDgsIDQ4LCAzOCwgMjQ1LCAxMDYsIDUsIDUxLCAzOCwgNTIsIDY3LCAyMzIsIDIyMCwgCisgICAgNTEsIDM4LCA0MywgMjU0LCAxMTgsIDUxLCAzOCwgMjI4LCA1NywgMjE2LCA5MCwgNDgsIDM4LCAyNDEsIDY1LCA0OCwgMzgsIAorICAgIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDQ4LCAzOCwgNDMsIDQ0LCA4MCwgNTEsIDM4LCAyMTQsIDE1MywgODAsIDUxLCAzOCwgCisgICAgMjQyLCAxNDksIDIzNSwgNjksIDM4LCA0NCwgMjU0LCAyLCA0OCwgMzgsIDQzLCAxNjMsIDIyMiwgMjM3LCA0OCwgMzgsIAorICAgIDI0NCwgMTM5LCAzOCwgMjExLCAxNzksIDUxLCAzOCwgNDMsIDI1NCwgMiwgNTEsIDM4LCA0NCwgMjU0LCAyLCA1MSwgMzgsIAorICAgIDQ0LCAyNTQsIDIsIDIyLCAxMjAsIDI1NCwgMiwgNTEsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNywgNDgsIDM4LCA1OSwgNzIsIAorICAgIDIyMiwgMjU0LCAzOCwgMjUzLCAyMjUsIDUxLCAzOCwgNTIsIDIyMiwgMjM3LCA1MSwgMzgsIDIxMCwgMzUsIDQ4LCAzOCwgCisgICAgNTIsIDI1MSwgMTU1LCA1MSwgMzgsIDUyLCAyNTEsIDE1NCwgMzgsIDUyLCAyMzEsIDIzNywgMzgsIDUyLCAyMzEsIDIzOCwgCisgICAgNTEsIDM4LCA1MiwgMTg0LCAzOCwgNTIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgMzgsIDUyLCA5NywgODAsIDUxLCAzOCwgNywgCisgICAgNCwgMSwgNjEsIDM4LCA3LCA0LCAxLCA3NiwgMzgsIDcsIDQsIDEsIDc0LCAzOCwgNywgNCwgMSwgNzgsIDM4LCA3LCA0LCAxLCAKKyAgICA2OSwgMzgsIDcsIDQsIDEsIDI1MSwgNzQsIDM4LCA3LCA0LCAxLCAyNDksIDY4LCAzOCwgNywgNCwgMSwgMjQyLCA2NywgMzgsIAorICAgIDcsIDQsIDEsIDE5NCwgMzgsIDcsIDQsIDEsIDE1MywgMzgsIDcsIDQsIDEsIDIxNywgMTUzLCAzOCwgNywgNCwgMSwgMjE0LCAKKyAgICAxMDUsIDM4LCA3LCA0LCAxLCAyMTEsIDE3OCwgMjYsIDYsIDEsIDI0MSwgMjAzLCAyNiwgNCwgMSwgMjQxLCAyMDMsIDI2LCAKKyAgICA2LCAxLCAyNTQsIDMxLCAyMjEsIDI0OCwgMjYsIDQsIDEsIDI1NCwgMzEsIDIyMSwgMjQ4LCAyNiwgMjI3LCAyMDIsIDUwLCAKKyAgICAyNiwgMjMyLCAxMTQsIDIyNywgMjAyLCA1MCwgMjYsIDYsIDEsIDIyNiwgNTUsIDI0NywgMjM1LCAyNiwgNCwgMSwgMjI2LCAKKyAgICA1NSwgMjQ3LCAyMzUsIDI2LCAyMTAsIDIxOSwgMjYsIDQsIDIyMywgNTIsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDQsIAorICAgIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA0LCAyMjMsIDUyLCAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAKKyAgICAxODAsIDg3LCAyNiwgMjI0LCAxNiwgNzksIDI2LCAyMTYsIDE5LCAyNiwgMjQ4LCA0LCAyMTYsIDE5LCAyNiwgNiwgMSwgCisgICAgMjU0LCAxNTIsIDIsIDIxNiwgMTksIDI2LCAyNTQsIDEwNSwgMjE3LCAzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIxNiwgCisgICAgMTksIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxNiwgMTksIDI2LCA2LCAKKyAgICAxLCAyMjYsIDIwNCwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjI2LCAKKyAgICAyMDYsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjE2LCAxOSwgMjYsIDYsIDEsIAorICAgIDI1NCwgMTUxLCAyNiwgNiwgMSwgMjUyLCAzNCwgMjYsIDYsIDEsIDI0MywgMTE0LCAyNiwgNiwgMSwgMjQ4LCA2MiwgMjYsIAorICAgIDYsIDEsIDI0NSwgMTA4LCAyNiwgNiwgMSwgMjEwLCA4NSwgMjYsIDYsIDEsIDI0NSwgNzEsIDI2LCA2LCAxLCAyMTYsIDE4MCwgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkyLCAyNiwgNiwgMSwgMjM0LCAyMjgsIDI2LCA2LCAxLCAyMzMsIDEwNCwgMjYsIDYsIDEsIAorICAgIDIzMCwgMTA3LCAyNiwgNiwgMSwgMjI3LCAyNDIsIDI2LCA2LCAxLCAyMTEsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjAzLCAyNiwgCisgICAgNiwgMSwgMjI1LCAxMTEsIDI2LCA2LCAxLCAyMjMsIDQwLCAyNiwgNiwgMSwgMjE5LCAxNzksIDI2LCA2LCAxLCAyMTcsIDQyLCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTcsIDI2LCA2LCAxLCAyMjUsIDEzNiwgMjYsIDYsIDEsIDI1MCwgMTE4LCAyNiwgNiwgMSwgCisgICAgMjI0LCAxNjQsIDI2LCA2LCAxLCAyMjYsIDIwNSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDMsIDI2LCA2LCAxLCAKKyAgICAyMTQsIDE1OCwgMiwgMjQ4LCAzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNDUsIDEwOSwgCisgICAgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjE2LCAKKyAgICAxOSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjU0LCAxNTEsIDI2LCAKKyAgICA0LCAxLCAyNTIsIDM0LCAyNiwgNCwgMSwgMjQzLCAxMTQsIDI2LCA0LCAxLCAyNDgsIDYyLCAyNiwgNCwgMSwgMjQ1LCAxMDgsIAorICAgIDI2LCA0LCAxLCAyMTAsIDg1LCAyNiwgNCwgMSwgMjQ1LCA3MSwgMjYsIDQsIDEsIDIxNiwgMTgwLCAyNiwgNCwgMSwgMjM1LCAKKyAgICAxOTIsIDI2LCA0LCAxLCAyMzQsIDIyOCwgMjYsIDQsIDEsIDIzMywgMTA0LCAyNiwgNCwgMSwgMjMwLCAxMDcsIDI2LCA0LCAKKyAgICAxLCAyMjcsIDI0MiwgMjYsIDQsIDEsIDIxMSwgMTU3LCAyNiwgNCwgMSwgMjI2LCAyMDMsIDI2LCA0LCAxLCAyMjUsIDExMSwgCisgICAgMjYsIDQsIDEsIDIyMywgNDAsIDI2LCA0LCAxLCA0MCwgMjE5LCAxNzksIDI2LCA0LCAxLCAyMTksIDE3OSwgMjYsIDQsIDEsIAorICAgIDIxNywgNDIsIDI2LCA0LCAxLCAyMTQsIDE1NywgMjYsIDQsIDEsIDIyNSwgMTM2LCAyNiwgNCwgMSwgMjUwLCAxMTgsIDI2LCAKKyAgICA0LCAxLCAyMjQsIDE2NCwgMjYsIDQsIDEsIDIyNiwgMjA1LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMywgMjYsIDQsIAorICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDMsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIxNCwgCisgICAgMTU4LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNiwgMTksIDI2LCA2LCAyMzQsIDI1MywgODcsIDI2LCAKKyAgICAyNTIsIDM1LCA4NywgMjYsIDIxNiwgMTgxLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDEsIDU5LCA4NywgMjYsIDIxNCwgCisgICAgMTU4LCAyLCAyNTUsIDEyLCAyMiwgMjQxLCA1OSwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQ4LCAxMCwgMjIsIDI0MSwgNTksIAorICAgIDg3LCAyNiwgMjI1LCAxMzcsIDg3LCAyNiwgMjI1LCAxMTIsIDg3LCAyNiwgMjM0LCAyNTMsIDg3LCAyNiwgMSwgMjU0LCAzMSwgCisgICAgMjM0LCAxMiwgMjYsIDQsIDEsIDI1NCwgMzEsIDIzNCwgMTIsIDI2LCAxLCAyMTgsIDEzOSwgMjYsIDQsIDEsIDIxOCwgMTM5LCAKKyAgICAyNiwgMSwgMjQ3LCAyMzUsIDI2LCA0LCAxLCAyNDcsIDIzNSwgMjYsIDEsIDIzNCwgMTIsIDI2LCA0LCAxLCAyMzQsIDEyLCAKKyAgICAyNiwgMSwgMjIxLCAyNDgsIDI2LCA0LCAxLCAyMjEsIDI0OCwgODEsIDYsIDEsIDIyMCwgNTcsIDgxLCA0LCAxLCAyMjAsIAorICAgIDU3LCA4MSwgNiwgMSwgMjQ0LCAxNDgsIDgxLCA0LCAxLCAyNDQsIDE0OCwgODEsIDYsIDEsIDIzNCwgMTIzLCA4MSwgNCwgMSwgCisgICAgMjM0LCAxMjMsIDgxLCA2LCAxLCAyNDEsIDUyLCA4MSwgNCwgMSwgMjQxLCA1MiwgODEsIDYsIDEsIDI0MywgMTA5LCA4MSwgCisgICAgNCwgMSwgMjQzLCAxMDksIDgxLCA2LCAxLCAyMjAsIDI0LCA4MSwgNCwgMSwgMjIwLCAyNCwgODEsIDYsIDEsIDI0OCwgNzcsIAorICAgIDgxLCA0LCAxLCAyNDgsIDc3LCAyNiwgMjM0LCAyMjksIDg3LCAyNiwgMjIzLCA0MSwgODcsIDI2LCAyMzIsIDg4LCAyMTksIAorICAgIDE4MCwgODcsIDI2LCAxLCAyMTAsIDIyNCwgMjYsIDYsIDIxNiwgMTgxLCA4NywgMjYsIDIzMiwgODgsIDI0NSwgMTA5LCA4NywgCisgICAgMjYsIDIyMywgNTIsIDIzMiwgODgsIDI0NSwgMTA5LCA4NywgMjYsIDYsIDEsIDIyMCwgOSwgMjYsIDQsIDEsIDIyMCwgOSwgCisgICAgMjYsIDYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIDEsIDIyMSwgMjQ1LCAyNiwgNCwgMSwgMjIxLCAyNDUsIDI2LCAKKyAgICAyMjMsIDQxLCAyLCAyMTgsIDEwNSwgODcsIDI2LCA2LCAyMjMsIDUyLCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAKKyAgICAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgMjIzLCA1MiwgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgCisgICAgMTgwLCA4NywgMzMsIDYsIDEsIDIzNiwgNjgsIDIsIDI0MiwgMTQzLCAzMywgNiwgMSwgMjM1LCAxOTYsIDMzLCA2LCAxLCAKKyAgICAyNDcsIDE3MCwgMzMsIDYsIDEsIDI0MiwgMTk0LCAzMywgNiwgMSwgMjE0LCAyMDIsIDIzNiwgNjcsIDMzLCA2LCAxLCAyNDYsIAorICAgIDQ0LCAzMywgNiwgMSwgMjUxLCA4NCwgNzQsIDMzLCA2LCAxLCAyMTEsIDgsIDMzLCA2LCAxLCAyMzUsIDEzMiwgMzMsIDYsIAorICAgIDEsIDIzMiwgMTkzLCAzMywgNiwgMSwgMjI4LCAxODMsIDMzLCA2LCAxLCAyMTUsIDE3NSwgMzMsIDYsIDEsIDIzNCwgNTQsIAorICAgIDMzLCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDMzLCA2LCAxLCAyMTksIDI1MywgNjksIDMzLCA2LCAxLCAyNDYsIAorICAgIDQwLCAzMywgNiwgMSwgNjEsIDMzLCA2LCAxLCAyNTIsIDgzLCAzMywgNiwgMSwgMjEzLCAyNTUsIDMzLCA2LCAxLCAyNDIsIAorICAgIDI0MywgMzMsIDYsIDEsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMzYsIDY3LCAzMywgNiwgMSwgMjEwLCA3NCwgMzMsIDYsIDEsIAorICAgIDIxMCwgOTQsIDMzLCA2LCAxLCA3NCwgMzMsIDYsIDEsIDIxOSwgMjUzLCA3NCwgMzMsIDYsIDEsIDE3NiwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTgyLCAzMywgNiwgMSwgMjQ1LCAxNjcsIDMzLCA2LCAxLCAyNDUsIDE1OCwgMzMsIDYsIDEsIDc4LCAzMywgNiwgMSwgCisgICAgMjI1LCAyMjQsIDMzLCA2LCAxLCAyNDUsIDEwMCwgMzMsIDYsIDEsIDI0NSwgOTAsIDMzLCA2LCAxLCAyMTcsIDIzLCAzMywgCisgICAgNiwgMSwgNjksIDMzLCA2LCAxLCAyNDUsIDIxMCwgMzMsIDYsIDEsIDE2MiwgMzMsIDYsIDEsIDIxNSwgMTc5LCAzMywgNiwgCisgICAgMSwgMjUwLCAxMzksIDMzLCA2LCAxLCAyMjAsIDEwNCwgMzMsIDYsIDEsIDIyMCwgNjcsIDMzLCA2LCAxLCAyNDIsIDEwLCAKKyAgICA1MCwgMzMsIDYsIDEsIDIxMSwgMjcsIDMzLCA2LCAxLCAyMTksIDU0LCA1MCwgMzMsIDYsIDEsIDc2LCAzMywgNiwgMSwgCisgICAgMjEwLCAyMTIsIDMzLCA2LCAxLCAxOTIsIDMzLCA0LCAxLCA2MSwgMzMsIDQsIDEsIDI1MiwgODMsIDMzLCA0LCAxLCAyMTMsIAorICAgIDI1NSwgMzMsIDQsIDEsIDI0MiwgMjQzLCAzMywgNCwgMSwgMjQ4LCA5OCwgMzMsIDQsIDEsIDIzNiwgNjcsIDMzLCA0LCAxLCAKKyAgICAyMTAsIDc0LCAzMywgNCwgMSwgMjEwLCA5NCwgMzMsIDQsIDEsIDc0LCAzMywgNCwgMSwgMjE5LCAyNTMsIDc0LCAzMywgNCwgCisgICAgMSwgMTc2LCAzMywgNCwgMSwgMjQ1LCAxODIsIDMzLCA0LCAxLCAyNDUsIDE2NywgMzMsIDQsIDEsIDI0NSwgMTU4LCAzMywgCisgICAgNCwgMSwgNzgsIDMzLCA0LCAxLCAyMjUsIDIyNCwgMzMsIDQsIDEsIDI0NSwgMTAwLCAzMywgNCwgMSwgMjQ1LCA5MCwgMzMsIAorICAgIDQsIDEsIDIxNywgMjMsIDMzLCA0LCAxLCA2OSwgMzMsIDQsIDEsIDI0NSwgMjEwLCAzMywgNCwgMSwgMTYyLCAzMywgNCwgMSwgCisgICAgMjE1LCAxNzksIDMzLCA0LCAxLCAyNTAsIDEzOSwgMzMsIDQsIDEsIDIyMCwgMTA0LCAzMywgNCwgMSwgMjIwLCA2NywgMzMsIAorICAgIDQsIDEsIDI0MiwgMTAsIDUwLCAzMywgNCwgMSwgMjExLCAyNywgMzMsIDQsIDEsIDIxOSwgNTQsIDUwLCAzMywgNCwgMSwgCisgICAgNzYsIDMzLCA0LCAxLCAyMTAsIDIxMiwgMzMsIDQsIDEsIDE5MiwgMzMsIDQsIDEsIDIzNiwgNjgsIDIsIDI0MiwgMTQzLCAKKyAgICAzMywgNCwgMSwgMjM1LCAxOTYsIDMzLCA0LCAxLCAyNDcsIDE3MCwgMzMsIDQsIDEsIDI0MiwgMTk0LCAzMywgNCwgMSwgCisgICAgMjE0LCAyMDIsIDIzNiwgNjcsIDMzLCA0LCAxLCAyNDYsIDQ0LCAzMywgNCwgMSwgMjUxLCA4NCwgNzQsIDMzLCA0LCAxLCAKKyAgICAyMTEsIDgsIDMzLCA0LCAxLCAyMzUsIDEzMiwgMzMsIDQsIDEsIDIzMiwgMTkzLCAzMywgNCwgMSwgMjI4LCAxODMsIDMzLCAKKyAgICA0LCAxLCAyMTUsIDE3NSwgMzMsIDQsIDEsIDIzNCwgNTQsIDMzLCA0LCAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDMzLCAKKyAgICA0LCAxLCAyMTksIDI1MywgNjksIDMzLCA0LCAxLCAyNDYsIDQwLCAzMywgNiwgMSwgMjI2LCAyMDUsIDMzLCA0LCAxLCAyMjYsIAorICAgIDIwNSwgMzMsIDYsIDEsIDIxMSwgNTksIDMzLCA0LCAxLCAyMTEsIDU5LCAzMywgNiwgMSwgMjM1LCAxOTAsIDc2LCAzMywgNCwgCisgICAgMSwgMjM1LCAxOTAsIDc2LCAzMywgNiwgMSwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjMyLCAxOTgsIDIxMCwgCisgICAgMTgzLCAzMywgNiwgMSwgMjM1LCAxOTAsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAyMzIsIAorICAgIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUyLCAxLCAyMTAsIDE4MywgCisgICAgMzMsIDYsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzMsIDIzOSwgMzMsIDQsIDEsIDIzMywgMjM5LCAzMywgNiwgMSwgMjI0LCAxNjQsIDMzLCA0LCAKKyAgICAxLCAyMjQsIDE2NCwgMzMsIDYsIDEsIDI0NCwgOTAsIDMzLCA0LCAxLCAyNDQsIDkwLCAzMywgNiwgMSwgMjM1LCAxNTIsIAorICAgIDMzLCA0LCAxLCAyMzUsIDE1MiwgMzMsIDYsIDEsIDIzNSwgMTUzLCAyLCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDMzLCA0LCAKKyAgICAxLCAyMzUsIDE1MywgMiwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzMywgNiwgMSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMTQsIAorICAgIDIwNSwgMzMsIDYsIDEsIDIyMiwgMTg3LCAyMjYsIDIwNSwgMzMsIDQsIDEsIDIyMiwgMTg3LCAyMjYsIDIwNSwgMzMsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDY2LCAzMywgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNiwgNjYsIDMzLCA2LCAxLCAyMjYsIAorICAgIDE0NCwgMzMsIDQsIDEsIDIyNiwgMTQ0LCAzMywgNiwgMSwgMjM0LCAxMiwgMzMsIDQsIDEsIDIzNCwgMTIsIDMzLCAyMTYsIAorICAgIDE0NywgNTAsIDM4LCAzMywgMjE2LCA2NiwgMzgsIDMzLCAyMjYsIDY5LCAzOCwgMzMsIDI0OCwgMTYyLCAyMjUsIDIxLCAzOCwgCisgICAgMzMsIDIyNCwgMTU4LCAyMjUsIDIxLCAzOCwgMzMsIDIyNSwgNiwgMzgsIDMzLCAyNDAsIDIxOCwgMjE2LCAxNDcsIDUwLCAKKyAgICAzOCwgMzMsIDIzMCwgMTk2LCA1MCwgMzMsIDYsIDEsIDIxOSwgMjUzLCAyNDAsIDE2MSwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIAorICAgIDIxOSwgMjUzLCAyNDAsIDE2MSwgMiwgMjE3LCA3OCwgMzMsIDYsIDEsIDIyMCwgMTQ4LCA1MCwgMzMsIDQsIDEsIDIyMCwgCisgICAgMTQ4LCA1MCwgMzMsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIDExNSwgMzMsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIAorICAgIDExNSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyMTQsIDE1NiwgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMTQsIDE1NiwgCisgICAgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAKKyAgICAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA2LCAxLCAyMTAsIAorICAgIDc1LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgCisgICAgNDcsIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgMjQ4LCA0NywgMzMsIDQsIAorICAgIDEsIDIzNSwgMTksIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyMzUsIDE5LCAKKyAgICAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCA5MSwgMzMsIDQsIDEsIDIzNSwgMTksIDIsIDkxLCAzMywgNiwgMSwgCisgICAgMjUyLCAxMzIsIDE3NiwgMzMsIDQsIDEsIDI1MiwgMTMyLCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE1OSwgMiwgMjQ4LCA0NywgCisgICAgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyNDgsIDQ3LCAzMywgNiwgMjcsIDI0NSwgMTU5LCAyNDIsIDI0MywgMzMsIDQsIDI3LCAKKyAgICAyNDUsIDE1OSwgMjQyLCAyNDMsIDMzLCA2LCAxLCAyMjUsIDIyNSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDIyNSwgCisgICAgMjI1LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjU1LCAyOSwgMTYyLCAzMywgNCwgMSwgMjU1LCAyOSwgMTYyLCAKKyAgICAzMywgNiwgMSwgMjQ1LCA5MSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0NSwgOTEsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyMTcsIDI0LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjE3LCAyNCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxOCwgMTIzLCAKKyAgICA2OSwgMzMsIDQsIDEsIDIxOCwgMTIzLCA2OSwgMzMsIDYsIDEsIDIxOCwgMTIzLCAxMDQsIDIsIDkxLCAzMywgNCwgMSwgCisgICAgMjE4LCAxMjMsIDEwNCwgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDU2LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQyLCA1NiwgCisgICAgMiwgMjQ4LCA0NywgMzMsIDYsIDI3LCAyMTcsIDI0LCAyMTUsIDE3OSwgMzMsIDQsIDI3LCAyMTcsIDI0LCAyMTUsIDE3OSwgCisgICAgMzMsIDYsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyNTAsIDE0MCwgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjUwLCAxNDAsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIyMCwgMzUsIAorICAgIDMzLCA0LCAxLCAyMjAsIDM1LCAzMywgNiwgMSwgMjU1LCAyOSwgMjUwLCAxMzksIDMzLCA0LCAxLCAyNTUsIDI5LCAyNTAsIAorICAgIDEzOSwgMzMsIDYsIDEsIDI1NSwgMjksIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjU1LCAyOSwgMjUwLCAKKyAgICAxNDAsIDIsIDI0OCwgNDcsIDMzLCAxLCAyMjYsIDYyLCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNTQsIDMzLCA0LCAKKyAgICAxLCAyMTAsIDc1LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDEwMywgMzMsIDQsIDEsIDIzNSwgMTksIDIsIAorICAgIDEwMywgMzMsIDYsIDEsIDI0NSwgMTgzLCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDIxNywgNzgsIDMzLCAKKyAgICA2LCAxLCAyNDUsIDE1OSwgMiwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTU5LCAKKyAgICAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDIxNywgNzgsIDMzLCA2LCAxLCAyMzQsIDEzMywgMjUwLCAxMzksIAorICAgIDMzLCA0LCAxLCAyMzQsIDEzMywgMjUwLCAxMzksIDMzLCA2LCAxLCAyNDUsIDE2OCwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIAorICAgIDI0NSwgMTY4LCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjI2LCA2MiwgMzMsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTQsIDMzLCAKKyAgICA0LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCAzMywgNiwgMSwgMTE2LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxMTYsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDI3LCAxMTYsIDIzNiwgNjcsIDMzLCA0LCAyNywgMTE2LCAyMzYsIDY3LCAzMywgNiwgMSwgMjM2LCA2OCwgCisgICAgMiwgMjUxLCAxNTQsIDMzLCA0LCAxLCAyMzYsIDY4LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDIyMSwgMTk3LCAzMywgNCwgCisgICAgMSwgMjIxLCAxOTcsIDMzLCA2LCAxLCAyMjEsIDE5OCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjIxLCAxOTgsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIAorICAgIDIxMCwgOTUsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDI1NSwgMjksIDI0NiwgCisgICAgNDQsIDMzLCA0LCAxLCAyNTUsIDI5LCAyNDYsIDQ0LCAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCAzMywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDI0MCwgCisgICAgMTYxLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxNDQsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDE0NCwgMiwgMjQ4LCA5LCAzMywgCisgICAgNiwgMSwgMjUyLCAxNDIsIDc4LCAzMywgNCwgMSwgMjUyLCAxNDIsIDc4LCAzMywgNiwgMSwgMjUyLCAxNDIsIDE0NCwgMiwgCisgICAgMjQ4LCA5LCAzMywgNCwgMSwgMjUyLCAxNDIsIDE0NCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTYwLCAyLCAyNDgsIDksIDMzLCAKKyAgICA0LCAxLCAxNjAsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzcsIDMzLCA0LCAxLCAxMDQsIDIsIDIzMSwgCisgICAgMjM3LCAzMywgNiwgMSwgMTA0LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxMDQsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDEwNCwgCisgICAgMiwgNTIsIDE0MiwgMzMsIDQsIDEsIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDYsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDksIDMzLCAKKyAgICA0LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDIsIAorICAgIDI0NCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyMTgsIDEwNSwgMjIsIDEwMywgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMTgsIAorICAgIDEwNSwgMjIsIDEwMywgMzMsIDYsIDEsIDI0MiwgNTYsIDIsIDEwMywgMzMsIDQsIDEsIDI0MiwgNTYsIDIsIDEwMywgMzMsIAorICAgIDYsIDEsIDI0MiwgNTYsIDIsIDkxLCAzMywgNCwgMSwgMjQyLCA1NiwgMiwgOTEsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDgsIAorICAgIDk4LCAzMywgNCwgMSwgMjM0LCAyMCwgMjQ4LCA5OCwgMzMsIDYsIDEsIDIzNCwgMjAsIDI0NywgMTcwLCAzMywgNCwgMSwgCisgICAgMjM0LCAyMCwgMjQ3LCAxNzAsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTAsIDI3LCAzMywgNCwgMSwgMjM0LCAyMCwgMjEwLCAKKyAgICAyNywgMzMsIDYsIDEsIDIzNCwgMjAsIDI0NiwgMzgsIDMzLCA0LCAxLCAyMzQsIDIwLCAyNDYsIDM4LCAzMywgNiwgMSwgCisgICAgMjM0LCAyMCwgMjMyLCAxOTMsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMzIsIDE5MywgMzMsIDYsIDEsIDIzNCwgMjAsIDIyOCwgCisgICAgMTgzLCAzMywgNCwgMSwgMjM0LCAyMCwgMjI4LCAxODMsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTksIDExMSwgMzMsIDQsIDEsIAorICAgIDIzNCwgMjAsIDIxOSwgMTExLCAzMywgNiwgMSwgMjM0LCAyMCwgMjE2LCA2MSwgMzMsIDQsIDEsIDIzNCwgMjAsIDIxNiwgCisgICAgNjEsIDMzLCA2LCAxLCAyMjMsIDUyLCAyMTAsIDk0LCAzMywgNCwgMSwgMjIzLCA1MiwgMjEwLCA5NCwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTgzLCAyLCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE4MywgMiwgMTAzLCAzMywgNiwgMSwgMjMzLCA0LCAzMywgNCwgMSwgCisgICAgMjMzLCA0LCAzMywgNiwgMSwgMjIzLCA0MiwgMzMsIDQsIDEsIDIyMywgNDIsIDMzLCA2LCAxLCAyMTEsIDkyLCAzMywgNCwgCisgICAgMSwgMjExLCA5MiwgMzMsIDYsIDEsIDIyNCwgOTEsIDMzLCA0LCAxLCAyMjQsIDkxLCAzMywgNiwgMSwgMjEyLCAyMiwgMzMsIAorICAgIDQsIDEsIDIxMiwgMjIsIDMzLCA2LCAxLCAyNTQsIDE3NSwgMTc2LCAzMywgNCwgMSwgMjU0LCAxNzUsIDE3NiwgMzMsIDYsIAorICAgIDEsIDI0NSwgMTgzLCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCAKKyAgICA2LCAxLCAyNDUsIDE1OSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyMzAsIDIyOSwgMTAzLCAKKyAgICAzMywgNiwgMSwgMjI1LCAyMjUsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMjUsIDIyNSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIAorICAgIDIyMCwgMzYsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMjAsIDM2LCAyLCAyNDgsIDQ3LCAxNTAsIDYsIDEsIDI1MywgMTcyLCAKKyAgICAxNTAsIDYsIDEsIDI1MiwgNDcsIDE1MCwgNiwgMSwgMjQyLCAyMTAsIDE1MCwgNiwgMSwgMjQ4LCAyMjksIDE1MCwgNiwgMSwgCisgICAgMjQ1LCAyMjEsIDE1MCwgNiwgMSwgMjEwLCAxMTYsIDE1MCwgNiwgMSwgMjQ1LCAyMDUsIDE1MCwgNiwgMSwgMjQ1LCA3MywgCisgICAgMTUwLCA2LCAxLCAxMTIsIDE1MCwgNiwgMSwgMjEwLCA3NCwgMTUwLCA2LCAxLCAyMzUsIDIzNCwgMTUwLCA2LCAxLCAyMzIsIAorICAgIDE5NiwgMTUwLCA2LCAxLCAyMTEsIDE2MCwgMTUwLCA2LCAxLCAyNTEsIDQxLCAxNTAsIDYsIDEsIDIzNCwgMTcxLCAxNTAsIAorICAgIDYsIDEsIDI0MSwgNzUsIDE1MCwgNiwgMSwgMjM1LCAxNDcsIDE1MCwgNiwgMSwgMjQyLCAyNTMsIDE1MCwgNiwgMSwgMjUwLCAKKyAgICAxMzQsIDE1MCwgNiwgMSwgMjMxLCA2MywgMTUwLCA2LCAxLCAyMTEsIDgsIDE1MCwgNiwgMSwgMjI4LCA0NCwgMTUwLCA2LCAKKyAgICAxLCAyMjAsIDEwNCwgMTUwLCA2LCAxLCAyMTMsIDEzOCwgMTUwLCA2LCAxLCAyNTAsIDE2NSwgMTUwLCA2LCAxLCAyMjUsIAorICAgIDIwOCwgMTUwLCA2LCAxLCAyMzUsIDExNiwgMTUwLCA2LCAxLCAyMDUsIDE1MCwgNiwgMSwgMjIxLCAxNjMsIDE1MCwgNiwgMSwgCisgICAgMjEzLCAxNzksIDE1MCwgNiwgMSwgMjE2LCA2MywgMTUwLCA2LCAxLCAyMjMsIDk4LCAxNTAsIDYsIDEsIDI0OSwgMjQ2LCAKKyAgICAxNTAsIDYsIDEsIDIxMCwgMjQ5LCAxNTAsIDYsIDEsIDIyNSwgNDksIDE1MCwgNiwgMSwgMjM0LCAxODIsIDE1MCwgNiwgMSwgCisgICAgMjI2LCAyMjYsIDE1MCwgNiwgMSwgMjQ0LCAxNTAsIDE1MCwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjM2LCAxNTAsIDI1NCwgCisgICAgNjUsIDE1MCwgMjQ1LCAxNjIsIDc5LCAxNTAsIDI0NSwgMzksIDc5LCAxNTAsIDI0OSwgMjI3LCAxNTAsIDIyNCwgMTYsIDc5LCAKKyAgICAxNTAsIDI1NSwgMzAsIDc5LCAxNTAsIDQsIDEsIDI1MywgMTcyLCAxNTAsIDQsIDEsIDI1MiwgNDcsIDE1MCwgNCwgMSwgCisgICAgMjQyLCAyMTAsIDE1MCwgNCwgMSwgMjQ4LCAyMjksIDE1MCwgNCwgMSwgMjQ1LCAyMjEsIDE1MCwgNCwgMSwgMjEwLCAxMTYsIAorICAgIDE1MCwgNCwgMSwgMjQ1LCAyMDUsIDE1MCwgNCwgMSwgMjQ1LCA3MywgMTUwLCA0LCAxLCAxMTIsIDE1MCwgNCwgMSwgMjEwLCAKKyAgICA3NCwgMTUwLCA0LCAxLCAyMzUsIDIzNCwgMTUwLCA0LCAxLCAyMzIsIDE5NiwgMTUwLCA0LCAxLCAyMTEsIDE2MCwgMTUwLCAKKyAgICA0LCAxLCAyNTEsIDQxLCAxNTAsIDQsIDEsIDIzNCwgMTcxLCAxNTAsIDQsIDEsIDI0MSwgNzUsIDE1MCwgNCwgMSwgMjM1LCAKKyAgICAxNDcsIDE1MCwgNCwgMSwgMjQyLCAyNTMsIDE1MCwgNCwgMSwgMjUwLCAxMzQsIDE1MCwgNCwgMSwgMjMxLCA2MywgMTUwLCAKKyAgICA0LCAxLCAyMTEsIDgsIDE1MCwgNCwgMSwgMjI4LCA0NCwgMTUwLCA0LCAxLCAyMjAsIDEwNCwgMTUwLCA0LCAxLCAyMTMsIAorICAgIDEzOCwgMTUwLCA0LCAxLCAyNTAsIDE2NSwgMTUwLCA0LCAxLCAyMjUsIDIwOCwgMTUwLCA0LCAxLCAyMzUsIDExNiwgMTUwLCAKKyAgICA0LCAxLCAyMDUsIDE1MCwgNCwgMSwgMjIxLCAxNjMsIDE1MCwgNCwgMSwgMjEzLCAxNzksIDE1MCwgNCwgMSwgMjE2LCA2MywgCisgICAgMTUwLCA0LCAxLCAyMjMsIDk4LCAxNTAsIDQsIDEsIDI0OSwgMjQ2LCAxNTAsIDQsIDEsIDIxMCwgMjQ5LCAxNTAsIDQsIDEsIAorICAgIDIyNSwgNDksIDE1MCwgNCwgMSwgMjM0LCAxODIsIDE1MCwgNCwgMSwgMjI2LCAyMjYsIDE1MCwgNCwgMSwgMjQ0LCAxNTAsIAorICAgIDE1MCwgNCwgMjcsIDI0NSwgMjIyLCAyMTAsIDI0OSwgMTUwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE1MCwgMjQwLCAxNzUsIAorICAgIDE1MCwgMjQ2LCAxMDMsIDUwLCA5NCwgMjU1LCAyNCwgMjQ1LCA2NSwgOTQsIDI1NSwgMjQsIDIyMSwgMTY0LCA5NCwgMjU1LCAKKyAgICAyNCwgMjIwLCA5MCwgOTQsIDI1NSwgMjQsIDIxMCwgMTA0LCAyMjQsIDc0LCA5NCwgMjU1LCAyNCwgMjEwLCAxMDQsIDI0MywgCisgICAgMTMyLCA5NCwgMjU1LCAyNCwgMjE2LCA3NiwgOTQsIDI1NSwgMjQsIDIyMywgNTAsIDk0LCAyNTUsIDI0LCAyMTAsIDEwMywgCisgICAgOTQsIDI1NSwgMjQsIDIyNSwgMjQ5LCA5NCwgMjU1LCAyNCwgMjExLCAyMCwgOTQsIDI1NSwgMjQsIDIxNiwgMjE1LCA5NCwgCisgICAgMjU1LCAyNCwgMjQzLCA0OCwgOTQsIDI1NSwgMjQsIDI0MywgNDksIDIzMCwgNzQsIDk0LCAyNTUsIDI0LCAyNDMsIDQ2LCAKKyAgICA5NCwgMjU1LCAyNCwgMjI0LCA3NSwgMjI2LCAyMCwgOTQsIDI1NSwgMjQsIDIxNiwgMjU0LCAyNDMsIDYzLCA5NCwgMjU1LCAKKyAgICAyNCwgMjI1LCAyMzAsIDk0LCAyNTUsIDI0LCAyNTMsIDIwOCwgMjQyLCA0OCwgOTQsIDI1NSwgMjQsIDIzMCwgODQsIDk0LCAKKyAgICAyNTUsIDI0LCAyMzEsIDIxMywgOTQsIDI1NSwgMjQsIDIzMSwgNTQsIDk0LCAyNTUsIDI0LCAyMzEsIDU1LCAyMzQsIDE4MywgCisgICAgOTQsIDI1NSwgMjQsIDI0OCwgMTcxLCA5NCwgMjU1LCAyNCwgMjI0LCA4NiwgOTQsIDI1NSwgMjQsIDIxNiwgMjU0LCAyMjQsIAorICAgIDcwLCA5NCwgMjU1LCAyNCwgMjExLCAzMCwgMjUyLCA0OCwgMjEwLCAyMzAsIDk0LCAyNTUsIDI0LCAyMjYsIDIxMSwgOTQsIAorICAgIDI1NSwgMjQsIDIzNiwgMjYsIDk0LCAyNTUsIDI0LCAyNDgsIDc4LCA5NCwgMjU1LCAyNCwgMjEwLCAzMywgOTQsIDE2NCwgCisgICAgMjMxLCAxNDgsIDI1MCwgNDMsIDk0LCAyMjUsIDE0LCAyMjAsIDM4LCA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjEsIDE2NCwgCisgICAgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjI1LCAyNDMsIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyNCwgNzksIDk0LCAyMjUsIDE0LCAKKyAgICAyNDEsIDE2NSwgOTQsIDIyNSwgMTQsIDIxNSwgMTc3LCA5NCwgMjI1LCAxNCwgMjIxLCAxNjQsIDk0LCAyMjUsIDE0LCAyMjUsIAorICAgIDI0MywgOTQsIDIyNSwgMTQsIDIyNCwgNzksIDk0LCAyMjUsIDE0LCAyNDEsIDY4LCA5NCwgMjI1LCAxNCwgMjQxLCA2OSwgCisgICAgMjQyLCAzLCAzMSwgMjE0LCAzLCA5NCwgMjI1LCAxNCwgMjI0LCAyMCwgOTQsIDIyNSwgMTQsIDI0OCwgMjE2LCAxNzcsIAorICAgIDIzMSwgMTc2LCA5NCwgMjI1LCAxNCwgMjMxLCA0MywgOTQsIDIyNCwgMTQ0LCAyMzEsIDE3MywgOTQsIDIyNSwgMTQsIDIyMywgCisgICAgMTcyLCA5NCwgMjI0LCAxNDQsIDIyNSwgMjUxLCA5NCwgMjI1LCAxNCwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAyMjUsIDE0LCAKKyAgICAyMTksIDE2MSwgMjQ3LCAxMjgsIDk0LCAyMjQsIDE0NCwgMjE5LCA1NSwgMjI1LCAyNDUsIDk0LCAxNjQsIDIxNCwgMTYwLCAKKyAgICAyNDcsIDEyOCwgOTQsIDE2NCwgMjMyLCAxMTQsIDI0NywgMTI4LCA5NCwgMjI0LCAxNDQsIDIyNywgMTk5LCAyNDIsIDQ3LCAKKyAgICA5NCwgMjI1LCAxNCwgMjI0LCA4MCwgMjI0LCA3NCwgOTQsIDEsIDI1NCwgMTc5LCA5NCwgMSwgMjUyLCAzNiwgOTQsIDEsIAorICAgIDI0MiwgMjA4LCA5NCwgMSwgMjQ4LCAxOTcsIDk0LCAxLCAyNDEsIDI0NSwgOTQsIDEsIDIxNCwgMywgOTQsIDEsIDIxMCwgCisgICAgOTcsIDk0LCAxLCAyNDEsIDIwNCwgOTQsIDEsIDIxNiwgMjMxLCA5NCwgMSwgMjEwLCAyMzMsIDk0LCAxLCA0MCwgMjM1LCAwLCAKKyAgICA5NCwgMSwgMjM1LCAwLCA5NCwgMSwgMjMzLCAxMDAsIDk0LCAxLCA0MCwgMjMxLCA3MCwgOTQsIDEsIDIzMSwgNzAsIDk0LCAKKyAgICAxLCA0MCwgMjI3LCAxOTgsIDk0LCAxLCAyMjcsIDE5OCwgOTQsIDEsIDIyMSwgMjUxLCA5NCwgMSwgMjUzLCAxNzAsIDk0LCAKKyAgICAxLCA0MCwgMjI1LCAyMjQsIDk0LCAxLCAyMjUsIDIyNCwgOTQsIDEsIDQwLCAyMTUsIDE4MCwgOTQsIDEsIDIxNSwgMTgwLCAKKyAgICA5NCwgMSwgMjI0LCA0MiwgOTQsIDEsIDIyMywgNzAsIDk0LCAxLCAyMjAsIDIyLCA5NCwgMSwgMjE3LCAzOSwgOTQsIDI3LCAKKyAgICAyMTEsIDYsIDUyLCAyMTQsIDMsIDk0LCAyNywgMjExLCA2LCAyMTQsIDQsIDIxMCwgMjMzLCA5NCwgMjcsIDIxMSwgNiwgNTIsIAorICAgIDIxMCwgMjMzLCA5NCwgMjI0LCAxNDQsIDI0MywgNDgsIDk0LCAyMjQsIDE0NCwgMjQzLCA0NiwgOSwgNTQsIDUwLCA5LCA1LCAKKyAgICAyMjEsIDI0NCwgOSwgMjQ0LCAzOCwgMjMxLCAxNTksIDksIDUsIDIyMiwgMjUsIDksIDUsIDIyMSwgMjQ3LCAyNTQsIDQ1LCAKKyAgICAyNDksIDExNywgMjIyLCAxOTUsIDI1NCwgNDUsIDI0NCwgMTIsIDIyMiwgMTk1LCA5LCAyMjMsIDEzNywgMjU0LCA0NSwgCisgICAgMjI1LCAxODYsIDIzMCwgMTk4LCA1MCwgMjU0LCA0NSwgMjI1LCAxODYsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgNTAsIDI1NCwgCisgICAgMjMwLCA1MCwgOSwgMjQ5LCAyMjcsIDksIDI0OCwgMTU4LCAyMjAsIDEzOSwgOSwgMjI1LCAxNiwgMjEzLCAyNDEsIDUwLCA5LCAKKyAgICA1LCAyMzAsIDE3OSwgOSwgNSwgMjIyLCA1LCAyNTQsIDE4MSwgMjEyLCA0NSwgOSwgNSwgMjU0LCAxODEsIDI1MywgMjI5LCAKKyAgICA5LCA1LCAyMjMsIDE3MCwgMjU0LCAxODAsIDksIDUsIDIyMywgMTc4LCAyNTQsIDE2MSwgMjU0LCAxMTIsIDksIDUsIDIxNywgCisgICAgNzEsIDksIDQsIDEyNSwgMjE3LCA4MSwgOSwgNCwgMTI1LCAyNywgMTA5LCAyLCAyMzMsIDEwOSwgMiwgMjExLCA0MywgOSwgCisgICAgNCwgMTI1LCAyMTAsIDEwOCwgOSwgNCwgMjQ0LCAxNzMsIDksIDQsIDI0OCwgMTkyLCA5LCA0LCAyMzQsIDIxMSwgOSwgMjIwLCAKKyAgICAxNTIsIDksIDEsIDc5LCA5LCAyMTUsIDIxMiwgNTksIDIyNCwgMTQ0LCA3OSwgOSwgMjI0LCAxNiwgNzksIDksIDEsIDIzNCwgCisgICAgMjE1LCAyMTEsIDQzLCA5LCAxLCAyNDIsIDI2LCA5LCAxLCAxMDksIDIsIDIzMSwgMjMzLCA0OCwgOSwgMSwgMTA5LCAyLCAKKyAgICAxODIsIDQ4LCA5LCAxLCAyMTIsIDMxLCAyLCAxODIsIDQ4LCA5LCAxLCAxMDksIDIsIDE4MiwgNTEsIDksIDEsIDc3LCAyLCAKKyAgICAxODIsIDQ4LCA5LCAxLCAyNTQsIDE3OSwgOSwgMSwgMjUyLCA2MiwgOSwgMSwgMjE3LCA5LCAyMzEsIDE2OSwgOSwgMSwgCisgICAgMjE3LCA4LCA5LCAxLCAyMTYsIDE5MywgOSwgMSwgMjM1LCAxMjksIDksIDEsIDI0MiwgNDQsIDksIDEsIDIzNCwgMTM1LCA5LCAKKyAgICAxLCAyNDgsIDIwMywgOSwgMSwgMjE2LCAyMDMsIDksIDEsIDIyMywgOTgsIDksIDEsIDIxMCwgMTA4LCA5LCAxLCAyMjEsIAorICAgIDE2OCwgOSwgMSwgMjIwLCA2MSwgOSwgMSwgMjIyLCAyOCwgOSwgMSwgMjQ4LCAyMjQsIDksIDEsIDIxNywgODEsIDksIDEsIAorICAgIDIxMCwgMTExLCA5LCAxLCAyNTQsIDIwNSwgOSwgMSwgMjQyLCAyNTEsIDksIDEsIDIzNCwgMTgxLCAyLCAxMTMsIDE3MCwgCisgICAgNDgsIDksIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjM1LCAyMDAsIAorICAgIDIxNCwgMTA1LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAKKyAgICAxMzQsIDE3MCwgNDgsIDksIDIxNywgNDQsIDksIDEsIDI0NCwgMTUwLCA5LCAxLCAyMjQsIDg0LCA5LCAxLCAyMzUsIDAsIDksIAorICAgIDEsIDIzMywgMTA4LCA5LCAxLCAyMzEsIDgzLCA5LCAxLCAyMjgsIDY3LCA5LCAxLCAyNDEsIDIyNSwgOSwgMSwgMjEyLCAzMCwgCisgICAgOSwgMSwgMTA5LCAyMzEsIDE5NywgOSwgMSwgMjExLCA0MywgOSwgMjQ0LCAxNzEsIDksIDI0OCwgMTkwLCA5LCAyMzQsIAorICAgIDIwOSwgOSwgMjQ0LCAxNzMsIDksIDI0OCwgMTkyLCA5LCAyMzQsIDIxMSwgOSwgMjIwLCA5NSwgOSwgMjE4LCA0NiwgOSwgCisgICAgMjMxLCAyMzEsIDQ4LCA5LCAxODIsIDQ4LCA5LCAxODIsIDUxLCA5LCAyMTgsIDY2LCAyNTQsIDE3OSwgOSwgMjM1LCAyMDAsIAorICAgIDI0OCwgMTkyLCA5LCAxNjQsIDIyOCwgNjgsIDI0MiwgMjI1LCA5LCAyMDksIDI1NSwgOSwgMjUsIDUsIDQsIDIxNCwgMTA2LCAKKyAgICA0OCwgOSwgMjUsIDUsIDIzNSwgMjAwLCA0LCAyMTQsIDEwNiwgNDgsIDksIDI1LCA1LCA1OSwgNTEsIDksIDIyMywgNTIsIAorICAgIDI0OCwgMTkyLCA5LCAyNDQsIDE3NCwgMiwgMTEzLCAyNDcsIDEyNiwgOSwgMjEyLCAzMiwgMTgyLCA1MSwgMjU0LCA0NSwgCisgICAgMjEsIDIxMCwgODYsIDI1NCwgNDUsIDIxLCAxMTEsIDI1NCwgNDUsIDIxLCAxMDUsIDI1NCwgNDUsIDIxLCAxNTgsIDI1NCwgCisgICAgNDUsIDIxLCAxNjEsIDI1NCwgNDUsIDIxLCAxOTAsIDI1NCwgNDUsIDIxLCAxOTUsIDI1NCwgNDUsIDIxLCAxOTksIDI1NCwgCisgICAgNDUsIDIxLCAxOTYsIDI1NCwgNDUsIDIxLCAyMDEsIDksIDIyNSwgMTg1LCA1MCwgOSwgMjQ4LCA5MSwgMjIwLCAxMzksIDksIAorICAgIDIxNiwgMTQ3LCAyMjAsIDEzOSwgOSwgMjQ0LCA4OSwgMjI1LCAxMiwgMjE4LCAxNTgsIDksIDEsIDI0NywgMTI3LCAyNTIsIAorICAgIDYyLCA5LCAxLCAyNDcsIDEyNywgMjI0LCA4NCwgOSwgMSwgMjE4LCAyNCwgMjU0LCAxNzksIDksIDEsIDEwOSwgMjEyLCA0NiwgCisgICAgOSwgMSwgMTA5LCAyLCAyMTIsIDMyLCAxODIsIDQ4LCA5LCAxLCAxMDksIDIsIDIxMiwgMzIsIDE4MiwgNTEsIDksIDEsIAorICAgIDEyNSwgMjQyLCAyNiwgOSwgMSwgMTI1LCAxODIsIDI1NCwgMTc5LCA5LCAxLCAxMjUsIDE4MiwgMjEyLCAzMCwgOSwgMSwgCisgICAgMTA0LCAyLCAxODIsIDQ4LCA5LCAxLCAxMjUsIDE4MiwgMjExLCA0MywgOSwgMSwgMjE1LCAxNDksIDksIDEsIDIxNSwgMTQ3LCAKKyAgICA5LCAxLCAyNTIsIDcyLCA5LCAxLCAyMTcsIDksIDIsIDIyMiwgMjM2LCA5LCAxLCAyMTcsIDksIDIsIDEzNCwgMTcwLCA3MiwgCisgICAgMjQ2LCAxMTEsIDksIDEsIDIyNSwgMjA4LCA5LCAxLCAyMTcsIDYsIDksIDEsIDI1MiwgNjAsIDksIDEsIDEyMiwgMiwgMTgyLCAKKyAgICA0OCwgOSwgMSwgMTIyLCAyLCAxMTMsIDE3MCwgNjcsIDQ4LCA5LCAxLCAyMjcsIDE1NywgOSwgMSwgMjQ2LCA1MSwgOSwgMSwgCisgICAgMTIyLCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIxNywgMjcsIDksIDEsIDIxNywgMjUsIDksIDEsIDI0OCwgMTM4LCA5LCAxLCAKKyAgICAyNDgsIDIwNCwgMiwgMjIyLCAyMzYsIDksIDEsIDI0OCwgMjA0LCAyLCA1OSwgNTEsIDksIDEsIDI0OCwgMjA0LCAyLCA1OSwgCisgICAgMjUyLCA1MSwgMjIsIDQsIDIxNywgODEsIDksIDEsIDI0OCwgMjA5LCA5LCAxLCAyNDgsIDE0MCwgOSwgMSwgMjQ2LCA3OCwgCisgICAgOSwgMSwgMjQ4LCAyMDQsIDIsIDEzNCwgMTcwLCA3MiwgMjQ2LCAxMTEsIDksIDEsIDI0OCwgMjA0LCAyLCAyNDQsIDE5LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyMjIsIDE3MywgOSwgMSwgMjIzLCA5OSwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIyMywgOTksIDIsIAorICAgIDIyMiwgMjM2LCA5LCAxLCAyMjMsIDk5LCAyLCA1OSwgNTEsIDksIDEsIDIyMywgOTksIDIsIDQsIDIxNCwgMTA2LCA1MSwgOSwgCisgICAgMSwgMjIzLCA5OSwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDExMywgMTcwLCA0OCwgCisgICAgOSwgMSwgMjM1LCAxMjYsIDksIDEsIDIyMywgOTksIDIsIDI0NCwgMTksIDE3MCwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAKKyAgICA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjIxLCAxNjksIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjIxLCAxNjksIAorICAgIDIsIDEzNCwgMTcwLCAyNTIsIDUxLCAyMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMjIsIDI5LCAyLCAxMTMsIDE3MCwgNTEsIAorICAgIDksIDEsIDIyMiwgMjksIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjE3LCA4MiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDEsIDI0NCwgMTUxLCAyLCAKKyAgICA1OSwgMjMwLCAxMTQsIDUxLCA5LCAxLCAyNDQsIDE1MSwgMiwgNTksIDUxLCA5LCAxLCAyMTMsIDI0OCwgOSwgMSwgMjQ0LCAKKyAgICAxNTEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjI1LCAyMDYsIDksIDEsIDIyNCwgODUsIDIsIDU5LCA0OCwgOSwgMSwgCisgICAgMjI0LCA4NSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzQsIDE4MCwgOSwgMSwgMjE3LCAyNTEsIDIzNSwgMCwgOSwgMSwgCisgICAgMjM1LCAxLCAyLCAyMjIsIDIzNiwgOSwgMSwgMjM1LCAxLCAyLCA1OSwgNDgsIDksIDEsIDIyOSwgODQsIDksIDEsIDIzNSwgCisgICAgMSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyNDMsIDEyOSwgOSwgMSwgMjQzLCAxMzAsIDIsIDIyMiwgMjM2LCA5LCAxLCAKKyAgICAyMjksIDcsIDksIDEsIDI0MywgMTMwLCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDI0MiwgMTA4LCA5LCAxLCAyNDMsIDEzMCwgCisgICAgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIzMywgMTA5LCAyLCA1OSwgCisgICAgNDgsIDksIDEsIDIzMywgMTA5LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIzMywgMTA5LCAyLCAxMzQsIDE3MCwgNTEsIDksIAorICAgIDEsIDIyOCwgNjgsIDIsIDU5LCA1MSwgOSwgMSwgMjI4LCA2OCwgMjQyLCAyMjUsIDksIDEsIDIyMiwgMjE2LCA5LCAxLCAKKyAgICAyMjgsIDY4LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjI4LCA2OCwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNDEsIDIyNiwgCisgICAgMjQ3LCAxNDksIDksIDEsIDIxNywgMjgsIDIsIDU5LCA0OCwgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCA0OCwgOSwgMSwgMjQxLCAKKyAgICAyMjYsIDI0MiwgMTc4LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDIsIDE4MiwgNDgsIDksIDEsIDIxNywgOSwgMjMxLCAKKyAgICAxNzAsIDI0MiwgMTc4LCA5LCAxLCAyMTIsIDMxLCAyLCAyMjIsIDIzNiwgOSwgMSwgMjM0LCA3OSwgMjI2LCAyMzgsIDksIDEsIAorICAgIDIyNiwgMjM4LCA5LCAxLCA2OSwgOSwgMSwgMjEwLCAyMTIsIDksIDEsIDIzNCwgNzksIDIxMCwgMjEyLCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDIxMywgMjU1LCA5LCAxLCAyNDQsIDE3NiwgMjExLCA0MywgOSwgMSwgNzcsIAorICAgIDIsIDIxNywgNzgsIDksIDEsIDc3LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjEyLCAzMSwgMiwgNTksIDQ4LCA5LCAxLCA3NiwgCisgICAgOSwgMSwgNzcsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgNzcsIDI1MiwgMTQwLCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIAorICAgIDE4MiwgNDgsIDksIDI0MywgMjM2LCAyMTgsIDEzMSwgOSwgMSwgMjU0LCAyNTIsIDksIDQsIDEyNSwgMjcsIDIyMiwgMjksIAorICAgIDIsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk3LCA5LCA0LCAxMjUsIDI3LCAyMjQsIDg1LCAyLCAyMzMsIDEwOSwgMiwgCisgICAgMTA5LCAyMzEsIDE5NywgOSwgNCwgMTI1LCA2NiwgNjUsIDE3LCA5LCA0LCAxMjUsIDIzMywgMTA5LCAyNTQsIDE3OSwgOSwgCisgICAgNCwgMTI1LCAyMzUsIDEyOSwgOSwgNCwgMTI1LCAxMzQsIDI0NywgMTI2LCA5LCA0LCAxMjUsIDIyMSwgMTY4LCA5LCAyNDUsIAorICAgIDE1MSwgNjQsIDI1MywgMTc0LCA5LCAyMTgsIDE1NCwgNjQsIDIyMiwgMTQwLCAyNDUsIDE4MywgMjQxLCAxNjIsIDksIDQsIAorICAgIDEyNSwgMjIyLCAxODUsIDIxMCwgODYsIDksIDQsIDEyNSwgMjE0LCAxNTksIDIyMywgMTE4LCAyMTAsIDg2LCA5LCA0LCAKKyAgICAxMjUsIDI0NywgMTI3LCAyNDEsIDI0MywgNjQsIDIzNCwgMTM1LCA5LCA0LCAxMjUsIDY2LCA1MywgMTcsIDksIDQsIDEyMSwgCisgICAgMjIxLCAxNjgsIDksIDQsIDEyNSwgMjMxLCAyMzIsIDksIDQsIDIxMiwgMzAsIDksIDQsIDIxMSwgNDMsIDksIDQsIDEyNSwgCisgICAgMjExLCA0MywgOSwgNCwgMTI1LCAyMjgsIDY3LCA5LCAyMjUsIDQ0LCA2NCwgMjIyLCAxNSwgOSwgMjQ1LCAxNjAsIDI1MCwgCisgICAgMTgzLCAxMjEsIDIxOCwgMTMxLCA5LCAyNDUsIDE2MCwgMjUwLCAxODMsIDEyNSwgMjE4LCAxMzEsIDksIDIyMiwgMTg1LCAKKyAgICAxMjUsIDIxOCwgMTMyLCAyLCAyNDQsIDExMiwgMjUwLCAxODIsIDksIDQsIDEyMSwgMjMxLCA4MywgOSwgMSwgMjQ4LCAyMDQsIAorICAgIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgOSwgMSwgMjIzLCA5OSwgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCAyNDUsIDMwLCAKKyAgICAyNTQsIDQ1LCAyMSwgMjEwLCA4NiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIAorICAgIDEwNSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE1OCwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE2MSwgMjQ1LCAzMCwgMjU0LCAKKyAgICA0NSwgMjEsIDE5MCwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE5NSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE5OSwgMjQ1LCAKKyAgICAzMCwgMjU0LCA0NSwgMjEsIDE5NiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDIwMSwgOSwgMSwgMjIwLCA2MiwgMiwgNTksIAorICAgIDUxLCA5LCAxLCAyNDgsIDIyNSwgMiwgNTksIDUxLCA5LCAxLCAyNDIsIDI1MiwgMiwgNTksIDUxLCA5LCA1LCAyMTksIDE2MCwgCisgICAgMjU0LCAxMzQsIDksIDUsIDIxOSwgMTYwLCAyMjQsIDIzOCwgMjMxLCA2MywgOSwgMSwgMjQxLCAyMjYsIDIsIDIzNSwgMjAwLCAKKyAgICAyMTQsIDEwNSwgMTgzLCAyNDUsIDE1MSwgNjQsIDIyNiwgMTgsIDE4MywgMjE4LCAyMCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAKKyAgICAxODMsIDIxOCwgNjgsIDI0MywgMjM2LCAyMTgsIDEzMSwgMTgzLCAyMTgsIDIwLCAyNDksIDIzNCwgMTgzLCAyMTgsIDY4LCAKKyAgICAyNDksIDIzNCwgMTgzLCAyMDMsIDI0OSwgMjM0LCAxODMsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTgzLCAyNDksIAorICAgIDIzNSwgMjE5LCAxMDgsIDIyMiwgMjU0LCAxODMsIDIxOCwgMjAsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTgzLCAKKyAgICAyMTgsIDY4LCAyNDksIDIzNSwgMjE5LCAxMDgsIDIyMiwgMjU0LCAxODMsIDI0OSwgMTg4LCAxODMsIDI0MiwgOCwgMjI2LCAKKyAgICAyNTQsIDE4MywgMjQyLCA4LCAyMzEsIDQxLCAxODMsIDI0MiwgOCwgMjUzLCAyMjYsIDE4MywgMjU1LCAzMCwgNzksIDE4MywgCisgICAgMSwgMjU0LCAxODMsIDE4MywgMSwgMjE4LCAyNCwgMjU0LCAxODMsIDE4MywgMSwgMjUyLCAzMywgMTgzLCAxLCAyNDMsIAorICAgIDEyMCwgMTgzLCAxLCAyNDMsIDEyMSwgMjQzLCA5OCwgMTgzLCAxLCAyNDgsIDIwMCwgMTgzLCAxLCAyNDcsIDEyNywgMjQ4LCAKKyAgICAyMDEsIDIyMiwgMjMyLCAxODMsIDEsIDI0MSwgMjQ1LCAxODMsIDEsIDIxMiwgMzAsIDE4MywgMSwgMjEwLCAxMDgsIDE4MywgCisgICAgMSwgMjQxLCAyMDIsIDE4MywgMSwgMjE2LCAyMjcsIDE4MywgMSwgMjE2LCAyMjgsIDI0MywgOTgsIDE4MywgMSwgMjEwLCAKKyAgICAxOTksIDE4MywgMSwgMjEwLCAyMDAsIDI0MSwgMjQ1LCAxODMsIDEsIDIzNCwgMjMxLCAxODMsIDEsIDIzMywgMTA3LCAxODMsIAorICAgIDEsIDIzMCwgMTk1LCAxODMsIDEsIDIyNywgMTk4LCAxODMsIDEsIDIyMCwgMTQ1LCAxODMsIDEsIDQwLCAyMjAsIDE0NSwgCisgICAgMTgzLCAxLCA3NiwgMTgzLCAxLCAyMjUsIDIyNCwgMTgzLCAxLCAyMjMsIDUyLCAyMjUsIDIyNCwgMTgzLCAxLCAyMjIsIDI2LCAKKyAgICAxODMsIDEsIDIyNCwgNzgsIDE4MywgMSwgMjIyLCAyMzIsIDE4MywgMSwgMjIwLCAyMiwgMTgzLCAxLCAyMTcsIDM3LCAxODMsIAorICAgIDEsIDIyNSwgMTcyLCAyNTIsIDIwLCAxODMsIDEsIDIyNSwgMTcyLCAyNDIsIDI0OSwgMTgzLCAxLCAyMjUsIDE3MiwgMjQ4LCAKKyAgICAyOCwgMTgzLCAyMjQsIDE1NCwgNDgsIDE4MywgMjI0LCAxNTQsIDUxLCAxODMsIDIyNCwgMTU0LCAyNDYsIDEyNSwgMTgzLCAKKyAgICAyMTAsIDE3LCA0OCwgMTgzLCAyMTAsIDE3LCA1MSwgMTgzLCAyMTAsIDE3LCAyNDYsIDEyNSwgMTgzLCAyMjMsIDEzNCwgNDgsIAorICAgIDE4MywgMjIzLCAxMzQsIDUxLCAxODMsIDI0NiwgMTI2LCAyMTAsIDI0LCAyNDEsIDUxLCAxODMsIDI0NiwgMTI2LCAyMTAsIAorICAgIDI0LCAyNTQsIDExMywgMTgzLCAyNDEsIDI0OCwgNDgsIDE4MywgMjQxLCAyNDgsIDUxLCAxODMsIDI0MSwgMjQ3LCAyNDYsIAorICAgIDEyNSwgMTgzLCAyNDUsIDg3LCA0OCwgMTgzLCAyNDUsIDg3LCA1MSwgMTgzLCAyMjIsIDEwOSwgMTgzLCAyNDQsIDE0NCwgCisgICAgMjQ3LCAxMjgsIDE4MywgMjIzLCAyNTEsIDE4MywgMjIyLCAxMzYsIDE4MywgMTEzLCA2NywgMTcwLCA0OCwgMTgzLCAxMTMsIAorICAgIDY3LCAxNzAsIDUxLCAxODMsIDEzNCwgMTcwLCA0OCwgMTgzLCAxMzQsIDE3MCwgNTEsIDE4MywgMjI2LCAyNTIsIDIzMiwgCisgICAgMjIwLCA0OCwgMTgzLCAyMjYsIDI1MiwgMjMyLCAyMjAsIDUxLCAxODMsIDIzMCwgNjEsIDE4MywgMjUyLCAxMzksIDE4MywgCisgICAgMSwgMjE5LCA1MSwgMjEwLCA4MCwgMTgzLCAxLCAyMTksIDUxLCAyMzQsIDEyOCwgMTgzLCAxLCAyMTksIDUxLCAyNDQsIAorICAgIDE2MiwgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDI0MSwgMSwgNTEsIDksIDEsIDI1MiwgNjMsIDIsIDU5LCAyNTIsIAorICAgIDUxLCAyMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCAKKyAgICA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDI1MiwgNTEsIDIyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDI1MiwgNjMsIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyNTIsIDYzLCAyLCAyMzUsIAorICAgIDIwMCwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAyNTIsIDYzLCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMTIyLCAyLCAxMTMsIAorICAgIDE3MCwgNDgsIDksIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgOSwgMSwgMjQ4LCAyMDQsIAorICAgIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgMjUyLCA1MSwgMjIsIDQsIDIxNywgODEsIDksIDEsIDI0OCwgMjA0LCAyLCAyMzUsIAorICAgIDIwMCwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAyMjMsIDk5LCAyLCA5MSwgOSwgMSwgMjIxLCAxNjksIDIsIDI0NCwgMTksIAorICAgIDE3MCwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMzQsIDE3MCwgCisgICAgMjI1LCAxMCwgMjQ2LCAxMTIsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgCisgICAgMjQ0LCAxNTEsIDIsIDExMywgMTcwLCA1MSwgOSwgMSwgMjQ0LCAxNTEsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIAorICAgIDE1MywgNTEsIDksIDEsIDIzNCwgMTgxLCAyLCA1OSwgNDgsIDksIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgNDgsIDksIAorICAgIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCA5LCAxLCA2NiwgMiwgNTksIDQ4LCA5LCAKKyAgICAxLCA2NiwgMiwgNTksIDUxLCA5LCAxLCAyMjgsIDY4LCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDIyOCwgNjgsIDIsIDQsIAorICAgIDIxNywgODEsIDksIDEsIDIyOCwgNjgsIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTMwLCA5LCAxLCAKKyAgICAyMjMsIDk5LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAxODIsIDQ4LCA5LCAxLCAyMjEsIAorICAgIDE2OSwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCA1MSwgOSwgMSwgCisgICAgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCAyMiwgMTEzLCAyNDcsIDEyNiwgOSwgMSwgMjIxLCAxNjksIDIsIDQsIDksIDEsIAorICAgIDIxNywgODIsIDIyLCAxMTMsIDI0NywgMTI2LCA5LCAxLCAyMjMsIDk5LCAyLCA0LCA5LCAxLCAyMTcsIDgyLCAyMiwgMTEzLCAKKyAgICAyNDcsIDEyNiwgOSwgMSwgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCA0OCwgOSwgMSwgMTA5LCAyLCAyNDUsIDMwLCAyNTQsIAorICAgIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMTA5LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgMjQ0LCAKKyAgICAxNzYsIDc3LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyNDUsIAorICAgIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgCisgICAgMjQ0LCAxOSwgNTEsIDksIDEsIDIxMiwgMzEsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAyNDUsIDMwLCAKKyAgICAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCAKKyAgICA0OCwgOSwgMSwgMTIyLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjQ0LCAxOSwgNTEsIDksIDEsIDIyMSwgMTY5LCAyLCAKKyAgICAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjQ0LCAxOSwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIAorICAgIDksIDEsIDIzNSwgMSwgMiwgMTEzLCAxNzAsIDQ4LCAyMTYsIDIwNiwgMSwgMjQyLCA1MywgMjE2LCAyMDYsIDEsIDIyMCwgCisgICAgNzAsIDIxNiwgMjA2LCAxLCAyMjgsIDY2LCAyMTYsIDIwNiwgMSwgMjIzLCAxODcsIDIxNiwgMjA2LCAxLCAyNTIsIDE5NywgCisgICAgMjE2LCAyMDYsIDEsIDIzMywgMSwgMjE2LCAyMDYsIDEsIDIzNSwgMTQsIDIxNiwgMjA2LCAxLCAyNTQsIDE2OCwgMjE2LCAKKyAgICAyMDYsIDEsIDIxNCwgMjUsIDIxNiwgMjA2LCAxLCAyMzEsIDgyLCAyMTYsIDIwNiwgMSwgMjQ0LCAyMDIsIDIxNiwgMjA2LCAKKyAgICAxLCAyNDgsIDMxLCAyMTYsIDIwNiwgMSwgMjE2LCAyMDgsIDIxNiwgMjA2LCAxLCAyMzMsIDEzNywgMjE2LCAyMDYsIDEsIAorICAgIDI0MywgMTM4LCAyMTYsIDIwNiwgMSwgMjQyLCAxODQsIDIxNiwgMjA2LCAxLCAyMjEsIDE2NywgMjE2LCAyMDYsIDEsIDI0OCwgCisgICAgMTU2LCAyMTYsIDIwNiwgMSwgMjEwLCAxMDAsIDIxNiwgMjA2LCAxLCAyMTcsIDM4LCAyMTYsIDIwNiwgMSwgMjExLCAxMDMsIAorICAgIDIxNiwgMjA2LCAxLCAyMjUsIDIzNywgMjE2LCAyMDYsIDEsIDIzNSwgMTM0LCAyMTYsIDIwNiwgMSwgMjUwLCAxNDIsIDIxNiwgCisgICAgMjA2LCAxLCAyMTUsIDE1NiwgMjE2LCAyMDYsIDEsIDI0MSwgMTk1LCAyMTYsIDIwNiwgMSwgMjM0LCAxMzcsIDIxNiwgMjA2LCAKKyAgICAxLCAyMTYsIDIwNywgMjE2LCAyMDYsIDEsIDIxMCwgMTE1LCAyMTYsIDIwNiwgMSwgMjIwLCA2MCwgMjE2LCAyMDYsIDEsIAorICAgIDIyMiwgMzIsIDIxNiwgMjA2LCAxLCAyNDgsIDIyNywgMjE2LCAyMDYsIDEsIDExMiwgMjE2LCAyMDYsIDEsIDIxMCwgMjMsIAorICAgIDIxNiwgMjA2LCAxLCAyNTQsIDIwMiwgMjE2LCAyMDYsIDEsIDI0MiwgMjUwLCAyMTYsIDIwNiwgMSwgMjI0LCA4OCwgMjE2LCAKKyAgICAyMDYsIDEsIDIxMiwgNjMsIDIxNiwgMjA2LCAyNTUsIDMxLCAyMTYsIDIwNiwgMjU1LCA0NywgMjE2LCAyMDYsIDI0MCwgCisgICAgMTIxLCAyMTYsIDIwNiwgMjQ1LCAyMTYsIDIxNiwgMjA2LCAyMTQsIDIyMiwgMjE2LCAyMDYsIDIyNiwgMTg2LCAyMTYsIAorICAgIDIwNiwgMjQ1LCAyMjQsIDIxNiwgMjA2LCAyNDUsIDI0LCAyMTYsIDIwNiwgMjI2LCAyNTEsIDIxNiwgMjA2LCAyMjcsIDMsIAorICAgIDIxNiwgMjA2LCAyMTgsIDQ2LCAyMTYsIDIwNiwgMSwgMjI5LCAyMzAsIDIyOCwgMTQyLCAyMSwgMjEwLCA4NiwgMjI4LCAKKyAgICAxNDIsIDIxLCAxMTEsIDIyOCwgMTQyLCAyMSwgMTA1LCAyMjgsIDE0MiwgMjEsIDE1OCwgMjI4LCAxNDIsIDIxLCAxNjEsIAorICAgIDIyOCwgMTQyLCAyMSwgMTkwLCAyMjgsIDE0MiwgMjEsIDE5NSwgMjI4LCAxNDIsIDIxLCAxOTksIDIyOCwgMTQyLCAyMSwgCisgICAgMTk2LCAyMjgsIDE0MiwgMjEsIDIwMSwgMjI4LCAxNDIsIDEsIDYxLCAyMjgsIDE0MiwgMSwgMjQ1LCAyMTcsIDIyOCwgMTQyLCAKKyAgICAxLCA3NCwgMjI4LCAxNDIsIDEsIDc2LCAyMjgsIDE0MiwgMSwgNjksIDIyOCwgMTQyLCAxLCAyMjYsIDE4NywgMjI4LCAxNDIsIAorICAgIDEsIDc4LCAyMjgsIDE0MiwgMSwgMjQ4LCAyMTcsIDIyOCwgMTQyLCAxLCAyMzAsIDMwLCAyMjgsIDE0MiwgMSwgMjUyLCAKKyAgICAxOTksIDIyOCwgMTQyLCAxLCAxOTEsIDIyOCwgMTQyLCAxLCAyMTcsIDEwNiwgMjI4LCAxNDIsIDEsIDIzNSwgMTQ3LCAyMjgsIAorICAgIDE0MiwgMSwgMjUwLCAxNjUsIDIyOCwgMTQyLCAxLCAyNDgsIDIyOSwgMjI4LCAxNDIsIDEsIDIwNSwgMjI4LCAxNDIsIDEsIAorICAgIDIyMiwgMTgxLCAyMjgsIDE0MiwgMSwgMjA2LCAyMjgsIDE0MiwgMSwgMjQzLCA4NiwgMjI4LCAxNDIsIDEsIDI0NCwgMjA0LCAKKyAgICAyMjgsIDE0MiwgMSwgMTc2LCAyMjgsIDE0MiwgMSwgMjMzLCAxNDEsIDIyOCwgMTQyLCAxLCAyMjksIDIzNCwgMjExLCAyMjMsIAorICAgIDIyOCwgMTQyLCAxLCAxODYsIDIyOCwgMTQyLCAxLCAyMjcsIDE2OSwgMjI4LCAxNDIsIDEsIDE5OCwgMjI4LCAxNDIsIDEsIAorICAgIDE2MiwgMjI4LCAxNDIsIDEsIDIxMiwgNjUsIDIyOCwgMTQyLCAxLCAxOTIsIDIyOCwgMTQyLCAxLCAyMjcsIDE3MCwgMjExLCAKKyAgICAyMjMsIDIyOCwgMTQyLCAxLCAyMzUsIDY3LCAyMzUsIDE0NywgMjI4LCAxNDIsIDEsIDIzNSwgNjcsIDI1MCwgMTY1LCAyMjgsIAorICAgIDE0MiwgMSwgMjM1LCA2NywgMjA1LCAyMjgsIDE0MiwgMzgsIDIxOSwgMjUzLCAxMjUsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgCisgICAgMjE5LCAyNTMsIDEyMSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMTksIDI1MywgMjIyLCAyMzEsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjAwLCAyNDgsIDQ2LCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIwMCwgMTI1LCAyMTYsIDMxLCAyMjgsIAorICAgIDE0MiwgMzgsIDIwMCwgMTIxLCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIwMCwgMjIyLCAyMzEsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjI5LCAxOTgsIDc5LCAyMjgsIDE0MiwgMzgsIDUyLCA1OSwgNDgsIDIyOCwgMTQyLCAxMjUsIDEzOCwgMjU0LCAKKyAgICA2NSwgMjI4LCAxNDIsIDEyMSwgMTM4LCAyNTQsIDY1LCAyMjgsIDE0MiwgMTYsIDIyNiwgMTg4LCAyNDgsIDU4LCAyMjgsIAorICAgIDE0MiwgMTYsIDI0MywgODUsIDIyOCwgMTQyLCAyNDksIDIyNywgMjI4LCAxNDIsIDI0NSwgMzksIDc5LCAyMjgsIDE0MiwgCisgICAgMjMzLCAxMTQsIDIyMSwgMjU0LCAxLCAyNTQsIDE4NSwgMjIxLCAyNTQsIDEsIDI1MSwgMjM2LCAyMjEsIDI1NCwgMSwgMjQzLCAKKyAgICAxMTksIDIyMSwgMjU0LCAxLCAyNDgsIDIwMiwgMjIxLCAyNTQsIDEsIDIzNSwgMTU4LCAyMjEsIDI1NCwgMSwgMjUyLCAxOTcsIAorICAgIDIyMSwgMjU0LCAxLCAyMTAsIDg5LCAyMjEsIDI1NCwgMSwgMjM1LCAxNjYsIDIyMSwgMjU0LCAxLCAyMTYsIDY4LCAyMjEsIAorICAgIDI1NCwgMSwgMjEwLCAxODIsIDIyMSwgMjU0LCAxLCAyMzUsIDE1LCAyMjEsIDI1NCwgMSwgMjMzLCAxMzQsIDIyMSwgMjU0LCAKKyAgICAxLCAyMzAsIDE5NSwgMjIxLCAyNTQsIDEsIDIyNywgMTk4LCAyMjEsIDI1NCwgMSwgMjE5LCAxNTgsIDIyMSwgMjU0LCAxLCAKKyAgICAyMzYsIDYsIDIyMSwgMjU0LCAxLCAyNDQsIDEyOSwgMjIxLCAyNTQsIDEsIDIxNSwgMTgyLCAyMjEsIDI1NCwgMSwgMjI0LCAKKyAgICAxMywgMjIxLCAyNTQsIDEsIDIyMiwgMjMyLCAyMjEsIDI1NCwgMSwgMjIwLCA4NywgMjIxLCAyNTQsIDEsIDIxNywgMTAxLCAKKyAgICAyMjEsIDI1NCwgMTY0LCAyMzYsIDYsIDIyMSwgMjU0LCAxNjQsIDIzNiwgNSwgMjIxLCAyNTQsIDE2NCwgMjI2LCAyNDcsIAorICAgIDIyMSwgMjU0LCAxNjQsIDI0OCwgMjE1LCAyMjEsIDI1NCwgNTgsIDEsIDI0NSwgMTEzLCAyMTAsIDE4MiwgMjIxLCAyNTQsIAorICAgIDE2NCwgMjQ1LCAxMTMsIDIxMCwgMTgyLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNzYsIDIyMSwgMjU0LCAyNSwgNSwgNzYsIAorICAgIDIyMSwgMjU0LCAyNSwgNSwgMjI2LCAxMjIsIDI1NSwgODIsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCAyNTUsIDgyLCAyMjEsIAorICAgIDI1NCwgMjUsIDUsIDI1NSwgODIsIDIyMSwgMjU0LCAyNSwgNSwgMjI2LCAxMjIsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgCisgICAgNjEsIDIyMSwgMjU0LCAyNSwgNSwgNjEsIDIyMSwgMjU0LCA1OCwgMSwgMjE5LCAyNTMsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIAorICAgIDIxOSwgMjUzLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDY5LCAyMjEsIDI1NCwgMjUsIDUsIDY5LCAyMjEsIDI1NCwgCisgICAgNTgsIDEsIDc0LCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNzQsIDIyMSwgMjU0LCAyNSwgNSwgNzQsIDIyMSwgMjU0LCAyNSwgCisgICAgNSwgNzgsIDIyMSwgMjU0LCAyNSwgNSwgMjE4LCA0NiwgMjIxLCAyNTQsIDE2NCwgMjI5LCA5NywgMjIxLCAyNTQsIDIyNCwgCisgICAgMTQ0LCAyMjksIDk3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgMjI3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgMTIyLCAKKyAgICAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1MiwgMTIyLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1MywgMjA5LCAyMjEsIDI1NCwgCisgICAgMjI0LCAxNDQsIDIyMCwgMTAsIDIyMSwgMjU0LCAyNTUsIDMwLCA3OSwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMzEsIDczLCAKKyAgICAyMjQsIDQ4LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxMCwgMzEsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjI0LCA0OCwgMjIxLCAKKyAgICAyNTQsIDIyNCwgMTQ0LCAyMTAsIDExNCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTUsIDkwLCAyMjEsIDI1NCwgMjI0LCAxNDQsIAorICAgIDI1NCwgMTcsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjE5LCA1NSwgMjMxLCAxNTAsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjU0LCAKKyAgICAxMDgsIDIzMSwgMTg3LCAxLCAyNDIsIDMxLCAyMzEsIDE4NywgMSwgMjU1LCAzNCwgMjMxLCAxODcsIDEsIDI1NCwgMjI1LCAKKyAgICAyMzEsIDE4NywgMSwgMjU1LCA4LCAyMzEsIDE4NywgMSwgMjU0LCAyMTgsIDIzMSwgMTg3LCAxLCAyMTQsIDEyNCwgMjMxLCAKKyAgICAxODcsIDEsIDI1MywgMTY4LCAyMzEsIDE4NywgMSwgMjM1LCAxNjYsIDIzMSwgMTg3LCAxLCAyNTMsIDIwNiwgMjMxLCAxODcsIAorICAgIDEsIDI1NCwgMTkwLCAyMzEsIDE4NywgMSwgMjU0LCAxOTUsIDIzMSwgMTg3LCAxLCAyNTQsIDE4NywgMjMxLCAxODcsIDEsIAorICAgIDI1NCwgMTQ0LCAyMzEsIDE4NywgMSwgMjU0LCAxMzEsIDIzMSwgMTg3LCAxLCAyNTMsIDI0NSwgMjMxLCAxODcsIDEsIDIzNiwgCisgICAgNiwgMjMxLCAxODcsIDEsIDI1NCwgODAsIDIzMSwgMTg3LCAxLCAyNTMsIDIxNiwgMjMxLCAxODcsIDEsIDI1NCwgNTMsIAorICAgIDIzMSwgMTg3LCAxLCAyNTQsIDQ5LCAyMzEsIDE4NywgMSwgMjUzLCAyMzksIDIzMSwgMTg3LCAxLCAyNTMsIDIxNCwgMjMxLCAKKyAgICAxODcsIDEsIDI0NiwgNjMsIDIzMSwgMTg3LCAxLCAyMzUsIDgsIDIzMSwgMTg3LCAxLCAyNTQsIDIwNSwgMjMxLCAxODcsIAorICAgIDI1NCwgMjMxLCA3OSwgMjMxLCAxODcsIDIxMywgMTM2LCA3OSwgMjMxLCAxODcsIDI0MywgNjAsIDc5LCAyMzEsIDE4NywgCisgICAgMjI0LCAxNDMsIDksIDEsIDI1MiwgNjMsIDIsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMTUxLCAyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDIxNywgODIsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjQ0LCAxNTEsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMTM0LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyMjQsIDg1LCAyLCA1OSwgNTEsIDksIDEsIDIzMywgMTA5LCAyLCA1MiwgMTMwLCA5LCAxLCA2NiwgCisgICAgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCA3NywgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCAxODIsIDQ4LCA5LCAxLCA3NywgCisgICAgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDIzMiwgMTI5LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCA1OSwgMjExLCAyMzEsIDksIDEsIDIyMiwgMjAzLCAyMTEsIDQzLCA5LCAyNDksIDEwNywgMjQ0LCAxNzMsIDksIAorICAgIDI0OSwgMTA3LCAyNDgsIDE5MiwgOSwgMjQ5LCAxMDcsIDIzNCwgMjExLCA5LCAyNDksIDEwNywgMjQ0LCAxNzEsIDksIDI0OSwgCisgICAgMTA3LCAyNDgsIDE5MCwgOSwgMjQ5LCAxMDcsIDIzNCwgMjA5LCA5LCAxMzgsIDEyMywgNTksIDQ4LCA5LCAxMzgsIDExMywgCisgICAgMTcwLCA0OCwgOSwgMTM4LCAyMzIsIDEzMCwgNDgsIDksIDEzOCwgMTIzLCA1OSwgNTEsIDksIDEzOCwgMTEzLCAxNzAsIDUxLCAKKyAgICA5LCAxMzgsIDIzMiwgMTMwLCA1MSwgOSwgMjA0LCAyNDQsIDE3MSwgOSwgMjA0LCAyNDgsIDE5MCwgOSwgMjA0LCAyMzQsIAorICAgIDIwOSwgOSwgNCwgMTI1LCAyMTIsIDMwLCA5LCAyNDQsIDE3NCwgMiwgMjIyLCAyMzYsIDksIDI0NCwgMTc0LCAyLCA1OSwgCisgICAgNDgsIDksIDIzNCwgMjEyLCAyLCA1OSwgNTEsIDksIDQzLCAyNTQsIDIsIDQ4LCA5LCA0NCwgMjU0LCAyLCA0OCwgOSwgNDMsIAorICAgIDI1NCwgMiwgNTEsIDksIDQ0LCAyNTQsIDIsIDUxLCA5LCA1MiwgNDQsIDI1NCwgMiwgNDgsIDksIDUyLCA0NCwgMjU0LCAyLCAKKyAgICA3MiwgMiwgMjQ3LCAxMjgsIDksIDQ0LCAyNTQsIDIsIDcyLCAyLCAyNDcsIDEyOCwgOSwgMjQ4LCAxOTMsIDIsIDI0NywgCisgICAgMTI4LCA4NCwgNSwgMjM1LCAyMDAsIDI1MSwgNywgODQsIDUsIDI1MSwgNywgODQsIDUsIDI1NCwgODMsIDg0LCA1LCAyMTMsIAorICAgIDE0NywgODQsIDEsIDIxOSwgMjUzLCA2MSwgODQsIDEsIDYxLCA4NCwgMSwgMjU1LCA4MiwgODQsIDEsIDc0LCA4NCwgMSwgCisgICAgMjM2LCA0MCwgODQsIDEsIDY5LCA4NCwgMSwgMjE0LCAxMTgsIDg0LCAxLCAxNDksIDE1MywgODQsIDEsIDE0OSwgMTU2LCAKKyAgICA4NCwgMSwgMjUxLCAxMCwgNzYsIDg0LCAxLCAyMTksIDI1MywgNzYsIDg0LCAxLCA3NiwgODQsIDEsIDI1NCwgMjEwLCA4NCwgCisgICAgMSwgMjUxLCAxMCwgNzgsIDg0LCAxLCAyMTksIDI1MywgNzgsIDg0LCAxLCA3OCwgODQsIDEsIDI1MywgMjAwLCA4NCwgMSwgCisgICAgMTc2LCA4NCwgMSwgMjM0LCAxMzgsIDg0LCAxLCAyNDMsIDE0MiwgODQsIDEsIDI0MywgMCwgODQsIDEsIDIyOSwgODIsIDg0LCAKKyAgICAxLCAyNTEsIDQxLCA4NCwgMSwgMjUwLCAxNjUsIDg0LCAxLCAyMzUsIDE0NywgODQsIDEsIDIzNSwgMTIwLCA4NCwgMSwgCisgICAgMjI3LCAxNjksIDg0LCAxLCAyMTUsIDE1NywgODQsIDEsIDIxNSwgMTQ1LCA4NCwgMSwgMjQ4LCAxNDMsIDg0LCAxLCAyNDgsIAorICAgIDEyNywgODQsIDEsIDIyOCwgMTE1LCA4NCwgMSwgMjE3LCAxMDYsIDg0LCAxLCAyMTYsIDIwOSwgODQsIDEsIDI0OCwgMjI5LCAKKyAgICA4NCwgMSwgMjQ4LCAzMywgODQsIDEsIDE5OCwgODQsIDEsIDIyOCwgOTcsIDg0LCAxLCAxOTEsIDg0LCAxLCAyMjUsIDE1MCwgCisgICAgODQsIDEsIDI1MiwgMTk5LCA4NCwgMSwgMjUyLCAyNiwgODQsIDEsIDE4NiwgODQsIDEsIDE5MiwgODQsIDEsIDIwNSwgODQsIAorICAgIDEsIDIyMiwgMTgxLCA4NCwgMSwgMjMzLCAxNDEsIDg0LCAxLCAyMzIsIDE5MCwgODQsIDEsIDIzMiwgMTgxLCA4NCwgMSwgCisgICAgMjE0LCAyNywgODQsIDEsIDIyMCwgMTA0LCA4NCwgMSwgMjE4LCAyMjUsIDg0LCAxLCAyMDYsIDg0LCAxLCAxNjIsIDg0LCAKKyAgICAyNSwgNSwgMjI2LCAyMzgsIDg0LCAyNSwgNSwgMjI2LCAxODUsIDg0LCA1LCAyMjcsIDIwOSwgODQsIDUsIDI1MywgMTgzLCAKKyAgICA4NCwgMjUsIDUsIDI1NSwgODIsIDg0LCAyNSwgNSwgNzQsIDg0LCAyNSwgNSwgMjM2LCA0MCwgODQsIDI1LCA1LCA2OSwgODQsIAorICAgIDI1LCA1LCAyMTQsIDExOCwgODQsIDI1LCA1LCAxNDksIDE1MywgODQsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA4NCwgMjUsIAorICAgIDUsIDI1MSwgMTAsIDc2LCA4NCwgMjUsIDUsIDIxOSwgMjUzLCA3NiwgODQsIDI1LCA1LCA3NiwgODQsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgODQsIDI1LCA1LCAyNTEsIDEwLCA3OCwgODQsIDI1LCA1LCAyMTksIDI1MywgNzgsIDg0LCAyNSwgNSwgNzgsIDg0LCAKKyAgICAyNSwgNSwgMjUzLCAyMDAsIDg0LCA1LCAyMTMsIDE1MiwgODQsIDI1LCA1LCAyMjQsIDE4OCwgNzYsIDg0LCAyNSwgNSwgCisgICAgMjUzLCAxNzksIDg0LCAyMjYsIDIwOCwgODQsIDIxOCwgMTEzLCA1LCAyMTQsIDIxNiwgODQsIDIxOCwgMTEzLCA1LCAyNTQsIAorICAgIDg1LCA4NCwgMjQyLCAxNDQsIDI1NSwgMjMsIDg0LCAyNTUsIDEyLCAyNTUsIDIzLCA4NCwgMjUsIDUsIDI1MSwgMTAsIDIwMCwgCisgICAgNzYsIDg0LCAyNSwgNSwgMjE0LCAyMTQsIDg0LCAyNSwgNSwgMjE0LCAxMTcsIDg0LCAxLCAyMjQsIDkxLCA4NCwgMSwgMjM0LCAKKyAgICAxMjEsIDg0LCAxLCAyNDIsIDIzMywgODQsIDEsIDIxMCwgMTE2LCA4NCwgMSwgMjQ4LCAxMzIsIDg0LCAxLCAyMjMsIDQyLCAKKyAgICA4NCwgMSwgMjQ0LCAyMDQsIDg0LCAxLCAyMTAsIDE2OCwgODQsIDEsIDE0OSwgMjIyLCAxODIsIDg0LCAxLCAxNDksIDIzMiwgCisgICAgMTkxLCA4NCwgMjUsIDUsIDE0OSwgMTU2LCA4NCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDg0LCAyNDgsIDE4NiwgODQsIDUyLCAKKyAgICAyNDgsIDE4NiwgODQsIDIxLCAyMTAsIDg2LCA4NCwgMjEsIDExMSwgODQsIDIxLCAxMDUsIDg0LCAyMSwgMTU4LCA4NCwgMjEsIAorICAgIDE2MSwgODQsIDIxLCAxOTAsIDg0LCAyMSwgMTk1LCA4NCwgMjEsIDE5OSwgODQsIDIxLCAxOTYsIDg0LCAyMSwgMjAxLCA4NCwgCisgICAgMjU1LCAzMCwgNTAsIDg0LCA1LCAxMjUsIDIxOSwgMTksIDI0NywgMTI4LCA4NCwgMSwgMjUxLCAxMCwgNjEsIDg0LCAxLCAKKyAgICAyMjYsIDIzOCwgODQsIDEsIDIyNiwgMTg1LCA4NCwgMSwgMjUzLCAxNzksIDg0LCAxLCAyMTQsIDIxNCwgODQsIDEsIDIxNCwgCisgICAgMTE3LCA4NCwgMSwgMjEwLCA4MiwgODQsIDEsIDExNCwgMTkyLCA4NCwgMSwgMjQzLCAzNiwgODQsIDEsIDIzNSwgMTAyLCAKKyAgICA4NCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA4NCwgMSwgMjQ4LCAxMzMsIDg0LCAxLCAyNTIsIDExOSwgMTQ2LCA1LCAyNTEsIAorICAgIDcsIDE0NiwgNSwgMjU0LCA4MywgMTQ2LCA1LCAyMTMsIDE0NywgMTQ2LCAxLCA2MSwgMTQ2LCAxLCAyNTUsIDgyLCAxNDYsIAorICAgIDEsIDc0LCAxNDYsIDEsIDIzNiwgNDAsIDE0NiwgMSwgNjksIDE0NiwgMSwgMjE0LCAxMTgsIDE0NiwgMSwgMTQ5LCAxNTMsIAorICAgIDE0NiwgMSwgMTQ5LCAxNTYsIDE0NiwgMSwgNzYsIDE0NiwgMSwgMjU0LCAyMTAsIDE0NiwgMSwgNzgsIDE0NiwgMSwgMjUzLCAKKyAgICAyMDAsIDE0NiwgMSwgMTc2LCAxNDYsIDEsIDIzNCwgMTM4LCAxNDYsIDEsIDI0MywgMTQyLCAxNDYsIDEsIDI0MywgMCwgCisgICAgMTQ2LCAxLCAyMjksIDgyLCAxNDYsIDEsIDI1MSwgNDEsIDE0NiwgMSwgMjUwLCAxNjUsIDE0NiwgMSwgMjM1LCAxNDcsIAorICAgIDE0NiwgMSwgMjM1LCAxMjAsIDE0NiwgMSwgMjI3LCAxNjksIDE0NiwgMSwgMjE1LCAxNTcsIDE0NiwgMSwgMjE1LCAxNDUsIAorICAgIDE0NiwgMSwgMjQ4LCAxNDMsIDE0NiwgMSwgMjQ4LCAxMjcsIDE0NiwgMSwgMjI4LCAxMTUsIDE0NiwgMSwgMjE3LCAxMDYsIAorICAgIDE0NiwgMSwgMjE2LCAyMDksIDE0NiwgMSwgMjQ4LCAyMjksIDE0NiwgMSwgMjQ4LCAzMywgMTQ2LCAxLCAxOTgsIDE0NiwgMSwgCisgICAgMTkxLCAxNDYsIDEsIDIyNSwgMTUwLCAxNDYsIDEsIDI1MiwgMTk5LCAxNDYsIDEsIDI1MiwgMjYsIDE0NiwgMSwgMTg2LCAKKyAgICAxNDYsIDEsIDE5MiwgMTQ2LCAxLCAyMDUsIDE0NiwgMSwgMjMzLCAxNDEsIDE0NiwgMSwgMjIwLCAxMDQsIDE0NiwgMSwgCisgICAgMjE4LCAyMjUsIDE0NiwgMSwgMjA2LCAxNDYsIDEsIDE2MiwgMTQ2LCA1LCAyMjcsIDIwOSwgMTQ2LCA1LCAyNTMsIDE4MywgCisgICAgMTQ2LCAyNSwgNSwgMjU1LCA4MiwgMTQ2LCAyNSwgNSwgNzQsIDE0NiwgMjUsIDUsIDIzNiwgNDAsIDE0NiwgMjUsIDUsIDY5LCAKKyAgICAxNDYsIDI1LCA1LCAyMTQsIDExOCwgMTQ2LCAyNSwgNSwgMTQ5LCAxNTMsIDE0NiwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE0NiwgMjUsIDUsIDc2LCAxNDYsIDI1LCA1LCAyNTQsIDIxMCwgMTQ2LCAyNSwgNSwgNzgsIDE0NiwgMjUsIDUsIDI1MywgCisgICAgMjAwLCAxNDYsIDUsIDIxMywgMTUyLCAxNDYsIDEsIDIzNCwgMTMwLCAyMTcsIDEwNiwgMTQ2LCAyNTMsIDIwMSwgMjMzLCAKKyAgICAyOSwgNzksIDE0NiwgMSwgMjIyLCAxODEsIDE0NiwgMSwgMjIzLCA0MiwgMTQ2LCAxLCAyMTAsIDE2OCwgMTQ2LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCAxNDYsIDEsIDE0OSwgMjMyLCAxOTEsIDE0NiwgMjUsIDUsIDE0OSwgMTU2LCAxNDYsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxNDYsIDIxLCAyMTAsIDg2LCAxNDYsIDIxLCAxMTEsIDE0NiwgMjEsIDEwNSwgMTQ2LCAyMSwgMTU4LCAKKyAgICAxNDYsIDIxLCAxNjEsIDE0NiwgMjEsIDE5MCwgMTQ2LCAyMSwgMTk1LCAxNDYsIDIxLCAxOTksIDE0NiwgMjEsIDE5NiwgCisgICAgMTQ2LCAyMSwgMjAxLCAxNDYsIDEsIDIyMywgMTkxLCAyLCAyMzAsIDIyOSwgMjQ4LCA2LCAxNDYsIDEsIDIyMywgMTkxLCAyLCAKKyAgICAyMzIsIDExNCwgMjQ4LCA2LCAxNDYsIDIyMiwgMTIwLCA3OSwgMTQ2LCAyMjIsIDEyMCwgNTAsIDE0NiwgMjQ5LCAxMDYsIAorICAgIDIyNywgMjAxLCAxMTEsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxMDUsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAKKyAgICAxNTgsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxNjEsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxMjMsIDIzMywgMjIsIAorICAgIDIxNiwgMjAyLCAyMTYsIDE5NywgMjQ4LCA1NiwgMTQ2LCAyNDksIDEwNiwgMjQ4LCA1NywgMjE5LCAxMjEsIDE0NiwgMjM1LCAKKyAgICAxNjcsIDE0NiwgMjQzLCAxMTAsIDc5LCAxODUsIDUsIDI1NSwgNywgMjUxLCAyNTEsIDE4NSwgNSwgMjUxLCAyNTEsIDE4NSwgCisgICAgNSwgMjEzLCAxNDcsIDE4NSwgMSwgNjEsIDE4NSwgMSwgMjU1LCA4MiwgMTg1LCAxLCA3NCwgMTg1LCAxLCAyMzYsIDQwLCAKKyAgICAxODUsIDEsIDY5LCAxODUsIDEsIDIxNCwgMTE4LCAxODUsIDEsIDI0NSwgMjE3LCAxODUsIDEsIDI1NCwgMjEwLCAxODUsIDEsIAorICAgIDIyNiwgMTg3LCAxODUsIDEsIDI1MywgMjAwLCAxODUsIDEsIDE3NiwgMTg1LCAxLCAyMzQsIDEzOCwgMTg1LCAxLCAyNDMsIAorICAgIDE0MiwgMTg1LCAxLCAyNDMsIDAsIDE4NSwgMSwgMjI5LCA4MiwgMTg1LCAxLCAyNTEsIDQxLCAxODUsIDEsIDI1MCwgMTY1LCAKKyAgICAxODUsIDEsIDIzNSwgMTQ3LCAxODUsIDEsIDIzNSwgMTIwLCAxODUsIDEsIDIyNywgMTY5LCAxODUsIDEsIDIxNSwgMTU3LCAKKyAgICAxODUsIDEsIDIxNSwgMTQ1LCAxODUsIDEsIDI0OCwgMTQzLCAxODUsIDEsIDI0OCwgMTI3LCAxODUsIDEsIDIyOCwgMTE1LCAKKyAgICAxODUsIDEsIDIxNywgMTA2LCAxODUsIDEsIDIxNiwgMjA5LCAxODUsIDEsIDI0OCwgMjI5LCAxODUsIDEsIDI0OCwgMzMsIAorICAgIDE4NSwgMSwgMTk4LCAxODUsIDEsIDE5MSwgMTg1LCAxLCAyMjUsIDE1MCwgMTg1LCAxLCAyNTIsIDE5OSwgMTg1LCAxLCAKKyAgICAyNTIsIDI2LCAxODUsIDEsIDE4NiwgMTg1LCAxLCAxOTIsIDE4NSwgMSwgMjA1LCAxODUsIDEsIDIzMywgMTQxLCAxODUsIDEsIAorICAgIDIzMiwgMTkwLCAxODUsIDEsIDIxNCwgMjcsIDE4NSwgMSwgMjIwLCAxMDQsIDE4NSwgMSwgMjA2LCAxODUsIDEsIDE2MiwgCisgICAgMTg1LCA1LCAyMjcsIDIwOSwgMTg1LCAyNSwgNSwgMjU1LCA4MiwgMTg1LCAyNSwgNSwgNzQsIDE4NSwgMjUsIDUsIDIzNiwgCisgICAgNDAsIDE4NSwgMjUsIDUsIDY5LCAxODUsIDI1LCA1LCAyMTQsIDExOCwgMTg1LCAyNSwgNSwgMjQ1LCAyMTcsIDE4NSwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxODUsIDI1LCA1LCAyMjYsIDE4NywgMTg1LCAyNSwgNSwgMjUzLCAyMDAsIDE4NSwgNSwgMjEzLCAKKyAgICAxNTIsIDE4NSwgNSwgMjE0LCAyMTgsIDE4NSwgMSwgMjM0LCAxMjEsIDE4NSwgMSwgMjQyLCAyMzMsIDE4NSwgMSwgMjEwLCAKKyAgICAxMTYsIDE4NSwgMSwgMjIyLCAxODEsIDE4NSwgMSwgMjQ0LCAyMDQsIDE4NSwgMjEsIDIxMCwgODYsIDE4NSwgMjEsIDExMSwgCisgICAgMTg1LCAyMSwgMTA1LCAxODUsIDIxLCAxNTgsIDE4NSwgMjEsIDE2MSwgMTg1LCAyMSwgMTkwLCAxODUsIDIxLCAxOTUsIAorICAgIDE4NSwgMjEsIDE5OSwgMTg1LCAyMSwgMTk2LCAxODUsIDIxLCAyMDEsIDE4NSwgMjE2LCA3NSwgMTg1LCAyNTUsIDYsIDE4NSwgCisgICAgMjM1LCAxODUsIDE4NSwgMjE0LCAxNDYsIDE4NSwgMjQ1LCAxODksIDIyNiwgMTkyLCAxODUsIDUsIDIxMSwgNzgsIDE3MSwgCisgICAgNSwgMjUxLCA3LCAxNzEsIDUsIDI1NCwgODMsIDE3MSwgNSwgMjEzLCAxNDcsIDE3MSwgMSwgNjEsIDE3MSwgMSwgMjU1LCAKKyAgICA4MiwgMTcxLCAxLCA3NCwgMTcxLCAxLCAyMzYsIDQwLCAxNzEsIDEsIDY5LCAxNzEsIDEsIDIxNCwgMTE4LCAxNzEsIDEsIAorICAgIDE0OSwgMTUzLCAxNzEsIDEsIDE0OSwgMTU2LCAxNzEsIDI1LCAyNTEsIDEwLCA3NiwgMTcxLCAxLCA3NiwgMTcxLCAxLCAKKyAgICAyNTQsIDIxMCwgMTcxLCAyNSwgMjUxLCAxMCwgNzgsIDE3MSwgMSwgNzgsIDE3MSwgMSwgMjUzLCAyMDAsIDE3MSwgMSwgCisgICAgMTc2LCAxNzEsIDEsIDIzNCwgMTM4LCAxNzEsIDEsIDI0MywgMTQyLCAxNzEsIDEsIDI0MywgMCwgMTcxLCAxLCAyMjksIDgyLCAKKyAgICAxNzEsIDEsIDI1MSwgNDEsIDE3MSwgMSwgMjUwLCAxNjUsIDE3MSwgMSwgMjM1LCAxNDcsIDE3MSwgMSwgMjM1LCAxMjAsIAorICAgIDE3MSwgMSwgMjI3LCAxNjksIDE3MSwgMSwgMjE1LCAxNTcsIDE3MSwgMSwgMjE1LCAxNDUsIDE3MSwgMSwgMjQ4LCAxNDMsIAorICAgIDE3MSwgMSwgMjQ4LCAxMjcsIDE3MSwgMSwgMjI4LCAxMTUsIDE3MSwgMSwgMjE3LCAxMDYsIDE3MSwgMSwgMjE2LCAyMDksIAorICAgIDE3MSwgMSwgMjQ4LCAyMjksIDE3MSwgMSwgMjQ4LCAzMywgMTcxLCAxLCAxOTgsIDE3MSwgMSwgMTkxLCAxNzEsIDEsIDIyNSwgCisgICAgMTUwLCAxNzEsIDEsIDI1MiwgMTk5LCAxNzEsIDEsIDI1MiwgMjYsIDE3MSwgMSwgMTg2LCAxNzEsIDEsIDE5MiwgMTcxLCAxLCAKKyAgICAyMDUsIDE3MSwgMSwgMjMzLCAxNDEsIDE3MSwgMSwgMjMyLCAxOTAsIDE3MSwgMSwgMjE0LCAyNywgMTcxLCAxLCAyMjAsIAorICAgIDEwNCwgMTcxLCAxLCAyMTgsIDIyNSwgMTcxLCAxLCAyMDYsIDE3MSwgMSwgMTYyLCAxNzEsIDUsIDIyNywgMjA5LCAxNzEsIAorICAgIDUsIDI1MywgMTgzLCAxNzEsIDI1LCA1LCAyNTUsIDgyLCAxNzEsIDI1LCA1LCA3NCwgMTcxLCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMTcxLCAyNSwgNSwgNjksIDE3MSwgMjUsIDUsIDIxNCwgMTE4LCAxNzEsIDI1LCA1LCAxNDksIDE1MywgMTcxLCAyNSwgNSwgCisgICAgMTQ5LCAyMjIsIDE4MiwgMTcxLCAyNSwgNSwgMjUxLCAxMCwgNzYsIDE3MSwgMjUsIDUsIDc2LCAxNzEsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgMTcxLCAyNSwgNSwgMjUxLCAxMCwgNzgsIDE3MSwgMjUsIDUsIDc4LCAxNzEsIDI1LCA1LCAyNTMsIDIwMCwgMTcxLCAKKyAgICA1LCAyMTMsIDE1MiwgMTcxLCAyMjYsIDIwOCwgMTcxLCAxLCAxNDksIDIyMiwgMTgyLCAxNzEsIDEsIDE0OSwgMjMyLCAxOTEsIAorICAgIDE3MSwgMjUsIDUsIDE0OSwgMTU2LCAxNzEsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzEsIDIxLCAyMTAsIDg2LCAxNzEsIAorICAgIDIxLCAxMTEsIDE3MSwgMjEsIDEwNSwgMTcxLCAyMSwgMTU4LCAxNzEsIDIxLCAxNjEsIDE3MSwgMjEsIDE5MCwgMTcxLCAyMSwgCisgICAgMTk1LCAxNzEsIDIxLCAxOTksIDE3MSwgMjEsIDE5NiwgMTcxLCAyMSwgMjAxLCAxNzEsIDI1NSwgMzAsIDUwLCAxNzEsIAorICAgIDIyMiwgMTIwLCA1MCwgMTU3LCA1LCAyNTEsIDcsIDE1NywgNSwgMjU0LCA4MywgMTU3LCA1LCAyMTMsIDE0NywgMTU3LCAxLCAKKyAgICA2MSwgMTU3LCAxLCAyNTUsIDgyLCAxNTcsIDEsIDc0LCAxNTcsIDEsIDIzNiwgNDAsIDE1NywgMSwgNjksIDE1NywgMSwgCisgICAgMjE0LCAxMTgsIDE1NywgMSwgMTQ5LCAxNTMsIDE1NywgMSwgMTQ5LCAxNTYsIDE1NywgMSwgNzYsIDE1NywgMSwgMjU0LCAKKyAgICAyMTAsIDE1NywgMSwgNzgsIDE1NywgMSwgMjUzLCAyMDAsIDE1NywgMSwgMTc2LCAxNTcsIDEsIDIzNCwgMTM4LCAxNTcsIDEsIAorICAgIDI0MywgMTQyLCAxNTcsIDEsIDI0MywgMCwgMTU3LCAxLCAyMjksIDgyLCAxNTcsIDEsIDI1MSwgNDEsIDE1NywgMSwgMjUwLCAKKyAgICAxNjUsIDE1NywgMSwgMjM1LCAxNDcsIDE1NywgMSwgMjM1LCAxMjAsIDE1NywgMSwgMjI3LCAxNjksIDE1NywgMSwgMjE1LCAKKyAgICAxNTcsIDE1NywgMSwgMjE1LCAxNDUsIDE1NywgMSwgMjQ4LCAxNDMsIDE1NywgMSwgMjQ4LCAxMjcsIDE1NywgMSwgMjI4LCAKKyAgICAxMTUsIDE1NywgMSwgMjE3LCAxMDYsIDE1NywgMSwgMjE2LCAyMDksIDE1NywgMSwgMjQ4LCAyMjksIDE1NywgMSwgMjQ4LCAKKyAgICAzMywgMTU3LCAxLCAxOTgsIDE1NywgMSwgMTkxLCAxNTcsIDEsIDIyNSwgMTUwLCAxNTcsIDEsIDI1MiwgMTk5LCAxNTcsIDEsIAorICAgIDI1MiwgMjYsIDE1NywgMSwgMTg2LCAxNTcsIDEsIDE5MiwgMTU3LCAxLCAyMDUsIDE1NywgMSwgMjMzLCAxNDEsIDE1NywgMSwgCisgICAgMjMyLCAxOTAsIDE1NywgMSwgMjE0LCAyNywgMTU3LCAxLCAyMjAsIDEwNCwgMTU3LCAxLCAyMTgsIDIyNSwgMTU3LCAxLCAKKyAgICAyMDYsIDE1NywgMSwgMTYyLCAxNTcsIDUsIDIyNywgMjA5LCAxNTcsIDUsIDI1MywgMTgzLCAxNTcsIDI1LCA1LCAyNTUsIAorICAgIDgyLCAxNTcsIDI1LCA1LCA3NCwgMTU3LCAyNSwgNSwgMjM2LCA0MCwgMTU3LCAyNSwgNSwgNjksIDE1NywgMjUsIDUsIDIxNCwgCisgICAgMTE4LCAxNTcsIDI1LCA1LCAxNDksIDE1MywgMTU3LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTU3LCAyNSwgNSwgNzYsIAorICAgIDE1NywgMjUsIDUsIDI1NCwgMjEwLCAxNTcsIDI1LCA1LCA3OCwgMTU3LCAyNSwgNSwgMjUzLCAyMDAsIDE1NywgNSwgMjEzLCAKKyAgICAxNTIsIDE1NywgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNTcsIDI1MywgMjAxLCAyMzMsIDI5LCA3OSwgMTU3LCAxLCAyMjIsIAorICAgIDE4MSwgMTU3LCAxLCAyMjMsIDQyLCAxNTcsIDEsIDIxMCwgMTY4LCAxNTcsIDEsIDE0OSwgMjIyLCAxODIsIDE1NywgMSwgCisgICAgMTQ5LCAyMzIsIDE5MSwgMTU3LCAyNSwgNSwgMTQ5LCAxNTYsIDE1NywgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE1NywgMjEsIAorICAgIDIxMCwgODYsIDE1NywgMjEsIDExMSwgMTU3LCAyMSwgMTA1LCAxNTcsIDIxLCAxNTgsIDE1NywgMjEsIDE2MSwgMTU3LCAyMSwgCisgICAgMTkwLCAxNTcsIDIxLCAxOTUsIDE1NywgMjEsIDE5OSwgMTU3LCAyMSwgMTk2LCAxNTcsIDIxLCAyMDEsIDE1NywgMjM1LCAKKyAgICAxNjcsIDE1NywgMSwgMjEyLCA2NSwgMTU3LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDE1NywgMjQ0LCAxMCwgMTIzLCAyNDIsIAorICAgIDM0LCAxNTcsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMTU3LCAyNDQsIDEwLCAxMjMsIDIxOSwgMTE5LCAxNTcsIDI0NCwgCisgICAgMTAsIDEyMywgMjQ1LCAxOTYsIDE1NywgMjQ0LCAxMCwgMTM0LCAyMTksIDExOCwgMzYsIDUsIDI1NCwgODMsIDM2LCA1LCAKKyAgICAyMTMsIDE0NywgMzYsIDEsIDYxLCAzNiwgMSwgMjU1LCA4MiwgMzYsIDEsIDc0LCAzNiwgMSwgMjM2LCA0MCwgMzYsIDEsIAorICAgIDY5LCAzNiwgMSwgMjE0LCAxMTgsIDM2LCAxLCA3NiwgMzYsIDEsIDI0NSwgMjE3LCAzNiwgMSwgMjU0LCAyMTAsIDM2LCAxLCAKKyAgICA3OCwgMzYsIDEsIDIyNiwgMTg3LCAzNiwgMSwgMjUzLCAyMDAsIDM2LCAxLCAxNzYsIDM2LCAxLCAyMjksIDgyLCAzNiwgMSwgCisgICAgMjUxLCA0MSwgMzYsIDEsIDIzNSwgMTQ3LCAzNiwgMSwgMjI3LCAxNjksIDM2LCAxLCAyMTUsIDE1NywgMzYsIDEsIDIyOCwgCisgICAgMTE1LCAzNiwgMSwgMjE3LCAxMDYsIDM2LCAxLCAxOTgsIDM2LCAxLCAyMjgsIDk3LCAzNiwgMSwgMTkxLCAzNiwgMSwgMTg2LCAKKyAgICAzNiwgMSwgMTkyLCAzNiwgMSwgMjA1LCAzNiwgMSwgMjIyLCAxODEsIDM2LCAxLCAyMzMsIDE0MSwgMzYsIDEsIDIzMiwgCisgICAgMTkwLCAzNiwgMSwgMjMyLCAxODEsIDM2LCAxLCAyMTQsIDI3LCAzNiwgMSwgMjIwLCAxMDQsIDM2LCAxLCAyMTgsIDIyNSwgCisgICAgMzYsIDEsIDIwNiwgMzYsIDEsIDE2MiwgMzYsIDI1LCA1LCAyNTUsIDgyLCAzNiwgMjUsIDUsIDc0LCAzNiwgMjUsIDUsIAorICAgIDIzNiwgNDAsIDM2LCAyNSwgNSwgNjksIDM2LCAyNSwgNSwgMjE0LCAxMTgsIDM2LCAyNSwgNSwgNzYsIDM2LCAyNSwgNSwgCisgICAgMjQ1LCAyMTcsIDM2LCAyNSwgNSwgMjU0LCAyMTAsIDM2LCAyNSwgNSwgNzgsIDM2LCAyNSwgNSwgMjI2LCAxODcsIDM2LCAKKyAgICAyNSwgNSwgMjUzLCAyMDAsIDM2LCA1LCAyMTMsIDE1MiwgMzYsIDIyNiwgMjA4LCAzNiwgMjUzLCAyMDEsIDIzMywgMjksIAorICAgIDc5LCAzNiwgMjEsIDIxMCwgODYsIDM2LCAyMSwgMTExLCAzNiwgMjEsIDEwNSwgMzYsIDIxLCAxNTgsIDM2LCAyMSwgMTYxLCAKKyAgICAzNiwgMjEsIDE5MCwgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMTk5LCAzNiwgMjEsIDE5NiwgMzYsIDIxLCAyMDEsIDM2LCA1NCwgCisgICAgMjE2LCAyNDgsIDM2LCA1NCwgMTIzLCAyNDAsIDIxNywgMzYsIDU0LCAxMjMsIDIxNiwgMTQ4LCAzNiwgMjQ4LCAxNTQsIDUwLCAKKyAgICAzNiwgMjMwLCAxNDAsIDUwLCAzNiwgMjExLCA0NSwgNTAsIDM2LCAyNDgsIDk1LCA1MCwgMzYsIDI0OSwgMTQ3LCA1MCwgMzYsIAorICAgIDI1MywgMjQ2LCA3MiwgNTAsIDM2LCAyMjIsIDEyMCwgNTAsIDM2LCA1NCwgNTAsIDE0OCwgNSwgMjUxLCA3LCAxNDgsIDUsIAorICAgIDI1NCwgODMsIDE0OCwgNSwgMjEzLCAxNDcsIDE0OCwgMSwgNjEsIDE0OCwgMSwgMjU1LCA4MiwgMTQ4LCAxLCA3NCwgMTQ4LCAKKyAgICAxLCAyMzYsIDQwLCAxNDgsIDEsIDY5LCAxNDgsIDEsIDIxNCwgMTE4LCAxNDgsIDEsIDE0OSwgMTUzLCAxNDgsIDEsIDE0OSwgCisgICAgMTU2LCAxNDgsIDEsIDc2LCAxNDgsIDEsIDI0NSwgMjE3LCAxNDgsIDEsIDI1NCwgMjEwLCAxNDgsIDEsIDc4LCAxNDgsIDEsIAorICAgIDIyNiwgMTg3LCAxNDgsIDEsIDI1MywgMjAwLCAxNDgsIDEsIDE3NiwgMTQ4LCAxLCAyMzQsIDEzOCwgMTQ4LCAxLCAyNDMsIAorICAgIDE0MiwgMTQ4LCAxLCAyNDMsIDAsIDE0OCwgMSwgMjI5LCA4MiwgMTQ4LCAxLCAyNTEsIDQxLCAxNDgsIDEsIDI1MCwgMTY1LCAKKyAgICAxNDgsIDEsIDIzNSwgMTQ3LCAxNDgsIDEsIDIzNSwgMTIwLCAxNDgsIDEsIDIyNywgMTY5LCAxNDgsIDEsIDIxNSwgMTU3LCAKKyAgICAxNDgsIDEsIDIxNSwgMTQ1LCAxNDgsIDEsIDI0OCwgMTQzLCAxNDgsIDEsIDI0OCwgMTI3LCAxNDgsIDEsIDIyOCwgMTE1LCAKKyAgICAxNDgsIDEsIDIxNywgMTA2LCAxNDgsIDEsIDIxNiwgMjA5LCAxNDgsIDEsIDI0OCwgMjI5LCAxNDgsIDEsIDI0OCwgMzMsIAorICAgIDE0OCwgMSwgMTk4LCAxNDgsIDEsIDE5MSwgMTQ4LCAxLCAyMjUsIDE1MCwgMTQ4LCAxLCAyNTIsIDE5OSwgMTQ4LCAxLCAKKyAgICAyNTIsIDI2LCAxNDgsIDEsIDE4NiwgMTQ4LCAxLCAxOTIsIDE0OCwgMSwgMjA1LCAxNDgsIDEsIDIyMiwgMTgxLCAxNDgsIDEsIAorICAgIDIzMywgMTQxLCAxNDgsIDEsIDIzMiwgMTkwLCAxNDgsIDEsIDIxNCwgMjcsIDE0OCwgMSwgMjIwLCAxMDQsIDE0OCwgMSwgCisgICAgMjE4LCAyMjUsIDE0OCwgMSwgMjA2LCAxNDgsIDEsIDE2MiwgMTQ4LCA1LCAyNTMsIDE4MywgMTQ4LCAyNSwgNSwgMjU1LCAKKyAgICA4MiwgMTQ4LCAyNSwgNSwgNzQsIDE0OCwgMjUsIDUsIDIzNiwgNDAsIDE0OCwgMjUsIDUsIDY5LCAxNDgsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTMsIDE0OCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDE0OCwgMjUsIDUsIDc2LCAKKyAgICAxNDgsIDI1LCA1LCAyNDUsIDIxNywgMTQ4LCAyNSwgNSwgMjU0LCAyMTAsIDE0OCwgMjUsIDUsIDc4LCAxNDgsIDI1LCA1LCAKKyAgICAyMjYsIDE4NywgMTQ4LCAyNSwgNSwgMjUzLCAyMDAsIDE0OCwgNSwgMjEzLCAxNTIsIDE0OCwgMjMzLCAyOSwgNzksIDE0OCwgCisgICAgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNDgsIDEsIDIxNSwgMTg0LCAxNDgsIDEsIDI0NiwgNDYsIDE0OCwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgMTQ4LCAxLCAxNDksIDIzMiwgMTkxLCAxNDgsIDI1LCA1LCAxNDksIDE1NiwgMTQ4LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTQ4LCAyMSwgMjEwLCA4NiwgMTQ4LCAyMSwgMTExLCAxNDgsIDIxLCAxMDUsIDE0OCwgMjEsIDE1OCwgCisgICAgMTQ4LCAyMSwgMTYxLCAxNDgsIDIxLCAxOTAsIDE0OCwgMjEsIDE5NSwgMTQ4LCAyMSwgMTk5LCAxNDgsIDIxLCAxOTYsIAorICAgIDE0OCwgMjEsIDIwMSwgMTQ4LCAyNDQsIDEwLCAyMSwgMjEwLCA4NywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgCisgICAgMTQ4LCAyNDQsIDEwLCAyMSwgMTIzLCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAKKyAgICAxMTMsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDEzNCwgMzEsIDIyNiwgCisgICAgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgMTIzLCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAKKyAgICAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDExMywgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIAorICAgIDIxLCAxMzQsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCA1LCAyMTUsIDg0LCAxNjUsIDUsIDI1NCwgCisgICAgODMsIDE2NSwgNSwgMjEzLCAxNDcsIDE2NSwgMSwgNjEsIDE2NSwgMSwgMjU1LCA4MiwgMTY1LCAxLCA3NCwgMTY1LCAxLCAKKyAgICAyMzYsIDQwLCAxNjUsIDEsIDY5LCAxNjUsIDEsIDIxNCwgMTE4LCAxNjUsIDEsIDE0OSwgMTUzLCAxNjUsIDEsIDE0OSwgCisgICAgMTU2LCAxNjUsIDEsIDc2LCAxNjUsIDEsIDI0NSwgMjE3LCAxNjUsIDEsIDI1NCwgMjEwLCAxNjUsIDEsIDc4LCAxNjUsIDEsIAorICAgIDIyNiwgMTg3LCAxNjUsIDEsIDI1MywgMjAwLCAxNjUsIDEsIDE3NiwgMTY1LCAxLCAyMzQsIDEzOCwgMTY1LCAxLCAyNDMsIAorICAgIDE0MiwgMTY1LCAxLCAyNDMsIDAsIDE2NSwgMSwgMjI5LCA4MiwgMTY1LCAxLCAyNTEsIDQxLCAxNjUsIDEsIDI1MCwgMTY1LCAKKyAgICAxNjUsIDEsIDIzNSwgMTQ3LCAxNjUsIDEsIDIzNSwgMTIwLCAxNjUsIDEsIDIyNywgMTY5LCAxNjUsIDEsIDIxNSwgMTU3LCAKKyAgICAxNjUsIDEsIDIxNSwgMTQ1LCAxNjUsIDEsIDI0OCwgMTQzLCAxNjUsIDEsIDI0OCwgMTI3LCAxNjUsIDEsIDIyOCwgMTE1LCAKKyAgICAxNjUsIDEsIDIxNywgMTA2LCAxNjUsIDEsIDIxNiwgMjA5LCAxNjUsIDEsIDI0OCwgMjI5LCAxNjUsIDEsIDI0OCwgMzMsIAorICAgIDE2NSwgMSwgMTk4LCAxNjUsIDEsIDE5MSwgMTY1LCAxLCAyMjUsIDE1MCwgMTY1LCAxLCAyNTIsIDE5OSwgMTY1LCAxLCAKKyAgICAyNTIsIDI2LCAxNjUsIDEsIDE4NiwgMTY1LCAxLCAxOTIsIDE2NSwgMSwgMjA1LCAxNjUsIDEsIDIyMiwgMTgxLCAxNjUsIDEsIAorICAgIDIzMywgMTQxLCAxNjUsIDEsIDIzMiwgMTkwLCAxNjUsIDEsIDIxNCwgMjcsIDE2NSwgMSwgMjIwLCAxMDQsIDE2NSwgMSwgCisgICAgMjE4LCAyMjUsIDE2NSwgMSwgMjA2LCAxNjUsIDEsIDE2MiwgMTY1LCA1LCAyMjcsIDIwOSwgMTY1LCA1LCAyNTMsIDE4MywgCisgICAgMTY1LCAyNSwgNSwgMjU1LCA4MiwgMTY1LCAyNSwgNSwgNzQsIDE2NSwgMjUsIDUsIDIzNiwgNDAsIDE2NSwgMjUsIDUsIDY5LCAKKyAgICAxNjUsIDI1LCA1LCAyMTQsIDExOCwgMTY1LCAyNSwgNSwgMTQ5LCAxNTMsIDE2NSwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE2NSwgMjUsIDUsIDc2LCAxNjUsIDI1LCA1LCAyNDUsIDIxNywgMTY1LCAyNSwgNSwgMjU0LCAyMTAsIDE2NSwgMjUsIDUsIAorICAgIDc4LCAxNjUsIDI1LCA1LCAyMjYsIDE4NywgMTY1LCAyNSwgNSwgMjUzLCAyMDAsIDE2NSwgNSwgMjEzLCAxNTIsIDE2NSwgCisgICAgMjMzLCAyOSwgNzksIDE2NSwgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNjUsIDEsIDI0NCwgMjA0LCAxNjUsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDE2NSwgMSwgMTQ5LCAyMzIsIDE5MSwgMTY1LCAyNSwgNSwgMTQ5LCAxNTYsIDE2NSwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDE2NSwgMjEsIDIxMCwgODYsIDE2NSwgMjEsIDExMSwgMTY1LCAyMSwgMTA1LCAxNjUsIDIxLCAxNTgsIAorICAgIDE2NSwgMjEsIDE2MSwgMTY1LCAyMSwgMTkwLCAxNjUsIDIxLCAxOTUsIDE2NSwgMjEsIDE5OSwgMTY1LCAyMSwgMTk2LCAKKyAgICAxNjUsIDIxLCAyMDEsIDE2NSwgNSwgMjM1LCAxMDgsIDE2NSwgNSwgMjE0LCAxNjEsIDEzNiwgNSwgMjU0LCA4MywgMTM2LCAKKyAgICA1LCAyMTMsIDE0NywgMTM2LCAxLCA2MSwgMTM2LCAxLCAyNTUsIDgyLCAxMzYsIDEsIDc0LCAxMzYsIDEsIDIzNiwgNDAsIAorICAgIDEzNiwgMSwgNjksIDEzNiwgMSwgMjE0LCAxMTgsIDEzNiwgMSwgMTQ5LCAxNTMsIDEzNiwgMSwgMTQ5LCAxNTYsIDEzNiwgMSwgCisgICAgNzYsIDEzNiwgMSwgMjQ1LCAyMTcsIDEzNiwgMSwgMjU0LCAyMTAsIDEzNiwgMSwgNzgsIDEzNiwgMSwgMjI2LCAxODcsIAorICAgIDEzNiwgMSwgMjUzLCAyMDAsIDEzNiwgMSwgMTc2LCAxMzYsIDEsIDIzNCwgMTM4LCAxMzYsIDEsIDI0MywgMTQyLCAxMzYsIAorICAgIDEsIDI0MywgMCwgMTM2LCAxLCAyMjksIDgyLCAxMzYsIDEsIDI1MSwgNDEsIDEzNiwgMSwgMjUwLCAxNjUsIDEzNiwgMSwgCisgICAgMjM1LCAxNDcsIDEzNiwgMSwgMjM1LCAxMjAsIDEzNiwgMSwgMjI3LCAxNjksIDEzNiwgMSwgMjE1LCAxNTcsIDEzNiwgMSwgCisgICAgMjE1LCAxNDUsIDEzNiwgMSwgMjQ4LCAxNDMsIDEzNiwgMSwgMjQ4LCAxMjcsIDEzNiwgMSwgMjI4LCAxMTUsIDEzNiwgMSwgCisgICAgMjE3LCAxMDYsIDEzNiwgMSwgMjE2LCAyMDksIDEzNiwgMSwgMjQ4LCAyMjksIDEzNiwgMSwgMjQ4LCAzMywgMTM2LCAxLCAKKyAgICAxOTgsIDEzNiwgMSwgMjI4LCA5NywgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjI1LCAxNTAsIDEzNiwgMSwgMjUyLCAxOTksIAorICAgIDEzNiwgMSwgMjUyLCAyNiwgMTM2LCAxLCAxODYsIDEzNiwgMSwgMTkyLCAxMzYsIDEsIDIwNSwgMTM2LCAxLCAyMjIsIDE4MSwgCisgICAgMTM2LCAxLCAyMzMsIDE0MSwgMTM2LCAxLCAyMzIsIDE5MCwgMTM2LCAxLCAyMzIsIDE4MSwgMTM2LCAxLCAyMTQsIDI3LCAKKyAgICAxMzYsIDEsIDIyMCwgMTA0LCAxMzYsIDEsIDIxOCwgMjI1LCAxMzYsIDEsIDIwNiwgMTM2LCAxLCAxNjIsIDEzNiwgMSwgCisgICAgMjE1LCAxMjYsIDEzNiwgNSwgMjUzLCAxODMsIDEzNiwgMjUsIDUsIDI1NSwgODIsIDEzNiwgMjUsIDUsIDc0LCAxMzYsIDI1LCAKKyAgICA1LCAyMzYsIDQwLCAxMzYsIDI1LCA1LCA2OSwgMTM2LCAyNSwgNSwgMjE0LCAxMTgsIDEzNiwgMjUsIDUsIDE0OSwgMTUzLCAKKyAgICAxMzYsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxMzYsIDI1LCA1LCA3NiwgMTM2LCAyNSwgNSwgMjQ1LCAyMTcsIDEzNiwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxMzYsIDI1LCA1LCA3OCwgMTM2LCAyNSwgNSwgMjI2LCAxODcsIDEzNiwgMjUsIDUsIDI1MywgMjAwLCAKKyAgICAxMzYsIDUsIDIxMywgMTUyLCAxMzYsIDEsIDU5LCAyMjMsIDc2LCAxMzYsIDI1MywgMjAxLCAyMzMsIDI5LCA3OSwgMTM2LCAKKyAgICAxLCAxNDksIDIyMiwgMTgyLCAxMzYsIDEsIDE0OSwgMjMyLCAxOTEsIDEzNiwgMjUsIDUsIDE0OSwgMTU2LCAxMzYsIDI1LCAKKyAgICA1LCAxNDksIDIzMiwgMTkxLCAxMzYsIDIxLCAyMTAsIDg2LCAxMzYsIDIxLCAxMTEsIDEzNiwgMjEsIDEwNSwgMTM2LCAyMSwgCisgICAgMTU4LCAxMzYsIDIxLCAxNjEsIDEzNiwgMjEsIDE5MCwgMTM2LCAyMSwgMTk1LCAxMzYsIDIxLCAxOTksIDEzNiwgMjEsIAorICAgIDE5NiwgMTM2LCAyMSwgMjAxLCAxMzYsIDU0LCAyMTYsIDI0OCwgMTM2LCA1NCwgMTIzLCAyNDAsIDIxNywgMTM2LCA1NCwgCisgICAgMTIzLCAyMTYsIDE0OCwgMTM2LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDEzNiwgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAKKyAgICAxMzYsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMTM2LCAyNDgsIDE1OCwgNzksIDEzNiwgMSwgMjUwLCAxMDcsIDIyOCwgCisgICAgMTE2LCAxMzYsIDEsIDI1MCwgMTA3LCAyMzAsIDMwLCAxMzYsIDEsIDI1MCwgMTA3LCAyMjIsIDE4MiwgMTM2LCAxLCAyNTAsIAorICAgIDEwNywgMTU2LCAxMzYsIDEsIDI1MCwgMTA3LCAyMzIsIDE5MSwgMTM2LCAxLCAyNTAsIDEwNywgMjM1LCAyOSwgMTc1LCA1LCAKKyAgICAyNTQsIDgyLCAxNzUsIDUsIDIxMywgMTQ2LCAxNzUsIDEsIDI1MywgMTczLCAxNzUsIDEsIDI1NSwgMzYsIDE3NSwgMSwgCisgICAgMjU0LCAyMzIsIDE3NSwgMSwgMjU0LCAyNDcsIDE3NSwgMSwgMjM1LCAxNTcsIDE3NSwgMSwgMjM2LCAzOSwgMTc1LCAxLCAKKyAgICAyMTQsIDExMCwgMTc1LCAxLCAyMTQsIDExMiwgMTc1LCAxLCAyMzUsIDE4MCwgMTc1LCAxLCAyMzUsIDE4MSwgMTc1LCAxLCAKKyAgICAyMzYsIDI1LCAxNzUsIDEsIDIzNiwgMjcsIDE3NSwgMSwgMjQ1LCAyNSwgMTc1LCAxLCAyNDUsIDIxMiwgMTc1LCAxLCAyNTQsIAorICAgIDE5NywgMTc1LCAxLCAyMjYsIDExMiwgMTc1LCAxLCAyMjYsIDE4MSwgMTc1LCAxLCAyNTMsIDE4NiwgMTc1LCAxLCAyNTQsIAorICAgIDE1NCwgMjM0LCAxOTMsIDE3NSwgMSwgMjMxLCAyMTQsIDIzNCwgMTkzLCAxNzUsIDEsIDI1NCwgMTU0LCAyNDMsIDg5LCAKKyAgICAxNzUsIDEsIDIzMSwgMjE0LCAyNDMsIDg5LCAxNzUsIDEsIDIzNCwgMjM1LCAyMjksIDIyNywgMTc1LCAxLCAyMjEsIDIzOCwgCisgICAgMjQzLCA4OSwgMTc1LCAxLCAyNTQsIDE1NCwgMjUwLCAyMjQsIDE3NSwgMSwgMjMxLCAyMTQsIDI1MCwgMjI0LCAxNzUsIDEsIAorICAgIDI1NCwgMTU0LCAyMzUsIDEzMywgMTc1LCAxLCAyMzEsIDIxNCwgMjM1LCAxMzMsIDE3NSwgMSwgMjE3LCA5OSwgMjI5LCAKKyAgICAyMjcsIDE3NSwgMSwgMjE3LCA5OSwgMjIxLCAyMzcsIDIyOSwgMjI4LCAxNzUsIDEsIDIyMSwgMjM4LCAyMzUsIDEzMywgCisgICAgMTc1LCAxLCAyNTQsIDE1NCwgMjE1LCAxNTMsIDE3NSwgMSwgMjMxLCAyMTQsIDIxNSwgMTUzLCAxNzUsIDEsIDI1NCwgMTU0LCAKKyAgICAyNDgsIDEzNCwgMTc1LCAxLCAyMzEsIDIxNCwgMjQ4LCAxMzQsIDE3NSwgMSwgMjMwLCA1OCwgMjI5LCAxODUsIDE3NSwgMSwgCisgICAgMjIxLCAyMzgsIDI0OCwgMTM0LCAxNzUsIDEsIDI1NCwgMTU0LCAyMTcsIDMxLCAxNzUsIDEsIDIzMSwgMjE0LCAyMTcsIDMxLCAKKyAgICAxNzUsIDEsIDI1NCwgMTU0LCAyNDgsIDE1MiwgMTc1LCAxLCAyMzEsIDIxNCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjQ4LCAxODIsIAorICAgIDIyOSwgMTg1LCAxNzUsIDEsIDIyMSwgMjM4LCAyNDgsIDE1MiwgMTc1LCAxLCAyNTQsIDE1NCwgMjI1LCAyMzIsIDE3NSwgMSwgCisgICAgMjMxLCAyMTQsIDIyNSwgMjMyLCAxNzUsIDEsIDI1NCwgMTU0LCAyNTIsIDEyMCwgMTc1LCAxLCAyMzEsIDIxNCwgMjUyLCAKKyAgICAxMjAsIDE3NSwgMSwgMjMxLCAxMzYsIDE3NSwgMSwgMjU0LCAxMzksIDI1MiwgMTIwLCAxNzUsIDEsIDIxMSwgNTEsIDE3NSwgCisgICAgMSwgMjIzLCAxMzYsIDE3NSwgMSwgMjQ4LCAxODIsIDIzMywgNzMsIDE3NSwgMSwgMjE0LCAxLCAxNzUsIDEsIDIxNywgOTksIAorICAgIDIyMSwgMjEyLCAxNzUsIDEsIDIzMCwgNTgsIDIyMSwgMjEyLCAxNzUsIDEsIDI0OCwgMTgyLCAyMjEsIDIxMiwgMTc1LCAxLCAKKyAgICAyNDEsIDI0OSwgMTc1LCAxLCAyMzAsIDU4LCAyMzMsIDczLCAxNzUsIDEsIDI0NCwgMTY0LCAxNzUsIDUsIDI1NCwgMTg2LCAKKyAgICAxNzUsIDI1LCA1LCAyNTQsIDI0MiwgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDI1NCwgMjQ5LCAxNzUsIDI1LCA1LCAyNDcsIAorICAgIDIzNiwgMjU0LCAyNDksIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyMzUsIDE3NywgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIzNSwgCisgICAgMTc3LCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjI2LCA5MiwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIyNiwgOTIsIDE3NSwgCisgICAgMjUsIDUsIDI0MywgMTMxLCAxNzUsIDI1LCA1LCAyMzQsIDIxLCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjM0LCAyMSwgMTc1LCAKKyAgICAyNSwgNSwgMjM0LCAyMywgMjQ4LCA3NSwgMTc1LCAyNSwgNSwgMjM0LCAyMiwgMjQyLCA1NCwgMjU0LCAyNDIsIDE3NSwgMjUsIAorICAgIDUsIDIzNCwgMjIsIDI0MiwgNTQsIDI0NywgMjM2LCAyNTQsIDI0MiwgMTc1LCAyNSwgNSwgMjM0LCAyMiwgMjQyLCA1NCwgCisgICAgMjQzLCA4OCwgMTc1LCAyNSwgNSwgMjQzLCA4OCwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDI0MywgMTMxLCAxNzUsIDI1LCA1LCAKKyAgICAyNDcsIDIzNiwgMjQzLCA4OCwgMTc1LCAyMjQsIDE0NCwgMjMzLCAyMTMsIDE2OCwgMTM1LCAyMzQsIDM1LCAyMzQsIDI1MiwgCisgICAgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEzNCwgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEwNSwgMTY4LCAxMzUsIAorICAgIDIzNCwgMTEyLCAyMzQsIDEwMSwgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEwOSwgMTY4LCAxMzUsIDIzNCwgMTEyLCAKKyAgICAyMjMsIDE1NywgMTY4LCAxMzUsIDIyOSwgMTAsIDIyOCwgMjUzLCAxNjgsIDEzNSwgMjUwLCA5NSwgMjUwLCAxNTUsIDE2OCwgCisgICAgMTM1LCAyNTAsIDk1LCAyNTAsIDEwMywgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgMTU0LCAxNjgsIDEzNSwgMjE5LCA2MSwgCisgICAgMjE5LCA2MCwgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgOTEsIDE2OCwgMTM1LCAyMTAsIDI0NSwgMjEwLCAyNTIsIDE2OCwgCisgICAgMTM1LCAyNDcsIDE1NCwgMjUwLCAxNjIsIDE2OCwgMTM1LCAyMTYsIDQzLCAyMjUsIDI0MiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAKKyAgICAyMTYsIDIwMSwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMjksIDIwNiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMjUsIDExNCwgCisgICAgMTY4LCAxMzUsIDIyOCwgODAsIDIyOSwgMTAzLCAxNjgsIDEzNSwgMjQ3LCAxNTQsIDI0OCwgNzYsIDE2OCwgMTM1LCAyMTYsIAorICAgIDQzLCAyMTcsIDU2LCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMTMyLCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMjA1LCAKKyAgICAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMTU1LCAxNjgsIDEzNSwgMjI4LCA4MCwgMjI3LCAyNDIsIDE2OCwgMTM1LCAyNTEsIAorICAgIDIxNCwgMjUyLCAxNzIsIDE2OCwgMTM1LCAyMjUsIDIwLCAyMjUsIDQ1LCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyNSwgMTE2LCAKKyAgICAxNjgsIDEzNSwgMjQ0LCA1MiwgMjQ0LCAyMDQsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjI1LCAxNDQsIDE2OCwgMTM1LCAyNDQsIAorICAgIDUyLCAyNDQsIDE4MSwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjEsIDI0OSwgMTY4LCAxMzUsIDIzMCwgMTY3LCAxODYsIDE2OCwgCisgICAgMTM1LCAyMTAsIDI0NSwgMjExLCA3OSwgMTY4LCAxMzUsIDIyMiwgMjE0LCAyMjIsIDE0MSwgMTY4LCAxMzUsIDIyMiwgMTQyLCAKKyAgICAxNjgsIDEzNSwgMjMyLCAxNjMsIDIzMiwgMjEyLCAxNjgsIDEzNSwgMjMyLCAxMDMsIDE2OCwgMTM1LCAyMTEsIDIyOCwgCisgICAgMjEyLCA2MSwgMTY4LCAxMzUsIDIxOSwgNjEsIDIyMiwgOCwgMTY4LCAxMzUsIDIxOSwgNjEsIDIyMiwgMTE2LCAxNjgsIAorICAgIDEzNSwgMjE5LCA2MSwgMjE4LCA4MywgMTY4LCAxMzUsIDI0MSwgNzYsIDI0MSwgMTY2LCAxNjgsIDEzNSwgMjMyLCAxNjMsIAorICAgIDI1MCwgNzYsIDE2OCwgMTM1LCAxNDQsIDI1NCwgMTIzLCAxNjgsIDEzNSwgMjQxLCA3NiwgMjI4LCA3NSwgMTY4LCAxMzUsIAorICAgIDIyNiwgNzIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNjEsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjQyLCAyNCwgMTY4LCAxMzUsIAorICAgIDIyMSwgMjMyLCAyNTUsIDgyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgMTQ0LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc0LCAKKyAgICAxNjgsIDEzNSwgMjIxLCAyMzIsIDIzNiwgNDAsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjE0LCAyMTQsIDE2OCwgMTM1LCAyMjEsIAorICAgIDIzMiwgMjE0LCAyMTIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNjksIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjE0LCAxMTgsIDE2OCwgCisgICAgMTM1LCAyMjUsIDEyNywgMTY4LCAyNDksIDEwNiwgMTYsIDI1MiwgMTczLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc2LCAxNjgsIAorICAgIDEzNSwgMjIxLCAyMzIsIDI1NCwgMjUyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc4LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgCisgICAgMjExLCAyMzEsIDIwMywgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIDIxMSwgMjMxLCAyMDQsIDE2OCwgMTM1LCAyMzMsIAorICAgIDExMiwgMTY4LCAxMzUsIDIzMSwgMjAwLCAxNjgsIDEzNSwgMjMxLCAyMDEsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjQ1LCAKKyAgICAxODgsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjE1LCAyMjksIDE2OCwgCisgICAgMTM1LCAyMzEsIDIwOSwgMjUwLCAxNDMsIDE2OCwgMTM1LCAyMTYsIDE5OSwgMTY4LCAxMzUsIDIyOCwgMjEwLCAxNjgsIAorICAgIDEzNSwgMjExLCA3MywgMTY4LCAxMzUsIDI0NCwgNDMsIDE2OCwgMjEsIDIxMCwgODYsIDE2OCwgMjEsIDExMSwgMTY4LCAyMSwgCisgICAgMTA1LCAxNjgsIDIxLCAxNTgsIDE2OCwgMjEsIDE2MSwgMTY4LCAyMSwgMTkwLCAxNjgsIDIxLCAxOTUsIDE2OCwgMjEsIAorICAgIDE5OSwgMTY4LCAyMSwgMTk2LCAxNjgsIDIxLCAyMDEsIDE2OCwgMTM1LCAyNTQsIDExOSwgMTY4LCAxMzUsIDIzNCwgMTEwLCAKKyAgICAyMDksIDIwOSwgMSwgMjM0LCAzNCwgMjA5LCAyMDksIDEsIDIzNCwgMTEyLCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjM0LCAKKyAgICAxMTIsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyMjksIDksIDIwOSwgMjA5LCAxLCAyNDksIDI0NiwgMjA5LCAyMDksIDEsIAorICAgIDIxOSwgNjEsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyMjcsIDEzOCwgMjA5LCAyMDksIDEsIDI0NywgMTUzLCAyMDksIDIwOSwgCisgICAgMSwgMTEyLCAyMDksIDIwOSwgMSwgMjE2LCAxNTgsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMTYsIDE1OCwgMjE3LCA2MywgCisgICAgMjA5LCAyMDksIDEsIDIyOCwgNzksIDIwOSwgMjA5LCAxLCAyNTEsIDIxMywgMjA5LCAyMDksIDEsIDIyNSwgMTksIDIwOSwgCisgICAgMjA5LCAxLCAyMjUsIDEyNSwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAKKyAgICAyMjUsIDEyNSwgMjE3LCA2MywgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMzAsIDE2NiwgCisgICAgMjA5LCAyMDksIDEsIDIxMCwgMjQ0LCAyMDksIDIwOSwgMSwgMjMyLCAxNjMsIDIzMiwgMjEyLCAyMDksIDIwOSwgMSwgMjMyLCAKKyAgICAxNjMsIDIzMiwgMTI3LCAyMDksIDIwOSwgMSwgMjExLCAyMjcsIDIwOSwgMjA5LCAxLCAyMTksIDYxLCAyMTgsIDM2LCAyMDksIAorICAgIDIwOSwgMSwgMjQxLCA3NiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDc4LCAyMDksIDIwOSwgMSwgMjQxLCA3NiwgMjE3LCA2MywgCisgICAgMjA5LCAyMDksIDI0NSwgMTcxLCAyMDksIDIwOSwgMjUsIDUsIDYxLCAyMDksIDIwOSwgMjUsIDUsIDIzMSwgMjA5LCAyMzQsIAorICAgIDI0MCwgMjA5LCAyMDksIDI1LCA1LCAyNTUsIDgyLCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMTQ0LCAyMDksIDIwOSwgMjUsIAorICAgIDUsIDc0LCAyMDksIDIwOSwgMjUsIDUsIDIzNiwgNDAsIDIwOSwgMjA5LCAyNSwgNSwgMjExLCAxMTcsIDIwOSwgMjA5LCAyNSwgCisgICAgNSwgMjEwLCAxNjksIDIwOSwgMjA5LCAyNSwgNSwgNjksIDIwOSwgMjA5LCAyNSwgNSwgMjE0LCAxMTgsIDIwOSwgMjA5LCAKKyAgICAyNSwgNSwgMjMxLCAyMDksIDIzNCwgMTksIDIwOSwgMjA5LCAyMjAsIDE0NywgNSwgMjMyLCAxNjIsIDIwOSwgMjA5LCAyMjAsIAorICAgIDE0NywgNSwgMjI3LCAxMzgsIDIwOSwgMjA5LCAyNSwgNSwgNzYsIDIwOSwgMjA5LCAyNSwgNSwgMjQ1LCAyMDMsIDIwOSwgCisgICAgMjA5LCAyNSwgNSwgNzgsIDIwOSwgMjA5LCAyNSwgNSwgMjUzLCAxNzUsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDIwOSwgMjA5LCAyMzQsIDM1LCAyMzMsIDE0MSwgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDksIDI0NSwgMTg4LCAyMDksIDIwOSwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA5LCAyMTYsIDExOCwgMjA5LCAyMDksIAorICAgIDEzOCwgMjMxLCAyMDksIDI1MCwgMjMxLCAyMDksIDIwOSwgMjUxLCAxMiwgNzksIDIwOSwgMjA5LCAyMjgsIDIxOSwgMjA5LCAKKyAgICAyMDksIDIxLCAyMTAsIDg2LCAyMDksIDIwOSwgMjEsIDExMSwgMjA5LCAyMDksIDIxLCAxMDUsIDIwOSwgMjA5LCAyMSwgCisgICAgMTU4LCAyMDksIDIwOSwgMjEsIDE2MSwgMjA5LCAyMDksIDIxLCAxOTAsIDIwOSwgMjA5LCAyMSwgMTk1LCAyMDksIDIwOSwgCisgICAgMjEsIDE5OSwgMjA5LCAyMDksIDIxLCAxOTYsIDIwOSwgMjA5LCAyMSwgMjAxLCAyMDksIDIwOSwgMjQxLCA3NiwgMjI4LCAKKyAgICA3OSwgMjA5LCAyMDksIDI0MSwgNzYsIDIzMCwgMTY2LCAyMDksIDIwOSwgMSwgMjM0LCAxMTMsIDI0MiwgMTgxLCAyMDksIAorICAgIDIwOSwgMSwgMjM0LCAxMTMsIDIyNywgMTM4LCA2MywgMywgMjI2LCAyMDgsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIAorICAgIDIzMCwgMjUzLCAyMTUsIDE5MCwgNjEsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIDIzMCwgMjUzLCAyNTUsIDE2OCwgCisgICAgMjIyLCAyMTgsIDI1MiwgODUsIDE4NiwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxMSwgMCwgMjMwLCAyNTMsIDI1NSwgMTY4LCAKKyAgICAyNDIsIDEyMiwgMjE1LCAxNzQsIDE4NiwgNjMsIDE2NCwgNjUsIDIxMSwgMCwgMjMwLCAyNTMsIDIzMSwgOTgsIDE4NiwgNjMsIAorICAgIDE2NCwgMjUwLCA0LCAyMTEsIDAsIDIzMCwgMjUzLCAyMjAsIDExMSwgMTg2LCA2MywgMTY0LCAyNTAsIDI0NywgMjExLCAwLCAKKyAgICAyMzAsIDI1MywgMjI1LCAxMTUsIDIyMCwgOTgsIDE4NiwgNjMsIDE2NCwgMjExLCAwLCAyMzAsIDI1MywgMjE1LCAxNzQsIAorICAgIDIyMCwgOTgsIDE4NiwgNjMsIDE2NCwgMjIxLCAyMTAsIDIyMCwgOTcsIDYzLCAxNjQsIDI1MSwgMTM2LCAyMTEsIDAsIDIzMCwgCisgICAgMjUyLCA2MywgMTY0LCAyNTEsIDIzMSwgMjIwLCA1LCAyMTEsIDAsIDIzMCwgMjUyLCA2MywgMTY0LCAyMzUsIDIwNCwgMjE1LCAKKyAgICAxNzMsIDYzLCAxNjQsIDI0OCwgNjksIDIxNSwgMTc0LCAyNTEsIDEzNSwgNjMsIDE2NCwgMjIwLCA5NywgNjMsIDE2NCwgCisgICAgMjI3LCAxNDMsIDIyMCwgOTcsIDYzLCAxNjQsIDIxNSwgMTc0LCAyMjAsIDk3LCA2MywgMTY0LCAyMjcsIDE0MywgMjE1LCAKKyAgICAxNzQsIDIyMCwgOTcsIDYzLCAxNjQsIDIyMiwgMjM5LCAyNTAsIDEzMCwgMjE4LCAyMzgsIDIyMCwgOTcsIDYzLCAxNjQsIAorICAgIDIyMywgNDUsIDI0MiwgMTUzLCAyMjAsIDk3LCA2MywgMTY0LCAyNTAsIDI0NywgMjU1LCAxNzIsIDIyMiwgMTQ2LCAyMzEsIAorICAgIDk3LCAyMDAsIDI1MSwgMTUsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTUsIDE3MywgNjMsIDIzMiwgMTUwLCA1LCAyNTAsIDE2MywgCisgICAgMjIyLCAxNDUsIDYzLCAyMzIsIDE1MCwgNSwgMjMzLCAyLCAyMjIsIDE0NSwgNjMsIDI1MywgMjIwLCA1LCAyMjAsIDEwNywgCisgICAgMjQzLCA3MiwgMjU1LCAxNzMsIDIyMiwgMTQ1LCA2MywgMjUzLCAyMjAsIDUsIDI1NSwgMTcwLCAxOTEsIDYzLCAyNTMsIAorICAgIDIyMCwgNSwgMjIxLCAxODQsIDIxNSwgMTY5LCA2MywgNSwgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDMsIDcxLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDIsIDE4MywgNjMsIDUsIDIyMywgMTMzLCAyNDcsIDE2NywgMjQyLCAxMjMsIDYzLCA1LCAKKyAgICAyMjMsIDEzMywgMjI5LCAyMjQsIDI0MywgNzEsIDYzLCA1LCAyMjMsIDEzMywgMjI5LCAyMjQsIDI0MiwgMTgzLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDI0NywgMTY3LCAyMjMsIDEzMywgMjI5LCAyMjMsIDYzLCAyMSwgMjEwLCA4NiwgNjMsIDIxLCAxMTEsIDYzLCAKKyAgICAyMSwgMTA1LCA2MywgMjEsIDE1OCwgNjMsIDIxLCAxNjEsIDYzLCAyMSwgMTkwLCA2MywgMjEsIDE5NSwgNjMsIDIxLCAxOTksIAorICAgIDYzLCAyMSwgMTk2LCA2MywgMjEsIDIwMSwgNjMsIDIxLCAxNjMsIDExMSwgNjMsIDIxLCAxNjMsIDEwNSwgNjMsIDIxLCAKKyAgICAxNjMsIDE1OCwgNjMsIDIxLCAxNjMsIDE2MSwgNjMsIDIxLCAxNjMsIDE5MCwgNjMsIDIxLCAxNjMsIDE5NSwgNjMsIDIxLCAKKyAgICAxNjMsIDE5OSwgNjMsIDIxLCAxNjMsIDE5NiwgNjMsIDIxLCAxNjMsIDIwMSwgNjMsIDIxLCAxNjMsIDIxMCwgODYsIDYzLCAKKyAgICAxNjQsIDI1MSwgMTM4LCAyMjIsIDE0NSwgNjMsIDE2NCwgMjI5LCA3MywgMjUxLCA3NiwgMjI3LCAxNTMsIDIxMCwgMjUsIAorICAgIDYzLCAxNjQsIDI1MCwgMjQ3LCAyNTUsIDE3MiwgMjIyLCAxNDYsIDI1MSwgNzcsIDIzMCwgMjA3LCAyNTEsIDE1LCA2MywgCisgICAgMTY0LCAyMjksIDczLCAyNTEsIDc2LCAyMjAsIDEwOCwgMjIyLCAxNDUsIDYzLCAxNjQsIDI1MCwgMTQwLCAyMzAsIDI1MiwgCisgICAgNjMsIDE2NCwgMjE1LCAxODUsIDI1NSwgMTY5LCA2MywgMTY0LCAyNDIsIDEwNywgMjIyLCAxNDYsIDI0MiwgNzAsIDYzLCAKKyAgICAxNjQsIDI0MiwgMTA3LCAyMjIsIDE0NiwgMjQyLCA3NiwgNjMsIDE2NCwgMjU0LCAxMjQsIDIzNCwgMTI5LCAyNDIsIDcwLCAKKyAgICA2MywgMTY0LCAyNTQsIDEyNCwgMjM0LCAxMjksIDI0MiwgNzYsIDYzLCA1LCAyMTEsIDY1LCAyMTUsIDE3MiwgNjMsIDUsIAorICAgIDIzMSwgMTcyLCAyMTUsIDE3MiwgNjMsIDEsIDE3NiwgNjMsIDEsIDIzNCwgMTM4LCA2MywgMSwgMjQzLCAxNDIsIDYzLCAxLCAKKyAgICAyNDMsIDAsIDYzLCAxLCAyMjksIDgyLCA2MywgMSwgMjUxLCA0MSwgNjMsIDEsIDI1MCwgMTY1LCA2MywgMSwgMjM1LCAxNDcsIAorICAgIDYzLCAxLCAyMjcsIDE2OSwgNjMsIDEsIDIxNSwgMTU3LCA2MywgMSwgMjE1LCAxNDUsIDYzLCAxLCAyNDgsIDE0MywgNjMsIAorICAgIDEsIDI0OCwgMTI3LCA2MywgMSwgMjI4LCAxMTUsIDYzLCAxLCAyMTcsIDEwNiwgNjMsIDEsIDIxNiwgMjA5LCA2MywgMSwgCisgICAgMjQ4LCAyMjksIDYzLCAxLCAyNDgsIDMzLCA2MywgMSwgMTk4LCA2MywgMSwgMTkxLCA2MywgMSwgMjI1LCAxNTAsIDYzLCAxLCAKKyAgICAyNTIsIDE5OSwgNjMsIDEsIDI1MiwgMjYsIDYzLCAxLCAxODYsIDYzLCAxLCAyMTUsIDE4NCwgNjMsIDEsIDIxNSwgMTc2LCAKKyAgICA2MywgMSwgMjQ2LCA0NiwgNjMsIDEsIDI0NiwgNDEsIDYzLCAxLCAyMTIsIDY1LCA2MywgMSwgMjEwLCA4MiwgNjMsIDEsIAorICAgIDIxMCwgMTE2LCA2MywgMSwgMjU1LCAxNzUsIDYzLCAxLCAxOTIsIDYzLCAxLCAyMDUsIDYzLCAxLCAyMzMsIDE0MSwgNjMsIAorICAgIDEsIDIyMCwgMTA0LCA2MywgMSwgMjE4LCAyMjUsIDYzLCAxLCAyMDYsIDYzLCAxLCAxNjIsIDYzLCAxLCA2MSwgNjMsIDEsIAorICAgIDIzMywgMjM3LCA2MywgMSwgMjQ0LCA4NSwgMjA1LCA2MywgMSwgMjM0LCA1MiwgNjMsIDEsIDIyMiwgMTgxLCA2MywgMjUsIAorICAgIDUsIDI1NSwgODIsIDYzLCAyNSwgNSwgNzQsIDYzLCAyNSwgNSwgMjM2LCA0MCwgNjMsIDI1LCA1LCA2OSwgNjMsIDI1LCA1LCAKKyAgICAyMTQsIDExOCwgNjMsIDI1LCA1LCAxNDksIDE1MywgNjMsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA2MywgMjUsIDUsIDE0OSwgCisgICAgMTU2LCA2MywgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDYzLCAyNSwgNSwgNzYsIDYzLCAyNSwgNSwgMjQ1LCAyMTcsIDYzLCAKKyAgICAyNSwgNSwgNzgsIDYzLCAyNSwgNSwgMjI2LCAxODcsIDYzLCA1LCAyMjIsIDIyNCwgMjE4LCA4NSwgMjI5LCA4MywgMjIyLCAKKyAgICAyMTMsIDYzLCA1LCAyMjIsIDIxOCwgMjUyLCA4NCwgNjMsIDI1LCA1LCAyMjMsIDUyLCA3NCwgNjMsIDI1LCA1LCAyMjMsIAorICAgIDUyLCAyMzYsIDQwLCA2MywgNSwgMjI3LCAxNTMsIDIxMCwgMjYsIDIyOSwgMjMxLCAyNDgsIDIyOSwgNjMsIDUsIDIxOSwgCisgICAgNzMsIDIzMywgNjYsIDYzLCAxNjQsIDI0MiwgMzYsIDYzLCAxNjQsIDIyNiwgNjEsIDYzLCA1LCAyMzMsIDY5LCAyMjIsIAorICAgIDE0NSwgNjMsIDUsIDIxMSwgNzAsIDIyMiwgMTQ1LCA2MywgNSwgMjMzLCA3MCwgMjE1LCAxODUsIDI1MSwgMTUsIDYzLCA1LCAKKyAgICAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDUsIDI0MiwgMTI2LCAyNTEsIDE2LCAyMjMsIDQzLCA2MywgNSwgMjQyLCAxMjYsIAorICAgIDIzMSwgOTAsIDIyMywgNDMsIDYzLCA1LCAyMzUsIDIwMCwgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCA1LCAKKyAgICAyMzMsIDcwLCAyMTUsIDE4NSwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDUsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCAKKyAgICA3NCwgNSwgMjM1LCAyMDAsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgMSwgMTc2LCA2MywgMjE4LCA3NCwgMSwgCisgICAgMjM0LCAxMzgsIDYzLCAyMTgsIDc0LCAxLCAyNDMsIDE0MiwgNjMsIDIxOCwgNzQsIDEsIDI0MywgMCwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIyOSwgODIsIDYzLCAyMTgsIDc0LCAxLCAyNTEsIDQxLCA2MywgMjE4LCA3NCwgMSwgMjUwLCAxNjUsIDYzLCAyMTgsIAorICAgIDc0LCAxLCAyMzUsIDE0NywgNjMsIDIxOCwgNzQsIDEsIDIyNywgMTY5LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAxNTcsIDYzLCAKKyAgICAyMTgsIDc0LCAxLCAyMTUsIDE0NSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMTQzLCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAxMjcsIAorICAgIDYzLCAyMTgsIDc0LCAxLCAyMjgsIDExNSwgNjMsIDIxOCwgNzQsIDEsIDIxNywgMTA2LCA2MywgMjE4LCA3NCwgMSwgMjE2LCAKKyAgICAyMDksIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDIyOSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMzMsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICAxOTgsIDYzLCAyMTgsIDc0LCAxLCAxOTEsIDYzLCAyMTgsIDc0LCAxLCAyMjUsIDE1MCwgNjMsIDIxOCwgNzQsIDEsIDI1MiwgCisgICAgMTk5LCA2MywgMjE4LCA3NCwgMSwgMjUyLCAyNiwgNjMsIDIxOCwgNzQsIDEsIDE4NiwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgCisgICAgMTg0LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAxNzYsIDYzLCAyMTgsIDc0LCAxLCAyNDYsIDQ2LCA2MywgMjE4LCA3NCwgMSwgCisgICAgMjQ2LCA0MSwgNjMsIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDYzLCAyMTgsIDc0LCAxLCAyMTAsIDgyLCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjEwLCAxMTYsIDYzLCAyMTgsIDc0LCAxLCAyNTUsIDE3NSwgNjMsIDIxOCwgNzQsIDEsIDE5MiwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIwNSwgNjMsIDIxOCwgNzQsIDEsIDIzMywgMTQxLCA2MywgMjE4LCA3NCwgMSwgMjIwLCAxMDQsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMTgsIDIyNSwgNjMsIDIxOCwgNzQsIDEsIDIwNiwgNjMsIDIxOCwgNzQsIDEsIDE2MiwgNjMsIDIxOCwgNzQsIDEsIAorICAgIDYxLCA2MywgMjE4LCA3NCwgMSwgMjMzLCAyMzcsIDYzLCAyMTgsIDc0LCAxLCAyNDQsIDg1LCAyMTIsIDY1LCA2MywgMjE4LCAKKyAgICA3NCwgMSwgMjQ0LCA4NSwgMTkyLCA2MywgMjE4LCA3NCwgMSwgMjQ0LCA4NSwgMjA1LCA2MywgMjMzLCAyMjQsIDIyMiwgCisgICAgMTQzLCAyMzQsIDEzOCwgNjMsIDIzMywgMjI0LCAyMjIsIDE0MywgMjM0LCAxMzksIDI1MSwgNzcsIDIzMCwgMjA3LCAyNTEsIAorICAgIDE1LCA2MywgMjUxLCA0LCA1LCAxMTQsIDI1MiwgNzgsIDYzLCAyNTEsIDQsIDUsIDE5MywgMjUyLCA3OCwgNjMsIDI1MSwgNCwgCisgICAgNSwgMjUxLCA1LCAyMTcsIDIxLCA2MywgMjUxLCA0LCA1LCAyMjEsIDIwOSwgMjU1LCAxNzQsIDYzLCAxNiwgMjQ2LCA5OSwgCisgICAgMjUxLCAxMzMsIDYzLCAxNiwgMjIzLCAxMzIsIDIyMiwgMjI1LCA2MywgMTYsIDIyNiwgODEsIDI0MywgNzAsIDYzLCAxNiwgCisgICAgMjIzLCAxMzIsIDIyMiwgMjI2LCAyMjMsIDQ1LCAyNDIsIDE1MiwgNjMsIDE2LCAyMjUsIDExNSwgMTkxLCA2MywgMTYsIAorICAgIDIyOCwgNjQsIDI1MSwgMTMzLCA2MywgMTYsIDIyOCwgNjQsIDI1MSwgMTM0LCAyMjcsIDE0MywgMjU1LCAxNzEsIDYzLCAxNiwgCisgICAgMjI4LCA2NCwgMjUxLCAxMzQsIDI0MiwgMTI0LCAyNTUsIDE3MSwgNjMsIDE2LCAyMjgsIDY0LCAyNTEsIDEzNCwgMjUxLCAKKyAgICA3NywgMjU1LCAxNzEsIDYzLCA1LCAyMjMsIDEzMywgMjI5LCAyMjQsIDIyMywgMTMzLCAyNDcsIDE2NiwgNjMsIDUsIDIyMywgCisgICAgMTMzLCAyMjksIDIyNCwgMjQyLCAxMjMsIDYzLCAxNjQsIDI1MSwgMTM3LCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCisgICAgMjIzLCA0NCwgNjMsIDE2NCwgMjMwLCAxNjgsIDIxMSwgMCwgMjQyLCAyMjIsIDIzMCwgMjUzLCAyMjMsIDQ0LCA2MywgMTY0LCAKKyAgICAyMjcsIDE0MywgMjE1LCAxNzMsIDYzLCAxNjQsIDY1LCAyNTEsIDE2MCwgMjIyLCAyMTUsIDIxMSwgMCwgMjMwLCAyNTMsIAorICAgIDIzMSwgOTgsIDE4NiwgNjMsIDE2NCwgMjUwLCA0LCAyNTEsIDE2MCwgMjIyLCAyMTUsIDIxMSwgMCwgMjMwLCAyNTMsIDIyMCwgCisgICAgMTExLCAxODYsIDIyMiwgMjUzLCAyMTgsIDAsIDUwLCAyMzMsIDUxLCAyMTgsIDAsIDUwLCAyMjIsIDI1MywgMjE4LCAwLCA1LCAKKyAgICAyLCAyNDcsIDEyNiwgMjMzLCA1MSwgMjE4LCAwLCA1LCAyLCAyNDcsIDEyNiwgNjMsIDE2NCwgMjMzLCA2MSwgMjMxLCAxMDEsIAorICAgIDIyMiwgMTQ1LCA2MywgMTY0LCAyMTUsIDI1MSwgMjMxLCAxMDEsIDIyMiwgMTQ1LCA2OCwgMSwgMTc2LCA2OCwgMSwgMjM0LCAKKyAgICAxMzgsIDY4LCAxLCAyNDMsIDE0MiwgNjgsIDEsIDI0MywgMCwgNjgsIDEsIDIyOSwgODIsIDY4LCAxLCAyNTEsIDQxLCA2OCwgCisgICAgMSwgMjUwLCAxNjUsIDY4LCAxLCAyMzUsIDE0NywgNjgsIDEsIDIzNSwgMTIwLCA2OCwgMSwgMjI3LCAxNjksIDY4LCAxLCAKKyAgICAyMjgsIDgxLCA2OCwgMSwgMjE1LCAxNTcsIDY4LCAxLCAyMTUsIDE0NSwgNjgsIDEsIDI0OCwgMTQzLCA2OCwgMSwgMjQ4LCAKKyAgICAxMjcsIDY4LCAxLCAyMjgsIDExNSwgNjgsIDEsIDIxNywgMTA2LCA2OCwgMSwgMjE2LCAyMDksIDY4LCAxLCAyNDgsIDIyOSwgCisgICAgNjgsIDEsIDI0OCwgMzMsIDY4LCAxLCAxOTgsIDY4LCAxLCAxOTEsIDY4LCAxLCAyMjUsIDE1MCwgNjgsIDEsIDI1MiwgMTk5LCAKKyAgICA2OCwgMSwgMjUyLCAyNiwgNjgsIDEsIDE4NiwgNjgsIDEsIDE5MiwgNjgsIDEsIDIwNSwgNjgsIDEsIDIzMywgMTQxLCA2OCwgCisgICAgMSwgMjEyLCA2NSwgNjgsIDEsIDIwNiwgNjgsIDEsIDE2MiwgNjgsIDEsIDIzMiwgMTkwLCA2OCwgMSwgNjEsIDY4LCAxLCAKKyAgICAyMjAsIDg4LCA2MSwgNjgsIDEsIDc0LCA2OCwgMSwgMjM2LCA0MCwgNjgsIDEsIDY5LCA2OCwgMSwgMjE0LCAxMTgsIDY4LCAKKyAgICAxLCA3NiwgNjgsIDEsIDIzMCwgMTU2LCA3NiwgNjgsIDEsIDc4LCA2OCwgMSwgMjUzLCAyMDAsIDY4LCAyNSwgNSwgMjE3LCAKKyAgICA2NSwgMjU1LCA4MiwgNjgsIDI1LCA1LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDc0LCA2OCwgMjUsIDUsIDIzNiwgNDAsIDY4LCAKKyAgICAyNSwgNSwgNjksIDY4LCAyNSwgNSwgMjE0LCAxMTgsIDY4LCAyNSwgNSwgNzYsIDY4LCAyNSwgNSwgMjU0LCAyMTAsIDY4LCAKKyAgICAyNSwgNSwgMjMwLCAxNTYsIDIzNiwgNDAsIDY4LCAyNSwgNSwgMjMwLCAxNTYsIDc4LCA2OCwgMjUsIDUsIDE2MCwgNDgsIAorICAgIDY4LCA1LCAyNTQsIDgzLCA2OCwgNSwgNTksIDUxLCA2OCwgNSwgMjEzLCAxNDcsIDY4LCA1LCAyMTMsIDE1MiwgNjgsIDUsIAorICAgIDI1MywgMjQzLCA2OCwgMTE3LCA1LCAxNDcsIDE5MiwgNjgsIDExNywgNSwgMTQ3LCAyMDUsIDY4LCAxMTcsIDUsIDE0NywgCisgICAgMjEyLCA2NSwgNjgsIDExNywgNSwgMTQ3LCAxNjIsIDY4LCAxLCAyNDIsIDEzOSwgMjA2LCA2OCwgMjEsIDIxMCwgODYsIDY4LCAKKyAgICAyMSwgMTExLCA2OCwgMjEsIDEwNSwgNjgsIDIxLCAxNTgsIDY4LCAyMSwgMTYxLCA2OCwgMjEsIDE5MCwgNjgsIDIxLCAxOTUsIAorICAgIDY4LCAyMSwgMTk5LCA2OCwgMjEsIDE5NiwgNjgsIDIxLCAyMDEsIDY4LCA1LCAyMzIsIDE5OCwgMjIxLCAxNzQsIDY4LCA1LCAKKyAgICAyMjEsIDE3NCwgNjgsIDE2LCAyMzIsIDE1OSwgNjgsIDE2LCAyNDksIDIyMSwgNjgsIDE2LCAyNTQsIDIyOSwgNjgsIDE2LCAKKyAgICAyNDMsIDU1LCA2OCwgMSwgMjIwLCAxMDQsIDY4LCAxLCAyMTgsIDIyNSwgNjgsIDEsIDE0OSwgMTUzLCA2OCwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgNjgsIDEsIDE0OSwgMTU2LCA2OCwgMSwgMTQ5LCAyMzIsIDE5MSwgNjgsIDI1LCA1LCAxNDksIDE1MywgNjgsIAorICAgIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA2OCwgMjUsIDUsIDE0OSwgMTU2LCA2OCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDY4LCAKKyAgICAxLCAyMzAsIDE1NiwgMjI5LCA4MiwgNjgsIDEsIDIzMCwgMTU2LCAyMzUsIDEyMCwgNjgsIDEsIDIzMCwgMTU2LCAyNTIsIAorICAgIDExOSwgNjgsIDEsIDIzMCwgMTU2LCAyNTIsIDExNCwgNjgsIDExNywgNSwgMjMwLCAxNTYsIDE0NywgMTk4LCA2OCwgMTE3LCAKKyAgICA1LCAyMzAsIDE1NiwgMTQ3LCAxODYsIDY4LCAxMTcsIDUsIDIzMCwgMTU2LCAxNDcsIDIzMywgMTQxLCA2OCwgMSwgMjIwLCAKKyAgICAxMTAsIDIzNCwgMjE5LCAyMjAsIDEwNCwgNjgsIDI1LCA1LCAyMjAsIDExMCwgMjM0LCAyMTksIDI0NSwgNjMsIDY4LCAxMzgsIAorICAgIDE2NCwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyNDEsIDI1NCwgNjgsIDEzOCwgMTY0LCAyMjAsIDExMCwgMjM0LCAyMTksIDIzNCwgCisgICAgMTg5LCAyMjUsIDEyNCwgNjgsIDEsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDIwOSwgNjgsIDEsIDIxMiwgCisgICAgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMjQsIDExNywgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgCisgICAgMjQ1LCA2MywgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE0LCAyMTQsIDY4LCA1LCAyMTIsIDcsIAorICAgIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAzMCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI5LCAKKyAgICA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjgsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIAorICAgIDIxOSwgMjE2LCAyNywgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI2LCA2OCwgMSwgMjQ1LCAKKyAgICAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjI4LCAxMTUsIDY4LCAxLCAyNDUsIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAKKyAgICAyMTAsIDE3NiwgNjgsIDEsIDI0NSwgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIDI0MiwgMjI0LCA2OCwgMjUsIDUsIDI0MywgCisgICAgNjYsIDIzNCwgMjE5LCA3NCwgNjgsIDI1LCA1LCAyMzQsIDE5NCwgMjI2LCAyMzgsIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDY5LCAKKyAgICA2OCwgMjUsIDUsIDIzNCwgMTk0LCAyNDUsIDIxNywgNjgsIDEsIDIyMCwgODgsIDE3NiwgNjgsIDEsIDIyMCwgODgsIDIzNCwgCisgICAgMTM4LCA2OCwgMSwgMjIwLCA4OCwgMjQzLCAxNDIsIDY4LCAxLCAyMjAsIDg4LCAyNTEsIDQxLCA2OCwgMSwgMjIwLCA4OCwgCisgICAgMjEwLCAxMTYsIDY4LCAxLCAyMjAsIDg4LCAyMjcsIDE2OSwgNjgsIDEsIDIyMCwgODgsIDI0OCwgMjI5LCA2OCwgMSwgMjIwLCAKKyAgICA4OCwgMTk4LCA2OCwgMSwgMjIwLCA4OCwgMjI1LCAxNTAsIDY4LCAxLCAyMjAsIDg4LCAyNDQsIDIwNCwgNjgsIDEsIDIyMCwgCisgICAgODgsIDI1MiwgMTk5LCA2OCwgMSwgMjIwLCA4OCwgMjE2LCAyMDksIDY4LCAxLCAyMjAsIDg4LCAxNjIsIDY4LCAxMTcsIDUsIAorICAgIDIyMCwgODgsIDE0NywgMjEyLCA2NSwgNjgsIDI1LCA1LCAyMjAsIDg4LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDIyMCwgODgsIAorICAgIDc2LCA2OCwgMjUsIDUsIDIyMCwgODgsIDE2MCwgNDgsIDY4LCAyNSwgNSwgMjIwLCA4OCwgNDAsIDIxMSwgMTE3LCA2OCwgNSwgCisgICAgMjIwLCA4OCwgMjE2LCAyOSwgNjgsIDUsIDIyMCwgODgsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg4LCAyMTYsIDI2LCA2OCwgCisgICAgNSwgMjIwLCA4OCwgMjE2LCAyNSwgNjgsIDUsIDIyMCwgODgsIDI0OSwgMTYwLCAyMTYsIDI5LCA2OCwgNSwgMjIwLCA4OCwgCisgICAgMjQ5LCAxNjAsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg4LCAyNDksIDE2MCwgMjQ1LCAxNjEsIDIxNiwgMzEsIDY4LCAxLCAKKyAgICAyMjIsIDEzMCwgMjI2LCA2NywgMjQ0LCAyMDQsIDY4LCA1LCAyMjIsIDEzMCwgMjI2LCA2NywgMjE2LCAyNiwgNjgsIDIyMCwgCisgICAgODgsIDIxLCAyMTAsIDg2LCA2OCwgMjIwLCA4OCwgMjEsIDExMSwgNjgsIDIyMCwgODgsIDIxLCAxMDUsIDY4LCAyMjAsIDg4LCAKKyAgICAyMSwgMTU4LCA2OCwgMjIwLCA4OCwgMjEsIDE2MSwgNjgsIDIyMCwgODgsIDIxLCAxOTAsIDY4LCAyMjAsIDg4LCAyMSwgCisgICAgMTk1LCA2OCwgMjIwLCA4OCwgMjEsIDE5OSwgNjgsIDIyMCwgODgsIDIxLCAxOTYsIDY4LCAyMjAsIDg4LCAyMSwgMjAxLCAKKyAgICA2OCwgNSwgMjM0LCAxMzIsIDIxNiwgMzAsIDY4LCA1LCAyMzQsIDEzMiwgMjE2LCAyOCwgNjgsIDI1LCA1LCAyNTQsIDE5OSwgCisgICAgNjEsIDY4LCAyNSwgNSwgMjU0LCAxOTksIDI1NCwgMjEwLCA2OCwgMTYsIDIyMCwgODgsIDExMSwgNjgsIDE2LCAyMjAsIDg4LCAKKyAgICAyNDUsIDM4LCA5OCwgNiwgMSwgMjU0LCAxMzEsIDk4LCA2LCAxLCAyNTIsIDE2MCwgOTgsIDYsIDEsIDI0MywgMTEzLCA5OCwgCisgICAgNiwgMSwgMjQ3LCAxMzYsIDk4LCA2LCAxLCAyNDUsIDE1OCwgOTgsIDYsIDEsIDIxMywgMTYwLCA5OCwgNiwgMSwgMjEwLCAKKyAgICA4OSwgOTgsIDYsIDEsIDIxNywgNjEsIDk4LCA2LCAxLCAyMzYsIDYsIDk4LCA2LCAxLCAyMzQsIDI0MCwgOTgsIDYsIDEsIAorICAgIDIzMywgODcsIDk4LCA2LCAxLCAyMzEsIDE5MCwgOTgsIDYsIDEsIDIyOSwgMjAwLCA5OCwgNiwgMSwgMjI2LCAyMDAsIDk4LCAKKyAgICA2LCAxLCAyMjYsIDIxLCA5OCwgNiwgMSwgMjEwLCA3OCwgOTgsIDYsIDEsIDIyMywgMTc0LCA5OCwgNiwgMSwgMjIxLCAyNDUsIAorICAgIDk4LCA2LCAxLCAyMTcsIDUxLCA5OCwgNiwgMSwgMjE0LCAxOTAsIDk4LCA2LCAxLCAyMjUsIDE0MywgOTgsIDYsIDEsIDIzNCwgCisgICAgMTI3LCA5OCwgNiwgMSwgMjQyLCAyNDgsIDk4LCA2LCAxLCAyMjQsIDc2LCA5OCwgNiwgMSwgMjIwLCAyMiwgOTgsIDYsIDEsIAorICAgIDI1MCwgMTA1LCA5OCwgNiwgMSwgMjUxLCAxNSwgOTgsIDYsIDEsIDIzNSwgMTA2LCA5OCwgNiwgMSwgMjUwLCA0OCwgOTgsIAorICAgIDYsIDEsIDI1MCwgMTUxLCA5OCwgNiwgMSwgMjExLCAxNjMsIDk4LCA2LCAxLCAyMzUsIDExNywgOTgsIDYsIDEsIDI0MiwgCisgICAgNTAsIDk4LCA2LCAxLCAyNDEsIDI0NSwgOTgsIDYsIDEsIDI0MSwgMTgyLCA5OCwgNiwgMSwgMjEyLCAyMiwgOTgsIDYsIDEsIAorICAgIDI0MiwgMTEsIDk4LCA2LCAxLCAyNDEsIDcyLCA5OCwgNiwgMSwgMjEwLCAyNDYsIDk4LCA2LCAxLCAyNTQsIDI0MSwgOTgsIAorICAgIDEsIDI1NCwgMTMxLCA5OCwgMSwgMjUyLCAxNjAsIDk4LCAxLCAyNDMsIDExMywgOTgsIDEsIDI0NywgMTM2LCA5OCwgMSwgCisgICAgMjQ1LCAxNTgsIDk4LCAxLCAyMTMsIDE2MCwgOTgsIDEsIDIxMCwgODksIDk4LCAxLCAyMTcsIDYxLCA5OCwgMSwgMjM2LCA2LCAKKyAgICA5OCwgMSwgMjM0LCAyNDAsIDk4LCAxLCAyMzMsIDg3LCA5OCwgMSwgMjMxLCAxOTAsIDk4LCAxLCAyMjksIDIwMCwgOTgsIDEsIAorICAgIDIyNiwgMjAwLCA5OCwgMSwgMjI2LCAyMSwgOTgsIDEsIDIxMCwgNzgsIDk4LCAxLCAyMjMsIDE3NCwgOTgsIDEsIDIyMSwgCisgICAgMjQ1LCA5OCwgMSwgMjE3LCA1MSwgOTgsIDEsIDIxNCwgMTkwLCA5OCwgMSwgMjI1LCAxNDMsIDk4LCAxLCAyMzQsIDEyNywgCisgICAgOTgsIDEsIDI0MiwgMjQ4LCA5OCwgMSwgMjI0LCA3NiwgOTgsIDEsIDIyMCwgMjIsIDk4LCAxLCAyNTAsIDEwNSwgOTgsIDEsIAorICAgIDI1MSwgMTUsIDk4LCAxLCAyMzUsIDEwNiwgOTgsIDEsIDI1MCwgNDgsIDk4LCAxLCAyNTAsIDE1MSwgOTgsIDEsIDIxMSwgCisgICAgMTYzLCA5OCwgMSwgMjM1LCAxMTcsIDk4LCAxLCAyNDIsIDUwLCA5OCwgMSwgMjQxLCAyNDUsIDk4LCAxLCAyNDEsIDE4MiwgCisgICAgOTgsIDEsIDIxMiwgMjIsIDk4LCAxLCAyNDIsIDExLCA5OCwgMSwgMjQxLCA3MiwgOTgsIDEsIDI0NCwgMTI5LCA5OCwgMSwgCisgICAgMjEwLCAyNDYsIDk4LCAxLCAyNDUsIDE3MywgOTgsIDEsIDIxNSwgOTQsIDI0MywgMTEzLCA5OCwgMSwgMjU0LCAyMDUsIDk4LCAKKyAgICAyMjYsIDE5LCAyMjAsIDEzOSwgNTgsIDEsIDk4LCAyMjksIDIwMCwgOTgsIDEsIDI1NCwgMjQxLCA5OCwgMSwgMjQyLCAxMCwgCisgICAgNTAsIDk4LCAxLCAyMzMsIDEzMywgNTAsIDI0LCAxMDAsIDIzNCwgNjQsIDI0LCAxMDAsIDIxOCwgMjE3LCAyNCwgMTAwLCAKKyAgICAyMjgsIDIzMSwgMjQsIDEwMCwgMjE2LCAxMDIsIDI0LCAxMDAsIDIxOCwgMjA2LCAyNCwgMTAwLCAyMjMsIDI5LCAyNCwgCisgICAgMTAwLCAyMzAsIDIyMiwgMjQsIDEwMCwgMjI1LCA5OCwgMjQsIDEwMCwgMjE4LCAyMTQsIDI0LCAxMDAsIDIxOSwgMTUwLCAKKyAgICAyNCwgMTAwLCAyMTgsIDIxMSwgMjQsIDEwMCwgMjM2LCA2MywgMjQsIDEwMCwgMjUwLCA1NCwgMjQsIDEwMCwgMjE4LCAyMjEsIAorICAgIDI0LCAxMDAsIDI1MCwgMTE0LCAyNCwgMTAwLCAyMzQsIDExNiwgMjQsIDEwMCwgMjE2LCAxNzQsIDI0LCAxMDAsIDIyNSwgCisgICAgMTM0LCAyNCwgMTAwLCAyNDEsIDE3OSwgMjQsIDEwMCwgMjI4LCAyMjcsIDI0LCAxMDAsIDIxOCwgMjE1LCAyNCwgMTAwLCAKKyAgICAyMjgsIDIyMSwgMjQsIDEwMCwgMjI4LCAyMjUsIDI0LCAxMDAsIDIxNiwgOTksIDI0LCAxMDAsIDIyMywgMTcsIDI0LCAxMDAsIAorICAgIDIxOCwgMjEzLCAyNCwgMTAwLCAyMjMsIDI3LCAyNCwgMTAwLCAyMzQsIDIyNCwgMjQsIDEwMCwgMjMwLCAyMTUsIDI0LCAKKyAgICAxMDAsIDIzNCwgMjI3LCAyNCwgMTAwLCAyMjUsIDkzLCAyNCwgMTAwLCAyMjUsIDkxLCAyNCwgMTAwLCAyMjUsIDc5LCAyNCwgCisgICAgMTAwLCAyMjUsIDg3LCAyNCwgMTAwLCAyMjUsIDg1LCAyNCwgMTAwLCAyMjUsIDgyLCAyNCwgMTAwLCAyMjUsIDg0LCAyNCwgCisgICAgMTAwLCAyMjUsIDgxLCAyNCwgMTAwLCAyMjUsIDg2LCAyNCwgMTAwLCAyMjUsIDk2LCAyNCwgMTAwLCAyMjUsIDk3LCAyNCwgCisgICAgMTAwLCAyMjUsIDgwLCAyNCwgMTAwLCAyMjUsIDkwLCAyNCwgMTAwLCAyMzQsIDIyNSwgMjQsIDEwMCwgMjM0LCAyMjMsIDI0LCAKKyAgICAxMDAsIDIxOSwgMTQzLCAyNCwgMTAwLCAyMTksIDE0MSwgMjQsIDEwMCwgMjE5LCAxMzMsIDI0LCAxMDAsIDIxOSwgMTM2LCAKKyAgICAyNCwgMTAwLCAyMTksIDE0MiwgMjQsIDEwMCwgMjE5LCAxMzgsIDI0LCAxMDAsIDIxOSwgMTM3LCAyNCwgMTAwLCAyMTksIAorICAgIDEzNSwgMjQsIDEwMCwgMjE5LCAxNDYsIDI0LCAxMDAsIDIxOSwgMTQ4LCAyNCwgMTAwLCAyMTksIDE0OSwgMjQsIDEwMCwgCisgICAgMjE5LCAxNDQsIDI0LCAxMDAsIDIxOSwgMTM0LCAyNCwgMTAwLCAyMTksIDEzOSwgMjQsIDEwMCwgMjE5LCAxNDcsIDI0LCAKKyAgICAxMDAsIDI1MCwgOTgsIDI0LCAxMDAsIDI1MCwgOTYsIDI0LCAxMDAsIDI1MCwgMTc2LCAyNCwgMTAwLCAyNTAsIDE3NCwgMjQsIAorICAgIDEwMCwgMjI2LCAzNiwgMjQsIDEwMCwgMjM2LCA1OCwgMjQsIDEwMCwgMjM2LCA0OSwgMjQsIDEwMCwgMjM2LCA1NywgMjQsIAorICAgIDEwMCwgMjM2LCA1NCwgMjQsIDEwMCwgMjM2LCA1MiwgMjQsIDEwMCwgMjM2LCA1NiwgMjQsIDEwMCwgMjE4LCAyMTgsIDI0LCAKKyAgICAxMDAsIDIzNiwgNjEsIDI0LCAxMDAsIDIzNiwgNjIsIDI0LCAxMDAsIDIzNiwgNTAsIDI0LCAxMDAsIDIzNiwgNTUsIDI0LCAKKyAgICAxMDAsIDIxMSwgMjYsIDI0LCAxMDAsIDI1MCwgNTMsIDI0LCAxMDAsIDI1MCwgOTksIDI0LCAxMDAsIDI1MCwgOTcsIDI0LCAKKyAgICAxMDAsIDI1MCwgMTc3LCAyNCwgMTAwLCAyNTAsIDE3NSwgMjQsIDEwMCwgMjUwLCAxMTIsIDI0LCAxMDAsIDI1MCwgMTEzLCAKKyAgICAyNCwgMTAwLCAyNTAsIDEwMCwgMjQsIDEwMCwgMjUwLCAxNzgsIDI0LCAxMDAsIDIyNSwgMTMyLCAyNCwgMTAwLCAyMzQsIAorICAgIDIyNiwgMjQsIDEwMCwgMjE4LCAyMTksIDI0LCAxMDAsIDIxMSwgMzIsIDI0LCAxMDAsIDIzNCwgNTUsIDI0LCAxMDAsIDIyOCwgCisgICAgMjIzLCAyNCwgMTAwLCAyMjgsIDIyOSwgMjQsIDEwMCwgMjI4LCAyMjgsIDI0LCAxMDAsIDIxNiwgOTYsIDI0LCAxMDAsIAorICAgIDI0NCwgMTExLCAyNCwgMTQzLCAyNDQsIDExMSwgMjQsIDE0MywgNjEsIDI0LCAxNDMsIDI1NCwgMjUyLCAyNCwgMTQzLCAKKyAgICAxOTIsIDI0LCAxNDMsIDIxMSwgOTIsIDI0LCAxNDMsIDI0NSwgMTI1LCAyNCwgMTQzLCA3NiwgMjQsIDE0MywgMjExLCAzNiwgCisgICAgMjQsIDE0MywgMjExLCA0NywgMjQsIDE0MywgNzgsIDI0LCAxNDMsIDIxMiwgNjUsIDI0LCAxNDMsIDIxMiwgNjIsIDI0LCAKKyAgICAxNDMsIDIyNiwgMjM4LCAyNCwgMTQzLCAyMTAsIDI0NCwgMjQsIDE0MywgNjksIDI0LCAxNDMsIDIxMiwgMTEsIDI0LCAxNDMsIAorICAgIDIxMiwgMjIsIDI0LCAxNDMsIDIxMSwgMjUwLCAyNCwgMTQzLCAyMTAsIDIxMiwgMjQsIDE0MywgMjQ1LCA2MywgMjQsIDE0MywgCisgICAgMjExLCA4LCAyNCwgMTQzLCA3NCwgMjQsIDE0MywgMjU1LCAxNjYsIDI0LCAxNDMsIDI1NSwgMTY1LCAyNCwgMTQzLCAyMTEsIAorICAgIDEwNiwgMjQsIDE0MywgMjExLCAxMDQsIDI0LCAxNDMsIDI0NSwgMTIzLCAyNCwgMTQzLCAyNDUsIDEyMiwgMjQsIDE0MywgCisgICAgMjQ1LCAxMjQsIDI0LCAxNDMsIDIxMSwgMzUsIDI0LCAxNDMsIDIxMSwgMzQsIDI0LCAxNDMsIDIyNywgODgsIDI0LCAxNDMsIAorICAgIDIyNywgODksIDI0LCAxNDMsIDIyNywgODIsIDI0LCAxNDMsIDIyNywgODcsIDI0LCAxNDMsIDIyNywgODUsIDI0LCAxNDMsIAorICAgIDIxMCwgMjM4LCAyNCwgMTQzLCAyMTAsIDIzNywgMjQsIDE0MywgMjEwLCAyMzYsIDI0LCAxNDMsIDIxMCwgMjM5LCAyNCwgCisgICAgMTQzLCAyMTAsIDI0MCwgMjQsIDE0MywgMjE1LCAzMCwgMjQsIDE0MywgMjE1LCAyOSwgMjQsIDE0MywgMjE1LCAyNywgMjQsIAorICAgIDE0MywgMjE1LCAyNCwgMjQsIDE0MywgMjE1LCAyNSwgMjQsIDE0MywgMjEwLCAyMTEsIDI0LCAxNDMsIDIxMCwgMjA4LCAyNCwgCisgICAgMTQzLCAyMTAsIDIwOSwgMjQsIDE0MywgMjEwLCAyMDMsIDI0LCAxNDMsIDIxMCwgMjA0LCAyNCwgMTQzLCAyMTAsIDIwNSwgCisgICAgMjQsIDE0MywgMjEwLCAyMDcsIDI0LCAxNDMsIDI0NSwgNTcsIDI0LCAxNDMsIDI0NSwgNTksIDI0LCAxNDMsIDIxMSwgNywgCisgICAgMjQsIDE0MywgMjQwLCAxNjAsIDI0LCAxNDMsIDI0MCwgMTUyLCAyNCwgMTQzLCAyNDAsIDE1NSwgMjQsIDE0MywgMjQwLCAKKyAgICAxNTMsIDI0LCAxNDMsIDI0MCwgMTU3LCAyNCwgMTQzLCAyNDAsIDE1OSwgMjQsIDE0MywgMjU0LCA0MiwgMjQsIDE0MywgCisgICAgMjU0LCAzOSwgMjQsIDE0MywgMjU0LCAzNywgMjQsIDE0MywgMjU0LCAzOCwgMjQsIDE0MywgMjE4LCAyMjIsIDI0LCAxNDMsIAorICAgIDI1NSwgMTY3LCAyNCwgMTQzLCAyMTEsIDEwNSwgMjQsIDE0MywgMjExLCAzMywgMjQsIDE0MywgMjI3LCA4NCwgMjQsIDE0MywgCisgICAgMjI3LCA4MywgMjQsIDkwLCAyMzQsIDY0LCAyNCwgOTAsIDIxOCwgMjE3LCAyNCwgOTAsIDIzNCwgNTcsIDI0LCA5MCwgMjI4LCAKKyAgICAyMzEsIDI0LCA5MCwgMjI4LCAyMjksIDI0LCA5MCwgMjI4LCAyMjgsIDI0LCA5MCwgMjE2LCAxMDIsIDI0LCA5MCwgMjIzLCAKKyAgICAyOSwgMjQsIDkwLCAyMjMsIDI0LCAyNCwgOTAsIDIyMywgMjEsIDI0LCA5MCwgMjIzLCAxNCwgMjQsIDkwLCAyMjMsIDksIAorICAgIDI0LCA5MCwgMjIzLCA0LCAyNCwgOTAsIDIyMywgMTUsIDI0LCA5MCwgMjIzLCAyNywgMjQsIDkwLCAyMzAsIDIyMiwgMjQsIAorICAgIDkwLCAyMjUsIDk4LCAyNCwgOTAsIDIyNSwgODcsIDI0LCA5MCwgMjE5LCAxNTAsIDI0LCA5MCwgMjE4LCAyMTEsIDI0LCA5MCwgCisgICAgMjM2LCA2MywgMjQsIDkwLCAyNTAsIDU0LCAyNCwgOTAsIDI1MCwgMTE0LCAyNCwgOTAsIDIzNCwgMTE2LCAyNCwgOTAsIAorICAgIDIxNiwgMTc0LCAyNCwgOTAsIDIyNSwgMTM0LCAyNCwgOTAsIDI0MSwgMTc5LCAyNCwgOTAsIDIzNCwgNTgsIDI0LCA5MCwgCisgICAgMjM0LCA1NiwgMjQsIDkwLCAyMjgsIDIyNywgMjQsIDkwLCAyMjgsIDIyMSwgMjQsIDkwLCAyMjgsIDIyMywgMjQsIDkwLCAKKyAgICAyMjgsIDIyNiwgMjQsIDkwLCAyMjgsIDIyMiwgMjQsIDkwLCAyMTYsIDk5LCAyNCwgOTAsIDIxNiwgOTYsIDI0LCA5MCwgCisgICAgMjIzLCAyMiwgMjQsIDkwLCAyMjMsIDE3LCAyNCwgOTAsIDIyMywgMywgMjQsIDkwLCAyMjMsIDIsIDI0LCA5MCwgMjE4LCAKKyAgICAyMTMsIDI0LCA5MCwgMjIzLCAxOSwgMjQsIDkwLCAyMjMsIDE4LCAyNCwgOTAsIDIyMywgMTEsIDI0LCA5MCwgMjIzLCAxMywgCisgICAgMjQsIDkwLCAyMjMsIDI2LCAyNCwgOTAsIDIyMywgNiwgMjQsIDkwLCAyMjMsIDE2LCAyNCwgOTAsIDIyMywgMjUsIDI0LCAKKyAgICA5MCwgMjIzLCAxLCAyNCwgOTAsIDIzMCwgMjE4LCAyNCwgOTAsIDIzMCwgMjEzLCAyNCwgOTAsIDIzMCwgMjE1LCAyNCwgOTAsIAorICAgIDIzMCwgMjEyLCAyNCwgOTAsIDIzMCwgMjEwLCAyNCwgOTAsIDIzMCwgMjE2LCAyNCwgOTAsIDIzMCwgMjIxLCAyNCwgOTAsIAorICAgIDIzMCwgMjE5LCAyNCwgOTAsIDIzNCwgMjI3LCAyNCwgOTAsIDIyNSwgODksIDI0LCA5MCwgMjI1LCA5MCwgMjQsIDkwLCAKKyAgICAyMjUsIDk1LCAyNCwgOTAsIDIzNCwgMjI1LCAyNCwgOTAsIDIxOSwgMTQzLCAyNCwgOTAsIDIxOSwgMTMzLCAyNCwgOTAsIAorICAgIDIxOSwgMTM2LCAyNCwgOTAsIDIxOSwgMTM4LCAyNCwgOTAsIDIyNiwgMzYsIDI0LCA5MCwgMjM2LCA1OCwgMjQsIDkwLCAKKyAgICAyMzYsIDUxLCAyNCwgOTAsIDIxOCwgMjE4LCAyNCwgOTAsIDIzNiwgNTksIDI0LCA5MCwgMjExLCAyNiwgMjQsIDkwLCAyMTEsIAorICAgIDIyLCAyNCwgOTAsIDIxMSwgMjMsIDI0LCA5MCwgMjI1LCAxMzIsIDI0LCA5MCwgMjM0LCAyMjYsIDI0LCA5MCwgMjQxLCAKKyAgICAxNzcsIDI0LCA5MCwgMjQxLCAxNzUsIDI0LCA5MCwgMjQxLCAxNzgsIDI0LCA5MCwgMjQxLCAxNzYsIDI0LCA5MCwgMjExLCAKKyAgICAzMiwgMjQsIDkwLCAyMzQsIDYwLCAyNCwgOTAsIDIzNCwgNTksIDI0LCA5MCwgMjM0LCA2MywgMjQsIDkwLCAyMzQsIDYxLCAKKyAgICAyNCwgOTAsIDIzNCwgNjIsIDI0LCA5MCwgMjE4LCAyMTUsIDI5LCAzLCAxNjIsIDI5LCAzLCAyNDAsIDIyOSwgMjksIDMsIAorICAgIDI0MSwgMTg3LCAyOSwgMywgMjQyLCA1MywgMjksIDMsIDI0MSwgMjI3LCAyOSwgMywgMjQxLCAyNDUsIDI5LCAzLCAyNDEsIAorICAgIDc1LCAyOSwgMywgMjQxLCA3NCwgMjksIDMsIDIzMywgMTQxLCAyOSwgMywgMjMyLCAxMDMsIDI5LCAzLCAyMzIsIDI0NywgCisgICAgMjksIDMsIDIzMywgMTQwLCAyOSwgMywgMjMzLCA1NiwgMjksIDMsIDIzMywgNjQsIDI5LCAzLCAyMzIsIDE2MiwgMjksIDMsIAorICAgIDIzMiwgNzUsIDI5LCAzLCAyNDEsIDE5NiwgMjksIDMsIDI0MSwgMTkwLCAyOSwgMywgMjQxLCAxOTIsIDI5LCAzLCAyNDEsIAorICAgIDE5NSwgMjksIDMsIDI0MSwgMTkzLCAyOSwgMywgMjQxLCAxOTQsIDI5LCAzLCAyNDEsIDE5MSwgMjksIDMsIDI0MSwgMTg5LCAKKyAgICAyOSwgMywgMTg2LCAyOSwgMywgMjMwLCAxMDcsIDI5LCAzLCAyMzAsIDIzNSwgMjksIDMsIDIzMSwgMjQyLCAyOSwgMywgCisgICAgMjMxLCA4NSwgMjksIDMsIDIzMSwgOTYsIDI5LCAzLCAyMzAsIDE2NiwgMjksIDMsIDIzMCwgNDcsIDI5LCAzLCAyMTcsIAorICAgIDE2NCwgMjksIDMsIDIxNywgMTU4LCAyOSwgMywgMjE3LCAxNjAsIDI5LCAzLCAyMTcsIDE2MywgMjksIDMsIDIxNywgMTYxLCAKKyAgICAyOSwgMywgMjE3LCAxNjIsIDI5LCAzLCAyMTcsIDE1OSwgMjksIDMsIDIxNywgMTU3LCAyOSwgMywgMjA1LCAyOSwgMywgCisgICAgMjIyLCAxNDIsIDI5LCAzLCAyMjMsIDM4LCAyOSwgMywgMjIzLCAxODcsIDI5LCAzLCAyMjMsIDExMSwgMjksIDMsIDIyMywgCisgICAgMTMxLCAyOSwgMywgMjIyLCAyMTMsIDI5LCAzLCAyMjIsIDExMSwgMjksIDMsIDIwNiwgMjksIDMsIDIxOCwgODQsIDI5LCAzLCAKKyAgICAyMTksIDE5MywgMjksIDMsIDIyMiwgMzMsIDI5LCAzLCAyMjEsIDE3MiwgMjksIDMsIDIyMSwgMTgzLCAyOSwgMywgMjE5LCAKKyAgICA2MCwgMjksIDMsIDIxNywgMjU0LCAyOSwgMywgMjIwLCAxMDQsIDI5LCAzLCAyMTksIDIyNywgMjksIDMsIDIyMCwgMzQsIAorICAgIDI5LCAzLCAyMjAsIDEwMCwgMjksIDMsIDIyMCwgNjMsIDI5LCAzLCAyMjAsIDY1LCAyOSwgMywgMjIwLCA5LCAyOSwgMywgCisgICAgMjE5LCAyMTAsIDI5LCAzLCAyMjQsIDkxLCAyOSwgMywgMjI0LCAzMywgMjksIDMsIDIyNCwgNTYsIDI5LCAzLCAyMjQsIDkwLCAKKyAgICAyOSwgMywgMjI0LCA3MSwgMjksIDMsIDIyNCwgNzIsIDI5LCAzLCAyMjQsIDQ1LCAyOSwgMywgMjI0LCA0NCwgMjksIDMsIAorICAgIDIyMywgMjQ1LCAyOSwgMywgMjIzLCAyNDEsIDI5LCAzLCAyMjMsIDI0NCwgMjksIDMsIDIyMywgMjQyLCAyOSwgMywgMjIzLCAKKyAgICAyNDMsIDI5LCAzLCAyMjQsIDY4LCAyOSwgMywgMjI0LCA2MiwgMjksIDMsIDIyNCwgNjQsIDI5LCAzLCAyMjQsIDY3LCAyOSwgCisgICAgMywgMjI0LCA2NSwgMjksIDMsIDIyNCwgNjYsIDI5LCAzLCAyMjQsIDYzLCAyOSwgMywgMjI0LCA2MSwgMjksIDMsIDIyNCwgCisgICAgNTcsIDI5LCAzLCAyMjQsIDYwLCAyOSwgMywgMjI0LCA1OCwgMjksIDMsIDIyNCwgNTksIDI5LCAzLCAyNTIsIDE5OSwgMjksIAorICAgIDMsIDI1MSwgMTMzLCAyOSwgMywgMjUyLCAxNCwgMjksIDMsIDI1MiwgMTk3LCAyOSwgMywgMjUyLCA3NCwgMjksIDMsIDI1MiwgCisgICAgODMsIDI5LCAzLCAyNTEsIDIxMywgMjksIDMsIDI1MSwgOTEsIDI5LCAzLCAyMTQsIDI3LCAyOSwgMywgMjEyLCAxMTYsIDI5LCAKKyAgICAzLCAyMTMsIDE3NiwgMjksIDMsIDIxNCwgMjYsIDI5LCAzLCAyMTMsIDI1MCwgMjksIDMsIDIxMywgMjU1LCAyOSwgMywgCisgICAgMjEzLCAxMzgsIDI5LCAzLCAyMTIsIDEwNywgMjksIDMsIDIxNywgMTA2LCAyOSwgMywgMjE1LCAxMTksIDI5LCAzLCAyMTYsIAorICAgIDExOCwgMjksIDMsIDIxNywgMTAyLCAyOSwgMywgMjE3LCAxMiwgMjksIDMsIDIxNywgMjMsIDI5LCAzLCAxMTIsIDI5LCAzLCAKKyAgICAyMTUsIDgwLCAyOSwgMywgMjUxLCA0MSwgMjksIDMsIDI0OSwgMTIwLCAyOSwgMywgMjUwLCA1OSwgMjksIDMsIDI1MSwgNDAsIAorICAgIDI5LCAzLCAyNTAsIDE5MCwgMjksIDMsIDI1MCwgMTk4LCAyOSwgMywgMjQ5LCAyNDYsIDI5LCAzLCAyNDksIDg5LCAyOSwgMywgCisgICAgMjExLCAxNjUsIDI5LCAzLCAyMTEsIDE0MSwgMjksIDMsIDIxMSwgMTU3LCAyOSwgMywgMjExLCAxNjQsIDI5LCAzLCAyMTEsIAorICAgIDE2MSwgMjksIDMsIDIxMSwgMTYyLCAyOSwgMywgMjExLCAxNDgsIDI5LCAzLCAyMTEsIDE0NywgMjksIDMsIDIxMSwgMTM2LCAKKyAgICAyOSwgMywgMjExLCAxMzIsIDI5LCAzLCAyMTEsIDEzNSwgMjksIDMsIDIxMSwgMTMzLCAyOSwgMywgMjExLCAxMzQsIDI5LCAKKyAgICAzLCAxOTgsIDI5LCAzLCAyMjcsIDI0MiwgMjksIDMsIDIyOCwgMjM4LCAyOSwgMywgMjI5LCAyMzAsIDI5LCAzLCAyMjksIAorICAgIDEwOCwgMjksIDMsIDIyOSwgMTEyLCAyOSwgMywgMjI4LCA3OSwgMjksIDMsIDIyNywgMTc4LCAyOSwgMywgMjI3LCAxNjksIAorICAgIDI5LCAzLCAyMjcsIDEzMiwgMjksIDMsIDIyNywgMTUyLCAyOSwgMywgMjI3LCAxNjgsIDI5LCAzLCAyMjcsIDE1OSwgMjksIAorICAgIDMsIDIyNywgMTYwLCAyOSwgMywgMjI3LCAxMzgsIDI5LCAzLCAyMjcsIDEyMywgMjksIDMsIDI0MiwgMTg3LCA2MSwgMjksIAorICAgIDMsIDI0MiwgMTg3LCA2OSwgMjksIDMsIDI0MiwgMTg3LCA3NCwgMjksIDMsIDI0MiwgMTg3LCAyNTUsIDgyLCAyOSwgMywgCisgICAgMjQyLCAxODcsIDI0NSwgMjE3LCAyOSwgMywgMjQyLCAxODcsIDc2LCAyOSwgMywgMjQyLCAxODcsIDc4LCAyOSwgMywgMjQyLCAKKyAgICAxODcsIDIxMiwgNjUsIDI5LCAzLCAxNzYsIDI5LCAzLCAyMzMsIDIyMywgMjksIDMsIDIzNCwgOTgsIDI5LCAzLCAyMzUsIAorICAgIDE2LCAyOSwgMywgMjM0LCAxODcsIDI5LCAzLCAyMzQsIDE4OCwgMjksIDMsIDIzNCwgMzQsIDI5LCAzLCAyMzQsIDMzLCAyOSwgCisgICAgMywgMjMzLCAxODgsIDI5LCAzLCAyMzMsIDE4MiwgMjksIDMsIDIzMywgMTg3LCAyOSwgMywgMjMzLCAxODMsIDI5LCAzLCAKKyAgICAyMzMsIDE4NCwgMjksIDMsIDIzMywgMTc3LCAyOSwgMywgMjMzLCAxNzEsIDI5LCAzLCAyMzMsIDE3MywgMjksIDMsIDIzMywgCisgICAgMTc2LCAyOSwgMywgMjMzLCAxNzQsIDI5LCAzLCAyMzMsIDE3NSwgMjksIDMsIDIzMywgMTcyLCAyOSwgMywgMjMzLCAxNzAsIAorICAgIDI5LCAzLCAyMzMsIDE2NiwgMjksIDMsIDIzMywgMTY5LCAyOSwgMywgMjMzLCAxNjcsIDI5LCAzLCAyMzMsIDE2OCwgMjksIAorICAgIDMsIDIxMiwgNjUsIDI5LCAzLCAyMTEsIDE5NSwgMjksIDMsIDIxMSwgMjUwLCAyOSwgMywgMjEyLCA2NCwgMjksIDMsIDIxMiwgCisgICAgMTcsIDI5LCAzLCAyMTIsIDIyLCAyOSwgMywgMjExLCAyMjcsIDI5LCAzLCAyMTEsIDIyNiwgMjksIDMsIDIyNSwgMTQyLCAKKyAgICA2MSwgMjksIDMsIDIyNSwgMTQyLCA2OSwgMjksIDMsIDIyNSwgMTQyLCA3NCwgMjksIDMsIDIyNSwgMTQyLCAyNTUsIDgyLCAKKyAgICAyOSwgMywgMjI1LCAxNDIsIDI0NSwgMjE3LCAyOSwgMywgMjI1LCAxNDIsIDc2LCAyOSwgMywgMjI1LCAxNDIsIDc4LCAyOSwgCisgICAgMywgMjEwLCAxMTYsIDI5LCAzLCAyMTAsIDEzLCAyOSwgMywgMjEwLCA0NCwgMjksIDMsIDIxMCwgMTE1LCAyOSwgMywgMjEwLCAKKyAgICA5MiwgMjksIDMsIDIxMCwgOTQsIDI5LCAzLCAyMTAsIDIzLCAyOSwgMywgMjEwLCAwLCAyOSwgMywgMjEwLCA4MiwgMjksIDMsIAorICAgIDIxMCwgNjIsIDI5LCAzLCAyMTAsIDY5LCAyOSwgMywgMjEwLCA4MSwgMjksIDMsIDIxMCwgNzMsIDI5LCAzLCAyMTAsIDc0LCAKKyAgICAyOSwgMywgMjEwLCA2NywgMjksIDMsIDIxMCwgNTMsIDI5LCAzLCAxOTIsIDI5LCAzLCAyMTAsIDIxMiwgMjksIDMsIDIxMSwgCisgICAgOCwgMjksIDMsIDIxMSwgMTAzLCAyOSwgMywgMjExLCA0NCwgMjksIDMsIDIxMSwgNDcsIDI5LCAzLCAyMTAsIDI0NCwgMjksIAorICAgIDMsIDIxMCwgMjM1LCAyOSwgMywgMjQ4LCAyMjksIDI5LCAzLCAyNDYsIDg2LCAyOSwgMywgMjQ4LCAxMSwgMjksIDMsIDI0OCwgCisgICAgMjI4LCAyOSwgMywgMjQ4LCA4NSwgMjksIDMsIDI0OCwgOTgsIDI5LCAzLCAyNDcsIDE1MywgMjksIDMsIDI0NiwgNTUsIDI5LCAKKyAgICAzLCAyNDgsIDE0MywgMjksIDMsIDI0OCwgMTA4LCAyOSwgMywgMjQ4LCAxMjAsIDI5LCAzLCAyNDgsIDE0MiwgMjksIDMsIAorICAgIDI0OCwgMTMwLCAyOSwgMywgMjQ4LCAxMzEsIDI5LCAzLCAyNDgsIDExMywgMjksIDMsIDI0OCwgOTksIDI5LCAzLCAyMzUsIAorICAgIDE0NywgMjksIDMsIDIzNSwgNTcsIDI5LCAzLCAyMzUsIDExNCwgMjksIDMsIDIzNSwgMTQ2LCAyOSwgMywgMjM1LCAxMzAsIAorICAgIDI5LCAzLCAyMzUsIDEzMiwgMjksIDMsIDIzNSwgNzQsIDI5LCAzLCAyMzUsIDM3LCAyOSwgMywgMjQzLCAxNDIsIDI5LCAzLCAKKyAgICAyNDIsIDEyMCwgMjksIDMsIDI0MiwgMjIxLCAyOSwgMywgMjQzLCAxMzksIDI5LCAzLCAyNDMsIDYyLCAyOSwgMywgMjQzLCAKKyAgICA2OSwgMjksIDMsIDI0MiwgMTgxLCAyOSwgMywgMjQyLCAxODAsIDI5LCAzLCAyNDIsIDg1LCAyOSwgMywgMjQyLCA4MSwgMjksIAorICAgIDMsIDI0MiwgODQsIDI5LCAzLCAyNDIsIDgyLCAyOSwgMywgMjQyLCA4MywgMjksIDMsIDI0MywgMzYsIDI5LCAzLCAyNDMsIAorICAgIDE2LCAyOSwgMywgMjQzLCAyNiwgMjksIDMsIDI0MywgMzUsIDI5LCAzLCAyNDMsIDMwLCAyOSwgMywgMjQzLCAzMSwgMjksIAorICAgIDMsIDI0MywgMjAsIDI5LCAzLCAyNDMsIDUsIDI5LCAzLCAyMTYsIDIwOSwgMjksIDMsIDIxNiwgMTM3LCAyOSwgMywgMjE2LCAKKyAgICAxNzYsIDI5LCAzLCAyMTYsIDIwOCwgMjksIDMsIDIxNiwgMTk1LCAyOSwgMywgMjE2LCAxOTYsIDI5LCAzLCAyMTYsIDE1NywgCisgICAgMjksIDMsIDIxNiwgMTI5LCAyOSwgMywgMjUwLCAxNjUsIDI5LCAzLCAyNTAsIDc3LCAyOSwgMywgMjUwLCAxMTgsIDI5LCAzLCAKKyAgICAyNTAsIDE2NCwgMjksIDMsIDI1MCwgMTM2LCAyOSwgMywgMjUwLCAxMzksIDI5LCAzLCAyNTAsIDk0LCAyOSwgMywgMjUwLCAKKyAgICA2NiwgMjksIDMsIDIyNSwgMTUwLCAyOSwgMywgMjI1LCAxMTcsIDI5LCAzLCAyMjUsIDEzNiwgMjksIDMsIDIyNSwgMTQ5LCAKKyAgICAyOSwgMywgMjI1LCAxMzgsIDI5LCAzLCAyMjUsIDEzOSwgMjksIDMsIDIyNSwgMTI0LCAyOSwgMywgMjI1LCAxMTMsIDI5LCAKKyAgICAzLCAyMTUsIDE4NCwgMjksIDMsIDIxNSwgMTY0LCAyOSwgMywgMjE1LCAxNjgsIDI5LCAzLCAyMTUsIDE4MywgMjksIDMsIAorICAgIDIxNSwgMTc4LCAyOSwgMywgMjE1LCAxNzksIDI5LCAzLCAyMTUsIDE2NywgMjksIDMsIDIxNSwgMTYyLCAyOSwgMywgMjE1LCAKKyAgICAzOSwgMjksIDMsIDIxNSwgMzEsIDI5LCAzLCAyMTUsIDM1LCAyOSwgMywgMjE1LCAzOCwgMjksIDMsIDIxNSwgMzYsIDI5LCAKKyAgICAzLCAyMTUsIDM3LCAyOSwgMywgMjE1LCAzMywgMjksIDMsIDIxNSwgMzIsIDI5LCAzLCAyNDQsIDIwNCwgMjksIDMsIDI0MywgCisgICAgMjQxLCAyOSwgMywgMjQ0LCAxMjksIDI5LCAzLCAyNDQsIDIwMywgMjksIDMsIDI0NCwgMTU1LCAyOSwgMywgMjQ0LCAxNjIsIAorICAgIDI5LCAzLCAyNDQsIDUxLCAyOSwgMywgMjQzLCAyMjAsIDI5LCAzLCAxOTEsIDI5LCAzLCAyMjQsIDE1MywgMjksIDMsIDIyNSwgCisgICAgMTExLCAyOSwgMywgMjI2LCA5MywgMjksIDMsIDIyNSwgMjE0LCAyOSwgMywgMjI1LCAyMjQsIDI5LCAzLCAyMjUsIDE5LCAKKyAgICAyOSwgMywgMjI0LCAxMTcsIDI5LCAzLCAyMjIsIDEwMSwgMjksIDMsIDIzMCwgMzYsIDI5LCAzLCAyNDMsIDIxNCwgMjksIAorICAgIDM4LCAyNDMsIDYwLCAyMiwgMjUsIDIzMywgMjksIDc5LCAyOSwgMzgsIDI1LCAyMzMsIDI5LCA3OSwgMjksIDM4LCAyNDMsIAorICAgIDYwLCA3OSwgMjksIDIyMSwgMTc1LCA3OSwgMjksIDIxMSwgMjA4LCAyOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyOSwgMjQ5LCAKKyAgICAyMjcsIDI5LCAyMjAsIDE1MiwgMjksIDI0OSwgMjM0LCAyOSwgMjI0LCAyMDIsIDI0OSwgMjM0LCAyOSwgMjI0LCAxNiwgNzksIAorICAgIDI5LCAyMjYsIDE5LCAyMjAsIDEzOSwgMjksIDIxLCAxMTEsIDI5LCAyMSwgMTA1LCAyOSwgMjEsIDE1OCwgMjksIDIxLCAKKyAgICAxNjEsIDI5LCAyMSwgMTkwLCAyOSwgMjEsIDE5NSwgMjksIDIxLCAxOTksIDI5LCAyMSwgMTk2LCAyOSwgMjEsIDIwMSwgMjksIAorICAgIDU0LCAyMTYsIDI0OCwgMjksIDU0LCAyMTUsIDczLCAyOSwgNTQsIDIxNiwgMTYzLCAyOSwgNTQsIDI0NCwgMjMsIDI5LCA1NCwgCisgICAgMjQ0LCAxMjIsIDI5LCA1NCwgMjE5LCAxMTMsIDI5LCA1NCwgMjIwLCAxMTgsIDI5LCA1NCwgMjQ1LCAxOTIsIDI5LCA1NCwgCisgICAgMjI4LCAyMDAsIDI5LCA1NCwgMjQwLCAyMTcsIDI5LCA1NCwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyOSwgMywgMjIxLCAxNzksIAorICAgIDIzMCwgNDcsIDI5LCAzLCAyMzAsIDQzLCAyOSwgMywgMjMwLCA0NCwgMjksIDMsIDIzMCwgNDUsIDI5LCAzLCAyMjEsIDE3OSwgCisgICAgMjUxLCA5MSwgMjksIDMsIDI1MSwgODgsIDI5LCAzLCAyNTEsIDg5LCAyOSwgMywgMjUxLCA5MCwgMjksIDMsIDIyMSwgMTc5LCAKKyAgICAyNDMsIDIyMCwgMjksIDMsIDI0MywgMjE2LCAyOSwgMywgMjQzLCAyMTcsIDI5LCAzLCAyNDMsIDIxOCwgMjksIDMsIDIyMSwgCisgICAgMTc5LCAyMjQsIDExNywgMjksIDMsIDIyNCwgMTEzLCAyOSwgMywgMjI0LCAxMTQsIDI5LCAzLCAyMjQsIDExNSwgMjksIAorICAgIDIxNiwgMzIsIDE2NCwgMjEwLCAyNDcsIDI5LCAyMTYsIDMyLCAxNjQsIDI0OCwgNDksIDI5LCAyMTYsIDMyLCAxNjQsIDIyMiwgCisgICAgMjQxLCAyOSwgMjE2LCAzMiwgMTY0LCAyMTksIDI1MywgMjIyLCAyNDEsIDI5LCAyMTYsIDMyLCAxNjQsIDI0NywgMjQzLCAKKyAgICAyOSwgMjE2LCAzMiwgMTY0LCAyMzQsIDE3MCwgMjksIDIxNiwgMzIsIDE2NCwgMjUwLCAxMDIsIDI5LCAyMTYsIDMyLCAxNjQsIAorICAgIDI0MSwgMTg0LCAyOSwgMjE2LCAzMiwgMTY0LCAyNDgsIDQ4LCAyOSwgMjE2LCAzMiwgMTY0LCAyMzMsIDIwMCwgMTY5LCAxLCAKKyAgICA2MSwgMTY5LCAxLCA3NiwgMTY5LCAxLCA3NCwgMTY5LCAxLCA3OCwgMTY5LCAxLCA2OSwgMTY5LCAxLCAyMTQsIDEwNSwgCisgICAgMTY5LCAxLCAyNDMsIDE0MiwgMTY5LCAxLCAxNzYsIDE2OSwgMSwgMjQzLCA2OSwgMTY5LCAxLCAyNDIsIDIyMSwgMTY5LCAxLCAKKyAgICAyNDIsIDE4MSwgMTY5LCAxLCAyNDIsIDEyMCwgMTY5LCAxLCAyNDIsIDg2LCAxNjksIDEsIDE2MiwgMTY5LCAxLCAyNDEsIAorICAgIDI0NSwgMTY5LCAxLCAyNDEsIDE4NywgMTY5LCAxLCAyNDEsIDc1LCAxNjksIDEsIDI0MCwgMjI5LCAxNjksIDEsIDI0MCwgCisgICAgMjA4LCAxNjksIDEsIDIzMywgMTQxLCAxNjksIDEsIDIzMywgNjQsIDE2OSwgMSwgMjMyLCAyNDcsIDE2OSwgMSwgMjMyLCAKKyAgICAxNjIsIDE2OSwgMSwgMjMyLCAxMDMsIDE2OSwgMSwgMjMyLCA3NiwgMTY5LCAxLCAxODYsIDE2OSwgMSwgMjMxLCA5NiwgCisgICAgMTY5LCAxLCAyMzAsIDIzNSwgMTY5LCAxLCAyMzAsIDE2NiwgMTY5LCAxLCAyMzAsIDEwNywgMTY5LCAxLCAxOTgsIDE2OSwgCisgICAgMSwgMjQxLCA5NywgMTY5LCAxLCAyMjksIDIxOCwgMTY5LCAxLCAyMjksIDExMiwgMTY5LCAxLCAyMjgsIDIzOCwgMTY5LCAxLCAKKyAgICAyMjgsIDc5LCAxNjksIDEsIDIyNywgMjQyLCAxNjksIDEsIDIyNywgMTgwLCAxNjksIDEsIDIyNCwgMzIsIDE2OSwgMSwgCisgICAgMjI0LCAxOSwgMTY5LCAxLCAyMjQsIDEyLCAxNjksIDEsIDIyNCwgNCwgMTY5LCAxLCAyMjMsIDI0OSwgMTY5LCAxLCAyMjMsIAorICAgIDI0NywgMTY5LCAxLCAyMDYsIDE2OSwgMSwgMjIyLCA5MywgMTY5LCAxLCAyMjEsIDE4MywgMTY5LCAxLCAyMTksIDE5MywgCisgICAgMTY5LCAxLCAyMTksIDYwLCAxNjksIDEsIDIxOCwgODQsIDE2OSwgMSwgMjE4LCAzLCAxNjksIDEsIDI0OCwgMjI5LCAxNjksIAorICAgIDEsIDIxNywgMTA2LCAxNjksIDEsIDI0OCwgOTgsIDE2OSwgMSwgMjE3LCAyMywgMTY5LCAxLCAyNDgsIDExLCAxNjksIDEsIAorICAgIDIxNiwgMTE4LCAxNjksIDEsIDI0NywgMTUzLCAxNjksIDEsIDI0NiwgODYsIDE2OSwgMSwgMjQ2LCA1OCwgMTY5LCAxLCAKKyAgICAyNDcsIDE2NCwgMTY5LCAxLCAyMTYsIDYwLCAxNjksIDEsIDIxNiwgNTksIDE2OSwgMSwgMjE2LCA0OCwgMTY5LCAxLCAyMTYsIAorICAgIDQ3LCAxNjksIDEsIDIxNiwgNDYsIDE2OSwgMSwgMjE2LCA0NSwgMTY5LCAxLCAyMTUsIDE4NCwgMTY5LCAxLCAyMTUsIDE3OSwgCisgICAgMTY5LCAxLCAyMTUsIDE2OCwgMTY5LCAxLCAyMTUsIDE2NywgMTY5LCAxLCAyMTUsIDE2NCwgMTY5LCAxLCAyMTUsIDE2MywgCisgICAgMTY5LCAxLCAyMTIsIDY1LCAxNjksIDEsIDIxMiwgMjIsIDE2OSwgMSwgMjExLCAyNTAsIDE2OSwgMSwgMjExLCAyMjcsIAorICAgIDE2OSwgMSwgMjExLCAxOTUsIDE2OSwgMSwgMjExLCAxODMsIDE2OSwgMSwgMTkyLCAxNjksIDEsIDIxMSwgNDcsIDE2OSwgMSwgCisgICAgMjExLCA4LCAxNjksIDEsIDIxMCwgMjQ0LCAxNjksIDEsIDIxMCwgMjEyLCAxNjksIDEsIDIxMCwgMTc3LCAxOCwgMTksIAorICAgIDI0MCwgMTc1LCAxOCwgMTksIDc2LCAxOCwgMTksIDI1NSwgNDYsIDE4LCAxOSwgNzQsIDE4LCAxOSwgMjM2LCA0MCwgMTgsIAorICAgIDE5LCA3OCwgMTgsIDE5LCAyMjYsIDE4NywgMTgsIDE5LCAyMTEsIDExNiwgMjI2LCAxODcsIDE4LCAxOSwgNzMsIDI0NSwgCisgICAgMjE3LCAxOCwgMTksIDczLCA3NCwgMTgsIDE5LCA2MSwgMTgsIDE5LCAyNTUsIDgyLCAxOCwgMTksIDIxMiwgMjIsIDE4LCAKKyAgICAxOSwgMTU5LCAyMTIsIDIyLCAxOCwgMTksIDIxMSwgMjUwLCAxOCwgMTksIDE1OSwgMjExLCAyNTAsIDE4LCAxOSwgMjExLCAKKyAgICAyNDIsIDE4LCAxOSwgMTU5LCAyMTEsIDI0MiwgMTgsIDE5LCAyMTEsIDIyNywgMTgsIDE5LCAxNTksIDIxMSwgMjI3LCAxOCwgCisgICAgMTksIDIxMSwgMjE1LCAxOCwgMTksIDE1OSwgMjExLCAyMTUsIDE4LCAxOSwgMjI5LCAxOTUsIDIxMSwgMjE1LCAxOCwgMTksIAorICAgIDIxMiwgNjUsIDE4LCAxOSwgMTU5LCAyMTIsIDY1LCAxOCwgMTksIDIxMiwgNjQsIDE4LCAxOSwgMTU5LCAyMTIsIDY0LCAxOCwgCisgICAgMTksIDIyOSwgMTk1LCAyMTIsIDY0LCAxOCwgMTksIDI1NCwgMjEwLCAxOCwgMTksIDIxMSwgMTE2LCAyMTIsIDk4LCAxOCwgCisgICAgMTksIDI0MiwgMTg3LCAyMTgsIDEzMSwgMTgsIDE5LCA0MCwgMTQyLCAxOCwgMTksIDQwLCAyNDIsIDE0MywgMTgsIDE5LCAKKyAgICA0MCwgMjUxLCAxODMsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDIxNiwgMTUsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgCisgICAgNDAsIDQ0LCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgNTIsIDE0MiwgMTgsIDE5LCAKKyAgICA0MCwgNTIsIDIxOSwgMjUzLCA2NywgMjE4LCA5MiwgMTgsIDE5LCA0MCwgMjMwLCAyMjksIDI0NywgMTI4LCAxOCwgMTksIAorICAgIDQwLCAyMTksIDI1MywgMjAzLCA5MSwgMTgsIDE5LCA0MCwgMjI1LCAyNSwgMTgsIDE5LCA0MCwgMTI0LCAyMTcsIDg4LCAxOCwgCisgICAgMTksIDI0NSwgMTU4LCAxOCwgMTksIDIzNiwgNiwgMTgsIDE5LCAyMjYsIDIwMCwgMTgsIDE5LCAyNTQsIDEzMSwgMTgsIDE5LCAKKyAgICAyMjUsIDIyNCwgMTgsIDE5LCAyMjYsIDkxLCAxOCwgMTksIDIyNSwgMTExLCAxOCwgMTksIDIyNSwgNzQsIDE4LCAxOSwgCisgICAgMjI1LCAxOSwgMTgsIDE5LCAyMjQsIDI1MiwgMTgsIDE5LCAyMTEsIDExNiwgMjI0LCAyNTIsIDE4LCAxOSwgNzMsIDI0MSwgCisgICAgMjI3LCAxOCwgMTksIDczLCAyNDEsIDE4NywgMTgsIDE5LCAxOTEsIDE4LCAxOSwgMjI2LCA5MywgMTgsIDE5LCAyMjQsIAorICAgIDExNSwgMTgsIDE5LCAxNTksIDIyNCwgMTE1LCAxOCwgMTksIDIyNCwgMTEzLCAxOCwgMTksIDE1OSwgMjI0LCAxMTMsIDE4LCAKKyAgICAxOSwgMjI0LCAxMTIsIDE4LCAxOSwgMTU5LCAyMjQsIDExMiwgMTgsIDE5LCAyMjQsIDExMCwgMTgsIDE5LCAxNTksIDIyNCwgCisgICAgMTEwLCAxOCwgMTksIDIyNCwgMTA5LCAxOCwgMTksIDE1OSwgMjI0LCAxMDksIDE4LCAxOSwgMjI0LCAxMTcsIDE4LCAxOSwgCisgICAgMTU5LCAyMjQsIDExNywgMTgsIDE5LCAyMjQsIDExNiwgMTgsIDE5LCAxNTksIDIyNCwgMTE2LCAxOCwgMTksIDIxMSwgMTE2LCAKKyAgICAyMjQsIDExNiwgMTgsIDE5LCAyMjYsIDEwOSwgMTgsIDE5LCAxNTksIDIyNiwgMTA5LCAxOCwgMTksIDczLCAyNDIsIDY3LCAKKyAgICAxOCwgMTksIDIxNywgMjMsIDE4LCAxOSwgMjE3LCAxMDAsIDE4LCAxOSwgMjE2LCAxMTgsIDE4LCAxOSwgMjE2LCAxMDQsIAorICAgIDE4LCAxOSwgMTEyLCAxOCwgMTksIDIxNiwgMTgsIDE4LCAxOSwgMjExLCAxMTYsIDIxNiwgMTgsIDE4LCAxOSwgNzMsIDI0OCwgCisgICAgODUsIDE4LCAxOSwgNzMsIDI0OCwgMTEsIDE4LCAxOSwgMjE3LCAxMDYsIDE4LCAxOSwgMjE3LCAxMDIsIDE4LCAxOSwgMjE1LCAKKyAgICA3OCwgMTgsIDE5LCAxNTksIDIxNSwgNzgsIDE4LCAxOSwgMjE1LCA2MiwgMTgsIDE5LCAxNTksIDIxNSwgNjIsIDE4LCAxOSwgCisgICAgMjE1LCA2MSwgMTgsIDE5LCAxNTksIDIxNSwgNjEsIDE4LCAxOSwgMTA1LCAxOCwgMTksIDE1OSwgMTA1LCAxOCwgMTksIAorICAgIDIxNSwgNTQsIDE4LCAxOSwgMTU5LCAyMTUsIDU0LCAxOCwgMTksIDIxNSwgODAsIDE4LCAxOSwgMTU5LCAyMTUsIDgwLCAxOCwgCisgICAgMTksIDIxNSwgNzksIDE4LCAxOSwgMTU5LCAyMTUsIDc5LCAxOCwgMTksIDIyOSwgMTk1LCAyMTUsIDc5LCAxOCwgMTksIAorICAgIDIxNywgMTUzLCAxOCwgMTksIDIxNSwgMTUyLCAxOCwgMTksIDIxNSwgMTM2LCAxOCwgMTksIDIxNSwgMTM0LCAxOCwgMTksIAorICAgIDIxNSwgMTU3LCAxOCwgMTksIDIzNCwgMTg4LCAxOCwgMTksIDIzNSwgMTMsIDE4LCAxOSwgMjM0LCA5OCwgMTgsIDE5LCAKKyAgICAyMzQsIDg5LCAxOCwgMTksIDIzNCwgMzQsIDE4LCAxOSwgMjM0LCAxNiwgMTgsIDE5LCAyMTEsIDExNiwgMjM0LCAxNiwgMTgsIAorICAgIDE5LCAxNzYsIDE4LCAxOSwgMjM1LCAxNiwgMTgsIDE5LCAyMzMsIDE4NCwgMTgsIDE5LCAxNTksIDIzMywgMTg0LCAxOCwgCisgICAgMTksIDIzMywgMTgyLCAxOCwgMTksIDE1OSwgMjMzLCAxODIsIDE4LCAxOSwgMjMzLCAxODEsIDE4LCAxOSwgMTU5LCAyMzMsIAorICAgIDE4MSwgMTgsIDE5LCAyMzMsIDE4MCwgMTgsIDE5LCAxNTksIDIzMywgMTgwLCAxOCwgMTksIDIzMywgMTc5LCAxOCwgMTksIAorICAgIDE1OSwgMjMzLCAxNzksIDE4LCAxOSwgMjMzLCAxODgsIDE4LCAxOSwgMTU5LCAyMzMsIDE4OCwgMTgsIDE5LCAyMzMsIDE4NywgCisgICAgMTgsIDE5LCAxNTksIDIzMywgMTg3LCAxOCwgMTksIDIyOSwgMTk1LCAyMzMsIDE4NywgMTgsIDE5LCAyMzUsIDI5LCAxOCwgCisgICAgMTksIDIzMywgMTg5LCAxOCwgMTksIDIxOSwgMjksIDIzNCwgMTgyLCAxOCwgMTksIDIxOSwgMjksIDIzNCwgOTAsIDE4LCAKKyAgICAxOSwgMjE5LCAyOSwgMjM0LCAyOSwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDI1NCwgMTgsIDE5LCAyNTAsIDE5OCwgMTgsIAorICAgIDE5LCAyNTEsIDM5LCAxOCwgMTksIDI1MCwgNTksIDE4LCAxOSwgMjUwLCA0OSwgMTgsIDE5LCAyNDksIDI0NiwgMTgsIDE5LCAKKyAgICAyNDksIDE4MiwgMTgsIDE5LCAyMTEsIDExNiwgMjQ5LCAxODIsIDE4LCAxOSwgMjUxLCA0MSwgMTgsIDE5LCAyNTEsIDQwLCAKKyAgICAxOCwgMTksIDI0OSwgODcsIDE4LCAxOSwgMTU5LCAyNDksIDg3LCAxOCwgMTksIDI0OSwgODUsIDE4LCAxOSwgMTU5LCAyNDksIAorICAgIDg1LCAxOCwgMTksIDI0OSwgODQsIDE4LCAxOSwgMTU5LCAyNDksIDg0LCAxOCwgMTksIDI0OSwgODMsIDE4LCAxOSwgMTU5LCAKKyAgICAyNDksIDgzLCAxOCwgMTksIDI0OSwgODIsIDE4LCAxOSwgMTU5LCAyNDksIDgyLCAxOCwgMTksIDI0OSwgODksIDE4LCAxOSwgCisgICAgMTU5LCAyNDksIDg5LCAxOCwgMTksIDI0OSwgODgsIDE4LCAxOSwgMTU5LCAyNDksIDg4LCAxOCwgMTksIDIyOSwgMTk1LCAKKyAgICAyNDksIDg4LCAxOCwgMTksIDI1MSwgNzQsIDE4LCAxOSwgMjIxLCAyMTEsIDIxNiwgMjExLCAxOCwgMTksIDIzMSwgOTYsIAorICAgIDE4LCAxOSwgMjMxLCAyNDEsIDE4LCAxOSwgMjMwLCAyMzUsIDE4LCAxOSwgMjMwLCAyMDYsIDE4LCAxOSwgMjMwLCAxNjYsIAorICAgIDE4LCAxOSwgMjMwLCAxMzcsIDE4LCAxOSwgMjExLCAxMTYsIDIzMCwgMTM3LCAxOCwgMTksIDE4NiwgMTgsIDE5LCAyMzEsIAorICAgIDI0MiwgMTgsIDE5LCAyMzAsIDQ1LCAxOCwgMTksIDE1OSwgMjMwLCA0NSwgMTgsIDE5LCAyMzAsIDQzLCAxOCwgMTksIDE1OSwgCisgICAgMjMwLCA0MywgMTgsIDE5LCAyMzAsIDQyLCAxOCwgMTksIDE1OSwgMjMwLCA0MiwgMTgsIDE5LCAyMzAsIDQxLCAxOCwgMTksIAorICAgIDE1OSwgMjMwLCA0MSwgMTgsIDE5LCAyMzAsIDQwLCAxOCwgMTksIDE1OSwgMjMwLCA0MCwgMTgsIDE5LCAyMzAsIDQ3LCAxOCwgCisgICAgMTksIDE1OSwgMjMwLCA0NywgMTgsIDE5LCAyMzAsIDQ2LCAxOCwgMTksIDE1OSwgMjMwLCA0NiwgMTgsIDE5LCAyMjksIAorICAgIDE5NSwgMjMwLCA0NiwgMTgsIDE5LCAxOTQsIDE4LCAxOSwgMTU5LCAxOTQsIDE4LCAxOSwgMjMwLCAyMzksIDE4LCAxOSwgCisgICAgMjUzLCAyMTMsIDE5NCwgMTgsIDE5LCAyMjEsIDIxMSwgMTk0LCAxOCwgMTksIDIyOSwgMTEyLCAxOCwgMTksIDIyOSwgMjI5LCAKKyAgICAxOCwgMTksIDIyOCwgMjM4LCAxOCwgMTksIDIyOCwgMjEzLCAxOCwgMTksIDIyOCwgNzksIDE4LCAxOSwgMjI4LCA2OSwgMTgsIAorICAgIDE5LCAyMTEsIDExNiwgMjI4LCA2OSwgMTgsIDE5LCAxOTgsIDE4LCAxOSwgMjI5LCAyMzAsIDE4LCAxOSwgMjI3LCAxNzYsIAorICAgIDE4LCAxOSwgMTU5LCAyMjcsIDE3NiwgMTgsIDE5LCAyMjcsIDE3OCwgMTgsIDE5LCAxNTksIDIyNywgMTc4LCAxOCwgMTksIAorICAgIDIyNywgMTc3LCAxOCwgMTksIDE1OSwgMjI3LCAxNzcsIDE4LCAxOSwgMjI5LCAxOTUsIDIyNywgMTc3LCAxOCwgMTksIDIzMCwgCisgICAgMzAsIDE4LCAxOSwgNzMsIDIyOSwgODQsIDE4LCAxOSwgMjI4LCAyNDMsIDE4LCAxOSwgMjMzLCA2NCwgMTgsIDE5LCAyMzMsIAorICAgIDEzOSwgMTgsIDE5LCAyMzIsIDI0NywgMTgsIDE5LCAyMzIsIDIzMywgMTgsIDE5LCAyMzIsIDE2MiwgMTgsIDE5LCAyMzIsIAorICAgIDEzMywgMTgsIDE5LCAyMTEsIDExNiwgMjMyLCAxMzMsIDE4LCAxOSwgMjMzLCAxNDEsIDE4LCAxOSwgMjMzLCAxNDAsIDE4LCAKKyAgICAxOSwgMjMyLCA3MywgMTgsIDE5LCAxNTksIDIzMiwgNzMsIDE4LCAxOSwgMjMyLCA3MiwgMTgsIDE5LCAxNTksIDIzMiwgNzIsIAorICAgIDE4LCAxOSwgMjMyLCA3MSwgMTgsIDE5LCAxNTksIDIzMiwgNzEsIDE4LCAxOSwgMjMyLCA3MCwgMTgsIDE5LCAxNTksIDIzMiwgCisgICAgNzAsIDE4LCAxOSwgMjMyLCA2OSwgMTgsIDE5LCAxNTksIDIzMiwgNjksIDE4LCAxOSwgMjMyLCA3NSwgMTgsIDE5LCAxNTksIAorICAgIDIzMiwgNzUsIDE4LCAxOSwgMjMyLCA3NCwgMTgsIDE5LCAxNTksIDIzMiwgNzQsIDE4LCAxOSwgMTU2LCAxOCwgMTksIDE1OSwgCisgICAgMTU2LCAxOCwgMTksIDE0NywgMTU2LCAxOCwgMTksIDIyMSwgMTgzLCAxOCwgMTksIDIyMiwgMzEsIDE4LCAxOSwgMjE5LCAKKyAgICAxOTMsIDE4LCAxOSwgMjE5LCAxNzcsIDE4LCAxOSwgMjE5LCA2MCwgMTgsIDE5LCAyMTksIDQyLCAxOCwgMTksIDIxMSwgCisgICAgMTE2LCAyMTksIDQyLCAxOCwgMTksIDIwNiwgMTgsIDE5LCAyMjIsIDMzLCAxOCwgMTksIDIxNywgMjUwLCAxOCwgMTksIAorICAgIDE1OSwgMjE3LCAyNTAsIDE4LCAxOSwgMjE3LCAyNDQsIDE4LCAxOSwgMTU5LCAyMTcsIDI0NCwgMTgsIDE5LCAyMTcsIDI0MywgCisgICAgMTgsIDE5LCAxNTksIDIxNywgMjQzLCAxOCwgMTksIDIxNywgMjM5LCAxOCwgMTksIDE1OSwgMjE3LCAyMzksIDE4LCAxOSwgCisgICAgMjE3LCAyMzgsIDE4LCAxOSwgMTU5LCAyMTcsIDIzOCwgMTgsIDE5LCAyMTcsIDI1NCwgMTgsIDE5LCAxNTksIDIxNywgMjU0LCAKKyAgICAxOCwgMTksIDIxNywgMjUzLCAxOCwgMTksIDE1OSwgMjE3LCAyNTMsIDE4LCAxOSwgMjI5LCAxOTUsIDIxNywgMjUzLCAxOCwgCisgICAgMTksIDIyMiwgOTMsIDE4LCAxOSwgMjUzLCAyMTMsIDIyMiwgOTMsIDE4LCAxOSwgMjE3LCAyNTUsIDE4LCAxOSwgMjUxLCAKKyAgICAyMjYsIDIyMiwgOTMsIDE4LCAxOSwgMjMwLCAxMzIsIDIxOSwgMTEwLCAxOCwgMTksIDIyOSwgMTk1LCAyMTksIDEwMSwgMTgsIAorICAgIDE5LCAyMjksIDE5NSwgMjIyLCA5MSwgMTgsIDE5LCAyMjksIDE5NSwgMjE4LCAyMzcsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOCwgCisgICAgODcsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOSwgMTAwLCAxOCwgMTksIDIyOSwgMTk1LCAyMjEsIDE4NiwgMTgsIDE5LCAyMjAsIAorICAgIDY1LCAxOCwgMTksIDIyMCwgMzQsIDE4LCAxOSwgMjIwLCAyOSwgMTgsIDE5LCAyMjAsIDksIDE4LCAxOSwgMjIwLCAzLCAxOCwgCisgICAgMTksIDIyMCwgMTA0LCAxOCwgMTksIDIyMCwgMTAwLCAxOCwgMTksIDIxOSwgMjA4LCAxOCwgMTksIDE1OSwgMjE5LCAyMDgsIAorICAgIDE4LCAxOSwgMjE5LCAyMDcsIDE4LCAxOSwgMTU5LCAyMTksIDIwNywgMTgsIDE5LCAyMTksIDIwNiwgMTgsIDE5LCAxNTksIAorICAgIDIxOSwgMjA2LCAxOCwgMTksIDIxOSwgMjA1LCAxOCwgMTksIDE1OSwgMjE5LCAyMDUsIDE4LCAxOSwgMjE5LCAyMDQsIDE4LCAKKyAgICAxOSwgMTU5LCAyMTksIDIwNCwgMTgsIDE5LCAyMTksIDIxMCwgMTgsIDE5LCAxNTksIDIxOSwgMjEwLCAxOCwgMTksIDIxOSwgCisgICAgMjA5LCAxOCwgMTksIDE1OSwgMjE5LCAyMDksIDE4LCAxOSwgMjIwLCAxMDYsIDE4LCAxOSwgMjExLCA0NywgMTgsIDE5LCAKKyAgICAyMTEsIDEwMSwgMTgsIDE5LCAyMTEsIDgsIDE4LCAxOSwgMjEwLCAyNTUsIDE4LCAxOSwgMjEwLCAyNDQsIDE4LCAxOSwgCisgICAgMjEwLCAyMjksIDE4LCAxOSwgMjExLCAxMTYsIDIxMCwgMjI5LCAxOCwgMTksIDE5MiwgMTgsIDE5LCAyMTEsIDEwMywgMTgsIAorICAgIDE5LCAyMTAsIDE3NCwgMTgsIDE5LCAxNTksIDIxMCwgMTc0LCAxOCwgMTksIDIxMCwgMTczLCAxOCwgMTksIDE1OSwgMjEwLCAKKyAgICAxNzMsIDE4LCAxOSwgMjEwLCAxNzIsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MiwgMTgsIDE5LCAyMTAsIDE3MSwgMTgsIDE5LCAKKyAgICAxNTksIDIxMCwgMTcxLCAxOCwgMTksIDIxMCwgMTcwLCAxOCwgMTksIDE1OSwgMjEwLCAxNzAsIDE4LCAxOSwgMjEwLCAxNzYsIAorICAgIDE4LCAxOSwgMTU5LCAyMTAsIDE3NiwgMTgsIDE5LCAyMTAsIDE3NSwgMTgsIDE5LCAxNTksIDIxMCwgMTc1LCAxOCwgMTksIAorICAgIDIyOSwgMTk1LCAyMTAsIDE3NSwgMTgsIDE5LCAyMTEsIDExNywgMTgsIDE5LCAyNTIsIDEyLCAyMTEsIDExNywgMTgsIDE5LCAKKyAgICAxNTksIDIxMSwgMTE3LCAxOCwgMTksIDIyMSwgMjExLCAyMTEsIDgsIDE4LCAxOSwgMjIzLCAxMzEsIDE4LCAxOSwgMjIzLCAKKyAgICAyMjYsIDIyMywgMTMxLCAxOCwgMTksIDE1OSwgMjMzLCA2NCwgMTgsIDE5LCAyMjMsIDE4NiwgMTgsIDE5LCAyMjMsIDM4LCAKKyAgICAxOCwgMTksIDIyMiwgMjQyLCAxOCwgMTksIDIyMiwgMjEzLCAxOCwgMTksIDIyMiwgMTk5LCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICAxNjIsIDE4LCAxOSwgMjA1LCAxOCwgMTksIDIyMywgMTg3LCAxOCwgMTksIDE1OSwgMjMzLCAxNDEsIDE4LCAxOSwgMjIyLCAKKyAgICAxMTAsIDE4LCAxOSwgMTU5LCAyMjIsIDExMCwgMTgsIDE5LCAxNTMsIDE4LCAxOSwgMTU5LCAxNTMsIDE4LCAxOSwgMTQ3LCAKKyAgICAxNTMsIDE4LCAxOSwgMjQ0LCAxNjIsIDE4LCAxOSwgMjQ0LCAyMDEsIDE4LCAxOSwgMjQ0LCAxMjksIDE4LCAxOSwgMjQ0LCAKKyAgICAxMTYsIDE4LCAxOSwgMjQ0LCA1MSwgMTgsIDE5LCAyNDQsIDQyLCAxOCwgMTksIDI0NCwgMjA0LCAxOCwgMTksIDI0NCwgCisgICAgMjAzLCAxOCwgMTksIDI0MywgMjE5LCAxOCwgMTksIDE1OSwgMjQzLCAyMTksIDE4LCAxOSwgMjQ1LCAxNCwgMTgsIDE5LCAKKyAgICAyMTYsIDE5NiwgMTgsIDE5LCAyMzAsIDI4LCAyMTYsIDE5NiwgMTgsIDE5LCAyMTYsIDE3NiwgMTgsIDE5LCAyMzAsIDI4LCAKKyAgICAyMTYsIDE3NiwgMTgsIDE5LCAyMTYsIDE3MiwgMTgsIDE5LCAyMzAsIDI4LCAyMTYsIDE3MiwgMTgsIDE5LCAyMTYsIDE1NywgCisgICAgMTgsIDE5LCAyMTYsIDE1NCwgMTgsIDE5LCAyMTYsIDIwOSwgMTgsIDE5LCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDEyOCwgCisgICAgMTgsIDE5LCAxNTksIDIxNiwgMTI4LCAxOCwgMTksIDIxNiwgMjExLCAxOCwgMTksIDIxNSwgMTQzLCAxOCwgMTksIDIxNSwgCisgICAgMTQxLCAxOCwgMTksIDIxNSwgMTQwLCAxOCwgMTksIDIxNSwgMTQ1LCAxOCwgMTksIDIxNSwgMTQ2LCAxOCwgMTksIDIxNSwgCisgICAgNTIsIDE4LCAxOSwgMjE1LCA1MSwgMTgsIDE5LCAyMTUsIDUwLCAxOCwgMTksIDIxNSwgNTMsIDE4LCAxOSwgMjI3LCAxOTcsIAorICAgIDI0MSwgMjQ1LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDE4NywgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCAxNjgsIDE4LCAxOSwgCisgICAgMjI3LCAxOTcsIDI0MSwgNzUsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgNjAsIDE4LCAxOSwgMjI3LCAxOTcsIDE2MiwgMTgsIAorICAgIDE5LCAyMjcsIDE5NywgMjQyLCA1MywgMTgsIDE5LCAyMjcsIDE5NywgMjQyLCA2NywgMTgsIDE5LCAyMjcsIDE5NiwgMjQyLCAKKyAgICA2NywgMTgsIDE5LCAyNDEsIDE2MSwgMTgsIDE5LCAyMjQsIDg3LCAxOCwgMTksIDIyNCwgNTYsIDE4LCAxOSwgMjI0LCA1MSwgCisgICAgMTgsIDE5LCAyMjQsIDQ1LCAxOCwgMTksIDIyNCwgNDAsIDE4LCAxOSwgMjI0LCA5MSwgMTgsIDE5LCAyMjQsIDkwLCAxOCwgCisgICAgMTksIDIyNCwgOTksIDE4LCAxOSwgMjE2LCA1NiwgMTgsIDE5LCAyMTYsIDU0LCAxOCwgMTksIDIxNiwgNTMsIDE4LCAxOSwgCisgICAgMjE2LCA1NywgMTgsIDE5LCAxNTksIDIyMywgMTMxLCAxOCwgMTksIDE1OSwgMjIzLCAzOCwgMTgsIDE5LCAxNTksIDIyMiwgCisgICAgMjEzLCAxOCwgMTksIDE1OSwgMjA1LCAxOCwgMTksIDIyOSwgODAsIDE4LCAxOSwgMjI5LCAzMiwgMTgsIDE5LCAyMjksIDI4LCAKKyAgICAxOCwgMTksIDIyOSwgOSwgMTgsIDE5LCAyMjksIDQsIDE4LCAxOSwgMjI5LCA4MiwgMTgsIDE5LCAyMjksIDgxLCAxOCwgMTksIAorICAgIDIyOSwgODQsIDE4LCAxOSwgMjI4LCAxMDgsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgNjUsIDE4LCAxOSwgMjIxLCAyMTEsIAorICAgIDIyMCwgMzQsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgOSwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCAxMDQsIDE4LCAxOSwgCisgICAgMjExLCAyMTMsIDIxNiwgMTk2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE3NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKKyAgICAxNTcsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMjA5LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIxMSwgMTgsIDE5LCAyMzIsIAorICAgIDI1NCwgMTgsIDE5LCAyMzIsIDI1MywgMTgsIDE5LCAyMzIsIDI1MiwgMTgsIDE5LCAyMzIsIDI1MSwgMTgsIDE5LCAyMzMsIAorICAgIDQsIDE4LCAxOSwgMjMzLCAzLCAxOCwgMTksIDIzMywgNSwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxOTYsIDE4LCAxOSwgCisgICAgMjE2LCAyMTAsIDIxNiwgMTc2LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE3MiwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAKKyAgICAxNTcsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTU0LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDIwOSwgMTgsIDE5LCAyMTYsIAorICAgIDIxMCwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMjExLCAxOCwgMTksIDI1NCwgMTk4LCAyNTMsIDE2NiwgCisgICAgMTgsIDE5LCAyNTEsIDIyNiwgNzYsIDE4LCAxOSwgMjUxLCAyMjYsIDc0LCAxOCwgMTksIDI1MSwgMjI2LCA3OCwgMTgsIDE5LCAKKyAgICAyNTEsIDIyNiwgNjEsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgMjIsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMSwgMjUwLCAxOCwgCisgICAgMTksIDI1MSwgMjI2LCAyMTEsIDIyNywgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCA2NSwgMTgsIDE5LCAyNTEsIDIyNiwgMjI5LCAKKyAgICAxMTIsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOCwgMjM4LCAxOCwgMTksIDI1MSwgMjI2LCAyMjgsIDc5LCAxOCwgMTksIDI1MSwgCisgICAgMjI2LCAxOTgsIDE4LCAxOSwgMjUxLCAyMjYsIDIzNCwgMTg4LCAxOCwgMTksIDI1MSwgMjI2LCAyMzQsIDk4LCAxOCwgMTksIAorICAgIDI1MSwgMjI2LCAyMzQsIDM0LCAxOCwgMTksIDI1MSwgMjI2LCAxNzYsIDE4LCAxOSwgMjIxLCAyMTEsIDI0MSwgMjQ1LCAxOCwgCisgICAgMTksIDIyMSwgMjExLCAyNDEsIDE4NywgMTgsIDE5LCAyMjEsIDIxMSwgMjQxLCA3NSwgMTgsIDE5LCAyMjEsIDIxMSwgMTYyLCAKKyAgICAxOCwgMTksIDczLCAyNDIsIDIyNywgMTgsIDE5LCA3MywgMjQyLCAyMzEsIDE4LCAxOSwgNzMsIDI0MiwgMjQzLCAxOCwgMTksIAorICAgIDczLCAyNDIsIDI0MiwgMTgsIDE5LCA3MywgMjQyLCAyMzIsIDE4LCAxOSwgNzMsIDI0MywgMCwgMTgsIDE5LCA3MywgMjIyLCAKKyAgICAxNDIsIDE4LCAxOSwgNzMsIDIyMiwgMjEzLCAxOCwgMTksIDczLCAyMjMsIDEzMSwgMTgsIDE5LCA3MywgMjIzLCAxMTEsIAorICAgIDE4LCAxOSwgNzMsIDIyMywgMzgsIDE4LCAxOSwgNzMsIDIwNSwgMTgsIDE5LCA3MywgMjExLCAxOTUsIDE4LCAxOSwgNzMsIAorICAgIDIxMSwgMjI3LCAxOCwgMTksIDczLCAyMTIsIDIyLCAxOCwgMTksIDczLCAyMTIsIDE3LCAxOCwgMTksIDczLCAyMTEsIDI1MCwgCisgICAgMTgsIDE5LCA3MywgMjEyLCA2NSwgMTgsIDE5LCA3MywgMjQwLCAyMDEsIDE4LCAxOSwgNzMsIDI0MCwgMjAyLCAxOCwgMTksIAorICAgIDczLCAyNDAsIDIwNSwgMTgsIDE5LCA3MywgMjQwLCAyMDQsIDE4LCAxOSwgNzMsIDI0MCwgMjAzLCAxOCwgMTksIDczLCAKKyAgICAyNDAsIDIwNywgMTgsIDE5LCA3MywgMjE2LCAxMzcsIDE4LCAxOSwgNzMsIDIxNiwgMTU3LCAxOCwgMTksIDczLCAyMTYsIAorICAgIDE5NiwgMTgsIDE5LCA3MywgMjE2LCAxOTUsIDE4LCAxOSwgNzMsIDIxNiwgMTc2LCAxOCwgMTksIDczLCAyMTYsIDIwOSwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxMjQsIDE4LCAxOSwgNzMsIDIxNSwgMTM0LCAxOCwgMTksIDczLCAyMTUsIDE1MiwgMTgsIDE5LCAKKyAgICA3MywgMjE1LCAxNTEsIDE4LCAxOSwgNzMsIDIxNSwgMTM2LCAxOCwgMTksIDczLCAyMTUsIDE1NywgMTgsIDE5LCA3MywgCisgICAgMjI0LCAxNTMsIDE4LCAxOSwgNzMsIDIyNSwgMTksIDE4LCAxOSwgNzMsIDIyNSwgMjI0LCAxOCwgMTksIDczLCAyMjUsIAorICAgIDIxNCwgMTgsIDE5LCA3MywgMjI1LCAxMTEsIDE4LCAxOSwgNzMsIDE5MSwgMTgsIDE5LCA3MywgMjI2LCAxMDksIDE4LCAxOSwgCisgICAgNzMsIDI0MiwgMTIwLCAxOCwgMTksIDczLCAyNDIsIDE4MSwgMTgsIDE5LCA3MywgMjQzLCA2OSwgMTgsIDE5LCA3MywgMjQzLCAKKyAgICA2MiwgMTgsIDE5LCA3MywgMjQyLCAyMjEsIDE4LCAxOSwgNzMsIDI0MywgMTQyLCAxOCwgMTksIDczLCAyMzQsIDEwNiwgMTgsIAorICAgIDE5LCA3MywgMjM0LCAxMTEsIDE4LCAxOSwgNzMsIDIzNCwgMTI1LCAxOCwgMTksIDczLCAyMzQsIDEyNCwgMTgsIDE5LCA3MywgCisgICAgMjM0LCAxMTgsIDE4LCAxOSwgNzMsIDIzNCwgMTM4LCAxOCwgMTksIDczLCAyMzQsIDQ3LCAxOCwgMTksIDczLCAyMzQsIDQ4LCAKKyAgICAxOCwgMTksIDczLCAyMzQsIDUxLCAxOCwgMTksIDczLCAyMzQsIDUwLCAxOCwgMTksIDczLCAyMzQsIDQ5LCAxOCwgMTksIAorICAgIDczLCAyMzQsIDUyLCAxOCwgMTksIDczLCAyMzQsIDUzLCAxOCwgMTksIDczLCAyMjcsIDI0MiwgMTgsIDE5LCA3MywgMjI4LCAKKyAgICA3OSwgMTgsIDE5LCA3MywgMjI5LCAxMTIsIDE4LCAxOSwgNzMsIDIyOSwgMTA4LCAxOCwgMTksIDczLCAyMjgsIDIzOCwgMTgsIAorICAgIDE5LCA3MywgMTk4LCAxOCwgMTksIDczLCAyMzAsIDEwNywgMTgsIDE5LCA3MywgMjMwLCAxNjYsIDE4LCAxOSwgNzMsIDIzMSwgCisgICAgOTYsIDE4LCAxOSwgNzMsIDIzMSwgODUsIDE4LCAxOSwgNzMsIDIzMCwgMjM1LCAxOCwgMTksIDczLCAxODYsIDE4LCAxOSwgCisgICAgNzMsIDIxMCwgMjEyLCAxOCwgMTksIDczLCAyMTAsIDI0NCwgMTgsIDE5LCA3MywgMjExLCA0NywgMTgsIDE5LCA3MywgMjExLCAKKyAgICA0NCwgMTgsIDE5LCA3MywgMjExLCA4LCAxOCwgMTksIDczLCAxOTIsIDE4LCAxOSwgNzMsIDIzNSwgNTcsIDE4LCAxOSwgCisgICAgMjIxLCAyMTEsIDIzNSwgNTcsIDE4LCAxOSwgNzMsIDIzNSwgNzQsIDE4LCAxOSwgNzMsIDIzNSwgMTMyLCAxOCwgMTksIDczLCAKKyAgICAyMzUsIDEzMCwgMTgsIDE5LCA3MywgMjM1LCAxMTQsIDE4LCAxOSwgMjIxLCAyMTEsIDIzNSwgMTE0LCAxOCwgMTksIDczLCAKKyAgICAyMzUsIDE0NywgMTgsIDE5LCA3MywgMjM1LCA4NywgMTgsIDE5LCA3MywgMjM1LCA5MSwgMTgsIDE5LCA3MywgMjM1LCAxMDEsIAorICAgIDE4LCAxOSwgNzMsIDIzNSwgMTAwLCAxOCwgMTksIDczLCAyMzUsIDk5LCAxOCwgMTksIDczLCAyMzUsIDEwMiwgMTgsIDE5LCAKKyAgICA3MywgMjMyLCAxMDMsIDE4LCAxOSwgNzMsIDIzMiwgMTYyLCAxOCwgMTksIDczLCAyMzMsIDY0LCAxOCwgMTksIDczLCAyMzMsIAorICAgIDU2LCAxOCwgMTksIDczLCAyMzIsIDI0NywgMTgsIDE5LCA3MywgMjMzLCAxNDEsIDE4LCAxOSwgNzMsIDI0NywgMTU3LCAxOCwgCisgICAgMTksIDczLCAyNDcsIDE1OCwgMTgsIDE5LCA3MywgMjQ3LCAxNjMsIDE4LCAxOSwgNzMsIDI0NywgMTYyLCAxOCwgMTksIDczLCAKKyAgICAyNDcsIDE1OSwgMTgsIDE5LCA3MywgMjQ3LCAxNjQsIDE4LCAxOSwgNzMsIDIzMiwgMjUwLCAxOCwgMTksIDczLCAyMzIsIAorICAgIDI1MiwgMTgsIDE5LCA3MywgMjMzLCAwLCAxOCwgMTksIDczLCAyMzIsIDI1NSwgMTgsIDE5LCA3MywgMjMyLCAyNTQsIDE4LCAKKyAgICAxOSwgNzMsIDIzMywgNCwgMTgsIDE5LCA3MywgMjE2LCA1MSwgMTgsIDE5LCA3MywgMjE2LCA1MywgMTgsIDE5LCA3MywgCisgICAgMjE2LCA1NiwgMTgsIDE5LCA3MywgMjE2LCA1NSwgMTgsIDE5LCA3MywgMjE2LCA1NCwgMTgsIDE5LCA3MywgMjE2LCA1NywgCisgICAgMTgsIDE5LCA3MywgMjE2LCA0NiwgMTgsIDE5LCA3MywgMjE2LCA0NywgMTgsIDE5LCA3MywgMjE2LCA1OSwgMTgsIDE5LCAKKyAgICA3MywgMjE2LCA1OCwgMTgsIDE5LCA3MywgMjE2LCA0OCwgMTgsIDE5LCA3MywgMjE2LCA2MCwgMTgsIDE5LCA3MywgMjEwLCAKKyAgICAxMywgMTgsIDE5LCA3MywgMjEwLCAyMywgMTgsIDE5LCA3MywgMjEwLCA5NCwgMTgsIDE5LCA3MywgMjEwLCA5MiwgMTgsIAorICAgIDE5LCA3MywgMjEwLCA0NCwgMTgsIDE5LCA3MywgMjEwLCAxMTYsIDE4LCAxOSwgNzMsIDIxMCwgMTU5LCAxOCwgMTksIDczLCAKKyAgICA2NSwgMjEwLCAxNTksIDE4LCAxOSwgNzMsIDI0NiwgMzYsIDE4LCAxOSwgNzMsIDI0NiwgMzcsIDE4LCAxOSwgNzMsIDI0NiwgCisgICAgNDQsIDE4LCAxOSwgNzMsIDI0NiwgNDMsIDE4LCAxOSwgNzMsIDI0NiwgMzksIDE4LCAxOSwgNzMsIDI0NiwgNDYsIDE4LCAKKyAgICAxOSwgNzMsIDIxOCwgODQsIDE4LCAxOSwgNzMsIDIxOSwgNjAsIDE4LCAxOSwgNzMsIDIyMSwgMTgzLCAxOCwgMTksIDczLCAKKyAgICAyMjEsIDE3MiwgMTgsIDE5LCA3MywgMjE5LCAxOTMsIDE4LCAxOSwgNzMsIDIwNiwgMTgsIDE5LCA3MywgMjE5LCAyMjcsIAorICAgIDE4LCAxOSwgNzMsIDIyMCwgOSwgMTgsIDE5LCA3MywgMjIwLCA2NSwgMTgsIDE5LCA3MywgMjIwLCA2MywgMTgsIDE5LCA3MywgCisgICAgMjIwLCAzNCwgMTgsIDE5LCA3MywgMjIwLCAxMDQsIDE4LCAxOSwgNzMsIDIyMCwgMTA2LCAxOCwgMTksIDczLCAyMTUsIAorICAgIDE2NCwgMTgsIDE5LCA3MywgMjE1LCAxNjcsIDE4LCAxOSwgNzMsIDIxNSwgMTc5LCAxOCwgMTksIDczLCAyMTUsIDE3OCwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxNjgsIDE4LCAxOSwgNzMsIDIxNSwgMTg0LCAxOCwgMTksIDczLCAyNTAsIDc3LCAxOCwgMTksIAorICAgIDczLCAyNTAsIDk0LCAxOCwgMTksIDczLCAyNTAsIDEzOSwgMTgsIDE5LCA3MywgMjUwLCAxMzYsIDE4LCAxOSwgNzMsIDI1MCwgCisgICAgMTE4LCAxOCwgMTksIDczLCAyNTAsIDE2NSwgMTgsIDE5LCA3MywgMjE1LCAxMjcsIDE4LCAxOSwgNzMsIDIxNSwgMTI4LCAKKyAgICAxOCwgMTksIDczLCAyMTUsIDEzMSwgMTgsIDE5LCA3MywgMjE1LCAxMzAsIDE4LCAxOSwgNzMsIDIxNSwgMTI5LCAxOCwgMTksIAorICAgIDczLCAyMTUsIDEzMiwgMTgsIDE5LCAyNTAsIDExOSwgNTAsIDE4LCAxOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxOCwgMTksIAorICAgIDIyNCwgODMsIDE4LCAxOSwgMjI5LCA3OCwgMTgsIDE5LCAyMjgsIDEwNSwgMTgsIDE5LCAyMjgsIDEwNCwgMTgsIDE5LCAKKyAgICAyMjgsIDEwMywgMTgsIDE5LCAyMjgsIDEwMiwgMTgsIDE5LCAyMjgsIDEwNywgMTgsIDE5LCAyMjgsIDEwNiwgMTgsIDE5LCAKKyAgICAyMTEsIDIxMywgMjE2LCAxMjYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI1LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIAorICAgIDEyNCwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjMsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIyLCAxOCwgMTksIDIxMSwgCisgICAgMjEzLCAyMTYsIDEyOSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjgsIDE4LCAxOSwgMjExLCAyMTMsIDQwLCAyMTYsIAorICAgIDIxMSwgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCA5OCwgMjI2LCAyMzAsIDIxOSwgMjEsIDc5LCAyMjYsIDIzMCwgMSwgMjUyLCAKKyAgICA1NiwgMjI2LCAyMzAsIDEsIDIzMiwgOTIsIDIyNiwgMjMwLCAxLCAyNDQsIDE1OSwgMjI2LCAyMzAsIDEsIDIyMiwgMTcsIAorICAgIDIyNiwgMjMwLCAxLCAyMjgsIDE5OCwgMjI2LCAyMzAsIDEsIDIxNCwgMjI2LCAyMjYsIDIzMCwgMSwgMjQ4LCAyMDUsIDIyNiwgCisgICAgMjMwLCAxLCAyMTYsIDgxLCAyMjYsIDIzMCwgMSwgMjQ5LCAyMzcsIDIyNiwgMjMwLCAxLCAyNTAsIDE4OCwgMjI2LCAyMzAsIAorICAgIDEsIDIzMCwgOTYsIDIyNiwgMjMwLCAxLCAyNDIsIDE2MywgMjI2LCAyMzAsIDEsIDIyOSwgNjgsIDIyNiwgMjMwLCAxLCAKKyAgICAyMTgsIDEyNCwgMjI2LCAyMzAsIDEsIDIyMiwgMTM3LCAyMjYsIDIzMCwgMSwgMjU0LCAyMDcsIDIyNiwgMjMwLCAxLCAyMjYsIAorICAgIDE5MSwgMjI2LCAyMzAsIDEsIDIxNCwgMTUwLCAyMjYsIDIzMCwgMSwgMjQ1LCAyMzksIDIyNiwgMjMwLCAxLCAyMzUsIDE5NSwgCisgICAgMjI2LCAyMzAsIDEsIDI0NSwgMjQwLCAyMjYsIDIzMCwgMSwgMjI2LCAxNjIsIDIyNiwgMjMwLCAxLCAyMTQsIDIwNiwgMjI2LCAKKyAgICAyMzAsIDEsIDIzNiwgNDYsIDIyNiwgMjMwLCAxLCAyNDUsIDIzNywgMjI2LCAyMzAsIDEsIDIyNSwgMjA1LCAyMjYsIDIzMCwgCisgICAgMjQ0LCAxNTgsIDc5LCAyMjYsIDIzMCwgMjIzLCA1MiwgMjQ0LCAxNTgsIDc5LCAxNzgsIDEsIDI0NCwgMTQ5LCAyNDQsIAorICAgIDE0MSwgMjQ0LCAxNjMsIDI0NSwgMTQsIDE3OCwgMSwgMjE0LCAxMDUsIDE3OCwgMSwgMjE0LCAxMzUsIDIxNCwgMTUxLCA2OSwgCisgICAgMTc4LCAxLCAyMTAsIDIxNCwgMTc4LCAxLCAyMTEsIDExNywgMTc4LCAxLCAyMTIsIDk4LCAxNzgsIDEsIDIxNiwgMTMxLCAKKyAgICAyMTYsIDEzMCwgMjE2LCAxNTIsIDE3OCwgMSwgMjQ1LCA2NywgMTc4LCAxLCAyNTQsIDEwMSwgNjEsIDE3OCwgMSwgMjI2LCAKKyAgICAxNDcsIDc4LCAxNzgsIDEsIDI1NSwgMjYsIDYxLCAxNzgsIDEsIDI1NCwgMjM2LCAxNzgsIDEsIDIzMiwgMTM5LCA3OCwgCisgICAgMTc4LCAxLCAyMTksIDI0NiwgNzgsIDE3OCwgMSwgNzgsIDE3OCwgMSwgMjI2LCAyMzgsIDE3OCwgMSwgMjI2LCAyMDAsIAorICAgIDE3OCwgMSwgMjIzLCAxNjcsIDIyMywgMTgwLCAyMjMsIDk3LCAxNTMsIDE3OCwgMSwgMjM0LCAxOTksIDE3OCwgMSwgMjUwLCAKKyAgICAxODUsIDE3OCwgMSwgMjM0LCAyMDAsIDIzNSwgMjksIDE3OCwgMSwgMjQzLCAyMDksIDE3OCwgMSwgMjQ1LCAxNDYsIDE3OCwgCisgICAgMSwgMjQzLCA2NSwgMjQyLCA3MywgMjQzLCAyMDksIDE3OCwgMSwgMjQzLCAxMDMsIDE3OCwgMSwgMjExLCAxODgsIDIxMSwgCisgICAgMTgyLCAyMTIsIDk4LCAxNzgsIDEsIDI0MiwgNDUsIDI0MiwgNjcsIDE3OCwgMSwgMjQyLCA0OSwgMjQyLCA2NywgMTc4LCAxLCAKKyAgICAyMzIsIDE0MSwgMjQyLCA2NywgMTc4LCAxLCAyMTksIDI0OSwgMjQyLCA2NywgMTc4LCAxLCAyMjksIDE5MCwgMjI3LCAxNjEsIAorICAgIDIyOSwgMTkxLCAyMzAsIDMwLCAxNzgsIDEsIDIxOSwgMjQ3LCAyMzAsIDMwLCAxNzgsIDEsIDI0NiwgMTIzLCAxNzgsIDEsIAorICAgIDIzNSwgMTc1LCAyMzUsIDE3OSwgMjM1LCAxNjgsIDc0LCAxNzgsIDEsIDc2LCAxNzgsIDEsIDIzNSwgMTIzLCAyMzUsIDE1MCwgCisgICAgMTc4LCAxLCAyNDMsIDUwLCAxNzgsIDEsIDIzMiwgMTQyLCAyNTQsIDI1MiwgMTc4LCAxLCAyMTksIDI1MSwgNjEsIDE3OCwgCisgICAgMSwgMjM1LCAxNjAsIDI0NSwgMTIxLCAxNzgsIDEsIDIyNSwgMTY3LCAyMjUsIDE4OSwgMjI2LCAxMDksIDE3OCwgMSwgMjU0LCAKKyAgICAxNzIsIDI0NSwgMTE5LCAxNzgsIDEsIDIxOSwgMjYsIDIyMiwgOTMsIDE3OCwgMSwgMjE5LCAxODEsIDIzMiwgMTM4LCAyMjIsIAorICAgIDkzLCAxNzgsIDEsIDIxOSwgMjQ1LCAyMjIsIDkzLCAxNzgsIDEsIDI1MSwgNzQsIDE3OCwgMSwgMjEwLCAxNTksIDE3OCwgMSwgCisgICAgMjE2LCA2NCwgMjE2LCA3NCwgMjE1LCA0MSwgMjE3LCAxNTMsIDE3OCwgMSwgMjE5LCAyNDQsIDIxNywgMTUzLCAxNzgsIDEsIAorICAgIDI0OSwgNjgsIDE3OCwgMSwgMjUyLCAzOSwgMjUyLCA0MiwgMjUxLCAyMzIsIDI1MywgMTY2LCAxNzgsIDEsIDIxOSwgMjUwLCAKKyAgICAyNTMsIDE2NiwgMTc4LCAxLCAyNDYsIDEyMiwgMTc4LCAxLCAyMjYsIDE3NSwgMTc4LCAxLCAyNDUsIDIwNCwgMjQ1LCAyMDYsIAorICAgIDc2LCAxNzgsIDEsIDIzMSwgMTgzLCAyMzEsIDE5MSwgMTk0LCAxNzgsIDEsIDIzMiwgMTQwLCAxOTQsIDE3OCwgMSwgMjE5LCAKKyAgICAyNDgsIDE5NCwgMTc4LCAxLCAyMzMsIDc5LCAyMzMsIDEyMCwgMjMyLCAxNDksIDE1NiwgMTc4LCAxLCAyNDYsIDEyNCwgCisgICAgMTc4LCAxLCAyMzUsIDIzNywgMTc4LCAxLCAyMzUsIDIzOCwgMTc4LCAxLCAyNDgsIDIxOCwgMjQ4LCAyMjMsIDI0OSwgNjgsIAorICAgIDE3OCwgMSwgMjI2LCAxNDIsIDI0NSwgNjYsIDc4LCAxNzgsIDEsIDI0NSwgMjM1LCAxNzgsIDEsIDIzNSwgMTk0LCAxNzgsIAorICAgIDEsIDI0OSwgODYsIDE3OCwgMSwgMjUxLCAyNSwgMTc4LCAxLCAyNTAsIDE5NywgMTc4LCAxLCAyMTgsIDE2MywgMTc4LCAxLCAKKyAgICAyMzIsIDEzNywgMTc4LCAxLCAyMTksIDI0MywgMTc4LCAxLCAyNDAsIDExNywgMTc4LCAxLCAyMjQsIDk5LCAxNzgsIDEsIAorICAgIDIxMSwgMTc4LCAxNzgsIDIxOSwgMTU3LCAyMjQsIDE0MywgMTc4LCAyMzAsIDkwLCAyMjQsIDE0MywgMTc4LCAyNDksIDEzOSwgCisgICAgMjI0LCAxNDMsIDE3OCwgMjU0LCAxNCwgODcsIDE3OCwgMjE1LCA4MiwgODcsIDE3OCwgMjUyLCA1NCwgODcsIDIxNywgODQsIAorICAgIDEsIDYxLCAyMTcsIDg0LCAxLCA3NCwgMjE3LCA4NCwgMSwgNjksIDIxNywgODQsIDEsIDE3NiwgMjE3LCA4NCwgMSwgMjQzLCAKKyAgICAxNDIsIDIxNywgODQsIDEsIDIyOSwgODIsIDIxNywgODQsIDEsIDIxNywgMTA2LCAyMTcsIDg0LCAxLCAyNDgsIDIyOSwgCisgICAgMjE3LCA4NCwgMSwgMTk4LCAyMTcsIDg0LCAxLCAxOTEsIDIxNywgODQsIDEsIDI1MiwgMTk5LCAyMTcsIDg0LCAxLCAxODYsIAorICAgIDIxNywgODQsIDEsIDE5MiwgMjE3LCA4NCwgMSwgMjMzLCAxNDEsIDIxNywgODQsIDEsIDIxMiwgNjUsIDIxNywgODQsIDEsIAorICAgIDIwNiwgMjE3LCA4NCwgMSwgMTYyLCAyMTcsIDg0LCAyNSwgNSwgNzQsIDIxNywgODQsIDI1LCA1LCA2OSwgMjE3LCA4NCwgNSwgCisgICAgMjEzLCAxNTIsIDI0MiwgMTQsIDEsIDYxLCAyNDIsIDE0LCAxLCA3NCwgMjQyLCAxNCwgMSwgNjksIDI0MiwgMTQsIDEsIAorICAgIDE3NiwgMjQyLCAxNCwgMSwgMjQzLCAxNDIsIDI0MiwgMTQsIDEsIDIyOSwgODIsIDI0MiwgMTQsIDEsIDIxNywgMTA2LCAKKyAgICAyNDIsIDE0LCAxLCAyNDgsIDIyOSwgMjQyLCAxNCwgMSwgMTk4LCAyNDIsIDE0LCAxLCAxOTEsIDI0MiwgMTQsIDEsIDI1MiwgCisgICAgMTk5LCAyNDIsIDE0LCAxLCAxODYsIDI0MiwgMTQsIDEsIDE5MiwgMjQyLCAxNCwgMSwgMjA1LCAyNDIsIDE0LCAxLCAyMzMsIAorICAgIDE0MSwgMjQyLCAxNCwgMSwgMjEyLCA2NSwgMjQyLCAxNCwgMSwgMjA2LCAyNDIsIDE0LCAxLCAxNjIsIDI0MiwgMTQsIDI1LCAKKyAgICA1LCA3NCwgMjQyLCAxNCwgMjUsIDUsIDY5LCAyNDIsIDE0LCA1LCAyMjYsIDUzLCAyMjUsIDEyOSwgMjE5LCAxNTcsIDIyNCwgCisgICAgMTQzLCAyMjUsIDEyOSwgNTIsIDIyNCwgMTQzLCAyNTEsIDEyOCwgMSwgNjEsIDI1MSwgMTI4LCAxLCA3NCwgMjUxLCAxMjgsIAorICAgIDEsIDY5LCAyNTEsIDEyOCwgMSwgMTc2LCAyNTEsIDEyOCwgMSwgMjQzLCAxNDIsIDI1MSwgMTI4LCAxLCAyMjksIDgyLCAKKyAgICAyNTEsIDEyOCwgMSwgMjE3LCAxMDYsIDI1MSwgMTI4LCAxLCAyNDgsIDIyOSwgMjUxLCAxMjgsIDEsIDE5OCwgMjUxLCAxMjgsIAorICAgIDEsIDE5MSwgMjUxLCAxMjgsIDEsIDI1MiwgMTk5LCAyNTEsIDEyOCwgMSwgMTg2LCAyNTEsIDEyOCwgMSwgMTkyLCAyNTEsIAorICAgIDEyOCwgMSwgMjA1LCAyNTEsIDEyOCwgMSwgMjMzLCAxNDEsIDI1MSwgMTI4LCAxLCAyMTIsIDY1LCAyNTEsIDEyOCwgMSwgCisgICAgMjA2LCAyNTEsIDEyOCwgMSwgMTYyLCAyNTEsIDEyOCwgMjUsIDUsIDc0LCAyNTEsIDEyOCwgMjUsIDUsIDY5LCAyMTcsIDgzLCAKKyAgICAxLCA2MSwgMjE3LCA4MywgMSwgNzQsIDIxNywgODMsIDEsIDY5LCAyMTcsIDgzLCAxLCAxNzYsIDIxNywgODMsIDEsIDI0MywgCisgICAgMTQyLCAyMTcsIDgzLCAxLCAyMjksIDgyLCAyMTcsIDgzLCAxLCAyMTcsIDEwNiwgMjE3LCA4MywgMSwgMjQ4LCAyMjksIAorICAgIDIxNywgODMsIDEsIDE5OCwgMjE3LCA4MywgMSwgMTkxLCAyMTcsIDgzLCAxLCAyNTIsIDE5OSwgMjE3LCA4MywgMSwgMTg2LCAKKyAgICAyMTcsIDgzLCAxLCAxOTIsIDIxNywgODMsIDEsIDIzMywgMTQxLCAyMTcsIDgzLCAxLCAyMTIsIDY1LCAyMTcsIDgzLCAxLCAKKyAgICAyMDYsIDIxNywgODMsIDI1LCA1LCA3NCwgMjE3LCA4MywgMjUsIDUsIDY5LCA3MCwgMSwgMTc2LCA3MCwgMSwgMjM0LCAxMzgsIAorICAgIDcwLCAxLCAyMzQsIDM0LCA3MCwgMSwgMjM0LCAxMTEsIDcwLCAxLCAyMjksIDksIDcwLCAxLCAyNTEsIDQxLCA3MCwgMSwgCisgICAgMjUwLCAxNjUsIDcwLCAxLCAyNDksIDI0NiwgNzAsIDEsIDI1MCwgOTQsIDcwLCAxLCAyMjcsIDEzOCwgNzAsIDEsIDI0OCwgCisgICAgMjI5LCA3MCwgMSwgMjE1LCAxNDUsIDcwLCAxLCAyNDcsIDE1MywgNzAsIDEsIDIxNSwgMTQwLCA3MCwgMSwgMjI4LCA4NSwgCisgICAgNzAsIDEsIDIxNywgMTA2LCA3MCwgMSwgMjE2LCAyMDksIDcwLCAxLCAxMTIsIDcwLCAxLCAyMTYsIDE1NywgNzAsIDEsIAorICAgIDIyOCwgNzksIDcwLCAxLCAyNTIsIDE5OSwgNzAsIDEsIDIyNSwgMTUwLCA3MCwgMSwgMjI1LCAxOSwgNzAsIDEsIDIyNSwgCisgICAgMTI0LCA3MCwgMSwgMjMwLCAxNjYsIDcwLCAxLCAyMTAsIDI0NCwgNzAsIDEsIDIyMiwgMjEzLCA3MCwgMSwgMjMyLCAxNjIsIAorICAgIDcwLCAxLCAyMTMsIDEzOCwgNzAsIDEsIDIyMCwgMTA0LCA3MCwgMSwgMjE4LCAxODYsIDcwLCAxLCAyMDYsIDcwLCAxLCAKKyAgICAxNjIsIDcwLCAxLCAyMzMsIDE0MSwgNzAsIDEsIDIyNCwgOTEsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNzcsIDcwLCAyMzUsIAorICAgIDI1MCwgMjUsIDIyNCwgOTAsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNTYsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNTEsIAorICAgIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgMzMsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNSwgNzAsIDIzNSwgMjUwLCAyNSwgCisgICAgMjIzLCAyNDksIDcwLCAyMzUsIDI1MCwgMjUsIDIyMywgMjQ4LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjIsIDEwMiwgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgMjIyLCA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgMjMyLCA2NywgNzAsIDIzNSwgMjUwLCAyNSwgMjMyLCAKKyAgICA1NywgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA3MiwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA4MywgNzAsIDIzNSwgMjUwLCAKKyAgICAyNSwgMjI0LCA0MSwgMjE1LCA0OSwgMTExLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDQxLCAyMTUsIDQ5LCAxMDUsIDcwLCAKKyAgICAyMzUsIDI1MCwgMjUsIDIyNCwgNzMsIDcwLCAyNSwgMjM1LCAyMzYsIDI1NCwgNTMsIDcwLCAyNSwgMjM1LCAyMzYsIDI1NSwgCisgICAgODIsIDcwLCAyNSwgNSwgMjU1LCA4MiwgNzAsIDI1LCA1LCA3NCwgNzAsIDI1LCA1LCAyMzYsIDQwLCA3MCwgMjUsIDUsIAorICAgIDIxMSwgMTE3LCA3MCwgMjUsIDUsIDIxMCwgMTY5LCA3MCwgMjUsIDUsIDY5LCA3MCwgMjUsIDUsIDIxNCwgMTE4LCA3MCwgCisgICAgMjUsIDUsIDIxNCwgMjI5LCA3MCwgMjUsIDUsIDIyNiwgMjM4LCA3MCwgMjUsIDUsIDE5MiwgNzAsIDI1LCA1LCAyMzYsIDY3LCAKKyAgICA3MCwgMjUsIDUsIDc2LCA3MCwgMjUsIDUsIDI1NCwgMjUyLCA3MCwgMjUsIDUsIDI1NCwgMjEwLCA3MCwgMjUsIDUsIDIyNiwgCisgICAgMTg3LCA3MCwgMjUsIDUsIDI1MywgMjAwLCA3MCwgNSwgMjI4LCAyMTEsIDcwLCA1LCAyMjMsIDEyOSwgNzAsIDUsIDIxMCwgCisgICAgMTgwLCA3MCwgNSwgMjMwLCA1NywgNzAsIDUsIDIxNSwgMjE0LCA3MCwgNSwgMjUyLCAxNTEsIDcwLCA1LCAyMjIsIDIwOCwgCisgICAgNzAsIDUsIDIxNiwgNDEsIDcwLCA1LCAyMzQsIDI0NywgNzAsIDUsIDI1NCwgMjEyLCA3MCwgNSwgMjIxLCAyNDYsIDIyMSwgCisgICAgMjQwLCA3MCwgNSwgMjEzLCAxNDksIDcwLCA1LCAyNDksIDI0MCwgNzAsIDUsIDI1MiwgMTI1LCA3MCwgNSwgMjM0LCAxMzEsIAorICAgIDcwLCA1LCAyNTIsIDE0NSwgNzAsIDUsIDI1MSwgMTcsIDIyNSwgNzUsIDIzMywgMTkzLCA3MCwgNSwgMjMzLCAzNiwgMjE2LCAKKyAgICAxOCwgNzAsIDUsIDI1MiwgMjgsIDcwLCA1LCAyMjUsIDEyNiwgMjMwLCAxMDQsIDcwLCA1LCAyMzQsIDE1LCA3MCwgMjQ5LCAKKyAgICAxMDYsIDE2LCAyMjMsIDMxLCA3MCwgNSwgMjUzLCAxODIsIDcwLCA1LCAyNTMsIDIwMywgNzAsIDIxLCAyMTAsIDg2LCA3MCwgCisgICAgMjEsIDExMSwgNzAsIDIxLCAxMDUsIDcwLCAyMSwgMTU4LCA3MCwgMjEsIDE2MSwgNzAsIDIxLCAxOTAsIDcwLCAyMSwgMTk1LCAKKyAgICA3MCwgMjEsIDE5OSwgNzAsIDIxLCAxOTYsIDcwLCAyMSwgMjAxLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMTksIAorICAgIDQ1LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMzAsIDc2LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjUsIAorICAgIDc0LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyNTIsIDU3LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyNTEsIAorICAgIDExMSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTgsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgCisgICAgMjEyLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxMCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAKKyAgICAyMTYsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjE0LCA4MywgMjUxLCAyNDQsIDgzLCAyNDUsIDE3MSwgODMsIAorICAgIDI0OSwgMjI3LCA4MywgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MywgMjQ5LCAyMzQsIDgzLCAyNDQsIDE5LCAyNDcsIDEyNiwgCisgICAgODMsIDIxNiwgNDAsIDIxOSwgNTQsIDI0MCwgMTc1LCA4MywgMjE5LCAxOTIsIDMsIDI1MSwgMTgwLCAyMzEsIDE1OSwgODMsIAorICAgIDIzMSwgMTg4LCAyNDksIDIyNywgODMsIDIzMSwgMTg4LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgzLCAyMjgsIDE5NiwgODMsIAorICAgIDI0NCwgNSwgNDUsIDIyMSwgMTU5LCAxMTEsIDgzLCAyNDQsIDUsIDQ1LCAyMjEsIDE1OSwgMTA1LCA4MywgMjQ0LCA1LCA0NSwgCisgICAgMjIxLCAxNTksIDE1OCwgODMsIDI1LCAyMjAsIDEzOSwgODMsIDIxLCAyMTAsIDg2LCA4MywgMjEsIDExMSwgODMsIDIxLCAKKyAgICAxMDUsIDgzLCAyMSwgMTU4LCA4MywgMjEsIDE2MSwgODMsIDIxLCAxOTAsIDgzLCAyMSwgMTk1LCA4MywgMjEsIDE5OSwgODMsIAorICAgIDIxLCAxOTYsIDgzLCAyMSwgMjAxLCA4MywgMSwgNjEsIDgzLCAxLCA3NiwgODMsIDEsIDc0LCA4MywgMSwgNzgsIDgzLCAxLCAKKyAgICA2OSwgODMsIDEsIDIyNiwgMjM4LCA4MywgMSwgMjE0LCAyMTQsIDgzLCAxLCAyNDUsIDIxNywgODMsIDEsIDE5OCwgODMsIDEsIAorICAgIDI1NCwgMTIzLCA4MywgMSwgMjUyLCAxOTksIDgzLCAxLCAxOTEsIDgzLCAxLCAyMjQsIDkxLCA4MywgMSwgMjQzLCAxNDIsIAorICAgIDgzLCAxLCAxODYsIDgzLCAxLCAyMzMsIDE0MSwgODMsIDEsIDIwNiwgODMsIDEsIDIyMCwgMTA0LCA4MywgMSwgMjE3LCAKKyAgICAxMDYsIDgzLCAxLCAyNDgsIDIyOSwgODMsIDEsIDI1MCwgMTY1LCA4MywgMSwgMjM1LCAxNDcsIDgzLCAxLCAxOTIsIDgzLCAKKyAgICAxLCAyMDUsIDgzLCAxLCAyMTIsIDY1LCA4MywgMSwgMjQ0LCAyMDQsIDgzLCAxLCAxNzYsIDgzLCAxLCAyMzQsIDEzOCwgODMsIAorICAgIDEsIDIxNSwgMTg0LCA4MywgMSwgMjEwLCAxMTYsIDgzLCAxLCAyNDIsIDUzLCA4MywgMSwgMjEwLCAxNiwgODMsIDEsIDIzMywgCisgICAgNCwgODMsIDEsIDIxMCwgNjksIDgzLCAxLCAyNTAsIDExOCwgODMsIDEsIDIxNiwgNDAsIDIwMCwgMjUsIDUwLCA4MywgMSwgCisgICAgMjE2LCA0MCwgNzYsIDgzLCAxLCAyMTYsIDQwLCA3NCwgODMsIDEsIDIxNiwgNDAsIDc4LCA4MywgMSwgMjE2LCA0MCwgNjksIAorICAgIDgzLCAxLCAyMTYsIDQwLCAyMjYsIDIzOCwgODMsIDEsIDIxNiwgNDAsIDIxNCwgMjE0LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAKKyAgICAxMjMsIDgzLCAxLCAyMTYsIDQwLCAyNTIsIDE5OSwgODMsIDEsIDIxNiwgNDAsIDE5MSwgODMsIDEsIDIxNiwgNDAsIDIyNCwgCisgICAgOTEsIDgzLCAxLCAyMTYsIDQwLCAyNDMsIDE0MiwgODMsIDEsIDIxNiwgNDAsIDE4NiwgODMsIDEsIDIxNiwgNDAsIDIxNywgCisgICAgMTA2LCA4MywgMSwgMjE2LCA0MCwgMjQ4LCAyMjksIDgzLCAxLCAyMTYsIDQwLCAyNTAsIDE2NSwgODMsIDEsIDIxNiwgNDAsIAorICAgIDIzNSwgMTQ3LCA4MywgMSwgMjE2LCA0MCwgMjE1LCAxODQsIDgzLCAxLCAyMTYsIDQwLCAxOTIsIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyMTIsIDY1LCA4MywgMSwgMjE2LCA0MCwgMTc2LCA4MywgMSwgMjE2LCA0MCwgMjQzLCAxMzksIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyNDIsIDUzLCA4MywgMSwgMjE2LCA0MCwgMjM1LCAxMTMsIDgzLCAxLCAyMTYsIDQwLCAyMjgsIDIzNiwgODMsIDEsIDIxNiwgCisgICAgNDAsIDI0NiwgNDYsIDgzLCAxLCAyMTksIDE5MiwgNzYsIDgzLCAxLCAyMTksIDE5MiwgNzQsIDgzLCAxLCAyMTksIDE5MiwgCisgICAgMjM1LCAxNTgsIDgzLCAxLCAyMTksIDE5MiwgMjE0LCAyMTQsIDgzLCAxLCAyMTksIDE5MiwgNjksIDgzLCAxLCAyMTksIAorICAgIDE5MiwgMjU0LCAxMjMsIDgzLCAxLCAyMTksIDE5MiwgMTc2LCA4MywgMSwgMjE5LCAxOTIsIDI0MywgMTQyLCA4MywgMSwgCisgICAgMjE5LCAxOTIsIDE2MiwgODMsIDEsIDIxOSwgMTkyLCAxOTEsIDgzLCAxLCAyMTksIDE5MiwgMjIwLCAxMDQsIDgzLCAxLCAKKyAgICAyMTksIDE5MiwgMjE3LCAxMDYsIDgzLCAxLCAyMTksIDE5MiwgMjQ4LCAyMjksIDgzLCAxLCAyMTksIDE5MiwgMjM1LCAxNDcsIAorICAgIDgzLCAxLCAyMTksIDE5MiwgMjQ0LCAyMDQsIDgzLCAxLCAyMTksIDE5MiwgMjQzLCAxMzksIDgzLCAxLCAyMTksIDE5MiwgCisgICAgMjQyLCA1MywgODMsIDEsIDIxOSwgMTkyLCAyMTUsIDE4NCwgODMsIDEsIDIxOSwgMTkyLCAyMTAsIDExNiwgODMsIDEsIAorICAgIDIxOSwgMTkyLCAyMjMsIDE4NywgODMsIDEsIDIxOSwgMTkyLCAyNTAsIDE2NSwgODMsIDEsIDIxOSwgMTkyLCAyMTAsIDgyLCAKKyAgICA4MywgMSwgMjMxLCAxODgsIDc0LCA4MywgMSwgMjMxLCAxODgsIDE3NiwgODMsIDEsIDIzMSwgMTg4LCAyMDUsIDgzLCAxLCAKKyAgICAyMzEsIDE4OCwgMjQ0LCAyMDQsIDgzLCAxLCAyMzEsIDE4OCwgMjEwLCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgCisgICAgMjU0LCA4NCwgMTExLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTMsIDE0OCwgMTExLCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyNDgsIDE5NCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIzNSwgMjAwLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUyLCAxNjMsIDgzLCAxLCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDEzNCwgMjUyLCAxNjMsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDYxLCA4MywgMSwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCA3NCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMTc2LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMjksIDgyLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTEsIDQxLCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMTUsIDE1NywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE1LCAxNDUsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI0OCwgMTQzLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMjgsIDExNSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMjI5LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAxOTEsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIyNSwgMTUwLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgCisgICAgMTIzLCAyMTgsIDIyNSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIAorICAgIDEyMywgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1NCwgMjE4LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAKKyAgICAxNzEsIDI0MywgMTIzLCAyMTcsIDEwNiwgODMsIDEsIDIxNiwgNDAsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIAorICAgIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0MywgMCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAKKyAgICAxMjMsIDIyOSwgODIsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTEsIDQxLCA4MywgMSwgMjMxLCAKKyAgICAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjM1LCAxMjAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAyMTUsIDE1NywgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMTI3LCA4MywgMSwgMjMxLCAxODgsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIAorICAgIDMzLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE4LCAyMjUsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAKKyAgICAxNzEsIDI0MywgMTIzLCAyNDksIDgwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIAorICAgIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAxNjMsIDY5LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAxNjMsIDE5MiwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI1MiwgMjYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMjE5LCA4MywgMSwgMjMxLCAxODgsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMjMzLCA0LCAxOCwgMTksIDIyNiwgMTEzLCAxOCwgMTksIDI1MywgMTc1LCAxOCwgMTksIAorICAgIDI1NSwgMzcsIDE4LCAxOSwgMjEyLCAyNSwgMTgsIDE5LCAyMjQsIDIyNCwgMTgsIDE5LCAyMjUsIDIzMywgMTgsIDE5LCAKKyAgICAyMjQsIDEwOCwgMTgsIDE5LCAyMTcsIDMyLCAxOCwgMTksIDIzNCwgMTk1LCAxOCwgMTksIDIzMywgMTg1LCAxOCwgMTksIAorICAgIDIzMSwgMTM3LCAxOCwgMTksIDIyOCwgNDIsIDE4LCAxOSwgMjI5LCAxODYsIDE4LCAxOSwgMjMzLCA3NCwgMTgsIDE5LCAKKyAgICAyMTksIDI0LCAxOCwgMTksIDIyMSwgMjEzLCAxOCwgMTksIDIxOSwgMjM0LCAxOCwgMTksIDIyMCwgNjgsIDE4LCAxOSwgCisgICAgMjE5LCAyMDMsIDE4LCAxOSwgMjEwLCAyMjAsIDE4LCAxOSwgMjExLCA1MiwgMTgsIDE5LCAyMjMsIDEzNywgMTgsIDE5LCAKKyAgICAyMjcsIDE3NSwgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzUsIDE4LCAxOSwgMjI3LCAxNzQsIDE4LCAxOSwgMjI2LCAyMjAsIAorICAgIDIyNywgMTc0LCAxOCwgMTksIDIyNywgMTczLCAxOCwgMTksIDIyNiwgMjIwLCAyMjcsIDE3MywgMTgsIDE5LCAyMjcsIDE3MiwgCisgICAgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzIsIDE4LCAxOSwgMjIyLCAxMDcsIDE4LCAxOSwgMjIyLCAxMDYsIDE4LCAxOSwgCisgICAgMjIyLCAxMDUsIDE4LCAxOSwgMjIyLCAxMDQsIDE4LCAxOSwgMjIyLCAxMDMsIDE4LCAxOSwgMjIyLCAxMTEsIDE4LCAxOSwgCisgICAgMjI2LCAyMjAsIDIyNiwgMTA5LCAxOCwgMTksIDIyNiwgMjIwLCAyMTcsIDE1MywgMTgsIDE5LCAyMjYsIDIyMCwgMjM1LCAKKyAgICAyOSwgMTgsIDE5LCAyMjYsIDIyMCwgMjUxLCA3NCwgMTgsIDE5LCAyMjYsIDIyMCwgMTk0LCAxOCwgMTksIDIyNiwgMjIwLCAKKyAgICAyMzAsIDMwLCAxOCwgMTksIDIyNiwgMjIwLCAyMjIsIDkzLCAxOCwgMTksIDIyNiwgMjIwLCAyMjAsIDEwNiwgMTgsIDE5LCAKKyAgICAyNDUsIDIyNywgMjEyLCA5OCwgMTgsIDE5LCAyMTIsIDcsIDIxMiwgOTgsIDE4LCAxOSwgNDAsIDQsIDIyMiwgMjM2LCAxOCwgCisgICAgMTksIDQwLCAyMjMsIDE2MCwgMjQ3LCAxMjgsIDE4LCAxOSwgMjIzLCAyMjYsIDIyMiwgMTA4LCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICAxMzMsIDE4LCAxOSwgMTU5LCAyMzMsIDE0MCwgMTgsIDE5LCAyMTYsIDEyNywgMTgsIDE5LCAyMTYsIDEyOSwgMTgsIDE5LCAKKyAgICAyMTUsIDEzNywgMTgsIDE5LCAyMTUsIDEzOSwgMTgsIDE5LCAyMTUsIDE0NCwgMTgsIDE5LCAyMTYsIDUwLCAxOCwgMTksIAorICAgIDIxNiwgNTIsIDE4LCAxOSwgMjIxLCAyMTEsIDIxOSwgMjA4LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDMsIDE4LCAxOSwgCisgICAgMjIxLCAyMTEsIDI0MSwgNjAsIDE4LCAxOSwgNzMsIDI0MiwgODAsIDE4LCAxOSwgNzMsIDI0OCwgNjAsIDI0MywgNjIsIDE4LCAKKyAgICAxOSwgNzMsIDI0MywgMTM5LCAxOCwgMTksIDczLCAyNDIsIDg1LCAxOCwgMTksIDIyMSwgMjExLCAyMzUsIDM5LCAxOCwgMTksIAorICAgIDczLCAyMzUsIDM3LCAxOCwgMTksIDI1MiwgNzYsIDI0OCwgNjAsIDE1NiwgMTgsIDE5LCAyNTIsIDc2LCAyNDgsIDYwLCAKKyAgICAxNTMsIDE4LCAxOSwgNzMsIDI0OCwgNTUsIDIyMiwgOTMsIDIzMiwgMjI5LCAyMTMsIDEyMiwgMjMzLCAxNiwgMjMyLCAyMjksIAorICAgIDEsIDE3NiwgMjMyLCAyMjksIDEsIDIzNCwgMTM4LCAyMzIsIDIyOSwgMSwgMjQzLCAxNDIsIDIzMiwgMjI5LCAxLCAyNDMsIAorICAgIDAsIDIzMiwgMjI5LCAxLCAyMjksIDgyLCAyMzIsIDIyOSwgMSwgMjUxLCA0MSwgMjMyLCAyMjksIDEsIDI1MCwgMTY1LCAKKyAgICAyMzIsIDIyOSwgMSwgMjM1LCAxNDcsIDIzMiwgMjI5LCAxLCAyMzUsIDEyMCwgMjMyLCAyMjksIDEsIDIxMSwgNzEsIDIzMiwgCisgICAgMjI5LCAxLCAyMTcsIDEwNiwgMjMyLCAyMjksIDEsIDIxNiwgMjA5LCAyMzIsIDIyOSwgMSwgMjQ4LCAyMjksIDIzMiwgMjI5LCAKKyAgICAxLCAyNDgsIDMzLCAyMzIsIDIyOSwgMSwgMTk4LCAyMzIsIDIyOSwgMSwgMTkxLCAyMzIsIDIyOSwgMSwgMjI1LCAxNTAsIAorICAgIDIzMiwgMjI5LCAxLCAyNTIsIDE5OSwgMjMyLCAyMjksIDEsIDI1MiwgMjYsIDIzMiwgMjI5LCAxLCAxODYsIDIzMiwgMjI5LCAKKyAgICAxLCAxOTIsIDIzMiwgMjI5LCAxLCAyMDUsIDIzMiwgMjI5LCAxLCAyMzMsIDE0MSwgMjMyLCAyMjksIDEsIDIxMiwgNjUsIAorICAgIDIzMiwgMjI5LCAxLCAyMjAsIDEwNCwgMjMyLCAyMjksIDEsIDIxOCwgMjI1LCAyMzIsIDIyOSwgMSwgMjA2LCAyMzIsIDIyOSwgCisgICAgMSwgMTYyLCAyMzIsIDIyOSwgMjUsIDUsIDYxLCAyMzIsIDIyOSwgMjUsIDUsIDc0LCAyMzIsIDIyOSwgMjUsIDUsIDY5LCAKKyAgICAyMzIsIDIyOSwgMjUsIDUsIDI0NSwgMjE3LCAyMzIsIDIyOSwgMjUsIDUsIDI1NCwgMjEwLCAyMzIsIDIyOSwgMjUsIDUsIAorICAgIDIyNiwgMTg3LCAyMzIsIDIyOSwgMjUsIDUsIDI1MywgMjAwLCAyMzIsIDIyOSwgMjUsIDUsIDc2LCAyMzIsIDIyOSwgMjUsIAorICAgIDUsIDc4LCAyMzIsIDIyOSwgMjE4LCA3NCwgMSwgMTkyLCAyMzIsIDIyOSwgMjE4LCA3NCwgMSwgMjA1LCAyMzIsIDIyOSwgCisgICAgMjE4LCA3NCwgMSwgMjEyLCA2NSwgMjMyLCAyMjksIDQsIDEsIDE3NiwgMjMyLCAyMjksIDQsIDEsIDIyOSwgODIsIDIzMiwgCisgICAgMjI5LCA0LCAxLCAyNTQsIDgzLCAyMzIsIDIyOSwgNCwgMSwgMjE3LCAxMDYsIDIzMiwgMjI5LCA0LCAxLCAxOTgsIDIzMiwgCisgICAgMjI5LCA0LCAxLCAxOTEsIDIzMiwgMjI5LCA0LCAxLCAxODYsIDIzMiwgMjI5LCA0LCAxLCAyMDUsIDIzMiwgMjI5LCA0LCAxLCAKKyAgICAyMzMsIDE0MSwgMjMyLCAyMjksIDUsIDIzMCwgOTQsIDIzMiwgMjI5LCA1LCAyMzQsIDE3NywgMjMyLCAyMjksIDUsIDIyMiwgCisgICAgMzQsIDIzMiwgMjI5LCA1LCAyMzIsIDEzMywgMjMyLCAyMjksIDI0NSwgMzksIDc5LCAyMzIsIDIyOSwgMjI0LCAxNiwgNzksIAorICAgIDIzMiwgMjI5LCAyMSwgMjEwLCA4NiwgMjMyLCAyMjksIDIxLCAxMTEsIDIzMiwgMjI5LCAyMSwgMTA1LCAyMzIsIDIyOSwgCisgICAgMjEsIDE1OCwgMjMyLCAyMjksIDIxLCAxNjEsIDIzMiwgMjI5LCAyMSwgMTkwLCAyMzIsIDIyOSwgMjEsIDE5NSwgMjMyLCAKKyAgICAyMjksIDIxLCAxOTksIDIzMiwgMjI5LCAyMSwgMTk2LCAyMzIsIDIyOSwgMjEsIDIwMSwgMzksIDIzMywgNjUsIDEsIDE3NiwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxMSwgMTY1LCAzOSwgMjMzLCA2NSwgMSwgMjI5LCA4MiwgMzksIDIzMywgNjUsIDEsIDIxNSwgCisgICAgMTg0LCAzOSwgMjMzLCA2NSwgMSwgMjA2LCAzOSwgMjMzLCA2NSwgMSwgMTkyLCAzOSwgMjMzLCA2NSwgMSwgMjE3LCAxMDYsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDIwOSwgMzksIDIzMywgNjUsIDEsIDIzMywgMTQxLCAzOSwgMjMzLCA2NSwgMSwgMTkxLCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjI1LCAxNTAsIDM5LCAyMzMsIDY1LCAxLCAxODYsIDM5LCAyMzMsIDY1LCAxLCAyNDQsIDIwNCwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxNCwgMjcsIDM5LCAyMzMsIDY1LCAxLCAxNjIsIDM5LCAyMzMsIDY1LCAxLCAyMjQsIDkxLCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjM0LCAxMzgsIDM5LCAyMzMsIDY1LCAxLCAyMTUsIDE3NiwgMzksIDIzMywgNjUsIDEsIDE5OCwgCisgICAgMzksIDIzMywgNjUsIDEsIDYxLCAzOSwgMjMzLCA2NSwgMSwgNzQsIDM5LCAyMzMsIDY1LCAxLCAyNDUsIDIxNywgMzksIAorICAgIDIzMywgNjUsIDEsIDI0NSwgMjA1LCAzOSwgMjMzLCA2NSwgMSwgNjksIDM5LCAyMzMsIDY1LCAxLCAyMjYsIDE4NywgMzksIAorICAgIDIzMywgNjUsIDEsIDc4LCAzOSwgMjMzLCA2NSwgMSwgMjE0LCAyMTQsIDM5LCAyMzMsIDY1LCAxLCA3NiwgMzksIDIzMywgCisgICAgNjUsIDEsIDI1MywgMTk4LCAzOSwgMjMzLCA2NSwgMSwgMjU0LCAyMTAsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI5LCAzOSwgCisgICAgMjMzLCA2NSwgMSwgMjE2LCAyOCwgMzksIDIzMywgNjUsIDEsIDIxNiwgMjcsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI2LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyNCwgOTEsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAyMjQsIDkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTc2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxNjUsIAorICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjksIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTc2LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyMSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjksIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgCisgICAgMjE1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTIsIDE2NiwgMzksIAorICAgIDE3MywgMSwgMTIxLCAyMTUsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAorICAgIDE5MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNywgMTA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE2LCAyMDksIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAxOTgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTcsIDEwNiwgMTY2LCAzOSwgMTczLCAxLCAKKyAgICAxMjEsIDIxNiwgMjA5LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTk4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkxLCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMjI1LCAxNTAsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxODYsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjUsIDE1MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE4NiwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDI0NCwgMjA0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjUsIDIzMywgMTQxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ0LCAyMDQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKKyAgICAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxNDEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNjIsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAyNDgsIDIyOSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI1MiwgMTk5LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ4LCAyMjksIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNTIsIAorICAgIDE5OSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxMzgsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyNSwgMjE4LCA4MywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxOCwgODMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1LCAKKyAgICAyMTksIDI0MSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCA4MiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgNjksIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTE4LCAxNjYsIDM5LCAxNzMsIDI1LCAKKyAgICA1LCA3NiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU0LCAyNTIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDc4LCAxNjYsIDM5LCAKKyAgICAxNzMsIDI1LCA1LCAyMjcsIDQsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMjE0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAKKyAgICAyNTMsIDE3NSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCAzNywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTEsIAorICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNiwgMTEzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjcsIDEsIDE2NiwgMzksIDE3MywgCisgICAgMjUsIDUsIDIxNCwgMjEwLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMzUsIDE1OCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjE0LCAKKyAgICAxMDUsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIyOSwgODQsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzMCwgMzAsIDE2NiwgMzksIAorICAgIDE3MywgMSwgNDAsIDE5NCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjM1LCAyOSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjQ5LCAKKyAgICA2OCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjUzLCAxNjYsIDE2NiwgMzksIDE3MywgMTM4LCAyMzEsIDE2MywgMTY2LCAzOSwgCisgICAgMTczLCAxMzgsIDIzMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDIxLCAyMTAsIDg2LCAxNjYsIDM5LCAxNzMsIDIxLCAxMTEsIAorICAgIDE2NiwgMzksIDE3MywgMjEsIDEwNSwgMTY2LCAzOSwgMTczLCAyMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDIxLCAxNjEsIDE2NiwgCisgICAgMzksIDE3MywgMjEsIDE5MCwgMTY2LCAzOSwgMTczLCAyMSwgMTk1LCAxNjYsIDM5LCAxNzMsIDIxLCAxOTksIDE2NiwgMzksIAorICAgIDE3MywgMjEsIDE5NiwgMTY2LCAzOSwgMTczLCAyMSwgMjAxLCAxNjYsIDM5LCAxNzMsIDg5LCAyMSwgMTExLCAxNjYsIDM5LCAKKyAgICAxNzMsIDUsIDIzMywgMTI2LCAxNjYsIDM5LCAxNzMsIDUsIDIzMywgMTI1LCA3MCwgMTYsIDIyNSwgMjQwLCA3MCwgMTYsIAorICAgIDIzMCwgNzcsIDIzNCwgMzEsIDcwLCAxNiwgMjI1LCA3NSwgMjM0LCAzMSwgNzAsIDE2LCAyNTIsIDU4LCAyMzQsIDMxLCA3MCwgCisgICAgMTYsIDI1MSwgMTEyLCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjE5LCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjEzLCAyMzQsIAorICAgIDMxLCA3MCwgMTYsIDIyNCwgMjExLCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjE3LCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgCisgICAgMjE1LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTgxLCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc3LCAyMzQsIDMxLCA3MCwgCisgICAgMTYsIDI0OCwgMTc2LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc5LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc4LCAyMzQsIAorICAgIDMxLCA3MCwgMTYsIDI0OCwgMTc1LCAyMzQsIDMxLCA3MCwgMTYsIDIxNSwgODcsIDcwLCAxNiwgMjMwLCA3NywgMjIyLCAKKyAgICAyMDcsIDcwLCAxNiwgMjI1LCA3NSwgMjIyLCAyMDcsIDcwLCAxNiwgMjUyLCA1OCwgMjIyLCAyMDcsIDcwLCAxNiwgMjUxLCAKKyAgICAxMTIsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE5LCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxMywgMjIyLCAyMDcsIAorICAgIDcwLCAxNiwgMjI0LCAyMTEsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE3LCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxNSwgCisgICAgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxODEsIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc3LCAyMjIsIDIwNywgNzAsIDE2LCAKKyAgICAyNDgsIDE3NiwgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxNzksIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc4LCAyMjIsIAorICAgIDIwNywgNzAsIDE2LCAyNDgsIDE3NSwgMjIyLCAyMDcsIDI1MSwgMTI5LCAxLCAxNzYsIDI1MSwgMTI5LCAxLCAyNDMsIDE0MiwgCisgICAgMjUxLCAxMjksIDEsIDIyOSwgODIsIDI1MSwgMTI5LCAxLCAyMjksIDI3LCAyNTEsIDEyOSwgMSwgMTkxLCAyNTEsIDEyOSwgCisgICAgMSwgMjUyLCAxOTksIDI1MSwgMTI5LCAxLCAxODYsIDI1MSwgMTI5LCAxLCAyMzAsIDExMCwgMjUxLCAxMjksIDEsIDIxNywgCisgICAgMTA2LCAyNTEsIDEyOSwgMSwgMjQ4LCAyMjksIDI1MSwgMTI5LCAxLCAxOTgsIDI1MSwgMTI5LCAxLCAyMjgsIDQxLCAyNTEsIAorICAgIDEyOSwgMSwgMjUxLCA0MSwgMjUxLCAxMjksIDEsIDIzNSwgMTQ3LCAyNTEsIDEyOSwgMSwgMjI3LCAxNjksIDI1MSwgMTI5LCAKKyAgICAxLCAyMjcsIDE2MiwgMjUxLCAxMjksIDEsIDE5MiwgMjUxLCAxMjksIDEsIDIwNSwgMjUxLCAxMjksIDEsIDIzMywgMTQxLCAKKyAgICAyNTEsIDEyOSwgMSwgMjE0LCAyNywgMjUxLCAxMjksIDEsIDIwNiwgMjUxLCAxMjksIDEsIDYxLCAyNTEsIDEyOSwgMSwgCisgICAgMTYyLCAyNTEsIDEyOSwgMjUsIDUsIDc0LCAyNTEsIDEyOSwgMjUsIDUsIDY5LCAyNTEsIDEyOSwgMjUsIDUsIDc2LCAyNTEsIAorICAgIDEyOSwgMjUsIDUsIDc4LCAyNTEsIDEyOSwgMjUsIDUsIDI1NCwgMjUyLCAyNTEsIDEyOSwgMjI2LCA2NCwgMjUxLCAxMjksIAorICAgIDI0NSwgMTUxLCA2NCwgMjIxLCAxNzQsIDM5LCA4OSwgMSwgMTI1LCAxNzYsIDM5LCA4OSwgMSwgMTI1LCAyMzQsIDEzOCwgCisgICAgMzksIDg5LCAxLCAxMjUsIDIzMywgMTc3LCAzOSwgODksIDEsIDEyMSwgMTc2LCAzOSwgODksIDEsIDEyMSwgMjMzLCAxNzcsIAorICAgIDM5LCA4OSwgMSwgMTIxLCAyMzQsIDEzOCwgMzksIDg5LCAxLCAyMjksIDgyLCAzOSwgODksIDEsIDEyNSwgMjUxLCA0MSwgCisgICAgMzksIDg5LCAxLCAxMjUsIDI1MCwgMTY1LCAzOSwgODksIDEsIDEyMSwgMjUxLCA0MSwgMzksIDg5LCAxLCAxMjEsIDIwNiwgCisgICAgMzksIDg5LCAxLCAxMjEsIDI1MCwgMTY1LCAzOSwgODksIDEsIDIyNywgMTY5LCAzOSwgODksIDEsIDIyMywgMTQzLCAzOSwgCisgICAgODksIDEsIDEyNSwgMjIzLCAxNDEsIDM5LCA4OSwgMSwgMjQ4LCAyMjksIDM5LCA4OSwgMSwgMTIxLCAyMjMsIDE0MSwgMzksIAorICAgIDg5LCAxLCAyMjMsIDE1MiwgMzksIDg5LCAxLCAxMjUsIDIxNywgMTA2LCAzOSwgODksIDEsIDEyNSwgMjE2LCAyMDksIDM5LCAKKyAgICA4OSwgMSwgMTIxLCAyMTcsIDEwNiwgMzksIDg5LCAxLCAxMjEsIDIxNiwgMjA5LCAzOSwgODksIDEsIDE5OCwgMzksIDg5LCAKKyAgICAxLCAyNTIsIDE5OSwgMzksIDg5LCAxLCAxMjUsIDE5MSwgMzksIDg5LCAxLCAxMjUsIDIyNSwgMTUwLCAzOSwgODksIDEsIAorICAgIDEyNSwgMjQ0LCAyMDQsIDM5LCA4OSwgMSwgMTIxLCAxOTEsIDM5LCA4OSwgMSwgMTIxLCAyNDQsIDIwNCwgMzksIDg5LCAxLCAKKyAgICAxMjEsIDIyNSwgMTUwLCAzOSwgODksIDEsIDE4NiwgMzksIDg5LCAxLCAxMjEsIDE5MiwgMzksIDg5LCAxLCAxMjUsIDE5MiwgCisgICAgMzksIDg5LCAxLCAyMDUsIDM5LCA4OSwgMSwgMjIyLCAxMzksIDM5LCA4OSwgMSwgMjMzLCAxNDEsIDM5LCA4OSwgMSwgMjMyLCAKKyAgICA5OCwgMzksIDg5LCAxLCAyMTIsIDY1LCAzOSwgODksIDEsIDEyNSwgMjIwLCAxMDQsIDM5LCA4OSwgMSwgMTI1LCAyMTgsIAorICAgIDIyNSwgMzksIDg5LCAxLCAxMjUsIDIwNiwgMzksIDg5LCAxLCAxMjUsIDE2MiwgMzksIDg5LCAxLCAyMzIsIDE5MCwgMzksIAorICAgIDg5LCAxLCA2MSwgMzksIDg5LCAxLCAxMjEsIDE2MiwgMzksIDg5LCAxLCA3NCwgMzksIDg5LCAxLCAyMzYsIDQwLCAzOSwgCisgICAgODksIDEsIDY5LCAzOSwgODksIDEsIDIxNCwgMTE4LCAzOSwgODksIDEsIDI0NSwgMjE3LCAzOSwgODksIDEsIDIyNiwgMTg3LCAKKyAgICAzOSwgODksIDEsIDIzMywgMTI2LCAzOSwgODksIDEsIDI0MiwgMTM5LCAyMDYsIDM5LCA4OSwgMTE3LCA1LCAxNDcsIDIwNSwgCisgICAgMzksIDg5LCAxMTcsIDUsIDE0NywgMjMzLCAxNDEsIDM5LCA4OSwgMTE3LCA1LCAyMzMsIDE0MiwgMjE3LCA1OSwgMjMzLCAKKyAgICAxMTUsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIzNCwgMjM3LCAyMzMsIDExNSwgMzksIDg5LCAxMTcsIDUsIDQwLCAyMjksIAorICAgIDgyLCAzOSwgODksIDExNywgNSwgMTIxLCAxOTEsIDM5LCA4OSwgMTE3LCA1LCAxMjUsIDIyMywgMTQyLCAxNzcsIDEyMSwgCisgICAgMTkxLCAzOSwgODksIDExNywgNSwgMTg2LCAzOSwgODksIDExNywgNSwgMjUyLCAxOTksIDM5LCA4OSwgMTE3LCA1LCAyMDYsIAorICAgIDM5LCA4OSwgNSwgMjIyLCAxMiwgMzksIDg5LCAyNSwgNSwgNjEsIDM5LCA4OSwgMjUsIDUsIDIzMSwgMjA5LCAyMjEsIDIyOCwgCisgICAgMzksIDg5LCAyNSwgNSwgMjU1LCA4MiwgMzksIDg5LCAyNSwgNSwgMjE3LCA2NSwgMjU1LCA4MiwgMzksIDg5LCAyNSwgNSwgCisgICAgNzQsIDM5LCA4OSwgMjUsIDUsIDIzNiwgNDAsIDM5LCA4OSwgMjUsIDUsIDIxNCwgMjE0LCAzOSwgODksIDI1LCA1LCAyMTQsIAorICAgIDExNywgMzksIDg5LCAyNSwgNSwgNjksIDM5LCA4OSwgMjUsIDUsIDIxNCwgMTE4LCAzOSwgODksIDI1LCA1LCA3OCwgMzksIAorICAgIDg5LCAyNSwgNSwgMjI3LCA1LCA1MSwgMzksIDg5LCAyNSwgNSwgMjI2LCAxMTMsIDM5LCA4OSwgMjUsIDUsIDc2LCAzOSwgCisgICAgODksIDI1LCA1LCAyNTQsIDI1MiwgMzksIDg5LCAyNSwgNSwgMjI2LCAxODcsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjEwLCAKKyAgICAzOSwgODksIDI1LCA1LCA4OSwgMjU0LCAyMTAsIDM5LCA4OSwgMjUsIDUsIDIyNywgNSwgNDgsIDM5LCA4OSwgNSwgMjMxLCAKKyAgICAyMDksIDIzNCwgMjM2LCAzOSwgODksIDUsIDIxNiwgMzAsIDM5LCA4OSwgNSwgMjE2LCAyOSwgMzksIDg5LCA1LCAyMzQsIAorICAgIDEwMywgMjE2LCAyOCwgMzksIDg5LCA1LCAyMzQsIDEwMywgMjE2LCAyNywgMzksIDg5LCA1LCAyMzQsIDEwMywgMjE2LCAyNiwgCisgICAgMzksIDg5LCA1LCAyMjMsIDE5MSwgMjQyLCA1MiwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjIxLCAyNTUsIDM5LCA4OSwgNSwgCisgICAgMjM0LCAxMDIsIDIzNCwgMjIxLCAzOSwgODksIDM4LCAyNDksIDEyMywgMjQ3LCAxMjgsIDM5LCA4OSwgMjQxLCA1MywgMjEsIAorICAgIDIxMCwgODYsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDExMSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTA1LCAzOSwgODksIDI0MSwgCisgICAgNTMsIDIxLCAxNTgsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE2MSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTkwLCAzOSwgODksIAorICAgIDI0MSwgNTMsIDIxLCAxOTUsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5OSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTk2LCAzOSwgCisgICAgODksIDI0MSwgNTMsIDIxLCAyMDEsIDM5LCA4OSwgODksIDIxLCAyMTAsIDg2LCAzOSwgODksIDg5LCAyMSwgMTExLCAzOSwgCisgICAgODksIDg5LCAyMSwgMTA1LCAzOSwgODksIDg5LCAyMSwgMTU4LCAzOSwgODksIDg5LCAyMSwgMTYxLCAzOSwgODksIDg5LCAKKyAgICAyMSwgMTkwLCAzOSwgODksIDg5LCAyMSwgMTk1LCAzOSwgODksIDg5LCAyMSwgMTk5LCAzOSwgODksIDg5LCAyMSwgMTk2LCAKKyAgICAzOSwgODksIDg5LCAyMSwgMjAxLCAzOSwgODksIDUsIDIxMSwgMjQ5LCAzOSwgODksIDUsIDIxMSwgMjQ4LCAzOSwgODksIDUsIAorICAgIDIyMSwgMjE3LCAzOSwgODksIDUsIDIzNCwgMTY2LCAzOSwgODksIDUsIDI0MCwgMjM5LCAzOSwgODksIDUsIDI0NywgMTQyLCAKKyAgICAzOSwgODksIDUsIDIyMywgNTIsIDIyMiwgMTg5LCAyMjMsIDE1MiwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjExLCA3MiwgMzksIAorICAgIDg5LCA1LCAyMzUsIDEyLCAzOSwgODksIDUsIDIzNSwgMTEsIDM5LCA4OSwgNSwgMjIxLCAyMjQsIDM5LCA4OSwgNSwgMjIxLCAKKyAgICAyMjMsIDM5LCA4OSwgNSwgMjQyLCAxNiwgMzksIDg5LCA1LCAyNTEsIDM4LCAxMDIsIDUsIDIxNCwgMjAwLCAyMjMsIDMzLCAKKyAgICAxMDIsIDUsIDIxNCwgMjAwLCAyNTEsIDksIDEwMiwgNSwgMjUwLCAxOTQsIDEwMiwgNSwgMjE4LCAxNiwgMTAyLCA1LCAyNTEsIAorICAgIDI0MSwgMTAyLCAxLCAyNTQsIDE5MywgMTAyLCAxLCAyNTQsIDE5NCwgMjE3LCAxNCwgMTAyLCAxLCAyMzYsIDM2LCAxMDIsIAorICAgIDEsIDIzNiwgMzcsIDIxNywgMTQsIDEwMiwgMSwgMjE0LCAyMDMsIDEwMiwgMSwgMjE0LCAyMDQsIDIxNywgMTQsIDEwMiwgMSwgCisgICAgMjIzLCAxOTEsIDIyMywgODIsIDEwMiwgMSwgMjIzLCAxOTEsIDIyMywgODMsIDIxNywgMTQsIDEwMiwgMSwgMjMzLCAxNDIsIAorICAgIDIzMywgMzAsIDEwMiwgMSwgMjMzLCAxNDIsIDIzMywgMzEsIDIxNywgMTQsIDEwMiwgMSwgMjQ1LCAxODcsIDEwMiwgMSwgCisgICAgMjU0LCAyMDgsIDEwMiwgMSwgMjI2LCAyMTYsIDEwMiwgMSwgMjI2LCAyMTcsIDIxNywgMTQsIDEwMiwgMSwgMTc2LCAxMDIsIAorICAgIDEsIDIzNSwgMTksIDIzMSwgMjEyLCAxMDIsIDEsIDI0MywgMTQyLCAxMDIsIDEsIDI0MywgMTQzLCAyNDIsIDE2OCwgMTAyLCAKKyAgICAxLCAyMjksIDgyLCAxMDIsIDEsIDI1MSwgNDEsIDEwMiwgMSwgMjUxLCA0MiwgMjMzLCAxMjksIDEwMiwgMSwgMjM1LCAxNDcsIAorICAgIDEwMiwgMSwgMjM1LCAxNDgsIDIzNSwgMTI0LCAxMDIsIDEsIDIyNywgMTY5LCAxMDIsIDEsIDIxNywgMTA3LCAyMzMsIDgyLCAKKyAgICAxMDIsIDEsIDIxNywgMTA3LCAyMzAsIDcyLCAyMzEsIDIxMiwgMTAyLCAxLCAyNDgsIDIzMCwgMjMwLCA3MiwgMjU0LCAxNTMsIAorICAgIDEwMiwgMSwgMjQ4LCAyMzAsIDIzMCwgNzIsIDIzMSwgMjEyLCAxMDIsIDEsIDIyOSwgMjM0LCAyMjMsIDE1NSwgMTAyLCAxLCAKKyAgICAyMTcsIDEwNiwgMTAyLCAxLCAyMTcsIDEwNywgMjE3LCAzNiwgMTAyLCAxLCAyNDgsIDIyOSwgMTAyLCAxLCAyNDgsIDIzMCwgCisgICAgMjMxLCAyMzAsIDEwMiwgMSwgMTk4LCAxMDIsIDEsIDE5MSwgMTAyLCAxLCAyMjYsIDk0LCAyMzQsIDIzMiwgMTAyLCAxLCAKKyAgICAyNTIsIDE5OSwgMTAyLCAxLCAyNTIsIDIwMCwgMjM0LCAxNzgsIDEwMiwgMSwgMTg2LCAxMDIsIDEsIDE5MiwgMTAyLCAxLCAKKyAgICAyMDUsIDEwMiwgMSwgMjMzLCAxNDEsIDEwMiwgMSwgMjEyLCA2NSwgMTAyLCAxLCAyMjIsIDM2LCAyMjIsIDIyLCAxMDIsIDEsIAorICAgIDIyMiwgMzYsIDIyMSwgMjM1LCAxMDIsIDEsIDIwNiwgMTAyLCAxLCAxNjIsIDEwMiwgNSwgMjIzLCA3MywgMTAyLCAyNSwgNSwgCisgICAgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjE0LCAxOTksIDEwMiwgMjUsIDUsIDIxNCwgMjAwLCAyMjEsIDIzMSwgMTAyLCAyNSwgCisgICAgNSwgMjE4LCA0OCwgMTAyLCAyNSwgNSwgMjE4LCA0OSwgMjM2LCAyOCwgMTAyLCAyNSwgNSwgMjIzLCAxOTEsIDIyMywgODIsIAorICAgIDEwMiwgMjUsIDUsIDIyMywgMTkxLCAyMjMsIDgzLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMzMsIDE0MiwgMjMzLCAzMCwgCisgICAgMTAyLCAyNSwgNSwgMjMzLCAxNDIsIDIzMywgMzEsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNywgNjYsIDEwMiwgMjUsIDUsIAorICAgIDIxNywgNjcsIDIyMywgODIsIDEwMiwgMjUsIDUsIDIxNywgNjcsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNywgNjcsIDIyMywgCisgICAgODMsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIyNSwgMTg3LCAxMDIsIDI1LCA1LCAyMjUsIDE4OCwgMjE3LCAxNCwgMTAyLCAKKyAgICAyNTUsIDMsIDI1NSwgMiwgMTAyLCAxLCAyMzUsIDEsIDIyMSwgMjMwLCAxMDIsIDEsIDIzNCwgMTA4LCAyMjEsIDIzMCwgCisgICAgMTAyLCAxLCAyMTUsIDM0LCAyMjEsIDIzMCwgMTAyLCAxLCAyNDUsIDIxMSwgMjIxLCAyMzAsIDEwMiwgMSwgMjE0LCAwLCAKKyAgICAyMjEsIDIzMCwgMTAyLCAxLCAyMTAsIDEwNywgMjIxLCAyMzAsIDEwMiwgMSwgMjUzLCAyMTcsIDIyMSwgMjMwLCAxMDIsIAorICAgIDIxLCAyMTAsIDg2LCAxMDIsIDIxLCAxMTEsIDEwMiwgMjEsIDEwNSwgMTAyLCAyMSwgMTU4LCAxMDIsIDIxLCAxNjEsIDEwMiwgCisgICAgMjEsIDE5MCwgMTAyLCAyMSwgMTk1LCAxMDIsIDIxLCAxOTksIDEwMiwgMjEsIDE5NiwgMTAyLCAyMSwgMjAxLCAxMDIsIAorICAgIDIyNiwgMzMsIDEwMiwgMjI2LCA1OSwgMTAyLCAyMTEsIDIzOCwgMTAyLCAyNTAsIDI0NCwgMjI2LCA1MiwgMTAyLCAyNTAsIAorICAgIDI0NCwgMjE5LCAxNzQsIDEwMiwgMjUwLCAyNDQsIDIyNiwgNiwgMTAyLCAyMjYsIDU4LCAxMDIsIDI4LCAxNiwgMjQ3LCAKKyAgICAxMzQsIDEwMiwgMjgsIDE2LCAyNDgsIDU5LCAxMDIsIDI4LCAxNiwgMjQ2LCA3MiwgMTAyLCAyOCwgMTYsIDI0OCwgMTg0LCAKKyAgICAxMDIsIDI4LCAxNiwgMjQ4LCAxODUsIDIxOCwgMTYsIDEwMiwgMjgsIDE2LCAyNDcsIDIxMywgMTAyLCAyOCwgMTYsIDI0OCwgCisgICAgMjIyLCAxMDIsIDI4LCAxNiwgMjQ4LCA0MSwgMTAyLCAyOCwgMTYsIDI0OCwgMjA2LCAxMDIsIDI4LCAxNiwgMjQ4LCAxODUsIAorICAgIDI0MywgNjQsIDEwMiwgMjgsIDE2LCAzOCwgMjE3LCAxMCwgMTAyLCAyOCwgMTYsIDM4LCAyNDUsIDE0OSwgMTAyLCAyOCwgCisgICAgMTYsIDM4LCAyMzQsIDE3MywgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NSwgMTAyLCAyOCwgMTYsIDM4LCAyMzUsIDEyOCwgCisgICAgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NCwgMiwgMjM1LCAxMjgsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzYsIDIsIAorICAgIDIzNSwgMTI4LCAxMDIsIDI4LCAxNiwgMzgsIDI1MiwgNDUsIDEwMiwgMjgsIDE2LCAzOCwgMjQyLCAxNzIsIDEwMiwgMjgsIAorICAgIDE2LCAyMjIsIDI1MiwgMjA0LCAyNDYsIDgyLCAxMDIsIDI4LCAxNiwgMjIyLCAyNTIsIDIwNCwgMjQ4LCAyMjAsIDEwMiwgCisgICAgMjgsIDE2LCAyMjIsIDI1MiwgMjUwLCA4LCAyMTUsIDExMiwgMTAyLCAyOCwgMTYsIDIyMiwgMjUyLCAyNTAsIDgsIDIxNywgCisgICAgNzQsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNiwgNDcsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNCwgCisgICAgMTQyLCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjUwLCA4LCAyMjUsIDQxLCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjUwLCA4LCAKKyAgICAyMjUsIDI5LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjUsIDY0LCAyMDcsIDUsIDIyNiwgMzAsIDIwNywgNSwgCisgICAgMjI2LCA0MywgMjA3LCA1LCAyMjYsIDM5LCAyMDcsIDEsIDYxLCAyMDcsIDEsIDc0LCAyMDcsIDEsIDY5LCAyMDcsIDEsIAorICAgIDI1NCwgMjUyLCAyMDcsIDEsIDc4LCAyMDcsIDEsIDc2LCAyMDcsIDEsIDI0NSwgNjMsIDIwNywgMSwgMTc2LCAyMDcsIDEsIAorICAgIDIyNCwgOTEsIDIwNywgMSwgMjQzLCAxNDIsIDIwNywgMSwgMjI5LCA4MiwgMjA3LCAxLCAyNTEsIDQxLCAyMDcsIDEsIDIzNSwgCisgICAgMTQ3LCAyMDcsIDEsIDIxMCwgMTE2LCAyMDcsIDEsIDIyNywgMTY5LCAyMDcsIDEsIDIxNywgMTA2LCAyMDcsIDEsIDI0OCwgCisgICAgMjI5LCAyMDcsIDEsIDE5OCwgMjA3LCAxLCAxOTEsIDIwNywgMSwgMjQ0LCAyMDQsIDIwNywgMSwgMjE0LCAyNywgMjA3LCAxLCAKKyAgICAyNTIsIDE5OSwgMjA3LCAxLCAxODYsIDIwNywgMSwgMTkyLCAyMDcsIDEsIDIwNSwgMjA3LCAxLCAyMzMsIDE0MSwgMjA3LCAKKyAgICAxLCAyMTIsIDY1LCAyMDcsIDEsIDIwNiwgMjA3LCAxLCAyMTEsIDE2NSwgMjA3LCAxLCAxNjIsIDIwNywgMTE3LCA1LCAyMjYsIAorICAgIDU2LCAyMDcsIDExNywgNSwgMjI2LCAzMiwgMjA3LCAxMTcsIDUsIDIyNiwgMjksIDIwNywgMjUsIDUsIDIyNiwgNDYsIDIwNywgCisgICAgMjUsIDUsIDIyNiwgMjgsIDIwNywgMjUsIDUsIDIyNiwgNTAsIDIwNywgMjUsIDUsIDIyNiwgMzgsIDIwNywgMjUsIDUsIAorICAgIDIyNiwgNTcsIDIwNywgMjUsIDUsIDIyNiwgNDgsIDIwNywgNSwgMjI2LCA2MCwgMjA3LCA1LCAyMTMsIDE1MiwgMjA3LCAKKyAgICAxMTcsIDUsIDIyNSwgMjUyLCAxODYsIDIwNywgMTE3LCA1LCAyMjUsIDI1MiwgMjEyLCA2NSwgMjA3LCAxLCAyMzQsIDEzOCwgCisgICAgMjA3LCAxLCAyMTcsIDIzMiwgMjA3LCAyMSwgMjEwLCA4NiwgMjA3LCAyMSwgMTExLCAyMDcsIDIxLCAxMDUsIDIwNywgMjEsIAorICAgIDE1OCwgMjA3LCAyMSwgMTYxLCAyMDcsIDIxLCAxOTAsIDIwNywgMjEsIDE5NSwgMjA3LCAyMSwgMTk5LCAyMDcsIDIxLCAKKyAgICAxOTYsIDIwNywgMjEsIDIwMSwgMjA3LCAyNTMsIDE4MywgMjA3LCAxLCAyMjMsIDU1LCAyMDcsIDEsIDIzMywgMTMsIDIwNywgCisgICAgMSwgMjUyLCAyNiwgMjA3LCAxLCA0MCwgMjM1LCAyOSwgMjA3LCAxLCA0MCwgMTk0LCAyNTIsIDEyOCwgMSwgNjEsIDI1MiwgCisgICAgMTI4LCAxLCAyMTksIDE2NiwgNjEsIDI1MiwgMTI4LCAxLCAxNjIsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTYyLCAyNTIsIAorICAgIDEyOCwgMSwgMjMxLCAxODYsIDE2MiwgMjUyLCAxMjgsIDEsIDI1MiwgMTk5LCAyNTIsIDEyOCwgMSwgMjM0LCAyMTgsIDI1MiwgCisgICAgMTk5LCAyNTIsIDEyOCwgMSwgMTkxLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE5MSwgMjUyLCAxMjgsIDEsIDE5OCwgMjUyLCAKKyAgICAxMjgsIDEsIDIzMSwgMTg2LCAxOTgsIDI1MiwgMTI4LCAxLCAyMTIsIDY1LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIxMiwgCisgICAgNjUsIDI1MiwgMTI4LCAxLCAyMjYsIDcxLCAyMTIsIDY1LCAyNTIsIDEyOCwgMSwgMjQzLCAxNDIsIDI1MiwgMTI4LCAxLCAKKyAgICAyMTksIDE2NiwgMjQzLCAxNDIsIDI1MiwgMTI4LCAxLCAyMzUsIDE0NywgMjUyLCAxMjgsIDEsIDI0OCwgMjI5LCAyNTIsIAorICAgIDEyOCwgMSwgMjA1LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIwNSwgMjUyLCAxMjgsIDEsIDE4NiwgMjUyLCAxMjgsIDEsIAorICAgIDIxOSwgMTY2LCAxODYsIDI1MiwgMTI4LCAxLCAyMTksIDI4LCAyMTcsIDEwNiwgMjUyLCAxMjgsIDEsIDIyOCwgNjAsIDIxNywgCisgICAgMTA2LCAyNTIsIDEyOCwgMSwgMjA2LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIwNiwgMjUyLCAxMjgsIDEsIDIzMSwgMTg2LCAKKyAgICAyMDYsIDI1MiwgMTI4LCAxLCAxOTIsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTkyLCAyNTIsIDEyOCwgMSwgMjI5LCA4MiwgCisgICAgMjUyLCAxMjgsIDEsIDIzMywgMTQxLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIzMywgMTQxLCAyNTIsIDEyOCwgMSwgMjI3LCAKKyAgICAxNjksIDI1MiwgMTI4LCAxLCAyNTEsIDQxLCAyNTIsIDEyOCwgMSwgMjI5LCAxNTMsIDI1MiwgMTI4LCAxLCAyMzEsIDEyOSwgCisgICAgMjUyLCAxMjgsIDEsIDc0LCAyNTIsIDEyOCwgMSwgNjksIDI1MiwgMTI4LCA1LCAyMTYsIDM0LCAyNTIsIDEyOCwgMjUsIDUsIAorICAgIDc2LCAyNTIsIDEyOCwgMjUsIDUsIDIyNiwgNzEsIDc2LCAyNTIsIDEyOCwgMjUsIDUsIDI0NSwgMjE3LCAyNTIsIDEyOCwgCisgICAgMjUsIDUsIDc0LCAyNTIsIDEyOCwgMjUsIDUsIDIzNCwgMjE4LCA3NCwgMjUyLCAxMjgsIDI1LCA1LCA3OCwgMjUyLCAxMjgsIAorICAgIDI1LCA1LCAyMzQsIDIxOCwgNzgsIDI1MiwgMTI4LCAyNSwgNSwgNjksIDI1MiwgMTI4LCAyNSwgNSwgMTA0LCAzMSwgMjE5LCAKKyAgICAxNjYsIDIwNiwgMjUyLCAxMjgsIDExNywgNSwgMjI5LCA4NCwgMjUyLCAxMjgsIDExNywgNSwgMjQyLCA2NywgMjUyLCAxMjgsIAorICAgIDIyNiwgNDEsIDI1MiwgMTI4LCAyMjYsIDM3LCAyNTIsIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMjksIDIzNCwgMjMxLCA0MiwgCisgICAgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjI1LCA2NywgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjM1LCA1NCwgMjUyLCAKKyAgICAxMjgsIDE2LCAyNTEsIDI0OSwgMjI2LCA0MSwgMTk3LCAxLCAxNzYsIDE5NywgMSwgMjM0LCA0NSwgMTk3LCAxLCAyMzQsIAorICAgIDEzOCwgMTk3LCAxLCAyNDMsIDE0MiwgMTk3LCAxLCAyNDIsIDE5MywgMTk3LCAxLCAyMjksIDgyLCAxOTcsIDEsIDI1MSwgCisgICAgNDEsIDE5NywgMSwgMjUwLCAxNjUsIDE5NywgMSwgMjM1LCAxNDcsIDE5NywgMSwgMjI3LCAxNjksIDE5NywgMSwgMjE3LCAKKyAgICAxMDYsIDE5NywgMSwgMjE2LCAyMDksIDE5NywgMSwgMjQ4LCAyMjksIDE5NywgMSwgMTk4LCAxOTcsIDEsIDE5MSwgMTk3LCAKKyAgICAxLCAyMjUsIDQ1LCAxOTcsIDEsIDIyNSwgMTUwLCAxOTcsIDEsIDI0NCwgMjA0LCAxOTcsIDEsIDI0NCwgODMsIDE5NywgMSwgCisgICAgMjUyLCAxOTksIDE5NywgMSwgMjUxLCAyMzAsIDE5NywgMSwgMTg2LCAxOTcsIDEsIDIzMCwgMTczLCAxOTcsIDEsIDIxNSwgCisgICAgMTg0LCAxOTcsIDEsIDIxNSwgMTc2LCAxOTcsIDEsIDI0NiwgNDYsIDE5NywgMSwgMTkyLCAxOTcsIDEsIDIwNSwgMTk3LCAxLCAKKyAgICAyMzMsIDE0MSwgMTk3LCAxLCAxNjIsIDE5NywgMSwgMjQxLCAxNjAsIDE5NywgMSwgMjE0LCAyNywgMTk3LCAxLCAyMDYsIAorICAgIDE5NywgMSwgMjIwLCAxMDQsIDE5NywgMSwgMjEyLCA2NSwgMTk3LCAxLCA2MSwgMTk3LCAyMTgsIDc0LCAxLCAxOTIsIDE5NywgCisgICAgMjE4LCA3NCwgMSwgMjA1LCAxOTcsIDI1LCA1LCAyNTUsIDgyLCAxOTcsIDI1LCA1LCA3NCwgMTk3LCAyNSwgNSwgNzgsIAorICAgIDE5NywgMjUsIDUsIDIyNiwgMTg3LCAxOTcsIDI1LCA1LCA2OSwgMTk3LCAyNSwgNSwgMjE0LCAxMTgsIDE5NywgMjUsIDUsIAorICAgIDc2LCAxOTcsIDExNywgNSwgMjM1LCAyOSwgMTk3LCAxMTcsIDUsIDE5NCwgMTk3LCAxMTcsIDUsIDE1NiwgMTk3LCAxMTcsIAorICAgIDUsIDIzMCwgMzAsIDE5NywgMTE3LCA1LCAyMjYsIDEwOSwgMTk3LCAxMTcsIDUsIDE1MywgMTk3LCAxMTcsIDUsIDIxNywgCisgICAgMTUzLCAxOTcsIDExNywgNSwgMjI3LCAxNDYsIDE5NywgMTE3LCA1LCAyMzQsIDIzNiwgMTk3LCA1LCAyMjMsIDE1MywgMTk3LCAKKyAgICA1LCAyMjcsIDIwOSwgMTk3LCAyMjQsIDE0NCwgMjE3LCAxMDQsIDE5NywgMjI0LCAxNDQsIDIyNywgMTU2LCAyMTYsIDEyMSwgCisgICAgMjE3LCAxMDQsIDE5NywgMjI0LCAxNDQsIDI1MCwgMTcyLCAxOTcsIDIyNCwgMTQ0LCAyMTUsIDE3MSwgMjUwLCAxNzIsIAorICAgIDE5NywgMjI0LCAxNDQsIDIxNSwgMTcwLCAxOTcsIDIxLCAyMTAsIDg2LCAxOTcsIDIxLCAxMTEsIDE5NywgMjEsIDEwNSwgCisgICAgMTk3LCAyMSwgMTU4LCAxOTcsIDIxLCAxNjEsIDE5NywgMjEsIDE5MCwgMTk3LCAyMSwgMTk1LCAxOTcsIDIxLCAxOTksIAorICAgIDE5NywgMjEsIDE5NiwgMTk3LCAyMSwgMjAxLCAxOTcsIDEsIDIxNSwgMTU3LCAxOTcsIDEsIDIxNSwgMTQ1LCAxOTcsIDEsIAorICAgIDI0OCwgMTQzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAyMTAsIDg2LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxMTEsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDEwNSwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTU4LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDIxLCAxNjEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5MCwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk1LCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTksIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5NiwgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAyMSwgMjAxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgMTQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIAorICAgIDI1MywgMjE0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgMjI1LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgCisgICAgMTIzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgMTg3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgMTQwLCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgNDQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU1LCA0NSwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAxLCAyNTUsIDQzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgMzgsIDIyNiwgMjE0LCAyNTAsIDExMSwgCisgICAgMSwgMjMyLCAyNDcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxNzgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM2LCAKKyAgICA0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE5NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE4NiwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzIsIDEwMywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDIyMSwgMjI2LCAKKyAgICAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDIxOSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDE2OCwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAxLCAyMTQsIDExMSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDY0LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDEsIDI0NSwgMTE2LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI0NSwgMjIwLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIAorICAgIDI0NSwgMTU4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI0NSwgOTQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMyLCAKKyAgICAxNjIsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI2LCAxNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI3LCAwLCAyMjYsIAorICAgIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMTI5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMjI2LCAyMjYsIDIxNCwgCisgICAgMjUwLCAxMTEsIDIzMCwgMTA4LCAyMTUsIDEyMiwgMjI2LCAyMTQsIDI1MCwgMTExLCAyNDMsIDEzNywgMjE1LCAxMjMsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjMwLCAxMDYsIDIxNSwgMTIzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIyMywgOTUsIDIyNiwgCisgICAgMjE0LCAyNTAsIDExMSwgMjI1LCAxNDgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjU0LCAyMTcsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMjI0LCAxNDQsIDIzMCwgMTAzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIyNCwgMTQ0LCA1MiwgMjMwLCAxMDMsIDIwNywgCisgICAgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMTgsIDksIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMjYsIDQyLCAyMDcsIDIyNCwgCisgICAgMTQ0LCAyNTEsIDI0OSwgMjI0LCAxMzIsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyNTEsIDI3LCAyMDcsIDIyNCwgMTQ0LCAKKyAgICAyNTEsIDI0OSwgMjMzLCAxNCwgMjIxLCAyMjcsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMzUsIDE5LCAyMjEsIDIyNywgCisgICAgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDI0OCwgMjMwLCAyMjEsIDIyNywgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIAorICAgIDI1MiwgMjAwLCAyMjEsIDIyNywgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMTYsIDIxMywgMjUyLCAxMzgsIDIyMCwgNzksIDIxMywgCisgICAgMjUyLCAxMzgsIDIyNCwgMjAxLCAyMTMsIDI1MiwgNSwgMjI4LCAyMTQsIDIxMywgMjUyLCA1LCAyMTEsIDgwLCAyMzAsIAorICAgIDIyNywgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyNTQsIDIyMiwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjExLCA4MCwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjM0LCAyMDQsIAorICAgIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDI1MSwgMTAsIDUxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAKKyAgICAyMzQsIDIwNCwgMjM1LCAyNTAsIDIxOCwgMiwgMjIxLCAxOTksIDIxMywgMjUyLCAxMzgsIDUyLCAyMTgsIDEsIDIxMywgCisgICAgMjUyLCAxMzgsIDIxNSwgMjEyLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjA0LCAyNTQsIDg1LCAyMTMsIDI1MiwgCisgICAgMTM4LCA1OSwgNTEsIDIxMywgMjUyLCAxMzgsIDExMywgMTcwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMTM0LCAxNzAsIDUxLCAKKyAgICAyMTMsIDI1MiwgMTM4LCAyMjIsIDI0MywgMjM0LCAyMTUsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDI1MywgCisgICAgMjEyLCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDIxOCwgMSwgMjEzLCAyNTIsIDUsIDIxMywgCisgICAgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIDIyMywgNTIsIDIxMywgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIAorICAgIDIxMywgMTQ4LCAyNTQsIDg1LCAyMTMsIDI1MiwgNSwgMjIzLCA1MiwgMjEzLCAxNDgsIDI1NCwgODUsIDIxMywgMjUyLCA1LCAKKyAgICAyMTMsIDE0OCwgMjE0LCAyMTcsIDIsIDIxNywgNzgsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjU0LCA4NiwgMiwgMjE3LCAKKyAgICA3OCwgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDI1NCwgOTksIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyNTIsIDE3NCwgMjEzLCAKKyAgICAyNTIsIDUsIDI1NCwgODQsIDIxNCwgMjAsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIDIxLCAyLCAyMTcsIDc4LCAyMTMsIAorICAgIDI1MiwgNSwgMjE2LCA2OSwgMjEzLCAyNTIsIDUsIDI0MSwgMTk4LCAyMDAsIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyMDAsIAorICAgIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyMjIsIDE0NCwgMjAwLCAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAKKyAgICAyMjMsIDIzMCwgOTUsIDIxMywgMjUyLCA1LCAyNTQsIDI4LCAyMTMsIDI1MiwgNSwgMjIyLCAxODksIDI1NCwgMjgsIDIxMywgCisgICAgMjUyLCAxMzgsIDI1MSwgMTAsIDQ4LCAyMTMsIDI1MiwgNSwgMjM1LCAxMDgsIDIxMywgMjUyLCA1LCAyMTQsIDE2MSwgNywgCisgICAgMSwgNCwgNiwgNjEsIDcsIDEsIDQsIDYsIDI1NCwgMjUyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNTQsIDI1MiwgNywgMSwgNCwgCisgICAgNiwgMjUyLCAxNDIsIDI1MywgMTY2LCA3LCAxLCA0LCA2LCAyNTEsIDc0LCA3LCAxLCA0LCA2LCAyNDksIDY4LCA3LCAxLCA0LCAKKyAgICA2LCAyNDUsIDY3LCA3LCAxLCA0LCA2LCA3NiwgNywgNCwgMSwgMjE1LCA5NCwgMjA0LCA3NiwgNywgNCwgMSwgMjE1LCA5NCwgCisgICAgNzQsIDcsIDEsIDQsIDYsIDIzNSwgMTUwLCA3LCAxLCA0LCA2LCAyMzUsIDI5LCA3LCAxLCA0LCA2LCAyMzMsIDE1NSwgMiwgCisgICAgOTEsIDcsIDEsIDQsIDYsIDE5NCwgNywgMSwgNCwgNiwgMjIzLCA1MiwgMjMwLCAzMCwgNywgMSwgNCwgNiwgNzgsIDcsIDEsIAorICAgIDQsIDYsIDIwNCwgNzgsIDcsIDQsIDEsIDIxOSwgMTg5LCA3OCwgNywgNCwgMSwgMjE5LCAxODksIDIwNCwgNzgsIDcsIDQsIAorICAgIDEsIDIxOSwgMTg5LCAxNDQsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCAyMjYsIDIzOCwgNywgMSwgNCwgNiwgMjI2LCAKKyAgICAxMzgsIDcsIDQsIDEsIDIxNiwgMTUsIDE2MywgNzgsIDcsIDQsIDEsIDI1MSwgMTgzLCAxNjMsIDc4LCA3LCAxLCA0LCA2LCAKKyAgICAyMjYsIDEwOSwgNywgMSwgNCwgNiwgMjIzLCA1MiwgMTUzLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxNTMsIDcsIDEsIDQsIDYsIAorICAgIDIxNywgMTUzLCA3LCAxLCA0LCA2LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDY5LCA3LCA0LCAxLCAyMTksIDE4OSwgMjQ4LCAKKyAgICA4LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDIxNSwgOTQsIDE5NCwgNywgMSwgNCwgNiwgMjE0LCAxMDUsIDcsIDEsIDQsIDYsIAorICAgIDIxMiwgOTgsIDcsIDEsIDQsIDYsIDIxMCwgMTU5LCA3LCAxLCA0LCA2LCAyNDUsIDE2LCA3LCAxLCAyMTMsIDEzNSwgMjMzLCAKKyAgICA4OCwgMjE4LCAyNTIsIDcsIDEsIDI1NCwgMjA1LCAyNiwgMSwgNCwgNiwgMjQzLCAxMTQsIDI2LCAxLCA0LCA2LCAyMzMsIAorICAgIDEwNCwgMjYsIDEsIDQsIDYsIDIyNSwgMTExLCAyNiwgMSwgNCwgNiwgMjIzLCA0MCwgMjYsIDEsIDQsIDYsIDIyNCwgMTY0LCAKKyAgICAzMywgMSwgNCwgNiwgMjQ1LCAxODIsIDU4LCAxLCA2LCA2MSwgNTgsIDEsIDYsIDI1NCwgMjUyLCA1OCwgMSwgNiwgMjUzLCAKKyAgICAxNjYsIDU4LCAxLCA2LCAyNTIsIDE0MiwgMjUzLCAxNjYsIDU4LCAxLCA2LCAyNDksIDY4LCA1OCwgMSwgNiwgNzYsIDU4LCAKKyAgICAxLCA2LCAyMjMsIDUyLCA3NiwgNTgsIDEsIDYsIDI0MywgMjA5LCA1OCwgMSwgNiwgMjQyLCA2NywgNTgsIDEsIDYsIDc0LCAKKyAgICA1OCwgMSwgNiwgMjM1LCAxNTAsIDU4LCAxLCA2LCAyMzUsIDI5LCA1OCwgMSwgNiwgMTU2LCA1OCwgMSwgNiwgMTk0LCA1OCwgCisgICAgMSwgNiwgMjMwLCAzMCwgNTgsIDEsIDYsIDIyMywgNTIsIDIzMCwgMzAsIDU4LCAxLCA2LCA3OCwgNTgsIDEsIDYsIDIyNiwgCisgICAgMTM4LCA1OCwgMSwgNiwgMjI2LCAxMDksIDU4LCAxLCA2LCAxNTMsIDU4LCAxLCA2LCAyMTcsIDE1MywgNTgsIDEsIDYsIDY5LCAKKyAgICA1OCwgMSwgNiwgMjEyLCA5OCwgNTgsIDEsIDQsIDYxLCA1OCwgMSwgNCwgMjE1LCA5NCwgNjEsIDU4LCAxLCA0LCAyNTQsIAorICAgIDE1MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMjUyLCA1OCwgMSwgNCwgMjUzLCAxNjYsIDU4LCAxLCA0LCAyNDksIDY4LCAKKyAgICA1OCwgMSwgNCwgNzYsIDU4LCAxLCA0LCAyMjEsIDE5NywgNTgsIDEsIDQsIDIwNCwgNzYsIDU4LCAxLCA0LCAyMTUsIDk0LCAKKyAgICAyMDQsIDc2LCA1OCwgMSwgNCwgMjQzLCAyMDksIDU4LCAxLCA0LCAyMTUsIDk0LCA3NCwgNTgsIDEsIDQsIDIzNSwgMjksIAorICAgIDU4LCAxLCA0LCAxOTQsIDU4LCAxLCA0LCAyNDUsIDE0NiwgNTgsIDEsIDQsIDc4LCA1OCwgMSwgNCwgMjA0LCA3OCwgNTgsIAorICAgIDEsIDQsIDIxNiwgMTUsIDE2MywgNzgsIDU4LCAxLCA0LCAyNTEsIDE4MywgMTYzLCA3OCwgNTgsIDEsIDQsIDIyNiwgMTA5LCAKKyAgICA1OCwgMSwgNCwgMjE3LCAxNTMsIDU4LCAxLCA0LCA2OSwgNTgsIDEsIDQsIDIxOSwgMTg5LCA2OSwgNTgsIDEsIDQsIDIxNSwgCisgICAgOTQsIDE5NCwgNTgsIDEsIDQsIDIxNCwgMTA1LCA1OCwgMSwgNCwgMjU0LCAyMDUsIDU4LCAxLCA0LCAyNTIsIDM0LCA1OCwgCisgICAgMSwgNCwgMjYsIDI0MywgMTE0LCA1OCwgMSwgNCwgMjQ4LCA2MiwgNTgsIDEsIDQsIDI2LCAyMjUsIDEzNiwgNTgsIDEsIDQsIAorICAgIDI1MCwgMTE4LCA3LCAyMTgsIDY2LCA0LCAxLCA3NCwgNywgMjE4LCA2NiwgNCwgMSwgMTUzLCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICA2OSwgNywgMjE4LCA2NiwgNCwgMSwgMjE0LCAxMDUsIDI2LCAyMTgsIDY2LCA0LCAxLCAyNTIsIDM0LCAyNiwgMjE4LCA2NiwgCisgICAgNCwgMSwgMjQzLCAxMTQsIDI2LCAyMTgsIDY2LCA0LCAxLCAyMjMsIDQwLCAyNiwgMjE4LCA2NiwgNCwgMSwgMjI1LCAxMzYsIAorICAgIDI2LCAyMTgsIDY2LCA0LCAxLCAyNTAsIDExOCwgNywgNCwgMSwgMjE0LCAyMTQsIDcsIDQsIDEsIDU3LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyNDQsIDk2LCAyMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjIyLCA5NCwgCisgICAgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxMCwgMTYwLCAKKyAgICAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDMsIDIwOSwgNTgsIDEsIDMzLCAyNDUsIDE1OCwgNywgNCwgCisgICAgMSwgMjM1LCAyMjAsIDI0MywgMjA5LCA3LCA0LCAxLCAyMTYsIDIxMiwgMiwgMjE4LCAxMDksIDcsIDQsIDYsIDEsIDI0MCwgCisgICAgMTYxLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxOTMsIDIsIDkxLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgOTEsIDcsIDQsIDYsIAorICAgIDEsIDEwNCwgMiwgOTEsIDcsIDQsIDEsIDIxNCwgMTU4LCAyLCA5MSwgNywgNCwgMSwgNTcsIDIsIDIyNiwgNzAsIDEwMywgNywgCisgICAgNCwgMSwgMjQ5LCA2OSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIAorICAgIDEsIDI0MywgMjEwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjMzLCAxNTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjMyLCA1NSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMzAsIDMxLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIyMywgMjI3LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjQ1LCA4NCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMTEsIDE3OSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjU0LCAxNTIsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ5LCAKKyAgICA2OSwgMiwgMjQxLCA1OSwgMjIsIDIxNywgNzgsIDcsIDQsIDEsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyMDQsIAorICAgIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyMjMsIDUyLCAyMDQsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMjEsIDE5OCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMDQsIDE0NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDUsIDg0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIAorICAgIDEwNCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMTUsIAorICAgIDk0LCAyNTQsIDE1MSwgNTgsIDEsIDQsIDI1MSwgNzQsIDU4LCAxLCA0LCAyNTEsIDc1LCAyLCAyNDksIDEwOCwgNTgsIDEsIAorICAgIDQsIDI0NSwgNjcsIDU4LCAxLCA0LCAyMjMsIDUyLCAyMDQsIDc2LCA1OCwgMSwgNCwgMjQ1LCAxNCwgNTgsIDEsIDQsIDI0NywgCisgICAgMTI3LCAyMzUsIDE1MSwgMiwgOTEsIDU4LCAxLCA0LCAxMTksIDI0MywgMjA5LCA1OCwgMSwgNCwgMjE1LCA5NCwgMjQyLCAKKyAgICA2NywgNTgsIDEsIDQsIDI0MCwgMTYxLCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTkyLCA1OCwgMSwgNCwgNiwgNzQsIDU4LCAKKyAgICAxLCA0LCA2LCAyNDAsIDE2MSwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE1MSwgMiwgMjQ5LCAxMzUsIDU4LCAxLCA0LCAyMzMsIAorICAgIDE1NSwgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjMzLCAxNTUsIDIsIDIyNiwgNzAsIDEwMywgNTgsIDEsIDQsIDYsIAorICAgIDE1NiwgNTgsIDEsIDQsIDIzMiwgNTUsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDIzMiwgNTUsIDIsIDIwMCwgMjMzLCAKKyAgICA0MiwgNTgsIDEsIDQsIDIzMCwgMzEsIDIsIDQzLCAxMDMsIDU4LCAxLCA0LCAyMzAsIDMxLCAyLCAyMjMsIDU4LCAxMDMsIAorICAgIDU4LCAxLCA0LCA2LCAyMzAsIDMwLCA1OCwgMSwgNCwgMjUyLCAxNDIsIDc4LCA1OCwgMSwgNCwgMjI1LCAxMzYsIDU4LCAxLCAKKyAgICA0LCAyMjIsIDk0LCAyLCAxMDMsIDU4LCAxLCA0LCAyNDUsIDgzLCA1OCwgMSwgNCwgMjE3LCAxNTQsIDIsIDIyNiwgNzAsIAorICAgIDEwMywgNTgsIDEsIDQsIDEwNCwgMTMwLCA1OCwgMSwgNCwgMjE0LCAxNTcsIDU4LCAxLCA0LCA2LCA2OSwgNTgsIDEsIDQsIAorICAgIDIxNCwgMTA2LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDIxMCwgMTU5LCA1OCwgMSwgCisgICAgNCwgMjEwLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIxMCwgMTYwLCAyLCAyNDksIDEwOCwgNTgsIDEsIDQsIAorICAgIDI0NSwgMTYsIDU4LCAxLCA0LCAyMTYsIDE4MCwgMzgsIDI0NiwgMTI2LCAyNDIsIDE0NCwgMjU1LCAyMywgMzgsIDI0NiwgCisgICAgMTI2LCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjE5LCA3MSwgNTEsIDM4LCAyMTgsIDcsIDc5LCAzOCwgMjMxLCAyMzYsIDM4LCAKKyAgICAyNDIsIDE0MSwgMzgsIDIzMSwgMjM0LCAzOCwgMjU1LCAxMCwgMzgsIDI0MiwgMTQyLCAzOCwgMjU1LCAxMSwgMzgsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCA1MSwgMzgsIDI1MSwgMTUzLCAzOCwgMjMxLCAyMzUsIDM4LCA1MiwgMjUwLCAzOSwgNDgsIDM4LCAKKyAgICAyMjYsIDIyOSwgNDgsIDM4LCAyMTAsIDM1LCA1MSwgMzgsIDIzNSwgMTc5LCA1MSwgMzgsIDIxNCwgMTUxLCA0OCwgMzgsIAorICAgIDIxNCwgMTM0LCA0OCwgMzgsIDcsIDQsIDEsIDI0NCwgNzEsIDIwNCwgMTE2LCA0OCwgMzgsIDcsIDQsIDEsIDI1NCwgMjUyLCAKKyAgICAzOCwgNywgNCwgMSwgMjU0LCA4MSwgMzgsIDcsIDQsIDEsIDI1MywgMTg0LCAzOCwgNywgNCwgMSwgMjUxLCA3NSwgMjUwLCAKKyAgICAxOTEsIDM4LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgMzgsIDcsIDQsIDEsIDI0NSwgNjcsIDM4LCA3LCA0LCAxLCAKKyAgICAyNDMsIDIwOSwgMzgsIDcsIDEsIDQsIDYsIDI0MywgMjA5LCAzOCwgNywgNCwgMSwgMjM1LCAyOSwgMzgsIDcsIDQsIDEsIAorICAgIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE5NCwgMzgsIDcsIDQsIDEsIDIzMCwgMzAsIDM4LCAKKyAgICA3LCAxLCA0LCA2LCAyMzAsIDMwLCAzOCwgNywgMSwgNCwgNiwgMTUzLCAzOCwgNywgNCwgMSwgMjIzLCAyMjcsIDIyMiwgCisgICAgMTg4LCAzOCwgNywgNCwgMSwgMjIyLCA5MywgMzgsIDcsIDQsIDEsIDIwMCwgMjIyLCA5MywgMzgsIDcsIDQsIDEsIDIxMCwgCisgICAgMTU5LCAzOCwgNTIsIDIzNSwgMjAwLCAyNTEsIDE1NSwgNTEsIDM4LCAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCA1MSwgMzgsIAorICAgIDQzLCAyNTQsIDIsIDQ4LCAzOCwgNDQsIDI1NCwgMiwgMjIsIDEyNCwgMjU0LCAyLCA1MSwgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyMjIsIDIzNywgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDUxLCA3LCA2LCAxLCA1NywgMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCA1NywgMiwgNTksIDQ4LCA3LCA2LCAxLCA1NywgMiwgNTksIDUxLCA3LCA0LCAxLCA1NywgMiwgNTksIDUxLCA3LCAKKyAgICA2LCAxLCA1NywgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCA1NywgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyNTEsIAorICAgIDc1LCAyLCAyNTAsIDE5MiwgMjIsIDE0MiwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTIsIDIyLCAxNDIsIDcsIDYsIAorICAgIDEsIDI0OSwgNjksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDksIDY5LCAyLCAKKyAgICA1OSwgNTEsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjMyLCAyMjAsIDUxLCAKKyAgICA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMTkxLCA3LCA0LCAKKyAgICAxLCAyNDksIDY5LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDI0OSwgCisgICAgNjksIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMTYwLCAKKyAgICAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAyMTYsIDkwLCAKKyAgICA1MSwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE5MiwgMjIsIDI1MSwgMTU0LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMTkyLCAKKyAgICAyMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0NSwgMTUsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ1LCAxNSwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyMzEsIDIzNywgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDU5LCAKKyAgICA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNDgsIDksIDcsIDQsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIAorICAgIDI1MCwgMTkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNTEsIDE1NSwgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MSwgCisgICAgMTU1LCA1MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjE2LCAKKyAgICA5MCwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgCisgICAgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNiwgMSwgMjM1LCAzMCwgMiwgMTQyLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAxNDIsIDcsIAorICAgIDYsIDEsIDIzNSwgMzAsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzUsIDMwLCAKKyAgICAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDU5LCAyNTIsIDUxLCAKKyAgICAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgCisgICAgMjMyLCA1NSwgMiwgMTQyLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxNDIsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDU5LCA0OCwgCisgICAgNywgNCwgMSwgMjMyLCA1NSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMzIsIDU1LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMiwgCisgICAgNTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIAorICAgIDMxLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjMwLCAzMSwgCisgICAgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDIxNiwgCisgICAgOTAsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAKKyAgICAyMiwgMjQ4LCA5LCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyNDgsIDksIDcsIDYsIDEsIDE0NCwgMiwgMjMxLCAKKyAgICAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIAorICAgIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA2LCAxLCAyMjYsIAorICAgIDExMCwgMiwgMTQyLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMTQyLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCAyMjYsIDExMCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjMsIAorICAgIDIyNywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgNTksIAorICAgIDUxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMjIzLCAyMjcsIAorICAgIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCAKKyAgICA5NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDU5LCA1MSwgCisgICAgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjU1LCAxMiwgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjU1LCAxMiwgCisgICAgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDMsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTQsIAorICAgIDIsIDI1MCwgMjQzLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgMjIyLCA5NCwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDIxNywgMTU0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNywgCisgICAgMTU0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAKKyAgICAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIAorICAgIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDUxLCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDUxLCA3LCA2LCAxLCAxMDQsIAorICAgIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgOTAsIAorICAgIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA5MCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgCisgICAgMjIsIDI0OCwgOSwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDI0OCwgOSwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDE4NCwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxMiwgOTksIDIsIAorICAgIDI0MiwgMTQzLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNiwgMSwgCisgICAgMjEyLCA5OSwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCAKKyAgICA0OCwgNywgNCwgMSwgMjEyLCA5OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAorICAgIDIxMiwgOTksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxNzksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxNzksIDIsIAorICAgIDU5LCA0OCwgNywgNiwgMSwgMjExLCAxNzksIDIsIDI0OCwgOSwgNywgNCwgMSwgMjExLCAxNzksIDIsIDI0OCwgOSwgNywgNiwgCisgICAgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAxNjAsIAorICAgIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCAKKyAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAKKyAgICAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMiwgOTksIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMjExLCAKKyAgICAxMTgsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMTE2LCAyLCA0NCwgMTYzLCAyMjIsIDIzNiwgNywgNCwgMSwgMjAwLCAKKyAgICAyMjIsIDk0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIwMCwgMjIyLCA5NCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjAwLCAKKyAgICAyMjIsIDk0LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAyMjAsIDc4LCAyMjIsIDkzLCA3LCA0LCAxLCAyNDgsIDYyLCA3LCA2LCAKKyAgICAxLCAxMTYsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDExNiwgMiwgMjQxLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDExNiwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgCisgICAgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAKKyAgICAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAKKyAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyNTEsIDE1NSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMjQxLCA1OSwgNDgsIDcsIAorICAgIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxODQsIDcsIAorICAgIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCA1OSwgCiAgICAgNTEsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTYwLCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTYwLCAyLCAxODIsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgCi0gICAgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAKLSAgICAzMSwgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgCi0gICAgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0MSwgNTIsIDQ4LCA3LCAKLSAgICA0LCAxLCAyNDAsIDE1NCwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDI0MCwgMTU0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgCi0gICAgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgCi0gICAgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCA1OSwgCi0gICAgNTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgCi0gICAgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNCwgCi0gICAgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDEwNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMDQsIAotICAgIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDQsIAotICAgIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDEzNiwgNywgNCwgCi0gICAgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTEsIAotICAgIDExOCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAKLSAgICAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE4MiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDE4MiwgNywgNiwgCi0gICAgMSwgMjMwLCAyMjMsIDIzMiwgMTg1LCA3LCA0LCAxLCAyMzAsIDIyMywgMjMyLCAxODUsIDcsIDYsIDEsIDIzMCwgMjIzLCAKLSAgICAyMTQsIDEwNSwgNywgNCwgMSwgMjMwLCAyMjMsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjMsIDcsIAotICAgIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyMywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCAKLSAgICA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIAotICAgIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgCi0gICAgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTUzLCAyNiwgNCwgCi0gICAgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIAotICAgIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU0LCAyNiwgCi0gICAgNiwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxMywgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgCi0gICAgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIAotICAgIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgCi0gICAgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIAotICAgIDE1NCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIAotICAgIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAKLSAgICAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAKLSAgICAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIAotICAgIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAKLSAgICAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgCi0gICAgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMjUsIDE3NSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDAsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIAotICAgIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCAKLSAgICA0LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIAotICAgIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjI2LCAyMDAsIAotICAgIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIAotICAgIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKLSAgICAyMTQsIDE1OCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIAotICAgIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1MywgMjYsIDYsIAotICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgCi0gICAgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyMjQsIDE1NCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAKLSAgICAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAKLSAgICAxMDEsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIAotICAgIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyMjYsIDExMCwgMjYsIAotICAgIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNTQsIAotICAgIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIAotICAgIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAKLSAgICAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIAotICAgIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAKLSAgICAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIAotICAgIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAKLSAgICAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIAotICAgIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIAotICAgIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgCi0gICAgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAKLSAgICAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgCi0gICAgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgCi0gICAgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIAotICAgIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyMzEsIDIzMiwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCAKLSAgICA0LCAxLCAyNTQsIDE0NCwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI2LCAxMTEsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjUsIDE3NiwgCi0gICAgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIAotICAgIDIzMSwgMjMyLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNjcsIDI2LCAyMzQsIDIsIDI2LCAyMjQsIDE2NywgMjYsIDIyNCwgCi0gICAgMTU0LCAyNiwgMjI1LCAxNzUsIDI2LCAyNDcsIDI1MiwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAKLSAgICAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNDUsIAotICAgIDY0LCAyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKLSAgICAyNDUsIDEwMSwgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE2NywgMjYsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgCi0gICAgMjYsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAKLSAgICAxODYsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIzMSwgMjMyLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIAotICAgIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIyNiwgMTEwLCAyNiwgCi0gICAgNCwgMSwgMjM1LCAxODYsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUyLCAyMiwgMjI1LCAKLSAgICAxNzUsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjMxLCAyMzIsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjYsIDExMCwgMjYsIDI0OCwgCi0gICAgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIzMSwgMjMyLCAyNiwgNCwgCi0gICAgMSwgMjE0LCAxNTgsIDIsIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgCi0gICAgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjIzLCAzOCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMjMsIDM4LCAyLCAyNDgsIAotICAgIDE1MywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgCi0gICAgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIAotICAgIDIzMSwgMjMyLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyMjMsIDM4LCAyLCAyNDgsIDE1MywgMjYsIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDI0NywgCi0gICAgMjUyLCAyMiwgMjI2LCAxMTAsIDI2LCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjYsIDExMSwgCi0gICAgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTY3LCAyNiwgMjI2LCAxMTAsIDI2LCAyNDgsIDE1MywgCi0gICAgMjQ1LCAxNTEsIDIyNCwgMjcsIDI0NSwgMTYwLCAyMjQsIDI3LCAyNDUsIDE1MSwgMjE5LCAxOCwgMjQ1LCAxNjAsIDIxOSwgCi0gICAgMTgsIDIxNiwgMTQxLCAyMTksIDE4LCAyNDQsIDksIDIxOSwgMTgsIDIxOSwgMTIzLCAyMTksIDE4LCAyNDQsIDExMiwgMjE5LCAKLSAgICAxOCwgMjI0LCAxNDEsIDIxOSwgMTgsIDIxNiwgMTcwLCAyMTksIDE4LCAyNDIsIDM1LCAyMTksIDE4LCAyMTAsIDg3LCAyMTEsIAotICAgIDI0NSwgMjE5LCAxOCwgMjEwLCA4NywgMjExLCAyNDUsIDIyOCwgNjcsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMzUsIDYzLCAKLSAgICAyMzMsIDM4LCA3OCwgMjIyLCAyNDMsIDc4LCAyNDAsIDE2OCwgMjI4LCA2OCwgMjQwLCAxNjgsIDI0NCwgMTEyLCAyNDgsIAotICAgIDE1NiwgMjQ1LCAxNTEsIDI0OCwgMTU2LCAyNDUsIDE2MCwgMjQ4LCAxNTYsIDIwMywgMTMwLCA1MiwgNjcsIDIzMiwgMjEzLCAKLSAgICA1MiwgMTIxLCAyMzIsIDIxMywgNDMsIDIxOSwgMTU1LCAyMjMsIDI1NCwgNzgsIDQ0LCAyMTksIDE1NSwgMjIzLCAyNTQsIAotICAgIDc4LCAyMTksIDE1NSwgMjMyLCAxMDksIDIyMywgMjU0LCA3OCwgMjE5LCAxNTUsIDI0MSwgMTYzLCAyMjMsIDI1NCwgNzgsIAotICAgIDQzLCA1MiwgMjIzLCAyNTQsIDc4LCA0NCwgNTIsIDIyMywgMjU0LCA3OCwgNTIsIDIzMiwgMTA5LCAyMjMsIDI1NCwgNzgsIAotICAgIDUyLCAyNDEsIDE2MywgMjIzLCAyNTQsIDc4LCAyNDgsIDIwNSwgNTIsIDI0OCwgMjA1LCAyNTEsIDExMywgMjE1LCAyMjIsIAotICAgIDI1MSwgMTEzLCAxMjMsIDU5LCAyMzMsIDU2LCAxMTMsIDU5LCAyMzMsIDU2LCAyMDMsIDI0NSwgMTYzLCAyNDAsIDE2NiwgCi0gICAgMjI1LCAxMCwgMjMyLCAyMTQsIDIyMCwgMTM3LCAyMjYsIDE1LCAyMjAsIDEzNywgMjMzLCAzOCwgMjQ1LCAxNTgsIDIyMiwgCi0gICAgMjQzLCAyNDUsIDE1OCwgMjI0LCAyNDYsIDI0NywgMTk2LCAyNDQsIDE5LCAyMzMsIDM4LCAyMjYsIDExNywgMjIyLCAyNDMsIAotICAgIDIyNiwgMTE3LCAyMjksIDE5NCwgMjI4LCA3MywgMjE5LCAxOCwgMjI1LCAxODMsIDIzMCwgMTkzLCA1MCwgMjI1LCAxODMsIAotICAgIDIxNiwgMjQ4LCAyMTYsIDE0OCwgNTAsIDIyNCwgMTkwLCA1MiwgMjI0LCAxOTAsIDIxNSwgMjExLCAyMjQsIDE5MCwgMjIzLCAKLSAgICA0OSwgMjI0LCAxOTAsIDIyMywgNDksIDUyLCAyMjQsIDE5MCwgMjIzLCA0OSwgMjE1LCAyMTEsIDIyNCwgMTkwLCAyNTAsIAotICAgIDIzOCwgMjE5LCAxNTUsIDIzMywgNDIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgNzgsIDIxOSwgMTU1LCAyMjIsIDI0NywgMjU0LCAKLSAgICAxMTAsIDIyMywgMjU0LCA3OCwgMjIzLCAxMDcsIDc4LCA1MiwgMjQ1LCAzMSwgNzgsIDIzNSwgMjAxLCAyMjYsIDExOSwgCi0gICAgMjE0LCAxODAsIDEzNSwgMjE2LCAxMTEsIDI1MCwgMjM5LCAyMzUsIDIxNiwgMjI1LCAxMCwgMjUzLCAyMTQsIDI0MCwgMTY5LCAKLSAgICAyNTEsIDExMywgMjQ0LCAyLCAyMTksIDk1LCA0MywgNDIsIDI1MSwgMTU4LCAyLCAyMjQsIDcsIDQ0LCA0MiwgMjUxLCAxNTgsIAotICAgIDIsIDIyNCwgNywgNTIsIDIyNCwgMTMsIDc4LCAyMjQsIDEzLCAyNDUsIDMxLCA3OCwgMjQ1LCAzMSwgMjI0LCAxMywgNzgsIAotICAgIDIxNiwgNzAsIDUsIDI0NSwgNjUsIDIyMywgNDksIDIyNSwgNjgsIDUwLCA4NSwgMTQwLCAyNTEsIDExMywgODUsIDk3LCAKLSAgICAyNTEsIDExMywgMTIxLCAyNTMsIDIxNiwgMjIzLCA0OSwgMjIwLCAxNTAsIDI1MCwgMSwgMjE0LCAxNjMsIDExMywgMjUzLCAKLSAgICAyMTUsIDI1NCwgMTU4LCAyMTMsIDE4OCwgMjQ5LCAyMTcsIDIzMCwgMTgyLCA1MCwgMjE3LCAyMzQsIDI0OCwgMTU2LCAyMzUsIAotICAgIDE5MywgMjE0LCAxODAsIDI0NCwgNTIsIDIyNCwgMTQxLCA3OCwgMTM0LCA1OSwgMjI0LCAxNDAsIDIyNCwgMjQsIDIyNCwgCi0gICAgMTkwLCAyNDQsIDExLCA1OSwgMjI0LCAxNDAsIDI0NCwgODEsIDU5LCAyMjQsIDE0MCwgMTEzLCA1OSwgMjI0LCAxNDAsIAotICAgIDI0NCwgMTEsIDU5LCA3OCwgMjQ2LCAxMTgsIDI0OSwgMTMwLCAyMTUsIDIyMSwgNjcsIDI0NCwgMTEsIDI0NywgMTE4LCAKLSAgICAyMzEsIDgyLCAxMSwgMjE5LCAxOCwgMjExLCAyMDksIDIzNSwgNjMsIDI0MywgMjI3LCAyNTQsIDUyLCAyMzUsIDE5MSwgCi0gICAgMjE2LCA4NSwgMjM1LCAxOTEsIDIyMCwgMTM3LCAyMzUsIDE5MSwgMjI1LCAyMiwgMjM1LCAyMjgsIDIxNywgMTgyLCAyMTcsIAotICAgIDI1MSwgMjU1LCA1LCAyMTcsIDE4MiwgMjE3LCAyNTEsIDIzNSwgMjI4LCAxMCwgMjQ0LCAyMCwgMjIwLCA4MCwgMjU1LCA1LCAKLSAgICAxMCwgMjQ0LCAyMCwgMjIwLCA4MCwgMjI5LCAxODksIDIxLCAyMjAsIDgxLCAyMjgsIDY5LCAyMSwgMjIwLCA4MSwgMjE4LCAKLSAgICAyMywgMjEwLCA4NiwgMjE4LCAyMywgNywgNCwgMSwgNzMsIDIxOCwgMjMsIDE2MSwgMjE4LCAyMywgMTg5LCAyMTgsIDIzLCAKLSAgICAxOTQsIDIxOCwgMjMsIDE5OCwgMjE4LCAyMywgMTk1LCAyMTgsIDIzLCAyMDAsIDIxOCwgMjMsIDk2LCA1MCwgMjE4LCAyMywgCi0gICAgMjMwLCAxODEsIDIxOCwgMjMsIDI0NSwgOTgsIDUwLCAyMTgsIDIzLCA0MywgMjI2LCAzLCAyMTgsIDIzLCA0NCwgMjI2LCAzLCAKLSAgICAyMTgsIDIzLCA3LCA0LCAxLCAyMzAsIDI1LCAyMTgsIDY1LCAyMTAsIDg2LCAyMTgsIDY1LCAxMTAsIDIxOCwgNjUsIDEwNSwgCi0gICAgMjE4LCA2NSwgMTU4LCAyMTgsIDY1LCAxNjEsIDIxOCwgNjUsIDE4OSwgMjE4LCA2NSwgMTk0LCAyMTgsIDY1LCAxOTgsIAotICAgIDIxOCwgNjUsIDE5NSwgMjE4LCA2NSwgMjAwLCAyMTgsIDY1LCA5NiwgNTAsIDIxOCwgNjUsIDIzMCwgMTgxLCAyMTgsIDY1LCAKLSAgICAyNDUsIDk4LCA1MCwgMjE4LCA2NSwgNDMsIDIyNiwgMywgMjE4LCA2NSwgNDQsIDIyNiwgMywgNywgMjE4LCA2NSwgNCwgMSwgCi0gICAgNjEsIDcsIDIxOCwgNjUsIDQsIDEsIDc1LCA3LCAyMTgsIDY1LCA0LCAxLCA3NiwgNywgMjE4LCA2NSwgNCwgMSwgMjExLCAKLSAgICAxNzgsIDcsIDIxOCwgNjUsIDQsIDEsIDIyMSwgMTk1LCA3LCAyMTgsIDY1LCA0LCAxLCAyNDIsIDYwLCA3LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMzUsIDIzLCA3LCAyMTgsIDY1LCA0LCAxLCAxNTYsIDcsIDIxOCwgNjUsIDQsIDEsIDE5MywgNywgMjE4LCA2NSwgCi0gICAgNCwgMSwgMjMwLCAyNSwgNywgMjE4LCA2NSwgNCwgMSwgMjI2LCAxMDUsIDcsIDIxOCwgNjUsIDQsIDEsIDIyMiwgOTEsIDcsIAotICAgIDIxOCwgNjUsIDQsIDEsIDIxNywgMTUyLCAyNDUsIDQ2LCA1MCwgMjQ5LCAyMjcsIDUwLCAyNDksIDExNywgNTAsIDI0MywgCi0gICAgMjUxLCAyNDMsIDI1NCwgNTAsIDIzMiwgMTk4LCA1MCwgMjMwLCAxOTQsIDUwLCAyMjksIDIxMCwgNTAsIDIyNSwgMTYyLCAKLSAgICA1MCwgMjIyLCAxMTgsIDUwLCAyMTEsIDIxNywgNTAsIDE2NiwgMjIwLCA0OSwgNTAsIDI0NywgMTI3LCA1MCwgMjQ1LCA0NywgCi0gICAgNTAsIDIzNCwgNzYsIDUwLCAyMTUsIDExMiwgNTAsIDI0NiwgMTAxLCA1MCwgMjQzLCA0MCwgMjI1LCAxOTMsIDUwLCAyMjUsIAotICAgIDE2MCwgNTAsIDI0MiwgMTA5LCA1MCwgMjUzLCAxODIsIDUwLCAyNDAsIDIyOCwgNTAsIDI1MCwgMTg1LCA1MCwgMjMyLCAKLSAgICAxOTEsIDIxNiwgMywgNTAsIDIxOSwgMCwgNTAsIDIxNiwgMjQ1LCA1MCwgMjM1LCAyNDEsIDIyMiwgMTE4LCA1MCwgMzgsIAotICAgIDQzLCAyNDEsIDI1NSwgNDgsIDM4LCA0NCwgMjQxLCAyNTUsIDQ4LCAzOCwgMTk5LCA2NywgMjMyLCAyMTQsIDIyNiwgMTIwLCAKLSAgICAzOCwgMjE5LCAyNTEsIDY3LCAyMzIsIDIxNCwgMjI2LCAxMjAsIDM4LCAyNTQsIDg4LCA4MCwgNDgsIDM4LCAyNTAsIDIsIAotICAgIDgwLCA0OCwgMzgsIDQzLCA4MCwgNDgsIDM4LCA0NCwgODAsIDQ4LCAzOCwgMjIyLCAyMzQsIDIyNiwgMTIwLCAzOCwgMjUwLCAKLSAgICAyLCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAyNTQsIDg4LCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAxMzQsIDE3MCwgNDgsIAotICAgIDM4LCAyNDQsIDExLCAxNzAsIDQ4LCAzOCwgMjQ1LCAxNDYsIDI1MCwgMzUsIDM4LCAyNDUsIDE0NiwgMjE4LCAyMzQsIDM4LCAKLSAgICAyNDUsIDE0NiwgMjQ3LCAyNDgsIDM4LCAyNDUsIDE0NiwgMjUwLCAzNiwgMjUyLCAxODAsIDM4LCA0MywgNDQsIDgwLCA0OCwgCi0gICAgMzgsIDI0NSwgMTQ2LCAyMjEsIDE4OCwgMzgsIDI0NSwgMTQ2LCAyMzQsIDEzNSwgMzgsIDI0NSwgMTQ2LCAyMTQsIDE1NSwgCi0gICAgMjI1LCA3LCAyMTUsIDIyNSwgMzgsIDIyMywgNTAsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgNTIsIDY3LCAyMTgsIDEwMywgCi0gICAgMjI2LCAxMjAsIDM4LCAyNTQsIDk4LCA4NywgMzgsIDIxNSwgMjExLCAyMTQsIDE4MiwgMzgsIDIxMSwgMjQ3LCAyNTEsIAotICAgIDE0MCwgNDgsIDM4LCAxNDAsIDgwLCAyMjYsIDEyMCwgMzgsIDE5OSwgNTIsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgOTcsIAotICAgIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDMsIDM4LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAKLSAgICAxMDMsIDM4LCA0MywgODAsIDUxLCAzOCwgNDQsIDgwLCA1MSwgMzgsIDI1MywgMjE3LCA0OCwgMjU1LCAxMSwgMjI2LCAyMzEsIAotICAgIDI1NCwgMjUxLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjE4LCA3NCwgMTM5LCA2LCAyNTEsIDY2LCAyNDgsIDcxLCAyNTAsIDE3OCwgCi0gICAgMjUwLCAxNzUsIDIzMiwgMjE0LCA4NywgMjUwLCAyNDAsIDIyNiwgMjMxLCAyNTEsIDI2LCAyMTQsIDE4OSwgMjQ1LCA0OCwgCi0gICAgMjQ5LCAxOTEsIDIyMSwgMTg1LCAyNDgsIDcxLCAyNDQsIDE3OSwgMTE5LCA0LCAyNDMsIDIwMiwgMTE5LCA2LCAyNDIsIDYwLCAKLSAgICAyNTEsIDIxOSwgNiwgMjQyLCA2MCwgMTM5LCA2LCAyNDIsIDYwLCAyMjUsIDM3LCAyNDksIDE5MSwgMjI1LCAzNywgMjQ5LCAKLSAgICAxOTIsIDExNywgMTEzLCAyMjUsIDEwOCwgMTE5LCA2LCA3MywgMjUxLCAyMTksIDYsIDczLCAxMTksIDYsIDE1NiwgMTE5LCAKLSAgICA0LCAxNTYsIDIzMywgMTQ5LCA1NywgMjUyLCAxNDEsIDg3LCAxMzksIDYsIDIzMCwgMjUsIDIyNywgMTk2LCA1MCwgMjE5LCAKLSAgICAzMSwgMjIzLCAxMTksIDI0OSwgMTYyLCAxMTksIDYsIDIyNiwgMTA1LCAxMzksIDYsIDIyNiwgMTA1LCAxMzksIDYsIDIyNCwgCi0gICAgOTYsIDExOSwgNiwgMTUzLCAyNTEsIDIxOSwgNiwgMTUzLCAxMzksIDYsIDE1MywgMjI0LCAxOTYsIDIxNywgNzEsIDIyMywgCi0gICAgNjIsIDIyMCwgMTMyLCA3OCwgMjE3LCAxLCA1MCwgMjE1LCAyNTMsIDE2NCwgNTAsIDIxMywgMjQwLCAxMzksIDYsIDIxMCwgCi0gICAgMTU5LCAyMjYsIDEzMywgNTAsIDIyNiwgMjIxLCA1MCwgMjM1LCAxOTMsIDIyNiwgMjIxLCA1MCwgMjUxLCAyMTksIDYsIAotICAgIDIxMCwgMTU5LCAyMTUsIDk0LCAyNiwgNCwgMSwgMjM1LCAxODUsIDIzNCwgMTczLCA1MCwgMjU0LCAxMDcsIDUwLCAxMTksIAotICAgIDYsIDI1MywgMTU4LCAyNTEsIDIxOSwgNiwgMjUxLCA2NiwgMjQ1LCA2OCwgODcsIDExOSwgNCwgNzUsIDExOSwgNiwgNzUsIAotICAgIDExOSwgNiwgMjQ1LCA2LCAyMTUsIDk0LCA2LCAyNDUsIDYsIDExOSwgNiwgMTkzLCAxMTksIDQsIDc2LCAxMTIsIDg3LCAKLSAgICAyNTIsIDI5LCA4NywgMjQyLCAyMDIsIDg3LCAyNDgsIDE5MCwgODcsIDIzNSwgMjMyLCAyMTksIDI5LCAyMjIsIDE4NywgNiwgCi0gICAgMjI0LCA5NiwgMjQ0LCAxODIsIDUwLCAxMzksIDQsIDIyNSwgMTA4LCAxMzksIDQsIDI0MywgMTA3LCAxMzksIDYsIDI0MywgCi0gICAgMTA3LCAxMzksIDYsIDIyNSwgMTA4LCAxMzksIDIzMCwgMjQsIDIxOCwgNDAsIDIxNSwgOTQsIDM1LCA2LCAyNDMsIDIwMiwgCi0gICAgMjE1LCA5NCwgMzUsIDYsIDE1NiwgMjIzLCA0OSwgMzUsIDYsIDE1NiwgMjE1LCA5NCwgMzUsIDYsIDIxMSwgMTE3LCAxMzksIAotICAgIDMyLCA2LCAyNDksIDYwLCAxMzksIDMyLCA0LCAyNDksIDYwLCAxMzksIDMyLCA0LCA3NSwgMTM5LCAzMiwgNCwgNzMsIDEzOSwgCi0gICAgMzIsIDQsIDIzNSwgMTQ0LCAyMjQsIDE3MCwgMjMyLCAyMTMsIDIxNSwgOTQsIDI1NCwgMTI2LCAyMjUsIDE4MywgNTAsIAotICAgIDI1NCwgMTgwLCAyMTUsIDk0LCA0LCAyNDUsIDYsIDE2LCAzMSwgMjIxLCAyNTIsIDIxOSwgMjksIDIxMiwgMTE0LCAyNDQsIAotICAgIDIsIDEyMywgMjIwLCAxMTgsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjI4LCAxOTQsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgCi0gICAgMjE2LCAyNDEsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjE2LCAxNjgsIDIxMiwgMTE0LCAyNDQsIDIsIDExMywgMjE2LCAKLSAgICAxNjYsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjQ0LCAxMTcsIDIxMiwgMTE0LCAyNDQsIDIsIDExMywgMjQ0LCAxMTYsIAotICAgIDIxMiwgMTE0LCAyNDQsIDIsIDEzNCwgMjQ0LCAxMTYsIDIxMiwgMTE0LCAyNDQsIDIsIDI0NCwgMTEsIDI0NCwgMTE2LCAKLSAgICAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDIxOSwgMTE1LCAyMTIsIDExNCwgMjQ0LCAyLCAyNDQsIDgxLCAyMTksIDExMywgCi0gICAgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMjEyLCAxMTQsIDI0NCwgMiwgMTM0LCAyNDUsIDE4NiwgMjEyLCAKLSAgICAxMTQsIDI0NCwgMiwgMjQ0LCA4MSwgMjQ1LCAxODYsIDIxMiwgMTE0LCAyNDQsIDIsIDIyMCwgMTIyLCAyNDUsIDE4NiwgCi0gICAgMjQ0LCAyLCAyMjcsIDE5NywgMTEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDExMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMDUsIAotICAgIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTU4LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE2MSwgMjIyLCAxOTgsIDIyNywgMTk4LCAKLSAgICAxODksIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5OCwgMjIyLCAxOTgsIDIyNywgCi0gICAgMTk4LCAxOTUsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjAwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNiwgMjQ3LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDI0NSwgMTY3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNSwgNzYsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMjQ0LCAxMTQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAKLSAgICAyNDAsIDIxMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ3LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDExMCwgCi0gICAgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMDUsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTU4LCA0LCAyMjIsIDE5OCwgMjI3LCAKLSAgICAxOTgsIDE2MSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxODksIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk0LCA0LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDE5OCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTUsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMjAwLCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNiwgMjQ3LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NSwgMTY3LCA0LCAKLSAgICAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNSwgNzYsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTQsIDQsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAyNDAsIDIxMCwgCi0gICAgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjE2LCAxNDgsIAotICAgIDI1MSwgNjcsIDI0OSwgNjAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCA4MSwgMjE2LCAxNDcsIDIyMiwgMTk4LCAyMjcsIAotICAgIDE5OCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIyMywgNDksIDEyMywgMjQwLCAyMTAsIDcsIAotICAgIDQsIDEsIDIyMywgNDksIDI1MSwgNjYsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE5LCAxMjUsIDIzMywgNzgsIDE3LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDI0NCwgMTE1LCAyNDUsIDIyNiwgMTcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTUsIDIxNiwgCi0gICAgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjQwLCAyMTEsIDIxNiwgMTQ3LCAyMTIsIDExNCwgMjQ0LCAyLCAyMTAsIAotICAgIDg3LCAyMTYsIDE2NiwgMTQwLCA3NCwgMjE0LCAxNTMsIDc0LCA5NywgNzQsIDI0NiwgMTA0LCA3NCwgNDMsIDQ0LCA3NCwgCi0gICAgMTIwLCAxMjQsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgMTQwLCA4MCwgMiwgOTEsIDk3LCA4MCwgMiwgOTEsIDE0MCwgMjEyLCAKLSAgICAzNiwgNzQsIDk3LCAyMTIsIDM2LCA3NCwgMTQwLCAxMTMsIDI0MSwgMjM0LCA3NCwgMjE0LCAxNTMsIDExMywgMjQxLCAyMzQsIAotICAgIDc0LCA5NywgMTEzLCAyNDEsIDIzNCwgNzQsIDI0NiwgMTA0LCAxMTMsIDI0MSwgMjM0LCA3NCwgMTQwLCA4MCwgMiwgMjE3LCAKLSAgICA3NywgOTcsIDgwLCAyLCAyMTcsIDc3LCAxNDAsIDgwLCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgODAsIDI0MywgMjQzLCAKLSAgICAxMzAsIDk3LCA4MCwgMjQzLCAyNDMsIDEzMCwgMjQ2LCAxMDQsIDgwLCAyNDMsIDI0MywgMTMwLCAxMjAsIDEyNCwgODAsIDIsIAotICAgIDI1MiwgMTI3LCAxNDAsIDgwLCAyLCAxMDMsIDk3LCA4MCwgMiwgMTAzLCAxNDAsIDgwLCAyLCAyMzIsIDEyMywgOTcsIDgwLCAKLSAgICAyLCAyMzIsIDEyMywgNDMsIDQ0LCAyMTIsIDM2LCA3NCwgNDMsIDQ0LCA4MCwgMiwgOTEsIDI0NiwgMTA0LCAyMTAsIDM1LCAKLSAgICA3NCwgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc3LCAyMzMsIDM3LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzcsIDIyMiwgCi0gICAgMjQxLCAyNDYsIDEwNCwgODAsIDIsIDIxNiwgNzcsIDIzMywgMzcsIDI0NiwgMTA0LCA4MCwgMiwgMjE2LCA3NywgMjIyLCAKLSAgICAyNDEsIDk3LCA4MCwgMiwgMjQ5LCAxNjEsIDI0NiwgMTAzLCAyNDYsIDEwNCwgODAsIDIsIDI0OSwgMTYxLCAyMzMsIDM3LCAKLSAgICAyNTQsIDg4LCAyMTYsIDE0LCAyMjAsIDE1MywgNzQsIDI1MCwgMiwgMjE2LCAxNCwgMjIwLCAxNTMsIDc0LCAyMjgsIDU2LCAKLSAgICAyMTIsIDksIDgwLCAyMTYsIDQyLCAxOTksIDEzMCwgMTQwLCA4MCwgMjE2LCA0MiwgMjUyLCAxNDEsIDExNywgOTcsIDgwLCAKLSAgICAyMTYsIDQyLCAxMzAsIDI1NCwgODgsIDIwNCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjA0LCAyNTAsIDM2LCA3NCwgMTQwLCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIxNCwgMTUyLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDMsIAotICAgIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjQxLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgCi0gICAgMTM5LCAyMzMsIDM3LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMTQsIDE1MiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMjQ2LCAxMDMsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjQxLCAyNDYsIDEwNCwgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCAyMzMsIDM3LCA5NywgODAsIDExNywgMTQwLCA3NCwgMjE0LCAxNTMsIDgwLCAxNDAsIDY0LCAKLSAgICAyNDYsIDEwNCwgNzQsIDE0MCwgODAsIDExNywgOTcsIDc0LCAxNDAsIDIyNiwgNzAsIDI1MywgMjQ3LCAyMTQsIDE1MywgCi0gICAgMjI2LCA3MCwgMjUzLCAyNDcsIDk3LCAyMjYsIDcwLCAyNTMsIDI0NywgMjQ2LCAxMDQsIDIyNiwgNzAsIDI1MywgMjQ3LCAKLSAgICAxNDAsIDI0MSwgMjU1LCAxMTcsIDk3LCAyNDEsIDI1NCwgOTcsIDI0MSwgMjU1LCAxMTcsIDE0MCwgMjQxLCAyNTQsIDE0MCwgCi0gICAgNTIsIDgwLCAyLCA5MSwgNDMsIDQ0LCA1MiwgODAsIDIsIDkxLCA5NywgNTIsIDgwLCAyLCA5MSwgMTQwLCA1MiwgNzQsIAotICAgIDIxNCwgMTUzLCA1MiwgNzQsIDk3LCA1MiwgNzQsIDI0NiwgMTA0LCA1MiwgNzQsIDQzLCA0NCwgNTIsIDc0LCAxMjAsIDEyNCwgCi0gICAgNTIsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDUyLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDUyLCA3NCwgMjE5LCAyOCwgMjQ1LCAKLSAgICAyMjAsIDUyLCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA1MiwgNzQsIDE0MCwgMjE1LCAyMTEsIDc0LCA5NywgMjE1LCAyMTEsIAotICAgIDc0LCAxNDAsIDIxOCwgMjMwLCA3NCwgOTcsIDIxOCwgMjMwLCA3NCwgMjE0LCAxNTMsIDgwLCAyLCA1MiwgOTEsIDI0NiwgCi0gICAgMTA0LCA4MCwgMiwgNTIsIDkxLCAxNDAsIDI0OCwgMTU1LCA3NCwgMjE0LCAxNTMsIDI0OCwgMTU1LCA3NCwgOTcsIDI0OCwgCi0gICAgMTU1LCA3NCwgMjQ2LCAxMDQsIDI0OCwgMTU1LCA3NCwgMTQwLCA4MCwgMjE2LCA0MiwgMTMwLCA5NywgODAsIDIxNiwgNDIsIAotICAgIDEzMCwgMTQwLCA3MSwgNzQsIDIxNCwgMTUzLCA3MSwgNzQsIDk3LCA3MSwgNzQsIDI0NiwgMTA0LCA3MSwgNzQsIDIxNCwgCi0gICAgMTUzLCA3MSwgODAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMTk3LCAyMjUsIDIxNCwgMjE0LCAKLSAgICAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIDIyNSwgMjE1LCAyLCAyMDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIAotICAgIDIyNSwgMjE1LCAyLCA2NywgMTMwLCAyMTQsIDE1MywgNzEsIDUyLCA3NCwgMjE0LCAxNTMsIDcxLCA1MiwgODAsIDIyNiwgCi0gICAgMTk3LCAyMjUsIDIxNCwgOTcsIDcxLCA4MCwgMjQzLCAyNDMsIDIxMiwgNTYsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIxNiwgCi0gICAgNDIsIDI0OSwgMTYwLCAyMTksIDI4LCAyNDUsIDIyMCwgODAsIDIxNiwgNDIsIDI0OSwgMTYwLCAxMjAsIDEyNCwgNzEsIDc0LCAKLSAgICA0NCwgODAsIDIsIDQsIDI1MCwgMzUsIDI0NiwgMTA0LCA4MCwgMTQwLCA2NCwgMjE0LCAxNTMsIDc0LCAxMzQsIDk3LCAyNTMsIAotICAgIDI0NywgMTQwLCA4MCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNjcsIDkxLCAxNDAsIAotICAgIDgwLCAyLCA1MiwgNjcsIDkxLCA5NywgODAsIDIsIDUyLCA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgCi0gICAgMjI2LCAxNzMsIDc0LCA5NywgMjI2LCAxNzMsIDc0LCA0MywgNDQsIDIyNiwgMTczLCA3NCwgMzEsIDI1NCwgMTU0LCAyNDksIAotICAgIDIxNCwgMjI1LCAyNTMsIDI0NywgMjMzLCAyMTYsIDE4NywgMjQ1LCAyNywgMjE2LCAxODcsIDI0NywgMTM4LCAyMjgsIDUyLCAKLSAgICAyNDUsIDI4LCAyNDUsIDE1MiwgMjIwLCAxMjcsIDIzNSwgMjQ1LCAyMjksIDIyMSwgMjQ1LCAxNzAsIDIyNiwgMjMxLCAyMjgsIAotICAgIDUyLCAyNTQsIDEyNCwgMjQ1LCAxNzAsIDIyNiwgMjMxLCA0LCAyNDUsIDE3MCwgMjI2LCAyMzEsIDI0OSwgMTg2LCAyNTMsIAotICAgIDIzOCwgMjMxLCA2MiwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjMxLCA2MiwgNCwgMjQ5LCAKLSAgICAxODYsIDI1MywgMjM4LCAyMzEsIDYyLCAyNDUsIDE0MywgNjQsIDIyNCwgMTcyLCAyMzAsIDI0LCAyMjQsIDE4MCwgMjMwLCAKLSAgICAyNCwgMjQ5LCAxNjUsIDIzMCwgMjQsIDIxOCwgNDAsIDIzMCwgMTgyLCA1MCwgMjMwLCAxODAsIDUwLCA1OSwgMjI1LCAyMiwgCi0gICAgMjQ3LCAxNjksIDIxOSwgOTUsIDIyMCwgMTI4LCAyMzAsIDE4MSwgMjUzLCAyMTcsIDIyNiwgMTY3LCAyMjIsIDIzNCwgMjI2LCAKLSAgICAxNjcsIDI1MSwgMTE0LCAyMjYsIDE2NywgNDIsIDIyMiwgMTkzLCAyNDksIDEwOSwgMjIyLCAxOTMsIDI0NCwgNCwgMjIyLCAKLSAgICAxOTMsIDIyNCwgMTY4LCAxMTEsIDIzNSwgMjM0LCA0NCwgMjU0LCAxMDksIDI1NCwgMTA5LCAyMzEsIDg4LCAyNTQsIDEwOSwgCi0gICAgMjE4LCAyNTUsIDI1NCwgMTA5LCAyNDcsIDE3MSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0NywgMTc0LCAyMjYsIDgsIDExMSwgCi0gICAgMjI4LCA1MiwgMjI2LCA4LCAxMTEsIDIzMiwgMTQ2LCAyNTQsIDExOCwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMzUsIDE5OCwgCi0gICAgMjE0LCAxNzUsIDIzNSwgMjExLCA1MiwgMjM1LCAyMTEsIDIxNSwgMjExLCAyMzUsIDIxMSwgMjQ5LCAxODIsIDIzNSwgMjExLCAKLSAgICAyMTgsIDEzLCAyMzUsIDIxMSwgMjEzLCAxMjksIDIzNSwgMjExLCAyNTAsIDIsIDIzNSwgMjExLCAyNTAsIDIsIDI0OSwgCi0gICAgMTgyLCAyMzUsIDIxMSwgMjU0LCA4OCwgMjQ5LCAxODIsIDIzNSwgMjExLCAyMTYsIDE4NiwgMjUyLCA2NywgMjIzLCAxMzcsIAotICAgIDIyNCwgMTY5LCA1OSwgMjMwLCAxODEsIDI0NSwgMzMsIDI0MywgNDYsIDIyNCwgMTY5LCAyNDEsIDU3LCAyMTYsIDg5LCAKLSAgICAyMjYsIDE2NywgMjIzLCA0OSwgMTgyLCAyMzUsIDE5MywgMjMzLCA2NSwgMjIyLCA5MSwgMjE5LCAxNTcsIDIxMiwgMzUsIAotICAgIDIxMSwgMjAwLCAyMjQsIDE4MCwgMjI4LCA1MiwgMTgyLCAyMzAsIDE4MiwgMTgyLCAyNTMsIDIxMCwgMTI4LCAxMTEsIDIyOCwgCi0gICAgNTIsIDI1MywgMjEwLCAxMjgsIDExMSwgMjU0LCA0OCwgMTI4LCAxMTEsIDI1NCwgNDgsIDI1MSwgODgsIDIyOCwgNTIsIAotICAgIDI1NSwgNCwgMTI4LCAxMTEsIDIyOSwgMTAwLCAyNTQsIDQ4LCAyMjgsIDU5LCAyNTUsIDQsIDEyOCwgMTExLCAyNTQsIDE0OCwgCi0gICAgMTI4LCAxMTEsIDIyOCwgNTIsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjU0LCAxNDgsIDEyOCwgMTc3LCAxMjgsIDExMSwgMjE1LCAKLSAgICAyMTEsIDE4MiwgMjU0LCAxNTUsIDEyOCwgMTExLCAyNDUsIDk0LCAxMTEsIDI0MywgNDUsIDI0NSwgOTQsIDExMSwgMjQ3LCAKLSAgICAyMzQsIDI1MiwgMjMsIDI1NCwgNTAsIDIxNiwgMTk2LCAyMzIsIDIyMSwgMjQzLCA0NSwgMTI4LCAxMTEsIDI1NCwgNDgsIAotICAgIDEyOCwgMjE2LCA0MiwgMTc3LCAyMTYsIDE5NiwgMjM2LCAxNSwgMjI2LCAyMzEsIDIzNiwgMTUsIDY0LCAxNzcsIDI1NCwgCi0gICAgNDgsIDEyOCwgMTExLCAyNDksIDIyNywgMjQ1LCA5NywgMjQ1LCA5OCwgMjQ5LCAyMjYsIDIyMiwgMjM0LCAyMzYsIDAsIAotICAgIDEyOCwgMTExLCAyMjIsIDIzNCwgMTI4LCAxMTEsIDI0OSwgMTU0LCAxMTEsIDI0NSwgNjcsIDI0NSwgOTYsIDExMSwgMjE4LCAKLSAgICAxNTcsIDI0NSwgOTcsIDI0OCwgNTUsIDEyOCwgMTExLCAxMjgsIDIxNiwgNDIsIDI1MSwgNzgsIDI0OCwgNzIsIDIzMSwgODgsIAotICAgIDI1MSwgNzcsIDIyNCwgMTEsIDEyOCwgMTExLCAyMjgsIDUyLCAxMjgsIDExMSwgMjQwLCAxMDQsIDExMSwgMjI4LCA1MiwgCi0gICAgMjQwLCAxMDQsIDExMSwgMjE4LCAxMDksIDI0NSwgOTQsIDExMSwgMjMzLCAxNSwgMTc3LCAxMjgsIDExMSwgMjQyLCAxMzAsIAotICAgIDE3NywgMTI4LCAxMTEsIDIzMywgMTUsIDExNywgMTI4LCAxMTEsIDI0MiwgMTMwLCAxMTcsIDEyOCwgMTExLCAyMzMsIDE1LCAKLSAgICAyNTEsIDg4LCAyMjgsIDUyLCAxMjgsIDExMSwgMjQyLCAxMzAsIDI1MSwgODgsIDIyOCwgNTIsIDEyOCwgMTExLCAyMzAsIAotICAgIDk3LCAyMzMsIDE0LCAyMzAsIDk3LCAyNDIsIDEyOSwgMjUyLCAyMywgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMjgsIDUyLCAKLSAgICAyMzMsIDE0LCAyMjgsIDUyLCAyNDIsIDEyOSwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDEyOCwgMTExLCAyMjksIAotICAgIDEwMCwgMjQyLCAxMzAsIDIyOCwgNTksIDEyOCwgMTExLCAyMzMsIDE1LCAxNzcsIDI0NSwgOTQsIDExMSwgMjQyLCAxMzAsIAotICAgIDE3NywgMjQ1LCA5NCwgMTExLCAyMjksIDEwMCwgMjMzLCAxNSwgMjI4LCA1OSwgMjQ1LCA5NCwgMTExLCAyMjksIDEwMCwgCi0gICAgMjQyLCAxMzAsIDIyOCwgNTksIDI0NSwgOTQsIDExMSwgMjMzLCAxNSwgMTc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDE3NywgCi0gICAgMjMzLCAxNCwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDI0MiwgMTI5LCAyMjksIDEwMCwgMjQyLCAxMzAsIDIyOCwgCi0gICAgNTksIDIzMywgMTQsIDIyNCwgMjAyLCAyMTgsIDU1LCAyMjQsIDIwMywgMTc3LCAxMjgsIDExMSwgMjE4LCA1NiwgMTc3LCAKLSAgICAxMjgsIDExMSwgMjI0LCAyMDMsIDE3NywgMjQ1LCA5NCwgMTExLCAyMTgsIDU2LCAxNzcsIDI0NSwgOTQsIDExMSwgMjQ3LCAKLSAgICAxMzgsIDIyOCwgNTIsIDIyNCwgMjA1LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjE4LCA1NywgMjE4LCA2NCwgMjI2LCAyMzEsIAotICAgIDIxOCwgMjIsIDIyNiwgMjMxLCAyMjgsIDUyLCAxMTUsIDIxOCwgNjQsIDIyNiwgMjMxLCAyMjgsIDUyLCAxMTUsIDIxOCwgCi0gICAgMjIsIDIyNiwgMjMxLCAyMTgsIDY0LCA2NCwgMTc3LCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDE3NywgMTI4LCAxMTEsIAotICAgIDIyOSwgMTAwLCAxMTUsIDIxOCwgNjQsIDY0LCAyMjgsIDU5LCAxMjgsIDExMSwgMjI5LCAxMDAsIDExNSwgMjE4LCAyMiwgCi0gICAgNjQsIDIyOCwgNTksIDEyOCwgMTExLCAyMTgsIDY0LCA2NCwgMiwgMjI4LCA1MiwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCAyLCAKLSAgICAyMjgsIDUyLCAxMjgsIDExMSwgMjMwLCA4MSwgMjMwLCA4MiwgMjMwLCA4MywgMjMwLCA4MiwgMjE0LCAxNzUsIDQyLCAyMzYsIAotICAgIDE1LCAyMjYsIDIzMSwgNDIsIDIyNiwgMTUwLCAyMjYsIDIzMSwgNDIsIDIzNiwgMTUsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgCi0gICAgMjI2LCAxNTAsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgMjUwLCAyNTEsIDQyLCAyNDksIDEwMiwgMzcsIDIyNSwgMjIsIDM3LCAKLSAgICAyMzAsIDE4MSwgMzcsIDIxNiwgODUsIDM3LCAyNDcsIDE2OSwgMjE5LCA5NSwgMzcsIDU5LCAyMjYsIDE2NywgMzcsIDIyMiwgCi0gICAgMjM0LCAyMjYsIDE2NywgMzcsIDI1MywgMjE3LCAyMjYsIDE2NywgMzcsIDI0NSwgOTcsIDM3LCAyNDgsIDE1NiwgOTIsIAotICAgIDIyNSwgMjIsIDkyLCAyMzAsIDE4MSwgOTIsIDIxNiwgODUsIDkyLCA1OSwgMjI2LCAxNjcsIDQ0LCAyMTcsIDg3LCA0MywgCi0gICAgMjE3LCA4NywgMTI0LCAyMTcsIDg3LCAxMjAsIDIxNywgODcsIDI1MywgMjIwLCAyMzAsIDE1NiwgMjE1LCAxOTEsIDI0NCwgCi0gICAgMjUsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQxLCA1MiwgNDQsIDIxNSwgCi0gICAgOTMsIDI0NywgMTM4LCAyMjgsIDUyLCAyMjQsIDE2MywgMjI4LCA1MiwgMjE1LCAxOTEsIDI0NywgMTM4LCAyMjgsIDUyLCAKLSAgICAyNDQsIDI2LCAyMjksIDEwMiwgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQ0LCAyMTUsIDkzLCAyMjQsIDIwMywgMjE0LCAxODQsIAotICAgIDIyMywgOTEsIDIxOCwgNTYsIDIxNCwgMTg0LCAyMjMsIDkxLCAyMjgsIDU3LCAyMTgsIDc3LCAyMjYsIDIzMSwgMjQ5LCAKLSAgICAxODYsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc2LCAyMjgsIDU3LCAyMTgsIDc3LCA2NCwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjQ5LCAxODYsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc3LCAxNzcsIDEyOCwgMTExLCAyMjYsIDE1MCwgMjI2LCAyMzEsIAotICAgIDIzNiwgMTUsIDIyNiwgMjMxLCAyMzAsIDg3LCAyNDEsIDIwMCwgMjQ5LCAxOTYsIDIzMSwgMTM3LCAyMzUsIDIwOCwgMjExLCAKLSAgICAxNDUsIDIyOSwgMjAyLCAyMjgsIDU4LCA0NCwgMjU0LCAxMTAsIDIsIDI1NCwgMjUsIDQ0LCAyMTUsIDIyNSwgMjMwLCAyNCwgCi0gICAgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzAsIDI0LCAyMzIsIDE0NiwgMjI2LCAxNTgsIDIzMCwgMjQsIDIzNSwgMTk4LCAyMzAsIAotICAgIDI0LCAyMTQsIDE3NSwgMjQ3LCAyNDksIDIyNiwgMTY3LCA1OSwgMjI2LCAxNjcsIDIxOCwgMTU3LCAyMjYsIDE2NywgMjQ3LCAKLSAgICAxNjksIDIxNiwgODUsIDI1MSwgMTY0LCA0MywgMjI4LCA1NywgMjQ0LCAxODEsIDIyMCwgMTQ5LCAyMjQsIDE4MCwgNDQsIAotICAgIDIyOCwgNTcsIDI0NCwgMTgxLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQzLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQ0LCAyMjAsIAotICAgIDE0OSwgMjI0LCAxODAsIDIyMywgNDksIDIxNiwgODksIDI0NSwgOTcsIDI0OSwgOTksIDIzMiwgMTQ2LCAyMjYsIDE1OCwgCi0gICAgMjQ5LCA5OSwgMjMyLCAxNDYsIDI1NCwgMTE4LCA1MiwgMjE4LCA2MywgNTIsIDIxOCwgMjEsIDUyLCAyMzUsIDE5OCwgNTIsIAotICAgIDIxNCwgMTc1LCAyMjUsIDQ3LCAxMjgsIDIyLCAyMjYsIDgsIDExMSwgMjMzLCAxNSwgMiwgMjQ3LCAxMjAsIDI0MiwgMTMwLCAKLSAgICAyLCAyNDcsIDEyMCwgMjEzLCAxODcsIDIzMCwgOTcsIDIzMywgMTQsIDIxMywgMTg3LCAyMzAsIDk3LCAyNDIsIDEyOSwgCi0gICAgMjMzLCAxNSwgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgCi0gICAgMTQsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMjksIDEyOCwgMjE2LCAKLSAgICA0MiwgMTc3LCAyMjQsIDIwMiwgMTI4LCAyMTYsIDQyLCAxNzcsIDIxOCwgNTUsIDI0NywgMTM4LCAyMjgsIDUyLCAyMjQsIAotICAgIDIwNiwgMTc3LCAyNDUsIDk5LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjE4LCA1OCwgMTc3LCAyNDUsIDk5LCAyMjgsIDUyLCA0MiwgCi0gICAgMjM2LCAxNSwgNjQsIDE3NywgMTI4LCAxMTEsIDIyOCwgNTIsIDQyLCAyMjYsIDE1MCwgNjQsIDE3NywgMTI4LCAxMTEsIDQyLCAKLSAgICAyMzYsIDE1LCA2NCwgMTc3LCAyMjgsIDUyLCAxMjgsIDExMSwgNDIsIDIyNiwgMTUwLCA2NCwgMTc3LCAyMjgsIDUyLCAxMjgsIAotICAgIDExMSwgMjMzLCAxNSwgMjUxLCA4OCwgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyNDIsIDEzMCwgMjUxLCA4OCwgMjI4LCA1MiwgCi0gICAgMjQ1LCA5NCwgMTExLCAyMjQsIDIwMywgMjUxLCA4OCwgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMTgsIDU2LCAyNTEsIDg4LCAKLSAgICAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDIyOCwgNTIsIDIyOCwgNTcsIDIxOCwgNzcsIDIyNiwgMjMxLCAyNDcsIDEzOCwgCi0gICAgMjI4LCA1MiwgMjQ5LCAxODgsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc2LCAyMjgsIDUyLCAyMjgsIDU3LCAyMTgsIDc3LCAKLSAgICA2NCwgMTc3LCAxMjgsIDExMSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCAKLSAgICA3NywgMTc3LCAyNDUsIDk5LCA2NywgMjQ1LCAxNjMsIDIzMCwgMjIyLCAyMDMsIDI0NSwgMTYzLCAxMjAsIDQ0LCAyNDcsIAotICAgIDI1NSwgMjQ1LCAxNjMsIDEyNCwgNDQsIDI0NywgMjU1LCAyNDUsIDE2MywgMjQ1LCAxNzAsIDY0LCAyLCAxOTksIDIwMywgCi0gICAgOTEsIDI0NSwgMTcwLCA2NCwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIDkxLCA0LCAKLSAgICAyNDUsIDE3MCwgNjQsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCA5MSwgMjQ1LCAxNzAsIAotICAgIDY0LCAyLCA1OSwgNDgsIDI0NSwgMTcwLCA2NCwgMiwgMjI2LCAxMjMsIDQsIDI0NSwgMTcwLCA2NCwgMiwgMjI2LCAxMjMsIAotICAgIDI0NSwgMTcwLCA2NCwgMiwgMjE0LCAxODMsIDI0NSwgMTcwLCA2NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTAsIDI0OSwgMTg2LCAKLSAgICAyLCAxOTksIDIwMywgOTEsIDI0OSwgMTg2LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgCi0gICAgOTEsIDQsIDI0OSwgMTg2LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgOTEsIDI0OSwgCi0gICAgMTg2LCAyLCAyMjYsIDEyMywgNCwgMjQ5LCAxODYsIDIsIDIyNiwgMTIzLCAyMTAsIDE2MCwgMTg3LCAyNTIsIDE3MywgMjMxLCAKLSAgICA2MSwgMjQ3LCAyNTAsIDUwLCAyNDUsIDE3MiwgNzQsIDI0MCwgMjM0LCAxMjAsIDI1MywgMjQ5LCAxMjQsIDI1MywgMjQ5LCAKLSAgICAyMjQsIDE3NSwgMjI1LCAxNjUsIDIxMiwgMzIsIDIzMiwgMjEzLCA0MywgMjUwLCAxODEsIDQ0LCAyNTAsIDE4MSwgNDMsIAotICAgIDI0NCwgNTcsIDQ0LCAyNDQsIDU3LCAyNTEsIDE3NSwgNDQsIDI0OSwgMTMyLCAyNTEsIDE3NSwgNDMsIDI0OSwgMTMyLCAKLSAgICAyMTYsIDE0LCA0NCwgMjQ5LCAxMzIsIDIxNiwgMTQsIDQzLCAyNDksIDEzMiwgMjIzLCA0OSwgMjI4LCA1MiwgNTAsIDQyLCAKLSAgICAyMzIsIDEwNCwgMjU0LCAyNSwgMjIxLCAxNjQsIDIyMSwgMTcxLCAyMTcsIDEsIDIyMywgMTIwLCAyMjQsIDI0MSwgMjM1LCAKLSAgICAyMzgsIDIxMywgMTY1LCAyMTgsIDIzNCwgMjI1LCA0MSwgNjQsIDIzNSwgMjA3LCA1MCwgMjE1LCA5NCwgMjI4LCA1MiwgNTAsIAotICAgIDIxMiwgNDIsIDI0MCwgMjM2LCAyMTYsIDE0LCA0MywgMjQ5LCAxNjAsIDIxNiwgMTQsIDQ0LCAyNDksIDE2MCwgMjUxLCAKLSAgICAxNzUsIDQzLCAyNDksIDE2MCwgMjUxLCAxNzUsIDQ0LCAyNDksIDE2MCwgMjE2LCAxNCwgMTYzLCAyMzUsIDIxMSwgMjUxLCAKLSAgICAxNzUsIDE2MywgMjM1LCAyMTEsIDI0MywgMjQwLCAyMTksIDc1LCAxMjAsIDI1MywgMjUwLCAyNTIsIDI0LCAxMTMsIDIwMywgCi0gICAgMjUyLCAxMjksIDIyNiwgMTYwLCAyMzQsIDEzOCwgMjQ1LCA5MCwgMjE2LCA0MiwgMjE2LCAxOTYsIDIyMiwgMjUxLCAyMTEsIAotICAgIDE3OSwgMjM2LCAwLCAxMTUsIDIyMywgMTE3LCAyNTEsIDE2MywgMjM0LCAxMzcsIDIzMywgNDIsIDI1NCwgMTEwLCAxMjcsIAotICAgIDIyMiwgMjQ3LCAyNTQsIDExMCwgMTI3LCAyNDUsIDkwLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjMzLCA0NiwgMjUyLCAzNSwgCi0gICAgMjIyLCAyMzMsIDI0OSwgNzAsIDI1NCwgMTU1LCAyNTQsIDEsIDIxNywgMTgxLCAyMTYsIDQsIDIyMiwgMTIzLCAyNDcsIAotICAgIDIxNSwgMjI2LCAxNTEsIDI0OSwgMTk4LCAyMTcsIDUyLCAyMTksIDg2LCAyNDksIDE1MSwgMjQ5LCAxNTAsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjQwLCAxNTEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE4LCAyMjgsIDIyNCwgMjcsIDI1NCwgCi0gICAgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ1LCA5OSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDcsIAotICAgIDE3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDcsIDI0OCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI1MCwgMzUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjUwLCAzNiwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjM1LCA1NiwgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMTksIDk2LCAxMzAsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUyLCAxODEsIDEzMCwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyMTksIDk1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIAotICAgIDI1MiwgMTgwLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDIzMywgMTQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjI0LCAyOCwgMjQyLCAxMjksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTQwLCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDk3LCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDE0MCwgNzQsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgOTcsIDc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDI1MiwgMTgwLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjE3LCA4OCwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjQ4LCA1NSwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMTI0LCAyNTAsIDIzOCwgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDgsIDU0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjE3LCA4OCwgCi0gICAgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTQsIDE1MywgMjE0LCAxOSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyMTQsIDE1MywgNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyMjYsIDEyMywgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDgsIDY2LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAxMjAsIDI1MCwgMjM4LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OCwgNjUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0NiwgMTA0LCAyMTQsIDE5LCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NiwgMTA0LCA3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjMsIAotICAgIDI1MywgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ4LCA1NSwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjQ3LCAyNDksIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIzNSwgNTcsIDIxNCwgMTgzLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgCi0gICAgMjIwLCA1LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyMywgMjUzLCAyMjQsIDI3LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI1MCwgMzYsIDIxOCwgMTU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OSwgMjI2LCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgMjE3LCA4OCwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OCwgCi0gICAgNjYsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTgsIDE1NywgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgCi0gICAgMTYsIDIzNSwgNTcsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyNDgsIDEsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMTI0LCAyMjAsIDUsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDQzLCAyMjAsIDUsIAotICAgIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxNiwgODksIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNDIsIDEzMCwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OSwgMjIwLCAxMzAsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjQ4LCA2NiwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxMCwgMzQsIDI1NCwgNjYsIDI0MywgMjI1LCAKLSAgICAxNiwgMjE4LCAxMzYsIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjAsIDE1MSwgMjE0LCAxODMsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjI4LCA1MiwgMjQ1LCA5OSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAyMjQsIDEyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjUwLCAyMzksIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIAotICAgIDE2LCAxMjAsIDI1MCwgMjM5LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjM1LCAxODUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjIzLCAzNywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjYsIDIwMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNTQsIDE0NCwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ1LCAxMDEsIDIxNCwgMTgzLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDIzNSwgMTg2LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjYsIDIwMiwgMjE0LCAKLSAgICAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjU0LCAxNDMsIDIyOCwgNTIsIDI1MCwgMTMwLCA3OCwgNDQsIDI1NCwgCi0gICAgMTEwLCAyLCAyNDYsIDEwNCwgMjEwLCAzNSwgNzQsIDIxOSwgMjM1LCAyMDQsIDI1MSwgMTYzLCAyNTIsIDQ1LCA4NywgNjcsIAotICAgIDIzMiwgMjE0LCAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIzNSwgMjE2LCA4NywgMjQ5LCAxODMsIDIxNCwgMTgxLCA4NywgCi0gICAgMjQ3LCAxODksIDIxNCwgMTgxLCA4NywgMjQ1LCAxNTQsIDg3LCAyNDksIDIxMCwgODcsIDcxLCA0MiwgMiwgMjUwLCAxNzUsIAotICAgIDY3LCAyMzIsIDIxMywgMjQ1LCAxMzAsIDg3LCAyNTQsIDEzOSwgMjM0LCAxMzksIDg3LCAyNDEsIDIxMywgODcsIDM3LCAKLSAgICAyMDMsIDI1MiwgMTQxLCAyLCAyMjgsIDUwLCAzNywgMjE1LCAyMjYsIDI0NiwgMTA2LCAyNTEsIDEzNSwgMjUwLCAzNiwgMiwgCi0gICAgMjI4LCA1NCwgNzQsIDIxNCwgMTc5LCA4NywgMjMwLCAxMzcsIDg3LCAyNDAsIDE2NCwgODcsIDIyNiwgMTc0LCAyNDIsIDU5LCAKLSAgICA4NywgMjI2LCAxNzQsIDIzMywgMTQ3LCA4NywgMjI1LCAyNDQsIDg3LCAyMjUsIDI0MywgODcsIDI0NywgMTk3LCAyNDksIAotICAgIDk3LCAxNiwgMjQ0LCAyMCwgMTA1LCAyMTksIDUwLCA4NywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI3LCAyNDgsIAotICAgIDgzLCAyMjAsIDEzOCwgMjM0LCAxMzksIDg3LCAyMjQsIDE5MiwgMjI2LCA3NSwgMjI5LCA4MiwgMjI2LCA3NSwgMjI0LCAKLSAgICAxODgsIDIyMSwgMTg5LCA4NywgMjUwLCAxNywgMjIxLCAxODksIDg3LCA0MywgMjI2LCA0LCAyMTQsIDE2MCwgMTAzLCA0MywgCi0gICAgMjI2LCA0LCAyNDUsIDIxLCA0MywgMjI2LCA0LCAyMzIsIDEwOCwgMTAzLCA0NCwgMjI2LCA0LCAyMTQsIDE2MCwgMTAzLCAKLSAgICA0NCwgMjI2LCA0LCAyNDUsIDIxLCA0NCwgMjI2LCA0LCAyMzIsIDEwOCwgMTAzLCA0MywgNDIsIDI1MSwgMTU4LCAyMTQsIAotICAgIDE2MCwgMjQ5LCAxNjAsIDQzLCA0MiwgMjUxLCAxNTgsIDI0NSwgMjEsIDQzLCA0MiwgMjUxLCAxNTgsIDIzMiwgMTA4LCAKLSAgICAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMjE0LCAxNjAsIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyNDUsIAotICAgIDIxLCA0NCwgNDIsIDI1MSwgMTU4LCAyMzIsIDEwOCwgMjQ5LCAxNjAsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjE0LCAKLSAgICAxNjAsIDEwMywgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMzAsIDIyNCwgMjI1LCAxMDEsIDQzLCAyNDksIDk5LCAyNTEsIAotICAgIDE1OCwgMjMyLCAxMDgsIDEwMywgMjQ5LCA5OSwgMjUxLCAxNTgsIDI0NSwgMjEsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgCi0gICAgMjE0LCAxNjAsIDEwMywgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAyMzAsIDIyNCwgMjI1LCAxMDEsIDQ0LCAyNDksIDk5LCAKLSAgICAyNTEsIDE1OCwgMjMyLCAxMDgsIDEwMywgMjM1LCAyMTIsIDI0NSwgMjEsIDIwMywgMjMyLCAyMTQsIDI0NSwgMjEsIDIxNCwgCi0gICAgMTYwLCA0MywgMTc3LCAyMzIsIDEwOCwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjEsIDE3MiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAxNzcsIDIzMiwgMTA4LCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIyMSwgMTcyLCAyMTgsIDQxLCAyMTYsIDEzLCAyMTgsIAotICAgIDQxLCAyNTEsIDE3NCwgMjE2LCAxNCwgNDIsIDEyNywgMjUxLCAxNzUsIDQyLCAxMjcsIDI1MSwgMTc1LCA0MiwgMjUxLCAKLSAgICAxNTgsIDExNywgMjE2LCAxNCwgNDIsIDEyNywgMzQsIDE2LCAyNTEsIDE3NCwgNDMsIDY3LCA5MywgMjMyLCAyMTMsIDQ0LCAKLSAgICA2NywgOTMsIDIzMiwgMjEzLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIxMiwgMjAzLCAyMjEsIDIwNSwgMjMyLCAyMTEsIDIwMywgCi0gICAgMjIxLCAyMDUsIDIzMiwgMjEwLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIwOSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAKLSAgICAyMTYsIDE0LCAyMjIsIDI1MSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAyNTEsIDE3NSwgMjIyLCAyNTEsIDI0OCwgNDYsIAotICAgIDE2LCAxOTIsIDY3LCAyLCAyNTAsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyMDMsIDIsIDI1MCwgMzUsIDI0OCwgCi0gICAgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIDIwMywgMiwgMjUwLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIsIDIxNSwgMjI1LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyMDMsIDIsIDIxNSwgMjI1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAKLSAgICAyMDMsIDIsIDIxNSwgMjI1LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDIxMiwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIAotICAgIDEyNCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgMjAzLCAyLCAyMTIsIDM1LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyNDEsIDQ0LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAyNDEsIDQ0LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDIxNiwgMTQsIDIzMywgNDYsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgCi0gICAgMjUxLCAxNzUsIDIzMywgNDYsIDQyLCAyNDQsIDMyLCAyMjMsIDU0LCA4NywgMjQ1LCAxODIsIDg3LCA2NywgMjMyLCAyMTQsIAotICAgIDI0NSwgMjEsIDIzMSwgMzMsIDI1MSwgMTQ2LCAyMzEsIDMzLCAxOTksIDExNywgMjE5LCAyNTAsIDIzMSwgMzMsIDIxOSwgCi0gICAgMjUxLCAxMTcsIDIzMiwgMTM3LCAyMzEsIDMzLCAxOTksIDExNywgMTEzLCAyMTksIDIzNywgMjMxLCAzMywgMTEzLCAyMTksIAotICAgIDIzOCwgMTE3LCAyMzIsIDEzNywgMjMxLCAzMywgMTEzLCAyMTksIDIzOCwgMjM1LCA2NCwgMjMxLCAzMywgMjE1LCAyMDgsIAotICAgIDIzMSwgMzMsIDIxNiwgMjIzLCAyMzEsIDMzLCAyMjUsIDE4OCwgMjQ1LCAyMjQsIDI0MiwgMTIyLCAyNDMsIDIxOSwgMjE2LCAKLSAgICAxNCwgMjI2LCAzLCAyNTEsIDE3NSwgMjI2LCAzLCAyMTYsIDE0LCAyNDksIDk5LCAxMjcsIDI1MSwgMTc1LCAyNDksIDk5LCAKLSAgICAxMjcsIDIxNiwgMTQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyNTEsIDE3NSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDcxLCAKLSAgICAyMTUsIDIzOSwgMjUyLCAzNSwgMjIyLCAyMzQsIDIsIDI1MCwgMzUsIDIxOCwgMTIwLCAyNDQsIDY0LCAyNTUsIDE3LCAyNDksIAotICAgIDk2LCAyNDUsIDE3MSwgMjM1LCAxOTgsIDI0OCwgODMsIDI0NSwgMjQsIDg3LCA4NSwgMjIyLCAyNDcsIDUyLCAyMTUsIDIyNSwgCi0gICAgODUsIDIzMywgNDIsIDUyLCAyMTUsIDIyNSwgODUsIDIxNCwgMTYyLCA1MiwgMjE1LCAyMjUsIDg1LCAyNDYsIDEwNSwgNTIsIAotICAgIDIxNSwgMjI1LCA4NSwgMjIyLCAyNDcsIDUyLCAyMTUsIDIyNiwgMiwgNjcsIDEzMCwgODUsIDIzMywgNDIsIDUyLCAyMTUsIAotICAgIDIyNiwgMiwgNjcsIDEzMCwgODUsIDIyMiwgMjQ3LCAyMTUsIDIyNiwgMiwgNTIsIDY3LCAxMzAsIDI1NCwgMTczLCAyNTAsIAotICAgIDMsIDIxOCwgMTI2LCAyMTYsIDg2LCAyNTAsIDMsIDI0MCwgMjM3LCAyLCAyNDQsIDUwLCAyMjEsIDI0MSwgMTYsIDMxLCAKLSAgICAyMjcsIDIwMiwgMTYsIDMxLCAyMTgsIDE1MiwgNjQsIDI0MSwgMjMzLCAxNiwgMzEsIDIxOCwgMTUyLCA2NCwgMjE2LCAyMTIsIAotICAgIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTYsIDIxMiwgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIxNSwgMjQzLCAxNiwgMzEsIAotICAgIDI0NSwgMTMyLCAxNiwgMzEsIDI1NSwgNywgMTYsIDMxLCAyNTIsIDQ0LCAxNiwgMzEsIDI1MiwgMTc5LCAxNiwgMzEsIDIwMywgCi0gICAgMjE3LCA4OSwgMTYsIDMxLCAyMzIsIDIxNCwgMjQ0LCAxNDUsIDE2LCAzMSwgNjcsIDIxNywgODksIDE2LCAzMSwgMjQ0LCAKLSAgICAyMCwgMjQ0LCAxNDUsIDE2LCAzMSwgMjUwLCAyMzAsIDIyMywgNTMsIDE2LCAzMSwgMjIwLCAyOCwgMjI2LCAxMzAsIDE2LCAKLSAgICAzMSwgMjIwLCAyOCwgMjM1LCAyNTUsIDE2LCAzMSwgMjQ4LCAxNTEsIDIzMiwgMjA0LCAyNDUsIDc3LCAxNiwgMzEsIDI0OCwgCi0gICAgMzEsIDI0OSwgMTc4LCAxMTAsIDE2LCAzMSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDEwNSwgMTYsIDMxLCAyNDgsIDMxLCAyNDksIAotICAgIDE3OCwgMTU4LCAxNiwgMzEsIDI0OCwgMzEsIDI0OSwgMTc4LCAxNjEsIDE2LCAzMSwgMTUyLCAyNTUsIDcsIDE2LCAzMSwgCi0gICAgMjE3LCAxNzcsIDIzNiwgNjIsIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTUsIDI0NCwgMjUxLCAyMTMsIDE2LCAzMSwgMjUxLCAKLSAgICA1LCAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjMxLCA4MSwgMTYsIDMxLCAyMTgsIDYxLCAxNiwgMzEsIDI0NSwgNzcsIDE2LCAKLSAgICAzMSwgMjQ0LCAxMDcsIDIyMCwgMTM3LCAxNiwgMzEsIDI0MiwgMTIxLCAyMjAsIDEzNywgMTYsIDMxLCAyMjMsIDEyMSwgCi0gICAgMjIwLCAxMzcsIDE2LCAzMSwgMjE0LCAxNzQsIDIyMCwgMTM3LCAxNiwgMzEsIDIxOSwgMTgsIDE2LCAzMSwgMjQ4LCA2MywgCi0gICAgMjUxLCAyMTYsIDg3LCAyMDQsIDI1MSwgMTYzLCAxNiwgMzEsIDIyOSwgODUsIDE2LCAzMSwgMjQ4LCA2NCwgMjQ0LCAyMCwgCi0gICAgMTA1LCAxNiwgMzEsIDIxOCwgNjIsIDI0NCwgMjAsIDEwNSwgMjI2LCAyNDEsIDEwMywgMjI2LCAyNDEsIDI1MCwgMTUyLCAKLSAgICAyMjYsIDI0MSwgMjQ0LCAyMywgMjI2LCAyNDEsIDIzNSwgMTkzLCAyNDQsIDIzLCAyMjYsIDI0MSwgMjUyLCA0MiwgMjUxLCAKLSAgICAxMjQsIDIyNiwgMjQxLCAyNTEsIDE3MCwgMjE2LCAxMTEsIDIyNiwgMjQxLCAyNTEsIDE1NSwgMjUyLCAxNDYsIDI0MCwgCi0gICAgMTAzLCAyMjYsIDI0MSwgMjU0LCAxMjcsIDY0LCAyNTAsIDEyOSwgMjI2LCAyNDEsIDI0OCwgMTU2LCAyMjYsIDI0MSwgMjQ5LCAKLSAgICA4NywgMjU1LCAxMSwgMjI3LCAyMDAsIDIyNiwgMjQxLCA1MiwgMjUyLCAxODAsIDM3LCAyMSwgMTEwLCAzNywgMjEsIDEwNSwgCi0gICAgMzcsIDIxLCAxNTgsIDM3LCAyMSwgMTYxLCAzNywgMjEsIDE4OSwgMzcsIDIxLCAxOTQsIDM3LCAyMSwgMTk4LCAzNywgMjEsIAotICAgIDE5NSwgMzcsIDIxLCAyMDAsIDM3LCA1NCwgMjE2LCAyNDcsIDM3LCA1NCwgMjQ1LCAxNjcsIDM3LCA1NCwgMjE1LCA3NiwgCi0gICAgMzcsIDU0LCAyMTYsIDE2NCwgMzcsIDU0LCAyNDQsIDUsIDM3LCA1NCwgMjQ0LCAxMTgsIDM3LCA1NCwgMjE5LCAxMTksIDM3LCAKLSAgICA1NCwgMjIwLCAxMTksIDM3LCA1NCwgMjQ1LCAxOTAsIDM3LCA1NCwgMjI4LCAxOTcsIDM3LCA1NCwgMjE1LCA3MywgODgsIAotICAgIDIxLCAxMTAsIDg4LCAyMSwgMTA1LCA4OCwgMjEsIDE1OCwgODgsIDIxLCAxNjEsIDg4LCAyMSwgMTg5LCA4OCwgMjEsIDE5NCwgCi0gICAgODgsIDIxLCAxOTgsIDg4LCAyMSwgMTk1LCA4OCwgMjEsIDIwMCwgODgsIDU0LCAyMTYsIDI0NywgODgsIDU0LCAyNDUsIAotICAgIDE2NywgODgsIDU0LCAyMTUsIDc2LCA4OCwgNTQsIDIxNiwgMTY0LCA4OCwgNTQsIDI0NCwgNSwgODgsIDU0LCAyNDQsIDExOCwgCi0gICAgODgsIDU0LCAyMTksIDExOSwgODgsIDU0LCAyMjAsIDExOSwgODgsIDU0LCAyNDUsIDE5MCwgODgsIDU0LCAyMjgsIDE5NywgCi0gICAgODgsIDU0LCAyMTUsIDczLCAyMSwgMTIzLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAxMTMsIDI0MywgMjI5LCAyMTgsIAotICAgIDEyOSwgMjEsIDEzNCwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjQ0LCAxMSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgCi0gICAgMjQ0LCA4MSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjE5LCAxMjUsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIyMCwgCi0gICAgMTIyLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyNDUsIDE5MywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjI4LCAyMDAsIAotICAgIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIxNiwgMjQ4LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyNDUsIDE2OCwgMjQzLCAKLSAgICAyMjksIDIxOCwgMTI5LCA1NCwgMjE1LCA3NywgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjE2LCAxNjUsIDI0MywgMjI5LCAKLSAgICAyMTgsIDEyOSwgNTQsIDI0NCwgNiwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjQ0LCAxMTksIDI0MywgMjI5LCAyMTgsIAotICAgIDEyOSwgNTQsIDIxOSwgMTIwLCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMjAsIDEyMCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA1NCwgMjQ1LCAxOTEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIyOCwgMTk4LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAKLSAgICAyMTUsIDc0LCAyNDMsIDIyOSwgMjE4LCAxMjksIDg4LCA3LCA0LCAxLCA2MSwgODgsIDcsIDQsIDEsIDI1MywgMTU4LCA4OCwgCi0gICAgNywgNCwgMSwgMjUxLCA2NiwgODgsIDcsIDQsIDEsIDI0OSwgNjAsIDg4LCA3LCA0LCAxLCA3NSwgODgsIDcsIDQsIDEsIAotICAgIDI0NSwgNiwgODgsIDcsIDQsIDEsIDI0MywgMjAyLCA4OCwgNywgNCwgMSwgMjQyLCA2MCwgODgsIDcsIDQsIDEsIDczLCA4OCwgCi0gICAgNywgNCwgMSwgMjM1LCAxNDQsIDg4LCA3LCA0LCAxLCAyMzUsIDIzLCA4OCwgNywgNCwgMSwgMTU2LCA4OCwgNywgNCwgMSwgCi0gICAgMTkzLCA4OCwgNywgNCwgMSwgMjMwLCAyNSwgODgsIDcsIDQsIDEsIDc2LCA4OCwgNywgNCwgMSwgMjI2LCAxMDUsIDg4LCA3LCAKLSAgICA0LCAxLCAyMjQsIDk2LCA4OCwgNywgNCwgMSwgMTUzLCA4OCwgNywgNCwgMSwgMjIyLCA5MSwgODgsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCA4OCwgNywgNCwgMSwgNzAsIDg4LCA3LCA0LCAxLCAyMTQsIDEwNSwgODgsIDcsIDQsIDEsIDIxMiwgOTgsIDg4LCA3LCAKLSAgICA0LCAxLCAyMTEsIDE3OCwgODgsIDcsIDQsIDEsIDIxMSwgMTE3LCA4OCwgNywgNCwgMSwgMjEwLCAxNTksIDM3LCA3LCA2LCAKLSAgICAxLCA2MSwgMzcsIDcsIDYsIDEsIDI1MywgMTU4LCAzNywgNywgNiwgMSwgMjUxLCA2NiwgMzcsIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDM3LCA3LCA2LCAxLCA3NSwgMzcsIDcsIDYsIDEsIDI0NSwgNiwgMzcsIDcsIDYsIDEsIDI0MywgMjAyLCAzNywgNywgNiwgMSwgCi0gICAgMjQyLCA2MCwgMzcsIDcsIDYsIDEsIDczLCAzNywgNywgNiwgMSwgMjM1LCAxNDQsIDM3LCA3LCA2LCAxLCAyMzUsIDIzLCAKLSAgICAzNywgNywgNiwgMSwgMTU2LCAzNywgNywgNiwgMSwgMTkzLCAzNywgNywgNiwgMSwgMjMwLCAyNSwgMzcsIDcsIDYsIDEsIAotICAgIDc2LCAzNywgNywgNiwgMSwgMjI2LCAxMDUsIDM3LCA3LCA2LCAxLCAyMjQsIDk2LCAzNywgNywgNiwgMSwgMTUzLCAzNywgNywgCi0gICAgNiwgMSwgMjIyLCA5MSwgMzcsIDcsIDYsIDEsIDIxNywgMTUyLCAzNywgNywgNiwgMSwgNzAsIDM3LCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDM3LCA3LCA2LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAKLSAgICAzNywgNywgNiwgMSwgMjEwLCAxNTksIDM3LCA3LCA0LCAxLCA2MSwgMzcsIDcsIDQsIDEsIDI1MywgMTU4LCAzNywgNywgNCwgCi0gICAgMSwgMjUxLCA2NiwgMzcsIDcsIDQsIDEsIDI0OSwgNjAsIDM3LCA3LCA0LCAxLCA3NSwgMzcsIDcsIDQsIDEsIDI0NSwgNiwgCi0gICAgMzcsIDcsIDQsIDEsIDI0MywgMjAyLCAzNywgNywgNCwgMSwgMjQyLCA2MCwgMzcsIDcsIDQsIDEsIDczLCAzNywgNywgNCwgCi0gICAgMSwgMjM1LCAxNDQsIDM3LCA3LCA0LCAxLCAyMzUsIDIzLCAzNywgNywgNCwgMSwgMTU2LCAzNywgNywgNCwgMSwgMTkzLCAKLSAgICAzNywgNywgNCwgMSwgMjMwLCAyNSwgMzcsIDcsIDQsIDEsIDc2LCAzNywgNywgNCwgMSwgMjI2LCAxMDUsIDM3LCA3LCA0LCAKLSAgICAxLCAyMjQsIDk2LCAzNywgNywgNCwgMSwgMTUzLCAzNywgNywgNCwgMSwgMjIyLCA5MSwgMzcsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCAzNywgNywgNCwgMSwgNzAsIDM3LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzcsIDcsIDQsIDEsIDIxMiwgOTgsIDM3LCA3LCAKLSAgICA0LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTE3LCAzNywgNywgNCwgMSwgMjEwLCAxNTksIDM3LCAyMSwgCi0gICAgMjEwLCA4NiwgMTUyLCAzNywgNTQsIDI0NSwgMTY3LCAxNTIsIDM3LCA1NCwgMjE1LCA3NiwgMTUyLCAzNywgNTQsIDIxNiwgCi0gICAgMTY0LCAxNTIsIDM3LCA1NCwgMjQ0LCA1LCAxNTIsIDM3LCA1NCwgMjQ0LCAxMTgsIDE1MiwgMzcsIDU0LCAyMTksIDExOSwgCi0gICAgMTUyLCAzNywgNTQsIDIyMCwgMTE5LCAxNTIsIDM3LCA1NCwgMjQ1LCAxOTAsIDE1MiwgMzcsIDU0LCAyMjgsIDE5NywgMTUyLCAKLSAgICAzNywgNTQsIDIxNSwgNzMsIDUyLCAzNywgMjEsIDExMCwgNTIsIDM3LCAyMSwgMTA1LCA1MiwgMzcsIDIxLCAxNTgsIDUyLCAKLSAgICAzNywgMjEsIDE2MSwgNTIsIDM3LCAyMSwgMTg5LCA1MiwgMzcsIDIxLCAxOTQsIDUyLCAzNywgMjEsIDE5OCwgNTIsIDM3LCAKLSAgICAyMSwgMTk1LCA1MiwgMzcsIDIxLCAyMDAsIDUyLCAzNywgNTQsIDIxNiwgMjQ3LCAxNTIsIDM3LCAyMSwgMjEwLCA4NiwgOTMsIAotICAgIDk5LCAxOTIsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjEzLCAyMzksIDkzLCA5OSwgCi0gICAgMTE0LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTIsIDIxNSwgMjExLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxMTQsIAotICAgIDIxNSwgMjExLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIxNSwgMjExLCAyNDgsIDE1NywgMjEzLCAyMzksIAotICAgIDkzLCA5OSwgMTE0LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDE5MiwgMjI0LCAyNCwgMjQ4LCAKLSAgICAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAyMjQsIDI0LCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIyNCwgCi0gICAgMjQsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIyNCwgMjQsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAKLSAgICAxOTIsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgCi0gICAgMTE0LCAyMiwgNDQsIDIzMiwgMjMwLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAxMjQsIAotICAgIDIyLCAyMzMsIDQ2LCA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgMTE0LCAyMiwgCi0gICAgNDMsIDIzMiwgMjMwLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDIzMiwgCi0gICAgMjMwLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAyMzMsIDQ2LCA5MywgCi0gICAgOTksIDEyMCwgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIDIzMiwgMjMwLCA5MywgCi0gICAgOTksIDExNCwgMTIwLCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDY3LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgNjcsIAotICAgIDE5MiwgMjIsIDQ0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjMwLCA5MywgOTksIAotICAgIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDQ0LCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMjQsIDE5MiwgMjIsIDQ0LCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDQsIDEyNCwgMjQxLCAKLSAgICAyMjEsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgNjcsIDIyLCAyMzMsIDQ2LCA5MywgOTksIAotICAgIDY3LCAxOTIsIDIyLCA0MywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDY3LCAxMTQsIDIyLCA0MywgMjMyLCAyMzAsIAotICAgIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCA0MywgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDQzLCAxMjQsIAotICAgIDI0MSwgMjIxLCA5MywgOTksIDExNCwgNjcsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMTI0LCAyMiwgMjQxLCA0NCwgCi0gICAgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCAxMjQsIAotICAgIDIzMiwgMjMwLCA5MywgOTksIDEyNCwgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDIwMywgCi0gICAgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDE5MiwgMjIsIDQzLCAxMjQsIDI0MSwgMjIxLCA5MywgOTksIDQzLCAxOTIsIDIyLCAKLSAgICA0NCwgMTI0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAKLSAgICAyNDEsIDQ0LCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgNDMsIAotICAgIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgCi0gICAgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgNDMsIDE5MiwgCi0gICAgMjIsIDQ0LCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDY3LCAKLSAgICAyMiwgMjQxLCA0NCwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDY3LCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgCi0gICAgNDMsIDY3LCAyMzIsIDIzMCwgOTMsIDk5LCA2NywgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgCi0gICAgMjIsIDEyNCwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDEyMCwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICA2NywgMTE0LCAyMiwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCA0MywgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzMCwgCi0gICAgOTMsIDk5LCA0NCwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzMCwgOTMsIDk5LCA0MywgMTI0LCAxMTQsIDIyLCAKLSAgICA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICAxMjQsIDE5MiwgMjIsIDEyMCwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDEyNCwgMjAzLCAyNDEsIAotICAgIDIyMSwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDY3LCAyNDEsIDIyMSwgOTMsIDk5LCA0MywgMTkyLCAyMiwgNDQsIDY3LCAKLSAgICAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDUyLCAyNDgsIDE1NywgMjQxLCAKLSAgICA0NCwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDUyLCAyNDgsIDE1NywgMjEzLCAKLSAgICAyMzksIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDUyLCAyNDEsIDQ0LCA5MywgOTksIAotICAgIDUyLCAyMTMsIDIzOSwgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDEyNCwgNTIsIAotICAgIDIyLCA0NCwgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyNCwgMjE5LCAxNTUsIAotICAgIDIyLCA0MywgMjQ2LCAxMTMsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgCi0gICAgMjMzLCA0NiwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDEyMCwgNTIsIDIyLCAKLSAgICA0NCwgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyMCwgMjE5LCAxNTUsIDIyLCAKLSAgICA0MywgMjQ2LCAxMTMsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgCi0gICAgMjMzLCA0NiwgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCA0NCwgMjQ2LCAxMTMsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDQsIAotICAgIDIxOSwgMTU0LCA5MywgOTksIDUyLCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDY3LCAyMTksIDE1NSwgMjIsIDQzLCAKLSAgICAyNDYsIDExMywgOTMsIDk5LCA2NywgNTIsIDIyLCA0MywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjMzLCA0NiwgCi0gICAgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIDExMywgOTMsIDk5LCAxMjQsIDUyLCAyMiwgMjAzLCAyMTksIAotICAgIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIAotICAgIDExMywgOTMsIDk5LCAxMjAsIDUyLCAyMiwgMjAzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjQxLCA0NCwgCi0gICAgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCAyMDMsIDI0NiwgMTEzLCA5MywgOTksIDY3LCA1MiwgMjIsIDIwMywgMjE5LCAKLSAgICAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyNCwgMjIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTI0LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyMCwgCi0gICAgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjAsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDI0NywgCi0gICAgMjU1LCAyMTQsIDE2MCwgNDQsIDIxNiwgNDIsIDIzMiwgMTA4LCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjQ3LCAyNTUsIAotICAgIDIxNCwgMTYwLCA0MywgMjE2LCA0MiwgMjMyLCAxMDgsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMjQ3LCAyNTUsIDI0OSwgCi0gICAgMTMwLCA5MywgOTksIDE5MiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDIxNCwgMTYzLCA5MywgOTksIDE5MiwgMjIyLCAyNTEsIAotICAgIDkzLCA5OSwgMTkyLCAyNDYsIDEwNiwgOTMsIDk5LCAxMTQsIDIzMywgNDYsIDkzLCA5OSwgMTE0LCAyMTQsIDE2MywgOTMsIAotICAgIDk5LCAxMTQsIDIyMiwgMjUxLCA5MywgOTksIDExNCwgMjQ2LCAxMDYsIDkzLCA5OSwgMTkyLCA0MywgMjIsIDExNCwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAxMTQsIDI0NiwgMTA2LCA5MywgOTksIDExNCwgNDMsIDIyLCAxOTIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMTkyLCAyNDYsIDEwNiwgMjE0LCAxNjAsIDE2MywgMjUxLCAyMTMsIDIzMiwgCi0gICAgMTA4LCAxMjMsIDI0NSwgMTg5LCAyNTEsIDIxMywgMjMyLCAxMDgsIDEyMywgMjI0LCAyMiwgMjUxLCAyMTMsIDIzMiwgMTA4LCAKLSAgICAxMzQsIDI0NSwgMTg3LCAyNTEsIDIxMywgMjMyLCAxMDgsIDE2MywgMjUxLCAyMTMsIDIzMiwgMTA4LCAyNDQsIDgxLCAyNDUsIAotICAgIDE4NywgMjUxLCAyMTMsIDIzMiwgMTA4LCAxMzQsIDIyNCwgMjAsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMjIwLCAxMjIsIDI0NSwgCi0gICAgMTg3LCAyNTEsIDIxMywgMjQzLCAyMjksIDI1MSwgMjEzLCA0MywgMjIwLCAxMjIsIDI0NSwgMTg3LCAyNTEsIDIxMywgNDMsIAotICAgIDEzNCwgMjI0LCAyMCwgMjUxLCAyMTMsIDQzLCAyNDQsIDgxLCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAxNjMsIDI1MSwgCi0gICAgMjEzLCA0MywgMTM0LCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAxMjMsIDIyNCwgMjIsIDI1MSwgMjEzLCA0MywgMTIzLCAKLSAgICAyNDUsIDE4OSwgMjUxLCAyMTMsIDQ0LCAxNjMsIDI1MSwgMjEzLCAxOTIsIDIyMCwgOTIsIDIzMSwgODIsIDIyMCwgOTIsIAotICAgIDI0OCwgMTYyLCAyMjAsIDkyLCAyMTQsIDE2MCwgMTIzLCAyNDUsIDE4OSwgMjUxLCAyMTMsIDQ0LCAxMjMsIDI0NSwgMTg5LCAKLSAgICAyNTEsIDIxMywgMjI0LCAyNiwgMjMyLCAxMDgsIDIzMywgNDYsIDIyNCwgMjYsIDIzMiwgMTA4LCAyMjIsIDI1MSwgMjI0LCAKLSAgICAyNiwgMjE0LCAxNjAsIDIzMywgNDYsIDIyNCwgMjYsIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgMTA4LCA0MywgMjIsIDIzMiwgCi0gICAgMTA4LCAyMjIsIDI1MSwgMjI0LCAyNiwgMjE0LCAxNjAsIDQzLCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAKLSAgICAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDEwOCwgMjMzLCA0NiwgMjI0LCAyNiwgMjE0LCAxNjAsIAotICAgIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAyMTQsIDE2MCwgMjIyLCAKLSAgICAyNTEsIDIyNCwgMjYsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTA4LCAyMzMsIDQ2LCAyMjQsIDI2LCAyMTQsIDE2MCwgNDQsIAotICAgIDIyLCAyMzIsIDEwOCwgNDMsIDIyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDg1LCAyMTgsIDIzNCwgNzEsIDIxOCwgMjM0LCA3MSwgCi0gICAgNDIsIDIsIDIyMiwgMTgzLCAyNDksIDE1OSwgNzEsIDQyLCAyNDksIDE4NywgODUsIDQsIDIxOCwgMjM0LCA0MiwgMiwgMjAzLCAKLSAgICAyNDQsIDEwNSwgNDIsIDIsIDY3LCAyNDQsIDEwNSwgNDIsIDIsIDIyNiwgMTQ0LCAyNDksIDEyNiwgMjQ0LCAxMDUsIDQyLCAKLSAgICAyLCAyMTQsIDE2MCwgNDMsIDIxNiwgNDIsIDIzMiwgMTA4LCA0NCwgMjQ0LCAxMDUsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIAotICAgIDIxNiwgNDIsIDIzMiwgMTA4LCA0MywgMjQ0LCAxMDUsIDQyLCAyLCAyNDcsIDI1NSwgMjQ5LCAxMjYsIDI0NCwgMTA1LCA4NSwgCi0gICAgNCwgMjE4LCAyMzQsIDcxLCA0LCAyMTgsIDIzNCwgODUsIDIyMywgMTE2LCA3MSwgMjIzLCAxMTYsIDg1LCA2NywgMjIzLCAKLSAgICAxMTYsIDcxLCA2NywgMjIzLCAxMTYsIDg1LCAyMjYsIDYsIDcxLCAyMjYsIDYsIDg1LCAyMTQsIDE2MiwgMjE1LCAyMjUsIAotICAgIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjUsIDg1LCAyMTQsIDE2MiwgNCwgMjE1LCAyMjUsIDcxLCAyMTQsIDE2MiwgNCwgMjE1LCAKLSAgICAyMjUsIDg1LCAyMjIsIDI0NywgMjE1LCAyMjUsIDcxLCAyMjIsIDI0NywgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgNCwgCi0gICAgMjE1LCAyMjUsIDcxLCAyMjIsIDI0NywgNCwgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgMjI1LCA4LCA3MSwgMjIyLCAyNDcsIAotICAgIDIyNSwgOCwgODUsIDI0NiwgMTA1LCAyMTUsIDIyNSwgNzEsIDI0NiwgMTA1LCAyMTUsIDIyNSwgODUsIDI0NiwgMTA1LCA0LCAKLSAgICAyMTUsIDIyNSwgNzEsIDI0NiwgMTA1LCA0LCAyMTUsIDIyNSwgODUsIDIzMywgNDIsIDIxNSwgMjI1LCA3MSwgMjMzLCA0MiwgCi0gICAgMjE1LCAyMjUsIDg1LCAyMzMsIDQyLCA0LCAyMTUsIDIyNSwgNzEsIDIzMywgNDIsIDQsIDIxNSwgMjI1LCA4NSwgMjMzLCAKLSAgICA0MiwgMjI1LCA4LCA3MSwgMjMzLCA0MiwgMjI1LCA4LCA4NSwgMjQ3LCAyNDgsIDcxLCAyNDcsIDI0OCwgNzEsIDI0NywgCi0gICAgMjQ5LCAyNDksIDE4NywgODUsIDQsIDI0NywgMjQ4LCAyNDQsIDg5LCAyMzIsIDEwNCwgNzEsIDI1MCwgMzUsIDI0NiwgMTE4LCAKLSAgICAyNTAsIDM1LCAyNTAsIDM2LCAyLCA2NywgMjQ0LCAxMDUsIDI1MSwgMTExLCA4NSwgMjUwLCAzNSwgMjUwLCAzNiwgMiwgNDMsIAotICAgIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyMzIsIDEwOCwgMTYzLCAKLSAgICAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjI0LCAyNiwgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDI1NCwgMTU1LCAyNTEsIDg4LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjYsIAotICAgIDI1MSwgMjIxLCA0MywgMTYzLCA4NSwgMjUwLCAzNSwgNDQsIDE2MywgODUsIDI1MCwgMzUsIDIzNSwgMTk0LCAyNTEsIDExMywgCi0gICAgMjM1LCAxOTQsIDcxLCAyNTAsIDM1LCAyMTQsIDE2MCwgMTYzLCAyMzUsIDE5NCwgNzEsIDI1MCwgMzUsIDIzMiwgMTA4LCAKLSAgICAxNjMsIDIzNSwgMTk0LCA3MSwgMjUwLCAzNSwgMjE0LCAxNjAsIDQzLCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMTQsIAotICAgIDE2MCwgNDQsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgMjUsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAKLSAgICAyNSwgMjMyLCAxMDgsIDQzLCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMTQsIDE2MCwgMTYzLCAyNTAsIDM1LCAyMzIsIAotICAgIDEwOCwgMTYzLCAyNTAsIDM1LCA4NSwgMjMyLCAxMDgsIDQ0LCAyMTUsIDIyNSwgODUsIDIzMiwgMTA4LCA0MywgMjE1LCAKLSAgICAyMjUsIDg1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI1LCA4NSwgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNSwgNzEsIDI1MSwgCi0gICAgMTEzLCA0MiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIxNCwgMTYwLCAKLSAgICA0MywgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMzIsIDEwOCwgNDQsIDI0NywgMjU1LCAxNjMsIDI1MSwgCi0gICAgMjIxLCA3MSwgNDIsIDIsIDY3LCAyNTEsIDIzMiwgMjMyLCAyMTMsIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDI0NywgCi0gICAgMTIwLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDQ0LCAKLSAgICAxNjMsIDI1MSwgMjIxLCAyMzMsIDg1LCAyNTAsIDM1LCA3MSwgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyNSwgNzEsIAotICAgIDQyLCAyLCAyMzIsIDEwOCwgNDMsIDIyNCwgMjUsIDcxLCA0MiwgMiwgMjMyLCAxMDgsIDQ0LCAyMjQsIDI1LCA3MSwgNDIsIAotICAgIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyNSwgNzEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyNSwgNzEsIDI1MCwgCi0gICAgMzYsIDIsIDIzMiwgMTA4LCA0MywgMjI0LCAyNSwgNzEsIDI1MCwgMzYsIDIsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNSwgNzEsIAotICAgIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyNSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNSwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMTUsIDIyNSwgMjMyLCAxMDgsIDQzLCAyMTUsIDIyNSwgNzEsIDIzMSwgODIsIDIxOCwgMjM0LCA4NSwgMjMxLCA4MiwgCi0gICAgMjE4LCAyMzQsIDcxLCAyMzEsIDgyLCA0LCAyMTgsIDIzNCwgODUsIDIzMSwgODIsIDQsIDIxOCwgMjM0LCAyMzIsIDEwOCwgCi0gICAgNDQsIDIxNSwgMjI1LCA4NSwgMjE4LCAzOCwgMiwgMjIzLCAxMzIsIDI0OSwgMjQ3LCAyMTQsIDE5NCwgMjE5LCA2MCwgMjQ5LCAKLSAgICAyMjIsIDg1LCAyMTgsIDE1NiwgNzEsIDIxOCwgMTU2LCAyMzIsIDIyOCwgMjE2LCAxMzIsIDIxOCwgMzcsIDI1MywgMjM0LCAKLSAgICAyMjgsIDcxLCAyNDgsIDM4LCAyMjgsIDcxLCAyNDksIDE5NSwgMjI2LCAxNjMsIDg1LCAyMTcsIDAsIDcxLCAyMTcsIDAsIAotICAgIDI1MiwgMTU2LCAyNTEsIDE2MywgMjUyLCAxNTYsIDkzLCAyLCAyNTAsIDEyOSwgMjUyLCAxNTYsIDkzLCAyLCAyMTEsIDE3OCwgCi0gICAgMjIxLCAyNTQsIDIxNCwgMTk1LCAyLCAyMjMsIDE2MCwgMjQ2LCA4NCwgMjQwLCAyNDMsIDI1MiwgMjIsIDcxLCAyMjAsIDIsIAotICAgIDIyNSwgMTAxLCA4NSwgMjIwLCAyLCAyMjUsIDEwMSwgMjIwLCA4NywgMjIzLCA0OSwgMjIyLCAxODcsIDI0NCwgNTUsIDI0MSwgCi0gICAgMjI4LCAyNTEsIDExMywgODUsIDQzLCAyMjUsIDcsIDIzNSwgMjQyLCA4NSwgNDQsIDIyNSwgNywgMjM1LCAyNDIsIDcxLCAKLSAgICA0MywgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIDEyMCwgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIDQ0LCAyMjUsIDcsIDIzNSwgCi0gICAgMjQyLCA3MSwgMTI0LCAyMjUsIDcsIDIzNSwgMjQyLCAyMTksIDEwMSwgMjIsIDI0OSwgMTI5LCAyNTAsIDIxOSwgNTAsIAotICAgIDIyMywgMTcyLCA1MCwgMjUxLCAyMzksIDUwLCAyNTEsIDI1LCAyNTQsIDEwMiwgMjI2LCAxNDUsIDI0OSwgMTMwLCAyNTAsIAotICAgIDExMSwgMjIzLCAzNywgMjQ5LCAxMzEsIDY0LCAyMzIsIDExOCwgMjQ5LCAxMzEsIDY0LCAyMzUsIDExNiwgMjE4LCAxNTcsIAotICAgIDIyLCAyNDksIDEzNiwgMjQ0LCAxNjgsIDg3LCAyNTQsIDI0OCwgMjIwLCA4OSwgMjQyLCAyMiwgMjIsIDIxOSwgMTg5LCAKLSAgICAyMjUsIDIyMCwgODcsIDIxMCwgMjU0LCAyMTEsIDY5LCAyMTUsIDIxNSwgMzEsIDI0MSwgMjIzLCAyMTUsIDIxNSwgMzEsIAotICAgIDIzMywgMTA3LCAyMTUsIDIxNSwgMzEsIDI0NCwgOTYsIDIxNSwgMjE1LCAzMSwgMjE2LCAxMzMsIDIxNSwgMjE1LCAzMSwgCi0gICAgMjExLCAyMzksIDIxNSwgMjE1LCAzMSwgMjEyLCA0MCwgMjE1LCAyMTUsIDMxLCAyMzAsIDExNSwgMjE1LCAyMTUsIDMxLCAKLSAgICAyNDUsIDIyMywgMjEyLCAxLCA2NCwgMjQ4LCAxOCwgNzEsIDI0MywgMjM5LCAyNDQsIDE5MCwgNzEsIDIxOSwgNzQsIDI0NCwgCi0gICAgMTkwLCA4NSwgMjE5LCA3NCwgMjQ0LCAxOTAsIDcxLCAyMTgsIDM4LCAyLCAyMjMsIDEzMiwgMjQ0LCA5MiwgMjI0LCAyMiwgCi0gICAgMjMwLCAxMjgsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgMTI4LCAyMzEsIDU0LCAyNDQsIDEzOCwgNTAsIDI0NSwgMjIzLCAKLSAgICAyMzEsIDE5MCwgNTAsIDIzNSwgMzgsIDIyMSwgMjIwLCAyMTQsIDE0NSwgMjI5LCA5MywgMjI1LCAyMCwgMjU0LCAxMiwgCi0gICAgMjE3LCA0MCwgMjQzLCA1MiwgMjUxLCAzLCAyMzMsIDE5LCAyMTMsIDE1MCwgMjMyLCAyMzgsIDIyMSwgMTkxLCAyMjIsIDE5LCAKLSAgICAyNTAsIDI0OCwgMjU0LCA0MiwgMjI1LCA1MiwgNzEsIDI1MCwgMTE3LCAyMzQsIDc4LCA3MSwgMjUwLCAxMTcsIDIyNCwgMTQsIAotICAgIDcxLCAyNTAsIDExNywgMjIyLCAxOTUsIDcxLCAyNTAsIDExNywgMjUxLCAyMzEsIDcxLCAyNTAsIDExNywgMjM0LCAzMCwgCi0gICAgNzEsIDI1MCwgMTE3LCAyMjUsIDIzMSwgODUsIDI1MCwgMTE3LCAyMzQsIDc4LCA4NSwgMjUwLCAxMTcsIDIyNCwgMTQsIDg1LCAKLSAgICAyNTAsIDExNywgMjIyLCAxOTUsIDg1LCAyNTAsIDExNywgMjUxLCAyMzEsIDg1LCAyNTAsIDExNywgMjM0LCAzMCwgODUsIAotICAgIDI1MCwgMTE3LCAyMjUsIDIzMSwgODUsIDIxOSwgMTYsIDIxOCwgNTAsIDcxLCAyNDEsIDIyOCwgMjE4LCA1MCwgNzEsIDI0NywgCi0gICAgMjQ5LCAyMTgsIDUwLCA4NSwgMjQ5LCAyNDUsIDIxOCwgNTAsIDcxLCAyMTksIDE2LCAyMTgsIDUwLCA4NSwgMjQxLCAyMjgsIAotICAgIDIxOCwgNTAsIDg1LCAyNDcsIDI0OSwgMjE4LCA1MCwgNzEsIDI0OSwgMjQ1LCAyMTgsIDUwLCAyNDAsIDI0MywgMjE4LCAKLSAgICAyMzgsIDIyNCwgMjIsIDIyOCwgNDcsIDI0NSwgMTg5LCAyMjgsIDQ3LCAyNTIsIDczLCAyNDUsIDE4OSwgMjI4LCA0MiwgCi0gICAgMjUyLCA3MywgMjE5LCAxMTgsIDIyOCwgNDIsIDIzMCwgNTcsIDI0NCwgNjYsIDUwLCAyMzAsIDU3LCAyMjksIDE4OCwgNTAsIAotICAgIDIzMCwgNTcsIDIyMCwgNzYsIDUwLCAyMTIsIDksIDE4OCwgMjQ5LCAxMzAsIDI0NSwgMjIwLCAxODgsIDI0OSwgMTMwLCAKLSAgICAyMTQsIDE3MSwgMjIzLCAxMTIsIDg3LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ4LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQ3LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ2LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQ1LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ0LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQzLCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQyLCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyNDMsIDUwLCAyMzEsIDEzOCwgODUsIDIxNCwgMTcxLCAyMjMsIDExMiwgODcsIDIyMywgMTEzLCAyMjYsIDIwLCA4NywgCi0gICAgMjI1LCAyNTIsIDIyNiwgMjAsIDg3LCAyMjUsIDE3NCwgMjI2LCAyMCwgNTAsIDIxMSwgMjU1LCA4NywgMjQ3LCAyNDEsIAotICAgIDI0NCwgMTg5LCAyNDcsIDI0MSwgMjQ0LCAxODgsIDI0NywgMjQxLCAyNDQsIDE4NywgMjQ3LCAyNDEsIDI0NCwgMTg2LCAKLSAgICAyNDcsIDI0MSwgMjQ0LCAxODUsIDI0NywgMjQxLCAyNDQsIDE4NCwgNzEsIDI1MCwgMzYsIDIsIDU5LCAyMjIsIDI1MSwgNzEsIAotICAgIDI1MCwgMzYsIDIsIDExMywgMjQ3LCAxMTgsIDg1LCAyNTAsIDM2LCAyLCA3MSwgNTksIDIyMiwgMjUxLCA4NSwgMjUwLCAzNiwgCi0gICAgMiwgMTEzLCA3MSwgMjQ3LCAxMTgsIDIzMCwgMTQyLCAzMSwgMjExLCA2OSwgMjMwLCAxNDIsIDMxLCAyMTAsIDI1MywgMjQ3LCAKLSAgICAyMjQsIDMxLCAyNDIsIDEzMSwgMjExLCA2OSwgMjQ3LCAyMjQsIDMxLCAyMzMsIDEzLCAyMTAsIDI1MywgMjQ3LCAyMjQsIAotICAgIDMxLCAyMzMsIDEzLCAyMTEsIDY5LCAyNDcsIDIyNCwgMzEsIDI0MiwgMTMxLCAyMTAsIDI1MywgNzEsIDI0NCwgNzMsIDg1LCAKLSAgICAyNDQsIDczLCAyNDIsIDIyLCAyMiwgMjI1LCAxMDQsIDI1NCwgMTIwLCAyNDksIDEyOCwgMjE3LCAyMzUsIDIxOCwgMTY0LCAKLSAgICA2NCwgMjU0LCAyMjYsIDIyMSwgMjA2LCAyNTQsIDE2OSwgMjQ0LCA1MSwgMjQzLCA2MCwgMjE4LCAxNjQsIDY0LCAyNDEsIAotICAgIDIwMiwgMjUzLCAxOTksIDg3LCAyNDQsIDYyLCAyMjYsIDEyNiwgNzEsIDIxOCwgMTU2LCAxMzQsIDIzMiwgMjA4LCAyNDksIAotICAgIDE3NSwgMjIyLCAyNTEsIDEzNCwgMjMyLCAyMDgsIDI0OSwgMTc1LCAyMzMsIDQ2LCAyMTIsIDUwLCA1MCwgMTI1LCAyMTMsIAotICAgIDEzMCwgNTAsIDI0NiwgMTEwLCAyNDQsIDEzOCwgNTAsIDI0NiwgMTEwLCAyMzEsIDE5MCwgNTAsIDIzNSwgMjAzLCAyNDQsIAotICAgIDEzOCwgMjIsIDIzMSwgMTkwLCA1MCwgMjMxLCAxOTAsIDIyLCAyNDQsIDEzOCwgNTAsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgCi0gICAgNTAsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgMjIsIDIzMSwgMTkwLCAyMiwgMjQ0LCAxMzgsIDUwLCA2NywgMjMxLCAxOTAsIAotICAgIDIsIDIxOCwgMTAzLCA1MCwgMjAzLCAyMzEsIDE5MCwgMiwgMjE4LCAxMDMsIDUwLCAyMzEsIDgyLCA3MSwgMjUwLCAzNSwgCi0gICAgMjMxLCA4MiwgODUsIDI1MCwgMzUsIDIzMSwgODIsIDQsIDcxLCAyNTAsIDM1LCAyMzEsIDE1MywgODcsIDI0NywgMTY3LCAKLSAgICA4NywgMjE0LCAxNjksIDIyNSwgMjUxLCA4NywgMjQ5LCAyMzEsIDI0MywgMjI0LCAyMTQsIDE0MSwgMjI5LCA4OCwgMjUwLCAKLSAgICAxNjEsIDIyNiwgNjEsIDIzNSwgNDQsIDIxMywgMTg1LCAyNTAsIDkzLCA4NSwgMjMwLCAxMjksIDIzMiwgMjI1LCAyMjAsIAotICAgIDExMiwgMjIwLCAxNDcsIDIyNCwgNSwgMjIwLCAxMzAsIDIxOSwgNTUsIDI1MiwgMTU5LCAyNTIsIDEyNiwgOTIsIDIzNCwgCi0gICAgMTM4LCA3MSwgMjQ2LCA5MywgMjMxLCAxODUsIDcxLCAyNDYsIDkzLCAyMzQsIDc4LCA4NSwgMjQ2LCA5MywgMjMxLCAxODUsIAotICAgIDg1LCAyNDYsIDkzLCAyMzQsIDc4LCAyMTksIDYxLCAyMTEsIDIzMCwgMjE5LCA2NCwgMjE4LCAzOCwgMjUyLCA1MSwgMjQ5LCAKLSAgICAyNDcsIDIyMywgMTU5LCA4NSwgMjE5LCA2MCwgMjE2LCAxMzQsIDI0OSwgMjQ4LCAyMiwgMjIzLCAxNTksIDIxNSwgOTQsIAotICAgIDcxLCAyMjAsIDIsIDIyNSwgMTAxLCAyMTUsIDk0LCA4NSwgMjIwLCAyLCAyMjUsIDEwMSwgNzEsIDI0NywgMjQ5LCAyMzYsIAotICAgIDAsIDIxOCwgMjM0LCAyNDksIDEyNSwgMjMzLCA5MSwgMjQ3LCAxOTMsIDI1MCwgMjQ0LCAyMjYsIDE2NiwgMjI1LCAxMDQsIAotICAgIDI1MCwgMjQ1LCAyMTksIDg4LCAyNDEsIDIxMiwgMiwgNzEsIDI0OSwgMTMwLCAzNywgMjQ5LCAxMjUsIDIzMywgOTEsIDI1MCwgCi0gICAgMTUzLCAyMjgsIDc1LCAyNDUsIDEyNCwgMjU0LCAxNDEsIDIyNiwgMTkxLCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDg1LCAKLSAgICAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDcxLCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDg1LCAKLSAgICA0MywgMjMzLCA5MiwgMjMxLCA1MywgNzEsIDQzLCAyMzMsIDkyLCAyMzEsIDUzLCAyNDYsIDg5LCAyMTksIDgyLCA1MCwgCi0gICAgMTE0LCA3MSwgMjQ2LCAxMDUsIDIxNSwgMjI1LCA0MywgMjUwLCAwLCAyNDUsIDEyNCwgOTIsIDIyMSwgMjU0LCAyNDQsIAotICAgIDE3NSwgMjQ3LCAyNTUsIDIzNiwgMCwgNzEsIDI1MCwgMzYsIDIzNiwgMCwgODUsIDIxOCwgMjM0LCA4NSwgMjE1LCAxOTIsIAotICAgIDIyMywgNjAsIDQzLCAyNDUsIDEyMywgMjIzLCA2MCwgNDMsIDI0NSwgMTIyLCAyNTMsIDIxMSwgMTYsIDMxLCAyMTQsIDE0NSwgCi0gICAgMTE0LCAyNTAsIDM2LCAyLCAyMTgsIDEwMywgMjIsIDExMywgMTcwLCA0OCwgMjI1LCAxODksIDIyMiwgMjQ4LCAyMzUsIAotICAgIDIwNSwgMjI1LCAxODksIDIzMywgNDMsIDIzNSwgMjA1LCAyMjUsIDE4OSwgMjM1LCAxOTMsIDIyNSwgMTg5LCA4NSwgMjQ5LCAKLSAgICAxMzEsIDIyNiwgMTk3LCAyMjAsIDI5LCAyMjAsIDE3LCAyMTksIDIyOSwgMjUwLCA2MSwgMjUwLCAyMjYsIDI0MSwgMTU3LCAKLSAgICAyMTksIDEyNiwgMjQzLCA2MSwgMjExLCAyMzAsIDI0MCwgMjIwLCAyNDMsIDYxLCAyLCAyNDIsIDEyLCAyMzEsIDE3MywgMTYsIAotICAgIDMxLCAyMzIsIDIyOSwgMjMwLCAxMTUsIDIxNCwgMTk1LCAyMjYsIDE5NywgMjQyLCAxMjIsIDI0NCwgMTIsIDI0NCwgNzQsIAotICAgIDIzNiwgMCwgMjQxLCA1OSwgMjQ0LCAxMjksIDIyMiwgMTQsIDQyLCAyNDQsIDExLCAyNDksIDE1OSwgMjE5LCAxMDQsIDI0MCwgCi0gICAgMTEyLCAyMTksIDEwNywgMjI1LCAxNjgsIDIsIDI1MiwgMTU5LCAyMTYsIDI0MiwgMjM1LCAxMzEsIDI1MiwgMTQ2LCA4NywgCi0gICAgMjQxLCAyMzEsIDI0MiwgMTMzLCA4NywgMjQzLCAyMzIsIDIyNCwgMTQyLCAyNDksIDEwMywgMjI2LCAxOTcsIDg1LCAyMTgsIAotICAgIDIzNCwgNzEsIDI0NCwgNzQsIDIsIDIwMywgMjMwLCAyMjQsIDg1LCAyMTgsIDEwNCwgMjE0LCAxNjAsIDI1MSwgMjE3LCAKLSAgICAyMjEsIDE5MywgODUsIDIyMSwgMTkzLCAyMzIsIDEwOCwgMjUxLCAyMTcsIDIyMSwgMTkzLCA3MSwgMjIxLCAxOTMsIDcxLCAKLSAgICAxMTQsIDI1MCwgMTMwLCA3OCwgMjE3LCAxLCAyMzIsIDE1NCwgNTAsIDIxNywgNTMsIDI0NiwgODgsIDI1NCwgMTkxLCAyNDUsIAotICAgIDExOSwgMjIzLCAxNTcsIDI0NCwgODUsIDIyMywgMTU3LCAyNDIsIDE1LCAyMTMsIDE3NCwgMjQyLCAxNSwgMjExLCAxOTgsIAotICAgIDI0MiwgMTUsIDIzMiwgMTA4LCA0NCwgMjI1LCAxOTgsIDIyNSwgMTk4LCAyMTQsIDE2MCwgNDQsIDIyNSwgMTk4LCA3MSwgCi0gICAgMjI4LCAyMzAsIDg1LCAyMjgsIDIzMCwgMjUwLCAxMzAsIDc4LCAxMTQsIDI1MCwgMTMwLCA3OCwgMjMwLCA4NCwgMjExLCAKLSAgICAxNzgsIDExNCwgMjMwLCA4NCwgMjExLCAxNzgsIDI1MiwgMTU2LCAyMTEsIDE3OCwgMTE0LCAyNTIsIDE1NiwgMjExLCAxNzgsIAotICAgIDIyNiwgMTI2LCAyNiwgMjQ5LCAxMzAsIDExNCwgMjYsIDI0OSwgMTMwLCAyMDQsIDI1MCwgMTc1LCAyNDksIDEzMCwgMTE0LCAKLSAgICAyMDQsIDI1MCwgMTc1LCAyNDksIDEzMCwgNywgMjQ5LCAxMzAsIDIyMCwgOTEsIDcxLCA3LCAyNDksIDEzMCwgMjI2LCAxMjYsIAotICAgIDcsIDI0OSwgMTMwLCAyMzEsIDE4NywgMjQ5LCAxMzAsIDIxOCwgMTU3LCA2NCwgMjQ4LCAxNDksIDI0NCwgMTEsIDIxNywgCi0gICAgMTUsIDI1MywgMjE2LCAyNDQsIDExLCAyNTIsIDE1NywgMjUzLCAyMTYsIDExNCwgMjQ0LCAxMSwgMjUyLCAxNTcsIDI1MywgCi0gICAgMjE2LCAyNDQsIDExLCAyNDksIDI0MywgMjUzLCAyMTYsIDg1LCAyNDQsIDExLCAyMjUsIDksIDIxOCwgMTU2LCA3MSwgMjQ0LCAKLSAgICAxMSwgMjI1LCA5LCAyMTgsIDE1NiwgMjE5LCAxMSwgMjE4LCAxMTEsIDIyNiwgMTI2LCA3MSwgMjE4LCAxNTYsIDM3LCA3MSwgCi0gICAgMjE4LCAxNTYsIDIwNCwgMjUwLCAxNzUsIDg1LCAyMTgsIDE1NiwgODUsIDI1MCwgMTc1LCA3MSwgMjE4LCAxNTYsIDIyNiwgCi0gICAgMTI2LCA4NSwgMjE4LCAxNTYsIDExNCwgMjI2LCAxMjYsIDg1LCAyMTgsIDE1NiwgMjI1LCA2MCwgMjE4LCAxNTYsIDIyMCwgCi0gICAgOTEsIDcxLCAyMTgsIDE1NiwgMTE0LCAyNTMsIDIxNiwgMjA0LCAyNTAsIDE3NSwgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMTgsIAotICAgIDI0NCwgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMjUsIDksIDg1LCAyMTgsIDE1NiwgMjQ1LCAxOTMsIDIyNSwgOSwgMjI1LCA2MCwgCi0gICAgMjE4LCAxNTYsIDIxOSwgMTI1LCAyMjUsIDksIDg1LCAyMTgsIDE1NiwgMjQ1LCAxOTMsIDIyNSwgOSwgMjIzLCAxMTQsIDg1LCAKLSAgICAyMTgsIDE1NiwgMTE0LCAyNDUsIDE5MywgMjI1LCA5LCAyMjMsIDExNCwgODUsIDIxOCwgMTU2LCAyMTUsIDc3LCAyMjUsIDksIAotICAgIDg1LCAyMTgsIDE1NiwgMjE5LCAxMjAsIDIyNSwgOSwgMjUzLCAyMTYsIDIxNywgMTUsIDI1MywgMjE2LCAyMDQsIDI1MCwgCi0gICAgMTc1LCAyMTcsIDE1LCAyNTMsIDIxNiwgMTE0LCAyMTcsIDE1LCAyNTMsIDIxNiwgMjE5LCAxMjUsIDIyNSwgMTU3LCA4NSwgCi0gICAgMjIsIDcxLCAyNDQsIDU0LCA4NSwgMjQ0LCA1NCwgNzEsIDI0NCwgNTQsIDI0NSwgMTkzLCAyMjUsIDE1NywgMjI2LCAxMjYsIAotICAgIDg1LCAyNDQsIDU0LCAzNywgMjA0LCAyNTAsIDE3NSwgMjQ1LCAxOTMsIDIyNSwgOSwgMjE4LCAxNTYsIDExNCwgMjE3LCAxNSwgCi0gICAgMjI1LCA2MCwgMjUzLCAyMTYsIDIxOSwgNjIsIDIxNiwgMTA1LCAyMTUsIDIxOCwgMjE5LCA2MiwgMTE0LCAyNTAsIDExNCwgCi0gICAgMjE5LCA2MiwgMjE5LCAxMywgMTE0LCAyMTksIDEzLCAyNTIsIDE1NywgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMTcsIDE1LCAKLSAgICAyMjQsIDE3MSwgMjUzLCAyMTYsIDExNCwgMjQ1LCAxOTMsIDIxNywgMTUsIDIyNCwgMTcxLCAyNTMsIDIxNiwgMjQ5LCAxMzEsIAotICAgIDc4LCAyMjAsIDkxLCA3MSwgMjUwLCAzNSwgMTUyLCA5MiwgMjQ5LCAxMzEsIDc4LCAyMzIsIDEwOCwgNDQsIDI0NiwgODYsIAotICAgIDcxLCAyMTgsIDIzNCwgMjE0LCAxNjAsIDQ0LCAyNDYsIDg2LCA3MSwgMjE4LCAyMzQsIDIzMiwgMTA4LCA0NCwgMjIwLCA5MSwgCi0gICAgNzEsIDIxOCwgMjM0LCAyMTQsIDE2MCwgNDQsIDIyMCwgOTEsIDcxLCAyMTgsIDIzNCwgODUsIDIyNCwgMTMsIDE2NCwgMjI2LCAKLSAgICAxNDcsIDcxLCAyMjQsIDEzLCAxNjQsIDIyNiwgMTQ3LCA3MSwgMjQ1LCAzMSwgMTY0LCAyMjYsIDE0NywgODUsIDI0NywgCi0gICAgMjQ5LCAyMzAsIDE4MiwgNzEsIDIxMSwgMTc4LCAxMTQsIDI0NSwgMzEsIDE2NCwgODcsIDE5MiwgNjcsIDEzMCwgMjMxLCAKLSAgICA4MiwgNjcsIDEzMCwgMTE0LCA2NywgMTMwLCAxMTQsIDIxOSwgMTU1LCAyMTUsIDk0LCAyNDksIDIyMCwgMjIzLCAyNTQsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgMjE5LCAxNTUsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCA1MiwgCi0gICAgMjE1LCA5NCwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDUyLCAyNDksIDIyMCwgMjIzLCAyNTQsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgMTIxLCAyMTksIDE1NSwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAKLSAgICAxMTQsIDEyMSwgNTIsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMjQ5LCA5MSwgMjE4LCAxNDAsIDIyNiwgCi0gICAgMTUsIDUsIDIyNiwgMTQ3LCAxMTQsIDI0NSwgMzEsIDE2NCwgMjI2LCAxNDcsIDExNCwgMjQxLCAyMjgsIDI0NSwgMzEsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgODUsIDI0MSwgMjI3LCAyMjIsIDE4NywgMTE0LCA4NSwgMjQxLCAyMjgsIDI1MSwgMTEzLCAKLSAgICAyNDQsIDU1LCAyNDEsIDIyNywgMjIyLCAxODcsIDI0NCwgNTUsIDI0MSwgMjI4LCAyNTEsIDExMywgMjMxLCA4MiwgNDMsIAotICAgIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDQ0LCAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyNDQsIDYzLCA0MywgCi0gICAgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgMjQ0LCA2MywgNDQsIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDIzMywgCi0gICAgNDIsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDIzMSwgODIsIDIyMiwgMjQ3LCAyNTQsIDExMCwgMjUxLCAxNTgsIAotICAgIDIyNiwgMTQ3LCAxMTQsIDIzMywgNDIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCAyMjIsIDI0NywgCi0gICAgMjU0LCAxMTAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDIzMywgNDIsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAKLSAgICAxNDcsIDExNCwgMjIyLCAyNDcsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDE5MiwgNDMsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMjUxLCAxNTgsIDIyNiwgMTQ3LCAxOTIsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU4LCAyMjYsIDE0NywgCi0gICAgMjMxLCA4MiwgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjYsIDE0NywgMjMxLCA4MiwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAKLSAgICAyMjYsIDE0NywgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxMTAsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTA1LCAyNDcsIAotICAgIDIwNCwgMTUyLCAzNywgMjEsIDE1OCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxNjEsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgCi0gICAgMTg5LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDE5NCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxOTgsIDI0NywgMjA0LCAKLSAgICAxNTIsIDM3LCAyMSwgMTk1LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDIwMCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDU0LCAyMTYsIAotICAgIDI0NywgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDExMCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDEwNSwgMjQ3LCAyMDQsIDM3LCAKLSAgICAzNSwgMjEsIDE1OCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE4OSwgMjQ3LCAKLSAgICAyMDQsIDM3LCAzNSwgMjEsIDE5NCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE5OCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIAotICAgIDE5NSwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDIwMCwgMjQ3LCAyMDQsIDM3LCAzNSwgNTQsIDIxNiwgMjQ3LCAyNDcsIDIwNCwgCi0gICAgMTUyLCAzNywgMzUsIDIxLCAxMTAsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDEwNSwgMjQ3LCAyMDQsIDE1MiwgMzcsIAotICAgIDM1LCAyMSwgMTU4LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxNjEsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIAotICAgIDE4OSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTk0LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxOTgsIDI0NywgCi0gICAgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMjAwLCAyNDcsIDIwNCwgMTUyLCAKLSAgICAzNywgMzUsIDU0LCAyMTYsIDI0NywgMTE0LCAyMTEsIDI0NiwgOTcsIDc0LCAxMTQsIDk2LCA1MCwgMTE0LCAyMzAsIDE4MiwgCi0gICAgNTAsIDExNCwgMjQ3LCAxNjksIDUwLCAxMTQsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMTE0LCA5NywgNzQsIDExNCwgMjI4LCAKLSAgICA1NiwgMjQ1LCAyMjAsIDc0LCAyNDYsIDk4LCAyMjUsIDExLCA5NywgNzQsIDExNCwgMjIyLCAxODQsIDk3LCA3NCwgMjE1LCAKLSAgICAyMjQsIDk3LCA3NCwgMTE0LCAyMTUsIDIyNCwgOTcsIDc0LCAyNDgsIDE1NSwgMjE1LCAyMjQsIDk3LCA3NCwgMTE0LCAyNDgsIAotICAgIDE1NSwgMjE1LCAyMjQsIDk3LCA3NCwgODUsIDk3LCA3NCwgMjE2LCAxNDQsIDIxNiwgMTIsIDk3LCAyNTMsIDI0OSwgMjE2LCAKLSAgICAxNDQsIDI1MSwgMTczLCA5NywgMjUzLCAyNDksIDg1LCA5NywgMjUzLCAyNDksIDExNCwgODUsIDI0OSwgOTEsIDI0NiwgCi0gICAgMTA0LCAyMiwgOTcsIDc0LCAxMTQsIDg1LCAyNDksIDkxLCAyMTQsIDE1MywgMjIsIDk3LCA3NCwgMjE4LCAyMzEsIDg1LCAKLSAgICA5NywgNzQsIDExNCwgMjQ5LCAyMDYsIDg1LCA5NywgNzQsIDIyMiwgMjQ2LCA3MSwgOTcsIDc0LCAyMzMsIDQxLCA3MSwgOTcsIAotICAgIDc0LCAyNTIsIDE4MywgMjIwLCA5MSwgNzEsIDk3LCA3NCwgMjQzLCAyNDEsIDIyMCwgOTEsIDcxLCA5NywgNzQsIDExNCwgCi0gICAgMjMyLCAxMDgsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAxMTQsIDIxNCwgMTYwLCAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMjI4LCAKLSAgICA0OSwgMjMyLCAxMDgsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAyNDksIDk5LCAyMzIsIDEyMywgMjI4LCA0OSwgMjE0LCAxNjAsIAotICAgIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAzNywgMTE0LCA3MSwgOTcsIDc0LCAyMTEsIDI1MiwgOTcsIDc0LCAyNTEsIDIyMCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyNTEsIDIyMCwgOTcsIDc0LCAyNTEsIDIyMCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAKLSAgICAxMTQsIDI1MSwgMjIwLCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDExNCwgMjUxLCAyMjAsIDk3LCA3NCwgMTE0LCAyNTEsIAotICAgIDIyMCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMTcsIDE3LCA5NywgNzQsIDExNCwgMjE3LCAxNiwgOTcsIDc0LCAyMTIsIAotICAgIDE4LCA5NywgNzQsIDExNCwgMjEyLCAxOCwgOTcsIDc0LCAyMjYsIDE3MiwgOTcsIDc0LCA1MiwgMjQ5LCA5OSwgMjMyLCAKLSAgICAxMjMsIDEzNCwgMjQ3LCAyMTQsIDI1NCwgMTA5LCA3MSwgMjE1LCAyMjYsIDI0OSwgMTg3LCA0LCA3MSwgMjE1LCAyMjUsIAotICAgIDIyNSwgMTcxLCAyMDQsIDIxOCwgNjMsIDIwNCwgMjE4LCAyMSwgNDMsIDIyMiwgOTAsIDI1MiwgMTczLCAyNDgsIDYwLCA0NCwgCi0gICAgMjIyLCA5MCwgMjUyLCAxNzMsIDI0OCwgNjAsIDE3NywgMiwgNTksIDIzNSwgMjE1LCAyMjMsIDUwLCAyMTksIDQ3LCAyMjQsIAotICAgIDIwMSwgMjE4LCA2MywgMjE4LCAyMiwgMjI0LCAyMDEsIDIxOSwgNDYsIDY3LCAyNTIsIDE0MSwgMiwgMjAzLCA5MSwgMTEsIAotICAgIDIyMiwgMjI4LCAyNDcsIDI1NCwgMTk5LCAyNDcsIDE2OCwgMTEsIDI0NCwgMTc1LCAyNDcsIDI1NCwgOTIsIDIzMiwgMTQ2LCAKLSAgICAyNTQsIDExOCwgOTIsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgNzEsIDI0NywgMjQ5LCAyLCAyNTAsIDE3MywgMjQ3LCAxMjAsIAotICAgIDIyLCAyLCAyNDcsIDEyMCwgMjQ1LCAxNzAsIDY0LCAyMjYsIDE3MCwgMjE0LCAxNTIsIDIzMiwgMTA4LCA0NCwgMjQ5LCAKLSAgICAxNjEsIDIsIDI0NywgMTIwLCAyMTQsIDE2MCwgNDMsIDI0OSwgMTYxLCAyLCAyNDcsIDEyMCwgNDMsIDIyNiwgMTI4LCAyMzUsIAotICAgIDY2LCA0NCwgMjI2LCAxMjgsIDIzNSwgNjYsIDI0MywgMjI5LCAyMjYsIDEyOCwgMjM1LCA2NiwgMjMzLCA4NSwgMTIwLCAKLSAgICAyMTcsIDg3LCAyMzMsIDg1LCAxMjQsIDIxNywgODcsIDQzLCAyMiwgNDQsIDUyLCAyMTUsIDkzLCA0MywgMjIsIDQ0LCAyMTcsIAotICAgIDg3LCA0MywgMjMwLCA4NywgMTk5LCA0NCwgMjE3LCA4NywgMTk5LCA0MywgMjE3LCA4NywgMTIwLCAyMTcsIDg4LCAyLCAKLSAgICAyNTAsIDM2LCA0OCwgMjMyLCAxMDUsIDI0NywgMTczLCAyNTEsIDc4LCAyMDMsIDIyMiwgMTMzLCA3MSwgMjQ5LCAyMDUsIAotICAgIDI0NywgMjQ4LCA3MSwgMjQ5LCAyMDUsIDI0NywgMjQ5LCAyLCAxNDAsIDIxNiwgMTE0LCA3MSwgMjQ5LCAyMDUsIDI0NywgCi0gICAgMjQ5LCAyLCA5NywgMjE2LCAxMTQsIDcxLCA0MiwgMiwgMTQwLCAyMTYsIDExNCwgNzEsIDQyLCAyLCA5NywgMjE2LCAxMTQsIAotICAgIDExLCA0MywgNzEsIDQyLCAxMjcsIDExLCA0NCwgNzEsIDQyLCAxMjcsIDExLCA0MywgMjU0LCAxMTAsIDEyNywgMTEsIDQ0LCAKLSAgICAyNTQsIDExMCwgMTI3LCAxMSwgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCAxMSwgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCAxMSwgCi0gICAgNDMsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMTEsIDQ0LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDExLCA0MywgCi0gICAgMjQ0LCA2MywgMjI2LCAzLCAxMSwgNDQsIDI0NCwgNjMsIDIyNiwgMywgMjE0LCAxNTMsIDIyNCwgMjQsIDc0LCAyNDYsIAotICAgIDEwNCwgMjI0LCAyNCwgNzQsIDI1NCwgODgsIDI0MywgOTgsIDI1MCwgMzYsIDc0LCAyNTAsIDIsIDI0MywgOTgsIDI1MCwgCi0gICAgMzYsIDc0LCA0NCwgODAsIDIsIDM3LCAyMjUsIDIyLCAxOTksIDE0MCwgNzQsIDE5OSwgOTcsIDc0LCAxOTksIDQzLCA0NCwgCi0gICAgNzQsIDE5OSwgMTQwLCA1MiwgNzQsIDE5OSwgOTcsIDUyLCA3NCwgMTk5LCA0MywgNDQsIDUyLCA3NCwgMTk5LCAxNDAsIDgwLCAKLSAgICAyNDMsIDI0MywgMTMwLCAxOTksIDk3LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTk5LCAxNDAsIDUyLCA4MCwgMjQzLCAyNDMsIAotICAgIDEzMCwgMTk5LCA5NywgNTIsIDgwLCAyNDMsIDI0MywgMTMwLCAxOTksIDk3LCAyMTgsIDIzMCwgNzQsIDQ2LCA0NywgMjUxLCAKLSAgICAyMTUsIDQ2LCA0NywgMjQ3LCAxMTcsIDQ2LCA0NywgMjQ2LCAyNDUsIDQ2LCA0NywgMjQ3LCAxMTYsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODEsIDQ2LCA0NywgMjQ3LCA1MiwgNDYsIDQ3LCAyNDYsIDI0NCwgNDYsIDQ3LCAyNDcsIDExNSwgNDYsIDQ3LCAyNDYsIAotICAgIDE0OSwgNDYsIDQ3LCAyNDcsIDIwLCA0NiwgNDcsIDI0NiwgMjEyLCA0NiwgNDcsIDI0NywgODMsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODAsIDQ2LCA0NywgMjQ3LCA1MSwgNDYsIDQ3LCAyNDYsIDI0MywgNDYsIDQ3LCAyNDcsIDExNCwgNDYsIDQ3LCAyNDYsIAotICAgIDEzMywgNDYsIDQ3LCAyNDcsIDQsIDQ2LCA0NywgMjQ2LCAxOTYsIDQ2LCA0NywgMjQ3LCA2NywgNDYsIDQ3LCAyNDYsIDE2NCwgCi0gICAgNDYsIDQ3LCAyNDcsIDM1LCA0NiwgNDcsIDI0NiwgMjI3LCA0NiwgNDcsIDI0NywgOTgsIDQ2LCA0NywgMjQ2LCAxNDgsIDQ2LCAKLSAgICA0NywgMjQ3LCAxOSwgNDYsIDQ3LCAyNDYsIDIxMSwgNDYsIDQ3LCAyNDcsIDgyLCA0NiwgNDcsIDI0NiwgMTc5LCA0NiwgNDcsIAotICAgIDI0NywgNTAsIDQ2LCA0NywgMjQ2LCAyNDIsIDQ2LCA0NywgMjQ3LCAxMTMsIDQ2LCA0NywgMjQ2LCAxMjUsIDQ2LCA0NywgCi0gICAgMjQ2LCAyNTIsIDQ2LCA0NywgMjQ2LCAxODgsIDQ2LCA0NywgMjQ3LCA1OSwgNDYsIDQ3LCAyNDYsIDE1NiwgNDYsIDQ3LCAKLSAgICAyNDcsIDI3LCA0NiwgNDcsIDI0NiwgMjE5LCA0NiwgNDcsIDI0NywgOTAsIDQ2LCA0NywgMjQ2LCAxNDAsIDQ2LCA0NywgCi0gICAgMjQ3LCAxMSwgNDYsIDQ3LCAyNDYsIDIwMywgNDYsIDQ3LCAyNDcsIDc0LCA0NiwgNDcsIDI0NiwgMTcxLCA0NiwgNDcsIAotICAgIDI0NywgNDIsIDQ2LCA0NywgMjQ2LCAyMzQsIDQ2LCA0NywgMjQ3LCAxMDUsIDQ2LCA0NywgMjQ2LCAxMzIsIDQ2LCA0NywgCi0gICAgMjQ3LCAzLCA0NiwgNDcsIDI0NiwgMTk1LCA0NiwgNDcsIDI0NywgNjYsIDQ2LCA0NywgMjQ2LCAxNjMsIDQ2LCA0NywgMjQ3LCAKLSAgICAzNCwgNDYsIDQ3LCAyNDYsIDIyNiwgNDYsIDQ3LCAyNDcsIDk3LCA0NiwgNDcsIDI0NiwgMTQ3LCA0NiwgNDcsIDI0NywgMTgsIAotICAgIDQ2LCA0NywgMjQ2LCAyMTAsIDQ2LCA0NywgMjQ3LCA4MSwgNDYsIDQ3LCAyNDYsIDE3OCwgNDYsIDQ3LCAyNDcsIDQ5LCA0NiwgCi0gICAgNDcsIDI0NiwgMjQxLCA0NiwgNDcsIDI0NywgMTEyLCA0NiwgNDcsIDI0NiwgMTIxLCA0NiwgNDcsIDI0NiwgMjQ4LCA0NiwgCi0gICAgNDcsIDI0NiwgMTg0LCA0NiwgNDcsIDI0NywgNTUsIDQ2LCA0NywgMjQ2LCAxNTIsIDQ2LCA0NywgMjQ3LCAyMywgNDYsIDQ3LCAKLSAgICAyNDYsIDIxNSwgNDYsIDQ3LCAyNDcsIDg2LCA0NiwgNDcsIDI0NiwgMTM2LCA0NiwgNDcsIDI0NywgNywgNDYsIDQ3LCAyNDYsIAotICAgIDE5OSwgNDYsIDQ3LCAyNDcsIDcwLCA0NiwgNDcsIDI0NiwgMTY3LCA0NiwgNDcsIDI0NywgMzgsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzAsIDQ2LCA0NywgMjQ3LCAxMDEsIDQ2LCA0NywgMjQ2LCAxMjgsIDQ2LCA0NywgMjQ2LCAyNTUsIDQ2LCA0NywgMjQ2LCAKLSAgICAxOTEsIDQ2LCA0NywgMjQ3LCA2MiwgNDYsIDQ3LCAyNDYsIDE1OSwgNDYsIDQ3LCAyNDcsIDMwLCA0NiwgNDcsIDI0NiwgCi0gICAgMjIyLCA0NiwgNDcsIDI0NywgOTMsIDQ2LCA0NywgMjQ2LCAxNDMsIDQ2LCA0NywgMjQ3LCAxNCwgNDYsIDQ3LCAyNDYsIAotICAgIDIwNiwgNDYsIDQ3LCAyNDcsIDc3LCA0NiwgNDcsIDI0NiwgMTc0LCA0NiwgNDcsIDI0NywgNDUsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzcsIDQ2LCA0NywgMjQ3LCAxMDgsIDQ2LCA0NywgMjQ2LCAxMjQsIDQ2LCA0NywgMjQ2LCAyNTEsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODcsIDQ2LCA0NywgMjQ3LCA1OCwgNDYsIDQ3LCAyNDYsIDE1NSwgNDYsIDQ3LCAyNDcsIDI2LCA0NiwgNDcsIDI0NiwgCi0gICAgMjE4LCA0NiwgNDcsIDI0NywgODksIDQ2LCA0NywgMjQ2LCAxMzksIDQ2LCA0NywgMjQ3LCAxMCwgNDYsIDQ3LCAyNDYsIAotICAgIDIwMiwgNDYsIDQ3LCAyNDcsIDczLCA0NiwgNDcsIDI0NiwgMTcwLCA0NiwgNDcsIDI0NywgNDEsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzMsIDQ2LCA0NywgMjQ3LCAxMDQsIDQ2LCA0NywgMjQ2LCAxMzEsIDQ2LCA0NywgMjQ3LCAyLCA0NiwgNDcsIDI0NiwgCi0gICAgMTk0LCA0NiwgNDcsIDI0NywgNjUsIDQ2LCA0NywgMjQ2LCAxNjIsIDQ2LCA0NywgMjQ3LCAzMywgNDYsIDQ3LCAyNDYsIAotICAgIDIyNSwgNDYsIDQ3LCAyNDcsIDk2LCA0NiwgNDcsIDI0NiwgMTQ2LCA0NiwgNDcsIDI0NywgMTcsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMDksIDQ2LCA0NywgMjQ3LCA4MCwgNDYsIDQ3LCAyNDYsIDE3NywgNDYsIDQ3LCAyNDcsIDQ4LCA0NiwgNDcsIDI0NiwgCi0gICAgMjQwLCA0NiwgNDcsIDI0NywgMTExLCA0NiwgNDcsIDI0NiwgMTE5LCA0NiwgNDcsIDI0NiwgMjQ2LCA0NiwgNDcsIDI0NiwgCi0gICAgMTgyLCA0NiwgNDcsIDI0NywgNTMsIDQ2LCA0NywgMjQ2LCAxNTAsIDQ2LCA0NywgMjQ3LCAyMSwgNDYsIDQ3LCAyNDYsIAotICAgIDIxMywgNDYsIDQ3LCAyNDcsIDg0LCA0NiwgNDcsIDI0NiwgMTM0LCA0NiwgNDcsIDI0NywgNSwgNDYsIDQ3LCAyNDYsIDE5NywgCi0gICAgNDYsIDQ3LCAyNDcsIDY4LCA0NiwgNDcsIDI0NiwgMTY1LCA0NiwgNDcsIDI0NywgMzYsIDQ2LCA0NywgMjQ2LCAyMjgsIDQ2LCAKLSAgICA0NywgMjQ3LCA5OSwgNDYsIDQ3LCAyNDYsIDEyNiwgNDYsIDQ3LCAyNDYsIDI1MywgNDYsIDQ3LCAyNDYsIDE4OSwgNDYsIAotICAgIDQ3LCAyNDcsIDYwLCA0NiwgNDcsIDI0NiwgMTU3LCA0NiwgNDcsIDI0NywgMjgsIDQ2LCA0NywgMjQ2LCAyMjAsIDQ2LCA0NywgCi0gICAgMjQ3LCA5MSwgNDYsIDQ3LCAyNDYsIDE0MSwgNDYsIDQ3LCAyNDcsIDEyLCA0NiwgNDcsIDI0NiwgMjA0LCA0NiwgNDcsIAotICAgIDI0NywgNzUsIDQ2LCA0NywgMjQ2LCAxNzIsIDQ2LCA0NywgMjQ3LCA0MywgNDYsIDQ3LCAyNDYsIDIzNSwgNDYsIDQ3LCAKLSAgICAyNDcsIDEwNiwgNDYsIDQ3LCAyNDYsIDEyMiwgNDYsIDQ3LCAyNDYsIDI0OSwgNDYsIDQ3LCAyNDYsIDE4NSwgNDYsIDQ3LCAKLSAgICAyNDcsIDU2LCA0NiwgNDcsIDI0NiwgMTUzLCA0NiwgNDcsIDI0NywgMjQsIDQ2LCA0NywgMjQ2LCAyMTYsIDQ2LCA0NywgCi0gICAgMjQ3LCA4NywgNDYsIDQ3LCAyNDYsIDEzNywgNDYsIDQ3LCAyNDcsIDgsIDQ2LCA0NywgMjQ2LCAyMDAsIDQ2LCA0NywgMjQ3LCAKLSAgICA3MSwgNDYsIDQ3LCAyNDYsIDE2OCwgNDYsIDQ3LCAyNDcsIDM5LCA0NiwgNDcsIDI0NiwgMjMxLCA0NiwgNDcsIDI0NywgCi0gICAgMTAyLCA0NiwgNDcsIDI0NiwgMTI5LCA0NiwgNDcsIDI0NywgMCwgNDYsIDQ3LCAyNDYsIDE5MiwgNDYsIDQ3LCAyNDcsIDYzLCAKLSAgICA0NiwgNDcsIDI0NiwgMTYwLCA0NiwgNDcsIDI0NywgMzEsIDQ2LCA0NywgMjQ2LCAyMjMsIDQ2LCA0NywgMjQ3LCA5NCwgNDYsIAotICAgIDQ3LCAyNDYsIDE0NCwgNDYsIDQ3LCAyNDcsIDE1LCA0NiwgNDcsIDI0NiwgMjA3LCA0NiwgNDcsIDI0NywgNzgsIDQ2LCA0NywgCi0gICAgMjQ2LCAxNzUsIDQ2LCA0NywgMjQ3LCA0NiwgNDYsIDQ3LCAyNDYsIDIzOCwgNDYsIDQ3LCAyNDcsIDEwOSwgNDYsIDQ3LCAKLSAgICAyNDYsIDEyMCwgNDYsIDQ3LCAyNDYsIDI0NywgNDYsIDQ3LCAyNDYsIDE4MywgNDYsIDQ3LCAyNDcsIDU0LCA0NiwgNDcsIAotICAgIDI0NiwgMTUxLCA0NiwgNDcsIDI0NywgMjIsIDQ2LCA0NywgMjQ2LCAyMTQsIDQ2LCA0NywgMjQ3LCA4NSwgNDYsIDQ3LCAKLSAgICAyNDYsIDEzNSwgNDYsIDQ3LCAyNDcsIDYsIDQ2LCA0NywgMjQ2LCAxOTgsIDQ2LCA0NywgMjQ3LCA2OSwgNDYsIDQ3LCAyNDYsIAotICAgIDE2NiwgNDYsIDQ3LCAyNDcsIDM3LCA0NiwgNDcsIDI0NiwgMjI5LCA0NiwgNDcsIDI0NywgMTAwLCA0NiwgNDcsIDI0NiwgCi0gICAgMTI3LCA0NiwgNDcsIDI0NiwgMjU0LCA0NiwgNDcsIDI0NiwgMTkwLCA0NiwgNDcsIDI0NywgNjEsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNTgsIDQ2LCA0NywgMjQ3LCAyOSwgNDYsIDQ3LCAyNDYsIDIyMSwgNDYsIDQ3LCAyNDcsIDkyLCA0NiwgNDcsIDI0NiwgCi0gICAgMTQyLCA0NiwgNDcsIDI0NywgMTMsIDQ2LCA0NywgMjQ2LCAyMDUsIDQ2LCA0NywgMjQ3LCA3NiwgNDYsIDQ3LCAyNDYsIAotICAgIDE3MywgNDYsIDQ3LCAyNDcsIDQ0LCA0NiwgNDcsIDI0NiwgMjM2LCA0NiwgNDcsIDI0NywgMTA3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTIzLCA0NiwgNDcsIDI0NiwgMjUwLCA0NiwgNDcsIDI0NiwgMTg2LCA0NiwgNDcsIDI0NywgNTcsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNTQsIDQ2LCA0NywgMjQ3LCAyNSwgNDYsIDQ3LCAyNDYsIDIxNywgNDYsIDQ3LCAyNDcsIDg4LCA0NiwgNDcsIDI0NiwgCi0gICAgMTM4LCA0NiwgNDcsIDI0NywgOSwgNDYsIDQ3LCAyNDYsIDIwMSwgNDYsIDQ3LCAyNDcsIDcyLCA0NiwgNDcsIDI0NiwgMTY5LCAKLSAgICA0NiwgNDcsIDI0NywgNDAsIDQ2LCA0NywgMjQ2LCAyMzIsIDQ2LCA0NywgMjQ3LCAxMDMsIDQ2LCA0NywgMjQ2LCAxMzAsIAotICAgIDQ2LCA0NywgMjQ3LCAxLCA0NiwgNDcsIDI0NiwgMTkzLCA0NiwgNDcsIDI0NywgNjQsIDQ2LCA0NywgMjQ2LCAxNjEsIDQ2LCAKLSAgICA0NywgMjQ3LCAzMiwgNDYsIDQ3LCAyNDYsIDIyNCwgNDYsIDQ3LCAyNDcsIDk1LCA0NiwgNDcsIDI0NiwgMTQ1LCA0NiwgNDcsIAotICAgIDI0NywgMTYsIDQ2LCA0NywgMjQ2LCAyMDgsIDQ2LCA0NywgMjQ3LCA3OSwgNDYsIDQ3LCAyNDYsIDE3NiwgNDYsIDQ3LCAKLSAgICAyNDcsIDQ3LCA0NiwgNDcsIDI0NiwgMjM5LCA0NiwgNDcsIDI0NywgMTEwLCA5NywgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgCi0gICAgOTcsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgNTIsIDgwLCAyLCAKLSAgICA2NywgOTEsIDQzLCA0NCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTQwLCAKLSAgICA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDk3LCA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDI0NiwgMTA0LCA4MCwgMiwgMjAzLCAKLSAgICA5MSwgMjE0LCAxNTMsIDgwLCAyLCAyMDMsIDkxLCAyMTQsIDE1MywgMjE1LCAyMTEsIDc0LCAyNDYsIDEwNCwgMjE1LCAyMTEsIAotICAgIDc0LCAxNDAsIDUyLCAyNDgsIDE1NywgNzQsIDk3LCA1MiwgMjQ4LCAxNTcsIDc0LCAxNDAsIDIxNSwgMjExLCAyNDgsIDE1NywgCi0gICAgNzQsIDk3LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDc0LCA5NywgMjE1LCA1OCwgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgOTcsIAotICAgIDgwLCAyLCAyNDYsIDExOCwgMjE4LCAxMzksIDIxNCwgMTUzLCA4MCwgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgODAsIDIxNiwgCi0gICAgNDIsIDEzMCwgOTcsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCAKLSAgICA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc3LCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgCi0gICAgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDI1MywgMjUxLCA5NywgMjUzLCAyNTEsIAotICAgIDE0MCwgNTIsIDI1MywgMjUxLCA5NywgNTIsIDI1MywgMjUxLCAxNDAsIDgwLCAyMTYsIDQyLCA4NSwgMjQ3LCAyNDgsIDk3LCAKLSAgICA4MCwgMjE2LCA0MiwgODUsIDI0NywgMjQ4LCAxNDAsIDgwLCAyNDMsIDI0MywgMjUyLCAxNDEsIDIxNiwgNDIsIDg1LCAyNDcsIAotICAgIDI0OCwgOTcsIDgwLCAyNDMsIDI0MywgMjUyLCAxNDEsIDIxNiwgNDIsIDg1LCAyNDcsIDI0OCwgMjI4LCA1NiwgMjEyLCA5LCAKLSAgICAyMiwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgMjIsIDIxOSwgMjgsIDIxMiwgOSwgNzQsIAotICAgIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA1NiwgMjQ1LCAyMjAsIDgwLCAyLCAxMDMsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA4MCwgMiwgMTAzLCAyMTksIDI4LCAyMTIsIDksIDgwLCAyLCAxMDMsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIyLCAKLSAgICAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMjIsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDgwLCAyMiwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA4MCwgMjIsIAotICAgIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyMiwgMjI4LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDI0NCwgMTc1LCAyNDcsIDI1NCwgCi0gICAgMjQ0LCAxNzUsIDI0NywgMjU1LCAyNDksIDEyNSwgMjIyLCAyMjgsIDI0NywgMjU0LCAyMTksIDI4LCAyNDUsIDIyMCwgODAsIAotICAgIDI0OSwgMTI1LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMjQ5LCAxMjUsIDIxOSwgCi0gICAgMjgsIDI0NSwgMjIwLCA3NCwgMjQ0LCAxNzUsIDI0NywgMjU1LCAyNDksIDEyNSwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAKLSAgICAyMjIsIDIyOCwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCAKLSAgICA4MCwgMjQ5LCAxMjUsIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDI0OSwgMTI1LCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzQsIDIxMiwgMzYsIDgwLCAyMjUsIDcsIDI0NywgMTk1LCAyMjIsIDI1MSwgODAsIDIyNSwgNywgCi0gICAgOTcsIDIxNiwgMTg4LCAyNDksIDkwLCAyMTQsIDE1MiwgODAsIDIyNSwgNywgOTcsIDIxNiwgMTg4LCAyNDksIDkwLCAyNDYsIAotICAgIDEwMywgODAsIDIyNSwgNywgMjQ2LCAxMDQsIDIxNiwgMTg4LCAyNDksIDkwLCAyMzMsIDM3LCA4MCwgMjI1LCA3LCAyNDYsIAotICAgIDEwNCwgMjE2LCAxODgsIDI0OSwgOTAsIDIyMiwgMjQxLCAyMjIsIDI0NCwgMjU0LCAyNiwgMjUwLCAyLCA3NCwgMjMzLCA0MCwgCi0gICAgMjU0LCAyNiwgMjU0LCA4OCwgNzQsIDIxNiwgMTQsIDI1NCwgMjYsIDI1NCwgODgsIDc0LCAyNTEsIDE3NSwgMjU0LCAyNiwgCi0gICAgMjU0LCA4OCwgNzQsIDIxNiwgMTQsIDI1NCwgMjYsIDI1MCwgMiwgODAsIDIsIDIzMCwgMTgxLCAyMTYsIDE0LCAyNTQsIDI2LCAKLSAgICAyNTQsIDg4LCA4MCwgMiwgMjI1LCAyMiwgMjMyLCAxMDgsIDQ0LCAyMjAsIDE1MiwgMjUwLCAyLCA3NCwgMjMyLCAxMDgsIAotICAgIDQzLCAyMjAsIDE1MiwgMjU0LCA4OCwgNzQsIDI1NCwgODgsIDI1MCwgMCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjUwLCAwLCAKLSAgICAyNTAsIDM2LCA3NCwgOTcsIDgwLCA3NywgMjE5LCAyNTEsIDE0MCwgNzQsIDE0MCwgODAsIDc3LCAyMTksIDI1MSwgOTcsIAotICAgIDc0LCAyMTksIDI1MSwgOTcsIDgwLCA3NywgMTQwLCA3NCwgOTcsIDgwLCAyLCA5NiwgNTEsIDE0MCwgODAsIDIsIDk2LCA1MSwgCi0gICAgOTcsIDgwLCAyMTYsIDEzOSwgMjExLCAxNzgsIDQzLCA0NCwgODAsIDIxNiwgMTM5LCA0LCAyNTAsIDM1LCAyMTQsIDE1MywgCi0gICAgMjE1LCA1OCwgODAsIDI0MywgMjQzLCA0LCAyNTAsIDM1LCA0MywgMjUyLCAxMzksIDEyMCwgNDQsIDI1MiwgMTM5LCAxMjQsIAotICAgIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyNCwgNDQsIDI1MiwgMTM5LCAxMjAsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCAKLSAgICA0NCwgMTI0LCAyNTIsIDEzOSwgNDMsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCA0MywgMTI0LCAyNTIsIDEzOSwgNDQsIAotICAgIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyMCwgNDQsIDI1MiwgMTM5LCAxMjAsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCAKLSAgICA0NCwgMTI0LCAyNTIsIDEzOSwgNDQsIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyNCwgNDQsIDI1MiwgMTM5LCAxMjQsIAotICAgIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCA0MywgMTI0LCAyNTIsIDEzOSwgNDMsIDI0MSwgMjU0LCAxNDAsIDI0MSwgMjU1LCAKLSAgICAyLCAyNTIsIDEzOSwgMTIwLCAyMTYsIDQyLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgMjE2LCA0MiwgCi0gICAgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjE2LCA0MiwgMTMwLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyMTYsIAotICAgIDQyLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjE2LCA0MiwgMTMwLCAyMTQsIDE1MywgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgCi0gICAgMjE2LCA0MiwgMTMwLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCAyNDMsIDI0MywgMTMwLCA5NywgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIAotICAgIDQ0LCAyNDMsIDI0MywgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjQzLCAyNDMsIDEzMCwgCi0gICAgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjQzLCAyNDMsIDEzMCwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMTI0LCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjQzLCAyNDMsIAotICAgIDEzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI0MywgMjQzLCAxMzAsIDE0MCwgMjQxLCAyNTUsIAotICAgIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDYsIDIxNCwgMTUzLCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIAotICAgIDI1MSwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAKLSAgICAxMDYsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMjIsIDI1MSwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDk3LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDIxNCwgMTYzLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCA3NywgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjQ2LCAxMDYsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDE0MCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMTQsIDE2MywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCA3NywgMTQwLCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDI0NiwgMTA2LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgMTk5LCAyNDgsIDE1NiwgCi0gICAgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjUyLCA0MywgMTk5LCAyNDgsIDE1NiwgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMTIwLCA3NywgMTk5LCAyNDgsIDE1NiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyNTIsIAotICAgIDQzLCAxOTksIDI0OCwgMTU2LCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjUyLCAzMCwgMjQ2LCAKLSAgICAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNTEsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIAotICAgIDQzLCAyNTIsIDMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI1MSwgNDQsIDUyLCA4MCwgMiwgCi0gICAgMjIyLCAxODMsIDI0MSwgMjM1LCAyNDUsIDk4LCA1LCA3NywgOTcsIDc0LCAyMTYsIDg5LCAyMjYsIDE2OCwgNzcsIDk3LCAKLSAgICA3NCwgMTQwLCA4MCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA5NywgODAsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgOTcsIAotICAgIDgwLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAyMzMsIDE1LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgMjE2LCAxMzksIDIzMywgCi0gICAgMTQsIDI0MiwgMTMwLCA3NywgOTcsIDc0LCAyMTgsIDY0LCA3NywgOTcsIDc0LCAxNDAsIDgwLCAyMTYsIDEzOSwgMjE4LCAKLSAgICA2MywgMjE4LCAyMiwgNzcsIDE0MCwgNzQsIDQzLCAyNDQsIDkxLCAyMTcsIDc3LCA0NCwgMjQ0LCA5MSwgMjE3LCA3NywgCi0gICAgMTIwLCAyNDQsIDkxLCAyMTcsIDc3LCAxMjQsIDI0NCwgOTEsIDIxNywgNzcsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIAotICAgIDI0OCwgNjAsIDIxMCwgMTYwLCAxODcsIDIxOCwgMjQyLCAyMTAsIDE2MCwgMTg3LCAyMTUsIDQ5LCAyNDksIDIyNiwgNDMsIAotICAgIDcxLCAyNDksIDk5LCAxMjcsIDQ0LCA3MSwgMjQ5LCA5OSwgMTI3LCA0MywgNzEsIDIyNiwgMywgNDQsIDcxLCAyMjYsIDMsIAotICAgIDIxMCwgMTYwLCAxODcsIDQzLCAyMzYsIDE1LCAxMjcsIDIxMCwgMTYwLCAxODcsIDQ0LCAyMzYsIDE1LCAxMjcsIDIxMCwgCi0gICAgMTYwLCAxODcsIDQzLCAyNTEsIDI0MiwgMTI3LCAyMTAsIDE2MCwgMTg3LCA0NCwgMjUxLCAyNDIsIDEyNywgNDMsIDQyLCAKLSAgICAyNTEsIDE1OCwgMiwgMjE0LCAxODMsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNCwgMTgzLCA0MywgNDIsIDI1MSwgMTU4LCAKLSAgICAyLCAyMTYsIDExNSwgMjM2LCAwLCAyMTYsIDE0LCAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMiwgMjE2LCAxMTUsIAotICAgIDIzNiwgMCwgMjUxLCAxNzUsIDI0OSwgMTYwLCA0MywgNDIsIDI1MSwgMTU4LCAyLCAyMTYsIDExNSwgMjM2LCAwLCAyNTEsIAotICAgIDE3NSwgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNiwgMTE1LCAyMzYsIDAsIDIxNiwgMTQsIDI0OSwgMTYwLCAKLSAgICA0MywgMjU0LCAxMTAsIDI1MSwgMTU4LCAyLCAyNDcsIDEyMCwgNDQsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMiwgMjQ3LCAxMjAsIAotICAgIDQzLCAyNTQsIDI2LCAyMzMsIDE1LCAxMjcsIDQ0LCAyNTQsIDI2LCAyNDIsIDEzMCwgMTI3LCA1MiwgNDMsIDI1NCwgMjYsIAotICAgIDI0MiwgMTMwLCAxMjcsIDUyLCA0NCwgMjU0LCAyNiwgMjMzLCAxNSwgMTI3LCA0MywgODUsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0NCwgODUsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyNDYsIDExOCwgMjQ0LCAxMzUsIDY3LCAyMTAsIDM1LCAyMzIsIAotICAgIDIxMywgMjMxLCA4OCwgMjU0LCAxMTAsIDIyNiwgMTcwLCAyMzMsIDQ2LCA0NCwgMjU0LCAxMTAsIDIxNCwgMTIsIDIsIDIxOCwgCi0gICAgMjM0LCAyMzEsIDg4LCA0NCwgMjU0LCAxMTAsIDIsIDI0NywgMTIwLCAyNTQsIDExMCwgMiwgMjIyLCA5MiwgMjM1LCAyMTUsIAotICAgIDI1NSwgMywgMjU0LCAxMDksIDIxOCwgMjU1LCAyNTQsIDExMCwgMjI2LCAxNzAsIDIzMywgNDYsIDIxOCwgMjU1LCAyNTQsIAotICAgIDExMCwgMjI2LCAxNzAsIDIxNCwgMTYzLCAyMTUsIDk0LCAyNTQsIDEwOSwgMjIzLCA0OSwgMjU0LCAxMDksIDI1NCwgMTEwLCAKLSAgICAyLCAyMTQsIDE4MywgMjIzLCA0OSwgMjU0LCAxMTAsIDIsIDIxNCwgMTgzLCAyMjYsIDI0OCwgMjU0LCAxMTAsIDIyNiwgCi0gICAgMTcwLCAyMTQsIDE2MywgMjI2LCAyNDgsIDI1NCwgMTEwLCAyMjYsIDE3MCwgMjQ2LCAxMDYsIDIzMSwgODgsIDI1NCwgMTEwLCAKLSAgICAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTIwLCAyMiwgMjIyLCAyNTEsIDIzMSwgODgsIAotICAgIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTIwLCAyMiwgMjMzLCA0NiwgCi0gICAgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCAxMjQsIDIyLCAKLSAgICAyMjIsIDI1MSwgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCAKLSAgICA3LCAxMjQsIDIyLCAyMzMsIDQ2LCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIAotICAgIDgwLCAyMjUsIDcsIDQ0LCAyMiwgMjE0LCAxNjMsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAKLSAgICAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgNDMsIDIyLCAyMTQsIDE2MywgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgCi0gICAgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCA0NCwgMjIsIDI0NiwgMTA2LCAyMzEsIDg4LCAyNTQsIAotICAgIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDQzLCAyMiwgMjQ2LCAxMDYsIDIyMywgCi0gICAgNDksIDI0NSwgMTUyLCAyMjAsIDEyNywgMjQ1LCAxNTIsIDIyMCwgMTI4LCAyLCAyMjYsIDEyMywgMjQ1LCAxNTIsIDIyMCwgCi0gICAgMTI4LCAyLCA0LCAyNTAsIDM2LCA0OCwgMjQ1LCAxNTIsIDIyMCwgMTI4LCAyLCA0NCwgODAsIDQ4LCAyNDUsIDE1MiwgMjIwLCAKLSAgICAxMjgsIDIsIDQzLCA4MCwgNDgsIDI1MCwgMzYsIDIsIDIwMywgMTMwLCAzNywgNjcsIDEzMCwgMzcsIDIyNiwgNywgMzcsIAotICAgIDIyMywgNTAsIDIxOSwgNDYsIDM3LCAyMjUsIDE3MSwgMjUwLCAzNiwgMjQ3LCAxNzMsIDI1MSwgNzgsIDIwMywgMjUyLCAKLSAgICAxNDEsIDIyLCAyMTYsIDE0LCAxNjMsIDI0NywgMTczLCAyNTEsIDc4LCA2NywgMTMwLCAyNTAsIDM2LCAyLCAyMTgsIDI0LCAKLSAgICAyMTEsIDE3OCwgMzcsIDI1NCwgODcsIDI0NywgMTY5LCA1MCwgMTIwLCA4MCwgMjE2LCAxMzksIDI1MCwgMzUsIDM3LCA3MSwgCi0gICAgMjUxLCAxMTMsIDM3LCAyNTEsIDExMywgMzcsIDIzMywgMTQsIDM3LCAyNDIsIDEyOSwgMjUwLCAzNiwgMiwgNCwgMjUwLCAKLSAgICAzNiwgMjE2LCA0MiwgMjE2LCAxOTYsIDIyMiwgMjUxLCAyNTAsIDM2LCAyLCAxMTMsIDIwMywgMjE4LCA5MSwgMjE2LCA0MiwgCi0gICAgMjE2LCAxOTYsIDIyMiwgMjUxLCA5MiwgMjIyLCAyMjgsIDI0NywgMjU1LCAyMTksIDk1LCA5MiwgMjQ0LCAxNzUsIDI0NywgCi0gICAgMjU1LCAyMTksIDk1LCA5MiwgMjUzLCAyMTYsIDkyLCA0LCAyNTAsIDM1LCA5MiwgMjE4LCAyMzQsIDExMywgMjM1LCA2NSwgCi0gICAgMjE4LCAyMzIsIDIxNSwgMjI2LCAyLCA1OSwgNDgsIDIxNSwgMjI2LCAyLCAyMTQsIDE4MywgMjIyLCA5MiwgMjM2LCAwLCAKLSAgICAyMTUsIDIyNSwgMjE1LCAyMjYsIDIsIDIyMCwgMTM0LCAyNTMsIDIwNywgMjUxLCAxNzQsIDQ0LCAyMTUsIDIyNiwgNzcsIAotICAgIDQzLCAyMTUsIDIyNSwgNDMsIDIxNSwgMjI2LCAyNTIsIDMwLCA2NywgMTMwLCA2NywgMjUyLCAxNDEsIDI1MiwgMzAsIDQ0LCAKLSAgICAyMTUsIDIyNSwgMjUxLCAxNjUsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyNTEsIDE2NSwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIAotICAgIDg1LCAyNTEsIDE2NCwgMzAsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAzMCwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDcxLCAKLSAgICAyNDAsIDIzNiwgODUsIDI0MCwgMjM2LCA0MywgMjExLCAyNDQsIDI0NCwgMTM1LCA0NCwgMjExLCAyNDQsIDI0NCwgMTM1LCAKLSAgICA0MywgNTIsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgNDQsIDUyLCAyMTEsIDI0NCwgMjQ0LCAxMzUsIDIzNSwgMjQ4LCAyMzUsIAotICAgIDIzNCwgMjE2LCAxMTIsIDExNywgMjM1LCAyMzQsIDIzNSwgMjM1LCAyMjksIDEwMiwgMiwgNjcsIDEzMCwgMjQ2LCAxMTIsIAotICAgIDIzMCwgODcsIDQyLCAyLCAyNDksIDE4MSwgMjI2LCAxMjcsIDIzNSwgMjQ2LCAyNTMsIDIzNywgMjE5LCAyMTksIDIyNCwgCi0gICAgMTgwLCAyNDUsIDk4LCA1LCAyMiwgMjE5LCA5NywgMjI2LCA3LCAyNDUsIDk4LCA1LCAyMiwgMjE5LCA5NywgMjI2LCA4LCAyLCAKLSAgICAyMTYsIDg5LCA0OCwgMjQwLCAxMDQsIDIxNiwgNDIsIDIyLCAyMTksIDk3LCAyMjYsIDcsIDI0MiwgMTgzLCAyMTgsIDE1NSwgCi0gICAgMjE2LCAxODUsIDI0NiwgMTA1LCAyMTUsIDIyNiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDI0NiwgMTA1LCAyMTUsIDIyNiwgCi0gICAgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDg1LCAyNDcsIDI0OSwgMiwgMTI0LCA3NCwgODUsIDIzMiwgMTA0LCA3MSwgMjUwLCAKLSAgICAzNiwgMiwgMTI0LCA3NCwgODUsIDI1MCwgMzYsIDIsIDEyNCwgNzQsIDI0NSwgODUsIDcxLCAyMTgsIDIzNCwgMjQ1LCA4NSwgCi0gICAgODUsIDIxOCwgMjM0LCAyNDUsIDg1LCA3MSwgMjQ3LCAyNDgsIDI0NSwgODUsIDg1LCAyNDcsIDI0OCwgMjQ1LCA4NSwgNzEsIAotICAgIDI1MCwgMzUsIDI0NSwgODUsIDg1LCAyNTAsIDM1LCAyMjIsIDEzMiwgMjIzLCA1MCwgMjE5LCA0NywgMjI2LCAxNjcsIDIxOSwgCi0gICAgNDcsIDIsIDIyNiwgMTIzLCAyMjMsIDUwLCAyMTksIDQ3LCAyLCAyMDMsIDkxLCAyNTEsIDI0OSwgMjE5LCA0NiwgMjUxLCAKLSAgICAyNDksIDIyMywgNTAsIDIxOSwgNDYsIDUyLCAyMjUsIDIyLCAyMTUsIDIxMSwgMjI1LCAyMiwgMjMzLCA0MiwgMjQ5LCA5MSwgCi0gICAgMjU0LCAxMTAsIDEyNywgMjIyLCAyNDcsIDI0OSwgOTEsIDI1NCwgMTEwLCAxMjcsIDIxNiwgNzgsIDIzMCwgMTc5LCAyMzAsIAotICAgIDI0LCAzNywgNTksIDIyNiwgMTY3LCAyMzAsIDI0LCAzNywgOTYsIDIyNiwgMTY3LCAyMzAsIDI0LCAzNywgMzAsIDIyNiwgCi0gICAgMTY3LCAyMzAsIDI0LCAyMTQsIDE3NiwgMjI2LCAxNjgsIDIsIDI0NywgMTIwLCAyMzAsIDI0LCAyMTQsIDE3NiwgMjI2LCAKLSAgICAxNjgsIDIsIDIyNSwgMjIsIDIzMCwgMjQsIDQyLCAyMzUsIDE5OSwgMjI2LCAxNjcsIDIzMCwgMjQsIDQyLCAyMTQsIDE3NiwgCi0gICAgMjI2LCAxNjcsIDExMywgMjMyLCAxNDYsIDIyLCAyMjYsIDE2NywgMTEzLCAyMzIsIDE0NiwgMTc3LCAyMjYsIDE2NywgMjMwLCAKLSAgICAyNCwgMzAsIDIyNiwgMTY3LCAyMzAsIDE1NCwgMTEzLCAyMTgsIDQzLCAyMTgsIDQxLCAyLCAyMzUsIDIxMSwgMjI0LCAyNCwgCi0gICAgMjM1LCAyMTIsIDIyNiwgMTY3LCAyNDQsIDk5LCAyMjUsIDI1NSwgMjM1LCAyMTEsIDIzNSwgMjEyLCAyLCA1MiwgOTEsIAotICAgIDIzNSwgMjEyLCAyNTMsIDE3MywgMiwgMjE5LCA5NSwgMjUwLCAzMiwgMjQzLCAyMjYsIDI1NCwgODgsIDIzNSwgMjA5LCAKLSAgICAyMzIsIDIxNCwgMjM1LCAyMTAsIDIsIDIyMywgMTE1LCAyMjUsIDIzNywgMjU0LCAyLCAyMjUsIDEsIDIzMiwgMjE0LCAyMzUsIAotICAgIDIxMCwgMiwgMjIwLCAxNTIsIDIyNSwgMjM3LCAyNTQsIDIsIDIyNSwgMSwgMjMyLCAyMTQsIDIzNSwgMjEwLCAyMjgsIDUyLCAKLSAgICAyMzUsIDI1MCwgMjE2LCAxOTYsIDIyNSwgMSwgMjM1LCAyMTIsIDI1NCwgMiwgMTE1LCAyMjUsIDExLCAyMjYsIDE2NywgCi0gICAgMjI0LCAxOCwgMjM1LCAyMTIsIDIyNiwgMTY3LCAyMzUsIDIxMiwgMiwgMTQwLCA4MCwgMiwgMTAzLCAyMzUsIDIxMiwgMiwgCi0gICAgMzAsIDUwLCAyMzUsIDIxMiwgMiwgMjM1LCAxOTgsIDIzNSwgMjEyLCAyLCAyMTQsIDE3NSwgMjM1LCAyMTIsIDIsIDIyNiwgCi0gICAgMTIzLCAyMzUsIDIxMiwgMiwgMjE0LCAxODMsIDIzNSwgNjYsIDIzMywgODUsIDQzLCAyMTUsIDIyNiwgMjI2LCAxNjcsIAotICAgIDIxMCwgMTYwLCAxODcsIDIyMSwgMjAxLCAyNDksIDIwOSwgMjEwLCAxNjAsIDE4NywgMjIxLCAyMDEsIDIyNSwgNTYsIDIxMCwgCi0gICAgMTYwLCAxODcsIDIyMSwgMjAxLCAyMjQsIDE3NiwgOTYsIDUsIDIsIDQsIDI1MCwgMzYsIDQ4LCA5NiwgNSwgMiwgMjUwLCAKLSAgICAzMSwgMjU1LCAxNSwgNDgsIDk2LCA1LCAyLCAyMTYsIDg5LCA0OCwgOTYsIDUsIDIsIDU5LCA1MSwgOTYsIDUsIDIsIDIxNiwgCi0gICAgODksIDUxLCA5NiwgNSwgMiwgMjE4LCA2NSwgMTA1LCA5NiwgNSwgMiwgODUsIDIxNSwgMjI1LCAyMzAsIDE4MiwgNSwgMiwgCi0gICAgMjQ5LCAyMjAsIDQ4LCAyMzAsIDE4MiwgNSwgMiwgNTksIDUxLCAyMzAsIDE4MiwgNSwgMiwgMjQ0LCAxNzUsIDI0NywgMTE4LCAKLSAgICAyMzAsIDE4MiwgNSwgMiwgMjIyLCAyMjgsIDI0NywgMTE4LCA5NiwgNSwgMjM2LCAwLCA0MywgMTYzLCAyNTAsIDM1LCA5NiwgCi0gICAgNSwgMjM2LCAwLCA0NCwgMTYzLCAyNTAsIDM1LCAyMTMsIDI1NCwgMTc3LCAyNDksIDEzMSwgMjI0LCAxODAsIDIzMCwgODQsIAotICAgIDUsIDIsIDU5LCA0OCwgMjMwLCA4NCwgNSwgMiwgMjE0LCAxODMsIDIyMCwgMTQ5LCAyMjQsIDE4MSwgMiwgMjUxLCAxNzUsIAotICAgIDI0OSwgMjU1LCAyMTksIDc3LCAyMjQsIDE4MCwgMjMwLCA4NCwgNSwgMjM2LCAwLCA0MywgMTYzLCAyNTAsIDM1LCAyMzAsIAotICAgIDg0LCA1LCAyMzYsIDAsIDQ0LCAxNjMsIDI1MCwgMzUsIDM3LCAyMzAsIDg0LCA1LCAyLCAyNTAsIDMxLCAyNTUsIDE0LCAKLSAgICAyMzAsIDg0LCA1LCAyMzYsIDAsIDUyLCAyNTAsIDM1LCAzNywgMjQ3LCAxNjksIDUwLCA5NiwgNSwgMjM2LCAwLCAyMTUsIAotICAgIDIyNSwgMjMwLCAxODIsIDUsIDIzNiwgMCwgMjE1LCAyMjUsIDIzMCwgODQsIDUsIDIzNiwgMCwgMjE1LCAyMjUsIDIzNSwgCi0gICAgMjA2LCAyMjQsIDE4MCwgMjIyLCAyNDIsIDIzNSwgMjA2LCAyMjQsIDE4MCwgMjEwLCAxNjAsIDE4NywgMjIzLCA5MCwgMjQ5LCAKLSAgICAyMDksIDI1NCwgMTM0LCAxNzcsIDI0OSwgMTY1LCAyMzUsIDE5OSwgMiwgMjQ3LCAxMjAsIDIxNCwgMTc2LCAyLCAyMzAsIAotICAgIDE4MiwgNTAsIDIxNCwgMTc2LCAyLCAyMjYsIDEyMywgMjM1LCAxOTksIDIsIDIyNiwgMTIzLCAyMzUsIDE5OSwgMiwgMjMyLCAKLSAgICAxNDYsIDI1NCwgMTE4LCAyMTQsIDE3NiwgMiwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMTQsIDE3NiwgNzcsIDIzNSwgMTk4LCAKLSAgICAyMzUsIDE5OSwgNzcsIDIxNCwgMTc1LCAyMTQsIDE3NiwgNzcsIDI1MiwgMTQxLCA3NywgMjM1LCAxOTgsIDIzNSwgMTk5LCAKLSAgICA3NywgMjUyLCAxNDEsIDc3LCAyMTQsIDE3NSwgMjE0LCAxNzYsIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyLCAyMTQsIDE3NSwgCi0gICAgMjM1LCAxOTksIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyLCAyMzUsIDE5OCwgMjUwLCAwLCAyMTQsIDE3NiwgMiwgMjIwLCAKLSAgICAxMzMsIDI1MCwgMCwgMjM1LCAxOTksIDIsIDIyMCwgMTMzLCA1MiwgNDIsIDIzNSwgMTk4LCA1MiwgNDIsIDIxNCwgMTc1LCAKLSAgICAyNTAsIDAsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNCwgMjIsIDIxOSwgNzcsIDIyNCwgMTgwLCAyMzIsIDE0NiwgMjIsIDIsIAotICAgIDU5LCA0OCwgMjMyLCAxNDYsIDE3NywgMiwgNTksIDQ4LCA1MiwgMjMyLCAxNDYsIDI1NCwgMTE4LCA1MiwgMjMyLCAxNDYsIAotICAgIDIyNiwgMTU4LCAxMTMsIDIzNSwgMjAwLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDExMywgMjM1LCAyMDAsIDIzMiwgMTQ2LCAKLSAgICAyMjYsIDE1OCwgMjE5LCA4NSwgMjMzLCA4NSwgMjI2LCAxNTgsIDIxOSwgODUsIDIzMywgODUsIDI1NCwgMTE4LCAyMzIsIAotICAgIDE0NiwgMTc3LCAyMjYsIDEyMSwgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzIsIDE0NiwgMjIsIDIsIDIzMCwgMjI0LCAyMTgsIAotICAgIDEzOSwgMjMyLCAxNDYsIDE3NywgMiwgMjMwLCAyMjQsIDIxOCwgMTM5LCAyMzIsIDE0NiwgMjIsIDIsIDIwMywgMjQ4LCAKLSAgICAxNTYsIDIzMiwgMTQ2LCAxNzcsIDIsIDIwMywgMjQ4LCAxNTYsIDIzMiwgMTQ2LCAyMiwgMiwgNTIsIDIyNiwgMTIzLCAyMzIsIAotICAgIDE0NiwgMjIsIDIsIDIxNCwgMTgzLCAyMzIsIDE0NiwgMjIsIDIsIDUyLCAyMTQsIDE4MywgNCwgMjEzLCAyNTEsIDIsIDIxNCwgCi0gICAgMTgzLCAyMzIsIDE0NiwgMTc3LCAyLCA1MiwgMjI2LCAxMjMsIDIzMiwgMTQ2LCAxNzcsIDIsIDUyLCAyMTQsIDE4MywgMjEwLCAKLSAgICAxNjAsIDE4NywgMjQ3LCAxMjksIDI1NCwgNzksIDIxMCwgMTYwLCAxODcsIDIyMywgMTQ4LCAyNTQsIDc5LCAyNDUsIDk4LCAKLSAgICA1LCAyLCA1OSwgNTEsIDI0MCwgMTA0LCAyLCA1OSwgNDgsIDIxNSwgMjExLCAyMDMsIDI1MiwgMTQxLCAyLCA1MiwgNjcsIAotICAgIDkxLCAyMTUsIDIxMSwgMjAzLCAyNTIsIDE0MSwgMiwgMjE1LCAyMTEsIDY3LCA5MSwgMjE2LCA4OSwgMjI2LCAxNjgsIDIsIAotICAgIDU5LCA0OCwgMjE2LCA4OSwgMjI2LCAxNjgsIDIsIDIyMiwgMjI4LCAyNDcsIDExOCwgMjE5LCAxNjIsIDIzMCwgMTgyLCAKLSAgICAyMTksIDE2MSwgMjQ5LCAxOTksIDIsIDU5LCA0OCwgMjQ1LCA5OCwgMiwgMjUzLCAyMTYsIDI1NCwgMTQ4LCAxMjgsIDIxNiwgCi0gICAgNDIsIDIsIDI1MCwgMzEsIDI1NSwgMTQsIDI1NCwgNDgsIDEyOCwgMTc3LCAxMjgsIDExMSwgMjQ1LCA5OCwgNSwgNzcsIDk2LCAKLSAgICA1MCwgOTYsIDUsIDc3LCAyNDUsIDk4LCA1MCwgMjQ1LCA5OCwgNSwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA1MiwgMjQ5LCAKLSAgICAyMjcsIDI0NSwgOTksIDExMywgMjQ5LCAxOTQsIDI0NSwgOTgsIDIxOSwgMTc2LCAxMzQsIDI0OSwgMTk0LCAyNDUsIDk4LCAKLSAgICAyMTksIDE3NiwgMjQ1LCA5OCwgNSwgMiwgMTEzLCAxNzAsIDc3LCAyMiwgMTEzLCAxNzAsIDUxLCAyNDUsIDk0LCAyLCAyNDQsIAotICAgIDExLCAxNzAsIDQ4LCAyMzMsIDE1LCAyLCAyNTAsIDM2LCAyMzUsIDIxNSwgMjQyLCAxMzAsIDIsIDI1MCwgMzYsIDIzNSwgCi0gICAgMjE1LCAyMzMsIDE1LCAyLCAyMjQsIDEzLCAxNjQsIDQ4LCAyNDIsIDEzMCwgMiwgMjI0LCAxMywgMTY0LCA0OCwgMjMzLCAKLSAgICAxNSwgMTc3LCAyMTksIDk3LCAxMjgsIDExMSwgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAxMTEsIDIzMywgMTUsIAotICAgIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgMjM1LCAyMTUsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgCi0gICAgMjE2LCA0MiwgMiwgNTksIDIzNSwgMjE1LCAyMzMsIDE1LCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAKLSAgICAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCA0OCwgMjMzLCAxNSwgMTc3LCAyMTksIDk3LCAKLSAgICAxMjgsIDIxNiwgNDIsIDIsIDU5LCA3NywgMjIyLCAyNTEsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgCi0gICAgMiwgNTksIDc3LCAyMzMsIDQ2LCAyMzMsIDE1LCAxNzcsIDI1NCwgNDksIDI0MiwgMTMwLCAxNzcsIDI1NCwgNDksIDIzMywgCi0gICAgMTUsIDIyLCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIDI0MiwgMTMwLCAyMiwgMjE5LCAxNTMsIDIyOCwgNTIsIAotICAgIDEyOCwgMTExLCAyMzMsIDE1LCAyMiwgMjI4LCA1MiwgMjU0LCA0OSwgMjQyLCAxMzAsIDIyLCAyMjgsIDUyLCAyNTQsIDQ5LCAKLSAgICAyMzMsIDE1LCA3NywgMjQ2LCAxMTEsIDEyOCwgNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgNzcsIDI0NiwgMTExLCAxMjgsIAotICAgIDc3LCAyMzMsIDE0LCAyMzMsIDE1LCA3NywgMjE5LCAxNjIsIDE3NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDc3LCAyMTksIDE2MiwgCi0gICAgMTc3LCAyNDUsIDk5LCAyMzMsIDE1LCA3NywgMjE5LCAxNjIsIDc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDc3LCAyMTksIAotICAgIDE2MiwgNzcsIDIzMywgMTQsIDIzMywgMTUsIDc3LCAyNDIsIDEzMCwgNzcsIDI0NiwgMTExLCAyNDUsIDk5LCAyNDIsIDEzMCwgCi0gICAgNzcsIDIzMywgMTUsIDc3LCAyNDYsIDExMSwgMjQ1LCA5OSwgMjMzLCAxNSwgNzcsIDIxOSwgOTcsIDEyOCwgNzcsIDI0MiwgCi0gICAgMTMwLCA3NywgMjE5LCA5NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDc3LCAyMTksIDk3LCAxMjgsIDc3LCAyMzMsIDE1LCA3NywgCi0gICAgMjE5LCA5NywgMjQ1LCA5OSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDIxOSwgOTcsIDEyOCwgMjE2LCAKLSAgICA0MiwgMTc3LCAyNDIsIDEyOSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTUsIDIsIDU5LCAyMzUsIDIxNSwgCi0gICAgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTMwLCAyLCA1OSwgMjM1LCAyMTUsIDI0NiwgMTExLCAxMjgsIAotICAgIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMjQ2LCAxMTEsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEyOSwgMjQ2LCAxMTEsIAotICAgIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAyNDYsIDExMSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAKLSAgICAxNzcsIDI0MiwgMTI5LCAyMTksIDE2MiwgMTc3LCAyMzMsIDE0LCAyMTksIDE2MiwgMTc3LCAyNDIsIDEyOSwgMjE5LCAxNjIsIAotICAgIDc3LCAyMzMsIDE1LCA3NywgMjQ1LCA5OCwgNTAsIDIxOSwgMTYyLCA3NywgMjQyLCAxMzAsIDc3LCAyNDUsIDk4LCA1MCwgCi0gICAgNTIsIDIyOSwgOTEsIDIzMywgMTQsIDUyLCAyMjksIDkxLCAyNDIsIDEyOSwgNTIsIDIyOSwgOTEsIDIzMywgMTUsIDIsIAotICAgIDIxNCwgMTgzLCAyNDIsIDEzMCwgMjI2LCAxMjEsIDIzMywgMTQsIDI0MiwgMTMwLCAyNTIsIDMwLCAyMzMsIDE0LCAyMzMsIAotICAgIDE1LCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTIsIDI0MiwgMTMwLCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTIsIDIzMywgCi0gICAgMTUsIDI1MCwgMCwgMjUxLCA3OCwgMjQ5LCA5MywgNzcsIDIxOSwgOTcsIDI0NSwgOTksIDI0MiwgMTMwLCAyNTAsIDAsIAotICAgIDI1MSwgNzgsIDI0OSwgOTMsIDc3LCAyMTksIDk3LCAyNDUsIDk5LCAyMTksIDc4LCAyMTYsIDIwMCwgMjMzLCA4MywgMjE2LCAKLSAgICAyMDAsIDIxOSwgNzgsIDIxNiwgMjAxLCAxNzcsIDEyOCwgMTExLCAyMzMsIDgzLCAyMTYsIDIwMSwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjQ1LCA5OCwgNSwgMiwgMjUxLCAxMDgsIDQ4LCAyMjQsIDIwMywgNzcsIDIxOSwgMTUzLCAyNDUsIDk4LCA1MCwgMjE4LCAKLSAgICA1NiwgNzcsIDIxOSwgMTUzLCAyNDUsIDk4LCA1MCwgMjI0LCAyMDMsIDc3LCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIAotICAgIDIxOCwgNTYsIDc3LCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIDIyNCwgMjAzLCA3NywgMjQ1LCA5OCwgNTAsIDIxOCwgCi0gICAgNTYsIDc3LCAyNDUsIDk4LCA1MCwgMjI0LCAyMDMsIDc3LCAyMjgsIDUyLCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDIyOCwgCi0gICAgNTIsIDEyOCwgMTExLCAyMjQsIDIwMywgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDI1NCwgMTQ4LCAKLSAgICAxMjgsIDExMSwgMjI0LCAyMDMsIDc3LCAyMjgsIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNTYsIDc3LCAyMjgsIAotICAgIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDUyLCAyMjQsIDIwMiwgNTIsIDIxOCwgNTUsIDIxOCwgNjQsIDIsIDI0NywgMTIwLCAKLSAgICAyMTgsIDIyLCAyLCAyNDcsIDEyMCwgMjE4LCA2NCwgMiwgOTYsIDUsIDUxLCAyMTgsIDIyLCAyLCA5NiwgNSwgNTEsIDIxOCwgCi0gICAgNjQsIDIsIDIzMCwgODQsIDUsIDUxLCAyMTgsIDIyLCAyLCAyMzAsIDg0LCA1LCA1MSwgMjE4LCA2NCwgNjQsIDE3NywgMTI4LCAKLSAgICAyMTYsIDQyLCAyLCA1OSwgNDgsIDIxOCwgMjIsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAyMTgsIDY0LCAKLSAgICA2NCwgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIDIyLCA2NCwgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIDY0LCA2NCwgNzcsIDIxNiwgCi0gICAgODksIDIyNiwgMTY3LCAyMTgsIDIyLCA2NCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCAyMTgsIDY0LCA2NCwgNzcsIDI1NCwgCi0gICAgMTQ4LCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNjQsIDY0LCA3NywgMjI4LCAKLSAgICA1MiwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCA3NywgMjI4LCA1MiwgMTI4LCAxMTEsIDQyLCA0MywgMjA0LCA5MywgMjI2LCAKLSAgICAxNjcsIDQyLCA0NCwgMjA0LCA5MywgMjI2LCAxNjcsIDI1MCwgMCwgMjE4LCA2MywgMjUwLCAwLCAyMTgsIDIxLCAyNTAsIDAsIAotICAgIDIxOCwgNjQsIDE3NywgMTI4LCAxMTEsIDI1MCwgMCwgMjE4LCAyMiwgMTc3LCAxMjgsIDExMSwgMjE4LCA2NCwgNzcsIDIxOCwgCi0gICAgMjEsIDIxOCwgMjIsIDc3LCAyMTgsIDYzLCAyMTgsIDY0LCA3NywgMjE4LCA2MywgMjE4LCAyMiwgNzcsIDIxOCwgMjEsIAotICAgIDIxOCwgMjIsIDI1MiwgMzAsIDIxOCwgNjMsIDIxOCwgMjIsIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyNTEsIDc4LCAyNDgsIAotICAgIDE1NywgMiwgMjE4LCA2MywgMjQ1LCAxNzAsIDY0LCAyMjYsIDE3MCwgMjQ2LCAxMDMsIDIyNSwgNDgsIDIsIDIxNywgMTIsIAotICAgIDIxNiwgMTMsIDIxNSwgMjQwLCAyMzUsIDE5OCwgMjQ0LCAyMSwgMjI4LCA2NSwgMjE5LCAyNTEsIDQzLCAyMTcsIDg3LCAKLSAgICAyMTksIDI1MSwgMTI0LCAyMTcsIDg3LCAyMTksIDI1MSwgMTIwLCAyMTcsIDg3LCAyMjUsIDE3MiwgMiwgMjIyLCA5MSwgNjcsIAotICAgIDI1MiwgMTQxLCAyMTUsIDIxMSwgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDEsIDQzLCAyMTUsIDkzLCA2NywgMjUyLCAKLSAgICAxNDEsIDUyLCA0MywgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQzLCAyMTUsIDkzLCAxOTksIDI0OCwgMTU3LCAKLSAgICAyNDMsIDI0MywgNDMsIDIzMSwgNjMsIDY0LCA1MiwgMjEzLCAyMzksIDIxOSwgMjUxLCAxMjQsIDIxNywgODgsIDIsIDIyNiwgCi0gICAgMTIzLCAyMTksIDI1MSwgMTIwLCAyMTcsIDg4LCAyLCAyMTQsIDE4MywgMjE5LCAyNTEsIDEyMCwgMjE3LCA4OCwgNzcsIAotICAgIDIxOSwgMjUxLCAxMjQsIDIxNywgODcsIDUyLCAxMjQsIDIxNywgODcsIDUyLCAxMjAsIDIxNywgODcsIDUyLCAyMTgsIDEwMywgCi0gICAgMjI4LCA1MiwgNTAsIDIyMywgNDksIDUyLCAyMTgsIDEwMywgMjI4LCA1MiwgNTAsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDcsIAotICAgIDE3NSwgMiwgMjIzLCA0OSwgMjI5LCAxMDEsIDIxOSwgOTUsIDY3LCAyMzIsIDIxNCwgMiwgMjUwLCAzNiwgNDgsIDY3LCAKLSAgICAyMzIsIDIxNCwgMiwgMjUwLCAzNiwgNTEsIDEyNCwgMjE3LCA4OCwgMiwgMjUwLCAzNiwgNTEsIDIyNiwgOCwgMiwgMjAzLCAKLSAgICA5MSwgMjI2LCA4LCAyLCAyMTYsIDg5LCAyMjYsIDE2NywgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgMjUxLCAyNDQsIDIyMywgCi0gICAgOTEsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDIsIDIwMywgOTEsIDIxNSwgMjExLCAyNDksIDIyNywgMjI2LCAxNjcsIAotICAgIDIxNSwgMjExLCAyMjksIDkxLCAyMzMsIDE0LCAyMTUsIDIxMSwgMjI5LCA5MSwgMjQyLCAxMjksIDI0NiwgMTExLCAyMTksIAotICAgIDk3LCAyMzMsIDE1LCAxNzcsIDEyOCwgMTExLCAyNDYsIDExMSwgMjE5LCA5NywgMjQyLCAxMzAsIDE3NywgMTI4LCAxMTEsIAotICAgIDIxNSwgMjExLCAyMTksIDQ3LCAyNTEsIDI0NCwgMjIzLCA5MSwgMjMzLCA4NSwgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgCi0gICAgMjI2LCAxNjcsIDUyLCAyMTksIDQ3LCAyMjYsIDE2NywgNzEsIDY3LCAxMzAsIDIzMCwgMjQsIDcxLCA2NywgMTMwLCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzEsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDcxLCA3NCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDcxLCA3NCwgCi0gICAgMjE5LCAyOCwgMjEyLCA5LCA3MSwgNzQsIDQzLCA0NCwgNzEsIDc0LCAxNDAsIDg1LCA3NCwgMjE0LCAxNTMsIDg1LCA3NCwgCi0gICAgMjQ2LCAxMDQsIDg1LCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDg1LCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA4NSwgNzQsIAotICAgIDIxOSwgMjgsIDI0NSwgMjIwLCA4NSwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgODUsIDc0LCA0MywgNDQsIDg1LCA3NCwgMTIwLCAKLSAgICAxMjQsIDg1LCA3NCwgOTcsIDgwLCAyLCAyMTYsIDc3LCAyNDYsIDEwMywgOTcsIDgwLCAyLCAyMTYsIDc3LCAyMTQsIDE1MiwgCi0gICAgMTQwLCA4MCwgMiwgMjE2LCA3NywgMjQ2LCAxMDMsIDE0MCwgODAsIDIsIDIxNiwgNzcsIDIxNCwgMTUyLCA0MiwgMiwgMjE2LCAKLSAgICAxNCwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDI1MSwgMTc1LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyNDcsIDI1NSwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIzMiwgMTA4LCA0MywgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIAotICAgIDI0NywgMjQ5LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAyNDcsIDI0OSwgCi0gICAgMiwgMjE2LCAxNCwgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIDIsIDI1MSwgMTc1LCAxNjMsIDI1MSwgMjIxLCAyNDYsIAotICAgIDExOCwgMjE4LCAyMzQsIDg1LCAyMzMsIDg1LCAyMTgsIDIzNCwgNzEsIDIzMywgODUsIDIxOCwgMjM0LCA4NSwgMjEzLCAKLSAgICAxODcsIDQsIDIxOCwgMjM0LCA3MSwgMjEzLCAxODcsIDQsIDIxOCwgMjM0LCA4NSwgMjI1LCAxOTAsIDcxLCAyMjUsIDE5MCwgCi0gICAgNzEsIDI0MSwgMTkzLCA4NSwgMjQxLCAxOTMsIDIwMywgODUsIDI0MSwgMTkzLCA4NSwgMjMzLCA4NSwgMjUwLCAzNSwgODUsIAotICAgIDIzMSwgODIsIDI0NywgMjQ4LCA3MSwgMjMxLCA4MiwgMjQ3LCAyNDgsIDg1LCAyMzEsIDgyLCAyMzIsIDEwNCwgNzEsIDIzMSwgCi0gICAgODIsIDIzMiwgMTA0LCA4NSwgNCwgMjQ3LCAyNDgsIDg1LCA0LCAyMzIsIDEwNCwgNzEsIDQsIDIzMiwgMTA0LCA4NSwgMjAzLCAKLSAgICAyNDUsIDE2NCwgNzEsIDIwMywgMjQ1LCAxNjQsIDg1LCA2NywgMjQ1LCAxNjQsIDcxLCA2NywgMjQ1LCAxNjQsIDQzLCA4MCwgCi0gICAgMiwgNCwgMjUwLCAzNSwgMTM0LCAxNDAsIDI1MywgMjQ3LCA0MywgODAsIDIsIDM3LCAyMjUsIDIyLCAxOTksIDE0MCwgMjE4LCAKLSAgICAyMzAsIDc0LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDUyLCA2NywgOTEsIAotICAgIDE0MCwgMjE1LCA1OCwgODAsIDI0MywgMjQzLCAxMzAsIDE0MCwgMjE1LCA1OCwgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgCi0gICAgMTQwLCA4MCwgMiwgMjQ2LCAxMTgsIDIxOCwgMTM5LCAxNDAsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDE0MCwgODAsIAotICAgIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDIxNywgNzcsIDE0MCwgMjE1LCA1OCwgCi0gICAgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCA5MSwgCi0gICAgMTQwLCA4MCwgMjE2LCAxMzksIDIxMSwgMTc4LCAyMTIsIDM2LCA4MCwgMjI1LCA3LCAyNDcsIDE5NSwgMjMzLCA0NiwgMjQ1LCAKLSAgICA5OCwgNSwgNzcsIDE0MCwgNzQsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgMTY4LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgNzcsIAotICAgIDIyMywgNTAsIDI1NCwgMTQ4LCAxMjgsIDExMSwgOTcsIDgwLCAyMTYsIDEzOSwgMjQyLCAxMjksIDk3LCA4MCwgMjE2LCAKLSAgICAxMzksIDIxOCwgMjEsIDE0MCwgMjI0LCAyNCwgNzQsIDk3LCAyMjQsIDI0LCA3NCwgMjIzLCA1MCwgMjE2LCA4OSwgMjI2LCAKLSAgICAxNjgsIDc3LCA5NywgNzQsIDk3LCA4MCwgNzcsIDIyMywgNTAsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE2LCA4OSwgMjI2LCAKLSAgICAxNjgsIDc3LCAxNDAsIDc0LCAxNDAsIDgwLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAxNDAsIDgwLCA3NywgMjIzLCA1MCwgCi0gICAgMjE2LCA4OSwgMjI2LCAxNjcsIDk3LCA4MCwgNzcsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgMTY3LCA3MSwgMjMxLCA4MiwgCi0gICAgMjE4LCAxNTYsIDg1LCA0LCAyMTgsIDE1NiwgNzEsIDQsIDIxOCwgMTU2LCA4NSwgMjIyLCAyNDcsIDIyNSwgMTkwLCA3MSwgCi0gICAgMjIyLCAyNDcsIDIyNSwgMTkwLCAxMTQsIDIzMywgODUsIDI1MCwgMzUsIDExNCwgMjI2LCAxMjQsIDIsIDIyNiwgMTI0LCAKLSAgICAyMzUsIDIxNSwgMTE0LCAyNTAsIDM2LCAyLCAyNTAsIDM2LCAyMzUsIDIxNSwgMTE0LCAyNTAsIDM1LCAxMTQsIDM3LCAyMjEsIAotICAgIDI1NCwgMTQ1LCA2LCAxLCAyNTMsIDE1OSwgMTQ1LCA2LCAxLCAyNTEsIDExNywgMTQ1LCA2LCAxLCAyMTMsIDI1MywgMTQ1LCAKLSAgICA2LCAxLCAyNDIsIDE4NSwgMTQ1LCA2LCAxLCAyNDcsIDE0MCwgMTQ1LCA2LCAxLCAyMTEsIDIxLCAxNDUsIDYsIDEsIDIxMCwgCi0gICAgNjgsIDE0NSwgNiwgMSwgMjQ2LCAzNCwgMTQ1LCA2LCAxLCAyMTAsIDkxLCAxNDUsIDYsIDEsIDIzNSwgMTQ4LCAxNDUsIDYsIAotICAgIDEsIDY1LCAyMzUsIDE0OCwgMTQ1LCA2LCAxLCA3MywgMTQ1LCA2LCAxLCAyNDcsIDE2MCwgMTQ1LCA2LCAxLCAyMzQsIDI0MCwgCi0gICAgMTQ1LCA2LCAxLCAyMzIsIDE4NiwgMTQ1LCA2LCAxLCAyMzAsIDI5LCAxNDUsIDYsIDEsIDIyOSwgMTkxLCAxNDUsIDYsIDEsIAotICAgIDIyNiwgMTg1LCAxNDUsIDYsIDEsIDIyNSwgNCwgMTQ1LCA2LCAxLCAyMjIsIDIyNywgMTQ1LCA2LCAxLCAyMTksIDgzLCAKLSAgICAxNDUsIDYsIDEsIDIxNSwgODEsIDE0NSwgNiwgMSwgMjE0LCAyMDEsIDE0NSwgNiwgMSwgMjQzLCAyNDYsIDE0NSwgNiwgMSwgCi0gICAgMjQxLCAxOTksIDE0NSwgNiwgMSwgMjI2LCAxMzUsIDE0NSwgNiwgMSwgMjI1LCAyMjEsIDE0NSwgNiwgMSwgMjE5LCAyMjgsIAotICAgIDE0NSwgNiwgMSwgMjE1LCAxNjcsIDE0NSwgNiwgMSwgMjUwLCA3NSwgMTQ1LCA2LCAxLCAyMjAsIDEwMiwgMTQ1LCA2LCAxLCAKLSAgICAyMTEsIDI3LCAxNDUsIDYsIDEsIDIxMSwgMjksIDE0NSwgNiwgMSwgMjExLCA1NywgMTQ1LCA2LCAxLCAyMTgsIDI1MywgCi0gICAgMTYyLCAxNDUsIDYsIDEsIDIxMCwgMjEyLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTg0LCAKLSAgICAyLCAyMTcsIDc3LCAxNDUsIDYsIDEsIDIxMCwgMjQ0LCAxNDUsIDYsIDEsIDIzNSwgMTg0LCA0LCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyNTEsIDI0OSwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjM1LCAxODQsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyNDQsIDgyLCAxNDUsIDYsIDEsIDIzNSwgMTQ2LCAxNDUsIDYsIDEsIDIxOSwgMjI3LCAxNDUsIDYsIDEsIDIxNSwgCi0gICAgMjAyLCA2MSwgMTQ1LCA2LCAxLCAyMzMsIDc1LCAyMzAsIDI5LCAxNDUsIDQsIDEsIDI1MywgMTU5LCAxNDUsIDQsIDEsIAotICAgIDI1MSwgMTE3LCAxNDUsIDQsIDEsIDIxMywgMjUzLCAxNDUsIDQsIDEsIDI0MiwgMTg1LCAxNDUsIDQsIDEsIDI0NywgMTQwLCAKLSAgICAxNDUsIDQsIDEsIDIxMSwgMjEsIDE0NSwgNCwgMSwgMjEwLCA2OCwgMTQ1LCA0LCAxLCAyNDYsIDM0LCAxNDUsIDQsIDEsIAotICAgIDIxMCwgOTEsIDE0NSwgNCwgMSwgMjM1LCAxNDgsIDE0NSwgNCwgMSwgNjUsIDIzNSwgMTQ4LCAxNDUsIDQsIDEsIDczLCAKLSAgICAxNDUsIDQsIDEsIDI0NywgMTYwLCAxNDUsIDQsIDEsIDIzNCwgMjQwLCAxNDUsIDQsIDEsIDIzMiwgMTg2LCAxNDUsIDQsIDEsIAotICAgIDIzMCwgMjksIDE0NSwgNCwgMSwgMjI5LCAxOTEsIDE0NSwgNCwgMSwgMjI2LCAxODUsIDE0NSwgNCwgMSwgMjI1LCA0LCAKLSAgICAxNDUsIDQsIDEsIDIyMiwgMjI3LCAxNDUsIDQsIDEsIDIxOSwgODMsIDE0NSwgNCwgMSwgMjE1LCA4MSwgMTQ1LCA0LCAxLCAKLSAgICAyMTQsIDIwMSwgMTQ1LCA0LCAxLCAyNDMsIDI0NiwgMTQ1LCA0LCAxLCAyNDEsIDE5OSwgMTQ1LCA0LCAxLCAyMjYsIDEzNSwgCi0gICAgMTQ1LCA0LCAxLCAyMjUsIDIyMSwgMTQ1LCA0LCAxLCAyMTksIDIyOCwgMTQ1LCA0LCAxLCAyMTUsIDE2NywgMTQ1LCA0LCAxLCAKLSAgICAyNTAsIDc1LCAxNDUsIDQsIDEsIDIyMCwgMTAyLCAxNDUsIDQsIDEsIDIxMSwgMjcsIDE0NSwgNCwgMSwgMjExLCAyOSwgCi0gICAgMTQ1LCA0LCAxLCAyMTEsIDU3LCAxNDUsIDQsIDEsIDIxOCwgMjUzLCAxNjIsIDE0NSwgNCwgMSwgMjEwLCAyMTIsIDE0NSwgCi0gICAgNCwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgNCwgMjEwLCAxODQsIDIsIDIxNywgNzcsIDE0NSwgNCwgMSwgMjEwLCAKLSAgICAyNDQsIDE0NSwgNCwgMSwgMjM1LCAxODQsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgCi0gICAgMTQ1LCA0LCAxLCAyMzUsIDE4NCwgMjUxLCAyNDksIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDI0NCwgODIsIDE0NSwgNCwgMSwgCi0gICAgMjM1LCAxNDYsIDE0NSwgNCwgMSwgMjE5LCAyMjcsIDE0NSwgNCwgMSwgMjE1LCAyMDIsIDYxLCAxNDUsIDQsIDEsIDIzMywgCi0gICAgNzUsIDIzMCwgMjksIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA1MiwgMTMwLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTIsIAotICAgIDEzMCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDIzMCwgMjI0LCAxODIsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCA5MSwgNywgNiwgCi0gICAgMSwgMjIzLCAyMjQsIDIsIDIxNywgNzcsIDcsIDQsIDEsIDExNSwgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDcsIAotICAgIDI1NSwgOTEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMzksIDcsIAotICAgIDYsIDEsIDIzNSwgMjQsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDIxMCwgCi0gICAgMTYwLCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCAzOSwgNywgNiwgMSwgMjU0LCAxNDMsIDcsIDYsIAotICAgIDEsIDIzMiwgNTAsIDIsIDEwMywgNywgNiwgMSwgMjE1LCA5NCwgNjEsIDcsIDYsIDEsIDIxNSwgOTQsIDI1NCwgMTQzLCA3LCAKLSAgICA0LCAxLCAyMTQsIDEwNiwgMiwgNDQsIDEwMywgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTAzLCA3LCA0LCAxLCAyMTIsIDk5LCAKLSAgICAyLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDksIDEwMCwgNywgNiwgMSwgMTYzLCAyNDIsIDYwLCA3LCA0LCAxLCAKLSAgICAxNjMsIDI0MiwgNjAsIDcsIDQsIDEsIDIxNywgNzUsIDIyNSwgMTMzLCA3LCA0LCAxLCAxNjAsIDIsIDIyOCwgNTAsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCA3LCA0LCAxLCAxNDQsIDIsIDEyMSwgMjIyLCAyMzQsIDIzNSwgCi0gICAgMjE1LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCA3NSwgNywgMjE4LCA2NSwgNCwgMSwgMjM1LCAxNDQsIDU4LCAxLCA2LCAyMTQsIAotICAgIDEwNSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyMTcsIAotICAgIDI1MCwgMjE3LCA3NywgODEsIDYsIDEsIDI1NCwgMTY0LCA4MSwgNCwgMSwgMjU0LCAxNjQsIDgxLCA2LCAxLCAyMTMsIDE3MywgCi0gICAgODEsIDQsIDEsIDIxMywgMTczLCA4MSwgNiwgMSwgMjQzLCAxMDcsIDgxLCA0LCAxLCAyNDMsIDEwNywgODEsIDYsIDEsIAotICAgIDI0OCwgMTkxLCA4MSwgNCwgMSwgMjQ4LCAxOTEsIDgxLCA2LCAxLCAyNDUsIDE5NCwgODEsIDQsIDEsIDI0NSwgMTk0LCA4MSwgCi0gICAgNiwgMSwgMjE5LCAzMywgODEsIDQsIDEsIDIxOSwgMzMsIDgxLCA2LCAxLCAyMTAsIDEwMSwgODEsIDQsIDEsIDIxMCwgMTAxLCAKLSAgICA4MSwgNiwgMSwgMjQxLCAyNDgsIDgxLCA0LCAxLCAyNDEsIDI0OCwgODEsIDYsIDEsIDIxNiwgMTc3LCA4MSwgNCwgMSwgCi0gICAgMjE2LCAxNzcsIDgxLCA2LCAxLCAyNDAsIDExNiwgODEsIDQsIDEsIDI0MCwgMTE2LCA4MSwgNiwgMSwgMjM0LCAyMjcsIDgxLCAKLSAgICA0LCAxLCAyMzQsIDIyNywgODEsIDYsIDEsIDIzMywgNzIsIDgxLCA0LCAxLCAyMzMsIDcyLCA4MSwgNiwgMSwgMjMwLCAyMzAsIAotICAgIDgxLCA0LCAxLCAyMzAsIDIzMCwgODEsIDYsIDEsIDIyOCwgMjMzLCA4MSwgNCwgMSwgMjI4LCAyMzMsIDgxLCA2LCAxLCAKLSAgICAyMzMsIDIzMywgODEsIDQsIDEsIDIzMywgMjMzLCA4MSwgNiwgMSwgNzYsIDgxLCA0LCAxLCA3NiwgODEsIDYsIDEsIDIyNSwgCi0gICAgMTA4LCA4MSwgNCwgMSwgMjI1LCAxMDgsIDgxLCA2LCAxLCAyMjIsIDIxMSwgODEsIDQsIDEsIDIyMiwgMjExLCA4MSwgNiwgCi0gICAgMSwgMjE5LCAxNjUsIDgxLCA0LCAxLCAyMTksIDE2NSwgODEsIDYsIDEsIDIxNywgNDEsIDgxLCA0LCAxLCAyMTcsIDQxLCAKLSAgICA4MSwgNiwgMSwgMjE0LCAyMjksIDgxLCA0LCAxLCAyMTQsIDIyOSwgODEsIDYsIDEsIDI0NCwgMTIxLCA4MSwgNCwgMSwgCi0gICAgMjQ0LCAxMjEsIDgxLCA2LCAxLCAyMzQsIDExMiwgODEsIDQsIDEsIDIzNCwgMTEyLCA4MSwgNiwgMSwgMjI0LCAxNjEsIDgxLCAKLSAgICA0LCAxLCAyMjQsIDE2MSwgODEsIDYsIDEsIDIyNiwgMTc4LCA4MSwgNCwgMSwgMjI2LCAxNzgsIDgxLCA2LCAxLCAyNDcsIAotICAgIDI1MywgMjU0LCAxNzAsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjU0LCAxNzAsIDgxLCA2LCAxLCA1NSwgODEsIDI1NCwgMTk2LCAKLSAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNTQsIDE5NiwgODEsIDYsIDEsIDI0OSwgMTE1LCAyNDUsIDE5NCwgODEsIDQsIDEsIDI0OSwgCi0gICAgMTE1LCAyNDUsIDE5NCwgODEsIDYsIDEsIDI0NywgMjUzLCAyMzQsIDIyNywgODEsIDQsIDEsIDI0NywgMjUzLCAyMzQsIAotICAgIDIyNywgODEsIDYsIDEsIDI0NywgMjUzLCAyMjgsIDIzMywgODEsIDQsIDEsIDI0NywgMjUzLCAyMjgsIDIzMywgODEsIDYsIAotICAgIDEsIDI0OSwgMTE1LCAyMjgsIDIzMywgODEsIDQsIDEsIDI0OSwgMTE1LCAyMjgsIDIzMywgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMjI2LCAxNzgsIDgxLCA0LCAxLCA1NSwgODEsIDIyNiwgMTc4LCA4MSwgNiwgMSwgMjIxLCAyNDYsIDgxLCA0LCAxLCAyMjEsIAotICAgIDI0NiwgODEsIDYsIDEsIDI0OSwgMTI4LCAyMjAsIDU1LCA4MSwgNCwgMSwgMjQ5LCAxMjgsIDIyMCwgNTUsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDIyMCwgNTUsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgNTUsIDgxLCA2LCAxLCA1NSwgODEsIDI0NSwgNzUsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0NSwgNzUsIDgxLCA2LCAxLCAyNTQsIDE4MiwgMjM0LCAxMTcsIDgxLCA0LCAxLCAyNTQsIAotICAgIDE4MiwgMjM0LCAxMTcsIDgxLCA2LCAxLCAyNDcsIDI1MywgMjQxLCA0NSwgODEsIDQsIDEsIDI0NywgMjUzLCAyNDEsIDQ1LCAKLSAgICA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDQ1LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDQ1LCA4MSwgNiwgMSwgNTUsIDgxLCAKLSAgICAxNjIsIDgxLCA0LCAxLCA1NSwgODEsIDE2MiwgODEsIDYsIDEsIDIzMywgMTQ4LCAxNjIsIDgxLCA0LCAxLCAyMzMsIDE0OCwgCi0gICAgMTYyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDIxNywgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyMTcsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDI0MSwgMjUxLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDI1MSwgODEsIDYsIDEsIDU1LCA4MSwgMjQzLCAxMDIsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0MywgMTAyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDcsIDE2MywgODEsIDQsIDEsIDU1LCA4MSwgCi0gICAgMjQ3LCAxNjMsIDgxLCA2LCAxLCA1NSwgODEsIDIyMCwgMjIsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgMjIsIDgxLCA2LCAxLCAKLSAgICA1NSwgMjI3LCAyMDgsIDIyMCwgMjIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyMCwgMjIsIDgxLCA2LCAxLCA1NSwgCi0gICAgMjI3LCAyMDgsIDIyOSwgMjcsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyOSwgMjcsIDgxLCA2LCAxLCA1NSwgMjI3LCAKLSAgICAyMDgsIDIyNywgMTQ4LCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMjcsIDE0OCwgODEsIDYsIDEsIDU1LCAyMjcsIDIwOCwgCi0gICAgMjEyLCAzNywgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjEyLCAzNywgODEsIDE2LCAyMzQsIDI0NiwgODEsIDE2LCAyMzAsIAotICAgIDIzMSwgMjIyLCAyMTEsIDgxLCAxNiwgMjI1LCAxMDksIDIyMiwgMjExLCA4MSwgMTYsIDIxOCwgMTQ3LCA4MSwgMTYsIDIxNywgCi0gICAgNDIsIDIyMiwgMjExLCA4MSwgMTYsIDIzNCwgMTEzLCAyMjIsIDIxMSwgODEsIDE2LCAyMjAsIDIzLCAyMTksIDE2NSwgODEsIAotICAgIDYsIDEsIDI0OSwgMTE1LCAyMjAsIDU1LCA4MSwgNCwgMSwgMjQ5LCAxMTUsIDIyMCwgNTUsIDgxLCA2LCAxLCAyNDksIDExNSwgCi0gICAgMjQzLCAxMDIsIDgxLCA0LCAxLCAyNDksIDExNSwgMjQzLCAxMDIsIDgxLCAzOCwgMjI4LCAyMzQsIDQ4LCA4MSwgMzgsIAotICAgIDIxOCwgMjQ3LCAyNTMsIDIyNCwgODEsIDM4LCAyMTgsIDI0NywgMjMzLCAyMSwgODEsIDYsIDEsIDI1MSwgMTk5LCAyMzQsIAotICAgIDExNywgODEsIDQsIDEsIDI1MSwgMTk5LCAyMzQsIDExNywgODEsIDU1LCAyMjcsIDIwOCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA4MSwgNTUsIDIyNywgMjA4LCAyNDcsIDE5NywgMjI0LCAxMywgNzgsIDgxLCA1NSwgMjI3LCAyMDgsIDIzNSwgMjM3LCAyMjQsIAotICAgIDEzLCA3OCwgODEsIDU1LCAyMjcsIDIwOCwgMjEzLCAyNDEsIDI0NywgMTcyLCA4MSwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIAotICAgIDgxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDgxLCAyMzAsIDEyNCwgMjQ3LCAxNzIsIDk4LCA0LCAxLCAyNTQsIDEyMywgOTgsIAotICAgIDQsIDEsIDI1MiwgMTUyLCA5OCwgNCwgMSwgMjQzLCAxMDYsIDk4LCA0LCAxLCAyNDcsIDEyOCwgOTgsIDQsIDEsIDI0NSwgCi0gICAgMTUwLCA5OCwgNCwgMSwgMjEzLCAxNjAsIDk4LCA0LCAxLCAyMTAsIDg5LCA5OCwgNCwgMSwgMjE3LCA2MCwgOTgsIDQsIDEsIAotICAgIDIzNSwgMjU1LCA5OCwgNCwgMSwgMjM0LCAyMzQsIDk4LCA0LCAxLCAyMzMsIDgxLCA5OCwgNCwgMSwgMjMxLCAxODUsIDk4LCAKLSAgICA0LCAxLCAyMjksIDE5NSwgOTgsIDQsIDEsIDIyNiwgMTk2LCA5OCwgNCwgMSwgMjI2LCAxNywgOTgsIDQsIDEsIDIxMCwgNzgsIAotICAgIDk4LCA0LCAxLCAyMjMsIDE3MSwgOTgsIDQsIDEsIDIyMSwgMjQzLCA5OCwgNCwgMSwgMjE3LCA1MCwgOTgsIDQsIDEsIDIxNCwgCi0gICAgMTkwLCA5OCwgNCwgMSwgMjI1LCAxNDAsIDk4LCA0LCAxLCAyMzQsIDEyMSwgOTgsIDQsIDEsIDI0MiwgMjQxLCA5OCwgNCwgCi0gICAgMSwgMjI0LCA3MywgOTgsIDQsIDEsIDIyMCwgMjAsIDk4LCA0LCAxLCAyNTAsIDk3LCA5OCwgNCwgMSwgMjUxLCA3LCA5OCwgCi0gICAgNCwgMSwgMjM1LCAxMDAsIDk4LCA0LCAxLCAyNTAsIDQwLCA5OCwgNCwgMSwgMjUwLCAxNDMsIDk4LCA0LCAxLCAyMTEsIAotICAgIDE2MywgOTgsIDQsIDEsIDIzNSwgMTExLCA5OCwgNCwgMSwgMjQyLCA0MywgOTgsIDQsIDEsIDI0MSwgMjM4LCA5OCwgNCwgMSwgCi0gICAgMjQxLCAxNzUsIDk4LCA0LCAxLCAyMTIsIDIyLCA5OCwgNCwgMSwgMjQyLCA0LCA5OCwgNCwgMSwgMjQxLCA2NSwgOTgsIDQsIAotICAgIDEsIDIxMCwgMjQ2LCA5OCwgNCwgMSwgMjU0LCAyMzIsIDIxNiwgMTA4LCAxLCAxOTEsIDIxNiwgMTA4LCAxLCAyMTEsIDk5LCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA5OCwgMjE2LCAxMDgsIDEsIDIxMSwgODgsIDIxNiwgMTA4LCAxLCAyMTEsIDg2LCAyMTYsIAotICAgIDEwOCwgMSwgMjUyLCAzMiwgMjU1LCAxNiwgMjExLCA4MSwgMjE2LCAxMDgsIDEsIDIxMSwgODEsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTEsIDk2LCAyMTYsIDEwOCwgMSwgMjExLCA5MywgMjE2LCAxMDgsIDEsIDIxMSwgOTUsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDk0LCAyMTYsIDEwOCwgMSwgMjExLCAxMiwgMjE2LCAxMDgsIDEsIDIxMSwgOTAsIDIxNiwgMTA4LCAxLCAyMTEsIDc5LCAKLSAgICAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNzksIDIxNiwgMTA4LCAxLCAyMTEsIDc2LCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDgsIDEsIDI1MiwgMzIsIDI1NSwgMTYsIDIxMSwgODQsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDgsIDEsIDIxMSwgODMsIDIxNiwgMTA4LCAxLCAyMTEsIDEwMywgMjE2LCAxMDgsIDEsIDIxMSwgNzcsIAotICAgIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA3NywgMjE2LCAxMDgsIDEsIDIxMSwgNjYsIDIxNiwgMTA4LCAxLCAyMTUsIAotICAgIDExNSwgMjExLCA2NiwgMjE2LCAxMDgsIDEsIDIxMSwgOCwgMjE2LCAxMDgsIDEsIDIxMSwgNDksIDIxNiwgMTA4LCAxLCAKLSAgICAyNTQsIDIwNywgMjExLCA0OSwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDQ5LCAyMTYsIDEwOCwgMSwgMjExLCA3NSwgCi0gICAgMjE2LCAxMDgsIDEsIDIxMSwgNzQsIDIxNiwgMTA4LCAxLCAyMTEsIDcxLCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgCi0gICAgODUsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA2OSwgMjE2LCAxMDgsIDEsIDIxMSwgNjcsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTAsIDIxMiwgMjE2LCAxMDgsIDEsIDIxMSwgNjQsIDIxNiwgMTA4LCAxLCAyMTEsIDYzLCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA4NywgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDg3LCAyMTYsIDEwOCwgMSwgMjUzLCAxNjMsIDIxMSwgODcsIDIxNiwgCi0gICAgMTA4LCAxLCAyMTEsIDYyLCAyMTYsIDEwOCwgMSwgMjExLCA2MCwgMjE2LCAxMDgsIDEsIDIxMSwgNjEsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTEsIDU5LCAyMTYsIDEwOCwgMSwgMjExLCA1OCwgMjE2LCAxMDgsIDEsIDIxMSwgOTcsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDU2LCAyMTYsIDEwOCwgMSwgMjExLCA1NCwgMjE2LCAxMDgsIDEsIDIxMSwgNTMsIDIxNiwgMTA4LCAxLCAyMTEsIDUyLCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA1MCwgMjE2LCAxMDgsIDEsIDIxNywgMzQsIDIxMSwgNTAsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDQ4LCAyMTYsIDEwOCwgMSwgMjExLCA0NywgMjE2LCAxMDgsIDEsIDIxMCwgMjQ0LCAyMTYsIDEwOCwgNTgsIDEsIDIzMywgCi0gICAgMTI2LCA3OCwgMjE2LCAxMDgsIDIyMCwgMTM4LCA3OCwgMjE2LCAxMDgsIDExNiwgMjM1LCA2MywgMjksIDMsIDIzMiwgMTU1LCAKLSAgICAyOSwgMywgMjMwLCAxNjAsIDI5LCAzLCAyMjIsIDIwOSwgMjksIDMsIDIxOSwgNTcsIDI5LCAzLCAyMjAsIDYsIDI5LCAzLCAKLSAgICAyNTEsIDIwNCwgMjksIDMsIDIxNiwgNDEsIDI5LCAzLCAyNDksIDIzNywgMjksIDMsIDIyOCwgNzIsIDI5LCAzLCAyMjcsIAotICAgIDEzMywgMjksIDMsIDI0MiwgMTgwLCAyMjcsIDAsIDI5LCAzLCAyMTAsIDIyLCAyOSwgMywgMjQ3LCAxNDMsIDI5LCAzLCAKLSAgICAyNDgsIDEwNCwgMjksIDMsIDIzNSwgNjcsIDI5LCAzLCAyMTYsIDE1NSwgMjksIDMsIDI1MCwgODUsIDI5LCAzLCAyMjUsIAotICAgIDEyMCwgMjksIDMsIDIyNSwgMTUsIDI5LCAzLCAyNDIsIDI1NSwgMjksIDMsIDI0MiwgMjUxLCAyOSwgMywgMjQyLCAyNTIsIAotICAgIDI5LCAzLCAyNDIsIDI1MywgMjksIDMsIDIxOCwgMjIzLCAyOSwgMywgMjE4LCAxNzksIDI5LCAzLCAyMTgsIDE5MiwgMjksIAotICAgIDMsIDIxOCwgMjIyLCAyOSwgMywgMjE4LCAxOTYsIDI5LCAzLCAyMTgsIDE5NywgMjksIDMsIDIxOCwgMTg0LCAyOSwgMywgCi0gICAgMjUwLCAyMTMsIDI5LCAzLCAyNTAsIDE5MiwgMjksIDMsIDI1MCwgMTk0LCAyOSwgMywgMjUwLCAyMTIsIDI5LCAzLCAyNTAsIAotICAgIDIxMCwgMjksIDMsIDI1MCwgMjExLCAyOSwgMywgMjUwLCAxOTMsIDI5LCAzLCAyMDksIDI0MywgMjksIDMsIDIwOSwgMjIxLCAKLSAgICAyOSwgMywgMjA5LCAyMzQsIDI5LCAzLCAyMDksIDI0MiwgMjksIDMsIDIwOSwgMjM3LCAyOSwgMywgMjA5LCAyMzgsIDI5LCAKLSAgICAzLCAyMDksIDIyNiwgMjksIDMsIDI1MCwgMjA4LCAyOSwgMywgMjUwLCAxOTUsIDI5LCAzLCAyNTAsIDE5NywgMjksIDMsIAotICAgIDI1MCwgMjA3LCAyOSwgMywgMjUwLCAyMDUsIDI5LCAzLCAyNTAsIDIwNiwgMjksIDMsIDI1MCwgMTk2LCAyOSwgMywgMjIzLCAKLSAgICAyMzYsIDI5LCAzLCAyMjMsIDIyNiwgMjksIDMsIDIyMywgMjMyLCAyOSwgMywgMjIzLCAyMzUsIDI5LCAzLCAyMjMsIDIzMywgCi0gICAgMjksIDMsIDIyMywgMjM0LCAyOSwgMywgMjIzLCAyMzEsIDI5LCAzLCAyMzMsIDE1OSwgMjksIDMsIDIzMywgMTUxLCAyOSwgCi0gICAgMywgMjMzLCAxNTQsIDI5LCAzLCAyMzMsIDE1OCwgMjksIDMsIDIzMywgMTU1LCAyOSwgMywgMjMzLCAxNTYsIDI5LCAzLCAKLSAgICAyMzMsIDE1MiwgMjksIDMsIDIxMSwgMTMwLCAyOSwgMywgMjExLCAxMjAsIDI5LCAzLCAyMTEsIDEyNiwgMjksIDMsIDIxMSwgCi0gICAgMTI5LCAyOSwgMywgMjExLCAxMjcsIDI5LCAzLCAyMTEsIDEyOCwgMjksIDMsIDIxMSwgMTI1LCAyOSwgMywgMjQyLCA3MSwgCi0gICAgMjksIDMsIDI0MiwgNjIsIDI5LCAzLCAyNDIsIDY1LCAyOSwgMywgMjQyLCA3MCwgMjksIDMsIDI0MiwgNjcsIDI5LCAzLCAKLSAgICAyNDIsIDY4LCAyOSwgMywgMjQyLCA2NCwgMzgsIDMzLCAxLCAyNTIsIDc1LCAzOCwgMzMsIDEsIDIxMywgMjU1LCAzOCwgMzMsIAotICAgIDEsIDI0MiwgMjM2LCAzOCwgMzMsIDEsIDI0OCwgOTAsIDM4LCAzMywgMSwgMjEwLCA3NCwgMzgsIDMzLCAxLCAyMTAsIDk0LCAKLSAgICAzOCwgMzMsIDEsIDE3NiwgMzgsIDMzLCAxLCAyNDUsIDE3NCwgMzgsIDMzLCAxLCAyNDUsIDE1OSwgMzgsIDMzLCAxLCAyNDUsIAotICAgIDE1MCwgMzgsIDMzLCAxLCA3NiwgMzgsIDMzLCAxLCAyMjUsIDIyMSwgMzgsIDMzLCAxLCAyNDUsIDkyLCAzOCwgMzMsIDEsIAotICAgIDI0NSwgODIsIDM4LCAzMywgMSwgMjE3LCAyMiwgMzgsIDMzLCAxLCAxNjIsIDM4LCAzMywgMSwgMjE1LCAxNzgsIDM4LCAzMywgCi0gICAgMSwgMjUwLCAxMzEsIDM4LCAzMywgMSwgMjIwLCAxMDIsIDM4LCAzMywgMSwgMjIwLCA2NSwgMzgsIDMzLCAxLCAyNDQsIDgyLCAKLSAgICAzOCwgMzMsIDEsIDI0NSwgODEsIDM4LCAzMywgMSwgNjEsIDM4LCAzMywgMSwgMjM2LCA2MCwgMzgsIDMzLCAxLCAyNDcsIAotICAgIDE2MSwgMzgsIDMzLCAxLCAyMzAsIDE0MCwgMjE0LCAyMDUsIDM4LCAzMywgMSwgMjExLCA1OSwgMzgsIDMzLCAxLCAyMTAsIAotICAgIDIxMiwgMzgsIDMzLCAxLCAyMzUsIDE4MywgNjEsIDM4LCAzMywgMSwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzgsIDMzLCAxLCAyMzUsIDE4MywgMjUxLCAyNDksIDIxMCwgMTgzLCA0NCwgMjU0LCAKLSAgICAxMTAsIDIxOCwgNjAsIDIzMSwgMTU0LCA0NCwgMjU0LCAxMTAsIDI0NiwgMTE4LCAyMTgsIDYwLCAyMzEsIDE1NCwgNDMsIAotICAgIDIxOCwgNjAsIDEyNywgNDQsIDIxOCwgNjAsIDEyNywgNDMsIDI0NiwgMTE4LCAyMTgsIDYwLCAxMjcsIDQ0LCAyNDYsIDExOCwgCi0gICAgMjE4LCA2MCwgMTI3LCAyMjMsIDE1NywgMjM1LCAyMDIsIDIzMSwgMTU0LCAyMjMsIDE1NywgMjQ2LCAxMTgsIDIzNSwgMjAyLCAKLSAgICAyMzEsIDE1NCwgMjQ2LCAxMTgsIDIxNSwgMjQxLCAyMzEsIDE1NCwgNDMsIDIxNSwgMjQxLCAxMjcsIDQ0LCAyMTUsIDI0MSwgCi0gICAgMTI3LCAyMjMsIDE1NywgMjE4LCAyMzQsIDQzLCAyMjMsIDE1NywgMjI2LCAxOTgsIDEyNywgNDQsIDIyMywgMTU3LCAyMjYsIAotICAgIDE5OCwgMTI3LCAyNDUsIDIxMCwgMjQ5LCAxNTgsIDIyNiwgMTMsIDI0NCwgMjIsIDIyNiwgMTMsIDIyMywgNDksIDI0NCwgCi0gICAgMjIsIDIyNiwgMTMsIDI0MCwgMTY1LCAyNDYsIDExOCwgMjI2LCAyNTEsIDI0NiwgMTA0LCAyNTQsIDExOSwgMjE0LCAxNTMsIAotICAgIDI1NCwgMTE5LCAyNDYsIDExOCwgMjIyLCAyNDcsIDI1NCwgMTA5LCA1MiwgMjI2LCAyNDgsIDI0MCwgMTY4LCAyMzUsIDE5MywgCi0gICAgMjM1LCAyMDEsIDIyNiwgNTksIDI1MSwgMTU0LCAyNDAsIDE2OSwgMiwgMjQ4LCAxLCAyMTYsIDg5LCAyLCAyMjIsIDIzNCwgCi0gICAgNDgsIDQzLCAxMjEsIDIyNiwgNSwgMTI3LCA0NCwgMTIxLCAyMjYsIDUsIDEyNywgMjE2LCA4OSwgMiwgNTksIDQ4LCAyMTYsIAotICAgIDg5LCAyLCA1OSwgNTEsIDQzLCA2NywgMjUyLCAxNDEsIDIsIDIyNCwgNywgNDQsIDY3LCAyNTIsIDE0MSwgMiwgMjI0LCA3LCAKLSAgICAyMTYsIDE0LCA0MywgMTYzLCAxMjcsIDIxNiwgMTQsIDQ0LCAxNjMsIDEyNywgMjUxLCAxNzUsIDQzLCAxNjMsIDEyNywgCi0gICAgMjUxLCAxNzUsIDQ0LCAxNjMsIDEyNywgNDMsIDIxOSwgMTg3LCAxMDQsIDEyNywgNDQsIDIxOSwgMTg3LCAxMDQsIDEyNywgCi0gICAgNDMsIDUyLCAyMjYsIDMsIDQ0LCA1MiwgMjI2LCAzLCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIDE0MCwgMTIzLCAKLSAgICA1OSwgMTE3LCAxMTMsIDE3MCwgMjI0LCAxNDAsIDkyLCAyNDQsIDExLCA1OSwgMjI0LCAxNDAsIDI0NCwgODEsIDU5LCA3OCwgCi0gICAgMjIzLCA0OSwgMjI0LCAxMywgNzgsIDY3LCAxODIsIDIyMiwgMjM0LCAyMjUsIDEwLCAyMTEsIDIwOSwgMjIwLCAxMzgsIAotICAgIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjE1LCA5NCwgMjQ5LCAyMTksIDIyMywgMTU3LCAyNDcsIDEyMCwgMjIzLCAxNTcsIDI0OSwgCi0gICAgMjE5LCAyMTUsIDk0LCAyMjAsIDE1MCwgMjQ4LCAyMDYsIDIsIDQzLCAyNDIsIDEwOCwgMjQ4LCAyMDYsIDIsIDQ0LCAyNDIsIAotICAgIDEwOCwgMjE1LCA5NCwgMjQ4LCAyMDUsIDIxNiwgMTQsIDE2MywgMjIxLCAxNzMsIDUwLCAyMTUsIDU5LCAyNDgsIDE1NiwgCi0gICAgMjE2LCAxNDMsIDI0OCwgMTU2LCA5LCAzNCwgMjIzLCA3NiwgOSwgMzQsIDI1MCwgMTAsIDksIDM0LCAyMjEsIDE3NiwgMTEwLCAKLSAgICA5LCAzNCwgMjIxLCAxNzYsIDEwNSwgOSwgMzQsIDIyMSwgMTc2LCAxNTgsIDksIDM0LCAyMjUsIDE2NywgOSwgMzQsIDI1MSwgCi0gICAgMTYzLCA5LCAzNCwgMjE3LCA5MiwgOSwgMzQsIDIzNCwgMzMsIDExMCwgOSwgMzQsIDIzNCwgMzMsIDEwNSwgOSwgMzQsIAotICAgIDI0NywgMTcwLCA5LCAzNCwgMjIxLCAxNzksIDksIDM0LCA0LCAxMTAsIDksIDM0LCA0LCAxMDUsIDksIDM0LCAyMzMsIDk3LCAKLSAgICAxMTAsIDksIDM0LCAyMzMsIDk3LCAxMDUsIDksIDM0LCAyMzMsIDk3LCAxNTgsIDksIDM0LCAyMzMsIDk3LCAxNjEsIDksIAotICAgIDM0LCAyMTksIDY4LCA5LCAzNCwgMjE2LCAxNDUsIDksIDM0LCAyMTksIDY2LCAxMTAsIDksIDM0LCAyMTksIDY2LCAxMDUsIAotICAgIDksIDM0LCAyNDEsIDIyOCwgMTEwLCA5LCAzNCwgMjQxLCAyMjgsIDEwNSwgOSwgMzQsIDI0MiwgMTUsIDksIDM0LCAyMjMsIAotICAgIDE0NywgOSwgMzQsIDI1MCwgODIsIDksIDM0LCAyMTgsIDM3LCA5LCAzNCwgMjMwLCAxMjgsIDksIDM0LCAyNDgsIDg4LCA5LCAKLSAgICAzNCwgMjMwLCAxMjAsIDksIDM0LCAyNTAsIDI1LCA5LCAzNCwgMjEyLCA0MSwgMTEwLCA5LCAzNCwgMjEyLCA0MSwgMTA1LCAKLSAgICA5LCAzNCwgMjQ0LCA5NiwgOSwgMzQsIDIyNSwgMjMyLCAxMTAsIDksIDM0LCAyMjUsIDIzMiwgMTA1LCA5LCAzNCwgMjE5LCAKLSAgICAxNjAsIDE2MywgMjE1LCAyMzYsIDIxNSwgMTg4LCA5LCAzNCwgMjQ5LCAxNDUsIDksIDM0LCAyNDcsIDEzNiwgOSwgMzQsIAotICAgIDIzNSwgMTM3LCA5LCAzNCwgMjUxLCAxOTgsIDY0LCAyNDksIDI1MCwgOSwgMzQsIDI0NSwgMTUsIDksIDM0LCAyMTgsIDI0OSwgCi0gICAgMTEwLCA5LCAzNCwgMjE4LCAyNDksIDEwNSwgOSwgMzQsIDI1MiwgMTU0LCA5LCAzNCwgMjE5LCAxNjcsIDksIDM0LCAyNTEsIAotICAgIDYzLCAyMTksIDE2NywgOSwgMzQsIDIyOSwgOTAsIDExMCwgOSwgMzQsIDIyOSwgOTAsIDEwNSwgOSwgMzQsIDIyOSwgOTAsIAotICAgIDE1OCwgOSwgMzQsIDIyOSwgOTAsIDE2MSwgOSwgMzQsIDIzMSwgNDYsIDksIDM0LCAyMjAsIDU3LCA5LCAzNCwgMjIzLCAKLSAgICAxNTMsIDksIDM0LCAyNDUsIDM3LCA5LCAzNCwgMjI2LCAyMDksIDksIDM0LCAyNTEsIDEzMywgMTEwLCA5LCAzNCwgMjUxLCAKLSAgICAxMzMsIDEwNSwgOSwgMzQsIDIzMSwgODYsIDksIDM0LCAyMzAsIDEyMywgOSwgMzQsIDI0MiwgMTQwLCAxMTAsIDksIDM0LCAKLSAgICAyNDIsIDE0MCwgMTA1LCA5LCAzNCwgMjQyLCAxNDAsIDE1OCwgOSwgMzQsIDIxNiwgMTA2LCA5LCAzNCwgMjQ5LCAyNDksIDksIAotICAgIDM0LCAyMTIsIDksIDExMCwgOSwgMzQsIDIxMiwgOSwgMTA1LCA5LCAzNCwgMjUxLCA2MywgMjIxLCAxNzAsIDksIDM0LCAKLSAgICAyMTksIDE2MCwgMjQwLCAyNDgsIDksIDM0LCAyNDAsIDI0OCwgOSwgMzQsIDI1MSwgNjMsIDIxOSwgMiwgOSwgMzQsIDI1MSwgCi0gICAgNjMsIDIyMCwgNTIsIDksIDM0LCAyNDQsIDMyLCA5LCAzNCwgMjUxLCA2MywgMjUwLCAyMjgsIDksIDM0LCAyMTksIDE2MCwgCi0gICAgMjEyLCA1NywgOSwgMzQsIDIxMiwgNTgsIDExMCwgOSwgMzQsIDIxMiwgNTgsIDEwNSwgOSwgMzQsIDI1MCwgMjcsIDksIDM0LCAKLSAgICAyNTEsIDYzLCAyNDIsIDE2NiwgOSwgMzQsIDE5OSwgMTEwLCA5LCAzNCwgMTk5LCAxMDUsIDksIDM0LCAyNTEsIDYzLCAyMzIsIAotICAgIDEzNywgOSwgMzQsIDI1MSwgNjMsIDI0MywgODgsIDksIDM0LCAyMzAsIDExOSwgMTEwLCA5LCAzNCwgMjMwLCAxMTksIDEwNSwgCi0gICAgOSwgMzQsIDIyMywgMTU5LCA5LCAzNCwgMjUxLCAyMDcsIDksIDM0LCAyNTEsIDYzLCAyMTcsIDU2LCAyMzMsIDUyLCA5LCAKLSAgICAzNCwgMjUxLCA2MywgMjMzLCA1MywgOSwgMzQsIDI1MSwgNjMsIDIxMSwgMjM5LCA5LCAzNCwgMjUxLCA2MywgMjQ0LCA0NiwgCi0gICAgOSwgMzQsIDI0NSwgMjE4LCAxMTAsIDksIDM0LCAyNDUsIDIxOCwgMTA1LCA5LCAzNCwgMjQ1LCAyMTgsIDE1OCwgOSwgMzQsIAotICAgIDI1MSwgNjMsIDI0NSwgMjE3LCA5LCAzNCwgMjQxLCAyMzUsIDksIDM0LCAyNTEsIDYzLCAyNDAsIDI0NSwgOSwgMzQsIDI1MSwgCi0gICAgMTk0LCA5LCAzNCwgMjQyLCAyMjIsIDksIDM0LCAyNTEsIDYzLCAyNDQsIDkwLCA5LCAzNCwgMjUxLCA2MywgMjUxLCAyMzcsIAotICAgIDksIDM0LCAyNTEsIDYzLCAyMjIsIDEsIDksIDM0LCAyMTksIDE2MCwgMjEyLCAyLCA5LCAzNCwgMjE5LCAxNjAsIDIxMSwgCi0gICAgNDEsIDksIDM0LCAyNTEsIDYzLCAyNDMsIDI0NCwgOSwgMzQsIDIzNSwgMTQzLCAyNDUsIDQxLCA5LCAzNCwgMjUxLCA2MywgCi0gICAgMjQ1LCA0MSwgOSwgMzQsIDIzNSwgMTQzLCAyMTYsIDE1LCA5LCAzNCwgMjUxLCA2MywgMjE2LCAxNSwgOSwgMzQsIDIzNSwgCi0gICAgMTQzLCAyNDYsIDk2LCA5LCAzNCwgMjUxLCA2MywgMjQ2LCA5NiwgOSwgMzQsIDIxNSwgOTEsIDksIDM0LCAyMzUsIDE0MywgCi0gICAgMjE1LCA5MSwgOSwgMzQsIDI1MSwgNjMsIDIxNSwgOTEsIDYwLCAzNCwgMTEwLCA2MCwgMzQsIDIzMiwgMjEzLCA2MCwgMzQsIAotICAgIDI0NywgMTIwLCA2MCwgMzQsIDIxOSwgOTUsIDYwLCAzNCwgMjIxLCAxNzUsIDYwLCAzNCwgMTAzLCA2MCwgMzQsIDEwNSwgCi0gICAgNjAsIDM0LCAyMzIsIDIzNywgNjAsIDM0LCAyMzEsIDE4NSwgNjAsIDM0LCAyMzMsIDMzLCA2MCwgMzQsIDI0NSwgMTI5LCAKLSAgICA2MCwgMzQsIDE5NSwgNjAsIDM0LCAxMjQsIDI1MSwgMTYzLCA2MCwgMzQsIDI0OSwgMTQ3LCA2MCwgMzQsIDI0MCwgMTExLCAKLSAgICA2MCwgMzQsIDIxNywgOTIsIDYwLCAzNCwgMjA0LCAyNTEsIDE2MywgNjAsIDM0LCAyMzQsIDMyLCA2MCwgMzQsIDIyNCwgCi0gICAgMjI0LCA2MCwgMzQsIDIxMSwgMjAyLCA2MCwgMzQsIDIxOCwgMjQzLCA2MCwgMzQsIDQ0LCAyMDQsIDI1MSwgMTYzLCA2MCwgCi0gICAgMzQsIDI0MSwgMTc2LCAyNDUsIDE0NSwgNjAsIDM0LCAyMTYsIDI0NywgNjAsIDM0LCAyNDcsIDE3MCwgNjAsIDM0LCAyMjEsIAotICAgIDE3OSwgNjAsIDM0LCAyNTAsIDEwLCA2MCwgMzQsIDIyNCwgMTgyLCA2MCwgMzQsIDI1NCwgMjE1LCA2MCwgMzQsIDIzMCwgCi0gICAgMTEwLCA2MCwgMzQsIDI0NSwgMTQ1LCA2MCwgMzQsIDI0NSwgMjIzLCA2MCwgMzQsIDIyMSwgMjAwLCA2MCwgMzQsIDI0MiwgCi0gICAgMTc0LCA2MCwgMzQsIDI0MiwgMTc1LCAyMTksIDgxLCA2MCwgMzQsIDI0NSwgNDAsIDYwLCAzNCwgMjUxLCAyNDgsIDYwLCAKLSAgICAzNCwgMjExLCAyMjEsIDYwLCAzNCwgMjUwLCAxMDEsIDYwLCAzNCwgMjIyLCAxOTYsIDYwLCAzNCwgMjM1LCAyNTEsIDYwLCAKLSAgICAzNCwgMjE5LCA3OSwgNjAsIDM0LCAyMzMsIDk2LCA2MCwgMzQsIDI0OSwgMTU2LCA2MCwgMzQsIDIxOCwgMjM3LCA2MCwgMzQsIAotICAgIDIzMCwgMTE1LCA2MCwgMzQsIDIyMiwgMjI0LCA2MCwgMzQsIDIxMSwgMjA2LCA2MCwgMzQsIDIyNiwgMTkwLCA2MCwgMzQsIAotICAgIDIxNSwgOTcsIDYwLCAzNCwgMjQ2LCA4MCwgNjAsIDM0LCAyMTksIDI1MSwgMjE2LCAxNDUsIDYwLCAzNCwgMjQ2LCAxMTgsIAotICAgIDI1MCwgMTAsIDYwLCAzNCwgMTk5LCAyMTgsIDEwOCwgNjAsIDM0LCAxMTMsIDI0MiwgMTAsIDYwLCAzNCwgMjIwLCAwLCA2MCwgCi0gICAgMzQsIDI1MSwgMTY5LCA2MCwgMzQsIDIxOSwgNjUsIDYwLCAzNCwgMjUxLCAxMzcsIDYwLCAzNCwgMjE4LCAxMzgsIDYwLCAKLSAgICAzNCwgMjQxLCAyMjcsIDYwLCAzNCwgMjQyLCAyOCwgNjAsIDM0LCAyNDcsIDEyMywgNjAsIDM0LCAyNDIsIDE1LCA2MCwgMzQsIAotICAgIDI1MSwgMTU0LCA2MCwgMzQsIDIyMywgMTQ3LCA2MCwgMzQsIDIyMSwgMTg3LCA2MCwgMzQsIDI0NywgMTk5LCA2MCwgMzQsIAotICAgIDI1MywgMTY4LCA2MCwgMzQsIDIxOCwgMjM0LCA2MCwgMzQsIDIyOCwgNTEsIDYwLCAzNCwgMjE4LCAzNywgNjAsIDM0LCAKLSAgICAyMjEsIDIxMSwgNjAsIDM0LCAyMzAsIDEyOCwgNjAsIDM0LCAyMTUsIDIzNSwgNjAsIDM0LCAyMzMsIDEyMiwgNjAsIDM0LCAKLSAgICAyMTgsIDEyOSwgNjAsIDM0LCAyNDgsIDg4LCA2MCwgMzQsIDIxMiwgMjEsIDYwLCAzNCwgMjQ3LCAxNDYsIDIyOCwgNTEsIAotICAgIDYwLCAzNCwgMjQ5LCAyMTUsIDYwLCAzNCwgMjQzLCAyMjIsIDYwLCAzNCwgMjUwLCAyMSwgNjAsIDM0LCAyMTgsIDE0MiwgCi0gICAgNjAsIDM0LCAyMTIsIDQwLCA2MCwgMzQsIDI0NCwgOTYsIDYwLCAzNCwgMjUwLCAxOCwgNjAsIDM0LCAyNDQsIDE2MSwgNjAsIAotICAgIDM0LCA1MiwgMjExLCAxNzgsIDYwLCAzNCwgMTYzLCAyMTUsIDIzNiwgMjE1LCAxODgsIDYwLCAzNCwgMjE5LCA4OSwgNjAsIAotICAgIDM0LCAyNDQsIDE3MSwgNjAsIDM0LCAyNDksIDE0NSwgNjAsIDM0LCAyNDcsIDEzNiwgNjAsIDM0LCAyMjQsIDE3OSwgNjAsIAotICAgIDM0LCAyMzUsIDEzNywgNjAsIDM0LCAyMzEsIDY3LCA2MCwgMzQsIDIxNiwgODgsIDYwLCAzNCwgMjE3LCAyNDUsIDYwLCAzNCwgCi0gICAgMjMyLCAyMzEsIDYwLCAzNCwgMjE0LCAxMzEsIDYwLCAzNCwgMjQ0LCAxMjAsIDYwLCAzNCwgMjUxLCAxOTgsIDY0LCAyNDksIAotICAgIDI1MCwgNjAsIDM0LCAyMTksIDE4OCwgNjAsIDM0LCAyNDYsIDExOCwgMjE2LCAyNDIsIDYwLCAzNCwgMjExLCAyNTMsIDYwLCAKLSAgICAzNCwgMjE5LCAxMDMsIDYwLCAzNCwgMjQ3LCAxODcsIDYwLCAzNCwgMjQ1LCAxNSwgNjAsIDM0LCAyMTksIDUsIDYwLCAzNCwgCi0gICAgNzQsIDYwLCAzNCwgMjE4LCAxMzEsIDYwLCAzNCwgMjE4LCAyNDgsIDYwLCAzNCwgMjE1LCAyNTUsIDYwLCAzNCwgMjQyLCAKLSAgICAxNDcsIDYwLCAzNCwgMjUwLCAyMTgsIDYwLCAzNCwgMjE4LCAxNjAsIDYwLCAzNCwgMjUyLCAxNTQsIDYwLCAzNCwgMjIzLCAKLSAgICAzMSwgNjAsIDM0LCAyMTksIDE2NywgNjAsIDM0LCAyMzUsIDEzMCwgNjAsIDM0LCAyMjksIDg5LCA2MCwgMzQsIDIyMCwgNTcsIAotICAgIDYwLCAzNCwgMjQ0LCAxNDksIDYwLCAzNCwgMjI2LCAyMDksIDYwLCAzNCwgMjU0LCAxMTgsIDYwLCAzNCwgMjI1LCAyOSwgCi0gICAgNjAsIDM0LCAyNDUsIDIyNywgNjAsIDM0LCAyNTEsIDEzMiwgNjAsIDM0LCAyMzEsIDg2LCA2MCwgMzQsIDIzMCwgMTgzLCAKLSAgICA2MCwgMzQsIDIyMCwgMTU2LCA2MCwgMzQsIDI1MywgMjUyLCA2MCwgMzQsIDIzMCwgMTIzLCA2MCwgMzQsIDIxNiwgMTksIAotICAgIDYwLCAzNCwgMjI2LCAxNjUsIDYwLCAzNCwgMjUxLCAyMDEsIDYwLCAzNCwgMjE4LCAxMjcsIDYwLCAzNCwgMjQ5LCAyMjUsIAotICAgIDYwLCAzNCwgMjQyLCAxMzksIDYwLCAzNCwgMjE2LCAxMDYsIDYwLCAzNCwgMjM1LCAyMTcsIDYwLCAzNCwgMjUxLCAyMTEsIAotICAgIDYwLCAzNCwgMjEyLCA1OCwgMjQ1LCAxNDUsIDYwLCAzNCwgMjQ5LCAyNDksIDYwLCAzNCwgMjEyLCA4LCA2MCwgMzQsIDIyMSwgCi0gICAgMTcwLCA2MCwgMzQsIDI0MCwgMjQ4LCA2MCwgMzQsIDIxOSwgMiwgNjAsIDM0LCAyMTQsIDIyLCA2MCwgMzQsIDI1MiwgNzIsIAotICAgIDYwLCAzNCwgMjI1LCA3MywgNjAsIDM0LCAyNTIsIDE3NCwgNjAsIDM0LCAyMjAsIDUyLCA2MCwgMzQsIDIyMywgMTEwLCA2MCwgCi0gICAgMzQsIDIyMiwgMTI2LCA2MCwgMzQsIDI0NCwgMzIsIDYwLCAzNCwgMjUxLCAyMDAsIDYwLCAzNCwgMjUwLCAyMjgsIDYwLCAKLSAgICAzNCwgMjUxLCAyMjYsIDYwLCAzNCwgMjMwLCAxMjUsIDYwLCAzNCwgMjEyLCA1NywgNjAsIDM0LCAyNTAsIDI3LCA2MCwgMzQsIAotICAgIDIxMSwgMjM2LCA2MCwgMzQsIDI0NywgMTgwLCA2MCwgMzQsIDIxMywgMTYxLCA2MCwgMzQsIDI0MiwgMTY2LCA2MCwgMzQsIAotICAgIDIzMiwgMTM3LCA2MCwgMzQsIDI0MywgODgsIDYwLCAzNCwgMjMwLCAxMTgsIDYwLCAzNCwgMjE5LCA5NCwgNjAsIDM0LCAKLSAgICAyMTksIDI1MSwgMjE3LCA3NiwgMjUxLCAyMzcsIDYwLCAzNCwgMjIzLCAxNTksIDYwLCAzNCwgMjUxLCAyMDcsIDYwLCAzNCwgCi0gICAgMjExLCAxOTcsIDYwLCAzNCwgMjQ0LCAxOTAsIDYwLCAzNCwgMjMzLCA1MiwgNjAsIDM0LCAyMTcsIDU2LCAyMzMsIDUyLCAKLSAgICA2MCwgMzQsIDIzMywgNDgsIDYwLCAzNCwgMjE5LCAzMCwgNjAsIDM0LCAyMzMsIDUzLCA2MCwgMzQsIDIxMSwgMjM5LCA2MCwgCi0gICAgMzQsIDI0NCwgNDYsIDYwLCAzNCwgMjQ1LCAyMTcsIDYwLCAzNCwgMjQxLCAyMzUsIDYwLCAzNCwgMjQ0LCAwLCA2MCwgMzQsIAotICAgIDI0MCwgMjQ1LCA2MCwgMzQsIDI1MSwgMTk0LCA2MCwgMzQsIDIxNywgNjMsIDYwLCAzNCwgMjQyLCAzNCwgNjAsIDM0LCAKLSAgICAyNDQsIDExMywgNjAsIDM0LCAyMjIsIDI4LCAyMTEsIDIzNiwgNjAsIDM0LCAyNTAsIDIyMCwgNjAsIDM0LCAyNDIsIDIyMiwgCi0gICAgNjAsIDM0LCAyNDQsIDkwLCA2MCwgMzQsIDI1MSwgMjM3LCA2MCwgMzQsIDIyMiwgMSwgNjAsIDM0LCAyNDgsIDc0LCA2MCwgCi0gICAgMzQsIDIxMiwgMiwgNjAsIDM0LCAyNDEsIDIxMCwgNjAsIDM0LCAyMTEsIDQxLCA2MCwgMzQsIDIzMCwgMTkyLCA2MCwgMzQsIAotICAgIDI1MSwgMjIxLCA2MCwgMzQsIDI0NSwgMTU1LCA2MCwgMzQsIDI0MywgMjQ0LCA2MCwgMzQsIDIxNSwgMjA5LCA2MCwgMzQsIAotICAgIDI0NiwgODIsIDYwLCAzNCwgMjIzLCAxNDEsIDYwLCAzNCwgMjI4LCA1MywgNjAsIDM0LCAyNDUsIDQxLCA2MCwgMzQsIDIxNiwgCi0gICAgMTUsIDYwLCAzNCwgMjQ2LCA5NiwgNjAsIDM0LCAyMTUsIDkxLCA2MCwgMzQsIDI0NCwgNDgsIDEwOSwgMjQ4LCAzNywgMTM1LCAKLSAgICA0MywgMjE2LCA0MiwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCA3NywgMjE2LCA0MiwgNTEsIDEwOSwgMjQ4LCAzNywgCi0gICAgMTM1LCA0MywgMjE2LCA0MiwgMjMwLCAyMjQsIDIyLCAyMjIsIDI1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDc3LCAyMTYsIDQyLCAKLSAgICAyMzAsIDIyNCwgMjIsIDUxLCAxMDksIDI0OCwgMzcsIDEzNSwgMjQzLCAyMjksIDIxOCwgMTAsIDEwOSwgMjQ4LCAzNywgCi0gICAgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgNDgsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgNTEsIAotICAgIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgMjMzLCA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgCi0gICAgMTEsIDI0MywgMjQzLCAyMTQsIDE2MCwgMjMzLCA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCAKLSAgICAyMTQsIDE2MCwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgMjMyLCAxMDgsIDIzMywgCi0gICAgNDYsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMjYsIDEyMiwgMTA5LCAyMTksIDE4LCAxMDksIDI0OSwgMjE5LCAxMDksIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgMjQ3LCAxNzcsIDc4LCAyMzUsIDEzMSwgMjM1LCAyMzYsIDIxOCwgMTU5LCA4NywgMTA5LCAyMzUsIAotICAgIDE1OCwgNzgsIDEwOSwgMjQ5LCAyNTIsIDc4LCAxMDksIDU0LCAyMTAsIDg2LCA0MywgMjU0LCAxMTAsIDEyNywgNDQsIDI1NCwgCi0gICAgMTEwLCAxMjcsIDQzLCA1MiwgMjU0LCAxMTAsIDEyNywgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCA0MywgMjQ5LCAxNjEsIAotICAgIDEyNywgNDQsIDI0OSwgMTYxLCAxMjcsIDQzLCA3MSwgMjQ5LCAxNjEsIDEyNywgNDQsIDcxLCAyNDksIDE2MSwgMTI3LCA0MywgCi0gICAgODUsIDIzMywgMjAsIDEyNywgNDQsIDg1LCAyMzMsIDIwLCAxMjcsIDIyNCwgMjM3LCA3OCwgMjQzLCAzMiwgNzgsIDQzLCAKLSAgICAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNDQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0MywgNzEsIDIzMywgMjAsIDEyNywgNDQsIAotICAgIDcxLCAyMzMsIDIwLCAxMjcsIDQzLCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQ0LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAKLSAgICAxMjcsIDQzLCA3MSwgNDIsIDEyNywgNDQsIDcxLCA0MiwgMTI3LCAyMTIsIDM2LCAyNDgsIDE1NiwgMjIzLCA0OSwgNTIsIAotICAgIDIyNCwgMTkxLCAyMjMsIDI1NCwgNzgsIDUyLCAyMjQsIDE5MSwgMjIzLCAyNTQsIDc4LCAxMjEsIDUyLCAyMjQsIDE5MSwgCi0gICAgMjIzLCAyNTQsIDc4LCAyMjQsIDIzNywgMTY0LCAyNDQsIDE5MCwgMjQyLCA4LCAyMjcsIDE5OCwgMTEwLCAyNDIsIDgsIAotICAgIDIyNywgMTk4LCAxMDUsIDI0MiwgOCwgMjI3LCAxOTgsIDE1OCwgMjQyLCA4LCAyMjcsIDE5OCwgMTYxLCAyNDIsIDgsIDIyNywgCi0gICAgMTk4LCAxODksIDI0MiwgOCwgMjI3LCAxOTgsIDE5NCwgMjQyLCA4LCAyMjcsIDE5OCwgMTk4LCAyNDIsIDgsIDIyNywgMTk4LCAKLSAgICAxOTUsIDI0MiwgOCwgMjI3LCAxOTgsIDIwMCwgMTA5LCAyMzMsIDMsIDEzOCwgNzgsIDEwOSwgMjIyLCAyMjgsIDEzOCwgNzgsIAotICAgIDEwOSwgMjQ4LCA0NCwgMTM4LCA3OCwgMTA5LCAyNDUsIDEyOCwgMTM4LCA3OCwgMjQsIDIxOSwgMTU1LCA1OSwgMTM4LCA3OCwgCi0gICAgMjQsIDUyLCA1OSwgMTM4LCA3OCwgMjEyLCAzMiwgMjQ4LCAxNTYsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgNzgsIDY3LCAKLSAgICAyMzQsIDIzMywgMjIzLCA3NywgMiwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDE2NCwgCi0gICAgMjE0LCAxNjAsIDI0MiwgMjcsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMiwgMjEzLCAxMzUsIDIxOSwgMzEsIDE2NCwgMjE0LCAKLSAgICAxNjAsIDI0MiwgMjcsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMTY0LCAyMzIsIDEwOCwgMjQyLCAyNywgMzcsIDIyNCwgCi0gICAgMjM3LCA3OCwgMTA5LCAyMTcsIDMsIDIzMiwgMjE0LCAyNDQsIDE0NiwgMjIwLCAxMzgsIDg3LCAyNDIsIDgsIDIyNywgMTk4LCAKLSAgICAyMTYsIDI0NywgMjQyLCA4LCAyMjcsIDE5OCwgMjE1LCA3MywgMjQyLCA4LCAyMjcsIDE5OCwgMjE2LCAxNjIsIDY3LCAxMDksIAotICAgIDIzNSwgMTU4LCA3OCwgMjMxLCAxNDAsIDc4LCAyMjUsIDI1NSwgMjU0LCAxNDAsIDc4LCAxMDksIDQ1LCAyMzUsIDIzOCwgCi0gICAgMTA5LCAxNjMsIDI0NCwgMTA2LCAyMTksIDE4LCAxNDEsIDEsIDQsIDYxLCAxNDEsIDEsIDYxLCAxNDEsIDEsIDQsIDczLCAKLSAgICAxNDEsIDEsIDczLCAxNDEsIDEsIDQsIDcwLCAxNDEsIDEsIDcwLCAxNDEsIDEsIDQsIDc1LCAxNDEsIDEsIDc1LCAxNDEsIDEsIAotICAgIDQsIDc2LCAxNDEsIDEsIDc2LCAxNDEsIDEsIDE3NiwgMTQxLCAxLCAyNDMsIDEzNSwgMTQxLCAxLCAyMzQsIDkyLCAxNDEsIAotICAgIDEsIDI0MiwgMjE0LCAxNDEsIDEsIDIzMywgMjE3LCAxNDEsIDEsIDI0MiwgMTEzLCAxNDEsIDEsIDIzNCwgMTgyLCAxNDEsIAotICAgIDEsIDI0MywgNjIsIDE0MSwgMSwgMjM0LCAyOCwgMTQxLCAxLCAyNDIsIDE3NCwgMTQxLCAxLCAyMDYsIDE0MSwgMSwgMjEwLCAKLSAgICAxMTYsIDE0MSwgMSwgMjE5LCAxOTEsIDE0MSwgMSwgMjEwLCA0NCwgMTQxLCAxLCAyMTgsIDgzLCAxNDEsIDEsIDIxMCwgMTMsIAotICAgIDE0MSwgMSwgMjIxLCAxODEsIDE0MSwgMSwgMjEwLCA5NCwgMTQxLCAxLCAyMTksIDU4LCAxNDEsIDEsIDIxMCwgMjMsIDE0MSwgCi0gICAgMSwgMjE3LCAxMDUsIDE0MSwgMSwgMjQ4LCAyMjEsIDE0MSwgMSwgMjE2LCAxMTcsIDE0MSwgMSwgMjQ4LCAzLCAxNDEsIDEsIAotICAgIDQsIDIxNSwgMTE4LCAxNDEsIDEsIDIxNSwgMTE4LCAxNDEsIDEsIDI0NiwgNzgsIDE0MSwgMSwgMjE3LCAyMiwgMTQxLCAxLCAKLSAgICAyNDgsIDkwLCAxNDEsIDEsIDExMSwgMTQxLCAxLCAyNDcsIDE0NSwgMTQxLCAxLCAxOTcsIDE0MSwgMSwgMjI4LCAyMzMsIAotICAgIDE0MSwgMSwgMjI3LCAyMzcsIDE0MSwgMSwgMjI5LCAxMDcsIDE0MSwgMSwgMjI4LCA3NCwgMTQxLCAxLCAxNjIsIDE0MSwgMSwgCi0gICAgMjUyLCAxOTEsIDE0MSwgMSwgMTkwLCAxNDEsIDEsIDI0MSwgMTgwLCAxNDEsIDEsIDI1MiwgNiwgMTQxLCAxLCAyMjUsIAotICAgIDEwOCwgMTQxLCAxLCAyNDAsIDIyMiwgMTQxLCAxLCAyNTEsIDEyNSwgMTQxLCAxLCAyMjQsIDE1MCwgMTQxLCAxLCAyNDEsIAotICAgIDIzOCwgMTQxLCAxLCAyNTIsIDc1LCAxNDEsIDEsIDIyNSwgMjIxLCAxNDEsIDEsIDI0MSwgNjgsIDE0MSwgMSwgMjUxLCAKLSAgICAyMDUsIDE0MSwgMSwgMjI1LCAxNiwgMTQxLCAxLCAxODQsIDE0MSwgMSwgMjMwLCAyMzAsIDE0MSwgMSwgMjMwLCAxMDIsIAotICAgIDE0MSwgMSwgMjMxLCA5MSwgMTQxLCAxLCAyMzAsIDE2MSwgMTQxLCAxLCA0LCAxOTEsIDE0MSwgMSwgMTkxLCAxNDEsIDEsIAotICAgIDQsIDIxMCwgMjEyLCAxNDEsIDEsIDIxMCwgMjEyLCAxNDEsIDEsIDQsIDIxMCwgMjQ0LCAxNDEsIDEsIDIxMCwgMjQ0LCAKLSAgICAxNDEsIDEsIDIwNSwgMTQxLCAxLCAyMjMsIDM1LCAxNDEsIDEsIDIyMiwgMTQwLCAxNDEsIDEsIDIyMywgMTI4LCAxNDEsIDEsIAotICAgIDIyMiwgMjExLCAxNDEsIDEsIDQsIDIxMiwgNjUsIDE0MSwgMSwgMjEyLCA2NSwgMTQxLCAxLCAyMTEsIDI1MCwgMTQxLCAxLCAKLSAgICAyMTIsIDIyLCAxNDEsIDEsIDIxMSwgMjI3LCAxNDEsIDEsIDIzMCwgMjUsIDE0MSwgMSwgMjEyLCAxMTYsIDE0MSwgMSwgNCwgCi0gICAgMTc2LCAxNDEsIDEsIDQsIDIzNCwgMTgyLCAzOCwgMjM0LCAyMDEsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgMzgsIDIzNCwgCi0gICAgMjAxLCAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDIzNCwgMjAxLCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDIzNCwgMjAxLCAKLSAgICAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDE0MSwgMjM1LCAxNTgsIDc4LCAxNDEsIDIxMywgMTM1LCAyMzUsIDE1OCwgNzgsIAotICAgIDE0MSwgMjQ3LCAyMjEsIDIxMCwgMjI1LCAyMzQsIDIwMSwgNTIsIDI0MCwgMTY4LCA1NiwgMSwgNCwgNjEsIDU2LCAxLCA2MSwgCi0gICAgNTYsIDEsIDQsIDczLCA1NiwgMSwgNzMsIDU2LCAxLCA0LCA3MCwgNTYsIDEsIDcwLCA1NiwgMSwgNCwgNzUsIDU2LCAxLCAKLSAgICA3NSwgNTYsIDEsIDQsIDc2LCA1NiwgMSwgNzYsIDU2LCAxLCAxNzYsIDU2LCAxLCAyNDMsIDEzNSwgNTYsIDEsIDIzNCwgOTIsIAotICAgIDU2LCAxLCAyNDIsIDIxNCwgNTYsIDEsIDIzMywgMjE3LCA1NiwgMSwgMjQyLCAxMTMsIDU2LCAxLCAyMzQsIDE4MiwgNTYsIAotICAgIDEsIDI0MywgNjIsIDU2LCAxLCAyMzQsIDI4LCA1NiwgMSwgMjQyLCAxNzQsIDU2LCAxLCAyMDYsIDU2LCAxLCAyMTAsIDExNiwgCi0gICAgNTYsIDEsIDIxOSwgMTkxLCA1NiwgMSwgMjEwLCA0NCwgNTYsIDEsIDIxOCwgODMsIDU2LCAxLCAyMTAsIDEzLCA1NiwgMSwgCi0gICAgMjIxLCAxODEsIDU2LCAxLCAyMTAsIDk0LCA1NiwgMSwgMjE5LCA1OCwgNTYsIDEsIDIxMCwgMjMsIDU2LCAxLCAyMTcsIAotICAgIDEwNSwgNTYsIDEsIDI0OCwgMjIxLCA1NiwgMSwgMjE2LCAxMTcsIDU2LCAxLCAyNDgsIDMsIDU2LCAxLCA0LCAyMTUsIDExOCwgCi0gICAgNTYsIDEsIDIxNSwgMTE4LCA1NiwgMSwgMjQ2LCA3OCwgNTYsIDEsIDIxNywgMjIsIDU2LCAxLCAyNDgsIDkwLCA1NiwgMSwgCi0gICAgMTExLCA1NiwgMSwgMjQ3LCAxNDUsIDU2LCAxLCAxOTcsIDU2LCAxLCAyMjgsIDIzMywgNTYsIDEsIDIyNywgMjM3LCA1NiwgCi0gICAgMSwgMjI5LCAxMDcsIDU2LCAxLCAyMjgsIDc0LCA1NiwgMSwgMTYyLCA1NiwgMSwgMjUyLCAxOTEsIDU2LCAxLCAxOTAsIDU2LCAKLSAgICAxLCAyNDEsIDE4MCwgNTYsIDEsIDI1MiwgNiwgNTYsIDEsIDIyNSwgMTA4LCA1NiwgMSwgMjQwLCAyMjIsIDU2LCAxLCAyNTEsIAotICAgIDEyNSwgNTYsIDEsIDIyNCwgMTUwLCA1NiwgMSwgMjQxLCAyMzgsIDU2LCAxLCAyNTIsIDc1LCA1NiwgMSwgMjI1LCAyMjEsIAotICAgIDU2LCAxLCAyNDEsIDY4LCA1NiwgMSwgMjUxLCAyMDUsIDU2LCAxLCAyMjUsIDE2LCA1NiwgMSwgMTg0LCA1NiwgMSwgMjMwLCAKLSAgICAyMzAsIDU2LCAxLCAyMzAsIDEwMiwgNTYsIDEsIDIzMSwgOTEsIDU2LCAxLCAyMzAsIDE2MSwgNTYsIDEsIDQsIDE5MSwgNTYsIAotICAgIDEsIDE5MSwgNTYsIDEsIDQsIDIxMCwgMjEyLCA1NiwgMSwgMjEwLCAyMTIsIDU2LCAxLCA0LCAyMTAsIDI0NCwgNTYsIDEsIAotICAgIDIxMCwgMjQ0LCA1NiwgMSwgMjA1LCA1NiwgMSwgMjIzLCAzNSwgNTYsIDEsIDIyMiwgMTQwLCA1NiwgMSwgMjIzLCAxMjgsIAotICAgIDU2LCAxLCAyMjIsIDIxMSwgNTYsIDEsIDQsIDIxMiwgNjUsIDU2LCAxLCAyMTIsIDY1LCA1NiwgMSwgMjExLCAyNTAsIDU2LCAKLSAgICAxLCAyMTIsIDIyLCA1NiwgMSwgMjExLCAyMjcsIDU2LCAxLCAyMzAsIDI1LCA1NiwgMSwgMjEyLCAxMTYsIDU2LCAxLCA0LCAKLSAgICAxNzYsIDU2LCAxLCA0LCAyMzQsIDE4MiwgNTYsIDEsIDIxNCwgMjcsIDU2LCAxLCAyMTMsIDE3NiwgNTYsIDEsIDIxMywgCi0gICAgMjU1LCA1NiwgMSwgMjEzLCAxMzgsIDU2LCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIzNCwgMjAxLCAyMjQsIDE3MywgMjE5LCAKLSAgICAzMSwgNzgsIDU2LCAyMzUsIDE1OCwgNzgsIDU2LCAyMTMsIDEzNSwgMjM1LCAxNTgsIDc4LCA1NiwgMjQ3LCAyMjEsIDIzMywgCi0gICAgMjU1LCAyNTEsIDE4NCwgMSwgMjUzLCAxNTgsIDI1MSwgMTg0LCAxLCAyMjYsIDEwNSwgMjUxLCAxODQsIDEsIDE5MywgMjUxLCAKLSAgICAxODQsIDEsIDI0NSwgNiwgMjUxLCAxODQsIDEsIDI0OSwgNjAsIDI1MSwgMTg0LCAxLCAyMTcsIDE1MiwgMjUxLCAxODQsIDEsIAotICAgIDIzMCwgMjUsIDI1MSwgMTg0LCAxLCAxNTYsIDI1MSwgMTg0LCAxLCAyNDMsIDIwMiwgMjUxLCAxODQsIDEsIDIzNSwgMjMsIAotICAgIDI1MSwgMTg0LCAxLCAyNDIsIDYwLCAyNTEsIDE4NCwgMSwgMjM1LCAxNDQsIDI1MSwgMTg0LCAxLCAyMjQsIDk2LCAyNTEsIAotICAgIDE4NCwgMSwgMjExLCAxNzgsIDI1MSwgMTg0LCAxLCAyMTAsIDgzLCAyNTEsIDE4NCwgMSwgMjUwLCAxNTgsIDI1MSwgMTg0LCAKLSAgICAxLCAyMjAsIDEwNCwgMjUxLCAxODQsIDEsIDE1MywgMjUxLCAxODQsIDEsIDIxMCwgMTU5LCAyNTEsIDE4NCwgMSwgMjUxLCAKLSAgICA2NiwgMjUxLCAxODQsIDEsIDIyMiwgOTEsIDI1MSwgMTg0LCAxLCA2MSwgMjUxLCAxODQsIDEsIDc2LCAyNTEsIDE4NCwgMSwgCi0gICAgNzUsIDI1MSwgMTg0LCAxLCAyNDUsIDE5NywgMjUxLCAxODQsIDEsIDI1NCwgMjAxLCAyNTEsIDE4NCwgMSwgMjQ1LCAxOTUsIAotICAgIDI1MSwgMTg0LCAxLCAyNTMsIDE5MiwgMjUxLCAxODQsIDEsIDIyNiwgMTM0LCAyNTEsIDE4NCwgMSwgMjU0LCAxMjMsIDI1MSwgCi0gICAgMTg0LCAxLCAyNDUsIDE1MCwgMjUxLCAxODQsIDEsIDI1NCwgMTE1LCAyNTEsIDE4NCwgMSwgMjQ1LCAxMzgsIDI1MSwgMTg0LCAKLSAgICAxLCAyNDUsIDkyLCAyNTEsIDE4NCwgMSwgNzMsIDI1MSwgMTg0LCAxLCA3MCwgMjUxLCAxODQsIDEsIDIzNSwgMTU2LCAyNTEsIAotICAgIDE4NCwgMSwgMjE0LCAxMDUsIDI1MSwgMTg0LCAxLCAyMjksIDc5LCAyNTEsIDE4NCwgMSwgMjQyLCAxNzgsIDI1MSwgMTg0LCAKLSAgICAxLCAyMzYsIDM0LCAyNCwgMSwgMjM0LCA1OCwgMjQsIDEsIDIxOCwgMjE1LCAyNCwgMSwgMjM0LCA1MSwgMjQsIDEsIDIyOCwgCi0gICAgMjI2LCAyNCwgMSwgMjI4LCAyMjQsIDI0LCAxLCAyMjgsIDIyMywgMjQsIDEsIDIxNiwgMTAxLCAyNCwgMSwgMjE4LCAyMDQsIAotICAgIDI0LCAxLCAyMjMsIDI2LCAyNCwgMSwgMjIzLCAyMSwgMjQsIDEsIDIyMywgMTgsIDI0LCAxLCAyMjMsIDExLCAyNCwgMSwgCi0gICAgMjIzLCA2LCAyNCwgMSwgMjIzLCAxLCAyNCwgMSwgMjIzLCAxMiwgMjQsIDEsIDIyMywgMjQsIDI0LCAxLCAyMzAsIDIxNywgCi0gICAgMjQsIDEsIDIyNSwgOTUsIDI0LCAxLCAyMTgsIDIxMiwgMjQsIDEsIDIyNSwgODQsIDI0LCAxLCAyMTksIDE0OCwgMjQsIDEsIAotICAgIDIxOCwgMjA5LCAyNCwgMSwgMjM2LCA1NiwgMjQsIDEsIDI1MCwgNDYsIDI0LCAxLCAyMTgsIDIxOSwgMjQsIDEsIDI1MCwgCi0gICAgMTA2LCAyNCwgMSwgMjM0LCAxMTAsIDI0LCAxLCAyMTYsIDE3MywgMjQsIDEsIDIyNSwgMTMxLCAyNCwgMSwgMjQxLCAxNzIsIAotICAgIDI0LCAxLCA2MSwgMjQsIDEsIDI1NCwgMjQzLCAyNCwgMSwgMTkxLCAyNCwgMSwgMjExLCA5MiwgMjQsIDEsIDI0NSwgMTE3LCAKLSAgICAyNCwgMSwgNzUsIDI0LCAxLCAyMTEsIDM2LCAyNCwgMSwgMjExLCA0NywgMjQsIDEsIDc2LCAyNCwgMSwgMjEyLCA2NSwgMjQsIAotICAgIDEsIDIxMiwgNjIsIDI0LCAxLCAyMjYsIDIzNCwgMjQsIDEsIDIxMCwgMjQ0LCAyNCwgMSwgNzAsIDI0LCAxLCAyMTIsIDExLCAKLSAgICAyNCwgMSwgMjEyLCAyMiwgMjQsIDEsIDIxMSwgMjUwLCAyNCwgMSwgMjEwLCAyMTIsIDI0LCAxLCAyNDUsIDU1LCAyNCwgMSwgCi0gICAgMjExLCA4LCAyNCwgMSwgNzMsIDI0LCAyNDQsIDEwMywgMjQsIDEsIDIxOCwgMjEzLCAyNCwgMSwgMjI4LCAyMTYsIDI0LCAxLCAKLSAgICAyMjgsIDIxOCwgMjQsIDEsIDIyOCwgMjIxLCAyNCwgMSwgMjIzLCAxOSwgMjQsIDEsIDIyMywgMCwgMjQsIDEsIDIyMywgOCwgCi0gICAgMjQsIDEsIDIyMywgMTMsIDI0LCAxLCAyMjIsIDI1NCwgMjQsIDEsIDIzMCwgMjEwLCAyNCwgMSwgMjMwLCAyMDcsIDI0LCAxLCAKLSAgICAyMzAsIDIxMSwgMjQsIDEsIDIzNCwgMjIxLCAyNCwgMSwgMjI1LCA5MCwgMjQsIDEsIDIyNSwgNzYsIDI0LCAxLCAyMjUsIAotICAgIDgyLCAyNCwgMSwgMjI1LCA3OSwgMjQsIDEsIDIyNSwgOTMsIDI0LCAxLCAyMjUsIDc3LCAyNCwgMSwgMjM0LCAyMTksIDI0LCAKLSAgICAxLCAyMzQsIDIxNywgMjQsIDEsIDIxOSwgMTQxLCAyNCwgMSwgMjE5LCAxMzksIDI0LCAxLCAyMTksIDEzMSwgMjQsIDEsIAotICAgIDIxOSwgMTM2LCAyNCwgMSwgMjE5LCAxNDYsIDI0LCAxLCAyMjYsIDMyLCAyNCwgMSwgMjE4LCAyMTYsIDI0LCAxLCAyMTEsIAotICAgIDI2LCAyNCwgMSwgMjExLCAyMiwgMjQsIDEsIDIxMSwgMjMsIDI0LCAxLCAyMzQsIDIyMCwgMjQsIDEsIDIxOCwgMjE3LCAyNCwgCi0gICAgMSwgMjExLCAzMiwgMjQsIDEsIDIxMCwgMjM4LCAyNCwgMSwgMjEwLCAyMzcsIDI0LCAxLCAyMTAsIDI0MCwgMjQsIDEsIAotICAgIDIxMCwgMjAzLCAyNCwgMSwgMjEwLCAyMDQsIDI0LCAxLCAyMTAsIDIwNywgMjQsIDEsIDI1NCwgMzQsIDI0LCAxLCAyNTQsIAotICAgIDI4LCAxMDksIDI1NCwgOTksIDIzMiwgMjAzLCA3OCwgMTA5LCAyNTQsIDk5LCAyMjMsIDUwLCA3OCwgMTA5LCAyNTQsIDk5LCAKLSAgICAxMjMsIDc4LCAxMDksIDI1NCwgOTksIDExMywgNzgsIDEwOSwgMjU0LCA5OSwgMTM0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDQsIAotICAgIDExLCA3OCwgMTA5LCAyNTQsIDk5LCAyMTYsIDE0LCA3OCwgMTA5LCAyNTQsIDk5LCAyMzAsIDIyNCwgNzgsIDEwOSwgMjU0LCAKLSAgICA5OSwgMjUxLCAxNzUsIDc4LCAxMDksIDI1NCwgOTksIDI0NCwgOTIsIDc4LCAxMDksIDI1NCwgOTksIDIyMSwgMTc2LCA3OCwgCi0gICAgMTA5LCAyNTQsIDk5LCAyMTYsIDE2OSwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ0LCA0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDEsIAotICAgIDIyNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ1LCAyMjQsIDc4LCAxMDksIDI1NCwgOTksIDIzMSwgMTg2LCA3OCwgMjUxLCAKLSAgICAxODQsIDEsIDI1MSwgMTI1LCAyNTEsIDE4NCwgMSwgMjEwLCA0NCwgMjUxLCAxODQsIDEsIDIzNSwgMTA4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjQyLCAxMTMsIDI1MSwgMTg0LCAxLCAyNDUsIDIwOSwgMjUxLCAxODQsIDEsIDI0NSwgMTM1LCAyNTEsIDE4NCwgMSwgCi0gICAgMjI2LCAxODMsIDI1MSwgMTg0LCAxLCAyMjYsIDE4NywgMjUxLCAxODQsIDEsIDIzNSwgMTc5LCAyNTEsIDE4NCwgMSwgMjU0LCAKLSAgICAxMDEsIDI1MSwgMTg0LCAxLCAyMzUsIDIyNCwgMjUxLCAxODQsIDEsIDIxNCwgMTY4LCAyNTEsIDE4NCwgMSwgMjM2LCAxNiwgCi0gICAgMjUxLCAxODQsIDEsIDIyOSwgNTcsIDI1MSwgMTg0LCAxLCAyNTQsIDE5NSwgMjUxLCAxODQsIDEsIDI1MywgMTg3LCAyNTEsIAotICAgIDE4NCwgMSwgMjU0LCAxMzYsIDI1MSwgMTg0LCAxLCAyMjYsIDIwNCwgMjUxLCAxODQsIDEsIDIyNiwgMTg5LCAyNTEsIDE4NCwgCi0gICAgMSwgMjM1LCAyMjEsIDI1MSwgMTg0LCA0MCwgMSwgMjI2LCAxMDUsIDI1MSwgMTg0LCA0MCwgMSwgMjE3LCAxNTIsIDI1MSwgCi0gICAgMTg0LCA0MCwgMSwgMjM1LCAyMywgMjUxLCAxODQsIDQwLCAxLCAyNDIsIDYwLCAyNTEsIDE4NCwgMSwgMjQyLCAyNTAsIAotICAgIDI1MSwgMTg0LCAxLCAyMzIsIDI1NSwgMjUxLCAxODQsIDEsIDIwOSwgMjUwLCA5LCAyMTgsIDEwMywgMjE3LCAxNTIsIDksIAotICAgIDIxOCwgMTAzLCAyMTIsIDQsIDksIDIxOCwgMTAzLCAyMTEsIDE1OCwgOSwgMjE4LCAxMDMsIDI1MSwgNzksIDksIDIxOCwgCi0gICAgMTAzLCAyMTcsIDI1NCwgOSwgMjE4LCAxMDMsIDI0MCwgMTU4LCA5LCAyMTgsIDEwMywgMjQwLCAxNjIsIDksIDIxOCwgMTAzLCAKLSAgICAyNDAsIDIzMSwgOSwgMjE4LCAxMDMsIDI0MCwgMTU5LCA5LCAyMTgsIDEwMywgMjE3LCAxNTUsIDksIDIxOCwgMTAzLCAyNDAsIAotICAgIDE2MSwgOSwgMjE4LCAxMDMsIDI0MCwgMTU3LCA5LCAyMTgsIDEwMywgMjQwLCAyMjksIDksIDIxOCwgMTAzLCAyNDAsIDE2MCwgCi0gICAgOSwgMjE4LCAxMDMsIDI0MCwgMTU2LCA5LCAyMTgsIDEwMywgMjMwLCAyNSwgOSwgMjE4LCAxMDMsIDI0MiwgNjAsIDksIAotICAgIDIxOCwgMTAzLCAyMjIsIDkxLCA5LCAyMTgsIDEwMywgMjI2LCAxMDUsIDksIDIxOCwgMTAzLCAyMTksIDIxLCA5LCAyMTgsIAotICAgIDEwMywgMjQ5LCA2MCwgOSwgMjE4LCAxMDMsIDI0MCwgMTYzLCA5LCAyMTgsIDEwMywgMjQxLCAxOTAsIDksIDIxOCwgMTAzLCAKLSAgICAyMTcsIDE2NCwgOSwgMjE4LCAxMDMsIDIxNywgMjMzLCA5LCAyMTgsIDEwMywgMjE4LCAxNjgsIDksIDIxOCwgMTAzLCAyMjAsIAotICAgIDExMCwgOSwgMjE4LCAxMDMsIDIyNSwgMjI0LCA5LCAyMTgsIDEwMywgMjI0LCA5OCwgOSwgMjE4LCAxMDMsIDIxNiwgNDMsIAotICAgIDksIDIxOCwgMTAzLCAyMTcsIDE1NCwgOSwgMjE4LCAxMDMsIDIxNywgMjQ0LCA5LCAyMTgsIDEwMywgMjQwLCAxNzAsIDksIAotICAgIDIxOCwgMTAzLCAyNDAsIDE1NSwgOSwgMjE4LCAxMDMsIDIyNSwgMTQ5LCA5LCAyMTgsIDEwMywgMjI0LCA5NiwgNTYsIDEsIAotICAgIDQsIDIzMywgMjE3LCA1NiwgMSwgNCwgMjE5LCAxOTEsIDU2LCAxLCA0LCAyMTgsIDgzLCA1NiwgMSwgNCwgMTExLCA1NiwgMSwgCi0gICAgNCwgMjI3LCAyMzcsIDU2LCAxLCA0LCAxNjIsIDU2LCAxLCA0LCAyNDEsIDE4MCwgNTYsIDEsIDQsIDI0MCwgMjIyLCA1NiwgCi0gICAgMSwgNCwgMjQxLCAyMzgsIDU2LCAxLCA0LCAyNDEsIDY4LCA1NiwgMSwgNCwgMjMwLCAxMDIsIDU2LCAxLCA0LCAyMDUsIDU2LCAKLSAgICAxLCA0LCAyMjMsIDM1LCA1NiwgMSwgNCwgMjIyLCAxNDAsIDU2LCAxLCA0LCAyMjMsIDEyOCwgNTYsIDEsIDQsIDIyMiwgCi0gICAgMjExLCA4OCwgMjQsIDIzNCwgNTgsIDg4LCAyNCwgMjI4LCAyMjYsIDg4LCAyNCwgMjE2LCAxMDEsIDg4LCAyNCwgMjIzLCAKLSAgICAyNiwgODgsIDI0LCAyMzAsIDIxNywgODgsIDI0LCAyMjUsIDk1LCA4OCwgMjQsIDIxOSwgMTQ4LCA4OCwgMjQsIDIzNiwgNTYsIAotICAgIDg4LCAyNCwgMjUwLCA0NiwgODgsIDI0LCAyNTAsIDEwNiwgODgsIDI0LCAyMzQsIDExMCwgODgsIDI0LCAyMTYsIDE3MywgCi0gICAgODgsIDI0LCAyMjUsIDEzMSwgODgsIDI0LCAyNDEsIDE3MiwgODgsIDI0LCAyMzQsIDU5LCA2MSwgODgsIDI0LCAyMjgsIAotICAgIDIyNywgNjEsIDg4LCAyNCwgMjE2LCAxMDIsIDYxLCA4OCwgMjQsIDIyMywgMjcsIDYxLCA4OCwgMjQsIDIzMCwgMjE4LCA2MSwgCi0gICAgODgsIDI0LCAyMjUsIDk2LCA2MSwgODgsIDI0LCAyMTksIDE0OSwgNjEsIDg4LCAyNCwgMjM2LCA1NywgNjEsIDg4LCAyNCwgCi0gICAgMjUwLCA0NywgNjEsIDg4LCAyNCwgMjUwLCAxMDcsIDYxLCA4OCwgMjQsIDIzNCwgMTExLCA2MSwgODgsIDI0LCAyMTYsIAotICAgIDE3NCwgNjEsIDg4LCAyNCwgMjI1LCAxMzIsIDYxLCA4OCwgMjQsIDI0MSwgMTczLCA2MSwgODgsIDI0LCAyNTAsIDQ3LCA3MCwgCi0gICAgODgsIDIzNCwgMywgMTM1LCAyMjYsIDIxNywgODgsIDIzNCwgMywgMTM1LCAxNDQsIDI0MCwgMjIyLCA4OCwgMTU0LCAxMTAsIAotICAgIDg4LCAxNTQsIDEwNSwgODgsIDE1NCwgMTU4LCA4OCwgMTU0LCAxNjEsIDg4LCAxNTQsIDE4OSwgODgsIDE1NCwgMTk0LCA4OCwgCi0gICAgMTU0LCAxOTgsIDg4LCAxNTQsIDE5NSwgODgsIDE1NCwgMjAwLCA4OCwgMTU0LCAyMTYsIDI0NywgODgsIDE1NCwgMjMwLCAKLSAgICAxMjgsIDg4LCAxNTQsIDI0NCwgOTYsIDg4LCAxNTQsIDIxMiwgNDAsIDg4LCAxNTQsIDIxMSwgMjE0LCA4OCwgMTU0LCAyMzEsIAotICAgIDM5LCA4OCwgMTU0LCAyNDUsIDIyMywgODgsIDE1NCwgMjE4LCAzNywgODgsIDE1NCwgMjE4LCAxMzIsIDg4LCAxNTQsIDI0MSwgCi0gICAgMjQ0LCA4OCwgMTU0LCAyMTksIDU0LCA4OCwgMTU0LCAyMjksIDIwNCwgODgsIDE1NCwgMjE5LCA0LCA4OCwgMTU0LCAyNDQsIAotICAgIDEwMiwgODgsIDE1NCwgMjQ5LCAyMDAsIDg4LCAxNTQsIDIzMywgMTI1LCA4OCwgMTU0LCAyMjMsIDcxLCA4OCwgMTU0LCAKLSAgICAyNTEsIDE1LCA4OCwgMTU0LCAyMTgsIDg3LCA4OCwgMTU0LCAyMTgsIDIwLCA4OCwgMTU0LCAyNDUsIDEyNywgODgsIDE1NCwgCi0gICAgMjIzLCA2MywgODgsIDE1NCwgMjU0LCAxNTAsIDg4LCAxNTQsIDI0NCwgMTI4LCA4OCwgMTU0LCAyMjMsIDYxLCA4OCwgMTU0LCAKLSAgICAyMjAsIDE1NiwgODgsIDE1NCwgMjIzLCAxMjcsIDM3LCAxNTQsIDIyNCwgMTIsIDM3LCAxNTQsIDIzNCwgODAsIDM3LCAxNTQsIAotICAgIDIyMSwgMTk4LCAzNywgMTU0LCAyMzMsIDI1NSwgMzcsIDU0LCAyMTYsIDI0OCwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgCi0gICAgMzcsIDU0LCAyMTUsIDc0LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDIxNiwgMTYzLCAyMjYsIDE5NywgODUsIAotICAgIDIxOCwgMjM0LCAzNywgNTQsIDI0NCwgMTYsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjQ0LCAxMTUsIDIyNiwgCi0gICAgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjE5LCAxMTIsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjIwLCAKLSAgICAxMTcsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjQ1LCAxODUsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIAotICAgIDIyNSwgMjUxLCA1MCwgMzcsIDU0LCAyMTUsIDc0LCAxMTAsIDM3LCA1NCwgMjE1LCA3NCwgMTA1LCAzNywgNTQsIDIxNSwgCi0gICAgNzQsIDE1OCwgMzcsIDU0LCAyMTUsIDc0LCAxNjEsIDM3LCA1NCwgMjE1LCA3NCwgMTg5LCAzNywgNTQsIDIxNSwgNzQsIAotICAgIDE5NCwgMzcsIDU0LCAyMTUsIDc0LCAxOTgsIDM3LCA1NCwgMjE1LCA3NCwgMTk1LCAzNywgNTQsIDIxNSwgNzQsIDIwMCwgCi0gICAgMzcsIDU0LCAyMTYsIDE2MiwgMzcsIDU0LCAyMTYsIDE2MywgMTEwLCAzNywgNTQsIDIxNiwgMTYzLCAxMDUsIDM3LCA1NCwgCi0gICAgMjE2LCAxNjMsIDE1OCwgMzcsIDU0LCAyMTYsIDE2MywgMTYxLCAzNywgNTQsIDIxNiwgMTYzLCAxODksIDM3LCAyNCwgMjM0LCAKLSAgICA1OCwgMzcsIDI0LCAyMjgsIDIyNiwgMzcsIDI0LCAyMTYsIDEwMSwgMzcsIDI0LCAyMjMsIDI2LCAzNywgMjQsIDIzMCwgCi0gICAgMjE3LCAzNywgMjQsIDIyNSwgOTUsIDM3LCAyNCwgMjE5LCAxNDgsIDM3LCAyNCwgMjM2LCA1NiwgMzcsIDI0LCAyNTAsIDQ2LCAKLSAgICAzNywgMjQsIDI1MCwgMTA2LCAzNywgMjQsIDIzNCwgMTEwLCAzNywgMjQsIDIxNiwgMTczLCAzNywgMjQsIDIyNSwgMTMxLCAKLSAgICAzNywgMjQsIDI0MSwgMTcyLCAzNywgMjQsIDIzNCwgNTksIDYxLCAzNywgMjQsIDIyOCwgMjI3LCA2MSwgMzcsIDI0LCAyMTYsIAotICAgIDEwMiwgNjEsIDM3LCAyNCwgMjIzLCAyNywgNjEsIDM3LCAyNCwgMjMwLCAyMTgsIDYxLCAzNywgMjQsIDIyNSwgOTYsIDYxLCAKLSAgICAzNywgMjQsIDIxOSwgMTQ5LCA2MSwgMzcsIDI0LCAyMzYsIDU3LCA2MSwgMzcsIDI0LCAyNTAsIDQ3LCA2MSwgMzcsIDI0LCAKLSAgICAyNTAsIDEwNywgNjEsIDM3LCAyNCwgMjM0LCAxMTEsIDYxLCAzNywgMjQsIDIxNiwgMTc0LCA2MSwgMzcsIDI0LCAyMjUsIAotICAgIDEzMiwgNjEsIDM3LCAyNCwgMjQxLCAxNzMsIDYxLCAzNywgMjM0LCAzLCAxMzUsIDI1MCwgMTQ4LCAzNywgMjM0LCAzLCAKLSAgICAxMzUsIDIzNSwgNDcsIDM3LCAyNCwgMjM2LCA1NywgNzAsIDIzNCwgMywgMjE4LCAxNTksIDg3LCAzNywgMTU0LCAxMTAsIAotICAgIDM3LCAxNTQsIDEwNSwgMzcsIDE1NCwgMTU4LCAzNywgMTU0LCAxNjEsIDM3LCAxNTQsIDE4OSwgMzcsIDE1NCwgMTk0LCAzNywgCi0gICAgMTU0LCAxOTgsIDM3LCAxNTQsIDE5NSwgMzcsIDE1NCwgMjAwLCAzNywgMTU0LCAyMTYsIDI0NywgMzcsIDE1NCwgMjMwLCAKLSAgICAxMjgsIDM3LCAxNTQsIDI0NCwgOTYsIDM3LCAxNTQsIDIxMiwgNDAsIDM3LCAxNTQsIDIxMSwgMjE0LCAzNywgMTU0LCAyMzEsIAotICAgIDM5LCAzNywgMTU0LCAyNDUsIDIyMywgMzcsIDE1NCwgMjE4LCAzNywgMzcsIDE1NCwgMjE4LCAxMzIsIDM3LCAxNTQsIDI0MSwgCi0gICAgMjQ0LCAzNywgMTU0LCAyMTksIDU0LCAzNywgMTU0LCAyMjksIDIwNCwgMzcsIDE1NCwgMjE5LCA0LCAzNywgMTU0LCAyNDQsIAotICAgIDEwMiwgMzcsIDE1NCwgMjQ5LCAyMDAsIDM3LCAxNTQsIDIzMywgMTI1LCAzNywgMTU0LCAyMjEsIDE3NCwgMzcsIDE1NCwgCi0gICAgMjMxLCAxODksIDM3LCAxNTQsIDI0NCwgMTM3LCAzNywgMTU0LCAyMTgsIDQ5LCAzNywgMTU0LCAyNDUsIDM0LCAzNywgMTU0LCAKLSAgICAyMjQsIDE4NywgMzcsIDE1NCwgMjUzLCAxOTYsIDM3LCAxNTQsIDIzNSwgMTU5LCAzNywgMTU0LCAyMjMsIDYxLCAzNywgCi0gICAgMTU0LCAyNDksIDE2NCwgMzcsIDE1NCwgMjQ5LCAxNTUsIDM3LCAxNTQsIDI0MSwgMTY1LCAzNywgMTU0LCAyNTAsIDE3NCwgCi0gICAgMzcsIDE1NCwgMjMyLCAxMTAsIDM3LCAxNTQsIDIzMywgNDYsIDM3LCAxNTQsIDIyMiwgMjUxLCAzNywgMTU0LCAyMzEsIDgzLCAKLSAgICAzNywgMTU0LCAyMjMsIDg3LCAzNywgMTU0LCAyMTgsIDg3LCAzNywgMTU0LCAyMTgsIDIwLCAzNywgMTU0LCAyNDUsIDEyNywgCi0gICAgMzcsIDE1NCwgMjIzLCA2MywgMzcsIDE1NCwgMjU0LCAxNTAsIDM3LCAxNTQsIDIyOCwgMjEyLCAzNywgNTQsIDIxNiwgMTYzLCAKLSAgICAxOTQsIDM3LCA1NCwgMjE2LCAxNjMsIDE5OCwgMzcsIDU0LCAyMTYsIDE2MywgMTk1LCAzNywgNTQsIDIxNiwgMTYzLCAyMDAsIAotICAgIDM3LCA1NCwgMjQ0LCAxNSwgMzcsIDU0LCAyNDQsIDE2LCAxMTAsIDM3LCA1NCwgMjQ0LCAxNiwgMTA1LCAzNywgNTQsIDI0NCwgCi0gICAgMTYsIDE1OCwgMzcsIDU0LCAyNDQsIDE2LCAxNjEsIDM3LCA1NCwgMjQ0LCAxNiwgMTg5LCAzNywgNTQsIDI0NCwgMTYsIAotICAgIDE5NCwgMzcsIDU0LCAyNDQsIDE2LCAxOTgsIDM3LCA1NCwgMjQ0LCAxNiwgMTk1LCAzNywgNTQsIDI0NCwgMTYsIDIwMCwgCi0gICAgMzcsIDU0LCAyNDQsIDExNCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjM1LCAxMzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIAotICAgIDI0NCwgMTQ4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMzEsIDE2MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjU0LCA0NywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjMxLCAxMzIsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzNSwgNDUsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDIzNSwgNDYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI1MywgMTg4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMjAsIAotICAgIDEzNiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjI2LCAyMzksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIyOCwgNDAsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0OCwgODUsIDQyLCAyNDEsIDE5MCwgNDIsIDI0NSwgODgsIDQyLCAyNDUsIDQzLCAyMzIsIAotICAgIDIxOSwgMjMyLCAyNDAsIDUwLCAzNywgNTYsIDYxLCAzNywgNTYsIDczLCAzNywgNTYsIDcwLCAzNywgNTYsIDc1LCAzNywgCi0gICAgNTYsIDc2LCAzNywgNTYsIDE3NiwgMzcsIDU2LCAyMzQsIDkyLCAzNywgNTYsIDIzMywgMjE3LCAzNywgNTYsIDIzNCwgMTgyLCAKLSAgICAzNywgNTYsIDIzNCwgMjgsIDM3LCA1NiwgMjA2LCAzNywgNTYsIDIxOSwgMTkxLCAzNywgNTYsIDIxOCwgODMsIDM3LCA1NiwgCi0gICAgMjIxLCAxODEsIDM3LCA1NiwgMjE5LCA1OCwgMzcsIDU2LCAyMTcsIDEwNSwgMzcsIDU2LCAyMTYsIDExNywgMzcsIDU2LCAKLSAgICAyMTUsIDExOCwgMzcsIDU2LCAyMTcsIDIyLCAzNywgNTYsIDExMSwgMzcsIDU2LCAxOTcsIDM3LCA1NiwgMjI4LCAyMzMsIAotICAgIDM3LCA1NiwgMjI3LCAyMzcsIDM3LCA1NiwgMjI5LCAxMDcsIDM3LCA1NiwgMjI4LCA3NCwgMzcsIDU2LCAxNjIsIDM3LCA1NiwgCi0gICAgMjQxLCAxODAsIDM3LCA1NiwgMjQwLCAyMjIsIDM3LCA1NiwgMjQxLCAyMzgsIDM3LCA1NiwgMjQxLCA2OCwgMzcsIDU2LCAKLSAgICAxODQsIDM3LCA1NiwgMjMwLCAyMzAsIDM3LCA1NiwgMjMwLCAxMDIsIDM3LCA1NiwgMjMxLCA5MSwgMzcsIDU2LCAyMzAsIAotICAgIDE2MSwgMzcsIDU2LCAxOTEsIDM3LCA1NiwgMjEwLCAyMTIsIDM3LCA1NiwgMjEwLCAyNDQsIDM3LCA1NiwgMjA1LCAzNywgCi0gICAgNTYsIDIyMywgMzUsIDM3LCA1NiwgMjIyLCAxNDAsIDM3LCA1NiwgMjIzLCAxMjgsIDM3LCA1NiwgMjIyLCAyMTEsIDM3LCAKLSAgICA1NiwgMjEyLCA2NSwgMzcsIDU2LCAyMTEsIDI1MCwgMzcsIDU2LCAyMTIsIDIyLCAzNywgNTYsIDIxMSwgMjI3LCA0MiwgCi0gICAgMjU0LCA3MSwgNDIsIDI1MywgMjM5LCA0MiwgMjU0LCA5NSwgNDIsIDI1NSwgMzEsIDQyLCAyMzUsIDIyNiwgNDIsIDIzNSwgCi0gICAgMTk2LCA0MiwgMjE0LCAxNjYsIDQyLCAyNDUsIDY2LCA0MiwgMjQ1LCAyMDYsIDQyLCAyMjYsIDE4NiwgNDIsIDIyNiwgMTgwLCAKLSAgICA0MiwgMjM0LCAyNDUsIDQyLCAyMzQsIDIxNCwgNDIsIDIzNCwgMjExLCA0MiwgMjQzLCA5MiwgNDIsIDI0MywgMTAxLCA0MiwgCi0gICAgMjQyLCAyMDQsIDQyLCAyNDIsIDIwMCwgNDIsIDIzMywgMTUwLCA0MiwgMjQyLCAxOTMsIDQyLCAyMzQsIDcyLCA0MiwgMjM0LCAKLSAgICA3MSwgNDIsIDIzNCwgNzAsIDQyLCAyMzQsIDY5LCA0MiwgMjQyLCA4NiwgNDIsIDI0MiwgODUsIDQyLCAyMzMsIDE5MywgNDIsIAotICAgIDIzMywgMTk1LCA0MiwgMjM0LCAxNzgsIDQyLCAyMzQsIDEsIDQyLCAyMzQsIDgsIDQyLCAyMjIsIDE2LCA0MiwgMjIxLCAKLSAgICAyMzcsIDQyLCAyMTksIDEyOSwgNDIsIDIyMCwgMTQxLCA0MiwgMjIwLCAxNDAsIDQyLCAyNDgsIDIxOCwgNDIsIDI0OCwgMzYsIAotICAgIDQyLCAyNDcsIDEyMSwgNDIsIDIxNiwgMzIsIDQyLCAyMjksIDIwMCwgNDIsIDIyOCwgNDEsIDQyLCAyNDIsIDMyLCA0MiwgCi0gICAgMjI2LCA4NCwgNDIsIDIyNiwgODMsIDQyLCAyNTIsIDE4OCwgNDIsIDIyNSwgMTA1LCA0MiwgMjI1LCA2OSwgNDIsIDIyNSwgCi0gICAgNzAsIDQyLCAyNTEsIDIzNCwgNDIsIDI0MCwgMjIxLCA0MiwgMjQwLCAyMTcsIDQyLCAyNTEsIDkxLCA0MiwgMjQwLCAyMDQsIAotICAgIDQyLCAyNDEsIDIxNSwgNDIsIDIyNSwgMTU5LCA0MiwgMjI1LCAxOTQsIDQyLCAyNDEsIDE5OCwgNDIsIDIyNSwgMTkxLCA0MiwgCi0gICAgMjI1LCAyMDcsIDQyLCAyNTIsIDYxLCA0MiwgMjI1LCA2LCA0MiwgMjUxLCAxODAsIDQyLCAyNDEsIDU2LCA0MiwgMjI0LCAKLSAgICAyNTAsIDQyLCAyNDEsIDQ4LCA0MiwgMjQxLCA1MCwgNDIsIDIzMSwgMjAxLCA0MiwgMjMxLCAxOTcsIDQyLCAyMzEsIDIwNiwgCi0gICAgNDIsIDIzMSwgMTUwLCA0MiwgMjMxLCAxNzUsIDQyLCAyMzAsIDE5NywgNDIsIDIzMCwgMTc2LCA0MiwgMjMwLCAxNzUsIDQyLCAKLSAgICAyMzEsIDc0LCA0MiwgMjMxLCA3MSwgNDIsIDIzMSwgNzUsIDQyLCAyMTEsIDEwMiwgNDIsIDIxMSwgMTAwLCA0MiwgMjEwLCAKLSAgICAyMDEsIDQyLCAyMjIsIDIyNiwgNDIsIDIyMiwgMjMwLCA0MiwgMjIyLCAxMTcsIDQyLCAyMjIsIDExMSwgNDIsIDIyMywgODUsIAotICAgIDQyLCAyMjMsIDgyLCA0MiwgMjEyLCAzOCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxMCwgODYsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxMTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxMDUsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxNTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxNjEsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxODksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTQsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTUsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMDAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTYsIDI0NywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDI0NSwgMTY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgCi0gICAgMjE1LCA3NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNiwgMTY0LCAxMDksIDIxNywgMywgMTYsIDMxLCAKLSAgICAyNDAsIDIzOSwgMjQ0LCA1LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ0LCAxMTgsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDI0MCwgMjM5LCAyMTksIDExOSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIyMCwgMTE5LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ1LCAxOTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMjgsIAotICAgIDE5NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNSwgNzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgCi0gICAgMjM5LCAyMTUsIDY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE1LCA2MywgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQwLCAyMzksIDIxNSwgNjQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTUsIDY5LCA0MiwgMjQwLCAKLSAgICAyMzAsIDQyLCAyNDgsIDIyMSwgNDIsIDI1MywgMTkyLCA0MiwgMTMwLCA0MiwgMjI2LCAxMjUsIDQyLCAyMjUsIDIyNSwgNDIsIAotICAgIDI0NywgMTQ3LCA0MiwgMjQ3LCAxNDgsIDIxOCwgMjMzLCA0MiwgMjQ3LCAxNDgsIDI0OSwgMTA4LCA0MiwgMjM1LCAxNTYsIAotICAgIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjQxLCAyMTYsIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjE3LCAxNzQsIDQyLCAKLSAgICAyNDUsIDkxLCAyMjksIDIwNSwgMjE3LCA3NCwgNDIsIDI0NSwgOTEsIDIyOSwgMjA1LCAyMzEsIDcwLCA0MiwgMjQ5LCAxNTcsIAotICAgIDQyLCAyMjYsIDkwLCAyNTQsIDEyNSwgNDIsIDE5NywgNDIsIDIzMCwgMTAzLCA2MSwgNDIsIDE4NCwgNDIsIDE3NiwgNDIsIAotICAgIDIzNCwgMTg1LCA0MiwgMjMxLCAxMjksIDQyLCAyNDMsIDgwLCA0MiwgMjUxLCAxOCwgNDIsIDIzNCwgMTg0LCA0MiwgMjI1LCAKLSAgICAxNTAsIDQyLCAyMjksIDgxLCA0MiwgMjMwLCAxMDMsIDI0NSwgNiwgNDIsIDIzMCwgMTAzLCAyNDMsIDIwMiwgNDIsIDIzMSwgCi0gICAgMTUsIDQyLCAyMzQsIDEzNCwgNDIsIDI0MCwgMTYzLCA0MiwgMjM0LCA5NCwgNDIsIDIzMCwgMjMyLCA0MiwgMjQyLCAyMTYsIAotICAgIDQyLCAyMTYsIDExOSwgNDIsIDIzMCwgMTAzLCAxNTYsIDQyLCAyMzAsIDE2OSwgNDIsIDI0NywgMTU3LCA0MiwgMjM0LCA0MCwgCi0gICAgNDIsIDI0NCwgNDUsIDQyLCAyMjgsIDExMiwgNDIsIDIzMCwgMTAzLCAxOTMsIDQyLCAyMzAsIDE2NiwgNDIsIDI0OSwgMjM5LCAKLSAgICA0MiwgMjM0LCAzNCwgNDIsIDIzMCwgMTY3LCAyMTgsIDIzMywgNDIsIDI0OSwgMjQwLCAyMTgsIDIzMywgNDIsIDIzMiwgNTAsIAotICAgIDIxOCwgMjMzLCA0MiwgMjM0LCAzNSwgMjE4LCAyMzMsIDQyLCAyMzAsIDE2NywgMjQ5LCAxMDgsIDQyLCAyNDksIDI0MCwgCi0gICAgMjQ5LCAxMDgsIDQyLCAyMzIsIDUwLCAyNDksIDEwOCwgNDIsIDIzNCwgMzUsIDI0OSwgMTA4LCA0MiwgMjMyLCA1MCwgMTE3LCAKLSAgICAyMjIsIDkxLCA0MiwgMjMyLCA1MCwgMTE3LCAyMjIsIDkyLCAyMTgsIDIzMywgNDIsIDE5MCwgNDIsIDIzMywgMjUxLCA0MiwgCi0gICAgMjMwLCAxMDUsIDQyLCAyNDIsIDE1MSwgNDIsIDIyMywgMTc2LCA0MiwgMjIzLCAxNzcsIDExNywgMjIyLCA5MSwgNDIsIAotICAgIDIyMywgMTc3LCAxMTcsIDIyMiwgOTIsIDIxOCwgMjMzLCA0MiwgMjI0LCAxNjIsIDQyLCAyMjgsIDEzLCA0MiwgMjMwLCAKLSAgICAxMDMsIDIyMiwgOTEsIDQyLCAyMzAsIDEwNCwgNDIsIDIyNCwgMTE2LCA0MiwgMjI3LCAxNzYsIDQyLCAyMzAsIDEwMywgCi0gICAgMjE0LCAxMDUsIDQyLCAyMzAsIDQ5LCA0MiwgMjMzLCAxODUsIDQyLCAyMzAsIDUwLCAyMzEsIDc0LCA0MiwgMjI0LCAxMTUsIAotICAgIDQyLCAyMjcsIDE3NSwgNDIsIDIzMCwgMTAzLCAyMTIsIDk4LCA0MiwgMjMwLCA0MywgNDIsIDIzMywgMTgzLCA0MiwgMjMwLCAKLSAgICA0NCwgMjMxLCA3NCwgNDIsIDIzNSwgMjQsIDIyNiwgMjIwLCA0MiwgMjMyLCA1MCwgMjI2LCAyMjAsIDQyLCAyNTQsIDEzNiwgCi0gICAgNDIsIDI1MSwgMTYwLCA0MiwgMjUwLCAyMTQsIDQyLCAyNTAsIDE5MSwgNDIsIDI1MSwgNjcsIDExNywgMjM0LCAxMzQsIDQyLCAKLSAgICAyNDksIDIzOCwgNDIsIDI0OCwgMTQyLCA0MiwgMjQyLCA3MiwgNDIsIDE2MiwgNDIsIDI0MCwgMjMxLCA0MiwgMjM1LCAyNTUsIAotICAgIDQyLCAyMzQsIDQ3LCA0MiwgMjM0LCAzNSwgMjUwLCAyNTAsIDQyLCAyMzMsIDIxOSwgNDIsIDIzMiwgMTU5LCA0MiwgMjMyLCAKLSAgICAxNTgsIDQyLCAyMzIsIDE0NywgNDIsIDIzMiwgNjMsIDQyLCAyMzEsIDEzMCwgMjE5LCA3OSwgNDIsIDIzMCwgMTk2LCA0MiwgCi0gICAgMjMwLCAxNTIsIDQyLCAyMjUsIDE0OCwgNDIsIDIyNSwgMTksIDQyLCAyMjQsIDIxOSwgNDIsIDIyNCwgMjE3LCA0MiwgMjE4LCAKLSAgICAyMjcsIDQyLCAyMTgsIDIsIDQyLCAyMTIsIDI0LCA0MiwgMjE0LCAxMDYsIDExNywgMTkzLCA0MiwgMTE1LCAxMTcsIDE5MywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDExMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDEwNSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE1OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE2MSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE4OSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5NCwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5NSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIwMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNiwgCi0gICAgMjQ3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjQ1LCAxNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgCi0gICAgMTQ2LCAyMTUsIDc2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjQsIDEwOSwgMjE3LCAzLCAxNiwgCi0gICAgMzEsIDI0OCwgMTQ2LCAyNDQsIDUsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDQsIDExOCwgMTA5LCAyMTcsIAotICAgIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxOSwgMTE5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjIwLCAxMTksIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDUsIDE5MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIAotICAgIDIyOCwgMTk3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA3MywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgCi0gICAgMjQ4LCAxNDYsIDIxNSwgNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDYzLCAxMDksIDIxNywgMywgCi0gICAgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2NCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjksIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDcwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCAKLSAgICA2NSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgCi0gICAgMTQ2LCAyMTUsIDcyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2OCwgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQ4LCAxNDYsIDIxNiwgMTYyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjEsIDQyLCAyNDMsIAotICAgIDExOCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQ5LCAxNDAsIDI0MSwgMjIzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMjMsIDEyMiwgMjQ1LCAyMjMsIDI0MSwgMTkyLCAzMSwgMjQ3LCAyMzEsIDI1MywgMjA3LCAyMTYsIDE5NiwgMjUyLCA1NiwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMTAsIDIyMywgMjQ0LCAzOCwgMjQxLCAxOTIsIDMxLCAyMTIsIDU5LCAyNDEsIDE5MiwgMzEsIAotICAgIDI0OSwgMjAzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTQsIDMsIDI0MSwgMTkyLCAzMSwgMjQxLCA2MCwgMjE2LCAzOCwgCi0gICAgMjQxLCAxOTIsIDMxLCA0LCAyMTcsIDYxLCAyNDEsIDE5MiwgMzEsIDIxNSwgMjM3LCAyNDEsIDE5MiwgMzEsIDIyNSwgMjE5LCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxOCwgMTU4LCAyNDEsIDE5MiwgMzEsIDI0NCwgMTM5LCAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAKLSAgICAyMjQsIDI0MCwgMjQxLCAxOTIsIDMxLCAyMzAsIDE1NSwgMjQxLCAxOTIsIDMxLCAyNDUsIDEyNiwgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDQsIDM5LCAyNDEsIDE5MiwgMzEsIDIxMSwgMjA3LCAyMjYsIDE5NywgMjE2LCAxOTYsIDI0OCwgODYsIDI0MSwgMTkyLCAKLSAgICAzMSwgMjU0LCA1MSwgMjQxLCAxOTIsIDMxLCAyNDksIDE4NSwgMjQxLCAxOTIsIDMxLCAyNTEsIDIyNywgMjE2LCAxMzgsIAotICAgIDI0MSwgMTkyLCAzMSwgMjQyLCAxNDksIDI0MSwgMTkyLCAzMSwgMjE4LCAyNDUsIDI1NCwgNzAsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjIzLCA1MywgMjQxLCAxOTIsIDMxLCAyMzUsIDIyMCwgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgMjE3LCA2MSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMzAsIDExMSwgMjQ5LCAxNTksIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIDIyNCwgMTk3LCAyNDEsIDE5MiwgCi0gICAgMzEsIDIxNiwgMTk2LCAyNTUsIDE4LCAyMTIsIDQwLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTAsIDgsIDI0NCwgOTYsIAotICAgIDI0MSwgMTkyLCAzMSwgMjM1LCAyMzMsIDI0MSwgMTkyLCAzMSwgMjQ2LCA1NywgMjQxLCAxOTIsIDMxLCAyMjMsIDU2LCAKLSAgICAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAyMjQsIDIyNCwgMjQxLCAxOTIsIDMxLCAyMjQsIDE3NywgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDgsIDE2MSwgNjQsIDIxNiwgMTk2LCAyMzIsIDIzMCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQ0LCAxNzQsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjI2LCAxNjMsIDI0MSwgMTkyLCAzMSwgMjI2LCAyNDQsIDI0MSwgMTkyLCAzMSwgMjQ4LCA1OSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyNDgsIDc5LCAyNDEsIDE5MiwgMzEsIDIzNSwgMjQ3LCAyNDEsIDE5MiwgMzEsIDI1MSwgMTQ5LCAyNDEsIAotICAgIDE5MiwgMzEsIDI0OSwgMjIxLCAyMTYsIDQyLCAyMzEsIDc2LCAyNDEsIDE5MiwgMzEsIDI0MywgODcsIDIxNiwgMzgsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjI0LCAxMjUsIDIxNCwgMTU0LCAyNDEsIDE5MiwgMzEsIDIyNiwgMTYyLCAyNDEsIDE5MiwgMzEsIDIxNiwgCi0gICAgMTk2LCAyMTIsIDEzLCAyNDEsIDE5MiwgMzEsIDIyMywgNDUsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1MCwgMjIwLCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTMsIDI1NSwgMjE2LCAxMzMsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDIzNCwgCi0gICAgMTc5LCAyMTgsIDEzNCwgMjMwLCAxMTUsIDI0MSwgMTkyLCAzMSwgMjQ4LCAzMiwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgCi0gICAgMjMxLCAxNTIsIDIzMSwgMjAyLCAyNDEsIDE5MiwgMzEsIDI1NSwgMTksIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDIxMiwgCi0gICAgNTQsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI0MywgNDcsIDIxMSwgMjM5LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMzUsIDUyLCAyMzMsIDEwNywgMjQxLCAxOTIsIDMxLCAyNDcsIDE4NCwgMjQxLCAxOTIsIDMxLCAyMzIsIDIyMCwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMzUsIDIyMywgMjE1LCAxODcsIDI0MSwgMTkyLCAzMSwgNCwgMjI0LCAxOTcsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjU0LCAyMTcsIDI0OSwgMjEyLCAyNDEsIDE5MiwgMzEsIDI1MiwgNTksIDI0OSwgMjEyLCA4LCAzLCAyMzUsIDE2MCwgOCwgCi0gICAgMywgMjM1LCAxNTMsIDgsIDMsIDczLCA4LCAzLCAyMzUsIDE4MiwgOCwgMywgMjM2LCA1OCwgOCwgMywgMjM2LCA0MSwgOCwgCi0gICAgMywgMjM2LCA2MCwgOCwgMywgMjM2LCA1OSwgOCwgMywgMjUzLCAyMDYsIDgsIDMsIDI1MywgMTY5LCA4LCAzLCA2MSwgOCwgCi0gICAgMywgMjU0LCA3MiwgOCwgMywgMjE0LCAxNjQsIDgsIDMsIDIxNCwgMTY3LCA4LCAzLCAyMTQsIDE2NSwgOCwgMywgMjI2LCAKLSAgICAxNDAsIDgsIDMsIDIyNiwgMTE0LCA4LCAzLCA3NiwgOCwgMywgMjI2LCAxNzUsIDgsIDMsIDI0NSwgMzUsIDgsIDMsIDc1LCAKLSAgICA4LCAzLCAyMTEsIDE5NSwgOCwgMywgMjUxLCAyMjgsIDgsIDMsIDI1MSwgMjI1LCA4LCAzLCAyNTIsIDYsIDgsIDMsIDI1MSwgCi0gICAgMjM4LCA4LCAzLCAyNTEsIDI1MSwgOCwgMywgMjUxLCAyNTAsIDgsIDMsIDI1MSwgMjUzLCA4LCAzLCAyNTEsIDI1MiwgOCwgCi0gICAgMywgMjUyLCAxMjEsIDgsIDMsIDI1MiwgMTEzLCA4LCAzLCAyNTIsIDE5MSwgOCwgMywgMjUyLCAxNDIsIDgsIDMsIDI1MSwgCi0gICAgMTAxLCA4LCAzLCAyNTEsIDEwNSwgOCwgMywgMjUxLCAxMDIsIDgsIDMsIDI1MSwgMTc5LCA4LCAzLCAyNTEsIDE2MywgOCwgCi0gICAgMywgMjUxLCAyMDUsIDgsIDMsIDI1MSwgMTg1LCA4LCAzLCAyNTIsIDIxLCA4LCAzLCAyNTIsIDc1LCA4LCAzLCAyNTIsIDMzLCAKLSAgICA4LCAzLCAyNTEsIDg3LCA4LCAzLCAyNTEsIDg0LCA4LCAzLCAyNTEsIDEyNSwgOCwgMywgMjUxLCAxMDAsIDgsIDMsIDI1MSwgCi0gICAgOTQsIDgsIDMsIDI1MSwgOTgsIDgsIDMsIDI1MSwgNzIsIDgsIDMsIDI1MSwgNzAsIDgsIDMsIDI1MSwgNzcsIDgsIDMsIAotICAgIDI1MSwgNzUsIDgsIDMsIDI1MSwgNzMsIDgsIDMsIDI1MSwgNzQsIDgsIDMsIDIyNSwgNDksIDgsIDMsIDIyNSwgNDUsIDgsIAotICAgIDMsIDIyNSwgMTA4LCA4LCAzLCAyMjUsIDU5LCA4LCAzLCAyMjUsIDc1LCA4LCAzLCAyMjUsIDEwMiwgOCwgMywgMjI1LCA5OCwgCi0gICAgOCwgMywgMjI1LCAyNDAsIDgsIDMsIDIyNSwgMjMwLCA4LCAzLCAxOTAsIDgsIDMsIDIyNiwgMjEsIDgsIDMsIDIyNCwgMTM1LCAKLSAgICA4LCAzLCAyMjQsIDEzNywgOCwgMywgMjI0LCAxMzYsIDgsIDMsIDIyNCwgMjMzLCA4LCAzLCAyMjQsIDIyMiwgOCwgMywgCi0gICAgMjI1LCAxNiwgOCwgMywgMjI0LCAyNDUsIDgsIDMsIDIyNCwgMTIxLCA4LCAzLCAyMjQsIDExNywgOCwgMywgMjI0LCAxNTAsIAotICAgIDgsIDMsIDIyNCwgMTM0LCA4LCAzLCAyMjQsIDEyNiwgOCwgMywgMjI0LCAxMzIsIDgsIDMsIDIyNCwgMTAwLCA4LCAzLCAKLSAgICAyMjQsIDk5LCA4LCAzLCAyMjQsIDEwNCwgOCwgMywgMjI0LCAxMDMsIDgsIDMsIDIyNCwgMTAxLCA4LCAzLCAyMjQsIDEwMiwgCi0gICAgOCwgMywgMjUyLCA5NiwgOCwgMywgMjUyLCA5NSwgOCwgMywgMjUyLCAxMDIsIDgsIDMsIDI1MiwgOTcsIDgsIDMsIDI1MiwgCi0gICAgOTksIDgsIDMsIDI1MiwgOTgsIDgsIDMsIDI1MiwgMTAxLCA4LCAzLCAyNTIsIDEwMCwgOCwgMywgMjUyLCAxMDgsIDgsIDMsIAotICAgIDI1MiwgMTA3LCA4LCAzLCAyNTIsIDExMSwgOCwgMywgMjUyLCAxMDksIDgsIDMsIDI1MiwgODcsIDgsIDMsIDI1MiwgODksIAotICAgIDgsIDMsIDI1MiwgODgsIDgsIDMsIDI1MiwgOTIsIDgsIDMsIDI1MiwgOTEsIDgsIDMsIDI1MiwgOTQsIDgsIDMsIDI1MiwgCi0gICAgOTMsIDgsIDMsIDI1MiwgMTAzLCA4LCAzLCAyNTIsIDEwNiwgOCwgMywgMjUyLCAxMDQsIDgsIDMsIDI1MiwgODMsIDgsIDMsIAotICAgIDI1MiwgODIsIDgsIDMsIDI1MiwgOTAsIDgsIDMsIDI1MiwgODYsIDgsIDMsIDI1MiwgODQsIDgsIDMsIDI1MiwgODUsIDgsIAotICAgIDMsIDI1MiwgNzksIDgsIDMsIDI1MiwgNzgsIDgsIDMsIDI1MiwgODEsIDgsIDMsIDI1MiwgODAsIDgsIDMsIDIyOSwgMTY5LCAKLSAgICA4LCAzLCAyMjksIDE2OCwgOCwgMywgMjI5LCAxNzQsIDgsIDMsIDIyOSwgMTcwLCA4LCAzLCAyMjksIDE3MSwgOCwgMywgCi0gICAgMjI5LCAxNzMsIDgsIDMsIDIyOSwgMTcyLCA4LCAzLCAyMjksIDE3NywgOCwgMywgMjI5LCAxNzYsIDgsIDMsIDIyOSwgMTc5LCAKLSAgICA4LCAzLCAyMjksIDE3OCwgOCwgMywgMjI5LCAxNjUsIDgsIDMsIDIyOSwgMTY0LCA4LCAzLCAyMjksIDE2NywgOCwgMywgCi0gICAgMjI5LCAxNjYsIDgsIDMsIDIyOSwgMTU4LCA4LCAzLCAyMjksIDE1NywgOCwgMywgMjI5LCAxNjIsIDgsIDMsIDIyOSwgMTYxLCAKLSAgICA4LCAzLCAyMjksIDE1OSwgOCwgMywgMjI5LCAxNjAsIDgsIDMsIDIyOSwgMTUyLCA4LCAzLCAyMjksIDE1MSwgOCwgMywgCi0gICAgMjI5LCAxNTYsIDgsIDMsIDIyOSwgMTU1LCA4LCAzLCAyMjksIDE1MywgOCwgMywgMjI5LCAxNTQsIDgsIDMsIDI0MSwgMTEwLCAKLSAgICA4LCAzLCAyNDEsIDEwOSwgOCwgMywgMjQxLCAxMTUsIDgsIDMsIDI0MSwgMTExLCA4LCAzLCAyNDEsIDExMiwgOCwgMywgCi0gICAgMjQxLCAxMTQsIDgsIDMsIDI0MSwgMTEzLCA4LCAzLCAyNDEsIDExOCwgOCwgMywgMjQxLCAxMTcsIDgsIDMsIDI0MSwgMTIwLCAKLSAgICA4LCAzLCAyNDEsIDExOSwgOCwgMywgMjQxLCAxMDEsIDgsIDMsIDI0MSwgMTAzLCA4LCAzLCAyNDEsIDEwMiwgOCwgMywgCi0gICAgMjQxLCAxMDYsIDgsIDMsIDI0MSwgMTA1LCA4LCAzLCAyNDEsIDEwOCwgOCwgMywgMjQxLCAxMDcsIDgsIDMsIDI0MSwgOTcsIAotICAgIDgsIDMsIDI0MSwgOTYsIDgsIDMsIDI0MSwgMTA0LCA4LCAzLCAyNDEsIDEwMCwgOCwgMywgMjQxLCA5OCwgOCwgMywgMjQxLCAKLSAgICA5OSwgOCwgMywgMjQxLCA5MSwgOCwgMywgMjQxLCA5NSwgOCwgMywgMjQxLCA5NCwgOCwgMywgMjQxLCA5MiwgOCwgMywgCi0gICAgMjQxLCA5MywgOCwgMywgMjMwLCAxNzIsIDgsIDMsIDIzMCwgMTcxLCA4LCAzLCAyMzAsIDIzMCwgOCwgMywgMjMwLCAxNzgsIAotICAgIDgsIDMsIDIzMCwgMjAzLCA4LCAzLCAyMzAsIDIyMSwgOCwgMywgMjMwLCAyMTksIDgsIDMsIDIzMSwgMTM5LCA4LCAzLCAKLSAgICAyMzEsIDEzNCwgOCwgMywgMTg0LCA4LCAzLCAyMzEsIDE3MiwgOCwgMywgMjMwLCA3NCwgOCwgMywgMjMwLCA3MywgOCwgMywgCi0gICAgMjMwLCA3NywgOCwgMywgMjMwLCA3NSwgOCwgMywgMjMwLCAxMjEsIDgsIDMsIDIzMCwgMTA3LCA4LCAzLCAyMzAsIDE2MSwgCi0gICAgOCwgMywgMjMwLCAxMjYsIDgsIDMsIDIzMSwgMjYsIDgsIDMsIDIzMSwgOTEsIDgsIDMsIDIzMCwgNTUsIDgsIDMsIDIzMCwgCi0gICAgNTEsIDgsIDMsIDIzMCwgMTAyLCA4LCAzLCAyMzAsIDcwLCA4LCAzLCAyMzAsIDYzLCA4LCAzLCAyMzAsIDY4LCA4LCAzLCAKLSAgICAyMzAsIDI4LCA4LCAzLCAyMzAsIDI3LCA4LCAzLCAyMzAsIDMzLCA4LCAzLCAyMzAsIDMwLCA4LCAzLCAyNDQsIDgzLCA4LCAKLSAgICAzLCAyNDQsIDc4LCA4LCAzLCAyNDQsIDEyMSwgOCwgMywgMjQ0LCA5OCwgOCwgMywgMjQ0LCAxNjcsIDgsIDMsIDI0NCwgCi0gICAgMTU4LCA4LCAzLCAyNDQsIDE5NiwgOCwgMywgMjQ0LCAxNzAsIDgsIDMsIDI0NCwgMywgOCwgMywgMjQ0LCA0MywgOCwgMywgCi0gICAgMjQ0LCAyNywgOCwgMywgMjQzLCAyMTgsIDgsIDMsIDI0MywgMjE3LCA4LCAzLCAyNDMsIDIzNCwgOCwgMywgMjQzLCAyMjMsIAotICAgIDgsIDMsIDI0MywgMjIxLCA4LCAzLCAyNDMsIDIyMiwgOCwgMywgMjQzLCAyMDUsIDgsIDMsIDI0MywgMjA0LCA4LCAzLCAKLSAgICAyNDMsIDIwOCwgOCwgMywgMjQzLCAyMDYsIDgsIDMsIDIxMywgMTQ0LCA4LCAzLCAyMTMsIDEzOSwgOCwgMywgMjEzLCAxNzYsIAotICAgIDgsIDMsIDIxMywgMTUzLCA4LCAzLCAyMTMsIDE2NiwgOCwgMywgMjEzLCAxNjMsIDgsIDMsIDIxMywgMTY4LCA4LCAzLCAKLSAgICAyMTMsIDE2NywgOCwgMywgMjE0LCA3LCA4LCAzLCAyMTQsIDIsIDgsIDMsIDIxNCwgMjcsIDgsIDMsIDIxNCwgMTgsIDgsIDMsIAotICAgIDIxMywgMTI1LCA4LCAzLCAyMTMsIDEyMSwgOCwgMywgMjEzLCAxMzgsIDgsIDMsIDIxMywgMTI2LCA4LCAzLCAyMTMsIDE3OCwgCi0gICAgOCwgMywgMjEzLCAyNDQsIDgsIDMsIDIxMiwgMTEwLCA4LCAzLCAyMTIsIDEwOCwgOCwgMywgMjEyLCAxMTYsIDgsIDMsIAotICAgIDIxMiwgMTEzLCA4LCAzLCAyMTIsIDExMSwgOCwgMywgMjEyLCAxMTIsIDgsIDMsIDIxMiwgMTAyLCA4LCAzLCAyMTIsIDEwMSwgCi0gICAgOCwgMywgMjEyLCAxMDYsIDgsIDMsIDIxMiwgMTA1LCA4LCAzLCAyMTIsIDEwMywgOCwgMywgMjEyLCAxMDQsIDgsIDMsIAotICAgIDI0NywgMTc4LCA4LCAzLCAyNDcsIDE2NiwgOCwgMywgMjQ4LCAzLCA4LCAzLCAyNDcsIDIwMywgOCwgMywgMjQ3LCAyMzYsIAotICAgIDgsIDMsIDI0NywgMjQwLCA4LCAzLCAyNDcsIDIzOSwgOCwgMywgMjQ4LCAxNTIsIDgsIDMsIDI0OCwgMTQ3LCA4LCAzLCAKLSAgICAyNDgsIDIyMSwgOCwgMywgMjQ4LCAxNzIsIDgsIDMsIDI0NiwgNjIsIDgsIDMsIDI0NiwgNjMsIDgsIDMsIDI0NywgMTIwLCAKLSAgICA4LCAzLCAyNDYsIDEwMiwgOCwgMywgMjQ3LCAxNDUsIDgsIDMsIDI0NywgMTIyLCA4LCAzLCAyNDgsIDMwLCA4LCAzLCAyNDgsIAotICAgIDkwLCA4LCAzLCAyNDgsIDQ1LCA4LCAzLCAyNDYsIDUzLCA4LCAzLCAyNDYsIDUxLCA4LCAzLCAyNDYsIDc4LCA4LCAzLCAKLSAgICAyNDYsIDYxLCA4LCAzLCAyNDYsIDU2LCA4LCAzLCAyNDYsIDU5LCA4LCAzLCAyMTYsIDY3LCA4LCAzLCAyMTYsIDYxLCA4LCAKLSAgICAzLCAyMTYsIDExNywgOCwgMywgMjE2LCA3NiwgOCwgMywgMjE2LCAxMDksIDgsIDMsIDIxNiwgMTExLCA4LCAzLCAyMTYsIAotICAgIDExMCwgOCwgMywgMjE3LCA0NiwgOCwgMywgMjE3LCAzMywgOCwgMywgMjE3LCAxMDUsIDgsIDMsIDIxNywgNTQsIDgsIDMsIAotICAgIDIxNSwgMTAyLCA4LCAzLCAyMTUsIDEwMSwgOCwgMywgMjE1LCAxMDQsIDgsIDMsIDIxNSwgMTAzLCA4LCAzLCAyMTYsIDUsIAotICAgIDgsIDMsIDIxNiwgMSwgOCwgMywgMTExLCA4LCAzLCAyMTYsIDEzLCA4LCAzLCAyMTYsIDIxMywgOCwgMywgMjE3LCAyMiwgOCwgCi0gICAgMywgMjE2LCAyMzcsIDgsIDMsIDIxNSwgODgsIDgsIDMsIDIxNSwgODMsIDgsIDMsIDIxNSwgMTE4LCA4LCAzLCAyMTUsIAotICAgIDEwMCwgOCwgMywgMjE1LCA4OSwgOCwgMywgMjE1LCA5OCwgOCwgMywgMjQ4LCAxMDcsIDgsIDMsIDI0OCwgMTA2LCA4LCAzLCAKLSAgICAyNDgsIDExMiwgOCwgMywgMjQ4LCAxMDgsIDgsIDMsIDI0OCwgMTA5LCA4LCAzLCAyNDgsIDExMSwgOCwgMywgMjQ4LCAxMTAsIAotICAgIDgsIDMsIDI0OCwgMTI4LCA4LCAzLCAyNDgsIDEyNywgOCwgMywgMjQ4LCAxMzUsIDgsIDMsIDI0OCwgMTI5LCA4LCAzLCAKLSAgICAyNDgsIDk3LCA4LCAzLCAyNDgsIDk5LCA4LCAzLCAyNDgsIDk4LCA4LCAzLCAyNDgsIDEwMiwgOCwgMywgMjQ4LCAxMDEsIDgsIAotICAgIDMsIDI0OCwgMTA1LCA4LCAzLCAyNDgsIDEwMywgOCwgMywgMjQ4LCAxMjAsIDgsIDMsIDI0OCwgMTIzLCA4LCAzLCAyNDgsIAotICAgIDEyMSwgOCwgMywgMjQ4LCA5MywgOCwgMywgMjQ4LCA5MiwgOCwgMywgMjQ4LCAxMDAsIDgsIDMsIDI0OCwgOTYsIDgsIDMsIAotICAgIDI0OCwgOTQsIDgsIDMsIDI0OCwgOTUsIDgsIDMsIDIyOSwgMTI2LCA4LCAzLCAyMjksIDEyNSwgOCwgMywgMjI5LCAxMzMsIAotICAgIDgsIDMsIDIyOSwgMTI4LCA4LCAzLCAyMjksIDEyOSwgOCwgMywgMjI5LCAxMzAsIDgsIDMsIDIyOSwgMTQyLCA4LCAzLCAKLSAgICAyMjksIDE0MSwgOCwgMywgMjI5LCAxNDgsIDgsIDMsIDIyOSwgMTQzLCA4LCAzLCAyMjksIDExOCwgOCwgMywgMjI5LCAxMTcsIAotICAgIDgsIDMsIDIyOSwgMTI0LCA4LCAzLCAyMjksIDExOSwgOCwgMywgMjI5LCAxMzQsIDgsIDMsIDIyOSwgMTQwLCA4LCAzLCAKLSAgICAyMjksIDEzOCwgOCwgMywgMjI5LCAxMTAsIDgsIDMsIDIyOSwgMTA5LCA4LCAzLCAyMjksIDExNSwgOCwgMywgMjI5LCAxMTMsIAotICAgIDgsIDMsIDIyOSwgMTExLCA4LCAzLCAyMjksIDExMiwgOCwgMywgMjQxLCA3NywgOCwgMywgMjQxLCA3NiwgOCwgMywgMjQxLCAKLSAgICA4MywgOCwgMywgMjQxLCA3OCwgOCwgMywgMjQxLCA4MCwgOCwgMywgMjQxLCA3OSwgOCwgMywgMjQxLCA4MiwgOCwgMywgCi0gICAgMjQxLCA4MSwgOCwgMywgMjQxLCA4OCwgOCwgMywgMjQxLCA4NywgOCwgMywgMjQxLCA5MCwgOCwgMywgMjQxLCA4OSwgOCwgCi0gICAgMywgMjQxLCA3MSwgOCwgMywgMjQxLCA3MiwgOCwgMywgMjQxLCA3NCwgOCwgMywgMjQxLCA3MywgOCwgMywgMjQxLCA3NSwgCi0gICAgOCwgMywgMjQxLCA4NCwgOCwgMywgMjQxLCA4NiwgOCwgMywgMjQxLCA4NSwgOCwgMywgMjQxLCA3MCwgOCwgMywgMjI4LCAKLSAgICAxODksIDgsIDMsIDIyOCwgMTg3LCA4LCAzLCAyMjgsIDIzMywgOCwgMywgMjI4LCAxOTIsIDgsIDMsIDIyOCwgMjE1LCA4LCAKLSAgICAzLCAyMjgsIDIyOSwgOCwgMywgMjI4LCAyMjgsIDgsIDMsIDIyOSwgMTgzLCA4LCAzLCAxOTcsIDgsIDMsIDIyOSwgMTk3LCAKLSAgICA4LCAzLCAyMjcsIDE4NiwgOCwgMywgMjI3LCAxODgsIDgsIDMsIDIyNywgMTg3LCA4LCAzLCAyMjgsIDUxLCA4LCAzLCAyMjgsIAotICAgIDM4LCA4LCAzLCAyMjgsIDc0LCA4LCAzLCAyMjgsIDYwLCA4LCAzLCAyMjksIDgzLCA4LCAzLCAyMjksIDEwNywgOCwgMywgCi0gICAgMjI5LCA5NCwgOCwgMywgMjI3LCAxODEsIDgsIDMsIDIyNywgMTc3LCA4LCAzLCAyMjcsIDIzNywgOCwgMywgMjI3LCAxODUsIAotICAgIDgsIDMsIDIyNywgMTgzLCA4LCAzLCAyMjcsIDE4NCwgOCwgMywgMjQxLCAxNDEsIDgsIDMsIDI0MSwgMTQwLCA4LCAzLCAKLSAgICAyNDEsIDE0NiwgOCwgMywgMjQxLCAxNDIsIDgsIDMsIDI0MSwgMTQzLCA4LCAzLCAyNDEsIDE0NSwgOCwgMywgMjQxLCAxNDQsIAotICAgIDgsIDMsIDI0MSwgMTUxLCA4LCAzLCAyNDEsIDE1MCwgOCwgMywgMjQxLCAxNTMsIDgsIDMsIDI0MSwgMTUyLCA4LCAzLCAKLSAgICAyNDEsIDEzMywgOCwgMywgMjQxLCAxMzUsIDgsIDMsIDI0MSwgMTM0LCA4LCAzLCAyNDEsIDEzNywgOCwgMywgMjQxLCAxMzksIAotICAgIDgsIDMsIDI0MSwgMTM4LCA4LCAzLCAyNDEsIDE0NywgOCwgMywgMjQxLCAxNDksIDgsIDMsIDI0MSwgMTQ4LCA4LCAzLCAKLSAgICAyNDEsIDEyOSwgOCwgMywgMjQxLCAxMjgsIDgsIDMsIDI0MSwgMTM2LCA4LCAzLCAyNDEsIDEzMiwgOCwgMywgMjQxLCAxMzAsIAotICAgIDgsIDMsIDI0MSwgMTMxLCA4LCAzLCAyNDEsIDEyMywgOCwgMywgMjQxLCAxMjIsIDgsIDMsIDI0MSwgMTI3LCA4LCAzLCAKLSAgICAyNDEsIDEyNiwgOCwgMywgMjQxLCAxMjQsIDgsIDMsIDI0MSwgMTI1LCA4LCAzLCAyMzIsIDE5NSwgOCwgMywgMjMyLCAxODksIAotICAgIDgsIDMsIDIzMiwgMjQxLCA4LCAzLCAyMzIsIDIwMiwgOCwgMywgMjMyLCAyMzMsIDgsIDMsIDIzMiwgMjMyLCA4LCAzLCAKLSAgICAyMzIsIDIzNiwgOCwgMywgMjMyLCAyMzQsIDgsIDMsIDIzMywgNzksIDgsIDMsIDIzMywgNjksIDgsIDMsIDIzMywgMTM1LCAKLSAgICA4LCAzLCAyMzMsIDg4LCA4LCAzLCAyMzIsIDc5LCA4LCAzLCAyMzIsIDc4LCA4LCAzLCAyMzIsIDgxLCA4LCAzLCAyMzIsIAotICAgIDgwLCA4LCAzLCAyMzIsIDExNiwgOCwgMywgMjMyLCAxMDYsIDgsIDMsIDIzMiwgMTU2LCA4LCAzLCAyMzIsIDEyMCwgOCwgMywgCi0gICAgMjMzLCAyLCA4LCAzLCAyMzMsIDU4LCA4LCAzLCAyMzMsIDE3LCA4LCAzLCAyMzIsIDc0LCA4LCAzLCAyMzIsIDcyLCA4LCAzLCAKLSAgICAyMzIsIDk4LCA4LCAzLCAyMzIsIDc3LCA4LCAzLCAyMzIsIDc1LCA4LCAzLCAyMzIsIDc2LCA4LCAzLCAyMzIsIDU0LCA4LCAKLSAgICAzLCAyMzIsIDUzLCA4LCAzLCAyMzIsIDYyLCA4LCAzLCAyMzIsIDU3LCA4LCAzLCAyMzIsIDU1LCA4LCAzLCAyMzIsIDU2LCAKLSAgICA4LCAzLCAyNDIsIDE4OSwgOCwgMywgMjQyLCAxODgsIDgsIDMsIDI0MiwgMjE0LCA4LCAzLCAyNDIsIDE5OSwgOCwgMywgCi0gICAgMjQyLCAyMDYsIDgsIDMsIDI0MiwgMjA1LCA4LCAzLCAyNDIsIDIwOCwgOCwgMywgMjQyLCAyMDcsIDgsIDMsIDI0MywgODksIAotICAgIDgsIDMsIDI0MywgODQsIDgsIDMsIDI0MywgMTM1LCA4LCAzLCAyNDMsIDk5LCA4LCAzLCAyNDIsIDkxLCA4LCAzLCAyNDIsIAotICAgIDkwLCA4LCAzLCAyNDIsIDkzLCA4LCAzLCAyNDIsIDkyLCA4LCAzLCAyNDIsIDE1NCwgOCwgMywgMjQyLCAxNTIsIDgsIDMsIAotICAgIDI0MiwgMTc0LCA4LCAzLCAyNDIsIDE2MiwgOCwgMywgMjQzLCAzMywgOCwgMywgMjQzLCAzMSwgOCwgMywgMjQzLCA2MiwgOCwgCi0gICAgMywgMjQzLCA0NCwgOCwgMywgMjQyLCA4MSwgOCwgMywgMjQyLCA4MCwgOCwgMywgMjQyLCAxMTMsIDgsIDMsIDI0MiwgODksIAotICAgIDgsIDMsIDI0MiwgODIsIDgsIDMsIDI0MiwgODgsIDgsIDMsIDIzNCwgNjEsIDgsIDMsIDIzNCwgNjAsIDgsIDMsIDIzNCwgCi0gICAgOTIsIDgsIDMsIDIzNCwgNzUsIDgsIDMsIDIzNCwgODUsIDgsIDMsIDIzNCwgODgsIDgsIDMsIDIzNCwgODYsIDgsIDMsIAotICAgIDIzNCwgMjAyLCA4LCAzLCAyMzQsIDE5MCwgOCwgMywgMTc2LCA4LCAzLCAyMzQsIDIyOCwgOCwgMywgMjMzLCAyMDAsIDgsIAotICAgIDMsIDIzMywgMjA1LCA4LCAzLCAyMzMsIDIwMiwgOCwgMywgMjM0LCAwLCA4LCAzLCAyMzMsIDI1MiwgOCwgMywgMjM0LCAyOCwgCi0gICAgOCwgMywgMjM0LCA3LCA4LCAzLCAyMzQsIDE1NiwgOCwgMywgMjM0LCAxNDAsIDgsIDMsIDIzNCwgMTgyLCA4LCAzLCAyMzQsIAotICAgIDE1OSwgOCwgMywgMjMzLCAxODksIDgsIDMsIDIzMywgMTg2LCA4LCAzLCAyMzMsIDIxNywgOCwgMywgMjMzLCAxOTksIDgsIAotICAgIDMsIDIzMywgMTkyLCA4LCAzLCAyMzMsIDE5NiwgOCwgMywgMjQzLCAxNSwgOCwgMywgMjQzLCAxNCwgOCwgMywgMjQzLCAxOSwgCi0gICAgOCwgMywgMjQzLCAxNiwgOCwgMywgMjQzLCAxOCwgOCwgMywgMjQzLCAxNywgOCwgMywgMjQzLCAyNiwgOCwgMywgMjQzLCAKLSAgICAyNSwgOCwgMywgMjQzLCAyOSwgOCwgMywgMjQzLCAyNywgOCwgMywgMjQzLCA2LCA4LCAzLCAyNDMsIDUsIDgsIDMsIDI0MywgCi0gICAgOCwgOCwgMywgMjQzLCA3LCA4LCAzLCAyNDMsIDExLCA4LCAzLCAyNDMsIDEwLCA4LCAzLCAyNDMsIDEzLCA4LCAzLCAyNDMsIAotICAgIDEyLCA4LCAzLCAyNDMsIDIxLCA4LCAzLCAyNDMsIDIwLCA4LCAzLCAyNDMsIDI0LCA4LCAzLCAyNDMsIDIyLCA4LCAzLCAKLSAgICAyNDMsIDEsIDgsIDMsIDI0MywgMCwgOCwgMywgMjQzLCA5LCA4LCAzLCAyNDMsIDQsIDgsIDMsIDI0MywgMiwgOCwgMywgCi0gICAgMjQzLCAzLCA4LCAzLCAyMzAsIDI0OSwgOCwgMywgMjMwLCAyNTAsIDgsIDMsIDIzMSwgMTIsIDgsIDMsIDIzMSwgMTEsIDgsIAotICAgIDMsIDIzMSwgMTQsIDgsIDMsIDIzMSwgMTMsIDgsIDMsIDIzMCwgMjQwLCA4LCAzLCAyMzAsIDI0MiwgOCwgMywgMjMwLCAKLSAgICAyNDEsIDgsIDMsIDIzMCwgMjQ1LCA4LCAzLCAyMzAsIDI0NCwgOCwgMywgMjMwLCAyNDcsIDgsIDMsIDIzMCwgMjQ2LCA4LCAKLSAgICAzLCAyMzAsIDI1MSwgOCwgMywgMjMwLCAyNTMsIDgsIDMsIDIzMCwgMjUyLCA4LCAzLCAyMzAsIDIzNiwgOCwgMywgMjMwLCAKLSAgICAyMzUsIDgsIDMsIDIzMCwgMjQzLCA4LCAzLCAyMzAsIDIzOSwgOCwgMywgMjMwLCAyMzcsIDgsIDMsIDIzMCwgMjM4LCA4LCAKLSAgICAzLCAyNDAsIDE4MCwgOCwgMywgMjQwLCAxNzksIDgsIDMsIDI0MCwgMTg2LCA4LCAzLCAyNDAsIDE4MSwgOCwgMywgMjQwLCAKLSAgICAxODMsIDgsIDMsIDI0MCwgMTgyLCA4LCAzLCAyNDAsIDE4NSwgOCwgMywgMjQwLCAxODQsIDgsIDMsIDI0MCwgMTkxLCA4LCAKLSAgICAzLCAyNDAsIDE5MCwgOCwgMywgMjQwLCAxOTMsIDgsIDMsIDI0MCwgMTkyLCA4LCAzLCAyNDAsIDE3MiwgOCwgMywgMjQwLCAKLSAgICAxNzEsIDgsIDMsIDI0MCwgMTc0LCA4LCAzLCAyNDAsIDE3MywgOCwgMywgMjQwLCAxNzYsIDgsIDMsIDI0MCwgMTc1LCA4LCAKLSAgICAzLCAyNDAsIDE3OCwgOCwgMywgMjQwLCAxNzcsIDgsIDMsIDI0MCwgMTg3LCA4LCAzLCAyNDAsIDE4OSwgOCwgMywgMjQwLCAKLSAgICAxODgsIDgsIDMsIDIyOSwgMjQsIDgsIDMsIDIyOSwgMjYsIDgsIDMsIDIyOSwgMjUsIDgsIDMsIDIyOSwgNjcsIDgsIDMsIAotICAgIDIyOSwgNjUsIDgsIDMsIDIyOSwgNzcsIDgsIDMsIDIyOSwgNzAsIDgsIDMsIDIyOCwgMjQzLCA4LCAzLCAyMjgsIDI0MiwgOCwgCi0gICAgMywgMjI4LCAyNDQsIDgsIDMsIDIyOCwgMjUyLCA4LCAzLCAyMjgsIDI0OSwgOCwgMywgMjI5LCA0LCA4LCAzLCAyMjgsIAotICAgIDI1NCwgOCwgMywgMjI5LCA1OCwgOCwgMywgMjI5LCA2NCwgOCwgMywgMjI5LCA2MCwgOCwgMywgMjQxLCAxNTYsIDgsIDMsIAotICAgIDI0MSwgMTY2LCA4LCAzLCAyNDEsIDE3NSwgOCwgMywgMjQxLCAyNTEsIDgsIDMsIDI0MSwgMjQzLCA4LCAzLCAxNjIsIDgsIAotICAgIDMsIDI0MiwgNiwgOCwgMywgMjQwLCAyMDYsIDgsIDMsIDI0MCwgMjA1LCA4LCAzLCAyNDAsIDIwOCwgOCwgMywgMjQwLCAKLSAgICAyMDcsIDgsIDMsIDI0MCwgMjQyLCA4LCAzLCAyNDAsIDIzMywgOCwgMywgMjQxLCA2OCwgOCwgMywgMjQxLCA0NywgOCwgMywgCi0gICAgMjQxLCAxOTQsIDgsIDMsIDI0MSwgMjM4LCA4LCAzLCAyNDEsIDIwNiwgOCwgMywgMjEyLCA0MywgOCwgMywgMjEyLCAyOCwgCi0gICAgOCwgMywgMjEyLCA2NSwgOCwgMywgMjEyLCA1MSwgOCwgMywgMjExLCAxODUsIDgsIDMsIDIxMSwgMTg3LCA4LCAzLCAyMTEsIAotICAgIDE4NiwgOCwgMywgMjExLCAyMDMsIDgsIDMsIDIxMSwgMjI3LCA4LCAzLCAyMTEsIDIxMCwgOCwgMywgMjEyLCA1LCA4LCAzLCAKLSAgICAyMTIsIDIyLCA4LCAzLCAyMTIsIDEwLCA4LCAzLCAyMTAsIDMwLCA4LCAzLCAyMTAsIDI5LCA4LCAzLCAyMTAsIDQ0LCA4LCAKLSAgICAzLCAyMTAsIDMyLCA4LCAzLCAyMTAsIDM3LCA4LCAzLCAyMTAsIDM5LCA4LCAzLCAyMTAsIDM4LCA4LCAzLCAyMTAsIDEwMiwgCi0gICAgOCwgMywgMjEwLCA5OSwgOCwgMywgMjEwLCAxMTYsIDgsIDMsIDIxMCwgMTA1LCA4LCAzLCAyMTAsIDYsIDgsIDMsIDIxMCwgCi0gICAgOCwgOCwgMywgMjEwLCA3LCA4LCAzLCAyMTAsIDE5LCA4LCAzLCAyMTAsIDE4LCA4LCAzLCAyMTAsIDIzLCA4LCAzLCAyMTAsIAotICAgIDIwLCA4LCAzLCAyMTAsIDg0LCA4LCAzLCAyMTAsIDk0LCA4LCAzLCAyMTAsIDg4LCA4LCAzLCAyMTAsIDIsIDgsIDMsIDIxMCwgCi0gICAgMSwgOCwgMywgMjEwLCAxMywgOCwgMywgMjEwLCA1LCA4LCAzLCAyMTAsIDMsIDgsIDMsIDIxMCwgNCwgOCwgMywgMjA5LCAKLSAgICAyNDUsIDgsIDMsIDIwOSwgMjQ0LCA4LCAzLCAyMDksIDI1MCwgOCwgMywgMjA5LCAyNDgsIDgsIDMsIDIwOSwgMjQ2LCA4LCAKLSAgICAzLCAyMDksIDI0NywgOCwgMywgMjUwLCAyOCwgOCwgMywgMjUwLCAyNCwgOCwgMywgMjUwLCA1MSwgOCwgMywgMjUwLCAzNywgCi0gICAgOCwgMywgMjUwLCA0OCwgOCwgMywgMjUwLCA0MiwgOCwgMywgMjUwLCA1MCwgOCwgMywgMjUwLCA0OSwgOCwgMywgMjUwLCAKLSAgICAyMjQsIDgsIDMsIDI1MCwgMjE3LCA4LCAzLCAyNTEsIDMzLCA4LCAzLCAyNTAsIDI1MSwgOCwgMywgMjQ5LCAxMDQsIDgsIDMsIAotICAgIDI0OSwgMTA2LCA4LCAzLCAyNDksIDEwNSwgOCwgMywgMjQ5LCAxNTMsIDgsIDMsIDI0OSwgMTQ0LCA4LCAzLCAyNDksIDIzOCwgCi0gICAgOCwgMywgMjQ5LCAxNjksIDgsIDMsIDI1MCwgMTYwLCA4LCAzLCAyNTAsIDE5MCwgOCwgMywgMjUwLCAxNjUsIDgsIDMsIAotICAgIDI0OSwgODQsIDgsIDMsIDI0OSwgODIsIDgsIDMsIDI0OSwgMTEyLCA4LCAzLCAyNDksIDEwMiwgOCwgMywgMjQ5LCA4OSwgOCwgCi0gICAgMywgMjQ5LCAxMDEsIDgsIDMsIDI0OSwgNjMsIDgsIDMsIDI0OSwgNjIsIDgsIDMsIDI0OSwgNzMsIDgsIDMsIDI0OSwgNjksIAotICAgIDgsIDMsIDI0OSwgNjQsIDgsIDMsIDI0OSwgNjYsIDgsIDMsIDIwOSwgMjI4LCA4LCAzLCAyMDksIDIyNywgOCwgMywgMjA5LCAKLSAgICAyMzQsIDgsIDMsIDIwOSwgMjI5LCA4LCAzLCAyMDksIDIzMSwgOCwgMywgMjA5LCAyMzAsIDgsIDMsIDIwOSwgMjMzLCA4LCAKLSAgICAzLCAyMDksIDIzMiwgOCwgMywgMjA5LCAyNDAsIDgsIDMsIDIwOSwgMjM5LCA4LCAzLCAyMDksIDI0MywgOCwgMywgMjA5LCAKLSAgICAyNDEsIDgsIDMsIDIwOSwgMjI0LCA4LCAzLCAyMDksIDIyNiwgOCwgMywgMjA5LCAyMjUsIDgsIDMsIDIwOSwgMjM1LCA4LCAKLSAgICAzLCAyMDksIDIzOCwgOCwgMywgMjA5LCAyMzYsIDgsIDMsIDIwOSwgMjE3LCA4LCAzLCAyMDksIDIyMSwgOCwgMywgMjA5LCAKLSAgICAyMjAsIDgsIDMsIDIwOSwgMjE4LCA4LCAzLCAyMDksIDIxOSwgOCwgMywgMjA5LCAyMTEsIDgsIDMsIDIwOSwgMjEwLCA4LCAKLSAgICAzLCAyMDksIDIxNiwgOCwgMywgMjA5LCAyMTQsIDgsIDMsIDIwOSwgMjEyLCA4LCAzLCAyMDksIDIxMywgOCwgMywgMjI3LCAKLSAgICAxMDQsIDgsIDMsIDIyNywgMTAzLCA4LCAzLCAyMjcsIDEwOSwgOCwgMywgMjI3LCAxMDUsIDgsIDMsIDIyNywgMTA2LCA4LCAKLSAgICAzLCAyMjcsIDEwOCwgOCwgMywgMjI3LCAxMDcsIDgsIDMsIDIyNywgMTE0LCA4LCAzLCAyMjcsIDExMywgOCwgMywgMjI3LCAKLSAgICAxMTcsIDgsIDMsIDIyNywgMTE2LCA4LCAzLCAyMjcsIDk3LCA4LCAzLCAyMjcsIDk4LCA4LCAzLCAyMjcsIDEwMSwgOCwgMywgCi0gICAgMjI3LCAxMDIsIDgsIDMsIDIyNywgMTEwLCA4LCAzLCAyMjcsIDExMiwgOCwgMywgMjI3LCA5MiwgOCwgMywgMjI3LCAxMDAsIAotICAgIDgsIDMsIDIyNywgOTYsIDgsIDMsIDIyNywgOTMsIDgsIDMsIDIyNywgOTQsIDgsIDMsIDIyNywgODcsIDgsIDMsIDIyNywgCi0gICAgODYsIDgsIDMsIDIyNywgOTEsIDgsIDMsIDIyNywgOTAsIDgsIDMsIDIyNywgODgsIDgsIDMsIDIyNywgODksIDgsIDMsIAotICAgIDIxOSwgMTI3LCA4LCAzLCAxOTQsIDgsIDMsIDIxOSwgMTkxLCA4LCAzLCAyMTksIDEzMCwgOCwgMywgMjE5LCAxODMsIDgsIAotICAgIDMsIDIxOSwgMTg2LCA4LCAzLCAyMTksIDE4NCwgOCwgMywgMjIxLCAyMjYsIDgsIDMsIDIyMSwgMjE0LCA4LCAzLCAyMDYsIAotICAgIDgsIDMsIDIyMSwgMjM0LCA4LCAzLCAyMTgsIDI4LCA4LCAzLCAyMTgsIDMwLCA4LCAzLCAyMTgsIDI5LCA4LCAzLCAyMTksIAotICAgIDM0LCA4LCAzLCAyMTksIDIzLCA4LCAzLCAyMTksIDU4LCA4LCAzLCAyMTksIDM4LCA4LCAzLCAyMjAsIDExNCwgOCwgMywgCi0gICAgMjIxLCAxODEsIDgsIDMsIDIyMCwgMTM5LCA4LCAzLCAyMTgsIDUsIDgsIDMsIDIxOCwgMywgOCwgMywgMjE4LCA4MywgOCwgCi0gICAgMywgMjE4LCAyNywgOCwgMywgMjE4LCA5LCA4LCAzLCAyMTgsIDE3LCA4LCAzLCAyMTcsIDE2NiwgOCwgMywgMjE3LCAxNjUsIAotICAgIDgsIDMsIDIxNywgMjMyLCA4LCAzLCAyMTcsIDE3MywgOCwgMywgMjE3LCAxNjgsIDgsIDMsIDIxNywgMTcyLCA4LCAzLCAKLSAgICAyMTgsIDE4NiwgOCwgMywgMjE4LCAxODUsIDgsIDMsIDIxOCwgMTkyLCA4LCAzLCAyMTgsIDE4NywgOCwgMywgMjE4LCAxODksIAotICAgIDgsIDMsIDIxOCwgMTkxLCA4LCAzLCAyMTgsIDE5MCwgOCwgMywgMjE4LCAyMDAsIDgsIDMsIDIxOCwgMTk4LCA4LCAzLCAKLSAgICAyMTgsIDIyMywgOCwgMywgMjE4LCAyMDEsIDgsIDMsIDIxOCwgMTgxLCA4LCAzLCAyMTgsIDE4MCwgOCwgMywgMjE4LCAxODQsIAotICAgIDgsIDMsIDIxOCwgMTgyLCA4LCAzLCAyMTgsIDE5NCwgOCwgMywgMjE4LCAxOTcsIDgsIDMsIDIxOCwgMTk1LCA4LCAzLCAKLSAgICAyMTgsIDE3NywgOCwgMywgMjE4LCAxNzUsIDgsIDMsIDIxOCwgMTc5LCA4LCAzLCAyMTgsIDE3OCwgOCwgMywgMjE4LCAxNzAsIAotICAgIDgsIDMsIDIxOCwgMTY5LCA4LCAzLCAyMTgsIDE3NCwgOCwgMywgMjE4LCAxNzMsIDgsIDMsIDIxOCwgMTcxLCA4LCAzLCAKLSAgICAyMTgsIDE3MiwgOCwgMywgMjEwLCA3NywgOCwgMywgMjEwLCA3NiwgOCwgMywgMjEwLCA4MiwgOCwgMywgMjEwLCA3OSwgOCwgCi0gICAgMywgMjEwLCA1OSwgOCwgMywgMjEwLCA2MSwgOCwgMywgMjEwLCA2MCwgOCwgMywgMjEwLCA2NCwgOCwgMywgMjEwLCA2MywgCi0gICAgOCwgMywgMjEwLCA2NywgOCwgMywgMjEwLCA2NSwgOCwgMywgMjEwLCA3MSwgOCwgMywgMjEwLCA3MCwgOCwgMywgMjEwLCAKLSAgICA3NCwgOCwgMywgMjEwLCA3MiwgOCwgMywgMjEwLCA1NSwgOCwgMywgMjEwLCA1NCwgOCwgMywgMjEwLCA2MiwgOCwgMywgCi0gICAgMjEwLCA1OCwgOCwgMywgMjEwLCA1NiwgOCwgMywgMjEwLCA1NywgOCwgMywgMjEwLCA0NywgOCwgMywgMjEwLCA0NiwgOCwgCi0gICAgMywgMjEwLCA1MSwgOCwgMywgMjEwLCA1MCwgOCwgMywgMjEwLCA0OCwgOCwgMywgMjEwLCA0OSwgOCwgMywgMjUwLCAxMzYsIAotICAgIDgsIDMsIDI1MCwgMTMzLCA4LCAzLCAyNTAsIDE1NywgOCwgMywgMjUwLCAxNDQsIDgsIDMsIDI1MCwgNjUsIDgsIDMsIDI1MCwgCi0gICAgNjQsIDgsIDMsIDI1MCwgNjcsIDgsIDMsIDI1MCwgNjYsIDgsIDMsIDI1MCwgNzksIDgsIDMsIDI1MCwgNzgsIDgsIDMsIAotICAgIDI1MCwgODYsIDgsIDMsIDI1MCwgODEsIDgsIDMsIDI1MCwgMTE1LCA4LCAzLCAyNTAsIDExMywgOCwgMywgMjUwLCAxMzEsIAotICAgIDgsIDMsIDI1MCwgMTIxLCA4LCAzLCAyNTAsIDU5LCA4LCAzLCAyNTAsIDY5LCA4LCAzLCAyNTAsIDYzLCA4LCAzLCAyNTAsIAotICAgIDYwLCA4LCAzLCAyNTAsIDYyLCA4LCAzLCAyNTAsIDUzLCA4LCAzLCAyNTAsIDUyLCA4LCAzLCAyNTAsIDU3LCA4LCAzLCAKLSAgICAyNTAsIDU2LCA4LCAzLCAyNTAsIDU0LCA4LCAzLCAyNTAsIDU1LCA4LCAzLCAyMjIsIDE3NSwgOCwgMywgMjIyLCAxNzksIDgsIAotICAgIDMsIDIyMiwgMTU4LCA4LCAzLCAyMjIsIDE1OSwgOCwgMywgMjIyLCAxNjIsIDgsIDMsIDIyMiwgMTYxLCA4LCAzLCAyMjIsIAotICAgIDE2NSwgOCwgMywgMjIyLCAxNjMsIDgsIDMsIDIyMiwgMTY5LCA4LCAzLCAyMjIsIDE2OCwgOCwgMywgMjIyLCAxNzQsIDgsIAotICAgIDMsIDIyMiwgMTcwLCA4LCAzLCAyMjIsIDE1NCwgOCwgMywgMjIyLCAxNTIsIDgsIDMsIDIyMiwgMTYwLCA4LCAzLCAyMjIsIAotICAgIDE1NywgOCwgMywgMjIyLCAxNTUsIDgsIDMsIDIyMiwgMTU2LCA4LCAzLCAyMjIsIDE0NywgOCwgMywgMjIyLCAxNDYsIDgsIAotICAgIDMsIDIyMiwgMTUxLCA4LCAzLCAyMjIsIDE1MCwgOCwgMywgMjIyLCAxNDgsIDgsIDMsIDIyMiwgMTQ5LCA4LCAzLCAyMjgsIAotICAgIDM0LCA4LCAzLCAyMjgsIDMzLCA4LCAzLCAyMjgsIDM2LCA4LCAzLCAyMjgsIDM1LCA4LCAzLCAyMjgsIDI2LCA4LCAzLCAKLSAgICAyMjgsIDI4LCA4LCAzLCAyMjgsIDI3LCA4LCAzLCAyMjgsIDMwLCA4LCAzLCAyMjgsIDI5LCA4LCAzLCAyMjgsIDMyLCA4LCAKLSAgICAzLCAyMjgsIDMxLCA4LCAzLCAyMjgsIDIxLCA4LCAzLCAyMjgsIDIwLCA4LCAzLCAyMjgsIDI1LCA4LCAzLCAyMjgsIDI0LCAKLSAgICA4LCAzLCAyMjgsIDIyLCA4LCAzLCAyMjgsIDIzLCA4LCAzLCAyMjgsIDE1LCA4LCAzLCAyMjgsIDE0LCA4LCAzLCAyMjgsIAotICAgIDE5LCA4LCAzLCAyMjgsIDE4LCA4LCAzLCAyMjgsIDE2LCA4LCAzLCAyMjgsIDE3LCA4LCAzLCAyMjAsIDcyLCA4LCAzLCAKLSAgICAyMjAsIDY3LCA4LCAzLCAyMjAsIDEwMiwgOCwgMywgMjIwLCA4MywgOCwgMywgMjE5LCAyMTUsIDgsIDMsIDIxOSwgMjE3LCAKLSAgICA4LCAzLCAyMTksIDIxNiwgOCwgMywgMjE5LCAyMzYsIDgsIDMsIDIxOSwgMjMzLCA4LCAzLCAyMjAsIDcsIDgsIDMsIDIxOSwgCi0gICAgMjU0LCA4LCAzLCAyMjAsIDQyLCA4LCAzLCAyMjAsIDM1LCA4LCAzLCAyMjAsIDYzLCA4LCAzLCAyMjAsIDUwLCA4LCAzLCAKLSAgICAyMTksIDIxMSwgOCwgMywgMjE5LCAyMDksIDgsIDMsIDIxOSwgMjI1LCA4LCAzLCAyMTksIDIxNCwgOCwgMywgMjE5LCAyMTIsIAotICAgIDgsIDMsIDIxOSwgMjEzLCA4LCAzLCAyMTksIDE5NCwgOCwgMywgMjE5LCAxOTMsIDgsIDMsIDIxOSwgMjAwLCA4LCAzLCAKLSAgICAyMTksIDE5NywgOCwgMywgMjE5LCAxOTUsIDgsIDMsIDIxOSwgMTk2LCA4LCAzLCAyMjMsIDE0MSwgOCwgMywgMjIzLCAxMzUsIAotICAgIDgsIDMsIDIwNSwgOCwgMywgMjIzLCAxNDcsIDgsIDMsIDIyMiwgMTIwLCA4LCAzLCAyMjIsIDEyMiwgOCwgMywgMjIyLCAKLSAgICAxMjEsIDgsIDMsIDIyMiwgMTg4LCA4LCAzLCAyMjIsIDE4MSwgOCwgMywgMjIyLCAyMTEsIDgsIDMsIDIyMiwgMTkyLCA4LCAKLSAgICAzLCAyMjMsIDQzLCA4LCAzLCAyMjMsIDEyOCwgOCwgMywgMjIzLCA4MSwgOCwgMywgMjIyLCAxMTMsIDgsIDMsIDIyMiwgCi0gICAgMTEwLCA4LCAzLCAyMjIsIDE0MCwgOCwgMywgMjIyLCAxMTksIDgsIDMsIDIyMiwgMTE1LCA4LCAzLCAyMjIsIDExNiwgOCwgCi0gICAgMywgMjIyLCA5NSwgOCwgMywgMjIyLCA5NCwgOCwgMywgMjIyLCAxMDAsIDgsIDMsIDIyMiwgOTgsIDgsIDMsIDIyMiwgOTYsIAotICAgIDgsIDMsIDIyMiwgOTcsIDgsIDMsIDIzNSwgOTgsIDgsIDMsIDIzNSwgOTcsIDgsIDMsIDIzNSwgMTA4LCA4LCAzLCAyMzUsIAotICAgIDk5LCA4LCAzLCAyMzUsIDEwNCwgOCwgMywgMjM1LCAxMDMsIDgsIDMsIDIzNSwgMTA2LCA4LCAzLCAyMzUsIDEwNSwgOCwgMywgCi0gICAgMjM1LCA0MSwgOCwgMywgMjM1LCA0MCwgOCwgMywgMjM1LCA0MywgOCwgMywgMjM1LCA0MiwgOCwgMywgMjM1LCA1NiwgOCwgCi0gICAgMywgMjM1LCA1NCwgOCwgMywgMjM1LCA2OCwgOCwgMywgMjM1LCA1OCwgOCwgMywgMjM1LCAzNCwgOCwgMywgMjM1LCAzMiwgCi0gICAgOCwgMywgMjM1LCA1MSwgOCwgMywgMjM1LCAzOSwgOCwgMywgMjM1LCAzNiwgOCwgMywgMjM1LCAzNywgOCwgMywgMjM1LCAKLSAgICAyNiwgOCwgMywgMjM1LCAyNSwgOCwgMywgMjM1LCAzMCwgOCwgMywgMjM1LCAyOSwgOCwgMywgMjM1LCAyNywgOCwgMywgCi0gICAgMjM1LCAyOCwgOCwgMywgMjI0LCA0NiwgOCwgMywgMjI0LCA0NCwgOCwgMywgMjI0LCA1MywgOCwgMywgMjI0LCA0NywgOCwgCi0gICAgMywgMjI0LCA1MCwgOCwgMywgMjI0LCA0OSwgOCwgMywgMjI0LCA1MiwgOCwgMywgMjI0LCA1MSwgOCwgMywgMjIzLCAyNTUsIAotICAgIDgsIDMsIDIyMywgMjUyLCA4LCAzLCAyMjQsIDEsIDgsIDMsIDIyNCwgMCwgOCwgMywgMjI0LCAzMywgOCwgMywgMjI0LCAzMiwgCi0gICAgOCwgMywgMjI0LCA0MiwgOCwgMywgMjI0LCAzNiwgOCwgMywgMjIzLCAyNDcsIDgsIDMsIDIyMywgMjQzLCA4LCAzLCAyMjQsIAotICAgIDMwLCA4LCAzLCAyMjMsIDI1MSwgOCwgMywgMjIzLCAyNDksIDgsIDMsIDIyMywgMjUwLCA4LCAzLCAyMjMsIDIyNywgOCwgMywgCi0gICAgMjIzLCAyMjUsIDgsIDMsIDIyMywgMjM3LCA4LCAzLCAyMjMsIDIzMCwgOCwgMywgMjIzLCAyMjgsIDgsIDMsIDIyMywgMjI5LCAKLSAgICA4LCAzLCAyMzUsIDg3LCA4LCAzLCAyMzUsIDg2LCA4LCAzLCAyMzUsIDkzLCA4LCAzLCAyMzUsIDg4LCA4LCAzLCAyMzUsIAotICAgIDkwLCA4LCAzLCAyMzUsIDg5LCA4LCAzLCAyMzUsIDkyLCA4LCAzLCAyMzUsIDkxLCA4LCAzLCAyMzUsIDc4LCA4LCAzLCAKLSAgICAyMzUsIDgwLCA4LCAzLCAyMzUsIDc5LCA4LCAzLCAyMzUsIDgzLCA4LCAzLCAyMzUsIDgyLCA4LCAzLCAyMzUsIDg1LCA4LCAKLSAgICAzLCAyMzUsIDg0LCA4LCAzLCAyMzUsIDc0LCA4LCAzLCAyMzUsIDczLCA4LCAzLCAyMzUsIDgxLCA4LCAzLCAyMzUsIDc3LCAKLSAgICA4LCAzLCAyMzUsIDc1LCA4LCAzLCAyMzUsIDc2LCA4LCAzLCAyMzUsIDcwLCA4LCAzLCAyMzUsIDY5LCA4LCAzLCAyMzUsIAotICAgIDcyLCA4LCAzLCAyMzUsIDcxLCA4LCAzLCAyMjgsIDE2MiwgOCwgMywgMjI4LCAxNjEsIDgsIDMsIDIyOCwgMTY5LCA4LCAzLCAKLSAgICAyMjgsIDE2MywgOCwgMywgMjI4LCAxNjUsIDgsIDMsIDIyOCwgMTY0LCA4LCAzLCAyMjgsIDE2OCwgOCwgMywgMjI4LCAxNjYsIAotICAgIDgsIDMsIDIyOCwgMTUxLCA4LCAzLCAyMjgsIDE1MiwgOCwgMywgMjI4LCAxNTcsIDgsIDMsIDIyOCwgMTU2LCA4LCAzLCAKLSAgICAyMjgsIDE2MCwgOCwgMywgMjI4LCAxNTgsIDgsIDMsIDIyOCwgMTQ2LCA4LCAzLCAyMjgsIDE1NSwgOCwgMywgMjI4LCAxNTAsIAotICAgIDgsIDMsIDIyOCwgMTQ3LCA4LCAzLCAyMjgsIDE0OCwgOCwgMywgMjI4LCAxNDEsIDgsIDMsIDIyOCwgMTQwLCA4LCAzLCAKLSAgICAyMjgsIDE0NSwgOCwgMywgMjI4LCAxNDQsIDgsIDMsIDIyOCwgMTQyLCA4LCAzLCAyMjgsIDE0MywgOCwgMywgMjI3LCAxMzcsIAotICAgIDgsIDMsIDIyNywgMTM2LCA4LCAzLCAyMjcsIDE0OCwgOCwgMywgMjI3LCAxNDEsIDgsIDMsIDIyNywgMTQ1LCA4LCAzLCAKLSAgICAyMjcsIDE0NCwgOCwgMywgMjI3LCAxNDcsIDgsIDMsIDIyNywgMTQ2LCA4LCAzLCAyMjcsIDEyNCwgOCwgMywgMjI3LCAxMjYsIAotICAgIDgsIDMsIDIyNywgMTI1LCA4LCAzLCAyMjcsIDEzMCwgOCwgMywgMjI3LCAxMjksIDgsIDMsIDIyNywgMTM0LCA4LCAzLCAKLSAgICAyMjcsIDEzMSwgOCwgMywgMjI3LCAxMjIsIDgsIDMsIDIyNywgMTIwLCA4LCAzLCAyMjcsIDEyOCwgOCwgMywgMjI3LCAxMjMsIAotICAgIDgsIDMsIDIxMSwgMTUwLCA4LCAzLCAyMTEsIDE0OSwgOCwgMywgMjExLCAxNTcsIDgsIDMsIDIxMSwgMTUyLCA4LCAzLCAKLSAgICAyMTEsIDE1NCwgOCwgMywgMjExLCAxNTMsIDgsIDMsIDIxMSwgMTU2LCA4LCAzLCAyMTEsIDE1NSwgOCwgMywgMjExLCAxMzksIAotICAgIDgsIDMsIDIxMSwgMTQwLCA4LCAzLCAyMTEsIDE0NCwgOCwgMywgMjExLCAxNDMsIDgsIDMsIDIxMSwgMTQ4LCA4LCAzLCAKLSAgICAyMTEsIDE0NiwgOCwgMywgMjExLCAxMjEsIDgsIDMsIDIxMSwgMTE5LCA4LCAzLCAyMTEsIDEzMSwgOCwgMywgMjExLCAxMjQsIAotICAgIDgsIDMsIDIxMSwgMTIyLCA4LCAzLCAyMTEsIDEyMywgOCwgMywgMjEwLCAyNTAsIDgsIDMsIDIxMCwgMjQ4LCA4LCAzLCAKLSAgICAyMTEsIDgsIDgsIDMsIDIxMCwgMjUxLCA4LCAzLCAyMTEsIDIsIDgsIDMsIDIxMSwgMSwgOCwgMywgMjExLCA1LCA4LCAzLCAKLSAgICAyMTEsIDMsIDgsIDMsIDIxMCwgMTkxLCA4LCAzLCAyMTAsIDE5MCwgOCwgMywgMjEwLCAxOTQsIDgsIDMsIDIxMCwgMTkyLCAKLSAgICA4LCAzLCAyMTAsIDIyNCwgOCwgMywgMjEwLCAyMjEsIDgsIDMsIDIxMCwgMjQ0LCA4LCAzLCAyMTAsIDIyOCwgOCwgMywgCi0gICAgMjEwLCAxODIsIDgsIDMsIDIxMCwgMTc4LCA4LCAzLCAyMTAsIDIxMiwgOCwgMywgMjEwLCAxODksIDgsIDMsIDIxMCwgMTg1LCAKLSAgICA4LCAzLCAyMTAsIDE4NiwgOCwgMywgMjEwLCAxNjIsIDgsIDMsIDIxMCwgMTYxLCA4LCAzLCAyMTAsIDE2OSwgOCwgMywgCi0gICAgMjEwLCAxNjUsIDgsIDMsIDIxMCwgMTYzLCA4LCAzLCAyMTAsIDE2NCwgOCwgMzQsIDIyNCwgMzMsIDgsIDM0LCAyMzIsIAotICAgIDI0MSwgOCwgMzQsIDIzNCwgNjEsIDgsIDM0LCAyMjcsIDE0MSwgOCwgMzQsIDI0OSwgNjksIDgsIDM0LCAyMTgsIDE5MiwgOCwgCi0gICAgMzQsIDI0MywgMTIsIDgsIDM0LCAyNDMsIDQ0LCA4LCAzNCwgMjMwLCAyMzAsIDgsIDM0LCAyNDAsIDE4MCwgOCwgMzQsIAotICAgIDIzMiwgNTYsIDgsIDM0LCAyNTIsIDgzLCA4LCAzNCwgMjMwLCAxMjYsIDgsIDM0LCAyMTAsIDI0NCwgOCwgMzQsIDIyNCwgCi0gICAgMTIxLCA4LCAzNCwgMjQwLCAxNzQsIDgsIDM0LCAyMTcsIDQ2LCA4LCAzNCwgMjQzLCAxMzUsIDgsIDM0LCAyMTAsIDUsIDgsIAotICAgIDM0LCAyNDksIDYzLCA4LCAzNCwgMjQ4LCA5NSwgOCwgMzQsIDI1MSwgOTgsIDgsIDM0LCAyNDMsIDgsIDgsIDM0LCAyMjcsIAotICAgIDEzMSwgOCwgMzQsIDIxNSwgMTE4LCA4LCAzNCwgMjI2LCAxNzUsIDgsIDM0LCAyMzUsIDc0LCA4LCAzNCwgMjEwLCAxOSwgOCwgCi0gICAgMzQsIDIyNCwgMTAwLCA4LCAzNCwgMjQxLCAxMDgsIDgsIDM0LCAyMTAsIDI1MCwgOCwgMzQsIDIxMiwgMTEyLCA4LCAzNCwgCi0gICAgMjE5LCAyMDAsIDgsIDM0LCAyMTMsIDI0NCwgOCwgMzQsIDIxMCwgMTE2LCA4LCAzNCwgMjM1LCA2OCwgOCwgMzQsIDIyNywgCi0gICAgOTYsIDgsIDM0LCAyMzUsIDcyLCA4LCAzNCwgMjQyLCAxNTQsIDgsIDM0LCAyMzUsIDkyLCA4LCAzNCwgMjExLCAyMjcsIDgsIAotICAgIDM0LCAyNDYsIDc4LCA4LCAzNCwgMjE5LCAyMTMsIDgsIDM0LCAyMzIsIDIzNiwgOCwgMzQsIDI0OSwgNzMsIDgsIDM0LCAKLSAgICAyNDksIDEwNSwgOCwgMzQsIDI1MCwgMzcsIDgsIDM0LCAyNDAsIDE3NywgOCwgMzQsIDIyMCwgNzIsIDgsIDM0LCAyMTAsIDQsIAotICAgIDgsIDM0LCAyMTksIDI1NCwgOCwgMzQsIDI1MCwgMTMxLCA4LCAzNCwgMjA5LCAyMzEsIDgsIDM0LCAyMjksIDE3MywgOCwgCi0gICAgMzQsIDIzNCwgMTgyLCAyMzIsIDE5NiwgMSwgMjUyLCAxOTEsIDIzMiwgMTk2LCAxLCAxOTAsIDIzMiwgMTk2LCAxLCAyMjUsIAotICAgIDE0NywgMjMyLCAxOTYsIDEsIDI0OCwgMjIxLCAyMzIsIDE5NiwgMSwgMjE3LCAxMDUsIDIzMiwgMTk2LCAxLCAyMTYsIDIwOCwgCi0gICAgMjMyLCAxOTYsIDEsIDI0MywgMTM1LCAyMzIsIDE5NiwgMSwgMTc2LCAyMzIsIDE5NiwgMSwgMjM0LCAxMzIsIDIzMiwgMTk2LCAKLSAgICAxLCAyMzUsIDE0MSwgMjMyLCAxOTYsIDEsIDI1MSwgMzMsIDIzMiwgMTk2LCAxLCAyNTAsIDE1NywgMjMyLCAxOTYsIDEsIAotICAgIDI0NiwgMzgsIDIzMiwgMTk2LCAxLCAyMTUsIDE4MywgMjMyLCAxOTYsIDEsIDIxNSwgMTc1LCAyMzIsIDE5NiwgMSwgMTg0LCAKLSAgICAyMzIsIDE5NiwgMSwgMTk3LCAyMzIsIDE5NiwgMSwgMjMzLCAxMzUsIDIzMiwgMTk2LCAxLCAyMDYsIDIzMiwgMTk2LCAxLCAKLSAgICAyMTAsIDgyLCAyMzIsIDE5NiwgMSwgMjEwLCAxMTYsIDIzMiwgMTk2LCAxLCAyMjksIDc3LCAyMzIsIDE5NiwgMSwgMTYyLCAKLSAgICAyMzIsIDE5NiwgMSwgMjExLCAxNjUsIDIzMiwgMTk2LCAxLCAyNDEsIDE4OSwgMjMyLCAxOTYsIDEsIDI0NCwgMTk2LCAyMzIsIAotICAgIDE5NiwgMSwgMjEyLCA2NSwgMjMyLCAxOTYsIDEsIDIyMCwgMTAyLCAyMzIsIDE5NiwgMSwgMTkxLCAyMzIsIDE5NiwgMSwgCi0gICAgMjQyLCAyNDksIDIzMiwgMTk2LCAxLCA2MSwgMjMyLCAxOTYsIDEsIDI1NCwgMjQzLCAyMzIsIDE5NiwgMSwgNzUsIDIzMiwgCi0gICAgMTk2LCAxLCAyNDUsIDU1LCAyMzIsIDE5NiwgMSwgNzMsIDIzMiwgMTk2LCAxLCA3NiwgMjMyLCAxOTYsIDEsIDcwLCAyMzIsIAotICAgIDE5NiwgMSwgMjE0LCAyMTQsIDIzMiwgMTk2LCAxLCAyMTQsIDIwOCwgMjMyLCAxOTYsIDEsIDIyNiwgMjM0LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAyMTYsIDExNywgMjMyLCAxOTYsIDEsIDEzOCwgMjI5LCAyMjksIDIyNSwgMTYsIDIzMiwgMTk2LCAKLSAgICAxLCAxMzgsIDIzMCwgMzIsIDI0OSwgNzIsIDIzMiwgMTk2LCAxLCAxMzgsIDIzMCwgMzIsIDI1MSwgMjA1LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAxOTcsIDIzMiwgMTk2LCAxLCAxMzgsIDIzMCwgMzIsIDIzNSwgMTE1LCAyMzIsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDI0OSwgMjE5LCAyMzIsIDE5NiwgMjI0LCAxNDEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNDEsIDMsIDI0NSwgMjA5LCAKLSAgICA0MSwgMywgMjQ1LCAyMDUsIDQxLCAzLCAyNDEsIDIyMCwgNDEsIDMsIDIxMiwgMTcsIDQxLCAzLCAyMTIsIDE2LCA0MSwgMywgCi0gICAgMjI1LCAyMTEsIDQxLCAzLCAyNTIsIDEzLCA0MSwgMywgMjUyLCA2NiwgNDEsIDMsIDIzMSwgMTE2LCA0MSwgMywgMjMzLCAKLSAgICAyNDcsIDQxLCAzLCAyMzEsIDYsIDQxLCAzLCAyNDMsIDc1LCA0MSwgMywgMjQ0LCAxNDcsIDQxLCAzLCAyMTMsIDI1MCwgNDEsIAotICAgIDMsIDIxNywgMTEsIDQxLCAzLCAyMTYsIDE5NCwgNDEsIDMsIDI0OCwgMTYsIDQxLCAzLCAyNDgsIDEzLCA0MSwgMywgMjMzLCAKLSAgICA1MCwgNDEsIDMsIDIyMywgMTA4LCA0MSwgMywgMjQ4LCA3NywgNDEsIDMsIDIyOSwgMTM5LCA0MSwgMywgMjIxLCAxNzAsIAotICAgIDQxLCAzLCAyMjAsIDYxLCA0MSwgMywgMjEwLCA5MiwgNDEsIDMsIDIxMCwgNzMsIDQxLCAzLCAyNTAsIDE4MiwgNDEsIDMsIAotICAgIDIzNSwgMTI0LCA0MSwgMywgMjI4LCAxNzYsIDQxLCAzLCAyMTEsIDQ0LCA0MSwgMywgMjM0LCAxODEsIDQxLCAzLCAyMjksIAotICAgIDUxLCA0MSwgMywgMjQzLCA1NSwgNDEsIDMsIDIzMSwgODAsIDQxLCAzLCAyMjksIDEwMywgNDEsIDMsIDIyNywgMTU1LCA0MSwgCi0gICAgMywgNzMsIDQxLCAzLCAyMzUsIDI1NSwgNDEsIDMsIDI0MSwgMTgwLCA0MSwgMywgMjQxLCAxNjAsIDQxLCAzLCAyMTEsIAotICAgIDI1MCwgNDEsIDMsIDIxMSwgMjQxLCA0MSwgMywgMjI1LCAxMDgsIDQxLCAzLCAyNTIsIDExLCA0MSwgMywgMjUyLCA2LCA0MSwgCi0gICAgMywgMjMxLCAxMDksIDQxLCAzLCAyMzMsIDI0NCwgNDEsIDMsIDIzMSwgMywgNDEsIDMsIDI0MywgNzEsIDQxLCAzLCAyNDQsIAotICAgIDEyMSwgNDEsIDMsIDIxMywgMTc2LCA0MSwgMywgMjE2LCAxMTcsIDQxLCAzLCAyMTYsIDE3NSwgNDEsIDMsIDI0OCwgOCwgCi0gICAgNDEsIDMsIDI0OCwgMTIsIDQxLCAzLCAyMzIsIDI0MSwgNDEsIDMsIDIyMywgMzUsIDQxLCAzLCAyNDgsIDMsIDQxLCAzLCAKLSAgICAyMjksIDEzMywgNDEsIDMsIDIxOSwgMTkxLCA0MSwgMywgMjIwLCAzMiwgNDEsIDMsIDIxMCwgNDQsIDQxLCAzLCAyMTAsIAotICAgIDY5LCA0MSwgMywgMjUwLCA1MSwgNDEsIDMsIDIzNSwgMTA4LCA0MSwgMywgMjI4LCAxNjksIDQxLCAzLCAyMTEsIDgsIDQxLCAKLSAgICAzLCAyMzQsIDkyLCA0MSwgMywgMjI5LCA0MywgNDEsIDMsIDI0MiwgMjE0LCA0MSwgMywgMjMwLCAyMzAsIDQxLCAzLCAyMjgsIAotICAgIDIzMywgNDEsIDMsIDIyNywgMTQ4LCA0MSwgMywgNjEsIDQxLCAzLCAyNTQsIDEyMywgNDEsIDMsIDIyOSwgNzIsIDQxLCAzLCAKLSAgICAxNjIsIDQxLCAzLCAyNDIsIDE4LCA0MSwgMywgMjEyLCA2NSwgNDEsIDMsIDIxMiwgNTUsIDQxLCAzLCAxOTAsIDQxLCAzLCAKLSAgICAyNTIsIDE4LCA0MSwgMywgMjUyLCAxOTEsIDQxLCAzLCAyMzEsIDEyNCwgNDEsIDMsIDIzMywgMjUxLCA0MSwgMywgMjMzLCAKLSAgICAyNTAsIDQxLCAzLCAyMzEsIDEwLCA0MSwgMywgMjQzLCA3OSwgNDEsIDMsIDI0NCwgMTk2LCA0MSwgMywgMjE0LCAyNywgNDEsIAotICAgIDMsIDIxNywgMTA1LCA0MSwgMywgMjE2LCAyMDgsIDQxLCAzLCAyNDgsIDI1LCA0MSwgMywgMjQ4LCAxNSwgNDEsIDMsIDIzMywgCi0gICAgMTM1LCA0MSwgMywgMjA1LCA0MSwgMywgMjQ4LCAyMjEsIDQxLCAzLCAyMjksIDE0OCwgNDEsIDMsIDIwNiwgNDEsIDMsIAotICAgIDIyMCwgMTAyLCA0MSwgMywgMjEwLCAxMTYsIDQxLCAzLCAyMTAsIDgyLCA0MSwgMywgMjUxLCAzMywgNDEsIDMsIDIzNSwgCi0gICAgMTQxLCA0MSwgMywgMjI4LCAxODUsIDQxLCAzLCAxOTEsIDQxLCAzLCAxNzYsIDQxLCAzLCAyMzQsIDIzNCwgNDEsIDMsIAotICAgIDIyOSwgNTYsIDQxLCAzLCAyNDMsIDEzNSwgNDEsIDMsIDE4NCwgNDEsIDMsIDE5NywgNDEsIDMsIDIyNywgMTY1LCA0MSwgMywgCi0gICAgMjI2LCAxODMsIDQxLCAzLCAyMjYsIDE3OSwgNDEsIDMsIDI0MSwgNTMsIDQxLCAzLCAyMTEsIDIxNSwgNDEsIDMsIDIxMSwgCi0gICAgMjExLCA0MSwgMywgMjI0LCAyNDksIDQxLCAzLCAyNTIsIDksIDQxLCAzLCAyNTEsIDE5MywgNDEsIDMsIDIzMSwgMTA0LCAKLSAgICA0MSwgMywgMjMzLCAyNDIsIDQxLCAzLCAyMzAsIDI1NSwgNDEsIDMsIDI0MywgNjcsIDQxLCAzLCAyNDQsIDM0LCA0MSwgMywgCi0gICAgMjEzLCAxMjcsIDQxLCAzLCAyMTYsIDE3LCA0MSwgMywgMjE2LCAxNTMsIDQxLCAzLCAyNDgsIDYsIDQxLCAzLCAyNDgsIDEwLCAKLSAgICA0MSwgMywgMjMyLCAxMjcsIDQxLCAzLCAyMjIsIDE5NywgNDEsIDMsIDI0NywgMTI1LCA0MSwgMywgMjI5LCAxMjAsIDQxLCAKLSAgICAzLCAyMTksIDQwLCA0MSwgMywgMjIwLCAxLCA0MSwgMywgMjEwLCAyMSwgNDEsIDMsIDIxMCwgNjYsIDQxLCAzLCAyNDksIAotICAgIDE3NCwgNDEsIDMsIDIzNSwgNTksIDQxLCAzLCAyMjgsIDE1OSwgNDEsIDMsIDIxMCwgMjI5LCA0MSwgMywgMjM0LCAxMCwgCi0gICAgNDEsIDMsIDIyOSwgNDEsIDQxLCAzLCAyNDIsIDE2NCwgNDEsIDMsIDIzMCwgMTMyLCA0MSwgMywgMjI4LCA2NCwgNDEsIDMsIAotICAgIDIyNywgMTMyLCA0MSwgMywgNzAsIDQxLCAzLCAyMTQsIDE5MCwgNDEsIDMsIDI0MCwgMjIyLCA0MSwgMywgMjQwLCAyMTIsIAotICAgIDQxLCAzLCAyMTEsIDE5NSwgNDEsIDMsIDIxMSwgMTg5LCA0MSwgMywgMjI0LCAxNTAsIDQxLCAzLCAyNTIsIDgsIDQxLCAzLCAKLSAgICAyNTEsIDEyNSwgNDEsIDMsIDIzMSwgMTAzLCA0MSwgMywgMjMzLCAyNDAsIDQxLCAzLCAyMzAsIDI1NCwgNDEsIDMsIDI0MywgCi0gICAgNjYsIDQxLCAzLCAyNDMsIDIzNCwgNDEsIDMsIDIxMiwgMTE2LCA0MSwgMywgMjE1LCAxMTgsIDQxLCAzLCAyMTYsIDEzNiwgCi0gICAgNDEsIDMsIDI0OCwgNCwgNDEsIDMsIDI0OCwgOSwgNDEsIDMsIDIzMiwgOTgsIDQxLCAzLCAyMjIsIDE0MCwgNDEsIDMsIAotICAgIDI0NiwgNzgsIDQxLCAzLCAyMjksIDExNSwgNDEsIDMsIDIxOCwgODMsIDQxLCAzLCAyMTksIDIyNSwgNDEsIDMsIDIxMCwgCi0gICAgMTMsIDQxLCAzLCAyMTAsIDYyLCA0MSwgMywgMjQ5LCAxMTIsIDQxLCAzLCAyMzUsIDUxLCA0MSwgMywgMjI4LCAxNTUsIDQxLCAKLSAgICAzLCAyMTAsIDIxMiwgNDEsIDMsIDIzMywgMjE3LCA0MSwgMywgMjI5LCA0MCwgNDEsIDMsIDI0MiwgMTEzLCA0MSwgMywgCi0gICAgMjMwLCAxMDIsIDQxLCAzLCAyMjcsIDIzNywgNDEsIDMsIDIyNywgMTI4LCA0MSwgMywgNzYsIDQxLCAzLCAyMjYsIDE5NiwgCi0gICAgNDEsIDMsIDIyOSwgMCwgNDEsIDMsIDI0MSwgNjgsIDQxLCAzLCAyNDEsIDU2LCA0MSwgMywgMjExLCAyMjcsIDQxLCAzLCAKLSAgICAyMTEsIDIxNiwgNDEsIDMsIDIyNSwgMTYsIDQxLCAzLCAyNTIsIDEwLCA0MSwgMywgMjUxLCAyMDUsIDQxLCAzLCAyMzEsIAotICAgIDEwNSwgNDEsIDMsIDIzMywgMjQzLCA0MSwgMywgMjMxLCAxLCA0MSwgMywgMjQzLCA2OSwgNDEsIDMsIDI0MywgNjgsIDQxLCAKLSAgICAzLCAyNDQsIDQzLCA0MSwgMywgMjEzLCAxMzgsIDQxLCAzLCAxMTEsIDQxLCAzLCAyMTYsIDE1NiwgNDEsIDMsIDI0OCwgNywgCi0gICAgNDEsIDMsIDI0OCwgMTEsIDQxLCAzLCAyMzIsIDE1NiwgNDEsIDMsIDIyMiwgMjExLCA0MSwgMywgMjQ3LCAxNDUsIDQxLCAzLCAKLSAgICAyMjksIDEyNCwgNDEsIDMsIDIxOSwgNTgsIDQxLCAzLCAyMjAsIDcsIDQxLCAzLCAyMTAsIDIzLCA0MSwgMywgMjEwLCA2NywgCi0gICAgNDEsIDMsIDI0OSwgMjM4LCA0MSwgMywgMjM1LCA2OCwgNDEsIDMsIDIyOCwgMTYwLCA0MSwgMywgMjEwLCAyNDQsIDQxLCAzLCAKLSAgICAyMzQsIDI4LCA0MSwgMywgMjI5LCA0MiwgNDEsIDMsIDI0MiwgMTc0LCA0MSwgMywgMjMwLCAxNjEsIDQxLCAzLCAyMjgsIAotICAgIDc0LCA0MSwgMywgMjI3LCAxMzQsIDQxLCAzLCA3NSwgNDEsIDMsIDI0NSwgMTUwLCA0MSwgMywgMjI5LCA2MSwgNDEsIDMsIAotICAgIDI0MSwgMjM4LCA0MSwgMywgMjQxLCAyMDksIDQxLCAzLCAyMTIsIDIyLCA0MSwgMywgMjEyLCAxMiwgNDEsIDMsIDIyNSwgCi0gICAgMjIxLCA0MSwgMywgMjUyLCAxNCwgNDEsIDMsIDI1MiwgNzUsIDQxLCAzLCAyMzEsIDExNywgNDEsIDMsIDIzMywgMjQ4LCAKLSAgICA0MSwgMywgMjMzLCAyNDYsIDQxLCAzLCAyMzEsIDcsIDQxLCAzLCAyNDMsIDc2LCA0MSwgMywgMjQzLCA3NCwgNDEsIDMsIAotICAgIDI0NCwgMTU0LCA0MSwgMywgMjEzLCAyNTUsIDQxLCAzLCAyMTcsIDIyLCA0MSwgMywgMjE2LCAxOTUsIDQxLCAzLCAyNDgsIAotICAgIDE3LCA0MSwgMywgMjQ4LCAxNCwgNDEsIDMsIDIzMywgNTgsIDQxLCAzLCAyMjMsIDEyOCwgNDEsIDMsIDI0OCwgOTAsIDQxLCAKLSAgICAzLCAyMjksIDE0MCwgNDEsIDMsIDIyMSwgMTgxLCA0MSwgMywgMjIwLCA2MywgNDEsIDMsIDIxMCwgOTQsIDQxLCAzLCAyMTAsIAotICAgIDc0LCA0MSwgMywgMjUwLCAxOTAsIDQxLCAzLCAyMzUsIDEyNiwgNDEsIDMsIDIyOCwgMTc4LCA0MSwgMywgMjExLCA0NywgCi0gICAgNDEsIDMsIDIzNCwgMTgyLCA0MSwgMywgMjI5LCA1MiwgNDEsIDMsIDIyOSwgNDgsIDQxLCAzLCAyNDMsIDYyLCA0MSwgMywgCi0gICAgMjQzLCA1MSwgNDEsIDMsIDIzMSwgOTEsIDQxLCAzLCAyMjksIDEwNywgNDEsIDMsIDIyNywgMTU2LCA0MSwgMywgMjI5LCAKLSAgICA3OSwgNDEsIDMsIDIzMywgMjIsIDQxLCAyNDksIDIxOSwgNDEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNDEsIDIyNCwgMTMsIAotICAgIDc4LCA0MSwgMywgMjI5LCAxMjMsIDI0NCwgMTk2LCA0MSwgMywgMjI5LCAxMjMsIDE3NiwgNDEsIDMsIDIyOSwgMTIzLCAKLSAgICAyMTksIDQwLCA0MSwgMTYsIDI0NCwgMTQ0LCA0MSwgMTYsIDIzNCwgMTgwLCA0MSwgMTYsIDIxNiwgODEsIDQxLCAxNiwgCi0gICAgMjI4LCAyMDgsIDQxLCAxNiwgMjUyLCAxNDcsIDQxLCAxNiwgMjQ0LCAxOTUsIDQxLCAxNiwgMjE3LCAxMDEsIDQxLCAxNiwgCi0gICAgMjQ4LCAxNzYsIDQxLCAxNiwgMjQ3LCAxMjQsIDQxLCAxNiwgMjMzLCAyMDYsIDQxLCAxNiwgMjE2LCAyMSwgNDEsIDE2LCAKLSAgICAyNDcsIDE0NCwgNDEsIDE2LCAyMzUsIDYwLCA0MSwgMjEsIDIxMCwgODYsIDQxLCAyMSwgMTEwLCA0MSwgMjEsIDEwNSwgNDEsIAotICAgIDIxLCAxNTgsIDQxLCAyMSwgMTYxLCA0MSwgMjEsIDE4OSwgNDEsIDIxLCAxOTQsIDQxLCAyMSwgMTk4LCA0MSwgMjEsIDE5NSwgCi0gICAgNDEsIDIxLCAyMDAsIDQxLCAzLCAyMjksIDEyMywgMTg0LCA0MSwgMywgMjI5LCAxMjMsIDI0NywgMTQ1LCAzMywgNiwgMSwgCi0gICAgMjEwLCA5MCwgMzMsIDQsIDEsIDIxMCwgOTAsIDMzLCA2LCAxLCAyNDYsIDM0LCAzMywgNCwgMSwgMjQ2LCAzNCwgMzMsIDYsIAotICAgIDEsIDIyMywgNDksIDI0NiwgMzYsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyNDYsIDM2LCAzMywgNiwgMSwgMjM1LCAxODUsIDMzLCAKLSAgICA0LCAxLCAyMzUsIDE4NSwgMzMsIDYsIDEsIDI0NywgMTYxLCAzMywgNCwgMSwgMjQ3LCAxNjEsIDMzLCA2LCAxLCAyMzAsIAotICAgIDE0MCwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMzAsIDE0MCwgMjE0LCAyMDUsIDMzLCA2LCAxLCAyNTEsIDEzNiwgMjI2LCAKLSAgICAyMDEsIDMzLCA0LCAxLCAyNTEsIDEzNiwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMjksIDg3LCAyMTEsIDMxLCAzMywgNCwgMSwgCi0gICAgMjI5LCA4NywgMjExLCAzMSwgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI1MiwgMTg1LCAyMTEsIDMxLCAzMywgNCwgMSwgMjExLCAKLSAgICAyOCwgMiwgMjUyLCAxODUsIDIxMSwgMzEsIDMzLCA2LCAxLCAyMzUsIDE4MywgMjExLCA1OSwgMzMsIDQsIDEsIDIzNSwgCi0gICAgMTgzLCAyMTEsIDU5LCAzMywgNiwgMSwgMjIzLCA0OSwgMjEwLCAyMTIsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyMTAsIDIxMiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTgzLCA2MSwgMzMsIDQsIDEsIDIzNSwgMTgzLCA2MSwgMzMsIDYsIDEsIDI1MCwgMCwgMjMyLCAKLSAgICAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUwLCAwLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTEsIDIxNCwgCi0gICAgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDIxNCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgMjUwLCAwLCAyMzIsIAotICAgIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjUwLCAwLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAKLSAgICAyMTAsIDI0NiwgMzMsIDQsIDEsIDIxMCwgMjQ2LCAzMywgNiwgMSwgMjIzLCA0OSwgMjE1LCAxNzgsIDMzLCA0LCAxLCAyMjMsIAotICAgIDQ5LCAyMTUsIDE3OCwgMzMsIDYsIDEsIDIxOSwgNTIsIDI0OCwgOTAsIDMzLCA0LCAxLCAyMTksIDUyLCAyNDgsIDkwLCAzMywgCi0gICAgNiwgMSwgMjE5LCA1MiwgMjQ1LCAxNzQsIDMzLCA0LCAxLCAyMTksIDUyLCAyNDUsIDE3NCwgMzMsIDYsIDEsIDIxOSwgNTIsIAotICAgIDI0NSwgMTU5LCAzMywgNCwgMSwgMjE5LCA1MiwgMjQ1LCAxNTksIDMzLCA2LCAxLCAyMzAsIDE0NCwgNzYsIDMzLCA0LCAxLCAKLSAgICAyMzAsIDE0NCwgNzYsIDMzLCA2LCAxLCAyNTEsIDI0MCwgNzYsIDMzLCA0LCAxLCAyNTEsIDI0MCwgNzYsIDMzLCA2LCAxLCAKLSAgICA1MiwgMjMwLCAxNDQsIDc2LCAzMywgNCwgMSwgNTIsIDIzMCwgMTQ0LCA3NiwgMzMsIDEsIDIzMCwgODYsIDc2LCAzOCwgMzMsIAotICAgIDIxMiwgMTAwLCAzOCwgMzMsIDIxNiwgMjQ4LCAyMzAsIDE5MSwgNTAsIDM4LCAzMywgMjQwLCAyMTEsIDIzMCwgMTkxLCA1MCwgCi0gICAgMzgsIDMzLCAyMTYsIDE0OCwgMjMwLCAxOTEsIDUwLCAyMTksIDkzLCAyNTMsIDIxNiwgMzgsIDMzLCAxLCAyMTQsIDIwMiwgCi0gICAgMjM2LCA2MCwgMzgsIDMzLCAxLCA3MywgMzgsIDMzLCAxLCAyMTEsIDgsIDM4LCAzMywgMSwgNzAsIDM4LCAzMywgMSwgMjQyLCAKLSAgICAzLCA1MCwgMzgsIDMzLCAxLCAyMTEsIDI3LCAzOCwgMzMsIDEsIDIxOSwgNTIsIDUwLCAzOCwgMzMsIDEsIDIyNiwgMjAxLCAKLSAgICAzOCwgMzMsIDIzNCwgMTkyLCAzOCwgMzMsIDIyNSwgMjI3LCAzMywgMjM0LCAxOTIsIDMzLCAyMjUsIDIyNywgMzMsIDYsIDEsIAotICAgIDI0NiwgNDYsIDMzLCA0LCAxLCAyNDYsIDQ2LCAzMywgNiwgMSwgMjQ2LCAyNywgMzMsIDQsIDEsIDI0NiwgMjcsIDMzLCA2LCAKLSAgICAxLCAyMTAsIDUyLCAzMywgNCwgMSwgMjEwLCA1MiwgMzMsIDYsIDEsIDI1MCwgMjA2LCAzMywgNCwgMSwgMjUwLCAyMDYsIAotICAgIDMzLCA2LCAxLCAyNDYsIDI1LCAzMywgNCwgMSwgMjQ2LCAyNSwgMzMsIDYsIDEsIDIxNywgMjMsIDIsIDIzMCwgMjI0LCAKLSAgICAxMDMsIDMzLCA0LCAxLCAyMTcsIDIzLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjE1LCA3OCwgMzMsIDQsIDEsIAotICAgIDIxNSwgNzgsIDMzLCA2LCAxLCAyMTUsIDE2MCwgMzMsIDQsIDEsIDIxNSwgMTYwLCAzMywgNiwgMSwgMjE1LCAxNjQsIDMzLCAKLSAgICA0LCAxLCAyMTUsIDE2NCwgMzMsIDYsIDEsIDIxNywgMjgsIDMzLCA0LCAxLCAyMTcsIDI4LCAzMywgNiwgMSwgMjQwLCAxOTgsIAotICAgIDMzLCA0LCAxLCAyNDAsIDE5OCwgMzMsIDYsIDEsIDIxOSwgMjA2LCAzMywgNCwgMSwgMjE5LCAyMDYsIDM4LCAzMywgMSwgCi0gICAgMjM1LCAxODMsIDc1LCAyMCwgMSwgNjEsIDIwLCAxLCAxNzYsIDIwLCAxLCA3MCwgMjAsIDEsIDIzMywgMjE3LCAyMCwgMSwgCi0gICAgMjQ1LCAyMDksIDIwLCAxLCAyMjMsIDEwOCwgMjAsIDEsIDIxNywgODYsIDIwLCAxLCA3NiwgMjAsIDEsIDIyNywgMTQ4LCAKLSAgICAyMCwgMSwgNzMsIDIwLCAxLCAyMzMsIDEzNSwgMjAsIDEsIDE5MCwgMjAsIDEsIDIyMiwgMjM5LCAyMCwgMSwgMjIzLCAyOSwgCi0gICAgMjAsIDEsIDIzMywgNDksIDIwLCAxLCAyMzEsIDc5LCAyMCwgMSwgMjE3LCAxMDEsIDIwLCAxLCAyMjksIDE0NiwgMjAsIDEsIAotICAgIDIyOCwgMTgzLCAyMCwgMSwgMTkzLCAyMCwgMSwgMjE4LCA0LCAyMCwgMSwgMjMwLCAxMDIsIDIwLCAxLCAyMjAsIDI3LCAyMCwgCi0gICAgMSwgMjE5LCAxOTEsIDIwLCAxLCAyMjAsIDM3LCAyMCwgMSwgMjIwLCAxMjMsIDIwLCAxLCAyMzMsIDE1NSwgMjAsIDEsIAotICAgIDIzNCwgMTU2LCAyMCwgMSwgMjI3LCAyMDksIDIwLCAxLCAyMjcsIDIzNywgMjAsIDEsIDIyOCwgMTU0LCAyMCwgMSwgMjEwLCAKLSAgICAyMjYsIDIwLCAxLCAyMTksIDIyNSwgMjAsIDEsIDIxMCwgMTg3LCAyMCwgMSwgMTkxLCAyMCwgMSwgMjI4LCA5LCAyMCwgMSwgCi0gICAgMjM0LCAxNDIsIDIwLCAxLCAyMjUsIDE1MSwgMjAsIDEsIDIyOCwgMTc2LCAyMCwgMSwgMjI3LCAyNDYsIDIwLCAxLCAyMjQsIAotICAgIDE0NCwgMjAsIDEsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAyMTEsIDIwLCAxLCAyNDQsIDE0NywgMjAsIDEsIDIyMiwgMTQwLCAKLSAgICAyMCwgMSwgMjMyLCA5OCwgMjAsIDEsIDIzMCwgMjMwLCAyMCwgMSwgMjI4LCAyMzMsIDIwLCAxLCAyMjMsIDUxLCAyMCwgMSwgCi0gICAgMjIzLCAxNzEsIDIwLCAxLCAyMzQsIDE2NSwgMjAsIDEsIDIyOSwgNywgMjAsIDEsIDIyOSwgNTYsIDIwLCAxLCAyMjksIDc3LCAKLSAgICAyMCwgMSwgMjIwLCA3LCAyMCwgMSwgMjI0LCAxNDcsIDIwLCAxLCAyNDMsIDIzNCwgMjAsIDEsIDI0NCwgMzcsIDIwLCAxLCAKLSAgICAyMTIsIDY1LCAyMCwgMSwgMTk3LCAyMCwgMSwgMjMyLCAyNDEsIDIwLCAxLCAyMjUsIDEwOCwgMjAsIDEsIDIzMiwgMTE5LCAKLSAgICAyMCwgMSwgMjM0LCAyOCwgMjAsIDEsIDIzMSwgMTE0LCAyMCwgMSwgMjIzLCA4MywgMjAsIDEsIDIzMSwgNTgsIDIwLCAxLCAKLSAgICAxODQsIDIwLCAxLCAyMTYsIDExNywgMjAsIDEsIDIzNCwgOTIsIDIwLCAxLCAyMzAsIDE2MSwgMjAsIDEsIDIzMSwgMTIyLCAKLSAgICAyMCwgMSwgMjE2LCAyMzAsIDIwLCAxLCAyMzMsIDI1MSwgMjAsIDEsIDIxNiwgMjQ3LCAyMCwgMSwgMjI3LCAyMzgsIDIwLCAKLSAgICAxLCAyMjEsIDI1MSwgMjAsIDEsIDI0NCwgMTkyLCAyMCwgMSwgMjMzLCAyNTMsIDIwLCAxLCAyMzQsIDI0LCAyMCwgMzgsIAotICAgIDE2NCwgMjM0LCA1LCAyMCwgMzgsIDE2NCwgMjE1LCAxMTAsIDIwLCAyMjgsIDE4MiwgMjAsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgMjAsIDI0OSwgMjI2LCAyMCwgMjQ5LCAyMTksIDIwLCAyMjAsIDE1MCwgMjAsIDIyNCwgMTMsIDc4LCA1OCwgMSwgMjUwLCAKLSAgICA5NiwgMTM4LCAyMTAsIDI1NCwgMjI1LCA2MSwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjExLCA3MCwgMjI1LCA2MSwgNTgsIDEsIAotICAgIDI1MCwgOTYsIDEzOCwgMjEwLCAyNTQsIDIyMCwgODQsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMSwgNzAsIDIyMCwgODQsIAotICAgIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjQsIDMwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTEsIDcwLCAKLSAgICAyMjQsIDMwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTAsIDI1NCwgMjIyLCAxNDAsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIAotICAgIDIxMSwgNzAsIDIyMiwgMTQwLCA1OCwgMSwgMjQ1LCAyMCwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIAotICAgIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDExOCwgCi0gICAgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyNDYsIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDIwLCAyNDYsIDExOCwgCi0gICAgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgCi0gICAgMjI1LCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjAsIDIzMywgCi0gICAgMzksIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjI1LCAyMzMsIDM5LCAKLSAgICAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyMzMsIDM5LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDU5LCA2NywgMTMwLCA1OCwgMSwgNTksIDIxOSwgOTUsIDU4LCAxLCA1OSwgMjAzLCAxMzAsIDU4LCAxLCAKLSAgICAyMzIsIDEwOCwgNDQsIDI0OSwgMTYxLCAyNTQsIDEwOSwgNTgsIDEsIDIyMywgMTU3LCAxMjAsIDc0LCA1OCwgMSwgMjIzLCAKLSAgICAxNTcsIDEyNCwgNzQsIDU4LCAxLCAyMjMsIDE1NywgMjQ1LCAzMSwgNzgsIDU4LCAxLCAyMjMsIDE1NywgMjM1LCAxOTMsIAotICAgIDI0NSwgMzEsIDc4LCA1OCwgMSwgMTIxLCAyMzUsIDE5MywgMjQ1LCAzMSwgNzgsIDU4LCAxLCAyMTgsIDExMSwgMjIsIDEyNSwgCi0gICAgMjE2LCAzMCwgNTgsIDEsIDIxOCwgMTExLCAyMiwgMTIxLCAyMTYsIDMwLCA3LCA2LCAxLCAyNDUsIDE5OSwgMjU0LCAxNzAsIAotICAgIDcsIDQsIDEsIDI0NSwgMTk5LCAyNTQsIDE3MCwgNywgNiwgMSwgMjQ1LCAxOTksIDI1NCwgMTk2LCA3LCA0LCAxLCAyNDUsIAotICAgIDE5OSwgMjU0LCAxOTYsIDcsIDYsIDEsIDI0MSwgMjA3LCA3LCA0LCAxLCAyNDEsIDIwNywgNywgNiwgMSwgMjE1LCA0MCwgNywgCi0gICAgNCwgMSwgMjE1LCA0MCwgNywgNiwgMSwgMjE1LCAyMjksIDcsIDQsIDEsIDIxNSwgMjI5LCA3LCA2LCAxLCAyNDksIDExMCwgCi0gICAgNywgNCwgMSwgMjQ5LCAxMTAsIDcsIDYsIDEsIDI0OSwgMTExLCAyLCAyNDksIDIxOSwgNywgNCwgMSwgMjQ5LCAxMTEsIDIsIAotICAgIDI0OSwgMjE5LCA3LCAxLCA0LCA2LCAyNDUsIDYsIDcsIDEsIDQsIDYsIDIyMiwgOTEsIDcsIDYsIDEsIDI1NSwgNzMsIDcsIAotICAgIDQsIDEsIDI1NSwgNzMsIDcsIDYsIDEsIDI1NCwgNzMsIDcsIDQsIDEsIDI1NCwgNzMsIDcsIDYsIDEsIDI1MywgMTkyLCA3LCAKLSAgICA0LCAxLCAyNTMsIDE5MiwgNywgNiwgMSwgMjUzLCAxNzYsIDcsIDQsIDEsIDI1MywgMTc2LCA3LCA2LCAxLCAyNTMsIDE3NywgCi0gICAgMiwgMjAzLCAxMzAsIDcsIDQsIDEsIDI1MywgMTc3LCAyLCAyMDMsIDEzMCwgNywgNiwgMSwgMjUzLCAxNjcsIDcsIDQsIDEsIAotICAgIDI1MywgMTY3LCA3LCA2LCAxLCAyMjMsIDQ5LCAyNTEsIDY3LCAyLCAyNDcsIDEyMCwgNywgNCwgMSwgMjIzLCA0OSwgMjUxLCAKLSAgICA2NywgMiwgMjQ3LCAxMjAsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCA5MSwgNywgNiwgCi0gICAgMSwgMjM1LCAyNCwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIDEsIAotICAgIDIzNSwgMjQsIDIsIDIxOCwgMTAzLCAyMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyMTgsIDEwMywgCi0gICAgMjIsIDI0NywgMjU1LCA5MSwgNywgNiwgMSwgMjUxLCAxMzUsIDE1NiwgNywgNCwgMSwgMjUxLCAxMzUsIDE1NiwgNywgNiwgCi0gICAgMSwgMjMzLCAxNDksIDIsIDEyNSwgOTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDE5OSwgMjE4LCAxMDMsIDIyNiwgMTIwLCA3LCA0LCAxLCAxNDQsIDIsIDE5OSwgMjE4LCAxMDMsIDIyNiwgMTIwLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDIzMiwgMTIzLCA3LCA0LCAxLCAxNDQsIDIsIDIzMiwgMTIzLCA3LCA2LCAxLCAyMjYsIDE4MywgNywgNCwgCi0gICAgMSwgMjI2LCAxODMsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDQsIDEsIAotICAgIDIyNiwgMTA2LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyNDQsIDUzLCAKLSAgICA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjQ0LCA1MywgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDIxOCwgMjI5LCAyMTcsIDc3LCAKLSAgICA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjE4LCAyMjksIDIxNywgNzcsIDcsIDYsIDEsIDIyNCwgOTcsIDIsIDIxOCwgMTAzLCAKLSAgICAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgMjI0LCA5NywgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCAKLSAgICA2LCAxLCAyMjQsIDk3LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDI0NywgMjU1LCA5MSwgNywgNiwgCi0gICAgMSwgMjIzLCAyMjQsIDIyMiwgMTg2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMjIyLCAxODYsIDcsIDYsIDEsIDIyMiwgMTMwLCAKLSAgICAyMjIsIDE4NiwgNywgNCwgMSwgMjIyLCAxMzAsIDIyMiwgMTg2LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMjQ3LCAyNTUsIAotICAgIDkxLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAxLCAyMTIsIDEwNiwgNywgNCwgMSwgMjEyLCAKLSAgICAxMDYsIDcsIDYsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNCwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA2LCAxLCAKLSAgICAyMTYsIDE1MiwgMiwgOTEsIDcsIDQsIDEsIDIxNiwgMTUyLCAyLCA5MSwgNywgNiwgMSwgMjE2LCAxNTIsIDIsIDIxOCwgCi0gICAgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgMjE2LCAxNTIsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAKLSAgICAzOSwgNywgNiwgMSwgMjEzLCAyNDUsIDcsIDQsIDEsIDIxMywgMjQ1LCA3LCA2LCAxLCAyNDUsIDY1LCA3LCA0LCAxLCAyNDUsIAotICAgIDY1LCA3LCA2LCAxLCAyMzUsIDE3MSwgNywgNCwgMSwgMjM1LCAxNzEsIDcsIDYsIDEsIDI0OSwgMjA3LCA3LCA0LCAxLCAKLSAgICAyNDksIDIwNywgNTgsIDEsIDIxNCwgMTMzLCA3LCA0LCAxLCAyNDYsIDY5LCA3LCA0LCAxLCAyMzIsIDg0LCA3LCA0LCAxLCAKLSAgICAyMzAsIDgwLCA3LCA0LCAxLCAyMjcsIDIwMSwgNywgNCwgMSwgMjIyLCAxMjksIDcsIDEsIDQsIDYsIDIyMiwgMTI5LCA3LCAKLSAgICA0LCAxLCAyMTUsIDEwOCwgNywgNCwgMSwgMjE0LCAxOTcsIDcsIDYsIDEsIDIzNSwgMjEzLCAyNDksIDYwLCA3LCA0LCAxLCAKLSAgICAyMzUsIDIxMywgMjQ5LCA2MCwgNywgNiwgMSwgMjM1LCAyMTMsIDI0NSwgNiwgNywgNCwgMSwgMjM1LCAyMTMsIDI0NSwgNiwgCi0gICAgNywgNiwgMSwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA2LCAxLCAyMTUsIDk0LCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNiwgMSwgMjE1LCA5NCwgMTU2LCA3LCA0LCAxLCAyMTUsIDk0LCAKLSAgICAxNTYsIDcsIDYsIDEsIDIzNSwgMjEzLCAxNTMsIDcsIDQsIDEsIDIzNSwgMjEzLCAxNTMsIDcsIDYsIDEsIDIzNSwgMjEzLCAKLSAgICAyMjIsIDkxLCA3LCA0LCAxLCAyMzUsIDIxMywgMjIyLCA5MSwgNywgNiwgMSwgMjM1LCAyMTMsIDIxNywgMTUyLCA3LCA0LCAKLSAgICAxLCAyMzUsIDIxMywgMjE3LCAxNTIsIDU4LCAxLCAxMjEsIDI1MCwgMzEsIDI1NSwgMTQsIDU4LCAxLCAyNDksIDIyNiwgNTgsIAotICAgIDEsIDIxOSwgMjUxLCAyNDUsIDk4LCA1MCwgNywgNiwgMSwgMjIxLCAyNTUsIDcsIDQsIDEsIDIyMSwgMjU1LCA3LCA2LCAxLCAKLSAgICAyMTUsIDk0LCAyNDIsIDYwLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjIzLCA1NSwgMjQxLCA1MiwgMjIsIDI1MiwgNDEsIDcsIAotICAgIDYsIDEsIDIzMCwgMjYsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDI1MSwgCi0gICAgNjcsIDIsIDEzMCwgNywgNCwgMSwgMjUxLCA2NywgMiwgMTMwLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjI2LCAyNDgsIDkxLCAKLSAgICA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIAotICAgIDQsIDEsIDIzNSwgMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA0LCAKLSAgICAxLCAyMzAsIDI2LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNCwgMSwgCi0gICAgMjIyLCA5MiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAxMDMsIDU4LCAxLCA2LCAyNDIsIDYxLCAyLCAKLSAgICA5MSwgNTgsIDEsIDQsIDI3LCAyMjYsIDIzNCwgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTkzLCA3LCAyNDUsIDEwMywgMSwgCi0gICAgMjIzLCA0OSwgMjQ1LCA2LCA3LCAyNDUsIDEwMywgMSwgMjIzLCA0OSwgMjI2LCAxMDUsIDcsIDI0NSwgMTAzLCAxLCAyMzUsIAotICAgIDE5MywgMTkzLCA3LCAyNDUsIDEwMywgMSwgMjQwLCAxNTQsIDIzMiwgMTI5LCA3LCAyNDUsIDEwMywgMSwgMjU0LCAyMywgCi0gICAgMTkzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDYxLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDczLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDUsIDI0NiwgNDgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzAsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzUsIAotICAgIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzYsIDIxNywgMjMwLCAyMjksIDIxNCwgNSwgMjQxLCAyNTMsIDIxNywgMjMwLCAKLSAgICAyMjksIDIxNCwgMSwgMjM0LCAyOCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzQsIDEwNSwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAyNDIsIDE3NCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDIsIDIyNCwgMjE3LCAyMzAsIDIyOSwgMjE0LCA1LCAKLSAgICAyNTQsIDc1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0OSwgMjM4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI1MCwgODYsIAotICAgIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjM1LCA2OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzUsIDEwOSwgMjE3LCAKLSAgICAyMzAsIDIyOSwgMjE0LCAxLCAyMTUsIDEzMywgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMTUsIDEzOSwgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyNDgsIDEwNSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDgsIDExNCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAxMTEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjE2LCAxNTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ3LCAKLSAgICAxNDUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ4LCA3LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyOCwgNzQsIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMSwgMjI1LCAxNiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjUsIDEyMSwgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyNTEsIDIwNSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNTIsIDEwLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDEsIDIzMCwgMTYxLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyMiwgMjExLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIAotICAgIDIzMiwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyMiwgMTY1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIxOSwgCi0gICAgNTgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQxLCA2OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgNjEsIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDczLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCA3MCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAyNSwgNSwgNzUsIDIxNywgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDIyNiwgMTgzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIAotICAgIDIyNSwgMTIsIDIzMSwgMTU4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDIyNSwgMTIsIDIzMSwgMTU3LCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDIyNSwgMTIsIDIzMSwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDIyNSwgMTIsIDIzMSwgMTU1LCAyMjgsIDU2LCAKLSAgICAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgMjQyLCAyNywgCi0gICAgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTM0LCAyMjQsIDE5LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIAotICAgIDIxOSwgMTE3LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDI0NSwgMTg4LCAyMjgsIDU2LCAyMzUsIDI0MCwgCi0gICAgMjQ0LCAyLCAxMzQsIDIxOSwgMTE2LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjI0LCAyMiwgNzgsIDIyOCwgNTYsIDIzNSwgMjQwLCAKLSAgICAyMjUsIDQwLCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyMiwgMTE4LCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyNCwgMjMsIAotICAgIDc4LCAyMjUsIDE0NCwgMSwgMTc2LCAyMjUsIDE0NCwgMSwgMjM0LCAxMzIsIDIyNSwgMTQ0LCAxLCAyNDMsIDEzNSwgMjI1LCAKLSAgICAxNDQsIDEsIDIyOSwgNzcsIDIyNSwgMTQ0LCAxLCAyNTEsIDMzLCAyMjUsIDE0NCwgMSwgMjUwLCAxNTcsIDIyNSwgMTQ0LCAKLSAgICAxLCAyMzUsIDE0MSwgMjI1LCAxNDQsIDEsIDIyNywgMTY1LCAyMjUsIDE0NCwgMSwgMjE3LCAxMDUsIDIyNSwgMTQ0LCAxLCAKLSAgICAyMTYsIDIwOCwgMjI1LCAxNDQsIDEsIDI0OCwgMjIxLCAyMjUsIDE0NCwgMSwgMTk3LCAyMjUsIDE0NCwgMSwgMTkwLCAyMjUsIAotICAgIDE0NCwgMSwgMjI1LCAxNDcsIDIyNSwgMTQ0LCAxLCAyNTIsIDE5MSwgMjI1LCAxNDQsIDEsIDE4NCwgMjI1LCAxNDQsIDEsIAotICAgIDIxNSwgMTgzLCAyMjUsIDE0NCwgMSwgMjE1LCAxNzUsIDIyNSwgMTQ0LCAxLCAyNDYsIDM4LCAyMjUsIDE0NCwgMSwgMjEyLCAKLSAgICA2NSwgMjI1LCAxNDQsIDEsIDIxMCwgODIsIDIyNSwgMTQ0LCAxLCAyMTAsIDExNiwgMjI1LCAxNDQsIDEsIDQsIDYxLCAyMjUsIAotICAgIDE0NCwgMSwgMTkxLCAyMjUsIDE0NCwgMSwgMjA1LCAyMjUsIDE0NCwgMSwgMjMzLCAxMzUsIDIyNSwgMTQ0LCAxLCAyMjAsIAotICAgIDEwMiwgMjI1LCAxNDQsIDEsIDIwNiwgMjI1LCAxNDQsIDEsIDE2MiwgMjI1LCAxNDQsIDEsIDYxLCAyMjUsIDE0NCwgMSwgCi0gICAgNzMsIDIyNSwgMTQ0LCAxLCA3MCwgMjI1LCAxNDQsIDEsIDc1LCAyMjUsIDE0NCwgMSwgNzYsIDIyNSwgMTQ0LCAxLCAyMjQsIAotICAgIDg4LCAyMjUsIDE0NCwgMSwgMjExLCAxNjUsIDIyNSwgMTQ0LCAxLCAyNDQsIDE5NiwgMjI1LCAxNDQsIDEsIDI0MywgMjksIAotICAgIDIyNSwgMTQ0LCAxLCAyNDUsIDIwOSwgMjI1LCAxNDQsIDIxOCwgNzMsIDEsIDIxMiwgNjUsIDIyNSwgMTQ0LCAyMTgsIDczLCAKLSAgICAxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMTUsIDE1NiwgMjI1LCAxNDQsIDEsIDIxNSwgMTQ0LCAyMjUsIDE0NCwgMSwgMjQ4LCAKLSAgICAxMzUsIDIyNSwgMTQ0LCAxLCAyMjgsIDExMCwgMjI1LCAxNDQsIDEsIDI1NCwgMTQxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMTMsIAotICAgIDEzNCwgMjIwLCAxMDIsIDIyNSwgMTQ0LCAxLCAyMTMsIDEzNSwgMTYyLCAyMjUsIDE0NCwgMSwgMjUzLCAyMjMsIDI0NCwgCi0gICAgMTk2LCAyMjUsIDE0NCwgMjE4LCA3MywgMSwgMjA1LCAyMjUsIDE0NCwgMjE4LCAyNSwgMSwgMjA1LCAyMjUsIDE0NCwgMSwgCi0gICAgMjUwLCAyNTUsIDIyNSwgMTQ0LCAyMTksIDE1NSwgMjQxLCAyMzYsIDc4LCAyMjUsIDE0NCwgNTIsIDI0MSwgMjM2LCA3OCwgCi0gICAgMjI1LCAxNDQsIDE2NCwgMjIwLCA5NSwgMjI1LCAxNDQsIDE2NCwgNTIsIDIyMCwgOTUsIDE3OSwgNSwgMjU0LCA3NSwgMTc5LCAKLSAgICA1LCAyMTMsIDE0NywgMTc5LCAxLCA2MSwgMTc5LCAxLCAyNTUsIDczLCAxNzksIDEsIDczLCAxNzksIDEsIDIzNiwgMzMsIAotICAgIDE3OSwgMSwgNzAsIDE3OSwgMSwgMjE0LCAxMTgsIDE3OSwgMSwgMTQ5LCAxNTMsIDE3OSwgMSwgMTQ5LCAyMjIsIDE4MCwgCi0gICAgMTc5LCAxLCAxNDksIDE1NiwgMTc5LCAxLCAxNDksIDIzMiwgMTg1LCAxNzksIDEsIDc1LCAxNzksIDEsIDI0NSwgMjA5LCAKLSAgICAxNzksIDEsIDI1NCwgMjAxLCAxNzksIDEsIDc2LCAxNzksIDEsIDIyNiwgMTgzLCAxNzksIDEsIDI1MywgMTkyLCAxNzksIDEsIAotICAgIDE3NiwgMTc5LCAxLCAyMzQsIDEzMiwgMTc5LCAxLCAyNDMsIDEzNSwgMTc5LCAxLCAyNDIsIDI0OSwgMTc5LCAxLCAyMjksIAotICAgIDc3LCAxNzksIDEsIDI1MSwgMzMsIDE3OSwgMSwgMjUwLCAxNTcsIDE3OSwgMSwgMjM1LCAxNDEsIDE3OSwgMSwgMjM1LCAKLSAgICAxMTQsIDE3OSwgMSwgMjI3LCAxNjUsIDE3OSwgMSwgMjE1LCAxNTYsIDE3OSwgMSwgMjE1LCAxNDQsIDE3OSwgMSwgMjQ4LCAKLSAgICAxMzUsIDE3OSwgMSwgMjQ4LCAxMTksIDE3OSwgMSwgMjI4LCAxMTAsIDE3OSwgMSwgMjE3LCAxMDUsIDE3OSwgMSwgMjE2LCAKLSAgICAyMDgsIDE3OSwgMSwgMjQ4LCAyMjEsIDE3OSwgMSwgMjQ4LCAyNSwgMTc5LCAxLCAxOTcsIDE3OSwgMSwgMTkwLCAxNzksIDEsIAotICAgIDIyNSwgMTQ3LCAxNzksIDEsIDI1MiwgMTkxLCAxNzksIDEsIDI1MiwgMTgsIDE3OSwgMSwgMTg0LCAxNzksIDEsIDE5MSwgCi0gICAgMTc5LCAxLCAyMDUsIDE3OSwgMSwgMjMzLCAxMzUsIDE3OSwgMSwgMjE0LCAyNywgMTc5LCAxLCAyMjAsIDEwMiwgMTc5LCAxLCAKLSAgICAyMTgsIDIyMywgMTc5LCAxLCAyMDYsIDE3OSwgMSwgMTYyLCAxNzksIDEsIDIzMiwgMTg0LCAxNzksIDExNiwgNSwgMjQyLCAKLSAgICA0NCwgMTc5LCAyNSwgNSwgMjU1LCA3MywgMTc5LCAyNSwgNSwgNzMsIDE3OSwgMjUsIDUsIDIzNiwgMzMsIDE3OSwgMjUsIDUsIAotICAgIDcwLCAxNzksIDI1LCA1LCAyMTQsIDExOCwgMTc5LCAyNSwgNSwgMTQ5LCAxNTMsIDE3OSwgMjUsIDUsIDE0OSwgMjIyLCAKLSAgICAxODAsIDE3OSwgMjUsIDUsIDE0OSwgMTU2LCAxNzksIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzksIDI1LCA1LCA3NSwgCi0gICAgMTc5LCAyNSwgNSwgMjQ1LCAyMDksIDE3OSwgMjUsIDUsIDI1NCwgMjAxLCAxNzksIDI1LCA1LCA3NiwgMTc5LCAyNSwgNSwgCi0gICAgMjI2LCAxODMsIDE3OSwgMjUsIDUsIDI1MywgMTkyLCAxNzksIDUsIDIxMywgMTUyLCAxNzksIDI0OCwgMTc4LCAxNzksIDUyLCAKLSAgICAyNDgsIDE3OCwgMTc5LCAyMSwgMjEwLCA4NiwgMTc5LCAyMSwgMTEwLCAxNzksIDIxLCAxMDUsIDE3OSwgMjEsIDE1OCwgCi0gICAgMTc5LCAyMSwgMTYxLCAxNzksIDIxLCAxODksIDE3OSwgMjEsIDE5NCwgMTc5LCAyMSwgMTk4LCAxNzksIDIxLCAxOTUsIAotICAgIDE3OSwgMjEsIDIwMCwgMzgsIDg0LCAyMSwgMjEwLCA4NiwgMzgsIDg0LCAyMSwgMTEwLCAzOCwgODQsIDIxLCAxMDUsIDM4LCAKLSAgICA4NCwgMjEsIDE1OCwgMzgsIDg0LCAyMSwgMTYxLCAzOCwgODQsIDIxLCAxODksIDM4LCA4NCwgMjEsIDE5NCwgMzgsIDg0LCAKLSAgICAyMSwgMTk4LCAzOCwgODQsIDIxLCAxOTUsIDM4LCA4NCwgMjEsIDIwMCwgMzgsIDg0LCAxLCA2MSwgMzgsIDg0LCAxLCA3MCwgCi0gICAgMzgsIDg0LCAxLCAxNzYsIDM4LCA4NCwgMSwgMTk3LCAzOCwgODQsIDEsIDE5MCwgMzgsIDg0LCAxLCAyMDUsIDM4LCA4NCwgCi0gICAgMSwgMjEzLCAxNzYsIDM4LCA4NCwgNSwgMjUzLCAxNzUsIDg0LCA1LCAyMTksIDE3LCAyNTAsIDI1NSwgODQsIDUsIDI1MSwgCi0gICAgMCwgMjEzLCAxNTIsIDg0LCA1LCA1MiwgMjUxLCAwLCAyMTMsIDE1MiwgODQsIDUsIDI1MSwgMCwgMTA1LCA4NCwgNSwgMjUxLCAKLSAgICAwLCAxNTgsIDg0LCA1LCAyNTEsIDAsIDI1MywgMTc1LCA4NCwgNSwgMjI0LCAxMjQsIDg0LCAyNDMsIDEwMCwgMjQ0LCAxMDMsIAotICAgIDg0LCAyNTAsIDIzOCwgODQsIDI0MSwgMjMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAyMTAsIDg2LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDIxLCAxMTAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDEwNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgCi0gICAgMTU4LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxNjEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDE4OSwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAyMSwgMTk0LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxOTgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIAotICAgIDE5NSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMjAwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE3NiwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCAyMzQsIDEzMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDMsIDEzNSwgMjM0LCAxODgsIDIzMiwgCi0gICAgMjQyLCAxLCAyMjksIDc3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIwNiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjAsIAotICAgIDEwMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTAsIDExNiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjcsIDE2NSwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTcsIDEwNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDAsIDIyNiwgMjM0LCAKLSAgICAxODgsIDIzMiwgMjQyLCAxLCAxOTcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTkwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDIyNSwgMTQ3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE4NCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDgsIDIyMSwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNTIsIDE5MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMDUsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMSwgMTkxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIzMywgMTM1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDIxMiwgNjUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjE2LCAyMDgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTYyLCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxNCwgMjcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjUxLCAzMywgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCA2MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjYsIDIzNCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAKLSAgICA3MywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjYsIDE4MywgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgMjE0LCAyMTQsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDc1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCA3MCwgMjM0LCAxODgsIDIzMiwgCi0gICAgMjQyLCAyNSwgMjQ1LCAyMDksIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDc2LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEzOCwgCi0gICAgMjI1LCAzMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxMzgsIDI1MSwgMTIsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMTM4LCAyNTEsIAotICAgIDEzLCAyMjUsIDMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDUsIDI0OSwgNzcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgNSwgMjE5LCAKLSAgICAxOTksIDIyMywgOTMsIDEsIDE3NiwgMjIzLCA5MywgMSwgMjQzLCAxMzUsIDIyMywgOTMsIDEsIDIyOSwgNzcsIDIyMywgOTMsIAotICAgIDEsIDIxNywgMTA1LCAyMjMsIDkzLCAxLCAyNDgsIDIyMSwgMjIzLCA5MywgMSwgMTk3LCAyMjMsIDkzLCAxLCAxOTAsIDIyMywgCi0gICAgOTMsIDEsIDI1MiwgMTkxLCAyMjMsIDkzLCAxLCAxODQsIDIyMywgOTMsIDEsIDI1MSwgMzMsIDIyMywgOTMsIDEsIDIzNSwgCi0gICAgMTQxLCAyMjMsIDkzLCAxLCAyMjcsIDE2NSwgMjIzLCA5MywgMSwgMjA2LCAyMjMsIDkzLCAxLCAyMDUsIDIyMywgOTMsIDEsIAotICAgIDIzMywgMTM1LCAyMjMsIDkzLCAxLCAxOTEsIDIyMywgOTMsIDEsIDIxMiwgNjUsIDIyMywgOTMsIDEsIDE2MiwgMjIzLCA5MywgCi0gICAgMSwgMjMxLCAxMjQsIDIyMywgOTMsIDEsIDIyOSwgNTYsIDIyMywgOTMsIDEsIDIyOSwgMTQ4LCAyMjMsIDkzLCAxLCAyMjcsIAotICAgIDEzNSwgMjIzLCA5MywgMSwgNjEsIDIyMywgOTMsIDI1LCA1LCA3MywgMjIzLCA5MywgMjUsIDUsIDcwLCAyMjMsIDkzLCAyNSwgCi0gICAgNSwgNzUsIDIyMywgOTMsIDI1LCA1LCAyNTQsIDIwMSwgMjIzLCA5MywgMjUsIDUsIDc2LCAyMjMsIDkzLCAyNSwgNSwgMjUzLCAKLSAgICAxOTIsIDIyMywgOTMsIDI1LCA1LCAyNDUsIDU1LCAyMjMsIDkzLCAyNSwgNSwgMjQ1LCAyMzMsIDIyMywgOTMsIDExNiwgNSwgCi0gICAgMjI5LCA3OSwgMjIzLCA5MywgMTE2LCA1LCAyMzAsIDI1LCAyMjMsIDkzLCAxMTYsIDUsIDE1MywgMjIzLCA5MywgMTE2LCA1LCAKLSAgICAyNDIsIDYwLCAyMjMsIDkzLCAyMTMsIDE1MiwgMjIzLCA5MywgMjIxLCAxNzMsIDc4LCAyNCwgMTAwLCAyMTYsIDk3LCAyNCwgCi0gICAgMTAwLCAyMTYsIDk2LCAyNCwgMTAwLCAyMTYsIDk0LCAyNCwgMTAwLCAyMTYsIDk5LCAyNCwgMTAwLCAyMjMsIDIxLCAyNCwgCi0gICAgMTAwLCAyMjMsIDUsIDI0LCAxMDAsIDIyMywgMCwgMjQsIDEwMCwgMjIzLCAyLCAyNCwgMTAwLCAyMjMsIDE4LCAyNCwgMTAwLCAKLSAgICAyMjMsIDExLCAyNCwgMTAwLCAyMjMsIDQsIDI0LCAxMDAsIDIyMywgMjMsIDI0LCAxMDAsIDIyMywgNiwgMjQsIDEwMCwgCi0gICAgMjIzLCAyNSwgMjQsIDEwMCwgMjIzLCAyMiwgMjQsIDEwMCwgMjMwLCAyMTMsIDI0LCAxMDAsIDIzMCwgMjA0LCAyNCwgMTAwLCAKLSAgICAyMzAsIDIwNywgMjQsIDEwMCwgMjI1LCA4MCwgMjQsIDEwMCwgMjI1LCA5MSwgMjQsIDEwMCwgMjI1LCA5MiwgMjQsIDEwMCwgCi0gICAgMjE4LCAyMDcsIDI0LCAxMDAsIDIzNiwgNDYsIDI0LCAxMDAsIDIzNiwgNTMsIDI0LCAxMDAsIDIxOCwgMjE4LCAyNCwgMTAwLCAKLSAgICAyMTgsIDIwNSwgMjQsIDEwMCwgMjI1LCAxMzAsIDI0LCAxMDAsIDI0MSwgMTY3LCAyNCwgMTAwLCAyMTgsIDIwMiwgMTU1LCAKLSAgICA1LCAyMjYsIDI3LCAxNTUsIDUsIDI1MCwgMTg3LCAxNTUsIDUsIDIzMywgNjYsIDE1NSwgNSwgMjExLCAyNDMsIDE1NSwgMSwgCi0gICAgNjEsIDE1NSwgMSwgMjQwLCAxNTQsIDIzNCwgMTkxLCAxNTUsIDEsIDczLCAxNTUsIDEsIDIzNiwgMzMsIDE1NSwgMSwgNzAsIAotICAgIDE1NSwgMSwgMjI2LCA5MCwgMjUwLCAxNjMsIDE1NSwgMSwgMjI5LCA3OCwgMjMzLCAyOCwgMTU1LCAxLCAyMjksIDc4LCAKLSAgICAyMzMsIDI5LCAyMjMsIDE0MiwgMTU1LCAxLCA3NSwgMTU1LCAxLCAyNTQsIDIwMSwgMTU1LCAxLCA3NiwgMTU1LCAxLCAxNzYsIAotICAgIDE1NSwgMSwgMjM1LCAxMywgMjIxLCAyMjgsIDE1NSwgMSwgMjM1LCAxMywgMjMwLCA2NiwgMTU1LCAxLCAyNDMsIDEzNSwgCi0gICAgMTU1LCAxLCAyNDMsIDEzNiwgMjMwLCA2NiwgMTU1LCAxLCAyMjksIDc3LCAxNTUsIDEsIDI1MSwgMzMsIDE1NSwgMSwgMjUxLCAKLSAgICAzNCwgMjMwLCA2NiwgMTU1LCAxLCAyMzUsIDE0MSwgMTU1LCAxLCAyMjcsIDE2NiwgMjMwLCA2NiwgMTU1LCAxLCAyMzUsIAotICAgIDE0MiwgMjMxLCAyMDcsIDE1NSwgMSwgMjI3LCAxNjUsIDE1NSwgMSwgMjE1LCAxNTYsIDE1NSwgMSwgMjE1LCAxNTcsIDIzMSwgCi0gICAgMjA3LCAxNTUsIDEsIDI0OCwgMTM1LCAxNTUsIDEsIDI0OCwgMTM2LCAyMzEsIDIwNywgMTU1LCAxLCAyMjksIDIyOSwgMjMwLCAKLSAgICA2NiwgMTU1LCAxLCAyMTcsIDEwNSwgMTU1LCAxLCAyMTcsIDEwNiwgMjMwLCA2NiwgMTU1LCAxLCAyNDgsIDIyMSwgMTU1LCAKLSAgICAxLCAyNDgsIDIyMiwgMjMxLCAyMDcsIDE1NSwgMSwgMTk3LCAxNTUsIDEsIDE5MCwgMTU1LCAxLCAyMjYsIDkwLCAyMzAsIAotICAgIDY2LCAxNTUsIDEsIDI1MiwgMTkxLCAxNTUsIDEsIDI1MiwgMTkyLCAyMzAsIDY2LCAxNTUsIDEsIDE4NCwgMTU1LCAxLCAKLSAgICAxOTEsIDE1NSwgMSwgMjA1LCAxNTUsIDEsIDIyMywgMTg4LCAyNTQsIDIxMCwgMTU1LCAxLCAyMzMsIDEzNSwgMTU1LCAxLCAKLSAgICAyMTIsIDY1LCAxNTUsIDEsIDIyMiwgMzQsIDIzMCwgNjYsIDE1NSwgMSwgMjIyLCAzNCwgMjMxLCAyMDcsIDE1NSwgMSwgCi0gICAgMjA2LCAxNTUsIDEsIDE2MiwgMTU1LCA1LCAyNTAsIDE4OCwgMjE2LCAyNTAsIDE1NSwgMjUsIDUsIDIxNywgNDcsIDE1NSwgCi0gICAgMjUsIDUsIDIxNiwgMzUsIDE1NSwgMjUsIDUsIDIxMSwgMTkwLCAxNTUsIDI1LCA1LCAyMTEsIDE5MSwgMjMxLCA2OSwgMTU1LCAKLSAgICAyNSwgNSwgMjE4LCA0NywgMTU1LCAyNSwgNSwgMjE4LCA0OCwgMjMxLCA1NywgMTU1LCAyNSwgNSwgMjE3LCA2NSwgMTU1LCAKLSAgICAyNSwgNSwgMjQ3LCAxOTQsIDIzMCwgNjUsIDE1NSwgMjUsIDUsIDIyNSwgMTg0LCAxNTUsIDExNiwgNSwgMjM0LCAxNTgsIAotICAgIDE1NSwgMTE2LCA1LCAyMjUsIDE5NiwgMTU1LCAxMTYsIDUsIDI1MSwgMTksIDE1NSwgMjI2LCA0MCwgMTU1LCA0MywgMjIzLCAKLSAgICA2OSwgMTU1LCA0NCwgMjIzLCA2OSwgMTU1LCAyMjYsIDc5LCAyNTQsIDExNywgMTU1LCAyMjYsIDc5LCAyMzEsIDIyNCwgCi0gICAgMTU1LCAyMjYsIDc5LCAyMzIsIDg4LCAxNTUsIDIyNiwgNzksIDIxMSwgMjM4LCAxNTUsIDIyNiwgNzksIDIyNiwgNDEsIAotICAgIDE1NSwgMjI2LCA3OSwgMjMyLCAyMDUsIDE1NSwgMjI2LCA3OSwgMjMyLCA4MiwgMTU1LCAyMjYsIDc5LCAyNTQsIDI0OSwgCi0gICAgMTU1LCAyMjYsIDc5LCAyNTQsIDI1MCwgMjU0LCAyNDksIDE1NSwgMjI2LCA3OSwgMjI1LCA1MSwgMTU1LCAyMTUsIDk0LCAKLSAgICAyMjYsIDc5LCAyMjUsIDUxLCAxNTUsIDIyNiwgMzYsIDE1NSwgMjEsIDIxMCwgODYsIDE1NSwgMjEsIDExMCwgMTU1LCAyMSwgCi0gICAgMTA1LCAxNTUsIDIxLCAxNTgsIDE1NSwgMjEsIDE2MSwgMTU1LCAyMSwgMTg5LCAxNTUsIDIxLCAxOTQsIDE1NSwgMjEsIAotICAgIDE5OCwgMTU1LCAyMSwgMTk1LCAxNTUsIDIxLCAyMDAsIDE1NSwgMjI2LCA3OSwgMjE2LCA2OSwgMjE1LCAxMDYsIDE1NSwgCi0gICAgMjI2LCA3OSwgMjM1LCAxNjcsIDE3MiwgMSwgNjEsIDE3MiwgMSwgNzMsIDE3MiwgMSwgNzAsIDE3MiwgMSwgNzUsIDE3MiwgCi0gICAgMSwgMjU0LCAyMDEsIDE3MiwgMSwgNzYsIDE3MiwgMSwgMTc2LCAxNzIsIDEsIDIzNCwgMTMyLCAxNzIsIDEsIDI0MywgMTM1LCAKLSAgICAxNzIsIDEsIDI0MiwgMjQ5LCAxNzIsIDEsIDIyOCwgMjQ1LCAxNzIsIDEsIDIyOSwgNzcsIDE3MiwgMSwgMjUwLCAxNTcsIAotICAgIDE3MiwgMSwgMjUwLCAxMTIsIDE3MiwgMSwgMjM1LCAxNDEsIDE3MiwgMSwgMjM1LCAxMTQsIDE3MiwgMSwgMjI4LCAyMzUsIAotICAgIDE3MiwgMSwgMjI4LCAyMzcsIDE3MiwgMSwgMjI4LCAyMzYsIDE3MiwgMSwgMjE3LCAxMDUsIDE3MiwgMSwgMjE2LCAyMDgsIAotICAgIDE3MiwgMSwgMjQ4LCAyMjEsIDE3MiwgMSwgMjQ4LCAyNSwgMTcyLCAxLCAyMjcsIDIwNywgMTcyLCAxLCAxOTcsIDE3MiwgMSwgCi0gICAgMjQ4LCAxMzUsIDE3MiwgMSwgMTkwLCAxNzIsIDEsIDIyNCwgMjIwLCAxNzIsIDEsIDIyNSwgMTQ3LCAxNzIsIDEsIDI1MiwgCi0gICAgMTkxLCAxNzIsIDEsIDI1MiwgMTgsIDE3MiwgMSwgMjMwLCA5NSwgMTcyLCAxLCAxODQsIDE3MiwgMSwgMjUyLCAxMTEsIAotICAgIDE3MiwgMSwgMTkxLCAxNzIsIDEsIDIwNSwgMTcyLCAxLCAyMzMsIDEzNSwgMTcyLCAxLCAyMTQsIDI3LCAxNzIsIDEsIDIxOCwgCi0gICAgMjIzLCAxNzIsIDEsIDIwNiwgMTcyLCAxLCAxNjIsIDE3MiwgMjUsIDUsIDI1NSwgNzMsIDE3MiwgMjUsIDUsIDczLCAxNzIsIAotICAgIDI1LCA1LCAyMzYsIDMzLCAxNzIsIDI1LCA1LCAyNDUsIDE5NSwgMTcyLCAyNSwgNSwgNzAsIDE3MiwgMjUsIDUsIDIyNiwgCi0gICAgMjM0LCAxNzIsIDI1LCA1LCA3NiwgMTcyLCAyNSwgNSwgMjU0LCAyMDEsIDE3MiwgMjUsIDUsIDI1MywgMTkyLCAxNzIsIDI1LCAKLSAgICA1LCAyMTQsIDIxNCwgMTcyLCAxMTYsIDUsIDE5MSwgMTcyLCAxMTYsIDUsIDIwNSwgMTcyLCAxMTYsIDUsIDIzMywgMTM1LCAKLSAgICAxNzIsIDExNiwgNSwgMjEyLCA2NSwgMTcyLCAxLCA0MCwgMjM1LCAyMywgMTcyLCAxLCA0MCwgMjQzLCAyMDIsIDE3MiwgMSwgCi0gICAgNDAsIDIyOSwgNzksIDE3MiwgMTE2LCA1LCA0MCwgMjI5LCA3OSwgMTcyLCAxLCA0MCwgMjUwLCAxNTgsIDE3MiwgMSwgNDAsIAotICAgIDIxNywgMTUyLCAxNzIsIDEsIDQwLCAyMzAsIDI1LCAxNzIsIDEsIDQwLCAyMjYsIDEwNSwgMTcyLCAxLCA0MCwgMjExLCAKLSAgICAxMTcsIDE3MiwgMSwgNDAsIDE1MywgMTcyLCAxLCA0MCwgMTU2LCAxNzIsIDEsIDQwLCAyMTgsIDIyNiwgMTcyLCAxMTYsIDUsIAotICAgIDQwLCAxOTMsIDE3MiwgMTE2LCA1LCA0MCwgMjQyLCA2MCwgMTcyLCAyMSwgMjEwLCA4NiwgMTcyLCAyMSwgMTEwLCAxNzIsIAotICAgIDIxLCAxMDUsIDE3MiwgMjEsIDE1OCwgMTcyLCAyMSwgMTYxLCAxNzIsIDIxLCAxODksIDE3MiwgMjEsIDE5NCwgMTcyLCAyMSwgCi0gICAgMTk4LCAxNzIsIDIxLCAxOTUsIDE3MiwgMjEsIDIwMCwgMTcyLCAyMjQsIDE0MSwgMjE4LCAyNTEsIDE3MiwgMjI0LCAxNDEsIAotICAgIDI0OCwgMTc4LCAxNzIsIDIyNCwgMTQxLCA1MiwgMjQ4LCAxNzgsIDE3MiwgMjI0LCAxNDEsIDIxNSwgMjExLCAyNDgsIDE3OCwgCi0gICAgNjgsIDEsIDIzNCwgMTI2LCAyNDMsIDEzNSwgNjgsIDEsIDIzNCwgMTI2LCAyNTEsIDMzLCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDI1MCwgMTU3LCA2OCwgMSwgMjM0LCAxMjYsIDIzNSwgMTQxLCA2OCwgMSwgMjM0LCAxMjYsIDIzNSwgMTE0LCA2OCwgMSwgCi0gICAgMjM0LCAxMjYsIDIyNywgMTY1LCA2OCwgMSwgMjM0LCAxMjYsIDIxNSwgMTU2LCA2OCwgMSwgMjM0LCAxMjYsIDIxNSwgMTQ0LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDI0OCwgMTM1LCA2OCwgMSwgMjM0LCAxMjYsIDI0OCwgMTE5LCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDI0OCwgMjUsIDY4LCAxLCAyMzQsIDEyNiwgMTk3LCA2OCwgMSwgMjM0LCAxMjYsIDIwNiwgNjgsIDEsIDIzNCwgMTI2LCAKLSAgICAxNjIsIDY4LCAxLCAyMzQsIDEyNiwgMjQxLCAxODksIDY4LCAxLCAyMzQsIDEyNiwgMjQ0LCAxOTYsIDY4LCA1OCwgMSwgCi0gICAgMjM0LCAxMjYsIDIyMywgMTA5LCA2OCwgMSwgMjM0LCAxMjYsIDIxMSwgMTY1LCA2OCwgMSwgMjM0LCAxMjYsIDIxMCwgMTE2LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDIwNSwgNjgsIDIzMiwgMTQ1LCAyMzQsIDEyNiwgMjI2LCAyNTMsIDY4LCAyMzIsIDE0NSwgCi0gICAgMjM0LCAxMjYsIDIyNCwgNDMsIDY4LCAyMzIsIDE0NSwgMjM0LCAxMjYsIDI0MSwgMTIxLCA2OCwgMTYsIDI1NCwgMTkwLCAKLSAgICAyNDUsIDMwLCA2OCwgMTYsIDI1NCwgMTkwLCAxMTAsIDY4LCAxNiwgMjU0LCAxOTAsIDEwNSwgNjgsIDEsIDI1NCwgMTkwLCAKLSAgICAyMDUsIDY4LCA1LCAyMjYsIDIzLCAyMzQsIDIxMywgMjE2LCAzMCwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDI4LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIzNCwgMjgsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAxMDUsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAKLSAgICAxMDUsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAxMTQsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMTQsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjQyLCAxNzQsIDM5LCAyMDgsIDEsIDEyNSwgMjQyLCAxNzQsIDM5LCAyMDgsIDEsIDEyMSwgMjI5LCA0LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIyOSwgNCwgMzksIDIwOCwgMSwgMTIxLCAyNDksIDIzOCwgMzksIDIwOCwgMSwgMTI1LCAyNDksIAotICAgIDIzOCwgMzksIDIwOCwgMSwgMTIxLCAyNTAsIDg2LCAzOSwgMjA4LCAxLCAxMjUsIDI1MCwgODYsIDM5LCAyMDgsIDEsIDEyMSwgCi0gICAgMjE5LCA1OCwgMzksIDIwOCwgMSwgMTI1LCAyMTksIDU4LCAzOSwgMjA4LCAxLCAxMjEsIDIyNywgMTM0LCAzOSwgMjA4LCAxLCAKLSAgICAxMjUsIDIyNywgMTM0LCAzOSwgMjA4LCAxLCAxMjEsIDI0NywgMTQ1LCAzOSwgMjA4LCAxLCAxMjUsIDI0NywgMTQ1LCAzOSwgCi0gICAgMjA4LCAxLCAxMjEsIDExMSwgMzksIDIwOCwgMSwgMTI1LCAxMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjE2LCAxNTYsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjE2LCAxNTYsIDM5LCAyMDgsIDEsIDEyMSwgMjI4LCA3NCwgMzksIDIwOCwgMSwgMTI1LCAyMjgsIAotICAgIDc0LCAzOSwgMjA4LCAxLCAxMjEsIDI1MSwgMjA1LCAzOSwgMjA4LCAxLCAxMjUsIDI1MSwgMjA1LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDIyNSwgMTYsIDM5LCAyMDgsIDEsIDEyNSwgMjI1LCAxNiwgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDEyMSwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMjUsIDEyMSwgMzksIDIwOCwgMSwgMTIxLCAyNDQsIDQzLCAzOSwgMjA4LCAxLCAxMjUsIDI0NCwgCi0gICAgNDMsIDM5LCAyMDgsIDEsIDEyMSwgMjMwLCAxNjEsIDM5LCAyMDgsIDEsIDEyNSwgMjMwLCAxNjEsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyNSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyMSwgMjIyLCAyMTEsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjIyLCAyMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjMyLCAxNTYsIDM5LCAyMDgsIDEsIDEyNSwgMjMyLCAKLSAgICAxNTYsIDM5LCAyMDgsIDEsIDEyMSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjQxLCA2OCwgMzksIDIwOCwgMSwgMTI1LCAyNDEsIDY4LCAzOSwgMjA4LCAxLCAxMjEsIDc2LCAzOSwgMjA4LCAxLCAKLSAgICAxMjUsIDc2LCAzOSwgMjA4LCAyMzEsIDIwNCwgMjM0LCAyMzAsIDM5LCAyMDgsIDI1LCAyNTUsIDczLCAzOSwgMjA4LCAyNSwgCi0gICAgNzMsIDM5LCAyMDgsIDI1LCAyMTQsIDIxNCwgMzksIDIwOCwgMjUsIDcwLCAzOSwgMjA4LCAyNSwgNzUsIDM5LCAyMDgsIDI1LCAKLSAgICA3NiwgMzksIDIwOCwgMjMxLCAyMDQsIDIzNCwgMTA4LCAzOSwgMjA4LCAyNSwgMjQwLCAxMTksIDM5LCAyMDgsIDI1LCAyMTQsIAotICAgIDIxMywgMzksIDIwOCwgMjUsIDIxNCwgMjI5LCAzOSwgMjA4LCAyNSwgMjUzLCAxOTAsIDM5LCAyMDgsIDI1LCAyNTMsIDE2NywgCi0gICAgMzksIDIwOCwgMjUsIDI1NCwgMTIzLCAzOSwgMjA4LCAyNSwgMjU0LCAxMzYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIAotICAgIDI0NSwgMTgwLCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAyMjcsIDIwNiwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgMjE2LCAKLSAgICAxNTYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIDIxOSwgNDIsIDM5LCAyMDgsIDE2LCAyMzQsIDEzLCAzOSwgMjA4LCAxNiwgCi0gICAgMjI3LCAyMDYsIDM5LCAyMDgsIDE2LCAyMjEsIDI1MywgMzksIDIwOCwgMTYsIDI0MSwgNjksIDI0MSwgNjQsIDM5LCAyMDgsIAotICAgIDE2LCAyMzQsIDIyLCAyMzQsIDIxLCAxODYsIDE4NSwgMSwgNzUsIDE4NiwgMTg1LCAxLCA3NiwgMTg2LCAxODUsIDEsIDI1MCwgCi0gICAgMTU3LCAxODYsIDE4NSwgMSwgMjI3LCAxNjUsIDE4NiwgMTg1LCAxLCAyMTUsIDE1NiwgMTg2LCAxODUsIDEsIDIxNSwgMTQ0LCAKLSAgICAxODYsIDE4NSwgMSwgMjQ4LCAxMzUsIDE4NiwgMTg1LCAxLCAyNDgsIDExOSwgMTg2LCAxODUsIDEsIDIyOCwgMTEwLCAxODYsIAotICAgIDE4NSwgMSwgMjIwLCAxMDIsIDE4NiwgMTg1LCAxLCAyMTgsIDIyMywgMTg2LCAxODUsIDI1LCA1LCAyMzYsIDMzLCAxODYsIAotICAgIDE4NSwgMjUsIDUsIDIxNCwgMTE4LCAxODYsIDE4NSwgMjUsIDUsIDI1NSwgMzcsIDE4NiwgMTg1LCAyNSwgNSwgMjUzLCAKLSAgICAxOTIsIDE4NiwgMTg1LCAyNSwgNSwgMjU1LCAzMCwgMTg2LCAxODUsIDI1MCwgMTI1LCAxODYsIDE4NSwgMjU0LCAyMDYsIAotICAgIDIzNCwgOTgsIDE4NiwgMTg1LCAyNTQsIDEwMywgMTg2LCAxODUsIDMsIDIyMywgNzQsIDc4LCAxODYsIDE4NSwgMjExLCAKLSAgICAyMDksIDIyMywgNzQsIDc4LCAxODYsIDE4NSwgMjUsIDUsIDIxMywgMTQ3LCAxODYsIDE4NSwgMjEzLCAxNTIsIDI5LCAzLCAKLSAgICAyMTUsIDEzNywgMjksIDMsIDIxNSwgMTQwLCAyOSwgMywgMjE1LCAxNDMsIDI5LCAzLCAyMTUsIDE0MSwgMjksIDMsIDIxNSwgCi0gICAgMTQyLCAyOSwgMywgMjE1LCAxMzksIDI5LCAzLCAyNDgsIDExMywgMjksIDMsIDI0OCwgMTE1LCAyOSwgMywgMjQ4LCAxMTgsIAotICAgIDI5LCAzLCAyNDgsIDExNiwgMjksIDMsIDI0OCwgMTE3LCAyOSwgMywgMjQ4LCAxMTQsIDI5LCAzLCAyNDYsIDI4LCAyOSwgMywgCi0gICAgMjQ2LCAzMSwgMjksIDMsIDI0NiwgMzcsIDI5LCAzLCAyNDYsIDM1LCAyOSwgMywgMjQ2LCAzNiwgMjksIDMsIDI0NiwgMjksIAotICAgIDI5LCAzLCAyNTAsIDIwNCwgMjksIDMsIDI1MCwgMTk4LCAyOSwgMywgMjUwLCAyMDAsIDI5LCAzLCAyNTAsIDIwMywgMjksIAotICAgIDMsIDI1MCwgMjAxLCAyOSwgMywgMjUwLCAyMDIsIDI5LCAzLCAyNTAsIDE5OSwgMjksIDMsIDI1MiwgMTExLCAyOSwgMywgCi0gICAgMjUyLCA5MCwgMjksIDMsIDI1MiwgMTAyLCAyOSwgMywgMjUyLCAxMTAsIDI5LCAzLCAyNTIsIDEwNSwgMjksIDMsIDI1MiwgCi0gICAgMTA2LCAyOSwgMywgMjUyLCA5NCwgMTg2LCAxODUsIDEsIDIzNCwgMTksIDE4NiwgMTg1LCAxLCAyMjEsIDI1MywgMTg2LCAKLSAgICAxODUsIDEsIDIzMywgMTA5LCAxODYsIDE4NSwgMSwgMjMwLCAxNzIsIDE4NiwgMTg1LCAxLCAxOTAsIDE4NiwgMTg1LCAxLCAKLSAgICAxOTcsIDE4NiwgMTg1LCAxLCAyNTAsIDEwMiwgMTg2LCAxODUsIDEsIDIxNiwgOTAsIDE4NiwgMTg1LCAxLCAyMzQsIDEwMSwgCi0gICAgMTg2LCAxODUsIDEsIDIyOCwgMjUwLCAxODYsIDE4NSwgMSwgMjE2LCAxNTAsIDE4NiwgMTg1LCAxLCAyMTIsIDYwLCAxODYsIAotICAgIDE4NSwgMSwgMjExLCA2OSwgMTg2LCAxODUsIDEsIDI0MCwgMjE2LCAxODYsIDE4NSwgMSwgMjE0LCAxOTAsIDE4NiwgMTg1LCAKLSAgICAxLCA3MywgMTg2LCAxODUsIDEsIDIyNSwgMTQyLCAxODYsIDE4NSwgMSwgMjUzLCAyMDIsIDE4NiwgMTg1LCAxLCAyNDIsIAotICAgIDE2NywgMTg2LCAxODUsIDEsIDIzNSwgMTEyLCAxODYsIDE4NSwgMSwgMjIzLCAxNjYsIDE4NiwgMTg1LCAxLCAyNTIsIDE5MSwgCi0gICAgMTg2LCAxODUsIDEsIDIzNSwgMTAwLCAxODYsIDE4NSwgMSwgMjQ3LCAyMTksIDE4NiwgMTg1LCAxLCAyNDIsIDIyMSwgMTg2LCAKLSAgICAxODUsIDEsIDI0OCwgNSwgMTg2LCAxODUsIDEsIDI1MiwgMTYsIDE4NiwgMTg1LCAxLCAyMzQsIDIwLCAyMzIsIDEyOCwgCi0gICAgMTg2LCAxODUsIDEsIDIzMywgMTEwLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDIzMCwgMTczLCAyMzIsIDEyOCwgMTg2LCAKLSAgICAxODUsIDEsIDIyNiwgOTAsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjI5LCAyMjksIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgCi0gICAgMjE2LCA5MSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyMjgsIDI1MSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyNDAsIAotICAgIDE1NCwgMjMyLCAxMjgsIDE4NiwgMTg1LCAyNSwgNSwgMjI2LCAxOTUsIDE4NiwgMTg1LCAyNSwgNSwgMjM1LCAyNTMsIDE4NiwgCi0gICAgMTg1LCAyNSwgNSwgMjU0LCAxMjIsIDE4NiwgMTg1LCAyNSwgNSwgMjExLCAzOCwgMTg2LCAxODUsIDI1LCA1LCAyMTksIDMyLCAKLSAgICAxODYsIDE4NSwgMjUsIDUsIDIxNCwgMTg3LCAxODYsIDE4NSwgMjUsIDUsIDI1MCwgMTIzLCAxODYsIDE4NSwgMjUsIDUsIAotICAgIDIyNywgMTkxLCAxODYsIDE4NSwgMjUwLCAxMjQsIDE4NiwgMTg1LCAyMzIsIDg1LCAyMzUsIDE1MCwgMTg2LCAxODUsIDI1NCwgCi0gICAgNDYsIDIzNSwgMTUwLCAxODYsIDE4NSwgMjEsIDIxMCwgODYsIDE4NiwgMTg1LCAyMSwgMTEwLCAxODYsIDE4NSwgMjEsIAotICAgIDEwNSwgMTg2LCAxODUsIDIxLCAxNTgsIDE4NiwgMTg1LCAyMSwgMTYxLCAxODYsIDE4NSwgMjEsIDE4OSwgMTg2LCAxODUsIAotICAgIDIxLCAxOTQsIDE4NiwgMTg1LCAyMSwgMTk4LCAxODYsIDE4NSwgMjEsIDE5NSwgMTg2LCAxODUsIDIxLCAyMDAsIDI0LCAKLSAgICAxNDMsIDIyNywgNzcsIDI0LCAxNDMsIDIyNywgODIsIDI0LCAxNDMsIDIxMCwgMjQzLCAyNCwgMTQzLCAyMTAsIDI0MiwgMjQsIAotICAgIDE0MywgMjEwLCAyNDEsIDI0LCAxNDMsIDIxNSwgMjMsIDI0LCAxNDMsIDIxNSwgMjYsIDI0LCAxNDMsIDIxMCwgMjEwLCAyNCwgCi0gICAgMTQzLCAyMTAsIDIwNiwgMjQsIDE0MywgMjQ1LCA1NCwgMjQsIDE0MywgMjQ1LCA1MiwgMjQsIDE0MywgMjQ1LCA1MywgMjQsIAotICAgIDE0MywgMjQ1LCA1MCwgMjQsIDE0MywgMjQwLCAxNDQsIDI0LCAxNDMsIDI0MCwgMTQzLCAyNCwgMTQzLCAyNDAsIDE0MSwgCi0gICAgMjQsIDE0MywgMjQwLCAxNDIsIDI0LCAxNDMsIDI0MCwgMTQ3LCAyNCwgMTQzLCAyNDAsIDE0MCwgMjQsIDE0MywgMjQwLCAKLSAgICAxMzksIDI0LCAxNDMsIDI0MCwgMTQ5LCAyNCwgMTQzLCAyNTQsIDMzLCAyNCwgMTQzLCAyNTQsIDMyLCAyNCwgOTAsIDIyOCwgCi0gICAgMjE5LCAyNCwgOTAsIDIyOCwgMjI1LCAyNCwgOTAsIDIxOCwgMjA0LCAyNCwgOTAsIDIxOCwgMjAzLCAyNCwgOTAsIDIxNiwgCi0gICAgOTYsIDI0LCA5MCwgMjE2LCA5NCwgMjQsIDkwLCAyMTYsIDkzLCAyNCwgOTAsIDIxNiwgOTksIDI0LCA5MCwgMjE2LCAxMDAsIAotICAgIDI0LCA5MCwgMjE2LCA5MiwgMjQsIDkwLCAyMjMsIDUsIDI0LCA5MCwgMjIzLCAyMCwgMjQsIDkwLCAyMTgsIDIxMCwgMjQsIAotICAgIDkwLCAyMjMsIDE3LCAyNCwgOTAsIDIyMywgNywgMjQsIDkwLCAyMjMsIDksIDI0LCA5MCwgMjIyLCAyNTIsIDI0LCA5MCwgCi0gICAgMjIyLCAyNTMsIDI0LCA5MCwgMjM0LCAyMTgsIDI0LCA5MCwgMjMwLCAyMTIsIDI0LCA5MCwgMjMwLCAyMDYsIDI0LCA5MCwgCi0gICAgMjE4LCAyMTQsIDI0LCA5MCwgMjMwLCAyMDksIDI0LCA5MCwgMjMwLCAyMTUsIDI0LCA5MCwgMjI1LCA3NiwgMjQsIDkwLCAKLSAgICAyMjUsIDg1LCAyNCwgOTAsIDIyNSwgODksIDI0LCA5MCwgMjE4LCAyMTIsIDI0LCA5MCwgMjI1LCA3OSwgMjQsIDkwLCAyMjUsIAotICAgIDkzLCAyNCwgOTAsIDIyNSwgOTQsIDI0LCA5MCwgMjE5LCAxNDAsIDI0LCA5MCwgMjE5LCAxNDMsIDI0LCA5MCwgMjE4LCAKLSAgICAyMDgsIDI0LCA5MCwgMjE4LCAyMDYsIDI0LCA5MCwgMjE5LCAxMzgsIDI0LCA5MCwgMjE5LCAxNDYsIDI0LCA5MCwgMjE5LCAKLSAgICAxNDcsIDI0LCA5MCwgMjE5LCAxMzIsIDI0LCA5MCwgMjE5LCAxNDUsIDI0LCA5MCwgMjI2LCAzMCwgMjQsIDkwLCAyMjYsIAotICAgIDMxLCAyNCwgOTAsIDIxMSwgMjQsIDI0LCA5MCwgMjExLCAyNSwgMjQsIDkwLCAyNTAsIDQ0LCAyNCwgOTAsIDI1MCwgNDMsIAotICAgIDI0LCA5MCwgMjE4LCAyMTksIDI0LCA5MCwgMjI1LCAxMjgsIDI0LCA5MCwgMjI1LCAxMjcsIDksIDE0LCAyMzgsIDI0LCA5LCAKLSAgICAxNCwgMjM4LCAyMywgOSwgMTQsIDIzOCwgMjIsIDksIDE0LCAyMzgsIDIxLCA5LCAxNCwgMjM4LCAyMCwgOSwgMTQsIDIzOCwgCi0gICAgMTksIDksIDE0LCAyMzgsIDE4LCA5LCAxNCwgMjM4LCAxNywgOSwgMTQsIDIzOCwgMTYsIDksIDE0LCAyMzgsIDE1LCA5LCAKLSAgICAxNCwgMjM4LCAxNCwgOSwgMTQsIDIzOCwgMTMsIDksIDE0LCAyMzgsIDEyLCA5LCAxNCwgMjM4LCAxMSwgOSwgMTQsIDIzOCwgCi0gICAgMTAsIDksIDE0LCAyMzgsIDksIDksIDE0LCAyMzgsIDgsIDksIDE0LCAyMzgsIDcsIDksIDE0LCAyMzgsIDYsIDksIDE0LCAKLSAgICAyMzgsIDUsIDksIDE0LCAyMzgsIDQsIDksIDE0LCAyMzgsIDMsIDksIDE0LCAyMzgsIDIsIDksIDE0LCAyMzgsIDEsIDksIAotICAgIDE0LCAyMzgsIDAsIDksIDE0LCAyMzcsIDI1NSwgOSwgMTQsIDIzNywgMjU0LCA5LCAxNCwgMjM3LCAyNTMsIDksIDE0LCAKLSAgICAyMzcsIDI1MiwgOSwgMTQsIDIzNywgMjUxLCA5LCAxNCwgMjM3LCAyNTAsIDksIDE0LCAyMzcsIDI0OSwgOSwgMTQsIDIzNywgCi0gICAgMjQ4LCA5LCAxNCwgMjM3LCAyNDcsIDksIDE0LCAyMzcsIDI0NiwgOSwgMTQsIDIzNywgMjQ1LCA5LCAxNCwgMjM3LCAyNDQsIAotICAgIDksIDE0LCAyMzcsIDI0MywgOSwgMTQsIDIzNywgMjQyLCA5LCAxNCwgMjM3LCAyNDEsIDksIDE0LCAyMzcsIDI0MCwgOSwgCi0gICAgMTQsIDIzNywgMjM5LCA5LCAxNCwgMjM3LCAyMzgsIDksIDE0LCAyMzcsIDIzNywgOSwgMTQsIDIzNywgMjM2LCA5LCAxNCwgCi0gICAgMjM3LCAyMzUsIDksIDE0LCAyMzcsIDIzNCwgOSwgMTQsIDIzNywgMjMzLCA5LCAxNCwgMjM3LCAyMzIsIDksIDE0LCAyMzcsIAotICAgIDIzMSwgOSwgMTQsIDIzNywgMjMwLCA5LCAxNCwgMjM3LCAyMjksIDksIDE0LCAyMzcsIDIyOCwgOSwgMTQsIDIzNywgMjI3LCAKLSAgICA5LCAxNCwgMjM3LCAyMjYsIDksIDE0LCAyMzcsIDIyNSwgOSwgMTQsIDIzNywgMjI0LCA5LCAxNCwgMjM3LCAyMjMsIDksIAotICAgIDE0LCAyMzcsIDIyMiwgOSwgMTQsIDIzNywgMjIxLCA5LCAxNCwgMjM3LCAyMjAsIDksIDE0LCAyMzcsIDIxOSwgOSwgMTQsIAotICAgIDIzNywgMjE4LCA5LCAxNCwgMjM3LCAyMTcsIDksIDE0LCAyMzcsIDIxNiwgOSwgMTQsIDIzNywgMjE1LCA5LCAxNCwgMjM3LCAKLSAgICAyMTQsIDksIDE0LCAyMzcsIDIxMywgOSwgMTQsIDIzNywgMjEyLCA5LCAxNCwgMjM3LCAyMTEsIDksIDE0LCAyMzcsIDIxMCwgCi0gICAgOSwgMTQsIDIzNywgMjA5LCA5LCAxNCwgMjM3LCAyMDgsIDksIDE0LCAyMzcsIDIwNywgOSwgMTQsIDIzNywgMjA2LCA5LCAKLSAgICAxNCwgMjM3LCAyMDUsIDksIDE0LCAyMzcsIDIwNCwgOSwgMTQsIDIzNywgMjAzLCA5LCAxNCwgMjM3LCAyMDIsIDksIDE0LCAKLSAgICAyMzcsIDIwMSwgOSwgMTQsIDIzNywgMjAwLCA5LCAxNCwgMjM3LCAxOTksIDksIDE0LCAyMzcsIDE5OCwgOSwgMTQsIDIzNywgCi0gICAgMTk3LCA5LCAxNCwgMjM3LCAxOTYsIDksIDE0LCAyMzcsIDE5NSwgOSwgMTQsIDIzNywgMTk0LCA5LCAxNCwgMjM3LCAxOTMsIAotICAgIDksIDE0LCAyMzcsIDE5MiwgOSwgMTQsIDIzNywgMTkxLCA5LCAxNCwgMjM3LCAxOTAsIDksIDE0LCAyMzcsIDE4OSwgOSwgCi0gICAgMTQsIDIzNywgMTg4LCA5LCAxNCwgMjM3LCAxODcsIDksIDE0LCAyMzcsIDE4NiwgOSwgMTQsIDIzNywgMTg1LCA5LCAxNCwgCi0gICAgMjM3LCAxODQsIDksIDE0LCAyMzcsIDE4MywgOSwgMTQsIDIzNywgMTgyLCA5LCAxNCwgMjM3LCAxODEsIDksIDE0LCAyMzcsIAotICAgIDE4MCwgOSwgMTQsIDIzNywgMTc5LCA5LCAxNCwgMjM3LCAxNzgsIDksIDE0LCAyMzcsIDE3NywgOSwgMTQsIDIzNywgMTc2LCAKLSAgICA5LCAxNCwgMjM3LCAxNzUsIDksIDE0LCAyMzcsIDE3NCwgOSwgMTQsIDIzNywgMTczLCA5LCAxNCwgMjM3LCAxNzIsIDksIAotICAgIDE0LCAyMzcsIDE3MSwgOSwgMTQsIDIzNywgMTcwLCA5LCAxNCwgMjM3LCAxNjksIDksIDE0LCAyMzcsIDE2OCwgOSwgMTQsIAotICAgIDIzNywgMTY3LCA5LCAxNCwgMjM3LCAxNjYsIDksIDE0LCAyMzcsIDE2NSwgOSwgMTQsIDIzNywgMTY0LCA5LCAxNCwgMjM3LCAKLSAgICAxNjMsIDksIDE0LCAyMzcsIDE2MiwgOSwgMTQsIDIzNywgMTYxLCA5LCAxNCwgMjM3LCAxNjAsIDksIDE0LCAyMzcsIDE1OSwgCi0gICAgOSwgMTQsIDIzNywgMTU4LCA5LCAxNCwgMjM3LCAxNTcsIDksIDE0LCAyMzcsIDE1NiwgOSwgMTQsIDIzNywgMTU1LCA5LCAKLSAgICAxNCwgMjM3LCAxNTQsIDksIDE0LCAyMzcsIDE1MywgOSwgMTQsIDIzNywgMTUyLCA5LCAxNCwgMjM3LCAxNTEsIDksIDE0LCAKLSAgICAyMzcsIDE1MCwgOSwgMTQsIDIzNywgMTQ5LCA5LCAxNCwgMjM3LCAxNDgsIDksIDE0LCAyMzcsIDE0NywgOSwgMTQsIDIzNywgCi0gICAgMTQ2LCA5LCAxNCwgMjM3LCAxNDUsIDksIDE0LCAyMzcsIDE0NCwgOSwgMTQsIDIzNywgMTQzLCA5LCAxNCwgMjM3LCAxNDIsIAotICAgIDksIDE0LCAyMzcsIDE0MSwgOSwgMTQsIDIzNywgMTQwLCA5LCAxNCwgMjM3LCAxMzksIDksIDE0LCAyMzcsIDEzOCwgOSwgCi0gICAgMTQsIDIzNywgMTM3LCA5LCAxNCwgMjM3LCAxMzYsIDksIDE0LCAyMzcsIDEzNSwgOSwgMTQsIDIzNywgMTM0LCA5LCAxNCwgCi0gICAgMjM3LCAxMzMsIDksIDE0LCAyMzcsIDEzMiwgOSwgMTQsIDIzNywgMTMxLCA5LCAxNCwgMjM3LCAxMzAsIDksIDE0LCAyMzcsIAotICAgIDEyOSwgOSwgMTQsIDIzNywgMTI4LCA5LCAxNCwgMjM3LCAxMjcsIDksIDE0LCAyMzcsIDEyNiwgOSwgMTQsIDIzNywgMTI1LCAKLSAgICA5LCAxNCwgMjM3LCAxMjQsIDksIDE0LCAyMzcsIDEyMywgOSwgMTQsIDIzNywgMTIyLCA5LCAxNCwgMjM3LCAxMjEsIDksIAotICAgIDE0LCAyMzcsIDEyMCwgOSwgMTQsIDIzNywgMTE5LCA5LCAxNCwgMjM3LCAxMTgsIDksIDE0LCAyMzcsIDExNywgOSwgMTQsIAotICAgIDIzNywgMTE2LCA5LCAxNCwgMjM3LCAxMTUsIDksIDE0LCAyMzcsIDExNCwgOSwgMTQsIDIzNywgMTEzLCA5LCAxNCwgMjM3LCAKLSAgICAxMTIsIDksIDE0LCAyMzcsIDExMSwgOSwgMTQsIDIzNywgMTEwLCA5LCAxNCwgMjM3LCAxMDksIDksIDE0LCAyMzcsIDEwOCwgCi0gICAgOSwgMTQsIDIzNywgMTA3LCA5LCAxNCwgMjM3LCAxMDYsIDksIDE0LCAyMzcsIDEwNSwgOSwgMTQsIDIzNywgMTA0LCA5LCAKLSAgICAxNCwgMjM3LCAxMDMsIDksIDE0LCAyMzcsIDEwMiwgOSwgMTQsIDIzNywgMTAxLCA5LCAxNCwgMjM3LCAxMDAsIDksIDE0LCAKLSAgICAyMzcsIDk5LCA5LCAxNCwgMjM3LCA5OCwgOSwgMTQsIDIzNywgOTcsIDksIDE0LCAyMzcsIDk2LCA5LCAxNCwgMjM3LCA5NSwgCi0gICAgOSwgMTQsIDIzNywgOTQsIDksIDE0LCAyMzcsIDkzLCA5LCAxNCwgMjM3LCA5MiwgOSwgMTQsIDIzNywgOTEsIDksIDE0LCAKLSAgICAyMzcsIDkwLCA5LCAxNCwgMjM3LCA4OSwgOSwgMTQsIDIzNywgODgsIDksIDE0LCAyMzcsIDg3LCA5LCAxNCwgMjM3LCA4NiwgCi0gICAgOSwgMTQsIDIzNywgODUsIDksIDE0LCAyMzcsIDg0LCA5LCAxNCwgMjM3LCA4MywgOSwgMTQsIDIzNywgODIsIDksIDE0LCAKLSAgICAyMzcsIDgxLCA5LCAxNCwgMjM3LCA4MCwgOSwgMTQsIDIzNywgNzksIDksIDE0LCAyMzcsIDc4LCA5LCAxNCwgMjM3LCA3NywgCi0gICAgOSwgMTQsIDIzNywgNzYsIDksIDE0LCAyMzcsIDc1LCA5LCAxNCwgMjM3LCA3NCwgOSwgMTQsIDIzNywgNzMsIDksIDE0LCAKLSAgICAyMzcsIDcyLCA5LCAxNCwgMjM3LCA3MSwgOSwgMTQsIDIzNywgNzAsIDksIDE0LCAyMzcsIDY5LCA5LCAxNCwgMjM3LCA2OCwgCi0gICAgOSwgMTQsIDIzNywgNjcsIDksIDE0LCAyMzcsIDY2LCA5LCAxNCwgMjM3LCA2NSwgOSwgMTQsIDIzNywgNjQsIDksIDE0LCAKLSAgICAyMzcsIDYzLCA5LCAxNCwgMjM3LCA2MiwgOSwgMTQsIDIzNywgNjEsIDksIDE0LCAyMzcsIDYwLCA5LCAxNCwgMjM3LCA1OSwgCi0gICAgOSwgMTQsIDIzNywgNTgsIDksIDE0LCAyMzcsIDU3LCA5LCAxNCwgMjM3LCA1NiwgOSwgMTQsIDIzNywgNTUsIDksIDE0LCAKLSAgICAyMzcsIDU0LCA5LCAxNCwgMjM3LCA1MywgOSwgMTQsIDIzNywgNTIsIDksIDE0LCAyMzcsIDUxLCA5LCAxNCwgMjM3LCA1MCwgCi0gICAgOSwgMTQsIDIzNywgNDksIDksIDE0LCAyMzcsIDQ4LCA5LCAxNCwgMjM3LCA0NywgOSwgMTQsIDIzNywgNDYsIDksIDE0LCAKLSAgICAyMzcsIDQ1LCA5LCAxNCwgMjM3LCA0NCwgOSwgMTQsIDIzNywgNDMsIDksIDE0LCAyMzcsIDQyLCA5LCAxNCwgMjM3LCA0MSwgCi0gICAgOSwgMTQsIDIzNywgNDAsIDksIDE0LCAyMzcsIDM5LCA5LCAxNCwgMjM3LCAzOCwgOSwgMTQsIDIzNywgMzcsIDksIDE0LCAKLSAgICAyMzcsIDM2LCA5LCAxNCwgMjM3LCAzNSwgOSwgMTQsIDIzNywgMzQsIDksIDE0LCAyMzcsIDMzLCA5LCAxNCwgMjM3LCAzMiwgCi0gICAgOSwgMTQsIDIzNywgMzEsIDksIDE0LCAyMzcsIDMwLCA5LCAxNCwgMjM3LCAyOSwgOSwgMTQsIDIzNywgMjgsIDksIDE0LCAKLSAgICAyMzcsIDI3LCA5LCAxNCwgMjM3LCAyNiwgOSwgMTQsIDIzNywgMjUsIDksIDE0LCAyMzcsIDI0LCA5LCAxNCwgMjM3LCAyMywgCi0gICAgOSwgMTQsIDIzNywgMjIsIDksIDE0LCAyMzcsIDIxLCA5LCAxNCwgMjM3LCAyMCwgOSwgMTQsIDIzNywgMTksIDksIDE0LCAKLSAgICAyMzcsIDE4LCA5LCAxNCwgMjM3LCAxNywgOSwgMTQsIDIzNywgMTYsIDksIDE0LCAyMzcsIDE1LCA5LCAxNCwgMjM3LCAxNCwgCi0gICAgOSwgMTQsIDIzNywgMTMsIDksIDE0LCAyMzcsIDEyLCA5LCAxNCwgMjM3LCAxMSwgOSwgMTQsIDIzNywgMTAsIDksIDE0LCAKLSAgICAyMzcsIDksIDksIDE0LCAyMzcsIDgsIDksIDE0LCAyMzcsIDcsIDksIDE0LCAyMzcsIDYsIDksIDE0LCAyMzcsIDUsIDksIAotICAgIDE0LCAyMzcsIDQsIDksIDE0LCAyMzcsIDMsIDksIDE0LCAyMzcsIDIsIDksIDE0LCAyMzcsIDEsIDksIDE0LCAyMzcsIDAsIAotICAgIDksIDE0LCAyMzYsIDI1NSwgOSwgMTQsIDIzNiwgMjU0LCA5LCAxNCwgMjM2LCAyNTMsIDksIDE0LCAyMzYsIDI1MiwgOSwgCi0gICAgMTQsIDIzNiwgMjUxLCA5LCAxNCwgMjM2LCAyNTAsIDksIDE0LCAyMzYsIDI0OSwgOSwgMTQsIDIzNiwgMjQ4LCA5LCAxNCwgCi0gICAgMjM2LCAyNDcsIDksIDE0LCAyMzYsIDI0NiwgOSwgMTQsIDIzNiwgMjQ1LCA5LCAxNCwgMjM2LCAyNDQsIDksIDE0LCAyMzYsIAotICAgIDI0MywgOSwgMTQsIDIzNiwgMjQyLCA5LCAxNCwgMjM2LCAyNDEsIDksIDE0LCAyMzYsIDI0MCwgOSwgMTQsIDIzNiwgMjM5LCAKLSAgICA5LCAxNCwgMjM2LCAyMzgsIDksIDE0LCAyMzYsIDIzNywgOSwgMTQsIDIzNiwgMjM2LCA5LCAxNCwgMjM2LCAyMzUsIDksIAotICAgIDE0LCAyMzYsIDIzNCwgOSwgMTQsIDIzNiwgMjMzLCA5LCAxNCwgMjM2LCAyMzIsIDksIDE0LCAyMzYsIDIzMSwgOSwgMTQsIAotICAgIDIzNiwgMjMwLCA5LCAxNCwgMjM2LCAyMjksIDksIDE0LCAyMzYsIDIyOCwgOSwgMTQsIDIzNiwgMjI3LCA5LCAxNCwgMjM2LCAKLSAgICAyMjYsIDksIDE0LCAyMzYsIDIyNSwgOSwgMTQsIDIzNiwgMjI0LCA5LCAxNCwgMjM2LCAyMjMsIDksIDE0LCAyMzYsIDIyMiwgCi0gICAgOSwgMTQsIDIzNiwgMjIxLCA5LCAxNCwgMjM2LCAyMjAsIDksIDE0LCAyMzYsIDIxOSwgOSwgMTQsIDIzNiwgMjE4LCA5LCAKLSAgICAxNCwgMjM2LCAyMTcsIDksIDE0LCAyMzYsIDIxNiwgOSwgMTQsIDIzNiwgMjE1LCA5LCAxNCwgMjM2LCAyMTQsIDksIDE0LCAKLSAgICAyMzYsIDIxMywgOSwgMTQsIDIzNiwgMjEyLCA5LCAxNCwgMjM2LCAyMTEsIDksIDE0LCAyMzYsIDIxMCwgOSwgMTQsIDIzNiwgCi0gICAgMjA5LCA5LCAxNCwgMjM2LCAyMDgsIDksIDE0LCAyMzYsIDIwNywgOSwgMTQsIDIzNiwgMjA2LCA5LCAxNCwgMjM2LCAyMDUsIAotICAgIDksIDE0LCAyMzYsIDIwNCwgOSwgMTQsIDIzNiwgMjAzLCA5LCAxNCwgMjM2LCAyMDIsIDksIDE0LCAyMzYsIDIwMSwgOSwgCi0gICAgMTQsIDIzNiwgMjAwLCA5LCAxNCwgMjM2LCAxOTksIDksIDE0LCAyMzYsIDE5OCwgOSwgMTQsIDIzNiwgMTk3LCA5LCAxNCwgCi0gICAgMjM2LCAxOTYsIDksIDE0LCAyMzYsIDE5NSwgOSwgMTQsIDIzNiwgMTk0LCA5LCAxNCwgMjM2LCAxOTMsIDksIDE0LCAyMzYsIAotICAgIDE5MiwgOSwgMTQsIDIzNiwgMTkxLCA5LCAxNCwgMjM2LCAxOTAsIDksIDE0LCAyMzYsIDE4OSwgOSwgMTQsIDIzNiwgMTg4LCAKLSAgICA5LCAxNCwgMjM2LCAxODcsIDksIDE0LCAyMzYsIDE4NiwgOSwgMTQsIDIzNiwgMTg1LCA5LCAxNCwgMjM2LCAxODQsIDksIAotICAgIDE0LCAyMzYsIDE4MywgOSwgMTQsIDIzNiwgMTgyLCA5LCAxNCwgMjM2LCAxODEsIDksIDE0LCAyMzYsIDE4MCwgOSwgMTQsIAotICAgIDIzNiwgMTc5LCA5LCAxNCwgMjM2LCAxNzgsIDksIDE0LCAyMzYsIDE3NywgOSwgMTQsIDIzNiwgMTc2LCA5LCAxNCwgMjM2LCAKLSAgICAxNzUsIDksIDE0LCAyMzYsIDE3NCwgOSwgMTQsIDIzNiwgMTczLCA5LCAxNCwgMjM2LCAxNzIsIDksIDE0LCAyMzYsIDE3MSwgCi0gICAgOSwgMTQsIDIzNiwgMTcwLCA5LCAxNCwgMjM2LCAxNjksIDksIDE0LCAyMzYsIDE2OCwgOSwgMTQsIDIzNiwgMTY3LCA5LCAKLSAgICAxNCwgMjM2LCAxNjYsIDksIDE0LCAyMzYsIDE2NSwgOSwgMTQsIDIzNiwgMTY0LCA5LCAxNCwgMjM2LCAxNjMsIDksIDE0LCAKLSAgICAyMzYsIDE2MiwgOSwgMTQsIDIzNiwgMTYxLCA5LCAxNCwgMjM2LCAxNjAsIDksIDE0LCAyMzYsIDE1OSwgOSwgMTQsIDIzNiwgCi0gICAgMTU4LCA5LCAxNCwgMjM2LCAxNTcsIDksIDE0LCAyMzYsIDE1NiwgOSwgMTQsIDIzNiwgMTU1LCA5LCAxNCwgMjM2LCAxNTQsIAotICAgIDksIDE0LCAyMzYsIDE1MywgOSwgMTQsIDIzNiwgMTUyLCA5LCAxNCwgMjM2LCAxNTEsIDksIDE0LCAyMzYsIDE1MCwgOSwgCi0gICAgMTQsIDIzNiwgMTQ5LCA5LCAxNCwgMjM2LCAxNDgsIDksIDE0LCAyMzYsIDE0NywgOSwgMTQsIDIzNiwgMTQ2LCA5LCAxNCwgCi0gICAgMjM2LCAxNDUsIDksIDE0LCAyMzYsIDE0NCwgOSwgMTQsIDIzNiwgMTQzLCA5LCAxNCwgMjM2LCAxNDIsIDksIDE0LCAyMzYsIAotICAgIDE0MSwgOSwgMTQsIDIzNiwgMTQwLCA5LCAxNCwgMjM2LCAxMzksIDksIDE0LCAyMzYsIDEzOCwgOSwgMTQsIDIzNiwgMTM3LCAKLSAgICA5LCAxNCwgMjM2LCAxMzYsIDksIDE0LCAyMzYsIDEzNSwgOSwgMTQsIDIzNiwgMTM0LCA5LCAxNCwgMjM2LCAxMzMsIDksIAotICAgIDE0LCAyMzYsIDEzMiwgOSwgMTQsIDIzNiwgMTMxLCA5LCAxNCwgMjM2LCAxMzAsIDksIDE0LCAyMzYsIDEyOSwgOSwgMTQsIAotICAgIDIzNiwgMTI4LCA5LCAxNCwgMjM2LCAxMjcsIDksIDE0LCAyMzYsIDEyNiwgOSwgMTQsIDIzNiwgMTI1LCA5LCAxNCwgMjM2LCAKLSAgICAxMjQsIDksIDE0LCAyMzYsIDEyMywgOSwgMTQsIDIzNiwgMTIyLCA5LCAxNCwgMjM2LCAxMjEsIDksIDE0LCAyMzYsIDEyMCwgCi0gICAgOSwgMTQsIDIzNiwgMTE5LCA5LCAxNCwgMjM2LCAxMTgsIDksIDE0LCAyMzYsIDExNywgOSwgMTQsIDIzNiwgMTE2LCA5LCAKLSAgICAxNCwgMjM2LCAxMTUsIDksIDE0LCAyMzYsIDExNCwgOSwgMTQsIDIzNiwgMTEzLCA5LCAxNCwgMjM2LCAxMTIsIDksIDE0LCAKLSAgICAyMzYsIDExMSwgOSwgMTQsIDIzNiwgMTEwLCA5LCAxNCwgMjM2LCAxMDksIDksIDE0LCAyMzYsIDEwOCwgOSwgMTQsIDIzNiwgCi0gICAgMTA3LCA5LCAxNCwgMjM2LCAxMDYsIDksIDE0LCAyMzYsIDEwNSwgOSwgMTQsIDIzNiwgMTA0LCA5LCAxNCwgMjM2LCAxMDMsIAotICAgIDksIDE0LCAyMzYsIDEwMiwgOSwgMTQsIDIzNiwgMTAxLCA5LCAxNCwgMjM2LCAxMDAsIDksIDE0LCAyMzYsIDk5LCA5LCAxNCwgCi0gICAgMjM2LCA5OCwgOSwgMTQsIDIzNiwgOTcsIDksIDE0LCAyMzYsIDk2LCA5LCAxNCwgMjM2LCA5NSwgOSwgMTQsIDIzNiwgOTQsIAotICAgIDksIDE0LCAyMzYsIDkzLCA5LCAxNCwgMjM2LCA5MiwgOSwgMTQsIDIzNiwgOTEsIDksIDE0LCAyMzYsIDkwLCA5LCAxNCwgCi0gICAgMjM2LCA4OSwgOSwgMTQsIDIzNiwgODgsIDksIDE0LCAyMzYsIDg3LCA5LCAxNCwgMjM2LCA4NiwgOSwgMTQsIDIzNiwgODUsIAotICAgIDksIDE0LCAyMzYsIDg0LCA5LCAxNCwgMjM2LCA4MywgOSwgMTQsIDIzNiwgODIsIDksIDE0LCAyMzYsIDgxLCA5LCAxNCwgCi0gICAgMjM2LCA4MCwgOSwgMTQsIDIzNiwgNzksIDksIDE0LCAyMzYsIDc4LCA5LCAxNCwgMjM2LCA3NywgOSwgMTQsIDIzNiwgNzYsIAotICAgIDksIDE0LCAyMzYsIDc1LCA5LCAxNCwgMjM2LCA3NCwgOSwgMTQsIDIzNiwgNzMsIDksIDE0LCAyMzYsIDcyLCA5LCAxNCwgCi0gICAgMjM2LCA3MSwgOSwgMTQsIDIzNiwgNzAsIDksIDE0LCAyMzYsIDY5LCA5LCAxNCwgMjM2LCA2OCwgOSwgMTQsIDIzNiwgNjcsIAotICAgIDksIDE0LCAyMzYsIDY2LCA5LCAxNCwgMjM2LCA2NSwgNywgNCwgMjcsIDI0NCwgMTI1LCA3LCA0LCAyNywgMjQ0LCAxMjEsIAotICAgIDcsIDQsIDI3LCAyNDQsIDc2LCA3LCA0LCAyNywgMjQ0LCAxMjQsIDcsIDQsIDI3LCAyNDQsIDEyMywgNywgNCwgMjcsIDE5OSwgCi0gICAgMjIyLCA5MiwgMjE3LCAxNTIsIDcsIDQsIDI3LCAyMTgsIDE2OCwgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjI4LCAzOSwgMTUwLCAKLSAgICA0LCAyNywgMjMxLCA1OSwgMjQ1LCAyMTMsIDE1MCwgNCwgMjcsIDIzMSwgNTksIDIzNSwgMjI3LCAxNTAsIDQsIDI3LCAyMTMsIAotICAgIDE4MCwgMjI4LCAzOSwgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjExLCAxNjAsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQxLCAKLSAgICAxNTgsIDk0LCAyMjUsIDExLCAyMzUsIDUwLCAyMTQsIDExLCA5NCwgMjcsIDIxMSwgNiwgMjEwLCAyMzQsIDIxMCwgMjM0LCAKLSAgICAyMjUsIDIzOSwgOTQsIDEsIDI1NCwgMTM5LCAyNTMsIDE2MiwgOTQsIDEsIDIxMSwgMjQ3LCAyNTQsIDE3MCwgOTQsIDEsIAotICAgIDIxMSwgMjQ3LCAyNDgsIDE4OSwgOTQsIDEsIDIxMSwgMjQ3LCAyNDEsIDIzOCwgOTQsIDEsIDIxMSwgMjQ3LCAyMzQsIDI1MCwgCi0gICAgOTQsIDEsIDIxMSwgMjQ3LCAyMzMsIDk0LCA5NCwgMSwgMjExLCAyNDcsIDQwLCAyMzEsIDY1LCA5NCwgMSwgMjExLCAyNDcsIAotICAgIDIyMywgNjcsIDk0LCAxLCAyMTEsIDI0NywgMjE3LCAzOCwgOTQsIDEsIDI1NCwgMTM5LCA5NiwgNTAsIDk0LCAxLCAyMjAsIAotICAgIDIxLCAyLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIDEsIDIyMCwgMjEsIDIsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDEsIAotICAgIDIyMCwgMjEsIDIsIDI0OCwgMjA4LCAyMiwgMjIwLCAyMSwgMjQ3LCAxMjAsIDk0LCAxLCAyMjAsIDIxLCAyLCAyNDgsIDIwOCwgCi0gICAgMjIsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDEsIDExMiwgMiwgMjI1LCAyMzksIDk0LCAxLCAxMTIsIDIsIDIyNCwgNzYsIAotICAgIDk0LCAxLCAxMTIsIDIsIDIzMSwgMTcxLCA5NCwgMSwgMjUyLCAyOSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyNDIsIDIwMiwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyNDgsIDE5MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyNDEsIDIzOSwgMiwgMjMxLCAxNzEsIDk0LCAKLSAgICAxLCAyMTQsIDQsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjEwLCA5OCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTYsIDIzMSwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCA0MCwgMjM0LCAyNTEsIDIsIDI0OCwgMjA3LCAKLSAgICA5NCwgMSwgMjM0LCAyNTEsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjMzLCA5NSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMzEsIAotICAgIDY2LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyNywgMTk1LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyMSwgMjUwLCAyLCAyNDgsIAotICAgIDIwNywgOTQsIDEsIDQwLCAyMjUsIDIyMiwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjUsIDIyMiwgMiwgMjQ4LCAyMDcsIDk0LCAKLSAgICAxLCAyMTUsIDE4MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjQsIDQwLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyMywgNjgsIDIsIAotICAgIDI0OCwgMjA3LCA5NCwgMSwgMjIwLCAyMSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTcsIDM5LCAyLCAyNDgsIDIwNywgOTQsIAotICAgIDEsIDIxNCwgNCwgMiwgMjQxLCA2MSwgOTQsIDEsIDI1MiwgMjksIDIsIDIyMywgMTY5LCA5NCwgMSwgMjM0LCAyNTEsIDIsIAotICAgIDIyMywgMTY5LCA5NCwgMSwgMjI1LCAyMjIsIDIsIDIyMywgMTY5LCA5NCwgMjcsIDExMiwgMjMzLCA5NCwgMTAsIDEsIDExMiwgCi0gICAgMjEyLCA0NywgNTMsIDE3LCAxMCwgMSwgMTEyLCAyMTIsIDQ3LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDY1LCA1MywgMTcsIDEwLCAKLSAgICAxLCAyNTIsIDY1LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDY1LCA2NSwgMTcsIDEwLCAxLCAyNTIsIDY1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjI1LCAyMDYsIDUzLCAxNywgMTAsIDEsIDIyNSwgMjA2LCA0MCwgMTcsIDEwLCAxLCAyMjUsIDIwNiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjI1LCAyMDYsIDE0NywgMTcsIDEwLCAxLCAyNTIsIDUzLCA1MywgMTcsIDEwLCAxLCAyNTIsIDUzLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyNTIsIDUzLCA2NSwgMTcsIDEwLCAxLCAyNTIsIDUzLCAxNDcsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIxNSwgMTQ3LCA0MCwgMTcsIDEwLCAxLCAyMTUsIDE0NywgNjUsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDE0NywgCi0gICAgMTcsIDEwLCAxLCAyMTcsIDYsIDUzLCAxNywgMTAsIDEsIDIxNywgNiwgNDAsIDE3LCAxMCwgMSwgMjE3LCA2LCA2NSwgMTcsIAotICAgIDEwLCAxLCAyMTcsIDYsIDE0NywgMTcsIDEwLCAxLCAyMTUsIDE0OSwgNTMsIDE3LCAxMCwgMSwgMjE1LCAxNDksIDQwLCAxNywgCi0gICAgMTAsIDEsIDIxNSwgMTQ5LCA2NSwgMTcsIDEwLCAxLCAyMTUsIDE0OSwgMTQ3LCAxNywgMTAsIDEsIDIxMywgMjQ5LCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMTMsIDI0OSwgNDAsIDE3LCAxMCwgMSwgMjEzLCAyNDksIDY1LCAxNywgMTAsIDEsIDIxMywgMjQ5LCAKLSAgICAxNDcsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDUzLCAxNywgMTAsIDEsIDIyNSwgMjA0LCA0MCwgMTcsIDEwLCAxLCAyMjUsIAotICAgIDIwNCwgNjUsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDE0NywgMTcsIDEwLCAxLCAyNDYsIDQ0LCA1MywgMTcsIDEwLCAxLCAKLSAgICAyNDYsIDQ0LCA0MCwgMTcsIDEwLCAxLCAyNDYsIDQ0LCA2NSwgMTcsIDEwLCAxLCAyNDYsIDQ0LCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjI3LCAxNTQsIDUzLCAxNywgMTAsIDEsIDIyNywgMTU0LCA0MCwgMTcsIDEwLCAxLCAyMjcsIDE1NCwgNjUsIDE3LCAxMCwgCi0gICAgMSwgMjI3LCAxNTQsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDI3LCA1MywgMTcsIDEwLCAxLCAyMTcsIDI3LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyMTcsIDI3LCA2NSwgMTcsIDEwLCAxLCAyMTcsIDI3LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCAyNSwgNTMsIDE3LCAxMCwgCi0gICAgMSwgMjE3LCAyNSwgNDAsIDE3LCAxMCwgMSwgMjE3LCAyNSwgNjUsIDE3LCAxMCwgMSwgMjE3LCAyNSwgMTQ3LCAxNywgMTAsIAotICAgIDEsIDI0OCwgMTMzLCA1MywgMTcsIDEwLCAxLCAyNDgsIDEzMywgNDAsIDE3LCAxMCwgMSwgMjQ4LCAyMDIsIDUzLCAxNywgCi0gICAgMTAsIDEsIDI0OCwgMjAyLCA0MCwgMTcsIDEwLCAxLCAyNDYsIDcxLCA1MywgMTcsIDEwLCAxLCAyNDYsIDcxLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyNDgsIDEzMSwgNTMsIDE3LCAxMCwgMSwgMjQ4LCAxMzEsIDQwLCAxNywgMTAsIDEsIDIzNSwgMTIxLCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMzUsIDEyMSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAxNzIsIDUzLCAxNywgMTAsIDEsIDIyMiwgMTcyLCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMzQsIDE3NSwgNTMsIDE3LCAxMCwgMSwgMjM0LCAxNzUsIDQwLCAxNywgMTAsIDEsIDIzNCwgCi0gICAgMTc1LCA2NSwgMTcsIDEwLCAxLCAyMzQsIDE3NSwgMTQ3LCAxNywgMTAsIDEsIDI0MywgMTIzLCA1MywgMTcsIDEwLCAxLCAKLSAgICAyNDMsIDEyMywgNDAsIDE3LCAxMCwgMSwgMjQzLCAxMjMsIDY1LCAxNywgMTAsIDEsIDI0MywgMTIzLCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQyLCAxMDIsIDUzLCAxNywgMTAsIDEsIDI0MiwgMTAyLCA0MCwgMTcsIDEwLCAxLCAyNDIsIDEwMiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjQyLCAxMDIsIDE0NywgMTcsIDEwLCAxLCAyMjksIDMsIDUzLCAxNywgMTAsIDEsIDIyOSwgMywgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjI5LCAzLCA2NSwgMTcsIDEwLCAxLCAyMjksIDMsIDE0NywgMTcsIDEwLCAxLCAyMjgsIDYzLCAyNDIsIDIxOSwgCi0gICAgNTMsIDE3LCAxMCwgMSwgMjI4LCA2MywgMjQyLCAyMTksIDQwLCAxNywgMTAsIDEsIDIyMiwgMjE1LCA1MywgMTcsIDEwLCAxLCAKLSAgICAyMjIsIDIxNSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAyMTUsIDY1LCAxNywgMTAsIDEsIDIyMiwgMjE1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQxLCAyMTksIDIsIDc5LCA3NywgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDIsIDc5LCA3NywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDIsIDE3MiwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0NywgMTQyLCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQ3LCAxNDIsIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MiwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0NywgMTQyLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgNzksIDI1MiwgMTMzLCA1MywgMTcsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDQwLCAxNywgMTAsIDEsIDc5LCAyNTIsIDEzMywgCi0gICAgMiwgMjAyLCA3NywgNTMsIDE3LCAxMCwgMSwgNzksIDI1MiwgMTMzLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxNiwgNTksIAotICAgIDQ4LCAxMCwgMTYsIDU5LCA1MSwgMTAsIDE2LCAxMTMsIDE3MCwgNDgsIDEwLCAxNiwgMTEzLCAxNzAsIDUxLCAxMCwgMTYsIAotICAgIDEzNCwgMTcwLCA0OCwgMTAsIDE2LCAxMzQsIDE3MCwgNTEsIDEwLCAxNiwgMTM0LCAxNzAsIDIyNSwgNywgMjQ2LCAxMDQsIAotICAgIDQ4LCAxMCwgMTYsIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCA1MSwgMTAsIDE2LCAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgCi0gICAgMTYsIDI0NCwgMTEsIDE3MCwgNTEsIDEwLCAxNiwgNTIsIDY3LCAyNTIsIDE0MSwgNTEsIDEwLCAxNiwgMTEzLCAxNzAsIAotICAgIDIxMywgMTg5LCA0OCwgMTAsIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDUxLCAxMCwgMTYsIDIyMiwgMjMzLCAxMCwgMTYsIAotICAgIDQsIDIxNywgODEsIDQ4LCAxMCwgMTYsIDQsIDIxNywgODEsIDUxLCAxMCwgMSwgMjI5LCA4MCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjI5LCA4MCwgNDAsIDE3LCAxMCwgMSwgMjI5LCA4MCwgNjUsIDE3LCAxMCwgMSwgMjI5LCA4MCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDEwNCwgNTMsIDE3LCAxMCwgMSwgMTA0LCA0MCwgMTcsIDEwLCAxLCAyMjYsIDIzNSwgNTMsIDE3LCAxMCwgMSwgMjI2LCAKLSAgICAyMzUsIDQwLCAxNywgMTAsIDEsIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAxLCAyMTAsIDIxMywgNDAsIDE3LCAxMCwgMSwgCi0gICAgMTA0LCAyLCAyMDIsIDc3LCA1MywgMTcsIDEwLCAxLCAyMTQsIDAsIDUzLCAxNywgMTAsIDEsIDIxNCwgMCwgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjM0LCA3MywgMjI2LCAyMzUsIDUzLCAxNywgMTAsIDEsIDIzNCwgNzMsIDIyNiwgMjM1LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyMzQsIDczLCAyMTAsIDIxMywgNTMsIDE3LCAxMCwgMSwgMjM0LCA3MywgMjEwLCAyMTMsIDQwLCAxNywgMTAsIDEsIAotICAgIDE2MCwgNTMsIDE3LCAxMCwgMSwgMTYwLCA0MCwgMTcsIDEwLCAxLCAxNjAsIDY1LCAxNywgMTAsIDEsIDE2MCwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIxNCwgMjA3LCAyMzQsIDE4NiwgMjM0LCA3MywgMTEyLCAyMzEsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjE0LCAKLSAgICAyMDcsIDIzNCwgMTg2LCAyMzQsIDczLCAxMTIsIDIzMSwgMTkzLCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTEyLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIAotICAgIDIwMiwgNzcsIDIsIDI1NCwgMjQ0LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDI1NCwgMjQ0LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMiwgMzEsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgCi0gICAgMiwgMjEyLCAzMSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMDQsIDUzLCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMiwgMTA0LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyNiwgMjM1LCA1MywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyNiwgMjM1LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIAotICAgIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMCwgMjEzLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDIwMiwgNzcsIDIsIDE2MCwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNjAsIDQwLCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTYwLCA2NSwgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAKLSAgICAyMDIsIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAyMDIsIAotICAgIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDUzLCAxNywgMTAsIDEsIDI0NCwgMTY4LCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDE0NywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMjIsIAotICAgIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDI1MiwgNTUsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgCi0gICAgNTUsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIAotICAgIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIAotICAgIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDExMiwgMjMxLCAKLSAgICAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDE1MSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDUzLCAxNywgMTAsIAotICAgIDI3LCAxNTEsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDY2LCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMjIsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTUxLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMiwgMjcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgCi0gICAgMjE3LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyNDgsIAotICAgIDIxNywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAKLSAgICA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgMTUxLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDE1MSwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMjM0LCAxMzAsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTEyLCAyMzEsIDE5MywgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDEyMiwgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDIyNCwgODIsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyNCwgODIsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzNCwgMjUxLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjM0LCAKLSAgICAyNTEsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIAotICAgIDI3LCAyMzQsIDI1MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMjMzLCAxMDMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCAKLSAgICAxMjIsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgNjYsIDUzLCAxNywgCi0gICAgMTAsIDI3LCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyOCwgNjMsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgCi0gICAgNjMsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNDEsIAotICAgIDIxOSwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMTUxLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE2LCAyMDMsIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMywgOTYsIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDExMiwgMjMxLCAxOTMsIDIsIDIxOCwgMjMsIDExMiwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDI0OCwgMTgzLCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjM0LCAKLSAgICAyMDQsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDQsIDE2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIAotICAgIDI0OCwgMTg1LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjM0LCAyMDYsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAKLSAgICAyLCAyMTgsIDIzLCAxMTIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgCi0gICAgNzcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMTYsIDE5MywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAyMjgsIDYzLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE2LCAxOTMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAKLSAgICAxMDMsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAKLSAgICA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIyOCwgNjMsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIyOCwgNjMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDExMiwgMjMxLCAxOTMsIDIsIDIxOCwgMjMsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMjMsIDk2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDc5LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMjAyLCA3NywgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDI0MSwgMjE5LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjUyLCA1NSwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMTcsIDgsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMTcsIAotICAgIDgsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAKLSAgICAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgCi0gICAgMTMwLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAKLSAgICAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIAotICAgIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDEyMiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjQ0LCAxNDMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyNDQsIAotICAgIDE0MywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjQsIAotICAgIDgyLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAKLSAgICAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzNCwgCi0gICAgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMjIsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCA2NSwgCi0gICAgMTcsIDEwLCAyNywgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCAKLSAgICAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgMjE4LCAKLSAgICAyMywgMTEyLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgNzksIAotICAgIDIsIDIwMiwgNzcsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjE2LCAxOTMsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIwLCA2MCwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCAxNDcsIAotICAgIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIDE0NywgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjQxLCAyMTksIDE0NywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAKLSAgICAyMjAsIDk0LCAyLCAyNDQsIDE2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDgsIDE4NSwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjAsIDk0LCAyLCAyMzQsIDIwNiwgMTQ3LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTEyLCAyMzEsIDE5MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA1MywgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjAsIAotICAgIDYwLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgCi0gICAgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgCi0gICAgMiwgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjE3LCAKLSAgICA4MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjU0LCAxOTcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjIzLCA5NiwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjIzLCA5NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMTIyLCAxNDcsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDE0NywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIxMCwgMTEyLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAxMTIsIDIsIDI0NCwgMTY0LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMTEyLCAyLCAyNDQsIDE2NCwgNTMsIDE3LCAyMjYsIDE0NiwgNDMsIDIyNiwgMywgMjI2LCAxNDYsIDQ0LCAyMjYsIDMsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDIsIDE1MSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgCi0gICAgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgOCwgMiwgNjYsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxMjIsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAKLSAgICAxNjcsIDIsIDE1MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgMTIyLCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIAotICAgIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgCi0gICAgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyMjIsIDI3LCAyLCAxMjIsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAKLSAgICAyLCAyMzQsIDEzMCwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIyMCwgNjAsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI0OCwgMjE3LCAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAKLSAgICAxMzAsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgODEsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIAotICAgIDY2LCA0MCwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAKLSAgICA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI0NCwgCi0gICAgMTQzLCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDEyMiwgMiwgNjYsIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAKLSAgICAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCAxNTEsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCAxNTEsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIAotICAgIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzMywgCi0gICAgMTAzLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIAotICAgIDI3LCA2NiwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDY2LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNjYsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDIsIDE1MSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCAyLCAyMzQsIDEzMCwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCAKLSAgICAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIAotICAgIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDE1MSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxNTEsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgCi0gICAgMTMwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTIyLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDE1MSwgMiwgCi0gICAgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDY2LCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIAotICAgIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAxNTEsIDIsIAotICAgIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAxMjIsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgCi0gICAgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNTIsIAotICAgIDU1LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNjYsIDIsIDY2LCA2NSwgCi0gICAgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjIsIDQsIDIxNCwgMTI4LCAyNTMsIDIzOCwgMjM0LCA0LCAyMTgsIDEzMCwgCi0gICAgNSwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgNzgsIDIxNCwgMTI4LCAyNTMsIDIzOCwgMjM0LCA0LCAyMTgsIDEzMCwgNSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI1NCwgMTUzLCA1MywgMTcsIDEwLCAyNywgMjU0LCAxODMsIDUzLCAxNywgMTAsIDI3LCAyMzAsIDE1MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIyMiwgNSwgNTMsIDE3LCAxMCwgMjcsIDIyMywgMTQzLCA1MywgMTcsIDEwLCAyNywgMjU0LCAKLSAgICAxNzIsIDUzLCAxNywgMTAsIDI3LCAyMTIsIDQ5LCA1MywgMTcsIDEwLCAyNywgMjIyLCA0LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjIyLCAzLCAyNTQsIDE3MiwgMjEyLCA0OCwgMTAsIDI3LCAyMzUsIDEzNCwgMjIzLCAzNCwgNTAsIDEwLCAyNywgMjUxLCAKLSAgICAyMzAsIDI1NCwgMzksIDI1NCwgNDAsIDQ1LCAyMjEsIDE1NiwgNDUsIDIyMSwgNDUsIDQ1LCAyMjAsIDIzMywgNDUsIDIyMCwgCi0gICAgMjIyLCA0NSwgMjIwLCAyMTEsIDQ1LCAyMjAsIDIwMCwgNDUsIDIyMCwgMTg5LCA0NSwgMjIwLCAxNzgsIDQ1LCAyMjAsIAotICAgIDE2NywgNDUsIDIyMSwgMTU1LCA0NSwgMjIxLCAxNDQsIDQ1LCAyMjEsIDEzMywgNDUsIDIyMSwgMTIyLCA0NSwgMjIxLCAKLSAgICAxMTEsIDQ1LCAyMjEsIDEwMCwgNDUsIDIyMSwgODksIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0OSwgMjE5LCAyMjQsIAotICAgIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAxMDksIDI0OSwgMjE5LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAxMDksIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ5LCAyMjYsIDIyNCwgMTk0LCAyNDQsIDIwLCAKLSAgICAzMSwgNjcsIDIyMCwgMTUwLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDMxLCA3OCwgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgMjI0LCAxMywgNzgsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA3MSwgMjMzLCAyMCwgMTI3LCAKLSAgICAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNzEsIDIzMywgMjAsIDI1MSwgMTU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgCi0gICAgMzEsIDY3LCAyMDMsIDI0NSwgMTYzLCAzOCwgMjcsIDQzLCAyNDIsIDI3LCAzOCwgMjcsIDQ0LCAyNDIsIDI3LCAzOCwgNTIsIAotICAgIDIxNiwgODksIDQzLCAyNDIsIDI3LCAzOCwgNTIsIDIxNiwgODksIDQ0LCAyNDIsIDI3LCAzOCwgMjMxLCAyMzMsIDQzLCAKLSAgICAyNDIsIDI3LCAzOCwgMjMxLCAyMzMsIDQ0LCAyNDIsIDI3LCAzOCwgMjQ5LCAxOTcsIDIzMSwgMjMyLCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCAxMTMsIDU5LCAyMzMsIDU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDE2MCwgCi0gICAgMjQ4LCAxNTYsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0NSwgMTUxLCAyNDgsIDE1NiwgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgMTIxLCAyMzIsIDIxMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjEyLCAzMiwgMTIxLCAyMzIsIAotICAgIDIxMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDIyNiwgMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgCi0gICAgNDQsIDIyNiwgMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDI0OSwgOTksIDEyNywgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgNDQsIDI0OSwgOTksIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQzLCA4NSwgMjMzLCAyMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgODUsIAotICAgIDIzMywgMjAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNTIsIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAKLSAgICAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDMsIDI0OSwgMTYxLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCAyNDksIAotICAgIDE2MSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNzEsIDI0OSwgMTYxLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA3MSwgMjQ5LCAxNjEsIDEyNywgMjIwLCAxMzEsIDI0NywgMTIwLCA3MSwgMjIwLCAxMzEsIAotICAgIDI0NywgMTIwLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNDIsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCAKLSAgICA2NywgNDQsIDQyLCAxMjcsIDI0OCwgMTU1LCAyMjYsIDExOSwgMjUwLCAxNzIsIDIyNiwgMTE5LCAyMTIsIDMyLCAyMjYsIAotICAgIDExOSwgNTIsIDIxMiwgMzIsIDIyNiwgMTE5LCAyNDgsIDE1NSwgMTIxLCAyMzIsIDIxMywgMjUwLCAxNzIsIDEyMSwgMjMyLCAKLSAgICAyMTMsIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTMsIDQsIDI0OSwgMjE5LCA0LCAxMDksIDI0OSwgMjE5LCA0LCAyNDMsIDIyOSwgCi0gICAgMjE4LCAxMjksIDQsIDIyMCwgMTUwLCA0LCAyNDksIDIyNiwgNCwgMjI0LCAxMywgNzgsIDQsIDI0NSwgMzEsIDc4LCA0LCAKLSAgICAyNDUsIDE2MCwgMjQ4LCAxNTYsIDQsIDQzLCAyMjYsIDMsIDQsIDQ0LCAyMjYsIDMsIDQsIDQzLCAyNDksIDk5LCAxMjcsIDQsIAotICAgIDQ0LCAyNDksIDk5LCAxMjcsIDQsIDQzLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNCwgNDQsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0LCA1NCwgNTAsIDQsIDI1NCwgMTI2LCA0LCAyNTMsIDIxNiwgNCwgOTYsIDUwLCA0LCAyNDAsIDE2NywgNCwgMjMzLCAKLSAgICAxNSwgNTAsIDQsIDI0MiwgMTMwLCA1MCwgNCwgMjQ1LCA5OCwgNTAsIDQsIDIyMywgNTAsIDIxOSwgNDYsIDQsIDI0NywgCi0gICAgMTMyLCA1MCwgNCwgMjI1LCAxODIsIDUwLCA0LCAyNDksIDIxNywgMjUzLCAyMDYsIDEwLCAyNDQsIDE2NCwgNTMsIDE3LCAKLSAgICAxMCwgMjE3LCA0NCwgMiwgMjQ0LCAxNjQsIDQ4LCAxMCwgMjQ4LCAxODMsIDUzLCAxNywgMTAsIDIxNywgNzgsIDI0NCwgMSwgCi0gICAgMTAsIDIzNCwgMjA0LCA1MywgMTcsIDEwLCAyNDQsIDE2NiwgNTMsIDE3LCAxMCwgMjQ0LCAxNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNDgsIDE4NSwgNTMsIDE3LCAxMCwgMjQ4LCAxODUsIDE0NywgMTcsIDEwLCAyMzQsIDIwNiwgNTMsIDE3LCAxMCwgMjM0LCAKLSAgICAyMDYsIDE0NywgMTcsIDEwLCAyMjAsIDk0LCA1MywgMTcsIDEwLCAyMjAsIDk0LCAxNDcsIDE3LCAxMCwgMjE4LCA0NiwgNTMsIAotICAgIDE3LCAxMCwgMjE4LCA0NiwgMTQ3LCAxNywgMTAsIDEsIDIwMiwgNTMsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMzEsIDIyOCwgCi0gICAgNzcsIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjMxLCAyMjgsIDc3LCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgNzcsIAotICAgIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA3NywgNTMsIAotICAgIDE3LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDI1MiwgNDMsIDUzLCAKLSAgICAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCAyNTIsIDQzLCA0MCwgMTcsIDEwLCAxLCA3OSwgMiwgMjAyLCA3NywgNTMsIDE3LCAKLSAgICAxMCwgMSwgNzksIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDEsIDc5LCAyLCAyMDIsIDc3LCA2NSwgMTcsIDEwLCAxLCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMTQ3LCAxNywgMTAsIDEsIDExMiwgNTMsIDE3LCAxMCwgMSwgMTEyLCA0MCwgMTcsIDEwLCAxLCAyNTIsIAotICAgIDU1LCA1MywgMTcsIDEwLCAxLCAyNTIsIDU1LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDU1LCA2NSwgMTcsIDEwLCAxLCAyNTIsIAotICAgIDU1LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NSwgNTMsIDE3LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NSwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjE3LCA4LCA1MywgMTcsIDEwLCAxLCAyMTcsIDgsIDQwLCAxNywgMTAsIDEsIDIxNywgOCwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjE3LCA4LCAxNDcsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDUzLCAxNywgMTAsIDEsIDIxNiwgMTkzLCA0MCwgCi0gICAgMTcsIDEwLCAxLCAyMTYsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDE0NywgMTcsIDEwLCAxLCAxNTEsIDUzLCAKLSAgICAxNywgMTAsIDEsIDE1MSwgNDAsIDE3LCAxMCwgMSwgMTUxLCA2NSwgMTcsIDEwLCAxLCAxNTEsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAxMjIsIDUzLCAxNywgMTAsIDEsIDEyMiwgNDAsIDE3LCAxMCwgMSwgMTIyLCA2NSwgMTcsIDEwLCAxLCAxMjIsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMSwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDEsIDIzNCwgMTMwLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMzQsIDEzMCwgMTQ3LCAxNywgMTAsIDEsIDI0OCwgMTk2LCA1MywgMTcsIDEwLCAxLCAyNDgsIDE5NiwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjE2LCAyMDMsIDUzLCAxNywgMTAsIDEsIDIxNiwgMjAzLCA0MCwgMTcsIDEwLCAxLCAyMjMsIDk2LCAKLSAgICA1MywgMTcsIDEwLCAxLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAxLCAyMTAsIDEwOSwgNTMsIDE3LCAxMCwgMSwgMjEwLCAxMDksIAotICAgIDQwLCAxNywgMTAsIDEsIDIyMSwgMTY3LCA1MywgMTcsIDEwLCAxLCAyMjEsIDE2NywgNDAsIDE3LCAxMCwgMSwgMjIxLCAKLSAgICAxNjcsIDY1LCAxNywgMTAsIDEsIDIyMSwgMTY3LCAxNDcsIDE3LCAxMCwgMSwgMjIwLCA2MCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjIwLCA2MCwgNDAsIDE3LCAxMCwgMSwgMjIwLCA2MCwgNjUsIDE3LCAxMCwgMSwgMjIwLCA2MCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjcsIDUzLCAxNywgMTAsIDEsIDIyMiwgMjcsIDQwLCAxNywgMTAsIDEsIDIyMiwgMjcsIDY1LCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjcsIDE0NywgMTcsIDEwLCAxLCAyNDgsIDIxNywgNTMsIDE3LCAxMCwgMSwgMjQ4LCAyMTcsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0OCwgMjE3LCA2NSwgMTcsIDEwLCAxLCAyNDgsIDIxNywgMTQ3LCAxNywgMTAsIDEsIDIxNywgODEsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIxNywgODEsIDQwLCAxNywgMTAsIDEsIDIxNywgODEsIDY1LCAxNywgMTAsIDEsIDIxNywgODEsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMTAsIDExMiwgNTMsIDE3LCAxMCwgMSwgMjEwLCAxMTIsIDQwLCAxNywgMTAsIDEsIDIxMCwgMTEyLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMTAsIDExMiwgMTQ3LCAxNywgMTAsIDEsIDI1NCwgMTk3LCA1MywgMTcsIDEwLCAxLCAyNTQsIDE5NywgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIDY1LCAxNywgMTAsIDEsIDI1NCwgMTk3LCAxNDcsIDE3LCAxMCwgMSwgMjQyLCAKLSAgICAyNDUsIDUzLCAxNywgMTAsIDEsIDI0MiwgMjQ1LCA0MCwgMTcsIDEwLCAxLCAyNDIsIDI0NSwgNjUsIDE3LCAxMCwgMSwgCi0gICAgMjQyLCAyNDUsIDE0NywgMTcsIDEwLCAxLCAyNDQsIDE0MywgNTMsIDE3LCAxMCwgMSwgMjQ0LCAxNDMsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0NCwgMTQzLCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE0MywgMTQ3LCAxNywgMTAsIDEsIDIyNCwgODIsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIyNCwgODIsIDQwLCAxNywgMTAsIDEsIDIyNCwgODIsIDY1LCAxNywgMTAsIDEsIDIyNCwgODIsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMzQsIDI1MSwgNTMsIDE3LCAxMCwgMSwgMjM0LCAyNTEsIDQwLCAxNywgMTAsIDEsIDIzNCwgMjUxLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMzQsIDI1MSwgMTQ3LCAxNywgMTAsIDEsIDIzMywgMTAzLCA1MywgMTcsIDEwLCAxLCAyMzMsIDEwMywgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIDY1LCAxNywgMTAsIDEsIDIzMywgMTAzLCAxNDcsIDE3LCAxMCwgMSwgNjYsIDUzLCAKLSAgICAxNywgMTAsIDEsIDY2LCA0MCwgMTcsIDEwLCAxLCA2NiwgNjUsIDE3LCAxMCwgMSwgNjYsIDE0NywgMTcsIDEwLCAxLCAyMjgsIAotICAgIDYzLCA1MywgMTcsIDEwLCAxLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAxLCAyMjgsIDYzLCA2NSwgMTcsIDEwLCAxLCAyMjgsIAotICAgIDYzLCAxNDcsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCA0MCwgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAxLCAyMTIsIDMxLCA1MywgMTcsIDEwLCAKLSAgICAxLCAyMTIsIDMxLCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAxLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA0MCwgMTcsIDEwLCAxLCA3OSwgNTMsIDE3LCAxMCwgMSwgNzksIDQwLCAxNywgMTAsIDEsIDc5LCA2NSwgMTcsIDEwLCAxLCAKLSAgICA3OSwgMTQ3LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAKLSAgICAyMDIsIDc3LCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIwMiwgMjUyLCA0MywgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIAotICAgIDIwMiwgMjUyLCA0MywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgCi0gICAgMiwgMTEyLCA0MCwgMTcsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDczLCAyMTksIDE4LCAxMjYsIDI0NSwgMzEsIDc4LCAKLSAgICAxMjYsIDIyMywgMjU0LCA3OCwgMTI2LCA1NCwgNTAsIDEyNiwgMjQ3LCAxMzIsIDUwLCAxMjYsIDIyNSwgMTgyLCA1MCwgCi0gICAgMTI2LCAyNTQsIDEyNiwgMTI2LCAyNTQsIDU3LCAxMjYsIDQzLCAyMjYsIDMsIDEyNiwgNDQsIDIyNiwgMywgMTI2LCAyNTMsIAotICAgIDIxNiwgMTI2LCA5NiwgNTAsIDEyNiwgMjQ5LCAyMTksIDEyNiwgMjQwLCAxNjcsIDEyNiwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAxMjYsIDIxOSwgNDYsIDEyNiwgMjEsIDIxMCwgODYsIDEyNiwgMjEsIDExMCwgMTI2LCAyMSwgMTA1LCAxMjYsIDIxLCAxNTgsIAotICAgIDEyNiwgMjEsIDE2MSwgMTI2LCAyMSwgMTg5LCAxMjYsIDIxLCAxOTQsIDEyNiwgMjEsIDE5OCwgMTI2LCAyMSwgMTk1LCAKLSAgICAxMjYsIDIxLCAyMDAsIDEyNiwgMjQ5LCAyMjYsIDEyNiwgMjIwLCAxNTAsIDEyNiwgMjMzLCAxNSwgNTAsIDEyNiwgMjQ1LCAKLSAgICA5OCwgNTAsIDEyNiwgMjQyLCAxMzAsIDUwLCAxMjYsIDIyNCwgMTMsIDc4LCAxMjYsIDI0OSwgMjE3LCAyNTMsIDIwNiwgCi0gICAgMTI2LCA3LCA2LCAxLCA2MSwgMTI2LCA3LCA2LCAxLCAyNTMsIDE1OCwgMTI2LCA3LCA2LCAxLCAyNTEsIDY2LCAxMjYsIDcsIAotICAgIDYsIDEsIDI0OSwgNjAsIDEyNiwgNywgNiwgMSwgNzUsIDEyNiwgNywgNiwgMSwgMjQ1LCA2LCAxMjYsIDcsIDYsIDEsIDI0MywgCi0gICAgMjAyLCAxMjYsIDcsIDYsIDEsIDI0MiwgNjAsIDEyNiwgNywgNiwgMSwgNzMsIDEyNiwgNywgNiwgMSwgMjM1LCAxNDQsIAotICAgIDEyNiwgNywgNiwgMSwgMjM1LCAyMywgMTI2LCA3LCA2LCAxLCAxNTYsIDEyNiwgNywgNiwgMSwgMTkzLCAxMjYsIDcsIDYsIAotICAgIDEsIDIzMCwgMjUsIDEyNiwgNywgNiwgMSwgNzYsIDEyNiwgNywgNiwgMSwgMjI2LCAxMDUsIDEyNiwgNywgNiwgMSwgMjI0LCAKLSAgICA5NiwgMTI2LCA3LCA2LCAxLCAxNTMsIDEyNiwgNywgNiwgMSwgMjIyLCA5MSwgMTI2LCA3LCA2LCAxLCAyMTcsIDE1MiwgCi0gICAgMTI2LCA3LCA2LCAxLCA3MCwgMTI2LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTI2LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjYsIDcsIAotICAgIDYsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDYsIDEsIDIxMSwgMTE3LCAxMjYsIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjYsIDQzLCAKLSAgICA0MiwgMTI3LCAxMjYsIDIyMywgNTAsIDIxOSwgNDYsIDEyNiwgNDQsIDQyLCAxMjcsIDEyNiwgMjUwLCAzMSwgMjU1LCAxNCwgCi0gICAgMTI2LCAxMjEsIDIzMiwgMjEzLCAxMjYsIDI0MiwgMTM3LCAyNTUsIDE0LCAxMjYsIDcsIDQsIDEsIDYxLCAxMjYsIDcsIDQsIAotICAgIDEsIDI1MywgMTU4LCAxMjYsIDcsIDQsIDEsIDI1MSwgNjYsIDEyNiwgNywgNCwgMSwgMjQ5LCA2MCwgMTI2LCA3LCA0LCAxLCAKLSAgICA3NSwgMTI2LCA3LCA0LCAxLCAyNDUsIDYsIDEyNiwgNywgNCwgMSwgMjQzLCAyMDIsIDEyNiwgNywgNCwgMSwgMjQyLCA2MCwgCi0gICAgMTI2LCA3LCA0LCAxLCA3MywgMTI2LCA3LCA0LCAxLCAyMzUsIDE0NCwgMTI2LCA3LCA0LCAxLCAyMzUsIDIzLCAxMjYsIDcsIAotICAgIDQsIDEsIDE1NiwgMTI2LCA3LCA0LCAxLCAxOTMsIDEyNiwgNywgNCwgMSwgMjMwLCAyNSwgMTI2LCA3LCA0LCAxLCA3NiwgCi0gICAgMTI2LCA3LCA0LCAxLCAyMjYsIDEwNSwgMTI2LCA3LCA0LCAxLCAyMjQsIDk2LCAxMjYsIDcsIDQsIDEsIDE1MywgMTI2LCA3LCAKLSAgICA0LCAxLCAyMjIsIDkxLCAxMjYsIDcsIDQsIDEsIDIxNywgMTUyLCAxMjYsIDcsIDQsIDEsIDcwLCAxMjYsIDcsIDQsIDEsIAotICAgIDIxNCwgMTA1LCAxMjYsIDcsIDQsIDEsIDIxMiwgOTgsIDEyNiwgNywgNCwgMSwgMjExLCAxNzgsIDEyNiwgNywgNCwgMSwgCi0gICAgMjExLCAxMTcsIDEyNiwgNywgNCwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIDI0OSwgOTksIDEyNywgMTI2LCA2NywgMjMyLCAKLSAgICAyMTMsIDEyNiwgNDQsIDI0OSwgOTksIDEyNywgMTI2LCAxODIsIDEyNiwgNDMsIDcxLCAyMjYsIDMsIDEyNiwgNDQsIDcxLCAKLSAgICAyMjYsIDMsIDEwMSwgMTA5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDEwMSwgNDMsIDI0OSwgMTYxLCAxMjcsIDEwMSwgNDQsIAotICAgIDI0OSwgMTYxLCAxMjcsIDEwMSwgMTA5LCAyNDksIDIxOSwgMTAxLCA1NiwgMjMwLCAyMjQsIDI0NywgMTIwLCAxMDEsIDU2LCAKLSAgICAxLCAyMTEsIDIyNywgMTAxLCA1NiwgMSwgNCwgNjEsIDEwMSwgNTYsIDEsIDQsIDczLCAxMDEsIDU2LCAxLCA0LCA3MCwgCi0gICAgMTAxLCA1NiwgMSwgNCwgNzUsIDEwMSwgNTYsIDEsIDQsIDc2LCAxMDEsIDU2LCAxLCA0LCAxOTEsIDEwMSwgNTYsIDEsIDQsIAotICAgIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCA0LCAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgNCwgMjE1LCAxMTgsIDEwMSwgMjM0LCAKLSAgICAyMDEsIDIyNCwgMTczLCAyMTksIDMxLCA3OCwgMTAxLCA1NiwgMSwgNjEsIDEwMSwgNTYsIDEsIDczLCAxMDEsIDU2LCAxLCAKLSAgICA3MCwgMTAxLCA1NiwgMSwgNzUsIDEwMSwgNTYsIDEsIDc2LCAxMDEsIDU2LCAxLCAxNzYsIDEwMSwgNTYsIDEsIDIzNCwgOTIsIAotICAgIDEwMSwgNTYsIDEsIDIzMywgMjE3LCAxMDEsIDU2LCAxLCAyMzQsIDE4MiwgMTAxLCA1NiwgMSwgMjM0LCAyOCwgMTAxLCA1NiwgCi0gICAgMSwgMjA2LCAxMDEsIDU2LCAxLCAyMTksIDE5MSwgMTAxLCA1NiwgMSwgMjE4LCA4MywgMTAxLCA1NiwgMSwgMjIxLCAxODEsIAotICAgIDEwMSwgNTYsIDEsIDIxOSwgNTgsIDEwMSwgNTYsIDEsIDIxNywgMTA1LCAxMDEsIDU2LCAxLCAyMTYsIDExNywgMTAxLCA1NiwgCi0gICAgMSwgMjE1LCAxMTgsIDEwMSwgNTYsIDEsIDIxNywgMjIsIDEwMSwgNTYsIDEsIDExMSwgMTAxLCA1NiwgMSwgMTk3LCAxMDEsIAotICAgIDU2LCAxLCAyMjgsIDIzMywgMTAxLCA1NiwgMSwgMjI3LCAyMzcsIDEwMSwgNTYsIDEsIDIyOSwgMTA3LCAxMDEsIDU2LCAxLCAKLSAgICAyMjgsIDc0LCAxMDEsIDU2LCAxLCAxNjIsIDEwMSwgNTYsIDEsIDI0MSwgMTgwLCAxMDEsIDU2LCAxLCAyNDAsIDIyMiwgCi0gICAgMTAxLCA1NiwgMSwgMjQxLCAyMzgsIDEwMSwgNTYsIDEsIDI0MSwgNjgsIDEwMSwgNTYsIDEsIDE4NCwgMTAxLCA1NiwgMSwgCi0gICAgMjMwLCAyMzAsIDEwMSwgNTYsIDEsIDIzMCwgMTAyLCAxMDEsIDU2LCAxLCAyMzEsIDkxLCAxMDEsIDU2LCAxLCAyMzAsIAotICAgIDE2MSwgMTAxLCA1NiwgMSwgMTkxLCAxMDEsIDU2LCAxLCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgMjEwLCAyNDQsIDEwMSwgCi0gICAgNTYsIDEsIDIwNSwgMTAxLCA1NiwgMSwgMjIzLCAzNSwgMTAxLCA1NiwgMSwgMjIyLCAxNDAsIDEwMSwgNTYsIDEsIDIyMywgCi0gICAgMTI4LCAxMDEsIDU2LCAxLCAyMjIsIDIxMSwgMTAxLCA1NiwgMSwgMjEyLCA2NSwgMTAxLCA1NiwgMSwgMjMwLCAyNSwgMTAxLCAKLSAgICA1NiwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCAxMDEsIDU2LCAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDEwMSwgMjQsIDI0NCwgCi0gICAgMTAzLCAxMDEsIDI0LCAxLCAyMzQsIDU4LCAxMDEsIDI0LCAxLCAyMTgsIDIxNSwgMTAxLCAyNCwgMSwgMjM0LCA1MSwgMTAxLCAKLSAgICAyNCwgMSwgMjI4LCAyMjYsIDEwMSwgMjQsIDEsIDIyOCwgMjI0LCAxMDEsIDI0LCAxLCAyMjgsIDIyMywgMTAxLCAyNCwgMSwgCi0gICAgMjE2LCAxMDEsIDEwMSwgMjQsIDEsIDIxOCwgMjA0LCAxMDEsIDI0LCAxLCAyMjMsIDI2LCAxMDEsIDI0LCAxLCAyMjMsIDIxLCAKLSAgICAxMDEsIDI0LCAxLCAyMjMsIDE4LCAxMDEsIDI0LCAxLCAyMjMsIDExLCAxMDEsIDI0LCAxLCAyMjMsIDYsIDEwMSwgMjQsIDEsIAotICAgIDIyMywgMSwgMTAxLCAyNCwgMSwgMjIzLCAxMiwgMTAxLCAyNCwgMSwgMjIzLCAyNCwgMTAxLCAyNCwgMSwgMjMwLCAyMTcsIAotICAgIDEwMSwgMjQsIDEsIDIyNSwgOTUsIDEwMSwgMjQsIDEsIDIxOCwgMjEyLCAxMDEsIDI0LCAxLCAyMjUsIDg0LCAxMDEsIDI0LCAKLSAgICAxLCAyMTksIDE0OCwgMTAxLCAyNCwgMSwgMjE4LCAyMDksIDEwMSwgMjQsIDEsIDIzNiwgNTYsIDEwMSwgMjQsIDEsIDI1MCwgCi0gICAgNDYsIDEwMSwgMjQsIDEsIDIxOCwgMjE5LCAxMDEsIDI0LCAxLCAyNTAsIDEwNiwgMTAxLCAyNCwgMSwgMjM0LCAxMTAsIAotICAgIDEwMSwgMjQsIDEsIDIxNiwgMTczLCAxMDEsIDI0LCAxLCAyMjUsIDEzMSwgMTAxLCAyNCwgMSwgMjQxLCAxNzIsIDEwMSwgCi0gICAgMjQsIDEsIDYxLCAxMDEsIDI0LCAxLCAyNTQsIDI0MywgMTAxLCAyNCwgMSwgMTkxLCAxMDEsIDI0LCAxLCAyMTEsIDkyLCAKLSAgICAxMDEsIDI0LCAxLCAyNDUsIDExNywgMTAxLCAyNCwgMSwgNzUsIDEwMSwgMjQsIDEsIDIxMSwgMzYsIDEwMSwgMjQsIDEsIAotICAgIDIxMSwgNDcsIDEwMSwgMjQsIDEsIDc2LCAxMDEsIDI0LCAxLCAyMTIsIDY1LCAxMDEsIDI0LCAxLCAyMTIsIDYyLCAxMDEsIAotICAgIDI0LCAxLCAyMjYsIDIzNCwgMTAxLCAyNCwgMSwgMjEwLCAyNDQsIDEwMSwgMjQsIDEsIDcwLCAxMDEsIDI0LCAxLCAyMTIsIAotICAgIDExLCAxMDEsIDI0LCAxLCAyMTIsIDIyLCAxMDEsIDI0LCAxLCAyMTEsIDI1MCwgMTAxLCAyNCwgMSwgMjEwLCAyMTIsIDEwMSwgCi0gICAgMjQsIDEsIDI0NSwgNTUsIDEwMSwgMjQsIDEsIDIxMSwgOCwgMTAxLCAyNCwgMSwgNzMsIDEyNiwgMjUwLCAxNzYsIDUwLCAKLSAgICAxMjYsIDIyNCwgMjI4LCA1MCwgMTI2LCAyMjgsIDUyLCA1MCwgMTI2LCAyMzEsIDIzMiwgMTI2LCAyNTEsIDEzNSwgMTMwLCAKLSAgICAxMjYsIDIxMSwgNDAsIDUwLCAxMjYsIDIxMSwgMjE3LCA1MCwgMTAxLCAyNDQsIDE4LCAxOTIsIDIxMywgMjM5LCAxMDEsIAotICAgIDE0MCwgNzQsIDEwMSwgMjE0LCAxNTMsIDc0LCAxMDEsIDk3LCA3NCwgMTAxLCAyNDYsIDEwNCwgNzQsIDEwMSwgODUsIDIxOCwgCi0gICAgMjM0LCAxMDEsIDcxLCAyNTAsIDM1LCAyMzUsIDIwNCwgMjU0LCA5OSwgMjU0LCAxMjAsIDIzNSwgMjA0LCAyNTQsIDk5LCAKLSAgICAyMjAsIDEzNywgMjM1LCAyMDQsIDI1NCwgOTksIDIxNiwgMjM2LCAyMjYsIDI0OSwgMjIzLCA3MiwgMjUwLCAxNDIsIDIyMywgCi0gICAgNzIsIDI1MCwgMTQyLCA2MiwgNTcsIDMsIDI1MywgMTQyLCA2MSwgNjIsIDU3LCAzLCAyNTMsIDExMSwgNzUsIDYyLCA1NywgCi0gICAgMywgMjUzLCAxMjAsIDczLCA2MiwgNTcsIDMsIDI1MywgODgsIDc2LCA2MiwgNTcsIDMsIDI1MywgMTM4LCA3MCwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDE1NywgMjQ4LCAyMjEsIDYyLCA1NywgMywgMjUzLCAxMDQsIDI0OCwgOTAsIDYyLCA1NywgMywgMjUzLCAxNDQsIAotICAgIDI0OCwgMywgNjIsIDU3LCAzLCAyNTMsIDEzNCwgMjQ3LCAxNDUsIDYyLCA1NywgMywgMjUzLCA5OCwgMjQ2LCA3OCwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDkyLCAyMzUsIDE0MSwgNjIsIDU3LCAzLCAyNTMsIDEwMywgMjM1LCAxMjYsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMTMsIDIzNSwgNjgsIDYyLCA1NywgMywgMjUzLCA4NCwgMjM1LCA1MSwgNjIsIDU3LCAzLCAyNTMsIDcyLCAxNzYsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMDUsIDIzNCwgMTgyLCA2MiwgNTcsIDMsIDI1MywgODIsIDIzNCwgOTIsIDYyLCA1NywgMywgMjUzLCAKLSAgICA3OSwgMjM0LCAyOCwgNjIsIDU3LCAzLCAyNTMsIDY4LCAyMzMsIDIxNywgNjIsIDU3LCAzLCAyNTMsIDY5LCAxODQsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMzUsIDIzMSwgOTEsIDYyLCA1NywgMywgMjUzLCA3NiwgMjMwLCAyMzAsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMzMsIDIzMCwgMTYxLCA2MiwgNTcsIDMsIDI1MywgMTI1LCAyMzAsIDEwMiwgNjIsIDU3LCAzLCAyNTMsIDE0NiwgMTk3LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgMTI0LCAyMjksIDEwNywgNjIsIDU3LCAzLCAyNTMsIDExOCwgMjI4LCAyMzMsIDYyLCA1NywgMywgCi0gICAgMjUzLCA5NywgMjI4LCA3NCwgNjIsIDU3LCAzLCAyNTMsIDk0LCAyMjcsIDIzNywgNjIsIDU3LCAzLCAyNTMsIDE1MywgMTkwLCAKLSAgICA2MiwgNTcsIDMsIDI1MywgNzcsIDIyNSwgMjIxLCA2MiwgNTcsIDMsIDI1MywgMTEwLCAyMjUsIDEwOCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDEzNywgMjI1LCAxNiwgNjIsIDU3LCAzLCAyNTMsIDk5LCAyMjQsIDE1MCwgNjIsIDU3LCAzLCAyNTMsIDEzMiwgCi0gICAgMjI0LCA4OCwgNjIsIDU3LCAzLCAyNTMsIDcxLCAyMjQsIDY5LCA2MiwgNTcsIDMsIDI1MywgMTI3LCAyMjQsIDUzLCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTE2LCAyMjQsIDQyLCA2MiwgNTcsIDMsIDI1MywgODksIDIwNSwgNjIsIDU3LCAzLCAyNTMsIDEyMSwgCi0gICAgMjIzLCAxMjgsIDYyLCA1NywgMywgMjUzLCA5NiwgMjIzLCAzNSwgNjIsIDU3LCAzLCAyNTMsIDE1NSwgMjIyLCAyMTEsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMjIsIDIyMiwgMTQwLCA2MiwgNTcsIDMsIDI1MywgMTE3LCAyMDYsIDYyLCA1NywgMywgMjUzLCAxNDAsIAotICAgIDIyMSwgMTgxLCA2MiwgNTcsIDMsIDI1MywgMTA4LCAyMTksIDE5MSwgNjIsIDU3LCAzLCAyNTMsIDEzNiwgMjE5LCA1OCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDkxLCAyMTgsIDgzLCA2MiwgNTcsIDMsIDI1MywgOTAsIDIxNywgMTA1LCA2MiwgNTcsIDMsIAotICAgIDI1MywgMTUxLCAyMTcsIDIyLCA2MiwgNTcsIDMsIDI1MywgMTEyLCAyMTYsIDExNywgNjIsIDU3LCAzLCAyNTMsIDE0OSwgCi0gICAgMTExLCA2MiwgNTcsIDMsIDI1MywgODAsIDIxNSwgMTE4LCA2MiwgNTcsIDMsIDI1MywgOTUsIDIxMiwgNjUsIDYyLCA1NywgCi0gICAgMywgMjUzLCA3NCwgMjEyLCAyMiwgNjIsIDU3LCAzLCAyNTMsIDEwOSwgMjExLCAyNTAsIDYyLCA1NywgMywgMjUzLCAxMDcsIAotICAgIDIxMSwgMjI3LCA2MiwgNTcsIDMsIDI1MywgMTMxLCAyMTAsIDExNiwgNjIsIDU3LCAzLCAyNTMsIDc1LCAyMTAsIDk0LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTI4LCAyMTAsIDIzLCA2MiwgNTcsIDMsIDI1MywgMTIzLCAyNTUsIDc1LCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTA2LCAyNTUsIDc0LCA2MiwgNTcsIDMsIDI1MywgNjUsIDI1MywgMTkyLCA2MiwgNTcsIDMsIDI1MywgNzgsIDI0NiwgNDYsIAotICAgIDYyLCA1NywgMywgMjUzLCA2MSwgMjQ2LCA0NSwgNjIsIDU3LCAzLCAyNTMsIDEwMSwgMjI3LCAxNzQsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxMTksIDIyNCwgMTQ4LCA2MiwgNTcsIDMsIDI1MywgODcsIDIyNCwgMTUyLCA2MiwgNTcsIDMsIDI1MywgNzMsIAotICAgIDIyMywgMTg2LCA2MiwgNTcsIDMsIDI1MywgMTE1LCAyMjMsIDE4NSwgNjIsIDU3LCAzLCAyNTMsIDgxLCAyMjIsIDIxMCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDgzLCAyMTcsIDEwMiwgNjIsIDU3LCAzLCAyNTMsIDYzLCAyMTUsIDc4LCA2MiwgNTcsIDMsIAotICAgIDI1MywgNjAsIDEwNSwgNjIsIDU3LCAxNiwgMjUzLCAxMzAsIDYyLCA1NywgMTYsIDI1MywgMTI5LCA2MiwgNTcsIDE2LCAKLSAgICAyNTMsIDEyNiwgNjIsIDU3LCAxNiwgMjUzLCAxMTQsIDYyLCA1NywgMTYsIDI1MywgMTAyLCA2MiwgNTcsIDE2LCAyNTMsIAotICAgIDEwMCwgNjIsIDU3LCAxNiwgMjUzLCA5MywgNjIsIDU3LCAxNiwgMjUzLCA4NiwgNjIsIDU3LCAxNiwgMjUzLCA4NSwgNjIsIAotICAgIDU3LCAxNiwgMjUzLCA3MCwgNjIsIDU3LCAxNiwgMjUzLCA2NywgNjIsIDU3LCAxNiwgMjUzLCA2NiwgNjIsIDU3LCAxNiwgCi0gICAgMjUzLCA2NCwgNjIsIDU3LCAxNiwgMjUzLCA2MiwgNjIsIDU3LCAxMDYsIDI1MywgNTksIDIzMSwgMTg1LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCA1OCwgMjExLCAyMjEsIDYyLCA1NywgMTA2LCAyNTMsIDU3LCAyNDgsIDc0LCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICA1NiwgMjQ1LCA5NSwgNjIsIDU3LCAxMDYsIDI1MywgNTUsIDIzMSwgMTU5LCA2MiwgNTcsIDEwNiwgMjUzLCA1NCwgMjE4LCAKLSAgICAxNjIsIDYyLCA1NywgMTA2LCAyNTMsIDUzLCAyNDUsIDM3LCA2MiwgNTcsIDEwNiwgMjUzLCA1MiwgMjIzLCAxNTMsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDUxLCAyMjAsIDYyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MCwgMjQxLCAyMzcsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDQ5LCAyMTksIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCA0OCwgMjUxLCAyMDMsIDYyLCA1NywgMTA2LCAyNTMsIDQ3LCAKLSAgICAyNDksIDE0NSwgNjIsIDU3LCAxMDYsIDI1MywgNDYsIDI1MSwgMTE1LCA2MiwgNTcsIDEwNiwgMjUzLCA0NSwgMjEyLCAyLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCA0NCwgMjUyLCAxMzYsIDYyLCA1NywgMTA2LCAyNTMsIDQzLCAyMjYsIDIwNSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgNDIsIDIxOCwgMjU0LCA2MiwgNTcsIDEwNiwgMjUzLCA0MSwgMjQ5LCA2OCwgNjIsIDU3LCAyMzAsIDE0MiwgCi0gICAgMjUzLCA0MCwgMjM0LCAyMjQsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMzksIDIzNCwgMjMyLCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICAzOCwgMjI2LCAyMTgsIDYyLCA1NywgMTA2LCAyNTMsIDM3LCAyMTEsIDIzNiwgNjIsIDU3LCAxMDYsIDI1MywgMzYsIDYyLCAKLSAgICA1NywgMjMwLCAxNDIsIDI1MywgMzUsIDI1NCwgMTcsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMzQsIDIzMSwgNTIsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDMzLCAyNTEsIDEzNCwgNjIsIDU3LCAxMDYsIDI1MywgMzIsIDI0MiwgMTY2LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCAzMSwgNjIsIDU3LCAxMDYsIDI1MywgMzAsIDIxMSwgMjEyLCA2MiwgNTcsIDEwNiwgMjUzLCAyOSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgMjgsIDYyLCA1NywgMTA2LCAyNTMsIDI3LCAyNDAsIDI0OCwgNjIsIDU3LCAxMDYsIDI1MywgMjYsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCAyNCwgNjIsIDU3LCAyMzAsIDE0MiwgMjUzLCAyMiwgMjE1LCAKLSAgICA5MiwgNjIsIDU3LCAxMDYsIDI1MywgMjEsIDYyLCA1NywgMTA2LCAyNTMsIDIwLCA2MiwgNTcsIDEwNiwgMjUzLCAxOSwgCi0gICAgMjQ5LCAyNTAsIDYyLCA1NywgMTA2LCAyNTMsIDE4LCA2MiwgNTcsIDEwNiwgMjUzLCAxNywgNjIsIDU3LCAxMDYsIDI1MywgCi0gICAgMTYsIDI0MywgOTMsIDYyLCA1NywgMTA2LCAyNTMsIDE1LCAyNTQsIDQsIDYyLCA1NywgMTA2LCAyNTMsIDE0LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCAxMywgNjIsIDU3LCAxMDYsIDI1MywgMTIsIDYyLCA1NywgMTA2LCAyNTMsIDExLCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCAxMCwgNjIsIDU3LCAxMDYsIDI1MywgOSwgNjIsIDU3LCAxMDYsIDI1MywgOCwgNjIsIDU3LCAxMDYsIDI1MywgNywgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgNiwgNjIsIDU3LCAxMDYsIDI1MywgNSwgMjMwLCAxMzQsIDYyLCA1NywgMTA2LCAyNTMsIDQsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDMsIDIxNSwgMjM1LCA2MiwgNTcsIDEwNiwgMjUzLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAxLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTUsIDYyLCA1NywgMTA2LCAyNTIsIDI1NCwgNjIsIAotICAgIDU3LCAxMDYsIDI1MiwgMjUzLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTIsIDYyLCA1NywgMTA2LCAyNTIsIDI1MSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MiwgMjUwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNDksIDYyLCA1NywgMTA2LCAyNTIsIDI0OCwgNjIsIDU3LCAxMDYsIAotICAgIDI1MiwgMjQ3LCAyNDEsIDIxMSwgNjIsIDU3LCAxMDYsIDI1MiwgMjI2LCAyNDQsIDI4LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMjMsIDI1MiwgMTE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTgsIDIxOSwgNSwgNjIsIDU3LCAxMDYsIDI1MiwgMjE3LCA3NCwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMjE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTUsIDIxNywgMjM2LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMTQsIDYyLCA1NywgMTA2LCAyNTIsIDIxMywgNjIsIDU3LCAxMDYsIDI1MiwgMjEyLCAyMTEsIDI1NCwgMjUwLCAxMzksIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDIxMSwgMjUwLCAxMzksIDYyLCA1NywgMTA2LCAyNTIsIDIxMCwgMjUwLCAxNDAsIDI0MywgCi0gICAgMjU1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDksIDIxMiwgMCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA4LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUyLCAyMDcsIDYyLCA1NywgMjMwLCAxNDIsIDI1MiwgMjA2LCAyNDcsIDE5OCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA1LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAyMDQsIDYyLCA1NywgMTA2LCAyNTIsIDIwMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjAxLCA2MiwgCi0gICAgNTcsIDEwNiwgMjUyLCAyMDAsIDYyLCA1NywgMTA2LCAyNTIsIDE5OSwgMjQ4LCAxNTksIDYyLCA1NywgMTA2LCAyNTIsIAotICAgIDE5OCwgNjIsIDU3LCAxMDYsIDI1MiwgMTk3LCA2MiwgNTcsIDEwNiwgMjUyLCAxOTYsIDYyLCA1NywgMTA2LCAyNTIsIDE5NSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMTk0LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MywgMjMsIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyNDYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCi0gICAgMjUyLCAyNDQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKLSAgICAyNDIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDAsIAotICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzgsIDYyLCA1NywgCi0gICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzYsIDYyLCA1NywgMTA2LCAKLSAgICAyMTMsIDE4NiwgMjUyLCAyMzUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzQsIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyMzMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCi0gICAgMjUyLCAyMzEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKLSAgICAyMjksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjcsIAotICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjQsIDYyLCA1NywgCi0gICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjEsIDYyLCA1NywgMTA2LCAKLSAgICAyMTMsIDE4NiwgMjUyLCAyMjAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMTksIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyMDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAxOTMsIDI1NCwgMjM2LCAyMTEsIDIwOSwgMjIwLCAKLSAgICAxMzgsIDIzMiwgMjEzLCAyNTQsIDIzNiwgMjExLCAyMDksIDIyMCwgMTM4LCAyNDcsIDEyMCwgMjU0LCAyMzYsIDI1MCwgCi0gICAgMTMwLCA3OCwgMjU0LCAyMzYsIDU0LCAxMTAsIDI1NCwgMjM2LCA1NCwgMTA1LCAyNTQsIDIzNiwgNTQsIDE1OCwgMjU0LCAKLSAgICAyMzYsIDU0LCAxNjEsIDI1NCwgMjM2LCA1NCwgMTg5LCAyNTQsIDIzNiwgNTQsIDE5NCwgMjU0LCAyMzYsIDU0LCAxOTgsIAotICAgIDI1NCwgMjM2LCA1NCwgMTk1LCAyNTQsIDIzNiwgNTQsIDIwMCwgMjU0LCAyMzYsIDU0LCAyMTYsIDI0NywgMjU0LCAyMzYsIAotICAgIDU0LCAyMTUsIDczLCAyNTQsIDIzNiwgNTQsIDIxNiwgMTYyLCAyNTQsIDIzNiwgNTQsIDI0NCwgMTUsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjQ0LCAxMTQsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMTEsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMTYsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjQ1LCAxODQsIDI1NCwgMjM2LCA1NCwgMjI4LCAxOTUsIDI1NCwgMjM2LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjU0LCAyMzYsIAotICAgIDU0LCAxMTMsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDEzNCwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxMSwgCi0gICAgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMjUsIDI0MCwgCi0gICAgMjEwLCAyNTQsIDIzNiwgNTQsIDIyMCwgMTIyLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyNDUsIDE5MywgMjQwLCAyMTAsIAotICAgIDI1NCwgMjM2LCA1NCwgMjI4LCAyMDAsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDEyMywgMjE2LCAxNDcsIDI1NCwgMjM2LCAKLSAgICA1NCwgMTEzLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAxMzQsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgMTEsIAotICAgIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgODEsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIxOSwgMTI1LCAyMTYsIAotICAgIDE0NywgMjU0LCAyMzYsIDU0LCAyMjAsIDEyMiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ1LCAxOTMsIDIxNiwgMTQ3LCAKLSAgICAyNTQsIDIzNiwgNTQsIDIyOCwgMjAwLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDI1NCwgCi0gICAgMjM2LCA1NCwgMjE1LCA3NCwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjE2LCAxNjMsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgCi0gICAgNTQsIDI0NCwgMTYsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgMTE1LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAKLSAgICAyMTksIDExMiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMTcsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NSwgCi0gICAgMTg1LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMjgsIDE5NiwgMjE2LCAxNDcsIDI1NCwgMjM2LCAyMTIsIDE0LCAyNTIsIAotICAgIDEyOCwgMjE0LCAxNzMsIDI1NCwgMjM2LCAyMTIsIDE0LCAyNDQsIDkyLCAyMTgsIDU5LCAyNTQsIDIzNiwgMjEyLCAxNCwgCi0gICAgMjIxLCAxNzYsIDIxOCwgNTksIDI1NCwgMjM2LCAyMTIsIDE0LCAyMTYsIDE2OSwgMjE4LCA1OSwgMjU0LCAyMzYsIDIxMiwgCi0gICAgMTQsIDI0NCwgNCwgMjE4LCA1OSwgMjU0LCAyMzYsIDI0NiwgODEsIDIzMSwgOTAsIDI0NCwgOTIsIDIxOCwgNTksIDI1NCwgCi0gICAgMjM2LCAyMzIsIDE5OSwgMjMxLCA5MCwgMjQ0LCA5MiwgMjE4LCA1OSwgMjU0LCAyMzYsIDIzMSwgOTAsIDIyMSwgMTc2LCAKLSAgICAyMTgsIDU5LCAyNTQsIDIzNiwgMjMxLCA5MCwgMjE2LCAxNjksIDIxOCwgNTksIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDIyNCwgMjEsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDI0MiwgMjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDI0NiwgMTAwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTg5LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTQsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDIxNiwgCi0gICAgMTQ3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAKLSAgICA4MSwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIAotICAgIDE5NCwgMjQ0LCAxMTUsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDI0MCwgMjExLCAyMTcsIDY3LCAyNiwgCi0gICAgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTEsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDIxNiwgMTQ4LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjE2LCAxNDgsIDIxNywgNjcsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMTgsIAotICAgIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE1LCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjQwLCAyMTEsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTEsIDIxOCwgMTUwLCAKLSAgICAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAyMTYsIDE0OCwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIAotICAgIDI0OCwgMjE2LCAxNDgsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxNiwgMTQ4LCAyMTgsIAotICAgIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMzAsIDE2NCwgMjYsIDI1NSwgNiwgMjQxLCAyMDUsIDEyMywgCi0gICAgMjI1LCAzMSwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDExMCwgMjYsIDI1NSwgNiwgMjQxLCAyMDEsIDExMCwgMjYsIDI1NSwgCi0gICAgNiwgMjQ1LCAxMDQsIDEwNSwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDEwNSwgMjYsIDI1NSwgNiwgMjQ5LCA2NSwgMTEzLCAKLSAgICAyNDYsIDk5LCAyNiwgMjU1LCA2LCAyNDUsIDEwNCwgMTEzLCAyNDYsIDk5LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMTg5LCAKLSAgICAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyMTYsIDI0OCwgMjU0LCAxNDEsIAotICAgIDE3LCAyNiwgMjU1LCA2LCAyNDEsIDIwMSwgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIzMSwgNDEsIDIxNiwgMjQ3LCAyNiwgCi0gICAgMjU1LCA2LCAyMTYsIDE4MSwgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAyMTYsIDE2MiwgMjYsIDI1NSwgNiwgCi0gICAgMjE1LCAyMDMsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjQ0LCAxMTUsIDI1NCwgMTQxLCAxNywgMjYsIAotICAgIDI1NSwgNiwgMjQxLCAyMDEsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCAxMTQsIDI2LCAyNTUsIDYsIAotICAgIDIxNiwgMTgxLCAxMjMsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTM0LCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgCi0gICAgMjQ1LCAxMDQsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAKLSAgICAyNTUsIDYsIDIxNiwgMTgxLCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjUwLCAyMjcsIDI0NCwgODEsIDI0MCwgCi0gICAgMjEwLCAyNiwgMjU1LCA2LCAyMjksIDE4MiwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMjMsIAotICAgIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCA4MSwgMjE2LCAxNDcsIDI2LCAyNTUsIDYsIDI0OCwgNTcsIAotICAgIDI0NCwgODEsIDIzMCwgMTY0LCAyNiwgMjU1LCA2LCAyMTgsIDExOCwgMjQ0LCAxMTUsIDIzMCwgMTY0LCAyNiwgMTIzLCAKLSAgICAxNjMsIDUwLCAyNiwgMTIzLCAxNjMsIDUsIDI1NCwgMTQxLCAxNywgMjYsIDExMywgMjE2LCAxNjcsIDUwLCAyNiwgMTM0LCAKLSAgICAyMjQsIDIwLCA1MCwgMjYsIDIxMSwgNDUsIDUwLCAyNiwgMjE3LCA2OCwgNTAsIDI2LCAyNDYsIDEwMSwgNTAsIDI2LCAyMjYsIAotICAgIDI0NiwgNTAsIDI2LCAxMTMsIDIyNiwgMjQ1LCA1MCwgMjYsIDEzNCwgMjI2LCAyNDUsIDUwLCAyNiwgMjQ0LCAxMSwgMjI2LCAKLSAgICAyNDUsIDUwLCAyNiwgMjQ0LCA4MSwgMjI2LCAyNDUsIDUwLCAyNiwgMjMxLCAzNSwgNTAsIDI2LCAyMzMsIDE1NywgMjUyLCAKLSAgICAxMjgsIDUwLCAyNiwgMjMyLCAxOTQsIDUwLCAyNiwgMjI2LCAxMzEsIDUwLCAyNiwgMjExLCAxNTksIDUwLCAyNiwgMjUzLCAKLSAgICAyNDMsIDUwLCAyNiwgMjU0LCAwLCA1MCwgMjYsIDI0MiwgMTQ0LCA1MCwgMjYsIDIxNSwgMTg2LCAyNTIsIDEyOCwgNTAsIAotICAgIDI2LCAyMTAsIDg3LCA1MCwgMjIyLCAxOTgsIDIyMCwgMTEzLCA1MCwgMjIyLCAxOTgsIDIxNCwgMTg1LCA1MCwgMjIyLCAKLSAgICAxOTgsIDIyMCwgMTQyLCA1MCwgMjIyLCAxOTgsIDIyMCwgMTExLCA1MCwgMjIyLCAxOTgsIDI0NywgMjEzLCAyMjAsIDExMSwgCi0gICAgNTAsIDIyMiwgMTk4LCAyMTksIDE2OCwgNTAsIDIyMiwgMTk4LCAyNDgsIDUzLCA1MCwgMjIyLCAxOTgsIDIyNCwgNiwgNTAsIAotICAgIDIyMiwgMTk4LCAyMjAsIDEyOSwgNTAsIDIyMiwgMTk4LCAyNDYsIDYwLCA1MCwgMjIyLCAxOTgsIDI1MywgMjM4LCA1MCwgCi0gICAgMjIyLCAxOTgsIDI1MCwgMTcxLCA1MCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjUsIDIxMywgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMjUsIDI0LCAyNDEsIDIzNSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTcsIDQ1LCAyNDEsIDIzNSwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDI0NywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDEwMSwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyMTEsIDIyMSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDEsIDIxMSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyNDMsIDg1LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxNiwgMTE2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDc0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MSwgMTY5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMCwgMjksIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjQ5LCAyNDQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjMxLCAxODQsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjMxLCAxMzYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjIxLCAyMTYsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjMyLCAyMzcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUxLCAxODgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgMjUwLCAyMzEsIDIyNSwgMzUsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ3LCAxMzMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgCi0gICAgNSwgMjQ5LCAyMjMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE5LCA4NywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDksIAotICAgIDIyNCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTIsIDYzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMCwgMTYsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjQwLCAyNDgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQxLCAxNzgsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjUxLCAxMTIsIDIzMywgMzYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUwLCAyMjQsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjIzLCAxNTMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ1LCAyMzAsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjQ2LCAxMDcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE1LCAxMDUsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjUyLCA2NiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjUsIDM2LCAyMTUsIDIzNSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMTMsIDE1OSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjYsIDE4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDIyMiwgMTkwLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIzMiwgMjI0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNiwgCi0gICAgMTE1LCAyNTIsIDE4NCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDQsIDQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDI0MiwgMTM4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxOCwgMTE5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDQsIDI1MywgCi0gICAgMTY4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxMiwgMzIsIDI1MiwgMTQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDM4LCAKLSAgICAyMjYsIDI0OCwgOTEsIDIzMiwgNjAsIDEsIDYxLCAyMzIsIDYwLCAxLCA3NSwgMjMyLCA2MCwgMSwgMjUzLCAxNTgsIDIzMiwgCi0gICAgNjAsIDEsIDI1MiwgMTksIDIzMiwgNjAsIDEsIDI0MywgMjAyLCAyMzIsIDYwLCAxLCAyNDksIDYwLCAyMzIsIDYwLCAxLCAKLSAgICA3MywgMjMyLCA2MCwgMSwgMjEyLCA5OCwgMjMyLCA2MCwgMSwgMjEwLCAxNTksIDIzMiwgNjAsIDEsIDIxNiwgMjEwLCAyMzIsIAotICAgIDYwLCAxLCAyMzUsIDE0NCwgMjMyLCA2MCwgMSwgMjM1LCAyMywgMjMyLCA2MCwgMSwgMjI0LCA5NiwgMjMyLCA2MCwgMSwgCi0gICAgMTU2LCAyMzIsIDYwLCAxLCAxOTMsIDIzMiwgNjAsIDEsIDIzMCwgMjUsIDIzMiwgNjAsIDEsIDIzMCwgMTY2LCAyMzIsIDYwLCAKLSAgICAxLCAyMjgsIDExMSwgMjMyLCA2MCwgMSwgNzAsIDIzMiwgNjAsIDEsIDIyNiwgMTA1LCAyMzIsIDYwLCAxLCAyMzQsIDQ3LCAKLSAgICAyMzIsIDYwLCAxLCAxNTMsIDIzMiwgNjAsIDEsIDIyMiwgOTEsIDIzMiwgNjAsIDEsIDIxNywgMTUyLCAyMzIsIDYwLCAxLCAKLSAgICAyMTUsIDE1OSwgMjMyLCA2MCwgMSwgMjU0LCAxMjMsIDIzMiwgNjAsIDEsIDI0NSwgMTUwLCAyMzIsIDYwLCAxLCAyNDIsIAotICAgIDYwLCAyMzIsIDYwLCAxLCAyMTEsIDE3OCwgMjUwLCAyMzcsIDEsIDYxLCAyNTAsIDIzNywgMSwgMjI2LCA5MSwgMjUwLCAKLSAgICAyMzcsIDEsIDI0OSwgNjAsIDI1MCwgMjM3LCAxLCAxNTYsIDI1MCwgMjM3LCAxLCAyMTQsIDExNiwgMjUwLCAyMzcsIDEsIAotICAgIDE1MywgMjUwLCAyMzcsIDEsIDIzMywgNjIsIDI1MCwgMjM3LCAxLCAyNTUsIDc1LCAyNTAsIDIzNywgMSwgMjI0LCA5NiwgCi0gICAgMjUwLCAyMzcsIDEsIDI1MywgMTU4LCAyNTAsIDIzNywgMSwgMTkzLCAyNTAsIDIzNywgMSwgNzYsIDI1MCwgMjM3LCAxLCAKLSAgICAyNDgsIDIyMywgMjUwLCAyMzcsIDEsIDIxNywgMTUyLCAyNTAsIDIzNywgMSwgMjIwLCAxMDQsIDI1MCwgMjM3LCAxLCAyMjAsIAotICAgIDEwMywgMjUwLCAyMzcsIDEsIDIyMiwgOTEsIDI1MCwgMjM3LCAxLCAyNTEsIDY1LCAyNTAsIDIzNywgMSwgNzAsIDI1MCwgCi0gICAgMjM3LCAxLCAyMjgsIDExMSwgMjUwLCAyMzcsIDEsIDIxMSwgMTc4LCAyNTAsIDIzNywgMSwgMjMwLCAyNSwgMjUwLCAyMzcsIAotICAgIDEsIDIxNSwgMTU4LCAyNTAsIDIzNywgMSwgMjI2LCAxMDUsIDI1MCwgMjM3LCAxLCAyMTgsIDIyNiwgMjUwLCAyMzcsIDEsIAotICAgIDczLCAyNTAsIDIzNywgMSwgNzUsIDI1MCwgMjM3LCAxLCAyMTQsIDExMywgMjUwLCAyMzcsIDEsIDIzNSwgMjMsIDI1MCwgCi0gICAgMjM3LCAxLCAyMzUsIDE0LCAyNTAsIDIzNywgMSwgMjI5LCAxNTAsIDI1MCwgMjM3LCAxLCAyMTQsIDExOCwgMjUwLCAyMzcsIAotICAgIDEsIDI0MywgMjAyLCAyNTAsIDIzNywgMSwgMjQzLCAxMzcsIDI1MCwgMjM3LCAxLCAyMTgsIDE2OCwgMjUwLCAyMzcsIDEsIAotICAgIDIxOCwgMTY3LCAyNTAsIDIzNywgMSwgMjI5LCA3OSwgMjUwLCAyMzcsIDEsIDIzNiwgMzMsIDI1MCwgMjM3LCAxLCAyNTEsIAotICAgIDY0LCAyNTAsIDIzNywgMSwgMjE1LCAxNTksIDI1MCwgMjM3LCAxLCAyMTQsIDExNSwgMjUwLCAyMzcsIDEsIDIyMiwgMTgwLCAKLSAgICAyNTAsIDIzNywgMSwgMjMxLCAxMjksIDI1MCwgMjM3LCAxLCAyMzEsIDEyOCwgMjUwLCAyMzcsIDEsIDIzMSwgMTI3LCAyNTAsIAotICAgIDIzNywgMSwgMjMxLCAxMjYsIDI1MCwgMjM3LCAxLCAyMzMsIDYxLCAyNTAsIDIzNywgMSwgMjQ1LCAyMzQsIDI1MCwgMjM3LCAKLSAgICAxLCAyMTQsIDExNCwgNTUsIDMyLCAxLCA2MSwgNTUsIDMyLCAxLCAyNTIsIDc1LCA1NSwgMzIsIDEsIDIzNCwgMTgyLCA1NSwgCi0gICAgMzIsIDEsIDI0OCwgOTAsIDU1LCAzMiwgMSwgNzUsIDU1LCAzMiwgMSwgMjEzLCAyNTUsIDU1LCAzMiwgMSwgMjEwLCA5NCwgCi0gICAgNTUsIDMyLCAxLCAyNDEsIDIzOCwgNTUsIDMyLCAxLCAyMTYsIDE5NSwgNTUsIDMyLCAxLCA3MywgNTUsIDMyLCAxLCAxNzYsIAotICAgIDU1LCAzMiwgMSwgMjQ1LCAxNzQsIDU1LCAzMiwgMSwgMjQ1LCAxNTksIDU1LCAzMiwgMSwgMjQ1LCAxNTAsIDU1LCAzMiwgMSwgCi0gICAgMjQ1LCA3NSwgNTUsIDMyLCAxLCA3NiwgNTUsIDMyLCAxLCAyMjUsIDIyMSwgNTUsIDMyLCAxLCAyMjAsIDYzLCA1NSwgMzIsIAotICAgIDEsIDIzMywgMjE3LCA1NSwgMzIsIDEsIDI0NSwgOTIsIDU1LCAzMiwgMSwgMjQ1LCA4MiwgNTUsIDMyLCAxLCAyMTcsIDIyLCAKLSAgICA1NSwgMzIsIDEsIDcwLCA1NSwgMzIsIDEsIDI0NSwgMTc3LCA1NSwgMzIsIDEsIDIyNSwgMTM2LCA1NSwgMzIsIDEsIDIzNCwgCi0gICAgMTE5LCA1NSwgMzIsIDEsIDI0NSwgMjAyLCA1NSwgMzIsIDEsIDI0NSwgODQsIDU1LCAzMiwgMSwgMjUwLCAxMzEsIDU1LCAKLSAgICAzMiwgMSwgMjM2LCAzMywgNTUsIDMyLCAxLCAyMTQsIDExOCwgNTUsIDMyLCAyMjcsIDE5OCwgMTEwLCA1NSwgMzIsIDIyNywgCi0gICAgMTk4LCAxODksIDU1LCAzMiwgMjI3LCAxOTgsIDIxNiwgMjQ3LCA1NSwgMzIsIDIyNywgMTk4LCAyNDQsIDExNCwgMjQyLCAKLSAgICAxNTMsIDEsIDI1NCwgMjA0LCAyNDIsIDE1MywgMSwgMjUyLCAxNjMsIDI0MiwgMTUzLCAxLCAyNDIsIDIxMSwgMjQyLCAxNTMsIAotICAgIDEsIDI0OCwgMjA0LCAyNDIsIDE1MywgMSwgMjU0LCAyMDAsIDI0MiwgMTUzLCAxLCAyMjQsIDc5LCAyNDIsIDE1MywgMSwgCi0gICAgMjM1LCAxNTUsIDI0MiwgMTUzLCAxLCAyNDIsIDM5LCAyNDIsIDE1MywgMSwgMjE2LCAxNTgsIDI0MiwgMTUzLCAxLCAyNDUsIAotICAgIDE4MywgMjQyLCAxNTMsIDEsIDIzMywgMTkwLCAyNDIsIDE1MywgMSwgMjMzLCAxMTMsIDI0MiwgMTUzLCAxLCAyMzEsIDE3OSwgCi0gICAgMjQyLCAxNTMsIDEsIDIyOSwgMTg0LCAyNDIsIDE1MywgMSwgMjM1LCAxMTksIDI0MiwgMTUzLCAxLCAyMTQsIDEzNiwgMjQyLCAKLSAgICAxNTMsIDEsIDIyNiwgNjksIDI0MiwgMTUzLCAxLCAyMjgsIDE5NSwgMjQyLCAxNTMsIDEsIDIyMywgMTY1LCAyNDIsIDE1MywgCi0gICAgMSwgMjIxLCAyMTgsIDI0MiwgMTUzLCAxLCAyMTcsIDQsIDI0MiwgMTUzLCAxLCAyMTEsIDIzNCwgMjQyLCAxNTMsIDEsIAotICAgIDI0NCwgMTc4LCAyNDIsIDE1MywgMSwgMjM2LCAzNywgMjQyLCAxNTMsIDEsIDI0MCwgMTk5LCAyNDIsIDE1MywgMSwgMjI2LCAKLSAgICAxMzksIDI0MiwgMTUzLCAxLCAyMjgsIDIwMCwgMjQwLCAyMTAsIDIxNCwgMjA5LCAxLCAyNTQsIDE0NywgMjE0LCAyMDksIDEsIAotICAgIDI1MiwgMjYsIDIxNCwgMjA5LCAxLCAyNDMsIDEwOCwgMjE0LCAyMDksIDEsIDIzNCwgMTMyLCAyMTQsIDIwOSwgMSwgMjQ4LCAKLSAgICA1NCwgMjE0LCAyMDksIDEsIDI0MSwgNjgsIDIxNCwgMjA5LCAxLCAyMTEsIDIyNywgMjE0LCAyMDksIDEsIDIxMCwgODUsIAotICAgIDIxNCwgMjA5LCAxLCAyNDAsIDI0MSwgMjE0LCAyMDksIDEsIDIxNiwgMjMwLCAyMTQsIDIwOSwgMSwgMjEwLCAyMzMsIDIxNCwgCi0gICAgMjA5LCAxLCAyMzQsIDI1MCwgMjE0LCAyMDksIDEsIDIyMCwgMjAsIDIxNCwgMjA5LCAxLCAyMzMsIDk4LCAyMTQsIDIwOSwgCi0gICAgMSwgMjMxLCA2NSwgMjE0LCAyMDksIDEsIDI0OCwgMjEsIDIxNCwgMjA5LCAxLCAyMjcsIDE5NCwgMjE0LCAyMDksIDEsIAotICAgIDIxMCwgMTMsIDIxNCwgMjA5LCAxLCAyMjEsIDI0OCwgMjE0LCAyMDksIDEsIDI1NCwgMTk2LCAyMTQsIDIwOSwgMSwgMjI0LCAKLSAgICAxNTAsIDIxNCwgMjA5LCAxLCAyMjIsIDI1LCAyMTQsIDIwOSwgMSwgMjI0LCAzNSwgMjE0LCAyMDksIDEsIDIyMywgMTQ0LCAKLSAgICAyMTQsIDIwOSwgMSwgMjE2LCAxOTksIDIxNCwgMjA5LCAxLCAyNDIsIDI0NCwgMjE0LCAyMDksIDEsIDExMSwgMjE0LCAyMDksIAotICAgIDEsIDczLCAyMTQsIDIwOSwgMSwgNzAsIDIxNCwgMjA5LCAxLCAyMTgsIDE3OSwgMjE0LCAyMDksIDIxMSwgMjA5LCAyNDcsIAotICAgIDE3MiwgNTUsIDIyNSwgMTY5LCA1LCA2MSwgNTUsIDIyNSwgMTY5LCA1LCA3MywgNTUsIDIyNSwgMTY5LCA1LCA3MCwgNTUsIAotICAgIDIyNSwgMTY5LCA1LCAxNzYsIDU1LCAyMjUsIDE2OSwgNSwgMjMzLCAyMTcsIDU1LCAyMjUsIDE2OSwgNSwgMjQzLCAxMzUsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjQyLCAxMTMsIDU1LCAyMjUsIDE2OSwgNSwgMjExLCAxNjUsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjUxLCAzMywgNTUsIDIyNSwgMTY5LCA1LCAyMzUsIDE0MSwgNTUsIDIyNSwgMTY5LCA1LCAyMzUsIDEwOCwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAyMTcsIDEwNSwgNTUsIDIyNSwgMTY5LCA1LCAyMTUsIDExOCwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDIyMSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDMsIDU1LCAyMjUsIDE2OSwgNSwgMjQ2LCA3OCwgNTUsIDIyNSwgMTY5LCA1LCAyMTYsIAotICAgIDIwOCwgNTUsIDIyNSwgMTY5LCA1LCAxOTAsIDU1LCAyMjUsIDE2OSwgNSwgMjUyLCAxOTEsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjQ0LCAxOTYsIDU1LCAyMjUsIDE2OSwgNSwgMTk3LCA1NSwgMjI1LCAxNjksIDUsIDIyNywgMjM3LCA1NSwgMjI1LCAxNjksIAotICAgIDUsIDE4NCwgNTUsIDIyNSwgMTY5LCA1LCAyMzAsIDIzMCwgNTUsIDIyNSwgMTY5LCA1LCAyMzAsIDEwMiwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAxOTEsIDU1LCAyMjUsIDE2OSwgNSwgMjE0LCAyNywgNTUsIDIyNSwgMTY5LCA1LCAyMTMsIDE3NiwgNTUsIAotICAgIDIyNSwgMTY5LCA1LCAyMDUsIDU1LCAyMjUsIDE2OSwgNSwgMjIyLCAxNDAsIDU1LCAyMjUsIDE2OSwgNSwgMjMzLCAxMzUsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjA2LCA1NSwgMjI1LCAxNjksIDUsIDIxMCwgMTE2LCA1NSwgMjI1LCAxNjksIDUsIDIyMCwgCi0gICAgMTAyLCA1NSwgMjI1LCAxNjksIDUsIDIxOCwgMjIzLCA1NSwgMjI1LCAxNjksIDUsIDE2MiwgNTUsIDIyNSwgMTY5LCA1LCAKLSAgICAyNTMsIDE4NiwgNTUsIDIyNSwgMTY5LCA1LCAyNTMsIDE4NSwgNTUsIDIyNSwgMTY5LCA1LCAyNTMsIDE4NCwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAyMTEsIDE0MiwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDIwMCwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDE5OSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNTIsIDE3MCwgNTUsIDIyNSwgMTY5LCA1LCAyNTEsIDg1LCA1NSwgMjI1LCAxNjksIDIxMSwgCi0gICAgMjA5LCAyNDcsIDE3MiwgNTUsIDIyNSwgMTY5LCA1NCwgMTEwLCA1NSwgMjI1LCAxNjksIDU0LCAxMDUsIDU1LCAyMjUsIAotICAgIDE2OSwgNTQsIDIxNiwgMjQ3LCA1NSwgMjI1LCAxNjksIDU0LCAyMTUsIDczLCA1NSwgMjI1LCAxNjksIDU0LCAyNDAsIDIxMCwgCi0gICAgMTgxLCA2LCAxLCAxOTksIDczLCAxODEsIDYsIDEsIDE5OSwgNzUsIDE4MSwgNiwgMSwgMTk5LCA2MSwgMTgxLCA2LCAxLCAKLSAgICAxOTksIDI1NCwgMjA5LCAxODEsIDYsIDEsIDE5OSwgNzYsIDE4MSwgNiwgMSwgMTk5LCAyMjYsIDE4MywgMTgxLCA2LCAxLCAKLSAgICAyMTksIDI1MSwgNzMsIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDc1LCAxODEsIDYsIDEsIDIxOSwgMjUxLCA2MSwgMTgxLCA2LCAKLSAgICAxLCAyMTksIDI1MSwgMjU0LCAyMDksIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDc2LCAxODEsIDYsIDEsIDIxOSwgMjUxLCAyMjYsIAotICAgIDE4MywgMTgxLCA2LCAxLCAyNTMsIDE2NywgMTgxLCA2LCAxLCAyMjYsIDExNiwgMTgxLCA2LCAxLCAyMTEsIDE5NSwgMTgxLCAKLSAgICA2LCAxLCAyMTEsIDQ0LCAxODEsIDYsIDEsIDI0MiwgNjAsIDE4MSwgNiwgMSwgMjI1LCAyMTEsIDE4MSwgNiwgMSwgMjUyLCAKLSAgICA2NiwgMTgxLCA2LCAxLCAyMTcsIDExLCAxODEsIDYsIDEsIDI0OCwgNzcsIDE4MSwgNiwgMSwgMjUwLCAxMjgsIDE4MSwgNiwgCi0gICAgMSwgMjM1LCAxMjQsIDE4MSwgNiwgMSwgMjM0LCAxODksIDE4MSwgNiwgMSwgMjQzLCA4MywgMTgxLCA2LCAxLCAyNDUsIAotICAgIDIwMiwgMTgxLCA2LCAxLCAyMTMsIDI1MCwgMTgxLCA2LCAxLCAyNDUsIDU5LCAxODEsIDYsIDEsIDIxNiwgMTk0LCAxODEsIAotICAgIDYsIDEsIDI0NSwgODIsIDE4MSwgNiwgMSwgMjEwLCA5MiwgMTgxLCA2LCAxLCAyNDUsIDc1LCAxODEsIDYsIDEsIDIxMCwgCi0gICAgNzMsIDE4MSwgNiwgMSwgMjQ1LCA5MiwgMTgxLCA2LCAxLCAyNDUsIDE3NCwgMTgxLCA2LCAxLCAyNDUsIDE1OSwgMTgxLCA2LCAKLSAgICAxLCAyNDUsIDE1MCwgMTgxLCA2LCAxLCAyNDUsIDEzOCwgMTgxLCA2LCAxLCAyMjYsIDIxOSwgMTgxLCA2LCAxLCAyNDUsIAotICAgIDM4LCAxODEsIDQsIDEsIDE5OSwgNzMsIDE4MSwgNCwgMSwgMTk5LCA3NSwgMTgxLCA0LCAxLCAxOTksIDYxLCAxODEsIDQsIAotICAgIDEsIDE5OSwgMjU0LCAyMDksIDE4MSwgNCwgMSwgMTk5LCA3NiwgMTgxLCA0LCAxLCAxOTksIDIyNiwgMTgzLCAxODEsIDQsIAotICAgIDEsIDIxOSwgMjUxLCA3MywgMTgxLCA0LCAxLCAyMTksIDI1MSwgNzUsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIDYxLCAxODEsIAotICAgIDQsIDEsIDIxOSwgMjUxLCAyNTQsIDIwOSwgMTgxLCA0LCAxLCAyMTksIDI1MSwgNzYsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIAotICAgIDIyNiwgMTgzLCAxODEsIDQsIDEsIDI1MywgMTY3LCAxODEsIDQsIDEsIDIyNiwgMTE2LCAxODEsIDQsIDEsIDIxMSwgMTk1LCAKLSAgICAxODEsIDQsIDEsIDIxMSwgNDQsIDE4MSwgNCwgMSwgMjQyLCA2MCwgMTgxLCA0LCAxLCAyMjUsIDIxMSwgMTgxLCA0LCAxLCAKLSAgICAyNTIsIDY2LCAxODEsIDQsIDEsIDIxNywgMTEsIDE4MSwgNCwgMSwgMjQ4LCA3NywgMTgxLCA0LCAxLCAyNTAsIDEyOCwgCi0gICAgMTgxLCA0LCAxLCAyMzUsIDEyNCwgMTgxLCA0LCAxLCAyMzQsIDE4OSwgMTgxLCA0LCAxLCAyNDMsIDgzLCAxODEsIDQsIDEsIAotICAgIDI0NSwgMjAyLCAxODEsIDQsIDEsIDIxMywgMjUwLCAxODEsIDQsIDEsIDI0NSwgNTksIDE4MSwgNCwgMSwgMjE2LCAxOTQsIAotICAgIDE4MSwgNCwgMSwgMjQ1LCA4MiwgMTgxLCA0LCAxLCAyMTAsIDkyLCAxODEsIDQsIDEsIDI0NSwgNzUsIDE4MSwgNCwgMSwgCi0gICAgMjEwLCA3MywgMTgxLCA0LCAxLCAyNDUsIDkyLCAxODEsIDQsIDEsIDI0NSwgMTc0LCAxODEsIDQsIDEsIDI0NSwgMTU5LCAKLSAgICAxODEsIDQsIDEsIDI0NSwgMTUwLCAxODEsIDQsIDEsIDI0NSwgMTM4LCAxODEsIDQsIDEsIDIyNiwgMjE5LCAxODEsIDQsIDEsIAotICAgIDI0NSwgMzgsIDIyMCwgNjksIDEsIDIyNSwgMjA5LCAyMjAsIDY5LCAxLCAyMTYsIDUsIDIyMCwgNjksIDEsIDIzNCwgOTEsIAotICAgIDIyMCwgNjksIDEsIDI0NCwgMTQ3LCAyMjAsIDY5LCAxLCAyMTYsIDE3MiwgMjIwLCA2OSwgMSwgMjE5LCA1OCwgMjIwLCA2OSwgCi0gICAgMSwgMjE4LCAxNCwgMjIwLCA2OSwgMSwgMjUwLCA2MSwgMjIwLCA2OSwgMSwgMjExLCA0NiwgMjIwLCA2OSwgMSwgMjQwLCAKLSAgICAyMDksIDIyMCwgNjksIDEsIDI1MiwgNSwgMjIwLCA2OSwgMSwgMjQ4LCA4OSwgMjIwLCA2OSwgMSwgMjQzLCAxMjEsIDIyMCwgCi0gICAgNjksIDEsIDIxMywgMTIzLCAyMjAsIDY5LCAxLCAyMTYsIDE3NiwgMjIwLCA2OSwgMSwgMjEwLCAyMSwgMjIwLCA2OSwgMSwgCi0gICAgMjMxLCA4OSwgMjIwLCA2OSwgMSwgMjM1LCA0OSwgMjIwLCA2OSwgMSwgMjExLCAyMjUsIDIyMCwgNjksIDEsIDI0MiwgNDgsIAotICAgIDIyMCwgNjksIDEsIDIzMiwgMTQyLCAyMjAsIDY5LCAxLCAyMzAsIDE4OSwgMjIwLCA2OSwgMSwgMjM2LCA0MCwgMjIwLCA2OSwgCi0gICAgMSwgMjQ1LCAyMDEsIDIyMCwgNjksIDEsIDI1MywgMjMxLCAyMjAsIDY5LCAxLCAyNTQsIDI0NywgMjIwLCA2OSwgMSwgMjI2LCAKLSAgICAxOTYsIDIyMCwgNjksIDEsIDIxMSwgMjEyLCAyMjAsIDY5LCAxLCAyMjYsIDEzMCwgMjIwLCA2OSwgMSwgMjU0LCAyMDksIAotICAgIDIyMCwgNjksIDEsIDIyMiwgMjA4LCAyMjAsIDY5LCAxLCAyMjcsIDE5NCwgMjIwLCA2OSwgMSwgMjQ1LCAyMTcsIDIyMCwgCi0gICAgNjksIDEsIDI1NCwgMjE0LCAyMjAsIDY5LCAxLCAyNDAsIDExMSwgMjIwLCA2OSwgMSwgMjE0LCAxNjMsIDIyMCwgNjksIDEsIAotICAgIDIyNiwgMjU0LCAyMjAsIDY5LCAxLCAyMjYsIDE3NiwgMjIwLCA2OSwgMSwgMjI2LCAyMTgsIDIyMCwgNjksIDEsIDI1MywgCi0gICAgMTcwLCAyMjAsIDY5LCAxLCAyNTQsIDE5LCAyMjAsIDY5LCAxLCAyMjYsIDE1OCwgMjIwLCA2OSwgMSwgMjU0LCAxOTIsIAotICAgIDIyMCwgNjksIDEsIDI0NSwgODYsIDIyMCwgNjksIDEsIDI1MywgMjUzLCAyMjAsIDY5LCAxLCAyNDUsIDIyNywgMjIwLCA2OSwgCi0gICAgMSwgMjQwLCAxMTgsIDIyMCwgNjksIDEsIDIxMSwgMTMsIDIyNiwgMTQxLCAxLCAyNTQsIDE3MCwgMjI2LCAxNDEsIDEsIAotICAgIDI1MiwgMTkxLCAyMjYsIDE0MSwgMSwgMjE3LCAxMDUsIDIyNiwgMTQxLCAxLCAyMzUsIDE0MSwgMjI2LCAxNDEsIDEsIDIxMSwgCi0gICAgMTY1LCAyMjYsIDE0MSwgMSwgMjM0LCAxMzIsIDIyNiwgMTQxLCAxLCAyNDgsIDc2LCAyMjYsIDE0MSwgMSwgMjA1LCAyMjYsIAotICAgIDE0MSwgMSwgMjA2LCAyMjYsIDE0MSwgMSwgMjIwLCAyNiwgMjI2LCAxNDEsIDEsIDI0OCwgMjUsIDIyNiwgMTQxLCAxLCAKLSAgICAyNTAsIDIxNSwgMjI2LCAxNDEsIDEsIDI0MywgMTM1LCAyMjYsIDE0MSwgMSwgMjQ0LCAxOTYsIDIyNiwgMTQxLCAxLCAyMjQsIAotICAgIDg2LCAyMjYsIDE0MSwgMSwgMjM1LCA5LCAyMjYsIDE0MSwgMSwgMjMzLCAxMzAsIDIyNiwgMTQxLCAxLCAyMzAsIDIwMCwgCi0gICAgMjI2LCAxNDEsIDEsIDIyNywgMTc4LCAyMjYsIDE0MSwgMSwgMjEyLCAzMCwgMjI2LCAxNDEsIDEsIDE2MiwgMjI2LCAxNDEsIAotICAgIDEsIDE5MSwgMjI2LCAxNDEsIDEsIDYxLCAyMjYsIDE0MSwgMSwgNzUsIDIyNiwgMTQxLCAxLCA3MywgMjI2LCAxNDEsIDEsIAotICAgIDc2LCAyMjYsIDE0MSwgMSwgNzAsIDIyNiwgMTQxLCAxLCAyNTUsIDczLCAyMjYsIDE0MSwgMSwgMjQ1LCAyMDksIDIyNiwgCi0gICAgMTQxLCAxLCAyMjYsIDE4MywgMjI2LCAxNDEsIDIxLCAyMTAsIDg2LCAyMjYsIDE0MSwgMjEsIDExMCwgMjI2LCAxNDEsIDIxLCAKLSAgICAxMDUsIDIyNiwgMTQxLCAyMSwgMTU4LCAyMjYsIDE0MSwgMjEsIDE2MSwgMjI2LCAxNDEsIDIxLCAxODksIDIyNiwgMTQxLCAKLSAgICAyMSwgMTk0LCAyMjYsIDE0MSwgMjEsIDE5OCwgMjI2LCAxNDEsIDIxLCAxOTUsIDIyNiwgMTQxLCAyMSwgMjAwLCAyNDksIAotICAgIDY3LCAzLCA2MSwgMjQ5LCA2NywgMywgNzUsIDI0OSwgNjcsIDMsIDczLCAyNDksIDY3LCAzLCA3NiwgMjQ5LCA2NywgMywgCi0gICAgNzAsIDI0OSwgNjcsIDMsIDIzNSwgMTQxLCAyNDksIDY3LCAzLCAyMzUsIDY4LCAyNDksIDY3LCAzLCAxNzYsIDI0OSwgNjcsIAotICAgIDMsIDIzNCwgMTgyLCAyNDksIDY3LCAzLCAyMzQsIDkyLCAyNDksIDY3LCAzLCAyMzQsIDI4LCAyNDksIDY3LCAzLCAyMzMsIAotICAgIDIxNywgMjQ5LCA2NywgMywgMjMzLCAxMzUsIDI0OSwgNjcsIDMsIDIzMywgNTgsIDI0OSwgNjcsIDMsIDIzMiwgMjQxLCAKLSAgICAyNDksIDY3LCAzLCAyMzIsIDE1NiwgMjQ5LCA2NywgMywgMjMyLCA5OCwgMjQ5LCA2NywgMywgMTg0LCAyNDksIDY3LCAzLCAKLSAgICAyMzEsIDkxLCAyNDksIDY3LCAzLCAyMzAsIDIzMCwgMjQ5LCA2NywgMywgMjMwLCAxNjEsIDI0OSwgNjcsIDMsIDIzMCwgCi0gICAgMTAyLCAyNDksIDY3LCAzLCAxOTcsIDI0OSwgNjcsIDMsIDIyOSwgMTA3LCAyNDksIDY3LCAzLCAyMjgsIDIzMywgMjQ5LCAKLSAgICA2NywgMywgMjI4LCA3NCwgMjQ5LCA2NywgMywgMjI3LCAyMzcsIDI0OSwgNjcsIDMsIDE5MCwgMjQ5LCA2NywgMywgMjI1LCAKLSAgICAyMjEsIDI0OSwgNjcsIDMsIDIyNSwgMTA4LCAyNDksIDY3LCAzLCAyMjUsIDE2LCAyNDksIDY3LCAzLCAyMjQsIDE1MCwgCi0gICAgMjQ5LCA2NywgMywgMjA1LCAyNDksIDY3LCAzLCAyMjMsIDEyOCwgMjQ5LCA2NywgMywgMjIzLCAzNSwgMjQ5LCA2NywgMywgCi0gICAgMjIyLCAyMTEsIDI0OSwgNjcsIDMsIDIyMiwgMTQwLCAyNDksIDY3LCAzLCAyMDYsIDI0OSwgNjcsIDMsIDIyMSwgMTgxLCAKLSAgICAyNDksIDY3LCAzLCAyMTksIDE5MSwgMjQ5LCA2NywgMywgMjE5LCA1OCwgMjQ5LCA2NywgMywgMjE4LCA4MywgMjQ5LCA2NywgCi0gICAgMywgMjE3LCAxMDUsIDI0OSwgNjcsIDMsIDIxNywgMjIsIDI0OSwgNjcsIDMsIDIxNiwgMTE3LCAyNDksIDY3LCAzLCAxMTEsIAotICAgIDI0OSwgNjcsIDMsIDIxNSwgMTE4LCAyNDksIDY3LCAzLCAyMTIsIDY1LCAyNDksIDY3LCAzLCAyMTIsIDIyLCAyNDksIDY3LCAKLSAgICAzLCAyMTEsIDI1MCwgMjQ5LCA2NywgMywgMjExLCAyMjcsIDI0OSwgNjcsIDMsIDIxMSwgMTY1LCAyNDksIDY3LCAzLCAyMTEsIAotICAgIDE2MiwgMjQ5LCA2NywgMywgMjEwLCAxMTYsIDI0OSwgNjcsIDMsIDIxMCwgMjMsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjU0LCAKLSAgICAxNjgsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjUyLCAyNSwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDIsIDIwMSwgMjM2LCAxLCAKLSAgICAyNTQsIDI3LCAxLCAyNDgsIDE4OCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDEsIDIzOCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAKLSAgICAyMTIsIDMwLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIxMCwgOTcsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjQxLCAxOTUsIDIzNiwgCi0gICAgMSwgMjU0LCAyNywgMSwgMjE2LCAyMjYsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjEwLCAyMzIsIDIzNiwgMSwgMjU0LCAyNywgCi0gICAgMSwgMjM0LCAyMjUsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjMzLCA5MywgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMzEsIDY1LCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNywgMTk0LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMSwgMjQ5LCAyMzYsIDEsIDI1NCwgCi0gICAgMjcsIDEsIDI1MywgMTYyLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNSwgMjIxLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMiwgCi0gICAgMjQsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjI0LCAzNCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjMsIDY3LCAyMzYsIDEsIAotICAgIDI1NCwgMjcsIDEsIDIyMCwgMjAsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjE3LCAzNiwgMjM2LCAxLCAyNTQsIDI3LCAyMjEsIAotICAgIDE3MywgNTAsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDExMCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTA1LCAyMzYsIDEsIDI1NCwgCi0gICAgMjcsIDU0LCAxNTgsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDIxNiwgMjQ3LCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTUsIDczLCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDIyNSwgMTE5LCAxLCAyNTQsIDE2NSwgMjI1LCAxMTksIAotICAgIDEsIDI1MiwgMjgsIDIyNSwgMTE5LCAxLCAyNDMsIDEwOSwgMjI1LCAxMTksIDEsIDI0OCwgNTYsIDIyNSwgMTE5LCAxLCAKLSAgICAyNDEsIDIzOCwgMjI1LCAxMTksIDEsIDIxMiwgMzcsIDIyNSwgMTE5LCAxLCAyMTAsIDExMCwgMjI1LCAxMTksIDEsIDI0MSwgCi0gICAgMTk3LCAyMjUsIDExOSwgMSwgMjE2LCAyMzAsIDIyNSwgMTE5LCAxLCAyMTAsIDIzMywgMjI1LCAxMTksIDEsIDIzNCwgMjUwLCAKLSAgICAyMjUsIDExOSwgMSwgMjMzLCA5OSwgMjI1LCAxMTksIDEsIDIzMSwgNjUsIDIyNSwgMTE5LCAxLCAyMjcsIDE5NCwgMjI1LCAKLSAgICAxMTksIDEsIDIyMCwgMTQ0LCAyMjUsIDExOSwgMSwgMjU0LCAxOTYsIDIyNSwgMTE5LCAxLCAyMjUsIDIyMSwgMjI1LCAxMTksIAotICAgIDEsIDIyMiwgMjUsIDIyNSwgMTE5LCAxLCAyMjQsIDM5LCAyMjUsIDExOSwgMSwgMjIyLCAxODksIDIyNSwgMTE5LCAxLCAKLSAgICAyMjAsIDIwLCAyMjUsIDExOSwgMSwgMjE3LCA0MSwgMjI1LCAxMTksIDU0LCAxMTAsIDIyNSwgMTE5LCA1NCwgMjE2LCAyNDcsIAotICAgIDIyNSwgMTE5LCA1NCwgMjE1LCA3MywgMjI1LCAxMTksIDU0LCAxMjMsIDI0MCwgMjEwLCAyMjUsIDExOSwgNTQsIDEwNSwgCi0gICAgMjI1LCAxMTksIDU0LCAxNTgsIDIyNSwgMTE5LCAyMTEsIDIwOSwgMjIwLCAxMzcsIDIzMiwgNTksIDEsIDYxLCAyMzIsIDU5LCAKLSAgICAxLCAyNTMsIDE1OCwgMjMyLCA1OSwgMSwgMjQzLCAyMDIsIDIzMiwgNTksIDEsIDI0OSwgNjAsIDIzMiwgNTksIDEsIDc1LCAKLSAgICAyMzIsIDU5LCAxLCAyMTQsIDEwNSwgMjMyLCA1OSwgMSwgNzMsIDIzMiwgNTksIDEsIDIxMSwgMTE3LCAyMzIsIDU5LCAxLCAKLSAgICAyMzUsIDIzLCAyMzIsIDU5LCAxLCAxNTYsIDIzMiwgNTksIDEsIDE5MywgMjMyLCA1OSwgMSwgMjMwLCAyNSwgMjMyLCA1OSwgCi0gICAgMSwgNzYsIDIzMiwgNTksIDEsIDE1MywgMjMyLCA1OSwgMSwgMjE4LCAyMjYsIDIzMiwgNTksIDEsIDIxNywgMTUyLCAyMzIsIAotICAgIDU5LCAxLCA3MCwgMjMyLCA1OSwgMSwgMjQ1LCA2LCAyMzIsIDU5LCAxLCAyMjQsIDk2LCAyMzIsIDU5LCAxLCAyMjIsIDkxLCAKLSAgICAyMzIsIDU5LCAxLCAyMTUsIDE1OSwgMjMyLCA1OSwgMSwgMjU0LCAxMjMsIDIzMiwgNTksIDEsIDI0NSwgMTUwLCAyMzIsIAotICAgIDU5LCAxLCAyMzIsIDYyLCAyMzIsIDU5LCAxLCAyMjgsIDExMSwgMjMyLCA1OSwgMSwgMjUxLCA2NiwgMjMyLCA1OSwgMjE1LCAKLSAgICAyMjIsIDc4LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNjEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCA3NSwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDczLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNzYsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxOTEsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMTIsIDY1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjUyLCAxOTEsIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCAyNTIsIDE5MCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5MCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDE4NCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5NywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyOSwgMjI4LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjI5LCAxMDcsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjksIDEwNiwgMjMxLCA0OCwgMjQxLCAxNzQsIAotICAgIDEsIDIwNSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyMywgMTg3LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjMzLCAxMzUsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMzQsIDEzMiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI0MSwgMTg5LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjA2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjIyLCAzMywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDIyMSwgMTgxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTc2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjI0LCA4OCwgMjMxLCAKLSAgICA0OCwgMjQxLCAxNzQsIDEsIDIxNywgMTA1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAxMDQsIDIzMSwgNDgsIDI0MSwgCi0gICAgMTc0LCAxLCAyMTcsIDIyLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAyMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDExMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI0OCwgMjIxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMTYsIDIxMywgMTcwLCAKLSAgICAyMzEsIDQ4LCAyNDEsIDE3NCwgMTYsIDIxMywgMTY5LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA2MSwgMjMxLCA0OCwgMjQ5LCAKLSAgICA5NCwgMSwgNzUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDczLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA3NiwgMjMxLCA0OCwgCi0gICAgMjQ5LCA5NCwgMSwgMTkxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMTIsIDY1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNTIsIAotICAgIDE5MSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTkwLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxODQsIDIzMSwgNDgsIDI0OSwgCi0gICAgOTQsIDEsIDE5NywgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjI5LCAxMDcsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIwNSwgMjMxLCAKLSAgICA0OCwgMjQ5LCA5NCwgMSwgMjMzLCAxMzUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIzNCwgMTMyLCAyMzEsIDQ4LCAyNDksIAotICAgIDk0LCAxLCAyNDEsIDE4OSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjA2LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNTQsIDIzLCAKLSAgICAyMDYsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIyMSwgMTgxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxNzYsIDIzMSwgNDgsIAotICAgIDI0OSwgOTQsIDEsIDIyNCwgODgsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIxNywgMTA1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAKLSAgICAyMTcsIDIyLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxMTEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDI0OCwgMjIxLCAyMzEsIAotICAgIDQ4LCAyNDksIDk0LCAyMzIsIDE0NSwgMjIyLCAyMTcsIDIzMSwgNDgsIDI0OSwgOTQsIDIzMiwgMTQ1LCAyMzYsIDYsIDIzNCwgCi0gICAgMTIwLCAxLCA2MSwgMjM0LCAxMjAsIDI1LCA1LCA3MywgMjM0LCAxMjAsIDI1LCA1LCA3MCwgMjM0LCAxMjAsIDI1LCA1LCAKLSAgICAxNDksIDE1MywgMjM0LCAxMjAsIDI1LCA1LCA3NSwgMjM0LCAxMjAsIDI1LCA1LCA3NiwgMjM0LCAxMjAsIDI1LCAyMzMsIAotICAgIDIzLCA3OCwgMjM0LCAxMjAsIDUsIDUyLCAyMjIsIDIzNCwgNTEsIDIzNCwgMTIwLCA1LCAyNTQsIDc1LCAyMzQsIDEyMCwgNSwgCi0gICAgMjEzLCAxNDcsIDIzNCwgMTIwLCAxLCAxNzYsIDIzNCwgMTIwLCAxLCAyMzQsIDEzMiwgMjM0LCAxMjAsIDEsIDI0MywgMTM1LCAKLSAgICAyMzQsIDEyMCwgMSwgMjQyLCAyNDksIDIzNCwgMTIwLCAxLCAyNTEsIDMzLCAyMzQsIDEyMCwgMSwgMjUwLCAxNTcsIDIzNCwgCi0gICAgMTIwLCAxLCAyMzUsIDE0MSwgMjM0LCAxMjAsIDEsIDIyNywgMTY1LCAyMzQsIDEyMCwgMSwgMjE1LCAxNTYsIDIzNCwgMTIwLCAKLSAgICAxLCAyMTUsIDE0NCwgMjM0LCAxMjAsIDEsIDI0OCwgMTM1LCAyMzQsIDEyMCwgMSwgMjQ4LCAxMTksIDIzNCwgMTIwLCAxLCAKLSAgICAyMjgsIDExMCwgMjM0LCAxMjAsIDEsIDIxNywgMTA1LCAyMzQsIDEyMCwgMSwgMjE2LCAyMDgsIDIzNCwgMTIwLCAxLCAyNDgsIAotICAgIDIyMSwgMjM0LCAxMjAsIDEsIDI0OCwgMjUsIDIzNCwgMTIwLCAxLCAxOTcsIDIzNCwgMTIwLCAxLCAxOTAsIDIzNCwgMTIwLCAKLSAgICAxLCAyMjUsIDE0NywgMjM0LCAxMjAsIDEsIDI1MiwgMTkxLCAyMzQsIDEyMCwgMSwgMjUyLCAxOCwgMjM0LCAxMjAsIDEsIAotICAgIDE4NCwgMjM0LCAxMjAsIDEsIDE5MSwgMjM0LCAxMjAsIDEsIDIwNSwgMjM0LCAxMjAsIDEsIDIzMywgMTM1LCAyMzQsIDEyMCwgCi0gICAgMSwgMjE0LCAyNywgMjM0LCAxMjAsIDEsIDIyMCwgMTAyLCAyMzQsIDEyMCwgMSwgMjE4LCAyMjMsIDIzNCwgMTIwLCAxLCAKLSAgICAyMDYsIDIzNCwgMTIwLCAxLCAyMTAsIDExNiwgMjM0LCAxMjAsIDEsIDE2MiwgMjM0LCAxMjAsIDEsIDIzNCwgNDYsIDIzNCwgCi0gICAgMTIwLCAxLCAyMTUsIDEyNCwgMjM0LCAxMjAsIDUsIDI1MiwgMTQxLCA0OCwgMjM0LCAxMjAsIDUsIDI1MCwgMjIxLCAyMzQsIAotICAgIDEyMCwgNSwgNTksIDUxLCAyMzQsIDEyMCwgMjEzLCAxNTIsIDIzNCwgMTIwLCAyMSwgMTEwLCAyMzQsIDEyMCwgMjEsIDEwNSwgCi0gICAgMjM0LCAxMjAsIDIxLCAxNTgsIDIzNCwgMTIwLCAyMSwgMTYxLCAyMzQsIDEyMCwgNTQsIDIxNiwgMjQ3LCAyMzQsIDEyMCwgCi0gICAgNTQsIDIxNSwgNzMsIDIzNCwgMTIwLCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM0LCAxMjAsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0NywgMTIwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIDQsIDI1MCwgMzUsIDIzNCwgMTIwLCAKLSAgICAyMjQsIDE0MSwgMjUwLCAzNSwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyNDksIDEzNywgMTMwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIAotICAgIDIzMSwgMTgwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIDIzMiwgMTE1LCAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0OCwgMTc4LCAKLSAgICAyMzQsIDEyMCwgMjI0LCAxNDEsIDUyLCAyNDgsIDE3OCwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyMzIsIDIwNywgNTUsIDIxOSwgCi0gICAgMjgsIDI1NCwgMzgsIDEsIDI0MSwgMjM4LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjMzLCA5MywgNTUsIDIxOSwgMjgsIAotICAgIDI1NCwgMzgsIDEsIDI0MSwgMTk1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjMxLCA2NSwgNTUsIDIxOSwgMjgsIDI1NCwgCi0gICAgMzgsIDEsIDIyNCwgMzQsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTIsIDMwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgCi0gICAgMSwgMjIwLCAyMCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMywgNjcsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAKLSAgICAyNTIsIDI1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjE3LCAzNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMSwgCi0gICAgMjI2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjM0LCAyMjUsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjcsIAotICAgIDE5NCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzNCwgMTE2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIyLCAyNCwgCi0gICAgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMSwgMjQ5LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQ0LCAxNTQsIDU1LCAKLSAgICAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNTQsIDE3MCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI1MywgMTYxLCA1NSwgCi0gICAgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQ4LCAyMiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0MiwgMjAxLCA1NSwgMjE5LCAKLSAgICAyOCwgMjU0LCAzOCwgMSwgMjQ4LCAxODgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDIsIDIzOCwgNTUsIDIxOSwgMjgsIAotICAgIDI1NCwgMzgsIDEsIDIxNiwgMjI2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjEwLCA5NiwgNTUsIDIxOSwgMjgsIDI1NCwgCi0gICAgMzgsIDEsIDI0OCwgMTksIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTAsIDIzMiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIAotICAgIDEsIDIxNiwgMTk3LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjE2LCAxNzgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCA1NCwgCi0gICAgMTEwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgNTQsIDI0NCwgMTE0LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMTMyLCAyMzUsIAotICAgIDIzOCwgMjUzLCAxNzIsIDEsIDYxLCAyNTMsIDE3MiwgMSwgMjU1LCA3MywgMjUzLCAxNzIsIDEsIDI1NCwgNzMsIDI1MywgCi0gICAgMTcyLCAxLCAyNTUsIDMyLCAyNTMsIDE3MiwgMSwgMjU0LCAxMjMsIDI1MywgMTcyLCAxLCAyNTUsIDMzLCAyNTMsIDE3MiwgCi0gICAgMSwgMjU0LCAyNDMsIDI1MywgMTcyLCAxLCAyNTQsIDIzOSwgMjUzLCAxNzIsIDEsIDc1LCAyNTMsIDE3MiwgMSwgMjQ1LCAKLSAgICAyMDksIDI1MywgMTcyLCAxLCA3NiwgMjUzLCAxNzIsIDEsIDIyNiwgMTgzLCAyNTMsIDE3MiwgMSwgNzMsIDI1MywgMTcyLCAKLSAgICAxLCAyMzYsIDMzLCAyNTMsIDE3MiwgMSwgNzAsIDI1MywgMTcyLCAxLCAyMTQsIDExOCwgMjUzLCAxNzIsIDEsIDIzNCwgCi0gICAgMTgyLCAyNTMsIDE3MiwgMSwgMjExLCAxNjIsIDI1MywgMTcyLCAxLCAyMTEsIDEyOCwgMjUzLCAxNzIsIDEsIDIxMSwgMTM3LCAKLSAgICAyNTMsIDE3MiwgMSwgMjQzLCA2MiwgMjUzLCAxNzIsIDEsIDI0MywgMjQsIDI1MywgMTcyLCAxLCAyNDIsIDIzNiwgMjUzLCAKLSAgICAxNzIsIDEsIDI1MCwgMTkwLCAyNTMsIDE3MiwgMSwgMjM1LCAxMjYsIDI1MywgMTcyLCAxLCAyMTcsIDIyLCAyNTMsIDE3MiwgCi0gICAgMSwgMjE2LCAxOTUsIDI1MywgMTcyLCAxLCAyNDgsIDkwLCAyNTMsIDE3MiwgMSwgMjQ4LCAxNywgMjUzLCAxNzIsIDEsIAotICAgIDIxNSwgMTUxLCAyNTMsIDE3MiwgMSwgMjI1LCAyMjEsIDI1MywgMTcyLCAxLCAyNDQsIDE1NCwgMjUzLCAxNzIsIDEsIDI1MiwgCi0gICAgNzUsIDI1MywgMTcyLCAxLCAyNTIsIDE0LCAyNTMsIDE3MiwgMSwgMjI5LCA2NCwgMjUzLCAxNzIsIDEsIDIyOCwgMjM5LCAKLSAgICAyNTMsIDE3MiwgMSwgMjI4LCAyNDAsIDI1MywgMTcyLCAxLCAyMjksIDEwNywgMjUzLCAxNzIsIDEsIDIyNywgMTU2LCAyNTMsIAotICAgIDE3MiwgMSwgMjI4LCAxMDUsIDI1MywgMTcyLCAxLCAyMzEsIDkxLCAyNTMsIDE3MiwgMSwgMjQxLCAxMTYsIDI1MywgMTcyLCAKLSAgICAxLCAyMTAsIDE2NiwgMjUzLCAxNzIsIDEsIDIxMSwgNDcsIDI1MywgMTcyLCAxLCAyMTMsIDI1NSwgMjUzLCAxNzIsIDEsIAotICAgIDIyMywgMTI4LCAyNTMsIDE3MiwgMSwgMjMzLCA1OCwgMjUzLCAxNzIsIDEsIDIyMSwgMTgxLCAyNTMsIDE3MiwgMSwgMjEwLCAKLSAgICA5NCwgMjUzLCAxNzIsIDEsIDIyMCwgNjMsIDI1MywgMTcyLCAxLCAyMTAsIDc0LCAyNTMsIDE3MiwgMSwgMjE5LCAxOTgsIAotICAgIDI1MywgMTcyLCAxLCAyMTgsIDE5MywgMjUzLCAxNzIsIDEsIDI0MSwgMjM4LCAyNTMsIDE3MiwgMjU1LCAyMSwgNzgsIDIxNiwgCi0gICAgNzksIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgMTQwLCA0LCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIAotICAgIDE0MCwgMjMzLCA4NSwgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAxNDAsIDIzMywgODUsIDEyMywgNTksIDExNywgCi0gICAgMTEzLCAxNzAsIDIyNCwgMTQwLCAyMzMsIDg1LCAxMTMsIDIyMiwgMjMyLCAxMTcsIDEyMywgMjIyLCAyMzQsIDIyNCwgMTQwLCAKLSAgICAyMzMsIDg1LCAxMjMsIDIyMiwgMjM0LCAxMTcsIDExMywgMjIyLCAyMzIsIDIyNCwgMTQwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIAotICAgIDEsIDI1NCwgMTY4LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI1MiwgMjUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQyLCAKLSAgICAyMDEsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQ4LCAxODgsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQxLCAyMzgsIAotICAgIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjEyLCAzMCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTAsIDk3LCAyMzUsIDIxOCwgCi0gICAgMjI1LCAyNTQsIDEsIDI0MSwgMTk1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxNiwgMjI2LCAyMzUsIDIxOCwgMjI1LCAKLSAgICAyNTQsIDEsIDIxMCwgMjMyLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIzNCwgMjI1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIAotICAgIDIzMywgOTMsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjMxLCA2NSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjcsIDE5NCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjEsIDI0OSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNTMsIDE2MiwgMjM1LCAKLSAgICAyMTgsIDIyNSwgMjU0LCAxLCAyMjUsIDIyMSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjIsIDI0LCAyMzUsIDIxOCwgCi0gICAgMjI1LCAyNTQsIDEsIDIyNCwgMzQsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjIzLCA2NywgMjM1LCAyMTgsIDIyNSwgMjU0LCAKLSAgICAxLCAyMjAsIDIwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxNywgMzYsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDExMCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTA1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxNTgsIDIzNSwgMjE4LCAyMjUsIAotICAgIDI1NCwgNTQsIDE2MSwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMjE2LCAyNDcsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIAotICAgIDIxNSwgNzMsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDEyMywgMjQwLCAyMTAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIAotICAgIDEyMywgMjE2LCAxNDcsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNTQsIDE2OCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI1MiwgCi0gICAgMjUsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNDIsIDIwMSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0OCwgMTg4LCAyMzUsIAotICAgIDIxOCwgMjI2LCA3MiwgMSwgMjQxLCAyMzgsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTIsIDI5LCAyMzUsIDIxOCwgMjI2LCAKLSAgICA3MiwgMSwgMjEwLCA5NywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0MSwgMTk1LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgCi0gICAgMjE2LCAyMjYsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTAsIDIzMiwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzNCwgMjI1LCAKLSAgICAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjMzLCA5MywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzMSwgNjQsIDIzNSwgMjE4LCAKLSAgICAyMjYsIDcyLCAxLCAyMjcsIDE5NCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIyMSwgMjQ5LCAyMzUsIDIxOCwgMjI2LCA3MiwgCi0gICAgMSwgMjI1LCAyMjEsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMjIsIDI0LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjIwLCAKLSAgICAyMCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIxNywgMzYsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTEwLCAyMzUsIDIxOCwgCi0gICAgMjI2LCA3MiwgNTQsIDEwNSwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxNTgsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTYxLCAKLSAgICAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDIxNiwgMjQ3LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDIxNSwgNzMsIDIzNSwgCi0gICAgMjE4LCAyMjYsIDcyLCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgNjEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDYxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDI0MywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDczLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCA3MywgNTUsIDIwMSwgMSwgCi0gICAgMjExLCAzNywgNzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCA3NiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMjM0LCAKLSAgICA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMjYsIDIzNCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NSwgMjUsIDU1LCAyMDEsIDEsIAotICAgIDIxMSwgMzcsIDI1NSwgMjUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDI0MiwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAyNDIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIxNiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMTYsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzNywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzcsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNTQsIDI1NSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyNTUsIDU1LCAyMDEsIDEsIDIyNiwgCi0gICAgMTQ5LCAyNTQsIDI0MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTIsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgCi0gICAgMTIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTMsIDE2NywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAxNjcsIDU1LCAKLSAgICAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyNCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMjQsIDU1LCAyMDEsIDEsIAotICAgIDIyNiwgMTQ5LCAyNTQsIDIzNSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyMjYsIDIzMywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjI2LCAyMzMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDE3OCwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAxNzgsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzNCwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0NSwgMTYxLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxNTksIDU1LCAyMDEsIDEsIDIyNiwgCi0gICAgMTQ5LCAyNTQsIDEyMywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjMyLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIAotICAgIDIzMiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTMxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDEzMSwgNTUsIAotICAgIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTQ3LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDE0NywgNTUsIDIwMSwgMSwgCi0gICAgMjI2LCAxNDksIDI0NSwgMTE4LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDExOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAxMTUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEzOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzEsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEwOCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMTc1LCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjQwLCAxMTMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDIxNSwgNTUsIDIwMSwgMSwgMjExLCAKLSAgICAzNywgMjQ1LCAyMTUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDQ1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIAotICAgIDQ1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjM1LCAxODEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIzNSwgMTgxLCA1NSwgCi0gICAgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAxNTksIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIyNiwgMTU5LCA1NSwgMjAxLCAxLCAKLSAgICAyMjYsIDE0OSwgMjU0LCA0MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCA0MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIAotICAgIDI1NCwgMjMwLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjUzLCAyMzcsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyOCwgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1MywgMjMxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTMsIDIzMSwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0NSwgNzUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgNzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyNTMsIDIwNiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAyMDYsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyNSwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMjUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDE0MCwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI1MiwgMTI1LCAyMjIsIDEyNywgMjEsIDExMCwgMjIyLCAxMjcsIDIxLCAxMDUsIDIyMiwgMTI3LCAKLSAgICAyMSwgMTU4LCAyMjIsIDEyNywgMjEsIDE2MSwgMjIyLCAxMjcsIDIxLCAxODksIDIyMiwgMTI3LCAyMSwgMTk0LCAyMjIsIAotICAgIDEyNywgMjEsIDE5OCwgMjIyLCAxMjcsIDIxLCAxOTUsIDIyMiwgMTI3LCAyMSwgMjAwLCAyMjIsIDEyNywgNTQsIDIxNiwgCi0gICAgMjQ3LCAyMjIsIDEyNywgNTQsIDIxNSwgNzMsIDIyMiwgMTI3LCA1NCwgMjE2LCAxNjIsIDIyMiwgMTI3LCA1NCwgMjQ0LCAKLSAgICAxNSwgMjIyLCAxMjcsIDU0LCAyNDQsIDExNCwgMjIyLCAxMjcsIDU0LCAyMTksIDExMSwgMjIyLCAxMjcsIDU0LCAyMjAsIAotICAgIDExNiwgMjIyLCAxMjcsIDU0LCAyNDUsIDE4NCwgMjIyLCAxMjcsIDU0LCAyMjgsIDE5NSwgMjIyLCAxMjcsIDU0LCAxMjMsIAotICAgIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDExMywgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMTM0LCAyNDAsIDIxMCwgMjIyLCAKLSAgICAxMjcsIDU0LCAyNDQsIDExLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjIyLCAxMjcsIAotICAgIDU0LCAyMTksIDEyNSwgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMjIwLCAxMjIsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIAotICAgIDI0NSwgMTkzLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyMjgsIDIwMCwgMjQwLCAyMTAsIDIyMiwgMTI3LCAyNDQsIDIsIAotICAgIDEyMywgMjQyLCAyNywgMjIyLCAxMjcsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMjIsIDEyNywgMjQ0LCAyLCAxMjMsIDIxNiwgCi0gICAgMTY4LCAyMjIsIDEyNywgMjQ0LCAyLCAxMTMsIDIxNiwgMTY2LCAxMTgsIDUsIDI1MCwgMjU1LCAxMTgsIDUsIDI1NCwgNzUsIAotICAgIDExOCwgNSwgMjEzLCAxNDcsIDExOCwgNSwgMjM1LCAxMDIsIDExOCwgNSwgMjE0LCAxNjEsIDExOCwgMSwgNjEsIDExOCwgMSwgCi0gICAgMjU1LCA3MywgMTE4LCAxLCA3MywgMTE4LCAxLCAyMzYsIDMzLCAxMTgsIDEsIDcwLCAxMTgsIDEsIDIxNCwgMTE4LCAxMTgsIAotICAgIDEsIDE0OSwgMTUzLCAxMTgsIDEsIDE0OSwgMjIyLCAxODAsIDExOCwgMSwgMTQ5LCAxNTYsIDExOCwgMSwgMTQ5LCAyMzIsIAotICAgIDE4NSwgMTE4LCAxLCA3NSwgMTE4LCAxLCAyNTQsIDIwMSwgMTE4LCAxLCA3NiwgMTE4LCAxLCAyNTMsIDE5MiwgMTE4LCAxLCAKLSAgICAxNzYsIDExOCwgMSwgMjM0LCAxMzIsIDExOCwgMSwgMjQzLCAxMzUsIDExOCwgMSwgMjQyLCAyNDksIDExOCwgMSwgMjI5LCAKLSAgICA3NywgMTE4LCAxLCAyNTEsIDMzLCAxMTgsIDEsIDI1MCwgMTU3LCAxMTgsIDEsIDIzNSwgMTQxLCAxMTgsIDEsIDIzNSwgCi0gICAgMTE0LCAxMTgsIDEsIDIyNywgMTY1LCAxMTgsIDEsIDIxNSwgMTU2LCAxMTgsIDEsIDIxNSwgMTQ0LCAxMTgsIDEsIDI0OCwgCi0gICAgMTM1LCAxMTgsIDEsIDI0OCwgMTE5LCAxMTgsIDEsIDIyOCwgMTEwLCAxMTgsIDEsIDIxNywgMTA1LCAxMTgsIDEsIDIxNiwgCi0gICAgMjA4LCAxMTgsIDEsIDI0OCwgMjIxLCAxMTgsIDEsIDI0OCwgMjUsIDExOCwgMSwgMTk3LCAxMTgsIDEsIDE5MCwgMTE4LCAxLCAKLSAgICAyMjUsIDE0NywgMTE4LCAxLCAyNTIsIDE5MSwgMTE4LCAxLCAyNTIsIDE4LCAxMTgsIDEsIDE4NCwgMTE4LCAxLCAxOTEsIAotICAgIDExOCwgMSwgMjA1LCAxMTgsIDEsIDIzMywgMTM1LCAxMTgsIDEsIDIxNCwgMjcsIDExOCwgMSwgMjIwLCAxMDIsIDExOCwgMSwgCi0gICAgMjE4LCAyMjMsIDExOCwgMSwgMjA2LCAxMTgsIDEsIDE2MiwgMTE4LCAxLCAyMzIsIDE4NCwgMTE4LCAxLCA1NSwgMzYsIAotICAgIDIzMiwgMTc1LCAxMTgsIDEsIDU1LCAzNiwgMjIyLCAxNzksIDExOCwgMSwgNTUsIDM2LCAyMjgsIDkyLCAxMTgsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAxMTgsIDI1LCA1LCAyNTIsIDE1LCAyNTUsIDczLCAxMTgsIDI1LCA1LCA3MywgMTE4LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgMTE4LCAyNSwgNSwgNzAsIDExOCwgMjUsIDUsIDIxNCwgMTE4LCAxMTgsIDI1LCA1LCAxNDksIDE1MywgMTE4LCAyNSwgCi0gICAgNSwgMTQ5LCAyMjIsIDE4MCwgMTE4LCAyNSwgNSwgMTQ5LCAxNTYsIDExOCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDExOCwgCi0gICAgMjUsIDUsIDc1LCAxMTgsIDI1LCA1LCAyNTQsIDIwMSwgMTE4LCAyNSwgNSwgNzYsIDExOCwgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAxMTgsIDIxMywgMTUyLCAxMTgsIDI0OCwgMTc4LCAxMTgsIDUyLCAyNDgsIDE3OCwgMTE4LCAyMjQsIDE0MSwgMjQ3LCAxMjAsIAotICAgIDExOCwgMjI0LCAxNDEsIDUyLCAyNDcsIDEyMCwgMTE4LCAyMjQsIDE0MSwgMjMyLCAyMTMsIDExOCwgMjI0LCAxNDEsIDI0OSwgCi0gICAgMTM3LCAxMzAsIDExOCwgMjI0LCAxNDEsIDIzMiwgMTE1LCAxMTgsIDU0LCAxMTAsIDExOCwgNTQsIDEwNSwgMTE4LCA1NCwgCi0gICAgMTU4LCAxMTgsIDU0LCAxNjEsIDExOCwgNTQsIDE4OSwgMTE4LCA1NCwgMTk0LCAxMTgsIDU0LCAxOTgsIDExOCwgNTQsIAotICAgIDE5NSwgMTE4LCA1NCwgMjAwLCAxMTgsIDU0LCAyMTYsIDI0NywgMTE4LCA1NCwgMjE1LCA3MywgMTE4LCA1NCwgMjE2LCAKLSAgICAxNjIsIDExOCwgNTQsIDI0NCwgMTUsIDExOCwgNTQsIDI0NCwgMTE0LCAxMTgsIDU0LCAyMTksIDExMSwgMTE4LCA1NCwgCi0gICAgMjIwLCAxMTYsIDExOCwgNTQsIDI0NSwgMTg0LCAxMTgsIDU0LCAyMjgsIDE5NSwgMTE4LCA1NCwgMTIzLCAyNDAsIDIxMCwgCi0gICAgMTE4LCA1NCwgMTIzLCAyMTYsIDE0NywgMTE4LCAyMSwgMjEwLCA4NiwgMTE4LCAyMSwgMTEwLCAxMTgsIDIxLCAxMDUsIAotICAgIDExOCwgMjEsIDE1OCwgMTE4LCAyMSwgMTYxLCAxMTgsIDIxLCAxODksIDExOCwgMjEsIDE5NCwgMTE4LCAyMSwgMTk4LCAKLSAgICAxMTgsIDIxLCAxOTUsIDExOCwgMjEsIDIwMCwgMjM0LCAyNDQsIDUsIDI1MCwgMjU1LCAyMzQsIDI0NCwgNSwgMjU0LCA3NSwgCi0gICAgMjM0LCAyNDQsIDUsIDIxMywgMTQ3LCAyMzQsIDI0NCwgMSwgNjEsIDIzNCwgMjQ0LCAxLCAyNTUsIDczLCAyMzQsIDI0NCwgCi0gICAgMSwgNzMsIDIzNCwgMjQ0LCAxLCAyMzYsIDMzLCAyMzQsIDI0NCwgMSwgNzAsIDIzNCwgMjQ0LCAxLCAyMTQsIDExOCwgMjM0LCAKLSAgICAyNDQsIDEsIDc1LCAyMzQsIDI0NCwgMSwgMjU0LCAyMDEsIDIzNCwgMjQ0LCAxLCA3NiwgMjM0LCAyNDQsIDEsIDI1MywgCi0gICAgMTkyLCAyMzQsIDI0NCwgMSwgMTc2LCAyMzQsIDI0NCwgMSwgMjM0LCAxMzIsIDIzNCwgMjQ0LCAxLCAyNDMsIDEzNSwgMjM0LCAKLSAgICAyNDQsIDEsIDI0MiwgMjQ5LCAyMzQsIDI0NCwgMSwgMjI5LCA3NywgMjM0LCAyNDQsIDEsIDI1MSwgMzMsIDIzNCwgMjQ0LCAKLSAgICAxLCAyNTAsIDE1NywgMjM0LCAyNDQsIDEsIDIzNSwgMTQxLCAyMzQsIDI0NCwgMSwgMjM1LCAxMTQsIDIzNCwgMjQ0LCAxLCAKLSAgICAyMjcsIDE2NSwgMjM0LCAyNDQsIDEsIDIxNSwgMTU2LCAyMzQsIDI0NCwgMSwgMjE1LCAxNDQsIDIzNCwgMjQ0LCAxLCAyNDgsIAotICAgIDEzNSwgMjM0LCAyNDQsIDEsIDI0OCwgMTI0LCAyMzQsIDI0NCwgMSwgMjQ4LCAxMTksIDIzNCwgMjQ0LCAxLCAyMjMsIDM5LCAKLSAgICAyMzQsIDI0NCwgMSwgMjI4LCAxMTAsIDIzNCwgMjQ0LCAxLCAyMTcsIDEwNSwgMjM0LCAyNDQsIDEsIDIxNiwgMjA4LCAyMzQsIAotICAgIDI0NCwgMSwgMjQ4LCAyMjEsIDIzNCwgMjQ0LCAxLCAyNDgsIDI1LCAyMzQsIDI0NCwgMSwgMTk3LCAyMzQsIDI0NCwgMSwgCi0gICAgMTkwLCAyMzQsIDI0NCwgMSwgMjI1LCAxNDcsIDIzNCwgMjQ0LCAxLCAyNTIsIDE5MSwgMjM0LCAyNDQsIDEsIDI1MiwgMTgsIAotICAgIDIzNCwgMjQ0LCAxLCAxODQsIDIzNCwgMjQ0LCAxLCAxOTEsIDIzNCwgMjQ0LCAxLCAyMDUsIDIzNCwgMjQ0LCAxLCAyMzMsIAotICAgIDEzNSwgMjM0LCAyNDQsIDEsIDIxNCwgMjcsIDIzNCwgMjQ0LCAxLCAyMjAsIDEwMiwgMjM0LCAyNDQsIDEsIDIxOCwgMjIzLCAKLSAgICAyMzQsIDI0NCwgMSwgMjA2LCAyMzQsIDI0NCwgMSwgMTYyLCAyMzQsIDI0NCwgMjUsIDUsIDI1NSwgNzMsIDIzNCwgMjQ0LCAKLSAgICAyNSwgNSwgNzMsIDIzNCwgMjQ0LCAyNSwgNSwgMjM2LCAzMywgMjM0LCAyNDQsIDI1LCA1LCA3MCwgMjM0LCAyNDQsIDI1LCAKLSAgICA1LCAyMTQsIDExOCwgMjM0LCAyNDQsIDI1LCA1LCA3NSwgMjM0LCAyNDQsIDI1LCA1LCAyNTQsIDIwMSwgMjM0LCAyNDQsIAotICAgIDI1LCA1LCA3NiwgMjM0LCAyNDQsIDI1LCA1LCAyNTMsIDE5MiwgMjM0LCAyNDQsIDUsIDIxMywgMTUyLCAyMzQsIDI0NCwgNSwgCi0gICAgMjI3LCAyMDUsIDIzNCwgMjQ0LCAyNTUsIDIxLCA1MCwgMjM0LCAyNDQsIDI0NSwgMTIxLCA1MCwgMjM0LCAyNDQsIDU0LCAKLSAgICA1MCwgMjM0LCAyNDQsIDIyMSwgMTczLCA3OCwgMjM0LCAyNDQsIDUyLCAyMjEsIDE3MywgNzgsIDIzNCwgMjQ0LCAyNDgsIAotICAgIDE3OCwgMjM0LCAyNDQsIDUyLCAyNDgsIDE3OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjIyLCAxOCwgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjE3LCA4MCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjUyLCAxNjgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI1MSwgCi0gICAgMjMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0OCwgMjAzLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDMsIDEyMCwgMjE5LCAKLSAgICAzNiwgMjE5LCA0NCwgMSwgMjMxLCAyMTAsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyOSwgNzQsIDIxOSwgMzYsIDIxOSwgNDQsIAotICAgIDEsIDIzMywgMTEyLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjksIDIxMywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjE0LCAyNCwgCi0gICAgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI2LCA3MywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjExLCA4NCwgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjIzLCAxNjgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0MiwgMzcsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIzNCwgCi0gICAgMjQ4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMzUsIDEzNiwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI3LCAxNjIsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDEsIDI1NCwgMjA5LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDUsIDIwNywgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjM2LCAzNCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjE0LCAyMDgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyNiwgCi0gICAgMjIyLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDUsIDE5NywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjMxLCAyMjMsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDIxLCAyMTAsIDg2LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTEwLCAyMTksIDM2LCAyMTksIDQ0LCAKLSAgICAyMSwgMTA1LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTU4LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTYxLCAyMTksIDM2LCAKLSAgICAyMTksIDQ0LCAyMSwgMTg5LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk0LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk4LCAKLSAgICAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk1LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMjAwLCAyNTAsIDE1MSwgNSwgMjUwLCAKLSAgICAyNTUsIDI1MCwgMTUxLCA1LCAyNTQsIDc1LCAyNTAsIDE1MSwgNSwgMjEzLCAxNDcsIDI1MCwgMTUxLCAxLCAyNTUsIDczLCAKLSAgICAyNTAsIDE1MSwgMSwgNzMsIDI1MCwgMTUxLCAxLCA3MCwgMjUwLCAxNTEsIDEsIDc1LCAyNTAsIDE1MSwgMSwgMjM1LCAxMCwgCi0gICAgMjUwLCAxNTEsIDEsIDIzNCwgMTMxLCAyNTAsIDE1MSwgMSwgMjQzLCAxMzIsIDI1MCwgMTUxLCAxLCAyNDIsIDI0OCwgMjUwLCAKLSAgICAxNTEsIDEsIDIyOSwgNzYsIDI1MCwgMTUxLCAxLCAyNTEsIDMyLCAyNTAsIDE1MSwgMSwgMjUwLCAxNTYsIDI1MCwgMTUxLCAKLSAgICAxLCAyMzUsIDE0MCwgMjUwLCAxNTEsIDEsIDIzNSwgMTEzLCAyNTAsIDE1MSwgMSwgMjI3LCAxNjQsIDI1MCwgMTUxLCAxLCAKLSAgICAyMTUsIDE1NSwgMjUwLCAxNTEsIDEsIDIxNSwgMTQzLCAyNTAsIDE1MSwgMSwgMjQ4LCAxMzQsIDI1MCwgMTUxLCAxLCAyNDgsIAotICAgIDExOCwgMjUwLCAxNTEsIDEsIDIyOCwgMTA5LCAyNTAsIDE1MSwgMSwgMjE3LCAxMDEsIDI1MCwgMTUxLCAxLCAyMTYsIDIwNywgCi0gICAgMjUwLCAxNTEsIDEsIDI0OCwgMjIwLCAyNTAsIDE1MSwgMSwgMjQ4LCAyNCwgMjUwLCAxNTEsIDEsIDIyOSwgMjI1LCAyNTAsIAotICAgIDE1MSwgMSwgMjI2LCA4OSwgMjUwLCAxNTEsIDEsIDIyNSwgMTQ2LCAyNTAsIDE1MSwgMSwgMjUyLCAxODksIDI1MCwgMTUxLCAKLSAgICAxLCAyNTIsIDE3LCAyNTAsIDE1MSwgMSwgMjMxLCAyMzcsIDI1MCwgMTUxLCAxLCAyMTAsIDE2NywgMjUwLCAxNTEsIDEsIAotICAgIDIxMSwgMTAzLCAyNTAsIDE1MSwgMSwgMjIzLCAxODQsIDI1MCwgMTUxLCAxLCAyMzMsIDEzNCwgMjUwLCAxNTEsIDEsIDIxMiwgCi0gICAgNjQsIDI1MCwgMTUxLCAxLCAyMjIsIDMxLCAyNTAsIDE1MSwgMSwgMjQyLCA0NiwgMjUwLCAxNTEsIDI1LCA1LCA2MSwgMjUwLCAKLSAgICAxNTEsIDI1LCA1LCA3MywgMjUwLCAxNTEsIDI1LCA1LCAyMzYsIDMzLCAyNTAsIDE1MSwgMjUsIDUsIDcwLCAyNTAsIDE1MSwgCi0gICAgMjUsIDUsIDIxNCwgMTE4LCAyNTAsIDE1MSwgMjUsIDUsIDc1LCAyNTAsIDE1MSwgMjUsIDUsIDI1NCwgMjAxLCAyNTAsIAotICAgIDE1MSwgMjUsIDUsIDc2LCAyNTAsIDE1MSwgMjUsIDUsIDI1MywgMTkyLCAyNTAsIDE1MSwgMjUsIDUsIDIyNiwgMjE5LCAKLSAgICAyNTAsIDE1MSwgMTQ0LCA3OCwgMjUwLCAxNTEsIDI1MywgMTkzLCA3OCwgMjUwLCAxNTEsIDIxMywgMTUyLCAyNTAsIDE1MSwgCi0gICAgMjMxLCAyMzUsIDI1MCwgMTUxLCAyMSwgMjEwLCA4NiwgMjUwLCAxNTEsIDIxLCAxMTAsIDI1MCwgMTUxLCAyMSwgMTA1LCAKLSAgICAyNTAsIDE1MSwgMjEsIDE1OCwgMjUwLCAxNTEsIDIxLCAxNjEsIDI1MCwgMTUxLCAyMSwgMTg5LCAyNTAsIDE1MSwgMjEsIAotICAgIDE5NCwgMjUwLCAxNTEsIDIxLCAxOTgsIDI1MCwgMTUxLCAyMSwgMTk1LCAyNTAsIDE1MSwgMjEsIDIwMCwgMjUwLCAxNTEsIAotICAgIDIyMSwgMTczLCA3OCwgMjUwLCAxNTEsIDI0OCwgMTc4LCAyNTAsIDE1MSwgNTIsIDI0OCwgMTc4LCAyNTAsIDE1MSwgMjI0LCAKLSAgICAxMywgNzgsIDE3NCwgNSwgMjUwLCAyNTUsIDE3NCwgNSwgMjU0LCA3NSwgMTc0LCA1LCAyMTMsIDE0NywgMTc0LCAxLCA2MSwgCi0gICAgMTc0LCAxLCAyNTUsIDczLCAxNzQsIDEsIDczLCAxNzQsIDEsIDIzNiwgMzMsIDE3NCwgMSwgNzAsIDE3NCwgMSwgMjE0LCAKLSAgICAxMTgsIDE3NCwgMSwgMTQ5LCAxNTMsIDE3NCwgMSwgMTQ5LCAyMjIsIDE4MCwgMTc0LCAxLCAxNDksIDE1NiwgMTc0LCAxLCAKLSAgICAxNDksIDIzMiwgMTg1LCAxNzQsIDEsIDc1LCAxNzQsIDEsIDI1NCwgMjAxLCAxNzQsIDEsIDc2LCAxNzQsIDEsIDI1MywgCi0gICAgMTkyLCAxNzQsIDEsIDE3NiwgMTc0LCAxLCAyMzQsIDEzMiwgMTc0LCAxLCAyNDMsIDEzNSwgMTc0LCAxLCAyNDIsIDI0OSwgCi0gICAgMTc0LCAxLCAyMjksIDc3LCAxNzQsIDEsIDI1MSwgMzMsIDE3NCwgMSwgMjUwLCAxNTcsIDE3NCwgMSwgMjM1LCAxNDEsIAotICAgIDE3NCwgMSwgMjM1LCAxMTQsIDE3NCwgMSwgMjI3LCAxNjUsIDE3NCwgMSwgMjE1LCAxNTYsIDE3NCwgMSwgMjE1LCAxNDQsIAotICAgIDE3NCwgMSwgMjQ4LCAxMzUsIDE3NCwgMSwgMjQ4LCAxMTksIDE3NCwgMSwgMjI4LCAxMTAsIDE3NCwgMSwgMjE3LCAxMDUsIAotICAgIDE3NCwgMSwgMjE2LCAyMDgsIDE3NCwgMSwgMjQ4LCAyMjEsIDE3NCwgMSwgMjQ4LCAyNSwgMTc0LCAxLCAxOTcsIDE3NCwgMSwgCi0gICAgMTkwLCAxNzQsIDEsIDIyNSwgMTQ3LCAxNzQsIDEsIDI1MiwgMTkxLCAxNzQsIDEsIDI1MiwgMTgsIDE3NCwgMSwgMTg0LCAKLSAgICAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMDUsIDE3NCwgMSwgMjMzLCAxMzUsIDE3NCwgMSwgMjMyLCAxODQsIDE3NCwgMSwgCi0gICAgMjE0LCAyNywgMTc0LCAxLCAyMjAsIDEwMiwgMTc0LCAxLCAyMTgsIDIyMywgMTc0LCAxLCAyMDYsIDE3NCwgMSwgMTYyLCAKLSAgICAxNzQsIDI1LCA1LCAyNTUsIDczLCAxNzQsIDI1LCA1LCA3MywgMTc0LCAyNSwgNSwgMjM2LCAzMywgMTc0LCAyNSwgNSwgNzAsIAotICAgIDE3NCwgMjUsIDUsIDIxNCwgMTE4LCAxNzQsIDI1LCA1LCAxNDksIDE1MywgMTc0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgCi0gICAgMTc0LCAyNSwgNSwgMTQ5LCAxNTYsIDE3NCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE3NCwgMjUsIDUsIDc1LCAxNzQsIDI1LCAKLSAgICA1LCAyNTQsIDIwMSwgMTc0LCAyNSwgNSwgNzYsIDE3NCwgMjUsIDUsIDI1MywgMTkyLCAxNzQsIDUsIDIxMywgMTUyLCAxNzQsIAotICAgIDUsIDI1MywgMTc1LCAxNzQsIDUsIDIzNSwgMTAyLCAxNzQsIDUsIDIxNCwgMTYxLCAxNzQsIDIyNiwgMjA0LCAxNzQsIDI0OCwgCi0gICAgMTc4LCAxNzQsIDUyLCAyNDgsIDE3OCwgMTc0LCAyNTUsIDIxLCA1MCwgMTc0LCAyMjAsIDEzNywgMTc0LCAyMSwgMjEwLCAKLSAgICA4NiwgMTc0LCAyMSwgMTEwLCAxNzQsIDIxLCAxMDUsIDE3NCwgMjEsIDE1OCwgMTc0LCAyMSwgMTYxLCAxNzQsIDIxLCAxODksIAotICAgIDE3NCwgMjEsIDE5NCwgMTc0LCAyMSwgMTk4LCAxNzQsIDIxLCAxOTUsIDE3NCwgMjEsIDIwMCwgMjE3LCA2OSwgMSwgNjEsIAotICAgIDIxNywgNjksIDEsIDI1NSwgNzMsIDIxNywgNjksIDEsIDczLCAyMTcsIDY5LCAxLCAyMzYsIDMzLCAyMTcsIDY5LCAxLCA3MCwgCi0gICAgMjE3LCA2OSwgMSwgMjE0LCAxMTgsIDIxNywgNjksIDEsIDc1LCAyMTcsIDY5LCAxLCAyNTQsIDIwMSwgMjE3LCA2OSwgMSwgCi0gICAgNzYsIDIxNywgNjksIDEsIDI1MywgMTkyLCAyMTcsIDY5LCAxLCAxNzYsIDIxNywgNjksIDEsIDIzNCwgMTMyLCAyMTcsIDY5LCAKLSAgICAxLCAyNDMsIDEzNSwgMjE3LCA2OSwgMSwgMjQyLCAyNDksIDIxNywgNjksIDEsIDIyOSwgNzcsIDIxNywgNjksIDEsIDI1MSwgCi0gICAgMzMsIDIxNywgNjksIDEsIDI1MCwgMTU3LCAyMTcsIDY5LCAxLCAyMzUsIDE0MSwgMjE3LCA2OSwgMSwgMjM1LCAxMTQsIAotICAgIDIxNywgNjksIDEsIDIyNywgMTY1LCAyMTcsIDY5LCAxLCAyMTUsIDE1NiwgMjE3LCA2OSwgMSwgMjE1LCAxNDQsIDIxNywgCi0gICAgNjksIDEsIDI0OCwgMTM1LCAyMTcsIDY5LCAxLCAyNDgsIDExOSwgMjE3LCA2OSwgMSwgMjI4LCAxMTAsIDIxNywgNjksIDEsIAotICAgIDIxNywgMTA1LCAyMTcsIDY5LCAxLCAyMTYsIDIwOCwgMjE3LCA2OSwgMSwgMjQ4LCAyMjEsIDIxNywgNjksIDEsIDI0OCwgCi0gICAgMjUsIDIxNywgNjksIDEsIDE5NywgMjE3LCA2OSwgMSwgMTkwLCAyMTcsIDY5LCAxLCAyMjUsIDE0NywgMjE3LCA2OSwgMSwgCi0gICAgMjUyLCAxOTEsIDIxNywgNjksIDEsIDI1MiwgMTgsIDIxNywgNjksIDEsIDE4NCwgMjE3LCA2OSwgMSwgMTkxLCAyMTcsIDY5LCAKLSAgICAxLCAyMDUsIDIxNywgNjksIDEsIDIzMywgMTM1LCAyMTcsIDY5LCAxLCAyMTQsIDI3LCAyMTcsIDY5LCAxLCAyMjAsIDEwMiwgCi0gICAgMjE3LCA2OSwgMSwgMjA2LCAyMTcsIDY5LCAxLCAxNjIsIDIxNywgNjksIDEsIDIyMiwgMTc5LCAyMTcsIDY5LCA1LCAyNTQsIAotICAgIDc1LCAyMTcsIDY5LCA1LCAyMTMsIDE0NywgMjE3LCA2OSwgMjUsIDUsIDI1NSwgNzMsIDIxNywgNjksIDI1LCA1LCA3MywgCi0gICAgMjE3LCA2OSwgMjUsIDUsIDIzNiwgMzMsIDIxNywgNjksIDI1LCA1LCA3MCwgMjE3LCA2OSwgMjUsIDUsIDIxNCwgMTE4LCAKLSAgICAyMTcsIDY5LCAyNSwgNSwgNzUsIDIxNywgNjksIDI1LCA1LCAyNTQsIDIwMSwgMjE3LCA2OSwgMjUsIDUsIDc2LCAyMTcsIAotICAgIDY5LCAyNSwgNSwgMjUzLCAxOTIsIDIxNywgNjksIDUsIDIxMywgMTUyLCAyMTcsIDY5LCA1LCAyMjcsIDIwNSwgMjE3LCA2OSwgCi0gICAgMjEsIDIxMCwgODYsIDIxNywgNjksIDIxLCAxMTAsIDIxNywgNjksIDIxLCAxMDUsIDIxNywgNjksIDIxLCAxNTgsIDIxNywgCi0gICAgNjksIDIxLCAxNjEsIDIxNywgNjksIDIxLCAxODksIDIxNywgNjksIDIxLCAxOTQsIDIxNywgNjksIDIxLCAxOTgsIDIxNywgCi0gICAgNjksIDIxLCAxOTUsIDIxNywgNjksIDIxLCAyMDAsIDE1LCA1LCA2MSwgMTUsIDUsIDExNSwgMzAsIDYxLCAxNSwgNSwgMTE1LCAKLSAgICAzMCwgMjUyLCAxNzYsIDE1LCA1LCAxMTUsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAxMTUsIDMwLCAxNjIsIAotICAgIDE1LCA1LCAxMTUsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMTE1LCAzMCwgMjMzLCAxMTYsIDI0MiwgOTQsIDE1LCA1LCAxMTUsIAotICAgIDMwLCAyMzAsIDYxLCAxNSwgNSwgMTE1LCAzMCwgMjIyLCAyMSwgMTUsIDUsIDI1NSwgNzUsIDE1LCA1LCAyNTUsIDI1LCAxNSwgCi0gICAgNSwgMjU1LCAyNiwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDI0NiwgNjcsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNTUsIDI2LCAzMCwgMjQzLCAxMTgsIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjU1LCAyNiwgMzAsIDE2MiwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjU1LCAyNiwgCi0gICAgMzAsIDIzNiwgOSwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMzMsIDExNywgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMjAsIDQ4LCAKLSAgICAxNSwgNSwgMjU1LCAyNiwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDcwLCAxNSwgNSwgMjU1LCAyNiwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI1NSwgMjMsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjUyLCAxNjAsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjU1LCAyNCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMjAsIAotICAgIDEwMCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjU0LCAyNTUsIDE1LCA1LCAyNTQsIDE4NiwgMTUsIAotICAgIDUsIDI1NCwgMTg3LCAzMCwgMjQ1LCA4NywgMTUsIDUsIDI1NCwgMTg3LCAzMCwgMjIwLCAxMCwgOTYsIDI0MiwgMTkwLCAxNSwgCi0gICAgNSwgMjU0LCAxNzgsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDI1NCwgMTc4LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyNDcsIAotICAgIDIxNiwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjQyLCAxOTAsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDE2MiwgMTUsIDUsIDI1NCwgCi0gICAgMTc5LCAzMCwgMjM0LCAyNTUsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIAotICAgIDIyMCwgNjMsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjU0LCAxNzUsIDE1LCA1LCAyNTQsIDE2OCwgCi0gICAgMTUsIDUsIDI1NCwgMTMyLCAxNSwgNSwgMjU0LCAxMzMsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjU0LCAxMjMsIDE1LCA1LCAKLSAgICAyNTQsIDEyNCwgMTE3LCAyNTQsIDEyMywgMTUsIDUsIDI1NCwgMTI0LCAxMzQsIDIxNiwgODUsIDE1LCA1LCAyNTQsIDEyNCwgCi0gICAgOTYsIDIyOSwgMjE3LCAyMjYsIDE2NCwgMjU0LCAxMjQsIDk2LCAyMjksIDIxNiwgMTUsIDUsIDI1NCwgMTI0LCA5NiwgMjI5LCAKLSAgICAyMTcsIDIxOCwgMjMzLCAxNSwgNSwgMjU0LCA5NCwgMTUsIDUsIDI1NCwgNjcsIDE1LCA1LCAyNTQsIDM1LCAxNSwgNSwgCi0gICAgMjU0LCAzNiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjU0LCA4LCAxNSwgNSwgMjUzLCAyMzYsIDE1LCA1LCAyNTMsIDIzMSwgCi0gICAgMTUsIDUsIDI1MywgMjMyLCAyMTAsIDQwLCAyMTYsIDIzOSwgMTUsIDUsIDI1MywgMjMyLCAyMzUsIDMsIDIxNiwgMjM5LCAKLSAgICAxNSwgNSwgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDIxNSwgMTE0LCAxMTcsIDIxNSwgMTE0LCAyMTUsIDExNCwgMTE3LCAKLSAgICAyMTUsIDExNCwgMjI2LCAyMSwgMTUsIDUsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMxLCAxNSwgNSwgCi0gICAgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDI0OSwgMTI1LCAyNTMsIDIzMiwgMTE3LCAyNTMsIAotICAgIDIzMiwgMTE3LCAyNTMsIDIzMSwgMTUsIDUsIDI1MywgMjI5LCAxNSwgNSwgMjUzLCAyMjYsIDE1LCA1LCAyNTIsIDE5MSwgCi0gICAgMTUsIDUsIDI1MiwgMTc2LCAxNSwgNSwgMjUyLCAxNzEsIDE1LCA1LCAyNTIsIDE2NywgMTUsIDUsIDI1MiwgMTYxLCAxNSwgCi0gICAgNSwgMjUyLCAxNjIsIDExNywgMjUyLCAxNjEsIDE1LCA1LCAyNTIsIDE2MCwgMTUsIDUsIDEzMCwgMTUsIDUsIDI1MiwgMTQwLCAKLSAgICAxNSwgNSwgMjUyLCA2LCAxNSwgNSwgMjUyLCA3LCAzMCwgNjEsIDE1LCA1LCAyNTIsIDcsIDMwLCAyNDMsIDk2LCAxNSwgNSwgCi0gICAgMjUyLCA3LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI1MSwgMTI1LCAxNSwgNSwgMjUxLCAxMjYsIDExNywgMjUxLCAKLSAgICAxMjYsIDI1NSwgMjUsIDE1LCA1LCAyNTEsIDEyNiwgMTE3LCAyNTEsIDEyNiwgMjE0LCAxOTAsIDE1LCA1LCAyNTEsIDEyNiwgCi0gICAgMjQ5LCAxMjUsIDI1MSwgMTI1LCAxNSwgNSwgMjUxLCAxMDksIDE1LCA1LCAyNTEsIDExMCwgMTE3LCAyNTEsIDEwOSwgMTUsIAotICAgIDUsIDI1MSwgOTgsIDE1LCA1LCAyNTEsIDk3LCAxNSwgNSwgMjQ4LCAyMjEsIDE1LCA1LCAyNDgsIDIxMiwgMTUsIDUsIDI0OCwgCi0gICAgMjEzLCAyMzQsIDY2LCAzMCwgMTE1LCA5NiwgMjMxLCAxNDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI1NCwgCi0gICAgMTMyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNTIsIDE2MCwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAKLSAgICAzMCwgMjUyLCA2LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIAotICAgIDY2LCAzMCwgMjQzLCAxMzYsIDk2LCAyMzEsIDE0NywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjQyLCAyMTQsIAotICAgIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAKLSAgICAyNDIsIDEwMywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMTYyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIAotICAgIDMwLCAyMzUsIDE3OSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjM1LCAxODAsIDk2LCAyMzIsIDk4LCAxNSwgNSwgCi0gICAgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMzLCAxMzUsIAotICAgIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgCi0gICAgOTksIDk2LCAyMzEsIDE0NiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMyLCA4NCwgMTUsIDUsIDI0OCwgMjEzLCAKLSAgICAyMzQsIDY2LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIyNiwgMjIsIDk2LCAyMjYsIAotICAgIDIxLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMTksIDE5MSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgCi0gICAgMjE3LCA3MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE0LCAyMzEsIDk2LCAyNDIsIDE5NywgMTUsIDUsIAotICAgIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyNDgsIDE4NywgMTUsIDUsIDI0OCwgMTY2LCAxNSwgNSwgCi0gICAgMjQ4LCAxNjUsIDE1LCA1LCAyNDgsIDE2NCwgMTUsIDUsIDI0OCwgMywgMTUsIDUsIDI0NywgMjQyLCAxNSwgNSwgMjQ3LCAKLSAgICAyMTcsIDE1LCA1LCAyNDcsIDIxOCwgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDcsIDIxNiwgMTUsIDUsIDI0NywgMjA2LCAxNSwgCi0gICAgNSwgMjQ3LCAyMDcsIDIzNCwgMjA4LCAxMDQsIDI0MiwgOTUsIDI0NywgMTg3LCAxNSwgNSwgMjQ3LCAxODcsIDE1LCA1LCAKLSAgICAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMTE3LCAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI0NiwgNzksIDIyMCwgNDUsIDE1LCA1LCAyNDYsIDc2LCAxNSwgNSwgMjQ2LCA3NywgMzAsIDI0NSwgNzIsIDE1LCA1LCAKLSAgICAyNDYsIDc1LCAxNSwgNSwgMjQ2LCA3NCwgMTUsIDUsIDI0NiwgNzMsIDE1LCA1LCAyNDYsIDcyLCAxNSwgNSwgMjQ2LCA2OCwgCi0gICAgMTUsIDUsIDI0NiwgNjYsIDE1LCA1LCAyNDYsIDY3LCAyNDIsIDk0LCAxNSwgNSwgMjQ2LCA2NywgMjQyLCA5NSwgMjQyLCAKLSAgICA5NCwgMTUsIDUsIDI0NiwgNjUsIDE1LCA1LCAyNDYsIDU4LCAxNSwgNSwgNzUsIDE1LCA1LCAxNjAsIDMwLCAyMjYsIDIxLCAKLSAgICAxNSwgNSwgMTYwLCAxMTcsIDE2MCwgMjI3LCAxOTUsIDExNywgMjI3LCAxOTQsIDE1LCA1LCAyNDUsIDIzNCwgMTUsIDUsIAotICAgIDI0NSwgMjM1LCAzMCwgMTE1LCA5NiwgMjQyLCA0OSwgOTYsIDI0OCwgMjIxLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyNDMsIAotICAgIDk2LCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDI0NSwgMjM1LCAzMCwgMjIyLCA4LCAxNSwgNSwgCi0gICAgMjQ1LCAyMzUsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCA3MCwgMTUsIDUsIDI0NSwgMjExLCAxNSwgNSwgCi0gICAgMjQ1LCAyMDAsIDE1LCA1LCAyNDUsIDE3NCwgMTUsIDUsIDI0NSwgMTUwLCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyNDMsIAotICAgIDEwNCwgMTUsIDUsIDI0NSwgMTUxLCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyMzEsIAotICAgIDkxLCAxNSwgNSwgMjQ1LCAxNTEsIDI0OSwgMTI1LCAyNDUsIDE1MCwgMTUsIDUsIDI0NSwgMTUxLCAyMjYsIDE2NCwgMjQ1LCAKLSAgICAxNTAsIDE1LCA1LCAyNDUsIDE1MSwgMjE4LCAyMzMsIDE1LCA1LCAyNDUsIDg5LCAxNSwgNSwgMjQ1LCA4NywgMTUsIDUsIAotICAgIDI0NSwgNzIsIDE1LCA1LCAyNDUsIDEwLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDYxLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDExNSwgCi0gICAgOTYsIDIzMywgMTA0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDExNSwgOTYsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAKLSAgICAyNDUsIDExLCAzMCwgMjU0LCAxMjMsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjQ2LCA2NywgMjQyLCA5NCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNDYsIDY3LCAyNDIsIDk1LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjQ1LCAxMSwgMzAsIDE2MiwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNDIsIDQ5LCAyNDIsIDk0LCAxNSwgNSwgMjQ1LCAxMSwgCi0gICAgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjM0LCAyMDgsIDIxOCwgMjMzLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMywgMjE1LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDIzMywgMTM1LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjMyLCAyNDEsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjMyLCA5OCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMTQsIDIzMCwgMTUsIAotICAgIDUsIDI0NSwgMTEsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzYsIDI0MiwgOTQsIDE1LCAKLSAgICA1LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTE1LCA5NiwgMjQ4LCAyMjIsIDk2LCAxNjIsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDExNSwgOTYsIDE2MiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTE1LCA5NiwgMjM2LCAzNSwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjU1LCAyNCwgMjE2LCAyNDAsIDk2LCAyMTcsIDkzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTQsIDEyMywgCi0gICAgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUzLCAyMzEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MywgMjMwLCA5NiwgMjQzLCAKLSAgICAxMTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTIsIDE0MSwgOTYsIAotICAgIDIwNSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUxLCA5OCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUxLCA5OSwgOTYsIDIwNSwgCi0gICAgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ4LCAyMjEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0OCwgMywgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQ3LCAyMTgsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDYsIDc2LCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDUsIDE3NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ1LCAxNzUsIDk2LCAyMzMsIDEzNSwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjQ1LCAxNTAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0NSwgMTUxLCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMjE0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDIxMiwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjQyLCAyMTMsIDk2LCA2MSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAxOTgsIDk2LCAyMTgsIAotICAgIDgzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDQ5LCA5NiwgMjMyLCA5OSwgOTYsIDI0NSwgNzIsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0MiwgMzAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMzEsIDk2LCAyMzMsIDEzNSwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQxLCAxODEsIDk2LCAyMzIsIDI0MSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQwLCAyMTgsIDE1LCA1LCAKLSAgICAyNDMsIDEzNCwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNSwgMTY2LCA5NiwgMjQwLCAKLSAgICAyMjMsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIAotICAgIDIzNCwgMjA3LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDg5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDkwLCA5NiwgCi0gICAgMjMzLCAxMDQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzMywgMjE2LCA5NiwgMjU0LCAxMjMsIDE1LCA1LCAyNDMsIDEzNCwgCi0gICAgMzAsIDIzMywgMTM1LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjI3LCAxOTUsIDExNywgMjI3LCAxOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDE5MCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjIyLCA4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjEsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjIwLCA2MywgMTUsIAotICAgIDUsIDI0MywgMTM0LCAzMCwgMjIwLCA2NCwgOTYsIDIxNSwgOTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyMCwgMzAsIDE1LCAKLSAgICA1LCAyNDMsIDEzNCwgMzAsIDIxOCwgNDMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIxNywgNzIsIDE1LCA1LCAyNDMsIDEzNCwgCi0gICAgMzAsIDcwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjE0LCAyMjAsIDk2LCAKLSAgICAyNDYsIDc4LCAxNSwgNSwgMjQzLCAxMzQsIDExNywgMjQzLCAxMzMsIDE1LCA1LCAyNDMsIDEyOCwgMTUsIDUsIDI0MywgCi0gICAgMTI5LCAyNDksIDEyNSwgMjQzLCAxMjgsIDE1LCA1LCAyNDMsIDEyNiwgMTUsIDUsIDI0MywgMTI3LCAxMTcsIDI0MywgMTI3LCAKLSAgICAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAyNDMsIDExOCwgMTUsIDUsIDI0MywgMTE5LCAyNDMsIDEyNywgMTE3LCAKLSAgICAyNDMsIDEyNywgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMjQzLCAxMTcsIDE1LCA1LCAyNDMsIDExNSwgMTUsIDUsIAotICAgIDI0MywgMTA2LCAxNSwgNSwgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDMsIDEwNSwgCi0gICAgMTE3LCAyNDMsIDEwNCwgMTUsIDUsIDI0MywgMTA1LCAyNDksIDEyNSwgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDk2LCAxNSwgCi0gICAgNSwgMjQzLCA5NSwgMTUsIDUsIDI0MywgOTAsIDE1LCA1LCAyNDMsIDM2LCAxNSwgNSwgMjQzLCAzNywgMzAsIDIzMywgMTk2LCAKLSAgICAxNSwgNSwgMjQyLCAyMTQsIDE1LCA1LCAyNDIsIDIxNSwgMzAsIDc1LCAxNSwgNSwgMjQyLCAyMTUsIDMwLCA3MCwgMTUsIDUsIAotICAgIDI0MiwgMjE1LCAyNDksIDEyNSwgMjQyLCAyMTQsIDE1LCA1LCAyNDIsIDIxMiwgMTUsIDUsIDI0MiwgMjEzLCAxMTcsIDI0MiwgCi0gICAgMjEyLCAxNSwgNSwgMjQyLCAyMTMsIDI0OSwgMTI1LCAyNDIsIDIxMiwgMTUsIDUsIDI0MiwgMjA5LCAxNSwgNSwgMjQyLCAKLSAgICAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMTk1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAxMTUsIAotICAgIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDIsIDE5NiwgCi0gICAgMzAsIDIzNiwgMzUsIDE1LCA1LCAyNDIsIDE5NiwgMzAsIDIzMiwgOTksIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIAotICAgIDMwLCAxOTAsIDE1LCA1LCAyNDIsIDE5MiwgMTUsIDUsIDI0MiwgMTkwLCAxNSwgNSwgMjQyLCAxOTEsIDI0OSwgMTI1LCAKLSAgICAyNDIsIDE5MCwgMTUsIDUsIDI0MiwgMTkxLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDIsIDE5MSwgMzAsIDIxNywgNzIsIAotICAgIDE1LCA1LCAyNDIsIDE5MSwgMjE2LCAyMzksIDE1LCA1LCAyNDIsIDExMywgMTUsIDUsIDI0MiwgMTE0LCAyNDksIDEyNSwgCi0gICAgMjQyLCAxMTMsIDE1LCA1LCAyNDIsIDExMSwgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDIsIAotICAgIDExMiwgMzAsIDIzNCwgMjQzLCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjI3LCAxOTQsIAotICAgIDE1LCA1LCAyNDIsIDExMiwgMzAsIDIyMiwgOSwgOTYsIDIxNSwgMTEzLCAxNSwgNSwgMjQyLCAxMTIsIDI0MiwgOTQsIDE1LCAKLSAgICA1LCAyNDIsIDEwMywgMTUsIDUsIDI0MiwgMTA0LCAzMCwgMTE1LCA5NiwgMjMzLCAxOTYsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIAotICAgIDIzMywgMTk2LCAxNSwgNSwgMjQyLCAxMDQsIDExNywgMjQyLCAxMDQsIDIzMiwgOTEsIDE1LCA1LCAyNDIsIDk4LCAxNSwgNSwgCi0gICAgMjQyLCA5NiwgMTUsIDUsIDI0MiwgOTcsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQyLCA4OCwgMTUsIDUsIDI0MiwgODcsIDE1LCAKLSAgICA1LCAyNDIsIDg0LCAxNSwgNSwgMjQyLCA4MywgMTUsIDUsIDE2MiwgMTUsIDUsIDI0MiwgNDksIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjQyLCA0OSwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMzAsIDE1LCA1LCAyNDEsIDE4MCwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgCi0gICAgMjUzLCAyMzEsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNTIsIDE3NiwgCi0gICAgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjQ3LCAxODcsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI0MywgMTI2LCAxNSwgNSwgMjQxLCAKLSAgICAxODEsIDMwLCAyMzQsIDgxLCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgCi0gICAgMjIwLCA2MywgMTUsIDUsIDI0MSwgMTgxLCAzMCwgNzAsIDE1LCA1LCAyNDAsIDIyMiwgMTUsIDUsIDI0MCwgMjE4LCAxNSwgCi0gICAgNSwgMjQwLCAyMTksIDMwLCAyNTQsIDEyMywgMTUsIDUsIDI0MCwgMjE5LCAzMCwgMjQyLCAzMCwgMTUsIDUsIDI0MCwgMjE5LCAKLSAgICAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyNDAsIDIxOSwgMzAsIDIzMiwgMTk3LCAxNSwgNSwgMjQwLCAyMTksIDMwLCAyMTQsIAotICAgIDIxOSwgMTUsIDUsIDI0MCwgMjE1LCAxNSwgNSwgNzMsIDE1LCA1LCAyNDAsIDE1NCwgNjEsIDE1LCA1LCAyNDAsIDExNSwgCi0gICAgMTUsIDUsIDIzNiwgNjMsIDE1LCA1LCAyMzYsIDY0LCAxMTcsIDIzNiwgNjQsIDI1MSwgOTgsIDE1LCA1LCAyMzYsIDY0LCAKLSAgICAxMTcsIDIzNiwgNjQsIDIxOCwgMjMzLCAxNSwgNSwgMjM2LCAzOCwgMTUsIDUsIDIzNiwgMzUsIDE1LCA1LCAyMzYsIDM2LCAKLSAgICAyNDcsIDI0MiwgMTUsIDUsIDIzNiwgMzYsIDIyMywgMzUsIDE1LCA1LCAyMzYsIDM2LCAxMTcsIDIzNiwgMzYsIDIyMCwgMTQsIAotICAgIDExNywgMjIwLCAxNCwgMjE0LCAyMjAsIDExNywgMjE0LCAyMTksIDE1LCA1LCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjM2LCAyNywgMTUsIDUsIDIzNiwgMjgsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMzYsIDI2LCAxNSwgNSwgCi0gICAgMjM2LCAxNiwgMTUsIDUsIDIzNiwgMTcsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjM2LCAxNywgMjQ5LCAxMjUsIDIzNiwgMTYsIAotICAgIDE1LCA1LCAyMzYsIDE3LCAyMjYsIDE2NCwgMjM2LCAxNiwgMTUsIDUsIDIzNiwgMTcsIDIxOCwgMjMzLCAxNSwgNSwgMjM2LCAKLSAgICA5LCAxNSwgNSwgMjM1LCAyNTUsIDE1LCA1LCAyMzUsIDE3OSwgMTUsIDUsIDIzNSwgMTY1LCAxNSwgNSwgMTc2LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDYxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1NCwgMjU1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1NSwgCi0gICAgMCwgOTYsIDIzMywgMjE1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MiwgCi0gICAgMTc2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MiwgMTYwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDEzMCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQ1LCA4NywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDUsIDcyLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgMTM1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgMTE4LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjM1LCAxMywgCi0gICAgMzAsIDI0MywgOTcsIDk2LCAyMjAsIDEwMSwgOTYsIDYxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMjE0LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMTkxLCA5NiwgMjIxLCAyMzEsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjQyLCAxOTEsIDI0OSwgMTI1LCAyNDIsIDE5MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDExMywgCi0gICAgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDg3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMzUsIDEzLCAKLSAgICAzMCwgMjM2LCAxNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDkyLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNCwgODksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMyLCAyNDEsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjMyLCA5OCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzEsIDkxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgCi0gICAgOTIsIDk2LCAyNDYsIDc4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgOTIsIDk2LCAyNDIsIDIxNCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzEsIDkyLCA5NiwgMjE3LCAyMiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzAsIDIzMSwgOTYsIDIyNywgMTg5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyNSwgMTA4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMiwgCi0gICAgMTQwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIwNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjEsIDIzMSwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMjAsIDEwMiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMCwgCi0gICAgMzAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE5LCAxODIsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjE4LCA1MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTcsIDUwLCAxNSwgNSwgMjM1LCAxMywgMzAsIAotICAgIDcwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMjE5LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDIxNCwgMTkzLCAzMCwgMTkwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIxMCwgNDQsIDE1LCA1LCAyMzUsIDExLCAxNSwgNSwgMjM1LCAxMiwgMjQ5LCAxMjUsIDIzNSwgMTEsIDE1LCAKLSAgICA1LCAyMzUsIDQsIDE1LCA1LCAyMzUsIDEsIDE1LCA1LCAyMzQsIDI1NSwgMTUsIDUsIDIzNCwgMjU0LCAxNSwgNSwgMjM0LCAKLSAgICAyNTIsIDE1LCA1LCAyMzQsIDI1MywgMTE3LCAyMzQsIDI1MiwgMTUsIDUsIDIzNCwgMjQyLCAxNSwgNSwgMjM0LCAyNDMsIAotICAgIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjM0LCAyMzgsIDE1LCA1LCAyMzQsIDIzOSwgMzAsIDI1MiwgMTc2LCAxNSwgCi0gICAgNSwgMjM0LCAyMzksIDI0OSwgMTI1LCAyMzQsIDIzOCwgMTUsIDUsIDIzNCwgMjM2LCAxNSwgNSwgMjM0LCAyMzUsIDE1LCA1LCAKLSAgICAyMzQsIDIwNywgMTUsIDUsIDIzNCwgMjA4LCAyMzMsIDExOCwgMzAsIDEwNCwgMTE3LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgCi0gICAgNSwgMjM0LCAyMDgsIDExNywgMjM0LCAyMDgsIDIzMywgMTE4LCAzMCwgMTA0LCAxMTcsIDIzMywgMTE4LCAzMCwgNzAsIDE1LCAKLSAgICA1LCAyMzQsIDE1NywgMTUsIDUsIDIzNCwgOTIsIDE1LCA1LCAyMzQsIDkzLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzQsIAotICAgIDkzLCAzMCwgNzAsIDE1LCA1LCAyMzQsIDkzLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzQsIDg5LCAxNSwgNSwgMjM0LCA4MSwgCi0gICAgMTUsIDUsIDIzNCwgNjgsIDE1LCA1LCAyMzQsIDY3LCAxNSwgNSwgMjM0LCA2NSwgMTUsIDUsIDIzNCwgNjYsIDExNywgMjM0LCAKLSAgICA2NSwgMTUsIDUsIDIzMywgMjE3LCAxNSwgNSwgMjMzLCAyMTgsIDExNywgMjQxLCAxODEsIDMwLCAyNTMsIDIzMCwgMjMzLCAKLSAgICAyMTgsIDExNywgMjQxLCAxODEsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAyMTMsIDE1LCAKLSAgICA1LCAyMzMsIDIxNCwgMjE0LCAxMiwgMTcsIDE1LCA1LCAyMzMsIDIxMiwgMTUsIDUsIDIzMywgMjA5LCAxNSwgNSwgMjMzLCAKLSAgICAyMTAsIDI0MiwgOTQsIDE1LCA1LCAyMzMsIDIwOCwgMTUsIDUsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxOTcsIDIyNiwgCi0gICAgMTY0LCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTkxLCAxNSwgNSwgMjMzLCAxNzIsIDE1LCA1LCAyMzMsIDEzNSwgMTUsIDUsIAotICAgIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTE1LCA5NiwgMjQ4LCAKLSAgICAyMjIsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDExNSwgOTYsIDI0MywgOTYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDExNSwgOTYsIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNTQsIDE3OCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjU0LCAxMjMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1MywgMjMyLCAyMTAsIDQwLCAyMTYsIDIzOSwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1MiwgNiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQ4LCAKLSAgICAxNjYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0NSwgMTUwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDI0MiwgMTA0LCA5NiwgMjQyLCAxMDMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjQyLCAzMCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQxLCAxODEsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM2LCAxNiwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjM2LCAxNywgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM2LCAxNywgOTYsIDIzMiwgOTgsIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzNCwgODEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDIwOSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMzLCAyMTAsIAotICAgIDk2LCAyNDEsIDE4MSwgOTYsIDYxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDExNywgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjMyLCAxOTcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMiwgODYsIDE1LCAKLSAgICA1LCAyMzMsIDExOCwgMzAsIDIzMSwgOTEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjMwLCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDIyMCwgNjQsIDk2LCAyMTgsIDQzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTEsIDk2LCAKLSAgICAyNDUsIDg3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTEsIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDMwLCAyMTksIDIyMywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE5LCAyMjQsIDk2LCAyMTksIDIyMywgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE3LCA4NCwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjE3LCA3MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE3LCAyMywgOTYsIDExNSwgOTYsIDIxOCwgODQsIDk2LCAxOTcsIAotICAgIDE1LCA1LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAKLSAgICAyMzEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAyMTgsIDIzMywgMTUsIDUsIDIzMywgMTE1LCAxNSwgNSwgMjMzLCAxMTYsIDMwLCAyMjAsIDYzLCAxNSwgNSwgCi0gICAgMjMzLCAxMTYsIDMwLCAyMjAsIDY0LCA5NiwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE2LCAyNDIsIDk0LCAxNSwgNSwgMjMzLCAKLSAgICAxMTYsIDI0MiwgOTUsIDExNywgMjMzLCAxMTYsIDI0MiwgOTUsIDIyMCwgNjMsIDE1LCA1LCAyMzMsIDExMSwgMTUsIDUsIAotICAgIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMDUsIDMwLCAyMzMsIDEwNCwgMTUsIDUsIDIzMywgMTAyLCAxNSwgNSwgMjMzLCAKLSAgICAxMDMsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTAzLCAzMCwgMjMzLCAxOTcsIDk2LCAyMjIsIDE0MCwgMTUsIDUsIAotICAgIDIzMiwgMjQxLCAxNSwgNSwgMjMyLCAyMjYsIDE1LCA1LCAyMzIsIDIxNiwgMTUsIDUsIDIzMiwgMTk3LCAxNSwgNSwgMjMyLCAKLSAgICA5OCwgMTUsIDUsIDIzMiwgOTksIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgCi0gICAgMjU0LCAxNzgsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQ1LCA3MiwgMTUsIAotICAgIDUsIDIzMiwgOTcsIDMwLCAyNDUsIDczLCAyMTYsIDIzOSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNDMsIDEwNSwgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQxLCAxODEsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzYsIAotICAgIDE2LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNSwgMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzQsIDI1NSwgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMzUsIDAsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIzMywgMTM2LCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIyNywgMjM3LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIxOSwgMTkyLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjE5LCAxNzQsIDk2LCAyNTEsIDEyNSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMTUsIDExMywgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDIxNiwgMjM5LCAxNSwgNSwgMjMyLCA5NywgMjQ5LCAxMjUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMjYsIAotICAgIDE2NCwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIxOCwgMjMzLCAxNSwgNSwgMjMyLCA5NywgMjIwLCA0NSwgMTUsIDUsIAotICAgIDIzMiwgOTUsIDE1LCA1LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgMTE3LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgCi0gICAgMjI2LCAxNjQsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDkyLCAyMjAsIDQ1LCAxNSwgNSwgMjMyLCA4OSwgMTUsIDUsIDIzMiwgCi0gICAgODYsIDE1LCA1LCAyMzIsIDg0LCAxNSwgNSwgMjMyLCA4NSwgMTE3LCAyMzIsIDg0LCAxNSwgNSwgMjMyLCA4NSwgMTE3LCAKLSAgICAyMzIsIDg1LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAxODQsIDE1LCA1LCAyMzEsIDIzOSwgMzAsIDIxNywgNzIsIAotICAgIDE1LCA1LCAyMzEsIDIzOSwgMjQyLCA5NCwgMTUsIDUsIDIzMSwgMjM4LCAxNSwgNSwgMjMxLCAyMTAsIDE1LCA1LCAyMzEsIAotICAgIDE2NiwgMTUsIDUsIDIzMSwgMTQ3LCAxNSwgNSwgMjMxLCAxNDYsIDE1LCA1LCAyMzEsIDkxLCAxNSwgNSwgMjMxLCA0NywgCi0gICAgMTUsIDUsIDIzMCwgMjMwLCAxNSwgNSwgMjMwLCAxODgsIDE1LCA1LCAyMzAsIDEwMiwgMTUsIDUsIDIzMCwgMTAzLCAxMTcsIAotICAgIDIzMCwgMTAyLCAxNSwgNSwgMjMwLCA5MywgMTUsIDUsIDIzMCwgOTQsIDI0MiwgOTQsIDE1LCA1LCAyMzAsIDc4LCAxNSwgNSwgCi0gICAgMjMwLCA2NCwgMTUsIDUsIDIzMCwgNjEsIDE1LCA1LCAyMzAsIDYyLCAzMCwgNjEsIDE1LCA1LCAyMzAsIDYyLCAzMCwgMjMzLCAKLSAgICAxOTYsIDE1LCA1LCAyMzAsIDYyLCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMzAsIDYyLCAxMTcsIDIzMCwgNjEsIDE1LCA1LCAKLSAgICAyMzAsIDYyLCAxMTcsIDIzMCwgNjIsIDMwLCAxMTUsIDk2LCAxOTcsIDE1LCA1LCAyMzAsIDYyLCAyNDksIDEyNSwgMjMwLCAKLSAgICA2MSwgMTUsIDUsIDIzMCwgNTksIDE1LCA1LCAyMzAsIDYwLCAzMCwgNjEsIDE1LCA1LCAyMzAsIDYwLCAzMCwgMTE1LCA5NiwgCi0gICAgMjQ4LCAzLCAxNSwgNSwgMjMwLCA2MCwgMzAsIDI0OCwgMywgMTUsIDUsIDIzMCwgNjAsIDI0MiwgOTQsIDE1LCA1LCAxOTcsIAotICAgIDE1LCA1LCAyMjksIDIyNywgMTUsIDUsIDIyOSwgMjE2LCAxNSwgNSwgMjI5LCAyMTcsIDIzNSwgMTkyLCAxNSwgNSwgMjI5LCAKLSAgICAyMTcsIDMwLCAyMTksIDIyNiwgMjE2LCAyMzksIDE1LCA1LCAyMjksIDIxNywgMjI2LCAxNjQsIDIyOSwgMjE2LCAxNSwgNSwgCi0gICAgMjI5LCAyMTUsIDE1LCA1LCAyMjksIDIwOCwgMjI3LCAxODAsIDE1LCA1LCAyMjksIDIwNywgMTUsIDUsIDIyOSwgMjA2LCAKLSAgICAxNSwgNSwgMjI5LCAxMDcsIDE1LCA1LCAyMjksIDEwOCwgMzAsIDYxLCAxNSwgNSwgMjI5LCAxMDgsIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIyOSwgMTA4LCAyMjAsIDQ1LCAxNSwgNSwgMjI4LCAyMzMsIDE1LCA1LCAyMjgsIDIzNCwgMzAsIDc1LCAxNSwgCi0gICAgNSwgMjI4LCAyMzIsIDE1LCA1LCAyMjgsIDIwMywgMTUsIDUsIDIyOCwgMjA0LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAKLSAgICAxNSwgNSwgMjI4LCAyMDQsIDMwLCAyNDMsIDk3LCA5NiwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjI4LCAyMDEsIAotICAgIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDI1NCwgMTIzLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgCi0gICAgMjAyLCAzMCwgMjUzLCAyMzIsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAKLSAgICAyMjgsIDIwMiwgMzAsIDIzMSwgOTIsIDk2LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyOSwgCi0gICAgMTA3LCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2MywgMTUsIDUsIAotICAgIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgOTYsIDExNSwgMjU0LCAxMjMsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyMCwgNjQsIAotICAgIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgOTYsIDI1MywgMjMyLCA5NiwgMjUzLCAyMzEsIAotICAgIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIxNCwgCi0gICAgMTI2LCAxNSwgNSwgMjI4LCAxOTAsIDE1LCA1LCAyMjcsIDIzNywgMTUsIDUsIDIyNywgMjEwLCAxNSwgNSwgMjI3LCAxOTQsIAotICAgIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgCi0gICAgMjMxLCAxNDcsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAKLSAgICAxMTYsIDMwLCAyMjIsIDksIDExNywgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgMjIyLCA4LCAxNSwgNSwgMjI3LCAxOTUsIAotICAgIDIzMywgMTE2LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjcsIDE5NSwgMjE2LCAyMzksIDE1LCA1LCAyMjcsIDE5NSwgMTE3LCAKLSAgICAyMjcsIDE5NCwgMTUsIDUsIDIyNywgMTk1LCAyNDksIDEyNSwgMjI3LCAxOTQsIDE1LCA1LCAyMjcsIDE5NSwgMjQ5LCAxMjUsIAotICAgIDIyNywgMTk1LCAyMzMsIDExNiwgMTE3LCAyMzMsIDExNSwgMTUsIDUsIDIyNywgMTg5LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgCi0gICAgMjQsIDMwLCAyNTMsIDIyNiwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjUyLCA2LCAxNSwgNSwgMjI3LCAxOTAsIAotICAgIDI1NSwgMjQsIDMwLCAyNDYsIDc0LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyNDIsIDEwMywgMTUsIDUsIDIyNywgCi0gICAgMTkwLCAyNTUsIDI0LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjM0LCAKLSAgICAyNTUsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDIzMywgMTM1LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIAotICAgIDMwLCAyMjksIDEwNywgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjE5LCAxNzEsIDE1LCA1LCAyMjcsIDE5MCwgCi0gICAgMjU1LCAyNCwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI3LCAxOTAsIDIzNCwgNjYsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMjcsIAotICAgIDE5MCwgMjM0LCA2NiwgMzAsIDI1MiwgNywgNzAsIDE1LCA1LCAxOTAsIDE1LCA1LCAyMjYsIDgwLCAxNSwgNSwgMjI2LCA0NywgCi0gICAgMTUsIDUsIDIyNiwgMjEsIDE1LCA1LCAyMjUsIDE2MSwgMTUsIDUsIDIyNSwgMTA4LCAxNSwgNSwgMjI1LCAxMDksIDMwLCAKLSAgICA2MSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjU1LCAyNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjUyLCA2LCAxNSwgNSwgCi0gICAgMjI1LCAxMDksIDMwLCAyNTEsIDEyNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDczLCAKLSAgICAxNSwgNSwgMjI1LCAxMDksIDMwLCAyNDAsIDExNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzAsIDE1LCA1LCAyMjUsIDEwOSwgCi0gICAgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI1LCAxMDksIDI0OSwgMTI1LCAyMjUsIDEwOCwgMTUsIDUsIDIyNSwgNTMsIDE1LCA1LCAKLSAgICAyMjUsIDU0LCAzMCwgMjM0LCAyMzgsIDE1LCA1LCAyMjUsIDU0LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMjUsIDU0LCAzMCwgCi0gICAgMjEwLCAxMTYsIDE1LCA1LCAyMjUsIDU0LCAyMjYsIDE2NCwgMjI1LCA1MywgMTUsIDUsIDIwNSwgMTUsIDUsIDIyMywgMTgyLCAKLSAgICAxNSwgNSwgMjIzLCAzNSwgMTUsIDUsIDIyMiwgMTQwLCAxNSwgNSwgMjA2LCAxNSwgNSwgMjIyLCAyMiwgMjI3LCAxODAsIAotICAgIDE1LCA1LCAyMjIsIDIxLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDYxLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDI0NiwgNzgsIDE1LCAKLSAgICA1LCAyMjIsIDIyLCAzMCwgMjQ2LCA3NiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAxNjIsIDE1LCA1LCAyMjIsIDIyLCAzMCwgCi0gICAgMjM0LCAyNDIsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjMyLCA4NCwgMTUsIAotICAgIDUsIDIyMiwgMjIsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIyMiwgMjIsIAotICAgIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjIwLCAzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTcsIDkzLCAxNSwgCi0gICAgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMjI1LCAxNSwgNSwgMjIyLCAyMiwgCi0gICAgMzAsIDIxNCwgMTk3LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMTUwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMTI2LCAKLSAgICAxNSwgNSwgMjIyLCAyMiwgMTE3LCAyMjIsIDIxLCAxNSwgNSwgMjIyLCAyMiwgMjQyLCA5NCwgMTUsIDUsIDIyMiwgOCwgMTUsIAotICAgIDUsIDIyMiwgOSwgMjMzLCAxMTgsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIyMSwgMjM5LCAxNSwgNSwgMjIxLCAyMzEsIDE1LCAKLSAgICA1LCAyMjAsIDEwMiwgMTUsIDUsIDIyMCwgMTAwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCA2MSwgMTUsIDUsIDIyMCwgMTAxLCAKLSAgICAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDI0MiwgMTkwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyMjksIAotICAgIDEwNywgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjE5LCAyMjMsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDIxNSwgOTgsIDE1LCA1LCAKLSAgICAyMjAsIDEwMSwgMzAsIDcwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIyMCwgOTksIDE1LCAKLSAgICA1LCAyMjAsIDk3LCAxNSwgNSwgMjIwLCA3OCwgMTUsIDUsIDIyMCwgNjMsIDE1LCA1LCAyMjAsIDY0LCAyNDAsIDIyMiwgMTUsIAotICAgIDUsIDIyMCwgNjQsIDExNywgMjIwLCA2NCwgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgCi0gICAgMTUsIDUsIDIyMCwgNjQsIDExNywgMjIwLCA2NCwgMjE3LCA5NCwgMTE3LCAyMTcsIDk0LCAyNDMsIDk3LCAxMTcsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyMjAsIDU2LCAxNSwgNSwgMjIwLCA1MSwgMTUsIDUsIDIyMCwgNDgsIDE1LCA1LCAyMjAsIDQ3LCAxNSwgCi0gICAgNSwgMjIwLCA0NCwgMTUsIDUsIDIyMCwgMzAsIDE1LCA1LCAyMjAsIDMxLCAzMCwgNjEsIDE1LCA1LCAyMjAsIDMxLCAzMCwgCi0gICAgMjM2LCAxNiwgMTUsIDUsIDIyMCwgMjQsIDE1LCA1LCAyMjAsIDI1LCAzMCwgNjEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjUyLCAKLSAgICAxNjEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjUxLCAxMDksIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjQ3LCAyMDYsIDE1LCA1LCAKLSAgICAyMjAsIDI1LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjIwLCAyNSwgMzAsIAotICAgIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMzLCAxOTEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMyLCAKLSAgICA4NiwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzAsIDkzLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIyMiwgOCwgMTUsIDUsIDIyMCwgCi0gICAgMTgsIDE1LCA1LCAyMjAsIDEzLCAxNSwgNSwgMjIwLCAxNCwgMjE2LCAyMzksIDE1LCA1LCAyMjAsIDE0LCAxMTcsIDIyMCwgCi0gICAgMTQsIDI1MSwgOTksIDExNywgMjUxLCA5OCwgMTUsIDUsIDIyMCwgOSwgMTUsIDUsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAKLSAgICAyMjYsIDExNywgMjM1LCAxOTMsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAyMjMsIDE1LCA1LCAyMTksIDIyMiwgMTUsIDUsIAotICAgIDIxOSwgMTkxLCAxNSwgNSwgMjE5LCAxOTIsIDI0MiwgOTQsIDE1LCA1LCAyMTksIDE4MiwgMTUsIDUsIDIxOSwgMTgwLCAxNSwgCi0gICAgNSwgMjE5LCAxODEsIDExNywgMjE5LCAxODEsIDIxOSwgMjIzLCAxNSwgNSwgMjE5LCAxNzMsIDE1LCA1LCAyMTksIDE3MSwgCi0gICAgMTUsIDUsIDIxOCwgODMsIDE1LCA1LCAyMTgsIDg0LCAxMTcsIDIxOCwgODMsIDE1LCA1LCAyMTgsIDU0LCAxNSwgNSwgMjE4LCAKLSAgICA1MywgMTUsIDUsIDIxOCwgNTEsIDE1LCA1LCAyMTgsIDQzLCAxNSwgNSwgMjE4LCA0MiwgMTUsIDUsIDIxOCwgMTcsIDE1LCAKLSAgICA1LCAyMTgsIDE2LCAxNSwgNSwgMjE3LCAxMDUsIDE1LCA1LCAyMTcsIDEwNiwgMjUzLCAyMTYsIDE1LCA1LCAyMTcsIDEwNiwgCi0gICAgMzAsIDI0MSwgMTgwLCAxNSwgNSwgMjE3LCAxMDYsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIxNywgMTA2LCAyNDIsIDk0LCAKLSAgICAxNSwgNSwgMjE3LCA5MywgMTUsIDUsIDIxNywgOTQsIDExNywgMjE3LCA5NCwgMjI4LCAyMzQsIDExNywgMjI4LCAyMzQsIAotICAgIDI0NywgMTg4LCAxMTcsIDI0NywgMTg3LCAxNSwgNSwgMjE3LCA5NCwgMjE4LCAyMzMsIDE1LCA1LCAyMTcsIDg0LCAxNSwgNSwgCi0gICAgMTI5LCAzMCwgMjUyLCA2LCAxNSwgNSwgMTI5LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAxMjksIDMwLCAyMjAsIDYzLCAxNSwgCi0gICAgNSwgMTI5LCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAxMjksIDMwLCAyMTUsIDExMywgMTUsIDUsIDEyOSwgMzAsIDIxNCwgMjE5LCAKLSAgICAxNSwgNSwgMjE3LCA3MiwgMTUsIDUsIDIxNywgNTAsIDE1LCA1LCAyMTcsIDIyLCAxNSwgNSwgMjE3LCAyMywgMjQyLCA5NCwgCi0gICAgMTUsIDUsIDIxNiwgMTE3LCAxNSwgNSwgMjE2LCAxMTgsIDIxNiwgMjM5LCAxNSwgNSwgMjE2LCA5MCwgMTUsIDUsIDIxNiwgCi0gICAgNzIsIDE1LCA1LCAyMTYsIDczLCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIxNiwgNzMsIDExNywgMjE2LCA3MiwgMTUsIDUsIAotICAgIDIxNiwgNzMsIDExNywgMjE2LCA3MywgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgCi0gICAgMTUsIDUsIDIxNSwgMTE4LCAxNSwgNSwgMjE1LCAxMTMsIDE1LCA1LCAyMTUsIDExMSwgMTUsIDUsIDIxNSwgMTA4LCAxNSwgCi0gICAgNSwgMjE1LCA5OCwgMTUsIDUsIDIxNSwgOTksIDExNywgMjE1LCA5OSwgMjEwLCAxMTcsIDExNywgMjEwLCAxMTYsIDE1LCA1LCAKLSAgICA3MCwgMTUsIDUsIDEwNCwgMjQyLCAxMDMsIDE1LCA1LCAxMDQsIDEwNCwgNzAsIDE1LCA1LCAxMDQsIDExNywgMTA0LCAyMjYsIAotICAgIDkwLCAxMTcsIDIyNiwgOTAsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDIxOCwgMTgsIAotICAgIDExNywgMjE4LCAxNywgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDEwNCwgMjIzLCA0OSwgMTE3LCAxMDQsIDIyMywgNDgsIDE1LCAKLSAgICA1LCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMjI1LCAxNSwgNSwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIDIyMCwgMjMzLCAxOTEsIAotICAgIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIxNCwgCi0gICAgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIAotICAgIDEwNCwgMjQyLCA5NCwgMTUsIDUsIDIxNCwgMjIwLCAyNDIsIDk0LCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDUsIDE1LCA1LCAKLSAgICAyMTQsIDIyMCwgMjIwLCA0NiwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjE0LCAyMTUsIDE1LCA1LCAyMTQsIDE5NywgMTUsIDUsIAotICAgIDIxNCwgMTk4LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMSwgOTIsIDk2LCAyNDgsIDIyMSwgMTUsIAotICAgIDUsIDIxNCwgMTk4LCAzMCwgMjIwLCAxMDAsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDcwLCAxNSwgNSwgMjE0LCAxOTYsIDE1LCAKLSAgICA1LCAyMTQsIDE5MiwgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDE5MCwgMTUsIAotICAgIDUsIDIxNCwgMTkwLCAxNSwgNSwgMjE0LCAxOTEsIDI0MiwgOTQsIDE1LCA1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAKLSAgICAyNDksIDEyNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjIwLCA0NSwgMTUsIDUsIDIxNCwgMTQ4LCAxNSwgNSwgCi0gICAgMjE0LCAxNDksIDMwLCAxMTUsIDk2LCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNSwgOTYsIDE5NywgMTUsIDUsIAotICAgIDIxNCwgMTQ5LCAzMCwgMjU0LCAxNzgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgCi0gICAgMjI3LCAxOTQsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgCi0gICAgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MiwgNiwgMTUsIDUsIDIxNCwgMTQ3LCAKLSAgICAxNSwgNSwgMjE0LCAxNDQsIDE1LCA1LCAyMTQsIDE0MywgMTUsIDUsIDIxNCwgMTM5LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICA2MSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjUzLCAyMjYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEzMCwgMTUsIDUsIDIxNCwgCi0gICAgMTQwLCAzMCwgMjQ2LCA2OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDI0MywgMTE4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDI0MywgOTYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MiwgMTEzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxNjIsIDE1LCA1LCAKLSAgICAyMTQsIDE0MCwgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNiwgMTYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDIzNSwgMTY1LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzIsIDg0LCAxNSwgCi0gICAgNSwgMjE0LCAxNDAsIDMwLCAyMzAsIDE4OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTkwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyMjAsIDYzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTksIDE4MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE1LCAxMTgsIAotICAgIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEwNCwgOTYsIDI0MiwgMTAzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM4LCAzMCwgNzAsIAotICAgIDE1LCA1LCAyMTQsIDEyNiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgNjEsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMjE3LCAKLSAgICAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIxNCwgCi0gICAgMTIyLCAxNSwgNSwgMjE0LCAxMjUsIDE1LCA1LCAyMTQsIDEyMywgMTUsIDUsIDIxNCwgMTE5LCAxNSwgNSwgMjE0LCAxMDgsIAotICAgIDE1LCA1LCAyMTQsIDEwOSwgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjE0LCAxMDcsIDE1LCA1LCAyMTAsIDExNiwgMTUsIDUsIAotICAgIDIxMCwgMTE3LCAyMTYsIDIzOSwgMTUsIDUsIDIxMCwgMTE3LCA5MiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjEwLCAxMTMsIAotICAgIDE1LCA1LCAyMTAsIDEwNiwgMTUsIDUsIDIxMCwgOTMsIDE1LCA1LCAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0NSwgMTE3LCAKLSAgICAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0MywgMTUsIDUsIDIxMCwgNDEsIDE1LCA1LCAyMTAsIDQyLCAyMzUsIDMsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjEwLCAzNiwgMTUsIDUsIDIxMCwgMjgsIDE1LCA1LCAyMTAsIDEzLCAxNSwgNSwgMjEwLCAxMSwgMTUsIAotICAgIDUsIDIxMCwgMTIsIDMwLCA2MSwgMTUsIDUsIDIxMCwgMTAsIDE1LCA1LCAyMTAsIDksIDE1LCAxMzIsIDUsIDExMywgMjUzLCAKLSAgICAyMzEsIDE1LCAxMzIsIDUsIDEzNCwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI1MywgMjMxLCAxNSwgMTMyLCAKLSAgICA1LCAyNDQsIDgxLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyMjAsIAotICAgIDEyMiwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDI1MywgCi0gICAgMjMxLCAxNSwgMTMyLCA1LCAxMzQsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNDcsIDE4NywgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCA4MSwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjIwLCAKLSAgICAxMjIsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNDcsIAotICAgIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgNzAsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDcwLCAxNSwgMTMyLCA1LCAyMTksIAotICAgIDEyNSwgNzAsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCA3MCwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDcwLCAxNSwgMTMyLCA1LCAKLSAgICAyMjgsIDIwMCwgNzAsIDE1LCAxMzIsIDUsIDEyMywgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDM4LCAxNSwgCi0gICAgMTMyLCA1LCAxMzQsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDI0NCwgODEsIAotICAgIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjQzLCAzOCwgCi0gICAgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAKLSAgICAxMjMsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDExMywgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDM1LCAxNSwgCi0gICAgMTMyLCA1LCAyNDQsIDExLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAxMTMsIAotICAgIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc5LCAyMTQsIDEyLCAxNywgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgCi0gICAgMjE5LCAxMjUsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgCi0gICAgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEyMywgMjIwLCA3MywgMTUsIAotICAgIDEzMiwgNSwgMTEzLCAyMjAsIDczLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NCwgCi0gICAgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDIyMCwgNzMsIAotICAgIDE1LCAxMzIsIDUsIDIyMCwgNzksIDMwLCAyNDMsIDExOSwgOTYsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMjAsIDc5LCAzMCwgCi0gICAgMjQzLCAxMTksIDk2LCAyMzAsIDE4OCwgMTUsIDEzMiwgNSwgMTIzLCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAxMTMsIDI1MSwgCi0gICAgOTUsIDE1LCAxMzIsIDUsIDEzNCwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDk2LCAyMTQsIDEyLCAxNywgMTUsIAotICAgIDEzMiwgNSwgMjQ0LCAxMSwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTM0LCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCAyNDUsIDc0LCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIDI0NCwgMjAsIDI0NSwgNzEsIAotICAgIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgMjE3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxNSwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAKLSAgICAyMTgsIDYxLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxOCwgMjUzLCAxNTgsIDE1LCAKLSAgICAxMzIsIDUsIDIxOSwgMTI1LCAyMTQsIDEyLCAyNDQsIDIwLCAyNTMsIDIyOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgCi0gICAgMTIsIDI0NCwgMjAsIDIzNiwgOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMTAsIDYxLCAKLSAgICAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAxMCwgMjUzLCAxNTgsIDE1LCAxMzIsIDUsIAotICAgIDI0NSwgMTkzLCAyMTQsIDEyLCAyNDQsIDIwLCAyMTQsIDEyMSwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDIxNCwgMTIsIDI0NCwgCi0gICAgMjAsIDIxNCwgMTIwLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyNCwgMTUsIDEzMiwgCi0gICAgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMjMsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAKLSAgICAyNDQsIDIwLCAyMzYsIDIyLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyNSwgNjEsIAotICAgIDE1LCAxMzIsIDUsIDExMywgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjMyLCAyMTYsIDIzOSwgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTMsIDIzMiwgCi0gICAgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNTMsIDIzMiwgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDEyMywgMjUyLCAKLSAgICAxNTAsIDE1LCAxMzIsIDUsIDExMywgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIDEzNCwgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIAotICAgIDI0NCwgMTEsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNTIsIDE1MSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIAotICAgIDUsIDI0NCwgODEsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTIsIDE1MSwgMjE0LCAxMiwgMTcsIDE1LCAKLSAgICAxMzIsIDUsIDIyOCwgMjEwLCAxNSwgMTMyLCA1LCAyMjgsIDIxMSwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDcwLCAxNSwgCi0gICAgMTMyLCA1LCAxMTMsIDI0NSwgNzAsIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNjksIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAKLSAgICAxMTMsIDIxNiwgMTY3LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjE5LCAxMTQsIDI0NywgMTg3LCAxNSwgCi0gICAgMTMyLCA1LCAxMjMsIDIxNiwgMTY5LCAyMTQsIDEyLCAyNDQsIDIwLCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2NywgCi0gICAgMjE0LCAxMiwgMjQ0LCAyMCwgNjEsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCAxODksIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAKLSAgICAxMjMsIDIyNCwgMjIsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCA1NSwgMjUzLCAyMTksIDEyMywgMjE5LCAxMTUsIDE1LCAxMzIsIAotICAgIDUsIDU1LCAyNTMsIDIxOSwgMTIzLCAyMjQsIDIxLCAxNSwgMjI0LCAxNDEsIDUsIDU1LCAyNTMsIDIxOSwgMjExLCAyMDksIAotICAgIDI0NywgMTcyLCAxNSwgMjI0LCAxNDEsIDUsIDY3LCAyNDksIDIyNiwgMTUsIDIyNCwgMTQxLCA1LCAyNDcsIDI1NSwgMjQ5LCAKLSAgICAyMjYsIDE1LCAyMjQsIDE0MSwgNSwgMjQ3LCAyNTUsIDIxNSwgMjIxLCAxMiwgMTMsIDI1NSwgMTU1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTU0LCAxMiwgMTMsIDI1NSwgMTUzLCAxMiwgMTMsIDI1NSwgMTUyLCAxMiwgMTMsIDI1NSwgMTUxLCAxMiwgMTMsIDI1NSwgCi0gICAgMTUwLCAxMiwgMTMsIDI1NSwgMTQ5LCAxMiwgMTMsIDI1NSwgMTQ4LCAxMiwgMTMsIDI1NSwgMTQ3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTQ2LCAxMiwgMTMsIDI1NSwgMTQ1LCAxMiwgMTMsIDI1NSwgMTQ0LCAxMiwgMTMsIDI1NSwgMTQzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTQyLCAxMiwgMTMsIDI1NSwgMTQxLCAxMiwgMTMsIDI1NSwgMTQwLCAxMiwgMTMsIDI1NSwgMTM5LCAxMiwgMTMsIDI1NSwgCi0gICAgMTM4LCAxMiwgMTMsIDI1NSwgMTM3LCAxMiwgMTMsIDI1NSwgMTM2LCAxMiwgMTMsIDI1NSwgMTM1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTM0LCAxMiwgMTMsIDI1NSwgMTMzLCAxMiwgMTMsIDI1NSwgMTMyLCAxMiwgMTMsIDI1NSwgMTMxLCAxMiwgMTMsIDI1NSwgCi0gICAgMTMwLCAxMiwgMTMsIDI1NSwgMTI5LCAxMiwgMTMsIDI1NSwgMTI4LCAxMiwgMTMsIDI1NSwgMTI3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTI2LCAxMiwgMTMsIDI1NSwgMTI1LCAxMiwgMTMsIDI1NSwgMTI0LCAxMiwgMTMsIDI1NSwgMTIzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTIyLCAxMiwgMTMsIDI1NSwgMTIxLCAxMiwgMTMsIDI1NSwgMTIwLCAxMiwgMTMsIDI1NSwgMTE5LCAxMiwgMTMsIDI1NSwgCi0gICAgMTE4LCAxMiwgMTMsIDI1NSwgMTE3LCAxMiwgMTMsIDI1NSwgMTE2LCAxMiwgMTMsIDI1NSwgMTE1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTE0LCAxMiwgMTMsIDI1NSwgMTEzLCAxMiwgMTMsIDI1NSwgMTEyLCAxMiwgMTMsIDI1NSwgMTExLCAxMiwgMTMsIDI1NSwgCi0gICAgMTEwLCAxMiwgMTMsIDI1NSwgMTA5LCAxMiwgMTMsIDI1NSwgMTA4LCAxMiwgMTMsIDI1NSwgMTA3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTA2LCAxMiwgMTMsIDI1NSwgMTA1LCAxMiwgMTMsIDI1NSwgMTA0LCAxMiwgMTMsIDI1NSwgMTAzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTAyLCAxMiwgMTMsIDI1NSwgMTAxLCAxMiwgMTMsIDI1NSwgMTAwLCAxMiwgMTMsIDI1NSwgOTksIDEyLCAxMywgMjU1LCAKLSAgICA5OCwgMTIsIDEzLCAyNTUsIDk3LCAxMiwgMTMsIDI1NSwgOTYsIDEyLCAxMywgMjU1LCA5NSwgMTIsIDEzLCAyNTUsIDk0LCAKLSAgICAxMiwgMTMsIDI1NSwgOTMsIDEyLCAxMywgMjU1LCA5MiwgMTIsIDEzLCAyNTUsIDkxLCAxMiwgMTMsIDI1NSwgOTAsIDEyLCAKLSAgICAxMywgMjU1LCA4OSwgMTIsIDEzLCAyNTUsIDg4LCAxMiwgMTMsIDI1NSwgODcsIDEyLCAxMywgMjU1LCA4NiwgMTIsIDEzLCAKLSAgICAyNTUsIDg1LCAxMiwgMTMsIDI1NSwgODQsIDEyLCAxMywgMjU1LCA4MywgMTIsIDEzLCAyNTUsIDgyLCAxMiwgMTMsIDI1NSwgCi0gICAgODEsIDEyLCAxMywgMjU1LCA4MCwgMTIsIDEzLCAyNTUsIDc5LCAxMiwgMTMsIDI1NSwgNzgsIDEyLCAxMywgMjU1LCA3NywgCi0gICAgMTIsIDEzLCAyNTUsIDc2LCAxMiwgMTMsIDI1MywgMTU2LCAxMiwgMTMsIDI1MywgMTU0LCAxMiwgMTMsIDI1MywgMTUyLCAKLSAgICAxMiwgMTMsIDI1MywgMTUwLCAxMiwgMTMsIDI1MywgMTQ4LCAxMiwgMTMsIDI1MywgMTQ3LCAxMiwgMTMsIDI1MywgMTQ1LCAKLSAgICAxMiwgMTMsIDI1MywgMTQzLCAxMiwgMTMsIDI1MywgMTQxLCAxMiwgMTMsIDI1MywgMTM5LCAxMiwgMTMsIDI1MSwgNjIsIAotICAgIDEyLCAxMywgMjUxLCA2MSwgMTIsIDEzLCAyNTEsIDYwLCAxMiwgMTMsIDI1MSwgNTksIDEyLCAxMywgMjUxLCA1OCwgMTIsIAotICAgIDEzLCAyNTEsIDU3LCAxMiwgMTMsIDI1MSwgNTYsIDEyLCAxMywgMjUxLCA1NSwgMTIsIDEzLCAyNTEsIDU0LCAxMiwgMTMsIAotICAgIDI1MSwgNTMsIDEyLCAxMywgMjUxLCA1MiwgMTIsIDEzLCAyNTEsIDUxLCAxMiwgMTMsIDI1MSwgNTAsIDEyLCAxMywgMjUxLCAKLSAgICA0OSwgMTIsIDEzLCAyNTEsIDQ4LCAxMiwgMTMsIDI1MSwgNDcsIDEyLCAxMywgMjUxLCA0NiwgMTIsIDEzLCAyNTEsIDQ1LCAKLSAgICAxMiwgMTMsIDI1MSwgNDQsIDEyLCAxMywgMjUxLCA0MywgMTIsIDEzLCAyNTEsIDQyLCAxMiwgMTMsIDI1MSwgNDEsIDEyLCAKLSAgICAxMywgMjUxLCA0MCwgMTIsIDEzLCAyNTEsIDM5LCAxMiwgMTMsIDI1MSwgMzgsIDEyLCAxMywgMjUxLCAzNywgMTIsIDEzLCAKLSAgICAyNTEsIDM2LCAxMiwgMTMsIDI1MSwgMzUsIDEyLCAxMywgMjQ5LCA1OSwgMTIsIDEzLCAyNDksIDU4LCAxMiwgMTMsIDI0OSwgCi0gICAgNTcsIDEyLCAxMywgMjQ5LCA1NiwgMTIsIDEzLCAyNDksIDU1LCAxMiwgMTMsIDI0OSwgNTQsIDEyLCAxMywgMjQ5LCA1MywgCi0gICAgMTIsIDEzLCAyNDksIDUyLCAxMiwgMTMsIDI0OSwgNTEsIDEyLCAxMywgMjQ5LCA1MCwgMTIsIDEzLCAyNDksIDQ5LCAxMiwgCi0gICAgMTMsIDI0OSwgNDgsIDEyLCAxMywgMjQ5LCA0NywgMTIsIDEzLCAyNDksIDQ2LCAxMiwgMTMsIDI0OSwgNDUsIDEyLCAxMywgCi0gICAgMjQ5LCA0NCwgMTIsIDEzLCAyNDksIDQzLCAxMiwgMTMsIDI0OSwgNDIsIDEyLCAxMywgMjQ5LCA0MSwgMTIsIDEzLCAyNDksIAotICAgIDQwLCAxMiwgMTMsIDI0OSwgMzksIDEyLCAxMywgMjQ5LCAzOCwgMTIsIDEzLCAyNDksIDM3LCAxMiwgMTMsIDI0OSwgMzYsIAotICAgIDEyLCAxMywgMjQ5LCAzNSwgMTIsIDEzLCAyNDksIDM0LCAxMiwgMTMsIDI0OSwgMzMsIDEyLCAxMywgMjQ5LCAzMiwgMTIsIAotICAgIDEzLCAyNDksIDMxLCAxMiwgMTMsIDI0OSwgMzAsIDEyLCAxMywgMjQ5LCAyOSwgMTIsIDEzLCAyNDksIDI4LCAxMiwgMTMsIAotICAgIDI0OSwgMjcsIDEyLCAxMywgMjQ5LCAyNiwgMTIsIDEzLCAyNDksIDI1LCAxMiwgMTMsIDI0OSwgMjQsIDEyLCAxMywgMjQ5LCAKLSAgICAyMywgMTIsIDEzLCAyNDksIDIyLCAxMiwgMTMsIDI0OSwgMjEsIDEyLCAxMywgMjQ5LCAyMCwgMTIsIDEzLCAyNDksIDE5LCAKLSAgICAxMiwgMTMsIDI0OSwgMTgsIDEyLCAxMywgMjQ5LCAxNywgMTIsIDEzLCAyNDksIDE2LCAxMiwgMTMsIDI0OSwgMTUsIDEyLCAKLSAgICAxMywgMjQ5LCAxNCwgMTIsIDEzLCAyNDksIDEzLCAxMiwgMTMsIDI0OSwgMTIsIDEyLCAxMywgMjQ5LCAxMSwgMTIsIDEzLCAKLSAgICAyNDksIDEwLCAxMiwgMTMsIDI0OSwgOSwgMTIsIDEzLCAyNDksIDgsIDEyLCAxMywgMjQ5LCA3LCAxMiwgMTMsIDI0OSwgNiwgCi0gICAgMTIsIDEzLCAyNDksIDUsIDEyLCAxMywgMjQ5LCA0LCAxMiwgMTMsIDI0OSwgMywgMTIsIDEzLCAyNDksIDIsIDEyLCAxMywgCi0gICAgMjQ5LCAxLCAxMiwgMTMsIDI0OSwgMCwgMTIsIDEzLCAyNDgsIDI1NSwgMTIsIDEzLCAyNDgsIDI1NCwgMTIsIDEzLCAyNDgsIAotICAgIDI1MywgMTIsIDEzLCAyNDgsIDI1MiwgMTIsIDEzLCAyNDgsIDI1MSwgMTIsIDEzLCAyNDgsIDI1MCwgMTIsIDEzLCAyNDgsIAotICAgIDI0OSwgMTIsIDEzLCAyNDgsIDI0OCwgMTIsIDEzLCAyNDgsIDI0NywgMTIsIDEzLCAyNDgsIDI0NiwgMTIsIDEzLCAyNDgsIAotICAgIDI0NSwgMTIsIDEzLCAyNDgsIDI0NCwgMTIsIDEzLCAyNDgsIDI0MywgMTIsIDEzLCAyNDgsIDI0MiwgMTIsIDEzLCAyNDgsIAotICAgIDI0MSwgMTIsIDEzLCAyNDgsIDI0MCwgMTIsIDEzLCAyNDgsIDIzOSwgMTIsIDEzLCAyNDgsIDIzOCwgMTIsIDEzLCAyNDgsIAotICAgIDIzNywgMTIsIDEzLCAyNDgsIDIzNiwgMTIsIDEzLCAyNDgsIDIzNSwgMTIsIDEzLCAyNDgsIDIzNCwgMTIsIDEzLCAyNDgsIAotICAgIDIzMywgMTIsIDEzLCAyNDgsIDIzMiwgMTIsIDEzLCAyNDgsIDIzMSwgMTIsIDEzLCAyNDgsIDIzMCwgMTIsIDEzLCAyNDgsIAotICAgIDIyOSwgMTIsIDEzLCAyNDgsIDIyOCwgMTIsIDEzLCAyNDgsIDIyNywgMTIsIDEzLCAyNDgsIDIyNiwgMTIsIDEzLCAyNDgsIAotICAgIDIyNSwgMTIsIDEzLCAyNDgsIDIyNCwgMTIsIDEzLCAyNDYsIDIzLCAxMiwgMTMsIDI0NiwgMjIsIDEyLCAxMywgMjQ2LCAyMSwgCi0gICAgMTIsIDEzLCAyNDYsIDIwLCAxMiwgMTMsIDI0NiwgMTksIDEyLCAxMywgMjQ2LCAxOCwgMTIsIDEzLCAyNDYsIDE3LCAxMiwgCi0gICAgMTMsIDI0NiwgMTYsIDEyLCAxMywgMjQ2LCAxNSwgMTIsIDEzLCAyNDYsIDE0LCAxMiwgMTMsIDI0NiwgMTMsIDEyLCAxMywgCi0gICAgMjQ2LCAxMiwgMTIsIDEzLCAyNDYsIDExLCAxMiwgMTMsIDI0NiwgMTAsIDEyLCAxMywgMjQ2LCA5LCAxMiwgMTMsIDI0NiwgCi0gICAgOCwgMTIsIDEzLCAyNDYsIDcsIDEyLCAxMywgMjQ2LCA2LCAxMiwgMTMsIDI0NiwgNSwgMTIsIDEzLCAyNDYsIDQsIDEyLCAKLSAgICAxMywgMjQ2LCAzLCAxMiwgMTMsIDI0NiwgMiwgMTIsIDEzLCAyNDYsIDEsIDEyLCAxMywgMjQ2LCAwLCAxMiwgMTMsIDI0NSwgCi0gICAgMjU1LCAxMiwgMTMsIDI0NSwgMjU0LCAxMiwgMTMsIDI0NSwgMjUzLCAxMiwgMTMsIDI0NSwgMjUyLCAxMiwgMTMsIDI0NSwgCi0gICAgMjUxLCAxMiwgMTMsIDI0NSwgMjUwLCAxMiwgMTMsIDI0NSwgMjQ5LCAxMiwgMTMsIDI0NSwgMjQ4LCAxMiwgMTMsIDI0NSwgCi0gICAgMjQ3LCAxMiwgMTMsIDI0NSwgMjQ2LCAxMiwgMTMsIDI0NSwgMjQ1LCAxMiwgMTMsIDI0NSwgMjQ0LCAxMiwgMTMsIDI0NSwgCi0gICAgMjQzLCAxMiwgMTMsIDI0NSwgMjQyLCAxMiwgMTMsIDI0NSwgMjQxLCAxMiwgMTMsIDI0NSwgMjQwLCAxMiwgMTMsIDI0NSwgCi0gICAgMjM5LCAxMiwgMTMsIDI0NSwgMjM4LCAxMiwgMTMsIDI0NSwgMjM3LCAxMiwgMTMsIDI0NSwgMjM2LCAxMiwgMTMsIDI0NSwgCi0gICAgNSwgMTIsIDEzLCAyNDUsIDQsIDEyLCAxMywgMjQ1LCAzLCAxMiwgMTMsIDI0NSwgMiwgMTIsIDEzLCAyNDUsIDEsIDEyLCAKLSAgICAxMywgMjQ1LCAwLCAxMiwgMTMsIDI0NCwgMjU1LCAxMiwgMTMsIDI0NCwgMjU0LCAxMiwgMTMsIDI0NCwgMjUzLCAxMiwgMTMsIAotICAgIDI0NCwgMjUyLCAxMiwgMTMsIDI0NCwgMjUxLCAxMiwgMTMsIDI0NCwgMjUwLCAxMiwgMTMsIDI0NCwgMjQ5LCAxMiwgMTMsIAotICAgIDI0NCwgMjQ4LCAxMiwgMTMsIDI0NCwgMjQ3LCAxMiwgMTMsIDI0NCwgMjQ2LCAxMiwgMTMsIDI0NCwgMjQ1LCAxMiwgMTMsIAotICAgIDI0NCwgMjQ0LCAxMiwgMTMsIDI0NCwgMjQzLCAxMiwgMTMsIDI0NCwgMjQyLCAxMiwgMTMsIDI0NCwgMjQxLCAxMiwgMTMsIAotICAgIDI0NCwgMjQwLCAxMiwgMTMsIDI0NCwgMjM5LCAxMiwgMTMsIDI0NCwgMjM4LCAxMiwgMTMsIDI0NCwgMjM3LCAxMiwgMTMsIAotICAgIDI0NCwgMjM2LCAxMiwgMTMsIDI0NCwgMjM1LCAxMiwgMTMsIDI0NCwgMjM0LCAxMiwgMTMsIDI0NCwgMjMzLCAxMiwgMTMsIAotICAgIDI0NCwgMjMyLCAxMiwgMTMsIDI0NCwgMjMxLCAxMiwgMTMsIDI0NCwgMjMwLCAxMiwgMTMsIDI0NCwgMjI5LCAxMiwgMTMsIAotICAgIDI0NCwgMjI4LCAxMiwgMTMsIDI0NCwgMjI3LCAxMiwgMTMsIDI0NCwgMjI2LCAxMiwgMTMsIDI0NCwgMjI1LCAxMiwgMTMsIAotICAgIDI0NCwgMjI0LCAxMiwgMTMsIDI0NCwgMjIzLCAxMiwgMTMsIDI0NCwgMjIyLCAxMiwgMTMsIDI0NCwgMjIxLCAxMiwgMTMsIAotICAgIDI0NCwgMjIwLCAxMiwgMTMsIDI0NCwgMjE5LCAxMiwgMTMsIDI0NCwgMjE4LCAxMiwgMTMsIDI0NCwgMjE3LCAxMiwgMTMsIAotICAgIDI0NCwgMjE2LCAxMiwgMTMsIDI0NCwgMjE1LCAxMiwgMTMsIDI0NCwgMjE0LCAxMiwgMTMsIDI0NCwgMjEzLCAxMiwgMTMsIAotICAgIDI0NCwgMjEyLCAxMiwgMTMsIDI0NCwgMjExLCAxMiwgMTMsIDI0NCwgMjEwLCAxMiwgMTMsIDI0NCwgMjA5LCAxMiwgMTMsIAotICAgIDI0NCwgMjA4LCAxMiwgMTMsIDI0NCwgMjA3LCAxMiwgMTMsIDI0NCwgMjA2LCAxMiwgMTMsIDI0NCwgMjA1LCAxMiwgMTMsIAotICAgIDI0NCwgMjA0LCAxMiwgMTMsIDI0NCwgMjAzLCAxMiwgMTMsIDI0NCwgMjAyLCAxMiwgMTMsIDI0NCwgMjAxLCAxMiwgMTMsIAotICAgIDI0NCwgMjAwLCAxMiwgMTMsIDI0NCwgMTk5LCAxMiwgMTMsIDI0NCwgMTk4LCAxMiwgMTMsIDI0NCwgMTk3LCAxMiwgMTMsIAorICAgIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDE4NCwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAKKyAgICAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCAKKyAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgCisgICAgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQxLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjQwLCAxNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCAKKyAgICA2LCAxLCAxNDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAorICAgIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAKKyAgICAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgCisgICAgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCAKKyAgICA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDU5LCAKKyAgICA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTQyLCAKKyAgICA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgCisgICAgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIAorICAgIDAsIDIyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgCisgICAgMCwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCAwLCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgCisgICAgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIAorICAgIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNiwgMSwgCisgICAgMTA0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMjExLCAxMTgsIAorICAgIDIsIDU5LCA1MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxODQsIDcsIDQsIAorICAgIDEsIDIxMSwgMTE4LCAyLCAxODQsIDcsIDYsIDEsIDIzMCwgMjI4LCAyMzIsIDE5MSwgNywgNCwgMSwgMjMwLCAyMjgsIDIzMiwgCisgICAgMTkxLCA3LCA2LCAxLCAyMzAsIDIyOCwgMjE0LCAxMDUsIDcsIDQsIDEsIDIzMCwgMjI4LCAyMTQsIDEwNSwgNywgNiwgMSwgCisgICAgMjExLCAxMTgsIDIsIDIzMiwgMTI5LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjksIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgCisgICAgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIAorICAgIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU3LCAKKyAgICAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIAorICAgIDI0NSwgMTA5LCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCAKKyAgICA0LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDI0NSwgCisgICAgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIAorICAgIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MSwgMjYsIAorICAgIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgCisgICAgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAorICAgIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgCisgICAgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU3LCAyNiwgNiwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAKKyAgICAyNDgsIDE2MSwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIAorICAgIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAKKyAgICAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA0LCAKKyAgICAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCisgICAgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIAorICAgIDE2MSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCAKKyAgICA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjEsIAorICAgIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIAorICAgIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgCisgICAgMjU0LCAxNTIsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIAorICAgIDEwOSwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIAorICAgIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMTQsIDEzLCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIxNCwgMTMsIDI2LCA0LCAKKyAgICAxLCAyMjYsIDIwNCwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgCisgICAgMTU4LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgCisgICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIAorICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDQsIDEsIDI0NSwgNzIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAKKyAgICAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAKKyAgICAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIAorICAgIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIAorICAgIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAKKyAgICAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIAorICAgIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAKKyAgICAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIAorICAgIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAKKyAgICAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAKKyAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA0LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjMxLCAyMzcsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjE0LCAKKyAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIAorICAgIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMTMsIDEyMCwgMjYsIDYsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyMzEsIDIzNywgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTcwLCAyNiwgMjM0LCA4LCAyNiwgMjI0LCAKKyAgICAxNzAsIDI2LCAyMjQsIDE1NywgMjYsIDIyNSwgMTc4LCAyNiwgMjQ4LCA0LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAorICAgIDI0NSwgNzIsIDIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjUsIDE3OCwgMjYsIAorICAgIDQsIDEsIDI0NSwgNzIsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTcwLCAyNiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMTQsIDEzLCAyNiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAKKyAgICAxLCAyMzUsIDE5MywgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjMxLCAyMzcsIDI2LCA0LCAxLCAyMzUsIAorICAgIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMjYsIDExNCwgCisgICAgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMzEsIDIzNywgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNiwgMTE0LCAyNiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIAorICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzcsIDI2LCA0LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIyMywgNDEsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjIzLCA0MSwgMiwgMjQ4LCAxNjEsIAorICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzcsIAorICAgIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDIyMywgNDEsIDIsIDI0OCwgMTYxLCAyNiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgNCwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIAorICAgIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgCisgICAgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjI2LCAxMTQsIDI2LCAKKyAgICA2LCAxLCAyMjYsIDIwNiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyMjQsIDE3MCwgMjYsIDIyNiwgMTE0LCAyNiwgMjQ4LCAxNjEsIDI0NSwgMTU5LCAyMjQsIDMwLCAKKyAgICAyNDUsIDE2OCwgMjI0LCAzMCwgMjQ1LCAxNTksIDIxOSwgMjAsIDI0NSwgMTY4LCAyMTksIDIwLCAyMTYsIDE0MiwgMjE5LCAKKyAgICAyMCwgMjQ0LCAxNywgMjE5LCAyMCwgMjE5LCAxMjUsIDIxOSwgMjAsIDI0NCwgMTIwLCAyMTksIDIwLCAyMjQsIDE0NCwgCisgICAgMjE5LCAyMCwgMjE2LCAxNzEsIDIxOSwgMjAsIDI0MiwgNDIsIDIxOSwgMjAsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMTksIDIwLCAKKyAgICAyMTAsIDg3LCAyMTEsIDI0NSwgMjI4LCA3MiwgMjEwLCA4NywgMjExLCAyNDUsIDIzNSwgNjksIDIzMywgNDQsIDc5LCAyMjIsIAorICAgIDI0NiwgNzksIDI0MCwgMTc1LCAyMjgsIDczLCAyNDAsIDE3NSwgMjQ0LCAxMjAsIDI0OCwgMTY0LCAyNDUsIDE1OSwgMjQ4LCAKKyAgICAxNjQsIDI0NSwgMTY4LCAyNDgsIDE2NCwgMjAzLCAxMzAsIDUyLCA2NywgMjMyLCAyMTksIDUyLCAxMjEsIDIzMiwgMjE5LCAKKyAgICA0MywgMjE5LCAxNTcsIDIyNCwgMSwgNzksIDQ0LCAyMTksIDE1NywgMjI0LCAxLCA3OSwgMjE5LCAxNTcsIDIzMiwgMTE1LCAKKyAgICAyMjQsIDEsIDc5LCAyMTksIDE1NywgMjQxLCAxNzAsIDIyNCwgMSwgNzksIDQzLCA1MiwgMjI0LCAxLCA3OSwgNDQsIDUyLCAKKyAgICAyMjQsIDEsIDc5LCA1MiwgMjMyLCAxMTUsIDIyNCwgMSwgNzksIDUyLCAyNDEsIDE3MCwgMjI0LCAxLCA3OSwgMjQ4LCAyMTMsIAorICAgIDUyLCAyNDgsIDIxMywgMjUxLCAxMjEsIDIxNSwgMjIzLCAyNTEsIDEyMSwgMTIzLCA1OSwgMjMzLCA2MiwgMTEzLCA1OSwgCisgICAgMjMzLCA2MiwgMjAzLCAyNDUsIDE3MSwgMjQwLCAxNzMsIDIyNSwgMTMsIDIzMiwgMjIwLCAyMjAsIDEzOSwgMjI2LCAxOSwgCisgICAgMjIwLCAxMzksIDIzMywgNDQsIDI0NSwgMTY2LCAyMjIsIDI0NiwgMjQ1LCAxNjYsIDIyNCwgMjQ5LCAyNDcsIDIwNCwgMjQ0LCAKKyAgICAyNywgMjMzLCA0NCwgMjI2LCAxMjEsIDIyMiwgMjQ2LCAyMjYsIDEyMSwgMjI5LCAxOTksIDIyOCwgNzgsIDIxOSwgMjAsIAorICAgIDIyNSwgMTg2LCAyMzAsIDE5OCwgNTAsIDIyNSwgMTg2LCAyMTYsIDI0OSwgMjE2LCAxNDksIDUwLCAyMjQsIDE5MywgNTIsIAorICAgIDIyNCwgMTkzLCAyMTUsIDIxMiwgMjI0LCAxOTMsIDIyMywgNTIsIDIyNCwgMTkzLCAyMjMsIDUyLCA1MiwgMjI0LCAxOTMsIAorICAgIDIyMywgNTIsIDIxNSwgMjEyLCAyMjQsIDE5MywgMjUwLCAyNDYsIDIxOSwgMTU3LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjI0LCAKKyAgICAxLCA3OSwgMjE5LCAxNTcsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjI0LCAxLCA3OSwgMjIzLCAxMTAsIDc5LCA1MiwgMjQ1LCAKKyAgICAzOSwgNzksIDIzNSwgMjA4LCAyMjYsIDEyMywgMjE0LCAxODAsIDEzNSwgMjE2LCAxMTIsIDI1MCwgMjQ3LCAyMzUsIDIyMywgCisgICAgMjI1LCAxMywgMjUzLCAyMjIsIDI0MCwgMTc2LCAyNTEsIDEyMSwgMjQ0LCAxMCwgMjE5LCA5NywgNDMsIDQyLCAyNTEsIAorICAgIDE2NiwgMiwgMjI0LCAxMCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjI0LCAxMCwgNTIsIDIyNCwgMTYsIDc5LCAyMjQsIDE2LCAKKyAgICAyNDUsIDM5LCA3OSwgMjQ1LCAzOSwgMjI0LCAxNiwgNzksIDIxNiwgNzEsIDUsIDI0NSwgNzMsIDIyMywgNTIsIDIyNSwgNzEsIAorICAgIDUwLCA4NSwgMTQwLCAyNTEsIDEyMSwgODUsIDk3LCAyNTEsIDEyMSwgMTIxLCAyNTMsIDIyNCwgMjIzLCA1MiwgMjIwLCAKKyAgICAxNTIsIDI1MCwgOSwgMjE0LCAxNjMsIDExMywgMjUzLCAyMjMsIDI1NCwgMTY3LCAyMTMsIDE4OCwgMjQ5LCAyMjUsIDIzMCwgCisgICAgMTg3LCA1MCwgMjE3LCAyMzUsIDI0OCwgMTY0LCAyMzUsIDIwMCwgMjE0LCAxODAsIDI0NCwgNjAsIDIyNCwgMTQ0LCA3OSwgCisgICAgMTM0LCA1OSwgMjI0LCAxNDMsIDIyNCwgMjcsIDIyNCwgMTkzLCAyNDQsIDE5LCA1OSwgMjI0LCAxNDMsIDI0NCwgODksIDU5LCAKKyAgICAyMjQsIDE0MywgMTEzLCA1OSwgMjI0LCAxNDMsIDI0NCwgMTksIDU5LCA3OSwgMjQ2LCAxMjYsIDI0OSwgMTM4LCAyMTUsIAorICAgIDIyMiwgNjcsIDI0NCwgMTksIDI0NywgMTI2LCAyMzEsIDg3LCAxMSwgMjE5LCAyMCwgMjExLCAyMDksIDIzNSwgNjksIDI0MywgCisgICAgMjM0LCAyNTQsIDYwLCAyMzUsIDE5OCwgMjE2LCA4NiwgMjM1LCAxOTgsIDIyMCwgMTM5LCAyMzUsIDE5OCwgMjI1LCAyNSwgCisgICAgMjMzLCA0NCwgMjM1LCAxNzEsIDIyMiwgMjQ2LCAyMzUsIDE3MSwgMjQ0LCAxMDAsIDIxOCwgOTEsIDIzNSwgMTcxLCAyMjQsIAorICAgIDI0OSwgMjQ3LCAyMDQsIDIzNSwgMTcxLCAyMzUsIDIzNSwgMjE3LCAxODMsIDIxNywgMjUyLCAyNTUsIDE0LCAyMTcsIDE4MywgCisgICAgMjE3LCAyNTIsIDIzNSwgMjM1LCA5LCAyNDQsIDI4LCAyMjAsIDgyLCAyNTUsIDE0LCA5LCAyNDQsIDI4LCAyMjAsIDgyLCAKKyAgICAyMjksIDE5NCwgMjEsIDIyMCwgODMsIDIyOCwgNzQsIDIxLCAyMjAsIDgzLCAyMTgsIDI0LCAyMTAsIDg2LCAyMTgsIDI0LCAKKyAgICA3LCA0LCAxLCA3NCwgMjE4LCAyNCwgMTYxLCAyMTgsIDI0LCAxOTAsIDIxOCwgMjQsIDE5NSwgMjE4LCAyNCwgMTk5LCAyMTgsIAorICAgIDI0LCAxOTYsIDIxOCwgMjQsIDIwMSwgMjE4LCAyNCwgOTYsIDUwLCAyMTgsIDI0LCAyMzAsIDE4NiwgMjE4LCAyNCwgMjQ1LCAKKyAgICAxMDYsIDUwLCAyMTgsIDI0LCA0MywgMjI2LCA3LCAyMTgsIDI0LCA0NCwgMjI2LCA3LCAyMTgsIDI0LCA3LCA0LCAxLCAyMzAsIAorICAgIDMwLCAyMTgsIDY2LCAyMTAsIDg2LCAyMTgsIDY2LCAxMTEsIDIxOCwgNjYsIDEwNSwgMjE4LCA2NiwgMTU4LCAyMTgsIDY2LCAKKyAgICAxNjEsIDIxOCwgNjYsIDE5MCwgMjE4LCA2NiwgMTk1LCAyMTgsIDY2LCAxOTksIDIxOCwgNjYsIDE5NiwgMjE4LCA2NiwgCisgICAgMjAxLCAyMTgsIDY2LCA5NiwgNTAsIDIxOCwgNjYsIDIzMCwgMTg2LCAyMTgsIDY2LCAyNDUsIDEwNiwgNTAsIDIxOCwgNjYsIAorICAgIDQzLCAyMjYsIDcsIDIxOCwgNjYsIDQ0LCAyMjYsIDcsIDcsIDIxOCwgNjYsIDQsIDEsIDYxLCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICA3NiwgNywgMjE4LCA2NiwgNCwgMSwgNzgsIDcsIDIxOCwgNjYsIDQsIDEsIDIxMSwgMTc4LCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICAyMjEsIDE5NywgNywgMjE4LCA2NiwgNCwgMSwgMjQyLCA2NywgNywgMjE4LCA2NiwgNCwgMSwgMjM1LCAyOSwgNywgMjE4LCAKKyAgICA2NiwgNCwgMSwgMTU2LCA3LCAyMTgsIDY2LCA0LCAxLCAxOTQsIDcsIDIxOCwgNjYsIDQsIDEsIDIzMCwgMzAsIDcsIDIxOCwgCisgICAgNjYsIDQsIDEsIDIyNiwgMTA5LCA3LCAyMTgsIDY2LCA0LCAxLCAyMjIsIDkzLCA3LCAyMTgsIDY2LCA0LCAxLCAyMTcsIAorICAgIDE1MywgMjQ1LCA1NCwgNTAsIDI0OSwgMjM1LCA1MCwgMjQ5LCAxMjUsIDUwLCAyNDQsIDMsIDI0NCwgNiwgNTAsIDIzMiwgCisgICAgMjA0LCA1MCwgMjMwLCAxOTksIDUwLCAyMjksIDIxNSwgNTAsIDIyNSwgMTY1LCA1MCwgMjIyLCAxMjAsIDUwLCAyMTEsIAorICAgIDIxNywgNTAsIDE2NiwgMjIwLCA1MSwgNTAsIDI0NywgMTM1LCA1MCwgMjQ1LCA1NSwgNTAsIDIzNCwgODIsIDUwLCAyMTUsIAorICAgIDExMywgNTAsIDI0NiwgMTA5LCA1MCwgMjQzLCA0NywgMjI1LCAxOTYsIDUwLCAyMjUsIDE2MywgNTAsIDI0MiwgMTE2LCA1MCwgCisgICAgMjUzLCAxOTAsIDUwLCAyNDAsIDIzNSwgNTAsIDI1MCwgMTkzLCA1MCwgMjMyLCAxOTcsIDIxNiwgNCwgNTAsIDIxOSwgMiwgCisgICAgNTAsIDIxNiwgMjQ2LCA1MCwgMjM1LCAyNDgsIDIyMiwgMTIwLCA1MCwgMjE1LCA5NywgMjMyLCAyMDQsIDUwLCAzOCwgNDMsIAorICAgIDI0MiwgNiwgNDgsIDM4LCA0NCwgMjQyLCA2LCA0OCwgMzgsIDIwMCwgNjcsIDIzMiwgMjIwLCAyMjYsIDEyNCwgMzgsIDIxOSwgCisgICAgMjUzLCA2NywgMjMyLCAyMjAsIDIyNiwgMTI0LCAzOCwgMjU0LCA5NiwgODAsIDQ4LCAzOCwgMjUwLCAxMCwgODAsIDQ4LCAKKyAgICAzOCwgNDMsIDgwLCA0OCwgMzgsIDQ0LCA4MCwgNDgsIDM4LCAyMjIsIDIzNywgMjI2LCAxMjQsIDM4LCAyNTAsIDEwLCAyMjIsIAorICAgIDIzNywgMjI2LCAxMjQsIDM4LCAyNTQsIDk2LCAyMjIsIDIzNywgMjI2LCAxMjQsIDM4LCAxMzQsIDE3MCwgNDgsIDM4LCAKKyAgICAyNDQsIDE5LCAxNzAsIDQ4LCAzOCwgMjQ1LCAxNTQsIDI1MCwgNDMsIDM4LCAyNDUsIDE1NCwgMjE4LCAyMzYsIDM4LCAyNDUsIAorICAgIDE1NCwgMjQ4LCAwLCAzOCwgMjQ1LCAxNTQsIDI1MCwgNDQsIDI1MiwgMTg4LCAzOCwgNDMsIDQ0LCA4MCwgNDgsIDM4LCAKKyAgICAyNDUsIDE1NCwgMjIxLCAxOTAsIDM4LCAyNDUsIDE1NCwgMjM0LCAxNDEsIDM4LCAyNDUsIDE1NCwgMjE0LCAxNTUsIDIyNSwgCisgICAgMTAsIDIxNSwgMjI2LCAzOCwgMjIzLCA1MywgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA1MiwgNjcsIDIxOCwgMTA1LCAyMjYsIAorICAgIDEyNCwgMzgsIDI1NCwgMTA2LCA4NywgMzgsIDIxNSwgMjEyLCAyMTQsIDE4MiwgMzgsIDIxMSwgMjQ3LCAyNTEsIDE0OCwgCisgICAgNDgsIDM4LCAxNDAsIDgwLCAyMjYsIDEyNCwgMzgsIDIwMCwgNTIsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAzOCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMzgsIDQzLCAKKyAgICA4MCwgNTEsIDM4LCA0NCwgODAsIDUxLCAzOCwgMjUzLCAyMjUsIDQ4LCAyNTUsIDIwLCAyMjYsIDIzNSwgMjU1LCA0LCAyMTYsIAorICAgIDQzLCAyMTYsIDE5NywgMjE4LCA3NSwgMTM5LCA2LCAyNTEsIDc0LCAyNDgsIDc5LCAyNTAsIDE4NiwgMjUwLCAxODMsIDIzMiwgCisgICAgMjIwLCA4NywgMjUwLCAyNDgsIDIyNiwgMjM1LCAyNTEsIDM0LCAyMTQsIDE4OSwgMjQ1LCA1NiwgMjQ5LCAxOTksIDIyMSwgCisgICAgMTg3LCAyNDgsIDc5LCAyNDQsIDE4NywgMTE5LCA0LCAyNDMsIDIwOSwgMTE5LCA2LCAyNDIsIDY3LCAyNTEsIDIyNywgNiwgCisgICAgMjQyLCA2NywgMTM5LCA2LCAyNDIsIDY3LCAyMjUsIDQwLCAyNDksIDE5OSwgMjI1LCA0MCwgMjQ5LCAyMDAsIDExNSwgMTEzLCAKKyAgICAyMjUsIDExMSwgMTE5LCA2LCA3NCwgMjUxLCAyMjcsIDYsIDc0LCAxMTksIDYsIDE1NiwgMTE5LCA0LCAxNTYsIDIzMywgCisgICAgMTU1LCA1NywgMjUyLCAxNDksIDg3LCAxMzksIDYsIDIzMCwgMzAsIDIyNywgMjAwLCA1MCwgMjE5LCAzMywgMjIzLCAxMjIsIAorICAgIDI0OSwgMTcwLCAxMTksIDYsIDIyNiwgMTA5LCAxMzksIDYsIDIyNiwgMTA5LCAxMzksIDYsIDIyNCwgOTksIDExOSwgNiwgCisgICAgMTUzLCAyNTEsIDIyNywgNiwgMTUzLCAxMzksIDYsIDE1MywgMjI0LCAxOTksIDIxNywgNzIsIDIyMywgNjUsIDIyMCwgMTM0LCAKKyAgICA3OSwgMjE3LCAyLCA1MCwgMjE1LCAyNTQsIDE2NCwgNTAsIDIxMywgMjQwLCAxMzksIDYsIDIxMCwgMTU5LCAyMjYsIDEzNywgCisgICAgNTAsIDIyNiwgMjI1LCA1MCwgMjM1LCAyMDAsIDIyNiwgMjI1LCA1MCwgMjUxLCAyMjcsIDYsIDIxMCwgMTU5LCAyMTUsIDk0LCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTIsIDIzNCwgMTc5LCA1MCwgMjU0LCAxMTUsIDUwLCAxMTksIDYsIDI1MywgMTY2LCAyNTEsIAorICAgIDIyNywgNiwgMjUxLCA3NCwgMjQ1LCA3NiwgODcsIDExOSwgNCwgNzYsIDExOSwgNiwgNzYsIDExOSwgNiwgMjQ1LCAxNCwgCisgICAgMjE1LCA5NCwgNiwgMjQ1LCAxNCwgMTE5LCA2LCAxOTQsIDExOSwgNCwgNzgsIDEwOSwgODcsIDI1MiwgMzcsIDg3LCAyNDIsIAorICAgIDIwOSwgODcsIDI0OCwgMTk4LCA4NywgMjM1LCAyMzksIDIxOSwgMzEsIDIyMiwgMTg5LCA2LCAyMjQsIDk5LCAyNDQsIDE5MCwgCisgICAgNTAsIDEzOSwgNCwgMjI1LCAxMTEsIDEzOSwgNCwgMjQzLCAxMTQsIDEzOSwgNiwgMjQzLCAxMTQsIDEzOSwgNiwgMjI1LCAKKyAgICAxMTEsIDEzOSwgMjMwLCAyOSwgMjE4LCA0MSwgMjE1LCA5NCwgMzUsIDYsIDI0MywgMjA5LCAyMTUsIDk0LCAzNSwgNiwgCisgICAgMTU2LCAyMjMsIDUyLCAzNSwgNiwgMTU2LCAyMTUsIDk0LCAzNSwgNiwgMjExLCAxMTcsIDEzOSwgMzIsIDYsIDI0OSwgNjgsIAorICAgIDEzOSwgMzIsIDQsIDI0OSwgNjgsIDEzOSwgMzIsIDQsIDc2LCAxMzksIDMyLCA0LCA3NCwgMTM5LCAzMiwgNCwgMjM1LCAKKyAgICAxNTAsIDIyNCwgMTczLCAyMzIsIDIxOSwgMjE1LCA5NCwgMjU0LCAxMzQsIDIyNSwgMTg2LCA1MCwgMjU0LCAxODksIDIxNSwgCisgICAgOTQsIDQsIDI0NSwgMTQsIDE2LCAzMSwgMjIxLCAyNTQsIDIxOSwgMzEsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyMCwgCisgICAgMTIwLCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMjgsIDE5OSwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjE2LCAyNDIsIAorICAgIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIxNiwgMTY5LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTEzLCAyMTYsIDE2NywgMjEyLCAKKyAgICAxMTQsIDI0NCwgMTAsIDEyMywgMjQ0LCAxMjUsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMTMsIDI0NCwgMTI0LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTM0LCAyNDQsIDEyNCwgMjEyLCAxMTQsIDI0NCwgMTAsIDI0NCwgMTksIDI0NCwgMTI0LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTIzLCAyMTksIDExNywgMjEyLCAxMTQsIDI0NCwgMTAsIDI0NCwgODksIDIxOSwgMTE1LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTIzLCAyNDUsIDE5NiwgMjEyLCAxMTQsIDI0NCwgMTAsIDEzNCwgMjQ1LCAxOTQsIDIxMiwgMTE0LCAyNDQsIAorICAgIDEwLCAyNDQsIDg5LCAyNDUsIDE5NCwgMjEyLCAxMTQsIDI0NCwgMTAsIDIyMCwgMTI0LCAyNDUsIDE5NCwgMjQ0LCAxMCwgCisgICAgMjI3LCAyMDEsIDExMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMTEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTA1LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDE1OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxNjEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTkwLCAKKyAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTksIDIyMiwgMjAwLCAyMjcsIDIwMiwgCisgICAgMTk2LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIwMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTYsIDI0OCwgMjIyLCAyMDAsIAorICAgIDIyNywgMjAyLCAyNDUsIDE3NSwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTUsIDc2LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgCisgICAgMTIyLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjQwLCAKKyAgICAyMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMTEsIDQsIAorICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTA1LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE1OCwgNCwgMjIyLCAyMDAsIDIyNywgCisgICAgMjAyLCAxNjEsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTkwLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NSwgNCwgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAxOTksIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk2LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIAorICAgIDIwMSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTYsIDI0OCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDUsIDE3NSwgNCwgCisgICAgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTUsIDc2LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIyLCA0LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTcsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIAorICAgIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ5LCAKKyAgICAyNTEsIDc1LCAyNDksIDY4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgODksIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAKKyAgICAyMDIsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMjMsIDUyLCAxMjMsIDI0MCwgMjE3LCA3LCAKKyAgICA0LCAxLCAyMjMsIDUyLCAyNTEsIDc0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxOSwgMTI3LCAyMzMsIDg0LCAxNywgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAyNDQsIDEyMywgMjQ1LCAyMzQsIDE3LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIzLCAyMTYsIAorICAgIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTYsIDE0OCwgMjEyLCAxMTQsIDI0NCwgMTAsIDIxMCwgCisgICAgODcsIDIxNiwgMTY3LCAxNDAsIDc1LCAyMTQsIDE1MywgNzUsIDk3LCA3NSwgMjQ2LCAxMTIsIDc1LCA0MywgNDQsIDc1LCAKKyAgICAxMjAsIDEyNCwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgNzUsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjE5LCAzMCwgMjQ1LCAKKyAgICAyMjgsIDc1LCAyMTksIDMwLCAyMTIsIDksIDc1LCAxNDAsIDgwLCAyLCA5MSwgOTcsIDgwLCAyLCA5MSwgMTQwLCAyMTIsIAorICAgIDM2LCA3NSwgOTcsIDIxMiwgMzYsIDc1LCAxNDAsIDExMywgMjQxLCAyNDEsIDc1LCAyMTQsIDE1MywgMTEzLCAyNDEsIDI0MSwgCisgICAgNzUsIDk3LCAxMTMsIDI0MSwgMjQxLCA3NSwgMjQ2LCAxMTIsIDExMywgMjQxLCAyNDEsIDc1LCAxNDAsIDgwLCAyLCAyMTcsIAorICAgIDc4LCA5NywgODAsIDIsIDIxNywgNzgsIDE0MCwgODAsIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCA4MCwgMjQzLCAyNTEsIAorICAgIDEzMCwgOTcsIDgwLCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgODAsIDI0MywgMjUxLCAxMzAsIDEyMCwgMTI0LCA4MCwgMiwgCisgICAgMjUyLCAxMzUsIDE0MCwgODAsIDIsIDEwMywgOTcsIDgwLCAyLCAxMDMsIDE0MCwgODAsIDIsIDIzMiwgMTI5LCA5NywgODAsIAorICAgIDIsIDIzMiwgMTI5LCA0MywgNDQsIDIxMiwgMzYsIDc1LCA0MywgNDQsIDgwLCAyLCA5MSwgMjQ2LCAxMTIsIDIxMCwgMzUsIAorICAgIDc1LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzgsIDIzMywgNDMsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3OCwgMjIyLCAKKyAgICAyNDQsIDI0NiwgMTEyLCA4MCwgMiwgMjE2LCA3OCwgMjMzLCA0MywgMjQ2LCAxMTIsIDgwLCAyLCAyMTYsIDc4LCAyMjIsIAorICAgIDI0NCwgOTcsIDgwLCAyLCAyNDksIDE2OSwgMjQ2LCAxMTEsIDI0NiwgMTEyLCA4MCwgMiwgMjQ5LCAxNjksIDIzMywgNDMsIAorICAgIDI1NCwgOTYsIDIxNiwgMTUsIDIyMCwgMTU1LCA3NSwgMjUwLCAxMCwgMjE2LCAxNSwgMjIwLCAxNTUsIDc1LCAyMjgsIDYxLCAKKyAgICAyMTIsIDksIDgwLCAyMTYsIDQzLCAyMDAsIDEzMCwgMTQwLCA4MCwgMjE2LCA0MywgMjUyLCAxNDksIDExNSwgOTcsIDgwLCAKKyAgICAyMTYsIDQzLCAxMzAsIDI1NCwgOTYsIDIwNCwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDIwNCwgMjUwLCA0NCwgNzUsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNTIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDIxNCwgCisgICAgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI0NCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIzMywgCisgICAgNDMsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE1MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAKKyAgICAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNDQsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICAyMzMsIDQzLCA5NywgODAsIDExNSwgMTQwLCA3NSwgMjE0LCAxNTMsIDgwLCAxNDAsIDY0LCAyNDYsIDExMiwgNzUsIDE0MCwgCisgICAgODAsIDExNSwgOTcsIDc1LCAxNDAsIDIyNiwgNzQsIDI1MywgMjU1LCAyMTQsIDE1MywgMjI2LCA3NCwgMjUzLCAyNTUsIDk3LCAKKyAgICAyMjYsIDc0LCAyNTMsIDI1NSwgMjQ2LCAxMTIsIDIyNiwgNzQsIDI1MywgMjU1LCAxNDAsIDI0MiwgNiwgMTE1LCA5NywgCisgICAgMjQyLCA1LCA5NywgMjQyLCA2LCAxMTUsIDE0MCwgMjQyLCA1LCAxNDAsIDUyLCA4MCwgMiwgOTEsIDQzLCA0NCwgNTIsIDgwLCAKKyAgICAyLCA5MSwgOTcsIDUyLCA4MCwgMiwgOTEsIDE0MCwgNTIsIDc1LCAyMTQsIDE1MywgNTIsIDc1LCA5NywgNTIsIDc1LCAyNDYsIAorICAgIDExMiwgNTIsIDc1LCA0MywgNDQsIDUyLCA3NSwgMTIwLCAxMjQsIDUyLCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA1MiwgNzUsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCA1MiwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA1MiwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgCisgICAgNTIsIDc1LCAxNDAsIDIxNSwgMjEyLCA3NSwgOTcsIDIxNSwgMjEyLCA3NSwgMTQwLCAyMTgsIDIzMiwgNzUsIDk3LCAyMTgsIAorICAgIDIzMiwgNzUsIDIxNCwgMTUzLCA4MCwgMiwgNTIsIDkxLCAyNDYsIDExMiwgODAsIDIsIDUyLCA5MSwgMTQwLCAyNDgsIDE2MywgCisgICAgNzUsIDIxNCwgMTUzLCAyNDgsIDE2MywgNzUsIDk3LCAyNDgsIDE2MywgNzUsIDI0NiwgMTEyLCAyNDgsIDE2MywgNzUsIAorICAgIDE0MCwgODAsIDIxNiwgNDMsIDEzMCwgOTcsIDgwLCAyMTYsIDQzLCAxMzAsIDE0MCwgNzEsIDc1LCAyMTQsIDE1MywgNzEsIAorICAgIDc1LCA5NywgNzEsIDc1LCAyNDYsIDExMiwgNzEsIDc1LCAyMTQsIDE1MywgNzEsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIAorICAgIDE1MywgNzEsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTcsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxOCwgMiwgCisgICAgMjAzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxOCwgMiwgNjcsIDEzMCwgMjE0LCAxNTMsIDcxLCAKKyAgICA1MiwgNzUsIDIxNCwgMTUzLCA3MSwgNTIsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTcsIDk3LCA3MSwgODAsIDI0MywgMjUxLCAKKyAgICAyMTIsIDU2LCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyMTYsIDQzLCAyNDksIDE2OCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAKKyAgICAyMTYsIDQzLCAyNDksIDE2OCwgMTIwLCAxMjQsIDcxLCA3NSwgNDQsIDgwLCAyLCA0LCAyNTAsIDQzLCAyNDYsIDExMiwgODAsIAorICAgIDE0MCwgNjQsIDIxNCwgMTUzLCA3NSwgMTM0LCA5NywgMjUzLCAyNTUsIDE0MCwgODAsIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAKKyAgICA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDY3LCA5MSwgMTQwLCA4MCwgMiwgNTIsIDY3LCA5MSwgOTcsIDgwLCAyLCA1MiwgNjcsIAorICAgIDkxLCA0MywgNDQsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIyNiwgMTc3LCA3NSwgOTcsIDIyNiwgMTc3LCA3NSwgNDMsIAorICAgIDQ0LCAyMjYsIDE3NywgNzUsIDMxLCAyNTQsIDE2MywgMjQ5LCAyMjIsIDIyNiwgMSwgMjQ3LCAyNDEsIDIxNiwgMTg4LCAKKyAgICAyNDUsIDM1LCAyMTYsIDE4OCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NSwgMzYsIDI0NSwgMTYwLCAyMjAsIDEyOSwgMjM1LCAKKyAgICAyNTIsIDIyOSwgMjI2LCAyNDUsIDE3OCwgMjI2LCAyMzUsIDIyOCwgNTcsIDI1NCwgMTMyLCAyNDUsIDE3OCwgMjI2LCAyMzUsIAorICAgIDQsIDI0NSwgMTc4LCAyMjYsIDIzNSwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMzEsIDY3LCAyNDcsIDE0NiwgMjI4LCA1NywgCisgICAgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMzEsIDY3LCA0LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIzMSwgNjcsIDI0NSwgMTUxLCAKKyAgICA2NCwgMjI0LCAxNzUsIDIzMCwgMjksIDIyNCwgMTgzLCAyMzAsIDI5LCAyNDksIDE3MywgMjMwLCAyOSwgMjE4LCA0MSwgCisgICAgMjMwLCAxODcsIDUwLCAyMzAsIDE4NSwgNTAsIDU5LCAyMjUsIDI1LCAyNDcsIDE3NywgMjE5LCA5NywgMjIwLCAxMzAsIAorICAgIDIzMCwgMTg2LCAyNTMsIDIyNSwgMjI2LCAxNzEsIDIyMiwgMjM3LCAyMjYsIDE3MSwgMjUxLCAxMjIsIDIyNiwgMTcxLCA0MiwgCisgICAgMjIyLCAxOTUsIDI0OSwgMTE3LCAyMjIsIDE5NSwgMjQ0LCAxMiwgMjIyLCAxOTUsIDIyNCwgMTcxLCAxMTIsIDIzNSwgMjQxLCAKKyAgICA0NCwgMjU0LCAxMTcsIDI1NCwgMTE3LCAyMzEsIDkzLCAyNTQsIDExNywgMjE5LCAxLCAyNTQsIDExNywgMjQ3LCAxNzksIAorICAgIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDcsIDE4MiwgMjI2LCAxMiwgMTEyLCAyMjgsIDU3LCAyMjYsIDEyLCAxMTIsIDIzMiwgCisgICAgMTUyLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMzUsIDIwNSwgMjE0LCAxNzUsIDIzNSwgMjE4LCA1MiwgMjM1LCAKKyAgICAyMTgsIDIxNSwgMjEyLCAyMzUsIDIxOCwgMjQ5LCAxOTAsIDIzNSwgMjE4LCAyMTgsIDE0LCAyMzUsIDIxOCwgMjEzLCAxMjksIAorICAgIDIzNSwgMjE4LCAyNTAsIDEwLCAyMzUsIDIxOCwgMjUwLCAxMCwgMjQ5LCAxOTAsIDIzNSwgMjE4LCAyNTQsIDk2LCAyNDksIAorICAgIDE5MCwgMjM1LCAyMTgsIDIxNiwgMTg3LCAyNTIsIDc1LCAyMjMsIDE0MCwgMjI0LCAxNzIsIDU5LCAyMzAsIDE4NiwgMjQ1LCAKKyAgICA0MSwgMjQzLCA1MywgMjI0LCAxNzIsIDI0MSwgNjQsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMjMsIDUyLCAxODQsIDIzNSwgCisgICAgMjAwLCAyMzMsIDcxLCAyMjIsIDkzLCAyMTksIDE1OSwgMjEyLCAzNSwgMjExLCAyMDAsIDIyNCwgMTgzLCAyMjgsIDU3LCAKKyAgICAxODQsIDIzMCwgMTg3LCAxODQsIDI1MywgMjE4LCAxMjgsIDExMiwgMjI4LCA1NywgMjUzLCAyMTgsIDEyOCwgMTEyLCAyNTQsIAorICAgIDU2LCAxMjgsIDExMiwgMjU0LCA1NiwgMjUxLCA5NiwgMjI4LCA1NywgMjU1LCAxMywgMTI4LCAxMTIsIDIyOSwgMTA1LCAKKyAgICAyNTQsIDU2LCAyMjgsIDY0LCAyNTUsIDEzLCAxMjgsIDExMiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMjgsIDU3LCAyNTQsIAorICAgIDE1NiwgMTI4LCAxMTIsIDI1NCwgMTU2LCAxMjgsIDE3NywgMTI4LCAxMTIsIDIxNSwgMjEyLCAxODQsIDI1NCwgMTY0LCAKKyAgICAxMjgsIDExMiwgMjQ1LCAxMDIsIDExMiwgMjQzLCA1MiwgMjQ1LCAxMDIsIDExMiwgMjQ3LCAyNDIsIDI1MiwgMzEsIDI1NCwgCisgICAgNTgsIDIxNiwgMTk3LCAyMzIsIDIyNywgMjQzLCA1MiwgMTI4LCAxMTIsIDI1NCwgNTYsIDEyOCwgMjE2LCA0MywgMTc3LCAKKyAgICAyMTYsIDE5NywgMjM2LCAyMiwgMjI2LCAyMzUsIDIzNiwgMjIsIDY0LCAxNzcsIDI1NCwgNTYsIDEyOCwgMTEyLCAyNDksIAorICAgIDIzNSwgMjQ1LCAxMDUsIDI0NSwgMTA2LCAyNDksIDIzNCwgMjIyLCAyMzcsIDIzNiwgNywgMTI4LCAxMTIsIDIyMiwgMjM3LCAKKyAgICAxMjgsIDExMiwgMjQ5LCAxNjIsIDExMiwgMjQ1LCA3NSwgMjQ1LCAxMDQsIDExMiwgMjE4LCAxNTksIDI0NSwgMTA1LCAyNDgsIAorICAgIDYzLCAxMjgsIDExMiwgMTI4LCAyMTYsIDQzLCAyNTEsIDg2LCAyNDgsIDgwLCAyMzEsIDkzLCAyNTEsIDg1LCAyMjQsIDE0LCAKKyAgICAxMjgsIDExMiwgMjI4LCA1NywgMTI4LCAxMTIsIDI0MCwgMTExLCAxMTIsIDIyOCwgNTcsIDI0MCwgMTExLCAxMTIsIDIxOCwgCisgICAgMTExLCAyNDUsIDEwMiwgMTEyLCAyMzMsIDIxLCAxNzcsIDEyOCwgMTEyLCAyNDIsIDEzNywgMTc3LCAxMjgsIDExMiwgMjMzLCAKKyAgICAyMSwgMTE1LCAxMjgsIDExMiwgMjQyLCAxMzcsIDExNSwgMTI4LCAxMTIsIDIzMywgMjEsIDI1MSwgOTYsIDIyOCwgNTcsIAorICAgIDEyOCwgMTEyLCAyNDIsIDEzNywgMjUxLCA5NiwgMjI4LCA1NywgMTI4LCAxMTIsIDIzMCwgMTAyLCAyMzMsIDIwLCAyMzAsIAorICAgIDEwMiwgMjQyLCAxMzYsIDI1MiwgMzEsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDIyOCwgNTcsIDIzMywgMjAsIDIyOCwgCisgICAgNTcsIDI0MiwgMTM2LCAyMjksIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMTI4LCAxMTIsIDIyOSwgMTA1LCAyNDIsIDEzNywgCisgICAgMjI4LCA2NCwgMTI4LCAxMTIsIDIzMywgMjEsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjQyLCAxMzcsIDE3NywgMjQ1LCAxMDIsIAorICAgIDExMiwgMjI5LCAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDI0NSwgMTAyLCAxMTIsIDIyOSwgMTA1LCAyNDIsIDEzNywgMjI4LCAKKyAgICA2NCwgMjQ1LCAxMDIsIDExMiwgMjMzLCAyMSwgMTc3LCAyNDIsIDEzNiwgMjQyLCAxMzcsIDE3NywgMjMzLCAyMCwgMjI5LCAKKyAgICAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDI0MiwgMTM2LCAyMjksIDEwNSwgMjQyLCAxMzcsIDIyOCwgNjQsIDIzMywgMjAsIAorICAgIDIyNCwgMjA1LCAyMTgsIDU2LCAyMjQsIDIwNiwgMTc3LCAxMjgsIDExMiwgMjE4LCA1NywgMTc3LCAxMjgsIDExMiwgMjI0LCAKKyAgICAyMDYsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjE4LCA1NywgMTc3LCAyNDUsIDEwMiwgMTEyLCAyNDcsIDE0NiwgMjI4LCA1NywgCisgICAgMjI0LCAyMDgsIDI0NywgMTQ2LCAyMjgsIDU3LCAyMTgsIDU4LCAyMTgsIDY1LCAyMjYsIDIzNSwgMjE4LCAyMywgMjI2LCAKKyAgICAyMzUsIDIyOCwgNTcsIDExNiwgMjE4LCA2NSwgMjI2LCAyMzUsIDIyOCwgNTcsIDExNiwgMjE4LCAyMywgMjI2LCAyMzUsIAorICAgIDIxOCwgNjUsIDY0LCAxNzcsIDEyOCwgMTEyLCAyMTgsIDIzLCA2NCwgMTc3LCAxMjgsIDExMiwgMjI5LCAxMDUsIDExNiwgCisgICAgMjE4LCA2NSwgNjQsIDIyOCwgNjQsIDEyOCwgMTEyLCAyMjksIDEwNSwgMTE2LCAyMTgsIDIzLCA2NCwgMjI4LCA2NCwgMTI4LCAKKyAgICAxMTIsIDIxOCwgNjUsIDY0LCAyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCAyMywgNjQsIDIsIDIyOCwgNTcsIDEyOCwgCisgICAgMTEyLCAyMzAsIDg2LCAyMzAsIDg3LCAyMzAsIDg4LCAyMzAsIDg3LCAyMTQsIDE3NSwgNDIsIDIzNiwgMjIsIDIyNiwgMjM1LCAKKyAgICA0MiwgMjI2LCAxNTQsIDIyNiwgMjM1LCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgMTI4LCAxMTIsIDQyLCAyMjYsIDE1NCwgNjQsIAorICAgIDE3NywgMTI4LCAxMTIsIDQyLCAyNTEsIDMsIDQyLCAyNDksIDExMCwgMzcsIDIyNSwgMjUsIDM3LCAyMzAsIDE4NiwgMzcsIAorICAgIDIxNiwgODYsIDM3LCAyNDcsIDE3NywgMjE5LCA5NywgMzcsIDU5LCAyMjYsIDE3MSwgMzcsIDIyMiwgMjM3LCAyMjYsIDE3MSwgCisgICAgMzcsIDI1MywgMjI1LCAyMjYsIDE3MSwgMzcsIDI0NSwgMTA1LCAzNywgMjQ4LCAxNjQsIDkyLCAyMjUsIDI1LCA5MiwgMjMwLCAKKyAgICAxODYsIDkyLCAyMTYsIDg2LCA5MiwgNTksIDIyNiwgMTcxLCA0NCwgMjE3LCA4OCwgNDMsIDIxNywgODgsIDEyNCwgMjE3LCAKKyAgICA4OCwgMTIwLCAyMTcsIDg4LCAyNTMsIDIyOCwgMjMwLCAxNjEsIDIxNSwgMTkyLCAyNDQsIDMzLCAyMTUsIDIxMiwgNjcsIAorICAgIDI1MiwgMTQ5LCA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQ0LCAyMTUsIDkzLCAyNDcsIDE0NiwgMjI4LCAKKyAgICA1NywgMjI0LCAxNjYsIDIyOCwgNTcsIDIxNSwgMTkyLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ0LCAzNCwgMjI5LCAxMDcsIAorICAgIDUyLCA2NywgMjUyLCAxNDksIDUyLCA0NCwgMjE1LCA5MywgMjI0LCAyMDYsIDIxNCwgMTg0LCAyMjMsIDk0LCAyMTgsIDU3LCAKKyAgICAyMTQsIDE4NCwgMjIzLCA5NCwgMjI4LCA2MiwgMjE4LCA3OCwgMjI2LCAyMzUsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjI4LCAKKyAgICA2MiwgMjE4LCA3NywgMjI4LCA2MiwgMjE4LCA3OCwgNjQsIDE3NywgMTI4LCAxMTIsIDI0OSwgMTk0LCAyNTMsIDI0NiwgCisgICAgMjI4LCA2MiwgMjE4LCA3OCwgMTc3LCAxMjgsIDExMiwgMjI2LCAxNTQsIDIyNiwgMjM1LCAyMzYsIDIyLCAyMjYsIDIzNSwgCisgICAgMjMwLCA5MiwgMjQxLCAyMDcsIDI0OSwgMjA0LCAyMzEsIDE0MiwgMjM1LCAyMTUsIDIxMSwgMTQ1LCAyMjksIDIwNywgMjI4LCAKKyAgICA2MywgNDQsIDI1NCwgMTE4LCAyLCAyNTQsIDMzLCA0NCwgMjE1LCAyMjYsIDIzMCwgMjksIDIzMiwgMTUyLCAyNTQsIDEyNiwgCisgICAgMjMwLCAyOSwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMzAsIDI5LCAyMzUsIDIwNSwgMjMwLCAyOSwgMjE0LCAxNzUsIDI0OCwgCisgICAgMSwgMjI2LCAxNzEsIDU5LCAyMjYsIDE3MSwgMjE4LCAxNTksIDIyNiwgMTcxLCAyNDcsIDE3NywgMjE2LCA4NiwgMjUxLCAKKyAgICAxNzIsIDQzLCAyMjgsIDYyLCAyNDQsIDE4OSwgMjIwLCAxNTEsIDIyNCwgMTgzLCA0NCwgMjI4LCA2MiwgMjQ0LCAxODksIAorICAgIDIyMCwgMTUxLCAyMjQsIDE4MywgNDMsIDIyMCwgMTUxLCAyMjQsIDE4MywgNDQsIDIyMCwgMTUxLCAyMjQsIDE4MywgMjIzLCAKKyAgICA1MiwgMjE2LCA5MCwgMjQ1LCAxMDUsIDI0OSwgMTA3LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDI0OSwgMTA3LCAyMzIsIDE1MiwgCisgICAgMjU0LCAxMjYsIDUyLCAyMTgsIDY0LCA1MiwgMjE4LCAyMiwgNTIsIDIzNSwgMjA1LCA1MiwgMjE0LCAxNzUsIDIyNSwgNTAsIAorICAgIDEyOCwgMjIsIDIyNiwgMTIsIDExMiwgMjMzLCAyMSwgMiwgMjQ3LCAxMjgsIDI0MiwgMTM3LCAyLCAyNDcsIDEyOCwgMjEzLCAKKyAgICAxODcsIDIzMCwgMTAyLCAyMzMsIDIwLCAyMTMsIDE4NywgMjMwLCAxMDIsIDI0MiwgMTM2LCAyMzMsIDIxLCAxMjgsIDIxNiwgCisgICAgNDMsIDE3NywgMjQyLCAxMzYsIDI0MiwgMTM3LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMTI4LCAyMTYsIDQzLCAKKyAgICAxNzcsIDIzMywgMjAsIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMTI4LCAyMTYsIDQzLCAxNzcsIDIyNCwgMjA1LCAKKyAgICAxMjgsIDIxNiwgNDMsIDE3NywgMjE4LCA1NiwgMjQ3LCAxNDYsIDIyOCwgNTcsIDIyNCwgMjA5LCAxNzcsIDI0NSwgMTA3LCAKKyAgICAyNDcsIDE0NiwgMjI4LCA1NywgMjE4LCA1OSwgMTc3LCAyNDUsIDEwNywgMjI4LCA1NywgNDIsIDIzNiwgMjIsIDY0LCAxNzcsIAorICAgIDEyOCwgMTEyLCAyMjgsIDU3LCA0MiwgMjI2LCAxNTQsIDY0LCAxNzcsIDEyOCwgMTEyLCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgCisgICAgMjI4LCA1NywgMTI4LCAxMTIsIDQyLCAyMjYsIDE1NCwgNjQsIDE3NywgMjI4LCA1NywgMTI4LCAxMTIsIDIzMywgMjEsIAorICAgIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDI0MiwgMTM3LCAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgCisgICAgMTEyLCAyMjQsIDIwNiwgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjE4LCA1NywgMjUxLCA5NiwgMjI4LCAKKyAgICA1NywgMjQ1LCAxMDIsIDExMiwgMjI4LCA1NywgMjI4LCA2MiwgMjE4LCA3OCwgMjI2LCAyMzUsIDI0NywgMTQ2LCAyMjgsIAorICAgIDU3LCAyNDksIDE5NiwgMjUzLCAyNDYsIDIyOCwgNjIsIDIxOCwgNzcsIDIyOCwgNTcsIDIyOCwgNjIsIDIxOCwgNzgsIDY0LCAKKyAgICAxNzcsIDEyOCwgMTEyLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMjgsIDYyLCAyMTgsIDc4LCAKKyAgICAxNzcsIDI0NSwgMTA3LCA2NywgMjQ1LCAxNzEsIDIzMCwgMjI3LCAyMDMsIDI0NSwgMTcxLCAxMjAsIDQ0LCAyNDgsIDcsIAorICAgIDI0NSwgMTcxLCAxMjQsIDQ0LCAyNDgsIDcsIDI0NSwgMTcxLCAyNDUsIDE3OCwgNjQsIDIsIDIwMCwgMjAzLCA5MSwgMjQ1LCAKKyAgICAxNzgsIDY0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDQsIDI0NSwgMTc4LCAKKyAgICA2NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAyNDUsIDE3OCwgNjQsIDIsIAorICAgIDU5LCA0OCwgMjQ1LCAxNzgsIDY0LCAyLCAyMjYsIDEyNywgNCwgMjQ1LCAxNzgsIDY0LCAyLCAyMjYsIDEyNywgMjQ1LCAKKyAgICAxNzgsIDY0LCAyLCAyMTQsIDE4MywgMjQ1LCAxNzgsIDY0LCAyLCAxMTMsIDIwMywgMjE4LCA5MiwgMjQ5LCAxOTQsIDIsIAorICAgIDIwMCwgMjAzLCA5MSwgMjQ5LCAxOTQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgCisgICAgNCwgMjQ5LCAxOTQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgMjQ5LCAxOTQsIAorICAgIDIsIDIyNiwgMTI3LCA0LCAyNDksIDE5NCwgMiwgMjI2LCAxMjcsIDIxMCwgMTYwLCAxODksIDI1MiwgMTgxLCAyMzEsIDY2LCAKKyAgICAyNDgsIDIsIDUwLCAyNDUsIDE4MCwgNzUsIDI0MCwgMjQxLCAxMjAsIDI1NCwgMSwgMTI0LCAyNTQsIDEsIDIyNCwgMTc4LCAKKyAgICAyMjUsIDE2OCwgMjEyLCAzMiwgMjMyLCAyMTksIDQzLCAyNTAsIDE4OSwgNDQsIDI1MCwgMTg5LCA0MywgMjQ0LCA2NSwgNDQsIAorICAgIDI0NCwgNjUsIDI1MSwgMTgzLCA0NCwgMjQ5LCAxNDAsIDI1MSwgMTgzLCA0MywgMjQ5LCAxNDAsIDIxNiwgMTUsIDQ0LCAKKyAgICAyNDksIDE0MCwgMjE2LCAxNSwgNDMsIDI0OSwgMTQwLCAyMjMsIDUyLCAyMjgsIDU3LCA1MCwgNDIsIDIzMiwgMTEwLCAyNTQsIAorICAgIDMzLCAyMjEsIDE2NiwgMjIxLCAxNzMsIDIxNywgMiwgMjIzLCAxMjMsIDIyNCwgMjQ0LCAyMzUsIDI0NSwgMjEzLCAxNjUsIAorICAgIDIxOCwgMjM2LCAyMjUsIDQ0LCA2NCwgMjM1LCAyMTQsIDUwLCAyMTUsIDk0LCAyMjgsIDU3LCA1MCwgMjEyLCA0MiwgMjQwLCAKKyAgICAyNDMsIDIxNiwgMTUsIDQzLCAyNDksIDE2OCwgMjE2LCAxNSwgNDQsIDI0OSwgMTY4LCAyNTEsIDE4MywgNDMsIDI0OSwgCisgICAgMTY4LCAyNTEsIDE4MywgNDQsIDI0OSwgMTY4LCAyMTYsIDE1LCAxNjMsIDIzNSwgMjE4LCAyNTEsIDE4MywgMTYzLCAyMzUsIAorICAgIDIxOCwgMjQzLCAyNDgsIDIxOSwgNzcsIDEyMCwgMjU0LCAyLCAyNTIsIDMyLCAxMTMsIDIwMywgMjUyLCAxMzcsIDIyNiwgCisgICAgMTY0LCAyMzQsIDE0NCwgMjQ1LCA5OCwgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCAyMTEsIDE3OSwgMjM2LCA3LCAKKyAgICAxMTYsIDIyMywgMTIwLCAyNTEsIDE3MSwgMjM0LCAxNDMsIDIzMywgNDgsIDI1NCwgMTE4LCAxMjcsIDIyMiwgMjUwLCAyNTQsIAorICAgIDExOCwgMTI3LCAyNDUsIDk4LCAyMTYsIDQzLCAyMTYsIDE5NywgMjMzLCA1MiwgMjUyLCA0MywgMjIyLCAyMzYsIDI0OSwgCisgICAgNzgsIDI1NCwgMTY0LCAyNTQsIDksIDIxNywgMTgyLCAyMTYsIDUsIDIyMiwgMTI1LCAyNDcsIDIyMywgMjI2LCAxNTUsIAorICAgIDI0OSwgMjA2LCAyMTcsIDUzLCAyMTksIDg4LCAyNDksIDE1OSwgMjQ5LCAxNTgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjQwLCAxNTgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAyMzAsIDIyNCwgMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjI0LCAzMSwgMjQ1LCAxMDcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQ3LCAxODIsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQ4LCAwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIzNSwgNjIsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjUwLCA0MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAKKyAgICAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIxOSwgOTgsIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTIsIDE4OSwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIyNCwgMzEsIDIxOSwgOTcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjUyLCAxODgsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjMzLCAyMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDIsIDEzNiwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxNDAsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgOTcsIDIxNCwgMTksIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTQwLCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKKyAgICA5NywgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjUyLCAxODgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMTI0LCAyMTcsIDg5LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDYzLCAyMTgsIDEzNywgMjU0LCAKKyAgICA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxMjQsIDI1MCwgMjQ2LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAorICAgIDI0OCwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyMTcsIDg5LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIxNCwgMTUzLCAyMTQsIDE5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIxNCwgMTUzLCA3NSwgMjU0LCAKKyAgICA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDIyNiwgMTI3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIAorICAgIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDEyMCwgMjUwLCAyNDYsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMSwgMjQ4LCA3MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDIzNSwgNjIsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ2LCAxMTIsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCisgICAgMjQ2LCAxMTIsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMCwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjQ4LCA2MywgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCAxLCAyMTQsIDE4MywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMzUsIDYzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMTQsIAorICAgIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIyMCwgNywgMjM1LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMjQsIDAsIDIyNCwgMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjE4LCAxNTgsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMSwgMjQ5LCAyMzQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMTcsIDg5LCAyNDgsIDksIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMTU5LCAKKyAgICAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjM1LCA2MywgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDI1MCwgNDQsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDIyMCwgNywgMjE4LCAxMzcsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgNDMsIDIyMCwgNywgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE2LCA5MCwgMjQ4LCAKKyAgICA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0MiwgMTM3LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ5LCAKKyAgICAyMjgsIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjEwLCAzNCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDEzOCwgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIyMCwgMTUzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMjgsIDU3LCAyNDUsIDEwNywgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMjQsIDE1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjUwLCAKKyAgICAyNDcsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDI1MCwgMjQ3LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjM1LCAxOTIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjIzLCA0MCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjYsIAorICAgIDIwNSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTQsIDE1MiwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjQ1LCAxMDksIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIzNSwgMTkzLCAyMTQsIDE4MywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMjYsIDIwNiwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjU0LCAxNTEsIDIyOCwgCisgICAgNTcsIDI1MCwgMTM4LCA3OSwgNDQsIDI1NCwgMTE4LCAyLCAyNDYsIDExMiwgMjEwLCAzNSwgNzUsIDIxOSwgMjM3LCAyMDQsIAorICAgIDI1MSwgMTcxLCAyNTIsIDUzLCA4NywgNjcsIDIzMiwgMjIwLCAyLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIzNSwgMjIzLCA4NywgCisgICAgMjQ5LCAxOTEsIDIxNCwgMTgxLCA4NywgMjQ3LCAxOTcsIDIxNCwgMTgxLCA4NywgMjQ1LCAxNjIsIDg3LCAyNDksIDIxOCwgCisgICAgODcsIDcxLCA0MiwgMiwgMjUwLCAxODMsIDY3LCAyMzIsIDIxOSwgMjQ1LCAxMzgsIDg3LCAyNTQsIDE0NywgMjM0LCAxNDUsIAorICAgIDg3LCAyNDEsIDIyMCwgODcsIDM3LCAyMDMsIDI1MiwgMTQ5LCAyLCAyMjgsIDU1LCAzNywgMjE1LCAyMjcsIDI0NiwgMTE0LCAKKyAgICAyNTEsIDE0MywgMjUwLCA0NCwgMiwgMjI4LCA1OSwgNzUsIDIxNCwgMTc5LCA4NywgMjMwLCAxNDIsIDg3LCAyNDAsIDE3MSwgCisgICAgODcsIDIyNiwgMTc4LCAyNDIsIDY2LCA4NywgMjI2LCAxNzgsIDIzMywgMTUzLCA4NywgMjI1LCAyNDgsIDg3LCAyMjUsIAorICAgIDI0NywgODcsIDI0NywgMjA1LCAyNDksIDEwNSwgMTYsIDI0NCwgMjgsIDEwNSwgMjE5LCA1MiwgODcsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMCwgMjQ4LCA5MSwgMjIwLCAxNDAsIDIzNCwgMTQ1LCA4NywgMjI0LCAxOTUsIDIyNiwgNzksIAorICAgIDIyOSwgODcsIDIyNiwgNzksIDIyNCwgMTkxLCAyMjEsIDE5MSwgODcsIDI1MCwgMjUsIDIyMSwgMTkxLCA4NywgNDMsIDIyNiwgCisgICAgOCwgMjE0LCAxNjAsIDEwMywgNDMsIDIyNiwgOCwgMjQ1LCAyOSwgNDMsIDIyNiwgOCwgMjMyLCAxMTQsIDEwMywgNDQsIAorICAgIDIyNiwgOCwgMjE0LCAxNjAsIDEwMywgNDQsIDIyNiwgOCwgMjQ1LCAyOSwgNDQsIDIyNiwgOCwgMjMyLCAxMTQsIDEwMywgCisgICAgNDMsIDQyLCAyNTEsIDE2NiwgMjE0LCAxNjAsIDI0OSwgMTY4LCA0MywgNDIsIDI1MSwgMTY2LCAyNDUsIDI5LCA0MywgNDIsIAorICAgIDI1MSwgMTY2LCAyMzIsIDExNCwgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIxNCwgMTYwLCAyNDksIDE2OCwgNDQsIAorICAgIDQyLCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDQsIDQyLCAyNTEsIDE2NiwgMjMyLCAxMTQsIDI0OSwgMTY4LCA0MywgMjQ5LCAKKyAgICAxMDcsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMTAzLCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzAsIDIyOSwgMjI1LCAxMDQsIAorICAgIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMiwgMTE0LCAxMDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDQsIAorICAgIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjE0LCAxNjAsIDEwMywgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMwLCAyMjksIDIyNSwgCisgICAgMTA0LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzIsIDExNCwgMTAzLCAyMzUsIDIxOSwgMjQ1LCAyOSwgMjAzLCAyMzIsIAorICAgIDIyMCwgMjQ1LCAyOSwgMjE0LCAxNjAsIDQzLCAxNzcsIDIzMiwgMTE0LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjEsIAorICAgIDE3NCwgMjE0LCAxNjAsIDQ0LCAxNzcsIDIzMiwgMTE0LCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjEsIDE3NCwgMjE4LCAKKyAgICA0MiwgMjE2LCAxNCwgMjE4LCA0MiwgMjUxLCAxODIsIDIxNiwgMTUsIDQyLCAxMjcsIDI1MSwgMTgzLCA0MiwgMTI3LCAyNTEsIAorICAgIDE4MywgNDIsIDI1MSwgMTY2LCAxMTUsIDIxNiwgMTUsIDQyLCAxMjcsIDM0LCAxNiwgMjUxLCAxODIsIDQzLCA2NywgOTMsIAorICAgIDIzMiwgMjE5LCA0NCwgNjcsIDkzLCAyMzIsIDIxOSwgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTgsIDIwMywgMjIxLCAyMDcsIAorICAgIDIzMiwgMjE3LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxNiwgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTUsIDI0OCwgNTQsIDE2LCAKKyAgICAxOTMsIDY3LCAyMiwgMjE2LCAxNSwgMjIyLCAyNTQsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyMiwgMjUxLCAxODMsIDIyMiwgCisgICAgMjU0LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMiwgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAKKyAgICAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAxMjAsIDIyLCAyMDMsIDIsIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIAorICAgIDY3LCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgCisgICAgMTYsIDE5MywgMTIwLCAyMiwgMjAzLCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyMTIsIDM1LCAKKyAgICAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIDIxMiwgMzUsIDI0OCwgNTQsIDE2LCAxOTMsIDEyMCwgMjIsIAorICAgIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjQxLCA1MSwgMjQ4LCA1NCwgMTYsIDE5MywgCisgICAgMTIwLCAyMiwgMjQxLCA1MSwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyMTYsIDE1LCAyMzMsIDUyLCAyNDgsIDU0LCAKKyAgICAxNiwgMTkzLCA2NywgMjIsIDI1MSwgMTgzLCAyMzMsIDUyLCA0MiwgMjQ0LCA0MCwgMjIzLCA1NywgODcsIDI0NSwgMTkwLCAKKyAgICA4NywgNjcsIDIzMiwgMjIwLCAyNDUsIDI5LCAyMzEsIDM4LCAyNTEsIDE1NCwgMjMxLCAzOCwgMjAwLCAxMTUsIDIxOSwgCisgICAgMjUyLCAyMzEsIDM4LCAyMTksIDI1MywgMTE1LCAyMzIsIDE0MywgMjMxLCAzOCwgMjAwLCAxMTUsIDExMywgMjE5LCAyMzksIAorICAgIDIzMSwgMzgsIDExMywgMjE5LCAyNDAsIDExNSwgMjMyLCAxNDMsIDIzMSwgMzgsIDExMywgMjE5LCAyNDAsIDIzNSwgNzAsIAorICAgIDIzMSwgMzgsIDIxNSwgMjA5LCAyMzEsIDM4LCAyMTYsIDIyNCwgMjMxLCAzOCwgMjI1LCAxOTEsIDI0NSwgMjMyLCAyNDIsIAorICAgIDEyOSwgMjQzLCAyMjYsIDIxNiwgMTUsIDIyNiwgNywgMjUxLCAxODMsIDIyNiwgNywgMjE2LCAxNSwgMjQ5LCAxMDcsIDEyNywgCisgICAgMjUxLCAxODMsIDI0OSwgMTA3LCAxMjcsIDIxNiwgMTUsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyNTEsIDE4MywgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDcxLCAyMTUsIDI0MCwgMjUyLCA0MywgMjIyLCAyMzcsIDIsIDI1MCwgNDMsIDIxOCwgMTIyLCAyNDQsIAorICAgIDcyLCAyNTUsIDI2LCAyNDksIDEwNCwgMjQ1LCAxNzksIDIzNSwgMjA1LCAyNDgsIDkxLCAyNDUsIDMyLCA4NywgODUsIDIyMiwgCisgICAgMjUwLCA1MiwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCA1MiwgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MiwgNTIsIDIxNSwgMjI2LCAKKyAgICA4NSwgMjQ2LCAxMTMsIDUyLCAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCA1MiwgMjE1LCAyMjcsIDIsIDY3LCAxMzAsIDg1LCAKKyAgICAyMzMsIDQ4LCA1MiwgMjE1LCAyMjcsIDIsIDY3LCAxMzAsIDg1LCAyMjIsIDI1MCwgMjE1LCAyMjcsIDIsIDUyLCA2NywgCisgICAgMTMwLCAyNTQsIDE4MiwgMjUwLCAxMSwgMjE4LCAxMjgsIDIxNiwgODcsIDI1MCwgMTEsIDI0MCwgMjQ0LCAyLCAyNDQsIDU4LCAKKyAgICAyMjEsIDI0MywgMTYsIDMxLCAyMjcsIDIwNiwgMTYsIDMxLCAyMTgsIDE1NCwgNjQsIDI0MSwgMjQwLCAxNiwgMzEsIDIxOCwgCisgICAgMTU0LCA2NCwgMjE2LCAyMTMsIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIAorICAgIDIxNSwgMjQ0LCAxNiwgMzEsIDI0NSwgMTQwLCAxNiwgMzEsIDI1NSwgMTYsIDE2LCAzMSwgMjUyLCA1MiwgMTYsIDMxLCAKKyAgICAyNTIsIDE4NywgMTYsIDMxLCAyMDMsIDIxNywgOTAsIDE2LCAzMSwgMjMyLCAyMjAsIDI0NCwgMTUzLCAxNiwgMzEsIDY3LCAKKyAgICAyMTcsIDkwLCAxNiwgMzEsIDI0NCwgMjgsIDI0NCwgMTUzLCAxNiwgMzEsIDI1MCwgMjM4LCAyMjMsIDU2LCAxNiwgMzEsIAorICAgIDIyMCwgMzAsIDIyNiwgMTM0LCAxNiwgMzEsIDIyMCwgMzAsIDIzNiwgNiwgMTYsIDMxLCAyNDgsIDE1OSwgMjMyLCAyMTAsIAorICAgIDI0NSwgODUsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDExMSwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTA1LCAKKyAgICAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE2MSwgMTYsIDMxLCAKKyAgICAxNTIsIDI1NSwgMTYsIDE2LCAzMSwgMjE3LCAxNzgsIDIzNiwgNjksIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMTUsIDI0NSwgCisgICAgMjUxLCAyMjEsIDE2LCAzMSwgMjUxLCAxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIzMSwgODYsIDE2LCAzMSwgMjE4LCAKKyAgICA2MiwgMTYsIDMxLCAyNDUsIDg1LCAxNiwgMzEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMTYsIDMxLCAyNDIsIDEyOCwgMjIwLCAKKyAgICAxMzksIDE2LCAzMSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAxNiwgMzEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMTYsIDMxLCAyMTksIAorICAgIDIwLCAxNiwgMzEsIDI0OCwgNzEsIDI1MSwgMjI0LCA4NywgMjA0LCAyNTEsIDE3MSwgMTYsIDMxLCAyMjksIDkwLCAxNiwgCisgICAgMzEsIDI0OCwgNzIsIDI0NCwgMjgsIDEwNSwgMTYsIDMxLCAyMTgsIDYzLCAyNDQsIDI4LCAxMDUsIDIyNiwgMjQ1LCAxMDMsIAorICAgIDIyNiwgMjQ1LCAyNTAsIDE2MCwgMjI2LCAyNDUsIDI0NCwgMzEsIDIyNiwgMjQ1LCAyMzUsIDIwMCwgMjQ0LCAzMSwgMjI2LCAKKyAgICAyNDUsIDI1MiwgNTAsIDI1MSwgMTMyLCAyMjYsIDI0NSwgMjUxLCAxNzgsIDIxNiwgMTEyLCAyMjYsIDI0NSwgMjUxLCAxNjMsIAorICAgIDI1MiwgMTU0LCAyNDAsIDExMCwgMjI2LCAyNDUsIDI1NCwgMTM1LCA2NCwgMjUwLCAxMzcsIDIyNiwgMjQ1LCAyNDgsIDE2NCwgCisgICAgMjI2LCAyNDUsIDI0OSwgOTUsIDI1NSwgMjAsIDIyNywgMjA0LCAyMjYsIDI0NSwgNTIsIDI1MiwgMTg4LCAzNywgMjEsIAorICAgIDExMSwgMzcsIDIxLCAxMDUsIDM3LCAyMSwgMTU4LCAzNywgMjEsIDE2MSwgMzcsIDIxLCAxOTAsIDM3LCAyMSwgMTk1LCAzNywgCisgICAgMjEsIDE5OSwgMzcsIDIxLCAxOTYsIDM3LCAyMSwgMjAxLCAzNywgNTQsIDIxNiwgMjQ4LCAzNywgNTQsIDI0NSwgMTc1LCAKKyAgICAzNywgNTQsIDIxNSwgNzYsIDM3LCA1NCwgMjE2LCAxNjUsIDM3LCA1NCwgMjQ0LCAxMywgMzcsIDU0LCAyNDQsIDEyNiwgMzcsIAorICAgIDU0LCAyMTksIDEyMSwgMzcsIDU0LCAyMjAsIDEyMSwgMzcsIDU0LCAyNDUsIDE5OCwgMzcsIDU0LCAyMjgsIDIwMiwgMzcsIAorICAgIDU0LCAyMTUsIDczLCA4OCwgMjEsIDExMSwgODgsIDIxLCAxMDUsIDg4LCAyMSwgMTU4LCA4OCwgMjEsIDE2MSwgODgsIDIxLCAKKyAgICAxOTAsIDg4LCAyMSwgMTk1LCA4OCwgMjEsIDE5OSwgODgsIDIxLCAxOTYsIDg4LCAyMSwgMjAxLCA4OCwgNTQsIDIxNiwgCisgICAgMjQ4LCA4OCwgNTQsIDI0NSwgMTc1LCA4OCwgNTQsIDIxNSwgNzYsIDg4LCA1NCwgMjE2LCAxNjUsIDg4LCA1NCwgMjQ0LCAKKyAgICAxMywgODgsIDU0LCAyNDQsIDEyNiwgODgsIDU0LCAyMTksIDEyMSwgODgsIDU0LCAyMjAsIDEyMSwgODgsIDU0LCAyNDUsIAorICAgIDE5OCwgODgsIDU0LCAyMjgsIDIwMiwgODgsIDU0LCAyMTUsIDczLCAyMSwgMTIzLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAKKyAgICAxMTMsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDEzNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ0LCAxOSwgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ0LCA4OSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjE5LCAxMjcsIDI0MywgMjM2LCAKKyAgICAyMTgsIDEzMSwgMjEsIDIyMCwgMTI0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDUsIDIwMSwgMjQzLCAyMzYsIDIxOCwgCisgICAgMTMxLCAyMSwgMjI4LCAyMDUsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxNiwgMjQ5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIAorICAgIDU0LCAyNDUsIDE3NiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE1LCA3NywgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgCisgICAgMjE2LCAxNjYsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NCwgMTQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NCwgCisgICAgMTI3LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTksIDEyMiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjIwLCAxMjIsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NSwgMTk5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMjgsIDIwMywgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCA1NCwgMjE1LCA3NCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4OCwgNywgNCwgMSwgNjEsIDg4LCA3LCAKKyAgICA0LCAxLCAyNTMsIDE2NiwgODgsIDcsIDQsIDEsIDI1MSwgNzQsIDg4LCA3LCA0LCAxLCAyNDksIDY4LCA4OCwgNywgNCwgMSwgCisgICAgNzYsIDg4LCA3LCA0LCAxLCAyNDUsIDE0LCA4OCwgNywgNCwgMSwgMjQzLCAyMDksIDg4LCA3LCA0LCAxLCAyNDIsIDY3LCAKKyAgICA4OCwgNywgNCwgMSwgNzQsIDg4LCA3LCA0LCAxLCAyMzUsIDE1MCwgODgsIDcsIDQsIDEsIDIzNSwgMjksIDg4LCA3LCA0LCAKKyAgICAxLCAxNTYsIDg4LCA3LCA0LCAxLCAxOTQsIDg4LCA3LCA0LCAxLCAyMzAsIDMwLCA4OCwgNywgNCwgMSwgNzgsIDg4LCA3LCAKKyAgICA0LCAxLCAyMjYsIDEwOSwgODgsIDcsIDQsIDEsIDIyNCwgOTksIDg4LCA3LCA0LCAxLCAxNTMsIDg4LCA3LCA0LCAxLCAyMjIsIAorICAgIDkzLCA4OCwgNywgNCwgMSwgMjE3LCAxNTMsIDg4LCA3LCA0LCAxLCA2OSwgODgsIDcsIDQsIDEsIDIxNCwgMTA1LCA4OCwgNywgCisgICAgNCwgMSwgMjEyLCA5OCwgODgsIDcsIDQsIDEsIDIxMSwgMTc4LCA4OCwgNywgNCwgMSwgMjExLCAxMTcsIDg4LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMzcsIDcsIDYsIDEsIDYxLCAzNywgNywgNiwgMSwgMjUzLCAxNjYsIDM3LCA3LCA2LCAxLCAyNTEsIDc0LCAKKyAgICAzNywgNywgNiwgMSwgMjQ5LCA2OCwgMzcsIDcsIDYsIDEsIDc2LCAzNywgNywgNiwgMSwgMjQ1LCAxNCwgMzcsIDcsIDYsIDEsIAorICAgIDI0MywgMjA5LCAzNywgNywgNiwgMSwgMjQyLCA2NywgMzcsIDcsIDYsIDEsIDc0LCAzNywgNywgNiwgMSwgMjM1LCAxNTAsIAorICAgIDM3LCA3LCA2LCAxLCAyMzUsIDI5LCAzNywgNywgNiwgMSwgMTU2LCAzNywgNywgNiwgMSwgMTk0LCAzNywgNywgNiwgMSwgCisgICAgMjMwLCAzMCwgMzcsIDcsIDYsIDEsIDc4LCAzNywgNywgNiwgMSwgMjI2LCAxMDksIDM3LCA3LCA2LCAxLCAyMjQsIDk5LCAKKyAgICAzNywgNywgNiwgMSwgMTUzLCAzNywgNywgNiwgMSwgMjIyLCA5MywgMzcsIDcsIDYsIDEsIDIxNywgMTUzLCAzNywgNywgNiwgCisgICAgMSwgNjksIDM3LCA3LCA2LCAxLCAyMTQsIDEwNSwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDM3LCA3LCA2LCAxLCAyMTEsIAorICAgIDE3OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDM3LCA3LCA0LCAxLCA2MSwgMzcsIAorICAgIDcsIDQsIDEsIDI1MywgMTY2LCAzNywgNywgNCwgMSwgMjUxLCA3NCwgMzcsIDcsIDQsIDEsIDI0OSwgNjgsIDM3LCA3LCA0LCAKKyAgICAxLCA3NiwgMzcsIDcsIDQsIDEsIDI0NSwgMTQsIDM3LCA3LCA0LCAxLCAyNDMsIDIwOSwgMzcsIDcsIDQsIDEsIDI0MiwgNjcsIAorICAgIDM3LCA3LCA0LCAxLCA3NCwgMzcsIDcsIDQsIDEsIDIzNSwgMTUwLCAzNywgNywgNCwgMSwgMjM1LCAyOSwgMzcsIDcsIDQsIAorICAgIDEsIDE1NiwgMzcsIDcsIDQsIDEsIDE5NCwgMzcsIDcsIDQsIDEsIDIzMCwgMzAsIDM3LCA3LCA0LCAxLCA3OCwgMzcsIDcsIAorICAgIDQsIDEsIDIyNiwgMTA5LCAzNywgNywgNCwgMSwgMjI0LCA5OSwgMzcsIDcsIDQsIDEsIDE1MywgMzcsIDcsIDQsIDEsIDIyMiwgCisgICAgOTMsIDM3LCA3LCA0LCAxLCAyMTcsIDE1MywgMzcsIDcsIDQsIDEsIDY5LCAzNywgNywgNCwgMSwgMjE0LCAxMDUsIDM3LCA3LCAKKyAgICA0LCAxLCAyMTIsIDk4LCAzNywgNywgNCwgMSwgMjExLCAxNzgsIDM3LCA3LCA0LCAxLCAyMTEsIDExNywgMzcsIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAzNywgMjEsIDIxMCwgODYsIDE1MiwgMzcsIDU0LCAyNDUsIDE3NSwgMTUyLCAzNywgNTQsIDIxNSwgNzYsIAorICAgIDE1MiwgMzcsIDU0LCAyMTYsIDE2NSwgMTUyLCAzNywgNTQsIDI0NCwgMTMsIDE1MiwgMzcsIDU0LCAyNDQsIDEyNiwgMTUyLCAKKyAgICAzNywgNTQsIDIxOSwgMTIxLCAxNTIsIDM3LCA1NCwgMjIwLCAxMjEsIDE1MiwgMzcsIDU0LCAyNDUsIDE5OCwgMTUyLCAzNywgCisgICAgNTQsIDIyOCwgMjAyLCAxNTIsIDM3LCA1NCwgMjE1LCA3MywgNTIsIDM3LCAyMSwgMTExLCA1MiwgMzcsIDIxLCAxMDUsIDUyLCAKKyAgICAzNywgMjEsIDE1OCwgNTIsIDM3LCAyMSwgMTYxLCA1MiwgMzcsIDIxLCAxOTAsIDUyLCAzNywgMjEsIDE5NSwgNTIsIDM3LCAKKyAgICAyMSwgMTk5LCA1MiwgMzcsIDIxLCAxOTYsIDUyLCAzNywgMjEsIDIwMSwgNTIsIDM3LCA1NCwgMjE2LCAyNDgsIDE1MiwgMzcsIAorICAgIDIxLCAyMTAsIDg2LCA5MywgOTksIDE5MywgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAKKyAgICAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIxMywgMjM5LCA5MywgOTksIDE5MywgMjE1LCAyMTIsIDI0OCwgMTY1LCAyNDEsIAorICAgIDUxLCA5MywgOTksIDExNCwgMjE1LCAyMTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDE5MywgMjE1LCAyMTIsIDI0OCwgCisgICAgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIxNSwgMjEyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAKKyAgICAyMjQsIDI3LCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDIyNCwgMjcsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgCisgICAgOTksIDE5MywgMjI0LCAyNywgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjI0LCAyNywgMjQ4LCAxNjUsIAorICAgIDIxMywgMjM5LCA5MywgOTksIDE5MywgMTI0LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0NCwgMjQxLCAKKyAgICAyMjgsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMjIsIDI1NCwgCisgICAgOTMsIDk5LCAxOTMsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIAorICAgIDE5MywgMTIwLCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCA0NCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKKyAgICAxMTQsIDIyLCA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDEyMCwgCisgICAgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAKKyAgICA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgNjcsIDIyLCAyMjIsIAorICAgIDI1NCwgOTMsIDk5LCA2NywgMTkzLCAyMiwgNDQsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDEyNCwgCisgICAgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAyMiwgCisgICAgNDQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxOTMsIAorICAgIDIyLCA0NCwgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCA2NywgCisgICAgMjIsIDIzMywgNTIsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQzLCAKKyAgICAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgCisgICAgMjIsIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQzLCAxMjAsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTkzLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAKKyAgICAxMjQsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgCisgICAgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIAorICAgIDEyNCwgMTE0LCAyMiwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTkzLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgNDMsIDE5MywgMjIsIDQ0LCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjQxLCA1MSwgOTMsIAorICAgIDk5LCAxOTMsIDEyMCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgCisgICAgOTksIDQ0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDIwMywgMjQxLCAyMjgsIAorICAgIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgMTIwLCAyNDEsIAorICAgIDIyOCwgOTMsIDk5LCA0MywgMTkzLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyNDEsIAorICAgIDUxLCA5MywgOTksIDE5MywgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgNjcsIDIzMiwgMjM2LCAKKyAgICA5MywgOTksIDQ0LCAxMTQsIDIyLCA0MywgNjcsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxOTMsIDIyLCAyMDMsIDI0MSwgCisgICAgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgMTI0LCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgMTIwLCAKKyAgICAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQzLCAxMjAsIDExNCwgCisgICAgMjIsIDQ0LCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxMjAsIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjM2LCA5MywgCisgICAgOTksIDQzLCAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxMjQsIDExNCwgMjIsIDQzLCAKKyAgICAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgMTIwLCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTkzLCAyMiwgMTI0LCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgNjcsIDI0MSwgMjI4LCA5MywgCisgICAgOTksIDQzLCAxOTMsIDIyLCA0NCwgNjcsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIAorICAgIDE5MywgNTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIAorICAgIDE5MywgNTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgCisgICAgNTIsIDI0MSwgNTEsIDkzLCA5OSwgNTIsIDIxMywgMjM5LCA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDMsIDIxOSwgCisgICAgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyMCwgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTIwLCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDMsIDIxOSwgCisgICAgMTU2LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDY3LCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAorICAgIDEyMSwgOTMsIDk5LCA2NywgNTIsIDIyLCA0NCwgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjIyLCAyNTQsIDkzLCAKKyAgICA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDY3LCA1MiwgMjIsIDQzLCAyMTksIDE1NiwgOTMsIAorICAgIDk5LCA1MiwgNjcsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgCisgICAgOTksIDEyNCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyNDEsIDUxLCA5MywgOTksIAorICAgIDEyMCwgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgCisgICAgOTksIDUyLCAxMjAsIDIyLCAyNDEsIDUxLCA5MywgOTksIDY3LCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCAKKyAgICA5OSwgNjcsIDUyLCAyMiwgMjAzLCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIDE5MywgCisgICAgMjU0LCAzNCwgMTI0LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAyNTQsIDM0LCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgCisgICAgOTksIDE5MywgMjU0LCAzNCwgMTIwLCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIDI1NCwgMzQsIDEyMCwgMjIsIDIyMiwgCisgICAgMjU0LCA5MywgOTksIDE5MywgMjQ4LCA3LCAyMTQsIDE2MCwgNDQsIDIxNiwgNDMsIDIzMiwgMTE0LCAyMzMsIDUyLCA5MywgCisgICAgOTksIDE5MywgMjQ4LCA3LCAyMTQsIDE2MCwgNDMsIDIxNiwgNDMsIDIzMiwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIAorICAgIDI0OCwgNywgMjQ5LCAxMzgsIDkzLCA5OSwgMTkzLCAyMzMsIDUyLCA5MywgOTksIDE5MywgMjE0LCAxNjMsIDkzLCA5OSwgCisgICAgMTkzLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDI0NiwgMTE0LCA5MywgOTksIDExNCwgMjMzLCA1MiwgOTMsIDk5LCAxMTQsIAorICAgIDIxNCwgMTYzLCA5MywgOTksIDExNCwgMjIyLCAyNTQsIDkzLCA5OSwgMTE0LCAyNDYsIDExNCwgOTMsIDk5LCAxOTMsIDQzLCAKKyAgICAyMiwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDEyMCwgMjIsIDExNCwgMjQ2LCAxMTQsIDkzLCA5OSwgMTE0LCA0MywgCisgICAgMjIsIDE5MywgMjIyLCAyNTQsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAxOTMsIDI0NiwgMTE0LCAyMTQsIDE2MCwgMTYzLCAKKyAgICAyNTEsIDIyMSwgMjMyLCAxMTQsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTIzLCAyMjQsIDI1LCAyNTEsIAorICAgIDIyMSwgMjMyLCAxMTQsIDEzNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTYzLCAyNTEsIDIyMSwgMjMyLCAKKyAgICAxMTQsIDI0NCwgODksIDI0NSwgMTk1LCAyNTEsIDIyMSwgMjMyLCAxMTQsIDEzNCwgMjI0LCAyMywgMjUxLCAyMjEsIDIzMiwgCisgICAgMTE0LCAyMjAsIDEyNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyNDMsIDIzNiwgMjUxLCAyMjEsIDQzLCAyMjAsIDEyNCwgMjQ1LCAKKyAgICAxOTUsIDI1MSwgMjIxLCA0MywgMTM0LCAyMjQsIDIzLCAyNTEsIDIyMSwgNDMsIDI0NCwgODksIDI0NSwgMTk1LCAyNTEsIAorICAgIDIyMSwgNDMsIDE2MywgMjUxLCAyMjEsIDQzLCAxMzQsIDI0NSwgMTk1LCAyNTEsIDIyMSwgNDMsIDEyMywgMjI0LCAyNSwgCisgICAgMjUxLCAyMjEsIDQzLCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgNDQsIDE2MywgMjUxLCAyMjEsIDE5MywgMjIwLCA5NCwgCisgICAgMjMxLCA4NywgMjIwLCA5NCwgMjQ4LCAxNzAsIDIyMCwgOTQsIDIxNCwgMTYwLCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgCisgICAgNDQsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAyMjQsIDI5LCAyMzIsIDExNCwgMjMzLCA1MiwgMjI0LCAyOSwgMjMyLCAKKyAgICAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgMjMzLCA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgCisgICAgMjMyLCAxMTQsIDQzLCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMzIsIAorICAgIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAKKyAgICAyMzMsIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIAorICAgIDIyNCwgMjksIDIxNCwgMTYwLCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDIzMywgCisgICAgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCA0MywgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgODUsIAorICAgIDIxOCwgMjM2LCA3MSwgMjE4LCAyMzYsIDcxLCA0MiwgMiwgMjIyLCAxODUsIDI0OSwgMTY3LCA3MSwgNDIsIDI0OSwgMTk1LCAKKyAgICA4NSwgNCwgMjE4LCAyMzYsIDQyLCAyLCAyMDMsIDI0NCwgMTEzLCA0MiwgMiwgNjcsIDI0NCwgMTEzLCA0MiwgMiwgMjI2LCAKKyAgICAxNDgsIDI0OSwgMTM0LCAyNDQsIDExMywgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjE2LCA0MywgMjMyLCAxMTQsIDQ0LCAyNDQsIAorICAgIDExMywgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MywgMjMyLCAxMTQsIDQzLCAyNDQsIDExMywgNDIsIDIsIDI0OCwgNywgCisgICAgMjQ5LCAxMzQsIDI0NCwgMTEzLCA4NSwgNCwgMjE4LCAyMzYsIDcxLCA0LCAyMTgsIDIzNiwgODUsIDIyMywgMTE5LCA3MSwgCisgICAgMjIzLCAxMTksIDg1LCA2NywgMjIzLCAxMTksIDcxLCA2NywgMjIzLCAxMTksIDg1LCAyMjYsIDEwLCA3MSwgMjI2LCAxMCwgCisgICAgODUsIDIxNCwgMTYyLCAyMTUsIDIyNiwgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYyLCA0LCAyMTUsIAorICAgIDIyNiwgNzEsIDIxNCwgMTYyLCA0LCAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCAyMTUsIDIyNiwgNzEsIDIyMiwgMjUwLCAKKyAgICAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCA0LCAyMTUsIDIyNiwgNzEsIDIyMiwgMjUwLCA0LCAyMTUsIDIyNiwgODUsIDIyMiwgCisgICAgMjUwLCAyMjUsIDExLCA3MSwgMjIyLCAyNTAsIDIyNSwgMTEsIDg1LCAyNDYsIDExMywgMjE1LCAyMjYsIDcxLCAyNDYsIAorICAgIDExMywgMjE1LCAyMjYsIDg1LCAyNDYsIDExMywgNCwgMjE1LCAyMjYsIDcxLCAyNDYsIDExMywgNCwgMjE1LCAyMjYsIDg1LCAKKyAgICAyMzMsIDQ4LCAyMTUsIDIyNiwgNzEsIDIzMywgNDgsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgNCwgMjE1LCAyMjYsIDcxLCAKKyAgICAyMzMsIDQ4LCA0LCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDIyNSwgMTEsIDcxLCAyMzMsIDQ4LCAyMjUsIDExLCA4NSwgCisgICAgMjQ4LCAwLCA3MSwgMjQ4LCAwLCA3MSwgMjQ4LCAxLCAyNDksIDE5NSwgODUsIDQsIDI0OCwgMCwgMjQ0LCA5NywgMjMyLCAKKyAgICAxMTAsIDcxLCAyNTAsIDQzLCAyNDYsIDEyNiwgMjUwLCA0MywgMjUwLCA0NCwgMiwgNjcsIDI0NCwgMTEzLCAyNTEsIDExOSwgCisgICAgODUsIDI1MCwgNDMsIDI1MCwgNDQsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCA0NCwgMTYzLCAyNTEsIAorICAgIDIyOSwgMjUwLCA0NCwgMiwgMjMyLCAxMTQsIDE2MywgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNTAsIDQ0LCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjksIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCAyNTQsIDE2NCwgCisgICAgMjUxLCA5NiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI5LCAyNTEsIDIyOSwgNDMsIDE2MywgODUsIDI1MCwgNDMsIDQ0LCAxNjMsIAorICAgIDg1LCAyNTAsIDQzLCAyMzUsIDIwMSwgMjUxLCAxMjEsIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjE0LCAxNjAsIDE2MywgCisgICAgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMzIsIDExNCwgMTYzLCAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIxNCwgMTYwLCAKKyAgICA0MywgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgMjE0LCAxNjAsIDQ0LCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAKKyAgICAyMzIsIDExNCwgNDQsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIDIzMiwgMTE0LCA0MywgMjI0LCAyOSwgMjUwLCA0MSwgCisgICAgMjU0LCAzMywgMjE0LCAxNjAsIDE2MywgMjUwLCA0MywgMjMyLCAxMTQsIDE2MywgMjUwLCA0MywgODUsIDIzMiwgMTE0LCAKKyAgICA0NCwgMjE1LCAyMjYsIDg1LCAyMzIsIDExNCwgNDMsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNiwgODUsIAorICAgIDIxNCwgMTYwLCA0NCwgMjE1LCAyMjYsIDcxLCAyNTEsIDEyMSwgNDIsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgCisgICAgNDQsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAyMTQsIDE2MCwgNDMsIDI0OCwgNywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCA3MSwgNDIsIDIsIDY3LCAyNTEsIDI0MCwgMjMyLCAyMTksIAorICAgIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDI0NywgMTI4LCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDQzLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCAyMzMsIDkxLCAyNTAsIDQzLCA3MSwgNDIsIAorICAgIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyOCwgNzEsIDQyLCAyLCAyMzIsIDExNCwgNDMsIDIyNCwgMjgsIDcxLCA0MiwgMiwgCisgICAgMjMyLCAxMTQsIDQ0LCAyMjQsIDI4LCA3MSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIAorICAgIDIxNCwgMTYwLCA0MywgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIDIzMiwgMTE0LCA0MywgMjI0LCAyOCwgNzEsIDI1MCwgCisgICAgNDQsIDIsIDIzMiwgMTE0LCA0NCwgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOCwgMjE0LCAKKyAgICAxNjAsIDQzLCAyMTUsIDIyNiwgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNiwgMjMyLCAxMTQsIDQzLCAyMTUsIDIyNiwgNzEsIAorICAgIDIzMSwgODcsIDIxOCwgMjM2LCA4NSwgMjMxLCA4NywgMjE4LCAyMzYsIDcxLCAyMzEsIDg3LCA0LCAyMTgsIDIzNiwgODUsIAorICAgIDIzMSwgODcsIDQsIDIxOCwgMjM2LCAyMzIsIDExNCwgNDQsIDIxNSwgMjI2LCA4NSwgMjE4LCAzOSwgMiwgMjIzLCAxMzUsIAorICAgIDI0OSwgMjU1LCAyMTQsIDE5NCwgMjE5LCA2MiwgMjQ5LCAyMzAsIDg1LCAyMTgsIDE1OCwgNzEsIDIxOCwgMTU4LCAyMzIsIAorICAgIDIzNCwgMjE2LCAxMzMsIDIxOCwgMzgsIDI1MywgMjQyLCAyMjgsIDc2LCAyNDgsIDQ2LCAyMjgsIDc2LCAyNDksIDIwMywgCisgICAgMjI2LCAxNjcsIDg1LCAyMTcsIDEsIDcxLCAyMTcsIDEsIDI1MiwgMTY0LCAyNTEsIDE3MSwgMjUyLCAxNjQsIDkzLCAyLCAKKyAgICAyNTAsIDEzNywgMjUyLCAxNjQsIDkzLCAyLCAyMTEsIDE3OCwgMjIyLCAwLCAyMTQsIDE5NSwgMiwgMjIzLCAxNjMsIDI0NiwgCisgICAgOTIsIDI0MCwgMjUwLCAyNTIsIDMwLCA3MSwgMjIwLCA0LCAyMjUsIDEwNCwgODUsIDIyMCwgNCwgMjI1LCAxMDQsIDIyMCwgCisgICAgODksIDIyMywgNTIsIDIyMiwgMTg5LCAyNDQsIDYzLCAyNDEsIDIzNSwgMjUxLCAxMjEsIDg1LCA0MywgMjI1LCAxMCwgMjM1LCAKKyAgICAyNDksIDg1LCA0NCwgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCA0MywgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCAxMjAsIDIyNSwgCisgICAgMTAsIDIzNSwgMjQ5LCA3MSwgNDQsIDIyNSwgMTAsIDIzNSwgMjQ5LCA3MSwgMTI0LCAyMjUsIDEwLCAyMzUsIDI0OSwgMjE5LCAKKyAgICAxMDMsIDIyLCAyNDksIDEzNywgMjUwLCAyMjcsIDUwLCAyMjMsIDE3NSwgNTAsIDI1MSwgMjQ3LCA1MCwgMjUxLCAzMywgCisgICAgMjU0LCAxMTAsIDIyNiwgMTQ5LCAyNDksIDEzOCwgMjUwLCAxMTksIDIyMywgNDAsIDI0OSwgMTM5LCA2NCwgMjMyLCAxMjQsIAorICAgIDI0OSwgMTM5LCA2NCwgMjM1LCAxMjIsIDIxOCwgMTU5LCAyMiwgMjQ5LCAxNDQsIDI0NCwgMTc2LCA4NywgMjU1LCAxLCAKKyAgICAyMjAsIDkxLCAyNDIsIDI5LCAyMiwgMjE5LCAxOTEsIDIyNSwgMjIzLCA4NywgMjEwLCAyNTQsIDIxMSwgNjksIDIxNSwgCisgICAgMjE2LCAzMSwgMjQxLCAyMzAsIDIxNSwgMjE2LCAzMSwgMjMzLCAxMTMsIDIxNSwgMjE2LCAzMSwgMjQ0LCAxMDQsIDIxNSwgCisgICAgMjE2LCAzMSwgMjE2LCAxMzQsIDIxNSwgMjE2LCAzMSwgMjExLCAyMzksIDIxNSwgMjE2LCAzMSwgMjEyLCA0MCwgMjE1LCAKKyAgICAyMTYsIDMxLCAyMzAsIDEyMCwgMjE1LCAyMTYsIDMxLCAyNDUsIDIzMSwgMjEyLCAxLCA2NCwgMjQ4LCAyNiwgNzEsIDI0MywgCisgICAgMjQ3LCAyNDQsIDE5OCwgNzEsIDIxOSwgNzYsIDI0NCwgMTk4LCA4NSwgMjE5LCA3NiwgMjQ0LCAxOTgsIDcxLCAyMTgsIDM5LCAKKyAgICAyLCAyMjMsIDEzNSwgMjQ0LCAxMDAsIDIyNCwgMjUsIDIzMCwgMTMzLCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzMywgCisgICAgMjMxLCA1OSwgMjQ0LCAxNDYsIDUwLCAyNDUsIDIzMSwgMjMxLCAxOTUsIDUwLCAyMzUsIDQ0LCAyMjEsIDIyMiwgMjE0LCAKKyAgICAxNDUsIDIyOSwgOTgsIDIyNSwgMjMsIDI1NCwgMjAsIDIxNywgNDEsIDI0MywgNTksIDI1MSwgMTEsIDIzMywgMjUsIDIxMywgCisgICAgMTUwLCAyMzIsIDI0NCwgMjIxLCAxOTMsIDIyMiwgMjEsIDI1MSwgMCwgMjU0LCA1MCwgMjI1LCA1NSwgNzEsIDI1MCwgMTI1LCAKKyAgICAyMzQsIDg0LCA3MSwgMjUwLCAxMjUsIDIyNCwgMTcsIDcxLCAyNTAsIDEyNSwgMjIyLCAxOTcsIDcxLCAyNTAsIDEyNSwgCisgICAgMjUxLCAyMzksIDcxLCAyNTAsIDEyNSwgMjM0LCAzNiwgNzEsIDI1MCwgMTI1LCAyMjUsIDIzNSwgODUsIDI1MCwgMTI1LCAKKyAgICAyMzQsIDg0LCA4NSwgMjUwLCAxMjUsIDIyNCwgMTcsIDg1LCAyNTAsIDEyNSwgMjIyLCAxOTcsIDg1LCAyNTAsIDEyNSwgCisgICAgMjUxLCAyMzksIDg1LCAyNTAsIDEyNSwgMjM0LCAzNiwgODUsIDI1MCwgMTI1LCAyMjUsIDIzNSwgODUsIDIxOSwgMTgsIAorICAgIDIxOCwgNTEsIDcxLCAyNDEsIDIzNSwgMjE4LCA1MSwgNzEsIDI0OCwgMSwgMjE4LCA1MSwgODUsIDI0OSwgMjUzLCAyMTgsIAorICAgIDUxLCA3MSwgMjE5LCAxOCwgMjE4LCA1MSwgODUsIDI0MSwgMjM1LCAyMTgsIDUxLCA4NSwgMjQ4LCAxLCAyMTgsIDUxLCA3MSwgCisgICAgMjQ5LCAyNTMsIDIxOCwgNTEsIDI0MCwgMjUwLCAyMTgsIDI0MCwgMjI0LCAyNSwgMjI4LCA1MiwgMjQ1LCAxOTcsIDIyOCwgCisgICAgNTIsIDI1MiwgODEsIDI0NSwgMTk3LCAyMjgsIDQ3LCAyNTIsIDgxLCAyMTksIDEyMCwgMjI4LCA0NywgMjMwLCA2MiwgMjQ0LCAKKyAgICA3NCwgNTAsIDIzMCwgNjIsIDIyOSwgMTkzLCA1MCwgMjMwLCA2MiwgMjIwLCA3OCwgNTAsIDIxMiwgOSwgMTgzLCAyNDksIAorICAgIDEzOCwgMjQ1LCAyMjgsIDE4MywgMjQ5LCAxMzgsIDIxNCwgMTcxLCAyMjMsIDExNSwgODcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDgsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDcsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDYsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDUsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDQsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDMsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDIsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDI0MywgNTcsIDIzMSwgMTQzLCA4NSwgMjE0LCAxNzEsIDIyMywgCisgICAgMTE1LCA4NywgMjIzLCAxMTYsIDIyNiwgMjQsIDg3LCAyMjYsIDAsIDIyNiwgMjQsIDg3LCAyMjUsIDE3NywgMjI2LCAyNCwgCisgICAgNTAsIDIxMSwgMjU1LCA4NywgMjQ3LCAyNDksIDI0NCwgMTk3LCAyNDcsIDI0OSwgMjQ0LCAxOTYsIDI0NywgMjQ5LCAyNDQsIAorICAgIDE5NSwgMjQ3LCAyNDksIDI0NCwgMTk0LCAyNDcsIDI0OSwgMjQ0LCAxOTMsIDI0NywgMjQ5LCAyNDQsIDE5MiwgNzEsIDI1MCwgCisgICAgNDQsIDIsIDU5LCAyMjIsIDI1NCwgNzEsIDI1MCwgNDQsIDIsIDExMywgMjQ3LCAxMjYsIDg1LCAyNTAsIDQ0LCAyLCA3MSwgCisgICAgNTksIDIyMiwgMjU0LCA4NSwgMjUwLCA0NCwgMiwgMTEzLCA3MSwgMjQ3LCAxMjYsIDIzMCwgMTQ3LCAzMSwgMjExLCA2OSwgCisgICAgMjMwLCAxNDcsIDMxLCAyMTAsIDI1MywgMjQ3LCAyMzIsIDMxLCAyNDIsIDEzOCwgMjExLCA2OSwgMjQ3LCAyMzIsIDMxLCAKKyAgICAyMzMsIDE5LCAyMTAsIDI1MywgMjQ3LCAyMzIsIDMxLCAyMzMsIDE5LCAyMTEsIDY5LCAyNDcsIDIzMiwgMzEsIDI0MiwgCisgICAgMTM4LCAyMTAsIDI1MywgNzEsIDI0NCwgODEsIDg1LCAyNDQsIDgxLCAyNDIsIDI5LCAyMiwgMjI1LCAxMDcsIDI1NCwgMTI4LCAKKyAgICAyNDksIDEzNiwgMjE3LCAyMzYsIDIxOCwgMTY2LCA2NCwgMjU0LCAyMzUsIDIyMSwgMjA4LCAyNTQsIDE3OCwgMjQ0LCA1OSwgCisgICAgMjQzLCA2NywgMjE4LCAxNjYsIDY0LCAyNDEsIDIwOSwgMjUzLCAyMDcsIDg3LCAyNDQsIDcwLCAyMjYsIDEzMCwgNzEsIAorICAgIDIxOCwgMTU4LCAxMzQsIDIzMiwgMjE0LCAyNDksIDE4MywgMjIyLCAyNTQsIDEzNCwgMjMyLCAyMTQsIDI0OSwgMTgzLCAKKyAgICAyMzMsIDUyLCAyMTIsIDUwLCA1MCwgMTI1LCAyMTMsIDEzMCwgNTAsIDI0NiwgMTE4LCAyNDQsIDE0NiwgNTAsIDI0NiwgCisgICAgMTE4LCAyMzEsIDE5NSwgNTAsIDIzNSwgMjEwLCAyNDQsIDE0NiwgMjIsIDIzMSwgMTk1LCA1MCwgMjMxLCAxOTUsIDIyLCAKKyAgICAyNDQsIDE0NiwgNTAsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgNTAsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgMjIsIDIzMSwgCisgICAgMTk1LCAyMiwgMjQ0LCAxNDYsIDUwLCA2NywgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCA1MCwgMjAzLCAyMzEsIDE5NSwgMiwgCisgICAgMjE4LCAxMDUsIDUwLCAyMzEsIDg3LCA3MSwgMjUwLCA0MywgMjMxLCA4NywgODUsIDI1MCwgNDMsIDIzMSwgODcsIDQsIDcxLCAKKyAgICAyNTAsIDQzLCAyMzEsIDE1OCwgODcsIDI0NywgMTc1LCA4NywgMjE0LCAxNjksIDIyNSwgMjU1LCA4NywgMjQ5LCAyMzksIAorICAgIDI0MywgMjMxLCAyMTQsIDE0MSwgMjI5LCA5MywgMjUwLCAxNjksIDIyNiwgNjUsIDIzNSwgNTAsIDIxMywgMTg1LCAyNTAsIAorICAgIDEwMSwgODUsIDIzMCwgMTM0LCAyMzIsIDIzMSwgMjIwLCAxMTQsIDIyMCwgMTQ5LCAyMjQsIDgsIDIyMCwgMTMyLCAyMTksIAorICAgIDU3LCAyNTIsIDE2NywgMjUyLCAxMzQsIDkyLCAyMzQsIDE0NCwgNzEsIDI0NiwgMTAxLCAyMzEsIDE5MCwgNzEsIDI0NiwgCisgICAgMTAxLCAyMzQsIDg0LCA4NSwgMjQ2LCAxMDEsIDIzMSwgMTkwLCA4NSwgMjQ2LCAxMDEsIDIzNCwgODQsIDIxOSwgNjMsIAorICAgIDIxMSwgMjMwLCAyMTksIDY2LCAyMTgsIDM5LCAyNTIsIDU5LCAyNDksIDI1NSwgMjIzLCAxNjIsIDg1LCAyMTksIDYyLCAKKyAgICAyMTYsIDEzNSwgMjUwLCAwLCAyMiwgMjIzLCAxNjIsIDIxNSwgOTQsIDcxLCAyMjAsIDQsIDIyNSwgMTA0LCAyMTUsIDk0LCAKKyAgICA4NSwgMjIwLCA0LCAyMjUsIDEwNCwgNzEsIDI0OCwgMSwgMjM2LCA3LCAyMTgsIDIzNiwgMjQ5LCAxMzMsIDIzMywgOTcsIAorICAgIDI0NywgMjAxLCAyNTAsIDI1MiwgMjI2LCAxNzAsIDIyNSwgMTA3LCAyNTAsIDI1MywgMjE5LCA5MCwgMjQxLCAyMTksIDIsIAorICAgIDcxLCAyNDksIDEzOCwgMzcsIDI0OSwgMTMzLCAyMzMsIDk3LCAyNTAsIDE2MSwgMjI4LCA4MCwgMjQ1LCAxMzIsIDI1NCwgCisgICAgMTQ5LCAyMjYsIDE5NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCA4NSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCAKKyAgICA3MSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCA4NSwgNDMsIDIzMywgOTgsIDIzMSwgNTgsIDcxLCA0MywgCisgICAgMjMzLCA5OCwgMjMxLCA1OCwgMjQ2LCA5NywgMjE5LCA4NCwgNTAsIDExNCwgNzEsIDI0NiwgMTEzLCAyMTUsIDIyNiwgNDMsIAorICAgIDI1MCwgOCwgMjQ1LCAxMzIsIDkyLCAyMjIsIDAsIDI0NCwgMTgzLCAyNDgsIDcsIDIzNiwgNywgNzEsIDI1MCwgNDQsIDIzNiwgCisgICAgNywgODUsIDIxOCwgMjM2LCA4NSwgMjE1LCAxOTMsIDIyMywgNjMsIDQzLCAyNDUsIDEzMSwgMjIzLCA2MywgNDMsIDI0NSwgCisgICAgMTMwLCAyNTMsIDIxOSwgMTYsIDMxLCAyMTQsIDE0NSwgMTE0LCAyNTAsIDQ0LCAyLCAyMTgsIDEwNSwgMjIsIDExMywgMTcwLCAKKyAgICA0OCwgMjI1LCAxOTIsIDIyMiwgMjUxLCAyMzUsIDIxMiwgMjI1LCAxOTIsIDIzMywgNDksIDIzNSwgMjEyLCAyMjUsIDE5MiwgCisgICAgMjM1LCAyMDAsIDIyNSwgMTkyLCA4NSwgMjQ5LCAxMzksIDIyNiwgMjAxLCAyMjAsIDMxLCAyMjAsIDE5LCAyMTksIDIzMSwgCisgICAgMjUwLCA2OSwgMjUwLCAyMzQsIDI0MSwgMTY0LCAyMTksIDEyOCwgMjQzLCA2OCwgMjExLCAyMzAsIDI0MCwgMjI3LCAyNDMsIAorICAgIDY4LCAyLCAyNDIsIDE5LCAyMzEsIDE3OCwgMTYsIDMxLCAyMzIsIDIzNSwgMjMwLCAxMjAsIDIxNCwgMTk1LCAyMjYsIDIwMSwgCisgICAgMjQyLCAxMjksIDI0NCwgMjAsIDI0NCwgODIsIDIzNiwgNywgMjQxLCA2NiwgMjQ0LCAxMzcsIDIyMiwgMTYsIDQyLCAyNDQsIAorICAgIDE5LCAyNDksIDE2NywgMjE5LCAxMDYsIDI0MCwgMTE5LCAyMTksIDEwOSwgMjI1LCAxNzEsIDIsIDI1MiwgMTY3LCAyMTYsIAorICAgIDI0MywgMjM1LCAxMzcsIDI1MiwgMTU0LCA4NywgMjQxLCAyMzgsIDI0MiwgMTQwLCA4NywgMjQzLCAyMzksIDIyNCwgMTQ1LCAKKyAgICAyNDksIDExMSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgNzEsIDI0NCwgODIsIDIsIDIwMywgMjMwLCAyMjksIDg1LCAyMTgsIAorICAgIDEwNiwgMjE0LCAxNjAsIDI1MSwgMjI1LCAyMjEsIDE5NSwgODUsIDIyMSwgMTk1LCAyMzIsIDExNCwgMjUxLCAyMjUsIDIyMSwgCisgICAgMTk1LCA3MSwgMjIxLCAxOTUsIDcxLCAxMTQsIDI1MCwgMTM4LCA3OSwgMjE3LCAyLCAyMzIsIDE2MCwgNTAsIDIxNywgNTQsIAorICAgIDI0NiwgOTYsIDI1NCwgMjAwLCAyNDUsIDEyNywgMjIzLCAxNjAsIDI0NCwgOTMsIDIyMywgMTYwLCAyNDIsIDIyLCAyMTMsIAorICAgIDE3NCwgMjQyLCAyMiwgMjExLCAxOTgsIDI0MiwgMjIsIDIzMiwgMTE0LCA0NCwgMjI1LCAyMDEsIDIyNSwgMjAxLCAyMTQsIAorICAgIDE2MCwgNDQsIDIyNSwgMjAxLCA3MSwgMjI4LCAyMzUsIDg1LCAyMjgsIDIzNSwgMjUwLCAxMzgsIDc5LCAxMTQsIDI1MCwgCisgICAgMTM4LCA3OSwgMjMwLCA4OSwgMjExLCAxNzgsIDExNCwgMjMwLCA4OSwgMjExLCAxNzgsIDI1MiwgMTY0LCAyMTEsIDE3OCwgCisgICAgMTE0LCAyNTIsIDE2NCwgMjExLCAxNzgsIDIyNiwgMTMwLCAyNiwgMjQ5LCAxMzgsIDExNCwgMjYsIDI0OSwgMTM4LCAyMDQsIAorICAgIDI1MCwgMTgzLCAyNDksIDEzOCwgMTE0LCAyMDQsIDI1MCwgMTgzLCAyNDksIDEzOCwgNywgMjQ5LCAxMzgsIDIyMCwgOTMsIAorICAgIDcxLCA3LCAyNDksIDEzOCwgMjI2LCAxMzAsIDcsIDI0OSwgMTM4LCAyMzEsIDE5MiwgMjQ5LCAxMzgsIDIxOCwgMTU5LCA2NCwgCisgICAgMjQ4LCAxNTcsIDI0NCwgMTksIDIxNywgMTYsIDI1MywgMjI0LCAyNDQsIDE5LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDExNCwgCisgICAgMjQ0LCAxOSwgMjUyLCAxNjUsIDI1MywgMjI0LCAyNDQsIDE5LCAyNDksIDI1MSwgMjUzLCAyMjQsIDg1LCAyNDQsIDE5LCAKKyAgICAyMjUsIDEyLCAyMTgsIDE1OCwgNzEsIDI0NCwgMTksIDIyNSwgMTIsIDIxOCwgMTU4LCAyMTksIDEzLCAyMTgsIDExMywgCisgICAgMjI2LCAxMzAsIDcxLCAyMTgsIDE1OCwgMzcsIDcxLCAyMTgsIDE1OCwgMjA0LCAyNTAsIDE4MywgODUsIDIxOCwgMTU4LCAKKyAgICA4NSwgMjUwLCAxODMsIDcxLCAyMTgsIDE1OCwgMjI2LCAxMzAsIDg1LCAyMTgsIDE1OCwgMTE0LCAyMjYsIDEzMCwgODUsIAorICAgIDIxOCwgMTU4LCAyMjUsIDYzLCAyMTgsIDE1OCwgMjIwLCA5MywgNzEsIDIxOCwgMTU4LCAxMTQsIDI1MywgMjI0LCAyMDQsIAorICAgIDI1MCwgMTgzLCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIxOCwgMjQ2LCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDg1LCAKKyAgICAyMTgsIDE1OCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDIyNSwgNjMsIDIxOCwgMTU4LCAyMTksIDEyNywgMjI1LCAxMiwgODUsIAorICAgIDIxOCwgMTU4LCAyNDUsIDIwMSwgMjI1LCAxMiwgMjIzLCAxMTcsIDg1LCAyMTgsIDE1OCwgMTE0LCAyNDUsIDIwMSwgMjI1LCAKKyAgICAxMiwgMjIzLCAxMTcsIDg1LCAyMTgsIDE1OCwgMjE1LCA3NywgMjI1LCAxMiwgODUsIDIxOCwgMTU4LCAyMTksIDEyMiwgCisgICAgMjI1LCAxMiwgMjUzLCAyMjQsIDIxNywgMTYsIDI1MywgMjI0LCAyMDQsIDI1MCwgMTgzLCAyMTcsIDE2LCAyNTMsIDIyNCwgCisgICAgMTE0LCAyMTcsIDE2LCAyNTMsIDIyNCwgMjE5LCAxMjcsIDIyNSwgMTYwLCA4NSwgMjIsIDcxLCAyNDQsIDYyLCA4NSwgMjQ0LCAKKyAgICA2MiwgNzEsIDI0NCwgNjIsIDI0NSwgMjAxLCAyMjUsIDE2MCwgMjI2LCAxMzAsIDg1LCAyNDQsIDYyLCAzNywgMjA0LCAyNTAsIAorICAgIDE4MywgMjQ1LCAyMDEsIDIyNSwgMTIsIDIxOCwgMTU4LCAxMTQsIDIxNywgMTYsIDIyNSwgNjMsIDI1MywgMjI0LCAyMTksIAorICAgIDY0LCAyMTYsIDEwNiwgMjE1LCAyMTksIDIxOSwgNjQsIDExNCwgMjUwLCAxMjIsIDIxOSwgNjQsIDIxOSwgMTUsIDExNCwgCisgICAgMjE5LCAxNSwgMjUyLCAxNjUsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjE3LCAxNiwgMjI0LCAxNzQsIDI1MywgMjI0LCAxMTQsIAorICAgIDI0NSwgMjAxLCAyMTcsIDE2LCAyMjQsIDE3NCwgMjUzLCAyMjQsIDI0OSwgMTM5LCA3OSwgMjIwLCA5MywgNzEsIDI1MCwgCisgICAgNDMsIDE1MiwgOTIsIDI0OSwgMTM5LCA3OSwgMjMyLCAxMTQsIDQ0LCAyNDYsIDk0LCA3MSwgMjE4LCAyMzYsIDIxNCwgMTYwLCAKKyAgICA0NCwgMjQ2LCA5NCwgNzEsIDIxOCwgMjM2LCAyMzIsIDExNCwgNDQsIDIyMCwgOTMsIDcxLCAyMTgsIDIzNiwgMjE0LCAxNjAsIAorICAgIDQ0LCAyMjAsIDkzLCA3MSwgMjE4LCAyMzYsIDg1LCAyMjQsIDE2LCAxNjQsIDIyNiwgMTUxLCA3MSwgMjI0LCAxNiwgMTY0LCAKKyAgICAyMjYsIDE1MSwgNzEsIDI0NSwgMzksIDE2NCwgMjI2LCAxNTEsIDg1LCAyNDgsIDEsIDIzMCwgMTg3LCA3MSwgMjExLCAxNzgsIAorICAgIDExNCwgMjQ1LCAzOSwgMTY0LCA4NywgMTkzLCA2NywgMTMwLCAyMzEsIDg3LCA2NywgMTMwLCAxMTQsIDY3LCAxMzAsIDExNCwgCisgICAgMjE5LCAxNTcsIDIxNSwgOTQsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMjE5LCAxNTcsIDI0OSwgCisgICAgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgNTIsIDIxNSwgOTQsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAKKyAgICAxNTEsIDExNCwgNTIsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMTIxLCAyMTksIDE1NywgMjQ5LCAKKyAgICAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAxMjEsIDUyLCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgCisgICAgMTUxLCAyNDksIDk5LCAyMTgsIDE0MiwgMjI2LCAxOSwgNSwgMjI2LCAxNTEsIDExNCwgMjQ1LCAzOSwgMTY0LCAyMjYsIAorICAgIDE1MSwgMTE0LCAyNDEsIDIzNSwgMjQ1LCAzOSwgMTY0LCAyMjYsIDE1MSwgMTE0LCA4NSwgMjQxLCAyMzQsIDIyMiwgMTg5LCAKKyAgICAxMTQsIDg1LCAyNDEsIDIzNSwgMjUxLCAxMjEsIDI0NCwgNjMsIDI0MSwgMjM0LCAyMjIsIDE4OSwgMjQ0LCA2MywgMjQxLCAKKyAgICAyMzUsIDI1MSwgMTIxLCAyMzEsIDg3LCA0MywgMjI2LCA4LCAyMjYsIDE1MSwgMjMxLCA4NywgNDQsIDIyNiwgOCwgMjI2LCAKKyAgICAxNTEsIDIzMSwgODcsIDI0NCwgNzEsIDQzLCAyMjYsIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCAyNDQsIDcxLCA0NCwgMjI2LCAKKyAgICA4LCAyMjYsIDE1MSwgMjMxLCA4NywgMjMzLCA0OCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCA4NywgCisgICAgMjIyLCAyNTAsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDExNCwgMjMzLCA0OCwgMjU0LCAxMTgsIDIyNCwgMSwgCisgICAgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMjIsIDI1MCwgMjU0LCAxMTgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMzMsIAorICAgIDQ4LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxMTQsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgCisgICAgMTUxLCAxOTMsIDQzLCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTkzLCA0NCwgMjE2LCA3LCAyMjAsIAorICAgIDU1LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgODcsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIAorICAgIDg3LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxMTEsIDI0NywgCisgICAgMjEyLCAxNTIsIDM3LCAyMSwgMTA1LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE1OCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAKKyAgICAxNjEsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTkwLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE5NSwgMjQ3LCAyMTIsIAorICAgIDE1MiwgMzcsIDIxLCAxOTksIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTk2LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDIwMSwgCisgICAgMjQ3LCAyMTIsIDE1MiwgMzcsIDU0LCAyMTYsIDI0OCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDExMSwgMjQ3LCAyMTIsIDM3LCAKKyAgICAzNSwgMjEsIDEwNSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE1OCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAKKyAgICAyMTIsIDM3LCAzNSwgMjEsIDE5MCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIAorICAgIDE5OSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE5NiwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDIwMSwgMjQ3LCAyMTIsIDM3LCAKKyAgICAzNSwgNTQsIDIxNiwgMjQ4LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxMTEsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgCisgICAgMjEsIDEwNSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTU4LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxNjEsIAorICAgIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5MCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIxMiwgCisgICAgMTUyLCAzNywgMzUsIDIxLCAxOTksIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5NiwgMjQ3LCAyMTIsIDE1MiwgMzcsIAorICAgIDM1LCAyMSwgMjAxLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDU0LCAyMTYsIDI0OCwgMTE0LCAyMTEsIDI0NiwgOTcsIDc1LCAKKyAgICAxMTQsIDk2LCA1MCwgMTE0LCAyMzAsIDE4NywgNTAsIDExNCwgMjQ3LCAxNzcsIDUwLCAxMTQsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMTE0LCA5NywgNzUsIDExNCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyNDYsIDEwNiwgMjI1LCAxNCwgOTcsIAorICAgIDc1LCAxMTQsIDIyMiwgMTg2LCA5NywgNzUsIDIxNSwgMjI1LCA5NywgNzUsIDExNCwgMjE1LCAyMjUsIDk3LCA3NSwgMjQ4LCAKKyAgICAxNjMsIDIxNSwgMjI1LCA5NywgNzUsIDExNCwgMjQ4LCAxNjMsIDIxNSwgMjI1LCA5NywgNzUsIDg1LCA5NywgNzUsIDIxNiwgCisgICAgMTQ1LCAyMTYsIDEzLCA5NywgMjU0LCAxLCAyMTYsIDE0NSwgMjUxLCAxODEsIDk3LCAyNTQsIDEsIDg1LCA5NywgMjU0LCAxLCAKKyAgICAxMTQsIDg1LCAyNDksIDk5LCAyNDYsIDExMiwgMjIsIDk3LCA3NSwgMTE0LCA4NSwgMjQ5LCA5OSwgMjE0LCAxNTMsIDIyLCAKKyAgICA5NywgNzUsIDIxOCwgMjMzLCA4NSwgOTcsIDc1LCAxMTQsIDI0OSwgMjE0LCA4NSwgOTcsIDc1LCAyMjIsIDI0OSwgNzEsIAorICAgIDk3LCA3NSwgMjMzLCA0NywgNzEsIDk3LCA3NSwgMjUyLCAxOTEsIDIyMCwgOTMsIDcxLCA5NywgNzUsIDI0MywgMjQ5LCAKKyAgICAyMjAsIDkzLCA3MSwgOTcsIDc1LCAxMTQsIDIzMiwgMTE0LCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMTE0LCAyMTQsIDE2MCwgCisgICAgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDIyOCwgNTQsIDIzMiwgMTE0LCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMjQ5LCAxMDcsIAorICAgIDIzMiwgMTI5LCAyMjgsIDU0LCAyMTQsIDE2MCwgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDM3LCAxMTQsIDcxLCA5NywgNzUsIAorICAgIDIxMSwgMjUyLCA5NywgNzUsIDI1MSwgMjI4LCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDI1MSwgMjI4LCA5NywgNzUsIDI1MSwgCisgICAgMjI4LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDExNCwgMjUxLCAyMjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMTE0LCAKKyAgICAyNTEsIDIyOCwgOTcsIDc1LCAxMTQsIDI1MSwgMjI4LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIxNywgMTgsIDk3LCA3NSwgCisgICAgMTE0LCAyMTcsIDE3LCA5NywgNzUsIDIxMiwgMTgsIDk3LCA3NSwgMTE0LCAyMTIsIDE4LCA5NywgNzUsIDIyNiwgMTc2LCAKKyAgICA5NywgNzUsIDUyLCAyNDksIDEwNywgMjMyLCAxMjksIDEzNCwgMjQ3LCAyMjIsIDI1NCwgMTE3LCA3MSwgMjE1LCAyMjcsIAorICAgIDI0OSwgMTk1LCA0LCA3MSwgMjE1LCAyMjYsIDIyNSwgMTc0LCAyMDQsIDIxOCwgNjQsIDIwNCwgMjE4LCAyMiwgNDMsIDIyMiwgCisgICAgOTIsIDI1MiwgMTgxLCAyNDgsIDY4LCA0NCwgMjIyLCA5MiwgMjUyLCAxODEsIDI0OCwgNjgsIDE3NywgMiwgNTksIDIzNSwgCisgICAgMjIyLCAyMjMsIDUzLCAyMTksIDQ5LCAyMjQsIDIwNCwgMjE4LCA2NCwgMjE4LCAyMywgMjI0LCAyMDQsIDIxOSwgNDgsIDY3LCAKKyAgICAyNTIsIDE0OSwgMiwgMjAzLCA5MSwgMTEsIDIyMiwgMjMxLCAyNDgsIDYsIDIwMCwgMjQ3LCAxNzYsIDExLCAyNDQsIDE4MywgCisgICAgMjQ4LCA2LCA5MiwgMjMyLCAxNTIsIDI1NCwgMTI2LCA5MiwgMjMyLCAxNTIsIDIyNiwgMTYyLCA3MSwgMjQ4LCAxLCAyLCAKKyAgICAyNTAsIDE4MSwgMjQ3LCAxMjgsIDIyLCAyLCAyNDcsIDEyOCwgMjQ1LCAxNzgsIDY0LCAyMjYsIDE3NCwgMjE0LCAxNTIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjQ5LCAxNjksIDIsIDI0NywgMTI4LCAyMTQsIDE2MCwgNDMsIDI0OSwgMTY5LCAyLCAyNDcsIDEyOCwgCisgICAgNDMsIDIyNiwgMTMyLCAyMzUsIDcyLCA0NCwgMjI2LCAxMzIsIDIzNSwgNzIsIDI0MywgMjM2LCAyMjYsIDEzMiwgMjM1LCAKKyAgICA3MiwgMjMzLCA5MSwgMTIwLCAyMTcsIDg4LCAyMzMsIDkxLCAxMjQsIDIxNywgODgsIDQzLCAyMiwgNDQsIDUyLCAyMTUsIAorICAgIDkzLCA0MywgMjIsIDQ0LCAyMTcsIDg4LCA0MywgMjMwLCA5MiwgMjAwLCA0NCwgMjE3LCA4OCwgMjAwLCA0MywgMjE3LCA4OCwgCisgICAgMTIwLCAyMTcsIDg5LCAyLCAyNTAsIDQ0LCA0OCwgMjMyLCAxMTEsIDI0NywgMTgxLCAyNTEsIDg2LCAyMDMsIDIyMiwgMTM1LCAKKyAgICA3MSwgMjQ5LCAyMTMsIDI0OCwgMCwgNzEsIDI0OSwgMjEzLCAyNDgsIDEsIDIsIDE0MCwgMjE2LCAxMTUsIDcxLCAyNDksIAorICAgIDIxMywgMjQ4LCAxLCAyLCA5NywgMjE2LCAxMTUsIDcxLCA0MiwgMiwgMTQwLCAyMTYsIDExNSwgNzEsIDQyLCAyLCA5NywgCisgICAgMjE2LCAxMTUsIDExLCA0MywgNzEsIDQyLCAxMjcsIDExLCA0NCwgNzEsIDQyLCAxMjcsIDExLCA0MywgMjU0LCAxMTgsIAorICAgIDEyNywgMTEsIDQ0LCAyNTQsIDExOCwgMTI3LCAxMSwgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCAxMSwgNDQsIDUyLCAyNTQsIAorICAgIDExOCwgMTI3LCAxMSwgNDMsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMTEsIDQ0LCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAKKyAgICAxMjcsIDExLCA0MywgMjQ0LCA3MSwgMjI2LCA3LCAxMSwgNDQsIDI0NCwgNzEsIDIyNiwgNywgMjE0LCAxNTMsIDIyNCwgMjcsIAorICAgIDc1LCAyNDYsIDExMiwgMjI0LCAyNywgNzUsIDI1NCwgOTYsIDI0MywgMTA1LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjQzLCAKKyAgICAxMDUsIDI1MCwgNDQsIDc1LCA0NCwgODAsIDIsIDM3LCAyMjUsIDI1LCAyMDAsIDE0MCwgNzUsIDIwMCwgOTcsIDc1LCAyMDAsIAorICAgIDQzLCA0NCwgNzUsIDIwMCwgMTQwLCA1MiwgNzUsIDIwMCwgOTcsIDUyLCA3NSwgMjAwLCA0MywgNDQsIDUyLCA3NSwgMjAwLCAKKyAgICAxNDAsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCA4MCwgMjQzLCAyNTEsIDEzMCwgMjAwLCAxNDAsIDUyLCA4MCwgCisgICAgMjQzLCAyNTEsIDEzMCwgMjAwLCA5NywgNTIsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCAyMTgsIDIzMiwgNzUsIDQ2LCAKKyAgICA0NywgMjUxLCAyMjMsIDQ2LCA0NywgMjQ3LCAxMjUsIDQ2LCA0NywgMjQ2LCAyNTMsIDQ2LCA0NywgMjQ3LCAxMjQsIDQ2LCAKKyAgICA0NywgMjQ2LCAxODksIDQ2LCA0NywgMjQ3LCA2MCwgNDYsIDQ3LCAyNDYsIDI1MiwgNDYsIDQ3LCAyNDcsIDEyMywgNDYsIAorICAgIDQ3LCAyNDYsIDE1NywgNDYsIDQ3LCAyNDcsIDI4LCA0NiwgNDcsIDI0NiwgMjIwLCA0NiwgNDcsIDI0NywgOTEsIDQ2LCA0NywgCisgICAgMjQ2LCAxODgsIDQ2LCA0NywgMjQ3LCA1OSwgNDYsIDQ3LCAyNDYsIDI1MSwgNDYsIDQ3LCAyNDcsIDEyMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE0MSwgNDYsIDQ3LCAyNDcsIDEyLCA0NiwgNDcsIDI0NiwgMjA0LCA0NiwgNDcsIDI0NywgNzUsIDQ2LCA0NywgCisgICAgMjQ2LCAxNzIsIDQ2LCA0NywgMjQ3LCA0MywgNDYsIDQ3LCAyNDYsIDIzNSwgNDYsIDQ3LCAyNDcsIDEwNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE1NiwgNDYsIDQ3LCAyNDcsIDI3LCA0NiwgNDcsIDI0NiwgMjE5LCA0NiwgNDcsIDI0NywgOTAsIDQ2LCA0NywgCisgICAgMjQ2LCAxODcsIDQ2LCA0NywgMjQ3LCA1OCwgNDYsIDQ3LCAyNDYsIDI1MCwgNDYsIDQ3LCAyNDcsIDEyMSwgNDYsIDQ3LCAKKyAgICAyNDYsIDEzMywgNDYsIDQ3LCAyNDcsIDQsIDQ2LCA0NywgMjQ2LCAxOTYsIDQ2LCA0NywgMjQ3LCA2NywgNDYsIDQ3LCAyNDYsIAorICAgIDE2NCwgNDYsIDQ3LCAyNDcsIDM1LCA0NiwgNDcsIDI0NiwgMjI3LCA0NiwgNDcsIDI0NywgOTgsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNDgsIDQ2LCA0NywgMjQ3LCAxOSwgNDYsIDQ3LCAyNDYsIDIxMSwgNDYsIDQ3LCAyNDcsIDgyLCA0NiwgNDcsIDI0NiwgCisgICAgMTc5LCA0NiwgNDcsIDI0NywgNTAsIDQ2LCA0NywgMjQ2LCAyNDIsIDQ2LCA0NywgMjQ3LCAxMTMsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNDAsIDQ2LCA0NywgMjQ3LCAxMSwgNDYsIDQ3LCAyNDYsIDIwMywgNDYsIDQ3LCAyNDcsIDc0LCA0NiwgNDcsIDI0NiwgCisgICAgMTcxLCA0NiwgNDcsIDI0NywgNDIsIDQ2LCA0NywgMjQ2LCAyMzQsIDQ2LCA0NywgMjQ3LCAxMDUsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNTUsIDQ2LCA0NywgMjQ3LCAyNiwgNDYsIDQ3LCAyNDYsIDIxOCwgNDYsIDQ3LCAyNDcsIDg5LCA0NiwgNDcsIDI0NiwgCisgICAgMTg2LCA0NiwgNDcsIDI0NywgNTcsIDQ2LCA0NywgMjQ2LCAyNDksIDQ2LCA0NywgMjQ3LCAxMjAsIDQ2LCA0NywgMjQ2LCAKKyAgICAxMjksIDQ2LCA0NywgMjQ3LCAwLCA0NiwgNDcsIDI0NiwgMTkyLCA0NiwgNDcsIDI0NywgNjMsIDQ2LCA0NywgMjQ2LCAxNjAsIAorICAgIDQ2LCA0NywgMjQ3LCAzMSwgNDYsIDQ3LCAyNDYsIDIyMywgNDYsIDQ3LCAyNDcsIDk0LCA0NiwgNDcsIDI0NiwgMTQ0LCA0NiwgCisgICAgNDcsIDI0NywgMTUsIDQ2LCA0NywgMjQ2LCAyMDcsIDQ2LCA0NywgMjQ3LCA3OCwgNDYsIDQ3LCAyNDYsIDE3NSwgNDYsIDQ3LCAKKyAgICAyNDcsIDQ2LCA0NiwgNDcsIDI0NiwgMjM4LCA0NiwgNDcsIDI0NywgMTA5LCA0NiwgNDcsIDI0NiwgMTM2LCA0NiwgNDcsIAorICAgIDI0NywgNywgNDYsIDQ3LCAyNDYsIDE5OSwgNDYsIDQ3LCAyNDcsIDcwLCA0NiwgNDcsIDI0NiwgMTY3LCA0NiwgNDcsIDI0NywgCisgICAgMzgsIDQ2LCA0NywgMjQ2LCAyMzAsIDQ2LCA0NywgMjQ3LCAxMDEsIDQ2LCA0NywgMjQ2LCAxNTEsIDQ2LCA0NywgMjQ3LCAKKyAgICAyMiwgNDYsIDQ3LCAyNDYsIDIxNCwgNDYsIDQ3LCAyNDcsIDg1LCA0NiwgNDcsIDI0NiwgMTgyLCA0NiwgNDcsIDI0NywgNTMsIAorICAgIDQ2LCA0NywgMjQ2LCAyNDUsIDQ2LCA0NywgMjQ3LCAxMTYsIDQ2LCA0NywgMjQ2LCAxMzIsIDQ2LCA0NywgMjQ3LCAzLCA0NiwgCisgICAgNDcsIDI0NiwgMTk1LCA0NiwgNDcsIDI0NywgNjYsIDQ2LCA0NywgMjQ2LCAxNjMsIDQ2LCA0NywgMjQ3LCAzNCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyNiwgNDYsIDQ3LCAyNDcsIDk3LCA0NiwgNDcsIDI0NiwgMTQ3LCA0NiwgNDcsIDI0NywgMTgsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTAsIDQ2LCA0NywgMjQ3LCA4MSwgNDYsIDQ3LCAyNDYsIDE3OCwgNDYsIDQ3LCAyNDcsIDQ5LCA0NiwgNDcsIAorICAgIDI0NiwgMjQxLCA0NiwgNDcsIDI0NywgMTEyLCA0NiwgNDcsIDI0NiwgMTM5LCA0NiwgNDcsIDI0NywgMTAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDIsIDQ2LCA0NywgMjQ3LCA3MywgNDYsIDQ3LCAyNDYsIDE3MCwgNDYsIDQ3LCAyNDcsIDQxLCA0NiwgNDcsIAorICAgIDI0NiwgMjMzLCA0NiwgNDcsIDI0NywgMTA0LCA0NiwgNDcsIDI0NiwgMTU0LCA0NiwgNDcsIDI0NywgMjUsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTcsIDQ2LCA0NywgMjQ3LCA4OCwgNDYsIDQ3LCAyNDYsIDE4NSwgNDYsIDQ3LCAyNDcsIDU2LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ4LCA0NiwgNDcsIDI0NywgMTE5LCA0NiwgNDcsIDI0NiwgMTI3LCA0NiwgNDcsIDI0NiwgMjU0LCA0NiwgNDcsIAorICAgIDI0NiwgMTkwLCA0NiwgNDcsIDI0NywgNjEsIDQ2LCA0NywgMjQ2LCAxNTgsIDQ2LCA0NywgMjQ3LCAyOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyMSwgNDYsIDQ3LCAyNDcsIDkyLCA0NiwgNDcsIDI0NiwgMTQyLCA0NiwgNDcsIDI0NywgMTMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDUsIDQ2LCA0NywgMjQ3LCA3NiwgNDYsIDQ3LCAyNDYsIDE3MywgNDYsIDQ3LCAyNDcsIDQ0LCA0NiwgNDcsIAorICAgIDI0NiwgMjM2LCA0NiwgNDcsIDI0NywgMTA3LCA0NiwgNDcsIDI0NiwgMTM0LCA0NiwgNDcsIDI0NywgNSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5NywgNDYsIDQ3LCAyNDcsIDY4LCA0NiwgNDcsIDI0NiwgMTY1LCA0NiwgNDcsIDI0NywgMzYsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjgsIDQ2LCA0NywgMjQ3LCA5OSwgNDYsIDQ3LCAyNDYsIDE0OSwgNDYsIDQ3LCAyNDcsIDIwLCA0NiwgNDcsIAorICAgIDI0NiwgMjEyLCA0NiwgNDcsIDI0NywgODMsIDQ2LCA0NywgMjQ2LCAxODAsIDQ2LCA0NywgMjQ3LCA1MSwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MywgNDYsIDQ3LCAyNDcsIDExNCwgNDYsIDQ3LCAyNDYsIDEzMCwgNDYsIDQ3LCAyNDcsIDEsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTMsIDQ2LCA0NywgMjQ3LCA2NCwgNDYsIDQ3LCAyNDYsIDE2MSwgNDYsIDQ3LCAyNDcsIDMyLCA0NiwgNDcsIAorICAgIDI0NiwgMjI0LCA0NiwgNDcsIDI0NywgOTUsIDQ2LCA0NywgMjQ2LCAxNDUsIDQ2LCA0NywgMjQ3LCAxNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwOCwgNDYsIDQ3LCAyNDcsIDc5LCA0NiwgNDcsIDI0NiwgMTc2LCA0NiwgNDcsIDI0NywgNDcsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzksIDQ2LCA0NywgMjQ3LCAxMTAsIDQ2LCA0NywgMjQ2LCAxMzcsIDQ2LCA0NywgMjQ3LCA4LCA0NiwgNDcsIAorICAgIDI0NiwgMjAwLCA0NiwgNDcsIDI0NywgNzEsIDQ2LCA0NywgMjQ2LCAxNjgsIDQ2LCA0NywgMjQ3LCAzOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzMSwgNDYsIDQ3LCAyNDcsIDEwMiwgNDYsIDQ3LCAyNDYsIDE1MiwgNDYsIDQ3LCAyNDcsIDIzLCA0NiwgNDcsIAorICAgIDI0NiwgMjE1LCA0NiwgNDcsIDI0NywgODYsIDQ2LCA0NywgMjQ2LCAxODMsIDQ2LCA0NywgMjQ3LCA1NCwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0NiwgNDYsIDQ3LCAyNDcsIDExNywgNDYsIDQ3LCAyNDYsIDEyOCwgNDYsIDQ3LCAyNDYsIDI1NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5MSwgNDYsIDQ3LCAyNDcsIDYyLCA0NiwgNDcsIDI0NiwgMTU5LCA0NiwgNDcsIDI0NywgMzAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjIsIDQ2LCA0NywgMjQ3LCA5MywgNDYsIDQ3LCAyNDYsIDE0MywgNDYsIDQ3LCAyNDcsIDE0LCA0NiwgNDcsIAorICAgIDI0NiwgMjA2LCA0NiwgNDcsIDI0NywgNzcsIDQ2LCA0NywgMjQ2LCAxNzQsIDQ2LCA0NywgMjQ3LCA0NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzNywgNDYsIDQ3LCAyNDcsIDEwOCwgNDYsIDQ3LCAyNDYsIDEzNSwgNDYsIDQ3LCAyNDcsIDYsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTgsIDQ2LCA0NywgMjQ3LCA2OSwgNDYsIDQ3LCAyNDYsIDE2NiwgNDYsIDQ3LCAyNDcsIDM3LCA0NiwgNDcsIAorICAgIDI0NiwgMjI5LCA0NiwgNDcsIDI0NywgMTAwLCA0NiwgNDcsIDI0NiwgMTUwLCA0NiwgNDcsIDI0NywgMjEsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTMsIDQ2LCA0NywgMjQ3LCA4NCwgNDYsIDQ3LCAyNDYsIDE4MSwgNDYsIDQ3LCAyNDcsIDUyLCA0NiwgNDcsIAorICAgIDI0NiwgMjQ0LCA0NiwgNDcsIDI0NywgMTE1LCA0NiwgNDcsIDI0NiwgMTMxLCA0NiwgNDcsIDI0NywgMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5NCwgNDYsIDQ3LCAyNDcsIDY1LCA0NiwgNDcsIDI0NiwgMTYyLCA0NiwgNDcsIDI0NywgMzMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjUsIDQ2LCA0NywgMjQ3LCA5NiwgNDYsIDQ3LCAyNDYsIDE0NiwgNDYsIDQ3LCAyNDcsIDE3LCA0NiwgNDcsIAorICAgIDI0NiwgMjA5LCA0NiwgNDcsIDI0NywgODAsIDQ2LCA0NywgMjQ2LCAxNzcsIDQ2LCA0NywgMjQ3LCA0OCwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MCwgNDYsIDQ3LCAyNDcsIDExMSwgNDYsIDQ3LCAyNDYsIDEzOCwgNDYsIDQ3LCAyNDcsIDksIDQ2LCA0NywgCisgICAgMjQ2LCAyMDEsIDQ2LCA0NywgMjQ3LCA3MiwgNDYsIDQ3LCAyNDYsIDE2OSwgNDYsIDQ3LCAyNDcsIDQwLCA0NiwgNDcsIAorICAgIDI0NiwgMjMyLCA0NiwgNDcsIDI0NywgMTAzLCA0NiwgNDcsIDI0NiwgMTUzLCA0NiwgNDcsIDI0NywgMjQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTYsIDQ2LCA0NywgMjQ3LCA4NywgNDYsIDQ3LCAyNDYsIDE4NCwgNDYsIDQ3LCAyNDcsIDU1LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ3LCA0NiwgNDcsIDI0NywgMTE4LCA5NywgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAKKyAgICAyLCA1MiwgNjcsIDkxLCAxNDAsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgNTIsIDgwLCAyLCA2NywgOTEsIDQzLCA0NCwgNTIsIAorICAgIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDEzMCwgMTQwLCA1MiwgODAsIDI0MywgMjUxLCAKKyAgICAxMzAsIDk3LCA1MiwgODAsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCA4MCwgMiwgMjAzLCA5MSwgMjE0LCAxNTMsIDgwLCAKKyAgICAyLCAyMDMsIDkxLCAyMTQsIDE1MywgMjE1LCAyMTIsIDc1LCAyNDYsIDExMiwgMjE1LCAyMTIsIDc1LCAxNDAsIDUyLCAyNDgsIAorICAgIDE2NSwgNzUsIDk3LCA1MiwgMjQ4LCAxNjUsIDc1LCAxNDAsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDk3LCAyMTUsIDIxMiwgCisgICAgMjQ4LCAxNjUsIDc1LCA5NywgMjE1LCA1OCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgOTcsIDgwLCAyLCAyNDYsIDEyNiwgCisgICAgMjE4LCAxNDEsIDIxNCwgMTUzLCA4MCwgMjE2LCA0MywgMTMwLCAyNDYsIDExMiwgODAsIDIxNiwgNDMsIDEzMCwgOTcsIDgwLCAKKyAgICAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIAorICAgIDgwLCAyLCAyMTcsIDc4LCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAKKyAgICAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDI1NCwgMywgOTcsIDI1NCwgMywgMTQwLCA1MiwgMjU0LCAzLCA5NywgCisgICAgNTIsIDI1NCwgMywgMTQwLCA4MCwgMjE2LCA0MywgODUsIDI0OCwgMCwgOTcsIDgwLCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCAKKyAgICAxNDAsIDgwLCAyNDMsIDI1MSwgMjUyLCAxNDksIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDk3LCA4MCwgMjQzLCAyNTEsIDI1MiwgCisgICAgMTQ5LCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCAyMjgsIDYxLCAyMTIsIDksIDIyLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCAyMiwgMjE5LCAzMCwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMiwgMTAzLCAKKyAgICAyMjgsIDYxLCAyNDUsIDIyOCwgODAsIDIsIDEwMywgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAyLCAxMDMsIDIxOSwgMzAsIAorICAgIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMjIsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjI4LCAKKyAgICA2MSwgMjQ1LCAyMjgsIDgwLCAyMiwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDIyLCAKKyAgICAyMTksIDMwLCAyMTIsIDksIDc1LCAyMTksIDMwLCAyMTIsIDksIDgwLCAyMiwgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjIyLCAKKyAgICAyMzEsIDI0OCwgNywgMjQ5LCAxMzMsIDI0NCwgMTgzLCAyNDgsIDYsIDI0NCwgMTgzLCAyNDgsIDcsIDI0OSwgMTMzLCAyMjIsIAorICAgIDIzMSwgMjQ4LCA2LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIyOCwgCisgICAgNjEsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjQ0LCAxODMsIDI0OCwgNywgMjQ5LCAKKyAgICAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjIyLCAyMzEsIDI0OCwgNywgMjQ5LCAxMzMsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMjI4LCA2MSwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgCisgICAgMjEyLCA5LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjEyLCAzNiwgODAsIDIyNSwgMTAsIDI0NywgCisgICAgMjAzLCAyMjIsIDI1NCwgODAsIDIyNSwgMTAsIDk3LCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjE0LCAxNTIsIDgwLCAyMjUsIDEwLCAKKyAgICA5NywgMjE2LCAxODksIDI0OSwgOTgsIDI0NiwgMTExLCA4MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDIxNiwgMTg5LCAyNDksIAorICAgIDk4LCAyMzMsIDQzLCA4MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDIxNiwgMTg5LCAyNDksIDk4LCAyMjIsIDI0NCwgMjIyLCAKKyAgICAyNDcsIDI1NCwgMzQsIDI1MCwgMTAsIDc1LCAyMzMsIDQ2LCAyNTQsIDM0LCAyNTQsIDk2LCA3NSwgMjE2LCAxNSwgMjU0LCAKKyAgICAzNCwgMjU0LCA5NiwgNzUsIDI1MSwgMTgzLCAyNTQsIDM0LCAyNTQsIDk2LCA3NSwgMjE2LCAxNSwgMjU0LCAzNCwgMjUwLCAKKyAgICAxMCwgODAsIDIsIDIzMCwgMTg2LCAyMTYsIDE1LCAyNTQsIDM0LCAyNTQsIDk2LCA4MCwgMiwgMjI1LCAyNSwgMjMyLCAxMTQsIAorICAgIDQ0LCAyMjAsIDE1NCwgMjUwLCAxMCwgNzUsIDIzMiwgMTE0LCA0MywgMjIwLCAxNTQsIDI1NCwgOTYsIDc1LCAyNTQsIDk2LCAKKyAgICAyNTAsIDgsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyNTAsIDgsIDI1MCwgNDQsIDc1LCA5NywgODAsIDcyLCAyMTksIDI1MywgCisgICAgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDIxOSwgMjUzLCA5NywgNzUsIDIxOSwgMjUzLCA5NywgODAsIDcyLCAxNDAsIDc1LCAKKyAgICA5NywgODAsIDIsIDk2LCA1MSwgMTQwLCA4MCwgMiwgOTYsIDUxLCA5NywgODAsIDIxNiwgMTQwLCAyMTEsIDE3OCwgNDMsIAorICAgIDQ0LCA4MCwgMjE2LCAxNDAsIDQsIDI1MCwgNDMsIDIxNCwgMTUzLCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDQsIDI1MCwgCisgICAgNDMsIDQzLCAyNTIsIDE0NywgMTIwLCA0NCwgMjUyLCAxNDcsIDEyNCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIDEyNCwgNDQsIAorICAgIDI1MiwgMTQ3LCAxMjAsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDQsIDEyNCwgMjUyLCAxNDcsIDQzLCAyNDIsIDUsIDEyMCwgCisgICAgMjUyLCAxNDcsIDQzLCAxMjQsIDI1MiwgMTQ3LCA0NCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIDEyMCwgNDQsIDI1MiwgMTQ3LCAKKyAgICAxMjAsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDQsIDEyNCwgMjUyLCAxNDcsIDQ0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgCisgICAgMTI0LCA0NCwgMjUyLCAxNDcsIDEyNCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0MywgMTI0LCAyNTIsIDE0NywgNDMsIAorICAgIDI0MiwgNSwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDIxNiwgNDMsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDEyMCwgMjE2LCA0MywgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDIxNiwgNDMsIDEzMCwgCisgICAgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQ0LCAyMTYsIDQzLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgMTI0LCAyMTYsIDQzLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDIxNiwgNDMsIDEzMCwgMjE0LCAKKyAgICAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyMTYsIDQzLCAxMzAsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCA0MywgMjE2LCA0MywgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjQzLCAyNTEsIDEzMCwgOTcsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAorICAgIDQ0LCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDI0MywgMjUxLCAxMzAsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNDMsIDI1MSwgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAKKyAgICAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDI0MywgMjUxLCAxMzAsIDI0NiwgCisgICAgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjQzLCAyNTEsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICAxMjAsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgNDMsIDI1MiwgMzgsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgOTcsIDI0MiwgNiwgMiwgCisgICAgMjUyLCAxNDcsIDEyMCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgMjQ2LCAxMTIsIDI0MiwgNiwgCisgICAgMiwgMjUyLCAxNDcsIDQzLCAyNTIsIDM4LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTYzLCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDEyMCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNjMsIDk3LCAyNDIsIDYsIAorICAgIDIsIDI1MiwgMTQ3LCAxMjQsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAxNDAsIDI0MiwgNiwgMiwgCisgICAgMjUyLCAxNDcsIDEyMCwgNzIsIDIwMCwgMjQ4LCAxNjQsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNTIsIDUxLCAKKyAgICAyMDAsIDI0OCwgMTY0LCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgMjAwLCAyNDgsIDE2NCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjUyLCA1MSwgMjAwLCAyNDgsIDE2NCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDQzLCAyNTIsIDM4LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDI0NiwgMTEyLCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjUyLCAzOCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCA0NCwgCisgICAgNTIsIDgwLCAyLCAyMjIsIDE4NSwgMjQxLCAyNDIsIDI0NSwgMTA2LCA1LCA3MiwgOTcsIDc1LCAyMTYsIDkwLCAyMjYsIAorICAgIDE3MiwgNzIsIDk3LCA3NSwgMTQwLCA4MCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyMTYsIDkwLCAKKyAgICAyMjYsIDE3MSwgOTcsIDgwLCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMzMsIDIxLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgCisgICAgMjE2LCAxNDAsIDIzMywgMjAsIDI0MiwgMTM3LCA3MiwgOTcsIDc1LCAyMTgsIDY1LCA3MiwgOTcsIDc1LCAxNDAsIDgwLCAKKyAgICAyMTYsIDE0MCwgMjE4LCA2NCwgMjE4LCAyMywgNzIsIDE0MCwgNzUsIDQzLCAyNDQsIDk5LCAyMTcsIDc4LCA0NCwgMjQ0LCAKKyAgICA5OSwgMjE3LCA3OCwgMTIwLCAyNDQsIDk5LCAyMTcsIDc4LCAxMjQsIDI0NCwgOTksIDIxNywgNzgsIDIxNSwgMjEyLCA2NywgCisgICAgMjUyLCAxNDksIDI0OCwgNjgsIDIxMCwgMTYwLCAxODksIDIxOCwgMjQ0LCAyMTAsIDE2MCwgMTg5LCAyMTUsIDQ5LCAyNDksIAorICAgIDIzNCwgNDMsIDcxLCAyNDksIDEwNywgMTI3LCA0NCwgNzEsIDI0OSwgMTA3LCAxMjcsIDQzLCA3MSwgMjI2LCA3LCA0NCwgCisgICAgNzEsIDIyNiwgNywgMjEwLCAxNjAsIDE4OSwgNDMsIDIzNiwgMjIsIDEyNywgMjEwLCAxNjAsIDE4OSwgNDQsIDIzNiwgMjIsIAorICAgIDEyNywgMjEwLCAxNjAsIDE4OSwgNDMsIDI1MSwgMjUwLCAxMjcsIDIxMCwgMTYwLCAxODksIDQ0LCAyNTEsIDI1MCwgMTI3LCAKKyAgICA0MywgNDIsIDI1MSwgMTY2LCAyLCAyMTQsIDE4MywgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjE0LCAxODMsIDQzLCA0MiwgCisgICAgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIDcsIDIxNiwgMTUsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAKKyAgICAyMTYsIDExNiwgMjM2LCA3LCAyNTEsIDE4MywgMjQ5LCAxNjgsIDQzLCA0MiwgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIAorICAgIDcsIDI1MSwgMTgzLCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgNywgMjE2LCAxNSwgCisgICAgMjQ5LCAxNjgsIDQzLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIsIDI0NywgMTI4LCA0NCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyLCAKKyAgICAyNDcsIDEyOCwgNDMsIDI1NCwgMzQsIDIzMywgMjEsIDEyNywgNDQsIDI1NCwgMzQsIDI0MiwgMTM3LCAxMjcsIDUyLCA0MywgCisgICAgMjU0LCAzNCwgMjQyLCAxMzcsIDEyNywgNTIsIDQ0LCAyNTQsIDM0LCAyMzMsIDIxLCAxMjcsIDQzLCA4NSwgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDQ0LCA4NSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDI0NiwgMTI2LCAyNDQsIDE0MywgNjcsIDIxMCwgCisgICAgMzUsIDIzMiwgMjE5LCAyMzEsIDkzLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIzMywgNTIsIDQ0LCAyNTQsIDExOCwgMjE0LCAKKyAgICAxMiwgMiwgMjE4LCAyMzYsIDIzMSwgOTMsIDQ0LCAyNTQsIDExOCwgMiwgMjQ3LCAxMjgsIDI1NCwgMTE4LCAyLCAyMjIsIAorICAgIDk0LCAyMzUsIDIyMiwgMjU1LCAxMiwgMjU0LCAxMTcsIDIxOSwgMSwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMzMsIDUyLCAKKyAgICAyMTksIDEsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjE0LCAxNjMsIDIxNSwgOTQsIDI1NCwgMTE3LCAyMjMsIDUyLCAyNTQsIAorICAgIDExNywgMjU0LCAxMTgsIDIsIDIxNCwgMTgzLCAyMjMsIDUyLCAyNTQsIDExOCwgMiwgMjE0LCAxODMsIDIyNiwgMjUyLCAKKyAgICAyNTQsIDExOCwgMjI2LCAxNzQsIDIxNCwgMTYzLCAyMjYsIDI1MiwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyNDYsIDExNCwgCisgICAgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyMCwgCisgICAgMjIsIDIyMiwgMjU0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgCisgICAgMjI1LCAxMCwgMTIwLCAyMiwgMjMzLCA1MiwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIAorICAgIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyNCwgMjIsIDIyMiwgMjU0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIAorICAgIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTI0LCAyMiwgMjMzLCA1MiwgMjMxLCA5MywgMjU0LCAxMTgsIAorICAgIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDQ0LCAyMiwgMjE0LCAxNjMsIDIzMSwgCisgICAgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCA0MywgMjIsIAorICAgIDIxNCwgMTYzLCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAKKyAgICAxMCwgNDQsIDIyLCAyNDYsIDExNCwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgCisgICAgNywgODAsIDIyNSwgMTAsIDQzLCAyMiwgMjQ2LCAxMTQsIDIyMywgNTIsIDI0NSwgMTYwLCAyMjAsIDEyOSwgMjQ1LCAxNjAsIAorICAgIDIyMCwgMTMwLCAyLCAyMjYsIDEyNywgMjQ1LCAxNjAsIDIyMCwgMTMwLCAyLCA0LCAyNTAsIDQ0LCA0OCwgMjQ1LCAxNjAsIAorICAgIDIyMCwgMTMwLCAyLCA0NCwgODAsIDQ4LCAyNDUsIDE2MCwgMjIwLCAxMzAsIDIsIDQzLCA4MCwgNDgsIDI1MCwgNDQsIDIsIAorICAgIDIwMywgMTMwLCAzNywgNjcsIDEzMCwgMzcsIDIyNiwgMTEsIDM3LCAyMjMsIDUzLCAyMTksIDQ4LCAzNywgMjI1LCAxNzQsIAorICAgIDI1MCwgNDQsIDI0NywgMTgxLCAyNTEsIDg2LCAyMDMsIDI1MiwgMTQ5LCAyMiwgMjE2LCAxNSwgMTYzLCAyNDcsIDE4MSwgCisgICAgMjUxLCA4NiwgNjcsIDEzMCwgMjUwLCA0NCwgMiwgMjE4LCAyNSwgMjExLCAxNzgsIDM3LCAyNTQsIDk1LCAyNDcsIDE3NywgCisgICAgNTAsIDEyMCwgODAsIDIxNiwgMTQwLCAyNTAsIDQzLCAzNywgNzEsIDI1MSwgMTIxLCAzNywgMjUxLCAxMjEsIDM3LCAyMzMsIAorICAgIDIwLCAzNywgMjQyLCAxMzYsIDI1MCwgNDQsIDIsIDQsIDI1MCwgNDQsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgCisgICAgMjUwLCA0NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTMsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgOTIsIDIyMiwgMjMxLCAKKyAgICAyNDgsIDcsIDIxOSwgOTcsIDkyLCAyNDQsIDE4MywgMjQ4LCA3LCAyMTksIDk3LCA5MiwgMjUzLCAyMjQsIDkyLCA0LCAyNTAsIAorICAgIDQzLCA5MiwgMjE4LCAyMzYsIDExMywgMjM1LCA3MSwgMjE4LCAyMzQsIDIxNSwgMjI3LCAyLCA1OSwgNDgsIDIxNSwgMjI3LCAKKyAgICAyLCAyMTQsIDE4MywgMjIyLCA5NCwgMjM2LCA3LCAyMTUsIDIyNiwgMjE1LCAyMjcsIDIsIDIyMCwgMTM2LCAyNTMsIDIxNSwgCisgICAgMjUxLCAxODIsIDQ0LCAyMTUsIDIyNywgNzIsIDQzLCAyMTUsIDIyNiwgNDMsIDIxNSwgMjI3LCAyNTIsIDM4LCA2NywgMTMwLCAKKyAgICA2NywgMjUyLCAxNDksIDI1MiwgMzgsIDQ0LCAyMTUsIDIyNiwgMjUxLCAxNzMsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAyNTEsIAorICAgIDE3MywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDg1LCAyNTEsIDE3MiwgMzAsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAzMCwgMiwgCisgICAgNDQsIDE2MywgMjUxLCAyMjksIDcxLCAyNDAsIDI0MywgODUsIDI0MCwgMjQzLCA0MywgMjExLCAyNDQsIDI0NCwgMTQzLCAKKyAgICA0NCwgMjExLCAyNDQsIDI0NCwgMTQzLCA0MywgNTIsIDIxMSwgMjQ0LCAyNDQsIDE0MywgNDQsIDUyLCAyMTEsIDI0NCwgCisgICAgMjQ0LCAxNDMsIDIzNSwgMjU1LCAyMzUsIDI0MSwgMjE2LCAxMTMsIDExNSwgMjM1LCAyNDEsIDIzNSwgMjQyLCAyMjksIAorICAgIDEwNywgMiwgNjcsIDEzMCwgMjQ2LCAxMjAsIDIzMCwgOTIsIDQyLCAyLCAyNDksIDE4OSwgMjI2LCAxMzEsIDIzNSwgMjUzLCAKKyAgICAyNTMsIDI0NSwgMjE5LCAyMjEsIDIyNCwgMTgzLCAyNDUsIDEwNiwgNSwgMjIsIDIxOSwgOTksIDIyNiwgMTEsIDI0NSwgCisgICAgMTA2LCA1LCAyMiwgMjE5LCA5OSwgMjI2LCAxMiwgMiwgMjE2LCA5MCwgNDgsIDI0MCwgMTExLCAyMTYsIDQzLCAyMiwgMjE5LCAKKyAgICA5OSwgMjI2LCAxMSwgMjQyLCAxOTAsIDIxOCwgMTU3LCAyMTYsIDE4NiwgMjQ2LCAxMTMsIDIxNSwgMjI3LCAyLCA0MywgCisgICAgMTYzLCAyNTEsIDIyOSwgMjQ2LCAxMTMsIDIxNSwgMjI3LCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgODUsIDI0OCwgMSwgMiwgCisgICAgMTI0LCA3NSwgODUsIDIzMiwgMTEwLCA3MSwgMjUwLCA0NCwgMiwgMTI0LCA3NSwgODUsIDI1MCwgNDQsIDIsIDEyNCwgNzUsIAorICAgIDI0NSwgOTMsIDcxLCAyMTgsIDIzNiwgMjQ1LCA5MywgODUsIDIxOCwgMjM2LCAyNDUsIDkzLCA3MSwgMjQ4LCAwLCAyNDUsIAorICAgIDkzLCA4NSwgMjQ4LCAwLCAyNDUsIDkzLCA3MSwgMjUwLCA0MywgMjQ1LCA5MywgODUsIDI1MCwgNDMsIDIyMiwgMTM0LCAKKyAgICAyMjMsIDUzLCAyMTksIDQ5LCAyMjYsIDE3MSwgMjE5LCA0OSwgMiwgMjI2LCAxMjcsIDIyMywgNTMsIDIxOSwgNDksIDIsIAorICAgIDIwMywgOTEsIDI1MiwgMSwgMjE5LCA0OCwgMjUyLCAxLCAyMjMsIDUzLCAyMTksIDQ4LCA1MiwgMjI1LCAyNSwgMjE1LCAKKyAgICAyMTIsIDIyNSwgMjUsIDIzMywgNDgsIDI0OSwgOTksIDI1NCwgMTE4LCAxMjcsIDIyMiwgMjUwLCAyNDksIDk5LCAyNTQsIAorICAgIDExOCwgMTI3LCAyMTYsIDc5LCAyMzAsIDE4NCwgMjMwLCAyOSwgMzcsIDU5LCAyMjYsIDE3MSwgMjMwLCAyOSwgMzcsIDk2LCAKKyAgICAyMjYsIDE3MSwgMjMwLCAyOSwgMzcsIDMwLCAyMjYsIDE3MSwgMjMwLCAyOSwgMjE0LCAxNzYsIDIyNiwgMTcyLCAyLCAyNDcsIAorICAgIDEyOCwgMjMwLCAyOSwgMjE0LCAxNzYsIDIyNiwgMTcyLCAyLCAyMjUsIDI1LCAyMzAsIDI5LCA0MiwgMjM1LCAyMDYsIDIyNiwgCisgICAgMTcxLCAyMzAsIDI5LCA0MiwgMjE0LCAxNzYsIDIyNiwgMTcxLCAxMTMsIDIzMiwgMTUyLCAyMiwgMjI2LCAxNzEsIDExMywgCisgICAgMjMyLCAxNTIsIDE3NywgMjI2LCAxNzEsIDIzMCwgMjksIDMwLCAyMjYsIDE3MSwgMjMwLCAxNTksIDExMywgMjE4LCA0NCwgCisgICAgMjE4LCA0MiwgMiwgMjM1LCAyMTgsIDIyNCwgMjcsIDIzNSwgMjE5LCAyMjYsIDE3MSwgMjQ0LCAxMDcsIDIyNiwgMywgMjM1LCAKKyAgICAyMTgsIDIzNSwgMjE5LCAyLCA1MiwgOTEsIDIzNSwgMjE5LCAyNTMsIDE4MSwgMiwgMjE5LCA5NywgMjUwLCA0MCwgMjQzLCAKKyAgICAyMzMsIDI1NCwgOTYsIDIzNSwgMjE2LCAyMzIsIDIyMCwgMjM1LCAyMTcsIDIsIDIyMywgMTE4LCAyMjUsIDI0MSwgMjU0LCAKKyAgICAxMCwgMjI1LCA0LCAyMzIsIDIyMCwgMjM1LCAyMTcsIDIsIDIyMCwgMTU0LCAyMjUsIDI0MSwgMjU0LCAxMCwgMjI1LCA0LCAKKyAgICAyMzIsIDIyMCwgMjM1LCAyMTcsIDIyOCwgNTcsIDIzNiwgMSwgMjE2LCAxOTcsIDIyNSwgNCwgMjM1LCAyMTksIDI1NCwgMTAsIAorICAgIDExNiwgMjI1LCAxNCwgMjI2LCAxNzEsIDIyNCwgMjEsIDIzNSwgMjE5LCAyMjYsIDE3MSwgMjM1LCAyMTksIDIsIDE0MCwgCisgICAgODAsIDIsIDEwMywgMjM1LCAyMTksIDIsIDMwLCA1MCwgMjM1LCAyMTksIDIsIDIzNSwgMjA1LCAyMzUsIDIxOSwgMiwgMjE0LCAKKyAgICAxNzUsIDIzNSwgMjE5LCAyLCAyMjYsIDEyNywgMjM1LCAyMTksIDIsIDIxNCwgMTgzLCAyMzUsIDcyLCAyMzMsIDkxLCA0MywgCisgICAgMjE1LCAyMjcsIDIyNiwgMTcxLCAyMTAsIDE2MCwgMTg5LCAyMjEsIDIwMywgMjQ5LCAyMTcsIDIxMCwgMTYwLCAxODksIAorICAgIDIyMSwgMjAzLCAyMjUsIDU5LCAyMTAsIDE2MCwgMTg5LCAyMjEsIDIwMywgMjI0LCAxNzksIDk2LCA1LCAyLCA0LCAyNTAsIAorICAgIDQ0LCA0OCwgOTYsIDUsIDIsIDI1MCwgMzksIDI1NSwgMjQsIDQ4LCA5NiwgNSwgMiwgMjE2LCA5MCwgNDgsIDk2LCA1LCAyLCAKKyAgICA1OSwgNTEsIDk2LCA1LCAyLCAyMTYsIDkwLCA1MSwgOTYsIDUsIDIsIDIxOCwgNjYsIDEwNSwgOTYsIDUsIDIsIDg1LCAyMTUsIAorICAgIDIyNiwgMjMwLCAxODcsIDUsIDIsIDI0OSwgMjI4LCA0OCwgMjMwLCAxODcsIDUsIDIsIDU5LCA1MSwgMjMwLCAxODcsIDUsIAorICAgIDIsIDI0NCwgMTgzLCAyNDcsIDEyNiwgMjMwLCAxODcsIDUsIDIsIDIyMiwgMjMxLCAyNDcsIDEyNiwgOTYsIDUsIDIzNiwgNywgCisgICAgNDMsIDE2MywgMjUwLCA0MywgOTYsIDUsIDIzNiwgNywgNDQsIDE2MywgMjUwLCA0MywgMjEzLCAyNTQsIDE3NywgMjQ5LCAKKyAgICAxMzksIDIyNCwgMTgzLCAyMzAsIDg5LCA1LCAyLCA1OSwgNDgsIDIzMCwgODksIDUsIDIsIDIxNCwgMTgzLCAyMjAsIDE1MSwgCisgICAgMjI0LCAxODQsIDIsIDI1MSwgMTgzLCAyNTAsIDcsIDIxOSwgNzksIDIyNCwgMTgzLCAyMzAsIDg5LCA1LCAyMzYsIDcsIDQzLCAKKyAgICAxNjMsIDI1MCwgNDMsIDIzMCwgODksIDUsIDIzNiwgNywgNDQsIDE2MywgMjUwLCA0MywgMzcsIDIzMCwgODksIDUsIDIsIAorICAgIDI1MCwgMzksIDI1NSwgMjMsIDIzMCwgODksIDUsIDIzNiwgNywgNTIsIDI1MCwgNDMsIDM3LCAyNDcsIDE3NywgNTAsIDk2LCAKKyAgICA1LCAyMzYsIDcsIDIxNSwgMjI2LCAyMzAsIDE4NywgNSwgMjM2LCA3LCAyMTUsIDIyNiwgMjMwLCA4OSwgNSwgMjM2LCA3LCAKKyAgICAyMTUsIDIyNiwgMjM1LCAyMTMsIDIyNCwgMTgzLCAyMjIsIDI0NSwgMjM1LCAyMTMsIDIyNCwgMTgzLCAyMTAsIDE2MCwgCisgICAgMTg5LCAyMjMsIDkzLCAyNDksIDIxNywgMjU0LCAxNDIsIDE3NywgMjQ5LCAxNzMsIDIzNSwgMjA2LCAyLCAyNDcsIDEyOCwgCisgICAgMjE0LCAxNzYsIDIsIDIzMCwgMTg3LCA1MCwgMjE0LCAxNzYsIDIsIDIyNiwgMTI3LCAyMzUsIDIwNiwgMiwgMjI2LCAxMjcsIAorICAgIDIzNSwgMjA2LCAyLCAyMzIsIDE1MiwgMjU0LCAxMjYsIDIxNCwgMTc2LCAyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIxNCwgCisgICAgMTc2LCA3MiwgMjM1LCAyMDUsIDIzNSwgMjA2LCA3MiwgMjE0LCAxNzUsIDIxNCwgMTc2LCA3MiwgMjUyLCAxNDksIDcyLCAKKyAgICAyMzUsIDIwNSwgMjM1LCAyMDYsIDcyLCAyNTIsIDE0OSwgNzIsIDIxNCwgMTc1LCAyMTQsIDE3NiwgMjUyLCAzOCwgMjIsIAorICAgIDIzNSwgNzEsIDIsIDIxNCwgMTc1LCAyMzUsIDIwNiwgMjUyLCAzOCwgMjIsIDIzNSwgNzEsIDIsIDIzNSwgMjA1LCAyNTAsIAorICAgIDgsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNSwgMjUwLCA4LCAyMzUsIDIwNiwgMiwgMjIwLCAxMzUsIDUyLCA0MiwgMjM1LCAKKyAgICAyMDUsIDUyLCA0MiwgMjE0LCAxNzUsIDI1MCwgOCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM2LCAyMiwgMjE5LCA3OSwgMjI0LCAKKyAgICAxODMsIDIzMiwgMTUyLCAyMiwgMiwgNTksIDQ4LCAyMzIsIDE1MiwgMTc3LCAyLCA1OSwgNDgsIDUyLCAyMzIsIDE1MiwgCisgICAgMjU0LCAxMjYsIDUyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDExMywgMjM1LCAyMDcsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMTEzLCAKKyAgICAyMzUsIDIwNywgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMTksIDg3LCAyMzMsIDkxLCAyMjYsIDE2MiwgMjE5LCA4NywgMjMzLCAKKyAgICA5MSwgMjU0LCAxMjYsIDIzMiwgMTUyLCAxNzcsIDIyNiwgMTI1LCAyMzIsIDE1MiwgMjU0LCAxMjYsIDIzMiwgMTUyLCAyMiwgCisgICAgMiwgMjMwLCAyMjksIDIxOCwgMTQxLCAyMzIsIDE1MiwgMTc3LCAyLCAyMzAsIDIyOSwgMjE4LCAxNDEsIDIzMiwgMTUyLCAKKyAgICAyMiwgMiwgMjAzLCAyNDgsIDE2NCwgMjMyLCAxNTIsIDE3NywgMiwgMjAzLCAyNDgsIDE2NCwgMjMyLCAxNTIsIDIyLCAyLCAKKyAgICA1MiwgMjI2LCAxMjcsIDIzMiwgMTUyLCAyMiwgMiwgMjE0LCAxODMsIDIzMiwgMTUyLCAyMiwgMiwgNTIsIDIxNCwgMTgzLCAKKyAgICA0LCAyMTMsIDI1MSwgMiwgMjE0LCAxODMsIDIzMiwgMTUyLCAxNzcsIDIsIDUyLCAyMjYsIDEyNywgMjMyLCAxNTIsIDE3NywgCisgICAgMiwgNTIsIDIxNCwgMTgzLCAyMTAsIDE2MCwgMTg5LCAyNDcsIDEzNywgMjU0LCA4NywgMjEwLCAxNjAsIDE4OSwgMjIzLCAKKyAgICAxNTEsIDI1NCwgODcsIDI0NSwgMTA2LCA1LCAyLCA1OSwgNTEsIDI0MCwgMTExLCAyLCA1OSwgNDgsIDIxNSwgMjEyLCAyMDMsIAorICAgIDI1MiwgMTQ5LCAyLCA1MiwgNjcsIDkxLCAyMTUsIDIxMiwgMjAzLCAyNTIsIDE0OSwgMiwgMjE1LCAyMTIsIDY3LCA5MSwgCisgICAgMjE2LCA5MCwgMjI2LCAxNzIsIDIsIDU5LCA0OCwgMjE2LCA5MCwgMjI2LCAxNzIsIDIsIDIyMiwgMjMxLCAyNDcsIDEyNiwgCisgICAgMjE5LCAxNjQsIDIzMCwgMTg3LCAyMTksIDE2MywgMjQ5LCAyMDcsIDIsIDU5LCA0OCwgMjQ1LCAxMDYsIDIsIDI1MywgMjI0LCAKKyAgICAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCAyLCAyNTAsIDM5LCAyNTUsIDIzLCAyNTQsIDU2LCAxMjgsIDE3NywgMTI4LCAxMTIsIAorICAgIDI0NSwgMTA2LCA1LCA3MiwgOTYsIDUwLCA5NiwgNSwgNzIsIDI0NSwgMTA2LCA1MCwgMjQ1LCAxMDYsIDUsIDcyLCAyMTYsIAorICAgIDkwLCAyMjYsIDE3MSwgNTIsIDI0OSwgMjM1LCAyNDUsIDEwNywgMTEzLCAyNDksIDIwMiwgMjQ1LCAxMDYsIDIxOSwgMTc4LCAKKyAgICAxMzQsIDI0OSwgMjAyLCAyNDUsIDEwNiwgMjE5LCAxNzgsIDI0NSwgMTA2LCA1LCAyLCAxMTMsIDE3MCwgNzIsIDIyLCAxMTMsIAorICAgIDE3MCwgNTEsIDI0NSwgMTAyLCAyLCAyNDQsIDE5LCAxNzAsIDQ4LCAyMzMsIDIxLCAyLCAyNTAsIDQ0LCAyMzUsIDIyMiwgCisgICAgMjQyLCAxMzcsIDIsIDI1MCwgNDQsIDIzNSwgMjIyLCAyMzMsIDIxLCAyLCAyMjQsIDE2LCAxNjQsIDQ4LCAyNDIsIDEzNywgCisgICAgMiwgMjI0LCAxNiwgMTY0LCA0OCwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDExMiwgMjQyLCAxMzcsIDE3NywgMjE5LCAKKyAgICA5OSwgMTI4LCAxMTIsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgMjM1LCAyMjIsIDI0MiwgCisgICAgMTM3LCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDIzNSwgMjIyLCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIAorICAgIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyNDIsIDEzNywgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgCisgICAgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA3MiwgMjIyLCAyNTQsIDI0MiwgMTM3LCAxNzcsIAorICAgIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDcyLCAyMzMsIDUyLCAyMzMsIDIxLCAxNzcsIDI1NCwgNTcsIDI0MiwgCisgICAgMTM3LCAxNzcsIDI1NCwgNTcsIDIzMywgMjEsIDIyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDI0MiwgMTM3LCAKKyAgICAyMiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMzMsIDIxLCAyMiwgMjI4LCA1NywgMjU0LCA1NywgMjQyLCAxMzcsIAorICAgIDIyLCAyMjgsIDU3LCAyNTQsIDU3LCAyMzMsIDIxLCA3MiwgMjQ2LCAxMTksIDEyOCwgNzIsIDI0MiwgMTM2LCAyNDIsIDEzNywgCisgICAgNzIsIDI0NiwgMTE5LCAxMjgsIDcyLCAyMzMsIDIwLCAyMzMsIDIxLCA3MiwgMjE5LCAxNjQsIDE3NywgMjQ1LCAxMDcsIAorICAgIDI0MiwgMTM3LCA3MiwgMjE5LCAxNjQsIDE3NywgMjQ1LCAxMDcsIDIzMywgMjEsIDcyLCAyMTksIDE2NCwgNzIsIDI0MiwgCisgICAgMTM2LCAyNDIsIDEzNywgNzIsIDIxOSwgMTY0LCA3MiwgMjMzLCAyMCwgMjMzLCAyMSwgNzIsIDI0MiwgMTM3LCA3MiwgMjQ2LCAKKyAgICAxMTksIDI0NSwgMTA3LCAyNDIsIDEzNywgNzIsIDIzMywgMjEsIDcyLCAyNDYsIDExOSwgMjQ1LCAxMDcsIDIzMywgMjEsIAorICAgIDcyLCAyMTksIDk5LCAxMjgsIDcyLCAyNDIsIDEzNywgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAyNDIsIDEzNywgNzIsIDIxOSwgCisgICAgOTksIDEyOCwgNzIsIDIzMywgMjEsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIAorICAgIDIzMywgMjAsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAKKyAgICAxNzcsIDIzMywgMjEsIDIsIDU5LCAyMzUsIDIyMiwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM3LCAyLCAKKyAgICA1OSwgMjM1LCAyMjIsIDI0NiwgMTE5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMjQ2LCAxMTksIDEyOCwgMjE2LCAKKyAgICA0MywgMTc3LCAyNDIsIDEzNiwgMjQ2LCAxMTksIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAyNDYsIAorICAgIDExOSwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAyMTksIDE2NCwgMTc3LCAyMzMsIDIwLCAyMTksIAorICAgIDE2NCwgMTc3LCAyNDIsIDEzNiwgMjE5LCAxNjQsIDcyLCAyMzMsIDIxLCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTksIDE2NCwgCisgICAgNzIsIDI0MiwgMTM3LCA3MiwgMjQ1LCAxMDYsIDUwLCA1MiwgMjI5LCA5NiwgMjMzLCAyMCwgNTIsIDIyOSwgOTYsIDI0MiwgCisgICAgMTM2LCA1MiwgMjI5LCA5NiwgMjMzLCAyMSwgMiwgMjE0LCAxODMsIDI0MiwgMTM3LCAyMjYsIDEyNSwgMjMzLCAyMCwgMjQyLCAKKyAgICAxMzcsIDI1MiwgMzgsIDIzMywgMjAsIDIzMywgMjEsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDAsIDI0MiwgMTM3LCAyNTAsIAorICAgIDgsIDI1MSwgODYsIDI0OSwgMTAwLCAyMzMsIDIxLCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAxLCA3MiwgMjE5LCA5OSwgCisgICAgMjQ1LCAxMDcsIDI0MiwgMTM3LCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAxLCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIAorICAgIDIxOSwgODAsIDIxNiwgMjAxLCAyMzMsIDg5LCAyMTYsIDIwMSwgMjE5LCA4MCwgMjE2LCAyMDIsIDE3NywgMTI4LCAxMTIsIAorICAgIDIzMywgODksIDIxNiwgMjAyLCAxNzcsIDEyOCwgMTEyLCAyNDUsIDEwNiwgNSwgMiwgMjUxLCAxMTYsIDQ4LCAyMjQsIDIwNiwgCisgICAgNzIsIDIxOSwgMTU1LCAyNDUsIDEwNiwgNTAsIDIxOCwgNTcsIDcyLCAyMTksIDE1NSwgMjQ1LCAxMDYsIDUwLCAyMjQsIAorICAgIDIwNiwgNzIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIxOSwgMTU1LCAyMjgsIDU3LCAKKyAgICAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgNTcsIDcyLCAyNDUsIDEwNiwgNTAsIDIyNCwgCisgICAgMjA2LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAKKyAgICAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIyNCwgMjA2LCA3MiwgMjI4LCAKKyAgICA1NywgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjI4LCA1NywgMjU0LCAxNTYsIDEyOCwgMTEyLCA1MiwgCisgICAgMjI0LCAyMDUsIDUyLCAyMTgsIDU2LCAyMTgsIDY1LCAyLCAyNDcsIDEyOCwgMjE4LCAyMywgMiwgMjQ3LCAxMjgsIDIxOCwgCisgICAgNjUsIDIsIDk2LCA1LCA1MSwgMjE4LCAyMywgMiwgOTYsIDUsIDUxLCAyMTgsIDY1LCAyLCAyMzAsIDg5LCA1LCA1MSwgMjE4LCAKKyAgICAyMywgMiwgMjMwLCA4OSwgNSwgNTEsIDIxOCwgNjUsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyMTgsIAorICAgIDIzLCA2NCwgMTc3LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgMjE4LCA2NSwgNjQsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgCisgICAgMjMsIDY0LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTgsIDY1LCA2NCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMTgsIDIzLCAKKyAgICA2NCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMTgsIDY1LCA2NCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCAyMywgCisgICAgNjQsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNjUsIDY0LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgMjMsIAorICAgIDY0LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDQyLCA0MywgMjA0LCA5MywgMjI2LCAxNzEsIDQyLCA0NCwgMjA0LCA5MywgCisgICAgMjI2LCAxNzEsIDI1MCwgOCwgMjE4LCA2NCwgMjUwLCA4LCAyMTgsIDIyLCAyNTAsIDgsIDIxOCwgNjUsIDE3NywgMTI4LCAKKyAgICAxMTIsIDI1MCwgOCwgMjE4LCAyMywgMTc3LCAxMjgsIDExMiwgMjE4LCA2NSwgNzIsIDIxOCwgMjIsIDIxOCwgMjMsIDcyLCAKKyAgICAyMTgsIDY0LCAyMTgsIDY1LCA3MiwgMjE4LCA2NCwgMjE4LCAyMywgNzIsIDIxOCwgMjIsIDIxOCwgMjMsIDI1MiwgMzgsIAorICAgIDIxOCwgNjQsIDIxOCwgMjMsIDI1MiwgMzgsIDIyLCAyMzUsIDcxLCAyNTEsIDg2LCAyNDgsIDE2NSwgMiwgMjE4LCA2NCwgCisgICAgMjQ1LCAxNzgsIDY0LCAyMjYsIDE3NCwgMjQ2LCAxMTEsIDIyNSwgNTEsIDIsIDIxNywgMTMsIDIxNiwgMTQsIDIxNSwgMjQxLCAKKyAgICAyMzUsIDIwNSwgMjQ0LCAyOSwgMjI4LCA3MCwgMjE5LCAyNTMsIDQzLCAyMTcsIDg4LCAyMTksIDI1MywgMTI0LCAyMTcsIAorICAgIDg4LCAyMTksIDI1MywgMTIwLCAyMTcsIDg4LCAyMjUsIDE3NSwgMiwgMjIyLCA5MywgNjcsIDI1MiwgMTQ5LCAyMTUsIDIxMiwgCisgICAgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDksIDQzLCAyMTUsIDkzLCA2NywgMjUyLCAxNDksIDUyLCA0MywgMjE1LCAKKyAgICA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQzLCAyMTUsIDkzLCAyMDAsIDI0OCwgMTY1LCAyNDMsIDI1MSwgNDMsIDIzMSwgCisgICAgNjgsIDY0LCA1MiwgMjEzLCAyMzksIDIxOSwgMjUzLCAxMjQsIDIxNywgODksIDIsIDIyNiwgMTI3LCAyMTksIDI1MywgMTIwLCAKKyAgICAyMTcsIDg5LCAyLCAyMTQsIDE4MywgMjE5LCAyNTMsIDEyMCwgMjE3LCA4OSwgNzIsIDIxOSwgMjUzLCAxMjQsIDIxNywgODgsIAorICAgIDUyLCAxMjQsIDIxNywgODgsIDUyLCAxMjAsIDIxNywgODgsIDUyLCAyMTgsIDEwNSwgMjI4LCA1NywgNTAsIDIyMywgNTIsIAorICAgIDUyLCAyMTgsIDEwNSwgMjI4LCA1NywgNTAsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDcsIDE4MywgMiwgMjIzLCA1MiwgMjI5LCAKKyAgICAxMDYsIDIxOSwgOTcsIDY3LCAyMzIsIDIyMCwgMiwgMjUwLCA0NCwgNDgsIDY3LCAyMzIsIDIyMCwgMiwgMjUwLCA0NCwgNTEsIAorICAgIDEyNCwgMjE3LCA4OSwgMiwgMjUwLCA0NCwgNTEsIDIyNiwgMTIsIDIsIDIwMywgOTEsIDIyNiwgMTIsIDIsIDIxNiwgOTAsIAorICAgIDIyNiwgMTcxLCAyMTUsIDIxMiwgNjcsIDI1MiwgMTQ5LCAyNTEsIDI1MiwgMjIzLCA5NCwgMjE1LCAyMTIsIDY3LCAyNTIsIAorICAgIDE0OSwgMiwgMjAzLCA5MSwgMjE1LCAyMTIsIDI0OSwgMjM1LCAyMjYsIDE3MSwgMjE1LCAyMTIsIDIyOSwgOTYsIDIzMywgCisgICAgMjAsIDIxNSwgMjEyLCAyMjksIDk2LCAyNDIsIDEzNiwgMjQ2LCAxMTksIDIxOSwgOTksIDIzMywgMjEsIDE3NywgMTI4LCAKKyAgICAxMTIsIDI0NiwgMTE5LCAyMTksIDk5LCAyNDIsIDEzNywgMTc3LCAxMjgsIDExMiwgMjE1LCAyMTIsIDIxOSwgNDksIDI1MSwgCisgICAgMjUyLCAyMjMsIDk0LCAyMzMsIDkxLCAyMTUsIDIxMiwgNjcsIDI1MiwgMTQ5LCAyMjYsIDE3MSwgNTIsIDIxOSwgNDksIAorICAgIDIyNiwgMTcxLCA3MSwgNjcsIDEzMCwgMjMwLCAyOSwgNzEsIDY3LCAxMzAsIDIyOCwgNjEsIDI0NSwgMjI4LCA3MSwgNzUsIAorICAgIDIyOCwgNjEsIDIxMiwgOSwgNzEsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgNzEsIDc1LCAyMTksIDMwLCAyMTIsIDksIDcxLCAKKyAgICA3NSwgNDMsIDQ0LCA3MSwgNzUsIDE0MCwgODUsIDc1LCAyMTQsIDE1MywgODUsIDc1LCAyNDYsIDExMiwgODUsIDc1LCAyMjgsIAorICAgIDYxLCAyNDUsIDIyOCwgODUsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDg1LCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDg1LCA3NSwgCisgICAgMjE5LCAzMCwgMjEyLCA5LCA4NSwgNzUsIDQzLCA0NCwgODUsIDc1LCAxMjAsIDEyNCwgODUsIDc1LCA5NywgODAsIDIsIAorICAgIDIxNiwgNzgsIDI0NiwgMTExLCA5NywgODAsIDIsIDIxNiwgNzgsIDIxNCwgMTUyLCAxNDAsIDgwLCAyLCAyMTYsIDc4LCAKKyAgICAyNDYsIDExMSwgMTQwLCA4MCwgMiwgMjE2LCA3OCwgMjE0LCAxNTIsIDQyLCAyLCAyMTYsIDE1LCAxNjMsIDI1MSwgMjI5LCAKKyAgICA0MiwgMiwgMjUxLCAxODMsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAyMTQsIDE2MCwgNDQsIDI0OCwgNywgMTYzLCAyNTEsIAorICAgIDIyOSwgNDIsIDIsIDIzMiwgMTE0LCA0MywgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCAyNDgsIDEsIDIsIDQzLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNDgsIDEsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCAyNDgsIDEsIDIsIDIxNiwgMTUsIDE2MywgMjUxLCAyMjksIAorICAgIDI0OCwgMSwgMiwgMjUxLCAxODMsIDE2MywgMjUxLCAyMjksIDI0NiwgMTI2LCAyMTgsIDIzNiwgODUsIDIzMywgOTEsIDIxOCwgCisgICAgMjM2LCA3MSwgMjMzLCA5MSwgMjE4LCAyMzYsIDg1LCAyMTMsIDE4NywgNCwgMjE4LCAyMzYsIDcxLCAyMTMsIDE4NywgNCwgCisgICAgMjE4LCAyMzYsIDg1LCAyMjUsIDE5MywgNzEsIDIyNSwgMTkzLCA3MSwgMjQxLCAyMDAsIDg1LCAyNDEsIDIwMCwgMjAzLCAKKyAgICA4NSwgMjQxLCAyMDAsIDg1LCAyMzMsIDkxLCAyNTAsIDQzLCA4NSwgMjMxLCA4NywgMjQ4LCAwLCA3MSwgMjMxLCA4NywgCisgICAgMjQ4LCAwLCA4NSwgMjMxLCA4NywgMjMyLCAxMTAsIDcxLCAyMzEsIDg3LCAyMzIsIDExMCwgODUsIDQsIDI0OCwgMCwgODUsIAorICAgIDQsIDIzMiwgMTEwLCA3MSwgNCwgMjMyLCAxMTAsIDg1LCAyMDMsIDI0NSwgMTcyLCA3MSwgMjAzLCAyNDUsIDE3MiwgODUsIAorICAgIDY3LCAyNDUsIDE3MiwgNzEsIDY3LCAyNDUsIDE3MiwgNDMsIDgwLCAyLCA0LCAyNTAsIDQzLCAxMzQsIDE0MCwgMjUzLCAKKyAgICAyNTUsIDQzLCA4MCwgMiwgMzcsIDIyNSwgMjUsIDIwMCwgMTQwLCAyMTgsIDIzMiwgNzUsIDE0MCwgMjE1LCA1OCwgODAsIDIsIAorICAgIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDEzMCwgCisgICAgMTQwLCAyMTUsIDU4LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCAxNDAsIDgwLCAyLCAyNDYsIDEyNiwgMjE4LCAxNDEsIAorICAgIDE0MCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgMTQwLCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgMTQwLCAKKyAgICAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCAxNDAsIAorICAgIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDgwLCAyMTYsIDE0MCwgMjExLCAxNzgsIDIxMiwgCisgICAgMzYsIDgwLCAyMjUsIDEwLCAyNDcsIDIwMywgMjMzLCA1MiwgMjQ1LCAxMDYsIDUsIDcyLCAxNDAsIDc1LCAyMjMsIDUzLCAKKyAgICAyMTYsIDkwLCAyMjYsIDE3MiwgNzIsIDE0MCwgNzUsIDE0MCwgODAsIDcyLCAyMjMsIDUzLCAyNTQsIDE1NiwgMTI4LCAxMTIsIAorICAgIDk3LCA4MCwgMjE2LCAxNDAsIDI0MiwgMTM2LCA5NywgODAsIDIxNiwgMTQwLCAyMTgsIDIyLCAxNDAsIDIyNCwgMjcsIDc1LCAKKyAgICA5NywgMjI0LCAyNywgNzUsIDIyMywgNTMsIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgOTcsIDc1LCA5NywgODAsIDcyLCAyMjMsIAorICAgIDUzLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDI1NCwgCisgICAgMTU2LCAxMjgsIDExMiwgMTQwLCA4MCwgNzIsIDIyMywgNTMsIDIxNiwgOTAsIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyMjMsIAorICAgIDUzLCAyMTYsIDkwLCAyMjYsIDE3MSwgNzEsIDIzMSwgODcsIDIxOCwgMTU4LCA4NSwgNCwgMjE4LCAxNTgsIDcxLCA0LCAKKyAgICAyMTgsIDE1OCwgODUsIDIyMiwgMjUwLCAyMjUsIDE5MywgNzEsIDIyMiwgMjUwLCAyMjUsIDE5MywgMTE0LCAyMzMsIDkxLCAKKyAgICAyNTAsIDQzLCAxMTQsIDIyNiwgMTI4LCAyLCAyMjYsIDEyOCwgMjM1LCAyMjIsIDExNCwgMjUwLCA0NCwgMiwgMjUwLCA0NCwgCisgICAgMjM1LCAyMjIsIDExNCwgMjUwLCA0MywgMTE0LCAzNywgMjIyLCAwLCAxNDUsIDYsIDEsIDI1MywgMTY3LCAxNDUsIDYsIDEsIAorICAgIDI1MSwgMTI1LCAxNDUsIDYsIDEsIDIxMywgMjUzLCAxNDUsIDYsIDEsIDI0MiwgMTkyLCAxNDUsIDYsIDEsIDI0NywgMTQ4LCAKKyAgICAxNDUsIDYsIDEsIDIxMSwgMjEsIDE0NSwgNiwgMSwgMjEwLCA2OCwgMTQ1LCA2LCAxLCAyNDYsIDQyLCAxNDUsIDYsIDEsIAorICAgIDIxMCwgOTEsIDE0NSwgNiwgMSwgMjM1LCAxNTQsIDE0NSwgNiwgMSwgNjUsIDIzNSwgMTU0LCAxNDUsIDYsIDEsIDc0LCAKKyAgICAxNDUsIDYsIDEsIDI0NywgMTY4LCAxNDUsIDYsIDEsIDIzNCwgMjQ2LCAxNDUsIDYsIDEsIDIzMiwgMTkyLCAxNDUsIDYsIDEsIAorICAgIDIzMCwgMzQsIDE0NSwgNiwgMSwgMjI5LCAxOTYsIDE0NSwgNiwgMSwgMjI2LCAxODksIDE0NSwgNiwgMSwgMjI1LCA3LCAKKyAgICAxNDUsIDYsIDEsIDIyMiwgMjMwLCAxNDUsIDYsIDEsIDIxOSwgODUsIDE0NSwgNiwgMSwgMjE1LCA4MSwgMTQ1LCA2LCAxLCAKKyAgICAyMTQsIDIwMSwgMTQ1LCA2LCAxLCAyNDMsIDI1NCwgMTQ1LCA2LCAxLCAyNDEsIDIwNiwgMTQ1LCA2LCAxLCAyMjYsIDEzOSwgCisgICAgMTQ1LCA2LCAxLCAyMjUsIDIyNCwgMTQ1LCA2LCAxLCAyMTksIDIzMCwgMTQ1LCA2LCAxLCAyMTUsIDE2OCwgMTQ1LCA2LCAxLCAKKyAgICAyNTAsIDgzLCAxNDUsIDYsIDEsIDIyMCwgMTA0LCAxNDUsIDYsIDEsIDIxMSwgMjcsIDE0NSwgNiwgMSwgMjExLCAyOSwgCisgICAgMTQ1LCA2LCAxLCAyMTEsIDU3LCAxNDUsIDYsIDEsIDIxOCwgMjU1LCAxNjIsIDE0NSwgNiwgMSwgMjEwLCAyMTIsIDE0NSwgCisgICAgNiwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgNCwgMjEwLCAxODQsIDIsIDIxNywgNzgsIDE0NSwgNiwgMSwgMjEwLCAKKyAgICAyNDQsIDE0NSwgNiwgMSwgMjM1LCAxOTEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgCisgICAgNiwgMSwgMjM1LCAxOTEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjQ0LCA5MCwgMTQ1LCA2LCAxLCAyMzUsIAorICAgIDE1MiwgMTQ1LCA2LCAxLCAyMTksIDIyOSwgMTQ1LCA2LCAxLCAyMTUsIDIwMywgNjEsIDE0NSwgNiwgMSwgMjMzLCA4MSwgCisgICAgMjMwLCAzNCwgMTQ1LCA0LCAxLCAyNTMsIDE2NywgMTQ1LCA0LCAxLCAyNTEsIDEyNSwgMTQ1LCA0LCAxLCAyMTMsIDI1MywgCisgICAgMTQ1LCA0LCAxLCAyNDIsIDE5MiwgMTQ1LCA0LCAxLCAyNDcsIDE0OCwgMTQ1LCA0LCAxLCAyMTEsIDIxLCAxNDUsIDQsIDEsIAorICAgIDIxMCwgNjgsIDE0NSwgNCwgMSwgMjQ2LCA0MiwgMTQ1LCA0LCAxLCAyMTAsIDkxLCAxNDUsIDQsIDEsIDIzNSwgMTU0LCAKKyAgICAxNDUsIDQsIDEsIDY1LCAyMzUsIDE1NCwgMTQ1LCA0LCAxLCA3NCwgMTQ1LCA0LCAxLCAyNDcsIDE2OCwgMTQ1LCA0LCAxLCAKKyAgICAyMzQsIDI0NiwgMTQ1LCA0LCAxLCAyMzIsIDE5MiwgMTQ1LCA0LCAxLCAyMzAsIDM0LCAxNDUsIDQsIDEsIDIyOSwgMTk2LCAKKyAgICAxNDUsIDQsIDEsIDIyNiwgMTg5LCAxNDUsIDQsIDEsIDIyNSwgNywgMTQ1LCA0LCAxLCAyMjIsIDIzMCwgMTQ1LCA0LCAxLCAKKyAgICAyMTksIDg1LCAxNDUsIDQsIDEsIDIxNSwgODEsIDE0NSwgNCwgMSwgMjE0LCAyMDEsIDE0NSwgNCwgMSwgMjQzLCAyNTQsIAorICAgIDE0NSwgNCwgMSwgMjQxLCAyMDYsIDE0NSwgNCwgMSwgMjI2LCAxMzksIDE0NSwgNCwgMSwgMjI1LCAyMjQsIDE0NSwgNCwgMSwgCisgICAgMjE5LCAyMzAsIDE0NSwgNCwgMSwgMjE1LCAxNjgsIDE0NSwgNCwgMSwgMjUwLCA4MywgMTQ1LCA0LCAxLCAyMjAsIDEwNCwgCisgICAgMTQ1LCA0LCAxLCAyMTEsIDI3LCAxNDUsIDQsIDEsIDIxMSwgMjksIDE0NSwgNCwgMSwgMjExLCA1NywgMTQ1LCA0LCAxLCAKKyAgICAyMTgsIDI1NSwgMTYyLCAxNDUsIDQsIDEsIDIxMCwgMjEyLCAxNDUsIDQsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDQsIAorICAgIDIxMCwgMTg0LCAyLCAyMTcsIDc4LCAxNDUsIDQsIDEsIDIxMCwgMjQ0LCAxNDUsIDQsIDEsIDIzNSwgMTkxLCA0LCAyMTAsIAorICAgIDE4MywgMTQ1LCA0LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDIzNSwgMTkxLCAyNTIsIDEsIDIxMCwgMTgzLCAKKyAgICAxNDUsIDQsIDEsIDI0NCwgOTAsIDE0NSwgNCwgMSwgMjM1LCAxNTIsIDE0NSwgNCwgMSwgMjE5LCAyMjksIDE0NSwgNCwgMSwgCisgICAgMjE1LCAyMDMsIDYxLCAxNDUsIDQsIDEsIDIzMywgODEsIDIzMCwgMzQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA1MiwgMTMwLCAKKyAgICA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTIsIDEzMCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDYsIAorICAgIDEsIDIyNiwgMTEwLCAyLCA5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDExNiwgMiwgOTEsIAorICAgIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAKKyAgICAyNDgsIDQ3LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCA0NywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI0OCwgNDcsIDcsIAorICAgIDYsIDEsIDI1NCwgMTUxLCA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxMDMsIDcsIDYsIDEsIDIxNSwgOTQsIDYxLCA3LCA2LCAxLCAKKyAgICAyMTUsIDk0LCAyNTQsIDE1MSwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDQ0LCAxMDMsIDcsIDYsIDEsIDIxMiwgOTksIDIsIAorICAgIDEwMywgNywgNCwgMSwgMjEyLCA5OSwgMiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ5LCAxMDgsIDcsIDYsIDEsIAorICAgIDE2MywgMjQyLCA2NywgNywgNCwgMSwgMTYzLCAyNDIsIDY3LCA3LCA0LCAxLCAyMTcsIDc2LCAyMjUsIDEzNiwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyMjgsIDU1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMTQ0LCAyLCAKKyAgICAxMjEsIDIyMiwgMjM3LCAyMzUsIDIyMiwgNywgMSwgNCwgNiwgMjE1LCA5NCwgNzYsIDcsIDIxOCwgNjYsIDQsIDEsIDIzNSwgCisgICAgMTUwLCA1OCwgMSwgNiwgMjE0LCAxMDUsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDIxNywgMjUxLCAyMTcsIDc4LCA3LCA2LCAxLCAKKyAgICAyMTAsIDE2MCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDgxLCA2LCAxLCAyNTQsIDE3MywgODEsIDQsIDEsIDI1NCwgMTczLCAKKyAgICA4MSwgNiwgMSwgMjEzLCAxNzMsIDgxLCA0LCAxLCAyMTMsIDE3MywgODEsIDYsIDEsIDI0MywgMTE0LCA4MSwgNCwgMSwgCisgICAgMjQzLCAxMTQsIDgxLCA2LCAxLCAyNDgsIDE5OSwgODEsIDQsIDEsIDI0OCwgMTk5LCA4MSwgNiwgMSwgMjQ1LCAyMDIsIDgxLCAKKyAgICA0LCAxLCAyNDUsIDIwMiwgODEsIDYsIDEsIDIxOSwgMzUsIDgxLCA0LCAxLCAyMTksIDM1LCA4MSwgNiwgMSwgMjEwLCAxMDEsIAorICAgIDgxLCA0LCAxLCAyMTAsIDEwMSwgODEsIDYsIDEsIDI0MSwgMjU1LCA4MSwgNCwgMSwgMjQxLCAyNTUsIDgxLCA2LCAxLCAKKyAgICAyMTYsIDE3OCwgODEsIDQsIDEsIDIxNiwgMTc4LCA4MSwgNiwgMSwgMjQwLCAxMjMsIDgxLCA0LCAxLCAyNDAsIDEyMywgODEsIAorICAgIDYsIDEsIDIzNCwgMjMzLCA4MSwgNCwgMSwgMjM0LCAyMzMsIDgxLCA2LCAxLCAyMzMsIDc4LCA4MSwgNCwgMSwgMjMzLCA3OCwgCisgICAgODEsIDYsIDEsIDIzMCwgMjM1LCA4MSwgNCwgMSwgMjMwLCAyMzUsIDgxLCA2LCAxLCAyMjgsIDIzOCwgODEsIDQsIDEsIAorICAgIDIyOCwgMjM4LCA4MSwgNiwgMSwgMjMzLCAyMzksIDgxLCA0LCAxLCAyMzMsIDIzOSwgODEsIDYsIDEsIDc4LCA4MSwgNCwgMSwgCisgICAgNzgsIDgxLCA2LCAxLCAyMjUsIDExMSwgODEsIDQsIDEsIDIyNSwgMTExLCA4MSwgNiwgMSwgMjIyLCAyMTMsIDgxLCA0LCAxLCAKKyAgICAyMjIsIDIxMywgODEsIDYsIDEsIDIxOSwgMTY3LCA4MSwgNCwgMSwgMjE5LCAxNjcsIDgxLCA2LCAxLCAyMTcsIDQyLCA4MSwgCisgICAgNCwgMSwgMjE3LCA0MiwgODEsIDYsIDEsIDIxNCwgMjI5LCA4MSwgNCwgMSwgMjE0LCAyMjksIDgxLCA2LCAxLCAyNDQsIAorICAgIDEyOSwgODEsIDQsIDEsIDI0NCwgMTI5LCA4MSwgNiwgMSwgMjM0LCAxMTgsIDgxLCA0LCAxLCAyMzQsIDExOCwgODEsIDYsIAorICAgIDEsIDIyNCwgMTY0LCA4MSwgNCwgMSwgMjI0LCAxNjQsIDgxLCA2LCAxLCAyMjYsIDE4MiwgODEsIDQsIDEsIDIyNiwgMTgyLCAKKyAgICA4MSwgNiwgMSwgMjQ4LCA1LCAyNTQsIDE3OSwgODEsIDQsIDEsIDI0OCwgNSwgMjU0LCAxNzksIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDI1NCwgMjA1LCA4MSwgNCwgMSwgNTUsIDgxLCAyNTQsIDIwNSwgODEsIDYsIDEsIDI0OSwgMTIzLCAyNDUsIDIwMiwgODEsIAorICAgIDQsIDEsIDI0OSwgMTIzLCAyNDUsIDIwMiwgODEsIDYsIDEsIDI0OCwgNSwgMjM0LCAyMzMsIDgxLCA0LCAxLCAyNDgsIDUsIAorICAgIDIzNCwgMjMzLCA4MSwgNiwgMSwgMjQ4LCA1LCAyMjgsIDIzOCwgODEsIDQsIDEsIDI0OCwgNSwgMjI4LCAyMzgsIDgxLCA2LCAKKyAgICAxLCAyNDksIDEyMywgMjI4LCAyMzgsIDgxLCA0LCAxLCAyNDksIDEyMywgMjI4LCAyMzgsIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDIyNiwgMTgyLCA4MSwgNCwgMSwgNTUsIDgxLCAyMjYsIDE4MiwgODEsIDYsIDEsIDIyMSwgMjQ4LCA4MSwgNCwgMSwgMjIxLCAKKyAgICAyNDgsIDgxLCA2LCAxLCAyNDksIDEzNiwgMjIwLCA1NywgODEsIDQsIDEsIDI0OSwgMTM2LCAyMjAsIDU3LCA4MSwgNiwgMSwgCisgICAgNTUsIDgxLCAyMjAsIDU3LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDU3LCA4MSwgNiwgMSwgNTUsIDgxLCAyNDUsIDgzLCAKKyAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNDUsIDgzLCA4MSwgNiwgMSwgMjU0LCAxOTEsIDIzNCwgMTIzLCA4MSwgNCwgMSwgMjU0LCAKKyAgICAxOTEsIDIzNCwgMTIzLCA4MSwgNiwgMSwgMjQ4LCA1LCAyNDEsIDUyLCA4MSwgNCwgMSwgMjQ4LCA1LCAyNDEsIDUyLCA4MSwgCisgICAgNiwgMSwgNTUsIDgxLCAyNDEsIDUyLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDUyLCA4MSwgNiwgMSwgNTUsIDgxLCAxNjIsIAorICAgIDgxLCA0LCAxLCA1NSwgODEsIDE2MiwgODEsIDYsIDEsIDIzMywgMTU0LCAxNjIsIDgxLCA0LCAxLCAyMzMsIDE1NCwgMTYyLCAKKyAgICA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDIyNCwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyMjQsIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDI0MiwgMiwgODEsIDQsIDEsIDU1LCA4MSwgMjQyLCAyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDMsIDEwOSwgODEsIDQsIDEsIAorICAgIDU1LCA4MSwgMjQzLCAxMDksIDgxLCA2LCAxLCA1NSwgODEsIDI0NywgMTcxLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDcsIDE3MSwgCisgICAgODEsIDYsIDEsIDU1LCA4MSwgMjIwLCAyNCwgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCAyNCwgODEsIDYsIDEsIDU1LCAyMjcsIAorICAgIDIxMiwgMjIwLCAyNCwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjIwLCAyNCwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgCisgICAgMjI5LCAzMiwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjI5LCAzMiwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgMjI3LCAKKyAgICAxNTIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIyNywgMTUyLCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAyMTIsIDM3LCAKKyAgICA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMTIsIDM3LCA4MSwgMTYsIDIzNCwgMjUyLCA4MSwgMTYsIDIzMCwgMjM2LCAyMjIsIAorICAgIDIxMywgODEsIDE2LCAyMjUsIDExMiwgMjIyLCAyMTMsIDgxLCAxNiwgMjE4LCAxNDksIDgxLCAxNiwgMjE3LCA0MywgMjIyLCAKKyAgICAyMTMsIDgxLCAxNiwgMjM0LCAxMTksIDIyMiwgMjEzLCA4MSwgMTYsIDIyMCwgMjUsIDIxOSwgMTY3LCA4MSwgNiwgMSwgCisgICAgMjQ5LCAxMjMsIDIyMCwgNTcsIDgxLCA0LCAxLCAyNDksIDEyMywgMjIwLCA1NywgODEsIDYsIDEsIDI0OSwgMTIzLCAyNDMsIAorICAgIDEwOSwgODEsIDQsIDEsIDI0OSwgMTIzLCAyNDMsIDEwOSwgODEsIDM4LCAyMjgsIDIzOSwgNDgsIDgxLCAzOCwgMjE4LCAKKyAgICAyNDksIDI1MywgMjMyLCA4MSwgMzgsIDIxOCwgMjQ5LCAyMzMsIDI3LCA4MSwgNiwgMSwgMjUxLCAyMDcsIDIzNCwgMTIzLCAKKyAgICA4MSwgNCwgMSwgMjUxLCAyMDcsIDIzNCwgMTIzLCA4MSwgNTUsIDIyNywgMjEyLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgxLCAKKyAgICA1NSwgMjI3LCAyMTIsIDI0NywgMjA1LCAyMjQsIDE2LCA3OSwgODEsIDU1LCAyMjcsIDIxMiwgMjM1LCAyNDQsIDIyNCwgMTYsIAorICAgIDc5LCA4MSwgNTUsIDIyNywgMjEyLCAyMTMsIDI0MSwgMjQ3LCAxODAsIDgxLCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDgxLCAKKyAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDgxLCAyMzAsIDEyOSwgMjQ3LCAxODAsIDk4LCA0LCAxLCAyNTQsIDEzMSwgOTgsIDQsIDEsIAorICAgIDI1MiwgMTYwLCA5OCwgNCwgMSwgMjQzLCAxMTMsIDk4LCA0LCAxLCAyNDcsIDEzNiwgOTgsIDQsIDEsIDI0NSwgMTU4LCA5OCwgCisgICAgNCwgMSwgMjEzLCAxNjAsIDk4LCA0LCAxLCAyMTAsIDg5LCA5OCwgNCwgMSwgMjE3LCA2MSwgOTgsIDQsIDEsIDIzNiwgNiwgCisgICAgOTgsIDQsIDEsIDIzNCwgMjQwLCA5OCwgNCwgMSwgMjMzLCA4NywgOTgsIDQsIDEsIDIzMSwgMTkwLCA5OCwgNCwgMSwgMjI5LCAKKyAgICAyMDAsIDk4LCA0LCAxLCAyMjYsIDIwMCwgOTgsIDQsIDEsIDIyNiwgMjEsIDk4LCA0LCAxLCAyMTAsIDc4LCA5OCwgNCwgMSwgCisgICAgMjIzLCAxNzQsIDk4LCA0LCAxLCAyMjEsIDI0NSwgOTgsIDQsIDEsIDIxNywgNTEsIDk4LCA0LCAxLCAyMTQsIDE5MCwgOTgsIAorICAgIDQsIDEsIDIyNSwgMTQzLCA5OCwgNCwgMSwgMjM0LCAxMjcsIDk4LCA0LCAxLCAyNDIsIDI0OCwgOTgsIDQsIDEsIDIyNCwgCisgICAgNzYsIDk4LCA0LCAxLCAyMjAsIDIyLCA5OCwgNCwgMSwgMjUwLCAxMDUsIDk4LCA0LCAxLCAyNTEsIDE1LCA5OCwgNCwgMSwgCisgICAgMjM1LCAxMDYsIDk4LCA0LCAxLCAyNTAsIDQ4LCA5OCwgNCwgMSwgMjUwLCAxNTEsIDk4LCA0LCAxLCAyMTEsIDE2MywgOTgsIAorICAgIDQsIDEsIDIzNSwgMTE3LCA5OCwgNCwgMSwgMjQyLCA1MCwgOTgsIDQsIDEsIDI0MSwgMjQ1LCA5OCwgNCwgMSwgMjQxLCAKKyAgICAxODIsIDk4LCA0LCAxLCAyMTIsIDIyLCA5OCwgNCwgMSwgMjQyLCAxMSwgOTgsIDQsIDEsIDI0MSwgNzIsIDk4LCA0LCAxLCAKKyAgICAyMTAsIDI0NiwgOTgsIDQsIDEsIDI1NCwgMjQxLCAyMTYsIDEwOSwgMSwgMTkyLCAyMTYsIDEwOSwgMSwgMjExLCA5OSwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgOTgsIDIxNiwgMTA5LCAxLCAyMTEsIDg4LCAyMTYsIDEwOSwgMSwgMjExLCA4NiwgMjE2LCAKKyAgICAxMDksIDEsIDI1MiwgNDAsIDI1NSwgMjUsIDIxMSwgODEsIDIxNiwgMTA5LCAxLCAyMTEsIDgxLCAyMTYsIDEwOSwgMSwgCisgICAgMjExLCA5NiwgMjE2LCAxMDksIDEsIDIxMSwgOTMsIDIxNiwgMTA5LCAxLCAyMTEsIDk1LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA5NCwgMjE2LCAxMDksIDEsIDIxMSwgMTIsIDIxNiwgMTA5LCAxLCAyMTEsIDkwLCAyMTYsIDEwOSwgMSwgMjExLCA3OSwgCisgICAgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDc5LCAyMTYsIDEwOSwgMSwgMjExLCA3NiwgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgODQsIDIxNiwgMTA5LCAxLCAyNTIsIDQwLCAyNTUsIDI1LCAyMTEsIDg0LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgCisgICAgODQsIDIxNiwgMTA5LCAxLCAyMTEsIDgzLCAyMTYsIDEwOSwgMSwgMjExLCAxMDMsIDIxNiwgMTA5LCAxLCAyMTEsIDc3LCAKKyAgICAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNzcsIDIxNiwgMTA5LCAxLCAyMTEsIDY2LCAyMTYsIDEwOSwgMSwgMjE1LCAKKyAgICAxMTYsIDIxMSwgNjYsIDIxNiwgMTA5LCAxLCAyMTEsIDgsIDIxNiwgMTA5LCAxLCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgCisgICAgMjU0LCAyMTYsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA0OSwgMjE2LCAxMDksIDEsIDIxMSwgNzUsIAorICAgIDIxNiwgMTA5LCAxLCAyMTEsIDc0LCAyMTYsIDEwOSwgMSwgMjExLCA3MSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIAorICAgIDg1LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNjksIDIxNiwgMTA5LCAxLCAyMTEsIDY3LCAyMTYsIDEwOSwgMSwgCisgICAgMjEwLCAyMTIsIDIxNiwgMTA5LCAxLCAyMTEsIDY0LCAyMTYsIDEwOSwgMSwgMjExLCA2MywgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgODcsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA4NywgMjE2LCAxMDksIDEsIDI1MywgMTcxLCAyMTEsIDg3LCAyMTYsIAorICAgIDEwOSwgMSwgMjExLCA2MiwgMjE2LCAxMDksIDEsIDIxMSwgNjAsIDIxNiwgMTA5LCAxLCAyMTEsIDYxLCAyMTYsIDEwOSwgMSwgCisgICAgMjExLCA1OSwgMjE2LCAxMDksIDEsIDIxMSwgNTgsIDIxNiwgMTA5LCAxLCAyMTEsIDk3LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA1NiwgMjE2LCAxMDksIDEsIDIxMSwgNTQsIDIxNiwgMTA5LCAxLCAyMTEsIDUzLCAyMTYsIDEwOSwgMSwgMjExLCA1MiwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgNTAsIDIxNiwgMTA5LCAxLCAyMTcsIDM1LCAyMTEsIDUwLCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA0OCwgMjE2LCAxMDksIDEsIDIxMSwgNDcsIDIxNiwgMTA5LCAxLCAyMTAsIDI0NCwgMjE2LCAxMDksIDU4LCAxLCAyMzMsIAorICAgIDEzMiwgNzksIDIxNiwgMTA5LCAyMjAsIDE0MCwgNzksIDIxNiwgMTA5LCAxMTcsIDIzNSwgNjksIDI5LCAzLCAyMzIsIDE2MSwgCisgICAgMjksIDMsIDIzMCwgMTY1LCAyOSwgMywgMjIyLCAyMTEsIDI5LCAzLCAyMTksIDU5LCAyOSwgMywgMjIwLCA4LCAyOSwgMywgCisgICAgMjUxLCAyMTIsIDI5LCAzLCAyMTYsIDQyLCAyOSwgMywgMjQ5LCAyNDUsIDI5LCAzLCAyMjgsIDc3LCAyOSwgMywgMjI3LCAKKyAgICAxMzcsIDI5LCAzLCAyNDIsIDE4NywgMjI3LCA0LCAyOSwgMywgMjEwLCAyMiwgMjksIDMsIDI0NywgMTUxLCAyOSwgMywgCisgICAgMjQ4LCAxMTIsIDI5LCAzLCAyMzUsIDczLCAyOSwgMywgMjE2LCAxNTYsIDI5LCAzLCAyNTAsIDkzLCAyOSwgMywgMjI1LCAKKyAgICAxMjMsIDI5LCAzLCAyMjUsIDE4LCAyOSwgMywgMjQzLCA2LCAyOSwgMywgMjQzLCAyLCAyOSwgMywgMjQzLCAzLCAyOSwgMywgCisgICAgMjQzLCA0LCAyOSwgMywgMjE4LCAyMjUsIDI5LCAzLCAyMTgsIDE4MSwgMjksIDMsIDIxOCwgMTk0LCAyOSwgMywgMjE4LCAKKyAgICAyMjQsIDI5LCAzLCAyMTgsIDE5OCwgMjksIDMsIDIxOCwgMTk5LCAyOSwgMywgMjE4LCAxODYsIDI5LCAzLCAyNTAsIDIyMSwgCisgICAgMjksIDMsIDI1MCwgMjAwLCAyOSwgMywgMjUwLCAyMDIsIDI5LCAzLCAyNTAsIDIyMCwgMjksIDMsIDI1MCwgMjE4LCAyOSwgCisgICAgMywgMjUwLCAyMTksIDI5LCAzLCAyNTAsIDIwMSwgMjksIDMsIDIwOSwgMjQzLCAyOSwgMywgMjA5LCAyMjEsIDI5LCAzLCAKKyAgICAyMDksIDIzNCwgMjksIDMsIDIwOSwgMjQyLCAyOSwgMywgMjA5LCAyMzcsIDI5LCAzLCAyMDksIDIzOCwgMjksIDMsIDIwOSwgCisgICAgMjI2LCAyOSwgMywgMjUwLCAyMTYsIDI5LCAzLCAyNTAsIDIwMywgMjksIDMsIDI1MCwgMjA1LCAyOSwgMywgMjUwLCAyMTUsIAorICAgIDI5LCAzLCAyNTAsIDIxMywgMjksIDMsIDI1MCwgMjE0LCAyOSwgMywgMjUwLCAyMDQsIDI5LCAzLCAyMjMsIDIzOSwgMjksIAorICAgIDMsIDIyMywgMjI5LCAyOSwgMywgMjIzLCAyMzUsIDI5LCAzLCAyMjMsIDIzOCwgMjksIDMsIDIyMywgMjM2LCAyOSwgMywgCisgICAgMjIzLCAyMzcsIDI5LCAzLCAyMjMsIDIzNCwgMjksIDMsIDIzMywgMTY1LCAyOSwgMywgMjMzLCAxNTcsIDI5LCAzLCAyMzMsIAorICAgIDE2MCwgMjksIDMsIDIzMywgMTY0LCAyOSwgMywgMjMzLCAxNjEsIDI5LCAzLCAyMzMsIDE2MiwgMjksIDMsIDIzMywgMTU4LCAKKyAgICAyOSwgMywgMjExLCAxMzAsIDI5LCAzLCAyMTEsIDEyMCwgMjksIDMsIDIxMSwgMTI2LCAyOSwgMywgMjExLCAxMjksIDI5LCAKKyAgICAzLCAyMTEsIDEyNywgMjksIDMsIDIxMSwgMTI4LCAyOSwgMywgMjExLCAxMjUsIDI5LCAzLCAyNDIsIDc4LCAyOSwgMywgCisgICAgMjQyLCA2OSwgMjksIDMsIDI0MiwgNzIsIDI5LCAzLCAyNDIsIDc3LCAyOSwgMywgMjQyLCA3NCwgMjksIDMsIDI0MiwgNzUsIAorICAgIDI5LCAzLCAyNDIsIDcxLCAzOCwgMzMsIDEsIDI1MiwgODMsIDM4LCAzMywgMSwgMjEzLCAyNTUsIDM4LCAzMywgMSwgMjQyLCAKKyAgICAyNDMsIDM4LCAzMywgMSwgMjQ4LCA5OCwgMzgsIDMzLCAxLCAyMTAsIDc0LCAzOCwgMzMsIDEsIDIxMCwgOTQsIDM4LCAzMywgCisgICAgMSwgMTc2LCAzOCwgMzMsIDEsIDI0NSwgMTgyLCAzOCwgMzMsIDEsIDI0NSwgMTY3LCAzOCwgMzMsIDEsIDI0NSwgMTU4LCAKKyAgICAzOCwgMzMsIDEsIDc4LCAzOCwgMzMsIDEsIDIyNSwgMjI0LCAzOCwgMzMsIDEsIDI0NSwgMTAwLCAzOCwgMzMsIDEsIDI0NSwgCisgICAgOTAsIDM4LCAzMywgMSwgMjE3LCAyMywgMzgsIDMzLCAxLCAxNjIsIDM4LCAzMywgMSwgMjE1LCAxNzksIDM4LCAzMywgMSwgCisgICAgMjUwLCAxMzksIDM4LCAzMywgMSwgMjIwLCAxMDQsIDM4LCAzMywgMSwgMjIwLCA2NywgMzgsIDMzLCAxLCAyNDQsIDkwLCAKKyAgICAzOCwgMzMsIDEsIDI0NSwgODksIDM4LCAzMywgMSwgNjEsIDM4LCAzMywgMSwgMjM2LCA2NywgMzgsIDMzLCAxLCAyNDcsIAorICAgIDE2OSwgMzgsIDMzLCAxLCAyMzAsIDE0NSwgMjE0LCAyMDUsIDM4LCAzMywgMSwgMjExLCA1OSwgMzgsIDMzLCAxLCAyMTAsIAorICAgIDIxMiwgMzgsIDMzLCAxLCAyMzUsIDE5MCwgNjEsIDM4LCAzMywgMSwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIAorICAgIDI1MiwgMSwgMjEwLCAxODMsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAxODMsIDQ0LCAyNTQsIDExOCwgCisgICAgMjE4LCA2MSwgMjMxLCAxNTksIDQ0LCAyNTQsIDExOCwgMjQ2LCAxMjYsIDIxOCwgNjEsIDIzMSwgMTU5LCA0MywgMjE4LCAKKyAgICA2MSwgMTI3LCA0NCwgMjE4LCA2MSwgMTI3LCA0MywgMjQ2LCAxMjYsIDIxOCwgNjEsIDEyNywgNDQsIDI0NiwgMTI2LCAyMTgsIAorICAgIDYxLCAxMjcsIDIyMywgMTYwLCAyMzUsIDIwOSwgMjMxLCAxNTksIDIyMywgMTYwLCAyNDYsIDEyNiwgMjM1LCAyMDksIDIzMSwgCisgICAgMTU5LCAyNDYsIDEyNiwgMjE1LCAyNDIsIDIzMSwgMTU5LCA0MywgMjE1LCAyNDIsIDEyNywgNDQsIDIxNSwgMjQyLCAxMjcsIAorICAgIDIyMywgMTYwLCAyMTgsIDIzNiwgNDMsIDIyMywgMTYwLCAyMjYsIDIwMiwgMTI3LCA0NCwgMjIzLCAxNjAsIDIyNiwgMjAyLCAKKyAgICAxMjcsIDI0NSwgMjE4LCAyNDksIDE2NiwgMjI2LCAxNywgMjQ0LCAzMCwgMjI2LCAxNywgMjIzLCA1MiwgMjQ0LCAzMCwgCisgICAgMjI2LCAxNywgMjQwLCAxNzIsIDI0NiwgMTI2LCAyMjYsIDI1NSwgMjQ2LCAxMTIsIDI1NCwgMTI3LCAyMTQsIDE1MywgMjU0LCAKKyAgICAxMjcsIDI0NiwgMTI2LCAyMjIsIDI1MCwgMjU0LCAxMTcsIDUyLCAyMjYsIDI1MiwgMjQwLCAxNzUsIDIzNSwgMjAwLCAyMzUsIAorICAgIDIwOCwgMjI2LCA2MywgMjUxLCAxNjIsIDI0MCwgMTc2LCAyLCAyNDgsIDksIDIxNiwgOTAsIDIsIDIyMiwgMjM3LCA0OCwgCisgICAgNDMsIDEyMSwgMjI2LCA5LCAxMjcsIDQ0LCAxMjEsIDIyNiwgOSwgMTI3LCAyMTYsIDkwLCAyLCA1OSwgNDgsIDIxNiwgOTAsIAorICAgIDIsIDU5LCA1MSwgNDMsIDY3LCAyNTIsIDE0OSwgMiwgMjI0LCAxMCwgNDQsIDY3LCAyNTIsIDE0OSwgMiwgMjI0LCAxMCwgCisgICAgMjE2LCAxNSwgNDMsIDE2MywgMTI3LCAyMTYsIDE1LCA0NCwgMTYzLCAxMjcsIDI1MSwgMTgzLCA0MywgMTYzLCAxMjcsIAorICAgIDI1MSwgMTgzLCA0NCwgMTYzLCAxMjcsIDQzLCAyMTksIDE4OSwgMTA0LCAxMjcsIDQ0LCAyMTksIDE4OSwgMTA0LCAxMjcsIAorICAgIDQzLCA1MiwgMjI2LCA3LCA0NCwgNTIsIDIyNiwgNywgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDEyMywgCisgICAgNTksIDExNSwgMTEzLCAxNzAsIDIyNCwgMTQzLCA5MiwgMjQ0LCAxOSwgNTksIDIyNCwgMTQzLCAyNDQsIDg5LCA1OSwgNzksIAorICAgIDIyMywgNTIsIDIyNCwgMTYsIDc5LCA2NywgMTg0LCAyMjIsIDIzNywgMjI1LCAxMywgMjExLCAyMDksIDIyMCwgMTQwLCAKKyAgICAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIxNSwgOTQsIDI0OSwgMjI3LCAyMjMsIDE2MCwgMjQ3LCAxMjgsIDIyMywgMTYwLCAyNDksIAorICAgIDIyNywgMjE1LCA5NCwgMjIwLCAxNTIsIDI0OCwgMjE0LCAyLCA0MywgMjQyLCAxMTUsIDI0OCwgMjE0LCAyLCA0NCwgMjQyLCAKKyAgICAxMTUsIDIxNSwgOTQsIDI0OCwgMjEzLCAyMTYsIDE1LCAxNjMsIDIyMSwgMTc1LCA1MCwgMjE1LCA1OSwgMjQ4LCAxNjQsIAorICAgIDIxNiwgMTQ0LCAyNDgsIDE2NCwgMTAsIDM0LCAyMjMsIDc5LCAxMCwgMzQsIDI1MCwgMTgsIDEwLCAzNCwgMjIxLCAxNzgsIAorICAgIDExMSwgMTAsIDM0LCAyMjEsIDE3OCwgMTA1LCAxMCwgMzQsIDIyMSwgMTc4LCAxNTgsIDEwLCAzNCwgMjI1LCAxNzAsIDEwLCAKKyAgICAzNCwgMjUxLCAxNzEsIDEwLCAzNCwgMjE3LCA5MywgMTAsIDM0LCAyMzQsIDM5LCAxMTEsIDEwLCAzNCwgMjM0LCAzOSwgCisgICAgMTA1LCAxMCwgMzQsIDI0NywgMTc4LCAxMCwgMzQsIDIyMSwgMTgxLCAxMCwgMzQsIDQsIDExMSwgMTAsIDM0LCA0LCAxMDUsIAorICAgIDEwLCAzNCwgMjMzLCAxMDMsIDExMSwgMTAsIDM0LCAyMzMsIDEwMywgMTA1LCAxMCwgMzQsIDIzMywgMTAzLCAxNTgsIDEwLCAKKyAgICAzNCwgMjMzLCAxMDMsIDE2MSwgMTAsIDM0LCAyMTksIDcwLCAxMCwgMzQsIDIxNiwgMTQ2LCAxMCwgMzQsIDIxOSwgNjgsIAorICAgIDExMSwgMTAsIDM0LCAyMTksIDY4LCAxMDUsIDEwLCAzNCwgMjQxLCAyMzUsIDExMSwgMTAsIDM0LCAyNDEsIDIzNSwgMTA1LCAKKyAgICAxMCwgMzQsIDI0MiwgMjIsIDEwLCAzNCwgMjIzLCAxNTAsIDEwLCAzNCwgMjUwLCA5MCwgMTAsIDM0LCAyMTgsIDM4LCAxMCwgCisgICAgMzQsIDIzMCwgMTMzLCAxMCwgMzQsIDI0OCwgOTYsIDEwLCAzNCwgMjMwLCAxMjUsIDEwLCAzNCwgMjUwLCAzMywgMTAsIDM0LCAKKyAgICAyMTIsIDQxLCAxMTEsIDEwLCAzNCwgMjEyLCA0MSwgMTA1LCAxMCwgMzQsIDI0NCwgMTA0LCAxMCwgMzQsIDIyNSwgMjM2LCAKKyAgICAxMTEsIDEwLCAzNCwgMjI1LCAyMzYsIDEwNSwgMTAsIDM0LCAyMTksIDE2MiwgMTYzLCAyMTUsIDIzNywgMjE1LCAxODksIAorICAgIDEwLCAzNCwgMjQ5LCAxNTMsIDEwLCAzNCwgMjQ3LCAxNDQsIDEwLCAzNCwgMjM1LCAxNDMsIDEwLCAzNCwgMjUxLCAyMDYsIAorICAgIDY0LCAyNTAsIDIsIDEwLCAzNCwgMjQ1LCAyMywgMTAsIDM0LCAyMTgsIDI1MSwgMTExLCAxMCwgMzQsIDIxOCwgMjUxLCAKKyAgICAxMDUsIDEwLCAzNCwgMjUyLCAxNjIsIDEwLCAzNCwgMjE5LCAxNjksIDEwLCAzNCwgMjUxLCA3MSwgMjE5LCAxNjksIDEwLCAKKyAgICAzNCwgMjI5LCA5NSwgMTExLCAxMCwgMzQsIDIyOSwgOTUsIDEwNSwgMTAsIDM0LCAyMjksIDk1LCAxNTgsIDEwLCAzNCwgCisgICAgMjI5LCA5NSwgMTYxLCAxMCwgMzQsIDIzMSwgNTEsIDEwLCAzNCwgMjIwLCA1OSwgMTAsIDM0LCAyMjMsIDE1NiwgMTAsIDM0LCAKKyAgICAyNDUsIDQ1LCAxMCwgMzQsIDIyNiwgMjEzLCAxMCwgMzQsIDI1MSwgMTQxLCAxMTEsIDEwLCAzNCwgMjUxLCAxNDEsIDEwNSwgCisgICAgMTAsIDM0LCAyMzEsIDkxLCAxMCwgMzQsIDIzMCwgMTI4LCAxMCwgMzQsIDI0MiwgMTQ3LCAxMTEsIDEwLCAzNCwgMjQyLCAKKyAgICAxNDcsIDEwNSwgMTAsIDM0LCAyNDIsIDE0NywgMTU4LCAxMCwgMzQsIDIxNiwgMTA3LCAxMCwgMzQsIDI1MCwgMSwgMTAsIAorICAgIDM0LCAyMTIsIDksIDExMSwgMTAsIDM0LCAyMTIsIDksIDEwNSwgMTAsIDM0LCAyNTEsIDcxLCAyMjEsIDE3MiwgMTAsIDM0LCAKKyAgICAyMTksIDE2MiwgMjQwLCAyNTUsIDEwLCAzNCwgMjQwLCAyNTUsIDEwLCAzNCwgMjUxLCA3MSwgMjE5LCA0LCAxMCwgMzQsIAorICAgIDI1MSwgNzEsIDIyMCwgNTQsIDEwLCAzNCwgMjQ0LCA0MCwgMTAsIDM0LCAyNTEsIDcxLCAyNTAsIDIzNiwgMTAsIDM0LCAKKyAgICAyMTksIDE2MiwgMjEyLCA1NywgMTAsIDM0LCAyMTIsIDU4LCAxMTEsIDEwLCAzNCwgMjEyLCA1OCwgMTA1LCAxMCwgMzQsIAorICAgIDI1MCwgMzUsIDEwLCAzNCwgMjUxLCA3MSwgMjQyLCAxNzMsIDEwLCAzNCwgMjAwLCAxMTEsIDEwLCAzNCwgMjAwLCAxMDUsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjMyLCAxNDMsIDEwLCAzNCwgMjUxLCA3MSwgMjQzLCA5NSwgMTAsIDM0LCAyMzAsIDEyNCwgCisgICAgMTExLCAxMCwgMzQsIDIzMCwgMTI0LCAxMDUsIDEwLCAzNCwgMjIzLCAxNjIsIDEwLCAzNCwgMjUxLCAyMTUsIDEwLCAzNCwgCisgICAgMjUxLCA3MSwgMjE3LCA1NywgMjMzLCA1OCwgMTAsIDM0LCAyNTEsIDcxLCAyMzMsIDU5LCAxMCwgMzQsIDI1MSwgNzEsIAorICAgIDIxMSwgMjM5LCAxMCwgMzQsIDI1MSwgNzEsIDI0NCwgNTQsIDEwLCAzNCwgMjQ1LCAyMjYsIDExMSwgMTAsIDM0LCAyNDUsIAorICAgIDIyNiwgMTA1LCAxMCwgMzQsIDI0NSwgMjI2LCAxNTgsIDEwLCAzNCwgMjUxLCA3MSwgMjQ1LCAyMjUsIDEwLCAzNCwgMjQxLCAKKyAgICAyNDIsIDEwLCAzNCwgMjUxLCA3MSwgMjQwLCAyNTIsIDEwLCAzNCwgMjUxLCAyMDIsIDEwLCAzNCwgMjQyLCAyMjksIDEwLCAKKyAgICAzNCwgMjUxLCA3MSwgMjQ0LCA5OCwgMTAsIDM0LCAyNTEsIDcxLCAyNTEsIDI0NSwgMTAsIDM0LCAyNTEsIDcxLCAyMjIsIDMsIAorICAgIDEwLCAzNCwgMjE5LCAxNjIsIDIxMiwgMiwgMTAsIDM0LCAyMTksIDE2MiwgMjExLCA0MSwgMTAsIDM0LCAyNTEsIDcxLCAKKyAgICAyNDMsIDI1MiwgMTAsIDM0LCAyMzUsIDE0OSwgMjQ1LCA0OSwgMTAsIDM0LCAyNTEsIDcxLCAyNDUsIDQ5LCAxMCwgMzQsIAorICAgIDIzNSwgMTQ5LCAyMTYsIDE2LCAxMCwgMzQsIDI1MSwgNzEsIDIxNiwgMTYsIDEwLCAzNCwgMjM1LCAxNDksIDI0NiwgMTA0LCAKKyAgICAxMCwgMzQsIDI1MSwgNzEsIDI0NiwgMTA0LCAxMCwgMzQsIDIxNSwgOTEsIDEwLCAzNCwgMjM1LCAxNDksIDIxNSwgOTEsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjE1LCA5MSwgNjAsIDM0LCAxMTEsIDYwLCAzNCwgMjMyLCAyMTksIDYwLCAzNCwgMjQ3LCAKKyAgICAxMjgsIDYwLCAzNCwgMjE5LCA5NywgNjAsIDM0LCAyMjEsIDE3NywgNjAsIDM0LCAxMDMsIDYwLCAzNCwgMTA1LCA2MCwgMzQsIAorICAgIDIzMiwgMjQzLCA2MCwgMzQsIDIzMSwgMTkwLCA2MCwgMzQsIDIzMywgMzksIDYwLCAzNCwgMjQ1LCAxMzcsIDYwLCAzNCwgCisgICAgMTk2LCA2MCwgMzQsIDEyNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjQ5LCAxNTUsIDYwLCAzNCwgMjQwLCAxMTgsIDYwLCAzNCwgCisgICAgMjE3LCA5MywgNjAsIDM0LCAyMDQsIDI1MSwgMTcxLCA2MCwgMzQsIDIzNCwgMzgsIDYwLCAzNCwgMjI0LCAyMjcsIDYwLCAKKyAgICAzNCwgMjExLCAyMDIsIDYwLCAzNCwgMjE4LCAyNDUsIDYwLCAzNCwgNDQsIDIwNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjQxLCAKKyAgICAxODMsIDI0NSwgMTUzLCA2MCwgMzQsIDIxNiwgMjQ4LCA2MCwgMzQsIDI0NywgMTc4LCA2MCwgMzQsIDIyMSwgMTgxLCA2MCwgCisgICAgMzQsIDI1MCwgMTgsIDYwLCAzNCwgMjI0LCAxODUsIDYwLCAzNCwgMjU0LCAyMjQsIDYwLCAzNCwgMjMwLCAxMTUsIDYwLCAKKyAgICAzNCwgMjQ1LCAxNTMsIDYwLCAzNCwgMjQ1LCAyMzEsIDYwLCAzNCwgMjIxLCAyMDIsIDYwLCAzNCwgMjQyLCAxODEsIDYwLCAKKyAgICAzNCwgMjQyLCAxODIsIDIxOSwgODMsIDYwLCAzNCwgMjQ1LCA0OCwgNjAsIDM0LCAyNTIsIDAsIDYwLCAzNCwgMjExLCAyMjEsIAorICAgIDYwLCAzNCwgMjUwLCAxMDksIDYwLCAzNCwgMjIyLCAxOTgsIDYwLCAzNCwgMjM2LCAyLCA2MCwgMzQsIDIxOSwgODEsIDYwLCAKKyAgICAzNCwgMjMzLCAxMDIsIDYwLCAzNCwgMjQ5LCAxNjQsIDYwLCAzNCwgMjE4LCAyMzksIDYwLCAzNCwgMjMwLCAxMjAsIDYwLCAKKyAgICAzNCwgMjIyLCAyMjcsIDYwLCAzNCwgMjExLCAyMDYsIDYwLCAzNCwgMjI2LCAxOTQsIDYwLCAzNCwgMjE1LCA5OCwgNjAsIAorICAgIDM0LCAyNDYsIDg4LCA2MCwgMzQsIDIxOSwgMjUzLCAyMTYsIDE0NiwgNjAsIDM0LCAyNDYsIDEyNiwgMjUwLCAxOCwgNjAsIAorICAgIDM0LCAyMDAsIDIxOCwgMTEwLCA2MCwgMzQsIDExMywgMjQyLCAxNywgNjAsIDM0LCAyMjAsIDIsIDYwLCAzNCwgMjUxLCAKKyAgICAxNzcsIDYwLCAzNCwgMjE5LCA2NywgNjAsIDM0LCAyNTEsIDE0NSwgNjAsIDM0LCAyMTgsIDE0MCwgNjAsIDM0LCAyNDEsIAorICAgIDIzNCwgNjAsIDM0LCAyNDIsIDM1LCA2MCwgMzQsIDI0NywgMTMxLCA2MCwgMzQsIDI0MiwgMjIsIDYwLCAzNCwgMjUxLCAKKyAgICAxNjIsIDYwLCAzNCwgMjIzLCAxNTAsIDYwLCAzNCwgMjIxLCAxODksIDYwLCAzNCwgMjQ3LCAyMDcsIDYwLCAzNCwgMjUzLCAKKyAgICAxNzYsIDYwLCAzNCwgMjE4LCAyMzYsIDYwLCAzNCwgMjI4LCA1NiwgNjAsIDM0LCAyMTgsIDM4LCA2MCwgMzQsIDIyMSwgCisgICAgMjEzLCA2MCwgMzQsIDIzMCwgMTMzLCA2MCwgMzQsIDIxNSwgMjM2LCA2MCwgMzQsIDIzMywgMTI4LCA2MCwgMzQsIDIxOCwgCisgICAgMTMxLCA2MCwgMzQsIDI0OCwgOTYsIDYwLCAzNCwgMjEyLCAyMSwgNjAsIDM0LCAyNDcsIDE1NCwgMjI4LCA1NiwgNjAsIDM0LCAKKyAgICAyNDksIDIyMywgNjAsIDM0LCAyNDMsIDIyOSwgNjAsIDM0LCAyNTAsIDI5LCA2MCwgMzQsIDIxOCwgMTQ0LCA2MCwgMzQsIAorICAgIDIxMiwgNDAsIDYwLCAzNCwgMjQ0LCAxMDQsIDYwLCAzNCwgMjUwLCAyNiwgNjAsIDM0LCAyNDQsIDE2OSwgNjAsIDM0LCA1MiwgCisgICAgMjExLCAxNzgsIDYwLCAzNCwgMTYzLCAyMTUsIDIzNywgMjE1LCAxODksIDYwLCAzNCwgMjE5LCA5MSwgNjAsIDM0LCAyNDQsIAorICAgIDE3OSwgNjAsIDM0LCAyNDksIDE1MywgNjAsIDM0LCAyNDcsIDE0NCwgNjAsIDM0LCAyMjQsIDE4MiwgNjAsIDM0LCAyMzUsIAorICAgIDE0MywgNjAsIDM0LCAyMzEsIDcyLCA2MCwgMzQsIDIxNiwgODksIDYwLCAzNCwgMjE3LCAyNDYsIDYwLCAzNCwgMjMyLCAKKyAgICAyMzcsIDYwLCAzNCwgMjE0LCAxMzEsIDYwLCAzNCwgMjQ0LCAxMjgsIDYwLCAzNCwgMjUxLCAyMDYsIDY0LCAyNTAsIDIsIAorICAgIDYwLCAzNCwgMjE5LCAxOTAsIDYwLCAzNCwgMjQ2LCAxMjYsIDIxNiwgMjQzLCA2MCwgMzQsIDIxMSwgMjUzLCA2MCwgMzQsIAorICAgIDIxOSwgMTA1LCA2MCwgMzQsIDI0NywgMTk1LCA2MCwgMzQsIDI0NSwgMjMsIDYwLCAzNCwgMjE5LCA3LCA2MCwgMzQsIDc1LCAKKyAgICA2MCwgMzQsIDIxOCwgMTMzLCA2MCwgMzQsIDIxOCwgMjUwLCA2MCwgMzQsIDIxNiwgMCwgNjAsIDM0LCAyNDIsIDE1NCwgNjAsIAorICAgIDM0LCAyNTAsIDIyNiwgNjAsIDM0LCAyMTgsIDE2MiwgNjAsIDM0LCAyNTIsIDE2MiwgNjAsIDM0LCAyMjMsIDM0LCA2MCwgCisgICAgMzQsIDIxOSwgMTY5LCA2MCwgMzQsIDIzNSwgMTM2LCA2MCwgMzQsIDIyOSwgOTQsIDYwLCAzNCwgMjIwLCA1OSwgNjAsIDM0LCAKKyAgICAyNDQsIDE1NywgNjAsIDM0LCAyMjYsIDIxMywgNjAsIDM0LCAyNTQsIDEyNiwgNjAsIDM0LCAyMjUsIDMyLCA2MCwgMzQsIAorICAgIDI0NSwgMjM1LCA2MCwgMzQsIDI1MSwgMTQwLCA2MCwgMzQsIDIzMSwgOTEsIDYwLCAzNCwgMjMwLCAxODgsIDYwLCAzNCwgCisgICAgMjIwLCAxNTgsIDYwLCAzNCwgMjU0LCA0LCA2MCwgMzQsIDIzMCwgMTI4LCA2MCwgMzQsIDIxNiwgMjAsIDYwLCAzNCwgMjI2LCAKKyAgICAxNjksIDYwLCAzNCwgMjUxLCAyMDksIDYwLCAzNCwgMjE4LCAxMjksIDYwLCAzNCwgMjQ5LCAyMzMsIDYwLCAzNCwgMjQyLCAKKyAgICAxNDYsIDYwLCAzNCwgMjE2LCAxMDcsIDYwLCAzNCwgMjM1LCAyMjQsIDYwLCAzNCwgMjUxLCAyMTksIDYwLCAzNCwgMjEyLCAKKyAgICA1OCwgMjQ1LCAxNTMsIDYwLCAzNCwgMjUwLCAxLCA2MCwgMzQsIDIxMiwgOCwgNjAsIDM0LCAyMjEsIDE3MiwgNjAsIDM0LCAKKyAgICAyNDAsIDI1NSwgNjAsIDM0LCAyMTksIDQsIDYwLCAzNCwgMjE0LCAyMiwgNjAsIDM0LCAyNTIsIDgwLCA2MCwgMzQsIDIyNSwgCisgICAgNzYsIDYwLCAzNCwgMjUyLCAxODIsIDYwLCAzNCwgMjIwLCA1NCwgNjAsIDM0LCAyMjMsIDExMywgNjAsIDM0LCAyMjIsIAorICAgIDEyOCwgNjAsIDM0LCAyNDQsIDQwLCA2MCwgMzQsIDI1MSwgMjA4LCA2MCwgMzQsIDI1MCwgMjM2LCA2MCwgMzQsIDI1MSwgCisgICAgMjM0LCA2MCwgMzQsIDIzMCwgMTMwLCA2MCwgMzQsIDIxMiwgNTcsIDYwLCAzNCwgMjUwLCAzNSwgNjAsIDM0LCAyMTEsIAorICAgIDIzNiwgNjAsIDM0LCAyNDcsIDE4OCwgNjAsIDM0LCAyMTMsIDE2MSwgNjAsIDM0LCAyNDIsIDE3MywgNjAsIDM0LCAyMzIsIAorICAgIDE0MywgNjAsIDM0LCAyNDMsIDk1LCA2MCwgMzQsIDIzMCwgMTIzLCA2MCwgMzQsIDIxOSwgOTYsIDYwLCAzNCwgMjE5LCAKKyAgICAyNTMsIDIxNywgNzcsIDI1MSwgMjQ1LCA2MCwgMzQsIDIyMywgMTYyLCA2MCwgMzQsIDI1MSwgMjE1LCA2MCwgMzQsIDIxMSwgCisgICAgMTk3LCA2MCwgMzQsIDI0NCwgMTk4LCA2MCwgMzQsIDIzMywgNTgsIDYwLCAzNCwgMjE3LCA1NywgMjMzLCA1OCwgNjAsIDM0LCAKKyAgICAyMzMsIDU0LCA2MCwgMzQsIDIxOSwgMzIsIDYwLCAzNCwgMjMzLCA1OSwgNjAsIDM0LCAyMTEsIDIzOSwgNjAsIDM0LCAyNDQsIAorICAgIDU0LCA2MCwgMzQsIDI0NSwgMjI1LCA2MCwgMzQsIDI0MSwgMjQyLCA2MCwgMzQsIDI0NCwgOCwgNjAsIDM0LCAyNDAsIDI1MiwgCisgICAgNjAsIDM0LCAyNTEsIDIwMiwgNjAsIDM0LCAyMTcsIDY0LCA2MCwgMzQsIDI0MiwgNDEsIDYwLCAzNCwgMjQ0LCAxMjEsIDYwLCAKKyAgICAzNCwgMjIyLCAzMCwgMjExLCAyMzYsIDYwLCAzNCwgMjUwLCAyMjgsIDYwLCAzNCwgMjQyLCAyMjksIDYwLCAzNCwgMjQ0LCAKKyAgICA5OCwgNjAsIDM0LCAyNTEsIDI0NSwgNjAsIDM0LCAyMjIsIDMsIDYwLCAzNCwgMjQ4LCA4MiwgNjAsIDM0LCAyMTIsIDIsIAorICAgIDYwLCAzNCwgMjQxLCAyMTcsIDYwLCAzNCwgMjExLCA0MSwgNjAsIDM0LCAyMzAsIDE5NywgNjAsIDM0LCAyNTEsIDIyOSwgCisgICAgNjAsIDM0LCAyNDUsIDE2MywgNjAsIDM0LCAyNDMsIDI1MiwgNjAsIDM0LCAyMTUsIDIxMCwgNjAsIDM0LCAyNDYsIDkwLCAKKyAgICA2MCwgMzQsIDIyMywgMTQ0LCA2MCwgMzQsIDIyOCwgNTgsIDYwLCAzNCwgMjQ1LCA0OSwgNjAsIDM0LCAyMTYsIDE2LCA2MCwgCisgICAgMzQsIDI0NiwgMTA0LCA2MCwgMzQsIDIxNSwgOTEsIDYwLCAzNCwgMjQ0LCA1NiwgMTEwLCAyNDgsIDQ1LCAxMzUsIDQzLCAKKyAgICAyMTYsIDQzLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDcyLCAyMTYsIDQzLCA1MSwgMTEwLCAyNDgsIDQ1LCAxMzUsIAorICAgIDQzLCAyMTYsIDQzLCAyMzAsIDIyOSwgMjIsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgNzIsIDIxNiwgNDMsIDIzMCwgCisgICAgMjI5LCAyMiwgNTEsIDExMCwgMjQ4LCA0NSwgMTM1LCAyNDMsIDIzNiwgMjE4LCAxMSwgMTEwLCAyNDgsIDQ1LCAxMzUsIAorICAgIDIxOCwgMTIsIDI0MywgMjUxLCA0OCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCA1MSwgMTEwLCAKKyAgICAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMzMsIDUyLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgCisgICAgMjQzLCAyNTEsIDIxNCwgMTYwLCAyMzMsIDUyLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIxNCwgCisgICAgMTYwLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMzIsIDExNCwgMjMzLCA1MiwgCisgICAgMTEwLCAyNDgsIDQ1LCAxMzUsIDIyNiwgMTI2LCAxMTAsIDIxOSwgMjAsIDExMCwgMjQ5LCAyMjcsIDExMCwgMjQzLCAyMzYsIAorICAgIDIxOCwgMTMxLCAyNDcsIDE4NSwgNzksIDIzNSwgMTM3LCAyMzUsIDI0MywgMjE4LCAxNjEsIDg3LCAxMTAsIDIzNSwgMTY0LCAKKyAgICA3OSwgMTEwLCAyNTAsIDQsIDc5LCAxMTAsIDU0LCAyMTAsIDg2LCA0MywgMjU0LCAxMTgsIDEyNywgNDQsIDI1NCwgMTE4LCAKKyAgICAxMjcsIDQzLCA1MiwgMjU0LCAxMTgsIDEyNywgNDQsIDUyLCAyNTQsIDExOCwgMTI3LCA0MywgMjQ5LCAxNjksIDEyNywgNDQsIAorICAgIDI0OSwgMTY5LCAxMjcsIDQzLCA3MSwgMjQ5LCAxNjksIDEyNywgNDQsIDcxLCAyNDksIDE2OSwgMTI3LCA0MywgODUsIDIzMywgCisgICAgMjYsIDEyNywgNDQsIDg1LCAyMzMsIDI2LCAxMjcsIDIyNCwgMjQwLCA3OSwgMjQzLCAzOSwgNzksIDQzLCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDEyNywgNDQsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCA0MywgNzEsIDIzMywgMjYsIDEyNywgNDQsIDcxLCAKKyAgICAyMzMsIDI2LCAxMjcsIDQzLCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQ0LCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIAorICAgIDQzLCA3MSwgNDIsIDEyNywgNDQsIDcxLCA0MiwgMTI3LCAyMTIsIDM2LCAyNDgsIDE2NCwgMjIzLCA1MiwgNTIsIDIyNCwgCisgICAgMTk0LCAyMjQsIDEsIDc5LCA1MiwgMjI0LCAxOTQsIDIyNCwgMSwgNzksIDEyMSwgNTIsIDIyNCwgMTk0LCAyMjQsIDEsIDc5LCAKKyAgICAyMjQsIDI0MCwgMTY0LCAyNDQsIDE5OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDExMSwgMjQyLCAxNSwgMjI3LCAyMDIsIDEwNSwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDE1OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDE2MSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5MCwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDE5NSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5OSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5NiwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDIwMSwgMTEwLCAyMzMsIDksIDEzOCwgNzksIDExMCwgMjIyLCAyMzEsIDEzOCwgNzksIAorICAgIDExMCwgMjQ4LCA1MiwgMTM4LCA3OSwgMTEwLCAyNDUsIDEzNiwgMTM4LCA3OSwgMjQsIDIxOSwgMTU3LCA1OSwgMTM4LCA3OSwgCisgICAgMjQsIDUyLCA1OSwgMTM4LCA3OSwgMjEyLCAzMiwgMjQ4LCAxNjQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgNzksIDY3LCAKKyAgICAyMzQsIDIzOSwgMjIzLCA4MCwgMiwgMjEzLCAxMzUsIDIxOSwgMzMsIDc5LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDE2NCwgCisgICAgMjE0LCAxNjAsIDI0MiwgMzQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMiwgMjEzLCAxMzUsIDIxOSwgMzMsIDE2NCwgMjE0LCAKKyAgICAxNjAsIDI0MiwgMzQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMTY0LCAyMzIsIDExNCwgMjQyLCAzNCwgMzcsIDIyNCwgCisgICAgMjQwLCA3OSwgMTEwLCAyMTcsIDQsIDIzMiwgMjIwLCAyNDQsIDE1NCwgMjIwLCAxNDAsIDg3LCAyNDIsIDE1LCAyMjcsIAorICAgIDIwMiwgMjE2LCAyNDgsIDI0MiwgMTUsIDIyNywgMjAyLCAyMTUsIDczLCAyNDIsIDE1LCAyMjcsIDIwMiwgMjE2LCAxNjMsIAorICAgIDY3LCAxMTAsIDIzNSwgMTY0LCA3OSwgMjMxLCAxNDUsIDc5LCAyMjYsIDMsIDI1NCwgMTQ4LCA3OSwgMTEwLCA0NSwgMjM1LCAKKyAgICAyNDUsIDExMCwgMTYzLCAyNDQsIDExNCwgMjE5LCAyMCwgMTQxLCAxLCA0LCA2MSwgMTQxLCAxLCA2MSwgMTQxLCAxLCA0LCAKKyAgICA3NCwgMTQxLCAxLCA3NCwgMTQxLCAxLCA0LCA2OSwgMTQxLCAxLCA2OSwgMTQxLCAxLCA0LCA3NiwgMTQxLCAxLCA3NiwgCisgICAgMTQxLCAxLCA0LCA3OCwgMTQxLCAxLCA3OCwgMTQxLCAxLCAxNzYsIDE0MSwgMSwgMjQzLCAxNDIsIDE0MSwgMSwgMjM0LCAKKyAgICA5OCwgMTQxLCAxLCAyNDIsIDIyMSwgMTQxLCAxLCAyMzMsIDIyMywgMTQxLCAxLCAyNDIsIDEyMCwgMTQxLCAxLCAyMzQsIAorICAgIDE4OCwgMTQxLCAxLCAyNDMsIDY5LCAxNDEsIDEsIDIzNCwgMzQsIDE0MSwgMSwgMjQyLCAxODEsIDE0MSwgMSwgMjA2LCAKKyAgICAxNDEsIDEsIDIxMCwgMTE2LCAxNDEsIDEsIDIxOSwgMTkzLCAxNDEsIDEsIDIxMCwgNDQsIDE0MSwgMSwgMjE4LCA4NCwgCisgICAgMTQxLCAxLCAyMTAsIDEzLCAxNDEsIDEsIDIyMSwgMTgzLCAxNDEsIDEsIDIxMCwgOTQsIDE0MSwgMSwgMjE5LCA2MCwgMTQxLCAKKyAgICAxLCAyMTAsIDIzLCAxNDEsIDEsIDIxNywgMTA2LCAxNDEsIDEsIDI0OCwgMjI5LCAxNDEsIDEsIDIxNiwgMTE4LCAxNDEsIDEsIAorICAgIDI0OCwgMTEsIDE0MSwgMSwgNCwgMjE1LCAxMTksIDE0MSwgMSwgMjE1LCAxMTksIDE0MSwgMSwgMjQ2LCA4NiwgMTQxLCAxLCAKKyAgICAyMTcsIDIzLCAxNDEsIDEsIDI0OCwgOTgsIDE0MSwgMSwgMTEyLCAxNDEsIDEsIDI0NywgMTUzLCAxNDEsIDEsIDE5OCwgCisgICAgMTQxLCAxLCAyMjgsIDIzOCwgMTQxLCAxLCAyMjcsIDI0MiwgMTQxLCAxLCAyMjksIDExMiwgMTQxLCAxLCAyMjgsIDc5LCAKKyAgICAxNDEsIDEsIDE2MiwgMTQxLCAxLCAyNTIsIDE5OSwgMTQxLCAxLCAxOTEsIDE0MSwgMSwgMjQxLCAxODcsIDE0MSwgMSwgCisgICAgMjUyLCAxNCwgMTQxLCAxLCAyMjUsIDExMSwgMTQxLCAxLCAyNDAsIDIyOSwgMTQxLCAxLCAyNTEsIDEzMywgMTQxLCAxLCAKKyAgICAyMjQsIDE1MywgMTQxLCAxLCAyNDEsIDI0NSwgMTQxLCAxLCAyNTIsIDgzLCAxNDEsIDEsIDIyNSwgMjI0LCAxNDEsIDEsIAorICAgIDI0MSwgNzUsIDE0MSwgMSwgMjUxLCAyMTMsIDE0MSwgMSwgMjI1LCAxOSwgMTQxLCAxLCAxODYsIDE0MSwgMSwgMjMwLCAKKyAgICAyMzUsIDE0MSwgMSwgMjMwLCAxMDcsIDE0MSwgMSwgMjMxLCA5NiwgMTQxLCAxLCAyMzAsIDE2NiwgMTQxLCAxLCA0LCAxOTIsIAorICAgIDE0MSwgMSwgMTkyLCAxNDEsIDEsIDQsIDIxMCwgMjEyLCAxNDEsIDEsIDIxMCwgMjEyLCAxNDEsIDEsIDQsIDIxMCwgMjQ0LCAKKyAgICAxNDEsIDEsIDIxMCwgMjQ0LCAxNDEsIDEsIDIwNSwgMTQxLCAxLCAyMjMsIDM4LCAxNDEsIDEsIDIyMiwgMTQyLCAxNDEsIDEsIAorICAgIDIyMywgMTMxLCAxNDEsIDEsIDIyMiwgMjEzLCAxNDEsIDEsIDQsIDIxMiwgNjUsIDE0MSwgMSwgMjEyLCA2NSwgMTQxLCAxLCAKKyAgICAyMTEsIDI1MCwgMTQxLCAxLCAyMTIsIDIyLCAxNDEsIDEsIDIxMSwgMjI3LCAxNDEsIDEsIDIzMCwgMzAsIDE0MSwgMSwgCisgICAgMjEyLCAxMTYsIDE0MSwgMSwgNCwgMTc2LCAxNDEsIDEsIDQsIDIzNCwgMTg4LCAzOCwgMjM0LCAyMDcsIDIxMywgMTM1LCAKKyAgICAyMTksIDMzLCA3OSwgMzgsIDIzNCwgMjA3LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDIzNCwgMjA3LCAyMTMsIDEzNSwgCisgICAgMjE5LCAzMywgNzksIDIzNCwgMjA3LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDE0MSwgMjM1LCAxNjQsIDc5LCAxNDEsIAorICAgIDIxMywgMTM1LCAyMzUsIDE2NCwgNzksIDE0MSwgMjQ3LCAyMjksIDIxMCwgMjI1LCAyMzQsIDIwNywgNTIsIDI0MCwgMTc1LCAKKyAgICA1NiwgMSwgNCwgNjEsIDU2LCAxLCA2MSwgNTYsIDEsIDQsIDc0LCA1NiwgMSwgNzQsIDU2LCAxLCA0LCA2OSwgNTYsIDEsIAorICAgIDY5LCA1NiwgMSwgNCwgNzYsIDU2LCAxLCA3NiwgNTYsIDEsIDQsIDc4LCA1NiwgMSwgNzgsIDU2LCAxLCAxNzYsIDU2LCAxLCAKKyAgICAyNDMsIDE0MiwgNTYsIDEsIDIzNCwgOTgsIDU2LCAxLCAyNDIsIDIyMSwgNTYsIDEsIDIzMywgMjIzLCA1NiwgMSwgMjQyLCAKKyAgICAxMjAsIDU2LCAxLCAyMzQsIDE4OCwgNTYsIDEsIDI0MywgNjksIDU2LCAxLCAyMzQsIDM0LCA1NiwgMSwgMjQyLCAxODEsIAorICAgIDU2LCAxLCAyMDYsIDU2LCAxLCAyMTAsIDExNiwgNTYsIDEsIDIxOSwgMTkzLCA1NiwgMSwgMjEwLCA0NCwgNTYsIDEsIDIxOCwgCisgICAgODQsIDU2LCAxLCAyMTAsIDEzLCA1NiwgMSwgMjIxLCAxODMsIDU2LCAxLCAyMTAsIDk0LCA1NiwgMSwgMjE5LCA2MCwgNTYsIAorICAgIDEsIDIxMCwgMjMsIDU2LCAxLCAyMTcsIDEwNiwgNTYsIDEsIDI0OCwgMjI5LCA1NiwgMSwgMjE2LCAxMTgsIDU2LCAxLCAKKyAgICAyNDgsIDExLCA1NiwgMSwgNCwgMjE1LCAxMTksIDU2LCAxLCAyMTUsIDExOSwgNTYsIDEsIDI0NiwgODYsIDU2LCAxLCAyMTcsIAorICAgIDIzLCA1NiwgMSwgMjQ4LCA5OCwgNTYsIDEsIDExMiwgNTYsIDEsIDI0NywgMTUzLCA1NiwgMSwgMTk4LCA1NiwgMSwgMjI4LCAKKyAgICAyMzgsIDU2LCAxLCAyMjcsIDI0MiwgNTYsIDEsIDIyOSwgMTEyLCA1NiwgMSwgMjI4LCA3OSwgNTYsIDEsIDE2MiwgNTYsIDEsIAorICAgIDI1MiwgMTk5LCA1NiwgMSwgMTkxLCA1NiwgMSwgMjQxLCAxODcsIDU2LCAxLCAyNTIsIDE0LCA1NiwgMSwgMjI1LCAxMTEsIAorICAgIDU2LCAxLCAyNDAsIDIyOSwgNTYsIDEsIDI1MSwgMTMzLCA1NiwgMSwgMjI0LCAxNTMsIDU2LCAxLCAyNDEsIDI0NSwgNTYsIAorICAgIDEsIDI1MiwgODMsIDU2LCAxLCAyMjUsIDIyNCwgNTYsIDEsIDI0MSwgNzUsIDU2LCAxLCAyNTEsIDIxMywgNTYsIDEsIDIyNSwgCisgICAgMTksIDU2LCAxLCAxODYsIDU2LCAxLCAyMzAsIDIzNSwgNTYsIDEsIDIzMCwgMTA3LCA1NiwgMSwgMjMxLCA5NiwgNTYsIDEsIAorICAgIDIzMCwgMTY2LCA1NiwgMSwgNCwgMTkyLCA1NiwgMSwgMTkyLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDU2LCAxLCAyMTAsIDIxMiwgCisgICAgNTYsIDEsIDQsIDIxMCwgMjQ0LCA1NiwgMSwgMjEwLCAyNDQsIDU2LCAxLCAyMDUsIDU2LCAxLCAyMjMsIDM4LCA1NiwgMSwgCisgICAgMjIyLCAxNDIsIDU2LCAxLCAyMjMsIDEzMSwgNTYsIDEsIDIyMiwgMjEzLCA1NiwgMSwgNCwgMjEyLCA2NSwgNTYsIDEsIAorICAgIDIxMiwgNjUsIDU2LCAxLCAyMTEsIDI1MCwgNTYsIDEsIDIxMiwgMjIsIDU2LCAxLCAyMTEsIDIyNywgNTYsIDEsIDIzMCwgCisgICAgMzAsIDU2LCAxLCAyMTIsIDExNiwgNTYsIDEsIDQsIDE3NiwgNTYsIDEsIDQsIDIzNCwgMTg4LCA1NiwgMSwgMjE0LCAyNywgCisgICAgNTYsIDEsIDIxMywgMTc2LCA1NiwgMSwgMjEzLCAyNTUsIDU2LCAxLCAyMTMsIDEzOCwgNTYsIDIzMCwgMjI5LCAyNDcsIAorICAgIDEyOCwgMjM0LCAyMDcsIDIyNCwgMTc2LCAyMTksIDMzLCA3OSwgNTYsIDIzNSwgMTY0LCA3OSwgNTYsIDIxMywgMTM1LCAKKyAgICAyMzUsIDE2NCwgNzksIDU2LCAyNDcsIDIyOSwgMjM0LCA1LCAyNTEsIDE5MiwgMSwgMjUzLCAxNjYsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjYsIDEwOSwgMjUxLCAxOTIsIDEsIDE5NCwgMjUxLCAxOTIsIDEsIDI0NSwgMTQsIDI1MSwgMTkyLCAxLCAyNDksIDY4LCAKKyAgICAyNTEsIDE5MiwgMSwgMjE3LCAxNTMsIDI1MSwgMTkyLCAxLCAyMzAsIDMwLCAyNTEsIDE5MiwgMSwgMTU2LCAyNTEsIDE5MiwgCisgICAgMSwgMjQzLCAyMDksIDI1MSwgMTkyLCAxLCAyMzUsIDI5LCAyNTEsIDE5MiwgMSwgMjQyLCA2NywgMjUxLCAxOTIsIDEsIAorICAgIDIzNSwgMTUwLCAyNTEsIDE5MiwgMSwgMjI0LCA5OSwgMjUxLCAxOTIsIDEsIDIxMSwgMTc4LCAyNTEsIDE5MiwgMSwgMjEwLCAKKyAgICA4MywgMjUxLCAxOTIsIDEsIDI1MCwgMTY2LCAyNTEsIDE5MiwgMSwgMjIwLCAxMDYsIDI1MSwgMTkyLCAxLCAxNTMsIDI1MSwgCisgICAgMTkyLCAxLCAyMTAsIDE1OSwgMjUxLCAxOTIsIDEsIDI1MSwgNzQsIDI1MSwgMTkyLCAxLCAyMjIsIDkzLCAyNTEsIDE5MiwgCisgICAgMSwgNjEsIDI1MSwgMTkyLCAxLCA3OCwgMjUxLCAxOTIsIDEsIDc2LCAyNTEsIDE5MiwgMSwgMjQ1LCAyMDUsIDI1MSwgMTkyLCAKKyAgICAxLCAyNTQsIDIxMCwgMjUxLCAxOTIsIDEsIDI0NSwgMjAzLCAyNTEsIDE5MiwgMSwgMjUzLCAyMDAsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjYsIDEzOCwgMjUxLCAxOTIsIDEsIDI1NCwgMTMxLCAyNTEsIDE5MiwgMSwgMjQ1LCAxNTgsIDI1MSwgMTkyLCAxLCAyNTQsIAorICAgIDEyMywgMjUxLCAxOTIsIDEsIDI0NSwgMTQ2LCAyNTEsIDE5MiwgMSwgMjQ1LCAxMDAsIDI1MSwgMTkyLCAxLCA3NCwgMjUxLCAKKyAgICAxOTIsIDEsIDY5LCAyNTEsIDE5MiwgMSwgMjM1LCAxNjIsIDI1MSwgMTkyLCAxLCAyMTQsIDEwNSwgMjUxLCAxOTIsIDEsIAorICAgIDIyOSwgODQsIDI1MSwgMTkyLCAxLCAyNDIsIDE4NSwgMjUxLCAxOTIsIDEsIDIzNiwgNDEsIDI0LCAxLCAyMzQsIDY0LCAyNCwgCisgICAgMSwgMjE4LCAyMTcsIDI0LCAxLCAyMzQsIDU3LCAyNCwgMSwgMjI4LCAyMzEsIDI0LCAxLCAyMjgsIDIyOSwgMjQsIDEsIAorICAgIDIyOCwgMjI4LCAyNCwgMSwgMjE2LCAxMDIsIDI0LCAxLCAyMTgsIDIwNiwgMjQsIDEsIDIyMywgMjksIDI0LCAxLCAyMjMsIAorICAgIDI0LCAyNCwgMSwgMjIzLCAyMSwgMjQsIDEsIDIyMywgMTQsIDI0LCAxLCAyMjMsIDksIDI0LCAxLCAyMjMsIDQsIDI0LCAxLCAKKyAgICAyMjMsIDE1LCAyNCwgMSwgMjIzLCAyNywgMjQsIDEsIDIzMCwgMjIyLCAyNCwgMSwgMjI1LCA5OCwgMjQsIDEsIDIxOCwgCisgICAgMjE0LCAyNCwgMSwgMjI1LCA4NywgMjQsIDEsIDIxOSwgMTUwLCAyNCwgMSwgMjE4LCAyMTEsIDI0LCAxLCAyMzYsIDYzLCAKKyAgICAyNCwgMSwgMjUwLCA1NCwgMjQsIDEsIDIxOCwgMjIxLCAyNCwgMSwgMjUwLCAxMTQsIDI0LCAxLCAyMzQsIDExNiwgMjQsIDEsIAorICAgIDIxNiwgMTc0LCAyNCwgMSwgMjI1LCAxMzQsIDI0LCAxLCAyNDEsIDE3OSwgMjQsIDEsIDYxLCAyNCwgMSwgMjU0LCAyNTIsIAorICAgIDI0LCAxLCAxOTIsIDI0LCAxLCAyMTEsIDkyLCAyNCwgMSwgMjQ1LCAxMjUsIDI0LCAxLCA3NiwgMjQsIDEsIDIxMSwgMzYsIAorICAgIDI0LCAxLCAyMTEsIDQ3LCAyNCwgMSwgNzgsIDI0LCAxLCAyMTIsIDY1LCAyNCwgMSwgMjEyLCA2MiwgMjQsIDEsIDIyNiwgCisgICAgMjM4LCAyNCwgMSwgMjEwLCAyNDQsIDI0LCAxLCA2OSwgMjQsIDEsIDIxMiwgMTEsIDI0LCAxLCAyMTIsIDIyLCAyNCwgMSwgCisgICAgMjExLCAyNTAsIDI0LCAxLCAyMTAsIDIxMiwgMjQsIDEsIDI0NSwgNjMsIDI0LCAxLCAyMTEsIDgsIDI0LCAxLCA3NCwgMjQsIAorICAgIDI0NCwgMTExLCAyNCwgMSwgMjE4LCAyMTUsIDI0LCAxLCAyMjgsIDIyMSwgMjQsIDEsIDIyOCwgMjIzLCAyNCwgMSwgMjI4LCAKKyAgICAyMjYsIDI0LCAxLCAyMjMsIDIyLCAyNCwgMSwgMjIzLCAzLCAyNCwgMSwgMjIzLCAxMSwgMjQsIDEsIDIyMywgMTYsIDI0LCAKKyAgICAxLCAyMjMsIDEsIDI0LCAxLCAyMzAsIDIxNSwgMjQsIDEsIDIzMCwgMjEyLCAyNCwgMSwgMjMwLCAyMTYsIDI0LCAxLCAyMzQsIAorICAgIDIyNywgMjQsIDEsIDIyNSwgOTMsIDI0LCAxLCAyMjUsIDc5LCAyNCwgMSwgMjI1LCA4NSwgMjQsIDEsIDIyNSwgODIsIDI0LCAKKyAgICAxLCAyMjUsIDk2LCAyNCwgMSwgMjI1LCA4MCwgMjQsIDEsIDIzNCwgMjI1LCAyNCwgMSwgMjM0LCAyMjMsIDI0LCAxLCAyMTksIAorICAgIDE0MywgMjQsIDEsIDIxOSwgMTQxLCAyNCwgMSwgMjE5LCAxMzMsIDI0LCAxLCAyMTksIDEzOCwgMjQsIDEsIDIxOSwgMTQ4LCAKKyAgICAyNCwgMSwgMjI2LCAzNiwgMjQsIDEsIDIxOCwgMjE4LCAyNCwgMSwgMjExLCAyNiwgMjQsIDEsIDIxMSwgMjIsIDI0LCAxLCAKKyAgICAyMTEsIDIzLCAyNCwgMSwgMjM0LCAyMjYsIDI0LCAxLCAyMTgsIDIxOSwgMjQsIDEsIDIxMSwgMzIsIDI0LCAxLCAyMTAsIAorICAgIDIzOCwgMjQsIDEsIDIxMCwgMjM3LCAyNCwgMSwgMjEwLCAyNDAsIDI0LCAxLCAyMTAsIDIwMywgMjQsIDEsIDIxMCwgMjA0LCAKKyAgICAyNCwgMSwgMjEwLCAyMDcsIDI0LCAxLCAyNTQsIDQyLCAyNCwgMSwgMjU0LCAzNiwgMTEwLCAyNTQsIDEwNywgMjMyLCAyMDksIAorICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyMjMsIDUzLCA3OSwgMTEwLCAyNTQsIDEwNywgMTIzLCA3OSwgMTEwLCAyNTQsIDEwNywgCisgICAgMTEzLCA3OSwgMTEwLCAyNTQsIDEwNywgMTM0LCA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxOSwgNzksIDExMCwgMjU0LCAKKyAgICAxMDcsIDIxNiwgMTUsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMzAsIDIyOSwgNzksIDExMCwgMjU0LCAxMDcsIDI1MSwgMTgzLCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxMDAsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMjEsIDE3OCwgNzksIDExMCwgMjU0LCAKKyAgICAxMDcsIDIxNiwgMTcwLCA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxMiwgNzksIDExMCwgMjU0LCAxMDcsIDI0MSwgMjMxLCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjQ1LCAyMzIsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMzEsIDE5MSwgNzksIDI1MSwgMTkyLCAKKyAgICAxLCAyNTEsIDEzMywgMjUxLCAxOTIsIDEsIDIxMCwgNDQsIDI1MSwgMTkyLCAxLCAyMzUsIDExNCwgMjUxLCAxOTIsIDEsIAorICAgIDI0MiwgMTIwLCAyNTEsIDE5MiwgMSwgMjQ1LCAyMTcsIDI1MSwgMTkyLCAxLCAyNDUsIDE0MywgMjUxLCAxOTIsIDEsIDIyNiwgCisgICAgMTg3LCAyNTEsIDE5MiwgMSwgMjI2LCAxOTEsIDI1MSwgMTkyLCAxLCAyMzUsIDE4NiwgMjUxLCAxOTIsIDEsIDI1NCwgMTA5LCAKKyAgICAyNTEsIDE5MiwgMSwgMjM1LCAyMzEsIDI1MSwgMTkyLCAxLCAyMTQsIDE2OCwgMjUxLCAxOTIsIDEsIDIzNiwgMjMsIDI1MSwgCisgICAgMTkyLCAxLCAyMjksIDYyLCAyNTEsIDE5MiwgMSwgMjU0LCAyMDQsIDI1MSwgMTkyLCAxLCAyNTMsIDE5NSwgMjUxLCAxOTIsIAorICAgIDEsIDI1NCwgMTQ0LCAyNTEsIDE5MiwgMSwgMjI2LCAyMDgsIDI1MSwgMTkyLCAxLCAyMjYsIDE5MywgMjUxLCAxOTIsIDEsIAorICAgIDIzNSwgMjI4LCAyNTEsIDE5MiwgNDAsIDEsIDIyNiwgMTA5LCAyNTEsIDE5MiwgNDAsIDEsIDIxNywgMTUzLCAyNTEsIDE5MiwgCisgICAgNDAsIDEsIDIzNSwgMjksIDI1MSwgMTkyLCA0MCwgMSwgMjQyLCA2NywgMjUxLCAxOTIsIDEsIDI0MywgMSwgMjUxLCAxOTIsIAorICAgIDEsIDIzMywgNSwgMjUxLCAxOTIsIDEsIDIwOSwgMjUwLCAxMCwgMjE4LCAxMDUsIDIxNywgMTUzLCAxMCwgMjE4LCAxMDUsIAorICAgIDIxMiwgNCwgMTAsIDIxOCwgMTA1LCAyMTEsIDE1OCwgMTAsIDIxOCwgMTA1LCAyNTEsIDg3LCAxMCwgMjE4LCAxMDUsIDIxNywgCisgICAgMjU1LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY1LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY5LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMjM4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY2LCAxMCwgMjE4LCAxMDUsIDIxNywgMTU2LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMTY4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY0LCAxMCwgMjE4LCAxMDUsIDI0MCwgMjM2LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMTY3LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTYzLCAxMCwgMjE4LCAxMDUsIDIzMCwgMzAsIDEwLCAyMTgsIDEwNSwgMjQyLCAKKyAgICA2NywgMTAsIDIxOCwgMTA1LCAyMjIsIDkzLCAxMCwgMjE4LCAxMDUsIDIyNiwgMTA5LCAxMCwgMjE4LCAxMDUsIDIxOSwgMjMsIAorICAgIDEwLCAyMTgsIDEwNSwgMjQ5LCA2OCwgMTAsIDIxOCwgMTA1LCAyNDAsIDE3MCwgMTAsIDIxOCwgMTA1LCAyNDEsIDE5NywgCisgICAgMTAsIDIxOCwgMTA1LCAyMTcsIDE2NSwgMTAsIDIxOCwgMTA1LCAyMTcsIDIzNCwgMTAsIDIxOCwgMTA1LCAyMTgsIDE3MCwgCisgICAgMTAsIDIxOCwgMTA1LCAyMjAsIDExMiwgMTAsIDIxOCwgMTA1LCAyMjUsIDIyOCwgMTAsIDIxOCwgMTA1LCAyMjQsIDEwMSwgCisgICAgMTAsIDIxOCwgMTA1LCAyMTYsIDQ0LCAxMCwgMjE4LCAxMDUsIDIxNywgMTU1LCAxMCwgMjE4LCAxMDUsIDIxNywgMjQ1LCAKKyAgICAxMCwgMjE4LCAxMDUsIDI0MCwgMTc3LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTYyLCAxMCwgMjE4LCAxMDUsIDIyNSwgMTUyLCAKKyAgICAxMCwgMjE4LCAxMDUsIDIyNCwgOTksIDU2LCAxLCA0LCAyMzMsIDIyMywgNTYsIDEsIDQsIDIxOSwgMTkzLCA1NiwgMSwgNCwgCisgICAgMjE4LCA4NCwgNTYsIDEsIDQsIDExMiwgNTYsIDEsIDQsIDIyNywgMjQyLCA1NiwgMSwgNCwgMTYyLCA1NiwgMSwgNCwgMjQxLCAKKyAgICAxODcsIDU2LCAxLCA0LCAyNDAsIDIyOSwgNTYsIDEsIDQsIDI0MSwgMjQ1LCA1NiwgMSwgNCwgMjQxLCA3NSwgNTYsIDEsIDQsIAorICAgIDIzMCwgMTA3LCA1NiwgMSwgNCwgMjA1LCA1NiwgMSwgNCwgMjIzLCAzOCwgNTYsIDEsIDQsIDIyMiwgMTQyLCA1NiwgMSwgNCwgCisgICAgMjIzLCAxMzEsIDU2LCAxLCA0LCAyMjIsIDIxMywgODgsIDI0LCAyMzQsIDY0LCA4OCwgMjQsIDIyOCwgMjMxLCA4OCwgMjQsIAorICAgIDIxNiwgMTAyLCA4OCwgMjQsIDIyMywgMjksIDg4LCAyNCwgMjMwLCAyMjIsIDg4LCAyNCwgMjI1LCA5OCwgODgsIDI0LCAKKyAgICAyMTksIDE1MCwgODgsIDI0LCAyMzYsIDYzLCA4OCwgMjQsIDI1MCwgNTQsIDg4LCAyNCwgMjUwLCAxMTQsIDg4LCAyNCwgCisgICAgMjM0LCAxMTYsIDg4LCAyNCwgMjE2LCAxNzQsIDg4LCAyNCwgMjI1LCAxMzQsIDg4LCAyNCwgMjQxLCAxNzksIDg4LCAyNCwgCisgICAgMjM0LCA2NSwgNjEsIDg4LCAyNCwgMjI4LCAyMzIsIDYxLCA4OCwgMjQsIDIxNiwgMTAzLCA2MSwgODgsIDI0LCAyMjMsIDMwLCAKKyAgICA2MSwgODgsIDI0LCAyMzAsIDIyMywgNjEsIDg4LCAyNCwgMjI1LCA5OSwgNjEsIDg4LCAyNCwgMjE5LCAxNTEsIDYxLCA4OCwgCisgICAgMjQsIDIzNiwgNjQsIDYxLCA4OCwgMjQsIDI1MCwgNTUsIDYxLCA4OCwgMjQsIDI1MCwgMTE1LCA2MSwgODgsIDI0LCAyMzQsIAorICAgIDExNywgNjEsIDg4LCAyNCwgMjE2LCAxNzUsIDYxLCA4OCwgMjQsIDIyNSwgMTM1LCA2MSwgODgsIDI0LCAyNDEsIDE4MCwgCisgICAgNjEsIDg4LCAyNCwgMjUwLCA1NSwgNjksIDg4LCAyMzQsIDksIDEzNSwgMjI2LCAyMjEsIDg4LCAyMzQsIDksIDEzNSwgMTQ0LCAKKyAgICAyNDAsIDIyOSwgODgsIDE1NCwgMTExLCA4OCwgMTU0LCAxMDUsIDg4LCAxNTQsIDE1OCwgODgsIDE1NCwgMTYxLCA4OCwgCisgICAgMTU0LCAxOTAsIDg4LCAxNTQsIDE5NSwgODgsIDE1NCwgMTk5LCA4OCwgMTU0LCAxOTYsIDg4LCAxNTQsIDIwMSwgODgsIAorICAgIDE1NCwgMjE2LCAyNDgsIDg4LCAxNTQsIDIzMCwgMTMzLCA4OCwgMTU0LCAyNDQsIDEwNCwgODgsIDE1NCwgMjEyLCA0MCwgCisgICAgODgsIDE1NCwgMjExLCAyMTQsIDg4LCAxNTQsIDIzMSwgNDQsIDg4LCAxNTQsIDI0NSwgMjMxLCA4OCwgMTU0LCAyMTgsIDM4LCAKKyAgICA4OCwgMTU0LCAyMTgsIDEzNCwgODgsIDE1NCwgMjQxLCAyNTEsIDg4LCAxNTQsIDIxOSwgNTYsIDg4LCAxNTQsIDIyOSwgCisgICAgMjA5LCA4OCwgMTU0LCAyMTksIDYsIDg4LCAxNTQsIDI0NCwgMTEwLCA4OCwgMTU0LCAyNDksIDIwOCwgODgsIDE1NCwgMjMzLCAKKyAgICAxMzEsIDg4LCAxNTQsIDIyMywgNzQsIDg4LCAxNTQsIDI1MSwgMjMsIDg4LCAxNTQsIDIxOCwgODgsIDg4LCAxNTQsIDIxOCwgCisgICAgMjEsIDg4LCAxNTQsIDI0NSwgMTM1LCA4OCwgMTU0LCAyMjMsIDY2LCA4OCwgMTU0LCAyNTQsIDE1OSwgODgsIDE1NCwgMjQ0LCAKKyAgICAxMzYsIDg4LCAxNTQsIDIyMywgNjQsIDg4LCAxNTQsIDIyMCwgMTU4LCA4OCwgMTU0LCAyMjMsIDEzMCwgMzcsIDE1NCwgCisgICAgMjI0LCAxNSwgMzcsIDE1NCwgMjM0LCA4NiwgMzcsIDE1NCwgMjIxLCAyMDAsIDM3LCAxNTQsIDIzNCwgNSwgMzcsIDU0LCAKKyAgICAyMTYsIDI0OSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMTUsIDc0LCAyMjYsIDIwMSwgODUsIDIxOCwgCisgICAgMjM2LCAzNywgNTQsIDIxNiwgMTY0LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDI0NCwgMjQsIDIyNiwgMjAxLCAKKyAgICA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjQ0LCAxMjMsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjE5LCAxMTQsIAorICAgIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjIwLCAxMTksIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgCisgICAgMjQ1LCAxOTMsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDIyNSwgMjU1LCA1MCwgMzcsIDU0LCAyMTUsIDc0LCAxMTEsIDM3LCAKKyAgICA1NCwgMjE1LCA3NCwgMTA1LCAzNywgNTQsIDIxNSwgNzQsIDE1OCwgMzcsIDU0LCAyMTUsIDc0LCAxNjEsIDM3LCA1NCwgCisgICAgMjE1LCA3NCwgMTkwLCAzNywgNTQsIDIxNSwgNzQsIDE5NSwgMzcsIDU0LCAyMTUsIDc0LCAxOTksIDM3LCA1NCwgMjE1LCAKKyAgICA3NCwgMTk2LCAzNywgNTQsIDIxNSwgNzQsIDIwMSwgMzcsIDU0LCAyMTYsIDE2MywgMzcsIDU0LCAyMTYsIDE2NCwgMTExLCAKKyAgICAzNywgNTQsIDIxNiwgMTY0LCAxMDUsIDM3LCA1NCwgMjE2LCAxNjQsIDE1OCwgMzcsIDU0LCAyMTYsIDE2NCwgMTYxLCAzNywgCisgICAgNTQsIDIxNiwgMTY0LCAxOTAsIDM3LCAyNCwgMjM0LCA2NCwgMzcsIDI0LCAyMjgsIDIzMSwgMzcsIDI0LCAyMTYsIDEwMiwgCisgICAgMzcsIDI0LCAyMjMsIDI5LCAzNywgMjQsIDIzMCwgMjIyLCAzNywgMjQsIDIyNSwgOTgsIDM3LCAyNCwgMjE5LCAxNTAsIDM3LCAKKyAgICAyNCwgMjM2LCA2MywgMzcsIDI0LCAyNTAsIDU0LCAzNywgMjQsIDI1MCwgMTE0LCAzNywgMjQsIDIzNCwgMTE2LCAzNywgMjQsIAorICAgIDIxNiwgMTc0LCAzNywgMjQsIDIyNSwgMTM0LCAzNywgMjQsIDI0MSwgMTc5LCAzNywgMjQsIDIzNCwgNjUsIDYxLCAzNywgCisgICAgMjQsIDIyOCwgMjMyLCA2MSwgMzcsIDI0LCAyMTYsIDEwMywgNjEsIDM3LCAyNCwgMjIzLCAzMCwgNjEsIDM3LCAyNCwgMjMwLCAKKyAgICAyMjMsIDYxLCAzNywgMjQsIDIyNSwgOTksIDYxLCAzNywgMjQsIDIxOSwgMTUxLCA2MSwgMzcsIDI0LCAyMzYsIDY0LCA2MSwgCisgICAgMzcsIDI0LCAyNTAsIDU1LCA2MSwgMzcsIDI0LCAyNTAsIDExNSwgNjEsIDM3LCAyNCwgMjM0LCAxMTcsIDYxLCAzNywgMjQsIAorICAgIDIxNiwgMTc1LCA2MSwgMzcsIDI0LCAyMjUsIDEzNSwgNjEsIDM3LCAyNCwgMjQxLCAxODAsIDYxLCAzNywgMjM0LCA5LCAKKyAgICAxMzUsIDI1MCwgMTU2LCAzNywgMjM0LCA5LCAxMzUsIDIzNSwgNTMsIDM3LCAyNCwgMjM2LCA2NCwgNjksIDIzNCwgOSwgCisgICAgMjE4LCAxNjEsIDg3LCAzNywgMTU0LCAxMTEsIDM3LCAxNTQsIDEwNSwgMzcsIDE1NCwgMTU4LCAzNywgMTU0LCAxNjEsIDM3LCAKKyAgICAxNTQsIDE5MCwgMzcsIDE1NCwgMTk1LCAzNywgMTU0LCAxOTksIDM3LCAxNTQsIDE5NiwgMzcsIDE1NCwgMjAxLCAzNywgCisgICAgMTU0LCAyMTYsIDI0OCwgMzcsIDE1NCwgMjMwLCAxMzMsIDM3LCAxNTQsIDI0NCwgMTA0LCAzNywgMTU0LCAyMTIsIDQwLCAKKyAgICAzNywgMTU0LCAyMTEsIDIxNCwgMzcsIDE1NCwgMjMxLCA0NCwgMzcsIDE1NCwgMjQ1LCAyMzEsIDM3LCAxNTQsIDIxOCwgMzgsIAorICAgIDM3LCAxNTQsIDIxOCwgMTM0LCAzNywgMTU0LCAyNDEsIDI1MSwgMzcsIDE1NCwgMjE5LCA1NiwgMzcsIDE1NCwgMjI5LCAKKyAgICAyMDksIDM3LCAxNTQsIDIxOSwgNiwgMzcsIDE1NCwgMjQ0LCAxMTAsIDM3LCAxNTQsIDI0OSwgMjA4LCAzNywgMTU0LCAyMzMsIAorICAgIDEzMSwgMzcsIDE1NCwgMjIxLCAxNzYsIDM3LCAxNTQsIDIzMSwgMTk0LCAzNywgMTU0LCAyNDQsIDE0NSwgMzcsIDE1NCwgCisgICAgMjE4LCA1MCwgMzcsIDE1NCwgMjQ1LCA0MiwgMzcsIDE1NCwgMjI0LCAxOTAsIDM3LCAxNTQsIDI1MywgMjA0LCAzNywgMTU0LCAKKyAgICAyMzUsIDE2NSwgMzcsIDE1NCwgMjIzLCA2NCwgMzcsIDE1NCwgMjQ5LCAxNzIsIDM3LCAxNTQsIDI0OSwgMTYzLCAzNywgCisgICAgMTU0LCAyNDEsIDE3MiwgMzcsIDE1NCwgMjUwLCAxODIsIDM3LCAxNTQsIDIzMiwgMTE2LCAzNywgMTU0LCAyMzMsIDUyLCAKKyAgICAzNywgMTU0LCAyMjIsIDI1NCwgMzcsIDE1NCwgMjMxLCA4OCwgMzcsIDE1NCwgMjIzLCA5MCwgMzcsIDE1NCwgMjE4LCA4OCwgCisgICAgMzcsIDE1NCwgMjE4LCAyMSwgMzcsIDE1NCwgMjQ1LCAxMzUsIDM3LCAxNTQsIDIyMywgNjYsIDM3LCAxNTQsIDI1NCwgMTU5LCAKKyAgICAzNywgMTU0LCAyMjgsIDIxNywgMzcsIDU0LCAyMTYsIDE2NCwgMTk1LCAzNywgNTQsIDIxNiwgMTY0LCAxOTksIDM3LCA1NCwgCisgICAgMjE2LCAxNjQsIDE5NiwgMzcsIDU0LCAyMTYsIDE2NCwgMjAxLCAzNywgNTQsIDI0NCwgMjMsIDM3LCA1NCwgMjQ0LCAyNCwgCisgICAgMTExLCAzNywgNTQsIDI0NCwgMjQsIDEwNSwgMzcsIDU0LCAyNDQsIDI0LCAxNTgsIDM3LCA1NCwgMjQ0LCAyNCwgMTYxLCAKKyAgICAzNywgNTQsIDI0NCwgMjQsIDE5MCwgMzcsIDU0LCAyNDQsIDI0LCAxOTUsIDM3LCA1NCwgMjQ0LCAyNCwgMTk5LCAzNywgNTQsIAorICAgIDI0NCwgMjQsIDE5NiwgMzcsIDU0LCAyNDQsIDI0LCAyMDEsIDM3LCA1NCwgMjQ0LCAxMjIsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDIzNSwgMTM5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDQsIDE1NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjMxLCAKKyAgICAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI1NCwgNTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzMSwgMTM3LCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyMzUsIDUxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzUsIDUyLCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyNTMsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjIwLCAxMzgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyNiwgCisgICAgMjQzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjgsIDQ1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDkzLCA0MiwgMjQxLCAKKyAgICAxOTcsIDQyLCAyNDUsIDk2LCA0MiwgMjQ1LCA1MSwgMjMyLCAyMjUsIDIzMiwgMjQ2LCA1MCwgMzcsIDU2LCA2MSwgMzcsIAorICAgIDU2LCA3NCwgMzcsIDU2LCA2OSwgMzcsIDU2LCA3NiwgMzcsIDU2LCA3OCwgMzcsIDU2LCAxNzYsIDM3LCA1NiwgMjM0LCA5OCwgCisgICAgMzcsIDU2LCAyMzMsIDIyMywgMzcsIDU2LCAyMzQsIDE4OCwgMzcsIDU2LCAyMzQsIDM0LCAzNywgNTYsIDIwNiwgMzcsIDU2LCAKKyAgICAyMTksIDE5MywgMzcsIDU2LCAyMTgsIDg0LCAzNywgNTYsIDIyMSwgMTgzLCAzNywgNTYsIDIxOSwgNjAsIDM3LCA1NiwgCisgICAgMjE3LCAxMDYsIDM3LCA1NiwgMjE2LCAxMTgsIDM3LCA1NiwgMjE1LCAxMTksIDM3LCA1NiwgMjE3LCAyMywgMzcsIDU2LCAKKyAgICAxMTIsIDM3LCA1NiwgMTk4LCAzNywgNTYsIDIyOCwgMjM4LCAzNywgNTYsIDIyNywgMjQyLCAzNywgNTYsIDIyOSwgMTEyLCAKKyAgICAzNywgNTYsIDIyOCwgNzksIDM3LCA1NiwgMTYyLCAzNywgNTYsIDI0MSwgMTg3LCAzNywgNTYsIDI0MCwgMjI5LCAzNywgNTYsIAorICAgIDI0MSwgMjQ1LCAzNywgNTYsIDI0MSwgNzUsIDM3LCA1NiwgMTg2LCAzNywgNTYsIDIzMCwgMjM1LCAzNywgNTYsIDIzMCwgCisgICAgMTA3LCAzNywgNTYsIDIzMSwgOTYsIDM3LCA1NiwgMjMwLCAxNjYsIDM3LCA1NiwgMTkyLCAzNywgNTYsIDIxMCwgMjEyLCAKKyAgICAzNywgNTYsIDIxMCwgMjQ0LCAzNywgNTYsIDIwNSwgMzcsIDU2LCAyMjMsIDM4LCAzNywgNTYsIDIyMiwgMTQyLCAzNywgNTYsIAorICAgIDIyMywgMTMxLCAzNywgNTYsIDIyMiwgMjEzLCAzNywgNTYsIDIxMiwgNjUsIDM3LCA1NiwgMjExLCAyNTAsIDM3LCA1NiwgCisgICAgMjEyLCAyMiwgMzcsIDU2LCAyMTEsIDIyNywgNDIsIDI1NCwgNzksIDQyLCAyNTMsIDI0NywgNDIsIDI1NCwgMTAzLCA0MiwgCisgICAgMjU1LCA0MCwgNDIsIDIzNSwgMjMzLCA0MiwgMjM1LCAyMDMsIDQyLCAyMTQsIDE2NiwgNDIsIDI0NSwgNzQsIDQyLCAyNDUsIAorICAgIDIxNCwgNDIsIDIyNiwgMTkwLCA0MiwgMjI2LCAxODQsIDQyLCAyMzQsIDI1MSwgNDIsIDIzNCwgMjIwLCA0MiwgMjM0LCAKKyAgICAyMTcsIDQyLCAyNDMsIDk5LCA0MiwgMjQzLCAxMDgsIDQyLCAyNDIsIDIxMSwgNDIsIDI0MiwgMjA3LCA0MiwgMjMzLCAxNTYsIAorICAgIDQyLCAyNDIsIDIwMCwgNDIsIDIzNCwgNzgsIDQyLCAyMzQsIDc3LCA0MiwgMjM0LCA3NiwgNDIsIDIzNCwgNzUsIDQyLCAKKyAgICAyNDIsIDkzLCA0MiwgMjQyLCA5MiwgNDIsIDIzMywgMTk5LCA0MiwgMjMzLCAyMDEsIDQyLCAyMzQsIDE4NCwgNDIsIDIzNCwgCisgICAgNywgNDIsIDIzNCwgMTQsIDQyLCAyMjIsIDE4LCA0MiwgMjIxLCAyMzksIDQyLCAyMTksIDEzMSwgNDIsIDIyMCwgMTQzLCAKKyAgICA0MiwgMjIwLCAxNDIsIDQyLCAyNDgsIDIyNiwgNDIsIDI0OCwgNDQsIDQyLCAyNDcsIDEyOSwgNDIsIDIxNiwgMzMsIDQyLCAKKyAgICAyMjksIDIwNSwgNDIsIDIyOCwgNDYsIDQyLCAyNDIsIDM5LCA0MiwgMjI2LCA4OCwgNDIsIDIyNiwgODcsIDQyLCAyNTIsIAorICAgIDE5NiwgNDIsIDIyNSwgMTA4LCA0MiwgMjI1LCA3MiwgNDIsIDIyNSwgNzMsIDQyLCAyNTEsIDI0MiwgNDIsIDI0MCwgMjI4LCAKKyAgICA0MiwgMjQwLCAyMjQsIDQyLCAyNTEsIDk5LCA0MiwgMjQwLCAyMTEsIDQyLCAyNDEsIDIyMiwgNDIsIDIyNSwgMTYyLCA0MiwgCisgICAgMjI1LCAxOTcsIDQyLCAyNDEsIDIwNSwgNDIsIDIyNSwgMTk0LCA0MiwgMjI1LCAyMTAsIDQyLCAyNTIsIDY5LCA0MiwgMjI1LCAKKyAgICA5LCA0MiwgMjUxLCAxODgsIDQyLCAyNDEsIDYzLCA0MiwgMjI0LCAyNTMsIDQyLCAyNDEsIDU1LCA0MiwgMjQxLCA1NywgNDIsIAorICAgIDIzMSwgMjA2LCA0MiwgMjMxLCAyMDIsIDQyLCAyMzEsIDIxMSwgNDIsIDIzMSwgMTU1LCA0MiwgMjMxLCAxODAsIDQyLCAKKyAgICAyMzAsIDIwMiwgNDIsIDIzMCwgMTgxLCA0MiwgMjMwLCAxODAsIDQyLCAyMzEsIDc5LCA0MiwgMjMxLCA3NiwgNDIsIDIzMSwgCisgICAgODAsIDQyLCAyMTEsIDEwMiwgNDIsIDIxMSwgMTAwLCA0MiwgMjEwLCAyMDEsIDQyLCAyMjIsIDIyOSwgNDIsIDIyMiwgMjMzLCAKKyAgICA0MiwgMjIyLCAxMTksIDQyLCAyMjIsIDExMywgNDIsIDIyMywgODgsIDQyLCAyMjMsIDg1LCA0MiwgMjEyLCAzOCwgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxMCwgODYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxMTEsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxMDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxNTgsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxNjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTAsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTksIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMDEsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTYsIDI0OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIAorICAgIDI0NSwgMTc1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA3NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCisgICAgMjQwLCAyNDYsIDIxNiwgMTY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjQ0LCAxMywgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQwLCAyNDYsIDI0NCwgMTI2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE5LCAxMjEsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMjAsIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDI0NSwgCisgICAgMTk4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjI4LCAyMDIsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgCisgICAgMjQ2LCAyMTUsIDczLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2NywgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjQwLCAyNDYsIDIxNSwgNjMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY0LCAxMTAsIDIxNywgCisgICAgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2OSwgNDIsIDI0MCwgMjM3LCA0MiwgMjQ4LCAyMjksIDQyLCAyNTMsIDIwMCwgCisgICAgNDIsIDEzMCwgNDIsIDIyNiwgMTI5LCA0MiwgMjI1LCAyMjksIDQyLCAyNDcsIDE1NSwgNDIsIDI0NywgMTU2LCAyMTgsIAorICAgIDIzNSwgNDIsIDI0NywgMTU2LCAyNDksIDExNiwgNDIsIDIzNSwgMTYyLCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDI0MSwgCisgICAgMjIzLCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDIxNywgMTc1LCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDIxNywgNzUsIDQyLCAKKyAgICAyNDUsIDk5LCAyMjksIDIxMCwgMjMxLCA3NSwgNDIsIDI0OSwgMTY1LCA0MiwgMjI2LCA5NCwgMjU0LCAxMzMsIDQyLCAxOTgsIAorICAgIDQyLCAyMzAsIDEwOCwgNjEsIDQyLCAxODYsIDQyLCAxNzYsIDQyLCAyMzQsIDE5MSwgNDIsIDIzMSwgMTM0LCA0MiwgMjQzLCAKKyAgICA4NywgNDIsIDI1MSwgMjYsIDQyLCAyMzQsIDE5MCwgNDIsIDIyNSwgMTUzLCA0MiwgMjI5LCA4NiwgNDIsIDIzMCwgMTA4LCAKKyAgICAyNDUsIDE0LCA0MiwgMjMwLCAxMDgsIDI0MywgMjA5LCA0MiwgMjMxLCAyMCwgNDIsIDIzNCwgMTQwLCA0MiwgMjQwLCAxNzAsIAorICAgIDQyLCAyMzQsIDEwMCwgNDIsIDIzMCwgMjM3LCA0MiwgMjQyLCAyMjMsIDQyLCAyMTYsIDEyMCwgNDIsIDIzMCwgMTA4LCAKKyAgICAxNTYsIDQyLCAyMzAsIDE3NCwgNDIsIDI0NywgMTY1LCA0MiwgMjM0LCA0NiwgNDIsIDI0NCwgNTMsIDQyLCAyMjgsIDExNywgCisgICAgNDIsIDIzMCwgMTA4LCAxOTQsIDQyLCAyMzAsIDE3MSwgNDIsIDI0OSwgMjQ3LCA0MiwgMjM0LCA0MCwgNDIsIDIzMCwgMTcyLCAKKyAgICAyMTgsIDIzNSwgNDIsIDI0OSwgMjQ4LCAyMTgsIDIzNSwgNDIsIDIzMiwgNTUsIDIxOCwgMjM1LCA0MiwgMjM0LCA0MSwgCisgICAgMjE4LCAyMzUsIDQyLCAyMzAsIDE3MiwgMjQ5LCAxMTYsIDQyLCAyNDksIDI0OCwgMjQ5LCAxMTYsIDQyLCAyMzIsIDU1LCAKKyAgICAyNDksIDExNiwgNDIsIDIzNCwgNDEsIDI0OSwgMTE2LCA0MiwgMjMyLCA1NSwgMTE1LCAyMjIsIDkzLCA0MiwgMjMyLCA1NSwgCisgICAgMTE1LCAyMjIsIDk0LCAyMTgsIDIzNSwgNDIsIDE5MSwgNDIsIDIzNCwgMSwgNDIsIDIzMCwgMTEwLCA0MiwgMjQyLCAxNTgsIAorICAgIDQyLCAyMjMsIDE3OSwgNDIsIDIyMywgMTgwLCAxMTUsIDIyMiwgOTMsIDQyLCAyMjMsIDE4MCwgMTE1LCAyMjIsIDk0LCAKKyAgICAyMTgsIDIzNSwgNDIsIDIyNCwgMTY1LCA0MiwgMjI4LCAxOCwgNDIsIDIzMCwgMTA4LCAyMjIsIDkzLCA0MiwgMjMwLCAxMDksIAorICAgIDQyLCAyMjQsIDExOSwgNDIsIDIyNywgMTgwLCA0MiwgMjMwLCAxMDgsIDIxNCwgMTA1LCA0MiwgMjMwLCA1NCwgNDIsIDIzMywgCisgICAgMTkxLCA0MiwgMjMwLCA1NSwgMjMxLCA3OSwgNDIsIDIyNCwgMTE4LCA0MiwgMjI3LCAxNzksIDQyLCAyMzAsIDEwOCwgMjEyLCAKKyAgICA5OCwgNDIsIDIzMCwgNDgsIDQyLCAyMzMsIDE4OSwgNDIsIDIzMCwgNDksIDIzMSwgNzksIDQyLCAyMzUsIDMwLCAyMjYsIAorICAgIDIyNCwgNDIsIDIzMiwgNTUsIDIyNiwgMjI0LCA0MiwgMjU0LCAxNDQsIDQyLCAyNTEsIDE2OCwgNDIsIDI1MCwgMjIyLCA0MiwgCisgICAgMjUwLCAxOTksIDQyLCAyNTEsIDc1LCAxMTUsIDIzNCwgMTQwLCA0MiwgMjQ5LCAyNDYsIDQyLCAyNDgsIDE1MCwgNDIsIAorICAgIDI0MiwgNzksIDQyLCAxNjIsIDQyLCAyNDAsIDIzOCwgNDIsIDIzNiwgNiwgNDIsIDIzNCwgNTMsIDQyLCAyMzQsIDQxLCAKKyAgICAyNTEsIDIsIDQyLCAyMzMsIDIyNSwgNDIsIDIzMiwgMTY1LCA0MiwgMjMyLCAxNjQsIDQyLCAyMzIsIDE1MywgNDIsIDIzMiwgCisgICAgNjgsIDQyLCAyMzEsIDEzNSwgMjE5LCA4MSwgNDIsIDIzMCwgMjAxLCA0MiwgMjMwLCAxNTcsIDQyLCAyMjUsIDE1MSwgNDIsIAorICAgIDIyNSwgMjIsIDQyLCAyMjQsIDIyMiwgNDIsIDIyNCwgMjIwLCA0MiwgMjE4LCAyMjksIDQyLCAyMTgsIDMsIDQyLCAyMTIsIAorICAgIDI0LCA0MiwgMjE0LCAxMDYsIDExNSwgMTk0LCA0MiwgMTE2LCAxMTUsIDE5NCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDExMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDEwNSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE1OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE2MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE5MCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE5NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE5OSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDIwMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMjQ4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKKyAgICAyNDgsIDE1NCwgMjQ1LCAxNzUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDc2LCAxMTAsIDIxNywgNCwgCisgICAgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyNDQsIDEzLCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjQ0LCAxMjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTksIAorICAgIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIyMCwgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMjQ1LCAxOTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMjgsIDIwMiwgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjQ4LCAxNTQsIDIxNSwgNzMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY3LCAxMTAsIDIxNywgCisgICAgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjQsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgCisgICAgMjE1LCA3MCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAorICAgIDI0OCwgMTU0LCAyMTUsIDY2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA3MiwgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2MywgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTYyLCA0MiwgMjQzLCAxMjUsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIAorICAgIDI0OSwgMTQ4LCAyNDEsIDIzMCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjIzLCAxMjUsIDI0NSwgMjMxLCAyNDEsIDE5OSwgCisgICAgMzEsIDI0NywgMjM5LCAyNTMsIDIxNSwgMjE2LCAxOTcsIDI1MiwgNjQsIDI0MSwgMTk5LCAzMSwgMjEwLCAyMjMsIDI0NCwgCisgICAgNDYsIDI0MSwgMTk5LCAzMSwgMjEyLCA1OSwgMjQxLCAxOTksIDMxLCAyNDksIDIxMSwgMjQxLCAxOTksIDMxLCAyMTYsIAorICAgIDE5NywgMjU0LCAxMSwgMjQxLCAxOTksIDMxLCAyNDEsIDY3LCAyMTYsIDM5LCAyNDEsIDE5OSwgMzEsIDQsIDIxNywgNjIsIAorICAgIDI0MSwgMTk5LCAzMSwgMjE1LCAyMzgsIDI0MSwgMTk5LCAzMSwgMjI1LCAyMjIsIDI0MSwgMTk5LCAzMSwgMjE4LCAxNjAsIAorICAgIDI0MSwgMTk5LCAzMSwgMjQ0LCAxNDcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIyNCwgMjQzLCAyNDEsIDE5OSwgMzEsIAorICAgIDIzMCwgMTYwLCAyNDEsIDE5OSwgMzEsIDI0NSwgMTM0LCAyNDEsIDE5OSwgMzEsIDI0NCwgNDcsIDI0MSwgMTk5LCAzMSwgCisgICAgMjExLCAyMDcsIDIyNiwgMjAxLCAyMTYsIDE5NywgMjQ4LCA5NCwgMjQxLCAxOTksIDMxLCAyNTQsIDU5LCAyNDEsIDE5OSwgCisgICAgMzEsIDI0OSwgMTkzLCAyNDEsIDE5OSwgMzEsIDI1MSwgMjM1LCAyMTYsIDEzOSwgMjQxLCAxOTksIDMxLCAyNDIsIDE1NiwgCisgICAgMjQxLCAxOTksIDMxLCAyMTgsIDI0NywgMjU0LCA3OCwgMjQxLCAxOTksIDMxLCAyMjMsIDU2LCAyNDEsIDE5OSwgMzEsIAorICAgIDIzNSwgMjI3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMTcsIDYyLCAyNDEsIDE5OSwgMzEsIDIzMCwgMTE2LCAyNDksIAorICAgIDE2NywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjI0LCAyMDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1NSwgMjcsIAorICAgIDIxMiwgNDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1MCwgMTYsIDI0NCwgMTA0LCAyNDEsIDE5OSwgMzEsIDIzNSwgCisgICAgMjQwLCAyNDEsIDE5OSwgMzEsIDI0NiwgNjUsIDI0MSwgMTk5LCAzMSwgMjIzLCA1OSwgMjQxLCAxOTksIDMxLCAyNDIsIAorICAgIDEzOSwgMjI0LCAyMjcsIDI0MSwgMTk5LCAzMSwgMjI0LCAxODAsIDI0MSwgMTk5LCAzMSwgMjQ4LCAxNjksIDY0LCAyMTYsIAorICAgIDE5NywgMjMyLCAyMzYsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI0NCwgMTgyLCAyNDEsIDE5OSwgMzEsIDIyNiwgMTY3LCAKKyAgICAyNDEsIDE5OSwgMzEsIDIyNiwgMjQ4LCAyNDEsIDE5OSwgMzEsIDI0OCwgNjcsIDI0MSwgMTk5LCAzMSwgMjQ4LCA4NywgCisgICAgMjQxLCAxOTksIDMxLCAyMzUsIDI1NCwgMjQxLCAxOTksIDMxLCAyNTEsIDE1NywgMjQxLCAxOTksIDMxLCAyNDksIDIyOSwgCisgICAgMjE2LCA0MywgMjMxLCA4MSwgMjQxLCAxOTksIDMxLCAyNDMsIDk0LCAyMTYsIDM5LCAyNDEsIDE5OSwgMzEsIDIyNCwgMTI4LCAKKyAgICAyMTQsIDE1NCwgMjQxLCAxOTksIDMxLCAyMjYsIDE2NiwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjEyLCAxMywgMjQxLCAKKyAgICAxOTksIDMxLCAyMjMsIDQ4LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNTAsIDIyOCwgMjQxLCAxOTksIDMxLCAyMTYsIAorICAgIDE5NywgMjU0LCA3LCAyMTYsIDEzNCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjM0LCAxODUsIDIxOCwgMTM2LCAyMzAsIAorICAgIDEyMCwgMjQxLCAxOTksIDMxLCAyNDgsIDQwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzEsIDE1NywgMjMxLCAyMDcsIAorICAgIDI0MSwgMTk5LCAzMSwgMjU1LCAyOCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjEyLCA1NCwgMjQxLCAxOTksIDMxLCAKKyAgICAyMTYsIDE5NywgMjQzLCA1NCwgMjExLCAyMzksIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzNSwgNTgsIDIzMywgMTEzLCAKKyAgICAyNDEsIDE5OSwgMzEsIDI0NywgMTkyLCAyNDEsIDE5OSwgMzEsIDIzMiwgMjI2LCAyNDEsIDE5OSwgMzEsIDIzNSwgMjMwLCAKKyAgICAyMTUsIDE4OCwgMjQxLCAxOTksIDMxLCA0LCAyMjQsIDIwMCwgMjQxLCAxOTksIDMxLCAyNTQsIDIyNiwgMjQ5LCAyMjAsIAorICAgIDI0MSwgMTk5LCAzMSwgMjUyLCA2NywgMjQ5LCAyMjAsIDgsIDMsIDIzNSwgMTY2LCA4LCAzLCAyMzUsIDE1OSwgOCwgMywgCisgICAgNzQsIDgsIDMsIDIzNSwgMTg5LCA4LCAzLCAyMzYsIDY1LCA4LCAzLCAyMzYsIDQ4LCA4LCAzLCAyMzYsIDY3LCA4LCAzLCAKKyAgICAyMzYsIDY2LCA4LCAzLCAyNTMsIDIxNCwgOCwgMywgMjUzLCAxNzcsIDgsIDMsIDYxLCA4LCAzLCAyNTQsIDgwLCA4LCAzLCAKKyAgICAyMTQsIDE2NCwgOCwgMywgMjE0LCAxNjcsIDgsIDMsIDIxNCwgMTY1LCA4LCAzLCAyMjYsIDE0NCwgOCwgMywgMjI2LCAxMTgsIAorICAgIDgsIDMsIDc4LCA4LCAzLCAyMjYsIDE3OSwgOCwgMywgMjQ1LCA0MywgOCwgMywgNzYsIDgsIDMsIDIxMSwgMTk1LCA4LCAzLCAKKyAgICAyNTEsIDIzNiwgOCwgMywgMjUxLCAyMzMsIDgsIDMsIDI1MiwgMTQsIDgsIDMsIDI1MSwgMjQ2LCA4LCAzLCAyNTIsIDMsIDgsIAorICAgIDMsIDI1MiwgMiwgOCwgMywgMjUyLCA1LCA4LCAzLCAyNTIsIDQsIDgsIDMsIDI1MiwgMTI5LCA4LCAzLCAyNTIsIDEyMSwgOCwgCisgICAgMywgMjUyLCAxOTksIDgsIDMsIDI1MiwgMTUwLCA4LCAzLCAyNTEsIDEwOSwgOCwgMywgMjUxLCAxMTMsIDgsIDMsIDI1MSwgCisgICAgMTEwLCA4LCAzLCAyNTEsIDE4NywgOCwgMywgMjUxLCAxNzEsIDgsIDMsIDI1MSwgMjEzLCA4LCAzLCAyNTEsIDE5MywgOCwgCisgICAgMywgMjUyLCAyOSwgOCwgMywgMjUyLCA4MywgOCwgMywgMjUyLCA0MSwgOCwgMywgMjUxLCA5NSwgOCwgMywgMjUxLCA5MiwgCisgICAgOCwgMywgMjUxLCAxMzMsIDgsIDMsIDI1MSwgMTA4LCA4LCAzLCAyNTEsIDEwMiwgOCwgMywgMjUxLCAxMDYsIDgsIDMsIAorICAgIDI1MSwgODAsIDgsIDMsIDI1MSwgNzgsIDgsIDMsIDI1MSwgODUsIDgsIDMsIDI1MSwgODMsIDgsIDMsIDI1MSwgODEsIDgsIAorICAgIDMsIDI1MSwgODIsIDgsIDMsIDIyNSwgNTIsIDgsIDMsIDIyNSwgNDgsIDgsIDMsIDIyNSwgMTExLCA4LCAzLCAyMjUsIDYyLCAKKyAgICA4LCAzLCAyMjUsIDc4LCA4LCAzLCAyMjUsIDEwNSwgOCwgMywgMjI1LCAxMDEsIDgsIDMsIDIyNSwgMjQ0LCA4LCAzLCAyMjUsIAorICAgIDIzNCwgOCwgMywgMTkxLCA4LCAzLCAyMjYsIDI1LCA4LCAzLCAyMjQsIDEzOCwgOCwgMywgMjI0LCAxNDAsIDgsIDMsIDIyNCwgCisgICAgMTM5LCA4LCAzLCAyMjQsIDIzNiwgOCwgMywgMjI0LCAyMjUsIDgsIDMsIDIyNSwgMTksIDgsIDMsIDIyNCwgMjQ4LCA4LCAzLCAKKyAgICAyMjQsIDEyNCwgOCwgMywgMjI0LCAxMjAsIDgsIDMsIDIyNCwgMTUzLCA4LCAzLCAyMjQsIDEzNywgOCwgMywgMjI0LCAxMjksIAorICAgIDgsIDMsIDIyNCwgMTM1LCA4LCAzLCAyMjQsIDEwMywgOCwgMywgMjI0LCAxMDIsIDgsIDMsIDIyNCwgMTA3LCA4LCAzLCAKKyAgICAyMjQsIDEwNiwgOCwgMywgMjI0LCAxMDQsIDgsIDMsIDIyNCwgMTA1LCA4LCAzLCAyNTIsIDEwNCwgOCwgMywgMjUyLCAxMDMsIAorICAgIDgsIDMsIDI1MiwgMTEwLCA4LCAzLCAyNTIsIDEwNSwgOCwgMywgMjUyLCAxMDcsIDgsIDMsIDI1MiwgMTA2LCA4LCAzLCAKKyAgICAyNTIsIDEwOSwgOCwgMywgMjUyLCAxMDgsIDgsIDMsIDI1MiwgMTE2LCA4LCAzLCAyNTIsIDExNSwgOCwgMywgMjUyLCAxMTksIAorICAgIDgsIDMsIDI1MiwgMTE3LCA4LCAzLCAyNTIsIDk1LCA4LCAzLCAyNTIsIDk3LCA4LCAzLCAyNTIsIDk2LCA4LCAzLCAyNTIsIAorICAgIDEwMCwgOCwgMywgMjUyLCA5OSwgOCwgMywgMjUyLCAxMDIsIDgsIDMsIDI1MiwgMTAxLCA4LCAzLCAyNTIsIDExMSwgOCwgMywgCisgICAgMjUyLCAxMTQsIDgsIDMsIDI1MiwgMTEyLCA4LCAzLCAyNTIsIDkxLCA4LCAzLCAyNTIsIDkwLCA4LCAzLCAyNTIsIDk4LCA4LCAKKyAgICAzLCAyNTIsIDk0LCA4LCAzLCAyNTIsIDkyLCA4LCAzLCAyNTIsIDkzLCA4LCAzLCAyNTIsIDg3LCA4LCAzLCAyNTIsIDg2LCAKKyAgICA4LCAzLCAyNTIsIDg5LCA4LCAzLCAyNTIsIDg4LCA4LCAzLCAyMjksIDE3NCwgOCwgMywgMjI5LCAxNzMsIDgsIDMsIDIyOSwgCisgICAgMTc5LCA4LCAzLCAyMjksIDE3NSwgOCwgMywgMjI5LCAxNzYsIDgsIDMsIDIyOSwgMTc4LCA4LCAzLCAyMjksIDE3NywgOCwgCisgICAgMywgMjI5LCAxODIsIDgsIDMsIDIyOSwgMTgxLCA4LCAzLCAyMjksIDE4NCwgOCwgMywgMjI5LCAxODMsIDgsIDMsIDIyOSwgCisgICAgMTcwLCA4LCAzLCAyMjksIDE2OSwgOCwgMywgMjI5LCAxNzIsIDgsIDMsIDIyOSwgMTcxLCA4LCAzLCAyMjksIDE2MywgOCwgCisgICAgMywgMjI5LCAxNjIsIDgsIDMsIDIyOSwgMTY3LCA4LCAzLCAyMjksIDE2NiwgOCwgMywgMjI5LCAxNjQsIDgsIDMsIDIyOSwgCisgICAgMTY1LCA4LCAzLCAyMjksIDE1NywgOCwgMywgMjI5LCAxNTYsIDgsIDMsIDIyOSwgMTYxLCA4LCAzLCAyMjksIDE2MCwgOCwgCisgICAgMywgMjI5LCAxNTgsIDgsIDMsIDIyOSwgMTU5LCA4LCAzLCAyNDEsIDExNywgOCwgMywgMjQxLCAxMTYsIDgsIDMsIDI0MSwgCisgICAgMTIyLCA4LCAzLCAyNDEsIDExOCwgOCwgMywgMjQxLCAxMTksIDgsIDMsIDI0MSwgMTIxLCA4LCAzLCAyNDEsIDEyMCwgOCwgCisgICAgMywgMjQxLCAxMjUsIDgsIDMsIDI0MSwgMTI0LCA4LCAzLCAyNDEsIDEyNywgOCwgMywgMjQxLCAxMjYsIDgsIDMsIDI0MSwgCisgICAgMTA4LCA4LCAzLCAyNDEsIDExMCwgOCwgMywgMjQxLCAxMDksIDgsIDMsIDI0MSwgMTEzLCA4LCAzLCAyNDEsIDExMiwgOCwgCisgICAgMywgMjQxLCAxMTUsIDgsIDMsIDI0MSwgMTE0LCA4LCAzLCAyNDEsIDEwNCwgOCwgMywgMjQxLCAxMDMsIDgsIDMsIDI0MSwgCisgICAgMTExLCA4LCAzLCAyNDEsIDEwNywgOCwgMywgMjQxLCAxMDUsIDgsIDMsIDI0MSwgMTA2LCA4LCAzLCAyNDEsIDk4LCA4LCAzLCAKKyAgICAyNDEsIDEwMiwgOCwgMywgMjQxLCAxMDEsIDgsIDMsIDI0MSwgOTksIDgsIDMsIDI0MSwgMTAwLCA4LCAzLCAyMzAsIDE3NywgCisgICAgOCwgMywgMjMwLCAxNzYsIDgsIDMsIDIzMCwgMjM1LCA4LCAzLCAyMzAsIDE4MywgOCwgMywgMjMwLCAyMDgsIDgsIDMsIAorICAgIDIzMCwgMjI2LCA4LCAzLCAyMzAsIDIyNCwgOCwgMywgMjMxLCAxNDQsIDgsIDMsIDIzMSwgMTM5LCA4LCAzLCAxODYsIDgsIAorICAgIDMsIDIzMSwgMTc3LCA4LCAzLCAyMzAsIDc5LCA4LCAzLCAyMzAsIDc4LCA4LCAzLCAyMzAsIDgyLCA4LCAzLCAyMzAsIDgwLCAKKyAgICA4LCAzLCAyMzAsIDEyNiwgOCwgMywgMjMwLCAxMTIsIDgsIDMsIDIzMCwgMTY2LCA4LCAzLCAyMzAsIDEzMSwgOCwgMywgCisgICAgMjMxLCAzMSwgOCwgMywgMjMxLCA5NiwgOCwgMywgMjMwLCA2MCwgOCwgMywgMjMwLCA1NiwgOCwgMywgMjMwLCAxMDcsIDgsIAorICAgIDMsIDIzMCwgNzUsIDgsIDMsIDIzMCwgNjgsIDgsIDMsIDIzMCwgNzMsIDgsIDMsIDIzMCwgMzMsIDgsIDMsIDIzMCwgMzIsIAorICAgIDgsIDMsIDIzMCwgMzgsIDgsIDMsIDIzMCwgMzUsIDgsIDMsIDI0NCwgOTEsIDgsIDMsIDI0NCwgODYsIDgsIDMsIDI0NCwgCisgICAgMTI5LCA4LCAzLCAyNDQsIDEwNiwgOCwgMywgMjQ0LCAxNzUsIDgsIDMsIDI0NCwgMTY2LCA4LCAzLCAyNDQsIDIwNCwgOCwgCisgICAgMywgMjQ0LCAxNzgsIDgsIDMsIDI0NCwgMTEsIDgsIDMsIDI0NCwgNTEsIDgsIDMsIDI0NCwgMzUsIDgsIDMsIDI0MywgMjI1LCAKKyAgICA4LCAzLCAyNDMsIDIyNCwgOCwgMywgMjQzLCAyNDEsIDgsIDMsIDI0MywgMjMwLCA4LCAzLCAyNDMsIDIyOCwgOCwgMywgCisgICAgMjQzLCAyMjksIDgsIDMsIDI0MywgMjEyLCA4LCAzLCAyNDMsIDIxMSwgOCwgMywgMjQzLCAyMTUsIDgsIDMsIDI0MywgMjEzLCAKKyAgICA4LCAzLCAyMTMsIDE0NCwgOCwgMywgMjEzLCAxMzksIDgsIDMsIDIxMywgMTc2LCA4LCAzLCAyMTMsIDE1MywgOCwgMywgCisgICAgMjEzLCAxNjYsIDgsIDMsIDIxMywgMTYzLCA4LCAzLCAyMTMsIDE2OCwgOCwgMywgMjEzLCAxNjcsIDgsIDMsIDIxNCwgNywgCisgICAgOCwgMywgMjE0LCAyLCA4LCAzLCAyMTQsIDI3LCA4LCAzLCAyMTQsIDE4LCA4LCAzLCAyMTMsIDEyNSwgOCwgMywgMjEzLCAKKyAgICAxMjEsIDgsIDMsIDIxMywgMTM4LCA4LCAzLCAyMTMsIDEyNiwgOCwgMywgMjEzLCAxNzgsIDgsIDMsIDIxMywgMjQ0LCA4LCAKKyAgICAzLCAyMTIsIDExMCwgOCwgMywgMjEyLCAxMDgsIDgsIDMsIDIxMiwgMTE2LCA4LCAzLCAyMTIsIDExMywgOCwgMywgMjEyLCAKKyAgICAxMTEsIDgsIDMsIDIxMiwgMTEyLCA4LCAzLCAyMTIsIDEwMiwgOCwgMywgMjEyLCAxMDEsIDgsIDMsIDIxMiwgMTA2LCA4LCAKKyAgICAzLCAyMTIsIDEwNSwgOCwgMywgMjEyLCAxMDMsIDgsIDMsIDIxMiwgMTA0LCA4LCAzLCAyNDcsIDE4NiwgOCwgMywgMjQ3LCAKKyAgICAxNzQsIDgsIDMsIDI0OCwgMTEsIDgsIDMsIDI0NywgMjExLCA4LCAzLCAyNDcsIDI0NCwgOCwgMywgMjQ3LCAyNDgsIDgsIDMsIAorICAgIDI0NywgMjQ3LCA4LCAzLCAyNDgsIDE2MCwgOCwgMywgMjQ4LCAxNTUsIDgsIDMsIDI0OCwgMjI5LCA4LCAzLCAyNDgsIDE4MCwgCisgICAgOCwgMywgMjQ2LCA3MCwgOCwgMywgMjQ2LCA3MSwgOCwgMywgMjQ3LCAxMjgsIDgsIDMsIDI0NiwgMTEwLCA4LCAzLCAyNDcsIAorICAgIDE1MywgOCwgMywgMjQ3LCAxMzAsIDgsIDMsIDI0OCwgMzgsIDgsIDMsIDI0OCwgOTgsIDgsIDMsIDI0OCwgNTMsIDgsIDMsIAorICAgIDI0NiwgNjEsIDgsIDMsIDI0NiwgNTksIDgsIDMsIDI0NiwgODYsIDgsIDMsIDI0NiwgNjksIDgsIDMsIDI0NiwgNjQsIDgsIAorICAgIDMsIDI0NiwgNjcsIDgsIDMsIDIxNiwgNjgsIDgsIDMsIDIxNiwgNjIsIDgsIDMsIDIxNiwgMTE4LCA4LCAzLCAyMTYsIDc3LCAKKyAgICA4LCAzLCAyMTYsIDExMCwgOCwgMywgMjE2LCAxMTIsIDgsIDMsIDIxNiwgMTExLCA4LCAzLCAyMTcsIDQ3LCA4LCAzLCAyMTcsIAorICAgIDM0LCA4LCAzLCAyMTcsIDEwNiwgOCwgMywgMjE3LCA1NSwgOCwgMywgMjE1LCAxMDMsIDgsIDMsIDIxNSwgMTAyLCA4LCAzLCAKKyAgICAyMTUsIDEwNSwgOCwgMywgMjE1LCAxMDQsIDgsIDMsIDIxNiwgNiwgOCwgMywgMjE2LCAyLCA4LCAzLCAxMTIsIDgsIDMsIAorICAgIDIxNiwgMTQsIDgsIDMsIDIxNiwgMjE0LCA4LCAzLCAyMTcsIDIzLCA4LCAzLCAyMTYsIDIzOCwgOCwgMywgMjE1LCA4OCwgOCwgCisgICAgMywgMjE1LCA4MywgOCwgMywgMjE1LCAxMTksIDgsIDMsIDIxNSwgMTAxLCA4LCAzLCAyMTUsIDg5LCA4LCAzLCAyMTUsIDk5LCAKKyAgICA4LCAzLCAyNDgsIDExNSwgOCwgMywgMjQ4LCAxMTQsIDgsIDMsIDI0OCwgMTIwLCA4LCAzLCAyNDgsIDExNiwgOCwgMywgCisgICAgMjQ4LCAxMTcsIDgsIDMsIDI0OCwgMTE5LCA4LCAzLCAyNDgsIDExOCwgOCwgMywgMjQ4LCAxMzYsIDgsIDMsIDI0OCwgMTM1LCAKKyAgICA4LCAzLCAyNDgsIDE0MywgOCwgMywgMjQ4LCAxMzcsIDgsIDMsIDI0OCwgMTA1LCA4LCAzLCAyNDgsIDEwNywgOCwgMywgCisgICAgMjQ4LCAxMDYsIDgsIDMsIDI0OCwgMTEwLCA4LCAzLCAyNDgsIDEwOSwgOCwgMywgMjQ4LCAxMTMsIDgsIDMsIDI0OCwgMTExLCAKKyAgICA4LCAzLCAyNDgsIDEyOCwgOCwgMywgMjQ4LCAxMzEsIDgsIDMsIDI0OCwgMTI5LCA4LCAzLCAyNDgsIDEwMSwgOCwgMywgCisgICAgMjQ4LCAxMDAsIDgsIDMsIDI0OCwgMTA4LCA4LCAzLCAyNDgsIDEwNCwgOCwgMywgMjQ4LCAxMDIsIDgsIDMsIDI0OCwgMTAzLCAKKyAgICA4LCAzLCAyMjksIDEzMSwgOCwgMywgMjI5LCAxMzAsIDgsIDMsIDIyOSwgMTM4LCA4LCAzLCAyMjksIDEzMywgOCwgMywgCisgICAgMjI5LCAxMzQsIDgsIDMsIDIyOSwgMTM1LCA4LCAzLCAyMjksIDE0NywgOCwgMywgMjI5LCAxNDYsIDgsIDMsIDIyOSwgMTUzLCAKKyAgICA4LCAzLCAyMjksIDE0OCwgOCwgMywgMjI5LCAxMjMsIDgsIDMsIDIyOSwgMTIyLCA4LCAzLCAyMjksIDEyOSwgOCwgMywgCisgICAgMjI5LCAxMjQsIDgsIDMsIDIyOSwgMTM5LCA4LCAzLCAyMjksIDE0NSwgOCwgMywgMjI5LCAxNDMsIDgsIDMsIDIyOSwgMTE1LCAKKyAgICA4LCAzLCAyMjksIDExNCwgOCwgMywgMjI5LCAxMjAsIDgsIDMsIDIyOSwgMTE4LCA4LCAzLCAyMjksIDExNiwgOCwgMywgCisgICAgMjI5LCAxMTcsIDgsIDMsIDI0MSwgODQsIDgsIDMsIDI0MSwgODMsIDgsIDMsIDI0MSwgOTAsIDgsIDMsIDI0MSwgODUsIDgsIAorICAgIDMsIDI0MSwgODcsIDgsIDMsIDI0MSwgODYsIDgsIDMsIDI0MSwgODksIDgsIDMsIDI0MSwgODgsIDgsIDMsIDI0MSwgOTUsIAorICAgIDgsIDMsIDI0MSwgOTQsIDgsIDMsIDI0MSwgOTcsIDgsIDMsIDI0MSwgOTYsIDgsIDMsIDI0MSwgNzgsIDgsIDMsIDI0MSwgCisgICAgNzksIDgsIDMsIDI0MSwgODEsIDgsIDMsIDI0MSwgODAsIDgsIDMsIDI0MSwgODIsIDgsIDMsIDI0MSwgOTEsIDgsIDMsIAorICAgIDI0MSwgOTMsIDgsIDMsIDI0MSwgOTIsIDgsIDMsIDI0MSwgNzcsIDgsIDMsIDIyOCwgMTk0LCA4LCAzLCAyMjgsIDE5MiwgOCwgCisgICAgMywgMjI4LCAyMzgsIDgsIDMsIDIyOCwgMTk3LCA4LCAzLCAyMjgsIDIyMCwgOCwgMywgMjI4LCAyMzQsIDgsIDMsIDIyOCwgCisgICAgMjMzLCA4LCAzLCAyMjksIDE4OCwgOCwgMywgMTk4LCA4LCAzLCAyMjksIDIwMiwgOCwgMywgMjI3LCAxOTAsIDgsIDMsIAorICAgIDIyNywgMTkyLCA4LCAzLCAyMjcsIDE5MSwgOCwgMywgMjI4LCA1NiwgOCwgMywgMjI4LCA0MywgOCwgMywgMjI4LCA3OSwgOCwgCisgICAgMywgMjI4LCA2NSwgOCwgMywgMjI5LCA4OCwgOCwgMywgMjI5LCAxMTIsIDgsIDMsIDIyOSwgOTksIDgsIDMsIDIyNywgMTg1LCAKKyAgICA4LCAzLCAyMjcsIDE4MSwgOCwgMywgMjI3LCAyNDIsIDgsIDMsIDIyNywgMTg5LCA4LCAzLCAyMjcsIDE4NywgOCwgMywgCisgICAgMjI3LCAxODgsIDgsIDMsIDI0MSwgMTQ4LCA4LCAzLCAyNDEsIDE0NywgOCwgMywgMjQxLCAxNTMsIDgsIDMsIDI0MSwgMTQ5LCAKKyAgICA4LCAzLCAyNDEsIDE1MCwgOCwgMywgMjQxLCAxNTIsIDgsIDMsIDI0MSwgMTUxLCA4LCAzLCAyNDEsIDE1OCwgOCwgMywgCisgICAgMjQxLCAxNTcsIDgsIDMsIDI0MSwgMTYwLCA4LCAzLCAyNDEsIDE1OSwgOCwgMywgMjQxLCAxNDAsIDgsIDMsIDI0MSwgMTQyLCAKKyAgICA4LCAzLCAyNDEsIDE0MSwgOCwgMywgMjQxLCAxNDQsIDgsIDMsIDI0MSwgMTQ2LCA4LCAzLCAyNDEsIDE0NSwgOCwgMywgCisgICAgMjQxLCAxNTQsIDgsIDMsIDI0MSwgMTU2LCA4LCAzLCAyNDEsIDE1NSwgOCwgMywgMjQxLCAxMzYsIDgsIDMsIDI0MSwgMTM1LCAKKyAgICA4LCAzLCAyNDEsIDE0MywgOCwgMywgMjQxLCAxMzksIDgsIDMsIDI0MSwgMTM3LCA4LCAzLCAyNDEsIDEzOCwgOCwgMywgCisgICAgMjQxLCAxMzAsIDgsIDMsIDI0MSwgMTI5LCA4LCAzLCAyNDEsIDEzNCwgOCwgMywgMjQxLCAxMzMsIDgsIDMsIDI0MSwgMTMxLCAKKyAgICA4LCAzLCAyNDEsIDEzMiwgOCwgMywgMjMyLCAyMDEsIDgsIDMsIDIzMiwgMTk1LCA4LCAzLCAyMzIsIDI0NywgOCwgMywgCisgICAgMjMyLCAyMDgsIDgsIDMsIDIzMiwgMjM5LCA4LCAzLCAyMzIsIDIzOCwgOCwgMywgMjMyLCAyNDIsIDgsIDMsIDIzMiwgMjQwLCAKKyAgICA4LCAzLCAyMzMsIDg1LCA4LCAzLCAyMzMsIDc1LCA4LCAzLCAyMzMsIDE0MSwgOCwgMywgMjMzLCA5NCwgOCwgMywgMjMyLCAKKyAgICA4NCwgOCwgMywgMjMyLCA4MywgOCwgMywgMjMyLCA4NiwgOCwgMywgMjMyLCA4NSwgOCwgMywgMjMyLCAxMjIsIDgsIDMsIAorICAgIDIzMiwgMTEyLCA4LCAzLCAyMzIsIDE2MiwgOCwgMywgMjMyLCAxMjYsIDgsIDMsIDIzMywgOCwgOCwgMywgMjMzLCA2NCwgOCwgCisgICAgMywgMjMzLCAyMywgOCwgMywgMjMyLCA3OSwgOCwgMywgMjMyLCA3NywgOCwgMywgMjMyLCAxMDMsIDgsIDMsIDIzMiwgODIsIAorICAgIDgsIDMsIDIzMiwgODAsIDgsIDMsIDIzMiwgODEsIDgsIDMsIDIzMiwgNTksIDgsIDMsIDIzMiwgNTgsIDgsIDMsIDIzMiwgCisgICAgNjcsIDgsIDMsIDIzMiwgNjIsIDgsIDMsIDIzMiwgNjAsIDgsIDMsIDIzMiwgNjEsIDgsIDMsIDI0MiwgMTk2LCA4LCAzLCAKKyAgICAyNDIsIDE5NSwgOCwgMywgMjQyLCAyMjEsIDgsIDMsIDI0MiwgMjA2LCA4LCAzLCAyNDIsIDIxMywgOCwgMywgMjQyLCAyMTIsIAorICAgIDgsIDMsIDI0MiwgMjE1LCA4LCAzLCAyNDIsIDIxNCwgOCwgMywgMjQzLCA5NiwgOCwgMywgMjQzLCA5MSwgOCwgMywgMjQzLCAKKyAgICAxNDIsIDgsIDMsIDI0MywgMTA2LCA4LCAzLCAyNDIsIDk4LCA4LCAzLCAyNDIsIDk3LCA4LCAzLCAyNDIsIDEwMCwgOCwgMywgCisgICAgMjQyLCA5OSwgOCwgMywgMjQyLCAxNjEsIDgsIDMsIDI0MiwgMTU5LCA4LCAzLCAyNDIsIDE4MSwgOCwgMywgMjQyLCAxNjksIAorICAgIDgsIDMsIDI0MywgNDAsIDgsIDMsIDI0MywgMzgsIDgsIDMsIDI0MywgNjksIDgsIDMsIDI0MywgNTEsIDgsIDMsIDI0MiwgCisgICAgODgsIDgsIDMsIDI0MiwgODcsIDgsIDMsIDI0MiwgMTIwLCA4LCAzLCAyNDIsIDk2LCA4LCAzLCAyNDIsIDg5LCA4LCAzLCAKKyAgICAyNDIsIDk1LCA4LCAzLCAyMzQsIDY3LCA4LCAzLCAyMzQsIDY2LCA4LCAzLCAyMzQsIDk4LCA4LCAzLCAyMzQsIDgxLCA4LCAKKyAgICAzLCAyMzQsIDkxLCA4LCAzLCAyMzQsIDk0LCA4LCAzLCAyMzQsIDkyLCA4LCAzLCAyMzQsIDIwOCwgOCwgMywgMjM0LCAxOTYsIAorICAgIDgsIDMsIDE3NiwgOCwgMywgMjM0LCAyMzQsIDgsIDMsIDIzMywgMjA2LCA4LCAzLCAyMzMsIDIxMSwgOCwgMywgMjMzLCAKKyAgICAyMDgsIDgsIDMsIDIzNCwgNiwgOCwgMywgMjM0LCAyLCA4LCAzLCAyMzQsIDM0LCA4LCAzLCAyMzQsIDEzLCA4LCAzLCAyMzQsIAorICAgIDE2MiwgOCwgMywgMjM0LCAxNDYsIDgsIDMsIDIzNCwgMTg4LCA4LCAzLCAyMzQsIDE2NSwgOCwgMywgMjMzLCAxOTUsIDgsIAorICAgIDMsIDIzMywgMTkyLCA4LCAzLCAyMzMsIDIyMywgOCwgMywgMjMzLCAyMDUsIDgsIDMsIDIzMywgMTk4LCA4LCAzLCAyMzMsIAorICAgIDIwMiwgOCwgMywgMjQzLCAyMiwgOCwgMywgMjQzLCAyMSwgOCwgMywgMjQzLCAyNiwgOCwgMywgMjQzLCAyMywgOCwgMywgCisgICAgMjQzLCAyNSwgOCwgMywgMjQzLCAyNCwgOCwgMywgMjQzLCAzMywgOCwgMywgMjQzLCAzMiwgOCwgMywgMjQzLCAzNiwgOCwgCisgICAgMywgMjQzLCAzNCwgOCwgMywgMjQzLCAxMywgOCwgMywgMjQzLCAxMiwgOCwgMywgMjQzLCAxNSwgOCwgMywgMjQzLCAxNCwgCisgICAgOCwgMywgMjQzLCAxOCwgOCwgMywgMjQzLCAxNywgOCwgMywgMjQzLCAyMCwgOCwgMywgMjQzLCAxOSwgOCwgMywgMjQzLCAKKyAgICAyOCwgOCwgMywgMjQzLCAyNywgOCwgMywgMjQzLCAzMSwgOCwgMywgMjQzLCAyOSwgOCwgMywgMjQzLCA4LCA4LCAzLCAyNDMsIAorICAgIDcsIDgsIDMsIDI0MywgMTYsIDgsIDMsIDI0MywgMTEsIDgsIDMsIDI0MywgOSwgOCwgMywgMjQzLCAxMCwgOCwgMywgMjMwLCAKKyAgICAyNTQsIDgsIDMsIDIzMCwgMjU1LCA4LCAzLCAyMzEsIDE3LCA4LCAzLCAyMzEsIDE2LCA4LCAzLCAyMzEsIDE5LCA4LCAzLCAKKyAgICAyMzEsIDE4LCA4LCAzLCAyMzAsIDI0NSwgOCwgMywgMjMwLCAyNDcsIDgsIDMsIDIzMCwgMjQ2LCA4LCAzLCAyMzAsIDI1MCwgCisgICAgOCwgMywgMjMwLCAyNDksIDgsIDMsIDIzMCwgMjUyLCA4LCAzLCAyMzAsIDI1MSwgOCwgMywgMjMxLCAwLCA4LCAzLCAyMzEsIAorICAgIDIsIDgsIDMsIDIzMSwgMSwgOCwgMywgMjMwLCAyNDEsIDgsIDMsIDIzMCwgMjQwLCA4LCAzLCAyMzAsIDI0OCwgOCwgMywgCisgICAgMjMwLCAyNDQsIDgsIDMsIDIzMCwgMjQyLCA4LCAzLCAyMzAsIDI0MywgOCwgMywgMjQwLCAxODcsIDgsIDMsIDI0MCwgMTg2LCAKKyAgICA4LCAzLCAyNDAsIDE5MywgOCwgMywgMjQwLCAxODgsIDgsIDMsIDI0MCwgMTkwLCA4LCAzLCAyNDAsIDE4OSwgOCwgMywgCisgICAgMjQwLCAxOTIsIDgsIDMsIDI0MCwgMTkxLCA4LCAzLCAyNDAsIDE5OCwgOCwgMywgMjQwLCAxOTcsIDgsIDMsIDI0MCwgMjAwLCAKKyAgICA4LCAzLCAyNDAsIDE5OSwgOCwgMywgMjQwLCAxNzksIDgsIDMsIDI0MCwgMTc4LCA4LCAzLCAyNDAsIDE4MSwgOCwgMywgCisgICAgMjQwLCAxODAsIDgsIDMsIDI0MCwgMTgzLCA4LCAzLCAyNDAsIDE4MiwgOCwgMywgMjQwLCAxODUsIDgsIDMsIDI0MCwgMTg0LCAKKyAgICA4LCAzLCAyNDAsIDE5NCwgOCwgMywgMjQwLCAxOTYsIDgsIDMsIDI0MCwgMTk1LCA4LCAzLCAyMjksIDI5LCA4LCAzLCAyMjksIAorICAgIDMxLCA4LCAzLCAyMjksIDMwLCA4LCAzLCAyMjksIDcyLCA4LCAzLCAyMjksIDcwLCA4LCAzLCAyMjksIDgyLCA4LCAzLCAKKyAgICAyMjksIDc1LCA4LCAzLCAyMjgsIDI0OCwgOCwgMywgMjI4LCAyNDcsIDgsIDMsIDIyOCwgMjQ5LCA4LCAzLCAyMjksIDEsIDgsIAorICAgIDMsIDIyOCwgMjU0LCA4LCAzLCAyMjksIDksIDgsIDMsIDIyOSwgMywgOCwgMywgMjI5LCA2MywgOCwgMywgMjI5LCA2OSwgOCwgCisgICAgMywgMjI5LCA2NSwgOCwgMywgMjQxLCAxNjMsIDgsIDMsIDI0MSwgMTczLCA4LCAzLCAyNDEsIDE4MiwgOCwgMywgMjQyLCAyLCAKKyAgICA4LCAzLCAyNDEsIDI1MCwgOCwgMywgMTYyLCA4LCAzLCAyNDIsIDEzLCA4LCAzLCAyNDAsIDIxMywgOCwgMywgMjQwLCAyMTIsIAorICAgIDgsIDMsIDI0MCwgMjE1LCA4LCAzLCAyNDAsIDIxNCwgOCwgMywgMjQwLCAyNDksIDgsIDMsIDI0MCwgMjQwLCA4LCAzLCAKKyAgICAyNDEsIDc1LCA4LCAzLCAyNDEsIDU0LCA4LCAzLCAyNDEsIDIwMSwgOCwgMywgMjQxLCAyNDUsIDgsIDMsIDI0MSwgMjEzLCAKKyAgICA4LCAzLCAyMTIsIDQzLCA4LCAzLCAyMTIsIDI4LCA4LCAzLCAyMTIsIDY1LCA4LCAzLCAyMTIsIDUxLCA4LCAzLCAyMTEsIAorICAgIDE4NSwgOCwgMywgMjExLCAxODcsIDgsIDMsIDIxMSwgMTg2LCA4LCAzLCAyMTEsIDIwMywgOCwgMywgMjExLCAyMjcsIDgsIAorICAgIDMsIDIxMSwgMjEwLCA4LCAzLCAyMTIsIDUsIDgsIDMsIDIxMiwgMjIsIDgsIDMsIDIxMiwgMTAsIDgsIDMsIDIxMCwgMzAsIAorICAgIDgsIDMsIDIxMCwgMjksIDgsIDMsIDIxMCwgNDQsIDgsIDMsIDIxMCwgMzIsIDgsIDMsIDIxMCwgMzcsIDgsIDMsIDIxMCwgCisgICAgMzksIDgsIDMsIDIxMCwgMzgsIDgsIDMsIDIxMCwgMTAyLCA4LCAzLCAyMTAsIDk5LCA4LCAzLCAyMTAsIDExNiwgOCwgMywgCisgICAgMjEwLCAxMDUsIDgsIDMsIDIxMCwgNiwgOCwgMywgMjEwLCA4LCA4LCAzLCAyMTAsIDcsIDgsIDMsIDIxMCwgMTksIDgsIDMsIAorICAgIDIxMCwgMTgsIDgsIDMsIDIxMCwgMjMsIDgsIDMsIDIxMCwgMjAsIDgsIDMsIDIxMCwgODQsIDgsIDMsIDIxMCwgOTQsIDgsIAorICAgIDMsIDIxMCwgODgsIDgsIDMsIDIxMCwgMiwgOCwgMywgMjEwLCAxLCA4LCAzLCAyMTAsIDEzLCA4LCAzLCAyMTAsIDUsIDgsIAorICAgIDMsIDIxMCwgMywgOCwgMywgMjEwLCA0LCA4LCAzLCAyMDksIDI0NSwgOCwgMywgMjA5LCAyNDQsIDgsIDMsIDIwOSwgMjUwLCAKKyAgICA4LCAzLCAyMDksIDI0OCwgOCwgMywgMjA5LCAyNDYsIDgsIDMsIDIwOSwgMjQ3LCA4LCAzLCAyNTAsIDM2LCA4LCAzLCAyNTAsIAorICAgIDMyLCA4LCAzLCAyNTAsIDU5LCA4LCAzLCAyNTAsIDQ1LCA4LCAzLCAyNTAsIDU2LCA4LCAzLCAyNTAsIDUwLCA4LCAzLCAKKyAgICAyNTAsIDU4LCA4LCAzLCAyNTAsIDU3LCA4LCAzLCAyNTAsIDIzMiwgOCwgMywgMjUwLCAyMjUsIDgsIDMsIDI1MSwgNDEsIDgsIAorICAgIDMsIDI1MSwgMywgOCwgMywgMjQ5LCAxMTIsIDgsIDMsIDI0OSwgMTE0LCA4LCAzLCAyNDksIDExMywgOCwgMywgMjQ5LCAKKyAgICAxNjEsIDgsIDMsIDI0OSwgMTUyLCA4LCAzLCAyNDksIDI0NiwgOCwgMywgMjQ5LCAxNzcsIDgsIDMsIDI1MCwgMTY4LCA4LCAKKyAgICAzLCAyNTAsIDE5OCwgOCwgMywgMjUwLCAxNzMsIDgsIDMsIDI0OSwgOTIsIDgsIDMsIDI0OSwgOTAsIDgsIDMsIDI0OSwgCisgICAgMTIwLCA4LCAzLCAyNDksIDExMCwgOCwgMywgMjQ5LCA5NywgOCwgMywgMjQ5LCAxMDksIDgsIDMsIDI0OSwgNzEsIDgsIDMsIAorICAgIDI0OSwgNzAsIDgsIDMsIDI0OSwgODEsIDgsIDMsIDI0OSwgNzcsIDgsIDMsIDI0OSwgNzIsIDgsIDMsIDI0OSwgNzQsIDgsIAorICAgIDMsIDIwOSwgMjI4LCA4LCAzLCAyMDksIDIyNywgOCwgMywgMjA5LCAyMzQsIDgsIDMsIDIwOSwgMjI5LCA4LCAzLCAyMDksIAorICAgIDIzMSwgOCwgMywgMjA5LCAyMzAsIDgsIDMsIDIwOSwgMjMzLCA4LCAzLCAyMDksIDIzMiwgOCwgMywgMjA5LCAyNDAsIDgsIAorICAgIDMsIDIwOSwgMjM5LCA4LCAzLCAyMDksIDI0MywgOCwgMywgMjA5LCAyNDEsIDgsIDMsIDIwOSwgMjI0LCA4LCAzLCAyMDksIAorICAgIDIyNiwgOCwgMywgMjA5LCAyMjUsIDgsIDMsIDIwOSwgMjM1LCA4LCAzLCAyMDksIDIzOCwgOCwgMywgMjA5LCAyMzYsIDgsIAorICAgIDMsIDIwOSwgMjE3LCA4LCAzLCAyMDksIDIyMSwgOCwgMywgMjA5LCAyMjAsIDgsIDMsIDIwOSwgMjE4LCA4LCAzLCAyMDksIAorICAgIDIxOSwgOCwgMywgMjA5LCAyMTEsIDgsIDMsIDIwOSwgMjEwLCA4LCAzLCAyMDksIDIxNiwgOCwgMywgMjA5LCAyMTQsIDgsIAorICAgIDMsIDIwOSwgMjEyLCA4LCAzLCAyMDksIDIxMywgOCwgMywgMjI3LCAxMDgsIDgsIDMsIDIyNywgMTA3LCA4LCAzLCAyMjcsIAorICAgIDExMywgOCwgMywgMjI3LCAxMDksIDgsIDMsIDIyNywgMTEwLCA4LCAzLCAyMjcsIDExMiwgOCwgMywgMjI3LCAxMTEsIDgsIAorICAgIDMsIDIyNywgMTE4LCA4LCAzLCAyMjcsIDExNywgOCwgMywgMjI3LCAxMjEsIDgsIDMsIDIyNywgMTIwLCA4LCAzLCAyMjcsIAorICAgIDEwMSwgOCwgMywgMjI3LCAxMDIsIDgsIDMsIDIyNywgMTA1LCA4LCAzLCAyMjcsIDEwNiwgOCwgMywgMjI3LCAxMTQsIDgsIAorICAgIDMsIDIyNywgMTE2LCA4LCAzLCAyMjcsIDk2LCA4LCAzLCAyMjcsIDEwNCwgOCwgMywgMjI3LCAxMDAsIDgsIDMsIDIyNywgCisgICAgOTcsIDgsIDMsIDIyNywgOTgsIDgsIDMsIDIyNywgOTEsIDgsIDMsIDIyNywgOTAsIDgsIDMsIDIyNywgOTUsIDgsIDMsIAorICAgIDIyNywgOTQsIDgsIDMsIDIyNywgOTIsIDgsIDMsIDIyNywgOTMsIDgsIDMsIDIxOSwgMTI5LCA4LCAzLCAxOTUsIDgsIDMsIAorICAgIDIxOSwgMTkzLCA4LCAzLCAyMTksIDEzMiwgOCwgMywgMjE5LCAxODUsIDgsIDMsIDIxOSwgMTg4LCA4LCAzLCAyMTksIDE4NiwgCisgICAgOCwgMywgMjIxLCAyMjgsIDgsIDMsIDIyMSwgMjE2LCA4LCAzLCAyMDYsIDgsIDMsIDIyMSwgMjM2LCA4LCAzLCAyMTgsIDI5LCAKKyAgICA4LCAzLCAyMTgsIDMxLCA4LCAzLCAyMTgsIDMwLCA4LCAzLCAyMTksIDM2LCA4LCAzLCAyMTksIDI1LCA4LCAzLCAyMTksIAorICAgIDYwLCA4LCAzLCAyMTksIDQwLCA4LCAzLCAyMjAsIDExNiwgOCwgMywgMjIxLCAxODMsIDgsIDMsIDIyMCwgMTQxLCA4LCAzLCAKKyAgICAyMTgsIDYsIDgsIDMsIDIxOCwgNCwgOCwgMywgMjE4LCA4NCwgOCwgMywgMjE4LCAyOCwgOCwgMywgMjE4LCAxMCwgOCwgMywgCisgICAgMjE4LCAxOCwgOCwgMywgMjE3LCAxNjcsIDgsIDMsIDIxNywgMTY2LCA4LCAzLCAyMTcsIDIzMywgOCwgMywgMjE3LCAxNzQsIAorICAgIDgsIDMsIDIxNywgMTY5LCA4LCAzLCAyMTcsIDE3MywgOCwgMywgMjE4LCAxODgsIDgsIDMsIDIxOCwgMTg3LCA4LCAzLCAKKyAgICAyMTgsIDE5NCwgOCwgMywgMjE4LCAxODksIDgsIDMsIDIxOCwgMTkxLCA4LCAzLCAyMTgsIDE5MywgOCwgMywgMjE4LCAxOTIsIAorICAgIDgsIDMsIDIxOCwgMjAyLCA4LCAzLCAyMTgsIDIwMCwgOCwgMywgMjE4LCAyMjUsIDgsIDMsIDIxOCwgMjAzLCA4LCAzLCAKKyAgICAyMTgsIDE4MywgOCwgMywgMjE4LCAxODIsIDgsIDMsIDIxOCwgMTg2LCA4LCAzLCAyMTgsIDE4NCwgOCwgMywgMjE4LCAxOTYsIAorICAgIDgsIDMsIDIxOCwgMTk5LCA4LCAzLCAyMTgsIDE5NywgOCwgMywgMjE4LCAxNzksIDgsIDMsIDIxOCwgMTc3LCA4LCAzLCAKKyAgICAyMTgsIDE4MSwgOCwgMywgMjE4LCAxODAsIDgsIDMsIDIxOCwgMTcyLCA4LCAzLCAyMTgsIDE3MSwgOCwgMywgMjE4LCAxNzYsIAorICAgIDgsIDMsIDIxOCwgMTc1LCA4LCAzLCAyMTgsIDE3MywgOCwgMywgMjE4LCAxNzQsIDgsIDMsIDIxMCwgNzcsIDgsIDMsIDIxMCwgCisgICAgNzYsIDgsIDMsIDIxMCwgODIsIDgsIDMsIDIxMCwgNzksIDgsIDMsIDIxMCwgNTksIDgsIDMsIDIxMCwgNjEsIDgsIDMsIAorICAgIDIxMCwgNjAsIDgsIDMsIDIxMCwgNjQsIDgsIDMsIDIxMCwgNjMsIDgsIDMsIDIxMCwgNjcsIDgsIDMsIDIxMCwgNjUsIDgsIAorICAgIDMsIDIxMCwgNzEsIDgsIDMsIDIxMCwgNzAsIDgsIDMsIDIxMCwgNzQsIDgsIDMsIDIxMCwgNzIsIDgsIDMsIDIxMCwgNTUsIAorICAgIDgsIDMsIDIxMCwgNTQsIDgsIDMsIDIxMCwgNjIsIDgsIDMsIDIxMCwgNTgsIDgsIDMsIDIxMCwgNTYsIDgsIDMsIDIxMCwgCisgICAgNTcsIDgsIDMsIDIxMCwgNDcsIDgsIDMsIDIxMCwgNDYsIDgsIDMsIDIxMCwgNTEsIDgsIDMsIDIxMCwgNTAsIDgsIDMsIAorICAgIDIxMCwgNDgsIDgsIDMsIDIxMCwgNDksIDgsIDMsIDI1MCwgMTQ0LCA4LCAzLCAyNTAsIDE0MSwgOCwgMywgMjUwLCAxNjUsIAorICAgIDgsIDMsIDI1MCwgMTUyLCA4LCAzLCAyNTAsIDczLCA4LCAzLCAyNTAsIDcyLCA4LCAzLCAyNTAsIDc1LCA4LCAzLCAyNTAsIAorICAgIDc0LCA4LCAzLCAyNTAsIDg3LCA4LCAzLCAyNTAsIDg2LCA4LCAzLCAyNTAsIDk0LCA4LCAzLCAyNTAsIDg5LCA4LCAzLCAKKyAgICAyNTAsIDEyMywgOCwgMywgMjUwLCAxMjEsIDgsIDMsIDI1MCwgMTM5LCA4LCAzLCAyNTAsIDEyOSwgOCwgMywgMjUwLCA2NywgCisgICAgOCwgMywgMjUwLCA3NywgOCwgMywgMjUwLCA3MSwgOCwgMywgMjUwLCA2OCwgOCwgMywgMjUwLCA3MCwgOCwgMywgMjUwLCAKKyAgICA2MSwgOCwgMywgMjUwLCA2MCwgOCwgMywgMjUwLCA2NSwgOCwgMywgMjUwLCA2NCwgOCwgMywgMjUwLCA2MiwgOCwgMywgCisgICAgMjUwLCA2MywgOCwgMywgMjIyLCAxNzcsIDgsIDMsIDIyMiwgMTgxLCA4LCAzLCAyMjIsIDE2MCwgOCwgMywgMjIyLCAxNjEsIAorICAgIDgsIDMsIDIyMiwgMTY0LCA4LCAzLCAyMjIsIDE2MywgOCwgMywgMjIyLCAxNjcsIDgsIDMsIDIyMiwgMTY1LCA4LCAzLCAKKyAgICAyMjIsIDE3MSwgOCwgMywgMjIyLCAxNzAsIDgsIDMsIDIyMiwgMTc2LCA4LCAzLCAyMjIsIDE3MiwgOCwgMywgMjIyLCAxNTYsIAorICAgIDgsIDMsIDIyMiwgMTU0LCA4LCAzLCAyMjIsIDE2MiwgOCwgMywgMjIyLCAxNTksIDgsIDMsIDIyMiwgMTU3LCA4LCAzLCAKKyAgICAyMjIsIDE1OCwgOCwgMywgMjIyLCAxNDksIDgsIDMsIDIyMiwgMTQ4LCA4LCAzLCAyMjIsIDE1MywgOCwgMywgMjIyLCAxNTIsIAorICAgIDgsIDMsIDIyMiwgMTUwLCA4LCAzLCAyMjIsIDE1MSwgOCwgMywgMjI4LCAzOSwgOCwgMywgMjI4LCAzOCwgOCwgMywgMjI4LCAKKyAgICA0MSwgOCwgMywgMjI4LCA0MCwgOCwgMywgMjI4LCAzMSwgOCwgMywgMjI4LCAzMywgOCwgMywgMjI4LCAzMiwgOCwgMywgCisgICAgMjI4LCAzNSwgOCwgMywgMjI4LCAzNCwgOCwgMywgMjI4LCAzNywgOCwgMywgMjI4LCAzNiwgOCwgMywgMjI4LCAyNiwgOCwgCisgICAgMywgMjI4LCAyNSwgOCwgMywgMjI4LCAzMCwgOCwgMywgMjI4LCAyOSwgOCwgMywgMjI4LCAyNywgOCwgMywgMjI4LCAyOCwgCisgICAgOCwgMywgMjI4LCAyMCwgOCwgMywgMjI4LCAxOSwgOCwgMywgMjI4LCAyNCwgOCwgMywgMjI4LCAyMywgOCwgMywgMjI4LCAKKyAgICAyMSwgOCwgMywgMjI4LCAyMiwgOCwgMywgMjIwLCA3NCwgOCwgMywgMjIwLCA2OSwgOCwgMywgMjIwLCAxMDQsIDgsIDMsIAorICAgIDIyMCwgODUsIDgsIDMsIDIxOSwgMjE3LCA4LCAzLCAyMTksIDIxOSwgOCwgMywgMjE5LCAyMTgsIDgsIDMsIDIxOSwgMjM4LCAKKyAgICA4LCAzLCAyMTksIDIzNSwgOCwgMywgMjIwLCA5LCA4LCAzLCAyMjAsIDAsIDgsIDMsIDIyMCwgNDQsIDgsIDMsIDIyMCwgMzcsIAorICAgIDgsIDMsIDIyMCwgNjUsIDgsIDMsIDIyMCwgNTIsIDgsIDMsIDIxOSwgMjEzLCA4LCAzLCAyMTksIDIxMSwgOCwgMywgMjE5LCAKKyAgICAyMjcsIDgsIDMsIDIxOSwgMjE2LCA4LCAzLCAyMTksIDIxNCwgOCwgMywgMjE5LCAyMTUsIDgsIDMsIDIxOSwgMTk2LCA4LCAKKyAgICAzLCAyMTksIDE5NSwgOCwgMywgMjE5LCAyMDIsIDgsIDMsIDIxOSwgMTk5LCA4LCAzLCAyMTksIDE5NywgOCwgMywgMjE5LCAKKyAgICAxOTgsIDgsIDMsIDIyMywgMTQ0LCA4LCAzLCAyMjMsIDEzOCwgOCwgMywgMjA1LCA4LCAzLCAyMjMsIDE1MCwgOCwgMywgCisgICAgMjIyLCAxMjIsIDgsIDMsIDIyMiwgMTI0LCA4LCAzLCAyMjIsIDEyMywgOCwgMywgMjIyLCAxOTAsIDgsIDMsIDIyMiwgMTgzLCAKKyAgICA4LCAzLCAyMjIsIDIxMywgOCwgMywgMjIyLCAxOTQsIDgsIDMsIDIyMywgNDYsIDgsIDMsIDIyMywgMTMxLCA4LCAzLCAyMjMsIAorICAgIDg0LCA4LCAzLCAyMjIsIDExNSwgOCwgMywgMjIyLCAxMTIsIDgsIDMsIDIyMiwgMTQyLCA4LCAzLCAyMjIsIDEyMSwgOCwgMywgCisgICAgMjIyLCAxMTcsIDgsIDMsIDIyMiwgMTE4LCA4LCAzLCAyMjIsIDk3LCA4LCAzLCAyMjIsIDk2LCA4LCAzLCAyMjIsIDEwMiwgCisgICAgOCwgMywgMjIyLCAxMDAsIDgsIDMsIDIyMiwgOTgsIDgsIDMsIDIyMiwgOTksIDgsIDMsIDIzNSwgMTA0LCA4LCAzLCAyMzUsIAorICAgIDEwMywgOCwgMywgMjM1LCAxMTQsIDgsIDMsIDIzNSwgMTA1LCA4LCAzLCAyMzUsIDExMCwgOCwgMywgMjM1LCAxMDksIDgsIAorICAgIDMsIDIzNSwgMTEyLCA4LCAzLCAyMzUsIDExMSwgOCwgMywgMjM1LCA0NywgOCwgMywgMjM1LCA0NiwgOCwgMywgMjM1LCA0OSwgCisgICAgOCwgMywgMjM1LCA0OCwgOCwgMywgMjM1LCA2MiwgOCwgMywgMjM1LCA2MCwgOCwgMywgMjM1LCA3NCwgOCwgMywgMjM1LCAKKyAgICA2NCwgOCwgMywgMjM1LCA0MCwgOCwgMywgMjM1LCAzOCwgOCwgMywgMjM1LCA1NywgOCwgMywgMjM1LCA0NSwgOCwgMywgCisgICAgMjM1LCA0MiwgOCwgMywgMjM1LCA0MywgOCwgMywgMjM1LCAzMiwgOCwgMywgMjM1LCAzMSwgOCwgMywgMjM1LCAzNiwgOCwgCisgICAgMywgMjM1LCAzNSwgOCwgMywgMjM1LCAzMywgOCwgMywgMjM1LCAzNCwgOCwgMywgMjI0LCA0OSwgOCwgMywgMjI0LCA0NywgCisgICAgOCwgMywgMjI0LCA1NiwgOCwgMywgMjI0LCA1MCwgOCwgMywgMjI0LCA1MywgOCwgMywgMjI0LCA1MiwgOCwgMywgMjI0LCAKKyAgICA1NSwgOCwgMywgMjI0LCA1NCwgOCwgMywgMjI0LCAyLCA4LCAzLCAyMjMsIDI1NSwgOCwgMywgMjI0LCA0LCA4LCAzLCAyMjQsIAorICAgIDMsIDgsIDMsIDIyNCwgMzYsIDgsIDMsIDIyNCwgMzUsIDgsIDMsIDIyNCwgNDUsIDgsIDMsIDIyNCwgMzksIDgsIDMsIDIyMywgCisgICAgMjUwLCA4LCAzLCAyMjMsIDI0NiwgOCwgMywgMjI0LCAzMywgOCwgMywgMjIzLCAyNTQsIDgsIDMsIDIyMywgMjUyLCA4LCAzLCAKKyAgICAyMjMsIDI1MywgOCwgMywgMjIzLCAyMzAsIDgsIDMsIDIyMywgMjI4LCA4LCAzLCAyMjMsIDI0MCwgOCwgMywgMjIzLCAyMzMsIAorICAgIDgsIDMsIDIyMywgMjMxLCA4LCAzLCAyMjMsIDIzMiwgOCwgMywgMjM1LCA5MywgOCwgMywgMjM1LCA5MiwgOCwgMywgMjM1LCAKKyAgICA5OSwgOCwgMywgMjM1LCA5NCwgOCwgMywgMjM1LCA5NiwgOCwgMywgMjM1LCA5NSwgOCwgMywgMjM1LCA5OCwgOCwgMywgCisgICAgMjM1LCA5NywgOCwgMywgMjM1LCA4NCwgOCwgMywgMjM1LCA4NiwgOCwgMywgMjM1LCA4NSwgOCwgMywgMjM1LCA4OSwgOCwgCisgICAgMywgMjM1LCA4OCwgOCwgMywgMjM1LCA5MSwgOCwgMywgMjM1LCA5MCwgOCwgMywgMjM1LCA4MCwgOCwgMywgMjM1LCA3OSwgCisgICAgOCwgMywgMjM1LCA4NywgOCwgMywgMjM1LCA4MywgOCwgMywgMjM1LCA4MSwgOCwgMywgMjM1LCA4MiwgOCwgMywgMjM1LCAKKyAgICA3NiwgOCwgMywgMjM1LCA3NSwgOCwgMywgMjM1LCA3OCwgOCwgMywgMjM1LCA3NywgOCwgMywgMjI4LCAxNjcsIDgsIDMsIAorICAgIDIyOCwgMTY2LCA4LCAzLCAyMjgsIDE3NCwgOCwgMywgMjI4LCAxNjgsIDgsIDMsIDIyOCwgMTcwLCA4LCAzLCAyMjgsIDE2OSwgCisgICAgOCwgMywgMjI4LCAxNzMsIDgsIDMsIDIyOCwgMTcxLCA4LCAzLCAyMjgsIDE1NiwgOCwgMywgMjI4LCAxNTcsIDgsIDMsIAorICAgIDIyOCwgMTYyLCA4LCAzLCAyMjgsIDE2MSwgOCwgMywgMjI4LCAxNjUsIDgsIDMsIDIyOCwgMTYzLCA4LCAzLCAyMjgsIDE1MSwgCisgICAgOCwgMywgMjI4LCAxNjAsIDgsIDMsIDIyOCwgMTU1LCA4LCAzLCAyMjgsIDE1MiwgOCwgMywgMjI4LCAxNTMsIDgsIDMsIAorICAgIDIyOCwgMTQ2LCA4LCAzLCAyMjgsIDE0NSwgOCwgMywgMjI4LCAxNTAsIDgsIDMsIDIyOCwgMTQ5LCA4LCAzLCAyMjgsIDE0NywgCisgICAgOCwgMywgMjI4LCAxNDgsIDgsIDMsIDIyNywgMTQxLCA4LCAzLCAyMjcsIDE0MCwgOCwgMywgMjI3LCAxNTIsIDgsIDMsIAorICAgIDIyNywgMTQ1LCA4LCAzLCAyMjcsIDE0OSwgOCwgMywgMjI3LCAxNDgsIDgsIDMsIDIyNywgMTUxLCA4LCAzLCAyMjcsIDE1MCwgCisgICAgOCwgMywgMjI3LCAxMjgsIDgsIDMsIDIyNywgMTMwLCA4LCAzLCAyMjcsIDEyOSwgOCwgMywgMjI3LCAxMzQsIDgsIDMsIAorICAgIDIyNywgMTMzLCA4LCAzLCAyMjcsIDEzOCwgOCwgMywgMjI3LCAxMzUsIDgsIDMsIDIyNywgMTI2LCA4LCAzLCAyMjcsIDEyNCwgCisgICAgOCwgMywgMjI3LCAxMzIsIDgsIDMsIDIyNywgMTI3LCA4LCAzLCAyMTEsIDE1MCwgOCwgMywgMjExLCAxNDksIDgsIDMsIAorICAgIDIxMSwgMTU3LCA4LCAzLCAyMTEsIDE1MiwgOCwgMywgMjExLCAxNTQsIDgsIDMsIDIxMSwgMTUzLCA4LCAzLCAyMTEsIDE1NiwgCisgICAgOCwgMywgMjExLCAxNTUsIDgsIDMsIDIxMSwgMTM5LCA4LCAzLCAyMTEsIDE0MCwgOCwgMywgMjExLCAxNDQsIDgsIDMsIAorICAgIDIxMSwgMTQzLCA4LCAzLCAyMTEsIDE0OCwgOCwgMywgMjExLCAxNDYsIDgsIDMsIDIxMSwgMTIxLCA4LCAzLCAyMTEsIDExOSwgCisgICAgOCwgMywgMjExLCAxMzEsIDgsIDMsIDIxMSwgMTI0LCA4LCAzLCAyMTEsIDEyMiwgOCwgMywgMjExLCAxMjMsIDgsIDMsIAorICAgIDIxMCwgMjUwLCA4LCAzLCAyMTAsIDI0OCwgOCwgMywgMjExLCA4LCA4LCAzLCAyMTAsIDI1MSwgOCwgMywgMjExLCAyLCA4LCAKKyAgICAzLCAyMTEsIDEsIDgsIDMsIDIxMSwgNSwgOCwgMywgMjExLCAzLCA4LCAzLCAyMTAsIDE5MSwgOCwgMywgMjEwLCAxOTAsIDgsIAorICAgIDMsIDIxMCwgMTk0LCA4LCAzLCAyMTAsIDE5MiwgOCwgMywgMjEwLCAyMjQsIDgsIDMsIDIxMCwgMjIxLCA4LCAzLCAyMTAsIAorICAgIDI0NCwgOCwgMywgMjEwLCAyMjgsIDgsIDMsIDIxMCwgMTgyLCA4LCAzLCAyMTAsIDE3OCwgOCwgMywgMjEwLCAyMTIsIDgsIAorICAgIDMsIDIxMCwgMTg5LCA4LCAzLCAyMTAsIDE4NSwgOCwgMywgMjEwLCAxODYsIDgsIDMsIDIxMCwgMTYyLCA4LCAzLCAyMTAsIAorICAgIDE2MSwgOCwgMywgMjEwLCAxNjksIDgsIDMsIDIxMCwgMTY1LCA4LCAzLCAyMTAsIDE2MywgOCwgMywgMjEwLCAxNjQsIDgsIAorICAgIDM0LCAyMjQsIDM2LCA4LCAzNCwgMjMyLCAyNDcsIDgsIDM0LCAyMzQsIDY3LCA4LCAzNCwgMjI3LCAxNDUsIDgsIDM0LCAKKyAgICAyNDksIDc3LCA4LCAzNCwgMjE4LCAxOTQsIDgsIDM0LCAyNDMsIDE5LCA4LCAzNCwgMjQzLCA1MSwgOCwgMzQsIDIzMCwgCisgICAgMjM1LCA4LCAzNCwgMjQwLCAxODcsIDgsIDM0LCAyMzIsIDYxLCA4LCAzNCwgMjUyLCA5MSwgOCwgMzQsIDIzMCwgMTMxLCA4LCAKKyAgICAzNCwgMjEwLCAyNDQsIDgsIDM0LCAyMjQsIDEyNCwgOCwgMzQsIDI0MCwgMTgxLCA4LCAzNCwgMjE3LCA0NywgOCwgMzQsIAorICAgIDI0MywgMTQyLCA4LCAzNCwgMjEwLCA1LCA4LCAzNCwgMjQ5LCA3MSwgOCwgMzQsIDI0OCwgMTAzLCA4LCAzNCwgMjUxLCAKKyAgICAxMDYsIDgsIDM0LCAyNDMsIDE1LCA4LCAzNCwgMjI3LCAxMzUsIDgsIDM0LCAyMTUsIDExOSwgOCwgMzQsIDIyNiwgMTc5LCAKKyAgICA4LCAzNCwgMjM1LCA4MCwgOCwgMzQsIDIxMCwgMTksIDgsIDM0LCAyMjQsIDEwMywgOCwgMzQsIDI0MSwgMTE1LCA4LCAzNCwgCisgICAgMjEwLCAyNTAsIDgsIDM0LCAyMTIsIDExMiwgOCwgMzQsIDIxOSwgMjAyLCA4LCAzNCwgMjEzLCAyNDQsIDgsIDM0LCAyMTAsIAorICAgIDExNiwgOCwgMzQsIDIzNSwgNzQsIDgsIDM0LCAyMjcsIDEwMCwgOCwgMzQsIDIzNSwgNzgsIDgsIDM0LCAyNDIsIDE2MSwgOCwgCisgICAgMzQsIDIzNSwgOTgsIDgsIDM0LCAyMTEsIDIyNywgOCwgMzQsIDI0NiwgODYsIDgsIDM0LCAyMTksIDIxNSwgOCwgMzQsIAorICAgIDIzMiwgMjQyLCA4LCAzNCwgMjQ5LCA4MSwgOCwgMzQsIDI0OSwgMTEzLCA4LCAzNCwgMjUwLCA0NSwgOCwgMzQsIDI0MCwgCisgICAgMTg0LCA4LCAzNCwgMjIwLCA3NCwgOCwgMzQsIDIxMCwgNCwgOCwgMzQsIDIyMCwgMCwgOCwgMzQsIDI1MCwgMTM5LCA4LCAKKyAgICAzNCwgMjA5LCAyMzEsIDgsIDM0LCAyMjksIDE3OCwgOCwgMzQsIDIzNCwgMTg4LCAyMzIsIDIwMiwgMSwgMjUyLCAxOTksIAorICAgIDIzMiwgMjAyLCAxLCAxOTEsIDIzMiwgMjAyLCAxLCAyMjUsIDE1MCwgMjMyLCAyMDIsIDEsIDI0OCwgMjI5LCAyMzIsIDIwMiwgCisgICAgMSwgMjE3LCAxMDYsIDIzMiwgMjAyLCAxLCAyMTYsIDIwOSwgMjMyLCAyMDIsIDEsIDI0MywgMTQyLCAyMzIsIDIwMiwgMSwgCisgICAgMTc2LCAyMzIsIDIwMiwgMSwgMjM0LCAxMzgsIDIzMiwgMjAyLCAxLCAyMzUsIDE0NywgMjMyLCAyMDIsIDEsIDI1MSwgNDEsIAorICAgIDIzMiwgMjAyLCAxLCAyNTAsIDE2NSwgMjMyLCAyMDIsIDEsIDI0NiwgNDYsIDIzMiwgMjAyLCAxLCAyMTUsIDE4NCwgMjMyLCAKKyAgICAyMDIsIDEsIDIxNSwgMTc2LCAyMzIsIDIwMiwgMSwgMTg2LCAyMzIsIDIwMiwgMSwgMTk4LCAyMzIsIDIwMiwgMSwgMjMzLCAKKyAgICAxNDEsIDIzMiwgMjAyLCAxLCAyMDYsIDIzMiwgMjAyLCAxLCAyMTAsIDgyLCAyMzIsIDIwMiwgMSwgMjEwLCAxMTYsIDIzMiwgCisgICAgMjAyLCAxLCAyMjksIDgyLCAyMzIsIDIwMiwgMSwgMTYyLCAyMzIsIDIwMiwgMSwgMjExLCAxNjUsIDIzMiwgMjAyLCAxLCAKKyAgICAyNDEsIDE5NiwgMjMyLCAyMDIsIDEsIDI0NCwgMjA0LCAyMzIsIDIwMiwgMSwgMjEyLCA2NSwgMjMyLCAyMDIsIDEsIDIyMCwgCisgICAgMTA0LCAyMzIsIDIwMiwgMSwgMTkyLCAyMzIsIDIwMiwgMSwgMjQzLCAwLCAyMzIsIDIwMiwgMSwgNjEsIDIzMiwgMjAyLCAxLCAKKyAgICAyNTQsIDI1MiwgMjMyLCAyMDIsIDEsIDc2LCAyMzIsIDIwMiwgMSwgMjQ1LCA2MywgMjMyLCAyMDIsIDEsIDc0LCAyMzIsIAorICAgIDIwMiwgMSwgNzgsIDIzMiwgMjAyLCAxLCA2OSwgMjMyLCAyMDIsIDEsIDIxNCwgMjE0LCAyMzIsIDIwMiwgMSwgMjE0LCAKKyAgICAyMDgsIDIzMiwgMjAyLCAxLCAyMjYsIDIzOCwgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMjE2LCAxMTgsIDIzMiwgCisgICAgMjAyLCAxLCAxMzgsIDIyOSwgMjM0LCAyMjUsIDE5LCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyNDksIDgwLCAyMzIsIAorICAgIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyNTEsIDIxMywgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMTk4LCAyMzIsIDIwMiwgCisgICAgMSwgMTM4LCAyMzAsIDM3LCAyMzUsIDEyMSwgMjMyLCAyMDIsIDIyNCwgMTQ0LCAyNDksIDIyNywgMjMyLCAyMDIsIDIyNCwgCisgICAgMTQ0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQxLCAzLCAyNDUsIDIxNywgNDEsIDMsIDI0NSwgMjEzLCA0MSwgMywgMjQxLCAKKyAgICAyMjcsIDQxLCAzLCAyMTIsIDE3LCA0MSwgMywgMjEyLCAxNiwgNDEsIDMsIDIyNSwgMjE0LCA0MSwgMywgMjUyLCAyMSwgNDEsIAorICAgIDMsIDI1MiwgNzQsIDQxLCAzLCAyMzEsIDEyMSwgNDEsIDMsIDIzMywgMjUzLCA0MSwgMywgMjMxLCAxMSwgNDEsIDMsIDI0MywgCisgICAgODIsIDQxLCAzLCAyNDQsIDE1NSwgNDEsIDMsIDIxMywgMjUwLCA0MSwgMywgMjE3LCAxMiwgNDEsIDMsIDIxNiwgMTk1LCAKKyAgICA0MSwgMywgMjQ4LCAyNCwgNDEsIDMsIDI0OCwgMjEsIDQxLCAzLCAyMzMsIDU2LCA0MSwgMywgMjIzLCAxMTEsIDQxLCAzLCAKKyAgICAyNDgsIDg1LCA0MSwgMywgMjI5LCAxNDQsIDQxLCAzLCAyMjEsIDE3MiwgNDEsIDMsIDIyMCwgNjMsIDQxLCAzLCAyMTAsIAorICAgIDkyLCA0MSwgMywgMjEwLCA3MywgNDEsIDMsIDI1MCwgMTkwLCA0MSwgMywgMjM1LCAxMzAsIDQxLCAzLCAyMjgsIDE4MSwgCisgICAgNDEsIDMsIDIxMSwgNDQsIDQxLCAzLCAyMzQsIDE4NywgNDEsIDMsIDIyOSwgNTYsIDQxLCAzLCAyNDMsIDYyLCA0MSwgMywgCisgICAgMjMxLCA4NSwgNDEsIDMsIDIyOSwgMTA4LCA0MSwgMywgMjI3LCAxNTksIDQxLCAzLCA3NCwgNDEsIDMsIDIzNiwgNiwgNDEsIAorICAgIDMsIDI0MSwgMTg3LCA0MSwgMywgMjQxLCAxNjcsIDQxLCAzLCAyMTEsIDI1MCwgNDEsIDMsIDIxMSwgMjQxLCA0MSwgMywgCisgICAgMjI1LCAxMTEsIDQxLCAzLCAyNTIsIDE5LCA0MSwgMywgMjUyLCAxNCwgNDEsIDMsIDIzMSwgMTE0LCA0MSwgMywgMjMzLCAKKyAgICAyNTAsIDQxLCAzLCAyMzEsIDgsIDQxLCAzLCAyNDMsIDc4LCA0MSwgMywgMjQ0LCAxMjksIDQxLCAzLCAyMTMsIDE3NiwgNDEsIAorICAgIDMsIDIxNiwgMTE4LCA0MSwgMywgMjE2LCAxNzYsIDQxLCAzLCAyNDgsIDE2LCA0MSwgMywgMjQ4LCAyMCwgNDEsIDMsIDIzMiwgCisgICAgMjQ3LCA0MSwgMywgMjIzLCAzOCwgNDEsIDMsIDI0OCwgMTEsIDQxLCAzLCAyMjksIDEzOCwgNDEsIDMsIDIxOSwgMTkzLCAKKyAgICA0MSwgMywgMjIwLCAzNCwgNDEsIDMsIDIxMCwgNDQsIDQxLCAzLCAyMTAsIDY5LCA0MSwgMywgMjUwLCA1OSwgNDEsIDMsIAorICAgIDIzNSwgMTE0LCA0MSwgMywgMjI4LCAxNzQsIDQxLCAzLCAyMTEsIDgsIDQxLCAzLCAyMzQsIDk4LCA0MSwgMywgMjI5LCA0OCwgCisgICAgNDEsIDMsIDI0MiwgMjIxLCA0MSwgMywgMjMwLCAyMzUsIDQxLCAzLCAyMjgsIDIzOCwgNDEsIDMsIDIyNywgMTUyLCA0MSwgCisgICAgMywgNjEsIDQxLCAzLCAyNTQsIDEzMSwgNDEsIDMsIDIyOSwgNzcsIDQxLCAzLCAxNjIsIDQxLCAzLCAyNDIsIDI1LCA0MSwgCisgICAgMywgMjEyLCA2NSwgNDEsIDMsIDIxMiwgNTUsIDQxLCAzLCAxOTEsIDQxLCAzLCAyNTIsIDI2LCA0MSwgMywgMjUyLCAxOTksIAorICAgIDQxLCAzLCAyMzEsIDEyOSwgNDEsIDMsIDIzNCwgMSwgNDEsIDMsIDIzNCwgMCwgNDEsIDMsIDIzMSwgMTUsIDQxLCAzLCAKKyAgICAyNDMsIDg2LCA0MSwgMywgMjQ0LCAyMDQsIDQxLCAzLCAyMTQsIDI3LCA0MSwgMywgMjE3LCAxMDYsIDQxLCAzLCAyMTYsIAorICAgIDIwOSwgNDEsIDMsIDI0OCwgMzMsIDQxLCAzLCAyNDgsIDIzLCA0MSwgMywgMjMzLCAxNDEsIDQxLCAzLCAyMDUsIDQxLCAzLCAKKyAgICAyNDgsIDIyOSwgNDEsIDMsIDIyOSwgMTUzLCA0MSwgMywgMjA2LCA0MSwgMywgMjIwLCAxMDQsIDQxLCAzLCAyMTAsIDExNiwgCisgICAgNDEsIDMsIDIxMCwgODIsIDQxLCAzLCAyNTEsIDQxLCA0MSwgMywgMjM1LCAxNDcsIDQxLCAzLCAyMjgsIDE5MCwgNDEsIDMsIAorICAgIDE5MiwgNDEsIDMsIDE3NiwgNDEsIDMsIDIzNCwgMjQwLCA0MSwgMywgMjI5LCA2MSwgNDEsIDMsIDI0MywgMTQyLCA0MSwgMywgCisgICAgMTg2LCA0MSwgMywgMTk4LCA0MSwgMywgMjI3LCAxNjksIDQxLCAzLCAyMjYsIDE4NywgNDEsIDMsIDIyNiwgMTgzLCA0MSwgCisgICAgMywgMjQxLCA2MCwgNDEsIDMsIDIxMSwgMjE1LCA0MSwgMywgMjExLCAyMTEsIDQxLCAzLCAyMjQsIDI1MiwgNDEsIDMsIAorICAgIDI1MiwgMTcsIDQxLCAzLCAyNTEsIDIwMSwgNDEsIDMsIDIzMSwgMTA5LCA0MSwgMywgMjMzLCAyNDgsIDQxLCAzLCAyMzEsIAorICAgIDQsIDQxLCAzLCAyNDMsIDc0LCA0MSwgMywgMjQ0LCA0MiwgNDEsIDMsIDIxMywgMTI3LCA0MSwgMywgMjE2LCAxOCwgNDEsIAorICAgIDMsIDIxNiwgMTU0LCA0MSwgMywgMjQ4LCAxNCwgNDEsIDMsIDI0OCwgMTgsIDQxLCAzLCAyMzIsIDEzMywgNDEsIDMsIDIyMiwgCisgICAgMTk5LCA0MSwgMywgMjQ3LCAxMzMsIDQxLCAzLCAyMjksIDEyNSwgNDEsIDMsIDIxOSwgNDIsIDQxLCAzLCAyMjAsIDMsIDQxLCAKKyAgICAzLCAyMTAsIDIxLCA0MSwgMywgMjEwLCA2NiwgNDEsIDMsIDI0OSwgMTgyLCA0MSwgMywgMjM1LCA2NSwgNDEsIDMsIDIyOCwgCisgICAgMTY0LCA0MSwgMywgMjEwLCAyMjksIDQxLCAzLCAyMzQsIDE2LCA0MSwgMywgMjI5LCA0NiwgNDEsIDMsIDI0MiwgMTcxLCAKKyAgICA0MSwgMywgMjMwLCAxMzcsIDQxLCAzLCAyMjgsIDY5LCA0MSwgMywgMjI3LCAxMzYsIDQxLCAzLCA2OSwgNDEsIDMsIDIxNCwgCisgICAgMTkwLCA0MSwgMywgMjQwLCAyMjksIDQxLCAzLCAyNDAsIDIxOSwgNDEsIDMsIDIxMSwgMTk1LCA0MSwgMywgMjExLCAxODksIAorICAgIDQxLCAzLCAyMjQsIDE1MywgNDEsIDMsIDI1MiwgMTYsIDQxLCAzLCAyNTEsIDEzMywgNDEsIDMsIDIzMSwgMTA4LCA0MSwgMywgCisgICAgMjMzLCAyNDYsIDQxLCAzLCAyMzEsIDMsIDQxLCAzLCAyNDMsIDczLCA0MSwgMywgMjQzLCAyNDEsIDQxLCAzLCAyMTIsIAorICAgIDExNiwgNDEsIDMsIDIxNSwgMTE5LCA0MSwgMywgMjE2LCAxMzcsIDQxLCAzLCAyNDgsIDEyLCA0MSwgMywgMjQ4LCAxNywgCisgICAgNDEsIDMsIDIzMiwgMTAzLCA0MSwgMywgMjIyLCAxNDIsIDQxLCAzLCAyNDYsIDg2LCA0MSwgMywgMjI5LCAxMjAsIDQxLCAzLCAKKyAgICAyMTgsIDg0LCA0MSwgMywgMjE5LCAyMjcsIDQxLCAzLCAyMTAsIDEzLCA0MSwgMywgMjEwLCA2MiwgNDEsIDMsIDI0OSwgCisgICAgMTIwLCA0MSwgMywgMjM1LCA1NywgNDEsIDMsIDIyOCwgMTYwLCA0MSwgMywgMjEwLCAyMTIsIDQxLCAzLCAyMzMsIDIyMywgCisgICAgNDEsIDMsIDIyOSwgNDUsIDQxLCAzLCAyNDIsIDEyMCwgNDEsIDMsIDIzMCwgMTA3LCA0MSwgMywgMjI3LCAyNDIsIDQxLCAzLCAKKyAgICAyMjcsIDEzMiwgNDEsIDMsIDc4LCA0MSwgMywgMjI2LCAyMDAsIDQxLCAzLCAyMjksIDUsIDQxLCAzLCAyNDEsIDc1LCA0MSwgCisgICAgMywgMjQxLCA2MywgNDEsIDMsIDIxMSwgMjI3LCA0MSwgMywgMjExLCAyMTYsIDQxLCAzLCAyMjUsIDE5LCA0MSwgMywgMjUyLCAKKyAgICAxOCwgNDEsIDMsIDI1MSwgMjEzLCA0MSwgMywgMjMxLCAxMTAsIDQxLCAzLCAyMzMsIDI0OSwgNDEsIDMsIDIzMSwgNiwgNDEsIAorICAgIDMsIDI0MywgNzYsIDQxLCAzLCAyNDMsIDc1LCA0MSwgMywgMjQ0LCA1MSwgNDEsIDMsIDIxMywgMTM4LCA0MSwgMywgMTEyLCAKKyAgICA0MSwgMywgMjE2LCAxNTcsIDQxLCAzLCAyNDgsIDE1LCA0MSwgMywgMjQ4LCAxOSwgNDEsIDMsIDIzMiwgMTYyLCA0MSwgMywgCisgICAgMjIyLCAyMTMsIDQxLCAzLCAyNDcsIDE1MywgNDEsIDMsIDIyOSwgMTI5LCA0MSwgMywgMjE5LCA2MCwgNDEsIDMsIDIyMCwgCisgICAgOSwgNDEsIDMsIDIxMCwgMjMsIDQxLCAzLCAyMTAsIDY3LCA0MSwgMywgMjQ5LCAyNDYsIDQxLCAzLCAyMzUsIDc0LCA0MSwgCisgICAgMywgMjI4LCAxNjUsIDQxLCAzLCAyMTAsIDI0NCwgNDEsIDMsIDIzNCwgMzQsIDQxLCAzLCAyMjksIDQ3LCA0MSwgMywgMjQyLCAKKyAgICAxODEsIDQxLCAzLCAyMzAsIDE2NiwgNDEsIDMsIDIyOCwgNzksIDQxLCAzLCAyMjcsIDEzOCwgNDEsIDMsIDc2LCA0MSwgMywgCisgICAgMjQ1LCAxNTgsIDQxLCAzLCAyMjksIDY2LCA0MSwgMywgMjQxLCAyNDUsIDQxLCAzLCAyNDEsIDIxNiwgNDEsIDMsIDIxMiwgCisgICAgMjIsIDQxLCAzLCAyMTIsIDEyLCA0MSwgMywgMjI1LCAyMjQsIDQxLCAzLCAyNTIsIDIyLCA0MSwgMywgMjUyLCA4MywgNDEsIAorICAgIDMsIDIzMSwgMTIyLCA0MSwgMywgMjMzLCAyNTQsIDQxLCAzLCAyMzMsIDI1MiwgNDEsIDMsIDIzMSwgMTIsIDQxLCAzLCAKKyAgICAyNDMsIDgzLCA0MSwgMywgMjQzLCA4MSwgNDEsIDMsIDI0NCwgMTYyLCA0MSwgMywgMjEzLCAyNTUsIDQxLCAzLCAyMTcsIAorICAgIDIzLCA0MSwgMywgMjE2LCAxOTYsIDQxLCAzLCAyNDgsIDI1LCA0MSwgMywgMjQ4LCAyMiwgNDEsIDMsIDIzMywgNjQsIDQxLCAKKyAgICAzLCAyMjMsIDEzMSwgNDEsIDMsIDI0OCwgOTgsIDQxLCAzLCAyMjksIDE0NSwgNDEsIDMsIDIyMSwgMTgzLCA0MSwgMywgCisgICAgMjIwLCA2NSwgNDEsIDMsIDIxMCwgOTQsIDQxLCAzLCAyMTAsIDc0LCA0MSwgMywgMjUwLCAxOTgsIDQxLCAzLCAyMzUsIAorICAgIDEzMiwgNDEsIDMsIDIyOCwgMTgzLCA0MSwgMywgMjExLCA0NywgNDEsIDMsIDIzNCwgMTg4LCA0MSwgMywgMjI5LCA1NywgCisgICAgNDEsIDMsIDIyOSwgNTMsIDQxLCAzLCAyNDMsIDY5LCA0MSwgMywgMjQzLCA1OCwgNDEsIDMsIDIzMSwgOTYsIDQxLCAzLCAKKyAgICAyMjksIDExMiwgNDEsIDMsIDIyNywgMTYwLCA0MSwgMywgMjI5LCA4NCwgNDEsIDMsIDIzMywgMjgsIDQxLCAyNDksIDIyNywgCisgICAgNDEsIDI0MywgMjM2LCAyMTgsIDEzMSwgNDEsIDIyNCwgMTYsIDc5LCA0MSwgMywgMjI5LCAxMjgsIDI0NCwgMjA0LCA0MSwgCisgICAgMywgMjI5LCAxMjgsIDE3NiwgNDEsIDMsIDIyOSwgMTI4LCAyMTksIDQyLCA0MSwgMTYsIDI0NCwgMTUyLCA0MSwgMTYsIAorICAgIDIzNCwgMTg2LCA0MSwgMTYsIDIxNiwgODIsIDQxLCAxNiwgMjI4LCAyMTMsIDQxLCAxNiwgMjUyLCAxNTUsIDQxLCAxNiwgCisgICAgMjQ0LCAyMDMsIDQxLCAxNiwgMjE3LCAxMDIsIDQxLCAxNiwgMjQ4LCAxODQsIDQxLCAxNiwgMjQ3LCAxMzIsIDQxLCAxNiwgCisgICAgMjMzLCAyMTIsIDQxLCAxNiwgMjE2LCAyMiwgNDEsIDE2LCAyNDcsIDE1MiwgNDEsIDE2LCAyMzUsIDY2LCA0MSwgMjEsIAorICAgIDIxMCwgODYsIDQxLCAyMSwgMTExLCA0MSwgMjEsIDEwNSwgNDEsIDIxLCAxNTgsIDQxLCAyMSwgMTYxLCA0MSwgMjEsIDE5MCwgCisgICAgNDEsIDIxLCAxOTUsIDQxLCAyMSwgMTk5LCA0MSwgMjEsIDE5NiwgNDEsIDIxLCAyMDEsIDQxLCAzLCAyMjksIDEyOCwgMTg2LCAKKyAgICA0MSwgMywgMjI5LCAxMjgsIDI0NywgMTUzLCAzMywgNiwgMSwgMjEwLCA5MCwgMzMsIDQsIDEsIDIxMCwgOTAsIDMzLCA2LCAKKyAgICAxLCAyNDYsIDQyLCAzMywgNCwgMSwgMjQ2LCA0MiwgMzMsIDYsIDEsIDIyMywgNTIsIDI0NiwgNDQsIDMzLCA0LCAxLCAyMjMsIAorICAgIDUyLCAyNDYsIDQ0LCAzMywgNiwgMSwgMjM1LCAxOTIsIDMzLCA0LCAxLCAyMzUsIDE5MiwgMzMsIDYsIDEsIDI0NywgMTY5LCAKKyAgICAzMywgNCwgMSwgMjQ3LCAxNjksIDMzLCA2LCAxLCAyMzAsIDE0NSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMzAsIDE0NSwgCisgICAgMjE0LCAyMDUsIDMzLCA2LCAxLCAyNTEsIDE0NCwgMjI2LCAyMDUsIDMzLCA0LCAxLCAyNTEsIDE0NCwgMjI2LCAyMDUsIDMzLCAKKyAgICA2LCAxLCAyMjksIDkyLCAyMTEsIDMxLCAzMywgNCwgMSwgMjI5LCA5MiwgMjExLCAzMSwgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIAorICAgIDI1MiwgMTkzLCAyMTEsIDMxLCAzMywgNCwgMSwgMjExLCAyOCwgMiwgMjUyLCAxOTMsIDIxMSwgMzEsIDMzLCA2LCAxLCAKKyAgICAyMzUsIDE5MCwgMjExLCA1OSwgMzMsIDQsIDEsIDIzNSwgMTkwLCAyMTEsIDU5LCAzMywgNiwgMSwgMjIzLCA1MiwgMjEwLCAKKyAgICAyMTIsIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTAsIDIxMiwgMzMsIDYsIDEsIDIzNSwgMTkwLCA2MSwgMzMsIDQsIDEsIDIzNSwgCisgICAgMTkwLCA2MSwgMzMsIDYsIDEsIDI1MCwgOCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUwLCA4LCAyMzIsIAorICAgIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTEsIDIyMiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDIyMiwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgCisgICAgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMTAsIDI0NiwgMzMsIDQsIDEsIDIxMCwgMjQ2LCAzMywgCisgICAgNiwgMSwgMjIzLCA1MiwgMjE1LCAxNzksIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTUsIDE3OSwgMzMsIDYsIDEsIDIxOSwgNTQsIAorICAgIDI0OCwgOTgsIDMzLCA0LCAxLCAyMTksIDU0LCAyNDgsIDk4LCAzMywgNiwgMSwgMjE5LCA1NCwgMjQ1LCAxODIsIDMzLCA0LCAKKyAgICAxLCAyMTksIDU0LCAyNDUsIDE4MiwgMzMsIDYsIDEsIDIxOSwgNTQsIDI0NSwgMTY3LCAzMywgNCwgMSwgMjE5LCA1NCwgCisgICAgMjQ1LCAxNjcsIDMzLCA2LCAxLCAyMzAsIDE0OSwgNzgsIDMzLCA0LCAxLCAyMzAsIDE0OSwgNzgsIDMzLCA2LCAxLCAyNTEsIAorICAgIDI0OCwgNzgsIDMzLCA0LCAxLCAyNTEsIDI0OCwgNzgsIDMzLCA2LCAxLCA1MiwgMjMwLCAxNDksIDc4LCAzMywgNCwgMSwgCisgICAgNTIsIDIzMCwgMTQ5LCA3OCwgMzMsIDEsIDIzMCwgOTEsIDc4LCAzOCwgMzMsIDIxMiwgMTAwLCAzOCwgMzMsIDIxNiwgMjQ5LCAKKyAgICAyMzAsIDE5NiwgNTAsIDM4LCAzMywgMjQwLCAyMTgsIDIzMCwgMTk2LCA1MCwgMzgsIDMzLCAyMTYsIDE0OSwgMjMwLCAxOTYsIAorICAgIDUwLCAyMTksIDk1LCAyNTMsIDIyNCwgMzgsIDMzLCAxLCAyMTQsIDIwMiwgMjM2LCA2NywgMzgsIDMzLCAxLCA3NCwgMzgsIAorICAgIDMzLCAxLCAyMTEsIDgsIDM4LCAzMywgMSwgNjksIDM4LCAzMywgMSwgMjQyLCAxMCwgNTAsIDM4LCAzMywgMSwgMjExLCAyNywgCisgICAgMzgsIDMzLCAxLCAyMTksIDU0LCA1MCwgMzgsIDMzLCAxLCAyMjYsIDIwNSwgMzgsIDMzLCAyMzQsIDE5OCwgMzgsIDMzLCAKKyAgICAyMjUsIDIzMSwgMzMsIDIzNCwgMTk4LCAzMywgMjI1LCAyMzEsIDMzLCA2LCAxLCAyNDYsIDU0LCAzMywgNCwgMSwgMjQ2LCAKKyAgICA1NCwgMzMsIDYsIDEsIDI0NiwgMzUsIDMzLCA0LCAxLCAyNDYsIDM1LCAzMywgNiwgMSwgMjEwLCA1MiwgMzMsIDQsIDEsIAorICAgIDIxMCwgNTIsIDMzLCA2LCAxLCAyNTAsIDIxNCwgMzMsIDQsIDEsIDI1MCwgMjE0LCAzMywgNiwgMSwgMjQ2LCAzMywgMzMsIAorICAgIDQsIDEsIDI0NiwgMzMsIDMzLCA2LCAxLCAyMTcsIDI0LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjE3LCAyNCwgMiwgCisgICAgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDIxNSwgNzgsIDMzLCA0LCAxLCAyMTUsIDc4LCAzMywgNiwgMSwgMjE1LCAxNjEsIAorICAgIDMzLCA0LCAxLCAyMTUsIDE2MSwgMzMsIDYsIDEsIDIxNSwgMTY1LCAzMywgNCwgMSwgMjE1LCAxNjUsIDMzLCA2LCAxLCAKKyAgICAyMTcsIDI5LCAzMywgNCwgMSwgMjE3LCAyOSwgMzMsIDYsIDEsIDI0MCwgMjA1LCAzMywgNCwgMSwgMjQwLCAyMDUsIDMzLCAKKyAgICA2LCAxLCAyMTksIDIwOCwgMzMsIDQsIDEsIDIxOSwgMjA4LCAzOCwgMzMsIDEsIDIzNSwgMTkwLCA3NiwgMjAsIDEsIDYxLCAKKyAgICAyMCwgMSwgMTc2LCAyMCwgMSwgNjksIDIwLCAxLCAyMzMsIDIyMywgMjAsIDEsIDI0NSwgMjE3LCAyMCwgMSwgMjIzLCAxMTEsIAorICAgIDIwLCAxLCAyMTcsIDg3LCAyMCwgMSwgNzgsIDIwLCAxLCAyMjcsIDE1MiwgMjAsIDEsIDc0LCAyMCwgMSwgMjMzLCAxNDEsIAorICAgIDIwLCAxLCAxOTEsIDIwLCAxLCAyMjIsIDI0MiwgMjAsIDEsIDIyMywgMzIsIDIwLCAxLCAyMzMsIDU1LCAyMCwgMSwgMjMxLCAKKyAgICA4NCwgMjAsIDEsIDIxNywgMTAyLCAyMCwgMSwgMjI5LCAxNTEsIDIwLCAxLCAyMjgsIDE4OCwgMjAsIDEsIDE5NCwgMjAsIDEsIAorICAgIDIxOCwgNSwgMjAsIDEsIDIzMCwgMTA3LCAyMCwgMSwgMjIwLCAyOSwgMjAsIDEsIDIxOSwgMTkzLCAyMCwgMSwgMjIwLCAzOSwgCisgICAgMjAsIDEsIDIyMCwgMTI1LCAyMCwgMSwgMjMzLCAxNjEsIDIwLCAxLCAyMzQsIDE2MiwgMjAsIDEsIDIyNywgMjEzLCAyMCwgCisgICAgMSwgMjI3LCAyNDIsIDIwLCAxLCAyMjgsIDE1OSwgMjAsIDEsIDIxMCwgMjI2LCAyMCwgMSwgMjE5LCAyMjcsIDIwLCAxLCAKKyAgICAyMTAsIDE4NywgMjAsIDEsIDE5MiwgMjAsIDEsIDIyOCwgMTQsIDIwLCAxLCAyMzQsIDE0OCwgMjAsIDEsIDIyNSwgMTU0LCAKKyAgICAyMCwgMSwgMjI4LCAxODEsIDIwLCAxLCAyMjcsIDI1MSwgMjAsIDEsIDIyNCwgMTQ3LCAyMCwgMSwgMjExLCAxOTIsIDIwLCAKKyAgICAxLCAyMjUsIDIxNCwgMjAsIDEsIDI0NCwgMTU1LCAyMCwgMSwgMjIyLCAxNDIsIDIwLCAxLCAyMzIsIDEwMywgMjAsIDEsIAorICAgIDIzMCwgMjM1LCAyMCwgMSwgMjI4LCAyMzgsIDIwLCAxLCAyMjMsIDU0LCAyMCwgMSwgMjIzLCAxNzQsIDIwLCAxLCAyMzQsIAorICAgIDE3MSwgMjAsIDEsIDIyOSwgMTIsIDIwLCAxLCAyMjksIDYxLCAyMCwgMSwgMjI5LCA4MiwgMjAsIDEsIDIyMCwgOSwgMjAsIAorICAgIDEsIDIyNCwgMTUwLCAyMCwgMSwgMjQzLCAyNDEsIDIwLCAxLCAyNDQsIDQ1LCAyMCwgMSwgMjEyLCA2NSwgMjAsIDEsIDE5OCwgCisgICAgMjAsIDEsIDIzMiwgMjQ3LCAyMCwgMSwgMjI1LCAxMTEsIDIwLCAxLCAyMzIsIDEyNSwgMjAsIDEsIDIzNCwgMzQsIDIwLCAxLCAKKyAgICAyMzEsIDExOSwgMjAsIDEsIDIyMywgODYsIDIwLCAxLCAyMzEsIDYzLCAyMCwgMSwgMTg2LCAyMCwgMSwgMjE2LCAxMTgsIAorICAgIDIwLCAxLCAyMzQsIDk4LCAyMCwgMSwgMjMwLCAxNjYsIDIwLCAxLCAyMzEsIDEyNywgMjAsIDEsIDIxNiwgMjMxLCAyMCwgMSwgCisgICAgMjM0LCAxLCAyMCwgMSwgMjE2LCAyNDgsIDIwLCAxLCAyMjcsIDI0MywgMjAsIDEsIDIyMSwgMjUzLCAyMCwgMSwgMjQ0LCAKKyAgICAyMDAsIDIwLCAxLCAyMzQsIDMsIDIwLCAxLCAyMzQsIDMwLCAyMCwgMzgsIDE2NCwgMjM0LCAxMSwgMjAsIDM4LCAxNjQsIAorICAgIDIxNSwgMTExLCAyMCwgMjI4LCAxODcsIDIwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIwLCAyNDksIDIzNCwgMjAsIDI0OSwgCisgICAgMjI3LCAyMCwgMjIwLCAxNTIsIDIwLCAyMjQsIDE2LCA3OSwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMCwgMjU0LCAyMjUsIAorICAgIDY0LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjI1LCA2NCwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMCwgCisgICAgMjU0LCAyMjAsIDg2LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjIwLCA4NiwgNTgsIDEsIDI1MCwgMTA0LCAKKyAgICAxMzgsIDIxMCwgMjU0LCAyMjQsIDMzLCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjI0LCAzMywgNTgsIDEsIAorICAgIDI1MCwgMTA0LCAxMzgsIDIxMCwgMjU0LCAyMjIsIDE0MiwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyMiwgCisgICAgMTQyLCA1OCwgMSwgMjQ1LCAyOCwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIDEyNiwgMTM4LCAxMzAsIAorICAgIDU4LCAxLCAyMzAsIDIzMCwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAKKyAgICAxLCAyNDUsIDI3LCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI4LCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAKKyAgICAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjMwLCAyNDYsIDEyNiwgCisgICAgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgCisgICAgMjcsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjgsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgCisgICAgMSwgMTI1LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjMwLCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIAorICAgIDEyMSwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDU5LCA2NywgCisgICAgMTMwLCA1OCwgMSwgNTksIDIxOSwgOTcsIDU4LCAxLCA1OSwgMjAzLCAxMzAsIDU4LCAxLCAyMzIsIDExNCwgNDQsIDI0OSwgCisgICAgMTY5LCAyNTQsIDExNywgNTgsIDEsIDIyMywgMTYwLCAxMjAsIDc1LCA1OCwgMSwgMjIzLCAxNjAsIDEyNCwgNzUsIDU4LCAxLCAKKyAgICAyMjMsIDE2MCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAyMjMsIDE2MCwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCA1OCwgMSwgCisgICAgMTIxLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAyMTgsIDExMywgMjIsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIAorICAgIDIxOCwgMTEzLCAyMiwgMTIxLCAyMTYsIDMxLCA3LCA2LCAxLCAyNDUsIDIwNywgMjU0LCAxNzksIDcsIDQsIDEsIDI0NSwgCisgICAgMjA3LCAyNTQsIDE3OSwgNywgNiwgMSwgMjQ1LCAyMDcsIDI1NCwgMjA1LCA3LCA0LCAxLCAyNDUsIDIwNywgMjU0LCAyMDUsIAorICAgIDcsIDYsIDEsIDI0MSwgMjE0LCA3LCA0LCAxLCAyNDEsIDIxNCwgNywgNiwgMSwgMjE1LCA0MCwgNywgNCwgMSwgMjE1LCA0MCwgCisgICAgNywgNiwgMSwgMjE1LCAyMzAsIDcsIDQsIDEsIDIxNSwgMjMwLCA3LCA2LCAxLCAyNDksIDExOCwgNywgNCwgMSwgMjQ5LCAKKyAgICAxMTgsIDcsIDYsIDEsIDI0OSwgMTE5LCAyLCAyNDksIDIyNywgNywgNCwgMSwgMjQ5LCAxMTksIDIsIDI0OSwgMjI3LCA3LCAKKyAgICAxLCA0LCA2LCAyNDUsIDE0LCA3LCAxLCA0LCA2LCAyMjIsIDkzLCA3LCA2LCAxLCAyNTUsIDgyLCA3LCA0LCAxLCAyNTUsIAorICAgIDgyLCA3LCA2LCAxLCAyNTQsIDgxLCA3LCA0LCAxLCAyNTQsIDgxLCA3LCA2LCAxLCAyNTMsIDIwMCwgNywgNCwgMSwgMjUzLCAKKyAgICAyMDAsIDcsIDYsIDEsIDI1MywgMTg0LCA3LCA0LCAxLCAyNTMsIDE4NCwgNywgNiwgMSwgMjUzLCAxODUsIDIsIDIwMywgCisgICAgMTMwLCA3LCA0LCAxLCAyNTMsIDE4NSwgMiwgMjAzLCAxMzAsIDcsIDYsIDEsIDI1MywgMTc1LCA3LCA0LCAxLCAyNTMsIAorICAgIDE3NSwgNywgNiwgMSwgMjIzLCA1MiwgMjUxLCA3NSwgMiwgMjQ3LCAxMjgsIDcsIDQsIDEsIDIyMywgNTIsIDI1MSwgNzUsIAorICAgIDIsIDI0NywgMTI4LCA3LCA2LCAxLCAyMzUsIDMwLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgOTEsIDcsIDYsIDEsIAorICAgIDIzNSwgMzAsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIzNSwgCisgICAgMzAsIDIsIDIxOCwgMTA1LCAyMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjE4LCAxMDUsIDIyLCAyNDgsIAorICAgIDcsIDkxLCA3LCA2LCAxLCAyNTEsIDE0MywgMTU2LCA3LCA0LCAxLCAyNTEsIDE0MywgMTU2LCA3LCA2LCAxLCAyMzMsIDE1NSwgCisgICAgMiwgMTI1LCA5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDE0NCwgMiwgMjAwLCAyMTgsIAorICAgIDEwNSwgMjI2LCAxMjQsIDcsIDQsIDEsIDE0NCwgMiwgMjAwLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDcsIDYsIDEsIDE0NCwgMiwgCisgICAgMjMyLCAxMjksIDcsIDQsIDEsIDE0NCwgMiwgMjMyLCAxMjksIDcsIDYsIDEsIDIyNiwgMTg3LCA3LCA0LCAxLCAyMjYsIAorICAgIDE4NywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNCwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDI0NCwgNjEsIDcsIDQsIAorICAgIDEsIDIyNiwgMTEwLCAyLCAyNDQsIDYxLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjE4LCAyMzEsIDIxNywgNzgsIDcsIDQsIAorICAgIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDIzMSwgMjE3LCA3OCwgNywgNiwgMSwgMjI0LCAxMDAsIDIsIDIxOCwgMTA1LCAyMTYsIAorICAgIDE0MCwgMjQ4LCA0NywgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgCisgICAgMjI0LCAxMDAsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMjMsIAorICAgIDIyNywgMjIyLCAxODgsIDcsIDQsIDEsIDIyMywgMjI3LCAyMjIsIDE4OCwgNywgNiwgMSwgMjIyLCAxMzIsIDIyMiwgMTg4LCAKKyAgICA3LCA0LCAxLCAyMjIsIDEzMiwgMjIyLCAxODgsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAKKyAgICAyMTQsIDEwNiwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjEyLCAxMDYsIDcsIDQsIDEsIDIxMiwgMTA2LCA3LCA2LCAxLCAKKyAgICAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDQsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNiwgMSwgMjE2LCAxNTMsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyMTYsIDE1MywgMiwgOTEsIDcsIDYsIDEsIDIxNiwgMTUzLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIAorICAgIDI0OCwgNDcsIDcsIDQsIDEsIDIxNiwgMTUzLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDYsIDEsIDIxMywgCisgICAgMjQ1LCA3LCA0LCAxLCAyMTMsIDI0NSwgNywgNiwgMSwgMjQ1LCA3MywgNywgNCwgMSwgMjQ1LCA3MywgNywgNiwgMSwgMjM1LCAKKyAgICAxNzgsIDcsIDQsIDEsIDIzNSwgMTc4LCA3LCA2LCAxLCAyNDksIDIxNSwgNywgNCwgMSwgMjQ5LCAyMTUsIDU4LCAxLCAyMTQsIAorICAgIDEzMywgNywgNCwgMSwgMjQ2LCA3NywgNywgNCwgMSwgMjMyLCA4OSwgNywgNCwgMSwgMjMwLCA4NSwgNywgNCwgMSwgMjI3LCAKKyAgICAyMDUsIDcsIDQsIDEsIDIyMiwgMTMxLCA3LCAxLCA0LCA2LCAyMjIsIDEzMSwgNywgNCwgMSwgMjE1LCAxMDksIDcsIDQsIDEsIAorICAgIDIxNCwgMTk3LCA3LCA2LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDcsIDYsIAorICAgIDEsIDIzNSwgMjIwLCAyNDUsIDE0LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ1LCAxNCwgNywgNiwgMSwgMjM1LCAyMjAsIDI0MywgCisgICAgMjA5LCA3LCA2LCAxLCAyMTUsIDk0LCAyMzUsIDIyMCwgMjQzLCAyMDksIDcsIDQsIDEsIDIxNSwgOTQsIDIzNSwgMjIwLCAKKyAgICAyNDMsIDIwOSwgNywgNiwgMSwgMjE1LCA5NCwgMTU2LCA3LCA0LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDYsIDEsIDIzNSwgCisgICAgMjIwLCAxNTMsIDcsIDQsIDEsIDIzNSwgMjIwLCAxNTMsIDcsIDYsIDEsIDIzNSwgMjIwLCAyMjIsIDkzLCA3LCA0LCAxLCAKKyAgICAyMzUsIDIyMCwgMjIyLCA5MywgNywgNiwgMSwgMjM1LCAyMjAsIDIxNywgMTUzLCA3LCA0LCAxLCAyMzUsIDIyMCwgMjE3LCAKKyAgICAxNTMsIDU4LCAxLCAxMjEsIDI1MCwgMzksIDI1NSwgMjMsIDU4LCAxLCAyNDksIDIzNCwgNTgsIDEsIDIxOSwgMjUzLCAyNDUsIAorICAgIDEwNiwgNTAsIDcsIDYsIDEsIDIyMiwgMSwgNywgNCwgMSwgMjIyLCAxLCA3LCA2LCAxLCAyMTUsIDk0LCAyNDIsIDY3LCA3LCAKKyAgICA0LCAxLCAyMzMsIDE1NSwgMiwgMjIzLCA1OCwgMjQxLCA1OSwgMjIsIDI1MiwgNDksIDcsIDYsIDEsIDIzMCwgMzEsIDIsIAorICAgIDI0OCwgNDcsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0OCwgNDcsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDEzMCwgNywgNCwgMSwgCisgICAgMjUxLCA3NSwgMiwgMTMwLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAxMDMsIDU4LCAxLCA2LCAyNDIsIDY4LCAyLCA5MSwgNTgsIDEsIAorICAgIDQsIDI3LCAyMjYsIDIzOCwgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTk0LCA3LCAyNDUsIDExMSwgMSwgMjIzLCA1MiwgMjQ1LCAKKyAgICAxNCwgNywgMjQ1LCAxMTEsIDEsIDIyMywgNTIsIDIyNiwgMTA5LCA3LCAyNDUsIDExMSwgMSwgMjM1LCAyMDAsIDE5NCwgNywgCisgICAgMjQ1LCAxMTEsIDEsIDI0MCwgMTYxLCAyMzIsIDEzNSwgNywgMjQ1LCAxMTEsIDEsIDI1NCwgMzEsIDE5NCwgMjE3LCAyMzEsIAorICAgIDIyOSwgMjE5LCAxLCA2MSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCA3NCwgMjE3LCAyMzEsIDIyOSwgMjE5LCA1LCAyNDYsIAorICAgIDU2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDY5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDc2LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDc4LCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI0MiwgNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzQsIAorICAgIDM0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNCwgMTExLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0MiwgMTgxLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0MiwgMjMxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI1NCwgODMsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQ5LCAyNDYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjUwLCA5NCwgMjE3LCAyMzEsIAorICAgIDIyOSwgMjE5LCAxLCAyMzUsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNSwgMTE1LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDIxNSwgMTM0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxNSwgMTQwLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIAorICAgIDI0OCwgMTEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0OCwgMTIyLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDExMiwgCisgICAgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMTYsIDE1NywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDcsIDE1MywgMjE3LCAKKyAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDgsIDE1LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyOCwgNzksIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMSwgMjI1LCAxOSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjUsIDEyNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAKKyAgICAyNTEsIDIxMywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNTIsIDE4LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzMCwgCisgICAgMTY2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyMiwgMjEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzMiwgMTYyLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyMiwgMTY3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxOSwgNjAsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQxLCA3NSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgNjEsIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMjUsIDUsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCA2OSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgCisgICAgNzYsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDIyNiwgMTg3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIAorICAgIDIzMSwgMTYzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIDIzMSwgMTYyLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgCisgICAgMTUsIDIzMSwgMTYxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIDIzMSwgMTYwLCAyMjgsIDYxLCAyMzUsIDI0NywgCisgICAgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAyMjgsIDYxLCAKKyAgICAyMzUsIDI0NywgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyMTksIAorICAgIDExOSwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgMTAsIDEyMywgMjQ1LCAxOTYsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIAorICAgIDEwLCAxMzQsIDIxOSwgMTE4LCAyMjgsIDYxLCAyMzUsIDI0NywgMjI0LCAyNSwgNzksIDIyOCwgNjEsIDIzNSwgMjQ3LCAKKyAgICAyMjUsIDQzLCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyMiwgMTIwLCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyNCwgMjYsIAorICAgIDc5LCAyMjUsIDE0NywgMSwgMTc2LCAyMjUsIDE0NywgMSwgMjM0LCAxMzgsIDIyNSwgMTQ3LCAxLCAyNDMsIDE0MiwgMjI1LCAKKyAgICAxNDcsIDEsIDIyOSwgODIsIDIyNSwgMTQ3LCAxLCAyNTEsIDQxLCAyMjUsIDE0NywgMSwgMjUwLCAxNjUsIDIyNSwgMTQ3LCAKKyAgICAxLCAyMzUsIDE0NywgMjI1LCAxNDcsIDEsIDIyNywgMTY5LCAyMjUsIDE0NywgMSwgMjE3LCAxMDYsIDIyNSwgMTQ3LCAxLCAKKyAgICAyMTYsIDIwOSwgMjI1LCAxNDcsIDEsIDI0OCwgMjI5LCAyMjUsIDE0NywgMSwgMTk4LCAyMjUsIDE0NywgMSwgMTkxLCAyMjUsIAorICAgIDE0NywgMSwgMjI1LCAxNTAsIDIyNSwgMTQ3LCAxLCAyNTIsIDE5OSwgMjI1LCAxNDcsIDEsIDE4NiwgMjI1LCAxNDcsIDEsIAorICAgIDIxNSwgMTg0LCAyMjUsIDE0NywgMSwgMjE1LCAxNzYsIDIyNSwgMTQ3LCAxLCAyNDYsIDQ2LCAyMjUsIDE0NywgMSwgMjEyLCAKKyAgICA2NSwgMjI1LCAxNDcsIDEsIDIxMCwgODIsIDIyNSwgMTQ3LCAxLCAyMTAsIDExNiwgMjI1LCAxNDcsIDEsIDQsIDYxLCAyMjUsIAorICAgIDE0NywgMSwgMTkyLCAyMjUsIDE0NywgMSwgMjA1LCAyMjUsIDE0NywgMSwgMjMzLCAxNDEsIDIyNSwgMTQ3LCAxLCAyMjAsIAorICAgIDEwNCwgMjI1LCAxNDcsIDEsIDIwNiwgMjI1LCAxNDcsIDEsIDE2MiwgMjI1LCAxNDcsIDEsIDYxLCAyMjUsIDE0NywgMSwgCisgICAgNzQsIDIyNSwgMTQ3LCAxLCA2OSwgMjI1LCAxNDcsIDEsIDc2LCAyMjUsIDE0NywgMSwgNzgsIDIyNSwgMTQ3LCAxLCAyMjQsIAorICAgIDkxLCAyMjUsIDE0NywgMSwgMjExLCAxNjUsIDIyNSwgMTQ3LCAxLCAyNDQsIDIwNCwgMjI1LCAxNDcsIDEsIDI0MywgMzYsIAorICAgIDIyNSwgMTQ3LCAxLCAyNDUsIDIxNywgMjI1LCAxNDcsIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDIyNSwgMTQ3LCAyMTgsIDc0LCAKKyAgICAxLCAxOTIsIDIyNSwgMTQ3LCAxLCAyMTUsIDE1NywgMjI1LCAxNDcsIDEsIDIxNSwgMTQ1LCAyMjUsIDE0NywgMSwgMjQ4LCAKKyAgICAxNDMsIDIyNSwgMTQ3LCAxLCAyMjgsIDExNSwgMjI1LCAxNDcsIDEsIDI1NCwgMTQ5LCAxOTIsIDIyNSwgMTQ3LCAxLCAyMTMsIAorICAgIDEzNCwgMjIwLCAxMDQsIDIyNSwgMTQ3LCAxLCAyMTMsIDEzNSwgMTYyLCAyMjUsIDE0NywgMSwgMjUzLCAyMzEsIDI0NCwgCisgICAgMjA0LCAyMjUsIDE0NywgMjE4LCA3NCwgMSwgMjA1LCAyMjUsIDE0NywgMjE4LCAyNiwgMSwgMjA1LCAyMjUsIDE0NywgMSwgCisgICAgMjUxLCA3LCAyMjUsIDE0NywgMjE5LCAxNTcsIDI0MSwgMjQzLCA3OSwgMjI1LCAxNDcsIDUyLCAyNDEsIDI0MywgNzksIAorICAgIDIyNSwgMTQ3LCAxNjQsIDIyMCwgOTcsIDIyNSwgMTQ3LCAxNjQsIDUyLCAyMjAsIDk3LCAxNzksIDUsIDI1NCwgODMsIDE3OSwgCisgICAgNSwgMjEzLCAxNDcsIDE3OSwgMSwgNjEsIDE3OSwgMSwgMjU1LCA4MiwgMTc5LCAxLCA3NCwgMTc5LCAxLCAyMzYsIDQwLCAKKyAgICAxNzksIDEsIDY5LCAxNzksIDEsIDIxNCwgMTE4LCAxNzksIDEsIDE0OSwgMTUzLCAxNzksIDEsIDE0OSwgMjIyLCAxODIsIAorICAgIDE3OSwgMSwgMTQ5LCAxNTYsIDE3OSwgMSwgMTQ5LCAyMzIsIDE5MSwgMTc5LCAxLCA3NiwgMTc5LCAxLCAyNDUsIDIxNywgCisgICAgMTc5LCAxLCAyNTQsIDIxMCwgMTc5LCAxLCA3OCwgMTc5LCAxLCAyMjYsIDE4NywgMTc5LCAxLCAyNTMsIDIwMCwgMTc5LCAxLCAKKyAgICAxNzYsIDE3OSwgMSwgMjM0LCAxMzgsIDE3OSwgMSwgMjQzLCAxNDIsIDE3OSwgMSwgMjQzLCAwLCAxNzksIDEsIDIyOSwgODIsIAorICAgIDE3OSwgMSwgMjUxLCA0MSwgMTc5LCAxLCAyNTAsIDE2NSwgMTc5LCAxLCAyMzUsIDE0NywgMTc5LCAxLCAyMzUsIDEyMCwgCisgICAgMTc5LCAxLCAyMjcsIDE2OSwgMTc5LCAxLCAyMTUsIDE1NywgMTc5LCAxLCAyMTUsIDE0NSwgMTc5LCAxLCAyNDgsIDE0MywgCisgICAgMTc5LCAxLCAyNDgsIDEyNywgMTc5LCAxLCAyMjgsIDExNSwgMTc5LCAxLCAyMTcsIDEwNiwgMTc5LCAxLCAyMTYsIDIwOSwgCisgICAgMTc5LCAxLCAyNDgsIDIyOSwgMTc5LCAxLCAyNDgsIDMzLCAxNzksIDEsIDE5OCwgMTc5LCAxLCAxOTEsIDE3OSwgMSwgMjI1LCAKKyAgICAxNTAsIDE3OSwgMSwgMjUyLCAxOTksIDE3OSwgMSwgMjUyLCAyNiwgMTc5LCAxLCAxODYsIDE3OSwgMSwgMTkyLCAxNzksIDEsIAorICAgIDIwNSwgMTc5LCAxLCAyMzMsIDE0MSwgMTc5LCAxLCAyMTQsIDI3LCAxNzksIDEsIDIyMCwgMTA0LCAxNzksIDEsIDIxOCwgCisgICAgMjI1LCAxNzksIDEsIDIwNiwgMTc5LCAxLCAxNjIsIDE3OSwgMSwgMjMyLCAxOTAsIDE3OSwgMTE3LCA1LCAyNDIsIDUxLCAKKyAgICAxNzksIDI1LCA1LCAyNTUsIDgyLCAxNzksIDI1LCA1LCA3NCwgMTc5LCAyNSwgNSwgMjM2LCA0MCwgMTc5LCAyNSwgNSwgNjksIAorICAgIDE3OSwgMjUsIDUsIDIxNCwgMTE4LCAxNzksIDI1LCA1LCAxNDksIDE1MywgMTc5LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTc5LCAyNSwgNSwgMTQ5LCAxNTYsIDE3OSwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3OSwgMjUsIDUsIDc2LCAxNzksIDI1LCAKKyAgICA1LCAyNDUsIDIxNywgMTc5LCAyNSwgNSwgMjU0LCAyMTAsIDE3OSwgMjUsIDUsIDc4LCAxNzksIDI1LCA1LCAyMjYsIDE4NywgCisgICAgMTc5LCAyNSwgNSwgMjUzLCAyMDAsIDE3OSwgNSwgMjEzLCAxNTIsIDE3OSwgMjQ4LCAxODYsIDE3OSwgNTIsIDI0OCwgMTg2LCAKKyAgICAxNzksIDIxLCAyMTAsIDg2LCAxNzksIDIxLCAxMTEsIDE3OSwgMjEsIDEwNSwgMTc5LCAyMSwgMTU4LCAxNzksIDIxLCAxNjEsIAorICAgIDE3OSwgMjEsIDE5MCwgMTc5LCAyMSwgMTk1LCAxNzksIDIxLCAxOTksIDE3OSwgMjEsIDE5NiwgMTc5LCAyMSwgMjAxLCAzOCwgCisgICAgODQsIDIxLCAyMTAsIDg2LCAzOCwgODQsIDIxLCAxMTEsIDM4LCA4NCwgMjEsIDEwNSwgMzgsIDg0LCAyMSwgMTU4LCAzOCwgCisgICAgODQsIDIxLCAxNjEsIDM4LCA4NCwgMjEsIDE5MCwgMzgsIDg0LCAyMSwgMTk1LCAzOCwgODQsIDIxLCAxOTksIDM4LCA4NCwgCisgICAgMjEsIDE5NiwgMzgsIDg0LCAyMSwgMjAxLCAzOCwgODQsIDEsIDYxLCAzOCwgODQsIDEsIDY5LCAzOCwgODQsIDEsIDE3NiwgCisgICAgMzgsIDg0LCAxLCAxOTgsIDM4LCA4NCwgMSwgMTkxLCAzOCwgODQsIDEsIDIwNSwgMzgsIDg0LCAxLCAyMTMsIDE3NiwgMzgsIAorICAgIDg0LCA1LCAyNTMsIDE4MywgODQsIDUsIDIxOSwgMTksIDI1MSwgNywgODQsIDUsIDI1MSwgOCwgMjEzLCAxNTIsIDg0LCA1LCAKKyAgICA1MiwgMjUxLCA4LCAyMTMsIDE1MiwgODQsIDUsIDI1MSwgOCwgMTA1LCA4NCwgNSwgMjUxLCA4LCAxNTgsIDg0LCA1LCAyNTEsIAorICAgIDgsIDI1MywgMTgzLCA4NCwgNSwgMjI0LCAxMjcsIDg0LCAyNDMsIDEwNywgMjQ0LCAxMTEsIDg0LCAyNTAsIDI0NiwgODQsIAorICAgIDI0MSwgMjM3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAyMTAsIDg2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxMTEsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDEwNSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTU4LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDIxLCAxNjEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5MCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk1LCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5NiwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAyMSwgMjAxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE3NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMzQsIAorICAgIDEzOCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDMsIDE0MiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjksIDgyLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIwNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjAsIDEwNCwgMjM0LCAxOTQsIAorICAgIDIzMiwgMjQ4LCAxLCAyMTAsIDExNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjcsIDE2OSwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyMTcsIDEwNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDAsIDIzMywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAKKyAgICAxOTgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTkxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNSwgMTUwLCAyMzQsIAorICAgIDE5NCwgMjMyLCAyNDgsIDEsIDE4NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDgsIDIyOSwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyNTIsIDE5OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMDUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTkyLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIzMywgMTQxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIxMiwgNjUsIDIzNCwgCisgICAgMTk0LCAyMzIsIDI0OCwgMSwgMjE2LCAyMDksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTYyLCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDEsIDIxNCwgMjcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjUxLCA0MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAKKyAgICA2MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjYsIDIzOCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCA3NCwgMjM0LCAxOTQsIAorICAgIDIzMiwgMjQ4LCAxLCAyMjYsIDE4NywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgMjE0LCAyMTQsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMjUsIDc2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCA2OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgMjQ1LCAKKyAgICAyMTcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDc4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjI1LCAzMywgMjM0LCAKKyAgICAxOTQsIDIzMiwgMjQ4LCAxMzgsIDI1MSwgMjAsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMTM4LCAyNTEsIDIxLCAyMjUsIDMzLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDUsIDI0OSwgODUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgNSwgMjE5LCAyMDEsIDIyMywgOTYsIAorICAgIDEsIDE3NiwgMjIzLCA5NiwgMSwgMjQzLCAxNDIsIDIyMywgOTYsIDEsIDIyOSwgODIsIDIyMywgOTYsIDEsIDIxNywgMTA2LCAKKyAgICAyMjMsIDk2LCAxLCAyNDgsIDIyOSwgMjIzLCA5NiwgMSwgMTk4LCAyMjMsIDk2LCAxLCAxOTEsIDIyMywgOTYsIDEsIDI1MiwgCisgICAgMTk5LCAyMjMsIDk2LCAxLCAxODYsIDIyMywgOTYsIDEsIDI1MSwgNDEsIDIyMywgOTYsIDEsIDIzNSwgMTQ3LCAyMjMsIDk2LCAKKyAgICAxLCAyMjcsIDE2OSwgMjIzLCA5NiwgMSwgMjA2LCAyMjMsIDk2LCAxLCAyMDUsIDIyMywgOTYsIDEsIDIzMywgMTQxLCAyMjMsIAorICAgIDk2LCAxLCAxOTIsIDIyMywgOTYsIDEsIDIxMiwgNjUsIDIyMywgOTYsIDEsIDE2MiwgMjIzLCA5NiwgMSwgMjMxLCAxMjksIAorICAgIDIyMywgOTYsIDEsIDIyOSwgNjEsIDIyMywgOTYsIDEsIDIyOSwgMTUzLCAyMjMsIDk2LCAxLCAyMjcsIDEzOSwgMjIzLCA5NiwgCisgICAgMSwgNjEsIDIyMywgOTYsIDI1LCA1LCA3NCwgMjIzLCA5NiwgMjUsIDUsIDY5LCAyMjMsIDk2LCAyNSwgNSwgNzYsIDIyMywgCisgICAgOTYsIDI1LCA1LCAyNTQsIDIxMCwgMjIzLCA5NiwgMjUsIDUsIDc4LCAyMjMsIDk2LCAyNSwgNSwgMjUzLCAyMDAsIDIyMywgCisgICAgOTYsIDI1LCA1LCAyNDUsIDYzLCAyMjMsIDk2LCAyNSwgNSwgMjQ1LCAyNDEsIDIyMywgOTYsIDExNywgNSwgMjI5LCA4NCwgCisgICAgMjIzLCA5NiwgMTE3LCA1LCAyMzAsIDMwLCAyMjMsIDk2LCAxMTcsIDUsIDE1MywgMjIzLCA5NiwgMTE3LCA1LCAyNDIsIDY3LCAKKyAgICAyMjMsIDk2LCAyMTMsIDE1MiwgMjIzLCA5NiwgMjIxLCAxNzUsIDc5LCAyNCwgMTAwLCAyMTYsIDk4LCAyNCwgMTAwLCAyMTYsIAorICAgIDk3LCAyNCwgMTAwLCAyMTYsIDk1LCAyNCwgMTAwLCAyMTYsIDEwMCwgMjQsIDEwMCwgMjIzLCAyNCwgMjQsIDEwMCwgMjIzLCAKKyAgICA4LCAyNCwgMTAwLCAyMjMsIDMsIDI0LCAxMDAsIDIyMywgNSwgMjQsIDEwMCwgMjIzLCAyMSwgMjQsIDEwMCwgMjIzLCAxNCwgCisgICAgMjQsIDEwMCwgMjIzLCA3LCAyNCwgMTAwLCAyMjMsIDI2LCAyNCwgMTAwLCAyMjMsIDksIDI0LCAxMDAsIDIyMywgMjgsIDI0LCAKKyAgICAxMDAsIDIyMywgMjUsIDI0LCAxMDAsIDIzMCwgMjE4LCAyNCwgMTAwLCAyMzAsIDIwOSwgMjQsIDEwMCwgMjMwLCAyMTIsIAorICAgIDI0LCAxMDAsIDIyNSwgODMsIDI0LCAxMDAsIDIyNSwgOTQsIDI0LCAxMDAsIDIyNSwgOTUsIDI0LCAxMDAsIDIxOCwgMjA5LCAKKyAgICAyNCwgMTAwLCAyMzYsIDUzLCAyNCwgMTAwLCAyMzYsIDYwLCAyNCwgMTAwLCAyMTgsIDIyMCwgMjQsIDEwMCwgMjE4LCAyMDcsIAorICAgIDI0LCAxMDAsIDIyNSwgMTMzLCAyNCwgMTAwLCAyNDEsIDE3NCwgMjQsIDEwMCwgMjE4LCAyMDQsIDE1NSwgNSwgMjI2LCAzMSwgCisgICAgMTU1LCA1LCAyNTAsIDE5NSwgMTU1LCA1LCAyMzMsIDcyLCAxNTUsIDUsIDIxMSwgMjQzLCAxNTUsIDEsIDYxLCAxNTUsIDEsIAorICAgIDI0MCwgMTYxLCAyMzQsIDE5NywgMTU1LCAxLCA3NCwgMTU1LCAxLCAyMzYsIDQwLCAxNTUsIDEsIDY5LCAxNTUsIDEsIDIyNiwgCisgICAgOTQsIDI1MCwgMTcxLCAxNTUsIDEsIDIyOSwgODMsIDIzMywgMzQsIDE1NSwgMSwgMjI5LCA4MywgMjMzLCAzNSwgMjIzLCAKKyAgICAxNDUsIDE1NSwgMSwgNzYsIDE1NSwgMSwgMjU0LCAyMTAsIDE1NSwgMSwgNzgsIDE1NSwgMSwgMTc2LCAxNTUsIDEsIDIzNSwgCisgICAgMTksIDIyMSwgMjMwLCAxNTUsIDEsIDIzNSwgMTksIDIzMCwgNzEsIDE1NSwgMSwgMjQzLCAxNDIsIDE1NSwgMSwgMjQzLCAKKyAgICAxNDMsIDIzMCwgNzEsIDE1NSwgMSwgMjI5LCA4MiwgMTU1LCAxLCAyNTEsIDQxLCAxNTUsIDEsIDI1MSwgNDIsIDIzMCwgNzEsIAorICAgIDE1NSwgMSwgMjM1LCAxNDcsIDE1NSwgMSwgMjI3LCAxNzAsIDIzMCwgNzEsIDE1NSwgMSwgMjM1LCAxNDgsIDIzMSwgMjEyLCAKKyAgICAxNTUsIDEsIDIyNywgMTY5LCAxNTUsIDEsIDIxNSwgMTU3LCAxNTUsIDEsIDIxNSwgMTU4LCAyMzEsIDIxMiwgMTU1LCAxLCAKKyAgICAyNDgsIDE0MywgMTU1LCAxLCAyNDgsIDE0NCwgMjMxLCAyMTIsIDE1NSwgMSwgMjI5LCAyMzQsIDIzMCwgNzEsIDE1NSwgMSwgCisgICAgMjE3LCAxMDYsIDE1NSwgMSwgMjE3LCAxMDcsIDIzMCwgNzEsIDE1NSwgMSwgMjQ4LCAyMjksIDE1NSwgMSwgMjQ4LCAyMzAsIAorICAgIDIzMSwgMjEyLCAxNTUsIDEsIDE5OCwgMTU1LCAxLCAxOTEsIDE1NSwgMSwgMjI2LCA5NCwgMjMwLCA3MSwgMTU1LCAxLCAKKyAgICAyNTIsIDE5OSwgMTU1LCAxLCAyNTIsIDIwMCwgMjMwLCA3MSwgMTU1LCAxLCAxODYsIDE1NSwgMSwgMTkyLCAxNTUsIDEsIAorICAgIDIwNSwgMTU1LCAxLCAyMjMsIDE5MSwgMjU0LCAyMTksIDE1NSwgMSwgMjMzLCAxNDEsIDE1NSwgMSwgMjEyLCA2NSwgMTU1LCAKKyAgICAxLCAyMjIsIDM2LCAyMzAsIDcxLCAxNTUsIDEsIDIyMiwgMzYsIDIzMSwgMjEyLCAxNTUsIDEsIDIwNiwgMTU1LCAxLCAxNjIsIAorICAgIDE1NSwgNSwgMjUwLCAxOTYsIDIxNiwgMjUxLCAxNTUsIDI1LCA1LCAyMTcsIDQ4LCAxNTUsIDI1LCA1LCAyMTYsIDM2LCAKKyAgICAxNTUsIDI1LCA1LCAyMTEsIDE5MCwgMTU1LCAyNSwgNSwgMjExLCAxOTEsIDIzMSwgNzQsIDE1NSwgMjUsIDUsIDIxOCwgNDgsIAorICAgIDE1NSwgMjUsIDUsIDIxOCwgNDksIDIzMSwgNjIsIDE1NSwgMjUsIDUsIDIxNywgNjYsIDE1NSwgMjUsIDUsIDI0NywgMjAyLCAKKyAgICAyMzAsIDcwLCAxNTUsIDI1LCA1LCAyMjUsIDE4NywgMTU1LCAxMTcsIDUsIDIzNCwgMTY0LCAxNTUsIDExNywgNSwgMjI1LCAKKyAgICAxOTksIDE1NSwgMTE3LCA1LCAyNTEsIDI3LCAxNTUsIDIyNiwgNDQsIDE1NSwgNDMsIDIyMywgNzIsIDE1NSwgNDQsIDIyMywgCisgICAgNzIsIDE1NSwgMjI2LCA4MywgMjU0LCAxMjUsIDE1NSwgMjI2LCA4MywgMjMxLCAyMjksIDE1NSwgMjI2LCA4MywgMjMyLCAKKyAgICA5MywgMTU1LCAyMjYsIDgzLCAyMTEsIDIzOCwgMTU1LCAyMjYsIDgzLCAyMjYsIDQ1LCAxNTUsIDIyNiwgODMsIDIzMiwgCisgICAgMjExLCAxNTUsIDIyNiwgODMsIDIzMiwgODcsIDE1NSwgMjI2LCA4MywgMjU1LCAyLCAxNTUsIDIyNiwgODMsIDI1NSwgMywgCisgICAgMjU1LCAyLCAxNTUsIDIyNiwgODMsIDIyNSwgNTQsIDE1NSwgMjE1LCA5NCwgMjI2LCA4MywgMjI1LCA1NCwgMTU1LCAyMjYsIAorICAgIDQwLCAxNTUsIDIxLCAyMTAsIDg2LCAxNTUsIDIxLCAxMTEsIDE1NSwgMjEsIDEwNSwgMTU1LCAyMSwgMTU4LCAxNTUsIDIxLCAKKyAgICAxNjEsIDE1NSwgMjEsIDE5MCwgMTU1LCAyMSwgMTk1LCAxNTUsIDIxLCAxOTksIDE1NSwgMjEsIDE5NiwgMTU1LCAyMSwgCisgICAgMjAxLCAxNTUsIDIyNiwgODMsIDIxNiwgNzAsIDIxNSwgMTA3LCAxNTUsIDIyNiwgODMsIDIzNSwgMTc0LCAxNzIsIDEsIDYxLCAKKyAgICAxNzIsIDEsIDc0LCAxNzIsIDEsIDY5LCAxNzIsIDEsIDc2LCAxNzIsIDEsIDI1NCwgMjEwLCAxNzIsIDEsIDc4LCAxNzIsIDEsIAorICAgIDE3NiwgMTcyLCAxLCAyMzQsIDEzOCwgMTcyLCAxLCAyNDMsIDE0MiwgMTcyLCAxLCAyNDMsIDAsIDE3MiwgMSwgMjI4LCAKKyAgICAyNTAsIDE3MiwgMSwgMjI5LCA4MiwgMTcyLCAxLCAyNTAsIDE2NSwgMTcyLCAxLCAyNTAsIDEyMCwgMTcyLCAxLCAyMzUsIAorICAgIDE0NywgMTcyLCAxLCAyMzUsIDEyMCwgMTcyLCAxLCAyMjgsIDI0MCwgMTcyLCAxLCAyMjgsIDI0MiwgMTcyLCAxLCAyMjgsIAorICAgIDI0MSwgMTcyLCAxLCAyMTcsIDEwNiwgMTcyLCAxLCAyMTYsIDIwOSwgMTcyLCAxLCAyNDgsIDIyOSwgMTcyLCAxLCAyNDgsIAorICAgIDMzLCAxNzIsIDEsIDIyNywgMjExLCAxNzIsIDEsIDE5OCwgMTcyLCAxLCAyNDgsIDE0MywgMTcyLCAxLCAxOTEsIDE3MiwgMSwgCisgICAgMjI0LCAyMjMsIDE3MiwgMSwgMjI1LCAxNTAsIDE3MiwgMSwgMjUyLCAxOTksIDE3MiwgMSwgMjUyLCAyNiwgMTcyLCAxLCAKKyAgICAyMzAsIDEwMCwgMTcyLCAxLCAxODYsIDE3MiwgMSwgMjUyLCAxMTksIDE3MiwgMSwgMTkyLCAxNzIsIDEsIDIwNSwgMTcyLCAKKyAgICAxLCAyMzMsIDE0MSwgMTcyLCAxLCAyMTQsIDI3LCAxNzIsIDEsIDIxOCwgMjI1LCAxNzIsIDEsIDIwNiwgMTcyLCAxLCAxNjIsIAorICAgIDE3MiwgMjUsIDUsIDI1NSwgODIsIDE3MiwgMjUsIDUsIDc0LCAxNzIsIDI1LCA1LCAyMzYsIDQwLCAxNzIsIDI1LCA1LCAKKyAgICAyNDUsIDIwMywgMTcyLCAyNSwgNSwgNjksIDE3MiwgMjUsIDUsIDIyNiwgMjM4LCAxNzIsIDI1LCA1LCA3OCwgMTcyLCAyNSwgCisgICAgNSwgMjU0LCAyMTAsIDE3MiwgMjUsIDUsIDI1MywgMjAwLCAxNzIsIDI1LCA1LCAyMTQsIDIxNCwgMTcyLCAxMTcsIDUsIAorICAgIDE5MiwgMTcyLCAxMTcsIDUsIDIwNSwgMTcyLCAxMTcsIDUsIDIzMywgMTQxLCAxNzIsIDExNywgNSwgMjEyLCA2NSwgMTcyLCAKKyAgICAxLCA0MCwgMjM1LCAyOSwgMTcyLCAxLCA0MCwgMjQzLCAyMDksIDE3MiwgMSwgNDAsIDIyOSwgODQsIDE3MiwgMTE3LCA1LCAKKyAgICA0MCwgMjI5LCA4NCwgMTcyLCAxLCA0MCwgMjUwLCAxNjYsIDE3MiwgMSwgNDAsIDIxNywgMTUzLCAxNzIsIDEsIDQwLCAyMzAsIAorICAgIDMwLCAxNzIsIDEsIDQwLCAyMjYsIDEwOSwgMTcyLCAxLCA0MCwgMjExLCAxMTcsIDE3MiwgMSwgNDAsIDE1MywgMTcyLCAxLCAKKyAgICA0MCwgMTU2LCAxNzIsIDEsIDQwLCAyMTgsIDIyOCwgMTcyLCAxMTcsIDUsIDQwLCAxOTQsIDE3MiwgMTE3LCA1LCA0MCwgCisgICAgMjQyLCA2NywgMTcyLCAyMSwgMjEwLCA4NiwgMTcyLCAyMSwgMTExLCAxNzIsIDIxLCAxMDUsIDE3MiwgMjEsIDE1OCwgMTcyLCAKKyAgICAyMSwgMTYxLCAxNzIsIDIxLCAxOTAsIDE3MiwgMjEsIDE5NSwgMTcyLCAyMSwgMTk5LCAxNzIsIDIxLCAxOTYsIDE3MiwgMjEsIAorICAgIDIwMSwgMTcyLCAyMjQsIDE0NCwgMjE4LCAyNTMsIDE3MiwgMjI0LCAxNDQsIDI0OCwgMTg2LCAxNzIsIDIyNCwgMTQ0LCA1MiwgCisgICAgMjQ4LCAxODYsIDE3MiwgMjI0LCAxNDQsIDIxNSwgMjEyLCAyNDgsIDE4NiwgNjgsIDEsIDIzNCwgMTMyLCAyNDMsIDE0MiwgCisgICAgNjgsIDEsIDIzNCwgMTMyLCAyNTEsIDQxLCA2OCwgMSwgMjM0LCAxMzIsIDI1MCwgMTY1LCA2OCwgMSwgMjM0LCAxMzIsIAorICAgIDIzNSwgMTQ3LCA2OCwgMSwgMjM0LCAxMzIsIDIzNSwgMTIwLCA2OCwgMSwgMjM0LCAxMzIsIDIyNywgMTY5LCA2OCwgMSwgCisgICAgMjM0LCAxMzIsIDIxNSwgMTU3LCA2OCwgMSwgMjM0LCAxMzIsIDIxNSwgMTQ1LCA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMTQzLCAKKyAgICA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMTI3LCA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMzMsIDY4LCAxLCAyMzQsIDEzMiwgCisgICAgMTk4LCA2OCwgMSwgMjM0LCAxMzIsIDIwNiwgNjgsIDEsIDIzNCwgMTMyLCAxNjIsIDY4LCAxLCAyMzQsIDEzMiwgMjQxLCAKKyAgICAxOTYsIDY4LCAxLCAyMzQsIDEzMiwgMjQ0LCAyMDQsIDY4LCA1OCwgMSwgMjM0LCAxMzIsIDIyMywgMTEyLCA2OCwgMSwgCisgICAgMjM0LCAxMzIsIDIxMSwgMTY1LCA2OCwgMSwgMjM0LCAxMzIsIDIxMCwgMTE2LCA2OCwgMSwgMjM0LCAxMzIsIDIwNSwgNjgsIAorICAgIDIzMiwgMTUxLCAyMzQsIDEzMiwgMjI3LCAxLCA2OCwgMjMyLCAxNTEsIDIzNCwgMTMyLCAyMjQsIDQ2LCA2OCwgMjMyLCAKKyAgICAxNTEsIDIzNCwgMTMyLCAyNDEsIDEyOCwgNjgsIDE2LCAyNTQsIDE5OSwgMjQ1LCAzOCwgNjgsIDE2LCAyNTQsIDE5OSwgCisgICAgMTExLCA2OCwgMTYsIDI1NCwgMTk5LCAxMDUsIDY4LCAxLCAyNTQsIDE5OSwgMjA1LCA2OCwgNSwgMjI2LCAyNywgMjM0LCAKKyAgICAyMTksIDIxNiwgMzEsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAzNCwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDM0LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIzNCwgMTExLCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTExLCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgCisgICAgMTIwLCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTIwLCAzOSwgMjA4LCAxLCAxMjEsIDI0MiwgMTgxLCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDI0MiwgMTgxLCAzOSwgMjA4LCAxLCAxMjEsIDIyOSwgOSwgMzksIDIwOCwgMSwgMTI1LCAyMjksIDksIDM5LCAyMDgsIAorICAgIDEsIDEyMSwgMjQ5LCAyNDYsIDM5LCAyMDgsIDEsIDEyNSwgMjQ5LCAyNDYsIDM5LCAyMDgsIDEsIDEyMSwgMjUwLCA5NCwgCisgICAgMzksIDIwOCwgMSwgMTI1LCAyNTAsIDk0LCAzOSwgMjA4LCAxLCAxMjEsIDIxOSwgNjAsIDM5LCAyMDgsIDEsIDEyNSwgMjE5LCAKKyAgICA2MCwgMzksIDIwOCwgMSwgMTIxLCAyMjcsIDEzOCwgMzksIDIwOCwgMSwgMTI1LCAyMjcsIDEzOCwgMzksIDIwOCwgMSwgCisgICAgMTIxLCAyNDcsIDE1MywgMzksIDIwOCwgMSwgMTI1LCAyNDcsIDE1MywgMzksIDIwOCwgMSwgMTIxLCAxMTIsIDM5LCAyMDgsIAorICAgIDEsIDEyNSwgMTEyLCAzOSwgMjA4LCAxLCAxMjEsIDIxNiwgMTU3LCAzOSwgMjA4LCAxLCAxMjUsIDIxNiwgMTU3LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIyOCwgNzksIDM5LCAyMDgsIDEsIDEyNSwgMjI4LCA3OSwgMzksIDIwOCwgMSwgMTIxLCAyNTEsIAorICAgIDIxMywgMzksIDIwOCwgMSwgMTI1LCAyNTEsIDIxMywgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDE5LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDIyNSwgMTksIDM5LCAyMDgsIDEsIDEyMSwgMjI1LCAxMjQsIDM5LCAyMDgsIDEsIDEyNSwgMjI1LCAxMjQsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjQ0LCA1MSwgMzksIDIwOCwgMSwgMTI1LCAyNDQsIDUxLCAzOSwgMjA4LCAxLCAxMjEsIDIzMCwgCisgICAgMTY2LCAzOSwgMjA4LCAxLCAxMjUsIDIzMCwgMTY2LCAzOSwgMjA4LCAxLCAxMjEsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAxMjEsIDIyMiwgMjEzLCAzOSwgMjA4LCAxLCAxMjUsIDIyMiwgMjEzLCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIzMiwgMTYyLCAzOSwgMjA4LCAxLCAxMjUsIDIzMiwgMTYyLCAzOSwgMjA4LCAxLCAxMjEsIDIxMywgCisgICAgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIxMywgMTM4LCAzOSwgMjA4LCAxLCAxMjEsIDI0MSwgNzUsIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjQxLCA3NSwgMzksIDIwOCwgMSwgMTIxLCA3OCwgMzksIDIwOCwgMSwgMTI1LCA3OCwgMzksIDIwOCwgMjMxLCAKKyAgICAyMDksIDIzNCwgMjM2LCAzOSwgMjA4LCAyNSwgMjU1LCA4MiwgMzksIDIwOCwgMjUsIDc0LCAzOSwgMjA4LCAyNSwgMjE0LCAKKyAgICAyMTQsIDM5LCAyMDgsIDI1LCA2OSwgMzksIDIwOCwgMjUsIDc2LCAzOSwgMjA4LCAyNSwgNzgsIDM5LCAyMDgsIDIzMSwgCisgICAgMjA5LCAyMzQsIDExNCwgMzksIDIwOCwgMjUsIDI0MCwgMTI2LCAzOSwgMjA4LCAyNSwgMjE0LCAyMTMsIDM5LCAyMDgsIDI1LCAKKyAgICAyMTQsIDIyOSwgMzksIDIwOCwgMjUsIDI1MywgMTk4LCAzOSwgMjA4LCAyNSwgMjUzLCAxNzUsIDM5LCAyMDgsIDI1LCAyNTQsIAorICAgIDEzMSwgMzksIDIwOCwgMjUsIDI1NCwgMTQ0LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA5LCAyNDUsIDE4OCwgMzksIDIwOCwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjI3LCAyMTAsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDksIDIxNiwgMTU3LCAzOSwgMjA4LCAxMzgsIAorICAgIDIzMSwgMjA5LCAyMTksIDQ0LCAzOSwgMjA4LCAxNiwgMjM0LCAxOSwgMzksIDIwOCwgMTYsIDIyNywgMjEwLCAzOSwgMjA4LCAKKyAgICAxNiwgMjIxLCAyNTUsIDM5LCAyMDgsIDE2LCAyNDEsIDc2LCAyNDEsIDcxLCAzOSwgMjA4LCAxNiwgMjM0LCAyOCwgMjM0LCAKKyAgICAyNywgMTg4LCAxODcsIDEsIDc2LCAxODgsIDE4NywgMSwgNzgsIDE4OCwgMTg3LCAxLCAyNTAsIDE2NSwgMTg4LCAxODcsIDEsIAorICAgIDIyNywgMTY5LCAxODgsIDE4NywgMSwgMjE1LCAxNTcsIDE4OCwgMTg3LCAxLCAyMTUsIDE0NSwgMTg4LCAxODcsIDEsIDI0OCwgCisgICAgMTQzLCAxODgsIDE4NywgMSwgMjQ4LCAxMjcsIDE4OCwgMTg3LCAxLCAyMjgsIDExNSwgMTg4LCAxODcsIDEsIDIyMCwgMTA0LCAKKyAgICAxODgsIDE4NywgMSwgMjE4LCAyMjUsIDE4OCwgMTg3LCAyNSwgNSwgMjM2LCA0MCwgMTg4LCAxODcsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTg4LCAxODcsIDI1LCA1LCAyNTUsIDQ2LCAxODgsIDE4NywgMjUsIDUsIDI1MywgMjAwLCAxODgsIDE4NywgMjUsIAorICAgIDUsIDI1NSwgMzksIDE4OCwgMTg3LCAyNTAsIDEzMywgMTg4LCAxODcsIDI1NCwgMjE1LCAyMzQsIDEwNCwgMTg4LCAxODcsIAorICAgIDI1NCwgMTExLCAxODgsIDE4NywgMywgMjIzLCA3NywgNzksIDE4OCwgMTg3LCAyMTEsIDIwOSwgMjIzLCA3NywgNzksIDE4OCwgCisgICAgMTg3LCAyNSwgNSwgMjEzLCAxNDcsIDE4OCwgMTg3LCAyMTMsIDE1MiwgMjksIDMsIDIxNSwgMTM4LCAyOSwgMywgMjE1LCAKKyAgICAxNDEsIDI5LCAzLCAyMTUsIDE0NCwgMjksIDMsIDIxNSwgMTQyLCAyOSwgMywgMjE1LCAxNDMsIDI5LCAzLCAyMTUsIDE0MCwgCisgICAgMjksIDMsIDI0OCwgMTIxLCAyOSwgMywgMjQ4LCAxMjMsIDI5LCAzLCAyNDgsIDEyNiwgMjksIDMsIDI0OCwgMTI0LCAyOSwgCisgICAgMywgMjQ4LCAxMjUsIDI5LCAzLCAyNDgsIDEyMiwgMjksIDMsIDI0NiwgMzYsIDI5LCAzLCAyNDYsIDM5LCAyOSwgMywgMjQ2LCAKKyAgICA0NSwgMjksIDMsIDI0NiwgNDMsIDI5LCAzLCAyNDYsIDQ0LCAyOSwgMywgMjQ2LCAzNywgMjksIDMsIDI1MCwgMjEyLCAyOSwgCisgICAgMywgMjUwLCAyMDYsIDI5LCAzLCAyNTAsIDIwOCwgMjksIDMsIDI1MCwgMjExLCAyOSwgMywgMjUwLCAyMDksIDI5LCAzLCAKKyAgICAyNTAsIDIxMCwgMjksIDMsIDI1MCwgMjA3LCAyOSwgMywgMjUyLCAxMTksIDI5LCAzLCAyNTIsIDk4LCAyOSwgMywgMjUyLCAKKyAgICAxMTAsIDI5LCAzLCAyNTIsIDExOCwgMjksIDMsIDI1MiwgMTEzLCAyOSwgMywgMjUyLCAxMTQsIDI5LCAzLCAyNTIsIDEwMiwgCisgICAgMTg4LCAxODcsIDEsIDIzNCwgMjUsIDE4OCwgMTg3LCAxLCAyMjEsIDI1NSwgMTg4LCAxODcsIDEsIDIzMywgMTE1LCAxODgsIAorICAgIDE4NywgMSwgMjMwLCAxNzcsIDE4OCwgMTg3LCAxLCAxOTEsIDE4OCwgMTg3LCAxLCAxOTgsIDE4OCwgMTg3LCAxLCAyNTAsIAorICAgIDExMCwgMTg4LCAxODcsIDEsIDIxNiwgOTEsIDE4OCwgMTg3LCAxLCAyMzQsIDEwNywgMTg4LCAxODcsIDEsIDIyOCwgMjU1LCAKKyAgICAxODgsIDE4NywgMSwgMjE2LCAxNTEsIDE4OCwgMTg3LCAxLCAyMTIsIDYwLCAxODgsIDE4NywgMSwgMjExLCA2OSwgMTg4LCAKKyAgICAxODcsIDEsIDI0MCwgMjIzLCAxODgsIDE4NywgMSwgMjE0LCAxOTAsIDE4OCwgMTg3LCAxLCA3NCwgMTg4LCAxODcsIDEsIAorICAgIDIyNSwgMTQ1LCAxODgsIDE4NywgMSwgMjUzLCAyMTAsIDE4OCwgMTg3LCAxLCAyNDIsIDE3NCwgMTg4LCAxODcsIDEsIDIzNSwgCisgICAgMTE4LCAxODgsIDE4NywgMSwgMjIzLCAxNjksIDE4OCwgMTg3LCAxLCAyNTIsIDE5OSwgMTg4LCAxODcsIDEsIDIzNSwgMTA2LCAKKyAgICAxODgsIDE4NywgMSwgMjQ3LCAyMjcsIDE4OCwgMTg3LCAxLCAyNDIsIDIyOCwgMTg4LCAxODcsIDEsIDI0OCwgMTMsIDE4OCwgCisgICAgMTg3LCAxLCAyNTIsIDI0LCAxODgsIDE4NywgMSwgMjM0LCAyNiwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMzMsIDExNiwgCisgICAgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMzAsIDE3OCwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMjYsIDk0LCAyMzIsIAorICAgIDEzNCwgMTg4LCAxODcsIDEsIDIyOSwgMjM0LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIxNiwgOTIsIDIzMiwgMTM0LCAKKyAgICAxODgsIDE4NywgMSwgMjI5LCAwLCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDI0MCwgMTYxLCAyMzIsIDEzNCwgMTg4LCAxODcsIAorICAgIDI1LCA1LCAyMjYsIDE5OSwgMTg4LCAxODcsIDI1LCA1LCAyMzYsIDQsIDE4OCwgMTg3LCAyNSwgNSwgMjU0LCAxMzAsIDE4OCwgCisgICAgMTg3LCAyNSwgNSwgMjExLCAzOCwgMTg4LCAxODcsIDI1LCA1LCAyMTksIDM0LCAxODgsIDE4NywgMjUsIDUsIDIxNCwgMTg3LCAKKyAgICAxODgsIDE4NywgMjUsIDUsIDI1MCwgMTMxLCAxODgsIDE4NywgMjUsIDUsIDIyNywgMTk1LCAxODgsIDE4NywgMjUwLCAxMzIsIAorICAgIDE4OCwgMTg3LCAyMzIsIDkwLCAyMzUsIDE1NiwgMTg4LCAxODcsIDI1NCwgNTQsIDIzNSwgMTU2LCAxODgsIDE4NywgMjEsIAorICAgIDIxMCwgODYsIDE4OCwgMTg3LCAyMSwgMTExLCAxODgsIDE4NywgMjEsIDEwNSwgMTg4LCAxODcsIDIxLCAxNTgsIDE4OCwgCisgICAgMTg3LCAyMSwgMTYxLCAxODgsIDE4NywgMjEsIDE5MCwgMTg4LCAxODcsIDIxLCAxOTUsIDE4OCwgMTg3LCAyMSwgMTk5LCAKKyAgICAxODgsIDE4NywgMjEsIDE5NiwgMTg4LCAxODcsIDIxLCAyMDEsIDI0LCAxNDMsIDIyNywgODEsIDI0LCAxNDMsIDIyNywgODYsIAorICAgIDI0LCAxNDMsIDIxMCwgMjQzLCAyNCwgMTQzLCAyMTAsIDI0MiwgMjQsIDE0MywgMjEwLCAyNDEsIDI0LCAxNDMsIDIxNSwgCisgICAgMjMsIDI0LCAxNDMsIDIxNSwgMjYsIDI0LCAxNDMsIDIxMCwgMjEwLCAyNCwgMTQzLCAyMTAsIDIwNiwgMjQsIDE0MywgMjQ1LCAKKyAgICA2MiwgMjQsIDE0MywgMjQ1LCA2MCwgMjQsIDE0MywgMjQ1LCA2MSwgMjQsIDE0MywgMjQ1LCA1OCwgMjQsIDE0MywgMjQwLCAKKyAgICAxNTEsIDI0LCAxNDMsIDI0MCwgMTUwLCAyNCwgMTQzLCAyNDAsIDE0OCwgMjQsIDE0MywgMjQwLCAxNDksIDI0LCAxNDMsIAorICAgIDI0MCwgMTU0LCAyNCwgMTQzLCAyNDAsIDE0NywgMjQsIDE0MywgMjQwLCAxNDYsIDI0LCAxNDMsIDI0MCwgMTU2LCAyNCwgCisgICAgMTQzLCAyNTQsIDQxLCAyNCwgMTQzLCAyNTQsIDQwLCAyNCwgOTAsIDIyOCwgMjI0LCAyNCwgOTAsIDIyOCwgMjMwLCAyNCwgCisgICAgOTAsIDIxOCwgMjA2LCAyNCwgOTAsIDIxOCwgMjA1LCAyNCwgOTAsIDIxNiwgOTcsIDI0LCA5MCwgMjE2LCA5NSwgMjQsIDkwLCAKKyAgICAyMTYsIDk0LCAyNCwgOTAsIDIxNiwgMTAwLCAyNCwgOTAsIDIxNiwgMTAxLCAyNCwgOTAsIDIxNiwgOTMsIDI0LCA5MCwgCisgICAgMjIzLCA4LCAyNCwgOTAsIDIyMywgMjMsIDI0LCA5MCwgMjE4LCAyMTIsIDI0LCA5MCwgMjIzLCAyMCwgMjQsIDkwLCAyMjMsIAorICAgIDEwLCAyNCwgOTAsIDIyMywgMTIsIDI0LCA5MCwgMjIyLCAyNTUsIDI0LCA5MCwgMjIzLCAwLCAyNCwgOTAsIDIzNCwgMjI0LCAKKyAgICAyNCwgOTAsIDIzMCwgMjE3LCAyNCwgOTAsIDIzMCwgMjExLCAyNCwgOTAsIDIxOCwgMjE2LCAyNCwgOTAsIDIzMCwgMjE0LCAKKyAgICAyNCwgOTAsIDIzMCwgMjIwLCAyNCwgOTAsIDIyNSwgNzksIDI0LCA5MCwgMjI1LCA4OCwgMjQsIDkwLCAyMjUsIDkyLCAyNCwgCisgICAgOTAsIDIxOCwgMjE0LCAyNCwgOTAsIDIyNSwgODIsIDI0LCA5MCwgMjI1LCA5NiwgMjQsIDkwLCAyMjUsIDk3LCAyNCwgOTAsIAorICAgIDIxOSwgMTQyLCAyNCwgOTAsIDIxOSwgMTQ1LCAyNCwgOTAsIDIxOCwgMjEwLCAyNCwgOTAsIDIxOCwgMjA4LCAyNCwgOTAsIAorICAgIDIxOSwgMTQwLCAyNCwgOTAsIDIxOSwgMTQ4LCAyNCwgOTAsIDIxOSwgMTQ5LCAyNCwgOTAsIDIxOSwgMTM0LCAyNCwgOTAsIAorICAgIDIxOSwgMTQ3LCAyNCwgOTAsIDIyNiwgMzQsIDI0LCA5MCwgMjI2LCAzNSwgMjQsIDkwLCAyMTEsIDI0LCAyNCwgOTAsIDIxMSwgCisgICAgMjUsIDI0LCA5MCwgMjUwLCA1MiwgMjQsIDkwLCAyNTAsIDUxLCAyNCwgOTAsIDIxOCwgMjIxLCAyNCwgOTAsIDIyNSwgMTMxLCAKKyAgICAyNCwgOTAsIDIyNSwgMTMwLCAxMCwgMTQsIDIzOCwgMzEsIDEwLCAxNCwgMjM4LCAzMCwgMTAsIDE0LCAyMzgsIDI5LCAxMCwgCisgICAgMTQsIDIzOCwgMjgsIDEwLCAxNCwgMjM4LCAyNywgMTAsIDE0LCAyMzgsIDI2LCAxMCwgMTQsIDIzOCwgMjUsIDEwLCAxNCwgCisgICAgMjM4LCAyNCwgMTAsIDE0LCAyMzgsIDIzLCAxMCwgMTQsIDIzOCwgMjIsIDEwLCAxNCwgMjM4LCAyMSwgMTAsIDE0LCAyMzgsIAorICAgIDIwLCAxMCwgMTQsIDIzOCwgMTksIDEwLCAxNCwgMjM4LCAxOCwgMTAsIDE0LCAyMzgsIDE3LCAxMCwgMTQsIDIzOCwgMTYsIAorICAgIDEwLCAxNCwgMjM4LCAxNSwgMTAsIDE0LCAyMzgsIDE0LCAxMCwgMTQsIDIzOCwgMTMsIDEwLCAxNCwgMjM4LCAxMiwgMTAsIAorICAgIDE0LCAyMzgsIDExLCAxMCwgMTQsIDIzOCwgMTAsIDEwLCAxNCwgMjM4LCA5LCAxMCwgMTQsIDIzOCwgOCwgMTAsIDE0LCAKKyAgICAyMzgsIDcsIDEwLCAxNCwgMjM4LCA2LCAxMCwgMTQsIDIzOCwgNSwgMTAsIDE0LCAyMzgsIDQsIDEwLCAxNCwgMjM4LCAzLCAKKyAgICAxMCwgMTQsIDIzOCwgMiwgMTAsIDE0LCAyMzgsIDEsIDEwLCAxNCwgMjM4LCAwLCAxMCwgMTQsIDIzNywgMjU1LCAxMCwgMTQsIAorICAgIDIzNywgMjU0LCAxMCwgMTQsIDIzNywgMjUzLCAxMCwgMTQsIDIzNywgMjUyLCAxMCwgMTQsIDIzNywgMjUxLCAxMCwgMTQsIAorICAgIDIzNywgMjUwLCAxMCwgMTQsIDIzNywgMjQ5LCAxMCwgMTQsIDIzNywgMjQ4LCAxMCwgMTQsIDIzNywgMjQ3LCAxMCwgMTQsIAorICAgIDIzNywgMjQ2LCAxMCwgMTQsIDIzNywgMjQ1LCAxMCwgMTQsIDIzNywgMjQ0LCAxMCwgMTQsIDIzNywgMjQzLCAxMCwgMTQsIAorICAgIDIzNywgMjQyLCAxMCwgMTQsIDIzNywgMjQxLCAxMCwgMTQsIDIzNywgMjQwLCAxMCwgMTQsIDIzNywgMjM5LCAxMCwgMTQsIAorICAgIDIzNywgMjM4LCAxMCwgMTQsIDIzNywgMjM3LCAxMCwgMTQsIDIzNywgMjM2LCAxMCwgMTQsIDIzNywgMjM1LCAxMCwgMTQsIAorICAgIDIzNywgMjM0LCAxMCwgMTQsIDIzNywgMjMzLCAxMCwgMTQsIDIzNywgMjMyLCAxMCwgMTQsIDIzNywgMjMxLCAxMCwgMTQsIAorICAgIDIzNywgMjMwLCAxMCwgMTQsIDIzNywgMjI5LCAxMCwgMTQsIDIzNywgMjI4LCAxMCwgMTQsIDIzNywgMjI3LCAxMCwgMTQsIAorICAgIDIzNywgMjI2LCAxMCwgMTQsIDIzNywgMjI1LCAxMCwgMTQsIDIzNywgMjI0LCAxMCwgMTQsIDIzNywgMjIzLCAxMCwgMTQsIAorICAgIDIzNywgMjIyLCAxMCwgMTQsIDIzNywgMjIxLCAxMCwgMTQsIDIzNywgMjIwLCAxMCwgMTQsIDIzNywgMjE5LCAxMCwgMTQsIAorICAgIDIzNywgMjE4LCAxMCwgMTQsIDIzNywgMjE3LCAxMCwgMTQsIDIzNywgMjE2LCAxMCwgMTQsIDIzNywgMjE1LCAxMCwgMTQsIAorICAgIDIzNywgMjE0LCAxMCwgMTQsIDIzNywgMjEzLCAxMCwgMTQsIDIzNywgMjEyLCAxMCwgMTQsIDIzNywgMjExLCAxMCwgMTQsIAorICAgIDIzNywgMjEwLCAxMCwgMTQsIDIzNywgMjA5LCAxMCwgMTQsIDIzNywgMjA4LCAxMCwgMTQsIDIzNywgMjA3LCAxMCwgMTQsIAorICAgIDIzNywgMjA2LCAxMCwgMTQsIDIzNywgMjA1LCAxMCwgMTQsIDIzNywgMjA0LCAxMCwgMTQsIDIzNywgMjAzLCAxMCwgMTQsIAorICAgIDIzNywgMjAyLCAxMCwgMTQsIDIzNywgMjAxLCAxMCwgMTQsIDIzNywgMjAwLCAxMCwgMTQsIDIzNywgMTk5LCAxMCwgMTQsIAorICAgIDIzNywgMTk4LCAxMCwgMTQsIDIzNywgMTk3LCAxMCwgMTQsIDIzNywgMTk2LCAxMCwgMTQsIDIzNywgMTk1LCAxMCwgMTQsIAorICAgIDIzNywgMTk0LCAxMCwgMTQsIDIzNywgMTkzLCAxMCwgMTQsIDIzNywgMTkyLCAxMCwgMTQsIDIzNywgMTkxLCAxMCwgMTQsIAorICAgIDIzNywgMTkwLCAxMCwgMTQsIDIzNywgMTg5LCAxMCwgMTQsIDIzNywgMTg4LCAxMCwgMTQsIDIzNywgMTg3LCAxMCwgMTQsIAorICAgIDIzNywgMTg2LCAxMCwgMTQsIDIzNywgMTg1LCAxMCwgMTQsIDIzNywgMTg0LCAxMCwgMTQsIDIzNywgMTgzLCAxMCwgMTQsIAorICAgIDIzNywgMTgyLCAxMCwgMTQsIDIzNywgMTgxLCAxMCwgMTQsIDIzNywgMTgwLCAxMCwgMTQsIDIzNywgMTc5LCAxMCwgMTQsIAorICAgIDIzNywgMTc4LCAxMCwgMTQsIDIzNywgMTc3LCAxMCwgMTQsIDIzNywgMTc2LCAxMCwgMTQsIDIzNywgMTc1LCAxMCwgMTQsIAorICAgIDIzNywgMTc0LCAxMCwgMTQsIDIzNywgMTczLCAxMCwgMTQsIDIzNywgMTcyLCAxMCwgMTQsIDIzNywgMTcxLCAxMCwgMTQsIAorICAgIDIzNywgMTcwLCAxMCwgMTQsIDIzNywgMTY5LCAxMCwgMTQsIDIzNywgMTY4LCAxMCwgMTQsIDIzNywgMTY3LCAxMCwgMTQsIAorICAgIDIzNywgMTY2LCAxMCwgMTQsIDIzNywgMTY1LCAxMCwgMTQsIDIzNywgMTY0LCAxMCwgMTQsIDIzNywgMTYzLCAxMCwgMTQsIAorICAgIDIzNywgMTYyLCAxMCwgMTQsIDIzNywgMTYxLCAxMCwgMTQsIDIzNywgMTYwLCAxMCwgMTQsIDIzNywgMTU5LCAxMCwgMTQsIAorICAgIDIzNywgMTU4LCAxMCwgMTQsIDIzNywgMTU3LCAxMCwgMTQsIDIzNywgMTU2LCAxMCwgMTQsIDIzNywgMTU1LCAxMCwgMTQsIAorICAgIDIzNywgMTU0LCAxMCwgMTQsIDIzNywgMTUzLCAxMCwgMTQsIDIzNywgMTUyLCAxMCwgMTQsIDIzNywgMTUxLCAxMCwgMTQsIAorICAgIDIzNywgMTUwLCAxMCwgMTQsIDIzNywgMTQ5LCAxMCwgMTQsIDIzNywgMTQ4LCAxMCwgMTQsIDIzNywgMTQ3LCAxMCwgMTQsIAorICAgIDIzNywgMTQ2LCAxMCwgMTQsIDIzNywgMTQ1LCAxMCwgMTQsIDIzNywgMTQ0LCAxMCwgMTQsIDIzNywgMTQzLCAxMCwgMTQsIAorICAgIDIzNywgMTQyLCAxMCwgMTQsIDIzNywgMTQxLCAxMCwgMTQsIDIzNywgMTQwLCAxMCwgMTQsIDIzNywgMTM5LCAxMCwgMTQsIAorICAgIDIzNywgMTM4LCAxMCwgMTQsIDIzNywgMTM3LCAxMCwgMTQsIDIzNywgMTM2LCAxMCwgMTQsIDIzNywgMTM1LCAxMCwgMTQsIAorICAgIDIzNywgMTM0LCAxMCwgMTQsIDIzNywgMTMzLCAxMCwgMTQsIDIzNywgMTMyLCAxMCwgMTQsIDIzNywgMTMxLCAxMCwgMTQsIAorICAgIDIzNywgMTMwLCAxMCwgMTQsIDIzNywgMTI5LCAxMCwgMTQsIDIzNywgMTI4LCAxMCwgMTQsIDIzNywgMTI3LCAxMCwgMTQsIAorICAgIDIzNywgMTI2LCAxMCwgMTQsIDIzNywgMTI1LCAxMCwgMTQsIDIzNywgMTI0LCAxMCwgMTQsIDIzNywgMTIzLCAxMCwgMTQsIAorICAgIDIzNywgMTIyLCAxMCwgMTQsIDIzNywgMTIxLCAxMCwgMTQsIDIzNywgMTIwLCAxMCwgMTQsIDIzNywgMTE5LCAxMCwgMTQsIAorICAgIDIzNywgMTE4LCAxMCwgMTQsIDIzNywgMTE3LCAxMCwgMTQsIDIzNywgMTE2LCAxMCwgMTQsIDIzNywgMTE1LCAxMCwgMTQsIAorICAgIDIzNywgMTE0LCAxMCwgMTQsIDIzNywgMTEzLCAxMCwgMTQsIDIzNywgMTEyLCAxMCwgMTQsIDIzNywgMTExLCAxMCwgMTQsIAorICAgIDIzNywgMTEwLCAxMCwgMTQsIDIzNywgMTA5LCAxMCwgMTQsIDIzNywgMTA4LCAxMCwgMTQsIDIzNywgMTA3LCAxMCwgMTQsIAorICAgIDIzNywgMTA2LCAxMCwgMTQsIDIzNywgMTA1LCAxMCwgMTQsIDIzNywgMTA0LCAxMCwgMTQsIDIzNywgMTAzLCAxMCwgMTQsIAorICAgIDIzNywgMTAyLCAxMCwgMTQsIDIzNywgMTAxLCAxMCwgMTQsIDIzNywgMTAwLCAxMCwgMTQsIDIzNywgOTksIDEwLCAxNCwgCisgICAgMjM3LCA5OCwgMTAsIDE0LCAyMzcsIDk3LCAxMCwgMTQsIDIzNywgOTYsIDEwLCAxNCwgMjM3LCA5NSwgMTAsIDE0LCAyMzcsIAorICAgIDk0LCAxMCwgMTQsIDIzNywgOTMsIDEwLCAxNCwgMjM3LCA5MiwgMTAsIDE0LCAyMzcsIDkxLCAxMCwgMTQsIDIzNywgOTAsIAorICAgIDEwLCAxNCwgMjM3LCA4OSwgMTAsIDE0LCAyMzcsIDg4LCAxMCwgMTQsIDIzNywgODcsIDEwLCAxNCwgMjM3LCA4NiwgMTAsIAorICAgIDE0LCAyMzcsIDg1LCAxMCwgMTQsIDIzNywgODQsIDEwLCAxNCwgMjM3LCA4MywgMTAsIDE0LCAyMzcsIDgyLCAxMCwgMTQsIAorICAgIDIzNywgODEsIDEwLCAxNCwgMjM3LCA4MCwgMTAsIDE0LCAyMzcsIDc5LCAxMCwgMTQsIDIzNywgNzgsIDEwLCAxNCwgMjM3LCAKKyAgICA3NywgMTAsIDE0LCAyMzcsIDc2LCAxMCwgMTQsIDIzNywgNzUsIDEwLCAxNCwgMjM3LCA3NCwgMTAsIDE0LCAyMzcsIDczLCAKKyAgICAxMCwgMTQsIDIzNywgNzIsIDEwLCAxNCwgMjM3LCA3MSwgMTAsIDE0LCAyMzcsIDcwLCAxMCwgMTQsIDIzNywgNjksIDEwLCAKKyAgICAxNCwgMjM3LCA2OCwgMTAsIDE0LCAyMzcsIDY3LCAxMCwgMTQsIDIzNywgNjYsIDEwLCAxNCwgMjM3LCA2NSwgMTAsIDE0LCAKKyAgICAyMzcsIDY0LCAxMCwgMTQsIDIzNywgNjMsIDEwLCAxNCwgMjM3LCA2MiwgMTAsIDE0LCAyMzcsIDYxLCAxMCwgMTQsIDIzNywgCisgICAgNjAsIDEwLCAxNCwgMjM3LCA1OSwgMTAsIDE0LCAyMzcsIDU4LCAxMCwgMTQsIDIzNywgNTcsIDEwLCAxNCwgMjM3LCA1NiwgCisgICAgMTAsIDE0LCAyMzcsIDU1LCAxMCwgMTQsIDIzNywgNTQsIDEwLCAxNCwgMjM3LCA1MywgMTAsIDE0LCAyMzcsIDUyLCAxMCwgCisgICAgMTQsIDIzNywgNTEsIDEwLCAxNCwgMjM3LCA1MCwgMTAsIDE0LCAyMzcsIDQ5LCAxMCwgMTQsIDIzNywgNDgsIDEwLCAxNCwgCisgICAgMjM3LCA0NywgMTAsIDE0LCAyMzcsIDQ2LCAxMCwgMTQsIDIzNywgNDUsIDEwLCAxNCwgMjM3LCA0NCwgMTAsIDE0LCAyMzcsIAorICAgIDQzLCAxMCwgMTQsIDIzNywgNDIsIDEwLCAxNCwgMjM3LCA0MSwgMTAsIDE0LCAyMzcsIDQwLCAxMCwgMTQsIDIzNywgMzksIAorICAgIDEwLCAxNCwgMjM3LCAzOCwgMTAsIDE0LCAyMzcsIDM3LCAxMCwgMTQsIDIzNywgMzYsIDEwLCAxNCwgMjM3LCAzNSwgMTAsIAorICAgIDE0LCAyMzcsIDM0LCAxMCwgMTQsIDIzNywgMzMsIDEwLCAxNCwgMjM3LCAzMiwgMTAsIDE0LCAyMzcsIDMxLCAxMCwgMTQsIAorICAgIDIzNywgMzAsIDEwLCAxNCwgMjM3LCAyOSwgMTAsIDE0LCAyMzcsIDI4LCAxMCwgMTQsIDIzNywgMjcsIDEwLCAxNCwgMjM3LCAKKyAgICAyNiwgMTAsIDE0LCAyMzcsIDI1LCAxMCwgMTQsIDIzNywgMjQsIDEwLCAxNCwgMjM3LCAyMywgMTAsIDE0LCAyMzcsIDIyLCAKKyAgICAxMCwgMTQsIDIzNywgMjEsIDEwLCAxNCwgMjM3LCAyMCwgMTAsIDE0LCAyMzcsIDE5LCAxMCwgMTQsIDIzNywgMTgsIDEwLCAKKyAgICAxNCwgMjM3LCAxNywgMTAsIDE0LCAyMzcsIDE2LCAxMCwgMTQsIDIzNywgMTUsIDEwLCAxNCwgMjM3LCAxNCwgMTAsIDE0LCAKKyAgICAyMzcsIDEzLCAxMCwgMTQsIDIzNywgMTIsIDEwLCAxNCwgMjM3LCAxMSwgMTAsIDE0LCAyMzcsIDEwLCAxMCwgMTQsIDIzNywgCisgICAgOSwgMTAsIDE0LCAyMzcsIDgsIDEwLCAxNCwgMjM3LCA3LCAxMCwgMTQsIDIzNywgNiwgMTAsIDE0LCAyMzcsIDUsIDEwLCAKKyAgICAxNCwgMjM3LCA0LCAxMCwgMTQsIDIzNywgMywgMTAsIDE0LCAyMzcsIDIsIDEwLCAxNCwgMjM3LCAxLCAxMCwgMTQsIDIzNywgCisgICAgMCwgMTAsIDE0LCAyMzYsIDI1NSwgMTAsIDE0LCAyMzYsIDI1NCwgMTAsIDE0LCAyMzYsIDI1MywgMTAsIDE0LCAyMzYsIAorICAgIDI1MiwgMTAsIDE0LCAyMzYsIDI1MSwgMTAsIDE0LCAyMzYsIDI1MCwgMTAsIDE0LCAyMzYsIDI0OSwgMTAsIDE0LCAyMzYsIAorICAgIDI0OCwgMTAsIDE0LCAyMzYsIDI0NywgMTAsIDE0LCAyMzYsIDI0NiwgMTAsIDE0LCAyMzYsIDI0NSwgMTAsIDE0LCAyMzYsIAorICAgIDI0NCwgMTAsIDE0LCAyMzYsIDI0MywgMTAsIDE0LCAyMzYsIDI0MiwgMTAsIDE0LCAyMzYsIDI0MSwgMTAsIDE0LCAyMzYsIAorICAgIDI0MCwgMTAsIDE0LCAyMzYsIDIzOSwgMTAsIDE0LCAyMzYsIDIzOCwgMTAsIDE0LCAyMzYsIDIzNywgMTAsIDE0LCAyMzYsIAorICAgIDIzNiwgMTAsIDE0LCAyMzYsIDIzNSwgMTAsIDE0LCAyMzYsIDIzNCwgMTAsIDE0LCAyMzYsIDIzMywgMTAsIDE0LCAyMzYsIAorICAgIDIzMiwgMTAsIDE0LCAyMzYsIDIzMSwgMTAsIDE0LCAyMzYsIDIzMCwgMTAsIDE0LCAyMzYsIDIyOSwgMTAsIDE0LCAyMzYsIAorICAgIDIyOCwgMTAsIDE0LCAyMzYsIDIyNywgMTAsIDE0LCAyMzYsIDIyNiwgMTAsIDE0LCAyMzYsIDIyNSwgMTAsIDE0LCAyMzYsIAorICAgIDIyNCwgMTAsIDE0LCAyMzYsIDIyMywgMTAsIDE0LCAyMzYsIDIyMiwgMTAsIDE0LCAyMzYsIDIyMSwgMTAsIDE0LCAyMzYsIAorICAgIDIyMCwgMTAsIDE0LCAyMzYsIDIxOSwgMTAsIDE0LCAyMzYsIDIxOCwgMTAsIDE0LCAyMzYsIDIxNywgMTAsIDE0LCAyMzYsIAorICAgIDIxNiwgMTAsIDE0LCAyMzYsIDIxNSwgMTAsIDE0LCAyMzYsIDIxNCwgMTAsIDE0LCAyMzYsIDIxMywgMTAsIDE0LCAyMzYsIAorICAgIDIxMiwgMTAsIDE0LCAyMzYsIDIxMSwgMTAsIDE0LCAyMzYsIDIxMCwgMTAsIDE0LCAyMzYsIDIwOSwgMTAsIDE0LCAyMzYsIAorICAgIDIwOCwgMTAsIDE0LCAyMzYsIDIwNywgMTAsIDE0LCAyMzYsIDIwNiwgMTAsIDE0LCAyMzYsIDIwNSwgMTAsIDE0LCAyMzYsIAorICAgIDIwNCwgMTAsIDE0LCAyMzYsIDIwMywgMTAsIDE0LCAyMzYsIDIwMiwgMTAsIDE0LCAyMzYsIDIwMSwgMTAsIDE0LCAyMzYsIAorICAgIDIwMCwgMTAsIDE0LCAyMzYsIDE5OSwgMTAsIDE0LCAyMzYsIDE5OCwgMTAsIDE0LCAyMzYsIDE5NywgMTAsIDE0LCAyMzYsIAorICAgIDE5NiwgMTAsIDE0LCAyMzYsIDE5NSwgMTAsIDE0LCAyMzYsIDE5NCwgMTAsIDE0LCAyMzYsIDE5MywgMTAsIDE0LCAyMzYsIAorICAgIDE5MiwgMTAsIDE0LCAyMzYsIDE5MSwgMTAsIDE0LCAyMzYsIDE5MCwgMTAsIDE0LCAyMzYsIDE4OSwgMTAsIDE0LCAyMzYsIAorICAgIDE4OCwgMTAsIDE0LCAyMzYsIDE4NywgMTAsIDE0LCAyMzYsIDE4NiwgMTAsIDE0LCAyMzYsIDE4NSwgMTAsIDE0LCAyMzYsIAorICAgIDE4NCwgMTAsIDE0LCAyMzYsIDE4MywgMTAsIDE0LCAyMzYsIDE4MiwgMTAsIDE0LCAyMzYsIDE4MSwgMTAsIDE0LCAyMzYsIAorICAgIDE4MCwgMTAsIDE0LCAyMzYsIDE3OSwgMTAsIDE0LCAyMzYsIDE3OCwgMTAsIDE0LCAyMzYsIDE3NywgMTAsIDE0LCAyMzYsIAorICAgIDE3NiwgMTAsIDE0LCAyMzYsIDE3NSwgMTAsIDE0LCAyMzYsIDE3NCwgMTAsIDE0LCAyMzYsIDE3MywgMTAsIDE0LCAyMzYsIAorICAgIDE3MiwgMTAsIDE0LCAyMzYsIDE3MSwgMTAsIDE0LCAyMzYsIDE3MCwgMTAsIDE0LCAyMzYsIDE2OSwgMTAsIDE0LCAyMzYsIAorICAgIDE2OCwgMTAsIDE0LCAyMzYsIDE2NywgMTAsIDE0LCAyMzYsIDE2NiwgMTAsIDE0LCAyMzYsIDE2NSwgMTAsIDE0LCAyMzYsIAorICAgIDE2NCwgMTAsIDE0LCAyMzYsIDE2MywgMTAsIDE0LCAyMzYsIDE2MiwgMTAsIDE0LCAyMzYsIDE2MSwgMTAsIDE0LCAyMzYsIAorICAgIDE2MCwgMTAsIDE0LCAyMzYsIDE1OSwgMTAsIDE0LCAyMzYsIDE1OCwgMTAsIDE0LCAyMzYsIDE1NywgMTAsIDE0LCAyMzYsIAorICAgIDE1NiwgMTAsIDE0LCAyMzYsIDE1NSwgMTAsIDE0LCAyMzYsIDE1NCwgMTAsIDE0LCAyMzYsIDE1MywgMTAsIDE0LCAyMzYsIAorICAgIDE1MiwgMTAsIDE0LCAyMzYsIDE1MSwgMTAsIDE0LCAyMzYsIDE1MCwgMTAsIDE0LCAyMzYsIDE0OSwgMTAsIDE0LCAyMzYsIAorICAgIDE0OCwgMTAsIDE0LCAyMzYsIDE0NywgMTAsIDE0LCAyMzYsIDE0NiwgMTAsIDE0LCAyMzYsIDE0NSwgMTAsIDE0LCAyMzYsIAorICAgIDE0NCwgMTAsIDE0LCAyMzYsIDE0MywgMTAsIDE0LCAyMzYsIDE0MiwgMTAsIDE0LCAyMzYsIDE0MSwgMTAsIDE0LCAyMzYsIAorICAgIDE0MCwgMTAsIDE0LCAyMzYsIDEzOSwgMTAsIDE0LCAyMzYsIDEzOCwgMTAsIDE0LCAyMzYsIDEzNywgMTAsIDE0LCAyMzYsIAorICAgIDEzNiwgMTAsIDE0LCAyMzYsIDEzNSwgMTAsIDE0LCAyMzYsIDEzNCwgMTAsIDE0LCAyMzYsIDEzMywgMTAsIDE0LCAyMzYsIAorICAgIDEzMiwgMTAsIDE0LCAyMzYsIDEzMSwgMTAsIDE0LCAyMzYsIDEzMCwgMTAsIDE0LCAyMzYsIDEyOSwgMTAsIDE0LCAyMzYsIAorICAgIDEyOCwgMTAsIDE0LCAyMzYsIDEyNywgMTAsIDE0LCAyMzYsIDEyNiwgMTAsIDE0LCAyMzYsIDEyNSwgMTAsIDE0LCAyMzYsIAorICAgIDEyNCwgMTAsIDE0LCAyMzYsIDEyMywgMTAsIDE0LCAyMzYsIDEyMiwgMTAsIDE0LCAyMzYsIDEyMSwgMTAsIDE0LCAyMzYsIAorICAgIDEyMCwgMTAsIDE0LCAyMzYsIDExOSwgMTAsIDE0LCAyMzYsIDExOCwgMTAsIDE0LCAyMzYsIDExNywgMTAsIDE0LCAyMzYsIAorICAgIDExNiwgMTAsIDE0LCAyMzYsIDExNSwgMTAsIDE0LCAyMzYsIDExNCwgMTAsIDE0LCAyMzYsIDExMywgMTAsIDE0LCAyMzYsIAorICAgIDExMiwgMTAsIDE0LCAyMzYsIDExMSwgMTAsIDE0LCAyMzYsIDExMCwgMTAsIDE0LCAyMzYsIDEwOSwgMTAsIDE0LCAyMzYsIAorICAgIDEwOCwgMTAsIDE0LCAyMzYsIDEwNywgMTAsIDE0LCAyMzYsIDEwNiwgMTAsIDE0LCAyMzYsIDEwNSwgMTAsIDE0LCAyMzYsIAorICAgIDEwNCwgMTAsIDE0LCAyMzYsIDEwMywgMTAsIDE0LCAyMzYsIDEwMiwgMTAsIDE0LCAyMzYsIDEwMSwgMTAsIDE0LCAyMzYsIAorICAgIDEwMCwgMTAsIDE0LCAyMzYsIDk5LCAxMCwgMTQsIDIzNiwgOTgsIDEwLCAxNCwgMjM2LCA5NywgMTAsIDE0LCAyMzYsIDk2LCAKKyAgICAxMCwgMTQsIDIzNiwgOTUsIDEwLCAxNCwgMjM2LCA5NCwgMTAsIDE0LCAyMzYsIDkzLCAxMCwgMTQsIDIzNiwgOTIsIDEwLCAKKyAgICAxNCwgMjM2LCA5MSwgMTAsIDE0LCAyMzYsIDkwLCAxMCwgMTQsIDIzNiwgODksIDEwLCAxNCwgMjM2LCA4OCwgMTAsIDE0LCAKKyAgICAyMzYsIDg3LCAxMCwgMTQsIDIzNiwgODYsIDEwLCAxNCwgMjM2LCA4NSwgMTAsIDE0LCAyMzYsIDg0LCAxMCwgMTQsIDIzNiwgCisgICAgODMsIDEwLCAxNCwgMjM2LCA4MiwgMTAsIDE0LCAyMzYsIDgxLCAxMCwgMTQsIDIzNiwgODAsIDEwLCAxNCwgMjM2LCA3OSwgCisgICAgMTAsIDE0LCAyMzYsIDc4LCAxMCwgMTQsIDIzNiwgNzcsIDEwLCAxNCwgMjM2LCA3NiwgMTAsIDE0LCAyMzYsIDc1LCAxMCwgCisgICAgMTQsIDIzNiwgNzQsIDEwLCAxNCwgMjM2LCA3MywgMTAsIDE0LCAyMzYsIDcyLCA3LCA0LCAyNywgMjQ0LCAxMzMsIDcsIDQsIAorICAgIDI3LCAyNDQsIDEyOSwgNywgNCwgMjcsIDI0NCwgODQsIDcsIDQsIDI3LCAyNDQsIDEzMiwgNywgNCwgMjcsIDI0NCwgMTMxLCAKKyAgICA3LCA0LCAyNywgMjAwLCAyMjIsIDk0LCAyMTcsIDE1MywgNywgNCwgMjcsIDIxOCwgMTcwLCAxNTAsIDQsIDI3LCAyMzEsIAorICAgIDY0LCAyMjgsIDQ0LCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyNDUsIDIyMSwgMTUwLCA0LCAyNywgMjMxLCA2NCwgMjM1LCAKKyAgICAyMzQsIDE1MCwgNCwgMjcsIDIxMywgMTgwLCAyMjgsIDQ0LCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyMTEsIDE2MCwgOTQsIDEsIAorICAgIDIxMCwgMjM0LCAyLCAyNDEsIDE2NSwgOTQsIDIyNSwgMTQsIDIzNSwgNTYsIDIxNCwgMTEsIDk0LCAyNywgMjExLCA2LCAKKyAgICAyMTAsIDIzNCwgMjEwLCAyMzQsIDIyNSwgMjQzLCA5NCwgMSwgMjU0LCAxNDcsIDI1MywgMTcwLCA5NCwgMSwgMjExLCAyNDcsIAorICAgIDI1NCwgMTc5LCA5NCwgMSwgMjExLCAyNDcsIDI0OCwgMTk3LCA5NCwgMSwgMjExLCAyNDcsIDI0MSwgMjQ1LCA5NCwgMSwgCisgICAgMjExLCAyNDcsIDIzNSwgMCwgOTQsIDEsIDIxMSwgMjQ3LCAyMzMsIDEwMCwgOTQsIDEsIDIxMSwgMjQ3LCA0MCwgMjMxLCAKKyAgICA3MCwgOTQsIDEsIDIxMSwgMjQ3LCAyMjMsIDcwLCA5NCwgMSwgMjExLCAyNDcsIDIxNywgMzksIDk0LCAxLCAyNTQsIDE0NywgCisgICAgOTYsIDUwLCA5NCwgMSwgMjIwLCAyMywgMiwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAxLCAyMjAsIDIzLCAyLCAyMTksIAorICAgIDE2MSwgMjQ3LCAxMjgsIDk0LCAxLCAyMjAsIDIzLCAyLCAyNDgsIDIxNiwgMjIsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMSwgCisgICAgMjIwLCAyMywgMiwgMjQ4LCAyMTYsIDIyLCAyMTksIDE2MSwgMjQ3LCAxMjgsIDk0LCAxLCAxMDksIDIsIDIyNSwgMjQzLCAKKyAgICA5NCwgMSwgMTA5LCAyLCAyMjQsIDc5LCA5NCwgMSwgMTA5LCAyLCAyMzEsIDE3NiwgOTQsIDEsIDI1MiwgMzcsIDIsIDI0OCwgCisgICAgMjE1LCA5NCwgMSwgMjQyLCAyMDksIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjQ4LCAxOTgsIDIsIDI0OCwgMjE1LCA5NCwgMSwgCisgICAgMjQxLCAyNDYsIDIsIDIzMSwgMTc2LCA5NCwgMSwgMjE0LCA0LCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxMCwgOTgsIDIsIAorICAgIDI0OCwgMjE1LCA5NCwgMSwgMjE2LCAyMzIsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjEwLCAyMzQsIDIsIDI0OCwgMjE1LCA5NCwgCisgICAgMSwgNDAsIDIzNSwgMSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzUsIDEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjMzLCAxMDEsIAorICAgIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjMxLCA3MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjcsIDE5OSwgMiwgMjQ4LCAyMTUsIAorICAgIDk0LCAxLCAyMjEsIDI1MiwgMiwgMjQ4LCAyMTUsIDk0LCAxLCA0MCwgMjI1LCAyMjUsIDIsIDI0OCwgMjE1LCA5NCwgMSwgCisgICAgMjI1LCAyMjUsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjE1LCAxODEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjI0LCA0MywgMiwgCisgICAgMjQ4LCAyMTUsIDk0LCAxLCAyMjMsIDcxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyMCwgMjMsIDIsIDI0OCwgMjE1LCA5NCwgCisgICAgMSwgMjE3LCA0MCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTQsIDQsIDIsIDI0MSwgNjgsIDk0LCAxLCAyNTIsIDM3LCAyLCAKKyAgICAyMjMsIDE3MiwgOTQsIDEsIDIzNSwgMSwgMiwgMjIzLCAxNzIsIDk0LCAxLCAyMjUsIDIyNSwgMiwgMjIzLCAxNzIsIDk0LCAKKyAgICAyNywgMTA5LCAyMzMsIDEwMCwgOSwgMSwgMTA5LCAyMTIsIDQ3LCA1MywgMTcsIDksIDEsIDEwOSwgMjEyLCA0NywgNDAsIAorICAgIDE3LCA5LCAxLCAyNTIsIDczLCA1MywgMTcsIDksIDEsIDI1MiwgNzMsIDQwLCAxNywgOSwgMSwgMjUyLCA3MywgNjUsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDczLCAxNDcsIDE3LCA5LCAxLCAyMjUsIDIwOSwgNTMsIDE3LCA5LCAxLCAyMjUsIDIwOSwgNDAsIDE3LCAKKyAgICA5LCAxLCAyMjUsIDIwOSwgNjUsIDE3LCA5LCAxLCAyMjUsIDIwOSwgMTQ3LCAxNywgOSwgMSwgMjUyLCA2MSwgNTMsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDYxLCA0MCwgMTcsIDksIDEsIDI1MiwgNjEsIDY1LCAxNywgOSwgMSwgMjUyLCA2MSwgMTQ3LCAxNywgOSwgCisgICAgMSwgMjE1LCAxNDgsIDUzLCAxNywgOSwgMSwgMjE1LCAxNDgsIDQwLCAxNywgOSwgMSwgMjE1LCAxNDgsIDY1LCAxNywgOSwgCisgICAgMSwgMjE1LCAxNDgsIDE0NywgMTcsIDksIDEsIDIxNywgNywgNTMsIDE3LCA5LCAxLCAyMTcsIDcsIDQwLCAxNywgOSwgMSwgCisgICAgMjE3LCA3LCA2NSwgMTcsIDksIDEsIDIxNywgNywgMTQ3LCAxNywgOSwgMSwgMjE1LCAxNTAsIDUzLCAxNywgOSwgMSwgMjE1LCAKKyAgICAxNTAsIDQwLCAxNywgOSwgMSwgMjE1LCAxNTAsIDY1LCAxNywgOSwgMSwgMjE1LCAxNTAsIDE0NywgMTcsIDksIDEsIDIxMywgCisgICAgMjQ5LCA1MywgMTcsIDksIDEsIDIxMywgMjQ5LCA0MCwgMTcsIDksIDEsIDIxMywgMjQ5LCA2NSwgMTcsIDksIDEsIDIxMywgCisgICAgMjQ5LCAxNDcsIDE3LCA5LCAxLCAyMjUsIDIwNywgNTMsIDE3LCA5LCAxLCAyMjUsIDIwNywgNDAsIDE3LCA5LCAxLCAyMjUsIAorICAgIDIwNywgNjUsIDE3LCA5LCAxLCAyMjUsIDIwNywgMTQ3LCAxNywgOSwgMSwgMjQ2LCA1MiwgNTMsIDE3LCA5LCAxLCAyNDYsIAorICAgIDUyLCA0MCwgMTcsIDksIDEsIDI0NiwgNTIsIDY1LCAxNywgOSwgMSwgMjQ2LCA1MiwgMTQ3LCAxNywgOSwgMSwgMjI3LCAKKyAgICAxNTgsIDUzLCAxNywgOSwgMSwgMjI3LCAxNTgsIDQwLCAxNywgOSwgMSwgMjI3LCAxNTgsIDY1LCAxNywgOSwgMSwgMjI3LCAKKyAgICAxNTgsIDE0NywgMTcsIDksIDEsIDIxNywgMjgsIDUzLCAxNywgOSwgMSwgMjE3LCAyOCwgNDAsIDE3LCA5LCAxLCAyMTcsIAorICAgIDI4LCA2NSwgMTcsIDksIDEsIDIxNywgMjgsIDE0NywgMTcsIDksIDEsIDIxNywgMjYsIDUzLCAxNywgOSwgMSwgMjE3LCAyNiwgCisgICAgNDAsIDE3LCA5LCAxLCAyMTcsIDI2LCA2NSwgMTcsIDksIDEsIDIxNywgMjYsIDE0NywgMTcsIDksIDEsIDI0OCwgMTQxLCAKKyAgICA1MywgMTcsIDksIDEsIDI0OCwgMTQxLCA0MCwgMTcsIDksIDEsIDI0OCwgMjEwLCA1MywgMTcsIDksIDEsIDI0OCwgMjEwLCAKKyAgICA0MCwgMTcsIDksIDEsIDI0NiwgNzksIDUzLCAxNywgOSwgMSwgMjQ2LCA3OSwgNDAsIDE3LCA5LCAxLCAyNDgsIDEzOSwgNTMsIAorICAgIDE3LCA5LCAxLCAyNDgsIDEzOSwgNDAsIDE3LCA5LCAxLCAyMzUsIDEyNywgNTMsIDE3LCA5LCAxLCAyMzUsIDEyNywgNDAsIAorICAgIDE3LCA5LCAxLCAyMjIsIDE3NCwgNTMsIDE3LCA5LCAxLCAyMjIsIDE3NCwgNDAsIDE3LCA5LCAxLCAyMzQsIDE4MSwgNTMsIAorICAgIDE3LCA5LCAxLCAyMzQsIDE4MSwgNDAsIDE3LCA5LCAxLCAyMzQsIDE4MSwgNjUsIDE3LCA5LCAxLCAyMzQsIDE4MSwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQzLCAxMzAsIDUzLCAxNywgOSwgMSwgMjQzLCAxMzAsIDQwLCAxNywgOSwgMSwgMjQzLCAxMzAsIDY1LCAKKyAgICAxNywgOSwgMSwgMjQzLCAxMzAsIDE0NywgMTcsIDksIDEsIDI0MiwgMTA5LCA1MywgMTcsIDksIDEsIDI0MiwgMTA5LCA0MCwgCisgICAgMTcsIDksIDEsIDI0MiwgMTA5LCA2NSwgMTcsIDksIDEsIDI0MiwgMTA5LCAxNDcsIDE3LCA5LCAxLCAyMjksIDgsIDUzLCAKKyAgICAxNywgOSwgMSwgMjI5LCA4LCA0MCwgMTcsIDksIDEsIDIyOSwgOCwgNjUsIDE3LCA5LCAxLCAyMjksIDgsIDE0NywgMTcsIDksIAorICAgIDEsIDIyOCwgNjgsIDI0MiwgMjI2LCA1MywgMTcsIDksIDEsIDIyOCwgNjgsIDI0MiwgMjI2LCA0MCwgMTcsIDksIDEsIDIyMiwgCisgICAgMjE3LCA1MywgMTcsIDksIDEsIDIyMiwgMjE3LCA0MCwgMTcsIDksIDEsIDIyMiwgMjE3LCA2NSwgMTcsIDksIDEsIDIyMiwgCisgICAgMjE3LCAxNDcsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMiwgNzcsIDcyLCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgCisgICAgNzIsIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgCisgICAgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDY1LCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAxNDcsIAorICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA0MCwgMTcsIAorICAgIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNjUsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDE0NywgMTcsIDksIAorICAgIDEsIDc3LCAyNTIsIDE0MSwgNTMsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIDQwLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCAKKyAgICAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxNiwgNTksIAorICAgIDQ4LCA5LCAxNiwgNTksIDUxLCA5LCAxNiwgMTEzLCAxNzAsIDQ4LCA5LCAxNiwgMTEzLCAxNzAsIDUxLCA5LCAxNiwgMTM0LCAKKyAgICAxNzAsIDQ4LCA5LCAxNiwgMTM0LCAxNzAsIDUxLCA5LCAxNiwgMTM0LCAxNzAsIDIyNSwgMTAsIDI0NiwgMTEyLCA0OCwgOSwgCisgICAgMTYsIDEzNCwgMTcwLCAyMjUsIDEwLCAyNDYsIDExMiwgNTEsIDksIDE2LCAyNDQsIDE5LCAxNzAsIDQ4LCA5LCAxNiwgMjQ0LCAKKyAgICAxOSwgMTcwLCA1MSwgOSwgMTYsIDUyLCA2NywgMjUyLCAxNDksIDUxLCA5LCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgCisgICAgOSwgMTYsIDExMywgMTcwLCAyMTMsIDE4OSwgNTEsIDksIDE2LCAyMjIsIDIzNiwgOSwgMTYsIDQsIDIxNywgODIsIDQ4LCA5LCAKKyAgICAxNiwgNCwgMjE3LCA4MiwgNTEsIDksIDEsIDIyOSwgODUsIDUzLCAxNywgOSwgMSwgMjI5LCA4NSwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjksIDg1LCA2NSwgMTcsIDksIDEsIDIyOSwgODUsIDE0NywgMTcsIDksIDEsIDEwNCwgNTMsIDE3LCA5LCAxLCAxMDQsIAorICAgIDQwLCAxNywgOSwgMSwgMjI2LCAyMzksIDUzLCAxNywgOSwgMSwgMjI2LCAyMzksIDQwLCAxNywgOSwgMSwgMjEwLCAyMTMsIAorICAgIDUzLCAxNywgOSwgMSwgMjEwLCAyMTMsIDQwLCAxNywgOSwgMSwgMTA0LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDIxNCwgCisgICAgMCwgNTMsIDE3LCA5LCAxLCAyMTQsIDAsIDQwLCAxNywgOSwgMSwgMjM0LCA3OSwgMjI2LCAyMzksIDUzLCAxNywgOSwgMSwgCisgICAgMjM0LCA3OSwgMjI2LCAyMzksIDQwLCAxNywgOSwgMSwgMjM0LCA3OSwgMjEwLCAyMTMsIDUzLCAxNywgOSwgMSwgMjM0LCAKKyAgICA3OSwgMjEwLCAyMTMsIDQwLCAxNywgOSwgMSwgMTYwLCA1MywgMTcsIDksIDEsIDE2MCwgNDAsIDE3LCA5LCAxLCAxNjAsIAorICAgIDY1LCAxNywgOSwgMSwgMTYwLCAxNDcsIDE3LCA5LCAxLCAyMTQsIDIwNywgMjM0LCAxOTIsIDIzNCwgNzksIDEwOSwgMjMxLCAKKyAgICAxOTgsIDY1LCAxNywgOSwgMSwgMjE0LCAyMDcsIDIzNCwgMTkyLCAyMzQsIDc5LCAxMDksIDIzMSwgMTk4LCAxNDcsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgNDAsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI1NCwgMjUzLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgCisgICAgMjU0LCAyNTMsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTIsIDMxLCA1MywgMTcsIDksIDI3LCA3NywgCisgICAgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwNCwgNTMsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwNCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgMjM5LCAKKyAgICA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAyMzksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAyMTAsIDIxMywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMCwgMjEzLCA0MCwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA0MCwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA2NSwgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIAorICAgIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgMiwgCisgICAgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA2NSwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgNTMsIDE3LCA5LCAxLCAyNDQsIDE3NiwgCisgICAgNzcsIDQwLCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCA2NSwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgMTQ3LCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMjIsIDUzLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgCisgICAgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIzNCwgCisgICAgMTM2LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTA5LCAyMzEsIAorICAgIDE5OCwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCA1MywgCisgICAgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA5LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIAorICAgIDI3LCAyMTcsIDksIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMTYsIAorICAgIDE5NCwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMTYsIDE5NCwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAKKyAgICA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMTIyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjM0LCAxMzYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjM0LCAKKyAgICAxMzYsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgCisgICAgMTIyLCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAKKyAgICA2NiwgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCA2NiwgNTMsIAorICAgIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEyMiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAorICAgIDIxNywgODIsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxMCwgMTEyLCAKKyAgICAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAKKyAgICA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDUzLCAxNywgCisgICAgOSwgMjcsIDI0NCwgMTUxLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIAorICAgIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDQsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDc3LCA1MywgMTcsIDksIAorICAgIDI3LCAyMjQsIDg1LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjQsIAorICAgIDg1LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjM1LCAKKyAgICAxLCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEyMiwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIDEwOSwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCA1MywgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIAorICAgIDEyMiwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDUzLCAxNywgOSwgCisgICAgMjcsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyOCwgCisgICAgNjgsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKKyAgICAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTUxLCAKKyAgICA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxMDksIDIzMSwgCisgICAgMTk4LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxNTEsIDUzLCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIAorICAgIDY2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDc3LCA1MywgCisgICAgMTcsIDksIDI3LCAyMTYsIDIwNCwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAyMjMsIDk5LCAyLCAyMTgsIDI0LCAKKyAgICAxMDksIDUzLCAxNywgOSwgMjcsIDEwOSwgMjMxLCAxOTgsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ4LCAxOTEsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDIzNCwgMjEwLCA1MywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyNDQsIDE3NCwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjQ4LCAxOTMsIDUzLCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDIzNCwgMjEyLCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEwLCAxMDksIAorICAgIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIAorICAgIDI1MiwgNjMsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjUyLCAKKyAgICA2MywgMiwgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjUyLCA2MywgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMjgsIAorICAgIDY4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjEwLCAKKyAgICAxMDksIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIyOCwgNjgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIDEwOSwgCisgICAgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDQwLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNzcsIDQwLCAxNywgCisgICAgOSwgMjcsIDY2LCAyLCAxMDksIDQwLCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCisgICAgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAorICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMDksIAorICAgIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTA5LCAyMzEsIDE5OCwgMiwgCisgICAgMjE4LCAyNCwgMTA5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIxMCwgCisgICAgMTA5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgCisgICAgMTgyLCA3MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxNTEsIAorICAgIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTcsIAorICAgIDksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIAorICAgIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDE1MSwgMiwgMTIyLCA2NSwgCisgICAgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMTIyLCAyLCAKKyAgICA2NiwgNjUsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTIyLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjIyLCAyOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIyLCAKKyAgICAyOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAKKyAgICAxMjIsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyNDIsIDI1MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI0NCwgCisgICAgMTUxLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAKKyAgICAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDE1MSwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjM1LCAxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIzNSwgMSwgMiwgMjMzLCAxMDksIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgCisgICAgMTA5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxMjIsIDY1LCAxNywgCisgICAgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAKKyAgICAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjM0LCAKKyAgICAxMzYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyNDEsIDIyNiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCA2NSwgMTcsIAorICAgIDksIDI3LCAyNDEsIDIyNiwgMiwgMjE4LCAyNCwgMTA5LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTUxLCA2NSwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgCisgICAgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAKKyAgICA2NiwgMTQ3LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIAorICAgIDEwOSwgMTQ3LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDE0NywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDE0NywgCisgICAgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgNzcsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ0LCAxNzQsIDE0NywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyNDgsIDE5MywgMTQ3LCAxNywgOSwgMjcsIAorICAgIDIyMCwgOTYsIDIsIDIzNCwgMjEyLCAxNDcsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjE3LCA4MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAorICAgIDksIDI3LCAyNTQsIDIwNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgCisgICAgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAKKyAgICAxNywgOSwgMjcsIDEyMiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMTUxLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDIzNCwgMTM2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjIyLCAyOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDgsIDIyNSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgCisgICAgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgCisgICAgNjYsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIyMywgOTksIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMjMsIAorICAgIDk5LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMjMsIDk5LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjIzLCAKKyAgICA5OSwgNTMsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDIsIAorICAgIDI1MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjEsIDE2OSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMCwgNjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDEyMiwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA3NywgCisgICAgNDAsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMjMsIDk5LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjIzLCA5OSwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjIxLCAxNjksIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA4MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDE0NywgMTcsIDksIDI3LCAyMjEsIAorICAgIDE2OSwgMiwgMTIyLCAxNDcsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA2MiwgMiwgMTUxLCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgCisgICAgMjM0LCAxMzYsIDE0NywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIxMCwgMTEyLCAyLCAKKyAgICA2NiwgMTQ3LCAxNywgOSwgMjcsIDEwOSwgMiwgMjQ0LCAxNzIsIDQwLCAxNywgOSwgMjcsIDEwOSwgMiwgMjQ0LCAxNzIsIAorICAgIDUzLCAxNywgMjI2LCAxNTAsIDQzLCAyMjYsIDcsIDIyNiwgMTUwLCA0NCwgMjI2LCA3LCA5LCAyNywgMjE3LCA5LCAyLCAKKyAgICAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAorICAgIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgCisgICAgOSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgCisgICAgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAorICAgIDksIDI3LCAxMjIsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCAKKyAgICAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgNjYsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgMiwgCisgICAgMTIyLCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgCisgICAgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAKKyAgICAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIAorICAgIDYyLCAyLCA2NiwgMiwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgNjYsIAorICAgIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0OCwgCisgICAgMjI1LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIAorICAgIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjU0LCAKKyAgICAyMDYsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIDY2LCA0MCwgCisgICAgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIAorICAgIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgMiwgNjYsIDQwLCAxNywgOSwgCisgICAgMjcsIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCAxMjIsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgCisgICAgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAyLCAxNTEsIDY1LCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCAyLCAKKyAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIAorICAgIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA2NiwgCisgICAgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAKKyAgICAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIAorICAgIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDEsIAorICAgIDIyNiwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjI4LCA2OCwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyOCwgCisgICAgNjgsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDI1MiwgNjMsIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDIsIDc3LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAKKyAgICAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCAKKyAgICAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjIyLCAKKyAgICAyOSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgMjQ4LCAyMjUsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIAorICAgIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIAorICAgIDY2LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgMjI4LCA2OCwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgMiwgNzcsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEyMiwgCisgICAgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgCisgICAgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDE1MSwgCisgICAgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjUyLCAKKyAgICA2MywgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDI1NCwgMjA2LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgNzcsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMiwgNiwgMjE0LCAxMjgsIDI1MywgMjQ2LCAyMzQsIDEwLCAyMTgsIDEzMiwgNSwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjI0LCA4MSwgMjE0LCAxMjgsIDI1MywgMjQ2LCAyMzQsIDEwLCAyMTgsIDEzMiwgNSwgNTMsIDE3LCA5LCAyNywgCisgICAgMjU0LCAxNjIsIDUzLCAxNywgOSwgMjcsIDI1NCwgMTkyLCA1MywgMTcsIDksIDI3LCAyMzAsIDE1OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjIyLCA3LCA1MywgMTcsIDksIDI3LCAyMjMsIDE0NiwgNTMsIDE3LCA5LCAyNywgMjU0LCAxODEsIDUzLCAxNywgOSwgCisgICAgMjcsIDIxMiwgNDksIDUzLCAxNywgOSwgMjcsIDIyMiwgNiwgNTMsIDE3LCA5LCAyNywgMjIyLCA1LCAyNTQsIDE4MSwgMjEyLCAKKyAgICA0OCwgOSwgMjcsIDIzNSwgMTQwLCAyMjMsIDM3LCA1MCwgOSwgMjcsIDI1MSwgMjM4LCAyNTQsIDQ3LCAyNTQsIDQ4LCA0NSwgCisgICAgMjIxLCAxNTgsIDQ1LCAyMjEsIDQ3LCA0NSwgMjIwLCAyMzUsIDQ1LCAyMjAsIDIyNCwgNDUsIDIyMCwgMjEzLCA0NSwgMjIwLCAKKyAgICAyMDIsIDQ1LCAyMjAsIDE5MSwgNDUsIDIyMCwgMTgwLCA0NSwgMjIwLCAxNjksIDQ1LCAyMjEsIDE1NywgNDUsIDIyMSwgCisgICAgMTQ2LCA0NSwgMjIxLCAxMzUsIDQ1LCAyMjEsIDEyNCwgNDUsIDIyMSwgMTEzLCA0NSwgMjIxLCAxMDIsIDQ1LCAyMjEsIDkxLCAKKyAgICAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyNDksIDIyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEwLCAyNDksIAorICAgIDIyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIyNCwgMTk3LCAyNDQsIAorICAgIDI4LCAzMSwgNjcsIDI0OSwgMjM0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMjAsIDE1MiwgMjI0LCAxOTcsIDI0NCwgCisgICAgMjgsIDMxLCA2NywgMjQ1LCAzOSwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIyNCwgMTYsIDc5LCAyMjQsIAorICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgNzEsIDIzMywgMjYsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgCisgICAgNDQsIDcxLCAyMzMsIDI2LCAyNTEsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjAzLCAyNDUsIDE3MSwgMzgsIAorICAgIDI3LCA0MywgMjQyLCAzNCwgMzgsIDI3LCA0NCwgMjQyLCAzNCwgMzgsIDUyLCAyMTYsIDkwLCA0MywgMjQyLCAzNCwgMzgsIAorICAgIDUyLCAyMTYsIDkwLCA0NCwgMjQyLCAzNCwgMzgsIDIzMSwgMjM4LCA0MywgMjQyLCAzNCwgMzgsIDIzMSwgMjM4LCA0NCwgCisgICAgMjQyLCAzNCwgMzgsIDI0OSwgMjA1LCAyMzEsIDIzNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEzLCA1OSwgMjMzLCAKKyAgICA2MiwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjQ1LCAxNjgsIDI0OCwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCAyNDUsIDE1OSwgMjQ4LCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDEyMSwgMjMyLCAyMTksIDIyNCwgCisgICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIAorICAgIDQzLCAyMjYsIDcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyMjYsIDcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQzLCAyNDksIDEwNywgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgMjQ5LCAxMDcsIDEyNywgMjI0LCAKKyAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCA4NSwgMjMzLCAyNiwgCisgICAgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgODUsIDIzMywgMjYsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIAorICAgIDMxLCA2NywgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNTIsIDI1NCwgCisgICAgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAKKyAgICAyOCwgMzEsIDY3LCA0NCwgMjU0LCAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDI0OSwgMTY5LCAKKyAgICAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyNDksIDE2OSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgNzEsIDI0OSwgMTY5LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgMjQ5LCAxNjksIAorICAgIDEyNywgMjIwLCAxMzMsIDI0NywgMTI4LCA3MSwgMjIwLCAxMzMsIDI0NywgMTI4LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgNDIsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDQyLCAxMjcsIDI0OCwgMTYzLCAyMjYsIAorICAgIDEyMywgMjUwLCAxODAsIDIyNiwgMTIzLCAyMTIsIDMyLCAyMjYsIDEyMywgNTIsIDIxMiwgMzIsIDIyNiwgMTIzLCAyNDgsIAorICAgIDE2MywgMTIxLCAyMzIsIDIxOSwgMjUwLCAxODAsIDEyMSwgMjMyLCAyMTksIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTksIDQsIAorICAgIDI0OSwgMjI3LCA0LCAxMTAsIDI0OSwgMjI3LCA0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQsIDIyMCwgMTUyLCA0LCAyNDksIAorICAgIDIzNCwgNCwgMjI0LCAxNiwgNzksIDQsIDI0NSwgMzksIDc5LCA0LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDQsIDQzLCAyMjYsIAorICAgIDcsIDQsIDQ0LCAyMjYsIDcsIDQsIDQzLCAyNDksIDEwNywgMTI3LCA0LCA0NCwgMjQ5LCAxMDcsIDEyNywgNCwgNDMsIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMTI3LCA0LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQsIDU0LCA1MCwgNCwgMjU0LCAxMzQsIDQsIAorICAgIDI1MywgMjI0LCA0LCA5NiwgNTAsIDQsIDI0MCwgMTc0LCA0LCAyMzMsIDIxLCA1MCwgNCwgMjQyLCAxMzcsIDUwLCA0LCAKKyAgICAyNDUsIDEwNiwgNTAsIDQsIDIyMywgNTMsIDIxOSwgNDgsIDQsIDI0NywgMTQwLCA1MCwgNCwgMjI1LCAxODUsIDUwLCA0LCAKKyAgICAyNDksIDIyNSwgMjUzLCAyMTQsIDksIDI0NCwgMTcyLCA1MywgMTcsIDksIDIxNywgNDUsIDIsIDI0NCwgMTcyLCA0OCwgOSwgCisgICAgMjQ4LCAxOTEsIDUzLCAxNywgOSwgMjE3LCA3OSwgMjQ0LCA5LCA5LCAyMzQsIDIxMCwgNTMsIDE3LCA5LCAyNDQsIDE3NCwgCisgICAgNTMsIDE3LCA5LCAyNDQsIDE3NCwgMTQ3LCAxNywgOSwgMjQ4LCAxOTMsIDUzLCAxNywgOSwgMjQ4LCAxOTMsIDE0NywgMTcsIAorICAgIDksIDIzNCwgMjEyLCA1MywgMTcsIDksIDIzNCwgMjEyLCAxNDcsIDE3LCA5LCAyMjAsIDk2LCA1MywgMTcsIDksIDIyMCwgCisgICAgOTYsIDE0NywgMTcsIDksIDIxOCwgNDcsIDUzLCAxNywgOSwgMjE4LCA0NywgMTQ3LCAxNywgOSwgMSwgMTgyLCA1MywgMTcsIAorICAgIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA0MCwgMTcsIAorICAgIDksIDEsIDEwOSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAxMDksIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAyMTIsIDMxLCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDEwOSwgMiwgCisgICAgMTgyLCAyNTIsIDUxLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMTgyLCAyNTIsIDUxLCA0MCwgMTcsIDksIDEsIDc3LCAyLCAKKyAgICAxODIsIDcyLCA1MywgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCA2NSwgCisgICAgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCAxNDcsIDE3LCA5LCAxLCAxMDksIDUzLCAxNywgOSwgMSwgMTA5LCA0MCwgMTcsIAorICAgIDksIDEsIDI1MiwgNjMsIDUzLCAxNywgOSwgMSwgMjUyLCA2MywgNDAsIDE3LCA5LCAxLCAyNTIsIDYzLCA2NSwgMTcsIDksIAorICAgIDEsIDI1MiwgNjMsIDE0NywgMTcsIDksIDEsIDIxNywgOSwgMjMxLCAxNzAsIDUzLCAxNywgOSwgMSwgMjE3LCA5LCAyMzEsIAorICAgIDE3MCwgNDAsIDE3LCA5LCAxLCAyMTcsIDksIDUzLCAxNywgOSwgMSwgMjE3LCA5LCA0MCwgMTcsIDksIDEsIDIxNywgOSwgCisgICAgNjUsIDE3LCA5LCAxLCAyMTcsIDksIDE0NywgMTcsIDksIDEsIDIxNiwgMTk0LCA1MywgMTcsIDksIDEsIDIxNiwgMTk0LCAKKyAgICA0MCwgMTcsIDksIDEsIDIxNiwgMTk0LCA2NSwgMTcsIDksIDEsIDIxNiwgMTk0LCAxNDcsIDE3LCA5LCAxLCAxNTEsIDUzLCAKKyAgICAxNywgOSwgMSwgMTUxLCA0MCwgMTcsIDksIDEsIDE1MSwgNjUsIDE3LCA5LCAxLCAxNTEsIDE0NywgMTcsIDksIDEsIDEyMiwgCisgICAgNTMsIDE3LCA5LCAxLCAxMjIsIDQwLCAxNywgOSwgMSwgMTIyLCA2NSwgMTcsIDksIDEsIDEyMiwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjM0LCAxMzYsIDUzLCAxNywgOSwgMSwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMSwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMSwgCisgICAgMjM0LCAxMzYsIDE0NywgMTcsIDksIDEsIDI0OCwgMjA0LCA1MywgMTcsIDksIDEsIDI0OCwgMjA0LCA0MCwgMTcsIDksIDEsIAorICAgIDIxNiwgMjA0LCA1MywgMTcsIDksIDEsIDIxNiwgMjA0LCA0MCwgMTcsIDksIDEsIDIyMywgOTksIDUzLCAxNywgOSwgMSwgCisgICAgMjIzLCA5OSwgNDAsIDE3LCA5LCAxLCAyMTAsIDEwOSwgNTMsIDE3LCA5LCAxLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjEsIDE2OSwgNTMsIDE3LCA5LCAxLCAyMjEsIDE2OSwgNDAsIDE3LCA5LCAxLCAyMjEsIDE2OSwgNjUsIDE3LCA5LCAxLCAKKyAgICAyMjEsIDE2OSwgMTQ3LCAxNywgOSwgMSwgMjIwLCA2MiwgNTMsIDE3LCA5LCAxLCAyMjAsIDYyLCA0MCwgMTcsIDksIDEsIAorICAgIDIyMCwgNjIsIDY1LCAxNywgOSwgMSwgMjIwLCA2MiwgMTQ3LCAxNywgOSwgMSwgMjIyLCAyOSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMjIsIDI5LCA0MCwgMTcsIDksIDEsIDIyMiwgMjksIDY1LCAxNywgOSwgMSwgMjIyLCAyOSwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjQ4LCAyMjUsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMjUsIDQwLCAxNywgOSwgMSwgMjQ4LCAyMjUsIDY1LCAxNywgOSwgMSwgCisgICAgMjQ4LCAyMjUsIDE0NywgMTcsIDksIDEsIDIxNywgODIsIDUzLCAxNywgOSwgMSwgMjE3LCA4MiwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMTcsIDgyLCA2NSwgMTcsIDksIDEsIDIxNywgODIsIDE0NywgMTcsIDksIDEsIDIxMCwgMTEyLCA1MywgMTcsIDksIDEsIAorICAgIDIxMCwgMTEyLCA0MCwgMTcsIDksIDEsIDIxMCwgMTEyLCA2NSwgMTcsIDksIDEsIDIxMCwgMTEyLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgNTMsIDE3LCA5LCAxLCAyNTQsIDIwNiwgNDAsIDE3LCA5LCAxLCAyNTQsIDIwNiwgNjUsIDE3LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgMTQ3LCAxNywgOSwgMSwgMjQyLCAyNTIsIDUzLCAxNywgOSwgMSwgMjQyLCAyNTIsIDQwLCAxNywgOSwgMSwgCisgICAgMjQyLCAyNTIsIDY1LCAxNywgOSwgMSwgMjQyLCAyNTIsIDE0NywgMTcsIDksIDEsIDI0NCwgMTUxLCA1MywgMTcsIDksIDEsIAorICAgIDI0NCwgMTUxLCA0MCwgMTcsIDksIDEsIDI0NCwgMTUxLCA2NSwgMTcsIDksIDEsIDI0NCwgMTUxLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyMjQsIDg1LCA1MywgMTcsIDksIDEsIDIyNCwgODUsIDQwLCAxNywgOSwgMSwgMjI0LCA4NSwgNjUsIDE3LCA5LCAxLCAyMjQsIAorICAgIDg1LCAxNDcsIDE3LCA5LCAxLCAyMzUsIDEsIDUzLCAxNywgOSwgMSwgMjM1LCAxLCA0MCwgMTcsIDksIDEsIDIzNSwgMSwgCisgICAgNjUsIDE3LCA5LCAxLCAyMzUsIDEsIDE0NywgMTcsIDksIDEsIDIzMywgMTA5LCA1MywgMTcsIDksIDEsIDIzMywgMTA5LCAKKyAgICA0MCwgMTcsIDksIDEsIDIzMywgMTA5LCA2NSwgMTcsIDksIDEsIDIzMywgMTA5LCAxNDcsIDE3LCA5LCAxLCA2NiwgNTMsIAorICAgIDE3LCA5LCAxLCA2NiwgNDAsIDE3LCA5LCAxLCA2NiwgNjUsIDE3LCA5LCAxLCA2NiwgMTQ3LCAxNywgOSwgMSwgMjI4LCA2OCwgCisgICAgNTMsIDE3LCA5LCAxLCAyMjgsIDY4LCA0MCwgMTcsIDksIDEsIDIyOCwgNjgsIDY1LCAxNywgOSwgMSwgMjI4LCA2OCwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDY1LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDEsIDIxMiwgMzEsIDUzLCAxNywgOSwgMSwgMjEyLCAzMSwgNDAsIAorICAgIDE3LCA5LCAxLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDEsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMSwgNzcsIAorICAgIDUzLCAxNywgOSwgMSwgNzcsIDQwLCAxNywgOSwgMSwgNzcsIDY1LCAxNywgOSwgMSwgNzcsIDE0NywgMTcsIDksIDI3LCAKKyAgICAyMzMsIDEwOSwgMiwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIAorICAgIDIzMSwgMjMzLCA3MiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCAKKyAgICAyNTIsIDUxLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDI1MiwgNTEsIDQwLCAxNywgOSwgMjcsIAorICAgIDIzMywgMTA5LCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDQwLCAxNywgMjEwLCA4NywgMjExLCAKKyAgICAyNDUsIDIyOCwgNzgsIDIxOSwgMjAsIDEyNiwgMjQ1LCAzOSwgNzksIDEyNiwgMjI0LCAxLCA3OSwgMTI2LCA1NCwgNTAsIAorICAgIDEyNiwgMjQ3LCAxNDAsIDUwLCAxMjYsIDIyNSwgMTg1LCA1MCwgMTI2LCAyNTQsIDEzNCwgMTI2LCAyNTQsIDY1LCAxMjYsIAorICAgIDQzLCAyMjYsIDcsIDEyNiwgNDQsIDIyNiwgNywgMTI2LCAyNTMsIDIyNCwgMTI2LCA5NiwgNTAsIDEyNiwgMjQ5LCAyMjcsIAorICAgIDEyNiwgMjQwLCAxNzQsIDEyNiwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxMjYsIDIxOSwgNDgsIDEyNiwgMjEsIDIxMCwgODYsIAorICAgIDEyNiwgMjEsIDExMSwgMTI2LCAyMSwgMTA1LCAxMjYsIDIxLCAxNTgsIDEyNiwgMjEsIDE2MSwgMTI2LCAyMSwgMTkwLCAKKyAgICAxMjYsIDIxLCAxOTUsIDEyNiwgMjEsIDE5OSwgMTI2LCAyMSwgMTk2LCAxMjYsIDIxLCAyMDEsIDEyNiwgMjQ5LCAyMzQsIAorICAgIDEyNiwgMjIwLCAxNTIsIDEyNiwgMjMzLCAyMSwgNTAsIDEyNiwgMjQ1LCAxMDYsIDUwLCAxMjYsIDI0MiwgMTM3LCA1MCwgCisgICAgMTI2LCAyMjQsIDE2LCA3OSwgMTI2LCAyNDksIDIyNSwgMjUzLCAyMTQsIDEyNiwgNywgNiwgMSwgNjEsIDEyNiwgNywgNiwgCisgICAgMSwgMjUzLCAxNjYsIDEyNiwgNywgNiwgMSwgMjUxLCA3NCwgMTI2LCA3LCA2LCAxLCAyNDksIDY4LCAxMjYsIDcsIDYsIDEsIAorICAgIDc2LCAxMjYsIDcsIDYsIDEsIDI0NSwgMTQsIDEyNiwgNywgNiwgMSwgMjQzLCAyMDksIDEyNiwgNywgNiwgMSwgMjQyLCA2NywgCisgICAgMTI2LCA3LCA2LCAxLCA3NCwgMTI2LCA3LCA2LCAxLCAyMzUsIDE1MCwgMTI2LCA3LCA2LCAxLCAyMzUsIDI5LCAxMjYsIDcsIAorICAgIDYsIDEsIDE1NiwgMTI2LCA3LCA2LCAxLCAxOTQsIDEyNiwgNywgNiwgMSwgMjMwLCAzMCwgMTI2LCA3LCA2LCAxLCA3OCwgCisgICAgMTI2LCA3LCA2LCAxLCAyMjYsIDEwOSwgMTI2LCA3LCA2LCAxLCAyMjQsIDk5LCAxMjYsIDcsIDYsIDEsIDE1MywgMTI2LCA3LCAKKyAgICA2LCAxLCAyMjIsIDkzLCAxMjYsIDcsIDYsIDEsIDIxNywgMTUzLCAxMjYsIDcsIDYsIDEsIDY5LCAxMjYsIDcsIDYsIDEsIAorICAgIDIxNCwgMTA1LCAxMjYsIDcsIDYsIDEsIDIxMiwgOTgsIDEyNiwgNywgNiwgMSwgMjExLCAxNzgsIDEyNiwgNywgNiwgMSwgCisgICAgMjExLCAxMTcsIDEyNiwgNywgNiwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIDQyLCAxMjcsIDEyNiwgMjIzLCA1MywgMjE5LCAKKyAgICA0OCwgMTI2LCA0NCwgNDIsIDEyNywgMTI2LCAyNTAsIDM5LCAyNTUsIDIzLCAxMjYsIDEyMSwgMjMyLCAyMTksIDEyNiwgCisgICAgMjQyLCAxNDQsIDI1NSwgMjMsIDEyNiwgNywgNCwgMSwgNjEsIDEyNiwgNywgNCwgMSwgMjUzLCAxNjYsIDEyNiwgNywgNCwgCisgICAgMSwgMjUxLCA3NCwgMTI2LCA3LCA0LCAxLCAyNDksIDY4LCAxMjYsIDcsIDQsIDEsIDc2LCAxMjYsIDcsIDQsIDEsIDI0NSwgCisgICAgMTQsIDEyNiwgNywgNCwgMSwgMjQzLCAyMDksIDEyNiwgNywgNCwgMSwgMjQyLCA2NywgMTI2LCA3LCA0LCAxLCA3NCwgMTI2LCAKKyAgICA3LCA0LCAxLCAyMzUsIDE1MCwgMTI2LCA3LCA0LCAxLCAyMzUsIDI5LCAxMjYsIDcsIDQsIDEsIDE1NiwgMTI2LCA3LCA0LCAKKyAgICAxLCAxOTQsIDEyNiwgNywgNCwgMSwgMjMwLCAzMCwgMTI2LCA3LCA0LCAxLCA3OCwgMTI2LCA3LCA0LCAxLCAyMjYsIDEwOSwgCisgICAgMTI2LCA3LCA0LCAxLCAyMjQsIDk5LCAxMjYsIDcsIDQsIDEsIDE1MywgMTI2LCA3LCA0LCAxLCAyMjIsIDkzLCAxMjYsIDcsIAorICAgIDQsIDEsIDIxNywgMTUzLCAxMjYsIDcsIDQsIDEsIDY5LCAxMjYsIDcsIDQsIDEsIDIxNCwgMTA1LCAxMjYsIDcsIDQsIDEsIAorICAgIDIxMiwgOTgsIDEyNiwgNywgNCwgMSwgMjExLCAxNzgsIDEyNiwgNywgNCwgMSwgMjExLCAxMTcsIDEyNiwgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDEyNiwgNDMsIDI0OSwgMTA3LCAxMjcsIDEyNiwgNjcsIDIzMiwgMjE5LCAxMjYsIDQ0LCAyNDksIDEwNywgCisgICAgMTI3LCAxMjYsIDE4NCwgMTI2LCA0MywgNzEsIDIyNiwgNywgMTI2LCA0NCwgNzEsIDIyNiwgNywgMTAxLCAxMTAsIDI0MywgCisgICAgMjM2LCAyMTgsIDEzMSwgMTAxLCA0MywgMjQ5LCAxNjksIDEyNywgMTAxLCA0NCwgMjQ5LCAxNjksIDEyNywgMTAxLCAxMTAsIAorICAgIDI0OSwgMjI3LCAxMDEsIDU2LCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDEwMSwgNTYsIDEsIDIxMSwgMjI3LCAxMDEsIDU2LCAxLCAKKyAgICA0LCA2MSwgMTAxLCA1NiwgMSwgNCwgNzQsIDEwMSwgNTYsIDEsIDQsIDY5LCAxMDEsIDU2LCAxLCA0LCA3NiwgMTAxLCA1NiwgCisgICAgMSwgNCwgNzgsIDEwMSwgNTYsIDEsIDQsIDE5MiwgMTAxLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDQsIAorICAgIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCA0LCAyMTUsIDExOSwgMTAxLCAyMzQsIDIwNywgMjI0LCAxNzYsIDIxOSwgMzMsIDc5LCAKKyAgICAxMDEsIDU2LCAxLCA2MSwgMTAxLCA1NiwgMSwgNzQsIDEwMSwgNTYsIDEsIDY5LCAxMDEsIDU2LCAxLCA3NiwgMTAxLCA1NiwgCisgICAgMSwgNzgsIDEwMSwgNTYsIDEsIDE3NiwgMTAxLCA1NiwgMSwgMjM0LCA5OCwgMTAxLCA1NiwgMSwgMjMzLCAyMjMsIDEwMSwgCisgICAgNTYsIDEsIDIzNCwgMTg4LCAxMDEsIDU2LCAxLCAyMzQsIDM0LCAxMDEsIDU2LCAxLCAyMDYsIDEwMSwgNTYsIDEsIDIxOSwgCisgICAgMTkzLCAxMDEsIDU2LCAxLCAyMTgsIDg0LCAxMDEsIDU2LCAxLCAyMjEsIDE4MywgMTAxLCA1NiwgMSwgMjE5LCA2MCwgMTAxLCAKKyAgICA1NiwgMSwgMjE3LCAxMDYsIDEwMSwgNTYsIDEsIDIxNiwgMTE4LCAxMDEsIDU2LCAxLCAyMTUsIDExOSwgMTAxLCA1NiwgMSwgCisgICAgMjE3LCAyMywgMTAxLCA1NiwgMSwgMTEyLCAxMDEsIDU2LCAxLCAxOTgsIDEwMSwgNTYsIDEsIDIyOCwgMjM4LCAxMDEsIDU2LCAKKyAgICAxLCAyMjcsIDI0MiwgMTAxLCA1NiwgMSwgMjI5LCAxMTIsIDEwMSwgNTYsIDEsIDIyOCwgNzksIDEwMSwgNTYsIDEsIDE2MiwgCisgICAgMTAxLCA1NiwgMSwgMjQxLCAxODcsIDEwMSwgNTYsIDEsIDI0MCwgMjI5LCAxMDEsIDU2LCAxLCAyNDEsIDI0NSwgMTAxLCAKKyAgICA1NiwgMSwgMjQxLCA3NSwgMTAxLCA1NiwgMSwgMTg2LCAxMDEsIDU2LCAxLCAyMzAsIDIzNSwgMTAxLCA1NiwgMSwgMjMwLCAKKyAgICAxMDcsIDEwMSwgNTYsIDEsIDIzMSwgOTYsIDEwMSwgNTYsIDEsIDIzMCwgMTY2LCAxMDEsIDU2LCAxLCAxOTIsIDEwMSwgNTYsIAorICAgIDEsIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgMjA1LCAxMDEsIDU2LCAxLCAyMjMsIDM4LCAKKyAgICAxMDEsIDU2LCAxLCAyMjIsIDE0MiwgMTAxLCA1NiwgMSwgMjIzLCAxMzEsIDEwMSwgNTYsIDEsIDIyMiwgMjEzLCAxMDEsIAorICAgIDU2LCAxLCAyMTIsIDY1LCAxMDEsIDU2LCAxLCAyMzAsIDMwLCAxMDEsIDU2LCAyMTMsIDEzNSwgMjE5LCAzMywgNzksIDEwMSwgCisgICAgNTYsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMTAxLCAyNCwgMjQ0LCAxMTEsIDEwMSwgMjQsIDEsIDIzNCwgNjQsIDEwMSwgCisgICAgMjQsIDEsIDIxOCwgMjE3LCAxMDEsIDI0LCAxLCAyMzQsIDU3LCAxMDEsIDI0LCAxLCAyMjgsIDIzMSwgMTAxLCAyNCwgMSwgCisgICAgMjI4LCAyMjksIDEwMSwgMjQsIDEsIDIyOCwgMjI4LCAxMDEsIDI0LCAxLCAyMTYsIDEwMiwgMTAxLCAyNCwgMSwgMjE4LCAKKyAgICAyMDYsIDEwMSwgMjQsIDEsIDIyMywgMjksIDEwMSwgMjQsIDEsIDIyMywgMjQsIDEwMSwgMjQsIDEsIDIyMywgMjEsIDEwMSwgCisgICAgMjQsIDEsIDIyMywgMTQsIDEwMSwgMjQsIDEsIDIyMywgOSwgMTAxLCAyNCwgMSwgMjIzLCA0LCAxMDEsIDI0LCAxLCAyMjMsIAorICAgIDE1LCAxMDEsIDI0LCAxLCAyMjMsIDI3LCAxMDEsIDI0LCAxLCAyMzAsIDIyMiwgMTAxLCAyNCwgMSwgMjI1LCA5OCwgMTAxLCAKKyAgICAyNCwgMSwgMjE4LCAyMTQsIDEwMSwgMjQsIDEsIDIyNSwgODcsIDEwMSwgMjQsIDEsIDIxOSwgMTUwLCAxMDEsIDI0LCAxLCAKKyAgICAyMTgsIDIxMSwgMTAxLCAyNCwgMSwgMjM2LCA2MywgMTAxLCAyNCwgMSwgMjUwLCA1NCwgMTAxLCAyNCwgMSwgMjE4LCAyMjEsIAorICAgIDEwMSwgMjQsIDEsIDI1MCwgMTE0LCAxMDEsIDI0LCAxLCAyMzQsIDExNiwgMTAxLCAyNCwgMSwgMjE2LCAxNzQsIDEwMSwgCisgICAgMjQsIDEsIDIyNSwgMTM0LCAxMDEsIDI0LCAxLCAyNDEsIDE3OSwgMTAxLCAyNCwgMSwgNjEsIDEwMSwgMjQsIDEsIDI1NCwgCisgICAgMjUyLCAxMDEsIDI0LCAxLCAxOTIsIDEwMSwgMjQsIDEsIDIxMSwgOTIsIDEwMSwgMjQsIDEsIDI0NSwgMTI1LCAxMDEsIDI0LCAKKyAgICAxLCA3NiwgMTAxLCAyNCwgMSwgMjExLCAzNiwgMTAxLCAyNCwgMSwgMjExLCA0NywgMTAxLCAyNCwgMSwgNzgsIDEwMSwgMjQsIAorICAgIDEsIDIxMiwgNjUsIDEwMSwgMjQsIDEsIDIxMiwgNjIsIDEwMSwgMjQsIDEsIDIyNiwgMjM4LCAxMDEsIDI0LCAxLCAyMTAsIAorICAgIDI0NCwgMTAxLCAyNCwgMSwgNjksIDEwMSwgMjQsIDEsIDIxMiwgMTEsIDEwMSwgMjQsIDEsIDIxMiwgMjIsIDEwMSwgMjQsIAorICAgIDEsIDIxMSwgMjUwLCAxMDEsIDI0LCAxLCAyMTAsIDIxMiwgMTAxLCAyNCwgMSwgMjQ1LCA2MywgMTAxLCAyNCwgMSwgMjExLCAKKyAgICA4LCAxMDEsIDI0LCAxLCA3NCwgMTI2LCAyNTAsIDE4NCwgNTAsIDEyNiwgMjI0LCAyMzEsIDUwLCAxMjYsIDIyOCwgNTcsIAorICAgIDUwLCAxMjYsIDIzMSwgMjM3LCAxMjYsIDI1MSwgMTQzLCAxMzAsIDEyNiwgMjExLCA0MCwgNTAsIDEyNiwgMjExLCAyMTcsIAorICAgIDUwLCAxMDEsIDI0NCwgMjYsIDE5MywgMjEzLCAyMzksIDEwMSwgMTQwLCA3NSwgMTAxLCAyMTQsIDE1MywgNzUsIDEwMSwgCisgICAgOTcsIDc1LCAxMDEsIDI0NiwgMTEyLCA3NSwgMTAxLCA4NSwgMjE4LCAyMzYsIDEwMSwgNzEsIDI1MCwgNDMsIDIzNSwgMjExLCAKKyAgICAyNTQsIDEwNywgMjU0LCAxMjgsIDIzNSwgMjExLCAyNTQsIDEwNywgMjIwLCAxMzksIDIzNSwgMjExLCAyNTQsIDEwNywgCisgICAgMjE2LCAyMzcsIDIyNiwgMjUzLCAyMjMsIDc1LCAyNTAsIDE1MCwgMjIzLCA3NSwgMjUwLCAxNTAsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxNTAsIDYxLCA2MiwgNTcsIDMsIDI1MywgMTE5LCA3NiwgNjIsIDU3LCAzLCAyNTMsIDEyOCwgNzQsIDYyLCA1NywgMywgCisgICAgMjUzLCA5NiwgNzgsIDYyLCA1NywgMywgMjUzLCAxNDYsIDY5LCA2MiwgNTcsIDMsIDI1MywgMTY1LCAyNDgsIDIyOSwgNjIsIAorICAgIDU3LCAzLCAyNTMsIDExMiwgMjQ4LCA5OCwgNjIsIDU3LCAzLCAyNTMsIDE1MiwgMjQ4LCAxMSwgNjIsIDU3LCAzLCAyNTMsIAorICAgIDE0MiwgMjQ3LCAxNTMsIDYyLCA1NywgMywgMjUzLCAxMDYsIDI0NiwgODYsIDYyLCA1NywgMywgMjUzLCAxMDAsIDIzNSwgCisgICAgMTQ3LCA2MiwgNTcsIDMsIDI1MywgMTExLCAyMzUsIDEzMiwgNjIsIDU3LCAzLCAyNTMsIDEyMSwgMjM1LCA3NCwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDkyLCAyMzUsIDU3LCA2MiwgNTcsIDMsIDI1MywgODAsIDE3NiwgNjIsIDU3LCAzLCAyNTMsIDExMywgMjM0LCAKKyAgICAxODgsIDYyLCA1NywgMywgMjUzLCA5MCwgMjM0LCA5OCwgNjIsIDU3LCAzLCAyNTMsIDg3LCAyMzQsIDM0LCA2MiwgNTcsIDMsIAorICAgIDI1MywgNzYsIDIzMywgMjIzLCA2MiwgNTcsIDMsIDI1MywgNzcsIDE4NiwgNjIsIDU3LCAzLCAyNTMsIDE0MywgMjMxLCA5NiwgCisgICAgNjIsIDU3LCAzLCAyNTMsIDg0LCAyMzAsIDIzNSwgNjIsIDU3LCAzLCAyNTMsIDE0MSwgMjMwLCAxNjYsIDYyLCA1NywgMywgCisgICAgMjUzLCAxMzMsIDIzMCwgMTA3LCA2MiwgNTcsIDMsIDI1MywgMTU0LCAxOTgsIDYyLCA1NywgMywgMjUzLCAxMzIsIDIyOSwgCisgICAgMTEyLCA2MiwgNTcsIDMsIDI1MywgMTI2LCAyMjgsIDIzOCwgNjIsIDU3LCAzLCAyNTMsIDEwNSwgMjI4LCA3OSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDEwMiwgMjI3LCAyNDIsIDYyLCA1NywgMywgMjUzLCAxNjEsIDE5MSwgNjIsIDU3LCAzLCAyNTMsIDg1LCAyMjUsIAorICAgIDIyNCwgNjIsIDU3LCAzLCAyNTMsIDExOCwgMjI1LCAxMTEsIDYyLCA1NywgMywgMjUzLCAxNDUsIDIyNSwgMTksIDYyLCA1NywgCisgICAgMywgMjUzLCAxMDcsIDIyNCwgMTUzLCA2MiwgNTcsIDMsIDI1MywgMTQwLCAyMjQsIDkxLCA2MiwgNTcsIDMsIDI1MywgNzksIAorICAgIDIyNCwgNzIsIDYyLCA1NywgMywgMjUzLCAxMzUsIDIyNCwgNTYsIDYyLCA1NywgMywgMjUzLCAxMjQsIDIyNCwgNDUsIDYyLCAKKyAgICA1NywgMywgMjUzLCA5NywgMjA1LCA2MiwgNTcsIDMsIDI1MywgMTI5LCAyMjMsIDEzMSwgNjIsIDU3LCAzLCAyNTMsIDEwNCwgCisgICAgMjIzLCAzOCwgNjIsIDU3LCAzLCAyNTMsIDE2MywgMjIyLCAyMTMsIDYyLCA1NywgMywgMjUzLCAxMzAsIDIyMiwgMTQyLCAKKyAgICA2MiwgNTcsIDMsIDI1MywgMTI1LCAyMDYsIDYyLCA1NywgMywgMjUzLCAxNDgsIDIyMSwgMTgzLCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTE2LCAyMTksIDE5MywgNjIsIDU3LCAzLCAyNTMsIDE0NCwgMjE5LCA2MCwgNjIsIDU3LCAzLCAyNTMsIDk5LCAyMTgsIDg0LCAKKyAgICA2MiwgNTcsIDMsIDI1MywgOTgsIDIxNywgMTA2LCA2MiwgNTcsIDMsIDI1MywgMTU5LCAyMTcsIDIzLCA2MiwgNTcsIDMsIAorICAgIDI1MywgMTIwLCAyMTYsIDExOCwgNjIsIDU3LCAzLCAyNTMsIDE1NywgMTEyLCA2MiwgNTcsIDMsIDI1MywgODgsIDIxNSwgCisgICAgMTE5LCA2MiwgNTcsIDMsIDI1MywgMTAzLCAyMTIsIDY1LCA2MiwgNTcsIDMsIDI1MywgODIsIDIxMiwgMjIsIDYyLCA1NywgCisgICAgMywgMjUzLCAxMTcsIDIxMSwgMjUwLCA2MiwgNTcsIDMsIDI1MywgMTE1LCAyMTEsIDIyNywgNjIsIDU3LCAzLCAyNTMsIAorICAgIDEzOSwgMjEwLCAxMTYsIDYyLCA1NywgMywgMjUzLCA4MywgMjEwLCA5NCwgNjIsIDU3LCAzLCAyNTMsIDEzNiwgMjEwLCAyMywgCisgICAgNjIsIDU3LCAzLCAyNTMsIDEzMSwgMjU1LCA4NCwgNjIsIDU3LCAzLCAyNTMsIDExNCwgMjU1LCA4MywgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDczLCAyNTMsIDIwMCwgNjIsIDU3LCAzLCAyNTMsIDg2LCAyNDYsIDU0LCA2MiwgNTcsIDMsIDI1MywgNjksIDI0NiwgCisgICAgNTMsIDYyLCA1NywgMywgMjUzLCAxMDksIDIyNywgMTc4LCA2MiwgNTcsIDMsIDI1MywgMTI3LCAyMjQsIDE1MSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDk1LCAyMjQsIDE1NSwgNjIsIDU3LCAzLCAyNTMsIDgxLCAyMjMsIDE4OSwgNjIsIDU3LCAzLCAyNTMsIDEyMywgCisgICAgMjIzLCAxODgsIDYyLCA1NywgMywgMjUzLCA4OSwgMjIyLCAyMTIsIDYyLCA1NywgMywgMjUzLCA5MSwgMjE3LCAxMDMsIDYyLCAKKyAgICA1NywgMywgMjUzLCA3MSwgMjE1LCA3OCwgNjIsIDU3LCAzLCAyNTMsIDY4LCAxMDUsIDYyLCA1NywgMTYsIDI1MywgMTM4LCAKKyAgICA2MiwgNTcsIDE2LCAyNTMsIDEzNywgNjIsIDU3LCAxNiwgMjUzLCAxMzQsIDYyLCA1NywgMTYsIDI1MywgMTIyLCA2MiwgNTcsIAorICAgIDE2LCAyNTMsIDExMCwgNjIsIDU3LCAxNiwgMjUzLCAxMDgsIDYyLCA1NywgMTYsIDI1MywgMTAxLCA2MiwgNTcsIDE2LCAKKyAgICAyNTMsIDk0LCA2MiwgNTcsIDE2LCAyNTMsIDkzLCA2MiwgNTcsIDE2LCAyNTMsIDc4LCA2MiwgNTcsIDE2LCAyNTMsIDc1LCAKKyAgICA2MiwgNTcsIDE2LCAyNTMsIDc0LCA2MiwgNTcsIDE2LCAyNTMsIDcyLCA2MiwgNTcsIDE2LCAyNTMsIDcwLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCA2NywgMjMxLCAxOTAsIDYyLCA1NywgMTA2LCAyNTMsIDY2LCAyMTEsIDIyMSwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgNjUsIDI0OCwgODIsIDYyLCA1NywgMTA2LCAyNTMsIDY0LCAyNDUsIDEwMywgNjIsIDU3LCAxMDYsIDI1MywgNjMsIDIzMSwgCisgICAgMTY0LCA2MiwgNTcsIDEwNiwgMjUzLCA2MiwgMjE4LCAxNjQsIDYyLCA1NywgMTA2LCAyNTMsIDYxLCAyNDUsIDQ1LCA2MiwgCisgICAgNTcsIDEwNiwgMjUzLCA2MCwgMjIzLCAxNTYsIDYyLCA1NywgMTA2LCAyNTMsIDU5LCAyMjAsIDY0LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA1OCwgMjQxLCAyNDQsIDYyLCA1NywgMTA2LCAyNTMsIDU3LCAyMTksIDI3LCA2MiwgNTcsIDEwNiwgMjUzLCA1NiwgCisgICAgMjUxLCAyMTEsIDYyLCA1NywgMTA2LCAyNTMsIDU1LCAyNDksIDE1MywgNjIsIDU3LCAxMDYsIDI1MywgNTQsIDI1MSwgMTIzLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCA1MywgMjEyLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MiwgMjUyLCAxNDQsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDUxLCAyMjYsIDIwOSwgNjIsIDU3LCAxMDYsIDI1MywgNTAsIDIxOSwgMCwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgNDksIDI0OSwgNzYsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgNDgsIDIzNCwgMjMwLCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIAorICAgIDQ3LCAyMzQsIDIzOCwgNjIsIDU3LCAxMDYsIDI1MywgNDYsIDIyNiwgMjIyLCA2MiwgNTcsIDEwNiwgMjUzLCA0NSwgMjExLCAKKyAgICAyMzYsIDYyLCA1NywgMTA2LCAyNTMsIDQ0LCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIDQzLCAyNTQsIDI1LCA2MiwgNTcsIAorICAgIDIzMCwgMTQ3LCAyNTMsIDQyLCAyMzEsIDU3LCA2MiwgNTcsIDEwNiwgMjUzLCA0MSwgMjUxLCAxNDIsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDQwLCAyNDIsIDE3MywgNjIsIDU3LCAxMDYsIDI1MywgMzksIDYyLCA1NywgMTA2LCAyNTMsIDM4LCAyMTEsIDIxMiwgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgMzcsIDYyLCA1NywgMTA2LCAyNTMsIDM2LCA2MiwgNTcsIDEwNiwgMjUzLCAzNSwgMjQwLCAKKyAgICAyNTUsIDYyLCA1NywgMTA2LCAyNTMsIDM0LCA2MiwgNTcsIDEwNiwgMjUzLCAzMywgNjIsIDU3LCAxMDYsIDI1MywgMzIsIAorICAgIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgMzAsIDIxNSwgOTIsIDYyLCA1NywgMTA2LCAyNTMsIDI5LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAyOCwgNjIsIDU3LCAxMDYsIDI1MywgMjcsIDI1MCwgMiwgNjIsIDU3LCAxMDYsIDI1MywgMjYsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCAyNCwgMjQzLCAxMDAsIDYyLCA1NywgMTA2LCAyNTMsIDIzLCAyNTQsIDEyLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAyMiwgNjIsIDU3LCAxMDYsIDI1MywgMjEsIDYyLCA1NywgMTA2LCAyNTMsIDIwLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCAxOSwgNjIsIDU3LCAxMDYsIDI1MywgMTgsIDYyLCA1NywgMTA2LCAyNTMsIDE3LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAxNiwgNjIsIDU3LCAxMDYsIDI1MywgMTUsIDYyLCA1NywgMTA2LCAyNTMsIDE0LCA2MiwgNTcsIDEwNiwgMjUzLCAKKyAgICAxMywgMjMwLCAxMzksIDYyLCA1NywgMTA2LCAyNTMsIDEyLCA2MiwgNTcsIDEwNiwgMjUzLCAxMSwgMjE1LCAyMzYsIDYyLCAKKyAgICA1NywgMTA2LCAyNTMsIDEwLCA2MiwgNTcsIDEwNiwgMjUzLCA5LCA2MiwgNTcsIDEwNiwgMjUzLCA4LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA3LCA2MiwgNTcsIDEwNiwgMjUzLCA2LCA2MiwgNTcsIDEwNiwgMjUzLCA1LCA2MiwgNTcsIDEwNiwgMjUzLCA0LCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAzLCA2MiwgNTcsIDEwNiwgMjUzLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAxLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTUsIDI0MSwgMjE4LCA2MiwgNTcsIDEwNiwgMjUyLCAyMzQsIDI0NCwgCisgICAgMzYsIDYyLCA1NywgMTA2LCAyNTIsIDIzMSwgMjUyLCAxMjQsIDYyLCA1NywgMTA2LCAyNTIsIDIyNiwgMjE5LCA3LCA2MiwgCisgICAgNTcsIDEwNiwgMjUyLCAyMjUsIDc1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjQsIDYyLCA1NywgMTA2LCAyNTIsIDIyMywgMjE3LCAKKyAgICAyMzcsIDYyLCA1NywgMTA2LCAyNTIsIDIyMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjIxLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjAsIAorICAgIDIxMSwgMjU0LCAyNTAsIDE0NywgNjIsIDU3LCAxMDYsIDI1MiwgMjE5LCAyNTAsIDE0NywgNjIsIDU3LCAxMDYsIDI1MiwgCisgICAgMjE4LCAyNTAsIDE0OCwgMjQ0LCA3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTcsIDIxMiwgMCwgNjIsIDU3LCAxMDYsIDI1MiwgCisgICAgMjE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTUsIDYyLCA1NywgMjMwLCAxNDcsIDI1MiwgMjE0LCAyNDcsIDIwNiwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MiwgMjEzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMTIsIDYyLCA1NywgMTA2LCAyNTIsIDIxMCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MiwgMjA5LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDgsIDYyLCA1NywgMTA2LCAyNTIsIDIwNywgMjQ4LCAxNjcsIDYyLCA1NywgCisgICAgMTA2LCAyNTIsIDIwNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjA1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDQsIDYyLCA1NywgMTA2LCAKKyAgICAyNTIsIDIwMywgNjIsIDU3LCAxMDYsIDI1MiwgMjAyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MywgMzEsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTMsIDYyLCA1NywgMTA2LCAKKyAgICAyMTMsIDE4NiwgMjUyLCAyNTIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTEsIDYyLCA1NywgMTA2LCAyMTMsIAorICAgIDE4NiwgMjUyLCAyNTAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCisgICAgMjUyLCAyNDgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKKyAgICAyNDYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDQsIAorICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDIsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDAsIDYyLCA1NywgMTA2LCAKKyAgICAyMTMsIDE4NiwgMjUyLCAyMzksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzgsIDYyLCA1NywgMTA2LCAyMTMsIAorICAgIDE4NiwgMjUyLCAyMzcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCisgICAgMjUyLCAyMzUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKKyAgICAyMzIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjksIAorICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjcsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMTEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMDEsIDI1NCwgMjQ1LCAyMTEsIAorICAgIDIwOSwgMjIwLCAxNDAsIDIzMiwgMjE5LCAyNTQsIDI0NSwgMjExLCAyMDksIDIyMCwgMTQwLCAyNDcsIDEyOCwgMjU0LCAKKyAgICAyNDUsIDI1MCwgMTM4LCA3OSwgMjU0LCAyNDUsIDU0LCAxMTEsIDI1NCwgMjQ1LCA1NCwgMTA1LCAyNTQsIDI0NSwgNTQsIAorICAgIDE1OCwgMjU0LCAyNDUsIDU0LCAxNjEsIDI1NCwgMjQ1LCA1NCwgMTkwLCAyNTQsIDI0NSwgNTQsIDE5NSwgMjU0LCAyNDUsIAorICAgIDU0LCAxOTksIDI1NCwgMjQ1LCA1NCwgMTk2LCAyNTQsIDI0NSwgNTQsIDIwMSwgMjU0LCAyNDUsIDU0LCAyMTYsIDI0OCwgCisgICAgMjU0LCAyNDUsIDU0LCAyMTUsIDczLCAyNTQsIDI0NSwgNTQsIDIxNiwgMTYzLCAyNTQsIDI0NSwgNTQsIDI0NCwgMjMsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjQ0LCAxMjIsIDI1NCwgMjQ1LCA1NCwgMjE5LCAxMTMsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMTgsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjQ1LCAxOTIsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDAsIDI1NCwgMjQ1LCA1NCwgMTIzLCAyNDAsIAorICAgIDIxNywgMjU0LCAyNDUsIDU0LCAxMTMsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDEzNCwgMjQwLCAyMTcsIDI1NCwgMjQ1LCAKKyAgICA1NCwgMjQ0LCAxOSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgCisgICAgMjE5LCAxMjcsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTI0LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyNDUsIAorICAgIDIwMSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDUsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDEyMywgMjE2LCAKKyAgICAxNDgsIDI1NCwgMjQ1LCA1NCwgMTEzLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAxMzQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgCisgICAgNTQsIDI0NCwgMTksIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgODksIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIAorICAgIDIxOSwgMTI3LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjAsIDEyNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ1LCAKKyAgICAyMDEsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjA1LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTYsIDI0OSwgCisgICAgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE1LCA3NCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE2LCAxNjQsIDIxNiwgCisgICAgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgMjQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgMTIzLCAyMTYsIDE0OCwgCisgICAgMjU0LCAyNDUsIDU0LCAyMTksIDExNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMTksIDIxNiwgMTQ4LCAyNTQsIAorICAgIDI0NSwgNTQsIDI0NSwgMTkzLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwMSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCAKKyAgICAyMTIsIDE0LCAyNTIsIDEzNiwgMjE0LCAxNzMsIDI1NCwgMjQ1LCAyMTIsIDE0LCAyNDQsIDEwMCwgMjE4LCA2MCwgMjU0LCAKKyAgICAyNDUsIDIxMiwgMTQsIDIyMSwgMTc4LCAyMTgsIDYwLCAyNTQsIDI0NSwgMjEyLCAxNCwgMjE2LCAxNzAsIDIxOCwgNjAsIAorICAgIDI1NCwgMjQ1LCAyMTIsIDE0LCAyNDQsIDEyLCAyMTgsIDYwLCAyNTQsIDI0NSwgMjQ2LCA4OSwgMjMxLCA5NSwgMjQ0LCAKKyAgICAxMDAsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMzIsIDIwNSwgMjMxLCA5NSwgMjQ0LCAxMDAsIDIxOCwgNjAsIDI1NCwgMjQ1LCAKKyAgICAyMzEsIDk1LCAyMjEsIDE3OCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIzMSwgOTUsIDIxNiwgMTcwLCAyMTgsIDYwLCAyNiwgCisgICAgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjI0LCAyNCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0MiwgMzQsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDYsIDEwOCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxOTAsIDI2LCAyNTUsIAorICAgIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIAorICAgIDIxNiwgMTQ4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgCisgICAgMjE2LCAyNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAKKyAgICAyNTMsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIAorICAgIDIxOCwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDIxNiwgMTQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgCisgICAgMjUzLCAyMDIsIDI0NCwgODksIDIxNiwgMTQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIAorICAgIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgCisgICAgMjAyLCAyNDQsIDEyMywgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE4LCAxNTIsIAorICAgIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTgsIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAKKyAgICAyMDIsIDEyMywgMjE2LCAxNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgCisgICAgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIDIxNiwgMTQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgCisgICAgMTUsIDI1MywgMjAyLCAyMTYsIDI0OSwgMjMwLCAxNjksIDI2LCAyNTUsIDE1LCAyNDEsIDIxMiwgMTIzLCAyMjUsIDM0LCAKKyAgICAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDExMSwgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAxMTEsIDI2LCAyNTUsIDE1LCAyNDUsIAorICAgIDExMiwgMTA1LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDEwNSwgMjYsIDI1NSwgMTUsIDI0OSwgNzMsIDExMywgMjQ2LCAKKyAgICAxMDcsIDI2LCAyNTUsIDE1LCAyNDUsIDExMiwgMTEzLCAyNDYsIDEwNywgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAxOTAsIAorICAgIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjE2LCAyNDksIDI1NCwgCisgICAgMTQ5LCAxNywgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIzMSwgNDYsIDIxNiwgMjQ4LCAKKyAgICAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDIxNiwgMTYzLCAyNiwgCisgICAgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgMTIyLCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgMTIzLCAyNTQsIDE0OSwgCisgICAgMTcsIDI2LCAyNTUsIDE1LCAyNDEsIDIwOCwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCAxMjIsIDI2LCAKKyAgICAyNTUsIDE1LCAyMTYsIDE4MiwgMTIzLCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAxMzQsIDI0MCwgMjE3LCAKKyAgICAyNiwgMjU1LCAxNSwgMjQ1LCAxMTIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgODksIAorICAgIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjUwLCAKKyAgICAyMzUsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjI5LCAxODcsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgCisgICAgMjU1LCAxNSwgMjE2LCAxODIsIDEyMywgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCA4OSwgMjE2LCAKKyAgICAxNDgsIDI2LCAyNTUsIDE1LCAyNDgsIDY1LCAyNDQsIDg5LCAyMzAsIDE2OSwgMjYsIDI1NSwgMTUsIDIxOCwgMTIwLCAyNDQsIAorICAgIDEyMywgMjMwLCAxNjksIDI2LCAxMjMsIDE2MywgNTAsIDI2LCAxMjMsIDE2MywgNSwgMjU0LCAxNDksIDE3LCAyNiwgMTEzLCAKKyAgICAyMTYsIDE2OCwgNTAsIDI2LCAxMzQsIDIyNCwgMjMsIDUwLCAyNiwgMjExLCA0NSwgNTAsIDI2LCAyMTcsIDY5LCA1MCwgMjYsIAorICAgIDI0NiwgMTA5LCA1MCwgMjYsIDIyNiwgMjUwLCA1MCwgMjYsIDExMywgMjI2LCAyNDksIDUwLCAyNiwgMTM0LCAyMjYsIDI0OSwgCisgICAgNTAsIDI2LCAyNDQsIDE5LCAyMjYsIDI0OSwgNTAsIDI2LCAyNDQsIDg5LCAyMjYsIDI0OSwgNTAsIDI2LCAyMzEsIDQwLCAKKyAgICA1MCwgMjYsIDIzMywgMTYzLCAyNTIsIDEzNiwgNTAsIDI2LCAyMzIsIDIwMCwgNTAsIDI2LCAyMjYsIDEzNSwgNTAsIDI2LCAKKyAgICAyMTEsIDE1OSwgNTAsIDI2LCAyNTMsIDI1MSwgNTAsIDI2LCAyNTQsIDgsIDUwLCAyNiwgMjQyLCAxNTEsIDUwLCAyNiwgCisgICAgMjE1LCAxODcsIDI1MiwgMTM2LCA1MCwgMjYsIDIxMCwgODcsIDUwLCAyMjIsIDIwMCwgMjIwLCAxMTUsIDUwLCAyMjIsIAorICAgIDIwMCwgMjE0LCAxODUsIDUwLCAyMjIsIDIwMCwgMjIwLCAxNDQsIDUwLCAyMjIsIDIwMCwgMjIwLCAxMTMsIDUwLCAyMjIsIAorICAgIDIwMCwgMjQ3LCAyMjEsIDIyMCwgMTEzLCA1MCwgMjIyLCAyMDAsIDIxOSwgMTcwLCA1MCwgMjIyLCAyMDAsIDI0OCwgNjEsIAorICAgIDUwLCAyMjIsIDIwMCwgMjI0LCA5LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTMxLCA1MCwgMjIyLCAyMDAsIDI0NiwgNjgsIDUwLCAKKyAgICAyMjIsIDIwMCwgMjUzLCAyNDYsIDUwLCAyMjIsIDIwMCwgMjUwLCAxNzksIDUwLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDIyNSwgMjE2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyNSwgMjcsIDI0MSwgMjQyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDIxNywgNDYsIDI0MSwgMjQyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjU1LCAyMjUsIDE0NiwgMjQ3LCAKKyAgICAxOTksIDUsIDI1MCwgMTA5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMSwgMjIxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI0MSwgMjE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MywgOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE2LCAKKyAgICAxMTcsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgNzUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUxLCAxNzcsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjIwLCAzMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDI1MiwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyMzEsIDE4OSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzEsIDE0MSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyMjEsIDIxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzIsIDI0MywgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyNTEsIDE5NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDIzOSwgMjI1LCAzOCwgMjI1LCAxNDYsIDI0NywgMTk5LCAKKyAgICA1LCAyNDcsIDE0MSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDIzMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTksIAorICAgIDg5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjMyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MiwgNzEsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjIwLCAxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDAsIDI1NSwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyNDEsIDE4NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTEsIDEyMCwgMjMzLCA0MiwgMjI1LCAKKyAgICAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDIzMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjMsIDE1NiwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyNDUsIDIzOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDYsIDExNSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyMTUsIDEwNiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTIsIDc0LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDIyNSwgMzksIDIxNSwgMjM2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMywgMTU5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDIyNiwgMjIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjIyLCAxOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjMyLCAKKyAgICAyMzAsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjI2LCAxMTksIDI1MiwgMTkyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI0NCwgNTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQyLCAxNDUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE4LCAKKyAgICAxMjEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgNCwgMjUzLCAxNzYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjEyLCAzMiwgCisgICAgMjUyLCAxNTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMzgsIDIyNiwgMjUyLCA5MSwgMjMyLCA2NSwgMSwgNjEsIDIzMiwgCisgICAgNjUsIDEsIDc2LCAyMzIsIDY1LCAxLCAyNTMsIDE2NiwgMjMyLCA2NSwgMSwgMjUyLCAyNywgMjMyLCA2NSwgMSwgMjQzLCAKKyAgICAyMDksIDIzMiwgNjUsIDEsIDI0OSwgNjgsIDIzMiwgNjUsIDEsIDc0LCAyMzIsIDY1LCAxLCAyMTIsIDk4LCAyMzIsIDY1LCAKKyAgICAxLCAyMTAsIDE1OSwgMjMyLCA2NSwgMSwgMjE2LCAyMTEsIDIzMiwgNjUsIDEsIDIzNSwgMTUwLCAyMzIsIDY1LCAxLCAyMzUsIAorICAgIDI5LCAyMzIsIDY1LCAxLCAyMjQsIDk5LCAyMzIsIDY1LCAxLCAxNTYsIDIzMiwgNjUsIDEsIDE5NCwgMjMyLCA2NSwgMSwgCisgICAgMjMwLCAzMCwgMjMyLCA2NSwgMSwgMjMwLCAxNzEsIDIzMiwgNjUsIDEsIDIyOCwgMTE2LCAyMzIsIDY1LCAxLCA2OSwgMjMyLCAKKyAgICA2NSwgMSwgMjI2LCAxMDksIDIzMiwgNjUsIDEsIDIzNCwgNTMsIDIzMiwgNjUsIDEsIDE1MywgMjMyLCA2NSwgMSwgMjIyLCAKKyAgICA5MywgMjMyLCA2NSwgMSwgMjE3LCAxNTMsIDIzMiwgNjUsIDEsIDIxNSwgMTYwLCAyMzIsIDY1LCAxLCAyNTQsIDEzMSwgCisgICAgMjMyLCA2NSwgMSwgMjQ1LCAxNTgsIDIzMiwgNjUsIDEsIDI0MiwgNjcsIDIzMiwgNjUsIDEsIDIxMSwgMTc4LCAyNTAsIAorICAgIDI0NSwgMSwgNjEsIDI1MCwgMjQ1LCAxLCAyMjYsIDk1LCAyNTAsIDI0NSwgMSwgMjQ5LCA2OCwgMjUwLCAyNDUsIDEsIDE1NiwgCisgICAgMjUwLCAyNDUsIDEsIDIxNCwgMTE2LCAyNTAsIDI0NSwgMSwgMTUzLCAyNTAsIDI0NSwgMSwgMjMzLCA2OCwgMjUwLCAyNDUsIAorICAgIDEsIDI1NSwgODQsIDI1MCwgMjQ1LCAxLCAyMjQsIDk5LCAyNTAsIDI0NSwgMSwgMjUzLCAxNjYsIDI1MCwgMjQ1LCAxLCAKKyAgICAxOTQsIDI1MCwgMjQ1LCAxLCA3OCwgMjUwLCAyNDUsIDEsIDI0OCwgMjMxLCAyNTAsIDI0NSwgMSwgMjE3LCAxNTMsIDI1MCwgCisgICAgMjQ1LCAxLCAyMjAsIDEwNiwgMjUwLCAyNDUsIDEsIDIyMCwgMTA1LCAyNTAsIDI0NSwgMSwgMjIyLCA5MywgMjUwLCAyNDUsIAorICAgIDEsIDI1MSwgNzMsIDI1MCwgMjQ1LCAxLCA2OSwgMjUwLCAyNDUsIDEsIDIyOCwgMTE2LCAyNTAsIDI0NSwgMSwgMjExLCAKKyAgICAxNzgsIDI1MCwgMjQ1LCAxLCAyMzAsIDMwLCAyNTAsIDI0NSwgMSwgMjE1LCAxNTksIDI1MCwgMjQ1LCAxLCAyMjYsIDEwOSwgCisgICAgMjUwLCAyNDUsIDEsIDIxOCwgMjI4LCAyNTAsIDI0NSwgMSwgNzQsIDI1MCwgMjQ1LCAxLCA3NiwgMjUwLCAyNDUsIDEsIAorICAgIDIxNCwgMTEzLCAyNTAsIDI0NSwgMSwgMjM1LCAyOSwgMjUwLCAyNDUsIDEsIDIzNSwgMjAsIDI1MCwgMjQ1LCAxLCAyMjksIAorICAgIDE1NSwgMjUwLCAyNDUsIDEsIDIxNCwgMTE4LCAyNTAsIDI0NSwgMSwgMjQzLCAyMDksIDI1MCwgMjQ1LCAxLCAyNDMsIDE0NCwgCisgICAgMjUwLCAyNDUsIDEsIDIxOCwgMTcwLCAyNTAsIDI0NSwgMSwgMjE4LCAxNjksIDI1MCwgMjQ1LCAxLCAyMjksIDg0LCAyNTAsIAorICAgIDI0NSwgMSwgMjM2LCA0MCwgMjUwLCAyNDUsIDEsIDI1MSwgNzIsIDI1MCwgMjQ1LCAxLCAyMTUsIDE2MCwgMjUwLCAyNDUsIAorICAgIDEsIDIxNCwgMTE1LCAyNTAsIDI0NSwgMSwgMjIyLCAxODIsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzNCwgMjUwLCAyNDUsIDEsIAorICAgIDIzMSwgMTMzLCAyNTAsIDI0NSwgMSwgMjMxLCAxMzIsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzMSwgMjUwLCAyNDUsIDEsIDIzMywgCisgICAgNjcsIDI1MCwgMjQ1LCAxLCAyNDUsIDI0MiwgMjUwLCAyNDUsIDEsIDIxNCwgMTE0LCA1NSwgMzIsIDEsIDYxLCA1NSwgMzIsIAorICAgIDEsIDI1MiwgODMsIDU1LCAzMiwgMSwgMjM0LCAxODgsIDU1LCAzMiwgMSwgMjQ4LCA5OCwgNTUsIDMyLCAxLCA3NiwgNTUsIAorICAgIDMyLCAxLCAyMTMsIDI1NSwgNTUsIDMyLCAxLCAyMTAsIDk0LCA1NSwgMzIsIDEsIDI0MSwgMjQ1LCA1NSwgMzIsIDEsIDIxNiwgCisgICAgMTk2LCA1NSwgMzIsIDEsIDc0LCA1NSwgMzIsIDEsIDE3NiwgNTUsIDMyLCAxLCAyNDUsIDE4MiwgNTUsIDMyLCAxLCAyNDUsIAorICAgIDE2NywgNTUsIDMyLCAxLCAyNDUsIDE1OCwgNTUsIDMyLCAxLCAyNDUsIDgzLCA1NSwgMzIsIDEsIDc4LCA1NSwgMzIsIDEsIAorICAgIDIyNSwgMjI0LCA1NSwgMzIsIDEsIDIyMCwgNjUsIDU1LCAzMiwgMSwgMjMzLCAyMjMsIDU1LCAzMiwgMSwgMjQ1LCAxMDAsIAorICAgIDU1LCAzMiwgMSwgMjQ1LCA5MCwgNTUsIDMyLCAxLCAyMTcsIDIzLCA1NSwgMzIsIDEsIDY5LCA1NSwgMzIsIDEsIDI0NSwgCisgICAgMTg1LCA1NSwgMzIsIDEsIDIyNSwgMTM5LCA1NSwgMzIsIDEsIDIzNCwgMTI1LCA1NSwgMzIsIDEsIDI0NSwgMjEwLCA1NSwgCisgICAgMzIsIDEsIDI0NSwgOTIsIDU1LCAzMiwgMSwgMjUwLCAxMzksIDU1LCAzMiwgMSwgMjM2LCA0MCwgNTUsIDMyLCAxLCAyMTQsIAorICAgIDExOCwgNTUsIDMyLCAyMjcsIDIwMiwgMTExLCA1NSwgMzIsIDIyNywgMjAyLCAxOTAsIDU1LCAzMiwgMjI3LCAyMDIsIDIxNiwgCisgICAgMjQ4LCA1NSwgMzIsIDIyNywgMjAyLCAyNDQsIDEyMiwgMjQyLCAxNjAsIDEsIDI1NCwgMjEzLCAyNDIsIDE2MCwgMSwgMjUyLCAKKyAgICAxNzEsIDI0MiwgMTYwLCAxLCAyNDIsIDIxOCwgMjQyLCAxNjAsIDEsIDI0OCwgMjEyLCAyNDIsIDE2MCwgMSwgMjU0LCAyMDksIAorICAgIDI0MiwgMTYwLCAxLCAyMjQsIDgyLCAyNDIsIDE2MCwgMSwgMjM1LCAxNjEsIDI0MiwgMTYwLCAxLCAyNDIsIDQ2LCAyNDIsIAorICAgIDE2MCwgMSwgMjE2LCAxNTksIDI0MiwgMTYwLCAxLCAyNDUsIDE5MSwgMjQyLCAxNjAsIDEsIDIzMywgMTk2LCAyNDIsIDE2MCwgCisgICAgMSwgMjMzLCAxMTksIDI0MiwgMTYwLCAxLCAyMzEsIDE4NCwgMjQyLCAxNjAsIDEsIDIyOSwgMTg5LCAyNDIsIDE2MCwgMSwgCisgICAgMjM1LCAxMjUsIDI0MiwgMTYwLCAxLCAyMTQsIDEzNiwgMjQyLCAxNjAsIDEsIDIyNiwgNzMsIDI0MiwgMTYwLCAxLCAyMjgsIAorICAgIDIwMCwgMjQyLCAxNjAsIDEsIDIyMywgMTY4LCAyNDIsIDE2MCwgMSwgMjIxLCAyMjAsIDI0MiwgMTYwLCAxLCAyMTcsIDUsIAorICAgIDI0MiwgMTYwLCAxLCAyMTEsIDIzNCwgMjQyLCAxNjAsIDEsIDI0NCwgMTg2LCAyNDIsIDE2MCwgMSwgMjM2LCA0NCwgMjQyLCAKKyAgICAxNjAsIDEsIDI0MCwgMjA2LCAyNDIsIDE2MCwgMSwgMjI2LCAxNDMsIDI0MiwgMTYwLCAxLCAyMjgsIDIwNSwgMjQwLCAyMTcsIAorICAgIDIxNCwgMjA5LCAxLCAyNTQsIDE1NSwgMjE0LCAyMDksIDEsIDI1MiwgMzQsIDIxNCwgMjA5LCAxLCAyNDMsIDExNSwgMjE0LCAKKyAgICAyMDksIDEsIDIzNCwgMTM4LCAyMTQsIDIwOSwgMSwgMjQ4LCA2MiwgMjE0LCAyMDksIDEsIDI0MSwgNzUsIDIxNCwgMjA5LCAKKyAgICAxLCAyMTEsIDIyNywgMjE0LCAyMDksIDEsIDIxMCwgODUsIDIxNCwgMjA5LCAxLCAyNDAsIDI0OCwgMjE0LCAyMDksIDEsIAorICAgIDIxNiwgMjMxLCAyMTQsIDIwOSwgMSwgMjEwLCAyMzMsIDIxNCwgMjA5LCAxLCAyMzUsIDAsIDIxNCwgMjA5LCAxLCAyMjAsIAorICAgIDIyLCAyMTQsIDIwOSwgMSwgMjMzLCAxMDQsIDIxNCwgMjA5LCAxLCAyMzEsIDcwLCAyMTQsIDIwOSwgMSwgMjQ4LCAyOSwgCisgICAgMjE0LCAyMDksIDEsIDIyNywgMTk4LCAyMTQsIDIwOSwgMSwgMjEwLCAxMywgMjE0LCAyMDksIDEsIDIyMSwgMjUwLCAyMTQsIAorICAgIDIwOSwgMSwgMjU0LCAyMDUsIDIxNCwgMjA5LCAxLCAyMjQsIDE1MywgMjE0LCAyMDksIDEsIDIyMiwgMjcsIDIxNCwgMjA5LCAKKyAgICAxLCAyMjQsIDM4LCAyMTQsIDIwOSwgMSwgMjIzLCAxNDcsIDIxNCwgMjA5LCAxLCAyMTYsIDIwMCwgMjE0LCAyMDksIDEsIAorICAgIDI0MiwgMjUxLCAyMTQsIDIwOSwgMSwgMTEyLCAyMTQsIDIwOSwgMSwgNzQsIDIxNCwgMjA5LCAxLCA2OSwgMjE0LCAyMDksIAorICAgIDEsIDIxOCwgMTgxLCAyMTQsIDIwOSwgMjExLCAyMDksIDI0NywgMTgwLCA1NSwgMjI1LCAxNzIsIDUsIDYxLCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDc0LCA1NSwgMjI1LCAxNzIsIDUsIDY5LCA1NSwgMjI1LCAxNzIsIDUsIDE3NiwgNTUsIDIyNSwgMTcyLCA1LCAKKyAgICAyMzMsIDIyMywgNTUsIDIyNSwgMTcyLCA1LCAyNDMsIDE0MiwgNTUsIDIyNSwgMTcyLCA1LCAyNDIsIDEyMCwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCAyMTEsIDE2NSwgNTUsIDIyNSwgMTcyLCA1LCAyNTEsIDQxLCA1NSwgMjI1LCAxNzIsIDUsIDIzNSwgMTQ3LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDIzNSwgMTE0LCA1NSwgMjI1LCAxNzIsIDUsIDIxNywgMTA2LCA1NSwgMjI1LCAxNzIsIDUsIAorICAgIDIxNSwgMTE5LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMjI5LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMTEsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgMjQ2LCA4NiwgNTUsIDIyNSwgMTcyLCA1LCAyMTYsIDIwOSwgNTUsIDIyNSwgMTcyLCA1LCAxOTEsIDU1LCAKKyAgICAyMjUsIDE3MiwgNSwgMjUyLCAxOTksIDU1LCAyMjUsIDE3MiwgNSwgMjQ0LCAyMDQsIDU1LCAyMjUsIDE3MiwgNSwgMTk4LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDIyNywgMjQyLCA1NSwgMjI1LCAxNzIsIDUsIDE4NiwgNTUsIDIyNSwgMTcyLCA1LCAyMzAsIAorICAgIDIzNSwgNTUsIDIyNSwgMTcyLCA1LCAyMzAsIDEwNywgNTUsIDIyNSwgMTcyLCA1LCAxOTIsIDU1LCAyMjUsIDE3MiwgNSwgCisgICAgMjE0LCAyNywgNTUsIDIyNSwgMTcyLCA1LCAyMTMsIDE3NiwgNTUsIDIyNSwgMTcyLCA1LCAyMDUsIDU1LCAyMjUsIDE3MiwgCisgICAgNSwgMjIyLCAxNDIsIDU1LCAyMjUsIDE3MiwgNSwgMjMzLCAxNDEsIDU1LCAyMjUsIDE3MiwgNSwgMjA2LCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDIxMCwgMTE2LCA1NSwgMjI1LCAxNzIsIDUsIDIyMCwgMTA0LCA1NSwgMjI1LCAxNzIsIDUsIDIxOCwgMjI1LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDE2MiwgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIDE5NCwgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIAorICAgIDE5MywgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIDE5MiwgNTUsIDIyNSwgMTcyLCA1LCAyMTEsIDE0MiwgNTUsIDIyNSwgMTcyLCAKKyAgICA1LCAyNDgsIDIwOCwgNTUsIDIyNSwgMTcyLCA1LCAyNDgsIDIwNywgNTUsIDIyNSwgMTcyLCA1LCAyNTIsIDE3OCwgNTUsIAorICAgIDIyNSwgMTcyLCA1LCAyNTEsIDkzLCA1NSwgMjI1LCAxNzIsIDIxMSwgMjA5LCAyNDcsIDE4MCwgNTUsIDIyNSwgMTcyLCA1NCwgCisgICAgMTExLCA1NSwgMjI1LCAxNzIsIDU0LCAxMDUsIDU1LCAyMjUsIDE3MiwgNTQsIDIxNiwgMjQ4LCA1NSwgMjI1LCAxNzIsIDU0LCAKKyAgICAyMTUsIDczLCA1NSwgMjI1LCAxNzIsIDU0LCAyNDAsIDIxNywgMTgxLCA2LCAxLCAyMDAsIDc0LCAxODEsIDYsIDEsIDIwMCwgCisgICAgNzYsIDE4MSwgNiwgMSwgMjAwLCA2MSwgMTgxLCA2LCAxLCAyMDAsIDI1NCwgMjE4LCAxODEsIDYsIDEsIDIwMCwgNzgsIAorICAgIDE4MSwgNiwgMSwgMjAwLCAyMjYsIDE4NywgMTgxLCA2LCAxLCAyMTksIDI1MywgNzQsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIAorICAgIDc2LCAxODEsIDYsIDEsIDIxOSwgMjUzLCA2MSwgMTgxLCA2LCAxLCAyMTksIDI1MywgMjU0LCAyMTgsIDE4MSwgNiwgMSwgCisgICAgMjE5LCAyNTMsIDc4LCAxODEsIDYsIDEsIDIxOSwgMjUzLCAyMjYsIDE4NywgMTgxLCA2LCAxLCAyNTMsIDE3NSwgMTgxLCA2LCAKKyAgICAxLCAyMjYsIDEyMCwgMTgxLCA2LCAxLCAyMTEsIDE5NSwgMTgxLCA2LCAxLCAyMTEsIDQ0LCAxODEsIDYsIDEsIDI0MiwgNjcsIAorICAgIDE4MSwgNiwgMSwgMjI1LCAyMTQsIDE4MSwgNiwgMSwgMjUyLCA3NCwgMTgxLCA2LCAxLCAyMTcsIDEyLCAxODEsIDYsIDEsIAorICAgIDI0OCwgODUsIDE4MSwgNiwgMSwgMjUwLCAxMzYsIDE4MSwgNiwgMSwgMjM1LCAxMzAsIDE4MSwgNiwgMSwgMjM0LCAxOTUsIAorICAgIDE4MSwgNiwgMSwgMjQzLCA5MCwgMTgxLCA2LCAxLCAyNDUsIDIxMCwgMTgxLCA2LCAxLCAyMTMsIDI1MCwgMTgxLCA2LCAxLCAKKyAgICAyNDUsIDY3LCAxODEsIDYsIDEsIDIxNiwgMTk1LCAxODEsIDYsIDEsIDI0NSwgOTAsIDE4MSwgNiwgMSwgMjEwLCA5MiwgCisgICAgMTgxLCA2LCAxLCAyNDUsIDgzLCAxODEsIDYsIDEsIDIxMCwgNzMsIDE4MSwgNiwgMSwgMjQ1LCAxMDAsIDE4MSwgNiwgMSwgCisgICAgMjQ1LCAxODIsIDE4MSwgNiwgMSwgMjQ1LCAxNjcsIDE4MSwgNiwgMSwgMjQ1LCAxNTgsIDE4MSwgNiwgMSwgMjQ1LCAxNDYsIAorICAgIDE4MSwgNiwgMSwgMjI2LCAyMjMsIDE4MSwgNiwgMSwgMjQ1LCA0NiwgMTgxLCA0LCAxLCAyMDAsIDc0LCAxODEsIDQsIDEsIAorICAgIDIwMCwgNzYsIDE4MSwgNCwgMSwgMjAwLCA2MSwgMTgxLCA0LCAxLCAyMDAsIDI1NCwgMjE4LCAxODEsIDQsIDEsIDIwMCwgCisgICAgNzgsIDE4MSwgNCwgMSwgMjAwLCAyMjYsIDE4NywgMTgxLCA0LCAxLCAyMTksIDI1MywgNzQsIDE4MSwgNCwgMSwgMjE5LCAKKyAgICAyNTMsIDc2LCAxODEsIDQsIDEsIDIxOSwgMjUzLCA2MSwgMTgxLCA0LCAxLCAyMTksIDI1MywgMjU0LCAyMTgsIDE4MSwgNCwgCisgICAgMSwgMjE5LCAyNTMsIDc4LCAxODEsIDQsIDEsIDIxOSwgMjUzLCAyMjYsIDE4NywgMTgxLCA0LCAxLCAyNTMsIDE3NSwgMTgxLCAKKyAgICA0LCAxLCAyMjYsIDEyMCwgMTgxLCA0LCAxLCAyMTEsIDE5NSwgMTgxLCA0LCAxLCAyMTEsIDQ0LCAxODEsIDQsIDEsIDI0MiwgCisgICAgNjcsIDE4MSwgNCwgMSwgMjI1LCAyMTQsIDE4MSwgNCwgMSwgMjUyLCA3NCwgMTgxLCA0LCAxLCAyMTcsIDEyLCAxODEsIDQsIAorICAgIDEsIDI0OCwgODUsIDE4MSwgNCwgMSwgMjUwLCAxMzYsIDE4MSwgNCwgMSwgMjM1LCAxMzAsIDE4MSwgNCwgMSwgMjM0LCAKKyAgICAxOTUsIDE4MSwgNCwgMSwgMjQzLCA5MCwgMTgxLCA0LCAxLCAyNDUsIDIxMCwgMTgxLCA0LCAxLCAyMTMsIDI1MCwgMTgxLCAKKyAgICA0LCAxLCAyNDUsIDY3LCAxODEsIDQsIDEsIDIxNiwgMTk1LCAxODEsIDQsIDEsIDI0NSwgOTAsIDE4MSwgNCwgMSwgMjEwLCAKKyAgICA5MiwgMTgxLCA0LCAxLCAyNDUsIDgzLCAxODEsIDQsIDEsIDIxMCwgNzMsIDE4MSwgNCwgMSwgMjQ1LCAxMDAsIDE4MSwgNCwgCisgICAgMSwgMjQ1LCAxODIsIDE4MSwgNCwgMSwgMjQ1LCAxNjcsIDE4MSwgNCwgMSwgMjQ1LCAxNTgsIDE4MSwgNCwgMSwgMjQ1LCAKKyAgICAxNDYsIDE4MSwgNCwgMSwgMjI2LCAyMjMsIDE4MSwgNCwgMSwgMjQ1LCA0NiwgMjIwLCA3MSwgMSwgMjI1LCAyMTIsIDIyMCwgCisgICAgNzEsIDEsIDIxNiwgNiwgMjIwLCA3MSwgMSwgMjM0LCA5NywgMjIwLCA3MSwgMSwgMjQ0LCAxNTUsIDIyMCwgNzEsIDEsIAorICAgIDIxNiwgMTczLCAyMjAsIDcxLCAxLCAyMTksIDYwLCAyMjAsIDcxLCAxLCAyMTgsIDE1LCAyMjAsIDcxLCAxLCAyNTAsIDY5LCAKKyAgICAyMjAsIDcxLCAxLCAyMTEsIDQ2LCAyMjAsIDcxLCAxLCAyNDAsIDIxNiwgMjIwLCA3MSwgMSwgMjUyLCAxMywgMjIwLCA3MSwgCisgICAgMSwgMjQ4LCA5NywgMjIwLCA3MSwgMSwgMjQzLCAxMjgsIDIyMCwgNzEsIDEsIDIxMywgMTIzLCAyMjAsIDcxLCAxLCAyMTYsIAorICAgIDE3NywgMjIwLCA3MSwgMSwgMjEwLCAyMSwgMjIwLCA3MSwgMSwgMjMxLCA5NCwgMjIwLCA3MSwgMSwgMjM1LCA1NSwgMjIwLCAKKyAgICA3MSwgMSwgMjExLCAyMjUsIDIyMCwgNzEsIDEsIDI0MiwgNTUsIDIyMCwgNzEsIDEsIDIzMiwgMTQ4LCAyMjAsIDcxLCAxLCAKKyAgICAyMzAsIDE5NCwgMjIwLCA3MSwgMSwgMjM2LCA0NywgMjIwLCA3MSwgMSwgMjQ1LCAyMDksIDIyMCwgNzEsIDEsIDI1MywgCisgICAgMjM5LCAyMjAsIDcxLCAxLCAyNTUsIDAsIDIyMCwgNzEsIDEsIDIyNiwgMjAwLCAyMjAsIDcxLCAxLCAyMTEsIDIxMiwgMjIwLCAKKyAgICA3MSwgMSwgMjI2LCAxMzQsIDIyMCwgNzEsIDEsIDI1NCwgMjE4LCAyMjAsIDcxLCAxLCAyMjIsIDIxMCwgMjIwLCA3MSwgMSwgCisgICAgMjI3LCAxOTgsIDIyMCwgNzEsIDEsIDI0NSwgMjI1LCAyMjAsIDcxLCAxLCAyNTQsIDIyMywgMjIwLCA3MSwgMSwgMjQwLCAKKyAgICAxMTgsIDIyMCwgNzEsIDEsIDIxNCwgMTYzLCAyMjAsIDcxLCAxLCAyMjcsIDIsIDIyMCwgNzEsIDEsIDIyNiwgMTgwLCAyMjAsIAorICAgIDcxLCAxLCAyMjYsIDIyMiwgMjIwLCA3MSwgMSwgMjUzLCAxNzgsIDIyMCwgNzEsIDEsIDI1NCwgMjcsIDIyMCwgNzEsIDEsIAorICAgIDIyNiwgMTYyLCAyMjAsIDcxLCAxLCAyNTQsIDIwMSwgMjIwLCA3MSwgMSwgMjQ1LCA5NCwgMjIwLCA3MSwgMSwgMjU0LCA1LCAKKyAgICAyMjAsIDcxLCAxLCAyNDUsIDIzNSwgMjIwLCA3MSwgMSwgMjQwLCAxMjUsIDIyMCwgNzEsIDEsIDIxMSwgMTMsIDIyNiwgCisgICAgMTQ1LCAxLCAyNTQsIDE3OSwgMjI2LCAxNDUsIDEsIDI1MiwgMTk5LCAyMjYsIDE0NSwgMSwgMjE3LCAxMDYsIDIyNiwgMTQ1LCAKKyAgICAxLCAyMzUsIDE0NywgMjI2LCAxNDUsIDEsIDIxMSwgMTY1LCAyMjYsIDE0NSwgMSwgMjM0LCAxMzgsIDIyNiwgMTQ1LCAxLCAKKyAgICAyNDgsIDg0LCAyMjYsIDE0NSwgMSwgMjA1LCAyMjYsIDE0NSwgMSwgMjA2LCAyMjYsIDE0NSwgMSwgMjIwLCAyOCwgMjI2LCAKKyAgICAxNDUsIDEsIDI0OCwgMzMsIDIyNiwgMTQ1LCAxLCAyNTAsIDIyMywgMjI2LCAxNDUsIDEsIDI0MywgMTQyLCAyMjYsIDE0NSwgCisgICAgMSwgMjQ0LCAyMDQsIDIyNiwgMTQ1LCAxLCAyMjQsIDg5LCAyMjYsIDE0NSwgMSwgMjM1LCAxNSwgMjI2LCAxNDUsIDEsIAorICAgIDIzMywgMTM2LCAyMjYsIDE0NSwgMSwgMjMwLCAyMDUsIDIyNiwgMTQ1LCAxLCAyMjcsIDE4MiwgMjI2LCAxNDUsIDEsIDIxMiwgCisgICAgMzAsIDIyNiwgMTQ1LCAxLCAxNjIsIDIyNiwgMTQ1LCAxLCAxOTIsIDIyNiwgMTQ1LCAxLCA2MSwgMjI2LCAxNDUsIDEsIDc2LCAKKyAgICAyMjYsIDE0NSwgMSwgNzQsIDIyNiwgMTQ1LCAxLCA3OCwgMjI2LCAxNDUsIDEsIDY5LCAyMjYsIDE0NSwgMSwgMjU1LCA4MiwgCisgICAgMjI2LCAxNDUsIDEsIDI0NSwgMjE3LCAyMjYsIDE0NSwgMSwgMjI2LCAxODcsIDIyNiwgMTQ1LCAyMSwgMjEwLCA4NiwgMjI2LCAKKyAgICAxNDUsIDIxLCAxMTEsIDIyNiwgMTQ1LCAyMSwgMTA1LCAyMjYsIDE0NSwgMjEsIDE1OCwgMjI2LCAxNDUsIDIxLCAxNjEsIAorICAgIDIyNiwgMTQ1LCAyMSwgMTkwLCAyMjYsIDE0NSwgMjEsIDE5NSwgMjI2LCAxNDUsIDIxLCAxOTksIDIyNiwgMTQ1LCAyMSwgCisgICAgMTk2LCAyMjYsIDE0NSwgMjEsIDIwMSwgMjQ5LCA3NSwgMywgNjEsIDI0OSwgNzUsIDMsIDc2LCAyNDksIDc1LCAzLCA3NCwgCisgICAgMjQ5LCA3NSwgMywgNzgsIDI0OSwgNzUsIDMsIDY5LCAyNDksIDc1LCAzLCAyMzUsIDE0NywgMjQ5LCA3NSwgMywgMjM1LCAKKyAgICA3NCwgMjQ5LCA3NSwgMywgMTc2LCAyNDksIDc1LCAzLCAyMzQsIDE4OCwgMjQ5LCA3NSwgMywgMjM0LCA5OCwgMjQ5LCA3NSwgCisgICAgMywgMjM0LCAzNCwgMjQ5LCA3NSwgMywgMjMzLCAyMjMsIDI0OSwgNzUsIDMsIDIzMywgMTQxLCAyNDksIDc1LCAzLCAyMzMsIAorICAgIDY0LCAyNDksIDc1LCAzLCAyMzIsIDI0NywgMjQ5LCA3NSwgMywgMjMyLCAxNjIsIDI0OSwgNzUsIDMsIDIzMiwgMTAzLCAKKyAgICAyNDksIDc1LCAzLCAxODYsIDI0OSwgNzUsIDMsIDIzMSwgOTYsIDI0OSwgNzUsIDMsIDIzMCwgMjM1LCAyNDksIDc1LCAzLCAKKyAgICAyMzAsIDE2NiwgMjQ5LCA3NSwgMywgMjMwLCAxMDcsIDI0OSwgNzUsIDMsIDE5OCwgMjQ5LCA3NSwgMywgMjI5LCAxMTIsIAorICAgIDI0OSwgNzUsIDMsIDIyOCwgMjM4LCAyNDksIDc1LCAzLCAyMjgsIDc5LCAyNDksIDc1LCAzLCAyMjcsIDI0MiwgMjQ5LCA3NSwgCisgICAgMywgMTkxLCAyNDksIDc1LCAzLCAyMjUsIDIyNCwgMjQ5LCA3NSwgMywgMjI1LCAxMTEsIDI0OSwgNzUsIDMsIDIyNSwgMTksIAorICAgIDI0OSwgNzUsIDMsIDIyNCwgMTUzLCAyNDksIDc1LCAzLCAyMDUsIDI0OSwgNzUsIDMsIDIyMywgMTMxLCAyNDksIDc1LCAzLCAKKyAgICAyMjMsIDM4LCAyNDksIDc1LCAzLCAyMjIsIDIxMywgMjQ5LCA3NSwgMywgMjIyLCAxNDIsIDI0OSwgNzUsIDMsIDIwNiwgCisgICAgMjQ5LCA3NSwgMywgMjIxLCAxODMsIDI0OSwgNzUsIDMsIDIxOSwgMTkzLCAyNDksIDc1LCAzLCAyMTksIDYwLCAyNDksIDc1LCAKKyAgICAzLCAyMTgsIDg0LCAyNDksIDc1LCAzLCAyMTcsIDEwNiwgMjQ5LCA3NSwgMywgMjE3LCAyMywgMjQ5LCA3NSwgMywgMjE2LCAKKyAgICAxMTgsIDI0OSwgNzUsIDMsIDExMiwgMjQ5LCA3NSwgMywgMjE1LCAxMTksIDI0OSwgNzUsIDMsIDIxMiwgNjUsIDI0OSwgNzUsIAorICAgIDMsIDIxMiwgMjIsIDI0OSwgNzUsIDMsIDIxMSwgMjUwLCAyNDksIDc1LCAzLCAyMTEsIDIyNywgMjQ5LCA3NSwgMywgMjExLCAKKyAgICAxNjUsIDI0OSwgNzUsIDMsIDIxMSwgMTYyLCAyNDksIDc1LCAzLCAyMTAsIDExNiwgMjQ5LCA3NSwgMywgMjEwLCAyMywgCisgICAgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTQsIDE3NywgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTIsIDMzLCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDEsIDI0MiwgMjA4LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI0OCwgMTk2LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI0MSwgCisgICAgMjQ1LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxMiwgMzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjEwLCA5NywgMjM2LCA4LCAKKyAgICAyNTQsIDM1LCAxLCAyNDEsIDIwMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTYsIDIyNywgMjM2LCA4LCAyNTQsIDM1LCAxLCAKKyAgICAyMTAsIDIzMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMzQsIDIzMSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMzMsIDk5LCAyMzYsIAorICAgIDgsIDI1NCwgMzUsIDEsIDIzMSwgNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI3LCAxOTgsIDIzNiwgOCwgMjU0LCAzNSwgMSwgCisgICAgMjIxLCAyNTEsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjUzLCAxNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI1LCAyMjQsIAorICAgIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjIyLCAyNiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjQsIDM3LCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDEsIDIyMywgNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjIwLCAyMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTcsIDM3LCAKKyAgICAyMzYsIDgsIDI1NCwgMzUsIDIyMSwgMTc1LCA1MCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTExLCAyMzYsIDgsIDI1NCwgMzUsIAorICAgIDU0LCAxMDUsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDE1OCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMjE2LCAyNDgsIDIzNiwgOCwgCisgICAgMjU0LCAzNSwgNTQsIDIxNSwgNzMsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDEyMywgMjQwLCAyMTcsIDIzNiwgOCwgMjU0LCAKKyAgICAzNSwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjI1LCAxMjIsIAorICAgIDEsIDI1NCwgMTc0LCAyMjUsIDEyMiwgMSwgMjUyLCAzNiwgMjI1LCAxMjIsIDEsIDI0MywgMTE2LCAyMjUsIDEyMiwgMSwgCisgICAgMjQ4LCA2NCwgMjI1LCAxMjIsIDEsIDI0MSwgMjQ1LCAyMjUsIDEyMiwgMSwgMjEyLCAzNywgMjI1LCAxMjIsIDEsIDIxMCwgCisgICAgMTEwLCAyMjUsIDEyMiwgMSwgMjQxLCAyMDQsIDIyNSwgMTIyLCAxLCAyMTYsIDIzMSwgMjI1LCAxMjIsIDEsIDIxMCwgMjMzLCAKKyAgICAyMjUsIDEyMiwgMSwgMjM1LCAwLCAyMjUsIDEyMiwgMSwgMjMzLCAxMDUsIDIyNSwgMTIyLCAxLCAyMzEsIDcwLCAyMjUsIAorICAgIDEyMiwgMSwgMjI3LCAxOTgsIDIyNSwgMTIyLCAxLCAyMjAsIDE0NiwgMjI1LCAxMjIsIDEsIDI1NCwgMjA1LCAyMjUsIDEyMiwgCisgICAgMSwgMjI1LCAyMjQsIDIyNSwgMTIyLCAxLCAyMjIsIDI3LCAyMjUsIDEyMiwgMSwgMjI0LCA0MiwgMjI1LCAxMjIsIDEsIAorICAgIDIyMiwgMTkxLCAyMjUsIDEyMiwgMSwgMjIwLCAyMiwgMjI1LCAxMjIsIDEsIDIxNywgNDIsIDIyNSwgMTIyLCA1NCwgMTExLCAKKyAgICAyMjUsIDEyMiwgNTQsIDIxNiwgMjQ4LCAyMjUsIDEyMiwgNTQsIDIxNSwgNzMsIDIyNSwgMTIyLCA1NCwgMTIzLCAyNDAsIAorICAgIDIxNywgMjI1LCAxMjIsIDU0LCAxMDUsIDIyNSwgMTIyLCA1NCwgMTU4LCAyMjUsIDEyMiwgMjExLCAyMDksIDIyMCwgMTM5LCAKKyAgICAyMzIsIDY0LCAxLCA2MSwgMjMyLCA2NCwgMSwgMjUzLCAxNjYsIDIzMiwgNjQsIDEsIDI0MywgMjA5LCAyMzIsIDY0LCAxLCAKKyAgICAyNDksIDY4LCAyMzIsIDY0LCAxLCA3NiwgMjMyLCA2NCwgMSwgMjE0LCAxMDUsIDIzMiwgNjQsIDEsIDc0LCAyMzIsIDY0LCAKKyAgICAxLCAyMTEsIDExNywgMjMyLCA2NCwgMSwgMjM1LCAyOSwgMjMyLCA2NCwgMSwgMTU2LCAyMzIsIDY0LCAxLCAxOTQsIDIzMiwgCisgICAgNjQsIDEsIDIzMCwgMzAsIDIzMiwgNjQsIDEsIDc4LCAyMzIsIDY0LCAxLCAxNTMsIDIzMiwgNjQsIDEsIDIxOCwgMjI4LCAKKyAgICAyMzIsIDY0LCAxLCAyMTcsIDE1MywgMjMyLCA2NCwgMSwgNjksIDIzMiwgNjQsIDEsIDI0NSwgMTQsIDIzMiwgNjQsIDEsIAorICAgIDIyNCwgOTksIDIzMiwgNjQsIDEsIDIyMiwgOTMsIDIzMiwgNjQsIDEsIDIxNSwgMTYwLCAyMzIsIDY0LCAxLCAyNTQsIDEzMSwgCisgICAgMjMyLCA2NCwgMSwgMjQ1LCAxNTgsIDIzMiwgNjQsIDEsIDIzMiwgNjcsIDIzMiwgNjQsIDEsIDIyOCwgMTE2LCAyMzIsIDY0LCAKKyAgICAxLCAyNTEsIDc0LCAyMzIsIDY0LCAyMTUsIDIyMywgNzksIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA2MSwgMjMxLCA1MywgCisgICAgMjQxLCAxODEsIDEsIDc2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgNzQsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA3OCwgMjMxLCAKKyAgICA1MywgMjQxLCAxODEsIDEsIDE5MiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxMiwgNjUsIDIzMSwgNTMsIDI0MSwgMTgxLCAKKyAgICAxLCAyNTIsIDE5OSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDI1MiwgMTk4LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTkxLCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTg2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTk4LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjI5LCAyMzMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjksIDExMiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyOSwgCisgICAgMTExLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjA1LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIzLCAxOTAsIDIzMSwgNTMsIAorICAgIDI0MSwgMTgxLCAxLCAyMzMsIDE0MSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIzNCwgMTM4LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjQxLCAxOTYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMDYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjIsIDM1LCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIxLCAxODMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxNzYsIDIzMSwgNTMsIDI0MSwgCisgICAgMTgxLCAxLCAyMjQsIDkxLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAxMDYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAKKyAgICAyMTcsIDEwNSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMjMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDIyLCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTEyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjQ4LCAyMjksIDIzMSwgNTMsIDI0MSwgCisgICAgMTgxLCAxNiwgMjEzLCAxNzAsIDIzMSwgNTMsIDI0MSwgMTgxLCAxNiwgMjEzLCAxNjksIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKKyAgICA2MSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDc2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgNzQsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCA3OCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5MiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIxMiwgNjUsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNTIsIDE5OSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5MSwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDE4NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5OCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyOSwgMTEyLCAKKyAgICAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjA1LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjMzLCAxNDEsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCAyMzQsIDEzOCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI0MSwgMTk2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgMjA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjU0LCAzMSwgMjA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjIxLCAxODMsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxNzYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjQsIDkxLCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgMjE3LCAxMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMTcsIDIzLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgMTEyLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjQ4LCAyMjksIDIzMSwgNTMsIDI0OSwgMTAyLCAyMzIsIDE1MSwgMjIyLCAKKyAgICAyMTksIDIzMSwgNTMsIDI0OSwgMTAyLCAyMzIsIDE1MSwgMjM2LCAxMywgMjM0LCAxMjYsIDEsIDYxLCAyMzQsIDEyNiwgMjUsIAorICAgIDUsIDc0LCAyMzQsIDEyNiwgMjUsIDUsIDY5LCAyMzQsIDEyNiwgMjUsIDUsIDE0OSwgMTUzLCAyMzQsIDEyNiwgMjUsIDUsIAorICAgIDc2LCAyMzQsIDEyNiwgMjUsIDUsIDc4LCAyMzQsIDEyNiwgMjUsIDIzMywgMjksIDc5LCAyMzQsIDEyNiwgNSwgNTIsIDIyMiwgCisgICAgMjM3LCA1MSwgMjM0LCAxMjYsIDUsIDI1NCwgODMsIDIzNCwgMTI2LCA1LCAyMTMsIDE0NywgMjM0LCAxMjYsIDEsIDE3NiwgCisgICAgMjM0LCAxMjYsIDEsIDIzNCwgMTM4LCAyMzQsIDEyNiwgMSwgMjQzLCAxNDIsIDIzNCwgMTI2LCAxLCAyNDMsIDAsIDIzNCwgCisgICAgMTI2LCAxLCAyNTEsIDQxLCAyMzQsIDEyNiwgMSwgMjUwLCAxNjUsIDIzNCwgMTI2LCAxLCAyMzUsIDE0NywgMjM0LCAxMjYsIAorICAgIDEsIDIyNywgMTY5LCAyMzQsIDEyNiwgMSwgMjE1LCAxNTcsIDIzNCwgMTI2LCAxLCAyMTUsIDE0NSwgMjM0LCAxMjYsIDEsIAorICAgIDI0OCwgMTQzLCAyMzQsIDEyNiwgMSwgMjQ4LCAxMjcsIDIzNCwgMTI2LCAxLCAyMjgsIDExNSwgMjM0LCAxMjYsIDEsIDIxNywgCisgICAgMTA2LCAyMzQsIDEyNiwgMSwgMjE2LCAyMDksIDIzNCwgMTI2LCAxLCAyNDgsIDIyOSwgMjM0LCAxMjYsIDEsIDI0OCwgMzMsIAorICAgIDIzNCwgMTI2LCAxLCAxOTgsIDIzNCwgMTI2LCAxLCAxOTEsIDIzNCwgMTI2LCAxLCAyMjUsIDE1MCwgMjM0LCAxMjYsIDEsIAorICAgIDI1MiwgMTk5LCAyMzQsIDEyNiwgMSwgMjUyLCAyNiwgMjM0LCAxMjYsIDEsIDE4NiwgMjM0LCAxMjYsIDEsIDE5MiwgMjM0LCAKKyAgICAxMjYsIDEsIDIwNSwgMjM0LCAxMjYsIDEsIDIzMywgMTQxLCAyMzQsIDEyNiwgMSwgMjE0LCAyNywgMjM0LCAxMjYsIDEsIAorICAgIDIyMCwgMTA0LCAyMzQsIDEyNiwgMSwgMjE4LCAyMjUsIDIzNCwgMTI2LCAxLCAyMDYsIDIzNCwgMTI2LCAxLCAyMTAsIDExNiwgCisgICAgMjM0LCAxMjYsIDEsIDE2MiwgMjM0LCAxMjYsIDEsIDIzNCwgNTIsIDIzNCwgMTI2LCAxLCAyMTUsIDEyNSwgMjM0LCAxMjYsIAorICAgIDUsIDI1MiwgMTQ5LCA0OCwgMjM0LCAxMjYsIDUsIDI1MCwgMjI5LCAyMzQsIDEyNiwgNSwgNTksIDUxLCAyMzQsIDEyNiwgCisgICAgMjEzLCAxNTIsIDIzNCwgMTI2LCAyMSwgMTExLCAyMzQsIDEyNiwgMjEsIDEwNSwgMjM0LCAxMjYsIDIxLCAxNTgsIDIzNCwgCisgICAgMTI2LCAyMSwgMTYxLCAyMzQsIDEyNiwgNTQsIDIxNiwgMjQ4LCAyMzQsIDEyNiwgNTQsIDIxNSwgNzMsIDIzNCwgMTI2LCAKKyAgICA1NCwgMTIzLCAyNDAsIDIxNywgMjM0LCAxMjYsIDU0LCAxMjMsIDIxNiwgMTQ4LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI0NywgCisgICAgMTI4LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDQsIDI1MCwgNDMsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjUwLCA0MywgMjM0LCAKKyAgICAxMjYsIDIyNCwgMTQ0LCAyNDksIDE0NSwgMTMwLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDIzMSwgMTg1LCAyMzQsIDEyNiwgCisgICAgMjI0LCAxNDQsIDIzMiwgMTIxLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI0OCwgMTg2LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDUyLCAKKyAgICAyNDgsIDE4NiwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyMzIsIDIxMywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MSwgCisgICAgMjQ1LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjMzLCA5OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MSwgMjAyLCAKKyAgICA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjMxLCA3MCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyNCwgMzcsIDU1LCAKKyAgICAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTIsIDMwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIwLCAyMiwgNTUsIDIxOSwgCisgICAgMzAsIDI1NCwgNDYsIDEsIDIyMywgNzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNTIsIDMzLCA1NSwgMjE5LCAzMCwgCisgICAgMjU0LCA0NiwgMSwgMjE3LCAzNywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyMSwgMjI4LCA1NSwgMjE5LCAzMCwgMjU0LCAKKyAgICA0NiwgMSwgMjM0LCAyMzEsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjcsIDE5OCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIAorICAgIDEsIDIzNCwgMTIyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIyLCAyNiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAorICAgIDIyMSwgMjUxLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ0LCAxNjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKKyAgICAyNTQsIDE3OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI1MywgMTY5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCisgICAgMjQ4LCAzMCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MiwgMjA4LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ4LCAKKyAgICAxOTYsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDIsIDI0NSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgCisgICAgMjI3LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjEwLCA5NiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0OCwgMjcsIAorICAgIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTAsIDIzMiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgMTk4LCA1NSwgCisgICAgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAxNzksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCA1NCwgMTExLCA1NSwgMjE5LCAKKyAgICAzMCwgMjU0LCA0NiwgNTQsIDI0NCwgMTIyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMTMyLCAyMzUsIDI0NSwgMjUzLCAxODAsIAorICAgIDEsIDYxLCAyNTMsIDE4MCwgMSwgMjU1LCA4MiwgMjUzLCAxODAsIDEsIDI1NCwgODEsIDI1MywgMTgwLCAxLCAyNTUsIDQxLCAKKyAgICAyNTMsIDE4MCwgMSwgMjU0LCAxMzEsIDI1MywgMTgwLCAxLCAyNTUsIDQyLCAyNTMsIDE4MCwgMSwgMjU0LCAyNTIsIDI1MywgCisgICAgMTgwLCAxLCAyNTQsIDI0OCwgMjUzLCAxODAsIDEsIDc2LCAyNTMsIDE4MCwgMSwgMjQ1LCAyMTcsIDI1MywgMTgwLCAxLCAKKyAgICA3OCwgMjUzLCAxODAsIDEsIDIyNiwgMTg3LCAyNTMsIDE4MCwgMSwgNzQsIDI1MywgMTgwLCAxLCAyMzYsIDQwLCAyNTMsIAorICAgIDE4MCwgMSwgNjksIDI1MywgMTgwLCAxLCAyMTQsIDExOCwgMjUzLCAxODAsIDEsIDIzNCwgMTg4LCAyNTMsIDE4MCwgMSwgCisgICAgMjExLCAxNjIsIDI1MywgMTgwLCAxLCAyMTEsIDEyOCwgMjUzLCAxODAsIDEsIDIxMSwgMTM3LCAyNTMsIDE4MCwgMSwgMjQzLCAKKyAgICA2OSwgMjUzLCAxODAsIDEsIDI0MywgMzEsIDI1MywgMTgwLCAxLCAyNDIsIDI0MywgMjUzLCAxODAsIDEsIDI1MCwgMTk4LCAKKyAgICAyNTMsIDE4MCwgMSwgMjM1LCAxMzIsIDI1MywgMTgwLCAxLCAyMTcsIDIzLCAyNTMsIDE4MCwgMSwgMjE2LCAxOTYsIDI1MywgCisgICAgMTgwLCAxLCAyNDgsIDk4LCAyNTMsIDE4MCwgMSwgMjQ4LCAyNSwgMjUzLCAxODAsIDEsIDIxNSwgMTUyLCAyNTMsIDE4MCwgCisgICAgMSwgMjI1LCAyMjQsIDI1MywgMTgwLCAxLCAyNDQsIDE2MiwgMjUzLCAxODAsIDEsIDI1MiwgODMsIDI1MywgMTgwLCAxLCAKKyAgICAyNTIsIDIyLCAyNTMsIDE4MCwgMSwgMjI5LCA2OSwgMjUzLCAxODAsIDEsIDIyOCwgMjQ0LCAyNTMsIDE4MCwgMSwgMjI4LCAKKyAgICAyNDUsIDI1MywgMTgwLCAxLCAyMjksIDExMiwgMjUzLCAxODAsIDEsIDIyNywgMTYwLCAyNTMsIDE4MCwgMSwgMjI4LCAxMTAsIAorICAgIDI1MywgMTgwLCAxLCAyMzEsIDk2LCAyNTMsIDE4MCwgMSwgMjQxLCAxMjMsIDI1MywgMTgwLCAxLCAyMTAsIDE2NiwgMjUzLCAKKyAgICAxODAsIDEsIDIxMSwgNDcsIDI1MywgMTgwLCAxLCAyMTMsIDI1NSwgMjUzLCAxODAsIDEsIDIyMywgMTMxLCAyNTMsIDE4MCwgCisgICAgMSwgMjMzLCA2NCwgMjUzLCAxODAsIDEsIDIyMSwgMTgzLCAyNTMsIDE4MCwgMSwgMjEwLCA5NCwgMjUzLCAxODAsIDEsIAorICAgIDIyMCwgNjUsIDI1MywgMTgwLCAxLCAyMTAsIDc0LCAyNTMsIDE4MCwgMSwgMjE5LCAyMDAsIDI1MywgMTgwLCAxLCAyMTgsIAorICAgIDE5NSwgMjUzLCAxODAsIDEsIDI0MSwgMjQ1LCAyNTMsIDE4MCwgMjU1LCAzMCwgNzksIDIxNiwgODAsIDExMywgMTcwLCAKKyAgICAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCA0LCAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMjMzLCA5MSwgCisgICAgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDIzMywgOTEsIDEyMywgNTksIDExNSwgMTEzLCAxNzAsIDIyNCwgCisgICAgMTQzLCAyMzMsIDkxLCAxMTMsIDIyMiwgMjM1LCAxMTUsIDEyMywgMjIyLCAyMzcsIDIyNCwgMTQzLCAyMzMsIDkxLCAxMjMsIAorICAgIDIyMiwgMjM3LCAxMTUsIDExMywgMjIyLCAyMzUsIDIyNCwgMTQzLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTQsIDE3NywgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjUyLCAzMywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQyLCAyMDgsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDEsIDI0OCwgMTk2LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDEsIDI0NSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCisgICAgMjEyLCAzMCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjEwLCA5NywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQxLCAyMDIsIAorICAgIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxNiwgMjI3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTAsIDIzMiwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgMSwgMjM0LCAyMzEsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIzMywgOTksIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAorICAgIDIzMSwgNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNywgMTk4LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjEsIDI1MSwgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjUzLCAxNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNSwgMjI0LCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCAxLCAyMjIsIDI2LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjQsIDM3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKKyAgICAyMjMsIDcwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjAsIDIyLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTcsIDM3LCAyMzUsIAorICAgIDIyNSwgMjI2LCAyLCA1NCwgMTExLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTA1LCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgCisgICAgMTU4LCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTYxLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMjE2LCAyNDgsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDU0LCAyMTUsIDczLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTIzLCAyNDAsIDIxNywgMjM1LCAyMjUsIDIyNiwgCisgICAgMiwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNTQsIDE3NywgMjM1LCAyMjUsIDIyNiwgNzYsIAorICAgIDEsIDI1MiwgMzMsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDIsIDIwOCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0OCwgCisgICAgMTk2LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQxLCAyNDUsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTIsIDI5LCAyMzUsIAorICAgIDIyNSwgMjI2LCA3NiwgMSwgMjEwLCA5NywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MSwgMjAyLCAyMzUsIDIyNSwgMjI2LCAKKyAgICA3NiwgMSwgMjE2LCAyMjcsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTAsIDIzMiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIAorICAgIDIzNCwgMjMxLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjMzLCA5OSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIzMSwgNjksIAorICAgIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjcsIDE5OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyMSwgMjUxLCAyMzUsIDIyNSwgCisgICAgMjI2LCA3NiwgMSwgMjI1LCAyMjQsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjIsIDI2LCAyMzUsIDIyNSwgMjI2LCA3NiwgCisgICAgMSwgMjIwLCAyMiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxNywgMzcsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTExLCAKKyAgICAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEwNSwgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxNTgsIDIzNSwgMjI1LCAyMjYsIAorICAgIDc2LCA1NCwgMTYxLCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDIxNiwgMjQ4LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDIxNSwgCisgICAgNzMsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTIzLCAyNDAsIDIxNywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMjMsIAorICAgIDIxNiwgMTQ4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNjEsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDYxLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNTQsIDI1MiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDc0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCA3NCwgNTUsIAorICAgIDIwMiwgMSwgMjExLCAzNywgNzYsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA3OCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgCisgICAgMjM4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDIzOCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NSwgMzQsIDU1LCAKKyAgICAyMDIsIDEsIDIxMSwgMzcsIDI1NSwgMzQsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI1MSwgNTUsIDIwMiwgMSwgCisgICAgMjExLCAzNywgMjU0LCAyNTEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIyNSwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjU0LCAyMjUsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0NiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyNDYsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTUsIDgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NSwgOCwgNTUsIDIwMiwgMSwgCisgICAgMjI2LCAxNTMsIDI1NCwgMjUwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAyMCwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjQ1LCAyMCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMTc1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDE3NSwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjMzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDIzMywgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI1NCwgMjQ0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDI0NCwgNTUsIDIwMiwgMSwgMjI2LCAKKyAgICAxNTMsIDIyNiwgMjM3LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDIzNywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgCisgICAgMTg3LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDE4NywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQzLCA1NSwgCisgICAgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNjksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE2NywgNTUsIDIwMiwgMSwgCisgICAgMjI2LCAxNTMsIDI1NCwgMTMxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDEsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgMjQxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxMzksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTM5LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNTUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTU1LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjQ1LCAxMjYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTI2LCA1NSwgMjAyLCAxLCAyMTEsIAorICAgIDM3LCAyNTQsIDEyMywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTQ2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIAorICAgIDI0MCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTE2LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNzksIDU1LCAKKyAgICAyMDIsIDEsIDIyNiwgMTUzLCAyNDAsIDEyMCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMjIzLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNDUsIDIyMywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgNTMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgNTMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMzUsIDE4OCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjM1LCAxODgsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE2MywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjI2LCAxNjMsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNTQsIDQ5LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDQ5LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgCisgICAgMjU0LCAyMzksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDI0NSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjM3LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAyMzksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMjM5LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjQ1LCA4MywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCA4MywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIAorICAgIDI1MywgMjE0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDIxNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjM0LCAKKyAgICA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDIzNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTQ0LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjUyLCAxMzMsIDIyMiwgMTI5LCAyMSwgMTExLCAyMjIsIDEyOSwgMjEsIDEwNSwgMjIyLCAxMjksIAorICAgIDIxLCAxNTgsIDIyMiwgMTI5LCAyMSwgMTYxLCAyMjIsIDEyOSwgMjEsIDE5MCwgMjIyLCAxMjksIDIxLCAxOTUsIDIyMiwgCisgICAgMTI5LCAyMSwgMTk5LCAyMjIsIDEyOSwgMjEsIDE5NiwgMjIyLCAxMjksIDIxLCAyMDEsIDIyMiwgMTI5LCA1NCwgMjE2LCAKKyAgICAyNDgsIDIyMiwgMTI5LCA1NCwgMjE1LCA3MywgMjIyLCAxMjksIDU0LCAyMTYsIDE2MywgMjIyLCAxMjksIDU0LCAyNDQsIAorICAgIDIzLCAyMjIsIDEyOSwgNTQsIDI0NCwgMTIyLCAyMjIsIDEyOSwgNTQsIDIxOSwgMTEzLCAyMjIsIDEyOSwgNTQsIDIyMCwgCisgICAgMTE4LCAyMjIsIDEyOSwgNTQsIDI0NSwgMTkyLCAyMjIsIDEyOSwgNTQsIDIyOCwgMjAwLCAyMjIsIDEyOSwgNTQsIDEyMywgCisgICAgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMTEzLCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAxMzQsIDI0MCwgMjE3LCAyMjIsIAorICAgIDEyOSwgNTQsIDI0NCwgMTksIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDI0NCwgODksIDI0MCwgMjE3LCAyMjIsIDEyOSwgCisgICAgNTQsIDIxOSwgMTI3LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAyMjAsIDEyNCwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgCisgICAgMjQ1LCAyMDEsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDIyOCwgMjA1LCAyNDAsIDIxNywgMjIyLCAxMjksIDI0NCwgMTAsIAorICAgIDEyMywgMjQyLCAzNCwgMjIyLCAxMjksIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjIyLCAxMjksIDI0NCwgMTAsIDEyMywgCisgICAgMjE2LCAxNjksIDIyMiwgMTI5LCAyNDQsIDEwLCAxMTMsIDIxNiwgMTY3LCAxMTgsIDUsIDI1MSwgNywgMTE4LCA1LCAyNTQsIAorICAgIDgzLCAxMTgsIDUsIDIxMywgMTQ3LCAxMTgsIDUsIDIzNSwgMTA4LCAxMTgsIDUsIDIxNCwgMTYxLCAxMTgsIDEsIDYxLCAKKyAgICAxMTgsIDEsIDI1NSwgODIsIDExOCwgMSwgNzQsIDExOCwgMSwgMjM2LCA0MCwgMTE4LCAxLCA2OSwgMTE4LCAxLCAyMTQsIAorICAgIDExOCwgMTE4LCAxLCAxNDksIDE1MywgMTE4LCAxLCAxNDksIDIyMiwgMTgyLCAxMTgsIDEsIDE0OSwgMTU2LCAxMTgsIDEsIAorICAgIDE0OSwgMjMyLCAxOTEsIDExOCwgMSwgNzYsIDExOCwgMSwgMjU0LCAyMTAsIDExOCwgMSwgNzgsIDExOCwgMSwgMjUzLCAKKyAgICAyMDAsIDExOCwgMSwgMTc2LCAxMTgsIDEsIDIzNCwgMTM4LCAxMTgsIDEsIDI0MywgMTQyLCAxMTgsIDEsIDI0MywgMCwgCisgICAgMTE4LCAxLCAyMjksIDgyLCAxMTgsIDEsIDI1MSwgNDEsIDExOCwgMSwgMjUwLCAxNjUsIDExOCwgMSwgMjM1LCAxNDcsIAorICAgIDExOCwgMSwgMjM1LCAxMjAsIDExOCwgMSwgMjI3LCAxNjksIDExOCwgMSwgMjE1LCAxNTcsIDExOCwgMSwgMjE1LCAxNDUsIAorICAgIDExOCwgMSwgMjQ4LCAxNDMsIDExOCwgMSwgMjQ4LCAxMjcsIDExOCwgMSwgMjI4LCAxMTUsIDExOCwgMSwgMjE3LCAxMDYsIAorICAgIDExOCwgMSwgMjE2LCAyMDksIDExOCwgMSwgMjQ4LCAyMjksIDExOCwgMSwgMjQ4LCAzMywgMTE4LCAxLCAxOTgsIDExOCwgMSwgCisgICAgMTkxLCAxMTgsIDEsIDIyNSwgMTUwLCAxMTgsIDEsIDI1MiwgMTk5LCAxMTgsIDEsIDI1MiwgMjYsIDExOCwgMSwgMTg2LCAKKyAgICAxMTgsIDEsIDE5MiwgMTE4LCAxLCAyMDUsIDExOCwgMSwgMjMzLCAxNDEsIDExOCwgMSwgMjE0LCAyNywgMTE4LCAxLCAyMjAsIAorICAgIDEwNCwgMTE4LCAxLCAyMTgsIDIyNSwgMTE4LCAxLCAyMDYsIDExOCwgMSwgMTYyLCAxMTgsIDEsIDIzMiwgMTkwLCAxMTgsIAorICAgIDEsIDU1LCAzNiwgMjMyLCAxODEsIDExOCwgMSwgNTUsIDM2LCAyMjIsIDE4MSwgMTE4LCAxLCA1NSwgMzYsIDIyOCwgOTcsIAorICAgIDExOCwgMjUsIDUsIDI1NSwgODIsIDExOCwgMjUsIDUsIDI1MiwgMjMsIDI1NSwgODIsIDExOCwgMjUsIDUsIDc0LCAxMTgsIAorICAgIDI1LCA1LCAyMzYsIDQwLCAxMTgsIDI1LCA1LCA2OSwgMTE4LCAyNSwgNSwgMjE0LCAxMTgsIDExOCwgMjUsIDUsIDE0OSwgCisgICAgMTUzLCAxMTgsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxMTgsIDI1LCA1LCAxNDksIDE1NiwgMTE4LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTE4LCAyNSwgNSwgNzYsIDExOCwgMjUsIDUsIDI1NCwgMjEwLCAxMTgsIDI1LCA1LCA3OCwgMTE4LCAyNSwgCisgICAgNSwgMjUzLCAyMDAsIDExOCwgMjEzLCAxNTIsIDExOCwgMjQ4LCAxODYsIDExOCwgNTIsIDI0OCwgMTg2LCAxMTgsIDIyNCwgCisgICAgMTQ0LCAyNDcsIDEyOCwgMTE4LCAyMjQsIDE0NCwgNTIsIDI0NywgMTI4LCAxMTgsIDIyNCwgMTQ0LCAyMzIsIDIxOSwgMTE4LCAKKyAgICAyMjQsIDE0NCwgMjQ5LCAxNDUsIDEzMCwgMTE4LCAyMjQsIDE0NCwgMjMyLCAxMjEsIDExOCwgNTQsIDExMSwgMTE4LCA1NCwgCisgICAgMTA1LCAxMTgsIDU0LCAxNTgsIDExOCwgNTQsIDE2MSwgMTE4LCA1NCwgMTkwLCAxMTgsIDU0LCAxOTUsIDExOCwgNTQsIAorICAgIDE5OSwgMTE4LCA1NCwgMTk2LCAxMTgsIDU0LCAyMDEsIDExOCwgNTQsIDIxNiwgMjQ4LCAxMTgsIDU0LCAyMTUsIDczLCAKKyAgICAxMTgsIDU0LCAyMTYsIDE2MywgMTE4LCA1NCwgMjQ0LCAyMywgMTE4LCA1NCwgMjQ0LCAxMjIsIDExOCwgNTQsIDIxOSwgCisgICAgMTEzLCAxMTgsIDU0LCAyMjAsIDExOCwgMTE4LCA1NCwgMjQ1LCAxOTIsIDExOCwgNTQsIDIyOCwgMjAwLCAxMTgsIDU0LCAKKyAgICAxMjMsIDI0MCwgMjE3LCAxMTgsIDU0LCAxMjMsIDIxNiwgMTQ4LCAxMTgsIDIxLCAyMTAsIDg2LCAxMTgsIDIxLCAxMTEsIAorICAgIDExOCwgMjEsIDEwNSwgMTE4LCAyMSwgMTU4LCAxMTgsIDIxLCAxNjEsIDExOCwgMjEsIDE5MCwgMTE4LCAyMSwgMTk1LCAKKyAgICAxMTgsIDIxLCAxOTksIDExOCwgMjEsIDE5NiwgMTE4LCAyMSwgMjAxLCAyMzQsIDI1MCwgNSwgMjUxLCA3LCAyMzQsIDI1MCwgCisgICAgNSwgMjU0LCA4MywgMjM0LCAyNTAsIDUsIDIxMywgMTQ3LCAyMzQsIDI1MCwgMSwgNjEsIDIzNCwgMjUwLCAxLCAyNTUsIDgyLCAKKyAgICAyMzQsIDI1MCwgMSwgNzQsIDIzNCwgMjUwLCAxLCAyMzYsIDQwLCAyMzQsIDI1MCwgMSwgNjksIDIzNCwgMjUwLCAxLCAyMTQsIAorICAgIDExOCwgMjM0LCAyNTAsIDEsIDc2LCAyMzQsIDI1MCwgMSwgMjU0LCAyMTAsIDIzNCwgMjUwLCAxLCA3OCwgMjM0LCAyNTAsIAorICAgIDEsIDI1MywgMjAwLCAyMzQsIDI1MCwgMSwgMTc2LCAyMzQsIDI1MCwgMSwgMjM0LCAxMzgsIDIzNCwgMjUwLCAxLCAyNDMsIAorICAgIDE0MiwgMjM0LCAyNTAsIDEsIDI0MywgMCwgMjM0LCAyNTAsIDEsIDIyOSwgODIsIDIzNCwgMjUwLCAxLCAyNTEsIDQxLCAKKyAgICAyMzQsIDI1MCwgMSwgMjUwLCAxNjUsIDIzNCwgMjUwLCAxLCAyMzUsIDE0NywgMjM0LCAyNTAsIDEsIDIzNSwgMTIwLCAyMzQsIAorICAgIDI1MCwgMSwgMjI3LCAxNjksIDIzNCwgMjUwLCAxLCAyMTUsIDE1NywgMjM0LCAyNTAsIDEsIDIxNSwgMTQ1LCAyMzQsIDI1MCwgCisgICAgMSwgMjQ4LCAxNDMsIDIzNCwgMjUwLCAxLCAyNDgsIDEzMiwgMjM0LCAyNTAsIDEsIDI0OCwgMTI3LCAyMzQsIDI1MCwgMSwgCisgICAgMjIzLCA0MiwgMjM0LCAyNTAsIDEsIDIyOCwgMTE1LCAyMzQsIDI1MCwgMSwgMjE3LCAxMDYsIDIzNCwgMjUwLCAxLCAyMTYsIAorICAgIDIwOSwgMjM0LCAyNTAsIDEsIDI0OCwgMjI5LCAyMzQsIDI1MCwgMSwgMjQ4LCAzMywgMjM0LCAyNTAsIDEsIDE5OCwgMjM0LCAKKyAgICAyNTAsIDEsIDE5MSwgMjM0LCAyNTAsIDEsIDIyNSwgMTUwLCAyMzQsIDI1MCwgMSwgMjUyLCAxOTksIDIzNCwgMjUwLCAxLCAKKyAgICAyNTIsIDI2LCAyMzQsIDI1MCwgMSwgMTg2LCAyMzQsIDI1MCwgMSwgMTkyLCAyMzQsIDI1MCwgMSwgMjA1LCAyMzQsIDI1MCwgCisgICAgMSwgMjMzLCAxNDEsIDIzNCwgMjUwLCAxLCAyMTQsIDI3LCAyMzQsIDI1MCwgMSwgMjIwLCAxMDQsIDIzNCwgMjUwLCAxLCAKKyAgICAyMTgsIDIyNSwgMjM0LCAyNTAsIDEsIDIwNiwgMjM0LCAyNTAsIDEsIDE2MiwgMjM0LCAyNTAsIDI1LCA1LCAyNTUsIDgyLCAKKyAgICAyMzQsIDI1MCwgMjUsIDUsIDc0LCAyMzQsIDI1MCwgMjUsIDUsIDIzNiwgNDAsIDIzNCwgMjUwLCAyNSwgNSwgNjksIDIzNCwgCisgICAgMjUwLCAyNSwgNSwgMjE0LCAxMTgsIDIzNCwgMjUwLCAyNSwgNSwgNzYsIDIzNCwgMjUwLCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDIzNCwgMjUwLCAyNSwgNSwgNzgsIDIzNCwgMjUwLCAyNSwgNSwgMjUzLCAyMDAsIDIzNCwgMjUwLCA1LCAyMTMsIDE1MiwgCisgICAgMjM0LCAyNTAsIDUsIDIyNywgMjA5LCAyMzQsIDI1MCwgMjU1LCAzMCwgNTAsIDIzNCwgMjUwLCAyNDUsIDEyOSwgNTAsIAorICAgIDIzNCwgMjUwLCA1NCwgNTAsIDIzNCwgMjUwLCAyMjEsIDE3NSwgNzksIDIzNCwgMjUwLCA1MiwgMjIxLCAxNzUsIDc5LCAKKyAgICAyMzQsIDI1MCwgMjQ4LCAxODYsIDIzNCwgMjUwLCA1MiwgMjQ4LCAxODYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyMiwgMjAsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIxNywgODEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI1MiwgMTc2LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyNTEsIDMxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDgsIDIxMSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjQzLCAxMjcsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzMSwgMjE1LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjksIDc5LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzMsIDExOCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI5LCAyMTgsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIxNCwgMjQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyNiwgNzcsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIAorICAgIDIxMSwgODQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyMywgMTcxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDIsIDQ0LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzQsIDI1NCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM1LCAxNDIsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIyNywgMTY2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNTQsIDIxOCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjQ1LCAyMTUsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNiwgNDEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIxNCwgMjA4LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjYsIDIyNiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjQ1LCAyMDUsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIzMSwgMjI4LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMjEwLCA4NiwgMjE5LCAzOCwgMjE5LCA0NiwgCisgICAgMjEsIDExMSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDEwNSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE1OCwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMjEsIDE2MSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5MCwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5NSwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5OSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5NiwgMjE5LCAzOCwgMjE5LCA0NiwgCisgICAgMjEsIDIwMSwgMjUwLCAxNTksIDUsIDI1MSwgNywgMjUwLCAxNTksIDUsIDI1NCwgODMsIDI1MCwgMTU5LCA1LCAyMTMsIAorICAgIDE0NywgMjUwLCAxNTksIDEsIDI1NSwgODIsIDI1MCwgMTU5LCAxLCA3NCwgMjUwLCAxNTksIDEsIDY5LCAyNTAsIDE1OSwgMSwgCisgICAgNzYsIDI1MCwgMTU5LCAxLCAyMzUsIDE2LCAyNTAsIDE1OSwgMSwgMjM0LCAxMzcsIDI1MCwgMTU5LCAxLCAyNDMsIDEzOSwgCisgICAgMjUwLCAxNTksIDEsIDI0MiwgMjU1LCAyNTAsIDE1OSwgMSwgMjI5LCA4MSwgMjUwLCAxNTksIDEsIDI1MSwgNDAsIDI1MCwgCisgICAgMTU5LCAxLCAyNTAsIDE2NCwgMjUwLCAxNTksIDEsIDIzNSwgMTQ2LCAyNTAsIDE1OSwgMSwgMjM1LCAxMTksIDI1MCwgMTU5LCAKKyAgICAxLCAyMjcsIDE2OCwgMjUwLCAxNTksIDEsIDIxNSwgMTU2LCAyNTAsIDE1OSwgMSwgMjE1LCAxNDQsIDI1MCwgMTU5LCAxLCAKKyAgICAyNDgsIDE0MiwgMjUwLCAxNTksIDEsIDI0OCwgMTI2LCAyNTAsIDE1OSwgMSwgMjI4LCAxMTQsIDI1MCwgMTU5LCAxLCAyMTcsIAorICAgIDEwMiwgMjUwLCAxNTksIDEsIDIxNiwgMjA4LCAyNTAsIDE1OSwgMSwgMjQ4LCAyMjgsIDI1MCwgMTU5LCAxLCAyNDgsIDMyLCAKKyAgICAyNTAsIDE1OSwgMSwgMjI5LCAyMzAsIDI1MCwgMTU5LCAxLCAyMjYsIDkzLCAyNTAsIDE1OSwgMSwgMjI1LCAxNDksIDI1MCwgCisgICAgMTU5LCAxLCAyNTIsIDE5NywgMjUwLCAxNTksIDEsIDI1MiwgMjUsIDI1MCwgMTU5LCAxLCAyMzEsIDI0MiwgMjUwLCAxNTksIAorICAgIDEsIDIxMCwgMTY3LCAyNTAsIDE1OSwgMSwgMjExLCAxMDMsIDI1MCwgMTU5LCAxLCAyMjMsIDE4NywgMjUwLCAxNTksIDEsIAorICAgIDIzMywgMTQwLCAyNTAsIDE1OSwgMSwgMjEyLCA2NCwgMjUwLCAxNTksIDEsIDIyMiwgMzMsIDI1MCwgMTU5LCAxLCAyNDIsIAorICAgIDUzLCAyNTAsIDE1OSwgMjUsIDUsIDYxLCAyNTAsIDE1OSwgMjUsIDUsIDc0LCAyNTAsIDE1OSwgMjUsIDUsIDIzNiwgNDAsIAorICAgIDI1MCwgMTU5LCAyNSwgNSwgNjksIDI1MCwgMTU5LCAyNSwgNSwgMjE0LCAxMTgsIDI1MCwgMTU5LCAyNSwgNSwgNzYsIDI1MCwgCisgICAgMTU5LCAyNSwgNSwgMjU0LCAyMTAsIDI1MCwgMTU5LCAyNSwgNSwgNzgsIDI1MCwgMTU5LCAyNSwgNSwgMjUzLCAyMDAsIAorICAgIDI1MCwgMTU5LCAyNSwgNSwgMjI2LCAyMjMsIDI1MCwgMTU5LCAxNDQsIDc5LCAyNTAsIDE1OSwgMjUzLCAyMDEsIDc5LCAKKyAgICAyNTAsIDE1OSwgMjEzLCAxNTIsIDI1MCwgMTU5LCAyMzEsIDI0MCwgMjUwLCAxNTksIDIxLCAyMTAsIDg2LCAyNTAsIDE1OSwgCisgICAgMjEsIDExMSwgMjUwLCAxNTksIDIxLCAxMDUsIDI1MCwgMTU5LCAyMSwgMTU4LCAyNTAsIDE1OSwgMjEsIDE2MSwgMjUwLCAKKyAgICAxNTksIDIxLCAxOTAsIDI1MCwgMTU5LCAyMSwgMTk1LCAyNTAsIDE1OSwgMjEsIDE5OSwgMjUwLCAxNTksIDIxLCAxOTYsIAorICAgIDI1MCwgMTU5LCAyMSwgMjAxLCAyNTAsIDE1OSwgMjIxLCAxNzUsIDc5LCAyNTAsIDE1OSwgMjQ4LCAxODYsIDI1MCwgMTU5LCAKKyAgICA1MiwgMjQ4LCAxODYsIDI1MCwgMTU5LCAyMjQsIDE2LCA3OSwgMTc0LCA1LCAyNTEsIDcsIDE3NCwgNSwgMjU0LCA4MywgCisgICAgMTc0LCA1LCAyMTMsIDE0NywgMTc0LCAxLCA2MSwgMTc0LCAxLCAyNTUsIDgyLCAxNzQsIDEsIDc0LCAxNzQsIDEsIDIzNiwgCisgICAgNDAsIDE3NCwgMSwgNjksIDE3NCwgMSwgMjE0LCAxMTgsIDE3NCwgMSwgMTQ5LCAxNTMsIDE3NCwgMSwgMTQ5LCAyMjIsIAorICAgIDE4MiwgMTc0LCAxLCAxNDksIDE1NiwgMTc0LCAxLCAxNDksIDIzMiwgMTkxLCAxNzQsIDEsIDc2LCAxNzQsIDEsIDI1NCwgCisgICAgMjEwLCAxNzQsIDEsIDc4LCAxNzQsIDEsIDI1MywgMjAwLCAxNzQsIDEsIDE3NiwgMTc0LCAxLCAyMzQsIDEzOCwgMTc0LCAxLCAKKyAgICAyNDMsIDE0MiwgMTc0LCAxLCAyNDMsIDAsIDE3NCwgMSwgMjI5LCA4MiwgMTc0LCAxLCAyNTEsIDQxLCAxNzQsIDEsIDI1MCwgCisgICAgMTY1LCAxNzQsIDEsIDIzNSwgMTQ3LCAxNzQsIDEsIDIzNSwgMTIwLCAxNzQsIDEsIDIyNywgMTY5LCAxNzQsIDEsIDIxNSwgCisgICAgMTU3LCAxNzQsIDEsIDIxNSwgMTQ1LCAxNzQsIDEsIDI0OCwgMTQzLCAxNzQsIDEsIDI0OCwgMTI3LCAxNzQsIDEsIDIyOCwgCisgICAgMTE1LCAxNzQsIDEsIDIxNywgMTA2LCAxNzQsIDEsIDIxNiwgMjA5LCAxNzQsIDEsIDI0OCwgMjI5LCAxNzQsIDEsIDI0OCwgCisgICAgMzMsIDE3NCwgMSwgMTk4LCAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMjUsIDE1MCwgMTc0LCAxLCAyNTIsIDE5OSwgMTc0LCAxLCAKKyAgICAyNTIsIDI2LCAxNzQsIDEsIDE4NiwgMTc0LCAxLCAxOTIsIDE3NCwgMSwgMjA1LCAxNzQsIDEsIDIzMywgMTQxLCAxNzQsIDEsIAorICAgIDIzMiwgMTkwLCAxNzQsIDEsIDIxNCwgMjcsIDE3NCwgMSwgMjIwLCAxMDQsIDE3NCwgMSwgMjE4LCAyMjUsIDE3NCwgMSwgCisgICAgMjA2LCAxNzQsIDEsIDE2MiwgMTc0LCAyNSwgNSwgMjU1LCA4MiwgMTc0LCAyNSwgNSwgNzQsIDE3NCwgMjUsIDUsIDIzNiwgCisgICAgNDAsIDE3NCwgMjUsIDUsIDY5LCAxNzQsIDI1LCA1LCAyMTQsIDExOCwgMTc0LCAyNSwgNSwgMTQ5LCAxNTMsIDE3NCwgMjUsIAorICAgIDUsIDE0OSwgMjIyLCAxODIsIDE3NCwgMjUsIDUsIDE0OSwgMTU2LCAxNzQsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzQsIAorICAgIDI1LCA1LCA3NiwgMTc0LCAyNSwgNSwgMjU0LCAyMTAsIDE3NCwgMjUsIDUsIDc4LCAxNzQsIDI1LCA1LCAyNTMsIDIwMCwgCisgICAgMTc0LCA1LCAyMTMsIDE1MiwgMTc0LCA1LCAyNTMsIDE4MywgMTc0LCA1LCAyMzUsIDEwOCwgMTc0LCA1LCAyMTQsIDE2MSwgCisgICAgMTc0LCAyMjYsIDIwOCwgMTc0LCAyNDgsIDE4NiwgMTc0LCA1MiwgMjQ4LCAxODYsIDE3NCwgMjU1LCAzMCwgNTAsIDE3NCwgCisgICAgMjIwLCAxMzksIDE3NCwgMjEsIDIxMCwgODYsIDE3NCwgMjEsIDExMSwgMTc0LCAyMSwgMTA1LCAxNzQsIDIxLCAxNTgsIAorICAgIDE3NCwgMjEsIDE2MSwgMTc0LCAyMSwgMTkwLCAxNzQsIDIxLCAxOTUsIDE3NCwgMjEsIDE5OSwgMTc0LCAyMSwgMTk2LCAKKyAgICAxNzQsIDIxLCAyMDEsIDIxNywgNzAsIDEsIDYxLCAyMTcsIDcwLCAxLCAyNTUsIDgyLCAyMTcsIDcwLCAxLCA3NCwgMjE3LCAKKyAgICA3MCwgMSwgMjM2LCA0MCwgMjE3LCA3MCwgMSwgNjksIDIxNywgNzAsIDEsIDIxNCwgMTE4LCAyMTcsIDcwLCAxLCA3NiwgCisgICAgMjE3LCA3MCwgMSwgMjU0LCAyMTAsIDIxNywgNzAsIDEsIDc4LCAyMTcsIDcwLCAxLCAyNTMsIDIwMCwgMjE3LCA3MCwgMSwgCisgICAgMTc2LCAyMTcsIDcwLCAxLCAyMzQsIDEzOCwgMjE3LCA3MCwgMSwgMjQzLCAxNDIsIDIxNywgNzAsIDEsIDI0MywgMCwgMjE3LCAKKyAgICA3MCwgMSwgMjI5LCA4MiwgMjE3LCA3MCwgMSwgMjUxLCA0MSwgMjE3LCA3MCwgMSwgMjUwLCAxNjUsIDIxNywgNzAsIDEsIAorICAgIDIzNSwgMTQ3LCAyMTcsIDcwLCAxLCAyMzUsIDEyMCwgMjE3LCA3MCwgMSwgMjI3LCAxNjksIDIxNywgNzAsIDEsIDIxNSwgCisgICAgMTU3LCAyMTcsIDcwLCAxLCAyMTUsIDE0NSwgMjE3LCA3MCwgMSwgMjQ4LCAxNDMsIDIxNywgNzAsIDEsIDI0OCwgMTI3LCAKKyAgICAyMTcsIDcwLCAxLCAyMjgsIDExNSwgMjE3LCA3MCwgMSwgMjE3LCAxMDYsIDIxNywgNzAsIDEsIDIxNiwgMjA5LCAyMTcsIAorICAgIDcwLCAxLCAyNDgsIDIyOSwgMjE3LCA3MCwgMSwgMjQ4LCAzMywgMjE3LCA3MCwgMSwgMTk4LCAyMTcsIDcwLCAxLCAxOTEsIAorICAgIDIxNywgNzAsIDEsIDIyNSwgMTUwLCAyMTcsIDcwLCAxLCAyNTIsIDE5OSwgMjE3LCA3MCwgMSwgMjUyLCAyNiwgMjE3LCA3MCwgCisgICAgMSwgMTg2LCAyMTcsIDcwLCAxLCAxOTIsIDIxNywgNzAsIDEsIDIwNSwgMjE3LCA3MCwgMSwgMjMzLCAxNDEsIDIxNywgNzAsIAorICAgIDEsIDIxNCwgMjcsIDIxNywgNzAsIDEsIDIyMCwgMTA0LCAyMTcsIDcwLCAxLCAyMDYsIDIxNywgNzAsIDEsIDE2MiwgMjE3LCAKKyAgICA3MCwgMSwgMjIyLCAxODEsIDIxNywgNzAsIDUsIDI1NCwgODMsIDIxNywgNzAsIDUsIDIxMywgMTQ3LCAyMTcsIDcwLCAyNSwgCisgICAgNSwgMjU1LCA4MiwgMjE3LCA3MCwgMjUsIDUsIDc0LCAyMTcsIDcwLCAyNSwgNSwgMjM2LCA0MCwgMjE3LCA3MCwgMjUsIDUsIAorICAgIDY5LCAyMTcsIDcwLCAyNSwgNSwgMjE0LCAxMTgsIDIxNywgNzAsIDI1LCA1LCA3NiwgMjE3LCA3MCwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCAyMTcsIDcwLCAyNSwgNSwgNzgsIDIxNywgNzAsIDI1LCA1LCAyNTMsIDIwMCwgMjE3LCA3MCwgNSwgMjEzLCAxNTIsIAorICAgIDIxNywgNzAsIDUsIDIyNywgMjA5LCAyMTcsIDcwLCAyMSwgMjEwLCA4NiwgMjE3LCA3MCwgMjEsIDExMSwgMjE3LCA3MCwgCisgICAgMjEsIDEwNSwgMjE3LCA3MCwgMjEsIDE1OCwgMjE3LCA3MCwgMjEsIDE2MSwgMjE3LCA3MCwgMjEsIDE5MCwgMjE3LCA3MCwgCisgICAgMjEsIDE5NSwgMjE3LCA3MCwgMjEsIDE5OSwgMjE3LCA3MCwgMjEsIDE5NiwgMjE3LCA3MCwgMjEsIDIwMSwgMTUsIDUsIDYxLCAKKyAgICAxNSwgNSwgMTE2LCAzMCwgNjEsIDE1LCA1LCAxMTYsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDExNiwgMzAsIDI0MywgMTEyLCAKKyAgICAyMTYsIDI0MCwgMTUsIDUsIDExNiwgMzAsIDE2MiwgMTUsIDUsIDExNiwgMzAsIDIzNiwgNDIsIDE1LCA1LCAxMTYsIDMwLCAKKyAgICAyMzMsIDEyMiwgMjQyLCAxMDEsIDE1LCA1LCAxMTYsIDMwLCAyMzAsIDY2LCAxNSwgNSwgMTE2LCAzMCwgMjIyLCAyMywgMTUsIAorICAgIDUsIDI1NSwgODQsIDE1LCA1LCAyNTUsIDM0LCAxNSwgNSwgMjU1LCAzNSwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjU1LCAzNSwgCisgICAgMzAsIDI0NiwgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDI0MywgMTI1LCAxNSwgNSwgMjU1LCAzNSwgMzAsIAorICAgIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI1NSwgMzUsIDMwLCAxNjIsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjM2LCA0MywgCisgICAgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjM2LCAxNiwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzMsIDEyMywgMTUsIAorICAgIDUsIDI1NSwgMzUsIDMwLCAyMjAsIDUwLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDY5LCAxNSwgNSwgCisgICAgMjU1LCAzNSwgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDMyLCAxNSwgNSwgMjU1LCAzMywgMzAsIDI1MiwgMTY4LCAxNSwgNSwgCisgICAgMjU1LCAzMywgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAKKyAgICAxNTgsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjIwLCAxMDIsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDI1NSwgOCwgMTUsIDUsIDI1NCwgMTk1LCAxNSwgNSwgMjU0LCAxOTYsIDMwLCAyNDUsIDk1LCAxNSwgNSwgMjU0LCAxOTYsIAorICAgIDMwLCAyMjAsIDEyLCA5NiwgMjQyLCAxOTcsIDE1LCA1LCAyNTQsIDE4NywgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjU0LCAKKyAgICAxODcsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI0NywgMjI0LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNDIsIDE5NywgMTUsIDUsIAorICAgIDI1NCwgMTg4LCAzMCwgMTYyLCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMzUsIDUsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIzNCwgCisgICAgOTgsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgCisgICAgMjU0LCAxODQsIDE1LCA1LCAyNTQsIDE3NywgMTUsIDUsIDI1NCwgMTQwLCAxNSwgNSwgMjU0LCAxNDEsIDMwLCAyMjAsIDY1LCAKKyAgICAxNSwgNSwgMjU0LCAxMzEsIDE1LCA1LCAyNTQsIDEzMiwgMTE1LCAyNTQsIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxMzQsIAorICAgIDIxNiwgODYsIDE1LCA1LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIyLCAyMjYsIDE2OCwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMSwgCisgICAgMTUsIDUsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjIsIDIxOCwgMjM1LCAxNSwgNSwgMjU0LCAxMDIsIDE1LCA1LCAyNTQsIDc1LCAKKyAgICAxNSwgNSwgMjU0LCA0MywgMTUsIDUsIDI1NCwgNDQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDI1NCwgMTYsIDE1LCA1LCAyNTMsIAorICAgIDI0NCwgMTUsIDUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyNDAsIDIxMCwgNDAsIDIxNiwgMjQwLCAxNSwgNSwgMjUzLCAKKyAgICAyNDAsIDIzNSwgOSwgMjE2LCAyNDAsIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMjE1LCAxMTUsIDExNSwgCisgICAgMjE1LCAxMTUsIDIxNSwgMTE1LCAxMTUsIDIxNSwgMTE1LCAyMjYsIDI1LCAxNSwgNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAKKyAgICAyNDAsIDExNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMjQ5LCAKKyAgICAxMzMsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyMzcsIDE1LCA1LCAyNTMsIAorICAgIDIzNCwgMTUsIDUsIDI1MiwgMTk5LCAxNSwgNSwgMjUyLCAxODQsIDE1LCA1LCAyNTIsIDE3OSwgMTUsIDUsIDI1MiwgMTc1LCAKKyAgICAxNSwgNSwgMjUyLCAxNjksIDE1LCA1LCAyNTIsIDE3MCwgMTE1LCAyNTIsIDE2OSwgMTUsIDUsIDI1MiwgMTY4LCAxNSwgNSwgCisgICAgMTMwLCAxNSwgNSwgMjUyLCAxNDgsIDE1LCA1LCAyNTIsIDE0LCAxNSwgNSwgMjUyLCAxNSwgMzAsIDYxLCAxNSwgNSwgMjUyLCAKKyAgICAxNSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjUyLCAxNSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjUxLCAxMzMsIAorICAgIDE1LCA1LCAyNTEsIDEzNCwgMTE1LCAyNTEsIDEzNCwgMjU1LCAzNCwgMTUsIDUsIDI1MSwgMTM0LCAxMTUsIDI1MSwgMTM0LCAKKyAgICAyMTQsIDE5MCwgMTUsIDUsIDI1MSwgMTM0LCAyNDksIDEzMywgMjUxLCAxMzMsIDE1LCA1LCAyNTEsIDExNywgMTUsIDUsIAorICAgIDI1MSwgMTE4LCAxMTUsIDI1MSwgMTE3LCAxNSwgNSwgMjUxLCAxMDYsIDE1LCA1LCAyNTEsIDEwNSwgMTUsIDUsIDI0OCwgCisgICAgMjI5LCAxNSwgNSwgMjQ4LCAyMjAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDExNiwgOTYsIDIzMSwgMTUyLCAKKyAgICAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNTQsIDE0MCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjUyLCAxNjgsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI1MiwgMTQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCAKKyAgICA3MiwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDMsIDE0MywgOTYsIDIzMSwgMTUyLCAKKyAgICAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDIsIDIyMSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjQyLCAyMDQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MiwgMTEwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgCisgICAgNzIsIDMwLCAxNjIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzNSwgMTg2LCAxNSwgNSwgMjQ4LCAyMjEsIAorICAgIDIzNCwgNzIsIDMwLCAyMzUsIDE4NywgOTYsIDIzMiwgMTAzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzQsIAorICAgIDI0OCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgCisgICAgMzAsIDIzMiwgMTAzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzIsIDEwNCwgOTYsIDIzMSwgMTUxLCAxNSwgCisgICAgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzIsIDg5LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMjksIAorICAgIDExMiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjI2LCAyNiwgOTYsIDIyNiwgMjUsIDE1LCA1LCAyNDgsIDIyMSwgCisgICAgMjM0LCA3MiwgMzAsIDIxOSwgMTkzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjQ4LCAKKyAgICAyMjEsIDIzNCwgNzIsIDMwLCAyMTQsIDIzMSwgOTYsIDI0MiwgMjA0LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKKyAgICAyMTQsIDEyNiwgMTUsIDUsIDI0OCwgMTk1LCAxNSwgNSwgMjQ4LCAxNzQsIDE1LCA1LCAyNDgsIDE3MywgMTUsIDUsIDI0OCwgCisgICAgMTcyLCAxNSwgNSwgMjQ4LCAxMSwgMTUsIDUsIDI0NywgMjUwLCAxNSwgNSwgMjQ3LCAyMjUsIDE1LCA1LCAyNDcsIDIyNiwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDcsIDIyNCwgMTUsIDUsIDI0NywgMjE0LCAxNSwgNSwgMjQ3LCAyMTUsIDIzNCwgMjE0LCAKKyAgICAxMDQsIDI0MiwgMTAyLCAyNDcsIDE5NSwgMTUsIDUsIDI0NywgMTk1LCAxNSwgNSwgMjQ2LCA4NiwgMTUsIDUsIDI0NiwgODcsIAorICAgIDExNSwgMjQ2LCA4NiwgMTUsIDUsIDI0NiwgODcsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA4NywgMjIwLCA0NywgMTUsIDUsIAorICAgIDI0NiwgODQsIDE1LCA1LCAyNDYsIDg1LCAzMCwgMjQ1LCA4MCwgMTUsIDUsIDI0NiwgODMsIDE1LCA1LCAyNDYsIDgyLCAxNSwgCisgICAgNSwgMjQ2LCA4MSwgMTUsIDUsIDI0NiwgODAsIDE1LCA1LCAyNDYsIDc2LCAxNSwgNSwgMjQ2LCA3NCwgMTUsIDUsIDI0NiwgCisgICAgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA3NSwgMjQyLCAxMDIsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA3MywgMTUsIDUsIAorICAgIDI0NiwgNjYsIDE1LCA1LCA3NiwgMTUsIDUsIDE2MCwgMzAsIDIyNiwgMjUsIDE1LCA1LCAxNjAsIDExNSwgMTYwLCAyMjcsIAorICAgIDE5OSwgMTE1LCAyMjcsIDE5OCwgMTUsIDUsIDI0NSwgMjQyLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAxMTYsIDk2LCAyNDIsIAorICAgIDU2LCA5NiwgMjQ4LCAyMjksIDE1LCA1LCAyNDUsIDI0MywgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAKKyAgICAyMzAsIDIzNSwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjIyLCAxMCwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjIwLCA2NSwgMTUsIAorICAgIDUsIDI0NSwgMjQzLCAzMCwgNjksIDE1LCA1LCAyNDUsIDIxOSwgMTUsIDUsIDI0NSwgMjA4LCAxNSwgNSwgMjQ1LCAxODIsIAorICAgIDE1LCA1LCAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjQzLCAxMTEsIDE1LCA1LCAyNDUsIDE1OSwgMzAsIDI0MywgCisgICAgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjMxLCA5NiwgMTUsIDUsIDI0NSwgMTU5LCAyNDksIDEzMywgCisgICAgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMjI2LCAxNjgsIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDIxOCwgMjM1LCAKKyAgICAxNSwgNSwgMjQ1LCA5NywgMTUsIDUsIDI0NSwgOTUsIDE1LCA1LCAyNDUsIDgwLCAxNSwgNSwgMjQ1LCAxOCwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCA2MSwgMTUsIDUsIDI0NSwgMTksIDMwLCAxMTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIAorICAgIDMwLCAxMTYsIDk2LCAyMzMsIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDI0NiwgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAKKyAgICAxOSwgMzAsIDI0NiwgNzUsIDI0MiwgMTAyLCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAxNjIsIDE1LCA1LCAyNDUsIAorICAgIDE5LCAzMCwgMjQyLCA1NiwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjM0LCAyMTQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDIzMywgMjIxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIAorICAgIDIzMywgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjMyLCAyNDcsIDE1LCA1LCAyNDUsIDE5LCAzMCwgCisgICAgMjMyLCAxMDMsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjE0LCAyMTksIDE1LCAKKyAgICA1LCAyNDMsIDE0MiwgMTUsIDUsIDI0MywgMTQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MywgMTQwLCAxNSwgNSwgMjQzLCAxNDEsIAorICAgIDMwLCAxMTYsIDk2LCAyNDgsIDIzMCwgOTYsIDE2MiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMTE2LCA5NiwgMTYyLCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAxMTYsIDk2LCAyMzYsIDQyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTUsIDMzLCAyMTYsIDI0MSwgCisgICAgOTYsIDIxNywgOTQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTMsIAorICAgIDIzOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUzLCAyMzgsIDk2LCAyNDMsIDEyNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MiwgMTQ5LCA5NiwgMjA1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNTEsIDEwNiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUxLCAxMDcsIDk2LCAyMDUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI0OCwgMjI5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDgsIDExLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDcsIDIyNiwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NiwgODQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTgyLCAKKyAgICAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE4MywgOTYsIDIzMywgMTQxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIAorICAgIDE1OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxNTksIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MiwgMjIxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDIxOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjQyLCAyMjAsIDk2LCA2MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAyMDUsIDk2LCAyMTgsIDg0LCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyNDIsIDU2LCA5NiwgMjMyLCAxMDQsIDk2LCAyNDUsIDgwLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIAorICAgIDM3LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDM4LCA5NiwgMjMzLCAxNDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MSwgCisgICAgMTg4LCA5NiwgMjMyLCAyNDcsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MCwgMjI1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM1LCAxNzMsIDk2LCAyNDAsIDIzMCwgOTYsIDI1MywgCisgICAgMjM5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDIzNCwgOTUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgOTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMjMzLCAyMjIsIDk2LCAyNTQsIDEzMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjMzLCAxNDEsIDE1LCAKKyAgICA1LCAyNDMsIDE0MSwgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjMwLCAyMzUsIAorICAgIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjcsIDE5OSwgMTE1LCAyMjcsIAorICAgIDE5OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMTkxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyMjEsIDIzMywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjIwLCA2NiwgOTYsIDIxNSwgOTksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDIxOCwgNDQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIxNywgNzMsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDY5LCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjE0LCAyMjAsIDk2LCAyNDYsIDg2LCAxNSwgCisgICAgNSwgMjQzLCAxNDEsIDExNSwgMjQzLCAxNDAsIDE1LCA1LCAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTM2LCAyNDksIDEzMywgCisgICAgMjQzLCAxMzUsIDE1LCA1LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIDEwNCwgMTE1LCAKKyAgICAyNDMsIDEwMywgMTUsIDUsIDI0MywgMTI1LCAxNSwgNSwgMjQzLCAxMjYsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIAorICAgIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDI0MywgMTI0LCAxNSwgNSwgMjQzLCAxMjIsIDE1LCA1LCAyNDMsIDExMywgCisgICAgMTUsIDUsIDI0MywgMTExLCAxNSwgNSwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAxMTIsIDExNSwgMjQzLCAKKyAgICAxMTEsIDE1LCA1LCAyNDMsIDExMiwgMjQ5LCAxMzMsIDI0MywgMTExLCAxNSwgNSwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIAorICAgIDEwMiwgMTUsIDUsIDI0MywgOTcsIDE1LCA1LCAyNDMsIDQzLCAxNSwgNSwgMjQzLCA0NCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgCisgICAgMjQyLCAyMjEsIDE1LCA1LCAyNDIsIDIyMiwgMzAsIDc2LCAxNSwgNSwgMjQyLCAyMjIsIDMwLCA2OSwgMTUsIDUsIDI0MiwgCisgICAgMjIyLCAyNDksIDEzMywgMjQyLCAyMjEsIDE1LCA1LCAyNDIsIDIxOSwgMTUsIDUsIDI0MiwgMjIwLCAxMTUsIDI0MiwgMjE5LCAKKyAgICAxNSwgNSwgMjQyLCAyMjAsIDI0OSwgMTMzLCAyNDIsIDIxOSwgMTUsIDUsIDI0MiwgMjE2LCAxNSwgNSwgMjQyLCAyMDQsIAorICAgIDE1LCA1LCAyNDIsIDIwNSwgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIDIwMiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMTE2LCA5NiwgCisgICAgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAKKyAgICAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAyMzIsIDEwNCwgOTYsIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIAorICAgIDE5MSwgMTUsIDUsIDI0MiwgMTk5LCAxNSwgNSwgMjQyLCAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMjQ5LCAxMzMsIDI0MiwgCisgICAgMTk3LCAxNSwgNSwgMjQyLCAxOTgsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDI0MiwgMTk4LCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDI0MiwgMTk4LCAyMTYsIDI0MCwgMTUsIDUsIDI0MiwgMTIwLCAxNSwgNSwgMjQyLCAxMjEsIDI0OSwgMTMzLCAyNDIsIDEyMCwgCisgICAgMTUsIDUsIDI0MiwgMTE4LCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjM0LCAKKyAgICAyNDksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDIsIAorICAgIDExOSwgMzAsIDIyMiwgMTEsIDk2LCAyMTUsIDExNCwgMTUsIDUsIDI0MiwgMTE5LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgCisgICAgMTEwLCAxNSwgNSwgMjQyLCAxMTEsIDMwLCAxMTYsIDk2LCAyMzMsIDIwMiwgMTUsIDUsIDI0MiwgMTExLCAzMCwgMjMzLCAKKyAgICAyMDIsIDE1LCA1LCAyNDIsIDExMSwgMTE1LCAyNDIsIDExMSwgMjMyLCA5NiwgMTUsIDUsIDI0MiwgMTA1LCAxNSwgNSwgCisgICAgMjQyLCAxMDMsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDIsIDk1LCAxNSwgNSwgMjQyLCA5NCwgCisgICAgMTUsIDUsIDI0MiwgOTEsIDE1LCA1LCAyNDIsIDkwLCAxNSwgNSwgMTYyLCAxNSwgNSwgMjQyLCA1NiwgMjE2LCAyNDAsIDE1LCAKKyAgICA1LCAyNDIsIDU2LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMzcsIDE1LCA1LCAyNDEsIDE4NywgMTUsIDUsIDI0MSwgMTg4LCAKKyAgICAzMCwgMjUzLCAyMzksIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjQ3LCAxOTUsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI0MywgMTMzLCAxNSwgNSwgCisgICAgMjQxLCAxODgsIDMwLCAyMzQsIDg3LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MSwgMTg4LCAKKyAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgNjksIDE1LCA1LCAyNDAsIDIyOSwgMTUsIDUsIDI0MCwgMjI1LCAKKyAgICAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjQyLCAzNywgMTUsIDUsIDI0MCwgCisgICAgMjI2LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDIzMiwgMjAzLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAKKyAgICAyMTQsIDIxOSwgMTUsIDUsIDI0MCwgMjIyLCAxNSwgNSwgNzQsIDE1LCA1LCAyNDAsIDE2MSwgNjEsIDE1LCA1LCAyNDAsIAorICAgIDEyMiwgMTUsIDUsIDIzNiwgNzAsIDE1LCA1LCAyMzYsIDcxLCAxMTUsIDIzNiwgNzEsIDI1MSwgMTA2LCAxNSwgNSwgMjM2LCAKKyAgICA3MSwgMTE1LCAyMzYsIDcxLCAyMTgsIDIzNSwgMTUsIDUsIDIzNiwgNDUsIDE1LCA1LCAyMzYsIDQyLCAxNSwgNSwgMjM2LCAKKyAgICA0MywgMjQ3LCAyNTAsIDE1LCA1LCAyMzYsIDQzLCAyMjMsIDM4LCAxNSwgNSwgMjM2LCA0MywgMTE1LCAyMzYsIDQzLCAyMjAsIAorICAgIDE2LCAxMTUsIDIyMCwgMTYsIDIxNCwgMjIwLCAxMTUsIDIxNCwgMjE5LCAxNSwgNSwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCAKKyAgICA1LCAyMzYsIDM0LCAxNSwgNSwgMjM2LCAzNSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzNiwgMzMsIDE1LCAKKyAgICA1LCAyMzYsIDIzLCAxNSwgNSwgMjM2LCAyNCwgMzAsIDIxNywgNzMsIDE1LCA1LCAyMzYsIDI0LCAyNDksIDEzMywgMjM2LCAKKyAgICAyMywgMTUsIDUsIDIzNiwgMjQsIDIyNiwgMTY4LCAyMzYsIDIzLCAxNSwgNSwgMjM2LCAyNCwgMjE4LCAyMzUsIDE1LCA1LCAKKyAgICAyMzYsIDE2LCAxNSwgNSwgMjM2LCA2LCAxNSwgNSwgMjM1LCAxODYsIDE1LCA1LCAyMzUsIDE3MiwgMTUsIDUsIDE3NiwgMTUsIAorICAgIDUsIDIzNSwgMTksIDMwLCA2MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTUsIDgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjU1LCAKKyAgICA5LCA5NiwgMjMzLCAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUyLCAxNjgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMTMwLCAxNSwgNSwgMjM1LCAKKyAgICAxOSwgMzAsIDI1MiwgMTQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQ1LCA5NSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDUsIAorICAgIDgwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTI1LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDMsIDEwMywgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyNDMsIDEwNCwgOTYsIDIyMCwgMTAzLCA5NiwgNjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAKKyAgICAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAyMDQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAxOTgsIDk2LCAyMjEsIAorICAgIDIzMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDE5OCwgMjQ5LCAxMzMsIDI0MiwgMTk3LCAxNSwgNSwgMjM1LCAxOSwgCisgICAgMzAsIDI0MiwgMTIwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgOTQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM2LCA0MiwgCisgICAgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjM1LCAKKyAgICAxOSwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM0LCA5NSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzIsIAorICAgIDI0NywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzIsIDEwMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk2LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyNDYsIDg2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyNDIsIAorICAgIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk3LCA5NiwgMjE3LCAyMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzAsIAorICAgIDIzNSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzAsIDIzNiwgOTYsIDIyNywgMTkzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyOSwgCisgICAgMTEyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyNSwgMTExLCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIyMiwgMTQyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIwNiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjEsIAorICAgIDIzMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjAsIDEwNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjAsIDY1LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE5LCAyMjcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgCisgICAgMjE5LCAxODQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE4LCA1MiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTcsIDUxLCAxNSwgCisgICAgNSwgMjM1LCAxOSwgMzAsIDY5LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIAorICAgIDIxNCwgMjE5LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgMTkzLCAzMCwgMTkxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgCisgICAgMTI2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxMCwgNDQsIDE1LCA1LCAyMzUsIDE3LCAxNSwgNSwgMjM1LCAxOCwgMjQ5LCAKKyAgICAxMzMsIDIzNSwgMTcsIDE1LCA1LCAyMzUsIDEwLCAxNSwgNSwgMjM1LCA3LCAxNSwgNSwgMjM1LCA1LCAxNSwgNSwgMjM1LCAKKyAgICA0LCAxNSwgNSwgMjM1LCAyLCAxNSwgNSwgMjM1LCAzLCAxMTUsIDIzNSwgMiwgMTUsIDUsIDIzNCwgMjQ4LCAxNSwgNSwgCisgICAgMjM0LCAyNDksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIzNCwgMjQ0LCAxNSwgNSwgMjM0LCAyNDUsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDIzNCwgMjQ1LCAyNDksIDEzMywgMjM0LCAyNDQsIDE1LCA1LCAyMzQsIDI0MiwgMTUsIDUsIAorICAgIDIzNCwgMjQxLCAxNSwgNSwgMjM0LCAyMTMsIDE1LCA1LCAyMzQsIDIxNCwgMjMzLCAxMjQsIDMwLCAxMDQsIDExNSwgMjMzLCAKKyAgICAxMjQsIDMwLCA2OSwgMTUsIDUsIDIzNCwgMjE0LCAxMTUsIDIzNCwgMjE0LCAyMzMsIDEyNCwgMzAsIDEwNCwgMTE1LCAyMzMsIAorICAgIDEyNCwgMzAsIDY5LCAxNSwgNSwgMjM0LCAxNjMsIDE1LCA1LCAyMzQsIDk4LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDY5LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjM0LCAKKyAgICA5NSwgMTUsIDUsIDIzNCwgODcsIDE1LCA1LCAyMzQsIDc0LCAxNSwgNSwgMjM0LCA3MywgMTUsIDUsIDIzNCwgNzEsIDE1LCAKKyAgICA1LCAyMzQsIDcyLCAxMTUsIDIzNCwgNzEsIDE1LCA1LCAyMzMsIDIyMywgMTUsIDUsIDIzMywgMjI0LCAxMTUsIDI0MSwgCisgICAgMTg4LCAzMCwgMjUzLCAyMzgsIDIzMywgMjI0LCAxMTUsIDI0MSwgMTg4LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMzMsIAorICAgIDIyMSwgMTUsIDUsIDIzMywgMjE5LCAxNSwgNSwgMjMzLCAyMjAsIDIxNCwgMTIsIDE3LCAxNSwgNSwgMjMzLCAyMTgsIDE1LCAKKyAgICA1LCAyMzMsIDIxNSwgMTUsIDUsIDIzMywgMjE2LCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgMjE0LCAxNSwgNSwgMjMzLCAyMDIsIAorICAgIDE1LCA1LCAyMzMsIDIwMywgMjI2LCAxNjgsIDIzMywgMjAyLCAxNSwgNSwgMjMzLCAxOTcsIDE1LCA1LCAyMzMsIDE3OCwgCisgICAgMTUsIDUsIDIzMywgMTQxLCAxNSwgNSwgMjMzLCAxMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDYxLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAxMTYsIDk2LCAyNDgsIDIzMCwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTE2LCA5NiwgMjQzLCAKKyAgICAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDExNiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTQsIAorICAgIDE4NywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MywgMjQwLCAyMTAsIAorICAgIDQwLCAyMTYsIDI0MCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MiwgCisgICAgMTQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0OCwgMTc0LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDUsIDE1OCwgMTUsIDUsIAorICAgIDIzMywgMTI0LCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyNDIsIDExMCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQyLCAxMTEsIDk2LCAyNDIsIDExMCwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDIsIDM3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDEsIAorICAgIDE4OCwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMjM2LCAyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjM2LCAyNCwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjM2LCAyNCwgOTYsIDIzMiwgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMzQsIDg3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIDIyMSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAKKyAgICAyMTUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgMjE2LCA5NiwgMjQxLCAxODgsIDk2LCA2MSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMjMzLCAxMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMiwgMjAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAKKyAgICAyMzIsIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMyLCA5MSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMxLCA5NiwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzAsIDY2LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjIwLCA2NiwgOTYsIDIxOCwgNDQsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIyMCwgMTIsIDk2LCAyNDIsIDE5OCwgOTYsIDI0NSwgOTUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIAorICAgIDIyMCwgMTIsIDk2LCAyNDIsIDE5OCwgMjE2LCAyNDAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxOSwgMjI1LCAxNSwgNSwgCisgICAgMjMzLCAxMjQsIDMwLCAyMTksIDIyNiwgOTYsIDIxOSwgMjI1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTgsIDQ0LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMTcsIDg1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMTcsIDI0LCA5NiwgMTE2LCA5NiwgMjE4LCA4NSwgOTYsIDE5OCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgNjksIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDEwNCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA2OSwgCisgICAgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAKKyAgICAyMTksIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjMzLCAxMjQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjMzLCAxMjEsIDE1LCA1LCAyMzMsIDEyMiwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyMzMsIDEyMiwgMzAsIDIyMCwgNjYsIDk2LCAKKyAgICAyMTgsIDQ0LCAxNSwgNSwgMjMzLCAxMjIsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAxMjIsIDI0MiwgMTAyLCAxMTUsIDIzMywgCisgICAgMTIyLCAyNDIsIDEwMiwgMjIwLCA2NSwgMTUsIDUsIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIAorICAgIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAxMDgsIDE1LCA1LCAyMzMsIDEwOSwgMzAsIDIzMywgMjAyLCAxNSwgNSwgCisgICAgMjMzLCAxMDksIDMwLCAyMzMsIDIwMywgOTYsIDIyMiwgMTQyLCAxNSwgNSwgMjMyLCAyNDcsIDE1LCA1LCAyMzIsIDIzMiwgCisgICAgMTUsIDUsIDIzMiwgMjIyLCAxNSwgNSwgMjMyLCAyMDMsIDE1LCA1LCAyMzIsIDEwMywgMTUsIDUsIDIzMiwgMTA0LCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjU0LCAxODcsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNDUsIDgwLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKKyAgICAyNDUsIDgxLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyNDEsIDE4OCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzYsIDIzLCAxNSwgNSwgCisgICAgMjMyLCAxMDIsIDMwLCAyMzUsIDcsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNSwgNSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCisgICAgMjM1LCA2LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAorICAgIDIzMywgMTQyLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzMywgMTIzLCAxNSwgNSwgMjMyLCAxMDIsIAorICAgIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyMjcsIDI0MiwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjE5LCAxOTQsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIzMiwgMTAyLCAzMCwgMjE5LCAxNzYsIDk2LCAyNTEsIDEzMywgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjE1LCAxMTQsIDE1LCAKKyAgICA1LCAyMzIsIDEwMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIDEwMiwgMjQ5LCAxMzMsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDIyNiwgMTY4LCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgMTAyLCAyMTgsIDIzNSwgMTUsIDUsIDIzMiwgMTAyLCAyMjAsIAorICAgIDQ3LCAxNSwgNSwgMjMyLCAxMDAsIDE1LCA1LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMTE1LCAyMzIsIDk2LCAxNSwgNSwgCisgICAgMjMyLCA5NywgMjI2LCAxNjgsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMjAsIDQ3LCAxNSwgNSwgMjMyLCA5NCwgMTUsIAorICAgIDUsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCA5MCwgMTE1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCA5MCwgCisgICAgMTE1LCAyMzIsIDkwLCAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDE4NiwgMTUsIDUsIDIzMSwgMjQ0LCAzMCwgCisgICAgMjE3LCA3MywgMTUsIDUsIDIzMSwgMjQ0LCAyNDIsIDEwMSwgMTUsIDUsIDIzMSwgMjQzLCAxNSwgNSwgMjMxLCAyMTUsIDE1LCAKKyAgICA1LCAyMzEsIDE3MSwgMTUsIDUsIDIzMSwgMTUyLCAxNSwgNSwgMjMxLCAxNTEsIDE1LCA1LCAyMzEsIDk2LCAxNSwgNSwgCisgICAgMjMxLCA1MiwgMTUsIDUsIDIzMCwgMjM1LCAxNSwgNSwgMjMwLCAxOTMsIDE1LCA1LCAyMzAsIDEwNywgMTUsIDUsIDIzMCwgCisgICAgMTA4LCAxMTUsIDIzMCwgMTA3LCAxNSwgNSwgMjMwLCA5OCwgMTUsIDUsIDIzMCwgOTksIDI0MiwgMTAxLCAxNSwgNSwgMjMwLCAKKyAgICA4MywgMTUsIDUsIDIzMCwgNjksIDE1LCA1LCAyMzAsIDY2LCAxNSwgNSwgMjMwLCA2NywgMzAsIDYxLCAxNSwgNSwgMjMwLCAKKyAgICA2NywgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjMwLCA2NywgMzAsIDIxMCwgMTE2LCAxNSwgNSwgMjMwLCA2NywgMTE1LCAyMzAsIAorICAgIDY2LCAxNSwgNSwgMjMwLCA2NywgMTE1LCAyMzAsIDY3LCAzMCwgMTE2LCA5NiwgMTk4LCAxNSwgNSwgMjMwLCA2NywgMjQ5LCAKKyAgICAxMzMsIDIzMCwgNjYsIDE1LCA1LCAyMzAsIDY0LCAxNSwgNSwgMjMwLCA2NSwgMzAsIDYxLCAxNSwgNSwgMjMwLCA2NSwgMzAsIAorICAgIDExNiwgOTYsIDI0OCwgMTEsIDE1LCA1LCAyMzAsIDY1LCAzMCwgMjQ4LCAxMSwgMTUsIDUsIDIzMCwgNjUsIDI0MiwgMTAxLCAKKyAgICAxNSwgNSwgMTk4LCAxNSwgNSwgMjI5LCAyMzIsIDE1LCA1LCAyMjksIDIyMSwgMTUsIDUsIDIyOSwgMjIyLCAyMzUsIDE5OSwgCisgICAgMTUsIDUsIDIyOSwgMjIyLCAzMCwgMjE5LCAyMjgsIDIxNiwgMjQwLCAxNSwgNSwgMjI5LCAyMjIsIDIyNiwgMTY4LCAyMjksIAorICAgIDIyMSwgMTUsIDUsIDIyOSwgMjIwLCAxNSwgNSwgMjI5LCAyMTMsIDIyNywgMTg0LCAxNSwgNSwgMjI5LCAyMTIsIDE1LCA1LCAKKyAgICAyMjksIDIxMSwgMTUsIDUsIDIyOSwgMTEyLCAxNSwgNSwgMjI5LCAxMTMsIDMwLCA2MSwgMTUsIDUsIDIyOSwgMTEzLCAzMCwgCisgICAgMjE0LCAyMTksIDE1LCA1LCAyMjksIDExMywgMjIwLCA0NywgMTUsIDUsIDIyOCwgMjM4LCAxNSwgNSwgMjI4LCAyMzksIDMwLCAKKyAgICA3NiwgMTUsIDUsIDIyOCwgMjM3LCAxNSwgNSwgMjI4LCAyMDgsIDE1LCA1LCAyMjgsIDIwOSwgMzAsIDI0MywgMTEyLCAyMTYsIAorICAgIDI0MCwgMTUsIDUsIDIyOCwgMjA5LCAzMCwgMjQzLCAxMDQsIDk2LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMjgsIAorICAgIDIwNiwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI1MywgMjM5LCAxNSwgNSwgCisgICAgMjI4LCAyMDcsIDMwLCAyNTMsIDI0MCwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNDIsIDExMCwgMTUsIAorICAgIDUsIDIyOCwgMjA3LCAzMCwgMjMxLCA5NywgOTYsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgCisgICAgMjI5LCAxMTIsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY1LCAKKyAgICAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY2LCA5NiwgMTE2LCAyNTQsIDEzMSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgCisgICAgMjIwLCA2NiwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY2LCA5NiwgMjUzLCAyNDAsIDk2LCAKKyAgICAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAKKyAgICAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjgsIDE5NSwgMTUsIDUsIDIyNywgMjQyLCAxNSwgNSwgMjI3LCAyMTQsIDE1LCA1LCAKKyAgICAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjI3LCAxOTksIDIzMywgCisgICAgMTIyLCAzMCwgMjMxLCAxNTIsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjI3LCAKKyAgICAxOTksIDIzMywgMTIyLCAzMCwgMjIyLCAxMSwgMTE1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDEwLCAxNSwgNSwgCisgICAgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjcsIDE5OSwgMjE2LCAyNDAsIDE1LCA1LCAyMjcsIAorICAgIDE5OSwgMTE1LCAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAyNDksIDEzMywgMjI3LCAxOTgsIDE1LCA1LCAyMjcsIDE5OSwgCisgICAgMjQ5LCAxMzMsIDIyNywgMTk5LCAyMzMsIDEyMiwgMTE1LCAyMzMsIDEyMSwgMTUsIDUsIDIyNywgMTkzLCAxNSwgNSwgMjI3LCAKKyAgICAxOTQsIDI1NSwgMzMsIDMwLCAyNTMsIDIzNCwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjUyLCAxNCwgMTUsIDUsIAorICAgIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjQ2LCA4MiwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjQyLCAxMTAsIAorICAgIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgCisgICAgMzMsIDMwLCAyMzUsIDUsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjI3LCAxOTQsIAorICAgIDI1NSwgMzMsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjE5LCAxNzMsIDE1LCA1LCAKKyAgICAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI3LCAxOTQsIDIzNCwgNzIsIDMwLCAyNTIsIDE0LCAKKyAgICAxNSwgNSwgMjI3LCAxOTQsIDIzNCwgNzIsIDMwLCAyNTIsIDE1LCA2OSwgMTUsIDUsIDE5MSwgMTUsIDUsIDIyNiwgODQsIAorICAgIDE1LCA1LCAyMjYsIDUxLCAxNSwgNSwgMjI2LCAyNSwgMTUsIDUsIDIyNSwgMTY0LCAxNSwgNSwgMjI1LCAxMTEsIDE1LCA1LCAKKyAgICAyMjUsIDExMiwgMzAsIDYxLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTUsIDM0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTIsIAorICAgIDE0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTEsIDEzMywgMTUsIDUsIDIyNSwgMTEyLCAzMCwgNzYsIDE1LCA1LCAyMjUsIAorICAgIDExMiwgMzAsIDc0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNDAsIDEyMiwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgNjksIDE1LCAKKyAgICA1LCAyMjUsIDExMiwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI1LCAxMTIsIDI0OSwgMTMzLCAyMjUsIDExMSwgMTUsIDUsIAorICAgIDIyNSwgNTYsIDE1LCA1LCAyMjUsIDU3LCAzMCwgMjM0LCAyNDQsIDE1LCA1LCAyMjUsIDU3LCAzMCwgMjE0LCAyMTksIDE1LCAKKyAgICA1LCAyMjUsIDU3LCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMjUsIDU3LCAyMjYsIDE2OCwgMjI1LCA1NiwgMTUsIDUsIDIwNSwgCisgICAgMTUsIDUsIDIyMywgMTg1LCAxNSwgNSwgMjIzLCAzOCwgMTUsIDUsIDIyMiwgMTQyLCAxNSwgNSwgMjA2LCAxNSwgNSwgMjIyLCAKKyAgICAyNCwgMjI3LCAxODQsIDE1LCA1LCAyMjIsIDIzLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDYxLCAxNSwgNSwgMjIyLCAyNCwgMzAsIAorICAgIDI0NiwgODYsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjQ2LCA4NCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAxNjIsIDE1LCA1LCAKKyAgICAyMjIsIDI0LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjMyLCA4OSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMzAsIDIzNSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMjcsIDE5OCwgMTUsIAorICAgIDUsIDIyMiwgMjQsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjE3LCA5NCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDIyNSwgMTUsIAorICAgIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDE5NywgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDE1MCwgMTUsIDUsIDIyMiwgMjQsIAorICAgIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyMiwgMjQsIDExNSwgMjIyLCAyMywgMTUsIDUsIDIyMiwgMjQsIDI0MiwgMTAxLCAxNSwgCisgICAgNSwgMjIyLCAxMCwgMTUsIDUsIDIyMiwgMTEsIDIzMywgMTI0LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMjEsIDI0MSwgMTUsIAorICAgIDUsIDIyMSwgMjMzLCAxNSwgNSwgMjIwLCAxMDQsIDE1LCA1LCAyMjAsIDEwMiwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgNjEsIAorICAgIDE1LCA1LCAyMjAsIDEwMywgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAyNDIsIDE5NywgMTUsIDUsIDIyMCwgCisgICAgMTAzLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDIxOSwgMjI1LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAKKyAgICAyMTUsIDk5LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCA2OSwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMTA0LCA5NiwgNjEsIDE1LCAKKyAgICA1LCAyMjAsIDEwMSwgMTUsIDUsIDIyMCwgOTksIDE1LCA1LCAyMjAsIDgwLCAxNSwgNSwgMjIwLCA2NSwgMTUsIDUsIDIyMCwgCisgICAgNjYsIDI0MCwgMjI5LCAxNSwgNSwgMjIwLCA2NiwgMTE1LCAyMjAsIDY2LCAyNDMsIDEzNCwgMTE1LCAyNDMsIDEzNCwgMjQzLCAKKyAgICAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDY2LCAxMTUsIDIyMCwgNjYsIDIxNywgOTUsIDExNSwgMjE3LCA5NSwgCisgICAgMjQzLCAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDU4LCAxNSwgNSwgMjIwLCA1MywgMTUsIDUsIDIyMCwgNTAsIAorICAgIDE1LCA1LCAyMjAsIDQ5LCAxNSwgNSwgMjIwLCA0NiwgMTUsIDUsIDIyMCwgMzIsIDE1LCA1LCAyMjAsIDMzLCAzMCwgNjEsIAorICAgIDE1LCA1LCAyMjAsIDMzLCAzMCwgMjM2LCAyMywgMTUsIDUsIDIyMCwgMjYsIDE1LCA1LCAyMjAsIDI3LCAzMCwgNjEsIDE1LCAKKyAgICA1LCAyMjAsIDI3LCAzMCwgMjUyLCAxNjksIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjUxLCAxMTcsIDE1LCA1LCAyMjAsIDI3LCAKKyAgICAzMCwgMjQ3LCAyMTQsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjM2LCA0MiwgCisgICAgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzMsIDE5NywgMTUsIAorICAgIDUsIDIyMCwgMjcsIDMwLCAyMzIsIDkxLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzMCwgOTgsIDE1LCA1LCAyMjAsIDI3LCAzMCwgCisgICAgMjIyLCAxMCwgMTUsIDUsIDIyMCwgMjAsIDE1LCA1LCAyMjAsIDE1LCAxNSwgNSwgMjIwLCAxNiwgMjE2LCAyNDAsIDE1LCA1LCAKKyAgICAyMjAsIDE2LCAxMTUsIDIyMCwgMTYsIDI1MSwgMTA3LCAxMTUsIDI1MSwgMTA2LCAxNSwgNSwgMjIwLCAxMSwgMTUsIDUsIAorICAgIDIxOSwgMjI3LCAxNSwgNSwgMjE5LCAyMjgsIDExNSwgMjM1LCAyMDAsIDIxOSwgMjI3LCAxNSwgNSwgMjE5LCAyMjUsIDE1LCAKKyAgICA1LCAyMTksIDIyNCwgMTUsIDUsIDIxOSwgMTkzLCAxNSwgNSwgMjE5LCAxOTQsIDI0MiwgMTAxLCAxNSwgNSwgMjE5LCAxODQsIAorICAgIDE1LCA1LCAyMTksIDE4MiwgMTUsIDUsIDIxOSwgMTgzLCAxMTUsIDIxOSwgMTgzLCAyMTksIDIyNSwgMTUsIDUsIDIxOSwgCisgICAgMTc1LCAxNSwgNSwgMjE5LCAxNzMsIDE1LCA1LCAyMTgsIDg0LCAxNSwgNSwgMjE4LCA4NSwgMTE1LCAyMTgsIDg0LCAxNSwgCisgICAgNSwgMjE4LCA1NSwgMTUsIDUsIDIxOCwgNTQsIDE1LCA1LCAyMTgsIDUyLCAxNSwgNSwgMjE4LCA0NCwgMTUsIDUsIDIxOCwgCisgICAgNDMsIDE1LCA1LCAyMTgsIDE4LCAxNSwgNSwgMjE4LCAxNywgMTUsIDUsIDIxNywgMTA2LCAxNSwgNSwgMjE3LCAxMDcsIAorICAgIDI1MywgMjI0LCAxNSwgNSwgMjE3LCAxMDcsIDMwLCAyNDEsIDE4NywgMTUsIDUsIDIxNywgMTA3LCAzMCwgMjMwLCAyMzUsIAorICAgIDE1LCA1LCAyMTcsIDEwNywgMjQyLCAxMDEsIDE1LCA1LCAyMTcsIDk0LCAxNSwgNSwgMjE3LCA5NSwgMTE1LCAyMTcsIDk1LCAKKyAgICAyMjgsIDIzOSwgMTE1LCAyMjgsIDIzOSwgMjQ3LCAxOTYsIDExNSwgMjQ3LCAxOTUsIDE1LCA1LCAyMTcsIDk1LCAyMTgsIAorICAgIDIzNSwgMTUsIDUsIDIxNywgODUsIDE1LCA1LCAxMjksIDMwLCAyNTIsIDE0LCAxNSwgNSwgMTI5LCAzMCwgMjQyLCAxMTAsIAorICAgIDE1LCA1LCAxMjksIDMwLCAyMjAsIDY1LCAxNSwgNSwgMTI5LCAzMCwgMjE5LCAyMjcsIDE1LCA1LCAxMjksIDMwLCAyMTUsIAorICAgIDExNCwgMTUsIDUsIDEyOSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjE3LCA3MywgMTUsIDUsIDIxNywgNTEsIDE1LCA1LCAKKyAgICAyMTcsIDIzLCAxNSwgNSwgMjE3LCAyNCwgMjQyLCAxMDEsIDE1LCA1LCAyMTYsIDExOCwgMTUsIDUsIDIxNiwgMTE5LCAyMTYsIAorICAgIDI0MCwgMTUsIDUsIDIxNiwgOTEsIDE1LCA1LCAyMTYsIDczLCAxNSwgNSwgMjE2LCA3NCwgMzAsIDIxNywgNzMsIDE1LCA1LCAKKyAgICAyMTYsIDc0LCAxMTUsIDIxNiwgNzMsIDE1LCA1LCAyMTYsIDc0LCAxMTUsIDIxNiwgNzQsIDI0MywgMTM0LCAxMTUsIDI0MywgCisgICAgMTM0LCAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIxNSwgMTE5LCAxNSwgNSwgMjE1LCAxMTQsIDE1LCA1LCAKKyAgICAyMTUsIDExMiwgMTUsIDUsIDIxNSwgMTA5LCAxNSwgNSwgMjE1LCA5OSwgMTUsIDUsIDIxNSwgMTAwLCAxMTUsIDIxNSwgCisgICAgMTAwLCAyMTAsIDExNywgMTE1LCAyMTAsIDExNiwgMTUsIDUsIDY5LCAxNSwgNSwgMTA0LCAyNDIsIDExMCwgMTUsIDUsIAorICAgIDEwNCwgMTA0LCA2OSwgMTUsIDUsIDEwNCwgMTE1LCAxMDQsIDIyNiwgOTQsIDExNSwgMjI2LCA5NCwgMjQzLCAxMDQsIDExNSwgCisgICAgMjQzLCAxMDMsIDE1LCA1LCAxMDQsIDExNSwgMTA0LCAyMTgsIDE5LCAxMTUsIDIxOCwgMTgsIDE1LCA1LCAxMDQsIDExNSwgCisgICAgMTA0LCAxMDQsIDIyMywgNTIsIDExNSwgMTA0LCAyMjMsIDUxLCAxNSwgNSwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDIyNSwgCisgICAgMTUsIDUsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAyMjAsIDIzMywgMTk3LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjMwLCAyMzUsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgCisgICAgOTYsIDY5LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCAxMDQsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAKKyAgICAyMjAsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDcsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0OCwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjE0LCAyMTUsIDE1LCA1LCAyMTQsIDE5NywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMzLCAKKyAgICAxMjMsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMSwgOTcsIDk2LCAyNDgsIDIyOSwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgCisgICAgMjIwLCAxMDIsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDY5LCAxNSwgNSwgMjE0LCAxOTYsIDE1LCA1LCAyMTQsIDE5MiwgMTUsIAorICAgIDUsIDIxNCwgMTkzLCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDE5MSwgMTUsIDUsIDIxNCwgMTkwLCAxNSwgCisgICAgNSwgMjE0LCAxOTEsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjQ5LCAxMzMsIDIxNCwgCisgICAgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIDIyMCwgNDcsIDE1LCA1LCAyMTQsIDE0OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTE2LCAKKyAgICA5NiwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTYsIDk2LCAxOTgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDI1NCwgCisgICAgMTg3LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjE0LCAKKyAgICAxNDksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTIsIDE0LCAxNSwgNSwgMjE0LCAxNDcsIDE1LCA1LCAyMTQsIDE0NCwgCisgICAgMTUsIDUsIDIxNCwgMTQzLCAxNSwgNSwgMjE0LCAxMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDYxLCAxNSwgNSwgMjE0LCAKKyAgICAxNDAsIDMwLCAyNTMsIDIzNCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTMwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDYsIAorICAgIDc2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAKKyAgICAyMTQsIDE0MCwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAKKyAgICAyMTQsIDE0MCwgMzAsIDI0MiwgMTIwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAorICAgIDIzNiwgNDIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNSwgMTcyLCAxNSwgCisgICAgNSwgMjE0LCAxNDAsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzIsIDg5LCAxNSwgNSwgMjE0LCAxNDAsIAorICAgIDMwLCAyMzAsIDE5MywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTkxLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMjAsIDY1LCAxNSwgCisgICAgNSwgMjE0LCAxNDAsIDMwLCAyMTksIDE4MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE1LCAxMTksIDE1LCA1LCAyMTQsIAorICAgIDE0MCwgMzAsIDEwNCwgOTYsIDI0MiwgMTEwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIxNCwgCisgICAgMTQwLCAzMCwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM4LCAzMCwgNjksIDE1LCA1LCAyMTQsIAorICAgIDEyNiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgNjEsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMjIzLCAxNSwgNSwgMjE0LCAKKyAgICAxMjcsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIxNCwgMTIyLCAxNSwgNSwgCisgICAgMjE0LCAxMjUsIDE1LCA1LCAyMTQsIDEyMywgMTUsIDUsIDIxNCwgMTE5LCAxNSwgNSwgMjE0LCAxMDgsIDE1LCA1LCAyMTQsIAorICAgIDEwOSwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjE0LCAxMDcsIDE1LCA1LCAyMTAsIDExNiwgMTUsIDUsIDIxMCwgMTE3LCAKKyAgICAyMTYsIDI0MCwgMTUsIDUsIDIxMCwgMTE3LCA5MiwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjEwLCAxMTMsIDE1LCA1LCAyMTAsIAorICAgIDEwNiwgMTUsIDUsIDIxMCwgOTMsIDE1LCA1LCAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0NSwgMTE1LCAyMTAsIDQ0LCAxNSwgNSwgCisgICAgMjEwLCA0MywgMTUsIDUsIDIxMCwgNDEsIDE1LCA1LCAyMTAsIDQyLCAyMzUsIDksIDIxNiwgMjQwLCAxNSwgNSwgMjEwLCAKKyAgICAzNiwgMTUsIDUsIDIxMCwgMjgsIDE1LCA1LCAyMTAsIDEzLCAxNSwgNSwgMjEwLCAxMSwgMTUsIDUsIDIxMCwgMTIsIDMwLCAKKyAgICA2MSwgMTUsIDUsIDIxMCwgMTAsIDE1LCA1LCAyMTAsIDksIDE1LCAxMzIsIDUsIDExMywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTMsIAorICAgIDIzOSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjUzLCAyMzksIDE1LCAKKyAgICAxMzIsIDUsIDI0NSwgMjAxLCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQ3LCAKKyAgICAxOTUsIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDI0NywgMTk1LCAxNSwgCisgICAgMTMyLCA1LCAyNDUsIDIwMSwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgCisgICAgMjQ0LCAxOSwgNjksIDE1LCAxMzIsIDUsIDI0NCwgODksIDY5LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgNjksIDE1LCAxMzIsIAorICAgIDUsIDIyMCwgMTI0LCA2OSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDY5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgNjksIDE1LCAKKyAgICAxMzIsIDUsIDEyMywgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgNDUsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0MywgNDUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0MywgNDUsIDE1LCAxMzIsIDUsIAorICAgIDIxOSwgMTI3LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIAorICAgIDI0MywgNDUsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMjMsIDI0MywgNDIsIDE1LCAKKyAgICAxMzIsIDUsIDExMywgMjQzLCA0MiwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDMsIAorICAgIDQyLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAxMTMsIDIyMCwgODAsIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDgxLCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgCisgICAgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDIyMCwgODAsIDE1LCAKKyAgICAxMzIsIDUsIDIyMCwgMTI0LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgCisgICAgMjI4LCAyMDUsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDEyMywgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMTEzLCAyMjAsIDc1LCAKKyAgICAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NiwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIAorICAgIDUsIDI0NCwgMTksIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDIyMCwgODEsIAorICAgIDMwLCAyNDMsIDEyNiwgOTYsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjAsIDgxLCAzMCwgMjQzLCAxMjYsIDk2LCAyMzAsIAorICAgIDE5MywgMTUsIDEzMiwgNSwgMTIzLCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTEzLCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDEwNCwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgCisgICAgMTksIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTM0LCAyMTQsIDEyLCAKKyAgICAyNDQsIDI4LCAyNDUsIDgyLCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIDI0NCwgMjgsIDI0NSwgNzksIDE1LCAxMzIsIDUsIAorICAgIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjIzLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIAorICAgIDI4LCAyMzIsIDIyMSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjQsIDYxLCAxNSwgCisgICAgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyNCwgMjUzLCAxNjYsIDE1LCAxMzIsIDUsIDIxOSwgCisgICAgMTI3LCAyMTQsIDEyLCAyNDQsIDI4LCAyNTMsIDIzNiwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIAorICAgIDIzNiwgMTUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDE3LCA2MSwgMTUsIDEzMiwgNSwgCisgICAgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMTcsIDI1MywgMTY2LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjE0LCAKKyAgICAxMiwgMjQ0LCAyOCwgMjE0LCAxMjEsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMTQsIDEyLCAyNDQsIDI4LCAyMTQsIDEyMCwgCisgICAgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzEsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAKKyAgICAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDMwLCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAKKyAgICAyOSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzIsIDYxLCAxNSwgMTMyLCA1LCAxMTMsIAorICAgIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMTM0LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDI0NCwgCisgICAgMTksIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCAKKyAgICA1LCAyMTksIDEyNywgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAxMjMsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAKKyAgICAxMTMsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAxMzQsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTIsIDE1OCwgCisgICAgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUyLCAxNTksIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTIsIAorICAgIDE1OCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUyLCAxNTksIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyMjgsIDIxNSwgCisgICAgMTUsIDEzMiwgNSwgMjI4LCAyMTYsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCA3OCwgMTUsIDEzMiwgNSwgMTEzLCAyNDUsIDc4LCAKKyAgICAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTcwLCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2OCwgMjQ3LCAxOTUsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgODksIDIxOSwgMTE2LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMTIzLCAyMTYsIDE3MCwgMjE0LCAKKyAgICAxMiwgMjQ0LCAyOCwgNjEsIDE1LCAxMzIsIDUsIDExMywgMjE2LCAxNjgsIDIxNCwgMTIsIDI0NCwgMjgsIDYxLCAxNSwgCisgICAgMTMyLCA1LCAxMjMsIDI0NSwgMTk3LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMTIzLCAyMjQsIDI1LCAyNTMsIDIzOSwgMTUsIAorICAgIDEzMiwgNSwgNTUsIDI1MywgMjI3LCAxMjMsIDIxOSwgMTE3LCAxNSwgMTMyLCA1LCA1NSwgMjUzLCAyMjcsIDEyMywgMjI0LCAKKyAgICAyNCwgMTUsIDIyNCwgMTQ0LCA1LCA1NSwgMjUzLCAyMjcsIDIxMSwgMjA5LCAyNDcsIDE4MCwgMTUsIDIyNCwgMTQ0LCA1LCAKKyAgICA2NywgMjQ5LCAyMzQsIDE1LCAyMjQsIDE0NCwgNSwgMjQ4LCA3LCAyNDksIDIzNCwgMTUsIDIyNCwgMTQ0LCA1LCAyNDgsIDcsIAorICAgIDIxNSwgMjIyLCAxMiwgMTMsIDI1NSwgMTY0LCAxMiwgMTMsIDI1NSwgMTYzLCAxMiwgMTMsIDI1NSwgMTYyLCAxMiwgMTMsIAorICAgIDI1NSwgMTYxLCAxMiwgMTMsIDI1NSwgMTYwLCAxMiwgMTMsIDI1NSwgMTU5LCAxMiwgMTMsIDI1NSwgMTU4LCAxMiwgMTMsIAorICAgIDI1NSwgMTU3LCAxMiwgMTMsIDI1NSwgMTU2LCAxMiwgMTMsIDI1NSwgMTU1LCAxMiwgMTMsIDI1NSwgMTU0LCAxMiwgMTMsIAorICAgIDI1NSwgMTUzLCAxMiwgMTMsIDI1NSwgMTUyLCAxMiwgMTMsIDI1NSwgMTUxLCAxMiwgMTMsIDI1NSwgMTUwLCAxMiwgMTMsIAorICAgIDI1NSwgMTQ5LCAxMiwgMTMsIDI1NSwgMTQ4LCAxMiwgMTMsIDI1NSwgMTQ3LCAxMiwgMTMsIDI1NSwgMTQ2LCAxMiwgMTMsIAorICAgIDI1NSwgMTQ1LCAxMiwgMTMsIDI1NSwgMTQ0LCAxMiwgMTMsIDI1NSwgMTQzLCAxMiwgMTMsIDI1NSwgMTQyLCAxMiwgMTMsIAorICAgIDI1NSwgMTQxLCAxMiwgMTMsIDI1NSwgMTQwLCAxMiwgMTMsIDI1NSwgMTM5LCAxMiwgMTMsIDI1NSwgMTM4LCAxMiwgMTMsIAorICAgIDI1NSwgMTM3LCAxMiwgMTMsIDI1NSwgMTM2LCAxMiwgMTMsIDI1NSwgMTM1LCAxMiwgMTMsIDI1NSwgMTM0LCAxMiwgMTMsIAorICAgIDI1NSwgMTMzLCAxMiwgMTMsIDI1NSwgMTMyLCAxMiwgMTMsIDI1NSwgMTMxLCAxMiwgMTMsIDI1NSwgMTMwLCAxMiwgMTMsIAorICAgIDI1NSwgMTI5LCAxMiwgMTMsIDI1NSwgMTI4LCAxMiwgMTMsIDI1NSwgMTI3LCAxMiwgMTMsIDI1NSwgMTI2LCAxMiwgMTMsIAorICAgIDI1NSwgMTI1LCAxMiwgMTMsIDI1NSwgMTI0LCAxMiwgMTMsIDI1NSwgMTIzLCAxMiwgMTMsIDI1NSwgMTIyLCAxMiwgMTMsIAorICAgIDI1NSwgMTIxLCAxMiwgMTMsIDI1NSwgMTIwLCAxMiwgMTMsIDI1NSwgMTE5LCAxMiwgMTMsIDI1NSwgMTE4LCAxMiwgMTMsIAorICAgIDI1NSwgMTE3LCAxMiwgMTMsIDI1NSwgMTE2LCAxMiwgMTMsIDI1NSwgMTE1LCAxMiwgMTMsIDI1NSwgMTE0LCAxMiwgMTMsIAorICAgIDI1NSwgMTEzLCAxMiwgMTMsIDI1NSwgMTEyLCAxMiwgMTMsIDI1NSwgMTExLCAxMiwgMTMsIDI1NSwgMTEwLCAxMiwgMTMsIAorICAgIDI1NSwgMTA5LCAxMiwgMTMsIDI1NSwgMTA4LCAxMiwgMTMsIDI1NSwgMTA3LCAxMiwgMTMsIDI1NSwgMTA2LCAxMiwgMTMsIAorICAgIDI1NSwgMTA1LCAxMiwgMTMsIDI1NSwgMTA0LCAxMiwgMTMsIDI1NSwgMTAzLCAxMiwgMTMsIDI1NSwgMTAyLCAxMiwgMTMsIAorICAgIDI1NSwgMTAxLCAxMiwgMTMsIDI1NSwgMTAwLCAxMiwgMTMsIDI1NSwgOTksIDEyLCAxMywgMjU1LCA5OCwgMTIsIDEzLCAKKyAgICAyNTUsIDk3LCAxMiwgMTMsIDI1NSwgOTYsIDEyLCAxMywgMjU1LCA5NSwgMTIsIDEzLCAyNTUsIDk0LCAxMiwgMTMsIDI1NSwgCisgICAgOTMsIDEyLCAxMywgMjU1LCA5MiwgMTIsIDEzLCAyNTUsIDkxLCAxMiwgMTMsIDI1NSwgOTAsIDEyLCAxMywgMjU1LCA4OSwgCisgICAgMTIsIDEzLCAyNTUsIDg4LCAxMiwgMTMsIDI1NSwgODcsIDEyLCAxMywgMjU1LCA4NiwgMTIsIDEzLCAyNTUsIDg1LCAxMiwgCisgICAgMTMsIDI1MywgMTY0LCAxMiwgMTMsIDI1MywgMTYyLCAxMiwgMTMsIDI1MywgMTYwLCAxMiwgMTMsIDI1MywgMTU4LCAxMiwgCisgICAgMTMsIDI1MywgMTU2LCAxMiwgMTMsIDI1MywgMTU1LCAxMiwgMTMsIDI1MywgMTUzLCAxMiwgMTMsIDI1MywgMTUxLCAxMiwgCisgICAgMTMsIDI1MywgMTQ5LCAxMiwgMTMsIDI1MywgMTQ3LCAxMiwgMTMsIDI1MSwgNzAsIDEyLCAxMywgMjUxLCA2OSwgMTIsIDEzLCAKKyAgICAyNTEsIDY4LCAxMiwgMTMsIDI1MSwgNjcsIDEyLCAxMywgMjUxLCA2NiwgMTIsIDEzLCAyNTEsIDY1LCAxMiwgMTMsIDI1MSwgCisgICAgNjQsIDEyLCAxMywgMjUxLCA2MywgMTIsIDEzLCAyNTEsIDYyLCAxMiwgMTMsIDI1MSwgNjEsIDEyLCAxMywgMjUxLCA2MCwgCisgICAgMTIsIDEzLCAyNTEsIDU5LCAxMiwgMTMsIDI1MSwgNTgsIDEyLCAxMywgMjUxLCA1NywgMTIsIDEzLCAyNTEsIDU2LCAxMiwgCisgICAgMTMsIDI1MSwgNTUsIDEyLCAxMywgMjUxLCA1NCwgMTIsIDEzLCAyNTEsIDUzLCAxMiwgMTMsIDI1MSwgNTIsIDEyLCAxMywgCisgICAgMjUxLCA1MSwgMTIsIDEzLCAyNTEsIDUwLCAxMiwgMTMsIDI1MSwgNDksIDEyLCAxMywgMjUxLCA0OCwgMTIsIDEzLCAyNTEsIAorICAgIDQ3LCAxMiwgMTMsIDI1MSwgNDYsIDEyLCAxMywgMjUxLCA0NSwgMTIsIDEzLCAyNTEsIDQ0LCAxMiwgMTMsIDI1MSwgNDMsIAorICAgIDEyLCAxMywgMjQ5LCA2NywgMTIsIDEzLCAyNDksIDY2LCAxMiwgMTMsIDI0OSwgNjUsIDEyLCAxMywgMjQ5LCA2NCwgMTIsIAorICAgIDEzLCAyNDksIDYzLCAxMiwgMTMsIDI0OSwgNjIsIDEyLCAxMywgMjQ5LCA2MSwgMTIsIDEzLCAyNDksIDYwLCAxMiwgMTMsIAorICAgIDI0OSwgNTksIDEyLCAxMywgMjQ5LCA1OCwgMTIsIDEzLCAyNDksIDU3LCAxMiwgMTMsIDI0OSwgNTYsIDEyLCAxMywgMjQ5LCAKKyAgICA1NSwgMTIsIDEzLCAyNDksIDU0LCAxMiwgMTMsIDI0OSwgNTMsIDEyLCAxMywgMjQ5LCA1MiwgMTIsIDEzLCAyNDksIDUxLCAKKyAgICAxMiwgMTMsIDI0OSwgNTAsIDEyLCAxMywgMjQ5LCA0OSwgMTIsIDEzLCAyNDksIDQ4LCAxMiwgMTMsIDI0OSwgNDcsIDEyLCAKKyAgICAxMywgMjQ5LCA0NiwgMTIsIDEzLCAyNDksIDQ1LCAxMiwgMTMsIDI0OSwgNDQsIDEyLCAxMywgMjQ5LCA0MywgMTIsIDEzLCAKKyAgICAyNDksIDQyLCAxMiwgMTMsIDI0OSwgNDEsIDEyLCAxMywgMjQ5LCA0MCwgMTIsIDEzLCAyNDksIDM5LCAxMiwgMTMsIDI0OSwgCisgICAgMzgsIDEyLCAxMywgMjQ5LCAzNywgMTIsIDEzLCAyNDksIDM2LCAxMiwgMTMsIDI0OSwgMzUsIDEyLCAxMywgMjQ5LCAzNCwgCisgICAgMTIsIDEzLCAyNDksIDMzLCAxMiwgMTMsIDI0OSwgMzIsIDEyLCAxMywgMjQ5LCAzMSwgMTIsIDEzLCAyNDksIDMwLCAxMiwgCisgICAgMTMsIDI0OSwgMjksIDEyLCAxMywgMjQ5LCAyOCwgMTIsIDEzLCAyNDksIDI3LCAxMiwgMTMsIDI0OSwgMjYsIDEyLCAxMywgCisgICAgMjQ5LCAyNSwgMTIsIDEzLCAyNDksIDI0LCAxMiwgMTMsIDI0OSwgMjMsIDEyLCAxMywgMjQ5LCAyMiwgMTIsIDEzLCAyNDksIAorICAgIDIxLCAxMiwgMTMsIDI0OSwgMjAsIDEyLCAxMywgMjQ5LCAxOSwgMTIsIDEzLCAyNDksIDE4LCAxMiwgMTMsIDI0OSwgMTcsIAorICAgIDEyLCAxMywgMjQ5LCAxNiwgMTIsIDEzLCAyNDksIDE1LCAxMiwgMTMsIDI0OSwgMTQsIDEyLCAxMywgMjQ5LCAxMywgMTIsIAorICAgIDEzLCAyNDksIDEyLCAxMiwgMTMsIDI0OSwgMTEsIDEyLCAxMywgMjQ5LCAxMCwgMTIsIDEzLCAyNDksIDksIDEyLCAxMywgCisgICAgMjQ5LCA4LCAxMiwgMTMsIDI0OSwgNywgMTIsIDEzLCAyNDksIDYsIDEyLCAxMywgMjQ5LCA1LCAxMiwgMTMsIDI0OSwgNCwgCisgICAgMTIsIDEzLCAyNDksIDMsIDEyLCAxMywgMjQ5LCAyLCAxMiwgMTMsIDI0OSwgMSwgMTIsIDEzLCAyNDksIDAsIDEyLCAxMywgCisgICAgMjQ4LCAyNTUsIDEyLCAxMywgMjQ4LCAyNTQsIDEyLCAxMywgMjQ4LCAyNTMsIDEyLCAxMywgMjQ4LCAyNTIsIDEyLCAxMywgCisgICAgMjQ4LCAyNTEsIDEyLCAxMywgMjQ4LCAyNTAsIDEyLCAxMywgMjQ4LCAyNDksIDEyLCAxMywgMjQ4LCAyNDgsIDEyLCAxMywgCisgICAgMjQ4LCAyNDcsIDEyLCAxMywgMjQ4LCAyNDYsIDEyLCAxMywgMjQ4LCAyNDUsIDEyLCAxMywgMjQ4LCAyNDQsIDEyLCAxMywgCisgICAgMjQ4LCAyNDMsIDEyLCAxMywgMjQ4LCAyNDIsIDEyLCAxMywgMjQ4LCAyNDEsIDEyLCAxMywgMjQ4LCAyNDAsIDEyLCAxMywgCisgICAgMjQ4LCAyMzksIDEyLCAxMywgMjQ4LCAyMzgsIDEyLCAxMywgMjQ4LCAyMzcsIDEyLCAxMywgMjQ4LCAyMzYsIDEyLCAxMywgCisgICAgMjQ4LCAyMzUsIDEyLCAxMywgMjQ4LCAyMzQsIDEyLCAxMywgMjQ4LCAyMzMsIDEyLCAxMywgMjQ4LCAyMzIsIDEyLCAxMywgCisgICAgMjQ2LCAzMSwgMTIsIDEzLCAyNDYsIDMwLCAxMiwgMTMsIDI0NiwgMjksIDEyLCAxMywgMjQ2LCAyOCwgMTIsIDEzLCAyNDYsIAorICAgIDI3LCAxMiwgMTMsIDI0NiwgMjYsIDEyLCAxMywgMjQ2LCAyNSwgMTIsIDEzLCAyNDYsIDI0LCAxMiwgMTMsIDI0NiwgMjMsIAorICAgIDEyLCAxMywgMjQ2LCAyMiwgMTIsIDEzLCAyNDYsIDIxLCAxMiwgMTMsIDI0NiwgMjAsIDEyLCAxMywgMjQ2LCAxOSwgMTIsIAorICAgIDEzLCAyNDYsIDE4LCAxMiwgMTMsIDI0NiwgMTcsIDEyLCAxMywgMjQ2LCAxNiwgMTIsIDEzLCAyNDYsIDE1LCAxMiwgMTMsIAorICAgIDI0NiwgMTQsIDEyLCAxMywgMjQ2LCAxMywgMTIsIDEzLCAyNDYsIDEyLCAxMiwgMTMsIDI0NiwgMTEsIDEyLCAxMywgMjQ2LCAKKyAgICAxMCwgMTIsIDEzLCAyNDYsIDksIDEyLCAxMywgMjQ2LCA4LCAxMiwgMTMsIDI0NiwgNywgMTIsIDEzLCAyNDYsIDYsIDEyLCAKKyAgICAxMywgMjQ2LCA1LCAxMiwgMTMsIDI0NiwgNCwgMTIsIDEzLCAyNDYsIDMsIDEyLCAxMywgMjQ2LCAyLCAxMiwgMTMsIDI0NiwgCisgICAgMSwgMTIsIDEzLCAyNDYsIDAsIDEyLCAxMywgMjQ1LCAyNTUsIDEyLCAxMywgMjQ1LCAyNTQsIDEyLCAxMywgMjQ1LCAyNTMsIAorICAgIDEyLCAxMywgMjQ1LCAyNTIsIDEyLCAxMywgMjQ1LCAyNTEsIDEyLCAxMywgMjQ1LCAyNTAsIDEyLCAxMywgMjQ1LCAyNDksIAorICAgIDEyLCAxMywgMjQ1LCAyNDgsIDEyLCAxMywgMjQ1LCAyNDcsIDEyLCAxMywgMjQ1LCAyNDYsIDEyLCAxMywgMjQ1LCAyNDUsIAorICAgIDEyLCAxMywgMjQ1LCAyNDQsIDEyLCAxMywgMjQ1LCAxMywgMTIsIDEzLCAyNDUsIDEyLCAxMiwgMTMsIDI0NSwgMTEsIDEyLCAKKyAgICAxMywgMjQ1LCAxMCwgMTIsIDEzLCAyNDUsIDksIDEyLCAxMywgMjQ1LCA4LCAxMiwgMTMsIDI0NSwgNywgMTIsIDEzLCAyNDUsIAorICAgIDYsIDEyLCAxMywgMjQ1LCA1LCAxMiwgMTMsIDI0NSwgNCwgMTIsIDEzLCAyNDUsIDMsIDEyLCAxMywgMjQ1LCAyLCAxMiwgCisgICAgMTMsIDI0NSwgMSwgMTIsIDEzLCAyNDUsIDAsIDEyLCAxMywgMjQ0LCAyNTUsIDEyLCAxMywgMjQ0LCAyNTQsIDEyLCAxMywgCisgICAgMjQ0LCAyNTMsIDEyLCAxMywgMjQ0LCAyNTIsIDEyLCAxMywgMjQ0LCAyNTEsIDEyLCAxMywgMjQ0LCAyNTAsIDEyLCAxMywgCisgICAgMjQ0LCAyNDksIDEyLCAxMywgMjQ0LCAyNDgsIDEyLCAxMywgMjQ0LCAyNDcsIDEyLCAxMywgMjQ0LCAyNDYsIDEyLCAxMywgCisgICAgMjQ0LCAyNDUsIDEyLCAxMywgMjQ0LCAyNDQsIDEyLCAxMywgMjQ0LCAyNDMsIDEyLCAxMywgMjQ0LCAyNDIsIDEyLCAxMywgCisgICAgMjQ0LCAyNDEsIDEyLCAxMywgMjQ0LCAyNDAsIDEyLCAxMywgMjQ0LCAyMzksIDEyLCAxMywgMjQ0LCAyMzgsIDEyLCAxMywgCisgICAgMjQ0LCAyMzcsIDEyLCAxMywgMjQ0LCAyMzYsIDEyLCAxMywgMjQ0LCAyMzUsIDEyLCAxMywgMjQ0LCAyMzQsIDEyLCAxMywgCisgICAgMjQ0LCAyMzMsIDEyLCAxMywgMjQ0LCAyMzIsIDEyLCAxMywgMjQ0LCAyMzEsIDEyLCAxMywgMjQ0LCAyMzAsIDEyLCAxMywgCisgICAgMjQ0LCAyMjksIDEyLCAxMywgMjQ0LCAyMjgsIDEyLCAxMywgMjQ0LCAyMjcsIDEyLCAxMywgMjQ0LCAyMjYsIDEyLCAxMywgCisgICAgMjQ0LCAyMjUsIDEyLCAxMywgMjQ0LCAyMjQsIDEyLCAxMywgMjQ0LCAyMjMsIDEyLCAxMywgMjQ0LCAyMjIsIDEyLCAxMywgCisgICAgMjQ0LCAyMjEsIDEyLCAxMywgMjQ0LCAyMjAsIDEyLCAxMywgMjQ0LCAyMTksIDEyLCAxMywgMjQ0LCAyMTgsIDEyLCAxMywgCisgICAgMjQ0LCAyMTcsIDEyLCAxMywgMjQ0LCAyMTYsIDEyLCAxMywgMjQ0LCAyMTUsIDEyLCAxMywgMjQ0LCAyMTQsIDEyLCAxMywgCisgICAgMjQ0LCAyMTMsIDEyLCAxMywgMjQ0LCAyMTIsIDEyLCAxMywgMjQ0LCAyMTEsIDEyLCAxMywgMjQ0LCAyMTAsIDEyLCAxMywgCisgICAgMjQ0LCAyMDksIDEyLCAxMywgMjQ0LCAyMDgsIDEyLCAxMywgMjQ0LCAyMDcsIDEyLCAxMywgMjQ0LCAyMDYsIDEyLCAxMywgCisgICAgMjQ0LCAyMDUsIDEyLCAxMywgMjQzLCAyMDgsIDEyLCAxMywgMjQzLCAyMDcsIDEyLCAxMywgMjQzLCAyMDYsIDEyLCAxMywgCisgICAgMjQzLCAyMDUsIDEyLCAxMywgMjQzLCAyMDQsIDEyLCAxMywgMjQzLCAyMDMsIDEyLCAxMywgMjQzLCAyMDIsIDEyLCAxMywgCiAgICAgMjQzLCAyMDEsIDEyLCAxMywgMjQzLCAyMDAsIDEyLCAxMywgMjQzLCAxOTksIDEyLCAxMywgMjQzLCAxOTgsIDEyLCAxMywgCiAgICAgMjQzLCAxOTcsIDEyLCAxMywgMjQzLCAxOTYsIDEyLCAxMywgMjQzLCAxOTUsIDEyLCAxMywgMjQzLCAxOTQsIDEyLCAxMywgCiAgICAgMjQzLCAxOTMsIDEyLCAxMywgMjQzLCAxOTIsIDEyLCAxMywgMjQzLCAxOTEsIDEyLCAxMywgMjQzLCAxOTAsIDEyLCAxMywgCkBAIC0xMjAxNSw4MSArMTIwMTYsODAgQEAKICAgICAyNDMsIDE1NywgMTIsIDEzLCAyNDMsIDE1NiwgMTIsIDEzLCAyNDMsIDE1NSwgMTIsIDEzLCAyNDMsIDE1NCwgMTIsIDEzLCAKICAgICAyNDMsIDE1MywgMTIsIDEzLCAyNDMsIDE1MiwgMTIsIDEzLCAyNDMsIDE1MSwgMTIsIDEzLCAyNDMsIDE1MCwgMTIsIDEzLCAKICAgICAyNDMsIDE0OSwgMTIsIDEzLCAyNDMsIDE0OCwgMTIsIDEzLCAyNDMsIDE0NywgMTIsIDEzLCAyNDMsIDE0NiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0NSwgMTIsIDEzLCAyNDMsIDE0NCwgMTIsIDEzLCAyNDMsIDE0MywgMTIsIDEzLCAyNDMsIDE0MiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0MSwgMTIsIDEzLCAyNDMsIDE0MCwgMTIsIDEzLCAyNDMsIDEzOSwgMTIsIDEzLCAyNDMsIDEzOCwgMTIsIDEzLCAKLSAgICAyNDIsIDU4LCAxMiwgMTMsIDI0MiwgNTcsIDEyLCAxMywgMjQyLCA1NiwgMTIsIDEzLCAyNDIsIDU1LCAxMiwgMTMsIDI0MiwgCi0gICAgNTQsIDEyLCAxMywgMjQyLCA1MywgMTIsIDEzLCAyNDIsIDUyLCAxMiwgMTMsIDI0MiwgNTEsIDEyLCAxMywgMjQyLCA1MCwgCisgICAgMjQzLCAxNDUsIDEyLCAxMywgMjQyLCA2NSwgMTIsIDEzLCAyNDIsIDY0LCAxMiwgMTMsIDI0MiwgNjMsIDEyLCAxMywgMjQyLCAKKyAgICA2MiwgMTIsIDEzLCAyNDIsIDYxLCAxMiwgMTMsIDI0MiwgNjAsIDEyLCAxMywgMjQyLCA1OSwgMTIsIDEzLCAyNDIsIDU4LCAKKyAgICAxMiwgMTMsIDI0MiwgNTcsIDEyLCAxMywgMjQwLCAxNDUsIDEyLCAxMywgMjQwLCAxNDQsIDEyLCAxMywgMjQwLCAxNDMsIAorICAgIDEyLCAxMywgMjQwLCAxNDIsIDEyLCAxMywgMjQwLCAxNDEsIDEyLCAxMywgMjQwLCAxNDAsIDEyLCAxMywgMjQwLCAxMzksIAogICAgIDEyLCAxMywgMjQwLCAxMzgsIDEyLCAxMywgMjQwLCAxMzcsIDEyLCAxMywgMjQwLCAxMzYsIDEyLCAxMywgMjQwLCAxMzUsIAogICAgIDEyLCAxMywgMjQwLCAxMzQsIDEyLCAxMywgMjQwLCAxMzMsIDEyLCAxMywgMjQwLCAxMzIsIDEyLCAxMywgMjQwLCAxMzEsIAogICAgIDEyLCAxMywgMjQwLCAxMzAsIDEyLCAxMywgMjQwLCAxMjksIDEyLCAxMywgMjQwLCAxMjgsIDEyLCAxMywgMjQwLCAxMjcsIAotICAgIDEyLCAxMywgMjQwLCAxMjYsIDEyLCAxMywgMjQwLCAxMjUsIDEyLCAxMywgMjQwLCAxMjQsIDEyLCAxMywgMjQwLCAxMjMsIAotICAgIDEyLCAxMywgMjQwLCAxMjIsIDEyLCAxMywgMjQwLCAxMjEsIDEyLCAxMywgMjQwLCAxMjAsIDEyLCAxMywgMjM1LCAyMiwgCi0gICAgMTIsIDEzLCAyMzUsIDIxLCAxMiwgMTMsIDIzNSwgMjAsIDEyLCAxMywgMjM1LCAxOSwgMTIsIDEzLCAyMzUsIDE4LCAxMiwgCi0gICAgMTMsIDIzNSwgMTcsIDEyLCAxMywgMjM1LCAxNiwgMTIsIDEzLCAyMzUsIDE1LCAxMiwgMTMsIDIzMywgMTQ2LCAxMiwgMTMsIAotICAgIDIzMywgMTQ1LCAxMiwgMTMsIDIzMywgMTQ0LCAxMiwgMTMsIDIzMywgMTQzLCAxMiwgMTMsIDIzMywgMTQyLCAxMiwgMTMsIAotICAgIDIzMywgMTQxLCAxMiwgMTMsIDIzMywgMTQwLCAxMiwgMTMsIDIzMywgMTM5LCAxMiwgMTMsIDIzMywgMTM4LCAxMiwgMTMsIAotICAgIDIzMywgMTM3LCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgCi0gICAgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgCi0gICAgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgCi0gICAgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgCi0gICAgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIAotICAgIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIAotICAgIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIAotICAgIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIAotICAgIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAKLSAgICAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIAotICAgIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAKLSAgICAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgCi0gICAgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgCi0gICAgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgCi0gICAgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgMTMsIDIzMSwgMjQ0LCAxMiwgMTMsIDIzMSwgMjQzLCAxMiwgCi0gICAgMTMsIDIzMSwgMjQyLCAxMiwgMTMsIDIzMSwgMjQxLCAxMiwgMTMsIDIzMSwgMjQwLCAxMiwgMTMsIDIzMCwgMjIsIDEyLCAKLSAgICAxMywgMjMwLCAyMSwgMTIsIDEzLCAyMzAsIDIwLCAxMiwgMTMsIDIzMCwgMTksIDEyLCAxMywgMjMwLCAxOCwgMTIsIDEzLCAKLSAgICAyMzAsIDE3LCAxMiwgMTMsIDIzMCwgMTYsIDEyLCAxMywgMjMwLCAxNSwgMTIsIDEzLCAyMzAsIDE0LCAxMiwgMTMsIDIzMCwgCi0gICAgMTMsIDEyLCAxMywgMjMwLCAxMiwgMTIsIDEzLCAyMzAsIDExLCAxMiwgMTMsIDIzMCwgMTAsIDEyLCAxMywgMjMwLCA5LCAKLSAgICAxMiwgMTMsIDIzMCwgOCwgMTIsIDEzLCAyMzAsIDcsIDEyLCAxMywgMjMwLCA2LCAxMiwgMTMsIDIzMCwgNSwgMTIsIDEzLCAKLSAgICAyMzAsIDQsIDEyLCAxMywgMjMwLCAzLCAxMiwgMTMsIDIzMCwgMiwgMTIsIDEzLCAyMzAsIDEsIDEyLCAxMywgMjMwLCAwLCAKLSAgICAxMiwgMTMsIDIyOSwgMjU1LCAxMiwgMTMsIDIyOSwgMjU0LCAxMiwgMTMsIDIyOSwgMjUzLCAxMiwgMTMsIDIyOSwgMjUyLCAKLSAgICAxMiwgMTMsIDIyOSwgMjUxLCAxMiwgMTMsIDIyOSwgMjUwLCAxMiwgMTMsIDIyOSwgMjQ5LCAxMiwgMTMsIDIyOSwgMjQ4LCAKLSAgICAxMiwgMTMsIDIyOSwgMjQ3LCAxMiwgMTMsIDIyOSwgMjQ2LCAxMiwgMTMsIDIyOSwgMjQ1LCAxMiwgMTMsIDIyOSwgMjQ0LCAKLSAgICAxMiwgMTMsIDIyOSwgMjQzLCAxMiwgMTMsIDIyOSwgMjQyLCAxMiwgMTMsIDIyOSwgMjQxLCAxMiwgMTMsIDIyOSwgMjQwLCAKLSAgICAxMiwgMTMsIDIyOSwgMjM5LCAxMiwgMTMsIDIyOSwgMjM4LCAxMiwgMTMsIDIyOSwgMjM3LCAxMiwgMTMsIDIyOSwgMjM2LCAKLSAgICAxMiwgMTMsIDIyOSwgMjM1LCAxMiwgMTMsIDIyOSwgMjM0LCAxMiwgMTMsIDIyOSwgMjMzLCAxMiwgMTMsIDIyOSwgMjMyLCAKLSAgICAxMiwgMTMsIDIyOSwgMjMxLCAxMiwgMTMsIDIyOSwgMjMwLCAxMiwgMTMsIDIyOCwgMTM0LCAxMiwgMTMsIDIyOCwgMTMzLCAKLSAgICAxMiwgMTMsIDIyOCwgMTMyLCAxMiwgMTMsIDIyOCwgMTMxLCAxMiwgMTMsIDIyOCwgMTMwLCAxMiwgMTMsIDIyOCwgMTI5LCAKLSAgICAxMiwgMTMsIDIyOCwgMTI4LCAxMiwgMTMsIDIyOCwgMTI3LCAxMiwgMTMsIDIyOCwgMTI2LCAxMiwgMTMsIDIyOCwgMTI1LCAKLSAgICAxMiwgMTMsIDIyOCwgMTI0LCAxMiwgMTMsIDIyOCwgMTIzLCAxMiwgMTMsIDIyOCwgMTIyLCAxMiwgMTMsIDIyOCwgMTIxLCAKLSAgICAxMiwgMTMsIDIyOCwgMTIwLCAxMiwgMTMsIDIyOCwgMTE5LCAxMiwgMTMsIDIyOCwgMTE4LCAxMiwgMTMsIDIyOCwgMTE3LCAKLSAgICAxMiwgMTMsIDIyOCwgMTE2LCAxMiwgMTMsIDIyOCwgMTE1LCAxMiwgMTMsIDIyOCwgMTE0LCAxMiwgMTMsIDIyOCwgMTEzLCAKLSAgICAxMiwgMTMsIDIyNywgMjM2LCAxMiwgMTMsIDIyNywgMjM1LCAxMiwgMTMsIDIyNywgMjM0LCAxMiwgMTMsIDIyNywgMjMzLCAKLSAgICAxMiwgMTMsIDIyNywgMjMyLCAxMiwgMTMsIDIyNywgMjMxLCAxMiwgMTMsIDIyNywgMjMwLCAxMiwgMTMsIDIyNywgMjI5LCAKLSAgICAxMiwgMTMsIDIyNywgMjI4LCAxMiwgMTMsIDIyNywgMjI3LCAxMiwgMTMsIDIyNywgMjI2LCAxMiwgMTMsIDIyNywgMjI1LCAKLSAgICAxMiwgMTMsIDIyNywgMjI0LCAxMiwgMTMsIDIyNywgMjIzLCAxMiwgMTMsIDIyNywgMjIyLCAxMiwgMTMsIDIyNywgMjIxLCAKLSAgICAxMiwgMTMsIDIyNywgMjIwLCAxMiwgMTMsIDIyNywgMjE5LCAxMiwgMTMsIDIyNywgMjE4LCAxMiwgMTMsIDIyNywgMjE3LCAKLSAgICAxMiwgMTMsIDIyNywgMjE2LCAxMiwgMTMsIDIyNywgMjE1LCAxMiwgMTMsIDIyNywgMjE0LCAxMiwgMTMsIDIyNywgMjEzLCAKLSAgICAxMiwgMTMsIDIyNywgMjEyLCAxMiwgMTMsIDIyNywgMjExLCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCA3NSwgMTIsIAotICAgIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAxMiwgMTMsIAotICAgIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAxMywgMjI3LCAKLSAgICA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAyMjcsIDYyLCAKLSAgICAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgNTgsIDEyLCAKLSAgICAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgMTIsIDEzLCAKLSAgICAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgMTMsIDIyNywgCi0gICAgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgMjI3LCA0NSwgCi0gICAgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIDQxLCAxMiwgCi0gICAgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIDEyLCAxMywgCi0gICAgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIDEzLCAyMjcsIAotICAgIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIDIyNywgMjgsIAotICAgIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAyNCwgMTIsIAotICAgIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAxMiwgMTMsIAotICAgIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAxMywgMjI3LCAKLSAgICAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAyMjcsIDExLCAKLSAgICAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIDEyLCAxMywgCi0gICAgMjI3LCA2LCAxMiwgMTMsIDIyNywgNSwgMTIsIDEzLCAyMjcsIDQsIDEyLCAxMywgMjI3LCAzLCAxMiwgMTMsIDIyNywgMiwgCi0gICAgMTIsIDEzLCAyMjYsIDEwNCwgMTIsIDEzLCAyMjYsIDEwMywgMTIsIDEzLCAyMjYsIDEwMiwgMTIsIDEzLCAyMjYsIDEwMSwgCi0gICAgMTIsIDEzLCAyMjYsIDEwMCwgMTIsIDEzLCAyMjYsIDk5LCAxMiwgMTMsIDIyNiwgOTgsIDEyLCAxMywgMjI2LCA5NywgMTIsIAotICAgIDEzLCAyMjYsIDk2LCAxMiwgMTMsIDIyNiwgOTUsIDEyLCAxMywgMjI2LCA5NCwgMTIsIDEzLCAyMjYsIDkzLCAxMiwgMTMsIAotICAgIDIyNiwgOTIsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCAKLSAgICA5MiwgMTIsIDEzLCAyMjQsIDkxLCAxMiwgMTMsIDIyNCwgOTAsIDEyLCAxMywgMjI0LCA4OSwgMTIsIDEzLCAyMjMsIDIyMiwgCisgICAgMTIsIDEzLCAyMzUsIDI4LCAxMiwgMTMsIDIzNSwgMjcsIDEyLCAxMywgMjM1LCAyNiwgMTIsIDEzLCAyMzUsIDI1LCAxMiwgCisgICAgMTMsIDIzNSwgMjQsIDEyLCAxMywgMjM1LCAyMywgMTIsIDEzLCAyMzUsIDIyLCAxMiwgMTMsIDIzNSwgMjEsIDEyLCAxMywgCisgICAgMjMzLCAxNTIsIDEyLCAxMywgMjMzLCAxNTEsIDEyLCAxMywgMjMzLCAxNTAsIDEyLCAxMywgMjMzLCAxNDksIDEyLCAxMywgCisgICAgMjMzLCAxNDgsIDEyLCAxMywgMjMzLCAxNDcsIDEyLCAxMywgMjMzLCAxNDYsIDEyLCAxMywgMjMzLCAxNDUsIDEyLCAxMywgCisgICAgMjMzLCAxNDQsIDEyLCAxMywgMjMzLCAxNDMsIDEyLCAxMywgMjMyLCA1NCwgMTIsIDEzLCAyMzIsIDUzLCAxMiwgMTMsIAorICAgIDIzMiwgNTIsIDEyLCAxMywgMjMyLCA1MSwgMTIsIDEzLCAyMzIsIDUwLCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCAKKyAgICA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAKKyAgICAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAKKyAgICAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAKKyAgICAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgCisgICAgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgCisgICAgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgCisgICAgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgCisgICAgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIAorICAgIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIAorICAgIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIAorICAgIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIAorICAgIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgCisgICAgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgCisgICAgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgCisgICAgMTMsIDIzMCwgMjcsIDEyLCAxMywgMjMwLCAyNiwgMTIsIDEzLCAyMzAsIDI1LCAxMiwgMTMsIDIzMCwgMjQsIDEyLCAxMywgCisgICAgMjMwLCAyMywgMTIsIDEzLCAyMzAsIDIyLCAxMiwgMTMsIDIzMCwgMjEsIDEyLCAxMywgMjMwLCAyMCwgMTIsIDEzLCAyMzAsIAorICAgIDE5LCAxMiwgMTMsIDIzMCwgMTgsIDEyLCAxMywgMjMwLCAxNywgMTIsIDEzLCAyMzAsIDE2LCAxMiwgMTMsIDIzMCwgMTUsIAorICAgIDEyLCAxMywgMjMwLCAxNCwgMTIsIDEzLCAyMzAsIDEzLCAxMiwgMTMsIDIzMCwgMTIsIDEyLCAxMywgMjMwLCAxMSwgMTIsIAorICAgIDEzLCAyMzAsIDEwLCAxMiwgMTMsIDIzMCwgOSwgMTIsIDEzLCAyMzAsIDgsIDEyLCAxMywgMjMwLCA3LCAxMiwgMTMsIDIzMCwgCisgICAgNiwgMTIsIDEzLCAyMzAsIDUsIDEyLCAxMywgMjMwLCA0LCAxMiwgMTMsIDIzMCwgMywgMTIsIDEzLCAyMzAsIDIsIDEyLCAKKyAgICAxMywgMjMwLCAxLCAxMiwgMTMsIDIzMCwgMCwgMTIsIDEzLCAyMjksIDI1NSwgMTIsIDEzLCAyMjksIDI1NCwgMTIsIDEzLCAKKyAgICAyMjksIDI1MywgMTIsIDEzLCAyMjksIDI1MiwgMTIsIDEzLCAyMjksIDI1MSwgMTIsIDEzLCAyMjksIDI1MCwgMTIsIDEzLCAKKyAgICAyMjksIDI0OSwgMTIsIDEzLCAyMjksIDI0OCwgMTIsIDEzLCAyMjksIDI0NywgMTIsIDEzLCAyMjksIDI0NiwgMTIsIDEzLCAKKyAgICAyMjksIDI0NSwgMTIsIDEzLCAyMjksIDI0NCwgMTIsIDEzLCAyMjksIDI0MywgMTIsIDEzLCAyMjksIDI0MiwgMTIsIDEzLCAKKyAgICAyMjksIDI0MSwgMTIsIDEzLCAyMjksIDI0MCwgMTIsIDEzLCAyMjksIDIzOSwgMTIsIDEzLCAyMjksIDIzOCwgMTIsIDEzLCAKKyAgICAyMjksIDIzNywgMTIsIDEzLCAyMjksIDIzNiwgMTIsIDEzLCAyMjksIDIzNSwgMTIsIDEzLCAyMjgsIDEzOSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzOCwgMTIsIDEzLCAyMjgsIDEzNywgMTIsIDEzLCAyMjgsIDEzNiwgMTIsIDEzLCAyMjgsIDEzNSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzNCwgMTIsIDEzLCAyMjgsIDEzMywgMTIsIDEzLCAyMjgsIDEzMiwgMTIsIDEzLCAyMjgsIDEzMSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzMCwgMTIsIDEzLCAyMjgsIDEyOSwgMTIsIDEzLCAyMjgsIDEyOCwgMTIsIDEzLCAyMjgsIDEyNywgMTIsIDEzLCAKKyAgICAyMjgsIDEyNiwgMTIsIDEzLCAyMjgsIDEyNSwgMTIsIDEzLCAyMjgsIDEyNCwgMTIsIDEzLCAyMjgsIDEyMywgMTIsIDEzLCAKKyAgICAyMjgsIDEyMiwgMTIsIDEzLCAyMjgsIDEyMSwgMTIsIDEzLCAyMjgsIDEyMCwgMTIsIDEzLCAyMjgsIDExOSwgMTIsIDEzLCAKKyAgICAyMjgsIDExOCwgMTIsIDEzLCAyMjcsIDI0MSwgMTIsIDEzLCAyMjcsIDI0MCwgMTIsIDEzLCAyMjcsIDIzOSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzOCwgMTIsIDEzLCAyMjcsIDIzNywgMTIsIDEzLCAyMjcsIDIzNiwgMTIsIDEzLCAyMjcsIDIzNSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzNCwgMTIsIDEzLCAyMjcsIDIzMywgMTIsIDEzLCAyMjcsIDIzMiwgMTIsIDEzLCAyMjcsIDIzMSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzMCwgMTIsIDEzLCAyMjcsIDIyOSwgMTIsIDEzLCAyMjcsIDIyOCwgMTIsIDEzLCAyMjcsIDIyNywgMTIsIDEzLCAKKyAgICAyMjcsIDIyNiwgMTIsIDEzLCAyMjcsIDIyNSwgMTIsIDEzLCAyMjcsIDIyNCwgMTIsIDEzLCAyMjcsIDIyMywgMTIsIDEzLCAKKyAgICAyMjcsIDIyMiwgMTIsIDEzLCAyMjcsIDIyMSwgMTIsIDEzLCAyMjcsIDIyMCwgMTIsIDEzLCAyMjcsIDIxOSwgMTIsIDEzLCAKKyAgICAyMjcsIDIxOCwgMTIsIDEzLCAyMjcsIDIxNywgMTIsIDEzLCAyMjcsIDIxNiwgMTIsIDEzLCAyMjcsIDgwLCAxMiwgMTMsIAorICAgIDIyNywgNzksIDEyLCAxMywgMjI3LCA3OCwgMTIsIDEzLCAyMjcsIDc3LCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCAKKyAgICA3NSwgMTIsIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAKKyAgICAxMiwgMTMsIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAKKyAgICAxMywgMjI3LCA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAKKyAgICAyMjcsIDYyLCAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgCisgICAgNTgsIDEyLCAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgCisgICAgMTIsIDEzLCAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgCisgICAgMTMsIDIyNywgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgCisgICAgMjI3LCA0NSwgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIAorICAgIDQxLCAxMiwgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIAorICAgIDEyLCAxMywgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIAorICAgIDEzLCAyMjcsIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIAorICAgIDIyNywgMjgsIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAKKyAgICAyNCwgMTIsIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAKKyAgICAxMiwgMTMsIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAKKyAgICAxMywgMjI3LCAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAKKyAgICAyMjcsIDExLCAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIAorICAgIDEyLCAxMywgMjI3LCA2LCAxMiwgMTMsIDIyNiwgMTA4LCAxMiwgMTMsIDIyNiwgMTA3LCAxMiwgMTMsIDIyNiwgMTA2LCAxMiwgCisgICAgMTMsIDIyNiwgMTA1LCAxMiwgMTMsIDIyNiwgMTA0LCAxMiwgMTMsIDIyNiwgMTAzLCAxMiwgMTMsIDIyNiwgMTAyLCAxMiwgCisgICAgMTMsIDIyNiwgMTAxLCAxMiwgMTMsIDIyNiwgMTAwLCAxMiwgMTMsIDIyNiwgOTksIDEyLCAxMywgMjI2LCA5OCwgMTIsIDEzLCAKKyAgICAyMjYsIDk3LCAxMiwgMTMsIDIyNiwgOTYsIDEyLCAxMywgMjI0LCA5OCwgMTIsIDEzLCAyMjQsIDk3LCAxMiwgMTMsIDIyNCwgCisgICAgOTYsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCA5MiwgCisgICAgMTIsIDEzLCAyMjMsIDIyNSwgMTIsIDEzLCAyMjMsIDIyNCwgMTIsIDEzLCAyMjMsIDIyMywgMTIsIDEzLCAyMjMsIDIyMiwgCiAgICAgMTIsIDEzLCAyMjMsIDIyMSwgMTIsIDEzLCAyMjMsIDIyMCwgMTIsIDEzLCAyMjMsIDIxOSwgMTIsIDEzLCAyMjMsIDIxOCwgCiAgICAgMTIsIDEzLCAyMjMsIDIxNywgMTIsIDEzLCAyMjMsIDIxNiwgMTIsIDEzLCAyMjMsIDIxNSwgMTIsIDEzLCAyMjMsIDIxNCwgCiAgICAgMTIsIDEzLCAyMjMsIDIxMywgMTIsIDEzLCAyMjMsIDIxMiwgMTIsIDEzLCAyMjMsIDIxMSwgMTIsIDEzLCAyMjMsIDIxMCwgCkBAIC0xMjA5NywxNzI2ICsxMjA5NywxNzQzIEBACiAgICAgMTIsIDEzLCAyMjMsIDIwNSwgMTIsIDEzLCAyMjMsIDIwNCwgMTIsIDEzLCAyMjMsIDIwMywgMTIsIDEzLCAyMjMsIDIwMiwgCiAgICAgMTIsIDEzLCAyMjMsIDIwMSwgMTIsIDEzLCAyMjMsIDIwMCwgMTIsIDEzLCAyMjMsIDE5OSwgMTIsIDEzLCAyMjMsIDE5OCwgCiAgICAgMTIsIDEzLCAyMjMsIDE5NywgMTIsIDEzLCAyMjMsIDE5NiwgMTIsIDEzLCAyMjMsIDE5NSwgMTIsIDEzLCAyMjMsIDE5NCwgCi0gICAgMTIsIDEzLCAyMjMsIDE5MywgMTIsIDEzLCAyMjMsIDE5MiwgMTIsIDEzLCAyMjMsIDE5MSwgMTIsIDEzLCAyMjMsIDE5MCwgCi0gICAgMTIsIDEzLCAyMjMsIDE4OSwgMTIsIDEzLCAyMjIsIDg4LCAxMiwgMTMsIDIyMiwgODcsIDEyLCAxMywgMjIyLCA4NiwgMTIsIAotICAgIDEzLCAyMjIsIDg1LCAxMiwgMTMsIDIyMiwgODQsIDEyLCAxMywgMjIyLCA4MywgMTIsIDEzLCAyMjIsIDgyLCAxMiwgMTMsIAotICAgIDIyMiwgODEsIDEyLCAxMywgMjIyLCA4MCwgMTIsIDEzLCAyMjIsIDc5LCAxMiwgMTMsIDIyMiwgNzgsIDEyLCAxMywgMjIyLCAKLSAgICA3NywgMTIsIDEzLCAyMjIsIDc2LCAxMiwgMTMsIDIyMiwgNzUsIDEyLCAxMywgMjIyLCA3NCwgMTIsIDEzLCAyMjIsIDczLCAKLSAgICAxMiwgMTMsIDIyMiwgNzIsIDEyLCAxMywgMjIyLCA3MSwgMTIsIDEzLCAyMjIsIDcwLCAxMiwgMTMsIDIyMiwgNjksIDEyLCAKLSAgICAxMywgMjIyLCA2OCwgMTIsIDEzLCAyMjIsIDY3LCAxMiwgMTMsIDIyMiwgNjYsIDEyLCAxMywgMjIyLCA2NSwgMTIsIDEzLCAKLSAgICAyMjIsIDY0LCAxMiwgMTMsIDIyMiwgNjMsIDEyLCAxMywgMjIyLCA2MiwgMTIsIDEzLCAyMjIsIDYxLCAxMiwgMTMsIDIyMiwgCi0gICAgNjAsIDEyLCAxMywgMjIyLCA1OSwgMTIsIDEzLCAyMjIsIDU4LCAxMiwgMTMsIDIyMiwgNTcsIDEyLCAxMywgMjIyLCA1NiwgCi0gICAgMTIsIDEzLCAyMjIsIDU1LCAxMiwgMTMsIDIyMiwgNTQsIDEyLCAxMywgMjIyLCA1MywgMTIsIDEzLCAyMjIsIDUyLCAxMiwgCi0gICAgMTMsIDIyMiwgNTEsIDEyLCAxMywgMjIyLCA1MCwgMTIsIDEzLCAyMjIsIDQ5LCAxMiwgMTMsIDIyMiwgNDgsIDEyLCAxMywgCi0gICAgMjIyLCA0NywgMTIsIDEzLCAyMjIsIDQ2LCAxMiwgMTMsIDIyMiwgNDUsIDEyLCAxMywgMjIyLCA0NCwgMTIsIDEzLCAyMjIsIAotICAgIDQzLCAxMiwgMTMsIDIyMiwgNDIsIDEyLCAxMywgMjIyLCA0MSwgMTIsIDEzLCAyMjIsIDQwLCAxMiwgMTMsIDIyMiwgMzksIAotICAgIDEyLCAxMywgMjIyLCAzOCwgMTIsIDEzLCAyMjIsIDM3LCAxMiwgMTMsIDIyMiwgMzYsIDEyLCAxMywgMjIyLCAzNSwgMTIsIAotICAgIDEzLCAyMTcsIDE1MCwgMTIsIDEzLCAyMTcsIDE0OSwgMTIsIDEzLCAyMTcsIDE0OCwgMTIsIDEzLCAyMTcsIDE0NywgMTIsIAotICAgIDEzLCAyMTcsIDE0NiwgMTIsIDEzLCAyMTcsIDE0NSwgMTIsIDEzLCAyMTcsIDE0NCwgMTIsIDEzLCAyMTcsIDE0MywgMTIsIAotICAgIDEzLCAyMTcsIDE0MiwgMTIsIDEzLCAyMTcsIDE0MSwgMTIsIDEzLCAyMTcsIDE0MCwgMTIsIDEzLCAyMTcsIDEzOSwgMTIsIAotICAgIDEzLCAyMTcsIDEzOCwgMTIsIDEzLCAyMTcsIDEzNywgMTIsIDEzLCAyMTcsIDEzNiwgMTIsIDEzLCAyMTcsIDEzNSwgMTIsIAotICAgIDEzLCAyMTcsIDEzNCwgMTIsIDEzLCAyMTcsIDEzMywgMTIsIDEzLCAyMTcsIDEzMiwgMTIsIDEzLCAyMTcsIDEzMSwgMTIsIAotICAgIDEzLCAyMTcsIDEzMCwgMTIsIDEzLCAyMTcsIDEyOSwgMTIsIDEzLCAyMTcsIDEyOCwgMTIsIDEzLCAyMTcsIDEyNywgMTIsIAotICAgIDEzLCAyMTcsIDEyNiwgMTIsIDEzLCAyMTcsIDEyNSwgMTIsIDEzLCAyMTcsIDEyNCwgMTIsIDEzLCAyMTcsIDEyMywgMTIsIAotICAgIDEzLCAyMTcsIDEyMiwgMTIsIDEzLCAyMTcsIDEyMSwgMTIsIDEzLCAyMTcsIDEyMCwgMTIsIDEzLCAyMTcsIDExOSwgMTIsIAotICAgIDEzLCAyMTcsIDExOCwgMTIsIDEzLCAyMTcsIDExNywgMTIsIDEzLCAyMTcsIDExNiwgMTIsIDEzLCAyMTcsIDExNSwgMTIsIAotICAgIDEzLCAyMTcsIDExNCwgMTIsIDEzLCAyMTcsIDExMywgMTIsIDEzLCAyMTcsIDExMiwgMTIsIDEzLCAyMTcsIDExMSwgMTIsIAotICAgIDEzLCAyMTcsIDExMCwgMTIsIDEzLCAyMTcsIDEwOSwgMTIsIDEzLCAyMTcsIDEwOCwgMTIsIDEzLCAyMTcsIDEwNywgMTIsIAotICAgIDEzLCAyMTUsIDIyLCAxMiwgMTMsIDIxNSwgMjEsIDEyLCAxMywgMjE1LCAyMCwgMTIsIDEzLCAyMTUsIDE5LCAxMiwgMTMsIAotICAgIDIxNSwgMTgsIDEyLCAxMywgMjE1LCAxNywgMTIsIDEzLCAyMTUsIDE2LCAxMiwgMTMsIDIxNSwgMTUsIDEyLCAxMywgMjE1LCAKLSAgICAxNCwgMTIsIDEzLCAyMTUsIDEzLCAxMiwgMTMsIDIxNSwgMTIsIDEyLCAxMywgMjE1LCAxMSwgMTIsIDEzLCAyMTUsIDEwLCAKLSAgICAxMiwgMTMsIDIxNSwgOSwgMTIsIDEzLCAyMTUsIDgsIDEyLCAxMywgMjE1LCA3LCAxMiwgMTMsIDIxNSwgNiwgMTIsIDEzLCAKLSAgICAyMTUsIDUsIDEyLCAxMywgMjE1LCA0LCAxMiwgMTMsIDIxNSwgMywgMTIsIDEzLCAyMTUsIDIsIDEyLCAxMywgMjE1LCAxLCAKLSAgICAxMiwgMTMsIDIxNSwgMCwgMTIsIDEzLCAyMTQsIDI1NSwgMTIsIDEzLCAyMTQsIDI1NCwgMTIsIDEzLCAyMTQsIDI1MywgMTIsIAotICAgIDEzLCAyMTQsIDI1MiwgMTIsIDEzLCAyMTQsIDI1MSwgMTIsIDEzLCAyMTQsIDI1MCwgMTIsIDEzLCAyMTQsIDI0OSwgMTIsIAotICAgIDEzLCAyMTQsIDI0OCwgMTIsIDEzLCAyMTQsIDI0NywgMTIsIDEzLCAyMTQsIDI0NiwgMTIsIDEzLCAyMTQsIDI0NSwgMTIsIAotICAgIDEzLCAyMTQsIDI0NCwgMTIsIDEzLCAyMTQsIDI0MywgMTIsIDEzLCAyMTQsIDI0MiwgMTIsIDEzLCAyMTQsIDI0MSwgMTIsIAotICAgIDEzLCAyMTQsIDI0MCwgMTIsIDEzLCAyMTQsIDIzOSwgMTIsIDEzLCAyMTQsIDIzOCwgMTIsIDEzLCAyMTQsIDIzNywgMTIsIAotICAgIDEzLCAyMTQsIDIzNiwgMTIsIDEzLCAyMTQsIDIzNSwgMTIsIDEzLCAyMTQsIDIzNCwgMTIsIDEzLCAyMTQsIDIzMywgMTIsIAotICAgIDEzLCAyMTQsIDIzMiwgMTIsIDEzLCAyMTQsIDEwNCwgMTIsIDEzLCAyMTQsIDEwMywgMTIsIDEzLCAyMTQsIDEwMiwgMTIsIAotICAgIDEzLCAyMTQsIDEwMSwgMTIsIDEzLCAyMTQsIDEwMCwgMTIsIDEzLCAyMTQsIDk5LCAxMiwgMTMsIDIxNCwgOTgsIDEyLCAxMywgCi0gICAgMjE0LCA5NywgMTIsIDEzLCAyMTQsIDk2LCAxMiwgMTMsIDIxNCwgOTUsIDEyLCAxMywgMjE0LCA5NCwgMTIsIDEzLCAyMTQsIAotICAgIDkzLCAxMiwgMTMsIDIxNCwgOTIsIDEyLCAxMywgMjE0LCA5MSwgMTIsIDEzLCAyMTQsIDkwLCAxMiwgMTMsIDIxNCwgODksIAotICAgIDEyLCAxMywgMjE0LCA4OCwgMTIsIDEzLCAyMTQsIDg3LCAxMiwgMTMsIDIxNCwgODYsIDEyLCAxMywgMjE0LCA4NSwgMTIsIAotICAgIDEzLCAyMTQsIDg0LCAxMiwgMTMsIDIxNCwgODMsIDEyLCAxMywgMjE0LCA4MiwgMTIsIDEzLCAyMTQsIDgxLCAxMiwgMTMsIAotICAgIDIxNCwgODAsIDEyLCAxMywgMjE0LCA3OSwgMTIsIDEzLCAyMTQsIDc4LCAxMiwgMTMsIDIxNCwgNzcsIDEyLCAxMywgMjE0LCAKLSAgICA3NiwgMTIsIDEzLCAyMTQsIDc1LCAxMiwgMTMsIDIxNCwgNzQsIDEyLCAxMywgMjE0LCA3MywgMTIsIDEzLCAyMTQsIDcyLCAKLSAgICAxMiwgMTMsIDIxNCwgNzEsIDEyLCAxMywgMjE0LCA3MCwgMTIsIDEzLCAyMTQsIDY5LCAxMiwgMTMsIDIxNCwgNjgsIDEyLCAKLSAgICAxMywgMjE0LCA2NywgMTIsIDEzLCAyMTQsIDY2LCAxMiwgMTMsIDIxNCwgNjUsIDEyLCAxMywgMjE0LCA2NCwgMTIsIDEzLCAKLSAgICAyMTQsIDYzLCAxMiwgMTMsIDIxNCwgNjIsIDEyLCAxMywgMjE0LCA2MSwgMTIsIDEzLCAyMTQsIDYwLCAxMiwgMTMsIDIxNCwgCi0gICAgNTksIDEyLCAxMywgMjE0LCA1OCwgMTIsIDEzLCAyMTQsIDU3LCAxMiwgMTMsIDIxNCwgNTYsIDEyLCAxMywgMjE0LCA1NSwgCi0gICAgMTIsIDEzLCAyMTQsIDU0LCAxMiwgMTMsIDIxNCwgNTMsIDEyLCAxMywgMjE0LCA1MiwgMTIsIDEzLCAyMTQsIDUxLCAxMiwgCi0gICAgMTMsIDIxNCwgNTAsIDEyLCAxMywgMjE0LCA0OSwgMTIsIDEzLCAyMTQsIDQ4LCAxMiwgMTMsIDIxNCwgNDcsIDEyLCAxMywgCi0gICAgMjE0LCA0NiwgMTIsIDEzLCAyMTQsIDQ1LCAxMiwgMTMsIDIxNCwgNDQsIDEyLCAxMywgMjE0LCA0MywgMTIsIDEzLCAyMTQsIAotICAgIDQyLCAxMiwgMTMsIDIxNCwgNDEsIDEyLCAxMywgMjE0LCA0MCwgMTIsIDEzLCAyMTQsIDM5LCAxMiwgMTMsIDIxNCwgMzgsIAotICAgIDEyLCAxMywgMjE0LCAzNywgMTIsIDEzLCAyMTQsIDM2LCAxMiwgMTMsIDIxNCwgMzUsIDEyLCAxMywgMjE0LCAzNCwgMTIsIAotICAgIDEzLCAyMTQsIDMzLCAxMiwgMTMsIDIxNCwgMzIsIDEyLCAxMywgMjE0LCAzMSwgMTIsIDEzLCAyMTQsIDMwLCAxMiwgMTMsIAotICAgIDIxNCwgMjksIDEyLCAxMywgMjE0LCAyOCwgMTIsIDEzLCAyMTIsIDk3LCAxMiwgMTMsIDIxMiwgOTYsIDEyLCAxMywgMjEyLCAKLSAgICA5NSwgMTIsIDEzLCAyMTIsIDk0LCAxMiwgMTMsIDIxMiwgOTMsIDEyLCAxMywgMjEyLCA5MiwgMTIsIDEzLCAyMTIsIDkxLCAKLSAgICAxMiwgMTMsIDIxMiwgOTAsIDEyLCAxMywgMjEyLCA4OSwgMTIsIDEzLCAyMTIsIDg4LCAxMiwgMTMsIDIxMiwgODcsIDEyLCAKLSAgICAxMywgMjEyLCA4NiwgMTIsIDEzLCAyMTIsIDg1LCAxMiwgMTMsIDIxMiwgODQsIDEyLCAxMywgMjEyLCA4MywgMTIsIDEzLCAKLSAgICAyMTIsIDgyLCAxMiwgMTMsIDIxMiwgODEsIDEyLCAxMywgMjEyLCA4MCwgMTIsIDEzLCAyMTIsIDc5LCAxMiwgMTMsIDIxMiwgCi0gICAgNzgsIDEyLCAxMywgMjEyLCA3NywgMTIsIDEzLCAyMTIsIDc2LCAxMiwgMTMsIDIxMiwgNzUsIDEyLCAxMywgMjEyLCA3NCwgCi0gICAgMTIsIDEzLCAyMTIsIDczLCAxMiwgMTMsIDIxMiwgNzIsIDEyLCAxMywgMjEyLCA3MSwgMTIsIDEzLCAyMTIsIDcwLCAxMiwgCi0gICAgMTMsIDIxMiwgNjksIDEyLCAxMywgMjEyLCA2OCwgMTIsIDEzLCAyMTIsIDY3LCAxMiwgMTMsIDIxMiwgNjYsIDEyLCAxMywgCi0gICAgMjExLCAxNzcsIDEyLCAxMywgMjExLCAxNzYsIDEyLCAxMywgMjExLCAxNzUsIDEyLCAxMywgMjExLCAxNzQsIDEyLCAxMywgCi0gICAgMjExLCAxNzMsIDEyLCAxMywgMjExLCAxNzIsIDEyLCAxMywgMjExLCAxNzEsIDEyLCAxMywgMjExLCAxNzAsIDEyLCAxMywgCi0gICAgMjExLCAxNjksIDEyLCAxMywgMjExLCAxNjgsIDEyLCAxMywgMjExLCAxNjcsIDEyLCAxMywgMjExLCAxNjYsIDEyLCAxMywgCi0gICAgMjExLCAxMTUsIDEyLCAxMywgMjExLCAxMTQsIDEyLCAxMywgMjExLCAxMTMsIDEyLCAxMywgMjExLCAxMTIsIDEyLCAxMywgCi0gICAgMjExLCAxMTEsIDEyLCAxMywgMjExLCAxMTAsIDEyLCAxMywgMjExLCAxMDksIDEyLCAxMywgMjExLCAxMDgsIDEyLCAxMywgCi0gICAgMjExLCAxMDcsIDEyLCAxMywgMjEwLCAxNTgsIDEyLCAxMywgMjEwLCAxNTcsIDEyLCAxMywgMjEwLCAxNTYsIDEyLCAxMywgCi0gICAgMjEwLCAxNTUsIDEyLCAxMywgMjEwLCAxNTQsIDEyLCAxMywgMjEwLCAxNTMsIDEyLCAxMywgMjEwLCAxNTIsIDEyLCAxMywgCi0gICAgMjEwLCAxNTEsIDEyLCAxMywgMjEwLCAxNTAsIDEyLCAxMywgMjEwLCAxNDksIDEyLCAxMywgMjEwLCAxNDgsIDEyLCAxMywgCi0gICAgMjEwLCAxNDcsIDEyLCAxMywgMjEwLCAxNDYsIDEyLCAxMywgMjEwLCAxNDUsIDEyLCAxMywgMjEwLCAxNDQsIDEyLCAxMywgCi0gICAgMjEwLCAxNDMsIDEyLCAxMywgMjEwLCAxNDIsIDEyLCAxMywgMjEwLCAxNDEsIDEyLCAxMywgMjEwLCAxNDAsIDEyLCAxMywgCi0gICAgMjEwLCAxMzksIDEyLCAxMywgMjEwLCAxMzgsIDEyLCAxMywgMjEwLCAxMzcsIDEyLCAxMywgMjEwLCAxMzYsIDEyLCAxMywgCi0gICAgMjEwLCAxMzUsIDEyLCAxMywgMjEwLCAxMzQsIDEyLCAxMywgMjEwLCAxMzMsIDEyLCAxMywgMjEwLCAxMzIsIDEyLCAxMywgCi0gICAgMjEwLCAxMzEsIDEyLCAxMywgMjEwLCAxMzAsIDEyLCAxMywgMjEwLCAxMjksIDEyLCAxMywgMjEwLCAxMjgsIDEyLCAxMywgCi0gICAgMjEwLCAxMjcsIDEyLCAxMywgMjEwLCAxMjYsIDEyLCAxMywgMjEwLCAxMjUsIDEyLCAxMywgMjEwLCAxMjQsIDEyLCAxMywgCi0gICAgMjEwLCAxMjMsIDEyLCAxMywgMjEwLCAxMjIsIDEyLCAxMywgMjEwLCAxMjEsIDEyLCAxMywgMjEwLCAxMjAsIDEyLCAxMywgCi0gICAgMjEwLCAxMTksIDEyLCAxMywgMjEwLCAxMTgsIDEyLCAxMywgMjU1LCA3MiwgMTIsIDEzLCAyNTUsIDcxLCAxMiwgMTMsIAotICAgIDI1NSwgNzAsIDEyLCAxMywgMjU1LCA2OSwgMTIsIDEzLCAyNTUsIDY4LCAxMiwgMTMsIDI1NSwgNjcsIDEyLCAxMywgMjU1LCAKLSAgICA2NiwgMTIsIDEzLCAyNTUsIDY1LCAxMiwgMTMsIDI1NSwgNjQsIDEyLCAxMywgMjU1LCA2MywgMTIsIDEzLCAyNTUsIDYyLCAKLSAgICAxMiwgMTMsIDI1NSwgNjEsIDEyLCAxMywgMjU1LCA2MCwgMTIsIDEzLCAyNTUsIDU5LCAxMiwgMTMsIDI1NSwgNTgsIDEyLCAKLSAgICAxMywgMjU1LCA1NywgMTIsIDEzLCAyNTUsIDU2LCAxMiwgMTMsIDI1NSwgNTUsIDEyLCAxMywgMjU1LCA1NCwgMTIsIDEzLCAKLSAgICAyNTUsIDUzLCAxMiwgMTMsIDI1NSwgNTIsIDEyLCAxMywgMjU1LCA1MSwgMTIsIDEzLCAyNTUsIDUwLCAxMiwgMTMsIDI1NSwgCi0gICAgNDksIDEyLCAxMywgMjU1LCA0OCwgMTIsIDEzLCAyNTUsIDQ3LCAxMiwgMTMsIDI1NSwgNDYsIDEyLCAxMywgMjU1LCA0NSwgCi0gICAgMTIsIDEzLCAyNTUsIDQ0LCAxMiwgMTMsIDI1NSwgNDMsIDEyLCAxMywgMjU1LCA0MiwgMTIsIDEzLCAyNTUsIDQxLCAxMiwgCi0gICAgMTMsIDI1NSwgNDAsIDEyLCAxMywgMjU1LCAzOSwgMjAsIDEsIDE2NywgMjI5LCAxMiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgCi0gICAgMjQzLCA3MCwgMjQ0LCAzNiwgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIzMSwgMTcsIDIyNSwgNTcsIDIwLCAxLCAxNjcsIAotICAgIDIyNCwgMjUxLCAyMzEsIDE3LCAyMjUsIDU4LCAyMCwgMSwgMTY3LCAyMjksIDIyNiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgCi0gICAgMjE5LCAyMjEsIDIwLCAxLCAxNjcsIDIxNiwgNjYsIDIzMSwgMTYsIDIwLCAxLCAxNjcsIDIyNywgMTE4LCAyMzEsIDE2LCAKLSAgICAyMCwgMSwgMTY3LCAyMjAsIDE5LCAyMjYsIDkwLCAyMjgsIDE2OSwgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIyNiwgOTAsIAotICAgIDIyOCwgMTcwLCAyMjUsIDU3LCAyMCwgMSwgMTY3LCAyMjQsIDI1MSwgMjI2LCA5MCwgMjI4LCAxNzAsIDIyNSwgNTgsIDIwLCAKLSAgICAxLCAxNjcsIDIzMSwgMjE4LCAyMCwgMSwgMTY3LCAyMTUsIDExOSwgMjMxLCAyMTksIDIwLCAxLCAxNjcsIDIyOSwgNzEsIAotICAgIDIwLCAxLCAxNjcsIDIzMSwgMjE1LCAyMCwgMSwgMTY3LCAyMzEsIDE3NiwgMjAsIDEsIDE2NywgMjMwLCA0OCwgMjAsIDEsIAotICAgIDE2NywgMjIwLCAxMjQsIDIwLCAxLCAxNjcsIDIyNywgMjQxLCAyMCwgMSwgMTY3LCAyMzQsIDE0OSwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCAxMzgsIDIwLCAxLCAxNjcsIDIxOCwgNCwgMjAsIDEsIDE2NywgMjI5LCAxMSwgMjAsIDEsIDE2NywgMjMzLCA4NywgCi0gICAgMjAsIDEsIDE2NywgMjMzLCAxMiwgMjMzLCAxODksIDIwLCAxLCAxNjcsIDIyNywgMjQ4LCAyMzEsIDI0LCAyMCwgMSwgMTY3LCAKLSAgICAyMzEsIDIyMiwgMjAsIDEsIDE2NywgMjI1LCAyNDYsIDIwLCAxLCAxNjcsIDI0MiwgMjMxLCAyMCwgMSwgMTY3LCAyMjYsIAotICAgIDUwLCAyMCwgMSwgMTY3LCAyMzAsIDE1MSwgMjI5LCA0NSwgMjAsIDEsIDE2NywgMjI3LCA5OSwgMjMxLCAyNywgMjAsIDEsIAotICAgIDE2NywgMTA0LCAyMTAsIDE4OCwgMjI5LCAyMjAsIDIwLCAxLCAxNjcsIDI0MiwgMjMyLCAyMCwgMSwgMTY3LCAyMjcsIDI0OCwgCi0gICAgMjI3LCAyNDksIDIwLCAxLCAxNjcsIDIxOSwgMTI4LCAyMCwgMSwgMTY3LCAyMzEsIDksIDIwLCAxLCAxNjcsIDIzMSwgMzAsIAotICAgIDIwLCAxLCAxNjcsIDIzMCwgMTMwLCAyMCwgMSwgMTY3LCAyMzQsIDI0OSwgMjAsIDEsIDE2NywgMjI2LCA5MCwgMjMzLCA0NywgCi0gICAgMjAsIDEsIDE2NywgMjI5LCAxNDksIDIzMywgNDcsIDIwLCAxLCAxNjcsIDIyNSwgMTU4LCAyMCwgMSwgMTY3LCAyMzEsIAotICAgIDIxNiwgMjAsIDEsIDE2NywgMjI4LCAyMDcsIDIwLCAxLCAxNjcsIDIyNCwgMTM0LCAyMCwgMSwgMTY3LCAyMTUsIDExNiwgCi0gICAgMjAsIDEsIDE2NywgMjMyLCA5NCwgMjAsIDEsIDE2NywgMjE5LCA0MSwgMjAsIDEsIDE2NywgMjE2LCAyMTYsIDIwLCAxLCAKLSAgICAxNjcsIDIzMSwgMjEzLCAyMCwgMSwgMTY3LCAyMzQsIDE1NiwgMjAsIDEsIDE2NywgMjI5LCAxNDUsIDIwLCAxLCAxNjcsIAotICAgIDIzMywgMjAxLCAyMCwgMSwgMTY3LCAyMzAsIDEzMSwgMjAsIDEsIDE2NywgMjE5LCAyMTgsIDIwLCAxLCAxNjcsIDIzMiwgCi0gICAgMTM4LCAyMCwgMSwgMTY3LCAyNDQsIDkzLCAyMCwgMSwgMTY3LCAyMjIsIDE5OSwgMjAsIDEsIDE2NywgMjMzLCAyNDEsIDIwLCAKLSAgICAxLCAxNjcsIDIxOSwgMzcsIDIwLCAxLCAxNjcsIDIzMSwgMTczLCAyMjUsIDk5LCAyMCwgMSwgMTY3LCAyMjAsIDEyLCAyMCwgCi0gICAgMSwgMTY3LCAyMjcsIDI0NywgMjAsIDEsIDE2NywgMjE5LCAyNTMsIDIyOCwgMiwgMjEwLCAxOTYsIDIwLCAxLCAxNjcsIAotICAgIDIyNywgMTM4LCAyMzAsIDE0OCwgMjAsIDEsIDE2NywgMjI2LCA4NSwgMjAsIDEsIDE2NywgMjI4LCAxMzksIDIwLCAxLCAKLSAgICAxNjcsIDIxNCwgMTcwLCAyMCwgMSwgMTY3LCAyMjksIDQ4LCAyMCwgMSwgMTY3LCAyMzEsIDIxMiwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCAxODEsIDIwLCAxLCAxNjcsIDIzMSwgMTE5LCAyMCwgMSwgMTY3LCAyMjcsIDE1MSwgMjAsIDEsIDE2NywgMjE2LCAKLSAgICAyMjAsIDIwLCAxLCAxNjcsIDIxOSwgMzQsIDIwLCAxLCAxNjcsIDIyNiwgODYsIDIwLCAxLCAxNjcsIDIyOCwgNiwgMjAsIDEsIAotICAgIDE2NywgMjMxLCAyMjAsIDIwLCAxLCAxNjcsIDIyNywgMTQ4LCAyMCwgMSwgMTY3LCAyMzQsIDIxNiwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCA5LCAyMCwgMSwgMTY3LCAyMTMsIDI1MCwgMjAsIDEsIDE2NywgMjMyLCA5OCwgMjAsIDEsIDE2NywgMjI5LCA5OCwgCi0gICAgMjAsIDEsIDE2NywgMjI5LCAxOTYsIDIwLCAxLCAxNjcsIDIzMSwgMTE4LCAyMCwgMSwgMjI1LCAxMzgsIDIyOCwgNCwgMjAsIAotICAgIDEsIDIyNSwgMTM4LCAyMTUsIDExOSwgMjMxLCAyMTcsIDIwLCAxLCAyMjUsIDEzOCwgMjE5LCAxODUsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjIwLCAxMjgsIDIxNSwgMTE4LCAyMCwgMSwgMjI1LCAxMzgsIDIzMiwgMTQwLCAyMjcsIDI0NCwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMzEsIDEyNSwgMjMxLCAyMjEsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCA4NywgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIAotICAgIDE1LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTIwLCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgMjM3LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIyNSwgMjA4LCAyMCwgMSwgMjI1LCAxMzgsIDIxMSwgODksIDIzMywgNDcsIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAKLSAgICAxMDMsIDIyOCwgMiwgMjI3LCAxNjAsIDIwLCAxLCAyMjUsIDEzOCwgMjI3LCAyNDIsIDIyMCwgMzgsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjI5LCAxMTYsIDIyOCwgMTg0LCAyMCwgMSwgMjI1LCAxMzgsIDI0MiwgMjI5LCAyMCwgMSwgMjI1LCAxMzgsIDIyNSwgCi0gICAgNDksIDIwLCAxLCAyMjUsIDEzOCwgMjE1LCAxMTksIDIyOCwgMCwgMjAsIDEsIDIyNSwgMTM4LCAyMjAsIDQzLCAyMjgsIAotICAgIDE3OSwgMjAsIDEsIDIyNSwgMTM4LCAyMjAsIDM5LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTcsIDIxNiwgMjE5LCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIzMSwgMTA3LCAyMzEsIDEyMSwgMjAsIDEsIDIyNSwgMTM4LCAyMjcsIDE0OSwgMjI3LCAyNDQsIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjM0LCAxNDUsIDIwLCAxLCAyMjUsIDEzOCwgMjQyLCAyMzAsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCAxNDEsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAxMjksIDIwLCAxLCAyMjUsIDEzOCwgMjI1LCAyNDksIDIwLCAxLCAyMjUsIDEzOCwgCi0gICAgMjEzLCAxODIsIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAxMywgMjMwLCA0NiwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDQ3LCAKLSAgICAyMzEsIDEwMywgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIDE5MywgMjAsIDEsIDIyNSwgMTM4LCAyMjIsIDExLCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIxNywgOTcsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyOSwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDMyLCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMzMsIDIzMywgODQsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxOSwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMTgsIDUyLCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTExLCAyMCwgMSwgMjI1LCAxMzgsIDIzMCwgMTMzLCAyMCwgCi0gICAgMSwgMjI1LCAxMzgsIDIyNywgMTYzLCAyMCwgMSwgMjI1LCAxMzgsIDIyNCwgMTM4LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgCi0gICAgMjgsIDIyOSwgNDksIDIwLCAxLCAyMjUsIDEzOCwgMjQ0LCAxMjYsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCA5OCwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyNDQsIDE0NywgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDE1MywgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDIzOSwgCi0gICAgMjI4LCAxNzMsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyMzksIDIyOCwgMTQ5LCAyMCwgMSwgMjI1LCAxMzgsIDIzMywgMTEsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCA1NSwgMjAsIDEsIDIyNSwgMTM4LCAyMjgsIDExLCAyMCwgMSwgMjI1LCAxMzgsIDE4NCwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDc0LCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMSwgMjAsIDEsIDEzNywgMjI5LCAxMiwgCi0gICAgMjMxLCAyMTksIDIwLCAxLCAxMzcsIDIyNywgMTE3LCAyMCwgMSwgMTM3LCAyMTAsIDE5NiwgMjAsIDEsIDEzNywgMjEyLCAKLSAgICA1MywgMjAsIDEsIDEzNywgMjI5LCA0OCwgMjAsIDEsIDEzNywgMjI5LCAxMzcsIDIwLCAxLCAxMzcsIDIyOSwgMTksIDIwLCAKLSAgICAxLCAxMzcsIDI0MiwgMjM5LCAyMCwgMSwgMTM3LCAyMzEsIDExNSwgMjAsIDEsIDEzNywgMjQzLCA3NywgMjAsIDEsIDEzNywgCi0gICAgMjI3LCAxNDAsIDIzMCwgMTcwLCAyMzEsIDMxLCAyMCwgMSwgMTM3LCAyMjcsIDI0MCwgMjMxLCAxMDYsIDIwLCAxLCAxMzcsIAotICAgIDIzMSwgMTEyLCAyMCwgMSwgMTM3LCAyMjUsIDU1LCAyMCwgMSwgMTM3LCAyMjksIDEyMiwgMjAsIDEsIDEzNywgMjMxLCAKLSAgICAxMjMsIDI1MSwgMjksIDIwLCAxLCAxMzcsIDIzNCwgMTQzLCAyMCwgMSwgMTM3LCAyNDIsIDI0MCwgMjAsIDEsIDEzNywgCi0gICAgMjM0LCAxNTAsIDIwLCAxLCAxMzcsIDIxMCwgMjEzLCAyMzAsIDc2LCAyMCwgMSwgMTM3LCAyMjcsIDExMSwgMjAsIDEsIAotICAgIDEzNywgMjMxLCAxMDAsIDIwLCAxLCAxMzcsIDIyOCwgMTAsIDIwLCAxLCAxMzcsIDIzMSwgMTA2LCAyMCwgMSwgMTM3LCAKLSAgICAyMTEsIDE2LCAyMCwgMSwgMTM3LCAyMzMsIDI0OSwgMjAsIDEsIDEzNywgMjM1LCAxMCwgMjAsIDEsIDEzNywgMjIwLCAxMjMsIAotICAgIDIwLCAxLCAxMzcsIDIyOSwgMTMxLCAyMCwgMSwgMTM3LCAyMTcsIDk1LCAyMCwgMSwgMTM3LCAyMjgsIDE1MywgMjAsIDEsIAotICAgIDEzNywgMjE2LCA2NiwgMjEwLCAxOTgsIDIwLCAxLCAxMzcsIDIxOCwgNzksIDIwLCAxLCAxMzcsIDIyOSwgMzksIDIyNywgCi0gICAgMTYwLCAyMCwgMSwgMTM3LCAyMTMsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAxOTksIDIwLCAxLCAxMzcsIDIzMSwgMjM5LCAKLSAgICAyMzQsIDE1MiwgMjAsIDEsIDEzNywgMjI3LCAyNDksIDIwLCAxLCAxMzcsIDIyOSwgMzQsIDIwLCAxLCAxMzcsIDIzMywgODgsIAotICAgIDIwLCAxLCAxMzcsIDIzMSwgMTA4LCAyMCwgMSwgMTM3LCAyMzEsIDgsIDIwLCAxLCAxMzcsIDIyNywgMjQzLCAyMCwgMSwgCi0gICAgMTM3LCAyMTYsIDIxNSwgMjAsIDEsIDEzNywgMjI5LCAzNiwgMjAsIDEsIDEzNywgMjQzLCAyMzMsIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgMTM2LCAyMCwgMSwgMTM3LCAyMjgsIDEyLCAyMCwgMSwgMTM3LCAyMjgsIDgsIDIwLCAxLCAxMzcsIDI1MSwgMTA3LCAKLSAgICAyMCwgMSwgMTM3LCAyMTMsIDE4MywgMjAsIDEsIDEzNywgMjMxLCAxMTMsIDIwLCAxLCAxMzcsIDIyMiwgMTQwLCAyMCwgMSwgCi0gICAgMTM3LCAyMjgsIDE4MywgMjAsIDEsIDEzNywgMjMzLCAxMDIsIDIwLCAxLCAxMzcsIDIxNiwgNjQsIDIwLCAxLCAxMzcsIAotICAgIDIyNywgMjUwLCAyMjksIDEsIDIwLCAxLCAxMzcsIDIyOCwgMTc1LCAyMCwgMSwgMTM3LCAyMzQsIDE1NiwgMjAsIDEsIDEzNywgCi0gICAgMjI5LCA0MCwgMjAsIDEsIDEzNywgMjMxLCAyMTIsIDIwLCAxLCAxMzcsIDIzMSwgMTAxLCAyMCwgMSwgMTM3LCAyMzIsIDk4LCAKLSAgICAyMCwgMSwgMTM3LCAyMzMsIDE4OSwgMjAsIDEsIDEzNywgMjI4LCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMSwgMjAsIDEsIAotICAgIDEzNywgMjExLCAxODQsIDIwLCAxLCAxMzcsIDIyOSwgMzcsIDIwLCAxLCAxMzcsIDIyNywgMjUzLCAyMCwgMSwgMTM3LCAKLSAgICAyMjcsIDI0NSwgMjAsIDEsIDEzNywgMjMzLCAyMDMsIDIyOCwgMTM5LCAyMCwgMSwgMTM3LCAyMjcsIDI1MSwgMjAsIDEsIAotICAgIDEzNywgMjI5LCAxNDQsIDIwLCAxLCAxMzcsIDIzMSwgMjM5LCAyMjgsIDAsIDIwLCAxLCAxMzcsIDIxMSwgMTAzLCAyMCwgMSwgCi0gICAgMTM3LCAyMjksIDE0MywgMjAsIDEsIDEzNywgMjE5LCAyMjAsIDIwLCAxLCAxMzcsIDIyMCwgMTI2LCAyMCwgMSwgMTM3LCAKLSAgICAyMzEsIDEwOSwgMjAsIDEsIDEzNywgMjMxLCAyMTksIDIwLCAxLCAxMzcsIDIzMSwgMTE5LCAyMCwgMSwgMTM3LCAyMzQsIAotICAgIDE0NCwgMjAsIDEsIDEzNywgMjMxLCAxMTAsIDIwLCAxLCAxMzcsIDIzNCwgMTQ4LCAyMCwgMSwgMTM3LCAyMzEsIDEyMywgCi0gICAgMjI1LCAxMDMsIDIwLCAxLCAxMzcsIDIxMCwgMTc5LCAyMCwgMSwgMTM3LCAyMjgsIDE3MSwgMjAsIDEsIDEzNywgMjMwLCAKLSAgICAyMjAsIDIwLCAxLCAxMzcsIDIzMCwgMTAwLCAyMCwgMSwgMTM3LCAyMjAsIDE1LCAyMCwgMSwgMTM3LCAyMzQsIDE2NiwgCi0gICAgMjMzLCA3MCwgMjAsIDEsIDEzNywgMjM0LCAxNjYsIDI0NCwgMTYwLCAyMCwgMSwgMTM3LCAyMjksIDY5LCAyMCwgMSwgMTM3LCAKLSAgICAyMjksIDE5NiwgMjAsIDEsIDEzNywgMjMyLCAyMDAsIDIwLCAxLCAxMzcsIDIyNSwgNjUsIDIwLCAxLCAxMzcsIDIyNSwgCi0gICAgMTk5LCAyMCwgMSwgMTM3LCAyMTYsIDIzMCwgMjAsIDEsIDEwNywgMjMxLCA5OSwgMjAsIDEsIDEwNywgMjEyLCA1MSwgMjAsIAotICAgIDEsIDEwNywgMjI4LCAxNjksIDIwLCAxLCAxMDcsIDIzMSwgMTYsIDIwLCAxLCAxMDcsIDIyOCwgMTY3LCAyMCwgMSwgMTA3LCAKLSAgICAyMzIsIDIzNSwgMjAsIDEsIDEwNywgMjI4LCAxNzIsIDIwLCAxLCAxMDcsIDIyOCwgNywgMjAsIDEsIDEwNywgMjI5LCA1NCwgCi0gICAgMjAsIDEsIDEwNywgMjI3LCAxNjAsIDIwLCAxLCAxMDcsIDIxMSwgMTk0LCAyMCwgMSwgMTA3LCAyMjksIDksIDIwLCAxLCAKLSAgICAxMDcsIDIyMCwgNjEsIDIwLCAxLCAxMDcsIDIyOSwgMjAsIDIwLCAxLCAxMDcsIDIzNCwgMTUxLCAyMCwgMSwgMTA3LCAyMTYsIAotICAgIDIxNywgMjAsIDEsIDEwNywgMjIwLCA0MSwgMjAsIDEsIDEwNywgMjI4LCAxODAsIDIwLCAxLCAxMDcsIDIxOCwgNTIsIDIwLCAKLSAgICAxLCAxMDcsIDIzNCwgMTU2LCAyMCwgMSwgMTA3LCAyMTEsIDkxLCAyMCwgMSwgMTA3LCAyMzMsIDIwNCwgMjAsIDEsIDEwNywgCi0gICAgMjIxLCAyMzQsIDIwLCAxLCAxMDcsIDIzMSwgMjEsIDIwLCAxLCAxMDcsIDIyOSwgMTM1LCAyMCwgMSwgMTA3LCAyMzEsIAotICAgIDE4OCwgMjAsIDEsIDEwNywgMjMxLCAyNywgMjAsIDEsIDEwNywgMjIwLCAxMjUsIDIwLCAxLCAxMDcsIDIxMSwgMzksIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMTc0LCAyMCwgMSwgMTA3LCAyMzQsIDE0NywgMjMxLCAxMDIsIDIwLCAxLCAxMDcsIDIyOSwgMTYsIAotICAgIDIwLCAxLCAxMDcsIDIxNSwgMTE4LCAyMCwgMSwgMTA3LCAyNDIsIDI0OCwgMjAsIDEsIDEwNywgMjI5LCA2LCAyMCwgMSwgCi0gICAgMTA3LCAyNDQsIDEyNywgMjAsIDEsIDEwNywgMjI5LCAxMzksIDIwLCAxLCAxMDcsIDIzMSwgMCwgMjAsIDEsIDEwNywgMjMzLCAKLSAgICA1LCAyMCwgMSwgMTA3LCAyMjksIDEyMSwgMjAsIDEsIDEwNywgMjMwLCAxNDcsIDIwLCAxLCAxMDcsIDIzMSwgNCwgMjAsIDEsIAotICAgIDEwNywgMjI0LCAxMTgsIDIwLCAxLCAxMDcsIDIzMSwgMiwgMjAsIDEsIDEwNywgMjMxLCAxOCwgMjAsIDEsIDEwNywgMjMyLCAKLSAgICA4NCwgMjAsIDEsIDEwNywgMjI3LCAyNTUsIDIwLCAxLCAxMDcsIDIzMSwgMTIyLCAyMCwgMSwgMTA3LCAyMzMsIDE4MCwgMjAsIAotICAgIDEsIDEwNywgMjI3LCAxNTEsIDIwLCAxLCAxMDcsIDIxNiwgMjIwLCAyMCwgMSwgMTA3LCAyMTksIDM0LCAyMCwgMSwgMTA3LCAKLSAgICAyMTAsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNDgsIDIwLCAxLCAxMDcsIDIyMywgMTcwLCAyMCwgMSwgMTA3LCAyMTcsIAotICAgIDEwLCAyMCwgMSwgMTA3LCAyMjksIDE3LCAyMCwgMSwgMTA3LCAyMzEsIDIzLCAyMCwgMSwgMTA3LCAyMjcsIDI1NCwgMjAsIAotICAgIDEsIDEwNywgMjM0LCAxNDYsIDIwLCAxLCAxMDcsIDIyNSwgNTksIDIwLCAxLCAxMDcsIDIyNSwgMTUyLCAyMCwgMSwgMTA3LCAKLSAgICAyMjcsIDEyNywgMjAsIDEsIDEwNywgMjMzLCAxMSwgMjAsIDEsIDEwNywgMjI5LCA1NSwgMjAsIDEsIDEwNywgMjMxLCAyMCwgCi0gICAgMjAsIDEsIDEwNywgMjI5LCAyOSwgMjAsIDEsIDEwNywgMjEwLCAxOTMsIDIwLCAxLCAxMDcsIDIyNiwgMjEsIDIwLCAxLCAKLSAgICAxMDcsIDIxMCwgMTkyLCAyMCwgMSwgMTA3LCAyMjksIDE0NCwgMjAsIDEsIDEwNywgMjI3LCAyNDQsIDIwLCAxLCAxMDcsIAotICAgIDIxOCwgODEsIDIwLCAxLCAxMDcsIDIzMywgMjA4LCAyMCwgMSwgMTA3LCAyMjksIDQ0LCAyMCwgMSwgMTA3LCAyMjksIDE0LCAKLSAgICAyMCwgMSwgMTA3LCAyMTUsIDEwMiwgMjAsIDEsIDEwNywgMjMxLCAzMSwgMjAsIDEsIDEwNywgMjMzLCAxOTgsIDIwLCAxLCAKLSAgICAxMDcsIDIyNywgMjUyLCAyMCwgMSwgMTA3LCAyMTYsIDIxOCwgMjAsIDEsIDEwNywgMjMxLCAyMTQsIDIwLCAxLCAxMDcsIAotICAgIDIyOSwgNTMsIDIwLCAxLCAxMDcsIDIzMywgNCwgMjAsIDEsIDEwNywgMjI5LCAzNSwgMjAsIDEsIDEwNywgMjI4LCAxLCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDE1MywgMjAsIDEsIDEwNywgMjQyLCAyMzMsIDIwLCAxLCAxMDcsIDIzMywgMjE3LCAyMCwgMSwgMTA3LCAKLSAgICAyMjMsIDg0LCAyMjYsIDIwOSwgMjAsIDEsIDEwNywgMjE3LCA4NiwgMjAsIDEsIDEwNywgMjE2LCAxMCwgMjAsIDEsIDEwNywgCi0gICAgMjI3LCAxNDgsIDIwLCAxLCAxMDcsIDIyMiwgMjM5LCAyMCwgMSwgMTA3LCAyMzMsIDQ5LCAyMCwgMSwgMTA3LCAyMzEsIDc5LCAKLSAgICAyMCwgMSwgMTA3LCAxOTMsIDIwLCAxLCAxMDcsIDIxOCwgNCwgMjAsIDEsIDEwNywgMjMwLCAxMDIsIDIwLCAxLCAxMDcsIAotICAgIDIyMCwgMjcsIDIwLCAxLCAxMDcsIDIyMCwgMzcsIDIwLCAxLCAxMDcsIDIzMywgMTU1LCAyMCwgMSwgMTA3LCAyMjcsIDIzNywgCi0gICAgMjAsIDEsIDEwNywgMjE5LCAyMjUsIDIwLCAxLCAxMDcsIDIyNywgMjQ2LCAyMCwgMSwgMTA3LCAyMjUsIDIxMSwgMjAsIDEsIAotICAgIDEwNywgMjI4LCAyMzMsIDIwLCAxLCAxMDcsIDIxOSwgMjUyLCAyMCwgMSwgMTA3LCAyMjQsIDEzMywgMjAsIDEsIDEwNywgCi0gICAgMjMwLCA0NiwgMjAsIDEsIDEwNywgMjMyLCAxMTksIDIwLCAxLCAxMDcsIDIyMywgODQsIDIzMCwgOTYsIDIwLCAxLCAxMDcsIAotICAgIDIxNiwgMTE3LCAyMCwgMSwgMTA3LCAyMjcsIDIzOCwgMjAsIDEsIDEwNywgMjMxLCAxMjMsIDE5OCwgMjAsIDEsIDEwNywgCi0gICAgMjIxLCAyMzIsIDIwLCAxLCAxMDcsIDI0NCwgMTk1LCAyMCwgMSwgODIsIDIyOSwgMTQzLCAyMCwgMSwgODIsIDIxNiwgMTYsIAotICAgIDIwLCAxLCA4MiwgMjMxLCAxMTIsIDIwLCAxLCA4MiwgMjMzLCA4OCwgMjAsIDEsIDgyLCAyMTMsIDEyOCwgMjAsIDEsIDgyLCAKLSAgICAyMzIsIDEyNSwgMjAsIDEsIDgyLCAyMjYsIDg5LCAyMCwgMSwgODIsIDIxOSwgNDUsIDIwLCAxLCA4MiwgMjIzLCAxNDUsIAotICAgIDIwLCAxLCA4MiwgMjI4LCAzLCAyMCwgMSwgODIsIDIyOSwgMTE0LCAyMCwgMSwgODIsIDIyNCwgMTQ3LCAyMCwgMSwgODIsIAotICAgIDIxNywgNjIsIDIwLCAxLCA4MiwgMjI5LCAyMiwgMjAsIDEsIDgyLCAyMzMsIDI0NSwgMjAsIDEsIDgyLCAyMTEsIDE4NywgCi0gICAgMjAsIDEsIDgyLCAyMjEsIDE3MCwgMjAsIDEsIDgyLCAyMjksIDQ1LCAyMCwgMSwgODIsIDIyNiwgODYsIDIwLCAxLCA4MiwgCi0gICAgMjE2LCAxNywgMjAsIDEsIDgyLCAyMzMsIDIwMiwgMjAsIDEsIDgyLCAyMzIsIDEzOSwgMjAsIDEsIDgyLCAyMjgsIDYsIDIwLCAKLSAgICAxLCA4MiwgMjI4LCAyNTQsIDIwLCAxLCA4MiwgMjMxLCAyMjAsIDIwLCAxLCA4MiwgMjI5LCAxNSwgMjAsIDEsIDgyLCAyMjgsIAotICAgIDI1MywgMjAsIDEsIDgyLCAyMjgsIDUsIDIwLCAxLCA4MiwgMjIyLCAyMzcsIDIwLCAxLCA4MiwgMjI4LCAxNzEsIDIwLCAxLCAKLSAgICA4MiwgMjI1LCAyMTAsIDIwLCAxLCA4MiwgMjIyLCAzMSwgMjAsIDEsIDgyLCAyMjksIDMwLCAyMCwgMSwgODIsIDIzMSwgMTAsIAotICAgIDIwLCAxLCA4MiwgMjQyLCAyMjcsIDIwLCAxLCA4MiwgMjI5LCAxOCwgMjAsIDEsIDgyLCAyMjgsIDE4MiwgMjAsIDEsIDgyLCAKLSAgICAyMzEsIDE3MiwgMjAsIDEsIDgyLCAyMzIsIDEyMSwgMjAsIDEsIDgyLCAyMjksIDUwLCAyMCwgMSwgODIsIDIyOSwgMTI3LCAKLSAgICAyMCwgMSwgODIsIDIxNywgODUsIDIyNywgMjQ0LCAyMCwgMSwgODIsIDIyMCwgMTI3LCAyMCwgMSwgODIsIDIyNCwgMTQzLCAKLSAgICAyMCwgMSwgODIsIDIyOSwgMTQ3LCAyMTksIDUxLCAyMCwgMSwgODIsIDIyOSwgMzgsIDIyNywgMTYwLCAyMCwgMSwgODIsIAotICAgIDIxMSwgNCwgMjAsIDEsIDgyLCAyNDIsIDIyOCwgMjAsIDEsIDgyLCAyMTUsIDExNywgMjAsIDEsIDgyLCAyMTEsIDE5LCAyMCwgCi0gICAgMSwgODIsIDIyNSwgMTYsIDIwLCAxLCA4MiwgMjE1LCAxMDcsIDIwLCAxLCA4MiwgMjM0LCAxNTQsIDIwLCAxLCA4MiwgMjE4LCAKLSAgICA4MCwgMjAsIDEsIDgyLCAyMTYsIDIxOSwgMjAsIDEsIDgyLCAyMTMsIDE4NCwgMjAsIDEsIDgyLCAyMTIsIDYsIDIwLCAxLCAKLSAgICA4MiwgMjMzLCAxMzIsIDIwLCAxLCA4MiwgMjI0LCAxNTAsIDIwLCAxLCA4MiwgMjE3LCA5NiwgMjAsIDEsIDgyLCAyNDIsIAotICAgIDI0NywgMjAsIDEsIDgyLCAyMjksIDU5LCAyMCwgMSwgODIsIDIyMCwgNDAsIDIwLCAxLCA4MiwgMjMxLCA1LCAyMCwgMSwgCi0gICAgODIsIDIzMSwgMTE2LCAyMCwgMSwgODIsIDIyNywgMTE1LCAyMCwgMSwgODIsIDIyOCwgMTM2LCAyMCwgMSwgODIsIDI0MywgCi0gICAgNzMsIDIwLCAxLCA4MiwgMjE1LCAxMDgsIDIwLCAxLCA4MiwgMjMzLCAyMTEsIDIwLCAxLCA4MiwgMjExLCA2NywgMjAsIDEsIAotICAgIDgyLCAyMjcsIDE0OSwgMjUwLCAxNiwgMjAsIDEsIDgyLCAyMTAsIDI1MCwgMjAsIDEsIDgyLCAyMzEsIDIyLCAyMCwgMSwgCi0gICAgODIsIDIyOSwgMTMyLCAyMCwgMSwgODIsIDIyNSwgMTAwLCAyMCwgMSwgODIsIDIxMCwgMTk3LCAyMCwgMSwgODIsIDIzMywgCi0gICAgNiwgMjAsIDEsIDgyLCAyNDMsIDIzMywgMjAsIDEsIDgyLCAyNDMsIDcyLCAyMCwgMSwgODIsIDIyOSwgOCwgMjAsIDEsIDgyLCAKLSAgICAyMzQsIDE1NiwgMjAsIDEsIDgyLCAyMzEsIDIyMywgMjAsIDEsIDgyLCAyMjksIDIxLCAyMCwgMSwgODIsIDI0MiwgMjM0LCAKLSAgICAyMCwgMSwgODIsIDI0NCwgMTk2LCAyMCwgMSwgODIsIDIyNywgMjM5LCAyMCwgMSwgODIsIDIyNSwgMTUzLCAyMCwgMSwgODIsIAotICAgIDIxMSwgMTcsIDIwLCAxLCA4MiwgMjI5LCA0NiwgMjAsIDEsIDgyLCAyMjcsIDE0OSwgMjUyLCAyMywgMjAsIDEsIDgyLCAKLSAgICAyMjcsIDk1LCAyMCwgMSwgODIsIDIyNCwgMjQ3LCAyMCwgMSwgODIsIDIzMCwgMjIwLCAyMCwgMSwgODIsIDI0MywgMjMxLCAKLSAgICAyMCwgMSwgODIsIDIyOSwgMjIwLCAyMCwgMSwgODIsIDIzMCwgMTAwLCAyMCwgMSwgODIsIDI0MiwgMjMzLCAyMCwgMSwgODIsIAotICAgIDI0MywgMjM1LCA3MywgMjAsIDEsIDgyLCAyMzAsIDQ3LCAyMCwgMSwgODIsIDIyNCwgMTQ2LCAyMCwgMSwgODIsIDIyOSwgCi0gICAgMTAsIDIwLCAxLCA4MiwgMjMzLCAxODksIDIwLCAxLCA4MiwgMjI1LCA5NywgMjAsIDEsIDgyLCAyMjcsIDI0NywgMjAsIDEsIAotICAgIDgyLCAyMTEsIDE4LCAyMCwgMSwgODIsIDIyOSwgMzEsIDIwLCAxLCA4MiwgMjI2LCA5MCwgMjI1LCAxODcsIDIwLCAxLCA4MiwgCi0gICAgMjQzLCAyMzUsIDI1MSwgMTUsIDIwLCAxLCA4MiwgMjQ0LCAzNywgMjAsIDEsIDgyLCAyMjgsIDE3NiwgMjAsIDEsIDgyLCAKLSAgICA2MSwgMjAsIDEsIDgyLCAyMTYsIDEwLCAyMCwgMSwgODIsIDc2LCAyMCwgMSwgODIsIDczLCAyMCwgMSwgODIsIDIzMywgODYsIAotICAgIDIwLCAxLCA4MiwgMjI2LCA5MCwgMjI1LCAyMywgMjAsIDEsIDgyLCAyMTcsIDEwMSwgMjAsIDEsIDgyLCAyMTcsIDUxLCAyMCwgCi0gICAgMSwgODIsIDIyOSwgMTQ3LCAyMzAsIDM0LCAyNDAsIDIzNCwgMjAsIDEsIDgyLCAyMjAsIDE1LCAyMCwgMSwgODIsIDIxMSwgCi0gICAgMTQsIDIwLCAxLCA4MiwgMjI4LCAyNDcsIDIwLCAxLCA4MiwgMjEwLCAyMDIsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDIxNywgCi0gICAgMjQwLCAyMCwgMSwgODIsIDIxMCwgMjI3LCAyNDksIDE0NywgMjAsIDEsIDgyLCAyMTAsIDE4NywgMjAsIDEsIDgyLCAyMTAsIAotICAgIDE5NSwgMjAsIDEsIDgyLCAyMzQsIDE0MiwgMjAsIDEsIDgyLCAyMjUsIDE1MSwgMjAsIDEsIDgyLCAyMjgsIDE3NywgMjQ1LCAKLSAgICAxMDIsIDIwLCAxLCA4MiwgMjI0LCAxNDQsIDIwLCAxLCA4MiwgMjExLCAxOTIsIDIwLCAxLCA4MiwgMjQ0LCAxNDcsIDIwLCAKLSAgICAxLCA4MiwgMjEzLCAyNTAsIDIwLCAxLCA4MiwgMjMyLCA5OCwgMjAsIDEsIDgyLCAyMzAsIDIzMCwgMjAsIDEsIDgyLCAyMjMsIAotICAgIDUxLCAyMCwgMSwgODIsIDIyMywgMTcxLCAyMCwgMSwgODIsIDIyOCwgMjQ2LCAyMCwgMSwgODIsIDIyOSwgNzcsIDIwLCAxLCAKLSAgICA4MiwgMjIwLCA3LCAyMCwgMSwgODIsIDIxOSwgMjUyLCAyMCwgMSwgODIsIDI0MywgMjM1LCAyMjMsIDg2LCAyMCwgMSwgODIsIAotICAgIDE5NywgMjAsIDEsIDgyLCAyMjUsIDEwOCwgMjAsIDEsIDgyLCAyMzIsIDExOSwgMjAsIDEsIDgyLCAyMzQsIDI4LCAyMCwgMSwgCi0gICAgODIsIDIzMSwgNTgsIDIwLCAxLCA4MiwgMTg0LCAyMCwgMSwgODIsIDIzMSwgMTY5LCAyMCwgMSwgODIsIDIxNiwgMjIxLCAKLSAgICAyMCwgMSwgODIsIDIzNCwgOTIsIDIwLCAxLCA4MiwgMjMwLCAxNTAsIDIwLCAxLCA4MiwgMjE2LCAyNDcsIDIwLCAxLCA4MiwgCi0gICAgMjQ0LCAxNjksIDIwLCAxLCA4MiwgMjQyLCAyMjMsIDIwLCAxLCAyMjUsIDEzNywgMTc2LCAyMCwgMSwgMjI1LCAxMzcsIDcwLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIzMywgMjE3LCAyMCwgMSwgMjI1LCAxMzcsIDI0NSwgMjA5LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyMywgMTA4LCAyMCwgMSwgMjI1LCAxMzcsIDIxNywgODYsIDIwLCAxLCAyMjUsIDEzNywgMjI3LCAxNDgsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjMzLCAxMzUsIDIwLCAxLCAyMjUsIDEzNywgMjIyLCAyMzksIDIwLCAxLCAyMjUsIDEzNywgMjIzLCAyOSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzEsIDc5LCAyMCwgMSwgMjI1LCAxMzcsIDIxNywgMTAxLCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyOSwgMTQ2LCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgMTgzLCAyMCwgMSwgMjI1LCAxMzcsIDE5MywgMjAsIDEsIDIyNSwgCi0gICAgMTM3LCAyMTgsIDQsIDIwLCAxLCAyMjUsIDEzNywgMjIwLCAyNywgMjAsIDEsIDIyNSwgMTM3LCAyMTksIDE5MSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyMjAsIDEyMywgMjAsIDEsIDIyNSwgMTM3LCAyMzMsIDE1NSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDE1NiwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDIwOSwgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDIzNywgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjgsIDE1NCwgMjAsIDEsIDIyNSwgMTM3LCAyMTAsIDIyNiwgMjAsIDEsIDIyNSwgMTM3LCAyMTksIDIyNSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAxOTEsIDIwLCAxLCAyMjUsIDEzNywgMjI4LCA5LCAyMCwgMSwgMjI1LCAxMzcsIDIyNSwgMTUxLCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDIyNywgMjQ2LCAyMCwgMSwgMjI1LCAxMzcsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAxMzcsIDIyNSwgMjExLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIyMiwgMTQwLCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgMjMzLCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyMywgNTEsIDIwLCAxLCAyMjUsIDEzNywgMjM0LCAxNjUsIDIwLCAxLCAyMjUsIDEzNywgMjI5LCA3LCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIyOSwgNTYsIDIwLCAxLCAyMjUsIDEzNywgMjIwLCA3LCAyMCwgMSwgMjI1LCAxMzcsIDIyNCwgMTQ3LCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDI0NCwgMzcsIDIwLCAxLCAyMjUsIDEzNywgMjEyLCA2NSwgMjAsIDEsIDIyNSwgMTM3LCAyMzIsIDI0MSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzIsIDExOSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDI4LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIzMSwgMTE0LCAyMCwgMSwgMjI1LCAxMzcsIDIyMywgODMsIDIwLCAxLCAyMjUsIDEzNywgMTg0LCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIzMCwgMTYxLCAyMCwgMSwgMjI1LCAxMzcsIDIzMSwgMTIyLCAyMCwgMSwgMjI1LCAxMzcsIDIxNiwgMjMwLCAyMCwgCi0gICAgMSwgMjI1LCAxMzcsIDIzMywgMjUxLCAyMCwgMSwgMjI1LCAxMzcsIDIyMSwgMjUxLCAyMCwgMSwgMjI1LCAxMzcsIDIxMiwgCi0gICAgMTE1LCA5NSwgMSwgMTkwLCA5NSwgMSwgMjUyLCAxOTEsIDk1LCAxLCA4LCAxOTAsIDk1LCAxLCAyMjUsIDQyLCA5NSwgMSwgCi0gICAgMTg0LCA5NSwgMSwgMjMwLCAyMzMsIDk1LCAxLCAyNTQsIDIzLCAxODQsIDk1LCAxLCAyNDQsIDE5NiwgOTUsIDEsIDIxNCwgCi0gICAgMjcsIDk1LCAxLCAyMTMsIDE3NywgOTUsIDEsIDIxNywgMTA1LCA5NSwgMSwgMjQ4LCAyMjEsIDk1LCAxLCA4LCAyMTUsIAotICAgIDE1NiwgOTUsIDEsIDgsIDIxNywgMTA1LCA5NSwgMSwgMjE1LCAxNTYsIDk1LCAxLCAyNDgsIDEzNSwgOTUsIDEsIDE5NywgCi0gICAgOTUsIDEsIDIyOCwgMjM3LCA5NSwgMSwgOCwgMjI4LCAxMTAsIDk1LCAxLCAyNTQsIDIzLCAxOTcsIDk1LCAxLCAyMjgsIAotICAgIDExMCwgOTUsIDEsIDIyOCwgOTYsIDk1LCAxLCAyMzMsIDEzNSwgOTUsIDEsIDIzMiwgNjEsIDk1LCAxLCAyMzIsIDI1NCwgCi0gICAgOTUsIDEsIDIzMiwgMjQzLCA5NSwgMSwgMjE2LCA1NiwgOTUsIDEsIDI0NywgMTUzLCA5NSwgMSwgMjE2LCA0OCwgOTUsIDEsIAotICAgIDI0NywgMTUyLCA5NSwgMSwgMTc2LCA5NSwgMSwgMjQzLCAxMzUsIDk1LCAxLCA4LCAxNzYsIDk1LCAxLCAyMjQsIDg4LCA5NSwgCi0gICAgMSwgMjI0LCA2NiwgOTUsIDEsIDIyOSwgNzcsIDk1LCAxLCAyMjksIDI4LCA5NSwgMSwgMjU0LCAyMywgMjI5LCA3NywgOTUsIAotICAgIDEsIDE2MiwgOTUsIDEsIDIxMSwgMTY1LCA5NSwgMSwgMjQyLCAyNDksIDk1LCAxLCAyNDIsIDIyNiwgOTUsIDEsIDIxNSwgCi0gICAgMTY1LCA5NSwgMSwgMjQ2LCAyNiwgOTUsIDEsIDIyNywgMTY1LCA5NSwgMSwgMjI3LCAxNTAsIDk1LCAxLCAyMTUsIDE3NSwgCi0gICAgOTUsIDEsIDI0NiwgMzMsIDk1LCAxLCA4LCAyMTUsIDE3NSwgOTUsIDEsIDgsIDI0NiwgMzMsIDk1LCAxLCAyMjMsIDEwNiwgCi0gICAgMjE1LCAxNzUsIDk1LCAxLCAyMjAsIDEwMiwgOTUsIDEsIDIxOCwgMjIzLCA5NSwgMSwgMjEwLCA4MiwgOTUsIDEsIDIxMCwgCi0gICAgMTQsIDk1LCAxLCAyMTUsIDE4MywgOTUsIDEsIDI0NiwgMzgsIDk1LCAxLCA4LCAyMTUsIDE4MywgOTUsIDEsIDIwNiwgOTUsIAotICAgIDEsIDIxMCwgMTE2LCA5NSwgMSwgMjEwLCAxNSwgOTUsIDEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMjMsIDk1LCAxLCAKLSAgICAyNTQsIDIzLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjE1LCA5NSwgMSwgMjA5LCAyMjIsIDk1LCAxLCAyMTIsIDY1LCA5NSwgCi0gICAgMSwgMjU0LCAyMDksIDk1LCAxLCAyNDEsIDE4OSwgOTUsIDEsIDIyOSwgMTkyLCA5NSwgNSwgMjUzLCAyMjIsIDk1LCA1LCAKLSAgICAyMjMsIDEwNiwgMjEzLCAxMzMsIDk1LCA1LCAyMjMsIDEwNiwgMjUzLCAyMjIsIDk1LCAyNSwgNSwgNjEsIDk1LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgOTUsIDI1LCA1LCAyNTQsIDIwNSwgOTUsIDI1LCA1LCAyNTQsIDEyMywgOTUsIDI1LCA1LCAyNTQsIDExNSwgCi0gICAgOTUsIDI1LCA1LCA3NiwgOTUsIDI1LCA1LCAyMjYsIDE4MywgOTUsIDI1LCA1LCAyMTEsIDIyNywgOTUsIDI1LCA1LCAyMTIsIAotICAgIDk4LCA5NSwgMjUsIDUsIDc1LCA5NSwgMjUsIDUsIDI0NSwgMTUwLCA5NSwgMjUsIDUsIDI0NSwgMTM4LCA5NSwgMjUsIDUsIAotICAgIDIyNiwgMjMyLCA5NSwgMjUsIDUsIDczLCA5NSwgMjUsIDUsIDI0MCwgMTE5LCA5NSwgMjUsIDUsIDI0MCwgMTE4LCA5NSwgCi0gICAgMjUsIDUsIDI0MCwgMTE3LCA5NSwgMjUsIDUsIDIzNSwgMTg5LCA5NSwgMjUsIDUsIDIzNiwgNjAsIDk1LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgOTUsIDI1LCA1LCAyMzUsIDE1NiwgOTUsIDI1LCA1LCAyMzUsIDIzMSwgOTUsIDI1LCA1LCA3MCwgOTUsIDI1LCA1LCAKLSAgICAyMTQsIDIyOSwgOTUsIDI1LCA1LCAyMTQsIDIyOCwgOTUsIDI1LCA1LCAyMTQsIDIyNywgOTUsIDI1LCA1LCAyMTQsIDExOCwgCi0gICAgOTUsIDI1LCA1LCAyMTQsIDIxMSwgOTUsIDI1LCA1LCAyMTQsIDE3OCwgOTUsIDI1LCA1LCAyMTEsIDExNywgOTUsIDI1LCA1LCAKLSAgICAyMTEsIDgsIDk1LCAyNSwgNSwgMjU0LCAyNDMsIDk1LCAyNSwgNSwgMjU0LCAyMzksIDk1LCAyNSwgNSwgMjQ1LCA4NiwgOTUsIAotICAgIDI1LCA1LCAyMjIsIDE4MywgMjQ1LCA4NiwgOTUsIDI1LCA1LCAyNDUsIDkyLCA5NSwgMjUsIDUsIDIyMiwgMTgzLCAyNDUsIAotICAgIDkyLCA5NSwgMjUsIDUsIDI1NCwgMjAxLCA5NSwgMjUsIDUsIDI0NSwgMTk1LCA5NSwgMjUsIDUsIDI1MywgMTkyLCA5NSwgCi0gICAgMjUsIDUsIDIyNiwgMTM0LCA5NSwgMjUsIDUsIDIzMCwgMjUsIDk1LCAyNSwgNSwgMjI5LCA3OSwgOTUsIDEzOCwgMjIyLCAKLSAgICAyNTEsIDk1LCAxMzgsIDIxNiwgMTQsIDIyMiwgMjUxLCA5NSwgMTM4LCA0OCwgOTUsIDEzOCwgNTEsIDk1LCAxLCAyMTYsIAotICAgIDI4LCA5NSwgMSwgMjE2LCAyNywgOTUsIDEsIDIxNiwgMjYsIDk1LCAxLCAyMTYsIDI1LCA5NSwgMSwgMjE2LCAyNCwgOTUsIAotICAgIDEsIDIxNiwgMjMsIDk1LCAxLCAyMTYsIDIyLCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjksIDk1LCAxLCAyMjMsIDEwNiwgCi0gICAgMjE2LCAyOCwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDI2LCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjUsIDk1LCAxLCAyMjMsIAotICAgIDEwNiwgMjE2LCAyNCwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDIyLCA1NiwgMSwgMjU0LCAyMywgNzUsIDE0MSwgMSwgMjU0LCAKLSAgICAyMywgMjExLCA0NywgNDksIDI4LCAxNiwgMjI0LCAxNTQsIDQ5LCAyOCwgMTYsIDI0OCwgMTU4LCA0OSwgMjgsIDE2LCAyMjUsIAotICAgIDE3NSwgNDksIDI4LCAxNiwgMjI2LCAxMTMsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMjYsIDExMywgMjQ3LCAyMDEsIDQ5LCAKLSAgICAyOCwgMTYsIDIxNCwgMTYsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAxOTcsIDQ5LCAyOCwgMTYsIDIxNywgMTY5LCA0OSwgMjgsIDE2LCAyMjYsIDksIDQ5LCAyOCwgMTYsIDIxMCwgMjE3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTAsIDIxOCwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIDIzMywgMjM0LCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDY4LCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjQ1LCAyNiwgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDIxNywgMiwgNDksIDI4LCAKLSAgICAxNiwgMjM0LCAxNjEsIDQ5LCAyOCwgMTYsIDI1NCwgNTgsIDQ5LCAyOCwgMTYsIDI1NCwgNTksIDI0NywgMjAxLCA0OSwgMjgsIAotICAgIDE2LCAyMTcsIDE3NSwgNDksIDI4LCAxNiwgMjE2LCAxNTksIDQ5LCAyOCwgMTYsIDIyNiwgMjA2LCAyNTQsIDIxLCA0OSwgCi0gICAgMjgsIDE2LCAyNDIsIDE1OSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjI0LCAxNTMsIDQ5LCAyOCwgMTYsIDI1MCwgMTQ5LCAKLSAgICA0OSwgMjgsIDE2LCAyMTQsIDYsIDQ5LCAyOCwgMTYsIDIzNSwgMTY0LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgCi0gICAgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyMSwgMjEzLCA0OSwgMjgsIDE2LCAKLSAgICAyMjYsIDAsIDQ5LCAyOCwgMTYsIDIxOCwgMTQ2LCAyNTQsIDYxLCA0OSwgMjgsIDE2LCAyMjYsIDExMiwgMjU0LCAyMSwgNDksIAotICAgIDI4LCAxNiwgMjE0LCAxNSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCA2MiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICA1NiwgNDksIDI4LCAxNiwgMjM0LCAzNywgNDksIDI4LCAxNiwgMjIzLCA0NiwgNDksIDI4LCAxNiwgMjI1LCAxMDYsIDI1NCwgCi0gICAgMjEsIDQ5LCAyOCwgMTYsIDIxNiwgODMsIDQ5LCAyOCwgMTYsIDI1NCwgMTIxLCA0OSwgMjgsIDE2LCAyMjEsIDE1OSwgNDksIAotICAgIDI4LCAxNiwgMjE3LCAxNzgsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIxNywgMTc4LCAyMzEsIDQwLCAyMTgsIDE0NCwgNDksIAotICAgIDI4LCAxNiwgMjI2LCAxMDcsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIxNiwgMTkwLCA0OSwgMjgsIDE2LCAyMzMsIDI3LCA0OSwgCi0gICAgMjgsIDE2LCAyNDYsIDQxLCA0OSwgMjgsIDE2LCAyMTUsIDIyNywgNDksIDI4LCAxNiwgMjE2LCAyMzIsIDQ5LCAyOCwgMTYsIAotICAgIDIzMywgMjM3LCA0OSwgMjgsIDE2LCAyNTQsIDY4LCAyNDUsIDI2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgCi0gICAgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM2LCAxMiwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMjAwLCAyMTUsIDE5OCwgNDksIDI4LCAxNiwgMjI1LCAyMDAsIDQ5LCAyOCwgMTYsIDIyNCwgMTU4LCA0OSwgMjgsIAotICAgIDE2LCAyMzQsIDExLCA0OSwgMjgsIDE2LCAyNTAsIDgwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjMsIDE0NiwgNDksIDI4LCAKLSAgICAxNiwgMjI2LCAxMiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjI2LCAxMCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjQwLCAxMDksIAotICAgIDQ5LCAyOCwgMTYsIDIyOSwgMjAzLCA0OSwgMjgsIDE2LCAyMjUsIDE1NiwgNDksIDI4LCAxNiwgMjM0LCAxMiwgMjU0LCAKLSAgICAxNDksIDQ5LCAyOCwgMTYsIDIxNSwgMTk5LCAyNTQsIDE0OSwgNDksIDI4LCAxNiwgMjE4LCAxMjMsIDQ5LCAyOCwgMTYsIAotICAgIDI0MiwgMTIzLCA0OSwgMjgsIDE2LCAyMzUsIDE2NCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI2LCAyMDYsIDIyOSwgOTUsIAotICAgIDQ5LCAyOCwgMTYsIDIyNiwgMTEzLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjUsIDE1NSwgNDksIDI4LCAxNiwgMjMzLCAKLSAgICAyNTQsIDQ5LCAyOCwgMTYsIDIyNSwgMTU0LCA0OSwgMjgsIDE2LCAyMzMsIDIzNiwgNDksIDI4LCAxNiwgMjI1LCAyMDEsIAotICAgIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgCi0gICAgMjI5LCA5NiwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjEwLCAyMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNTksIDIyOSwgOTUsIDQ5LCAKLSAgICAyOCwgMTYsIDI1NCwgNjAsIDIxNywgMTc2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTAsIDIxNiwgNDksIDI4LCAxNiwgCi0gICAgMjMzLCAyMzUsIDQ5LCAyOCwgMTYsIDI0NSwgMTczLCA0OSwgMjgsIDE2LCAyNTAsIDE1MCwgNDksIDI4LCAxNiwgMjMwLCAKLSAgICAxOTgsIDIzNSwgMTYzLCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjUsIDEwNiwgMjI5LCAKLSAgICA5NSwgNDksIDI4LCAxNiwgMjI0LCAxNTksIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNiwgMjAzLCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDg0LCA0OSwgMjgsIDE2LCAyMzIsIDU4LCA0OSwgMjgsIDE2LCAyMjYsIDEwLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjYsIAotICAgIDEyLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDUsIDYwLCAyMjYsIDExLCA0OSwgMjgsIDE2LCAyMzMsIDE1MywgNDksIDI4LCAKLSAgICAxNiwgMjU0LCA4NSwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgMTc2LCA0OSwgMjgsIAotICAgIDE2LCAyMTcsIDE3OCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjE3LCAxNzAsIDQ5LCAyOCwgMTYsIDI1MCwgODAsIDIyOSwgCi0gICAgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgMTA2LCA0OSwgMjgsIDE2LCAyMjEsIDE2MCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjExLCAKLSAgICAxNTEsIDIzNCwgMzcsIDQ5LCAyOCwgMTYsIDIxNSwgMTk2LCA0OSwgMjgsIDE2LCAyMjQsIDE2MCwgNDksIDI4LCAxNiwgCi0gICAgMjE1LCAyMDAsIDQ5LCAyOCwgMTYsIDIxNSwgMTk3LCA0OSwgMjgsIDE2LCAyMjQsIDE1NywgNDksIDI4LCAxNiwgMjE1LCAKLSAgICAxOTUsIDQ5LCAyOCwgMTYsIDIyNCwgMTU2LCA0OSwgMjgsIDE2LCAyNDIsIDE1OCwgNDksIDI4LCAxNiwgMjU0LCAxNCwgNDksIAotICAgIDI4LCAxNiwgMjQ1LCA2MCwgMjU0LCAxNCwgNDksIDI4LCAxNiwgMjI2LCAxMDcsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxNiwgCi0gICAgMTg5LCAyNDUsIDY5LCA0OSwgMjgsIDE2LCAyMTYsIDE4OSwgMjQ1LCAyNSwgNDksIDI4LCAxNiwgMjE2LCAxOTEsIDI1NCwgCi0gICAgNjMsIDQ5LCAyOCwgMTYsIDIxNiwgMTg0LCAyMzQsIDI0NywgMjU0LCA1NSwgNDksIDI4LCAxNiwgMjM0LCAxOTksIDQ5LCAKLSAgICAyOCwgMTYsIDI0NSwgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDExLCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjExLCAxMSwgCi0gICAgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjE4LCAxNDUsIDQ5LCAyOCwgMTYsIDIzNCwgMzgsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjAyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjMzLCAyMzgsIAotICAgIDI1NCwgMTQ5LCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjU0LCA2MiwgMjI5LCA5NSwgCi0gICAgNDksIDI4LCAxNiwgMjU0LCA2NCwgNDksIDI4LCAxNiwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIDIxNSwgMjEwLCA0OSwgMjgsIAotICAgIDE2LCAyMTYsIDIyNCwgNDksIDI4LCAxNiwgMjM0LCAyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyNDUsIDEzNCwgMjUwLCA3MSwgCi0gICAgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjQ2LCA0MiwgMjUwLCA3MiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjE1LCAyMTIsIAotICAgIDI1MCwgNzIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDIxNiwgMjM0LCAyNTAsIDcyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAKLSAgICAyMzYsIDcsIDI1MCwgNzEsIDQ5LCAyOCwgMTYsIDI0MiwgMTU5LCAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyNDIsIAotICAgIDE1OSwgMjI2LCAxLCAyNTQsIDEwLCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI2LCAxLCAyNDgsIDI5LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDIyNSwgNDksIDI4LCAxNiwgMjQ3LCAyMjYsIDIyNiwgMSwgMjU0LCAxMSwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjI2LCAyMjYsIDEsIDI1NCwgMTEsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDI0NywgMjI2LCAyMjYsIDEsIDI0OCwgCi0gICAgMjksIDQ5LCAyOCwgMTYsIDIxNSwgMjE2LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCA0OSwgMjgsIDE2LCAyMzYsIDE0LCA0OSwgCi0gICAgMjgsIDE2LCAyNDcsIDI0NiwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIyNSwgMCwgMjU0LCAxNiwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICAyMTEsIDI1NCwgMTMsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyNTQsIDE2LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjMxLCAKLSAgICAzNCwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIzMSwgNDUsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyNDIsIDE2MCwgNDksIAotICAgIDI4LCAxNiwgMjU0LCAyMTEsIDI0MiwgMTU3LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjI1LCAwLCAyNDIsIDE2MCwgNDksIAotICAgIDI4LCAxNiwgMjMxLCAxNTEsIDIyNCwgMTY1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDI1NCwgMTUxLCAKLSAgICAyMjQsIDE2NSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyNDgsIDI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgCi0gICAgMjMxLCAxNTEsIDI1NCwgMTUxLCAyNDgsIDI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNSwgMjA1LCAKLSAgICAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNSwgMjE3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE2LCAyMjgsIAotICAgIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE2LCAyMjgsIDIzMywgMzUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAKLSAgICAyMzEsIDE1MSwgMjMzLCAzNSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMjUsIDM5LCAyNDAsIDEwNywgNDksIAotICAgIDI4LCAxNiwgMjM1LCAxNjksIDIxNiwgMjUxLCAyNDAsIDEwOCwgNDksIDI4LCAxNiwgMjU0LCA2MCwgMjE2LCAyNTEsIDI0MCwgCi0gICAgMTA4LCA0OSwgMjgsIDE2LCAyNDQsIDE3MiwgMjE2LCAyMjUsIDQ5LCAyOCwgMTYsIDI0NCwgMTcyLCAyMzAsIDE0MywgNDksIAotICAgIDI4LCAxNiwgMjQ0LCAxNzIsIDI0NywgMjMwLCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE0LCAxMCwgMjQwLCAxMDcsIDQ5LCAKLSAgICAyOCwgMTYsIDIzMSwgMTUxLCAyMjQsIDE2NCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMjUsIDM5LCAyMTYsIAotICAgIDIyOCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDI0MiwgMTU1LCAyMzAsIDI2LCAyNTQsIDYzLCA0OSwgMjgsIDE2LCAyNDIsIAotICAgIDE1NSwgMjMwLCAyNiwgMjQ3LCAyMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTQ4LCAyMzQsIDI0NywgMjQzLCAyMzYsIDIxMywgCi0gICAgMTI0LCA0OSwgMjgsIDE2LCAyMzYsIDEzLCA0OSwgMjgsIDE2LCAyMzYsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjU0LCAKLSAgICAyMiwgMjQ4LCAyNywgMjQwLCAxMDYsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMTkwLCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOSwgMjAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjI5LCAxOTgsIDI0MCwgMTA3LCAKLSAgICA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDI0OCwgMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAKLSAgICAyNDcsIDI0MywgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIzNCwgMTgyLCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjI4LCAyMzQsIAotICAgIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOCwgMjM0LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjMxLCAxOTEsIDI1MCwgNzMsIDI0NywgMjMwLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjMxLCAxOTEsIAotICAgIDI1MCwgNzMsIDIzMCwgMTQzLCA0OSwgMjgsIDE2LCAyNDQsIDEyMiwgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNCwgOSwgNDksIAotICAgIDI4LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAyNTAsIDczLCAyMTcsIDE3OSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIyOSwgCi0gICAgOTcsIDQ5LCAyOCwgMTYsIDI1MCwgNzQsIDIwOSwgMjQ5LCA0OSwgMjgsIDE2LCAyNTAsIDc0LCAyMzQsIDM2LCA0OSwgMjgsIAotICAgIDE2LCAyNTAsIDc0LCAyMTksIDksIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDAsIDE1NCwgMjExLCAxMCwgMjE2LCAyMjksIAotICAgIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDUsIDE0OSwgMjU0LCA4NiwgNDksIDI4LCAxNiwgMjExLCAxMCwgMjE1LCAyMDYsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMTUsIDIwNiwgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIxNiwgMjI5LCA0OSwgMjgsIAotICAgIDE2LCAyNDcsIDIzOCwgMjU0LCA2NSwgMjQ2LCA0MiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMzAsIDE0MSwgCi0gICAgMjE2LCAyMzMsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjQ3LCAyMjIsIDI0NSwgMzYsIDI0NywgMTM5LCAKLSAgICA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjE1LCAyMTQsIDIyNiwgMjExLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMCwgCi0gICAgMjU0LCA2NSwgMjQ2LCA0MiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDIzMCwgMTQxLCAyMTYsIDIzMywgMjQ3LCAKLSAgICAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI0NywgMjIyLCAyNDUsIDM2LCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAKLSAgICAxMCwgMjE1LCAyMTQsIDIyNiwgMjExLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjQzLCA0OSwgMjQ3LCAyMzcsIDQ5LCAyOCwgCi0gICAgMTYsIDI0MywgNDksIDIxMSwgOSwgNDksIDI4LCAxNiwgMjQ3LCAyNDUsIDI1NCwgNjUsIDIzMCwgMTk5LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI0NSwgMjU0LCA2NSwgMjMxLCA3MywgNDksIDI4LCAxNiwgMjQ3LCAyNDUsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI0NSwgMjE2LCAxODIsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyMTYsIDE4MiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIAotICAgIDIxNiwgMTgzLCAyNDcsIDE4NiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDIxNiwgMTgzLCAyMTUsIDIwNywgNDksIDI4LCAxNiwgCi0gICAgMjE5LCAxNjMsIDIxNiwgMTgzLCAyMTYsIDIyMiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDI1MywgMjQ0LCA0OSwgMjgsIDE2LCAKLSAgICAyMTksIDE2MywgMjUzLCAyNDUsIDI0NywgMTg2LCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDUsIDIxNSwgMjA3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDUsIDIxNiwgMjIyLCA0OSwgMjgsIDE2LCAyNDcsIDIyMywgMjQzLCAzMCwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMjksIDIyNiwgMTM0LCA0OSwgMjgsIDE2LCAyMTgsIDEzNywgNDksIDI4LCAxNiwgMjU0LCA3LCAKLSAgICAxOTAsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjEzLCAxMjQsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjQzLCAxMzUsIDQ5LCAyOCwgCi0gICAgMTYsIDI1NCwgNywgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNTQsIDcsIDIzNCwgMTgyLCA0OSwgMjgsIDE2LCAyNTQsIDcsIAotICAgIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjI4LCAyMzMsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyMjksIDk2LCAKLSAgICAyMzEsIDQ0LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgMjI5LCA5NiwgMjMxLCA0NCwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIAotICAgIDIyOSwgOTYsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgMjI5LCA5NiwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMzgsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI5LCA5NiwgMjM0LCAxOTYsIDI4LCAxNiwgMjE5LCAKLSAgICAxNTUsIDI1MiwgMTM1LCAyOCwgMTYsIDUyLCAyNTIsIDEzNSwgMjgsIDE2LCA0MCwgMjUyLCAxMzUsIDI4LCAxNiwgMjIzLCAKLSAgICA1MCwgNDAsIDI1MiwgMTM1LCAyOCwgMTYsIDI0OCwgMTU1LCAyNTIsIDEzNSwgMjgsIDE2LCAyMTksIDI1MSwgMjUyLCAxMzUsIAotICAgIDI4LCAxNiwgNDMsIDIyMywgNzcsIDUwLCAyOCwgMTYsIDQ0LCAyMjMsIDc3LCA1MCwgMjgsIDE2LCAyMjMsIDc3LCAyNDcsIAotICAgIDExOCwgMjgsIDE2LCAyNDgsIDE5NiwgMjIxLCAxNjMsIDI4LCAxNiwgMjQ4LCAyMjIsIDI1MCwgMjQ5LCAyOCwgMTYsIDIyMSwgCi0gICAgMTYzLCAyOCwgMTYsIDI0OSwgMjM0LCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgMTExLCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgCi0gICAgMTEwLCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgMTA5LCAyOCwgMTYsIDI0NCwgMTMxLCAyOCwgMTYsIDI0NCwgMTMyLCA1MSwgCi0gICAgMjgsIDE2LCAyNTEsIDE0OCwgNzgsIDI4LCAxNiwgMjUxLCAyNCwgMjgsIDE2LCAyNTEsIDE1OSwgMjgsIDE2LCAxMjcsIDI4LCAKLSAgICAxNiwgMjI2LCAxOTMsIDIxOCwgMTYzLCAyOCwgMTYsIDIxNSwgNTcsIDIxOCwgMTYzLCAyOCwgMTYsIDIxNiwgMTQyLCAyMTgsIAotICAgIDE2MywgMjgsIDE2LCAyNDQsIDEwLCAyMTgsIDE2MywgMjgsIDE2LCAyNDQsIDgwLCAyMTgsIDE2MywgMjgsIDE2LCAyMTksIAotICAgIDEyNCwgMjE4LCAxNjMsIDI4LCAxNiwgMjE5LCAxMjIsIDI0MywgMjUwLCAyOCwgMTYsIDI0NCwgOCwgMjQzLCAyNTAsIDI4LCAKLSAgICAxNiwgMjQzLCAyMDMsIDI1MCwgMTQsIDI4LCAxNiwgMjQzLCAyMDMsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIAotICAgIDE2LCAyNDMsIDIwMywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgMTYsIDI1MSwgNjcsIDI1MCwgMTQsIDI4LCAKLSAgICAxNiwgMjQ1LCA3LCAyNTAsIDE0LCAyOCwgMTYsIDI0NSwgNywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1NCwgMTQyLCAyOCwgMTYsIAotICAgIDI0NSwgNywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgMTYsIDI0NiwgODMsIDI1MCwgMTMsIDI4LCAxNiwgCi0gICAgMjQ2LCA4MywgMjUwLCAxMiwgMjgsIDE2LCAyMzAsIDg1LCAyMzEsIDkwLCAyMjMsIDYxLCAyOCwgMTYsIDUyLCAyMjAsIDc1LCAKLSAgICAyOCwgMTYsIDUyLCAyNDQsIDY1LCAyOCwgMTYsIDI0NCwgNjYsIDIxNCwgMTYzLCAyOCwgMTYsIDI0NCwgNjYsIDI0NiwgCi0gICAgMTA2LCAyOCwgMTYsIDIyOSwgMTg4LCAyMTQsIDE2MywgMjgsIDE2LCAyMjksIDE4OCwgMjQ2LCAxMDYsIDI4LCAxNiwgMjIwLCAKLSAgICA3NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjIwLCA3NiwgMjQ2LCAxMDYsIDI4LCAxNiwgMjI0LCAyMiwgMTM4LCAyMjAsIDc1LCAKLSAgICAyOCwgMTYsIDIyNCwgMjIsIDEzOCwgMjQ0LCA2NSwgMjgsIDE2LCAyNDksIDIxNiwgMjE2LCA4NywgMjgsIDE2LCAyNDksIAotICAgIDg1LCAyMTYsIDg3LCAyOCwgMTYsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIDE2LCAyMjYsIDEzNiwgMjUyLCAxMjIsIDI4LCAKLSAgICAxNiwgMjI0LCA0LCAyNTQsIDE0MiwgMjgsIDE2LCAyMjQsIDQsIDI1MiwgMTIyLCAyOCwgMTYsIDIzMCwgODgsIDIyMywgNjEsIAotICAgIDI4LCAxNiwgMjExLCAyNTEsIDIyMywgNjEsIDI4LCAxNiwgMTYzLCAyMjMsIDYxLCAyOCwgMTYsIDIyNCwgMjIsIDIyMywgCi0gICAgNjEsIDI4LCAxNiwgMjQ1LCAxODksIDIyMywgNjEsIDI4LCAxNiwgMjE5LCAxMTgsIDIyMywgNjEsIDI4LCAxNiwgMjE2LCAKLSAgICAxNjAsIDIyMywgNjEsIDI4LCAxNiwgMjE5LCAxMTAsIDIyMywgNjEsIDI4LCAxNiwgMTIzLCAyNDAsIDIxMSwgMjE1LCA3MSwgCi0gICAgMjIzLCA2MSwgMjgsIDE2LCAyMTEsIDE3OSwgMjI4LCA0MywgMjgsIDE2LCA5NiwgMjI4LCA0MywgMjgsIDE2LCAyNTAsIDM2LCAKLSAgICAyMTEsIDE3OSwgMjI4LCA0MywgMjgsIDE2LCA0MiwgMjI4LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgNDIsIDIyOCwgNDQsIAotICAgIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAKLSAgICAyMjgsIDQ0LCAxMjAsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0MywgMjExLCAyNTMsIDI4LCAxNiwgCi0gICAgMjE1LCAyMjYsIDIyOCwgNDQsIDQzLCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgNDQsIDIxMSwgMjUzLCAKLSAgICAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyNCwgCi0gICAgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyNCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIAotICAgIDIyOCwgNDQsIDEyMCwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjAsIDQ0LCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMzAsIDEyOSwgMjI4LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjMwLCAxMjksIDIyOCwgNDQsIDI1MSwgMjIxLCAKLSAgICAyOCwgMTYsIDIxNSwgMjIzLCAyMjgsIDQ0LCAxMjQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjIzLCAyMjgsIDQ0LCAxMjQsIAotICAgIDI1MSwgMjIxLCAyOCwgMTYsIDIyNiwgNCwgMjI4LCA0MywgMjgsIDE2LCAyMTMsIDEzMiwgMjI4LCA0MywgMjgsIDE2LCAKLSAgICAyMjgsIDQ0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMjcsIDIwMywgMjI4LCA0MywgMjgsIDE2LCAyNDksIDI0MSwgMjI4LCA0NCwgCi0gICAgMjExLCAyNTMsIDI4LCAxNiwgMjQ5LCAyNDEsIDIyOCwgNDQsIDI1MSwgMjIxLCAyOCwgMTYsIDI1MSwgMTQ2LCAyOCwgMTYsIAotICAgIDIxMSwgMjUxLCAyMjgsIDQ3LCAyOCwgMTYsIDE2MywgMjI4LCA0NywgMjgsIDE2LCAyMjQsIDIyLCAyMjgsIDQ3LCAyOCwgCi0gICAgMTYsIDI0NSwgMTg5LCAyMjgsIDQ3LCAyOCwgMTYsIDIxOSwgMTE4LCAyMjgsIDQ3LCAyOCwgMTYsIDIxNiwgMTYwLCAyMjgsIAotICAgIDQ3LCAyOCwgMTYsIDIxOSwgMTEwLCAyMjgsIDQ3LCAyOCwgMTYsIDEyMywgMjQwLCAyMTEsIDIxNSwgNzEsIDIyOCwgNDcsIAotICAgIDI4LCAxNiwgMzgsIDIxOCwgMTM5LCAyOCwgMTYsIDM4LCAyMTgsIDI0MCwgMjE4LCAxMzksIDI4LCAxNiwgMzgsIDIxNSwgCi0gICAgMjM0LCAyOCwgMTYsIDM4LCAyMTUsIDIzMywgMjgsIDE2LCAzOCwgMjE1LCAyMzIsIDI4LCAxNiwgMjQ0LCAxMDEsIDIxNSwgCi0gICAgMjM0LCAyOCwgMTYsIDI0NCwgMTAxLCAyMTUsIDIzMywgMjgsIDE2LCAyNDQsIDEwMSwgMjE1LCAyMzIsIDI4LCAxNiwgMzgsIAotICAgIDI1MywgMTg5LCAyNDcsIDEyMCwgMjgsIDE2LCAzOCwgMjQ0LCA3MiwgMjgsIDE2LCAzOCwgMjQ0LCA3MSwgMjgsIDE2LCAzOCwgCi0gICAgMjQ0LCA3MCwgMjgsIDE2LCAzOCwgMjQ0LCA2OSwgMjgsIDE2LCAzOCwgMjQ0LCA2OCwgMjgsIDE2LCAyNTIsIDU4LCAyNTIsIAotICAgIDc0LCAyOCwgMTYsIDI0NSwgMTQzLCAyNTIsIDc0LCAyOCwgMTYsIDI1MiwgNTgsIDIxNiwgMTExLCAyOCwgMTYsIDI0NSwgCi0gICAgMTQzLCAyMTYsIDExMSwgMjgsIDE2LCAyNTIsIDU4LCAyMTksIDgwLCAyOCwgMTYsIDI0NSwgMTQzLCAyMTksIDgwLCAyOCwgCi0gICAgMTYsIDI1MiwgNTgsIDIyNSwgMTE1LCAyOCwgMTYsIDI0NSwgMTQzLCAyMjUsIDExNSwgMjgsIDE2LCAzOCwgMjU1LCAxNCwgCi0gICAgMjgsIDE2LCAzOCwgMjE4LCAxNjUsIDI4LCAxNiwgMzgsIDIxNiwgMjM4LCAyOCwgMTYsIDM4LCAyMTgsIDE2NiwgMjgsIDE2LCAKLSAgICAzOCwgMjMxLCAxNjIsIDI4LCAxNiwgMzgsIDIzMSwgMTYxLCAyOCwgMTYsIDM4LCAyNTUsIDEzLCAyOCwgMTYsIDM4LCAyMzIsIAotICAgIDExMiwgMjgsIDE2LCAyNTMsIDI1NCwgMjE0LCAxNjMsIDI4LCAxNiwgMjUzLCAyNTQsIDI0NiwgMTA2LCAyOCwgMTYsIDM4LCAKLSAgICAyNDcsIDEzNSwgMjgsIDE2LCAzOCwgMjIyLCAyMzEsIDI4LCAxNiwgMzgsIDI0NCwgNTgsIDI4LCAxNiwgMzgsIDIxOSwgNzYsIAotICAgIDI4LCAxNiwgMzgsIDI1MiwgMzgsIDI4LCAxNiwgMzgsIDUyLCAyMTYsIDE5LCAyOCwgMTYsIDM4LCAyMTUsIDIxMSwgMjE2LCAKLSAgICAxOSwgMjgsIDE2LCAyMjIsIDIzNSwgMjgsIDE2LCAyMTgsIDc1LCAyOCwgMTYsIDIxMCwgMTU5LCAyOCwgMTYsIDIyNSwgCi0gICAgMTA3LCAyOCwgMTYsIDIzMSwgMjUsIDI4LCAxNiwgMjQ0LCAxNywgMjgsIDE2LCAyNDksIDEzOCwgMjgsIDE2LCAyNDgsIDc4LCAKLSAgICAyOCwgMTYsIDI0MiwgMTUwLCAyMjgsIDQ4LCAyMTksIDk1LCAyOCwgMTYsIDI0MiwgMTUwLCAyMjgsIDQ4LCAyMjgsIDc1LCAKLSAgICAyMTksIDk1LCAyOCwgMTYsIDIxNiwgMCwgMjgsIDE2LCAyMTUsIDk1LCAyOCwgMTYsIDIzNSwgMTkzLCAyMTUsIDk1LCAyOCwgCi0gICAgMTYsIDIxNSwgOTYsIDIxOSwgOTUsIDI4LCAxNiwgMjE1LCA5NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgCi0gICAgMTAyLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk5LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk4LCAyOCwgMTYsIDIyNiwgCi0gICAgMTQ4LCAyMTgsIDk3LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk2LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk1LCAyOCwgCi0gICAgMTYsIDIyNiwgMTQ4LCAyMTgsIDk0LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDkzLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIAotICAgIDkyLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDEwMSwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAxMDAsIDI4LCAxNiwgMjQxLCAKLSAgICAyNDUsIDI4LCAxNiwgMjI5LCAxMDUsIDI4LCAxNiwgMjQ1LCAxNDMsIDY0LCAyMTgsIDEzMywgMjgsIDE2LCAyNDgsIDcxLCAKLSAgICAyMTksIDk1LCAyOCwgMTYsIDM4LCAxMjQsIDI1MSwgMTY5LCAyOCwgMTYsIDM4LCAxMjAsIDI1MSwgMTY5LCAyOCwgMTYsIAotICAgIDM4LCAyNDIsIDAsIDI4LCAxNiwgMzgsIDIxOSwgNjcsIDIyNSwgNDMsIDI4LCAxNiwgMjI1LCAyMTYsIDc4LCAyOCwgMTYsIAotICAgIDIyNSwgMjE2LCAxMjAsIDc4LCAyOCwgMTYsIDE2MywgMjI1LCAyMTYsIDc4LCAyOCwgMTYsIDI0MiwgMTgyLCAyMTQsIDE2MywgCi0gICAgMjgsIDE2LCAyNDIsIDE4MiwgMjQ2LCAxMDYsIDI4LCAxNiwgMiwgMjQ0LCAxMDAsIDI4LCAxNiwgMjQ4LCAxODAsIDI4LCAKLSAgICAxNiwgMjQ4LCAxODEsIDI1NCwgMTU0LCAyOCwgMTYsIDIzMSwgMTMzLCAyOCwgMTYsIDIzMiwgMTI5LCAyOCwgMTYsIDI1MSwgCi0gICAgMTQzLCAyOCwgMTYsIDIyMCwgMTU0LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjMwLCAKLSAgICAxODQsIDI4LCAxNiwgMjMwLCAxODUsIDI1MSwgMjIxLCAyOCwgMTYsIDIyMCwgMTQ4LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIAotICAgIDE0OCwgMjUxLCAyMjEsIDI4LCAxNiwgMjQzLCAyMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDI0MywgMjIwLCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMzIsIDEzMCwgMjI1LCAxODAsIDIyMywgNjEsIDI4LCAxNiwgMjMyLCAxMzAsIDIzNiwgNCwgMjIzLCA2MSwgCi0gICAgMjgsIDE2LCAyNTEsIDE0NCwgMjIzLCA2MSwgMjgsIDE2LCAyMjAsIDE1NCwgMjIzLCA2MSwgMjgsIDE2LCAyMzAsIDE4NSwgCi0gICAgMjIzLCA2MSwgMjgsIDE2LCAyMjAsIDE0OCwgMjIzLCA2MSwgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAKLSAgICAyMjQsIDE3NCwgMjI1LCAxNzksIDI4LCAxNiwgMjE2LCAyNDksIDIyNSwgMTc4LCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgCi0gICAgMywgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjI1LCAxODAsIDI0NywgMjExLCAKLSAgICAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjI1LCAxNzksIDI4LCAxNiwgMjE2LCAyNDksIAotICAgIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMzYsIDMsIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIAotICAgIDIyNCwgMTc0LCAyMzYsIDQsIDI0NywgMjExLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgCi0gICAgMjM2LCA0LCAyNDcsIDIxMCwgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgNCwgCi0gICAgMjQ3LCAyMDksIDI4LCAxNiwgMjQ5LCAxMzMsIDI4LCAxNiwgMjQyLCAxMjYsIDI1MSwgNjcsIDI1MCwgMTQsIDI4LCAxNiwgCi0gICAgMjQyLCAxMjYsIDI0NSwgNywgMjUwLCAxNCwgMjgsIDE2LCA0MiwgMjUzLCAxNTgsIDI4LCAxNiwgMjEzLCAxNTEsIDI4LCAKLSAgICAxNiwgMjI1LCAxNCwgMjgsIDE2LCAyNTAsIDUsIDI4LCAxNiwgMjIxLCAyMDMsIDI4LCAxNiwgMjUwLCA5LCAyOCwgMTYsIAotICAgIDIxNiwgNywgMjgsIDE2LCAyMjQsIDI0MiwgMjgsIDE2LCAyMjQsIDI0MywgMjQ0LCA2MCwgMjgsIDE2LCAyMjEsIDIwNCwgCi0gICAgMjQ0LCA2MCwgMjgsIDE2LCAyMTYsIDgsIDIyMywgNTgsIDI4LCAxNiwgMjI1LCAxNjMsIDIxOCwgNjYsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyOSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE4LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMDgsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIwMSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTkzLCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAxODcsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE4NiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMTg1LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxODQsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyOCwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjI3LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIyNSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjI0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjMsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyMiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjIxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMjAsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxOSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE3LCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMTYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxNSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjE0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTMsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE5MiwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMTkxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxOTAsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDE4OSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTg4LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjksIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIxOCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjAxLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTMsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE4NiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg1LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMjcsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyNiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjI1LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyMSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjIwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIxNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTIsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIxMSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMDksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjA2LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMDUsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjAzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDIsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwMCwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMTk5LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTgsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDE5NywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTk2LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTUsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDE5NCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTkyLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTEsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5MCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg5LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAxODgsIDM4LCAyNiwgMjgsIDIxNSwgMjA4LCAzOCwgMjYsIDI4LCAyMTYsIDIyMywgMzgsIDI2LCAKLSAgICAyOCwgMjI1LCAxODgsIDI2LCAyOCwgMjMzLCAzMSwgMjMwLCAxNDIsIDMxLCAyNDUsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDEsIAotICAgIDIyMiwgMjQ1LCAyMjMsIDI0NywgMjI0LCAzMSwgMjQwLCAyMTQsIDI0NSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0NSwgMjIyLCAKLSAgICAyNDEsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDUsIDIyMiwgMjQwLCAyMTMsIDI0NywgMjI0LCAzMSwgMjQ1LCAyMjMsIDE4MCwgCi0gICAgMzEsIDI1MCwgMTc0LCAxODAsIDMxLCAyNDMsIDIyOSwgMjUwLCAzNSwgMTgwLCAzMSwgMjMwLCAxNzcsIDE4MCwgMzEsIAotICAgIDI1MiwgMTMwLCAxODAsIDMxLCAyMzQsIDE3OSwgMjE5LCA3OSwgMTgwLCAzMSwgMjQ5LCAxNzksIDE4MCwgMzEsIDI1MywgCi0gICAgMjMzLCAxODAsIDMxLCAyMjYsIDE2MywgMTgwLCAzMSwgMjUxLCAxNTMsIDIyNiwgMTMwLCAxODAsIDMxLCAyNDgsIDczLCAKLSAgICAxNzcsIDI0NywgMTc5LCAxODAsIDMxLCAyNDcsIDE3NiwgMTgwLCAzMSwgMjEwLCAyMjIsIDE4MCwgMzEsIDIzNSwgMjQ3LCAKLSAgICAxODAsIDMxLCAyMjUsIDE5NywgMTgwLCAzMSwgMjIzLCAxMjcsIDE4MCwgMzEsIDI0OSwgMTg5LCAxODAsIDMxLCAyNDEsIAotICAgIDYwLCAyNTIsIDE4NCwgMTgwLCAzMSwgMjEyLCA1OSwgMTgwLCAzMSwgMjQ0LCAzOSwgMTgwLCAzMSwgMjU0LCAyNDYsIDE4MCwgCi0gICAgMzEsIDIyMywgODksIDE4MCwgMzEsIDIyMywgNjUsIDE4MCwgMzEsIDI0NSwgMjIxLCAxODAsIDMxLCAyMzUsIDUzLCAxODAsIAotICAgIDMxLCAyNDksIDE4NCwgMTgwLCAzMSwgMjQ1LCAxNDIsIDE4MCwgMzEsIDI0NiwgNTIsIDE4MCwgMzEsIDI1MCwgMTQ1LCAKLSAgICAxODAsIDMxLCAyNDgsIDgyLCAxODAsIDMxLCAyMywgMjIzLCA2NCwgMTgwLCAzMSwgMjI2LCA4MSwgMTgwLCAzMSwgMjMzLCAKLSAgICAzNCwgMTgwLCAzMSwgMjQ5LCAyNTQsIDE4MCwgMzEsIDIzNCwgNzcsIDE4MCwgMzEsIDI0MywgODYsIDE4MCwgMzEsIDIxOCwgCi0gICAgMTEyLCAxODAsIDMxLCAyMjQsIDEzMCwgMTgwLCAzMSwgMjQzLCAyMjgsIDE4MCwgMzEsIDIyMywgNjYsIDE4MCwgMzEsIAotICAgIDIzMywgNzEsIDE3NywgMjMwLCAxNTcsIDE4MCwgMzEsIDIyMywgNjIsIDE4MCwgMzEsIDI0MiwgMTY4LCAyMTYsIDQyLCAKLSAgICAyMzEsIDc2LCAxODAsIDMxLCAyNDUsIDE0NCwgMTgwLCAzMSwgMjE4LCAxMjQsIDE4MCwgMzEsIDI0MiwgMTI4LCAxODAsIAotICAgIDMxLCAyNDUsIDEzNiwgMTgwLCAzMSwgMjI1LCAyMzUsIDE4MCwgMzEsIDIyMiwgMjI1LCAxODAsIDMxLCAyNDQsIDU5LCAKLSAgICAxODAsIDMxLCAyMTQsIDgsIDE3NywgMjEyLCA0NCwgMTgwLCAzMSwgMjQ5LCAxOTMsIDE4MCwgMzEsIDIzMSwgODksIDE4MCwgCi0gICAgMzEsIDI0NSwgNjEsIDE4MCwgMzEsIDIxNCwgMTcyLCAxODAsIDMxLCAyNDcsIDIxMiwgMTgwLCAzMSwgMjUwLCAwLCAyMzAsIAotICAgIDExMCwgMTgwLCAzMSwgMjQyLCAxMDYsIDE4MCwgMzEsIDI0MywgODcsIDIzNSwgMjU1LCAxODAsIDMxLCAyMzEsIDE0MSwgCi0gICAgMTgwLCAzMSwgMjU1LCAxMCwgMTgwLCAzMSwgMjQ1LCAxNTcsIDE4MCwgMzEsIDI0NiwgMTA5LCAxODAsIDMxLCAyMTIsIDQyLCAKLSAgICAxODAsIDMxLCAyMTksIDE1MCwgMTgwLCAzMSwgMjM1LCAyMjIsIDE4MCwgMzEsIDI0OCwgNDIsIDE4MCwgMzEsIDI0OCwgCi0gICAgMTYwLCAxODAsIDMxLCAyNDcsIDIwOCwgMTgwLCAzMSwgMjQ1LCAyOSwgMTgwLCAzMSwgMjIwLCAxMTUsIDE4MCwgMzEsIAotICAgIDIxOCwgMTI4LCAxODAsIDMxLCAyNDIsIDIsIDE4MCwgMzEsIDI0OSwgMjEyLCAxODAsIDMxLCAyNDksIDI1MSwgMTgwLCAzMSwgCi0gICAgMjQ0LCAxNzcsIDE4MCwgMzEsIDI1NCwgMjEyLCAxODAsIDMxLCAyNDksIDIxMSwgMTgwLCAzMSwgMjI2LCAxOTcsIDIxNiwgCi0gICAgMTk2LCAyMTMsIDI0MiwgMTgwLCAzMSwgMjQ3LCAyMzIsIDE4MCwgMzEsIDIzMywgMTI0LCAxODAsIDMxLCAyNDQsIDEzLCAKLSAgICAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTEwLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgCi0gICAgMTA1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTU4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAKLSAgICAyMSwgMTYxLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTg5LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgCi0gICAgMTc0LCAyMSwgMTk0LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTk4LCAyNDksIDE0OSwgMjIyLCAyMDIsIAotICAgIDIxNCwgMTc0LCAyMSwgMTk1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMjAwLCAyNDksIDE0OSwgMjIyLCAKLSAgICAyMDIsIDIxNiwgMjQzLCAyMSwgMTEwLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTA1LCAyNDksIDE0OSwgCi0gICAgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTU4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTYxLCAyNDksIAotICAgIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTg5LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTk0LCAKLSAgICAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTk4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgCi0gICAgMTk1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMjAwLCAxMSwgMjMsIDYsIDYxLCAxMSwgMjMsIDYsIAotICAgIDI1MywgMTU4LCAxMSwgMjMsIDYsIDI1MSwgNjYsIDExLCAyMywgNiwgMjQ5LCA2MCwgMTEsIDIzLCA2LCA3NSwgMTEsIDIzLCAKLSAgICA2LCAyNDUsIDYsIDExLCAyMywgNiwgMjQzLCAyMDIsIDExLCAyMywgNiwgMjQyLCA2MCwgMTEsIDIzLCA2LCA3MywgMTEsIAotICAgIDIzLCA2LCAyMzUsIDE0NCwgMTEsIDIzLCA2LCAyMzUsIDIzLCAxMSwgMjMsIDYsIDE1NiwgMTEsIDIzLCA2LCAxOTMsIDExLCAKLSAgICAyMywgNiwgMjMwLCAyNSwgMTEsIDIzLCA2LCA3NiwgMTEsIDIzLCA2LCAyMjYsIDEwNSwgMTEsIDIzLCA2LCAyMjQsIDk2LCAKLSAgICAxMSwgMjMsIDYsIDE1MywgMTEsIDIzLCA2LCAyMjIsIDkxLCAxMSwgMjMsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDYsIDcwLCAKLSAgICAxMSwgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDYsIDIxMiwgOTgsIDExLCAyMywgNiwgMjExLCAxNzgsIDExLCAyMywgNiwgCi0gICAgMjExLCAxMTcsIDExLCAyMywgNiwgMjEwLCAxNTksIDExLCAyMywgNCwgNjEsIDExLCAyMywgNCwgMjUzLCAxNTgsIDExLCAKLSAgICAyMywgNCwgMjUxLCA2NiwgMTEsIDIzLCA0LCAyNDksIDYwLCAxMSwgMjMsIDQsIDc1LCAxMSwgMjMsIDQsIDI0NSwgNiwgMTEsIAotICAgIDIzLCA0LCAyNDMsIDIwMiwgMTEsIDIzLCA0LCAyNDIsIDYwLCAxMSwgMjMsIDQsIDczLCAxMSwgMjMsIDQsIDIzNSwgMTQ0LCAKLSAgICAxMSwgMjMsIDQsIDIzNSwgMjMsIDExLCAyMywgNCwgMTU2LCAxMSwgMjMsIDQsIDE5MywgMTEsIDIzLCA0LCAyMzAsIDI1LCAKLSAgICAxMSwgMjMsIDQsIDc2LCAxMSwgMjMsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDQsIDIyNCwgOTYsIDExLCAyMywgNCwgMTUzLCAKLSAgICAxMSwgMjMsIDQsIDIyMiwgOTEsIDExLCAyMywgNCwgMjE3LCAxNTIsIDExLCAyMywgNCwgNzAsIDExLCAyMywgNCwgMjE0LCAKLSAgICAxMDUsIDExLCAyMywgNCwgMjEyLCA5OCwgMTEsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCA0LCAyMTEsIDExNywgMTEsIAotICAgIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDMyLCA2LCA2MSwgMTEsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDMyLCA2LCAyNTEsIDY2LCAKLSAgICAxMSwgMzIsIDYsIDI0OSwgNjAsIDExLCAzMiwgNiwgNzUsIDExLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMzIsIDYsIDI0MywgCi0gICAgMjAyLCAxMSwgMzIsIDYsIDI0MiwgNjAsIDExLCAzMiwgNiwgNzMsIDExLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAzMiwgNiwgCi0gICAgMjM1LCAyMywgMTEsIDMyLCA2LCAxNTYsIDExLCAzMiwgNiwgMTkzLCAxMSwgMzIsIDYsIDIzMCwgMjUsIDExLCAzMiwgNiwgCi0gICAgNzYsIDExLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAzMiwgNiwgMjI0LCA5NiwgMTEsIDMyLCA2LCAxNTMsIDExLCAzMiwgNiwgCi0gICAgMjIyLCA5MSwgMTEsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDMyLCA2LCA3MCwgMTEsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDMyLCAKLSAgICA2LCAyMTIsIDk4LCAxMSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzIsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzIsIDQsIDYxLCAxMSwgMzIsIDQsIDI1MywgMTU4LCAxMSwgMzIsIDQsIDI1MSwgNjYsIDExLCAzMiwgNCwgCi0gICAgMjQ5LCA2MCwgMTEsIDMyLCA0LCA3NSwgMTEsIDMyLCA0LCAyNDUsIDYsIDExLCAzMiwgNCwgMjQzLCAyMDIsIDExLCAzMiwgCi0gICAgNCwgNzMsIDExLCAzMiwgNCwgMjM1LCAxNDQsIDExLCAzMiwgNCwgMjM1LCAyMywgMTEsIDMyLCA0LCAxNTYsIDExLCAzMiwgCi0gICAgNCwgMTkzLCAxMSwgMzIsIDQsIDIzMCwgMjUsIDExLCAzMiwgNCwgNzYsIDExLCAzMiwgNCwgMjI2LCAxMDUsIDExLCAzMiwgCi0gICAgNCwgMjI0LCA5NiwgMTEsIDMyLCA0LCAxNTMsIDExLCAzMiwgNCwgMjIyLCA5MSwgMTEsIDMyLCA0LCAyMTcsIDE1MiwgMTEsIAotICAgIDMyLCA0LCA3MCwgMTEsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzIsIDQsIDIxMSwgMTc4LCAKLSAgICAxMSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA2LCA2MSwgMTEsIDIzLCAzMiwgCi0gICAgNiwgMjUzLCAxNTgsIDExLCAyMywgMzIsIDYsIDI1MSwgNjYsIDExLCAyMywgMzIsIDYsIDI0OSwgNjAsIDExLCAyMywgMzIsIAotICAgIDYsIDc1LCAxMSwgMjMsIDMyLCA2LCAyNDUsIDYsIDExLCAyMywgMzIsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyNDIsIDYwLCAxMSwgMjMsIDMyLCA2LCA3MywgMTEsIDIzLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAyMywgMzIsIDYsIDIzNSwgCi0gICAgMjMsIDExLCAyMywgMzIsIDYsIDE1NiwgMTEsIDIzLCAzMiwgNiwgMTkzLCAxMSwgMjMsIDMyLCA2LCAyMzAsIDI1LCAxMSwgCi0gICAgMjMsIDMyLCA2LCA3NiwgMTEsIDIzLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAyMywgMzIsIDYsIDIyNCwgOTYsIDExLCAyMywgCi0gICAgMzIsIDYsIDE1MywgMTEsIDIzLCAzMiwgNiwgMjIyLCA5MSwgMTEsIDIzLCAzMiwgNiwgMjE3LCAxNTIsIDExLCAyMywgMzIsIAotICAgIDYsIDcwLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNiwgMjEyLCA5OCwgMTEsIDIzLCAzMiwgNiwgCi0gICAgMjExLCAxNzgsIDExLCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgCi0gICAgNCwgNjEsIDExLCAyMywgMzIsIDQsIDI1MywgMTU4LCAxMSwgMjMsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyNDksIDYwLCAxMSwgMjMsIDMyLCA0LCA3NSwgMTEsIDIzLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMjMsIDMyLCA0LCAyNDMsIAotICAgIDIwMiwgMTEsIDIzLCAzMiwgNCwgMjQyLCA2MCwgMTEsIDIzLCAzMiwgNCwgNzMsIDExLCAyMywgMzIsIDQsIDIzNSwgMTQ0LCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDMyLCA0LCAxNTYsIDExLCAyMywgMzIsIDQsIDE5MywgMTEsIDIzLCAKLSAgICAzMiwgNCwgMjMwLCAyNSwgMTEsIDIzLCAzMiwgNCwgNzYsIDExLCAyMywgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDMyLCAKLSAgICA0LCAyMjQsIDk2LCAxMSwgMjMsIDMyLCA0LCAxNTMsIDExLCAyMywgMzIsIDQsIDIyMiwgOTEsIDExLCAyMywgMzIsIDQsIAotICAgIDIxNywgMTUyLCAxMSwgMjMsIDMyLCA0LCA3MCwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDQsIDIxMiwgCi0gICAgOTgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAxMTksIDYsIDYxLCAxMSwgMTE5LCA2LCAyNTEsIDY2LCAxMSwgMTE5LCA2LCAyNDksIDYwLCAxMSwgMTE5LCAKLSAgICA2LCAyNDMsIDIwMiwgMTEsIDExOSwgNiwgMjM1LCAxNDQsIDExLCAxMTksIDYsIDIzNSwgMjMsIDExLCAxMTksIDYsIDIzMCwgCi0gICAgMjUsIDExLCAxMTksIDYsIDc2LCAxMSwgMTE5LCA2LCAyMjYsIDEwNSwgMTEsIDExOSwgNiwgMjI0LCA5NiwgMTEsIDExOSwgCi0gICAgNiwgMjIyLCA5MSwgMTEsIDExOSwgNiwgMjE3LCAxNTIsIDExLCAxMTksIDYsIDcwLCAxMSwgMTE5LCA2LCAyMTQsIDEwNSwgCi0gICAgMTEsIDExOSwgNiwgMjEyLCA5OCwgMTEsIDExOSwgNiwgMjExLCAxNzgsIDExLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMTE5LCAKLSAgICA2LCAyMTAsIDE1OSwgMTEsIDExOSwgNCwgNjEsIDExLCAxMTksIDQsIDI1MywgMTU4LCAxMSwgMTE5LCA0LCAyNTEsIDY2LCAKLSAgICAxMSwgMTE5LCA0LCAyNDksIDYwLCAxMSwgMTE5LCA0LCAyNDUsIDYsIDExLCAxMTksIDQsIDI0MiwgNjAsIDExLCAxMTksIDQsIAotICAgIDczLCAxMSwgMTE5LCA0LCAyMzUsIDE0NCwgMTEsIDExOSwgNCwgMjM1LCAyMywgMTEsIDExOSwgNCwgMTU2LCAxMSwgMTE5LCAKLSAgICA0LCAxOTMsIDExLCAxMTksIDQsIDIzMCwgMjUsIDExLCAxMTksIDQsIDIyNiwgMTA1LCAxMSwgMTE5LCA0LCAyMjQsIDk2LCAKLSAgICAxMSwgMTE5LCA0LCAxNTMsIDExLCAxMTksIDQsIDIyMiwgOTEsIDExLCAxMTksIDQsIDIxNywgMTUyLCAxMSwgMTE5LCA0LCAKLSAgICA3MCwgMTEsIDExOSwgNCwgMjE0LCAxMDUsIDExLCAxMTksIDQsIDIxMiwgOTgsIDExLCAxMTksIDQsIDIxMSwgMTc4LCAxMSwgCi0gICAgMTE5LCA0LCAyMTEsIDExNywgMTEsIDExOSwgNCwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA2LCA2MSwgMTEsIDIzLCAxMTksIAotICAgIDYsIDI1MywgMTU4LCAxMSwgMjMsIDExOSwgNiwgMjUxLCA2NiwgMTEsIDIzLCAxMTksIDYsIDI0OSwgNjAsIDExLCAyMywgCi0gICAgMTE5LCA2LCA3NSwgMTEsIDIzLCAxMTksIDYsIDI0NSwgNiwgMTEsIDIzLCAxMTksIDYsIDI0MywgMjAyLCAxMSwgMjMsIAotICAgIDExOSwgNiwgMjQyLCA2MCwgMTEsIDIzLCAxMTksIDYsIDczLCAxMSwgMjMsIDExOSwgNiwgMjM1LCAxNDQsIDExLCAyMywgCi0gICAgMTE5LCA2LCAyMzUsIDIzLCAxMSwgMjMsIDExOSwgNiwgMTU2LCAxMSwgMjMsIDExOSwgNiwgMTkzLCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjMwLCAyNSwgMTEsIDIzLCAxMTksIDYsIDc2LCAxMSwgMjMsIDExOSwgNiwgMjI2LCAxMDUsIDExLCAyMywgMTE5LCA2LCAKLSAgICAyMjQsIDk2LCAxMSwgMjMsIDExOSwgNiwgMTUzLCAxMSwgMjMsIDExOSwgNiwgMjIyLCA5MSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxNywgMTUyLCAxMSwgMjMsIDExOSwgNiwgNzAsIDExLCAyMywgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxMiwgOTgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA0LCA2MSwgMTEsIDIzLCAxMTksIDQsIDI1MywgMTU4LCAxMSwgMjMsIDExOSwgCi0gICAgNCwgMjUxLCA2NiwgMTEsIDIzLCAxMTksIDQsIDI0OSwgNjAsIDExLCAyMywgMTE5LCA0LCA3NSwgMTEsIDIzLCAxMTksIDQsIAotICAgIDI0NSwgNiwgMTEsIDIzLCAxMTksIDQsIDI0MywgMjAyLCAxMSwgMjMsIDExOSwgNCwgMjQyLCA2MCwgMTEsIDIzLCAxMTksIAotICAgIDQsIDczLCAxMSwgMjMsIDExOSwgNCwgMjM1LCAxNDQsIDExLCAyMywgMTE5LCA0LCAyMzUsIDIzLCAxMSwgMjMsIDExOSwgNCwgCi0gICAgMTU2LCAxMSwgMjMsIDExOSwgNCwgMTkzLCAxMSwgMjMsIDExOSwgNCwgMjMwLCAyNSwgMTEsIDIzLCAxMTksIDQsIDc2LCAKLSAgICAxMSwgMjMsIDExOSwgNCwgMjI2LCAxMDUsIDExLCAyMywgMTE5LCA0LCAyMjQsIDk2LCAxMSwgMjMsIDExOSwgNCwgMTUzLCAKLSAgICAxMSwgMjMsIDExOSwgNCwgMjIyLCA5MSwgMTEsIDIzLCAxMTksIDQsIDIxNywgMTUyLCAxMSwgMjMsIDExOSwgNCwgNzAsIAorICAgIDEyLCAxMywgMjIzLCAxOTMsIDEyLCAxMywgMjIzLCAxOTIsIDEyLCAxMywgMjIyLCA5MCwgMTIsIDEzLCAyMjIsIDg5LCAxMiwgCisgICAgMTMsIDIyMiwgODgsIDEyLCAxMywgMjIyLCA4NywgMTIsIDEzLCAyMjIsIDg2LCAxMiwgMTMsIDIyMiwgODUsIDEyLCAxMywgCisgICAgMjIyLCA4NCwgMTIsIDEzLCAyMjIsIDgzLCAxMiwgMTMsIDIyMiwgODIsIDEyLCAxMywgMjIyLCA4MSwgMTIsIDEzLCAyMjIsIAorICAgIDgwLCAxMiwgMTMsIDIyMiwgNzksIDEyLCAxMywgMjIyLCA3OCwgMTIsIDEzLCAyMjIsIDc3LCAxMiwgMTMsIDIyMiwgNzYsIAorICAgIDEyLCAxMywgMjIyLCA3NSwgMTIsIDEzLCAyMjIsIDc0LCAxMiwgMTMsIDIyMiwgNzMsIDEyLCAxMywgMjIyLCA3MiwgMTIsIAorICAgIDEzLCAyMjIsIDcxLCAxMiwgMTMsIDIyMiwgNzAsIDEyLCAxMywgMjIyLCA2OSwgMTIsIDEzLCAyMjIsIDY4LCAxMiwgMTMsIAorICAgIDIyMiwgNjcsIDEyLCAxMywgMjIyLCA2NiwgMTIsIDEzLCAyMjIsIDY1LCAxMiwgMTMsIDIyMiwgNjQsIDEyLCAxMywgMjIyLCAKKyAgICA2MywgMTIsIDEzLCAyMjIsIDYyLCAxMiwgMTMsIDIyMiwgNjEsIDEyLCAxMywgMjIyLCA2MCwgMTIsIDEzLCAyMjIsIDU5LCAKKyAgICAxMiwgMTMsIDIyMiwgNTgsIDEyLCAxMywgMjIyLCA1NywgMTIsIDEzLCAyMjIsIDU2LCAxMiwgMTMsIDIyMiwgNTUsIDEyLCAKKyAgICAxMywgMjIyLCA1NCwgMTIsIDEzLCAyMjIsIDUzLCAxMiwgMTMsIDIyMiwgNTIsIDEyLCAxMywgMjIyLCA1MSwgMTIsIDEzLCAKKyAgICAyMjIsIDUwLCAxMiwgMTMsIDIyMiwgNDksIDEyLCAxMywgMjIyLCA0OCwgMTIsIDEzLCAyMjIsIDQ3LCAxMiwgMTMsIDIyMiwgCisgICAgNDYsIDEyLCAxMywgMjIyLCA0NSwgMTIsIDEzLCAyMjIsIDQ0LCAxMiwgMTMsIDIyMiwgNDMsIDEyLCAxMywgMjIyLCA0MiwgCisgICAgMTIsIDEzLCAyMjIsIDQxLCAxMiwgMTMsIDIyMiwgNDAsIDEyLCAxMywgMjIyLCAzOSwgMTIsIDEzLCAyMjIsIDM4LCAxMiwgCisgICAgMTMsIDIyMiwgMzcsIDEyLCAxMywgMjE3LCAxNTEsIDEyLCAxMywgMjE3LCAxNTAsIDEyLCAxMywgMjE3LCAxNDksIDEyLCAKKyAgICAxMywgMjE3LCAxNDgsIDEyLCAxMywgMjE3LCAxNDcsIDEyLCAxMywgMjE3LCAxNDYsIDEyLCAxMywgMjE3LCAxNDUsIDEyLCAKKyAgICAxMywgMjE3LCAxNDQsIDEyLCAxMywgMjE3LCAxNDMsIDEyLCAxMywgMjE3LCAxNDIsIDEyLCAxMywgMjE3LCAxNDEsIDEyLCAKKyAgICAxMywgMjE3LCAxNDAsIDEyLCAxMywgMjE3LCAxMzksIDEyLCAxMywgMjE3LCAxMzgsIDEyLCAxMywgMjE3LCAxMzcsIDEyLCAKKyAgICAxMywgMjE3LCAxMzYsIDEyLCAxMywgMjE3LCAxMzUsIDEyLCAxMywgMjE3LCAxMzQsIDEyLCAxMywgMjE3LCAxMzMsIDEyLCAKKyAgICAxMywgMjE3LCAxMzIsIDEyLCAxMywgMjE3LCAxMzEsIDEyLCAxMywgMjE3LCAxMzAsIDEyLCAxMywgMjE3LCAxMjksIDEyLCAKKyAgICAxMywgMjE3LCAxMjgsIDEyLCAxMywgMjE3LCAxMjcsIDEyLCAxMywgMjE3LCAxMjYsIDEyLCAxMywgMjE3LCAxMjUsIDEyLCAKKyAgICAxMywgMjE3LCAxMjQsIDEyLCAxMywgMjE3LCAxMjMsIDEyLCAxMywgMjE3LCAxMjIsIDEyLCAxMywgMjE3LCAxMjEsIDEyLCAKKyAgICAxMywgMjE3LCAxMjAsIDEyLCAxMywgMjE3LCAxMTksIDEyLCAxMywgMjE3LCAxMTgsIDEyLCAxMywgMjE3LCAxMTcsIDEyLCAKKyAgICAxMywgMjE3LCAxMTYsIDEyLCAxMywgMjE3LCAxMTUsIDEyLCAxMywgMjE3LCAxMTQsIDEyLCAxMywgMjE3LCAxMTMsIDEyLCAKKyAgICAxMywgMjE3LCAxMTIsIDEyLCAxMywgMjE3LCAxMTEsIDEyLCAxMywgMjE3LCAxMTAsIDEyLCAxMywgMjE3LCAxMDksIDEyLCAKKyAgICAxMywgMjE3LCAxMDgsIDEyLCAxMywgMjE1LCAyMiwgMTIsIDEzLCAyMTUsIDIxLCAxMiwgMTMsIDIxNSwgMjAsIDEyLCAxMywgCisgICAgMjE1LCAxOSwgMTIsIDEzLCAyMTUsIDE4LCAxMiwgMTMsIDIxNSwgMTcsIDEyLCAxMywgMjE1LCAxNiwgMTIsIDEzLCAyMTUsIAorICAgIDE1LCAxMiwgMTMsIDIxNSwgMTQsIDEyLCAxMywgMjE1LCAxMywgMTIsIDEzLCAyMTUsIDEyLCAxMiwgMTMsIDIxNSwgMTEsIAorICAgIDEyLCAxMywgMjE1LCAxMCwgMTIsIDEzLCAyMTUsIDksIDEyLCAxMywgMjE1LCA4LCAxMiwgMTMsIDIxNSwgNywgMTIsIDEzLCAKKyAgICAyMTUsIDYsIDEyLCAxMywgMjE1LCA1LCAxMiwgMTMsIDIxNSwgNCwgMTIsIDEzLCAyMTUsIDMsIDEyLCAxMywgMjE1LCAyLCAKKyAgICAxMiwgMTMsIDIxNSwgMSwgMTIsIDEzLCAyMTUsIDAsIDEyLCAxMywgMjE0LCAyNTUsIDEyLCAxMywgMjE0LCAyNTQsIDEyLCAKKyAgICAxMywgMjE0LCAyNTMsIDEyLCAxMywgMjE0LCAyNTIsIDEyLCAxMywgMjE0LCAyNTEsIDEyLCAxMywgMjE0LCAyNTAsIDEyLCAKKyAgICAxMywgMjE0LCAyNDksIDEyLCAxMywgMjE0LCAyNDgsIDEyLCAxMywgMjE0LCAyNDcsIDEyLCAxMywgMjE0LCAyNDYsIDEyLCAKKyAgICAxMywgMjE0LCAyNDUsIDEyLCAxMywgMjE0LCAyNDQsIDEyLCAxMywgMjE0LCAyNDMsIDEyLCAxMywgMjE0LCAyNDIsIDEyLCAKKyAgICAxMywgMjE0LCAyNDEsIDEyLCAxMywgMjE0LCAyNDAsIDEyLCAxMywgMjE0LCAyMzksIDEyLCAxMywgMjE0LCAyMzgsIDEyLCAKKyAgICAxMywgMjE0LCAyMzcsIDEyLCAxMywgMjE0LCAyMzYsIDEyLCAxMywgMjE0LCAyMzUsIDEyLCAxMywgMjE0LCAyMzQsIDEyLCAKKyAgICAxMywgMjE0LCAyMzMsIDEyLCAxMywgMjE0LCAyMzIsIDEyLCAxMywgMjE0LCAxMDQsIDEyLCAxMywgMjE0LCAxMDMsIDEyLCAKKyAgICAxMywgMjE0LCAxMDIsIDEyLCAxMywgMjE0LCAxMDEsIDEyLCAxMywgMjE0LCAxMDAsIDEyLCAxMywgMjE0LCA5OSwgMTIsIAorICAgIDEzLCAyMTQsIDk4LCAxMiwgMTMsIDIxNCwgOTcsIDEyLCAxMywgMjE0LCA5NiwgMTIsIDEzLCAyMTQsIDk1LCAxMiwgMTMsIAorICAgIDIxNCwgOTQsIDEyLCAxMywgMjE0LCA5MywgMTIsIDEzLCAyMTQsIDkyLCAxMiwgMTMsIDIxNCwgOTEsIDEyLCAxMywgMjE0LCAKKyAgICA5MCwgMTIsIDEzLCAyMTQsIDg5LCAxMiwgMTMsIDIxNCwgODgsIDEyLCAxMywgMjE0LCA4NywgMTIsIDEzLCAyMTQsIDg2LCAKKyAgICAxMiwgMTMsIDIxNCwgODUsIDEyLCAxMywgMjE0LCA4NCwgMTIsIDEzLCAyMTQsIDgzLCAxMiwgMTMsIDIxNCwgODIsIDEyLCAKKyAgICAxMywgMjE0LCA4MSwgMTIsIDEzLCAyMTQsIDgwLCAxMiwgMTMsIDIxNCwgNzksIDEyLCAxMywgMjE0LCA3OCwgMTIsIDEzLCAKKyAgICAyMTQsIDc3LCAxMiwgMTMsIDIxNCwgNzYsIDEyLCAxMywgMjE0LCA3NSwgMTIsIDEzLCAyMTQsIDc0LCAxMiwgMTMsIDIxNCwgCisgICAgNzMsIDEyLCAxMywgMjE0LCA3MiwgMTIsIDEzLCAyMTQsIDcxLCAxMiwgMTMsIDIxNCwgNzAsIDEyLCAxMywgMjE0LCA2OSwgCisgICAgMTIsIDEzLCAyMTQsIDY4LCAxMiwgMTMsIDIxNCwgNjcsIDEyLCAxMywgMjE0LCA2NiwgMTIsIDEzLCAyMTQsIDY1LCAxMiwgCisgICAgMTMsIDIxNCwgNjQsIDEyLCAxMywgMjE0LCA2MywgMTIsIDEzLCAyMTQsIDYyLCAxMiwgMTMsIDIxNCwgNjEsIDEyLCAxMywgCisgICAgMjE0LCA2MCwgMTIsIDEzLCAyMTQsIDU5LCAxMiwgMTMsIDIxNCwgNTgsIDEyLCAxMywgMjE0LCA1NywgMTIsIDEzLCAyMTQsIAorICAgIDU2LCAxMiwgMTMsIDIxNCwgNTUsIDEyLCAxMywgMjE0LCA1NCwgMTIsIDEzLCAyMTQsIDUzLCAxMiwgMTMsIDIxNCwgNTIsIAorICAgIDEyLCAxMywgMjE0LCA1MSwgMTIsIDEzLCAyMTQsIDUwLCAxMiwgMTMsIDIxNCwgNDksIDEyLCAxMywgMjE0LCA0OCwgMTIsIAorICAgIDEzLCAyMTQsIDQ3LCAxMiwgMTMsIDIxNCwgNDYsIDEyLCAxMywgMjE0LCA0NSwgMTIsIDEzLCAyMTQsIDQ0LCAxMiwgMTMsIAorICAgIDIxNCwgNDMsIDEyLCAxMywgMjE0LCA0MiwgMTIsIDEzLCAyMTQsIDQxLCAxMiwgMTMsIDIxNCwgNDAsIDEyLCAxMywgMjE0LCAKKyAgICAzOSwgMTIsIDEzLCAyMTQsIDM4LCAxMiwgMTMsIDIxNCwgMzcsIDEyLCAxMywgMjE0LCAzNiwgMTIsIDEzLCAyMTQsIDM1LCAKKyAgICAxMiwgMTMsIDIxNCwgMzQsIDEyLCAxMywgMjE0LCAzMywgMTIsIDEzLCAyMTQsIDMyLCAxMiwgMTMsIDIxNCwgMzEsIDEyLCAKKyAgICAxMywgMjE0LCAzMCwgMTIsIDEzLCAyMTQsIDI5LCAxMiwgMTMsIDIxNCwgMjgsIDEyLCAxMywgMjEyLCA5NywgMTIsIDEzLCAKKyAgICAyMTIsIDk2LCAxMiwgMTMsIDIxMiwgOTUsIDEyLCAxMywgMjEyLCA5NCwgMTIsIDEzLCAyMTIsIDkzLCAxMiwgMTMsIDIxMiwgCisgICAgOTIsIDEyLCAxMywgMjEyLCA5MSwgMTIsIDEzLCAyMTIsIDkwLCAxMiwgMTMsIDIxMiwgODksIDEyLCAxMywgMjEyLCA4OCwgCisgICAgMTIsIDEzLCAyMTIsIDg3LCAxMiwgMTMsIDIxMiwgODYsIDEyLCAxMywgMjEyLCA4NSwgMTIsIDEzLCAyMTIsIDg0LCAxMiwgCisgICAgMTMsIDIxMiwgODMsIDEyLCAxMywgMjEyLCA4MiwgMTIsIDEzLCAyMTIsIDgxLCAxMiwgMTMsIDIxMiwgODAsIDEyLCAxMywgCisgICAgMjEyLCA3OSwgMTIsIDEzLCAyMTIsIDc4LCAxMiwgMTMsIDIxMiwgNzcsIDEyLCAxMywgMjEyLCA3NiwgMTIsIDEzLCAyMTIsIAorICAgIDc1LCAxMiwgMTMsIDIxMiwgNzQsIDEyLCAxMywgMjEyLCA3MywgMTIsIDEzLCAyMTIsIDcyLCAxMiwgMTMsIDIxMiwgNzEsIAorICAgIDEyLCAxMywgMjEyLCA3MCwgMTIsIDEzLCAyMTIsIDY5LCAxMiwgMTMsIDIxMiwgNjgsIDEyLCAxMywgMjEyLCA2NywgMTIsIAorICAgIDEzLCAyMTIsIDY2LCAxMiwgMTMsIDIxMSwgMTc3LCAxMiwgMTMsIDIxMSwgMTc2LCAxMiwgMTMsIDIxMSwgMTc1LCAxMiwgCisgICAgMTMsIDIxMSwgMTc0LCAxMiwgMTMsIDIxMSwgMTczLCAxMiwgMTMsIDIxMSwgMTcyLCAxMiwgMTMsIDIxMSwgMTcxLCAxMiwgCisgICAgMTMsIDIxMSwgMTcwLCAxMiwgMTMsIDIxMSwgMTY5LCAxMiwgMTMsIDIxMSwgMTY4LCAxMiwgMTMsIDIxMSwgMTY3LCAxMiwgCisgICAgMTMsIDIxMSwgMTY2LCAxMiwgMTMsIDIxMSwgMTE1LCAxMiwgMTMsIDIxMSwgMTE0LCAxMiwgMTMsIDIxMSwgMTEzLCAxMiwgCisgICAgMTMsIDIxMSwgMTEyLCAxMiwgMTMsIDIxMSwgMTExLCAxMiwgMTMsIDIxMSwgMTEwLCAxMiwgMTMsIDIxMSwgMTA5LCAxMiwgCisgICAgMTMsIDIxMSwgMTA4LCAxMiwgMTMsIDIxMSwgMTA3LCAxMiwgMTMsIDIxMCwgMTU4LCAxMiwgMTMsIDIxMCwgMTU3LCAxMiwgCisgICAgMTMsIDIxMCwgMTU2LCAxMiwgMTMsIDIxMCwgMTU1LCAxMiwgMTMsIDIxMCwgMTU0LCAxMiwgMTMsIDIxMCwgMTUzLCAxMiwgCisgICAgMTMsIDIxMCwgMTUyLCAxMiwgMTMsIDIxMCwgMTUxLCAxMiwgMTMsIDIxMCwgMTUwLCAxMiwgMTMsIDIxMCwgMTQ5LCAxMiwgCisgICAgMTMsIDIxMCwgMTQ4LCAxMiwgMTMsIDIxMCwgMTQ3LCAxMiwgMTMsIDIxMCwgMTQ2LCAxMiwgMTMsIDIxMCwgMTQ1LCAxMiwgCisgICAgMTMsIDIxMCwgMTQ0LCAxMiwgMTMsIDIxMCwgMTQzLCAxMiwgMTMsIDIxMCwgMTQyLCAxMiwgMTMsIDIxMCwgMTQxLCAxMiwgCisgICAgMTMsIDIxMCwgMTQwLCAxMiwgMTMsIDIxMCwgMTM5LCAxMiwgMTMsIDIxMCwgMTM4LCAxMiwgMTMsIDIxMCwgMTM3LCAxMiwgCisgICAgMTMsIDIxMCwgMTM2LCAxMiwgMTMsIDIxMCwgMTM1LCAxMiwgMTMsIDIxMCwgMTM0LCAxMiwgMTMsIDIxMCwgMTMzLCAxMiwgCisgICAgMTMsIDIxMCwgMTMyLCAxMiwgMTMsIDIxMCwgMTMxLCAxMiwgMTMsIDIxMCwgMTMwLCAxMiwgMTMsIDIxMCwgMTI5LCAxMiwgCisgICAgMTMsIDIxMCwgMTI4LCAxMiwgMTMsIDIxMCwgMTI3LCAxMiwgMTMsIDIxMCwgMTI2LCAxMiwgMTMsIDIxMCwgMTI1LCAxMiwgCisgICAgMTMsIDIxMCwgMTI0LCAxMiwgMTMsIDIxMCwgMTIzLCAxMiwgMTMsIDIxMCwgMTIyLCAxMiwgMTMsIDIxMCwgMTIxLCAxMiwgCisgICAgMTMsIDIxMCwgMTIwLCAxMiwgMTMsIDIxMCwgMTE5LCAxMiwgMTMsIDIxMCwgMTE4LCAxMiwgMTMsIDI1NSwgODEsIDEyLCAKKyAgICAxMywgMjU1LCA4MCwgMTIsIDEzLCAyNTUsIDc5LCAxMiwgMTMsIDI1NSwgNzgsIDEyLCAxMywgMjU1LCA3NywgMTIsIDEzLCAKKyAgICAyNTUsIDc2LCAxMiwgMTMsIDI1NSwgNzUsIDEyLCAxMywgMjU1LCA3NCwgMTIsIDEzLCAyNTUsIDczLCAxMiwgMTMsIDI1NSwgCisgICAgNzIsIDEyLCAxMywgMjU1LCA3MSwgMTIsIDEzLCAyNTUsIDcwLCAxMiwgMTMsIDI1NSwgNjksIDEyLCAxMywgMjU1LCA2OCwgCisgICAgMTIsIDEzLCAyNTUsIDY3LCAxMiwgMTMsIDI1NSwgNjYsIDEyLCAxMywgMjU1LCA2NSwgMTIsIDEzLCAyNTUsIDY0LCAxMiwgCisgICAgMTMsIDI1NSwgNjMsIDEyLCAxMywgMjU1LCA2MiwgMTIsIDEzLCAyNTUsIDYxLCAxMiwgMTMsIDI1NSwgNjAsIDEyLCAxMywgCisgICAgMjU1LCA1OSwgMTIsIDEzLCAyNTUsIDU4LCAxMiwgMTMsIDI1NSwgNTcsIDEyLCAxMywgMjU1LCA1NiwgMTIsIDEzLCAyNTUsIAorICAgIDU1LCAxMiwgMTMsIDI1NSwgNTQsIDEyLCAxMywgMjU1LCA1MywgMTIsIDEzLCAyNTUsIDUyLCAxMiwgMTMsIDI1NSwgNTEsIAorICAgIDEyLCAxMywgMjU1LCA1MCwgMTIsIDEzLCAyNTUsIDQ5LCAxMiwgMTMsIDI1NSwgNDgsIDIwLCAxLCAxNjcsIDIyOSwgMTcsIAorICAgIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDI0MywgNzcsIDI0NCwgNDQsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMzEsIDIyLCAKKyAgICAyMjUsIDYwLCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjMxLCAyMiwgMjI1LCA2MSwgMjAsIDEsIDE2NywgMjI5LCAyMzEsIAorICAgIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDIxOSwgMjIzLCAyMCwgMSwgMTY3LCAyMTYsIDY3LCAyMzEsIDIxLCAyMCwgMSwgMTY3LCAKKyAgICAyMjcsIDEyMiwgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjIwLCAyMSwgMjI2LCA5NCwgMjI4LCAxNzQsIDIwLCAxLCAxNjcsIAorICAgIDIyNCwgMjU0LCAyMjYsIDk0LCAyMjgsIDE3NSwgMjI1LCA2MCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIyNiwgOTQsIDIyOCwgCisgICAgMTc1LCAyMjUsIDYxLCAyMCwgMSwgMTY3LCAyMzEsIDIyMywgMjAsIDEsIDE2NywgMjE1LCAxMjAsIDIzMSwgMjI0LCAyMCwgCisgICAgMSwgMTY3LCAyMjksIDc2LCAyMCwgMSwgMTY3LCAyMzEsIDIyMCwgMjAsIDEsIDE2NywgMjMxLCAxODEsIDIwLCAxLCAxNjcsIAorICAgIDIzMCwgNTMsIDIwLCAxLCAxNjcsIDIyMCwgMTI2LCAyMCwgMSwgMTY3LCAyMjcsIDI0NiwgMjAsIDEsIDE2NywgMjM0LCAKKyAgICAxNTUsIDIwLCAxLCAxNjcsIDIyOCwgMTQzLCAyMCwgMSwgMTY3LCAyMTgsIDUsIDIwLCAxLCAxNjcsIDIyOSwgMTYsIDIwLCAKKyAgICAxLCAxNjcsIDIzMywgOTMsIDIwLCAxLCAxNjcsIDIzMywgMTgsIDIzMywgMTk1LCAyMCwgMSwgMTY3LCAyMjcsIDI1MywgCisgICAgMjMxLCAyOSwgMjAsIDEsIDE2NywgMjMxLCAyMjcsIDIwLCAxLCAxNjcsIDIyNSwgMjUwLCAyMCwgMSwgMTY3LCAyNDIsIAorICAgIDIzOCwgMjAsIDEsIDE2NywgMjI2LCA1NCwgMjAsIDEsIDE2NywgMjMwLCAxNTYsIDIyOSwgNTAsIDIwLCAxLCAxNjcsIDIyNywgCisgICAgMTAzLCAyMzEsIDMyLCAyMCwgMSwgMTY3LCAxMDQsIDIxMCwgMTg4LCAyMjksIDIyNSwgMjAsIDEsIDE2NywgMjQyLCAyMzksIAorICAgIDIwLCAxLCAxNjcsIDIyNywgMjUzLCAyMjcsIDI1NCwgMjAsIDEsIDE2NywgMjE5LCAxMzAsIDIwLCAxLCAxNjcsIDIzMSwgCisgICAgMTQsIDIwLCAxLCAxNjcsIDIzMSwgMzUsIDIwLCAxLCAxNjcsIDIzMCwgMTM1LCAyMCwgMSwgMTY3LCAyMzQsIDI1NSwgMjAsIAorICAgIDEsIDE2NywgMjI2LCA5NCwgMjMzLCA1MywgMjAsIDEsIDE2NywgMjI5LCAxNTQsIDIzMywgNTMsIDIwLCAxLCAxNjcsIDIyNSwgCisgICAgMTYxLCAyMCwgMSwgMTY3LCAyMzEsIDIyMSwgMjAsIDEsIDE2NywgMjI4LCAyMTIsIDIwLCAxLCAxNjcsIDIyNCwgMTM3LCAKKyAgICAyMCwgMSwgMTY3LCAyMTUsIDExNywgMjAsIDEsIDE2NywgMjMyLCA5OSwgMjAsIDEsIDE2NywgMjE5LCA0MywgMjAsIDEsIAorICAgIDE2NywgMjE2LCAyMTcsIDIwLCAxLCAxNjcsIDIzMSwgMjE4LCAyMCwgMSwgMTY3LCAyMzQsIDE2MiwgMjAsIDEsIDE2NywgCisgICAgMjI5LCAxNTAsIDIwLCAxLCAxNjcsIDIzMywgMjA3LCAyMCwgMSwgMTY3LCAyMzAsIDEzNiwgMjAsIDEsIDE2NywgMjE5LCAKKyAgICAyMjAsIDIwLCAxLCAxNjcsIDIzMiwgMTQ0LCAyMCwgMSwgMTY3LCAyNDQsIDEwMSwgMjAsIDEsIDE2NywgMjIyLCAyMDEsIAorICAgIDIwLCAxLCAxNjcsIDIzMywgMjQ3LCAyMCwgMSwgMTY3LCAyMTksIDM5LCAyMCwgMSwgMTY3LCAyMzEsIDE3OCwgMjI1LCAKKyAgICAxMDIsIDIwLCAxLCAxNjcsIDIyMCwgMTQsIDIwLCAxLCAxNjcsIDIyNywgMjUyLCAyMCwgMSwgMTY3LCAyMTksIDI1NSwgCisgICAgMjI4LCA3LCAyMTAsIDE5NiwgMjAsIDEsIDE2NywgMjI3LCAxNDIsIDIzMCwgMTUzLCAyMCwgMSwgMTY3LCAyMjYsIDg5LCAKKyAgICAyMCwgMSwgMTY3LCAyMjgsIDE0NCwgMjAsIDEsIDE2NywgMjE0LCAxNzAsIDIwLCAxLCAxNjcsIDIyOSwgNTMsIDIwLCAxLCAKKyAgICAxNjcsIDIzMSwgMjE3LCAyMCwgMSwgMTY3LCAyMjgsIDE4NiwgMjAsIDEsIDE2NywgMjMxLCAxMjQsIDIwLCAxLCAxNjcsIAorICAgIDIyNywgMTU1LCAyMCwgMSwgMTY3LCAyMTYsIDIyMSwgMjAsIDEsIDE2NywgMjE5LCAzNiwgMjAsIDEsIDE2NywgMjI2LCA5MCwgCisgICAgMjAsIDEsIDE2NywgMjI4LCAxMSwgMjAsIDEsIDE2NywgMjMxLCAyMjUsIDIwLCAxLCAxNjcsIDIyNywgMTUyLCAyMCwgMSwgCisgICAgMTY3LCAyMzQsIDIyMiwgMjAsIDEsIDE2NywgMjI4LCAxNCwgMjAsIDEsIDE2NywgMjEzLCAyNTAsIDIwLCAxLCAxNjcsIAorICAgIDIzMiwgMTAzLCAyMCwgMSwgMTY3LCAyMjksIDEwMywgMjAsIDEsIDE2NywgMjI5LCAyMDEsIDIwLCAxLCAxNjcsIDIzMSwgCisgICAgMTIzLCAyMCwgMSwgMjI1LCAxNDEsIDIyOCwgOSwgMjAsIDEsIDIyNSwgMTQxLCAyMTUsIDEyMCwgMjMxLCAyMjIsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjE5LCAxODcsIDIwLCAxLCAyMjUsIDE0MSwgMjIwLCAxMzAsIDIxNSwgMTE5LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzMiwgMTQ2LCAyMjcsIDI0OSwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDEzMCwgMjMxLCAyMjYsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjM0LCA5MywgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDE1LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTI1LCAyMCwgMSwgMjI1LCAKKyAgICAxNDEsIDIzNCwgMjQzLCAyMCwgMSwgMjI1LCAxNDEsIDIyNSwgMjExLCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgODksIDIzMywgCisgICAgNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjMzLCAxMDksIDIyOCwgNywgMjI3LCAxNjQsIDIwLCAxLCAyMjUsIDE0MSwgMjI3LCAKKyAgICAyNDcsIDIyMCwgNDAsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAxMjEsIDIyOCwgMTg5LCAyMCwgMSwgMjI1LCAxNDEsIDI0MiwgCisgICAgMjM2LCAyMCwgMSwgMjI1LCAxNDEsIDIyNSwgNTIsIDIwLCAxLCAyMjUsIDE0MSwgMjE1LCAxMjAsIDIyOCwgNSwgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMjAsIDQ1LCAyMjgsIDE4NCwgMjAsIDEsIDIyNSwgMTQxLCAyMjAsIDQxLCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzMSwgMjIsIDIxNiwgMjIwLCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTEyLCAyMzEsIDEyNiwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMjcsIDE1MywgMjI3LCAyNDksIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNTEsIDIwLCAxLCAyMjUsIDE0MSwgMjQyLCAyMzcsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNDcsIDIwLCAxLCAyMjUsIDE0MSwgMjMzLCAxMzUsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjI1LCAyNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjEzLCAxODIsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAxOCwgMjMwLCA1MSwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDUyLCAyMzEsIDEwOCwgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDE5MywgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMjIsIDEzLCAyMCwgMSwgMjI1LCAxNDEsIDIxNywgOTgsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAzNCwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDM3LCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMzgsIDIzMywgOTAsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjMxLCAyNCwgMjAsIDEsIDIyNSwgMTQxLCAyMTgsIDUzLCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTE2LCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIzMCwgMTM4LCAyMCwgMSwgMjI1LCAxNDEsIDIyNywgMTY3LCAyMCwgMSwgMjI1LCAxNDEsIDIyNCwgMTQxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMzMsIDIyOSwgNTQsIDIwLCAxLCAyMjUsIDE0MSwgMjQ0LCAxMzQsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjMxLCAxMDMsIDIwLCAxLCAyMjUsIDE0MSwgMjQ0LCAxNTUsIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNTksIDIwLCAKKyAgICAxLCAyMjUsIDE0MSwgMjMxLCAyNDQsIDIyOCwgMTc4LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMjQ0LCAyMjgsIDE1NCwgMjAsIAorICAgIDEsIDIyNSwgMTQxLCAyMzMsIDE3LCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNjAsIDIwLCAxLCAyMjUsIDE0MSwgMjI4LCAxNiwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAxODYsIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCA4MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDYsIAorICAgIDIwLCAxLCAxMzcsIDIyOSwgMTcsIDIzMSwgMjI0LCAyMCwgMSwgMTM3LCAyMjcsIDEyMSwgMjAsIDEsIDEzNywgMjEwLCAKKyAgICAxOTYsIDIwLCAxLCAxMzcsIDIxMiwgNTMsIDIwLCAxLCAxMzcsIDIyOSwgNTMsIDIwLCAxLCAxMzcsIDIyOSwgMTQyLCAyMCwgCisgICAgMSwgMTM3LCAyMjksIDI0LCAyMCwgMSwgMTM3LCAyNDIsIDI0NiwgMjAsIDEsIDEzNywgMjMxLCAxMjAsIDIwLCAxLCAxMzcsIAorICAgIDI0MywgODQsIDIwLCAxLCAxMzcsIDIyNywgMTQ0LCAyMzAsIDE3NSwgMjMxLCAzNiwgMjAsIDEsIDEzNywgMjI3LCAyNDUsIAorICAgIDIzMSwgMTExLCAyMCwgMSwgMTM3LCAyMzEsIDExNywgMjAsIDEsIDEzNywgMjI1LCA1OCwgMjAsIDEsIDEzNywgMjI5LCAKKyAgICAxMjcsIDIwLCAxLCAxMzcsIDIzMSwgMTI4LCAyNTEsIDM3LCAyMCwgMSwgMTM3LCAyMzQsIDE0OSwgMjAsIDEsIDEzNywgCisgICAgMjQyLCAyNDcsIDIwLCAxLCAxMzcsIDIzNCwgMTU2LCAyMCwgMSwgMTM3LCAyMTAsIDIxMywgMjMwLCA4MSwgMjAsIDEsIAorICAgIDEzNywgMjI3LCAxMTUsIDIwLCAxLCAxMzcsIDIzMSwgMTA1LCAyMCwgMSwgMTM3LCAyMjgsIDE1LCAyMCwgMSwgMTM3LCAKKyAgICAyMzEsIDExMSwgMjAsIDEsIDEzNywgMjExLCAxNiwgMjAsIDEsIDEzNywgMjMzLCAyNTUsIDIwLCAxLCAxMzcsIDIzNSwgMTYsIAorICAgIDIwLCAxLCAxMzcsIDIyMCwgMTI1LCAyMCwgMSwgMTM3LCAyMjksIDEzNiwgMjAsIDEsIDEzNywgMjE3LCA5NiwgMjAsIDEsIAorICAgIDEzNywgMjI4LCAxNTgsIDIwLCAxLCAxMzcsIDIxNiwgNjcsIDIxMCwgMTk4LCAyMCwgMSwgMTM3LCAyMTgsIDgwLCAyMCwgMSwgCisgICAgMTM3LCAyMjksIDQ0LCAyMjcsIDE2NCwgMjAsIDEsIDEzNywgMjEzLCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMjA0LCAyMCwgCisgICAgMSwgMTM3LCAyMzEsIDI0NCwgMjM0LCAxNTgsIDIwLCAxLCAxMzcsIDIyNywgMjU0LCAyMCwgMSwgMTM3LCAyMjksIDM5LCAKKyAgICAyMCwgMSwgMTM3LCAyMzMsIDk0LCAyMCwgMSwgMTM3LCAyMzEsIDExMywgMjAsIDEsIDEzNywgMjMxLCAxMywgMjAsIDEsIAorICAgIDEzNywgMjI3LCAyNDgsIDIwLCAxLCAxMzcsIDIxNiwgMjE2LCAyMCwgMSwgMTM3LCAyMjksIDQxLCAyMCwgMSwgMTM3LCAKKyAgICAyNDMsIDI0MCwgMjAsIDEsIDEzNywgMjI5LCAxNDEsIDIwLCAxLCAxMzcsIDIyOCwgMTcsIDIwLCAxLCAxMzcsIDIyOCwgMTMsIAorICAgIDIwLCAxLCAxMzcsIDI1MSwgMTE1LCAyMCwgMSwgMTM3LCAyMTMsIDE4MywgMjAsIDEsIDEzNywgMjMxLCAxMTgsIDIwLCAxLCAKKyAgICAxMzcsIDIyMiwgMTQyLCAyMCwgMSwgMTM3LCAyMjgsIDE4OCwgMjAsIDEsIDEzNywgMjMzLCAxMDgsIDIwLCAxLCAxMzcsIAorICAgIDIxNiwgNjUsIDIwLCAxLCAxMzcsIDIyNywgMjU1LCAyMjksIDYsIDIwLCAxLCAxMzcsIDIyOCwgMTgwLCAyMCwgMSwgMTM3LCAKKyAgICAyMzQsIDE2MiwgMjAsIDEsIDEzNywgMjI5LCA0NSwgMjAsIDEsIDEzNywgMjMxLCAyMTcsIDIwLCAxLCAxMzcsIDIzMSwgCisgICAgMTA2LCAyMCwgMSwgMTM3LCAyMzIsIDEwMywgMjAsIDEsIDEzNywgMjMzLCAxOTUsIDIwLCAxLCAxMzcsIDIyOCwgMTg2LCAKKyAgICAyMCwgMSwgMTM3LCAyMjksIDYsIDIwLCAxLCAxMzcsIDIxMSwgMTg0LCAyMCwgMSwgMTM3LCAyMjksIDQyLCAyMCwgMSwgCisgICAgMTM3LCAyMjgsIDIsIDIwLCAxLCAxMzcsIDIyNywgMjUwLCAyMCwgMSwgMTM3LCAyMzMsIDIwOSwgMjI4LCAxNDQsIDIwLCAxLCAKKyAgICAxMzcsIDIyOCwgMCwgMjAsIDEsIDEzNywgMjI5LCAxNDksIDIwLCAxLCAxMzcsIDIzMSwgMjQ0LCAyMjgsIDUsIDIwLCAxLCAKKyAgICAxMzcsIDIxMSwgMTAzLCAyMCwgMSwgMTM3LCAyMjksIDE0OCwgMjAsIDEsIDEzNywgMjE5LCAyMjIsIDIwLCAxLCAxMzcsIAorICAgIDIyMCwgMTI4LCAyMCwgMSwgMTM3LCAyMzEsIDExNCwgMjAsIDEsIDEzNywgMjMxLCAyMjQsIDIwLCAxLCAxMzcsIDIzMSwgCisgICAgMTI0LCAyMCwgMSwgMTM3LCAyMzQsIDE1MCwgMjAsIDEsIDEzNywgMjMxLCAxMTUsIDIwLCAxLCAxMzcsIDIzNCwgMTU0LCAKKyAgICAyMCwgMSwgMTM3LCAyMzEsIDEyOCwgMjI1LCAxMDYsIDIwLCAxLCAxMzcsIDIxMCwgMTc5LCAyMCwgMSwgMTM3LCAyMjgsIAorICAgIDE3NiwgMjAsIDEsIDEzNywgMjMwLCAyMjUsIDIwLCAxLCAxMzcsIDIzMCwgMTA1LCAyMCwgMSwgMTM3LCAyMjAsIDE3LCAyMCwgCisgICAgMSwgMTM3LCAyMzQsIDE3MiwgMjMzLCA3NiwgMjAsIDEsIDEzNywgMjM0LCAxNzIsIDI0NCwgMTY4LCAyMCwgMSwgMTM3LCAKKyAgICAyMjksIDc0LCAyMCwgMSwgMTM3LCAyMjksIDIwMSwgMjAsIDEsIDEzNywgMjMyLCAyMDYsIDIwLCAxLCAxMzcsIDIyNSwgNjgsIAorICAgIDIwLCAxLCAxMzcsIDIyNSwgMjAyLCAyMCwgMSwgMTM3LCAyMTYsIDIzMSwgMjAsIDEsIDEwNywgMjMxLCAxMDQsIDIwLCAxLCAKKyAgICAxMDcsIDIxMiwgNTEsIDIwLCAxLCAxMDcsIDIyOCwgMTc0LCAyMCwgMSwgMTA3LCAyMzEsIDIxLCAyMCwgMSwgMTA3LCAyMjgsIAorICAgIDE3MiwgMjAsIDEsIDEwNywgMjMyLCAyNDEsIDIwLCAxLCAxMDcsIDIyOCwgMTc3LCAyMCwgMSwgMTA3LCAyMjgsIDEyLCAyMCwgCisgICAgMSwgMTA3LCAyMjksIDU5LCAyMCwgMSwgMTA3LCAyMjcsIDE2NCwgMjAsIDEsIDEwNywgMjExLCAxOTQsIDIwLCAxLCAxMDcsIAorICAgIDIyOSwgMTQsIDIwLCAxLCAxMDcsIDIyMCwgNjMsIDIwLCAxLCAxMDcsIDIyOSwgMjUsIDIwLCAxLCAxMDcsIDIzNCwgMTU3LCAKKyAgICAyMCwgMSwgMTA3LCAyMTYsIDIxOCwgMjAsIDEsIDEwNywgMjIwLCA0MywgMjAsIDEsIDEwNywgMjI4LCAxODUsIDIwLCAxLCAKKyAgICAxMDcsIDIxOCwgNTMsIDIwLCAxLCAxMDcsIDIzNCwgMTYyLCAyMCwgMSwgMTA3LCAyMTEsIDkxLCAyMCwgMSwgMTA3LCAyMzMsIAorICAgIDIxMCwgMjAsIDEsIDEwNywgMjIxLCAyMzYsIDIwLCAxLCAxMDcsIDIzMSwgMjYsIDIwLCAxLCAxMDcsIDIyOSwgMTQwLCAyMCwgCisgICAgMSwgMTA3LCAyMzEsIDE5MywgMjAsIDEsIDEwNywgMjMxLCAzMiwgMjAsIDEsIDEwNywgMjIwLCAxMjcsIDIwLCAxLCAxMDcsIAorICAgIDIxMSwgMzksIDIwLCAxLCAxMDcsIDIyOCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE1MywgMjMxLCAxMDcsIDIwLCAxLCAKKyAgICAxMDcsIDIyOSwgMjEsIDIwLCAxLCAxMDcsIDIxNSwgMTE5LCAyMCwgMSwgMTA3LCAyNDIsIDI1NSwgMjAsIDEsIDEwNywgCisgICAgMjI5LCAxMSwgMjAsIDEsIDEwNywgMjQ0LCAxMzUsIDIwLCAxLCAxMDcsIDIyOSwgMTQ0LCAyMCwgMSwgMTA3LCAyMzEsIDUsIAorICAgIDIwLCAxLCAxMDcsIDIzMywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgMTI2LCAyMCwgMSwgMTA3LCAyMzAsIDE1MiwgMjAsIDEsIAorICAgIDEwNywgMjMxLCA5LCAyMCwgMSwgMTA3LCAyMjQsIDEyMSwgMjAsIDEsIDEwNywgMjMxLCA3LCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDIzLCAyMCwgMSwgMTA3LCAyMzIsIDg5LCAyMCwgMSwgMTA3LCAyMjgsIDQsIDIwLCAxLCAxMDcsIDIzMSwgMTI3LCAyMCwgMSwgCisgICAgMTA3LCAyMzMsIDE4NiwgMjAsIDEsIDEwNywgMjI3LCAxNTUsIDIwLCAxLCAxMDcsIDIxNiwgMjIxLCAyMCwgMSwgMTA3LCAKKyAgICAyMTksIDM2LCAyMCwgMSwgMTA3LCAyMTAsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNTQsIDIwLCAxLCAxMDcsIDIyMywgCisgICAgMTczLCAyMCwgMSwgMTA3LCAyMTcsIDExLCAyMCwgMSwgMTA3LCAyMjksIDIyLCAyMCwgMSwgMTA3LCAyMzEsIDI4LCAyMCwgCisgICAgMSwgMTA3LCAyMjgsIDMsIDIwLCAxLCAxMDcsIDIzNCwgMTUyLCAyMCwgMSwgMTA3LCAyMjUsIDYyLCAyMCwgMSwgMTA3LCAKKyAgICAyMjUsIDE1NSwgMjAsIDEsIDEwNywgMjI3LCAxMzEsIDIwLCAxLCAxMDcsIDIzMywgMTcsIDIwLCAxLCAxMDcsIDIyOSwgNjAsIAorICAgIDIwLCAxLCAxMDcsIDIzMSwgMjUsIDIwLCAxLCAxMDcsIDIyOSwgMzQsIDIwLCAxLCAxMDcsIDIxMCwgMTkzLCAyMCwgMSwgCisgICAgMTA3LCAyMjYsIDI1LCAyMCwgMSwgMTA3LCAyMTAsIDE5MiwgMjAsIDEsIDEwNywgMjI5LCAxNDksIDIwLCAxLCAxMDcsIAorICAgIDIyNywgMjQ5LCAyMCwgMSwgMTA3LCAyMTgsIDgyLCAyMCwgMSwgMTA3LCAyMzMsIDIxNCwgMjAsIDEsIDEwNywgMjI5LCA0OSwgCisgICAgMjAsIDEsIDEwNywgMjI5LCAxOSwgMjAsIDEsIDEwNywgMjE1LCAxMDMsIDIwLCAxLCAxMDcsIDIzMSwgMzYsIDIwLCAxLCAKKyAgICAxMDcsIDIzMywgMjA0LCAyMCwgMSwgMTA3LCAyMjgsIDEsIDIwLCAxLCAxMDcsIDIxNiwgMjE5LCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDIxOSwgMjAsIDEsIDEwNywgMjI5LCA1OCwgMjAsIDEsIDEwNywgMjMzLCAxMCwgMjAsIDEsIDEwNywgMjI5LCA0MCwgMjAsIAorICAgIDEsIDEwNywgMjI4LCA2LCAyMCwgMSwgMTA3LCAyMjgsIDE1OCwgMjAsIDEsIDEwNywgMjQyLCAyNDAsIDIwLCAxLCAxMDcsIAorICAgIDIzMywgMjIzLCAyMCwgMSwgMTA3LCAyMjMsIDg3LCAyMjYsIDIxMywgMjAsIDEsIDEwNywgMjE3LCA4NywgMjAsIDEsIDEwNywgCisgICAgMjE2LCAxMSwgMjAsIDEsIDEwNywgMjI3LCAxNTIsIDIwLCAxLCAxMDcsIDIyMiwgMjQyLCAyMCwgMSwgMTA3LCAyMzMsIDU1LCAKKyAgICAyMCwgMSwgMTA3LCAyMzEsIDg0LCAyMCwgMSwgMTA3LCAxOTQsIDIwLCAxLCAxMDcsIDIxOCwgNSwgMjAsIDEsIDEwNywgCisgICAgMjMwLCAxMDcsIDIwLCAxLCAxMDcsIDIyMCwgMjksIDIwLCAxLCAxMDcsIDIyMCwgMzksIDIwLCAxLCAxMDcsIDIzMywgMTYxLCAKKyAgICAyMCwgMSwgMTA3LCAyMjcsIDI0MiwgMjAsIDEsIDEwNywgMjE5LCAyMjcsIDIwLCAxLCAxMDcsIDIyNywgMjUxLCAyMCwgMSwgCisgICAgMTA3LCAyMjUsIDIxNCwgMjAsIDEsIDEwNywgMjI4LCAyMzgsIDIwLCAxLCAxMDcsIDIxOSwgMjU0LCAyMCwgMSwgMTA3LCAKKyAgICAyMjQsIDEzNiwgMjAsIDEsIDEwNywgMjMwLCA1MSwgMjAsIDEsIDEwNywgMjMyLCAxMjUsIDIwLCAxLCAxMDcsIDIyMywgODcsIAorICAgIDIzMCwgMTAxLCAyMCwgMSwgMTA3LCAyMTYsIDExOCwgMjAsIDEsIDEwNywgMjI3LCAyNDMsIDIwLCAxLCAxMDcsIDIzMSwgCisgICAgMTI4LCAxOTksIDIwLCAxLCAxMDcsIDIyMSwgMjM0LCAyMCwgMSwgMTA3LCAyNDQsIDIwMywgMjAsIDEsIDgyLCAyMjksIAorICAgIDE0OCwgMjAsIDEsIDgyLCAyMTYsIDE3LCAyMCwgMSwgODIsIDIzMSwgMTE3LCAyMCwgMSwgODIsIDIzMywgOTQsIDIwLCAxLCAKKyAgICA4MiwgMjEzLCAxMjgsIDIwLCAxLCA4MiwgMjMyLCAxMzEsIDIwLCAxLCA4MiwgMjI2LCA5MywgMjAsIDEsIDgyLCAyMTksIAorICAgIDQ3LCAyMCwgMSwgODIsIDIyMywgMTQ4LCAyMCwgMSwgODIsIDIyOCwgOCwgMjAsIDEsIDgyLCAyMjksIDExOSwgMjAsIDEsIAorICAgIDgyLCAyMjQsIDE1MCwgMjAsIDEsIDgyLCAyMTcsIDYzLCAyMCwgMSwgODIsIDIyOSwgMjcsIDIwLCAxLCA4MiwgMjMzLCAKKyAgICAyNTEsIDIwLCAxLCA4MiwgMjExLCAxODcsIDIwLCAxLCA4MiwgMjIxLCAxNzIsIDIwLCAxLCA4MiwgMjI5LCA1MCwgMjAsIDEsIAorICAgIDgyLCAyMjYsIDkwLCAyMCwgMSwgODIsIDIxNiwgMTgsIDIwLCAxLCA4MiwgMjMzLCAyMDgsIDIwLCAxLCA4MiwgMjMyLCAKKyAgICAxNDUsIDIwLCAxLCA4MiwgMjI4LCAxMSwgMjAsIDEsIDgyLCAyMjksIDMsIDIwLCAxLCA4MiwgMjMxLCAyMjUsIDIwLCAxLCAKKyAgICA4MiwgMjI5LCAyMCwgMjAsIDEsIDgyLCAyMjksIDIsIDIwLCAxLCA4MiwgMjI4LCAxMCwgMjAsIDEsIDgyLCAyMjIsIDI0MCwgCisgICAgMjAsIDEsIDgyLCAyMjgsIDE3NiwgMjAsIDEsIDgyLCAyMjUsIDIxMywgMjAsIDEsIDgyLCAyMjIsIDMzLCAyMCwgMSwgODIsIAorICAgIDIyOSwgMzUsIDIwLCAxLCA4MiwgMjMxLCAxNSwgMjAsIDEsIDgyLCAyNDIsIDIzNCwgMjAsIDEsIDgyLCAyMjksIDIzLCAyMCwgCisgICAgMSwgODIsIDIyOCwgMTg3LCAyMCwgMSwgODIsIDIzMSwgMTc3LCAyMCwgMSwgODIsIDIzMiwgMTI3LCAyMCwgMSwgODIsIAorICAgIDIyOSwgNTUsIDIwLCAxLCA4MiwgMjI5LCAxMzIsIDIwLCAxLCA4MiwgMjE3LCA4NiwgMjI3LCAyNDksIDIwLCAxLCA4MiwgCisgICAgMjIwLCAxMjksIDIwLCAxLCA4MiwgMjI0LCAxNDYsIDIwLCAxLCA4MiwgMjI5LCAxNTIsIDIxOSwgNTMsIDIwLCAxLCA4MiwgCisgICAgMjI5LCA0MywgMjI3LCAxNjQsIDIwLCAxLCA4MiwgMjExLCA0LCAyMCwgMSwgODIsIDI0MiwgMjM1LCAyMCwgMSwgODIsIAorICAgIDIxNSwgMTE4LCAyMCwgMSwgODIsIDIxMSwgMTksIDIwLCAxLCA4MiwgMjI1LCAxOSwgMjAsIDEsIDgyLCAyMTUsIDEwOCwgCisgICAgMjAsIDEsIDgyLCAyMzQsIDE2MCwgMjAsIDEsIDgyLCAyMTgsIDgxLCAyMCwgMSwgODIsIDIxNiwgMjIwLCAyMCwgMSwgODIsIAorICAgIDIxMywgMTg0LCAyMCwgMSwgODIsIDIxMiwgNiwgMjAsIDEsIDgyLCAyMzMsIDEzOCwgMjAsIDEsIDgyLCAyMjQsIDE1MywgCisgICAgMjAsIDEsIDgyLCAyMTcsIDk3LCAyMCwgMSwgODIsIDI0MiwgMjU0LCAyMCwgMSwgODIsIDIyOSwgNjQsIDIwLCAxLCA4MiwgCisgICAgMjIwLCA0MiwgMjAsIDEsIDgyLCAyMzEsIDEwLCAyMCwgMSwgODIsIDIzMSwgMTIxLCAyMCwgMSwgODIsIDIyNywgMTE5LCAKKyAgICAyMCwgMSwgODIsIDIyOCwgMTQxLCAyMCwgMSwgODIsIDI0MywgODAsIDIwLCAxLCA4MiwgMjE1LCAxMDksIDIwLCAxLCA4MiwgCisgICAgMjMzLCAyMTcsIDIwLCAxLCA4MiwgMjExLCA2NywgMjAsIDEsIDgyLCAyMjcsIDE1MywgMjUwLCAyNCwgMjAsIDEsIDgyLCAKKyAgICAyMTAsIDI1MCwgMjAsIDEsIDgyLCAyMzEsIDI3LCAyMCwgMSwgODIsIDIyOSwgMTM3LCAyMCwgMSwgODIsIDIyNSwgMTAzLCAKKyAgICAyMCwgMSwgODIsIDIxMCwgMTk3LCAyMCwgMSwgODIsIDIzMywgMTIsIDIwLCAxLCA4MiwgMjQzLCAyNDAsIDIwLCAxLCA4MiwgCisgICAgMjQzLCA3OSwgMjAsIDEsIDgyLCAyMjksIDEzLCAyMCwgMSwgODIsIDIzNCwgMTYyLCAyMCwgMSwgODIsIDIzMSwgMjI4LCAKKyAgICAyMCwgMSwgODIsIDIyOSwgMjYsIDIwLCAxLCA4MiwgMjQyLCAyNDEsIDIwLCAxLCA4MiwgMjQ0LCAyMDQsIDIwLCAxLCA4MiwgCisgICAgMjI3LCAyNDQsIDIwLCAxLCA4MiwgMjI1LCAxNTYsIDIwLCAxLCA4MiwgMjExLCAxNywgMjAsIDEsIDgyLCAyMjksIDUxLCAKKyAgICAyMCwgMSwgODIsIDIyNywgMTUzLCAyNTIsIDMxLCAyMCwgMSwgODIsIDIyNywgOTksIDIwLCAxLCA4MiwgMjI0LCAyNTAsIAorICAgIDIwLCAxLCA4MiwgMjMwLCAyMjUsIDIwLCAxLCA4MiwgMjQzLCAyMzgsIDIwLCAxLCA4MiwgMjI5LCAyMjUsIDIwLCAxLCA4MiwgCisgICAgMjMwLCAxMDUsIDIwLCAxLCA4MiwgMjQyLCAyNDAsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDc0LCAyMCwgMSwgODIsIDIzMCwgCisgICAgNTIsIDIwLCAxLCA4MiwgMjI0LCAxNDksIDIwLCAxLCA4MiwgMjI5LCAxNSwgMjAsIDEsIDgyLCAyMzMsIDE5NSwgMjAsIDEsIAorICAgIDgyLCAyMjUsIDEwMCwgMjAsIDEsIDgyLCAyMjcsIDI1MiwgMjAsIDEsIDgyLCAyMTEsIDE4LCAyMCwgMSwgODIsIDIyOSwgCisgICAgMzYsIDIwLCAxLCA4MiwgMjI2LCA5NCwgMjI1LCAxOTAsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDI1MSwgMjMsIDIwLCAxLCAKKyAgICA4MiwgMjQ0LCA0NSwgMjAsIDEsIDgyLCAyMjgsIDE4MSwgMjAsIDEsIDgyLCA2MSwgMjAsIDEsIDgyLCAyMTYsIDExLCAyMCwgCisgICAgMSwgODIsIDc4LCAyMCwgMSwgODIsIDc0LCAyMCwgMSwgODIsIDIzMywgOTIsIDIwLCAxLCA4MiwgMjI2LCA5NCwgMjI1LCAKKyAgICAyNiwgMjAsIDEsIDgyLCAyMTcsIDEwMiwgMjAsIDEsIDgyLCAyMTcsIDUyLCAyMCwgMSwgODIsIDIyOSwgMTUyLCAyMzAsIAorICAgIDM5LCAyNDAsIDI0MSwgMjAsIDEsIDgyLCAyMjAsIDE3LCAyMCwgMSwgODIsIDIxMSwgMTQsIDIwLCAxLCA4MiwgMjI4LCAKKyAgICAyNTIsIDIwLCAxLCA4MiwgMjEwLCAyMDIsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDIxNywgMjQxLCAyMCwgMSwgODIsIDIxMCwgCisgICAgMjI3LCAyNDksIDE1NSwgMjAsIDEsIDgyLCAyMTAsIDE4NywgMjAsIDEsIDgyLCAyMTAsIDE5NSwgMjAsIDEsIDgyLCAyMzQsIAorICAgIDE0OCwgMjAsIDEsIDgyLCAyMjUsIDE1NCwgMjAsIDEsIDgyLCAyMjgsIDE4MiwgMjQ1LCAxMTAsIDIwLCAxLCA4MiwgMjI0LCAKKyAgICAxNDcsIDIwLCAxLCA4MiwgMjExLCAxOTIsIDIwLCAxLCA4MiwgMjQ0LCAxNTUsIDIwLCAxLCA4MiwgMjEzLCAyNTAsIDIwLCAKKyAgICAxLCA4MiwgMjMyLCAxMDMsIDIwLCAxLCA4MiwgMjMwLCAyMzUsIDIwLCAxLCA4MiwgMjIzLCA1NCwgMjAsIDEsIDgyLCAyMjMsIAorICAgIDE3NCwgMjAsIDEsIDgyLCAyMjgsIDI1MSwgMjAsIDEsIDgyLCAyMjksIDgyLCAyMCwgMSwgODIsIDIyMCwgOSwgMjAsIDEsIAorICAgIDgyLCAyMTksIDI1NCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgMjIzLCA4OSwgMjAsIDEsIDgyLCAxOTgsIDIwLCAxLCA4MiwgCisgICAgMjI1LCAxMTEsIDIwLCAxLCA4MiwgMjMyLCAxMjUsIDIwLCAxLCA4MiwgMjM0LCAzNCwgMjAsIDEsIDgyLCAyMzEsIDYzLCAKKyAgICAyMCwgMSwgODIsIDE4NiwgMjAsIDEsIDgyLCAyMzEsIDE3NCwgMjAsIDEsIDgyLCAyMTYsIDIyMiwgMjAsIDEsIDgyLCAyMzQsIAorICAgIDk4LCAyMCwgMSwgODIsIDIzMCwgMTU1LCAyMCwgMSwgODIsIDIxNiwgMjQ4LCAyMCwgMSwgODIsIDI0NCwgMTc3LCAyMCwgMSwgCisgICAgODIsIDI0MiwgMjMwLCAyMCwgMSwgMjI1LCAxNDAsIDE3NiwgMjAsIDEsIDIyNSwgMTQwLCA2OSwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMzMsIDIyMywgMjAsIDEsIDIyNSwgMTQwLCAyNDUsIDIxNywgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDExMSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMTcsIDg3LCAyMCwgMSwgMjI1LCAxNDAsIDIyNywgMTUyLCAyMCwgMSwgMjI1LCAxNDAsIDIzMywgMTQxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIyMiwgMjQyLCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgMzIsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjMxLCA4NCwgMjAsIDEsIDIyNSwgMTQwLCAyMTcsIDEwMiwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIDE1MSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMjgsIDE4OCwgMjAsIDEsIDIyNSwgMTQwLCAxOTQsIDIwLCAxLCAyMjUsIDE0MCwgMjE4LCA1LCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIyMCwgMjksIDIwLCAxLCAyMjUsIDE0MCwgMjE5LCAxOTMsIDIwLCAxLCAyMjUsIDE0MCwgMjIwLCAxMjUsIAorICAgIDIwLCAxLCAyMjUsIDE0MCwgMjMzLCAxNjEsIDIwLCAxLCAyMjUsIDE0MCwgMjM0LCAxNjIsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjI3LCAyMTMsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAyNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI4LCAxNTksIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjEwLCAyMjYsIDIwLCAxLCAyMjUsIDE0MCwgMjE5LCAyMjcsIDIwLCAxLCAyMjUsIDE0MCwgMTkyLCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIyOCwgMTQsIDIwLCAxLCAyMjUsIDE0MCwgMjI1LCAxNTQsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAKKyAgICAyNTEsIDIwLCAxLCAyMjUsIDE0MCwgMjExLCAxOTIsIDIwLCAxLCAyMjUsIDE0MCwgMjI1LCAyMTQsIDIwLCAxLCAyMjUsIAorICAgIDE0MCwgMjIyLCAxNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI4LCAyMzgsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCA1NCwgMjAsIAorICAgIDEsIDIyNSwgMTQwLCAyMzQsIDE3MSwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIDEyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgCisgICAgNjEsIDIwLCAxLCAyMjUsIDE0MCwgMjIwLCA5LCAyMCwgMSwgMjI1LCAxNDAsIDIyNCwgMTUwLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDI0NCwgNDUsIDIwLCAxLCAyMjUsIDE0MCwgMjEyLCA2NSwgMjAsIDEsIDIyNSwgMTQwLCAyMzIsIDI0NywgMjAsIDEsIDIyNSwgCisgICAgMTQwLCAyMzIsIDEyNSwgMjAsIDEsIDIyNSwgMTQwLCAyMzQsIDM0LCAyMCwgMSwgMjI1LCAxNDAsIDIzMSwgMTE5LCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIyMywgODYsIDIwLCAxLCAyMjUsIDE0MCwgMTg2LCAyMCwgMSwgMjI1LCAxNDAsIDIzMCwgMTY2LCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIzMSwgMTI3LCAyMCwgMSwgMjI1LCAxNDAsIDIxNiwgMjMxLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIzNCwgMSwgMjAsIDEsIDIyNSwgMTQwLCAyMjEsIDI1MywgMjAsIDEsIDIyNSwgMTQwLCAyMTIsIDExNSwgOTUsIDEsIDE5MSwgCisgICAgOTUsIDEsIDI1MiwgMTk5LCA5NSwgMSwgOCwgMTkxLCA5NSwgMSwgMjI1LCA0NSwgOTUsIDEsIDE4NiwgOTUsIDEsIDIzMCwgCisgICAgMjM4LCA5NSwgMSwgMjU0LCAzMSwgMTg2LCA5NSwgMSwgMjQ0LCAyMDQsIDk1LCAxLCAyMTQsIDI3LCA5NSwgMSwgMjEzLCAKKyAgICAxNzcsIDk1LCAxLCAyMTcsIDEwNiwgOTUsIDEsIDI0OCwgMjI5LCA5NSwgMSwgOCwgMjE1LCAxNTcsIDk1LCAxLCA4LCAyMTcsIAorICAgIDEwNiwgOTUsIDEsIDIxNSwgMTU3LCA5NSwgMSwgMjQ4LCAxNDMsIDk1LCAxLCAxOTgsIDk1LCAxLCAyMjgsIDI0MiwgOTUsIAorICAgIDEsIDgsIDIyOCwgMTE1LCA5NSwgMSwgMjU0LCAzMSwgMTk4LCA5NSwgMSwgMjI4LCAxMTUsIDk1LCAxLCAyMjgsIDEwMSwgCisgICAgOTUsIDEsIDIzMywgMTQxLCA5NSwgMSwgMjMyLCA2NiwgOTUsIDEsIDIzMywgNCwgOTUsIDEsIDIzMiwgMjQ5LCA5NSwgMSwgCisgICAgMjE2LCA1NywgOTUsIDEsIDI0NywgMTYxLCA5NSwgMSwgMjE2LCA0OSwgOTUsIDEsIDI0NywgMTYwLCA5NSwgMSwgMTc2LCAKKyAgICA5NSwgMSwgMjQzLCAxNDIsIDk1LCAxLCA4LCAxNzYsIDk1LCAxLCAyMjQsIDkxLCA5NSwgMSwgMjI0LCA2OSwgOTUsIDEsIAorICAgIDIyOSwgODIsIDk1LCAxLCAyMjksIDMzLCA5NSwgMSwgMjU0LCAzMSwgMjI5LCA4MiwgOTUsIDEsIDE2MiwgOTUsIDEsIDIxMSwgCisgICAgMTY1LCA5NSwgMSwgMjQzLCAwLCA5NSwgMSwgMjQyLCAyMzMsIDk1LCAxLCAyMTUsIDE2NiwgOTUsIDEsIDI0NiwgMzQsIDk1LCAKKyAgICAxLCAyMjcsIDE2OSwgOTUsIDEsIDIyNywgMTU0LCA5NSwgMSwgMjE1LCAxNzYsIDk1LCAxLCAyNDYsIDQxLCA5NSwgMSwgOCwgCisgICAgMjE1LCAxNzYsIDk1LCAxLCA4LCAyNDYsIDQxLCA5NSwgMSwgMjIzLCAxMDksIDIxNSwgMTc2LCA5NSwgMSwgMjIwLCAxMDQsIAorICAgIDk1LCAxLCAyMTgsIDIyNSwgOTUsIDEsIDIxMCwgODIsIDk1LCAxLCAyMTAsIDE0LCA5NSwgMSwgMjE1LCAxODQsIDk1LCAxLCAKKyAgICAyNDYsIDQ2LCA5NSwgMSwgOCwgMjE1LCAxODQsIDk1LCAxLCAyMDYsIDk1LCAxLCAyMTAsIDExNiwgOTUsIDEsIDIxMCwgMTUsIAorICAgIDk1LCAxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjIzLCA5NSwgMSwgMjU0LCAzMSwgMjA5LCAyNDMsIDk1LCAxLCAyMDksIAorICAgIDIxNSwgOTUsIDEsIDIwOSwgMjIyLCA5NSwgMSwgMjEyLCA2NSwgOTUsIDEsIDI1NCwgMjE4LCA5NSwgMSwgMjQxLCAxOTYsIAorICAgIDk1LCAxLCAyMjksIDE5NywgOTUsIDUsIDI1MywgMjMwLCA5NSwgNSwgMjIzLCAxMDksIDIxMywgMTMzLCA5NSwgNSwgMjIzLCAKKyAgICAxMDksIDI1MywgMjMwLCA5NSwgMjUsIDUsIDYxLCA5NSwgMjUsIDUsIDI1NSwgODIsIDk1LCAyNSwgNSwgMjU0LCAyMTQsIAorICAgIDk1LCAyNSwgNSwgMjU0LCAxMzEsIDk1LCAyNSwgNSwgMjU0LCAxMjMsIDk1LCAyNSwgNSwgNzgsIDk1LCAyNSwgNSwgMjI2LCAKKyAgICAxODcsIDk1LCAyNSwgNSwgMjExLCAyMjcsIDk1LCAyNSwgNSwgMjEyLCA5OCwgOTUsIDI1LCA1LCA3NiwgOTUsIDI1LCA1LCAKKyAgICAyNDUsIDE1OCwgOTUsIDI1LCA1LCAyNDUsIDE0NiwgOTUsIDI1LCA1LCAyMjYsIDIzNiwgOTUsIDI1LCA1LCA3NCwgOTUsIAorICAgIDI1LCA1LCAyNDAsIDEyNiwgOTUsIDI1LCA1LCAyNDAsIDEyNSwgOTUsIDI1LCA1LCAyNDAsIDEyNCwgOTUsIDI1LCA1LCAKKyAgICAyMzUsIDE5NiwgOTUsIDI1LCA1LCAyMzYsIDY3LCA5NSwgMjUsIDUsIDIzNiwgNDAsIDk1LCAyNSwgNSwgMjM1LCAxNjIsIAorICAgIDk1LCAyNSwgNSwgMjM1LCAyMzgsIDk1LCAyNSwgNSwgNjksIDk1LCAyNSwgNSwgMjE0LCAyMjksIDk1LCAyNSwgNSwgMjE0LCAKKyAgICAyMjgsIDk1LCAyNSwgNSwgMjE0LCAyMjcsIDk1LCAyNSwgNSwgMjE0LCAxMTgsIDk1LCAyNSwgNSwgMjE0LCAyMTEsIDk1LCAKKyAgICAyNSwgNSwgMjE0LCAxNzgsIDk1LCAyNSwgNSwgMjExLCAxMTcsIDk1LCAyNSwgNSwgMjExLCA4LCA5NSwgMjUsIDUsIDI1NCwgCisgICAgMjUyLCA5NSwgMjUsIDUsIDI1NCwgMjQ4LCA5NSwgMjUsIDUsIDI0NSwgOTQsIDk1LCAyNSwgNSwgMjIyLCAxODUsIDI0NSwgCisgICAgOTQsIDk1LCAyNSwgNSwgMjQ1LCAxMDAsIDk1LCAyNSwgNSwgMjIyLCAxODUsIDI0NSwgMTAwLCA5NSwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCA5NSwgMjUsIDUsIDI0NSwgMjAzLCA5NSwgMjUsIDUsIDI1MywgMjAwLCA5NSwgMjUsIDUsIDIyNiwgMTM4LCA5NSwgCisgICAgMjUsIDUsIDIzMCwgMzAsIDk1LCAyNSwgNSwgMjI5LCA4NCwgOTUsIDEzOCwgMjIyLCAyNTQsIDk1LCAxMzgsIDIxNiwgMTUsIAorICAgIDIyMiwgMjU0LCA5NSwgMTM4LCA0OCwgOTUsIDEzOCwgNTEsIDk1LCAxLCAyMTYsIDI5LCA5NSwgMSwgMjE2LCAyOCwgOTUsIAorICAgIDEsIDIxNiwgMjcsIDk1LCAxLCAyMTYsIDI2LCA5NSwgMSwgMjE2LCAyNSwgOTUsIDEsIDIxNiwgMjQsIDk1LCAxLCAyMTYsIAorICAgIDIzLCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMzAsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyOSwgOTUsIDEsIDIyMywgMTA5LCAKKyAgICAyMTYsIDI3LCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMjYsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyNSwgOTUsIDEsIDIyMywgCisgICAgMTA5LCAyMTYsIDIzLCA1NiwgMSwgMjU0LCAzMSwgNzYsIDE0MSwgMSwgMjU0LCAzMSwgMjExLCA0NywgNDksIDI4LCAxNiwgCisgICAgMjI0LCAxNTcsIDQ5LCAyOCwgMTYsIDI0OCwgMTY2LCA0OSwgMjgsIDE2LCAyMjUsIDE3OCwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxMTcsIDI0NSwgMTg2LCA0OSwgMjgsIDE2LCAyMjYsIDExNywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NSwgCisgICAgMTg2LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjM0LCAyMDMsIDQ5LCAyOCwgMTYsIAorICAgIDIxNywgMTcwLCA0OSwgMjgsIDE2LCAyMjYsIDEzLCA0OSwgMjgsIDE2LCAyMTAsIDIxNywgNDksIDI4LCAxNiwgMjEwLCAKKyAgICAyMTgsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMzMsIDI0MCwgNDksIDI4LCAxNiwgMjU0LCA3NiwgMjQ1LCAxODYsIDQ5LCAKKyAgICAyOCwgMTYsIDI0NSwgMzQsIDI0NSwgMTg2LCA0OSwgMjgsIDE2LCAyMTcsIDMsIDQ5LCAyOCwgMTYsIDIzNCwgMTY3LCA0OSwgCisgICAgMjgsIDE2LCAyNTQsIDY2LCA0OSwgMjgsIDE2LCAyNTQsIDY3LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE3LCAxNzYsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNiwgMTYwLCA0OSwgMjgsIDE2LCAyMjYsIDIxMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjQyLCAxNjYsIAorICAgIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyNCwgMTU2LCA0OSwgMjgsIDE2LCAyNTAsIDE1NywgNDksIDI4LCAxNiwgMjE0LCA2LCAKKyAgICA0OSwgMjgsIDE2LCAyMzUsIDE3MCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjM0LCAxNjksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgMTY4LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjEsIDIxNSwgNDksIDI4LCAxNiwgMjI2LCA0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTgsIDE0OCwgMjU0LCA2OSwgNDksIDI4LCAxNiwgMjI2LCAxMTYsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNCwgMTUsIAorICAgIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI1NCwgNzAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI1NCwgNjQsIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgNDMsIDQ5LCAyOCwgMTYsIDIyMywgNDksIDQ5LCAyOCwgMTYsIDIyNSwgMTA5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAKKyAgICAyMTYsIDg0LCA0OSwgMjgsIDE2LCAyNTQsIDEyOSwgNDksIDI4LCAxNiwgMjIxLCAxNjEsIDQ5LCAyOCwgMTYsIDIxNywgCisgICAgMTc5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTcsIDE3OSwgMjMxLCA0NSwgMjE4LCAxNDYsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTExLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTYsIDE5MSwgNDksIDI4LCAxNiwgMjMzLCAzMywgNDksIDI4LCAxNiwgMjQ2LCAKKyAgICA0OSwgNDksIDI4LCAxNiwgMjE1LCAyMjgsIDQ5LCAyOCwgMTYsIDIxNiwgMjMzLCA0OSwgMjgsIDE2LCAyMzMsIDI0MywgNDksIAorICAgIDI4LCAxNiwgMjU0LCA3NiwgMjQ1LCAzNCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNTQsIDI5LCA0OSwgCisgICAgMjgsIDE2LCAyMzYsIDE5LCA0OSwgMjgsIDE2LCAyMTUsIDIwMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjM0LCAyMDYsIAorICAgIDIxNSwgMTk5LCA0OSwgMjgsIDE2LCAyMjUsIDIwMywgNDksIDI4LCAxNiwgMjI0LCAxNjEsIDQ5LCAyOCwgMTYsIDIzNCwgCisgICAgMTcsIDQ5LCAyOCwgMTYsIDI1MCwgODgsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyMywgMTQ5LCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDE2LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjYsIDE0LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNDAsIDExNiwgNDksIDI4LCAKKyAgICAxNiwgMjI5LCAyMDgsIDQ5LCAyOCwgMTYsIDIyNSwgMTU5LCA0OSwgMjgsIDE2LCAyMzQsIDE4LCAyNTQsIDE1OCwgNDksIAorICAgIDI4LCAxNiwgMjE1LCAyMDAsIDI1NCwgMTU4LCA0OSwgMjgsIDE2LCAyMTgsIDEyNSwgNDksIDI4LCAxNiwgMjQyLCAxMzAsIAorICAgIDQ5LCAyOCwgMTYsIDIzNSwgMTcwLCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAyMTAsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyMjYsIDExNywgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNSwgMTU4LCA0OSwgMjgsIDE2LCAyMzQsIDQsIDQ5LCAyOCwgCisgICAgMTYsIDIyNSwgMTU3LCA0OSwgMjgsIDE2LCAyMzMsIDI0MiwgNDksIDI4LCAxNiwgMjI1LCAyMDQsIDIyOSwgMTAwLCA0OSwgCisgICAgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgMjI5LCAxMDEsIAorICAgIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMTAsIDIxNSwgNDksIDI4LCAxNiwgMjU0LCA2NywgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDI1NCwgNjgsIDIxNywgMTc3LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjEwLCAyMTYsIDQ5LCAyOCwgMTYsIDIzMywgCisgICAgMjQxLCA0OSwgMjgsIDE2LCAyNDUsIDE4MSwgNDksIDI4LCAxNiwgMjUwLCAxNTgsIDQ5LCAyOCwgMTYsIDIzMCwgMjAzLCAKKyAgICAyMzUsIDE2OSwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNSwgMTA5LCAyMjksIDEwMCwgCisgICAgNDksIDI4LCAxNiwgMjI0LCAxNjIsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIDIwNywgNDksIDI4LCAxNiwgMjU0LCAKKyAgICA5MiwgNDksIDI4LCAxNiwgMjMyLCA2MywgNDksIDI4LCAxNiwgMjI2LCAxNCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTYsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDY4LCAyMjYsIDE1LCA0OSwgMjgsIDE2LCAyMzMsIDE1OSwgNDksIDI4LCAKKyAgICAxNiwgMjU0LCA5MywgNDksIDI4LCAxNiwgMjE1LCAyMDAsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDE4NCwgNDksIAorICAgIDI4LCAxNiwgMjE3LCAxNzksIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMTcsIDE3MSwgNDksIDI4LCAxNiwgMjUwLCA4OCwgCisgICAgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTE0LCA0OSwgMjgsIDE2LCAyMjEsIDE2MiwgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDIxMSwgMTUxLCAyMzQsIDQzLCA0OSwgMjgsIDE2LCAyMTUsIDE5NywgNDksIDI4LCAxNiwgMjI0LCAxNjMsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNSwgMjAxLCA0OSwgMjgsIDE2LCAyMTUsIDE5OCwgNDksIDI4LCAxNiwgMjI0LCAxNjAsIDQ5LCAyOCwgMTYsIAorICAgIDIxNSwgMTk2LCA0OSwgMjgsIDE2LCAyMjQsIDE1OSwgNDksIDI4LCAxNiwgMjQyLCAxNjUsIDQ5LCAyOCwgMTYsIDI1NCwgCisgICAgMjIsIDQ5LCAyOCwgMTYsIDI0NSwgNjgsIDI1NCwgMjIsIDQ5LCAyOCwgMTYsIDIyNiwgMTExLCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjE2LCAxOTAsIDI0NSwgNzcsIDQ5LCAyOCwgMTYsIDIxNiwgMTkwLCAyNDUsIDMzLCA0OSwgMjgsIDE2LCAyMTYsIAorICAgIDE5MiwgMjU0LCA3MSwgNDksIDI4LCAxNiwgMjE2LCAxODUsIDIzNCwgMjUzLCAyNTQsIDYzLCA0OSwgMjgsIDE2LCAyMzQsIAorICAgIDIwNSwgNDksIDI4LCAxNiwgMjQ1LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTEsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyMTEsIDExLCAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjE4LCAxNDcsIDQ5LCAyOCwgMTYsIDIzNCwgNDQsIDI1NCwgMTA0LCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIxMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjMzLCAyNDQsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIzMywgMjQ0LCAyNTQsIDE1OCwgNDksIDI4LCAxNiwgMjMzLCAyNDQsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNTQsIDcwLCAKKyAgICAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjU0LCA3MiwgNDksIDI4LCAxNiwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNSwgCisgICAgMjExLCA0OSwgMjgsIDE2LCAyMTYsIDIyNSwgNDksIDI4LCAxNiwgMjM0LCA4LCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyNDUsIAorICAgIDE0MiwgMjUwLCA3OSwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjQ2LCA1MCwgMjUwLCA4MCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgCisgICAgMjE1LCAyMTMsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDIxNiwgMjM1LCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAKKyAgICAyMzMsIDM4LCAyMzYsIDE0LCAyNTAsIDc5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgMjI5LCAxMDEsIDI1NCwgMTA0LCA0OSwgCisgICAgMjgsIDE2LCAyNDIsIDE2NiwgMjI2LCA1LCAyNTQsIDE4LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgMjI2LCA1LCAyNDgsIDM3LCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzMywgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIDIyNiwgNSwgMjU0LCAxOSwgMjM0LCAyMDIsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAyMjYsIDUsIDI1NCwgMTksIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgCisgICAgMjI2LCA1LCAyNDgsIDM3LCA0OSwgMjgsIDE2LCAyMTUsIDIxNywgNDksIDI4LCAxNiwgMjU0LCAyMywgNDksIDI4LCAxNiwgCisgICAgMjM2LCAyMSwgNDksIDI4LCAxNiwgMjQ3LCAyNTQsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMjUsIDMsIDI1NCwgMjQsIDQ5LCAKKyAgICAyOCwgMTYsIDI1NCwgMjIwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjU0LCAyNCwgNDksIDI4LCAxNiwgCisgICAgMjU0LCAyMjAsIDIzMSwgMzksIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMzEsIDUwLCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgCisgICAgMjQyLCAxNjcsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyNDIsIDE2NCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIyNSwgMywgCisgICAgMjQyLCAxNjcsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjQsIDE2OCwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyNTQsIDE2MCwgMjI0LCAxNjgsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjQ4LCAzNiwgMjQwLCAxMTQsIAorICAgIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyNTQsIDE2MCwgMjQ4LCAzNiwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyMTUsIDIwNiwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMTUsIDIxOCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDIxNiwgMjI5LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNiwgMjI5LCAyMzMsIDQxLCAyNDAsIDExNCwgCisgICAgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIzMywgNDEsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI1LCA0MiwgCisgICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzNSwgMTc2LCAyMTYsIDI1MiwgMjQwLCAxMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNjgsIAorICAgIDIxNiwgMjUyLCAyNDAsIDExNSwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIDIxNiwgMjI2LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgCisgICAgMjMwLCAxNDgsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAyNDcsIDIzOCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNCwgMTAsIAorICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI0LCAxNjcsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjI1LCA0MiwgMjE2LCAyMjksIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyNDIsIDE2MiwgMjMwLCAzMSwgMjU0LCA3MSwgNDksIAorICAgIDI4LCAxNiwgMjQyLCAxNjIsIDIzMCwgMzEsIDI0NywgMjA4LCA0OSwgMjgsIDE2LCAyNDUsIDE1NiwgMjM0LCAyNTMsIDI0MywgCisgICAgMjQzLCAyMTMsIDEyNCwgNDksIDI4LCAxNiwgMjM2LCAyMCwgNDksIDI4LCAxNiwgMjM2LCAxOCwgNDksIDI4LCAxNiwgMjQzLCAKKyAgICAyNDMsIDI1NCwgMzAsIDI0OCwgMzUsIDI0MCwgMTEzLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDE5MSwgNDksIAorICAgIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMjksIDIwOCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIyOSwgMjAzLCAKKyAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyNDgsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgCisgICAgMjE5LCAxMDQsIDI0NywgMjUxLCAyNDgsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIzNCwgMTg4LCAKKyAgICA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgCisgICAgMjI4LCAyMzksIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIyOCwgMjM5LCAyNTQsIDEwNCwgCisgICAgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIzMSwgMTk2LCAyNTAsIDgxLCAyNDcsIDIzOCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIAorICAgIDIzMSwgMTk2LCAyNTAsIDgxLCAyMzAsIDE0OCwgNDksIDI4LCAxNiwgMjQ0LCAxMzAsIDIxOSwgMTA0LCAyNTAsIDgxLCAKKyAgICAyMTQsIDksIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMTksIDEwNCwgMjUwLCA4MSwgMjE3LCAxODAsIDQ5LCAyOCwgMTYsIAorICAgIDI0MywgMjQzLCAyMjksIDEwMiwgNDksIDI4LCAxNiwgMjUwLCA4MiwgMjA5LCAyNDksIDQ5LCAyOCwgMTYsIDI1MCwgODIsIAorICAgIDIzNCwgNDIsIDQ5LCAyOCwgMTYsIDI1MCwgODIsIDIxOSwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDAsIDE2MSwgCisgICAgMjExLCAxMCwgMjE2LCAyMzAsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDUsIDE1NywgMjU0LCA5NCwgNDksIDI4LCAxNiwgCisgICAgMjExLCAxMCwgMjE1LCAyMDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyMTUsIDIwNywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIAorICAgIDIxNiwgMjMwLCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjU0LCA3MywgMjQ2LCA1MCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIAorICAgIDI0NywgMjQ2LCAyMzAsIDE0NiwgMjE2LCAyMzQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjQ3LCAyMzAsIAorICAgIDI0NSwgNDQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjE1LCAyMTUsIDIyNiwgMjE1LCAyNDcsIDE0NywgCisgICAgNDksIDI4LCAxNiwgMjExLCAxMCwgMjU0LCA3MywgMjQ2LCA1MCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIAorICAgIDIzMCwgMTQ2LCAyMTYsIDIzNCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI0NywgMjMwLCAyNDUsIDQ0LCAKKyAgICAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgMjE1LCAyMTUsIDIyNiwgMjE1LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgCisgICAgMjQzLCA1NiwgMjQ3LCAyNDUsIDQ5LCAyOCwgMTYsIDI0MywgNTYsIDIxMSwgOSwgNDksIDI4LCAxNiwgMjQ3LCAyNTMsIAorICAgIDI1NCwgNzMsIDIzMCwgMjA0LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgMjU0LCA3MywgMjMxLCA3OCwgNDksIDI4LCAxNiwgCisgICAgMjQ3LCAyNTMsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgMjE2LCAxODMsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAKKyAgICAyMTYsIDE4MywgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDIxNiwgMTg0LCAyNDcsIDE5NCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIAorICAgIDIxNiwgMTg0LCAyMTUsIDIwOCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDIxNiwgMTg0LCAyMTYsIDIyMywgNDksIDI4LCAxNiwgCisgICAgMjE5LCAxNjUsIDI1MywgMjUyLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjUzLCAyNTMsIDI0NywgMTk0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTksIDE2NSwgMjUzLCAyNTMsIDIxNSwgMjA4LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjUzLCAyNTMsIDIxNiwgMjIzLCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzMSwgMjQzLCAzNywgNDksIDI4LCAxNiwgMjQ3LCAyMzcsIDIyNiwgMTM4LCA0OSwgMjgsIAorICAgIDE2LCAyMTgsIDEzOSwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMTkxLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyMTMsIDEyNCwgCisgICAgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjQzLCAxNDIsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIAorICAgIDI1NCwgMTUsIDIzNCwgMTg4LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAKKyAgICAyMjgsIDIzOCwgNDksIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyMzEsIDQ5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgCisgICAgMjI5LCAxMDEsIDIzMSwgNDksIDQ5LCAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgMTY5LCAyMjksIDEwMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIDIzNCwgNDQsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyNDIsIDE2NiwgMjI5LCAxMDEsIDIzNCwgMjAyLCAyOCwgMTYsIDIxOSwgMTU3LCAyNTIsIDE0MywgMjgsIDE2LCA1MiwgCisgICAgMjUyLCAxNDMsIDI4LCAxNiwgNDAsIDI1MiwgMTQzLCAyOCwgMTYsIDIyMywgNTMsIDQwLCAyNTIsIDE0MywgMjgsIDE2LCAKKyAgICAyNDgsIDE2MywgMjUyLCAxNDMsIDI4LCAxNiwgMjE5LCAyNTMsIDI1MiwgMTQzLCAyOCwgMTYsIDQzLCAyMjMsIDgwLCA1MCwgCisgICAgMjgsIDE2LCA0NCwgMjIzLCA4MCwgNTAsIDI4LCAxNiwgMjIzLCA4MCwgMjQ3LCAxMjYsIDI4LCAxNiwgMjQ4LCAyMDQsIAorICAgIDIyMSwgMTY1LCAyOCwgMTYsIDI0OCwgMjMwLCAyNTEsIDEsIDI4LCAxNiwgMjIxLCAxNjUsIDI4LCAxNiwgMjQ5LCAyNDIsIAorICAgIDI4LCAxNiwgMjIzLCA3OCwgMjQ0LCAxMTksIDI4LCAxNiwgMjIzLCA3OCwgMjQ0LCAxMTgsIDI4LCAxNiwgMjIzLCA3OCwgCisgICAgMjQ0LCAxMTcsIDI4LCAxNiwgMjQ0LCAxMzksIDI4LCAxNiwgMjQ0LCAxNDAsIDUxLCAyOCwgMTYsIDI1MSwgMTU2LCA3OSwgCisgICAgMjgsIDE2LCAyNTEsIDMyLCAyOCwgMTYsIDI1MSwgMTY3LCAyOCwgMTYsIDEyNywgMjgsIDE2LCAyMjYsIDE5NywgMjE4LCAKKyAgICAxNjUsIDI4LCAxNiwgMjE1LCA1NywgMjE4LCAxNjUsIDI4LCAxNiwgMjE2LCAxNDMsIDIxOCwgMTY1LCAyOCwgMTYsIDI0NCwgCisgICAgMTgsIDIxOCwgMTY1LCAyOCwgMTYsIDI0NCwgODgsIDIxOCwgMTY1LCAyOCwgMTYsIDIxOSwgMTI2LCAyMTgsIDE2NSwgMjgsIAorICAgIDE2LCAyMTksIDEyNCwgMjQ0LCAyLCAyOCwgMTYsIDI0NCwgMTYsIDI0NCwgMiwgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMiwgCisgICAgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMywgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIzLCAKKyAgICAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjUxLCA3NSwgMjUwLCAyMiwgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIyLCAKKyAgICAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjMsIDIyNiwgMTQwLCAyNTQsIDE1MCwgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIzLCAKKyAgICAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjQ2LCA5MSwgMjUwLCAyMSwgMjgsIDE2LCAyNDYsIDkxLCAyNTAsIDIwLCAKKyAgICAyOCwgMTYsIDIzMCwgOTAsIDIzMSwgOTUsIDIyMywgNjQsIDI4LCAxNiwgNTIsIDIyMCwgNzcsIDI4LCAxNiwgNTIsIDI0NCwgCisgICAgNzMsIDI4LCAxNiwgMjQ0LCA3NCwgMjE0LCAxNjMsIDI4LCAxNiwgMjQ0LCA3NCwgMjQ2LCAxMTQsIDI4LCAxNiwgMjI5LCAKKyAgICAxOTMsIDIxNCwgMTYzLCAyOCwgMTYsIDIyOSwgMTkzLCAyNDYsIDExNCwgMjgsIDE2LCAyMjAsIDc4LCAyMTQsIDE2MywgMjgsIAorICAgIDE2LCAyMjAsIDc4LCAyNDYsIDExNCwgMjgsIDE2LCAyMjQsIDI1LCAxMzgsIDIyMCwgNzcsIDI4LCAxNiwgMjI0LCAyNSwgCisgICAgMTM4LCAyNDQsIDczLCAyOCwgMTYsIDI0OSwgMjI0LCAyMTYsIDg4LCAyOCwgMTYsIDI0OSwgOTMsIDIxNiwgODgsIDI4LCAKKyAgICAxNiwgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyMjQsIDcsIDI1NCwgCisgICAgMTUwLCAyOCwgMTYsIDIyNCwgNywgMjUyLCAxMzAsIDI4LCAxNiwgMjMwLCA5MywgMjIzLCA2NCwgMjgsIDE2LCAyMTEsIAorICAgIDI1MSwgMjIzLCA2NCwgMjgsIDE2LCAxNjMsIDIyMywgNjQsIDI4LCAxNiwgMjI0LCAyNSwgMjIzLCA2NCwgMjgsIDE2LCAKKyAgICAyNDUsIDE5NywgMjIzLCA2NCwgMjgsIDE2LCAyMTksIDEyMCwgMjIzLCA2NCwgMjgsIDE2LCAyMTYsIDE2MSwgMjIzLCA2NCwgCisgICAgMjgsIDE2LCAyMTksIDExMiwgMjIzLCA2NCwgMjgsIDE2LCAxMjMsIDI0MCwgMjE4LCAyMTUsIDcxLCAyMjMsIDY0LCAyOCwgCisgICAgMTYsIDIxMSwgMTc5LCAyMjgsIDQ4LCAyOCwgMTYsIDk2LCAyMjgsIDQ4LCAyOCwgMTYsIDI1MCwgNDQsIDIxMSwgMTc5LCAKKyAgICAyMjgsIDQ4LCAyOCwgMTYsIDQyLCAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCA0MiwgMjI4LCA0OSwgMjUxLCAyMjksIAorICAgIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgCisgICAgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDQzLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCAKKyAgICA0OSwgNDMsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAKKyAgICAyMjcsIDIyOCwgNDksIDQ0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTI0LCAyMTEsIDI1MywgMjgsIAorICAgIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTI0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCA0NCwgCisgICAgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgNDQsIDI1MSwgMjI5LCAyOCwgMTYsIDIzMCwgMTM0LCAKKyAgICAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCAyMzAsIDEzNCwgMjI4LCA0OSwgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjQsIAorICAgIDIyOCwgNDksIDEyNCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjQsIDIyOCwgNDksIDEyNCwgMjUxLCAyMjksIDI4LCAxNiwgCisgICAgMjI2LCA4LCAyMjgsIDQ4LCAyOCwgMTYsIDIxMywgMTMyLCAyMjgsIDQ4LCAyOCwgMTYsIDIyOCwgNDksIDI1MSwgMjI5LCAKKyAgICAyOCwgMTYsIDIyNywgMjA3LCAyMjgsIDQ4LCAyOCwgMTYsIDI0OSwgMjQ5LCAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCAKKyAgICAyNDksIDI0OSwgMjI4LCA0OSwgMjUxLCAyMjksIDI4LCAxNiwgMjUxLCAxNTQsIDI4LCAxNiwgMjExLCAyNTEsIDIyOCwgNTIsIAorICAgIDI4LCAxNiwgMTYzLCAyMjgsIDUyLCAyOCwgMTYsIDIyNCwgMjUsIDIyOCwgNTIsIDI4LCAxNiwgMjQ1LCAxOTcsIDIyOCwgCisgICAgNTIsIDI4LCAxNiwgMjE5LCAxMjAsIDIyOCwgNTIsIDI4LCAxNiwgMjE2LCAxNjEsIDIyOCwgNTIsIDI4LCAxNiwgMjE5LCAKKyAgICAxMTIsIDIyOCwgNTIsIDI4LCAxNiwgMTIzLCAyNDAsIDIxOCwgMjE1LCA3MSwgMjI4LCA1MiwgMjgsIDE2LCAzOCwgMjE4LCAKKyAgICAxNDEsIDI4LCAxNiwgMzgsIDIxOCwgMjQyLCAyMTgsIDE0MSwgMjgsIDE2LCAzOCwgMjE1LCAyMzUsIDI4LCAxNiwgMzgsIAorICAgIDIxNSwgMjM0LCAyOCwgMTYsIDM4LCAyMTUsIDIzMywgMjgsIDE2LCAyNDQsIDEwOSwgMjE1LCAyMzUsIDI4LCAxNiwgMjQ0LCAKKyAgICAxMDksIDIxNSwgMjM0LCAyOCwgMTYsIDI0NCwgMTA5LCAyMTUsIDIzMywgMjgsIDE2LCAzOCwgMjUzLCAxOTcsIDI0NywgCisgICAgMTI4LCAyOCwgMTYsIDM4LCAyNDQsIDgwLCAyOCwgMTYsIDM4LCAyNDQsIDc5LCAyOCwgMTYsIDM4LCAyNDQsIDc4LCAyOCwgCisgICAgMTYsIDM4LCAyNDQsIDc3LCAyOCwgMTYsIDM4LCAyNDQsIDc2LCAyOCwgMTYsIDI1MiwgNjYsIDI1MiwgODIsIDI4LCAxNiwgCisgICAgMjQ1LCAxNTEsIDI1MiwgODIsIDI4LCAxNiwgMjUyLCA2NiwgMjE2LCAxMTIsIDI4LCAxNiwgMjQ1LCAxNTEsIDIxNiwgMTEyLCAKKyAgICAyOCwgMTYsIDI1MiwgNjYsIDIxOSwgODIsIDI4LCAxNiwgMjQ1LCAxNTEsIDIxOSwgODIsIDI4LCAxNiwgMjUyLCA2NiwgCisgICAgMjI1LCAxMTgsIDI4LCAxNiwgMjQ1LCAxNTEsIDIyNSwgMTE4LCAyOCwgMTYsIDM4LCAyNTUsIDIzLCAyOCwgMTYsIDM4LCAKKyAgICAyMTgsIDE2NywgMjgsIDE2LCAzOCwgMjE2LCAyMzksIDI4LCAxNiwgMzgsIDIxOCwgMTY4LCAyOCwgMTYsIDM4LCAyMzEsIAorICAgIDE2NywgMjgsIDE2LCAzOCwgMjMxLCAxNjYsIDI4LCAxNiwgMzgsIDI1NSwgMjIsIDI4LCAxNiwgMzgsIDIzMiwgMTE4LCAyOCwgCisgICAgMTYsIDI1NCwgNiwgMjE0LCAxNjMsIDI4LCAxNiwgMjU0LCA2LCAyNDYsIDExNCwgMjgsIDE2LCAzOCwgMjQ3LCAxNDMsIDI4LCAKKyAgICAxNiwgMzgsIDIyMiwgMjM0LCAyOCwgMTYsIDM4LCAyNDQsIDY2LCAyOCwgMTYsIDM4LCAyMTksIDc4LCAyOCwgMTYsIDM4LCAKKyAgICAyNTIsIDQ2LCAyOCwgMTYsIDM4LCA1MiwgMjE2LCAyMCwgMjgsIDE2LCAzOCwgMjE1LCAyMTIsIDIxNiwgMjAsIDI4LCAxNiwgCisgICAgMjIyLCAyMzgsIDI4LCAxNiwgMjE4LCA3NiwgMjgsIDE2LCAyMTAsIDE1OSwgMjgsIDE2LCAyMjUsIDExMCwgMjgsIDE2LCAKKyAgICAyMzEsIDMwLCAyOCwgMTYsIDI0NCwgMjUsIDI4LCAxNiwgMjQ5LCAxNDYsIDI4LCAxNiwgMjQ4LCA4NiwgMjgsIDE2LCAyNDIsIAorICAgIDE1NywgMjI4LCA1MywgMjE5LCA5NywgMjgsIDE2LCAyNDIsIDE1NywgMjI4LCA1MywgMjI4LCA4MCwgMjE5LCA5NywgMjgsIAorICAgIDE2LCAyMTYsIDEsIDI4LCAxNiwgMjE1LCA5NSwgMjgsIDE2LCAyMzUsIDIwMCwgMjE1LCA5NSwgMjgsIDE2LCAyMTUsIDk2LCAKKyAgICAyMTksIDk3LCAyOCwgMTYsIDIxNSwgOTYsIDIxNCwgMTYzLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwNCwgMjgsIDE2LCAKKyAgICAyMjYsIDE1MiwgMjE4LCAxMDEsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTAwLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIAorICAgIDk5LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk4LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk3LCAyOCwgMTYsIDIyNiwgCisgICAgMTUyLCAyMTgsIDk2LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk1LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk0LCAyOCwgCisgICAgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMywgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDIsIDI4LCAxNiwgMjQxLCAyNTIsIDI4LCAKKyAgICAxNiwgMjI5LCAxMTAsIDI4LCAxNiwgMjQ1LCAxNTEsIDY0LCAyMTgsIDEzNSwgMjgsIDE2LCAyNDgsIDc5LCAyMTksIDk3LCAKKyAgICAyOCwgMTYsIDM4LCAxMjQsIDI1MSwgMTc3LCAyOCwgMTYsIDM4LCAxMjAsIDI1MSwgMTc3LCAyOCwgMTYsIDM4LCAyNDIsIDcsIAorICAgIDI4LCAxNiwgMzgsIDIxOSwgNjksIDIyNSwgNDYsIDI4LCAxNiwgMjI1LCAyMTksIDc5LCAyOCwgMTYsIDIyNSwgMjE5LCAKKyAgICAxMjAsIDc5LCAyOCwgMTYsIDE2MywgMjI1LCAyMTksIDc5LCAyOCwgMTYsIDI0MiwgMTg5LCAyMTQsIDE2MywgMjgsIDE2LCAKKyAgICAyNDIsIDE4OSwgMjQ2LCAxMTQsIDI4LCAxNiwgMiwgMjQ0LCAxMDgsIDI4LCAxNiwgMjQ4LCAxODgsIDI4LCAxNiwgMjQ4LCAKKyAgICAxODksIDI1NCwgMTYzLCAyOCwgMTYsIDIzMSwgMTM4LCAyOCwgMTYsIDIzMiwgMTM1LCAyOCwgMTYsIDI1MSwgMTUxLCAyOCwgCisgICAgMTYsIDIyMCwgMTU2LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1NiwgMjUxLCAyMjksIDI4LCAxNiwgMjMwLCAxODksIDI4LCAKKyAgICAxNiwgMjMwLCAxOTAsIDI1MSwgMjI5LCAyOCwgMTYsIDIyMCwgMTUwLCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1MCwgCisgICAgMjUxLCAyMjksIDI4LCAxNiwgMjQzLCAyMjcsIDIxMSwgMjUzLCAyOCwgMTYsIDI0MywgMjI3LCAyNTEsIDIyOSwgMjgsIDE2LCAKKyAgICAyMzIsIDEzNiwgMjI1LCAxODMsIDIyMywgNjQsIDI4LCAxNiwgMjMyLCAxMzYsIDIzNiwgMTEsIDIyMywgNjQsIDI4LCAxNiwgCisgICAgMjUxLCAxNTIsIDIyMywgNjQsIDI4LCAxNiwgMjIwLCAxNTYsIDIyMywgNjQsIDI4LCAxNiwgMjMwLCAxOTAsIDIyMywgNjQsIAorICAgIDI4LCAxNiwgMjIwLCAxNTAsIDIyMywgNjQsIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAKKyAgICAxNzcsIDIyNSwgMTgyLCAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMzYsIDEwLCAKKyAgICAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMjUsIDE4MywgMjQ3LCAyMTksIDI4LCAKKyAgICAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMjUsIDE4MiwgMjgsIDE2LCAyMTYsIDI1MCwgCisgICAgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIDIzNiwgMTAsIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIAorICAgIDIyNCwgMTc3LCAyMzYsIDExLCAyNDcsIDIxOSwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAKKyAgICAxNzcsIDIzNiwgMTEsIDI0NywgMjE4LCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgCisgICAgMjM2LCAxMSwgMjQ3LCAyMTcsIDI4LCAxNiwgMjQ5LCAxNDEsIDI4LCAxNiwgMjQyLCAxMzMsIDI1MSwgNzUsIDI1MCwgMjIsIAorICAgIDI4LCAxNiwgMjQyLCAxMzMsIDI0NSwgMTUsIDI1MCwgMjIsIDI4LCAxNiwgNDIsIDI1MywgMTY2LCAyOCwgMTYsIDIxMywgCisgICAgMTUxLCAyOCwgMTYsIDIyNSwgMTcsIDI4LCAxNiwgMjUwLCAxMywgMjgsIDE2LCAyMjEsIDIwNSwgMjgsIDE2LCAyNTAsIDE3LCAKKyAgICAyOCwgMTYsIDIxNiwgOCwgMjgsIDE2LCAyMjQsIDI0NSwgMjgsIDE2LCAyMjQsIDI0NiwgMjQ0LCA2OCwgMjgsIDE2LCAyMjEsIAorICAgIDIwNiwgMjQ0LCA2OCwgMjgsIDE2LCAyMTYsIDksIDIyMywgNjEsIDI4LCAxNiwgMjI1LCAxNjYsIDIxOCwgNjcsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIzMCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE5LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMDksIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIwMiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTk0LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODgsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4NywgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMTg2LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyOSwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjI4LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjcsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIyNiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjQsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMywgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjIyLCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMjEsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE4LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTcsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNiwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjE1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTQsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MywgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMTkyLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTEsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDE5MCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg5LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMzAsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxOSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAyLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4NywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTg2LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjgsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyNywgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjI2LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjUsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMiwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjIxLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjAsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIxNSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjE0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTMsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjExLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMTAsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwOCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA3LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDYsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNSwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjA0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDMsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMSwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjAwLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTksIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDE5OCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTk3LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTYsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkzLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTIsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5MSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkwLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODksIDM4LCAyNiwgMjgsIDIxNSwgMjA5LCAzOCwgMjYsIDI4LCAyMTYsIDIyNCwgMzgsIAorICAgIDI2LCAyOCwgMjI1LCAxOTEsIDI2LCAyOCwgMjMzLCAzNywgMjMwLCAxNDcsIDMxLCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAKKyAgICAyNDEsIDIyOSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgMjQwLCAyMjEsIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIDI0NSwgCisgICAgMjMwLCAyNDEsIDIzMCwgMjQ3LCAyMzIsIDMxLCAyNDUsIDIzMCwgMjQwLCAyMjAsIDI0NywgMjMyLCAzMSwgMjQ1LCAyMzEsIAorICAgIDE4MCwgMzEsIDI1MCwgMTgyLCAxODAsIDMxLCAyNDMsIDIzNiwgMjUwLCA0MywgMTgwLCAzMSwgMjMwLCAxODIsIDE4MCwgCisgICAgMzEsIDI1MiwgMTM4LCAxODAsIDMxLCAyMzQsIDE4NSwgMjE5LCA4MSwgMTgwLCAzMSwgMjQ5LCAxODcsIDE4MCwgMzEsIAorICAgIDI1MywgMjQxLCAxODAsIDMxLCAyMjYsIDE2NywgMTgwLCAzMSwgMjUxLCAxNjEsIDIyNiwgMTM0LCAxODAsIDMxLCAyNDgsIAorICAgIDgxLCAxNzcsIDI0NywgMTg3LCAxODAsIDMxLCAyNDcsIDE4NCwgMTgwLCAzMSwgMjEwLCAyMjIsIDE4MCwgMzEsIDIzNSwgCisgICAgMjU0LCAxODAsIDMxLCAyMjUsIDIwMCwgMTgwLCAzMSwgMjIzLCAxMzAsIDE4MCwgMzEsIDI0OSwgMTk3LCAxODAsIDMxLCAKKyAgICAyNDEsIDY3LCAyNTIsIDE5MiwgMTgwLCAzMSwgMjEyLCA1OSwgMTgwLCAzMSwgMjQ0LCA0NywgMTgwLCAzMSwgMjU0LCAyNTUsIAorICAgIDE4MCwgMzEsIDIyMywgOTIsIDE4MCwgMzEsIDIyMywgNjgsIDE4MCwgMzEsIDI0NSwgMjI5LCAxODAsIDMxLCAyMzUsIDU5LCAKKyAgICAxODAsIDMxLCAyNDksIDE5MiwgMTgwLCAzMSwgMjQ1LCAxNTAsIDE4MCwgMzEsIDI0NiwgNjAsIDE4MCwgMzEsIDI1MCwgCisgICAgMTUzLCAxODAsIDMxLCAyNDgsIDkwLCAxODAsIDMxLCAyMywgMjIzLCA2NywgMTgwLCAzMSwgMjI2LCA4NSwgMTgwLCAzMSwgCisgICAgMjMzLCA0MCwgMTgwLCAzMSwgMjUwLCA2LCAxODAsIDMxLCAyMzQsIDgzLCAxODAsIDMxLCAyNDMsIDkzLCAxODAsIDMxLCAKKyAgICAyMTgsIDExNCwgMTgwLCAzMSwgMjI0LCAxMzMsIDE4MCwgMzEsIDI0MywgMjM1LCAxODAsIDMxLCAyMjMsIDY5LCAxODAsIAorICAgIDMxLCAyMzMsIDc3LCAxNzcsIDIzMCwgMTYyLCAxODAsIDMxLCAyMjMsIDY1LCAxODAsIDMxLCAyNDIsIDE3NSwgMjE2LCA0MywgCisgICAgMjMxLCA4MSwgMTgwLCAzMSwgMjQ1LCAxNTIsIDE4MCwgMzEsIDIxOCwgMTI2LCAxODAsIDMxLCAyNDIsIDEzNSwgMTgwLCAKKyAgICAzMSwgMjQ1LCAxNDQsIDE4MCwgMzEsIDIyNSwgMjM5LCAxODAsIDMxLCAyMjIsIDIyOCwgMTgwLCAzMSwgMjQ0LCA2NywgCisgICAgMTgwLCAzMSwgMjE0LCA4LCAxNzcsIDIxMiwgNDQsIDE4MCwgMzEsIDI0OSwgMjAxLCAxODAsIDMxLCAyMzEsIDk0LCAxODAsIAorICAgIDMxLCAyNDUsIDY5LCAxODAsIDMxLCAyMTQsIDE3MiwgMTgwLCAzMSwgMjQ3LCAyMjAsIDE4MCwgMzEsIDI1MCwgOCwgMjMwLCAKKyAgICAxMTUsIDE4MCwgMzEsIDI0MiwgMTEzLCAxODAsIDMxLCAyNDMsIDk0LCAyMzYsIDYsIDE4MCwgMzEsIDIzMSwgMTQ2LCAxODAsIAorICAgIDMxLCAyNTUsIDE5LCAxODAsIDMxLCAyNDUsIDE2NSwgMTgwLCAzMSwgMjQ2LCAxMTcsIDE4MCwgMzEsIDIxMiwgNDIsIDE4MCwgCisgICAgMzEsIDIxOSwgMTUyLCAxODAsIDMxLCAyMzUsIDIyOSwgMTgwLCAzMSwgMjQ4LCA1MCwgMTgwLCAzMSwgMjQ4LCAxNjgsIAorICAgIDE4MCwgMzEsIDI0NywgMjE2LCAxODAsIDMxLCAyNDUsIDM3LCAxODAsIDMxLCAyMjAsIDExNywgMTgwLCAzMSwgMjE4LCAKKyAgICAxMzAsIDE4MCwgMzEsIDI0MiwgOSwgMTgwLCAzMSwgMjQ5LCAyMjAsIDE4MCwgMzEsIDI1MCwgMywgMTgwLCAzMSwgMjQ0LCAKKyAgICAxODUsIDE4MCwgMzEsIDI1NCwgMjIxLCAxODAsIDMxLCAyNDksIDIxOSwgMTgwLCAzMSwgMjI2LCAyMDEsIDIxNiwgMTk3LCAKKyAgICAyMTMsIDI0MiwgMTgwLCAzMSwgMjQ3LCAyNDAsIDE4MCwgMzEsIDIzMywgMTMwLCAxODAsIDMxLCAyNDQsIDIxLCAyNDksIAorICAgIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTExLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTA1LCAKKyAgICAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTU4LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgCisgICAgMTYxLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTkwLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAKKyAgICAyMSwgMTk1LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTk5LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgCisgICAgMTc0LCAyMSwgMTk2LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMjAxLCAyNDksIDE1NywgMjIyLCAyMDQsIAorICAgIDIxNiwgMjQ0LCAyMSwgMTExLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTA1LCAyNDksIDE1NywgMjIyLCAKKyAgICAyMDQsIDIxNiwgMjQ0LCAyMSwgMTU4LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTYxLCAyNDksIDE1NywgCisgICAgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTkwLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk1LCAyNDksIAorICAgIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk5LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk2LCAKKyAgICAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMjAxLCAxMSwgMjMsIDYsIDYxLCAxMSwgMjMsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDYsIDI1MSwgNzQsIDExLCAyMywgNiwgMjQ5LCA2OCwgMTEsIDIzLCA2LCA3NiwgMTEsIDIzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDYsIDI0MiwgNjcsIDExLCAyMywgNiwgNzQsIDExLCAyMywgCisgICAgNiwgMjM1LCAxNTAsIDExLCAyMywgNiwgMjM1LCAyOSwgMTEsIDIzLCA2LCAxNTYsIDExLCAyMywgNiwgMTk0LCAxMSwgMjMsIAorICAgIDYsIDIzMCwgMzAsIDExLCAyMywgNiwgNzgsIDExLCAyMywgNiwgMjI2LCAxMDksIDExLCAyMywgNiwgMjI0LCA5OSwgMTEsIAorICAgIDIzLCA2LCAxNTMsIDExLCAyMywgNiwgMjIyLCA5MywgMTEsIDIzLCA2LCAyMTcsIDE1MywgMTEsIDIzLCA2LCA2OSwgMTEsIAorICAgIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDYsIDIxMSwgCisgICAgMTE3LCAxMSwgMjMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDQsIDYxLCAxMSwgMjMsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDQsIAorICAgIDI1MSwgNzQsIDExLCAyMywgNCwgMjQ5LCA2OCwgMTEsIDIzLCA0LCA3NiwgMTEsIDIzLCA0LCAyNDUsIDE0LCAxMSwgMjMsIAorICAgIDQsIDI0MywgMjA5LCAxMSwgMjMsIDQsIDI0MiwgNjcsIDExLCAyMywgNCwgNzQsIDExLCAyMywgNCwgMjM1LCAxNTAsIDExLCAKKyAgICAyMywgNCwgMjM1LCAyOSwgMTEsIDIzLCA0LCAxNTYsIDExLCAyMywgNCwgMTk0LCAxMSwgMjMsIDQsIDIzMCwgMzAsIDExLCAKKyAgICAyMywgNCwgNzgsIDExLCAyMywgNCwgMjI2LCAxMDksIDExLCAyMywgNCwgMjI0LCA5OSwgMTEsIDIzLCA0LCAxNTMsIDExLCAKKyAgICAyMywgNCwgMjIyLCA5MywgMTEsIDIzLCA0LCAyMTcsIDE1MywgMTEsIDIzLCA0LCA2OSwgMTEsIDIzLCA0LCAyMTQsIDEwNSwgCisgICAgMTEsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMzIsIDYsIDYxLCAxMSwgMzIsIDYsIDI1MywgMTY2LCAxMSwgMzIsIDYsIDI1MSwgNzQsIDExLCAzMiwgCisgICAgNiwgMjQ5LCA2OCwgMTEsIDMyLCA2LCA3NiwgMTEsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzIsIDYsIDI0MywgMjA5LCAxMSwgCisgICAgMzIsIDYsIDI0MiwgNjcsIDExLCAzMiwgNiwgNzQsIDExLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzMiwgNiwgMjM1LCAyOSwgCisgICAgMTEsIDMyLCA2LCAxNTYsIDExLCAzMiwgNiwgMTk0LCAxMSwgMzIsIDYsIDIzMCwgMzAsIDExLCAzMiwgNiwgNzgsIDExLCAKKyAgICAzMiwgNiwgMjI2LCAxMDksIDExLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDMyLCA2LCAxNTMsIDExLCAzMiwgNiwgMjIyLCA5MywgCisgICAgMTEsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDMyLCA2LCA2OSwgMTEsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDMyLCA2LCAyMTIsIAorICAgIDk4LCAxMSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgCisgICAgMzIsIDQsIDYxLCAxMSwgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzIsIDQsIDI1MSwgNzQsIDExLCAzMiwgNCwgMjQ5LCA2OCwgCisgICAgMTEsIDMyLCA0LCA3NiwgMTEsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMzIsIDQsIDI0MywgMjA5LCAxMSwgMzIsIDQsIDc0LCAKKyAgICAxMSwgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMzIsIDQsIDIzNSwgMjksIDExLCAzMiwgNCwgMTU2LCAxMSwgMzIsIDQsIDE5NCwgCisgICAgMTEsIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzIsIDQsIDc4LCAxMSwgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzIsIDQsIDIyNCwgCisgICAgOTksIDExLCAzMiwgNCwgMTUzLCAxMSwgMzIsIDQsIDIyMiwgOTMsIDExLCAzMiwgNCwgMjE3LCAxNTMsIDExLCAzMiwgNCwgCisgICAgNjksIDExLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDMyLCAKKyAgICA0LCAyMTEsIDExNywgMTEsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgNiwgNjEsIDExLCAyMywgMzIsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMjMsIDMyLCA2LCAyNDksIDY4LCAxMSwgMjMsIDMyLCA2LCA3NiwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDIzLCAzMiwgNiwgMjQzLCAyMDksIDExLCAyMywgMzIsIDYsIDI0MiwgNjcsIAorICAgIDExLCAyMywgMzIsIDYsIDc0LCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAyOSwgMTEsIAorICAgIDIzLCAzMiwgNiwgMTU2LCAxMSwgMjMsIDMyLCA2LCAxOTQsIDExLCAyMywgMzIsIDYsIDIzMCwgMzAsIDExLCAyMywgMzIsIAorICAgIDYsIDc4LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDIzLCAzMiwgNiwgCisgICAgMTUzLCAxMSwgMjMsIDMyLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDIzLCAzMiwgNiwgNjksIAorICAgIDExLCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA0LCA2MSwgMTEsIAorICAgIDIzLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAyMywgMzIsIDQsIDI1MSwgNzQsIDExLCAyMywgMzIsIDQsIDI0OSwgNjgsIDExLCAKKyAgICAyMywgMzIsIDQsIDc2LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjQyLCA2NywgMTEsIDIzLCAzMiwgNCwgNzQsIDExLCAyMywgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMjMsIDMyLCAKKyAgICA0LCAyMzUsIDI5LCAxMSwgMjMsIDMyLCA0LCAxNTYsIDExLCAyMywgMzIsIDQsIDE5NCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAKKyAgICAzMCwgMTEsIDIzLCAzMiwgNCwgNzgsIDExLCAyMywgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMjMsIDMyLCA0LCAyMjQsIDk5LCAKKyAgICAxMSwgMjMsIDMyLCA0LCAxNTMsIDExLCAyMywgMzIsIDQsIDIyMiwgOTMsIDExLCAyMywgMzIsIDQsIDIxNywgMTUzLCAxMSwgCisgICAgMjMsIDMyLCA0LCA2OSwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDQsIDIxMiwgOTgsIDExLCAyMywgCisgICAgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNCwgMjEwLCAxNTksIDExLCAKKyAgICAxMTksIDYsIDYxLCAxMSwgMTE5LCA2LCAyNTEsIDc0LCAxMSwgMTE5LCA2LCAyNDksIDY4LCAxMSwgMTE5LCA2LCAyNDMsIAorICAgIDIwOSwgMTEsIDExOSwgNiwgMjM1LCAxNTAsIDExLCAxMTksIDYsIDIzNSwgMjksIDExLCAxMTksIDYsIDIzMCwgMzAsIDExLCAKKyAgICAxMTksIDYsIDc4LCAxMSwgMTE5LCA2LCAyMjYsIDEwOSwgMTEsIDExOSwgNiwgMjI0LCA5OSwgMTEsIDExOSwgNiwgMjIyLCAKKyAgICA5MywgMTEsIDExOSwgNiwgMjE3LCAxNTMsIDExLCAxMTksIDYsIDY5LCAxMSwgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDExOSwgCisgICAgNiwgMjEyLCA5OCwgMTEsIDExOSwgNiwgMjExLCAxNzgsIDExLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMTE5LCA2LCAyMTAsIAorICAgIDE1OSwgMTEsIDExOSwgNCwgNjEsIDExLCAxMTksIDQsIDI1MywgMTY2LCAxMSwgMTE5LCA0LCAyNTEsIDc0LCAxMSwgMTE5LCAKKyAgICA0LCAyNDksIDY4LCAxMSwgMTE5LCA0LCAyNDUsIDE0LCAxMSwgMTE5LCA0LCAyNDIsIDY3LCAxMSwgMTE5LCA0LCA3NCwgMTEsIAorICAgIDExOSwgNCwgMjM1LCAxNTAsIDExLCAxMTksIDQsIDIzNSwgMjksIDExLCAxMTksIDQsIDE1NiwgMTEsIDExOSwgNCwgMTk0LCAKKyAgICAxMSwgMTE5LCA0LCAyMzAsIDMwLCAxMSwgMTE5LCA0LCAyMjYsIDEwOSwgMTEsIDExOSwgNCwgMjI0LCA5OSwgMTEsIDExOSwgCisgICAgNCwgMTUzLCAxMSwgMTE5LCA0LCAyMjIsIDkzLCAxMSwgMTE5LCA0LCAyMTcsIDE1MywgMTEsIDExOSwgNCwgNjksIDExLCAKKyAgICAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMTE5LCA0LCAyMTIsIDk4LCAxMSwgMTE5LCA0LCAyMTEsIDE3OCwgMTEsIDExOSwgNCwgCisgICAgMjExLCAxMTcsIDExLCAxMTksIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNiwgNjEsIDExLCAyMywgMTE5LCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzLCAxMTksIDYsIDI1MSwgNzQsIDExLCAyMywgMTE5LCA2LCAyNDksIDY4LCAxMSwgMjMsIDExOSwgNiwgCisgICAgNzYsIDExLCAyMywgMTE5LCA2LCAyNDUsIDE0LCAxMSwgMjMsIDExOSwgNiwgMjQzLCAyMDksIDExLCAyMywgMTE5LCA2LCAKKyAgICAyNDIsIDY3LCAxMSwgMjMsIDExOSwgNiwgNzQsIDExLCAyMywgMTE5LCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAxMTksIDYsIAorICAgIDIzNSwgMjksIDExLCAyMywgMTE5LCA2LCAxNTYsIDExLCAyMywgMTE5LCA2LCAxOTQsIDExLCAyMywgMTE5LCA2LCAyMzAsIAorICAgIDMwLCAxMSwgMjMsIDExOSwgNiwgNzgsIDExLCAyMywgMTE5LCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAxMTksIDYsIDIyNCwgCisgICAgOTksIDExLCAyMywgMTE5LCA2LCAxNTMsIDExLCAyMywgMTE5LCA2LCAyMjIsIDkzLCAxMSwgMjMsIDExOSwgNiwgMjE3LCAKKyAgICAxNTMsIDExLCAyMywgMTE5LCA2LCA2OSwgMTEsIDIzLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNiwgMjEyLCAKKyAgICA5OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxMTcsIDExLCAyMywgMTE5LCA2LCAKKyAgICAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDQsIDYxLCAxMSwgMjMsIDExOSwgNCwgMjUzLCAxNjYsIDExLCAyMywgMTE5LCA0LCAKKyAgICAyNTEsIDc0LCAxMSwgMjMsIDExOSwgNCwgMjQ5LCA2OCwgMTEsIDIzLCAxMTksIDQsIDc2LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMjQ1LCAxNCwgMTEsIDIzLCAxMTksIDQsIDI0MywgMjA5LCAxMSwgMjMsIDExOSwgNCwgMjQyLCA2NywgMTEsIDIzLCAxMTksIAorICAgIDQsIDc0LCAxMSwgMjMsIDExOSwgNCwgMjM1LCAxNTAsIDExLCAyMywgMTE5LCA0LCAyMzUsIDI5LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMTU2LCAxMSwgMjMsIDExOSwgNCwgMTk0LCAxMSwgMjMsIDExOSwgNCwgMjMwLCAzMCwgMTEsIDIzLCAxMTksIDQsIDc4LCAKKyAgICAxMSwgMjMsIDExOSwgNCwgMjI2LCAxMDksIDExLCAyMywgMTE5LCA0LCAyMjQsIDk5LCAxMSwgMjMsIDExOSwgNCwgMTUzLCAKKyAgICAxMSwgMjMsIDExOSwgNCwgMjIyLCA5MywgMTEsIDIzLCAxMTksIDQsIDIxNywgMTUzLCAxMSwgMjMsIDExOSwgNCwgNjksIAogICAgIDExLCAyMywgMTE5LCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDQsIDIxMiwgOTgsIDExLCAyMywgMTE5LCA0LCAyMTEsIAogICAgIDE3OCwgMTEsIDIzLCAxMTksIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgNCwgMjEwLCAxNTksIDExLCAxMzMsIDYsIDYxLCAKLSAgICAxMSwgMTMzLCA2LCAyNTMsIDE1OCwgMTEsIDEzMywgNiwgMjQ5LCA2MCwgMTEsIDEzMywgNiwgNzUsIDExLCAxMzMsIDYsIAotICAgIDI0NSwgNiwgMTEsIDEzMywgNiwgMjQzLCAyMDIsIDExLCAxMzMsIDYsIDIzNSwgMTQ0LCAxMSwgMTMzLCA2LCAyMzUsIDIzLCAKLSAgICAxMSwgMTMzLCA2LCAxNTYsIDExLCAxMzMsIDYsIDE5MywgMTEsIDEzMywgNiwgMjMwLCAyNSwgMTEsIDEzMywgNiwgNzYsIAotICAgIDExLCAxMzMsIDYsIDIyNiwgMTA1LCAxMSwgMTMzLCA2LCAyMjQsIDk2LCAxMSwgMTMzLCA2LCAyMjIsIDkxLCAxMSwgMTMzLCAKLSAgICA2LCAyMTcsIDE1MiwgMTEsIDEzMywgNiwgNzAsIDExLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMTMzLCA2LCAyMTIsIDk4LCAKKyAgICAxMSwgMTMzLCA2LCAyNTMsIDE2NiwgMTEsIDEzMywgNiwgMjQ5LCA2OCwgMTEsIDEzMywgNiwgNzYsIDExLCAxMzMsIDYsIAorICAgIDI0NSwgMTQsIDExLCAxMzMsIDYsIDI0MywgMjA5LCAxMSwgMTMzLCA2LCAyMzUsIDE1MCwgMTEsIDEzMywgNiwgMjM1LCAyOSwgCisgICAgMTEsIDEzMywgNiwgMTU2LCAxMSwgMTMzLCA2LCAxOTQsIDExLCAxMzMsIDYsIDIzMCwgMzAsIDExLCAxMzMsIDYsIDc4LCAKKyAgICAxMSwgMTMzLCA2LCAyMjYsIDEwOSwgMTEsIDEzMywgNiwgMjI0LCA5OSwgMTEsIDEzMywgNiwgMjIyLCA5MywgMTEsIDEzMywgCisgICAgNiwgMjE3LCAxNTMsIDExLCAxMzMsIDYsIDY5LCAxMSwgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDEzMywgNiwgMjEyLCA5OCwgCiAgICAgMTEsIDEzMywgNiwgMjExLCAxNzgsIDExLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMTMzLCA0LCA2MSwgMTEsIDEzMywgNCwgCi0gICAgMjUzLCAxNTgsIDExLCAxMzMsIDQsIDI1MSwgNjYsIDExLCAxMzMsIDQsIDI0OSwgNjAsIDExLCAxMzMsIDQsIDc1LCAxMSwgCi0gICAgMTMzLCA0LCAyNDUsIDYsIDExLCAxMzMsIDQsIDI0MywgMjAyLCAxMSwgMTMzLCA0LCAyNDIsIDYwLCAxMSwgMTMzLCA0LCAKLSAgICA3MywgMTEsIDEzMywgNCwgMjM1LCAxNDQsIDExLCAxMzMsIDQsIDIzNSwgMjMsIDExLCAxMzMsIDQsIDE1NiwgMTEsIDEzMywgCi0gICAgNCwgMTkzLCAxMSwgMTMzLCA0LCAyMzAsIDI1LCAxMSwgMTMzLCA0LCA3NiwgMTEsIDEzMywgNCwgMjI2LCAxMDUsIDExLCAKLSAgICAxMzMsIDQsIDIyNCwgOTYsIDExLCAxMzMsIDQsIDE1MywgMTEsIDEzMywgNCwgMjIyLCA5MSwgMTEsIDEzMywgNCwgMjE3LCAKLSAgICAxNTIsIDExLCAxMzMsIDQsIDcwLCAxMSwgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDEzMywgCisgICAgMjUzLCAxNjYsIDExLCAxMzMsIDQsIDI1MSwgNzQsIDExLCAxMzMsIDQsIDI0OSwgNjgsIDExLCAxMzMsIDQsIDc2LCAxMSwgCisgICAgMTMzLCA0LCAyNDUsIDE0LCAxMSwgMTMzLCA0LCAyNDMsIDIwOSwgMTEsIDEzMywgNCwgMjQyLCA2NywgMTEsIDEzMywgNCwgCisgICAgNzQsIDExLCAxMzMsIDQsIDIzNSwgMTUwLCAxMSwgMTMzLCA0LCAyMzUsIDI5LCAxMSwgMTMzLCA0LCAxNTYsIDExLCAxMzMsIAorICAgIDQsIDE5NCwgMTEsIDEzMywgNCwgMjMwLCAzMCwgMTEsIDEzMywgNCwgNzgsIDExLCAxMzMsIDQsIDIyNiwgMTA5LCAxMSwgCisgICAgMTMzLCA0LCAyMjQsIDk5LCAxMSwgMTMzLCA0LCAxNTMsIDExLCAxMzMsIDQsIDIyMiwgOTMsIDExLCAxMzMsIDQsIDIxNywgCisgICAgMTUzLCAxMSwgMTMzLCA0LCA2OSwgMTEsIDEzMywgNCwgMjE0LCAxMDUsIDExLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAxMzMsIAogICAgIDQsIDIxMSwgMTc4LCAxMSwgMTMzLCA0LCAyMTEsIDExNywgMTEsIDEzMywgNCwgMjEwLCAxNTksIDExLCAxMzksIDYsIDYxLCAKLSAgICAxMSwgMTM5LCA2LCAyNTMsIDE1OCwgMTEsIDEzOSwgNiwgMjQ5LCA2MCwgMTEsIDEzOSwgNiwgNzUsIDExLCAxMzksIDYsIAotICAgIDI0NSwgNiwgMTEsIDEzOSwgNiwgMjQzLCAyMDIsIDExLCAxMzksIDYsIDczLCAxMSwgMTM5LCA2LCAyMzUsIDE0NCwgMTEsIAotICAgIDEzOSwgNiwgMjM1LCAyMywgMTEsIDEzOSwgNiwgMTU2LCAxMSwgMTM5LCA2LCAxOTMsIDExLCAxMzksIDYsIDc2LCAxMSwgCi0gICAgMTM5LCA2LCAyMjIsIDkxLCAxMSwgMTM5LCA2LCAyMTcsIDE1MiwgMTEsIDEzOSwgNiwgNzAsIDExLCAxMzksIDYsIDIxNCwgCisgICAgMTEsIDEzOSwgNiwgMjUzLCAxNjYsIDExLCAxMzksIDYsIDI0OSwgNjgsIDExLCAxMzksIDYsIDc2LCAxMSwgMTM5LCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMTM5LCA2LCAyNDMsIDIwOSwgMTEsIDEzOSwgNiwgNzQsIDExLCAxMzksIDYsIDIzNSwgMTUwLCAxMSwgCisgICAgMTM5LCA2LCAyMzUsIDI5LCAxMSwgMTM5LCA2LCAxNTYsIDExLCAxMzksIDYsIDE5NCwgMTEsIDEzOSwgNiwgNzgsIDExLCAKKyAgICAxMzksIDYsIDIyMiwgOTMsIDExLCAxMzksIDYsIDIxNywgMTUzLCAxMSwgMTM5LCA2LCA2OSwgMTEsIDEzOSwgNiwgMjE0LCAKICAgICAxMDUsIDExLCAxMzksIDYsIDIxMiwgOTgsIDExLCAxMzksIDYsIDIxMSwgMTc4LCAxMSwgMTM5LCA2LCAyMTEsIDExNywgMTEsIAotICAgIDEzOSwgNCwgNjEsIDExLCAxMzksIDQsIDI1MywgMTU4LCAxMSwgMTM5LCA0LCAyNTEsIDY2LCAxMSwgMTM5LCA0LCAyNDksIAotICAgIDYwLCAxMSwgMTM5LCA0LCA3NSwgMTEsIDEzOSwgNCwgMjQ1LCA2LCAxMSwgMTM5LCA0LCAyNDMsIDIwMiwgMTEsIDEzOSwgNCwgCi0gICAgMjQyLCA2MCwgMTEsIDEzOSwgNCwgNzMsIDExLCAxMzksIDQsIDIzNSwgMTQ0LCAxMSwgMTM5LCA0LCAyMzUsIDIzLCAxMSwgCi0gICAgMTM5LCA0LCAxNTYsIDExLCAxMzksIDQsIDE5MywgMTEsIDEzOSwgNCwgMjMwLCAyNSwgMTEsIDEzOSwgNCwgNzYsIDExLCAKLSAgICAxMzksIDQsIDIyNiwgMTA1LCAxMSwgMTM5LCA0LCAyMjQsIDk2LCAxMSwgMTM5LCA0LCAxNTMsIDExLCAxMzksIDQsIDIyMiwgCi0gICAgOTEsIDExLCAxMzksIDQsIDIxNywgMTUyLCAxMSwgMTM5LCA0LCA3MCwgMTEsIDEzOSwgNCwgMjE0LCAxMDUsIDExLCAxMzksIAotICAgIDQsIDIxMiwgOTgsIDExLCAxMzksIDQsIDIxMSwgMTc4LCAxMSwgMTM5LCA0LCAyMTEsIDExNywgMTEsIDEzOSwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAyMywgMTMzLCA2LCA2MSwgMTEsIDIzLCAxMzMsIDYsIDI1MywgMTU4LCAxMSwgMjMsIDEzMywgNiwgMjUxLCAKLSAgICA2NiwgMTEsIDIzLCAxMzMsIDYsIDI0OSwgNjAsIDExLCAyMywgMTMzLCA2LCA3NSwgMTEsIDIzLCAxMzMsIDYsIDI0NSwgNiwgCi0gICAgMTEsIDIzLCAxMzMsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDEzMywgNiwgMjQyLCA2MCwgMTEsIDIzLCAxMzMsIDYsIDczLCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMjM1LCAxNDQsIDExLCAyMywgMTMzLCA2LCAyMzUsIDIzLCAxMSwgMjMsIDEzMywgNiwgMTU2LCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMTkzLCAxMSwgMjMsIDEzMywgNiwgMjMwLCAyNSwgMTEsIDIzLCAxMzMsIDYsIDc2LCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjI2LCAxMDUsIDExLCAyMywgMTMzLCA2LCAyMjQsIDk2LCAxMSwgMjMsIDEzMywgNiwgMTUzLCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjIyLCA5MSwgMTEsIDIzLCAxMzMsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDEzMywgNiwgNzAsIDExLCAyMywgCi0gICAgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA2LCAyMTEsIDE3OCwgMTEsIAotICAgIDIzLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNiwgMjEwLCAxNTksIDExLCAyMywgMTMzLCA0LCA2MSwgMTEsIAotICAgIDIzLCAxMzMsIDQsIDI1MywgMTU4LCAxMSwgMjMsIDEzMywgNCwgMjUxLCA2NiwgMTEsIDIzLCAxMzMsIDQsIDI0OSwgNjAsIAotICAgIDExLCAyMywgMTMzLCA0LCA3NSwgMTEsIDIzLCAxMzMsIDQsIDI0NSwgNiwgMTEsIDIzLCAxMzMsIDQsIDI0MywgMjAyLCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjQyLCA2MCwgMTEsIDIzLCAxMzMsIDQsIDczLCAxMSwgMjMsIDEzMywgNCwgMjM1LCAxNDQsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDEzMywgNCwgMTU2LCAxMSwgMjMsIDEzMywgNCwgMTkzLCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjMwLCAyNSwgMTEsIDIzLCAxMzMsIDQsIDc2LCAxMSwgMjMsIDEzMywgNCwgMjI2LCAxMDUsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMjQsIDk2LCAxMSwgMjMsIDEzMywgNCwgMTUzLCAxMSwgMjMsIDEzMywgNCwgMjIyLCA5MSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIxNywgMTUyLCAxMSwgMjMsIDEzMywgNCwgNzAsIDExLCAyMywgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAxMzMsIDQsIDIxMSwgMTE3LCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjEwLCAxNTksIDExLCAzNSwgNiwgNjEsIDExLCAzNSwgNiwgMjUzLCAxNTgsIDExLCAzNSwgNiwgMjUxLCAKLSAgICA2NiwgMTEsIDM1LCA2LCAyNDksIDYwLCAxMSwgMzUsIDYsIDc1LCAxMSwgMzUsIDYsIDI0NSwgNiwgMTEsIDM1LCA2LCAyNDMsIAotICAgIDIwMiwgMTEsIDM1LCA2LCAyNDIsIDYwLCAxMSwgMzUsIDYsIDczLCAxMSwgMzUsIDYsIDIzNSwgMTQ0LCAxMSwgMzUsIDYsIAotICAgIDIzNSwgMjMsIDExLCAzNSwgNiwgMTU2LCAxMSwgMzUsIDYsIDE5MywgMTEsIDM1LCA2LCAyMzAsIDI1LCAxMSwgMzUsIDYsIAotICAgIDc2LCAxMSwgMzUsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDYsIDIyNCwgOTYsIDExLCAzNSwgNiwgMTUzLCAxMSwgMzUsIDYsIAotICAgIDIyMiwgOTEsIDExLCAzNSwgNiwgMjE3LCAxNTIsIDExLCAzNSwgNiwgNzAsIDExLCAzNSwgNiwgMjE0LCAxMDUsIDExLCAzNSwgCi0gICAgNiwgMjEyLCA5OCwgMTEsIDM1LCA2LCAyMTEsIDE3OCwgMTEsIDM1LCA2LCAyMTEsIDExNywgMTEsIDM1LCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDM1LCA0LCA2MSwgMTEsIDM1LCA0LCAyNTMsIDE1OCwgMTEsIDM1LCA0LCAyNTEsIDY2LCAxMSwgMzUsIDQsIAotICAgIDI0OSwgNjAsIDExLCAzNSwgNCwgNzUsIDExLCAzNSwgNCwgMjQ1LCA2LCAxMSwgMzUsIDQsIDI0MywgMjAyLCAxMSwgMzUsIAotICAgIDQsIDI0MiwgNjAsIDExLCAzNSwgNCwgNzMsIDExLCAzNSwgNCwgMjM1LCAxNDQsIDExLCAzNSwgNCwgMjM1LCAyMywgMTEsIAotICAgIDM1LCA0LCAxNTYsIDExLCAzNSwgNCwgMTkzLCAxMSwgMzUsIDQsIDIzMCwgMjUsIDExLCAzNSwgNCwgNzYsIDExLCAzNSwgNCwgCi0gICAgMjI2LCAxMDUsIDExLCAzNSwgNCwgMjI0LCA5NiwgMTEsIDM1LCA0LCAxNTMsIDExLCAzNSwgNCwgMjIyLCA5MSwgMTEsIDM1LCAKLSAgICA0LCAyMTcsIDE1MiwgMTEsIDM1LCA0LCA3MCwgMTEsIDM1LCA0LCAyMTQsIDEwNSwgMTEsIDM1LCA0LCAyMTIsIDk4LCAxMSwgCi0gICAgMzUsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA2LCAKLSAgICA2MSwgMTEsIDM1LCAyMywgNiwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDYsIDI1MSwgNjYsIDExLCAzNSwgMjMsIDYsIDI0OSwgCi0gICAgNjAsIDExLCAzNSwgMjMsIDYsIDc1LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDYsIDExLCAzNSwgMjMsIDYsIDI0MywgMjAyLCAKLSAgICAxMSwgMzUsIDIzLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCA2LCA3MywgMTEsIDM1LCAyMywgNiwgMjM1LCAxNDQsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDYsIDE1NiwgMTEsIDM1LCAyMywgNiwgMTkzLCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCA2LCA3NiwgMTEsIDM1LCAyMywgNiwgMjI2LCAxMDUsIDExLCAzNSwgMjMsIDYsIAotICAgIDIyNCwgOTYsIDExLCAzNSwgMjMsIDYsIDE1MywgMTEsIDM1LCAyMywgNiwgMjIyLCA5MSwgMTEsIDM1LCAyMywgNiwgMjE3LCAKLSAgICAxNTIsIDExLCAzNSwgMjMsIDYsIDcwLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgNiwgMjEyLCA5OCwgCi0gICAgMTEsIDM1LCAyMywgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDM1LCAyMywgNCwgNjEsIDExLCAzNSwgMjMsIDQsIDI1MywgMTU4LCAxMSwgMzUsIDIzLCA0LCAyNTEsIDY2LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyNDksIDYwLCAxMSwgMzUsIDIzLCA0LCA3NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCA2LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyNDMsIDIwMiwgMTEsIDM1LCAyMywgNCwgMjQyLCA2MCwgMTEsIDM1LCAyMywgNCwgNzMsIDExLCAzNSwgMjMsIAotICAgIDQsIDIzNSwgMTQ0LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCA0LCAxNTYsIDExLCAzNSwgMjMsIDQsIAotICAgIDE5MywgMTEsIDM1LCAyMywgNCwgMjMwLCAyNSwgMTEsIDM1LCAyMywgNCwgNzYsIDExLCAzNSwgMjMsIDQsIDIyNiwgMTA1LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMjQsIDk2LCAxMSwgMzUsIDIzLCA0LCAxNTMsIDExLCAzNSwgMjMsIDQsIDIyMiwgOTEsIDExLCAKLSAgICAzNSwgMjMsIDQsIDIxNywgMTUyLCAxMSwgMzUsIDIzLCA0LCA3MCwgMTEsIDM1LCAyMywgNCwgMjE0LCAxMDUsIDExLCAzNSwgCi0gICAgMjMsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDExNywgMTEsIDM1LCAKLSAgICAyMywgNCwgMjEwLCAxNTksIDExLCAzNSwgMzIsIDYsIDYxLCAxMSwgMzUsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDM1LCAzMiwgCi0gICAgNiwgMjUxLCA2NiwgMTEsIDM1LCAzMiwgNiwgMjQ5LCA2MCwgMTEsIDM1LCAzMiwgNiwgNzUsIDExLCAzNSwgMzIsIDYsIAotICAgIDI0NSwgNiwgMTEsIDM1LCAzMiwgNiwgMjQzLCAyMDIsIDExLCAzNSwgMzIsIDYsIDI0MiwgNjAsIDExLCAzNSwgMzIsIDYsIAotICAgIDczLCAxMSwgMzUsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAyMywgMTEsIDM1LCAzMiwgNiwgMTU2LCAKLSAgICAxMSwgMzUsIDMyLCA2LCAxOTMsIDExLCAzNSwgMzIsIDYsIDIzMCwgMjUsIDExLCAzNSwgMzIsIDYsIDc2LCAxMSwgMzUsIAotICAgIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAzMiwgNiwgMjI0LCA5NiwgMTEsIDM1LCAzMiwgNiwgMTUzLCAxMSwgMzUsIDMyLCAKLSAgICA2LCAyMjIsIDkxLCAxMSwgMzUsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDM1LCAzMiwgNiwgNzAsIDExLCAzNSwgMzIsIDYsIAotICAgIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNiwgCi0gICAgMjExLCAxMTcsIDExLCAzNSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA0LCA2MSwgMTEsIDM1LCAzMiwgNCwgMjUzLCAKLSAgICAxNTgsIDExLCAzNSwgMzIsIDQsIDI1MSwgNjYsIDExLCAzNSwgMzIsIDQsIDI0OSwgNjAsIDExLCAzNSwgMzIsIDQsIDc1LCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyNDUsIDYsIDExLCAzNSwgMzIsIDQsIDI0MywgMjAyLCAxMSwgMzUsIDMyLCA0LCAyNDIsIDYwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCA3MywgMTEsIDM1LCAzMiwgNCwgMjM1LCAxNDQsIDExLCAzNSwgMzIsIDQsIDIzNSwgMjMsIDExLCAKLSAgICAzNSwgMzIsIDQsIDE1NiwgMTEsIDM1LCAzMiwgNCwgMTkzLCAxMSwgMzUsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDMyLCAKLSAgICA0LCA3NiwgMTEsIDM1LCAzMiwgNCwgMjI2LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIyNCwgOTYsIDExLCAzNSwgMzIsIDQsIAotICAgIDE1MywgMTEsIDM1LCAzMiwgNCwgMjIyLCA5MSwgMTEsIDM1LCAzMiwgNCwgMjE3LCAxNTIsIDExLCAzNSwgMzIsIDQsIDcwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxNzgsIAotICAgIDExLCAzNSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDYsIDYxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgMzIsIDYsIDc1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNiwgMjQzLCAyMDIsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCAzMiwgNiwgNzMsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAxNTYsIDExLCAzNSwgMjMsIDMyLCA2LCAxOTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgNzYsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNCwgOTYsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCAxNTIsIAotICAgIDExLCAzNSwgMjMsIDMyLCA2LCA3MCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDQsIDYxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUzLCAKLSAgICAxNTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDc1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQzLCAyMDIsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA0LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCAzMiwgNCwgNzMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIAotICAgIDE0NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDMyLCA0LCAxNTYsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAxOTMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCAzMiwgNCwgNzYsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgOTYsIDExLCAzNSwgMjMsIDMyLCA0LCAxNTMsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE3LCAxNTIsIDExLCAzNSwgMjMsIDMyLCA0LCAKLSAgICA3MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDIzMCwgMTM4LCA2LCA2MSwgMTEsIDIzMCwgMTM4LCA2LCAyNTMsIDE1OCwgMTEsIDIzMCwgMTM4LCA2LCAKLSAgICAyNTEsIDY2LCAxMSwgMjMwLCAxMzgsIDYsIDI0OSwgNjAsIDExLCAyMzAsIDEzOCwgNiwgNzUsIDExLCAyMzAsIDEzOCwgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMjMwLCAxMzgsIDYsIDI0MywgMjAyLCAxMSwgMjMwLCAxMzgsIDYsIDI0MiwgNjAsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgNzMsIDExLCAyMzAsIDEzOCwgNiwgMjM1LCAxNDQsIDExLCAyMzAsIDEzOCwgNiwgMjM1LCAyMywgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCAxNTYsIDExLCAyMzAsIDEzOCwgNiwgMTkzLCAxMSwgMjMwLCAxMzgsIDYsIDIzMCwgMjUsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgNzYsIDExLCAyMzAsIDEzOCwgNiwgMjI2LCAxMDUsIDExLCAyMzAsIDEzOCwgNiwgMjI0LCA5NiwgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCAxNTMsIDExLCAyMzAsIDEzOCwgNiwgMjIyLCA5MSwgMTEsIDIzMCwgMTM4LCA2LCAyMTcsIDE1MiwgMTEsIAotICAgIDIzMCwgMTM4LCA2LCA3MCwgMTEsIDIzMCwgMTM4LCA2LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTM4LCA2LCAyMTIsIDk4LCAxMSwgCi0gICAgMjMwLCAxMzgsIDYsIDIxMSwgMTc4LCAxMSwgMjMwLCAxMzgsIDYsIDIxMSwgMTE3LCAxMSwgMjMwLCAxMzgsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMjMwLCAxMzgsIDQsIDYxLCAxMSwgMjMwLCAxMzgsIDQsIDI1MywgMTU4LCAxMSwgMjMwLCAxMzgsIDQsIAotICAgIDI1MSwgNjYsIDExLCAyMzAsIDEzOCwgNCwgMjQ5LCA2MCwgMTEsIDIzMCwgMTM4LCA0LCA3NSwgMTEsIDIzMCwgMTM4LCA0LCAKLSAgICAyNDUsIDYsIDExLCAyMzAsIDEzOCwgNCwgMjQzLCAyMDIsIDExLCAyMzAsIDEzOCwgNCwgMjQyLCA2MCwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCA3MywgMTEsIDIzMCwgMTM4LCA0LCAyMzUsIDE0NCwgMTEsIDIzMCwgMTM4LCA0LCAyMzUsIDIzLCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDE1NiwgMTEsIDIzMCwgMTM4LCA0LCAxOTMsIDExLCAyMzAsIDEzOCwgNCwgMjMwLCAyNSwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCA3NiwgMTEsIDIzMCwgMTM4LCA0LCAyMjYsIDEwNSwgMTEsIDIzMCwgMTM4LCA0LCAyMjQsIDk2LCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDE1MywgMTEsIDIzMCwgMTM4LCA0LCAyMjIsIDkxLCAxMSwgMjMwLCAxMzgsIDQsIDIxNywgMTUyLCAxMSwgCi0gICAgMjMwLCAxMzgsIDQsIDcwLCAxMSwgMjMwLCAxMzgsIDQsIDIxNCwgMTA1LCAxMSwgMjMwLCAxMzgsIDQsIDIxMiwgOTgsIDExLCAKLSAgICAyMzAsIDEzOCwgNCwgMjExLCAxNzgsIDExLCAyMzAsIDEzOCwgNCwgMjExLCAxMTcsIDExLCAyMzAsIDEzOCwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAzMiwgNCwgMjQ3LCAxMTksIDczLCAxMSwgMzIsIDQsIDI0NywgMTE5LCAyMzUsIDE0NCwgMTEsIDIzLCA2LCAKLSAgICAyNTQsIDE0MywgMTEsIDIzLCA2LCAyNTIsIDI2LCAxMSwgMjMsIDYsIDI0MywgMTA3LCAxMSwgMjMsIDYsIDI0OCwgNTQsIAotICAgIDExLCAyMywgNiwgMjQ1LCAxMDAsIDExLCAyMywgNiwgMjEwLCA4NSwgMTEsIDIzLCA2LCAyNDUsIDYzLCAxMSwgMjMsIDYsIAotICAgIDIxNiwgMTc5LCAxMSwgMjMsIDYsIDIzNSwgMTg1LCAxMSwgMjMsIDYsIDIzNCwgMjIyLCAxMSwgMjMsIDYsIDIzMywgOTgsIAotICAgIDExLCAyMywgNiwgMjMwLCAxMDIsIDExLCAyMywgNiwgMjI3LCAyMzcsIDExLCAyMywgNiwgMjExLCAxNTcsIDExLCAyMywgNiwgCi0gICAgMjI2LCAxOTksIDExLCAyMywgNiwgMjI1LCAxMDgsIDExLCAyMywgNiwgMjIzLCAzNywgMTEsIDIzLCA2LCAyMTYsIDE4MCwgCi0gICAgODcsIDExLCAyMywgNiwgMjE5LCAxNzcsIDExLCAyMywgNiwgMjE3LCA0MSwgMTEsIDIzLCA2LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICA2LCAyMjUsIDEzMywgMTEsIDIzLCA2LCAyNTAsIDExMCwgMTEsIDIzLCA2LCAyMjQsIDE2MSwgMTEsIDIzLCA2LCAyMjYsIAotICAgIDIwMSwgMTEsIDIzLCAyMjksIDIyMSwgMTEsIDIzLCA0LCAyNTQsIDE0MywgMTEsIDIzLCA0LCAyNTIsIDI2LCAxMSwgMjMsIAotICAgIDQsIDI0MywgMTA3LCAxMSwgMjMsIDQsIDI0OCwgNTQsIDExLCAyMywgNCwgMjQ1LCAxMDAsIDExLCAyMywgNCwgMjEwLCA4NSwgCi0gICAgMTEsIDIzLCA0LCAyNDUsIDYzLCAxMSwgMjMsIDQsIDIxNiwgMTc5LCAxMSwgMjMsIDQsIDIzNSwgMTg1LCAxMSwgMjMsIDQsIAotICAgIDIzNCwgMjIyLCAxMSwgMjMsIDQsIDIzMywgOTgsIDExLCAyMywgNCwgMjMwLCAxMDIsIDExLCAyMywgNCwgMjI3LCAyMzcsIAotICAgIDExLCAyMywgNCwgMjExLCAxNTcsIDExLCAyMywgNCwgMjI2LCAxOTksIDExLCAyMywgNCwgMjI1LCAxMDgsIDExLCAyMywgNCwgCi0gICAgMjIzLCAzNywgMTEsIDIzLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAyMywgNCwgMjE5LCAxNzcsIDExLCAyMywgNCwgMjE3LCAKLSAgICA0MSwgMTEsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDIzLCA0LCAyMjUsIDEzMywgMTEsIDIzLCA0LCAyNTAsIDExMCwgMTEsIAotICAgIDIzLCA0LCAyMjQsIDE2MSwgMTEsIDIzLCA0LCAyMjYsIDIwMSwgMTEsIDIzLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAyMywgCi0gICAgMjQ1LCAxMDEsIDg3LCAxMSwgMjMsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAyMzQsIDIyMywgODcsIDExLCAyMywgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMjMsIDIyMywgMzgsIDg3LCAxMSwgMjMsIDIyNSwgMTA5LCA4NywgMTEsIDMyLCA2LCAyNTQsIDE0MywgCi0gICAgMTEsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMzIsIDYsIDI0MywgMTA3LCAxMSwgMzIsIDYsIDI0OCwgNTQsIDExLCAzMiwgNiwgCi0gICAgMjQ1LCAxMDAsIDExLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDMyLCA2LCAyNDUsIDYzLCAxMSwgMzIsIDYsIDIxNiwgMTc5LCAKLSAgICAxMSwgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMzIsIDYsIDIzNCwgMjIyLCAxMSwgMzIsIDYsIDIzMywgOTgsIDExLCAzMiwgNiwgCi0gICAgMjMwLCAxMDIsIDExLCAzMiwgNiwgMjI3LCAyMzcsIDExLCAzMiwgNiwgMjExLCAxNTcsIDExLCAzMiwgNiwgMjI2LCAxOTksIAotICAgIDExLCAzMiwgNiwgMjI1LCAxMDgsIDExLCAzMiwgNiwgMjIzLCAzNywgMTEsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAzMiwgCi0gICAgNiwgMjE5LCAxNzcsIDExLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDMyLCA2LCAyMTQsIDE1NywgMTEsIDMyLCA2LCAyMjUsIAotICAgIDEzMywgMTEsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIDMyLCA2LCAyMjYsIDIwMSwgMTEsIAotICAgIDMyLCAyMjksIDIyMSwgMTEsIDMyLCA0LCAyNTQsIDE0MywgMTEsIDMyLCA0LCAyNTIsIDI2LCAxMSwgMzIsIDQsIDI0MywgCi0gICAgMTA3LCAxMSwgMzIsIDQsIDI0OCwgNTQsIDExLCAzMiwgNCwgMjQ1LCAxMDAsIDExLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDMyLCAKLSAgICA0LCAyNDUsIDYzLCAxMSwgMzIsIDQsIDIxNiwgMTc5LCAxMSwgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMzIsIDQsIDIzNCwgCi0gICAgMjIyLCAxMSwgMzIsIDQsIDIzMywgOTgsIDExLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAzMiwgNCwgMjI3LCAyMzcsIDExLCAKLSAgICAzMiwgNCwgMjExLCAxNTcsIDExLCAzMiwgNCwgMjI2LCAxOTksIDExLCAzMiwgNCwgMjI1LCAxMDgsIDExLCAzMiwgNCwgCi0gICAgMjIzLCAzNywgMTEsIDMyLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAzMiwgNCwgMjE5LCAxNzcsIDExLCAzMiwgNCwgMjE3LCAKLSAgICA0MSwgMTEsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDMyLCA0LCAyMjUsIDEzMywgMTEsIDMyLCA0LCAyNTAsIDExMCwgMTEsIAotICAgIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDMyLCA0LCAyMjYsIDIwMSwgMTEsIDMyLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAzMiwgCi0gICAgMjQ1LCAxMDEsIDg3LCAxMSwgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDMyLCAyMzQsIDIyMywgODcsIDExLCAzMiwgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMzIsIDIyMywgMzgsIDg3LCAxMSwgMzIsIDIyNSwgMTA5LCA4NywgMTEsIDIzLCAzMiwgNiwgMjU0LCAKLSAgICAxNDMsIDExLCAyMywgMzIsIDYsIDI1MiwgMjYsIDExLCAyMywgMzIsIDYsIDI0MywgMTA3LCAxMSwgMjMsIDMyLCA2LCAyNDgsIAotICAgIDU0LCAxMSwgMjMsIDMyLCA2LCAyNDUsIDEwMCwgMTEsIDIzLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAKLSAgICA2MywgMTEsIDIzLCAzMiwgNiwgMjE2LCAxNzksIDExLCAyMywgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMjMsIDMyLCA2LCAyMzQsIAotICAgIDIyMiwgMTEsIDIzLCAzMiwgNiwgMjMzLCA5OCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAxMDIsIDExLCAyMywgMzIsIDYsIDIyNywgCi0gICAgMjM3LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNiwgMjI2LCAxOTksIDExLCAyMywgMzIsIDYsIAotICAgIDIyNSwgMTA4LCAxMSwgMjMsIDMyLCA2LCAyMjMsIDM3LCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAyMywgCi0gICAgMzIsIDYsIDIxOSwgMTc3LCAxMSwgMjMsIDMyLCA2LCAyMTcsIDQxLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICAzMiwgNiwgMjI1LCAxMzMsIDExLCAyMywgMzIsIDYsIDI1MCwgMTEwLCAxMSwgMjMsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIAotICAgIDIzLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAyMywgMzIsIDIyOSwgMjIxLCAxMSwgMjMsIDMyLCA0LCAyNTQsIDE0MywgMTEsIAotICAgIDIzLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDIzLCAzMiwgNCwgMjQzLCAxMDcsIDExLCAyMywgMzIsIDQsIDI0OCwgNTQsIDExLCAKLSAgICAyMywgMzIsIDQsIDI0NSwgMTAwLCAxMSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDYzLCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyMTYsIDE3OSwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxODUsIDExLCAyMywgMzIsIDQsIDIzNCwgMjIyLCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMjMsIDMyLCA0LCAyMzAsIDEwMiwgMTEsIDIzLCAzMiwgNCwgMjI3LCAyMzcsIAotICAgIDExLCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDE5OSwgMTEsIDIzLCAzMiwgNCwgMjI1LCAKLSAgICAxMDgsIDExLCAyMywgMzIsIDQsIDIyMywgMzcsIDExLCAyMywgMzIsIDQsIDQwLCAyMTksIDE3NywgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjE5LCAxNzcsIDExLCAyMywgMzIsIDQsIDIxNywgNDEsIDExLCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyMjUsIDEzMywgMTEsIDIzLCAzMiwgNCwgMjUwLCAxMTAsIDExLCAyMywgMzIsIDQsIDIyNCwgMTYxLCAxMSwgMjMsIDMyLCAKLSAgICA0LCAyMjYsIDIwMSwgMTEsIDIzLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMjMsIDMyLCAyNDUsIDEwMSwgODcsIAotICAgIDExLCAyMywgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDEzNCwgCi0gICAgODcsIDExLCAyMywgMzIsIDIyMywgMzgsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAzNSwgMjMsIDYsIAotICAgIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCA2LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCA2LCAyNDMsIDEwNywgMTEsIDM1LCAyMywgNiwgCi0gICAgMjQ4LCA1NCwgMTEsIDM1LCAyMywgNiwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIDYsIAotICAgIDI0NSwgNjMsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTc5LCAxMSwgMzUsIDIzLCA2LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjM0LCAyMjIsIDExLCAzNSwgMjMsIDYsIDIzMywgOTgsIDExLCAzNSwgMjMsIDYsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyMjcsIDIzNywgMTEsIDM1LCAyMywgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDYsIDIyNiwgMTk5LCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMjUsIDEwOCwgMTEsIDM1LCAyMywgNiwgMjIzLCAzNywgMTEsIDM1LCAyMywgNiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIAotICAgIDIzLCA2LCAyMTksIDE3NywgMTEsIDM1LCAyMywgNiwgMjE3LCA0MSwgMTEsIDM1LCAyMywgNiwgMjE0LCAxNTcsIDExLCAzNSwgCi0gICAgMjMsIDYsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCA2LCAyNTAsIDExMCwgMTEsIDM1LCAyMywgNiwgMjI0LCAxNjEsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIyNiwgMjAxLCAxMSwgMzUsIDIzLCAyMjksIDIyMSwgMTEsIDM1LCAyMywgNCwgMjU0LCAxNDMsIDExLCAKLSAgICAzNSwgMjMsIDQsIDI1MiwgMjYsIDExLCAzNSwgMjMsIDQsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCA0LCAyNDgsIDU0LCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyNDUsIDEwMCwgMTEsIDM1LCAyMywgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCA2MywgMTEsIAotICAgIDM1LCAyMywgNCwgMjE2LCAxNzksIDExLCAzNSwgMjMsIDQsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCA0LCAyMzQsIDIyMiwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjMzLCA5OCwgMTEsIDM1LCAyMywgNCwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDQsIDIyNywgMjM3LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNCwgMjI2LCAxOTksIDExLCAzNSwgMjMsIDQsIDIyNSwgCi0gICAgMTA4LCAxMSwgMzUsIDIzLCA0LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDQsIAotICAgIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCA0LCAyMTcsIDQxLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgNCwgCi0gICAgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDQsIDI1MCwgMTEwLCAxMSwgMzUsIDIzLCA0LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgCi0gICAgNCwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDM1LCAyMywgMjQ1LCAxMDEsIDg3LCAKLSAgICAxMSwgMzUsIDIzLCAyMTYsIDE4MCwgODcsIDExLCAzNSwgMjMsIDIzNCwgMjIzLCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMzQsIAotICAgIDg3LCAxMSwgMzUsIDIzLCAyMjMsIDM4LCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMDksIDg3LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjU0LCAxNDMsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQzLCAxMDcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyNDgsIDU0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA2MywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTc5LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzQsIDIyMiwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMywgCi0gICAgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNywgMjM3LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDE5OSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNSwgCi0gICAgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIzLCAzNywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNCwgCi0gICAgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIyNCwgMTYxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDMyLCAyMjksIAotICAgIDIyMSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ4LCA1NCwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgMTAwLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNjMsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyMTYsIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM0LCAyMjIsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyMjcsIDIzNywgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAxOTksIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyMywgMzcsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCA0MCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTksIDE3NywgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgNDEsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMjUwLCAxMTAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMjAxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMzUsIDIzLCAzMiwgMjQ1LCAxMDEsIDg3LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjIzLCAzOCwgODcsIDExLCAzNSwgMjMsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAKLSAgICAyMywgNiwgMjQ3LCAyMjcsIDExLCAyMywgNCwgMjQ3LCAyMjcsIDExLCAyMywgMjEsIDIxMCwgODYsIDExLCAyMywgMjEsIAotICAgIDExMCwgMTEsIDIzLCAyMSwgMTA1LCAxMSwgMjMsIDIxLCAxNTgsIDExLCAyMywgMjEsIDE2MSwgMTEsIDIzLCAyMSwgMTg5LCAKLSAgICAxMSwgMjMsIDIxLCAxOTQsIDExLCAyMywgMjEsIDE5OCwgMTEsIDIzLCAyMSwgMTk1LCAxMSwgMjMsIDIxLCAyMDAsIDExLCAKLSAgICAxMzksIDIxLCAyMTAsIDg2LCAxMSwgMTM5LCAyMSwgMTEwLCAxMSwgMTM5LCAyMSwgMTA1LCAxMSwgMTM5LCAyMSwgMTU4LCAKLSAgICAxMSwgMTM5LCAyMSwgMTYxLCAxMSwgMTM5LCAyMSwgMTg5LCAxMSwgMTM5LCAyMSwgMTk0LCAxMSwgMTM5LCAyMSwgMTk4LCAKLSAgICAxMSwgMTM5LCAyMSwgMTk1LCAxMSwgMTM5LCAyMSwgMjAwLCAxMSwgMzUsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIxLCAxMTAsIAotICAgIDExLCAzNSwgMjEsIDEwNSwgMTEsIDM1LCAyMSwgMTU4LCAxMSwgMzUsIDIxLCAxNjEsIDExLCAzNSwgMjEsIDE4OSwgMTEsIAotICAgIDM1LCAyMSwgMTk0LCAxMSwgMzUsIDIxLCAxOTgsIDExLCAzNSwgMjEsIDE5NSwgMTEsIDM1LCAyMSwgMjAwLCAxMSwgMzUsIAotICAgIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMywgMjEsIDExMCwgMTEsIDM1LCAyMywgMjEsIDEwNSwgMTEsIDM1LCAyMywgCi0gICAgMjEsIDE1OCwgMTEsIDM1LCAyMywgMjEsIDE2MSwgMTEsIDM1LCAyMywgMjEsIDE4OSwgMTEsIDM1LCAyMywgMjEsIDE5NCwgCi0gICAgMTEsIDM1LCAyMywgMjEsIDE5OCwgMTEsIDM1LCAyMywgMjEsIDE5NSwgMTEsIDM1LCAyMywgMjEsIDIwMCwgMTEsIDIzMCwgCi0gICAgMTM4LCAyMSwgMjEwLCA4NiwgMTEsIDIzMCwgMTM4LCAyMSwgMTEwLCAxMSwgMjMwLCAxMzgsIDIxLCAxMDUsIDExLCAyMzAsIAotICAgIDEzOCwgMjEsIDE1OCwgMTEsIDIzMCwgMTM4LCAyMSwgMTYxLCAxMSwgMjMwLCAxMzgsIDIxLCAxODksIDExLCAyMzAsIDEzOCwgCi0gICAgMjEsIDE5NCwgMTEsIDIzMCwgMTM4LCAyMSwgMTk4LCAxMSwgMjMwLCAxMzgsIDIxLCAxOTUsIDExLCAyMzAsIDEzOCwgMjEsIAotICAgIDIwMCwgMTAsIDExLCAyNTQsIDE3MCwgMTAsIDExLCAyNTIsIDU0LCAxMCwgMTEsIDIzNSwgMTIzLCAxMCwgMTEsIDI0OCwgCi0gICAgMTk1LCAxMCwgMTEsIDIxMiwgMzAsIDEwLCAxMSwgMjEwLCAxMDgsIDEwLCAxMSwgMjQyLCAzNywgMTAsIDExLCAyMTcsIDgwLCAKLSAgICAxMCwgMTEsIDIxMSwgNDMsIDEwLCAxMSwgMjM0LCAyNTAsIDEwLCAxMSwgMjMzLCAxMDIsIDEwLCAxMSwgMjMxLCA3OCwgMTAsIAotICAgIDExLCAyMjgsIDYyLCAxMCwgMTEsIDIyMSwgMTY2LCAxMCwgMTEsIDI1NCwgMTk2LCAxMCwgMTEsIDI0NCwgMTQyLCAxMCwgCi0gICAgMTEsIDIyMiwgMjYsIDEwLCAxMSwgMjI0LCA4MSwgMTAsIDExLCAyMjMsIDk1LCAxMCwgMTEsIDIyMCwgNTksIDEwLCAxMSwgCi0gICAgMjE3LCA3LCAxMCwgMTEsIDIxNiwgMTkyLCAxMCwgMTEsIDIzNCwgMTI5LCAxMCwgMTEsIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDI0OCwgMjE2LCAxMCwgMTEsIDIxMCwgMTExLCAxMCwgMTEsIDI0MiwgMjQ0LCAxMCwgMTEsIDI0NywgMTE5LCAyNTIsIDU0LCAKLSAgICAxMCwgMTEsIDI0NywgMTE5LCAyMjgsIDYyLCAxMCwgMTEsIDI0NywgMTE5LCAyNDQsIDE0MiwgMTAsIDExLCAyNDcsIDExOSwgCi0gICAgMjI0LCA4MSwgMTAsIDExLCA2NSwgMjUyLCA1NCwgMTAsIDExLCA2NSwgMjM1LCAxMjMsIDEwLCAxMSwgNjUsIDI0MSwgMjE4LCAKLSAgICAxMCwgMTEsIDY1LCAyNDIsIDM3LCAxMCwgMTEsIDY1LCAyMTEsIDQzLCAxMCwgMTEsIDY1LCAyMzQsIDI1MCwgMTAsIDExLCAKLSAgICA2NSwgMjMzLCAxMDIsIDEwLCAxMSwgNjUsIDIzMSwgNzgsIDEwLCAxMSwgNjUsIDIyOCwgNjIsIDEwLCAxMSwgNjUsIDIyMSwgCi0gICAgMTY2LCAxMCwgMTEsIDY1LCAyNTQsIDE5NiwgMTAsIDExLCA2NSwgMjQ0LCAxNDIsIDEwLCAxMSwgNjUsIDIyMiwgMjYsIDEwLCAKLSAgICAxMSwgNjUsIDIyNCwgODEsIDEwLCAxMSwgNjUsIDIyMCwgNTksIDEwLCAxMSwgNjUsIDIxNywgNywgMTAsIDExLCA2NSwgCi0gICAgMjE2LCAxOTIsIDEwLCAxMSwgNjUsIDIzNCwgMTI5LCAxMCwgMTEsIDY1LCAyNDgsIDIxNiwgMTAsIDExLCA2NSwgMjQyLCAKLSAgICAyNDQsIDEwLCAxMSwgMjE3LCA3NiwgMjM1LCAxMjMsIDEwLCAxMSwgMjE3LCA3NiwgMjQyLCAzNywgMTAsIDExLCAyMTcsIAotICAgIDc2LCAyMTEsIDQzLCAxMCwgMTEsIDIxNywgNzYsIDIzMywgMTAyLCAxMCwgMTEsIDIxNywgNzYsIDIyOCwgNjIsIDEwLCAxMSwgCi0gICAgMjE3LCA3NiwgMjIxLCAxNjYsIDEwLCAxMSwgMjE3LCA3NiwgMjU0LCAxOTYsIDEwLCAxMSwgMjE3LCA3NiwgMjIyLCAyNiwgCi0gICAgMTAsIDExLCAyMTcsIDc2LCAyMjQsIDgxLCAxMCwgMTEsIDIxNywgNzYsIDIyMCwgNTksIDEwLCAxMSwgMjE3LCA3NiwgMjM0LCAKLSAgICAxMjksIDEwLCAxMSwgMjE3LCA3NiwgMjQ4LCAyMTYsIDEwLCAxMSwgMjE3LCA3NiwgMjQyLCAyNDQsIDEwLCAxMSwgMjE3LCAKLSAgICA3NiwgMjQ3LCAxMTksIDIyOCwgNjIsIDEwLCAxMSwgMjE3LCA3NiwgMjQ3LCAxMTksIDIyNCwgODEsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDI1MiwgNTQsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNSwgMTIzLCAxMCwgMTEsIDIxOCwgMTEwLCAyNDEsIDIxOCwgMTAsIAotICAgIDExLCAyMTgsIDExMCwgMjQyLCAzNywgMTAsIDExLCAyMTgsIDExMCwgMjE3LCA4MCwgMTAsIDExLCAyMTgsIDExMCwgMjExLCAKLSAgICA0MywgMTAsIDExLCAyMTgsIDExMCwgMjM0LCAyNTAsIDEwLCAxMSwgMjE4LCAxMTAsIDIzMSwgNzgsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDIyOCwgNjIsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMSwgMTY2LCAxMCwgMTEsIDIxOCwgMTEwLCAyNTQsIDE5NiwgMTAsIAotICAgIDExLCAyMTgsIDExMCwgMjQ0LCAxNDIsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMiwgMjYsIDEwLCAxMSwgMjE4LCAxMTAsIDIyNCwgCi0gICAgODEsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMCwgNTksIDEwLCAxMSwgMjE4LCAxMTAsIDIxNywgNywgMTAsIDExLCAyMTgsIAotICAgIDExMCwgMjE2LCAxOTIsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNCwgMTI5LCAxMCwgMTEsIDIxOCwgMTEwLCAyNDgsIDIxNiwgCi0gICAgMTAsIDExLCAyMTgsIDExMCwgMjEwLCAxMTEsIDEwLCAxMSwgMjE4LCAxMTAsIDI0MiwgMjQ0LCAxMCwgMTEsIDIxOCwgMTEwLCAKLSAgICAyNDcsIDExOSwgMjUyLCA1NCwgMTAsIDExLCAyMTgsIDExMCwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMTEsIDIzMiwgCi0gICAgMTIyLCAyNTQsIDE3MCwgMTAsIDExLCAyMzIsIDEyMiwgMjUyLCA1NCwgMTAsIDExLCAyMzIsIDEyMiwgMjM1LCAxMjMsIDEwLCAKLSAgICAxMSwgMjMyLCAxMjIsIDI0OCwgMTk1LCAxMCwgMTEsIDIzMiwgMTIyLCAyNDEsIDIxOCwgMTAsIDExLCAyMzIsIDEyMiwgCi0gICAgMjEyLCAzMCwgMTAsIDExLCAyMzIsIDEyMiwgMjEwLCAxMDgsIDEwLCAxMSwgMjMyLCAxMjIsIDI0MiwgMzcsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDIxNywgODAsIDEwLCAxMSwgMjMyLCAxMjIsIDIxMSwgNDMsIDEwLCAxMSwgMjMyLCAxMjIsIDIzMywgMTAyLCAKLSAgICAxMCwgMTEsIDIzMiwgMTIyLCAyMzEsIDc4LCAxMCwgMTEsIDIzMiwgMTIyLCAyMjgsIDYyLCAxMCwgMTEsIDIzMiwgMTIyLCAKLSAgICAyMjEsIDE2NiwgMTAsIDExLCAyMzIsIDEyMiwgMjU0LCAxOTYsIDEwLCAxMSwgMjMyLCAxMjIsIDI0NCwgMTQyLCAxMCwgMTEsIAotICAgIDIzMiwgMTIyLCAyMjIsIDI2LCAxMCwgMTEsIDIzMiwgMTIyLCAyMjQsIDgxLCAxMCwgMTEsIDIzMiwgMTIyLCAyMjMsIDk1LCAKLSAgICAxMCwgMTEsIDIzMiwgMTIyLCAyMjAsIDU5LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTcsIDcsIDEwLCAxMSwgMjMyLCAxMjIsIAotICAgIDIxNiwgMTkyLCAxMCwgMTEsIDIzMiwgMTIyLCAyMzQsIDEyOSwgMTAsIDExLCAyMzIsIDEyMiwgMjE2LCAyMDIsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDI0OCwgMjE2LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTAsIDExMSwgMTAsIDExLCAyMzIsIDEyMiwgMjQyLCAKLSAgICAyNDQsIDEwLCAxMSwgMTM5LCAyNTIsIDU0LCAxMCwgMTEsIDEzOSwgMjM1LCAxMjMsIDEwLCAxMSwgMTM5LCAyNDgsIDE5NSwgCi0gICAgMTAsIDExLCAxMzksIDIxMiwgMzAsIDEwLCAxMSwgMTM5LCAyMTAsIDEwOCwgMTAsIDExLCAxMzksIDI0MiwgMzcsIDEwLCAKLSAgICAxMSwgMTM5LCAyMTcsIDgwLCAxMCwgMTEsIDEzOSwgMjExLCA0MywgMTAsIDExLCAxMzksIDIzMywgMTAyLCAxMCwgMTEsIAotICAgIDEzOSwgMjMxLCA3OCwgMTAsIDExLCAxMzksIDIyOCwgNjIsIDEwLCAxMSwgMTM5LCAyMjEsIDE2NiwgMTAsIDExLCAxMzksIAotICAgIDI1NCwgMTk2LCAxMCwgMTEsIDEzOSwgMjQ0LCAxNDIsIDEwLCAxMSwgMTM5LCAyMjIsIDI2LCAxMCwgMTEsIDEzOSwgMjI0LCAKLSAgICA4MSwgMTAsIDExLCAxMzksIDIyMywgOTUsIDEwLCAxMSwgMTM5LCAyMjAsIDU5LCAxMCwgMTEsIDEzOSwgMjE3LCA3LCAxMCwgCi0gICAgMTEsIDEzOSwgMjE2LCAxOTIsIDEwLCAxMSwgMTM5LCAyMzQsIDEyOSwgMTAsIDExLCAxMzksIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDEzOSwgMjQ4LCAyMTYsIDEwLCAxMSwgMTM5LCAyMTAsIDExMSwgMTAsIDExLCAxMzksIDI0MiwgMjQ0LCAxMCwgMTEsIDIyNiwgCi0gICAgMTY4LCA2NiwgMiwgMTIyLCAyLCAyMTcsIDQzLCAxMCwgMTEsIDIyNiwgMTY4LCAxMjIsIDIsIDI0OCwgMTk1LCAyMzEsIAotICAgIDIwNSwgODYsIDI0NSwgMjIwLCAyMTEsIDIzOSwgMjMxLCAyMDUsIDg2LCAyMTksIDI4LCAyMTEsIDIzOSwgMjMxLCAyMDUsIAotICAgIDg2LCAyMTIsIDksIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIyOCwgNTYsIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIyMywgCi0gICAgMTExLCAyNDYsIDk2LCAyMzEsIDIwNSwgODYsIDI0MiwgMTI3LCAyNDYsIDk2LCAyMzEsIDIwNSwgODYsIDcxLCAyNDYsIDk2LCAKLSAgICAyMzEsIDIwNSwgODYsIDEyMywgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDExMywgNjQsIDI1MCwgMTQxLCAyMzEsIAotICAgIDIwNSwgODYsIDEzNCwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDI0NCwgMTEsIDY0LCAyNTAsIDE0MSwgMjMxLCAKLSAgICAyMDUsIDg2LCAyNDQsIDgxLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTAsIDE0MSwgCi0gICAgMjMxLCAyMDUsIDg2LCAyMjAsIDEyMiwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDI0NSwgMTkzLCA2NCwgMjUwLCAKLSAgICAxNDEsIDIzMSwgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAxMjMsIDY0LCAyNTIsIAotICAgIDE1MywgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAxMzQsIDY0LCAyNTIsIDE1MywgCi0gICAgMjMxLCAyMDUsIDg2LCAyNDQsIDExLCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MiwgMTUzLCAKLSAgICAyMzEsIDIwNSwgODYsIDIxOSwgMTI1LCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjIwLCAxMjIsIDY0LCAyNTIsIAotICAgIDE1MywgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDIyOCwgMjAwLCA2NCwgCi0gICAgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMTIzLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTAsIDM0LCAKLSAgICAyMzEsIDIwNSwgODYsIDEzNCwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjQ0LCAxMSwgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTAsIDM0LCAyMzEsIAotICAgIDIwNSwgODYsIDIyMCwgMTIyLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDIyNSwgMjUsIDIzMSwgMjA1LCA4NiwgMjI2LCAKLSAgICAxNTYsIDIzMSwgMjA1LCA4NiwgMjUyLCAxNTQsIDIzMSwgMjA1LCA4NiwgMjUwLCA3MCwgMjMxLCAyMDUsIDg2LCAyMTgsIAotICAgIDIzOSwgMjMxLCAyMDUsIDg2LCAyMTgsIDM5LCAyMzEsIDIwNSwgODYsIDI1MywgMTc5LCAyMzEsIDIwNSwgODYsIDIxMSwgCi0gICAgMjMyLCAyMzEsIDIwNSwgODYsIDIzNSwgNjIsIDIzMSwgMjA1LCA4NiwgMjUyLCAxODQsIDEzMSwgODYsIDIwMywgMjUyLCAKLSAgICAxODQsIDEzMSwgODYsIDI0MSwgNDMsIDEzMSwgODYsIDI0MSwgNDIsIDEzMSwgODYsIDI0MSwgNDEsIDEzMSwgODYsIDI0MSwgCi0gICAgNDAsIDEzMSwgODYsIDI0MSwgMzksIDEzMSwgODYsIDI0MSwgMzgsIDEzMSwgODYsIDI0MSwgMzcsIDEzMSwgODYsIDI0MSwgCi0gICAgMzYsIDEzMSwgODYsIDI0MSwgMzUsIDEzMSwgODYsIDI0MSwgMzQsIDEzMSwgODYsIDI0MSwgMzMsIDEzMSwgODYsIDI0MSwgCi0gICAgMzIsIDEzMSwgODYsIDI0MSwgMzEsIDEzMSwgODYsIDI0MSwgMzAsIDEzMSwgODYsIDI0MSwgMjksIDEzMSwgODYsIDI0MSwgCi0gICAgMjgsIDEzMSwgODYsIDI0MSwgMjcsIDEzMSwgODYsIDI0MSwgMjYsIDEzMSwgODYsIDI0MSwgMjUsIDEzMSwgODYsIDI0MSwgCi0gICAgMjQsIDEzMSwgODYsIDI0MSwgMjMsIDEzMSwgODYsIDI0MSwgMjIsIDEzMSwgODYsIDI0MSwgMjEsIDEzMSwgODYsIDI0MSwgCi0gICAgMjAsIDEzMSwgODYsIDI0MSwgMTksIDEzMSwgODYsIDI0MSwgMTgsIDEzMSwgODYsIDI0MSwgMTcsIDEzMSwgODYsIDI0MSwgCi0gICAgMTYsIDEzMSwgODYsIDI0MSwgMTUsIDEzMSwgODYsIDI0MSwgMTQsIDEzMSwgODYsIDI0MSwgMTMsIDEzMSwgODYsIDI0MSwgCi0gICAgMTIsIDEzMSwgODYsIDI0MSwgMTEsIDEzMSwgODYsIDI0MSwgMTAsIDEzMSwgODYsIDI0MSwgOSwgMTMxLCA4NiwgMjQxLCA4LCAKLSAgICAxMzEsIDg2LCAyNDEsIDcsIDEzMSwgODYsIDI0MSwgNiwgMTMxLCA4NiwgMjQxLCA1LCAxMzEsIDg2LCAyNDEsIDQsIDEzMSwgCi0gICAgODYsIDI0MSwgMywgMTMxLCA4NiwgMjQxLCAyLCAxMzEsIDg2LCAyNDEsIDEsIDEzMSwgODYsIDI0MSwgMCwgMTMxLCA4NiwgCi0gICAgMjQwLCAyNTUsIDEzMSwgODYsIDI0MCwgMjU0LCAxMzEsIDg2LCAyNDAsIDI1MywgMTMxLCA4NiwgMjQwLCAyNTIsIDEzMSwgCi0gICAgODYsIDI0MCwgMjUxLCAxMzEsIDg2LCA2NywgMjUyLCAxODQsIDEzMSwgODYsIDIxMywgMjM4LCAxMzEsIDg2LCAyMTMsIAotICAgIDIzNywgMTMxLCA4NiwgMjEzLCAyMzYsIDEzMSwgODYsIDIxMywgMjM1LCAxMzEsIDg2LCAyMTMsIDIzNCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMzMsIDEzMSwgODYsIDIxMywgMjMyLCAxMzEsIDg2LCAyMTMsIDIzMSwgMTMxLCA4NiwgMjEzLCAyMzAsIDEzMSwgCi0gICAgODYsIDIxMywgMjI5LCAxMzEsIDg2LCAyMTMsIDIyOCwgMTMxLCA4NiwgMjEzLCAyMjcsIDEzMSwgODYsIDIxMywgMjI2LCAKLSAgICAxMzEsIDg2LCAyMTMsIDIyNSwgMTMxLCA4NiwgMjEzLCAyMjQsIDEzMSwgODYsIDIxMywgMjIzLCAxMzEsIDg2LCAyMTMsIAotICAgIDIyMiwgMTMxLCA4NiwgMjEzLCAyMjEsIDEzMSwgODYsIDIxMywgMjIwLCAxMzEsIDg2LCAyMTMsIDIxOSwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMTgsIDEzMSwgODYsIDIxMywgMjE3LCAxMzEsIDg2LCAyMTMsIDIxNiwgMTMxLCA4NiwgMjEzLCAyMTUsIDEzMSwgCi0gICAgODYsIDIxMywgMjE0LCAxMzEsIDg2LCAyMTMsIDIxMywgMTMxLCA4NiwgMjEzLCAyMTIsIDEzMSwgODYsIDIxMywgMjExLCAKLSAgICAxMzEsIDg2LCAyMTMsIDIxMCwgMTMxLCA4NiwgMjEzLCAyMDksIDEzMSwgODYsIDIxMywgMjA4LCAxMzEsIDg2LCAyMTMsIAotICAgIDIwNywgMTMxLCA4NiwgMjEzLCAyMDYsIDEzMSwgODYsIDIxMywgMjA1LCAxMzEsIDg2LCAyMTMsIDIwNCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMDMsIDEzMSwgODYsIDIxMywgMjAyLCAxMzEsIDg2LCAyMTMsIDIwMSwgMTMxLCA4NiwgMjEzLCAyMDAsIDEzMSwgCi0gICAgODYsIDIxMywgMTk5LCAxMzEsIDg2LCAyMTMsIDE5OCwgMTMxLCA4NiwgMjEzLCAxOTcsIDEzMSwgODYsIDIxMywgMTk2LCAKLSAgICAxMzEsIDg2LCAyMTMsIDE5NSwgMTMxLCA4NiwgMjEzLCAxOTQsIDEzMSwgODYsIDIxMywgMTkzLCAxMzEsIDg2LCAyMTMsIAotICAgIDE5MiwgMTMxLCA4NiwgMjEzLCAxOTEsIDEzMSwgODYsIDIxMywgMTkwLCAyMjUsIDMzLCAyNTAsIDI0MywgMjUyLCAxODQsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgMjE5LCAKLSAgICAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgCi0gICAgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgODEsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjE5LCAKLSAgICAxMjUsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjQ1LCAxOTMsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAyMTksIDE1LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjE2LCAyNDgsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM1LCAxMzksIAotICAgIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMjQsIDE1LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAKLSAgICAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAyNDEsIDIyNSwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAxMSwgNjQsIAotICAgIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgMjE5LCAxMjUsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQxLCAyMjUsIDIyNSwgCi0gICAgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAKLSAgICAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMzUsIDEzOSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0MSwgMjI1LCAyMjUsIAotICAgIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIDI0MSwgCi0gICAgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAKLSAgICAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAKLSAgICAxMSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjE5LCAxMjUsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQ3LCAyNDcsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIAotICAgIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyMzUsIDEzOSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0NywgMjQ3LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIAotICAgIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgODUsIDIzNSwgNjIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAKLSAgICAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCAKLSAgICA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyNDQsIDgxLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTksIDEyNSwgNjQsIDI0OSwgMjQyLCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NSwgMTkzLCAKLSAgICA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjE2LCAyNDgsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNSwgMTM5LCA2NCwgMjQ5LCAyNDIsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjQsIDE1LCA2NCwgCi0gICAgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICA3MSwgMjM1LCA2MiwgMjEsIDIxMCwgODcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIxMCwgODcsIDI0OSwgMjE5LCAyMSwgCi0gICAgMTIzLCAyNDksIDIxOSwgMjEsIDExMywgMjQ5LCAyMTksIDIxLCAxMzQsIDI0OSwgMjE5LCAyMSwgMjQ0LCAxMSwgMjQ5LCAKLSAgICAyMTksIDIxLCAyNDQsIDgxLCAyNDksIDIxOSwgMjEsIDIxOSwgMTI1LCAyNDksIDIxOSwgMjEsIDIyMCwgMTIyLCAyNDksIAotICAgIDIxOSwgMjEsIDI0NSwgMTkzLCAyNDksIDIxOSwgMjEsIDIyOCwgMjAwLCAyNDksIDIxOSwgODgsIDcsIDYsIDEsIDYxLCA4OCwgCi0gICAgNywgNiwgMSwgMjUzLCAxNTgsIDg4LCA3LCA2LCAxLCAyNTEsIDY2LCA4OCwgNywgNiwgMSwgMjQ5LCA2MCwgODgsIDcsIDYsIAotICAgIDEsIDc1LCA4OCwgNywgNiwgMSwgMjQ1LCA2LCA4OCwgNywgNiwgMSwgMjQzLCAyMDIsIDg4LCA3LCA2LCAxLCAyNDIsIDYwLCAKLSAgICA4OCwgNywgNiwgMSwgNzMsIDg4LCA3LCA2LCAxLCAyMzUsIDE0NCwgODgsIDcsIDYsIDEsIDIzNSwgMjMsIDg4LCA3LCA2LCAKLSAgICAxLCAxNTYsIDg4LCA3LCA2LCAxLCAxOTMsIDg4LCA3LCA2LCAxLCAyMzAsIDI1LCA4OCwgNywgNiwgMSwgNzYsIDg4LCA3LCAKLSAgICA2LCAxLCAyMjYsIDEwNSwgODgsIDcsIDYsIDEsIDIyNCwgOTYsIDg4LCA3LCA2LCAxLCAxNTMsIDg4LCA3LCA2LCAxLCAyMjIsIAotICAgIDkxLCA4OCwgNywgNiwgMSwgMjE3LCAxNTIsIDg4LCA3LCA2LCAxLCA3MCwgODgsIDcsIDYsIDEsIDIxNCwgMTA1LCA4OCwgNywgCi0gICAgNiwgMSwgMjEyLCA5OCwgODgsIDcsIDYsIDEsIDIxMSwgMTc4LCA4OCwgNywgNiwgMSwgMjExLCAxMTcsIDg4LCA3LCA2LCAxLCAKLSAgICAyMTAsIDE1OSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgNywgNiwgMSwgMjIyLCA5MSwgMzcsIDMyLCA3LCA2LCAxLCAKLSAgICAyNTEsIDY2LCAzNywgMzIsIDcsIDYsIDEsIDE1MywgMzcsIDI1MCwgMTkxLCAzNywgMjExLCAxODAsIDkyLCA3LCA2LCAxLCAKLSAgICA2MSwgOTIsIDcsIDYsIDEsIDI1MywgMTU4LCA5MiwgNywgNiwgMSwgMjUxLCA2NiwgOTIsIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDkyLCA3LCA2LCAxLCA3NSwgOTIsIDcsIDYsIDEsIDI0NSwgNiwgOTIsIDcsIDYsIDEsIDI0MywgMjAyLCA5MiwgNywgNiwgMSwgCi0gICAgMjQyLCA2MCwgOTIsIDcsIDYsIDEsIDczLCA5MiwgNywgNiwgMSwgMjM1LCAxNDQsIDkyLCA3LCA2LCAxLCAyMzUsIDIzLCAKLSAgICA5MiwgNywgNiwgMSwgMTU2LCA5MiwgNywgNiwgMSwgMTkzLCA5MiwgNywgNiwgMSwgMjMwLCAyNSwgOTIsIDcsIDYsIDEsIAotICAgIDc2LCA5MiwgNywgNiwgMSwgMjI2LCAxMDUsIDkyLCA3LCA2LCAxLCAyMjQsIDk2LCA5MiwgNywgNiwgMSwgMTUzLCA5MiwgNywgCi0gICAgNiwgMSwgMjIyLCA5MSwgOTIsIDcsIDYsIDEsIDIxNywgMTUyLCA5MiwgNywgNiwgMSwgNzAsIDkyLCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgOTIsIDcsIDYsIDEsIDIxMiwgOTgsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCAKLSAgICA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDkyLCAyNDAsIDIwMSwgOTIsIDIzMCwgNDksIDkyLCAyMjEsIDE4MywgOTIsIDIxOCwgCi0gICAgMjI2LCA5MiwgMjI0LCAyMTgsIDkyLCAyMTIsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCA2MSwgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjUzLCAxNTgsIDE1MiwgMzcsIDcsIDYsIDEsIDI1MSwgNjYsIDE1MiwgMzcsIDcsIDYsIDEsIDI0OSwgNjAsIDE1MiwgMzcsIAotICAgIDcsIDYsIDEsIDc1LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDUsIDYsIDE1MiwgMzcsIDcsIDYsIDEsIDI0MywgMjAyLCAxNTIsIAotICAgIDM3LCA3LCA2LCAxLCAyNDIsIDYwLCAxNTIsIDM3LCA3LCA2LCAxLCA3MywgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAxNDQsIAotICAgIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDE1NiwgMTUyLCAzNywgNywgNiwgMSwgMTkzLCAKLSAgICAxNTIsIDM3LCA3LCA2LCAxLCAyMzAsIDI1LCAxNTIsIDM3LCA3LCA2LCAxLCA3NiwgMTUyLCAzNywgNywgNiwgMSwgMjI2LCAKLSAgICAxMDUsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNCwgOTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjIyLCA5MSwgMTUyLCAzNywgNywgNiwgMSwgMjE3LCAxNTIsIDE1MiwgMzcsIDcsIDYsIDEsIDcwLCAxNTIsIDM3LCA3LCA2LCAKLSAgICAxLCAyMTQsIDEwNSwgMTUyLCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgCi0gICAgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjIzLCAxNTcsIDIzMSwgOTcsIDUwLCAKLSAgICAyMjMsIDE1NywgMjMxLCA5NCwgNTAsIDE1MiwgOTIsIDcsIDYsIDEsIDYxLCAxNTIsIDkyLCA3LCA2LCAxLCAyNTMsIDE1OCwgCi0gICAgMTUyLCA5MiwgNywgNiwgMSwgMjUxLCA2NiwgMTUyLCA5MiwgNywgNiwgMSwgMjQ5LCA2MCwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgNzUsIDE1MiwgOTIsIDcsIDYsIDEsIDI0NSwgNiwgMTUyLCA5MiwgNywgNiwgMSwgMjQzLCAyMDIsIDE1MiwgOTIsIDcsIDYsIAotICAgIDEsIDI0MiwgNjAsIDE1MiwgOTIsIDcsIDYsIDEsIDczLCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIDE0NCwgMTUyLCA5MiwgNywgCi0gICAgNiwgMSwgMjM1LCAyMywgMTUyLCA5MiwgNywgNiwgMSwgMTU2LCAxNTIsIDkyLCA3LCA2LCAxLCAxOTMsIDE1MiwgOTIsIDcsIAotICAgIDYsIDEsIDIzMCwgMjUsIDE1MiwgOTIsIDcsIDYsIDEsIDc2LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwNSwgMTUyLCA5MiwgCi0gICAgNywgNiwgMSwgMjI0LCA5NiwgMTUyLCA5MiwgNywgNiwgMSwgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCAyMjIsIDkxLCAxNTIsIAotICAgIDkyLCA3LCA2LCAxLCAyMTcsIDE1MiwgMTUyLCA5MiwgNywgNiwgMSwgNzAsIDE1MiwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCAKLSAgICAxNTIsIDkyLCA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgMjExLCAxMTcsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCAyNDksIDEyOCwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAKLSAgICAxMDUsIDE1MiwgOTIsIDI0MCwgMTEzLCAxNTIsIDkyLCAxOTAsIDE1MiwgOTIsIDIwNiwgMTUyLCA5MiwgMjU1LCAyNSwgCi0gICAgMTUyLCA5MiwgMjEyLCAyMywgNDIsIDI0NywgMTY0LCA5MiwgMjUwLCAyMywgOTIsIDI0OSwgMTcwLCA5MiwgMjQzLCAyNTIsIAotICAgIDkyLCAyNDAsIDEwNSwgOTIsIDIyOSwgODYsIDkyLCAyMjksIDc5LCA5MiwgMjI2LCAyMTQsIDkyLCAyMTksIDM1LCA5MiwgCi0gICAgMTIwLCAyLCAyNDUsIDMxLCA3OCwgOTIsIDIxMywgMTE5LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA2MSwgMjIzLCAKLSAgICAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjUzLCAxNTgsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI1MSwgNjYsIDIyMywgCi0gICAgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI0OSwgNjAsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDc1LCAyMjMsIDEwMywgCi0gICAgMjM1LCAyMzksIDE2LCAxLCAyNDUsIDYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI0MywgMjAyLCAyMjMsIDEwMywgCi0gICAgMjM1LCAyMzksIDE2LCAxLCAyNDIsIDYwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3MywgMjIzLCAxMDMsIDIzNSwgCi0gICAgMjM5LCAxNiwgMSwgMjM1LCAxNDQsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIzNSwgMjMsIDIyMywgMTAzLCAyMzUsIAotICAgIDIzOSwgMTYsIDEsIDE1NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMTkzLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAKLSAgICAxLCAyMzAsIDI1LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgCi0gICAgMjI2LCAxMDUsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIyNCwgOTYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIAotICAgIDE1MywgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjIyLCA5MSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjE3LCAKLSAgICAxNTIsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDcwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTQsIDEwNSwgCi0gICAgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjEyLCA5OCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjExLCAxNzgsIAotICAgIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMSwgMTE3LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTAsIDE1OSwgCi0gICAgNDIsIDE0MSwgMjQxLCA2MywgOTIsIDU2LCAyMzQsIDE4LCA5MiwgNTYsIDIwNiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDUwLCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTQsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2MiwgOTIsIDU2LCAyNDgsIDkwLCA5MiwgCi0gICAgOSwgMjE0LCAxNzcsIDIzOCwgNjksIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI4LCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2OCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIAotICAgIDQyLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0NCwgOTIsIDksIDIxNCwgMTc3LCAKLSAgICAyMzgsIDY1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTEsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NywgOTIsIDksIDIxNCwgCi0gICAgMTc3LCAyMzgsIDQzLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyOSwgOTIsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDM0LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjcsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NywgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzcsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAKLSAgICA0OCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNzIsIDkyLCA5LCAyMTQsIDE3NywgCi0gICAgMjM4LCA3MSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTIsIDkyLCA5LCAyMTQsIAotICAgIDE3NywgMjM4LCA3MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYxLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDcsIDkyLCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCAyNiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzEsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzMCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgCi0gICAgMzgsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQxLCA5MiwgOSwgMjE0LCAxNzcsIAotICAgIDIzOCwgMzMsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU4LCAyMTYsIDYsIDIyMCwgCi0gICAgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCAzOSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNzEsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDY5LCAyMTYsIDYsIAotICAgIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA1MywgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgMzYsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDQ5LCAyMTYsIAotICAgIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCAzMiwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgNjMsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDQ1LCAzNywgCi0gICAgMTU0LCAyNTQsIDI0NSwgMzcsIDE1NCwgMjU1LCAxMiwgMjQ5LCA3MSwgMjQ0LCA0MiwgMjUwLCAwLCAyMTQsIDE5NCwgMjI4LCAKLSAgICAyMTMsIDIsIDIxOCwgMTUzLCAyMTgsIDMzLCAxMTcsIDIzMCwgMTE0LCAyMTgsIDMyLCAyNTAsIDI2LCAyNTMsIDIwNywgCi0gICAgMjQ2LCA1NCwgMjE4LCAzMSwgMTE3LCAyNTEsIDExOCwgMjIzLCAxNTgsIDI1MSwgMTQwLCAyNTMsIDIwNywgMjI4LCAyMTIsIAotICAgIDIxMiwgNDEsIDIxMiwgMzUsIDIxMywgMTMxLCAyMzAsIDE5NSwgMjEyLCAyNSwgMjQ1LCAyMjQsIDI0MiwgMTgxLCAyNDUsIAotICAgIDQ1LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI1NCwgMTI4LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI1MywgMjI1LCAyNDIsIDE4MSwgCi0gICAgMiwgMjMxLCA1MSwgMTY2LCAyMzAsIDEyOSwgODcsIDIxMiwgMjcsIDI0OSwgMTM3LCAyMzAsIDEyOSwgODcsIDI0NCwgOTIsIAotICAgIDIyNCwgMjIsIDIzMCwgMTI5LCA4NywgMjEyLCAyNywgMjQyLCAyMTAsIDIzMCwgMTI5LCA4NywgMjQzLCAyMjksIDIzMCwgCi0gICAgMTI5LCA4NywgMjEyLCA1MiwgMjQyLCAyMTAsIDIzMCwgMTI5LCA4NywgMjMzLCA4MCwgMjI0LCAyMiwgMjMwLCAxMjksIDg3LCAKLSAgICAyMTIsIDUyLCAyNDksIDEzNywgMjMwLCAxMjksIDg3LCAyNDksIDEzNywgMjMwLCAxMjgsIDE2NiwgMjMwLCAxMjksIDIsIAotICAgIDI0NCwgMTkwLCAyNDQsIDkyLCAyMjQsIDIyLCAyMzAsIDEyOSwgMiwgMjQ0LCAxOTAsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgCi0gICAgMTI5LCAyLCAyNDQsIDE5MCwgMjQzLCAyMjksIDIzMCwgMTI5LCAyLCAyNDQsIDE5MCwgMjE4LCAzOCwgMiwgMjQ0LCAxOTAsIAotICAgIDI0MiwgMTc5LCAyMTgsIDE1NiwgMjE5LCAyNTUsIDIxOCwgMTU2LCAyNTAsIDExNiwgMjIxLCAxNjgsIDI0NSwgMzksIDIxNSwgCi0gICAgMjM1LCAyNDgsIDg0LCAyMTUsIDIzNSwgMjI2LCA1OSwgMjE1LCAyMzUsIDI1MSwgMjcsIDIxNSwgMTA5LCAyNTAsIDExOCwgCi0gICAgMjUxLCAyMTAsIDIyMiwgMTkxLCAyNDEsIDE3OSwgMjE4LCAzNiwgMjUxLCAyMTAsIDI0NSwgMjI4LCA2NCwgMjMxLCAxOTQsIAotICAgIDI0NSwgMjI4LCA2NCwgMjIzLCAzMSwgMjQxLCAyMDQsIDI0NCwgMTEsIDIzMywgNTQsIDI0OSwgMjQ2LCAyMzEsIDE3MCwgCi0gICAgMjMzLCA1MywgMjQ0LCAxNzYsIDIzMywgNTMsIDIzMywgNTQsIDI0NCwgNDcsIDIzNiwgMCwgMjExLCAyMzksIDIzMCwgNTgsIAotICAgIDIxNiwgMzQsIDI1MywgMTkxLCAyNDIsIDE0MywgMjMxLCA2NywgMjEyLCAzOSwgMjE3LCA1NywgMjMzLCAyNiwgMjUyLCAKLSAgICAxNDksIDIyNSwgNjIsIDIyMywgMTExLCAyNTQsIDU0LCAyNDIsIDEyNywgMjU0LCA1NCwgMjI1LCAyMTcsIDIyNSwgMjE4LCAKLSAgICAyNTAsIDExOSwgMjE4LCAxMTQsIDI0MiwgMjMsIDIxOSwgOTAsIDY0LCAyMjUsIDQ0LCAyMzEsIDg3LCAyMjYsIDE5NywgCi0gICAgMjUxLCAxOTQsIDIyNCwgMjI5LCAyMzMsIDM2LCAyMjMsIDMyLCAyNDksIDE0MiwgMjIzLCAzMiwgMjUyLCAxNTksIDI0OSwgCi0gICAgMTczLCAyMjMsIDMxLCAyNDksIDk1LCAyMiwgMjIzLCAzMSwgMjE4LCAxNDEsIDI1MSwgMTY3LCAyMTksIDE0LCAyNTEsIAotICAgIDE1MSwgMjQzLCAyNTEsIDI0MywgMjQ3LCAyMjIsIDIwNywgMjE3LCAyNDYsIDIyNCwgMjMxLCAyNDgsIDE3NSwgMjI2LCAKLSAgICAyMzYsIDIxOCwgNywgMjQzLCAyNDgsIDIxOSwgMjMwLCAyNDQsIDkxLCAyNTEsIDIxLCAyLCAyMTcsIDIzOSwgMjQ4LCAzNSwgCi0gICAgMjE5LCA1MiwgMjQwLCAxMTIsIDI0OSwgMTQxLCAyMjAsIDcwLCAyNDAsIDExMSwgMjQwLCAxMTIsIDI0OSwgMTQxLCAyNDYsIAotICAgIDEwOCwgMjQ5LCAxNzIsIDI1MCwgODQsIDEzMCwgMjUwLCAyNTQsIDIzMiwgMTQxLCAyNDksIDg4LCAyNDEsIDU1LCAyMjQsIAotICAgIDIzMywgMjE5LCAyNDAsIDI1MiwgMzYsIDI1MSwgMTYzLCAyMjQsIDIzNCwgNjQsIDI0NCwgMzMsIDI0OSwgMTcxLCAyNDQsIAotICAgIDI0LCAyMiwgMjM0LCAzMiwgMjE3LCAxOSwgMjExLCAyMzAsIDI0MiwgMTMsIDIyMiwgMTIsIDI1MSwgMTc3LCAyMiwgMjQ5LCAKLSAgICAxMDIsIDIxMSwgMjM3LCAyNDIsIDE4NCwgMjQ5LCAyMzUsIDI0MiwgMTg0LCAyMTUsIDE5MywgMjQ2LCA5MCwgMjUyLCA2MiwgCi0gICAgMjMwLCA5MywgMjUwLCA3LCAyNTIsIDYyLCAyMzAsIDkyLCAyNTIsIDE4NywgMjUxLCAxNzYsIDIyMywgMzMsIDIxMSwgMjAxLCAKLSAgICAyMjQsIDE5NSwgMjUxLCAyMzUsIDI1MSwgMjAsIDIzNSwgMTM4LCAyNTAsIDc3LCAyMTUsIDIzNSwgMjQ0LCAxNjIsIDI1MCwgCi0gICAgNzYsIDI0NCwgOTQsIDI0NCwgOTUsIDIxOSwgMTIsIDI1MiwgMTU4LCAyMjUsIDI1MCwgMjI0LCAyNDQsIDI0OSwgMjA0LCAKLSAgICAyNTIsIDE1OSwgMjE3LCA1OSwgMjE1LCAyMzUsIDI0OSwgMTI4LCAyNDQsIDY3LCAyMjUsIDYzLCAyNDgsIDgxLCAyMzUsIAotICAgIDEzMSwgMjQ3LCAxMzEsIDI1MCwgMjMyLCAyMTgsIDExMywgMjExLCAyNDAsIDI1MCwgOTgsIDIzMCwgMTI5LCAyMTMsIDE2NCwgCi0gICAgMjUwLCAxNjIsIDIyMSwgMTk5LCAyMjEsIDIyNCwgMjQyLCAxNDgsIDI1MCwgMjUxLCAyNTAsIDIzMywgMjQwLCAyNDUsIAotICAgIDI0NCwgMTMwLCAyMTIsIDAsIDIyMiwgMjAwLCAyNDksIDIzNiwgMjQ0LCA4NiwgMjI1LCAyLCAyMiwgMjQ0LCA5MCwgMjMwLCAKLSAgICAyMjcsIDIzMCwgMTA4LCAyNTEsIDEwLCAyNTAsIDM5LCAyNDEsIDIzMiwgMjUzLCAyNDEsIDIyNiwgNjIsIDIxNiwgMTQsIAotICAgIDI0MSwgMjUxLCAyNTAsIDI5LCAyMTYsIDI0MiwgMjE2LCAxMTMsIDI1MCwgMjAsIDI1MSwgMjAyLCAyMjUsIDE3NywgMjUzLCAKLSAgICAyNDAsIDIxMywgMTcyLCAyNDMsIDExMCwgMjQ3LCAxOTcsIDI0MSwgMTU2LCAyMTksIDg0LCAyMzEsIDIzNCwgMjUxLCAyNDUsIAotICAgIDI0MywgMTExLCAyNDcsIDI0MCwgMjUxLCAxNjYsIDI0NCwgNTIsIDIyNSwgMzMsIDI1MCwgMjQxLCAyOCwgMjI4LCA0NywgCi0gICAgMjMwLCA4NSwgMjgsIDIyOCwgNDIsIDIyMSwgMjEyLCAyNDIsIDk5LCAyOCwgMjM0LCAxMzcsIDIxNSwgMTkwLCAyMTMsIAotICAgIDE1NCwgMjgsIDIyMSwgMTkyLCAyMjIsIDEyNCwgMjIwLCAxMSwgMiwgMjIxLCAyMjcsIDIxNiwgMjQ0LCAyMjMsIDE3OCwgCi0gICAgMjIsIDI1MiwgMTU5LCAyMTksIDEwNSwgMjIsIDIxOSwgMTA1LCAyNTEsIDE4NywgMjUyLCAxMjMsIDIyLCAyNDEsIDQ5LCAKLSAgICAyNTAsIDEyMCwgMjQ0LCA3MywgMjE5LCA2MywgMjIyLCAxMjUsIDIxOCwgMTIsIDIxNSwgMTk0LCAyNDAsIDI0NiwgMjIzLCAKLSAgICAxNzksIDI1NCwgMTI5LCAyNDQsIDMxLCAyMjIsIDEzNiwgMjQ0LCAzMSwgMjE3LCAyNDEsIDI0MCwgMjM1LCAyNTEsIDExOSwgCi0gICAgMjQwLCAyMzUsIDIsIDI0MywgOTQsIDIyNiwgMjI5LCAyNTEsIDExOSwgMjM1LCAxMzEsIDIyNCwgMjM5LCAyMjYsIDIyOCwgCi0gICAgMjQ1LCA0NCwgMjI0LCAyMzksIDIyNiwgMjI4LCAyNDAsIDI0NCwgMjUyLCAxNDUsIDI1MywgMTgxLCAyMTYsIDI1MiwgMjMxLCAKLSAgICAyMzQsIDI0MCwgMjQwLCAyMzIsIDExMSwgMjQwLCAyNDAsIDI0OSwgMTc2LCAyMTgsIDEyNSwgMjIxLCAxOTgsIDI0OCwgNDMsIAotICAgIDIxOCwgMTI1LCAyNDQsIDE4MCwgMjM1LCAxNDksIDIzMywgODksIDIzNSwgMTMxLCAyNTAsIDIyNiwgMjQ1LCA0NCwgMjUwLCAKLSAgICAyMjYsIDIyMywgMTQxLCAyMzAsIDExMiwgMjI2LCAxMTQsIDIxMiwgNDEsIDI1MSwgMTIzLCAyNDksIDE0NSwgMjE2LCAxMDYsIAotICAgIDIzMywgMTgsIDIyMywgMTgwLCAyNTAsIDIyNCwgMjQ2LCA5NiwgMjQ5LCAxMzUsIDIxMiwgMywgMjE5LCA3MCwgMjE5LCA2OCwgCi0gICAgMjQwLCAyNDUsIDIyMywgMTUzLCAyNDIsIDE3MCwgMjIwLCA1NywgMjMwLCAxNDUsIDIyMiwgMTk0LCAyNTAsIDEwOCwgMjQ3LCAKLSAgICAxMzYsIDIyNSwgNzMsIDI1MSwgMjAzLCAyNDUsIDE2OSwgMjI2LCAyMzgsIDIxOCwgMjUyLCAyMjAsIDUyLCAyNTEsIDEyMiwgCi0gICAgMjU0LCA5MiwgMjQxLCA1NCwgMjMzLCAxMjEsIDI1MiwgNjAsIDI0NCwgOTAsIDIxNSwgMTkzLCAyNDQsIDkwLCAyNTEsIAotICAgIDIwOSwgMjE1LCA5MSwgMjQxLCAyNDksIDI1MCwgMTA5LCAyNTIsIDE4NywgMjUwLCAxMDksIDI0MywgMjQyLCAyNTIsIDE4NywgCi0gICAgMjUwLCAxMDksIDI1MSwgMjM3LCAyMjUsIDE5NSwgMjM0LCAyNiwgMjI0LCAyNDgsIDI0NiwgODcsIDI1MSwgMTEsIDI1MiwgCi0gICAgMTc3LCAyNTEsIDExLCAyNDcsIDEzMCwgMjMwLCAxMTMsIDI0NCwgMTkwLCAyNDksIDE0NiwgMjQ0LCAxOTAsIDIxNiwgMTA3LCAKLSAgICAyNDQsIDE5MCwgMjIzLCAxODEsIDI0NCwgMTkwLCAyNTAsIDIyNSwgMjQ0LCAxOTAsIDI0NiwgOTcsIDI0NCwgMTkwLCAyMTgsIAotICAgIDI0MSwgMjEyLCAzLCAyNDAsIDI0NiwgMjQ0LCAxOTAsIDIzMCwgMTQ2LCAyNDQsIDE5MCwgMjQ3LCAxMzcsIDI0NCwgMTkwLCAKLSAgICAyMjUsIDc0LCAyNDQsIDE5MCwgMjQzLCAyNDUsIDI0NCwgMTkwLCAyNDIsIDIwLCAyNDQsIDE5MCwgMjExLCAyMjQsIDI0NCwgCi0gICAgMTkwLCAyNTIsIDcxLCAyNDQsIDE5MCwgMjI2LCA0NSwgMjQ0LCAxOTAsIDIyNSwgNzQsIDIyOCwgNTMsIDIyNSwgMjMyLCAKLSAgICAyMjQsIDE4NiwgMjQ1LCAxMywgMjQ1LCAyMjcsIDIyOCwgNTMsIDIzMCwgMTEwLCAyMTYsIDE5LCA3MSwgMTIwLCAyMjUsIDcsIAotICAgIDI1MiwgMTgyLCAyMzUsIDI0MiwgNzEsIDEyNCwgMjI1LCA3LCAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCA0MywgMjI1LCA3LCAKLSAgICAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCA0NCwgMjI1LCA3LCAyNTIsIDE4MiwgMjM1LCAyNDIsIDI0NCwgODQsIDI0MiwgMTYsIAotICAgIDUwLCAyMTIsIDMzLCAyNDIsIDE2LCA1MCwgMjI2LCAyMTUsIDI0MiwgMTYsIDUwLCAyMTYsIDEzNSwgMTIwLCA1MCwgMjE2LCAKLSAgICAxMzUsIDEyNCwgNTAsIDI1MCwgMTksIDI0MiwgMTEsIDUwLCAyMDQsIDI0MiwgMTEsIDUwLCAyNDksIDEyMywgMjExLCAyMjAsIAotICAgIDI0MSwgMjUxLCAyNDUsIDE0LCAyMjksIDEwNCwgMjE3LCAxNTEsIDIzNSwgMTI1LCAyNDYsIDkyLCAyMzQsIDgyLCAyNTEsIAotICAgIDI0NywgMjExLCAyMjAsIDI0OSwgMjQ5LCAyMjQsIDEyNywgMjQyLCAxNCwgMjI0LCAyMzAsIDIzMSwgMTc3LCAyMjAsIDQsIAotICAgIDI1MywgMjAzLCAyMjAsIDQsIDI0MSwgMTY0LCAyMjAsIDQsIDIxMSwgMjIwLCAyMjEsIDI0MCwgMjExLCAyMjAsIDI1MSwgCi0gICAgMTg2LCAyNDQsIDI5LCAyNTEsIDkwLCAyMzYsIDAsIDIxOSwgMTY5LCAyNTEsIDg5LCAyMzYsIDAsIDIxOSwgMTY5LCAyNTEsIAotICAgIDE2MiwgMjQyLCAxOTQsIDIzMSwgMTg1LCAyMTEsIDIyMSwgMjQ0LCAxNzQsIDIzMSwgMTg2LCAyMiwgMjExLCAyMjIsIDI0MSwgCi0gICAgNjAsIDI0MiwgMTAsIDExMywgMjMxLCA1OSwgMjQxLCA2MCwgMjQyLCAxMCwgMTEzLCAyMTEsIDIxOSwgMjQxLCA2MCwgMjQyLCAKLSAgICAxMCwgMjI0LCAyNTUsIDIyNiwgMjI3LCAyMTEsIDIyMiwgMiwgMjUxLCAxMDYsIDI0NSwgMjI1LCAyNTEsIDE0MSwgMiwgCi0gICAgMjEzLCAyNDYsIDIyNSwgMTY4LCAyLCAyNTEsIDIxMiwgMjQyLCAzNCwgMjMxLCAxODYsIDIsIDI0MiwgMTEwLCAyMjUsIAotICAgIDEwOSwgMjMxLCAxNzQsIDIzMSwgMTg2LCAyLCAyMTUsIDk3LCAyMjYsIDIwOCwgMjMxLCAxODUsIDIyNiwgMjA4LCAyMTEsIAotICAgIDIyMSwgMjUyLCAxODYsIDI0OSwgMTkwLCAyMTEsIDIwNSwgMjI0LCAxODksIDIzNSwgMTMxLCAyMjYsIDIyMywgMjM1LCAKLSAgICAxMzEsIDI0MiwgMTY5LCAyNDIsIDIyMiwgMjUyLCAxODcsIDI1NCwgMTEzLCAyNDUsIDE4LCAyNTQsIDE2MCwgMjU0LCAxNjEsIAotICAgIDIzMCwgMTM2LCAyMzYsIDUsIDIxOSwgMTAwLCAyMzUsIDIzMiwgMjQ4LCAzNCwgMjI1LCAxNjcsIDI0MiwgMTA1LCAyNDgsIAotICAgIDE3OSwgMjMyLCAyMDEsIDIyOSwgMjExLCAyMjQsIDI1NCwgMjQ0LCAxOTEsIDIzMSwgMTQyLCAyNDIsIDMzLCAyNTIsIDEzOCwgCi0gICAgMjI1LCAxLCAyMTcsIDE3MSwgMjI1LCA2NiwgMjM0LCA2NCwgNzgsIDIzMiwgMTExLCAyMzMsIDEwLCAyMjIsIDIzMywgMjQzLCAKLSAgICA1NCwgMjE4LCAxMzEsIDIzNCwgNjMsIDI1MSwgMTcxLCAyNDksIDE0OCwgMiwgMjQxLCAyMjcsIDIxMiwgMTksIDI1MiwgNjksIAotICAgIDI0MSwgMjI3LCAyNTEsIDEzNSwgMjQxLCAyMjcsIDExMywgMjQxLCAyMjUsIDIxOSwgMTAsIDI0MSwgMjI3LCAyNDIsIDEyMCwgCi0gICAgMjQxLCAyMjcsIDI0MSwgMjI4LCAyLCA3NCwgMjUxLCAyMDgsIDI0MSwgMjI3LCAyNDIsIDEyNywgMjQxLCAyMjcsIDIxMSwgCi0gICAgNDIsIDI0MSwgMjI3LCAyMjQsIDEyOCwgMjQxLCAyMjcsIDI0MSwgMjI4LCAyLCAyMjMsIDMzLCAyMjMsIDQ0LCAyNDEsIAotICAgIDIyNSwgMjQxLCAyMjgsIDI0OCwgODEsIDI0NywgMjQ5LCAyMjAsIDgyLCAyLCAxMTUsIDU5LCAyMzUsIDIxNSwgMjQ1LCAKLSAgICAxNzIsIDE5MiwgMjUxLCAxMTYsIDI1NCwgMTEyLCA4NywgMjUxLCAxOTUsIDIxOSwgOTIsIDg3LCAyNDksIDIyOCwgODcsIAotICAgIDIxOCwgMjQ2LCAyMTcsIDI0OCwgODcsIDI0NiwgODUsIDI0OCwgMTU3LCA4NywgMjI1LCA2NywgNjQsIDIyNCwgMjQ5LCAKLSAgICAyNDQsIDYxLCAyNTIsIDMsIDI0NywgMTY1LCA4NywgMjE5LCAzLCAyNTIsIDE1OCwgMjE2LCAxNDksIDI1MiwgMTU4LCA3MSwgCi0gICAgMjQ0LCA1MSwgMjQwLCAyMTEsIDIyNSwgNSwgODcsIDIzMCwgMTQ5LCAyNTIsIDE3MiwgMjQ5LCA5OCwgMjQ1LCAzMiwgMTE0LCAKLSAgICAyNDcsIDEzMiwgNTAsIDI0OSwgMTM5LCAyNTAsIDI0MiwgMjUyLCAxNDQsIDIsIDIxMSwgNDAsIDUwLCAyNTIsIDE0NCwgMiwgCi0gICAgMjQ3LCAxMzIsIDUwLCAyNTIsIDE0NCwgMiwgMjQ1LCA0NywgNTAsIDI1MiwgMTQ0LCAyLCAyMjQsIDIyOCwgNTAsIDIzMCwgCi0gICAgMTQ5LCAyLCAyMTEsIDIzNSwgMjUwLCAxMzgsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMSwgMjIsIDIxMSwgNDAsIDUwLCAyMjEsIAotICAgIDE3OCwgMjI1LCAxNjYsIDI0OSwgMjA4LCAyNTEsIDEzOSwgMjMwLCAxODYsIDI0NCwgNTYsIDI0NywgMTg1LCAyMjYsIDE2MSwgCi0gICAgMjQ3LCAxOTAsIDI0NiwgNDksIDI0NCwgMTA3LCAyNDQsIDQwLCAyMDQsIDI0NCwgMTA3LCAyNDQsIDQwLCAyMjYsIDc2LCAyLCAKLSAgICAyNDksIDEwMCwgMjI2LCA3NiwgMjQ0LCAxODMsIDIxNCwgMTYzLCAyNTEsIDE2LCAyMTcsIDE4LCAyNTEsIDE2LCAyNTAsIAotICAgIDI0MywgMjM1LCAyNDIsIDI1MCwgMTM4LCAyLCAyMTQsIDE1MywgMjE1LCAyMzAsIDI1MCwgMTM4LCAyLCAyNDYsIDEwNCwgCi0gICAgMjE1LCAyMzAsIDI1MiwgMTQxLCAyNTAsIDEzNywgMjUwLCA2LCAyMjQsIDEyMywgMjIyLCAxODUsIDIyNCwgMTIzLCAyMjYsIAotICAgIDE5LCAyMTgsIDEyMSwgMjIyLCAxMzEsIDIxNSwgMjIyLCAyMjIsIDEzMSwgMjUxLCAxOTEsIDIxNywgOTEsIDIzMywgNTEsIAotICAgIDIyOCwgNDUsIDIyOCwgNDYsIDIsIDI0OCwgODAsIDI0OSwgMTQ3LCAyNTAsIDAsIDI1MSwgMTkyLCAyMDQsIDI1MSwgMTkyLCAKLSAgICAyNDIsIDEyNywgMjUxLCAxOTIsIDI1MSwgMjA4LCAyNTEsIDE5MiwgMjI2LCAxNTcsIDI1MSwgMTkyLCAyNTEsIDE4OSwgCi0gICAgMjI5LCAyMDUsIDI1MiwgMTc1LCAyMjEsIDE4NiwgMjMxLCA2MCwgMjE3LCAxLCAyMjMsIDEyMywgMjI2LCA3NCwgMjQ0LCAKLSAgICAxNTksIDIzMSwgMjM0LCAyMjEsIDIyMywgMjU0LCA4OSwgMjI0LCAxNDUsIDI1NCwgMjUyLCAyMzIsIDExMywgMjUwLCAxMjcsIAotICAgIDIzMSwgNzIsIDIyNiwgMTI5LCAyMTUsIDIzOCwgMjM1LCAyNTIsIDIxNSwgMjM4LCAyMjYsIDgyLCAyNDYsIDI0LCA4NywgCi0gICAgMjM1LCAyNDksIDI0NSwgMTE5LCAyNDUsIDEyMCwgMiwgMjQ2LCAxMDQsIDgwLCA0OCwgMjUwLCAwLCAyMzEsIDIwMCwgMiwgCi0gICAgMjMyLCAxMDcsIDI0NCwgNzMsIDI1MCwgMCwgMjMxLCAyMDAsIDIsIDIyMywgMTU3LCAyNDQsIDczLCAyMDQsIDIzMSwgMjAwLCAKLSAgICAyLCAyMjMsIDE1NywgMjQ0LCA3MywgMjA0LCAyMzEsIDIwMCwgMiwgMjMyLCAxMDcsIDI0NCwgNzMsIDIyNCwgMjM2LCAyMjQsIAotICAgIDIzNywgMjQwLCAyNDgsIDIyOSwgODQsIDIzMCwgMTU5LCAyMjUsIDExNywgMjMwLCAxNTksIDIyNSwgMTE4LCAyLCA5NywgCi0gICAgODAsIDI1MywgMjA3LCAyMzMsIDQ2LCAyMTMsIDE3NSwgMjMwLCAxNTgsIDIzMCwgMTU5LCAyMjUsIDExOCwgMjI2LCAyMzAsIAotICAgIDIyOCwgNzUsIDIzMCwgMTU5LCAyMjUsIDExNiwgMjU0LCA5MCwgMiwgMjUyLCAxMjksIDI1MSwgMTAsIDIxMywgMTcyLCAKLSAgICAyNTEsIDEwLCAyMTYsIDI1NCwgMjIzLCAxNzMsIDIxMywgMTcxLCAyMTUsIDYwLCA5NywgMjUzLCAyNDcsIDI1MCwgMiwgOTcsIAotICAgIDIyLCAxNDAsIDIwNCwgMjUwLCAzNiwgMjUzLCAyNDcsIDI1MCwgMiwgOTcsIDIyLCAxNDAsIDIwNCwgMjUwLCAzNiwgMjUzLCAKLSAgICAyNDgsIDIsIDM3LCAxMjMsIDIyNiwgMTIwLCAyNTAsIDIsIDI0NiwgMTA0LCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCAzNiwgCi0gICAgMjUzLCAyNDcsIDI1NCwgODgsIDI0NiwgMTA0LCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCAzNiwgMjUzLCAyNDcsIDEyMSwgCi0gICAgMjUxLCAxMzgsIDg3LCAxMjUsIDI1MSwgMTM4LCA4NywgMjE5LCA3LCAyLCAyNTEsIDQsIDkxLCAyMTksIDYsIDIxOSwgNywgCi0gICAgMiwgMTIzLCAyMTksIDMxLCAyMTIsIDM1LCAyMTksIDcsIDIsIDEzNCwgMjE5LCAzMSwgMjEyLCAzNCwgMjUyLCAxMTUsIAotICAgIDI0NSwgMTcyLCAyMjUsIDI3LCAyMzMsIDQyLCAyMzEsIDIxMSwgMjQyLCAxODQsIDIyMiwgMjQ3LCAyMzEsIDIxMSwgMjQyLCAKLSAgICAxODQsIDIzMiwgMTUyLCAyLCAyMzUsIDIyNSwgMjI1LCAxOTksIDI1MCwgMCwgMjMyLCAxNTIsIDIsIDIzNCwgMTM4LCAyMzQsIAotICAgIDEzOCwgMjMyLCAxNTEsIDIwNCwgMjMyLCAxNTEsIDI1MiwgNDQsIDI1MiwgNDUsIDIsIDI1MSwgNCwgOTEsIDI1MSwgMTkwLCAKLSAgICAyMzIsIDIwNCwgODcsIDIyMywgMTc0LCAyNTEsIDg2LCAyNTIsIDE4NSwgMiwgMTQwLCA4MCwgNDgsIDI0NSwgMTQzLCAyLCAKLSAgICAxNDAsIDgwLCA0OCwgMjI2LCAxOTcsIDIsIDI0NSwgMzEsIDE2NCwgMiwgNDMsIDQ0LCA4MCwgNDgsIDIxOSwgMzksIDIsIAotICAgIDk3LCA4MCwgNDgsIDIxNiwgMTQsIDIsIDIxNCwgMTUzLCA4MCwgNDgsIDIyOCwgNzUsIDEyMywgMjE0LCAxODQsIDI0NSwgCi0gICAgMTkxLCA4NywgMjM0LCAxMzYsIDIxNiwgMjQ3LCAyMzUsIDIxOSwgMTYsIDMxLCA3LCA2LCAyMzMsIDksIDIzNSwgMjE5LCAKLSAgICAxNiwgMzEsIDcsIDQsIDIzMywgOSwgMjM1LCAyMTksIDE2LCAzMSwgMjI3LCAxOTksIDIzNSwgMjE5LCAxNiwgMzEsIDIxNywgCi0gICAgMTgzLCAyMzUsIDIxOSwgMTYsIDMxLCA3LCAyMzMsIDksIDI0NCwgOTYsIDI0NSwgMTcyLCAyMTYsIDksIDIxMSwgMTk5LCAKLSAgICAyNDIsIDIxLCAyMjcsIDE4MiwgMjIsIDI1MSwgMTk3LCAyNDEsIDY2LCAyMjUsIDUwLCAyMzAsIDIyNiwgMjE2LCAyNTUsIAotICAgIDI0OSwgMTE0LCAyNTIsIDE1OSwgMjE5LCAxMjUsIDIyNSwgOSwgMjE4LCAxNTcsIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgCi0gICAgMjM1LCAxMzEsIDE2LCAzMSwgMjUyLCA1NywgMjE1LCAyMjAsIDI0NSwgMTU2LCA4NSwgNDIsIDI1MSwgODYsIDcxLCA0MiwgCi0gICAgMjUxLCA4NiwgMjMzLCA4NSwgMjIzLCAxMTEsIDI1MCwgMzUsIDIzMywgODUsIDI1MSwgMjA4LCAyNTAsIDM1LCAyMzMsIDg1LCAKLSAgICAyMjYsIDE1NywgMjQ3LCAyNDgsIDIzMywgODUsIDI1MSwgMjA4LCAyNDcsIDI0OCwgNCwgMjI2LCAxNTcsIDI0NywgMjQ4LCAKLSAgICA0LCAyNTEsIDIwOCwgMjQ3LCAyNDgsIDIxNCwgMTYyLCAyMjMsIDExMSwgMjE1LCAyMjUsIDI0NiwgMTA1LCAyMjMsIDExMSwgCi0gICAgMjE1LCAyMjUsIDIxNCwgMTYyLCA0LCAyMjMsIDExMSwgMjE1LCAyMjUsIDI0NiwgMTA1LCA0LCAyMjMsIDExMSwgMjE1LCAKLSAgICAyMjUsIDM3LCAyNDksIDEzMSwgMjI0LCAyNTIsIDI0OSwgMTMxLCAyMjQsIDI1MywgMiwgMjQyLCAyNiwgNTEsIDI0OSwgCi0gICAgMTMxLCAyMjQsIDI1MiwgMjI4LCA0OSwgNDMsIDIyMCwgMTUzLCAyLCAxMzQsIDI0NywgMTE4LCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAxMjMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAxMTMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAxMzQsIAotICAgIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDExLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA4MSwgCi0gICAgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxOSwgMTI1LCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjIwLCAKLSAgICAxMjIsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDUsIDE5MywgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIAotICAgIDIyOCwgMjAwLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAyNDgsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgCi0gICAgMTkxLCAyNDUsIDE2OCwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNSwgNzcsIDIyNiwgMjQyLCAyNTAsIDQsIAotICAgIDI0NCwgMTkxLCAyMjYsIDE5MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA1NiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAKLSAgICAxNDAsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgNywgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA3OSwgMjUwLCA0LCAyNDQsIAotICAgIDE5MSwgMjE5LCAxMjEsIDI1MCwgNCwgMjQ0LCAxOTEsIDIyMCwgMTIxLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDUsIDE5MiwgCi0gICAgMjUwLCA0LCAyNDQsIDE5MSwgMjI4LCAxOTksIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNiwgMjQ2LCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAyNDUsIDE2NiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA3NSwgMjMwLCAxMTcsIDI0MywgMjMwLCAyMTYsIDM2LCAyMTYsIDIsIAotICAgIDIxOCwgMTQ4LCA2NCwgMjMyLCAyMzksIDIxOSwgMTcwLCA2NCwgMjM1LCAxMzIsIDIzMCwgMTA2LCAyNDIsIDEyNCwgMjQ0LCAKLSAgICAxOTAsIDI0MiwgMTI0LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjQ0LCAxOTEsIDIsIDIxNywgMTQsIDY0LCAKLSAgICAyMzUsIDUzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgCi0gICAgMjMwLCAxMTEsIDIyLCAyMTksIDc0LCAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMSwgMjIsIAotICAgIDI0OSwgMjMwLCAyMTcsIDI0NywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTEsIDIyLCAyMTYsIDEwNCwgCi0gICAgMjQ1LCAxMywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MiwgMjUsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyNDAsIDI0NywgCi0gICAgMjExLCAyMzMsIDI0NCwgMTkwLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjQ0LCAxOTEsIAotICAgIDIyMSwgMjE3LCAyNDgsIDYyLCAyNDQsIDMzLCAyMjMsIDg4LCAyNDQsIDE5MCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MSwgCi0gICAgMjI2LCAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjE4LCAzNCwgMjE5LCA3MywgMjQ0LCAxOTAsIDIyOSwgODcsIAotICAgIDI0NCwgMTkwLCAyNDUsIDIzLCAyNDQsIDE5MCwgMjE0LCAxODgsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjQ5LCAyMzAsIAotICAgIDIxNywgMjQ3LCAyMjUsIDE5MiwgMjQ0LCAxOTAsIDI0OSwgMjAxLCAyNDQsIDE5MCwgMjQ5LCAyMDIsIDI0NCwgMTkwLCAKLSAgICAyMzQsIDYyLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIxNiwgMTM3LCAxMTUsIDIzNCwgNjMsIDIzNCwgNjIsIDI0NCwgMTkxLCAKLSAgICAyLCAyMTksIDc0LCAyNDUsIDEzLCAyMzQsIDYyLCAyNDQsIDE5MSwgMiwgMjUwLCAwLCAyNDUsIDEzLCAyNDQsIDE5MSwgMiwgCi0gICAgMjE4LCA4OCwgMjE2LCAxOSwgMjQ0LCAxOTEsIDIsIDIxOCwgODgsIDIxNiwgMjAsIDIyLCAyMTEsIDIzMywgMjQ1LCAxNSwgCi0gICAgMjQ0LCAxOTEsIDIsIDIxOCwgODgsIDIxNiwgMjAsIDIyLCAyMTYsIDEwNCwgMjQ1LCAxMywgMjQ3LCAxOTIsIDI0NCwgMTkwLCAKLSAgICAyMTEsIDIwNCwgMjQ0LCAxOTAsIDI1NCwgMTA4LCAyNDQsIDE5MCwgMjI0LCAyMjcsIDI0NCwgMTkwLCAyNDksIDExNiwgCi0gICAgMjQ0LCAxOTAsIDIyNSwgMTcwLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIsIDIzMiwgMTI2LCA2NCwgMjE1LCAyMDQsIDI0NywgCi0gICAgMTkyLCAyNTEsIDg4LCAyMjMsIDg4LCAyNDQsIDE5MCwgMjQzLCAyMzksIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAKLSAgICAyNTQsIDEwNiwgMjQ0LCAxOTAsIDI0NCwgMTUyLCAyNDQsIDE5MCwgMjEyLCAyMCwgMjQ0LCAxOTAsIDIxOSwgOTEsIDI0NCwgCi0gICAgMTkwLCAyMTYsIDcxLCAyNDQsIDE5MCwgMjQyLCAxMjUsIDI0NCwgMTkwLCAyMzIsIDExNCwgMjQ5LCAxMTYsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjQwLCAyMDMsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIAotICAgIDExMSwgMjIsIDI0OSwgMjMwLCAyMTcsIDI0NywgMjQ0LCAxOTEsIDIyMSwgMTkwLCAyMzYsIDAsIDI0NCwgMTUzLCAyNTMsIAotICAgIDIxMywgMjQ0LCAxOTAsIDI0NCwgNDksIDI0NCwgMTkwLCAyMTksIDkyLCAyNDQsIDE5MCwgMjQ3LCAxNjUsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMjExLCAyMzAsIDIzMCwgMTEwLCAyNDQsIDE5MSwgMiwgMjMxLCA4NCwgMjMxLCAxNDQsIDI0MiwgMTI0LCAKLSAgICAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjE3LCAxNCwgCi0gICAgNjQsIDIzNSwgNTMsIDIxOSwgNzQsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjE5LCA3NCwgMjUwLCAKLSAgICAyMjUsIDI0NCwgMTkxLCAyLCAyNDEsIDIyNiwgMjQ1LCAxMywgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMTEsIDE5NiwgCi0gICAgMjE5LCA3NSwgMjM0LCA2MiwgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyNTAsIDAsIDI0NSwgMTMsIDIyNCwgMjI3LCAyNTAsIAotICAgIDIyNSwgMjQ0LCAxOTAsIDI0OSwgMTE2LCAyNTAsIDIyNSwgMjQ0LCAxOTAsIDIxMiwgMjAsIDI1MCwgMjI1LCAyNDQsIDE5MCwgCi0gICAgMjQ0LCAxOTEsIDIsIDIyOCwgNzUsIDI0MiwgMTYzLCAyNDMsIDM0LCAyNDQsIDE5MSwgMiwgMjI2LCAyMTUsIDI0MywgMzQsIAotICAgIDIyNSwgMTY4LCAyNTEsIDE2OCwgMjQ4LCA3NSwgMjIxLCAxNjksIDIzMCwgMTQ1LCAyNDEsIDIyOSwgMjMwLCAxNDUsIDIxOSwgCi0gICAgOCwgMjMwLCAxNDUsIDI0MiwgNSwgMjI1LCAxNjgsIDIyMywgMTU2LCAxMjMsIDI0MiwgMTUsIDIyNSwgMTY4LCAyMjMsIAotICAgIDE1NiwgMjUxLCAxNzgsIDI0MiwgMTEsIDIzNiwgMCwgMjUwLCAxNzksIDIyNSwgMTY4LCAyNDMsIDIzOCwgMjI1LCAxNjgsIAotICAgIDIsIDIyNCwgMjI3LCAyNDQsIDE5MCwgMjI1LCAxNjgsIDIsIDI0NCwgNDEsIDI0MiwgMTAsIDIyMiwgMjAzLCAyNDEsIDIxNCwgCi0gICAgMjE4LCAxNDMsIDIzMiwgMTQ5LCAyMjMsIDE2MiwgMjUwLCAyNDQsIDI0MSwgMTYyLCAyMTUsIDI0OCwgMjQxLCAxNjIsIAotICAgIDIxNSwgMjQ5LCAyLCAyNTEsIDExNCwgMjI4LCA1MywgMjE1LCAyNDgsIDIzMSwgMzIsIDE5MiwgMjIzLCAxNjMsIDIxOCwgCi0gICAgMTQ5LCAyMTUsIDI0NiwgMjE1LCAyNDcsIDI1MCwgMjQ0LCAyNTEsIDkyLCAyMjYsIDE5NCwgMjUxLCA5MiwgMjE1LCAyMDEsIAotICAgIDI1MSwgOTMsIDIxOCwgMTI5LCAyMzAsIDE4NywgMjU0LCAxMzAsIDI0NCwgOTcsIDI0NSwgMTM3LCAyMjQsIDI1NSwgMjUwLCAKLSAgICAyNDQsIDIyNiwgMTk0LCAyMjQsIDI1NSwgMjUwLCAyNDQsIDIxNywgMzIsIDIyNiwgMTk0LCAyMTcsIDMyLCAyNTMsIDE4MCwgCi0gICAgMjI2LCAxOTQsIDI1MywgMTgwLCAyMjMsIDExOCwgMjEzLCAyNDcsIDI0OCwgNTgsIDIxNSwgMTkyLCAyNTMsIDI0MiwgMjMyLCAKLSAgICAxMTcsIDIxNSwgMjU0LCAyMzAsIDEzOSwgMjMwLCAxMTYsIDIyMywgMTYxLCAyMTgsIDYsIDIyMywgMTYxLCAyMzAsIDExNiwgCi0gICAgMjUxLCAyOCwgMjU0LCAyMjksIDIxNSwgMjQ1LCAyMjAsIDE2LCAyMjIsIDE4MiwgMjE5LCAxLCAyMDMsIDIxNSwgMjUyLCAKLSAgICAyMzIsIDIzMCwgNjcsIDIxNSwgMjUyLCAyMzIsIDIzMCwgMjQ5LCAxOTAsIDUwLCAyMjQsIDI1NSwgMjUwLCAyMjksIDIyMywgCi0gICAgNDQsIDIzMiwgMjMwLCAyMTUsIDIyMiwgMjQ0LCA3NCwgMjI2LCAxOTcsIDIyNCwgMjM4LCAyNDcsIDEyMywgMjI4LCA3NSwgCi0gICAgMjQ1LCAxMjUsIDUwLCAyMTksIDcyLCA4NywgMjI4LCA3NSwgMjE5LCA3MiwgODcsIDIyNCwgMTIyLCAyMzIsIDE5MywgMjM2LCAKLSAgICAwLCAyMzUsIDE1NywgMjI1LCA0MSwgODcsIDI0NywgMTQ2LCAyMjgsIDUyLCAyMzIsIDE5MywgODcsIDIyNCwgMjMyLCAyMTIsIAotICAgIDQxLCA4NywgMjI4LCA2NiwgMjEyLCA0MSwgODcsIDI1MiwgMiwgMjI4LCA3NSwgMjUyLCAxLCAyNTIsIDAsIDIzMCwgMTE2LCAKLSAgICAyNTIsIDAsIDIyNSwgMjEzLCAyMjgsIDc1LCAyMjUsIDIxMiwgMjUwLCAxMDAsIDI0OSwgMTI0LCAyMzEsIDU2LCA4NywgCi0gICAgMjExLCAyMTgsIDg3LCAyMjMsIDU5LCAyNTIsIDE4NywgODcsIDIxNiwgMzcsIDIxMiwgNDEsIDI0OSwgMjUzLCAyMTksIAotICAgIDIzNCwgMjUyLCAxMTgsIDI1MiwgMTE2LCAyMjUsIDI0MiwgMjQ5LCAxNzcsIDI0OSwgODYsIDI1MiwgMTY5LCAyNTAsIDIyLCAKLSAgICA0MywgMjMyLCA5MCwgMTA4LCAxNiwgMzEsIDIyNCwgMywgMTA4LCAxNiwgMzEsIDI1NCwgMTkyLCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ0LCA5NiwgMTA4LCAxNiwgMzEsIDI0NSwgMjIzLCAxMDgsIDE2LCAzMSwgMjEyLCA0MCwgMTA4LCAxNiwgMzEsIDI1NCwgCi0gICAgNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMjMsIDEwNSwgMTA4LCAxNiwgMzEsIDI1NCwgNDQsIDIyMywgMTA0LCAxMDgsIAotICAgIDE2LCAzMSwgMjU0LCA0NCwgMjEzLCAxNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMTMsIDE0MiwgMTA4LCAxNiwgMzEsIAorICAgIDEzOSwgNCwgNjEsIDExLCAxMzksIDQsIDI1MywgMTY2LCAxMSwgMTM5LCA0LCAyNTEsIDc0LCAxMSwgMTM5LCA0LCAyNDksIAorICAgIDY4LCAxMSwgMTM5LCA0LCA3NiwgMTEsIDEzOSwgNCwgMjQ1LCAxNCwgMTEsIDEzOSwgNCwgMjQzLCAyMDksIDExLCAxMzksIAorICAgIDQsIDI0MiwgNjcsIDExLCAxMzksIDQsIDc0LCAxMSwgMTM5LCA0LCAyMzUsIDE1MCwgMTEsIDEzOSwgNCwgMjM1LCAyOSwgCisgICAgMTEsIDEzOSwgNCwgMTU2LCAxMSwgMTM5LCA0LCAxOTQsIDExLCAxMzksIDQsIDIzMCwgMzAsIDExLCAxMzksIDQsIDc4LCAKKyAgICAxMSwgMTM5LCA0LCAyMjYsIDEwOSwgMTEsIDEzOSwgNCwgMjI0LCA5OSwgMTEsIDEzOSwgNCwgMTUzLCAxMSwgMTM5LCA0LCAKKyAgICAyMjIsIDkzLCAxMSwgMTM5LCA0LCAyMTcsIDE1MywgMTEsIDEzOSwgNCwgNjksIDExLCAxMzksIDQsIDIxNCwgMTA1LCAxMSwgCisgICAgMTM5LCA0LCAyMTIsIDk4LCAxMSwgMTM5LCA0LCAyMTEsIDE3OCwgMTEsIDEzOSwgNCwgMjExLCAxMTcsIDExLCAxMzksIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMjMsIDEzMywgNiwgNjEsIDExLCAyMywgMTMzLCA2LCAyNTMsIDE2NiwgMTEsIDIzLCAxMzMsIDYsIAorICAgIDI1MSwgNzQsIDExLCAyMywgMTMzLCA2LCAyNDksIDY4LCAxMSwgMjMsIDEzMywgNiwgNzYsIDExLCAyMywgMTMzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDEzMywgNiwgMjQzLCAyMDksIDExLCAyMywgMTMzLCA2LCAyNDIsIDY3LCAxMSwgMjMsIDEzMywgCisgICAgNiwgNzQsIDExLCAyMywgMTMzLCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMjksIDExLCAyMywgMTMzLCA2LCAKKyAgICAxNTYsIDExLCAyMywgMTMzLCA2LCAxOTQsIDExLCAyMywgMTMzLCA2LCAyMzAsIDMwLCAxMSwgMjMsIDEzMywgNiwgNzgsIAorICAgIDExLCAyMywgMTMzLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAxMzMsIDYsIDIyNCwgOTksIDExLCAyMywgMTMzLCA2LCAxNTMsIAorICAgIDExLCAyMywgMTMzLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDEzMywgNiwgMjE3LCAxNTMsIDExLCAyMywgMTMzLCA2LCA2OSwgCisgICAgMTEsIDIzLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDEzMywgNiwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgCisgICAgMTc4LCAxMSwgMjMsIDEzMywgNiwgMjExLCAxMTcsIDExLCAyMywgMTMzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDYxLCAxMSwgMjMsIDEzMywgNCwgMjUzLCAxNjYsIDExLCAyMywgMTMzLCA0LCAyNTEsIDc0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjQ5LCA2OCwgMTEsIDIzLCAxMzMsIDQsIDc2LCAxMSwgMjMsIDEzMywgNCwgMjQ1LCAxNCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDI0MywgMjA5LCAxMSwgMjMsIDEzMywgNCwgMjQyLCA2NywgMTEsIDIzLCAxMzMsIDQsIDc0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjM1LCAxNTAsIDExLCAyMywgMTMzLCA0LCAyMzUsIDI5LCAxMSwgMjMsIDEzMywgNCwgMTU2LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMTk0LCAxMSwgMjMsIDEzMywgNCwgMjMwLCAzMCwgMTEsIDIzLCAxMzMsIDQsIDc4LCAxMSwgMjMsIDEzMywgNCwgMjI2LCAKKyAgICAxMDksIDExLCAyMywgMTMzLCA0LCAyMjQsIDk5LCAxMSwgMjMsIDEzMywgNCwgMTUzLCAxMSwgMjMsIDEzMywgNCwgMjIyLCAKKyAgICA5MywgMTEsIDIzLCAxMzMsIDQsIDIxNywgMTUzLCAxMSwgMjMsIDEzMywgNCwgNjksIDExLCAyMywgMTMzLCA0LCAyMTQsIAorICAgIDEwNSwgMTEsIDIzLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNCwgMjEwLCAxNTksIDExLCAzNSwgNiwgNjEsIDExLCAzNSwgNiwgMjUzLCAxNjYsIAorICAgIDExLCAzNSwgNiwgMjUxLCA3NCwgMTEsIDM1LCA2LCAyNDksIDY4LCAxMSwgMzUsIDYsIDc2LCAxMSwgMzUsIDYsIDI0NSwgCisgICAgMTQsIDExLCAzNSwgNiwgMjQzLCAyMDksIDExLCAzNSwgNiwgMjQyLCA2NywgMTEsIDM1LCA2LCA3NCwgMTEsIDM1LCA2LCAKKyAgICAyMzUsIDE1MCwgMTEsIDM1LCA2LCAyMzUsIDI5LCAxMSwgMzUsIDYsIDE1NiwgMTEsIDM1LCA2LCAxOTQsIDExLCAzNSwgNiwgCisgICAgMjMwLCAzMCwgMTEsIDM1LCA2LCA3OCwgMTEsIDM1LCA2LCAyMjYsIDEwOSwgMTEsIDM1LCA2LCAyMjQsIDk5LCAxMSwgMzUsIAorICAgIDYsIDE1MywgMTEsIDM1LCA2LCAyMjIsIDkzLCAxMSwgMzUsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDYsIDY5LCAxMSwgMzUsIAorICAgIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDYsIDIxMiwgOTgsIDExLCAzNSwgNiwgMjExLCAxNzgsIDExLCAzNSwgNiwgMjExLCAKKyAgICAxMTcsIDExLCAzNSwgNiwgMjEwLCAxNTksIDExLCAzNSwgNCwgNjEsIDExLCAzNSwgNCwgMjUzLCAxNjYsIDExLCAzNSwgNCwgCisgICAgMjUxLCA3NCwgMTEsIDM1LCA0LCAyNDksIDY4LCAxMSwgMzUsIDQsIDc2LCAxMSwgMzUsIDQsIDI0NSwgMTQsIDExLCAzNSwgCisgICAgNCwgMjQzLCAyMDksIDExLCAzNSwgNCwgMjQyLCA2NywgMTEsIDM1LCA0LCA3NCwgMTEsIDM1LCA0LCAyMzUsIDE1MCwgMTEsIAorICAgIDM1LCA0LCAyMzUsIDI5LCAxMSwgMzUsIDQsIDE1NiwgMTEsIDM1LCA0LCAxOTQsIDExLCAzNSwgNCwgMjMwLCAzMCwgMTEsIAorICAgIDM1LCA0LCA3OCwgMTEsIDM1LCA0LCAyMjYsIDEwOSwgMTEsIDM1LCA0LCAyMjQsIDk5LCAxMSwgMzUsIDQsIDE1MywgMTEsIAorICAgIDM1LCA0LCAyMjIsIDkzLCAxMSwgMzUsIDQsIDIxNywgMTUzLCAxMSwgMzUsIDQsIDY5LCAxMSwgMzUsIDQsIDIxNCwgMTA1LCAKKyAgICAxMSwgMzUsIDQsIDIxMiwgOTgsIDExLCAzNSwgNCwgMjExLCAxNzgsIDExLCAzNSwgNCwgMjExLCAxMTcsIDExLCAzNSwgNCwgCisgICAgMjEwLCAxNTksIDExLCAzNSwgMjMsIDYsIDYxLCAxMSwgMzUsIDIzLCA2LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgNiwgMjUxLCAKKyAgICA3NCwgMTEsIDM1LCAyMywgNiwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgNiwgNzYsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTQsIAorICAgIDExLCAzNSwgMjMsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCA2LCAyNDIsIDY3LCAxMSwgMzUsIDIzLCA2LCA3NCwgMTEsIAorICAgIDM1LCAyMywgNiwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDYsIDIzNSwgMjksIDExLCAzNSwgMjMsIDYsIDE1NiwgMTEsIDM1LCAKKyAgICAyMywgNiwgMTk0LCAxMSwgMzUsIDIzLCA2LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCA2LCA3OCwgMTEsIDM1LCAyMywgNiwgCisgICAgMjI2LCAxMDksIDExLCAzNSwgMjMsIDYsIDIyNCwgOTksIDExLCAzNSwgMjMsIDYsIDE1MywgMTEsIDM1LCAyMywgNiwgMjIyLCAKKyAgICA5MywgMTEsIDM1LCAyMywgNiwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDYsIDY5LCAxMSwgMzUsIDIzLCA2LCAyMTQsIDEwNSwgCisgICAgMTEsIDM1LCAyMywgNiwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTE3LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgNCwgNjEsIDExLCAzNSwgMjMsIDQsIDI1MywgMTY2LCAxMSwgCisgICAgMzUsIDIzLCA0LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCA0LCAyNDksIDY4LCAxMSwgMzUsIDIzLCA0LCA3NiwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjQ1LCAxNCwgMTEsIDM1LCAyMywgNCwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDQsIDI0MiwgNjcsIDExLCAzNSwgCisgICAgMjMsIDQsIDc0LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgNCwgMjM1LCAyOSwgMTEsIDM1LCAyMywgCisgICAgNCwgMTU2LCAxMSwgMzUsIDIzLCA0LCAxOTQsIDExLCAzNSwgMjMsIDQsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDQsIDc4LCAKKyAgICAxMSwgMzUsIDIzLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAyMywgNCwgMjI0LCA5OSwgMTEsIDM1LCAyMywgNCwgMTUzLCAxMSwgCisgICAgMzUsIDIzLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDIzLCA0LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgNCwgNjksIDExLCAzNSwgCisgICAgMjMsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA2LCA2MSwgMTEsIDM1LCAzMiwgCisgICAgNiwgMjUzLCAxNjYsIDExLCAzNSwgMzIsIDYsIDI1MSwgNzQsIDExLCAzNSwgMzIsIDYsIDI0OSwgNjgsIDExLCAzNSwgMzIsIAorICAgIDYsIDc2LCAxMSwgMzUsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzUsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAzMiwgNiwgCisgICAgMjQyLCA2NywgMTEsIDM1LCAzMiwgNiwgNzQsIDExLCAzNSwgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDMyLCA2LCAyMzUsIAorICAgIDI5LCAxMSwgMzUsIDMyLCA2LCAxNTYsIDExLCAzNSwgMzIsIDYsIDE5NCwgMTEsIDM1LCAzMiwgNiwgMjMwLCAzMCwgMTEsIAorICAgIDM1LCAzMiwgNiwgNzgsIDExLCAzNSwgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMzUsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzUsIAorICAgIDMyLCA2LCAxNTMsIDExLCAzNSwgMzIsIDYsIDIyMiwgOTMsIDExLCAzNSwgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDMyLCAKKyAgICA2LCA2OSwgMTEsIDM1LCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMzIsIDYsIAorICAgIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA2LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMzIsIAorICAgIDQsIDYxLCAxMSwgMzUsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDM1LCAzMiwgNCwgMjUxLCA3NCwgMTEsIDM1LCAzMiwgNCwgCisgICAgMjQ5LCA2OCwgMTEsIDM1LCAzMiwgNCwgNzYsIDExLCAzNSwgMzIsIDQsIDI0NSwgMTQsIDExLCAzNSwgMzIsIDQsIDI0MywgCisgICAgMjA5LCAxMSwgMzUsIDMyLCA0LCAyNDIsIDY3LCAxMSwgMzUsIDMyLCA0LCA3NCwgMTEsIDM1LCAzMiwgNCwgMjM1LCAxNTAsIAorICAgIDExLCAzNSwgMzIsIDQsIDIzNSwgMjksIDExLCAzNSwgMzIsIDQsIDE1NiwgMTEsIDM1LCAzMiwgNCwgMTk0LCAxMSwgMzUsIAorICAgIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzUsIDMyLCA0LCA3OCwgMTEsIDM1LCAzMiwgNCwgMjI2LCAxMDksIDExLCAzNSwgMzIsIAorICAgIDQsIDIyNCwgOTksIDExLCAzNSwgMzIsIDQsIDE1MywgMTEsIDM1LCAzMiwgNCwgMjIyLCA5MywgMTEsIDM1LCAzMiwgNCwgCisgICAgMjE3LCAxNTMsIDExLCAzNSwgMzIsIDQsIDY5LCAxMSwgMzUsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjEyLCAKKyAgICA5OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA0LCAyMTAsIAorICAgIDE1OSwgMTEsIDM1LCAyMywgMzIsIDYsIDYxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgMzIsIDYsIDc2LCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQyLCAKKyAgICA2NywgMTEsIDM1LCAyMywgMzIsIDYsIDc0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTU2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTk0LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNiwgMjMwLCAzMCwgMTEsIDM1LCAyMywgMzIsIDYsIDc4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAxMDksIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIyLCAKKyAgICA5MywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgNjksIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICA2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDMyLCA0LCA3NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgMTQsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0MiwgNjcsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICA3NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAyOSwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDE1NiwgMTEsIDM1LCAyMywgMzIsIDQsIDE5NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMzAsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCA3OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCA5OSwgCisgICAgMTEsIDM1LCAyMywgMzIsIDQsIDE1MywgMTEsIDM1LCAyMywgMzIsIDQsIDIyMiwgOTMsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDM1LCAyMywgMzIsIDQsIDY5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDExNywgCisgICAgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMwLCAxNDMsIDYsIDYxLCAxMSwgMjMwLCAxNDMsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMwLCAxNDMsIDYsIDI1MSwgNzQsIDExLCAyMzAsIDE0MywgNiwgMjQ5LCA2OCwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICA3NiwgMTEsIDIzMCwgMTQzLCA2LCAyNDUsIDE0LCAxMSwgMjMwLCAxNDMsIDYsIDI0MywgMjA5LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDI0MiwgNjcsIDExLCAyMzAsIDE0MywgNiwgNzQsIDExLCAyMzAsIDE0MywgNiwgMjM1LCAxNTAsIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjM1LCAyOSwgMTEsIDIzMCwgMTQzLCA2LCAxNTYsIDExLCAyMzAsIDE0MywgNiwgMTk0LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIzMCwgMzAsIDExLCAyMzAsIDE0MywgNiwgNzgsIDExLCAyMzAsIDE0MywgNiwgMjI2LCAxMDksIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjI0LCA5OSwgMTEsIDIzMCwgMTQzLCA2LCAxNTMsIDExLCAyMzAsIDE0MywgNiwgMjIyLCA5MywgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMTcsIDE1MywgMTEsIDIzMCwgMTQzLCA2LCA2OSwgMTEsIDIzMCwgMTQzLCA2LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTQzLCAKKyAgICA2LCAyMTIsIDk4LCAxMSwgMjMwLCAxNDMsIDYsIDIxMSwgMTc4LCAxMSwgMjMwLCAxNDMsIDYsIDIxMSwgMTE3LCAxMSwgCisgICAgMjMwLCAxNDMsIDYsIDIxMCwgMTU5LCAxMSwgMjMwLCAxNDMsIDQsIDYxLCAxMSwgMjMwLCAxNDMsIDQsIDI1MywgMTY2LCAKKyAgICAxMSwgMjMwLCAxNDMsIDQsIDI1MSwgNzQsIDExLCAyMzAsIDE0MywgNCwgMjQ5LCA2OCwgMTEsIDIzMCwgMTQzLCA0LCA3NiwgCisgICAgMTEsIDIzMCwgMTQzLCA0LCAyNDUsIDE0LCAxMSwgMjMwLCAxNDMsIDQsIDI0MywgMjA5LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDI0MiwgNjcsIDExLCAyMzAsIDE0MywgNCwgNzQsIDExLCAyMzAsIDE0MywgNCwgMjM1LCAxNTAsIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjM1LCAyOSwgMTEsIDIzMCwgMTQzLCA0LCAxNTYsIDExLCAyMzAsIDE0MywgNCwgMTk0LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIzMCwgMzAsIDExLCAyMzAsIDE0MywgNCwgNzgsIDExLCAyMzAsIDE0MywgNCwgMjI2LCAxMDksIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjI0LCA5OSwgMTEsIDIzMCwgMTQzLCA0LCAxNTMsIDExLCAyMzAsIDE0MywgNCwgMjIyLCA5MywgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDIzMCwgMTQzLCA0LCA2OSwgMTEsIDIzMCwgMTQzLCA0LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTQzLCAKKyAgICA0LCAyMTIsIDk4LCAxMSwgMjMwLCAxNDMsIDQsIDIxMSwgMTc4LCAxMSwgMjMwLCAxNDMsIDQsIDIxMSwgMTE3LCAxMSwgCisgICAgMjMwLCAxNDMsIDQsIDIxMCwgMTU5LCAxMSwgMzIsIDQsIDI0NywgMTI3LCA3NCwgMTEsIDMyLCA0LCAyNDcsIDEyNywgMjM1LCAKKyAgICAxNTAsIDExLCAyMywgNiwgMjU0LCAxNTEsIDExLCAyMywgNiwgMjUyLCAzNCwgMTEsIDIzLCA2LCAyNDMsIDExNCwgMTEsIAorICAgIDIzLCA2LCAyNDgsIDYyLCAxMSwgMjMsIDYsIDI0NSwgMTA4LCAxMSwgMjMsIDYsIDIxMCwgODUsIDExLCAyMywgNiwgMjQ1LCAKKyAgICA3MSwgMTEsIDIzLCA2LCAyMTYsIDE4MCwgMTEsIDIzLCA2LCAyMzUsIDE5MiwgMTEsIDIzLCA2LCAyMzQsIDIyOCwgMTEsIAorICAgIDIzLCA2LCAyMzMsIDEwNCwgMTEsIDIzLCA2LCAyMzAsIDEwNywgMTEsIDIzLCA2LCAyMjcsIDI0MiwgMTEsIDIzLCA2LCAKKyAgICAyMTEsIDE1NywgMTEsIDIzLCA2LCAyMjYsIDIwMywgMTEsIDIzLCA2LCAyMjUsIDExMSwgMTEsIDIzLCA2LCAyMjMsIDQwLCAKKyAgICAxMSwgMjMsIDYsIDIxNiwgMTgxLCA4NywgMTEsIDIzLCA2LCAyMTksIDE3OSwgMTEsIDIzLCA2LCAyMTcsIDQyLCAxMSwgMjMsIAorICAgIDYsIDIxNCwgMTU3LCAxMSwgMjMsIDYsIDIyNSwgMTM2LCAxMSwgMjMsIDYsIDI1MCwgMTE4LCAxMSwgMjMsIDYsIDIyNCwgCisgICAgMTY0LCAxMSwgMjMsIDYsIDIyNiwgMjA1LCAxMSwgMjMsIDIyOSwgMjI2LCAxMSwgMjMsIDQsIDI1NCwgMTUxLCAxMSwgMjMsIAorICAgIDQsIDI1MiwgMzQsIDExLCAyMywgNCwgMjQzLCAxMTQsIDExLCAyMywgNCwgMjQ4LCA2MiwgMTEsIDIzLCA0LCAyNDUsIDEwOCwgCisgICAgMTEsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDQsIDI0NSwgNzEsIDExLCAyMywgNCwgMjE2LCAxODAsIDExLCAyMywgNCwgCisgICAgMjM1LCAxOTIsIDExLCAyMywgNCwgMjM0LCAyMjgsIDExLCAyMywgNCwgMjMzLCAxMDQsIDExLCAyMywgNCwgMjMwLCAxMDcsIAorICAgIDExLCAyMywgNCwgMjI3LCAyNDIsIDExLCAyMywgNCwgMjExLCAxNTcsIDExLCAyMywgNCwgMjI2LCAyMDMsIDExLCAyMywgNCwgCisgICAgMjI1LCAxMTEsIDExLCAyMywgNCwgMjIzLCA0MCwgMTEsIDIzLCA0LCA0MCwgMjE5LCAxNzksIDExLCAyMywgNCwgMjE5LCAKKyAgICAxNzksIDExLCAyMywgNCwgMjE3LCA0MiwgMTEsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDIzLCA0LCAyMjUsIDEzNiwgMTEsIAorICAgIDIzLCA0LCAyNTAsIDExOCwgMTEsIDIzLCA0LCAyMjQsIDE2NCwgMTEsIDIzLCA0LCAyMjYsIDIwNSwgMTEsIDIzLCAyMjYsIAorICAgIDEsIDI0NywgMjQxLCAxMSwgMjMsIDI0NSwgMTA5LCA4NywgMTEsIDIzLCAyMTYsIDE4MSwgODcsIDExLCAyMywgMjM0LCAKKyAgICAyMjksIDg3LCAxMSwgMjMsIDIyNSwgMTM3LCA4NywgMTEsIDIzLCAyMjMsIDQxLCA4NywgMTEsIDIzLCAyMjUsIDExMiwgODcsIAorICAgIDExLCAzMiwgNiwgMjU0LCAxNTEsIDExLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDMyLCA2LCAyNDMsIDExNCwgMTEsIDMyLCA2LCAKKyAgICAyNDgsIDYyLCAxMSwgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMzIsIDYsIDIxMCwgODUsIDExLCAzMiwgNiwgMjQ1LCA3MSwgMTEsIAorICAgIDMyLCA2LCAyMTYsIDE4MCwgMTEsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDMyLCA2LCAyMzQsIDIyOCwgMTEsIDMyLCA2LCAKKyAgICAyMzMsIDEwNCwgMTEsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDMyLCA2LCAyMjcsIDI0MiwgMTEsIDMyLCA2LCAyMTEsIDE1NywgCisgICAgMTEsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDMyLCA2LCAyMjUsIDExMSwgMTEsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMzIsIDYsIAorICAgIDIxNiwgMTgxLCA4NywgMTEsIDMyLCA2LCAyMTksIDE3OSwgMTEsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMzIsIDYsIDIxNCwgCisgICAgMTU3LCAxMSwgMzIsIDYsIDIyNSwgMTM2LCAxMSwgMzIsIDYsIDI1MCwgMTE4LCAxMSwgMzIsIDYsIDIyNCwgMTY0LCAxMSwgCisgICAgMzIsIDYsIDIyNiwgMjA1LCAxMSwgMzIsIDIyOSwgMjI2LCAxMSwgMzIsIDQsIDI1NCwgMTUxLCAxMSwgMzIsIDQsIDI1MiwgCisgICAgMzQsIDExLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAzMiwgNCwgMjQ4LCA2MiwgMTEsIDMyLCA0LCAyNDUsIDEwOCwgMTEsIDMyLCAKKyAgICA0LCAyMTAsIDg1LCAxMSwgMzIsIDQsIDI0NSwgNzEsIDExLCAzMiwgNCwgMjE2LCAxODAsIDExLCAzMiwgNCwgMjM1LCAxOTIsIAorICAgIDExLCAzMiwgNCwgMjM0LCAyMjgsIDExLCAzMiwgNCwgMjMzLCAxMDQsIDExLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAzMiwgNCwgCisgICAgMjI3LCAyNDIsIDExLCAzMiwgNCwgMjExLCAxNTcsIDExLCAzMiwgNCwgMjI2LCAyMDMsIDExLCAzMiwgNCwgMjI1LCAxMTEsIAorICAgIDExLCAzMiwgNCwgMjIzLCA0MCwgMTEsIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzMiwgNCwgMjE5LCAxNzksIDExLCAzMiwgCisgICAgNCwgMjE3LCA0MiwgMTEsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDMyLCA0LCAyNTAsIAorICAgIDExOCwgMTEsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIDMyLCA0LCAyMjYsIDIwNSwgMTEsIDMyLCAyMjYsIDEsIDI0NywgMjQxLCAKKyAgICAxMSwgMzIsIDI0NSwgMTA5LCA4NywgMTEsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAzMiwgMjM0LCAyMjksIDg3LCAxMSwgMzIsIAorICAgIDIyNSwgMTM3LCA4NywgMTEsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDMyLCAyMjUsIDExMiwgODcsIDExLCAyMywgMzIsIDYsIAorICAgIDI1NCwgMTUxLCAxMSwgMjMsIDMyLCA2LCAyNTIsIDM0LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDExNCwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjQ4LCA2MiwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxMDgsIDExLCAyMywgMzIsIDYsIDIxMCwgODUsIDExLCAyMywgMzIsIDYsIAorICAgIDI0NSwgNzEsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgwLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjM0LCAyMjgsIDExLCAyMywgMzIsIDYsIDIzMywgMTA0LCAxMSwgMjMsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDIzLCAzMiwgCisgICAgNiwgMjI3LCAyNDIsIDExLCAyMywgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDIzLCAKKyAgICAzMiwgNiwgMjI1LCAxMTEsIDExLCAyMywgMzIsIDYsIDIyMywgNDAsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgxLCA4NywgMTEsIAorICAgIDIzLCAzMiwgNiwgMjE5LCAxNzksIDExLCAyMywgMzIsIDYsIDIxNywgNDIsIDExLCAyMywgMzIsIDYsIDIxNCwgMTU3LCAxMSwgCisgICAgMjMsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDIzLCAzMiwgNiwgMjUwLCAxMTgsIDExLCAyMywgMzIsIDYsIDIyNCwgMTY0LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDIzLCAzMiwgMjI5LCAyMjYsIDExLCAyMywgMzIsIDQsIDI1NCwgMTUxLCAKKyAgICAxMSwgMjMsIDMyLCA0LCAyNTIsIDM0LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDExNCwgMTEsIDIzLCAzMiwgNCwgMjQ4LCA2MiwgCisgICAgMTEsIDIzLCAzMiwgNCwgMjQ1LCAxMDgsIDExLCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAyMywgMzIsIDQsIDI0NSwgNzEsIAorICAgIDExLCAyMywgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE5MiwgMTEsIDIzLCAzMiwgNCwgMjM0LCAKKyAgICAyMjgsIDExLCAyMywgMzIsIDQsIDIzMywgMTA0LCAxMSwgMjMsIDMyLCA0LCAyMzAsIDEwNywgMTEsIDIzLCAzMiwgNCwgCisgICAgMjI3LCAyNDIsIDExLCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDIwMywgMTEsIDIzLCAzMiwgCisgICAgNCwgMjI1LCAxMTEsIDExLCAyMywgMzIsIDQsIDIyMywgNDAsIDExLCAyMywgMzIsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjE5LCAxNzksIDExLCAyMywgMzIsIDQsIDIxNywgNDIsIDExLCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDIzLCAzMiwgNCwgMjUwLCAxMTgsIDExLCAyMywgMzIsIDQsIDIyNCwgMTY0LCAxMSwgCisgICAgMjMsIDMyLCA0LCAyMjYsIDIwNSwgMTEsIDIzLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDIzLCAzMiwgMjQ1LCAxMDksIAorICAgIDg3LCAxMSwgMjMsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAyMywgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDIzLCAzMiwgMjI1LCAKKyAgICAxMzcsIDg3LCAxMSwgMjMsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDIzLCAzMiwgMjI1LCAxMTIsIDg3LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgNiwgMjUyLCAzNCwgMTEsIDM1LCAyMywgNiwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIAorICAgIDYsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNDUsIDcxLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgNiwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIAorICAgIDYsIDIzNCwgMjI4LCAxMSwgMzUsIDIzLCA2LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgNiwgMjMwLCAxMDcsIDExLCAzNSwgCisgICAgMjMsIDYsIDIyNywgMjQyLCAxMSwgMzUsIDIzLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNiwgMjI2LCAyMDMsIDExLCAKKyAgICAzNSwgMjMsIDYsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCA2LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MSwgODcsIAorICAgIDExLCAzNSwgMjMsIDYsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCA2LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDE1NywgCisgICAgMTEsIDM1LCAyMywgNiwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDYsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCA2LCAyMjQsIAorICAgIDE2NCwgMTEsIDM1LCAyMywgNiwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDIyOSwgMjI2LCAxMSwgMzUsIDIzLCA0LCAyNTQsIAorICAgIDE1MSwgMTEsIDM1LCAyMywgNCwgMjUyLCAzNCwgMTEsIDM1LCAyMywgNCwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIDQsIDI0OCwgCisgICAgNjIsIDExLCAzNSwgMjMsIDQsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCA0LCAyNDUsIAorICAgIDcxLCAxMSwgMzUsIDIzLCA0LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgNCwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDQsIDIzNCwgCisgICAgMjI4LCAxMSwgMzUsIDIzLCA0LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgNCwgMjMwLCAxMDcsIDExLCAzNSwgMjMsIDQsIAorICAgIDIyNywgMjQyLCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNCwgMjI2LCAyMDMsIDExLCAzNSwgMjMsIAorICAgIDQsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCA0LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzNSwgCisgICAgMjMsIDQsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCA0LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAKKyAgICAyMywgNCwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDQsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCA0LCAyMjQsIDE2NCwgMTEsIAorICAgIDM1LCAyMywgNCwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAzNSwgMjMsIDI0NSwgMTA5LCAKKyAgICA4NywgMTEsIDM1LCAyMywgMjE2LCAxODEsIDg3LCAxMSwgMzUsIDIzLCAyMzQsIDIyOSwgODcsIDExLCAzNSwgMjMsIDIyNSwgCisgICAgMTM3LCA4NywgMTEsIDM1LCAyMywgMjIzLCA0MSwgODcsIDExLCAzNSwgMjMsIDIyNSwgMTEyLCA4NywgMTEsIDM1LCAyMywgCisgICAgMzIsIDYsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMTE0LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgNzEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM0LCAyMjgsIDExLCAzNSwgMjMsIDMyLCA2LCAKKyAgICAyMzMsIDEwNCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMCwgMTA3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI3LCAyNDIsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMjAzLCAxMSwgMzUsIDIzLCAzMiwgNiwgCisgICAgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODEsIDg3LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MCwgMTE4LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjI0LCAxNjQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDM1LCAyMywgMzIsIAorICAgIDIyOSwgMjI2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTIsIDM0LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA3MSwgMTEsIDM1LCAKKyAgICAyMywgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzQsIAorICAgIDIyOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMywgMTA0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCAyMjcsIDI0MiwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAKKyAgICAyMDMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyMywgNDAsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgCisgICAgNDIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMjUwLCAxMTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgCisgICAgMjA1LCAxMSwgMzUsIDIzLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDM1LCAyMywgMzIsIDI0NSwgMTA5LCA4NywgMTEsIAorICAgIDM1LCAyMywgMzIsIDIxNiwgMTgxLCA4NywgMTEsIDM1LCAyMywgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDM1LCAyMywgMzIsIAorICAgIDIyNSwgMTM3LCA4NywgMTEsIDM1LCAyMywgMzIsIDIyMywgNDEsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAxMTIsIDg3LCAKKyAgICAxMSwgMjMsIDYsIDI0NywgMjM1LCAxMSwgMjMsIDQsIDI0NywgMjM1LCAxMSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMjMsIAorICAgIDIxLCAxMTEsIDExLCAyMywgMjEsIDEwNSwgMTEsIDIzLCAyMSwgMTU4LCAxMSwgMjMsIDIxLCAxNjEsIDExLCAyMywgMjEsIAorICAgIDE5MCwgMTEsIDIzLCAyMSwgMTk1LCAxMSwgMjMsIDIxLCAxOTksIDExLCAyMywgMjEsIDE5NiwgMTEsIDIzLCAyMSwgMjAxLCAKKyAgICAxMSwgMTM5LCAyMSwgMjEwLCA4NiwgMTEsIDEzOSwgMjEsIDExMSwgMTEsIDEzOSwgMjEsIDEwNSwgMTEsIDEzOSwgMjEsIAorICAgIDE1OCwgMTEsIDEzOSwgMjEsIDE2MSwgMTEsIDEzOSwgMjEsIDE5MCwgMTEsIDEzOSwgMjEsIDE5NSwgMTEsIDEzOSwgMjEsIAorICAgIDE5OSwgMTEsIDEzOSwgMjEsIDE5NiwgMTEsIDEzOSwgMjEsIDIwMSwgMTEsIDM1LCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMSwgCisgICAgMTExLCAxMSwgMzUsIDIxLCAxMDUsIDExLCAzNSwgMjEsIDE1OCwgMTEsIDM1LCAyMSwgMTYxLCAxMSwgMzUsIDIxLCAxOTAsIAorICAgIDExLCAzNSwgMjEsIDE5NSwgMTEsIDM1LCAyMSwgMTk5LCAxMSwgMzUsIDIxLCAxOTYsIDExLCAzNSwgMjEsIDIwMSwgMTEsIAorICAgIDM1LCAyMywgMjEsIDIxMCwgODYsIDExLCAzNSwgMjMsIDIxLCAxMTEsIDExLCAzNSwgMjMsIDIxLCAxMDUsIDExLCAzNSwgCisgICAgMjMsIDIxLCAxNTgsIDExLCAzNSwgMjMsIDIxLCAxNjEsIDExLCAzNSwgMjMsIDIxLCAxOTAsIDExLCAzNSwgMjMsIDIxLCAKKyAgICAxOTUsIDExLCAzNSwgMjMsIDIxLCAxOTksIDExLCAzNSwgMjMsIDIxLCAxOTYsIDExLCAzNSwgMjMsIDIxLCAyMDEsIDExLCAKKyAgICAyMzAsIDE0MywgMjEsIDIxMCwgODYsIDExLCAyMzAsIDE0MywgMjEsIDExMSwgMTEsIDIzMCwgMTQzLCAyMSwgMTA1LCAxMSwgCisgICAgMjMwLCAxNDMsIDIxLCAxNTgsIDExLCAyMzAsIDE0MywgMjEsIDE2MSwgMTEsIDIzMCwgMTQzLCAyMSwgMTkwLCAxMSwgMjMwLCAKKyAgICAxNDMsIDIxLCAxOTUsIDExLCAyMzAsIDE0MywgMjEsIDE5OSwgMTEsIDIzMCwgMTQzLCAyMSwgMTk2LCAxMSwgMjMwLCAxNDMsIAorICAgIDIxLCAyMDEsIDksIDExLCAyNTQsIDE3OSwgOSwgMTEsIDI1MiwgNjIsIDksIDExLCAyMzUsIDEyOSwgOSwgMTEsIDI0OCwgCisgICAgMjAzLCA5LCAxMSwgMjEyLCAzMCwgOSwgMTEsIDIxMCwgMTA4LCA5LCAxMSwgMjQyLCA0NCwgOSwgMTEsIDIxNywgODEsIDksIAorICAgIDExLCAyMTEsIDQzLCA5LCAxMSwgMjM1LCAwLCA5LCAxMSwgMjMzLCAxMDgsIDksIDExLCAyMzEsIDgzLCA5LCAxMSwgMjI4LCAKKyAgICA2NywgOSwgMTEsIDIyMSwgMTY4LCA5LCAxMSwgMjU0LCAyMDUsIDksIDExLCAyNDQsIDE1MCwgOSwgMTEsIDIyMiwgMjgsIDksIAorICAgIDExLCAyMjQsIDg0LCA5LCAxMSwgMjIzLCA5OCwgOSwgMTEsIDIyMCwgNjEsIDksIDExLCAyMTcsIDgsIDksIDExLCAyMTYsIAorICAgIDE5MywgOSwgMTEsIDIzNCwgMTM1LCA5LCAxMSwgMjE2LCAyMDMsIDksIDExLCAyNDgsIDIyNCwgOSwgMTEsIDIxMCwgMTExLCAKKyAgICA5LCAxMSwgMjQyLCAyNTEsIDksIDExLCAyNDcsIDEyNywgMjUyLCA2MiwgOSwgMTEsIDI0NywgMTI3LCAyMjgsIDY3LCA5LCAKKyAgICAxMSwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxMSwgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDExLCA2NSwgMjUyLCA2MiwgOSwgCisgICAgMTEsIDY1LCAyMzUsIDEyOSwgOSwgMTEsIDY1LCAyNDEsIDIyNSwgOSwgMTEsIDY1LCAyNDIsIDQ0LCA5LCAxMSwgNjUsIAorICAgIDIxMSwgNDMsIDksIDExLCA2NSwgMjM1LCAwLCA5LCAxMSwgNjUsIDIzMywgMTA4LCA5LCAxMSwgNjUsIDIzMSwgODMsIDksIAorICAgIDExLCA2NSwgMjI4LCA2NywgOSwgMTEsIDY1LCAyMjEsIDE2OCwgOSwgMTEsIDY1LCAyNTQsIDIwNSwgOSwgMTEsIDY1LCAKKyAgICAyNDQsIDE1MCwgOSwgMTEsIDY1LCAyMjIsIDI4LCA5LCAxMSwgNjUsIDIyNCwgODQsIDksIDExLCA2NSwgMjIwLCA2MSwgOSwgCisgICAgMTEsIDY1LCAyMTcsIDgsIDksIDExLCA2NSwgMjE2LCAxOTMsIDksIDExLCA2NSwgMjM0LCAxMzUsIDksIDExLCA2NSwgMjQ4LCAKKyAgICAyMjQsIDksIDExLCA2NSwgMjQyLCAyNTEsIDksIDExLCAyMTcsIDc3LCAyMzUsIDEyOSwgOSwgMTEsIDIxNywgNzcsIDI0MiwgCisgICAgNDQsIDksIDExLCAyMTcsIDc3LCAyMTEsIDQzLCA5LCAxMSwgMjE3LCA3NywgMjMzLCAxMDgsIDksIDExLCAyMTcsIDc3LCAKKyAgICAyMjgsIDY3LCA5LCAxMSwgMjE3LCA3NywgMjIxLCAxNjgsIDksIDExLCAyMTcsIDc3LCAyNTQsIDIwNSwgOSwgMTEsIDIxNywgCisgICAgNzcsIDIyMiwgMjgsIDksIDExLCAyMTcsIDc3LCAyMjQsIDg0LCA5LCAxMSwgMjE3LCA3NywgMjIwLCA2MSwgOSwgMTEsIAorICAgIDIxNywgNzcsIDIzNCwgMTM1LCA5LCAxMSwgMjE3LCA3NywgMjQ4LCAyMjQsIDksIDExLCAyMTcsIDc3LCAyNDIsIDI1MSwgOSwgCisgICAgMTEsIDIxNywgNzcsIDI0NywgMTI3LCAyMjgsIDY3LCA5LCAxMSwgMjE3LCA3NywgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDExLCAKKyAgICAyMTgsIDExMiwgMjUyLCA2MiwgOSwgMTEsIDIxOCwgMTEyLCAyMzUsIDEyOSwgOSwgMTEsIDIxOCwgMTEyLCAyNDEsIDIyNSwgCisgICAgOSwgMTEsIDIxOCwgMTEyLCAyNDIsIDQ0LCA5LCAxMSwgMjE4LCAxMTIsIDIxNywgODEsIDksIDExLCAyMTgsIDExMiwgMjExLCAKKyAgICA0MywgOSwgMTEsIDIxOCwgMTEyLCAyMzUsIDAsIDksIDExLCAyMTgsIDExMiwgMjMxLCA4MywgOSwgMTEsIDIxOCwgMTEyLCAKKyAgICAyMjgsIDY3LCA5LCAxMSwgMjE4LCAxMTIsIDIyMSwgMTY4LCA5LCAxMSwgMjE4LCAxMTIsIDI1NCwgMjA1LCA5LCAxMSwgCisgICAgMjE4LCAxMTIsIDI0NCwgMTUwLCA5LCAxMSwgMjE4LCAxMTIsIDIyMiwgMjgsIDksIDExLCAyMTgsIDExMiwgMjI0LCA4NCwgCisgICAgOSwgMTEsIDIxOCwgMTEyLCAyMjAsIDYxLCA5LCAxMSwgMjE4LCAxMTIsIDIxNywgOCwgOSwgMTEsIDIxOCwgMTEyLCAyMTYsIAorICAgIDE5MywgOSwgMTEsIDIxOCwgMTEyLCAyMzQsIDEzNSwgOSwgMTEsIDIxOCwgMTEyLCAyNDgsIDIyNCwgOSwgMTEsIDIxOCwgCisgICAgMTEyLCAyMTAsIDExMSwgOSwgMTEsIDIxOCwgMTEyLCAyNDIsIDI1MSwgOSwgMTEsIDIxOCwgMTEyLCAyNDcsIDEyNywgMjUyLCAKKyAgICA2MiwgOSwgMTEsIDIxOCwgMTEyLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDExLCAyMzIsIDEyOCwgMjU0LCAxNzksIDksIAorICAgIDExLCAyMzIsIDEyOCwgMjUyLCA2MiwgOSwgMTEsIDIzMiwgMTI4LCAyMzUsIDEyOSwgOSwgMTEsIDIzMiwgMTI4LCAyNDgsIAorICAgIDIwMywgOSwgMTEsIDIzMiwgMTI4LCAyNDEsIDIyNSwgOSwgMTEsIDIzMiwgMTI4LCAyMTIsIDMwLCA5LCAxMSwgMjMyLCAKKyAgICAxMjgsIDIxMCwgMTA4LCA5LCAxMSwgMjMyLCAxMjgsIDI0MiwgNDQsIDksIDExLCAyMzIsIDEyOCwgMjE3LCA4MSwgOSwgMTEsIAorICAgIDIzMiwgMTI4LCAyMTEsIDQzLCA5LCAxMSwgMjMyLCAxMjgsIDIzMywgMTA4LCA5LCAxMSwgMjMyLCAxMjgsIDIzMSwgODMsIAorICAgIDksIDExLCAyMzIsIDEyOCwgMjI4LCA2NywgOSwgMTEsIDIzMiwgMTI4LCAyMjEsIDE2OCwgOSwgMTEsIDIzMiwgMTI4LCAKKyAgICAyNTQsIDIwNSwgOSwgMTEsIDIzMiwgMTI4LCAyNDQsIDE1MCwgOSwgMTEsIDIzMiwgMTI4LCAyMjIsIDI4LCA5LCAxMSwgCisgICAgMjMyLCAxMjgsIDIyNCwgODQsIDksIDExLCAyMzIsIDEyOCwgMjIzLCA5OCwgOSwgMTEsIDIzMiwgMTI4LCAyMjAsIDYxLCA5LCAKKyAgICAxMSwgMjMyLCAxMjgsIDIxNywgOCwgOSwgMTEsIDIzMiwgMTI4LCAyMTYsIDE5MywgOSwgMTEsIDIzMiwgMTI4LCAyMzQsIAorICAgIDEzNSwgOSwgMTEsIDIzMiwgMTI4LCAyMTYsIDIwMywgOSwgMTEsIDIzMiwgMTI4LCAyNDgsIDIyNCwgOSwgMTEsIDIzMiwgCisgICAgMTI4LCAyMTAsIDExMSwgOSwgMTEsIDIzMiwgMTI4LCAyNDIsIDI1MSwgOSwgMTEsIDEzOSwgMjUyLCA2MiwgOSwgMTEsIAorICAgIDEzOSwgMjM1LCAxMjksIDksIDExLCAxMzksIDI0OCwgMjAzLCA5LCAxMSwgMTM5LCAyMTIsIDMwLCA5LCAxMSwgMTM5LCAKKyAgICAyMTAsIDEwOCwgOSwgMTEsIDEzOSwgMjQyLCA0NCwgOSwgMTEsIDEzOSwgMjE3LCA4MSwgOSwgMTEsIDEzOSwgMjExLCA0MywgCisgICAgOSwgMTEsIDEzOSwgMjMzLCAxMDgsIDksIDExLCAxMzksIDIzMSwgODMsIDksIDExLCAxMzksIDIyOCwgNjcsIDksIDExLCAKKyAgICAxMzksIDIyMSwgMTY4LCA5LCAxMSwgMTM5LCAyNTQsIDIwNSwgOSwgMTEsIDEzOSwgMjQ0LCAxNTAsIDksIDExLCAxMzksIAorICAgIDIyMiwgMjgsIDksIDExLCAxMzksIDIyNCwgODQsIDksIDExLCAxMzksIDIyMywgOTgsIDksIDExLCAxMzksIDIyMCwgNjEsIAorICAgIDksIDExLCAxMzksIDIxNywgOCwgOSwgMTEsIDEzOSwgMjE2LCAxOTMsIDksIDExLCAxMzksIDIzNCwgMTM1LCA5LCAxMSwgCisgICAgMTM5LCAyMTYsIDIwMywgOSwgMTEsIDEzOSwgMjQ4LCAyMjQsIDksIDExLCAxMzksIDIxMCwgMTExLCA5LCAxMSwgMTM5LCAKKyAgICAyNDIsIDI1MSwgOSwgMTEsIDIyNiwgMTcyLCA2NiwgMiwgMTIyLCAyLCAyMTcsIDQ0LCA5LCAxMSwgMjI2LCAxNzIsIDEyMiwgCisgICAgMiwgMjQ4LCAyMDMsIDIzMSwgMjEwLCA4NiwgMjQ1LCAyMjgsIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIxOSwgMzAsIAorICAgIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIxMiwgOSwgMjExLCAyMzksIDIzMSwgMjEwLCA4NiwgMjI4LCA2MSwgMjExLCAKKyAgICAyMzksIDIzMSwgMjEwLCA4NiwgMjIzLCAxMTQsIDI0NiwgMTA0LCAyMzEsIDIxMCwgODYsIDI0MiwgMTM0LCAyNDYsIDEwNCwgCisgICAgMjMxLCAyMTAsIDg2LCA3MSwgMjQ2LCAxMDQsIDIzMSwgMjEwLCA4NiwgMTIzLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCAKKyAgICA4NiwgMTEzLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMTM0LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ0LCAxOSwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDI0NCwgODksIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMTksIDEyNywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDIyMCwgMTI0LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCAKKyAgICA4NiwgMjQ1LCAyMDEsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MCwgMTQ5LCAyMzEsIAorICAgIDIxMCwgODYsIDEyMywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDExMywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgCisgICAgODYsIDEzNCwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDI0NCwgMTksIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDg5LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMjE5LCAxMjcsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIAorICAgIDg2LCAyMjAsIDEyNCwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDI0NSwgMjAxLCA2NCwgMjUyLCAxNjEsIDIzMSwgCisgICAgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAxMjMsIDY0LCAyNTAsIDQyLCAyMzEsIAorICAgIDIxMCwgODYsIDExMywgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMTM0LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDE5LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyNDQsIDg5LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMTksIDEyNywgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjIwLCAxMjQsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDI0NSwgMjAxLCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjI1LCAyOCwgMjMxLCAyMTAsIDg2LCAyMjYsIDE2MCwgMjMxLCAyMTAsIDg2LCAyNTIsIDE2MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTAsIDc4LCAyMzEsIDIxMCwgODYsIDIxOCwgMjQxLCAyMzEsIDIxMCwgODYsIDIxOCwgNDAsIDIzMSwgMjEwLCA4NiwgCisgICAgMjUzLCAxODcsIDIzMSwgMjEwLCA4NiwgMjExLCAyMzIsIDIzMSwgMjEwLCA4NiwgMjM1LCA2OCwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTIsIDE5MiwgMTMxLCA4NiwgMjAzLCAyNTIsIDE5MiwgMTMxLCA4NiwgMjQxLCA1MCwgMTMxLCA4NiwgMjQxLCA0OSwgCisgICAgMTMxLCA4NiwgMjQxLCA0OCwgMTMxLCA4NiwgMjQxLCA0NywgMTMxLCA4NiwgMjQxLCA0NiwgMTMxLCA4NiwgMjQxLCA0NSwgCisgICAgMTMxLCA4NiwgMjQxLCA0NCwgMTMxLCA4NiwgMjQxLCA0MywgMTMxLCA4NiwgMjQxLCA0MiwgMTMxLCA4NiwgMjQxLCA0MSwgCisgICAgMTMxLCA4NiwgMjQxLCA0MCwgMTMxLCA4NiwgMjQxLCAzOSwgMTMxLCA4NiwgMjQxLCAzOCwgMTMxLCA4NiwgMjQxLCAzNywgCisgICAgMTMxLCA4NiwgMjQxLCAzNiwgMTMxLCA4NiwgMjQxLCAzNSwgMTMxLCA4NiwgMjQxLCAzNCwgMTMxLCA4NiwgMjQxLCAzMywgCisgICAgMTMxLCA4NiwgMjQxLCAzMiwgMTMxLCA4NiwgMjQxLCAzMSwgMTMxLCA4NiwgMjQxLCAzMCwgMTMxLCA4NiwgMjQxLCAyOSwgCisgICAgMTMxLCA4NiwgMjQxLCAyOCwgMTMxLCA4NiwgMjQxLCAyNywgMTMxLCA4NiwgMjQxLCAyNiwgMTMxLCA4NiwgMjQxLCAyNSwgCisgICAgMTMxLCA4NiwgMjQxLCAyNCwgMTMxLCA4NiwgMjQxLCAyMywgMTMxLCA4NiwgMjQxLCAyMiwgMTMxLCA4NiwgMjQxLCAyMSwgCisgICAgMTMxLCA4NiwgMjQxLCAyMCwgMTMxLCA4NiwgMjQxLCAxOSwgMTMxLCA4NiwgMjQxLCAxOCwgMTMxLCA4NiwgMjQxLCAxNywgCisgICAgMTMxLCA4NiwgMjQxLCAxNiwgMTMxLCA4NiwgMjQxLCAxNSwgMTMxLCA4NiwgMjQxLCAxNCwgMTMxLCA4NiwgMjQxLCAxMywgCisgICAgMTMxLCA4NiwgMjQxLCAxMiwgMTMxLCA4NiwgMjQxLCAxMSwgMTMxLCA4NiwgMjQxLCAxMCwgMTMxLCA4NiwgMjQxLCA5LCAKKyAgICAxMzEsIDg2LCAyNDEsIDgsIDEzMSwgODYsIDI0MSwgNywgMTMxLCA4NiwgMjQxLCA2LCAxMzEsIDg2LCAyNDEsIDUsIDEzMSwgCisgICAgODYsIDI0MSwgNCwgMTMxLCA4NiwgMjQxLCAzLCAxMzEsIDg2LCAyNDEsIDIsIDEzMSwgODYsIDY3LCAyNTIsIDE5MiwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMzgsIDEzMSwgODYsIDIxMywgMjM3LCAxMzEsIDg2LCAyMTMsIDIzNiwgMTMxLCA4NiwgMjEzLCAyMzUsIAorICAgIDEzMSwgODYsIDIxMywgMjM0LCAxMzEsIDg2LCAyMTMsIDIzMywgMTMxLCA4NiwgMjEzLCAyMzIsIDEzMSwgODYsIDIxMywgCisgICAgMjMxLCAxMzEsIDg2LCAyMTMsIDIzMCwgMTMxLCA4NiwgMjEzLCAyMjksIDEzMSwgODYsIDIxMywgMjI4LCAxMzEsIDg2LCAKKyAgICAyMTMsIDIyNywgMTMxLCA4NiwgMjEzLCAyMjYsIDEzMSwgODYsIDIxMywgMjI1LCAxMzEsIDg2LCAyMTMsIDIyNCwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMjMsIDEzMSwgODYsIDIxMywgMjIyLCAxMzEsIDg2LCAyMTMsIDIyMSwgMTMxLCA4NiwgMjEzLCAyMjAsIAorICAgIDEzMSwgODYsIDIxMywgMjE5LCAxMzEsIDg2LCAyMTMsIDIxOCwgMTMxLCA4NiwgMjEzLCAyMTcsIDEzMSwgODYsIDIxMywgCisgICAgMjE2LCAxMzEsIDg2LCAyMTMsIDIxNSwgMTMxLCA4NiwgMjEzLCAyMTQsIDEzMSwgODYsIDIxMywgMjEzLCAxMzEsIDg2LCAKKyAgICAyMTMsIDIxMiwgMTMxLCA4NiwgMjEzLCAyMTEsIDEzMSwgODYsIDIxMywgMjEwLCAxMzEsIDg2LCAyMTMsIDIwOSwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMDgsIDEzMSwgODYsIDIxMywgMjA3LCAxMzEsIDg2LCAyMTMsIDIwNiwgMTMxLCA4NiwgMjEzLCAyMDUsIAorICAgIDEzMSwgODYsIDIxMywgMjA0LCAxMzEsIDg2LCAyMTMsIDIwMywgMTMxLCA4NiwgMjEzLCAyMDIsIDEzMSwgODYsIDIxMywgCisgICAgMjAxLCAxMzEsIDg2LCAyMTMsIDIwMCwgMTMxLCA4NiwgMjEzLCAxOTksIDEzMSwgODYsIDIxMywgMTk4LCAxMzEsIDg2LCAKKyAgICAyMTMsIDE5NywgMTMxLCA4NiwgMjEzLCAxOTYsIDEzMSwgODYsIDIxMywgMTk1LCAxMzEsIDg2LCAyMTMsIDE5NCwgMTMxLCAKKyAgICA4NiwgMjEzLCAxOTMsIDEzMSwgODYsIDIxMywgMTkyLCAxMzEsIDg2LCAyMTMsIDE5MSwgMTMxLCA4NiwgMjEzLCAxOTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTIsIDE5MiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyMTksIDE3LCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMTEzLCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDIxOSwgMTcsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAKKyAgICAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgCisgICAgMjIwLCAxMjQsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyMTksIAorICAgIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAzNywgCisgICAgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDIzNCwgODUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMTEzLCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyNDEsIDIzMiwgMjI1LCAKKyAgICAzNiwgMjUwLCAyNTEsIDI0NCwgMTksIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAyNDEsIAorICAgIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjAsIAorICAgIDEyNCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIDI0OSwgNjQsIDI0MSwgCisgICAgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgCisgICAgMzcsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDIzNCwgODUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDcsIDI1NSwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDExMywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIAorICAgIDg5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjIwLCAxMjQsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAKKyAgICAyNDksIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMzQsIDM3LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDg1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCA4NSwgCisgICAgMjM1LCA2OCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDExMywgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyNDQsIDE5LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgMjQ5LCAyNTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjIwLCAxMjQsIAorICAgIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMjgsIDIwNSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyNDksIDI1MCwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDM3LCAKKyAgICA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMzQsIDg1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCA3MSwgMjM1LCA2OCwgMjEsIDIxMCwgODcsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDIxMCwgODcsIDI0OSwgMjI3LCAyMSwgMTIzLCAyNDksIDIyNywgMjEsIDExMywgCisgICAgMjQ5LCAyMjcsIDIxLCAxMzQsIDI0OSwgMjI3LCAyMSwgMjQ0LCAxOSwgMjQ5LCAyMjcsIDIxLCAyNDQsIDg5LCAyNDksIAorICAgIDIyNywgMjEsIDIxOSwgMTI3LCAyNDksIDIyNywgMjEsIDIyMCwgMTI0LCAyNDksIDIyNywgMjEsIDI0NSwgMjAxLCAyNDksIAorICAgIDIyNywgMjEsIDIyOCwgMjA1LCAyNDksIDIyNywgODgsIDcsIDYsIDEsIDYxLCA4OCwgNywgNiwgMSwgMjUzLCAxNjYsIDg4LCAKKyAgICA3LCA2LCAxLCAyNTEsIDc0LCA4OCwgNywgNiwgMSwgMjQ5LCA2OCwgODgsIDcsIDYsIDEsIDc2LCA4OCwgNywgNiwgMSwgCisgICAgMjQ1LCAxNCwgODgsIDcsIDYsIDEsIDI0MywgMjA5LCA4OCwgNywgNiwgMSwgMjQyLCA2NywgODgsIDcsIDYsIDEsIDc0LCAKKyAgICA4OCwgNywgNiwgMSwgMjM1LCAxNTAsIDg4LCA3LCA2LCAxLCAyMzUsIDI5LCA4OCwgNywgNiwgMSwgMTU2LCA4OCwgNywgNiwgCisgICAgMSwgMTk0LCA4OCwgNywgNiwgMSwgMjMwLCAzMCwgODgsIDcsIDYsIDEsIDc4LCA4OCwgNywgNiwgMSwgMjI2LCAxMDksIDg4LCAKKyAgICA3LCA2LCAxLCAyMjQsIDk5LCA4OCwgNywgNiwgMSwgMTUzLCA4OCwgNywgNiwgMSwgMjIyLCA5MywgODgsIDcsIDYsIDEsIAorICAgIDIxNywgMTUzLCA4OCwgNywgNiwgMSwgNjksIDg4LCA3LCA2LCAxLCAyMTQsIDEwNSwgODgsIDcsIDYsIDEsIDIxMiwgOTgsIAorICAgIDg4LCA3LCA2LCAxLCAyMTEsIDE3OCwgODgsIDcsIDYsIDEsIDIxMSwgMTE3LCA4OCwgNywgNiwgMSwgMjEwLCAxNTksIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDcsIDYsIDEsIDIyMiwgOTMsIDM3LCAzMiwgNywgNiwgMSwgMjUxLCA3NCwgMzcsIDMyLCAKKyAgICA3LCA2LCAxLCAxNTMsIDM3LCAyNTAsIDE5OSwgMzcsIDIxMSwgMTgwLCA5MiwgNywgNiwgMSwgNjEsIDkyLCA3LCA2LCAxLCAKKyAgICAyNTMsIDE2NiwgOTIsIDcsIDYsIDEsIDI1MSwgNzQsIDkyLCA3LCA2LCAxLCAyNDksIDY4LCA5MiwgNywgNiwgMSwgNzYsIAorICAgIDkyLCA3LCA2LCAxLCAyNDUsIDE0LCA5MiwgNywgNiwgMSwgMjQzLCAyMDksIDkyLCA3LCA2LCAxLCAyNDIsIDY3LCA5MiwgNywgCisgICAgNiwgMSwgNzQsIDkyLCA3LCA2LCAxLCAyMzUsIDE1MCwgOTIsIDcsIDYsIDEsIDIzNSwgMjksIDkyLCA3LCA2LCAxLCAxNTYsIAorICAgIDkyLCA3LCA2LCAxLCAxOTQsIDkyLCA3LCA2LCAxLCAyMzAsIDMwLCA5MiwgNywgNiwgMSwgNzgsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjYsIDEwOSwgOTIsIDcsIDYsIDEsIDIyNCwgOTksIDkyLCA3LCA2LCAxLCAxNTMsIDkyLCA3LCA2LCAxLCAyMjIsIDkzLCAKKyAgICA5MiwgNywgNiwgMSwgMjE3LCAxNTMsIDkyLCA3LCA2LCAxLCA2OSwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCA5MiwgNywgNiwgCisgICAgMSwgMjEyLCA5OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIDkyLCA3LCA2LCAxLCAKKyAgICAyMTAsIDE1OSwgOTIsIDI0MCwgMjA4LCA5MiwgMjMwLCA1NCwgOTIsIDIyMSwgMTg1LCA5MiwgMjE4LCAyMjgsIDkyLCAyMjQsIAorICAgIDIyMSwgOTIsIDIxMiwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDYxLCAxNTIsIDM3LCA3LCA2LCAxLCAyNTMsIDE2NiwgMTUyLCAKKyAgICAzNywgNywgNiwgMSwgMjUxLCA3NCwgMTUyLCAzNywgNywgNiwgMSwgMjQ5LCA2OCwgMTUyLCAzNywgNywgNiwgMSwgNzYsIAorICAgIDE1MiwgMzcsIDcsIDYsIDEsIDI0NSwgMTQsIDE1MiwgMzcsIDcsIDYsIDEsIDI0MywgMjA5LCAxNTIsIDM3LCA3LCA2LCAxLCAKKyAgICAyNDIsIDY3LCAxNTIsIDM3LCA3LCA2LCAxLCA3NCwgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAxNTAsIDE1MiwgMzcsIDcsIDYsIAorICAgIDEsIDIzNSwgMjksIDE1MiwgMzcsIDcsIDYsIDEsIDE1NiwgMTUyLCAzNywgNywgNiwgMSwgMTk0LCAxNTIsIDM3LCA3LCA2LCAKKyAgICAxLCAyMzAsIDMwLCAxNTIsIDM3LCA3LCA2LCAxLCA3OCwgMTUyLCAzNywgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgMzcsIDcsIAorICAgIDYsIDEsIDIyNCwgOTksIDE1MiwgMzcsIDcsIDYsIDEsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgMjIyLCA5MywgMTUyLCAzNywgCisgICAgNywgNiwgMSwgMjE3LCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIDY5LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTUyLCAKKyAgICAzNywgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgCisgICAgMTE3LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjIzLCAxNjAsIDIzMSwgMTAyLCA1MCwgMjIzLCAxNjAsIDIzMSwgCisgICAgOTksIDUwLCAxNTIsIDkyLCA3LCA2LCAxLCA2MSwgMTUyLCA5MiwgNywgNiwgMSwgMjUzLCAxNjYsIDE1MiwgOTIsIDcsIDYsIAorICAgIDEsIDI1MSwgNzQsIDE1MiwgOTIsIDcsIDYsIDEsIDI0OSwgNjgsIDE1MiwgOTIsIDcsIDYsIDEsIDc2LCAxNTIsIDkyLCA3LCAKKyAgICA2LCAxLCAyNDUsIDE0LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDMsIDIwOSwgMTUyLCA5MiwgNywgNiwgMSwgMjQyLCA2NywgCisgICAgMTUyLCA5MiwgNywgNiwgMSwgNzQsIDE1MiwgOTIsIDcsIDYsIDEsIDIzNSwgMTUwLCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIAorICAgIDI5LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTYsIDE1MiwgOTIsIDcsIDYsIDEsIDE5NCwgMTUyLCA5MiwgNywgNiwgMSwgMjMwLCAKKyAgICAzMCwgMTUyLCA5MiwgNywgNiwgMSwgNzgsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjQsIDk5LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTMsIDE1MiwgOTIsIDcsIDYsIDEsIDIyMiwgOTMsIDE1MiwgOTIsIDcsIDYsIAorICAgIDEsIDIxNywgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCA2OSwgMTUyLCA5MiwgNywgNiwgMSwgMjE0LCAxMDUsIDE1MiwgOTIsIAorICAgIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDExNywgCisgICAgMTUyLCA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDI0OSwgMTM2LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCAKKyAgICA5MiwgMjQwLCAxMjAsIDE1MiwgOTIsIDE5MSwgMTUyLCA5MiwgMjA2LCAxNTIsIDkyLCAyNTUsIDM0LCAxNTIsIDkyLCAyMTIsIAorICAgIDIzLCA0MiwgMjQ3LCAxNzIsIDkyLCAyNTAsIDMxLCA5MiwgMjQ5LCAxNzgsIDkyLCAyNDQsIDQsIDkyLCAyNDAsIDExMiwgCisgICAgOTIsIDIyOSwgOTEsIDkyLCAyMjksIDg0LCA5MiwgMjI2LCAyMTgsIDkyLCAyMTksIDM3LCA5MiwgMTIwLCAyLCAyNDUsIDM5LCAKKyAgICA3OSwgOTIsIDIxMywgMTE5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA2MSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgCisgICAgMSwgMjUzLCAxNjYsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDI1MSwgNzQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIAorICAgIDEsIDI0OSwgNjgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc2LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAKKyAgICAyNDUsIDE0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyNDMsIDIwOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgCisgICAgMjQyLCA2NywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzNSwgCisgICAgMTUwLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzUsIDI5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxNTYsIAorICAgIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDE5NCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjMwLCAzMCwgMjIzLCAKKyAgICAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIyNiwgMTA5LCAyMjMsIDEwNiwgCisgICAgMjM1LCAyNDYsIDE2LCAxLCAyMjQsIDk5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxNTMsIDIyMywgMTA2LCAyMzUsIAorICAgIDI0NiwgMTYsIDEsIDIyMiwgOTMsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxNywgMTUzLCAyMjMsIDEwNiwgMjM1LCAKKyAgICAyNDYsIDE2LCAxLCA2OSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjE0LCAxMDUsIDIyMywgMTA2LCAyMzUsIDI0NiwgCisgICAgMTYsIDEsIDIxMiwgOTgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxMSwgMTc4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIAorICAgIDE2LCAxLCAyMTEsIDExNywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjEwLCAxNTksIDQyLCAxNDEsIDI0MSwgNzAsIAorICAgIDkyLCA1NiwgMjM0LCAyNCwgOTIsIDU2LCAyMDYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTcsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjksIDkyLCA1NiwgMjQ4LCA5OCwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA3NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNSwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA2MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA0OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1MSwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA3MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1MCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICAzNiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNCwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2NCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA3OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzMiwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA1OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2OCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1NCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzMywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA1NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzOCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNywgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2NywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NywgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA0OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA3MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2NSwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAKKyAgICAyMzgsIDQ2LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzgsIDIxNiwgNywgMjIwLCAKKyAgICA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA3NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDYwLCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNDMsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA1NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIAorICAgIDIxNCwgMTc3LCAyMzgsIDM5LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzAsIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA1MiwgMzcsIDE1NCwgMjU0LCAyNTQsIDM3LCAxNTQsIAorICAgIDI1NSwgMjEsIDI0OSwgNzksIDI0NCwgNTAsIDI1MCwgOCwgMjE0LCAxOTQsIDIyOCwgMjE4LCAyLCAyMTgsIDE1NSwgMjE4LCAKKyAgICAzNCwgMTE1LCAyMzAsIDExOSwgMjE4LCAzMywgMjUwLCAzNCwgMjUzLCAyMTUsIDI0NiwgNjIsIDIxOCwgMzIsIDExNSwgCisgICAgMjUxLCAxMjYsIDIyMywgMTYxLCAyNTEsIDE0OCwgMjUzLCAyMTUsIDIyOCwgMjE3LCAyMTIsIDQxLCAyMTIsIDM1LCAyMTMsIAorICAgIDEzMSwgMjMwLCAyMDAsIDIxMiwgMjUsIDI0NSwgMjMyLCAyNDIsIDE4OCwgMjQ1LCA1MywgMjQ1LCAyMzIsIDI0MiwgMTg4LCAKKyAgICAyNTQsIDEzNiwgMjQ1LCAyMzIsIDI0MiwgMTg4LCAyNTMsIDIzMywgMjQyLCAxODgsIDIsIDIzMSwgNTYsIDE2NiwgMjMwLCAKKyAgICAxMzQsIDg3LCAyMTIsIDI3LCAyNDksIDE0NSwgMjMwLCAxMzQsIDg3LCAyNDQsIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzQsIAorICAgIDg3LCAyMTIsIDI3LCAyNDIsIDIxNywgMjMwLCAxMzQsIDg3LCAyNDMsIDIzNiwgMjMwLCAxMzQsIDg3LCAyMTIsIDUyLCAKKyAgICAyNDIsIDIxNywgMjMwLCAxMzQsIDg3LCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzNCwgODcsIDIxMiwgNTIsIDI0OSwgCisgICAgMTQ1LCAyMzAsIDEzNCwgODcsIDI0OSwgMTQ1LCAyMzAsIDEzMywgMTY2LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDI0NCwgCisgICAgMTAwLCAyMjQsIDI1LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTM0LCAyLCAyNDQsIAorICAgIDE5OCwgMjQzLCAyMzYsIDIzMCwgMTM0LCAyLCAyNDQsIDE5OCwgMjE4LCAzOSwgMiwgMjQ0LCAxOTgsIDI0MiwgMTg2LCAKKyAgICAyMTgsIDE1OCwgMjIwLCAxLCAyMTgsIDE1OCwgMjUwLCAxMjQsIDIyMSwgMTcwLCAyNDUsIDQ3LCAyMTUsIDIzNiwgMjQ4LCAKKyAgICA5MiwgMjE1LCAyMzYsIDIyNiwgNjMsIDIxNSwgMjM2LCAyNTEsIDM1LCAyMTUsIDExMCwgMjUwLCAxMjYsIDI1MSwgMjE4LCAKKyAgICAyMjIsIDE5MywgMjQxLCAxODYsIDIxOCwgMzcsIDI1MSwgMjE4LCAyNDUsIDIzNiwgNjQsIDIzMSwgMTk5LCAyNDUsIDIzNiwgCisgICAgNjQsIDIyMywgMzQsIDI0MSwgMjExLCAyNDQsIDE5LCAyMzMsIDYwLCAyNDksIDI1NCwgMjMxLCAxNzUsIDIzMywgNTksIAorICAgIDI0NCwgMTg0LCAyMzMsIDU5LCAyMzMsIDYwLCAyNDQsIDU1LCAyMzYsIDcsIDIxMSwgMjM5LCAyMzAsIDYzLCAyMTYsIDM1LCAKKyAgICAyNTMsIDE5OSwgMjQyLCAxNTAsIDIzMSwgNzIsIDIxMiwgMzksIDIxNywgNTgsIDIzMywgMzIsIDI1MiwgMTU3LCAyMjUsIAorICAgIDY1LCAyMjMsIDExNCwgMjU0LCA2MiwgMjQyLCAxMzQsIDI1NCwgNjIsIDIyNSwgMjIwLCAyMjUsIDIyMSwgMjUwLCAxMjcsIAorICAgIDIxOCwgMTE2LCAyNDIsIDMwLCAyMTksIDkyLCA2NCwgMjI1LCA0NywgMjMxLCA5MiwgMjI2LCAyMDEsIDI1MSwgMjAyLCAKKyAgICAyMjQsIDIzMiwgMjMzLCA0MiwgMjIzLCAzNSwgMjQ5LCAxNTAsIDIyMywgMzUsIDI1MiwgMTY3LCAyNDksIDE4MSwgMjIzLCAKKyAgICAzNCwgMjQ5LCAxMDMsIDIyLCAyMjMsIDM0LCAyMTgsIDE0MywgMjUxLCAxNzUsIDIxOSwgMTYsIDI1MSwgMTU5LCAyNDQsIDMsIAorICAgIDI0MywgMjU1LCAyMjIsIDIwOSwgMjE3LCAyNDcsIDIyNCwgMjM0LCAyNDgsIDE4MywgMjI2LCAyNDAsIDIxOCwgOCwgMjQ0LCAKKyAgICAwLCAyMTksIDIzMiwgMjQ0LCA5OSwgMjUxLCAyOSwgMiwgMjE3LCAyNDAsIDI0OCwgNDMsIDIxOSwgNTQsIDI0MCwgMTE5LCAKKyAgICAyNDksIDE0OSwgMjIwLCA3MiwgMjQwLCAxMTgsIDI0MCwgMTE5LCAyNDksIDE0OSwgMjQ2LCAxMTYsIDI0OSwgMTgwLCAyNTAsIAorICAgIDkyLCAxMzAsIDI1MSwgNiwgMjMyLCAxNDcsIDI0OSwgOTYsIDI0MSwgNjIsIDIyNCwgMjM2LCAyMTksIDI0MiwgMjUyLCA0NCwgCisgICAgMjUxLCAxNzEsIDIyNCwgMjM3LCA2NCwgMjQ0LCA0MSwgMjQ5LCAxNzksIDI0NCwgMzIsIDIyLCAyMzQsIDM4LCAyMTcsIDIwLCAKKyAgICAyMTEsIDIzMCwgMjQyLCAyMCwgMjIyLCAxNCwgMjUxLCAxODUsIDIyLCAyNDksIDExMCwgMjExLCAyMzcsIDI0MiwgMTkxLCAKKyAgICAyNDksIDI0MywgMjQyLCAxOTEsIDIxNSwgMTk0LCAyNDYsIDk4LCAyNTIsIDcwLCAyMzAsIDk4LCAyNTAsIDE1LCAyNTIsIAorICAgIDcwLCAyMzAsIDk3LCAyNTIsIDE5NSwgMjUxLCAxODQsIDIyMywgMzYsIDIxMSwgMjAxLCAyMjQsIDE5OCwgMjUxLCAyNDMsIAorICAgIDI1MSwgMjgsIDIzNSwgMTQ0LCAyNTAsIDg1LCAyMTUsIDIzNiwgMjQ0LCAxNzAsIDI1MCwgODQsIDI0NCwgMTAyLCAyNDQsIAorICAgIDEwMywgMjE5LCAxNCwgMjUyLCAxNjYsIDIyNSwgMjU0LCAyMjQsIDI0NywgMjQ5LCAyMTIsIDI1MiwgMTY3LCAyMTcsIDYwLCAKKyAgICAyMTUsIDIzNiwgMjQ5LCAxMzYsIDI0NCwgNzUsIDIyNSwgNjYsIDI0OCwgODksIDIzNSwgMTM3LCAyNDcsIDEzOSwgMjUwLCAKKyAgICAyNDAsIDIxOCwgMTE1LCAyMTEsIDI0MCwgMjUwLCAxMDYsIDIzMCwgMTM0LCAyMTMsIDE2NCwgMjUwLCAxNzAsIDIyMSwgCisgICAgMjAxLCAyMjEsIDIyNiwgMjQyLCAxNTUsIDI1MSwgMywgMjUwLCAyNDEsIDI0MCwgMjUyLCAyNDQsIDEzOCwgMjEyLCAwLCAKKyAgICAyMjIsIDIwMiwgMjQ5LCAyNDQsIDI0NCwgOTQsIDIyNSwgNSwgMjIsIDI0NCwgOTgsIDIzMCwgMjMyLCAyMzAsIDExMywgCisgICAgMjUxLCAxOCwgMjUwLCA0NywgMjQxLCAyMzksIDI1MywgMjQ5LCAyMjYsIDY2LCAyMTYsIDE1LCAyNDIsIDIsIDI1MCwgMzcsIAorICAgIDIxNiwgMjQzLCAyMTYsIDExNCwgMjUwLCAyOCwgMjUxLCAyMTAsIDIyNSwgMTgwLCAyNTMsIDI0OCwgMjEzLCAxNzIsIDI0MywgCisgICAgMTE3LCAyNDcsIDIwNSwgMjQxLCAxNjMsIDIxOSwgODYsIDIzMSwgMjM5LCAyNTEsIDI1MywgMjQzLCAxMTgsIDI0NywgMjQ4LCAKKyAgICAyNTEsIDE3NCwgMjQ0LCA2MCwgMjI1LCAzNiwgMjUwLCAyNDksIDI4LCAyMjgsIDUyLCAyMzAsIDkwLCAyOCwgMjI4LCA0NywgCisgICAgMjIxLCAyMTQsIDI0MiwgMTA2LCAyOCwgMjM0LCAxNDMsIDIxNSwgMTkxLCAyMTMsIDE1NCwgMjgsIDIyMSwgMTk0LCAyMjIsIAorICAgIDEyNiwgMjIwLCAxMywgMiwgMjIxLCAyMjksIDIxNiwgMjQ1LCAyMjMsIDE4MSwgMjIsIDI1MiwgMTY3LCAyMTksIDEwNywgCisgICAgMjIsIDIxOSwgMTA3LCAyNTEsIDE5NSwgMjUyLCAxMzEsIDIyLCAyNDEsIDU2LCAyNTAsIDEyOCwgMjQ0LCA4MSwgMjE5LCAKKyAgICA2NSwgMjIyLCAxMjcsIDIxOCwgMTMsIDIxNSwgMTk1LCAyNDAsIDI1MywgMjIzLCAxODIsIDI1NCwgMTM3LCAyNDQsIDM5LCAKKyAgICAyMjIsIDEzOCwgMjQ0LCAzOSwgMjE3LCAyNDIsIDI0MCwgMjQyLCAyNTEsIDEyNywgMjQwLCAyNDIsIDIsIDI0MywgMTAxLCAKKyAgICAyMjYsIDIzMywgMjUxLCAxMjcsIDIzNSwgMTM3LCAyMjQsIDI0MiwgMjI2LCAyMzIsIDI0NSwgNTIsIDIyNCwgMjQyLCAyMjYsIAorICAgIDIzMiwgMjQwLCAyNTEsIDI1MiwgMTUzLCAyNTMsIDE4OSwgMjE2LCAyNTMsIDIzMSwgMjM5LCAyNDAsIDI0NywgMjMyLCAKKyAgICAxMTcsIDI0MCwgMjQ3LCAyNDksIDE4NCwgMjE4LCAxMjcsIDIyMSwgMjAwLCAyNDgsIDUxLCAyMTgsIDEyNywgMjQ0LCAxODgsIAorICAgIDIzNSwgMTU1LCAyMzMsIDk1LCAyMzUsIDEzNywgMjUwLCAyMzQsIDI0NSwgNTIsIDI1MCwgMjM0LCAyMjMsIDE0NCwgMjMwLCAKKyAgICAxMTcsIDIyNiwgMTE4LCAyMTIsIDQxLCAyNTEsIDEzMSwgMjQ5LCAxNTMsIDIxNiwgMTA3LCAyMzMsIDI0LCAyMjMsIDE4MywgCisgICAgMjUwLCAyMzIsIDI0NiwgMTA0LCAyNDksIDE0MywgMjEyLCAzLCAyMTksIDcyLCAyMTksIDcwLCAyNDAsIDI1MiwgMjIzLCAKKyAgICAxNTYsIDI0MiwgMTc3LCAyMjAsIDU5LCAyMzAsIDE1MCwgMjIyLCAxOTYsIDI1MCwgMTE2LCAyNDcsIDE0NCwgMjI1LCA3NiwgCisgICAgMjUxLCAyMTEsIDI0NSwgMTc3LCAyMjYsIDI0MiwgMjE4LCAyNTQsIDIyMCwgNTQsIDI1MSwgMTMwLCAyNTQsIDEwMCwgMjQxLCAKKyAgICA2MSwgMjMzLCAxMjcsIDI1MiwgNjgsIDI0NCwgOTgsIDIxNSwgMTk0LCAyNDQsIDk4LCAyNTEsIDIxNywgMjE1LCA5MSwgCisgICAgMjQyLCAwLCAyNTAsIDExNywgMjUyLCAxOTUsIDI1MCwgMTE3LCAyNDMsIDI1MCwgMjUyLCAxOTUsIDI1MCwgMTE3LCAyNTEsIAorICAgIDI0NSwgMjI1LCAxOTgsIDIzNCwgMzIsIDIyNCwgMjUxLCAyNDYsIDk1LCAyNTEsIDE5LCAyNTIsIDE4NSwgMjUxLCAxOSwgCisgICAgMjQ3LCAxMzgsIDIzMCwgMTE4LCAyNDQsIDE5OCwgMjQ5LCAxNTQsIDI0NCwgMTk4LCAyMTYsIDEwOCwgMjQ0LCAxOTgsIAorICAgIDIyMywgMTg0LCAyNDQsIDE5OCwgMjUwLCAyMzMsIDI0NCwgMTk4LCAyNDYsIDEwNSwgMjQ0LCAxOTgsIDIxOCwgMjQzLCAKKyAgICAyMTIsIDMsIDI0MCwgMjUzLCAyNDQsIDE5OCwgMjMwLCAxNTEsIDI0NCwgMTk4LCAyNDcsIDE0NSwgMjQ0LCAxOTgsIDIyNSwgCisgICAgNzcsIDI0NCwgMTk4LCAyNDMsIDI1MywgMjQ0LCAxOTgsIDI0MiwgMjcsIDI0NCwgMTk4LCAyMTEsIDIyNCwgMjQ0LCAxOTgsIAorICAgIDI1MiwgNzksIDI0NCwgMTk4LCAyMjYsIDQ5LCAyNDQsIDE5OCwgMjI1LCA3NywgMjI4LCA1OCwgMjI1LCAyMzYsIDIyNCwgCisgICAgMTg5LCAyNDUsIDIxLCAyNDUsIDIzNSwgMjI4LCA1OCwgMjMwLCAxMTUsIDIxNiwgMjAsIDcxLCAxMjAsIDIyNSwgMTAsIAorICAgIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDEyNCwgMjI1LCAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCA3MSwgNDMsIDIyNSwgCisgICAgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDQ0LCAyMjUsIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDI0NCwgOTIsIAorICAgIDI0MiwgMjMsIDUwLCAyMTIsIDMzLCAyNDIsIDIzLCA1MCwgMjI2LCAyMTksIDI0MiwgMjMsIDUwLCAyMTYsIDEzNiwgMTIwLCAKKyAgICA1MCwgMjE2LCAxMzYsIDEyNCwgNTAsIDI1MCwgMjcsIDI0MiwgMTgsIDUwLCAyMDQsIDI0MiwgMTgsIDUwLCAyNDksIDEzMSwgCisgICAgMjExLCAyMjAsIDI0MiwgMiwgMjQ1LCAyMiwgMjI5LCAxMDksIDIxNywgMTUyLCAyMzUsIDEzMSwgMjQ2LCAxMDAsIDIzNCwgCisgICAgODgsIDI1MSwgMjU1LCAyMTEsIDIyMCwgMjUwLCAxLCAyMjQsIDEzMCwgMjQyLCAyMSwgMjI0LCAyMzMsIDIzMSwgMTgyLCAKKyAgICAyMjAsIDYsIDI1MywgMjExLCAyMjAsIDYsIDI0MSwgMTcxLCAyMjAsIDYsIDIxMSwgMjIwLCAyMjEsIDI0MiwgMjExLCAyMjAsIAorICAgIDI1MSwgMTk0LCAyNDQsIDM3LCAyNTEsIDk4LCAyMzYsIDcsIDIxOSwgMTcxLCAyNTEsIDk3LCAyMzYsIDcsIDIxOSwgMTcxLCAKKyAgICAyNTEsIDE3MCwgMjQyLCAyMDEsIDIzMSwgMTkwLCAyMTEsIDIyMSwgMjQ0LCAxODIsIDIzMSwgMTkxLCAyMiwgMjExLCAyMjIsIAorICAgIDI0MSwgNjcsIDI0MiwgMTcsIDExMywgMjMxLCA2NCwgMjQxLCA2NywgMjQyLCAxNywgMTEzLCAyMTEsIDIxOSwgMjQxLCA2NywgCisgICAgMjQyLCAxNywgMjI1LCAyLCAyMjYsIDIzMSwgMjExLCAyMjIsIDIsIDI1MSwgMTE0LCAyNDUsIDIzMywgMjUxLCAxNDksIDIsIAorICAgIDIxMywgMjQ2LCAyMjUsIDE3MSwgMiwgMjUxLCAyMjAsIDI0MiwgNDEsIDIzMSwgMTkxLCAyLCAyNDIsIDExNywgMjI1LCAKKyAgICAxMTIsIDIzMSwgMTc5LCAyMzEsIDE5MSwgMiwgMjE1LCA5OCwgMjI2LCAyMTIsIDIzMSwgMTkwLCAyMjYsIDIxMiwgMjExLCAKKyAgICAyMjEsIDI1MiwgMTk0LCAyNDksIDE5OCwgMjExLCAyMDUsIDIyNCwgMTkyLCAyMzUsIDEzNywgMjI2LCAyMjcsIDIzNSwgCisgICAgMTM3LCAyNDIsIDE3NiwgMjQyLCAyMjksIDI1MiwgMTk1LCAyNTQsIDEyMSwgMjQ1LCAyNiwgMjU0LCAxNjksIDI1NCwgMTcwLCAKKyAgICAyMzAsIDE0MSwgMjM2LCAxMiwgMjE5LCAxMDIsIDIzNSwgMjM5LCAyNDgsIDQyLCAyMjUsIDE3MCwgMjQyLCAxMTIsIDI0OCwgCisgICAgMTg3LCAyMzIsIDIwNywgMjI5LCAyMTYsIDIyNSwgMSwgMjQ0LCAxOTksIDIzMSwgMTQ3LCAyNDIsIDQwLCAyNTIsIDE0NiwgCisgICAgMjI1LCA0LCAyMTcsIDE3MiwgMjI1LCA2OSwgMjM0LCA3MCwgNzksIDIzMiwgMTE3LCAyMzMsIDE2LCAyMjIsIDIzNiwgMjQzLCAKKyAgICA2MSwgMjE4LCAxMzMsIDIzNCwgNjksIDI1MSwgMTc5LCAyNDksIDE1NiwgMiwgMjQxLCAyMzQsIDIxMiwgMTksIDI1MiwgNzcsIAorICAgIDI0MSwgMjM0LCAyNTEsIDE0MywgMjQxLCAyMzQsIDExMywgMjQxLCAyMzIsIDIxOSwgMTIsIDI0MSwgMjM0LCAyNDIsIDEyNywgCisgICAgMjQxLCAyMzQsIDI0MSwgMjM1LCAyLCA3NSwgMjUxLCAyMTYsIDI0MSwgMjM0LCAyNDIsIDEzNCwgMjQxLCAyMzQsIDIxMSwgCisgICAgNDIsIDI0MSwgMjM0LCAyMjQsIDEzMSwgMjQxLCAyMzQsIDI0MSwgMjM1LCAyLCAyMjMsIDM2LCAyMjMsIDQ3LCAyNDEsIAorICAgIDIzMiwgMjQxLCAyMzUsIDI0OCwgODksIDI0OCwgMSwgMjIwLCA4NCwgMiwgMTE2LCA1OSwgMjM1LCAyMjIsIDI0NSwgMTgwLCAKKyAgICAxOTMsIDI1MSwgMTI0LCAyNTQsIDEyMCwgODcsIDI1MSwgMjAzLCAyMTksIDk0LCA4NywgMjQ5LCAyMzYsIDg3LCAyMTgsIAorICAgIDI0OCwgMjE3LCAyNDksIDg3LCAyNDYsIDkzLCAyNDgsIDE2NSwgODcsIDIyNSwgNzAsIDY0LCAyMjQsIDI1MiwgMjQ0LCA2OSwgCisgICAgMjUyLCAxMSwgMjQ3LCAxNzMsIDg3LCAyMTksIDUsIDI1MiwgMTY2LCAyMTYsIDE1MCwgMjUyLCAxNjYsIDcxLCAyNDQsIDU5LCAKKyAgICAyNDAsIDIxOCwgMjI1LCA4LCA4NywgMjMwLCAxNTQsIDI1MiwgMTgwLCAyNDksIDEwNiwgMjQ1LCA0MCwgMTE0LCAyNDcsIAorICAgIDE0MCwgNTAsIDI0OSwgMTQ3LCAyNTAsIDI1MCwgMjUyLCAxNTIsIDIsIDIxMSwgNDAsIDUwLCAyNTIsIDE1MiwgMiwgMjQ3LCAKKyAgICAxNDAsIDUwLCAyNTIsIDE1MiwgMiwgMjQ1LCA1NSwgNTAsIDI1MiwgMTUyLCAyLCAyMjQsIDIzMSwgNTAsIDIzMCwgMTU0LCAKKyAgICAyLCAyMTEsIDIzNSwgMjUwLCAxNDYsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMiwgMjIsIDIxMSwgNDAsIDUwLCAyMjEsIDE4MCwgCisgICAgMjI1LCAxNjksIDI0OSwgMjE2LCAyNTEsIDE0NywgMjMwLCAxOTEsIDI0NCwgNjQsIDI0NywgMTkzLCAyMjYsIDE2NSwgMjQ3LCAKKyAgICAxOTgsIDI0NiwgNTcsIDI0NCwgMTE1LCAyNDQsIDQ4LCAyMDQsIDI0NCwgMTE1LCAyNDQsIDQ4LCAyMjYsIDgwLCAyLCAyNDksIAorICAgIDEwOCwgMjI2LCA4MCwgMjQ0LCAxOTEsIDIxNCwgMTYzLCAyNTEsIDI0LCAyMTcsIDE5LCAyNTEsIDI0LCAyNTAsIDI1MSwgCisgICAgMjM1LCAyNDksIDI1MCwgMTQ2LCAyLCAyMTQsIDE1MywgMjE1LCAyMzEsIDI1MCwgMTQ2LCAyLCAyNDYsIDExMiwgMjE1LCAKKyAgICAyMzEsIDI1MiwgMTQ5LCAyNTAsIDE0NSwgMjUwLCAxNCwgMjI0LCAxMjYsIDIyMiwgMTg3LCAyMjQsIDEyNiwgMjI2LCAyMywgCisgICAgMjE4LCAxMjMsIDIyMiwgMTMzLCAyMTUsIDIyMywgMjIyLCAxMzMsIDI1MSwgMTk5LCAyMTcsIDkyLCAyMzMsIDU3LCAyMjgsIAorICAgIDUwLCAyMjgsIDUxLCAyLCAyNDgsIDg4LCAyNDksIDE1NSwgMjUwLCA4LCAyNTEsIDIwMCwgMjA0LCAyNTEsIDIwMCwgMjQyLCAKKyAgICAxMzQsIDI1MSwgMjAwLCAyNTEsIDIxNiwgMjUxLCAyMDAsIDIyNiwgMTYxLCAyNTEsIDIwMCwgMjUxLCAxOTcsIDIyOSwgCisgICAgMjEwLCAyNTIsIDE4MywgMjIxLCAxODgsIDIzMSwgNjUsIDIxNywgMiwgMjIzLCAxMjYsIDIyNiwgNzgsIDI0NCwgMTY3LCAKKyAgICAyMzEsIDIzOSwgMjIxLCAyMjUsIDI1NCwgOTcsIDIyNCwgMTQ4LCAyNTUsIDUsIDIzMiwgMTE5LCAyNTAsIDEzNSwgMjMxLCAKKyAgICA3NywgMjI2LCAxMzMsIDIxNSwgMjM5LCAyMzYsIDMsIDIxNSwgMjM5LCAyMjYsIDg2LCAyNDYsIDMyLCA4NywgMjM2LCAwLCAKKyAgICAyNDUsIDEyNywgMjQ1LCAxMjgsIDIsIDI0NiwgMTEyLCA4MCwgNDgsIDI1MCwgOCwgMjMxLCAyMDUsIDIsIDIzMiwgMTEzLCAKKyAgICAyNDQsIDgxLCAyNTAsIDgsIDIzMSwgMjA1LCAyLCAyMjMsIDE2MCwgMjQ0LCA4MSwgMjA0LCAyMzEsIDIwNSwgMiwgMjIzLCAKKyAgICAxNjAsIDI0NCwgODEsIDIwNCwgMjMxLCAyMDUsIDIsIDIzMiwgMTEzLCAyNDQsIDgxLCAyMjQsIDIzOSwgMjI0LCAyNDAsIAorICAgIDI0MCwgMjU1LCAyMjksIDg5LCAyMzAsIDE2NCwgMjI1LCAxMjAsIDIzMCwgMTY0LCAyMjUsIDEyMSwgMiwgOTcsIDgwLCAKKyAgICAyNTMsIDIxNSwgMjMzLCA1MiwgMjEzLCAxNzUsIDIzMCwgMTYzLCAyMzAsIDE2NCwgMjI1LCAxMjEsIDIyNiwgMjM0LCAyMjgsIAorICAgIDgwLCAyMzAsIDE2NCwgMjI1LCAxMTksIDI1NCwgOTgsIDIsIDI1MiwgMTM3LCAyNTEsIDE4LCAyMTMsIDE3MiwgMjUxLCAxOCwgCisgICAgMjE2LCAyNTUsIDIyMywgMTc2LCAyMTMsIDE3MSwgMjE1LCA2MCwgOTcsIDI1MywgMjU1LCAyNTAsIDEwLCA5NywgMjIsIAorICAgIDE0MCwgMjA0LCAyNTAsIDQ0LCAyNTMsIDI1NSwgMjUwLCAxMCwgOTcsIDIyLCAxNDAsIDIwNCwgMjUwLCA0NCwgMjU0LCAwLCAKKyAgICAyLCAzNywgMTIzLCAyMjYsIDEyNCwgMjUwLCAxMCwgMjQ2LCAxMTIsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDQ0LCAyNTMsIAorICAgIDI1NSwgMjU0LCA5NiwgMjQ2LCAxMTIsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDQ0LCAyNTMsIDI1NSwgMTIxLCAyNTEsIAorICAgIDE0NiwgODcsIDEyNSwgMjUxLCAxNDYsIDg3LCAyMTksIDksIDIsIDI1MSwgMTIsIDkxLCAyMTksIDgsIDIxOSwgOSwgMiwgCisgICAgMTIzLCAyMTksIDMzLCAyMTIsIDM1LCAyMTksIDksIDIsIDEzNCwgMjE5LCAzMywgMjEyLCAzNCwgMjUyLCAxMjMsIDI0NSwgCisgICAgMTgwLCAyMjUsIDMwLCAyMzMsIDQ4LCAyMzEsIDIxNiwgMjQyLCAxOTEsIDIyMiwgMjUwLCAyMzEsIDIxNiwgMjQyLCAxOTEsIAorICAgIDIzMiwgMTU4LCAyLCAyMzUsIDIzMiwgMjI1LCAyMDIsIDI1MCwgOCwgMjMyLCAxNTgsIDIsIDIzNCwgMTQ0LCAyMzQsIDE0NCwgCisgICAgMjMyLCAxNTcsIDIwNCwgMjMyLCAxNTcsIDI1MiwgNTIsIDI1MiwgNTMsIDIsIDI1MSwgMTIsIDkxLCAyNTEsIDE5OCwgMjMyLCAKKyAgICAyMTAsIDg3LCAyMjMsIDE3NywgMjUxLCA5NCwgMjUyLCAxOTMsIDIsIDE0MCwgODAsIDQ4LCAyNDUsIDE1MSwgMiwgMTQwLCAKKyAgICA4MCwgNDgsIDIyNiwgMjAxLCAyLCAyNDUsIDM5LCAxNjQsIDIsIDQzLCA0NCwgODAsIDQ4LCAyMTksIDQxLCAyLCA5NywgODAsIAorICAgIDQ4LCAyMTYsIDE1LCAyLCAyMTQsIDE1MywgODAsIDQ4LCAyMjgsIDgwLCAxMjMsIDIxNCwgMTg0LCAyNDUsIDE5OSwgODcsIAorICAgIDIzNCwgMTQyLCAyMTYsIDI0OCwgMjM1LCAyMjYsIDE2LCAzMSwgNywgNiwgMjMzLCAxNSwgMjM1LCAyMjYsIDE2LCAzMSwgNywgCisgICAgNCwgMjMzLCAxNSwgMjM1LCAyMjYsIDE2LCAzMSwgMjI3LCAyMDMsIDIzNSwgMjI2LCAxNiwgMzEsIDIxNywgMTg0LCAyMzUsIAorICAgIDIyNiwgMTYsIDMxLCA3LCAyMzMsIDE1LCAyNDQsIDEwNCwgMjQ1LCAxODAsIDIxNiwgMTAsIDIxMSwgMTk5LCAyNDIsIDI4LCAKKyAgICAyMjcsIDE4NiwgMjIsIDI1MSwgMjA1LCAyNDEsIDczLCAyMjUsIDUzLCAyMzAsIDIzMSwgMjE3LCAwLCAyNDksIDEyMiwgCisgICAgMjUyLCAxNjcsIDIxOSwgMTI3LCAyMjUsIDEyLCAyMTgsIDE1OSwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCAyMzUsIDEzNywgCisgICAgMTYsIDMxLCAyNTIsIDY1LCAyMTUsIDIyMSwgMjQ1LCAxNjQsIDg1LCA0MiwgMjUxLCA5NCwgNzEsIDQyLCAyNTEsIDk0LCAKKyAgICAyMzMsIDkxLCAyMjMsIDExNCwgMjUwLCA0MywgMjMzLCA5MSwgMjUxLCAyMTYsIDI1MCwgNDMsIDIzMywgOTEsIDIyNiwgCisgICAgMTYxLCAyNDgsIDAsIDIzMywgOTEsIDI1MSwgMjE2LCAyNDgsIDAsIDQsIDIyNiwgMTYxLCAyNDgsIDAsIDQsIDI1MSwgMjE2LCAKKyAgICAyNDgsIDAsIDIxNCwgMTYyLCAyMjMsIDExNCwgMjE1LCAyMjYsIDI0NiwgMTEzLCAyMjMsIDExNCwgMjE1LCAyMjYsIDIxNCwgCisgICAgMTYyLCA0LCAyMjMsIDExNCwgMjE1LCAyMjYsIDI0NiwgMTEzLCA0LCAyMjMsIDExNCwgMjE1LCAyMjYsIDM3LCAyNDksIAorICAgIDEzOSwgMjI0LCAyNTUsIDI0OSwgMTM5LCAyMjUsIDAsIDIsIDI0MiwgMzMsIDUxLCAyNDksIDEzOSwgMjI0LCAyNTUsIDIyOCwgCisgICAgNTQsIDQzLCAyMjAsIDE1NSwgMiwgMTM0LCAyNDcsIDEyNiwgMjUwLCAxMiwgMjQ0LCAxOTksIDEyMywgMjI2LCAyNDYsIAorICAgIDI1MCwgMTIsIDI0NCwgMTk5LCAxMTMsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMTM0LCAyMjYsIDI0NiwgMjUwLCAKKyAgICAxMiwgMjQ0LCAxOTksIDI0NCwgMTksIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ0LCA4OSwgMjI2LCAyNDYsIAorICAgIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTksIDEyNywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjAsIDEyNCwgMjI2LCAKKyAgICAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIDIwMSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjgsIDIwNSwgCisgICAgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDI0OSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIAorICAgIDE3NiwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDc3LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIAorICAgIDIyNiwgMTk2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA1NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMTQxLCAyNTAsIAorICAgIDEyLCAyNDQsIDE5OSwgMjQ0LCAxNSwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NCwgODcsIDI1MCwgMTIsIDI0NCwgMTk5LCAKKyAgICAyMTksIDEyMywgMjUwLCAxMiwgMjQ0LCAxOTksIDIyMCwgMTIzLCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAyMDAsIDI1MCwgCisgICAgMTIsIDI0NCwgMTk5LCAyMjgsIDIwNCwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMjQ3LCAyNTAsIDEyLCAyNDQsIDE5OSwgCisgICAgMjQ1LCAxNzQsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDc1LCAyMzAsIDEyMiwgMjQzLCAyMzcsIDIxNiwgMzcsIDIxNiwgCisgICAgMywgMjE4LCAxNTAsIDY0LCAyMzIsIDI0NSwgMjE5LCAxNzIsIDY0LCAyMzUsIDEzOCwgMjMwLCAxMTEsIDI0MiwgMTMxLCAKKyAgICAyNDQsIDE5OCwgMjQyLCAxMzEsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNDQsIDE5OSwgMiwgMjE3LCAxNSwgCisgICAgNjQsIDIzNSwgNTksIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgCisgICAgMjA0LCAyMzAsIDExNiwgMjIsIDIxOSwgNzYsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE2LCAKKyAgICAyMiwgMjQ5LCAyMzgsIDIxNywgMjQ4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNiwgMjIsIDIxNiwgCisgICAgMTA1LCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjQyLCAzMiwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDI0MCwgCisgICAgMjU0LCAyMTEsIDIzMywgMjQ0LCAxOTgsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNDQsIAorICAgIDE5OSwgMjIxLCAyMTksIDI0OCwgNzAsIDI0NCwgNDEsIDIyMywgOTEsIDI0NCwgMTk4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgCisgICAgMjQxLCAyMzMsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMTgsIDM1LCAyMTksIDc1LCAyNDQsIDE5OCwgMjI5LCAKKyAgICA5MiwgMjQ0LCAxOTgsIDI0NSwgMzEsIDI0NCwgMTk4LCAyMTQsIDE4OCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyNDksIAorICAgIDIzOCwgMjE3LCAyNDgsIDIyNSwgMTk1LCAyNDQsIDE5OCwgMjQ5LCAyMDksIDI0NCwgMTk4LCAyNDksIDIxMCwgMjQ0LCAKKyAgICAxOTgsIDIzNCwgNjgsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMjE2LCAxMzgsIDExNiwgMjM0LCA2OSwgMjM0LCA2OCwgMjQ0LCAKKyAgICAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDIzNCwgNjgsIDI0NCwgMTk5LCAyLCAyNTAsIDgsIDI0NSwgMjEsIDI0NCwgCisgICAgMTk5LCAyLCAyMTgsIDg5LCAyMTYsIDIwLCAyNDQsIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMSwgMjIsIDIxMSwgMjMzLCAKKyAgICAyNDUsIDIzLCAyNDQsIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMSwgMjIsIDIxNiwgMTA1LCAyNDUsIDIxLCAyNDcsIDIwMCwgCisgICAgMjQ0LCAxOTgsIDIxMSwgMjA0LCAyNDQsIDE5OCwgMjU0LCAxMTYsIDI0NCwgMTk4LCAyMjQsIDIzMCwgMjQ0LCAxOTgsIAorICAgIDI0OSwgMTI0LCAyNDQsIDE5OCwgMjI1LCAxNzMsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjMyLCAxMzIsIDY0LCAyMTUsIAorICAgIDIwNSwgMjQ3LCAyMDAsIDI1MSwgOTYsIDIyMywgOTEsIDI0NCwgMTk4LCAyNDMsIDI0NywgMjQ0LCAxOTksIDIsIDIwNCwgCisgICAgMjMwLCAxMTUsIDI1NCwgMTE0LCAyNDQsIDE5OCwgMjQ0LCAxNjAsIDI0NCwgMTk4LCAyMTIsIDIwLCAyNDQsIDE5OCwgMjE5LCAKKyAgICA5MywgMjQ0LCAxOTgsIDIxNiwgNzIsIDI0NCwgMTk4LCAyNDIsIDEzMiwgMjQ0LCAxOTgsIDIzMiwgMTIwLCAyNDksIDEyNCwgCisgICAgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyNDAsIDIxMCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAKKyAgICAyMDQsIDIzMCwgMTE2LCAyMiwgMjQ5LCAyMzgsIDIxNywgMjQ4LCAyNDQsIDE5OSwgMjIxLCAxOTIsIDIzNiwgNywgMjQ0LCAKKyAgICAxNjEsIDI1MywgMjIxLCAyNDQsIDE5OCwgMjQ0LCA1NywgMjQ0LCAxOTgsIDIxOSwgOTQsIDI0NCwgMTk4LCAyNDcsIDE3MywgCisgICAgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyMTEsIDIzMCwgMjMwLCAxMTUsIDI0NCwgMTk5LCAyLCAyMzEsIDg5LCAyMzEsIDE0OSwgCisgICAgMjQyLCAxMzEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAKKyAgICAyMTcsIDE1LCA2NCwgMjM1LCA1OSwgMjE5LCA3NiwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyMTksIAorICAgIDc2LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDI0MSwgMjMzLCAyNDUsIDIxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIxMSwgCisgICAgMTk2LCAyMTksIDc3LCAyMzQsIDY4LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDI1MCwgOCwgMjQ1LCAyMSwgMjI0LCAyMzAsIAorICAgIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjQ5LCAxMjQsIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjEyLCAyMCwgMjUwLCAyMzMsIDI0NCwgCisgICAgMTk4LCAyNDQsIDE5OSwgMiwgMjI4LCA4MCwgMjQyLCAxNzAsIDI0MywgNDEsIDI0NCwgMTk5LCAyLCAyMjYsIDIxOSwgMjQzLCAKKyAgICA0MSwgMjI1LCAxNzEsIDI1MSwgMTc2LCAyNDgsIDgzLCAyMjEsIDE3MSwgMjMwLCAxNTAsIDI0MSwgMjM2LCAyMzAsIDE1MCwgCisgICAgMjE5LCAxMCwgMjMwLCAxNTAsIDI0MiwgMTIsIDIyNSwgMTcxLCAyMjMsIDE1OSwgMTIzLCAyNDIsIDIyLCAyMjUsIDE3MSwgCisgICAgMjIzLCAxNTksIDI1MSwgMTg2LCAyNDIsIDE4LCAyMzYsIDcsIDI1MCwgMTg3LCAyMjUsIDE3MSwgMjQzLCAyNDYsIDIyNSwgCisgICAgMTcxLCAyLCAyMjQsIDIzMCwgMjQ0LCAxOTgsIDIyNSwgMTcxLCAyLCAyNDQsIDQ5LCAyNDIsIDE3LCAyMjIsIDIwNSwgMjQxLCAKKyAgICAyMjEsIDIxOCwgMTQ1LCAyMzIsIDE1NSwgMjIzLCAxNjUsIDI1MCwgMjUyLCAyNDEsIDE2OSwgMjE1LCAyNDksIDI0MSwgCisgICAgMTY5LCAyMTUsIDI1MCwgMiwgMjUxLCAxMjIsIDIyOCwgNTgsIDIxNSwgMjQ5LCAyMzEsIDM3LCAxOTMsIDIyMywgMTY2LCAKKyAgICAyMTgsIDE1MSwgMjE1LCAyNDcsIDIxNSwgMjQ4LCAyNTAsIDI1MiwgMjUxLCAxMDAsIDIyNiwgMTk4LCAyNTEsIDEwMCwgCisgICAgMjE1LCAyMDIsIDI1MSwgMTAxLCAyMTgsIDEzMSwgMjMwLCAxOTIsIDI1NCwgMTM4LCAyNDQsIDEwNSwgMjQ1LCAxNDUsIAorICAgIDIyNSwgMiwgMjUwLCAyNTIsIDIyNiwgMTk4LCAyMjUsIDIsIDI1MCwgMjUyLCAyMTcsIDMzLCAyMjYsIDE5OCwgMjE3LCAzMywgCisgICAgMjUzLCAxODgsIDIyNiwgMTk4LCAyNTMsIDE4OCwgMjIzLCAxMjEsIDIxMywgMjQ3LCAyNDgsIDY2LCAyMTUsIDE5MywgMjUzLCAKKyAgICAyNTAsIDIzMiwgMTIzLCAyMTUsIDI1NSwgMjMwLCAxNDQsIDIzMCwgMTIxLCAyMjMsIDE2NCwgMjE4LCA3LCAyMjMsIDE2NCwgCisgICAgMjMwLCAxMjEsIDI1MSwgMzYsIDI1NCwgMjM4LCAyMTUsIDI0NiwgMjIwLCAxOCwgMjIyLCAxODQsIDIxOSwgMywgMjAzLCAKKyAgICAyMTUsIDI1MywgMjMyLCAyMzYsIDY3LCAyMTUsIDI1MywgMjMyLCAyMzYsIDI0OSwgMTk4LCA1MCwgMjI1LCAyLCAyNTAsIAorICAgIDIzNywgMjIzLCA0NywgMjMyLCAyMzYsIDIxNSwgMjIzLCAyNDQsIDgyLCAyMjYsIDIwMSwgMjI0LCAyNDEsIDI0NywgMTMxLCAKKyAgICAyMjgsIDgwLCAyNDUsIDEzMywgNTAsIDIxOSwgNzQsIDg3LCAyMjgsIDgwLCAyMTksIDc0LCA4NywgMjI0LCAxMjUsIDIzMiwgCisgICAgMTk5LCAyMzYsIDcsIDIzNSwgMTYzLCAyMjUsIDQ0LCA4NywgMjQ3LCAxNTQsIDIyOCwgNTcsIDIzMiwgMTk5LCA4NywgMjI0LCAKKyAgICAyMzUsIDIxMiwgNDEsIDg3LCAyMjgsIDcxLCAyMTIsIDQxLCA4NywgMjUyLCAxMCwgMjI4LCA4MCwgMjUyLCA5LCAyNTIsIDgsIAorICAgIDIzMCwgMTIxLCAyNTIsIDgsIDIyNSwgMjE2LCAyMjgsIDgwLCAyMjUsIDIxNSwgMjUwLCAxMDgsIDI0OSwgMTMyLCAyMzEsIAorICAgIDYxLCA4NywgMjExLCAyMTgsIDg3LCAyMjMsIDYyLCAyNTIsIDE5NSwgODcsIDIxNiwgMzgsIDIxMiwgNDEsIDI1MCwgNSwgCisgICAgMjE5LCAyMzYsIDI1MiwgMTI2LCAyNTIsIDEyNCwgMjI1LCAyNDYsIDI0OSwgMTg1LCAyNDksIDk0LCAyNTIsIDE3NywgMjUwLCAKKyAgICAzMCwgNDMsIDIzMiwgOTUsIDEwOCwgMTYsIDMxLCAyMjQsIDYsIDEwOCwgMTYsIDMxLCAyNTQsIDIwMSwgMTA4LCAxNiwgMzEsIAorICAgIDI0NCwgMTA0LCAxMDgsIDE2LCAzMSwgMjQ1LCAyMzEsIDEwOCwgMTYsIDMxLCAyMTIsIDQwLCAxMDgsIDE2LCAzMSwgMjU0LCAKKyAgICA1MSwgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIyMywgMTA4LCAxMDgsIDE2LCAzMSwgMjU0LCA1MiwgMjIzLCAxMDcsIDEwOCwgCisgICAgMTYsIDMxLCAyNTQsIDUyLCAyMTMsIDE0MywgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIxMywgMTQyLCAxMDgsIDE2LCAzMSwgCiAgICAgMjEzLCAxNTcsIDEwOCwgMTYsIDMxLCAyMTMsIDE1NiwgMTA4LCAxNiwgMzEsIDIxMywgMTU1LCAxMDgsIDE2LCAzMSwgMjE4LCAKLSAgICA0NCwgMTA4LCAxNiwgMzEsIDIyNSwgMTI1LCAyMTgsIDQ0LCAxMDgsIDE2LCAzMSwgODUsIDIxOCwgNDQsIDEwOCwgMTYsIAotICAgIDMxLCAyMzEsIDU1LCAyMTgsIDcxLCAxMDgsIDE2LCAzMSwgMjMxLCA1NSwgMjE4LCA3MCwgMTA4LCAxNiwgMzEsIDIzMSwgCi0gICAgNTUsIDIxOCwgNjksIDEwOCwgMTYsIDMxLCAyNTAsIDM4LCAxMDgsIDE2LCAzMSwgMjIyLCAxLCAxMDgsIDE2LCAzMSwgMjI4LCAKLSAgICAxODgsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MSwgMTA4LCAxNiwgMzEsIDIxMywgMTQwLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDQsIAotICAgIDIyMiwgMSwgMTA4LCAxNiwgMzEsIDIyMiwgMjA0LCAyMjIsIDAsIDEwOCwgMTYsIDMxLCAyNDIsIDE2NiwgMTA4LCAxNiwgCi0gICAgMzEsIDIxOSwgMTY2LCAxMDgsIDE2LCAzMSwgMjM1LCAxNzcsIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjM1LCAxNzcsIAotICAgIDIyNiwgMTUyLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyMzUsIDE3NiwgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCA2NCwgCi0gICAgMjM1LCAxNzYsIDEwOCwgMTYsIDMxLCAyNDksIDE2OCwgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyMzUsIDE3NSwgMjI2LCAKLSAgICAxNTMsIDEwOCwgMTYsIDMxLCAyMTgsIDcyLCA2NCwgMjQ5LCAxNjcsIDEwOCwgMTYsIDMxLCAyNDksIDEzNCwgNjQsIDI0OSwgCi0gICAgMTY3LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyNDksIDE2NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTY4LCAyNTQsIDgzLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIyLCAyLCA2NCwgMjQ5LCAxNjgsIDI1NCwgODMsIDEwOCwgMTYsIDMxLCAyMTgsIDcyLCA2NCwgCi0gICAgMjIyLCAyLCA2NCwgMjQ5LCAxNjcsIDEwOCwgMTYsIDMxLCAyMTMsIDI0MywgMTA4LCAxNiwgMzEsIDIxNiwgODQsIDIyNiwgCi0gICAgMTUzLCAxMDgsIDE2LCAzMSwgMjMzLCA1NywgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyNTQsIDgyLCAyMjYsIDE1MywgMTA4LCAKLSAgICAxNiwgMzEsIDIxOCwgNzIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjIyLCAyLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgCi0gICAgMzEsIDIxOCwgNzIsIDY0LCAyMjIsIDIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjEzLCAxNTgsIDY0LCAyNTQsIDgxLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAyNTQsIDgwLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDAsIDEwOCwgMTYsIDMxLCAyMjMsIDk5LCAxMDgsIDE2LCAzMSwgMjIzLCA5OCwgMTA4LCAKLSAgICAxNiwgMzEsIDIyMywgOTcsIDEwOCwgMTYsIDMxLCAyNTQsIDE1NywgMTA4LCAxNiwgMzEsIDI1NCwgMTU2LCAxMDgsIDE2LCAKLSAgICAzMSwgMjMxLCAxNjMsIDEwOCwgMTYsIDMxLCAyMjIsIDcsIDEwOCwgMTYsIDMxLCAyNTMsIDI0NiwgMTA4LCAxNiwgMzEsIAotICAgIDIyMywgMTI1LCAxMDgsIDE2LCAzMSwgMjIzLCAxMjQsIDEwOCwgMTYsIDMxLCAyNTMsIDE4MywgMTA4LCAxNiwgMzEsIDI1MSwgCi0gICAgMjI5LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDIxNywgNDksIDEwOCwgMTYsIDMxLCAyMTcsIDQ4LCAxMDgsIDE2LCAzMSwgCi0gICAgMjI0LCA4LCAyMzIsIDIyMiwgMTA4LCAxNiwgMzEsIDI1MSwgMTgzLCAxMDgsIDE2LCAzMSwgMjUxLCAxODIsIDEwOCwgMTYsIAotICAgIDMxLCAyNTEsIDE4MSwgMTA4LCAxNiwgMzEsIDI1NCwgMTM4LCAxMDgsIDE2LCAzMSwgMjI2LCAyMTgsIDEwOCwgMTYsIDMxLCAKLSAgICAyMTgsIDI0OCwgMTA4LCAxNiwgMzEsIDIxNiwgODIsIDEwOCwgMTYsIDMxLCAyNDIsIDk2LCAxMDgsIDE2LCAzMSwgMjEyLCAKLSAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI2LCAxMDgsIDE2LCAzMSwgMjUxLCAxNCwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAotICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI0NiwgMjMwLCAxMjIsIDEwOCwgMTYsIDMxLCAyMjEsIDIwMiwgNjQsIDIzNSwgNTUsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTEsIDI1LCAxMDgsIDE2LCAzMSwgMjE1LCAyMTksIDEwOCwgMTYsIDMxLCAyMTgsIDE1NCwgMjE1LCAyMTksIAotICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE0OCwgMTA4LCAxNiwgMzEsIDIxOSwgNTYsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI0MCwgMjQ2LCAyNDYsIDY0LCAxMDgsIDE2LCAzMSwgMjUzLCAyMjcsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNCwgCi0gICAgMjUzLCAyMjcsIDEwOCwgMTYsIDMxLCAyNTEsIDE0MiwgMTA4LCAxNiwgMzEsIDIyNCwgMjI1LCAyNTEsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI1NCwgMTM1LCAxMDgsIDE2LCAzMSwgMjE4LCAxMTcsIDIxOCwgMjYsIDIxOCwgMTE2LCAxMDgsIDE2LCAzMSwgCi0gICAgMjE4LCAxMTcsIDIxOCwgMjYsIDIxOCwgMTE1LCAxMDgsIDE2LCAzMSwgMjE4LCA2OCwgMTA4LCAxNiwgMzEsIDIyNCwgMjAwLCAKLSAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODEsIDEwOCwgMTYsIDMxLCAyNDcsIDE4MywgMTA4LCAxNiwgMzEsIDI0NywgMTgyLCAxMDgsIAotICAgIDE2LCAzMSwgMjI0LCAxMzEsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMCwgMTA4LCAxNiwgMzEsIDI0OSwgMTIyLCAxMDgsIDE2LCAKLSAgICAzMSwgMjQ5LCAxMjEsIDEwOCwgMTYsIDMxLCAyNDksIDEyMCwgMTA4LCAxNiwgMzEsIDI0OSwgMTE5LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ5LCAxMTgsIDEwOCwgMTYsIDMxLCAyNTQsIDE2OSwgMTA4LCAxNiwgMzEsIDI1MiwgMTE5LCA2NCwgMjMxLCAxNDksIAotICAgIDEwOCwgMTYsIDMxLCAyNTIsIDExOSwgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDU3LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQwLCAyMzgsIDEwOCwgMTYsIDMxLCAyMjgsIDIxMiwgMTA4LCAxNiwgMzEsIDI0OCwgMTQ1LCAxMDgsIDE2LCAzMSwgMjMwLCAKLSAgICAxMzQsIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgOTQsIDEwOCwgMTYsIDMxLCAxNjMsIDIyNiwgMTMyLCA5LCAxNCwgMjQwLCAKLSAgICAxMDIsIDksIDE0LCAyNDAsIDEwMSwgOSwgMTQsIDI0MCwgMTAwLCA5LCAxNCwgMjQwLCA5OSwgOSwgMTQsIDI0MCwgOTgsIDksIAotICAgIDE0LCAyNDAsIDk3LCA5LCAxNCwgMjQwLCA5NiwgOSwgMTQsIDI0MCwgOTUsIDksIDE0LCAyNDAsIDk0LCA5LCAxNCwgMjQwLCAKLSAgICA5MywgOSwgMTQsIDI0MCwgOTIsIDksIDE0LCAyNDAsIDkxLCA5LCAxNCwgMjQwLCA5MCwgOSwgMTQsIDI0MCwgODksIDksIAotICAgIDE0LCAyNDAsIDg4LCA5LCAxNCwgMjQwLCA4NywgOSwgMTQsIDI0MCwgODYsIDksIDE0LCAyNDAsIDg1LCA5LCAxNCwgMjQwLCAKLSAgICA4NCwgOSwgMTQsIDI0MCwgODMsIDksIDE0LCAyNDAsIDgyLCA5LCAxNCwgMjQwLCA4MSwgOSwgMTQsIDI0MCwgODAsIDksIAotICAgIDE0LCAyNDAsIDc5LCA5LCAxNCwgMjQwLCA3OCwgOSwgMTQsIDI0MCwgNzcsIDksIDE0LCAyNDAsIDc2LCA5LCAxNCwgMjQwLCAKLSAgICA3NSwgOSwgMTQsIDI0MCwgNzQsIDksIDE0LCAyNDAsIDczLCA5LCAxNCwgMjQwLCA3MiwgOSwgMTQsIDI0MCwgNzEsIDksIAotICAgIDE0LCAyNDAsIDcwLCA5LCAxNCwgMjQwLCA2OSwgOSwgMTQsIDI0MCwgNjgsIDksIDE0LCAyNDAsIDY3LCA5LCAxNCwgMjQwLCAKLSAgICA2NiwgOSwgMTQsIDI0MCwgNjUsIDksIDE0LCAyNDAsIDY0LCA5LCAxNCwgMjQwLCA2MywgOSwgMTQsIDI0MCwgNjIsIDksIAotICAgIDE0LCAyNDAsIDYxLCA5LCAxNCwgMjQwLCA2MCwgOSwgMTQsIDI0MCwgNTksIDksIDE0LCAyNDAsIDU4LCA5LCAxNCwgMjQwLCAKLSAgICA1NywgOSwgMTQsIDI0MCwgNTYsIDksIDE0LCAyNDAsIDU1LCA5LCAxNCwgMjQwLCA1NCwgOSwgMTQsIDI0MCwgNTMsIDksIAotICAgIDE0LCAyNDAsIDUyLCA5LCAxNCwgMjQwLCA1MSwgOSwgMTQsIDI0MCwgNTAsIDksIDE0LCAyNDAsIDQ5LCA5LCAxNCwgMjQwLCAKLSAgICA0OCwgOSwgMTQsIDI0MCwgNDcsIDksIDE0LCAyNDAsIDQ2LCA5LCAxNCwgMjQwLCA0NSwgOSwgMTQsIDI0MCwgNDQsIDksIAotICAgIDE0LCAyNDAsIDQzLCA5LCAxNCwgMjQwLCA0MiwgOSwgMTQsIDI0MCwgNDEsIDksIDE0LCAyNDAsIDQwLCA5LCAxNCwgMjQwLCAKLSAgICAzOSwgOSwgMTQsIDI0MCwgMzgsIDksIDE0LCAyNDAsIDM3LCA5LCAxNCwgMjQwLCAzNiwgOSwgMTQsIDI0MCwgMzUsIDksIAotICAgIDE0LCAyNDAsIDM0LCA5LCAxNCwgMjQwLCAzMywgOSwgMTQsIDI0MCwgMzIsIDksIDE0LCAyNDAsIDMxLCA5LCAxNCwgMjQwLCAKLSAgICAzMCwgOSwgMTQsIDI0MCwgMjksIDksIDE0LCAyNDAsIDI4LCA5LCAxNCwgMjQwLCAyNywgOSwgMTQsIDI0MCwgMjYsIDksIAotICAgIDE0LCAyNDAsIDI1LCA5LCAxNCwgMjQwLCAyNCwgOSwgMTQsIDI0MCwgMjMsIDksIDE0LCAyNDAsIDIyLCA5LCAxNCwgMjQwLCAKLSAgICAyMSwgOSwgMTQsIDI0MCwgMjAsIDksIDE0LCAyNDAsIDE5LCA5LCAxNCwgMjQwLCAxOCwgOSwgMTQsIDI0MCwgMTcsIDksIAotICAgIDE0LCAyNDAsIDE2LCA5LCAxNCwgMjQwLCAxNSwgOSwgMTQsIDI0MCwgMTQsIDksIDE0LCAyNDAsIDEzLCA5LCAxNCwgMjQwLCAKLSAgICAxMiwgOSwgMTQsIDI0MCwgMTEsIDksIDE0LCAyNDAsIDEwLCA5LCAxNCwgMjQwLCA5LCA5LCAxNCwgMjQwLCA4LCA5LCAxNCwgCi0gICAgMjQwLCA3LCA5LCAxNCwgMjQwLCA2LCA5LCAxNCwgMjQwLCA1LCA5LCAxNCwgMjQwLCA0LCA5LCAxNCwgMjQwLCAzLCA5LCAKLSAgICAxNCwgMjQwLCAyLCA5LCAxNCwgMjQwLCAxLCA5LCAxNCwgMjQwLCAwLCA5LCAxNCwgMjM5LCAyNTUsIDksIDE0LCAyMzksIAotICAgIDI1NCwgOSwgMTQsIDIzOSwgMjUzLCA5LCAxNCwgMjM5LCAyNTIsIDksIDE0LCAyMzksIDI1MSwgOSwgMTQsIDIzOSwgMjUwLCAKLSAgICA5LCAxNCwgMjM5LCAyNDksIDksIDE0LCAyMzksIDI0OCwgOSwgMTQsIDIzOSwgMjQ3LCA5LCAxNCwgMjM5LCAyNDYsIDksIAotICAgIDE0LCAyMzksIDI0NSwgOSwgMTQsIDIzOSwgMjQ0LCA5LCAxNCwgMjM5LCAyNDMsIDksIDE0LCAyMzksIDI0MiwgOSwgMTQsIAotICAgIDIzOSwgMjQxLCA5LCAxNCwgMjM5LCAyNDAsIDksIDE0LCAyMzksIDIzOSwgOSwgMTQsIDIzOSwgMjM4LCA5LCAxNCwgMjM5LCAKLSAgICAyMzcsIDksIDE0LCAyMzksIDIzNiwgOSwgMTQsIDIzOSwgMjM1LCA5LCAxNCwgMjM5LCAyMzQsIDksIDE0LCAyMzksIDIzMywgCi0gICAgOSwgMTQsIDIzOSwgMjMyLCA5LCAxNCwgMjM5LCAyMzEsIDksIDE0LCAyMzksIDIzMCwgOSwgMTQsIDIzOSwgMjI5LCA5LCAKLSAgICAxNCwgMjM5LCAyMjgsIDksIDE0LCAyMzksIDIyNywgOSwgMTQsIDIzOSwgMjI2LCA5LCAxNCwgMjM5LCAyMjUsIDksIDE0LCAKLSAgICAyMzksIDIyNCwgOSwgMTQsIDIzOSwgMjIzLCA5LCAxNCwgMjM5LCAyMjIsIDksIDE0LCAyMzksIDIyMSwgOSwgMTQsIDIzOSwgCi0gICAgMjIwLCA5LCAxNCwgMjM5LCAyMTksIDksIDE0LCAyMzksIDIxOCwgOSwgMTQsIDIzOSwgMjE3LCA5LCAxNCwgMjM5LCAyMTYsIAotICAgIDksIDE0LCAyMzksIDIxNSwgOSwgMTQsIDIzOSwgMjE0LCA5LCAxNCwgMjM5LCAyMTMsIDksIDE0LCAyMzksIDIxMiwgOSwgCi0gICAgMTQsIDIzOSwgMjExLCA5LCAxNCwgMjM5LCAyMTAsIDksIDE0LCAyMzksIDIwOSwgOSwgMTQsIDIzOSwgMjA4LCA5LCAxNCwgCi0gICAgMjM5LCAyMDcsIDksIDE0LCAyMzksIDIwNiwgOSwgMTQsIDIzOSwgMjA1LCA5LCAxNCwgMjM5LCAyMDQsIDksIDE0LCAyMzksIAotICAgIDIwMywgOSwgMTQsIDIzOSwgMjAyLCA5LCAxNCwgMjM5LCAyMDEsIDksIDE0LCAyMzksIDIwMCwgOSwgMTQsIDIzOSwgMTk5LCAKLSAgICA5LCAxNCwgMjM5LCAxOTgsIDksIDE0LCAyMzksIDE5NywgOSwgMTQsIDIzOSwgMTk2LCA5LCAxNCwgMjM5LCAxOTUsIDksIAotICAgIDE0LCAyMzksIDE5NCwgOSwgMTQsIDIzOSwgMTkzLCA5LCAxNCwgMjM5LCAxOTIsIDksIDE0LCAyMzksIDE5MSwgOSwgMTQsIAotICAgIDIzOSwgMTkwLCA5LCAxNCwgMjM5LCAxODksIDksIDE0LCAyMzksIDE4OCwgOSwgMTQsIDIzOSwgMTg3LCA5LCAxNCwgMjM5LCAKLSAgICAxODYsIDksIDE0LCAyMzksIDE4NSwgOSwgMTQsIDIzOSwgMTg0LCA5LCAxNCwgMjM5LCAxODMsIDksIDE0LCAyMzksIDE4MiwgCi0gICAgOSwgMTQsIDIzOSwgMTgxLCA5LCAxNCwgMjM5LCAxODAsIDksIDE0LCAyMzksIDE3OSwgOSwgMTQsIDIzOSwgMTc4LCA5LCAKLSAgICAxNCwgMjM5LCAxNzcsIDksIDE0LCAyMzksIDE3NiwgOSwgMTQsIDIzOSwgMTc1LCA5LCAxNCwgMjM5LCAxNzQsIDksIDE0LCAKLSAgICAyMzksIDE3MywgOSwgMTQsIDIzOSwgMTcyLCA5LCAxNCwgMjM5LCAxNzEsIDksIDE0LCAyMzksIDE3MCwgOSwgMTQsIDIzOSwgCi0gICAgMTY5LCA5LCAxNCwgMjM5LCAxNjgsIDksIDE0LCAyMzksIDE2NywgOSwgMTQsIDIzOSwgMTY2LCA5LCAxNCwgMjM5LCAxNjUsIAotICAgIDksIDE0LCAyMzksIDE2NCwgOSwgMTQsIDIzOSwgMTYzLCA5LCAxNCwgMjM5LCAxNjIsIDksIDE0LCAyMzksIDE2MSwgOSwgCi0gICAgMTQsIDIzOSwgMTYwLCA5LCAxNCwgMjM5LCAxNTksIDksIDE0LCAyMzksIDE1OCwgOSwgMTQsIDIzOSwgMTU3LCA5LCAxNCwgCi0gICAgMjM5LCAxNTYsIDksIDE0LCAyMzksIDE1NSwgOSwgMTQsIDIzOSwgMTU0LCA5LCAxNCwgMjM5LCAxNTMsIDksIDE0LCAyMzksIAotICAgIDE1MiwgOSwgMTQsIDIzOSwgMTUxLCA5LCAxNCwgMjM5LCAxNTAsIDksIDE0LCAyMzksIDE0OSwgOSwgMTQsIDIzOSwgMTQ4LCAKLSAgICA5LCAxNCwgMjM5LCAxNDcsIDksIDE0LCAyMzksIDE0NiwgOSwgMTQsIDIzOSwgMTQ1LCA5LCAxNCwgMjM5LCAxNDQsIDksIAotICAgIDE0LCAyMzksIDE0MywgOSwgMTQsIDIzOSwgMTQyLCA5LCAxNCwgMjM5LCAxNDEsIDksIDE0LCAyMzksIDE0MCwgOSwgMTQsIAotICAgIDIzOSwgMTM5LCA5LCAxNCwgMjM5LCAxMzgsIDksIDE0LCAyMzksIDEzNywgOSwgMTQsIDIzOSwgMTM2LCA5LCAxNCwgMjM5LCAKLSAgICAxMzUsIDksIDE0LCAyMzksIDEzNCwgOSwgMTQsIDIzOSwgMTMzLCA5LCAxNCwgMjM5LCAxMzIsIDksIDE0LCAyMzksIDEzMSwgCi0gICAgOSwgMTQsIDIzOSwgMTMwLCA5LCAxNCwgMjM5LCAxMjksIDksIDE0LCAyMzksIDEyOCwgOSwgMTQsIDIzOSwgMTI3LCA5LCAKLSAgICAxNCwgMjM5LCAxMjYsIDksIDE0LCAyMzksIDEyNSwgOSwgMTQsIDIzOSwgMTI0LCA5LCAxNCwgMjM5LCAxMjMsIDksIDE0LCAKLSAgICAyMzksIDEyMiwgOSwgMTQsIDIzOSwgMTIxLCA5LCAxNCwgMjM5LCAxMjAsIDksIDE0LCAyMzksIDExOSwgOSwgMTQsIDIzOSwgCi0gICAgMTE4LCA5LCAxNCwgMjM5LCAxMTcsIDksIDE0LCAyMzksIDExNiwgOSwgMTQsIDIzOSwgMTE1LCA5LCAxNCwgMjM5LCAxMTQsIAotICAgIDksIDE0LCAyMzksIDExMywgOSwgMTQsIDIzOSwgMTEyLCA5LCAxNCwgMjM5LCAxMTEsIDksIDE0LCAyMzksIDExMCwgOSwgCi0gICAgMTQsIDIzOSwgMTA5LCA5LCAxNCwgMjM5LCAxMDgsIDksIDE0LCAyMzksIDEwNywgOSwgMTQsIDIzOSwgMTA2LCA5LCAxNCwgCi0gICAgMjM5LCAxMDUsIDksIDE0LCAyMzksIDEwNCwgOSwgMTQsIDIzOSwgMTAzLCA5LCAxNCwgMjM5LCAxMDIsIDksIDE0LCAyMzksIAotICAgIDEwMSwgOSwgMTQsIDIzOSwgMTAwLCA5LCAxNCwgMjM5LCA5OSwgOSwgMTQsIDIzOSwgOTgsIDksIDE0LCAyMzksIDk3LCA5LCAKLSAgICAxNCwgMjM5LCA5NiwgOSwgMTQsIDIzOSwgOTUsIDksIDE0LCAyMzksIDk0LCA5LCAxNCwgMjM5LCA5MywgOSwgMTQsIDIzOSwgCi0gICAgOTIsIDksIDE0LCAyMzksIDkxLCA5LCAxNCwgMjM5LCA5MCwgOSwgMTQsIDIzOSwgODksIDksIDE0LCAyMzksIDg4LCA5LCAKLSAgICAxNCwgMjM5LCA4NywgOSwgMTQsIDIzOSwgODYsIDksIDE0LCAyMzksIDg1LCA5LCAxNCwgMjM5LCA4NCwgOSwgMTQsIDIzOSwgCi0gICAgODMsIDksIDE0LCAyMzksIDgyLCA5LCAxNCwgMjM5LCA4MSwgOSwgMTQsIDIzOSwgODAsIDksIDE0LCAyMzksIDc5LCA5LCAKLSAgICAxNCwgMjM5LCA3OCwgOSwgMTQsIDIzOSwgNzcsIDksIDE0LCAyMzksIDc2LCA5LCAxNCwgMjM5LCA3NSwgOSwgMTQsIDIzOSwgCi0gICAgNzQsIDksIDE0LCAyMzksIDczLCA5LCAxNCwgMjM5LCA3MiwgOSwgMTQsIDIzOSwgNzEsIDksIDE0LCAyMzksIDcwLCA5LCAKLSAgICAxNCwgMjM5LCA2OSwgOSwgMTQsIDIzOSwgNjgsIDksIDE0LCAyMzksIDY3LCA5LCAxNCwgMjM5LCA2NiwgOSwgMTQsIDIzOSwgCi0gICAgNjUsIDksIDE0LCAyMzksIDY0LCA5LCAxNCwgMjM5LCA2MywgOSwgMTQsIDIzOSwgNjIsIDksIDE0LCAyMzksIDYxLCA5LCAKLSAgICAxNCwgMjM5LCA2MCwgOSwgMTQsIDIzOSwgNTksIDksIDE0LCAyMzksIDU4LCA5LCAxNCwgMjM5LCA1NywgOSwgMTQsIDIzOSwgCi0gICAgNTYsIDksIDE0LCAyMzksIDU1LCA5LCAxNCwgMjM5LCA1NCwgOSwgMTQsIDIzOSwgNTMsIDksIDE0LCAyMzksIDUyLCA5LCAKLSAgICAxNCwgMjM5LCA1MSwgOSwgMTQsIDIzOSwgNTAsIDksIDE0LCAyMzksIDQ5LCA5LCAxNCwgMjM5LCA0OCwgOSwgMTQsIDIzOSwgCi0gICAgNDcsIDksIDE0LCAyMzksIDQ2LCA5LCAxNCwgMjM5LCA0NSwgOSwgMTQsIDIzOSwgNDQsIDksIDE0LCAyMzksIDQzLCA5LCAKLSAgICAxNCwgMjM5LCA0MiwgOSwgMTQsIDIzOSwgNDEsIDksIDE0LCAyMzksIDQwLCA5LCAxNCwgMjM5LCAzOSwgOSwgMTQsIDIzOSwgCi0gICAgMzgsIDksIDE0LCAyMzksIDM3LCA5LCAxNCwgMjM5LCAzNiwgOSwgMTQsIDIzOSwgMzUsIDksIDE0LCAyMzksIDM0LCA5LCAKLSAgICAxNCwgMjM5LCAzMywgOSwgMTQsIDIzOSwgMzIsIDksIDE0LCAyMzksIDMxLCA5LCAxNCwgMjM5LCAzMCwgOSwgMTQsIDIzOSwgCi0gICAgMjksIDksIDE0LCAyMzksIDI4LCA5LCAxNCwgMjM5LCAyNywgOSwgMTQsIDIzOSwgMjYsIDksIDE0LCAyMzksIDI1LCA5LCAKLSAgICAxNCwgMjM5LCAyNCwgOSwgMTQsIDIzOSwgMjMsIDksIDE0LCAyMzksIDIyLCA5LCAxNCwgMjM5LCAyMSwgOSwgMTQsIDIzOSwgCi0gICAgMjAsIDksIDE0LCAyMzksIDE5LCA5LCAxNCwgMjM5LCAxOCwgOSwgMTQsIDIzOSwgMTcsIDksIDE0LCAyMzksIDE2LCA5LCAKLSAgICAxNCwgMjM5LCAxNSwgOSwgMTQsIDIzOSwgMTQsIDksIDE0LCAyMzksIDEzLCA5LCAxNCwgMjM5LCAxMiwgOSwgMTQsIDIzOSwgCi0gICAgMTEsIDksIDE0LCAyMzksIDEwLCA5LCAxNCwgMjM5LCA5LCA5LCAxNCwgMjM5LCA4LCA5LCAxNCwgMjM5LCA3LCA5LCAxNCwgCi0gICAgMjM5LCA2LCA5LCAxNCwgMjM5LCA1LCA5LCAxNCwgMjM5LCA0LCA5LCAxNCwgMjM5LCAzLCA5LCAxNCwgMjM5LCAyLCA5LCAKLSAgICAxNCwgMjM5LCAxLCA5LCAxNCwgMjM5LCAwLCA5LCAxNCwgMjM4LCAyNTUsIDksIDE0LCAyMzgsIDI1NCwgOSwgMTQsIDIzOCwgCi0gICAgMjUzLCA5LCAxNCwgMjM4LCAyNTIsIDksIDE0LCAyMzgsIDI1MSwgOSwgMTQsIDIzOCwgMjUwLCA5LCAxNCwgMjM4LCAyNDksIAotICAgIDksIDE0LCAyMzgsIDI0OCwgOSwgMTQsIDIzOCwgMjQ3LCA5LCAxNCwgMjM4LCAyNDYsIDksIDE0LCAyMzgsIDI0NSwgOSwgCi0gICAgMTQsIDIzOCwgMjQ0LCA5LCAxNCwgMjM4LCAyNDMsIDksIDE0LCAyMzgsIDI0MiwgOSwgMTQsIDIzOCwgMjQxLCA5LCAxNCwgCi0gICAgMjM4LCAyNDAsIDksIDE0LCAyMzgsIDIzOSwgOSwgMTQsIDIzOCwgMjM4LCA5LCAxNCwgMjM4LCAyMzcsIDksIDE0LCAyMzgsIAotICAgIDIzNiwgOSwgMTQsIDIzOCwgMjM1LCA5LCAxNCwgMjM4LCAyMzQsIDksIDE0LCAyMzgsIDIzMywgOSwgMTQsIDIzOCwgMjMyLCAKLSAgICA5LCAxNCwgMjM4LCAyMzEsIDksIDE0LCAyMzgsIDIzMCwgOSwgMTQsIDIzOCwgMjI5LCA5LCAxNCwgMjM4LCAyMjgsIDksIAotICAgIDE0LCAyMzgsIDIyNywgOSwgMTQsIDIzOCwgMjI2LCA5LCAxNCwgMjM4LCAyMjUsIDksIDE0LCAyMzgsIDIyNCwgOSwgMTQsIAotICAgIDIzOCwgMjIzLCA5LCAxNCwgMjM4LCAyMjIsIDksIDE0LCAyMzgsIDIyMSwgOSwgMTQsIDIzOCwgMjIwLCA5LCAxNCwgMjM4LCAKLSAgICAyMTksIDksIDE0LCAyMzgsIDIxOCwgOSwgMTQsIDIzOCwgMjE3LCA5LCAxNCwgMjM4LCAyMTYsIDksIDE0LCAyMzgsIDIxNSwgCi0gICAgOSwgMTQsIDIzOCwgMjE0LCA5LCAxNCwgMjM4LCAyMTMsIDksIDE0LCAyMzgsIDIxMiwgOSwgMTQsIDIzOCwgMjExLCA5LCAKLSAgICAxNCwgMjM4LCAyMTAsIDksIDE0LCAyMzgsIDIwOSwgOSwgMTQsIDIzOCwgMjA4LCA5LCAxNCwgMjM4LCAyMDcsIDksIDE0LCAKLSAgICAyMzgsIDIwNiwgOSwgMTQsIDIzOCwgMjA1LCA5LCAxNCwgMjM4LCAyMDQsIDksIDE0LCAyMzgsIDIwMywgOSwgMTQsIDIzOCwgCi0gICAgMjAyLCA5LCAxNCwgMjM4LCAyMDEsIDksIDE0LCAyMzgsIDIwMCwgOSwgMTQsIDIzOCwgMTk5LCA5LCAxNCwgMjM4LCAxOTgsIAotICAgIDksIDE0LCAyMzgsIDE5NywgOSwgMTQsIDIzOCwgMTk2LCA5LCAxNCwgMjM4LCAxOTUsIDksIDE0LCAyMzgsIDE5NCwgOSwgCi0gICAgMTQsIDIzOCwgMTkzLCA5LCAxNCwgMjM4LCAxOTIsIDksIDE0LCAyMzgsIDE5MSwgOSwgMTQsIDIzOCwgMTkwLCA5LCAxNCwgCi0gICAgMjM4LCAxODksIDksIDE0LCAyMzgsIDE4OCwgOSwgMTQsIDIzOCwgMTg3LCA5LCAxNCwgMjM4LCAxODYsIDksIDE0LCAyMzgsIAotICAgIDE4NSwgOSwgMTQsIDIzOCwgMTg0LCA5LCAxNCwgMjM4LCAxODMsIDksIDE0LCAyMzgsIDE4MiwgOSwgMTQsIDIzOCwgMTgxLCAKLSAgICA5LCAxNCwgMjM4LCAxODAsIDksIDE0LCAyMzgsIDE3OSwgOSwgMTQsIDIzOCwgMTc4LCA5LCAxNCwgMjM4LCAxNzcsIDksIAotICAgIDE0LCAyMzgsIDE3NiwgOSwgMTQsIDIzOCwgMTc1LCA5LCAxNCwgMjM4LCAxNzQsIDksIDE0LCAyMzgsIDE3MywgOSwgMTQsIAotICAgIDIzOCwgMTcyLCA5LCAxNCwgMjM4LCAxNzEsIDksIDE0LCAyMzgsIDE3MCwgOSwgMTQsIDIzOCwgMTY5LCA5LCAxNCwgMjM4LCAKLSAgICAxNjgsIDksIDE0LCAyMzgsIDE2NywgOSwgMTQsIDIzOCwgMTY2LCA5LCAxNCwgMjM4LCAxNjUsIDksIDE0LCAyMzgsIDE2NCwgCi0gICAgOSwgMTQsIDIzOCwgMTYzLCA5LCAxNCwgMjM4LCAxNjIsIDksIDE0LCAyMzgsIDE2MSwgOSwgMTQsIDIzOCwgMTYwLCA5LCAKLSAgICAxNCwgMjM4LCAxNTksIDksIDE0LCAyMzgsIDE1OCwgOSwgMTQsIDIzOCwgMTU3LCA5LCAxNCwgMjM4LCAxNTYsIDksIDE0LCAKLSAgICAyMzgsIDE1NSwgOSwgMTQsIDIzOCwgMTU0LCA5LCAxNCwgMjM4LCAxNTMsIDksIDE0LCAyMzgsIDE1MiwgOSwgMTQsIDIzOCwgCi0gICAgMTUxLCA5LCAxNCwgMjM4LCAxNTAsIDksIDE0LCAyMzgsIDE0OSwgOSwgMTQsIDIzOCwgMTQ4LCA5LCAxNCwgMjM4LCAxNDcsIAotICAgIDksIDE0LCAyMzgsIDE0NiwgOSwgMTQsIDIzOCwgMTQ1LCA5LCAxNCwgMjM4LCAxNDQsIDksIDE0LCAyMzgsIDE0MywgOSwgCi0gICAgMTQsIDIzOCwgMTQyLCA5LCAxNCwgMjM4LCAxNDEsIDksIDE0LCAyMzgsIDE0MCwgOSwgMTQsIDIzOCwgMTM5LCA5LCAxNCwgCi0gICAgMjM4LCAxMzgsIDksIDE0LCAyMzgsIDEzNywgOSwgMTQsIDIzOCwgMTM2LCA5LCAxNCwgMjM4LCAxMzUsIDksIDE0LCAyMzgsIAotICAgIDEzNCwgOSwgMTQsIDIzOCwgMTMzLCA5LCAxNCwgMjM4LCAxMzIsIDksIDE0LCAyMzgsIDEzMSwgOSwgMTQsIDIzOCwgMTMwLCAKLSAgICA5LCAxNCwgMjM4LCAxMjksIDksIDE0LCAyMzgsIDEyOCwgOSwgMTQsIDIzOCwgMTI3LCA5LCAxNCwgMjM4LCAxMjYsIDksIAotICAgIDE0LCAyMzgsIDEyNSwgOSwgMTQsIDIzOCwgMTI0LCA5LCAxNCwgMjM4LCAxMjMsIDksIDE0LCAyMzgsIDEyMiwgOSwgMTQsIAotICAgIDIzOCwgMTIxLCA5LCAxNCwgMjM4LCAxMjAsIDksIDE0LCAyMzgsIDExOSwgOSwgMTQsIDIzOCwgMTE4LCA5LCAxNCwgMjM4LCAKLSAgICAxMTcsIDksIDE0LCAyMzgsIDExNiwgOSwgMTQsIDIzOCwgMTE1LCA5LCAxNCwgMjM4LCAxMTQsIDksIDE0LCAyMzgsIDExMywgCi0gICAgOSwgMTQsIDIzOCwgMTEyLCA5LCAxNCwgMjM4LCAxMTEsIDksIDE0LCAyMzgsIDExMCwgOSwgMTQsIDIzOCwgMTA5LCA5LCAKLSAgICAxNCwgMjM4LCAxMDgsIDksIDE0LCAyMzgsIDEwNywgOSwgMTQsIDIzOCwgMTA2LCA5LCAxNCwgMjM4LCAxMDUsIDksIDE0LCAKLSAgICAyMzgsIDEwNCwgOSwgMTQsIDIzOCwgMTAzLCA5LCAxNCwgMjM4LCAxMDIsIDksIDE0LCAyMzgsIDEwMSwgOSwgMTQsIDIzOCwgCi0gICAgMTAwLCA5LCAxNCwgMjM4LCA5OSwgOSwgMTQsIDIzOCwgOTgsIDksIDE0LCAyMzgsIDk3LCA5LCAxNCwgMjM4LCA5NiwgOSwgCi0gICAgMTQsIDIzOCwgOTUsIDksIDE0LCAyMzgsIDk0LCA5LCAxNCwgMjM4LCA5MywgOSwgMTQsIDIzOCwgOTIsIDksIDE0LCAyMzgsIAotICAgIDkxLCA5LCAxNCwgMjM4LCA5MCwgOSwgMTQsIDIzOCwgODksIDksIDE0LCAyMzgsIDg4LCA5LCAxNCwgMjM4LCA4NywgOSwgCi0gICAgMTQsIDIzOCwgODYsIDksIDE0LCAyMzgsIDg1LCA5LCAxNCwgMjM4LCA4NCwgOSwgMTQsIDIzOCwgODMsIDksIDE0LCAyMzgsIAotICAgIDgyLCA5LCAxNCwgMjM4LCA4MSwgOSwgMTQsIDIzOCwgODAsIDksIDE0LCAyMzgsIDc5LCA5LCAxNCwgMjM4LCA3OCwgOSwgCi0gICAgMTQsIDIzOCwgNzcsIDksIDE0LCAyMzgsIDc2LCA5LCAxNCwgMjM4LCA3NSwgOSwgMTQsIDIzOCwgNzQsIDksIDE0LCAyMzgsIAotICAgIDczLCAyMzMsIDkwLCAyMTcsIDg0LCAxMjksIDIxOSwgMTgsIDEyOSwgMjQ1LCAzMSwgNzgsIDEyOSwgMjIzLCAyNTQsIDc4LCAKLSAgICAxMjksIDU0LCA1MCwgMTI5LCAyNDcsIDEzMiwgNTAsIDEyOSwgMjI1LCAxODIsIDUwLCAxMjksIDI1NCwgMTI2LCAxMjksIAotICAgIDI1NCwgNTcsIDEyOSwgNDMsIDIyNiwgMywgMTI5LCA0NCwgMjI2LCAzLCAxMjksIDI1MywgMjE2LCAxMjksIDk2LCA1MCwgCi0gICAgMTI5LCAyNDksIDIxOSwgMTI5LCAyNDAsIDE2NywgMTI5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDEyOSwgMjE5LCA0NiwgMTI5LCAKLSAgICAyMSwgMjEwLCA4NiwgMTI5LCAyMSwgMTEwLCAxMjksIDIxLCAxMDUsIDEyOSwgMjEsIDE1OCwgMTI5LCAyMSwgMTYxLCAxMjksIAotICAgIDIxLCAxODksIDEyOSwgMjEsIDE5NCwgMTI5LCAyMSwgMTk4LCAxMjksIDIxLCAxOTUsIDEyOSwgMjEsIDIwMCwgMTI5LCAKLSAgICAyNDksIDIyNiwgMTI5LCAyMjAsIDE1MCwgMTI5LCAyMzMsIDE1LCA1MCwgMTI5LCAyNDUsIDk4LCA1MCwgMTI5LCAyNDIsIAotICAgIDEzMCwgNTAsIDEyOSwgMjI0LCAxMywgNzgsIDEyOSwgMjQ5LCAyMTcsIDI1MywgMjA2LCAxMjksIDcsIDYsIDEsIDYxLCAKLSAgICAxMjksIDcsIDYsIDEsIDI1MywgMTU4LCAxMjksIDcsIDYsIDEsIDI1MSwgNjYsIDEyOSwgNywgNiwgMSwgMjQ5LCA2MCwgCi0gICAgMTI5LCA3LCA2LCAxLCA3NSwgMTI5LCA3LCA2LCAxLCAyNDUsIDYsIDEyOSwgNywgNiwgMSwgMjQzLCAyMDIsIDEyOSwgNywgCi0gICAgNiwgMSwgMjQyLCA2MCwgMTI5LCA3LCA2LCAxLCA3MywgMTI5LCA3LCA2LCAxLCAyMzUsIDE0NCwgMTI5LCA3LCA2LCAxLCAKLSAgICAyMzUsIDIzLCAxMjksIDcsIDYsIDEsIDE1NiwgMTI5LCA3LCA2LCAxLCAxOTMsIDEyOSwgNywgNiwgMSwgMjMwLCAyNSwgCi0gICAgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCA3LCA2LCAxLCAyMjYsIDEwNSwgMTI5LCA3LCA2LCAxLCAyMjQsIDk2LCAxMjksIDcsIAotICAgIDYsIDEsIDE1MywgMTI5LCA3LCA2LCAxLCAyMjIsIDkxLCAxMjksIDcsIDYsIDEsIDIxNywgMTUyLCAxMjksIDcsIDYsIDEsIAotICAgIDcwLCAxMjksIDcsIDYsIDEsIDIxNCwgMTA1LCAxMjksIDcsIDYsIDEsIDIxMiwgOTgsIDEyOSwgNywgNiwgMSwgMjExLCAKLSAgICAxNzgsIDEyOSwgNywgNiwgMSwgMjExLCAxMTcsIDEyOSwgNywgNiwgMSwgMjEwLCAxNTksIDEyOSwgNDMsIDQyLCAxMjcsIAotICAgIDEyOSwgMjIzLCA1MCwgMjE5LCA0NiwgMTI5LCA0NCwgNDIsIDEyNywgMTI5LCAyNTAsIDMxLCAyNTUsIDE0LCAxMjksIDEyMSwgCi0gICAgMjMyLCAyMTMsIDEyOSwgMjQyLCAxMzcsIDI1NSwgMTQsIDEyOSwgNywgNCwgMSwgNjEsIDEyOSwgNywgNCwgMSwgMjUzLCAKLSAgICAxNTgsIDEyOSwgNywgNCwgMSwgMjUxLCA2NiwgMTI5LCA3LCA0LCAxLCAyNDksIDYwLCAxMjksIDcsIDQsIDEsIDc1LCAxMjksIAotICAgIDcsIDQsIDEsIDI0NSwgNiwgMTI5LCA3LCA0LCAxLCAyNDMsIDIwMiwgMTI5LCA3LCA0LCAxLCAyNDIsIDYwLCAxMjksIDcsIAotICAgIDQsIDEsIDczLCAxMjksIDcsIDQsIDEsIDIzNSwgMTQ0LCAxMjksIDcsIDQsIDEsIDIzNSwgMjMsIDEyOSwgNywgNCwgMSwgCi0gICAgMTU2LCAxMjksIDcsIDQsIDEsIDE5MywgMTI5LCA3LCA0LCAxLCAyMzAsIDI1LCAxMjksIDcsIDQsIDEsIDc2LCAxMjksIDcsIAotICAgIDQsIDEsIDIyNiwgMTA1LCAxMjksIDcsIDQsIDEsIDIyNCwgOTYsIDEyOSwgNywgNCwgMSwgMTUzLCAxMjksIDcsIDQsIDEsIAotICAgIDIyMiwgOTEsIDEyOSwgNywgNCwgMSwgMjE3LCAxNTIsIDEyOSwgNywgNCwgMSwgNzAsIDEyOSwgNywgNCwgMSwgMjE0LCAKLSAgICAxMDUsIDEyOSwgNywgNCwgMSwgMjEyLCA5OCwgMTI5LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI5LCA3LCA0LCAxLCAyMTEsIAotICAgIDExNywgMTI5LCA3LCA0LCAxLCAyMTAsIDE1OSwgMTI5LCA0MywgMjQ5LCA5OSwgMTI3LCAxMjksIDY3LCAyMzIsIDIxMywgCi0gICAgMTI5LCA0NCwgMjQ5LCA5OSwgMTI3LCAxMjksIDE4MiwgMjUxLCA2LCAyMTcsIDg0LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgCi0gICAgNjcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA0NCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAxMSwgNDUsIAotICAgIDIyMSwgMCwgNDUsIDIyMCwgMjQ1LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgMjM1LCA0NSwgMjIwLCAKLSAgICAyMzQsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIDIyOSwgNDUsIDIyMCwgCi0gICAgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAyMjQsIDQ1LCAyMjAsIAotICAgIDIyMywgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgMjE4LCA0NSwgMjIwLCAKLSAgICAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIDIxMywgNDUsIDIyMCwgCi0gICAgMjEyLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAyMDcsIDQ1LCAyMjAsIAotICAgIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgMjAyLCA0NSwgMjIwLCAKLSAgICAyMDEsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIDE5NiwgNDUsIDIyMCwgCi0gICAgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAxOTEsIDQ1LCAyMjAsIAotICAgIDE5MCwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgMTg1LCA0NSwgMjIwLCAKLSAgICAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIDE4MCwgNDUsIDIyMCwgCi0gICAgMTc5LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAxNzQsIDQ1LCAyMjAsIAotICAgIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgMTY5LCA0NSwgMjIwLCAKLSAgICAxNjgsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIDE2MywgNDUsIDIyMCwgCi0gICAgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIwLCAxNTgsIDQ1LCAyMjAsIAotICAgIDE1NywgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgMTUxLCA0NSwgMjIxLCAKLSAgICAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIDE0NiwgNDUsIDIyMSwgCi0gICAgMTQ1LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAxNDAsIDQ1LCAyMjEsIAotICAgIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgMTM1LCA0NSwgMjIxLCAKLSAgICAxMzQsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIDEyOSwgNDUsIDIyMSwgCi0gICAgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAxMjQsIDQ1LCAyMjEsIAotICAgIDEyMywgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgMTE4LCA0NSwgMjIxLCAKLSAgICAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIDExMywgNDUsIDIyMSwgCi0gICAgMTEyLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAxMDcsIDQ1LCAyMjEsIAotICAgIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgMTAyLCA0NSwgMjIxLCAKLSAgICAxMDEsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCA0NSwgMjIxLCA5NSwgNDUsIAotICAgIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTEsIDQ1LCAyMjEsIDkwLCA0NSwgMjIxLCA4OCwgCi0gICAgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAyMjEsIDgzLCA0NSwgMjIxLCAKLSAgICA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA3OSwgNDUsIDIyMSwgNzcsIDQ1LCAyMjEsIDc2LCA0NSwgCi0gICAgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgNzEsIDQ1LCAyMjEsIDcwLCAKLSAgICA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNjgsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIDIyMSwgNjQsIDQ1LCAyMjEsIAotICAgIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgNDUsIDIyMSwgNTgsIDQ1LCAKLSAgICAyMjEsIDU3LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCA1MiwgNDUsIDIyMSwgNTEsIAotICAgIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ3LCA0NSwgMjIxLCA0NiwgNDUsIDIyMSwgCi0gICAgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCA0NSwgMjIxLCAzOCwgNDUsIAotICAgIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMzQsIDQ1LCAyMjEsIDMyLCA0NSwgMjIxLCAzMSwgCi0gICAgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAyMjEsIDI2LCA0NSwgMjIxLCAKLSAgICAyNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDIzLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIDQ1LCAyMjEsIDE5LCA0NSwgCi0gICAgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgMTQsIDQ1LCAyMjEsIDEzLCAKLSAgICA0NSwgMjIxLCAxMiwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAyMjEsIDcsIDQ1LCAyMjEsIDYsIAotICAgIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDIsIDQ1LCAyMjEsIDEsIDQ1LCAyMjAsIDI1NSwgCi0gICAgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAKLSAgICAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDcsIDQ1LCAyMjAsIDI0NiwgNDUsIDIyMCwgMjQ0LCA0NSwgCi0gICAgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAyNDAsIDQ1LCAyMjAsIDIzOSwgNDUsIAotICAgIDIyMCwgMjM4LCAyMjcsIDIwMiwgMjI3LCAyMDQsIDIxOCwgMTUyLCA2NCwgMjQxLCAyMzMsIDIxOSwgNDgsIDIxOCwgMTUyLCAKLSAgICA2NCwgMjE2LCAyMTIsIDIxOCwgODUsIDI0NSwgMTQzLCA2NCwgMjE2LCAyMTIsIDI0NSwgNTYsIDI0NSwgMTQzLCA2NCwgCi0gICAgMjE1LCAyNDMsIDI0NSwgMTA5LCAyNDUsIDEzMiwgMjQ1LCAxMzMsIDI1NSwgNywgMjU1LCA4LCAyNTQsIDE2NywgMjUyLCAKLSAgICA0NywgMjUyLCAxNzksIDI1MSwgMTMxLCAxMzUsIDIxNywgODksIDIwMywgMjE3LCA4OSwgMjQwLCAyMjcsIDIxNywgOTMsIAotICAgIDIzMiwgMjE0LCAyNDQsIDE0NSwgMTY2LCAyMzIsIDIxMywgMjQ1LCAxNDMsIDY0LCAyMzIsIDIxMywgMjMzLCAwLCAyMjgsIAotICAgIDEzNSwgMjQ1LCAxMTIsIDIzMiwgMjE0LCAyMTcsIDg5LCA2NywgMjE3LCA4OSwgMjEyLCAxMTgsIDI0NCwgMjAsIDI0NCwgCi0gICAgMTQ1LCAyNDQsIDEyNSwgMjUwLCAyMzAsIDIyMywgNTMsIDI0OSwgMTQzLCAyMjAsIDI4LCAyMjYsIDEzMCwgMjMyLCAxNTAsIAotICAgIDExMCwgMjE5LCA1OCwgMjIwLCAyOCwgMjM1LCAyNTUsIDIzMiwgMTUwLCAyMTAsIDg2LCAyMTksIDE5MSwgMjQ4LCAxNTEsIAotICAgIDIzMiwgMjA0LCAyNDUsIDc3LCAyNDcsIDE1NSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDExMCwgMjQ4LCAxNDEsIDI0OCwgMzEsIAotICAgIDI0OSwgMTc4LCAxMDUsIDI0OCwgMTQwLCAyNDgsIDMxLCAyNDksIDE3OCwgMTU4LCAyNDgsIDEzOSwgMjQ4LCAzMSwgMjQ5LCAKLSAgICAxNzgsIDE2MSwgMjQ4LCAxMzgsIDE1MiwgMjU1LCA3LCAyMjksIDIwOSwgMjE3LCAxNzcsIDIzNiwgNjIsIDIxNywgMTgwLCAKLSAgICAyNDUsIDE0MywgNjQsIDIxNSwgMjQ0LCAyNTEsIDIxMywgMjQ1LCA2MiwgMjUxLCA1LCAyNTEsIDcsIDI0NSwgMTQzLCA2NCwgCi0gICAgMjMxLCA4MSwgMjQ1LCAxMTAsIDIxOCwgNjEsIDIxOCwgNzgsIDI0NSwgNzcsIDI0NSwgNzgsIDIzNSwgMjMyLCAyMjAsIAotICAgIDEzOCwgMTYxLCAyNDQsIDEwNywgMjIwLCAxMzcsIDI0MywgMjM3LCAyMzUsIDIzMiwgMjIwLCAxMzgsIDE1OCwgMjQyLCAKLSAgICAxMjEsIDIyMCwgMTM3LCAyNDIsIDExOCwgMjM1LCAyMzIsIDIyMCwgMTM4LCAxMDUsIDIyMywgMTIxLCAyMjAsIDEzNywgCi0gICAgMjIyLCAxNDUsIDIzNSwgMjMyLCAyMjAsIDEzOCwgMTEwLCAyMTQsIDE3NCwgMjIwLCAxMzcsIDIxNCwgMTMzLCAyMTksIDIxLCAKLSAgICAyNDgsIDYzLCAyNDgsIDY1LCAyMjYsIDc4LCAyNTAsIDE0MiwgMjI2LCA4MCwgMTI1LCAyMjYsIDI0MCwgMjI0LCAxOTMsIAotICAgIDI0MSwgNDcsIDI1MSwgMTUwLCAyMjUsIDE3MywgMjQxLCAyMDMsIDI1MSwgMTYxLCAyMjgsIDc1LCAyNTEsIDE1MCwgMjQxLCAKLSAgICAyMDMsIDIyOSwgMTc1LCAyMzUsIDI0MiwgMjM1LCAyNDQsIDIyOSwgODIsIDIzMiwgMjEzLCAyMjksIDk5LCAyMTgsIDE1MiwgCi0gICAgNjQsIDIyMSwgMTU4LCAyNTQsIDE4LCAyMTgsIDIyMywgMjQ1LCAxNDMsIDY0LCAyMjEsIDE1OCwgMjU0LCAxOCwgMjQ1LCAKLSAgICA4MCwgMTM1LCAyMTcsIDkwLCAyMjAsIDEyNywgMjAzLCAyMTcsIDkwLCAyMjAsIDEyNywgMjQwLCAyMjQsIDEzNSwgMjE3LCAKLSAgICA5MCwgMiwgMjM1LCAzNSwgMjAzLCAyMTcsIDkwLCAyLCAyMzUsIDM1LCAyNDAsIDIyNSwgMjMyLCAyMTQsIDIxNywgOTAsIAotICAgIDIyMCwgMTI3LCA2NywgMjE3LCA5MCwgMjIwLCAxMjcsIDIxMiwgMTE3LCAyMjUsIDI1MywgMjMyLCAyMTQsIDI0NCwgMTQsIAotICAgIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjQ2LCAxMDYsIDIyNSwgMzIsIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjUyLCAxNzgsIDIyNSwgCi0gICAgMjUzLCAyMzIsIDIxNCwgMjE0LCAxNjMsIDIyNSwgMjgsIDIyMywgNTAsIDIzMiwgMjE0LCAyNDQsIDE0NSwgMjIzLCA1MCwgCi0gICAgMjM1LCAyNDIsIDIyMywgMzUsIDIxOSwgMTU1LCAyMjAsIDI4LCAxMDUsIDIxOSwgMTUyLCAyMTgsIDIyNSwgMjE5LCAxNTUsIAotICAgIDIyMCwgMjgsIDE1OCwgMjE5LCAxNTEsIDIxOCwgMjI0LCAyNDgsIDMxLCAyNDksIDE3OCwgMjE4LCAxMDUsIDI0OCwgMTM3LCAKLSAgICAyMjQsIDE4MywgMjE0LCAxMzIsIDExMCwgMjI0LCAxODMsIDIxNCwgMTMwLCAyMjQsIDE0OSwgMjI0LCAxODMsIDIxNCwgCi0gICAgMTMyLCAxMDUsIDIyNCwgMTgzLCAyMTQsIDEyOSwgMjI0LCAxNDgsIDIyMCwgMTI4LCAyMTUsIDI0MiwgMjE4LCAxNTEsIAotICAgIDIxOCwgODksIDI1MSwgNiwgMjUwLCAxNDIsIDI1MCwgMjA5LCAyMzEsIDQzLCAyMTIsIDU5LCAyMzAsIDQzLCAyMTgsIDE1MiwgCi0gICAgNjQsIDI0MiwgMTA3LCAyNTQsIDE4LCAyMTgsIDE1MiwgNjQsIDIyNCwgMTY2LCAyNTQsIDE4LCAyMTksIDIwLCAyNDUsIAotICAgIDE0MywgNjQsIDI0MiwgMTA3LCAyNTQsIDE4LCAyNDUsIDE0MywgNjQsIDIyNCwgMTY2LCAyNTQsIDE4LCAyNDUsIDEwNywgCi0gICAgMjE4LCAxNTIsIDY0LCAyMTgsIDEwNSwgMjE5LCAzNSwgMjE5LCAxNTUsIDI0MiwgMTQxLCAxMzUsIDIzNSwgMTk1LCAyMjAsIAotICAgIDEwNywgMjE5LCAxNTUsIDEzNSwgMjM1LCAxOTUsIDIyMSwgMTk0LCAyNDksIDE3OCwgMjIwLCAxMzUsIDIzNSwgMTk1LCAKLSAgICAyNDksIDExMywgMjE4LCAxMDYsIDIxNiwgMjM2LCAyMTgsIDE2OCwgMjI2LCAxNjksIDIxNywgMTY3LCAyNDksIDIxOCwgCi0gICAgMjI2LCAxNDIsIDIyNCwgMTg0LCAyMzEsIDQyLCAyMjUsIDE5LCAyNTQsIDUzLCAyMjQsIDE3OCwgMjQ5LCAyMTgsIDI1NCwgCi0gICAgNjksIDIyOSwgMTYzLCAyMTksIDIwMCwgNywgNiwgMSwgMjQyLCAyNDksIDcsIDQsIDEsIDI0MiwgMjQ5LCAyNTAsIDE1OSwgCi0gICAgMTY1LCAxLCAyMzIsIDE3NSwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIDI0NCwgMzYsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAKLSAgICAyNDQsIDE1NywgMjA5LCAyMDksIDEsIDIyMiwgMjExLCAyMDksIDIwOSwgMSwgMjMyLCAxNTYsIDYzLCAxNjQsIDI1MSwgCi0gICAgMjIzLCAyMjAsIDMsIDI0MiwgMjE1LCAyMzAsIDI0OCwgMjIzLCA0MSwgMjQzLCAyMTYsIDI0MywgMjE1LCAyNDMsIDIxNCwgCi0gICAgMjMwLCA0NSwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIDI1NCwgMjMyLCAxMDIsIDIyMiwgMjE5LCAyMzIsIDEwMywgMjIyLCAKLSAgICAyMjAsIDIyNSwgMjIzLCAyMzIsIDEwMSwgMjIyLCAyMTgsIDIyOCwgMTA2LCAyMzAsIDE2NSwgMjExLCAyMjksIDIxMiwgMTUsIAotICAgIDI0NSwgMTYyLCAyNDMsIDIyNiwgMjMwLCAyMjksIDIyNiwgMTk3LCAyMTQsIDEzNCwgODcsIDIzMCwgMjI5LCAyNDgsIDE1NywgCi0gICAgODcsIDgsIDMsIDIzNSwgMTU4LCA3OCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDcxLCAyMzMsIDIwLCAxMjcsIAotICAgIDIxMywgMTE4LCAyMTMsIDcsIDIxMiwgMTk1LCAyMTIsIDE4NCwgMjEyLCAxNzMsIDIxMiwgMTYyLCAyMTIsIDE1MSwgMjEyLCAKLSAgICAxNDAsIDIxMiwgMTI5LCAyMTMsIDExNywgMjEzLCAxMDYsIDIxMywgOTUsIDIxMywgODQsIDIxMywgNzMsIDIxMywgNjIsIAotICAgIDIxMywgNTEsIDI1MSwgNzEsIDIyNiwgMTU1LCA3OCwgMjUxLCAxOTYsIDIwOSwgMjUzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgCi0gICAgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNCwgOSwgMjEzLCA0MCwgMjEzLCAyOSwgMjEzLCAxOCwgMjEzLCA2LCAyMTIsIDI1MSwgCi0gICAgMjEyLCAyNDAsIDIxMiwgMjI5LCAyMTIsIDIxOCwgMjEyLCAyMDcsIDIxMiwgMTk5LCAyMTIsIDE5OCwgMjEyLCAxOTcsIAotICAgIDIxMiwgMTk2LCAyMTIsIDE5NCwgMjEyLCAxOTMsIDIxMiwgMTkyLCAyMTIsIDE5MSwgMjEyLCAxOTAsIDIxMiwgMTg5LCAKLSAgICAyMTIsIDE4OCwgMjEyLCAxODcsIDIxMiwgMTg2LCAyMTIsIDE4NSwgMjEyLCAxODMsIDIxMiwgMTgyLCAyMTIsIDE4MSwgCi0gICAgMjEyLCAxODAsIDIxMiwgMTc5LCAyMTIsIDE3OCwgMjEyLCAxNzcsIDIxMiwgMTc2LCAyMTIsIDE3NSwgMjEyLCAxNzQsIAotICAgIDIxMiwgMTcyLCAyMTIsIDE3MSwgMjEyLCAxNzAsIDIxMiwgMTY5LCAyMTIsIDE2OCwgMjEyLCAxNjcsIDIxMiwgMTY2LCAKLSAgICAyMTIsIDE2NSwgMjEyLCAxNjQsIDIxMiwgMTYzLCAyMTIsIDE2MSwgMjEyLCAxNjAsIDIxMiwgMTU5LCAyMTIsIDE1OCwgCi0gICAgMjEyLCAxNTcsIDIxMiwgMTU2LCAyMTIsIDE1NSwgMjEyLCAxNTQsIDIxMiwgMTUzLCAyMTIsIDE1MiwgMjEyLCAxNTAsIAotICAgIDIxMiwgMTQ5LCAyMTIsIDE0OCwgMjEyLCAxNDcsIDIxMiwgMTQ2LCAyMTIsIDE0NSwgMjEyLCAxNDQsIDIxMiwgMTQzLCAKLSAgICAyMTIsIDE0MiwgMjEyLCAxNDEsIDIxMiwgMTM5LCAyMTIsIDEzOCwgMjEyLCAxMzcsIDIxMiwgMTM2LCAyMTIsIDEzNSwgCi0gICAgMjEyLCAxMzQsIDIxMiwgMTMzLCAyMTIsIDEzMiwgMjEyLCAxMzEsIDIxMiwgMTMwLCAyMTIsIDEyOCwgMjEyLCAxMjcsIAotICAgIDIxMiwgMTI2LCAyMTIsIDEyNSwgMjEyLCAxMjQsIDIxMiwgMTIzLCAyMTIsIDEyMiwgMjEyLCAxMjEsIDIxMiwgMTIwLCAKLSAgICAyMTIsIDExOSwgMjEzLCAxMTYsIDIxMywgMTE1LCAyMTMsIDExNCwgMjEzLCAxMTMsIDIxMywgMTEyLCAyMTMsIDExMSwgCi0gICAgMjEzLCAxMTAsIDIxMywgMTA5LCAyMTMsIDEwOCwgMjEzLCAxMDcsIDIxMywgMTA1LCAyMTMsIDEwNCwgMjEzLCAxMDMsIAotICAgIDIxMywgMTAyLCAyMTMsIDEwMSwgMjEzLCAxMDAsIDIxMywgOTksIDIxMywgOTgsIDIxMywgOTcsIDIxMywgOTYsIDIxMywgCi0gICAgOTQsIDIxMywgOTMsIDIxMywgOTIsIDIxMywgOTEsIDIxMywgOTAsIDIxMywgODksIDIxMywgODgsIDIxMywgODcsIDIxMywgCi0gICAgODYsIDIxMywgODUsIDIxMywgODMsIDIxMywgODIsIDIxMywgODEsIDIxMywgODAsIDIxMywgNzksIDIxMywgNzgsIDIxMywgCi0gICAgNzcsIDIxMywgNzYsIDIxMywgNzUsIDIxMywgNzQsIDIxMywgNzIsIDIxMywgNzEsIDIxMywgNzAsIDIxMywgNjksIDIxMywgCi0gICAgNjgsIDIxMywgNjcsIDIxMywgNjYsIDIxMywgNjUsIDIxMywgNjQsIDIxMywgNjMsIDIxMywgNjEsIDIxMywgNjAsIDIxMywgCi0gICAgNTksIDIxMywgNTgsIDIxMywgNTcsIDIxMywgNTYsIDIxMywgNTUsIDIxMywgNTQsIDIxMywgNTMsIDIxMywgNTIsIDIxMywgCi0gICAgNTAsIDIxMywgNDksIDIxMywgNDgsIDIxMywgNDcsIDIxMywgNDYsIDIxMywgNDUsIDIxMywgNDQsIDIxMywgNDMsIDIxMywgCi0gICAgNDIsIDIxMywgNDEsIDIxMywgMzksIDIxMywgMzgsIDIxMywgMzcsIDIxMywgMzYsIDIxMywgMzUsIDIxMywgMzQsIDIxMywgCi0gICAgMzMsIDIxMywgMzIsIDIxMywgMzEsIDIxMywgMzAsIDIxMywgMjgsIDIxMywgMjcsIDIxMywgMjYsIDIxMywgMjUsIDIxMywgCi0gICAgMjQsIDIxMywgMjMsIDIxMywgMjIsIDIxMywgMjEsIDIxMywgMjAsIDIxMywgMTksIDIxMywgMTcsIDIxMywgMTYsIDIxMywgCi0gICAgMTUsIDIxMywgMTQsIDIxMywgMTMsIDIxMywgMTIsIDIxMywgMTEsIDIxMywgMTAsIDIxMywgOSwgMjEzLCA4LCAyMTMsIDUsIAotICAgIDIxMywgNCwgMjEzLCAzLCAyMTMsIDIsIDIxMywgMSwgMjEzLCAwLCAyMTIsIDI1NSwgMjEyLCAyNTQsIDIxMiwgMjUzLCAKLSAgICAyMTIsIDI1MiwgMjEyLCAyNTAsIDIxMiwgMjQ5LCAyMTIsIDI0OCwgMjEyLCAyNDcsIDIxMiwgMjQ2LCAyMTIsIDI0NSwgCi0gICAgMjEyLCAyNDQsIDIxMiwgMjQzLCAyMTIsIDI0MiwgMjEyLCAyNDEsIDIxMiwgMjM5LCAyMTIsIDIzOCwgMjEyLCAyMzcsIAotICAgIDIxMiwgMjM2LCAyMTIsIDIzNSwgMjEyLCAyMzQsIDIxMiwgMjMzLCAyMTIsIDIzMiwgMjEyLCAyMzEsIDIxMiwgMjMwLCAKLSAgICAyMTIsIDIyOCwgMjEyLCAyMjcsIDIxMiwgMjI2LCAyMTIsIDIyNSwgMjEyLCAyMjQsIDIxMiwgMjIzLCAyMTIsIDIyMiwgCi0gICAgMjEyLCAyMjEsIDIxMiwgMjIwLCAyMTIsIDIxOSwgMjEyLCAyMTcsIDIxMiwgMjE2LCAyMTIsIDIxNSwgMjEyLCAyMTQsIAotICAgIDIxMiwgMjEzLCAyMTIsIDIxMiwgMjEyLCAyMTEsIDIxMiwgMjEwLCAyMTIsIDIwOSwgMjEyLCAyMDgsIDIxMiwgMjA2LCAKLSAgICAyMTIsIDIwNSwgMjEyLCAyMDQsIDIxMiwgMjAzLCAyMTIsIDIwMiwgMjEyLCAyMDEsIDIxMiwgMjAwLCA3LCA2LCAxLCAxMTUsIAotICAgIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIAotICAgIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgCi0gICAgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjUwLCAyMzQsIDcsIAotICAgIDYsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAKLSAgICAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDU5LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMjI5LCAKLSAgICA4MCwgMiwgMjE2LCA4OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAKLSAgICA2NywgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCAKLSAgICA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIAotICAgIDIyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDY3LCAKLSAgICAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAKLSAgICAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAKLSAgICA1OSwgNzcsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCAKLSAgICA3NywgMjIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDU5LCA3NywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIAotICAgIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNSwgMjIsIDU5LCA3NywgMjIsIDE0MiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgCi0gICAgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIAotICAgIDEsIDIzNSwgMTQ1LCAyLCAxODIsIDcsIDQsIDEsIDIzNSwgMTQ1LCAyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIDEsIDIzMywgCi0gICAgMTQ5LCAyLCAxODIsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxODIsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDE4MiwgNywgNCwgCi0gICAgMSwgMjMyLCA1MCwgMiwgMTgyLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMTgyLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTgyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTgyLCAKLSAgICA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgCi0gICAgMjA0LCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTUsIAotICAgIDk0LCAyMTQsIDEwNiwgMiwgMTQyLCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIyMSwgMTk2LCAKLSAgICAyLCAxNDIsIDcsIDQsIDEsIDI0MSwgNTEsIDIyMSwgMTk2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQxLCA1MSwgMjIxLCAKLSAgICAxOTYsIDIsIDE0MiwgMTQ2LCAxLCAyMzQsIDEwOSwgMzYsIDExNiwgMjM1LCAyMywgMzYsIDExNiwgMjI5LCA3OSwgMzYsIAotICAgIDExNiwgMjUxLCA2NiwgMzYsIDExNiwgMjI3LCAxNjcsIDM2LCAxMTYsIDIxNSwgMTU5LCAzNiwgMTE2LCAyMjgsIDExMSwgCi0gICAgMzYsIDExNiwgMjE3LCAxNTIsIDM2LCAxMTYsIDIzMCwgMjUsIDM2LCAxMTYsIDIyNiwgMTA1LCAzNiwgMTE2LCAxOTMsIDM2LCAKLSAgICAxMTYsIDIxMSwgMTE3LCAzNiwgMTE2LCAxNTMsIDM2LCAxMTYsIDE1NiwgMzYsIDExNiwgMjE0LCAxMDUsIDM2LCAxMTYsIAotICAgIDIzMiwgMTc2LCAzNiwgMTE2LCAyMzIsIDE4NSwgMzYsIDExNiwgMjIyLCAxODAsIDM2LCAxMTYsIDIyOCwgOTMsIDM2LCAKLSAgICAxMTYsIDIzNSwgMTQ0LCAzNiwgMTE2LCAyMjAsIDEwNCwgMzYsIDExNiwgMjE4LCAyMjYsIDM2LCAxMTYsIDIyMiwgOTEsIAotICAgIDM2LCAxMTYsIDI0MiwgNjAsIDM2LCAxMTYsIDIzMywgMjMyLCAzNiwgMywgMjM1LCAxMCwgMzYsIDMsIDIzNCwgOTIsIDM2LCAKLSAgICAzLCAyMzQsIDgzLCAzNiwgMywgMjMzLCAyMTcsIDM2LCAzLCAyMzMsIDE4OCwgMzYsIDMsIDIzNCwgMTgyLCAzNiwgMywgCi0gICAgMjM0LCAxODEsIDM2LCAzLCAyMzQsIDI0NiwgMzYsIDMsIDIzNCwgMjgsIDM2LCAzLCAyMzQsIDEwLCAzNiwgMywgMjM0LCAKLSAgICAxOTUsIDM2LCAzLCAyMjksIDc2LCAzNiwgMywgMjI5LCAyNywgMzYsIDMsIDIyOSwgMjMsIDM2LCAzLCAyMjgsIDI0OCwgMzYsIAotICAgIDMsIDIyOCwgMjQxLCAzNiwgMywgMjI5LCA2NCwgMzYsIDMsIDIyOSwgNjIsIDM2LCAzLCAyMjksIDczLCAzNiwgMywgMjI5LCAKLSAgICA0LCAzNiwgMywgMjI4LCAyNTUsIDM2LCAzLCAyMjksIDY2LCAzNiwgMywgMjUxLCAzMiwgMzYsIDMsIDI1MCwgNTEsIDM2LCAKLSAgICAzLCAyNTAsIDQxLCAzNiwgMywgMjQ5LCAxMTIsIDM2LCAzLCAyNDksIDgzLCAzNiwgMywgMjUwLCAxOTAsIDM2LCAzLCAyNTAsIAotICAgIDE4MiwgMzYsIDMsIDI1MSwgMjIsIDM2LCAzLCAyNDksIDIzOCwgMzYsIDMsIDI0OSwgMTc0LCAzNiwgMywgMjUwLCAyMjIsIAotICAgIDM2LCAzLCAyMjcsIDE2NCwgMzYsIDMsIDIyNywgMTQ4LCAzNiwgMywgMjI3LCAxNDMsIDM2LCAzLCAyMjcsIDEyOCwgMzYsIAotICAgIDMsIDIyNywgMTIxLCAzNiwgMywgMjI3LCAxNTYsIDM2LCAzLCAyMjcsIDE1NSwgMzYsIDMsIDIyNywgMTYxLCAzNiwgMywgCi0gICAgMjI3LCAxMzQsIDM2LCAzLCAyMjcsIDEzMiwgMzYsIDMsIDIyNywgMTU5LCAzNiwgMywgMjE1LCAxNTUsIDM2LCAzLCAyMTUsIAotICAgIDEzNSwgMzYsIDMsIDIxNSwgMTM0LCAzNiwgMywgMjE1LCAxMjMsIDM2LCAzLCAyMTUsIDEyMCwgMzYsIDMsIDIxNSwgMTUxLCAKLSAgICAzNiwgMywgMjE1LCAxNTAsIDM2LCAzLCAyMTUsIDE1NCwgMzYsIDMsIDIxNSwgMTMzLCAzNiwgMywgMjE1LCAxMzIsIDM2LCAKLSAgICAzLCAyMTUsIDE1MywgMzYsIDMsIDIyOCwgMTA5LCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIDIyOCwgOTQsIDM2LCAzLCAyMjgsIAotICAgIDc4LCAzNiwgMywgMjI4LCA3NywgMzYsIDMsIDIyOCwgMTA1LCAzNiwgMywgMjI4LCAxMDQsIDM2LCAzLCAyMjgsIDEwOCwgCi0gICAgMzYsIDMsIDIyOCwgODAsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCAxMDcsIDM2LCAzLCAyMTcsIDEwMSwgMzYsIDMsIAotICAgIDIxNiwgMTE3LCAzNiwgMywgMjE2LCAxMDMsIDM2LCAzLCAyMTUsIDExOCwgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIAotICAgIDIyLCAzNiwgMywgMjE3LCAxMSwgMzYsIDMsIDIxNywgNzksIDM2LCAzLCAxMTEsIDM2LCAzLCAyMTYsIDE3LCAzNiwgMywgCi0gICAgMjE3LCA0MSwgMzYsIDMsIDIyOSwgMjI1LCAzNiwgMywgMjI4LCAyMzMsIDM2LCAzLCAyMjgsIDIwOCwgMzYsIDMsIDIyNywgCi0gICAgMjM3LCAzNiwgMywgMjI3LCAxNzksIDM2LCAzLCAyMjksIDEwNywgMzYsIDMsIDIyOSwgMTAzLCAzNiwgMywgMjI5LCAyMTIsIAotICAgIDM2LCAzLCAyMjgsIDc0LCAzNiwgMywgMjI4LCA2NCwgMzYsIDMsIDIyOSwgMTg3LCAzNiwgMywgMjI2LCA4OSwgMzYsIDMsIAotICAgIDIyNSwgMTA4LCAzNiwgMywgMjI1LCA3MSwgMzYsIDMsIDIyNCwgMTUwLCAzNiwgMywgMjI0LCAxMTksIDM2LCAzLCAyMjUsIAotICAgIDIyMSwgMzYsIDMsIDIyNSwgMjExLCAzNiwgMywgMjI2LCA3MSwgMzYsIDMsIDIyNSwgMTYsIDM2LCAzLCAyMjQsIDI0OSwgCi0gICAgMzYsIDMsIDIyNSwgMjM0LCAzNiwgMywgMjMxLCAyMzcsIDM2LCAzLCAyMzAsIDIzMCwgMzYsIDMsIDIzMCwgMjAxLCAzNiwgCi0gICAgMywgMjMwLCAxMDIsIDM2LCAzLCAyMzAsIDU0LCAzNiwgMywgMjMxLCA5MSwgMzYsIDMsIDIzMSwgODAsIDM2LCAzLCAyMzEsIAotICAgIDIwMywgMzYsIDMsIDIzMCwgMTYxLCAzNiwgMywgMjMwLCAxMzIsIDM2LCAzLCAyMzEsIDEzNSwgMzYsIDMsIDIxMSwgMTAzLCAKLSAgICAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgCi0gICAgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIAotICAgIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NCwgMzYsIDMsIDIyMywgMzUsIDM2LCAzLCAyMjIsIDIzOSwgCi0gICAgMzYsIDMsIDIyMiwgMTQwLCAzNiwgMywgMjIyLCAxMTIsIDM2LCAzLCAyMjMsIDEyOCwgMzYsIDMsIDIyMywgMTA4LCAzNiwgCi0gICAgMywgMjIzLCAxNjYsIDM2LCAzLCAyMjIsIDIxMSwgMzYsIDMsIDIyMiwgMTk3LCAzNiwgMywgMjIzLCAxMzYsIDM2LCAzLCAKLSAgICAyMzMsIDEzNCwgMzYsIDMsIDIzMiwgMjQxLCAzNiwgMywgMjMyLCAyMjcsIDM2LCAzLCAyMzIsIDk4LCAzNiwgMywgMjMyLCAKLSAgICA3MywgMzYsIDMsIDIzMywgNTgsIDM2LCAzLCAyMzMsIDUwLCAzNiwgMywgMjMzLCAxMDksIDM2LCAzLCAyMzIsIDE1NiwgMzYsIAotICAgIDMsIDIzMiwgMTI3LCAzNiwgMywgMjMzLCA3NCwgMzYsIDMsIDIxNCwgMjYsIDM2LCAzLCAyMTMsIDE3NiwgMzYsIDMsIDIxMywgCi0gICAgMTYyLCAzNiwgMywgMjEyLCAxMTYsIDM2LCAzLCAyMTIsIDEwOSwgMzYsIDMsIDIxMywgMjU1LCAzNiwgMywgMjEzLCAyNTAsIAotICAgIDM2LCAzLCAyMTQsIDIzLCAzNiwgMywgMjEzLCAxMzgsIDM2LCAzLCAyMTMsIDEyNywgMzYsIDMsIDIxNCwgNSwgMzYsIDMsIAotICAgIDIzMiwgMTc0LCAzNiwgMywgMjMyLCAxNjksIDM2LCAzLCAyMzIsIDE2OCwgMzYsIDMsIDIzMiwgMTY1LCAzNiwgMywgMjMyLCAKLSAgICAxNjQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE2NywgCi0gICAgMzYsIDMsIDIzMiwgMTY2LCAzNiwgMywgMjMyLCAxNzIsIDM2LCAzLCAyMzIsIDE4MywgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCi0gICAgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE2MSwgMzYsIDMsIDIzMiwgMTYwLCAzNiwgMywgMjMyLCAxODAsIDM2LCAzLCAKLSAgICAyMzIsIDE3OSwgMzYsIDMsIDIzMiwgMTgyLCAzNiwgMywgMjMyLCAxNjMsIDM2LCAzLCAyMzIsIDE2MiwgMzYsIDMsIDIzMiwgCi0gICAgMTgxLCAzNiwgMywgMjIyLCAxNzgsIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgMjIyLCAxNjAsIAotICAgIDM2LCAzLCAyMjIsIDE1MywgMzYsIDMsIDIyMiwgMTc0LCAzNiwgMywgMjIyLCAxNzMsIDM2LCAzLCAyMjIsIDE3NywgMzYsIAotICAgIDMsIDIyMiwgMTY1LCAzNiwgMywgMjIyLCAxNjQsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIDMsIDIyOCwgOTEsIDM2LCAzLCAKLSAgICAyMjgsIDg2LCAzNiwgMywgMjI4LCA4NSwgMzYsIDMsIDIyOCwgODIsIDM2LCAzLCAyMjgsIDgxLCAzNiwgMywgMjI4LCA4OCwgCi0gICAgMzYsIDMsIDIyOCwgODcsIDM2LCAzLCAyMjgsIDkwLCAzNiwgMywgMjI4LCA4NCwgMzYsIDMsIDIyOCwgODMsIDM2LCAzLCAKLSAgICAyMjgsIDg5LCAzNiwgMywgMjM1LCAxNDAsIDM2LCAzLCAyMzUsIDEwOCwgMzYsIDMsIDIzNSwgMTAxLCAzNiwgMywgMjM1LCAKLSAgICA1MSwgMzYsIDMsIDIzNSwgMzMsIDM2LCAzLCAyMzUsIDEyNiwgMzYsIDMsIDIzNSwgMTI0LCAzNiwgMywgMjM1LCAxMzUsIAotICAgIDM2LCAzLCAyMzUsIDY4LCAzNiwgMywgMjM1LCA1OSwgMzYsIDMsIDIzNSwgMTI5LCAzNiwgMywgMjIwLCA5OCwgMzYsIDMsIAotICAgIDIyMCwgMzIsIDM2LCAzLCAyMjAsIDI3LCAzNiwgMywgMjE5LCAyMjUsIDM2LCAzLCAyMTksIDIxMCwgMzYsIDMsIDIyMCwgCi0gICAgNjMsIDM2LCAzLCAyMjAsIDYxLCAzNiwgMywgMjIwLCA5MCwgMzYsIDMsIDIyMCwgNywgMzYsIDMsIDIyMCwgMSwgMzYsIDMsIAotICAgIDIyMCwgNzEsIDM2LCAzLCAyMTgsIDIyMiwgMzYsIDMsIDIxOCwgMTkyLCAzNiwgMywgMjE4LCAxODgsIDM2LCAzLCAyMTgsIAotICAgIDE3OSwgMzYsIDMsIDIxOCwgMTc2LCAzNiwgMywgMjE4LCAxOTcsIDM2LCAzLCAyMTgsIDE5NiwgMzYsIDMsIDIxOCwgMjIxLCAKLSAgICAzNiwgMywgMjE4LCAxODQsIDM2LCAzLCAyMTgsIDE4MywgMzYsIDMsIDIxOCwgMTk5LCAzNiwgMywgMjIyLCAzMSwgMzYsIDMsIAotICAgIDIxOSwgMTkxLCAzNiwgMywgMjE5LCAxNzUsIDM2LCAzLCAyMTgsIDgzLCAzNiwgMywgMjE4LCA0LCAzNiwgMywgMjIxLCAKLSAgICAxODEsIDM2LCAzLCAyMjEsIDE3MCwgMzYsIDMsIDIyMiwgMTcsIDM2LCAzLCAyMTksIDU4LCAzNiwgMywgMjE5LCA0MCwgMzYsIAotICAgIDMsIDIyMSwgMjE5LCAzNiwgMywgMjQyLCA0NiwgMzYsIDMsIDI0MSwgMTgwLCAzNiwgMywgMjQxLCAxNjEsIDM2LCAzLCAKLSAgICAyNDAsIDIyMiwgMzYsIDMsIDI0MCwgMjAyLCAzNiwgMywgMjQxLCAyMzgsIDM2LCAzLCAyNDEsIDIyMCwgMzYsIDMsIDI0MiwgCi0gICAgMzYsIDM2LCAzLCAyNDEsIDY4LCAzNiwgMywgMjQxLCA1MywgMzYsIDMsIDI0MSwgMjQ2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAKLSAgICAzLCAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI1LCAzNiwgMywgMjMzLCAyMjQsIDM2LCAzLCAyMzMsIDIyMSwgMzYsIDMsIAotICAgIDIzMywgMjIwLCAzNiwgMywgMjMzLCAyMjcsIDM2LCAzLCAyMzMsIDIyNiwgMzYsIDMsIDIzMywgMjI5LCAzNiwgMywgMjMzLCAKLSAgICAyMjMsIDM2LCAzLCAyMzMsIDIyMiwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjE5LCAyMzEsIDE3NSwgMTE2LCA1LCAyMTEsIAotICAgIDY4LCAxNzUsIDExNiwgNSwgMjIzLCAxNTUsIDE3NSwgMTE2LCA1LCAyMjMsIDc4LCA5OCwgMSwgMjE1LCAyOCwgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDE3NiwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzNCwgMTMyLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgCi0gICAgMjM0LCAyOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzNCwgMTA1LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI5LCA0LCAKLSAgICA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUxLCAzMywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MCwgMTU3LCA2OSwgMTE2LCAKLSAgICA1LCAyNDksIDIzMywgMjQ5LCAyMzgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTAsIDg2LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjI3LCAxMzQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNDgsIDIyMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNSwgCi0gICAgMTQ0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjQ3LCAxNDUsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTUsIDEzOSwgNjksIAotICAgIDExNiwgNSwgMjQ5LCAyMzMsIDE5NywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNywgMTA1LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjE2LCAyMDgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAxMTEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTYsIDE1NiwgCi0gICAgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyOCwgNzQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTIsIDE5MSwgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDIyNSwgMTQ3LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI1LCAxNiwgNjksIDExNiwgNSwgMjQ5LCAKLSAgICAyMzMsIDIyNSwgMTIxLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMwLCAxNjEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTAsIAotICAgIDI0NCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyMiwgMjExLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMyLCAxNTYsIDY5LCAKLSAgICAxMTYsIDUsIDI0OSwgMjMzLCAyMTMsIDEzOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyMCwgMTAyLCA2OSwgMTE2LCA1LCAKLSAgICAyNDksIDIzMywgMjE4LCAyMjMsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMDYsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAxNjIsIAotICAgIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzMsIDEzNSwgNjksIDI1LCA1LCAyNDksIDIzMywgMjI0LCA4OCwgNjksIDIzNSwgCi0gICAgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyNCwgMzAsIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAyMjIsIDEwMCwgCi0gICAgNjksIDIzNSwgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyMiwgOTMsIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAKLSAgICAyMjQsIDY5LCA2OSwgMjUsIDUsIDIyNiwgMjA0LCA2OSwgMjUsIDUsIDI1NSwgMzQsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgCi0gICAgNzcsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgMjcsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOCwgMjQ4LCAxNDEsIDEsIDI1MSwgCi0gICAgMjU1LCAyMjksIDY0LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjksIDQsIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA3NywgNTYsIDEsIAotICAgIDI1MSwgMjU1LCAyMjksIDI3LCA1NiwgMSwgMjUxLCAyNTUsIDIyOCwgMjQ4LCA1NiwgMSwgMjUxLCAyNTUsIDIyOSwgNjQsIAotICAgIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA0LCA1NiwgMSwgMjU0LCAxOTQsIDI1MCwgMTkwLCA1NiwgMSwgMjU0LCAxOTQsIDIxNSwgCi0gICAgMTE4LCA1NiwgMSwgMjU0LCAxOTQsIDExMSwgNTYsIDEsIDI1NCwgMTk0LCAyMjYsIDEwNSwgNTgsIDEsIDI0NSwgMjAsIAotICAgIDI0NSwgMTksIDI0OSwgMTgyLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NSwgMjAsIDI0OSwgMTgyLCAxMzgsIDEzMCwgCisgICAgNDUsIDEwOCwgMTYsIDMxLCAyMjUsIDEyOCwgMjE4LCA0NSwgMTA4LCAxNiwgMzEsIDg1LCAyMTgsIDQ1LCAxMDgsIDE2LCAKKyAgICAzMSwgMjMxLCA2MCwgMjE4LCA3MiwgMTA4LCAxNiwgMzEsIDIzMSwgNjAsIDIxOCwgNzEsIDEwOCwgMTYsIDMxLCAyMzEsIAorICAgIDYwLCAyMTgsIDcwLCAxMDgsIDE2LCAzMSwgMjUwLCA0NiwgMTA4LCAxNiwgMzEsIDIyMiwgMywgMTA4LCAxNiwgMzEsIDIyOCwgCisgICAgMTkzLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDEsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MCwgMTA4LCAxNiwgMzEsIDIyMiwgMjA2LCAKKyAgICAyMjIsIDMsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNiwgMjIyLCAyLCAxMDgsIDE2LCAzMSwgMjQyLCAxNzMsIDEwOCwgMTYsIAorICAgIDMxLCAyMTksIDE2OCwgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAKKyAgICAyMjYsIDE1NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjM1LCAxODMsIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIAorICAgIDIzNSwgMTgzLCAxMDgsIDE2LCAzMSwgMjQ5LCAxNzYsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjM1LCAxODIsIDIyNiwgCisgICAgMTU3LCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyNDksIAorICAgIDE3NSwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjQ5LCAxNzQsIDEwOCwgMTYsIDMxLCAyNDksIDE3NiwgMjU0LCA5MSwgCisgICAgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI0OSwgMTc2LCAyNTQsIDkxLCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIAorICAgIDIyMiwgNCwgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjEzLCAyNDMsIDEwOCwgMTYsIDMxLCAyMTYsIDg1LCAyMjYsIAorICAgIDE1NywgMTA4LCAxNiwgMzEsIDIzMywgNjMsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjU0LCA5MCwgMjI2LCAxNTcsIDEwOCwgCisgICAgMTYsIDMxLCAyMTgsIDczLCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIAorICAgIDMxLCAyMTgsIDczLCA2NCwgMjIyLCA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIxMywgMTU4LCA2NCwgMjU0LCA4OSwgCisgICAgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OCwgCisgICAgMTA4LCAxNiwgMzEsIDIyMywgMTAzLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDIsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgMTA4LCAKKyAgICAxNiwgMzEsIDIyMywgMTAwLCAxMDgsIDE2LCAzMSwgMjU0LCAxNjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE2NSwgMTA4LCAxNiwgCisgICAgMzEsIDIzMSwgMTY4LCAxMDgsIDE2LCAzMSwgMjIyLCA5LCAxMDgsIDE2LCAzMSwgMjUzLCAyNTQsIDEwOCwgMTYsIDMxLCAKKyAgICAyMjMsIDEyOCwgMTA4LCAxNiwgMzEsIDIyMywgMTI3LCAxMDgsIDE2LCAzMSwgMjUzLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIAorICAgIDIzNywgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMTcsIDUwLCAxMDgsIDE2LCAzMSwgMjE3LCA0OSwgMTA4LCAxNiwgMzEsIAorICAgIDIyNCwgMTEsIDIzMiwgMjI4LCAxMDgsIDE2LCAzMSwgMjUxLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIDE5MCwgMTA4LCAxNiwgCisgICAgMzEsIDI1MSwgMTg5LCAxMDgsIDE2LCAzMSwgMjU0LCAxNDYsIDEwOCwgMTYsIDMxLCAyMjYsIDIyMiwgMTA4LCAxNiwgMzEsIAorICAgIDIxOCwgMjUwLCAxMDgsIDE2LCAzMSwgMjE2LCA4MywgMTA4LCAxNiwgMzEsIDI0MiwgMTAzLCAxMDgsIDE2LCAzMSwgMjEyLCAKKyAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI5LCAxMDgsIDE2LCAzMSwgMjUxLCAyMiwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAorICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI1NCwgMjMwLCAxMjcsIDEwOCwgMTYsIDMxLCAyMjEsIDIwNCwgNjQsIDIzNSwgNjEsIDEwOCwgCisgICAgMTYsIDMxLCAyNTEsIDMzLCAxMDgsIDE2LCAzMSwgMjE1LCAyMjAsIDEwOCwgMTYsIDMxLCAyMTgsIDE1NiwgMjE1LCAyMjAsIAorICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE1NCwgMTA4LCAxNiwgMzEsIDIxOSwgNTgsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKKyAgICAxNiwgMzEsIDI0MCwgMjUzLCAyNDYsIDcyLCAxMDgsIDE2LCAzMSwgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNywgCisgICAgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyNTEsIDE1MCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI4LCAyNTEsIDE1MCwgMTA4LCAKKyAgICAxNiwgMzEsIDI1NCwgMTQzLCAxMDgsIDE2LCAzMSwgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE4LCAxMDgsIDE2LCAzMSwgCisgICAgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE3LCAxMDgsIDE2LCAzMSwgMjE4LCA2OSwgMTA4LCAxNiwgMzEsIDIyNCwgMjAzLCAKKyAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODksIDEwOCwgMTYsIDMxLCAyNDcsIDE5MSwgMTA4LCAxNiwgMzEsIDI0NywgMTkwLCAxMDgsIAorICAgIDE2LCAzMSwgMjI0LCAxMzQsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMywgMTA4LCAxNiwgMzEsIDI0OSwgMTMwLCAxMDgsIDE2LCAKKyAgICAzMSwgMjQ5LCAxMjksIDEwOCwgMTYsIDMxLCAyNDksIDEyOCwgMTA4LCAxNiwgMzEsIDI0OSwgMTI3LCAxMDgsIDE2LCAzMSwgCisgICAgMjQ5LCAxMjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE3OCwgMTA4LCAxNiwgMzEsIDI1MiwgMTI3LCA2NCwgMjMxLCAxNTQsIAorICAgIDEwOCwgMTYsIDMxLCAyNTIsIDEyNywgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDYwLCAxMDgsIDE2LCAzMSwgCisgICAgMjQwLCAyNDUsIDEwOCwgMTYsIDMxLCAyMjgsIDIxNywgMTA4LCAxNiwgMzEsIDI0OCwgMTUzLCAxMDgsIDE2LCAzMSwgMjMwLCAKKyAgICAxMzksIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgMTAyLCAxMDgsIDE2LCAzMSwgMTYzLCAyMjYsIDEzNiwgMTAsIDE0LCAyNDAsIAorICAgIDEwOSwgMTAsIDE0LCAyNDAsIDEwOCwgMTAsIDE0LCAyNDAsIDEwNywgMTAsIDE0LCAyNDAsIDEwNiwgMTAsIDE0LCAyNDAsIAorICAgIDEwNSwgMTAsIDE0LCAyNDAsIDEwNCwgMTAsIDE0LCAyNDAsIDEwMywgMTAsIDE0LCAyNDAsIDEwMiwgMTAsIDE0LCAyNDAsIAorICAgIDEwMSwgMTAsIDE0LCAyNDAsIDEwMCwgMTAsIDE0LCAyNDAsIDk5LCAxMCwgMTQsIDI0MCwgOTgsIDEwLCAxNCwgMjQwLCA5NywgCisgICAgMTAsIDE0LCAyNDAsIDk2LCAxMCwgMTQsIDI0MCwgOTUsIDEwLCAxNCwgMjQwLCA5NCwgMTAsIDE0LCAyNDAsIDkzLCAxMCwgCisgICAgMTQsIDI0MCwgOTIsIDEwLCAxNCwgMjQwLCA5MSwgMTAsIDE0LCAyNDAsIDkwLCAxMCwgMTQsIDI0MCwgODksIDEwLCAxNCwgCisgICAgMjQwLCA4OCwgMTAsIDE0LCAyNDAsIDg3LCAxMCwgMTQsIDI0MCwgODYsIDEwLCAxNCwgMjQwLCA4NSwgMTAsIDE0LCAyNDAsIAorICAgIDg0LCAxMCwgMTQsIDI0MCwgODMsIDEwLCAxNCwgMjQwLCA4MiwgMTAsIDE0LCAyNDAsIDgxLCAxMCwgMTQsIDI0MCwgODAsIAorICAgIDEwLCAxNCwgMjQwLCA3OSwgMTAsIDE0LCAyNDAsIDc4LCAxMCwgMTQsIDI0MCwgNzcsIDEwLCAxNCwgMjQwLCA3NiwgMTAsIAorICAgIDE0LCAyNDAsIDc1LCAxMCwgMTQsIDI0MCwgNzQsIDEwLCAxNCwgMjQwLCA3MywgMTAsIDE0LCAyNDAsIDcyLCAxMCwgMTQsIAorICAgIDI0MCwgNzEsIDEwLCAxNCwgMjQwLCA3MCwgMTAsIDE0LCAyNDAsIDY5LCAxMCwgMTQsIDI0MCwgNjgsIDEwLCAxNCwgMjQwLCAKKyAgICA2NywgMTAsIDE0LCAyNDAsIDY2LCAxMCwgMTQsIDI0MCwgNjUsIDEwLCAxNCwgMjQwLCA2NCwgMTAsIDE0LCAyNDAsIDYzLCAKKyAgICAxMCwgMTQsIDI0MCwgNjIsIDEwLCAxNCwgMjQwLCA2MSwgMTAsIDE0LCAyNDAsIDYwLCAxMCwgMTQsIDI0MCwgNTksIDEwLCAKKyAgICAxNCwgMjQwLCA1OCwgMTAsIDE0LCAyNDAsIDU3LCAxMCwgMTQsIDI0MCwgNTYsIDEwLCAxNCwgMjQwLCA1NSwgMTAsIDE0LCAKKyAgICAyNDAsIDU0LCAxMCwgMTQsIDI0MCwgNTMsIDEwLCAxNCwgMjQwLCA1MiwgMTAsIDE0LCAyNDAsIDUxLCAxMCwgMTQsIDI0MCwgCisgICAgNTAsIDEwLCAxNCwgMjQwLCA0OSwgMTAsIDE0LCAyNDAsIDQ4LCAxMCwgMTQsIDI0MCwgNDcsIDEwLCAxNCwgMjQwLCA0NiwgCisgICAgMTAsIDE0LCAyNDAsIDQ1LCAxMCwgMTQsIDI0MCwgNDQsIDEwLCAxNCwgMjQwLCA0MywgMTAsIDE0LCAyNDAsIDQyLCAxMCwgCisgICAgMTQsIDI0MCwgNDEsIDEwLCAxNCwgMjQwLCA0MCwgMTAsIDE0LCAyNDAsIDM5LCAxMCwgMTQsIDI0MCwgMzgsIDEwLCAxNCwgCisgICAgMjQwLCAzNywgMTAsIDE0LCAyNDAsIDM2LCAxMCwgMTQsIDI0MCwgMzUsIDEwLCAxNCwgMjQwLCAzNCwgMTAsIDE0LCAyNDAsIAorICAgIDMzLCAxMCwgMTQsIDI0MCwgMzIsIDEwLCAxNCwgMjQwLCAzMSwgMTAsIDE0LCAyNDAsIDMwLCAxMCwgMTQsIDI0MCwgMjksIAorICAgIDEwLCAxNCwgMjQwLCAyOCwgMTAsIDE0LCAyNDAsIDI3LCAxMCwgMTQsIDI0MCwgMjYsIDEwLCAxNCwgMjQwLCAyNSwgMTAsIAorICAgIDE0LCAyNDAsIDI0LCAxMCwgMTQsIDI0MCwgMjMsIDEwLCAxNCwgMjQwLCAyMiwgMTAsIDE0LCAyNDAsIDIxLCAxMCwgMTQsIAorICAgIDI0MCwgMjAsIDEwLCAxNCwgMjQwLCAxOSwgMTAsIDE0LCAyNDAsIDE4LCAxMCwgMTQsIDI0MCwgMTcsIDEwLCAxNCwgMjQwLCAKKyAgICAxNiwgMTAsIDE0LCAyNDAsIDE1LCAxMCwgMTQsIDI0MCwgMTQsIDEwLCAxNCwgMjQwLCAxMywgMTAsIDE0LCAyNDAsIDEyLCAKKyAgICAxMCwgMTQsIDI0MCwgMTEsIDEwLCAxNCwgMjQwLCAxMCwgMTAsIDE0LCAyNDAsIDksIDEwLCAxNCwgMjQwLCA4LCAxMCwgMTQsIAorICAgIDI0MCwgNywgMTAsIDE0LCAyNDAsIDYsIDEwLCAxNCwgMjQwLCA1LCAxMCwgMTQsIDI0MCwgNCwgMTAsIDE0LCAyNDAsIDMsIAorICAgIDEwLCAxNCwgMjQwLCAyLCAxMCwgMTQsIDI0MCwgMSwgMTAsIDE0LCAyNDAsIDAsIDEwLCAxNCwgMjM5LCAyNTUsIDEwLCAxNCwgCisgICAgMjM5LCAyNTQsIDEwLCAxNCwgMjM5LCAyNTMsIDEwLCAxNCwgMjM5LCAyNTIsIDEwLCAxNCwgMjM5LCAyNTEsIDEwLCAxNCwgCisgICAgMjM5LCAyNTAsIDEwLCAxNCwgMjM5LCAyNDksIDEwLCAxNCwgMjM5LCAyNDgsIDEwLCAxNCwgMjM5LCAyNDcsIDEwLCAxNCwgCisgICAgMjM5LCAyNDYsIDEwLCAxNCwgMjM5LCAyNDUsIDEwLCAxNCwgMjM5LCAyNDQsIDEwLCAxNCwgMjM5LCAyNDMsIDEwLCAxNCwgCisgICAgMjM5LCAyNDIsIDEwLCAxNCwgMjM5LCAyNDEsIDEwLCAxNCwgMjM5LCAyNDAsIDEwLCAxNCwgMjM5LCAyMzksIDEwLCAxNCwgCisgICAgMjM5LCAyMzgsIDEwLCAxNCwgMjM5LCAyMzcsIDEwLCAxNCwgMjM5LCAyMzYsIDEwLCAxNCwgMjM5LCAyMzUsIDEwLCAxNCwgCisgICAgMjM5LCAyMzQsIDEwLCAxNCwgMjM5LCAyMzMsIDEwLCAxNCwgMjM5LCAyMzIsIDEwLCAxNCwgMjM5LCAyMzEsIDEwLCAxNCwgCisgICAgMjM5LCAyMzAsIDEwLCAxNCwgMjM5LCAyMjksIDEwLCAxNCwgMjM5LCAyMjgsIDEwLCAxNCwgMjM5LCAyMjcsIDEwLCAxNCwgCisgICAgMjM5LCAyMjYsIDEwLCAxNCwgMjM5LCAyMjUsIDEwLCAxNCwgMjM5LCAyMjQsIDEwLCAxNCwgMjM5LCAyMjMsIDEwLCAxNCwgCisgICAgMjM5LCAyMjIsIDEwLCAxNCwgMjM5LCAyMjEsIDEwLCAxNCwgMjM5LCAyMjAsIDEwLCAxNCwgMjM5LCAyMTksIDEwLCAxNCwgCisgICAgMjM5LCAyMTgsIDEwLCAxNCwgMjM5LCAyMTcsIDEwLCAxNCwgMjM5LCAyMTYsIDEwLCAxNCwgMjM5LCAyMTUsIDEwLCAxNCwgCisgICAgMjM5LCAyMTQsIDEwLCAxNCwgMjM5LCAyMTMsIDEwLCAxNCwgMjM5LCAyMTIsIDEwLCAxNCwgMjM5LCAyMTEsIDEwLCAxNCwgCisgICAgMjM5LCAyMTAsIDEwLCAxNCwgMjM5LCAyMDksIDEwLCAxNCwgMjM5LCAyMDgsIDEwLCAxNCwgMjM5LCAyMDcsIDEwLCAxNCwgCisgICAgMjM5LCAyMDYsIDEwLCAxNCwgMjM5LCAyMDUsIDEwLCAxNCwgMjM5LCAyMDQsIDEwLCAxNCwgMjM5LCAyMDMsIDEwLCAxNCwgCisgICAgMjM5LCAyMDIsIDEwLCAxNCwgMjM5LCAyMDEsIDEwLCAxNCwgMjM5LCAyMDAsIDEwLCAxNCwgMjM5LCAxOTksIDEwLCAxNCwgCisgICAgMjM5LCAxOTgsIDEwLCAxNCwgMjM5LCAxOTcsIDEwLCAxNCwgMjM5LCAxOTYsIDEwLCAxNCwgMjM5LCAxOTUsIDEwLCAxNCwgCisgICAgMjM5LCAxOTQsIDEwLCAxNCwgMjM5LCAxOTMsIDEwLCAxNCwgMjM5LCAxOTIsIDEwLCAxNCwgMjM5LCAxOTEsIDEwLCAxNCwgCisgICAgMjM5LCAxOTAsIDEwLCAxNCwgMjM5LCAxODksIDEwLCAxNCwgMjM5LCAxODgsIDEwLCAxNCwgMjM5LCAxODcsIDEwLCAxNCwgCisgICAgMjM5LCAxODYsIDEwLCAxNCwgMjM5LCAxODUsIDEwLCAxNCwgMjM5LCAxODQsIDEwLCAxNCwgMjM5LCAxODMsIDEwLCAxNCwgCisgICAgMjM5LCAxODIsIDEwLCAxNCwgMjM5LCAxODEsIDEwLCAxNCwgMjM5LCAxODAsIDEwLCAxNCwgMjM5LCAxNzksIDEwLCAxNCwgCisgICAgMjM5LCAxNzgsIDEwLCAxNCwgMjM5LCAxNzcsIDEwLCAxNCwgMjM5LCAxNzYsIDEwLCAxNCwgMjM5LCAxNzUsIDEwLCAxNCwgCisgICAgMjM5LCAxNzQsIDEwLCAxNCwgMjM5LCAxNzMsIDEwLCAxNCwgMjM5LCAxNzIsIDEwLCAxNCwgMjM5LCAxNzEsIDEwLCAxNCwgCisgICAgMjM5LCAxNzAsIDEwLCAxNCwgMjM5LCAxNjksIDEwLCAxNCwgMjM5LCAxNjgsIDEwLCAxNCwgMjM5LCAxNjcsIDEwLCAxNCwgCisgICAgMjM5LCAxNjYsIDEwLCAxNCwgMjM5LCAxNjUsIDEwLCAxNCwgMjM5LCAxNjQsIDEwLCAxNCwgMjM5LCAxNjMsIDEwLCAxNCwgCisgICAgMjM5LCAxNjIsIDEwLCAxNCwgMjM5LCAxNjEsIDEwLCAxNCwgMjM5LCAxNjAsIDEwLCAxNCwgMjM5LCAxNTksIDEwLCAxNCwgCisgICAgMjM5LCAxNTgsIDEwLCAxNCwgMjM5LCAxNTcsIDEwLCAxNCwgMjM5LCAxNTYsIDEwLCAxNCwgMjM5LCAxNTUsIDEwLCAxNCwgCisgICAgMjM5LCAxNTQsIDEwLCAxNCwgMjM5LCAxNTMsIDEwLCAxNCwgMjM5LCAxNTIsIDEwLCAxNCwgMjM5LCAxNTEsIDEwLCAxNCwgCisgICAgMjM5LCAxNTAsIDEwLCAxNCwgMjM5LCAxNDksIDEwLCAxNCwgMjM5LCAxNDgsIDEwLCAxNCwgMjM5LCAxNDcsIDEwLCAxNCwgCisgICAgMjM5LCAxNDYsIDEwLCAxNCwgMjM5LCAxNDUsIDEwLCAxNCwgMjM5LCAxNDQsIDEwLCAxNCwgMjM5LCAxNDMsIDEwLCAxNCwgCisgICAgMjM5LCAxNDIsIDEwLCAxNCwgMjM5LCAxNDEsIDEwLCAxNCwgMjM5LCAxNDAsIDEwLCAxNCwgMjM5LCAxMzksIDEwLCAxNCwgCisgICAgMjM5LCAxMzgsIDEwLCAxNCwgMjM5LCAxMzcsIDEwLCAxNCwgMjM5LCAxMzYsIDEwLCAxNCwgMjM5LCAxMzUsIDEwLCAxNCwgCisgICAgMjM5LCAxMzQsIDEwLCAxNCwgMjM5LCAxMzMsIDEwLCAxNCwgMjM5LCAxMzIsIDEwLCAxNCwgMjM5LCAxMzEsIDEwLCAxNCwgCisgICAgMjM5LCAxMzAsIDEwLCAxNCwgMjM5LCAxMjksIDEwLCAxNCwgMjM5LCAxMjgsIDEwLCAxNCwgMjM5LCAxMjcsIDEwLCAxNCwgCisgICAgMjM5LCAxMjYsIDEwLCAxNCwgMjM5LCAxMjUsIDEwLCAxNCwgMjM5LCAxMjQsIDEwLCAxNCwgMjM5LCAxMjMsIDEwLCAxNCwgCisgICAgMjM5LCAxMjIsIDEwLCAxNCwgMjM5LCAxMjEsIDEwLCAxNCwgMjM5LCAxMjAsIDEwLCAxNCwgMjM5LCAxMTksIDEwLCAxNCwgCisgICAgMjM5LCAxMTgsIDEwLCAxNCwgMjM5LCAxMTcsIDEwLCAxNCwgMjM5LCAxMTYsIDEwLCAxNCwgMjM5LCAxMTUsIDEwLCAxNCwgCisgICAgMjM5LCAxMTQsIDEwLCAxNCwgMjM5LCAxMTMsIDEwLCAxNCwgMjM5LCAxMTIsIDEwLCAxNCwgMjM5LCAxMTEsIDEwLCAxNCwgCisgICAgMjM5LCAxMTAsIDEwLCAxNCwgMjM5LCAxMDksIDEwLCAxNCwgMjM5LCAxMDgsIDEwLCAxNCwgMjM5LCAxMDcsIDEwLCAxNCwgCisgICAgMjM5LCAxMDYsIDEwLCAxNCwgMjM5LCAxMDUsIDEwLCAxNCwgMjM5LCAxMDQsIDEwLCAxNCwgMjM5LCAxMDMsIDEwLCAxNCwgCisgICAgMjM5LCAxMDIsIDEwLCAxNCwgMjM5LCAxMDEsIDEwLCAxNCwgMjM5LCAxMDAsIDEwLCAxNCwgMjM5LCA5OSwgMTAsIDE0LCAKKyAgICAyMzksIDk4LCAxMCwgMTQsIDIzOSwgOTcsIDEwLCAxNCwgMjM5LCA5NiwgMTAsIDE0LCAyMzksIDk1LCAxMCwgMTQsIDIzOSwgCisgICAgOTQsIDEwLCAxNCwgMjM5LCA5MywgMTAsIDE0LCAyMzksIDkyLCAxMCwgMTQsIDIzOSwgOTEsIDEwLCAxNCwgMjM5LCA5MCwgCisgICAgMTAsIDE0LCAyMzksIDg5LCAxMCwgMTQsIDIzOSwgODgsIDEwLCAxNCwgMjM5LCA4NywgMTAsIDE0LCAyMzksIDg2LCAxMCwgCisgICAgMTQsIDIzOSwgODUsIDEwLCAxNCwgMjM5LCA4NCwgMTAsIDE0LCAyMzksIDgzLCAxMCwgMTQsIDIzOSwgODIsIDEwLCAxNCwgCisgICAgMjM5LCA4MSwgMTAsIDE0LCAyMzksIDgwLCAxMCwgMTQsIDIzOSwgNzksIDEwLCAxNCwgMjM5LCA3OCwgMTAsIDE0LCAyMzksIAorICAgIDc3LCAxMCwgMTQsIDIzOSwgNzYsIDEwLCAxNCwgMjM5LCA3NSwgMTAsIDE0LCAyMzksIDc0LCAxMCwgMTQsIDIzOSwgNzMsIAorICAgIDEwLCAxNCwgMjM5LCA3MiwgMTAsIDE0LCAyMzksIDcxLCAxMCwgMTQsIDIzOSwgNzAsIDEwLCAxNCwgMjM5LCA2OSwgMTAsIAorICAgIDE0LCAyMzksIDY4LCAxMCwgMTQsIDIzOSwgNjcsIDEwLCAxNCwgMjM5LCA2NiwgMTAsIDE0LCAyMzksIDY1LCAxMCwgMTQsIAorICAgIDIzOSwgNjQsIDEwLCAxNCwgMjM5LCA2MywgMTAsIDE0LCAyMzksIDYyLCAxMCwgMTQsIDIzOSwgNjEsIDEwLCAxNCwgMjM5LCAKKyAgICA2MCwgMTAsIDE0LCAyMzksIDU5LCAxMCwgMTQsIDIzOSwgNTgsIDEwLCAxNCwgMjM5LCA1NywgMTAsIDE0LCAyMzksIDU2LCAKKyAgICAxMCwgMTQsIDIzOSwgNTUsIDEwLCAxNCwgMjM5LCA1NCwgMTAsIDE0LCAyMzksIDUzLCAxMCwgMTQsIDIzOSwgNTIsIDEwLCAKKyAgICAxNCwgMjM5LCA1MSwgMTAsIDE0LCAyMzksIDUwLCAxMCwgMTQsIDIzOSwgNDksIDEwLCAxNCwgMjM5LCA0OCwgMTAsIDE0LCAKKyAgICAyMzksIDQ3LCAxMCwgMTQsIDIzOSwgNDYsIDEwLCAxNCwgMjM5LCA0NSwgMTAsIDE0LCAyMzksIDQ0LCAxMCwgMTQsIDIzOSwgCisgICAgNDMsIDEwLCAxNCwgMjM5LCA0MiwgMTAsIDE0LCAyMzksIDQxLCAxMCwgMTQsIDIzOSwgNDAsIDEwLCAxNCwgMjM5LCAzOSwgCisgICAgMTAsIDE0LCAyMzksIDM4LCAxMCwgMTQsIDIzOSwgMzcsIDEwLCAxNCwgMjM5LCAzNiwgMTAsIDE0LCAyMzksIDM1LCAxMCwgCisgICAgMTQsIDIzOSwgMzQsIDEwLCAxNCwgMjM5LCAzMywgMTAsIDE0LCAyMzksIDMyLCAxMCwgMTQsIDIzOSwgMzEsIDEwLCAxNCwgCisgICAgMjM5LCAzMCwgMTAsIDE0LCAyMzksIDI5LCAxMCwgMTQsIDIzOSwgMjgsIDEwLCAxNCwgMjM5LCAyNywgMTAsIDE0LCAyMzksIAorICAgIDI2LCAxMCwgMTQsIDIzOSwgMjUsIDEwLCAxNCwgMjM5LCAyNCwgMTAsIDE0LCAyMzksIDIzLCAxMCwgMTQsIDIzOSwgMjIsIAorICAgIDEwLCAxNCwgMjM5LCAyMSwgMTAsIDE0LCAyMzksIDIwLCAxMCwgMTQsIDIzOSwgMTksIDEwLCAxNCwgMjM5LCAxOCwgMTAsIAorICAgIDE0LCAyMzksIDE3LCAxMCwgMTQsIDIzOSwgMTYsIDEwLCAxNCwgMjM5LCAxNSwgMTAsIDE0LCAyMzksIDE0LCAxMCwgMTQsIAorICAgIDIzOSwgMTMsIDEwLCAxNCwgMjM5LCAxMiwgMTAsIDE0LCAyMzksIDExLCAxMCwgMTQsIDIzOSwgMTAsIDEwLCAxNCwgMjM5LCAKKyAgICA5LCAxMCwgMTQsIDIzOSwgOCwgMTAsIDE0LCAyMzksIDcsIDEwLCAxNCwgMjM5LCA2LCAxMCwgMTQsIDIzOSwgNSwgMTAsIAorICAgIDE0LCAyMzksIDQsIDEwLCAxNCwgMjM5LCAzLCAxMCwgMTQsIDIzOSwgMiwgMTAsIDE0LCAyMzksIDEsIDEwLCAxNCwgMjM5LCAKKyAgICAwLCAxMCwgMTQsIDIzOCwgMjU1LCAxMCwgMTQsIDIzOCwgMjU0LCAxMCwgMTQsIDIzOCwgMjUzLCAxMCwgMTQsIDIzOCwgCisgICAgMjUyLCAxMCwgMTQsIDIzOCwgMjUxLCAxMCwgMTQsIDIzOCwgMjUwLCAxMCwgMTQsIDIzOCwgMjQ5LCAxMCwgMTQsIDIzOCwgCisgICAgMjQ4LCAxMCwgMTQsIDIzOCwgMjQ3LCAxMCwgMTQsIDIzOCwgMjQ2LCAxMCwgMTQsIDIzOCwgMjQ1LCAxMCwgMTQsIDIzOCwgCisgICAgMjQ0LCAxMCwgMTQsIDIzOCwgMjQzLCAxMCwgMTQsIDIzOCwgMjQyLCAxMCwgMTQsIDIzOCwgMjQxLCAxMCwgMTQsIDIzOCwgCisgICAgMjQwLCAxMCwgMTQsIDIzOCwgMjM5LCAxMCwgMTQsIDIzOCwgMjM4LCAxMCwgMTQsIDIzOCwgMjM3LCAxMCwgMTQsIDIzOCwgCisgICAgMjM2LCAxMCwgMTQsIDIzOCwgMjM1LCAxMCwgMTQsIDIzOCwgMjM0LCAxMCwgMTQsIDIzOCwgMjMzLCAxMCwgMTQsIDIzOCwgCisgICAgMjMyLCAxMCwgMTQsIDIzOCwgMjMxLCAxMCwgMTQsIDIzOCwgMjMwLCAxMCwgMTQsIDIzOCwgMjI5LCAxMCwgMTQsIDIzOCwgCisgICAgMjI4LCAxMCwgMTQsIDIzOCwgMjI3LCAxMCwgMTQsIDIzOCwgMjI2LCAxMCwgMTQsIDIzOCwgMjI1LCAxMCwgMTQsIDIzOCwgCisgICAgMjI0LCAxMCwgMTQsIDIzOCwgMjIzLCAxMCwgMTQsIDIzOCwgMjIyLCAxMCwgMTQsIDIzOCwgMjIxLCAxMCwgMTQsIDIzOCwgCisgICAgMjIwLCAxMCwgMTQsIDIzOCwgMjE5LCAxMCwgMTQsIDIzOCwgMjE4LCAxMCwgMTQsIDIzOCwgMjE3LCAxMCwgMTQsIDIzOCwgCisgICAgMjE2LCAxMCwgMTQsIDIzOCwgMjE1LCAxMCwgMTQsIDIzOCwgMjE0LCAxMCwgMTQsIDIzOCwgMjEzLCAxMCwgMTQsIDIzOCwgCisgICAgMjEyLCAxMCwgMTQsIDIzOCwgMjExLCAxMCwgMTQsIDIzOCwgMjEwLCAxMCwgMTQsIDIzOCwgMjA5LCAxMCwgMTQsIDIzOCwgCisgICAgMjA4LCAxMCwgMTQsIDIzOCwgMjA3LCAxMCwgMTQsIDIzOCwgMjA2LCAxMCwgMTQsIDIzOCwgMjA1LCAxMCwgMTQsIDIzOCwgCisgICAgMjA0LCAxMCwgMTQsIDIzOCwgMjAzLCAxMCwgMTQsIDIzOCwgMjAyLCAxMCwgMTQsIDIzOCwgMjAxLCAxMCwgMTQsIDIzOCwgCisgICAgMjAwLCAxMCwgMTQsIDIzOCwgMTk5LCAxMCwgMTQsIDIzOCwgMTk4LCAxMCwgMTQsIDIzOCwgMTk3LCAxMCwgMTQsIDIzOCwgCisgICAgMTk2LCAxMCwgMTQsIDIzOCwgMTk1LCAxMCwgMTQsIDIzOCwgMTk0LCAxMCwgMTQsIDIzOCwgMTkzLCAxMCwgMTQsIDIzOCwgCisgICAgMTkyLCAxMCwgMTQsIDIzOCwgMTkxLCAxMCwgMTQsIDIzOCwgMTkwLCAxMCwgMTQsIDIzOCwgMTg5LCAxMCwgMTQsIDIzOCwgCisgICAgMTg4LCAxMCwgMTQsIDIzOCwgMTg3LCAxMCwgMTQsIDIzOCwgMTg2LCAxMCwgMTQsIDIzOCwgMTg1LCAxMCwgMTQsIDIzOCwgCisgICAgMTg0LCAxMCwgMTQsIDIzOCwgMTgzLCAxMCwgMTQsIDIzOCwgMTgyLCAxMCwgMTQsIDIzOCwgMTgxLCAxMCwgMTQsIDIzOCwgCisgICAgMTgwLCAxMCwgMTQsIDIzOCwgMTc5LCAxMCwgMTQsIDIzOCwgMTc4LCAxMCwgMTQsIDIzOCwgMTc3LCAxMCwgMTQsIDIzOCwgCisgICAgMTc2LCAxMCwgMTQsIDIzOCwgMTc1LCAxMCwgMTQsIDIzOCwgMTc0LCAxMCwgMTQsIDIzOCwgMTczLCAxMCwgMTQsIDIzOCwgCisgICAgMTcyLCAxMCwgMTQsIDIzOCwgMTcxLCAxMCwgMTQsIDIzOCwgMTcwLCAxMCwgMTQsIDIzOCwgMTY5LCAxMCwgMTQsIDIzOCwgCisgICAgMTY4LCAxMCwgMTQsIDIzOCwgMTY3LCAxMCwgMTQsIDIzOCwgMTY2LCAxMCwgMTQsIDIzOCwgMTY1LCAxMCwgMTQsIDIzOCwgCisgICAgMTY0LCAxMCwgMTQsIDIzOCwgMTYzLCAxMCwgMTQsIDIzOCwgMTYyLCAxMCwgMTQsIDIzOCwgMTYxLCAxMCwgMTQsIDIzOCwgCisgICAgMTYwLCAxMCwgMTQsIDIzOCwgMTU5LCAxMCwgMTQsIDIzOCwgMTU4LCAxMCwgMTQsIDIzOCwgMTU3LCAxMCwgMTQsIDIzOCwgCisgICAgMTU2LCAxMCwgMTQsIDIzOCwgMTU1LCAxMCwgMTQsIDIzOCwgMTU0LCAxMCwgMTQsIDIzOCwgMTUzLCAxMCwgMTQsIDIzOCwgCisgICAgMTUyLCAxMCwgMTQsIDIzOCwgMTUxLCAxMCwgMTQsIDIzOCwgMTUwLCAxMCwgMTQsIDIzOCwgMTQ5LCAxMCwgMTQsIDIzOCwgCisgICAgMTQ4LCAxMCwgMTQsIDIzOCwgMTQ3LCAxMCwgMTQsIDIzOCwgMTQ2LCAxMCwgMTQsIDIzOCwgMTQ1LCAxMCwgMTQsIDIzOCwgCisgICAgMTQ0LCAxMCwgMTQsIDIzOCwgMTQzLCAxMCwgMTQsIDIzOCwgMTQyLCAxMCwgMTQsIDIzOCwgMTQxLCAxMCwgMTQsIDIzOCwgCisgICAgMTQwLCAxMCwgMTQsIDIzOCwgMTM5LCAxMCwgMTQsIDIzOCwgMTM4LCAxMCwgMTQsIDIzOCwgMTM3LCAxMCwgMTQsIDIzOCwgCisgICAgMTM2LCAxMCwgMTQsIDIzOCwgMTM1LCAxMCwgMTQsIDIzOCwgMTM0LCAxMCwgMTQsIDIzOCwgMTMzLCAxMCwgMTQsIDIzOCwgCisgICAgMTMyLCAxMCwgMTQsIDIzOCwgMTMxLCAxMCwgMTQsIDIzOCwgMTMwLCAxMCwgMTQsIDIzOCwgMTI5LCAxMCwgMTQsIDIzOCwgCisgICAgMTI4LCAxMCwgMTQsIDIzOCwgMTI3LCAxMCwgMTQsIDIzOCwgMTI2LCAxMCwgMTQsIDIzOCwgMTI1LCAxMCwgMTQsIDIzOCwgCisgICAgMTI0LCAxMCwgMTQsIDIzOCwgMTIzLCAxMCwgMTQsIDIzOCwgMTIyLCAxMCwgMTQsIDIzOCwgMTIxLCAxMCwgMTQsIDIzOCwgCisgICAgMTIwLCAxMCwgMTQsIDIzOCwgMTE5LCAxMCwgMTQsIDIzOCwgMTE4LCAxMCwgMTQsIDIzOCwgMTE3LCAxMCwgMTQsIDIzOCwgCisgICAgMTE2LCAxMCwgMTQsIDIzOCwgMTE1LCAxMCwgMTQsIDIzOCwgMTE0LCAxMCwgMTQsIDIzOCwgMTEzLCAxMCwgMTQsIDIzOCwgCisgICAgMTEyLCAxMCwgMTQsIDIzOCwgMTExLCAxMCwgMTQsIDIzOCwgMTEwLCAxMCwgMTQsIDIzOCwgMTA5LCAxMCwgMTQsIDIzOCwgCisgICAgMTA4LCAxMCwgMTQsIDIzOCwgMTA3LCAxMCwgMTQsIDIzOCwgMTA2LCAxMCwgMTQsIDIzOCwgMTA1LCAxMCwgMTQsIDIzOCwgCisgICAgMTA0LCAxMCwgMTQsIDIzOCwgMTAzLCAxMCwgMTQsIDIzOCwgMTAyLCAxMCwgMTQsIDIzOCwgMTAxLCAxMCwgMTQsIDIzOCwgCisgICAgMTAwLCAxMCwgMTQsIDIzOCwgOTksIDEwLCAxNCwgMjM4LCA5OCwgMTAsIDE0LCAyMzgsIDk3LCAxMCwgMTQsIDIzOCwgOTYsIAorICAgIDEwLCAxNCwgMjM4LCA5NSwgMTAsIDE0LCAyMzgsIDk0LCAxMCwgMTQsIDIzOCwgOTMsIDEwLCAxNCwgMjM4LCA5MiwgMTAsIAorICAgIDE0LCAyMzgsIDkxLCAxMCwgMTQsIDIzOCwgOTAsIDEwLCAxNCwgMjM4LCA4OSwgMTAsIDE0LCAyMzgsIDg4LCAxMCwgMTQsIAorICAgIDIzOCwgODcsIDEwLCAxNCwgMjM4LCA4NiwgMTAsIDE0LCAyMzgsIDg1LCAxMCwgMTQsIDIzOCwgODQsIDEwLCAxNCwgMjM4LCAKKyAgICA4MywgMTAsIDE0LCAyMzgsIDgyLCAxMCwgMTQsIDIzOCwgODEsIDEwLCAxNCwgMjM4LCA4MCwgMjMzLCA5NiwgMjE3LCA4NSwgCisgICAgMTI5LCAyMTksIDIwLCAxMjksIDI0NSwgMzksIDc5LCAxMjksIDIyNCwgMSwgNzksIDEyOSwgNTQsIDUwLCAxMjksIDI0NywgCisgICAgMTQwLCA1MCwgMTI5LCAyMjUsIDE4NSwgNTAsIDEyOSwgMjU0LCAxMzQsIDEyOSwgMjU0LCA2NSwgMTI5LCA0MywgMjI2LCA3LCAKKyAgICAxMjksIDQ0LCAyMjYsIDcsIDEyOSwgMjUzLCAyMjQsIDEyOSwgOTYsIDUwLCAxMjksIDI0OSwgMjI3LCAxMjksIDI0MCwgCisgICAgMTc0LCAxMjksIDI0MywgMjM2LCAyMTgsIDEzMSwgMTI5LCAyMTksIDQ4LCAxMjksIDIxLCAyMTAsIDg2LCAxMjksIDIxLCAKKyAgICAxMTEsIDEyOSwgMjEsIDEwNSwgMTI5LCAyMSwgMTU4LCAxMjksIDIxLCAxNjEsIDEyOSwgMjEsIDE5MCwgMTI5LCAyMSwgCisgICAgMTk1LCAxMjksIDIxLCAxOTksIDEyOSwgMjEsIDE5NiwgMTI5LCAyMSwgMjAxLCAxMjksIDI0OSwgMjM0LCAxMjksIDIyMCwgCisgICAgMTUyLCAxMjksIDIzMywgMjEsIDUwLCAxMjksIDI0NSwgMTA2LCA1MCwgMTI5LCAyNDIsIDEzNywgNTAsIDEyOSwgMjI0LCAKKyAgICAxNiwgNzksIDEyOSwgMjQ5LCAyMjUsIDI1MywgMjE0LCAxMjksIDcsIDYsIDEsIDYxLCAxMjksIDcsIDYsIDEsIDI1MywgCisgICAgMTY2LCAxMjksIDcsIDYsIDEsIDI1MSwgNzQsIDEyOSwgNywgNiwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCAKKyAgICA3LCA2LCAxLCAyNDUsIDE0LCAxMjksIDcsIDYsIDEsIDI0MywgMjA5LCAxMjksIDcsIDYsIDEsIDI0MiwgNjcsIDEyOSwgNywgCisgICAgNiwgMSwgNzQsIDEyOSwgNywgNiwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNiwgMSwgMjM1LCAyOSwgMTI5LCA3LCA2LCAxLCAKKyAgICAxNTYsIDEyOSwgNywgNiwgMSwgMTk0LCAxMjksIDcsIDYsIDEsIDIzMCwgMzAsIDEyOSwgNywgNiwgMSwgNzgsIDEyOSwgNywgCisgICAgNiwgMSwgMjI2LCAxMDksIDEyOSwgNywgNiwgMSwgMjI0LCA5OSwgMTI5LCA3LCA2LCAxLCAxNTMsIDEyOSwgNywgNiwgMSwgCisgICAgMjIyLCA5MywgMTI5LCA3LCA2LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA2LCAxLCA2OSwgMTI5LCA3LCA2LCAxLCAyMTQsIAorICAgIDEwNSwgMTI5LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjksIDcsIDYsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDYsIDEsIDIxMSwgCisgICAgMTE3LCAxMjksIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCA0MiwgMTI3LCAxMjksIDIyMywgNTMsIDIxOSwgNDgsIAorICAgIDEyOSwgNDQsIDQyLCAxMjcsIDEyOSwgMjUwLCAzOSwgMjU1LCAyMywgMTI5LCAxMjEsIDIzMiwgMjE5LCAxMjksIDI0MiwgCisgICAgMTQ0LCAyNTUsIDIzLCAxMjksIDcsIDQsIDEsIDYxLCAxMjksIDcsIDQsIDEsIDI1MywgMTY2LCAxMjksIDcsIDQsIDEsIAorICAgIDI1MSwgNzQsIDEyOSwgNywgNCwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA0LCAxLCA3NiwgMTI5LCA3LCA0LCAxLCAyNDUsIDE0LCAKKyAgICAxMjksIDcsIDQsIDEsIDI0MywgMjA5LCAxMjksIDcsIDQsIDEsIDI0MiwgNjcsIDEyOSwgNywgNCwgMSwgNzQsIDEyOSwgNywgCisgICAgNCwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNCwgMSwgMjM1LCAyOSwgMTI5LCA3LCA0LCAxLCAxNTYsIDEyOSwgNywgNCwgMSwgCisgICAgMTk0LCAxMjksIDcsIDQsIDEsIDIzMCwgMzAsIDEyOSwgNywgNCwgMSwgNzgsIDEyOSwgNywgNCwgMSwgMjI2LCAxMDksIAorICAgIDEyOSwgNywgNCwgMSwgMjI0LCA5OSwgMTI5LCA3LCA0LCAxLCAxNTMsIDEyOSwgNywgNCwgMSwgMjIyLCA5MywgMTI5LCA3LCAKKyAgICA0LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA0LCAxLCA2OSwgMTI5LCA3LCA0LCAxLCAyMTQsIDEwNSwgMTI5LCA3LCA0LCAxLCAKKyAgICAyMTIsIDk4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTE3LCAxMjksIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAxMjksIDQzLCAyNDksIDEwNywgMTI3LCAxMjksIDY3LCAyMzIsIDIxOSwgMTI5LCA0NCwgMjQ5LCAxMDcsIAorICAgIDEyNywgMTI5LCAxODQsIDI1MSwgMTQsIDIxNywgODUsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNTgsIAorICAgIDQ1LCAyMjEsIDQ2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDEzLCA0NSwgMjIxLCAyLCA0NSwgMjIwLCAKKyAgICAyNDcsIDQ1LCAyMjAsIDIzOSwgNDUsIDIyMCwgMjM4LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgCisgICAgMjM0LCA0NSwgMjIwLCAyMzMsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIAorICAgIDIyOSwgNDUsIDIyMCwgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAKKyAgICAyMjMsIDQ1LCAyMjAsIDIyMiwgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgCisgICAgMjE4LCA0NSwgMjIwLCAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIAorICAgIDIxMiwgNDUsIDIyMCwgMjExLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAKKyAgICAyMDcsIDQ1LCAyMjAsIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgCisgICAgMjAxLCA0NSwgMjIwLCAyMDAsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIAorICAgIDE5NiwgNDUsIDIyMCwgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAKKyAgICAxOTAsIDQ1LCAyMjAsIDE4OSwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgCisgICAgMTg1LCA0NSwgMjIwLCAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIAorICAgIDE3OSwgNDUsIDIyMCwgMTc4LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAKKyAgICAxNzQsIDQ1LCAyMjAsIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgCisgICAgMTY4LCA0NSwgMjIwLCAxNjcsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIAorICAgIDE2MywgNDUsIDIyMCwgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIxLCAKKyAgICAxNTYsIDQ1LCAyMjEsIDE1NSwgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgCisgICAgMTUxLCA0NSwgMjIxLCAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIAorICAgIDE0NSwgNDUsIDIyMSwgMTQ0LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAKKyAgICAxNDAsIDQ1LCAyMjEsIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgCisgICAgMTM0LCA0NSwgMjIxLCAxMzMsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIAorICAgIDEyOSwgNDUsIDIyMSwgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAKKyAgICAxMjMsIDQ1LCAyMjEsIDEyMiwgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgCisgICAgMTE4LCA0NSwgMjIxLCAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIAorICAgIDExMiwgNDUsIDIyMSwgMTExLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAKKyAgICAxMDcsIDQ1LCAyMjEsIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgCisgICAgMTAxLCA0NSwgMjIxLCAxMDAsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCAKKyAgICA0NSwgMjIxLCA5NSwgNDUsIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTAsIDQ1LCAyMjEsIAorICAgIDg5LCA0NSwgMjIxLCA4OCwgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAKKyAgICAyMjEsIDgzLCA0NSwgMjIxLCA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDc5LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgNzcsIAorICAgIDQ1LCAyMjEsIDc2LCA0NSwgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgCisgICAgNzEsIDQ1LCAyMjEsIDcwLCA0NSwgMjIxLCA2OCwgNDUsIDIyMSwgNjcsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIAorICAgIDIyMSwgNjQsIDQ1LCAyMjEsIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgCisgICAgNDUsIDIyMSwgNTcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCAKKyAgICA1MiwgNDUsIDIyMSwgNTEsIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ1LCA0NSwgCisgICAgMjIxLCA0NCwgNDUsIDIyMSwgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCAKKyAgICA0NSwgMjIxLCAzOCwgNDUsIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIAorICAgIDMyLCA0NSwgMjIxLCAzMSwgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAKKyAgICAyMjEsIDI2LCA0NSwgMjIxLCAyNSwgNDUsIDIyMSwgMjMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIAorICAgIDQ1LCAyMjEsIDE5LCA0NSwgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgCisgICAgMTQsIDQ1LCAyMjEsIDEyLCA0NSwgMjIxLCAxMSwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAKKyAgICAyMjEsIDcsIDQ1LCAyMjEsIDYsIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDEsIDQ1LCAKKyAgICAyMjEsIDAsIDQ1LCAyMjAsIDI1NSwgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgCisgICAgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDYsIDQ1LCAyMjAsIAorICAgIDI0NSwgNDUsIDIyMCwgMjQ0LCA0NSwgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAKKyAgICAyNDAsIDIyNywgMjA2LCAyMjcsIDIwOCwgMjE4LCAxNTQsIDY0LCAyNDEsIDI0MCwgMjE5LCA1MCwgMjE4LCAxNTQsIDY0LCAKKyAgICAyMTYsIDIxMywgMjE4LCA4NiwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMjQ1LCA2NCwgMjQ1LCAxNTEsIDY0LCAyMTUsIAorICAgIDI0NCwgMjQ1LCAxMTcsIDI0NSwgMTQwLCAyNDUsIDE0MSwgMjU1LCAxNiwgMjU1LCAxNywgMjU0LCAxNzYsIDI1MiwgNTUsIAorICAgIDI1MiwgMTg3LCAyNTEsIDEzOSwgMTM1LCAyMTcsIDkwLCAyMDMsIDIxNywgOTAsIDI0MCwgMjM0LCAyMTcsIDk0LCAyMzIsIAorICAgIDIyMCwgMjQ0LCAxNTMsIDE2NiwgMjMyLCAyMTksIDI0NSwgMTUxLCA2NCwgMjMyLCAyMTksIDIzMywgNiwgMjI4LCAxNDAsIAorICAgIDI0NSwgMTIwLCAyMzIsIDIyMCwgMjE3LCA5MCwgNjcsIDIxNywgOTAsIDIxMiwgMTE4LCAyNDQsIDI4LCAyNDQsIDE1MywgCisgICAgMjQ0LCAxMzMsIDI1MCwgMjM4LCAyMjMsIDU2LCAyNDksIDE1MSwgMjIwLCAzMCwgMjI2LCAxMzQsIDIzMiwgMTU2LCAxMTEsIAorICAgIDIxOSwgNjAsIDIyMCwgMzAsIDIzNiwgNiwgMjMyLCAxNTYsIDIxMCwgODYsIDIxOSwgMTkzLCAyNDgsIDE1OSwgMjMyLCAKKyAgICAyMTAsIDI0NSwgODUsIDI0NywgMTYzLCAyNDgsIDM5LCAyNDksIDE4NiwgMTExLCAyNDgsIDE0OSwgMjQ4LCAzOSwgMjQ5LCAKKyAgICAxODYsIDEwNSwgMjQ4LCAxNDgsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDI0OCwgMTQ3LCAyNDgsIDM5LCAyNDksIDE4NiwgCisgICAgMTYxLCAyNDgsIDE0NiwgMTUyLCAyNTUsIDE2LCAyMjksIDIxNCwgMjE3LCAxNzgsIDIzNiwgNjksIDIxNywgMTgxLCAyNDUsIAorICAgIDE1MSwgNjQsIDIxNSwgMjQ1LCAyNTEsIDIyMSwgMjQ1LCA3MCwgMjUxLCAxMywgMjUxLCAxNSwgMjQ1LCAxNTEsIDY0LCAKKyAgICAyMzEsIDg2LCAyNDUsIDExOCwgMjE4LCA2MiwgMjE4LCA3OSwgMjQ1LCA4NSwgMjQ1LCA4NiwgMjM1LCAyMzksIDIyMCwgCisgICAgMTQwLCAxNjEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMjQzLCAyNDUsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTU4LCAyNDIsIAorICAgIDEyOCwgMjIwLCAxMzksIDI0MiwgMTI1LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDEwNSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAKKyAgICAyMjIsIDE0NywgMjM1LCAyMzksIDIyMCwgMTQwLCAxMTEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMjE0LCAxMzMsIDIxOSwgMjMsIAorICAgIDI0OCwgNzEsIDI0OCwgNzMsIDIyNiwgODIsIDI1MCwgMTUwLCAyMjYsIDg0LCAxMjUsIDIyNiwgMjQ0LCAyMjQsIDE5NiwgCisgICAgMjQxLCA1NCwgMjUxLCAxNTgsIDIyNSwgMTc2LCAyNDEsIDIxMCwgMjUxLCAxNjksIDIyOCwgODAsIDI1MSwgMTU4LCAyNDEsIAorICAgIDIxMCwgMjI5LCAxODAsIDIzNSwgMjQ5LCAyMzUsIDI1MSwgMjI5LCA4NywgMjMyLCAyMTksIDIyOSwgMTA0LCAyMTgsIDE1NCwgCisgICAgNjQsIDIyMSwgMTYwLCAyNTQsIDI2LCAyMTgsIDIyNSwgMjQ1LCAxNTEsIDY0LCAyMjEsIDE2MCwgMjU0LCAyNiwgMjQ1LCAKKyAgICA4OCwgMTM1LCAyMTcsIDkxLCAyMjAsIDEyOSwgMjAzLCAyMTcsIDkxLCAyMjAsIDEyOSwgMjQwLCAyMzEsIDEzNSwgMjE3LCAKKyAgICA5MSwgMiwgMjM1LCA0MSwgMjAzLCAyMTcsIDkxLCAyLCAyMzUsIDQxLCAyNDAsIDIzMiwgMjMyLCAyMjAsIDIxNywgOTEsIAorICAgIDIyMCwgMTI5LCA2NywgMjE3LCA5MSwgMjIwLCAxMjksIDIxMiwgMTE3LCAyMjYsIDEsIDIzMiwgMjIwLCAyNDQsIDIyLCAKKyAgICAyMjYsIDEsIDIzMiwgMjIwLCAyNDYsIDExNCwgMjI1LCAzNSwgMjI2LCAxLCAyMzIsIDIyMCwgMjUyLCAxODYsIDIyNiwgMSwgCisgICAgMjMyLCAyMjAsIDIxNCwgMTYzLCAyMjUsIDMxLCAyMjMsIDUzLCAyMzIsIDIyMCwgMjQ0LCAxNTMsIDIyMywgNTMsIDIzNSwgCisgICAgMjQ5LCAyMjMsIDM4LCAyMTksIDE1NywgMjIwLCAzMCwgMTA1LCAyMTksIDE1NCwgMjE4LCAyMjcsIDIxOSwgMTU3LCAyMjAsIAorICAgIDMwLCAxNTgsIDIxOSwgMTUzLCAyMTgsIDIyNiwgMjQ4LCAzOSwgMjQ5LCAxODYsIDIxOCwgMTA3LCAyNDgsIDE0NSwgMjI0LCAKKyAgICAxODYsIDIxNCwgMTMyLCAxMTEsIDIyNCwgMTg2LCAyMTQsIDEzMCwgMjI0LCAxNTIsIDIyNCwgMTg2LCAyMTQsIDEzMiwgCisgICAgMTA1LCAyMjQsIDE4NiwgMjE0LCAxMjksIDIyNCwgMTUxLCAyMjAsIDEzMCwgMjE1LCAyNDMsIDIxOCwgMTUzLCAyMTgsIDkwLCAKKyAgICAyNTEsIDE0LCAyNTAsIDE1MCwgMjUwLCAyMTcsIDIzMSwgNDgsIDIxMiwgNTksIDIzMCwgNDgsIDIxOCwgMTU0LCA2NCwgCisgICAgMjQyLCAxMTQsIDI1NCwgMjYsIDIxOCwgMTU0LCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDIxOSwgMjIsIDI0NSwgMTUxLCAKKyAgICA2NCwgMjQyLCAxMTQsIDI1NCwgMjYsIDI0NSwgMTUxLCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDI0NSwgMTE1LCAyMTgsIAorICAgIDE1NCwgNjQsIDIxOCwgMTA3LCAyMTksIDM3LCAyMTksIDE1NywgMjQyLCAxNDgsIDEzNSwgMjM1LCAyMDIsIDIyMCwgMTA5LCAKKyAgICAyMTksIDE1NywgMTM1LCAyMzUsIDIwMiwgMjIxLCAxOTYsIDI0OSwgMTg2LCAyMjAsIDEzNywgMjM1LCAyMDIsIDI0OSwgCisgICAgMTIxLCAyMTgsIDEwOCwgMjE2LCAyMzcsIDIxOCwgMTcwLCAyMjYsIDE3MywgMjE3LCAxNjgsIDI0OSwgMjI2LCAyMjYsIAorICAgIDE0NiwgMjI0LCAxODcsIDIzMSwgNDcsIDIyNSwgMjIsIDI1NCwgNjEsIDIyNCwgMTgxLCAyNDksIDIyNiwgMjU0LCA3NywgCisgICAgMjI5LCAxNjgsIDIxOSwgMjAyLCA3LCA2LCAxLCAyNDMsIDAsIDcsIDQsIDEsIDI0MywgMCwgMjUwLCAxNjcsIDI1NCwgMTU3LCAKKyAgICAxODMsIDIxOCwgNjgsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTY1LCAxLCAyMzIsIDE4MSwgMjA5LCAyMDksIDEsIAorICAgIDI0NCwgNTIsIDI0NCwgNDQsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyNDQsIDE2NSwgMjA5LCAyMDksIDEsIDIyMiwgMjEzLCAKKyAgICAyMDksIDIwOSwgMSwgMjMyLCAxNjIsIDYzLCAxNjQsIDI1MSwgMjMxLCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCisgICAgMjIzLCA0NCwgMjQzLCAyMjMsIDI0MywgMjIyLCAyNDMsIDIyMSwgMjMwLCA1MCwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIAorICAgIDI1NCwgMjMyLCAxMDcsIDIyMiwgMjIxLCAyMzIsIDEwOSwgMjIyLCAyMjMsIDIyNSwgMjI3LCAyMzIsIDEwNiwgMjIyLCAKKyAgICAyMjAsIDIyOCwgMTExLCAyMzAsIDE3MCwgMjExLCAyMjksIDIzMiwgMTA4LCAyMjIsIDIyMiwgMjQzLCAyNDQsIDIyNSwgCisgICAgMjI2LCAyMTIsIDE1LCAyNDUsIDE3MCwgMjQzLCAyMzMsIDIzMCwgMjM0LCAyMjYsIDIwMSwgMjE0LCAxMzQsIDg3LCAyMzAsIAorICAgIDIzNCwgMjQ4LCAxNjUsIDg3LCA4LCAzLCAyMzUsIDE2NCwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgCisgICAgMjMzLCAyNiwgMTI3LCAyMTMsIDExOCwgMjEzLCA3LCAyMTIsIDE5NSwgMjEyLCAxODQsIDIxMiwgMTczLCAyMTIsIDE2MiwgCisgICAgMjEyLCAxNTEsIDIxMiwgMTQwLCAyMTIsIDEyOSwgMjEzLCAxMTcsIDIxMywgMTA2LCAyMTMsIDk1LCAyMTMsIDg0LCAyMTMsIAorICAgIDczLCAyMTMsIDYyLCAyMTMsIDUxLCAyNTEsIDc5LCAyMjYsIDE1OSwgNzksIDI1MSwgMjA0LCAyMDksIDI1MywgMTUsIDUsIAorICAgIDIyNywgMjE1LCAyMTYsIDI0MCwgMTUsIDUsIDIyNywgMjE1LCAxMTUsIDIyNywgMjE1LCAyNTEsIDEwNywgMTE1LCAyNTEsIAorICAgIDEwNiwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIxOSwgMTA0LCAyNTAsIDgxLCAyMTQsIDksIDIxMywgNDAsIDIxMywgMjksIAorICAgIDIxMywgMTgsIDIxMywgNiwgMjEyLCAyNTEsIDIxMiwgMjQwLCAyMTIsIDIyOSwgMjEyLCAyMTgsIDIxMiwgMjA3LCAyMTIsIAorICAgIDE5OSwgMjEyLCAxOTgsIDIxMiwgMTk3LCAyMTIsIDE5NiwgMjEyLCAxOTQsIDIxMiwgMTkzLCAyMTIsIDE5MiwgMjEyLCAKKyAgICAxOTEsIDIxMiwgMTkwLCAyMTIsIDE4OSwgMjEyLCAxODgsIDIxMiwgMTg3LCAyMTIsIDE4NiwgMjEyLCAxODUsIDIxMiwgCisgICAgMTgzLCAyMTIsIDE4MiwgMjEyLCAxODEsIDIxMiwgMTgwLCAyMTIsIDE3OSwgMjEyLCAxNzgsIDIxMiwgMTc3LCAyMTIsIAorICAgIDE3NiwgMjEyLCAxNzUsIDIxMiwgMTc0LCAyMTIsIDE3MiwgMjEyLCAxNzEsIDIxMiwgMTcwLCAyMTIsIDE2OSwgMjEyLCAKKyAgICAxNjgsIDIxMiwgMTY3LCAyMTIsIDE2NiwgMjEyLCAxNjUsIDIxMiwgMTY0LCAyMTIsIDE2MywgMjEyLCAxNjEsIDIxMiwgCisgICAgMTYwLCAyMTIsIDE1OSwgMjEyLCAxNTgsIDIxMiwgMTU3LCAyMTIsIDE1NiwgMjEyLCAxNTUsIDIxMiwgMTU0LCAyMTIsIAorICAgIDE1MywgMjEyLCAxNTIsIDIxMiwgMTUwLCAyMTIsIDE0OSwgMjEyLCAxNDgsIDIxMiwgMTQ3LCAyMTIsIDE0NiwgMjEyLCAKKyAgICAxNDUsIDIxMiwgMTQ0LCAyMTIsIDE0MywgMjEyLCAxNDIsIDIxMiwgMTQxLCAyMTIsIDEzOSwgMjEyLCAxMzgsIDIxMiwgCisgICAgMTM3LCAyMTIsIDEzNiwgMjEyLCAxMzUsIDIxMiwgMTM0LCAyMTIsIDEzMywgMjEyLCAxMzIsIDIxMiwgMTMxLCAyMTIsIAorICAgIDEzMCwgMjEyLCAxMjgsIDIxMiwgMTI3LCAyMTIsIDEyNiwgMjEyLCAxMjUsIDIxMiwgMTI0LCAyMTIsIDEyMywgMjEyLCAKKyAgICAxMjIsIDIxMiwgMTIxLCAyMTIsIDEyMCwgMjEyLCAxMTksIDIxMywgMTE2LCAyMTMsIDExNSwgMjEzLCAxMTQsIDIxMywgCisgICAgMTEzLCAyMTMsIDExMiwgMjEzLCAxMTEsIDIxMywgMTEwLCAyMTMsIDEwOSwgMjEzLCAxMDgsIDIxMywgMTA3LCAyMTMsIAorICAgIDEwNSwgMjEzLCAxMDQsIDIxMywgMTAzLCAyMTMsIDEwMiwgMjEzLCAxMDEsIDIxMywgMTAwLCAyMTMsIDk5LCAyMTMsIDk4LCAKKyAgICAyMTMsIDk3LCAyMTMsIDk2LCAyMTMsIDk0LCAyMTMsIDkzLCAyMTMsIDkyLCAyMTMsIDkxLCAyMTMsIDkwLCAyMTMsIDg5LCAKKyAgICAyMTMsIDg4LCAyMTMsIDg3LCAyMTMsIDg2LCAyMTMsIDg1LCAyMTMsIDgzLCAyMTMsIDgyLCAyMTMsIDgxLCAyMTMsIDgwLCAKKyAgICAyMTMsIDc5LCAyMTMsIDc4LCAyMTMsIDc3LCAyMTMsIDc2LCAyMTMsIDc1LCAyMTMsIDc0LCAyMTMsIDcyLCAyMTMsIDcxLCAKKyAgICAyMTMsIDcwLCAyMTMsIDY5LCAyMTMsIDY4LCAyMTMsIDY3LCAyMTMsIDY2LCAyMTMsIDY1LCAyMTMsIDY0LCAyMTMsIDYzLCAKKyAgICAyMTMsIDYxLCAyMTMsIDYwLCAyMTMsIDU5LCAyMTMsIDU4LCAyMTMsIDU3LCAyMTMsIDU2LCAyMTMsIDU1LCAyMTMsIDU0LCAKKyAgICAyMTMsIDUzLCAyMTMsIDUyLCAyMTMsIDUwLCAyMTMsIDQ5LCAyMTMsIDQ4LCAyMTMsIDQ3LCAyMTMsIDQ2LCAyMTMsIDQ1LCAKKyAgICAyMTMsIDQ0LCAyMTMsIDQzLCAyMTMsIDQyLCAyMTMsIDQxLCAyMTMsIDM5LCAyMTMsIDM4LCAyMTMsIDM3LCAyMTMsIDM2LCAKKyAgICAyMTMsIDM1LCAyMTMsIDM0LCAyMTMsIDMzLCAyMTMsIDMyLCAyMTMsIDMxLCAyMTMsIDMwLCAyMTMsIDI4LCAyMTMsIDI3LCAKKyAgICAyMTMsIDI2LCAyMTMsIDI1LCAyMTMsIDI0LCAyMTMsIDIzLCAyMTMsIDIyLCAyMTMsIDIxLCAyMTMsIDIwLCAyMTMsIDE5LCAKKyAgICAyMTMsIDE3LCAyMTMsIDE2LCAyMTMsIDE1LCAyMTMsIDE0LCAyMTMsIDEzLCAyMTMsIDEyLCAyMTMsIDExLCAyMTMsIDEwLCAKKyAgICAyMTMsIDksIDIxMywgOCwgMjEzLCA1LCAyMTMsIDQsIDIxMywgMywgMjEzLCAyLCAyMTMsIDEsIDIxMywgMCwgMjEyLCAyNTUsIAorICAgIDIxMiwgMjU0LCAyMTIsIDI1MywgMjEyLCAyNTIsIDIxMiwgMjUwLCAyMTIsIDI0OSwgMjEyLCAyNDgsIDIxMiwgMjQ3LCAKKyAgICAyMTIsIDI0NiwgMjEyLCAyNDUsIDIxMiwgMjQ0LCAyMTIsIDI0MywgMjEyLCAyNDIsIDIxMiwgMjQxLCAyMTIsIDIzOSwgCisgICAgMjEyLCAyMzgsIDIxMiwgMjM3LCAyMTIsIDIzNiwgMjEyLCAyMzUsIDIxMiwgMjM0LCAyMTIsIDIzMywgMjEyLCAyMzIsIAorICAgIDIxMiwgMjMxLCAyMTIsIDIzMCwgMjEyLCAyMjgsIDIxMiwgMjI3LCAyMTIsIDIyNiwgMjEyLCAyMjUsIDIxMiwgMjI0LCAKKyAgICAyMTIsIDIyMywgMjEyLCAyMjIsIDIxMiwgMjIxLCAyMTIsIDIyMCwgMjEyLCAyMTksIDIxMiwgMjE3LCAyMTIsIDIxNiwgCisgICAgMjEyLCAyMTUsIDIxMiwgMjE0LCAyMTIsIDIxMywgMjEyLCAyMTIsIDIxMiwgMjExLCAyMTIsIDIxMCwgMjEyLCAyMDksIAorICAgIDIxMiwgMjA4LCAyMTIsIDIwNiwgMjEyLCAyMDUsIDIxMiwgMjA0LCAyMTIsIDIwMywgMjEyLCAyMDIsIDIxMiwgMjAxLCAKKyAgICAyMTIsIDIwMCwgNywgNiwgMSwgMTE2LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgCisgICAgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAKKyAgICA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIAorICAgIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIAorICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCisgICAgMzksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDE2MCwgCisgICAgMiwgMjUwLCAzOSwgMjIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgCisgICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDIyOSwgODUsIDIsIDIxNiwgOTAsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIAorICAgIDIyMCwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAKKyAgICAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAKKyAgICAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCisgICAgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCAKKyAgICA3LCA0LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCA1OSwgCisgICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDcyLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3MiwgCisgICAgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNzIsIAorICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjksIDIyLCA1OSwgNzIsIDIyLCAKKyAgICAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzUsIDE1MSwgMiwgMTg0LCA3LCA0LCAxLCAyMzUsIDE1MSwgCisgICAgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCAKKyAgICA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxODQsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDE4NCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAKKyAgICAyMDQsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgCisgICAgMTA2LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjIxLCAxOTgsIAorICAgIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMjEsIDE5OCwgMiwgMTQyLCA3LCA0LCAxLCAyNDEsIDU4LCAyMjEsIDE5OCwgMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MSwgNTgsIDIyMSwgMTk4LCAyLCAxNDIsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMjU0LCAxNzksIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMCwgOSwgMjIwLCAxMzcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk3LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgCisgICAgMjM4LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY5LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDIxMCwgMjEyLCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDc2LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDI1NCwgMjUyLCA5LCAyMjAsIDEzNywgMjI4LCA2OCwgMiwgMjM0LCAxODAsIDE0NiwgMSwgMjM0LCAxMTUsIDM2LCAKKyAgICAxMTcsIDIzNSwgMjksIDM2LCAxMTcsIDIyOSwgODQsIDM2LCAxMTcsIDI1MSwgNzQsIDM2LCAxMTcsIDIyNywgMTcxLCAzNiwgCisgICAgMTE3LCAyMTUsIDE2MCwgMzYsIDExNywgMjI4LCAxMTYsIDM2LCAxMTcsIDIxNywgMTUzLCAzNiwgMTE3LCAyMzAsIDMwLCAKKyAgICAzNiwgMTE3LCAyMjYsIDEwOSwgMzYsIDExNywgMTk0LCAzNiwgMTE3LCAyMTEsIDExNywgMzYsIDExNywgMTUzLCAzNiwgCisgICAgMTE3LCAxNTYsIDM2LCAxMTcsIDIxNCwgMTA1LCAzNiwgMTE3LCAyMzIsIDE4MiwgMzYsIDExNywgMjMyLCAxOTEsIDM2LCAKKyAgICAxMTcsIDIyMiwgMTgyLCAzNiwgMTE3LCAyMjgsIDk4LCAzNiwgMTE3LCAyMzUsIDE1MCwgMzYsIDExNywgMjIwLCAxMDYsIAorICAgIDM2LCAxMTcsIDIxOCwgMjI4LCAzNiwgMTE3LCAyMjIsIDkzLCAzNiwgMTE3LCAyNDIsIDY3LCAzNiwgMTE3LCAyMzMsIDIzOCwgCisgICAgMzYsIDMsIDIzNSwgMTYsIDM2LCAzLCAyMzQsIDk4LCAzNiwgMywgMjM0LCA4OSwgMzYsIDMsIDIzMywgMjIzLCAzNiwgMywgCisgICAgMjMzLCAxOTQsIDM2LCAzLCAyMzQsIDE4OCwgMzYsIDMsIDIzNCwgMTg3LCAzNiwgMywgMjM0LCAyNTIsIDM2LCAzLCAyMzQsIAorICAgIDM0LCAzNiwgMywgMjM0LCAxNiwgMzYsIDMsIDIzNCwgMjAxLCAzNiwgMywgMjI5LCA4MSwgMzYsIDMsIDIyOSwgMzIsIDM2LCAKKyAgICAzLCAyMjksIDI4LCAzNiwgMywgMjI4LCAyNTMsIDM2LCAzLCAyMjgsIDI0NiwgMzYsIDMsIDIyOSwgNjksIDM2LCAzLCAyMjksIAorICAgIDY3LCAzNiwgMywgMjI5LCA3OCwgMzYsIDMsIDIyOSwgOSwgMzYsIDMsIDIyOSwgNCwgMzYsIDMsIDIyOSwgNzEsIDM2LCAzLCAKKyAgICAyNTEsIDQwLCAzNiwgMywgMjUwLCA1OSwgMzYsIDMsIDI1MCwgNDksIDM2LCAzLCAyNDksIDEyMCwgMzYsIDMsIDI0OSwgOTEsIAorICAgIDM2LCAzLCAyNTAsIDE5OCwgMzYsIDMsIDI1MCwgMTkwLCAzNiwgMywgMjUxLCAzMCwgMzYsIDMsIDI0OSwgMjQ2LCAzNiwgMywgCisgICAgMjQ5LCAxODIsIDM2LCAzLCAyNTAsIDIzMCwgMzYsIDMsIDIyNywgMTY4LCAzNiwgMywgMjI3LCAxNTIsIDM2LCAzLCAyMjcsIAorICAgIDE0NywgMzYsIDMsIDIyNywgMTMyLCAzNiwgMywgMjI3LCAxMjUsIDM2LCAzLCAyMjcsIDE2MCwgMzYsIDMsIDIyNywgMTU5LCAKKyAgICAzNiwgMywgMjI3LCAxNjUsIDM2LCAzLCAyMjcsIDEzOCwgMzYsIDMsIDIyNywgMTM2LCAzNiwgMywgMjI3LCAxNjMsIDM2LCAKKyAgICAzLCAyMTUsIDE1NiwgMzYsIDMsIDIxNSwgMTM2LCAzNiwgMywgMjE1LCAxMzUsIDM2LCAzLCAyMTUsIDEyNCwgMzYsIDMsIAorICAgIDIxNSwgMTIxLCAzNiwgMywgMjE1LCAxNTIsIDM2LCAzLCAyMTUsIDE1MSwgMzYsIDMsIDIxNSwgMTU1LCAzNiwgMywgMjE1LCAKKyAgICAxMzQsIDM2LCAzLCAyMTUsIDEzMywgMzYsIDMsIDIxNSwgMTU0LCAzNiwgMywgMjI4LCAxMTQsIDM2LCAzLCAyMjgsIDEwMCwgCisgICAgMzYsIDMsIDIyOCwgOTksIDM2LCAzLCAyMjgsIDgzLCAzNiwgMywgMjI4LCA4MiwgMzYsIDMsIDIyOCwgMTEwLCAzNiwgMywgCisgICAgMjI4LCAxMDksIDM2LCAzLCAyMjgsIDExMywgMzYsIDMsIDIyOCwgODUsIDM2LCAzLCAyMjgsIDg0LCAzNiwgMywgMjI4LCAKKyAgICAxMTIsIDM2LCAzLCAyMTcsIDEwMiwgMzYsIDMsIDIxNiwgMTE4LCAzNiwgMywgMjE2LCAxMDQsIDM2LCAzLCAyMTUsIDExOSwgCisgICAgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIDIzLCAzNiwgMywgMjE3LCAxMiwgMzYsIDMsIDIxNywgODAsIDM2LCAzLCAKKyAgICAxMTIsIDM2LCAzLCAyMTYsIDE4LCAzNiwgMywgMjE3LCA0MiwgMzYsIDMsIDIyOSwgMjMwLCAzNiwgMywgMjI4LCAyMzgsIAorICAgIDM2LCAzLCAyMjgsIDIxMywgMzYsIDMsIDIyNywgMjQyLCAzNiwgMywgMjI3LCAxODMsIDM2LCAzLCAyMjksIDExMiwgMzYsIAorICAgIDMsIDIyOSwgMTA4LCAzNiwgMywgMjI5LCAyMTcsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCA2OSwgMzYsIDMsIDIyOSwgCisgICAgMTkyLCAzNiwgMywgMjI2LCA5MywgMzYsIDMsIDIyNSwgMTExLCAzNiwgMywgMjI1LCA3NCwgMzYsIDMsIDIyNCwgMTUzLCAKKyAgICAzNiwgMywgMjI0LCAxMjIsIDM2LCAzLCAyMjUsIDIyNCwgMzYsIDMsIDIyNSwgMjE0LCAzNiwgMywgMjI2LCA3NSwgMzYsIDMsIAorICAgIDIyNSwgMTksIDM2LCAzLCAyMjQsIDI1MiwgMzYsIDMsIDIyNSwgMjM4LCAzNiwgMywgMjMxLCAyNDIsIDM2LCAzLCAyMzAsIAorICAgIDIzNSwgMzYsIDMsIDIzMCwgMjA2LCAzNiwgMywgMjMwLCAxMDcsIDM2LCAzLCAyMzAsIDU5LCAzNiwgMywgMjMxLCA5NiwgCisgICAgMzYsIDMsIDIzMSwgODUsIDM2LCAzLCAyMzEsIDIwOCwgMzYsIDMsIDIzMCwgMTY2LCAzNiwgMywgMjMwLCAxMzcsIDM2LCAzLCAKKyAgICAyMzEsIDE0MCwgMzYsIDMsIDIxMSwgMTAzLCAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIAorICAgIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgCisgICAgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NywgMzYsIDMsIAorICAgIDIyMywgMzgsIDM2LCAzLCAyMjIsIDI0MiwgMzYsIDMsIDIyMiwgMTQyLCAzNiwgMywgMjIyLCAxMTQsIDM2LCAzLCAyMjMsIAorICAgIDEzMSwgMzYsIDMsIDIyMywgMTExLCAzNiwgMywgMjIzLCAxNjksIDM2LCAzLCAyMjIsIDIxMywgMzYsIDMsIDIyMiwgMTk5LCAKKyAgICAzNiwgMywgMjIzLCAxMzksIDM2LCAzLCAyMzMsIDE0MCwgMzYsIDMsIDIzMiwgMjQ3LCAzNiwgMywgMjMyLCAyMzMsIDM2LCAKKyAgICAzLCAyMzIsIDEwMywgMzYsIDMsIDIzMiwgNzgsIDM2LCAzLCAyMzMsIDY0LCAzNiwgMywgMjMzLCA1NiwgMzYsIDMsIDIzMywgCisgICAgMTE1LCAzNiwgMywgMjMyLCAxNjIsIDM2LCAzLCAyMzIsIDEzMywgMzYsIDMsIDIzMywgODAsIDM2LCAzLCAyMTQsIDI2LCAKKyAgICAzNiwgMywgMjEzLCAxNzYsIDM2LCAzLCAyMTMsIDE2MiwgMzYsIDMsIDIxMiwgMTE2LCAzNiwgMywgMjEyLCAxMDksIDM2LCAKKyAgICAzLCAyMTMsIDI1NSwgMzYsIDMsIDIxMywgMjUwLCAzNiwgMywgMjE0LCAyMywgMzYsIDMsIDIxMywgMTM4LCAzNiwgMywgCisgICAgMjEzLCAxMjcsIDM2LCAzLCAyMTQsIDUsIDM2LCAzLCAyMzIsIDE4MCwgMzYsIDMsIDIzMiwgMTc1LCAzNiwgMywgMjMyLCAKKyAgICAxNzQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE3NiwgCisgICAgMzYsIDMsIDIzMiwgMTc5LCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE3MiwgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCisgICAgMywgMjMyLCAxODksIDM2LCAzLCAyMzIsIDE4NCwgMzYsIDMsIDIzMiwgMTgzLCAzNiwgMywgMjMyLCAxNjcsIDM2LCAzLCAKKyAgICAyMzIsIDE2NiwgMzYsIDMsIDIzMiwgMTg2LCAzNiwgMywgMjMyLCAxODUsIDM2LCAzLCAyMzIsIDE4OCwgMzYsIDMsIDIzMiwgCisgICAgMTY5LCAzNiwgMywgMjMyLCAxNjgsIDM2LCAzLCAyMzIsIDE4NywgMzYsIDMsIDIyMiwgMTgwLCAzNiwgMywgMjIyLCAxNjksIAorICAgIDM2LCAzLCAyMjIsIDE2OCwgMzYsIDMsIDIyMiwgMTYyLCAzNiwgMywgMjIyLCAxNTUsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIAorICAgIDMsIDIyMiwgMTc1LCAzNiwgMywgMjIyLCAxNzksIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgCisgICAgMjIyLCAxNzgsIDM2LCAzLCAyMjgsIDk2LCAzNiwgMywgMjI4LCA5MSwgMzYsIDMsIDIyOCwgOTAsIDM2LCAzLCAyMjgsIDg3LCAKKyAgICAzNiwgMywgMjI4LCA4NiwgMzYsIDMsIDIyOCwgOTMsIDM2LCAzLCAyMjgsIDkyLCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIAorICAgIDIyOCwgODksIDM2LCAzLCAyMjgsIDg4LCAzNiwgMywgMjI4LCA5NCwgMzYsIDMsIDIzNSwgMTQ2LCAzNiwgMywgMjM1LCAKKyAgICAxMTQsIDM2LCAzLCAyMzUsIDEwNywgMzYsIDMsIDIzNSwgNTcsIDM2LCAzLCAyMzUsIDM5LCAzNiwgMywgMjM1LCAxMzIsIAorICAgIDM2LCAzLCAyMzUsIDEzMCwgMzYsIDMsIDIzNSwgMTQxLCAzNiwgMywgMjM1LCA3NCwgMzYsIDMsIDIzNSwgNjUsIDM2LCAzLCAKKyAgICAyMzUsIDEzNSwgMzYsIDMsIDIyMCwgMTAwLCAzNiwgMywgMjIwLCAzNCwgMzYsIDMsIDIyMCwgMjksIDM2LCAzLCAyMTksIAorICAgIDIyNywgMzYsIDMsIDIxOSwgMjEyLCAzNiwgMywgMjIwLCA2NSwgMzYsIDMsIDIyMCwgNjMsIDM2LCAzLCAyMjAsIDkyLCAzNiwgCisgICAgMywgMjIwLCA5LCAzNiwgMywgMjIwLCAzLCAzNiwgMywgMjIwLCA3MywgMzYsIDMsIDIxOCwgMjI0LCAzNiwgMywgMjE4LCAKKyAgICAxOTQsIDM2LCAzLCAyMTgsIDE5MCwgMzYsIDMsIDIxOCwgMTgxLCAzNiwgMywgMjE4LCAxNzgsIDM2LCAzLCAyMTgsIDE5OSwgCisgICAgMzYsIDMsIDIxOCwgMTk4LCAzNiwgMywgMjE4LCAyMjMsIDM2LCAzLCAyMTgsIDE4NiwgMzYsIDMsIDIxOCwgMTg1LCAzNiwgCisgICAgMywgMjE4LCAyMDEsIDM2LCAzLCAyMjIsIDMzLCAzNiwgMywgMjE5LCAxOTMsIDM2LCAzLCAyMTksIDE3NywgMzYsIDMsIAorICAgIDIxOCwgODQsIDM2LCAzLCAyMTgsIDUsIDM2LCAzLCAyMjEsIDE4MywgMzYsIDMsIDIyMSwgMTcyLCAzNiwgMywgMjIyLCAxOSwgCisgICAgMzYsIDMsIDIxOSwgNjAsIDM2LCAzLCAyMTksIDQyLCAzNiwgMywgMjIxLCAyMjEsIDM2LCAzLCAyNDIsIDUzLCAzNiwgMywgCisgICAgMjQxLCAxODcsIDM2LCAzLCAyNDEsIDE2OCwgMzYsIDMsIDI0MCwgMjI5LCAzNiwgMywgMjQwLCAyMDksIDM2LCAzLCAyNDEsIAorICAgIDI0NSwgMzYsIDMsIDI0MSwgMjI3LCAzNiwgMywgMjQyLCA0MywgMzYsIDMsIDI0MSwgNzUsIDM2LCAzLCAyNDEsIDYwLCAzNiwgCisgICAgMywgMjQxLCAyNTMsIDM2LCAzLCAyMzMsIDIzNywgMzYsIDMsIDIzMywgMjM2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAzLCAKKyAgICAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI3LCAzNiwgMywgMjMzLCAyMjYsIDM2LCAzLCAyMzMsIDIzMywgMzYsIDMsIDIzMywgCisgICAgMjMyLCAzNiwgMywgMjMzLCAyMzUsIDM2LCAzLCAyMzMsIDIyOSwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjMzLCAyMzQsIAorICAgIDM2LCAzLCAyMTksIDIzMywgMTc1LCAxMTcsIDUsIDIxMSwgNjgsIDE3NSwgMTE3LCA1LCAyMjMsIDE1OCwgMTc1LCAxMTcsIAorICAgIDUsIDIyMywgODEsIDk4LCAxLCAyMTUsIDI4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTc2LCA3MCwgMTE3LCA1LCAyNDksIAorICAgIDI0MSwgMjM0LCAxMzgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzQsIDM0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjM0LCAKKyAgICAxMTEsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjksIDksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNTEsIDQxLCA3MCwgCisgICAgMTE3LCA1LCAyNDksIDI0MSwgMjUwLCAxNjUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDksIDI0NiwgNzAsIDExNywgNSwgCisgICAgMjQ5LCAyNDEsIDI1MCwgOTQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjcsIDEzOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDI0OCwgMjI5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE1LCAxNDUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDcsIDE1MywgCisgICAgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNSwgMTQwLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTk4LCA3MCwgMTE3LCA1LCAKKyAgICAyNDksIDI0MSwgMjE3LCAxMDYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTYsIDIwOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDExMiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNiwgMTU3LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI4LCA3OSwgNzAsIAorICAgIDExNywgNSwgMjQ5LCAyNDEsIDI1MiwgMTk5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxNTAsIDcwLCAxMTcsIDUsIAorICAgIDI0OSwgMjQxLCAyMjUsIDE5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxMjQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKKyAgICAyMzAsIDE2NiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMCwgMjQ0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjIyLCAyMTMsIAorICAgIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzIsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMywgMTM4LCA3MCwgMTE3LCAKKyAgICA1LCAyNDksIDI0MSwgMjIwLCAxMDQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTgsIDIyNSwgNzAsIDExNywgNSwgMjQ5LCAKKyAgICAyNDEsIDIwNiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzMywgMTQxLCA3MCwgCisgICAgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDkxLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjI0LCAzMywgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyMiwgMTAyLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjIyLCAKKyAgICA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgNzIsIDcwLCAyNSwgNSwgMjI2LCAyMDgsIDcwLCAyNSwgCisgICAgNSwgMjU1LCA0MywgMTQxLCAxLCAyNTIsIDcsIDIyOSwgODIsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDMyLCAxNDEsIDEsIAorICAgIDI1MiwgNywgMjI4LCAyNTMsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDY5LCAxNDEsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgCisgICAgMjUyLCA3LCAyMjksIDgyLCA1NiwgMSwgMjUyLCA3LCAyMjksIDMyLCA1NiwgMSwgMjUyLCA3LCAyMjgsIDI1MywgNTYsIDEsIAorICAgIDI1MiwgNywgMjI5LCA2OSwgNTYsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgMjU0LCAyMDMsIDI1MCwgMTk4LCA1NiwgMSwgCisgICAgMjU0LCAyMDMsIDIxNSwgMTE5LCA1NiwgMSwgMjU0LCAyMDMsIDExMiwgNTYsIDEsIDI1NCwgMjAzLCAyMjYsIDEwOSwgNTgsIAorICAgIDEsIDI0NSwgMjgsIDI0NSwgMjcsIDI0OSwgMTkwLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDI0NSwgMjgsIDI0OSwgCisgICAgMTkwLCAxMzgsIDEzMCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaHJhc2Vib29rX29mZnNldDFbXSA9IHsKQEAgLTE0NDMxLDI0NTEgKzE0NDQ4LDI0NTEgQEAKICAgICA4NjQ3LCAwLCAwLCAwLCAwLCAwLCA4NjUxLCA4NjU4LCA4NjY2LCA4NjczLCA4Njc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA4NjgzLCA4Njg2LCA4NjkwLCA4Njk1LCA4Njk5LCAwLCA4NzAzLCA4NzA5LCA4NzE1LCA4NzE4LCAKICAgICA4NzI1LCA4NzM0LCA4NzM3LCA4NzQwLCA4NzQ1LCA4NzUxLCA4NzU1LCA4NzYzLCA4NzY5LCA4Nzc1LCA4NzgzLCA4Nzg3LCAKLSAgICA4NzkyLCA4ODAzLCA4ODA4LCA4ODEyLCA4ODE2LCA4ODIwLCAwLCAwLCA4ODIzLCA4ODMwLCA4ODM0LCA4ODQwLCA4ODQ0LCAKLSAgICA4ODUxLCA4ODU3LCA4ODY0LCA4ODcwLCA4ODc2LCA4ODgwLCA4ODg0LCA4ODkwLCA4ODk0LCA4ODk4LCA4OTAyLCA4OTA2LCAKLSAgICA4OTEwLCA4OTE0LCA4OTE4LCA4OTIyLCA4OTI2LCA4OTMwLCA4OTM0LCA4OTM4LCA4OTQyLCA4OTQ2LCA4OTUwLCA4OTU0LCAKLSAgICA4OTU4LCA4OTY2LCA4OTc0LCA4OTg0LCA4OTkzLCA5MDAyLCA5MDA1LCA5MDA5LCA5MDEzLCA5MDE3LCA5MDIxLCA5MDI1LCAKLSAgICA5MDI5LCA5MDMzLCA5MDM3LCA5MDQyLCA5MDQ2LCA5MDQ5LCA5MDUyLCA5MDU1LCA5MDU4LCA5MDYxLCA5MDY0LCA5MDY3LCAKLSAgICA5MDcwLCA5MDc0LCA5MDc3LCA5MDgwLCA5MDg1LCA5MDkwLCA5MDk2LCA5MDk5LCA5MTA2LCA5MTE1LCA5MTIwLCA5MTI1LCAKLSAgICA5MTMyLCA5MTM3LCA5MTQyLCA5MTQ2LCA5MTUwLCA5MTU0LCA5MTU4LCA5MTYyLCA5MTY2LCA5MTcwLCA5MTc0LCA5MTc4LCAKLSAgICA5MTgyLCA5MTg3LCA5MTkyLCA5MTk5LCA5MjA1LCA5MjExLCA5MjE3LCA5MjIyLCA5MjMwLCA5MjM4LCA5MjQzLCA5MjQ5LCAKLSAgICA5MjU1LCA5MjYxLCA5MjY3LCA5MjcxLCA5Mjc1LCA5Mjc5LCA5Mjg2LCA5Mjk2LCA5MzAwLCA5MzA0LCA5MzA4LCA5MzE0LCAKLSAgICA5MzIyLCA5MzI2LCA5MzMwLCA5MzM3LCA5MzQxLCA5MzQ1LCA5MzQ5LCA5MzU2LCA5MzYzLCA5Mzc1LCA5Mzc5LCA5MzgzLCAKLSAgICA5Mzg3LCA5Mzk3LCA5NDA2LCA5NDEwLCA5NDE4LCA5NDI1LCA5NDMyLCA5NDQxLCA5NDUyLCA5NDYwLCA5NDY0LCA5NDczLCAKLSAgICA5NDg0LCA5NDkyLCA5NTA1LCA5NTEzLCA5NTIxLCA5NTI5LCA5NTM3LCA5NTQzLCA5NTUyLCA5NTU5LCA5NTYzLCA5NTcxLCAKLSAgICA5NTc1LCA5NTgyLCA5NTkwLCA5NTk0LCA5NjAwLCA5NjA3LCA5NjE0LCA5NjE4LCA5NjI2LCA5NjMwLCA5NjM3LCA5NjQxLCAKLSAgICA5NjQ5LCA5NjUzLCA5NjYxLCA5NjY5LCA5Njc2LCA5Njg0LCA5NjkyLCA5Njk5LCA5NzA1LCA5NzA5LCA5NzE2LCA5NzI0LCAKLSAgICA5NzMwLCA5NzM3LCA5NzQ0LCA5NzUwLCA5NzU5LCA5NzY3LCA5Nzc0LCA5NzgwLCA5Nzg0LCA5Nzg3LCA5NzkxLCA5Nzk3LCAKLSAgICA5ODA1LCA5ODA5LCA5ODE1LCA5ODIxLCA5ODI4LCA5ODM1LCA5ODM4LCA5ODQ1LCA5ODUwLCA5ODU4LCA5ODYzLCA5ODY3LCAKLSAgICA5ODgwLCA5ODkzLCA5ODk5LCA5OTA2LCA5OTExLCA5OTE3LCA5OTIyLCA5OTI4LCA5OTM4LCA5OTQ1LCA5OTU0LCA5OTY0LCAKLSAgICA5OTcwLCA5OTc1LCA5OTgwLCA5OTg0LCA5OTg4LCA5OTkzLCA5OTk4LCAxMDAwNCwgMTAwMTIsIDEwMDIwLCAxMDAzMSwgCi0gICAgMTAwMzYsIDEwMDQ1LCAxMDA1NCwgMTAwNjEsIDEwMDY3LCAxMDA3MywgMTAwNzksIDEwMDg1LCAxMDA5MSwgMTAwOTcsIAotICAgIDEwMTAzLCAxMDEwOSwgMTAxMTUsIDEwMTIyLCAxMDEyOSwgMTAxMzYsIDEwMTQyLCAxMDE1MCwgMTAxNTksIDEwMTY1LCAKLSAgICAxMDE3MiwgMTAxNzksIDEwMTg0LCAxMDE4OSwgMTAxOTMsIDEwMjAwLCAxMDIwNywgMTAyMTYsIDEwMjI1LCAxMDIyOCwgCi0gICAgMTAyMzMsIDEwMjM4LCAwLCAxMDI0MywgMTAyNDcsIDEwMjUxLCAxMDI1NywgMTAyNjEsIDEwMjY1LCAxMDI3MSwgMTAyNzUsIAotICAgIDEwMjgzLCAxMDI4NywgMTAyOTEsIDEwMjk1LCAxMDI5OSwgMTAzMDMsIDEwMzA5LCAxMDMxMywgMTAzMTksIDEwMzIzLCAKLSAgICAxMDMyNywgMTAzMzEsIDEwMzM1LCAxMDMzOSwgMTAzNDQsIDEwMzQ3LCAxMDM1MSwgMTAzNTcsIDEwMzYxLCAxMDM2NSwgCi0gICAgMTAzNjksIDEwMzczLCAxMDM3NywgMTAzODMsIDEwMzg5LCAxMDM5NSwgMTAzOTksIDEwNDAzLCAxMDQwOCwgMTA0MTIsIAotICAgIDEwNDE2LCAxMDQyMSwgMTA0MjUsIDEwNDI5LCAxMDQzNiwgMTA0NDMsIDEwNDQ3LCAxMDQ1MSwgMTA0NTYsIDEwNDYwLCAKLSAgICAxMDQ2NCwgMTA0NjcsIDEwNDcyLCAxMDQ3NSwgMTA0NzgsIDEwNDgzLCAxMDQ4OCwgMTA0OTIsIDEwNDk2LCAxMDUwMiwgCi0gICAgMTA1MDgsIDEwNTExLCAwLCAwLCAxMDUxNCwgMTA1MjAsIDEwNTI2LCAxMDUzMiwgMTA1NDIsIDEwNTU0LCAxMDU2NiwgCi0gICAgMTA1ODMsIDEwNTk1LCAxMDYwNiwgMTA2MTQsIDEwNjIxLCAxMDYzMiwgMTA2NDcsIDEwNjU4LCAxMDY2NCwgMTA2NzMsIAotICAgIDEwNjgxLCAxMDY5MywgMTA3MDMsIDEwNzExLCAxMDcyMywgMTA3MzAsIDEwNzM4LCAxMDc1MCwgMTA3NTYsIDEwNzYyLCAKLSAgICAxMDc3MCwgMTA3NzgsIDEwNzg2LCAxMDc5MiwgMTA4MDIsIDEwODA5LCAxMDgxOSwgMTA4MjksIDEwODQyLCAxMDg1NiwgCi0gICAgMTA4NzAsIDEwODgwLCAxMDg5MSwgMTA5MDIsIDEwOTE1LCAxMDkyOCwgMTA5NDIsIDEwOTU0LCAxMDk2NiwgMTA5NzksIAotICAgIDEwOTkyLCAxMTAwNCwgMTEwMTcsIDExMDI2LCAxMTAzNCwgMTEwMzksIDExMDQ0LCAxMTA0OSwgMTEwNTQsIDExMDU5LCAKLSAgICAxMTA2NCwgMTEwNjksIDExMDc0LCAxMTA3OSwgMTEwODQsIDExMDg5LCAxMTA5NCwgMTEwOTksIDExMTA0LCAxMTEwOSwgCi0gICAgMTExMTQsIDExMTE5LCAxMTEyNCwgMTExMjksIDExMTM0LCAxMTEzOSwgMTExNDQsIDExMTQ5LCAxMTE1NCwgMTExNTksIAotICAgIDExMTY0LCAxMTE2OSwgMTExNzQsIDExMTc5LCAxMTE4NCwgMTExODksIDExMTk0LCAxMTE5OCwgMTEyMDMsIDExMjA4LCAKLSAgICAxMTIxMywgMTEyMTgsIDExMjIzLCAxMTIyNywgMTEyMzEsIDExMjM1LCAxMTIzOSwgMTEyNDMsIDExMjQ3LCAxMTI1MSwgCi0gICAgMTEyNTUsIDExMjU5LCAxMTI2MywgMTEyNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExMjcyLCAxMTI3NywgMTEyODEsIDExMjg1LCAxMTI4OSwgMTEyOTMsIDExMjk3LCAxMTMwMSwgMTEzMDUsIDExMzA5LCAKLSAgICAxMTMxMywgMTEzMTcsIDExMzIyLCAxMTMyNiwgMTEzMzAsIDExMzM0LCAxMTMzOSwgMTEzNDMsIDExMzQ4LCAxMTM1MywgCi0gICAgMTEzNTgsIDExMzYyLCAxMTM2NywgMTEzNzIsIDExMzc3LCAxMTM4MiwgMTEzODYsIDExMzkxLCAxMTM5NSwgMTE0MDAsIAotICAgIDExNDA1LCAxMTQwOSwgMTE0MTQsIDExNDIxLCAxMTQyNSwgMTE0MzAsIDExNDM0LCAxMTQzOCwgMTE0NDMsIDExNDQ3LCAKLSAgICAxMTQ1NCwgMTE0NjEsIDExNDY4LCAxMTQ3NCwgMTE0ODIsIDExNDkwLCAxMTQ5OSwgMTE1MDcsIDExNTE0LCAxMTUyMSwgCi0gICAgMTE1MjksIDExNTM1LCAxMTU0MSwgMTE1NDcsIDExNTUzLCAxMTU2MCwgMTE1NjUsIDExNTY5LCAxMTU3NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTE1NzgsIDExNTgzLCAxMTU4OCwgMTE1OTMsIDExNTk4LCAxMTYwMywgMTE2MDgsIDExNjEzLCAxMTYxOCwgCi0gICAgMTE2MjMsIDExNjI4LCAxMTYzMywgMTE2MzgsIDExNjQzLCAxMTY0OCwgMTE2NTMsIDExNjU4LCAxMTY2MywgMTE2NjgsIAotICAgIDExNjczLCAxMTY3OCwgMTE2ODMsIDExNjg4LCAxMTY5MywgMTE2OTgsIDExNzAzLCAxMTcwOCwgMTE3MTYsIDExNzIzLCAKLSAgICAxMTcyOSwgMTE3MzQsIDExNzQyLCAxMTc0OSwgMTE3NTUsIDExNzYyLCAxMTc2OCwgMTE3NzMsIDExNzgwLCAxMTc4NywgCi0gICAgMTE3OTMsIDExNzk4LCAxMTgwMywgMTE4MDksIDExODE0LCAxMTgxOSwgMTE4MjUsIDAsIDAsIDExODMwLCAxMTgzNiwgCi0gICAgMTE4NDIsIDExODQ4LCAxMTg1NCwgMTE4NjAsIDExODY2LCAxMTg3MSwgMTE4NzksIDExODg1LCAxMTg5MSwgMTE4OTcsIAotICAgIDExOTAzLCAxMTkwOSwgMTE5MTcsIDAsIDExOTIzLCAxMTkyOCwgMTE5MzMsIDExOTM4LCAxMTk0MywgMTE5NDgsIDExOTUzLCAKLSAgICAxMTk1OCwgMTE5NjMsIDExOTY4LCAxMTk3MywgMTE5NzgsIDExOTgzLCAxMTk4OCwgMTE5OTMsIDExOTk4LCAxMjAwMywgCi0gICAgMTIwMDgsIDEyMDEzLCAxMjAxOCwgMTIwMjMsIDEyMDI4LCAxMjAzMywgMTIwMzgsIDEyMDQzLCAxMjA0OCwgMTIwNTMsIAotICAgIDEyMDU4LCAwLCAwLCAxMjA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODc5MiwgODgwMywgODgwOCwgODgxMiwgODgxNiwgODgyMCwgODgyMywgMCwgODgyNiwgODgzMywgODgzNywgODg0MywgCisgICAgODg0NywgODg1NCwgODg2MCwgODg2NywgODg3MywgODg3OSwgODg4MywgODg4NywgODg5MywgODg5NywgODkwMSwgODkwNSwgCisgICAgODkwOSwgODkxMywgODkxNywgODkyMSwgODkyNSwgODkyOSwgODkzMywgODkzNywgODk0MSwgODk0NSwgODk0OSwgODk1MywgCisgICAgODk1NywgODk2MSwgODk2OSwgODk3NywgODk4NywgODk5NiwgOTAwNSwgOTAwOCwgOTAxMiwgOTAxNiwgOTAyMCwgOTAyNCwgCisgICAgOTAyOCwgOTAzMiwgOTAzNiwgOTA0MCwgOTA0NSwgOTA0OSwgOTA1MiwgOTA1NSwgOTA1OCwgOTA2MSwgOTA2NCwgOTA2NywgCisgICAgOTA3MCwgOTA3MywgOTA3NywgOTA4MCwgOTA4MywgOTA4OCwgOTA5MywgOTA5OSwgOTEwMiwgOTEwOSwgOTExOCwgOTEyMywgCisgICAgOTEyOCwgOTEzNSwgOTE0MCwgOTE0NSwgOTE0OSwgOTE1MywgOTE1NywgOTE2MSwgOTE2NSwgOTE2OSwgOTE3MywgOTE3NywgCisgICAgOTE4MSwgOTE4NSwgOTE5MCwgOTE5NSwgOTIwMiwgOTIwOCwgOTIxNCwgOTIyMCwgOTIyNSwgOTIzMywgOTI0MSwgOTI0NiwgCisgICAgOTI1MiwgOTI1OCwgOTI2NCwgOTI3MCwgOTI3NCwgOTI3OCwgOTI4MiwgOTI4OSwgOTI5OSwgOTMwMywgOTMwNywgOTMxMSwgCisgICAgOTMxNywgOTMyNSwgOTMyOSwgOTMzMywgOTM0MCwgOTM0NCwgOTM0OCwgOTM1MiwgOTM1OSwgOTM2NiwgOTM3OCwgOTM4MiwgCisgICAgOTM4NiwgOTM5MCwgOTQwMCwgOTQwOSwgOTQxMywgOTQyMSwgOTQyOCwgOTQzNSwgOTQ0NCwgOTQ1NSwgOTQ2MywgOTQ2NywgCisgICAgOTQ3NiwgOTQ4NywgOTQ5NSwgOTUwOCwgOTUxNiwgOTUyNCwgOTUzMiwgOTU0MCwgOTU0NiwgOTU1NSwgOTU2MiwgOTU2NiwgCisgICAgOTU3NCwgOTU3OCwgOTU4NSwgOTU5MywgOTU5NywgOTYwMywgOTYxMCwgOTYxNywgOTYyMSwgOTYyOSwgOTYzMywgOTY0MCwgCisgICAgOTY0NCwgOTY1MiwgOTY1NiwgOTY2NCwgOTY3MiwgOTY3OSwgOTY4NywgOTY5NSwgOTcwMiwgOTcwOCwgOTcxMiwgOTcxOSwgCisgICAgOTcyNywgOTczMywgOTc0MCwgOTc0NywgOTc1MywgOTc2MiwgOTc3MCwgOTc3NywgOTc4MywgOTc4NywgOTc5MCwgOTc5NCwgCisgICAgOTgwMCwgOTgwOCwgOTgxMiwgOTgxOCwgOTgyNCwgOTgzMSwgOTgzOCwgOTg0MSwgOTg0OCwgOTg1MywgOTg2MSwgOTg2NiwgCisgICAgOTg3MCwgOTg4MywgOTg5NiwgOTkwMiwgOTkwOSwgOTkxNCwgOTkyMCwgOTkyNSwgOTkzMSwgOTk0MSwgOTk0OCwgOTk1NywgCisgICAgOTk2NywgOTk3MywgOTk3OCwgOTk4MywgOTk4NywgOTk5MSwgOTk5NiwgMTAwMDEsIDEwMDA3LCAxMDAxNSwgMTAwMjMsIAorICAgIDEwMDM0LCAxMDAzOSwgMTAwNDgsIDEwMDU3LCAxMDA2NCwgMTAwNzAsIDEwMDc2LCAxMDA4MiwgMTAwODgsIDEwMDk0LCAKKyAgICAxMDEwMCwgMTAxMDYsIDEwMTEyLCAxMDExOCwgMTAxMjUsIDEwMTMyLCAxMDEzOSwgMTAxNDUsIDEwMTUzLCAxMDE2MiwgCisgICAgMTAxNjgsIDEwMTc1LCAxMDE4MiwgMTAxODcsIDEwMTkyLCAxMDE5NiwgMTAyMDMsIDEwMjEwLCAxMDIxOSwgMTAyMjgsIAorICAgIDEwMjMxLCAxMDIzNiwgMTAyNDEsIDAsIDEwMjQ2LCAxMDI1MCwgMTAyNTQsIDEwMjYwLCAxMDI2NCwgMTAyNjgsIDEwMjc0LCAKKyAgICAxMDI3OCwgMTAyODYsIDEwMjkwLCAxMDI5NCwgMTAyOTgsIDEwMzAyLCAxMDMwNiwgMTAzMTIsIDEwMzE2LCAxMDMyMiwgCisgICAgMTAzMjYsIDEwMzMwLCAxMDMzNCwgMTAzMzgsIDEwMzQyLCAxMDM0NywgMTAzNTAsIDEwMzU0LCAxMDM2MCwgMTAzNjQsIAorICAgIDEwMzY4LCAxMDM3MiwgMTAzNzYsIDEwMzgwLCAxMDM4NiwgMTAzOTIsIDEwMzk4LCAxMDQwMiwgMTA0MDYsIDEwNDExLCAKKyAgICAxMDQxNSwgMTA0MTksIDEwNDI0LCAxMDQyOCwgMTA0MzIsIDEwNDM5LCAxMDQ0NiwgMTA0NTAsIDEwNDU0LCAxMDQ1OSwgCisgICAgMTA0NjMsIDEwNDY3LCAxMDQ3MCwgMTA0NzUsIDEwNDc4LCAxMDQ4MSwgMTA0ODYsIDEwNDkxLCAxMDQ5NSwgMTA0OTksIAorICAgIDEwNTA1LCAxMDUxMSwgMTA1MTQsIDAsIDAsIDEwNTE3LCAxMDUyMywgMTA1MjksIDEwNTM1LCAxMDU0NSwgMTA1NTcsIAorICAgIDEwNTY5LCAxMDU4NiwgMTA1OTgsIDEwNjA5LCAxMDYxNywgMTA2MjQsIDEwNjM1LCAxMDY1MCwgMTA2NjEsIDEwNjY3LCAKKyAgICAxMDY3NiwgMTA2ODQsIDEwNjk2LCAxMDcwNiwgMTA3MTQsIDEwNzI2LCAxMDczMywgMTA3NDEsIDEwNzUzLCAxMDc1OSwgCisgICAgMTA3NjUsIDEwNzczLCAxMDc4MSwgMTA3ODksIDEwNzk1LCAxMDgwNSwgMTA4MTIsIDEwODIyLCAxMDgzMiwgMTA4NDUsIAorICAgIDEwODU5LCAxMDg3MywgMTA4ODMsIDEwODk0LCAxMDkwNSwgMTA5MTgsIDEwOTMxLCAxMDk0NSwgMTA5NTcsIDEwOTY5LCAKKyAgICAxMDk4MiwgMTA5OTUsIDExMDA3LCAxMTAyMCwgMTEwMjksIDExMDM3LCAxMTA0MiwgMTEwNDcsIDExMDUyLCAxMTA1NywgCisgICAgMTEwNjIsIDExMDY3LCAxMTA3MiwgMTEwNzcsIDExMDgyLCAxMTA4NywgMTEwOTIsIDExMDk3LCAxMTEwMiwgMTExMDcsIAorICAgIDExMTEyLCAxMTExNywgMTExMjIsIDExMTI3LCAxMTEzMiwgMTExMzcsIDExMTQyLCAxMTE0NywgMTExNTIsIDExMTU3LCAKKyAgICAxMTE2MiwgMTExNjcsIDExMTcyLCAxMTE3NywgMTExODIsIDExMTg3LCAxMTE5MiwgMTExOTcsIDExMjAxLCAxMTIwNiwgCisgICAgMTEyMTEsIDExMjE2LCAxMTIyMSwgMTEyMjYsIDExMjMwLCAxMTIzNCwgMTEyMzgsIDExMjQyLCAxMTI0NiwgMTEyNTAsIAorICAgIDExMjU0LCAxMTI1OCwgMTEyNjIsIDExMjY2LCAxMTI3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTEyNzUsIDExMjgwLCAxMTI4NCwgMTEyODgsIDExMjkyLCAxMTI5NiwgMTEzMDAsIDExMzA0LCAxMTMwOCwgMTEzMTIsIAorICAgIDExMzE2LCAxMTMyMCwgMTEzMjUsIDExMzI5LCAxMTMzMywgMTEzMzcsIDExMzQyLCAxMTM0NiwgMTEzNTEsIDExMzU2LCAKKyAgICAxMTM2MSwgMTEzNjUsIDExMzcwLCAxMTM3NSwgMTEzODAsIDExMzg1LCAxMTM4OSwgMTEzOTQsIDExMzk4LCAxMTQwMywgCisgICAgMTE0MDgsIDExNDEyLCAxMTQxNywgMTE0MjQsIDExNDI4LCAxMTQzMywgMTE0MzcsIDExNDQxLCAxMTQ0NiwgMTE0NTAsIAorICAgIDExNDU3LCAxMTQ2NCwgMTE0NzEsIDExNDc3LCAxMTQ4NSwgMTE0OTMsIDExNTAyLCAxMTUxMCwgMTE1MTcsIDExNTI0LCAKKyAgICAxMTUzMiwgMTE1MzgsIDExNTQ0LCAxMTU1MCwgMTE1NTYsIDExNTYzLCAxMTU2OCwgMTE1NzIsIDExNTc3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMTU4MSwgMTE1ODYsIDExNTkxLCAxMTU5NiwgMTE2MDEsIDExNjA2LCAxMTYxMSwgMTE2MTYsIDExNjIxLCAKKyAgICAxMTYyNiwgMTE2MzEsIDExNjM2LCAxMTY0MSwgMTE2NDYsIDExNjUxLCAxMTY1NiwgMTE2NjEsIDExNjY2LCAxMTY3MSwgCisgICAgMTE2NzYsIDExNjgxLCAxMTY4NiwgMTE2OTEsIDExNjk2LCAxMTcwMSwgMTE3MDYsIDExNzExLCAxMTcxOSwgMTE3MjYsIAorICAgIDExNzMyLCAxMTczNywgMTE3NDUsIDExNzUyLCAxMTc1OCwgMTE3NjUsIDExNzcxLCAxMTc3NiwgMTE3ODMsIDExNzkwLCAKKyAgICAxMTc5NiwgMTE4MDEsIDExODA2LCAxMTgxMiwgMTE4MTcsIDExODIyLCAxMTgyOCwgMCwgMCwgMTE4MzMsIDExODM5LCAKKyAgICAxMTg0NSwgMTE4NTEsIDExODU3LCAxMTg2MywgMTE4NjksIDExODc0LCAxMTg4MiwgMTE4ODgsIDExODk0LCAxMTkwMCwgCisgICAgMTE5MDYsIDExOTEyLCAxMTkyMCwgMCwgMTE5MjYsIDExOTMxLCAxMTkzNiwgMTE5NDEsIDExOTQ2LCAxMTk1MSwgMTE5NTYsIAorICAgIDExOTYxLCAxMTk2NiwgMTE5NzEsIDExOTc2LCAxMTk4MSwgMTE5ODYsIDExOTkxLCAxMTk5NiwgMTIwMDEsIDEyMDA2LCAKKyAgICAxMjAxMSwgMTIwMTYsIDEyMDIxLCAxMjAyNiwgMTIwMzEsIDEyMDM2LCAxMjA0MSwgMTIwNDYsIDEyMDUxLCAxMjA1NiwgCisgICAgMTIwNjEsIDAsIDAsIDEyMDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjA2NywgMCwgMTIwNzYsIDEyMDgzLCAxMjA5MSwgMTIxMDMsIDEyMTEwLCAxMjExNywgMTIxMjQsIDEyMTM1LCAxMjE0NiwgCi0gICAgMTIxNTMsIDEyMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA3MCwgMCwgMTIwNzksIDEyMDg2LCAxMjA5NCwgMTIxMDYsIDEyMTEzLCAxMjEyMCwgMTIxMjcsIDEyMTM4LCAxMjE0OSwgCisgICAgMTIxNTYsIDEyMTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE2NywgMTIxNzIsIDEyMTc3LCAxMjE4MiwgMTIxODcsIAotICAgIDEyMTkyLCAxMjE5NywgMTIyMDIsIDEyMjA3LCAxMjIxMiwgMTIyMTcsIDEyMjIyLCAxMjIyNywgMTIyMzEsIDEyMjM1LCAKLSAgICAxMjIzOSwgMTIyNDQsIDEyMjUwLCAxMjI1NiwgMTIyNjIsIDEyMjY3LCAxMjI3MiwgMTIyNzcsIDEyMjgyLCAxMjI4OCwgCi0gICAgMTIyOTcsIDEyMzA1LCAwLCAxMjMxMSwgMTIzMTcsIDEyMzIxLCAxMjMyNSwgMTIzMjksIDEyMzM0LCAxMjMzNywgMTIzNDEsIAotICAgIDEyMzQ0LCAxMjM0OCwgMTIzNTEsIDEyMzU1LCAxMjM1OSwgMTIzNjMsIDEyMzY4LCAxMjM3MywgMTIzNzYsIDEyMzgwLCAKLSAgICAxMjM4NSwgMTIzOTAsIDEyMzkzLCAxMjM5NywgMTI0MDAsIDEyNDA0LCAxMjQwOCwgMTI0MTIsIDEyNDE2LCAxMjQyMCwgCi0gICAgMTI0MjQsIDEyNDI4LCAxMjQzMiwgMTI0MzYsIDEyNDQwLCAxMjQ0NCwgMTI0NDgsIDEyNDUyLCAxMjQ1NiwgMTI0NjAsIAotICAgIDEyNDY0LCAxMjQ2OCwgMTI0NzIsIDEyNDc1LCAxMjQ3OSwgMTI0ODIsIDEyNDg2LCAxMjQ5MCwgMTI0OTQsIDEyNDk3LCAKLSAgICAxMjUwMCwgMTI1MDMsIDEyNTA3LCAxMjUxMSwgMTI1MTUsIDEyNTE5LCAxMjUyMywgMTI1MjcsIDEyNTMxLCAxMjUzNCwgCi0gICAgMTI1MzcsIDEyNTQyLCAxMjU0NywgMTI1NTEsIDEyNTU1LCAxMjU2MCwgMTI1NjQsIDEyNTY5LCAxMjU3MywgMTI1NzgsIAotICAgIDEyNTgzLCAxMjU4OSwgMTI1OTUsIDEyNjAxLCAxMjYwNSwgMTI2MTAsIDEyNjE2LCAxMjYyMiwgMTI2MjYsIDEyNjMxLCAKLSAgICAxMjYzNSwgMTI2NDEsIDEyNjQ2LCAxMjY0OSwgMTI2NTUsIDEyNjYxLCAxMjY2NiwgMTI2NzEsIDEyNjc4LCAxMjY4MywgCi0gICAgMTI2ODgsIDEyNjkyLCAxMjY5NiwgMTI3MDAsIDEyNzA0LCAxMjcwOCwgMTI3MTIsIDEyNzE2LCAxMjcyMCwgMTI3MjUsIAotICAgIDEyNzMwLCAxMjczNSwgMTI3NDEsIDEyNzQ0LCAxMjc0OCwgMTI3NTIsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAKLSAgICAxMjc2NywgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgzLCAxMjc5MCwgMTI3OTUsIDEyNzk5LCAxMjgwMywgCi0gICAgMTI4MDcsIDEyODExLCAwLCAxMjgxNSwgMTI4MTksIDEyODIzLCAxMjgyNywgMTI4MzEsIDEyODM3LCAxMjg0MSwgMCwgCi0gICAgMTI4NDUsIDEyODQ5LCAxMjg1MywgMCwgMTI4NTcsIDEyODYwLCAxMjg2NCwgMTI4NjcsIDEyODcxLCAxMjg3NCwgMTI4NzgsIAotICAgIDEyODgyLCAwLCAwLCAxMjg4NiwgMTI4ODksIDAsIDAsIDEyODkzLCAxMjg5NiwgMTI5MDAsIDEyOTAzLCAxMjkwNywgCi0gICAgMTI5MTEsIDEyOTE1LCAxMjkxOSwgMTI5MjMsIDEyOTI3LCAxMjkzMSwgMTI5MzUsIDEyOTM5LCAxMjk0MywgMTI5NDcsIAotICAgIDEyOTUxLCAxMjk1NSwgMTI5NTksIDEyOTYzLCAxMjk2NywgMTI5NzEsIDEyOTc1LCAwLCAxMjk3OCwgMTI5ODEsIDEyOTg1LCAKLSAgICAxMjk4OSwgMTI5OTMsIDEyOTk2LCAxMjk5OSwgMCwgMTMwMDIsIDAsIDAsIDAsIDEzMDA2LCAxMzAxMCwgMTMwMTQsIAotICAgIDEzMDE3LCAwLCAwLCAxMzAyMCwgMTMwMjQsIDEzMDI4LCAxMzAzMywgMTMwMzcsIDEzMDQyLCAxMzA0NiwgMTMwNTEsIAotICAgIDEzMDU2LCAwLCAwLCAxMzA2MiwgMTMwNjYsIDAsIDAsIDEzMDcxLCAxMzA3NSwgMTMwODAsIDEzMDg0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMzA5MCwgMCwgMCwgMCwgMCwgMTMwOTYsIDEzMTAwLCAwLCAxMzEwNCwgMTMxMDgsIDEzMTEzLCAKLSAgICAxMzExOCwgMTMxMjMsIDAsIDAsIDEzMTI5LCAxMzEzMywgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAKLSAgICAxMzE1MSwgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjksIDEzMTc4LCAxMzE4MiwgMTMxODYsIDEzMTkyLCAxMzE5OCwgCi0gICAgMTMyMDQsIDEzMjEwLCAxMzIyNCwgMTMyMzEsIDEzMjM0LCAwLCAwLCAwLCAwLCAwLCAxMzIzOCwgMTMyNDQsIDEzMjQ4LCAwLCAKLSAgICAxMzI1MiwgMTMyNTUsIDEzMjU5LCAxMzI2MiwgMTMyNjYsIDEzMjY5LCAwLCAwLCAwLCAwLCAxMzI3MywgMTMyNzcsIDAsIDAsIAotICAgIDEzMjgxLCAxMzI4NSwgMTMyODksIDEzMjkyLCAxMzI5NiwgMTMzMDAsIDEzMzA0LCAxMzMwOCwgMTMzMTIsIDEzMzE2LCAKLSAgICAxMzMyMCwgMTMzMjQsIDEzMzI4LCAxMzMzMiwgMTMzMzYsIDEzMzQwLCAxMzM0NCwgMTMzNDgsIDEzMzUyLCAxMzM1NiwgCi0gICAgMTMzNjAsIDEzMzY0LCAwLCAxMzM2NywgMTMzNzAsIDEzMzc0LCAxMzM3OCwgMTMzODIsIDEzMzg1LCAxMzM4OCwgMCwgCi0gICAgMTMzOTEsIDEzMzk1LCAwLCAxMzM5OSwgMTM0MDMsIDAsIDEzNDA3LCAxMzQxMCwgMCwgMCwgMTM0MTMsIDAsIDEzNDE3LCAKLSAgICAxMzQyMiwgMTM0MjYsIDEzNDMxLCAxMzQzNSwgMCwgMCwgMCwgMCwgMTM0NDAsIDEzNDQ1LCAwLCAwLCAxMzQ1MCwgMTM0NTUsIAotICAgIDEzNDYwLCAwLCAwLCAwLCAxMzQ2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0NjgsIDEzNDcyLCAxMzQ3NiwgMTM0ODAsIAotICAgIDAsIDEzNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ4OCwgMTM0OTIsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAKLSAgICAxMzUwNywgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1NDAsIDEzNTQ0LCAxMzU0OCwgMCwgMTM1NTIsIDEzNTU1LCAKLSAgICAxMzU1OSwgMTM1NjIsIDEzNTY2LCAxMzU2OSwgMTM1NzMsIDEzNTc3LCAxMzU4MSwgMCwgMTM1ODYsIDEzNTg5LCAxMzU5MywgCi0gICAgMCwgMTM1OTgsIDEzNjAxLCAxMzYwNSwgMTM2MDgsIDEzNjEyLCAxMzYxNiwgMTM2MjAsIDEzNjI0LCAxMzYyOCwgMTM2MzIsIAotICAgIDEzNjM2LCAxMzY0MCwgMTM2NDQsIDEzNjQ4LCAxMzY1MiwgMTM2NTYsIDEzNjYwLCAxMzY2NCwgMTM2NjgsIDEzNjcyLCAKLSAgICAxMzY3NiwgMTM2ODAsIDAsIDEzNjgzLCAxMzY4NiwgMTM2OTAsIDEzNjk0LCAxMzY5OCwgMTM3MDEsIDEzNzA0LCAwLCAKLSAgICAxMzcwNywgMTM3MTEsIDAsIDEzNzE1LCAxMzcxOSwgMTM3MjMsIDEzNzI3LCAxMzczMCwgMCwgMCwgMTM3MzMsIDEzNzM3LCAKLSAgICAxMzc0MSwgMTM3NDYsIDEzNzUwLCAxMzc1NSwgMTM3NTksIDEzNzY0LCAxMzc2OSwgMTM3NzUsIDAsIDEzNzgxLCAxMzc4NSwgCi0gICAgMTM3OTAsIDAsIDEzNzk2LCAxMzgwMCwgMTM4MDUsIDAsIDAsIDEzODA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMzgxMiwgMTM4MTcsIDEzODIyLCAxMzgyNywgMCwgMCwgMTM4MzMsIDEzODM3LCAxMzg0MCwgCi0gICAgMTM4NDMsIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4NzIsIDEzODc2LCAxMzg4MCwgMCwgMTM4ODQsIDEzODg3LCAKLSAgICAxMzg5MSwgMTM4OTQsIDEzODk4LCAxMzkwMSwgMTM5MDUsIDEzOTA5LCAwLCAwLCAxMzkxMywgMTM5MTYsIDAsIDAsIAotICAgIDEzOTIwLCAxMzkyMywgMTM5MjcsIDEzOTMwLCAxMzkzNCwgMTM5MzgsIDEzOTQyLCAxMzk0NiwgMTM5NTAsIDEzOTU0LCAKLSAgICAxMzk1OCwgMTM5NjIsIDEzOTY2LCAxMzk3MCwgMTM5NzQsIDEzOTc4LCAxMzk4MiwgMTM5ODYsIDEzOTkwLCAxMzk5NCwgCi0gICAgMTM5OTgsIDE0MDAyLCAwLCAxNDAwNSwgMTQwMDgsIDE0MDEyLCAxNDAxNiwgMTQwMjAsIDE0MDIzLCAxNDAyNiwgMCwgCi0gICAgMTQwMjksIDE0MDMzLCAwLCAxNDAzNywgMTQwNDEsIDE0MDQ1LCAxNDA0OSwgMTQwNTIsIDAsIDAsIDE0MDU1LCAxNDA1OSwgCi0gICAgMTQwNjMsIDE0MDY4LCAxNDA3MiwgMTQwNzcsIDE0MDgxLCAxNDA4NiwgMTQwOTEsIDAsIDAsIDE0MDk3LCAxNDEwMSwgMCwgCi0gICAgMCwgMTQxMDYsIDE0MTEwLCAxNDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQxMTksIDE0MTI1LCAwLCAwLCAwLCAwLCAKLSAgICAxNDEzMSwgMTQxMzUsIDAsIDE0MTM5LCAxNDE0MywgMTQxNDgsIDE0MTUzLCAxNDE1OCwgMCwgMCwgMTQxNjQsIDE0MTY4LCAKLSAgICAxNDE3MSwgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgCi0gICAgMTQyMDIsIDE0MjA4LCAxNDIxNCwgMTQyMjAsIDE0MjI2LCAxNDIzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTQyMzgsIDE0MjQyLCAwLCAxNDI0NiwgMTQyNDksIDE0MjUzLCAxNDI1NiwgMTQyNjAsIDE0MjYzLCAwLCAwLCAwLCAKLSAgICAxNDI2NywgMTQyNzAsIDE0Mjc0LCAwLCAxNDI3OCwgMTQyODEsIDE0Mjg1LCAxNDI4OSwgMCwgMCwgMCwgMTQyOTIsIAotICAgIDE0Mjk2LCAwLCAxNDMwMCwgMCwgMTQzMDQsIDE0MzA4LCAwLCAwLCAwLCAxNDMxMiwgMTQzMTYsIDAsIDAsIDAsIDE0MzIwLCAKLSAgICAxNDMyMywgMTQzMjcsIDAsIDAsIDAsIDE0MzMwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MywgMTQzNDcsIDE0MzUxLCAKLSAgICAxNDM1NSwgMTQzNTksIDE0MzYzLCAxNDM2NywgMTQzNzAsIDAsIDAsIDAsIDAsIDE0MzczLCAxNDM3OCwgMTQzODIsIAotICAgIDE0Mzg3LCAxNDM5MSwgMCwgMCwgMCwgMTQzOTYsIDE0NDAwLCAxNDQwNSwgMCwgMTQ0MTAsIDE0NDE0LCAxNDQxOSwgCi0gICAgMTQ0MjQsIDAsIDAsIDE0NDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTQ0MzcsIDE0NDQxLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAKLSAgICAxNDQ2MiwgMTQ0NjUsIDE0NDY4LCAxNDQ3MiwgMTQ0NzcsIDE0NDgyLCAxNDQ4NiwgMTQ0OTAsIDE0NDk0LCAxNDQ5OCwgCi0gICAgMTQ1MDIsIDE0NTA3LCAxNDUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ1MTQsIDE0NTE4LCAxNDUyMiwgMCwgMTQ1MjYsIAotICAgIDE0NTI5LCAxNDUzMywgMTQ1MzYsIDE0NTQwLCAxNDU0MywgMTQ1NDcsIDE0NTUxLCAwLCAxNDU1NSwgMTQ1NTgsIDE0NTYyLCAKLSAgICAwLCAxNDU2NiwgMTQ1NjksIDE0NTczLCAxNDU3NywgMTQ1ODAsIDE0NTg0LCAxNDU4OCwgMTQ1OTIsIDE0NTk2LCAxNDYwMCwgCi0gICAgMTQ2MDQsIDE0NjA4LCAxNDYxMiwgMTQ2MTYsIDE0NjIwLCAxNDYyNCwgMTQ2MjgsIDE0NjMyLCAxNDYzNiwgMTQ2NDAsIAotICAgIDE0NjQ0LCAxNDY0OCwgMTQ2NTIsIDAsIDE0NjU1LCAxNDY1OCwgMTQ2NjIsIDE0NjY2LCAxNDY3MCwgMTQ2NzMsIDE0Njc2LCAKLSAgICAxNDY3OSwgMTQ2ODMsIDE0Njg3LCAwLCAxNDY5MSwgMTQ2OTUsIDE0Njk5LCAxNDcwMywgMTQ3MDYsIDAsIDAsIDAsIAotICAgIDE0NzA5LCAxNDcxMywgMTQ3MTgsIDE0NzIyLCAxNDcyNywgMTQ3MzEsIDE0NzM2LCAxNDc0MSwgMCwgMTQ3NDcsIDE0NzUxLCAKLSAgICAxNDc1NiwgMCwgMTQ3NjEsIDE0NzY1LCAxNDc3MCwgMTQ3NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0Nzc5LCAxNDc4MywgCi0gICAgMCwgMTQ3ODksIDE0NzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc5NywgMTQ4MDIsIDE0ODA3LCAxNDgxMiwgMCwgMCwgCi0gICAgMTQ4MTgsIDE0ODIyLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODQ5LCAxNDg2MiwgMTQ4NzQsIDE0ODg2LCAxNDg5OCwgMTQ5MTAsIDE0OTIyLCAKLSAgICAxNDkzNCwgMCwgMCwgMTQ5MzgsIDE0OTQyLCAwLCAxNDk0NiwgMTQ5NDksIDE0OTUzLCAxNDk1NiwgMTQ5NjAsIDE0OTYzLCAKLSAgICAxNDk2NywgMTQ5NzEsIDAsIDE0OTc1LCAxNDk3OCwgMTQ5ODIsIDAsIDE0OTg2LCAxNDk4OSwgMTQ5OTMsIDE0OTk3LCAKLSAgICAxNTAwMCwgMTUwMDQsIDE1MDA4LCAxNTAxMiwgMTUwMTYsIDE1MDIwLCAxNTAyNCwgMTUwMjgsIDE1MDMyLCAxNTAzNiwgCi0gICAgMTUwNDAsIDE1MDQ0LCAxNTA0OCwgMTUwNTIsIDE1MDU2LCAxNTA2MCwgMTUwNjQsIDE1MDY4LCAxNTA3MiwgMCwgMTUwNzUsIAotICAgIDE1MDc4LCAxNTA4MiwgMTUwODYsIDE1MDkwLCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMywgMTUxMDcsIDAsIDE1MTExLCAKLSAgICAxNTExNSwgMTUxMTksIDE1MTIzLCAxNTEyNiwgMCwgMCwgMTUxMjksIDE1MTMzLCAxNTEzNywgMTUxNDIsIDE1MTQ2LCAKLSAgICAxNTE1MSwgMTUxNTUsIDE1MTYwLCAxNTE2NSwgMCwgMTUxNzEsIDE1MTc1LCAxNTE4MCwgMCwgMTUxODUsIDE1MTg5LCAKLSAgICAxNTE5NCwgMTUxOTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MjAzLCAxNTIwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTUyMTMsIDAsIDE1MjE3LCAxNTIyMiwgMTUyMjcsIDE1MjMyLCAwLCAwLCAxNTIzOCwgMTUyNDIsIDE1MjQ1LCAxNTI0OCwgCi0gICAgMTUyNTEsIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMCwgMTUyNjksIDE1MjczLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTI3NywgMTUyODEsIDAsIDE1Mjg1LCAxNTI4OCwgMTUyOTIsIAotICAgIDE1Mjk1LCAxNTI5OSwgMTUzMDIsIDE1MzA2LCAxNTMxMCwgMCwgMTUzMTQsIDE1MzE3LCAxNTMyMSwgMCwgMTUzMjUsIAotICAgIDE1MzI4LCAxNTMzMiwgMTUzMzYsIDE1MzM5LCAxNTM0MywgMTUzNDcsIDE1MzUxLCAxNTM1NSwgMTUzNTksIDE1MzYzLCAKLSAgICAxNTM2NywgMTUzNzEsIDE1Mzc1LCAxNTM3OSwgMTUzODMsIDE1Mzg3LCAxNTM5MSwgMTUzOTUsIDE1Mzk5LCAxNTQwMywgCi0gICAgMTU0MDcsIDE1NDExLCAxNTQxNCwgMTU0MTgsIDE1NDIxLCAxNTQyNSwgMTU0MjksIDE1NDMzLCAxNTQzNiwgMTU0MzksIAotICAgIDE1NDQyLCAxNTQ0NiwgMTU0NTAsIDE1NDU0LCAxNTQ1OCwgMTU0NjIsIDE1NDY2LCAxNTQ3MCwgMTU0NzMsIDE1NDc2LCAwLCAKLSAgICAwLCAxNTQ4MCwgMTU0ODQsIDE1NDg5LCAxNTQ5MywgMTU0OTgsIDE1NTAyLCAxNTUwNywgMTU1MTIsIDAsIDE1NTE4LCAKLSAgICAxNTUyMiwgMTU1MjcsIDAsIDE1NTMyLCAxNTUzNiwgMTU1NDEsIDE1NTQ2LCAxNTU1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTU1NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NTYxLCAxNTU2NiwgMTU1NzEsIDE1NTc2LCAwLCAwLCAKLSAgICAxNTU4MiwgMTU1ODYsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgCi0gICAgMTU2MTMsIDE1NjE3LCAxNTYyMiwgMTU2MjcsIDE1NjMzLCAxNTYzOSwgMCwgMCwgMCwgMTU2NDUsIDE1NjQ5LCAxNTY1NSwgCi0gICAgMTU2NjEsIDE1NjY3LCAxNTY3MiwgMTU2NzgsIDAsIDAsIDE1Njg0LCAxNTY4OCwgMCwgMTU2OTIsIDE1Njk2LCAxNTcwMCwgCi0gICAgMTU3MDQsIDE1NzA4LCAxNTcxMiwgMTU3MTYsIDE1NzIwLCAxNTcyNCwgMTU3MjgsIDE1NzMyLCAxNTczNiwgMTU3NDAsIAotICAgIDE1NzQ0LCAxNTc0OCwgMTU3NTIsIDE1NzU2LCAxNTc2MCwgMCwgMCwgMCwgMTU3NjQsIDE1NzcwLCAxNTc3NiwgMTU3ODIsIAotICAgIDE1Nzg4LCAxNTc5NCwgMTU4MDAsIDE1ODA2LCAxNTgxMiwgMTU4MTgsIDE1ODI0LCAxNTgzMCwgMTU4MzgsIDE1ODQ0LCAKLSAgICAxNTg1MCwgMTU4NTYsIDE1ODYyLCAxNTg2OCwgMTU4NzQsIDE1ODgwLCAxNTg4NiwgMTU4OTIsIDE1ODk4LCAxNTkwNCwgMCwgCi0gICAgMTU5MTAsIDE1OTE2LCAxNTkyMiwgMTU5MjgsIDE1OTM0LCAxNTk0MCwgMTU5NDQsIDE1OTUwLCAxNTk1NCwgMCwgMTU5NTgsIAotICAgIDAsIDAsIDE1OTY0LCAxNTk2OCwgMTU5NzQsIDE1OTgwLCAxNTk4NiwgMTU5OTAsIDE1OTk2LCAwLCAwLCAwLCAxNjAwMCwgMCwgCi0gICAgMCwgMCwgMCwgMTYwMDQsIDE2MDA5LCAxNjAxNiwgMTYwMjMsIDE2MDMwLCAxNjAzNywgMCwgMTYwNDQsIDAsIDE2MDUxLCAKLSAgICAxNjA1NiwgMTYwNjEsIDE2MDY4LCAxNjA3NSwgMTYwODQsIDE2MDk1LCAxNjEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxMDksIDE2MTE2LCAxNjEyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTYxMjgsIDE2MTM0LCAxNjE0MCwgMTYxNDYsIDE2MTUyLCAxNjE1OCwgMTYxNjQsIDE2MTcwLCAKLSAgICAxNjE3NiwgMTYxODIsIDE2MTg4LCAxNjE5NCwgMTYyMDAsIDE2MjA2LCAxNjIxMiwgMTYyMTgsIDE2MjI0LCAxNjIzMCwgCi0gICAgMTYyMzYsIDE2MjQyLCAxNjI0OCwgMTYyNTQsIDE2MjYwLCAxNjI2NiwgMTYyNzIsIDE2Mjc4LCAxNjI4NCwgMTYyOTAsIAotICAgIDE2Mjk2LCAxNjMwMiwgMTYzMDgsIDE2MzE0LCAxNjMyMCwgMTYzMjUsIDE2MzMxLCAxNjMzNywgMTYzNDEsIDE2MzQ3LCAKLSAgICAxNjM1MSwgMTYzNTcsIDE2MzYzLCAxNjM2OSwgMTYzNzUsIDE2MzgxLCAxNjM4NywgMTYzOTIsIDE2Mzk4LCAxNjQwMiwgCi0gICAgMTY0MDcsIDE2NDEzLCAxNjQxOSwgMTY0MjUsIDE2NDMwLCAxNjQzNiwgMTY0NDIsIDE2NDQ4LCAxNjQ1MywgMTY0NTksIDAsIAotICAgIDAsIDAsIDAsIDE2NDYzLCAxNjQ2OSwgMTY0NzQsIDE2NDgwLCAxNjQ4NSwgMTY0OTMsIDE2NTAxLCAxNjUwNSwgMTY1MDksIAotICAgIDE2NTEzLCAxNjUxOSwgMTY1MjUsIDE2NTMxLCAxNjUzNywgMTY1NDEsIDE2NTQ1LCAxNjU0OSwgMTY1NTMsIDE2NTU3LCAKLSAgICAxNjU2MCwgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNzAsIDEyMTc1LCAxMjE4MCwgMTIxODUsIDEyMTkwLCAKKyAgICAxMjE5NSwgMTIyMDAsIDEyMjA1LCAxMjIxMCwgMTIyMTUsIDEyMjIwLCAxMjIyNSwgMTIyMzAsIDEyMjM0LCAxMjIzOCwgCisgICAgMTIyNDIsIDEyMjQ3LCAxMjI1MywgMTIyNTksIDEyMjY1LCAxMjI3MCwgMTIyNzUsIDEyMjgwLCAxMjI4NSwgMTIyOTEsIAorICAgIDEyMzAwLCAxMjMwOCwgMCwgMTIzMTQsIDEyMzIwLCAxMjMyNCwgMTIzMjgsIDEyMzMyLCAxMjMzNywgMTIzNDAsIDEyMzQ0LCAKKyAgICAxMjM0NywgMTIzNTEsIDEyMzU0LCAxMjM1OCwgMTIzNjIsIDEyMzY2LCAxMjM3MSwgMTIzNzYsIDEyMzc5LCAxMjM4MywgCisgICAgMTIzODgsIDEyMzkzLCAxMjM5NiwgMTI0MDAsIDEyNDAzLCAxMjQwNywgMTI0MTEsIDEyNDE1LCAxMjQxOSwgMTI0MjMsIAorICAgIDEyNDI3LCAxMjQzMSwgMTI0MzUsIDEyNDM5LCAxMjQ0MywgMTI0NDcsIDEyNDUxLCAxMjQ1NSwgMTI0NTksIDEyNDYzLCAKKyAgICAxMjQ2NywgMTI0NzEsIDEyNDc1LCAxMjQ3OCwgMTI0ODIsIDEyNDg1LCAxMjQ4OSwgMTI0OTMsIDEyNDk3LCAxMjUwMCwgCisgICAgMTI1MDMsIDEyNTA2LCAxMjUxMCwgMTI1MTQsIDEyNTE4LCAxMjUyMiwgMTI1MjYsIDEyNTMwLCAxMjUzNCwgMTI1MzcsIAorICAgIDEyNTQwLCAxMjU0NSwgMTI1NTAsIDEyNTU0LCAxMjU1OCwgMTI1NjMsIDEyNTY3LCAxMjU3MiwgMTI1NzYsIDEyNTgxLCAKKyAgICAxMjU4NiwgMTI1OTIsIDEyNTk4LCAxMjYwNCwgMTI2MDgsIDEyNjEzLCAxMjYxOSwgMTI2MjUsIDEyNjI5LCAxMjYzNCwgCisgICAgMTI2MzgsIDEyNjQ0LCAxMjY0OSwgMTI2NTIsIDEyNjU4LCAxMjY2NCwgMTI2NjksIDEyNjc0LCAxMjY4MSwgMTI2ODYsIAorICAgIDEyNjkxLCAxMjY5NSwgMTI2OTksIDEyNzAzLCAxMjcwNywgMTI3MTEsIDEyNzE1LCAxMjcxOSwgMTI3MjMsIDEyNzI4LCAKKyAgICAxMjczMywgMTI3MzgsIDEyNzQ0LCAxMjc0NywgMTI3NTEsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAxMjc2NywgCisgICAgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgyLCAxMjc4NiwgMTI3OTMsIDEyNzk4LCAxMjgwMiwgMTI4MDYsIAorICAgIDEyODEwLCAxMjgxNCwgMCwgMTI4MTgsIDEyODIyLCAxMjgyNiwgMTI4MzAsIDEyODM0LCAxMjg0MCwgMTI4NDQsIDAsIAorICAgIDEyODQ4LCAxMjg1MiwgMTI4NTYsIDAsIDEyODYwLCAxMjg2MywgMTI4NjcsIDEyODcwLCAxMjg3NCwgMTI4NzcsIDEyODgxLCAKKyAgICAxMjg4NSwgMCwgMCwgMTI4ODksIDEyODkyLCAwLCAwLCAxMjg5NiwgMTI4OTksIDEyOTAzLCAxMjkwNiwgMTI5MTAsIAorICAgIDEyOTE0LCAxMjkxOCwgMTI5MjIsIDEyOTI2LCAxMjkzMCwgMTI5MzQsIDEyOTM4LCAxMjk0MiwgMTI5NDYsIDEyOTUwLCAKKyAgICAxMjk1NCwgMTI5NTgsIDEyOTYyLCAxMjk2NiwgMTI5NzAsIDEyOTc0LCAxMjk3OCwgMCwgMTI5ODEsIDEyOTg0LCAxMjk4OCwgCisgICAgMTI5OTIsIDEyOTk2LCAxMjk5OSwgMTMwMDIsIDAsIDEzMDA1LCAwLCAwLCAwLCAxMzAwOSwgMTMwMTMsIDEzMDE3LCAKKyAgICAxMzAyMCwgMCwgMCwgMTMwMjMsIDEzMDI3LCAxMzAzMSwgMTMwMzYsIDEzMDQwLCAxMzA0NSwgMTMwNDksIDEzMDU0LCAKKyAgICAxMzA1OSwgMCwgMCwgMTMwNjUsIDEzMDY5LCAwLCAwLCAxMzA3NCwgMTMwNzgsIDEzMDgzLCAxMzA4NywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTMwOTMsIDAsIDAsIDAsIDAsIDEzMDk5LCAxMzEwMywgMCwgMTMxMDcsIDEzMTExLCAxMzExNiwgCisgICAgMTMxMjEsIDEzMTI2LCAwLCAwLCAxMzEzMiwgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAxMzE1MSwgCisgICAgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjMsIDEzMTcyLCAxMzE4MSwgMTMxODUsIDEzMTg5LCAxMzE5NSwgMTMyMDEsIAorICAgIDEzMjA3LCAxMzIxMywgMTMyMjcsIDEzMjM0LCAxMzIzNywgMCwgMCwgMCwgMCwgMCwgMTMyNDEsIDEzMjQ3LCAxMzI1MSwgMCwgCisgICAgMTMyNTUsIDEzMjU4LCAxMzI2MiwgMTMyNjUsIDEzMjY5LCAxMzI3MiwgMCwgMCwgMCwgMCwgMTMyNzYsIDEzMjgwLCAwLCAwLCAKKyAgICAxMzI4NCwgMTMyODgsIDEzMjkyLCAxMzI5NSwgMTMyOTksIDEzMzAzLCAxMzMwNywgMTMzMTEsIDEzMzE1LCAxMzMxOSwgCisgICAgMTMzMjMsIDEzMzI3LCAxMzMzMSwgMTMzMzUsIDEzMzM5LCAxMzM0MywgMTMzNDcsIDEzMzUxLCAxMzM1NSwgMTMzNTksIAorICAgIDEzMzYzLCAxMzM2NywgMCwgMTMzNzAsIDEzMzczLCAxMzM3NywgMTMzODEsIDEzMzg1LCAxMzM4OCwgMTMzOTEsIDAsIAorICAgIDEzMzk0LCAxMzM5OCwgMCwgMTM0MDIsIDEzNDA2LCAwLCAxMzQxMCwgMTM0MTMsIDAsIDAsIDEzNDE2LCAwLCAxMzQyMCwgCisgICAgMTM0MjUsIDEzNDI5LCAxMzQzNCwgMTM0MzgsIDAsIDAsIDAsIDAsIDEzNDQzLCAxMzQ0OCwgMCwgMCwgMTM0NTMsIDEzNDU4LCAKKyAgICAxMzQ2MywgMCwgMCwgMCwgMTM0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDcxLCAxMzQ3NSwgMTM0NzksIDEzNDgzLCAKKyAgICAwLCAxMzQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0OTEsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAxMzUwNywgCisgICAgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNCwgMTM1MzksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTQzLCAxMzU0NywgMTM1NTEsIDAsIDEzNTU1LCAxMzU1OCwgCisgICAgMTM1NjIsIDEzNTY1LCAxMzU2OSwgMTM1NzIsIDEzNTc2LCAxMzU4MCwgMTM1ODQsIDAsIDEzNTg5LCAxMzU5MiwgMTM1OTYsIAorICAgIDAsIDEzNjAxLCAxMzYwNCwgMTM2MDgsIDEzNjExLCAxMzYxNSwgMTM2MTksIDEzNjIzLCAxMzYyNywgMTM2MzEsIDEzNjM1LCAKKyAgICAxMzYzOSwgMTM2NDMsIDEzNjQ3LCAxMzY1MSwgMTM2NTUsIDEzNjU5LCAxMzY2MywgMTM2NjcsIDEzNjcxLCAxMzY3NSwgCisgICAgMTM2NzksIDEzNjgzLCAwLCAxMzY4NiwgMTM2ODksIDEzNjkzLCAxMzY5NywgMTM3MDEsIDEzNzA0LCAxMzcwNywgMCwgCisgICAgMTM3MTAsIDEzNzE0LCAwLCAxMzcxOCwgMTM3MjIsIDEzNzI2LCAxMzczMCwgMTM3MzMsIDAsIDAsIDEzNzM2LCAxMzc0MCwgCisgICAgMTM3NDQsIDEzNzQ5LCAxMzc1MywgMTM3NTgsIDEzNzYyLCAxMzc2NywgMTM3NzIsIDEzNzc4LCAwLCAxMzc4NCwgMTM3ODgsIAorICAgIDEzNzkzLCAwLCAxMzc5OSwgMTM4MDMsIDEzODA4LCAwLCAwLCAxMzgxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTM4MTUsIDEzODIwLCAxMzgyNSwgMTM4MzAsIDAsIDAsIDEzODM2LCAxMzg0MCwgMTM4NDMsIAorICAgIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2NywgMTM4NzEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODc1LCAxMzg3OSwgMTM4ODMsIDAsIDEzODg3LCAxMzg5MCwgCisgICAgMTM4OTQsIDEzODk3LCAxMzkwMSwgMTM5MDQsIDEzOTA4LCAxMzkxMiwgMCwgMCwgMTM5MTYsIDEzOTE5LCAwLCAwLCAKKyAgICAxMzkyMywgMTM5MjYsIDEzOTMwLCAxMzkzMywgMTM5MzcsIDEzOTQxLCAxMzk0NSwgMTM5NDksIDEzOTUzLCAxMzk1NywgCisgICAgMTM5NjEsIDEzOTY1LCAxMzk2OSwgMTM5NzMsIDEzOTc3LCAxMzk4MSwgMTM5ODUsIDEzOTg5LCAxMzk5MywgMTM5OTcsIAorICAgIDE0MDAxLCAxNDAwNSwgMCwgMTQwMDgsIDE0MDExLCAxNDAxNSwgMTQwMTksIDE0MDIzLCAxNDAyNiwgMTQwMjksIDAsIAorICAgIDE0MDMyLCAxNDAzNiwgMCwgMTQwNDAsIDE0MDQ0LCAxNDA0OCwgMTQwNTIsIDE0MDU1LCAwLCAwLCAxNDA1OCwgMTQwNjIsIAorICAgIDE0MDY2LCAxNDA3MSwgMTQwNzUsIDE0MDgwLCAxNDA4NCwgMTQwODksIDE0MDk0LCAwLCAwLCAxNDEwMCwgMTQxMDQsIDAsIAorICAgIDAsIDE0MTA5LCAxNDExMywgMTQxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTIyLCAxNDEyOCwgMCwgMCwgMCwgMCwgCisgICAgMTQxMzQsIDE0MTM4LCAwLCAxNDE0MiwgMTQxNDYsIDE0MTUxLCAxNDE1NiwgMTQxNjEsIDAsIDAsIDE0MTY3LCAxNDE3MSwgCisgICAgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgMTQyMDEsIAorICAgIDE0MjA1LCAxNDIxMSwgMTQyMTcsIDE0MjIzLCAxNDIyOSwgMTQyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE0MjQxLCAxNDI0NSwgMCwgMTQyNDksIDE0MjUyLCAxNDI1NiwgMTQyNTksIDE0MjYzLCAxNDI2NiwgMCwgMCwgMCwgCisgICAgMTQyNzAsIDE0MjczLCAxNDI3NywgMCwgMTQyODEsIDE0Mjg0LCAxNDI4OCwgMTQyOTIsIDAsIDAsIDAsIDE0Mjk1LCAKKyAgICAxNDI5OSwgMCwgMTQzMDMsIDAsIDE0MzA3LCAxNDMxMSwgMCwgMCwgMCwgMTQzMTUsIDE0MzE5LCAwLCAwLCAwLCAxNDMyMywgCisgICAgMTQzMjYsIDE0MzMwLCAwLCAwLCAwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MiwgMTQzNDYsIDE0MzUwLCAxNDM1NCwgCisgICAgMTQzNTgsIDE0MzYyLCAxNDM2NiwgMTQzNzAsIDE0MzczLCAwLCAwLCAwLCAwLCAxNDM3NiwgMTQzODEsIDE0Mzg1LCAKKyAgICAxNDM5MCwgMTQzOTQsIDAsIDAsIDAsIDE0Mzk5LCAxNDQwMywgMTQ0MDgsIDAsIDE0NDEzLCAxNDQxNywgMTQ0MjIsIAorICAgIDE0NDI3LCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE0NDQwLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAxNDQ2MiwgCisgICAgMTQ0NjUsIDE0NDY4LCAxNDQ3MSwgMTQ0NzUsIDE0NDgwLCAxNDQ4NSwgMTQ0ODksIDE0NDkzLCAxNDQ5NywgMTQ1MDEsIAorICAgIDE0NTA1LCAxNDUxMCwgMTQ1MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NTE3LCAxNDUyMSwgMTQ1MjUsIDAsIDE0NTI5LCAKKyAgICAxNDUzMiwgMTQ1MzYsIDE0NTM5LCAxNDU0MywgMTQ1NDYsIDE0NTUwLCAxNDU1NCwgMCwgMTQ1NTgsIDE0NTYxLCAxNDU2NSwgCisgICAgMCwgMTQ1NjksIDE0NTcyLCAxNDU3NiwgMTQ1ODAsIDE0NTgzLCAxNDU4NywgMTQ1OTEsIDE0NTk1LCAxNDU5OSwgMTQ2MDMsIAorICAgIDE0NjA3LCAxNDYxMSwgMTQ2MTUsIDE0NjE5LCAxNDYyMywgMTQ2MjcsIDE0NjMxLCAxNDYzNSwgMTQ2MzksIDE0NjQzLCAKKyAgICAxNDY0NywgMTQ2NTEsIDE0NjU1LCAwLCAxNDY1OCwgMTQ2NjEsIDE0NjY1LCAxNDY2OSwgMTQ2NzMsIDE0Njc2LCAxNDY3OSwgCisgICAgMTQ2ODIsIDE0Njg2LCAxNDY5MCwgMCwgMTQ2OTQsIDE0Njk4LCAxNDcwMiwgMTQ3MDYsIDE0NzA5LCAwLCAwLCAwLCAKKyAgICAxNDcxMiwgMTQ3MTYsIDE0NzIxLCAxNDcyNSwgMTQ3MzAsIDE0NzM0LCAxNDczOSwgMTQ3NDQsIDAsIDE0NzUwLCAxNDc1NCwgCisgICAgMTQ3NTksIDAsIDE0NzY0LCAxNDc2OCwgMTQ3NzMsIDE0Nzc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc4MiwgMTQ3ODYsIAorICAgIDAsIDE0NzkyLCAxNDc5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4MDAsIDE0ODA1LCAxNDgxMCwgMTQ4MTUsIDAsIDAsIAorICAgIDE0ODIxLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDE0ODQ5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDg1MiwgMTQ4NjUsIDE0ODc3LCAxNDg4OSwgMTQ5MDEsIDE0OTEzLCAxNDkyNSwgCisgICAgMTQ5MzcsIDAsIDAsIDE0OTQxLCAxNDk0NSwgMCwgMTQ5NDksIDE0OTUyLCAxNDk1NiwgMTQ5NTksIDE0OTYzLCAxNDk2NiwgCisgICAgMTQ5NzAsIDE0OTc0LCAwLCAxNDk3OCwgMTQ5ODEsIDE0OTg1LCAwLCAxNDk4OSwgMTQ5OTIsIDE0OTk2LCAxNTAwMCwgCisgICAgMTUwMDMsIDE1MDA3LCAxNTAxMSwgMTUwMTUsIDE1MDE5LCAxNTAyMywgMTUwMjcsIDE1MDMxLCAxNTAzNSwgMTUwMzksIAorICAgIDE1MDQzLCAxNTA0NywgMTUwNTEsIDE1MDU1LCAxNTA1OSwgMTUwNjMsIDE1MDY3LCAxNTA3MSwgMTUwNzUsIDAsIDE1MDc4LCAKKyAgICAxNTA4MSwgMTUwODUsIDE1MDg5LCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMiwgMTUxMDYsIDE1MTEwLCAwLCAxNTExNCwgCisgICAgMTUxMTgsIDE1MTIyLCAxNTEyNiwgMTUxMjksIDAsIDAsIDE1MTMyLCAxNTEzNiwgMTUxNDAsIDE1MTQ1LCAxNTE0OSwgCisgICAgMTUxNTQsIDE1MTU4LCAxNTE2MywgMTUxNjgsIDAsIDE1MTc0LCAxNTE3OCwgMTUxODMsIDAsIDE1MTg4LCAxNTE5MiwgCisgICAgMTUxOTcsIDE1MjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIwNiwgMTUyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE1MjE2LCAwLCAxNTIyMCwgMTUyMjUsIDE1MjMwLCAxNTIzNSwgMCwgMCwgMTUyNDEsIDE1MjQ1LCAxNTI0OCwgMTUyNTEsIAorICAgIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMTUyNjksIDAsIDE1MjcyLCAxNTI3NiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyODAsIDE1Mjg0LCAwLCAxNTI4OCwgMTUyOTEsIDE1Mjk1LCAKKyAgICAxNTI5OCwgMTUzMDIsIDE1MzA1LCAxNTMwOSwgMTUzMTMsIDAsIDE1MzE3LCAxNTMyMCwgMTUzMjQsIDAsIDE1MzI4LCAKKyAgICAxNTMzMSwgMTUzMzUsIDE1MzM5LCAxNTM0MiwgMTUzNDYsIDE1MzUwLCAxNTM1NCwgMTUzNTgsIDE1MzYyLCAxNTM2NiwgCisgICAgMTUzNzAsIDE1Mzc0LCAxNTM3OCwgMTUzODIsIDE1Mzg2LCAxNTM5MCwgMTUzOTQsIDE1Mzk4LCAxNTQwMiwgMTU0MDYsIAorICAgIDE1NDEwLCAxNTQxNCwgMTU0MTcsIDE1NDIxLCAxNTQyNCwgMTU0MjgsIDE1NDMyLCAxNTQzNiwgMTU0MzksIDE1NDQyLCAKKyAgICAxNTQ0NSwgMTU0NDksIDE1NDUzLCAxNTQ1NywgMTU0NjEsIDE1NDY1LCAxNTQ2OSwgMTU0NzMsIDE1NDc2LCAxNTQ3OSwgMCwgCisgICAgMCwgMTU0ODMsIDE1NDg3LCAxNTQ5MiwgMTU0OTYsIDE1NTAxLCAxNTUwNSwgMTU1MTAsIDE1NTE1LCAwLCAxNTUyMSwgCisgICAgMTU1MjUsIDE1NTMwLCAwLCAxNTUzNSwgMTU1MzksIDE1NTQ0LCAxNTU0OSwgMTU1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE1NTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2NCwgMTU1NjksIDE1NTc0LCAxNTU3OSwgMCwgMCwgCisgICAgMTU1ODUsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgMTU2MTMsIAorICAgIDE1NjE2LCAxNTYyMCwgMTU2MjUsIDE1NjMwLCAxNTYzNiwgMTU2NDIsIDAsIDAsIDAsIDE1NjQ4LCAxNTY1MiwgMTU2NTgsIAorICAgIDE1NjY0LCAxNTY3MCwgMTU2NzUsIDE1NjgxLCAwLCAwLCAxNTY4NywgMTU2OTEsIDAsIDE1Njk1LCAxNTY5OSwgMTU3MDMsIAorICAgIDE1NzA3LCAxNTcxMSwgMTU3MTUsIDE1NzE5LCAxNTcyMywgMTU3MjcsIDE1NzMxLCAxNTczNSwgMTU3MzksIDE1NzQzLCAKKyAgICAxNTc0NywgMTU3NTEsIDE1NzU1LCAxNTc1OSwgMTU3NjMsIDAsIDAsIDAsIDE1NzY3LCAxNTc3MywgMTU3NzksIDE1Nzg1LCAKKyAgICAxNTc5MSwgMTU3OTcsIDE1ODAzLCAxNTgwOSwgMTU4MTUsIDE1ODIxLCAxNTgyNywgMTU4MzMsIDE1ODQxLCAxNTg0NywgCisgICAgMTU4NTMsIDE1ODU5LCAxNTg2NSwgMTU4NzEsIDE1ODc3LCAxNTg4MywgMTU4ODksIDE1ODk1LCAxNTkwMSwgMTU5MDcsIDAsIAorICAgIDE1OTEzLCAxNTkxOSwgMTU5MjUsIDE1OTMxLCAxNTkzNywgMTU5NDMsIDE1OTQ3LCAxNTk1MywgMTU5NTcsIDAsIDE1OTYxLCAKKyAgICAwLCAwLCAxNTk2NywgMTU5NzEsIDE1OTc3LCAxNTk4MywgMTU5ODksIDE1OTkzLCAxNTk5OSwgMCwgMCwgMCwgMTYwMDMsIDAsIAorICAgIDAsIDAsIDAsIDE2MDA3LCAxNjAxMiwgMTYwMTksIDE2MDI2LCAxNjAzMywgMTYwNDAsIDAsIDE2MDQ3LCAwLCAxNjA1NCwgCisgICAgMTYwNTksIDE2MDY0LCAxNjA3MSwgMTYwNzgsIDE2MDg3LCAxNjA5OCwgMTYxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTEyLCAxNjExOSwgMTYxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE2MTMxLCAxNjEzNywgMTYxNDMsIDE2MTQ5LCAxNjE1NSwgMTYxNjEsIDE2MTY3LCAxNjE3MywgCisgICAgMTYxNzksIDE2MTg1LCAxNjE5MSwgMTYxOTcsIDE2MjAzLCAxNjIwOSwgMTYyMTUsIDE2MjIxLCAxNjIyNywgMTYyMzMsIAorICAgIDE2MjM5LCAxNjI0NSwgMTYyNTEsIDE2MjU3LCAxNjI2MywgMTYyNjksIDE2Mjc1LCAxNjI4MSwgMTYyODcsIDE2MjkzLCAKKyAgICAxNjI5OSwgMTYzMDUsIDE2MzExLCAxNjMxNywgMTYzMjMsIDE2MzI4LCAxNjMzNCwgMTYzNDAsIDE2MzQ0LCAxNjM1MCwgCisgICAgMTYzNTQsIDE2MzYwLCAxNjM2NiwgMTYzNzIsIDE2Mzc4LCAxNjM4NCwgMTYzOTAsIDE2Mzk1LCAxNjQwMSwgMTY0MDUsIAorICAgIDE2NDEwLCAxNjQxNiwgMTY0MjIsIDE2NDI4LCAxNjQzMywgMTY0MzksIDE2NDQ1LCAxNjQ1MSwgMTY0NTYsIDE2NDYyLCAwLCAKKyAgICAwLCAwLCAwLCAxNjQ2NiwgMTY0NzIsIDE2NDc3LCAxNjQ4MywgMTY0ODgsIDE2NDk2LCAxNjUwNCwgMTY1MDgsIDE2NTEyLCAKKyAgICAxNjUxNiwgMTY1MjIsIDE2NTI4LCAxNjUzNCwgMTY1NDAsIDE2NTQ0LCAxNjU0OCwgMTY1NTIsIDE2NTU2LCAxNjU2MCwgCisgICAgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4NywgMTY1OTEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTkyLCAxNjU5NywgMCwgMTY2MDQsIDAsIDAsIDE2NjExLCAKLSAgICAxNjYxNiwgMCwgMTY2MjEsIDAsIDAsIDE2NjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjYzMywgMTY2MzgsIDE2NjQyLCAKLSAgICAxNjY0OSwgMCwgMTY2NTYsIDE2NjYxLCAxNjY2NiwgMTY2NzEsIDE2Njc4LCAxNjY4NSwgMTY2OTIsIDAsIDE2Njk5LCAKLSAgICAxNjcwNCwgMTY3MDksIDAsIDE2NzE2LCAwLCAxNjcyMywgMCwgMCwgMTY3MjgsIDE2NzM1LCAwLCAxNjc0MiwgMTY3NDYsIAotICAgIDE2NzUzLCAxNjc1NywgMTY3NjIsIDE2NzcwLCAxNjc3NiwgMTY3ODIsIDE2Nzg3LCAxNjc5MywgMTY3OTksIDE2ODA1LCAKLSAgICAxNjgxMCwgMCwgMTY4MTYsIDE2ODI0LCAxNjgzMSwgMCwgMCwgMTY4MzgsIDE2ODQzLCAxNjg0OSwgMTY4NTQsIDE2ODYwLCAKLSAgICAwLCAxNjg2NiwgMCwgMTY4NzIsIDE2ODc5LCAxNjg4NiwgMTY4OTMsIDE2OTAwLCAxNjkwNSwgMCwgMCwgMTY5MDksIAotICAgIDE2OTE0LCAxNjkxOCwgMTY5MjIsIDE2OTI2LCAxNjkzMCwgMTY5MzQsIDE2OTM4LCAxNjk0MiwgMTY5NDYsIDAsIDAsIAotICAgIDE2OTUwLCAxNjk1NiwgMTY5NjIsIDE2OTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjk3NiwgMTY5ODAsIDE2OTkxLCAKLSAgICAxNzAwNiwgMTcwMjEsIDE3MDMxLCAxNzA0MiwgMTcwNTUsIDE3MDY2LCAxNzA3MiwgMTcwODAsIDE3MDkwLCAxNzA5NiwgCi0gICAgMTcxMDQsIDE3MTA4LCAxNzExNCwgMTcxMjAsIDE3MTI4LCAxNzEzOCwgMTcxNDYsIDE3MTU5LCAxNzE2NSwgMTcxNzMsIAotICAgIDE3MTgxLCAxNzE5MywgMTcyMDAsIDE3MjA4LCAxNzIxNiwgMTcyMjQsIDE3MjMyLCAxNzI0MCwgMTcyNDgsIDE3MjU4LCAKLSAgICAxNzI2MiwgMTcyNjUsIDE3MjY4LCAxNzI3MSwgMTcyNzQsIDE3Mjc3LCAxNzI4MCwgMTcyODMsIDE3Mjg2LCAxNzI4OSwgCi0gICAgMTcyOTMsIDE3Mjk3LCAxNzMwMSwgMTczMDUsIDE3MzA5LCAxNzMxMywgMTczMTcsIDE3MzIxLCAxNzMyNSwgMTczMzAsIAotICAgIDE3MzM2LCAxNzM0NiwgMTczNjAsIDE3MzcwLCAxNzM3NiwgMTczODIsIDE3MzkwLCAxNzM5OCwgMTc0MDYsIDE3NDE0LCAKLSAgICAxNzQyMCwgMTc0MjYsIDE3NDI5LCAxNzQzMywgMTc0MzcsIDE3NDQxLCAxNzQ0NSwgMTc0NDksIDE3NDUzLCAwLCAxNzQ1NywgCi0gICAgMTc0NjEsIDE3NDY1LCAxNzQ2OSwgMTc0NzMsIDE3NDc3LCAxNzQ4MSwgMTc0ODUsIDE3NDg5LCAxNzQ5MywgMTc0OTcsIAotICAgIDE3NTAwLCAxNzUwMywgMTc1MDcsIDE3NTExLCAxNzUxNSwgMTc1MTgsIDE3NTIyLCAxNzUyNiwgMTc1MzAsIDE3NTM0LCAKLSAgICAxNzUzOCwgMTc1NDIsIDE3NTQ2LCAxNzU1MCwgMTc1NTMsIDE3NTU2LCAxNzU2MCwgMTc1NjQsIDE3NTY4LCAxNzU3MSwgCi0gICAgMTc1NzQsIDE3NTc3LCAxNzU4MSwgMTc1ODYsIDE3NTkwLCAwLCAwLCAwLCAwLCAxNzU5NCwgMTc1OTksIDE3NjAzLCAKLSAgICAxNzYwOCwgMTc2MTIsIDE3NjE3LCAxNzYyMiwgMTc2MjgsIDE3NjMzLCAxNzYzOSwgMTc2NDMsIDE3NjQ4LCAxNzY1MiwgCi0gICAgMTc2NTcsIDE3NjY3LCAxNzY3MywgMTc2NzksIDE3Njg2LCAxNzY5NiwgMTc3MDIsIDE3NzA2LCAxNzcxMCwgMTc3MTYsIAotICAgIDE3NzIyLCAxNzczMCwgMTc3MzYsIDE3NzQ0LCAxNzc1MiwgMTc3NjAsIDE3NzcwLCAxNzc3OCwgMTc3ODgsIDE3NzkzLCAKLSAgICAxNzc5OSwgMTc4MDUsIDE3ODExLCAxNzgxNywgMTc4MjMsIDE3ODI5LCAwLCAxNzgzNSwgMTc4NDEsIDE3ODQ3LCAxNzg1MywgCi0gICAgMTc4NTksIDE3ODY1LCAxNzg3MSwgMTc4NzcsIDE3ODgzLCAxNzg4OSwgMTc4OTUsIDE3OTAwLCAxNzkwNSwgMTc5MTEsIAotICAgIDE3OTE3LCAxNzkyMywgMTc5MjgsIDE3OTM0LCAxNzk0MCwgMTc5NDYsIDE3OTUyLCAxNzk1OCwgMTc5NjQsIDE3OTcwLCAKLSAgICAxNzk3NiwgMTc5ODEsIDE3OTg2LCAxNzk5MiwgMTc5OTgsIDE4MDA0LCAxODAwOSwgMTgwMTQsIDE4MDE5LCAxODAyNSwgCi0gICAgMTgwMzMsIDE4MDQwLCAwLCAxODA0NywgMTgwNTQsIDE4MDY3LCAxODA3NCwgMTgwODEsIDE4MDg5LCAxODA5NywgMTgxMDMsIAotICAgIDE4MTA5LCAxODExNSwgMTgxMjUsIDE4MTMwLCAxODEzNiwgMTgxNDYsIDE4MTU2LCAwLCAxODE2NiwgMTgxNzYsIDE4MTg0LCAKLSAgICAxODE5NiwgMTgyMDgsIDE4MjE0LCAxODIyOCwgMTgyNDMsIDE4MjQ4LCAxODI1MywgMTgyNjEsIDE4MjY5LCAxODI3NywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY1OTUsIDE2NjAwLCAwLCAxNjYwNywgMCwgMCwgMTY2MTQsIAorICAgIDE2NjE5LCAwLCAxNjYyNCwgMCwgMCwgMTY2MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NjM2LCAxNjY0MSwgMTY2NDUsIAorICAgIDE2NjUyLCAwLCAxNjY1OSwgMTY2NjQsIDE2NjY5LCAxNjY3NCwgMTY2ODEsIDE2Njg4LCAxNjY5NSwgMCwgMTY3MDIsIAorICAgIDE2NzA3LCAxNjcxMiwgMCwgMTY3MTksIDAsIDE2NzI2LCAwLCAwLCAxNjczMSwgMTY3MzgsIDAsIDE2NzQ1LCAxNjc0OSwgCisgICAgMTY3NTYsIDE2NzYwLCAxNjc2NSwgMTY3NzMsIDE2Nzc5LCAxNjc4NSwgMTY3OTAsIDE2Nzk2LCAxNjgwMiwgMTY4MDgsIAorICAgIDE2ODEzLCAwLCAxNjgxOSwgMTY4MjcsIDE2ODM0LCAwLCAwLCAxNjg0MSwgMTY4NDYsIDE2ODUyLCAxNjg1NywgMTY4NjMsIAorICAgIDAsIDE2ODY5LCAwLCAxNjg3NSwgMTY4ODIsIDE2ODg5LCAxNjg5NiwgMTY5MDMsIDE2OTA4LCAwLCAwLCAxNjkxMiwgCisgICAgMTY5MTcsIDE2OTIxLCAxNjkyNSwgMTY5MjksIDE2OTMzLCAxNjkzNywgMTY5NDEsIDE2OTQ1LCAxNjk0OSwgMCwgMCwgCisgICAgMTY5NTMsIDE2OTU5LCAxNjk2NSwgMTY5NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OTc5LCAxNjk4MywgMTY5OTQsIAorICAgIDE3MDA5LCAxNzAyNCwgMTcwMzQsIDE3MDQ1LCAxNzA1OCwgMTcwNjksIDE3MDc1LCAxNzA4MywgMTcwOTMsIDE3MDk5LCAKKyAgICAxNzEwNywgMTcxMTEsIDE3MTE3LCAxNzEyMywgMTcxMzEsIDE3MTQxLCAxNzE0OSwgMTcxNjIsIDE3MTY4LCAxNzE3NiwgCisgICAgMTcxODQsIDE3MTk2LCAxNzIwMywgMTcyMTEsIDE3MjE5LCAxNzIyNywgMTcyMzUsIDE3MjQzLCAxNzI1MSwgMTcyNjEsIAorICAgIDE3MjY1LCAxNzI2OCwgMTcyNzEsIDE3Mjc0LCAxNzI3NywgMTcyODAsIDE3MjgzLCAxNzI4NiwgMTcyODksIDE3MjkyLCAKKyAgICAxNzI5NiwgMTczMDAsIDE3MzA0LCAxNzMwOCwgMTczMTIsIDE3MzE2LCAxNzMyMCwgMTczMjQsIDE3MzI4LCAxNzMzMywgCisgICAgMTczMzksIDE3MzQ5LCAxNzM2MywgMTczNzMsIDE3Mzc5LCAxNzM4NSwgMTczOTMsIDE3NDAxLCAxNzQwOSwgMTc0MTcsIAorICAgIDE3NDIzLCAxNzQyOSwgMTc0MzIsIDE3NDM2LCAxNzQ0MCwgMTc0NDQsIDE3NDQ4LCAxNzQ1MiwgMTc0NTYsIDAsIDE3NDYwLCAKKyAgICAxNzQ2NCwgMTc0NjgsIDE3NDcyLCAxNzQ3NiwgMTc0ODAsIDE3NDg0LCAxNzQ4OCwgMTc0OTIsIDE3NDk2LCAxNzUwMCwgCisgICAgMTc1MDMsIDE3NTA2LCAxNzUxMCwgMTc1MTQsIDE3NTE4LCAxNzUyMSwgMTc1MjUsIDE3NTI5LCAxNzUzMywgMTc1MzcsIAorICAgIDE3NTQxLCAxNzU0NSwgMTc1NDksIDE3NTUzLCAxNzU1NiwgMTc1NTksIDE3NTYzLCAxNzU2NywgMTc1NzEsIDE3NTc0LCAKKyAgICAxNzU3NywgMTc1ODAsIDE3NTg0LCAxNzU4OSwgMTc1OTMsIDAsIDAsIDAsIDAsIDE3NTk3LCAxNzYwMiwgMTc2MDYsIAorICAgIDE3NjExLCAxNzYxNSwgMTc2MjAsIDE3NjI1LCAxNzYzMSwgMTc2MzYsIDE3NjQyLCAxNzY0NiwgMTc2NTEsIDE3NjU1LCAKKyAgICAxNzY2MCwgMTc2NzAsIDE3Njc2LCAxNzY4MiwgMTc2ODksIDE3Njk5LCAxNzcwNSwgMTc3MDksIDE3NzEzLCAxNzcxOSwgCisgICAgMTc3MjUsIDE3NzMzLCAxNzczOSwgMTc3NDcsIDE3NzU1LCAxNzc2MywgMTc3NzMsIDE3NzgxLCAxNzc5MSwgMTc3OTYsIAorICAgIDE3ODAyLCAxNzgwOCwgMTc4MTQsIDE3ODIwLCAxNzgyNiwgMTc4MzIsIDAsIDE3ODM4LCAxNzg0NCwgMTc4NTAsIDE3ODU2LCAKKyAgICAxNzg2MiwgMTc4NjgsIDE3ODc0LCAxNzg4MCwgMTc4ODYsIDE3ODkyLCAxNzg5OCwgMTc5MDMsIDE3OTA4LCAxNzkxNCwgCisgICAgMTc5MjAsIDE3OTI2LCAxNzkzMSwgMTc5MzcsIDE3OTQzLCAxNzk0OSwgMTc5NTUsIDE3OTYxLCAxNzk2NywgMTc5NzMsIAorICAgIDE3OTc5LCAxNzk4NCwgMTc5ODksIDE3OTk1LCAxODAwMSwgMTgwMDcsIDE4MDEyLCAxODAxNywgMTgwMjIsIDE4MDI4LCAKKyAgICAxODAzNiwgMTgwNDMsIDAsIDE4MDUwLCAxODA1NywgMTgwNzAsIDE4MDc3LCAxODA4NCwgMTgwOTIsIDE4MTAwLCAxODEwNiwgCisgICAgMTgxMTIsIDE4MTE4LCAxODEyOCwgMTgxMzMsIDE4MTM5LCAxODE0OSwgMTgxNTksIDAsIDE4MTY5LCAxODE3OSwgMTgxODcsIAorICAgIDE4MTk5LCAxODIxMSwgMTgyMTcsIDE4MjMxLCAxODI0NiwgMTgyNTEsIDE4MjU2LCAxODI2NCwgMTgyNzIsIDE4MjgwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI4NSwgMTgyODgsIDE4MjkyLCAxODI5NiwgMTgzMDAsIAotICAgIDE4MzA0LCAxODMwOCwgMTgzMTIsIDE4MzE2LCAxODMyMCwgMTgzMjQsIDE4MzI4LCAxODMzMiwgMTgzMzYsIDE4MzQwLCAKLSAgICAxODM0NCwgMTgzNDgsIDE4MzUyLCAxODM1NiwgMTgzNjAsIDE4MzY0LCAxODM2NywgMTgzNzAsIDE4Mzc0LCAxODM3OCwgCi0gICAgMTgzODIsIDE4Mzg1LCAxODM4OCwgMTgzOTEsIDE4Mzk1LCAxODM5OSwgMTg0MDIsIDE4NDA1LCAxODQwOSwgMTg0MTIsIAotICAgIDE4NDE3LCAxODQyMCwgMTg0MjQsIDE4NDI3LCAxODQzMSwgMTg0MzQsIDE4NDM5LCAxODQ0MiwgMTg0NDYsIDE4NDUzLCAKLSAgICAxODQ1OCwgMTg0NjIsIDE4NDY3LCAxODQ3MSwgMTg0NzYsIDE4NDgwLCAxODQ4NSwgMTg0OTIsIDE4NDk4LCAxODUwMywgCi0gICAgMTg1MDcsIDE4NTExLCAxODUxNSwgMTg1MTksIDE4NTIzLCAxODUyOCwgMTg1MzMsIDE4NTM5LCAxODU0NCwgMTg1NDksIAotICAgIDE4NTUzLCAxODU1NiwgMTg1NTksIDE4NTYyLCAxODU2NSwgMTg1NjgsIDE4NTcxLCAxODU3NCwgMTg1NzcsIDE4NTgwLCAKLSAgICAxODU4NiwgMTg1OTAsIDE4NTk0LCAxODU5OCwgMTg2MDIsIDE4NjA2LCAxODYxMCwgMTg2MTQsIDE4NjE4LCAxODYyMywgCi0gICAgMTg2MjcsIDE4NjMyLCAxODYzNywgMTg2NDMsIDE4NjQ4LCAxODY1NCwgMTg2NjAsIDE4NjY2LCAxODY3MiwgMTg2NzgsIAotICAgIDE4Njg1LCAxODY5MiwgMTg3MDAsIDE4NzA4LCAxODcxNywgMTg3MjYsIDE4NzM3LCAxODc0NywgMTg3NTcsIDE4NzY4LCAKLSAgICAxODc3OSwgMTg3ODksIDE4Nzk5LCAxODgwOSwgMTg4MTksIDE4ODI5LCAxODgzOSwgMTg4NDksIDE4ODU5LCAxODg2NywgCi0gICAgMTg4NzQsIDE4ODgwLCAxODg4NywgMTg4OTIsIDE4ODk4LCAxODkwNCwgMTg5MTAsIDE4OTE2LCAxODkyMiwgMTg5MjgsIAotICAgIDE4OTMzLCAxODkzOSwgMTg5NDUsIDE4OTUxLCAxODk1NywgMTg5NjIsIDE4OTcwLCAxODk3NywgMTg5ODMsIDE4OTkwLCAKLSAgICAxODk5OCwgMTkwMDQsIDE5MDEwLCAxOTAxNiwgMTkwMjIsIDE5MDMwLCAxOTAzOCwgMTkwNDgsIDE5MDU2LCAxOTA2NCwgCi0gICAgMTkwNzAsIDE5MDc1LCAxOTA4MCwgMTkwODUsIDE5MDkwLCAxOTA5NSwgMTkxMDAsIDE5MTA1LCAxOTExMCwgMTkxMTUsIAotICAgIDE5MTIxLCAxOTEyNywgMTkxMzMsIDE5MTQwLCAxOTE0NSwgMTkxNTEsIDE5MTU2LCAxOTE2MSwgMTkxNjYsIDE5MTcxLCAKLSAgICAxOTE3NiwgMTkxODEsIDE5MTg2LCAxOTE5MSwgMTkxOTYsIDE5MjAxLCAxOTIwNiwgMTkyMTEsIDE5MjE2LCAxOTIyMSwgCi0gICAgMTkyMjYsIDE5MjMxLCAxOTIzNiwgMTkyNDEsIDE5MjQ2LCAxOTI1MSwgMTkyNTYsIDE5MjYxLCAxOTI2NiwgMTkyNzEsIAotICAgIDE5Mjc2LCAxOTI4MSwgMTkyODYsIDE5MjkxLCAxOTI5NiwgMTkzMDEsIDE5MzA2LCAxOTMxMSwgMTkzMTYsIDE5MzIxLCAKLSAgICAxOTMyNiwgMTkzMzEsIDE5MzM2LCAwLCAxOTM0MSwgMCwgMCwgMCwgMCwgMCwgMTkzNDYsIDAsIDAsIDE5MzUxLCAxOTM1NSwgCi0gICAgMTkzNTksIDE5MzYzLCAxOTM2NywgMTkzNzEsIDE5Mzc1LCAxOTM3OSwgMTkzODMsIDE5Mzg3LCAxOTM5MSwgMTkzOTUsIAotICAgIDE5Mzk5LCAxOTQwMywgMTk0MDcsIDE5NDExLCAxOTQxNSwgMTk0MTksIDE5NDIzLCAxOTQyNywgMTk0MzEsIDE5NDM1LCAKLSAgICAxOTQzOSwgMTk0NDMsIDE5NDQ3LCAxOTQ1MSwgMTk0NTUsIDE5NDU5LCAxOTQ2MywgMTk0NjcsIDE5NDcxLCAxOTQ3NSwgCi0gICAgMTk0NzksIDE5NDgzLCAxOTQ4NywgMTk0OTEsIDE5NDk1LCAxOTQ5OSwgMTk1MDMsIDE5NTA3LCAxOTUxMSwgMTk1MTUsIAotICAgIDE5NTIxLCAxOTUyNSwgMTk1MzAsIDE5NTM1LCAxOTUzOSwgMTk1NDQsIDE5NTQ5LCAxOTU1MywgMTk1NTcsIDE5NTYxLCAKLSAgICAxOTU2NSwgMTk1NjksIDE5NTczLCAxOTU3NywgMTk1ODEsIDE5NTg1LCAxOTU4OSwgMTk1OTMsIDE5NTk3LCAxOTYwMSwgCi0gICAgMTk2MDUsIDE5NjA5LCAxOTYxMywgMTk2MTcsIDE5NjIxLCAxOTYyNSwgMTk2MjksIDE5NjMzLCAxOTYzNywgMTk2NDEsIAotICAgIDE5NjQ1LCAxOTY0OSwgMTk2NTMsIDE5NjU3LCAxOTY2MSwgMTk2NjUsIDE5NjY5LCAxOTY3MywgMTk2NzcsIDE5NjgxLCAKLSAgICAxOTY4NSwgMTk2ODksIDE5NjkzLCAxOTY5NywgMTk3MDEsIDE5NzA1LCAxOTcwOSwgMTk3MTMsIDE5NzE3LCAxOTcyMSwgCi0gICAgMTk3MjUsIDE5NzI5LCAxOTczMywgMTk3MzcsIDE5NzQxLCAxOTc0NSwgMTk3NDksIDE5NzUzLCAxOTc1NywgMTk3NjEsIAotICAgIDE5NzY1LCAxOTc2OSwgMTk3NzMsIDE5Nzc3LCAxOTc4MSwgMTk3ODUsIDE5Nzg5LCAxOTc5MywgMTk3OTcsIDE5ODAxLCAKLSAgICAxOTgwNSwgMTk4MDksIDE5ODEzLCAxOTgxNywgMTk4MjEsIDE5ODI1LCAxOTgyOSwgMTk4MzMsIDE5ODM3LCAxOTg0MSwgCi0gICAgMTk4NDUsIDE5ODQ5LCAxOTg1MywgMTk4NTcsIDE5ODYxLCAxOTg2NSwgMTk4NjksIDE5ODczLCAxOTg3NywgMTk4ODEsIAotICAgIDE5ODg1LCAxOTg4OSwgMTk4OTMsIDE5ODk3LCAxOTkwMSwgMTk5MDUsIDE5OTA5LCAxOTkxMywgMTk5MTcsIDE5OTIxLCAKLSAgICAxOTkyNSwgMTk5MjksIDE5OTMzLCAxOTkzNywgMTk5NDAsIDE5OTQ0LCAxOTk0NywgMTk5NTEsIDE5OTU1LCAxOTk1OCwgCi0gICAgMTk5NjIsIDE5OTY2LCAxOTk2OSwgMTk5NzMsIDE5OTc3LCAxOTk4MSwgMTk5ODUsIDE5OTg4LCAxOTk5MiwgMTk5OTYsIAotICAgIDIwMDAwLCAyMDAwNCwgMjAwMDgsIDIwMDEyLCAyMDAxNSwgMjAwMTksIDIwMDIzLCAyMDAyNywgMjAwMzEsIDIwMDM1LCAKLSAgICAyMDAzOSwgMjAwNDMsIDIwMDQ3LCAyMDA1MSwgMjAwNTUsIDIwMDU5LCAyMDA2MywgMjAwNjcsIDIwMDcxLCAyMDA3NSwgCi0gICAgMjAwNzksIDIwMDgzLCAyMDA4NywgMjAwOTEsIDIwMDk1LCAyMDA5OSwgMjAxMDMsIDIwMTA3LCAyMDExMSwgMjAxMTUsIAotICAgIDIwMTE5LCAyMDEyMywgMjAxMjcsIDIwMTMxLCAyMDEzNSwgMjAxMzksIDIwMTQzLCAyMDE0NywgMjAxNTEsIDIwMTU1LCAKLSAgICAyMDE1OSwgMjAxNjMsIDIwMTY3LCAyMDE3MSwgMjAxNzUsIDIwMTc5LCAyMDE4MywgMjAxODcsIDIwMTkxLCAyMDE5NSwgCi0gICAgMjAxOTksIDIwMjAzLCAyMDIwNywgMjAyMTEsIDIwMjE1LCAyMDIxOSwgMjAyMjMsIDIwMjI3LCAyMDIzMSwgMjAyMzUsIAotICAgIDIwMjM5LCAyMDI0MywgMjAyNDcsIDIwMjUxLCAyMDI1NSwgMjAyNTksIDIwMjYzLCAyMDI2NywgMjAyNzEsIDIwMjc1LCAKLSAgICAyMDI3OSwgMjAyODMsIDIwMjg3LCAyMDI5MSwgMjAyOTUsIDIwMjk5LCAyMDMwMywgMjAzMDcsIDIwMzExLCAyMDMxNSwgCi0gICAgMjAzMTksIDIwMzIzLCAyMDMyNywgMjAzMzEsIDIwMzM1LCAyMDMzOSwgMjAzNDMsIDIwMzQ3LCAyMDM1MSwgMjAzNTUsIAotICAgIDIwMzU5LCAyMDM2MywgMjAzNjcsIDIwMzcxLCAyMDM3NSwgMjAzNzksIDIwMzgzLCAyMDM4NywgMjAzOTEsIDIwMzk1LCAKLSAgICAyMDM5OSwgMjA0MDMsIDIwNDA3LCAyMDQxMSwgMjA0MTUsIDIwNDE5LCAyMDQyMywgMjA0MjcsIDIwNDMxLCAyMDQzNSwgCi0gICAgMjA0MzksIDIwNDQzLCAyMDQ0NywgMjA0NTEsIDIwNDU1LCAyMDQ1OSwgMjA0NjMsIDIwNDY3LCAyMDQ3MSwgMjA0NzUsIAotICAgIDIwNDc5LCAyMDQ4MywgMjA0ODcsIDIwNDkxLCAyMDQ5NSwgMjA0OTksIDIwNTAzLCAyMDUwNywgMjA1MTEsIDIwNTE1LCAKLSAgICAyMDUxOSwgMjA1MjMsIDIwNTI3LCAyMDUzMSwgMjA1MzUsIDIwNTM5LCAyMDU0MywgMjA1NDcsIDIwNTUxLCAyMDU1NSwgCi0gICAgMjA1NTksIDIwNTYzLCAyMDU2NywgMjA1NzAsIDIwNTc0LCAyMDU3OCwgMjA1ODIsIDIwNTg2LCAyMDU5MCwgMjA1OTQsIAotICAgIDIwNTk4LCAyMDYwMiwgMjA2MDYsIDIwNjEwLCAyMDYxNCwgMjA2MTgsIDIwNjIyLCAyMDYyNiwgMjA2MzAsIDIwNjM0LCAKLSAgICAyMDYzOCwgMjA2NDIsIDIwNjQ2LCAyMDY1MCwgMjA2NTQsIDIwNjU4LCAyMDY2MiwgMjA2NjUsIDIwNjY5LCAyMDY3MywgCi0gICAgMjA2NzcsIDIwNjgxLCAyMDY4NSwgMjA2ODksIDIwNjkzLCAyMDY5NywgMjA3MDEsIDIwNzA1LCAyMDcwOSwgMjA3MTMsIAotICAgIDIwNzE3LCAyMDcyMSwgMjA3MjUsIDIwNzI4LCAyMDczMiwgMjA3MzYsIDIwNzQwLCAyMDc0NCwgMjA3NDgsIDIwNzUyLCAKLSAgICAyMDc1NiwgMjA3NTksIDIwNzYzLCAyMDc2NywgMjA3NzEsIDIwNzc1LCAyMDc3OSwgMjA3ODMsIDIwNzg3LCAyMDc5MSwgCi0gICAgMjA3OTUsIDIwNzk5LCAyMDgwMywgMjA4MDcsIDIwODExLCAyMDgxNSwgMjA4MTksIDIwODIzLCAyMDgyNywgMjA4MzEsIAotICAgIDIwODM1LCAyMDgzOSwgMjA4NDMsIDIwODQ3LCAyMDg1MSwgMCwgMjA4NTUsIDIwODU5LCAyMDg2MywgMjA4NjcsIDAsIDAsIAotICAgIDIwODcxLCAyMDg3NSwgMjA4NzksIDIwODgzLCAyMDg4NywgMjA4OTEsIDIwODk1LCAwLCAyMDg5OSwgMCwgMjA5MDMsIAotICAgIDIwOTA3LCAyMDkxMSwgMjA5MTUsIDAsIDAsIDIwOTE5LCAyMDkyMywgMjA5MjcsIDIwOTMxLCAyMDkzNSwgMjA5MzksIAotICAgIDIwOTQzLCAyMDk0NywgMjA5NTEsIDIwOTU1LCAyMDk1OSwgMjA5NjMsIDIwOTY3LCAyMDk3MSwgMjA5NzUsIDIwOTc5LCAKLSAgICAyMDk4MywgMjA5ODcsIDIwOTkxLCAyMDk5NSwgMjA5OTksIDIxMDAzLCAyMTAwNywgMjEwMTAsIDIxMDE0LCAyMTAxOCwgCi0gICAgMjEwMjIsIDIxMDI2LCAyMTAzMCwgMjEwMzQsIDIxMDM4LCAyMTA0MiwgMjEwNDYsIDIxMDUwLCAyMTA1NCwgMjEwNTgsIAotICAgIDIxMDYyLCAyMTA2NiwgMjEwNzAsIDIxMDc0LCAyMTA3OCwgMCwgMjEwODIsIDIxMDg2LCAyMTA5MCwgMjEwOTQsIDAsIDAsIAotICAgIDIxMDk4LCAyMTEwMSwgMjExMDUsIDIxMTA5LCAyMTExMywgMjExMTcsIDIxMTIxLCAyMTEyNSwgMjExMjksIDIxMTMzLCAKLSAgICAyMTEzNywgMjExNDEsIDIxMTQ1LCAyMTE0OSwgMjExNTMsIDIxMTU3LCAyMTE2MSwgMjExNjYsIDIxMTcxLCAyMTE3NiwgCi0gICAgMjExODIsIDIxMTg4LCAyMTE5MywgMjExOTgsIDIxMjA0LCAyMTIwNywgMjEyMTEsIDIxMjE1LCAyMTIxOSwgMjEyMjMsIAotICAgIDIxMjI3LCAyMTIzMSwgMjEyMzUsIDAsIDIxMjM5LCAyMTI0MywgMjEyNDcsIDIxMjUxLCAwLCAwLCAyMTI1NSwgMjEyNTksIAotICAgIDIxMjYzLCAyMTI2NywgMjEyNzEsIDIxMjc1LCAyMTI3OSwgMCwgMjEyODMsIDAsIDIxMjg3LCAyMTI5MSwgMjEyOTUsIAotICAgIDIxMjk5LCAwLCAwLCAyMTMwMywgMjEzMDcsIDIxMzExLCAyMTMxNSwgMjEzMTksIDIxMzIzLCAyMTMyNywgMjEzMzEsIAotICAgIDIxMzM1LCAyMTM0MCwgMjEzNDUsIDIxMzUwLCAyMTM1NiwgMjEzNjIsIDIxMzY3LCAwLCAyMTM3MiwgMjEzNzYsIDIxMzgwLCAKLSAgICAyMTM4NCwgMjEzODgsIDIxMzkyLCAyMTM5NiwgMjE0MDAsIDIxNDA0LCAyMTQwOCwgMjE0MTIsIDIxNDE2LCAyMTQyMCwgCi0gICAgMjE0MjQsIDIxNDI4LCAyMTQzMiwgMjE0MzYsIDIxNDM5LCAyMTQ0MywgMjE0NDcsIDIxNDUxLCAyMTQ1NSwgMjE0NTksIAotICAgIDIxNDYzLCAyMTQ2NywgMjE0NzEsIDIxNDc1LCAyMTQ3OSwgMjE0ODMsIDIxNDg3LCAyMTQ5MSwgMjE0OTUsIDIxNDk5LCAKLSAgICAyMTUwMywgMjE1MDcsIDIxNTExLCAyMTUxNSwgMjE1MTksIDIxNTIzLCAyMTUyNywgMjE1MzEsIDIxNTM1LCAyMTUzOSwgCi0gICAgMjE1NDMsIDIxNTQ3LCAyMTU1MSwgMjE1NTUsIDIxNTU5LCAyMTU2MywgMjE1NjcsIDIxNTcxLCAyMTU3NSwgMjE1NzksIAotICAgIDIxNTgzLCAyMTU4NywgMjE1OTEsIDIxNTk1LCAwLCAyMTU5OSwgMjE2MDMsIDIxNjA3LCAyMTYxMSwgMCwgMCwgMjE2MTUsIAotICAgIDIxNjE5LCAyMTYyMywgMjE2MjcsIDIxNjMxLCAyMTYzNSwgMjE2MzksIDIxNjQzLCAyMTY0NywgMjE2NTEsIDIxNjU1LCAKLSAgICAyMTY1OSwgMjE2NjMsIDIxNjY3LCAyMTY3MSwgMjE2NzUsIDIxNjc5LCAyMTY4MywgMjE2ODcsIDIxNjkxLCAyMTY5NSwgCi0gICAgMjE2OTksIDIxNzAzLCAyMTcwNywgMjE3MTEsIDIxNzE1LCAyMTcxOSwgMjE3MjMsIDIxNzI3LCAyMTczMSwgMjE3MzUsIAotICAgIDIxNzM5LCAyMTc0MywgMjE3NDcsIDIxNzUxLCAyMTc1NSwgMjE3NTksIDIxNzYzLCAyMTc2NywgMjE3NzEsIDIxNzc1LCAKLSAgICAyMTc3OSwgMjE3ODMsIDIxNzg3LCAyMTc5MSwgMjE3OTUsIDIxNzk5LCAyMTgwMywgMjE4MDcsIDIxODExLCAyMTgxNSwgCi0gICAgMjE4MTksIDIxODIzLCAyMTgyNywgMjE4MzEsIDIxODM1LCAyMTgzOSwgMjE4NDIsIDIxODQ2LCAyMTg1MCwgMjE4NTQsIAotICAgIDIxODU4LCAyMTg2MiwgMjE4NjYsIDIxODcwLCAyMTg3NCwgMjE4NzgsIDAsIDAsIDIxODgyLCAyMTg5MSwgMjE4OTcsIAotICAgIDIxOTAyLCAyMTkwNiwgMjE5MDksIDIxOTE0LCAyMTkxNywgMjE5MjAsIDIxOTIzLCAyMTkyOCwgMjE5MzIsIDIxOTM3LCAKLSAgICAyMTk0MCwgMjE5NDMsIDIxOTQ2LCAyMTk0OSwgMjE5NTIsIDIxOTU1LCAyMTk1OCwgMjE5NjEsIDIxOTY0LCAyMTk2OCwgCi0gICAgMjE5NzIsIDIxOTc2LCAyMTk4MCwgMjE5ODQsIDIxOTg4LCAyMTk5MiwgMjE5OTYsIDIyMDAwLCAyMjAwNCwgMCwgMCwgMCwgCi0gICAgMjIwMTAsIDIyMDE2LCAyMjAyMCwgMjIwMjQsIDIyMDI4LCAyMjAzNCwgMjIwMzgsIDIyMDQyLCAyMjA0NiwgMjIwNTIsIAotICAgIDIyMDU2LCAyMjA2MCwgMjIwNjQsIDIyMDcwLCAyMjA3NCwgMjIwNzgsIDIyMDgyLCAyMjA4OCwgMjIwOTQsIDIyMTAwLCAKLSAgICAyMjEwOCwgMjIxMTQsIDIyMTIwLCAyMjEyNiwgMjIxMzIsIDIyMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE0NCwgMjIxNDcsIAotICAgIDIyMTUwLCAyMjE1MywgMjIxNTYsIDIyMTU5LCAyMjE2MywgMjIxNjcsIDIyMTcwLCAyMjE3NCwgMjIxNzgsIDIyMTgyLCAKLSAgICAyMjE4NiwgMjIxOTAsIDIyMTkzLCAyMjE5NywgMjIyMDEsIDIyMjA1LCAyMjIwOSwgMjIyMTMsIDIyMjE3LCAyMjIyMSwgCi0gICAgMjIyMjUsIDIyMjI5LCAyMjIzMywgMjIyMzcsIDIyMjQwLCAyMjI0NCwgMjIyNDgsIDIyMjUyLCAyMjI1NiwgMjIyNTksIAotICAgIDIyMjYzLCAyMjI2NywgMjIyNzEsIDIyMjc1LCAyMjI3OSwgMjIyODMsIDIyMjg3LCAyMjI5MSwgMjIyOTUsIDIyMjk5LCAKLSAgICAyMjMwMywgMjIzMDcsIDIyMzExLCAyMjMxNCwgMjIzMTgsIDIyMzIyLCAyMjMyNiwgMjIzMzAsIDIyMzM0LCAyMjMzOCwgCi0gICAgMjIzNDIsIDIyMzQ2LCAyMjM1MCwgMjIzNTQsIDIyMzU4LCAyMjM2MiwgMjIzNjYsIDIyMzcwLCAyMjM3NCwgMjIzNzgsIAotICAgIDIyMzgyLCAyMjM4NiwgMjIzOTAsIDIyMzk0LCAyMjM5OCwgMjI0MDIsIDIyNDA2LCAyMjQxMCwgMjI0MTQsIDIyNDE4LCAKLSAgICAyMjQyMiwgMjI0MjYsIDIyNDMwLCAyMjQzNCwgMjI0MzgsIDIyNDQyLCAyMjQ0NiwgMjI0NTAsIDIyNDUzLCAyMjQ1NywgCi0gICAgMjI0NjEsIDIyNDY1LCAyMjQ2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0NzMsIDIyNDc3LCAKLSAgICAyMjQ4MCwgMjI0ODQsIDIyNDg3LCAyMjQ5MSwgMjI0OTQsIDIyNDk4LCAyMjUwNCwgMjI1MDksIDIyNTEzLCAyMjUxNiwgCi0gICAgMjI1MjAsIDIyNTI0LCAyMjUyOSwgMjI1MzMsIDIyNTM4LCAyMjU0MiwgMjI1NDcsIDIyNTUxLCAyMjU1NiwgMjI1NjAsIAotICAgIDIyNTY1LCAyMjU3MSwgMjI1NzUsIDIyNTgwLCAyMjU4NCwgMjI1ODksIDIyNTk1LCAyMjU5OSwgMjI2MDUsIDIyNjExLCAKLSAgICAyMjYxNSwgMjI2MjAsIDIyNjI4LCAyMjYzNiwgMjI2NDMsIDIyNjQ4LCAyMjY1MywgMjI2NjIsIDIyNjY5LCAyMjY3NiwgCi0gICAgMjI2ODEsIDIyNjg3LCAyMjY5MSwgMjI2OTUsIDIyNjk5LCAyMjcwMywgMjI3MDcsIDIyNzExLCAyMjcxNSwgMjI3MTksIAotICAgIDIyNzIzLCAyMjcyNywgMjI3MzMsIDIyNzM4LCAyMjc0MywgMjI3NDYsIDIyNzUwLCAyMjc1NCwgMjI3NTksIDIyNzYzLCAKLSAgICAyMjc2OCwgMjI3NzIsIDIyNzc3LCAyMjc4MSwgMjI3ODYsIDIyNzkwLCAyMjc5NSwgMjI3OTksIDIyODA0LCAyMjgwOCwgCi0gICAgMjI4MTMsIDIyODE5LCAyMjgyMywgMjI4MjgsIDIyODMzLCAyMjgzNywgMjI4NDEsIDIyODQ1LCAyMjg0OSwgMjI4NTIsIAotICAgIDIyODU2LCAyMjg2MiwgMjI4NjcsIDIyODcyLCAyMjg3NiwgMjI4ODAsIDIyODg0LCAyMjg4OSwgMjI4OTMsIDIyODk4LCAKLSAgICAyMjkwMiwgMjI5MDcsIDIyOTEwLCAyMjkxNCwgMjI5MTgsIDIyOTIzLCAyMjkyNywgMjI5MzIsIDIyOTM2LCAyMjk0MSwgCi0gICAgMjI5NDcsIDIyOTUxLCAyMjk1NSwgMjI5NTksIDIyOTYzLCAyMjk2NywgMjI5NzEsIDIyOTc1LCAyMjk3OSwgMjI5ODMsIAotICAgIDIyOTg3LCAyMjk5MSwgMjI5OTcsIDIzMDAwLCAyMzAwNCwgMjMwMDgsIDIzMDEzLCAyMzAxNywgMjMwMjIsIDIzMDI2LCAKLSAgICAyMzAzMSwgMjMwMzUsIDIzMDQwLCAyMzA0NCwgMjMwNDksIDIzMDUzLCAyMzA1OCwgMjMwNjIsIDIzMDY3LCAyMzA3MywgCi0gICAgMjMwNzcsIDIzMDgxLCAyMzA4NywgMjMwOTMsIDIzMDk5LCAyMzEwNSwgMjMxMDksIDIzMTEzLCAyMzExNywgMjMxMjEsIAotICAgIDIzMTI1LCAyMzEyOSwgMjMxMzUsIDIzMTM5LCAyMzE0MywgMjMxNDcsIDIzMTUyLCAyMzE1NiwgMjMxNjEsIDIzMTY1LCAKLSAgICAyMzE3MCwgMjMxNzQsIDIzMTc5LCAyMzE4MywgMjMxODgsIDIzMTkyLCAyMzE5NywgMjMyMDEsIDIzMjA2LCAyMzIxMiwgCi0gICAgMjMyMTYsIDIzMjIyLCAyMzIyNiwgMjMyMzAsIDIzMjM0LCAyMzIzOCwgMjMyNDIsIDIzMjQ2LCAyMzI1MiwgMjMyNTUsIAotICAgIDIzMjU5LCAyMzI2MywgMjMyNjgsIDIzMjcyLCAyMzI3NywgMjMyODEsIDIzMjg2LCAyMzI5MCwgMjMyOTUsIDIzMjk5LCAKLSAgICAyMzMwNCwgMjMzMDgsIDIzMzEzLCAyMzMxNywgMjMzMjIsIDIzMzI4LCAyMzMzMSwgMjMzMzUsIDIzMzM5LCAyMzM0NCwgCi0gICAgMjMzNDksIDIzMzUzLCAyMzM1NywgMjMzNjEsIDIzMzY1LCAyMzM2OSwgMjMzNzMsIDIzMzc5LCAyMzM4MiwgMjMzODYsIAotICAgIDIzMzkwLCAyMzM5NSwgMjMzOTksIDIzNDA0LCAyMzQwOCwgMjM0MTMsIDIzNDE5LCAyMzQyMywgMjM0MjgsIDIzNDMyLCAKLSAgICAyMzQzNiwgMjM0NDAsIDIzNDQ0LCAyMzQ0OCwgMjM0NTIsIDIzNDU2LCAyMzQ2MiwgMjM0NjYsIDIzNDcwLCAyMzQ3NCwgCi0gICAgMjM0NzksIDIzNDgzLCAyMzQ4OCwgMjM0OTIsIDIzNDk3LCAyMzUwMSwgMjM1MDYsIDIzNTEwLCAyMzUxNSwgMjM1MTksIAotICAgIDIzNTI0LCAyMzUyOCwgMjM1MzMsIDIzNTM2LCAyMzU0MCwgMjM1NDQsIDIzNTQ4LCAyMzU1MiwgMjM1NTYsIDIzNTYwLCAKLSAgICAyMzU2NCwgMjM1NjgsIDIzNTc0LCAyMzU3NywgMjM1ODEsIDIzNTg1LCAyMzU5MCwgMjM1OTQsIDIzNTk5LCAyMzYwMywgCi0gICAgMjM2MDgsIDIzNjEyLCAyMzYxNywgMjM2MjEsIDIzNjI2LCAyMzYzMCwgMjM2MzUsIDIzNjM5LCAyMzY0NCwgMjM2NTAsIAotICAgIDIzNjU0LCAyMzY2MCwgMjM2NjQsIDIzNjcwLCAyMzY3NiwgMjM2ODIsIDIzNjg4LCAyMzY5NCwgMjM3MDAsIDIzNzA2LCAKLSAgICAyMzcxMiwgMjM3MTYsIDIzNzIwLCAyMzcyNCwgMjM3MjgsIDIzNzMyLCAyMzczNiwgMjM3NDAsIDIzNzQ0LCAyMzc0OSwgCi0gICAgMjM3NTMsIDIzNzU4LCAyMzc2MiwgMjM3NjcsIDIzNzcxLCAyMzc3NiwgMjM3ODAsIDIzNzg1LCAyMzc4OSwgMjM3OTQsIAotICAgIDIzNzk4LCAyMzgwMywgMjM4MDcsIDIzODExLCAyMzgxNSwgMjM4MTksIDIzODIzLCAyMzgyNywgMjM4MzEsIDIzODM3LCAKLSAgICAyMzg0MCwgMjM4NDQsIDIzODQ4LCAyMzg1MywgMjM4NTcsIDIzODYyLCAyMzg2NiwgMjM4NzEsIDIzODc1LCAyMzg4MCwgCi0gICAgMjM4ODQsIDIzODg5LCAyMzg5MywgMjM4OTgsIDIzOTAyLCAyMzkwNywgMjM5MTMsIDIzOTE3LCAyMzkyMywgMjM5MjgsIAotICAgIDIzOTM0LCAyMzkzOCwgMjM5NDQsIDIzOTQ5LCAyMzk1MywgMjM5NTcsIDIzOTYxLCAyMzk2NSwgMjM5NjksIDIzOTc0LCAKLSAgICAyMzk3NywgMjM5ODEsIDIzOTg2LCAyMzk5MCwgMjM5OTUsIDIzOTk4LCAyNDAwMiwgMjQwMDYsIDI0MDEwLCAyNDAxNCwgCi0gICAgMjQwMTgsIDI0MDIyLCAyNDAyNiwgMjQwMzAsIDI0MDM0LCAyNDAzOCwgMjQwNDIsIDI0MDQ3LCAyNDA1MSwgMjQwNTUsIAotICAgIDI0MDYxLCAyNDA2NSwgMjQwNzEsIDI0MDc1LCAyNDA4MSwgMjQwODUsIDI0MDg5LCAyNDA5MywgMjQwOTcsIDI0MTAxLCAKLSAgICAyNDEwNiwgMjQxMTAsIDI0MTE0LCAyNDExOCwgMjQxMjIsIDI0MTI2LCAyNDEzMCwgMjQxMzQsIDI0MTM4LCAyNDE0MiwgCi0gICAgMjQxNDYsIDI0MTUyLCAyNDE1OCwgMjQxNjQsIDI0MTcwLCAyNDE3NiwgMjQxODEsIDI0MTg3LCAyNDE5MywgMjQxOTksIAotICAgIDI0MjAzLCAyNDIwNywgMjQyMTEsIDI0MjE1LCAyNDIxOSwgMjQyMjMsIDI0MjI3LCAyNDIzMSwgMjQyMzUsIDI0MjM5LCAKLSAgICAyNDI0MywgMjQyNDcsIDI0MjUxLCAyNDI1NiwgMjQyNjEsIDI0MjY2LCAyNDI3MCwgMjQyNzQsIDI0Mjc4LCAyNDI4MiwgCi0gICAgMjQyODYsIDI0MjkwLCAyNDI5NCwgMjQyOTgsIDI0MzAyLCAyNDMwNiwgMjQzMTIsIDI0MzE4LCAyNDMyNCwgMjQzMzAsIAotICAgIDI0MzM2LCAyNDM0MiwgMjQzNDgsIDI0MzU0LCAyNDM2MCwgMjQzNjQsIDI0MzY4LCAyNDM3MiwgMjQzNzYsIDI0MzgwLCAKLSAgICAyNDM4NCwgMjQzODgsIDI0Mzk0LCAyNDQwMCwgMjQ0MDYsIDI0NDEyLCAyNDQxOCwgMjQ0MjQsIDI0NDMwLCAyNDQzNiwgCi0gICAgMjQ0NDIsIDI0NDQ3LCAyNDQ1MiwgMjQ0NTcsIDI0NDYyLCAyNDQ2OCwgMjQ0NzQsIDI0NDgwLCAyNDQ4NiwgMjQ0OTIsIAotICAgIDI0NDk4LCAyNDUwNCwgMjQ1MDksIDI0NTE1LCAyNDUyMSwgMjQ1MjcsIDI0NTMyLCAyNDUzOCwgMjQ1NDQsIDI0NTUwLCAKLSAgICAyNDU1NSwgMjQ1NjAsIDI0NTY1LCAyNDU3MCwgMjQ1NzUsIDI0NTgwLCAyNDU4NSwgMjQ1OTAsIDI0NTk1LCAyNDYwMCwgCi0gICAgMjQ2MDUsIDI0NjEwLCAyNDYxNCwgMjQ2MTksIDI0NjI0LCAyNDYyOSwgMjQ2MzQsIDI0NjM5LCAyNDY0NCwgMjQ2NDksIAotICAgIDI0NjU0LCAyNDY1OSwgMjQ2NjQsIDI0NjY5LCAyNDY3NCwgMjQ2NzksIDI0Njg0LCAyNDY4OSwgMjQ2OTQsIDI0Njk5LCAKLSAgICAyNDcwNCwgMjQ3MDksIDI0NzE0LCAyNDcxOSwgMjQ3MjQsIDI0NzI5LCAyNDczNCwgMjQ3MzksIDI0NzQ0LCAyNDc0OSwgCi0gICAgMjQ3NTQsIDI0NzU5LCAyNDc2MywgMjQ3NjgsIDI0NzczLCAyNDc3OCwgMjQ3ODMsIDI0Nzg4LCAyNDc5MywgMjQ3OTgsIAotICAgIDI0ODAzLCAyNDgwOCwgMjQ4MTMsIDI0ODE4LCAyNDgyMywgMjQ4MjgsIDI0ODMzLCAyNDgzOCwgMjQ4NDMsIDI0ODQ4LCAKLSAgICAyNDg1MywgMjQ4NTgsIDI0ODYzLCAyNDg2OCwgMjQ4NzMsIDI0ODc4LCAyNDg4MywgMjQ4ODgsIDI0ODkyLCAyNDg5NywgCi0gICAgMjQ5MDIsIDI0OTA3LCAyNDkxMiwgMjQ5MTcsIDI0OTIxLCAyNDkyNiwgMjQ5MzEsIDI0OTM2LCAyNDk0MSwgMjQ5NDYsIAotICAgIDI0OTUwLCAyNDk1NSwgMjQ5NjEsIDI0OTY2LCAyNDk3MSwgMjQ5NzYsIDI0OTgxLCAyNDk4NywgMjQ5OTIsIDI0OTk3LCAKLSAgICAyNTAwMiwgMjUwMDcsIDI1MDEyLCAyNTAxNywgMjUwMjIsIDI1MDI3LCAyNTAzMiwgMjUwMzcsIDI1MDQyLCAyNTA0NywgCi0gICAgMjUwNTIsIDI1MDU3LCAyNTA2MiwgMjUwNjcsIDI1MDcyLCAyNTA3NywgMjUwODIsIDI1MDg3LCAyNTA5MiwgMjUwOTcsIAotICAgIDI1MTAyLCAyNTEwNywgMjUxMTIsIDI1MTE3LCAyNTEyMiwgMjUxMjcsIDI1MTMyLCAyNTEzNywgMjUxNDIsIDI1MTQ3LCAKLSAgICAyNTE1MiwgMjUxNTcsIDI1MTYyLCAyNTE2NywgMjUxNzIsIDI1MTc3LCAyNTE4MiwgMjUxODcsIDI1MTkyLCAyNTE5NywgCi0gICAgMjUyMDIsIDI1MjA3LCAyNTIxMywgMjUyMTgsIDI1MjIzLCAyNTIyOCwgMjUyMzMsIDI1MjM4LCAyNTI0MywgMjUyNDgsIAotICAgIDI1MjUzLCAyNTI1OCwgMjUyNjMsIDI1MjY4LCAyNTI3MiwgMjUyNzcsIDI1MjgyLCAyNTI4NywgMjUyOTIsIDI1Mjk3LCAKLSAgICAyNTMwMiwgMjUzMDcsIDI1MzEyLCAyNTMxNywgMjUzMjIsIDI1MzI3LCAyNTMzMiwgMjUzMzcsIDI1MzQyLCAyNTM0NywgCi0gICAgMjUzNTIsIDI1MzU3LCAyNTM2MiwgMjUzNjcsIDI1MzcyLCAyNTM3NywgMjUzODIsIDI1Mzg3LCAyNTM5MiwgMjUzOTcsIAotICAgIDI1NDAyLCAyNTQwOCwgMjU0MTIsIDI1NDE2LCAyNTQyMCwgMjU0MjQsIDI1NDI4LCAyNTQzMiwgMjU0MzYsIDI1NDQwLCAKLSAgICAyNTQ0NiwgMjU0NTIsIDI1NDU4LCAyNTQ2NCwgMjU0NzAsIDI1NDc2LCAyNTQ4MiwgMjU0ODksIDI1NDk1LCAyNTUwMCwgCi0gICAgMjU1MDUsIDI1NTEwLCAyNTUxNSwgMjU1MjAsIDI1NTI1LCAyNTUzMCwgMjU1MzUsIDI1NTQwLCAyNTU0NSwgMjU1NTAsIAotICAgIDI1NTU1LCAyNTU2MCwgMjU1NjUsIDI1NTcwLCAyNTU3NSwgMjU1ODAsIDI1NTg1LCAyNTU5MCwgMjU1OTUsIDI1NjAwLCAKLSAgICAyNTYwNSwgMjU2MTAsIDI1NjE1LCAyNTYyMCwgMjU2MjUsIDI1NjMwLCAyNTYzNSwgMCwgMCwgMCwgMjU2NDIsIDI1NjUyLCAKLSAgICAyNTY1NiwgMjU2NjMsIDI1NjY3LCAyNTY3MSwgMjU2NzUsIDI1NjgzLCAyNTY4NywgMjU2OTIsIDI1Njk3LCAyNTcwMiwgCi0gICAgMjU3MDYsIDI1NzExLCAyNTcxNiwgMjU3MTksIDI1NzIzLCAyNTcyNywgMjU3MzYsIDI1NzQwLCAyNTc0NCwgMjU3NTAsIAotICAgIDI1NzU0LCAyNTc1OCwgMjU3NjYsIDI1NzcwLCAyNTc3OCwgMjU3ODQsIDI1NzkwLCAyNTc5NiwgMjU4MDIsIDI1ODEyLCAKLSAgICAyNTgxOCwgMjU4MjIsIDI1ODMxLCAyNTgzNCwgMjU4NDAsIDI1ODQ0LCAyNTg1MCwgMjU4NTUsIDI1ODYxLCAyNTg2OSwgCi0gICAgMjU4NzUsIDI1ODgxLCAyNTg4OSwgMjU4OTUsIDI1ODk5LCAyNTkwMywgMjU5MTMsIDI1OTE5LCAyNTkyMywgMjU5MzMsIAotICAgIDI1OTM5LCAyNTk0MywgMjU5NDcsIDI1OTU0LCAyNTk2MSwgMjU5NjYsIDI1OTcxLCAyNTk4MCwgMjU5ODQsIDI1OTg4LCAKLSAgICAyNTk5MiwgMjYwMDAsIDI2MDA3LCAyNjAxMSwgMjYwMTUsIDI2MDE5LCAyNjAyMywgMjYwMjcsIDI2MDMxLCAyNjAzNSwgCi0gICAgMjYwMzksIDI2MDQzLCAyNjA0NywgMjYwNTEsIDI2MDU2LCAyNjA2MSwgMjYwNjYsIDI2MDcwLCAyNjA3NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwNzgsIDI2MDgyLCAyNjA4NiwgMjYwOTAsIDI2MDk0LCAKLSAgICAyNjA5OSwgMjYxMDQsIDI2MTA5LCAyNjExNCwgMjYxMTgsIDI2MTIyLCAyNjEyNywgMjYxMzEsIDAsIDI2MTM1LCAyNjE0MCwgCi0gICAgMjYxNDUsIDI2MTQ5LCAyNjE1MywgMjYxNTgsIDI2MTYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjE2OCwgMjYxNzIsIDI2MTc2LCAyNjE4MCwgMjYxODQsIDI2MTg5LCAyNjE5NCwgMjYxOTksIDI2MjA0LCAyNjIwOCwgCi0gICAgMjYyMTIsIDI2MjE3LCAyNjIyMSwgMjYyMjUsIDI2MjI5LCAyNjIzNCwgMjYyMzksIDI2MjQzLCAyNjI0NywgMjYyNTIsIAotICAgIDI2MjU3LCAyNjI2MiwgMjYyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MjczLCAyNjI3NywgMjYyODEsIAotICAgIDI2Mjg1LCAyNjI4OSwgMjYyOTQsIDI2Mjk5LCAyNjMwNCwgMjYzMDksIDI2MzEzLCAyNjMxNywgMjYzMjIsIDI2MzI2LCAKLSAgICAyNjMzMCwgMjYzMzQsIDI2MzM5LCAyNjM0NCwgMjYzNDgsIDI2MzUyLCAyNjM1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMjYzNjIsIDI2MzY2LCAyNjM3MCwgMjYzNzQsIDI2Mzc4LCAyNjM4MywgMjYzODgsIDI2MzkzLCAKLSAgICAyNjM5OCwgMjY0MDIsIDI2NDA2LCAyNjQxMSwgMjY0MTUsIDAsIDI2NDE5LCAyNjQyNCwgMjY0MjksIDAsIDI2NDMzLCAKLSAgICAyNjQzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0NDMsIDI2NDQ2LCAyNjQ1MCwgMjY0NTQsIAotICAgIDI2NDU4LCAyNjQ2MiwgMjY0NjYsIDI2NDcwLCAyNjQ3NCwgMjY0NzgsIDI2NDgyLCAyNjQ4NiwgMjY0OTAsIDI2NDk0LCAKLSAgICAyNjQ5OCwgMjY1MDIsIDI2NTA2LCAyNjUxMCwgMjY1MTMsIDI2NTE3LCAyNjUyMSwgMjY1MjUsIDI2NTI5LCAyNjUzMywgCi0gICAgMjY1MzcsIDI2NTQxLCAyNjU0NSwgMjY1NDksIDI2NTUzLCAyNjU1NywgMjY1NjEsIDI2NTY1LCAyNjU2OCwgMjY1NzEsIAotICAgIDI2NTc1LCAyNjU3OSwgMjY1ODUsIDI2NTkxLCAyNjU5NywgMjY2MDMsIDI2NjA5LCAyNjYxNSwgMjY2MjEsIDI2NjI3LCAKLSAgICAyNjYzMywgMjY2MzksIDI2NjQ1LCAyNjY1MSwgMjY2NTcsIDI2NjYzLCAyNjY3MiwgMjY2ODEsIDI2Njg3LCAyNjY5MywgCi0gICAgMjY2OTksIDI2NzA0LCAyNjcwOCwgMjY3MTMsIDI2NzE4LCAyNjcyMywgMjY3MjcsIDI2NzMyLCAyNjczNywgMjY3NDIsIAotICAgIDI2NzQ2LCAyNjc1MSwgMjY3NTUsIDI2NzYwLCAyNjc2NSwgMjY3NzAsIDI2Nzc1LCAyNjc3OSwgMjY3ODMsIDI2Nzg3LCAKLSAgICAyNjc5MSwgMjY3OTUsIDI2Nzk5LCAyNjgwMywgMjY4MDcsIDI2ODExLCAyNjgxNSwgMjY4MjEsIDI2ODI1LCAyNjgyOSwgCi0gICAgMjY4MzMsIDI2ODM3LCAyNjg0MSwgMjY4NDksIDI2ODU1LCAyNjg1OSwgMjY4NjUsIDI2ODY5LCAyNjg3NSwgMjY4NzksIDAsIAotICAgIDAsIDI2ODgzLCAyNjg4NywgMjY4OTAsIDI2ODkzLCAyNjg5NiwgMjY4OTksIDI2OTAyLCAyNjkwNSwgMjY5MDgsIDI2OTExLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjkxNCwgMjY5MjIsIDI2OTMwLCAyNjkzOCwgMjY5NDYsIDI2OTU0LCAyNjk2MiwgMjY5NzAsIAotICAgIDI2OTc4LCAyNjk4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5OTQsIDI2OTk3LCAyNzAwMCwgMjcwMDMsIDI3MDA4LCAyNzAxMSwgCi0gICAgMjcwMTYsIDI3MDIzLCAyNzAzMSwgMjcwMzYsIDI3MDQzLCAyNzA0NiwgMjcwNTMsIDI3MDYwLCAyNzA2NywgMCwgMjcwNzEsIAotICAgIDI3MDc1LCAyNzA3OCwgMjcwODEsIDI3MDg0LCAyNzA4NywgMjcwOTAsIDI3MDkzLCAyNzA5NiwgMjcwOTksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDI3MTAyLCAyNzEwNSwgMjcxMDgsIDI3MTExLCAyNzExNCwgMjcxMTcsIDI3MTIxLCAyNzEyNSwgMjcxMjksIAotICAgIDI3MTMyLCAyNzEzNiwgMjcxNDAsIDI3MTQzLCAyNzE0NywgMjcxNTEsIDI3MTU0LCAyNzE1OCwgMjcxNjEsIDI3MTY1LCAKLSAgICAyNzE2OSwgMjcxNzMsIDI3MTc3LCAyNzE4MSwgMjcxODQsIDI3MTg3LCAyNzE5MSwgMjcxOTUsIDI3MTk4LCAyNzIwMiwgCi0gICAgMjcyMDYsIDI3MjEwLCAyNzIxNCwgMjcyMTgsIDI3MjIyLCAyNzIyNiwgMjcyMzAsIDI3MjM3LCAyNzI0MiwgMjcyNDcsIAotICAgIDI3MjUyLCAyNzI1NywgMjcyNjMsIDI3MjY5LCAyNzI3NSwgMjcyODEsIDI3Mjg2LCAyNzI5MiwgMjcyOTgsIDI3MzAzLCAKLSAgICAyNzMwOSwgMjczMTUsIDI3MzIxLCAyNzMyNywgMjczMzMsIDI3MzM4LCAyNzM0NCwgMjczNDksIDI3MzU1LCAyNzM2MSwgCi0gICAgMjczNjcsIDI3MzczLCAyNzM3OSwgMjczODQsIDI3Mzg5LCAyNzM5NSwgMjc0MDEsIDI3NDA2LCAyNzQxMiwgMjc0MTcsIAotICAgIDI3NDIzLCAyNzQyOCwgMjc0MzMsIDI3NDM5LCAyNzQ0NSwgMjc0NTEsIDI3NDU3LCAyNzQ2MywgMjc0NjksIDI3NDc1LCAKLSAgICAyNzQ4MSwgMjc0ODcsIDI3NDkzLCAyNzQ5OSwgMjc1MDUsIDI3NTEwLCAyNzUxNSwgMjc1MjAsIDI3NTI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNzUzMiwgMjc1NDEsIDI3NTUwLCAyNzU1OCwgMjc1NjYsIDI3NTc2LCAyNzU4NCwgMjc1OTMsIAotICAgIDI3NjAwLCAyNzYwNywgMjc2MTQsIDI3NjIyLCAyNzYzMCwgMjc2MzgsIDI3NjQ2LCAyNzY1NCwgMjc2NjIsIDI3NjcwLCAKLSAgICAyNzY3OCwgMjc2ODUsIDI3NjkzLCAyNzcwMSwgMjc3MDksIDI3NzE3LCAyNzcyNSwgMjc3MzUsIDI3NzQ1LCAyNzc1NSwgCi0gICAgMjc3NjUsIDI3Nzc1LCAyNzc4NSwgMjc3OTUsIDI3ODA1LCAyNzgxNSwgMjc4MjUsIDI3ODM1LCAyNzg0NSwgMjc4NTUsIAotICAgIDI3ODY1LCAyNzg3MywgMjc4ODEsIDI3ODkxLCAyNzg5OSwgMCwgMCwgMCwgMCwgMCwgMjc5MDksIDI3OTEzLCAyNzkxNywgCi0gICAgMjc5MjEsIDI3OTI1LCAyNzkyOSwgMjc5MzMsIDI3OTM3LCAyNzk0MSwgMjc5NDUsIDI3OTQ5LCAyNzk1MywgMjc5NTcsIAotICAgIDI3OTYxLCAyNzk2NSwgMjc5NjksIDI3OTczLCAyNzk3NywgMjc5ODEsIDI3OTg1LCAyNzk4OSwgMjc5OTMsIDI3OTk3LCAKLSAgICAyODAwMSwgMjgwMDcsIDI4MDExLCAyODAxNywgMjgwMjEsIDI4MDI3LCAyODAzMSwgMjgwMzcsIDI4MDQxLCAyODA0NSwgCi0gICAgMjgwNDksIDI4MDUzLCAyODA1NywgMjgwNjEsIDI4MDY3LCAyODA3MywgMjgwNzksIDI4MDg1LCAyODA5MCwgMjgwOTYsIAotICAgIDI4MTAyLCAyODEwOCwgMjgxMTQsIDI4MTIwLCAyODEyNiwgMjgxMzMsIDI4MTM5LCAyODE0NCwgMjgxNDksIDI4MTUzLCAKLSAgICAyODE1NywgMjgxNjEsIDI4MTY1LCAyODE2OSwgMjgxNzMsIDI4MTc3LCAyODE4MywgMjgxODksIDI4MTk1LCAyODIwMCwgCi0gICAgMjgyMDcsIDI4MjEyLCAyODIxNywgMjgyMjMsIDI4MjI4LCAyODIzNSwgMjgyNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI4MjQ5LCAyODI1NSwgMjgyNTksIDI4MjY0LCAyODI2OSwgMjgyNzQsIDI4Mjc5LCAyODI4NCwgMjgyODksIAotICAgIDI4Mjk0LCAyODI5OSwgMjgzMDQsIDI4MzA5LCAyODMxNCwgMjgzMTksIDI4MzI0LCAyODMyOCwgMjgzMzIsIDI4MzM3LCAKLSAgICAyODM0MiwgMjgzNDcsIDI4MzUxLCAyODM1NSwgMjgzNTksIDI4MzY0LCAyODM2OSwgMjgzNzQsIDI4Mzc5LCAyODM4MywgMCwgCi0gICAgMCwgMCwgMjgzODcsIDI4MzkyLCAyODM5NywgMjg0MDIsIDI4NDA4LCAyODQxNCwgMjg0MjAsIDI4NDI2LCAyODQzMSwgCi0gICAgMjg0MzYsIDI4NDQyLCAyODQ0OCwgMCwgMCwgMCwgMCwgMjg0NTUsIDI4NDYwLCAyODQ2NiwgMjg0NzIsIDI4NDc4LCAKLSAgICAyODQ4MywgMjg0ODgsIDI4NDkzLCAyODQ5OCwgMjg1MDQsIDI4NTA5LCAyODUxNCwgMCwgMCwgMCwgMCwgMjg1MTksIDAsIDAsIAotICAgIDAsIDI4NTI0LCAyODUyOSwgMjg1MzQsIDI4NTM5LCAyODU0MywgMjg1NDcsIDI4NTUxLCAyODU1NSwgMjg1NTksIDI4NTYzLCAKLSAgICAyODU2NywgMjg1NzEsIDI4NTc1LCAyODU4MCwgMjg1ODYsIDI4NTkyLCAyODU5OCwgMjg2MDMsIDI4NjA4LCAyODYxNCwgCi0gICAgMjg2MjAsIDI4NjI2LCAyODYzMSwgMjg2MzcsIDI4NjQyLCAyODY0OCwgMjg2NTQsIDI4NjU5LCAyODY2NSwgMjg2NzEsIAotICAgIDI4Njc3LCAyODY4MiwgMjg2ODcsIDI4NjkyLCAyODY5OCwgMjg3MDQsIDI4NzA5LCAyODcxNSwgMjg3MjAsIDI4NzI2LCAKLSAgICAyODczMSwgMjg3MzcsIDAsIDAsIDI4NzQzLCAyODc0OSwgMjg3NTUsIDI4NzYxLCAyODc2NywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjg3NzMsIDI4NzgwLCAyODc4NywgMjg3OTMsIDI4ODAwLCAyODgwNywgMjg4MTMsIDI4ODIwLCAKLSAgICAyODgyNywgMjg4MzQsIDI4ODQwLCAyODg0NiwgMjg4NTMsIDI4ODU5LCAyODg2NSwgMjg4NzIsIDI4ODc5LCAyODg4NSwgCi0gICAgMjg4OTIsIDI4ODk5LCAyODkwNSwgMjg5MTEsIDI4OTE4LCAyODkyNCwgMjg5MzAsIDI4OTM3LCAyODk0MywgMjg5NTAsIAotICAgIDI4OTU3LCAyODk2NCwgMjg5NzEsIDI4OTc4LCAyODk4NSwgMjg5OTEsIDI4OTk4LCAyOTAwNSwgMjkwMTEsIDI5MDE4LCAKLSAgICAyOTAyNSwgMjkwMzIsIDI5MDM5LCAyOTA0NiwgMjkwNTMsIDI5MDYwLCAwLCAwLCAwLCAwLCAyOTA2NywgMjkwNzUsIAotICAgIDI5MDgyLCAyOTA4OSwgMjkwOTUsIDI5MTAyLCAyOTEwOCwgMjkxMTUsIDI5MTIxLCAyOTEyOCwgMjkxMzUsIDI5MTQyLCAKLSAgICAyOTE0OSwgMjkxNTYsIDI5MTYzLCAyOTE3MCwgMjkxNzcsIDI5MTg0LCAyOTE5MSwgMjkxOTgsIDI5MjA1LCAyOTIxMSwgCi0gICAgMjkyMTgsIDI5MjI1LCAyOTIzMiwgMjkyMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjQ0LCAyOTI1MCwgMjkyNTUsIDI5MjYwLCAKLSAgICAyOTI2NSwgMjkyNzAsIDI5Mjc1LCAyOTI4MCwgMjkyODUsIDI5MjkwLCAyOTI5NSwgMCwgMCwgMCwgMjkzMDEsIDI5MzA3LCAKLSAgICAyOTMxMywgMjkzMTcsIDI5MzIzLCAyOTMyOSwgMjkzMzUsIDI5MzQxLCAyOTM0NywgMjkzNTMsIDI5MzU5LCAyOTM2NSwgCi0gICAgMjkzNzEsIDI5Mzc3LCAyOTM4MywgMjkzODksIDI5Mzk1LCAyOTQwMSwgMjk0MDcsIDI5NDExLCAyOTQxNywgMjk0MjMsIAotICAgIDI5NDI5LCAyOTQzNSwgMjk0NDEsIDI5NDQ3LCAyOTQ1MywgMjk0NTksIDI5NDY1LCAyOTQ3MSwgMjk0NzcsIDI5NDgzLCAKLSAgICAyOTQ4OSwgMjk0OTUsIDI5NTAxLCAyOTUwNSwgMjk1MTAsIDI5NTE1LCAyOTUyMCwgMjk1MjQsIDI5NTI5LCAyOTUzMywgCi0gICAgMjk1MzgsIDI5NTQzLCAyOTU0OCwgMjk1NTIsIDI5NTU3LCAyOTU2MiwgMjk1NjcsIDI5NTcyLCAyOTU3NywgMjk1ODEsIAotICAgIDI5NTg1LCAyOTU5MCwgMjk1OTUsIDI5NTk5LCAyOTYwMywgMjk2MDcsIDI5NjEyLCAyOTYxNywgMjk2MjIsIDI5NjI3LCAwLCAKLSAgICAwLCAyOTYzMywgMjk2MzcsIDI5NjQ0LCAyOTY0OSwgMjk2NTUsIDI5NjYxLCAyOTY2NiwgMjk2NzIsIDI5Njc4LCAyOTY4MywgCi0gICAgMjk2ODksIDI5Njk1LCAyOTcwMSwgMjk3MDYsIDI5NzEyLCAyOTcxNywgMjk3MjIsIDI5NzI4LCAyOTczMywgMjk3MzksIAotICAgIDI5NzQ0LCAyOTc1MCwgMjk3NTYsIDI5NzYyLCAyOTc2OCwgMjk3NzIsIDI5Nzc3LCAyOTc4MiwgMjk3ODgsIDI5Nzk0LCAKLSAgICAyOTc5OSwgMjk4MDUsIDI5ODExLCAyOTgxNSwgMjk4MjAsIDI5ODI1LCAyOTgyOSwgMjk4MzQsIDI5ODM5LCAyOTg0NCwgCi0gICAgMjk4NDksIDI5ODU1LCAyOTg2MSwgMjk4NjYsIDI5ODcxLCAyOTg3NiwgMjk4ODAsIDI5ODg1LCAyOTg4OSwgMjk4OTQsIAotICAgIDI5ODk4LCAyOTkwMywgMjk5MDgsIDI5OTEzLCAyOTkxOCwgMjk5MjQsIDI5OTMwLCAyOTkzNywgMjk5NDcsIDI5OTU2LCAKLSAgICAyOTk2MywgMjk5NjksIDI5OTc5LCAyOTk4NCwgMjk5OTAsIDAsIDI5OTk1LCAzMDAwMCwgMzAwMDUsIDMwMDEzLCAzMDAxOSwgCi0gICAgMzAwMjcsIDMwMDMyLCAzMDAzOCwgMzAwNDQsIDMwMDUwLCAzMDA1NSwgMzAwNjEsIDMwMDY2LCAzMDA3MywgMzAwNzksIAotICAgIDMwMDg0LCAzMDA5MCwgMzAwOTYsIDMwMTAyLCAzMDEwOSwgMzAxMTYsIDMwMTIzLCAzMDEyOCwgMzAxMzMsIDMwMTQwLCAKLSAgICAzMDE0NywgMzAxNTQsIDMwMTYxLCAzMDE2OCwgMCwgMCwgMzAxNzUsIDMwMTgyLCAzMDE4OSwgMzAxOTUsIDMwMjAxLCAKLSAgICAzMDIwNywgMzAyMTMsIDMwMjE5LCAzMDIyNSwgMzAyMzEsIDMwMjM3LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDI0MywgMzAyNDksIAotICAgIDMwMjU0LCAzMDI1OSwgMzAyNjQsIDMwMjY5LCAzMDI3NCwgMzAyNzksIDMwMjg0LCAzMDI4OSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzAyOTQsIDMwMjk5LCAzMDMwNCwgMzAzMDksIDMwMzE0LCAzMDMxOSwgMzAzMjQsIDMwMzMzLCAzMDM0MCwgMzAzNDUsIAotICAgIDMwMzUwLCAzMDM1NSwgMzAzNjAsIDMwMzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI4OCwgMTgyOTEsIDE4Mjk1LCAxODI5OSwgMTgzMDMsIAorICAgIDE4MzA3LCAxODMxMSwgMTgzMTUsIDE4MzE5LCAxODMyMywgMTgzMjcsIDE4MzMxLCAxODMzNSwgMTgzMzksIDE4MzQzLCAKKyAgICAxODM0NywgMTgzNTEsIDE4MzU1LCAxODM1OSwgMTgzNjMsIDE4MzY3LCAxODM3MCwgMTgzNzMsIDE4Mzc3LCAxODM4MSwgCisgICAgMTgzODUsIDE4Mzg4LCAxODM5MSwgMTgzOTQsIDE4Mzk4LCAxODQwMiwgMTg0MDUsIDE4NDA4LCAxODQxMiwgMTg0MTUsIAorICAgIDE4NDIwLCAxODQyMywgMTg0MjcsIDE4NDMwLCAxODQzNCwgMTg0MzcsIDE4NDQyLCAxODQ0NSwgMTg0NDksIDE4NDU2LCAKKyAgICAxODQ2MSwgMTg0NjUsIDE4NDcwLCAxODQ3NCwgMTg0NzksIDE4NDgzLCAxODQ4OCwgMTg0OTUsIDE4NTAxLCAxODUwNiwgCisgICAgMTg1MTAsIDE4NTE0LCAxODUxOCwgMTg1MjIsIDE4NTI2LCAxODUzMSwgMTg1MzYsIDE4NTQyLCAxODU0NywgMTg1NTIsIAorICAgIDE4NTU2LCAxODU1OSwgMTg1NjIsIDE4NTY1LCAxODU2OCwgMTg1NzEsIDE4NTc0LCAxODU3NywgMTg1ODAsIDE4NTgzLCAKKyAgICAxODU4OSwgMTg1OTMsIDE4NTk3LCAxODYwMSwgMTg2MDUsIDE4NjA5LCAxODYxMywgMTg2MTcsIDE4NjIxLCAxODYyNiwgCisgICAgMTg2MzAsIDE4NjM1LCAxODY0MCwgMTg2NDYsIDE4NjUxLCAxODY1NywgMTg2NjMsIDE4NjY5LCAxODY3NSwgMTg2ODEsIAorICAgIDE4Njg4LCAxODY5NSwgMTg3MDMsIDE4NzExLCAxODcyMCwgMTg3MjksIDE4NzQwLCAxODc1MCwgMTg3NjAsIDE4NzcxLCAKKyAgICAxODc4MiwgMTg3OTIsIDE4ODAyLCAxODgxMiwgMTg4MjIsIDE4ODMyLCAxODg0MiwgMTg4NTIsIDE4ODYyLCAxODg3MCwgCisgICAgMTg4NzcsIDE4ODgzLCAxODg5MCwgMTg4OTUsIDE4OTAxLCAxODkwNywgMTg5MTMsIDE4OTE5LCAxODkyNSwgMTg5MzEsIAorICAgIDE4OTM2LCAxODk0MiwgMTg5NDgsIDE4OTU0LCAxODk2MCwgMTg5NjUsIDE4OTczLCAxODk4MCwgMTg5ODYsIDE4OTkzLCAKKyAgICAxOTAwMSwgMTkwMDcsIDE5MDEzLCAxOTAxOSwgMTkwMjUsIDE5MDMzLCAxOTA0MSwgMTkwNTEsIDE5MDU5LCAxOTA2NywgCisgICAgMTkwNzMsIDE5MDc4LCAxOTA4MywgMTkwODgsIDE5MDkzLCAxOTA5OCwgMTkxMDMsIDE5MTA4LCAxOTExMywgMTkxMTgsIAorICAgIDE5MTI0LCAxOTEzMCwgMTkxMzYsIDE5MTQzLCAxOTE0OCwgMTkxNTQsIDE5MTU5LCAxOTE2NCwgMTkxNjksIDE5MTc0LCAKKyAgICAxOTE3OSwgMTkxODQsIDE5MTg5LCAxOTE5NCwgMTkxOTksIDE5MjA0LCAxOTIwOSwgMTkyMTQsIDE5MjE5LCAxOTIyNCwgCisgICAgMTkyMjksIDE5MjM0LCAxOTIzOSwgMTkyNDQsIDE5MjQ5LCAxOTI1NCwgMTkyNTksIDE5MjY0LCAxOTI2OSwgMTkyNzQsIAorICAgIDE5Mjc5LCAxOTI4NCwgMTkyODksIDE5Mjk0LCAxOTI5OSwgMTkzMDQsIDE5MzA5LCAxOTMxNCwgMTkzMTksIDE5MzI0LCAKKyAgICAxOTMyOSwgMTkzMzQsIDE5MzM5LCAwLCAxOTM0NCwgMCwgMCwgMCwgMCwgMCwgMTkzNDksIDAsIDAsIDE5MzU0LCAxOTM1OCwgCisgICAgMTkzNjIsIDE5MzY2LCAxOTM3MCwgMTkzNzQsIDE5Mzc4LCAxOTM4MiwgMTkzODYsIDE5MzkwLCAxOTM5NCwgMTkzOTgsIAorICAgIDE5NDAyLCAxOTQwNiwgMTk0MTAsIDE5NDE0LCAxOTQxOCwgMTk0MjIsIDE5NDI2LCAxOTQzMCwgMTk0MzQsIDE5NDM4LCAKKyAgICAxOTQ0MiwgMTk0NDYsIDE5NDUwLCAxOTQ1NCwgMTk0NTgsIDE5NDYyLCAxOTQ2NiwgMTk0NzAsIDE5NDc0LCAxOTQ3OCwgCisgICAgMTk0ODIsIDE5NDg2LCAxOTQ5MCwgMTk0OTQsIDE5NDk4LCAxOTUwMiwgMTk1MDYsIDE5NTEwLCAxOTUxNCwgMTk1MTgsIAorICAgIDE5NTI0LCAxOTUyOCwgMTk1MzMsIDE5NTM4LCAxOTU0MiwgMTk1NDcsIDE5NTUyLCAxOTU1NiwgMTk1NjAsIDE5NTY0LCAKKyAgICAxOTU2OCwgMTk1NzIsIDE5NTc2LCAxOTU4MCwgMTk1ODQsIDE5NTg4LCAxOTU5MiwgMTk1OTYsIDE5NjAwLCAxOTYwNCwgCisgICAgMTk2MDgsIDE5NjEyLCAxOTYxNiwgMTk2MjAsIDE5NjI0LCAxOTYyOCwgMTk2MzIsIDE5NjM2LCAxOTY0MCwgMTk2NDQsIAorICAgIDE5NjQ4LCAxOTY1MiwgMTk2NTYsIDE5NjYwLCAxOTY2NCwgMTk2NjgsIDE5NjcyLCAxOTY3NiwgMTk2ODAsIDE5Njg0LCAKKyAgICAxOTY4OCwgMTk2OTIsIDE5Njk2LCAxOTcwMCwgMTk3MDQsIDE5NzA4LCAxOTcxMiwgMTk3MTYsIDE5NzIwLCAxOTcyNCwgCisgICAgMTk3MjgsIDE5NzMyLCAxOTczNiwgMTk3NDAsIDE5NzQ0LCAxOTc0OCwgMTk3NTIsIDE5NzU2LCAxOTc2MCwgMTk3NjQsIAorICAgIDE5NzY4LCAxOTc3MiwgMTk3NzYsIDE5NzgwLCAxOTc4NCwgMTk3ODgsIDE5NzkyLCAxOTc5NiwgMTk4MDAsIDE5ODA0LCAKKyAgICAxOTgwOCwgMTk4MTIsIDE5ODE2LCAxOTgyMCwgMTk4MjQsIDE5ODI4LCAxOTgzMiwgMTk4MzYsIDE5ODQwLCAxOTg0NCwgCisgICAgMTk4NDgsIDE5ODUyLCAxOTg1NiwgMTk4NjAsIDE5ODY0LCAxOTg2OCwgMTk4NzIsIDE5ODc2LCAxOTg4MCwgMTk4ODQsIAorICAgIDE5ODg4LCAxOTg5MiwgMTk4OTYsIDE5OTAwLCAxOTkwNCwgMTk5MDgsIDE5OTEyLCAxOTkxNiwgMTk5MjAsIDE5OTI0LCAKKyAgICAxOTkyOCwgMTk5MzIsIDE5OTM2LCAxOTk0MCwgMTk5NDMsIDE5OTQ3LCAxOTk1MCwgMTk5NTQsIDE5OTU4LCAxOTk2MSwgCisgICAgMTk5NjUsIDE5OTY5LCAxOTk3MiwgMTk5NzYsIDE5OTgwLCAxOTk4NCwgMTk5ODgsIDE5OTkxLCAxOTk5NSwgMTk5OTksIAorICAgIDIwMDAzLCAyMDAwNywgMjAwMTEsIDIwMDE1LCAyMDAxOCwgMjAwMjIsIDIwMDI2LCAyMDAzMCwgMjAwMzQsIDIwMDM4LCAKKyAgICAyMDA0MiwgMjAwNDYsIDIwMDUwLCAyMDA1NCwgMjAwNTgsIDIwMDYyLCAyMDA2NiwgMjAwNzAsIDIwMDc0LCAyMDA3OCwgCisgICAgMjAwODIsIDIwMDg2LCAyMDA5MCwgMjAwOTQsIDIwMDk4LCAyMDEwMiwgMjAxMDYsIDIwMTEwLCAyMDExNCwgMjAxMTgsIAorICAgIDIwMTIyLCAyMDEyNiwgMjAxMzAsIDIwMTM0LCAyMDEzOCwgMjAxNDIsIDIwMTQ2LCAyMDE1MCwgMjAxNTQsIDIwMTU4LCAKKyAgICAyMDE2MiwgMjAxNjYsIDIwMTcwLCAyMDE3NCwgMjAxNzgsIDIwMTgyLCAyMDE4NiwgMjAxOTAsIDIwMTk0LCAyMDE5OCwgCisgICAgMjAyMDIsIDIwMjA2LCAyMDIxMCwgMjAyMTQsIDIwMjE4LCAyMDIyMiwgMjAyMjYsIDIwMjMwLCAyMDIzNCwgMjAyMzgsIAorICAgIDIwMjQyLCAyMDI0NiwgMjAyNTAsIDIwMjU0LCAyMDI1OCwgMjAyNjIsIDIwMjY2LCAyMDI3MCwgMjAyNzQsIDIwMjc4LCAKKyAgICAyMDI4MiwgMjAyODYsIDIwMjkwLCAyMDI5NCwgMjAyOTgsIDIwMzAyLCAyMDMwNiwgMjAzMTAsIDIwMzE0LCAyMDMxOCwgCisgICAgMjAzMjIsIDIwMzI2LCAyMDMzMCwgMjAzMzQsIDIwMzM4LCAyMDM0MiwgMjAzNDYsIDIwMzUwLCAyMDM1NCwgMjAzNTgsIAorICAgIDIwMzYyLCAyMDM2NiwgMjAzNzAsIDIwMzc0LCAyMDM3OCwgMjAzODIsIDIwMzg2LCAyMDM5MCwgMjAzOTQsIDIwMzk4LCAKKyAgICAyMDQwMiwgMjA0MDYsIDIwNDEwLCAyMDQxNCwgMjA0MTgsIDIwNDIyLCAyMDQyNiwgMjA0MzAsIDIwNDM0LCAyMDQzOCwgCisgICAgMjA0NDIsIDIwNDQ2LCAyMDQ1MCwgMjA0NTQsIDIwNDU4LCAyMDQ2MiwgMjA0NjYsIDIwNDcwLCAyMDQ3NCwgMjA0NzgsIAorICAgIDIwNDgyLCAyMDQ4NiwgMjA0OTAsIDIwNDk0LCAyMDQ5OCwgMjA1MDIsIDIwNTA2LCAyMDUxMCwgMjA1MTQsIDIwNTE4LCAKKyAgICAyMDUyMiwgMjA1MjYsIDIwNTMwLCAyMDUzNCwgMjA1MzgsIDIwNTQyLCAyMDU0NiwgMjA1NTAsIDIwNTU0LCAyMDU1OCwgCisgICAgMjA1NjIsIDIwNTY2LCAyMDU3MCwgMjA1NzMsIDIwNTc3LCAyMDU4MSwgMjA1ODUsIDIwNTg5LCAyMDU5MywgMjA1OTcsIAorICAgIDIwNjAxLCAyMDYwNSwgMjA2MDksIDIwNjEzLCAyMDYxNywgMjA2MjEsIDIwNjI1LCAyMDYyOSwgMjA2MzMsIDIwNjM3LCAKKyAgICAyMDY0MSwgMjA2NDUsIDIwNjQ5LCAyMDY1MywgMjA2NTcsIDIwNjYxLCAyMDY2NSwgMjA2NjgsIDIwNjcyLCAyMDY3NiwgCisgICAgMjA2ODAsIDIwNjg0LCAyMDY4OCwgMjA2OTIsIDIwNjk2LCAyMDcwMCwgMjA3MDQsIDIwNzA4LCAyMDcxMiwgMjA3MTYsIAorICAgIDIwNzIwLCAyMDcyNCwgMjA3MjgsIDIwNzMxLCAyMDczNSwgMjA3MzksIDIwNzQzLCAyMDc0NywgMjA3NTEsIDIwNzU1LCAKKyAgICAyMDc1OSwgMjA3NjIsIDIwNzY2LCAyMDc3MCwgMjA3NzQsIDIwNzc4LCAyMDc4MiwgMjA3ODYsIDIwNzkwLCAyMDc5NCwgCisgICAgMjA3OTgsIDIwODAyLCAyMDgwNiwgMjA4MTAsIDIwODE0LCAyMDgxOCwgMjA4MjIsIDIwODI2LCAyMDgzMCwgMjA4MzQsIAorICAgIDIwODM4LCAyMDg0MiwgMjA4NDYsIDIwODUwLCAyMDg1NCwgMCwgMjA4NTgsIDIwODYyLCAyMDg2NiwgMjA4NzAsIDAsIDAsIAorICAgIDIwODc0LCAyMDg3OCwgMjA4ODIsIDIwODg2LCAyMDg5MCwgMjA4OTQsIDIwODk4LCAwLCAyMDkwMiwgMCwgMjA5MDYsIAorICAgIDIwOTEwLCAyMDkxNCwgMjA5MTgsIDAsIDAsIDIwOTIyLCAyMDkyNiwgMjA5MzAsIDIwOTM0LCAyMDkzOCwgMjA5NDIsIAorICAgIDIwOTQ2LCAyMDk1MCwgMjA5NTQsIDIwOTU4LCAyMDk2MiwgMjA5NjYsIDIwOTcwLCAyMDk3NCwgMjA5NzgsIDIwOTgyLCAKKyAgICAyMDk4NiwgMjA5OTAsIDIwOTk0LCAyMDk5OCwgMjEwMDIsIDIxMDA2LCAyMTAxMCwgMjEwMTMsIDIxMDE3LCAyMTAyMSwgCisgICAgMjEwMjUsIDIxMDI5LCAyMTAzMywgMjEwMzcsIDIxMDQxLCAyMTA0NSwgMjEwNDksIDIxMDUzLCAyMTA1NywgMjEwNjEsIAorICAgIDIxMDY1LCAyMTA2OSwgMjEwNzMsIDIxMDc3LCAyMTA4MSwgMCwgMjEwODUsIDIxMDg5LCAyMTA5MywgMjEwOTcsIDAsIDAsIAorICAgIDIxMTAxLCAyMTEwNCwgMjExMDgsIDIxMTEyLCAyMTExNiwgMjExMjAsIDIxMTI0LCAyMTEyOCwgMjExMzIsIDIxMTM2LCAKKyAgICAyMTE0MCwgMjExNDQsIDIxMTQ4LCAyMTE1MiwgMjExNTYsIDIxMTYwLCAyMTE2NCwgMjExNjksIDIxMTc0LCAyMTE3OSwgCisgICAgMjExODUsIDIxMTkxLCAyMTE5NiwgMjEyMDEsIDIxMjA3LCAyMTIxMCwgMjEyMTQsIDIxMjE4LCAyMTIyMiwgMjEyMjYsIAorICAgIDIxMjMwLCAyMTIzNCwgMjEyMzgsIDAsIDIxMjQyLCAyMTI0NiwgMjEyNTAsIDIxMjU0LCAwLCAwLCAyMTI1OCwgMjEyNjIsIAorICAgIDIxMjY2LCAyMTI3MCwgMjEyNzQsIDIxMjc4LCAyMTI4MiwgMCwgMjEyODYsIDAsIDIxMjkwLCAyMTI5NCwgMjEyOTgsIAorICAgIDIxMzAyLCAwLCAwLCAyMTMwNiwgMjEzMTAsIDIxMzE0LCAyMTMxOCwgMjEzMjIsIDIxMzI2LCAyMTMzMCwgMjEzMzQsIAorICAgIDIxMzM4LCAyMTM0MywgMjEzNDgsIDIxMzUzLCAyMTM1OSwgMjEzNjUsIDIxMzcwLCAwLCAyMTM3NSwgMjEzNzksIDIxMzgzLCAKKyAgICAyMTM4NywgMjEzOTEsIDIxMzk1LCAyMTM5OSwgMjE0MDMsIDIxNDA3LCAyMTQxMSwgMjE0MTUsIDIxNDE5LCAyMTQyMywgCisgICAgMjE0MjcsIDIxNDMxLCAyMTQzNSwgMjE0MzksIDIxNDQyLCAyMTQ0NiwgMjE0NTAsIDIxNDU0LCAyMTQ1OCwgMjE0NjIsIAorICAgIDIxNDY2LCAyMTQ3MCwgMjE0NzQsIDIxNDc4LCAyMTQ4MiwgMjE0ODYsIDIxNDkwLCAyMTQ5NCwgMjE0OTgsIDIxNTAyLCAKKyAgICAyMTUwNiwgMjE1MTAsIDIxNTE0LCAyMTUxOCwgMjE1MjIsIDIxNTI2LCAyMTUzMCwgMjE1MzQsIDIxNTM4LCAyMTU0MiwgCisgICAgMjE1NDYsIDIxNTUwLCAyMTU1NCwgMjE1NTgsIDIxNTYyLCAyMTU2NiwgMjE1NzAsIDIxNTc0LCAyMTU3OCwgMjE1ODIsIAorICAgIDIxNTg2LCAyMTU5MCwgMjE1OTQsIDIxNTk4LCAwLCAyMTYwMiwgMjE2MDYsIDIxNjEwLCAyMTYxNCwgMCwgMCwgMjE2MTgsIAorICAgIDIxNjIyLCAyMTYyNiwgMjE2MzAsIDIxNjM0LCAyMTYzOCwgMjE2NDIsIDIxNjQ2LCAyMTY1MCwgMjE2NTQsIDIxNjU4LCAKKyAgICAyMTY2MiwgMjE2NjYsIDIxNjcwLCAyMTY3NCwgMjE2NzgsIDIxNjgyLCAyMTY4NiwgMjE2OTAsIDIxNjk0LCAyMTY5OCwgCisgICAgMjE3MDIsIDIxNzA2LCAyMTcxMCwgMjE3MTQsIDIxNzE4LCAyMTcyMiwgMjE3MjYsIDIxNzMwLCAyMTczNCwgMjE3MzgsIAorICAgIDIxNzQyLCAyMTc0NiwgMjE3NTAsIDIxNzU0LCAyMTc1OCwgMjE3NjIsIDIxNzY2LCAyMTc3MCwgMjE3NzQsIDIxNzc4LCAKKyAgICAyMTc4MiwgMjE3ODYsIDIxNzkwLCAyMTc5NCwgMjE3OTgsIDIxODAyLCAyMTgwNiwgMjE4MTAsIDIxODE0LCAyMTgxOCwgCisgICAgMjE4MjIsIDIxODI2LCAyMTgzMCwgMjE4MzQsIDIxODM4LCAyMTg0MiwgMjE4NDUsIDIxODQ5LCAyMTg1MywgMjE4NTcsIAorICAgIDIxODYxLCAyMTg2NSwgMjE4NjksIDIxODczLCAyMTg3NywgMjE4ODEsIDAsIDAsIDIxODg1LCAyMTg5NCwgMjE5MDAsIAorICAgIDIxOTA1LCAyMTkwOSwgMjE5MTIsIDIxOTE3LCAyMTkyMCwgMjE5MjMsIDIxOTI2LCAyMTkzMSwgMjE5MzUsIDIxOTQwLCAKKyAgICAyMTk0MywgMjE5NDYsIDIxOTQ5LCAyMTk1MiwgMjE5NTUsIDIxOTU4LCAyMTk2MSwgMjE5NjQsIDIxOTY3LCAyMTk3MSwgCisgICAgMjE5NzUsIDIxOTc5LCAyMTk4MywgMjE5ODcsIDIxOTkxLCAyMTk5NSwgMjE5OTksIDIyMDAzLCAyMjAwNywgMCwgMCwgMCwgCisgICAgMjIwMTMsIDIyMDE5LCAyMjAyMywgMjIwMjcsIDIyMDMxLCAyMjAzNywgMjIwNDEsIDIyMDQ1LCAyMjA0OSwgMjIwNTUsIAorICAgIDIyMDU5LCAyMjA2MywgMjIwNjcsIDIyMDczLCAyMjA3NywgMjIwODEsIDIyMDg1LCAyMjA5MSwgMjIwOTcsIDIyMTAzLCAKKyAgICAyMjExMSwgMjIxMTcsIDIyMTIzLCAyMjEyOSwgMjIxMzUsIDIyMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE0NywgMjIxNTAsIAorICAgIDIyMTUzLCAyMjE1NiwgMjIxNTksIDIyMTYyLCAyMjE2NiwgMjIxNzAsIDIyMTczLCAyMjE3NywgMjIxODEsIDIyMTg1LCAKKyAgICAyMjE4OSwgMjIxOTMsIDIyMTk2LCAyMjIwMCwgMjIyMDQsIDIyMjA4LCAyMjIxMiwgMjIyMTYsIDIyMjIwLCAyMjIyNCwgCisgICAgMjIyMjgsIDIyMjMyLCAyMjIzNiwgMjIyNDAsIDIyMjQzLCAyMjI0NywgMjIyNTEsIDIyMjU1LCAyMjI1OSwgMjIyNjIsIAorICAgIDIyMjY2LCAyMjI3MCwgMjIyNzQsIDIyMjc4LCAyMjI4MiwgMjIyODYsIDIyMjkwLCAyMjI5NCwgMjIyOTgsIDIyMzAyLCAKKyAgICAyMjMwNiwgMjIzMTAsIDIyMzE0LCAyMjMxNywgMjIzMjEsIDIyMzI1LCAyMjMyOSwgMjIzMzMsIDIyMzM3LCAyMjM0MSwgCisgICAgMjIzNDUsIDIyMzQ5LCAyMjM1MywgMjIzNTcsIDIyMzYxLCAyMjM2NSwgMjIzNjksIDIyMzczLCAyMjM3NywgMjIzODEsIAorICAgIDIyMzg1LCAyMjM4OSwgMjIzOTMsIDIyMzk3LCAyMjQwMSwgMjI0MDUsIDIyNDA5LCAyMjQxMywgMjI0MTcsIDIyNDIxLCAKKyAgICAyMjQyNSwgMjI0MjksIDIyNDMzLCAyMjQzNywgMjI0NDEsIDIyNDQ1LCAyMjQ0OSwgMjI0NTMsIDIyNDU2LCAyMjQ2MCwgCisgICAgMjI0NjQsIDIyNDY4LCAyMjQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0NzYsIDIyNDgwLCAKKyAgICAyMjQ4MywgMjI0ODcsIDIyNDkwLCAyMjQ5NCwgMjI0OTcsIDIyNTAxLCAyMjUwNywgMjI1MTIsIDIyNTE2LCAyMjUxOSwgCisgICAgMjI1MjMsIDIyNTI3LCAyMjUzMiwgMjI1MzYsIDIyNTQxLCAyMjU0NSwgMjI1NTAsIDIyNTU0LCAyMjU1OSwgMjI1NjMsIAorICAgIDIyNTY4LCAyMjU3NCwgMjI1NzgsIDIyNTgzLCAyMjU4NywgMjI1OTIsIDIyNTk4LCAyMjYwMiwgMjI2MDgsIDIyNjE0LCAKKyAgICAyMjYxOCwgMjI2MjMsIDIyNjMxLCAyMjYzOSwgMjI2NDYsIDIyNjUxLCAyMjY1NiwgMjI2NjUsIDIyNjcyLCAyMjY3OSwgCisgICAgMjI2ODQsIDIyNjkwLCAyMjY5NCwgMjI2OTgsIDIyNzAyLCAyMjcwNiwgMjI3MTAsIDIyNzE0LCAyMjcxOCwgMjI3MjIsIAorICAgIDIyNzI2LCAyMjczMCwgMjI3MzYsIDIyNzQxLCAyMjc0NiwgMjI3NDksIDIyNzUzLCAyMjc1NywgMjI3NjIsIDIyNzY2LCAKKyAgICAyMjc3MSwgMjI3NzUsIDIyNzgwLCAyMjc4NCwgMjI3ODksIDIyNzkzLCAyMjc5OCwgMjI4MDIsIDIyODA3LCAyMjgxMSwgCisgICAgMjI4MTYsIDIyODIyLCAyMjgyNiwgMjI4MzEsIDIyODM2LCAyMjg0MCwgMjI4NDQsIDIyODQ4LCAyMjg1MiwgMjI4NTUsIAorICAgIDIyODU5LCAyMjg2NSwgMjI4NzAsIDIyODc1LCAyMjg3OSwgMjI4ODMsIDIyODg3LCAyMjg5MiwgMjI4OTYsIDIyOTAxLCAKKyAgICAyMjkwNSwgMjI5MTAsIDIyOTEzLCAyMjkxNywgMjI5MjEsIDIyOTI2LCAyMjkzMCwgMjI5MzUsIDIyOTM5LCAyMjk0NCwgCisgICAgMjI5NTAsIDIyOTU0LCAyMjk1OCwgMjI5NjIsIDIyOTY2LCAyMjk3MCwgMjI5NzQsIDIyOTc4LCAyMjk4MiwgMjI5ODYsIAorICAgIDIyOTkwLCAyMjk5NCwgMjMwMDAsIDIzMDAzLCAyMzAwNywgMjMwMTEsIDIzMDE2LCAyMzAyMCwgMjMwMjUsIDIzMDI5LCAKKyAgICAyMzAzNCwgMjMwMzgsIDIzMDQzLCAyMzA0NywgMjMwNTIsIDIzMDU2LCAyMzA2MSwgMjMwNjUsIDIzMDcwLCAyMzA3NiwgCisgICAgMjMwODAsIDIzMDg0LCAyMzA5MCwgMjMwOTYsIDIzMTAyLCAyMzEwOCwgMjMxMTIsIDIzMTE2LCAyMzEyMCwgMjMxMjQsIAorICAgIDIzMTI4LCAyMzEzMiwgMjMxMzgsIDIzMTQyLCAyMzE0NiwgMjMxNTAsIDIzMTU1LCAyMzE1OSwgMjMxNjQsIDIzMTY4LCAKKyAgICAyMzE3MywgMjMxNzcsIDIzMTgyLCAyMzE4NiwgMjMxOTEsIDIzMTk1LCAyMzIwMCwgMjMyMDQsIDIzMjA5LCAyMzIxNSwgCisgICAgMjMyMTksIDIzMjI1LCAyMzIyOSwgMjMyMzMsIDIzMjM3LCAyMzI0MSwgMjMyNDUsIDIzMjQ5LCAyMzI1NSwgMjMyNTgsIAorICAgIDIzMjYyLCAyMzI2NiwgMjMyNzEsIDIzMjc1LCAyMzI4MCwgMjMyODQsIDIzMjg5LCAyMzI5MywgMjMyOTgsIDIzMzAyLCAKKyAgICAyMzMwNywgMjMzMTEsIDIzMzE2LCAyMzMyMCwgMjMzMjUsIDIzMzMxLCAyMzMzNCwgMjMzMzgsIDIzMzQyLCAyMzM0NywgCisgICAgMjMzNTIsIDIzMzU2LCAyMzM2MCwgMjMzNjQsIDIzMzY4LCAyMzM3MiwgMjMzNzYsIDIzMzgyLCAyMzM4NSwgMjMzODksIAorICAgIDIzMzkzLCAyMzM5OCwgMjM0MDIsIDIzNDA3LCAyMzQxMSwgMjM0MTYsIDIzNDIyLCAyMzQyNiwgMjM0MzEsIDIzNDM1LCAKKyAgICAyMzQzOSwgMjM0NDMsIDIzNDQ3LCAyMzQ1MSwgMjM0NTUsIDIzNDU5LCAyMzQ2NSwgMjM0NjksIDIzNDczLCAyMzQ3NywgCisgICAgMjM0ODIsIDIzNDg2LCAyMzQ5MSwgMjM0OTUsIDIzNTAwLCAyMzUwNCwgMjM1MDksIDIzNTEzLCAyMzUxOCwgMjM1MjIsIAorICAgIDIzNTI3LCAyMzUzMSwgMjM1MzYsIDIzNTM5LCAyMzU0MywgMjM1NDcsIDIzNTUxLCAyMzU1NSwgMjM1NTksIDIzNTYzLCAKKyAgICAyMzU2NywgMjM1NzEsIDIzNTc3LCAyMzU4MCwgMjM1ODQsIDIzNTg4LCAyMzU5MywgMjM1OTcsIDIzNjAyLCAyMzYwNiwgCisgICAgMjM2MTEsIDIzNjE1LCAyMzYyMCwgMjM2MjQsIDIzNjI5LCAyMzYzMywgMjM2MzgsIDIzNjQyLCAyMzY0NywgMjM2NTMsIAorICAgIDIzNjU3LCAyMzY2MywgMjM2NjcsIDIzNjczLCAyMzY3OSwgMjM2ODUsIDIzNjkxLCAyMzY5NywgMjM3MDMsIDIzNzA5LCAKKyAgICAyMzcxNSwgMjM3MTksIDIzNzIzLCAyMzcyNywgMjM3MzEsIDIzNzM1LCAyMzczOSwgMjM3NDMsIDIzNzQ3LCAyMzc1MiwgCisgICAgMjM3NTYsIDIzNzYxLCAyMzc2NSwgMjM3NzAsIDIzNzc0LCAyMzc3OSwgMjM3ODMsIDIzNzg4LCAyMzc5MiwgMjM3OTcsIAorICAgIDIzODAxLCAyMzgwNiwgMjM4MTAsIDIzODE0LCAyMzgxOCwgMjM4MjIsIDIzODI2LCAyMzgzMCwgMjM4MzQsIDIzODQwLCAKKyAgICAyMzg0MywgMjM4NDcsIDIzODUxLCAyMzg1NiwgMjM4NjAsIDIzODY1LCAyMzg2OSwgMjM4NzQsIDIzODc4LCAyMzg4MywgCisgICAgMjM4ODcsIDIzODkyLCAyMzg5NiwgMjM5MDEsIDIzOTA1LCAyMzkxMCwgMjM5MTYsIDIzOTIwLCAyMzkyNiwgMjM5MzEsIAorICAgIDIzOTM3LCAyMzk0MSwgMjM5NDcsIDIzOTUyLCAyMzk1NiwgMjM5NjAsIDIzOTY0LCAyMzk2OCwgMjM5NzIsIDIzOTc3LCAKKyAgICAyMzk4MCwgMjM5ODQsIDIzOTg5LCAyMzk5MywgMjM5OTgsIDI0MDAxLCAyNDAwNSwgMjQwMDksIDI0MDEzLCAyNDAxNywgCisgICAgMjQwMjEsIDI0MDI1LCAyNDAyOSwgMjQwMzMsIDI0MDM3LCAyNDA0MSwgMjQwNDUsIDI0MDUwLCAyNDA1NCwgMjQwNTgsIAorICAgIDI0MDY0LCAyNDA2OCwgMjQwNzQsIDI0MDc4LCAyNDA4NCwgMjQwODgsIDI0MDkyLCAyNDA5NiwgMjQxMDAsIDI0MTA0LCAKKyAgICAyNDEwOSwgMjQxMTMsIDI0MTE3LCAyNDEyMSwgMjQxMjUsIDI0MTI5LCAyNDEzMywgMjQxMzcsIDI0MTQxLCAyNDE0NSwgCisgICAgMjQxNDksIDI0MTU1LCAyNDE2MSwgMjQxNjcsIDI0MTczLCAyNDE3OSwgMjQxODQsIDI0MTkwLCAyNDE5NiwgMjQyMDIsIAorICAgIDI0MjA2LCAyNDIxMCwgMjQyMTQsIDI0MjE4LCAyNDIyMiwgMjQyMjYsIDI0MjMwLCAyNDIzNCwgMjQyMzgsIDI0MjQyLCAKKyAgICAyNDI0NiwgMjQyNTAsIDI0MjU0LCAyNDI1OSwgMjQyNjQsIDI0MjY5LCAyNDI3MywgMjQyNzcsIDI0MjgxLCAyNDI4NSwgCisgICAgMjQyODksIDI0MjkzLCAyNDI5NywgMjQzMDEsIDI0MzA1LCAyNDMwOSwgMjQzMTUsIDI0MzIxLCAyNDMyNywgMjQzMzMsIAorICAgIDI0MzM5LCAyNDM0NSwgMjQzNTEsIDI0MzU3LCAyNDM2MywgMjQzNjcsIDI0MzcxLCAyNDM3NSwgMjQzNzksIDI0MzgzLCAKKyAgICAyNDM4NywgMjQzOTEsIDI0Mzk3LCAyNDQwMywgMjQ0MDksIDI0NDE1LCAyNDQyMSwgMjQ0MjcsIDI0NDMzLCAyNDQzOSwgCisgICAgMjQ0NDUsIDI0NDUwLCAyNDQ1NSwgMjQ0NjAsIDI0NDY1LCAyNDQ3MSwgMjQ0NzcsIDI0NDgzLCAyNDQ4OSwgMjQ0OTUsIAorICAgIDI0NTAxLCAyNDUwNywgMjQ1MTIsIDI0NTE4LCAyNDUyNCwgMjQ1MzAsIDI0NTM1LCAyNDU0MSwgMjQ1NDcsIDI0NTUzLCAKKyAgICAyNDU1OCwgMjQ1NjMsIDI0NTY4LCAyNDU3MywgMjQ1NzgsIDI0NTgzLCAyNDU4OCwgMjQ1OTMsIDI0NTk4LCAyNDYwMywgCisgICAgMjQ2MDgsIDI0NjEzLCAyNDYxNywgMjQ2MjIsIDI0NjI3LCAyNDYzMiwgMjQ2MzcsIDI0NjQyLCAyNDY0NywgMjQ2NTIsIAorICAgIDI0NjU3LCAyNDY2MiwgMjQ2NjcsIDI0NjcyLCAyNDY3NywgMjQ2ODIsIDI0Njg3LCAyNDY5MiwgMjQ2OTcsIDI0NzAyLCAKKyAgICAyNDcwNywgMjQ3MTIsIDI0NzE3LCAyNDcyMiwgMjQ3MjcsIDI0NzMyLCAyNDczNywgMjQ3NDIsIDI0NzQ3LCAyNDc1MiwgCisgICAgMjQ3NTcsIDI0NzYyLCAyNDc2NiwgMjQ3NzEsIDI0Nzc2LCAyNDc4MSwgMjQ3ODYsIDI0NzkxLCAyNDc5NiwgMjQ4MDEsIAorICAgIDI0ODA2LCAyNDgxMSwgMjQ4MTYsIDI0ODIxLCAyNDgyNiwgMjQ4MzEsIDI0ODM2LCAyNDg0MSwgMjQ4NDYsIDI0ODUxLCAKKyAgICAyNDg1NiwgMjQ4NjEsIDI0ODY2LCAyNDg3MSwgMjQ4NzYsIDI0ODgxLCAyNDg4NiwgMjQ4OTEsIDI0ODk1LCAyNDkwMCwgCisgICAgMjQ5MDUsIDI0OTEwLCAyNDkxNSwgMjQ5MjAsIDI0OTI0LCAyNDkyOSwgMjQ5MzQsIDI0OTM5LCAyNDk0NCwgMjQ5NDksIAorICAgIDI0OTUzLCAyNDk1OCwgMjQ5NjQsIDI0OTY5LCAyNDk3NCwgMjQ5NzksIDI0OTg0LCAyNDk5MCwgMjQ5OTUsIDI1MDAwLCAKKyAgICAyNTAwNSwgMjUwMTAsIDI1MDE1LCAyNTAyMCwgMjUwMjUsIDI1MDMwLCAyNTAzNSwgMjUwNDAsIDI1MDQ1LCAyNTA1MCwgCisgICAgMjUwNTUsIDI1MDYwLCAyNTA2NSwgMjUwNzAsIDI1MDc1LCAyNTA4MCwgMjUwODUsIDI1MDkwLCAyNTA5NSwgMjUxMDAsIAorICAgIDI1MTA1LCAyNTExMCwgMjUxMTUsIDI1MTIwLCAyNTEyNSwgMjUxMzAsIDI1MTM1LCAyNTE0MCwgMjUxNDUsIDI1MTUwLCAKKyAgICAyNTE1NSwgMjUxNjAsIDI1MTY1LCAyNTE3MCwgMjUxNzUsIDI1MTgwLCAyNTE4NSwgMjUxOTAsIDI1MTk1LCAyNTIwMCwgCisgICAgMjUyMDUsIDI1MjEwLCAyNTIxNiwgMjUyMjEsIDI1MjI2LCAyNTIzMSwgMjUyMzYsIDI1MjQxLCAyNTI0NiwgMjUyNTEsIAorICAgIDI1MjU2LCAyNTI2MSwgMjUyNjYsIDI1MjcxLCAyNTI3NSwgMjUyODAsIDI1Mjg1LCAyNTI5MCwgMjUyOTUsIDI1MzAwLCAKKyAgICAyNTMwNSwgMjUzMTAsIDI1MzE1LCAyNTMyMCwgMjUzMjUsIDI1MzMwLCAyNTMzNSwgMjUzNDAsIDI1MzQ1LCAyNTM1MCwgCisgICAgMjUzNTUsIDI1MzYwLCAyNTM2NSwgMjUzNzAsIDI1Mzc1LCAyNTM4MCwgMjUzODUsIDI1MzkwLCAyNTM5NSwgMjU0MDAsIAorICAgIDI1NDA1LCAyNTQxMSwgMjU0MTUsIDI1NDE5LCAyNTQyMywgMjU0MjcsIDI1NDMxLCAyNTQzNSwgMjU0MzksIDI1NDQzLCAKKyAgICAyNTQ0OSwgMjU0NTUsIDI1NDYxLCAyNTQ2NywgMjU0NzMsIDI1NDc5LCAyNTQ4NSwgMjU0OTIsIDI1NDk4LCAyNTUwMywgCisgICAgMjU1MDgsIDI1NTEzLCAyNTUxOCwgMjU1MjMsIDI1NTI4LCAyNTUzMywgMjU1MzgsIDI1NTQzLCAyNTU0OCwgMjU1NTMsIAorICAgIDI1NTU4LCAyNTU2MywgMjU1NjgsIDI1NTczLCAyNTU3OCwgMjU1ODMsIDI1NTg4LCAyNTU5MywgMjU1OTgsIDI1NjAzLCAKKyAgICAyNTYwOCwgMjU2MTMsIDI1NjE4LCAyNTYyMywgMjU2MjgsIDI1NjMzLCAyNTYzOCwgMCwgMCwgMCwgMjU2NDUsIDI1NjU1LCAKKyAgICAyNTY1OSwgMjU2NjYsIDI1NjcwLCAyNTY3NCwgMjU2NzgsIDI1Njg2LCAyNTY5MCwgMjU2OTUsIDI1NzAwLCAyNTcwNSwgCisgICAgMjU3MDksIDI1NzE0LCAyNTcxOSwgMjU3MjIsIDI1NzI2LCAyNTczMCwgMjU3MzksIDI1NzQzLCAyNTc0NywgMjU3NTMsIAorICAgIDI1NzU3LCAyNTc2MSwgMjU3NjksIDI1NzczLCAyNTc4MSwgMjU3ODcsIDI1NzkzLCAyNTc5OSwgMjU4MDUsIDI1ODE1LCAKKyAgICAyNTgyMSwgMjU4MjUsIDI1ODM0LCAyNTgzNywgMjU4NDMsIDI1ODQ3LCAyNTg1MywgMjU4NTgsIDI1ODY0LCAyNTg3MiwgCisgICAgMjU4NzgsIDI1ODg0LCAyNTg5MiwgMjU4OTgsIDI1OTAyLCAyNTkwNiwgMjU5MTYsIDI1OTIyLCAyNTkyNiwgMjU5MzYsIAorICAgIDI1OTQyLCAyNTk0NiwgMjU5NTAsIDI1OTU3LCAyNTk2NCwgMjU5NjksIDI1OTc0LCAyNTk4MywgMjU5ODcsIDI1OTkxLCAKKyAgICAyNTk5NSwgMjYwMDMsIDI2MDEwLCAyNjAxNCwgMjYwMTgsIDI2MDIyLCAyNjAyNiwgMjYwMzAsIDI2MDM0LCAyNjAzOCwgCisgICAgMjYwNDIsIDI2MDQ2LCAyNjA1MCwgMjYwNTQsIDI2MDU5LCAyNjA2NCwgMjYwNjksIDI2MDczLCAyNjA3NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwODEsIDI2MDg1LCAyNjA4OSwgMjYwOTMsIDI2MDk3LCAKKyAgICAyNjEwMiwgMjYxMDcsIDI2MTEyLCAyNjExNywgMjYxMjEsIDI2MTI1LCAyNjEzMCwgMjYxMzQsIDAsIDI2MTM4LCAyNjE0MywgCisgICAgMjYxNDgsIDI2MTUyLCAyNjE1NiwgMjYxNjEsIDI2MTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNjE3MSwgMjYxNzUsIDI2MTc5LCAyNjE4MywgMjYxODcsIDI2MTkyLCAyNjE5NywgMjYyMDIsIDI2MjA3LCAyNjIxMSwgCisgICAgMjYyMTUsIDI2MjIwLCAyNjIyNCwgMjYyMjgsIDI2MjMyLCAyNjIzNywgMjYyNDIsIDI2MjQ2LCAyNjI1MCwgMjYyNTUsIAorICAgIDI2MjYwLCAyNjI2NSwgMjYyNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2Mjc2LCAyNjI4MCwgMjYyODQsIAorICAgIDI2Mjg4LCAyNjI5MiwgMjYyOTcsIDI2MzAyLCAyNjMwNywgMjYzMTIsIDI2MzE2LCAyNjMyMCwgMjYzMjUsIDI2MzI5LCAKKyAgICAyNjMzMywgMjYzMzcsIDI2MzQyLCAyNjM0NywgMjYzNTEsIDI2MzU1LCAyNjM2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjYzNjUsIDI2MzY5LCAyNjM3MywgMjYzNzcsIDI2MzgxLCAyNjM4NiwgMjYzOTEsIDI2Mzk2LCAKKyAgICAyNjQwMSwgMjY0MDUsIDI2NDA5LCAyNjQxNCwgMjY0MTgsIDAsIDI2NDIyLCAyNjQyNywgMjY0MzIsIDAsIDI2NDM2LCAKKyAgICAyNjQ0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0NDYsIDI2NDQ5LCAyNjQ1MywgMjY0NTcsIAorICAgIDI2NDYxLCAyNjQ2NSwgMjY0NjksIDI2NDczLCAyNjQ3NywgMjY0ODEsIDI2NDg1LCAyNjQ4OSwgMjY0OTMsIDI2NDk3LCAKKyAgICAyNjUwMSwgMjY1MDUsIDI2NTA5LCAyNjUxMywgMjY1MTYsIDI2NTIwLCAyNjUyNCwgMjY1MjgsIDI2NTMyLCAyNjUzNiwgCisgICAgMjY1NDAsIDI2NTQ0LCAyNjU0OCwgMjY1NTIsIDI2NTU2LCAyNjU2MCwgMjY1NjQsIDI2NTY4LCAyNjU3MSwgMjY1NzQsIAorICAgIDI2NTc4LCAyNjU4MiwgMjY1ODgsIDI2NTk0LCAyNjYwMCwgMjY2MDYsIDI2NjEyLCAyNjYxOCwgMjY2MjQsIDI2NjMwLCAKKyAgICAyNjYzNiwgMjY2NDIsIDI2NjQ4LCAyNjY1NCwgMjY2NjAsIDI2NjY2LCAyNjY3NSwgMjY2ODQsIDI2NjkwLCAyNjY5NiwgCisgICAgMjY3MDIsIDI2NzA3LCAyNjcxMSwgMjY3MTYsIDI2NzIxLCAyNjcyNiwgMjY3MzAsIDI2NzM1LCAyNjc0MCwgMjY3NDUsIAorICAgIDI2NzQ5LCAyNjc1NCwgMjY3NTgsIDI2NzYzLCAyNjc2OCwgMjY3NzMsIDI2Nzc4LCAyNjc4MiwgMjY3ODYsIDI2NzkwLCAKKyAgICAyNjc5NCwgMjY3OTgsIDI2ODAyLCAyNjgwNiwgMjY4MTAsIDI2ODE0LCAyNjgxOCwgMjY4MjQsIDI2ODI4LCAyNjgzMiwgCisgICAgMjY4MzYsIDI2ODQwLCAyNjg0NCwgMjY4NTIsIDI2ODU4LCAyNjg2MiwgMjY4NjgsIDI2ODcyLCAyNjg3OCwgMjY4ODIsIDAsIAorICAgIDAsIDI2ODg2LCAyNjg5MCwgMjY4OTMsIDI2ODk2LCAyNjg5OSwgMjY5MDIsIDI2OTA1LCAyNjkwOCwgMjY5MTEsIDI2OTE0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjkxNywgMjY5MjUsIDI2OTMzLCAyNjk0MSwgMjY5NDksIDI2OTU3LCAyNjk2NSwgMjY5NzMsIAorICAgIDI2OTgxLCAyNjk4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5OTcsIDI3MDAwLCAyNzAwMywgMjcwMDYsIDI3MDExLCAyNzAxNCwgCisgICAgMjcwMTksIDI3MDI2LCAyNzAzNCwgMjcwMzksIDI3MDQ2LCAyNzA0OSwgMjcwNTYsIDI3MDYzLCAyNzA3MCwgMCwgMjcwNzQsIAorICAgIDI3MDc4LCAyNzA4MSwgMjcwODQsIDI3MDg3LCAyNzA5MCwgMjcwOTMsIDI3MDk2LCAyNzA5OSwgMjcxMDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDI3MTA1LCAyNzEwOCwgMjcxMTEsIDI3MTE0LCAyNzExNywgMjcxMjAsIDI3MTI0LCAyNzEyOCwgMjcxMzIsIAorICAgIDI3MTM1LCAyNzEzOSwgMjcxNDMsIDI3MTQ2LCAyNzE1MCwgMjcxNTQsIDI3MTU3LCAyNzE2MSwgMjcxNjQsIDI3MTY4LCAKKyAgICAyNzE3MiwgMjcxNzYsIDI3MTgwLCAyNzE4NCwgMjcxODcsIDI3MTkwLCAyNzE5NCwgMjcxOTgsIDI3MjAxLCAyNzIwNSwgCisgICAgMjcyMDksIDI3MjEzLCAyNzIxNywgMjcyMjEsIDI3MjI1LCAyNzIyOSwgMjcyMzMsIDI3MjQwLCAyNzI0NSwgMjcyNTAsIAorICAgIDI3MjU1LCAyNzI2MCwgMjcyNjYsIDI3MjcyLCAyNzI3OCwgMjcyODQsIDI3Mjg5LCAyNzI5NSwgMjczMDEsIDI3MzA2LCAKKyAgICAyNzMxMiwgMjczMTgsIDI3MzI0LCAyNzMzMCwgMjczMzYsIDI3MzQxLCAyNzM0NywgMjczNTIsIDI3MzU4LCAyNzM2NCwgCisgICAgMjczNzAsIDI3Mzc2LCAyNzM4MiwgMjczODcsIDI3MzkyLCAyNzM5OCwgMjc0MDQsIDI3NDA5LCAyNzQxNSwgMjc0MjAsIAorICAgIDI3NDI2LCAyNzQzMSwgMjc0MzYsIDI3NDQyLCAyNzQ0OCwgMjc0NTQsIDI3NDYwLCAyNzQ2NiwgMjc0NzIsIDI3NDc4LCAKKyAgICAyNzQ4NCwgMjc0OTAsIDI3NDk2LCAyNzUwMiwgMjc1MDgsIDI3NTEzLCAyNzUxOCwgMjc1MjMsIDI3NTI5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyNzUzNSwgMjc1NDQsIDI3NTUzLCAyNzU2MSwgMjc1NjksIDI3NTc5LCAyNzU4NywgMjc1OTYsIAorICAgIDI3NjAzLCAyNzYxMCwgMjc2MTcsIDI3NjI1LCAyNzYzMywgMjc2NDEsIDI3NjQ5LCAyNzY1NywgMjc2NjUsIDI3NjczLCAKKyAgICAyNzY4MSwgMjc2ODgsIDI3Njk2LCAyNzcwNCwgMjc3MTIsIDI3NzIwLCAyNzcyOCwgMjc3MzgsIDI3NzQ4LCAyNzc1OCwgCisgICAgMjc3NjgsIDI3Nzc4LCAyNzc4OCwgMjc3OTgsIDI3ODA4LCAyNzgxOCwgMjc4MjgsIDI3ODM4LCAyNzg0OCwgMjc4NTgsIAorICAgIDI3ODY4LCAyNzg3NiwgMjc4ODQsIDI3ODk0LCAyNzkwMiwgMCwgMCwgMCwgMCwgMCwgMjc5MTIsIDI3OTE2LCAyNzkyMCwgCisgICAgMjc5MjQsIDI3OTI4LCAyNzkzMiwgMjc5MzYsIDI3OTQwLCAyNzk0NCwgMjc5NDgsIDI3OTUyLCAyNzk1NiwgMjc5NjAsIAorICAgIDI3OTY0LCAyNzk2OCwgMjc5NzIsIDI3OTc2LCAyNzk4MCwgMjc5ODQsIDI3OTg4LCAyNzk5MiwgMjc5OTYsIDI4MDAwLCAKKyAgICAyODAwNCwgMjgwMTAsIDI4MDE0LCAyODAyMCwgMjgwMjQsIDI4MDMwLCAyODAzNCwgMjgwNDAsIDI4MDQ0LCAyODA0OCwgCisgICAgMjgwNTIsIDI4MDU2LCAyODA2MCwgMjgwNjQsIDI4MDcwLCAyODA3NiwgMjgwODIsIDI4MDg4LCAyODA5MywgMjgwOTksIAorICAgIDI4MTA1LCAyODExMSwgMjgxMTcsIDI4MTIzLCAyODEyOSwgMjgxMzYsIDI4MTQyLCAyODE0NywgMjgxNTIsIDI4MTU2LCAKKyAgICAyODE2MCwgMjgxNjQsIDI4MTY4LCAyODE3MiwgMjgxNzYsIDI4MTgwLCAyODE4NiwgMjgxOTIsIDI4MTk4LCAyODIwMywgCisgICAgMjgyMTAsIDI4MjE1LCAyODIyMCwgMjgyMjYsIDI4MjMxLCAyODIzOCwgMjgyNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDI4MjUyLCAyODI1OCwgMjgyNjIsIDI4MjY3LCAyODI3MiwgMjgyNzcsIDI4MjgyLCAyODI4NywgMjgyOTIsIAorICAgIDI4Mjk3LCAyODMwMiwgMjgzMDcsIDI4MzEyLCAyODMxNywgMjgzMjIsIDI4MzI3LCAyODMzMSwgMjgzMzUsIDI4MzQwLCAKKyAgICAyODM0NSwgMjgzNTAsIDI4MzU0LCAyODM1OCwgMjgzNjIsIDI4MzY3LCAyODM3MiwgMjgzNzcsIDI4MzgyLCAyODM4NiwgMCwgCisgICAgMCwgMCwgMjgzOTAsIDI4Mzk1LCAyODQwMCwgMjg0MDUsIDI4NDExLCAyODQxNywgMjg0MjMsIDI4NDI5LCAyODQzNCwgCisgICAgMjg0MzksIDI4NDQ1LCAyODQ1MSwgMCwgMCwgMCwgMCwgMjg0NTgsIDI4NDYzLCAyODQ2OSwgMjg0NzUsIDI4NDgxLCAKKyAgICAyODQ4NiwgMjg0OTEsIDI4NDk2LCAyODUwMSwgMjg1MDcsIDI4NTEyLCAyODUxNywgMCwgMCwgMCwgMCwgMjg1MjIsIDAsIDAsIAorICAgIDAsIDI4NTI3LCAyODUzMiwgMjg1MzcsIDI4NTQyLCAyODU0NiwgMjg1NTAsIDI4NTU0LCAyODU1OCwgMjg1NjIsIDI4NTY2LCAKKyAgICAyODU3MCwgMjg1NzQsIDI4NTc4LCAyODU4MywgMjg1ODksIDI4NTk1LCAyODYwMSwgMjg2MDYsIDI4NjExLCAyODYxNywgCisgICAgMjg2MjMsIDI4NjI5LCAyODYzNCwgMjg2NDAsIDI4NjQ1LCAyODY1MSwgMjg2NTcsIDI4NjYyLCAyODY2OCwgMjg2NzQsIAorICAgIDI4NjgwLCAyODY4NSwgMjg2OTAsIDI4Njk1LCAyODcwMSwgMjg3MDcsIDI4NzEyLCAyODcxOCwgMjg3MjMsIDI4NzI5LCAKKyAgICAyODczNCwgMjg3NDAsIDAsIDAsIDI4NzQ2LCAyODc1MiwgMjg3NTgsIDI4NzY0LCAyODc3MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjg3NzYsIDI4NzgzLCAyODc5MCwgMjg3OTYsIDI4ODAzLCAyODgxMCwgMjg4MTYsIDI4ODIzLCAKKyAgICAyODgzMCwgMjg4MzcsIDI4ODQzLCAyODg0OSwgMjg4NTYsIDI4ODYyLCAyODg2OCwgMjg4NzUsIDI4ODgyLCAyODg4OCwgCisgICAgMjg4OTUsIDI4OTAyLCAyODkwOCwgMjg5MTQsIDI4OTIxLCAyODkyNywgMjg5MzMsIDI4OTQwLCAyODk0NiwgMjg5NTMsIAorICAgIDI4OTYwLCAyODk2NywgMjg5NzQsIDI4OTgxLCAyODk4OCwgMjg5OTQsIDI5MDAxLCAyOTAwOCwgMjkwMTQsIDI5MDIxLCAKKyAgICAyOTAyOCwgMjkwMzUsIDI5MDQyLCAyOTA0OSwgMjkwNTYsIDI5MDYzLCAwLCAwLCAwLCAwLCAyOTA3MCwgMjkwNzgsIAorICAgIDI5MDg1LCAyOTA5MiwgMjkwOTgsIDI5MTA1LCAyOTExMSwgMjkxMTgsIDI5MTI0LCAyOTEzMSwgMjkxMzgsIDI5MTQ1LCAKKyAgICAyOTE1MiwgMjkxNTksIDI5MTY2LCAyOTE3MywgMjkxODAsIDI5MTg3LCAyOTE5NCwgMjkyMDEsIDI5MjA4LCAyOTIxNCwgCisgICAgMjkyMjEsIDI5MjI4LCAyOTIzNSwgMjkyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjQ3LCAyOTI1MywgMjkyNTgsIDI5MjYzLCAKKyAgICAyOTI2OCwgMjkyNzMsIDI5Mjc4LCAyOTI4MywgMjkyODgsIDI5MjkzLCAyOTI5OCwgMCwgMCwgMCwgMjkzMDQsIDI5MzEwLCAKKyAgICAyOTMxNiwgMjkzMjAsIDI5MzI2LCAyOTMzMiwgMjkzMzgsIDI5MzQ0LCAyOTM1MCwgMjkzNTYsIDI5MzYyLCAyOTM2OCwgCisgICAgMjkzNzQsIDI5MzgwLCAyOTM4NiwgMjkzOTIsIDI5Mzk4LCAyOTQwNCwgMjk0MTAsIDI5NDE0LCAyOTQyMCwgMjk0MjYsIAorICAgIDI5NDMyLCAyOTQzOCwgMjk0NDQsIDI5NDUwLCAyOTQ1NiwgMjk0NjIsIDI5NDY4LCAyOTQ3NCwgMjk0ODAsIDI5NDg2LCAKKyAgICAyOTQ5MiwgMjk0OTgsIDI5NTA0LCAyOTUwOCwgMjk1MTMsIDI5NTE4LCAyOTUyMywgMjk1MjcsIDI5NTMyLCAyOTUzNiwgCisgICAgMjk1NDEsIDI5NTQ2LCAyOTU1MSwgMjk1NTUsIDI5NTYwLCAyOTU2NSwgMjk1NzAsIDI5NTc1LCAyOTU4MCwgMjk1ODQsIAorICAgIDI5NTg4LCAyOTU5MywgMjk1OTgsIDI5NjAyLCAyOTYwNiwgMjk2MTAsIDI5NjE1LCAyOTYyMCwgMjk2MjUsIDI5NjMwLCAwLCAKKyAgICAwLCAyOTYzNiwgMjk2NDAsIDI5NjQ3LCAyOTY1MiwgMjk2NTgsIDI5NjY0LCAyOTY2OSwgMjk2NzUsIDI5NjgxLCAyOTY4NiwgCisgICAgMjk2OTIsIDI5Njk4LCAyOTcwNCwgMjk3MDksIDI5NzE1LCAyOTcyMCwgMjk3MjUsIDI5NzMxLCAyOTczNiwgMjk3NDIsIAorICAgIDI5NzQ3LCAyOTc1MywgMjk3NTksIDI5NzY1LCAyOTc3MSwgMjk3NzUsIDI5NzgwLCAyOTc4NSwgMjk3OTEsIDI5Nzk3LCAKKyAgICAyOTgwMiwgMjk4MDgsIDI5ODE0LCAyOTgxOCwgMjk4MjMsIDI5ODI4LCAyOTgzMiwgMjk4MzcsIDI5ODQyLCAyOTg0NywgCisgICAgMjk4NTIsIDI5ODU4LCAyOTg2NCwgMjk4NjksIDI5ODc0LCAyOTg3OSwgMjk4ODMsIDI5ODg4LCAyOTg5MiwgMjk4OTcsIAorICAgIDI5OTAxLCAyOTkwNiwgMjk5MTEsIDI5OTE2LCAyOTkyMSwgMjk5MjcsIDI5OTMzLCAyOTk0MCwgMjk5NTAsIDI5OTU5LCAKKyAgICAyOTk2NiwgMjk5NzIsIDI5OTgyLCAyOTk4NywgMjk5OTMsIDAsIDI5OTk4LCAzMDAwMywgMzAwMDgsIDMwMDE2LCAzMDAyMiwgCisgICAgMzAwMzAsIDMwMDM1LCAzMDA0MSwgMzAwNDcsIDMwMDUzLCAzMDA1OCwgMzAwNjQsIDMwMDY5LCAzMDA3NiwgMzAwODIsIAorICAgIDMwMDg3LCAzMDA5MywgMzAwOTksIDMwMTA1LCAzMDExMiwgMzAxMTksIDMwMTI2LCAzMDEzMSwgMzAxMzYsIDMwMTQzLCAKKyAgICAzMDE1MCwgMzAxNTcsIDMwMTY0LCAzMDE3MSwgMCwgMCwgMzAxNzgsIDMwMTg1LCAzMDE5MiwgMzAxOTgsIDMwMjA0LCAKKyAgICAzMDIxMCwgMzAyMTYsIDMwMjIyLCAzMDIyOCwgMzAyMzQsIDMwMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDI0NiwgMzAyNTIsIAorICAgIDMwMjU3LCAzMDI2MiwgMzAyNjcsIDMwMjcyLCAzMDI3NywgMzAyODIsIDMwMjg3LCAzMDI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzAyOTcsIDMwMzAyLCAzMDMwNywgMzAzMTIsIDMwMzE3LCAzMDMyMiwgMzAzMjcsIDMwMzM2LCAzMDM0MywgMzAzNDgsIAorICAgIDMwMzUzLCAzMDM1OCwgMzAzNjMsIDMwMzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDM3MCwgMzAzNzYsIAotICAgIDMwMzgyLCAzMDM4NiwgMzAzOTAsIDMwMzk0LCAzMDM5OCwgMzA0MDQsIDMwNDA4LCAzMDQxNCwgMzA0MTgsIDMwNDI0LCAKLSAgICAzMDQzMCwgMzA0MzgsIDMwNDQ0LCAzMDQ1MiwgMzA0NTYsIDMwNDYwLCAzMDQ2NCwgMzA0NzAsIDMwNDczLCAzMDQ3OSwgCi0gICAgMzA0ODMsIDMwNDg5LCAzMDQ5MywgMzA0OTcsIDMwNTAzLCAzMDUwNywgMzA1MTMsIDMwNTE3LCAzMDUyMywgMzA1MzEsIAotICAgIDMwNTM5LCAzMDU0NywgMzA1NTMsIDMwNTU3LCAzMDU2MywgMzA1NjcsIDMwNTczLCAzMDU3NiwgMzA1NzksIDMwNTg1LCAKLSAgICAzMDU4OSwgMzA1OTUsIDMwNTk4LCAzMDYwMSwgMzA2MDQsIDMwNjA4LCAzMDYxMiwgMzA2MTgsIDMwNjI0LCAzMDYyNywgCi0gICAgMzA2MzAsIDMwNjM0LCAzMDYzOSwgMzA2NDQsIDMwNjUxLCAzMDY1NiwgMzA2NjMsIDMwNjcwLCAzMDY3OSwgMzA2ODYsIAotICAgIDMwNjk1LCAzMDcwMCwgMzA3MDcsIDMwNzE0LCAzMDcyMywgMzA3MjgsIDMwNzM1LCAzMDc0MCwgMzA3NDYsIDMwNzUyLCAKLSAgICAzMDc1OCwgMzA3NjQsIDMwNzcwLCAzMDc3NiwgMCwgMCwgMCwgMCwgMzA3ODIsIDMwNzg2LCAzMDc4OSwgMzA3OTIsIAotICAgIDMwNzk1LCAzMDc5OCwgMzA4MDEsIDMwODA0LCAzMDgwNywgMzA4MTAsIDMwODEzLCAzMDgxNiwgMzA4MTksIDMwODIyLCAKLSAgICAzMDgyNywgMzA4MzIsIDMwODM3LCAzMDg0MCwgMzA4NDUsIDMwODUwLCAzMDg1NSwgMzA4NjAsIDMwODY3LCAzMDg3MiwgCi0gICAgMzA4NzcsIDMwODgyLCAzMDg4NywgMzA4OTQsIDMwOTAwLCAzMDkwNiwgMzA5MTIsIDMwOTE4LCAzMDkyNCwgMzA5MzMsIAotICAgIDMwOTQyLCAzMDk0OCwgMzA5NTQsIDMwOTYyLCAzMDk3MCwgMzA5NzksIDMwOTg4LCAzMDk5NiwgMzEwMDQsIDMxMDEzLCAKLSAgICAzMTAyMiwgMCwgMCwgMCwgMzEwMzAsIDMxMDM0LCAzMTAzOCwgMzEwNDIsIDMxMDQ1LCAzMTA0OCwgMzEwNTEsIDMxMDU1LCAKLSAgICAzMTA1OCwgMzEwNjEsIDMxMDY1LCAzMTA2OCwgMzEwNzIsIDMxMDc2LCAzMTA4MCwgMzEwODQsIDMxMDg4LCAzMTA5MiwgCi0gICAgMzEwOTYsIDMxMTAwLCAzMTEwNCwgMzExMDcsIDMxMTEwLCAzMTExNCwgMzExMTgsIDMxMTIyLCAzMTEyNSwgMzExMjgsIAotICAgIDMxMTMxLCAzMTEzNSwgMzExMzksIDMxMTQyLCAzMTE0NiwgMzExNDksIDMxMTU0LCAzMTE1OSwgMzExNjQsIDMxMTY5LCAKLSAgICAzMTE3NCwgMzExNzksIDMxMTg0LCAzMTE4OSwgMzExOTQsIDMxMTk4LCAzMTIwMiwgMzEyMDgsIDMxMjE1LCAzMTIxOSwgCi0gICAgMzEyMjMsIDMxMjI3LCAzMTIzMCwgMzEyMzMsIDMxMjM2LCAzMTIzOSwgMzEyNDIsIDMxMjQ1LCAzMTI0OCwgMzEyNTEsIAotICAgIDMxMjU0LCAzMTI1NywgMzEyNjEsIDMxMjY1LCAzMTI2OSwgMzEyNzQsIDMxMjc4LCAzMTI4MiwgMzEyODgsIDMxMjkyLCAKLSAgICAzMTI5OCwgMzEzMDQsIDMxMzA5LCAzMTMxNiwgMzEzMjAsIDMxMzI2LCAzMTMzMCwgMzEzMzYsIDMxMzQxLCAzMTM0OCwgCi0gICAgMzEzNTUsIDMxMzYwLCAzMTM2NywgMzEzNzIsIDMxMzc3LCAzMTM4MSwgMzEzODcsIDMxMzkxLCAzMTM5NywgMzE0MDQsIAotICAgIDMxNDExLCAzMTQxNSwgMzE0MjEsIDMxNDI3LCAzMTQzMSwgMzE0MzcsIDMxNDQyLCAzMTQ0NywgMzE0NTQsIDMxNDU5LCAKLSAgICAzMTQ2NCwgMzE0NjksIDMxNDc0LCAzMTQ3OCwgMzE0ODIsIDMxNDg3LCAzMTQ5MiwgMzE0OTksIDMxNTA1LCAzMTUxMCwgCi0gICAgMzE1MTcsIDMxNTIyLCAzMTUyOSwgMzE1MzQsIDMxNTQzLCAzMTU0OSwgMzE1NTUsIDMxNTU5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzMTU2MywgMzE1NzIsIDMxNTc5LCAzMTU4NiwgMzE1OTMsIDMxNTk2LCAzMTYwMCwgMzE2MDQsIDMxNjA4LCAKLSAgICAzMTYxMiwgMzE2MTYsIDMxNjIwLCAzMTYyNCwgMzE2MjgsIDMxNjMyLCAzMTYzNiwgMzE2NDAsIDMxNjQ0LCAzMTY0NywgCi0gICAgMzE2NTAsIDMxNjU0LCAzMTY1OCwgMzE2NjIsIDMxNjY2LCAzMTY3MCwgMzE2NzQsIDMxNjc3LCAzMTY4MSwgMzE2ODUsIAotICAgIDMxNjg5LCAzMTY5MywgMzE2OTYsIDMxNjk5LCAzMTcwMywgMzE3MDYsIDMxNzEwLCAzMTcxNCwgMzE3MTcsIDMxNzIxLCAKLSAgICAzMTcyNSwgMzE3MjgsIDMxNzMzLCAzMTczOCwgMzE3NDMsIDMxNzQ3LCAzMTc1MSwgMzE3NTYsIDMxNzYwLCAzMTc2NSwgCi0gICAgMzE3NjksIDMxNzc0LCAzMTc3OCwgMzE3ODIsIDMxNzg3LCAzMTc5MiwgMzE3OTYsIDMxODAxLCAzMTgwNiwgMzE4MTEsIAotICAgIDMxODE1LCAwLCAwLCAwLCAzMTgxOSwgMzE4MjQsIDMxODMzLCAzMTgzOCwgMzE4NDUsIDMxODUwLCAzMTg1NCwgMzE4NTcsIAotICAgIDMxODYwLCAzMTg2MywgMzE4NjYsIDMxODY5LCAzMTg3MiwgMzE4NzUsIDMxODc4LCAwLCAwLCAwLCAzMTg4MSwgMzE4ODUsIAotICAgIDMxODg5LCAzMTg5MywgMzE5MDAsIDMxOTA2LCAzMTkxMiwgMzE5MTgsIDMxOTI0LCAzMTkzMCwgMzE5MzYsIDMxOTQyLCAKLSAgICAzMTk0OCwgMzE5NTQsIDMxOTYxLCAzMTk2OCwgMzE5NzUsIDMxOTgyLCAzMTk4OSwgMzE5OTYsIDMyMDAzLCAzMjAxMCwgCi0gICAgMzIwMTcsIDMyMDI0LCAzMjAzMSwgMzIwMzgsIDMyMDQ1LCAzMjA1MiwgMzIwNTksIDMyMDY2LCAzMjA3MywgMzIwODAsIAotICAgIDMyMDg3LCAzMjA5NCwgMzIxMDEsIDMyMTA4LCAzMjExNSwgMzIxMjIsIDMyMTI5LCAzMjEzNiwgMzIxNDMsIDMyMTUwLCAKLSAgICAzMjE1NywgMzIxNjQsIDMyMTcyLCAzMjE4MCwgMzIxODgsIDMyMTk0LCAzMjIwMCwgMzIyMDYsIDMyMjE0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDM3MywgMzAzNzksIAorICAgIDMwMzg1LCAzMDM4OSwgMzAzOTMsIDMwMzk3LCAzMDQwMSwgMzA0MDcsIDMwNDExLCAzMDQxNywgMzA0MjEsIDMwNDI3LCAKKyAgICAzMDQzMywgMzA0NDEsIDMwNDQ3LCAzMDQ1NSwgMzA0NTksIDMwNDYzLCAzMDQ2NywgMzA0NzMsIDMwNDc2LCAzMDQ4MiwgCisgICAgMzA0ODYsIDMwNDkyLCAzMDQ5NiwgMzA1MDAsIDMwNTA2LCAzMDUxMCwgMzA1MTYsIDMwNTIwLCAzMDUyNiwgMzA1MzQsIAorICAgIDMwNTQyLCAzMDU1MCwgMzA1NTYsIDMwNTYwLCAzMDU2NiwgMzA1NzAsIDMwNTc2LCAzMDU3OSwgMzA1ODIsIDMwNTg4LCAKKyAgICAzMDU5MiwgMzA1OTgsIDMwNjAxLCAzMDYwNCwgMzA2MDcsIDMwNjExLCAzMDYxNSwgMzA2MjEsIDMwNjI3LCAzMDYzMCwgCisgICAgMzA2MzMsIDMwNjM3LCAzMDY0MiwgMzA2NDcsIDMwNjU0LCAzMDY1OSwgMzA2NjYsIDMwNjczLCAzMDY4MiwgMzA2ODksIAorICAgIDMwNjk4LCAzMDcwMywgMzA3MTAsIDMwNzE3LCAzMDcyNiwgMzA3MzEsIDMwNzM4LCAzMDc0MywgMzA3NDksIDMwNzU1LCAKKyAgICAzMDc2MSwgMzA3NjcsIDMwNzczLCAzMDc3OSwgMCwgMCwgMCwgMCwgMzA3ODUsIDMwNzg5LCAzMDc5MiwgMzA3OTUsIAorICAgIDMwNzk4LCAzMDgwMSwgMzA4MDQsIDMwODA3LCAzMDgxMCwgMzA4MTMsIDMwODE2LCAzMDgxOSwgMzA4MjIsIDMwODI1LCAKKyAgICAzMDgzMCwgMzA4MzUsIDMwODQwLCAzMDg0MywgMzA4NDgsIDMwODUzLCAzMDg1OCwgMzA4NjMsIDMwODcwLCAzMDg3NSwgCisgICAgMzA4ODAsIDMwODg1LCAzMDg5MCwgMzA4OTcsIDMwOTAzLCAzMDkwOSwgMzA5MTUsIDMwOTIxLCAzMDkyNywgMzA5MzYsIAorICAgIDMwOTQ1LCAzMDk1MSwgMzA5NTcsIDMwOTY1LCAzMDk3MywgMzA5ODIsIDMwOTkxLCAzMDk5OSwgMzEwMDcsIDMxMDE2LCAKKyAgICAzMTAyNSwgMCwgMCwgMCwgMzEwMzMsIDMxMDM3LCAzMTA0MSwgMzEwNDUsIDMxMDQ4LCAzMTA1MSwgMzEwNTQsIDMxMDU4LCAKKyAgICAzMTA2MSwgMzEwNjQsIDMxMDY4LCAzMTA3MSwgMzEwNzUsIDMxMDc5LCAzMTA4MywgMzEwODcsIDMxMDkxLCAzMTA5NSwgCisgICAgMzEwOTksIDMxMTAzLCAzMTEwNywgMzExMTAsIDMxMTEzLCAzMTExNywgMzExMjEsIDMxMTI1LCAzMTEyOCwgMzExMzEsIAorICAgIDMxMTM0LCAzMTEzOCwgMzExNDIsIDMxMTQ1LCAzMTE0OSwgMzExNTIsIDMxMTU3LCAzMTE2MiwgMzExNjcsIDMxMTcyLCAKKyAgICAzMTE3NywgMzExODIsIDMxMTg3LCAzMTE5MiwgMzExOTcsIDMxMjAxLCAzMTIwNSwgMzEyMTEsIDMxMjE4LCAzMTIyMiwgCisgICAgMzEyMjYsIDMxMjMwLCAzMTIzMywgMzEyMzYsIDMxMjM5LCAzMTI0MiwgMzEyNDUsIDMxMjQ4LCAzMTI1MSwgMzEyNTQsIAorICAgIDMxMjU3LCAzMTI2MCwgMzEyNjQsIDMxMjY4LCAzMTI3MiwgMzEyNzcsIDMxMjgxLCAzMTI4NSwgMzEyOTEsIDMxMjk1LCAKKyAgICAzMTMwMSwgMzEzMDcsIDMxMzEyLCAzMTMxOSwgMzEzMjMsIDMxMzI5LCAzMTMzMywgMzEzMzksIDMxMzQ0LCAzMTM1MSwgCisgICAgMzEzNTgsIDMxMzYzLCAzMTM3MCwgMzEzNzUsIDMxMzgwLCAzMTM4NCwgMzEzOTAsIDMxMzk0LCAzMTQwMCwgMzE0MDcsIAorICAgIDMxNDE0LCAzMTQxOCwgMzE0MjQsIDMxNDMwLCAzMTQzNCwgMzE0NDAsIDMxNDQ1LCAzMTQ1MCwgMzE0NTcsIDMxNDYyLCAKKyAgICAzMTQ2NywgMzE0NzIsIDMxNDc3LCAzMTQ4MSwgMzE0ODUsIDMxNDkwLCAzMTQ5NSwgMzE1MDIsIDMxNTA4LCAzMTUxMywgCisgICAgMzE1MjAsIDMxNTI1LCAzMTUzMiwgMzE1MzcsIDMxNTQ2LCAzMTU1MiwgMzE1NTgsIDMxNTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzMTU2NiwgMzE1NzUsIDMxNTgyLCAzMTU4OSwgMzE1OTYsIDMxNTk5LCAzMTYwMywgMzE2MDcsIDMxNjExLCAKKyAgICAzMTYxNSwgMzE2MTksIDMxNjIzLCAzMTYyNywgMzE2MzEsIDMxNjM1LCAzMTYzOSwgMzE2NDMsIDMxNjQ3LCAzMTY1MCwgCisgICAgMzE2NTMsIDMxNjU3LCAzMTY2MSwgMzE2NjUsIDMxNjY5LCAzMTY3MywgMzE2NzcsIDMxNjgwLCAzMTY4NCwgMzE2ODgsIAorICAgIDMxNjkyLCAzMTY5NiwgMzE2OTksIDMxNzAyLCAzMTcwNiwgMzE3MDksIDMxNzEzLCAzMTcxNywgMzE3MjAsIDMxNzI0LCAKKyAgICAzMTcyOCwgMzE3MzEsIDMxNzM2LCAzMTc0MSwgMzE3NDYsIDMxNzUwLCAzMTc1NCwgMzE3NTksIDMxNzYzLCAzMTc2OCwgCisgICAgMzE3NzIsIDMxNzc3LCAzMTc4MSwgMzE3ODUsIDMxNzkwLCAzMTc5NSwgMzE3OTksIDMxODA0LCAzMTgwOSwgMzE4MTQsIAorICAgIDMxODE4LCAwLCAwLCAwLCAzMTgyMiwgMzE4MjcsIDMxODM2LCAzMTg0MSwgMzE4NDgsIDMxODUzLCAzMTg1NywgMzE4NjAsIAorICAgIDMxODYzLCAzMTg2NiwgMzE4NjksIDMxODcyLCAzMTg3NSwgMzE4NzgsIDMxODgxLCAwLCAwLCAwLCAzMTg4NCwgMzE4ODgsIAorICAgIDMxODkyLCAzMTg5NiwgMzE5MDMsIDMxOTA5LCAzMTkxNSwgMzE5MjEsIDMxOTI3LCAzMTkzMywgMzE5MzksIDMxOTQ1LCAKKyAgICAzMTk1MSwgMzE5NTcsIDMxOTY0LCAzMTk3MSwgMzE5NzgsIDMxOTg1LCAzMTk5MiwgMzE5OTksIDMyMDA2LCAzMjAxMywgCisgICAgMzIwMjAsIDMyMDI3LCAzMjAzNCwgMzIwNDEsIDMyMDQ4LCAzMjA1NSwgMzIwNjIsIDMyMDY5LCAzMjA3NiwgMzIwODMsIAorICAgIDMyMDkwLCAzMjA5NywgMzIxMDQsIDMyMTExLCAzMjExOCwgMzIxMjUsIDMyMTMyLCAzMjEzOSwgMzIxNDYsIDMyMTUzLCAKKyAgICAzMjE2MCwgMzIxNjcsIDMyMTc1LCAzMjE4MywgMzIxOTEsIDMyMTk3LCAzMjIwMywgMzIyMDksIDMyMjE3LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyMywgMzIyMzAsIDMyMjM3LCAzMjI0NCwgMzIyNTEsIAotICAgIDMyMjYwLCAzMjI2OSwgMzIyNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjg3LCAzMjI5MiwgMzIyOTcsIDMyMzAyLCAKLSAgICAzMjMwNywgMzIzMTYsIDMyMzI3LCAzMjMzNiwgMzIzNDcsIDMyMzUzLCAzMjM2NiwgMzIzNzIsIDMyMzc5LCAzMjM4NiwgCi0gICAgMzIzOTEsIDMyMzk3LCAzMjQwMywgMzI0MTQsIDMyNDIzLCAzMjQzMCwgMzI0MzcsIDMyNDQ2LCAzMjQ1MywgMzI0NjIsIAotICAgIDMyNDcyLCAzMjQ4MiwgMzI0ODksIDMyNDk2LCAzMjUwMywgMzI1MTMsIDMyNTE4LCAzMjUyNiwgMzI1MzIsIDMyNTQwLCAKLSAgICAzMjU0OSwgMzI1NTQsIDMyNTYxLCAzMjU2NywgMzI1NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNTc3LCAKLSAgICAzMjU4MiwgMzI1ODgsIDMyNTk1LCAzMjYwMywgMzI2MDksIDMyNjE1LCAzMjYyMSwgMzI2MjYsIDMyNjMzLCAzMjYzOSwgCi0gICAgMzI2NDUsIDMyNjUxLCAzMjY1OSwgMzI2NjQsIDMyNjcyLCAzMjY3NywgMzI2ODMsIDMyNjg5LCAzMjY5NiwgMzI3MDQsIAotICAgIDMyNzExLCAzMjcxNywgMzI3MjQsIDMyNzMxLCAzMjczNywgMzI3NDQsIDMyNzUxLCAzMjc1NywgMzI3NjIsIDMyNzY4LCAKLSAgICAzMjc3NiwgMzI3ODQsIDMyNzkwLCAzMjc5NiwgMzI4MDIsIDMyODA4LCAzMjgxNiwgMzI4MjAsIDMyODI2LCAzMjgzMiwgCi0gICAgMzI4MzgsIDMyODQ0LCAzMjg1MCwgMzI4NTYsIDMyODYwLCAzMjg2NSwgMzI4NzAsIDMyODc3LCAzMjg4MiwgMzI4ODYsIAotICAgIDMyODkyLCAzMjg5NywgMzI5MDIsIDMyOTA2LCAzMjkxMSwgMzI5MTYsIDMyOTIwLCAzMjkyNCwgMzI5MjksIDMyOTM2LCAKLSAgICAzMjk0MCwgMzI5NDUsIDMyOTUwLCAzMjk1NCwgMzI5NTksIDMyOTYzLCAzMjk2OCwgMzI5NzIsIDMyOTc4LCAzMjk4MywgCi0gICAgMzI5OTAsIDMyOTk1LCAzMzAwMCwgMzMwMDQsIDMzMDA5LCAzMzAxNCwgMzMwMjEsIDMzMDI2LCAzMzAzMiwgMzMwMzcsIAotICAgIDMzMDQxLCAzMzA0NiwgMzMwNTAsIDMzMDU1LCAzMzA2MiwgMzMwNjksIDMzMDc0LCAzMzA3OSwgMzMwODMsIDMzMDg5LCAKLSAgICAzMzA5NSwgMzMxMDAsIDMzMTA1LCAzMzExMCwgMzMxMTYsIDMzMTIxLCAzMzEyNywgMzMxMzIsIDMzMTM4LCAzMzE0NCwgCi0gICAgMzMxNTAsIDMzMTU3LCAzMzE2NCwgMzMxNzEsIDMzMTc4LCAzMzE4NSwgMzMxOTIsIDMzMTk3LCAzMzIwNSwgMzMyMTQsIAotICAgIDMzMjIzLCAzMzIzMiwgMzMyNDEsIDMzMjUwLCAzMzI1OSwgMzMyNzEsIDMzMjgwLCAzMzI4OSwgMzMyOTgsIDMzMzA1LCAKLSAgICAzMzMxMCwgMzMzMTcsIDMzMzI1LCAzMzMzMywgMzMzNDAsIDMzMzQ3LCAzMzM1NCwgMzMzNjEsIDMzMzY5LCAzMzM3OCwgCi0gICAgMzMzODcsIDMzMzk2LCAzMzQwNSwgMzM0MTQsIDMzNDIzLCAzMzQzMiwgMzM0NDEsIDMzNDUwLCAzMzQ1OSwgMzM0NjgsIAotICAgIDMzNDc3LCAzMzQ4NiwgMzM0OTUsIDMzNTAzLCAzMzUxMiwgMzM1MjMsIDMzNTMxLCAzMzU0MCwgMzM1NTEsIDMzNTYwLCAKLSAgICAzMzU2OSwgMzM1NzgsIDMzNTg3LCAzMzU5NSwgMzM2MDQsIDMzNjExLCAzMzYxNiwgMzM2MjQsIDMzNjI5LCAzMzYzNiwgCi0gICAgMzM2NDEsIDMzNjUwLCAzMzY1NiwgMzM2NjMsIDMzNjcwLCAzMzY3NSwgMzM2ODAsIDMzNjg4LCAzMzY5NiwgMzM3MDUsIAotICAgIDMzNzE0LCAzMzcxOSwgMzM3MjYsIDMzNzM3LCAzMzc0NSwgMzM3NTQsIDMzNzYwLCAzMzc2NiwgMzM3NzEsIDMzNzc4LCAKLSAgICAzMzc4MywgMzM3OTIsIDMzNzk3LCAzMzgwMiwgMzM4MDcsIDMzODE0LCAzMzgyMSwgMzM4MjYsIDMzODM1LCAzMzg0MywgCi0gICAgMzM4NDgsIDMzODUzLCAzMzg2MCwgMzM4NjcsIDMzODcxLCAzMzg3NSwgMzM4NzgsIDMzODgxLCAzMzg4NCwgMzM4ODcsIAotICAgIDMzODkwLCAzMzg5MywgMzM5MDAsIDMzOTAzLCAzMzkwNiwgMzM5MTEsIDMzOTE1LCAzMzkxOSwgMzM5MjMsIDMzOTI3LCAKLSAgICAzMzkzMSwgMzM5NDAsIDMzOTQ2LCAzMzk1MiwgMzM5NTgsIDMzOTY2LCAzMzk3NCwgMzM5ODAsIDMzOTg2LCAzMzk5MywgCi0gICAgMzM5OTksIDM0MDA0LCAzNDAxMCwgMzQwMTYsIDM0MDIyLCAzNDAyOSwgMzQwMzUsIDM0MDQzLCAzNDA0OSwgMzQwNTYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDYyLCAzNDA2OSwgCi0gICAgMzQwNzYsIDM0MDgxLCAzNDA5MCwgMzQwOTgsIDM0MTA2LCAzNDExMywgMzQxMjAsIDM0MTI3LCAzNDEzNCwgMzQxNDIsIAotICAgIDM0MTUwLCAzNDE2MCwgMzQxNzAsIDM0MTc4LCAzNDE4NiwgMzQxOTQsIDM0MjAyLCAzNDIxMSwgMzQyMjAsIDM0MjI4LCAKLSAgICAzNDIzNiwgMzQyNDUsIDM0MjU0LCAzNDI2NCwgMzQyNzQsIDM0MjgzLCAzNDI5MiwgMzQzMDAsIDM0MzA4LCAzNDMxNiwgCi0gICAgMzQzMjQsIDM0MzM0LCAzNDM0NCwgMzQzNTIsIDM0MzYwLCAzNDM2OCwgMzQzNzYsIDM0Mzg0LCAzNDM5MiwgMzQ0MDAsIAotICAgIDM0NDA4LCAzNDQxNiwgMzQ0MjQsIDM0NDMyLCAzNDQ0MCwgMzQ0NDksIDM0NDU4LCAzNDQ2NywgMzQ0NzYsIDM0NDg2LCAKLSAgICAzNDQ5NiwgMzQ1MDMsIDM0NTEwLCAzNDUxOCwgMzQ1MjYsIDM0NTM1LCAzNDU0NCwgMzQ1NTIsIDM0NTYwLCAzNDU3MiwgCi0gICAgMzQ1ODQsIDM0NTkzLCAzNDYwMiwgMzQ2MTEsIDM0NjIwLCAzNDYyNywgMzQ2MzQsIDM0NjQyLCAzNDY1MCwgMzQ2NTgsIAotICAgIDM0NjY2LCAzNDY3NCwgMzQ2ODIsIDM0NjkwLCAzNDY5OCwgMzQ3MDcsIDM0NzE2LCAzNDcyNSwgMzQ3MzQsIDM0NzQzLCAKLSAgICAzNDc1MiwgMzQ3NjIsIDM0NzcyLCAzNDc4MiwgMzQ3OTIsIDM0ODAxLCAzNDgxMCwgMzQ4MTcsIDM0ODI0LCAzNDgzMiwgCi0gICAgMzQ4NDAsIDM0ODQ4LCAzNDg1NiwgMzQ4NjQsIDM0ODcyLCAzNDg4NCwgMzQ4OTYsIDM0OTA1LCAzNDkxNCwgMzQ5MjIsIAotICAgIDM0OTMwLCAzNDkzOCwgMzQ5NDYsIDM0OTU3LCAzNDk2OCwgMzQ5NzksIDM0OTkwLCAzNTAwMiwgMzUwMTQsIDM1MDIyLCAKLSAgICAzNTAzMCwgMzUwMzgsIDM1MDQ2LCAzNTA1NSwgMzUwNjQsIDM1MDczLCAzNTA4MiwgMzUwOTAsIDM1MDk4LCAzNTEwNiwgCi0gICAgMzUxMTQsIDM1MTIyLCAzNTEzMCwgMzUxMzksIDM1MTQ4LCAzNTE1OCwgMzUxNjgsIDM1MTc1LCAzNTE4MiwgMzUxOTAsIAotICAgIDM1MTk4LCAzNTIwNiwgMzUyMTQsIDM1MjIxLCAzNTIyOCwgMzUyMzYsIDM1MjQ0LCAzNTI1MiwgMzUyNjAsIDM1MjY4LCAKLSAgICAzNTI3NiwgMzUyODQsIDM1MjkyLCAzNTMwMCwgMzUzMDgsIDM1MzE2LCAzNTMyNCwgMzUzMzIsIDM1MzQwLCAzNTM0OCwgCi0gICAgMzUzNTYsIDM1MzY1LCAzNTM3NCwgMzUzODMsIDM1MzkxLCAzNTQwMCwgMzU0MDksIDM1NDE4LCAzNTQyNywgMzU0MzcsIAotICAgIDM1NDQ2LCAzNTQ1MywgMzU0NTgsIDM1NDY1LCAzNTQ3MiwgMzU0ODAsIDM1NDg4LCAzNTQ5NywgMzU1MDYsIDM1NTE2LCAKLSAgICAzNTUyNiwgMzU1MzcsIDM1NTQ4LCAzNTU1NywgMzU1NjYsIDM1NTc2LCAzNTU4NiwgMzU1OTUsIDM1NjA0LCAzNTYxNCwgCi0gICAgMzU2MjQsIDM1NjM1LCAzNTY0NiwgMzU2NTUsIDM1NjY0LCAzNTY3NCwgMzU2ODQsIDM1NjkxLCAzNTY5OCwgMzU3MDYsIAotICAgIDM1NzE0LCAzNTcyMCwgMzU3MjYsIDM1NzM1LCAzNTc0NCwgMzU3NTQsIDM1NzY0LCAzNTc3NSwgMzU3ODYsIDM1Nzk1LCAKLSAgICAzNTgwNCwgMzU4MTQsIDM1ODI0LCAzNTgzMywgMzU4NDIsIDM1ODUwLCAzNTg1OCwgMzU4NjUsIDM1ODcyLCAzNTg4MCwgCi0gICAgMzU4ODgsIDM1ODk3LCAzNTkwNiwgMzU5MTYsIDM1OTI2LCAzNTkzNywgMzU5NDgsIDM1OTU3LCAzNTk2NiwgMzU5NzYsIAotICAgIDM1OTg2LCAzNTk5NSwgMzYwMDQsIDM2MDE0LCAzNjAyNCwgMzYwMzUsIDM2MDQ2LCAzNjA1NSwgMzYwNjQsIDM2MDc0LCAKLSAgICAzNjA4NCwgMzYwOTEsIDM2MDk4LCAzNjEwNiwgMzYxMTQsIDM2MTIzLCAzNjEzMiwgMzYxNDIsIDM2MTUyLCAzNjE2MywgCi0gICAgMzYxNzQsIDM2MTgzLCAzNjE5MiwgMzYyMDIsIDM2MjEyLCAzNjIyMCwgMzYyMjgsIDM2MjM2LCAzNjI0NCwgMzYyNTMsIAotICAgIDM2MjYyLCAzNjI2OSwgMzYyNzYsIDM2MjgzLCAzNjI5MCwgMzYyOTcsIDM2MzA0LCAzNjMxMiwgMzYzMjAsIDM2MzI4LCAKLSAgICAzNjMzNiwgMzYzNDcsIDM2MzU4LCAzNjM2OSwgMzYzODAsIDM2MzkxLCAzNjQwMiwgMzY0MTAsIDM2NDE4LCAzNjQyOSwgCi0gICAgMzY0NDAsIDM2NDUxLCAzNjQ2MiwgMzY0NzMsIDM2NDg0LCAzNjQ5MiwgMzY1MDAsIDM2NTExLCAzNjUyMiwgMzY1MzMsIDAsIAotICAgIDAsIDM2NTQ0LCAzNjU1MiwgMzY1NjAsIDM2NTcxLCAzNjU4MiwgMzY1OTMsIDAsIDAsIDM2NjA0LCAzNjYxMiwgMzY2MjAsIAotICAgIDM2NjMxLCAzNjY0MiwgMzY2NTMsIDM2NjY0LCAzNjY3NSwgMzY2ODYsIDM2Njk0LCAzNjcwMiwgMzY3MTMsIDM2NzI0LCAKLSAgICAzNjczNSwgMzY3NDYsIDM2NzU3LCAzNjc2OCwgMzY3NzYsIDM2Nzg0LCAzNjc5NSwgMzY4MDYsIDM2ODE3LCAzNjgyOCwgCi0gICAgMzY4MzksIDM2ODUwLCAzNjg1OCwgMzY4NjYsIDM2ODc3LCAzNjg4OCwgMzY4OTksIDM2OTEwLCAzNjkyMSwgMzY5MzIsIAotICAgIDM2OTQwLCAzNjk0OCwgMzY5NTksIDM2OTcwLCAzNjk4MSwgMCwgMCwgMzY5OTIsIDM3MDAwLCAzNzAwOCwgMzcwMTksIAotICAgIDM3MDMwLCAzNzA0MSwgMCwgMCwgMzcwNTIsIDM3MDYwLCAzNzA2OCwgMzcwNzksIDM3MDkwLCAzNzEwMSwgMzcxMTIsIAotICAgIDM3MTIzLCAwLCAzNzEzNCwgMCwgMzcxNDIsIDAsIDM3MTUzLCAwLCAzNzE2NCwgMzcxNzUsIDM3MTgzLCAzNzE5MSwgCi0gICAgMzcyMDIsIDM3MjEzLCAzNzIyNCwgMzcyMzUsIDM3MjQ2LCAzNzI1NywgMzcyNjUsIDM3MjczLCAzNzI4NCwgMzcyOTUsIAotICAgIDM3MzA2LCAzNzMxNywgMzczMjgsIDM3MzM5LCAzNzM0NywgMzczNTUsIDM3MzYzLCAzNzM3MSwgMzczNzksIDM3Mzg3LCAKLSAgICAzNzM5NSwgMzc0MDMsIDM3NDExLCAzNzQxOSwgMzc0MjcsIDM3NDM1LCAzNzQ0MywgMCwgMCwgMzc0NTEsIDM3NDYyLCAKLSAgICAzNzQ3MywgMzc0ODcsIDM3NTAxLCAzNzUxNSwgMzc1MjksIDM3NTQzLCAzNzU1NywgMzc1NjgsIDM3NTc5LCAzNzU5MywgCi0gICAgMzc2MDcsIDM3NjIxLCAzNzYzNSwgMzc2NDksIDM3NjYzLCAzNzY3NCwgMzc2ODUsIDM3Njk5LCAzNzcxMywgMzc3MjcsIAotICAgIDM3NzQxLCAzNzc1NSwgMzc3NjksIDM3NzgwLCAzNzc5MSwgMzc4MDUsIDM3ODE5LCAzNzgzMywgMzc4NDcsIDM3ODYxLCAKLSAgICAzNzg3NSwgMzc4ODYsIDM3ODk3LCAzNzkxMSwgMzc5MjUsIDM3OTM5LCAzNzk1MywgMzc5NjcsIDM3OTgxLCAzNzk5MiwgCi0gICAgMzgwMDMsIDM4MDE3LCAzODAzMSwgMzgwNDUsIDM4MDU5LCAzODA3MywgMzgwODcsIDM4MDk1LCAzODEwMywgMzgxMTQsIAotICAgIDM4MTIyLCAwLCAzODEzMywgMzgxNDEsIDM4MTUyLCAzODE2MCwgMzgxNjgsIDM4MTc2LCAzODE4NCwgMzgxOTIsIDM4MTk1LCAKLSAgICAzODE5OCwgMzgyMDEsIDM4MjA0LCAzODIxMCwgMzgyMjEsIDM4MjI5LCAwLCAzODI0MCwgMzgyNDgsIDM4MjU5LCAzODI2NywgCi0gICAgMzgyNzUsIDM4MjgzLCAzODI5MSwgMzgyOTksIDM4MzA1LCAzODMxMSwgMzgzMTcsIDM4MzI1LCAzODMzMywgMzgzNDQsIDAsIAotICAgIDAsIDM4MzU1LCAzODM2MywgMzgzNzQsIDM4MzgyLCAzODM5MCwgMzgzOTgsIDAsIDM4NDA2LCAzODQxMiwgMzg0MTgsIAotICAgIDM4NDI0LCAzODQzMiwgMzg0NDAsIDM4NDUxLCAzODQ2MiwgMzg0NzAsIDM4NDc4LCAzODQ4NiwgMzg0OTcsIDM4NTA1LCAKLSAgICAzODUxMywgMzg1MjEsIDM4NTI5LCAzODUzNywgMzg1NDMsIDM4NTQ5LCAwLCAwLCAzODU1MiwgMzg1NjMsIDM4NTcxLCAwLCAKLSAgICAzODU4MiwgMzg1OTAsIDM4NjAxLCAzODYwOSwgMzg2MTcsIDM4NjI1LCAzODYzMywgMzg2NDEsIDM4NjQ0LCAwLCAzODY0NywgCi0gICAgMzg2NTEsIDM4NjU1LCAzODY1OSwgMzg2NjMsIDM4NjY3LCAzODY3MSwgMzg2NzUsIDM4Njc5LCAzODY4MywgMzg2ODcsIAotICAgIDM4NjkxLCAzODY5NywgMzg3MDMsIDM4NzA5LCAzODcxMiwgMzg3MTUsIDM4NzE3LCAzODcyMSwgMzg3MjUsIDM4NzI5LCAKLSAgICAzODczMywgMzg3MzUsIDM4NzM5LCAzODc0MywgMzg3NDksIDM4NzU1LCAzODc2MiwgMzg3NjksIDM4Nzc0LCAzODc3OSwgCi0gICAgMzg3ODUsIDM4NzkxLCAzODc5MywgMzg3OTYsIDM4Nzk4LCAzODgwMiwgMzg4MDYsIDM4ODEwLCAzODgxMywgMzg4MTcsIAotICAgIDM4ODIxLCAzODgyNSwgMzg4MjksIDM4ODMzLCAzODgzOSwgMzg4NDMsIDM4ODQ3LCAzODg1MywgMzg4NTgsIDM4ODY1LCAKLSAgICAzODg2NywgMzg4NzAsIDM4ODc0LCAzODg3OCwgMzg4ODMsIDM4ODg5LCAzODg5MSwgMzg5MDAsIDM4OTA5LCAzODkxMiwgCi0gICAgMzg5MTYsIDM4OTE4LCAzODkyMCwgMzg5MjIsIDM4OTI1LCAzODkzMSwgMzg5MzMsIDM4OTM3LCAzODk0MSwgMzg5NDgsIAotICAgIDM4OTU1LCAzODk1OSwgMzg5NjQsIDM4OTY5LCAzODk3NCwgMzg5NzksIDM4OTgzLCAzODk4NywgMzg5OTAsIDM4OTk0LCAKLSAgICAzODk5OCwgMzkwMDUsIDM5MDEwLCAzOTAxNCwgMzkwMTgsIDM5MDIzLCAzOTAyNywgMzkwMzEsIDM5MDM2LCAzOTA0MSwgCi0gICAgMzkwNDUsIDM5MDQ5LCAzOTA1MywgMzkwNTUsIDM5MDYwLCAzOTA2NSwgMzkwNjksIDM5MDczLCAzOTA3NywgMzkwODEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDM5MDg1LCAzOTA5MSwgMzkwOTcsIDM5MTA0LCAzOTExMSwgMzkxMTYsIDM5MTIxLCAzOTEyNSwgMCwgMCwgCi0gICAgMzkxMzEsIDM5MTM0LCAzOTEzNywgMzkxNDAsIDM5MTQzLCAzOTE0NiwgMzkxNDksIDM5MTUzLCAzOTE1NywgMzkxNjIsIAotICAgIDM5MTY3LCAzOTE3MiwgMzkxNzksIDM5MTgzLCAzOTE4NiwgMzkxODksIDM5MTkyLCAzOTE5NSwgMzkxOTgsIDM5MjAxLCAKLSAgICAzOTIwNCwgMzkyMDcsIDM5MjEwLCAzOTIxNCwgMzkyMTgsIDM5MjIzLCAzOTIyOCwgMCwgMzkyMzMsIDM5MjM5LCAzOTI0NSwgCi0gICAgMzkyNTEsIDM5MjU4LCAzOTI2NSwgMzkyNzIsIDM5Mjc5LCAzOTI4NSwgMzkyOTEsIDM5Mjk4LCAzOTMwNSwgMzkzMTIsIDAsIAotICAgIDAsIDAsIDM5MzE5LCAzOTMyMiwgMzkzMjUsIDM5MzI4LCAzOTMzMywgMzkzMzYsIDM5MzM5LCAzOTM0MiwgMzkzNDUsIAotICAgIDM5MzQ4LCAzOTM1MSwgMzkzNTUsIDM5MzU4LCAzOTM2MSwgMzkzNjQsIDM5MzY3LCAzOTM3MCwgMzkzNzUsIDM5Mzc4LCAKLSAgICAzOTM4MSwgMzkzODQsIDM5Mzg3LCAzOTM5MCwgMzkzOTUsIDM5Mzk4LCAzOTQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk0MDYsIDM5NDExLCAzOTQxNiwgMzk0MjMsIAotICAgIDM5NDMxLCAzOTQzNiwgMzk0NDEsIDM5NDQ1LCAzOTQ0OSwgMzk0NTQsIDM5NDYxLCAzOTQ2OCwgMzk0NzIsIDM5NDc3LCAKLSAgICAzOTQ4MiwgMzk0ODcsIDM5NDkyLCAzOTQ5OSwgMzk1MDQsIDM5NTA5LCAzOTUxNCwgMzk1MjMsIDM5NTMwLCAzOTUzNywgCi0gICAgMzk1NDEsIDM5NTQ2LCAzOTU1MiwgMzk1NTcsIDM5NTY0LCAzOTU3MywgMzk1ODIsIDM5NTg2LCAzOTU5MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk1OTQsIDM5NTk4LCAzOTYwNiwgMzk2MTAsIDM5NjE0LCAKLSAgICAzOTYxOSwgMzk2MjMsIDM5NjI3LCAzOTYzMSwgMzk2MzMsIDM5NjM3LCAzOTY0MSwgMzk2NDUsIDM5NjUwLCAzOTY1NCwgCi0gICAgMzk2NTgsIDM5NjY2LCAzOTY2OSwgMzk2NzMsIDM5Njc2LCAzOTY3OSwgMzk2ODUsIDM5Njg5LCAzOTY5MiwgMzk2OTgsIAotICAgIDM5NzAyLCAzOTcwNiwgMzk3MTAsIDM5NzEzLCAzOTcxNywgMzk3MjAsIDM5NzI0LCAzOTcyNiwgMzk3MjksIDM5NzMyLCAKLSAgICAzOTczNiwgMzk3MzgsIDM5NzQyLCAzOTc0NSwgMzk3NDgsIDM5NzUzLCAzOTc1OCwgMzk3NjUsIDM5NzY4LCAzOTc3MSwgCi0gICAgMzk3NzUsIDM5NzgwLCAzOTc4MywgMzk3ODYsIDM5Nzg5LCAzOTc5MywgMzk3OTgsIDM5ODAxLCAzOTgwNCwgMzk4MDYsIAotICAgIDM5ODA5LCAzOTgxMiwgMzk4MTUsIDM5ODE5LCAzOTgyNCwgMzk4MjcsIDM5ODMxLCAzOTgzNSwgMzk4MzksIDM5ODQzLCAKLSAgICAzOTg0OCwgMzk4NTQsIDM5ODU5LCAzOTg2NCwgMzk4NzAsIDM5ODc1LCAzOTg4MCwgMzk4ODQsIDM5ODg4LCAzOTg5MywgCi0gICAgMzk4OTcsIDM5OTAxLCAzOTkwNCwgMzk5MDYsIDM5OTExLCAzOTkxNywgMzk5MjQsIDM5OTMxLCAzOTkzOCwgMzk5NDUsIAotICAgIDM5OTUyLCAzOTk1OSwgMzk5NjYsIDM5OTczLCAzOTk4MSwgMzk5ODgsIDM5OTk2LCA0MDAwMywgNDAwMTAsIDQwMDE4LCAKLSAgICA0MDAyNiwgNDAwMzEsIDQwMDM2LCA0MDA0MSwgNDAwNDYsIDQwMDUxLCA0MDA1NiwgNDAwNjEsIDQwMDY2LCA0MDA3MSwgCi0gICAgNDAwNzYsIDQwMDgyLCA0MDA4OCwgNDAwOTQsIDQwMTAwLCA0MDEwNywgNDAxMTUsIDQwMTIyLCA0MDEyOCwgNDAxMzQsIAotICAgIDQwMTQwLCA0MDE0NiwgNDAxNTIsIDQwMTU4LCA0MDE2NCwgNDAxNzAsIDQwMTc2LCA0MDE4MywgNDAxOTAsIDQwMTk3LCAKLSAgICA0MDIwNCwgNDAyMTIsIDQwMjIxLCA0MDIyOSwgNDAyNDAsIDQwMjQ4LCA0MDI1NiwgNDAyNjUsIDQwMjcyLCA0MDI4MSwgCi0gICAgNDAyOTAsIDQwMjk4LCA0MDMwNywgMCwgMCwgMCwgMCwgMCwgMCwgNDAzMTUsIDQwMzE3LCA0MDMyMCwgNDAzMjIsIDQwMzI1LCAKLSAgICA0MDMyOCwgNDAzMzEsIDQwMzM2LCA0MDM0MSwgNDAzNDYsIDQwMzUxLCA0MDM1NSwgNDAzNTksIDQwMzYzLCA0MDM2NywgCi0gICAgNDAzNzIsIDQwMzc4LCA0MDM4MywgNDAzODksIDQwMzk0LCA0MDM5OSwgNDA0MDQsIDQwNDEwLCA0MDQxNSwgNDA0MjEsIAotICAgIDQwNDI3LCA0MDQzMSwgNDA0MzUsIDQwNDQwLCA0MDQ0NSwgNDA0NTAsIDQwNDU1LCA0MDQ2MCwgNDA0NjgsIDQwNDc2LCAKLSAgICA0MDQ4NCwgNDA0OTIsIDQwNDk5LCA0MDUwNywgNDA1MTQsIDQwNTIxLCA0MDUzMCwgNDA1NDIsIDQwNTQ4LCA0MDU1NCwgCi0gICAgNDA1NjIsIDQwNTcwLCA0MDU3OSwgNDA1ODgsIDQwNTk2LCA0MDYwNCwgNDA2MTMsIDQwNjIyLCA0MDYyNywgNDA2MzUsIAotICAgIDQwNjQwLCA0MDY0NSwgNDA2NTEsIDQwNjU2LCA0MDY2MiwgNDA2NjksIDQwNjc2LCA0MDY4MSwgNDA2ODcsIDQwNjkyLCAKLSAgICA0MDY5NSwgNDA2OTksIDQwNzAyLCA0MDcwNiwgNDA3MTAsIDQwNzE0LCA0MDcyMCwgNDA3MjYsIDQwNzMyLCA0MDczOCwgCi0gICAgNDA3NDIsIDQwNzQ2LCA0MDc1MCwgNDA3NTQsIDQwNzYwLCA0MDc2NiwgNDA3NzAsIDQwNzc1LCA0MDc3OSwgNDA3ODQsIAotICAgIDQwNzg5LCA0MDc5NCwgNDA3OTcsIDQwODAxLCA0MDgwNCwgNDA4MDgsIDQwODE1LCA0MDgyMywgNDA4MzQsIDQwODQ1LCAKLSAgICA0MDg1MCwgNDA4NTksIDQwODY2LCA0MDg3NSwgNDA4ODQsIDQwODg4LCA0MDg5NCwgNDA5MDIsIDQwOTA2LCA0MDkxMSwgCi0gICAgNDA5MTYsIDQwOTIyLCA0MDkyOCwgNDA5MzQsIDQwOTQxLCA0MDk0NSwgNDA5NDksIDQwOTU0LCA0MDk1NywgNDA5NTksIAotICAgIDQwOTYzLCA0MDk2NywgNDA5NzUsIDQwOTc5LCA0MDk4MSwgNDA5ODMsIDQwOTg3LCA0MDk5NSwgNDEwMDAsIDQxMDA2LCAKLSAgICA0MTAxNiwgNDEwMjMsIDQxMDI4LCA0MTAzMiwgNDEwMzYsIDQxMDQwLCA0MTA0MywgNDEwNDYsIDQxMDQ5LCA0MTA1MywgCi0gICAgNDEwNTcsIDQxMDYxLCA0MTA2NSwgNDEwNjksIDQxMDcyLCA0MTA3NiwgNDEwODAsIDQxMDgzLCA0MTA4NSwgNDEwODgsIAotICAgIDQxMDkwLCA0MTA5NCwgNDEwOTgsIDQxMTAwLCA0MTEwNiwgNDExMDksIDQxMTE0LCA0MTExOCwgNDExMjIsIDQxMTI0LCAKLSAgICA0MTEyNiwgNDExMjgsIDQxMTMxLCA0MTEzNSwgNDExMzksIDQxMTQzLCA0MTE0NywgNDExNTEsIDQxMTU3LCA0MTE2MywgCi0gICAgNDExNjUsIDQxMTY3LCA0MTE2OSwgNDExNzEsIDQxMTc0LCA0MTE3NiwgNDExODAsIDQxMTgyLCA0MTE4NiwgNDExODksIAotICAgIDQxMTk1LCA0MTE5OSwgNDEyMDMsIDQxMjA2LCA0MTIwOSwgNDEyMTMsIDQxMjE5LCA0MTIyMywgNDEyMzMsIDQxMjQzLCAKLSAgICA0MTI0NywgNDEyNTMsIDQxMjU5LCA0MTI2MiwgNDEyNjYsIDQxMjY5LCA0MTI3NCwgNDEyNzgsIDQxMjg0LCA0MTI4OCwgCi0gICAgNDEzMDAsIDQxMzA4LCA0MTMxMiwgNDEzMTYsIDQxMzIyLCA0MTMyNiwgNDEzMjksIDQxMzMxLCA0MTMzNCwgNDEzMzgsIAotICAgIDQxMzQyLCA0MTM0OSwgNDEzNTMsIDQxMzU3LCA0MTM2MSwgNDEzNjQsIDQxMzY5LCA0MTM3NCwgNDEzNzksIDQxMzg0LCAKLSAgICA0MTM4OSwgNDEzOTQsIDQxNDAyLCA0MTQxMCwgNDE0MTQsIDQxNDE4LCA0MTQyMCwgNDE0MjUsIDQxNDI5LCA0MTQzMywgCi0gICAgNDE0NDEsIDQxNDQ5LCA0MTQ1NSwgNDE0NjEsIDQxNDcwLCA0MTQ3OSwgNDE0ODQsIDQxNDg5LCA0MTQ5NywgNDE1MDUsIAotICAgIDQxNTA3LCA0MTUwOSwgNDE1MTQsIDQxNTE5LCA0MTUyNSwgNDE1MzEsIDQxNTM3LCA0MTU0MywgNDE1NDcsIDQxNTUxLCAKLSAgICA0MTU1OCwgNDE1NjUsIDQxNTcxLCA0MTU3NywgNDE1ODcsIDQxNTk3LCA0MTYwNSwgNDE2MTMsIDQxNjE1LCA0MTYxOSwgCi0gICAgNDE2MjMsIDQxNjI4LCA0MTYzMywgNDE2NDAsIDQxNjQ3LCA0MTY1MCwgNDE2NTMsIDQxNjU2LCA0MTY1OSwgNDE2NjIsIAotICAgIDQxNjY3LCA0MTY3MSwgNDE2NzYsIDQxNjgxLCA0MTY4NCwgNDE2ODcsIDQxNjkwLCA0MTY5MywgNDE2OTYsIDQxNzAwLCAKLSAgICA0MTcwMywgNDE3MDYsIDQxNzA5LCA0MTcxMiwgNDE3MTQsIDQxNzE2LCA0MTcxOCwgNDE3MjAsIDQxNzI4LCA0MTczNiwgCi0gICAgNDE3NDIsIDQxNzQ2LCA0MTc1MiwgNDE3NjIsIDQxNzY4LCA0MTc3NCwgNDE3ODAsIDQxNzg4LCA0MTc5NiwgNDE4MDcsIAotICAgIDQxODExLCA0MTgxNSwgNDE4MTcsIDQxODIzLCA0MTgyNSwgNDE4MjcsIDQxODI5LCA0MTgzMSwgNDE4MzcsIDQxODQwLCAKLSAgICA0MTg0NiwgNDE4NTIsIDQxODU2LCA0MTg2MCwgNDE4NjQsIDQxODY3LCA0MTg3MSwgNDE4NzUsIDQxODc3LCA0MTg4NiwgCi0gICAgNDE4OTUsIDQxOTAwLCA0MTkwNSwgNDE5MTEsIDQxOTE3LCA0MTkyMywgNDE5MjYsIDQxOTI5LCA0MTkzMiwgNDE5MzUsIAotICAgIDQxOTM3LCA0MTk0MiwgNDE5NDcsIDQxOTUyLCA0MTk1OCwgNDE5NjQsIDQxOTcyLCA0MTk4MCwgNDE5ODYsIDQxOTkyLCAKLSAgICA0MTk5OCwgNDIwMDQsIDQyMDEzLCA0MjAyMiwgNDIwMzEsIDQyMDQwLCA0MjA0OSwgNDIwNTgsIDQyMDY3LCA0MjA3NiwgCi0gICAgNDIwODUsIDQyMDk0LCA0MjEwMiwgNDIxMTQsIDQyMTI0LCA0MjEzOSwgNDIxNDIsIDQyMTQ3LCA0MjE1MywgNDIxNTksIAotICAgIDQyMTY2LCA0MjE4MCwgNDIxOTUsIDQyMjAxLCA0MjIwNywgNDIyMTQsIDQyMjIwLCA0MjIyOCwgNDIyMzQsIDQyMjQ3LCAKLSAgICA0MjI2MSwgNDIyNjYsIDQyMjcyLCA0MjI3OSwgNDIyODIsIDQyMjg1LCA0MjI4NywgNDIyOTAsIDQyMjkzLCA0MjI5NSwgCi0gICAgNDIyOTcsIDQyMzAxLCA0MjMwNCwgNDIzMDcsIDQyMzEwLCA0MjMxMywgNDIzMTgsIDQyMzIzLCA0MjMyOCwgNDIzMzMsIAotICAgIDQyMzM4LCA0MjM0MSwgNDIzNDMsIDQyMzQ1LCA0MjM0NywgNDIzNTEsIDQyMzU1LCA0MjM1OSwgNDIzNjUsIDQyMzcwLCAKLSAgICA0MjM3MiwgNDIzNzQsIDQyMzc5LCA0MjM4NCwgNDIzODksIDQyMzk0LCA0MjM5OSwgNDI0MDQsIDQyNDA2LCA0MjQwOCwgCi0gICAgNDI0MTcsIDQyNDIxLCA0MjQyOSwgNDI0MzgsIDQyNDQwLCA0MjQ0NSwgNDI0NTAsIDQyNDU4LCA0MjQ2MiwgNDI0NjQsIAotICAgIDQyNDY4LCA0MjQ3MCwgNDI0NzQsIDQyNDc4LCA0MjQ4MiwgNDI0ODQsIDQyNDg2LCA0MjQ4OCwgNDI0OTUsIDQyNTA0LCAKLSAgICA0MjUxMywgNDI1MjIsIDQyNTMxLCA0MjU0MCwgNDI1NDksIDQyNTU4LCA0MjU2NywgNDI1NzUsIDQyNTgzLCA0MjU5MiwgCi0gICAgNDI2MDEsIDQyNjEwLCA0MjYxOSwgNDI2MjcsIDQyNjM1LCA0MjY0NCwgNDI2NTMsIDQyNjYyLCA0MjY3MiwgNDI2ODEsIAotICAgIDQyNjkxLCA0MjcwMCwgNDI3MTAsIDQyNzE5LCA0MjcyOSwgNDI3MzksIDQyNzQ4LCA0Mjc1OCwgNDI3NjcsIDQyNzc3LCAKLSAgICA0Mjc4NiwgNDI3OTYsIDQyODA1LCA0MjgxNCwgNDI4MjMsIDQyODMyLCA0Mjg0MSwgNDI4NTEsIDQyODYwLCA0Mjg2OSwgCi0gICAgNDI4NzgsIDQyODg4LCA0Mjg5NywgNDI5MDYsIDQyOTE1LCA0MjkyNCwgNDI5MzQsIDQyOTQ0LCA0Mjk1MywgNDI5NjIsIAotICAgIDQyOTcwLCA0Mjk3OCwgNDI5ODUsIDQyOTkzLCA0MzAwMiwgNDMwMTMsIDQzMDIyLCA0MzAzMSwgNDMwNDAsIDQzMDQ3LCAKLSAgICA0MzA1NCwgNDMwNjEsIDQzMDcwLCA0MzA3OSwgNDMwODgsIDQzMDk3LCA0MzEwNCwgNDMxMDksIDQzMTE4LCA0MzEyMywgCi0gICAgNDMxMjYsIDQzMTM0LCA0MzEzNywgNDMxNDIsIDQzMTQ3LCA0MzE1MCwgNDMxNTMsIDQzMTYxLCA0MzE2NCwgNDMxNjksIAotICAgIDQzMTcyLCA0MzE3OSwgNDMxODQsIDQzMTkyLCA0MzE5NSwgNDMxOTgsIDQzMjAxLCA0MzIwNiwgNDMyMTEsIDQzMjE0LCAKLSAgICA0MzIxNywgNDMyMjUsIDQzMjI4LCA0MzIzNSwgNDMyNDIsIDQzMjQ2LCA0MzI1MCwgNDMyNTUsIDQzMjYwLCA0MzI2NiwgCi0gICAgNDMyNzEsIDQzMjc3LCA0MzI4MywgNDMyODgsIDQzMjk0LCA0MzMwMiwgNDMzMDgsIDQzMzE2LCA0MzMyNCwgNDMzMzAsIAotICAgIDQzMzM4LCA0MzM0NiwgNDMzNTUsIDQzMzYzLCA0MzM2OSwgNDMzNzcsIDQzMzg2LCA0MzM5NCwgNDMzOTgsIDQzNDAzLCAKLSAgICA0MzQxNiwgNDM0MjksIDQzNDMzLCA0MzQzNywgNDM0NDEsIDQzNDQ1LCA0MzQ1NSwgNDM0NTksIDQzNDY0LCA0MzQ2OSwgCi0gICAgNDM0NzQsIDQzNDc5LCA0MzQ4NCwgNDM0ODksIDQzNDk5LCA0MzUwOSwgNDM1MTcsIDQzNTI3LCA0MzUzNywgNDM1NDUsIAotICAgIDQzNTU1LCA0MzU2NSwgNDM1NzMsIDQzNTgzLCA0MzU5MywgNDM2MDEsIDQzNjA5LCA0MzYxOSwgNDM2MjksIDQzNjMyLCAKLSAgICA0MzYzNSwgNDM2MzgsIDQzNjQzLCA0MzY0NywgNDM2NTMsIDQzNjYwLCA0MzY2NywgNDM2NzUsIDQzNjgyLCA0MzY4NiwgCi0gICAgNDM2OTAsIDQzNjk0LCA0MzY5OCwgNDM3MDAsIDQzNzA0LCA0MzcwOCwgNDM3MTMsIDQzNzE4LCA0MzcyNSwgNDM3MzIsIAotICAgIDQzNzM1LCA0Mzc0MiwgNDM3NDQsIDQzNzQ2LCA0Mzc1MCwgNDM3NTQsIDQzNzU5LCA0Mzc2NSwgNDM3NzEsIDQzNzc3LCAKLSAgICA0Mzc4MywgNDM3OTIsIDQzODAxLCA0MzgxMCwgNDM4MTQsIDQzODE2LCA0MzgyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDM4MjcsIDQzODMxLCA0MzgzOCwgNDM4NDUsIDQzODUyLCA0Mzg1OSwgNDM4NjMsIDQzODY3LCAKLSAgICA0Mzg3MSwgNDM4NzUsIDQzODgwLCA0Mzg4NiwgNDM4OTEsIDQzODk3LCA0MzkwMywgNDM5MDksIDQzOTE1LCA0MzkyMywgCi0gICAgNDM5MzAsIDQzOTM3LCA0Mzk0NCwgNDM5NTEsIDQzOTU2LCA0Mzk2MiwgNDM5NzEsIDQzOTc1LCA0Mzk4MiwgNDM5ODYsIAotICAgIDQzOTkwLCA0Mzk5NiwgNDQwMDIsIDQ0MDA4LCA0NDAxNCwgNDQwMTgsIDQ0MDIyLCA0NDAyNSwgNDQwMjgsIDQ0MDMyLCAKLSAgICA0NDAzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDQwNDYsIDQ0MDQ5LCA0NDA1MywgNDQwNTcsIDQ0MDYzLCA0NDA2OSwgNDQwNzUsIDQ0MDgzLCA0NDA5MCwgCi0gICAgNDQwOTQsIDQ0MTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0NDEwNywgNDQxMTAsIDQ0MTEzLCA0NDExNiwgNDQxMTksIDQ0MTIyLCA0NDEyNSwgNDQxMjgsIDQ0MTMxLCA0NDEzNCwgCi0gICAgNDQxMzgsIDQ0MTQyLCA0NDE0NiwgNDQxNTAsIDQ0MTU0LCA0NDE1OCwgNDQxNjIsIDQ0MTY2LCA0NDE3MCwgNDQxNzQsIAotICAgIDQ0MTc4LCA0NDE4MSwgNDQxODQsIDQ0MTg3LCA0NDE5MCwgNDQxOTMsIDQ0MTk2LCA0NDE5OSwgNDQyMDIsIDQ0MjA1LCAKLSAgICA0NDIwOSwgNDQyMTMsIDQ0MjE3LCA0NDIyMSwgNDQyMjUsIDQ0MjI5LCA0NDIzMywgNDQyMzcsIDQ0MjQxLCA0NDI0NSwgCi0gICAgNDQyNDksIDQ0MjU1LCA0NDI2MSwgNDQyNjcsIDQ0Mjc0LCA0NDI4MSwgNDQyODgsIDQ0Mjk1LCA0NDMwMiwgNDQzMDksIAotICAgIDQ0MzE2LCA0NDMyMywgNDQzMzAsIDQ0MzM3LCA0NDM0NCwgNDQzNTEsIDQ0MzU4LCA0NDM2NSwgNDQzNzIsIDQ0Mzc5LCAKLSAgICA0NDM4NiwgNDQzOTEsIDQ0Mzk3LCA0NDQwMywgNDQ0MDksIDQ0NDE0LCA0NDQyMCwgNDQ0MjYsIDQ0NDMyLCA0NDQzNywgCi0gICAgNDQ0NDMsIDQ0NDQ5LCA0NDQ1NCwgNDQ0NTksIDQ0NDY1LCA0NDQ3MCwgNDQ0NzYsIDQ0NDgyLCA0NDQ4NywgNDQ0OTMsIAotICAgIDQ0NDk5LCA0NDUwNCwgNDQ1MTAsIDQ0NTE2LCA0NDUyMiwgNDQ1MjgsIDQ0NTM0LCA0NDUzOSwgNDQ1NDUsIDQ0NTUxLCAKLSAgICA0NDU1NywgNDQ1NjIsIDQ0NTY4LCA0NDU3NCwgNDQ1ODAsIDQ0NTg1LCA0NDU5MSwgNDQ1OTcsIDQ0NjAyLCA0NDYwNywgCi0gICAgNDQ2MTMsIDQ0NjE4LCA0NDYyNCwgNDQ2MzAsIDQ0NjM1LCA0NDY0MSwgNDQ2NDcsIDQ0NjUyLCA0NDY1OCwgNDQ2NjQsIAotICAgIDQ0NjcwLCA0NDY3NiwgNDQ2ODIsIDQ0Njg3LCA0NDY5MywgNDQ2OTksIDQ0NzA1LCA0NDcxMCwgNDQ3MTYsIDQ0NzIyLCAKLSAgICA0NDcyOCwgNDQ3MzMsIDQ0NzM5LCA0NDc0NSwgNDQ3NTAsIDQ0NzU1LCA0NDc2MSwgNDQ3NjYsIDQ0NzcyLCA0NDc3OCwgCi0gICAgNDQ3ODMsIDQ0Nzg5LCA0NDc5NSwgNDQ4MDAsIDQ0ODA2LCA0NDgxMiwgNDQ4MTgsIDQ0ODI0LCA0NDgzMCwgNDQ4MzQsIAotICAgIDQ0ODM5LCA0NDg0NCwgNDQ4NDksIDQ0ODU0LCA0NDg1OSwgNDQ4NjQsIDQ0ODY5LCA0NDg3NCwgNDQ4NzksIDQ0ODg0LCAKLSAgICA0NDg4OCwgNDQ4OTIsIDQ0ODk2LCA0NDkwMCwgNDQ5MDQsIDQ0OTA4LCA0NDkxMiwgNDQ5MTYsIDQ0OTIwLCA0NDkyNSwgCi0gICAgNDQ5MzAsIDQ0OTM1LCA0NDk0MCwgNDQ5NDUsIDQ0OTUwLCA0NDk1OSwgNDQ5NjgsIDQ0OTc3LCA0NDk4NiwgNDQ5OTUsIAotICAgIDQ1MDA0LCA0NTAxMywgNDUwMjIsIDQ1MDI5LCA0NTAzNywgNDUwNDUsIDQ1MDUyLCA0NTA1OSwgNDUwNjcsIDQ1MDc1LCAKLSAgICA0NTA4MiwgNDUwODksIDQ1MDk3LCA0NTEwNSwgNDUxMTIsIDQ1MTE5LCA0NTEyNywgNDUxMzUsIDQ1MTQyLCA0NTE0OSwgCi0gICAgNDUxNTcsIDQ1MTY2LCA0NTE3NSwgNDUxODMsIDQ1MTkyLCA0NTIwMSwgNDUyMDgsIDQ1MjE1LCA0NTIyMywgNDUyMzIsIAotICAgIDQ1MjQxLCA0NTI0OSwgNDUyNTgsIDQ1MjY3LCA0NTI3NCwgNDUyODEsIDQ1MjkwLCA0NTI5OSwgNDUzMDcsIDQ1MzE1LCAKLSAgICA0NTMyNCwgNDUzMzMsIDQ1MzQwLCA0NTM0NywgNDUzNTYsIDQ1MzY1LCA0NTM3MywgNDUzODEsIDQ1MzkwLCA0NTM5OSwgCi0gICAgNDU0MDYsIDQ1NDEzLCA0NTQyMiwgNDU0MzEsIDQ1NDM5LCA0NTQ0OCwgNDU0NTcsIDQ1NDY1LCA0NTQ3NSwgNDU0ODUsIAotICAgIDQ1NDk1LCA0NTUwNSwgNDU1MTQsIDQ1NTIzLCA0NTUzMiwgNDU1NDEsIDQ1NTQ4LCA0NTU1NiwgNDU1NjQsIDQ1NTcyLCAKLSAgICA0NTU4MCwgNDU1ODUsIDQ1NTkwLCA0NTU5OSwgNDU2MDcsIDQ1NjE0LCA0NTYyMywgNDU2MzEsIDQ1NjM4LCA0NTY0NywgCi0gICAgNDU2NTUsIDQ1NjYyLCA0NTY3MSwgNDU2NzksIDQ1Njg2LCA0NTY5NSwgNDU3MDMsIDQ1NzEwLCA0NTcxOSwgNDU3MjcsIAotICAgIDQ1NzM0LCA0NTc0MywgNDU3NTEsIDQ1NzU4LCA0NTc2NywgNDU3NzUsIDQ1NzgyLCA0NTc5MSwgNDU3OTksIDQ1ODA2LCAKLSAgICA0NTgxNSwgNDU4MjQsIDQ1ODMzLCA0NTg0MiwgNDU4NTYsIDQ1ODcwLCA0NTg3NywgNDU4ODIsIDQ1ODg3LCA0NTg5MiwgCi0gICAgNDU4OTcsIDQ1OTAyLCA0NTkwNywgNDU5MTIsIDQ1OTE3LCA0NTkyNSwgNDU5MzMsIDQ1OTQxLCA0NTk0OSwgNDU5NTQsIAotICAgIDQ1OTYxLCA0NTk2OCwgNDU5NzUsIDQ1OTgwLCA0NTk4OCwgNDU5OTUsIDQ2MDAzLCA0NjAwNywgNDYwMTQsIDQ2MDIwLCAKLSAgICA0NjAyNywgNDYwMzEsIDQ2MDM3LCA0NjA0MywgNDYwNDksIDQ2MDUzLCA0NjA1NiwgNDYwNjAsIDQ2MDY0LCA0NjA3MSwgCi0gICAgNDYwNzcsIDQ2MDgzLCA0NjA4OSwgNDYwOTUsIDQ2MTA5LCA0NjExOSwgNDYxMzMsIDQ2MTQ3LCA0NjE1MywgNDYxNjMsIAotICAgIDQ2MTc3LCA0NjE4MCwgNDYxODMsIDQ2MTkwLCA0NjE5OCwgNDYyMDMsIDQ2MjA4LCA0NjIxNiwgNDYyMjgsIDQ2MjQwLCAKLSAgICA0NjI0OCwgNDYyNTIsIDQ2MjU2LCA0NjI1OSwgNDYyNjIsIDQ2MjY2LCA0NjI3MCwgNDYyNzMsIDQ2Mjc2LCA0NjI4MSwgCi0gICAgNDYyODYsIDQ2MjkyLCA0NjI5OCwgNDYzMDMsIDQ2MzA4LCA0NjMxNCwgNDYzMjAsIDQ2MzI1LCA0NjMzMCwgNDYzMzUsIAotICAgIDQ2MzQwLCA0NjM0NiwgNDYzNTIsIDQ2MzU3LCA0NjM2MiwgNDYzNjgsIDQ2Mzc0LCA0NjM3OSwgNDYzODQsIDQ2Mzg3LCAKLSAgICA0NjM5MCwgNDYzOTksIDQ2NDAxLCA0NjQwMywgNDY0MDYsIDQ2NDEwLCA0NjQxNiwgNDY0MTgsIDQ2NDIxLCA0NjQyOCwgCi0gICAgNDY0MzUsIDQ2NDQzLCA0NjQ1MSwgNDY0NjEsIDQ2NDc1LCA0NjQ4MCwgNDY0ODUsIDQ2NDg5LCA0NjQ5NCwgNDY1MDIsIAotICAgIDQ2NTEwLCA0NjUxOSwgNDY1MjgsIDQ2NTM3LCA0NjU0NiwgNDY1NTEsIDQ2NTU2LCA0NjU2MiwgNDY1NjgsIDQ2NTc0LCAKLSAgICA0NjU4MCwgNDY1ODMsIDQ2NTg5LCA0NjU5NSwgNDY2MDUsIDQ2NjE1LCA0NjYyMywgNDY2MzEsIDQ2NjQwLCA0NjY0OSwgCi0gICAgNDY2NTMsIDQ2NjYxLCA0NjY2OSwgNDY2NzcsIDQ2Njg1LCA0NjY5NCwgNDY3MDMsIDQ2NzEyLCA0NjcyMSwgNDY3MjYsIAotICAgIDQ2NzMxLCA0NjczNiwgNDY3NDEsIDQ2NzQ2LCA0Njc1MiwgNDY3NTgsIDQ2NzYzLCA0Njc2OSwgNDY3NzEsIDQ2NzczLCAKLSAgICA0Njc3NSwgNDY3NzcsIDQ2NzgwLCA0Njc4MywgNDY3ODUsIDQ2Nzg3LCA0Njc4OSwgNDY3OTMsIDQ2Nzk3LCA0Njc5OSwgCi0gICAgNDY4MDEsIDQ2ODA0LCA0NjgwNywgNDY4MTEsIDQ2ODE3LCA0NjgyMywgNDY4MjUsIDQ2ODMyLCA0NjgzNiwgNDY4NDEsIAotICAgIDQ2ODQ2LCA0Njg0OCwgNDY4NTgsIDQ2ODY0LCA0Njg3MCwgNDY4NzYsIDQ2ODgyLCA0Njg4OCwgNDY4OTQsIDQ2ODk5LCAKLSAgICA0NjkwMiwgNDY5MDUsIDQ2OTA4LCA0NjkxMCwgNDY5MTIsIDQ2OTE2LCA0NjkyMCwgNDY5MjUsIDQ2OTMwLCA0NjkzNSwgCi0gICAgNDY5MzgsIDQ2OTQyLCA0Njk0NywgNDY5NTAsIDQ2OTU0LCA0Njk1OSwgNDY5NjQsIDQ2OTY5LCA0Njk3NCwgNDY5NzksIAotICAgIDQ2OTg0LCA0Njk4OSwgNDY5OTQsIDQ2OTk5LCA0NzAwNCwgNDcwMDksIDQ3MDE0LCA0NzAyMCwgNDcwMjYsIDQ3MDMyLCAKLSAgICA0NzAzNCwgNDcwMzcsIDQ3MDM5LCA0NzA0MiwgNDcwNDQsIDQ3MDQ2LCA0NzA0OCwgNDcwNTAsIDQ3MDUyLCA0NzA1NCwgCi0gICAgNDcwNTYsIDQ3MDU4LCA0NzA2MCwgNDcwNjIsIDQ3MDY0LCA0NzA2NiwgNDcwNjgsIDQ3MDcwLCA0NzA3MiwgNDcwNzQsIAotICAgIDQ3MDc2LCA0NzA4MSwgNDcwODYsIDQ3MDkxLCA0NzA5NiwgNDcxMDEsIDQ3MTA2LCA0NzExMSwgNDcxMTYsIDQ3MTIxLCAKLSAgICA0NzEyNiwgNDcxMzEsIDQ3MTM2LCA0NzE0MSwgNDcxNDYsIDQ3MTUxLCA0NzE1NiwgNDcxNjEsIDQ3MTY2LCA0NzE3MSwgCi0gICAgNDcxNzYsIDQ3MTgwLCA0NzE4NCwgNDcxODgsIDQ3MTk0LCA0NzIwMCwgNDcyMDUsIDQ3MjEwLCA0NzIxNSwgNDcyMjAsIAotICAgIDQ3MjI1LCA0NzIzMCwgNDcyMzgsIDQ3MjQ2LCA0NzI1NCwgNDcyNjIsIDQ3MjcwLCA0NzI3OCwgNDcyODYsIDQ3Mjk0LCAKLSAgICA0NzMwMCwgNDczMDUsIDQ3MzEwLCA0NzMxNSwgNDczMTgsIDQ3MzIyLCA0NzMyNiwgNDczMzAsIDQ3MzM0LCA0NzMzOCwgCi0gICAgNDczNDIsIDQ3MzQ5LCA0NzM1NiwgNDczNjQsIDQ3MzcyLCA0NzM3NywgNDczODIsIDQ3Mzg5LCA0NzM5NiwgNDc0MDMsIAotICAgIDQ3NDEwLCA0NzQxMywgNDc0MTYsIDQ3NDIxLCA0NzQyMywgNDc0MjcsIDQ3NDMyLCA0NzQzNCwgNDc0MzYsIDQ3NDM4LCAKLSAgICA0NzQ0MCwgNDc0NDUsIDQ3NDQ4LCA0NzQ1MCwgNDc0NTUsIDQ3NDYyLCA0NzQ2OSwgNDc0NzIsIDQ3NDc2LCA0NzQ4MSwgCi0gICAgNDc0ODYsIDQ3NDk0LCA0NzUwMCwgNDc1MDYsIDQ3NTE4LCA0NzUyNSwgNDc1MzIsIDQ3NTM3LCA0NzU0MiwgNDc1NDgsIAotICAgIDQ3NTUxLCA0NzU1NCwgNDc1NTksIDQ3NTYxLCA0NzU2NSwgNDc1NjcsIDQ3NTY5LCA0NzU3MSwgNDc1NzMsIDQ3NTc1LCAKLSAgICA0NzU3NywgNDc1ODIsIDQ3NTg0LCA0NzU4NiwgNDc1ODgsIDQ3NTkwLCA0NzU5NCwgNDc1OTYsIDQ3NTk5LCA0NzYwNCwgCi0gICAgNDc2MDksIDQ3NjE0LCA0NzYxOSwgNDc2MjUsIDQ3NjMxLCA0NzYzMywgNDc2MzYsIDQ3NjQzLCA0NzY1MCwgNDc2NTcsIAotICAgIDQ3NjY0LCA0NzY2OCwgNDc2NzIsIDQ3Njc0LCA0NzY3NiwgNDc2ODAsIDQ3Njg2LCA0NzY5MSwgNDc2OTMsIDQ3Njk3LCAKLSAgICA0NzcwNiwgNDc3MTQsIDQ3NzIyLCA0NzcyOCwgNDc3MzQsIDQ3NzM5LCA0Nzc0NSwgNDc3NTAsIDQ3NzUzLCA0Nzc2NywgCi0gICAgNDc3NzAsIDQ3Nzc1LCA0Nzc4MCwgNDc3ODYsIDQ3Nzk2LCA0Nzc5OCwgNDc4MDQsIDQ3ODEwLCA0NzgxNCwgNDc4MjEsIAotICAgIDQ3ODI1LCA0NzgyNywgNDc4MjksIDQ3ODMzLCA0NzgzOSwgNDc4NDQsIDQ3ODUwLCA0Nzg1MiwgNDc4NTgsIDQ3ODYwLCAKLSAgICA0Nzg2NiwgNDc4NjgsIDQ3ODcwLCA0Nzg3NSwgNDc4NzcsIDQ3ODgxLCA0Nzg4NiwgNDc4ODgsIDQ3ODkzLCA0Nzg5OCwgCi0gICAgNDc5MDIsIDQ3OTA5LCAwLCA0NzkxOSwgNDc5MjUsIDQ3OTI4LCA0NzkzNCwgNDc5MzcsIDQ3OTQyLCA0Nzk0NywgNDc5NTEsIAotICAgIDQ3OTUzLCA0Nzk1NSwgNDc5NTksIDQ3OTYzLCA0Nzk2NywgNDc5NzEsIDQ3OTc2LCA0Nzk3OCwgNDc5ODMsIDQ3OTg2LCAKLSAgICA0Nzk4OSwgNDc5OTIsIDQ3OTk2LCA0ODAwMCwgNDgwMDUsIDQ4MDA5LCA0ODAxNCwgNDgwMTksIDQ4MDIzLCA0ODAyOCwgCi0gICAgNDgwMzQsIDQ4MDM3LCA0ODA0MywgNDgwNDgsIDQ4MDUyLCA0ODA1NywgNDgwNjMsIDQ4MDY5LCA0ODA3NiwgNDgwODIsIAotICAgIDQ4MDg5LCA0ODA5NiwgNDgwOTgsIDQ4MTA1LCA0ODEwOSwgNDgxMTUsIDQ4MTIxLCA0ODEyNiwgNDgxMzIsIDQ4MTM2LCAKLSAgICA0ODE0MSwgNDgxNDQsIDQ4MTQ5LCA0ODE1NSwgNDgxNjIsIDQ4MTcwLCA0ODE3NywgNDgxODYsIDQ4MTk2LCA0ODIwMywgCi0gICAgNDgyMDksIDQ4MjEzLCA0ODIyMCwgNDgyMjUsIDQ4MjM0LCA0ODIzNywgNDgyNDAsIDQ4MjQ5LCA0ODI1OSwgNDgyNjYsIAotICAgIDQ4MjY4LCA0ODI3NCwgNDgyNzksIDQ4MjgxLCA0ODI4NCwgNDgyODgsIDQ4Mjk2LCA0ODMwNSwgNDgzMDgsIDQ4MzEzLCAKLSAgICA0ODMxOCwgNDgzMjYsIDQ4MzM0LCA0ODM0MiwgNDgzNTAsIDQ4MzU2LCA0ODM2MiwgNDgzNjgsIDQ4Mzc2LCA0ODM4MSwgCi0gICAgNDgzODQsIDQ4Mzg4LCA0ODM5MSwgNDg0MDMsIDQ4NDEzLCA0ODQyNCwgNDg0MzMsIDQ4NDQ0LCA0ODQ1NCwgNDg0NjMsIAotICAgIDQ4NDY5LCA0ODQ3NywgNDg0ODEsIDQ4NDg5LCA0ODQ5MywgNDg1MDEsIDQ4NTA4LCA0ODUxNSwgNDg1MjQsIDQ4NTMzLCAKLSAgICA0ODU0MywgNDg1NTMsIDQ4NTYzLCA0ODU3MywgNDg1ODIsIDQ4NTkxLCA0ODYwMSwgNDg2MTEsIDQ4NjIwLCA0ODYyOSwgCi0gICAgNDg2MzUsIDQ4NjQxLCA0ODY0NywgNDg2NTMsIDQ4NjU5LCA0ODY2NSwgNDg2NzEsIDQ4Njc3LCA0ODY4MywgNDg2OTAsIAotICAgIDQ4Njk2LCA0ODcwMiwgNDg3MDgsIDQ4NzE0LCA0ODcyMCwgNDg3MjYsIDQ4NzMyLCA0ODczOCwgNDg3NDQsIDQ4NzUxLCAKLSAgICA0ODc1OCwgNDg3NjUsIDQ4NzcyLCA0ODc3OSwgNDg3ODYsIDQ4NzkzLCA0ODgwMCwgNDg4MDcsIDQ4ODE0LCA0ODgyMiwgCi0gICAgNDg4MjcsIDQ4ODMwLCA0ODgzNCwgNDg4MzgsIDQ4ODQ0LCA0ODg0NywgNDg4NTMsIDQ4ODU5LCA0ODg2NCwgNDg4NjgsIAotICAgIDQ4ODczLCA0ODg3OSwgNDg4ODYsIDQ4ODg5LCA0ODg5NiwgNDg5MDMsIDQ4OTA3LCA0ODkxNiwgNDg5MjUsIDQ4OTMwLCAKLSAgICA0ODkzNiwgNDg5NDEsIDQ4OTQ2LCA0ODk1MywgNDg5NjAsIDQ4OTY4LCA0ODk3NiwgNDg5ODUsIDQ4OTg5LCA0ODk5OCwgCi0gICAgNDkwMDMsIDQ5MDA3LCA0OTAxNCwgNDkwMTgsIDQ5MDI1LCA0OTAzMywgNDkwMzgsIDQ5MDQ2LCA0OTA1MCwgNDkwNTUsIAotICAgIDQ5MDU5LCA0OTA2NCwgNDkwNjgsIDQ5MDczLCA0OTA3OCwgNDkwODcsIDQ5MDg5LCA0OTA5MiwgNDkwOTUsIDQ5MTAyLCAKLSAgICA0OTEwOSwgNDkxMTQsIDQ5MTIyLCA0OTEyOCwgNDkxMzQsIDQ5MTM5LCA0OTE0MiwgNDkxNDcsIDQ5MTUyLCA0OTE1NywgCi0gICAgNDkxNjUsIDQ5MTY5LCA0OTE3NiwgNDkxODQsIDQ5MTkyLCA0OTE5NywgNDkyMDIsIDQ5MjA4LCA0OTIxMywgNDkyMTgsIAotICAgIDQ5MjI0LCA0OTIyOSwgNDkyMzIsIDQ5MjM2LCA0OTI0MCwgNDkyNDcsIDQ5MjU2LCA0OTI2MSwgNDkyNzAsIDQ5Mjc5LCAKLSAgICA0OTI4NSwgNDkyOTEsIDQ5Mjk2LCA0OTMwMSwgNDkzMDYsIDQ5MzExLCA0OTMxNywgNDkzMjMsIDQ5MzMxLCA0OTMzOSwgCi0gICAgNDkzNDUsIDQ5MzUxLCA0OTM1NiwgNDkzNjEsIDQ5MzY4LCA0OTM3NSwgNDkzODEsIDQ5Mzg0LCA0OTM4NywgNDkzOTEsIAotICAgIDQ5Mzk1LCA0OTM5OSwgNDk0MDQsIDQ5NDEwLCA0OTQxNiwgNDk0MjMsIDQ5NDMwLCA0OTQzNSwgNDk0MzksIDQ5NDQzLCAKLSAgICA0OTQ0NywgNDk0NTEsIDQ5NDU1LCA0OTQ1OSwgNDk0NjMsIDQ5NDY3LCA0OTQ3MSwgNDk0NzUsIDQ5NDc5LCA0OTQ4MywgCi0gICAgNDk0ODcsIDQ5NDkxLCA0OTQ5NSwgNDk0OTksIDQ5NTAzLCA0OTUwNywgNDk1MTEsIDQ5NTE1LCA0OTUxOSwgNDk1MjMsIAotICAgIDQ5NTI3LCA0OTUzMSwgNDk1MzUsIDQ5NTM5LCA0OTU0MywgNDk1NDcsIDQ5NTUxLCA0OTU1NSwgNDk1NTksIDQ5NTYzLCAKLSAgICA0OTU2NywgNDk1NzEsIDQ5NTc1LCA0OTU3OSwgNDk1ODMsIDQ5NTg3LCA0OTU5MSwgNDk1OTUsIDQ5NTk5LCA0OTYwMywgCi0gICAgNDk2MDcsIDQ5NjExLCA0OTYxNSwgNDk2MTksIDQ5NjIzLCA0OTYyNywgNDk2MzEsIDQ5NjM1LCA0OTYzOSwgNDk2NDMsIAotICAgIDQ5NjQ3LCA0OTY1MSwgNDk2NTUsIDQ5NjU5LCA0OTY2MywgNDk2NjcsIDQ5NjcxLCA0OTY3NSwgNDk2NzksIDQ5NjgzLCAKLSAgICA0OTY4NywgNDk2OTEsIDQ5Njk1LCA0OTY5OSwgNDk3MDMsIDQ5NzA3LCA0OTcxMSwgNDk3MTUsIDQ5NzE5LCA0OTcyMywgCi0gICAgNDk3MjcsIDQ5NzMxLCA0OTczNSwgNDk3MzksIDQ5NzQzLCA0OTc0NywgNDk3NTEsIDQ5NzU1LCA0OTc1OSwgNDk3NjMsIAotICAgIDQ5NzY3LCA0OTc3MSwgNDk3NzUsIDQ5Nzc5LCA0OTc4MywgNDk3ODcsIDQ5NzkxLCA0OTc5NSwgNDk3OTksIDQ5ODAzLCAKLSAgICA0OTgwNywgNDk4MTEsIDQ5ODE1LCA0OTgxOSwgNDk4MjMsIDQ5ODI3LCA0OTgzMSwgNDk4MzUsIDQ5ODM5LCA0OTg0MywgCi0gICAgNDk4NDcsIDQ5ODUxLCA0OTg1NSwgNDk4NTksIDQ5ODYzLCA0OTg2NywgNDk4NzEsIDQ5ODc1LCA0OTg3OSwgNDk4ODMsIAotICAgIDQ5ODg3LCA0OTg5MSwgNDk4OTUsIDQ5ODk5LCA0OTkwMywgNDk5MDcsIDQ5OTExLCA0OTkxNSwgNDk5MTksIDQ5OTIzLCAKLSAgICA0OTkyNywgNDk5MzEsIDQ5OTM1LCA0OTkzOSwgNDk5NDMsIDQ5OTQ3LCA0OTk1MSwgNDk5NTUsIDQ5OTU5LCA0OTk2MywgCi0gICAgNDk5NjcsIDQ5OTcxLCA0OTk3NSwgNDk5NzksIDQ5OTgzLCA0OTk4NywgNDk5OTEsIDQ5OTk1LCA0OTk5OSwgNTAwMDMsIAotICAgIDUwMDA3LCA1MDAxMSwgNTAwMTUsIDUwMDE5LCA1MDAyMywgNTAwMjcsIDUwMDMxLCA1MDAzNSwgNTAwMzksIDUwMDQzLCAKLSAgICA1MDA0NywgNTAwNTEsIDUwMDU1LCA1MDA1OSwgNTAwNjMsIDUwMDY3LCA1MDA3MSwgNTAwNzUsIDUwMDc5LCA1MDA4MywgCi0gICAgNTAwODcsIDUwMDkxLCA1MDA5NSwgNTAwOTksIDUwMTAzLCA1MDEwNywgNTAxMTEsIDUwMTE1LCA1MDExOSwgNTAxMjMsIAotICAgIDUwMTI3LCA1MDEzMSwgNTAxMzUsIDUwMTM5LCA1MDE0MywgNTAxNDcsIDUwMTUxLCA1MDE1NSwgNTAxNTksIDUwMTYzLCAKLSAgICA1MDE2NywgNTAxNzEsIDUwMTc1LCA1MDE3OSwgNTAxODMsIDUwMTg3LCA1MDE5MSwgNTAxOTUsIDUwMTk5LCA1MDIwMywgCi0gICAgNTAyMDcsIDUwMjExLCA1MDIxNSwgNTAyMTksIDUwMjIzLCA1MDIyNywgNTAyMzEsIDUwMjM1LCA1MDIzOSwgNTAyNDMsIAotICAgIDUwMjQ3LCA1MDI1MSwgNTAyNTUsIDUwMjU5LCA1MDI2MywgNTAyNjcsIDUwMjcxLCA1MDI3NSwgNTAyNzksIDUwMjgzLCAKLSAgICA1MDI4NywgNTAyOTEsIDUwMjk1LCA1MDI5OSwgNTAzMDMsIDUwMzA3LCA1MDMxMSwgNTAzMTUsIDUwMzE5LCA1MDMyMywgCi0gICAgNTAzMjcsIDUwMzMxLCA1MDMzNSwgNTAzMzksIDUwMzQzLCA1MDM0NywgNTAzNTEsIDUwMzU1LCA1MDM1OSwgNTAzNjMsIAotICAgIDUwMzY3LCA1MDM3MSwgNTAzNzUsIDUwMzc5LCA1MDM4MywgNTAzODcsIDUwMzkxLCA1MDM5NSwgNTAzOTksIDUwNDAzLCAKLSAgICA1MDQwNywgNTA0MTEsIDUwNDE1LCA1MDQxOSwgNTA0MjMsIDUwNDI3LCA1MDQzMSwgNTA0MzUsIDUwNDM5LCA1MDQ0MywgCi0gICAgNTA0NDcsIDUwNDUxLCA1MDQ1NSwgNTA0NTksIDUwNDY2LCA1MDQ3NCwgNTA0ODAsIDUwNDg2LCA1MDQ5MywgNTA1MDAsIAotICAgIDUwNTA2LCA1MDUxMiwgNTA1MTgsIDUwNTI0LCA1MDUyOSwgNTA1MzQsIDUwNTM5LCA1MDU0NCwgNTA1NTAsIDUwNTU2LCAKLSAgICA1MDU2NCwgNTA1NzEsIDUwNTc3LCA1MDU4MywgNTA1OTEsIDUwNjAwLCA1MDYwNywgNTA2MTcsIDUwNjI4LCA1MDYzMSwgCi0gICAgNTA2MzQsIDUwNjM4LCA1MDY0MiwgNTA2NDksIDUwNjU2LCA1MDY2NywgNTA2NzgsIDUwNjg4LCA1MDY5OCwgNTA3MDUsIAotICAgIDUwNzEyLCA1MDcxOSwgNTA3MjYsIDUwNzM3LCA1MDc0OCwgNTA3NTksIDUwNzcwLCA1MDc4MCwgNTA3OTAsIDUwODAyLCAKLSAgICA1MDgxNCwgNTA4MjUsIDUwODM2LCA1MDg0OCwgNTA4NjAsIDUwODY5LCA1MDg3OSwgNTA4ODksIDUwOTAwLCA1MDkxMSwgCi0gICAgNTA5MTgsIDUwOTI1LCA1MDkzMiwgNTA5MzksIDUwOTQ5LCA1MDk1OSwgNTA5NjcsIDUwOTc1LCA1MDk4MiwgNTA5ODksIAotICAgIDUwOTk2LCA1MTAwMywgNTEwMTAsIDUxMDE1LCA1MTAyMCwgNTEwMjYsIDUxMDM0LCA1MTA0NCwgNTEwNTQsIDUxMDY0LCAKLSAgICA1MTA3NCwgNTEwODQsIDUxMDk0LCA1MTEwNCwgNTExMTQsIDUxMTI0LCA1MTEzNCwgNTExNDQsIDUxMTU1LCA1MTE2NiwgCi0gICAgNTExNzYsIDUxMTg2LCA1MTE5NywgNTEyMDgsIDUxMjE4LCA1MTIyOCwgNTEyMzksIDUxMjUwLCA1MTI2MCwgNTEyNzAsIAotICAgIDUxMjgxLCA1MTI5MiwgNTEzMDgsIDUxMzI3LCA1MTM0MywgNTEzNjIsIDUxMzc4LCA1MTM5NCwgNTE0MTAsIDUxNDI2LCAKLSAgICA1MTQzNywgNTE0NDksIDUxNDYwLCA1MTQ3MiwgNTE0OTEsIDUxNTEwLCA1MTUxOCwgNTE1MjQsIDUxNTMxLCA1MTUzOCwgCi0gICAgNTE1NDUsIDUxNTUyLCA1MTU1NywgNTE1NjMsIDUxNTY4LCA1MTU3MywgNTE1NzksIDUxNTg0LCA1MTU4OSwgNTE1OTQsIAotICAgIDUxNTk5LCA1MTYwNCwgNTE2MTEsIDUxNjE2LCA1MTYyMywgNTE2MjgsIDUxNjMzLCA1MTYzNywgNTE2NDEsIDUxNjQ4LCAKLSAgICA1MTY1NSwgNTE2NjIsIDUxNjY5LCA1MTY3NiwgNTE2ODMsIDUxNjk2LCA1MTcwOSwgNTE3MjIsIDUxNzM1LCA1MTc0MywgCi0gICAgNTE3NTEsIDUxNzU3LCA1MTc2MywgNTE3NzAsIDUxNzc3LCA1MTc4NCwgNTE3OTEsIDUxNzk1LCA1MTgwMCwgNTE4MDgsIAotICAgIDUxODE2LCA1MTgyNCwgNTE4MzEsIDUxODM1LCA1MTg0MywgNTE4NTEsIDUxODU1LCA1MTg1OSwgNTE4NjQsIDUxODcxLCAKLSAgICA1MTg3OSwgNTE4ODcsIDUxOTA2LCA1MTkyNSwgNTE5NDQsIDUxOTYzLCA1MTk4MiwgNTIwMDEsIDUyMDIwLCA1MjAzOSwgCi0gICAgNTIwNDUsIDUyMDUyLCA1MjA2MSwgNTIwNjksIDUyMDc3LCA1MjA4MiwgNTIwODUsIDUyMDg4LCA1MjA5MywgNTIwOTYsIAotICAgIDUyMTE1LCA1MjEyMiwgNTIxMjgsIDUyMTM0LCA1MjEzOCwgNTIxNDEsIDUyMTQ0LCA1MjE0NywgNTIxNTksIDUyMTcyLCAKLSAgICA1MjE3OSwgNTIxODYsIDUyMTg5LCA1MjE5MywgNTIxOTYsIDUyMjAxLCA1MjIwNiwgNTIyMTEsIDUyMjE3LCA1MjIyNiwgCi0gICAgNTIyMzMsIDUyMjQwLCA1MjI0OCwgNTIyNTUsIDUyMjYyLCA1MjI2NSwgNTIyNzEsIDUyMjc3LCA1MjI4MCwgNTIyODMsIAotICAgIDUyMjg4LCA1MjI5MywgNTIyOTksIDUyMzA1LCA1MjMwOSwgNTIzMTQsIDUyMzIxLCA1MjMyNSwgNTIzMzEsIDUyMzM1LCAKLSAgICA1MjMzOSwgNTIzNDcsIDUyMzU5LCA1MjM2OCwgNTIzNzIsIDUyMzc0LCA1MjM4MywgNTIzOTIsIDUyMzk4LCA1MjQwMSwgCi0gICAgNTI0MDcsIDUyNDEzLCA1MjQxOCwgNTI0MjMsIDUyNDI4LCA1MjQzMywgNTI0MzgsIDUyNDQzLCA1MjQ0NSwgNTI0NTEsIAotICAgIDUyNDU2LCA1MjQ2MywgNTI0NjcsIDUyNDczLCA1MjQ3NiwgNTI0ODAsIDUyNDg3LCA1MjQ5NCwgNTI0OTYsIDUyNDk4LCAKLSAgICA1MjUwNCwgNTI1MTAsIDUyNTE2LCA1MjUyNSwgNTI1MzQsIDUyNTQxLCA1MjU0OCwgNTI1NTQsIDUyNTYwLCA1MjU2NSwgCi0gICAgNTI1NzAsIDUyNTc1LCA1MjU4MSwgNTI1ODcsIDUyNTkyLCA1MjU5OSwgNTI2MDMsIDUyNjA3LCA1MjYyMCwgNTI2MzMsIAotICAgIDUyNjQ1LCA1MjY1NCwgNTI2NjAsIDUyNjY3LCA1MjY3MiwgNTI2NzcsIDUyNjgyLCA1MjY4NywgNTI2OTIsIDUyNjk0LCAKLSAgICA1MjcwMSwgNTI3MDgsIDUyNzE1LCA1MjcyMiwgNTI3MjksIDUyNzM3LCA1Mjc0MywgNTI3NDgsIDUyNzU0LCA1Mjc2MCwgCi0gICAgNTI3NjYsIDUyNzczLCA1Mjc3OSwgNTI3ODcsIDUyNzk1LCA1MjgwMywgNTI4MTEsIDUyODE4LCA1MjgyNCwgNTI4MzAsIAotICAgIDUyODM5LCA1Mjg0MywgNTI4NTIsIDUyODYxLCA1Mjg3MCwgNTI4NzgsIDUyODgyLCA1Mjg4OCwgNTI4OTUsIDUyOTAyLCAKLSAgICA1MjkwNiwgNTI5MTIsIDUyOTE5LCA1MjkyNCwgNTI5MjksIDUyOTM1LCA1Mjk0MCwgNTI5NDUsIDUyOTUyLCA1Mjk1OSwgCi0gICAgNTI5NjQsIDUyOTY5LCA1Mjk3NywgNTI5ODUsIDUyOTk1LCA1MzAwNSwgNTMwMTIsIDUzMDE5LCA1MzAyMywgNTMwMjcsIAotICAgIDUzMDM5LCA1MzA0NSwgNTMwNTEsIDUzMDU2LCA1MzA2MSwgNTMwNjgsIDUzMDc1LCA1MzA4MSwgNTMwODcsIDUzMDk2LCAKLSAgICA1MzEwNCwgNTMxMTIsIDUzMTE5LCA1MzEyNiwgNTMxMzMsIDUzMTM5LCA1MzE0NiwgNTMxNTIsIDUzMTU5LCA1MzE2NiwgCi0gICAgNTMxNzMsIDUzMTgwLCA1MzE4NiwgNTMxOTEsIDUzMjAwLCA1MzIxMCwgNTMyMTcsIDUzMjI2LCA1MzIzMiwgNTMyMzcsIAotICAgIDUzMjQyLCA1MzI1MiwgNTMyNTgsIDUzMjY0LCA1MzI3MCwgNTMyNzgsIDUzMjgzLCA1MzI5MCwgNTMyOTcsIDUzMzA4LCAKLSAgICA1MzMxNSwgNTMzMjIsIDUzMzI5LCA1MzMzNiwgNTMzNDMsIDUzMzUwLCA1MzM1NywgNTMzNjksIDUzMzgxLCA1MzM5MiwgCi0gICAgNTM0MDMsIDUzNDE2LCA1MzQyOSwgNTM0MzQsIDUzNDM5LCA1MzQ0OCwgNTM0NTcsIDUzNDY0LCA1MzQ3MSwgNTM0ODAsIAotICAgIDUzNDg5LCA1MzQ5NywgNTM1MDUsIDUzNTEzLCA1MzUyMSwgNTM1MzEsIDUzNTQxLCA1MzU1NSwgNTM1NjksIDUzNTc3LCAKLSAgICA1MzU4NSwgNTM1OTcsIDUzNjA5LCA1MzYxNywgNTM2MjUsIDUzNjM1LCA1MzY0NSwgNTM2NTAsIDUzNjU1LCA1MzY2NCwgCi0gICAgNTM2NzMsIDUzNjc4LCA1MzY4MywgNTM2OTEsIDUzNjk3LCA1MzcwMywgNTM3MTEsIDUzNzE5LCA1MzczMiwgNTM3NDUsIAotICAgIDUzNzQ5LCA1Mzc1MywgNTM3NjAsIDUzNzY3LCA1Mzc3NCwgNTM3ODIsIDUzNzkwLCA1Mzc5OSwgNTM4MDgsIDUzODE0LCAKLSAgICA1MzgyMCwgNTM4MjcsIDUzODM0LCA1Mzg0MSwgNTM4NDgsIDUzODU3LCA1Mzg2NiwgNTM4NjksIDUzODcyLCA1Mzg3NywgCi0gICAgNTM4ODIsIDUzODg4LCA1Mzg5NCwgNTM5MDEsIDUzOTA4LCA1MzkxOCwgNTM5MjgsIDUzOTM1LCA1Mzk0MiwgNTM5NTAsIAotICAgIDUzOTU4LCA1Mzk2NiwgNTM5NzQsIDUzOTgyLCA1Mzk5MCwgNTM5OTYsIDU0MDAyLCA1NDAwNiwgNTQwMTAsIDU0MDE3LCAKLSAgICA1NDAyNCwgNTQwMjksIDU0MDM0LCA1NDAzOSwgNTQwNDQsIDU0MDUwLCA1NDA2NCwgNTQwNzEsIDU0MDc4LCA1NDA4MiwgCi0gICAgNTQwODQsIDU0MDg2LCA1NDA5MSwgNTQwOTYsIDU0MTAxLCA1NDEwNiwgNTQxMTQsIDU0MTIxLCA1NDEyOCwgNTQxMzYsIAotICAgIDU0MTQ4LCA1NDE1NiwgNTQxNjQsIDU0MTc1LCA1NDE3OSwgNTQxODMsIDU0MTg5LCA1NDE5NywgNTQyMTAsIDU0MjE3LCAKLSAgICA1NDIyNCwgNTQyMzEsIDU0MjM2LCA1NDI0MywgNTQyNTIsIDU0MjYwLCA1NDI2NiwgNTQyNzIsIDU0Mjc4LCA1NDI4NywgCi0gICAgNTQyOTYsIDU0MzA0LCA1NDMxMywgNTQzMTgsIDU0MzIxLCA1NDMyNiwgNTQzMzIsIDU0MzM4LCA1NDM0NCwgNTQzNTAsIAotICAgIDU0MzU0LCA1NDM1NywgNTQzNjEsIDU0MzY1LCA1NDM3MSwgNTQzNzcsIDU0MzgzLCA1NDM4OSwgNTQzOTMsIDU0Mzk3LCAKLSAgICA1NDQwNCwgNTQ0MTEsIDU0NDE4LCA1NDQyNSwgNTQ0MzIsIDU0NDM5LCA1NDQ0OSwgNTQ0NTksIDU0NDY2LCA1NDQ3MywgCi0gICAgNTQ0ODEsIDU0NDg5LCA1NDQ5MywgNTQ0OTgsIDU0NTAzLCA1NDUwOSwgNTQ1MTUsIDU0NTE4LCA1NDUyMSwgNTQ1MjQsIAotICAgIDU0NTI3LCA1NDUzMSwgNTQ1MzYsIDU0NTQxLCA1NDU0NiwgNTQ1NTEsIDU0NTU2LCA1NDU2MCwgNTQ1NjQsIDU0NTY4LCAKLSAgICA1NDU3MiwgNTQ1NzYsIDU0NTgwLCA1NDU4NCwgNTQ1OTAsIDU0NTk0LCA1NDYwMCwgNTQ2MDUsIDU0NjEyLCA1NDYyMCwgCi0gICAgNTQ2MjcsIDU0NjM1LCA1NDY0MiwgNTQ2NTAsIDU0NjU5LCA1NDY2NiwgNTQ2NzYsIDU0Njg3LCA1NDY5MywgNTQ3MDIsIAotICAgIDU0NzA4LCA1NDcxNywgNTQ3MjYsIDU0NzMyLCA1NDczOCwgNTQ3NDIsIDU0NzQ2LCA1NDc1NSwgNTQ3NjQsIDU0NzcxLCAKLSAgICA1NDc3OCwgNTQ3ODcsIDAsIDAsIDAsIDU0Nzk2LCA1NDgwMSwgNTQ4MDUsIDU0ODA5LCA1NDgxNCwgNTQ4MTksIDU0ODI0LCAKLSAgICA1NDgzMiwgNTQ4NDAsIDU0ODQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyNiwgMzIyMzMsIDMyMjQwLCAzMjI0NywgMzIyNTQsIAorICAgIDMyMjYzLCAzMjI3MiwgMzIyODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjkwLCAzMjI5NSwgMzIzMDAsIDMyMzA1LCAKKyAgICAzMjMxMCwgMzIzMTksIDMyMzMwLCAzMjMzOSwgMzIzNTAsIDMyMzU2LCAzMjM2OSwgMzIzNzUsIDMyMzgyLCAzMjM4OSwgCisgICAgMzIzOTQsIDMyNDAwLCAzMjQwNiwgMzI0MTcsIDMyNDI2LCAzMjQzMywgMzI0NDAsIDMyNDQ5LCAzMjQ1NiwgMzI0NjUsIAorICAgIDMyNDc1LCAzMjQ4NSwgMzI0OTIsIDMyNDk5LCAzMjUwNiwgMzI1MTYsIDMyNTIxLCAzMjUyOSwgMzI1MzUsIDMyNTQzLCAKKyAgICAzMjU1MiwgMzI1NTcsIDMyNTY0LCAzMjU3MCwgMzI1NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNTgwLCAKKyAgICAzMjU4NSwgMzI1OTEsIDMyNTk4LCAzMjYwNiwgMzI2MTIsIDMyNjE4LCAzMjYyNCwgMzI2MjksIDMyNjM2LCAzMjY0MiwgCisgICAgMzI2NDgsIDMyNjU0LCAzMjY2MiwgMzI2NjcsIDMyNjc1LCAzMjY4MCwgMzI2ODYsIDMyNjkyLCAzMjY5OSwgMzI3MDcsIAorICAgIDMyNzE0LCAzMjcyMCwgMzI3MjcsIDMyNzM0LCAzMjc0MCwgMzI3NDcsIDMyNzU0LCAzMjc2MCwgMzI3NjUsIDMyNzcxLCAKKyAgICAzMjc3OSwgMzI3ODcsIDMyNzkzLCAzMjc5OSwgMzI4MDUsIDMyODExLCAzMjgxOSwgMzI4MjMsIDMyODI5LCAzMjgzNSwgCisgICAgMzI4NDEsIDMyODQ3LCAzMjg1MywgMzI4NTksIDMyODYzLCAzMjg2OCwgMzI4NzMsIDMyODgwLCAzMjg4NSwgMzI4ODksIAorICAgIDMyODk1LCAzMjkwMCwgMzI5MDUsIDMyOTA5LCAzMjkxNCwgMzI5MTksIDMyOTIzLCAzMjkyNywgMzI5MzIsIDMyOTM5LCAKKyAgICAzMjk0MywgMzI5NDgsIDMyOTUzLCAzMjk1NywgMzI5NjIsIDMyOTY2LCAzMjk3MSwgMzI5NzUsIDMyOTgxLCAzMjk4NiwgCisgICAgMzI5OTMsIDMyOTk4LCAzMzAwMywgMzMwMDcsIDMzMDEyLCAzMzAxNywgMzMwMjQsIDMzMDI5LCAzMzAzNSwgMzMwNDAsIAorICAgIDMzMDQ0LCAzMzA0OSwgMzMwNTMsIDMzMDU4LCAzMzA2NSwgMzMwNzIsIDMzMDc3LCAzMzA4MiwgMzMwODYsIDMzMDkyLCAKKyAgICAzMzA5OCwgMzMxMDMsIDMzMTA4LCAzMzExMywgMzMxMTksIDMzMTI0LCAzMzEzMCwgMzMxMzUsIDMzMTQxLCAzMzE0NywgCisgICAgMzMxNTMsIDMzMTYwLCAzMzE2NywgMzMxNzQsIDMzMTgxLCAzMzE4OCwgMzMxOTUsIDMzMjAwLCAzMzIwOCwgMzMyMTcsIAorICAgIDMzMjI2LCAzMzIzNSwgMzMyNDQsIDMzMjUzLCAzMzI2MiwgMzMyNzQsIDMzMjgzLCAzMzI5MiwgMzMzMDEsIDMzMzA4LCAKKyAgICAzMzMxMywgMzMzMjAsIDMzMzI4LCAzMzMzNiwgMzMzNDMsIDMzMzUwLCAzMzM1NywgMzMzNjQsIDMzMzcyLCAzMzM4MSwgCisgICAgMzMzOTAsIDMzMzk5LCAzMzQwOCwgMzM0MTcsIDMzNDI2LCAzMzQzNSwgMzM0NDQsIDMzNDUzLCAzMzQ2MiwgMzM0NzEsIAorICAgIDMzNDgwLCAzMzQ4OSwgMzM0OTgsIDMzNTA2LCAzMzUxNSwgMzM1MjYsIDMzNTM0LCAzMzU0MywgMzM1NTQsIDMzNTYzLCAKKyAgICAzMzU3MiwgMzM1ODEsIDMzNTkwLCAzMzU5OCwgMzM2MDcsIDMzNjE0LCAzMzYxOSwgMzM2MjcsIDMzNjMyLCAzMzYzOSwgCisgICAgMzM2NDQsIDMzNjUzLCAzMzY1OSwgMzM2NjYsIDMzNjczLCAzMzY3OCwgMzM2ODMsIDMzNjkxLCAzMzY5OSwgMzM3MDgsIAorICAgIDMzNzE3LCAzMzcyMiwgMzM3MjksIDMzNzQwLCAzMzc0OCwgMzM3NTcsIDMzNzYzLCAzMzc2OSwgMzM3NzQsIDMzNzgxLCAKKyAgICAzMzc4NiwgMzM3OTUsIDMzODAwLCAzMzgwNSwgMzM4MTAsIDMzODE3LCAzMzgyNCwgMzM4MjksIDMzODM4LCAzMzg0NiwgCisgICAgMzM4NTEsIDMzODU2LCAzMzg2MywgMzM4NzAsIDMzODc0LCAzMzg3OCwgMzM4ODEsIDMzODg0LCAzMzg4NywgMzM4OTAsIAorICAgIDMzODkzLCAzMzg5NiwgMzM5MDMsIDMzOTA2LCAzMzkwOSwgMzM5MTQsIDMzOTE4LCAzMzkyMiwgMzM5MjYsIDMzOTMwLCAKKyAgICAzMzkzNCwgMzM5NDMsIDMzOTQ5LCAzMzk1NSwgMzM5NjEsIDMzOTY5LCAzMzk3NywgMzM5ODMsIDMzOTg5LCAzMzk5NiwgCisgICAgMzQwMDIsIDM0MDA3LCAzNDAxMywgMzQwMTksIDM0MDI1LCAzNDAzMiwgMzQwMzgsIDM0MDQ2LCAzNDA1MiwgMzQwNTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDY1LCAzNDA3MiwgCisgICAgMzQwNzksIDM0MDg0LCAzNDA5MywgMzQxMDEsIDM0MTA5LCAzNDExNiwgMzQxMjMsIDM0MTMwLCAzNDEzNywgMzQxNDUsIAorICAgIDM0MTUzLCAzNDE2MywgMzQxNzMsIDM0MTgxLCAzNDE4OSwgMzQxOTcsIDM0MjA1LCAzNDIxNCwgMzQyMjMsIDM0MjMxLCAKKyAgICAzNDIzOSwgMzQyNDgsIDM0MjU3LCAzNDI2NywgMzQyNzcsIDM0Mjg2LCAzNDI5NSwgMzQzMDMsIDM0MzExLCAzNDMxOSwgCisgICAgMzQzMjcsIDM0MzM3LCAzNDM0NywgMzQzNTUsIDM0MzYzLCAzNDM3MSwgMzQzNzksIDM0Mzg3LCAzNDM5NSwgMzQ0MDMsIAorICAgIDM0NDExLCAzNDQxOSwgMzQ0MjcsIDM0NDM1LCAzNDQ0MywgMzQ0NTIsIDM0NDYxLCAzNDQ3MCwgMzQ0NzksIDM0NDg5LCAKKyAgICAzNDQ5OSwgMzQ1MDYsIDM0NTEzLCAzNDUyMSwgMzQ1MjksIDM0NTM4LCAzNDU0NywgMzQ1NTUsIDM0NTYzLCAzNDU3NSwgCisgICAgMzQ1ODcsIDM0NTk2LCAzNDYwNSwgMzQ2MTQsIDM0NjIzLCAzNDYzMCwgMzQ2MzcsIDM0NjQ1LCAzNDY1MywgMzQ2NjEsIAorICAgIDM0NjY5LCAzNDY3NywgMzQ2ODUsIDM0NjkzLCAzNDcwMSwgMzQ3MTAsIDM0NzE5LCAzNDcyOCwgMzQ3MzcsIDM0NzQ2LCAKKyAgICAzNDc1NSwgMzQ3NjUsIDM0Nzc1LCAzNDc4NSwgMzQ3OTUsIDM0ODA0LCAzNDgxMywgMzQ4MjAsIDM0ODI3LCAzNDgzNSwgCisgICAgMzQ4NDMsIDM0ODUxLCAzNDg1OSwgMzQ4NjcsIDM0ODc1LCAzNDg4NywgMzQ4OTksIDM0OTA4LCAzNDkxNywgMzQ5MjUsIAorICAgIDM0OTMzLCAzNDk0MSwgMzQ5NDksIDM0OTYwLCAzNDk3MSwgMzQ5ODIsIDM0OTkzLCAzNTAwNSwgMzUwMTcsIDM1MDI1LCAKKyAgICAzNTAzMywgMzUwNDEsIDM1MDQ5LCAzNTA1OCwgMzUwNjcsIDM1MDc2LCAzNTA4NSwgMzUwOTMsIDM1MTAxLCAzNTEwOSwgCisgICAgMzUxMTcsIDM1MTI1LCAzNTEzMywgMzUxNDIsIDM1MTUxLCAzNTE2MSwgMzUxNzEsIDM1MTc4LCAzNTE4NSwgMzUxOTMsIAorICAgIDM1MjAxLCAzNTIwOSwgMzUyMTcsIDM1MjI0LCAzNTIzMSwgMzUyMzksIDM1MjQ3LCAzNTI1NSwgMzUyNjMsIDM1MjcxLCAKKyAgICAzNTI3OSwgMzUyODcsIDM1Mjk1LCAzNTMwMywgMzUzMTEsIDM1MzE5LCAzNTMyNywgMzUzMzUsIDM1MzQzLCAzNTM1MSwgCisgICAgMzUzNTksIDM1MzY4LCAzNTM3NywgMzUzODYsIDM1Mzk0LCAzNTQwMywgMzU0MTIsIDM1NDIxLCAzNTQzMCwgMzU0NDAsIAorICAgIDM1NDQ5LCAzNTQ1NiwgMzU0NjEsIDM1NDY4LCAzNTQ3NSwgMzU0ODMsIDM1NDkxLCAzNTUwMCwgMzU1MDksIDM1NTE5LCAKKyAgICAzNTUyOSwgMzU1NDAsIDM1NTUxLCAzNTU2MCwgMzU1NjksIDM1NTc5LCAzNTU4OSwgMzU1OTgsIDM1NjA3LCAzNTYxNywgCisgICAgMzU2MjcsIDM1NjM4LCAzNTY0OSwgMzU2NTgsIDM1NjY3LCAzNTY3NywgMzU2ODcsIDM1Njk0LCAzNTcwMSwgMzU3MDksIAorICAgIDM1NzE3LCAzNTcyMywgMzU3MjksIDM1NzM4LCAzNTc0NywgMzU3NTcsIDM1NzY3LCAzNTc3OCwgMzU3ODksIDM1Nzk4LCAKKyAgICAzNTgwNywgMzU4MTcsIDM1ODI3LCAzNTgzNiwgMzU4NDUsIDM1ODUzLCAzNTg2MSwgMzU4NjgsIDM1ODc1LCAzNTg4MywgCisgICAgMzU4OTEsIDM1OTAwLCAzNTkwOSwgMzU5MTksIDM1OTI5LCAzNTk0MCwgMzU5NTEsIDM1OTYwLCAzNTk2OSwgMzU5NzksIAorICAgIDM1OTg5LCAzNTk5OCwgMzYwMDcsIDM2MDE3LCAzNjAyNywgMzYwMzgsIDM2MDQ5LCAzNjA1OCwgMzYwNjcsIDM2MDc3LCAKKyAgICAzNjA4NywgMzYwOTQsIDM2MTAxLCAzNjEwOSwgMzYxMTcsIDM2MTI2LCAzNjEzNSwgMzYxNDUsIDM2MTU1LCAzNjE2NiwgCisgICAgMzYxNzcsIDM2MTg2LCAzNjE5NSwgMzYyMDUsIDM2MjE1LCAzNjIyMywgMzYyMzEsIDM2MjM5LCAzNjI0NywgMzYyNTYsIAorICAgIDM2MjY1LCAzNjI3MiwgMzYyNzksIDM2Mjg2LCAzNjI5MywgMzYzMDAsIDM2MzA3LCAzNjMxNSwgMzYzMjMsIDM2MzMxLCAKKyAgICAzNjMzOSwgMzYzNTAsIDM2MzYxLCAzNjM3MiwgMzYzODMsIDM2Mzk0LCAzNjQwNSwgMzY0MTMsIDM2NDIxLCAzNjQzMiwgCisgICAgMzY0NDMsIDM2NDU0LCAzNjQ2NSwgMzY0NzYsIDM2NDg3LCAzNjQ5NSwgMzY1MDMsIDM2NTE0LCAzNjUyNSwgMzY1MzYsIDAsIAorICAgIDAsIDM2NTQ3LCAzNjU1NSwgMzY1NjMsIDM2NTc0LCAzNjU4NSwgMzY1OTYsIDAsIDAsIDM2NjA3LCAzNjYxNSwgMzY2MjMsIAorICAgIDM2NjM0LCAzNjY0NSwgMzY2NTYsIDM2NjY3LCAzNjY3OCwgMzY2ODksIDM2Njk3LCAzNjcwNSwgMzY3MTYsIDM2NzI3LCAKKyAgICAzNjczOCwgMzY3NDksIDM2NzYwLCAzNjc3MSwgMzY3NzksIDM2Nzg3LCAzNjc5OCwgMzY4MDksIDM2ODIwLCAzNjgzMSwgCisgICAgMzY4NDIsIDM2ODUzLCAzNjg2MSwgMzY4NjksIDM2ODgwLCAzNjg5MSwgMzY5MDIsIDM2OTEzLCAzNjkyNCwgMzY5MzUsIAorICAgIDM2OTQzLCAzNjk1MSwgMzY5NjIsIDM2OTczLCAzNjk4NCwgMCwgMCwgMzY5OTUsIDM3MDAzLCAzNzAxMSwgMzcwMjIsIAorICAgIDM3MDMzLCAzNzA0NCwgMCwgMCwgMzcwNTUsIDM3MDYzLCAzNzA3MSwgMzcwODIsIDM3MDkzLCAzNzEwNCwgMzcxMTUsIAorICAgIDM3MTI2LCAwLCAzNzEzNywgMCwgMzcxNDUsIDAsIDM3MTU2LCAwLCAzNzE2NywgMzcxNzgsIDM3MTg2LCAzNzE5NCwgCisgICAgMzcyMDUsIDM3MjE2LCAzNzIyNywgMzcyMzgsIDM3MjQ5LCAzNzI2MCwgMzcyNjgsIDM3Mjc2LCAzNzI4NywgMzcyOTgsIAorICAgIDM3MzA5LCAzNzMyMCwgMzczMzEsIDM3MzQyLCAzNzM1MCwgMzczNTgsIDM3MzY2LCAzNzM3NCwgMzczODIsIDM3MzkwLCAKKyAgICAzNzM5OCwgMzc0MDYsIDM3NDE0LCAzNzQyMiwgMzc0MzAsIDM3NDM4LCAzNzQ0NiwgMCwgMCwgMzc0NTQsIDM3NDY1LCAKKyAgICAzNzQ3NiwgMzc0OTAsIDM3NTA0LCAzNzUxOCwgMzc1MzIsIDM3NTQ2LCAzNzU2MCwgMzc1NzEsIDM3NTgyLCAzNzU5NiwgCisgICAgMzc2MTAsIDM3NjI0LCAzNzYzOCwgMzc2NTIsIDM3NjY2LCAzNzY3NywgMzc2ODgsIDM3NzAyLCAzNzcxNiwgMzc3MzAsIAorICAgIDM3NzQ0LCAzNzc1OCwgMzc3NzIsIDM3NzgzLCAzNzc5NCwgMzc4MDgsIDM3ODIyLCAzNzgzNiwgMzc4NTAsIDM3ODY0LCAKKyAgICAzNzg3OCwgMzc4ODksIDM3OTAwLCAzNzkxNCwgMzc5MjgsIDM3OTQyLCAzNzk1NiwgMzc5NzAsIDM3OTg0LCAzNzk5NSwgCisgICAgMzgwMDYsIDM4MDIwLCAzODAzNCwgMzgwNDgsIDM4MDYyLCAzODA3NiwgMzgwOTAsIDM4MDk4LCAzODEwNiwgMzgxMTcsIAorICAgIDM4MTI1LCAwLCAzODEzNiwgMzgxNDQsIDM4MTU1LCAzODE2MywgMzgxNzEsIDM4MTc5LCAzODE4NywgMzgxOTUsIDM4MTk4LCAKKyAgICAzODIwMSwgMzgyMDQsIDM4MjA3LCAzODIxMywgMzgyMjQsIDM4MjMyLCAwLCAzODI0MywgMzgyNTEsIDM4MjYyLCAzODI3MCwgCisgICAgMzgyNzgsIDM4Mjg2LCAzODI5NCwgMzgzMDIsIDM4MzA4LCAzODMxNCwgMzgzMjAsIDM4MzI4LCAzODMzNiwgMzgzNDcsIDAsIAorICAgIDAsIDM4MzU4LCAzODM2NiwgMzgzNzcsIDM4Mzg1LCAzODM5MywgMzg0MDEsIDAsIDM4NDA5LCAzODQxNSwgMzg0MjEsIAorICAgIDM4NDI3LCAzODQzNSwgMzg0NDMsIDM4NDU0LCAzODQ2NSwgMzg0NzMsIDM4NDgxLCAzODQ4OSwgMzg1MDAsIDM4NTA4LCAKKyAgICAzODUxNiwgMzg1MjQsIDM4NTMyLCAzODU0MCwgMzg1NDYsIDM4NTUyLCAwLCAwLCAzODU1NSwgMzg1NjYsIDM4NTc0LCAwLCAKKyAgICAzODU4NSwgMzg1OTMsIDM4NjA0LCAzODYxMiwgMzg2MjAsIDM4NjI4LCAzODYzNiwgMzg2NDQsIDM4NjQ3LCAwLCAzODY1MCwgCisgICAgMzg2NTQsIDM4NjU4LCAzODY2MiwgMzg2NjYsIDM4NjcwLCAzODY3NCwgMzg2NzgsIDM4NjgyLCAzODY4NiwgMzg2OTAsIAorICAgIDM4Njk0LCAzODcwMCwgMzg3MDYsIDM4NzEyLCAzODcxNSwgMzg3MTgsIDM4NzIwLCAzODcyNCwgMzg3MjgsIDM4NzMyLCAKKyAgICAzODczNiwgMzg3MzgsIDM4NzQyLCAzODc0NiwgMzg3NTIsIDM4NzU4LCAzODc2NSwgMzg3NzIsIDM4Nzc3LCAzODc4MiwgCisgICAgMzg3ODgsIDM4Nzk0LCAzODc5NiwgMzg3OTksIDM4ODAxLCAzODgwNSwgMzg4MDksIDM4ODEzLCAzODgxNiwgMzg4MjAsIAorICAgIDM4ODI0LCAzODgyOCwgMzg4MzIsIDM4ODM2LCAzODg0MiwgMzg4NDYsIDM4ODUwLCAzODg1NiwgMzg4NjEsIDM4ODY4LCAKKyAgICAzODg3MCwgMzg4NzMsIDM4ODc3LCAzODg4MSwgMzg4ODYsIDM4ODkyLCAzODg5NCwgMzg5MDMsIDM4OTEyLCAzODkxNSwgCisgICAgMzg5MTksIDM4OTIxLCAzODkyMywgMzg5MjUsIDM4OTI4LCAzODkzNCwgMzg5MzYsIDM4OTQwLCAzODk0NCwgMzg5NTEsIAorICAgIDM4OTU4LCAzODk2MiwgMzg5NjcsIDM4OTcyLCAzODk3NywgMzg5ODIsIDM4OTg2LCAzODk5MCwgMzg5OTMsIDM4OTk3LCAKKyAgICAzOTAwMSwgMzkwMDgsIDM5MDEzLCAzOTAxNywgMzkwMjEsIDM5MDI2LCAzOTAzMCwgMzkwMzQsIDM5MDM5LCAzOTA0NCwgCisgICAgMzkwNDgsIDM5MDUyLCAzOTA1NiwgMzkwNTgsIDM5MDYzLCAzOTA2OCwgMzkwNzIsIDM5MDc2LCAzOTA4MCwgMzkwODQsIDAsIAorICAgIDM5MDg4LCAzOTA5MiwgMzkwOTYsIDM5MTAyLCAzOTEwOCwgMzkxMTQsIDM5MTIwLCAzOTEyNywgMzkxMzQsIDM5MTM5LCAKKyAgICAzOTE0NCwgMzkxNDgsIDAsIDAsIDM5MTU0LCAzOTE1NywgMzkxNjAsIDM5MTYzLCAzOTE2NiwgMzkxNjksIDM5MTcyLCAKKyAgICAzOTE3NiwgMzkxODAsIDM5MTg1LCAzOTE5MCwgMzkxOTUsIDM5MjAyLCAzOTIwNiwgMzkyMDksIDM5MjEyLCAzOTIxNSwgCisgICAgMzkyMTgsIDM5MjIxLCAzOTIyNCwgMzkyMjcsIDM5MjMwLCAzOTIzMywgMzkyMzcsIDM5MjQxLCAzOTI0NiwgMzkyNTEsIDAsIAorICAgIDM5MjU2LCAzOTI2MiwgMzkyNjgsIDM5Mjc0LCAzOTI4MSwgMzkyODgsIDM5Mjk1LCAzOTMwMiwgMzkzMDgsIDM5MzE0LCAKKyAgICAzOTMyMSwgMzkzMjgsIDM5MzM1LCAwLCAwLCAwLCAzOTM0MiwgMzkzNDUsIDM5MzQ4LCAzOTM1MSwgMzkzNTYsIDM5MzU5LCAKKyAgICAzOTM2MiwgMzkzNjUsIDM5MzY4LCAzOTM3MSwgMzkzNzQsIDM5Mzc4LCAzOTM4MSwgMzkzODQsIDM5Mzg3LCAzOTM5MCwgCisgICAgMzkzOTMsIDM5Mzk4LCAzOTQwMSwgMzk0MDQsIDM5NDA3LCAzOTQxMCwgMzk0MTMsIDM5NDE4LCAzOTQyMSwgMzk0MjQsIAorICAgIDM5NDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzOTQzNCwgMzk0MzksIDM5NDQ0LCAzOTQ1MSwgMzk0NTksIDM5NDY0LCAzOTQ2OSwgMzk0NzMsIDM5NDc3LCAzOTQ4MiwgCisgICAgMzk0ODksIDM5NDk2LCAzOTUwMCwgMzk1MDUsIDM5NTEwLCAzOTUxNSwgMzk1MjAsIDM5NTI3LCAzOTUzMiwgMzk1MzcsIAorICAgIDM5NTQyLCAzOTU1MSwgMzk1NTgsIDM5NTY1LCAzOTU2OSwgMzk1NzQsIDM5NTgwLCAzOTU4NSwgMzk1OTIsIDM5NjAxLCAKKyAgICAzOTYxMCwgMzk2MTQsIDM5NjE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTYyMiwgCisgICAgMzk2MjYsIDM5NjM0LCAzOTYzOCwgMzk2NDIsIDM5NjQ3LCAzOTY1MSwgMzk2NTUsIDM5NjU5LCAzOTY2MSwgMzk2NjUsIAorICAgIDM5NjY5LCAzOTY3MywgMzk2NzgsIDM5NjgyLCAzOTY4NiwgMzk2OTQsIDM5Njk3LCAzOTcwMSwgMzk3MDQsIDM5NzA3LCAKKyAgICAzOTcxMywgMzk3MTcsIDM5NzIwLCAzOTcyNiwgMzk3MzAsIDM5NzM0LCAzOTczOCwgMzk3NDEsIDM5NzQ1LCAzOTc0OCwgCisgICAgMzk3NTIsIDM5NzU0LCAzOTc1NywgMzk3NjAsIDM5NzY0LCAzOTc2NiwgMzk3NzAsIDM5NzczLCAzOTc3NiwgMzk3ODEsIAorICAgIDM5Nzg2LCAzOTc5MywgMzk3OTYsIDM5Nzk5LCAzOTgwMywgMzk4MDgsIDM5ODExLCAzOTgxNCwgMzk4MTcsIDM5ODIxLCAKKyAgICAzOTgyNiwgMzk4MjksIDM5ODMyLCAzOTgzNCwgMzk4MzcsIDM5ODQwLCAzOTg0MywgMzk4NDcsIDM5ODUyLCAzOTg1NSwgCisgICAgMzk4NTksIDM5ODYzLCAzOTg2NywgMzk4NzEsIDM5ODc2LCAzOTg4MiwgMzk4ODcsIDM5ODkyLCAzOTg5OCwgMzk5MDMsIAorICAgIDM5OTA4LCAzOTkxMiwgMzk5MTYsIDM5OTIxLCAzOTkyNSwgMzk5MjksIDM5OTMyLCAzOTkzNCwgMzk5MzksIDM5OTQ1LCAKKyAgICAzOTk1MiwgMzk5NTksIDM5OTY2LCAzOTk3MywgMzk5ODAsIDM5OTg3LCAzOTk5NCwgNDAwMDEsIDQwMDA5LCA0MDAxNiwgCisgICAgNDAwMjQsIDQwMDMxLCA0MDAzOCwgNDAwNDYsIDQwMDU0LCA0MDA1OSwgNDAwNjQsIDQwMDY5LCA0MDA3NCwgNDAwNzksIAorICAgIDQwMDg0LCA0MDA4OSwgNDAwOTQsIDQwMDk5LCA0MDEwNCwgNDAxMTAsIDQwMTE2LCA0MDEyMiwgNDAxMjgsIDQwMTM1LCAKKyAgICA0MDE0MywgNDAxNTAsIDQwMTU2LCA0MDE2MiwgNDAxNjgsIDQwMTc0LCA0MDE4MCwgNDAxODYsIDQwMTkyLCA0MDE5OCwgCisgICAgNDAyMDQsIDQwMjExLCA0MDIxOCwgNDAyMjUsIDQwMjMyLCA0MDI0MCwgNDAyNDksIDQwMjU3LCA0MDI2OCwgNDAyNzYsIAorICAgIDQwMjg0LCA0MDI5MywgNDAzMDAsIDQwMzA5LCA0MDMxOCwgNDAzMjYsIDQwMzM1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDM0MywgCisgICAgNDAzNDUsIDQwMzQ4LCA0MDM1MCwgNDAzNTMsIDQwMzU2LCA0MDM1OSwgNDAzNjQsIDQwMzY5LCA0MDM3NCwgNDAzNzksIAorICAgIDQwMzgzLCA0MDM4NywgNDAzOTEsIDQwMzk1LCA0MDQwMCwgNDA0MDYsIDQwNDExLCA0MDQxNywgNDA0MjIsIDQwNDI3LCAKKyAgICA0MDQzMiwgNDA0MzgsIDQwNDQzLCA0MDQ0OSwgNDA0NTUsIDQwNDU5LCA0MDQ2MywgNDA0NjgsIDQwNDczLCA0MDQ3OCwgCisgICAgNDA0ODMsIDQwNDg4LCA0MDQ5NiwgNDA1MDQsIDQwNTEyLCA0MDUyMCwgNDA1MjcsIDQwNTM1LCA0MDU0MiwgNDA1NDksIAorICAgIDQwNTU4LCA0MDU3MCwgNDA1NzYsIDQwNTgyLCA0MDU5MCwgNDA1OTgsIDQwNjA3LCA0MDYxNiwgNDA2MjQsIDQwNjMyLCAKKyAgICA0MDY0MSwgNDA2NTAsIDQwNjU1LCA0MDY2MywgNDA2NjgsIDQwNjczLCA0MDY3OSwgNDA2ODQsIDQwNjkwLCA0MDY5NywgCisgICAgNDA3MDQsIDQwNzA5LCA0MDcxNSwgNDA3MjAsIDQwNzIzLCA0MDcyNywgNDA3MzAsIDQwNzM0LCA0MDczOCwgNDA3NDIsIAorICAgIDQwNzQ4LCA0MDc1NCwgNDA3NjAsIDQwNzY2LCA0MDc3MCwgNDA3NzQsIDQwNzc4LCA0MDc4MiwgNDA3ODgsIDQwNzk0LCAKKyAgICA0MDc5OCwgNDA4MDMsIDQwODA3LCA0MDgxMiwgNDA4MTcsIDQwODIyLCA0MDgyNSwgNDA4MjksIDQwODMyLCA0MDgzNiwgCisgICAgNDA4NDMsIDQwODUxLCA0MDg2MiwgNDA4NzMsIDQwODc4LCA0MDg4NywgNDA4OTQsIDQwOTAzLCA0MDkxMiwgNDA5MTYsIAorICAgIDQwOTIyLCA0MDkzMCwgNDA5MzQsIDQwOTM5LCA0MDk0NCwgNDA5NTAsIDQwOTU2LCA0MDk2MiwgNDA5NjksIDQwOTczLCAKKyAgICA0MDk3NywgNDA5ODIsIDQwOTg1LCA0MDk4NywgNDA5OTEsIDQwOTk1LCA0MTAwMywgNDEwMDcsIDQxMDA5LCA0MTAxMSwgCisgICAgNDEwMTUsIDQxMDIzLCA0MTAyOCwgNDEwMzQsIDQxMDQ0LCA0MTA1MSwgNDEwNTYsIDQxMDYwLCA0MTA2NCwgNDEwNjgsIAorICAgIDQxMDcxLCA0MTA3NCwgNDEwNzcsIDQxMDgxLCA0MTA4NSwgNDEwODksIDQxMDkzLCA0MTA5NywgNDExMDAsIDQxMTA0LCAKKyAgICA0MTEwOCwgNDExMTEsIDQxMTEzLCA0MTExNiwgNDExMTgsIDQxMTIyLCA0MTEyNiwgNDExMjgsIDQxMTM0LCA0MTEzNywgCisgICAgNDExNDIsIDQxMTQ2LCA0MTE1MCwgNDExNTIsIDQxMTU0LCA0MTE1NiwgNDExNTksIDQxMTYzLCA0MTE2NywgNDExNzEsIAorICAgIDQxMTc1LCA0MTE3OSwgNDExODUsIDQxMTkxLCA0MTE5MywgNDExOTUsIDQxMTk3LCA0MTE5OSwgNDEyMDIsIDQxMjA0LCAKKyAgICA0MTIwOCwgNDEyMTAsIDQxMjE0LCA0MTIxNywgNDEyMjMsIDQxMjI3LCA0MTIzMSwgNDEyMzQsIDQxMjM3LCA0MTI0MSwgCisgICAgNDEyNDcsIDQxMjUxLCA0MTI2MSwgNDEyNzEsIDQxMjc1LCA0MTI4MSwgNDEyODcsIDQxMjkwLCA0MTI5NCwgNDEyOTcsIAorICAgIDQxMzAyLCA0MTMwNiwgNDEzMTIsIDQxMzE2LCA0MTMyOCwgNDEzMzYsIDQxMzQwLCA0MTM0NCwgNDEzNTAsIDQxMzU0LCAKKyAgICA0MTM1NywgNDEzNTksIDQxMzYyLCA0MTM2NiwgNDEzNzAsIDQxMzc3LCA0MTM4MSwgNDEzODUsIDQxMzg5LCA0MTM5MiwgCisgICAgNDEzOTcsIDQxNDAyLCA0MTQwNywgNDE0MTIsIDQxNDE3LCA0MTQyMiwgNDE0MzAsIDQxNDM4LCA0MTQ0MiwgNDE0NDYsIAorICAgIDQxNDQ4LCA0MTQ1MywgNDE0NTcsIDQxNDYxLCA0MTQ2OSwgNDE0NzcsIDQxNDgzLCA0MTQ4OSwgNDE0OTgsIDQxNTA3LCAKKyAgICA0MTUxMiwgNDE1MTcsIDQxNTI1LCA0MTUzMywgNDE1MzUsIDQxNTM3LCA0MTU0MiwgNDE1NDcsIDQxNTUzLCA0MTU1OSwgCisgICAgNDE1NjUsIDQxNTcxLCA0MTU3NSwgNDE1NzksIDQxNTg2LCA0MTU5MywgNDE1OTksIDQxNjA1LCA0MTYxNSwgNDE2MjUsIAorICAgIDQxNjMzLCA0MTY0MSwgNDE2NDMsIDQxNjQ3LCA0MTY1MSwgNDE2NTYsIDQxNjYxLCA0MTY2OCwgNDE2NzUsIDQxNjc4LCAKKyAgICA0MTY4MSwgNDE2ODQsIDQxNjg3LCA0MTY5MCwgNDE2OTUsIDQxNjk5LCA0MTcwNCwgNDE3MDksIDQxNzEyLCA0MTcxNSwgCisgICAgNDE3MTgsIDQxNzIxLCA0MTcyNCwgNDE3MjgsIDQxNzMxLCA0MTczNCwgNDE3MzcsIDQxNzQwLCA0MTc0MiwgNDE3NDQsIAorICAgIDQxNzQ2LCA0MTc0OCwgNDE3NTYsIDQxNzY0LCA0MTc3MCwgNDE3NzQsIDQxNzgwLCA0MTc5MCwgNDE3OTYsIDQxODAyLCAKKyAgICA0MTgwOCwgNDE4MTYsIDQxODI0LCA0MTgzNSwgNDE4MzksIDQxODQzLCA0MTg0NSwgNDE4NTEsIDQxODUzLCA0MTg1NSwgCisgICAgNDE4NTcsIDQxODU5LCA0MTg2NSwgNDE4NjgsIDQxODc0LCA0MTg4MCwgNDE4ODQsIDQxODg4LCA0MTg5MiwgNDE4OTUsIAorICAgIDQxODk5LCA0MTkwMywgNDE5MDUsIDQxOTE0LCA0MTkyMywgNDE5MjgsIDQxOTMzLCA0MTkzOSwgNDE5NDUsIDQxOTUxLCAKKyAgICA0MTk1NCwgNDE5NTcsIDQxOTYwLCA0MTk2MywgNDE5NjUsIDQxOTcwLCA0MTk3NSwgNDE5ODAsIDQxOTg2LCA0MTk5MiwgCisgICAgNDIwMDAsIDQyMDA4LCA0MjAxNCwgNDIwMjAsIDQyMDI2LCA0MjAzMiwgNDIwNDEsIDQyMDUwLCA0MjA1OSwgNDIwNjgsIAorICAgIDQyMDc3LCA0MjA4NiwgNDIwOTUsIDQyMTA0LCA0MjExMywgNDIxMjIsIDQyMTMwLCA0MjE0MiwgNDIxNTIsIDQyMTY3LCAKKyAgICA0MjE3MCwgNDIxNzUsIDQyMTgxLCA0MjE4NywgNDIxOTQsIDQyMjA4LCA0MjIyMywgNDIyMjksIDQyMjM1LCA0MjI0MiwgCisgICAgNDIyNDgsIDQyMjU2LCA0MjI2MiwgNDIyNzUsIDQyMjg5LCA0MjI5NCwgNDIzMDAsIDQyMzA3LCA0MjMxMCwgNDIzMTMsIAorICAgIDQyMzE1LCA0MjMxOCwgNDIzMjEsIDQyMzIzLCA0MjMyNSwgNDIzMjksIDQyMzMyLCA0MjMzNSwgNDIzMzgsIDQyMzQxLCAKKyAgICA0MjM0NiwgNDIzNTEsIDQyMzU2LCA0MjM2MSwgNDIzNjYsIDQyMzY5LCA0MjM3MSwgNDIzNzMsIDQyMzc1LCA0MjM3OSwgCisgICAgNDIzODMsIDQyMzg3LCA0MjM5MywgNDIzOTgsIDQyNDAwLCA0MjQwMiwgNDI0MDcsIDQyNDEyLCA0MjQxNywgNDI0MjIsIAorICAgIDQyNDI3LCA0MjQzMiwgNDI0MzQsIDQyNDM2LCA0MjQ0NSwgNDI0NDksIDQyNDU3LCA0MjQ2NiwgNDI0NjgsIDQyNDczLCAKKyAgICA0MjQ3OCwgNDI0ODYsIDQyNDkwLCA0MjQ5MiwgNDI0OTYsIDQyNDk4LCA0MjUwMiwgNDI1MDYsIDQyNTEwLCA0MjUxMiwgCisgICAgNDI1MTQsIDQyNTE2LCA0MjUyMywgNDI1MzIsIDQyNTQxLCA0MjU1MCwgNDI1NTksIDQyNTY4LCA0MjU3NywgNDI1ODYsIAorICAgIDQyNTk1LCA0MjYwMywgNDI2MTEsIDQyNjIwLCA0MjYyOSwgNDI2MzgsIDQyNjQ3LCA0MjY1NSwgNDI2NjMsIDQyNjcyLCAKKyAgICA0MjY4MSwgNDI2OTAsIDQyNzAwLCA0MjcwOSwgNDI3MTksIDQyNzI4LCA0MjczOCwgNDI3NDcsIDQyNzU3LCA0Mjc2NywgCisgICAgNDI3NzYsIDQyNzg2LCA0Mjc5NSwgNDI4MDUsIDQyODE0LCA0MjgyNCwgNDI4MzMsIDQyODQyLCA0Mjg1MSwgNDI4NjAsIAorICAgIDQyODY5LCA0Mjg3OSwgNDI4ODgsIDQyODk3LCA0MjkwNiwgNDI5MTYsIDQyOTI1LCA0MjkzNCwgNDI5NDMsIDQyOTUyLCAKKyAgICA0Mjk2MiwgNDI5NzIsIDQyOTgxLCA0Mjk5MCwgNDI5OTgsIDQzMDA2LCA0MzAxMywgNDMwMjEsIDQzMDMwLCA0MzA0MSwgCisgICAgNDMwNTAsIDQzMDU5LCA0MzA2OCwgNDMwNzUsIDQzMDgyLCA0MzA4OSwgNDMwOTgsIDQzMTA3LCA0MzExNiwgNDMxMjUsIAorICAgIDQzMTMyLCA0MzEzNywgNDMxNDYsIDQzMTUxLCA0MzE1NCwgNDMxNjIsIDQzMTY1LCA0MzE3MCwgNDMxNzUsIDQzMTc4LCAKKyAgICA0MzE4MSwgNDMxODksIDQzMTkyLCA0MzE5NywgNDMyMDAsIDQzMjA3LCA0MzIxMiwgNDMyMjAsIDQzMjIzLCA0MzIyNiwgCisgICAgNDMyMjksIDQzMjM0LCA0MzIzOSwgNDMyNDIsIDQzMjQ1LCA0MzI1MywgNDMyNTYsIDQzMjYzLCA0MzI3MCwgNDMyNzQsIAorICAgIDQzMjc4LCA0MzI4MywgNDMyODgsIDQzMjk0LCA0MzI5OSwgNDMzMDUsIDQzMzExLCA0MzMxNiwgNDMzMjIsIDQzMzMwLCAKKyAgICA0MzMzNiwgNDMzNDQsIDQzMzUyLCA0MzM1OCwgNDMzNjYsIDQzMzc0LCA0MzM4MywgNDMzOTEsIDQzMzk3LCA0MzQwNSwgCisgICAgNDM0MTQsIDQzNDIyLCA0MzQyNiwgNDM0MzEsIDQzNDQ0LCA0MzQ1NywgNDM0NjEsIDQzNDY1LCA0MzQ2OSwgNDM0NzMsIAorICAgIDQzNDgzLCA0MzQ4NywgNDM0OTIsIDQzNDk3LCA0MzUwMiwgNDM1MDcsIDQzNTEyLCA0MzUxNywgNDM1MjcsIDQzNTM3LCAKKyAgICA0MzU0NSwgNDM1NTUsIDQzNTY1LCA0MzU3MywgNDM1ODMsIDQzNTkzLCA0MzYwMSwgNDM2MTEsIDQzNjIxLCA0MzYyOSwgCisgICAgNDM2MzcsIDQzNjQ3LCA0MzY1NywgNDM2NjAsIDQzNjYzLCA0MzY2NiwgNDM2NzEsIDQzNjc1LCA0MzY4MSwgNDM2ODgsIAorICAgIDQzNjk1LCA0MzcwMywgNDM3MTAsIDQzNzE0LCA0MzcxOCwgNDM3MjIsIDQzNzI2LCA0MzcyOCwgNDM3MzIsIDQzNzM2LCAKKyAgICA0Mzc0MSwgNDM3NDYsIDQzNzUzLCA0Mzc2MCwgNDM3NjMsIDQzNzcwLCA0Mzc3MiwgNDM3NzQsIDQzNzc4LCA0Mzc4MiwgCisgICAgNDM3ODcsIDQzNzkzLCA0Mzc5OSwgNDM4MDUsIDQzODExLCA0MzgyMCwgNDM4MjksIDQzODM4LCA0Mzg0MiwgNDM4NDQsIAorICAgIDQzODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Mzg1NSwgNDM4NTksIDQzODY2LCA0Mzg3MywgCisgICAgNDM4ODAsIDQzODg3LCA0Mzg5MSwgNDM4OTUsIDQzODk5LCA0MzkwMywgNDM5MDgsIDQzOTE0LCA0MzkxOSwgNDM5MjUsIAorICAgIDQzOTMxLCA0MzkzNywgNDM5NDMsIDQzOTUxLCA0Mzk1OCwgNDM5NjUsIDQzOTcyLCA0Mzk3OSwgNDM5ODQsIDQzOTkwLCAKKyAgICA0Mzk5OSwgNDQwMDMsIDQ0MDEwLCA0NDAxNCwgNDQwMTgsIDQ0MDI0LCA0NDAzMCwgNDQwMzYsIDQ0MDQyLCA0NDA0NiwgCisgICAgNDQwNTAsIDQ0MDUzLCA0NDA1NiwgNDQwNjAsIDQ0MDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDA3NCwgNDQwNzcsIDQ0MDgxLCA0NDA4NSwgNDQwOTEsIAorICAgIDQ0MDk3LCA0NDEwMywgNDQxMTEsIDQ0MTE4LCA0NDEyMiwgNDQxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MTM1LCA0NDEzOCwgNDQxNDEsIDQ0MTQ0LCA0NDE0NywgCisgICAgNDQxNTAsIDQ0MTUzLCA0NDE1NiwgNDQxNTksIDQ0MTYyLCA0NDE2NiwgNDQxNzAsIDQ0MTc0LCA0NDE3OCwgNDQxODIsIAorICAgIDQ0MTg2LCA0NDE5MCwgNDQxOTQsIDQ0MTk4LCA0NDIwMiwgNDQyMDYsIDQ0MjA5LCA0NDIxMiwgNDQyMTUsIDQ0MjE4LCAKKyAgICA0NDIyMSwgNDQyMjQsIDQ0MjI3LCA0NDIzMCwgNDQyMzMsIDQ0MjM3LCA0NDI0MSwgNDQyNDUsIDQ0MjQ5LCA0NDI1MywgCisgICAgNDQyNTcsIDQ0MjYxLCA0NDI2NSwgNDQyNjksIDQ0MjczLCA0NDI3NywgNDQyODMsIDQ0Mjg5LCA0NDI5NSwgNDQzMDIsIAorICAgIDQ0MzA5LCA0NDMxNiwgNDQzMjMsIDQ0MzMwLCA0NDMzNywgNDQzNDQsIDQ0MzUxLCA0NDM1OCwgNDQzNjUsIDQ0MzcyLCAKKyAgICA0NDM3OSwgNDQzODYsIDQ0MzkzLCA0NDQwMCwgNDQ0MDcsIDQ0NDE0LCA0NDQxOSwgNDQ0MjUsIDQ0NDMxLCA0NDQzNywgCisgICAgNDQ0NDIsIDQ0NDQ4LCA0NDQ1NCwgNDQ0NjAsIDQ0NDY1LCA0NDQ3MSwgNDQ0NzcsIDQ0NDgyLCA0NDQ4NywgNDQ0OTMsIAorICAgIDQ0NDk4LCA0NDUwNCwgNDQ1MTAsIDQ0NTE1LCA0NDUyMSwgNDQ1MjcsIDQ0NTMyLCA0NDUzOCwgNDQ1NDQsIDQ0NTUwLCAKKyAgICA0NDU1NiwgNDQ1NjIsIDQ0NTY3LCA0NDU3MywgNDQ1NzksIDQ0NTg1LCA0NDU5MCwgNDQ1OTYsIDQ0NjAyLCA0NDYwOCwgCisgICAgNDQ2MTMsIDQ0NjE5LCA0NDYyNSwgNDQ2MzAsIDQ0NjM1LCA0NDY0MSwgNDQ2NDYsIDQ0NjUyLCA0NDY1OCwgNDQ2NjMsIAorICAgIDQ0NjY5LCA0NDY3NSwgNDQ2ODAsIDQ0Njg2LCA0NDY5MiwgNDQ2OTgsIDQ0NzA0LCA0NDcxMCwgNDQ3MTUsIDQ0NzIxLCAKKyAgICA0NDcyNywgNDQ3MzMsIDQ0NzM4LCA0NDc0NCwgNDQ3NTAsIDQ0NzU2LCA0NDc2MSwgNDQ3NjcsIDQ0NzczLCA0NDc3OCwgCisgICAgNDQ3ODMsIDQ0Nzg5LCA0NDc5NCwgNDQ4MDAsIDQ0ODA2LCA0NDgxMSwgNDQ4MTcsIDQ0ODIzLCA0NDgyOCwgNDQ4MzQsIAorICAgIDQ0ODQwLCA0NDg0NiwgNDQ4NTIsIDQ0ODU4LCA0NDg2MiwgNDQ4NjcsIDQ0ODcyLCA0NDg3NywgNDQ4ODIsIDQ0ODg3LCAKKyAgICA0NDg5MiwgNDQ4OTcsIDQ0OTAyLCA0NDkwNywgNDQ5MTIsIDQ0OTE2LCA0NDkyMCwgNDQ5MjQsIDQ0OTI4LCA0NDkzMiwgCisgICAgNDQ5MzYsIDQ0OTQwLCA0NDk0NCwgNDQ5NDgsIDQ0OTUzLCA0NDk1OCwgNDQ5NjMsIDQ0OTY4LCA0NDk3MywgNDQ5NzgsIAorICAgIDQ0OTg3LCA0NDk5NiwgNDUwMDUsIDQ1MDE0LCA0NTAyMywgNDUwMzIsIDQ1MDQxLCA0NTA1MCwgNDUwNTcsIDQ1MDY1LCAKKyAgICA0NTA3MywgNDUwODAsIDQ1MDg3LCA0NTA5NSwgNDUxMDMsIDQ1MTEwLCA0NTExNywgNDUxMjUsIDQ1MTMzLCA0NTE0MCwgCisgICAgNDUxNDcsIDQ1MTU1LCA0NTE2MywgNDUxNzAsIDQ1MTc3LCA0NTE4NSwgNDUxOTQsIDQ1MjAzLCA0NTIxMSwgNDUyMjAsIAorICAgIDQ1MjI5LCA0NTIzNiwgNDUyNDMsIDQ1MjUxLCA0NTI2MCwgNDUyNjksIDQ1Mjc3LCA0NTI4NiwgNDUyOTUsIDQ1MzAyLCAKKyAgICA0NTMwOSwgNDUzMTgsIDQ1MzI3LCA0NTMzNSwgNDUzNDMsIDQ1MzUyLCA0NTM2MSwgNDUzNjgsIDQ1Mzc1LCA0NTM4NCwgCisgICAgNDUzOTMsIDQ1NDAxLCA0NTQwOSwgNDU0MTgsIDQ1NDI3LCA0NTQzNCwgNDU0NDEsIDQ1NDUwLCA0NTQ1OSwgNDU0NjcsIAorICAgIDQ1NDc2LCA0NTQ4NSwgNDU0OTMsIDQ1NTAzLCA0NTUxMywgNDU1MjMsIDQ1NTMzLCA0NTU0MiwgNDU1NTEsIDQ1NTYwLCAKKyAgICA0NTU2OSwgNDU1NzYsIDQ1NTg0LCA0NTU5MiwgNDU2MDAsIDQ1NjA4LCA0NTYxMywgNDU2MTgsIDQ1NjI3LCA0NTYzNSwgCisgICAgNDU2NDIsIDQ1NjUxLCA0NTY1OSwgNDU2NjYsIDQ1Njc1LCA0NTY4MywgNDU2OTAsIDQ1Njk5LCA0NTcwNywgNDU3MTQsIAorICAgIDQ1NzIzLCA0NTczMSwgNDU3MzgsIDQ1NzQ3LCA0NTc1NSwgNDU3NjIsIDQ1NzcxLCA0NTc3OSwgNDU3ODYsIDQ1Nzk1LCAKKyAgICA0NTgwMywgNDU4MTAsIDQ1ODE5LCA0NTgyNywgNDU4MzQsIDQ1ODQzLCA0NTg1MiwgNDU4NjEsIDQ1ODcwLCA0NTg4NCwgCisgICAgNDU4OTgsIDQ1OTA1LCA0NTkxMCwgNDU5MTUsIDQ1OTIwLCA0NTkyNSwgNDU5MzAsIDQ1OTM1LCA0NTk0MCwgNDU5NDUsIAorICAgIDQ1OTUzLCA0NTk2MSwgNDU5NjksIDQ1OTc3LCA0NTk4MiwgNDU5ODksIDQ1OTk2LCA0NjAwMywgNDYwMDgsIDQ2MDE2LCAKKyAgICA0NjAyMywgNDYwMzEsIDQ2MDM1LCA0NjA0MiwgNDYwNDgsIDQ2MDU1LCA0NjA1OSwgNDYwNjUsIDQ2MDcxLCA0NjA3NywgCisgICAgNDYwODEsIDQ2MDg0LCA0NjA4OCwgNDYwOTIsIDQ2MDk5LCA0NjEwNSwgNDYxMTEsIDQ2MTE3LCA0NjEyMywgNDYxMzcsIAorICAgIDQ2MTQ3LCA0NjE2MSwgNDYxNzUsIDQ2MTgxLCA0NjE5MSwgNDYyMDUsIDQ2MjA4LCA0NjIxMSwgNDYyMTgsIDQ2MjI2LCAKKyAgICA0NjIzMSwgNDYyMzYsIDQ2MjQ0LCA0NjI1NiwgNDYyNjgsIDQ2Mjc2LCA0NjI4MCwgNDYyODQsIDQ2Mjg3LCA0NjI5MCwgCisgICAgNDYyOTQsIDQ2Mjk4LCA0NjMwMSwgNDYzMDQsIDQ2MzA5LCA0NjMxNCwgNDYzMjAsIDQ2MzI2LCA0NjMzMSwgNDYzMzYsIAorICAgIDQ2MzQyLCA0NjM0OCwgNDYzNTMsIDQ2MzU4LCA0NjM2MywgNDYzNjgsIDQ2Mzc0LCA0NjM4MCwgNDYzODUsIDQ2MzkwLCAKKyAgICA0NjM5NiwgNDY0MDIsIDQ2NDA3LCA0NjQxMiwgNDY0MTUsIDQ2NDE4LCA0NjQyNywgNDY0MjksIDQ2NDMxLCA0NjQzNCwgCisgICAgNDY0MzgsIDQ2NDQ0LCA0NjQ0NiwgNDY0NDksIDQ2NDU2LCA0NjQ2MywgNDY0NzEsIDQ2NDc5LCA0NjQ4OSwgNDY1MDMsIAorICAgIDQ2NTA4LCA0NjUxMywgNDY1MTcsIDQ2NTIyLCA0NjUzMCwgNDY1MzgsIDQ2NTQ3LCA0NjU1NiwgNDY1NjUsIDQ2NTc0LCAKKyAgICA0NjU3OSwgNDY1ODQsIDQ2NTkwLCA0NjU5NiwgNDY2MDIsIDQ2NjA4LCA0NjYxMSwgNDY2MTcsIDQ2NjIzLCA0NjYzMywgCisgICAgNDY2NDMsIDQ2NjUxLCA0NjY1OSwgNDY2NjgsIDQ2Njc3LCA0NjY4MSwgNDY2ODksIDQ2Njk3LCA0NjcwNSwgNDY3MTMsIAorICAgIDQ2NzIyLCA0NjczMSwgNDY3NDAsIDQ2NzQ5LCA0Njc1NCwgNDY3NTksIDQ2NzY0LCA0Njc2OSwgNDY3NzQsIDQ2NzgwLCAKKyAgICA0Njc4NiwgNDY3OTEsIDQ2Nzk3LCA0Njc5OSwgNDY4MDEsIDQ2ODAzLCA0NjgwNSwgNDY4MDgsIDQ2ODExLCA0NjgxMywgCisgICAgNDY4MTUsIDQ2ODE3LCA0NjgyMSwgNDY4MjUsIDQ2ODI3LCA0NjgyOSwgNDY4MzIsIDQ2ODM1LCA0NjgzOSwgNDY4NDUsIAorICAgIDQ2ODUxLCA0Njg1MywgNDY4NjAsIDQ2ODY0LCA0Njg2OSwgNDY4NzQsIDQ2ODc2LCA0Njg4NiwgNDY4OTIsIDQ2ODk4LCAKKyAgICA0NjkwNCwgNDY5MTAsIDQ2OTE2LCA0NjkyMiwgNDY5MjcsIDQ2OTMwLCA0NjkzMywgNDY5MzYsIDQ2OTM4LCA0Njk0MCwgCisgICAgNDY5NDQsIDQ2OTQ4LCA0Njk1MywgNDY5NTgsIDQ2OTYzLCA0Njk2NiwgNDY5NzAsIDQ2OTc1LCA0Njk3OCwgNDY5ODIsIAorICAgIDQ2OTg3LCA0Njk5MiwgNDY5OTcsIDQ3MDAyLCA0NzAwNywgNDcwMTIsIDQ3MDE3LCA0NzAyMiwgNDcwMjcsIDQ3MDMyLCAKKyAgICA0NzAzNywgNDcwNDIsIDQ3MDQ4LCA0NzA1NCwgNDcwNjAsIDQ3MDYyLCA0NzA2NSwgNDcwNjcsIDQ3MDcwLCA0NzA3MiwgCisgICAgNDcwNzQsIDQ3MDc2LCA0NzA3OCwgNDcwODAsIDQ3MDgyLCA0NzA4NCwgNDcwODYsIDQ3MDg4LCA0NzA5MCwgNDcwOTIsIAorICAgIDQ3MDk0LCA0NzA5NiwgNDcwOTgsIDQ3MTAwLCA0NzEwMiwgNDcxMDQsIDQ3MTA5LCA0NzExNCwgNDcxMTksIDQ3MTI0LCAKKyAgICA0NzEyOSwgNDcxMzQsIDQ3MTM5LCA0NzE0NCwgNDcxNDksIDQ3MTU0LCA0NzE1OSwgNDcxNjQsIDQ3MTY5LCA0NzE3NCwgCisgICAgNDcxNzksIDQ3MTg0LCA0NzE4OSwgNDcxOTQsIDQ3MTk5LCA0NzIwNCwgNDcyMDgsIDQ3MjEyLCA0NzIxNiwgNDcyMjIsIAorICAgIDQ3MjI4LCA0NzIzMywgNDcyMzgsIDQ3MjQzLCA0NzI0OCwgNDcyNTMsIDQ3MjU4LCA0NzI2NiwgNDcyNzQsIDQ3MjgyLCAKKyAgICA0NzI5MCwgNDcyOTgsIDQ3MzA2LCA0NzMxNCwgNDczMjIsIDQ3MzI4LCA0NzMzMywgNDczMzgsIDQ3MzQzLCA0NzM0NiwgCisgICAgNDczNTAsIDQ3MzU0LCA0NzM1OCwgNDczNjIsIDQ3MzY2LCA0NzM3MCwgNDczNzcsIDQ3Mzg0LCA0NzM5MiwgNDc0MDAsIAorICAgIDQ3NDA1LCA0NzQxMCwgNDc0MTcsIDQ3NDI0LCA0NzQzMSwgNDc0MzgsIDQ3NDQxLCA0NzQ0NCwgNDc0NDksIDQ3NDUxLCAKKyAgICA0NzQ1NSwgNDc0NjAsIDQ3NDYyLCA0NzQ2NCwgNDc0NjYsIDQ3NDY4LCA0NzQ3MywgNDc0NzYsIDQ3NDc4LCA0NzQ4MywgCisgICAgNDc0OTAsIDQ3NDk3LCA0NzUwMCwgNDc1MDQsIDQ3NTA5LCA0NzUxNCwgNDc1MjIsIDQ3NTI4LCA0NzUzNCwgNDc1NDYsIAorICAgIDQ3NTUzLCA0NzU2MCwgNDc1NjUsIDQ3NTcwLCA0NzU3NiwgNDc1NzksIDQ3NTgyLCA0NzU4NywgNDc1ODksIDQ3NTkzLCAKKyAgICA0NzU5NSwgNDc1OTcsIDQ3NTk5LCA0NzYwMSwgNDc2MDMsIDQ3NjA1LCA0NzYxMCwgNDc2MTIsIDQ3NjE0LCA0NzYxNiwgCisgICAgNDc2MTgsIDQ3NjIyLCA0NzYyNCwgNDc2MjcsIDQ3NjMyLCA0NzYzNywgNDc2NDIsIDQ3NjQ3LCA0NzY1MywgNDc2NTksIAorICAgIDQ3NjYxLCA0NzY2NCwgNDc2NzEsIDQ3Njc4LCA0NzY4NSwgNDc2OTIsIDQ3Njk2LCA0NzcwMCwgNDc3MDIsIDQ3NzA0LCAKKyAgICA0NzcwOCwgNDc3MTQsIDQ3NzE5LCA0NzcyMSwgNDc3MjUsIDQ3NzM0LCA0Nzc0MiwgNDc3NTAsIDQ3NzU2LCA0Nzc2MiwgCisgICAgNDc3NjcsIDQ3NzczLCA0Nzc3OCwgNDc3ODEsIDQ3Nzk1LCA0Nzc5OCwgNDc4MDMsIDQ3ODA4LCA0NzgxNCwgNDc4MjQsIAorICAgIDQ3ODI2LCA0NzgzMiwgNDc4MzgsIDQ3ODQyLCA0Nzg0OSwgNDc4NTMsIDQ3ODU1LCA0Nzg1NywgNDc4NjEsIDQ3ODY3LCAKKyAgICA0Nzg3MiwgNDc4NzgsIDQ3ODgwLCA0Nzg4NiwgNDc4ODgsIDQ3ODk0LCA0Nzg5NiwgNDc4OTgsIDQ3OTAzLCA0NzkwNSwgCisgICAgNDc5MDksIDQ3OTE0LCA0NzkxNiwgNDc5MjEsIDQ3OTI2LCA0NzkzMCwgNDc5MzcsIDAsIDQ3OTQ3LCA0Nzk1MywgNDc5NTYsIAorICAgIDQ3OTYyLCA0Nzk2NSwgNDc5NzAsIDQ3OTc1LCA0Nzk3OSwgNDc5ODEsIDQ3OTgzLCA0Nzk4NywgNDc5OTEsIDQ3OTk1LCAKKyAgICA0Nzk5OSwgNDgwMDQsIDQ4MDA2LCA0ODAxMSwgNDgwMTQsIDQ4MDE3LCA0ODAyMCwgNDgwMjQsIDQ4MDI4LCA0ODAzMywgCisgICAgNDgwMzcsIDQ4MDQyLCA0ODA0NywgNDgwNTEsIDQ4MDU2LCA0ODA2MiwgNDgwNjUsIDQ4MDcxLCA0ODA3NiwgNDgwODAsIAorICAgIDQ4MDg1LCA0ODA5MSwgNDgwOTcsIDQ4MTA0LCA0ODExMCwgNDgxMTcsIDQ4MTI0LCA0ODEyNiwgNDgxMzMsIDQ4MTM3LCAKKyAgICA0ODE0MywgNDgxNDksIDQ4MTU0LCA0ODE2MCwgNDgxNjQsIDQ4MTY5LCA0ODE3MiwgNDgxNzcsIDQ4MTgzLCA0ODE5MCwgCisgICAgNDgxOTgsIDQ4MjA1LCA0ODIxNCwgNDgyMjQsIDQ4MjMxLCA0ODIzNywgNDgyNDEsIDQ4MjQ4LCA0ODI1MywgNDgyNjIsIAorICAgIDQ4MjY1LCA0ODI2OCwgNDgyNzcsIDQ4Mjg3LCA0ODI5NCwgNDgyOTYsIDQ4MzAyLCA0ODMwNywgNDgzMDksIDQ4MzEyLCAKKyAgICA0ODMxNiwgNDgzMjQsIDQ4MzMzLCA0ODMzNiwgNDgzNDEsIDQ4MzQ2LCA0ODM1NCwgNDgzNjIsIDQ4MzcwLCA0ODM3OCwgCisgICAgNDgzODQsIDQ4MzkwLCA0ODM5NiwgNDg0MDQsIDQ4NDA5LCA0ODQxMiwgNDg0MTYsIDQ4NDE5LCA0ODQzMSwgNDg0NDEsIAorICAgIDQ4NDUyLCA0ODQ2MSwgNDg0NzIsIDQ4NDgyLCA0ODQ5MSwgNDg0OTcsIDQ4NTA1LCA0ODUwOSwgNDg1MTcsIDQ4NTIxLCAKKyAgICA0ODUyOSwgNDg1MzYsIDQ4NTQzLCA0ODU1MiwgNDg1NjEsIDQ4NTcxLCA0ODU4MSwgNDg1OTEsIDQ4NjAxLCA0ODYxMCwgCisgICAgNDg2MTksIDQ4NjI5LCA0ODYzOSwgNDg2NDgsIDQ4NjU3LCA0ODY2MywgNDg2NjksIDQ4Njc1LCA0ODY4MSwgNDg2ODcsIAorICAgIDQ4NjkzLCA0ODY5OSwgNDg3MDUsIDQ4NzExLCA0ODcxOCwgNDg3MjQsIDQ4NzMwLCA0ODczNiwgNDg3NDIsIDQ4NzQ4LCAKKyAgICA0ODc1NCwgNDg3NjAsIDQ4NzY2LCA0ODc3MiwgNDg3NzksIDQ4Nzg2LCA0ODc5MywgNDg4MDAsIDQ4ODA3LCA0ODgxNCwgCisgICAgNDg4MjEsIDQ4ODI4LCA0ODgzNSwgNDg4NDIsIDQ4ODUwLCA0ODg1NSwgNDg4NTgsIDQ4ODYyLCA0ODg2NiwgNDg4NzIsIAorICAgIDQ4ODc1LCA0ODg4MSwgNDg4ODcsIDQ4ODkyLCA0ODg5NiwgNDg5MDEsIDQ4OTA3LCA0ODkxNCwgNDg5MTcsIDQ4OTI0LCAKKyAgICA0ODkzMSwgNDg5MzUsIDQ4OTQ0LCA0ODk1MywgNDg5NTgsIDQ4OTY0LCA0ODk2OSwgNDg5NzQsIDQ4OTgxLCA0ODk4OCwgCisgICAgNDg5OTYsIDQ5MDA0LCA0OTAxMywgNDkwMTcsIDQ5MDI2LCA0OTAzMSwgNDkwMzUsIDQ5MDQyLCA0OTA0NiwgNDkwNTMsIAorICAgIDQ5MDYxLCA0OTA2NiwgNDkwNzQsIDQ5MDc4LCA0OTA4MywgNDkwODcsIDQ5MDkyLCA0OTA5NiwgNDkxMDEsIDQ5MTA2LCAKKyAgICA0OTExNSwgNDkxMTcsIDQ5MTIwLCA0OTEyMywgNDkxMzAsIDQ5MTM3LCA0OTE0MiwgNDkxNTAsIDQ5MTU2LCA0OTE2MiwgCisgICAgNDkxNjcsIDQ5MTcwLCA0OTE3NSwgNDkxODAsIDQ5MTg1LCA0OTE5MywgNDkxOTcsIDQ5MjA0LCA0OTIxMiwgNDkyMjAsIAorICAgIDQ5MjI1LCA0OTIzMCwgNDkyMzYsIDQ5MjQxLCA0OTI0NiwgNDkyNTIsIDQ5MjU3LCA0OTI2MCwgNDkyNjQsIDQ5MjY4LCAKKyAgICA0OTI3NSwgNDkyODQsIDQ5Mjg5LCA0OTI5OCwgNDkzMDcsIDQ5MzEzLCA0OTMxOSwgNDkzMjQsIDQ5MzI5LCA0OTMzNCwgCisgICAgNDkzMzksIDQ5MzQ1LCA0OTM1MSwgNDkzNTksIDQ5MzY3LCA0OTM3MywgNDkzNzksIDQ5Mzg0LCA0OTM4OSwgNDkzOTYsIAorICAgIDQ5NDAzLCA0OTQwOSwgNDk0MTIsIDQ5NDE1LCA0OTQxOSwgNDk0MjMsIDQ5NDI3LCA0OTQzMiwgNDk0MzgsIDQ5NDQ0LCAKKyAgICA0OTQ1MSwgNDk0NTgsIDQ5NDYzLCA0OTQ2NywgNDk0NzEsIDQ5NDc1LCA0OTQ3OSwgNDk0ODMsIDQ5NDg3LCA0OTQ5MSwgCisgICAgNDk0OTUsIDQ5NDk5LCA0OTUwMywgNDk1MDcsIDQ5NTExLCA0OTUxNSwgNDk1MTksIDQ5NTIzLCA0OTUyNywgNDk1MzEsIAorICAgIDQ5NTM1LCA0OTUzOSwgNDk1NDMsIDQ5NTQ3LCA0OTU1MSwgNDk1NTUsIDQ5NTU5LCA0OTU2MywgNDk1NjcsIDQ5NTcxLCAKKyAgICA0OTU3NSwgNDk1NzksIDQ5NTgzLCA0OTU4NywgNDk1OTEsIDQ5NTk1LCA0OTU5OSwgNDk2MDMsIDQ5NjA3LCA0OTYxMSwgCisgICAgNDk2MTUsIDQ5NjE5LCA0OTYyMywgNDk2MjcsIDQ5NjMxLCA0OTYzNSwgNDk2MzksIDQ5NjQzLCA0OTY0NywgNDk2NTEsIAorICAgIDQ5NjU1LCA0OTY1OSwgNDk2NjMsIDQ5NjY3LCA0OTY3MSwgNDk2NzUsIDQ5Njc5LCA0OTY4MywgNDk2ODcsIDQ5NjkxLCAKKyAgICA0OTY5NSwgNDk2OTksIDQ5NzAzLCA0OTcwNywgNDk3MTEsIDQ5NzE1LCA0OTcxOSwgNDk3MjMsIDQ5NzI3LCA0OTczMSwgCisgICAgNDk3MzUsIDQ5NzM5LCA0OTc0MywgNDk3NDcsIDQ5NzUxLCA0OTc1NSwgNDk3NTksIDQ5NzYzLCA0OTc2NywgNDk3NzEsIAorICAgIDQ5Nzc1LCA0OTc3OSwgNDk3ODMsIDQ5Nzg3LCA0OTc5MSwgNDk3OTUsIDQ5Nzk5LCA0OTgwMywgNDk4MDcsIDQ5ODExLCAKKyAgICA0OTgxNSwgNDk4MTksIDQ5ODIzLCA0OTgyNywgNDk4MzEsIDQ5ODM1LCA0OTgzOSwgNDk4NDMsIDQ5ODQ3LCA0OTg1MSwgCisgICAgNDk4NTUsIDQ5ODU5LCA0OTg2MywgNDk4NjcsIDQ5ODcxLCA0OTg3NSwgNDk4NzksIDQ5ODgzLCA0OTg4NywgNDk4OTEsIAorICAgIDQ5ODk1LCA0OTg5OSwgNDk5MDMsIDQ5OTA3LCA0OTkxMSwgNDk5MTUsIDQ5OTE5LCA0OTkyMywgNDk5MjcsIDQ5OTMxLCAKKyAgICA0OTkzNSwgNDk5MzksIDQ5OTQzLCA0OTk0NywgNDk5NTEsIDQ5OTU1LCA0OTk1OSwgNDk5NjMsIDQ5OTY3LCA0OTk3MSwgCisgICAgNDk5NzUsIDQ5OTc5LCA0OTk4MywgNDk5ODcsIDQ5OTkxLCA0OTk5NSwgNDk5OTksIDUwMDAzLCA1MDAwNywgNTAwMTEsIAorICAgIDUwMDE1LCA1MDAxOSwgNTAwMjMsIDUwMDI3LCA1MDAzMSwgNTAwMzUsIDUwMDM5LCA1MDA0MywgNTAwNDcsIDUwMDUxLCAKKyAgICA1MDA1NSwgNTAwNTksIDUwMDYzLCA1MDA2NywgNTAwNzEsIDUwMDc1LCA1MDA3OSwgNTAwODMsIDUwMDg3LCA1MDA5MSwgCisgICAgNTAwOTUsIDUwMDk5LCA1MDEwMywgNTAxMDcsIDUwMTExLCA1MDExNSwgNTAxMTksIDUwMTIzLCA1MDEyNywgNTAxMzEsIAorICAgIDUwMTM1LCA1MDEzOSwgNTAxNDMsIDUwMTQ3LCA1MDE1MSwgNTAxNTUsIDUwMTU5LCA1MDE2MywgNTAxNjcsIDUwMTcxLCAKKyAgICA1MDE3NSwgNTAxNzksIDUwMTgzLCA1MDE4NywgNTAxOTEsIDUwMTk1LCA1MDE5OSwgNTAyMDMsIDUwMjA3LCA1MDIxMSwgCisgICAgNTAyMTUsIDUwMjE5LCA1MDIyMywgNTAyMjcsIDUwMjMxLCA1MDIzNSwgNTAyMzksIDUwMjQzLCA1MDI0NywgNTAyNTEsIAorICAgIDUwMjU1LCA1MDI1OSwgNTAyNjMsIDUwMjY3LCA1MDI3MSwgNTAyNzUsIDUwMjc5LCA1MDI4MywgNTAyODcsIDUwMjkxLCAKKyAgICA1MDI5NSwgNTAyOTksIDUwMzAzLCA1MDMwNywgNTAzMTEsIDUwMzE1LCA1MDMxOSwgNTAzMjMsIDUwMzI3LCA1MDMzMSwgCisgICAgNTAzMzUsIDUwMzM5LCA1MDM0MywgNTAzNDcsIDUwMzUxLCA1MDM1NSwgNTAzNTksIDUwMzYzLCA1MDM2NywgNTAzNzEsIAorICAgIDUwMzc1LCA1MDM3OSwgNTAzODMsIDUwMzg3LCA1MDM5MSwgNTAzOTUsIDUwMzk5LCA1MDQwMywgNTA0MDcsIDUwNDExLCAKKyAgICA1MDQxNSwgNTA0MTksIDUwNDIzLCA1MDQyNywgNTA0MzEsIDUwNDM1LCA1MDQzOSwgNTA0NDMsIDUwNDQ3LCA1MDQ1MSwgCisgICAgNTA0NTUsIDUwNDU5LCA1MDQ2MywgNTA0NjcsIDUwNDcxLCA1MDQ3NSwgNTA0NzksIDUwNDgzLCA1MDQ4NywgNTA0OTQsIAorICAgIDUwNTAyLCA1MDUwOCwgNTA1MTQsIDUwNTIxLCA1MDUyOCwgNTA1MzQsIDUwNTQwLCA1MDU0NiwgNTA1NTIsIDUwNTU3LCAKKyAgICA1MDU2MiwgNTA1NjcsIDUwNTcyLCA1MDU3OCwgNTA1ODQsIDUwNTkyLCA1MDU5OSwgNTA2MDUsIDUwNjExLCA1MDYxOSwgCisgICAgNTA2MjgsIDUwNjM1LCA1MDY0NSwgNTA2NTYsIDUwNjU5LCA1MDY2MiwgNTA2NjYsIDUwNjcwLCA1MDY3NywgNTA2ODQsIAorICAgIDUwNjk1LCA1MDcwNiwgNTA3MTYsIDUwNzI2LCA1MDczMywgNTA3NDAsIDUwNzQ3LCA1MDc1NCwgNTA3NjUsIDUwNzc2LCAKKyAgICA1MDc4NywgNTA3OTgsIDUwODA4LCA1MDgxOCwgNTA4MzAsIDUwODQyLCA1MDg1MywgNTA4NjQsIDUwODc2LCA1MDg4OCwgCisgICAgNTA4OTcsIDUwOTA3LCA1MDkxNywgNTA5MjgsIDUwOTM5LCA1MDk0NiwgNTA5NTMsIDUwOTYwLCA1MDk2NywgNTA5NzcsIAorICAgIDUwOTg3LCA1MDk5NSwgNTEwMDMsIDUxMDEwLCA1MTAxNywgNTEwMjQsIDUxMDMxLCA1MTAzOCwgNTEwNDMsIDUxMDQ4LCAKKyAgICA1MTA1NCwgNTEwNjIsIDUxMDcyLCA1MTA4MiwgNTEwOTIsIDUxMTAyLCA1MTExMiwgNTExMjIsIDUxMTMyLCA1MTE0MiwgCisgICAgNTExNTIsIDUxMTYyLCA1MTE3MiwgNTExODMsIDUxMTk0LCA1MTIwNCwgNTEyMTQsIDUxMjI1LCA1MTIzNiwgNTEyNDYsIAorICAgIDUxMjU2LCA1MTI2NywgNTEyNzgsIDUxMjg4LCA1MTI5OCwgNTEzMDksIDUxMzIwLCA1MTMzNiwgNTEzNTUsIDUxMzcxLCAKKyAgICA1MTM5MCwgNTE0MDYsIDUxNDIyLCA1MTQzOCwgNTE0NTQsIDUxNDY1LCA1MTQ3NywgNTE0ODgsIDUxNTAwLCA1MTUxOSwgCisgICAgNTE1MzgsIDUxNTQ2LCA1MTU1MiwgNTE1NTksIDUxNTY2LCA1MTU3MywgNTE1ODAsIDUxNTg1LCA1MTU5MSwgNTE1OTYsIAorICAgIDUxNjAxLCA1MTYwNywgNTE2MTIsIDUxNjE3LCA1MTYyMiwgNTE2MjcsIDUxNjMyLCA1MTYzOSwgNTE2NDQsIDUxNjUxLCAKKyAgICA1MTY1NiwgNTE2NjEsIDUxNjY1LCA1MTY2OSwgNTE2NzYsIDUxNjgzLCA1MTY5MCwgNTE2OTcsIDUxNzA0LCA1MTcxMSwgCisgICAgNTE3MjQsIDUxNzM3LCA1MTc1MCwgNTE3NjMsIDUxNzcxLCA1MTc3OSwgNTE3ODUsIDUxNzkxLCA1MTc5OCwgNTE4MDUsIAorICAgIDUxODEyLCA1MTgxOSwgNTE4MjMsIDUxODI4LCA1MTgzNiwgNTE4NDQsIDUxODUyLCA1MTg1OSwgNTE4NjMsIDUxODcxLCAKKyAgICA1MTg3OSwgNTE4ODMsIDUxODg3LCA1MTg5MiwgNTE4OTksIDUxOTA3LCA1MTkxNSwgNTE5MzQsIDUxOTUzLCA1MTk3MiwgCisgICAgNTE5OTEsIDUyMDEwLCA1MjAyOSwgNTIwNDgsIDUyMDY3LCA1MjA3MywgNTIwODAsIDUyMDg5LCA1MjA5NywgNTIxMDUsIAorICAgIDUyMTEwLCA1MjExMywgNTIxMTYsIDUyMTIxLCA1MjEyNCwgNTIxNDMsIDUyMTUwLCA1MjE1NiwgNTIxNjIsIDUyMTY2LCAKKyAgICA1MjE2OSwgNTIxNzIsIDUyMTc1LCA1MjE4NywgNTIyMDAsIDUyMjA3LCA1MjIxNCwgNTIyMTcsIDUyMjIxLCA1MjIyNCwgCisgICAgNTIyMjksIDUyMjM0LCA1MjIzOSwgNTIyNDUsIDUyMjU0LCA1MjI2MSwgNTIyNjgsIDUyMjc2LCA1MjI4MywgNTIyOTAsIAorICAgIDUyMjkzLCA1MjI5OSwgNTIzMDUsIDUyMzA4LCA1MjMxMSwgNTIzMTYsIDUyMzIxLCA1MjMyNywgNTIzMzMsIDUyMzM3LCAKKyAgICA1MjM0MiwgNTIzNDksIDUyMzUzLCA1MjM1OSwgNTIzNjMsIDUyMzY3LCA1MjM3NSwgNTIzODcsIDUyMzk2LCA1MjQwMCwgCisgICAgNTI0MDIsIDUyNDExLCA1MjQyMCwgNTI0MjYsIDUyNDI5LCA1MjQzNSwgNTI0NDEsIDUyNDQ2LCA1MjQ1MSwgNTI0NTYsIAorICAgIDUyNDYxLCA1MjQ2NiwgNTI0NzEsIDUyNDczLCA1MjQ3OSwgNTI0ODQsIDUyNDkxLCA1MjQ5NSwgNTI1MDEsIDUyNTA0LCAKKyAgICA1MjUwOCwgNTI1MTUsIDUyNTIyLCA1MjUyNCwgNTI1MjYsIDUyNTMyLCA1MjUzOCwgNTI1NDQsIDUyNTUzLCA1MjU2MiwgCisgICAgNTI1NjksIDUyNTc2LCA1MjU4MiwgNTI1ODgsIDUyNTkzLCA1MjU5OCwgNTI2MDMsIDUyNjA5LCA1MjYxNSwgNTI2MjAsIAorICAgIDUyNjI3LCA1MjYzMSwgNTI2MzUsIDUyNjQ4LCA1MjY2MSwgNTI2NzMsIDUyNjgyLCA1MjY4OCwgNTI2OTUsIDUyNzAwLCAKKyAgICA1MjcwNSwgNTI3MTAsIDUyNzE1LCA1MjcyMCwgNTI3MjIsIDUyNzI5LCA1MjczNiwgNTI3NDMsIDUyNzUwLCA1Mjc1NywgCisgICAgNTI3NjUsIDUyNzcxLCA1Mjc3NiwgNTI3ODIsIDUyNzg4LCA1Mjc5NCwgNTI4MDEsIDUyODA3LCA1MjgxNSwgNTI4MjMsIAorICAgIDUyODMxLCA1MjgzOSwgNTI4NDYsIDUyODUyLCA1Mjg1OCwgNTI4NjcsIDUyODcxLCA1Mjg4MCwgNTI4ODksIDUyODk4LCAKKyAgICA1MjkwNiwgNTI5MTAsIDUyOTE2LCA1MjkyMywgNTI5MzAsIDUyOTM0LCA1Mjk0MCwgNTI5NDcsIDUyOTUyLCA1Mjk1NywgCisgICAgNTI5NjMsIDUyOTY4LCA1Mjk3MywgNTI5ODAsIDUyOTg3LCA1Mjk5MiwgNTI5OTcsIDUzMDA1LCA1MzAxMywgNTMwMjMsIAorICAgIDUzMDMzLCA1MzA0MCwgNTMwNDcsIDUzMDUxLCA1MzA1NSwgNTMwNjcsIDUzMDczLCA1MzA3OSwgNTMwODQsIDUzMDg5LCAKKyAgICA1MzA5NiwgNTMxMDMsIDUzMTA5LCA1MzExNSwgNTMxMjQsIDUzMTMyLCA1MzE0MCwgNTMxNDcsIDUzMTU0LCA1MzE2MSwgCisgICAgNTMxNjcsIDUzMTc0LCA1MzE4MCwgNTMxODcsIDUzMTk0LCA1MzIwMSwgNTMyMDgsIDUzMjE0LCA1MzIxOSwgNTMyMjgsIAorICAgIDUzMjM4LCA1MzI0NSwgNTMyNTQsIDUzMjYwLCA1MzI2NSwgNTMyNzAsIDUzMjgwLCA1MzI4NiwgNTMyOTIsIDUzMjk4LCAKKyAgICA1MzMwNiwgNTMzMTEsIDUzMzE4LCA1MzMyNSwgNTMzMzYsIDUzMzQzLCA1MzM1MCwgNTMzNTcsIDUzMzY0LCA1MzM3MSwgCisgICAgNTMzNzgsIDUzMzg1LCA1MzM5NywgNTM0MDksIDUzNDIwLCA1MzQzMSwgNTM0NDQsIDUzNDU3LCA1MzQ2MiwgNTM0NjcsIAorICAgIDUzNDc2LCA1MzQ4NSwgNTM0OTIsIDUzNDk5LCA1MzUwOCwgNTM1MTcsIDUzNTI1LCA1MzUzMywgNTM1NDEsIDUzNTQ5LCAKKyAgICA1MzU1OSwgNTM1NjksIDUzNTgzLCA1MzU5NywgNTM2MDUsIDUzNjEzLCA1MzYyNSwgNTM2MzcsIDUzNjQ1LCA1MzY1MywgCisgICAgNTM2NjMsIDUzNjczLCA1MzY3OCwgNTM2ODMsIDUzNjkyLCA1MzcwMSwgNTM3MDYsIDUzNzExLCA1MzcxOSwgNTM3MjUsIAorICAgIDUzNzMxLCA1MzczOSwgNTM3NDcsIDUzNzYwLCA1Mzc3MywgNTM3NzcsIDUzNzgxLCA1Mzc4OCwgNTM3OTUsIDUzODAyLCAKKyAgICA1MzgxMCwgNTM4MTgsIDUzODI3LCA1MzgzNiwgNTM4NDIsIDUzODQ4LCA1Mzg1NSwgNTM4NjIsIDUzODY5LCA1Mzg3NiwgCisgICAgNTM4ODUsIDUzODk0LCA1Mzg5NywgNTM5MDAsIDUzOTA1LCA1MzkxMCwgNTM5MTYsIDUzOTIyLCA1MzkyOSwgNTM5MzYsIAorICAgIDUzOTQ2LCA1Mzk1NiwgNTM5NjMsIDUzOTcwLCA1Mzk3OCwgNTM5ODYsIDUzOTk0LCA1NDAwMiwgNTQwMTAsIDU0MDE4LCAKKyAgICA1NDAyNCwgNTQwMzAsIDU0MDM0LCA1NDAzOCwgNTQwNDUsIDU0MDUyLCA1NDA1NywgNTQwNjIsIDU0MDY3LCA1NDA3MiwgCisgICAgNTQwNzgsIDU0MDkyLCA1NDA5OSwgNTQxMDYsIDU0MTEwLCA1NDExMiwgNTQxMTQsIDU0MTE5LCA1NDEyNCwgNTQxMjksIAorICAgIDU0MTM0LCA1NDE0MiwgNTQxNDksIDU0MTU2LCA1NDE2NCwgNTQxNzYsIDU0MTg0LCA1NDE5MiwgNTQyMDMsIDU0MjA3LCAKKyAgICA1NDIxMSwgNTQyMTcsIDU0MjI1LCA1NDIzOCwgNTQyNDUsIDU0MjUyLCA1NDI1OSwgNTQyNjQsIDU0MjcxLCA1NDI4MCwgCisgICAgNTQyODgsIDU0Mjk0LCA1NDMwMCwgNTQzMDYsIDU0MzE1LCA1NDMyNCwgNTQzMzIsIDU0MzQxLCA1NDM0NiwgNTQzNDksIAorICAgIDU0MzU0LCA1NDM2MCwgNTQzNjYsIDU0MzcyLCA1NDM3OCwgNTQzODIsIDU0Mzg1LCA1NDM4OSwgNTQzOTMsIDU0Mzk5LCAKKyAgICA1NDQwNSwgNTQ0MTEsIDU0NDE3LCA1NDQyMSwgNTQ0MjUsIDU0NDMyLCA1NDQzOSwgNTQ0NDYsIDU0NDUzLCA1NDQ2MCwgCisgICAgNTQ0NjcsIDU0NDc3LCA1NDQ4NywgNTQ0OTQsIDU0NTAxLCA1NDUwOSwgNTQ1MTcsIDU0NTIxLCA1NDUyNiwgNTQ1MzEsIAorICAgIDU0NTM3LCA1NDU0MywgNTQ1NDYsIDU0NTQ5LCA1NDU1MiwgNTQ1NTUsIDU0NTU5LCA1NDU2NCwgNTQ1NjksIDU0NTc0LCAKKyAgICA1NDU3OSwgNTQ1ODQsIDU0NTg4LCA1NDU5MiwgNTQ1OTYsIDU0NjAwLCA1NDYwNCwgNTQ2MDgsIDU0NjEyLCA1NDYxOCwgCisgICAgNTQ2MjIsIDU0NjI4LCA1NDYzMywgNTQ2NDAsIDU0NjQ4LCA1NDY1NSwgNTQ2NjMsIDU0NjcwLCA1NDY3OCwgNTQ2ODcsIAorICAgIDU0Njk0LCA1NDcwNCwgNTQ3MTUsIDU0NzIxLCA1NDczMCwgNTQ3MzYsIDU0NzQ1LCA1NDc1NCwgNTQ3NjAsIDU0NzY2LCAKKyAgICA1NDc3MCwgNTQ3NzQsIDU0NzgzLCA1NDc5MiwgNTQ3OTksIDU0ODA2LCA1NDgxNSwgMCwgMCwgMCwgNTQ4MjQsIDU0ODI5LCAKKyAgICA1NDgzMywgNTQ4MzcsIDU0ODQyLCA1NDg0NywgNTQ4NTIsIDU0ODYwLCA1NDg2OCwgNTQ4NzEsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU0ODQ3LCA1NDg1MiwgNTQ4NTcsIDU0ODYyLCA1NDg2NywgNTQ4NzIsIDU0ODc3LCA1NDg4MiwgCi0gICAgNTQ4ODcsIDU0ODkyLCA1NDg5NywgNTQ5MDMsIDU0OTA3LCA1NDkxMiwgNTQ5MTcsIDU0OTIyLCA1NDkyNywgNTQ5MzIsIAotICAgIDU0OTM3LCA1NDk0MiwgNTQ5NDcsIDU0OTUyLCA1NDk1NywgNTQ5NjIsIDU0OTY3LCA1NDk3MiwgNTQ5NzcsIDU0OTgyLCAKLSAgICA1NDk4NywgNTQ5OTIsIDU0OTk3LCA1NTAwMiwgNTUwMDcsIDU1MDEyLCA1NTAxNywgNTUwMjMsIDU1MDI4LCA1NTAzNCwgCi0gICAgNTUwNDMsIDU1MDQ4LCA1NTA1NiwgNTUwNjMsIDU1MDcyLCA1NTA3NywgNTUwODIsIDU1MDg3LCA1NTA5MywgMCwgNTUxMDAsIAotICAgIDU1MTA1LCA1NTExMCwgNTUxMTUsIDU1MTIwLCA1NTEyNSwgNTUxMzAsIDU1MTM1LCA1NTE0MCwgNTUxNDUsIDU1MTUwLCAKLSAgICA1NTE1NiwgNTUxNjAsIDU1MTY1LCA1NTE3MCwgNTUxNzUsIDU1MTgwLCA1NTE4NSwgNTUxOTAsIDU1MTk1LCA1NTIwMCwgCi0gICAgNTUyMDUsIDU1MjEwLCA1NTIxNSwgNTUyMjAsIDU1MjI1LCA1NTIzMCwgNTUyMzUsIDU1MjQwLCA1NTI0NSwgNTUyNTAsIAotICAgIDU1MjU1LCA1NTI2MCwgNTUyNjUsIDU1MjcwLCA1NTI3NiwgNTUyODEsIDU1Mjg3LCA1NTI5NiwgNTUzMDEsIDU1MzA5LCAKLSAgICA1NTMxNiwgNTUzMjUsIDU1MzMwLCA1NTMzNSwgNTUzNDAsIDU1MzQ2LCAwLCA1NTM1MywgNTUzNjEsIDU1MzY5LCA1NTM3OCwgCi0gICAgNTUzODUsIDU1MzkzLCA1NTM5OSwgNTU0MDgsIDU1NDE2LCA1NTQyNCwgNTU0MzIsIDU1NDQwLCA1NTQ0OCwgNTU0NTYsIAotICAgIDU1NDYxLCA1NTQ2OCwgNTU0NzQsIDU1NDgxLCA1NTQ4OSwgNTU0OTYsIDU1NTAzLCA1NTUxMSwgNTU1MTcsIDU1NTIzLCAKLSAgICA1NTUzMCwgNTU1MzcsIDU1NTQ3LCA1NTU1NywgNTU1NjQsIDU1NTcxLCA1NTU3NiwgNTU1ODYsIDU1NTk2LCA1NTYwMSwgCi0gICAgNTU2MDYsIDU1NjExLCA1NTYxNiwgNTU2MjEsIDU1NjI2LCA1NTYzMSwgNTU2MzYsIDU1NjQxLCA1NTY0NiwgNTU2NTEsIAotICAgIDU1NjU2LCA1NTY2MSwgNTU2NjYsIDU1NjcxLCA1NTY3NiwgNTU2ODEsIDU1Njg2LCA1NTY5MSwgNTU2OTYsIDU1NzAxLCAKLSAgICA1NTcwNiwgNTU3MTEsIDU1NzE2LCA1NTcyMSwgNTU3MjYsIDU1NzMxLCA1NTczNiwgNTU3NDEsIDU1NzQ2LCA1NTc1MCwgCi0gICAgNTU3NTQsIDU1NzU5LCA1NTc2NCwgNTU3NjksIDU1Nzc0LCA1NTc3OSwgNTU3ODQsIDU1Nzg5LCA1NTc5NCwgNTU3OTksIAotICAgIDU1ODA0LCA1NTgwOSwgNTU4MTQsIDU1ODE5LCA1NTgyNCwgNTU4MjksIDU1ODM0LCA1NTgzOSwgNTU4NDQsIDU1ODUxLCAKLSAgICA1NTg1OCwgNTU4NjUsIDU1ODcyLCA1NTg3OSwgNTU4ODYsIDU1ODkzLCA1NTkwMCwgNTU5MDcsIDU1OTE0LCA1NTkyMSwgCi0gICAgNTU5MjgsIDU1OTM1LCA1NTk0MiwgNTU5NDcsIDU1OTUyLCA1NTk1OSwgNTU5NjYsIDU1OTczLCA1NTk4MCwgNTU5ODcsIAotICAgIDU1OTk0LCA1NjAwMSwgNTYwMDgsIDU2MDE1LCA1NjAyMiwgNTYwMjksIDU2MDM2LCA1NjA0MiwgNTYwNDgsIDU2MDU0LCAKLSAgICA1NjA2MCwgNTYwNjcsIDU2MDc0LCA1NjA4MSwgNTYwODgsIDU2MDk1LCA1NjEwMiwgNTYxMDksIDU2MTE2LCA1NjEyMywgCi0gICAgNTYxMzAsIDU2MTM4LCA1NjE0NiwgNTYxNTQsIDU2MTYyLCA1NjE3MCwgNTYxNzgsIDU2MTg2LCA1NjE5NCwgNTYxOTgsIAotICAgIDU2MjA0LCA1NjIxMCwgNTYyMTQsIDU2MjIwLCA1NjIyNiwgNTYyMzIsIDU2MjM5LCA1NjI0NiwgNTYyNTMsIDU2MjYwLCAKLSAgICA1NjI2NSwgNTYyNzEsIDU2Mjc3LCA1NjI4NCwgMCwgMCwgMCwgMCwgMCwgNTYyOTEsIDU2Mjk5LCA1NjMwOCwgNTYzMTcsIAotICAgIDU2MzI1LCA1NjMzMSwgNTYzMzYsIDU2MzQxLCA1NjM0NiwgNTYzNTEsIDU2MzU2LCA1NjM2MSwgNTYzNjYsIDU2MzcxLCAKLSAgICA1NjM3NiwgNTYzODEsIDU2Mzg2LCA1NjM5MSwgNTYzOTYsIDU2NDAxLCA1NjQwNiwgNTY0MTEsIDU2NDE2LCA1NjQyMSwgCi0gICAgNTY0MjYsIDU2NDMxLCA1NjQzNiwgNTY0NDEsIDU2NDQ2LCA1NjQ1MSwgNTY0NTYsIDU2NDYxLCA1NjQ2NiwgNTY0NzEsIAotICAgIDU2NDc2LCA1NjQ4MSwgNTY0ODYsIDU2NDkxLCA1NjQ5NiwgNTY1MDEsIDU2NTA2LCA1NjUxMSwgNTY1MTYsIDU2NTIxLCAKLSAgICA1NjUyNiwgMCwgNTY1MzEsIDAsIDAsIDAsIDAsIDAsIDU2NTM2LCAwLCAwLCA1NjU0MSwgNTY1NDUsIDU2NTUwLCA1NjU1NSwgCi0gICAgNTY1NjAsIDU2NTY1LCA1NjU3NCwgNTY1NzksIDU2NTg0LCA1NjU4OSwgNTY1OTQsIDU2NTk5LCA1NjYwNCwgNTY2MDksIAotICAgIDU2NjE0LCA1NjYyMSwgNTY2MjYsIDU2NjMxLCA1NjY0MCwgNTY2NDcsIDU2NjUyLCA1NjY1NywgNTY2NjIsIDU2NjY5LCAKLSAgICA1NjY3NCwgNTY2ODEsIDU2Njg2LCA1NjY5MSwgNTY2OTgsIDU2NzA1LCA1NjcxMCwgNTY3MTUsIDU2NzIwLCA1NjcyNywgCi0gICAgNTY3MzQsIDU2NzM5LCA1Njc0NCwgNTY3NDksIDU2NzU0LCA1Njc1OSwgNTY3NjYsIDU2NzczLCA1Njc3OCwgNTY3ODMsIAotICAgIDU2Nzg4LCA1Njc5MywgNTY3OTgsIDU2ODAzLCA1NjgwOCwgNTY4MTMsIDU2ODE4LCA1NjgyMywgNTY4MjgsIDU2ODM1LCAKLSAgICA1Njg0MCwgNTY4NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2ODUwLCA1Njg1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTY4NjIsIDU2ODY3LCA1Njg3MSwgNTY4NzUsIDU2ODc5LCA1Njg4MywgNTY4ODcsIDU2ODkxLCAKLSAgICA1Njg5NSwgNTY4OTksIDU2OTAzLCA1NjkwNywgNTY5MTMsIDU2OTE3LCA1NjkyMSwgNTY5MjUsIDU2OTI5LCA1NjkzMywgCi0gICAgNTY5MzcsIDU2OTQxLCA1Njk0NSwgNTY5NDksIDU2OTUzLCA1Njk1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTY5NjEsIDU2OTY1LCA1Njk2OSwgNTY5NzMsIDU2OTc3LCA1Njk4MSwgNTY5ODUsIDAsIDU2OTg5LCA1Njk5MywgNTY5OTcsIAotICAgIDU3MDAxLCA1NzAwNSwgNTcwMDksIDU3MDEzLCAwLCA1NzAxNywgNTcwMjEsIDU3MDI1LCA1NzAyOSwgNTcwMzMsIDU3MDM3LCAKLSAgICA1NzA0MSwgMCwgNTcwNDUsIDU3MDQ5LCA1NzA1MywgNTcwNTcsIDU3MDYxLCA1NzA2NSwgNTcwNjksIDAsIDU3MDczLCAKLSAgICA1NzA3NywgNTcwODEsIDU3MDg1LCA1NzA4OSwgNTcwOTMsIDU3MDk3LCAwLCA1NzEwMSwgNTcxMDUsIDU3MTA5LCA1NzExMywgCi0gICAgNTcxMTcsIDU3MTIxLCA1NzEyNSwgMCwgNTcxMjksIDU3MTMzLCA1NzEzNywgNTcxNDEsIDU3MTQ1LCA1NzE0OSwgNTcxNTMsIAotICAgIDAsIDU3MTU3LCA1NzE2MSwgNTcxNjUsIDU3MTY5LCA1NzE3MywgNTcxNzcsIDU3MTgxLCAwLCA1NzE4NSwgNTcxOTAsIAotICAgIDU3MTk1LCA1NzIwMCwgNTcyMDUsIDU3MjEwLCA1NzIxNSwgNTcyMTksIDU3MjI0LCA1NzIyOSwgNTcyMzQsIDU3MjM4LCAKLSAgICA1NzI0MywgNTcyNDgsIDU3MjUzLCA1NzI1OCwgNTcyNjIsIDU3MjY3LCA1NzI3MiwgNTcyNzcsIDU3MjgyLCA1NzI4NywgCi0gICAgNTcyOTIsIDU3Mjk2LCA1NzMwMSwgNTczMDYsIDU3MzEzLCA1NzMxOCwgNTczMjMsIDU3MzI5LCA1NzMzNiwgNTczNDMsIAotICAgIDU3MzUyLCA1NzM1OSwgNTczNjgsIDU3MzcyLCA1NzM3NiwgNTczODIsIDU3Mzg4LCA1NzM5NCwgNTc0MDIsIDU3NDA4LCAKLSAgICA1NzQxMiwgNTc0MTYsIDU3NDIwLCA1NzQyNiwgNTc0MzIsIDU3NDM2LCA1NzQzOCwgNTc0NDIsIDU3NDQ4LCA1NzQ1MCwgCi0gICAgNTc0NTQsIDU3NDU4LCA1NzQ2MiwgNTc0NjgsIDU3NDczLCA1NzQ3NywgNTc0ODEsIDU3NDg2LCA1NzQ5MiwgNTc0OTcsIAotICAgIDU3NTAyLCA1NzUwNywgNTc1MTIsIDU3NTE5LCA1NzUyNiwgNTc1MzEsIDU3NTM2LCA1NzU0MSwgNTc1NDYsIDU3NTUxLCAKLSAgICA1NzU1NiwgNTc1NjAsIDU3NTY0LCA1NzU3MSwgNTc1NzgsIDU3NTg0LCA1NzU4OCwgNTc1OTMsIDU3NTk1LCA1NzU5OSwgCi0gICAgNTc2MDcsIDU3NjExLCA1NzYxNSwgNTc2MTksIDU3NjIzLCA1NzYyOSwgNTc2MzUsIDU3NjM5LCA1NzY0NSwgNTc2NDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0ODc1LCA1NDg4MCwgNTQ4ODUsIAorICAgIDU0ODkwLCA1NDg5NSwgNTQ5MDAsIDU0OTA1LCA1NDkxMCwgNTQ5MTUsIDU0OTIwLCA1NDkyNSwgNTQ5MzEsIDU0OTM1LCAKKyAgICA1NDk0MCwgNTQ5NDUsIDU0OTUwLCA1NDk1NSwgNTQ5NjAsIDU0OTY1LCA1NDk3MCwgNTQ5NzUsIDU0OTgwLCA1NDk4NSwgCisgICAgNTQ5OTAsIDU0OTk1LCA1NTAwMCwgNTUwMDUsIDU1MDEwLCA1NTAxNSwgNTUwMjAsIDU1MDI1LCA1NTAzMCwgNTUwMzUsIAorICAgIDU1MDQwLCA1NTA0NSwgNTUwNTEsIDU1MDU2LCA1NTA2MiwgNTUwNzEsIDU1MDc2LCA1NTA4NCwgNTUwOTEsIDU1MTAwLCAKKyAgICA1NTEwNSwgNTUxMTAsIDU1MTE1LCA1NTEyMSwgMCwgNTUxMjgsIDU1MTMzLCA1NTEzOCwgNTUxNDMsIDU1MTQ4LCA1NTE1MywgCisgICAgNTUxNTgsIDU1MTYzLCA1NTE2OCwgNTUxNzMsIDU1MTc4LCA1NTE4NCwgNTUxODgsIDU1MTkzLCA1NTE5OCwgNTUyMDMsIAorICAgIDU1MjA4LCA1NTIxMywgNTUyMTgsIDU1MjIzLCA1NTIyOCwgNTUyMzMsIDU1MjM4LCA1NTI0MywgNTUyNDgsIDU1MjUzLCAKKyAgICA1NTI1OCwgNTUyNjMsIDU1MjY4LCA1NTI3MywgNTUyNzgsIDU1MjgzLCA1NTI4OCwgNTUyOTMsIDU1Mjk4LCA1NTMwNCwgCisgICAgNTUzMDksIDU1MzE1LCA1NTMyNCwgNTUzMjksIDU1MzM3LCA1NTM0NCwgNTUzNTMsIDU1MzU4LCA1NTM2MywgNTUzNjgsIAorICAgIDU1Mzc0LCAwLCA1NTM4MSwgNTUzODksIDU1Mzk3LCA1NTQwNiwgNTU0MTMsIDU1NDIxLCA1NTQyNywgNTU0MzYsIDU1NDQ0LCAKKyAgICA1NTQ1MiwgNTU0NjAsIDU1NDY4LCA1NTQ3NiwgNTU0ODQsIDU1NDg5LCA1NTQ5NiwgNTU1MDIsIDU1NTA5LCA1NTUxNywgCisgICAgNTU1MjQsIDU1NTMxLCA1NTUzOSwgNTU1NDUsIDU1NTUxLCA1NTU1OCwgNTU1NjUsIDU1NTc1LCA1NTU4NSwgNTU1OTIsIAorICAgIDU1NTk5LCA1NTYwNCwgNTU2MTQsIDU1NjI0LCA1NTYyOSwgNTU2MzQsIDU1NjM5LCA1NTY0NCwgNTU2NDksIDU1NjU0LCAKKyAgICA1NTY1OSwgNTU2NjQsIDU1NjY5LCA1NTY3NCwgNTU2NzksIDU1Njg0LCA1NTY4OSwgNTU2OTQsIDU1Njk5LCA1NTcwNCwgCisgICAgNTU3MDksIDU1NzE0LCA1NTcxOSwgNTU3MjQsIDU1NzI5LCA1NTczNCwgNTU3MzksIDU1NzQ0LCA1NTc0OSwgNTU3NTQsIAorICAgIDU1NzU5LCA1NTc2NCwgNTU3NjksIDU1Nzc0LCA1NTc3OCwgNTU3ODIsIDU1Nzg3LCA1NTc5MiwgNTU3OTcsIDU1ODAyLCAKKyAgICA1NTgwNywgNTU4MTIsIDU1ODE3LCA1NTgyMiwgNTU4MjcsIDU1ODMyLCA1NTgzNywgNTU4NDIsIDU1ODQ3LCA1NTg1MiwgCisgICAgNTU4NTcsIDU1ODYyLCA1NTg2NywgNTU4NzIsIDU1ODc5LCA1NTg4NiwgNTU4OTMsIDU1OTAwLCA1NTkwNywgNTU5MTQsIAorICAgIDU1OTIxLCA1NTkyOCwgNTU5MzUsIDU1OTQyLCA1NTk0OSwgNTU5NTYsIDU1OTYzLCA1NTk3MCwgNTU5NzUsIDU1OTgwLCAKKyAgICA1NTk4NywgNTU5OTQsIDU2MDAxLCA1NjAwOCwgNTYwMTUsIDU2MDIyLCA1NjAyOSwgNTYwMzYsIDU2MDQzLCA1NjA1MCwgCisgICAgNTYwNTcsIDU2MDY0LCA1NjA3MCwgNTYwNzYsIDU2MDgyLCA1NjA4OCwgNTYwOTUsIDU2MTAyLCA1NjEwOSwgNTYxMTYsIAorICAgIDU2MTIzLCA1NjEzMCwgNTYxMzcsIDU2MTQ0LCA1NjE1MSwgNTYxNTgsIDU2MTY2LCA1NjE3NCwgNTYxODIsIDU2MTkwLCAKKyAgICA1NjE5OCwgNTYyMDYsIDU2MjE0LCA1NjIyMiwgNTYyMjYsIDU2MjMyLCA1NjIzOCwgNTYyNDIsIDU2MjQ4LCA1NjI1NCwgCisgICAgNTYyNjAsIDU2MjY3LCA1NjI3NCwgNTYyODEsIDU2Mjg4LCA1NjI5MywgNTYyOTksIDU2MzA1LCA1NjMxMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTYzMTksIDU2MzI3LCA1NjMzNiwgNTYzNDUsIDU2MzUzLCA1NjM1OSwgNTYzNjQsIDU2MzY5LCA1NjM3NCwgCisgICAgNTYzNzksIDU2Mzg0LCA1NjM4OSwgNTYzOTQsIDU2Mzk5LCA1NjQwNCwgNTY0MDksIDU2NDE0LCA1NjQxOSwgNTY0MjQsIAorICAgIDU2NDI5LCA1NjQzNCwgNTY0MzksIDU2NDQ0LCA1NjQ0OSwgNTY0NTQsIDU2NDU5LCA1NjQ2NCwgNTY0NjksIDU2NDc0LCAKKyAgICA1NjQ3OSwgNTY0ODQsIDU2NDg5LCA1NjQ5NCwgNTY0OTksIDU2NTA0LCA1NjUwOSwgNTY1MTQsIDU2NTE5LCA1NjUyNCwgCisgICAgNTY1MjksIDU2NTM0LCA1NjUzOSwgNTY1NDQsIDU2NTQ5LCA1NjU1NCwgMCwgNTY1NTksIDAsIDAsIDAsIDAsIDAsIDU2NTY0LCAKKyAgICAwLCAwLCA1NjU2OSwgNTY1NzMsIDU2NTc4LCA1NjU4MywgNTY1ODgsIDU2NTkzLCA1NjYwMiwgNTY2MDcsIDU2NjEyLCAKKyAgICA1NjYxNywgNTY2MjIsIDU2NjI3LCA1NjYzMiwgNTY2MzcsIDU2NjQyLCA1NjY0OSwgNTY2NTQsIDU2NjU5LCA1NjY2OCwgCisgICAgNTY2NzUsIDU2NjgwLCA1NjY4NSwgNTY2OTAsIDU2Njk3LCA1NjcwMiwgNTY3MDksIDU2NzE0LCA1NjcxOSwgNTY3MjYsIAorICAgIDU2NzMzLCA1NjczOCwgNTY3NDMsIDU2NzQ4LCA1Njc1NSwgNTY3NjIsIDU2NzY3LCA1Njc3MiwgNTY3NzcsIDU2NzgyLCAKKyAgICA1Njc4NywgNTY3OTQsIDU2ODAxLCA1NjgwNiwgNTY4MTEsIDU2ODE2LCA1NjgyMSwgNTY4MjYsIDU2ODMxLCA1NjgzNiwgCisgICAgNTY4NDEsIDU2ODQ2LCA1Njg1MSwgNTY4NTYsIDU2ODYzLCA1Njg2OCwgNTY4NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU2ODc4LCA1Njg4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY4OTAsIDU2ODk1LCAKKyAgICA1Njg5OSwgNTY5MDMsIDU2OTA3LCA1NjkxMSwgNTY5MTUsIDU2OTE5LCA1NjkyMywgNTY5MjcsIDU2OTMxLCA1NjkzNSwgCisgICAgNTY5NDEsIDU2OTQ1LCA1Njk0OSwgNTY5NTMsIDU2OTU3LCA1Njk2MSwgNTY5NjUsIDU2OTY5LCA1Njk3MywgNTY5NzcsIAorICAgIDU2OTgxLCA1Njk4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY5ODksIDU2OTkzLCA1Njk5NywgNTcwMDEsIAorICAgIDU3MDA1LCA1NzAwOSwgNTcwMTMsIDAsIDU3MDE3LCA1NzAyMSwgNTcwMjUsIDU3MDI5LCA1NzAzMywgNTcwMzcsIDU3MDQxLCAKKyAgICAwLCA1NzA0NSwgNTcwNDksIDU3MDUzLCA1NzA1NywgNTcwNjEsIDU3MDY1LCA1NzA2OSwgMCwgNTcwNzMsIDU3MDc3LCAKKyAgICA1NzA4MSwgNTcwODUsIDU3MDg5LCA1NzA5MywgNTcwOTcsIDAsIDU3MTAxLCA1NzEwNSwgNTcxMDksIDU3MTEzLCA1NzExNywgCisgICAgNTcxMjEsIDU3MTI1LCAwLCA1NzEyOSwgNTcxMzMsIDU3MTM3LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1NzE1MywgMCwgCisgICAgNTcxNTcsIDU3MTYxLCA1NzE2NSwgNTcxNjksIDU3MTczLCA1NzE3NywgNTcxODEsIDAsIDU3MTg1LCA1NzE4OSwgNTcxOTMsIAorICAgIDU3MTk3LCA1NzIwMSwgNTcyMDUsIDU3MjA5LCAwLCA1NzIxMywgNTcyMTgsIDU3MjIzLCA1NzIyOCwgNTcyMzMsIDU3MjM4LCAKKyAgICA1NzI0MywgNTcyNDcsIDU3MjUyLCA1NzI1NywgNTcyNjIsIDU3MjY2LCA1NzI3MSwgNTcyNzYsIDU3MjgxLCA1NzI4NiwgCisgICAgNTcyOTAsIDU3Mjk1LCA1NzMwMCwgNTczMDUsIDU3MzEwLCA1NzMxNSwgNTczMjAsIDU3MzI0LCA1NzMyOSwgNTczMzQsIAorICAgIDU3MzQxLCA1NzM0NiwgNTczNTEsIDU3MzU3LCA1NzM2NCwgNTczNzEsIDU3MzgwLCA1NzM4NywgNTczOTYsIDU3NDAwLCAKKyAgICA1NzQwNCwgNTc0MTAsIDU3NDE2LCA1NzQyMiwgNTc0MzAsIDU3NDM2LCA1NzQ0MCwgNTc0NDQsIDU3NDQ4LCA1NzQ1NCwgCisgICAgNTc0NjAsIDU3NDY0LCA1NzQ2NiwgNTc0NzAsIDU3NDc2LCA1NzQ3OCwgNTc0ODIsIDU3NDg2LCA1NzQ5MCwgNTc0OTYsIAorICAgIDU3NTAxLCA1NzUwNSwgNTc1MDksIDU3NTE0LCA1NzUyMCwgNTc1MjUsIDU3NTMwLCA1NzUzNSwgNTc1NDAsIDU3NTQ3LCAKKyAgICA1NzU1NCwgNTc1NTksIDU3NTY0LCA1NzU2OSwgNTc1NzQsIDU3NTc5LCA1NzU4NCwgNTc1ODgsIDU3NTkyLCA1NzU5OSwgCisgICAgNTc2MDYsIDU3NjEyLCA1NzYxNiwgNTc2MjEsIDU3NjIzLCA1NzYyNywgNTc2MzUsIDU3NjM5LCA1NzY0MywgNTc2NDcsIAorICAgIDU3NjUxLCA1NzY1NywgNTc2NjMsIDU3NjY3LCA1NzY3MywgNTc2NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NjUzLCA1NzY1NywgCi0gICAgNTc2NjEsIDU3NjY2LCA1NzY3MSwgNTc2NzYsIDU3NjgwLCA1NzY4NCwgNTc2ODgsIDU3NjkzLCA1NzY5OCwgNTc3MDIsIAotICAgIDU3NzA2LCA1NzcxMCwgNTc3MTQsIDU3NzE5LCA1NzcyNCwgNTc3MjksIDU3NzM0LCA1NzczOCwgNTc3NDIsIDU3NzQ3LCAKLSAgICA1Nzc1MiwgNTc3NTcsIDU3NzYyLCA1Nzc2NiwgMCwgNTc3NzAsIDU3Nzc0LCA1Nzc3OCwgNTc3ODIsIDU3Nzg2LCA1Nzc5MCwgCi0gICAgNTc3OTQsIDU3Nzk5LCA1NzgwNCwgNTc4MDgsIDU3ODEzLCA1NzgxOCwgNTc4MjcsIDU3ODMxLCA1NzgzNSwgNTc4MzksIAotICAgIDU3ODQ2LCA1Nzg1MCwgNTc4NTUsIDU3ODYwLCA1Nzg2NCwgNTc4NjgsIDU3ODc0LCA1Nzg3OSwgNTc4ODQsIDU3ODg5LCAKLSAgICA1Nzg5NCwgNTc4OTgsIDU3OTAyLCA1NzkwNiwgNTc5MTAsIDU3OTE0LCA1NzkxOSwgNTc5MjQsIDU3OTI4LCA1NzkzMiwgCi0gICAgNTc5MzcsIDU3OTQyLCA1Nzk0NywgNTc5NTEsIDU3OTU1LCA1Nzk2MCwgNTc5NjUsIDU3OTcxLCA1Nzk3NywgNTc5ODEsIAotICAgIDU3OTg3LCA1Nzk5MywgNTc5OTcsIDU4MDAzLCA1ODAwOSwgNTgwMTQsIDU4MDE5LCA1ODAyMywgNTgwMjksIDU4MDMzLCAKLSAgICA1ODAzNywgNTgwNDMsIDU4MDQ5LCA1ODA1NCwgNTgwNTksIDU4MDYzLCA1ODA2NywgNTgwNzUsIDU4MDgxLCA1ODA4NywgCi0gICAgNTgwOTMsIDU4MDk4LCA1ODEwMywgNTgxMDgsIDU4MTE0LCA1ODExOCwgNTgxMjQsIDU4MTI4LCA1ODEzMiwgNTgxMzgsIAotICAgIDU4MTQ0LCA1ODE1MCwgNTgxNTYsIDU4MTYyLCA1ODE2OCwgNTgxNzQsIDU4MTgwLCA1ODE4NiwgNTgxOTIsIDU4MTk4LCAKLSAgICA1ODIwNCwgNTgyMDgsIDU4MjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODIyMCwgNTgyMjMsIAotICAgIDU4MjI3LCA1ODIzMSwgNTgyMzUsIDU4MjM5LCA1ODI0MiwgNTgyNDUsIDU4MjQ5LCA1ODI1MywgNTgyNTcsIDU4MjYxLCAKLSAgICA1ODI2NCwgNTgyNjksIDU4MjczLCA1ODI3NywgNTgyODEsIDU4Mjg2LCA1ODI5MCwgNTgyOTQsIDU4Mjk4LCA1ODMwMiwgCi0gICAgNTgzMDgsIDU4MzE0LCA1ODMxOCwgNTgzMjIsIDU4MzI2LCA1ODMzMCwgNTgzMzQsIDU4MzM4LCA1ODM0MiwgNTgzNDYsIAotICAgIDU4MzUwLCA1ODM1NCwgNTgzNTgsIDU4MzY0LCA1ODM2OCwgNTgzNzIsIDU4Mzc2LCA1ODM4MCwgNTgzODQsIDU4Mzg4LCAKLSAgICA1ODM5MiwgNTgzOTYsIDU4NDAwLCA1ODQwNCwgNTg0MDgsIDU4NDEyLCA1ODQxNiwgNTg0MjAsIDU4NDI0LCA1ODQyOCwgCi0gICAgNTg0MzQsIDU4NDQwLCA1ODQ0NSwgNTg0NTAsIDU4NDU0LCA1ODQ1OCwgNTg0NjIsIDU4NDY2LCA1ODQ3MCwgNTg0NzQsIAotICAgIDU4NDc4LCA1ODQ4MiwgNTg0ODYsIDU4NDkwLCA1ODQ5NCwgNTg0OTgsIDU4NTAyLCA1ODUwNiwgNTg1MTAsIDU4NTE0LCAKLSAgICA1ODUxOCwgNTg1MjIsIDU4NTI2LCA1ODUzMCwgNTg1MzQsIDU4NTM4LCA1ODU0MiwgNTg1NDYsIDU4NTUyLCA1ODU1NiwgCi0gICAgNTg1NjAsIDU4NTY0LCA1ODU2OCwgNTg1NzIsIDU4NTc2LCA1ODU4MCwgNTg1ODQsIDU4NTg5LCA1ODU5NiwgNTg2MDAsIAotICAgIDU4NjA0LCA1ODYwOCwgNTg2MTIsIDU4NjE2LCA1ODYyMCwgNTg2MjQsIDU4NjI4LCA1ODYzMiwgNTg2MzYsIDU4NjQwLCAKLSAgICA1ODY0NCwgNTg2NTEsIDU4NjU1LCA1ODY2MSwgNTg2NjUsIDU4NjY5LCA1ODY3MywgNTg2NzcsIDU4NjgxLCA1ODY4NCwgCi0gICAgNTg2ODgsIDU4NjkyLCA1ODY5NiwgNTg3MDAsIDU4NzA0LCA1ODcwOCwgNTg3MTIsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIAotICAgIDU4NzI4LCA1ODczMiwgNTg3MzYsIDU4NzQwLCA1ODc0NCwgNTg3NDgsIDU4NzUyLCA1ODc1NiwgNTg3NjAsIDU4NzY0LCAKLSAgICA1ODc2OCwgNTg3NzIsIDU4Nzc2LCA1ODc4MCwgNTg3ODQsIDU4Nzg4LCA1ODc5MiwgNTg3OTYsIDU4ODAwLCA1ODgwNCwgCi0gICAgNTg4MDgsIDU4ODEyLCA1ODgxOCwgNTg4MjIsIDU4ODI2LCA1ODgzMCwgNTg4MzQsIDU4ODM4LCA1ODg0MiwgNTg4NDYsIAotICAgIDU4ODUwLCA1ODg1NCwgNTg4NTgsIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg3OCwgNTg4ODIsIDU4ODg2LCAKLSAgICA1ODg5MCwgNTg4OTQsIDU4ODk4LCA1ODkwMiwgNTg5MDYsIDU4OTEwLCA1ODkxNCwgNTg5MTgsIDU4OTIyLCA1ODkyNiwgCi0gICAgNTg5MzQsIDU4OTM4LCA1ODk0MiwgNTg5NDYsIDU4OTUwLCA1ODk1NCwgNTg5NjAsIDU4OTY0LCA1ODk2OCwgNTg5NzIsIAotICAgIDU4OTc2LCA1ODk4MCwgNTg5ODQsIDU4OTg4LCA1ODk5MiwgNTg5OTYsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDEyLCAKLSAgICA1OTAxOCwgNTkwMjIsIDU5MDI2LCA1OTAzMCwgNTkwMzQsIDU5MDM4LCA1OTA0MiwgNTkwNDYsIDU5MDUwLCA1OTA1NCwgCi0gICAgNTkwNTgsIDU5MDYyLCA1OTA2NiwgNTkwNzAsIDU5MDc0LCA1OTA3OCwgNTkwODIsIDU5MDg2LCA1OTA5MCwgNTkwOTQsIAotICAgIDU5MDk4LCA1OTEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTkxMDYsIDU5MTE1LCA1OTEyMywgNTkxMzUsIDU5MTQ2LCA1OTE1NCwgNTkxNjMsIDU5MTcyLCAKLSAgICA1OTE4MiwgNTkxOTQsIDU5MjA2LCA1OTIxOCwgMCwgMCwgMCwgMCwgNTkyMjQsIDU5MjI3LCA1OTIzMCwgNTkyMzUsIAotICAgIDU5MjM4LCA1OTI0NSwgNTkyNDksIDU5MjUzLCA1OTI1NywgNTkyNjEsIDU5MjY1LCA1OTI3MCwgNTkyNzUsIDU5Mjc5LCAKLSAgICA1OTI4MywgNTkyODgsIDU5MjkzLCA1OTI5OCwgNTkzMDMsIDU5MzA2LCA1OTMwOSwgNTkzMTUsIDU5MzIxLCA1OTMyNiwgCi0gICAgNTkzMzEsIDU5MzM4LCA1OTM0NSwgNTkzNDksIDU5MzUzLCA1OTM1NywgNTkzNjUsIDU5MzcxLCA1OTM3OCwgNTkzODMsIAotICAgIDU5Mzg4LCA1OTM5MywgNTkzOTgsIDU5NDAzLCA1OTQwOCwgNTk0MTMsIDU5NDE4LCA1OTQyMywgNTk0MjgsIDU5NDMzLCAKLSAgICA1OTQzOCwgNTk0NDMsIDU5NDQ4LCA1OTQ1NCwgNTk0NTksIDU5NDYzLCA1OTQ2OSwgNTk0ODAsIDU5NDkwLCA1OTUwNSwgCi0gICAgNTk1MTUsIDU5NTE5LCA1OTUyOSwgNTk1MzUsIDU5NTQxLCA1OTU0NywgNTk1NTIsIDU5NTU1LCA1OTU2MCwgNTk1NjQsIDAsIAotICAgIDU5NTcwLCA1OTU3NCwgNTk1NzcsIDU5NTgxLCA1OTU4NCwgNTk1ODgsIDU5NTkxLCA1OTU5NSwgNTk1OTgsIDU5NjAyLCAKLSAgICA1OTYwNSwgNTk2MDgsIDU5NjEyLCA1OTYxNiwgNTk2MjAsIDU5NjI0LCA1OTYyOCwgNTk2MzIsIDU5NjM2LCA1OTY0MCwgCi0gICAgNTk2NDQsIDU5NjQ3LCA1OTY1MSwgNTk2NTUsIDU5NjU5LCA1OTY2MywgNTk2NjcsIDU5NjcxLCA1OTY3NSwgNTk2NzksIAotICAgIDU5NjgzLCA1OTY4NywgNTk2OTEsIDU5Njk1LCA1OTY5OSwgNTk3MDQsIDU5NzA4LCA1OTcxMiwgNTk3MTYsIDU5NzIwLCAKLSAgICA1OTcyMywgNTk3MjcsIDU5NzMwLCA1OTczNCwgNTk3MzgsIDU5NzQyLCA1OTc0NiwgNTk3NDksIDU5NzUzLCA1OTc1NiwgCi0gICAgNTk3NjAsIDU5NzY0LCA1OTc2OCwgNTk3NzIsIDU5Nzc2LCA1OTc4MCwgNTk3ODQsIDU5Nzg4LCA1OTc5MiwgNTk3OTYsIAotICAgIDU5ODAwLCA1OTgwNCwgNTk4MDcsIDU5ODExLCA1OTgxNSwgNTk4MTksIDU5ODIzLCA1OTgyNywgNTk4MzAsIDU5ODM1LCAKLSAgICA1OTgzOSwgNTk4NDQsIDU5ODQ4LCA1OTg1MSwgNTk4NTUsIDU5ODU5LCA1OTg2MywgNTk4NjcsIDU5ODcyLCA1OTg3NiwgCi0gICAgNTk4ODAsIDU5ODg0LCA1OTg4OCwgNTk4OTIsIDU5ODk2LCA1OTkwMCwgMCwgMCwgNTk5MDUsIDU5OTEzLCA1OTkyMSwgCi0gICAgNTk5MjgsIDU5OTM1LCA1OTkzOSwgNTk5NDUsIDU5OTUwLCA1OTk1NSwgNTk5NTksIDU5OTYyLCA1OTk2NiwgNTk5NjksIAotICAgIDU5OTczLCA1OTk3NiwgNTk5ODAsIDU5OTgzLCA1OTk4NywgNTk5OTAsIDU5OTkzLCA1OTk5NywgNjAwMDEsIDYwMDA1LCAKLSAgICA2MDAwOSwgNjAwMTMsIDYwMDE3LCA2MDAyMSwgNjAwMjUsIDYwMDI5LCA2MDAzMiwgNjAwMzYsIDYwMDQwLCA2MDA0NCwgCi0gICAgNjAwNDgsIDYwMDUyLCA2MDA1NiwgNjAwNjAsIDYwMDY0LCA2MDA2OCwgNjAwNzIsIDYwMDc2LCA2MDA4MCwgNjAwODQsIAotICAgIDYwMDg5LCA2MDA5MywgNjAwOTcsIDYwMTAxLCA2MDEwNSwgNjAxMDgsIDYwMTEyLCA2MDExNSwgNjAxMTksIDYwMTIzLCAKLSAgICA2MDEyNywgNjAxMzEsIDYwMTM0LCA2MDEzOCwgNjAxNDEsIDYwMTQ1LCA2MDE0OSwgNjAxNTMsIDYwMTU3LCA2MDE2MSwgCi0gICAgNjAxNjUsIDYwMTY5LCA2MDE3MywgNjAxNzcsIDYwMTgxLCA2MDE4NSwgNjAxODksIDYwMTkyLCA2MDE5NiwgNjAyMDAsIAotICAgIDYwMjA0LCA2MDIwOCwgNjAyMTIsIDYwMjE1LCA2MDIyMCwgNjAyMjQsIDYwMjI5LCA2MDIzMywgNjAyMzYsIDYwMjQwLCAKLSAgICA2MDI0NCwgNjAyNDgsIDYwMjUyLCA2MDI1NywgNjAyNjEsIDYwMjY1LCA2MDI2OSwgNjAyNzMsIDYwMjc3LCA2MDI4MSwgCi0gICAgNjAyODUsIDYwMjkwLCA2MDI5NCwgNjAyOTgsIDYwMzAyLCA2MDMwNiwgNjAzMTEsIDYwMzE4LCA2MDMyMiwgNjAzMjgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDYwMzMzLCA2MDMzOCwgNjAzNDMsIDYwMzQ3LCA2MDM1MiwgNjAzNTcsIDYwMzYyLCA2MDM2NywgCi0gICAgNjAzNzEsIDYwMzc2LCA2MDM4MSwgNjAzODYsIDYwMzkxLCA2MDM5NiwgNjA0MDEsIDYwNDA2LCA2MDQxMSwgNjA0MTYsIAotICAgIDYwNDIwLCA2MDQyNSwgNjA0MzAsIDYwNDM1LCA2MDQzOSwgNjA0NDMsIDYwNDQ3LCA2MDQ1MiwgNjA0NTcsIDYwNDYyLCAKLSAgICA2MDQ2NywgNjA0NzIsIDYwNDc3LCA2MDQ4MiwgNjA0ODcsIDYwNDkyLCA2MDQ5NywgNjA1MDEsIDYwNTA1LCA2MDUxMCwgCi0gICAgNjA1MTUsIDYwNTIwLCA2MDUyNSwgMCwgMCwgMCwgNjA1MzAsIDYwNTM0LCA2MDUzOCwgNjA1NDIsIDYwNTQ2LCA2MDU1MCwgCi0gICAgNjA1NTQsIDYwNTU4LCA2MDU2MiwgNjA1NjYsIDYwNTcwLCA2MDU3NCwgNjA1NzgsIDYwNTgyLCA2MDU4NiwgNjA1OTAsIAotICAgIDYwNTk0LCA2MDU5OCwgNjA2MDIsIDYwNjA2LCA2MDYxMCwgNjA2MTQsIDYwNjE4LCA2MDYyMiwgNjA2MjYsIDYwNjMwLCAKLSAgICA2MDYzNCwgNjA2MzgsIDYwNjQyLCA2MDY0NiwgNjA2NTAsIDYwNjUzLCA2MDY1NywgNjA2NjAsIDYwNjY0LCA2MDY2OCwgCi0gICAgNjA2NzEsIDYwNjc1LCA2MDY3OSwgNjA2ODIsIDYwNjg2LCA2MDY5MCwgNjA2OTQsIDYwNjk4LCA2MDcwMSwgNjA3MDUsIAotICAgIDYwNzA5LCA2MDcxMywgNjA3MTcsIDYwNzIxLCA2MDcyNSwgNjA3MjgsIDYwNzMxLCA2MDczNSwgNjA3MzksIDYwNzQzLCAKLSAgICA2MDc0NywgNjA3NTEsIDYwNzU1LCA2MDc1OSwgNjA3NjMsIDYwNzY3LCA2MDc3MSwgNjA3NzUsIDYwNzc5LCA2MDc4MywgCi0gICAgNjA3ODcsIDYwNzkxLCA2MDc5NSwgNjA3OTksIDYwODAzLCA2MDgwNywgNjA4MTEsIDYwODE1LCA2MDgxOSwgNjA4MjMsIAotICAgIDYwODI3LCA2MDgzMSwgNjA4MzUsIDYwODM5LCA2MDg0MywgNjA4NDcsIDYwODUxLCA2MDg1NSwgNjA4NTksIDYwODYzLCAKLSAgICA2MDg2NywgNjA4NzEsIDYwODc1LCA2MDg3OSwgNjA4ODMsIDYwODg3LCA2MDg5MSwgNjA4OTUsIDAsIDYwODk5LCA2MDkwNSwgCi0gICAgNjA5MTEsIDYwOTE2LCA2MDkyMSwgNjA5MjYsIDYwOTMyLCA2MDkzOCwgNjA5NDQsIDYwOTUwLCA2MDk1NiwgNjA5NjIsIAotICAgIDYwOTY4LCA2MDk3NCwgNjA5ODAsIDYwOTg2LCA2MDk5MiwgNjA5OTcsIDYxMDAyLCA2MTAwNywgNjEwMTIsIDYxMDE3LCAKLSAgICA2MTAyMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDIsIDYxMDQ3LCA2MTA1MiwgNjEwNTcsIDYxMDYyLCA2MTA2NywgCi0gICAgNjEwNzIsIDYxMDc3LCA2MTA4MiwgNjEwODcsIDYxMDkyLCA2MTA5OCwgNjExMDQsIDYxMTEwLCA2MTExNiwgNjExMjEsIAotICAgIDYxMTI2LCAwLCAwLCAwLCAwLCAwLCA2MTEzMSwgNjExMzYsIDYxMTQxLCA2MTE0NiwgNjExNTEsIDYxMTU2LCA2MTE2MSwgCi0gICAgNjExNjYsIDYxMTcxLCA2MTE3NiwgNjExODEsIDYxMTg2LCA2MTE5MSwgNjExOTYsIDYxMjAxLCA2MTIwNiwgNjEyMTEsIAotICAgIDYxMjE2LCA2MTIyMSwgNjEyMjYsIDYxMjMxLCA2MTIzNiwgNjEyNDEsIDYxMjQ2LCA2MTI1MSwgNjEyNTYsIDYxMjYxLCAKLSAgICA2MTI2NiwgNjEyNzEsIDYxMjc2LCA2MTI4MSwgNjEyODYsIDYxMjkxLCA2MTI5NiwgNjEzMDEsIDYxMzA2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTMxMSwgNjEzMTYsIDYxMzIxLCA2MTMyNiwgNjEzMzAsIDYxMzM1LCAKLSAgICA2MTMzOSwgNjEzNDQsIDYxMzQ5LCA2MTM1NCwgNjEzNTksIDYxMzY0LCA2MTM2OCwgNjEzNzMsIDYxMzc4LCA2MTM4MywgCi0gICAgNjEzODgsIDYxMzkyLCA2MTM5NiwgNjE0MDAsIDYxNDA0LCA2MTQwOCwgNjE0MTIsIDYxNDE2LCA2MTQyMCwgNjE0MjQsIAotICAgIDYxNDI4LCA2MTQzMiwgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDksIDYxNDU0LCA2MTQ1OSwgNjE0NjQsIDYxNDY5LCAKLSAgICA2MTQ3NCwgNjE0NzksIDYxNDg0LCA2MTQ4OSwgNjE0OTQsIDYxNDk5LCA2MTUwNCwgNjE1MDksIDYxNTE0LCA2MTUxOSwgCi0gICAgNjE1MjUsIDAsIDYxNTMyLCA2MTUzNSwgNjE1MzgsIDYxNTQxLCA2MTU0NCwgNjE1NDcsIDYxNTUwLCA2MTU1MywgNjE1NTYsIAotICAgIDYxNTU5LCA2MTU2MywgNjE1NjcsIDYxNTcxLCA2MTU3NSwgNjE1NzksIDYxNTgzLCA2MTU4NywgNjE1OTEsIDYxNTk1LCAKLSAgICA2MTU5OSwgNjE2MDMsIDYxNjA3LCA2MTYxMSwgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgCi0gICAgNjE2MzksIDYxNjQzLCA2MTY0NywgNjE2NTEsIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIAotICAgIDYxNjc5LCA2MTY4MywgNjE2OTIsIDYxNzAxLCA2MTcxMCwgNjE3MTksIDYxNzI4LCA2MTczNywgNjE3NDYsIDYxNzU1LCAKLSAgICA2MTc1OCwgNjE3NjMsIDYxNzY4LCA2MTc3MywgNjE3NzgsIDYxNzgzLCA2MTc4OCwgNjE3OTMsIDYxNzk4LCA2MTgwMywgCi0gICAgNjE4MDcsIDYxODEyLCA2MTgxNywgNjE4MjIsIDYxODI3LCA2MTgzMiwgNjE4MzYsIDYxODQwLCA2MTg0NCwgNjE4NDgsIAotICAgIDYxODUyLCA2MTg1NiwgNjE4NjAsIDYxODY0LCA2MTg2OCwgNjE4NzIsIDYxODc2LCA2MTg4MCwgNjE4ODQsIDYxODg4LCAKLSAgICA2MTg5MywgNjE4OTgsIDYxOTAzLCA2MTkwOCwgNjE5MTMsIDYxOTE4LCA2MTkyMywgNjE5MjgsIDYxOTMzLCA2MTkzOCwgCi0gICAgNjE5NDMsIDYxOTQ4LCA2MTk1MywgNjE5NTgsIDYxOTY0LCA2MTk3MCwgNjE5NzUsIDYxOTgwLCA2MTk4MywgNjE5ODYsIAotICAgIDYxOTg5LCA2MTk5MiwgNjE5OTUsIDYxOTk4LCA2MjAwMSwgNjIwMDQsIDYyMDA3LCA2MjAxMSwgNjIwMTUsIDYyMDE5LCAKLSAgICA2MjAyMywgNjIwMjcsIDYyMDMxLCA2MjAzNSwgNjIwMzksIDYyMDQzLCA2MjA0NywgNjIwNTEsIDYyMDU1LCA2MjA1OSwgCi0gICAgNjIwNjMsIDYyMDY3LCA2MjA3MSwgNjIwNzUsIDYyMDc5LCA2MjA4MywgNjIwODcsIDYyMDkxLCA2MjA5NSwgNjIwOTksIAotICAgIDYyMTAzLCA2MjEwNywgNjIxMTEsIDYyMTE1LCA2MjExOSwgNjIxMjMsIDYyMTI3LCA2MjEzMSwgNjIxMzUsIDYyMTM5LCAKLSAgICA2MjE0MywgNjIxNDcsIDYyMTUxLCA2MjE1NSwgNjIxNTksIDYyMTYzLCA2MjE2NywgNjIxNzIsIDYyMTc3LCA2MjE4MiwgCi0gICAgNjIxODcsIDYyMTkxLCA2MjE5NiwgNjIyMDEsIDYyMjA2LCA2MjIxMSwgNjIyMTYsIDYyMjIxLCA2MjIyNiwgNjIyMzEsIAotICAgIDYyMjM2LCA2MjI0MCwgNjIyNDcsIDYyMjU0LCA2MjI2MSwgNjIyNjgsIDYyMjc1LCA2MjI4MiwgNjIyODksIDYyMjk2LCAKLSAgICA2MjMwMywgNjIzMTAsIDYyMzE3LCA2MjMyNCwgNjIzMjcsIDYyMzMwLCA2MjMzMywgNjIzMzgsIDYyMzQxLCA2MjM0NCwgCi0gICAgNjIzNDcsIDYyMzUwLCA2MjM1MywgNjIzNTYsIDYyMzYwLCA2MjM2NCwgNjIzNjgsIDYyMzcyLCA2MjM3NSwgNjIzNzksIAotICAgIDYyMzgzLCA2MjM4NywgNjIzOTEsIDYyMzk1LCA2MjM5OSwgNjI0MDMsIDYyNDA3LCA2MjQxMCwgNjI0MTMsIDYyNDE3LCAKLSAgICA2MjQyMSwgNjI0MjUsIDYyNDI5LCA2MjQzMiwgNjI0MzYsIDYyNDQwLCA2MjQ0NCwgNjI0NDgsIDYyNDUxLCA2MjQ1NSwgCi0gICAgNjI0NTksIDYyNDYzLCA2MjQ2NywgNjI0NzAsIDYyNDc0LCA2MjQ3OCwgNjI0ODEsIDYyNDg1LCA2MjQ4OSwgNjI0OTMsIAotICAgIDYyNDk3LCA2MjUwMSwgNjI1MDUsIDYyNTA5LCAwLCA2MjUxMywgNjI1MTYsIDYyNTE5LCA2MjUyMiwgNjI1MjUsIDYyNTI4LCAKLSAgICA2MjUzMSwgNjI1MzQsIDYyNTM3LCA2MjU0MCwgNjI1NDMsIDYyNTQ2LCA2MjU0OSwgNjI1NTIsIDYyNTU1LCA2MjU1OCwgCi0gICAgNjI1NjEsIDYyNTY0LCA2MjU2NywgNjI1NzAsIDYyNTczLCA2MjU3NiwgNjI1NzksIDYyNTgyLCA2MjU4NSwgNjI1ODgsIAotICAgIDYyNTkxLCA2MjU5NCwgNjI1OTcsIDYyNjAwLCA2MjYwMywgNjI2MDYsIDYyNjA5LCA2MjYxMiwgNjI2MTUsIDYyNjE4LCAKLSAgICA2MjYyMSwgNjI2MjQsIDYyNjI3LCA2MjYzMCwgNjI2MzMsIDYyNjM2LCA2MjYzOSwgNjI2NDIsIDYyNjQ1LCA2MjY0OCwgCi0gICAgNjI2NTEsIDYyNjU0LCA2MjY1NywgNjI2NjAsIDYyNjYzLCA2MjY2NiwgNjI2NjksIDYyNjcyLCA2MjY3NSwgNjI2NzgsIAotICAgIDYyNjgxLCA2MjY4NCwgNjI2ODcsIDYyNjkwLCA2MjY5MywgNjI2OTYsIDYyNjk5LCA2MjcwMiwgNjI3MDUsIDYyNzA4LCAKLSAgICA2MjcxMSwgNjI3MTQsIDYyNzE3LCA2MjcyMCwgNjI3MjMsIDYyNzI2LCA2MjcyOSwgNjI3MzIsIDYyNzM1LCA2MjczOCwgCi0gICAgNjI3NDEsIDYyNzQ0LCA2Mjc0NywgNjI3NTAsIDYyNzUzLCA2Mjc1NiwgNjI3NTksIDYyNzYyLCA2Mjc2NSwgNjI3NjgsIAotICAgIDYyNzcxLCA2Mjc3NCwgNjI3NzcsIDYyNzg2LCA2Mjc5NCwgNjI4MDIsIDYyODEwLCA2MjgxOCwgNjI4MjYsIDYyODM0LCAKLSAgICA2Mjg0MiwgNjI4NTAsIDYyODU4LCA2Mjg2NywgNjI4NzYsIDYyODg1LCA2Mjg5NCwgNjI5MDMsIDYyOTEyLCA2MjkyMSwgCi0gICAgNjI5MzAsIDYyOTM5LCA2Mjk0OCwgNjI5NTcsIDYyOTY2LCA2Mjk3NSwgNjI5ODQsIDYyOTkzLCA2Mjk5NiwgNjI5OTksIAotICAgIDYzMDAyLCA2MzAwNCwgNjMwMDcsIDYzMDEwLCA2MzAxMywgNjMwMTgsIDYzMDIzLCA2MzAyNiwgNjMwMzMsIDYzMDQwLCAKLSAgICA2MzA0NywgNjMwNTQsIDYzMDU3LCA2MzA2MiwgNjMwNjQsIDYzMDY4LCA2MzA3MCwgNjMwNzIsIDYzMDc1LCA2MzA3OCwgCi0gICAgNjMwODEsIDYzMDg0LCA2MzA4NywgNjMwOTAsIDYzMDkzLCA2MzA5OCwgNjMxMDMsIDYzMTA2LCA2MzEwOSwgNjMxMTIsIAotICAgIDYzMTE1LCA2MzExOCwgNjMxMjEsIDYzMTI0LCA2MzEyOCwgNjMxMzEsIDYzMTM0LCA2MzEzNywgNjMxNDAsIDYzMTQzLCAKLSAgICA2MzE0NywgNjMxNTAsIDYzMTUzLCA2MzE1NiwgNjMxNjEsIDYzMTY2LCA2MzE3MSwgNjMxNzYsIDYzMTgxLCA2MzE4NiwgCi0gICAgNjMxOTEsIDYzMTk2LCA2MzIwMiwgNjMyMTAsIDYzMjEyLCA2MzIxNSwgNjMyMTgsIDYzMjIxLCA2MzIyNCwgNjMyMzAsIAotICAgIDYzMjM4LCA2MzI0MSwgNjMyNDQsIDYzMjQ5LCA2MzI1MiwgNjMyNTUsIDYzMjU4LCA2MzI2MywgNjMyNjYsIDYzMjY5LCAKLSAgICA2MzI3NCwgNjMyNzcsIDYzMjgwLCA2MzI4NSwgNjMyODgsIDYzMjkxLCA2MzI5NiwgNjMzMDEsIDYzMzA2LCA2MzMwOSwgCi0gICAgNjMzMTIsIDYzMzE1LCA2MzMxOCwgNjMzMjQsIDYzMzI3LCA2MzMzMCwgNjMzMzMsIDYzMzM1LCA2MzMzOCwgNjMzNDEsIAotICAgIDYzMzQ0LCA2MzM0OSwgNjMzNTIsIDYzMzU1LCA2MzM1OCwgNjMzNjEsIDYzMzY0LCA2MzM2OSwgNjMzNzIsIDYzMzc1LCAKLSAgICA2MzM3OCwgNjMzODEsIDYzMzg0LCA2MzM4NywgNjMzOTAsIDYzMzkzLCA2MzM5NiwgNjM0MDEsIDYzNDA1LCA2MzQxMywgCi0gICAgNjM0MjEsIDYzNDI5LCA2MzQzNywgNjM0NDUsIDYzNDUzLCA2MzQ2MSwgNjM0NjksIDYzNDc3LCA2MzQ4NiwgNjM0OTUsIAotICAgIDYzNTA0LCA2MzUxMywgNjM1MjIsIDYzNTMxLCA2MzU0MCwgNjM1NDksIDYzNTU4LCA2MzU2NywgNjM1NzYsIDYzNTg1LCAKLSAgICA2MzU5NCwgNjM2MDMsIDYzNjEyLCA2MzYyMSwgNjM2MzAsIDYzNjM5LCA2MzY0OCwgNjM2NTcsIDYzNjY2LCA2MzY3NSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc2ODEsIDU3Njg1LCA1NzY4OSwgNTc2OTQsIDU3Njk5LCA1NzcwNCwgCisgICAgNTc3MDgsIDU3NzEyLCA1NzcxNiwgNTc3MjEsIDU3NzI2LCA1NzczMCwgNTc3MzQsIDU3NzM4LCA1Nzc0MiwgNTc3NDcsIAorICAgIDU3NzUyLCA1Nzc1NywgNTc3NjIsIDU3NzY2LCA1Nzc3MCwgNTc3NzUsIDU3NzgwLCA1Nzc4NSwgNTc3OTAsIDU3Nzk0LCAwLCAKKyAgICA1Nzc5OCwgNTc4MDIsIDU3ODA2LCA1NzgxMCwgNTc4MTQsIDU3ODE4LCA1NzgyMiwgNTc4MjcsIDU3ODMyLCA1NzgzNiwgCisgICAgNTc4NDEsIDU3ODQ2LCA1Nzg1NSwgNTc4NTksIDU3ODYzLCA1Nzg2NywgNTc4NzQsIDU3ODc4LCA1Nzg4MywgNTc4ODgsIAorICAgIDU3ODkyLCA1Nzg5NiwgNTc5MDIsIDU3OTA3LCA1NzkxMiwgNTc5MTcsIDU3OTIyLCA1NzkyNiwgNTc5MzAsIDU3OTM0LCAKKyAgICA1NzkzOCwgNTc5NDIsIDU3OTQ3LCA1Nzk1MiwgNTc5NTYsIDU3OTYwLCA1Nzk2NSwgNTc5NzAsIDU3OTc1LCA1Nzk3OSwgCisgICAgNTc5ODMsIDU3OTg4LCA1Nzk5MywgNTc5OTksIDU4MDA1LCA1ODAwOSwgNTgwMTUsIDU4MDIxLCA1ODAyNSwgNTgwMzEsIAorICAgIDU4MDM3LCA1ODA0MiwgNTgwNDcsIDU4MDUxLCA1ODA1NywgNTgwNjEsIDU4MDY1LCA1ODA3MSwgNTgwNzcsIDU4MDgyLCAKKyAgICA1ODA4NywgNTgwOTEsIDU4MDk1LCA1ODEwMywgNTgxMDksIDU4MTE1LCA1ODEyMSwgNTgxMjYsIDU4MTMxLCA1ODEzNiwgCisgICAgNTgxNDIsIDU4MTQ2LCA1ODE1MiwgNTgxNTYsIDU4MTYwLCA1ODE2NiwgNTgxNzIsIDU4MTc4LCA1ODE4NCwgNTgxOTAsIAorICAgIDU4MTk2LCA1ODIwMiwgNTgyMDgsIDU4MjE0LCA1ODIyMCwgNTgyMjYsIDU4MjMyLCA1ODIzNiwgNTgyNDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MjQ4LCA1ODI1MSwgNTgyNTUsIDU4MjU5LCA1ODI2MywgNTgyNjcsIAorICAgIDU4MjcwLCA1ODI3MywgNTgyNzcsIDU4MjgxLCA1ODI4NSwgNTgyODksIDU4MjkyLCA1ODI5NywgNTgzMDEsIDU4MzA1LCAKKyAgICA1ODMwOSwgNTgzMTQsIDU4MzE4LCA1ODMyMiwgNTgzMjYsIDU4MzMwLCA1ODMzNiwgNTgzNDIsIDU4MzQ2LCA1ODM1MCwgCisgICAgNTgzNTQsIDU4MzU4LCA1ODM2MiwgNTgzNjYsIDU4MzcwLCA1ODM3NCwgNTgzNzgsIDU4MzgyLCA1ODM4NiwgNTgzOTIsIAorICAgIDU4Mzk2LCA1ODQwMCwgNTg0MDQsIDU4NDA4LCA1ODQxMiwgNTg0MTYsIDU4NDIwLCA1ODQyNCwgNTg0MjgsIDU4NDMyLCAKKyAgICA1ODQzNiwgNTg0NDAsIDU4NDQ0LCA1ODQ0OCwgNTg0NTIsIDU4NDU2LCA1ODQ2MiwgNTg0NjgsIDU4NDczLCA1ODQ3OCwgCisgICAgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgNTg0OTQsIDU4NDk4LCA1ODUwMiwgNTg1MDYsIDU4NTEwLCA1ODUxNCwgNTg1MTgsIAorICAgIDU4NTIyLCA1ODUyNiwgNTg1MzAsIDU4NTM0LCA1ODUzOCwgNTg1NDIsIDU4NTQ2LCA1ODU1MCwgNTg1NTQsIDU4NTU4LCAKKyAgICA1ODU2MiwgNTg1NjYsIDU4NTcwLCA1ODU3NCwgNTg1ODAsIDU4NTg0LCA1ODU4OCwgNTg1OTIsIDU4NTk2LCA1ODYwMCwgCisgICAgNTg2MDQsIDU4NjA4LCA1ODYxMiwgNTg2MTcsIDU4NjI0LCA1ODYyOCwgNTg2MzIsIDU4NjM2LCA1ODY0MCwgNTg2NDQsIAorICAgIDU4NjQ4LCA1ODY1MiwgNTg2NTYsIDU4NjYwLCA1ODY2NCwgNTg2NjgsIDU4NjcyLCA1ODY3OSwgNTg2ODMsIDU4Njg5LCAKKyAgICA1ODY5MywgNTg2OTcsIDU4NzAxLCA1ODcwNSwgNTg3MDksIDU4NzEyLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCA1ODcyOCwgCisgICAgNTg3MzIsIDU4NzM2LCA1ODc0MCwgNTg3NDQsIDU4NzQ4LCA1ODc1MiwgNTg3NTYsIDU4NzYwLCA1ODc2NCwgNTg3NjgsIAorICAgIDU4NzcyLCA1ODc3NiwgNTg3ODAsIDU4Nzg0LCA1ODc4OCwgNTg3OTIsIDU4Nzk2LCA1ODgwMCwgNTg4MDQsIDU4ODA4LCAKKyAgICA1ODgxMiwgNTg4MTYsIDU4ODIwLCA1ODgyNCwgNTg4MjgsIDU4ODMyLCA1ODgzNiwgNTg4NDAsIDU4ODQ2LCA1ODg1MCwgCisgICAgNTg4NTQsIDU4ODU4LCA1ODg2MiwgNTg4NjYsIDU4ODcwLCA1ODg3NCwgNTg4NzgsIDU4ODgyLCA1ODg4NiwgNTg4OTAsIAorICAgIDU4ODk0LCA1ODg5OCwgNTg5MDIsIDU4OTA2LCA1ODkxMCwgNTg5MTQsIDU4OTE4LCA1ODkyMiwgNTg5MjYsIDU4OTMwLCAKKyAgICA1ODkzNCwgNTg5MzgsIDU4OTQyLCA1ODk0NiwgNTg5NTAsIDU4OTU0LCA1ODk2MiwgNTg5NjYsIDU4OTcwLCA1ODk3NCwgCisgICAgNTg5NzgsIDU4OTgyLCA1ODk4OCwgNTg5OTIsIDU4OTk2LCA1OTAwMCwgNTkwMDQsIDU5MDA4LCA1OTAxMiwgNTkwMTYsIAorICAgIDU5MDIwLCA1OTAyNCwgNTkwMjgsIDU5MDMyLCA1OTAzNiwgNTkwNDAsIDU5MDQ2LCA1OTA1MCwgNTkwNTQsIDU5MDU4LCAKKyAgICA1OTA2MiwgNTkwNjYsIDU5MDcwLCA1OTA3NCwgNTkwNzgsIDU5MDgyLCA1OTA4NiwgNTkwOTAsIDU5MDk0LCA1OTA5OCwgCisgICAgNTkxMDIsIDU5MTA2LCA1OTExMCwgNTkxMTQsIDU5MTE4LCA1OTEyMiwgNTkxMjYsIDU5MTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTEzNCwgNTkxNDMsIAorICAgIDU5MTUxLCA1OTE2MywgNTkxNzQsIDU5MTgyLCA1OTE5MSwgNTkyMDAsIDU5MjEwLCA1OTIyMiwgNTkyMzQsIDU5MjQ2LCAwLCAKKyAgICAwLCAwLCAwLCA1OTI1MiwgNTkyNTUsIDU5MjU4LCA1OTI2MywgNTkyNjYsIDU5MjczLCA1OTI3NywgNTkyODEsIDU5Mjg1LCAKKyAgICA1OTI4OSwgNTkyOTMsIDU5Mjk4LCA1OTMwMywgNTkzMDcsIDU5MzExLCA1OTMxNiwgNTkzMjEsIDU5MzI2LCA1OTMzMSwgCisgICAgNTkzMzQsIDU5MzM3LCA1OTM0MywgNTkzNDksIDU5MzU0LCA1OTM1OSwgNTkzNjYsIDU5MzczLCA1OTM3NywgNTkzODEsIAorICAgIDU5Mzg1LCA1OTM5MywgNTkzOTksIDU5NDA2LCA1OTQxMSwgNTk0MTYsIDU5NDIxLCA1OTQyNiwgNTk0MzEsIDU5NDM2LCAKKyAgICA1OTQ0MSwgNTk0NDYsIDU5NDUxLCA1OTQ1NiwgNTk0NjEsIDU5NDY2LCA1OTQ3MSwgNTk0NzYsIDU5NDgyLCA1OTQ4NywgCisgICAgNTk0OTEsIDU5NDk3LCA1OTUwOCwgNTk1MTgsIDU5NTMzLCA1OTU0MywgNTk1NDcsIDU5NTU3LCA1OTU2MywgNTk1NjksIAorICAgIDU5NTc1LCA1OTU4MCwgNTk1ODMsIDU5NTg4LCA1OTU5MiwgMCwgNTk1OTgsIDU5NjAyLCA1OTYwNSwgNTk2MDksIDU5NjEyLCAKKyAgICA1OTYxNiwgNTk2MTksIDU5NjIzLCA1OTYyNiwgNTk2MzAsIDU5NjMzLCA1OTYzNiwgNTk2NDAsIDU5NjQ0LCA1OTY0OCwgCisgICAgNTk2NTIsIDU5NjU2LCA1OTY2MCwgNTk2NjQsIDU5NjY4LCA1OTY3MiwgNTk2NzUsIDU5Njc5LCA1OTY4MywgNTk2ODcsIAorICAgIDU5NjkxLCA1OTY5NSwgNTk2OTksIDU5NzAzLCA1OTcwNywgNTk3MTEsIDU5NzE1LCA1OTcxOSwgNTk3MjMsIDU5NzI3LCAKKyAgICA1OTczMiwgNTk3MzYsIDU5NzQwLCA1OTc0NCwgNTk3NDgsIDU5NzUxLCA1OTc1NSwgNTk3NTgsIDU5NzYyLCA1OTc2NiwgCisgICAgNTk3NzAsIDU5Nzc0LCA1OTc3NywgNTk3ODEsIDU5Nzg0LCA1OTc4OCwgNTk3OTIsIDU5Nzk2LCA1OTgwMCwgNTk4MDQsIAorICAgIDU5ODA4LCA1OTgxMiwgNTk4MTYsIDU5ODIwLCA1OTgyNCwgNTk4MjgsIDU5ODMyLCA1OTgzNSwgNTk4MzksIDU5ODQzLCAKKyAgICA1OTg0NywgNTk4NTEsIDU5ODU1LCA1OTg1OCwgNTk4NjMsIDU5ODY3LCA1OTg3MiwgNTk4NzYsIDU5ODc5LCA1OTg4MywgCisgICAgNTk4ODcsIDU5ODkxLCA1OTg5NSwgNTk5MDAsIDU5OTA0LCA1OTkwOCwgNTk5MTIsIDU5OTE2LCA1OTkyMCwgNTk5MjQsIAorICAgIDU5OTI4LCAwLCAwLCA1OTkzMywgNTk5NDEsIDU5OTQ5LCA1OTk1NiwgNTk5NjMsIDU5OTY3LCA1OTk3MywgNTk5NzgsIAorICAgIDU5OTgzLCA1OTk4NywgNTk5OTAsIDU5OTk0LCA1OTk5NywgNjAwMDEsIDYwMDA0LCA2MDAwOCwgNjAwMTEsIDYwMDE1LCAKKyAgICA2MDAxOCwgNjAwMjEsIDYwMDI1LCA2MDAyOSwgNjAwMzMsIDYwMDM3LCA2MDA0MSwgNjAwNDUsIDYwMDQ5LCA2MDA1MywgCisgICAgNjAwNTcsIDYwMDYwLCA2MDA2NCwgNjAwNjgsIDYwMDcyLCA2MDA3NiwgNjAwODAsIDYwMDg0LCA2MDA4OCwgNjAwOTIsIAorICAgIDYwMDk2LCA2MDEwMCwgNjAxMDQsIDYwMTA4LCA2MDExMiwgNjAxMTcsIDYwMTIxLCA2MDEyNSwgNjAxMjksIDYwMTMzLCAKKyAgICA2MDEzNiwgNjAxNDAsIDYwMTQzLCA2MDE0NywgNjAxNTEsIDYwMTU1LCA2MDE1OSwgNjAxNjIsIDYwMTY2LCA2MDE2OSwgCisgICAgNjAxNzMsIDYwMTc3LCA2MDE4MSwgNjAxODUsIDYwMTg5LCA2MDE5MywgNjAxOTcsIDYwMjAxLCA2MDIwNSwgNjAyMDksIAorICAgIDYwMjEzLCA2MDIxNywgNjAyMjAsIDYwMjI0LCA2MDIyOCwgNjAyMzIsIDYwMjM2LCA2MDI0MCwgNjAyNDMsIDYwMjQ4LCAKKyAgICA2MDI1MiwgNjAyNTcsIDYwMjYxLCA2MDI2NCwgNjAyNjgsIDYwMjcyLCA2MDI3NiwgNjAyODAsIDYwMjg1LCA2MDI4OSwgCisgICAgNjAyOTMsIDYwMjk3LCA2MDMwMSwgNjAzMDUsIDYwMzA5LCA2MDMxMywgNjAzMTgsIDYwMzIyLCA2MDMyNiwgNjAzMzAsIAorICAgIDYwMzM0LCA2MDMzOSwgNjAzNDYsIDYwMzUwLCA2MDM1NiwgMCwgMCwgMCwgMCwgMCwgNjAzNjEsIDYwMzY2LCA2MDM3MSwgCisgICAgNjAzNzUsIDYwMzgwLCA2MDM4NSwgNjAzOTAsIDYwMzk1LCA2MDM5OSwgNjA0MDQsIDYwNDA5LCA2MDQxNCwgNjA0MTksIAorICAgIDYwNDI0LCA2MDQyOSwgNjA0MzQsIDYwNDM5LCA2MDQ0NCwgNjA0NDgsIDYwNDUzLCA2MDQ1OCwgNjA0NjMsIDYwNDY3LCAKKyAgICA2MDQ3MSwgNjA0NzUsIDYwNDgwLCA2MDQ4NSwgNjA0OTAsIDYwNDk1LCA2MDUwMCwgNjA1MDUsIDYwNTEwLCA2MDUxNSwgCisgICAgNjA1MjAsIDYwNTI1LCA2MDUyOSwgNjA1MzMsIDYwNTM4LCA2MDU0MywgNjA1NDgsIDYwNTUzLCAwLCAwLCAwLCA2MDU1OCwgCisgICAgNjA1NjIsIDYwNTY2LCA2MDU3MCwgNjA1NzQsIDYwNTc4LCA2MDU4MiwgNjA1ODYsIDYwNTkwLCA2MDU5NCwgNjA1OTgsIAorICAgIDYwNjAyLCA2MDYwNiwgNjA2MTAsIDYwNjE0LCA2MDYxOCwgNjA2MjIsIDYwNjI2LCA2MDYzMCwgNjA2MzQsIDYwNjM4LCAKKyAgICA2MDY0MiwgNjA2NDYsIDYwNjUwLCA2MDY1NCwgNjA2NTgsIDYwNjYyLCA2MDY2NiwgNjA2NzAsIDYwNjc0LCA2MDY3OCwgCisgICAgNjA2ODEsIDYwNjg1LCA2MDY4OCwgNjA2OTIsIDYwNjk2LCA2MDY5OSwgNjA3MDMsIDYwNzA3LCA2MDcxMCwgNjA3MTQsIAorICAgIDYwNzE4LCA2MDcyMiwgNjA3MjYsIDYwNzI5LCA2MDczMywgNjA3MzcsIDYwNzQxLCA2MDc0NSwgNjA3NDksIDYwNzUzLCAKKyAgICA2MDc1NiwgNjA3NTksIDYwNzYzLCA2MDc2NywgNjA3NzEsIDYwNzc1LCA2MDc3OSwgNjA3ODMsIDYwNzg3LCA2MDc5MSwgCisgICAgNjA3OTUsIDYwNzk5LCA2MDgwMywgNjA4MDcsIDYwODExLCA2MDgxNSwgNjA4MTksIDYwODIzLCA2MDgyNywgNjA4MzEsIAorICAgIDYwODM1LCA2MDgzOSwgNjA4NDMsIDYwODQ3LCA2MDg1MSwgNjA4NTUsIDYwODU5LCA2MDg2MywgNjA4NjcsIDYwODcxLCAKKyAgICA2MDg3NSwgNjA4NzksIDYwODgzLCA2MDg4NywgNjA4OTEsIDYwODk1LCA2MDg5OSwgNjA5MDMsIDYwOTA3LCA2MDkxMSwgCisgICAgNjA5MTUsIDYwOTE5LCA2MDkyMywgMCwgNjA5MjcsIDYwOTMzLCA2MDkzOSwgNjA5NDQsIDYwOTQ5LCA2MDk1NCwgNjA5NjAsIAorICAgIDYwOTY2LCA2MDk3MiwgNjA5NzgsIDYwOTg0LCA2MDk5MCwgNjA5OTYsIDYxMDAyLCA2MTAwOCwgNjEwMTQsIDYxMDIwLCAKKyAgICA2MTAyNSwgNjEwMzAsIDYxMDM1LCA2MTA0MCwgNjEwNDUsIDYxMDUwLCA2MTA1NSwgNjEwNjAsIDYxMDY1LCA2MTA3MCwgCisgICAgNjEwNzUsIDYxMDgwLCA2MTA4NSwgNjEwOTAsIDYxMDk1LCA2MTEwMCwgNjExMDUsIDYxMTEwLCA2MTExNSwgNjExMjAsIAorICAgIDYxMTI2LCA2MTEzMiwgNjExMzgsIDYxMTQ0LCA2MTE0OSwgNjExNTQsIDAsIDAsIDAsIDAsIDAsIDYxMTU5LCA2MTE2NCwgCisgICAgNjExNjksIDYxMTc0LCA2MTE3OSwgNjExODQsIDYxMTg5LCA2MTE5NCwgNjExOTksIDYxMjA0LCA2MTIwOSwgNjEyMTQsIAorICAgIDYxMjE5LCA2MTIyNCwgNjEyMjksIDYxMjM0LCA2MTIzOSwgNjEyNDQsIDYxMjQ5LCA2MTI1NCwgNjEyNTksIDYxMjY0LCAKKyAgICA2MTI2OSwgNjEyNzQsIDYxMjc5LCA2MTI4NCwgNjEyODksIDYxMjk0LCA2MTI5OSwgNjEzMDQsIDYxMzA5LCA2MTMxNCwgCisgICAgNjEzMTksIDYxMzI0LCA2MTMyOSwgNjEzMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMzM5LCAKKyAgICA2MTM0NCwgNjEzNDksIDYxMzU0LCA2MTM1OCwgNjEzNjMsIDYxMzY3LCA2MTM3MiwgNjEzNzcsIDYxMzgyLCA2MTM4NywgCisgICAgNjEzOTIsIDYxMzk2LCA2MTQwMSwgNjE0MDYsIDYxNDExLCA2MTQxNiwgNjE0MjAsIDYxNDI0LCA2MTQyOCwgNjE0MzIsIAorICAgIDYxNDM2LCA2MTQ0MCwgNjE0NDQsIDYxNDQ4LCA2MTQ1MiwgNjE0NTYsIDYxNDYwLCA2MTQ2NCwgNjE0NjgsIDYxNDcyLCAKKyAgICA2MTQ3NywgNjE0ODIsIDYxNDg3LCA2MTQ5MiwgNjE0OTcsIDYxNTAyLCA2MTUwNywgNjE1MTIsIDYxNTE3LCA2MTUyMiwgCisgICAgNjE1MjcsIDYxNTMyLCA2MTUzNywgNjE1NDIsIDYxNTQ3LCA2MTU1MywgMCwgNjE1NjAsIDYxNTYzLCA2MTU2NiwgNjE1NjksIAorICAgIDYxNTcyLCA2MTU3NSwgNjE1NzgsIDYxNTgxLCA2MTU4NCwgNjE1ODcsIDYxNTkxLCA2MTU5NSwgNjE1OTksIDYxNjAzLCAKKyAgICA2MTYwNywgNjE2MTEsIDYxNjE1LCA2MTYxOSwgNjE2MjMsIDYxNjI3LCA2MTYzMSwgNjE2MzUsIDYxNjM5LCA2MTY0MywgCisgICAgNjE2NDcsIDYxNjUxLCA2MTY1NSwgNjE2NTksIDYxNjYzLCA2MTY2NywgNjE2NzEsIDYxNjc1LCA2MTY3OSwgNjE2ODMsIAorICAgIDYxNjg3LCA2MTY5MSwgNjE2OTUsIDYxNjk5LCA2MTcwMywgNjE3MDcsIDYxNzExLCA2MTcyMCwgNjE3MjksIDYxNzM4LCAKKyAgICA2MTc0NywgNjE3NTYsIDYxNzY1LCA2MTc3NCwgNjE3ODMsIDYxNzg2LCA2MTc5MSwgNjE3OTYsIDYxODAxLCA2MTgwNiwgCisgICAgNjE4MTEsIDYxODE2LCA2MTgyMSwgNjE4MjYsIDYxODMxLCA2MTgzNSwgNjE4NDAsIDYxODQ1LCA2MTg1MCwgNjE4NTUsIAorICAgIDYxODYwLCA2MTg2NCwgNjE4NjgsIDYxODcyLCA2MTg3NiwgNjE4ODAsIDYxODg0LCA2MTg4OCwgNjE4OTIsIDYxODk2LCAKKyAgICA2MTkwMCwgNjE5MDQsIDYxOTA4LCA2MTkxMiwgNjE5MTYsIDYxOTIxLCA2MTkyNiwgNjE5MzEsIDYxOTM2LCA2MTk0MSwgCisgICAgNjE5NDYsIDYxOTUxLCA2MTk1NiwgNjE5NjEsIDYxOTY2LCA2MTk3MSwgNjE5NzYsIDYxOTgxLCA2MTk4NiwgNjE5OTIsIAorICAgIDYxOTk4LCA2MjAwMywgNjIwMDgsIDYyMDExLCA2MjAxNCwgNjIwMTcsIDYyMDIwLCA2MjAyMywgNjIwMjYsIDYyMDI5LCAKKyAgICA2MjAzMiwgNjIwMzUsIDYyMDM5LCA2MjA0MywgNjIwNDcsIDYyMDUxLCA2MjA1NSwgNjIwNTksIDYyMDYzLCA2MjA2NywgCisgICAgNjIwNzEsIDYyMDc1LCA2MjA3OSwgNjIwODMsIDYyMDg3LCA2MjA5MSwgNjIwOTUsIDYyMDk5LCA2MjEwMywgNjIxMDcsIAorICAgIDYyMTExLCA2MjExNSwgNjIxMTksIDYyMTIzLCA2MjEyNywgNjIxMzEsIDYyMTM1LCA2MjEzOSwgNjIxNDMsIDYyMTQ3LCAKKyAgICA2MjE1MSwgNjIxNTUsIDYyMTU5LCA2MjE2MywgNjIxNjcsIDYyMTcxLCA2MjE3NSwgNjIxNzksIDYyMTgzLCA2MjE4NywgCisgICAgNjIxOTEsIDYyMTk1LCA2MjIwMCwgNjIyMDUsIDYyMjEwLCA2MjIxNSwgNjIyMTksIDYyMjI0LCA2MjIyOSwgNjIyMzQsIAorICAgIDYyMjM5LCA2MjI0NCwgNjIyNDksIDYyMjU0LCA2MjI1OSwgNjIyNjQsIDYyMjY4LCA2MjI3NSwgNjIyODIsIDYyMjg5LCAKKyAgICA2MjI5NiwgNjIzMDMsIDYyMzEwLCA2MjMxNywgNjIzMjQsIDYyMzMxLCA2MjMzOCwgNjIzNDUsIDYyMzUyLCA2MjM1NSwgCisgICAgNjIzNTgsIDYyMzYxLCA2MjM2NiwgNjIzNjksIDYyMzcyLCA2MjM3NSwgNjIzNzgsIDYyMzgxLCA2MjM4NCwgNjIzODgsIAorICAgIDYyMzkyLCA2MjM5NiwgNjI0MDAsIDYyNDAzLCA2MjQwNywgNjI0MTEsIDYyNDE1LCA2MjQxOSwgNjI0MjMsIDYyNDI3LCAKKyAgICA2MjQzMSwgNjI0MzUsIDYyNDM4LCA2MjQ0MSwgNjI0NDUsIDYyNDQ5LCA2MjQ1MywgNjI0NTcsIDYyNDYwLCA2MjQ2NCwgCisgICAgNjI0NjgsIDYyNDcyLCA2MjQ3NiwgNjI0NzksIDYyNDgzLCA2MjQ4NywgNjI0OTEsIDYyNDk1LCA2MjQ5OCwgNjI1MDIsIAorICAgIDYyNTA2LCA2MjUwOSwgNjI1MTMsIDYyNTE3LCA2MjUyMSwgNjI1MjUsIDYyNTI5LCA2MjUzMywgNjI1MzcsIDAsIDYyNTQxLCAKKyAgICA2MjU0NCwgNjI1NDcsIDYyNTUwLCA2MjU1MywgNjI1NTYsIDYyNTU5LCA2MjU2MiwgNjI1NjUsIDYyNTY4LCA2MjU3MSwgCisgICAgNjI1NzQsIDYyNTc3LCA2MjU4MCwgNjI1ODMsIDYyNTg2LCA2MjU4OSwgNjI1OTIsIDYyNTk1LCA2MjU5OCwgNjI2MDEsIAorICAgIDYyNjA0LCA2MjYwNywgNjI2MTAsIDYyNjEzLCA2MjYxNiwgNjI2MTksIDYyNjIyLCA2MjYyNSwgNjI2MjgsIDYyNjMxLCAKKyAgICA2MjYzNCwgNjI2MzcsIDYyNjQwLCA2MjY0MywgNjI2NDYsIDYyNjQ5LCA2MjY1MiwgNjI2NTUsIDYyNjU4LCA2MjY2MSwgCisgICAgNjI2NjQsIDYyNjY3LCA2MjY3MCwgNjI2NzMsIDYyNjc2LCA2MjY3OSwgNjI2ODIsIDYyNjg1LCA2MjY4OCwgNjI2OTEsIAorICAgIDYyNjk0LCA2MjY5NywgNjI3MDAsIDYyNzAzLCA2MjcwNiwgNjI3MDksIDYyNzEyLCA2MjcxNSwgNjI3MTgsIDYyNzIxLCAKKyAgICA2MjcyNCwgNjI3MjcsIDYyNzMwLCA2MjczMywgNjI3MzYsIDYyNzM5LCA2Mjc0MiwgNjI3NDUsIDYyNzQ4LCA2Mjc1MSwgCisgICAgNjI3NTQsIDYyNzU3LCA2Mjc2MCwgNjI3NjMsIDYyNzY2LCA2Mjc2OSwgNjI3NzIsIDYyNzc1LCA2Mjc3OCwgNjI3ODEsIAorICAgIDYyNzg0LCA2Mjc4NywgNjI3OTAsIDYyNzkzLCA2Mjc5NiwgNjI3OTksIDYyODAyLCA2MjgwNSwgNjI4MTQsIDYyODIyLCAKKyAgICA2MjgzMCwgNjI4MzgsIDYyODQ2LCA2Mjg1NCwgNjI4NjIsIDYyODcwLCA2Mjg3OCwgNjI4ODYsIDYyODk1LCA2MjkwNCwgCisgICAgNjI5MTMsIDYyOTIyLCA2MjkzMSwgNjI5NDAsIDYyOTQ5LCA2Mjk1OCwgNjI5NjcsIDYyOTc2LCA2Mjk4NSwgNjI5OTQsIAorICAgIDYzMDAzLCA2MzAxMiwgNjMwMjEsIDYzMDI0LCA2MzAyNywgNjMwMzAsIDYzMDMyLCA2MzAzNSwgNjMwMzgsIDYzMDQxLCAKKyAgICA2MzA0NiwgNjMwNTEsIDYzMDU0LCA2MzA2MSwgNjMwNjgsIDYzMDc1LCA2MzA4MiwgNjMwODUsIDYzMDkwLCA2MzA5MiwgCisgICAgNjMwOTYsIDYzMDk4LCA2MzEwMCwgNjMxMDMsIDYzMTA2LCA2MzEwOSwgNjMxMTIsIDYzMTE1LCA2MzExOCwgNjMxMjEsIAorICAgIDYzMTI2LCA2MzEzMSwgNjMxMzQsIDYzMTM3LCA2MzE0MCwgNjMxNDMsIDYzMTQ2LCA2MzE0OSwgNjMxNTIsIDYzMTU2LCAKKyAgICA2MzE1OSwgNjMxNjIsIDYzMTY1LCA2MzE2OCwgNjMxNzEsIDYzMTc1LCA2MzE3OCwgNjMxODEsIDYzMTg0LCA2MzE4OSwgCisgICAgNjMxOTQsIDYzMTk5LCA2MzIwNCwgNjMyMDksIDYzMjE0LCA2MzIxOSwgNjMyMjQsIDYzMjMwLCA2MzIzOCwgNjMyNDAsIAorICAgIDYzMjQzLCA2MzI0NiwgNjMyNDksIDYzMjUyLCA2MzI1OCwgNjMyNjYsIDYzMjY5LCA2MzI3MiwgNjMyNzcsIDYzMjgwLCAKKyAgICA2MzI4MywgNjMyODYsIDYzMjkxLCA2MzI5NCwgNjMyOTcsIDYzMzAyLCA2MzMwNSwgNjMzMDgsIDYzMzEzLCA2MzMxNiwgCisgICAgNjMzMTksIDYzMzI0LCA2MzMyOSwgNjMzMzQsIDYzMzM3LCA2MzM0MCwgNjMzNDMsIDYzMzQ2LCA2MzM1MiwgNjMzNTUsIAorICAgIDYzMzU4LCA2MzM2MSwgNjMzNjMsIDYzMzY2LCA2MzM2OSwgNjMzNzIsIDYzMzc3LCA2MzM4MCwgNjMzODMsIDYzMzg2LCAKKyAgICA2MzM4OSwgNjMzOTIsIDYzMzk3LCA2MzQwMCwgNjM0MDMsIDYzNDA2LCA2MzQwOSwgNjM0MTIsIDYzNDE1LCA2MzQxOCwgCisgICAgNjM0MjEsIDYzNDI0LCA2MzQyOSwgNjM0MzMsIDYzNDQxLCA2MzQ0OSwgNjM0NTcsIDYzNDY1LCA2MzQ3MywgNjM0ODEsIAorICAgIDYzNDg5LCA2MzQ5NywgNjM1MDUsIDYzNTE0LCA2MzUyMywgNjM1MzIsIDYzNTQxLCA2MzU1MCwgNjM1NTksIDYzNTY4LCAKKyAgICA2MzU3NywgNjM1ODYsIDYzNTk1LCA2MzYwNCwgNjM2MTMsIDYzNjIyLCA2MzYzMSwgNjM2NDAsIDYzNjQ5LCA2MzY1OCwgCisgICAgNjM2NjcsIDYzNjc2LCA2MzY4NSwgNjM2OTQsIDYzNzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzY3OCwgNjM2ODcsIDYzNjk2LCA2MzcwNywgCi0gICAgNjM3MTQsIDYzNzE5LCA2MzcyNCwgNjM3MzEsIDYzNzM4LCA2Mzc0NCwgNjM3NDksIDYzNzU0LCA2Mzc1OSwgNjM3NjQsIAotICAgIDYzNzcxLCA2Mzc3NiwgNjM3ODEsIDYzNzg2LCA2Mzc5NywgNjM4MDIsIDYzODA3LCA2MzgxNCwgNjM4MTksIDYzODI2LCAKLSAgICA2MzgzMSwgNjM4MzYsIDYzODQzLCA2Mzg1MCwgNjM4NTcsIDYzODY2LCA2Mzg3NSwgNjM4ODAsIDYzODg1LCA2Mzg5MCwgCi0gICAgNjM4OTcsIDYzOTAyLCA2MzkxMiwgNjM5MTksIDYzOTI0LCA2MzkyOSwgNjM5MzQsIDYzOTM5LCA2Mzk0NCwgNjM5NDksIAotICAgIDYzOTU4LCA2Mzk2NSwgNjM5NzIsIDYzOTc3LCA2Mzk4NCwgNjM5ODksIDYzOTk2LCA2NDAwNSwgNjQwMTYsIDY0MDIxLCAKLSAgICA2NDAzMCwgNjQwMzUsIDY0MDQyLCA2NDA1MSwgNjQwNjAsIDY0MDY1LCA2NDA3MCwgNjQwNzcsIDY0MDgzLCA2NDA5MCwgCi0gICAgNjQwOTcsIDY0MTAxLCA2NDEwNSwgNjQxMDgsIDY0MTEyLCA2NDExNiwgNjQxMjAsIDY0MTI0LCA2NDEyOCwgNjQxMzIsIAotICAgIDY0MTM2LCA2NDEzOSwgNjQxNDMsIDY0MTQ3LCA2NDE1MSwgNjQxNTUsIDY0MTU5LCA2NDE2MywgNjQxNjYsIDY0MTcwLCAKLSAgICA2NDE3NCwgNjQxNzcsIDY0MTgxLCA2NDE4NSwgNjQxODksIDY0MTkzLCA2NDE5NywgNjQyMDEsIDY0MjA1LCA2NDIwOSwgCi0gICAgNjQyMTMsIDY0MjE3LCA2NDIyMSwgNjQyMjUsIDY0MjI5LCA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDksIAotICAgIDY0MjUzLCA2NDI1NywgNjQyNjEsIDY0MjY1LCA2NDI2OSwgNjQyNzMsIDY0Mjc3LCA2NDI4MSwgNjQyODUsIDY0Mjg5LCAKLSAgICA2NDI5MywgNjQyOTcsIDY0MzAxLCA2NDMwNSwgNjQzMDksIDY0MzEzLCA2NDMxNywgNjQzMjEsIDY0MzI1LCA2NDMyOSwgCi0gICAgNjQzMzMsIDY0MzM3LCA2NDM0MSwgNjQzNDUsIDY0MzQ5LCA2NDM1MywgNjQzNTYsIDY0MzYwLCA2NDM2NCwgNjQzNjgsIAotICAgIDY0MzcyLCA2NDM3NiwgNjQzODAsIDY0Mzg0LCA2NDM4OCwgNjQzOTIsIDY0Mzk2LCA2NDQwMCwgNjQ0MDQsIDY0NDA4LCAKLSAgICA2NDQxMiwgNjQ0MTYsIDY0NDIwLCA2NDQyNCwgNjQ0MjgsIDY0NDMyLCA2NDQzNiwgNjQ0NDAsIDY0NDQ0LCA2NDQ0OCwgCi0gICAgNjQ0NTIsIDY0NDU2LCA2NDQ2MCwgNjQ0NjQsIDY0NDY4LCA2NDQ3MiwgNjQ0NzYsIDY0NDgwLCA2NDQ4NCwgNjQ0ODgsIAotICAgIDY0NDkyLCA2NDQ5NiwgNjQ1MDAsIDY0NTA0LCA2NDUwOCwgNjQ1MTIsIDY0NTE2LCA2NDUyMCwgNjQ1MjQsIDY0NTI4LCAKLSAgICA2NDUzMiwgNjQ1MzYsIDY0NTQwLCA2NDU0NCwgNjQ1NDgsIDY0NTUyLCA2NDU1NiwgNjQ1NjAsIDY0NTY0LCA2NDU2OCwgCi0gICAgNjQ1NzIsIDY0NTc2LCA2NDU4MCwgNjQ1ODQsIDY0NTg4LCA2NDU5MiwgNjQ1OTYsIDY0NjAwLCA2NDYwNCwgNjQ2MDgsIAotICAgIDY0NjEyLCA2NDYxNiwgNjQ2MjAsIDY0NjI0LCA2NDYyOCwgNjQ2MzIsIDY0NjM2LCA2NDY0MCwgNjQ2NDQsIDY0NjQ4LCAKLSAgICA2NDY1MiwgNjQ2NTYsIDY0NjYwLCA2NDY2NCwgNjQ2NjgsIDY0NjcyLCA2NDY3NiwgNjQ2ODAsIDY0Njg0LCA2NDY4OCwgCi0gICAgNjQ2OTIsIDY0Njk2LCA2NDcwMCwgNjQ3MDQsIDY0NzA4LCA2NDcxMiwgNjQ3MTYsIDY0NzIwLCA2NDcyNCwgNjQ3MjgsIAotICAgIDY0NzMyLCA2NDczNiwgNjQ3NDAsIDY0NzQ0LCA2NDc0OCwgNjQ3NTIsIDY0NzU2LCA2NDc2MCwgNjQ3NjQsIDY0NzY4LCAKLSAgICA2NDc3MiwgNjQ3NzYsIDY0NzgwLCA2NDc4NCwgNjQ3ODgsIDY0NzkyLCA2NDc5NiwgNjQ4MDAsIDY0ODA0LCA2NDgwOCwgCi0gICAgNjQ4MTIsIDY0ODE2LCA2NDgyMCwgNjQ4MjQsIDY0ODI3LCA2NDgzMSwgNjQ4MzUsIDY0ODM5LCA2NDg0MywgNjQ4NDcsIAotICAgIDY0ODUxLCA2NDg1NSwgNjQ4NTksIDY0ODYzLCA2NDg2NywgNjQ4NzEsIDY0ODc1LCA2NDg3OSwgNjQ4ODMsIDY0ODg3LCAKLSAgICA2NDg5MSwgNjQ4OTUsIDY0ODk5LCA2NDkwMywgNjQ5MDcsIDY0OTExLCA2NDkxNSwgNjQ5MTksIDY0OTIzLCA2NDkyNywgCi0gICAgNjQ5MzEsIDY0OTM1LCA2NDkzOSwgNjQ5NDMsIDY0OTQ3LCA2NDk1MSwgNjQ5NTUsIDY0OTU5LCA2NDk2MywgNjQ5NjcsIAotICAgIDY0OTcxLCA2NDk3NSwgNjQ5NzksIDY0OTgzLCA2NDk4NywgNjQ5OTEsIDY0OTk1LCA2NDk5OSwgNjUwMDMsIDY1MDA3LCAKLSAgICA2NTAxMSwgNjUwMTUsIDY1MDE5LCA2NTAyMywgNjUwMjcsIDY1MDMxLCA2NTAzNSwgNjUwMzksIDY1MDQzLCA2NTA0NywgCi0gICAgNjUwNTEsIDY1MDU1LCA2NTA1OSwgNjUwNjMsIDY1MDY3LCA2NTA3MSwgNjUwNzUsIDY1MDc5LCA2NTA4MywgNjUwODcsIAotICAgIDY1MDkxLCA2NTA5NSwgNjUwOTksIDY1MTAzLCA2NTEwNywgNjUxMTEsIDY1MTE1LCA2NTExOSwgNjUxMjMsIDY1MTI3LCAKLSAgICA2NTEzMSwgNjUxMzUsIDY1MTM5LCA2NTE0MywgNjUxNDcsIDY1MTUxLCA2NTE1NSwgNjUxNTksIDY1MTYzLCA2NTE2NywgCi0gICAgNjUxNzEsIDY1MTc1LCA2NTE3OSwgNjUxODMsIDY1MTg3LCA2NTE5MSwgNjUxOTUsIDY1MTk5LCA2NTIwMywgNjUyMDcsIAotICAgIDY1MjExLCA2NTIxNSwgNjUyMTksIDY1MjIzLCA2NTIyNywgNjUyMzEsIDY1MjM1LCA2NTIzOSwgNjUyNDMsIDY1MjQ3LCAKLSAgICA2NTI1MSwgNjUyNTUsIDY1MjU5LCA2NTI2MywgNjUyNjcsIDY1MjcxLCA2NTI3NSwgNjUyNzksIDY1MjgzLCA2NTI4NywgCi0gICAgNjUyOTAsIDY1Mjk0LCA2NTI5OCwgNjUzMDIsIDY1MzA2LCA2NTMxMCwgNjUzMTQsIDY1MzE4LCA2NTMyMiwgNjUzMjYsIAotICAgIDY1MzMwLCA2NTMzNCwgNjUzMzgsIDY1MzQyLCA2NTM0NiwgNjUzNTAsIDY1MzU0LCA2NTM1OCwgNjUzNjIsIDY1MzY2LCAKLSAgICA2NTM3MCwgNjUzNzQsIDY1Mzc4LCA2NTM4MiwgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTgsIDY1NDAyLCA2NTQwNiwgCi0gICAgNjU0MTAsIDY1NDE0LCA2NTQxOCwgNjU0MjIsIDY1NDI2LCA2NTQzMCwgNjU0MzQsIDY1NDM4LCA2NTQ0MiwgNjU0NDYsIAotICAgIDY1NDUwLCA2NTQ1NCwgNjU0NTgsIDY1NDYyLCA2NTQ2NiwgNjU0NzAsIDY1NDc0LCA2NTQ3OCwgNjU0ODIsIDY1NDg2LCAKLSAgICA2NTQ5MCwgNjU0OTQsIDY1NDk4LCA2NTUwMiwgNjU1MDYsIDY1NTEwLCA2NTUxNCwgNjU1MTgsIDY1NTIyLCA2NTUyNiwgCi0gICAgNjU1MzAsIDY1NTM0LCA2NTUzOCwgNjU1NDIsIDY1NTQ2LCA2NTU1MCwgNjU1NTQsIDY1NTU4LCA2NTU2MiwgNjU1NjYsIAotICAgIDY1NTcwLCA2NTU3NCwgNjU1NzgsIDY1NTgyLCA2NTU4NiwgNjU1OTAsIDY1NTk0LCA2NTU5OCwgNjU2MDIsIDY1NjA2LCAKLSAgICA2NTYxMCwgNjU2MTQsIDY1NjE4LCA2NTYyMiwgNjU2MjYsIDY1NjMwLCA2NTYzNCwgNjU2MzgsIDY1NjQyLCA2NTY0NiwgCi0gICAgNjU2NDksIDY1NjUzLCA2NTY1NywgNjU2NjEsIDY1NjY1LCA2NTY2OSwgNjU2NzMsIDY1Njc3LCA2NTY4MSwgNjU2ODUsIAotICAgIDY1Njg5LCA2NTY5MywgNjU2OTcsIDY1NzAxLCA2NTcwNSwgNjU3MDksIDY1NzEzLCA2NTcxNywgNjU3MjEsIDY1NzI1LCAKLSAgICA2NTcyOSwgNjU3MzMsIDY1NzM3LCA2NTc0MSwgNjU3NDUsIDY1NzQ5LCA2NTc1MywgNjU3NTcsIDY1NzYxLCA2NTc2NSwgCi0gICAgNjU3NjksIDY1NzczLCA2NTc3NywgNjU3ODEsIDY1Nzg1LCA2NTc4OSwgNjU3OTMsIDY1Nzk3LCA2NTgwMSwgNjU4MDUsIAotICAgIDY1ODA5LCA2NTgxMywgNjU4MTcsIDY1ODIxLCA2NTgyNSwgNjU4MjksIDY1ODMzLCA2NTgzNywgNjU4NDEsIDY1ODQ1LCAKLSAgICA2NTg0OSwgNjU4NTMsIDY1ODU3LCA2NTg2MSwgNjU4NjUsIDY1ODY5LCA2NTg3MywgNjU4NzcsIDY1ODgxLCA2NTg4NSwgCi0gICAgNjU4ODksIDY1ODkzLCA2NTg5NywgNjU5MDEsIDY1OTA1LCA2NTkwOSwgNjU5MTMsIDY1OTE3LCA2NTkyMSwgNjU5MjUsIAotICAgIDY1OTI5LCA2NTkzMywgNjU5MzcsIDY1OTQxLCA2NTk0NSwgNjU5NDksIDY1OTUzLCA2NTk1NywgNjU5NjEsIDY1OTY1LCAKLSAgICA2NTk2OSwgNjU5NzMsIDY1OTc3LCA2NTk4MSwgNjU5ODUsIDY1OTg5LCA2NTk5MywgNjU5OTcsIDY2MDAxLCA2NjAwNSwgCi0gICAgNjYwMDksIDY2MDEzLCA2NjAxNywgNjYwMjEsIDY2MDI1LCA2NjAyOSwgNjYwMzMsIDY2MDM3LCA2NjA0MSwgNjYwNDUsIAotICAgIDY2MDQ5LCA2NjA1MywgNjYwNTcsIDY2MDYxLCA2NjA2NSwgNjYwNjksIDY2MDczLCA2NjA3NywgNjYwODEsIDY2MDg1LCAKLSAgICA2NjA4OSwgNjYwOTMsIDY2MDk3LCA2NjEwMSwgNjYxMDUsIDY2MTA5LCA2NjExMywgNjYxMTcsIDY2MTIxLCA2NjEyNSwgCi0gICAgNjYxMjksIDY2MTMzLCA2NjEzNywgNjYxNDEsIDY2MTQ0LCA2NjE0OCwgNjYxNTIsIDY2MTU2LCA2NjE2MCwgNjYxNjQsIAotICAgIDY2MTY4LCA2NjE3MiwgNjYxNzYsIDY2MTgwLCA2NjE4NCwgNjYxODgsIDY2MTkyLCA2NjE5NiwgNjYyMDAsIDY2MjA0LCAKLSAgICA2NjIwOCwgNjYyMTIsIDY2MjE2LCA2NjIyMCwgNjYyMjQsIDY2MjI4LCA2NjIzMiwgNjYyMzYsIDY2MjQwLCA2NjI0NCwgCi0gICAgNjYyNDgsIDY2MjUyLCA2NjI1NiwgNjYyNjAsIDY2MjY0LCA2NjI2OCwgNjYyNzIsIDY2Mjc2LCA2NjI4MCwgNjYyODQsIAotICAgIDY2Mjg4LCA2NjI5MiwgNjYyOTYsIDY2MzAwLCA2NjMwNCwgNjYzMDgsIDY2MzEyLCA2NjMxNiwgNjYzMjAsIDY2MzI0LCAKLSAgICA2NjMyOCwgNjYzMzIsIDY2MzM2LCA2NjM0MCwgNjYzNDQsIDY2MzQ4LCA2NjM1MiwgNjYzNTYsIDY2MzYwLCA2NjM2NCwgCi0gICAgNjYzNjgsIDY2MzcyLCA2NjM3NiwgNjYzODAsIDY2Mzg0LCA2NjM4OCwgNjYzOTIsIDY2Mzk2LCA2NjQwMCwgNjY0MDQsIAotICAgIDY2NDA4LCA2NjQxMiwgNjY0MTYsIDY2NDIwLCA2NjQyNCwgNjY0MjgsIDY2NDMyLCA2NjQzNiwgNjY0NDAsIDY2NDQ0LCAKLSAgICA2NjQ0OCwgNjY0NTIsIDY2NDU2LCA2NjQ2MCwgNjY0NjQsIDY2NDY4LCA2NjQ3MiwgNjY0NzYsIDY2NDgwLCA2NjQ4NCwgCi0gICAgNjY0ODgsIDY2NDkyLCA2NjQ5NiwgNjY1MDAsIDY2NTA0LCA2NjUwOCwgNjY1MTIsIDY2NTE2LCA2NjUyMCwgNjY1MjQsIAotICAgIDY2NTI4LCA2NjUzMiwgNjY1MzYsIDY2NTQwLCA2NjU0NCwgNjY1NDgsIDY2NTUyLCA2NjU1NiwgNjY1NjAsIDY2NTY0LCAKLSAgICA2NjU2OCwgNjY1NzIsIDY2NTc2LCA2NjU4MCwgNjY1ODQsIDY2NTg4LCA2NjU5MiwgNjY1OTYsIDY2NTk5LCA2NjYwMywgCi0gICAgNjY2MDcsIDY2NjExLCA2NjYxNSwgNjY2MTksIDY2NjIzLCA2NjYyNywgNjY2MzEsIDY2NjM1LCA2NjYzOSwgNjY2NDMsIAotICAgIDY2NjQ3LCA2NjY1MSwgNjY2NTUsIDY2NjU5LCA2NjY2MywgNjY2NjcsIDY2NjcxLCA2NjY3NSwgNjY2NzksIDY2NjgzLCAKLSAgICA2NjY4NywgNjY2OTEsIDY2Njk1LCA2NjY5OSwgNjY3MDMsIDY2NzA3LCA2NjcxMSwgNjY3MTUsIDY2NzE5LCA2NjcyMywgCi0gICAgNjY3MjcsIDY2NzMxLCA2NjczNSwgNjY3MzksIDY2NzQzLCA2Njc0NywgNjY3NTEsIDY2NzU1LCA2Njc1OSwgNjY3NjMsIAotICAgIDY2NzY3LCA2Njc3MSwgNjY3NzUsIDY2Nzc5LCA2Njc4MywgNjY3ODcsIDY2NzkxLCA2Njc5NSwgNjY3OTksIDY2ODAzLCAKLSAgICA2NjgwNywgNjY4MTEsIDY2ODE1LCA2NjgxOSwgNjY4MjMsIDY2ODI3LCA2NjgzMSwgNjY4MzUsIDY2ODM5LCA2Njg0MywgCi0gICAgNjY4NDcsIDY2ODUxLCA2Njg1NSwgNjY4NTksIDY2ODYzLCA2Njg2NywgNjY4NzEsIDY2ODc1LCA2Njg3OSwgNjY4ODMsIAotICAgIDY2ODg3LCA2Njg5MSwgNjY4OTUsIDY2ODk5LCA2NjkwMywgNjY5MDcsIDY2OTExLCA2NjkxNSwgNjY5MTksIDY2OTIzLCAKLSAgICA2NjkyNywgNjY5MzEsIDY2OTM1LCA2NjkzOSwgNjY5NDMsIDY2OTQ3LCA2Njk1MSwgNjY5NTUsIDY2OTU5LCA2Njk2MywgCi0gICAgNjY5NjcsIDY2OTcxLCA2Njk3NSwgNjY5NzksIDY2OTgzLCA2Njk4NywgNjY5OTEsIDY2OTk1LCA2Njk5OSwgNjcwMDMsIAotICAgIDY3MDA3LCA2NzAxMSwgNjcwMTUsIDY3MDE5LCA2NzAyMywgNjcwMjcsIDY3MDMxLCA2NzAzNSwgNjcwMzksIDY3MDQzLCAKLSAgICA2NzA0NywgNjcwNTEsIDY3MDU1LCA2NzA1OSwgNjcwNjMsIDY3MDY3LCA2NzA3MSwgNjcwNzUsIDY3MDc5LCA2NzA4MywgCi0gICAgNjcwODcsIDY3MDkxLCA2NzA5NSwgNjcwOTksIDY3MTAzLCA2NzEwNywgNjcxMTEsIDY3MTE1LCA2NzExOSwgNjcxMjMsIAotICAgIDY3MTI3LCA2NzEzMSwgNjcxMzUsIDY3MTM5LCA2NzE0MywgNjcxNDcsIDY3MTUxLCA2NzE1NSwgNjcxNTksIDY3MTYzLCAKLSAgICA2NzE2NywgNjcxNzEsIDY3MTc1LCA2NzE3OSwgNjcxODMsIDY3MTg3LCA2NzE5MSwgNjcxOTUsIDY3MTk5LCA2NzIwMiwgCi0gICAgNjcyMDYsIDY3MjEwLCA2NzIxNCwgNjcyMTgsIDY3MjIyLCA2NzIyNiwgNjcyMzAsIDY3MjMzLCA2NzIzNywgNjcyNDEsIAotICAgIDY3MjQ1LCA2NzI0OSwgNjcyNTMsIDY3MjU3LCA2NzI2MSwgNjcyNjUsIDY3MjY5LCA2NzI3MywgNjcyNzcsIDY3MjgxLCAKLSAgICA2NzI4NSwgNjcyODksIDY3MjkzLCA2NzI5NywgNjczMDEsIDY3MzA1LCA2NzMwOSwgNjczMTMsIDY3MzE3LCA2NzMyMSwgCi0gICAgNjczMjUsIDY3MzI5LCA2NzMzMywgNjczMzcsIDY3MzQxLCA2NzM0NSwgNjczNDksIDY3MzUzLCA2NzM1NywgNjczNjEsIAotICAgIDY3MzY1LCA2NzM2OSwgNjczNzMsIDY3Mzc3LCA2NzM4MSwgNjczODUsIDY3Mzg5LCA2NzM5MywgNjczOTcsIDY3NDAxLCAKLSAgICA2NzQwNSwgNjc0MDksIDY3NDEzLCA2NzQxNywgNjc0MjEsIDY3NDI1LCA2NzQyOSwgNjc0MzMsIDY3NDM3LCA2NzQ0MSwgCi0gICAgNjc0NDUsIDY3NDQ5LCA2NzQ1MywgNjc0NTcsIDY3NDYxLCA2NzQ2NSwgNjc0NjksIDY3NDczLCA2NzQ3NywgNjc0ODEsIAotICAgIDY3NDg1LCA2NzQ4OSwgNjc0OTMsIDY3NDk3LCA2NzUwMSwgNjc1MDUsIDY3NTA5LCA2NzUxMywgNjc1MTcsIDY3NTIxLCAKLSAgICA2NzUyNSwgNjc1MjksIDY3NTMzLCA2NzUzNywgNjc1NDEsIDY3NTQ1LCA2NzU0OSwgNjc1NTMsIDY3NTU3LCA2NzU2MSwgCi0gICAgNjc1NjUsIDY3NTY5LCA2NzU3MywgNjc1NzcsIDY3NTgxLCA2NzU4NSwgNjc1ODksIDY3NTkzLCA2NzU5NywgNjc2MDEsIAotICAgIDY3NjA1LCA2NzYwOSwgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCA2NzYzMywgNjc2MzcsIDY3NjQxLCAKLSAgICA2NzY0NSwgNjc2NDksIDY3NjUzLCA2NzY1NywgNjc2NjEsIDY3NjY1LCA2NzY2OSwgNjc2NzMsIDY3Njc3LCA2NzY4MSwgCi0gICAgNjc2ODUsIDY3Njg5LCA2NzY5MywgNjc2OTcsIDY3NzAxLCA2NzcwNSwgNjc3MDksIDY3NzEzLCA2NzcxNywgNjc3MjEsIAotICAgIDY3NzI1LCA2NzcyOSwgNjc3MzMsIDY3NzM3LCA2Nzc0MSwgNjc3NDUsIDY3NzQ5LCA2Nzc1MywgNjc3NTcsIDY3NzYxLCAKLSAgICA2Nzc2NSwgNjc3NjksIDY3NzczLCA2Nzc3NywgNjc3ODEsIDY3Nzg1LCA2Nzc4OSwgNjc3OTMsIDY3Nzk3LCA2NzgwMSwgCi0gICAgNjc4MDUsIDY3ODA5LCA2NzgxMywgNjc4MTcsIDY3ODIxLCA2NzgyNSwgNjc4MjksIDY3ODMzLCA2NzgzNywgNjc4NDEsIAotICAgIDY3ODQ1LCA2Nzg0OSwgNjc4NTMsIDY3ODU3LCA2Nzg2MSwgNjc4NjUsIDY3ODY5LCA2Nzg3MywgNjc4NzcsIDY3ODgxLCAKLSAgICA2Nzg4NSwgNjc4ODksIDY3ODkzLCA2Nzg5NywgNjc5MDEsIDY3OTA1LCA2NzkwOSwgNjc5MTMsIDY3OTE3LCA2NzkyMSwgCi0gICAgNjc5MjUsIDY3OTI5LCA2NzkzMywgNjc5MzcsIDY3OTQxLCA2Nzk0NSwgNjc5NDksIDY3OTUzLCA2Nzk1NywgNjc5NjAsIAotICAgIDY3OTY0LCA2Nzk2OCwgNjc5NzIsIDY3OTc2LCA2Nzk4MCwgNjc5ODQsIDY3OTg4LCA2Nzk5MiwgNjc5OTYsIDY4MDAwLCAKLSAgICA2ODAwNCwgNjgwMDgsIDY4MDEyLCA2ODAxNiwgNjgwMjAsIDY4MDI0LCA2ODAyOCwgNjgwMzIsIDY4MDM2LCA2ODA0MCwgCi0gICAgNjgwNDQsIDY4MDQ4LCA2ODA1MiwgNjgwNTYsIDY4MDYwLCA2ODA2NCwgNjgwNjgsIDY4MDcyLCA2ODA3NiwgNjgwODAsIAotICAgIDY4MDg0LCA2ODA4OCwgNjgwOTIsIDY4MDk2LCA2ODEwMCwgNjgxMDQsIDY4MTA4LCA2ODExMiwgNjgxMTYsIDY4MTIwLCAKLSAgICA2ODEyNCwgNjgxMjgsIDY4MTMyLCA2ODEzNiwgNjgxNDAsIDY4MTQ0LCA2ODE0OCwgNjgxNTIsIDY4MTU2LCA2ODE2MCwgCi0gICAgNjgxNjQsIDY4MTY4LCA2ODE3MiwgNjgxNzYsIDY4MTgwLCA2ODE4NCwgNjgxODgsIDY4MTkyLCA2ODE5NiwgNjgyMDAsIAotICAgIDY4MjA0LCA2ODIwOCwgNjgyMTIsIDY4MjE2LCA2ODIyMCwgNjgyMjQsIDY4MjI4LCA2ODIzMiwgNjgyMzYsIDY4MjQwLCAKLSAgICA2ODI0NCwgNjgyNDgsIDY4MjUyLCA2ODI1NiwgNjgyNjAsIDY4MjY0LCA2ODI2OCwgNjgyNzIsIDY4Mjc2LCA2ODI4MCwgCi0gICAgNjgyODQsIDY4Mjg4LCA2ODI5MiwgNjgyOTYsIDY4MzAwLCA2ODMwNCwgNjgzMDgsIDY4MzEyLCA2ODMxNiwgNjgzMjAsIAotICAgIDY4MzI0LCA2ODMyOCwgNjgzMzIsIDY4MzM2LCA2ODM0MCwgNjgzNDQsIDY4MzQ4LCA2ODM1MiwgNjgzNTYsIDY4MzYwLCAKLSAgICA2ODM2NCwgNjgzNjgsIDY4MzcyLCA2ODM3NiwgNjgzODAsIDY4Mzg0LCA2ODM4OCwgNjgzOTIsIDY4Mzk2LCA2ODQwMCwgCi0gICAgNjg0MDQsIDY4NDA4LCA2ODQxMiwgNjg0MTYsIDY4NDIwLCA2ODQyNCwgNjg0MjgsIDY4NDMyLCA2ODQzNiwgNjg0NDAsIAotICAgIDY4NDQ0LCA2ODQ0OCwgNjg0NTIsIDY4NDU2LCA2ODQ2MCwgNjg0NjQsIDY4NDY4LCA2ODQ3MiwgNjg0NzYsIDY4NDgwLCAKLSAgICA2ODQ4NCwgNjg0ODgsIDY4NDkyLCA2ODQ5NiwgNjg1MDAsIDY4NTA0LCA2ODUwOCwgNjg1MTIsIDY4NTE2LCA2ODUyMCwgCi0gICAgNjg1MjQsIDY4NTI4LCA2ODUzMiwgNjg1MzYsIDY4NTQwLCA2ODU0NCwgNjg1NDgsIDY4NTUyLCA2ODU1NiwgNjg1NjAsIAotICAgIDY4NTY0LCA2ODU2OCwgNjg1NzIsIDY4NTc2LCA2ODU4MCwgNjg1ODQsIDY4NTg4LCA2ODU5MiwgNjg1OTYsIDY4NjAwLCAKLSAgICA2ODYwNCwgNjg2MDgsIDY4NjEyLCA2ODYxNiwgNjg2MjAsIDY4NjI0LCA2ODYyOCwgNjg2MzIsIDY4NjM2LCA2ODY0MCwgCi0gICAgNjg2NDQsIDY4NjQ4LCA2ODY1MiwgNjg2NTYsIDY4NjYwLCA2ODY2NCwgNjg2NjgsIDY4NjcyLCA2ODY3NiwgNjg2ODAsIAotICAgIDY4Njg0LCA2ODY4OCwgNjg2OTIsIDY4Njk2LCA2ODcwMCwgNjg3MDQsIDY4NzA4LCA2ODcxMiwgNjg3MTYsIDY4NzIwLCAKLSAgICA2ODcyNCwgNjg3MjgsIDY4NzMyLCA2ODczNiwgNjg3NDAsIDAsIDAsIDAsIDY4NzQ0LCA2ODc0OCwgNjg3NTIsIDY4NzU2LCAKLSAgICA2ODc2MCwgNjg3NjQsIDY4NzY4LCA2ODc3MiwgNjg3NzYsIDY4NzgwLCA2ODc4NCwgNjg3ODgsIDY4NzkyLCA2ODc5NiwgCi0gICAgNjg4MDAsIDY4ODA0LCA2ODgwOCwgNjg4MTIsIDY4ODE2LCA2ODgyMCwgNjg4MjQsIDY4ODI4LCA2ODgzMiwgNjg4MzYsIAotICAgIDY4ODQwLCA2ODg0NCwgNjg4NDgsIDY4ODUyLCA2ODg1NiwgNjg4NjAsIDY4ODY0LCA2ODg2OCwgNjg4NzIsIDY4ODc2LCAKLSAgICA2ODg4MCwgNjg4ODQsIDY4ODg4LCA2ODg5MiwgNjg4OTYsIDY4OTAwLCA2ODkwNCwgNjg5MDgsIDY4OTEyLCA2ODkxNiwgCi0gICAgNjg5MjAsIDY4OTI0LCA2ODkyOCwgNjg5MzIsIDY4OTM2LCA2ODk0MCwgNjg5NDQsIDY4OTQ4LCA2ODk1MiwgNjg5NTYsIAotICAgIDY4OTYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODk2NCwgNjg5NjksIDY4OTczLCA2ODk3OCwgNjg5ODMsIAotICAgIDY4OTg4LCA2ODk5MywgNjg5OTgsIDY5MDAyLCA2OTAwNywgNjkwMTIsIDY5MDE3LCA2OTAyMiwgNjkwMjcsIDY5MDMyLCAKLSAgICA2OTAzNywgNjkwNDEsIDY5MDQ1LCA2OTA1MCwgNjkwNTQsIDY5MDU5LCA2OTA2NCwgNjkwNjksIDY5MDczLCA2OTA3OCwgCi0gICAgNjkwODMsIDY5MDg4LCA2OTA5MywgNjkwOTgsIDY5MTAyLCA2OTEwNywgNjkxMTEsIDY5MTE2LCA2OTEyMCwgNjkxMjUsIAotICAgIDY5MTI5LCA2OTEzMywgNjkxMzcsIDY5MTQyLCA2OTE0NywgNjkxNTIsIDY5MTYwLCA2OTE2OCwgNjkxNzYsIDY5MTg0LCAKLSAgICA2OTE5MSwgNjkxOTksIDY5MjA1LCA2OTIxMywgNjkyMTcsIDY5MjIxLCA2OTIyNSwgNjkyMjksIDY5MjMzLCA2OTIzNywgCi0gICAgNjkyNDEsIDY5MjQ1LCA2OTI0OSwgNjkyNTMsIDY5MjU3LCA2OTI2MSwgNjkyNjUsIDY5MjY5LCA2OTI3MywgNjkyNzcsIAotICAgIDY5MjgxLCA2OTI4NSwgNjkyODksIDY5MjkzLCA2OTI5NywgNjkzMDEsIDY5MzA1LCA2OTMwOSwgNjkzMTMsIDY5MzE3LCAKLSAgICA2OTMyMSwgNjkzMjUsIDY5MzI5LCA2OTMzMywgNjkzMzcsIDY5MzQxLCA2OTM0NSwgNjkzNDksIDY5MzUzLCA2OTM1NywgCi0gICAgNjkzNjAsIDY5MzY0LCA2OTM2OCwgNjkzNzIsIDY5Mzc2LCA2OTM4MCwgNjkzODQsIDY5Mzg4LCA2OTM5MiwgNjkzOTYsIAotICAgIDY5NDAwLCA2OTQwNCwgNjk0MDgsIDY5NDEyLCA2OTQxNiwgNjk0MjAsIDY5NDI0LCA2OTQyOCwgNjk0MzIsIDY5NDM2LCAKLSAgICA2OTQ0MCwgNjk0NDQsIDY5NDQ4LCA2OTQ1MiwgNjk0NTYsIDY5NDYwLCA2OTQ2NCwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgCi0gICAgNjk0ODAsIDY5NDg0LCA2OTQ4OCwgNjk0OTIsIDY5NDk2LCA2OTUwMCwgNjk1MDQsIDY5NTA3LCA2OTUxMSwgNjk1MTUsIAotICAgIDY5NTE4LCA2OTUyMiwgNjk1MjYsIDY5NTMwLCA2OTUzMywgNjk1MzcsIDY5NTQxLCA2OTU0NSwgNjk1NDksIDY5NTUzLCAKLSAgICA2OTU1NywgNjk1NjEsIDY5NTY1LCA2OTU2OSwgNjk1NzMsIDY5NTc3LCA2OTU4MSwgNjk1ODUsIDY5NTg5LCA2OTU5MiwgCi0gICAgNjk1OTYsIDY5NjAwLCA2OTYwMywgNjk2MDcsIDY5NjExLCA2OTYxNSwgNjk2MTksIDY5NjIzLCA2OTYyNywgNjk2MzAsIAotICAgIDY5NjMzLCA2OTYzNywgNjk2NDEsIDY5NjQ1LCA2OTY0OCwgNjk2NTEsIDY5NjU1LCA2OTY1OSwgNjk2NjMsIDY5NjY3LCAKLSAgICA2OTY3MSwgNjk2NzUsIDY5Njc5LCA2OTY4MywgNjk2ODcsIDY5NjkxLCA2OTY5NSwgNjk2OTksIDY5NzAzLCA2OTcwNywgCi0gICAgNjk3MTEsIDY5NzE1LCA2OTcxOSwgNjk3MjMsIDY5NzI3LCA2OTczMSwgNjk3MzUsIDY5NzM5LCA2OTc0MywgNjk3NDcsIAotICAgIDY5NzUxLCA2OTc1NSwgNjk3NTksIDY5NzYzLCA2OTc2NywgNjk3NzEsIDY5Nzc1LCA2OTc3OSwgNjk3ODMsIDY5Nzg3LCAKLSAgICA2OTc5MSwgNjk3OTUsIDY5Nzk5LCA2OTgwMiwgNjk4MDYsIDY5ODEwLCA2OTgxNCwgNjk4MTgsIDY5ODIyLCA2OTgyNiwgCi0gICAgNjk4MzAsIDY5ODM0LCA2OTgzOCwgNjk4NDIsIDY5ODQ2LCA2OTg1MCwgNjk4NTQsIDY5ODU4LCA2OTg2MiwgNjk4NjYsIAotICAgIDY5ODcwLCA2OTg3NCwgNjk4NzgsIDY5ODgyLCA2OTg4NiwgNjk4OTAsIDY5ODk0LCA2OTg5OCwgNjk5MDIsIDY5OTA2LCAKLSAgICA2OTkxMCwgNjk5MTQsIDY5OTE4LCA2OTkyMiwgNjk5MjYsIDY5OTMwLCA2OTkzNCwgNjk5MzgsIDY5OTQyLCA2OTk0NiwgCi0gICAgNjk5NDksIDY5OTUzLCA2OTk1NywgNjk5NjEsIDY5OTY1LCA2OTk2OSwgNjk5NzMsIDY5OTc3LCA2OTk4MSwgNjk5ODUsIAotICAgIDY5OTg5LCA2OTk5MywgNjk5OTcsIDcwMDAxLCA3MDAwNSwgNzAwMDksIDcwMDEzLCA3MDAxNiwgNzAwMjAsIDcwMDI0LCAKLSAgICA3MDAyOCwgNzAwMzIsIDcwMDM2LCA3MDA0MCwgNzAwNDQsIDcwMDQ4LCA3MDA1MiwgNzAwNTYsIDcwMDYwLCA3MDA2NCwgCi0gICAgNzAwNjgsIDcwMDcyLCA3MDA3NiwgNzAwODAsIDcwMDg0LCA3MDA4OCwgNzAwOTIsIDcwMDk2LCA3MDEwMCwgNzAxMDMsIAotICAgIDcwMTA3LCA3MDExMSwgNzAxMTUsIDcwMTE5LCA3MDEyMywgNzAxMjcsIDcwMTMxLCA3MDEzNSwgNzAxMzksIDcwMTQzLCAKLSAgICA3MDE0NywgNzAxNTEsIDcwMTU1LCA3MDE1OSwgNzAxNjMsIDcwMTY3LCA3MDE3MSwgNzAxNzUsIDcwMTc5LCA3MDE4MywgCi0gICAgNzAxODcsIDcwMTkxLCA3MDE5NSwgNzAxOTksIDcwMjAzLCA3MDIwNywgNzAyMTEsIDcwMjE1LCA3MDIxOSwgNzAyMjMsIAotICAgIDcwMjI3LCA3MDIzMSwgNzAyMzUsIDcwMjM5LCA3MDI0MywgNzAyNDcsIDcwMjUxLCA3MDI1NSwgNzAyNTksIDcwMjYzLCAKLSAgICA3MDI2NywgNzAyNzEsIDcwMjc1LCA3MDI3OCwgNzAyODMsIDcwMjg3LCA3MDI5MywgNzAyOTgsIDcwMzA0LCA3MDMwOCwgCi0gICAgNzAzMTIsIDcwMzE2LCA3MDMyMCwgNzAzMjQsIDcwMzI4LCA3MDMzMiwgNzAzMzYsIDcwMzQwLCA3MDM0NCwgNzAzNDgsIAotICAgIDcwMzUyLCA3MDM1NiwgNzAzNjAsIDcwMzYzLCA3MDM2NiwgNzAzNjksIDcwMzcyLCA3MDM3NSwgNzAzNzgsIDcwMzgxLCAKLSAgICA3MDM4NCwgNzAzODcsIDcwMzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3MDM5OCwgNzA0MDMsIDcwNDA4LCA3MDQxMywgNzA0MTgsIDcwNDI1LCA3MDQzMiwgNzA0MzcsIDcwNDQyLCAKLSAgICA3MDQ0NywgNzA0NTIsIDcwNDU5LCA3MDQ2NiwgNzA0NzMsIDcwNDgwLCA3MDQ4NywgNzA0OTQsIDcwNTA0LCA3MDUxNCwgCi0gICAgNzA1MjEsIDcwNTI4LCA3MDUzNSwgNzA1NDIsIDcwNTQ4LCA3MDU1NCwgNzA1NjMsIDcwNTcyLCA3MDU3OSwgNzA1ODYsIAotICAgIDcwNTk3LCA3MDYwOCwgNzA2MTMsIDcwNjE4LCA3MDYyNSwgNzA2MzIsIDcwNjM5LCA3MDY0NiwgNzA2NTMsIDcwNjYwLCAKLSAgICA3MDY2NywgNzA2NzQsIDcwNjgwLCA3MDY4NiwgNzA2OTIsIDcwNjk4LCA3MDcwNSwgNzA3MTIsIDcwNzE3LCA3MDcyMSwgCi0gICAgNzA3MjgsIDcwNzM1LCA3MDc0MiwgNzA3NDYsIDcwNzUzLCA3MDc1NywgNzA3NjIsIDcwNzY2LCA3MDc3MiwgNzA3NzcsIAotICAgIDcwNzgzLCA3MDc4OCwgNzA3OTIsIDcwNzk2LCA3MDc5OSwgNzA4MDIsIDcwODA3LCA3MDgxMiwgNzA4MTcsIDcwODIyLCAKLSAgICA3MDgyNywgNzA4MzIsIDcwODM3LCA3MDg0MiwgNzA4NDcsIDcwODUyLCA3MDg2MSwgNzA4NzAsIDcwODc1LCA3MDg4MCwgCi0gICAgNzA4ODUsIDcwODkwLCA3MDg5NSwgNzA5MDAsIDcwOTA1LCA3MDkxMCwgNzA5MTUsIDcwOTIwLCA3MDkyNSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzA5MzAsIDcwOTM2LCA3MDkzOSwgNzA5NDIsIDcwOTQ1LCA3MDk0OSwgNzA5NTMsIDcwOTU3LCAKLSAgICA3MDk2MSwgNzA5NjQsIDcwOTY4LCA3MDk3MSwgNzA5NzUsIDcwOTc4LCA3MDk4MiwgNzA5ODYsIDcwOTkwLCA3MDk5NCwgCi0gICAgNzA5OTgsIDcxMDAyLCA3MTAwNiwgNzEwMDksIDcxMDEzLCA3MTAxNywgNzEwMjEsIDcxMDI1LCA3MTAyOSwgNzEwMzMsIAotICAgIDcxMDM3LCA3MTA0MSwgNzEwNDUsIDcxMDQ5LCA3MTA1MywgNzEwNTcsIDcxMDYxLCA3MTA2NSwgNzEwNjgsIDcxMDcyLCAKLSAgICA3MTA3NiwgNzEwODAsIDcxMDg0LCA3MTA4OCwgNzEwOTIsIDcxMDk2LCA3MTEwMCwgNzExMDQsIDcxMTA4LCA3MTExMiwgCi0gICAgNzExMTYsIDcxMTIwLCA3MTEyNCwgNzExMjgsIDcxMTMyLCA3MTEzNiwgNzExNDAsIDcxMTQ0LCA3MTE0OCwgNzExNTIsIAotICAgIDcxMTU2LCA3MTE2MCwgNzExNjQsIDcxMTY3LCA3MTE3MSwgNzExNzUsIDcxMTc5LCA3MTE4MywgNzExODcsIDcxMTkxLCAKLSAgICA3MTE5NSwgNzExOTgsIDcxMjAyLCA3MTIwNiwgNzEyMTAsIDcxMjE0LCA3MTIxOCwgNzEyMjIsIDcxMjI2LCA3MTIzMCwgCi0gICAgNzEyMzQsIDcxMjM4LCA3MTI0MiwgNzEyNDYsIDcxMjUxLCA3MTI1NiwgNzEyNTksIDcxMjY0LCA3MTI2NywgNzEyNzAsIAotICAgIDcxMjczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MTI3NywgNzEyODYsIDcxMjk1LCA3MTMwNCwgNzEzMTMsIDcxMzIyLCAKLSAgICA3MTMzMSwgNzEzNDAsIDcxMzQ5LCA3MTM1NywgNzEzNjQsIDcxMzcyLCA3MTM3OSwgNzEzODcsIDcxMzk3LCA3MTQwNiwgCi0gICAgNzE0MTYsIDcxNDI1LCA3MTQzNSwgNzE0NDMsIDcxNDUwLCA3MTQ1OCwgNzE0NjUsIDcxNDczLCA3MTQ3OCwgNzE0ODMsIAotICAgIDcxNDg4LCA3MTQ5NywgNzE1MDMsIDcxNTA5LCA3MTUxNiwgNzE1MjUsIDcxNTMzLCA3MTU0MSwgNzE1NDksIDcxNTU2LCAKLSAgICA3MTU2MywgNzE1NzAsIDcxNTc3LCA3MTU4MiwgNzE1ODcsIDcxNTkyLCA3MTU5NywgNzE2MDIsIDcxNjA3LCA3MTYxMiwgCi0gICAgNzE2MTcsIDcxNjI1LCA3MTYzMywgNzE2MzksIDcxNjQ1LCA3MTY1MCwgNzE2NTUsIDcxNjYwLCA3MTY2NSwgNzE2NzAsIAotICAgIDcxNjc1LCA3MTY4MCwgNzE2ODUsIDcxNjkzLCA3MTcwMSwgNzE3MDYsIDcxNzExLCA3MTcyMSwgNzE3MzEsIDcxNzM4LCAKLSAgICA3MTc0NSwgNzE3NTQsIDcxNzYzLCA3MTc3NSwgNzE3ODcsIDcxNzkzLCA3MTc5OSwgNzE4MDcsIDcxODE1LCA3MTgyNSwgCi0gICAgNzE4MzUsIDcxODQyLCA3MTg0OSwgNzE4NTQsIDcxODU5LCA3MTg3MSwgNzE4ODMsIDcxODkxLCA3MTg5OSwgNzE5MDksIAotICAgIDcxOTE5LCA3MTkzMSwgNzE5NDMsIDcxOTUyLCA3MTk2MSwgNzE5NjgsIDcxOTc1LCA3MTk4MiwgNzE5ODksIDcxOTk4LCAKLSAgICA3MjAwNywgNzIwMTIsIDcyMDE3LCA3MjAyNCwgNzIwMzEsIDcyMDM4LCA3MjA0NSwgNzIwNTcsIDcyMDY5LCA3MjA3NCwgCi0gICAgNzIwNzksIDcyMDg0LCA3MjA4OSwgNzIwOTQsIDcyMDk5LCA3MjEwNCwgNzIxMDksIDcyMTEzLCA3MjExOCwgNzIxMjMsIAotICAgIDcyMTI4LCA3MjEzMywgNzIxMzgsIDcyMTQ0LCA3MjE0OSwgNzIxNTQsIDcyMTYxLCA3MjE2OCwgNzIxNzUsIDcyMTgyLCAKLSAgICA3MjE4OSwgNzIxOTgsIDcyMjA3LCA3MjIxMywgNzIyMTksIDcyMjI1LCA3MjIzMSwgNzIyMzgsIDcyMjQ1LCA3MjI1MiwgCi0gICAgNzIyNTksIDcyMjY2LCA3MjI3MCwgNzIyNzcsIDcyMjgyLCA3MjI4NywgNzIyOTQsIDAsIDcyMzA3LCA3MjMxNSwgNzIzMjMsIAotICAgIDcyMzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjMzNywgNzIzNDYsIDcyMzU1LCA3MjM2NCwgCi0gICAgNzIzNzMsIDcyMzgyLCA3MjM5MSwgNzI0MDAsIDcyNDA5LCA3MjQxOCwgNzI0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDYzNzA2LCA2MzcxNSwgNjM3MjQsIDYzNzM1LCA2Mzc0MiwgNjM3NDcsIDYzNzUyLCA2Mzc1OSwgNjM3NjYsIAorICAgIDYzNzcyLCA2Mzc3NywgNjM3ODIsIDYzNzg3LCA2Mzc5MiwgNjM3OTksIDYzODA0LCA2MzgwOSwgNjM4MTQsIDYzODI1LCAKKyAgICA2MzgzMCwgNjM4MzUsIDYzODQyLCA2Mzg0NywgNjM4NTQsIDYzODU5LCA2Mzg2NCwgNjM4NzEsIDYzODc4LCA2Mzg4NSwgCisgICAgNjM4OTQsIDYzOTAzLCA2MzkwOCwgNjM5MTMsIDYzOTE4LCA2MzkyNSwgNjM5MzAsIDYzOTQwLCA2Mzk0NywgNjM5NTIsIAorICAgIDYzOTU3LCA2Mzk2MiwgNjM5NjcsIDYzOTcyLCA2Mzk3NywgNjM5ODYsIDYzOTkzLCA2NDAwMCwgNjQwMDUsIDY0MDEyLCAKKyAgICA2NDAxNywgNjQwMjQsIDY0MDMzLCA2NDA0NCwgNjQwNDksIDY0MDU4LCA2NDA2MywgNjQwNzAsIDY0MDc5LCA2NDA4OCwgCisgICAgNjQwOTMsIDY0MDk4LCA2NDEwNSwgNjQxMTEsIDY0MTE4LCA2NDEyNSwgNjQxMjksIDY0MTMzLCA2NDEzNiwgNjQxNDAsIAorICAgIDY0MTQ0LCA2NDE0OCwgNjQxNTIsIDY0MTU2LCA2NDE2MCwgNjQxNjQsIDY0MTY3LCA2NDE3MSwgNjQxNzUsIDY0MTc5LCAKKyAgICA2NDE4MywgNjQxODcsIDY0MTkxLCA2NDE5NCwgNjQxOTgsIDY0MjAyLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxNywgCisgICAgNjQyMjEsIDY0MjI1LCA2NDIyOSwgNjQyMzMsIDY0MjM3LCA2NDI0MSwgNjQyNDUsIDY0MjQ5LCA2NDI1MywgNjQyNTcsIAorICAgIDY0MjYxLCA2NDI2NSwgNjQyNjksIDY0MjczLCA2NDI3NywgNjQyODEsIDY0Mjg1LCA2NDI4OSwgNjQyOTMsIDY0Mjk3LCAKKyAgICA2NDMwMSwgNjQzMDUsIDY0MzA5LCA2NDMxMywgNjQzMTcsIDY0MzIxLCA2NDMyNSwgNjQzMjksIDY0MzMzLCA2NDMzNywgCisgICAgNjQzNDEsIDY0MzQ1LCA2NDM0OSwgNjQzNTMsIDY0MzU3LCA2NDM2MSwgNjQzNjUsIDY0MzY5LCA2NDM3MywgNjQzNzcsIAorICAgIDY0MzgxLCA2NDM4NCwgNjQzODgsIDY0MzkyLCA2NDM5NiwgNjQ0MDAsIDY0NDA0LCA2NDQwOCwgNjQ0MTIsIDY0NDE2LCAKKyAgICA2NDQyMCwgNjQ0MjQsIDY0NDI4LCA2NDQzMiwgNjQ0MzYsIDY0NDQwLCA2NDQ0NCwgNjQ0NDgsIDY0NDUyLCA2NDQ1NiwgCisgICAgNjQ0NjAsIDY0NDY0LCA2NDQ2OCwgNjQ0NzIsIDY0NDc2LCA2NDQ4MCwgNjQ0ODQsIDY0NDg4LCA2NDQ5MiwgNjQ0OTYsIAorICAgIDY0NTAwLCA2NDUwNCwgNjQ1MDgsIDY0NTEyLCA2NDUxNiwgNjQ1MjAsIDY0NTI0LCA2NDUyOCwgNjQ1MzIsIDY0NTM2LCAKKyAgICA2NDU0MCwgNjQ1NDQsIDY0NTQ4LCA2NDU1MiwgNjQ1NTYsIDY0NTYwLCA2NDU2NCwgNjQ1NjgsIDY0NTcyLCA2NDU3NiwgCisgICAgNjQ1ODAsIDY0NTg0LCA2NDU4OCwgNjQ1OTIsIDY0NTk2LCA2NDYwMCwgNjQ2MDQsIDY0NjA4LCA2NDYxMiwgNjQ2MTYsIAorICAgIDY0NjIwLCA2NDYyNCwgNjQ2MjgsIDY0NjMyLCA2NDYzNiwgNjQ2NDAsIDY0NjQ0LCA2NDY0OCwgNjQ2NTIsIDY0NjU2LCAKKyAgICA2NDY2MCwgNjQ2NjQsIDY0NjY4LCA2NDY3MiwgNjQ2NzYsIDY0NjgwLCA2NDY4NCwgNjQ2ODgsIDY0NjkyLCA2NDY5NiwgCisgICAgNjQ3MDAsIDY0NzA0LCA2NDcwOCwgNjQ3MTIsIDY0NzE2LCA2NDcyMCwgNjQ3MjQsIDY0NzI4LCA2NDczMiwgNjQ3MzYsIAorICAgIDY0NzQwLCA2NDc0NCwgNjQ3NDgsIDY0NzUyLCA2NDc1NiwgNjQ3NjAsIDY0NzY0LCA2NDc2OCwgNjQ3NzIsIDY0Nzc2LCAKKyAgICA2NDc4MCwgNjQ3ODQsIDY0Nzg4LCA2NDc5MiwgNjQ3OTYsIDY0ODAwLCA2NDgwNCwgNjQ4MDgsIDY0ODEyLCA2NDgxNiwgCisgICAgNjQ4MjAsIDY0ODI0LCA2NDgyOCwgNjQ4MzIsIDY0ODM2LCA2NDg0MCwgNjQ4NDQsIDY0ODQ4LCA2NDg1MiwgNjQ4NTUsIAorICAgIDY0ODU5LCA2NDg2MywgNjQ4NjcsIDY0ODcxLCA2NDg3NSwgNjQ4NzksIDY0ODgzLCA2NDg4NywgNjQ4OTEsIDY0ODk1LCAKKyAgICA2NDg5OSwgNjQ5MDMsIDY0OTA3LCA2NDkxMSwgNjQ5MTUsIDY0OTE5LCA2NDkyMywgNjQ5MjcsIDY0OTMxLCA2NDkzNSwgCisgICAgNjQ5MzksIDY0OTQzLCA2NDk0NywgNjQ5NTEsIDY0OTU1LCA2NDk1OSwgNjQ5NjMsIDY0OTY3LCA2NDk3MSwgNjQ5NzUsIAorICAgIDY0OTc5LCA2NDk4MywgNjQ5ODcsIDY0OTkxLCA2NDk5NSwgNjQ5OTksIDY1MDAzLCA2NTAwNywgNjUwMTEsIDY1MDE1LCAKKyAgICA2NTAxOSwgNjUwMjMsIDY1MDI3LCA2NTAzMSwgNjUwMzUsIDY1MDM5LCA2NTA0MywgNjUwNDcsIDY1MDUxLCA2NTA1NSwgCisgICAgNjUwNTksIDY1MDYzLCA2NTA2NywgNjUwNzEsIDY1MDc1LCA2NTA3OSwgNjUwODMsIDY1MDg3LCA2NTA5MSwgNjUwOTUsIAorICAgIDY1MDk5LCA2NTEwMywgNjUxMDcsIDY1MTExLCA2NTExNSwgNjUxMTksIDY1MTIzLCA2NTEyNywgNjUxMzEsIDY1MTM1LCAKKyAgICA2NTEzOSwgNjUxNDMsIDY1MTQ3LCA2NTE1MSwgNjUxNTUsIDY1MTU5LCA2NTE2MywgNjUxNjcsIDY1MTcxLCA2NTE3NSwgCisgICAgNjUxNzksIDY1MTgzLCA2NTE4NywgNjUxOTEsIDY1MTk1LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCA2NTIxMSwgNjUyMTUsIAorICAgIDY1MjE5LCA2NTIyMywgNjUyMjcsIDY1MjMxLCA2NTIzNSwgNjUyMzksIDY1MjQzLCA2NTI0NywgNjUyNTEsIDY1MjU1LCAKKyAgICA2NTI1OSwgNjUyNjMsIDY1MjY3LCA2NTI3MSwgNjUyNzUsIDY1Mjc5LCA2NTI4MywgNjUyODcsIDY1MjkxLCA2NTI5NSwgCisgICAgNjUyOTksIDY1MzAzLCA2NTMwNywgNjUzMTEsIDY1MzE1LCA2NTMxOCwgNjUzMjIsIDY1MzI2LCA2NTMzMCwgNjUzMzQsIAorICAgIDY1MzM4LCA2NTM0MiwgNjUzNDYsIDY1MzUwLCA2NTM1NCwgNjUzNTgsIDY1MzYyLCA2NTM2NiwgNjUzNzAsIDY1Mzc0LCAKKyAgICA2NTM3OCwgNjUzODIsIDY1Mzg2LCA2NTM5MCwgNjUzOTQsIDY1Mzk4LCA2NTQwMiwgNjU0MDYsIDY1NDEwLCA2NTQxNCwgCisgICAgNjU0MTgsIDY1NDIyLCA2NTQyNiwgNjU0MzAsIDY1NDM0LCA2NTQzOCwgNjU0NDIsIDY1NDQ2LCA2NTQ1MCwgNjU0NTQsIAorICAgIDY1NDU4LCA2NTQ2MiwgNjU0NjYsIDY1NDcwLCA2NTQ3NCwgNjU0NzgsIDY1NDgyLCA2NTQ4NiwgNjU0OTAsIDY1NDk0LCAKKyAgICA2NTQ5OCwgNjU1MDIsIDY1NTA2LCA2NTUxMCwgNjU1MTQsIDY1NTE4LCA2NTUyMiwgNjU1MjYsIDY1NTMwLCA2NTUzNCwgCisgICAgNjU1MzgsIDY1NTQyLCA2NTU0NiwgNjU1NTAsIDY1NTU0LCA2NTU1OCwgNjU1NjIsIDY1NTY2LCA2NTU3MCwgNjU1NzQsIAorICAgIDY1NTc4LCA2NTU4MiwgNjU1ODYsIDY1NTkwLCA2NTU5NCwgNjU1OTgsIDY1NjAyLCA2NTYwNiwgNjU2MTAsIDY1NjE0LCAKKyAgICA2NTYxOCwgNjU2MjIsIDY1NjI2LCA2NTYzMCwgNjU2MzQsIDY1NjM4LCA2NTY0MiwgNjU2NDYsIDY1NjUwLCA2NTY1NCwgCisgICAgNjU2NTgsIDY1NjYyLCA2NTY2NiwgNjU2NzAsIDY1Njc0LCA2NTY3NywgNjU2ODEsIDY1Njg1LCA2NTY4OSwgNjU2OTMsIAorICAgIDY1Njk3LCA2NTcwMSwgNjU3MDUsIDY1NzA5LCA2NTcxMywgNjU3MTcsIDY1NzIxLCA2NTcyNSwgNjU3MjksIDY1NzMzLCAKKyAgICA2NTczNywgNjU3NDEsIDY1NzQ1LCA2NTc0OSwgNjU3NTMsIDY1NzU3LCA2NTc2MSwgNjU3NjUsIDY1NzY5LCA2NTc3MywgCisgICAgNjU3NzcsIDY1NzgxLCA2NTc4NSwgNjU3ODksIDY1NzkzLCA2NTc5NywgNjU4MDEsIDY1ODA1LCA2NTgwOSwgNjU4MTMsIAorICAgIDY1ODE3LCA2NTgyMSwgNjU4MjUsIDY1ODI5LCA2NTgzMywgNjU4MzcsIDY1ODQxLCA2NTg0NSwgNjU4NDksIDY1ODUzLCAKKyAgICA2NTg1NywgNjU4NjEsIDY1ODY1LCA2NTg2OSwgNjU4NzMsIDY1ODc3LCA2NTg4MSwgNjU4ODUsIDY1ODg5LCA2NTg5MywgCisgICAgNjU4OTcsIDY1OTAxLCA2NTkwNSwgNjU5MDksIDY1OTEzLCA2NTkxNywgNjU5MjEsIDY1OTI1LCA2NTkyOSwgNjU5MzMsIAorICAgIDY1OTM3LCA2NTk0MSwgNjU5NDUsIDY1OTQ5LCA2NTk1MywgNjU5NTcsIDY1OTYxLCA2NTk2NSwgNjU5NjksIDY1OTczLCAKKyAgICA2NTk3NywgNjU5ODEsIDY1OTg1LCA2NTk4OSwgNjU5OTMsIDY1OTk3LCA2NjAwMSwgNjYwMDUsIDY2MDA5LCA2NjAxMywgCisgICAgNjYwMTcsIDY2MDIxLCA2NjAyNSwgNjYwMjksIDY2MDMzLCA2NjAzNywgNjYwNDEsIDY2MDQ1LCA2NjA0OSwgNjYwNTMsIAorICAgIDY2MDU3LCA2NjA2MSwgNjYwNjUsIDY2MDY5LCA2NjA3MywgNjYwNzcsIDY2MDgxLCA2NjA4NSwgNjYwODksIDY2MDkzLCAKKyAgICA2NjA5NywgNjYxMDEsIDY2MTA1LCA2NjEwOSwgNjYxMTMsIDY2MTE3LCA2NjEyMSwgNjYxMjUsIDY2MTI5LCA2NjEzMywgCisgICAgNjYxMzcsIDY2MTQxLCA2NjE0NSwgNjYxNDksIDY2MTUzLCA2NjE1NywgNjYxNjEsIDY2MTY1LCA2NjE2OSwgNjYxNzIsIAorICAgIDY2MTc2LCA2NjE4MCwgNjYxODQsIDY2MTg4LCA2NjE5MiwgNjYxOTYsIDY2MjAwLCA2NjIwNCwgNjYyMDgsIDY2MjEyLCAKKyAgICA2NjIxNiwgNjYyMjAsIDY2MjI0LCA2NjIyOCwgNjYyMzIsIDY2MjM2LCA2NjI0MCwgNjYyNDQsIDY2MjQ4LCA2NjI1MiwgCisgICAgNjYyNTYsIDY2MjYwLCA2NjI2NCwgNjYyNjgsIDY2MjcyLCA2NjI3NiwgNjYyODAsIDY2Mjg0LCA2NjI4OCwgNjYyOTIsIAorICAgIDY2Mjk2LCA2NjMwMCwgNjYzMDQsIDY2MzA4LCA2NjMxMiwgNjYzMTYsIDY2MzIwLCA2NjMyNCwgNjYzMjgsIDY2MzMyLCAKKyAgICA2NjMzNiwgNjYzNDAsIDY2MzQ0LCA2NjM0OCwgNjYzNTIsIDY2MzU2LCA2NjM2MCwgNjYzNjQsIDY2MzY4LCA2NjM3MiwgCisgICAgNjYzNzYsIDY2MzgwLCA2NjM4NCwgNjYzODgsIDY2MzkyLCA2NjM5NiwgNjY0MDAsIDY2NDA0LCA2NjQwOCwgNjY0MTIsIAorICAgIDY2NDE2LCA2NjQyMCwgNjY0MjQsIDY2NDI4LCA2NjQzMiwgNjY0MzYsIDY2NDQwLCA2NjQ0NCwgNjY0NDgsIDY2NDUyLCAKKyAgICA2NjQ1NiwgNjY0NjAsIDY2NDY0LCA2NjQ2OCwgNjY0NzIsIDY2NDc2LCA2NjQ4MCwgNjY0ODQsIDY2NDg4LCA2NjQ5MiwgCisgICAgNjY0OTYsIDY2NTAwLCA2NjUwNCwgNjY1MDgsIDY2NTEyLCA2NjUxNiwgNjY1MjAsIDY2NTI0LCA2NjUyOCwgNjY1MzIsIAorICAgIDY2NTM2LCA2NjU0MCwgNjY1NDQsIDY2NTQ4LCA2NjU1MiwgNjY1NTYsIDY2NTYwLCA2NjU2NCwgNjY1NjgsIDY2NTcyLCAKKyAgICA2NjU3NiwgNjY1ODAsIDY2NTg0LCA2NjU4OCwgNjY1OTIsIDY2NTk2LCA2NjYwMCwgNjY2MDQsIDY2NjA4LCA2NjYxMiwgCisgICAgNjY2MTYsIDY2NjIwLCA2NjYyNCwgNjY2MjcsIDY2NjMxLCA2NjYzNSwgNjY2MzksIDY2NjQzLCA2NjY0NywgNjY2NTEsIAorICAgIDY2NjU1LCA2NjY1OSwgNjY2NjMsIDY2NjY3LCA2NjY3MSwgNjY2NzUsIDY2Njc5LCA2NjY4MywgNjY2ODcsIDY2NjkxLCAKKyAgICA2NjY5NSwgNjY2OTksIDY2NzAzLCA2NjcwNywgNjY3MTEsIDY2NzE1LCA2NjcxOSwgNjY3MjMsIDY2NzI3LCA2NjczMSwgCisgICAgNjY3MzUsIDY2NzM5LCA2Njc0MywgNjY3NDcsIDY2NzUxLCA2Njc1NSwgNjY3NTksIDY2NzYzLCA2Njc2NywgNjY3NzEsIAorICAgIDY2Nzc1LCA2Njc3OSwgNjY3ODMsIDY2Nzg3LCA2Njc5MSwgNjY3OTUsIDY2Nzk5LCA2NjgwMywgNjY4MDcsIDY2ODExLCAKKyAgICA2NjgxNSwgNjY4MTksIDY2ODIzLCA2NjgyNywgNjY4MzEsIDY2ODM1LCA2NjgzOSwgNjY4NDMsIDY2ODQ3LCA2Njg1MSwgCisgICAgNjY4NTUsIDY2ODU5LCA2Njg2MywgNjY4NjcsIDY2ODcxLCA2Njg3NSwgNjY4NzksIDY2ODgzLCA2Njg4NywgNjY4OTEsIAorICAgIDY2ODk1LCA2Njg5OSwgNjY5MDMsIDY2OTA3LCA2NjkxMSwgNjY5MTUsIDY2OTE5LCA2NjkyMywgNjY5MjcsIDY2OTMxLCAKKyAgICA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTEsIDY2OTU1LCA2Njk1OSwgNjY5NjMsIDY2OTY3LCA2Njk3MSwgCisgICAgNjY5NzUsIDY2OTc5LCA2Njk4MywgNjY5ODcsIDY2OTkxLCA2Njk5NSwgNjY5OTksIDY3MDAzLCA2NzAwNywgNjcwMTEsIAorICAgIDY3MDE1LCA2NzAxOSwgNjcwMjMsIDY3MDI3LCA2NzAzMSwgNjcwMzUsIDY3MDM5LCA2NzA0MywgNjcwNDcsIDY3MDUxLCAKKyAgICA2NzA1NSwgNjcwNTksIDY3MDYzLCA2NzA2NywgNjcwNzEsIDY3MDc1LCA2NzA3OSwgNjcwODMsIDY3MDg3LCA2NzA5MSwgCisgICAgNjcwOTUsIDY3MDk5LCA2NzEwMywgNjcxMDcsIDY3MTExLCA2NzExNSwgNjcxMTksIDY3MTIzLCA2NzEyNywgNjcxMzEsIAorICAgIDY3MTM1LCA2NzEzOSwgNjcxNDMsIDY3MTQ3LCA2NzE1MSwgNjcxNTUsIDY3MTU5LCA2NzE2MywgNjcxNjcsIDY3MTcxLCAKKyAgICA2NzE3NSwgNjcxNzksIDY3MTgzLCA2NzE4NywgNjcxOTEsIDY3MTk1LCA2NzE5OSwgNjcyMDMsIDY3MjA3LCA2NzIxMSwgCisgICAgNjcyMTUsIDY3MjE5LCA2NzIyMywgNjcyMjcsIDY3MjMwLCA2NzIzNCwgNjcyMzgsIDY3MjQyLCA2NzI0NiwgNjcyNTAsIAorICAgIDY3MjU0LCA2NzI1OCwgNjcyNjEsIDY3MjY1LCA2NzI2OSwgNjcyNzMsIDY3Mjc3LCA2NzI4MSwgNjcyODUsIDY3Mjg5LCAKKyAgICA2NzI5MywgNjcyOTcsIDY3MzAxLCA2NzMwNSwgNjczMDksIDY3MzEzLCA2NzMxNywgNjczMjEsIDY3MzI1LCA2NzMyOSwgCisgICAgNjczMzMsIDY3MzM3LCA2NzM0MSwgNjczNDUsIDY3MzQ5LCA2NzM1MywgNjczNTcsIDY3MzYxLCA2NzM2NSwgNjczNjksIAorICAgIDY3MzczLCA2NzM3NywgNjczODEsIDY3Mzg1LCA2NzM4OSwgNjczOTMsIDY3Mzk3LCA2NzQwMSwgNjc0MDUsIDY3NDA5LCAKKyAgICA2NzQxMywgNjc0MTcsIDY3NDIxLCA2NzQyNSwgNjc0MjksIDY3NDMzLCA2NzQzNywgNjc0NDEsIDY3NDQ1LCA2NzQ0OSwgCisgICAgNjc0NTMsIDY3NDU3LCA2NzQ2MSwgNjc0NjUsIDY3NDY5LCA2NzQ3MywgNjc0NzcsIDY3NDgxLCA2NzQ4NSwgNjc0ODksIAorICAgIDY3NDkzLCA2NzQ5NywgNjc1MDEsIDY3NTA1LCA2NzUwOSwgNjc1MTMsIDY3NTE3LCA2NzUyMSwgNjc1MjUsIDY3NTI5LCAKKyAgICA2NzUzMywgNjc1MzcsIDY3NTQxLCA2NzU0NSwgNjc1NDksIDY3NTUzLCA2NzU1NywgNjc1NjEsIDY3NTY1LCA2NzU2OSwgCisgICAgNjc1NzMsIDY3NTc3LCA2NzU4MSwgNjc1ODUsIDY3NTg5LCA2NzU5MywgNjc1OTcsIDY3NjAxLCA2NzYwNSwgNjc2MDksIAorICAgIDY3NjEzLCA2NzYxNywgNjc2MjEsIDY3NjI1LCA2NzYyOSwgNjc2MzMsIDY3NjM3LCA2NzY0MSwgNjc2NDUsIDY3NjQ5LCAKKyAgICA2NzY1MywgNjc2NTcsIDY3NjYxLCA2NzY2NSwgNjc2NjksIDY3NjczLCA2NzY3NywgNjc2ODEsIDY3Njg1LCA2NzY4OSwgCisgICAgNjc2OTMsIDY3Njk3LCA2NzcwMSwgNjc3MDUsIDY3NzA5LCA2NzcxMywgNjc3MTcsIDY3NzIxLCA2NzcyNSwgNjc3MjksIAorICAgIDY3NzMzLCA2NzczNywgNjc3NDEsIDY3NzQ1LCA2Nzc0OSwgNjc3NTMsIDY3NzU3LCA2Nzc2MSwgNjc3NjUsIDY3NzY5LCAKKyAgICA2Nzc3MywgNjc3NzcsIDY3NzgxLCA2Nzc4NSwgNjc3ODksIDY3NzkzLCA2Nzc5NywgNjc4MDEsIDY3ODA1LCA2NzgwOSwgCisgICAgNjc4MTMsIDY3ODE3LCA2NzgyMSwgNjc4MjUsIDY3ODI5LCA2NzgzMywgNjc4MzcsIDY3ODQxLCA2Nzg0NSwgNjc4NDksIAorICAgIDY3ODUzLCA2Nzg1NywgNjc4NjEsIDY3ODY1LCA2Nzg2OSwgNjc4NzMsIDY3ODc3LCA2Nzg4MSwgNjc4ODUsIDY3ODg5LCAKKyAgICA2Nzg5MywgNjc4OTcsIDY3OTAxLCA2NzkwNSwgNjc5MDksIDY3OTEzLCA2NzkxNywgNjc5MjEsIDY3OTI1LCA2NzkyOSwgCisgICAgNjc5MzMsIDY3OTM3LCA2Nzk0MSwgNjc5NDUsIDY3OTQ5LCA2Nzk1MywgNjc5NTcsIDY3OTYxLCA2Nzk2NSwgNjc5NjksIAorICAgIDY3OTczLCA2Nzk3NywgNjc5ODEsIDY3OTg1LCA2Nzk4OCwgNjc5OTIsIDY3OTk2LCA2ODAwMCwgNjgwMDQsIDY4MDA4LCAKKyAgICA2ODAxMiwgNjgwMTYsIDY4MDIwLCA2ODAyNCwgNjgwMjgsIDY4MDMyLCA2ODAzNiwgNjgwNDAsIDY4MDQ0LCA2ODA0OCwgCisgICAgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjQsIDY4MDY4LCA2ODA3MiwgNjgwNzYsIDY4MDgwLCA2ODA4NCwgNjgwODgsIAorICAgIDY4MDkyLCA2ODA5NiwgNjgxMDAsIDY4MTA0LCA2ODEwOCwgNjgxMTIsIDY4MTE2LCA2ODEyMCwgNjgxMjQsIDY4MTI4LCAKKyAgICA2ODEzMiwgNjgxMzYsIDY4MTQwLCA2ODE0NCwgNjgxNDgsIDY4MTUyLCA2ODE1NiwgNjgxNjAsIDY4MTY0LCA2ODE2OCwgCisgICAgNjgxNzIsIDY4MTc2LCA2ODE4MCwgNjgxODQsIDY4MTg4LCA2ODE5MiwgNjgxOTYsIDY4MjAwLCA2ODIwNCwgNjgyMDgsIAorICAgIDY4MjEyLCA2ODIxNiwgNjgyMjAsIDY4MjI0LCA2ODIyOCwgNjgyMzIsIDY4MjM2LCA2ODI0MCwgNjgyNDQsIDY4MjQ4LCAKKyAgICA2ODI1MiwgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIDY4Mjg0LCA2ODI4OCwgCisgICAgNjgyOTIsIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCA2ODMyNCwgNjgzMjgsIAorICAgIDY4MzMyLCA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgNjgzNjQsIDY4MzY4LCAKKyAgICA2ODM3MiwgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIDY4NDA0LCA2ODQwOCwgCisgICAgNjg0MTIsIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCA2ODQ0NCwgNjg0NDgsIAorICAgIDY4NDUyLCA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgNjg0ODQsIDY4NDg4LCAKKyAgICA2ODQ5MiwgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIDY4NTI0LCA2ODUyOCwgCisgICAgNjg1MzIsIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCA2ODU2NCwgNjg1NjgsIAorICAgIDY4NTcyLCA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgNjg2MDQsIDY4NjA4LCAKKyAgICA2ODYxMiwgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIDY4NjQ0LCA2ODY0OCwgCisgICAgNjg2NTIsIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCA2ODY4NCwgNjg2ODgsIAorICAgIDY4NjkyLCA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgNjg3MjQsIDY4NzI4LCAKKyAgICA2ODczMiwgNjg3MzYsIDY4NzQwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgNjg3NjAsIDY4NzY0LCA2ODc2OCwgMCwgCisgICAgMCwgMCwgNjg3NzIsIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIDY4ODAwLCA2ODgwNCwgCisgICAgNjg4MDgsIDY4ODEyLCA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCA2ODg0MCwgNjg4NDQsIAorICAgIDY4ODQ4LCA2ODg1MiwgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgNjg4ODAsIDY4ODg0LCAKKyAgICA2ODg4OCwgNjg4OTIsIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIDY4OTIwLCA2ODkyNCwgCisgICAgNjg5MjgsIDY4OTMyLCA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCA2ODk2MCwgNjg5NjQsIAorICAgIDY4OTY4LCA2ODk3MiwgNjg5NzYsIDY4OTgwLCA2ODk4NCwgNjg5ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY4OTkyLCA2ODk5NywgNjkwMDEsIDY5MDA2LCA2OTAxMSwgNjkwMTYsIDY5MDIxLCA2OTAyNiwgNjkwMzAsIDY5MDM1LCAKKyAgICA2OTA0MCwgNjkwNDUsIDY5MDUwLCA2OTA1NSwgNjkwNjAsIDY5MDY1LCA2OTA2OSwgNjkwNzMsIDY5MDc4LCA2OTA4MiwgCisgICAgNjkwODcsIDY5MDkyLCA2OTA5NywgNjkxMDEsIDY5MTA2LCA2OTExMSwgNjkxMTYsIDY5MTIxLCA2OTEyNiwgNjkxMzAsIAorICAgIDY5MTM1LCA2OTEzOSwgNjkxNDQsIDY5MTQ4LCA2OTE1MywgNjkxNTcsIDY5MTYxLCA2OTE2NSwgNjkxNzAsIDY5MTc1LCAKKyAgICA2OTE4MCwgNjkxODgsIDY5MTk2LCA2OTIwNCwgNjkyMTIsIDY5MjE5LCA2OTIyNywgNjkyMzMsIDY5MjQxLCA2OTI0NSwgCisgICAgNjkyNDksIDY5MjUzLCA2OTI1NywgNjkyNjEsIDY5MjY1LCA2OTI2OSwgNjkyNzMsIDY5Mjc3LCA2OTI4MSwgNjkyODUsIAorICAgIDY5Mjg5LCA2OTI5MywgNjkyOTcsIDY5MzAxLCA2OTMwNSwgNjkzMDksIDY5MzEzLCA2OTMxNywgNjkzMjEsIDY5MzI1LCAKKyAgICA2OTMyOSwgNjkzMzMsIDY5MzM3LCA2OTM0MSwgNjkzNDUsIDY5MzQ5LCA2OTM1MywgNjkzNTcsIDY5MzYxLCA2OTM2NSwgCisgICAgNjkzNjksIDY5MzczLCA2OTM3NywgNjkzODEsIDY5Mzg1LCA2OTM4OCwgNjkzOTIsIDY5Mzk2LCA2OTQwMCwgNjk0MDQsIAorICAgIDY5NDA4LCA2OTQxMiwgNjk0MTYsIDY5NDIwLCA2OTQyNCwgNjk0MjgsIDY5NDMyLCA2OTQzNiwgNjk0NDAsIDY5NDQ0LCAKKyAgICA2OTQ0OCwgNjk0NTIsIDY5NDU2LCA2OTQ2MCwgNjk0NjQsIDY5NDY4LCA2OTQ3MiwgNjk0NzYsIDY5NDgwLCA2OTQ4NCwgCisgICAgNjk0ODgsIDY5NDkyLCA2OTQ5NiwgNjk1MDAsIDY5NTA0LCA2OTUwOCwgNjk1MTIsIDY5NTE2LCA2OTUyMCwgNjk1MjQsIAorICAgIDY5NTI4LCA2OTUzMiwgNjk1MzUsIDY5NTM5LCA2OTU0MywgNjk1NDYsIDY5NTUwLCA2OTU1NCwgNjk1NTgsIDY5NTYxLCAKKyAgICA2OTU2NSwgNjk1NjksIDY5NTczLCA2OTU3NywgNjk1ODEsIDY5NTg1LCA2OTU4OSwgNjk1OTMsIDY5NTk3LCA2OTYwMSwgCisgICAgNjk2MDUsIDY5NjA5LCA2OTYxMywgNjk2MTcsIDY5NjIwLCA2OTYyNCwgNjk2MjgsIDY5NjMxLCA2OTYzNSwgNjk2MzksIAorICAgIDY5NjQzLCA2OTY0NywgNjk2NTEsIDY5NjU1LCA2OTY1OCwgNjk2NjEsIDY5NjY1LCA2OTY2OSwgNjk2NzMsIDY5Njc2LCAKKyAgICA2OTY3OSwgNjk2ODMsIDY5Njg3LCA2OTY5MSwgNjk2OTUsIDY5Njk5LCA2OTcwMywgNjk3MDcsIDY5NzExLCA2OTcxNSwgCisgICAgNjk3MTksIDY5NzIzLCA2OTcyNywgNjk3MzEsIDY5NzM1LCA2OTczOSwgNjk3NDMsIDY5NzQ3LCA2OTc1MSwgNjk3NTUsIAorICAgIDY5NzU5LCA2OTc2MywgNjk3NjcsIDY5NzcxLCA2OTc3NSwgNjk3NzksIDY5NzgzLCA2OTc4NywgNjk3OTEsIDY5Nzk1LCAKKyAgICA2OTc5OSwgNjk4MDMsIDY5ODA3LCA2OTgxMSwgNjk4MTUsIDY5ODE5LCA2OTgyMywgNjk4MjcsIDY5ODMwLCA2OTgzNCwgCisgICAgNjk4MzgsIDY5ODQyLCA2OTg0NiwgNjk4NTAsIDY5ODU0LCA2OTg1OCwgNjk4NjIsIDY5ODY2LCA2OTg3MCwgNjk4NzQsIAorICAgIDY5ODc4LCA2OTg4MiwgNjk4ODYsIDY5ODkwLCA2OTg5NCwgNjk4OTgsIDY5OTAyLCA2OTkwNiwgNjk5MTAsIDY5OTE0LCAKKyAgICA2OTkxOCwgNjk5MjIsIDY5OTI2LCA2OTkzMCwgNjk5MzQsIDY5OTM4LCA2OTk0MiwgNjk5NDYsIDY5OTUwLCA2OTk1NCwgCisgICAgNjk5NTgsIDY5OTYyLCA2OTk2NiwgNjk5NzAsIDY5OTc0LCA2OTk3NywgNjk5ODEsIDY5OTg1LCA2OTk4OSwgNjk5OTMsIAorICAgIDY5OTk3LCA3MDAwMSwgNzAwMDUsIDcwMDA5LCA3MDAxMywgNzAwMTcsIDcwMDIxLCA3MDAyNSwgNzAwMjksIDcwMDMzLCAKKyAgICA3MDAzNywgNzAwNDEsIDcwMDQ0LCA3MDA0OCwgNzAwNTIsIDcwMDU2LCA3MDA2MCwgNzAwNjQsIDcwMDY4LCA3MDA3MiwgCisgICAgNzAwNzYsIDcwMDgwLCA3MDA4NCwgNzAwODgsIDcwMDkyLCA3MDA5NiwgNzAxMDAsIDcwMTA0LCA3MDEwOCwgNzAxMTIsIAorICAgIDcwMTE2LCA3MDEyMCwgNzAxMjQsIDcwMTI4LCA3MDEzMSwgNzAxMzUsIDcwMTM5LCA3MDE0MywgNzAxNDcsIDcwMTUxLCAKKyAgICA3MDE1NSwgNzAxNTksIDcwMTYzLCA3MDE2NywgNzAxNzEsIDcwMTc1LCA3MDE3OSwgNzAxODMsIDcwMTg3LCA3MDE5MSwgCisgICAgNzAxOTUsIDcwMTk5LCA3MDIwMywgNzAyMDcsIDcwMjExLCA3MDIxNSwgNzAyMTksIDcwMjIzLCA3MDIyNywgNzAyMzEsIAorICAgIDcwMjM1LCA3MDIzOSwgNzAyNDMsIDcwMjQ3LCA3MDI1MSwgNzAyNTUsIDcwMjU5LCA3MDI2MywgNzAyNjcsIDcwMjcxLCAKKyAgICA3MDI3NSwgNzAyNzksIDcwMjgzLCA3MDI4NywgNzAyOTEsIDcwMjk1LCA3MDI5OSwgNzAzMDMsIDcwMzA2LCA3MDMxMSwgCisgICAgNzAzMTUsIDcwMzIxLCA3MDMyNiwgNzAzMzIsIDcwMzM2LCA3MDM0MCwgNzAzNDQsIDcwMzQ4LCA3MDM1MiwgNzAzNTYsIAorICAgIDcwMzYwLCA3MDM2NCwgNzAzNjgsIDcwMzcyLCA3MDM3NiwgNzAzODAsIDcwMzg0LCA3MDM4OCwgNzAzOTEsIDcwMzk0LCAKKyAgICA3MDM5NywgNzA0MDAsIDcwNDAzLCA3MDQwNiwgNzA0MDksIDcwNDEyLCA3MDQxNSwgNzA0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwNDI2LCA3MDQzMSwgNzA0MzYsIDcwNDQxLCAKKyAgICA3MDQ0NiwgNzA0NTMsIDcwNDYwLCA3MDQ2NSwgNzA0NzAsIDcwNDc1LCA3MDQ4MCwgNzA0ODcsIDcwNDk0LCA3MDUwMSwgCisgICAgNzA1MDgsIDcwNTE1LCA3MDUyMiwgNzA1MzIsIDcwNTQyLCA3MDU0OSwgNzA1NTYsIDcwNTYzLCA3MDU3MCwgNzA1NzYsIAorICAgIDcwNTgyLCA3MDU5MSwgNzA2MDAsIDcwNjA3LCA3MDYxNCwgNzA2MjUsIDcwNjM2LCA3MDY0MSwgNzA2NDYsIDcwNjUzLCAKKyAgICA3MDY2MCwgNzA2NjcsIDcwNjc0LCA3MDY4MSwgNzA2ODgsIDcwNjk1LCA3MDcwMiwgNzA3MDgsIDcwNzE0LCA3MDcyMCwgCisgICAgNzA3MjYsIDcwNzMzLCA3MDc0MCwgNzA3NDUsIDcwNzQ5LCA3MDc1NiwgNzA3NjMsIDcwNzcwLCA3MDc3NCwgNzA3ODEsIAorICAgIDcwNzg1LCA3MDc5MCwgNzA3OTQsIDcwODAwLCA3MDgwNSwgNzA4MTEsIDcwODE2LCA3MDgyMCwgNzA4MjQsIDcwODI3LCAKKyAgICA3MDgzMCwgNzA4MzUsIDcwODQwLCA3MDg0NSwgNzA4NTAsIDcwODU1LCA3MDg2MCwgNzA4NjUsIDcwODcwLCA3MDg3NSwgCisgICAgNzA4ODAsIDcwODg5LCA3MDg5OCwgNzA5MDMsIDcwOTA4LCA3MDkxMywgNzA5MTgsIDcwOTIzLCA3MDkyOCwgNzA5MzMsIAorICAgIDcwOTM4LCA3MDk0MywgNzA5NDgsIDcwOTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDk1OCwgNzA5NjQsIDcwOTY3LCAKKyAgICA3MDk3MCwgNzA5NzMsIDcwOTc3LCA3MDk4MSwgNzA5ODUsIDcwOTg5LCA3MDk5MiwgNzA5OTYsIDcwOTk5LCA3MTAwMywgCisgICAgNzEwMDYsIDcxMDEwLCA3MTAxNCwgNzEwMTgsIDcxMDIyLCA3MTAyNiwgNzEwMzAsIDcxMDM0LCA3MTAzNywgNzEwNDEsIAorICAgIDcxMDQ1LCA3MTA0OSwgNzEwNTMsIDcxMDU3LCA3MTA2MSwgNzEwNjUsIDcxMDY5LCA3MTA3MywgNzEwNzcsIDcxMDgxLCAKKyAgICA3MTA4NSwgNzEwODksIDcxMDkzLCA3MTA5NiwgNzExMDAsIDcxMTA0LCA3MTEwOCwgNzExMTIsIDcxMTE2LCA3MTEyMCwgCisgICAgNzExMjQsIDcxMTI4LCA3MTEzMiwgNzExMzYsIDcxMTQwLCA3MTE0NCwgNzExNDgsIDcxMTUyLCA3MTE1NiwgNzExNjAsIAorICAgIDcxMTY0LCA3MTE2OCwgNzExNzIsIDcxMTc2LCA3MTE4MCwgNzExODQsIDcxMTg4LCA3MTE5MiwgNzExOTUsIDcxMTk5LCAKKyAgICA3MTIwMywgNzEyMDcsIDcxMjExLCA3MTIxNSwgNzEyMTksIDcxMjIzLCA3MTIyNiwgNzEyMzAsIDcxMjM0LCA3MTIzOCwgCisgICAgNzEyNDIsIDcxMjQ2LCA3MTI1MCwgNzEyNTQsIDcxMjU4LCA3MTI2MiwgNzEyNjYsIDcxMjcwLCA3MTI3NCwgNzEyNzksIAorICAgIDcxMjg0LCA3MTI4NywgNzEyOTIsIDcxMjk1LCA3MTI5OCwgNzEzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxMzA1LCAKKyAgICA3MTMxNCwgNzEzMjMsIDcxMzMyLCA3MTM0MSwgNzEzNTAsIDcxMzU5LCA3MTM2OCwgNzEzNzcsIDcxMzg1LCA3MTM5MiwgCisgICAgNzE0MDAsIDcxNDA3LCA3MTQxNSwgNzE0MjUsIDcxNDM0LCA3MTQ0NCwgNzE0NTMsIDcxNDYzLCA3MTQ3MSwgNzE0NzgsIAorICAgIDcxNDg2LCA3MTQ5MywgNzE1MDEsIDcxNTA2LCA3MTUxMSwgNzE1MTYsIDcxNTI1LCA3MTUzMSwgNzE1MzcsIDcxNTQ0LCAKKyAgICA3MTU1MywgNzE1NjEsIDcxNTY5LCA3MTU3NywgNzE1ODQsIDcxNTkxLCA3MTU5OCwgNzE2MDUsIDcxNjEwLCA3MTYxNSwgCisgICAgNzE2MjAsIDcxNjI1LCA3MTYzMCwgNzE2MzUsIDcxNjQwLCA3MTY0NSwgNzE2NTMsIDcxNjYxLCA3MTY2NywgNzE2NzMsIAorICAgIDcxNjc4LCA3MTY4MywgNzE2ODgsIDcxNjkzLCA3MTY5OCwgNzE3MDMsIDcxNzA4LCA3MTcxMywgNzE3MjEsIDcxNzI5LCAKKyAgICA3MTczNCwgNzE3MzksIDcxNzQ5LCA3MTc1OSwgNzE3NjYsIDcxNzczLCA3MTc4MiwgNzE3OTEsIDcxODAzLCA3MTgxNSwgCisgICAgNzE4MjEsIDcxODI3LCA3MTgzNSwgNzE4NDMsIDcxODUzLCA3MTg2MywgNzE4NzAsIDcxODc3LCA3MTg4MiwgNzE4ODcsIAorICAgIDcxODk5LCA3MTkxMSwgNzE5MTksIDcxOTI3LCA3MTkzNywgNzE5NDcsIDcxOTU5LCA3MTk3MSwgNzE5ODAsIDcxOTg5LCAKKyAgICA3MTk5NiwgNzIwMDMsIDcyMDEwLCA3MjAxNywgNzIwMjYsIDcyMDM1LCA3MjA0MCwgNzIwNDUsIDcyMDUyLCA3MjA1OSwgCisgICAgNzIwNjYsIDcyMDczLCA3MjA4NSwgNzIwOTcsIDcyMTAyLCA3MjEwNywgNzIxMTIsIDcyMTE3LCA3MjEyMiwgNzIxMjcsIAorICAgIDcyMTMyLCA3MjEzNywgNzIxNDEsIDcyMTQ2LCA3MjE1MSwgNzIxNTYsIDcyMTYxLCA3MjE2NiwgNzIxNzIsIDcyMTc3LCAKKyAgICA3MjE4MiwgNzIxODksIDcyMTk2LCA3MjIwMywgNzIyMTAsIDcyMjE3LCA3MjIyNiwgNzIyMzUsIDcyMjQxLCA3MjI0NywgCisgICAgNzIyNTMsIDcyMjU5LCA3MjI2NiwgNzIyNzMsIDcyMjgwLCA3MjI4NywgNzIyOTQsIDcyMjk4LCA3MjMwNSwgNzIzMTAsIAorICAgIDcyMzE1LCA3MjMyMiwgMCwgNzIzMzUsIDcyMzQzLCA3MjM1MSwgNzIzNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcyMzY1LCA3MjM3NCwgNzIzODMsIDcyMzkyLCA3MjQwMSwgNzI0MTAsIDcyNDE5LCA3MjQyOCwgNzI0MzcsIAorICAgIDcyNDQ2LCA3MjQ1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI0MzQsIAotICAgIDcyNDQxLCA3MjQ0NywgNzI0NTQsIDcyNDYyLCA3MjQ3MCwgNzI0NzcsIDcyNDg1LCA3MjQ5MiwgNzI0OTgsIDcyNTA0LCAKLSAgICA3MjUxMSwgNzI1MTcsIDcyNTIzLCA3MjUyOSwgNzI1MzYsIDcyNTQzLCA3MjU1MCwgNzI1NTcsIDcyNTY0LCA3MjU3MSwgCi0gICAgNzI1NzgsIDcyNTg1LCA3MjU5MiwgNzI1OTksIDcyNjA2LCA3MjYxMywgNzI2MjAsIDcyNjI3LCA3MjYzMywgNzI2NDAsIAotICAgIDcyNjQ3LCA3MjY1NCwgNzI2NjEsIDcyNjY4LCA3MjY3NSwgNzI2ODIsIDcyNjg5LCA3MjY5NiwgNzI3MDMsIDcyNzEwLCAKLSAgICA3MjcxNywgNzI3MjQsIDcyNzMxLCA3MjczOCwgNzI3NDUsIDcyNzUyLCA3Mjc1OSwgNzI3NjcsIDcyNzc1LCA3Mjc4MywgCi0gICAgNzI3OTEsIDAsIDAsIDAsIDAsIDcyNzk5LCA3MjgwOCwgNzI4MTcsIDcyODI2LCA3MjgzNSwgNzI4NDQsIDcyODUzLCAKLSAgICA3Mjg2MCwgNzI4NjcsIDcyODc0LCAwLCAwLCAwLCAwLCAwLCAwLCA3Mjg4MSwgNzI4ODUsIDcyODkwLCA3Mjg5NSwgNzI5MDAsIAotICAgIDcyOTA1LCA3MjkxMCwgNzI5MTUsIDcyOTIwLCA3MjkyNSwgNzI5MzAsIDcyOTM1LCA3MjkzOSwgNzI5NDMsIDcyOTQ4LCAKLSAgICA3Mjk1MywgNzI5NTcsIDcyOTYyLCA3Mjk2NywgNzI5NzIsIDcyOTc3LCA3Mjk4MiwgNzI5ODcsIDcyOTkyLCA3Mjk5NiwgCi0gICAgNzMwMDAsIDczMDA1LCA3MzAxMCwgNzMwMTQsIDczMDE4LCA3MzAyMiwgNzMwMjYsIDczMDMwLCA3MzAzNCwgNzMwMzgsIAotICAgIDczMDQzLCA3MzA0OCwgNzMwNTMsIDczMDU4LCA3MzA2MywgNzMwNzAsIDczMDc2LCA3MzA4MSwgNzMwODYsIDczMDkxLCAKLSAgICA3MzA5NiwgNzMxMDIsIDczMTA5LCA3MzExNSwgNzMxMjIsIDczMTI4LCA3MzEzNCwgNzMxMzksIDczMTQ2LCA3MzE1MiwgCi0gICAgNzMxNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMTYzLCA3MzE2NywgNzMxNzEsIDczMTc0LCA3MzE3OCwgNzMxODEsIAotICAgIDczMTg1LCA3MzE4OCwgNzMxOTIsIDczMTk2LCA3MzIwMSwgNzMyMDUsIDczMjEwLCA3MzIxMywgNzMyMTcsIDczMjIxLCAKLSAgICA3MzIyNCwgNzMyMjgsIDczMjMyLCA3MzIzNSwgNzMyMzksIDczMjQzLCA3MzI0NywgNzMyNTEsIDczMjU1LCA3MzI1OSwgCi0gICAgNzMyNjMsIDczMjY3LCA3MzI3MSwgNzMyNzUsIDczMjc5LCA3MzI4MywgNzMyODcsIDczMjkxLCA3MzI5NSwgNzMyOTksIAotICAgIDczMzAzLCA3MzMwNywgNzMzMTAsIDczMzEzLCA3MzMxNywgNzMzMjEsIDczMzI1LCA3MzMyOCwgNzMzMzEsIDczMzM0LCAKLSAgICA3MzMzOCwgNzMzNDIsIDczMzQ2LCA3MzM1MCwgNzMzNTMsIDczMzU2LCA3MzM2MCwgNzMzNjUsIDczMzcwLCA3MzM3NCwgCi0gICAgNzMzNzksIDczMzgzLCA3MzM4OCwgNzMzOTMsIDczMzk5LCA3MzQwNCwgNzM0MTAsIDczNDE0LCA3MzQxOSwgNzM0MjQsIAotICAgIDczNDI4LCA3MzQzMywgNzM0MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczNDQyLCA3MzQ0NSwgNzM0NDksIAotICAgIDczNDUzLCA3MzQ1NiwgNzM0NTksIDczNDYyLCA3MzQ2NSwgNzM0NjgsIDczNDcxLCA3MzQ3NCwgNzM0NzcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDczNDgwLCA3MzQ4NSwgNzM0ODksIDczNDkzLCA3MzQ5NywgNzM1MDEsIDczNTA1LCA3MzUwOSwgNzM1MTMsIAotICAgIDczNTE3LCA3MzUyMSwgNzM1MjUsIDczNTI5LCA3MzUzMywgNzM1MzcsIDczNTQxLCA3MzU0NSwgNzM1NTAsIDczNTU1LCAKLSAgICA3MzU2MSwgNzM1NjcsIDczNTc0LCA3MzU3OSwgNzM1ODQsIDczNTkwLCA3MzU5NCwgNzM1OTksIDczNjAyLCAwLCAwLCAwLCAKLSAgICAwLCA3MzYwNSwgNzM2MTIsIDczNjE4LCA3MzYyNCwgNzM2MzAsIDczNjM2LCA3MzY0MiwgNzM2NDgsIDczNjU0LCA3MzY2MCwgCi0gICAgNzM2NjYsIDczNjcyLCA3MzY3OSwgNzM2ODYsIDczNjkzLCA3MzY5OSwgNzM3MDYsIDczNzEzLCA3MzcyMCwgNzM3MjcsIAotICAgIDczNzM0LCA3Mzc0MCwgNzM3NDYsIDczNzUzLCA3Mzc1OSwgNzM3NjYsIDczNzczLCA3Mzc3OSwgNzM3ODUsIDczNzkyLCAKLSAgICA3Mzc5OSwgNzM4MDYsIDczODEyLCA3MzgxOSwgNzM4MjYsIDczODMyLCA3MzgzOSwgNzM4NDUsIDczODUyLCA3Mzg1OSwgCi0gICAgNzM4NjUsIDczODcxLCA3Mzg3OCwgNzM4ODQsIDczODkxLCA3Mzg5OCwgNzM5MDcsIDczOTE0LCA3MzkyMSwgNzM5MjUsIAotICAgIDczOTMwLCA3MzkzNSwgNzM5NDAsIDczOTQ1LCA3Mzk0OSwgNzM5NTMsIDczOTU4LCA3Mzk2MiwgNzM5NjcsIDczOTcyLCAKLSAgICA3Mzk3NywgNzM5ODEsIDczOTg1LCA3Mzk5MCwgNzM5OTQsIDczOTk5LCA3NDAwMywgNzQwMDgsIDc0MDEzLCA3NDAxOCwgCi0gICAgNzQwMjMsIDc0MDI3LCA3NDAzMiwgNzQwMzcsIDc0MDQyLCA3NDA0OCwgNzQwNTMsIDc0MDU5LCA3NDA2NSwgNzQwNzEsIAotICAgIDc0MDc3LCA3NDA4MywgNzQwODgsIDc0MDk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDA5OCwgCi0gICAgNzQxMDMsIDc0MTA3LCA3NDExMSwgNzQxMTUsIDc0MTE5LCA3NDEyMywgNzQxMjcsIDc0MTMxLCA3NDEzNSwgNzQxMzksIAotICAgIDc0MTQzLCA3NDE0NywgNzQxNTEsIDc0MTU1LCA3NDE1OSwgNzQxNjMsIDc0MTY3LCA3NDE3MSwgNzQxNzUsIDc0MTc5LCAKLSAgICA3NDE4MywgNzQxODcsIDc0MTkxLCA3NDE5NSwgNzQxOTksIDc0MjAzLCA3NDIwNywgNzQyMTEsIDc0MjE1LCAwLCAwLCAwLCAKLSAgICA3NDIxOSwgNzQyMjMsIDc0MjI3LCA3NDIzMSwgNzQyMzUsIDc0MjM4LCA3NDI0NCwgNzQyNDcsIDc0MjUxLCA3NDI1NCwgCi0gICAgNzQyNjAsIDc0MjY2LCA3NDI3NCwgNzQyNzcsIDc0MjgxLCA3NDI4NCwgNzQyODcsIDc0MjkzLCA3NDI5OSwgNzQzMDMsIAotICAgIDc0MzA5LCA3NDMxMywgNzQzMTcsIDc0MzIzLCA3NDMyNywgNzQzMzMsIDc0MzM5LCA3NDM0MywgNzQzNDcsIDc0MzUzLCAKLSAgICA3NDM1NywgNzQzNjMsIDc0MzY5LCA3NDM3MywgNzQzNzksIDc0MzgzLCA3NDM4OSwgNzQzOTIsIDc0Mzk1LCA3NDQwMSwgCi0gICAgNzQ0MDUsIDc0NDExLCA3NDQxNCwgNzQ0MTcsIDc0NDIwLCA3NDQyNiwgNzQ0MzAsIDc0NDM0LCA3NDQ0MCwgNzQ0NDYsIAotICAgIDc0NDQ5LCA3NDQ1MiwgNzQ0NTgsIDc0NDYzLCA3NDQ2OCwgNzQ0NzMsIDc0NDgwLCA3NDQ4NSwgNzQ0OTIsIDc0NDk3LCAKLSAgICA3NDUwNCwgNzQ1MDksIDc0NTE0LCA3NDUxOSwgNzQ1MjQsIDc0NTI3LCA3NDUzMSwgNzQ1MzUsIDc0NTQwLCA3NDU0NSwgCi0gICAgNzQ1NTAsIDc0NTU1LCA3NDU2MCwgNzQ1NjUsIDc0NTcwLCA3NDU3NSwgNzQ1ODIsIDc0NTg3LCAwLCA3NDU5NCwgNzQ1OTcsIAotICAgIDc0NjAxLCA3NDYwNCwgNzQ2MDcsIDc0NjEwLCA3NDYxMywgNzQ2MTYsIDc0NjE5LCA3NDYyMiwgNzQ2MjUsIDAsIDAsIDAsIAotICAgIDAsIDc0NjI4LCA3NDYzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ2NDAsIDc0NjQzLCA3NDY0NiwgNzQ2NDksIDc0NjUyLCAKLSAgICA3NDY1NiwgNzQ2NTksIDc0NjYyLCA3NDY2NiwgNzQ2NzAsIDc0Njc0LCA3NDY3OCwgNzQ2ODIsIDc0Njg2LCA3NDY5MCwgCi0gICAgNzQ2OTQsIDc0Njk4LCA3NDcwMiwgNzQ3MDYsIDc0NzEwLCA3NDcxNCwgNzQ3MTgsIDc0NzIyLCA3NDcyNiwgNzQ3MzAsIAotICAgIDc0NzMzLCA3NDczNywgNzQ3NDAsIDc0NzQ0LCA3NDc0OCwgNzQ3NTIsIDc0NzU2LCA3NDc2MCwgNzQ3NjMsIDc0NzY3LCAKLSAgICA3NDc3MCwgNzQ3NzMsIDc0Nzc3LCA3NDc4MSwgNzQ3ODUsIDc0Nzg4LCA3NDc5MSwgNzQ3OTYsIDc0ODAwLCA3NDgwNSwgCi0gICAgNzQ4MTAsIDc0ODE0LCA3NDgxOSwgNzQ4MjMsIDc0ODI4LCA3NDgzMywgNzQ4MzgsIDc0ODQyLCA3NDg0NiwgNzQ4NTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0ODU2LCA3NDg2MSwgNzQ4NjYsIDc0ODcxLCA3NDg3NywgNzQ4ODIsIDc0ODg3LCAKLSAgICA3NDg5MiwgNzQ4OTcsIDc0OTAyLCA3NDkwNiwgNzQ5MTAsIDc0OTE1LCA3NDkyMCwgMCwgMCwgNzQ5MjYsIDc0OTMwLCAKLSAgICA3NDkzMywgNzQ5MzYsIDc0OTM5LCA3NDk0MiwgNzQ5NDUsIDc0OTQ4LCA3NDk1MSwgNzQ5NTQsIDAsIDAsIDc0OTU3LCAKLSAgICA3NDk2MiwgNzQ5NjcsIDc0OTczLCA3NDk4MCwgNzQ5ODYsIDc0OTkyLCA3NDk5OCwgNzUwMDQsIDc1MDEwLCA3NTAxNiwgCi0gICAgNzUwMjIsIDc1MDI4LCA3NTAzNCwgNzUwNDAsIDc1MDQ2LCA3NTA1MSwgNzUwNTYsIDc1MDYxLCA3NTA2NywgNzUwNzMsIAotICAgIDc1MDgwLCA3NTA4NiwgNzUwOTIsIDc1MDk3LCA3NTEwNCwgNzUxMTEsIDc1MTE4LCA3NTEyNCwgNzUxMjksIDc1MTM0LCAKLSAgICA3NTEzOSwgMCwgMCwgMCwgMCwgNzUxNDcsIDc1MTUzLCA3NTE1OSwgNzUxNjUsIDc1MTcxLCA3NTE3NywgNzUxODMsIAotICAgIDc1MTg5LCA3NTE5NSwgNzUyMDEsIDc1MjA3LCA3NTIxMywgNzUyMTksIDc1MjI1LCA3NTIzMSwgNzUyMzcsIDc1MjQzLCAKLSAgICA3NTI0OSwgNzUyNTUsIDc1MjYxLCA3NTI2NywgNzUyNzIsIDc1Mjc3LCA3NTI4MywgNzUyODksIDc1Mjk1LCA3NTMwMSwgCi0gICAgNzUzMDcsIDc1MzEzLCA3NTMxOSwgNzUzMjUsIDc1MzMxLCA3NTMzNywgNzUzNDMsIDc1MzQ5LCA3NTM1NSwgNzUzNjEsIAotICAgIDc1MzY3LCA3NTM3MywgNzUzNzksIDc1Mzg1LCA3NTM5MSwgNzUzOTcsIDc1NDAzLCA3NTQwOSwgNzU0MTUsIDc1NDIxLCAKLSAgICA3NTQyNiwgNzU0MzEsIDc1NDM3LCA3NTQ0MiwgNzU0NDYsIDc1NDUxLCA3NTQ1NSwgNzU0NTksIDc1NDYzLCA3NTQ2OSwgCi0gICAgNzU0NzQsIDc1NDc5LCA3NTQ4NCwgNzU0ODksIDc1NDk0LCA3NTQ5OSwgNzU1MDQsIDc1NTExLCA3NTUxOCwgNzU1MjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNDYyLCA3MjQ2OSwgNzI0NzUsIDcyNDgyLCA3MjQ5MCwgNzI0OTgsIAorICAgIDcyNTA1LCA3MjUxMywgNzI1MjAsIDcyNTI2LCA3MjUzMiwgNzI1MzksIDcyNTQ1LCA3MjU1MSwgNzI1NTcsIDcyNTY0LCAKKyAgICA3MjU3MSwgNzI1NzgsIDcyNTg1LCA3MjU5MiwgNzI1OTksIDcyNjA2LCA3MjYxMywgNzI2MjAsIDcyNjI3LCA3MjYzNCwgCisgICAgNzI2NDEsIDcyNjQ4LCA3MjY1NSwgNzI2NjEsIDcyNjY4LCA3MjY3NSwgNzI2ODIsIDcyNjg5LCA3MjY5NiwgNzI3MDMsIAorICAgIDcyNzEwLCA3MjcxNywgNzI3MjQsIDcyNzMxLCA3MjczOCwgNzI3NDUsIDcyNzUyLCA3Mjc1OSwgNzI3NjYsIDcyNzczLCAKKyAgICA3Mjc4MCwgNzI3ODcsIDcyNzk1LCA3MjgwMywgNzI4MTEsIDcyODE5LCAwLCAwLCAwLCAwLCA3MjgyNywgNzI4MzYsIAorICAgIDcyODQ1LCA3Mjg1NCwgNzI4NjMsIDcyODcyLCA3Mjg4MSwgNzI4ODgsIDcyODk1LCA3MjkwMiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzI5MDksIDcyOTEzLCA3MjkxOCwgNzI5MjMsIDcyOTI4LCA3MjkzMywgNzI5MzgsIDcyOTQzLCA3Mjk0OCwgNzI5NTMsIAorICAgIDcyOTU4LCA3Mjk2MywgNzI5NjcsIDcyOTcxLCA3Mjk3NiwgNzI5ODEsIDcyOTg1LCA3Mjk5MCwgNzI5OTUsIDczMDAwLCAKKyAgICA3MzAwNSwgNzMwMTAsIDczMDE1LCA3MzAyMCwgNzMwMjQsIDczMDI4LCA3MzAzMywgNzMwMzgsIDczMDQyLCA3MzA0NiwgCisgICAgNzMwNTAsIDczMDU0LCA3MzA1OCwgNzMwNjIsIDczMDY2LCA3MzA3MSwgNzMwNzYsIDczMDgxLCA3MzA4NiwgNzMwOTEsIAorICAgIDczMDk4LCA3MzEwNCwgNzMxMDksIDczMTE0LCA3MzExOSwgNzMxMjQsIDczMTMwLCA3MzEzNywgNzMxNDMsIDczMTUwLCAKKyAgICA3MzE1NiwgNzMxNjIsIDczMTY3LCA3MzE3NCwgNzMxODAsIDczMTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzE5MSwgCisgICAgNzMxOTUsIDczMTk5LCA3MzIwMiwgNzMyMDYsIDczMjA5LCA3MzIxMywgNzMyMTYsIDczMjIwLCA3MzIyNCwgNzMyMjksIAorICAgIDczMjMzLCA3MzIzOCwgNzMyNDEsIDczMjQ1LCA3MzI0OSwgNzMyNTIsIDczMjU2LCA3MzI2MCwgNzMyNjMsIDczMjY3LCAKKyAgICA3MzI3MSwgNzMyNzUsIDczMjc5LCA3MzI4MywgNzMyODcsIDczMjkxLCA3MzI5NSwgNzMyOTksIDczMzAzLCA3MzMwNywgCisgICAgNzMzMTEsIDczMzE1LCA3MzMxOSwgNzMzMjMsIDczMzI3LCA3MzMzMSwgNzMzMzUsIDczMzM4LCA3MzM0MSwgNzMzNDUsIAorICAgIDczMzQ5LCA3MzM1MywgNzMzNTYsIDczMzU5LCA3MzM2MiwgNzMzNjYsIDczMzcwLCA3MzM3NCwgNzMzNzgsIDczMzgxLCAKKyAgICA3MzM4NCwgNzMzODgsIDczMzkzLCA3MzM5OCwgNzM0MDIsIDczNDA3LCA3MzQxMSwgNzM0MTYsIDczNDIxLCA3MzQyNywgCisgICAgNzM0MzIsIDczNDM4LCA3MzQ0MiwgNzM0NDcsIDczNDUyLCA3MzQ1NiwgNzM0NjEsIDczNDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3MzQ3MCwgNzM0NzMsIDczNDc3LCA3MzQ4MSwgNzM0ODQsIDczNDg3LCA3MzQ5MCwgNzM0OTMsIDczNDk2LCAKKyAgICA3MzQ5OSwgNzM1MDIsIDczNTA1LCAwLCAwLCAwLCAwLCAwLCAwLCA3MzUwOCwgNzM1MTMsIDczNTE3LCA3MzUyMSwgNzM1MjUsIAorICAgIDczNTI5LCA3MzUzMywgNzM1MzcsIDczNTQxLCA3MzU0NSwgNzM1NDksIDczNTUzLCA3MzU1NywgNzM1NjEsIDczNTY1LCAKKyAgICA3MzU2OSwgNzM1NzMsIDczNTc4LCA3MzU4MywgNzM1ODksIDczNTk1LCA3MzYwMiwgNzM2MDcsIDczNjEyLCA3MzYxOCwgCisgICAgNzM2MjIsIDczNjI3LCA3MzYzMCwgMCwgMCwgMCwgMCwgNzM2MzMsIDczNjQwLCA3MzY0NiwgNzM2NTIsIDczNjU4LCAKKyAgICA3MzY2NCwgNzM2NzAsIDczNjc2LCA3MzY4MiwgNzM2ODgsIDczNjk0LCA3MzcwMCwgNzM3MDcsIDczNzE0LCA3MzcyMSwgCisgICAgNzM3MjcsIDczNzM0LCA3Mzc0MSwgNzM3NDgsIDczNzU1LCA3Mzc2MiwgNzM3NjgsIDczNzc0LCA3Mzc4MSwgNzM3ODcsIAorICAgIDczNzk0LCA3MzgwMSwgNzM4MDcsIDczODEzLCA3MzgyMCwgNzM4MjcsIDczODM0LCA3Mzg0MCwgNzM4NDcsIDczODU0LCAKKyAgICA3Mzg2MCwgNzM4NjcsIDczODczLCA3Mzg4MCwgNzM4ODcsIDczODkzLCA3Mzg5OSwgNzM5MDYsIDczOTEyLCA3MzkxOSwgCisgICAgNzM5MjYsIDczOTM1LCA3Mzk0MiwgNzM5NDksIDczOTUzLCA3Mzk1OCwgNzM5NjMsIDczOTY4LCA3Mzk3MywgNzM5NzcsIAorICAgIDczOTgxLCA3Mzk4NiwgNzM5OTAsIDczOTk1LCA3NDAwMCwgNzQwMDUsIDc0MDA5LCA3NDAxMywgNzQwMTgsIDc0MDIyLCAKKyAgICA3NDAyNywgNzQwMzEsIDc0MDM2LCA3NDA0MSwgNzQwNDYsIDc0MDUxLCA3NDA1NSwgNzQwNjAsIDc0MDY1LCA3NDA3MCwgCisgICAgNzQwNzYsIDc0MDgxLCA3NDA4NywgNzQwOTMsIDc0MDk5LCA3NDEwNSwgNzQxMTEsIDc0MTE2LCA3NDEyMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQxMjYsIDc0MTMxLCA3NDEzNSwgNzQxMzksIDc0MTQzLCA3NDE0NywgNzQxNTEsIAorICAgIDc0MTU1LCA3NDE1OSwgNzQxNjMsIDc0MTY3LCA3NDE3MSwgNzQxNzUsIDc0MTc5LCA3NDE4MywgNzQxODcsIDc0MTkxLCAKKyAgICA3NDE5NSwgNzQxOTksIDc0MjAzLCA3NDIwNywgNzQyMTEsIDc0MjE1LCA3NDIxOSwgNzQyMjMsIDc0MjI3LCA3NDIzMSwgCisgICAgNzQyMzUsIDc0MjM5LCA3NDI0MywgMCwgMCwgMCwgNzQyNDcsIDc0MjUxLCA3NDI1NSwgNzQyNTksIDc0MjYzLCA3NDI2NiwgCisgICAgNzQyNzIsIDc0Mjc1LCA3NDI3OSwgNzQyODIsIDc0Mjg4LCA3NDI5NCwgNzQzMDIsIDc0MzA1LCA3NDMwOSwgNzQzMTIsIAorICAgIDc0MzE1LCA3NDMyMSwgNzQzMjcsIDc0MzMxLCA3NDMzNywgNzQzNDEsIDc0MzQ1LCA3NDM1MSwgNzQzNTUsIDc0MzYxLCAKKyAgICA3NDM2NywgNzQzNzEsIDc0Mzc1LCA3NDM4MSwgNzQzODUsIDc0MzkxLCA3NDM5NywgNzQ0MDEsIDc0NDA3LCA3NDQxMSwgCisgICAgNzQ0MTcsIDc0NDIwLCA3NDQyMywgNzQ0MjksIDc0NDMzLCA3NDQzOSwgNzQ0NDIsIDc0NDQ1LCA3NDQ0OCwgNzQ0NTQsIAorICAgIDc0NDU4LCA3NDQ2MiwgNzQ0NjgsIDc0NDc0LCA3NDQ3NywgNzQ0ODAsIDc0NDg2LCA3NDQ5MSwgNzQ0OTYsIDc0NTAxLCAKKyAgICA3NDUwOCwgNzQ1MTMsIDc0NTIwLCA3NDUyNSwgNzQ1MzIsIDc0NTM3LCA3NDU0MiwgNzQ1NDcsIDc0NTUyLCA3NDU1NSwgCisgICAgNzQ1NTksIDc0NTYzLCA3NDU2OCwgNzQ1NzMsIDc0NTc4LCA3NDU4MywgNzQ1ODgsIDc0NTkzLCA3NDU5OCwgNzQ2MDMsIAorICAgIDc0NjEwLCA3NDYxNSwgMCwgNzQ2MjIsIDc0NjI1LCA3NDYyOSwgNzQ2MzIsIDc0NjM1LCA3NDYzOCwgNzQ2NDEsIDc0NjQ0LCAKKyAgICA3NDY0NywgNzQ2NTAsIDc0NjUzLCAwLCAwLCAwLCAwLCA3NDY1NiwgNzQ2NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc1NTMyLCA3NTUzNywgNzU1NDIsIDc1NTQ3LCA3NTU1NCwgNzU1NjEsIDc1NTY1LCA3NTU2OSwgNzU1NzQsIDc1NTc5LCAKLSAgICA3NTU4NCwgNzU1ODksIDc1NTk0LCA3NTU5OSwgNzU2MDQsIDc1NjA5LCA3NTYxNCwgNzU2MjAsIDc1NjI2LCA3NTYzMiwgCi0gICAgNzU2MzgsIDc1NjQ0LCA3NTY0OCwgNzU2NTQsIDc1NjU4LCA3NTY2NCwgNzU2NzEsIDc1Njc3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NTY4MSwgNzU2ODUsIDc1Njg5LCA3NTY5MywgNzU2OTcsIDc1NzAxLCAwLCAwLCA3NTcwNSwgNzU3MDksIAotICAgIDc1NzEzLCA3NTcxNywgNzU3MjEsIDc1NzI1LCAwLCAwLCA3NTcyOSwgNzU3MzMsIDc1NzM3LCA3NTc0MSwgNzU3NDUsIAotICAgIDc1NzQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTc1MywgNzU3NTcsIDc1NzYxLCA3NTc2NSwgNzU3NjksIAotICAgIDc1NzczLCA3NTc3NywgMCwgNzU3ODEsIDc1Nzg1LCA3NTc4OSwgNzU3OTMsIDc1Nzk3LCA3NTgwMSwgNzU4MDUsIDAsIDAsIAorICAgIDc0NjY4LCA3NDY3MSwgNzQ2NzQsIDc0Njc3LCA3NDY4MCwgNzQ2ODQsIDc0Njg3LCA3NDY5MCwgNzQ2OTQsIDc0Njk4LCAKKyAgICA3NDcwMiwgNzQ3MDYsIDc0NzEwLCA3NDcxNCwgNzQ3MTgsIDc0NzIyLCA3NDcyNiwgNzQ3MzAsIDc0NzM0LCA3NDczOCwgCisgICAgNzQ3NDIsIDc0NzQ2LCA3NDc1MCwgNzQ3NTQsIDc0NzU4LCA3NDc2MSwgNzQ3NjUsIDc0NzY4LCA3NDc3MiwgNzQ3NzYsIAorICAgIDc0NzgwLCA3NDc4NCwgNzQ3ODgsIDc0NzkxLCA3NDc5NSwgNzQ3OTgsIDc0ODAxLCA3NDgwNSwgNzQ4MDksIDc0ODEzLCAKKyAgICA3NDgxNiwgNzQ4MTksIDc0ODI0LCA3NDgyOCwgNzQ4MzMsIDc0ODM4LCA3NDg0MiwgNzQ4NDcsIDc0ODUxLCA3NDg1NiwgCisgICAgNzQ4NjEsIDc0ODY2LCA3NDg3MCwgNzQ4NzQsIDc0ODc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDg4NCwgCisgICAgNzQ4ODksIDc0ODk0LCA3NDg5OSwgNzQ5MDUsIDc0OTEwLCA3NDkxNSwgNzQ5MjAsIDc0OTI1LCA3NDkzMCwgNzQ5MzQsIAorICAgIDc0OTM4LCA3NDk0MywgNzQ5NDgsIDAsIDAsIDc0OTU0LCA3NDk1OCwgNzQ5NjEsIDc0OTY0LCA3NDk2NywgNzQ5NzAsIAorICAgIDc0OTczLCA3NDk3NiwgNzQ5NzksIDc0OTgyLCAwLCAwLCA3NDk4NSwgNzQ5OTAsIDc0OTk1LCA3NTAwMSwgNzUwMDgsIAorICAgIDc1MDE0LCA3NTAyMCwgNzUwMjYsIDc1MDMyLCA3NTAzOCwgNzUwNDQsIDc1MDUwLCA3NTA1NiwgNzUwNjIsIDc1MDY4LCAKKyAgICA3NTA3NCwgNzUwNzksIDc1MDg0LCA3NTA4OSwgNzUwOTUsIDc1MTAxLCA3NTEwOCwgNzUxMTQsIDc1MTIwLCA3NTEyNSwgCisgICAgNzUxMzIsIDc1MTM5LCA3NTE0NiwgNzUxNTIsIDc1MTU3LCA3NTE2MiwgNzUxNjcsIDAsIDAsIDAsIDAsIDc1MTc1LCAKKyAgICA3NTE4MSwgNzUxODcsIDc1MTkzLCA3NTE5OSwgNzUyMDUsIDc1MjExLCA3NTIxNywgNzUyMjMsIDc1MjI5LCA3NTIzNSwgCisgICAgNzUyNDEsIDc1MjQ3LCA3NTI1MywgNzUyNTksIDc1MjY1LCA3NTI3MSwgNzUyNzcsIDc1MjgzLCA3NTI4OSwgNzUyOTUsIAorICAgIDc1MzAwLCA3NTMwNSwgNzUzMTEsIDc1MzE3LCA3NTMyMywgNzUzMjksIDc1MzM1LCA3NTM0MSwgNzUzNDcsIDc1MzUzLCAKKyAgICA3NTM1OSwgNzUzNjUsIDc1MzcxLCA3NTM3NywgNzUzODMsIDc1Mzg5LCA3NTM5NSwgNzU0MDEsIDc1NDA3LCA3NTQxMywgCisgICAgNzU0MTksIDc1NDI1LCA3NTQzMSwgNzU0MzcsIDc1NDQzLCA3NTQ0OSwgNzU0NTQsIDc1NDU5LCA3NTQ2NSwgNzU0NzAsIAorICAgIDc1NDc0LCA3NTQ3OSwgNzU0ODMsIDc1NDg3LCA3NTQ5MSwgNzU0OTcsIDc1NTAyLCA3NTUwNywgNzU1MTIsIDc1NTE3LCAKKyAgICA3NTUyMiwgNzU1MjcsIDc1NTMyLCA3NTUzOSwgNzU1NDYsIDc1NTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTU2MCwgNzU1NjUsIDc1NTcwLCA3NTU3NSwgCisgICAgNzU1ODIsIDc1NTg5LCA3NTU5MywgNzU1OTcsIDc1NjAyLCA3NTYwNywgNzU2MTIsIDc1NjE3LCA3NTYyMiwgNzU2MjcsIAorICAgIDc1NjMyLCA3NTYzNywgNzU2NDIsIDc1NjQ4LCA3NTY1NCwgNzU2NjAsIDc1NjY2LCA3NTY3MiwgNzU2NzYsIDc1NjgyLCAKKyAgICA3NTY4NiwgNzU2OTIsIDc1Njk5LCA3NTcwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU3MDksIDc1NzEzLCAKKyAgICA3NTcxNywgNzU3MjEsIDc1NzI1LCA3NTcyOSwgMCwgMCwgNzU3MzMsIDc1NzM3LCA3NTc0MSwgNzU3NDUsIDc1NzQ5LCAKKyAgICA3NTc1MywgMCwgMCwgNzU3NTcsIDc1NzYxLCA3NTc2NSwgNzU3NjksIDc1NzczLCA3NTc3NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzU3ODEsIDc1Nzg1LCA3NTc4OSwgNzU3OTMsIDc1Nzk3LCA3NTgwMSwgNzU4MDUsIDAsIDc1ODA5LCAKKyAgICA3NTgxMywgNzU4MTcsIDc1ODIxLCA3NTgyNSwgNzU4MjksIDc1ODMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3NTgwOSwgNzU4MTQsIDc1ODE5LCA3NTgyNCwgNzU4MjksIDc1ODMzLCA3NTgzNywgNzU4NDIsIDc1ODQ3LCA3NTg1MiwgCi0gICAgNzU4NTcsIDc1ODYyLCA3NTg2NywgNzU4NzIsIDc1ODc3LCA3NTg4MiwgNzU4ODYsIDc1ODkxLCA3NTg5NiwgNzU5MDEsIAotICAgIDc1OTA2LCA3NTkxMSwgNzU5MTYsIDc1OTIxLCA3NTkyNiwgNzU5MzEsIDc1OTM2LCA3NTk0MSwgNzU5NDgsIDc1OTU1LCAKLSAgICA3NTk2MiwgNzU5NjksIDc1OTc2LCA3NTk4MywgNzU5OTAsIDc1OTk3LCA3NjAwMywgNzYwMDksIDc2MDE1LCA3NjAyMSwgCi0gICAgNzYwMjcsIDc2MDMzLCA3NjAzOSwgNzYwNDUsIDc2MDQ5LCA3NjA1NSwgMCwgMCwgNzYwNjEsIDc2MDY2LCA3NjA3MCwgCi0gICAgNzYwNzQsIDc2MDc4LCA3NjA4MiwgNzYwODYsIDc2MDkwLCA3NjA5NCwgNzYwOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1ODM3LCA3NTg0MiwgNzU4NDcsIDc1ODUyLCAKKyAgICA3NTg1NywgNzU4NjEsIDc1ODY1LCA3NTg3MCwgNzU4NzUsIDc1ODgwLCA3NTg4NSwgNzU4OTAsIDc1ODk1LCA3NTkwMCwgCisgICAgNzU5MDUsIDc1OTEwLCA3NTkxNCwgNzU5MTksIDc1OTI0LCA3NTkyOSwgNzU5MzQsIDc1OTM5LCA3NTk0NCwgNzU5NDksIAorICAgIDc1OTU0LCA3NTk1OSwgNzU5NjQsIDc1OTY5LCA3NTk3NiwgNzU5ODMsIDc1OTkwLCA3NTk5NywgNzYwMDQsIDc2MDExLCAKKyAgICA3NjAxOCwgNzYwMjUsIDc2MDMxLCA3NjAzNywgNzYwNDMsIDc2MDQ5LCA3NjA1NSwgNzYwNjEsIDc2MDY3LCA3NjA3MywgCisgICAgNzYwNzcsIDc2MDgzLCAwLCAwLCA3NjA4OSwgNzYwOTQsIDc2MDk4LCA3NjEwMiwgNzYxMDYsIDc2MTEwLCA3NjExNCwgCisgICAgNzYxMTgsIDc2MTIyLCA3NjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxMDIsIAotICAgIDc2MTA2LCA3NjExMCwgNzYxMTQsIDc2MTE4LCA3NjEyMiwgNzYxMjYsIDc2MTMwLCA3NjEzNCwgNzYxMzgsIDc2MTQyLCAKLSAgICA3NjE0NiwgNzYxNTAsIDc2MTU0LCA3NjE1OCwgNzYxNjIsIDc2MTY2LCA3NjE3MCwgNzYxNzQsIDc2MTc4LCA3NjE4MiwgCi0gICAgNzYxODYsIDc2MTkwLCAwLCAwLCAwLCAwLCA3NjE5NCwgNzYxOTgsIDc2MjAyLCA3NjIwNiwgNzYyMTAsIDc2MjE0LCAKLSAgICA3NjIxOCwgNzYyMjIsIDc2MjI2LCA3NjIzMCwgNzYyMzQsIDc2MjM4LCA3NjI0MiwgNzYyNDYsIDc2MjUwLCA3NjI1NCwgCi0gICAgNzYyNTgsIDc2MjYyLCA3NjI2NiwgNzYyNzAsIDc2Mjc0LCA3NjI3OCwgNzYyODIsIDc2Mjg2LCA3NjI5MCwgNzYyOTQsIAotICAgIDc2Mjk4LCA3NjMwMiwgNzYzMDYsIDc2MzEwLCA3NjMxNCwgNzYzMTgsIDc2MzIyLCA3NjMyNiwgNzYzMzAsIDc2MzM0LCAKLSAgICA3NjMzOCwgNzYzNDIsIDc2MzQ2LCA3NjM1MCwgNzYzNTQsIDc2MzU4LCA3NjM2MiwgNzYzNjYsIDc2MzcwLCA3NjM3NCwgCi0gICAgNzYzNzgsIDc2MzgyLCA3NjM4NiwgMCwgMCwgMCwgMCwgNzYzOTAsIDc2Mzk0LCA3NjM5OCwgNzY0MDIsIDc2NDA2LCAKLSAgICA3NjQxMCwgNzY0MTQsIDc2NDE4LCA3NjQyMiwgNzY0MjYsIDc2NDMwLCA3NjQzNCwgNzY0MzgsIDc2NDQyLCA3NjQ0NiwgCi0gICAgNzY0NTAsIDc2NDU0LCA3NjQ1OCwgNzY0NjIsIDc2NDY2LCA3NjQ3MCwgNzY0NzQsIDc2NDc4LCA3NjQ4MiwgNzY0ODYsIAotICAgIDc2NDkwLCA3NjQ5NCwgNzY0OTgsIDc2NTAyLCA3NjUwNiwgNzY1MTAsIDc2NTE0LCA3NjUxOCwgNzY1MjIsIDc2NTI2LCAKLSAgICA3NjUzMCwgNzY1MzQsIDc2NTM4LCA3NjU0MiwgNzY1NDYsIDc2NTUwLCA3NjU1NCwgNzY1NTgsIDc2NTYyLCA3NjU2NiwgCi0gICAgNzY1NzAsIDc2NTc0LCA3NjU3OCwgNzY1ODIsIDc2NTg2LCA3NjU5MCwgNzY1OTQsIDc2NTk4LCA3NjYwMiwgNzY2MDYsIAotICAgIDc2NjEwLCA3NjYxNCwgNzY2MTgsIDc2NjIyLCA3NjYyNiwgNzY2MzAsIDc2NjM0LCA3NjYzOCwgNzY2NDIsIDc2NjQ2LCAKLSAgICA3NjY1MCwgNzY2NTQsIDc2NjU4LCA3NjY2MiwgNzY2NjYsIDc2NjcwLCA3NjY3NCwgNzY2NzgsIDc2NjgyLCA3NjY4NiwgCi0gICAgNzY2OTAsIDc2Njk0LCA3NjY5OCwgNzY3MDIsIDc2NzA2LCA3NjcxMCwgNzY3MTQsIDc2NzE4LCA3NjcyMiwgNzY3MjYsIAotICAgIDc2NzMwLCA3NjczNCwgNzY3MzgsIDc2NzQyLCA3Njc0NiwgNzY3NTAsIDc2NzU0LCA3Njc1OCwgNzY3NjIsIDc2NzY2LCAKLSAgICA3Njc3MCwgNzY3NzQsIDc2Nzc4LCA3Njc4MiwgNzY3ODYsIDc2NzkwLCA3Njc5NCwgNzY3OTgsIDc2ODAyLCA3NjgwNiwgCi0gICAgNzY4MTAsIDc2ODE0LCA3NjgxOCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzQsIDc2ODM4LCA3Njg0MiwgNzY4NDYsIAotICAgIDc2ODUwLCA3Njg1NCwgNzY4NTgsIDc2ODYyLCA3Njg2NiwgNzY4NzAsIDc2ODc0LCA3Njg3OCwgNzY4ODIsIDc2ODg2LCAKLSAgICA3Njg5MCwgNzY4OTQsIDc2ODk4LCA3NjkwMiwgNzY5MDYsIDc2OTEwLCA3NjkxNCwgNzY5MTgsIDc2OTIyLCA3NjkyNiwgCi0gICAgNzY5MzAsIDc2OTM0LCA3NjkzOCwgNzY5NDIsIDc2OTQ2LCA3Njk1MCwgNzY5NTQsIDc2OTU4LCA3Njk2MiwgNzY5NjYsIAotICAgIDc2OTcwLCA3Njk3NCwgNzY5NzgsIDc2OTgyLCA3Njk4NiwgNzY5OTAsIDc2OTk0LCA3Njk5OCwgNzcwMDIsIDc3MDA2LCAKLSAgICA3NzAxMCwgNzcwMTQsIDc3MDE4LCA3NzAyMiwgNzcwMjYsIDc3MDMwLCA3NzAzNCwgNzcwMzgsIDc3MDQyLCA3NzA0NiwgCi0gICAgNzcwNTAsIDc3MDU0LCA3NzA1OCwgNzcwNjIsIDc3MDY2LCA3NzA3MCwgNzcwNzQsIDc3MDc4LCA3NzA4MiwgNzcwODYsIAotICAgIDc3MDkwLCA3NzA5NCwgNzcwOTgsIDc3MTAyLCA3NzEwNiwgNzcxMTAsIDc3MTE0LCA3NzExOCwgNzcxMjIsIDc3MTI2LCAKLSAgICA3NzEzMCwgNzcxMzQsIDc3MTM4LCA3NzE0MiwgNzcxNDYsIDc3MTUwLCA3NzE1NCwgNzcxNTgsIDc3MTYyLCA3NzE2NiwgCi0gICAgNzcxNzAsIDc3MTc0LCA3NzE3OCwgNzcxODIsIDc3MTg2LCA3NzE5MCwgNzcxOTQsIDc3MTk4LCA3NzIwMiwgNzcyMDYsIAotICAgIDc3MjEwLCA3NzIxNCwgNzcyMTgsIDc3MjIyLCA3NzIyNiwgNzcyMzAsIDc3MjM0LCA3NzIzOCwgNzcyNDIsIDc3MjQ2LCAKLSAgICA3NzI1MCwgNzcyNTQsIDc3MjU4LCA3NzI2MiwgNzcyNjYsIDc3MjcwLCA3NzI3NCwgNzcyNzgsIDc3MjgyLCA3NzI4NiwgCi0gICAgNzcyOTAsIDc3Mjk0LCA3NzI5OCwgNzczMDIsIDc3MzA2LCA3NzMxMCwgNzczMTQsIDc3MzE4LCA3NzMyMiwgNzczMjYsIAotICAgIDc3MzMwLCA3NzMzNCwgNzczMzgsIDc3MzQyLCA3NzM0NiwgNzczNTAsIDc3MzU0LCA3NzM1OCwgNzczNjIsIDc3MzY2LCAKLSAgICA3NzM3MCwgNzczNzQsIDc3Mzc4LCA3NzM4MiwgNzczODYsIDc3MzkwLCA3NzM5NCwgNzczOTgsIDc3NDAyLCA3NzQwNiwgCi0gICAgNzc0MTAsIDc3NDE0LCA3NzQxOCwgNzc0MjIsIDc3NDI2LCA3NzQzMCwgNzc0MzQsIDc3NDM4LCA3NzQ0MiwgNzc0NDYsIAotICAgIDc3NDUwLCA3NzQ1NCwgNzc0NTgsIDc3NDYyLCA3NzQ2NiwgNzc0NzAsIDc3NDc0LCA3NzQ3OCwgNzc0ODIsIDc3NDg2LCAKLSAgICA3NzQ5MCwgNzc0OTQsIDc3NDk4LCA3NzUwMiwgNzc1MDYsIDc3NTEwLCA3NzUxNCwgNzc1MTgsIDc3NTIyLCA3NzUyNiwgCi0gICAgNzc1MzAsIDc3NTM0LCA3NzUzOCwgNzc1NDIsIDc3NTQ2LCA3NzU1MCwgNzc1NTQsIDc3NTU4LCA3NzU2MiwgNzc1NjYsIAotICAgIDc3NTcwLCA3NzU3NCwgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk0LCA3NzU5OCwgNzc2MDIsIDc3NjA2LCAKLSAgICA3NzYxMCwgNzc2MTQsIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMwLCA3NzYzNCwgNzc2MzgsIDc3NjQyLCA3NzY0NiwgCi0gICAgNzc2NTAsIDc3NjU0LCA3NzY1OCwgNzc2NjIsIDc3NjY2LCA3NzY3MCwgNzc2NzQsIDc3Njc4LCA3NzY4MiwgNzc2ODYsIAotICAgIDc3NjkwLCA3NzY5NCwgNzc2OTgsIDc3NzAyLCA3NzcwNiwgNzc3MTAsIDc3NzE0LCA3NzcxOCwgNzc3MjIsIDc3NzI2LCAKLSAgICA3NzczMCwgNzc3MzQsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NiwgCi0gICAgNzc3NzAsIDc3Nzc0LCA3Nzc3OCwgNzc3ODIsIDc3Nzg2LCA3Nzc5MCwgNzc3OTQsIDc3Nzk4LCA3NzgwMiwgNzc4MDYsIAotICAgIDc3ODEwLCA3NzgxNCwgNzc4MTgsIDc3ODIyLCA3NzgyNiwgNzc4MzAsIDc3ODM0LCA3NzgzOCwgNzc4NDIsIDc3ODQ2LCAKLSAgICA3Nzg1MCwgMCwgMCwgNzc4NTQsIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDc3ODgyLCAKLSAgICA3Nzg4NiwgNzc4OTAsIDc3ODk0LCA3Nzg5OCwgNzc5MDIsIDc3OTA2LCA3NzkxMCwgNzc5MTQsIDc3OTE4LCA3NzkyMiwgCi0gICAgNzc5MjYsIDc3OTMwLCA3NzkzNCwgNzc5MzgsIDc3OTQyLCA3Nzk0NiwgNzc5NTAsIDc3OTU0LCA3Nzk1OCwgNzc5NjIsIAotICAgIDc3OTY2LCA3Nzk3MCwgNzc5NzQsIDc3OTc4LCA3Nzk4MiwgNzc5ODYsIDc3OTkwLCA3Nzk5NCwgNzc5OTgsIDc4MDAyLCAKLSAgICA3ODAwNiwgNzgwMTAsIDc4MDE0LCA3ODAxOCwgNzgwMjIsIDc4MDI2LCA3ODAzMCwgNzgwMzQsIDc4MDM4LCA3ODA0MiwgCi0gICAgNzgwNDYsIDc4MDUwLCA3ODA1NCwgNzgwNTgsIDc4MDYyLCA3ODA2NiwgNzgwNzAsIDc4MDc0LCA3ODA3OCwgNzgwODIsIAotICAgIDc4MDg2LCA3ODA5MCwgNzgwOTQsIDc4MDk4LCA3ODEwMiwgNzgxMDYsIDc4MTEwLCA3ODExNCwgNzgxMTgsIDc4MTIyLCAKLSAgICA3ODEyNiwgNzgxMzAsIDc4MTM0LCA3ODEzOCwgNzgxNDIsIDc4MTQ2LCA3ODE1MCwgNzgxNTQsIDc4MTU4LCA3ODE2MiwgCi0gICAgNzgxNjYsIDc4MTcwLCA3ODE3NCwgNzgxNzgsIDc4MTgyLCA3ODE4NiwgNzgxOTAsIDc4MTk0LCA3ODE5OCwgNzgyMDIsIAotICAgIDc4MjA2LCA3ODIxMCwgNzgyMTQsIDc4MjE4LCA3ODIyMiwgNzgyMjYsIDc4MjMwLCA3ODIzNCwgNzgyMzgsIDc4MjQyLCAKLSAgICA3ODI0NiwgNzgyNTAsIDc4MjU0LCA3ODI1OCwgNzgyNjIsIDc4MjY2LCA3ODI3MCwgNzgyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MTMwLCA3NjEzNCwgNzYxMzgsIDc2MTQyLCA3NjE0NiwgCisgICAgNzYxNTAsIDc2MTU0LCA3NjE1OCwgNzYxNjIsIDc2MTY2LCA3NjE3MCwgNzYxNzQsIDc2MTc4LCA3NjE4MiwgNzYxODYsIAorICAgIDc2MTkwLCA3NjE5NCwgNzYxOTgsIDc2MjAyLCA3NjIwNiwgNzYyMTAsIDc2MjE0LCA3NjIxOCwgMCwgMCwgMCwgMCwgCisgICAgNzYyMjIsIDc2MjI2LCA3NjIzMCwgNzYyMzQsIDc2MjM4LCA3NjI0MiwgNzYyNDYsIDc2MjUwLCA3NjI1NCwgNzYyNTgsIAorICAgIDc2MjYyLCA3NjI2NiwgNzYyNzAsIDc2Mjc0LCA3NjI3OCwgNzYyODIsIDc2Mjg2LCA3NjI5MCwgNzYyOTQsIDc2Mjk4LCAKKyAgICA3NjMwMiwgNzYzMDYsIDc2MzEwLCA3NjMxNCwgNzYzMTgsIDc2MzIyLCA3NjMyNiwgNzYzMzAsIDc2MzM0LCA3NjMzOCwgCisgICAgNzYzNDIsIDc2MzQ2LCA3NjM1MCwgNzYzNTQsIDc2MzU4LCA3NjM2MiwgNzYzNjYsIDc2MzcwLCA3NjM3NCwgNzYzNzgsIAorICAgIDc2MzgyLCA3NjM4NiwgNzYzOTAsIDc2Mzk0LCA3NjM5OCwgNzY0MDIsIDc2NDA2LCA3NjQxMCwgNzY0MTQsIDAsIDAsIDAsIAorICAgIDAsIDc2NDE4LCA3NjQyMiwgNzY0MjYsIDc2NDMwLCA3NjQzNCwgNzY0MzgsIDc2NDQyLCA3NjQ0NiwgNzY0NTAsIDc2NDU0LCAKKyAgICA3NjQ1OCwgNzY0NjIsIDc2NDY2LCA3NjQ3MCwgNzY0NzQsIDc2NDc4LCA3NjQ4MiwgNzY0ODYsIDc2NDkwLCA3NjQ5NCwgCisgICAgNzY0OTgsIDc2NTAyLCA3NjUwNiwgNzY1MTAsIDc2NTE0LCA3NjUxOCwgNzY1MjIsIDc2NTI2LCA3NjUzMCwgNzY1MzQsIAorICAgIDc2NTM4LCA3NjU0MiwgNzY1NDYsIDc2NTUwLCA3NjU1NCwgNzY1NTgsIDc2NTYyLCA3NjU2NiwgNzY1NzAsIDc2NTc0LCAKKyAgICA3NjU3OCwgNzY1ODIsIDc2NTg2LCA3NjU5MCwgNzY1OTQsIDc2NTk4LCA3NjYwMiwgNzY2MDYsIDc2NjEwLCA3NjYxNCwgCisgICAgNzY2MTgsIDc2NjIyLCA3NjYyNiwgNzY2MzAsIDc2NjM0LCA3NjYzOCwgNzY2NDIsIDc2NjQ2LCA3NjY1MCwgNzY2NTQsIAorICAgIDc2NjU4LCA3NjY2MiwgNzY2NjYsIDc2NjcwLCA3NjY3NCwgNzY2NzgsIDc2NjgyLCA3NjY4NiwgNzY2OTAsIDc2Njk0LCAKKyAgICA3NjY5OCwgNzY3MDIsIDc2NzA2LCA3NjcxMCwgNzY3MTQsIDc2NzE4LCA3NjcyMiwgNzY3MjYsIDc2NzMwLCA3NjczNCwgCisgICAgNzY3MzgsIDc2NzQyLCA3Njc0NiwgNzY3NTAsIDc2NzU0LCA3Njc1OCwgNzY3NjIsIDc2NzY2LCA3Njc3MCwgNzY3NzQsIAorICAgIDc2Nzc4LCA3Njc4MiwgNzY3ODYsIDc2NzkwLCA3Njc5NCwgNzY3OTgsIDc2ODAyLCA3NjgwNiwgNzY4MTAsIDc2ODE0LCAKKyAgICA3NjgxOCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzQsIDc2ODM4LCA3Njg0MiwgNzY4NDYsIDc2ODUwLCA3Njg1NCwgCisgICAgNzY4NTgsIDc2ODYyLCA3Njg2NiwgNzY4NzAsIDc2ODc0LCA3Njg3OCwgNzY4ODIsIDc2ODg2LCA3Njg5MCwgNzY4OTQsIAorICAgIDc2ODk4LCA3NjkwMiwgNzY5MDYsIDc2OTEwLCA3NjkxNCwgNzY5MTgsIDc2OTIyLCA3NjkyNiwgNzY5MzAsIDc2OTM0LCAKKyAgICA3NjkzOCwgNzY5NDIsIDc2OTQ2LCA3Njk1MCwgNzY5NTQsIDc2OTU4LCA3Njk2MiwgNzY5NjYsIDc2OTcwLCA3Njk3NCwgCisgICAgNzY5NzgsIDc2OTgyLCA3Njk4NiwgNzY5OTAsIDc2OTk0LCA3Njk5OCwgNzcwMDIsIDc3MDA2LCA3NzAxMCwgNzcwMTQsIAorICAgIDc3MDE4LCA3NzAyMiwgNzcwMjYsIDc3MDMwLCA3NzAzNCwgNzcwMzgsIDc3MDQyLCA3NzA0NiwgNzcwNTAsIDc3MDU0LCAKKyAgICA3NzA1OCwgNzcwNjIsIDc3MDY2LCA3NzA3MCwgNzcwNzQsIDc3MDc4LCA3NzA4MiwgNzcwODYsIDc3MDkwLCA3NzA5NCwgCisgICAgNzcwOTgsIDc3MTAyLCA3NzEwNiwgNzcxMTAsIDc3MTE0LCA3NzExOCwgNzcxMjIsIDc3MTI2LCA3NzEzMCwgNzcxMzQsIAorICAgIDc3MTM4LCA3NzE0MiwgNzcxNDYsIDc3MTUwLCA3NzE1NCwgNzcxNTgsIDc3MTYyLCA3NzE2NiwgNzcxNzAsIDc3MTc0LCAKKyAgICA3NzE3OCwgNzcxODIsIDc3MTg2LCA3NzE5MCwgNzcxOTQsIDc3MTk4LCA3NzIwMiwgNzcyMDYsIDc3MjEwLCA3NzIxNCwgCisgICAgNzcyMTgsIDc3MjIyLCA3NzIyNiwgNzcyMzAsIDc3MjM0LCA3NzIzOCwgNzcyNDIsIDc3MjQ2LCA3NzI1MCwgNzcyNTQsIAorICAgIDc3MjU4LCA3NzI2MiwgNzcyNjYsIDc3MjcwLCA3NzI3NCwgNzcyNzgsIDc3MjgyLCA3NzI4NiwgNzcyOTAsIDc3Mjk0LCAKKyAgICA3NzI5OCwgNzczMDIsIDc3MzA2LCA3NzMxMCwgNzczMTQsIDc3MzE4LCA3NzMyMiwgNzczMjYsIDc3MzMwLCA3NzMzNCwgCisgICAgNzczMzgsIDc3MzQyLCA3NzM0NiwgNzczNTAsIDc3MzU0LCA3NzM1OCwgNzczNjIsIDc3MzY2LCA3NzM3MCwgNzczNzQsIAorICAgIDc3Mzc4LCA3NzM4MiwgNzczODYsIDc3MzkwLCA3NzM5NCwgNzczOTgsIDc3NDAyLCA3NzQwNiwgNzc0MTAsIDc3NDE0LCAKKyAgICA3NzQxOCwgNzc0MjIsIDc3NDI2LCA3NzQzMCwgNzc0MzQsIDc3NDM4LCA3NzQ0MiwgNzc0NDYsIDc3NDUwLCA3NzQ1NCwgCisgICAgNzc0NTgsIDc3NDYyLCA3NzQ2NiwgNzc0NzAsIDc3NDc0LCA3NzQ3OCwgNzc0ODIsIDc3NDg2LCA3NzQ5MCwgNzc0OTQsIAorICAgIDc3NDk4LCA3NzUwMiwgNzc1MDYsIDc3NTEwLCA3NzUxNCwgNzc1MTgsIDc3NTIyLCA3NzUyNiwgNzc1MzAsIDc3NTM0LCAKKyAgICA3NzUzOCwgNzc1NDIsIDc3NTQ2LCA3NzU1MCwgNzc1NTQsIDc3NTU4LCA3NzU2MiwgNzc1NjYsIDc3NTcwLCA3NzU3NCwgCisgICAgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk0LCA3NzU5OCwgNzc2MDIsIDc3NjA2LCA3NzYxMCwgNzc2MTQsIAorICAgIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMwLCA3NzYzNCwgNzc2MzgsIDc3NjQyLCA3NzY0NiwgNzc2NTAsIDc3NjU0LCAKKyAgICA3NzY1OCwgNzc2NjIsIDc3NjY2LCA3NzY3MCwgNzc2NzQsIDc3Njc4LCA3NzY4MiwgNzc2ODYsIDc3NjkwLCA3NzY5NCwgCisgICAgNzc2OTgsIDc3NzAyLCA3NzcwNiwgNzc3MTAsIDc3NzE0LCA3NzcxOCwgNzc3MjIsIDc3NzI2LCA3NzczMCwgNzc3MzQsIAorICAgIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NiwgNzc3NzAsIDc3Nzc0LCAKKyAgICA3Nzc3OCwgNzc3ODIsIDc3Nzg2LCA3Nzc5MCwgNzc3OTQsIDc3Nzk4LCA3NzgwMiwgNzc4MDYsIDc3ODEwLCA3NzgxNCwgCisgICAgNzc4MTgsIDc3ODIyLCA3NzgyNiwgNzc4MzAsIDc3ODM0LCA3NzgzOCwgNzc4NDIsIDc3ODQ2LCA3Nzg1MCwgNzc4NTQsIAorICAgIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDAsIDAsIDc3ODgyLCA3Nzg4NiwgNzc4OTAsIAorICAgIDc3ODk0LCA3Nzg5OCwgNzc5MDIsIDc3OTA2LCA3NzkxMCwgNzc5MTQsIDc3OTE4LCA3NzkyMiwgNzc5MjYsIDc3OTMwLCAKKyAgICA3NzkzNCwgNzc5MzgsIDc3OTQyLCA3Nzk0NiwgNzc5NTAsIDc3OTU0LCA3Nzk1OCwgNzc5NjIsIDc3OTY2LCA3Nzk3MCwgCisgICAgNzc5NzQsIDc3OTc4LCA3Nzk4MiwgNzc5ODYsIDc3OTkwLCA3Nzk5NCwgNzc5OTgsIDc4MDAyLCA3ODAwNiwgNzgwMTAsIAorICAgIDc4MDE0LCA3ODAxOCwgNzgwMjIsIDc4MDI2LCA3ODAzMCwgNzgwMzQsIDc4MDM4LCA3ODA0MiwgNzgwNDYsIDc4MDUwLCAKKyAgICA3ODA1NCwgNzgwNTgsIDc4MDYyLCA3ODA2NiwgNzgwNzAsIDc4MDc0LCA3ODA3OCwgNzgwODIsIDc4MDg2LCA3ODA5MCwgCisgICAgNzgwOTQsIDc4MDk4LCA3ODEwMiwgNzgxMDYsIDc4MTEwLCA3ODExNCwgNzgxMTgsIDc4MTIyLCA3ODEyNiwgNzgxMzAsIAorICAgIDc4MTM0LCA3ODEzOCwgNzgxNDIsIDc4MTQ2LCA3ODE1MCwgNzgxNTQsIDc4MTU4LCA3ODE2MiwgNzgxNjYsIDc4MTcwLCAKKyAgICA3ODE3NCwgNzgxNzgsIDc4MTgyLCA3ODE4NiwgNzgxOTAsIDc4MTk0LCA3ODE5OCwgNzgyMDIsIDc4MjA2LCA3ODIxMCwgCisgICAgNzgyMTQsIDc4MjE4LCA3ODIyMiwgNzgyMjYsIDc4MjMwLCA3ODIzNCwgNzgyMzgsIDc4MjQyLCA3ODI0NiwgNzgyNTAsIAorICAgIDc4MjU0LCA3ODI1OCwgNzgyNjIsIDc4MjY2LCA3ODI3MCwgNzgyNzQsIDc4Mjc4LCA3ODI4MiwgNzgyODYsIDc4MjkwLCAKKyAgICA3ODI5NCwgNzgyOTgsIDc4MzAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODMwNiwgCisgICAgNzgzMTEsIDc4MzE2LCA3ODMyMSwgNzgzMjYsIDc4MzMxLCA3ODMzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNzgzNDQsIDc4MzUxLCA3ODM1OCwgNzgzNjUsIDc4MzcyLCAwLCAwLCAwLCAwLCAwLCA3ODM3OSwgNzgzODYsIAorICAgIDc4MzkzLCA3ODQwMywgNzg0MDksIDc4NDE1LCA3ODQyMSwgNzg0MjcsIDc4NDMzLCA3ODQzOSwgNzg0NDYsIDc4NDUyLCAKKyAgICA3ODQ1OCwgNzg0NjQsIDc4NDczLCA3ODQ4MiwgNzg0OTQsIDc4NTA2LCA3ODUxMiwgNzg1MTgsIDc4NTI0LCA3ODUzMSwgCisgICAgNzg1MzgsIDc4NTQ1LCA3ODU1MiwgNzg1NTksIDAsIDc4NTY2LCA3ODU3MywgNzg1ODAsIDc4NTg4LCA3ODU5NSwgMCwgCisgICAgNzg2MDIsIDAsIDc4NjA5LCA3ODYxNiwgMCwgNzg2MjMsIDc4NjMxLCAwLCA3ODYzOCwgNzg2NDUsIDc4NjUyLCA3ODY1OSwgCisgICAgNzg2NjYsIDc4NjczLCA3ODY4MCwgNzg2ODcsIDc4Njk0LCA3ODcwMSwgNzg3MDYsIDc4NzEzLCA3ODcyMCwgNzg3MjYsIAorICAgIDc4NzMyLCA3ODczOCwgNzg3NDQsIDc4NzUwLCA3ODc1NiwgNzg3NjIsIDc4NzY4LCA3ODc3NCwgNzg3ODAsIDc4Nzg2LCAKKyAgICA3ODc5MiwgNzg3OTgsIDc4ODA0LCA3ODgxMCwgNzg4MTYsIDc4ODIyLCA3ODgyOCwgNzg4MzQsIDc4ODQwLCA3ODg0NiwgCisgICAgNzg4NTIsIDc4ODU4LCA3ODg2NCwgNzg4NzAsIDc4ODc2LCA3ODg4MiwgNzg4ODgsIDc4ODk0LCA3ODkwMCwgNzg5MDYsIAorICAgIDc4OTEyLCA3ODkxOCwgNzg5MjQsIDc4OTMwLCA3ODkzNiwgNzg5NDIsIDc4OTQ4LCA3ODk1NCwgNzg5NjAsIDc4OTY2LCAKKyAgICA3ODk3MiwgNzg5NzgsIDc4OTg0LCA3ODk5MCwgNzg5OTYsIDc5MDAyLCA3OTAwOCwgNzkwMTQsIDc5MDIwLCA3OTAyNiwgCisgICAgNzkwMzIsIDc5MDM4LCA3OTA0NCwgNzkwNTAsIDc5MDU2LCA3OTA2MiwgNzkwNjgsIDc5MDc0LCA3OTA4MCwgNzkwODYsIAorICAgIDc5MDkyLCA3OTA5OCwgNzkxMDQsIDc5MTEwLCA3OTExNiwgNzkxMjIsIDc5MTI4LCA3OTEzNCwgNzkxNDAsIDc5MTQ2LCAKKyAgICA3OTE1MiwgNzkxNTgsIDc5MTY0LCA3OTE3MCwgNzkxNzYsIDc5MTg0LCA3OTE5MiwgNzkxOTgsIDc5MjA0LCA3OTIxMCwgCisgICAgNzkyMTYsIDc5MjI1LCA3OTIzNCwgNzkyNDIsIDc5MjUwLCA3OTI1OCwgNzkyNjYsIDc5Mjc0LCA3OTI4MiwgNzkyOTAsIAorICAgIDc5Mjk4LCA3OTMwNSwgNzkzMTIsIDc5MzIyLCA3OTMzMiwgNzkzMzYsIDc5MzQwLCA3OTM0NSwgNzkzNTAsIDc5MzU1LCAKKyAgICA3OTM2MCwgNzkzNjksIDc5Mzc4LCA3OTM4NCwgNzkzOTAsIDc5Mzk3LCA3OTQwNCwgNzk0MTEsIDc5NDE1LCA3OTQyMSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk0MjcsIDc5NDMzLCA3OTQzOSwgCisgICAgNzk0NDUsIDc5NDUxLCA3OTQ1NiwgNzk0NjEsIDc5NDY3LCA3OTQ3MywgNzk0NzksIDc5NDg1LCA3OTQ5MywgNzk0OTksIAorICAgIDc5NTA1LCA3OTUxMywgNzk1MjEsIDc5NTI5LCA3OTUzNywgNzk1NDIsIDc5NTQ3LCA3OTU1MiwgNzk1NTcsIDc5NTcwLCAKKyAgICA3OTU4MywgNzk1OTMsIDc5NjAzLCA3OTYxNCwgNzk2MjUsIDc5NjM2LCA3OTY0NywgNzk2NTcsIDc5NjY3LCA3OTY3OCwgCisgICAgNzk2ODksIDc5NzAwLCA3OTcxMSwgNzk3MjEsIDc5NzMxLCA3OTc0MSwgNzk3NTcsIDc5NzczLCA3OTc4OSwgNzk3OTYsIAorICAgIDc5ODAzLCA3OTgxMCwgNzk4MTcsIDc5ODI3LCA3OTgzNywgNzk4NDcsIDc5ODU5LCA3OTg2OSwgNzk4NzcsIDc5ODg1LCAKKyAgICA3OTg5NCwgNzk5MDIsIDc5OTEyLCA3OTkyMCwgNzk5MjgsIDc5OTM2LCA3OTk0NSwgNzk5NTMsIDc5OTYzLCA3OTk3MSwgCisgICAgNzk5NzksIDc5OTg3LCA3OTk5NywgODAwMDUsIDgwMDEyLCA4MDAxOSwgODAwMjYsIDgwMDMzLCA4MDA0MSwgODAwNDksIAorICAgIDgwMDU3LCA4MDA2NSwgODAwNzMsIDgwMDgyLCA4MDA5MCwgODAwOTgsIDgwMTA2LCA4MDExNCwgODAxMjIsIDgwMTMxLCAKKyAgICA4MDEzOSwgODAxNDcsIDgwMTU1LCA4MDE2MywgODAxNzEsIDgwMTc5LCA4MDE4NywgODAxOTUsIDgwMjAzLCA4MDIxMSwgCisgICAgODAyMjAsIDgwMjI4LCA4MDIzOCwgODAyNDYsIDgwMjU0LCA4MDI2MiwgODAyNzIsIDgwMjgwLCA4MDI4OCwgODAyOTYsIAorICAgIDgwMzA0LCA4MDMxMywgODAzMjIsIDgwMzMwLCA4MDM0MCwgODAzNDgsIDgwMzU2LCA4MDM2NCwgODAzNzMsIDgwMzgxLCAKKyAgICA4MDM5MSwgODAzOTksIDgwNDA2LCA4MDQxMywgODA0MjEsIDgwNDI4LCA4MDQzNywgODA0NDQsIDgwNDUyLCA4MDQ2MCwgCisgICAgODA0NjksIDgwNDc3LCA4MDQ4NywgODA0OTUsIDgwNTAzLCA4MDUxMSwgODA1MjEsIDgwNTI5LCA4MDUzNiwgODA1NDMsIAorICAgIDgwNTUxLCA4MDU1OCwgODA1NjcsIDgwNTc0LCA4MDU4NCwgODA1OTQsIDgwNjA1LCA4MDYxNCwgODA2MjMsIDgwNjMyLCAKKyAgICA4MDY0MSwgODA2NTAsIDgwNjYwLCA4MDY3MSwgODA2ODIsIDgwNjkyLCA4MDcwMywgODA3MTUsIDgwNzI1LCA4MDczNCwgCisgICAgODA3NDMsIDgwNzUxLCA4MDc2MCwgODA3NzAsIDgwNzc4LCA4MDc4NywgODA3OTYsIDgwODA0LCA4MDgxMywgODA4MjMsIAorICAgIDgwODMxLCA4MDg0MCwgODA4NDksIDgwODU3LCA4MDg2NiwgODA4NzYsIDgwODg0LCA4MDg5NCwgODA5MDIsIDgwOTEyLCAKKyAgICA4MDkyMCwgODA5MjgsIDgwOTM3LCA4MDk0NSwgODA5NTUsIDgwOTYzLCA4MDk3MSwgODA5ODEsIDgwOTg5LCA4MDk5NiwgCisgICAgODEwMDMsIDgxMDEyLCA4MTAyMSwgODEwMjksIDgxMDM4LCA4MTA0OCwgODEwNTYsIDgxMDY3LCA4MTA3NSwgODEwODMsIAorICAgIDgxMDkwLCA4MTA5OCwgODExMDcsIDgxMTE0LCA4MTEyNCwgODExMzQsIDgxMTQ1LCA4MTE1NSwgODExNjYsIDgxMTc0LCAKKyAgICA4MTE4MiwgODExOTEsIDgxMTk5LCA4MTIwOCwgODEyMTYsIDgxMjI0LCA4MTIzMywgODEyNDEsIDgxMjUwLCA4MTI1OCwgCisgICAgODEyNjUsIDgxMjcyLCA4MTI3OSwgODEyODYsIDgxMjk0LCA4MTMwMiwgODEzMTAsIDgxMzE4LCA4MTMyNywgODEzMzUsIAorICAgIDgxMzQzLCA4MTM1MiwgODEzNjAsIDgxMzY4LCA4MTM3NiwgODEzODUsIDgxMzkzLCA4MTQwMSwgODE0MDksIDgxNDE3LCAKKyAgICA4MTQyNSwgODE0MzMsIDgxNDQxLCA4MTQ0OSwgODE0NTcsIDgxNDY2LCA4MTQ3NCwgODE0ODIsIDgxNDkwLCA4MTQ5OCwgCisgICAgODE1MDYsIDgxNTE1LCA4MTUyNCwgODE1MzIsIDgxNTQwLCA4MTU0OCwgODE1NTcsIDgxNTY1LCA4MTU3NCwgODE1ODEsIAorICAgIDgxNTg4LCA4MTU5NiwgODE2MDMsIDgxNjExLCA4MTYxOSwgODE2MjgsIDgxNjM2LCA4MTY0NSwgODE2NTMsIDgxNjYxLCAKKyAgICA4MTY3MSwgODE2NzgsIDgxNjg1LCA4MTY5MywgODE3MDAsIDgxNzA4LCA4MTcxOCwgODE3MjksIDgxNzM3LCA4MTc0NiwgCisgICAgODE3NTQsIDgxNzYzLCA4MTc3MSwgODE3ODAsIDgxNzg4LCA4MTc5NywgODE4MDUsIDgxODE0LCA4MTgyMywgODE4MzEsIAorICAgIDgxODM5LCA4MTg0NywgODE4NTYsIDgxODYzLCA4MTg3MSwgODE4ODAsIDgxODg5LCA4MTg5OCwgODE5MDgsIDgxOTE2LCAKKyAgICA4MTkyNiwgODE5MzQsIDgxOTQ0LCA4MTk1MiwgODE5NjIsIDgxOTcwLCA4MTk4MCwgODE5ODgsIDgxOTk3LCA4MjAwNCwgCisgICAgODIwMTMsIDgyMDIwLCA4MjAzMCwgODIwMzgsIDgyMDQ4LCA4MjA1NiwgODIwNjYsIDgyMDc0LCA4MjA4MiwgODIwOTAsIAorICAgIDgyMDk5LCA4MjEwNywgODIxMTYsIDgyMTI1LCA4MjEzNCwgODIxNDMsIDgyMTUzLCA4MjE2MSwgODIxNzEsIDgyMTc5LCAKKyAgICA4MjE4OSwgODIxOTcsIDgyMjA3LCA4MjIxNSwgODIyMjUsIDgyMjMzLCA4MjI0MiwgODIyNDksIDgyMjU4LCA4MjI2NSwgCisgICAgODIyNzUsIDgyMjgzLCA4MjI5MywgODIzMDEsIDgyMzExLCA4MjMxOSwgODIzMjcsIDgyMzM1LCA4MjM0NCwgODIzNTIsIAorICAgIDgyMzYxLCA4MjM3MCwgODIzNzksIDgyMzg4LCA4MjM5NiwgODI0MDQsIDgyNDEzLCA4MjQyMSwgODI0MzAsIDgyNDM5LCAKKyAgICA4MjQ0NywgODI0NTUsIDgyNDYzLCA4MjQ3MiwgODI0ODAsIDgyNDg4LCA4MjQ5NywgODI1MDUsIDgyNTEzLCA4MjUyMSwgCisgICAgODI1MjksIDgyNTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MjUzOSwgCisgICAgODI1NDksIDgyNTU5LCA4MjU2OSwgODI1NzksIDgyNTkwLCA4MjYwMCwgODI2MTAsIDgyNjIxLCA4MjYzMCwgODI2MzksIAorICAgIDgyNjQ4LCA4MjY1OSwgODI2NjksIDgyNjc5LCA4MjY5MSwgODI3MDEsIDgyNzExLCA4MjcyMSwgODI3MzEsIDgyNzQxLCAKKyAgICA4Mjc1MSwgODI3NjEsIDgyNzcxLCA4Mjc4MSwgODI3OTEsIDgyODAxLCA4MjgxMiwgODI4MjMsIDgyODMzLCA4Mjg0MywgCisgICAgODI4NTUsIDgyODY2LCA4Mjg3NywgODI4ODcsIDgyODk3LCA4MjkwNywgODI5MTcsIDgyOTI3LCA4MjkzNywgODI5NDcsIAorICAgIDgyOTU5LCA4Mjk2OSwgODI5NzksIDgyOTkxLCA4MzAwMiwgODMwMTMsIDgzMDIzLCA4MzAzMywgODMwNDMsIDgzMDUzLCAKKyAgICA4MzA2NSwgODMwNzUsIDgzMDg1LCA4MzA5NiwgODMxMDcsIDgzMTE3LCA4MzEyNywgODMxMzYsIDgzMTQ1LCA4MzE1NCwgCisgICAgODMxNjMsIDgzMTcyLCA4MzE4MiwgMCwgMCwgODMxOTIsIDgzMjAyLCA4MzIxMiwgODMyMjIsIDgzMjMyLCA4MzI0NCwgCisgICAgODMyNTQsIDgzMjY0LCA4MzI3NiwgODMyODYsIDgzMjk4LCA4MzMwNywgODMzMTYsIDgzMzI3LCA4MzMzNywgODMzNDksIAorICAgIDgzMzYwLCA4MzM3MywgODMzODMsIDgzMzk1LCA4MzQwNCwgODM0MTUsIDgzNDI2LCA4MzQzOSwgODM0NDksIDgzNDU5LCAKKyAgICA4MzQ2OSwgODM0NzksIDgzNDg5LCA4MzQ5OCwgODM1MDcsIDgzNTE2LCA4MzUyNSwgODM1MzUsIDgzNTQ1LCA4MzU1NSwgCisgICAgODM1NjUsIDgzNTc1LCA4MzU4NSwgODM1OTUsIDgzNjA1LCA4MzYxNSwgODM2MjUsIDgzNjM1LCA4MzY0NSwgODM2NTQsIAorICAgIDgzNjYzLCA4MzY3MiwgODM2ODIsIDgzNjkyLCA4MzcwMiwgODM3MTIsIDgzNzIyLCA4MzczMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgyNzgsIDc4MjgzLCA3ODI4OCwgNzgyOTMsIDc4Mjk4LCA3ODMwMywgNzgzMTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzE2LCA3ODMyMywgNzgzMzAsIDc4MzM3LCA3ODM0NCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzgzNTEsIDc4MzU4LCA3ODM2NSwgNzgzNzUsIDc4MzgxLCA3ODM4NywgNzgzOTMsIDc4Mzk5LCAKLSAgICA3ODQwNSwgNzg0MTEsIDc4NDE4LCA3ODQyNCwgNzg0MzAsIDc4NDM2LCA3ODQ0NSwgNzg0NTQsIDc4NDY2LCA3ODQ3OCwgCi0gICAgNzg0ODQsIDc4NDkwLCA3ODQ5NiwgNzg1MDMsIDc4NTEwLCA3ODUxNywgNzg1MjQsIDc4NTMxLCAwLCA3ODUzOCwgNzg1NDUsIAotICAgIDc4NTUyLCA3ODU2MCwgNzg1NjcsIDAsIDc4NTc0LCAwLCA3ODU4MSwgNzg1ODgsIDAsIDc4NTk1LCA3ODYwMywgMCwgCi0gICAgNzg2MTAsIDc4NjE3LCA3ODYyNCwgNzg2MzEsIDc4NjM4LCA3ODY0NSwgNzg2NTIsIDc4NjU5LCA3ODY2NiwgNzg2NzMsIAotICAgIDc4Njc4LCA3ODY4NSwgNzg2OTIsIDc4Njk4LCA3ODcwNCwgNzg3MTAsIDc4NzE2LCA3ODcyMiwgNzg3MjgsIDc4NzM0LCAKLSAgICA3ODc0MCwgNzg3NDYsIDc4NzUyLCA3ODc1OCwgNzg3NjQsIDc4NzcwLCA3ODc3NiwgNzg3ODIsIDc4Nzg4LCA3ODc5NCwgCi0gICAgNzg4MDAsIDc4ODA2LCA3ODgxMiwgNzg4MTgsIDc4ODI0LCA3ODgzMCwgNzg4MzYsIDc4ODQyLCA3ODg0OCwgNzg4NTQsIAotICAgIDc4ODYwLCA3ODg2NiwgNzg4NzIsIDc4ODc4LCA3ODg4NCwgNzg4OTAsIDc4ODk2LCA3ODkwMiwgNzg5MDgsIDc4OTE0LCAKLSAgICA3ODkyMCwgNzg5MjYsIDc4OTMyLCA3ODkzOCwgNzg5NDQsIDc4OTUwLCA3ODk1NiwgNzg5NjIsIDc4OTY4LCA3ODk3NCwgCi0gICAgNzg5ODAsIDc4OTg2LCA3ODk5MiwgNzg5OTgsIDc5MDA0LCA3OTAxMCwgNzkwMTYsIDc5MDIyLCA3OTAyOCwgNzkwMzQsIAotICAgIDc5MDQwLCA3OTA0NiwgNzkwNTIsIDc5MDU4LCA3OTA2NCwgNzkwNzAsIDc5MDc2LCA3OTA4MiwgNzkwODgsIDc5MDk0LCAKLSAgICA3OTEwMCwgNzkxMDYsIDc5MTEyLCA3OTExOCwgNzkxMjQsIDc5MTMwLCA3OTEzNiwgNzkxNDIsIDc5MTQ4LCA3OTE1NiwgCi0gICAgNzkxNjQsIDc5MTcwLCA3OTE3NiwgNzkxODIsIDc5MTg4LCA3OTE5NywgNzkyMDYsIDc5MjE0LCA3OTIyMiwgNzkyMzAsIAotICAgIDc5MjM4LCA3OTI0NiwgNzkyNTQsIDc5MjYyLCA3OTI3MCwgNzkyNzcsIDc5Mjg0LCA3OTI5NCwgNzkzMDQsIDc5MzA4LCAKLSAgICA3OTMxMiwgNzkzMTcsIDc5MzIyLCA3OTMyNywgNzkzMzIsIDc5MzQxLCA3OTM1MCwgNzkzNTYsIDc5MzYyLCA3OTM2OSwgCi0gICAgNzkzNzYsIDc5MzgzLCA3OTM4NywgNzkzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc5Mzk5LCA3OTQwNSwgNzk0MTEsIDc5NDE3LCA3OTQyMywgNzk0MjgsIDc5NDMzLCA3OTQzOSwgNzk0NDUsIAotICAgIDc5NDUxLCA3OTQ1NywgNzk0NjUsIDc5NDcxLCA3OTQ3NywgNzk0ODUsIDc5NDkzLCA3OTUwMSwgNzk1MDksIDc5NTE0LCAKLSAgICA3OTUxOSwgNzk1MjQsIDc5NTI5LCA3OTU0MiwgNzk1NTUsIDc5NTY1LCA3OTU3NSwgNzk1ODYsIDc5NTk3LCA3OTYwOCwgCi0gICAgNzk2MTksIDc5NjI5LCA3OTYzOSwgNzk2NTAsIDc5NjYxLCA3OTY3MiwgNzk2ODMsIDc5NjkzLCA3OTcwMywgNzk3MTMsIAotICAgIDc5NzI5LCA3OTc0NSwgNzk3NjEsIDc5NzY4LCA3OTc3NSwgNzk3ODIsIDc5Nzg5LCA3OTc5OSwgNzk4MDksIDc5ODE5LCAKLSAgICA3OTgzMSwgNzk4NDEsIDc5ODQ5LCA3OTg1NywgNzk4NjYsIDc5ODc0LCA3OTg4NCwgNzk4OTIsIDc5OTAwLCA3OTkwOCwgCi0gICAgNzk5MTcsIDc5OTI1LCA3OTkzNSwgNzk5NDMsIDc5OTUxLCA3OTk1OSwgNzk5NjksIDc5OTc3LCA3OTk4NCwgNzk5OTEsIAotICAgIDc5OTk4LCA4MDAwNSwgODAwMTMsIDgwMDIxLCA4MDAyOSwgODAwMzcsIDgwMDQ1LCA4MDA1NCwgODAwNjIsIDgwMDcwLCAKLSAgICA4MDA3OCwgODAwODYsIDgwMDk0LCA4MDEwMywgODAxMTEsIDgwMTE5LCA4MDEyNywgODAxMzUsIDgwMTQzLCA4MDE1MSwgCi0gICAgODAxNTksIDgwMTY3LCA4MDE3NSwgODAxODMsIDgwMTkyLCA4MDIwMCwgODAyMTAsIDgwMjE4LCA4MDIyNiwgODAyMzQsIAotICAgIDgwMjQ0LCA4MDI1MiwgODAyNjAsIDgwMjY4LCA4MDI3NiwgODAyODUsIDgwMjk0LCA4MDMwMiwgODAzMTIsIDgwMzIwLCAKLSAgICA4MDMyOCwgODAzMzYsIDgwMzQ1LCA4MDM1MywgODAzNjMsIDgwMzcxLCA4MDM3OCwgODAzODUsIDgwMzkzLCA4MDQwMCwgCi0gICAgODA0MDksIDgwNDE2LCA4MDQyNCwgODA0MzIsIDgwNDQxLCA4MDQ0OSwgODA0NTksIDgwNDY3LCA4MDQ3NSwgODA0ODMsIAotICAgIDgwNDkzLCA4MDUwMSwgODA1MDgsIDgwNTE1LCA4MDUyMywgODA1MzAsIDgwNTM5LCA4MDU0NiwgODA1NTYsIDgwNTY2LCAKLSAgICA4MDU3NywgODA1ODYsIDgwNTk1LCA4MDYwNCwgODA2MTMsIDgwNjIyLCA4MDYzMiwgODA2NDMsIDgwNjU0LCA4MDY2NCwgCi0gICAgODA2NzUsIDgwNjg3LCA4MDY5NywgODA3MDYsIDgwNzE1LCA4MDcyMywgODA3MzIsIDgwNzQyLCA4MDc1MCwgODA3NTksIAotICAgIDgwNzY4LCA4MDc3NiwgODA3ODUsIDgwNzk1LCA4MDgwMywgODA4MTIsIDgwODIxLCA4MDgyOSwgODA4MzgsIDgwODQ4LCAKLSAgICA4MDg1NiwgODA4NjYsIDgwODc0LCA4MDg4NCwgODA4OTIsIDgwOTAwLCA4MDkwOSwgODA5MTcsIDgwOTI3LCA4MDkzNSwgCi0gICAgODA5NDMsIDgwOTUzLCA4MDk2MSwgODA5NjgsIDgwOTc1LCA4MDk4NCwgODA5OTMsIDgxMDAxLCA4MTAxMCwgODEwMjAsIAotICAgIDgxMDI4LCA4MTAzOSwgODEwNDcsIDgxMDU1LCA4MTA2MiwgODEwNzAsIDgxMDc5LCA4MTA4NiwgODEwOTYsIDgxMTA2LCAKLSAgICA4MTExNywgODExMjcsIDgxMTM4LCA4MTE0NiwgODExNTQsIDgxMTYzLCA4MTE3MSwgODExODAsIDgxMTg4LCA4MTE5NiwgCi0gICAgODEyMDUsIDgxMjEzLCA4MTIyMiwgODEyMzAsIDgxMjM3LCA4MTI0NCwgODEyNTEsIDgxMjU4LCA4MTI2NiwgODEyNzQsIAotICAgIDgxMjgyLCA4MTI5MCwgODEyOTksIDgxMzA3LCA4MTMxNSwgODEzMjQsIDgxMzMyLCA4MTM0MCwgODEzNDgsIDgxMzU3LCAKLSAgICA4MTM2NSwgODEzNzMsIDgxMzgxLCA4MTM4OSwgODEzOTcsIDgxNDA1LCA4MTQxMywgODE0MjEsIDgxNDI5LCA4MTQzOCwgCi0gICAgODE0NDYsIDgxNDU0LCA4MTQ2MiwgODE0NzAsIDgxNDc4LCA4MTQ4NywgODE0OTYsIDgxNTA0LCA4MTUxMiwgODE1MjAsIAotICAgIDgxNTI5LCA4MTUzNywgODE1NDYsIDgxNTUzLCA4MTU2MCwgODE1NjgsIDgxNTc1LCA4MTU4MywgODE1OTEsIDgxNjAwLCAKLSAgICA4MTYwOCwgODE2MTcsIDgxNjI1LCA4MTYzMywgODE2NDMsIDgxNjUwLCA4MTY1NywgODE2NjUsIDgxNjcyLCA4MTY4MCwgCi0gICAgODE2OTAsIDgxNzAxLCA4MTcwOSwgODE3MTgsIDgxNzI2LCA4MTczNSwgODE3NDMsIDgxNzUyLCA4MTc2MCwgODE3NjksIAotICAgIDgxNzc3LCA4MTc4NiwgODE3OTUsIDgxODAzLCA4MTgxMSwgODE4MTksIDgxODI4LCA4MTgzNSwgODE4NDMsIDgxODUyLCAKLSAgICA4MTg2MSwgODE4NzAsIDgxODgwLCA4MTg4OCwgODE4OTgsIDgxOTA2LCA4MTkxNiwgODE5MjQsIDgxOTM0LCA4MTk0MiwgCi0gICAgODE5NTIsIDgxOTYwLCA4MTk2OSwgODE5NzYsIDgxOTg1LCA4MTk5MiwgODIwMDIsIDgyMDEwLCA4MjAyMCwgODIwMjgsIAotICAgIDgyMDM4LCA4MjA0NiwgODIwNTQsIDgyMDYyLCA4MjA3MSwgODIwNzksIDgyMDg4LCA4MjA5NywgODIxMDYsIDgyMTE1LCAKLSAgICA4MjEyNSwgODIxMzMsIDgyMTQzLCA4MjE1MSwgODIxNjEsIDgyMTY5LCA4MjE3OSwgODIxODcsIDgyMTk3LCA4MjIwNSwgCi0gICAgODIyMTQsIDgyMjIxLCA4MjIzMCwgODIyMzcsIDgyMjQ3LCA4MjI1NSwgODIyNjUsIDgyMjczLCA4MjI4MywgODIyOTEsIAotICAgIDgyMjk5LCA4MjMwNywgODIzMTYsIDgyMzI0LCA4MjMzMywgODIzNDIsIDgyMzUxLCA4MjM2MCwgODIzNjgsIDgyMzc2LCAKLSAgICA4MjM4NSwgODIzOTMsIDgyNDAyLCA4MjQxMSwgODI0MTksIDgyNDI3LCA4MjQzNSwgODI0NDQsIDgyNDUyLCA4MjQ2MCwgCi0gICAgODI0NjksIDgyNDc3LCA4MjQ4NSwgODI0OTMsIDgyNTAxLCA4MjUwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgODI1MTEsIDgyNTIxLCA4MjUzMSwgODI1NDEsIDgyNTUxLCA4MjU2MiwgODI1NzIsIDgyNTgyLCAKLSAgICA4MjU5MywgODI2MDIsIDgyNjExLCA4MjYyMCwgODI2MzEsIDgyNjQxLCA4MjY1MSwgODI2NjMsIDgyNjczLCA4MjY4MywgCi0gICAgODI2OTMsIDgyNzAzLCA4MjcxMywgODI3MjMsIDgyNzMzLCA4Mjc0MywgODI3NTMsIDgyNzYzLCA4Mjc3MywgODI3ODQsIAotICAgIDgyNzk1LCA4MjgwNSwgODI4MTUsIDgyODI3LCA4MjgzOCwgODI4NDksIDgyODU5LCA4Mjg2OSwgODI4NzksIDgyODg5LCAKLSAgICA4Mjg5OSwgODI5MDksIDgyOTE5LCA4MjkzMSwgODI5NDEsIDgyOTUxLCA4Mjk2MywgODI5NzQsIDgyOTg1LCA4Mjk5NSwgCi0gICAgODMwMDUsIDgzMDE1LCA4MzAyNSwgODMwMzcsIDgzMDQ3LCA4MzA1NywgODMwNjgsIDgzMDc5LCA4MzA4OSwgODMwOTksIAotICAgIDgzMTA4LCA4MzExNywgODMxMjYsIDgzMTM1LCA4MzE0NCwgODMxNTQsIDAsIDAsIDgzMTY0LCA4MzE3NCwgODMxODQsIAotICAgIDgzMTk0LCA4MzIwNCwgODMyMTYsIDgzMjI2LCA4MzIzNiwgODMyNDgsIDgzMjU4LCA4MzI3MCwgODMyNzksIDgzMjg4LCAKLSAgICA4MzI5OSwgODMzMDksIDgzMzIxLCA4MzMzMiwgODMzNDUsIDgzMzU1LCA4MzM2NywgODMzNzYsIDgzMzg3LCA4MzM5OCwgCi0gICAgODM0MTEsIDgzNDIxLCA4MzQzMSwgODM0NDEsIDgzNDUxLCA4MzQ2MSwgODM0NzAsIDgzNDc5LCA4MzQ4OCwgODM0OTcsIAotICAgIDgzNTA3LCA4MzUxNywgODM1MjcsIDgzNTM3LCA4MzU0NywgODM1NTcsIDgzNTY3LCA4MzU3NywgODM1ODcsIDgzNTk3LCAKLSAgICA4MzYwNywgODM2MTcsIDgzNjI2LCA4MzYzNSwgODM2NDQsIDgzNjU0LCA4MzY2NCwgODM2NzQsIDgzNjg0LCA4MzY5NCwgCi0gICAgODM3MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNzE1LCA4MzczMCwgCi0gICAgODM3NDUsIDgzNzUxLCA4Mzc1NywgODM3NjMsIDgzNzY5LCA4Mzc3NSwgODM3ODEsIDgzNzg3LCA4Mzc5MywgODM4MDEsIAotICAgIDgzODA1LCA4MzgwOCwgMCwgMCwgODM4MTYsIDgzODE5LCA4MzgyMiwgODM4MjUsIDgzODI4LCA4MzgzMSwgODM4MzQsIAotICAgIDgzODM3LCA4Mzg0MCwgODM4NDMsIDgzODQ2LCA4Mzg0OSwgODM4NTIsIDgzODU1LCA4Mzg1OCwgODM4NjEsIDgzODY0LCAKLSAgICA4Mzg3MiwgODM4ODEsIDgzODkyLCA4MzkwMCwgODM5MDgsIDgzOTE3LCA4MzkyNiwgODM5MzcsIDgzOTQ5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA4Mzk1OCwgODM5NjMsIDgzOTY4LCA4Mzk3NSwgODM5ODIsIDgzOTg4LCA4Mzk5NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODM5OTksIDg0MDA5LCA4NDAxOSwgODQwMjksIDg0MDM4LCA4NDA0OSwgODQwNTgsIDg0MDY3LCAKLSAgICA4NDA3NywgODQwODcsIDg0MDk5LCA4NDExMSwgODQxMjIsIDg0MTMzLCA4NDE0NCwgODQxNTUsIDg0MTY1LCA4NDE3NSwgCi0gICAgODQxODUsIDg0MTk1LCA4NDIwNiwgODQyMTcsIDg0MjIxLCA4NDIyNiwgODQyMzUsIDg0MjQ0LCA4NDI0OCwgODQyNTIsIAotICAgIDg0MjU2LCA4NDI2MSwgODQyNjYsIDg0MjcxLCA4NDI3NiwgODQyNzksIDg0MjgzLCAwLCA4NDI4OCwgODQyOTEsIDg0Mjk0LCAKLSAgICA4NDI5OCwgODQzMDIsIDg0MzA3LCA4NDMxMSwgODQzMTUsIDg0MzIwLCA4NDMyNSwgODQzMzIsIDg0MzM5LCA4NDM0MiwgCi0gICAgODQzNDUsIDg0MzQ4LCA4NDM1MSwgODQzNTQsIDg0MzU4LCA4NDM2MiwgMCwgODQzNjYsIDg0MzcxLCA4NDM3NSwgODQzNzksIAotICAgIDAsIDAsIDAsIDAsIDg0Mzg0LCA4NDM4OSwgODQzOTYsIDg0NDAxLCA4NDQwNiwgMCwgODQ0MTEsIDg0NDE2LCA4NDQyMSwgCi0gICAgODQ0MjYsIDg0NDMxLCA4NDQzNiwgODQ0NDEsIDg0NDQ2LCA4NDQ1MSwgODQ0NTYsIDg0NDYxLCA4NDQ2NiwgODQ0NzUsIAotICAgIDg0NDg0LCA4NDQ5MiwgODQ1MDAsIDg0NTA5LCA4NDUxOCwgODQ1MjcsIDg0NTM2LCA4NDU0NCwgODQ1NTIsIDg0NTYwLCAKLSAgICA4NDU2OCwgODQ1NzMsIDg0NTc4LCA4NDU4NCwgODQ1OTAsIDg0NTk2LCA4NDYwMiwgODQ2MTAsIDg0NjE4LCA4NDYyNCwgCi0gICAgODQ2MzAsIDg0NjM2LCA4NDY0MiwgODQ2NDgsIDg0NjU0LCA4NDY2MCwgODQ2NjYsIDg0NjcxLCA4NDY3NiwgODQ2ODEsIAotICAgIDg0Njg2LCA4NDY5MSwgODQ2OTYsIDg0NzAxLCA4NDcwNiwgODQ3MTIsIDg0NzE4LCA4NDcyNCwgODQ3MzAsIDg0NzM2LCAKLSAgICA4NDc0MiwgODQ3NDgsIDg0NzU0LCA4NDc2MCwgODQ3NjYsIDg0NzcyLCA4NDc3OCwgODQ3ODQsIDg0NzkwLCA4NDc5NiwgCi0gICAgODQ4MDIsIDg0ODA4LCA4NDgxNCwgODQ4MjAsIDg0ODI2LCA4NDgzMiwgODQ4MzgsIDg0ODQ0LCA4NDg1MCwgODQ4NTYsIAotICAgIDg0ODYyLCA4NDg2OCwgODQ4NzQsIDg0ODgwLCA4NDg4NiwgODQ4OTIsIDg0ODk4LCA4NDkwNCwgODQ5MTAsIDg0OTE2LCAKLSAgICA4NDkyMiwgODQ5MjgsIDg0OTM0LCA4NDk0MCwgODQ5NDYsIDg0OTUyLCA4NDk1OCwgODQ5NjQsIDg0OTcwLCA4NDk3NiwgCi0gICAgODQ5ODIsIDg0OTg4LCA4NDk5NCwgODUwMDAsIDg1MDA2LCA4NTAxMiwgODUwMTgsIDg1MDI0LCA4NTAzMCwgODUwMzYsIAotICAgIDg1MDQyLCA4NTA0OCwgODUwNTQsIDg1MDYwLCA4NTA2NiwgODUwNzEsIDg1MDc2LCA4NTA4MSwgODUwODYsIDg1MDkyLCAKLSAgICA4NTA5OCwgODUxMDQsIDg1MTEwLCA4NTExNiwgODUxMjIsIDg1MTI4LCA4NTEzNCwgODUxNDAsIDg1MTQ2LCA4NTE1MywgCi0gICAgODUxNjAsIDg1MTY1LCA4NTE3MCwgODUxNzUsIDg1MTgwLCA4NTE5MiwgODUyMDQsIDg1MjE1LCA4NTIyNiwgODUyMzgsIAotICAgIDg1MjUwLCA4NTI1OCwgMCwgMCwgODUyNjYsIDAsIDg1Mjc0LCA4NTI3OCwgODUyODIsIDg1Mjg1LCA4NTI4OSwgODUyOTMsIAotICAgIDg1Mjk2LCA4NTI5OSwgODUzMDMsIDg1MzA3LCA4NTMxMCwgODUzMTMsIDg1MzE2LCA4NTMxOSwgODUzMjQsIDg1MzI3LCAKLSAgICA4NTMzMSwgODUzMzQsIDg1MzM3LCA4NTM0MCwgODUzNDMsIDg1MzQ2LCA4NTM0OSwgODUzNTIsIDg1MzU1LCA4NTM1OCwgCi0gICAgODUzNjEsIDg1MzY0LCA4NTM2OCwgODUzNzIsIDg1Mzc2LCA4NTM4MCwgODUzODUsIDg1MzkwLCA4NTM5NiwgODU0MDIsIAotICAgIDg1NDA4LCA4NTQxMywgODU0MTksIDg1NDI1LCA4NTQzMSwgODU0MzYsIDg1NDQyLCA4NTQ0OCwgODU0NTMsIDg1NDU4LCAKLSAgICA4NTQ2NCwgODU0NjksIDg1NDc1LCA4NTQ4MSwgODU0ODYsIDg1NDkyLCA4NTQ5OCwgODU1MDMsIDg1NTA5LCA4NTUxNSwgCi0gICAgODU1MjEsIDg1NTI3LCA4NTUzMywgODU1MzcsIDg1NTQyLCA4NTU0NiwgODU1NTEsIDg1NTU1LCA4NTU2MCwgODU1NjUsIAotICAgIDg1NTcxLCA4NTU3NywgODU1ODMsIDg1NTg4LCA4NTU5NCwgODU2MDAsIDg1NjA2LCA4NTYxMSwgODU2MTcsIDg1NjIzLCAKLSAgICA4NTYyOCwgODU2MzMsIDg1NjM5LCA4NTY0NCwgODU2NTAsIDg1NjU2LCA4NTY2MSwgODU2NjcsIDg1NjczLCA4NTY3OCwgCi0gICAgODU2ODQsIDg1NjkwLCA4NTY5NiwgODU3MDIsIDg1NzA4LCA4NTcxMywgODU3MTcsIDg1NzIyLCA4NTcyNCwgODU3MjksIAotICAgIDg1NzM0LCA4NTc0MCwgODU3NDUsIDg1NzUwLCA4NTc1NCwgODU3NjAsIDg1NzY1LCA4NTc3MCwgODU3NzUsIDg1NzgwLCAKLSAgICA4NTc4NSwgODU3OTAsIDg1Nzk1LCA4NTgwMSwgODU4MDcsIDg1ODEzLCA4NTgyMSwgODU4MjUsIDg1ODI5LCA4NTgzMywgCi0gICAgODU4MzcsIDg1ODQxLCA4NTg0NSwgODU4NTAsIDg1ODU1LCA4NTg2MCwgODU4NjUsIDg1ODY5LCA4NTg3NCwgODU4NzksIAotICAgIDg1ODg0LCA4NTg4OSwgODU4OTQsIDg1ODk5LCA4NTkwNCwgODU5MDksIDg1OTEzLCA4NTkxNywgODU5MjIsIDg1OTI3LCAKLSAgICA4NTkzMiwgODU5MzcsIDg1OTQxLCA4NTk0NiwgODU5NTEsIDg1OTU2LCA4NTk2MSwgODU5NjUsIDg1OTcwLCA4NTk3NSwgCi0gICAgODU5ODAsIDg1OTg1LCA4NTk4OSwgODU5OTQsIDg1OTk5LCA4NjAwMywgODYwMDgsIDg2MDEzLCA4NjAxOCwgODYwMjMsIAotICAgIDg2MDI4LCA4NjAzMywgODYwNDAsIDg2MDQ3LCA4NjA1MSwgODYwNTYsIDg2MDYxLCA4NjA2NiwgODYwNzEsIDg2MDc2LCAKLSAgICA4NjA4MSwgODYwODYsIDg2MDkxLCA4NjA5NiwgODYxMDEsIDg2MTA2LCA4NjExMSwgODYxMTYsIDg2MTIxLCA4NjEyNiwgCi0gICAgODYxMzEsIDg2MTM2LCA4NjE0MSwgODYxNDYsIDg2MTUxLCA4NjE1NiwgODYxNjEsIDg2MTY2LCA4NjE3MSwgODYxNzYsIAotICAgIDg2MTgxLCA4NjE4NiwgODYxOTEsIDg2MTk2LCAwLCAwLCAwLCA4NjIwMSwgODYyMDUsIDg2MjEwLCA4NjIxNCwgODYyMTksIAotICAgIDg2MjI0LCAwLCAwLCA4NjIyOCwgODYyMzMsIDg2MjM4LCA4NjI0MiwgODYyNDcsIDg2MjUyLCAwLCAwLCA4NjI1NywgCi0gICAgODYyNjIsIDg2MjY2LCA4NjI3MSwgODYyNzYsIDg2MjgxLCAwLCAwLCA4NjI4NiwgODYyOTEsIDg2Mjk2LCAwLCAwLCAwLCAKLSAgICA4NjMwMCwgODYzMDQsIDg2MzA4LCA4NjMxMiwgODYzMTUsIDg2MzE5LCA4NjMyMywgMCwgODYzMjcsIDg2MzMzLCA4NjMzNiwgCi0gICAgODYzNDAsIDg2MzQzLCA4NjM0NywgODYzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MzU1LCA4NjM2MSwgCi0gICAgODYzNjcsIDg2MzczLCA4NjM3OSwgMCwgMCwgODYzODMsIDg2Mzg5LCA4NjM5NSwgODY0MDEsIDg2NDA3LCA4NjQxMywgCi0gICAgODY0MjAsIDg2NDI3LCA4NjQzNCwgODY0NDEsIDg2NDQ4LCA4NjQ1NSwgMCwgODY0NjIsIDg2NDY5LCA4NjQ3NiwgODY0ODIsIAotICAgIDg2NDg5LCA4NjQ5NiwgODY1MDMsIDg2NTEwLCA4NjUxNiwgODY1MjMsIDg2NTMwLCA4NjUzNywgODY1NDQsIDg2NTUwLCAKLSAgICA4NjU1NywgODY1NjQsIDg2NTcxLCA4NjU3OCwgODY1ODQsIDg2NTkxLCA4NjU5OCwgODY2MDUsIDg2NjEyLCA4NjYxOSwgCi0gICAgODY2MjYsIDg2NjMzLCAwLCA4NjY0MCwgODY2NDYsIDg2NjUzLCA4NjY2MCwgODY2NjcsIDg2Njc0LCA4NjY4MCwgODY2ODcsIAotICAgIDg2Njk0LCA4NjcwMSwgODY3MDgsIDg2NzE1LCA4NjcyMiwgODY3MjksIDg2NzM1LCA4Njc0MiwgODY3NDksIDg2NzU2LCAKLSAgICA4Njc2MywgMCwgODY3NzAsIDg2Nzc3LCAwLCA4Njc4NCwgODY3OTEsIDg2Nzk4LCA4NjgwNSwgODY4MTIsIDg2ODE5LCAKLSAgICA4NjgyNiwgODY4MzMsIDg2ODQwLCA4Njg0NywgODY4NTQsIDg2ODYxLCA4Njg2OCwgODY4NzUsIDg2ODgyLCAwLCAwLCAKLSAgICA4Njg4OCwgODY4OTMsIDg2ODk4LCA4NjkwMywgODY5MDgsIDg2OTEzLCA4NjkxOCwgODY5MjMsIDg2OTI4LCA4NjkzMywgCi0gICAgODY5MzgsIDg2OTQzLCA4Njk0OCwgODY5NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2OTU4LCA4Njk2NSwgCi0gICAgODY5NzIsIDg2OTc5LCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCA4NzAyOCwgODcwMzUsIAotICAgIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgODcwOTksIDg3MTA3LCAKLSAgICA4NzExNCwgODcxMjEsIDg3MTI2LCA4NzEzNCwgODcxNDIsIDg3MTQ5LCA4NzE1NiwgODcxNjEsIDg3MTY4LCA4NzE3MywgCi0gICAgODcxNzgsIDg3MTg1LCA4NzE5MCwgODcxOTUsIDg3MjAwLCA4NzIwOCwgODcyMTMsIDg3MjE4LCA4NzIyNSwgODcyMzAsIAotICAgIDg3MjM1LCA4NzI0MiwgODcyNDksIDg3MjU0LCA4NzI1OSwgODcyNjQsIDg3MjY5LCA4NzI3NCwgODcyNzksIDg3Mjg0LCAKLSAgICA4NzI4OSwgODcyOTQsIDg3MzAxLCA4NzMwNiwgODczMTMsIDg3MzE4LCA4NzMyMywgODczMjgsIDg3MzMzLCA4NzMzOCwgCi0gICAgODczNDMsIDg3MzQ4LCA4NzM1MywgODczNTgsIDg3MzYzLCA4NzM2OCwgODczNzUsIDg3MzgyLCA4NzM4OSwgODczOTYsIAotICAgIDg3NDAyLCA4NzQwNywgODc0MTQsIDg3NDE5LCA4NzQyNCwgODc0MzMsIDg3NDQwLCA4NzQ0OSwgODc0NTYsIDg3NDYxLCAKLSAgICA4NzQ2NiwgODc0NzQsIDg3NDc5LCA4NzQ4NCwgODc0ODksIDg3NDk0LCA4NzQ5OSwgODc1MDYsIDg3NTExLCA4NzUxNiwgCi0gICAgODc1MjEsIDg3NTI2LCA4NzUzMSwgODc1MzgsIDg3NTQ1LCA4NzU1MiwgODc1NTksIDg3NTY2LCA4NzU3MywgODc1ODAsIAotICAgIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgODc2NDMsIDg3NjUwLCAKLSAgICA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIDg3NzEzLCA4NzcyMCwgCi0gICAgODc3MjcsIDAsIDAsIDAsIDAsIDAsIDg3NzM0LCA4Nzc0MiwgODc3NTAsIDAsIDAsIDAsIDAsIDg3NzU1LCA4Nzc1OSwgCi0gICAgODc3NjMsIDg3NzY3LCA4Nzc3MSwgODc3NzUsIDg3Nzc5LCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NiwgODc4MDEsIAotICAgIDg3ODA2LCA4NzgxMSwgODc4MTYsIDg3ODIxLCA4NzgyNiwgODc4MzEsIDg3ODM2LCA4Nzg0MiwgODc4NDgsIDg3ODU0LCAKLSAgICA4Nzg2MSwgODc4NjgsIDg3ODc1LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMiwgODc5MDgsIDg3OTE0LCA4NzkyMSwgCi0gICAgODc5MjgsIDg3OTM1LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCA4Nzk4NCwgODc5OTEsIAotICAgIDg3OTk4LCA4ODAwNSwgODgwMTIsIDAsIDAsIDAsIDg4MDE5LCA4ODAyNywgODgwMzUsIDg4MDQzLCA4ODA1MSwgODgwNTksIAotICAgIDg4MDY5LCA4ODA3OSwgODgwODcsIDg4MDk1LCA4ODEwMywgODgxMTEsIDg4MTE5LCA4ODEyNSwgODgxMzIsIDg4MTQxLCAKLSAgICA4ODE1MCwgODgxNTksIDg4MTY4LCA4ODE3NywgODgxODYsIDg4MTk2LCA4ODIwNywgODgyMTcsIDg4MjI4LCA4ODIzNywgCi0gICAgODgyNDYsIDg4MjU1LCA4ODI2NSwgODgyNzYsIDg4Mjg2LCA4ODI5NywgODgzMDgsIDg4MzE3LCA4ODMyNSwgODgzMzEsIAotICAgIDg4MzM3LCA4ODM0MywgODgzNDksIDg4MzU3LCA4ODM2NSwgODgzNzEsIDg4Mzc4LCA4ODM4OCwgODgzOTUsIDg4NDAyLCAKLSAgICA4ODQwOSwgODg0MTYsIDg4NDIzLCA4ODQzMywgODg0NDAsIDg4NDQ3LCA4ODQ1NSwgODg0NjMsIDg4NDcyLCA4ODQ4MSwgCi0gICAgODg0OTAsIDg4NDk5LCA4ODUwOCwgODg1MTYsIDg4NTI1LCA4ODUzNCwgODg1NDMsIDg4NTQ3LCA4ODU1NCwgODg1NTksIAotICAgIDg4NTY0LCA4ODU2OCwgODg1NzIsIDg4NTc2LCA4ODU4MCwgODg1ODUsIDg4NTkwLCA4ODU5NiwgODg2MDIsIDg4NjA2LCAKLSAgICA4ODYxMiwgODg2MTYsIDg4NjIwLCA4ODYyNCwgODg2MjgsIDg4NjMyLCA4ODYzNiwgODg2NDIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg4NjQ2LCA4ODY1MSwgODg2NTYsIDg4NjYxLCA4ODY2NiwgODg2NzMsIDg4Njc4LCA4ODY4MywgODg2ODgsIDg4NjkzLCAKLSAgICA4ODY5OCwgODg3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNzQzLCA4Mzc1OCwgODM3NzMsIDgzNzc5LCA4Mzc4NSwgODM3OTEsIAorICAgIDgzNzk3LCA4MzgwMywgODM4MDksIDgzODE1LCA4MzgyMSwgODM4MjksIDgzODMzLCA4MzgzNiwgMCwgMCwgODM4NDQsIAorICAgIDgzODQ3LCA4Mzg1MCwgODM4NTMsIDgzODU2LCA4Mzg1OSwgODM4NjIsIDgzODY1LCA4Mzg2OCwgODM4NzEsIDgzODc0LCAKKyAgICA4Mzg3NywgODM4ODAsIDgzODgzLCA4Mzg4NiwgODM4ODksIDgzODkyLCA4MzkwMCwgODM5MDksIDgzOTIwLCA4MzkyOCwgCisgICAgODM5MzYsIDgzOTQ1LCA4Mzk1NCwgODM5NjUsIDgzOTc3LCAwLCAwLCAwLCAwLCAwLCAwLCA4Mzk4NiwgODM5OTEsIDgzOTk2LCAKKyAgICA4NDAwMywgODQwMTAsIDg0MDE2LCA4NDAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQwMjcsIDg0MDM3LCAKKyAgICA4NDA0NywgODQwNTcsIDg0MDY2LCA4NDA3NywgODQwODYsIDg0MDk1LCA4NDEwNSwgODQxMTUsIDg0MTI3LCA4NDEzOSwgCisgICAgODQxNTAsIDg0MTYxLCA4NDE3MiwgODQxODMsIDg0MTkzLCA4NDIwMywgODQyMTMsIDg0MjIzLCA4NDIzNCwgODQyNDUsIAorICAgIDg0MjQ5LCA4NDI1NCwgODQyNjMsIDg0MjcyLCA4NDI3NiwgODQyODAsIDg0Mjg0LCA4NDI4OSwgODQyOTQsIDg0Mjk5LCAKKyAgICA4NDMwNCwgODQzMDcsIDg0MzExLCAwLCA4NDMxNiwgODQzMTksIDg0MzIyLCA4NDMyNiwgODQzMzAsIDg0MzM1LCA4NDMzOSwgCisgICAgODQzNDMsIDg0MzQ4LCA4NDM1MywgODQzNjAsIDg0MzY3LCA4NDM3MCwgODQzNzMsIDg0Mzc2LCA4NDM3OSwgODQzODIsIAorICAgIDg0Mzg2LCA4NDM5MCwgMCwgODQzOTQsIDg0Mzk5LCA4NDQwMywgODQ0MDcsIDAsIDAsIDAsIDAsIDg0NDEyLCA4NDQxNywgCisgICAgODQ0MjQsIDg0NDI5LCA4NDQzNCwgMCwgODQ0MzksIDg0NDQ0LCA4NDQ0OSwgODQ0NTQsIDg0NDU5LCA4NDQ2NCwgODQ0NjksIAorICAgIDg0NDc0LCA4NDQ3OSwgODQ0ODQsIDg0NDg5LCA4NDQ5NCwgODQ1MDMsIDg0NTEyLCA4NDUyMCwgODQ1MjgsIDg0NTM3LCAKKyAgICA4NDU0NiwgODQ1NTUsIDg0NTY0LCA4NDU3MiwgODQ1ODAsIDg0NTg4LCA4NDU5NiwgODQ2MDEsIDg0NjA2LCA4NDYxMiwgCisgICAgODQ2MTgsIDg0NjI0LCA4NDYzMCwgODQ2MzgsIDg0NjQ2LCA4NDY1MiwgODQ2NTgsIDg0NjY0LCA4NDY3MCwgODQ2NzYsIAorICAgIDg0NjgyLCA4NDY4OCwgODQ2OTQsIDg0Njk5LCA4NDcwNCwgODQ3MDksIDg0NzE0LCA4NDcxOSwgODQ3MjQsIDg0NzI5LCAKKyAgICA4NDczNCwgODQ3NDAsIDg0NzQ2LCA4NDc1MiwgODQ3NTgsIDg0NzY0LCA4NDc3MCwgODQ3NzYsIDg0NzgyLCA4NDc4OCwgCisgICAgODQ3OTQsIDg0ODAwLCA4NDgwNiwgODQ4MTIsIDg0ODE4LCA4NDgyNCwgODQ4MzAsIDg0ODM2LCA4NDg0MiwgODQ4NDgsIAorICAgIDg0ODU0LCA4NDg2MCwgODQ4NjYsIDg0ODcyLCA4NDg3OCwgODQ4ODQsIDg0ODkwLCA4NDg5NiwgODQ5MDIsIDg0OTA4LCAKKyAgICA4NDkxNCwgODQ5MjAsIDg0OTI2LCA4NDkzMiwgODQ5MzgsIDg0OTQ0LCA4NDk1MCwgODQ5NTYsIDg0OTYyLCA4NDk2OCwgCisgICAgODQ5NzQsIDg0OTgwLCA4NDk4NiwgODQ5OTIsIDg0OTk4LCA4NTAwNCwgODUwMTAsIDg1MDE2LCA4NTAyMiwgODUwMjgsIAorICAgIDg1MDM0LCA4NTA0MCwgODUwNDYsIDg1MDUyLCA4NTA1OCwgODUwNjQsIDg1MDcwLCA4NTA3NiwgODUwODIsIDg1MDg4LCAKKyAgICA4NTA5NCwgODUwOTksIDg1MTA0LCA4NTEwOSwgODUxMTQsIDg1MTIwLCA4NTEyNiwgODUxMzIsIDg1MTM4LCA4NTE0NCwgCisgICAgODUxNTAsIDg1MTU2LCA4NTE2MiwgODUxNjgsIDg1MTc0LCA4NTE4MSwgODUxODgsIDg1MTkzLCA4NTE5OCwgODUyMDMsIAorICAgIDg1MjA4LCA4NTIyMCwgODUyMzIsIDg1MjQzLCA4NTI1NCwgODUyNjYsIDg1Mjc4LCA4NTI4NiwgMCwgMCwgODUyOTQsIDAsIAorICAgIDg1MzAyLCA4NTMwNiwgODUzMTAsIDg1MzEzLCA4NTMxNywgODUzMjEsIDg1MzI0LCA4NTMyNywgODUzMzEsIDg1MzM1LCAKKyAgICA4NTMzOCwgODUzNDEsIDg1MzQ0LCA4NTM0NywgODUzNTIsIDg1MzU1LCA4NTM1OSwgODUzNjIsIDg1MzY1LCA4NTM2OCwgCisgICAgODUzNzEsIDg1Mzc0LCA4NTM3NywgODUzODAsIDg1MzgzLCA4NTM4NiwgODUzODksIDg1MzkyLCA4NTM5NiwgODU0MDAsIAorICAgIDg1NDA0LCA4NTQwOCwgODU0MTMsIDg1NDE4LCA4NTQyNCwgODU0MzAsIDg1NDM2LCA4NTQ0MSwgODU0NDcsIDg1NDUzLCAKKyAgICA4NTQ1OSwgODU0NjQsIDg1NDcwLCA4NTQ3NiwgODU0ODEsIDg1NDg2LCA4NTQ5MiwgODU0OTcsIDg1NTAzLCA4NTUwOSwgCisgICAgODU1MTQsIDg1NTIwLCA4NTUyNiwgODU1MzEsIDg1NTM3LCA4NTU0MywgODU1NDksIDg1NTU1LCA4NTU2MSwgODU1NjUsIAorICAgIDg1NTcwLCA4NTU3NCwgODU1NzksIDg1NTgzLCA4NTU4OCwgODU1OTMsIDg1NTk5LCA4NTYwNSwgODU2MTEsIDg1NjE2LCAKKyAgICA4NTYyMiwgODU2MjgsIDg1NjM0LCA4NTYzOSwgODU2NDUsIDg1NjUxLCA4NTY1NiwgODU2NjEsIDg1NjY3LCA4NTY3MiwgCisgICAgODU2NzgsIDg1Njg0LCA4NTY4OSwgODU2OTUsIDg1NzAxLCA4NTcwNiwgODU3MTIsIDg1NzE4LCA4NTcyNCwgODU3MzAsIAorICAgIDg1NzM2LCA4NTc0MSwgODU3NDUsIDg1NzUwLCA4NTc1MiwgODU3NTcsIDg1NzYyLCA4NTc2OCwgODU3NzMsIDg1Nzc4LCAKKyAgICA4NTc4MiwgODU3ODgsIDg1NzkzLCA4NTc5OCwgODU4MDMsIDg1ODA4LCA4NTgxMywgODU4MTgsIDg1ODIzLCA4NTgyOSwgCisgICAgODU4MzUsIDg1ODQxLCA4NTg0OSwgODU4NTMsIDg1ODU3LCA4NTg2MSwgODU4NjUsIDg1ODY5LCA4NTg3MywgODU4NzgsIAorICAgIDg1ODgzLCA4NTg4OCwgODU4OTMsIDg1ODk3LCA4NTkwMiwgODU5MDcsIDg1OTEyLCA4NTkxNywgODU5MjIsIDg1OTI3LCAKKyAgICA4NTkzMiwgODU5MzcsIDg1OTQxLCA4NTk0NSwgODU5NTAsIDg1OTU1LCA4NTk2MCwgODU5NjUsIDg1OTY5LCA4NTk3NCwgCisgICAgODU5NzksIDg1OTg0LCA4NTk4OSwgODU5OTMsIDg1OTk4LCA4NjAwMywgODYwMDgsIDg2MDEzLCA4NjAxNywgODYwMjIsIAorICAgIDg2MDI3LCA4NjAzMSwgODYwMzYsIDg2MDQxLCA4NjA0NiwgODYwNTEsIDg2MDU2LCA4NjA2MSwgODYwNjgsIDg2MDc1LCAKKyAgICA4NjA3OSwgODYwODQsIDg2MDg5LCA4NjA5NCwgODYwOTksIDg2MTA0LCA4NjEwOSwgODYxMTQsIDg2MTE5LCA4NjEyNCwgCisgICAgODYxMjksIDg2MTM0LCA4NjEzOSwgODYxNDQsIDg2MTQ5LCA4NjE1NCwgODYxNTksIDg2MTY0LCA4NjE2OSwgODYxNzQsIAorICAgIDg2MTc5LCA4NjE4NCwgODYxODksIDg2MTk0LCA4NjE5OSwgODYyMDQsIDg2MjA5LCA4NjIxNCwgODYyMTksIDg2MjI0LCAwLCAKKyAgICAwLCAwLCA4NjIyOSwgODYyMzMsIDg2MjM4LCA4NjI0MiwgODYyNDcsIDg2MjUyLCAwLCAwLCA4NjI1NiwgODYyNjEsIAorICAgIDg2MjY2LCA4NjI3MCwgODYyNzUsIDg2MjgwLCAwLCAwLCA4NjI4NSwgODYyOTAsIDg2Mjk0LCA4NjI5OSwgODYzMDQsIAorICAgIDg2MzA5LCAwLCAwLCA4NjMxNCwgODYzMTksIDg2MzI0LCAwLCAwLCAwLCA4NjMyOCwgODYzMzIsIDg2MzM2LCA4NjM0MCwgCisgICAgODYzNDMsIDg2MzQ3LCA4NjM1MSwgMCwgODYzNTUsIDg2MzYxLCA4NjM2NCwgODYzNjgsIDg2MzcxLCA4NjM3NSwgODYzNzksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MzgzLCA4NjM4OSwgODYzOTUsIDg2NDAxLCA4NjQwNywgMCwgMCwgCisgICAgODY0MTEsIDg2NDE3LCA4NjQyMywgODY0MjksIDg2NDM1LCA4NjQ0MSwgODY0NDgsIDg2NDU1LCA4NjQ2MiwgODY0NjksIAorICAgIDg2NDc2LCA4NjQ4MywgMCwgODY0OTAsIDg2NDk3LCA4NjUwNCwgODY1MTAsIDg2NTE3LCA4NjUyNCwgODY1MzEsIDg2NTM4LCAKKyAgICA4NjU0NCwgODY1NTEsIDg2NTU4LCA4NjU2NSwgODY1NzIsIDg2NTc4LCA4NjU4NSwgODY1OTIsIDg2NTk5LCA4NjYwNiwgCisgICAgODY2MTIsIDg2NjE5LCA4NjYyNiwgODY2MzMsIDg2NjQwLCA4NjY0NywgODY2NTQsIDg2NjYxLCAwLCA4NjY2OCwgODY2NzQsIAorICAgIDg2NjgxLCA4NjY4OCwgODY2OTUsIDg2NzAyLCA4NjcwOCwgODY3MTUsIDg2NzIyLCA4NjcyOSwgODY3MzYsIDg2NzQzLCAKKyAgICA4Njc1MCwgODY3NTcsIDg2NzYzLCA4Njc3MCwgODY3NzcsIDg2Nzg0LCA4Njc5MSwgMCwgODY3OTgsIDg2ODA1LCAwLCAKKyAgICA4NjgxMiwgODY4MTksIDg2ODI2LCA4NjgzMywgODY4NDAsIDg2ODQ3LCA4Njg1NCwgODY4NjEsIDg2ODY4LCA4Njg3NSwgCisgICAgODY4ODIsIDg2ODg5LCA4Njg5NiwgODY5MDMsIDg2OTEwLCAwLCAwLCA4NjkxNiwgODY5MjEsIDg2OTI2LCA4NjkzMSwgCisgICAgODY5MzYsIDg2OTQxLCA4Njk0NiwgODY5NTEsIDg2OTU2LCA4Njk2MSwgODY5NjYsIDg2OTcxLCA4Njk3NiwgODY5ODEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzA4LCA4ODcxNSwgODg3MjQsIDg4NzMzLCA4ODc0MCwgODg3NDcsIDg4NzU0LCAKLSAgICA4ODc2MSwgODg3NjgsIDg4Nzc1LCA4ODc4MSwgODg3ODgsIDg4Nzk1LCA4ODgwMiwgODg4MDksIDg4ODE2LCA4ODgyMywgCi0gICAgODg4MzAsIDg4ODM3LCA4ODg0NiwgODg4NTMsIDg4ODYwLCA4ODg2NywgODg4NzQsIDg4ODgxLCA4ODg4OCwgODg4OTUsIAotICAgIDg4OTAyLCA4ODkxMSwgODg5MTgsIDg4OTI1LCA4ODkzMiwgODg5MzksIDg4OTQ2LCA4ODk1MywgODg5NjIsIDg4OTY5LCAKLSAgICA4ODk3NiwgODg5ODMsIDg4OTkwLCA4ODk5OSwgODkwMDYsIDg5MDEzLCA4OTAyMCwgODkwMjgsIDg5MDM3LCAwLCAwLCAKLSAgICA4OTA0NiwgODkwNTAsIDg5MDU0LCA4OTA1OSwgODkwNjQsIDg5MDY5LCA4OTA3NCwgODkwNzgsIDg5MDgzLCA4OTA4OCwgCi0gICAgODkwOTMsIDg5MDk4LCA4OTEwMywgODkxMDgsIDg5MTEyLCA4OTExNiwgODkxMjEsIDg5MTI2LCA4OTEzMSwgODkxMzUsIAotICAgIDg5MTQwLCA4OTE0NSwgODkxNDksIDg5MTU0LCA4OTE1OSwgODkxNjQsIDg5MTY5LCA4OTE3NCwgODkxNzksIDAsIDAsIDAsIAotICAgIDg5MTg0LCA4OTE4OCwgODkxOTMsIDg5MTk4LCA4OTIwMiwgODkyMDcsIDg5MjExLCA4OTIxNiwgODkyMjEsIDg5MjI2LCAKLSAgICA4OTIzMSwgODkyMzUsIDg5MjM5LCA4OTI0NCwgODkyNDksIDg5MjU0LCA4OTI1OSwgODkyNjQsIDg5MjY5LCA4OTI3MywgCi0gICAgODkyNzgsIDg5MjgzLCA4OTI4OCwgODkyOTMsIDg5Mjk4LCA4OTMwMywgODkzMDcsIDg5MzExLCA4OTMxNiwgODkzMjEsIAotICAgIDg5MzI2LCA4OTMzMSwgODkzMzYsIDg5MzQxLCA4OTM0NiwgODkzNTEsIDg5MzU2LCA4OTM2MSwgODkzNjYsIDg5MzcxLCAKLSAgICA4OTM3NiwgODkzODEsIDg5Mzg2LCA4OTM5MSwgODkzOTYsIDg5NDAxLCA4OTQwNiwgODk0MTEsIDg5NDE2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCAKKyAgICA4NzAyOCwgODcwMzUsIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgCisgICAgODcwOTgsIDg3MTA1LCA4NzExMiwgODcxMTksIDg3MTI3LCA4NzEzNSwgODcxNDIsIDg3MTQ5LCA4NzE1NCwgODcxNjIsIAorICAgIDg3MTcwLCA4NzE3NywgODcxODQsIDg3MTg5LCA4NzE5NiwgODcyMDEsIDg3MjA2LCA4NzIxMywgODcyMTgsIDg3MjIzLCAKKyAgICA4NzIyOCwgODcyMzYsIDg3MjQxLCA4NzI0NiwgODcyNTMsIDg3MjU4LCA4NzI2MywgODcyNzAsIDg3Mjc3LCA4NzI4MiwgCisgICAgODcyODcsIDg3MjkyLCA4NzI5NywgODczMDIsIDg3MzA3LCA4NzMxMiwgODczMTcsIDg3MzIyLCA4NzMyOSwgODczMzQsIAorICAgIDg3MzQxLCA4NzM0NiwgODczNTEsIDg3MzU2LCA4NzM2MSwgODczNjYsIDg3MzcxLCA4NzM3NiwgODczODEsIDg3Mzg2LCAKKyAgICA4NzM5MSwgODczOTYsIDg3NDAzLCA4NzQxMCwgODc0MTcsIDg3NDI0LCA4NzQzMCwgODc0MzUsIDg3NDQyLCA4NzQ0NywgCisgICAgODc0NTIsIDg3NDYxLCA4NzQ2OCwgODc0NzcsIDg3NDg0LCA4NzQ4OSwgODc0OTQsIDg3NTAyLCA4NzUwNywgODc1MTIsIAorICAgIDg3NTE3LCA4NzUyMiwgODc1MjcsIDg3NTM0LCA4NzUzOSwgODc1NDQsIDg3NTQ5LCA4NzU1NCwgODc1NTksIDg3NTY2LCAKKyAgICA4NzU3MywgODc1ODAsIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgCisgICAgODc2NDMsIDg3NjUwLCA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIAorICAgIDg3NzEzLCA4NzcyMCwgODc3MjcsIDg3NzM0LCA4Nzc0MSwgODc3NDgsIDg3NzU1LCAwLCAwLCAwLCAwLCAwLCA4Nzc2MiwgCisgICAgODc3NzAsIDg3Nzc4LCAwLCAwLCAwLCAwLCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NSwgODc3OTksIDg3ODAzLCAKKyAgICA4NzgwNywgODc4MTEsIDg3ODE1LCA4NzgxOSwgODc4MjQsIDg3ODI5LCA4NzgzNCwgODc4MzksIDg3ODQ0LCA4Nzg0OSwgCisgICAgODc4NTQsIDg3ODU5LCA4Nzg2NCwgODc4NzAsIDg3ODc2LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMywgODc5MTAsIAorICAgIDg3OTE3LCA4NzkyNCwgODc5MzAsIDg3OTM2LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCAKKyAgICA4Nzk4NCwgODc5OTEsIDg3OTk4LCA4ODAwNSwgODgwMTIsIDg4MDE5LCA4ODAyNiwgODgwMzMsIDg4MDQwLCAwLCAwLCAwLCAKKyAgICA4ODA0NywgODgwNTUsIDg4MDYzLCA4ODA3MSwgODgwNzksIDg4MDg3LCA4ODA5NywgODgxMDcsIDg4MTE1LCA4ODEyMywgCisgICAgODgxMzEsIDg4MTM5LCA4ODE0NywgODgxNTMsIDg4MTYwLCA4ODE2OSwgODgxNzgsIDg4MTg3LCA4ODE5NiwgODgyMDUsIAorICAgIDg4MjE0LCA4ODIyNCwgODgyMzUsIDg4MjQ1LCA4ODI1NiwgODgyNjUsIDg4Mjc0LCA4ODI4MywgODgyOTMsIDg4MzA0LCAKKyAgICA4ODMxNCwgODgzMjUsIDg4MzM2LCA4ODM0NSwgODgzNTMsIDg4MzU5LCA4ODM2NSwgODgzNzEsIDg4Mzc3LCA4ODM4NSwgCisgICAgODgzOTMsIDg4Mzk5LCA4ODQwNiwgODg0MTYsIDg4NDIzLCA4ODQzMCwgODg0MzcsIDg4NDQ0LCA4ODQ1MSwgODg0NjEsIAorICAgIDg4NDY4LCA4ODQ3NSwgODg0ODMsIDg4NDkxLCA4ODUwMCwgODg1MDksIDg4NTE4LCA4ODUyNywgODg1MzYsIDg4NTQ0LCAKKyAgICA4ODU1MywgODg1NjIsIDg4NTcxLCA4ODU3NSwgODg1ODIsIDg4NTg3LCA4ODU5MiwgODg1OTYsIDg4NjAwLCA4ODYwNCwgCisgICAgODg2MDgsIDg4NjEzLCA4ODYxOCwgODg2MjQsIDg4NjMwLCA4ODYzNCwgODg2NDAsIDg4NjQ0LCA4ODY0OCwgODg2NTIsIAorICAgIDg4NjU2LCA4ODY2MCwgODg2NjQsIDg4NjcwLCAwLCAwLCAwLCAwLCAwLCA4ODY3NCwgODg2NzksIDg4Njg0LCA4ODY4OSwgCisgICAgODg2OTQsIDg4NzAxLCA4ODcwNiwgODg3MTEsIDg4NzE2LCA4ODcyMSwgODg3MjYsIDg4NzMxLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTQyMSwgODk0MjUsIAotICAgIDg5NDMwLCA4OTQzNSwgODk0NDAsIDg5NDQ0LCA4OTQ0OSwgODk0NTQsIDg5NDU5LCA4OTQ2NCwgODk0NjgsIDg5NDcyLCAKLSAgICA4OTQ3NywgODk0ODIsIDg5NDg3LCA4OTQ5MiwgODk0OTYsIDg5NTAxLCA4OTUwNiwgODk1MTEsIDg5NTE2LCA4OTUyMSwgCi0gICAgODk1MjYsIDg5NTMwLCA4OTUzNSwgODk1NDAsIDg5NTQ1LCA4OTU1MCwgODk1NTUsIDg5NTYwLCA4OTU2NSwgMCwgODk1NzAsIAotICAgIDg5NTc1LCA4OTU4MCwgODk1ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NTkyLCA4OTU5NywgCi0gICAgODk2MDIsIDg5NjA3LCA4OTYxMiwgODk2MTcsIDg5NjIyLCA4OTYyNywgODk2MzIsIDg5NjM3LCA4OTY0MiwgODk2NDcsIAotICAgIDg5NjUyLCA4OTY1NywgODk2NjIsIDg5NjY3LCA4OTY3MiwgODk2NzcsIDg5NjgyLCA4OTY4NywgODk2OTIsIDg5Njk3LCAKLSAgICA4OTcwMiwgODk3MDcsIDg5NzEyLCA4OTcxNywgODk3MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzM2LCAKKyAgICA4ODc0MywgODg3NTIsIDg4NzYxLCA4ODc2OCwgODg3NzUsIDg4NzgyLCA4ODc4OSwgODg3OTYsIDg4ODAzLCA4ODgwOSwgCisgICAgODg4MTYsIDg4ODIzLCA4ODgzMCwgODg4MzcsIDg4ODQ0LCA4ODg1MSwgODg4NTgsIDg4ODY1LCA4ODg3NCwgODg4ODEsIAorICAgIDg4ODg4LCA4ODg5NSwgODg5MDIsIDg4OTA5LCA4ODkxNiwgODg5MjMsIDg4OTMwLCA4ODkzOSwgODg5NDYsIDg4OTUzLCAKKyAgICA4ODk2MCwgODg5NjcsIDg4OTc0LCA4ODk4MSwgODg5OTAsIDg4OTk3LCA4OTAwNCwgODkwMTEsIDg5MDE4LCA4OTAyNywgCisgICAgODkwMzQsIDg5MDQxLCA4OTA0OCwgODkwNTYsIDg5MDY1LCAwLCAwLCA4OTA3NCwgODkwNzgsIDg5MDgyLCA4OTA4NywgCisgICAgODkwOTIsIDg5MDk3LCA4OTEwMiwgODkxMDYsIDg5MTExLCA4OTExNiwgODkxMjEsIDg5MTI2LCA4OTEzMSwgODkxMzYsIAorICAgIDg5MTQwLCA4OTE0NCwgODkxNDksIDg5MTU0LCA4OTE1OSwgODkxNjMsIDg5MTY4LCA4OTE3MywgODkxNzcsIDg5MTgyLCAKKyAgICA4OTE4NywgODkxOTIsIDg5MTk3LCA4OTIwMiwgODkyMDcsIDAsIDAsIDAsIDg5MjEyLCA4OTIxNiwgODkyMjEsIDg5MjI2LCAKKyAgICA4OTIzMCwgODkyMzUsIDg5MjM5LCA4OTI0NCwgODkyNDksIDg5MjU0LCA4OTI1OSwgODkyNjMsIDg5MjY3LCA4OTI3MiwgCisgICAgODkyNzcsIDg5MjgyLCA4OTI4NywgODkyOTIsIDg5Mjk3LCA4OTMwMSwgODkzMDYsIDg5MzExLCA4OTMxNiwgODkzMjEsIAorICAgIDg5MzI2LCA4OTMzMSwgODkzMzUsIDg5MzM5LCA4OTM0NCwgODkzNDksIDg5MzU0LCA4OTM1OSwgODkzNjQsIDg5MzY5LCAKKyAgICA4OTM3NCwgODkzNzksIDg5Mzg0LCA4OTM4OSwgODkzOTQsIDg5Mzk5LCA4OTQwNCwgODk0MDksIDg5NDE0LCA4OTQxOSwgCisgICAgODk0MjQsIDg5NDI5LCA4OTQzNCwgODk0MzksIDg5NDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTcyOSwgODk3MzQsIDg5NzM5LCAKLSAgICA4OTc0NCwgODk3NDksIDg5NzU0LCA4OTc1OSwgODk3NjQsIDg5NzY5LCA4OTc3NCwgODk3NzksIDg5Nzg0LCA4OTc4OSwgCi0gICAgODk3OTQsIDg5Nzk5LCA4OTgwNCwgODk4MDksIDg5ODE0LCA4OTgxOSwgODk4MjQsIDg5ODI5LCA4OTgzNCwgODk4MzksIAotICAgIDg5ODQ0LCA4OTg0OSwgODk4NTQsIDg5ODU5LCA4OTg2MywgODk4NjcsIDg5ODcxLCAwLCA4OTg3NiwgODk4ODIsIDg5ODg3LCAKLSAgICA4OTg5MiwgODk4OTcsIDg5OTAyLCA4OTkwOCwgODk5MTQsIDg5OTIwLCA4OTkyNiwgODk5MzIsIDg5OTM4LCA4OTk0NCwgCi0gICAgODk5NTAsIDg5OTU2LCA4OTk2MiwgODk5NjgsIDg5OTc0LCA4OTk4MCwgODk5ODUsIDg5OTkxLCA4OTk5NywgOTAwMDIsIAotICAgIDkwMDA4LCA5MDAxMywgOTAwMTksIDkwMDI1LCA5MDAzMCwgOTAwMzYsIDkwMDQyLCA5MDA0NywgOTAwNTMsIDkwMDU5LCAKLSAgICA5MDA2NCwgOTAwNzAsIDkwMDc2LCA5MDA4MiwgMCwgMCwgMCwgMCwgOTAwODcsIDkwMDkzLCA5MDA5OSwgOTAxMDUsIAotICAgIDkwMTExLCA5MDExNywgOTAxMjMsIDkwMTI5LCA5MDEzNSwgOTAxNDIsIDkwMTQ3LCA5MDE1MiwgOTAxNTgsIDkwMTY0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTQ0OSwgODk0NTMsIDg5NDU4LCA4OTQ2MywgODk0NjgsIDg5NDcyLCAKKyAgICA4OTQ3NywgODk0ODIsIDg5NDg3LCA4OTQ5MiwgODk0OTYsIDg5NTAwLCA4OTUwNSwgODk1MTAsIDg5NTE1LCA4OTUyMCwgCisgICAgODk1MjQsIDg5NTI5LCA4OTUzNCwgODk1MzksIDg5NTQ0LCA4OTU0OSwgODk1NTQsIDg5NTU4LCA4OTU2MywgODk1NjgsIAorICAgIDg5NTczLCA4OTU3OCwgODk1ODMsIDg5NTg4LCA4OTU5MywgMCwgODk1OTgsIDg5NjAzLCA4OTYwOCwgODk2MTQsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NjIwLCA4OTYyNSwgODk2MzAsIDg5NjM1LCA4OTY0MCwgODk2NDUsIAorICAgIDg5NjUwLCA4OTY1NSwgODk2NjAsIDg5NjY1LCA4OTY3MCwgODk2NzUsIDg5NjgwLCA4OTY4NSwgODk2OTAsIDg5Njk1LCAKKyAgICA4OTcwMCwgODk3MDUsIDg5NzEwLCA4OTcxNSwgODk3MjAsIDg5NzI1LCA4OTczMCwgODk3MzUsIDg5NzQwLCA4OTc0NSwgCisgICAgODk3NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkwMTcwLCA5MDE3NSwgOTAxODAsIAotICAgIDkwMTg1LCA5MDE5MSwgOTAxOTYsIDkwMjAyLCA5MDIwOCwgOTAyMTQsIDkwMjIwLCA5MDIyNywgOTAyMzMsIDkwMjQwLCAKLSAgICA5MDI0NSwgOTAyNTAsIDkwMjU1LCA5MDI2MCwgOTAyNjUsIDkwMjcwLCA5MDI3NSwgOTAyODAsIDkwMjg1LCA5MDI5MCwgCi0gICAgOTAyOTUsIDkwMzAwLCA5MDMwNSwgOTAzMTAsIDkwMzE1LCA5MDMyMCwgOTAzMjUsIDkwMzMwLCA5MDMzNSwgOTAzNDAsIAotICAgIDkwMzQ1LCA5MDM1MCwgOTAzNTUsIDkwMzYwLCA5MDM2NSwgOTAzNzAsIDkwMzc1LCA5MDM4MCwgOTAzODUsIDkwMzkwLCAKLSAgICA5MDM5NSwgOTA0MDEsIDkwNDA2LCA5MDQxMiwgOTA0MTgsIDkwNDI0LCA5MDQzMCwgOTA0MzcsIDkwNDQzLCA5MDQ1MCwgCi0gICAgOTA0NTUsIDkwNDYwLCA5MDQ2NSwgOTA0NzAsIDkwNDc1LCA5MDQ4MCwgOTA0ODUsIDkwNDkwLCA5MDQ5NSwgOTA1MDAsIAotICAgIDkwNTA1LCA5MDUxMCwgOTA1MTUsIDkwNTIwLCA5MDUyNSwgOTA1MzAsIDkwNTM1LCA5MDU0MCwgOTA1NDUsIDkwNTUwLCAKLSAgICA5MDU1NSwgOTA1NjAsIDkwNTY1LCA5MDU3MCwgOTA1NzUsIDkwNTgwLCA5MDU4NSwgOTA1OTAsIDkwNTk1LCA5MDYwMCwgCi0gICAgOTA2MDUsIDkwNjEwLCA5MDYxNSwgOTA2MjAsIDkwNjI1LCA5MDYzMCwgOTA2MzUsIDkwNjQwLCA5MDY0NSwgOTA2NTAsIAotICAgIDkwNjU1LCA5MDY2MCwgOTA2NjUsIDkwNjcwLCA5MDY3NSwgOTA2ODAsIDkwNjg1LCA5MDY5MCwgOTA2OTUsIDkwNzAwLCAKLSAgICA5MDcwNSwgOTA3MTAsIDkwNzE1LCA5MDcyMCwgOTA3MjUsIDkwNzMwLCA5MDczNSwgOTA3NDAsIDkwNzQ1LCA5MDc1MCwgCi0gICAgOTA3NTUsIDkwNzYwLCA5MDc2NSwgOTA3NzAsIDkwNzc1LCA5MDc4MCwgOTA3ODUsIDkwNzkwLCA5MDc5NSwgOTA4MDAsIAotICAgIDkwODA1LCA5MDgxMCwgOTA4MTUsIDkwODIwLCA5MDgyNSwgOTA4MzAsIDkwODM1LCA5MDg0MCwgOTA4NDUsIDkwODUwLCAKLSAgICA5MDg1NSwgOTA4NjAsIDkwODY1LCA5MDg2OSwgOTA4NzMsIDkwODc4LCA5MDg4MywgOTA4ODgsIDkwODkzLCA5MDg5OCwgCi0gICAgOTA5MDMsIDkwOTA4LCA5MDkxMywgOTA5MTgsIDkwOTIzLCA5MDkyOCwgOTA5MzIsIDkwOTM2LCA5MDk0MCwgOTA5NDQsIAotICAgIDkwOTQ4LCA5MDk1MiwgOTA5NTYsIDkwOTYxLCA5MDk2NiwgMCwgMCwgOTA5NzEsIDkwOTc2LCA5MDk4MCwgOTA5ODQsIAotICAgIDkwOTg4LCA5MDk5MiwgOTA5OTYsIDkxMDAwLCA5MTAwNCwgOTEwMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NzU3LCA4OTc2MiwgODk3NjcsIDg5NzcyLCA4OTc3NywgODk3ODIsIDg5Nzg3LCAKKyAgICA4OTc5MiwgODk3OTcsIDg5ODAyLCA4OTgwNywgODk4MTIsIDg5ODE3LCA4OTgyMiwgODk4MjcsIDg5ODMyLCA4OTgzNywgCisgICAgODk4NDIsIDg5ODQ3LCA4OTg1MiwgODk4NTcsIDg5ODYyLCA4OTg2NywgODk4NzIsIDg5ODc3LCA4OTg4MiwgODk4ODcsIAorICAgIDg5ODkxLCA4OTg5NSwgODk4OTksIDAsIDg5OTA0LCA4OTkxMCwgODk5MTUsIDg5OTIwLCA4OTkyNSwgODk5MzAsIDg5OTM2LCAKKyAgICA4OTk0MiwgODk5NDgsIDg5OTU0LCA4OTk2MCwgODk5NjYsIDg5OTcyLCA4OTk3OCwgODk5ODQsIDg5OTkwLCA4OTk5NiwgCisgICAgOTAwMDIsIDkwMDA4LCA5MDAxMywgOTAwMTksIDkwMDI1LCA5MDAzMCwgOTAwMzYsIDkwMDQxLCA5MDA0NywgOTAwNTMsIAorICAgIDkwMDU4LCA5MDA2NCwgOTAwNzAsIDkwMDc1LCA5MDA4MSwgOTAwODcsIDkwMDkyLCA5MDA5OCwgOTAxMDQsIDkwMTEwLCAwLCAKKyAgICAwLCAwLCAwLCA5MDExNSwgOTAxMjEsIDkwMTI3LCA5MDEzMywgOTAxMzksIDkwMTQ1LCA5MDE1MSwgOTAxNTcsIDkwMTYzLCAKKyAgICA5MDE3MCwgOTAxNzUsIDkwMTgwLCA5MDE4NiwgOTAxOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDkwMTk4LCA5MDIwMywgOTAyMDgsIDkwMjEzLCA5MDIxOSwgOTAyMjQsIDkwMjMwLCA5MDIzNiwgCisgICAgOTAyNDIsIDkwMjQ4LCA5MDI1NSwgOTAyNjEsIDkwMjY4LCA5MDI3MywgOTAyNzgsIDkwMjgzLCA5MDI4OCwgOTAyOTMsIAorICAgIDkwMjk4LCA5MDMwMywgOTAzMDgsIDkwMzEzLCA5MDMxOCwgOTAzMjMsIDkwMzI4LCA5MDMzMywgOTAzMzgsIDkwMzQzLCAKKyAgICA5MDM0OCwgOTAzNTMsIDkwMzU4LCA5MDM2MywgOTAzNjgsIDkwMzczLCA5MDM3OCwgOTAzODMsIDkwMzg4LCA5MDM5MywgCisgICAgOTAzOTgsIDkwNDAzLCA5MDQwOCwgOTA0MTMsIDkwNDE4LCA5MDQyMywgOTA0MjksIDkwNDM0LCA5MDQ0MCwgOTA0NDYsIAorICAgIDkwNDUyLCA5MDQ1OCwgOTA0NjUsIDkwNDcxLCA5MDQ3OCwgOTA0ODMsIDkwNDg4LCA5MDQ5MywgOTA0OTgsIDkwNTAzLCAKKyAgICA5MDUwOCwgOTA1MTMsIDkwNTE4LCA5MDUyMywgOTA1MjgsIDkwNTMzLCA5MDUzOCwgOTA1NDMsIDkwNTQ4LCA5MDU1MywgCisgICAgOTA1NTgsIDkwNTYzLCA5MDU2OCwgOTA1NzMsIDkwNTc4LCA5MDU4MywgOTA1ODgsIDkwNTkzLCA5MDU5OCwgOTA2MDMsIAorICAgIDkwNjA4LCA5MDYxMywgOTA2MTgsIDkwNjIzLCA5MDYyOCwgOTA2MzMsIDkwNjM4LCA5MDY0MywgOTA2NDgsIDkwNjUzLCAKKyAgICA5MDY1OCwgOTA2NjMsIDkwNjY4LCA5MDY3MywgOTA2NzgsIDkwNjgzLCA5MDY4OCwgOTA2OTMsIDkwNjk4LCA5MDcwMywgCisgICAgOTA3MDgsIDkwNzEzLCA5MDcxOCwgOTA3MjMsIDkwNzI4LCA5MDczMywgOTA3MzgsIDkwNzQzLCA5MDc0OCwgOTA3NTMsIAorICAgIDkwNzU4LCA5MDc2MywgOTA3NjgsIDkwNzczLCA5MDc3OCwgOTA3ODMsIDkwNzg4LCA5MDc5MywgOTA3OTgsIDkwODAzLCAKKyAgICA5MDgwOCwgOTA4MTMsIDkwODE4LCA5MDgyMywgOTA4MjgsIDkwODMzLCA5MDgzOCwgOTA4NDMsIDkwODQ4LCA5MDg1MywgCisgICAgOTA4NTgsIDkwODYzLCA5MDg2OCwgOTA4NzMsIDkwODc4LCA5MDg4MywgOTA4ODgsIDkwODkzLCA5MDg5NywgOTA5MDEsIAorICAgIDkwOTA2LCA5MDkxMSwgOTA5MTYsIDkwOTIxLCA5MDkyNiwgOTA5MzEsIDkwOTM2LCA5MDk0MSwgOTA5NDYsIDkwOTUxLCAKKyAgICA5MDk1NiwgOTA5NjAsIDkwOTY0LCA5MDk2OCwgOTA5NzIsIDkwOTc2LCA5MDk4MCwgOTA5ODQsIDkwOTg5LCA5MDk5NCwgMCwgCisgICAgMCwgOTA5OTksIDkxMDA0LCA5MTAwOCwgOTEwMTIsIDkxMDE2LCA5MTAyMCwgOTEwMjQsIDkxMDI4LCA5MTAzMiwgOTEwMzYsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDkxMDEyLCA5MTAxNiwgOTEwMjAsIDkxMDI0LCA5MTAyOCwgOTEwMzIsIDAsIDAsIDkxMDM3LCAwLCAKLSAgICA5MTA0MiwgOTEwNDYsIDkxMDUxLCA5MTA1NiwgOTEwNjEsIDkxMDY2LCA5MTA3MSwgOTEwNzYsIDkxMDgxLCA5MTA4NiwgCi0gICAgOTEwOTEsIDkxMDk1LCA5MTEwMCwgOTExMDUsIDkxMTEwLCA5MTExNSwgOTExMTksIDkxMTI0LCA5MTEyOSwgOTExMzQsIAotICAgIDkxMTM5LCA5MTE0MywgOTExNDgsIDkxMTUzLCA5MTE1OCwgOTExNjMsIDkxMTY3LCA5MTE3MiwgOTExNzcsIDkxMTgyLCAKLSAgICA5MTE4NywgOTExOTEsIDkxMTk2LCA5MTIwMSwgOTEyMDYsIDkxMjExLCA5MTIxNiwgOTEyMjEsIDkxMjI2LCA5MTIzMCwgCi0gICAgOTEyMzUsIDkxMjQwLCA5MTI0NSwgOTEyNTAsIDAsIDkxMjU1LCA5MTI2MCwgMCwgMCwgMCwgOTEyNjUsIDAsIDAsIDkxMjcwLCAKLSAgICA5MTI3NSwgOTEyODIsIDkxMjg5LCA5MTI5NiwgOTEzMDMsIDkxMzEwLCA5MTMxNywgOTEzMjQsIDkxMzMxLCA5MTMzOCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTEwNDAsIDkxMDQ0LCA5MTA0OCwgOTEwNTIsIAorICAgIDkxMDU2LCA5MTA2MCwgMCwgMCwgOTEwNjUsIDAsIDkxMDcwLCA5MTA3NCwgOTEwNzksIDkxMDg0LCA5MTA4OSwgOTEwOTQsIAorICAgIDkxMDk5LCA5MTEwNCwgOTExMDksIDkxMTE0LCA5MTExOSwgOTExMjMsIDkxMTI4LCA5MTEzMywgOTExMzgsIDkxMTQzLCAKKyAgICA5MTE0NywgOTExNTIsIDkxMTU3LCA5MTE2MiwgOTExNjcsIDkxMTcxLCA5MTE3NiwgOTExODEsIDkxMTg2LCA5MTE5MSwgCisgICAgOTExOTUsIDkxMjAwLCA5MTIwNSwgOTEyMTAsIDkxMjE1LCA5MTIxOSwgOTEyMjQsIDkxMjI5LCA5MTIzNCwgOTEyMzksIAorICAgIDkxMjQ0LCA5MTI0OSwgOTEyNTQsIDkxMjU4LCA5MTI2MywgOTEyNjgsIDkxMjczLCA5MTI3OCwgMCwgOTEyODMsIDkxMjg4LCAKKyAgICAwLCAwLCAwLCA5MTI5MywgMCwgMCwgOTEyOTgsIDkxMzAzLCA5MTMxMCwgOTEzMTcsIDkxMzI0LCA5MTMzMSwgOTEzMzgsIAogICAgIDkxMzQ1LCA5MTM1MiwgOTEzNTksIDkxMzY2LCA5MTM3MywgOTEzODAsIDkxMzg3LCA5MTM5NCwgOTE0MDEsIDkxNDA4LCAKLSAgICA5MTQxNSwgOTE0MjIsIDAsIDkxNDI5LCA5MTQzNiwgOTE0NDIsIDkxNDQ4LCA5MTQ1NCwgOTE0NjEsIDkxNDY4LCA5MTQ3NiwgCi0gICAgOTE0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNDkzLCA5MTQ5OCwgOTE1MDMsIDkxNTA4LCA5MTUxMywgOTE1MTgsIAotICAgIDkxNTIzLCA5MTUyOCwgOTE1MzMsIDkxNTM4LCA5MTU0MywgOTE1NDgsIDkxNTUzLCA5MTU1OCwgOTE1NjMsIDkxNTY4LCAKLSAgICA5MTU3MywgOTE1NzgsIDkxNTgzLCA5MTU4OCwgOTE1OTMsIDkxNTk4LCA5MTYwMywgOTE2MDcsIDkxNjEyLCA5MTYxNywgCi0gICAgOTE2MjMsIDkxNjI3LCAwLCAwLCAwLCA5MTYzMSwgOTE2MzcsIDkxNjQxLCA5MTY0NiwgOTE2NTEsIDkxNjU2LCA5MTY2MCwgCi0gICAgOTE2NjUsIDkxNjY5LCA5MTY3NCwgOTE2NzksIDkxNjgzLCA5MTY4NywgOTE2OTIsIDkxNjk2LCA5MTcwMCwgOTE3MDUsIAotICAgIDkxNzEwLCA5MTcxNCwgOTE3MTksIDkxNzI0LCA5MTcyOSwgOTE3MzQsIDkxNzM5LCA5MTc0NCwgOTE3NDksIDkxNzU0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5MTc1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3NjQsIAotICAgIDkxNzcwLCA5MTc3NiwgOTE3ODIsIDkxNzg4LCA5MTc5NCwgOTE4MDEsIDkxODA4LCA5MTgxNSwgOTE4MjEsIDkxODI3LCAKLSAgICA5MTgzMywgOTE4NDAsIDkxODQ3LCA5MTg1NCwgOTE4NjAsIDkxODY3LCA5MTg3NCwgOTE4ODEsIDkxODg4LCA5MTg5NCwgCi0gICAgOTE5MDEsIDkxOTA4LCA5MTkxNCwgOTE5MjEsIDkxOTI4LCA5MTkzNSwgOTE5NDIsIDkxOTQ5LCA5MTk1NSwgOTE5NjIsIAotICAgIDkxOTY5LCA5MTk3NiwgOTE5ODIsIDkxOTg4LCA5MTk5NCwgOTIwMDAsIDkyMDA2LCA5MjAxMywgOTIwMjAsIDkyMDI2LCAKLSAgICA5MjAzMiwgOTIwMzgsIDkyMDQ1LCA5MjA1MSwgOTIwNTgsIDkyMDY1LCA5MjA3MiwgOTIwNzgsIDkyMDg2LCA5MjA5MywgCi0gICAgOTIwOTksIDkyMTA2LCA5MjExMywgOTIxMjAsIDkyMTI2LCAwLCAwLCAwLCAwLCAwLCAwLCA5MjEzMywgOTIxNDEsIDAsIDAsIAorICAgIDkxNDE1LCA5MTQyMiwgOTE0MjksIDkxNDM2LCA5MTQ0MywgOTE0NTAsIDAsIDkxNDU3LCA5MTQ2NCwgOTE0NzAsIDkxNDc2LCAKKyAgICA5MTQ4MiwgOTE0ODksIDkxNDk2LCA5MTUwNCwgOTE1MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNTIxLCA5MTUyNiwgCisgICAgOTE1MzEsIDkxNTM2LCA5MTU0MSwgOTE1NDYsIDkxNTUxLCA5MTU1NiwgOTE1NjEsIDkxNTY2LCA5MTU3MSwgOTE1NzYsIAorICAgIDkxNTgxLCA5MTU4NiwgOTE1OTEsIDkxNTk2LCA5MTYwMSwgOTE2MDYsIDkxNjExLCA5MTYxNiwgOTE2MjEsIDkxNjI2LCAKKyAgICA5MTYzMSwgOTE2MzUsIDkxNjQwLCA5MTY0NSwgOTE2NTEsIDkxNjU1LCAwLCAwLCAwLCA5MTY1OSwgOTE2NjUsIDkxNjY5LCAKKyAgICA5MTY3NCwgOTE2NzksIDkxNjg0LCA5MTY4OCwgOTE2OTMsIDkxNjk3LCA5MTcwMiwgOTE3MDcsIDkxNzExLCA5MTcxNSwgCisgICAgOTE3MjAsIDkxNzI0LCA5MTcyOCwgOTE3MzMsIDkxNzM4LCA5MTc0MiwgOTE3NDcsIDkxNzUyLCA5MTc1NywgOTE3NjIsIAorICAgIDkxNzY3LCA5MTc3MiwgOTE3NzcsIDkxNzgyLCAwLCAwLCAwLCAwLCAwLCA5MTc4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTIxNDksIDkyMTUzLCA5MjE1OCwgOTIxNjMsIDAsIAotICAgIDkyMTY5LCA5MjE3NCwgMCwgMCwgMCwgMCwgMCwgOTIxNzksIDkyMTg1LCA5MjE5MiwgOTIxOTcsIDkyMjAyLCA5MjIwNiwgCi0gICAgOTIyMTEsIDkyMjE2LCAwLCA5MjIyMSwgOTIyMjYsIDkyMjMxLCAwLCA5MjIzNiwgOTIyNDEsIDkyMjQ2LCA5MjI1MSwgCi0gICAgOTIyNTYsIDkyMjYxLCA5MjI2NiwgOTIyNzEsIDkyMjc2LCA5MjI4MSwgOTIyODYsIDkyMjkwLCA5MjI5NCwgOTIyOTksIAotICAgIDkyMzA0LCA5MjMwOSwgOTIzMTMsIDkyMzE3LCA5MjMyMSwgOTIzMjYsIDkyMzMxLCA5MjMzNiwgOTIzNDEsIDkyMzQ1LCAKLSAgICA5MjM1MCwgOTIzNTQsIDkyMzU5LCAwLCAwLCAwLCAwLCA5MjM2NCwgOTIzNzAsIDkyMzc1LCAwLCAwLCAwLCAwLCA5MjM4MCwgCi0gICAgOTIzODQsIDkyMzg4LCA5MjM5MiwgOTIzOTYsIDkyNDAwLCA5MjQwNSwgOTI0MTAsIDkyNDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5MjQyMiwgOTI0MjgsIDkyNDM1LCA5MjQ0MSwgOTI0NDgsIDkyNDU0LCA5MjQ2MCwgOTI0NjYsIDkyNDczLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5MjQ3OSwgOTI0ODcsIDkyNDk1LCA5MjUwMywgOTI1MTEsIDkyNTE5LCA5MjUyNywgOTI1MzUsIAotICAgIDkyNTQzLCA5MjU1MSwgOTI1NTksIDkyNTY3LCA5MjU3NSwgOTI1ODMsIDkyNTkxLCA5MjU5OSwgOTI2MDcsIDkyNjE1LCAKLSAgICA5MjYyMywgOTI2MzEsIDkyNjM5LCA5MjY0NywgOTI2NTUsIDkyNjYzLCA5MjY3MSwgOTI2NzksIDkyNjg3LCA5MjY5NSwgCi0gICAgOTI3MDMsIDkyNzExLCA5MjcxOCwgOTI3MjYsIDkyNzM0LCA5MjczOCwgOTI3NDMsIDkyNzQ4LCA5Mjc1MywgOTI3NTgsIAotICAgIDkyNzYzLCA5Mjc2OCwgOTI3NzMsIDkyNzc3LCA5Mjc4MiwgOTI3ODYsIDkyNzkxLCA5Mjc5NSwgOTI4MDAsIDkyODA0LCAKLSAgICA5MjgwOSwgOTI4MTQsIDkyODE5LCA5MjgyNCwgOTI4MjksIDkyODM0LCA5MjgzOSwgOTI4NDQsIDkyODQ5LCA5Mjg1NCwgCi0gICAgOTI4NTksIDkyODY0LCA5Mjg2OSwgOTI4NzQsIDkyODc5LCA5Mjg4NCwgOTI4ODksIDkyODk0LCA5Mjg5OSwgOTI5MDQsIAotICAgIDkyOTA5LCA5MjkxNCwgOTI5MTksIDkyOTI0LCA5MjkyOSwgOTI5MzQsIDkyOTM5LCA5Mjk0NCwgOTI5NDksIDkyOTU0LCAKLSAgICA5Mjk1OSwgOTI5NjQsIDkyOTY5LCA5Mjk3NCwgOTI5NzksIDkyOTg0LCA5Mjk4OSwgOTI5OTQsIDAsIDAsIDAsIDkyOTk5LCAKLSAgICA5MzAwNCwgOTMwMTMsIDkzMDIxLCA5MzAzMCwgOTMwMzksIDkzMDUwLCA5MzA2MSwgOTMwNjgsIDkzMDc1LCA5MzA4MiwgCi0gICAgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCA5MzE0NSwgOTMxNTIsIAotICAgIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgMCwgMCwgOTMyMTUsIAotICAgIDkzMjIxLCA5MzIyNywgOTMyMzMsIDkzMjM5LCA5MzI0NiwgOTMyNTMsIDkzMjYxLCA5MzI2OSwgOTMyNzYsIDkzMjgzLCAKLSAgICA5MzI5MCwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIDkzMzQ2LCA5MzM1MywgCi0gICAgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgMCwgMCwgMCwgMCwgMCwgOTM0MDIsIDkzNDA4LCAKLSAgICA5MzQxNCwgOTM0MjAsIDkzNDI2LCA5MzQzMywgOTM0NDAsIDkzNDQ4LCA5MzQ1NiwgOTM0NjIsIDkzNDY4LCA5MzQ3NSwgCi0gICAgOTM0ODEsIDkzNDg3LCA5MzQ5MywgOTM0OTksIDkzNTA2LCA5MzUxMywgOTM1MjAsIDkzNTI3LCA5MzUzNCwgOTM1NDEsIAotICAgIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgOTM2MDQsIDkzNjExLCAKLSAgICA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIDkzNjc0LCA5MzY4MSwgCi0gICAgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCA5Mzc0NCwgOTM3NTEsIAotICAgIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgOTM4MTQsIDkzODIxLCAKLSAgICA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIDkzODg0LCA5Mzg5MSwgCi0gICAgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCA5Mzk1NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTM5NjEsIDkzOTY1LCA5Mzk2OSwgOTM5NzMsIDkzOTc3LCA5Mzk4MSwgOTM5ODUsIDkzOTg5LCAKLSAgICA5Mzk5MywgOTM5OTcsIDk0MDAyLCA5NDAwNywgOTQwMTIsIDk0MDE3LCA5NDAyMiwgOTQwMjcsIDk0MDMyLCA5NDAzNywgCi0gICAgOTQwNDIsIDk0MDQ4LCA5NDA1NCwgOTQwNjAsIDk0MDY3LCA5NDA3NCwgOTQwODEsIDk0MDg4LCA5NDA5NSwgOTQxMDIsIAotICAgIDk0MTA5LCA5NDExNiwgOTQxMjMsIDAsIDk0MTMwLCA5NDEzNCwgOTQxMzgsIDk0MTQyLCA5NDE0NiwgOTQxNTAsIDk0MTUzLCAKLSAgICA5NDE1NywgOTQxNjAsIDk0MTY0LCA5NDE2NywgOTQxNzEsIDk0MTc1LCA5NDE4MCwgOTQxODQsIDk0MTg5LCA5NDE5MiwgCi0gICAgOTQxOTYsIDk0MTk5LCA5NDIwMywgOTQyMDYsIDk0MjEwLCA5NDIxNCwgOTQyMTgsIDk0MjIyLCA5NDIyNiwgOTQyMzAsIAotICAgIDk0MjM0LCA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCAKLSAgICA5NDI3NCwgOTQyNzgsIDk0MjgxLCA5NDI4NCwgOTQyODgsIDk0MjkyLCA5NDI5NiwgOTQyOTksIDk0MzAyLCA5NDMwNSwgCi0gICAgOTQzMDksIDk0MzEzLCA5NDMxNywgOTQzMjEsIDk0MzI0LCA5NDMyNywgOTQzMzEsIDk0MzM3LCA5NDM0MywgOTQzNDksIAotICAgIDk0MzU0LCA5NDM2MSwgOTQzNjUsIDk0MzcwLCA5NDM3NCwgOTQzNzksIDk0Mzg0LCA5NDM5MCwgOTQzOTUsIDk0NDAxLCAKLSAgICA5NDQwNSwgOTQ0MTAsIDk0NDE0LCA5NDQxOSwgOTQ0MjIsIDk0NDI1LCA5NDQyOSwgOTQ0MzQsIDk0NDQwLCA5NDQ0NSwgCi0gICAgOTQ0NTEsIDAsIDAsIDAsIDAsIDk0NDU2LCA5NDQ1OSwgOTQ0NjIsIDk0NDY1LCA5NDQ2OCwgOTQ0NzEsIDk0NDc0LCAKLSAgICA5NDQ3NywgOTQ0ODAsIDk0NDgzLCA5NDQ4NywgOTQ0OTEsIDk0NDk1LCA5NDQ5OSwgOTQ1MDMsIDk0NTA3LCA5NDUxMSwgCi0gICAgOTQ1MTUsIDk0NTE5LCA5NDUyNCwgOTQ1MjksIDk0NTMzLCA5NDUzNiwgOTQ1MzksIDk0NTQyLCA5NDU0NSwgOTQ1NDgsIAotICAgIDk0NTUxLCA5NDU1NCwgOTQ1NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk0NTYwLCA5NDU2NSwgOTQ1NzAsIDk0NTc1LCA5NDU3OSwgOTQ1ODQsIDk0NTg4LCA5NDU5MywgOTQ1OTcsIDk0NjAyLCAKLSAgICA5NDYwNiwgOTQ2MTEsIDk0NjE1LCA5NDYyMCwgOTQ2MjQsIDk0NjI5LCA5NDYzNCwgOTQ2MzksIDk0NjQ0LCA5NDY0OSwgCi0gICAgOTQ2NTQsIDk0NjU5LCA5NDY2NCwgOTQ2NjksIDk0Njc0LCA5NDY3OSwgOTQ2ODQsIDk0Njg5LCA5NDY5NCwgOTQ2OTksIAotICAgIDk0NzA0LCA5NDcwOSwgOTQ3MTQsIDk0NzE5LCA5NDcyNCwgOTQ3MjgsIDk0NzMyLCA5NDczNywgOTQ3NDIsIDk0NzQ3LCAKLSAgICA5NDc1MSwgOTQ3NTUsIDk0NzU5LCA5NDc2NCwgOTQ3NjksIDk0Nzc0LCA5NDc3OSwgOTQ3ODMsIDk0Nzg3LCA5NDc5MywgCi0gICAgOTQ3OTgsIDk0ODA0LCA5NDgwOSwgOTQ4MTUsIDk0ODIwLCA5NDgyNiwgOTQ4MzEsIDk0ODM3LCA5NDg0MiwgOTQ4NDcsIAotICAgIDk0ODUyLCA5NDg1NywgOTQ4NjEsIDk0ODY2LCA5NDg3MiwgOTQ4NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDk0ODgxLCA5NDg4OCwgOTQ4OTUsIDk0OTAyLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCA5NDkzMCwgCi0gICAgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgOTUwMDAsIAotICAgIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NTA1NiwgOTUwNjMsIDk1MDY5LCA5NTA3NSwgOTUwODEsIDk1MDg3LCA5NTA5MywgOTUwOTksIDk1MTA1LCA5NTExMSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOTUxMTcsIDk1MTIyLCA5NTEyNywgOTUxMzIsIDk1MTM3LCA5NTE0MSwgOTUxNDUsIDk1MTQ5LCAKLSAgICA5NTE1NCwgOTUxNTksIDk1MTY0LCA5NTE2OSwgOTUxNzQsIDk1MTc5LCA5NTE4NCwgOTUxODksIDk1MTk0LCA5NTE5OSwgCi0gICAgOTUyMDQsIDk1MjA5LCA5NTIxNCwgOTUyMTksIDk1MjI0LCA5NTIyOSwgOTUyMzQsIDk1MjM5LCA5NTI0NCwgOTUyNDksIAotICAgIDk1MjU0LCA5NTI1OSwgOTUyNjQsIDk1MjY5LCA5NTI3NCwgOTUyNzksIDk1Mjg0LCA5NTI4OSwgOTUyOTQsIDk1Mjk5LCAKLSAgICA5NTMwNCwgOTUzMDksIDk1MzE0LCA5NTMxOSwgOTUzMjUsIDk1MzMwLCA5NTMzNiwgOTUzNDEsIDk1MzQ3LCA5NTM1MiwgCi0gICAgOTUzNTgsIDk1MzY0LCA5NTM2OCwgOTUzNzMsIDk1Mzc3LCAwLCA5NTM4MSwgOTUzODYsIDk1MzkwLCA5NTM5NCwgOTUzOTgsIAotICAgIDk1NDAyLCA5NTQwNiwgOTU0MTAsIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI3LCA5NTQzMSwgOTU0MzYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NDQxLCA5NTQ0NSwgOTU0NDksIDk1NDUzLCA5NTQ1NiwgOTU0NjAsIAotICAgIDk1NDYzLCA5NTQ2NywgOTU0NzAsIDk1NDc0LCA5NTQ3OCwgOTU0ODMsIDk1NDg3LCA5NTQ5MiwgOTU0OTUsIDk1NDk5LCAKLSAgICA5NTUwMiwgOTU1MDYsIDk1NTA5LCA5NTUxMywgOTU1MTcsIDk1NTIxLCA5NTUyNSwgOTU1MjksIDk1NTMzLCA5NTUzNywgCi0gICAgOTU1NDEsIDk1NTQ1LCA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIAotICAgIDk1NTgxLCA5NTU4NCwgOTU1ODcsIDk1NTkxLCA5NTU5NSwgOTU1OTksIDk1NjAyLCA5NTYwNSwgOTU2MDgsIDk1NjEyLCAKLSAgICA5NTYxNiwgOTU2MjAsIDk1NjI0LCA5NTYyOCwgOTU2MzEsIDk1NjM0LCA5NTYzOSwgOTU2NDMsIDk1NjQ4LCA5NTY1MiwgCi0gICAgOTU2NTcsIDk1NjYyLCA5NTY2OCwgOTU2NzMsIDk1Njc5LCA5NTY4MywgOTU2ODgsIDk1NjkyLCA5NTY5NywgOTU3MDEsIAotICAgIDk1NzA1LCA5NTcwOSwgOTU3MTMsIDk1NzE2LCA5NTcxOSwgOTU3MjMsIDk1NzI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NTczMCwgOTU3MzQsIDk1NzM3LCA5NTc0MCwgOTU3NDMsIDk1NzQ2LCA5NTc0OSwgOTU3NTIsIDk1NzU1LCA5NTc1OCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NjEsIDk1NzY1LCA5NTc3MCwgOTU3NzQsIDk1Nzc5LCAKLSAgICA5NTc4MywgOTU3ODgsIDk1NzkyLCA5NTc5NywgOTU4MDEsIDk1ODA2LCA5NTgxMCwgOTU4MTUsIDk1ODIwLCA5NTgyNSwgCi0gICAgOTU4MzAsIDk1ODM1LCA5NTg0MCwgOTU4NDUsIDk1ODUwLCA5NTg1NSwgOTU4NjAsIDk1ODY1LCA5NTg3MCwgOTU4NzUsIAotICAgIDk1ODgwLCA5NTg4NSwgOTU4OTAsIDk1ODk1LCA5NTkwMCwgOTU5MDQsIDk1OTA4LCA5NTkxMywgOTU5MTgsIDk1OTIzLCAKLSAgICA5NTkyNywgOTU5MzEsIDk1OTM1LCA5NTk0MCwgOTU5NDUsIDk1OTUwLCA5NTk1NCwgOTU5NTgsIDk1OTYzLCA5NTk2OCwgCi0gICAgOTU5NzMsIDk1OTc5LCA5NTk4NCwgOTU5OTAsIDk1OTk1LCA5NjAwMSwgOTYwMDYsIDk2MDEyLCA5NjAxNywgOTYwMjMsIAotICAgIDk2MDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NjAzMywgOTYwMzgsIDk2MDQyLCA5NjA0NiwgOTYwNTAsIDk2MDU0LCAKLSAgICA5NjA1OCwgOTYwNjIsIDk2MDY2LCA5NjA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNzQsIDk2MDc3LCA5NjA4MiwgOTYwODgsIAotICAgIDk2MDk2LCA5NjEwMSwgOTYxMDcsIDk2MTE1LCA5NjEyMSwgOTYxMjcsIDk2MTMxLCA5NjEzNSwgOTYxNDIsIDk2MTUxLCAKLSAgICA5NjE1OCwgOTYxNjcsIDk2MTczLCA5NjE4MiwgOTYxODksIDk2MTk2LCA5NjIwMywgOTYyMTMsIDk2MjE5LCA5NjIyMywgCi0gICAgOTYyMzAsIDk2MjM5LCA5NjI0OSwgOTYyNTYsIDk2MjYzLCA5NjI2NywgOTYyNzEsIDk2Mjc4LCA5NjI4OCwgOTYyOTIsIAotICAgIDk2Mjk5LCA5NjMwNiwgOTYzMTMsIDk2MzE5LCA5NjMyNiwgOTYzMzMsIDk2MzQwLCA5NjM0NywgOTYzNTEsIDk2MzU1LCAKLSAgICA5NjM1OSwgOTYzNjYsIDk2MzcwLCA5NjM3NywgOTYzODQsIDk2Mzk4LCA5NjQwNywgOTY0MTEsIDk2NDE1LCA5NjQxOSwgCi0gICAgOTY0MjYsIDk2NDMwLCA5NjQzNCwgOTY0MzgsIDk2NDQ2LCA5NjQ1NCwgOTY0NzMsIDk2NDgzLCA5NjUwMywgOTY1MDcsIAotICAgIDk2NTExLCA5NjUxNSwgOTY1MTksIDk2NTIzLCA5NjUyNywgOTY1MzEsIDk2NTM4LCA5NjU0MiwgOTY1NDUsIDk2NTQ5LCAKLSAgICA5NjU1MywgOTY1NTksIDk2NTY2LCA5NjU3NSwgOTY1NzksIDk2NTg4LCA5NjU5NywgOTY2MDUsIDk2NjA5LCA5NjYxNiwgCi0gICAgOTY2MjAsIDk2NjI0LCA5NjYyOCwgOTY2MzIsIDk2NjQzLCA5NjY1MiwgOTY2NjEsIDk2NjcwLCA5NjY3OSwgOTY2OTEsIAotICAgIDk2NzAwLCA5NjcwOSwgOTY3MTgsIDk2NzI2LCA5NjczNSwgOTY3NDcsIDk2NzU2LCA5Njc2NSwgOTY3NzQsIDk2Nzg2LCAKLSAgICA5Njc5NSwgOTY4MDQsIDk2ODE2LCA5NjgyNSwgOTY4MzQsIDk2ODQ2LCA5Njg1NSwgOTY4NTksIDk2ODYzLCA5Njg2NywgCi0gICAgOTY4NzEsIDk2ODc1LCA5Njg3OSwgOTY4ODMsIDk2ODkwLCA5Njg5NCwgOTY4OTgsIDk2OTA5LCA5NjkxMywgOTY5MTcsIAotICAgIDk2OTI0LCA5NjkzMCwgOTY5MzYsIDk2OTQwLCA5Njk0NywgOTY5NTEsIDk2OTU1LCA5Njk1OSwgOTY5NjMsIDk2OTY3LCAKLSAgICA5Njk3MSwgOTY5NzcsIDk2OTg1LCA5Njk4OSwgOTY5OTMsIDk2OTk2LCA5NzAwMiwgOTcwMTIsIDk3MDE2LCA5NzAyOCwgCi0gICAgOTcwMzUsIDk3MDQyLCA5NzA0OSwgOTcwNTYsIDk3MDYyLCA5NzA2NiwgOTcwNzAsIDk3MDc0LCA5NzA3OCwgOTcwODUsIAotICAgIDk3MDk0LCA5NzEwMSwgOTcxMDksIDk3MTE3LCA5NzEyMywgOTcxMjcsIDk3MTMxLCA5NzEzNSwgOTcxMzksIDk3MTQ1LCAKLSAgICA5NzE1NCwgOTcxNjYsIDk3MTczLCA5NzE4MCwgOTcxODksIDk3MjAwLCA5NzIwNiwgOTcyMTUsIDk3MjI0LCA5NzIzMSwgCi0gICAgOTcyNDAsIDk3MjQ3LCA5NzI1NCwgOTcyNjQsIDk3MjcxLCA5NzI3OCwgOTcyODUsIDk3MjkyLCA5NzI5NiwgOTczMDIsIAotICAgIDk3MzA2LCA5NzMxNywgOTczMjUsIDk3MzM0LCA5NzM0NiwgOTczNTMsIDk3MzYwLCA5NzM3MCwgOTczNzcsIDk3Mzg2LCAKLSAgICA5NzM5MywgOTc0MDIsIDk3NDA5LCA5NzQxNiwgOTc0MjYsIDk3NDMzLCA5NzQ0MCwgOTc0NTAsIDk3NDU3LCA5NzQ2OSwgCi0gICAgOTc0NzgsIDk3NDg1LCA5NzQ5MiwgOTc0OTksIDk3NTA4LCA5NzUxOCwgOTc1MzEsIDk3NTM4LCA5NzU0OCwgOTc1NTgsIAotICAgIDk3NTY1LCA5NzU3NCwgOTc1ODcsIDk3NTk0LCA5NzYwMSwgOTc2MDgsIDk3NjE4LCA5NzYyOCwgOTc2MzUsIDk3NjQ1LCAKLSAgICA5NzY1MiwgOTc2NTksIDk3NjY5LCA5NzY3NSwgOTc2ODIsIDk3Njg5LCA5NzY5NiwgOTc3MDYsIDk3NzEzLCA5NzcyMCwgCi0gICAgOTc3MjcsIDk3NzMzLCA5Nzc0MCwgOTc3NTAsIDk3NzU3LCA5Nzc2MSwgOTc3NjksIDk3NzczLCA5Nzc4NSwgOTc3ODksIAotICAgIDk3ODAzLCA5NzgwNywgOTc4MTEsIDk3ODE1LCA5NzgxOSwgOTc4MjUsIDk3ODMyLCA5Nzg0MCwgOTc4NDQsIDk3ODQ4LCAKLSAgICA5Nzg1MiwgOTc4NTYsIDk3ODYzLCA5Nzg2NywgOTc4NzMsIDk3ODc5LCA5Nzg4NywgOTc4OTEsIDk3ODk4LCA5NzkwNiwgCi0gICAgOTc5MTAsIDk3OTE0LCA5NzkyMCwgOTc5MjQsIDk3OTMzLCA5Nzk0MiwgOTc5NDksIDk3OTU5LCA5Nzk2NSwgOTc5NjksIAotICAgIDk3OTczLCA5Nzk4MSwgOTc5ODgsIDk3OTk1LCA5ODAwMSwgOTgwMDUsIDk4MDEzLCA5ODAxNywgOTgwMjQsIDk4MDM2LCAKLSAgICA5ODA0MywgOTgwNTMsIDk4MDU5LCA5ODA2MywgOTgwNzIsIDk4MDc5LCA5ODA4OCwgOTgwOTIsIDk4MDk2LCA5ODEwMywgCi0gICAgOTgxMDcsIDk4MTExLCA5ODExNSwgOTgxMTksIDk4MTIyLCA5ODEyOCwgOTgxMzQsIDk4MTM4LCA5ODE0MiwgOTgxNDksIAotICAgIDk4MTU2LCA5ODE2MywgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNCwgOTgyMDgsIDk4MjEyLCAKLSAgICA5ODIxOSwgOTgyMjYsIDk4MjMzLCA5ODI0MCwgOTgyNDcsIDk4MjUxLCA5ODI1NCwgOTgyNTksIDk4MjYzLCA5ODI2NywgCi0gICAgOTgyNzYsIDk4Mjg1LCA5ODI4OSwgOTgyOTMsIDk4Mjk5LCA5ODMwNSwgOTgzMjIsIDk4MzI4LCA5ODMzMiwgOTgzNDEsIAotICAgIDk4MzQ1LCA5ODM0OSwgOTgzNTYsIDk4MzY0LCA5ODM3MiwgOTgzNzgsIDk4MzgyLCA5ODM4NiwgOTgzOTAsIDk4Mzk0LCAKLSAgICA5ODM5NywgOTg0MDMsIDk4NDEwLCA5ODQyMCwgOTg0MjcsIDk4NDM0LCA5ODQ0MSwgOTg0NDcsIDk4NDU0LCA5ODQ2MSwgCi0gICAgOTg0NjgsIDk4NDc1LCA5ODQ4MiwgOTg0OTEsIDk4NDk4LCA5ODUxMCwgOTg1MTcsIDk4NTI0LCA5ODUzNCwgOTg1NDUsIAotICAgIDk4NTUyLCA5ODU1OSwgOTg1NjYsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIDk4NjE1LCAKLSAgICA5ODYyNSwgOTg2MzUsIDk4NjQ1LCA5ODY1MiwgOTg2NjIsIDk4NjY5LCA5ODY3NiwgOTg2ODMsIDk4NjkwLCA5ODY5NiwgCi0gICAgOTg3MDMsIDk4NzEwLCA5ODcxNywgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OCwgOTg3NjUsIAotICAgIDk4NzcyLCA5ODc4MSwgOTg3ODgsIDk4Nzk1LCA5ODc5OSwgOTg4MDcsIDk4ODExLCA5ODgxNSwgOTg4MTksIDk4ODIzLCAKLSAgICA5ODgyNywgOTg4MzQsIDk4ODM4LCA5ODg0NywgOTg4NTEsIDk4ODU4LCA5ODg2NiwgOTg4NzAsIDk4ODc0LCA5ODg3OCwgCi0gICAgOTg4OTEsIDk4OTA3LCA5ODkxMSwgOTg5MTUsIDk4OTIyLCA5ODkyOCwgOTg5MzUsIDk4OTM5LCA5ODk0MywgOTg5NDcsIAotICAgIDk4OTUxLCA5ODk1NSwgOTg5NjIsIDk4OTY2LCA5ODk4NCwgOTg5ODgsIDk4OTkyLCA5ODk5OSwgOTkwMDMsIDk5MDA3LCAKLSAgICA5OTAxMywgOTkwMTcsIDk5MDIxLCA5OTAyOSwgOTkwMzMsIDk5MDM3LCA5OTA0MSwgOTkwNDUsIDk5MDUxLCA5OTA2MiwgCi0gICAgOTkwNzEsIDk5MDgwLCA5OTA4NywgOTkwOTQsIDk5MTA1LCA5OTExMiwgOTkxMTksIDk5MTI2LCA5OTEzMywgOTkxNDAsIAotICAgIDk5MTQ3LCA5OTE1NCwgOTkxNjQsIDk5MTcwLCA5OTE3NywgOTkxODcsIDk5MTk2LCA5OTIwMywgOTkyMTIsIDk5MjIyLCAKLSAgICA5OTIyOSwgOTkyMzYsIDk5MjQzLCA5OTI1MCwgOTkyNjIsIDk5MjY5LCA5OTI3NiwgOTkyODMsIDk5MjkwLCA5OTI5NywgCi0gICAgOTkzMDcsIDk5MzE0LCA5OTMyMSwgOTkzMzEsIDk5MzQ0LCA5OTM1NiwgOTkzNjMsIDk5MzczLCA5OTM4MCwgOTkzODcsIAotICAgIDk5Mzk0LCA5OTQwOCwgOTk0MTQsIDk5NDIyLCA5OTQzMiwgOTk0NDIsIDk5NDQ5LCA5OTQ1NiwgOTk0NjIsIDk5NDY2LCAKLSAgICA5OTQ3MywgOTk0ODMsIDk5NDg5LCA5OTUwMiwgOTk1MDYsIDk5NTEwLCA5OTUxNywgOTk1MjEsIDk5NTI4LCA5OTUzOCwgCi0gICAgOTk1NDIsIDk5NTQ2LCA5OTU1MCwgOTk1NTQsIDk5NTU4LCA5OTU2NSwgOTk1NjksIDk5NTc2LCA5OTU4MywgOTk1OTAsIAotICAgIDk5NTk5LCA5OTYwOCwgOTk2MTgsIDk5NjI1LCA5OTYzMiwgOTk2MzksIDk5NjQ5LCA5OTY1NiwgOTk2NjYsIDk5NjczLCAKLSAgICA5OTY4MywgOTk2OTAsIDk5Njk3LCA5OTcwNywgOTk3MTcsIDk5NzI0LCA5OTczMCwgOTk3MzgsIDk5NzQ2LCA5OTc1MiwgCi0gICAgOTk3NTgsIDk5NzYyLCA5OTc2NiwgOTk3NzMsIDk5NzgxLCA5OTc4NywgOTk3OTEsIDk5Nzk1LCA5OTc5OSwgOTk4MDYsIAotICAgIDk5ODE4LCA5OTgyMSwgOTk4MjgsIDk5ODM0LCA5OTgzOCwgOTk4NDIsIDk5ODQ2LCA5OTg1MCwgOTk4NTQsIDk5ODU4LCAKLSAgICA5OTg2MiwgOTk4NjYsIDk5ODcwLCA5OTg3NCwgOTk4ODEsIDk5ODg1LCA5OTg5MSwgOTk4OTUsIDk5ODk5LCA5OTkwMywgCi0gICAgOTk5MDksIDk5OTE2LCA5OTkyMywgOTk5MzAsIDk5OTQxLCA5OTk0OSwgOTk5NTMsIDk5OTU5LCA5OTk2OCwgOTk5NzUsIAotICAgIDk5OTgxLCA5OTk4NCwgOTk5ODgsIDk5OTkyLCA5OTk5OCwgMTAwMDA3LCAxMDAwMTUsIDEwMDAxOSwgMTAwMDI1LCAKLSAgICAxMDAwMjksIDEwMDAzMywgMTAwMDM3LCAxMDAwNDMsIDEwMDA1MCwgMTAwMDU2LCAxMDAwNjAsIDEwMDA2NiwgMTAwMDcwLCAKLSAgICAxMDAwNzQsIDEwMDA4MywgMTAwMDk1LCAxMDAwOTksIDEwMDEwNiwgMTAwMTEzLCAxMDAxMjMsIDEwMDEzMCwgMTAwMTQyLCAKLSAgICAxMDAxNDksIDEwMDE1NiwgMTAwMTYzLCAxMDAxNzQsIDEwMDE4NCwgMTAwMTk3LCAxMDAyMDcsIDEwMDIxNCwgMTAwMjE4LCAKLSAgICAxMDAyMjIsIDEwMDIyNiwgMTAwMjMwLCAxMDAyMzksIDEwMDI0OCwgMTAwMjU3LCAxMDAyNzQsIDEwMDI4MywgMTAwMjg5LCAKLSAgICAxMDAyOTYsIDEwMDMwNCwgMTAwMzE3LCAxMDAzMjEsIDEwMDMzMCwgMTAwMzM5LCAxMDAzNDgsIDEwMDM1NywgMTAwMzY4LCAKLSAgICAxMDAzNzcsIDEwMDM4NiwgMTAwMzk1LCAxMDA0MDQsIDEwMDQxMywgMTAwNDIyLCAxMDA0MzIsIDEwMDQzNSwgMTAwNDM5LCAKLSAgICAxMDA0NDMsIDEwMDQ0NywgMTAwNDUxLCAxMDA0NTUsIDEwMDQ2MSwgMTAwNDY4LCAxMDA0NzUsIDEwMDQ4MiwgMTAwNDg4LCAKLSAgICAxMDA0OTQsIDEwMDUwMSwgMTAwNTA3LCAxMDA1MTQsIDEwMDUyMiwgMTAwNTI2LCAxMDA1MzMsIDEwMDU0MCwgMTAwNTQ3LCAKLSAgICAxMDA1NTUsIDEwMDU1OCwgMTAwNTYyLCAxMDA1NjYsIDEwMDU3MCwgMTAwNTczLCAxMDA1NzksIDEwMDU4MywgMTAwNTg5LCAKLSAgICAxMDA1OTYsIDEwMDYwMywgMTAwNjA5LCAxMDA2MTYsIDEwMDYyMywgMTAwNjMwLCAxMDA2MzcsIDEwMDY0NCwgMTAwNjUxLCAKLSAgICAxMDA2NTgsIDEwMDY2NSwgMTAwNjcyLCAxMDA2NzksIDEwMDY4NiwgMTAwNjkzLCAxMDA3MDAsIDEwMDcwNywgMTAwNzEzLCAKLSAgICAxMDA3MTcsIDEwMDcyNiwgMTAwNzMwLCAxMDA3MzQsIDEwMDczOCwgMTAwNzQyLCAxMDA3NDgsIDEwMDc1NSwgMTAwNzYyLCAKLSAgICAxMDA3NjksIDEwMDc3NiwgMTAwNzgzLCAxMDA3ODksIDEwMDc5NywgMTAwODAxLCAxMDA4MDUsIDEwMDgwOSwgMTAwODEzLCAKLSAgICAxMDA4MTksIDEwMDgzNiwgMTAwODUzLCAxMDA4NTcsIDEwMDg2MSwgMTAwODY1LCAxMDA4NjksIDEwMDg3MywgMTAwODc3LCAKLSAgICAxMDA4ODMsIDEwMDg5MCwgMTAwODk0LCAxMDA5MDAsIDEwMDkwNywgMTAwOTE0LCAxMDA5MjEsIDEwMDkyOCwgMTAwOTM1LCAKLSAgICAxMDA5NDQsIDEwMDk1MSwgMTAwOTU4LCAxMDA5NjUsIDEwMDk3MiwgMTAwOTc2LCAxMDA5ODAsIDEwMDk4NiwgMTAwOTk4LCAKLSAgICAxMDEwMDIsIDEwMTAwNiwgMTAxMDE1LCAxMDEwMTksIDEwMTAyMywgMTAxMDI3LCAxMDEwMzMsIDEwMTAzNywgMTAxMDQxLCAKLSAgICAxMDEwNTAsIDEwMTA1NCwgMTAxMDU4LCAxMDEwNjIsIDEwMTA2OSwgMTAxMDczLCAxMDEwNzcsIDEwMTA4MSwgMTAxMDg1LCAKLSAgICAxMDEwODksIDEwMTA5MywgMTAxMDk3LCAxMDExMDEsIDEwMTEwNywgMTAxMTE0LCAxMDExMjEsIDEwMTEyNywgMTAxMTMxLCAKLSAgICAxMDExNDgsIDEwMTE1NCwgMTAxMTU4LCAxMDExNjQsIDEwMTE3MCwgMTAxMTc2LCAxMDExODIsIDEwMTE4OCwgMTAxMTk0LCAKLSAgICAxMDExOTgsIDEwMTIwMiwgMTAxMjA2LCAxMDEyMTIsIDEwMTIxNiwgMTAxMjIyLCAxMDEyMjYsIDEwMTIzMCwgMTAxMjM3LCAKLSAgICAxMDEyNDQsIDEwMTI2MSwgMTAxMjY1LCAxMDEyNjksIDEwMTI3MywgMTAxMjc3LCAxMDEyODEsIDEwMTI5MywgMTAxMjk2LCAKLSAgICAxMDEzMDEsIDEwMTMwNiwgMTAxMzIxLCAxMDEzMzEsIDEwMTM0MywgMTAxMzQ3LCAxMDEzNTEsIDEwMTM1NSwgMTAxMzYxLCAKLSAgICAxMDEzNjgsIDEwMTM3NSwgMTAxMzg1LCAxMDEzOTcsIDEwMTQwMywgMTAxNDA5LCAxMDE0MTgsIDEwMTQyMiwgMTAxNDI2LCAKLSAgICAxMDE0MzMsIDEwMTQ0MywgMTAxNDUwLCAxMDE0NTYsIDEwMTQ2MCwgMTAxNDY0LCAxMDE0NzEsIDEwMTQ3NywgMTAxNDgxLCAKLSAgICAxMDE0ODcsIDEwMTQ5MSwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE3LCAxMDE1MjUsIDEwMTUzMiwgMTAxNTM4LCAKLSAgICAxMDE1NDUsIDEwMTU1MiwgMTAxNTYyLCAxMDE1NzIsIDEwMTU3NiwgMTAxNTgwLCAxMDE1ODQsIDEwMTU4OCwgMTAxNTk0LCAKLSAgICAxMDE2MDEsIDEwMTYwNywgMTAxNjE0LCAxMDE2MjEsIDEwMTYyOCwgMTAxNjM3LCAxMDE2NDQsIDEwMTY1MSwgMTAxNjU3LCAKLSAgICAxMDE2NjQsIDEwMTY3MSwgMTAxNjc4LCAxMDE2ODUsIDEwMTY5MiwgMTAxNjk5LCAxMDE3MDUsIDEwMTcxMiwgMTAxNzE5LCAKLSAgICAxMDE3MjYsIDEwMTczNSwgMTAxNzQyLCAxMDE3NDksIDEwMTc1MywgMTAxNzU5LCAxMDE3NjMsIDEwMTc2OSwgMTAxNzc2LCAKLSAgICAxMDE3ODMsIDEwMTc5MCwgMTAxNzk0LCAxMDE3OTgsIDEwMTgwMiwgMTAxODA2LCAxMDE4MTAsIDEwMTgxNywgMTAxODIxLCAKLSAgICAxMDE4MjUsIDEwMTgzMSwgMTAxODM5LCAxMDE4NDMsIDEwMTg0NywgMTAxODUxLCAxMDE4NTUsIDEwMTg2MiwgMTAxODY2LCAKLSAgICAxMDE4NzAsIDEwMTg3OCwgMTAxODgyLCAxMDE4ODYsIDEwMTg5MCwgMTAxODk0LCAxMDE5MDAsIDEwMTkwNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAxOTA4LCAxMDE5MTQsIDEwMTkyMCwgMTAxOTI3LCAKLSAgICAxMDE5MzQsIDEwMTk0MSwgMTAxOTQ4LCAxMDE5NTUsIDEwMTk2MiwgMTAxOTY4LCAxMDE5NzUsIDEwMTk4MiwgMTAxOTg5LCAKLSAgICAxMDE5OTYsIDEwMjAwMywgMTAyMDEwLCAxMDIwMTYsIDEwMjAyMiwgMTAyMDI4LCAxMDIwMzQsIDEwMjA0MCwgMTAyMDQ2LCAKLSAgICAxMDIwNTIsIDEwMjA1OCwgMTAyMDY0LCAxMDIwNzEsIDEwMjA3OCwgMTAyMDg1LCAxMDIwOTIsIDEwMjA5OSwgMTAyMTA2LCAKLSAgICAxMDIxMTIsIDEwMjExOCwgMTAyMTI0LCAxMDIxMzEsIDEwMjEzOCwgMTAyMTQ0LCAxMDIxNTAsIDEwMjE1OSwgMTAyMTY2LCAKLSAgICAxMDIxNzMsIDEwMjE4MCwgMTAyMTg3LCAxMDIxOTQsIDEwMjIwMSwgMTAyMjA3LCAxMDIyMTMsIDEwMjIxOSwgMTAyMjI4LCAKLSAgICAxMDIyMzUsIDEwMjI0MiwgMTAyMjUzLCAxMDIyNjQsIDEwMjI3MCwgMTAyMjc2LCAxMDIyODIsIDEwMjI5MSwgMTAyMjk4LCAKLSAgICAxMDIzMDUsIDEwMjMxNSwgMTAyMzI1LCAxMDIzMzYsIDEwMjM0NywgMTAyMzU5LCAxMDIzNzIsIDEwMjM4MywgMTAyMzk0LCAKLSAgICAxMDI0MDYsIDEwMjQxOSwgMTAyNDMwLCAxMDI0NDEsIDEwMjQ1MiwgMTAyNDYzLCAxMDI0NzQsIDEwMjQ4NiwgMTAyNDk0LCAKLSAgICAxMDI1MDIsIDEwMjUxMSwgMTAyNTIwLCAxMDI1MjksIDEwMjUzNSwgMTAyNTQxLCAxMDI1NDcsIDEwMjU1NCwgMTAyNTY0LCAKLSAgICAxMDI1NzEsIDEwMjU4MSwgMTAyNTg2LCAxMDI1OTEsIDEwMjU5NywgMTAyNjAzLCAxMDI2MTEsIDEwMjYxOSwgMTAyNjI4LCAKLSAgICAxMDI2MzksIDEwMjY1MCwgMTAyNjU4LCAxMDI2NjYsIDEwMjY3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTAyNjg0LCAxMDI2OTUsIDEwMjcwMiwgMTAyNzEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDI3MTgsIDEwMjcyMiwgMTAyNzI2LCAxMDI3MzAsIDEwMjczNCwgMTAyNzM4LCAxMDI3NDIsIDEwMjc0NiwgMTAyNzUwLCAKLSAgICAxMDI3NTQsIDEwMjc1OCwgMTAyNzYyLCAxMDI3NjYsIDEwMjc3MCwgMTAyNzc0LCAxMDI3NzgsIDEwMjc4MiwgMTAyNzg2LCAKLSAgICAxMDI3OTAsIDEwMjc5NCwgMTAyNzk4LCAxMDI4MDIsIDEwMjgwNiwgMTAyODEwLCAxMDI4MTQsIDEwMjgxOCwgMTAyODIyLCAKLSAgICAxMDI4MjYsIDEwMjgzMCwgMTAyODM0LCAxMDI4MzgsIDEwMjg0MiwgMTAyODQ2LCAxMDI4NTAsIDEwMjg1NCwgMTAyODU4LCAKLSAgICAxMDI4NjIsIDEwMjg2NiwgMTAyODcwLCAxMDI4NzQsIDEwMjg3OCwgMTAyODgyLCAxMDI4ODYsIDEwMjg5MCwgMTAyODk0LCAKLSAgICAxMDI4OTgsIDEwMjkwMiwgMTAyOTA2LCAxMDI5MTAsIDEwMjkxNCwgMTAyOTE4LCAxMDI5MjIsIDEwMjkyNiwgMTAyOTMwLCAKLSAgICAxMDI5MzQsIDEwMjkzOCwgMTAyOTQyLCAxMDI5NDYsIDEwMjk1MCwgMTAyOTU0LCAxMDI5NTgsIDEwMjk2MiwgMTAyOTY2LCAKLSAgICAxMDI5NzAsIDEwMjk3NCwgMTAyOTc4LCAxMDI5ODIsIDEwMjk4NiwgMTAyOTkwLCAxMDI5OTQsIDEwMjk5OCwgMTAzMDAyLCAKLSAgICAxMDMwMDYsIDEwMzAxMCwgMTAzMDE0LCAxMDMwMTgsIDEwMzAyMiwgMTAzMDI2LCAxMDMwMzAsIDEwMzAzNCwgMTAzMDM4LCAKLSAgICAxMDMwNDIsIDEwMzA0NiwgMTAzMDUwLCAxMDMwNTQsIDEwMzA1OCwgMTAzMDYyLCAxMDMwNjYsIDEwMzA3MCwgMTAzMDc0LCAKLSAgICAxMDMwNzgsIDEwMzA4MiwgMTAzMDg2LCAxMDMwOTAsIDEwMzA5NCwgMTAzMDk4LCAxMDMxMDIsIDEwMzEwNiwgMTAzMTEwLCAKLSAgICAxMDMxMTQsIDEwMzExOCwgMTAzMTIyLCAxMDMxMjYsIDEwMzEzMCwgMTAzMTM0LCAxMDMxMzgsIDEwMzE0MiwgMTAzMTQ2LCAKLSAgICAxMDMxNTAsIDEwMzE1NCwgMTAzMTU4LCAxMDMxNjIsIDEwMzE2NiwgMTAzMTcwLCAxMDMxNzQsIDEwMzE3OCwgMTAzMTgyLCAKLSAgICAxMDMxODYsIDEwMzE5MCwgMTAzMTk0LCAxMDMxOTgsIDEwMzIwMiwgMTAzMjA2LCAxMDMyMTAsIDEwMzIxNCwgMTAzMjE4LCAKLSAgICAxMDMyMjIsIDEwMzIyNiwgMTAzMjMwLCAxMDMyMzQsIDEwMzIzOCwgMTAzMjQyLCAxMDMyNDYsIDEwMzI1MCwgMTAzMjU0LCAKLSAgICAxMDMyNTgsIDEwMzI2MiwgMTAzMjY2LCAxMDMyNzAsIDEwMzI3NCwgMTAzMjc4LCAxMDMyODIsIDEwMzI4NiwgMTAzMjkwLCAKLSAgICAxMDMyOTQsIDEwMzI5OCwgMTAzMzAyLCAxMDMzMDYsIDEwMzMxMCwgMTAzMzE0LCAxMDMzMTgsIDEwMzMyMiwgMTAzMzI2LCAKLSAgICAxMDMzMzAsIDEwMzMzNCwgMTAzMzM4LCAxMDMzNDIsIDEwMzM0NiwgMTAzMzUwLCAxMDMzNTQsIDEwMzM1OCwgMTAzMzYyLCAKLSAgICAxMDMzNjYsIDEwMzM3MCwgMTAzMzc0LCAxMDMzNzgsIDEwMzM4MiwgMTAzMzg2LCAxMDMzOTAsIDEwMzM5NCwgMTAzMzk4LCAKLSAgICAxMDM0MDIsIDEwMzQwNiwgMTAzNDEwLCAxMDM0MTQsIDEwMzQxOCwgMTAzNDIyLCAxMDM0MjYsIDEwMzQzMCwgMTAzNDM0LCAKLSAgICAxMDM0MzgsIDEwMzQ0MiwgMTAzNDQ2LCAxMDM0NTAsIDEwMzQ1NCwgMTAzNDU4LCAxMDM0NjIsIDEwMzQ2NiwgMTAzNDcwLCAKLSAgICAxMDM0NzQsIDEwMzQ3OCwgMTAzNDgyLCAxMDM0ODYsIDEwMzQ5MCwgMTAzNDk0LCAxMDM0OTgsIDEwMzUwMiwgMTAzNTA2LCAKLSAgICAxMDM1MTAsIDEwMzUxNCwgMTAzNTE4LCAxMDM1MjIsIDEwMzUyNiwgMTAzNTMwLCAxMDM1MzQsIDEwMzUzOCwgMTAzNTQyLCAKLSAgICAxMDM1NDYsIDEwMzU1MCwgMTAzNTU0LCAxMDM1NTgsIDEwMzU2MiwgMTAzNTY2LCAxMDM1NzAsIDEwMzU3NCwgMTAzNTc4LCAKLSAgICAxMDM1ODIsIDEwMzU4NiwgMTAzNTkwLCAxMDM1OTQsIDEwMzU5OCwgMTAzNjAyLCAxMDM2MDYsIDEwMzYxMCwgMTAzNjE0LCAKLSAgICAxMDM2MTgsIDEwMzYyMiwgMTAzNjI2LCAxMDM2MzAsIDEwMzYzNCwgMTAzNjM4LCAxMDM2NDIsIDEwMzY0NiwgMTAzNjUwLCAKLSAgICAxMDM2NTQsIDEwMzY1OCwgMTAzNjYyLCAxMDM2NjYsIDEwMzY3MCwgMTAzNjc0LCAxMDM2NzgsIDEwMzY4MiwgMTAzNjg2LCAKLSAgICAxMDM2OTAsIDEwMzY5NCwgMTAzNjk4LCAxMDM3MDIsIDEwMzcwNiwgMTAzNzEwLCAxMDM3MTQsIDEwMzcxOCwgMTAzNzIyLCAKLSAgICAxMDM3MjYsIDEwMzczMCwgMTAzNzM0LCAxMDM3MzgsIDEwMzc0MiwgMTAzNzQ2LCAxMDM3NTAsIDEwMzc1NCwgMTAzNzU4LCAKLSAgICAxMDM3NjIsIDEwMzc2NiwgMTAzNzcwLCAxMDM3NzQsIDEwMzc3OCwgMTAzNzgyLCAxMDM3ODYsIDEwMzc5MCwgMTAzNzk0LCAKLSAgICAxMDM3OTgsIDEwMzgwMiwgMTAzODA2LCAxMDM4MTAsIDEwMzgxNCwgMTAzODE4LCAxMDM4MjIsIDEwMzgyNiwgMTAzODMwLCAKLSAgICAxMDM4MzQsIDEwMzgzOCwgMTAzODQyLCAxMDM4NDYsIDEwMzg1MCwgMTAzODU0LCAxMDM4NTgsIDEwMzg2MiwgMTAzODY2LCAKLSAgICAxMDM4NzAsIDEwMzg3NCwgMTAzODc4LCAxMDM4ODIsIDEwMzg4NiwgMTAzODkwLCAxMDM4OTQsIDEwMzg5OCwgMTAzOTAyLCAKLSAgICAxMDM5MDYsIDEwMzkxMCwgMTAzOTE0LCAxMDM5MTgsIDEwMzkyMiwgMTAzOTI2LCAxMDM5MzAsIDEwMzkzNCwgMTAzOTM4LCAKLSAgICAxMDM5NDIsIDEwMzk0NiwgMTAzOTUwLCAxMDM5NTQsIDEwMzk1OCwgMTAzOTYyLCAxMDM5NjYsIDEwMzk3MCwgMTAzOTc0LCAKLSAgICAxMDM5NzgsIDEwMzk4MiwgMTAzOTg2LCAxMDM5OTAsIDEwMzk5NCwgMTAzOTk4LCAxMDQwMDIsIDEwNDAwNiwgMTA0MDEwLCAKLSAgICAxMDQwMTQsIDEwNDAxOCwgMTA0MDIyLCAxMDQwMjYsIDEwNDAzMCwgMTA0MDM0LCAxMDQwMzgsIDEwNDA0MiwgMTA0MDQ2LCAKLSAgICAxMDQwNTAsIDEwNDA1NCwgMTA0MDU4LCAxMDQwNjIsIDEwNDA2NiwgMTA0MDcwLCAxMDQwNzQsIDEwNDA3OCwgMTA0MDgyLCAKLSAgICAxMDQwODYsIDEwNDA5MCwgMTA0MDk0LCAxMDQwOTgsIDEwNDEwMiwgMTA0MTA2LCAxMDQxMTAsIDEwNDExNCwgMTA0MTE4LCAKLSAgICAxMDQxMjIsIDEwNDEyNiwgMTA0MTMwLCAxMDQxMzQsIDEwNDEzOCwgMTA0MTQyLCAxMDQxNDYsIDEwNDE1MCwgMTA0MTU0LCAKLSAgICAxMDQxNTgsIDEwNDE2MiwgMTA0MTY2LCAxMDQxNzAsIDEwNDE3NCwgMTA0MTc4LCAxMDQxODIsIDEwNDE4NiwgMTA0MTkwLCAKLSAgICAxMDQxOTQsIDEwNDE5OCwgMTA0MjAyLCAxMDQyMDYsIDEwNDIxMCwgMTA0MjE0LCAxMDQyMTgsIDEwNDIyMiwgMTA0MjI2LCAKLSAgICAxMDQyMzAsIDEwNDIzNCwgMTA0MjM4LCAxMDQyNDIsIDEwNDI0NiwgMTA0MjUwLCAxMDQyNTQsIDEwNDI1OCwgMTA0MjYyLCAKLSAgICAxMDQyNjYsIDEwNDI3MCwgMTA0Mjc0LCAxMDQyNzgsIDEwNDI4MiwgMTA0Mjg2LCAxMDQyOTAsIDEwNDI5NCwgMTA0Mjk4LCAKLSAgICAxMDQzMDIsIDEwNDMwNiwgMTA0MzEwLCAxMDQzMTQsIDEwNDMxOCwgMTA0MzIyLCAxMDQzMjYsIDEwNDMzMCwgMTA0MzM0LCAKLSAgICAxMDQzMzgsIDEwNDM0MiwgMTA0MzQ2LCAxMDQzNTAsIDEwNDM1NCwgMTA0MzU4LCAxMDQzNjIsIDEwNDM2NiwgMTA0MzcwLCAKLSAgICAxMDQzNzQsIDEwNDM3OCwgMTA0MzgyLCAxMDQzODYsIDEwNDM5MCwgMTA0Mzk0LCAxMDQzOTgsIDEwNDQwMiwgMTA0NDA2LCAKLSAgICAxMDQ0MTAsIDEwNDQxNCwgMTA0NDE4LCAxMDQ0MjIsIDEwNDQyNiwgMTA0NDMwLCAxMDQ0MzQsIDEwNDQzOCwgMTA0NDQyLCAKLSAgICAxMDQ0NDYsIDEwNDQ1MCwgMTA0NDU0LCAxMDQ0NTgsIDEwNDQ2MiwgMTA0NDY2LCAxMDQ0NzAsIDEwNDQ3NCwgMTA0NDc4LCAKLSAgICAxMDQ0ODIsIDEwNDQ4NiwgMTA0NDkwLCAxMDQ0OTQsIDEwNDQ5OCwgMTA0NTAyLCAxMDQ1MDYsIDEwNDUxMCwgMTA0NTE0LCAKLSAgICAxMDQ1MTgsIDEwNDUyMiwgMTA0NTI2LCAxMDQ1MzAsIDEwNDUzNCwgMTA0NTM4LCAxMDQ1NDIsIDEwNDU0NiwgMTA0NTUwLCAKLSAgICAxMDQ1NTQsIDEwNDU1OCwgMTA0NTYyLCAxMDQ1NjYsIDEwNDU3MCwgMTA0NTc0LCAxMDQ1NzgsIDEwNDU4MiwgMTA0NTg2LCAKLSAgICAxMDQ1OTAsIDEwNDU5NCwgMTA0NTk4LCAxMDQ2MDIsIDEwNDYwNiwgMTA0NjEwLCAxMDQ2MTQsIDEwNDYxOCwgMTA0NjIyLCAKLSAgICAxMDQ2MjYsIDEwNDYzMCwgMTA0NjM0LCAxMDQ2MzgsIDEwNDY0MiwgMTA0NjQ2LCAxMDQ2NTAsIDEwNDY1NCwgMTA0NjU4LCAKLSAgICAxMDQ2NjIsIDEwNDY2NiwgMTA0NjcwLCAxMDQ2NzQsIDEwNDY3OCwgMTA0NjgyLCAxMDQ2ODYsIDEwNDY5MCwgMTA0Njk0LCAKLSAgICAxMDQ2OTgsIDEwNDcwMiwgMTA0NzA2LCAxMDQ3MTAsIDEwNDcxNCwgMTA0NzE4LCAxMDQ3MjIsIDEwNDcyNiwgMTA0NzMwLCAKLSAgICAxMDQ3MzQsIDEwNDczOCwgMTA0NzQyLCAxMDQ3NDYsIDEwNDc1MCwgMTA0NzU0LCAxMDQ3NTgsIDEwNDc2MiwgMTA0NzY2LCAKLSAgICAxMDQ3NzAsIDEwNDc3NCwgMTA0Nzc4LCAxMDQ3ODIsIDEwNDc4NiwgMTA0NzkwLCAxMDQ3OTQsIDEwNDc5OCwgMTA0ODAyLCAKLSAgICAxMDQ4MDYsIDEwNDgxMCwgMTA0ODE0LCAxMDQ4MTgsIDEwNDgyMiwgMTA0ODI2LCAxMDQ4MzAsIDEwNDgzNCwgMTA0ODM4LCAKLSAgICAxMDQ4NDIsIDEwNDg0NiwgMTA0ODUwLCAxMDQ4NTQsIDEwNDg1OCwgMTA0ODYyLCAxMDQ4NjYsIDEwNDg3MCwgMTA0ODc0LCAKLSAgICAxMDQ4NzgsIDEwNDg4MiwgMTA0ODg2LCAxMDQ4OTAsIDEwNDg5NCwgMTA0ODk4LCAxMDQ5MDIsIDEwNDkwNiwgMTA0OTEwLCAKLSAgICAxMDQ5MTQsIDEwNDkxOCwgMTA0OTIyLCAxMDQ5MjYsIDEwNDkzMCwgMTA0OTM0LCAxMDQ5MzgsIDEwNDk0MiwgMTA0OTQ2LCAKLSAgICAxMDQ5NTAsIDEwNDk1NCwgMTA0OTU4LCAxMDQ5NjIsIDEwNDk2NiwgMTA0OTcwLCAxMDQ5NzQsIDEwNDk3OCwgMTA0OTgyLCAKLSAgICAxMDQ5ODYsIDEwNDk5MCwgMTA0OTk0LCAxMDQ5OTgsIDEwNTAwMiwgMTA1MDA2LCAxMDUwMTAsIDEwNTAxNCwgMTA1MDE4LCAKLSAgICAxMDUwMjIsIDEwNTAyNiwgMTA1MDMwLCAxMDUwMzQsIDEwNTAzOCwgMTA1MDQyLCAxMDUwNDYsIDEwNTA1MCwgMTA1MDU0LCAKLSAgICAxMDUwNTgsIDEwNTA2MiwgMTA1MDY2LCAxMDUwNzAsIDEwNTA3NCwgMTA1MDc4LCAxMDUwODIsIDEwNTA4NiwgMTA1MDkwLCAKLSAgICAxMDUwOTQsIDEwNTA5OCwgMTA1MTAyLCAxMDUxMDYsIDEwNTExMCwgMTA1MTE0LCAxMDUxMTgsIDEwNTEyMiwgMTA1MTI2LCAKLSAgICAxMDUxMzAsIDEwNTEzNCwgMTA1MTM4LCAxMDUxNDIsIDEwNTE0NiwgMTA1MTUwLCAxMDUxNTQsIDEwNTE1OCwgMTA1MTYyLCAKLSAgICAxMDUxNjYsIDEwNTE3MCwgMTA1MTc0LCAxMDUxNzgsIDEwNTE4MiwgMTA1MTg2LCAxMDUxOTAsIDEwNTE5NCwgMTA1MTk4LCAKLSAgICAxMDUyMDIsIDEwNTIwNiwgMTA1MjEwLCAxMDUyMTQsIDEwNTIxOCwgMTA1MjIyLCAxMDUyMjYsIDEwNTIzMCwgMTA1MjM0LCAKLSAgICAxMDUyMzgsIDEwNTI0MiwgMTA1MjQ2LCAxMDUyNTAsIDEwNTI1NCwgMTA1MjU4LCAxMDUyNjIsIDEwNTI2NiwgMTA1MjcwLCAKLSAgICAxMDUyNzQsIDEwNTI3OCwgMTA1MjgyLCAxMDUyODYsIDEwNTI5MCwgMTA1Mjk0LCAxMDUyOTgsIDEwNTMwMiwgMTA1MzA2LCAKLSAgICAxMDUzMTAsIDEwNTMxNCwgMTA1MzE4LCAxMDUzMjIsIDEwNTMyNiwgMTA1MzMwLCAxMDUzMzQsIDEwNTMzOCwgMTA1MzQyLCAKLSAgICAxMDUzNDYsIDEwNTM1MCwgMTA1MzU0LCAxMDUzNTgsIDEwNTM2MiwgMTA1MzY2LCAxMDUzNzAsIDEwNTM3NCwgMTA1Mzc4LCAKLSAgICAxMDUzODIsIDEwNTM4NiwgMTA1MzkwLCAxMDUzOTQsIDEwNTM5OCwgMTA1NDAyLCAxMDU0MDYsIDEwNTQxMCwgMTA1NDE0LCAKLSAgICAxMDU0MTgsIDEwNTQyMiwgMTA1NDI2LCAxMDU0MzAsIDEwNTQzNCwgMTA1NDM4LCAxMDU0NDIsIDEwNTQ0NiwgMTA1NDUwLCAKLSAgICAxMDU0NTQsIDEwNTQ1OCwgMTA1NDYyLCAxMDU0NjYsIDEwNTQ3MCwgMTA1NDc0LCAxMDU0NzgsIDEwNTQ4MiwgMTA1NDg2LCAKLSAgICAxMDU0OTAsIDEwNTQ5NCwgMTA1NDk4LCAxMDU1MDIsIDEwNTUwNiwgMTA1NTEwLCAxMDU1MTQsIDEwNTUxOCwgMTA1NTIyLCAKLSAgICAxMDU1MjYsIDEwNTUzMCwgMTA1NTM0LCAxMDU1MzgsIDEwNTU0MiwgMTA1NTQ2LCAxMDU1NTAsIDEwNTU1NCwgMTA1NTU4LCAKLSAgICAxMDU1NjIsIDEwNTU2NiwgMTA1NTcwLCAxMDU1NzQsIDEwNTU3OCwgMTA1NTgyLCAxMDU1ODYsIDEwNTU5MCwgMTA1NTk0LCAKLSAgICAxMDU1OTgsIDEwNTYwMiwgMTA1NjA2LCAxMDU2MTAsIDEwNTYxNCwgMTA1NjE4LCAxMDU2MjIsIDEwNTYyNiwgMTA1NjMwLCAKLSAgICAxMDU2MzQsIDEwNTYzOCwgMTA1NjQyLCAxMDU2NDYsIDEwNTY1MCwgMTA1NjU0LCAxMDU2NTgsIDEwNTY2MiwgMTA1NjY2LCAKLSAgICAxMDU2NzAsIDEwNTY3NCwgMTA1Njc4LCAxMDU2ODIsIDEwNTY4NiwgMTA1NjkwLCAxMDU2OTQsIDEwNTY5OCwgMTA1NzAyLCAKLSAgICAxMDU3MDYsIDEwNTcxMCwgMTA1NzE0LCAxMDU3MTgsIDEwNTcyMiwgMTA1NzI2LCAxMDU3MzAsIDEwNTczNCwgMTA1NzM4LCAKLSAgICAxMDU3NDIsIDEwNTc0NiwgMTA1NzUwLCAxMDU3NTQsIDEwNTc1OCwgMTA1NzYyLCAxMDU3NjYsIDEwNTc3MCwgMTA1Nzc0LCAKLSAgICAxMDU3NzgsIDEwNTc4MiwgMTA1Nzg2LCAxMDU3OTAsIDEwNTc5NCwgMTA1Nzk4LCAxMDU4MDIsIDEwNTgwNiwgMTA1ODEwLCAKLSAgICAxMDU4MTQsIDEwNTgxOCwgMTA1ODIyLCAxMDU4MjYsIDEwNTgzMCwgMTA1ODM0LCAxMDU4MzgsIDEwNTg0MiwgMTA1ODQ2LCAKLSAgICAxMDU4NTAsIDEwNTg1NCwgMTA1ODU4LCAxMDU4NjIsIDEwNTg2NiwgMTA1ODcwLCAxMDU4NzQsIDEwNTg3OCwgMTA1ODgyLCAKLSAgICAxMDU4ODYsIDEwNTg5MCwgMTA1ODk0LCAxMDU4OTgsIDEwNTkwMiwgMTA1OTA2LCAxMDU5MTAsIDEwNTkxNCwgMTA1OTE4LCAKLSAgICAxMDU5MjIsIDEwNTkyNiwgMTA1OTMwLCAxMDU5MzQsIDEwNTkzOCwgMTA1OTQyLCAxMDU5NDYsIDEwNTk1MCwgMTA1OTU0LCAKLSAgICAxMDU5NTgsIDEwNTk2MiwgMTA1OTY2LCAxMDU5NzAsIDEwNTk3NCwgMTA1OTc4LCAxMDU5ODIsIDEwNTk4NiwgMTA1OTkwLCAKLSAgICAxMDU5OTQsIDEwNTk5OCwgMTA2MDAyLCAxMDYwMDYsIDEwNjAxMCwgMTA2MDE0LCAxMDYwMTgsIDEwNjAyMiwgMTA2MDI2LCAKLSAgICAxMDYwMzAsIDEwNjAzNCwgMTA2MDM4LCAxMDYwNDIsIDEwNjA0NiwgMTA2MDUwLCAxMDYwNTQsIDEwNjA1OCwgMTA2MDYyLCAKLSAgICAxMDYwNjYsIDEwNjA3MCwgMTA2MDc0LCAxMDYwNzgsIDEwNjA4MiwgMTA2MDg2LCAxMDYwOTAsIDEwNjA5NCwgMTA2MDk4LCAKLSAgICAxMDYxMDIsIDEwNjEwNiwgMTA2MTEwLCAxMDYxMTQsIDEwNjExOCwgMTA2MTIyLCAxMDYxMjYsIDEwNjEzMCwgMTA2MTM0LCAKLSAgICAxMDYxMzgsIDEwNjE0MiwgMTA2MTQ2LCAxMDYxNTAsIDEwNjE1NCwgMTA2MTU4LCAxMDYxNjIsIDEwNjE2NiwgMTA2MTcwLCAKLSAgICAxMDYxNzQsIDEwNjE3OCwgMTA2MTgyLCAxMDYxODYsIDEwNjE5MCwgMTA2MTk0LCAxMDYxOTgsIDEwNjIwMiwgMTA2MjA2LCAKLSAgICAxMDYyMTAsIDEwNjIxNCwgMTA2MjE4LCAxMDYyMjIsIDEwNjIyNiwgMTA2MjMwLCAxMDYyMzQsIDEwNjIzOCwgMTA2MjQyLCAKLSAgICAxMDYyNDYsIDEwNjI1MCwgMTA2MjU0LCAxMDYyNTgsIDEwNjI2MiwgMTA2MjY2LCAxMDYyNzAsIDEwNjI3NCwgMTA2Mjc4LCAKLSAgICAxMDYyODIsIDEwNjI4NiwgMTA2MjkwLCAxMDYyOTQsIDEwNjI5OCwgMTA2MzAyLCAxMDYzMDYsIDEwNjMxMCwgMTA2MzE0LCAKLSAgICAxMDYzMTgsIDEwNjMyMiwgMTA2MzI2LCAxMDYzMzAsIDEwNjMzNCwgMTA2MzM4LCAxMDYzNDIsIDEwNjM0NiwgMTA2MzUwLCAKLSAgICAxMDYzNTQsIDEwNjM1OCwgMTA2MzYyLCAxMDYzNjYsIDEwNjM3MCwgMTA2Mzc0LCAxMDYzNzgsIDEwNjM4MiwgMTA2Mzg2LCAKLSAgICAxMDYzOTAsIDEwNjM5NCwgMTA2Mzk4LCAxMDY0MDIsIDEwNjQwNiwgMTA2NDEwLCAxMDY0MTQsIDEwNjQxOCwgMTA2NDIyLCAKLSAgICAxMDY0MjYsIDEwNjQzMCwgMTA2NDM0LCAxMDY0MzgsIDEwNjQ0MiwgMTA2NDQ2LCAxMDY0NTAsIDEwNjQ1NCwgMTA2NDU4LCAKLSAgICAxMDY0NjIsIDEwNjQ2NiwgMTA2NDcwLCAxMDY0NzQsIDEwNjQ3OCwgMTA2NDgyLCAxMDY0ODYsIDEwNjQ5MCwgMTA2NDk0LCAKLSAgICAxMDY0OTgsIDEwNjUwMiwgMTA2NTA2LCAxMDY1MTAsIDEwNjUxNCwgMTA2NTE4LCAxMDY1MjIsIDEwNjUyNiwgMTA2NTMwLCAKLSAgICAxMDY1MzQsIDEwNjUzOCwgMTA2NTQyLCAxMDY1NDYsIDEwNjU1MCwgMTA2NTU0LCAxMDY1NTgsIDEwNjU2MiwgMTA2NTY2LCAKLSAgICAxMDY1NzAsIDEwNjU3NCwgMTA2NTc4LCAxMDY1ODIsIDEwNjU4NiwgMTA2NTkwLCAxMDY1OTQsIDEwNjU5OCwgMTA2NjAyLCAKLSAgICAxMDY2MDYsIDEwNjYxMCwgMTA2NjE0LCAxMDY2MTgsIDEwNjYyMiwgMTA2NjI2LCAxMDY2MzAsIDEwNjYzNCwgMTA2NjM4LCAKLSAgICAxMDY2NDIsIDEwNjY0NiwgMTA2NjUwLCAxMDY2NTQsIDEwNjY1OCwgMTA2NjYyLCAxMDY2NjYsIDEwNjY3MCwgMTA2Njc0LCAKLSAgICAxMDY2NzgsIDEwNjY4MiwgMTA2Njg2LCAxMDY2OTAsIDEwNjY5NCwgMTA2Njk4LCAxMDY3MDIsIDEwNjcwNiwgMTA2NzEwLCAKLSAgICAxMDY3MTQsIDEwNjcxOCwgMTA2NzIyLCAxMDY3MjYsIDEwNjczMCwgMTA2NzM0LCAxMDY3MzgsIDEwNjc0MiwgMTA2NzQ2LCAKLSAgICAxMDY3NTAsIDEwNjc1NCwgMTA2NzU4LCAxMDY3NjIsIDEwNjc2NiwgMTA2NzcwLCAxMDY3NzQsIDEwNjc3OCwgMTA2NzgyLCAKLSAgICAxMDY3ODYsIDEwNjc5MCwgMTA2Nzk0LCAxMDY3OTgsIDEwNjgwMiwgMTA2ODA2LCAxMDY4MTAsIDEwNjgxNCwgMTA2ODE4LCAKLSAgICAxMDY4MjIsIDEwNjgyNiwgMTA2ODMwLCAxMDY4MzQsIDEwNjgzOCwgMTA2ODQyLCAxMDY4NDYsIDEwNjg1MCwgMTA2ODU0LCAKLSAgICAxMDY4NTgsIDEwNjg2MiwgMTA2ODY2LCAxMDY4NzAsIDEwNjg3NCwgMTA2ODc4LCAxMDY4ODIsIDEwNjg4NiwgMTA2ODkwLCAKLSAgICAxMDY4OTQsIDEwNjg5OCwgMTA2OTAyLCAxMDY5MDYsIDEwNjkxMCwgMTA2OTE0LCAxMDY5MTgsIDEwNjkyMiwgMTA2OTI2LCAKLSAgICAxMDY5MzAsIDEwNjkzNCwgMTA2OTM4LCAxMDY5NDIsIDEwNjk0NiwgMTA2OTUwLCAxMDY5NTQsIDEwNjk1OCwgMTA2OTYyLCAKLSAgICAxMDY5NjYsIDEwNjk3MCwgMTA2OTc0LCAxMDY5NzgsIDEwNjk4MiwgMTA2OTg2LCAxMDY5OTAsIDEwNjk5NCwgMTA2OTk4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcwMDIsIDEwNzAwOSwgMTA3MDE2LCAxMDcwMjUsIDEwNzAzNCwgCi0gICAgMTA3MDQxLCAxMDcwNDYsIDEwNzA1MywgMTA3MDYwLCAxMDcwNjksIDEwNzA4MCwgMTA3MDkxLCAxMDcwOTYsIDEwNzEwMywgCi0gICAgMTA3MTA4LCAxMDcxMTMsIDEwNzExOCwgMTA3MTIzLCAxMDcxMjgsIDEwNzEzMywgMTA3MTM4LCAxMDcxNDMsIDEwNzE0OCwgCi0gICAgMTA3MTUzLCAxMDcxNTgsIDEwNzE2NSwgMTA3MTcyLCAxMDcxNzcsIDEwNzE4MiwgMTA3MTg3LCAxMDcxOTIsIDEwNzE5OSwgCi0gICAgMTA3MjA2LCAxMDcyMTQsIDEwNzIxOSwgMTA3MjI2LCAxMDcyMzEsIDEwNzIzNiwgMTA3MjQxLCAxMDcyNDYsIDEwNzI1MSwgCi0gICAgMTA3MjU4LCAxMDcyNjUsIDEwNzI3MCwgMTA3Mjc1LCAxMDcyODAsIDEwNzI4NSwgMTA3MjkwLCAxMDcyOTUsIDEwNzMwMCwgCi0gICAgMTA3MzA1LCAxMDczMTAsIDEwNzMxNSwgMTA3MzIwLCAxMDczMjUsIDEwNzMzMCwgMTA3MzM1LCAxMDczNDAsIDEwNzM0NSwgCi0gICAgMTA3MzUwLCAxMDczNTUsIDEwNzM2MCwgMTA3MzY3LCAxMDczNzIsIDEwNzM3NywgMTA3Mzg2LCAxMDczOTMsIDEwNzM5OCwgCi0gICAgMTA3NDAzLCAxMDc0MDgsIDEwNzQxMywgMTA3NDE4LCAxMDc0MjMsIDEwNzQyOCwgMTA3NDMzLCAxMDc0MzgsIDEwNzQ0MywgCi0gICAgMTA3NDQ4LCAxMDc0NTMsIDEwNzQ1OCwgMTA3NDYzLCAxMDc0NjgsIDEwNzQ3MywgMTA3NDc4LCAxMDc0ODMsIDEwNzQ4OCwgCi0gICAgMTA3NDkzLCAxMDc0OTgsIDEwNzUwNCwgMTA3NTEyLCAxMDc1MTgsIDEwNzUyNiwgMTA3NTM0LCAxMDc1NDIsIDEwNzU0OCwgCi0gICAgMTA3NTU0LCAxMDc1NjAsIDEwNzU2NiwgMTA3NTcyLCAxMDc1ODAsIDEwNzU5MCwgMTA3NTk4LCAxMDc2MDYsIDEwNzYxMiwgCi0gICAgMTA3NjE4LCAxMDc2MjYsIDEwNzYzNCwgMTA3NjQwLCAxMDc2NDgsIDEwNzY1NiwgMTA3NjY0LCAxMDc2NzAsIDEwNzY3NiwgCi0gICAgMTA3NjgyLCAxMDc2ODgsIDEwNzY5NCwgMTA3NzAwLCAxMDc3MDgsIDEwNzcxNiwgMTA3NzIyLCAxMDc3MjgsIDEwNzczNCwgCi0gICAgMTA3NzQwLCAxMDc3NDYsIDEwNzc1NCwgMTA3NzYwLCAxMDc3NjYsIDEwNzc3MiwgMTA3Nzc4LCAxMDc3ODQsIDEwNzc5MCwgCi0gICAgMTA3Nzk4LCAxMDc4MDQsIDEwNzgxMCwgMTA3ODE2LCAxMDc4MjIsIDEwNzgzMCwgMTA3ODM4LCAxMDc4NDQsIDEwNzg1MCwgCi0gICAgMTA3ODU2LCAxMDc4NjEsIDEwNzg2NywgMTA3ODczLCAxMDc4ODAsIDEwNzg4NSwgMTA3ODkwLCAxMDc4OTUsIDEwNzkwMCwgCi0gICAgMTA3OTA1LCAxMDc5MTAsIDEwNzkxNSwgMTA3OTIwLCAxMDc5MjUsIDEwNzkzNCwgMTA3OTQxLCAxMDc5NDYsIDEwNzk1MSwgCi0gICAgMTA3OTU2LCAxMDc5NjMsIDEwNzk2OCwgMTA3OTczLCAxMDc5NzgsIDEwNzk4NSwgMTA3OTkwLCAxMDc5OTUsIDEwODAwMCwgCi0gICAgMTA4MDA1LCAxMDgwMTAsIDEwODAxNSwgMTA4MDIwLCAxMDgwMjUsIDEwODAzMCwgMTA4MDM1LCAxMDgwNDAsIDEwODA0NywgCi0gICAgMTA4MDUyLCAxMDgwNTksIDEwODA2NCwgMTA4MDY5LCAxMDgwNzYsIDEwODA4MSwgMTA4MDg2LCAxMDgwOTEsIDEwODA5NiwgCi0gICAgMTA4MTAxLCAxMDgxMDYsIDEwODExMSwgMTA4MTE2LCAxMDgxMjEsIDEwODEyNiwgMTA4MTMxLCAxMDgxMzYsIDEwODE0MSwgCi0gICAgMTA4MTQ2LCAxMDgxNTEsIDEwODE1NiwgMTA4MTYxLCAxMDgxNjYsIDEwODE3MSwgMTA4MTc4LCAxMDgxODMsIDEwODE4OCwgCi0gICAgMTA4MTkzLCAxMDgxOTgsIDEwODIwMywgMTA4MjA4LCAxMDgyMTMsIDEwODIxOCwgMTA4MjIzLCAxMDgyMjgsIDEwODIzMywgCi0gICAgMTA4MjM4LCAxMDgyNDMsIDEwODI1MCwgMTA4MjU1LCAxMDgyNjAsIDEwODI2NywgMTA4MjcyLCAxMDgyNzcsIDEwODI4MiwgCi0gICAgMTA4Mjg3LCAxMDgyOTIsIDEwODI5NywgMTA4MzAyLCAxMDgzMDcsIDEwODMxMiwgMTA4MzE3LCAxMDgzMjQsIDEwODMyOSwgCi0gICAgMTA4MzM0LCAxMDgzMzksIDEwODM0NCwgMTA4MzQ5LCAxMDgzNTYsIDEwODM2MywgMTA4MzY4LCAxMDgzNzMsIDEwODM3OCwgCi0gICAgMTA4MzgzLCAxMDgzODgsIDEwODM5MywgMTA4Mzk4LCAxMDg0MDMsIDEwODQwOCwgMTA4NDEzLCAxMDg0MTgsIDEwODQyMywgCi0gICAgMTA4NDI4LCAxMDg0MzMsIDEwODQzOCwgMTA4NDQzLCAxMDg0NDgsIDEwODQ1MywgMTA4NDU4LCAxMDg0NjMsIDEwODQ2OCwgCi0gICAgMTA4NDczLCAxMDg0NzgsIDEwODQ4MywgMTA4NDg4LCAxMDg0OTMsIDEwODQ5OCwgMTA4NTAzLCAxMDg1MDgsIDEwODUxMywgCi0gICAgMTA4NTE4LCAxMDg1MjMsIDEwODUyOCwgMTA4NTMzLCAxMDg1MzgsIDEwODU0MywgMTA4NTUwLCAxMDg1NTUsIDEwODU2MCwgCi0gICAgMTA4NTY1LCAxMDg1NzAsIDEwODU3NSwgMTA4NTgwLCAxMDg1ODUsIDEwODU5MCwgMTA4NTk1LCAxMDg2MDAsIDEwODYwNSwgCi0gICAgMTA4NjEwLCAxMDg2MTUsIDEwODYyMCwgMTA4NjI1LCAxMDg2MzAsIDEwODYzNSwgMTA4NjQwLCAxMDg2NDUsIDEwODY1MCwgCi0gICAgMTA4NjU1LCAxMDg2NjAsIDEwODY2NSwgMTA4NjcwLCAxMDg2NzUsIDEwODY4MCwgMTA4Njg1LCAxMDg2OTAsIDEwODY5NSwgCi0gICAgMTA4NzAwLCAxMDg3MDUsIDEwODcxMCwgMTA4NzE1LCAxMDg3MjAsIDEwODcyNSwgMTA4NzMwLCAxMDg3MzUsIDEwODc0MCwgCi0gICAgMTA4NzQ1LCAxMDg3NTAsIDEwODc1NSwgMTA4NzYwLCAxMDg3NjUsIDEwODc3MCwgMTA4Nzc1LCAxMDg3ODAsIDEwODc4NSwgCi0gICAgMTA4NzkwLCAxMDg3OTUsIDEwODgwMCwgMTA4ODA1LCAxMDg4MTAsIDEwODgxNSwgMTA4ODIwLCAxMDg4MjUsIDEwODgzMCwgCi0gICAgMTA4ODM1LCAxMDg4NDAsIDEwODg0NywgMTA4ODUyLCAxMDg4NTcsIDEwODg2MiwgMTA4ODY3LCAxMDg4NzIsIDEwODg3NywgCi0gICAgMTA4ODgxLCAxMDg4ODYsIDEwODg5MSwgMTA4ODk2LCAxMDg5MDEsIDEwODkwNiwgMTA4OTExLCAxMDg5MTYsIDEwODkyMSwgCi0gICAgMTA4OTI2LCAxMDg5MzEsIDEwODkzNiwgMTA4OTQxLCAxMDg5NDYsIDEwODk1MSwgMTA4OTU4LCAxMDg5NjMsIDEwODk2OCwgCi0gICAgMTA4OTc0LCAxMDg5NzksIDEwODk4NCwgMTA4OTg5LCAxMDg5OTQsIDEwODk5OSwgMTA5MDA0LCAxMDkwMDksIDEwOTAxNCwgCi0gICAgMTA5MDE5LCAxMDkwMjQsIDEwOTAyOSwgMTA5MDM0LCAxMDkwMzksIDEwOTA0NCwgMTA5MDQ5LCAxMDkwNTQsIDEwOTA1OSwgCi0gICAgMTA5MDY0LCAxMDkwNjksIDEwOTA3NCwgMTA5MDc5LCAxMDkwODQsIDEwOTA4OSwgMTA5MDk0LCAxMDkwOTksIDEwOTEwNCwgCi0gICAgMTA5MTA5LCAxMDkxMTQsIDEwOTExOSwgMTA5MTI0LCAxMDkxMjksIDEwOTEzNCwgMTA5MTM5LCAxMDkxNDQsIDEwOTE0OSwgCi0gICAgMTA5MTU0LCAxMDkxNTksIDEwOTE2NCwgMTA5MTY5LCAxMDkxNzQsIDEwOTE3OSwgMTA5MTg0LCAxMDkxODksIDEwOTE5NiwgCi0gICAgMTA5MjAxLCAxMDkyMDYsIDEwOTIxMywgMTA5MjIwLCAxMDkyMjUsIDEwOTIzMCwgMTA5MjM1LCAxMDkyNDAsIDEwOTI0NSwgCi0gICAgMTA5MjUwLCAxMDkyNTUsIDEwOTI2MCwgMTA5MjY1LCAxMDkyNzAsIDEwOTI3NSwgMTA5MjgwLCAxMDkyODUsIDEwOTI5MCwgCi0gICAgMTA5Mjk1LCAxMDkzMDAsIDEwOTMwNSwgMTA5MzEwLCAxMDkzMTUsIDEwOTMyMCwgMTA5MzI1LCAxMDkzMzAsIDEwOTMzNSwgCi0gICAgMTA5MzQwLCAxMDkzNDUsIDEwOTM1MiwgMTA5MzU3LCAxMDkzNjIsIDEwOTM2NywgMTA5MzcyLCAxMDkzNzcsIDEwOTM4MiwgCi0gICAgMTA5Mzg3LCAxMDkzOTIsIDEwOTM5NywgMTA5NDAyLCAxMDk0MDcsIDEwOTQxMiwgMTA5NDE3LCAxMDk0MjIsIDEwOTQyNywgCi0gICAgMTA5NDMyLCAxMDk0MzcsIDEwOTQ0MiwgMTA5NDQ5LCAxMDk0NTQsIDEwOTQ1OSwgMTA5NDY0LCAxMDk0NjksIDEwOTQ3NCwgCi0gICAgMTA5NDc5LCAxMDk0ODQsIDEwOTQ5MCwgMTA5NDk1LCAxMDk1MDAsIDEwOTUwNSwgMTA5NTEwLCAxMDk1MTUsIDEwOTUyMCwgCi0gICAgMTA5NTI1LCAxMDk1MzAsIDEwOTUzNywgMTA5NTQ0LCAxMDk1NDksIDEwOTU1NCwgMTA5NTU4LCAxMDk1NjMsIDEwOTU2NywgCi0gICAgMTA5NTcxLCAxMDk1NzYsIDEwOTU4MywgMTA5NTg4LCAxMDk1OTMsIDEwOTYwMiwgMTA5NjA3LCAxMDk2MTIsIDEwOTYxNywgCi0gICAgMTA5NjIyLCAxMDk2MjksIDEwOTYzNiwgMTA5NjQxLCAxMDk2NDYsIDEwOTY1MSwgMTA5NjU2LCAxMDk2NjMsIDEwOTY2OCwgCi0gICAgMTA5NjczLCAxMDk2NzgsIDEwOTY4MywgMTA5Njg4LCAxMDk2OTMsIDEwOTY5OCwgMTA5NzAzLCAxMDk3MDgsIDEwOTcxMywgCi0gICAgMTA5NzE4LCAxMDk3MjMsIDEwOTczMCwgMTA5NzM0LCAxMDk3MzksIDEwOTc0NCwgMTA5NzQ5LCAxMDk3NTQsIDEwOTc1OCwgCi0gICAgMTA5NzYzLCAxMDk3NjgsIDEwOTc3MywgMTA5Nzc4LCAxMDk3ODMsIDEwOTc4OCwgMTA5NzkzLCAxMDk3OTgsIDEwOTgwMywgCi0gICAgMTA5ODA5LCAxMDk4MTUsIDEwOTgyMSwgMTA5ODI3LCAxMDk4MzMsIDEwOTgzOSwgMTA5ODQ1LCAxMDk4NTEsIDEwOTg1NywgCi0gICAgMTA5ODYzLCAxMDk4NjksIDEwOTg3NSwgMTA5ODgwLCAxMDk4ODYsIDEwOTg5MiwgMTA5ODk4LCAxMDk5MDQsIDEwOTkxMCwgCi0gICAgMTA5OTE2LCAxMDk5MjIsIDEwOTkyOCwgMTA5OTM0LCAxMDk5NDAsIDEwOTk0NiwgMTA5OTUxLCAxMDk5NTcsIDEwOTk2MywgCi0gICAgMTA5OTY5LCAxMDk5NzUsIDEwOTk4MSwgMTA5OTg3LCAxMDk5OTMsIDEwOTk5OSwgMTEwMDA1LCAxMTAwMTEsIDExMDAxNywgCi0gICAgMTEwMDIzLCAxMTAwMjksIDExMDAzNSwgMTEwMDQxLCAxMTAwNDcsIDExMDA1MywgMTEwMDU5LCAxMTAwNjUsIDExMDA3MSwgCi0gICAgMTEwMDc2LCAxMTAwODIsIDExMDA4OCwgMTEwMDk0LCAxMTAxMDAsIDExMDEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMTEyLCAxMTAxMTUsIDExMDExOSwgCi0gICAgMTEwMTIzLCAxMTAxMjcsIDExMDEzMCwgMTEwMTM0LCAxMTAxMzksIDExMDE0MywgMTEwMTQ3LCAxMTAxNTEsIDExMDE1NSwgCi0gICAgMTEwMTU5LCAxMTAxNjQsIDExMDE2OSwgMTEwMTczLCAxMTAxNzcsIDExMDE4MCwgMTEwMTg0LCAxMTAxODksIDExMDE5NCwgCi0gICAgMTEwMTk4LCAxMTAyMDIsIDExMDIwNiwgMTEwMjEwLCAxMTAyMTQsIDExMDIxOCwgMTEwMjIyLCAxMTAyMjYsIDExMDIzMCwgCi0gICAgMTEwMjM0LCAxMTAyMzcsIDExMDI0MSwgMTEwMjQ1LCAxMTAyNDksIDExMDI1MywgMTEwMjU3LCAxMTAyNjEsIDExMDI2NywgCi0gICAgMTEwMjcwLCAxMTAyNzQsIDExMDI3OCwgMTEwMjgyLCAxMTAyODYsIDExMDI5MCwgMTEwMjk0LCAxMTAyOTgsIDExMDMwMiwgCi0gICAgMTEwMzA2LCAxMTAzMTEsIDExMDMxNiwgMTEwMzIyLCAxMTAzMjYsIDExMDMzMCwgMTEwMzM0LCAxMTAzMzgsIDExMDM0MiwgCi0gICAgMTEwMzQ2LCAxMTAzNTEsIDExMDM1NCwgMTEwMzU4LCAxMTAzNjIsIDExMDM2NiwgMTEwMzcwLCAxMTAzNzYsIDExMDM4MCwgCi0gICAgMTEwMzg0LCAxMTAzODgsIDExMDM5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMzk2LCAxMTA0MDAsIAotICAgIDExMDQwNCwgMTEwNDEwLCAxMTA0MTYsIDExMDQyMCwgMTEwNDI1LCAxMTA0MzAsIDExMDQzNSwgMTEwNDQwLCAxMTA0NDQsIAotICAgIDExMDQ0OSwgMTEwNDU0LCAxMTA0NTksIDExMDQ2MywgMTEwNDY4LCAxMTA0NzMsIDExMDQ3OCwgMTEwNDgyLCAxMTA0ODcsIAotICAgIDExMDQ5MiwgMTEwNDk3LCAxMTA1MDIsIDExMDUwNywgMTEwNTEyLCAxMTA1MTcsIDExMDUyMiwgMTEwNTI2LCAxMTA1MzEsIAotICAgIDExMDUzNiwgMTEwNTQxLCAxMTA1NDYsIDExMDU1MSwgMTEwNTU2LCAxMTA1NjEsIDExMDU2NiwgMTEwNTcxLCAxMTA1NzYsIAotICAgIDExMDU4MSwgMTEwNTg4LCAxMTA1OTMsIDExMDYwMCwgMTEwNjA1LCAxMTA2MTAsIDExMDYxNSwgMTEwNjIwLCAxMTA2MjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDYzMCwgMTEwNjM0LCAxMTA2NDAsIAotICAgIDExMDY0MywgMTEwNjQ2LCAxMTA2NTAsIDExMDY1NCwgMTEwNjU4LCAxMTA2NjIsIDExMDY2NiwgMTEwNjcwLCAxMTA2NzQsIAotICAgIDExMDY4MCwgMTEwNjg2LCAxMTA2OTIsIDExMDY5OCwgMTEwNzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA3MTAsIDExMDcxNSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTEwNzIxLCAxMTA3MjYsIDExMDczMSwgMTEwNzM2LCAxMTA3NDMsIDExMDc1MCwgMTEwNzU3LCAxMTA3NjQsIDExMDc2OSwgCi0gICAgMTEwNzc0LCAxMTA3NzksIDExMDc4NCwgMTEwNzkxLCAxMTA3OTYsIDExMDgwMywgMTEwODEwLCAxMTA4MTUsIDExMDgyMCwgCi0gICAgMTEwODI1LCAxMTA4MzIsIDExMDgzNywgMTEwODQyLCAxMTA4NDksIDExMDg1NiwgMTEwODYxLCAxMTA4NjYsIDExMDg3MSwgCi0gICAgMTEwODc4LCAxMTA4ODUsIDExMDg5MiwgMTEwODk3LCAxMTA5MDIsIDExMDkwOSwgMTEwOTE2LCAxMTA5MjMsIDExMDkzMCwgCi0gICAgMTEwOTM1LCAxMTA5NDAsIDExMDk0NSwgMTEwOTUyLCAxMTA5NTcsIDExMDk2MiwgMTEwOTY3LCAxMTA5NzQsIDExMDk4MywgCi0gICAgMTEwOTkwLCAxMTA5OTUsIDExMTAwMCwgMTExMDA1LCAxMTEwMTAsIDExMTAxNSwgMTExMDIwLCAxMTEwMjksIDExMTAzNiwgCi0gICAgMTExMDQxLCAxMTEwNDgsIDExMTA1NSwgMTExMDYwLCAxMTEwNjUsIDExMTA3MCwgMTExMDc3LCAxMTEwODIsIDExMTA4OSwgCi0gICAgMTExMDk2LCAxMTExMDEsIDExMTEwNiwgMTExMTExLCAxMTExMTgsIDExMTEyNSwgMTExMTMwLCAxMTExMzUsIDExMTE0MiwgCi0gICAgMTExMTQ5LCAxMTExNTYsIDExMTE2MSwgMTExMTY2LCAxMTExNzEsIDExMTE3NiwgMTExMTgzLCAxMTExOTIsIDExMTIwMSwgCi0gICAgMTExMjA2LCAxMTEyMTMsIDExMTIyMiwgMTExMjI3LCAxMTEyMzIsIDExMTIzNywgMTExMjQyLCAxMTEyNDksIDExMTI1NiwgCi0gICAgMTExMjYzLCAxMTEyNzAsIDExMTI3NSwgMTExMjgwLCAxMTEyODUsIDExMTI5MiwgMTExMjk5LCAxMTEzMDYsIDExMTMxMSwgCi0gICAgMTExMzE2LCAxMTEzMjMsIDExMTMyOCwgMTExMzM1LCAxMTEzNDAsIDExMTM0NywgMTExMzUyLCAxMTEzNTksIDExMTM2NiwgCi0gICAgMTExMzcxLCAxMTEzNzYsIDExMTM4MSwgMTExMzg2LCAxMTEzOTEsIDExMTM5NiwgMTExNDAxLCAxMTE0MDYsIDExMTQxMSwgCi0gICAgMTExNDE4LCAxMTE0MjUsIDExMTQzMiwgMTExNDM5LCAxMTE0NDYsIDExMTQ1NSwgMTExNDYwLCAxMTE0NjUsIDExMTQ3MiwgCi0gICAgMTExNDc5LCAxMTE0ODQsIDExMTQ5MSwgMTExNDk4LCAxMTE1MDUsIDExMTUxMiwgMTExNTE5LCAxMTE1MjYsIDExMTUzMSwgCi0gICAgMTExNTM2LCAxMTE1NDEsIDExMTU0NiwgMTExNTUxLCAxMTE1NjAsIDExMTU2OSwgMTExNTc4LCAxMTE1ODcsIDExMTU5NiwgCi0gICAgMTExNjA1LCAxMTE2MTQsIDExMTYyMywgMTExNjI4LCAxMTE2MzksIDExMTY1MCwgMTExNjU5LCAxMTE2NjQsIDExMTY2OSwgCi0gICAgMTExNjc0LCAxMTE2NzksIDExMTY4OCwgMTExNjk1LCAxMTE3MDIsIDExMTcwOSwgMTExNzE2LCAxMTE3MjMsIDExMTczMCwgCi0gICAgMTExNzM5LCAxMTE3NDgsIDExMTc1OSwgMTExNzY4LCAxMTE3NzksIDExMTc4OCwgMTExNzk1LCAxMTE4MDQsIDExMTgxNSwgCi0gICAgMTExODI0LCAxMTE4MzMsIDExMTg0MiwgMTExODUxLCAxMTE4NTgsIDExMTg2NSwgMTExODcyLCAxMTE4ODEsIDExMTg5MCwgCi0gICAgMTExOTAxLCAxMTE5MTAsIDExMTkxOSwgMTExOTMwLCAxMTE5MzUsIDExMTk0MCwgMTExOTUxLCAxMTE5NTksIDExMTk2OCwgCi0gICAgMTExOTc3LCAxMTE5ODYsIDExMTk5NywgMTEyMDA2LCAxMTIwMTUsIDExMjAyNiwgMTEyMDM3LCAxMTIwNDgsIDExMjA1OSwgCi0gICAgMTEyMDcwLCAxMTIwODEsIDExMjA4OCwgMTEyMDk1LCAxMTIxMDIsIDExMjEwOSwgMTEyMTIwLCAxMTIxMjksIDExMjEzNiwgCi0gICAgMTEyMTQzLCAxMTIxNTAsIDExMjE2MSwgMTEyMTcyLCAxMTIxODMsIDExMjE5NCwgMTEyMjA1LCAxMTIyMTYsIDExMjIyNywgCi0gICAgMTEyMjM4LCAxMTIyNDUsIDExMjI1MiwgMTEyMjYxLCAxMTIyNzAsIDExMjI3NywgMTEyMjg0LCAxMTIyOTEsIDExMjMwMCwgCi0gICAgMTEyMzA5LCAxMTIzMTgsIDExMjMyNSwgMTEyMzM0LCAxMTIzNDMsIDExMjM1MiwgMTEyMzU5LCAxMTIzNjYsIDExMjM3MSwgCi0gICAgMTEyMzc3LCAxMTIzODQsIDExMjM5MSwgMTEyMzk4LCAxMTI0MDUsIDExMjQxMiwgMTEyNDE5LCAxMTI0MjgsIDExMjQzNywgCi0gICAgMTEyNDQ2LCAxMTI0NTUsIDExMjQ2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyNDcxLCAxMTI0NzcsIAotICAgIDExMjQ4MiwgMTEyNDg3LCAxMTI0OTQsIDExMjUwMCwgMTEyNTA2LCAxMTI1MTIsIDExMjUxOCwgMTEyNTI0LCAxMTI1MzAsIAotICAgIDExMjUzNiwgMTEyNTQwLCAxMTI1NDQsIDExMjU1MCwgMTEyNTU2LCAxMTI1NjIsIDExMjU2NiwgMTEyNTcxLCAxMTI1NzYsIAotICAgIDExMjU4MCwgMTEyNTg0LCAxMTI1ODcsIDExMjU5MywgMTEyNTk5LCAxMTI2MDUsIDExMjYxMSwgMTEyNjE3LCAxMTI2MjMsIAotICAgIDExMjYyOSwgMTEyNjM1LCAxMTI2NDEsIDExMjY1MSwgMTEyNjYxLCAxMTI2NjcsIDExMjY3MywgMTEyNjgzLCAxMTI2OTMsIAotICAgIDExMjY5OSwgMCwgMCwgMTEyNzA1LCAxMTI3MTMsIDExMjcxOCwgMTEyNzIzLCAxMTI3MjksIDExMjczNSwgMTEyNzQxLCAKLSAgICAxMTI3NDcsIDExMjc1MywgMTEyNzU5LCAxMTI3NjYsIDExMjc3MywgMTEyNzc5LCAxMTI3ODUsIDExMjc5MSwgMTEyNzk3LCAKLSAgICAxMTI4MDMsIDExMjgwOSwgMTEyODE1LCAxMTI4MjEsIDExMjgyNiwgMTEyODMyLCAxMTI4MzgsIDExMjg0NCwgMTEyODUwLCAKLSAgICAxMTI4NTYsIDExMjg2NSwgMTEyODcxLCAxMTI4NzYsIDExMjg4NCwgMTEyODkxLCAxMTI4OTgsIDExMjkwNywgMTEyOTE2LCAKLSAgICAxMTI5MjUsIDExMjkzNCwgMTEyOTQzLCAxMTI5NTIsIDExMjk2MSwgMTEyOTcwLCAxMTI5ODAsIDExMjk5MCwgMTEyOTk4LCAKLSAgICAxMTMwMDYsIDExMzAxNSwgMTEzMDI0LCAxMTMwMzAsIDExMzAzNiwgMTEzMDQyLCAxMTMwNDgsIDExMzA1NiwgMTEzMDY0LCAKLSAgICAxMTMwNjgsIDExMzA3NCwgMTEzMDc5LCAxMTMwODUsIDExMzA5MSwgMTEzMDk3LCAxMTMxMDMsIDExMzEwOSwgMTEzMTE4LCAKLSAgICAxMTMxMjMsIDExMzEzMCwgMTEzMTM1LCAxMTMxNDAsIDExMzE0NSwgMTEzMTUxLCAxMTMxNTcsIDExMzE2MywgMTEzMTcwLCAKLSAgICAxMTMxNzUsIDExMzE4MCwgMTEzMTg1LCAxMTMxOTAsIDExMzE5NSwgMTEzMjAxLCAxMTMyMDcsIDExMzIxMywgMTEzMjE5LCAKLSAgICAxMTMyMjUsIDExMzIzMSwgMTEzMjM3LCAxMTMyNDMsIDExMzI0OCwgMTEzMjUzLCAxMTMyNTgsIDExMzI2MywgMTEzMjY4LCAKLSAgICAxMTMyNzMsIDExMzI3OCwgMTEzMjgzLCAxMTMyODksIDExMzI5NSwgMTEzMzAwLCAxMTMzMDUsIDExMzMxMCwgMTEzMzE1LCAKLSAgICAxMTMzMjAsIDExMzMyNiwgMTEzMzMzLCAxMTMzMzcsIDExMzM0MSwgMTEzMzQ1LCAxMTMzNDksIDExMzM1MywgMTEzMzU3LCAKLSAgICAxMTMzNjEsIDExMzM2NSwgMTEzMzczLCAxMTMzODMsIDExMzM4NywgMTEzMzkxLCAxMTMzOTcsIDExMzQwMywgMTEzNDA5LCAKLSAgICAxMTM0MTUsIDExMzQyMSwgMTEzNDI3LCAxMTM0MzMsIDExMzQzOSwgMTEzNDQ1LCAxMTM0NTEsIDExMzQ1NywgMTEzNDYzLCAKLSAgICAxMTM0NjksIDExMzQ3NSwgMTEzNDc5LCAxMTM0ODMsIDExMzQ5MCwgMTEzNDk2LCAxMTM1MDIsIDExMzUwOCwgMTEzNTEzLCAKLSAgICAxMTM1MjAsIDExMzUyNSwgMTEzNTMxLCAxMTM1MzcsIDExMzU0MywgMTEzNTQ5LCAxMTM1NTQsIDExMzU1OCwgMTEzNTY0LCAKLSAgICAxMTM1NjgsIDExMzU3MiwgMTEzNTc2LCAxMTM1ODIsIDExMzU4OCwgMTEzNTkyLCAxMTM1OTgsIDExMzYwNCwgMTEzNjEwLCAKLSAgICAxMTM2MTYsIDExMzYyMiwgMTEzNjMwLCAxMTM2MzgsIDExMzY0NCwgMTEzNjUwLCAxMTM2NTYsIDExMzY2MiwgMTEzNjc0LCAKLSAgICAxMTM2ODYsIDExMzcwMCwgMTEzNzEyLCAxMTM3MjQsIDExMzczOCwgMTEzNzUyLCAxMTM3NjYsIDExMzc3MCwgMTEzNzc4LCAKLSAgICAxMTM3ODYsIDExMzc5MSwgMTEzNzk1LCAxMTM3OTksIDExMzgwMywgMTEzODA3LCAxMTM4MTEsIDExMzgxNSwgMTEzODE5LCAKLSAgICAxMTM4MjUsIDExMzgzMSwgMTEzODM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM4NDMsIDExMzg0OSwgCi0gICAgMTEzODU1LCAxMTM4NjEsIDExMzg2NywgMTEzODczLCAxMTM4NzksIDExMzg4NSwgMTEzODkxLCAxMTM4OTcsIDExMzkwMywgCi0gICAgMTEzOTA5LCAxMTM5MTUsIDExMzkyMSwgMTEzOTI3LCAxMTM5MzMsIDExMzkzOSwgMTEzOTQ1LCAxMTM5NTEsIDExMzk1NywgCi0gICAgMTEzOTYzLCAxMTM5NjksIDExMzk3NSwgMTEzOTgxLCAxMTM5ODcsIDExMzk5MywgMTEzOTk5LCAxMTQwMDUsIDExNDAxMSwgCi0gICAgMTE0MDE3LCAxMTQwMjMsIDExNDAyOSwgMTE0MDM1LCAxMTQwNDEsIDExNDA0NywgMTE0MDUzLCAxMTQwNTksIDExNDA2NSwgCi0gICAgMTE0MDcxLCAxMTQwNzcsIDExNDA4MywgMTE0MDg5LCAxMTQwOTUsIDExNDEwMSwgMTE0MTA3LCAxMTQxMTMsIDExNDExOSwgCi0gICAgMTE0MTI1LCAxMTQxMzEsIDExNDEzNywgMTE0MTQzLCAxMTQxNDksIDExNDE1NSwgMTE0MTYxLCAxMTQxNjcsIDExNDE3MywgCi0gICAgMTE0MTc5LCAxMTQxODUsIDExNDE5MSwgMTE0MTk3LCAxMTQyMDMsIDExNDIwOSwgMTE0MjE1LCAxMTQyMjEsIDExNDIyNywgCi0gICAgMTE0MjMzLCAxMTQyMzksIDExNDI0NCwgMTE0MjQ5LCAxMTQyNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzkyLCA5MTc5OCwgOTE4MDQsIDkxODEwLCA5MTgxNiwgOTE4MjIsIDkxODI5LCAKKyAgICA5MTgzNiwgOTE4NDMsIDkxODQ5LCA5MTg1NSwgOTE4NjEsIDkxODY4LCA5MTg3NSwgOTE4ODIsIDkxODg4LCA5MTg5NSwgCisgICAgOTE5MDIsIDkxOTA5LCA5MTkxNiwgOTE5MjIsIDkxOTI5LCA5MTkzNiwgOTE5NDIsIDkxOTQ5LCA5MTk1NiwgOTE5NjMsIAorICAgIDkxOTcwLCA5MTk3NywgOTE5ODMsIDkxOTkwLCA5MTk5NywgOTIwMDQsIDkyMDEwLCA5MjAxNiwgOTIwMjIsIDkyMDI4LCAKKyAgICA5MjAzNCwgOTIwNDEsIDkyMDQ4LCA5MjA1NCwgOTIwNjAsIDkyMDY2LCA5MjA3MywgOTIwNzksIDkyMDg2LCA5MjA5MywgCisgICAgOTIxMDAsIDkyMTA2LCA5MjExNCwgOTIxMjEsIDkyMTI3LCA5MjEzNCwgOTIxNDEsIDkyMTQ4LCA5MjE1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOTIxNjEsIDkyMTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTQyNTgsIDExNDI2MywgMTE0MjcwLCAxMTQyNzcsIDExNDI4NCwgMTE0MjkxLCAxMTQyOTYsIDExNDMwMCwgMTE0MzA2LCAKLSAgICAxMTQzMTAsIDExNDMxNCwgMTE0MzIwLCAxMTQzMjQsIDExNDMyOCwgMTE0MzMyLCAxMTQzMzgsIDExNDM0NSwgMTE0MzQ5LCAKLSAgICAxMTQzNTMsIDExNDM1NywgMTE0MzYxLCAxMTQzNjUsIDExNDM2OSwgMTE0Mzc1LCAxMTQzNzksIDExNDM4MywgMTE0Mzg3LCAKLSAgICAxMTQzOTEsIDExNDM5NSwgMTE0Mzk5LCAxMTQ0MDMsIDExNDQwNywgMTE0NDExLCAxMTQ0MTUsIDExNDQxOSwgMTE0NDIzLCAKLSAgICAxMTQ0MjgsIDExNDQzMiwgMTE0NDM2LCAxMTQ0NDAsIDExNDQ0NCwgMTE0NDQ4LCAxMTQ0NTIsIDExNDQ1NiwgMTE0NDYwLCAKLSAgICAxMTQ0NjQsIDExNDQ3MSwgMTE0NDc1LCAxMTQ0ODMsIDExNDQ4NywgMTE0NDkxLCAxMTQ0OTUsIDExNDQ5OSwgMTE0NTAzLCAKLSAgICAxMTQ1MDcsIDExNDUxMSwgMTE0NTE4LCAxMTQ1MjIsIDExNDUyNiwgMTE0NTMwLCAxMTQ1MzQsIDExNDUzOCwgMTE0NTQ0LCAKLSAgICAxMTQ1NDgsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcwLCAxMTQ1NzQsIDExNDU3OCwgMTE0NTgyLCAKLSAgICAxMTQ1ODYsIDExNDU5MCwgMTE0NTk0LCAxMTQ1OTgsIDExNDYwMiwgMTE0NjA2LCAxMTQ2MTAsIDExNDYxNCwgMTE0NjE4LCAKLSAgICAxMTQ2MjIsIDExNDYyNiwgMTE0NjMwLCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMTQ2NTAsIDExNDY1OCwgMTE0NjY2LCAxMTQ2NzQsIDExNDY4MiwgMTE0NjkwLCAxMTQ2OTgsIDExNDcwNiwgCi0gICAgMTE0NzE0LCAxMTQ3MjIsIDExNDczMCwgMTE0NzM4LCAxMTQ3NDYsIDExNDc1NCwgMTE0NzYyLCAxMTQ3NzAsIDExNDc3OCwgCi0gICAgMTE0Nzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ3OTQsIDExNDc5OCwgMTE0ODAzLCAKLSAgICAxMTQ4MDgsIDExNDgxMywgMTE0ODE3LCAxMTQ4MjIsIDExNDgyNywgMTE0ODMyLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ2LCAKLSAgICAxMTQ4NTAsIDExNDg1NCwgMTE0ODU5LCAxMTQ4NjMsIDExNDg2OCwgMTE0ODczLCAxMTQ4NzcsIDExNDg4MiwgMTE0ODg3LCAKLSAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDYsIDExNDkxMSwgMTE0OTE2LCAxMTQ5MjAsIDExNDkyNSwgMTE0OTMwLCAKLSAgICAxMTQ5MzUsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDksIDExNDk1NCwgMTE0OTU4LCAxMTQ5NjMsIDExNDk2OCwgMTE0OTcyLCAKLSAgICAxMTQ5NzYsIDExNDk4MSwgMTE0OTg1LCAxMTQ5OTAsIDExNDk5NSwgMTE0OTk5LCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKLSAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI4LCAxMTUwMzMsIDExNTAzOCwgMTE1MDQyLCAxMTUwNDcsIDExNTA1MiwgMTE1MDU3LCAKLSAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcxLCAxMTUwNzYsIDExNTA4MCwgMTE1MDg1LCAxMTUwOTAsIDExNTA5NCwgMTE1MDk4LCAKLSAgICAxMTUxMDMsIDExNTEwNywgMTE1MTEyLCAxMTUxMTcsIDExNTEyMSwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKLSAgICAxMTUxNDUsIDExNTE1MCwgMTE1MTU1LCAxMTUxNjAsIDExNTE2NCwgMTE1MTY5LCAxMTUxNzQsIDExNTE3OSwgMTE1MTgzLCAKLSAgICAxMTUxODgsIDAsIDExNTE5MywgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTUsIDExNTIyMCwgCi0gICAgMTE1MjI0LCAxMTUyMjksIDExNTIzNCwgMTE1MjM4LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCi0gICAgMTE1MjY3LCAxMTUyNzIsIDExNTI3NywgMTE1MjgyLCAxMTUyODgsIDExNTI5NCwgMTE1MzAwLCAxMTUzMDUsIDExNTMxMSwgCi0gICAgMTE1MzE3LCAxMTUzMjMsIDExNTMyOCwgMTE1MzM0LCAxMTUzNDAsIDExNTM0NSwgMTE1MzUwLCAxMTUzNTYsIDExNTM2MSwgCi0gICAgMTE1MzY3LCAxMTUzNzMsIDExNTM3OCwgMTE1Mzg0LCAxMTUzOTAsIDExNTM5NSwgMTE1NDAxLCAxMTU0MDcsIDExNTQxMywgCi0gICAgMTE1NDE5LCAxMTU0MjUsIDExNTQzMCwgMTE1NDM2LCAxMTU0NDIsIDExNTQ0OCwgMTE1NDUzLCAxMTU0NTksIDExNTQ2NSwgCi0gICAgMTE1NDcxLCAxMTU0NzYsIDExNTQ4MiwgMTE1NDg4LCAxMTU0OTMsIDExNTQ5OCwgMTE1NTA0LCAxMTU1MDksIDExNTUxNSwgCi0gICAgMTE1NTIxLCAxMTU1MjYsIDExNTUzMiwgMTE1NTM4LCAxMTU1NDMsIDExNTU0OSwgMTE1NTU1LCAxMTU1NjEsIDExNTU2NywgCi0gICAgMTE1NTczLCAwLCAxMTU1NzcsIDExNTU4MiwgMCwgMCwgMTE1NTg3LCAwLCAwLCAxMTU1OTIsIDExNTU5NywgMCwgMCwgCi0gICAgMTE1NjAyLCAxMTU2MDcsIDExNTYxMSwgMTE1NjE2LCAwLCAxMTU2MjEsIDExNTYyNiwgMTE1NjMxLCAxMTU2MzUsIAotICAgIDExNTY0MCwgMTE1NjQ1LCAxMTU2NTAsIDExNTY1NSwgMTE1NjYwLCAxMTU2NjQsIDExNTY2OSwgMTE1Njc0LCAwLCAKLSAgICAxMTU2NzksIDAsIDExNTY4NCwgMTE1Njg5LCAxMTU2OTMsIDExNTY5OCwgMTE1NzAzLCAxMTU3MDcsIDExNTcxMSwgMCwgCi0gICAgMTE1NzE2LCAxMTU3MjEsIDExNTcyNiwgMTE1NzMwLCAxMTU3MzUsIDExNTc0MCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCi0gICAgMTE1NzU5LCAxMTU3NjQsIDExNTc2OSwgMTE1Nzc0LCAxMTU3ODAsIDExNTc4NiwgMTE1NzkyLCAxMTU3OTcsIDExNTgwMywgCi0gICAgMTE1ODA5LCAxMTU4MTUsIDExNTgyMCwgMTE1ODI2LCAxMTU4MzIsIDExNTgzNywgMTE1ODQyLCAxMTU4NDgsIDExNTg1MywgCi0gICAgMTE1ODU5LCAxMTU4NjUsIDExNTg3MCwgMTE1ODc2LCAxMTU4ODIsIDExNTg4NywgMTE1ODkzLCAxMTU4OTksIDExNTkwNSwgCi0gICAgMTE1OTExLCAxMTU5MTcsIDExNTkyMiwgMTE1OTI4LCAxMTU5MzQsIDExNTk0MCwgMTE1OTQ1LCAxMTU5NTEsIDExNTk1NywgCi0gICAgMTE1OTYzLCAxMTU5NjgsIDExNTk3NCwgMTE1OTgwLCAxMTU5ODUsIDExNTk5MCwgMTE1OTk2LCAxMTYwMDEsIDExNjAwNywgCi0gICAgMTE2MDEzLCAxMTYwMTgsIDExNjAyNCwgMTE2MDMwLCAxMTYwMzUsIDExNjA0MSwgMTE2MDQ3LCAxMTYwNTMsIDExNjA1OSwgCi0gICAgMTE2MDY1LCAxMTYwNjksIDAsIDExNjA3NCwgMTE2MDc5LCAxMTYwODMsIDExNjA4OCwgMCwgMCwgMTE2MDkzLCAxMTYwOTgsIAotICAgIDExNjEwMywgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMTE2MTIwLCAxMTYxMjUsIDAsIDExNjEzMCwgMTE2MTM1LCAKLSAgICAxMTYxNDAsIDExNjE0NCwgMTE2MTQ5LCAxMTYxNTQsIDExNjE1OSwgMCwgMTE2MTY0LCAxMTYxNjgsIDExNjE3MywgCi0gICAgMTE2MTc4LCAxMTYxODMsIDExNjE4NywgMTE2MTkyLCAxMTYxOTcsIDExNjIwMiwgMTE2MjA2LCAxMTYyMTEsIDExNjIxNiwgCi0gICAgMTE2MjIwLCAxMTYyMjQsIDExNjIyOSwgMTE2MjMzLCAxMTYyMzgsIDExNjI0MywgMTE2MjQ3LCAxMTYyNTIsIDExNjI1NywgCi0gICAgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc2LCAxMTYyODEsIDExNjI4NiwgMTE2MjkwLCAwLCAxMTYyOTUsIAotICAgIDExNjMwMCwgMTE2MzA0LCAxMTYzMDksIDAsIDExNjMxNCwgMTE2MzE4LCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAwLCAKLSAgICAxMTYzMzYsIDAsIDAsIDAsIDExNjM0MCwgMTE2MzQ1LCAxMTYzNTAsIDExNjM1NCwgMTE2MzU5LCAxMTYzNjQsIDExNjM2OSwgCi0gICAgMCwgMTE2Mzc0LCAxMTYzNzgsIDExNjM4MywgMTE2Mzg4LCAxMTYzOTMsIDExNjM5NywgMTE2NDAyLCAxMTY0MDcsIAotICAgIDExNjQxMiwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNiwgMTE2NDMwLCAxMTY0MzQsIDExNjQzOSwgMTE2NDQzLCAxMTY0NDgsIAotICAgIDExNjQ1MywgMTE2NDU3LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg2LCAxMTY0OTEsIAotICAgIDExNjQ5NiwgMTE2NTAxLCAxMTY1MDcsIDExNjUxMywgMTE2NTE5LCAxMTY1MjQsIDExNjUzMCwgMTE2NTM2LCAxMTY1NDIsIAotICAgIDExNjU0NywgMTE2NTUzLCAxMTY1NTksIDExNjU2NCwgMTE2NTY5LCAxMTY1NzUsIDExNjU4MCwgMTE2NTg2LCAxMTY1OTIsIAotICAgIDExNjU5NywgMTE2NjAzLCAxMTY2MDksIDExNjYxNCwgMTE2NjIwLCAxMTY2MjYsIDExNjYzMiwgMTE2NjM4LCAxMTY2NDQsIAotICAgIDExNjY0OSwgMTE2NjU1LCAxMTY2NjEsIDExNjY2NywgMTE2NjcyLCAxMTY2NzgsIDExNjY4NCwgMTE2NjkwLCAxMTY2OTUsIAotICAgIDExNjcwMSwgMTE2NzA3LCAxMTY3MTIsIDExNjcxNywgMTE2NzIzLCAxMTY3MjgsIDExNjczNCwgMTE2NzQwLCAxMTY3NDUsIAotICAgIDExNjc1MSwgMTE2NzU3LCAxMTY3NjIsIDExNjc2OCwgMTE2Nzc0LCAxMTY3ODAsIDExNjc4NiwgMTE2NzkyLCAxMTY3OTYsIAotICAgIDExNjgwMSwgMTE2ODA2LCAxMTY4MTEsIDExNjgxNSwgMTE2ODIwLCAxMTY4MjUsIDExNjgzMCwgMTE2ODM0LCAxMTY4MzksIAotICAgIDExNjg0NCwgMTE2ODQ4LCAxMTY4NTIsIDExNjg1NywgMTE2ODYxLCAxMTY4NjYsIDExNjg3MSwgMTE2ODc1LCAxMTY4ODAsIAotICAgIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTA0LCAxMTY5MDksIDExNjkxNCwgMTE2OTE4LCAxMTY5MjMsIAotICAgIDExNjkyOCwgMTE2OTMzLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ3LCAxMTY5NTIsIDExNjk1NiwgMTE2OTYxLCAxMTY5NjYsIAotICAgIDExNjk3MCwgMTE2OTc0LCAxMTY5NzksIDExNjk4MywgMTE2OTg4LCAxMTY5OTMsIDExNjk5NywgMTE3MDAyLCAxMTcwMDcsIAotICAgIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNiwgMTE3MDMxLCAxMTcwMzYsIDExNzA0MSwgMTE3MDQ3LCAxMTcwNTMsIAotICAgIDExNzA1OSwgMTE3MDY0LCAxMTcwNzAsIDExNzA3NiwgMTE3MDgyLCAxMTcwODcsIDExNzA5MywgMTE3MDk5LCAxMTcxMDQsIAotICAgIDExNzEwOSwgMTE3MTE1LCAxMTcxMjAsIDExNzEyNiwgMTE3MTMyLCAxMTcxMzcsIDExNzE0MywgMTE3MTQ5LCAxMTcxNTQsIAotICAgIDExNzE2MCwgMTE3MTY2LCAxMTcxNzIsIDExNzE3OCwgMTE3MTg0LCAxMTcxODksIDExNzE5NSwgMTE3MjAxLCAxMTcyMDcsIAotICAgIDExNzIxMiwgMTE3MjE4LCAxMTcyMjQsIDExNzIzMCwgMTE3MjM1LCAxMTcyNDEsIDExNzI0NywgMTE3MjUyLCAxMTcyNTcsIAotICAgIDExNzI2MywgMTE3MjY4LCAxMTcyNzQsIDExNzI4MCwgMTE3Mjg1LCAxMTcyOTEsIDExNzI5NywgMTE3MzAyLCAxMTczMDgsIAotICAgIDExNzMxNCwgMTE3MzIwLCAxMTczMjYsIDExNzMzMiwgMTE3MzM3LCAxMTczNDMsIDExNzM0OSwgMTE3MzU1LCAxMTczNjAsIAotICAgIDExNzM2NiwgMTE3MzcyLCAxMTczNzgsIDExNzM4MywgMTE3Mzg5LCAxMTczOTUsIDExNzQwMCwgMTE3NDA1LCAxMTc0MTEsIAotICAgIDExNzQxNiwgMTE3NDIyLCAxMTc0MjgsIDExNzQzMywgMTE3NDM5LCAxMTc0NDUsIDExNzQ1MCwgMTE3NDU2LCAxMTc0NjIsIAotICAgIDExNzQ2OCwgMTE3NDc0LCAxMTc0ODAsIDExNzQ4NSwgMTE3NDkxLCAxMTc0OTcsIDExNzUwMywgMTE3NTA4LCAxMTc1MTQsIAotICAgIDExNzUyMCwgMTE3NTI2LCAxMTc1MzEsIDExNzUzNywgMTE3NTQzLCAxMTc1NDgsIDExNzU1MywgMTE3NTU5LCAxMTc1NjQsIAotICAgIDExNzU3MCwgMTE3NTc2LCAxMTc1ODEsIDExNzU4NywgMTE3NTkzLCAxMTc1OTgsIDExNzYwNCwgMTE3NjEwLCAxMTc2MTYsIAotICAgIDExNzYyMiwgMTE3NjI4LCAxMTc2MzQsIDExNzY0MSwgMTE3NjQ4LCAxMTc2NTUsIDExNzY2MSwgMTE3NjY4LCAxMTc2NzUsIAotICAgIDExNzY4MiwgMTE3Njg4LCAxMTc2OTUsIDExNzcwMiwgMTE3NzA4LCAxMTc3MTQsIDExNzcyMSwgMTE3NzI3LCAxMTc3MzQsIAotICAgIDExNzc0MSwgMTE3NzQ3LCAxMTc3NTQsIDExNzc2MSwgMTE3NzY3LCAxMTc3NzQsIDExNzc4MSwgMTE3Nzg4LCAxMTc3OTUsIAotICAgIDExNzgwMiwgMTE3ODA4LCAxMTc4MTUsIDExNzgyMiwgMTE3ODI5LCAxMTc4MzUsIDExNzg0MiwgMTE3ODQ5LCAxMTc4NTYsIAotICAgIDExNzg2MiwgMTE3ODY5LCAxMTc4NzYsIDExNzg4MiwgMTE3ODg4LCAxMTc4OTUsIDExNzkwMSwgMTE3OTA4LCAxMTc5MTUsIAotICAgIDExNzkyMSwgMTE3OTI4LCAxMTc5MzUsIDExNzk0MSwgMTE3OTQ4LCAxMTc5NTUsIDExNzk2MiwgMTE3OTY5LCAxMTc5NzYsIAotICAgIDExNzk4MSwgMTE3OTg3LCAxMTc5OTMsIDExNzk5OSwgMTE4MDA0LCAxMTgwMTAsIDExODAxNiwgMTE4MDIyLCAxMTgwMjcsIAotICAgIDExODAzMywgMTE4MDM5LCAxMTgwNDQsIDExODA0OSwgMTE4MDU1LCAxMTgwNjAsIDExODA2NiwgMTE4MDcyLCAxMTgwNzcsIAotICAgIDExODA4MywgMTE4MDg5LCAxMTgwOTQsIDExODEwMCwgMTE4MTA2LCAxMTgxMTIsIDExODExOCwgMTE4MTI0LCAxMTgxMjksIAotICAgIDExODEzNSwgMTE4MTQxLCAxMTgxNDcsIDExODE1MiwgMTE4MTU4LCAxMTgxNjQsIDExODE3MCwgMTE4MTc1LCAxMTgxODEsIAotICAgIDExODE4NywgMTE4MTkyLCAxMTgxOTcsIDExODIwMywgMTE4MjA4LCAxMTgyMTQsIDExODIyMCwgMTE4MjI1LCAxMTgyMzEsIAotICAgIDExODIzNywgMTE4MjQyLCAxMTgyNDgsIDExODI1NCwgMTE4MjYwLCAxMTgyNjYsIDExODI3MiwgMTE4Mjc4LCAwLCAwLCAKLSAgICAxMTgyODUsIDExODI5MCwgMTE4Mjk1LCAxMTgzMDAsIDExODMwNSwgMTE4MzEwLCAxMTgzMTUsIDExODMyMCwgMTE4MzI1LCAKLSAgICAxMTgzMzAsIDExODMzNSwgMTE4MzQwLCAxMTgzNDUsIDExODM1MCwgMTE4MzU1LCAxMTgzNjAsIDExODM2NSwgMTE4MzcwLCAKLSAgICAxMTgzNzYsIDExODM4MSwgMTE4Mzg2LCAxMTgzOTEsIDExODM5NiwgMTE4NDAxLCAxMTg0MDYsIDExODQxMSwgMTE4NDE1LCAKLSAgICAxMTg0MjAsIDExODQyNSwgMTE4NDMwLCAxMTg0MzUsIDExODQ0MCwgMTE4NDQ1LCAxMTg0NTAsIDExODQ1NSwgMTE4NDYwLCAKLSAgICAxMTg0NjUsIDExODQ3MCwgMTE4NDc1LCAxMTg0ODAsIDExODQ4NSwgMTE4NDkwLCAxMTg0OTUsIDExODUwMCwgMTE4NTA2LCAKLSAgICAxMTg1MTEsIDExODUxNiwgMTE4NTIxLCAxMTg1MjYsIDExODUzMSwgMTE4NTM2LCAxMTg1NDEsIDExODU0NywgMTE4NTUyLCAKLSAgICAxMTg1NTcsIDExODU2MiwgMTE4NTY3LCAxMTg1NzIsIDExODU3NywgMTE4NTgyLCAxMTg1ODcsIDExODU5MiwgMTE4NTk3LCAKLSAgICAxMTg2MDIsIDExODYwNywgMTE4NjEyLCAxMTg2MTcsIDExODYyMiwgMTE4NjI3LCAxMTg2MzIsIDExODYzNywgMTE4NjQyLCAKLSAgICAxMTg2NDcsIDExODY1MiwgMTE4NjU3LCAxMTg2NjIsIDExODY2OCwgMTE4NjczLCAxMTg2NzgsIDExODY4MywgMTE4Njg4LCAKLSAgICAxMTg2OTMsIDExODY5OCwgMTE4NzAzLCAxMTg3MDcsIDExODcxMiwgMTE4NzE3LCAxMTg3MjIsIDExODcyNywgMTE4NzMyLCAKLSAgICAxMTg3MzcsIDExODc0MiwgMTE4NzQ3LCAxMTg3NTIsIDExODc1NywgMTE4NzYyLCAxMTg3NjcsIDExODc3MiwgMTE4Nzc3LCAKLSAgICAxMTg3ODIsIDExODc4NywgMTE4NzkyLCAxMTg3OTgsIDExODgwMywgMTE4ODA4LCAxMTg4MTMsIDExODgxOCwgMTE4ODIzLCAKLSAgICAxMTg4MjgsIDExODgzMywgMTE4ODM5LCAxMTg4NDQsIDExODg0OSwgMTE4ODU0LCAxMTg4NTksIDExODg2NCwgMTE4ODY5LCAKLSAgICAxMTg4NzUsIDExODg4MSwgMTE4ODg3LCAxMTg4OTMsIDExODg5OSwgMTE4OTA1LCAxMTg5MTEsIDExODkxNywgMTE4OTIzLCAKLSAgICAxMTg5MjksIDExODkzNSwgMTE4OTQxLCAxMTg5NDcsIDExODk1MywgMTE4OTU5LCAxMTg5NjUsIDExODk3MSwgMTE4OTc4LCAKLSAgICAxMTg5ODQsIDExODk5MCwgMTE4OTk2LCAxMTkwMDIsIDExOTAwOCwgMTE5MDE0LCAxMTkwMjAsIDExOTAyNSwgMTE5MDMxLCAKLSAgICAxMTkwMzcsIDExOTA0MywgMTE5MDQ5LCAxMTkwNTUsIDExOTA2MSwgMTE5MDY3LCAxMTkwNzMsIDExOTA3OSwgMTE5MDg1LCAKLSAgICAxMTkwOTEsIDExOTA5NywgMTE5MTAzLCAxMTkxMDksIDExOTExNSwgMTE5MTIxLCAxMTkxMjcsIDExOTEzNCwgMTE5MTQwLCAKLSAgICAxMTkxNDYsIDExOTE1MiwgMTE5MTU4LCAxMTkxNjQsIDExOTE3MCwgMTE5MTc2LCAxMTkxODMsIDExOTE4OSwgMTE5MTk1LCAKLSAgICAxMTkyMDEsIDExOTIwNywgMTE5MjEzLCAxMTkyMTksIDExOTIyNSwgMTE5MjMxLCAxMTkyMzcsIDExOTI0MywgMTE5MjQ5LCAKLSAgICAxMTkyNTUsIDExOTI2MSwgMTE5MjY3LCAxMTkyNzMsIDExOTI3OSwgMTE5Mjg1LCAxMTkyOTEsIDExOTI5NywgMTE5MzAzLCAKLSAgICAxMTkzMDksIDExOTMxNSwgMTE5MzIxLCAxMTkzMjgsIDExOTMzNCwgMTE5MzQwLCAxMTkzNDYsIDExOTM1MiwgMTE5MzU4LCAKLSAgICAxMTkzNjQsIDExOTM3MCwgMTE5Mzc1LCAxMTkzODEsIDExOTM4NywgMTE5MzkzLCAxMTkzOTksIDExOTQwNSwgMTE5NDExLCAKLSAgICAxMTk0MTcsIDExOTQyMywgMTE5NDI5LCAxMTk0MzUsIDExOTQ0MSwgMTE5NDQ3LCAxMTk0NTMsIDExOTQ1OSwgMTE5NDY1LCAKLSAgICAxMTk0NzEsIDExOTQ3NywgMTE5NDg0LCAxMTk0OTAsIDExOTQ5NiwgMTE5NTAyLCAxMTk1MDgsIDExOTUxNCwgMTE5NTIwLCAKLSAgICAxMTk1MjYsIDExOTUzMywgMTE5NTM5LCAxMTk1NDUsIDExOTU1MSwgMTE5NTU3LCAxMTk1NjMsIDExOTU2OSwgMTE5NTc2LCAKLSAgICAxMTk1ODMsIDExOTU5MCwgMTE5NTk3LCAxMTk2MDQsIDExOTYxMSwgMTE5NjE4LCAxMTk2MjUsIDExOTYzMiwgMTE5NjM5LCAKLSAgICAxMTk2NDYsIDExOTY1MywgMTE5NjYwLCAxMTk2NjcsIDExOTY3NCwgMTE5NjgxLCAxMTk2ODgsIDExOTY5NiwgMTE5NzAzLCAKLSAgICAxMTk3MTAsIDExOTcxNywgMTE5NzI0LCAxMTk3MzEsIDExOTczOCwgMTE5NzQ1LCAxMTk3NTEsIDExOTc1OCwgMTE5NzY1LCAKLSAgICAxMTk3NzIsIDExOTc3OSwgMTE5Nzg2LCAxMTk3OTMsIDExOTgwMCwgMTE5ODA3LCAxMTk4MTQsIDExOTgyMSwgMTE5ODI4LCAKLSAgICAxMTk4MzUsIDExOTg0MiwgMTE5ODQ5LCAxMTk4NTYsIDExOTg2MywgMTE5ODcwLCAxMTk4NzgsIDExOTg4NSwgMTE5ODkyLCAKLSAgICAxMTk4OTksIDExOTkwNiwgMTE5OTEzLCAxMTk5MjAsIDExOTkyNywgMTE5OTM1LCAxMTk5NDIsIDExOTk0OSwgMTE5OTU2LCAKLSAgICAxMTk5NjMsIDExOTk3MCwgMTE5OTc3LCAxMTk5ODIsIDAsIDAsIDExOTk4NywgMTE5OTkyLCAxMTk5OTYsIDEyMDAwMCwgCi0gICAgMTIwMDA0LCAxMjAwMDgsIDEyMDAxMiwgMTIwMDE2LCAxMjAwMjAsIDEyMDAyNCwgMTIwMDI4LCAxMjAwMzMsIDEyMDAzNywgCi0gICAgMTIwMDQxLCAxMjAwNDUsIDEyMDA0OSwgMTIwMDUzLCAxMjAwNTcsIDEyMDA2MSwgMTIwMDY1LCAxMjAwNjksIDEyMDA3NCwgCi0gICAgMTIwMDc4LCAxMjAwODIsIDEyMDA4NiwgMTIwMDkwLCAxMjAwOTQsIDEyMDA5OCwgMTIwMTAyLCAxMjAxMDYsIDEyMDExMCwgCi0gICAgMTIwMTE2LCAxMjAxMjEsIDEyMDEyNiwgMTIwMTMxLCAxMjAxMzYsIDEyMDE0MSwgMTIwMTQ2LCAxMjAxNTEsIDEyMDE1NiwgCi0gICAgMTIwMTYxLCAxMjAxNjcsIDEyMDE3MiwgMTIwMTc3LCAxMjAxODIsIDEyMDE4NywgMTIwMTkyLCAxMjAxOTcsIDEyMDIwMiwgCi0gICAgMTIwMjA3LCAxMjAyMTIsIDEyMDIxNiwgMTIwMjIwLCAxMjAyMjQsIDAsIDEyMDIyOCwgMTIwMjMyLCAxMjAyMzYsIAotICAgIDEyMDI0MCwgMTIwMjQ0LCAxMjAyNDgsIDEyMDI1MiwgMTIwMjU2LCAxMjAyNjAsIDEyMDI2NCwgMTIwMjY4LCAxMjAyNzIsIAorICAgIDkyMTc3LCA5MjE4MSwgOTIxODYsIDkyMTkxLCAwLCA5MjE5NywgOTIyMDIsIDAsIDAsIDAsIDAsIDAsIDkyMjA3LCA5MjIxMywgCisgICAgOTIyMjAsIDkyMjI1LCA5MjIzMCwgOTIyMzQsIDkyMjM5LCA5MjI0NCwgMCwgOTIyNDksIDkyMjU0LCA5MjI1OSwgMCwgCisgICAgOTIyNjQsIDkyMjY5LCA5MjI3NCwgOTIyNzksIDkyMjg0LCA5MjI4OSwgOTIyOTQsIDkyMjk5LCA5MjMwNCwgOTIzMDksIAorICAgIDkyMzE0LCA5MjMxOCwgOTIzMjIsIDkyMzI3LCA5MjMzMiwgOTIzMzcsIDkyMzQxLCA5MjM0NSwgOTIzNDksIDkyMzU0LCAKKyAgICA5MjM1OSwgOTIzNjQsIDkyMzY5LCA5MjM3MywgOTIzNzgsIDkyMzgyLCA5MjM4NywgMCwgMCwgMCwgMCwgOTIzOTIsIAorICAgIDkyMzk4LCA5MjQwMywgMCwgMCwgMCwgMCwgOTI0MDgsIDkyNDEyLCA5MjQxNiwgOTI0MjAsIDkyNDI0LCA5MjQyOCwgCisgICAgOTI0MzMsIDkyNDM4LCA5MjQ0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI0NTAsIDkyNDU2LCA5MjQ2MywgOTI0NjksIAorICAgIDkyNDc2LCA5MjQ4MiwgOTI0ODgsIDkyNDk0LCA5MjUwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI1MDcsIDkyNTE1LCAKKyAgICA5MjUyMywgOTI1MzEsIDkyNTM5LCA5MjU0NywgOTI1NTUsIDkyNTYzLCA5MjU3MSwgOTI1NzksIDkyNTg3LCA5MjU5NSwgCisgICAgOTI2MDMsIDkyNjExLCA5MjYxOSwgOTI2MjcsIDkyNjM1LCA5MjY0MywgOTI2NTEsIDkyNjU5LCA5MjY2NywgOTI2NzUsIAorICAgIDkyNjgzLCA5MjY5MSwgOTI2OTksIDkyNzA3LCA5MjcxNSwgOTI3MjMsIDkyNzMxLCA5MjczOSwgOTI3NDYsIDkyNzU0LCAKKyAgICA5Mjc2MiwgOTI3NjYsIDkyNzcxLCA5Mjc3NiwgOTI3ODEsIDkyNzg2LCA5Mjc5MSwgOTI3OTYsIDkyODAxLCA5MjgwNSwgCisgICAgOTI4MTAsIDkyODE0LCA5MjgxOSwgOTI4MjMsIDkyODI4LCA5MjgzMiwgOTI4MzcsIDkyODQyLCA5Mjg0NywgOTI4NTIsIAorICAgIDkyODU3LCA5Mjg2MiwgOTI4NjcsIDkyODcyLCA5Mjg3NywgOTI4ODIsIDkyODg3LCA5Mjg5MiwgOTI4OTcsIDkyOTAyLCAKKyAgICA5MjkwNywgOTI5MTIsIDkyOTE3LCA5MjkyMiwgOTI5MjcsIDkyOTMyLCA5MjkzNywgOTI5NDIsIDkyOTQ3LCA5Mjk1MiwgCisgICAgOTI5NTcsIDkyOTYyLCA5Mjk2NywgOTI5NzIsIDkyOTc3LCA5Mjk4MiwgOTI5ODcsIDkyOTkyLCA5Mjk5NywgOTMwMDIsIAorICAgIDkzMDA3LCA5MzAxMiwgOTMwMTcsIDkzMDIyLCAwLCAwLCAwLCA5MzAyNywgOTMwMzIsIDkzMDQxLCA5MzA0OSwgOTMwNTgsIAorICAgIDkzMDY3LCA5MzA3OCwgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCAKKyAgICA5MzE0NSwgOTMxNTIsIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgCisgICAgOTMyMTUsIDkzMjIyLCA5MzIyOSwgOTMyMzYsIDAsIDAsIDkzMjQzLCA5MzI0OSwgOTMyNTUsIDkzMjYxLCA5MzI2NywgCisgICAgOTMyNzQsIDkzMjgxLCA5MzI4OSwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIAorICAgIDkzMzQ2LCA5MzM1MywgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgOTM0MDIsIDkzNDA5LCAKKyAgICA5MzQxNiwgOTM0MjMsIDAsIDAsIDAsIDAsIDAsIDkzNDMwLCA5MzQzNiwgOTM0NDIsIDkzNDQ4LCA5MzQ1NCwgOTM0NjEsIAorICAgIDkzNDY4LCA5MzQ3NiwgOTM0ODQsIDkzNDkwLCA5MzQ5NiwgOTM1MDMsIDkzNTA5LCA5MzUxNSwgOTM1MjEsIDkzNTI3LCAKKyAgICA5MzUzNCwgOTM1NDEsIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgCisgICAgOTM2MDQsIDkzNjExLCA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIAorICAgIDkzNjc0LCA5MzY4MSwgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCAKKyAgICA5Mzc0NCwgOTM3NTEsIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgCisgICAgOTM4MTQsIDkzODIxLCA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIAorICAgIDkzODg0LCA5Mzg5MSwgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCAKKyAgICA5Mzk1NCwgOTM5NjEsIDkzOTY4LCA5Mzk3NSwgOTM5ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzOTg5LCA5Mzk5MywgCisgICAgOTM5OTcsIDk0MDAxLCA5NDAwNSwgOTQwMDksIDk0MDEzLCA5NDAxNywgOTQwMjEsIDk0MDI1LCA5NDAzMCwgOTQwMzUsIAorICAgIDk0MDQwLCA5NDA0NSwgOTQwNTAsIDk0MDU1LCA5NDA2MCwgOTQwNjUsIDk0MDcwLCA5NDA3NiwgOTQwODIsIDk0MDg4LCAKKyAgICA5NDA5NSwgOTQxMDIsIDk0MTA5LCA5NDExNiwgOTQxMjMsIDk0MTMwLCA5NDEzNywgOTQxNDQsIDk0MTUxLCAwLCA5NDE1OCwgCisgICAgOTQxNjIsIDk0MTY2LCA5NDE3MCwgOTQxNzQsIDk0MTc4LCA5NDE4MSwgOTQxODUsIDk0MTg4LCA5NDE5MiwgOTQxOTUsIAorICAgIDk0MTk5LCA5NDIwMywgOTQyMDgsIDk0MjEyLCA5NDIxNywgOTQyMjAsIDk0MjI0LCA5NDIyNywgOTQyMzEsIDk0MjM0LCAKKyAgICA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCA5NDI3NCwgCisgICAgOTQyNzgsIDk0MjgyLCA5NDI4NiwgOTQyOTAsIDk0Mjk0LCA5NDI5OCwgOTQzMDIsIDk0MzA2LCA5NDMwOSwgOTQzMTIsIAorICAgIDk0MzE2LCA5NDMyMCwgOTQzMjQsIDk0MzI3LCA5NDMzMCwgOTQzMzMsIDk0MzM3LCA5NDM0MSwgOTQzNDUsIDk0MzQ5LCAKKyAgICA5NDM1MiwgOTQzNTUsIDk0MzU5LCA5NDM2NSwgOTQzNzEsIDk0Mzc3LCA5NDM4MiwgOTQzODksIDk0MzkzLCA5NDM5OCwgCisgICAgOTQ0MDIsIDk0NDA3LCA5NDQxMiwgOTQ0MTgsIDk0NDIzLCA5NDQyOSwgOTQ0MzMsIDk0NDM4LCA5NDQ0MiwgOTQ0NDcsIAorICAgIDk0NDUwLCA5NDQ1MywgOTQ0NTcsIDk0NDYyLCA5NDQ2OCwgOTQ0NzMsIDk0NDc5LCAwLCAwLCAwLCAwLCA5NDQ4NCwgCisgICAgOTQ0ODcsIDk0NDkwLCA5NDQ5MywgOTQ0OTYsIDk0NDk5LCA5NDUwMiwgOTQ1MDUsIDk0NTA4LCA5NDUxMSwgOTQ1MTUsIAorICAgIDk0NTE5LCA5NDUyMywgOTQ1MjcsIDk0NTMxLCA5NDUzNSwgOTQ1MzksIDk0NTQzLCA5NDU0NywgOTQ1NTIsIDk0NTU3LCAKKyAgICA5NDU2MSwgOTQ1NjQsIDk0NTY3LCA5NDU3MCwgOTQ1NzMsIDk0NTc2LCA5NDU3OSwgOTQ1ODIsIDk0NTg1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDU4OCwgOTQ1OTMsIDk0NTk4LCA5NDYwMywgOTQ2MDcsIAorICAgIDk0NjEyLCA5NDYxNiwgOTQ2MjEsIDk0NjI1LCA5NDYzMCwgOTQ2MzQsIDk0NjM5LCA5NDY0MywgOTQ2NDgsIDk0NjUyLCAKKyAgICA5NDY1NywgOTQ2NjIsIDk0NjY3LCA5NDY3MiwgOTQ2NzcsIDk0NjgyLCA5NDY4NywgOTQ2OTIsIDk0Njk3LCA5NDcwMiwgCisgICAgOTQ3MDcsIDk0NzEyLCA5NDcxNywgOTQ3MjIsIDk0NzI3LCA5NDczMiwgOTQ3MzcsIDk0NzQyLCA5NDc0NywgOTQ3NTIsIAorICAgIDk0NzU2LCA5NDc2MCwgOTQ3NjUsIDk0NzcwLCA5NDc3NSwgOTQ3NzksIDk0NzgzLCA5NDc4NywgOTQ3OTIsIDk0Nzk3LCAKKyAgICA5NDgwMiwgOTQ4MDcsIDk0ODExLCA5NDgxNSwgOTQ4MjEsIDk0ODI2LCA5NDgzMiwgOTQ4MzcsIDk0ODQzLCA5NDg0OCwgCisgICAgOTQ4NTQsIDk0ODU5LCA5NDg2NSwgOTQ4NzAsIDk0ODc1LCA5NDg4MCwgOTQ4ODUsIDk0ODg5LCA5NDg5NCwgOTQ5MDAsIAorICAgIDk0OTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCAKKyAgICA5NDkzMCwgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgCisgICAgOTUwMDAsIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCA5NTA1NiwgOTUwNjMsIAorICAgIDk1MDcwLCA5NTA3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTUwODQsIDk1MDkxLCA5NTA5NywgOTUxMDMsIDk1MTA5LCAKKyAgICA5NTExNSwgOTUxMjEsIDk1MTI3LCA5NTEzMywgOTUxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDk1MTQ1LCA5NTE1MCwgOTUxNTUsIAorICAgIDk1MTYwLCA5NTE2NSwgOTUxNjksIDk1MTczLCA5NTE3NywgOTUxODIsIDk1MTg3LCA5NTE5MiwgOTUxOTcsIDk1MjAyLCAKKyAgICA5NTIwNywgOTUyMTIsIDk1MjE3LCA5NTIyMiwgOTUyMjcsIDk1MjMyLCA5NTIzNywgOTUyNDIsIDk1MjQ3LCA5NTI1MiwgCisgICAgOTUyNTcsIDk1MjYyLCA5NTI2NywgOTUyNzIsIDk1Mjc3LCA5NTI4MiwgOTUyODcsIDk1MjkyLCA5NTI5NywgOTUzMDIsIAorICAgIDk1MzA3LCA5NTMxMiwgOTUzMTcsIDk1MzIyLCA5NTMyNywgOTUzMzIsIDk1MzM3LCA5NTM0MiwgOTUzNDcsIDk1MzUzLCAKKyAgICA5NTM1OCwgOTUzNjQsIDk1MzY5LCA5NTM3NSwgOTUzODAsIDk1Mzg2LCA5NTM5MiwgOTUzOTYsIDk1NDAxLCA5NTQwNSwgMCwgCisgICAgOTU0MDksIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI2LCA5NTQzMCwgOTU0MzQsIDk1NDM4LCA5NTQ0MiwgOTU0NDYsIAorICAgIDk1NDUwLCA5NTQ1NSwgOTU0NTksIDk1NDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTQ2OSwgCisgICAgOTU0NzMsIDk1NDc3LCA5NTQ4MSwgOTU0ODQsIDk1NDg4LCA5NTQ5MSwgOTU0OTUsIDk1NDk4LCA5NTUwMiwgOTU1MDYsIAorICAgIDk1NTExLCA5NTUxNSwgOTU1MjAsIDk1NTIzLCA5NTUyNywgOTU1MzAsIDk1NTM0LCA5NTUzNywgOTU1NDEsIDk1NTQ1LCAKKyAgICA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIDk1NTgxLCA5NTU4NSwgCisgICAgOTU1ODksIDk1NTkzLCA5NTU5NywgOTU2MDEsIDk1NjA1LCA5NTYwOSwgOTU2MTIsIDk1NjE1LCA5NTYxOSwgOTU2MjMsIAorICAgIDk1NjI3LCA5NTYzMCwgOTU2MzMsIDk1NjM2LCA5NTY0MCwgOTU2NDQsIDk1NjQ4LCA5NTY1MiwgOTU2NTYsIDk1NjU5LCAKKyAgICA5NTY2MiwgOTU2NjcsIDk1NjcxLCA5NTY3NiwgOTU2ODAsIDk1Njg1LCA5NTY5MCwgOTU2OTYsIDk1NzAxLCA5NTcwNywgCisgICAgOTU3MTEsIDk1NzE2LCA5NTcyMCwgOTU3MjUsIDk1NzI5LCA5NTczMywgOTU3MzcsIDk1NzQxLCA5NTc0NCwgOTU3NDcsIAorICAgIDk1NzUxLCA5NTc1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NTgsIDk1NzYyLCA5NTc2NSwgOTU3NjgsIDk1NzcxLCAKKyAgICA5NTc3NCwgOTU3NzcsIDk1NzgwLCA5NTc4MywgOTU3ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDk1Nzg5LCA5NTc5MywgOTU3OTgsIDk1ODAyLCA5NTgwNywgOTU4MTEsIDk1ODE2LCA5NTgyMCwgOTU4MjUsIDk1ODI5LCAKKyAgICA5NTgzNCwgOTU4MzgsIDk1ODQzLCA5NTg0OCwgOTU4NTMsIDk1ODU4LCA5NTg2MywgOTU4NjgsIDk1ODczLCA5NTg3OCwgCisgICAgOTU4ODMsIDk1ODg4LCA5NTg5MywgOTU4OTgsIDk1OTAzLCA5NTkwOCwgOTU5MTMsIDk1OTE4LCA5NTkyMywgOTU5MjgsIAorICAgIDk1OTMyLCA5NTkzNiwgOTU5NDEsIDk1OTQ2LCA5NTk1MSwgOTU5NTUsIDk1OTU5LCA5NTk2MywgOTU5NjgsIDk1OTczLCAKKyAgICA5NTk3OCwgOTU5ODIsIDk1OTg2LCA5NTk5MSwgOTU5OTYsIDk2MDAxLCA5NjAwNywgOTYwMTIsIDk2MDE4LCA5NjAyMywgCisgICAgOTYwMjksIDk2MDM0LCA5NjA0MCwgOTYwNDUsIDk2MDUxLCA5NjA1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNjEsIAorICAgIDk2MDY2LCA5NjA3MCwgOTYwNzQsIDk2MDc4LCA5NjA4MiwgOTYwODYsIDk2MDkwLCA5NjA5NCwgOTYwOTgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDk2MTAyLCA5NjEwNSwgOTYxMTAsIDk2MTE2LCA5NjEyNCwgOTYxMjksIDk2MTM1LCA5NjE0MywgOTYxNDksIAorICAgIDk2MTU1LCA5NjE1OSwgOTYxNjMsIDk2MTcwLCA5NjE3OSwgOTYxODYsIDk2MTk1LCA5NjIwMSwgOTYyMTAsIDk2MjE3LCAKKyAgICA5NjIyNCwgOTYyMzEsIDk2MjQxLCA5NjI0NywgOTYyNTEsIDk2MjU4LCA5NjI2NywgOTYyNzcsIDk2Mjg0LCA5NjI5MSwgCisgICAgOTYyOTUsIDk2Mjk5LCA5NjMwNiwgOTYzMTYsIDk2MzIwLCA5NjMyNywgOTYzMzQsIDk2MzQxLCA5NjM0NywgOTYzNTQsIAorICAgIDk2MzYxLCA5NjM2OCwgOTYzNzUsIDk2Mzc5LCA5NjM4MywgOTYzODcsIDk2Mzk0LCA5NjM5OCwgOTY0MDUsIDk2NDEyLCAKKyAgICA5NjQyNiwgOTY0MzUsIDk2NDM5LCA5NjQ0MywgOTY0NDcsIDk2NDU0LCA5NjQ1OCwgOTY0NjIsIDk2NDY2LCA5NjQ3NCwgCisgICAgOTY0ODIsIDk2NTAxLCA5NjUxMSwgOTY1MzEsIDk2NTM1LCA5NjUzOSwgOTY1NDMsIDk2NTQ3LCA5NjU1MSwgOTY1NTUsIAorICAgIDk2NTU5LCA5NjU2NiwgOTY1NzAsIDk2NTczLCA5NjU3NywgOTY1ODEsIDk2NTg3LCA5NjU5NCwgOTY2MDMsIDk2NjA3LCAKKyAgICA5NjYxNiwgOTY2MjUsIDk2NjMzLCA5NjYzNywgOTY2NDQsIDk2NjQ4LCA5NjY1MiwgOTY2NTYsIDk2NjYwLCA5NjY3MSwgCisgICAgOTY2ODAsIDk2Njg5LCA5NjY5OCwgOTY3MDcsIDk2NzE5LCA5NjcyOCwgOTY3MzcsIDk2NzQ2LCA5Njc1NCwgOTY3NjMsIAorICAgIDk2Nzc1LCA5Njc4NCwgOTY3OTMsIDk2ODAyLCA5NjgxNCwgOTY4MjMsIDk2ODMyLCA5Njg0NCwgOTY4NTMsIDk2ODYyLCAKKyAgICA5Njg3NCwgOTY4ODMsIDk2ODg3LCA5Njg5MSwgOTY4OTUsIDk2ODk5LCA5NjkwMywgOTY5MDcsIDk2OTExLCA5NjkxOCwgCisgICAgOTY5MjIsIDk2OTI2LCA5NjkzNywgOTY5NDEsIDk2OTQ1LCA5Njk1MiwgOTY5NTgsIDk2OTY0LCA5Njk2OCwgOTY5NzUsIAorICAgIDk2OTc5LCA5Njk4MywgOTY5ODcsIDk2OTkxLCA5Njk5NSwgOTY5OTksIDk3MDA1LCA5NzAxMywgOTcwMTcsIDk3MDIxLCAKKyAgICA5NzAyNCwgOTcwMzAsIDk3MDQwLCA5NzA0NCwgOTcwNTYsIDk3MDYzLCA5NzA3MCwgOTcwNzcsIDk3MDg0LCA5NzA5MCwgCisgICAgOTcwOTQsIDk3MDk4LCA5NzEwMiwgOTcxMDYsIDk3MTEzLCA5NzEyMiwgOTcxMjksIDk3MTM3LCA5NzE0NSwgOTcxNTEsIAorICAgIDk3MTU1LCA5NzE1OSwgOTcxNjMsIDk3MTY3LCA5NzE3MywgOTcxODIsIDk3MTk0LCA5NzIwMSwgOTcyMDgsIDk3MjE3LCAKKyAgICA5NzIyOCwgOTcyMzQsIDk3MjQzLCA5NzI1MiwgOTcyNTksIDk3MjY4LCA5NzI3NSwgOTcyODIsIDk3MjkyLCA5NzI5OSwgCisgICAgOTczMDYsIDk3MzEzLCA5NzMyMCwgOTczMjQsIDk3MzMwLCA5NzMzNCwgOTczNDUsIDk3MzUzLCA5NzM2MiwgOTczNzQsIAorICAgIDk3MzgxLCA5NzM4OCwgOTczOTgsIDk3NDA1LCA5NzQxNCwgOTc0MjEsIDk3NDMwLCA5NzQzNywgOTc0NDQsIDk3NDU0LCAKKyAgICA5NzQ2MSwgOTc0NjgsIDk3NDc4LCA5NzQ4NSwgOTc0OTcsIDk3NTA2LCA5NzUxMywgOTc1MjAsIDk3NTI3LCA5NzUzNiwgCisgICAgOTc1NDYsIDk3NTU5LCA5NzU2NiwgOTc1NzYsIDk3NTg2LCA5NzU5MywgOTc2MDIsIDk3NjE1LCA5NzYyMiwgOTc2MjksIAorICAgIDk3NjM2LCA5NzY0NiwgOTc2NTYsIDk3NjYzLCA5NzY3MywgOTc2ODAsIDk3Njg3LCA5NzY5NywgOTc3MDMsIDk3NzEwLCAKKyAgICA5NzcxNywgOTc3MjQsIDk3NzM0LCA5Nzc0MSwgOTc3NDgsIDk3NzU1LCA5Nzc2MSwgOTc3NjgsIDk3Nzc4LCA5Nzc4NSwgCisgICAgOTc3ODksIDk3Nzk3LCA5NzgwMSwgOTc4MTMsIDk3ODE3LCA5NzgzMSwgOTc4MzUsIDk3ODM5LCA5Nzg0MywgOTc4NDcsIAorICAgIDk3ODUzLCA5Nzg2MCwgOTc4NjgsIDk3ODcyLCA5Nzg3NiwgOTc4ODAsIDk3ODg0LCA5Nzg5MSwgOTc4OTUsIDk3OTAxLCAKKyAgICA5NzkwNywgOTc5MTUsIDk3OTE5LCA5NzkyNiwgOTc5MzQsIDk3OTM4LCA5Nzk0MiwgOTc5NDgsIDk3OTUyLCA5Nzk2MSwgCisgICAgOTc5NzAsIDk3OTc3LCA5Nzk4NywgOTc5OTMsIDk3OTk3LCA5ODAwMSwgOTgwMDksIDk4MDE2LCA5ODAyMywgOTgwMjksIAorICAgIDk4MDMzLCA5ODA0MSwgOTgwNDUsIDk4MDUyLCA5ODA2NCwgOTgwNzEsIDk4MDgxLCA5ODA4NywgOTgwOTEsIDk4MTAwLCAKKyAgICA5ODEwNywgOTgxMTYsIDk4MTIwLCA5ODEyNCwgOTgxMzEsIDk4MTM1LCA5ODEzOSwgOTgxNDMsIDk4MTQ3LCA5ODE1MCwgCisgICAgOTgxNTYsIDk4MTYyLCA5ODE2NiwgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNSwgOTgyMTIsIAorICAgIDk4MjE5LCA5ODIyNiwgOTgyMzIsIDk4MjM2LCA5ODI0MCwgOTgyNDcsIDk4MjU0LCA5ODI2MSwgOTgyNjgsIDk4Mjc1LCAKKyAgICA5ODI3OSwgOTgyODIsIDk4Mjg3LCA5ODI5MSwgOTgyOTUsIDk4MzA0LCA5ODMxMywgOTgzMTcsIDk4MzIxLCA5ODMyNywgCisgICAgOTgzMzMsIDk4MzUwLCA5ODM1NiwgOTgzNjAsIDk4MzY5LCA5ODM3MywgOTgzNzcsIDk4Mzg0LCA5ODM5MiwgOTg0MDAsIAorICAgIDk4NDA2LCA5ODQxMCwgOTg0MTQsIDk4NDE4LCA5ODQyMiwgOTg0MjUsIDk4NDMxLCA5ODQzOCwgOTg0NDgsIDk4NDU1LCAKKyAgICA5ODQ2MiwgOTg0NjksIDk4NDc1LCA5ODQ4MiwgOTg0ODksIDk4NDk2LCA5ODUwMywgOTg1MTAsIDk4NTE5LCA5ODUyNiwgCisgICAgOTg1MzgsIDk4NTQ1LCA5ODU1MiwgOTg1NjIsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIAorICAgIDk4NjE1LCA5ODYyMiwgOTg2MjksIDk4NjM2LCA5ODY0MywgOTg2NTMsIDk4NjYzLCA5ODY3MywgOTg2ODAsIDk4NjkwLCAKKyAgICA5ODY5NywgOTg3MDQsIDk4NzExLCA5ODcxOCwgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OSwgCisgICAgOTg3NjYsIDk4NzczLCA5ODc4MCwgOTg3ODYsIDk4NzkzLCA5ODgwMCwgOTg4MDksIDk4ODE2LCA5ODgyMywgOTg4MjcsIAorICAgIDk4ODM1LCA5ODgzOSwgOTg4NDMsIDk4ODQ3LCA5ODg1MSwgOTg4NTUsIDk4ODYyLCA5ODg2NiwgOTg4NzUsIDk4ODc5LCAKKyAgICA5ODg4NiwgOTg4OTQsIDk4ODk4LCA5ODkwMiwgOTg5MDYsIDk4OTE5LCA5ODkzNSwgOTg5MzksIDk4OTQzLCA5ODk1MCwgCisgICAgOTg5NTYsIDk4OTYzLCA5ODk2NywgOTg5NzEsIDk4OTc1LCA5ODk3OSwgOTg5ODMsIDk4OTkwLCA5ODk5NCwgOTkwMTIsIAorICAgIDk5MDE2LCA5OTAyMCwgOTkwMjcsIDk5MDMxLCA5OTAzNSwgOTkwNDEsIDk5MDQ1LCA5OTA0OSwgOTkwNTcsIDk5MDYxLCAKKyAgICA5OTA2NSwgOTkwNjksIDk5MDczLCA5OTA3OSwgOTkwOTAsIDk5MDk5LCA5OTEwOCwgOTkxMTUsIDk5MTIyLCA5OTEzMywgCisgICAgOTkxNDAsIDk5MTQ3LCA5OTE1NCwgOTkxNjEsIDk5MTY4LCA5OTE3NSwgOTkxODIsIDk5MTkyLCA5OTE5OCwgOTkyMDUsIAorICAgIDk5MjE1LCA5OTIyNCwgOTkyMzEsIDk5MjQwLCA5OTI1MCwgOTkyNTcsIDk5MjY0LCA5OTI3MSwgOTkyNzgsIDk5MjkwLCAKKyAgICA5OTI5NywgOTkzMDQsIDk5MzExLCA5OTMxOCwgOTkzMjUsIDk5MzM1LCA5OTM0MiwgOTkzNDksIDk5MzU5LCA5OTM3MiwgCisgICAgOTkzODQsIDk5MzkxLCA5OTQwMSwgOTk0MDgsIDk5NDE1LCA5OTQyMiwgOTk0MzYsIDk5NDQyLCA5OTQ1MCwgOTk0NjAsIAorICAgIDk5NDcwLCA5OTQ3NywgOTk0ODQsIDk5NDkwLCA5OTQ5NCwgOTk1MDEsIDk5NTExLCA5OTUxNywgOTk1MzAsIDk5NTM0LCAKKyAgICA5OTUzOCwgOTk1NDUsIDk5NTQ5LCA5OTU1NiwgOTk1NjYsIDk5NTcwLCA5OTU3NCwgOTk1NzgsIDk5NTgyLCA5OTU4NiwgCisgICAgOTk1OTMsIDk5NTk3LCA5OTYwNCwgOTk2MTEsIDk5NjE4LCA5OTYyNywgOTk2MzYsIDk5NjQ2LCA5OTY1MywgOTk2NjAsIAorICAgIDk5NjY3LCA5OTY3NywgOTk2ODQsIDk5Njk0LCA5OTcwMSwgOTk3MTEsIDk5NzE4LCA5OTcyNSwgOTk3MzUsIDk5NzQ1LCAKKyAgICA5OTc1MiwgOTk3NTgsIDk5NzY2LCA5OTc3NCwgOTk3ODAsIDk5Nzg2LCA5OTc5MCwgOTk3OTQsIDk5ODAxLCA5OTgwOSwgCisgICAgOTk4MTUsIDk5ODE5LCA5OTgyMywgOTk4MjcsIDk5ODM0LCA5OTg0NiwgOTk4NDksIDk5ODU2LCA5OTg2MiwgOTk4NjYsIAorICAgIDk5ODcwLCA5OTg3NCwgOTk4NzgsIDk5ODgyLCA5OTg4NiwgOTk4OTAsIDk5ODk0LCA5OTg5OCwgOTk5MDIsIDk5OTA5LCAKKyAgICA5OTkxMywgOTk5MTksIDk5OTIzLCA5OTkyNywgOTk5MzEsIDk5OTM3LCA5OTk0NCwgOTk5NTEsIDk5OTU4LCA5OTk2OSwgCisgICAgOTk5NzcsIDk5OTgxLCA5OTk4NywgOTk5OTYsIDEwMDAwMywgMTAwMDA5LCAxMDAwMTIsIDEwMDAxNiwgMTAwMDIwLCAKKyAgICAxMDAwMjYsIDEwMDAzNSwgMTAwMDQzLCAxMDAwNDcsIDEwMDA1MywgMTAwMDU3LCAxMDAwNjEsIDEwMDA2NSwgMTAwMDcxLCAKKyAgICAxMDAwNzgsIDEwMDA4NCwgMTAwMDg4LCAxMDAwOTQsIDEwMDA5OCwgMTAwMTAyLCAxMDAxMTEsIDEwMDEyMywgMTAwMTI3LCAKKyAgICAxMDAxMzQsIDEwMDE0MSwgMTAwMTUxLCAxMDAxNTgsIDEwMDE3MCwgMTAwMTc3LCAxMDAxODQsIDEwMDE5MSwgMTAwMjAyLCAKKyAgICAxMDAyMTIsIDEwMDIyNSwgMTAwMjM1LCAxMDAyNDIsIDEwMDI0NiwgMTAwMjUwLCAxMDAyNTQsIDEwMDI1OCwgMTAwMjY3LCAKKyAgICAxMDAyNzYsIDEwMDI4NSwgMTAwMzAyLCAxMDAzMTEsIDEwMDMxNywgMTAwMzI0LCAxMDAzMzIsIDEwMDM0NSwgMTAwMzQ5LCAKKyAgICAxMDAzNTgsIDEwMDM2NywgMTAwMzc2LCAxMDAzODUsIDEwMDM5NiwgMTAwNDA1LCAxMDA0MTQsIDEwMDQyMywgMTAwNDMyLCAKKyAgICAxMDA0NDEsIDEwMDQ1MCwgMTAwNDYwLCAxMDA0NjMsIDEwMDQ2NywgMTAwNDcxLCAxMDA0NzUsIDEwMDQ3OSwgMTAwNDgzLCAKKyAgICAxMDA0ODksIDEwMDQ5NiwgMTAwNTAzLCAxMDA1MTAsIDEwMDUxNiwgMTAwNTIyLCAxMDA1MjksIDEwMDUzNSwgMTAwNTQyLCAKKyAgICAxMDA1NTAsIDEwMDU1NCwgMTAwNTYxLCAxMDA1NjgsIDEwMDU3NSwgMTAwNTgzLCAxMDA1ODYsIDEwMDU5MCwgMTAwNTk0LCAKKyAgICAxMDA1OTgsIDEwMDYwMSwgMTAwNjA3LCAxMDA2MTEsIDEwMDYxNywgMTAwNjI0LCAxMDA2MzEsIDEwMDYzNywgMTAwNjQ0LCAKKyAgICAxMDA2NTEsIDEwMDY1OCwgMTAwNjY1LCAxMDA2NzIsIDEwMDY3OSwgMTAwNjg2LCAxMDA2OTMsIDEwMDcwMCwgMTAwNzA3LCAKKyAgICAxMDA3MTQsIDEwMDcyMSwgMTAwNzI4LCAxMDA3MzUsIDEwMDc0MSwgMTAwNzQ1LCAxMDA3NTQsIDEwMDc1OCwgMTAwNzYyLCAKKyAgICAxMDA3NjYsIDEwMDc3MCwgMTAwNzc2LCAxMDA3ODMsIDEwMDc5MCwgMTAwNzk3LCAxMDA4MDQsIDEwMDgxMSwgMTAwODE3LCAKKyAgICAxMDA4MjUsIDEwMDgyOSwgMTAwODMzLCAxMDA4MzcsIDEwMDg0MSwgMTAwODQ3LCAxMDA4NjQsIDEwMDg4MSwgMTAwODg1LCAKKyAgICAxMDA4ODksIDEwMDg5MywgMTAwODk3LCAxMDA5MDEsIDEwMDkwNSwgMTAwOTExLCAxMDA5MTgsIDEwMDkyMiwgMTAwOTI4LCAKKyAgICAxMDA5MzUsIDEwMDk0MiwgMTAwOTQ5LCAxMDA5NTYsIDEwMDk2MywgMTAwOTcyLCAxMDA5NzksIDEwMDk4NiwgMTAwOTkzLCAKKyAgICAxMDEwMDAsIDEwMTAwNCwgMTAxMDA4LCAxMDEwMTQsIDEwMTAyNiwgMTAxMDMwLCAxMDEwMzQsIDEwMTA0MywgMTAxMDQ3LCAKKyAgICAxMDEwNTEsIDEwMTA1NSwgMTAxMDYxLCAxMDEwNjUsIDEwMTA2OSwgMTAxMDc4LCAxMDEwODIsIDEwMTA4NiwgMTAxMDkwLCAKKyAgICAxMDEwOTcsIDEwMTEwMSwgMTAxMTA1LCAxMDExMDksIDEwMTExMywgMTAxMTE3LCAxMDExMjEsIDEwMTEyNSwgMTAxMTI5LCAKKyAgICAxMDExMzUsIDEwMTE0MiwgMTAxMTQ5LCAxMDExNTUsIDEwMTE1OSwgMTAxMTc2LCAxMDExODIsIDEwMTE4NiwgMTAxMTkyLCAKKyAgICAxMDExOTgsIDEwMTIwNCwgMTAxMjEwLCAxMDEyMTYsIDEwMTIyMiwgMTAxMjI2LCAxMDEyMzAsIDEwMTIzNCwgMTAxMjQwLCAKKyAgICAxMDEyNDQsIDEwMTI1MCwgMTAxMjU0LCAxMDEyNTgsIDEwMTI2NSwgMTAxMjcyLCAxMDEyODksIDEwMTI5MywgMTAxMjk3LCAKKyAgICAxMDEzMDEsIDEwMTMwNSwgMTAxMzA5LCAxMDEzMjEsIDEwMTMyNCwgMTAxMzI5LCAxMDEzMzQsIDEwMTM0OSwgMTAxMzU5LCAKKyAgICAxMDEzNzEsIDEwMTM3NSwgMTAxMzc5LCAxMDEzODMsIDEwMTM4OSwgMTAxMzk2LCAxMDE0MDMsIDEwMTQxMywgMTAxNDI1LCAKKyAgICAxMDE0MzEsIDEwMTQzNywgMTAxNDQ2LCAxMDE0NTAsIDEwMTQ1NCwgMTAxNDYxLCAxMDE0NzEsIDEwMTQ3OCwgMTAxNDg0LCAKKyAgICAxMDE0ODgsIDEwMTQ5MiwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE1LCAxMDE1MTksIDEwMTUyNywgMTAxNTMzLCAKKyAgICAxMDE1MzcsIDEwMTU0NSwgMTAxNTUzLCAxMDE1NjAsIDEwMTU2NiwgMTAxNTczLCAxMDE1ODAsIDEwMTU5MCwgMTAxNjAwLCAKKyAgICAxMDE2MDQsIDEwMTYwOCwgMTAxNjEyLCAxMDE2MTYsIDEwMTYyMiwgMTAxNjI5LCAxMDE2MzUsIDEwMTY0MiwgMTAxNjQ5LCAKKyAgICAxMDE2NTYsIDEwMTY2NSwgMTAxNjcyLCAxMDE2NzksIDEwMTY4NSwgMTAxNjkyLCAxMDE2OTksIDEwMTcwNiwgMTAxNzEzLCAKKyAgICAxMDE3MjAsIDEwMTcyNywgMTAxNzMzLCAxMDE3NDAsIDEwMTc0NywgMTAxNzU0LCAxMDE3NjMsIDEwMTc3MCwgMTAxNzc3LCAKKyAgICAxMDE3ODEsIDEwMTc4NywgMTAxNzkxLCAxMDE3OTcsIDEwMTgwNCwgMTAxODExLCAxMDE4MTgsIDEwMTgyMiwgMTAxODI2LCAKKyAgICAxMDE4MzAsIDEwMTgzNCwgMTAxODM4LCAxMDE4NDUsIDEwMTg0OSwgMTAxODUzLCAxMDE4NTksIDEwMTg2NywgMTAxODcxLCAKKyAgICAxMDE4NzUsIDEwMTg3OSwgMTAxODgzLCAxMDE4OTAsIDEwMTg5NCwgMTAxODk4LCAxMDE5MDYsIDEwMTkxMCwgMTAxOTE0LCAKKyAgICAxMDE5MTgsIDEwMTkyMiwgMTAxOTI4LCAxMDE5MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwMTkzNiwgMTAxOTQyLCAxMDE5NDgsIDEwMTk1NSwgMTAxOTYyLCAxMDE5NjksIDEwMTk3NiwgMTAxOTgzLCAKKyAgICAxMDE5OTAsIDEwMTk5NiwgMTAyMDAzLCAxMDIwMTAsIDEwMjAxNywgMTAyMDI0LCAxMDIwMzEsIDEwMjAzOCwgMTAyMDQ0LCAKKyAgICAxMDIwNTAsIDEwMjA1NiwgMTAyMDYyLCAxMDIwNjgsIDEwMjA3NCwgMTAyMDgwLCAxMDIwODYsIDEwMjA5MiwgMTAyMDk5LCAKKyAgICAxMDIxMDYsIDEwMjExMywgMTAyMTIwLCAxMDIxMjcsIDEwMjEzNCwgMTAyMTQwLCAxMDIxNDYsIDEwMjE1MiwgMTAyMTU5LCAKKyAgICAxMDIxNjYsIDEwMjE3MiwgMTAyMTc4LCAxMDIxODcsIDEwMjE5NCwgMTAyMjAxLCAxMDIyMDgsIDEwMjIxNSwgMTAyMjIyLCAKKyAgICAxMDIyMjksIDEwMjIzNSwgMTAyMjQxLCAxMDIyNDcsIDEwMjI1NiwgMTAyMjYzLCAxMDIyNzAsIDEwMjI4MSwgMTAyMjkyLCAKKyAgICAxMDIyOTgsIDEwMjMwNCwgMTAyMzEwLCAxMDIzMTksIDEwMjMyNiwgMTAyMzMzLCAxMDIzNDMsIDEwMjM1MywgMTAyMzY0LCAKKyAgICAxMDIzNzUsIDEwMjM4NywgMTAyNDAwLCAxMDI0MTEsIDEwMjQyMiwgMTAyNDM0LCAxMDI0NDcsIDEwMjQ1OCwgMTAyNDY5LCAKKyAgICAxMDI0ODAsIDEwMjQ5MSwgMTAyNTAyLCAxMDI1MTQsIDEwMjUyMiwgMTAyNTMwLCAxMDI1MzksIDEwMjU0OCwgMTAyNTU3LCAKKyAgICAxMDI1NjMsIDEwMjU2OSwgMTAyNTc1LCAxMDI1ODIsIDEwMjU5MiwgMTAyNTk5LCAxMDI2MDksIDEwMjYxNCwgMTAyNjE5LCAKKyAgICAxMDI2MjUsIDEwMjYzMSwgMTAyNjM5LCAxMDI2NDcsIDEwMjY1NiwgMTAyNjY3LCAxMDI2NzgsIDEwMjY4NiwgMTAyNjk0LCAKKyAgICAxMDI3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjcxMiwgMTAyNzIzLCAxMDI3MzAsIAorICAgIDEwMjczOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyNzQ2LCAxMDI3NTAsIDEwMjc1NCwgCisgICAgMTAyNzU4LCAxMDI3NjIsIDEwMjc2NiwgMTAyNzcwLCAxMDI3NzQsIDEwMjc3OCwgMTAyNzgyLCAxMDI3ODYsIDEwMjc5MCwgCisgICAgMTAyNzk0LCAxMDI3OTgsIDEwMjgwMiwgMTAyODA2LCAxMDI4MTAsIDEwMjgxNCwgMTAyODE4LCAxMDI4MjIsIDEwMjgyNiwgCisgICAgMTAyODMwLCAxMDI4MzQsIDEwMjgzOCwgMTAyODQyLCAxMDI4NDYsIDEwMjg1MCwgMTAyODU0LCAxMDI4NTgsIDEwMjg2MiwgCisgICAgMTAyODY2LCAxMDI4NzAsIDEwMjg3NCwgMTAyODc4LCAxMDI4ODIsIDEwMjg4NiwgMTAyODkwLCAxMDI4OTQsIDEwMjg5OCwgCisgICAgMTAyOTAyLCAxMDI5MDYsIDEwMjkxMCwgMTAyOTE0LCAxMDI5MTgsIDEwMjkyMiwgMTAyOTI2LCAxMDI5MzAsIDEwMjkzNCwgCisgICAgMTAyOTM4LCAxMDI5NDIsIDEwMjk0NiwgMTAyOTUwLCAxMDI5NTQsIDEwMjk1OCwgMTAyOTYyLCAxMDI5NjYsIDEwMjk3MCwgCisgICAgMTAyOTc0LCAxMDI5NzgsIDEwMjk4MiwgMTAyOTg2LCAxMDI5OTAsIDEwMjk5NCwgMTAyOTk4LCAxMDMwMDIsIDEwMzAwNiwgCisgICAgMTAzMDEwLCAxMDMwMTQsIDEwMzAxOCwgMTAzMDIyLCAxMDMwMjYsIDEwMzAzMCwgMTAzMDM0LCAxMDMwMzgsIDEwMzA0MiwgCisgICAgMTAzMDQ2LCAxMDMwNTAsIDEwMzA1NCwgMTAzMDU4LCAxMDMwNjIsIDEwMzA2NiwgMTAzMDcwLCAxMDMwNzQsIDEwMzA3OCwgCisgICAgMTAzMDgyLCAxMDMwODYsIDEwMzA5MCwgMTAzMDk0LCAxMDMwOTgsIDEwMzEwMiwgMTAzMTA2LCAxMDMxMTAsIDEwMzExNCwgCisgICAgMTAzMTE4LCAxMDMxMjIsIDEwMzEyNiwgMTAzMTMwLCAxMDMxMzQsIDEwMzEzOCwgMTAzMTQyLCAxMDMxNDYsIDEwMzE1MCwgCisgICAgMTAzMTU0LCAxMDMxNTgsIDEwMzE2MiwgMTAzMTY2LCAxMDMxNzAsIDEwMzE3NCwgMTAzMTc4LCAxMDMxODIsIDEwMzE4NiwgCisgICAgMTAzMTkwLCAxMDMxOTQsIDEwMzE5OCwgMTAzMjAyLCAxMDMyMDYsIDEwMzIxMCwgMTAzMjE0LCAxMDMyMTgsIDEwMzIyMiwgCisgICAgMTAzMjI2LCAxMDMyMzAsIDEwMzIzNCwgMTAzMjM4LCAxMDMyNDIsIDEwMzI0NiwgMTAzMjUwLCAxMDMyNTQsIDEwMzI1OCwgCisgICAgMTAzMjYyLCAxMDMyNjYsIDEwMzI3MCwgMTAzMjc0LCAxMDMyNzgsIDEwMzI4MiwgMTAzMjg2LCAxMDMyOTAsIDEwMzI5NCwgCisgICAgMTAzMjk4LCAxMDMzMDIsIDEwMzMwNiwgMTAzMzEwLCAxMDMzMTQsIDEwMzMxOCwgMTAzMzIyLCAxMDMzMjYsIDEwMzMzMCwgCisgICAgMTAzMzM0LCAxMDMzMzgsIDEwMzM0MiwgMTAzMzQ2LCAxMDMzNTAsIDEwMzM1NCwgMTAzMzU4LCAxMDMzNjIsIDEwMzM2NiwgCisgICAgMTAzMzcwLCAxMDMzNzQsIDEwMzM3OCwgMTAzMzgyLCAxMDMzODYsIDEwMzM5MCwgMTAzMzk0LCAxMDMzOTgsIDEwMzQwMiwgCisgICAgMTAzNDA2LCAxMDM0MTAsIDEwMzQxNCwgMTAzNDE4LCAxMDM0MjIsIDEwMzQyNiwgMTAzNDMwLCAxMDM0MzQsIDEwMzQzOCwgCisgICAgMTAzNDQyLCAxMDM0NDYsIDEwMzQ1MCwgMTAzNDU0LCAxMDM0NTgsIDEwMzQ2MiwgMTAzNDY2LCAxMDM0NzAsIDEwMzQ3NCwgCisgICAgMTAzNDc4LCAxMDM0ODIsIDEwMzQ4NiwgMTAzNDkwLCAxMDM0OTQsIDEwMzQ5OCwgMTAzNTAyLCAxMDM1MDYsIDEwMzUxMCwgCisgICAgMTAzNTE0LCAxMDM1MTgsIDEwMzUyMiwgMTAzNTI2LCAxMDM1MzAsIDEwMzUzNCwgMTAzNTM4LCAxMDM1NDIsIDEwMzU0NiwgCisgICAgMTAzNTUwLCAxMDM1NTQsIDEwMzU1OCwgMTAzNTYyLCAxMDM1NjYsIDEwMzU3MCwgMTAzNTc0LCAxMDM1NzgsIDEwMzU4MiwgCisgICAgMTAzNTg2LCAxMDM1OTAsIDEwMzU5NCwgMTAzNTk4LCAxMDM2MDIsIDEwMzYwNiwgMTAzNjEwLCAxMDM2MTQsIDEwMzYxOCwgCisgICAgMTAzNjIyLCAxMDM2MjYsIDEwMzYzMCwgMTAzNjM0LCAxMDM2MzgsIDEwMzY0MiwgMTAzNjQ2LCAxMDM2NTAsIDEwMzY1NCwgCisgICAgMTAzNjU4LCAxMDM2NjIsIDEwMzY2NiwgMTAzNjcwLCAxMDM2NzQsIDEwMzY3OCwgMTAzNjgyLCAxMDM2ODYsIDEwMzY5MCwgCisgICAgMTAzNjk0LCAxMDM2OTgsIDEwMzcwMiwgMTAzNzA2LCAxMDM3MTAsIDEwMzcxNCwgMTAzNzE4LCAxMDM3MjIsIDEwMzcyNiwgCisgICAgMTAzNzMwLCAxMDM3MzQsIDEwMzczOCwgMTAzNzQyLCAxMDM3NDYsIDEwMzc1MCwgMTAzNzU0LCAxMDM3NTgsIDEwMzc2MiwgCisgICAgMTAzNzY2LCAxMDM3NzAsIDEwMzc3NCwgMTAzNzc4LCAxMDM3ODIsIDEwMzc4NiwgMTAzNzkwLCAxMDM3OTQsIDEwMzc5OCwgCisgICAgMTAzODAyLCAxMDM4MDYsIDEwMzgxMCwgMTAzODE0LCAxMDM4MTgsIDEwMzgyMiwgMTAzODI2LCAxMDM4MzAsIDEwMzgzNCwgCisgICAgMTAzODM4LCAxMDM4NDIsIDEwMzg0NiwgMTAzODUwLCAxMDM4NTQsIDEwMzg1OCwgMTAzODYyLCAxMDM4NjYsIDEwMzg3MCwgCisgICAgMTAzODc0LCAxMDM4NzgsIDEwMzg4MiwgMTAzODg2LCAxMDM4OTAsIDEwMzg5NCwgMTAzODk4LCAxMDM5MDIsIDEwMzkwNiwgCisgICAgMTAzOTEwLCAxMDM5MTQsIDEwMzkxOCwgMTAzOTIyLCAxMDM5MjYsIDEwMzkzMCwgMTAzOTM0LCAxMDM5MzgsIDEwMzk0MiwgCisgICAgMTAzOTQ2LCAxMDM5NTAsIDEwMzk1NCwgMTAzOTU4LCAxMDM5NjIsIDEwMzk2NiwgMTAzOTcwLCAxMDM5NzQsIDEwMzk3OCwgCisgICAgMTAzOTgyLCAxMDM5ODYsIDEwMzk5MCwgMTAzOTk0LCAxMDM5OTgsIDEwNDAwMiwgMTA0MDA2LCAxMDQwMTAsIDEwNDAxNCwgCisgICAgMTA0MDE4LCAxMDQwMjIsIDEwNDAyNiwgMTA0MDMwLCAxMDQwMzQsIDEwNDAzOCwgMTA0MDQyLCAxMDQwNDYsIDEwNDA1MCwgCisgICAgMTA0MDU0LCAxMDQwNTgsIDEwNDA2MiwgMTA0MDY2LCAxMDQwNzAsIDEwNDA3NCwgMTA0MDc4LCAxMDQwODIsIDEwNDA4NiwgCisgICAgMTA0MDkwLCAxMDQwOTQsIDEwNDA5OCwgMTA0MTAyLCAxMDQxMDYsIDEwNDExMCwgMTA0MTE0LCAxMDQxMTgsIDEwNDEyMiwgCisgICAgMTA0MTI2LCAxMDQxMzAsIDEwNDEzNCwgMTA0MTM4LCAxMDQxNDIsIDEwNDE0NiwgMTA0MTUwLCAxMDQxNTQsIDEwNDE1OCwgCisgICAgMTA0MTYyLCAxMDQxNjYsIDEwNDE3MCwgMTA0MTc0LCAxMDQxNzgsIDEwNDE4MiwgMTA0MTg2LCAxMDQxOTAsIDEwNDE5NCwgCisgICAgMTA0MTk4LCAxMDQyMDIsIDEwNDIwNiwgMTA0MjEwLCAxMDQyMTQsIDEwNDIxOCwgMTA0MjIyLCAxMDQyMjYsIDEwNDIzMCwgCisgICAgMTA0MjM0LCAxMDQyMzgsIDEwNDI0MiwgMTA0MjQ2LCAxMDQyNTAsIDEwNDI1NCwgMTA0MjU4LCAxMDQyNjIsIDEwNDI2NiwgCisgICAgMTA0MjcwLCAxMDQyNzQsIDEwNDI3OCwgMTA0MjgyLCAxMDQyODYsIDEwNDI5MCwgMTA0Mjk0LCAxMDQyOTgsIDEwNDMwMiwgCisgICAgMTA0MzA2LCAxMDQzMTAsIDEwNDMxNCwgMTA0MzE4LCAxMDQzMjIsIDEwNDMyNiwgMTA0MzMwLCAxMDQzMzQsIDEwNDMzOCwgCisgICAgMTA0MzQyLCAxMDQzNDYsIDEwNDM1MCwgMTA0MzU0LCAxMDQzNTgsIDEwNDM2MiwgMTA0MzY2LCAxMDQzNzAsIDEwNDM3NCwgCisgICAgMTA0Mzc4LCAxMDQzODIsIDEwNDM4NiwgMTA0MzkwLCAxMDQzOTQsIDEwNDM5OCwgMTA0NDAyLCAxMDQ0MDYsIDEwNDQxMCwgCisgICAgMTA0NDE0LCAxMDQ0MTgsIDEwNDQyMiwgMTA0NDI2LCAxMDQ0MzAsIDEwNDQzNCwgMTA0NDM4LCAxMDQ0NDIsIDEwNDQ0NiwgCisgICAgMTA0NDUwLCAxMDQ0NTQsIDEwNDQ1OCwgMTA0NDYyLCAxMDQ0NjYsIDEwNDQ3MCwgMTA0NDc0LCAxMDQ0NzgsIDEwNDQ4MiwgCisgICAgMTA0NDg2LCAxMDQ0OTAsIDEwNDQ5NCwgMTA0NDk4LCAxMDQ1MDIsIDEwNDUwNiwgMTA0NTEwLCAxMDQ1MTQsIDEwNDUxOCwgCisgICAgMTA0NTIyLCAxMDQ1MjYsIDEwNDUzMCwgMTA0NTM0LCAxMDQ1MzgsIDEwNDU0MiwgMTA0NTQ2LCAxMDQ1NTAsIDEwNDU1NCwgCisgICAgMTA0NTU4LCAxMDQ1NjIsIDEwNDU2NiwgMTA0NTcwLCAxMDQ1NzQsIDEwNDU3OCwgMTA0NTgyLCAxMDQ1ODYsIDEwNDU5MCwgCisgICAgMTA0NTk0LCAxMDQ1OTgsIDEwNDYwMiwgMTA0NjA2LCAxMDQ2MTAsIDEwNDYxNCwgMTA0NjE4LCAxMDQ2MjIsIDEwNDYyNiwgCisgICAgMTA0NjMwLCAxMDQ2MzQsIDEwNDYzOCwgMTA0NjQyLCAxMDQ2NDYsIDEwNDY1MCwgMTA0NjU0LCAxMDQ2NTgsIDEwNDY2MiwgCisgICAgMTA0NjY2LCAxMDQ2NzAsIDEwNDY3NCwgMTA0Njc4LCAxMDQ2ODIsIDEwNDY4NiwgMTA0NjkwLCAxMDQ2OTQsIDEwNDY5OCwgCisgICAgMTA0NzAyLCAxMDQ3MDYsIDEwNDcxMCwgMTA0NzE0LCAxMDQ3MTgsIDEwNDcyMiwgMTA0NzI2LCAxMDQ3MzAsIDEwNDczNCwgCisgICAgMTA0NzM4LCAxMDQ3NDIsIDEwNDc0NiwgMTA0NzUwLCAxMDQ3NTQsIDEwNDc1OCwgMTA0NzYyLCAxMDQ3NjYsIDEwNDc3MCwgCisgICAgMTA0Nzc0LCAxMDQ3NzgsIDEwNDc4MiwgMTA0Nzg2LCAxMDQ3OTAsIDEwNDc5NCwgMTA0Nzk4LCAxMDQ4MDIsIDEwNDgwNiwgCisgICAgMTA0ODEwLCAxMDQ4MTQsIDEwNDgxOCwgMTA0ODIyLCAxMDQ4MjYsIDEwNDgzMCwgMTA0ODM0LCAxMDQ4MzgsIDEwNDg0MiwgCisgICAgMTA0ODQ2LCAxMDQ4NTAsIDEwNDg1NCwgMTA0ODU4LCAxMDQ4NjIsIDEwNDg2NiwgMTA0ODcwLCAxMDQ4NzQsIDEwNDg3OCwgCisgICAgMTA0ODgyLCAxMDQ4ODYsIDEwNDg5MCwgMTA0ODk0LCAxMDQ4OTgsIDEwNDkwMiwgMTA0OTA2LCAxMDQ5MTAsIDEwNDkxNCwgCisgICAgMTA0OTE4LCAxMDQ5MjIsIDEwNDkyNiwgMTA0OTMwLCAxMDQ5MzQsIDEwNDkzOCwgMTA0OTQyLCAxMDQ5NDYsIDEwNDk1MCwgCisgICAgMTA0OTU0LCAxMDQ5NTgsIDEwNDk2MiwgMTA0OTY2LCAxMDQ5NzAsIDEwNDk3NCwgMTA0OTc4LCAxMDQ5ODIsIDEwNDk4NiwgCisgICAgMTA0OTkwLCAxMDQ5OTQsIDEwNDk5OCwgMTA1MDAyLCAxMDUwMDYsIDEwNTAxMCwgMTA1MDE0LCAxMDUwMTgsIDEwNTAyMiwgCisgICAgMTA1MDI2LCAxMDUwMzAsIDEwNTAzNCwgMTA1MDM4LCAxMDUwNDIsIDEwNTA0NiwgMTA1MDUwLCAxMDUwNTQsIDEwNTA1OCwgCisgICAgMTA1MDYyLCAxMDUwNjYsIDEwNTA3MCwgMTA1MDc0LCAxMDUwNzgsIDEwNTA4MiwgMTA1MDg2LCAxMDUwOTAsIDEwNTA5NCwgCisgICAgMTA1MDk4LCAxMDUxMDIsIDEwNTEwNiwgMTA1MTEwLCAxMDUxMTQsIDEwNTExOCwgMTA1MTIyLCAxMDUxMjYsIDEwNTEzMCwgCisgICAgMTA1MTM0LCAxMDUxMzgsIDEwNTE0MiwgMTA1MTQ2LCAxMDUxNTAsIDEwNTE1NCwgMTA1MTU4LCAxMDUxNjIsIDEwNTE2NiwgCisgICAgMTA1MTcwLCAxMDUxNzQsIDEwNTE3OCwgMTA1MTgyLCAxMDUxODYsIDEwNTE5MCwgMTA1MTk0LCAxMDUxOTgsIDEwNTIwMiwgCisgICAgMTA1MjA2LCAxMDUyMTAsIDEwNTIxNCwgMTA1MjE4LCAxMDUyMjIsIDEwNTIyNiwgMTA1MjMwLCAxMDUyMzQsIDEwNTIzOCwgCisgICAgMTA1MjQyLCAxMDUyNDYsIDEwNTI1MCwgMTA1MjU0LCAxMDUyNTgsIDEwNTI2MiwgMTA1MjY2LCAxMDUyNzAsIDEwNTI3NCwgCisgICAgMTA1Mjc4LCAxMDUyODIsIDEwNTI4NiwgMTA1MjkwLCAxMDUyOTQsIDEwNTI5OCwgMTA1MzAyLCAxMDUzMDYsIDEwNTMxMCwgCisgICAgMTA1MzE0LCAxMDUzMTgsIDEwNTMyMiwgMTA1MzI2LCAxMDUzMzAsIDEwNTMzNCwgMTA1MzM4LCAxMDUzNDIsIDEwNTM0NiwgCisgICAgMTA1MzUwLCAxMDUzNTQsIDEwNTM1OCwgMTA1MzYyLCAxMDUzNjYsIDEwNTM3MCwgMTA1Mzc0LCAxMDUzNzgsIDEwNTM4MiwgCisgICAgMTA1Mzg2LCAxMDUzOTAsIDEwNTM5NCwgMTA1Mzk4LCAxMDU0MDIsIDEwNTQwNiwgMTA1NDEwLCAxMDU0MTQsIDEwNTQxOCwgCisgICAgMTA1NDIyLCAxMDU0MjYsIDEwNTQzMCwgMTA1NDM0LCAxMDU0MzgsIDEwNTQ0MiwgMTA1NDQ2LCAxMDU0NTAsIDEwNTQ1NCwgCisgICAgMTA1NDU4LCAxMDU0NjIsIDEwNTQ2NiwgMTA1NDcwLCAxMDU0NzQsIDEwNTQ3OCwgMTA1NDgyLCAxMDU0ODYsIDEwNTQ5MCwgCisgICAgMTA1NDk0LCAxMDU0OTgsIDEwNTUwMiwgMTA1NTA2LCAxMDU1MTAsIDEwNTUxNCwgMTA1NTE4LCAxMDU1MjIsIDEwNTUyNiwgCisgICAgMTA1NTMwLCAxMDU1MzQsIDEwNTUzOCwgMTA1NTQyLCAxMDU1NDYsIDEwNTU1MCwgMTA1NTU0LCAxMDU1NTgsIDEwNTU2MiwgCisgICAgMTA1NTY2LCAxMDU1NzAsIDEwNTU3NCwgMTA1NTc4LCAxMDU1ODIsIDEwNTU4NiwgMTA1NTkwLCAxMDU1OTQsIDEwNTU5OCwgCisgICAgMTA1NjAyLCAxMDU2MDYsIDEwNTYxMCwgMTA1NjE0LCAxMDU2MTgsIDEwNTYyMiwgMTA1NjI2LCAxMDU2MzAsIDEwNTYzNCwgCisgICAgMTA1NjM4LCAxMDU2NDIsIDEwNTY0NiwgMTA1NjUwLCAxMDU2NTQsIDEwNTY1OCwgMTA1NjYyLCAxMDU2NjYsIDEwNTY3MCwgCisgICAgMTA1Njc0LCAxMDU2NzgsIDEwNTY4MiwgMTA1Njg2LCAxMDU2OTAsIDEwNTY5NCwgMTA1Njk4LCAxMDU3MDIsIDEwNTcwNiwgCisgICAgMTA1NzEwLCAxMDU3MTQsIDEwNTcxOCwgMTA1NzIyLCAxMDU3MjYsIDEwNTczMCwgMTA1NzM0LCAxMDU3MzgsIDEwNTc0MiwgCisgICAgMTA1NzQ2LCAxMDU3NTAsIDEwNTc1NCwgMTA1NzU4LCAxMDU3NjIsIDEwNTc2NiwgMTA1NzcwLCAxMDU3NzQsIDEwNTc3OCwgCisgICAgMTA1NzgyLCAxMDU3ODYsIDEwNTc5MCwgMTA1Nzk0LCAxMDU3OTgsIDEwNTgwMiwgMTA1ODA2LCAxMDU4MTAsIDEwNTgxNCwgCisgICAgMTA1ODE4LCAxMDU4MjIsIDEwNTgyNiwgMTA1ODMwLCAxMDU4MzQsIDEwNTgzOCwgMTA1ODQyLCAxMDU4NDYsIDEwNTg1MCwgCisgICAgMTA1ODU0LCAxMDU4NTgsIDEwNTg2MiwgMTA1ODY2LCAxMDU4NzAsIDEwNTg3NCwgMTA1ODc4LCAxMDU4ODIsIDEwNTg4NiwgCisgICAgMTA1ODkwLCAxMDU4OTQsIDEwNTg5OCwgMTA1OTAyLCAxMDU5MDYsIDEwNTkxMCwgMTA1OTE0LCAxMDU5MTgsIDEwNTkyMiwgCisgICAgMTA1OTI2LCAxMDU5MzAsIDEwNTkzNCwgMTA1OTM4LCAxMDU5NDIsIDEwNTk0NiwgMTA1OTUwLCAxMDU5NTQsIDEwNTk1OCwgCisgICAgMTA1OTYyLCAxMDU5NjYsIDEwNTk3MCwgMTA1OTc0LCAxMDU5NzgsIDEwNTk4MiwgMTA1OTg2LCAxMDU5OTAsIDEwNTk5NCwgCisgICAgMTA1OTk4LCAxMDYwMDIsIDEwNjAwNiwgMTA2MDEwLCAxMDYwMTQsIDEwNjAxOCwgMTA2MDIyLCAxMDYwMjYsIDEwNjAzMCwgCisgICAgMTA2MDM0LCAxMDYwMzgsIDEwNjA0MiwgMTA2MDQ2LCAxMDYwNTAsIDEwNjA1NCwgMTA2MDU4LCAxMDYwNjIsIDEwNjA2NiwgCisgICAgMTA2MDcwLCAxMDYwNzQsIDEwNjA3OCwgMTA2MDgyLCAxMDYwODYsIDEwNjA5MCwgMTA2MDk0LCAxMDYwOTgsIDEwNjEwMiwgCisgICAgMTA2MTA2LCAxMDYxMTAsIDEwNjExNCwgMTA2MTE4LCAxMDYxMjIsIDEwNjEyNiwgMTA2MTMwLCAxMDYxMzQsIDEwNjEzOCwgCisgICAgMTA2MTQyLCAxMDYxNDYsIDEwNjE1MCwgMTA2MTU0LCAxMDYxNTgsIDEwNjE2MiwgMTA2MTY2LCAxMDYxNzAsIDEwNjE3NCwgCisgICAgMTA2MTc4LCAxMDYxODIsIDEwNjE4NiwgMTA2MTkwLCAxMDYxOTQsIDEwNjE5OCwgMTA2MjAyLCAxMDYyMDYsIDEwNjIxMCwgCisgICAgMTA2MjE0LCAxMDYyMTgsIDEwNjIyMiwgMTA2MjI2LCAxMDYyMzAsIDEwNjIzNCwgMTA2MjM4LCAxMDYyNDIsIDEwNjI0NiwgCisgICAgMTA2MjUwLCAxMDYyNTQsIDEwNjI1OCwgMTA2MjYyLCAxMDYyNjYsIDEwNjI3MCwgMTA2Mjc0LCAxMDYyNzgsIDEwNjI4MiwgCisgICAgMTA2Mjg2LCAxMDYyOTAsIDEwNjI5NCwgMTA2Mjk4LCAxMDYzMDIsIDEwNjMwNiwgMTA2MzEwLCAxMDYzMTQsIDEwNjMxOCwgCisgICAgMTA2MzIyLCAxMDYzMjYsIDEwNjMzMCwgMTA2MzM0LCAxMDYzMzgsIDEwNjM0MiwgMTA2MzQ2LCAxMDYzNTAsIDEwNjM1NCwgCisgICAgMTA2MzU4LCAxMDYzNjIsIDEwNjM2NiwgMTA2MzcwLCAxMDYzNzQsIDEwNjM3OCwgMTA2MzgyLCAxMDYzODYsIDEwNjM5MCwgCisgICAgMTA2Mzk0LCAxMDYzOTgsIDEwNjQwMiwgMTA2NDA2LCAxMDY0MTAsIDEwNjQxNCwgMTA2NDE4LCAxMDY0MjIsIDEwNjQyNiwgCisgICAgMTA2NDMwLCAxMDY0MzQsIDEwNjQzOCwgMTA2NDQyLCAxMDY0NDYsIDEwNjQ1MCwgMTA2NDU0LCAxMDY0NTgsIDEwNjQ2MiwgCisgICAgMTA2NDY2LCAxMDY0NzAsIDEwNjQ3NCwgMTA2NDc4LCAxMDY0ODIsIDEwNjQ4NiwgMTA2NDkwLCAxMDY0OTQsIDEwNjQ5OCwgCisgICAgMTA2NTAyLCAxMDY1MDYsIDEwNjUxMCwgMTA2NTE0LCAxMDY1MTgsIDEwNjUyMiwgMTA2NTI2LCAxMDY1MzAsIDEwNjUzNCwgCisgICAgMTA2NTM4LCAxMDY1NDIsIDEwNjU0NiwgMTA2NTUwLCAxMDY1NTQsIDEwNjU1OCwgMTA2NTYyLCAxMDY1NjYsIDEwNjU3MCwgCisgICAgMTA2NTc0LCAxMDY1NzgsIDEwNjU4MiwgMTA2NTg2LCAxMDY1OTAsIDEwNjU5NCwgMTA2NTk4LCAxMDY2MDIsIDEwNjYwNiwgCisgICAgMTA2NjEwLCAxMDY2MTQsIDEwNjYxOCwgMTA2NjIyLCAxMDY2MjYsIDEwNjYzMCwgMTA2NjM0LCAxMDY2MzgsIDEwNjY0MiwgCisgICAgMTA2NjQ2LCAxMDY2NTAsIDEwNjY1NCwgMTA2NjU4LCAxMDY2NjIsIDEwNjY2NiwgMTA2NjcwLCAxMDY2NzQsIDEwNjY3OCwgCisgICAgMTA2NjgyLCAxMDY2ODYsIDEwNjY5MCwgMTA2Njk0LCAxMDY2OTgsIDEwNjcwMiwgMTA2NzA2LCAxMDY3MTAsIDEwNjcxNCwgCisgICAgMTA2NzE4LCAxMDY3MjIsIDEwNjcyNiwgMTA2NzMwLCAxMDY3MzQsIDEwNjczOCwgMTA2NzQyLCAxMDY3NDYsIDEwNjc1MCwgCisgICAgMTA2NzU0LCAxMDY3NTgsIDEwNjc2MiwgMTA2NzY2LCAxMDY3NzAsIDEwNjc3NCwgMTA2Nzc4LCAxMDY3ODIsIDEwNjc4NiwgCisgICAgMTA2NzkwLCAxMDY3OTQsIDEwNjc5OCwgMTA2ODAyLCAxMDY4MDYsIDEwNjgxMCwgMTA2ODE0LCAxMDY4MTgsIDEwNjgyMiwgCisgICAgMTA2ODI2LCAxMDY4MzAsIDEwNjgzNCwgMTA2ODM4LCAxMDY4NDIsIDEwNjg0NiwgMTA2ODUwLCAxMDY4NTQsIDEwNjg1OCwgCisgICAgMTA2ODYyLCAxMDY4NjYsIDEwNjg3MCwgMTA2ODc0LCAxMDY4NzgsIDEwNjg4MiwgMTA2ODg2LCAxMDY4OTAsIDEwNjg5NCwgCisgICAgMTA2ODk4LCAxMDY5MDIsIDEwNjkwNiwgMTA2OTEwLCAxMDY5MTQsIDEwNjkxOCwgMTA2OTIyLCAxMDY5MjYsIDEwNjkzMCwgCisgICAgMTA2OTM0LCAxMDY5MzgsIDEwNjk0MiwgMTA2OTQ2LCAxMDY5NTAsIDEwNjk1NCwgMTA2OTU4LCAxMDY5NjIsIDEwNjk2NiwgCisgICAgMTA2OTcwLCAxMDY5NzQsIDEwNjk3OCwgMTA2OTgyLCAxMDY5ODYsIDEwNjk5MCwgMTA2OTk0LCAxMDY5OTgsIDEwNzAwMiwgCisgICAgMTA3MDA2LCAxMDcwMTAsIDEwNzAxNCwgMTA3MDE4LCAxMDcwMjIsIDEwNzAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTA3MDMwLCAxMDcwMzcsIDEwNzA0NCwgMTA3MDUzLCAxMDcwNjIsIDEwNzA2OSwgMTA3MDc0LCAxMDcwODEsIAorICAgIDEwNzA4OCwgMTA3MDk3LCAxMDcxMDgsIDEwNzExOSwgMTA3MTI0LCAxMDcxMzEsIDEwNzEzNiwgMTA3MTQxLCAxMDcxNDYsIAorICAgIDEwNzE1MSwgMTA3MTU2LCAxMDcxNjEsIDEwNzE2NiwgMTA3MTcxLCAxMDcxNzYsIDEwNzE4MSwgMTA3MTg2LCAxMDcxOTMsIAorICAgIDEwNzIwMCwgMTA3MjA1LCAxMDcyMTAsIDEwNzIxNSwgMTA3MjIwLCAxMDcyMjcsIDEwNzIzNCwgMTA3MjQyLCAxMDcyNDcsIAorICAgIDEwNzI1NCwgMTA3MjU5LCAxMDcyNjQsIDEwNzI2OSwgMTA3Mjc0LCAxMDcyNzksIDEwNzI4NiwgMTA3MjkzLCAxMDcyOTgsIAorICAgIDEwNzMwMywgMTA3MzA4LCAxMDczMTMsIDEwNzMxOCwgMTA3MzIzLCAxMDczMjgsIDEwNzMzMywgMTA3MzM4LCAxMDczNDMsIAorICAgIDEwNzM0OCwgMTA3MzUzLCAxMDczNTgsIDEwNzM2MywgMTA3MzY4LCAxMDczNzMsIDEwNzM3OCwgMTA3MzgzLCAxMDczODgsIAorICAgIDEwNzM5NSwgMTA3NDAwLCAxMDc0MDUsIDEwNzQxNCwgMTA3NDIxLCAxMDc0MjYsIDEwNzQzMSwgMTA3NDM2LCAxMDc0NDEsIAorICAgIDEwNzQ0NiwgMTA3NDUxLCAxMDc0NTYsIDEwNzQ2MSwgMTA3NDY2LCAxMDc0NzEsIDEwNzQ3NiwgMTA3NDgxLCAxMDc0ODYsIAorICAgIDEwNzQ5MSwgMTA3NDk2LCAxMDc1MDEsIDEwNzUwNiwgMTA3NTExLCAxMDc1MTYsIDEwNzUyMSwgMTA3NTI2LCAxMDc1MzIsIAorICAgIDEwNzU0MCwgMTA3NTQ2LCAxMDc1NTQsIDEwNzU2MiwgMTA3NTcwLCAxMDc1NzYsIDEwNzU4MiwgMTA3NTg4LCAxMDc1OTQsIAorICAgIDEwNzYwMCwgMTA3NjA4LCAxMDc2MTgsIDEwNzYyNiwgMTA3NjM0LCAxMDc2NDAsIDEwNzY0NiwgMTA3NjU0LCAxMDc2NjIsIAorICAgIDEwNzY2OCwgMTA3Njc2LCAxMDc2ODQsIDEwNzY5MiwgMTA3Njk4LCAxMDc3MDQsIDEwNzcxMCwgMTA3NzE2LCAxMDc3MjIsIAorICAgIDEwNzcyOCwgMTA3NzM2LCAxMDc3NDQsIDEwNzc1MCwgMTA3NzU2LCAxMDc3NjIsIDEwNzc2OCwgMTA3Nzc0LCAxMDc3ODIsIAorICAgIDEwNzc4OCwgMTA3Nzk0LCAxMDc4MDAsIDEwNzgwNiwgMTA3ODEyLCAxMDc4MTgsIDEwNzgyNiwgMTA3ODMyLCAxMDc4MzgsIAorICAgIDEwNzg0NCwgMTA3ODUwLCAxMDc4NTgsIDEwNzg2NiwgMTA3ODcyLCAxMDc4NzgsIDEwNzg4NCwgMTA3ODg5LCAxMDc4OTUsIAorICAgIDEwNzkwMSwgMTA3OTA4LCAxMDc5MTMsIDEwNzkxOCwgMTA3OTIzLCAxMDc5MjgsIDEwNzkzMywgMTA3OTM4LCAxMDc5NDMsIAorICAgIDEwNzk0OCwgMTA3OTUzLCAxMDc5NjIsIDEwNzk2OSwgMTA3OTc0LCAxMDc5NzksIDEwNzk4NCwgMTA3OTkxLCAxMDc5OTYsIAorICAgIDEwODAwMSwgMTA4MDA2LCAxMDgwMTMsIDEwODAxOCwgMTA4MDIzLCAxMDgwMjgsIDEwODAzMywgMTA4MDM4LCAxMDgwNDMsIAorICAgIDEwODA0OCwgMTA4MDUzLCAxMDgwNTgsIDEwODA2MywgMTA4MDY4LCAxMDgwNzUsIDEwODA4MCwgMTA4MDg3LCAxMDgwOTIsIAorICAgIDEwODA5NywgMTA4MTA0LCAxMDgxMDksIDEwODExNCwgMTA4MTE5LCAxMDgxMjQsIDEwODEyOSwgMTA4MTM0LCAxMDgxMzksIAorICAgIDEwODE0NCwgMTA4MTQ5LCAxMDgxNTQsIDEwODE1OSwgMTA4MTY0LCAxMDgxNjksIDEwODE3NCwgMTA4MTc5LCAxMDgxODQsIAorICAgIDEwODE4OSwgMTA4MTk0LCAxMDgxOTksIDEwODIwNiwgMTA4MjExLCAxMDgyMTYsIDEwODIyMSwgMTA4MjI2LCAxMDgyMzEsIAorICAgIDEwODIzNiwgMTA4MjQxLCAxMDgyNDYsIDEwODI1MSwgMTA4MjU2LCAxMDgyNjEsIDEwODI2NiwgMTA4MjcxLCAxMDgyNzgsIAorICAgIDEwODI4MywgMTA4Mjg4LCAxMDgyOTUsIDEwODMwMCwgMTA4MzA1LCAxMDgzMTAsIDEwODMxNSwgMTA4MzIwLCAxMDgzMjUsIAorICAgIDEwODMzMCwgMTA4MzM1LCAxMDgzNDAsIDEwODM0NSwgMTA4MzUyLCAxMDgzNTcsIDEwODM2MiwgMTA4MzY3LCAxMDgzNzIsIAorICAgIDEwODM3NywgMTA4Mzg0LCAxMDgzOTEsIDEwODM5NiwgMTA4NDAxLCAxMDg0MDYsIDEwODQxMSwgMTA4NDE2LCAxMDg0MjEsIAorICAgIDEwODQyNiwgMTA4NDMxLCAxMDg0MzYsIDEwODQ0MSwgMTA4NDQ2LCAxMDg0NTEsIDEwODQ1NiwgMTA4NDYxLCAxMDg0NjYsIAorICAgIDEwODQ3MSwgMTA4NDc2LCAxMDg0ODEsIDEwODQ4NiwgMTA4NDkxLCAxMDg0OTYsIDEwODUwMSwgMTA4NTA2LCAxMDg1MTEsIAorICAgIDEwODUxNiwgMTA4NTIxLCAxMDg1MjYsIDEwODUzMSwgMTA4NTM2LCAxMDg1NDEsIDEwODU0NiwgMTA4NTUxLCAxMDg1NTYsIAorICAgIDEwODU2MSwgMTA4NTY2LCAxMDg1NzEsIDEwODU3OCwgMTA4NTgzLCAxMDg1ODgsIDEwODU5MywgMTA4NTk4LCAxMDg2MDMsIAorICAgIDEwODYwOCwgMTA4NjEzLCAxMDg2MTgsIDEwODYyMywgMTA4NjI4LCAxMDg2MzMsIDEwODYzOCwgMTA4NjQzLCAxMDg2NDgsIAorICAgIDEwODY1MywgMTA4NjU4LCAxMDg2NjMsIDEwODY2OCwgMTA4NjczLCAxMDg2NzgsIDEwODY4MywgMTA4Njg4LCAxMDg2OTMsIAorICAgIDEwODY5OCwgMTA4NzAzLCAxMDg3MDgsIDEwODcxMywgMTA4NzE4LCAxMDg3MjMsIDEwODcyOCwgMTA4NzMzLCAxMDg3MzgsIAorICAgIDEwODc0MywgMTA4NzQ4LCAxMDg3NTMsIDEwODc1OCwgMTA4NzYzLCAxMDg3NjgsIDEwODc3MywgMTA4Nzc4LCAxMDg3ODMsIAorICAgIDEwODc4OCwgMTA4NzkzLCAxMDg3OTgsIDEwODgwMywgMTA4ODA4LCAxMDg4MTMsIDEwODgxOCwgMTA4ODIzLCAxMDg4MjgsIAorICAgIDEwODgzMywgMTA4ODM4LCAxMDg4NDMsIDEwODg0OCwgMTA4ODUzLCAxMDg4NTgsIDEwODg2MywgMTA4ODY4LCAxMDg4NzUsIAorICAgIDEwODg4MCwgMTA4ODg1LCAxMDg4OTAsIDEwODg5NSwgMTA4OTAwLCAxMDg5MDUsIDEwODkwOSwgMTA4OTE0LCAxMDg5MTksIAorICAgIDEwODkyNCwgMTA4OTI5LCAxMDg5MzQsIDEwODkzOSwgMTA4OTQ0LCAxMDg5NDksIDEwODk1NCwgMTA4OTU5LCAxMDg5NjQsIAorICAgIDEwODk2OSwgMTA4OTc0LCAxMDg5NzksIDEwODk4NiwgMTA4OTkxLCAxMDg5OTYsIDEwOTAwMiwgMTA5MDA3LCAxMDkwMTIsIAorICAgIDEwOTAxNywgMTA5MDIyLCAxMDkwMjcsIDEwOTAzMiwgMTA5MDM3LCAxMDkwNDIsIDEwOTA0NywgMTA5MDUyLCAxMDkwNTcsIAorICAgIDEwOTA2MiwgMTA5MDY3LCAxMDkwNzIsIDEwOTA3NywgMTA5MDgyLCAxMDkwODcsIDEwOTA5MiwgMTA5MDk3LCAxMDkxMDIsIAorICAgIDEwOTEwNywgMTA5MTEyLCAxMDkxMTcsIDEwOTEyMiwgMTA5MTI3LCAxMDkxMzIsIDEwOTEzNywgMTA5MTQyLCAxMDkxNDcsIAorICAgIDEwOTE1MiwgMTA5MTU3LCAxMDkxNjIsIDEwOTE2NywgMTA5MTcyLCAxMDkxNzcsIDEwOTE4MiwgMTA5MTg3LCAxMDkxOTIsIAorICAgIDEwOTE5NywgMTA5MjAyLCAxMDkyMDcsIDEwOTIxMiwgMTA5MjE3LCAxMDkyMjQsIDEwOTIyOSwgMTA5MjM0LCAxMDkyNDEsIAorICAgIDEwOTI0OCwgMTA5MjUzLCAxMDkyNTgsIDEwOTI2MywgMTA5MjY4LCAxMDkyNzMsIDEwOTI3OCwgMTA5MjgzLCAxMDkyODgsIAorICAgIDEwOTI5MywgMTA5Mjk4LCAxMDkzMDMsIDEwOTMwOCwgMTA5MzEzLCAxMDkzMTgsIDEwOTMyMywgMTA5MzI4LCAxMDkzMzMsIAorICAgIDEwOTMzOCwgMTA5MzQzLCAxMDkzNDgsIDEwOTM1MywgMTA5MzU4LCAxMDkzNjMsIDEwOTM2OCwgMTA5MzczLCAxMDkzODAsIAorICAgIDEwOTM4NSwgMTA5MzkwLCAxMDkzOTUsIDEwOTQwMCwgMTA5NDA1LCAxMDk0MTAsIDEwOTQxNSwgMTA5NDIwLCAxMDk0MjUsIAorICAgIDEwOTQzMCwgMTA5NDM1LCAxMDk0NDAsIDEwOTQ0NSwgMTA5NDUwLCAxMDk0NTUsIDEwOTQ2MCwgMTA5NDY1LCAxMDk0NzAsIAorICAgIDEwOTQ3NywgMTA5NDgyLCAxMDk0ODcsIDEwOTQ5MiwgMTA5NDk3LCAxMDk1MDIsIDEwOTUwNywgMTA5NTEyLCAxMDk1MTgsIAorICAgIDEwOTUyMywgMTA5NTI4LCAxMDk1MzMsIDEwOTUzOCwgMTA5NTQzLCAxMDk1NDgsIDEwOTU1MywgMTA5NTU4LCAxMDk1NjUsIAorICAgIDEwOTU3MiwgMTA5NTc3LCAxMDk1ODIsIDEwOTU4NiwgMTA5NTkxLCAxMDk1OTUsIDEwOTU5OSwgMTA5NjA0LCAxMDk2MTEsIAorICAgIDEwOTYxNiwgMTA5NjIxLCAxMDk2MzAsIDEwOTYzNSwgMTA5NjQwLCAxMDk2NDUsIDEwOTY1MCwgMTA5NjU3LCAxMDk2NjQsIAorICAgIDEwOTY2OSwgMTA5Njc0LCAxMDk2NzksIDEwOTY4NCwgMTA5NjkxLCAxMDk2OTYsIDEwOTcwMSwgMTA5NzA2LCAxMDk3MTEsIAorICAgIDEwOTcxNiwgMTA5NzIxLCAxMDk3MjYsIDEwOTczMSwgMTA5NzM2LCAxMDk3NDEsIDEwOTc0NiwgMTA5NzUxLCAxMDk3NTgsIAorICAgIDEwOTc2MiwgMTA5NzY3LCAxMDk3NzIsIDEwOTc3NywgMTA5NzgyLCAxMDk3ODYsIDEwOTc5MSwgMTA5Nzk2LCAxMDk4MDEsIAorICAgIDEwOTgwNiwgMTA5ODExLCAxMDk4MTYsIDEwOTgyMSwgMTA5ODI2LCAxMDk4MzEsIDEwOTgzNywgMTA5ODQzLCAxMDk4NDksIAorICAgIDEwOTg1NSwgMTA5ODYxLCAxMDk4NjcsIDEwOTg3MywgMTA5ODc5LCAxMDk4ODUsIDEwOTg5MSwgMTA5ODk3LCAxMDk5MDMsIAorICAgIDEwOTkwOCwgMTA5OTE0LCAxMDk5MjAsIDEwOTkyNiwgMTA5OTMyLCAxMDk5MzgsIDEwOTk0NCwgMTA5OTUwLCAxMDk5NTYsIAorICAgIDEwOTk2MiwgMTA5OTY4LCAxMDk5NzQsIDEwOTk3OSwgMTA5OTg1LCAxMDk5OTEsIDEwOTk5NywgMTEwMDAzLCAxMTAwMDksIAorICAgIDExMDAxNSwgMTEwMDIxLCAxMTAwMjcsIDExMDAzMywgMTEwMDM5LCAxMTAwNDUsIDExMDA1MSwgMTEwMDU3LCAxMTAwNjMsIAorICAgIDExMDA2OSwgMTEwMDc1LCAxMTAwODEsIDExMDA4NywgMTEwMDkzLCAxMTAwOTksIDExMDEwNCwgMTEwMTEwLCAxMTAxMTYsIAorICAgIDExMDEyMiwgMTEwMTI4LCAxMTAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDE0MCwgMTEwMTQzLCAxMTAxNDcsIDExMDE1MSwgMTEwMTU1LCAxMTAxNTgsIAorICAgIDExMDE2MiwgMTEwMTY3LCAxMTAxNzEsIDExMDE3NSwgMTEwMTc5LCAxMTAxODMsIDExMDE4NywgMTEwMTkyLCAxMTAxOTcsIAorICAgIDExMDIwMSwgMTEwMjA1LCAxMTAyMDgsIDExMDIxMiwgMTEwMjE3LCAxMTAyMjIsIDExMDIyNiwgMTEwMjMwLCAxMTAyMzQsIAorICAgIDExMDIzOCwgMTEwMjQyLCAxMTAyNDYsIDExMDI1MCwgMTEwMjU0LCAxMTAyNTgsIDExMDI2MiwgMTEwMjY1LCAxMTAyNjksIAorICAgIDExMDI3MywgMTEwMjc3LCAxMTAyODEsIDExMDI4NSwgMTEwMjg5LCAxMTAyOTUsIDExMDI5OCwgMTEwMzAyLCAxMTAzMDYsIAorICAgIDExMDMxMCwgMTEwMzE0LCAxMTAzMTgsIDExMDMyMiwgMTEwMzI2LCAxMTAzMzAsIDExMDMzNCwgMTEwMzM5LCAxMTAzNDQsIAorICAgIDExMDM1MCwgMTEwMzU0LCAxMTAzNTgsIDExMDM2MiwgMTEwMzY2LCAxMTAzNzAsIDExMDM3NCwgMTEwMzc5LCAxMTAzODIsIAorICAgIDExMDM4NiwgMTEwMzkwLCAxMTAzOTQsIDExMDM5OCwgMTEwNDA0LCAxMTA0MDgsIDExMDQxMiwgMTEwNDE2LCAxMTA0MjAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDQyNCwgMTEwNDI4LCAxMTA0MzIsIDExMDQzOCwgMTEwNDQ0LCAKKyAgICAxMTA0NDgsIDExMDQ1MywgMTEwNDU4LCAxMTA0NjMsIDExMDQ2OCwgMTEwNDcyLCAxMTA0NzcsIDExMDQ4MiwgMTEwNDg3LCAKKyAgICAxMTA0OTEsIDExMDQ5NiwgMTEwNTAxLCAxMTA1MDYsIDExMDUxMCwgMTEwNTE1LCAxMTA1MjAsIDExMDUyNSwgMTEwNTMwLCAKKyAgICAxMTA1MzUsIDExMDU0MCwgMTEwNTQ1LCAxMTA1NTAsIDExMDU1NCwgMTEwNTU5LCAxMTA1NjQsIDExMDU2OSwgMTEwNTc0LCAKKyAgICAxMTA1NzksIDExMDU4NCwgMTEwNTg5LCAxMTA1OTQsIDExMDU5OSwgMTEwNjA0LCAxMTA2MDksIDExMDYxNiwgMTEwNjIxLCAKKyAgICAxMTA2MjgsIDExMDYzMywgMTEwNjM4LCAxMTA2NDMsIDExMDY0OCwgMTEwNjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2NTgsIDExMDY2MiwgMTEwNjY4LCAxMTA2NzEsIDExMDY3NCwgMTEwNjc4LCAKKyAgICAxMTA2ODIsIDExMDY4NiwgMTEwNjkwLCAxMTA2OTQsIDExMDY5OCwgMTEwNzAyLCAxMTA3MDgsIDExMDcxNCwgMTEwNzIwLCAKKyAgICAxMTA3MjYsIDExMDczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTEwNzM4LCAxMTA3NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDc0OSwgMTEwNzU0LCAxMTA3NTksIAorICAgIDExMDc2NCwgMTEwNzcxLCAxMTA3NzgsIDExMDc4NSwgMTEwNzkyLCAxMTA3OTcsIDExMDgwMiwgMTEwODA3LCAxMTA4MTIsIAorICAgIDExMDgxOSwgMTEwODI0LCAxMTA4MzEsIDExMDgzOCwgMTEwODQzLCAxMTA4NDgsIDExMDg1MywgMTEwODYwLCAxMTA4NjUsIAorICAgIDExMDg3MCwgMTEwODc3LCAxMTA4ODQsIDExMDg4OSwgMTEwODk0LCAxMTA4OTksIDExMDkwNiwgMTEwOTEzLCAxMTA5MjAsIAorICAgIDExMDkyNSwgMTEwOTMwLCAxMTA5MzcsIDExMDk0NCwgMTEwOTUxLCAxMTA5NTgsIDExMDk2MywgMTEwOTY4LCAxMTA5NzMsIAorICAgIDExMDk4MCwgMTEwOTg1LCAxMTA5OTAsIDExMDk5NSwgMTExMDAyLCAxMTEwMTEsIDExMTAxOCwgMTExMDIzLCAxMTEwMjgsIAorICAgIDExMTAzMywgMTExMDM4LCAxMTEwNDMsIDExMTA0OCwgMTExMDU3LCAxMTEwNjQsIDExMTA2OSwgMTExMDc2LCAxMTEwODMsIAorICAgIDExMTA4OCwgMTExMDkzLCAxMTEwOTgsIDExMTEwNSwgMTExMTEwLCAxMTExMTcsIDExMTEyNCwgMTExMTI5LCAxMTExMzQsIAorICAgIDExMTEzOSwgMTExMTQ2LCAxMTExNTMsIDExMTE1OCwgMTExMTYzLCAxMTExNzAsIDExMTE3NywgMTExMTg0LCAxMTExODksIAorICAgIDExMTE5NCwgMTExMTk5LCAxMTEyMDQsIDExMTIxMSwgMTExMjIwLCAxMTEyMjksIDExMTIzNCwgMTExMjQxLCAxMTEyNTAsIAorICAgIDExMTI1NSwgMTExMjYwLCAxMTEyNjUsIDExMTI3MCwgMTExMjc3LCAxMTEyODQsIDExMTI5MSwgMTExMjk4LCAxMTEzMDMsIAorICAgIDExMTMwOCwgMTExMzEzLCAxMTEzMjAsIDExMTMyNywgMTExMzM0LCAxMTEzMzksIDExMTM0NCwgMTExMzUxLCAxMTEzNTYsIAorICAgIDExMTM2MywgMTExMzY4LCAxMTEzNzUsIDExMTM4MCwgMTExMzg3LCAxMTEzOTQsIDExMTM5OSwgMTExNDA0LCAxMTE0MDksIAorICAgIDExMTQxNCwgMTExNDE5LCAxMTE0MjQsIDExMTQyOSwgMTExNDM0LCAxMTE0MzksIDExMTQ0NiwgMTExNDUzLCAxMTE0NjAsIAorICAgIDExMTQ2NywgMTExNDc0LCAxMTE0ODMsIDExMTQ4OCwgMTExNDkzLCAxMTE1MDAsIDExMTUwNywgMTExNTEyLCAxMTE1MTksIAorICAgIDExMTUyNiwgMTExNTMzLCAxMTE1NDAsIDExMTU0NywgMTExNTU0LCAxMTE1NTksIDExMTU2NCwgMTExNTY5LCAxMTE1NzQsIAorICAgIDExMTU3OSwgMTExNTg4LCAxMTE1OTcsIDExMTYwNiwgMTExNjE1LCAxMTE2MjQsIDExMTYzMywgMTExNjQyLCAxMTE2NTEsIAorICAgIDExMTY1NiwgMTExNjY3LCAxMTE2NzgsIDExMTY4NywgMTExNjkyLCAxMTE2OTcsIDExMTcwMiwgMTExNzA3LCAxMTE3MTYsIAorICAgIDExMTcyMywgMTExNzMwLCAxMTE3MzcsIDExMTc0NCwgMTExNzUxLCAxMTE3NTgsIDExMTc2NywgMTExNzc2LCAxMTE3ODcsIAorICAgIDExMTc5NiwgMTExODA3LCAxMTE4MTYsIDExMTgyMywgMTExODMyLCAxMTE4NDMsIDExMTg1MiwgMTExODYxLCAxMTE4NzAsIAorICAgIDExMTg3OSwgMTExODg2LCAxMTE4OTMsIDExMTkwMCwgMTExOTA5LCAxMTE5MTgsIDExMTkyOSwgMTExOTM4LCAxMTE5NDcsIAorICAgIDExMTk1OCwgMTExOTYzLCAxMTE5NjgsIDExMTk3OSwgMTExOTg3LCAxMTE5OTYsIDExMjAwNSwgMTEyMDE0LCAxMTIwMjUsIAorICAgIDExMjAzNCwgMTEyMDQzLCAxMTIwNTQsIDExMjA2NSwgMTEyMDc2LCAxMTIwODcsIDExMjA5OCwgMTEyMTA5LCAxMTIxMTYsIAorICAgIDExMjEyMywgMTEyMTMwLCAxMTIxMzcsIDExMjE0OCwgMTEyMTU3LCAxMTIxNjQsIDExMjE3MSwgMTEyMTc4LCAxMTIxODksIAorICAgIDExMjIwMCwgMTEyMjExLCAxMTIyMjIsIDExMjIzMywgMTEyMjQ0LCAxMTIyNTUsIDExMjI2NiwgMTEyMjczLCAxMTIyODAsIAorICAgIDExMjI4OSwgMTEyMjk4LCAxMTIzMDUsIDExMjMxMiwgMTEyMzE5LCAxMTIzMjgsIDExMjMzNywgMTEyMzQ2LCAxMTIzNTMsIAorICAgIDExMjM2MiwgMTEyMzcxLCAxMTIzODAsIDExMjM4NywgMTEyMzk0LCAxMTIzOTksIDExMjQwNSwgMTEyNDEyLCAxMTI0MTksIAorICAgIDExMjQyNiwgMTEyNDMzLCAxMTI0NDAsIDExMjQ0NywgMTEyNDU2LCAxMTI0NjUsIDExMjQ3NCwgMTEyNDgzLCAxMTI0OTAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQ5OSwgMTEyNTA1LCAxMTI1MTAsIDExMjUxNSwgMTEyNTIyLCAKKyAgICAxMTI1MjgsIDExMjUzNCwgMTEyNTQwLCAxMTI1NDYsIDExMjU1MiwgMTEyNTU4LCAxMTI1NjQsIDExMjU2OCwgMTEyNTcyLCAKKyAgICAxMTI1NzgsIDExMjU4NCwgMTEyNTkwLCAxMTI1OTQsIDExMjU5OSwgMTEyNjA0LCAxMTI2MDgsIDExMjYxMiwgMTEyNjE1LCAKKyAgICAxMTI2MjEsIDExMjYyNywgMTEyNjMzLCAxMTI2MzksIDExMjY0NSwgMTEyNjUxLCAxMTI2NTcsIDExMjY2MywgMTEyNjY5LCAKKyAgICAxMTI2NzksIDExMjY4OSwgMTEyNjk1LCAxMTI3MDEsIDExMjcxMSwgMTEyNzIxLCAxMTI3MjcsIDAsIDAsIDExMjczMywgCisgICAgMTEyNzQxLCAxMTI3NDYsIDExMjc1MSwgMTEyNzU3LCAxMTI3NjMsIDExMjc2OSwgMTEyNzc1LCAxMTI3ODEsIDExMjc4NywgCisgICAgMTEyNzk0LCAxMTI4MDEsIDExMjgwNywgMTEyODEzLCAxMTI4MTksIDExMjgyNSwgMTEyODMxLCAxMTI4MzcsIDExMjg0MywgCisgICAgMTEyODQ5LCAxMTI4NTQsIDExMjg2MCwgMTEyODY2LCAxMTI4NzIsIDExMjg3OCwgMTEyODg0LCAxMTI4OTMsIDExMjg5OSwgCisgICAgMTEyOTA0LCAxMTI5MTIsIDExMjkxOSwgMTEyOTI2LCAxMTI5MzUsIDExMjk0NCwgMTEyOTUzLCAxMTI5NjIsIDExMjk3MSwgCisgICAgMTEyOTgwLCAxMTI5ODksIDExMjk5OCwgMTEzMDA4LCAxMTMwMTgsIDExMzAyNiwgMTEzMDM0LCAxMTMwNDMsIDExMzA1MiwgCisgICAgMTEzMDU4LCAxMTMwNjQsIDExMzA3MCwgMTEzMDc2LCAxMTMwODQsIDExMzA5MiwgMTEzMDk2LCAxMTMxMDIsIDExMzEwNywgCisgICAgMTEzMTEzLCAxMTMxMTksIDExMzEyNSwgMTEzMTMxLCAxMTMxMzcsIDExMzE0NiwgMTEzMTUxLCAxMTMxNTgsIDExMzE2MywgCisgICAgMTEzMTY4LCAxMTMxNzMsIDExMzE3OSwgMTEzMTg1LCAxMTMxOTEsIDExMzE5OCwgMTEzMjAzLCAxMTMyMDgsIDExMzIxMywgCisgICAgMTEzMjE4LCAxMTMyMjMsIDExMzIyOSwgMTEzMjM1LCAxMTMyNDEsIDExMzI0NywgMTEzMjUzLCAxMTMyNTksIDExMzI2NSwgCisgICAgMTEzMjcxLCAxMTMyNzYsIDExMzI4MSwgMTEzMjg2LCAxMTMyOTEsIDExMzI5NiwgMTEzMzAxLCAxMTMzMDYsIDExMzMxMSwgCisgICAgMTEzMzE3LCAxMTMzMjMsIDExMzMyOCwgMTEzMzMzLCAxMTMzMzgsIDExMzM0MywgMTEzMzQ4LCAxMTMzNTQsIDExMzM2MSwgCisgICAgMTEzMzY1LCAxMTMzNjksIDExMzM3MywgMTEzMzc3LCAxMTMzODEsIDExMzM4NSwgMTEzMzg5LCAxMTMzOTMsIDExMzQwMSwgCisgICAgMTEzNDExLCAxMTM0MTUsIDExMzQxOSwgMTEzNDI1LCAxMTM0MzEsIDExMzQzNywgMTEzNDQzLCAxMTM0NDksIDExMzQ1NSwgCisgICAgMTEzNDYxLCAxMTM0NjcsIDExMzQ3MywgMTEzNDc5LCAxMTM0ODUsIDExMzQ5MSwgMTEzNDk3LCAxMTM1MDMsIDExMzUwNywgCisgICAgMTEzNTExLCAxMTM1MTgsIDExMzUyNCwgMTEzNTMwLCAxMTM1MzYsIDExMzU0MSwgMTEzNTQ4LCAxMTM1NTMsIDExMzU1OSwgCisgICAgMTEzNTY1LCAxMTM1NzEsIDExMzU3NywgMTEzNTgyLCAxMTM1ODYsIDExMzU5MiwgMTEzNTk2LCAxMTM2MDAsIDExMzYwNCwgCisgICAgMTEzNjEwLCAxMTM2MTYsIDExMzYyMCwgMTEzNjI2LCAxMTM2MzIsIDExMzYzOCwgMTEzNjQ0LCAxMTM2NTAsIDExMzY1OCwgCisgICAgMTEzNjY2LCAxMTM2NzIsIDExMzY3OCwgMTEzNjg0LCAxMTM2OTAsIDExMzcwMiwgMTEzNzE0LCAxMTM3MjgsIDExMzc0MCwgCisgICAgMTEzNzUyLCAxMTM3NjYsIDExMzc4MCwgMTEzNzk0LCAxMTM3OTgsIDExMzgwNiwgMTEzODE0LCAxMTM4MTksIDExMzgyMywgCisgICAgMTEzODI3LCAxMTM4MzEsIDExMzgzNSwgMTEzODM5LCAxMTM4NDMsIDExMzg0NywgMTEzODUzLCAxMTM4NTksIDExMzg2NSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzODcxLCAxMTM4NzcsIDExMzg4MywgMTEzODg5LCAxMTM4OTUsIAorICAgIDExMzkwMSwgMTEzOTA3LCAxMTM5MTMsIDExMzkxOSwgMTEzOTI1LCAxMTM5MzEsIDExMzkzNywgMTEzOTQzLCAxMTM5NDksIAorICAgIDExMzk1NSwgMTEzOTYxLCAxMTM5NjcsIDExMzk3MywgMTEzOTc5LCAxMTM5ODUsIDExMzk5MSwgMTEzOTk3LCAxMTQwMDMsIAorICAgIDExNDAwOSwgMTE0MDE1LCAxMTQwMjEsIDExNDAyNywgMTE0MDMzLCAxMTQwMzksIDExNDA0NSwgMTE0MDUxLCAxMTQwNTcsIAorICAgIDExNDA2MywgMTE0MDY5LCAxMTQwNzUsIDExNDA4MSwgMTE0MDg3LCAxMTQwOTMsIDExNDA5OSwgMTE0MTA1LCAxMTQxMTEsIAorICAgIDExNDExNywgMTE0MTIzLCAxMTQxMjksIDExNDEzNSwgMTE0MTQxLCAxMTQxNDcsIDExNDE1MywgMTE0MTU5LCAxMTQxNjUsIAorICAgIDExNDE3MSwgMTE0MTc3LCAxMTQxODMsIDExNDE4OSwgMTE0MTk1LCAxMTQyMDEsIDExNDIwNywgMTE0MjEzLCAxMTQyMTksIAorICAgIDExNDIyNSwgMTE0MjMxLCAxMTQyMzcsIDExNDI0MywgMTE0MjQ5LCAxMTQyNTUsIDExNDI2MSwgMTE0MjY3LCAxMTQyNzIsIAorICAgIDExNDI3NywgMTE0MjgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQyODYsIDExNDI5MSwgMTE0Mjk4LCAKKyAgICAxMTQzMDUsIDExNDMxMiwgMTE0MzE5LCAxMTQzMjQsIDExNDMyOCwgMTE0MzM0LCAxMTQzMzgsIDExNDM0MiwgMTE0MzQ4LCAKKyAgICAxMTQzNTIsIDExNDM1NiwgMTE0MzYwLCAxMTQzNjYsIDExNDM3MywgMTE0Mzc3LCAxMTQzODEsIDExNDM4NSwgMTE0Mzg5LCAKKyAgICAxMTQzOTMsIDExNDM5NywgMTE0NDAzLCAxMTQ0MDcsIDExNDQxMSwgMTE0NDE1LCAxMTQ0MTksIDExNDQyMywgMTE0NDI3LCAKKyAgICAxMTQ0MzEsIDExNDQzNSwgMTE0NDM5LCAxMTQ0NDMsIDExNDQ0NywgMTE0NDUxLCAxMTQ0NTYsIDExNDQ2MCwgMTE0NDY0LCAKKyAgICAxMTQ0NjgsIDExNDQ3MiwgMTE0NDc2LCAxMTQ0ODAsIDExNDQ4NCwgMTE0NDg4LCAxMTQ0OTIsIDExNDQ5OSwgMTE0NTAzLCAKKyAgICAxMTQ1MTEsIDExNDUxNSwgMTE0NTE5LCAxMTQ1MjMsIDExNDUyNywgMTE0NTMxLCAxMTQ1MzUsIDExNDUzOSwgMTE0NTQ2LCAKKyAgICAxMTQ1NTAsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcyLCAxMTQ1NzYsIDExNDU4MiwgMTE0NTg2LCAKKyAgICAxMTQ1OTAsIDExNDU5NCwgMTE0NTk4LCAxMTQ2MDIsIDExNDYwNiwgMTE0NjEwLCAxMTQ2MTQsIDExNDYxOCwgMTE0NjIyLCAKKyAgICAxMTQ2MjYsIDExNDYzMCwgMTE0NjM0LCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAxMTQ2NTAsIDExNDY1NCwgMTE0NjU4LCAKKyAgICAxMTQ2NjYsIDExNDY3MCwgMTE0Njc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ2NzgsIDExNDY4NiwgCisgICAgMTE0Njk0LCAxMTQ3MDIsIDExNDcxMCwgMTE0NzE4LCAxMTQ3MjYsIDExNDczNCwgMTE0NzQyLCAxMTQ3NTAsIDExNDc1OCwgCisgICAgMTE0NzY2LCAxMTQ3NzQsIDExNDc4MiwgMTE0NzkwLCAxMTQ3OTgsIDExNDgwNiwgMTE0ODE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ4MjIsIDExNDgyNiwgMTE0ODMxLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ1LCAKKyAgICAxMTQ4NTAsIDExNDg1NSwgMTE0ODYwLCAxMTQ4NjQsIDExNDg2OSwgMTE0ODc0LCAxMTQ4NzgsIDExNDg4MiwgMTE0ODg3LCAKKyAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDUsIDExNDkxMCwgMTE0OTE1LCAxMTQ5MTksIDExNDkyNCwgMTE0OTI5LCAKKyAgICAxMTQ5MzQsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDgsIDExNDk1MywgMTE0OTU4LCAxMTQ5NjMsIDExNDk2NywgMTE0OTcyLCAKKyAgICAxMTQ5NzcsIDExNDk4MiwgMTE0OTg2LCAxMTQ5OTEsIDExNDk5NiwgMTE1MDAwLCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKKyAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI3LCAxMTUwMzIsIDExNTAzNywgMTE1MDQxLCAxMTUwNDYsIDExNTA1MSwgMTE1MDU2LCAKKyAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcwLCAxMTUwNzUsIDExNTA4MCwgMTE1MDg1LCAxMTUwODksIDExNTA5NCwgMTE1MDk5LCAKKyAgICAxMTUxMDQsIDExNTEwOCwgMTE1MTEzLCAxMTUxMTgsIDExNTEyMiwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKKyAgICAxMTUxNDUsIDExNTE0OSwgMTE1MTU0LCAxMTUxNTksIDExNTE2MywgMTE1MTY4LCAxMTUxNzMsIDExNTE3OCwgMTE1MTgzLCAKKyAgICAxMTUxODgsIDExNTE5MiwgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTYsIDAsIDExNTIyMSwgCisgICAgMTE1MjI1LCAxMTUyMzAsIDExNTIzNSwgMTE1MjM5LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCisgICAgMTE1MjY2LCAxMTUyNzEsIDExNTI3NiwgMTE1MjgwLCAxMTUyODUsIDExNTI5MCwgMTE1Mjk1LCAxMTUzMDAsIDExNTMwNSwgCisgICAgMTE1MzEwLCAxMTUzMTYsIDExNTMyMiwgMTE1MzI4LCAxMTUzMzMsIDExNTMzOSwgMTE1MzQ1LCAxMTUzNTEsIDExNTM1NiwgCisgICAgMTE1MzYyLCAxMTUzNjgsIDExNTM3MywgMTE1Mzc4LCAxMTUzODQsIDExNTM4OSwgMTE1Mzk1LCAxMTU0MDEsIDExNTQwNiwgCisgICAgMTE1NDEyLCAxMTU0MTgsIDExNTQyMywgMTE1NDI5LCAxMTU0MzUsIDExNTQ0MSwgMTE1NDQ3LCAxMTU0NTMsIDExNTQ1OCwgCisgICAgMTE1NDY0LCAxMTU0NzAsIDExNTQ3NiwgMTE1NDgxLCAxMTU0ODcsIDExNTQ5MywgMTE1NDk5LCAxMTU1MDQsIDExNTUxMCwgCisgICAgMTE1NTE2LCAxMTU1MjEsIDExNTUyNiwgMTE1NTMyLCAxMTU1MzcsIDExNTU0MywgMTE1NTQ5LCAxMTU1NTQsIDExNTU2MCwgCisgICAgMTE1NTY2LCAxMTU1NzEsIDExNTU3NywgMTE1NTgzLCAxMTU1ODksIDExNTU5NSwgMTE1NjAxLCAwLCAxMTU2MDUsIAorICAgIDExNTYxMCwgMCwgMCwgMTE1NjE1LCAwLCAwLCAxMTU2MjAsIDExNTYyNSwgMCwgMCwgMTE1NjMwLCAxMTU2MzUsIDExNTYzOSwgCisgICAgMTE1NjQ0LCAwLCAxMTU2NDksIDExNTY1NCwgMTE1NjU5LCAxMTU2NjMsIDExNTY2OCwgMTE1NjczLCAxMTU2NzgsIAorICAgIDExNTY4MywgMTE1Njg4LCAxMTU2OTIsIDExNTY5NywgMTE1NzAyLCAwLCAxMTU3MDcsIDAsIDExNTcxMiwgMTE1NzE3LCAKKyAgICAxMTU3MjEsIDExNTcyNiwgMTE1NzMxLCAxMTU3MzUsIDExNTczOSwgMCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCisgICAgMTE1NzU4LCAxMTU3NjMsIDExNTc2OCwgMTE1NzcyLCAxMTU3NzcsIDExNTc4MiwgMTE1Nzg3LCAxMTU3OTIsIDExNTc5NywgCisgICAgMTE1ODAyLCAxMTU4MDgsIDExNTgxNCwgMTE1ODIwLCAxMTU4MjUsIDExNTgzMSwgMTE1ODM3LCAxMTU4NDMsIDExNTg0OCwgCisgICAgMTE1ODU0LCAxMTU4NjAsIDExNTg2NSwgMTE1ODcwLCAxMTU4NzYsIDExNTg4MSwgMTE1ODg3LCAxMTU4OTMsIDExNTg5OCwgCisgICAgMTE1OTA0LCAxMTU5MTAsIDExNTkxNSwgMTE1OTIxLCAxMTU5MjcsIDExNTkzMywgMTE1OTM5LCAxMTU5NDUsIDExNTk1MCwgCisgICAgMTE1OTU2LCAxMTU5NjIsIDExNTk2OCwgMTE1OTczLCAxMTU5NzksIDExNTk4NSwgMTE1OTkxLCAxMTU5OTYsIDExNjAwMiwgCisgICAgMTE2MDA4LCAxMTYwMTMsIDExNjAxOCwgMTE2MDI0LCAxMTYwMjksIDExNjAzNSwgMTE2MDQxLCAxMTYwNDYsIDExNjA1MiwgCisgICAgMTE2MDU4LCAxMTYwNjMsIDExNjA2OSwgMTE2MDc1LCAxMTYwODEsIDExNjA4NywgMTE2MDkzLCAxMTYwOTcsIDAsIAorICAgIDExNjEwMiwgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMCwgMCwgMTE2MTIxLCAxMTYxMjYsIDExNjEzMSwgMTE2MTM1LCAKKyAgICAxMTYxMzksIDExNjE0NCwgMTE2MTQ4LCAxMTYxNTMsIDAsIDExNjE1OCwgMTE2MTYzLCAxMTYxNjgsIDExNjE3MiwgCisgICAgMTE2MTc3LCAxMTYxODIsIDExNjE4NywgMCwgMTE2MTkyLCAxMTYxOTYsIDExNjIwMSwgMTE2MjA2LCAxMTYyMTEsIAorICAgIDExNjIxNSwgMTE2MjIwLCAxMTYyMjUsIDExNjIzMCwgMTE2MjM0LCAxMTYyMzksIDExNjI0NCwgMTE2MjQ4LCAxMTYyNTIsIAorICAgIDExNjI1NywgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc1LCAxMTYyODAsIDExNjI4NSwgMTE2Mjg5LCAxMTYyOTQsIAorICAgIDExNjI5OSwgMTE2MzA0LCAxMTYzMDksIDExNjMxNCwgMTE2MzE4LCAwLCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAKKyAgICAxMTYzMzcsIDAsIDExNjM0MiwgMTE2MzQ2LCAxMTYzNTEsIDExNjM1NiwgMTE2MzYwLCAwLCAxMTYzNjQsIDAsIDAsIDAsIAorICAgIDExNjM2OCwgMTE2MzczLCAxMTYzNzgsIDExNjM4MiwgMTE2Mzg3LCAxMTYzOTIsIDExNjM5NywgMCwgMTE2NDAyLCAKKyAgICAxMTY0MDYsIDExNjQxMSwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNSwgMTE2NDMwLCAxMTY0MzUsIDExNjQ0MCwgMTE2NDQ0LCAKKyAgICAxMTY0NDksIDExNjQ1NCwgMTE2NDU4LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg1LCAKKyAgICAxMTY0OTAsIDExNjQ5NSwgMTE2NDk5LCAxMTY1MDQsIDExNjUwOSwgMTE2NTE0LCAxMTY1MTksIDExNjUyNCwgMTE2NTI5LCAKKyAgICAxMTY1MzUsIDExNjU0MSwgMTE2NTQ3LCAxMTY1NTIsIDExNjU1OCwgMTE2NTY0LCAxMTY1NzAsIDExNjU3NSwgMTE2NTgxLCAKKyAgICAxMTY1ODcsIDExNjU5MiwgMTE2NTk3LCAxMTY2MDMsIDExNjYwOCwgMTE2NjE0LCAxMTY2MjAsIDExNjYyNSwgMTE2NjMxLCAKKyAgICAxMTY2MzcsIDExNjY0MiwgMTE2NjQ4LCAxMTY2NTQsIDExNjY2MCwgMTE2NjY2LCAxMTY2NzIsIDExNjY3NywgMTE2NjgzLCAKKyAgICAxMTY2ODksIDExNjY5NSwgMTE2NzAwLCAxMTY3MDYsIDExNjcxMiwgMTE2NzE4LCAxMTY3MjMsIDExNjcyOSwgMTE2NzM1LCAKKyAgICAxMTY3NDAsIDExNjc0NSwgMTE2NzUxLCAxMTY3NTYsIDExNjc2MiwgMTE2NzY4LCAxMTY3NzMsIDExNjc3OSwgMTE2Nzg1LCAKKyAgICAxMTY3OTAsIDExNjc5NiwgMTE2ODAyLCAxMTY4MDgsIDExNjgxNCwgMTE2ODIwLCAxMTY4MjQsIDExNjgyOSwgMTE2ODM0LCAKKyAgICAxMTY4MzksIDExNjg0MywgMTE2ODQ4LCAxMTY4NTMsIDExNjg1OCwgMTE2ODYyLCAxMTY4NjcsIDExNjg3MiwgMTE2ODc2LCAKKyAgICAxMTY4ODAsIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTAzLCAxMTY5MDgsIDExNjkxMywgMTE2OTE3LCAKKyAgICAxMTY5MjIsIDExNjkyNywgMTE2OTMyLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ2LCAxMTY5NTEsIDExNjk1NiwgMTE2OTYxLCAKKyAgICAxMTY5NjUsIDExNjk3MCwgMTE2OTc1LCAxMTY5ODAsIDExNjk4NCwgMTE2OTg5LCAxMTY5OTQsIDExNjk5OCwgMTE3MDAyLCAKKyAgICAxMTcwMDcsIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNSwgMTE3MDMwLCAxMTcwMzUsIDExNzAzOSwgMTE3MDQ0LCAKKyAgICAxMTcwNDksIDExNzA1NCwgMTE3MDU5LCAxMTcwNjQsIDExNzA2OSwgMTE3MDc1LCAxMTcwODEsIDExNzA4NywgMTE3MDkyLCAKKyAgICAxMTcwOTgsIDExNzEwNCwgMTE3MTEwLCAxMTcxMTUsIDExNzEyMSwgMTE3MTI3LCAxMTcxMzIsIDExNzEzNywgMTE3MTQzLCAKKyAgICAxMTcxNDgsIDExNzE1NCwgMTE3MTYwLCAxMTcxNjUsIDExNzE3MSwgMTE3MTc3LCAxMTcxODIsIDExNzE4OCwgMTE3MTk0LCAKKyAgICAxMTcyMDAsIDExNzIwNiwgMTE3MjEyLCAxMTcyMTcsIDExNzIyMywgMTE3MjI5LCAxMTcyMzUsIDExNzI0MCwgMTE3MjQ2LCAKKyAgICAxMTcyNTIsIDExNzI1OCwgMTE3MjYzLCAxMTcyNjksIDExNzI3NSwgMTE3MjgwLCAxMTcyODUsIDExNzI5MSwgMTE3Mjk2LCAKKyAgICAxMTczMDIsIDExNzMwOCwgMTE3MzEzLCAxMTczMTksIDExNzMyNSwgMTE3MzMwLCAxMTczMzYsIDExNzM0MiwgMTE3MzQ4LCAKKyAgICAxMTczNTQsIDExNzM2MCwgMTE3MzY1LCAxMTczNzEsIDExNzM3NywgMTE3MzgzLCAxMTczODgsIDExNzM5NCwgMTE3NDAwLCAKKyAgICAxMTc0MDYsIDExNzQxMSwgMTE3NDE3LCAxMTc0MjMsIDExNzQyOCwgMTE3NDMzLCAxMTc0MzksIDExNzQ0NCwgMTE3NDUwLCAKKyAgICAxMTc0NTYsIDExNzQ2MSwgMTE3NDY3LCAxMTc0NzMsIDExNzQ3OCwgMTE3NDg0LCAxMTc0OTAsIDExNzQ5NiwgMTE3NTAyLCAKKyAgICAxMTc1MDgsIDExNzUxMywgMTE3NTE5LCAxMTc1MjUsIDExNzUzMSwgMTE3NTM2LCAxMTc1NDIsIDExNzU0OCwgMTE3NTU0LCAKKyAgICAxMTc1NTksIDExNzU2NSwgMTE3NTcxLCAxMTc1NzYsIDExNzU4MSwgMTE3NTg3LCAxMTc1OTIsIDExNzU5OCwgMTE3NjA0LCAKKyAgICAxMTc2MDksIDExNzYxNSwgMTE3NjIxLCAxMTc2MjYsIDExNzYzMiwgMTE3NjM4LCAxMTc2NDQsIDExNzY1MCwgMTE3NjU2LCAKKyAgICAxMTc2NjIsIDExNzY2OSwgMTE3Njc2LCAxMTc2ODMsIDExNzY4OSwgMTE3Njk2LCAxMTc3MDMsIDExNzcxMCwgMTE3NzE2LCAKKyAgICAxMTc3MjMsIDExNzczMCwgMTE3NzM2LCAxMTc3NDIsIDExNzc0OSwgMTE3NzU1LCAxMTc3NjIsIDExNzc2OSwgMTE3Nzc1LCAKKyAgICAxMTc3ODIsIDExNzc4OSwgMTE3Nzk1LCAxMTc4MDIsIDExNzgwOSwgMTE3ODE2LCAxMTc4MjMsIDExNzgzMCwgMTE3ODM2LCAKKyAgICAxMTc4NDMsIDExNzg1MCwgMTE3ODU3LCAxMTc4NjMsIDExNzg3MCwgMTE3ODc3LCAxMTc4ODQsIDExNzg5MCwgMTE3ODk3LCAKKyAgICAxMTc5MDQsIDExNzkxMCwgMTE3OTE2LCAxMTc5MjMsIDExNzkyOSwgMTE3OTM2LCAxMTc5NDMsIDExNzk0OSwgMTE3OTU2LCAKKyAgICAxMTc5NjMsIDExNzk2OSwgMTE3OTc2LCAxMTc5ODMsIDExNzk5MCwgMTE3OTk3LCAxMTgwMDQsIDExODAwOSwgMTE4MDE1LCAKKyAgICAxMTgwMjEsIDExODAyNywgMTE4MDMyLCAxMTgwMzgsIDExODA0NCwgMTE4MDUwLCAxMTgwNTUsIDExODA2MSwgMTE4MDY3LCAKKyAgICAxMTgwNzIsIDExODA3NywgMTE4MDgzLCAxMTgwODgsIDExODA5NCwgMTE4MTAwLCAxMTgxMDUsIDExODExMSwgMTE4MTE3LCAKKyAgICAxMTgxMjIsIDExODEyOCwgMTE4MTM0LCAxMTgxNDAsIDExODE0NiwgMTE4MTUyLCAxMTgxNTcsIDExODE2MywgMTE4MTY5LCAKKyAgICAxMTgxNzUsIDExODE4MCwgMTE4MTg2LCAxMTgxOTIsIDExODE5OCwgMTE4MjAzLCAxMTgyMDksIDExODIxNSwgMTE4MjIwLCAKKyAgICAxMTgyMjUsIDExODIzMSwgMTE4MjM2LCAxMTgyNDIsIDExODI0OCwgMTE4MjUzLCAxMTgyNTksIDExODI2NSwgMTE4MjcwLCAKKyAgICAxMTgyNzYsIDExODI4MiwgMTE4Mjg4LCAxMTgyOTQsIDExODMwMCwgMTE4MzA2LCAwLCAwLCAxMTgzMTMsIDExODMxOCwgCisgICAgMTE4MzIzLCAxMTgzMjgsIDExODMzMywgMTE4MzM4LCAxMTgzNDMsIDExODM0OCwgMTE4MzUzLCAxMTgzNTgsIDExODM2MywgCisgICAgMTE4MzY4LCAxMTgzNzMsIDExODM3OCwgMTE4MzgzLCAxMTgzODgsIDExODM5MywgMTE4Mzk4LCAxMTg0MDQsIDExODQwOSwgCisgICAgMTE4NDE0LCAxMTg0MTksIDExODQyNCwgMTE4NDI5LCAxMTg0MzQsIDExODQzOSwgMTE4NDQzLCAxMTg0NDgsIDExODQ1MywgCisgICAgMTE4NDU4LCAxMTg0NjMsIDExODQ2OCwgMTE4NDczLCAxMTg0NzgsIDExODQ4MywgMTE4NDg4LCAxMTg0OTMsIDExODQ5OCwgCisgICAgMTE4NTAzLCAxMTg1MDgsIDExODUxMywgMTE4NTE4LCAxMTg1MjMsIDExODUyOCwgMTE4NTM0LCAxMTg1MzksIDExODU0NCwgCisgICAgMTE4NTQ5LCAxMTg1NTQsIDExODU1OSwgMTE4NTY0LCAxMTg1NjksIDExODU3NSwgMTE4NTgwLCAxMTg1ODUsIDExODU5MCwgCisgICAgMTE4NTk1LCAxMTg2MDAsIDExODYwNSwgMTE4NjEwLCAxMTg2MTUsIDExODYyMCwgMTE4NjI1LCAxMTg2MzAsIDExODYzNSwgCisgICAgMTE4NjQwLCAxMTg2NDUsIDExODY1MCwgMTE4NjU1LCAxMTg2NjAsIDExODY2NSwgMTE4NjcwLCAxMTg2NzUsIDExODY4MCwgCisgICAgMTE4Njg1LCAxMTg2OTAsIDExODY5NiwgMTE4NzAxLCAxMTg3MDYsIDExODcxMSwgMTE4NzE2LCAxMTg3MjEsIDExODcyNiwgCisgICAgMTE4NzMxLCAxMTg3MzUsIDExODc0MCwgMTE4NzQ1LCAxMTg3NTAsIDExODc1NSwgMTE4NzYwLCAxMTg3NjUsIDExODc3MCwgCisgICAgMTE4Nzc1LCAxMTg3ODAsIDExODc4NSwgMTE4NzkwLCAxMTg3OTUsIDExODgwMCwgMTE4ODA1LCAxMTg4MTAsIDExODgxNSwgCisgICAgMTE4ODIwLCAxMTg4MjYsIDExODgzMSwgMTE4ODM2LCAxMTg4NDEsIDExODg0NiwgMTE4ODUxLCAxMTg4NTYsIDExODg2MSwgCisgICAgMTE4ODY3LCAxMTg4NzIsIDExODg3NywgMTE4ODgyLCAxMTg4ODcsIDExODg5MiwgMTE4ODk3LCAxMTg5MDMsIDExODkwOSwgCisgICAgMTE4OTE1LCAxMTg5MjEsIDExODkyNywgMTE4OTMzLCAxMTg5MzksIDExODk0NSwgMTE4OTUxLCAxMTg5NTcsIDExODk2MywgCisgICAgMTE4OTY5LCAxMTg5NzUsIDExODk4MSwgMTE4OTg3LCAxMTg5OTMsIDExODk5OSwgMTE5MDA2LCAxMTkwMTIsIDExOTAxOCwgCisgICAgMTE5MDI0LCAxMTkwMzAsIDExOTAzNiwgMTE5MDQyLCAxMTkwNDgsIDExOTA1MywgMTE5MDU5LCAxMTkwNjUsIDExOTA3MSwgCisgICAgMTE5MDc3LCAxMTkwODMsIDExOTA4OSwgMTE5MDk1LCAxMTkxMDEsIDExOTEwNywgMTE5MTEzLCAxMTkxMTksIDExOTEyNSwgCisgICAgMTE5MTMxLCAxMTkxMzcsIDExOTE0MywgMTE5MTQ5LCAxMTkxNTUsIDExOTE2MiwgMTE5MTY4LCAxMTkxNzQsIDExOTE4MCwgCisgICAgMTE5MTg2LCAxMTkxOTIsIDExOTE5OCwgMTE5MjA0LCAxMTkyMTEsIDExOTIxNywgMTE5MjIzLCAxMTkyMjksIDExOTIzNSwgCisgICAgMTE5MjQxLCAxMTkyNDcsIDExOTI1MywgMTE5MjU5LCAxMTkyNjUsIDExOTI3MSwgMTE5Mjc3LCAxMTkyODMsIDExOTI4OSwgCisgICAgMTE5Mjk1LCAxMTkzMDEsIDExOTMwNywgMTE5MzEzLCAxMTkzMTksIDExOTMyNSwgMTE5MzMxLCAxMTkzMzcsIDExOTM0MywgCisgICAgMTE5MzQ5LCAxMTkzNTYsIDExOTM2MiwgMTE5MzY4LCAxMTkzNzQsIDExOTM4MCwgMTE5Mzg2LCAxMTkzOTIsIDExOTM5OCwgCisgICAgMTE5NDAzLCAxMTk0MDksIDExOTQxNSwgMTE5NDIxLCAxMTk0MjcsIDExOTQzMywgMTE5NDM5LCAxMTk0NDUsIDExOTQ1MSwgCisgICAgMTE5NDU3LCAxMTk0NjMsIDExOTQ2OSwgMTE5NDc1LCAxMTk0ODEsIDExOTQ4NywgMTE5NDkzLCAxMTk0OTksIDExOTUwNSwgCisgICAgMTE5NTEyLCAxMTk1MTgsIDExOTUyNCwgMTE5NTMwLCAxMTk1MzYsIDExOTU0MiwgMTE5NTQ4LCAxMTk1NTQsIDExOTU2MSwgCisgICAgMTE5NTY3LCAxMTk1NzMsIDExOTU3OSwgMTE5NTg1LCAxMTk1OTEsIDExOTU5NywgMTE5NjA0LCAxMTk2MTEsIDExOTYxOCwgCisgICAgMTE5NjI1LCAxMTk2MzIsIDExOTYzOSwgMTE5NjQ2LCAxMTk2NTMsIDExOTY2MCwgMTE5NjY3LCAxMTk2NzQsIDExOTY4MSwgCisgICAgMTE5Njg4LCAxMTk2OTUsIDExOTcwMiwgMTE5NzA5LCAxMTk3MTYsIDExOTcyNCwgMTE5NzMxLCAxMTk3MzgsIDExOTc0NSwgCisgICAgMTE5NzUyLCAxMTk3NTksIDExOTc2NiwgMTE5NzczLCAxMTk3NzksIDExOTc4NiwgMTE5NzkzLCAxMTk4MDAsIDExOTgwNywgCisgICAgMTE5ODE0LCAxMTk4MjEsIDExOTgyOCwgMTE5ODM1LCAxMTk4NDIsIDExOTg0OSwgMTE5ODU2LCAxMTk4NjMsIDExOTg3MCwgCisgICAgMTE5ODc3LCAxMTk4ODQsIDExOTg5MSwgMTE5ODk4LCAxMTk5MDYsIDExOTkxMywgMTE5OTIwLCAxMTk5MjcsIDExOTkzNCwgCisgICAgMTE5OTQxLCAxMTk5NDgsIDExOTk1NSwgMTE5OTYzLCAxMTk5NzAsIDExOTk3NywgMTE5OTg0LCAxMTk5OTEsIDExOTk5OCwgCisgICAgMTIwMDA1LCAxMjAwMTAsIDAsIDAsIDEyMDAxNSwgMTIwMDIwLCAxMjAwMjQsIDEyMDAyOCwgMTIwMDMyLCAxMjAwMzYsIAorICAgIDEyMDA0MCwgMTIwMDQ0LCAxMjAwNDgsIDEyMDA1MiwgMTIwMDU2LCAxMjAwNjEsIDEyMDA2NSwgMTIwMDY5LCAxMjAwNzMsIAorICAgIDEyMDA3NywgMTIwMDgxLCAxMjAwODUsIDEyMDA4OSwgMTIwMDkzLCAxMjAwOTcsIDEyMDEwMiwgMTIwMTA2LCAxMjAxMTAsIAorICAgIDEyMDExNCwgMTIwMTE4LCAxMjAxMjIsIDEyMDEyNiwgMTIwMTMwLCAxMjAxMzQsIDEyMDEzOCwgMTIwMTQ0LCAxMjAxNDksIAorICAgIDEyMDE1NCwgMTIwMTU5LCAxMjAxNjQsIDEyMDE2OSwgMTIwMTc0LCAxMjAxNzksIDEyMDE4NCwgMTIwMTg5LCAxMjAxOTUsIAorICAgIDEyMDIwMCwgMTIwMjA1LCAxMjAyMTAsIDEyMDIxNSwgMTIwMjIwLCAxMjAyMjUsIDEyMDIzMCwgMTIwMjM1LCAxMjAyNDAsIAorICAgIDEyMDI0NCwgMTIwMjQ4LCAxMjAyNTIsIDAsIDEyMDI1NiwgMTIwMjYwLCAxMjAyNjQsIDEyMDI2OCwgMTIwMjcyLCAKICAgICAxMjAyNzYsIDEyMDI4MCwgMTIwMjg0LCAxMjAyODgsIDEyMDI5MiwgMTIwMjk2LCAxMjAzMDAsIDEyMDMwNCwgMTIwMzA4LCAKLSAgICAxMjAzMTIsIDEyMDMxNiwgMTIwMzIwLCAxMjAzMjYsIDEyMDMzMiwgMTIwMzM4LCAwLCAxMjAzNDQsIDEyMDM0OSwgMCwgCi0gICAgMTIwMzU0LCAwLCAwLCAxMjAzNTksIDAsIDEyMDM2NCwgMTIwMzY5LCAxMjAzNzQsIDEyMDM3OSwgMTIwMzg0LCAxMjAzODksIAotICAgIDEyMDM5NCwgMTIwMzk5LCAxMjA0MDQsIDEyMDQwOSwgMCwgMTIwNDE0LCAxMjA0MTksIDEyMDQyNCwgMTIwNDI5LCAwLCAKLSAgICAxMjA0MzQsIDAsIDEyMDQzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNDQ0LCAwLCAwLCAwLCAwLCAxMjA0NTAsIDAsIAotICAgIDEyMDQ1NiwgMCwgMTIwNDYyLCAwLCAxMjA0NjgsIDEyMDQ3NCwgMTIwNDgwLCAwLCAxMjA0ODYsIDEyMDQ5MiwgMCwgCi0gICAgMTIwNDk4LCAwLCAwLCAxMjA1MDQsIDAsIDEyMDUxMCwgMCwgMTIwNTE2LCAwLCAxMjA1MjIsIDAsIDEyMDUzMCwgMCwgCi0gICAgMTIwNTM4LCAxMjA1NDQsIDAsIDEyMDU1MCwgMCwgMCwgMTIwNTU2LCAxMjA1NjIsIDEyMDU2OCwgMTIwNTc0LCAwLCAKLSAgICAxMjA1ODAsIDEyMDU4NiwgMTIwNTkyLCAxMjA1OTgsIDEyMDYwNCwgMTIwNjEwLCAxMjA2MTYsIDAsIDEyMDYyMiwgCi0gICAgMTIwNjI4LCAxMjA2MzQsIDEyMDY0MCwgMCwgMTIwNjQ2LCAxMjA2NTIsIDEyMDY1OCwgMTIwNjY0LCAwLCAxMjA2NzIsIDAsIAotICAgIDEyMDY4MCwgMTIwNjg2LCAxMjA2OTIsIDEyMDY5OCwgMTIwNzA0LCAxMjA3MTAsIDEyMDcxNiwgMTIwNzIyLCAxMjA3MjgsIAotICAgIDEyMDczNCwgMCwgMTIwNzQwLCAxMjA3NDYsIDEyMDc1MiwgMTIwNzU4LCAxMjA3NjQsIDEyMDc3MCwgMTIwNzc2LCAKLSAgICAxMjA3ODIsIDEyMDc4OCwgMTIwNzk0LCAxMjA4MDAsIDEyMDgwNiwgMTIwODEyLCAxMjA4MTgsIDEyMDgyNCwgMTIwODMwLCAKLSAgICAxMjA4MzYsIDAsIDAsIDAsIDAsIDAsIDEyMDg0MiwgMTIwODQ3LCAxMjA4NTIsIDAsIDEyMDg1NywgMTIwODYyLCAxMjA4NjcsIAotICAgIDEyMDg3MiwgMTIwODc3LCAwLCAxMjA4ODIsIDEyMDg4NywgMTIwODkyLCAxMjA4OTcsIDEyMDkwMiwgMTIwOTA3LCAKLSAgICAxMjA5MTIsIDEyMDkxNywgMTIwOTIyLCAxMjA5MjcsIDEyMDkzMiwgMTIwOTM3LCAxMjA5NDIsIDEyMDk0NywgMTIwOTUyLCAKLSAgICAxMjA5NTcsIDEyMDk2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwOTY3LCAxMjA5NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMDk4NSwgMTIwOTkyLCAxMjA5OTksIDEyMTAwNiwgMTIxMDEzLCAxMjEwMjAsIDEyMTAyNywgCi0gICAgMTIxMDMzLCAxMjEwNDAsIDEyMTA0NywgMTIxMDU0LCAxMjEwNjIsIDEyMTA3MCwgMTIxMDc4LCAxMjEwODYsIDEyMTA5NCwgCi0gICAgMTIxMTAyLCAxMjExMDksIDEyMTExNiwgMTIxMTIzLCAxMjExMzEsIDEyMTEzOSwgMTIxMTQ3LCAxMjExNTUsIDEyMTE2MywgCi0gICAgMTIxMTcxLCAxMjExNzgsIDEyMTE4NSwgMTIxMTkyLCAxMjEyMDAsIDEyMTIwOCwgMTIxMjE2LCAxMjEyMjQsIDEyMTIzMiwgCi0gICAgMTIxMjQwLCAxMjEyNDUsIDEyMTI1MCwgMTIxMjU1LCAxMjEyNjAsIDEyMTI2NSwgMTIxMjcwLCAxMjEyNzUsIDEyMTI4MCwgCi0gICAgMTIxMjg1LCAwLCAwLCAwLCAwLCAxMjEyOTAsIDEyMTI5NSwgMTIxMjk5LCAxMjEzMDMsIDEyMTMwNywgMTIxMzExLCAKLSAgICAxMjEzMTUsIDEyMTMxOSwgMTIxMzIzLCAxMjEzMjcsIDEyMTMzMSwgMTIxMzM1LCAxMjEzMzksIDEyMTM0MywgMTIxMzQ3LCAKLSAgICAxMjEzNTEsIDEyMTM1NSwgMTIxMzU5LCAxMjEzNjMsIDEyMTM2NywgMTIxMzcxLCAxMjEzNzUsIDEyMTM3OSwgMTIxMzgzLCAKLSAgICAxMjEzODcsIDEyMTM5MSwgMTIxMzk1LCAxMjEzOTksIDEyMTQwMywgMTIxNDA3LCAxMjE0MTEsIDEyMTQxNSwgMTIxNDE5LCAKLSAgICAxMjE0MjMsIDEyMTQyNywgMTIxNDMxLCAxMjE0MzUsIDEyMTQzOSwgMTIxNDQzLCAxMjE0NDcsIDEyMTQ1MSwgMTIxNDU1LCAKLSAgICAxMjE0NTksIDEyMTQ2MywgMTIxNDY3LCAxMjE0NzEsIDEyMTQ3NSwgMTIxNDc5LCAxMjE0ODMsIDEyMTQ4NywgMTIxNDkxLCAKLSAgICAxMjE0OTYsIDEyMTUwMCwgMTIxNTA0LCAxMjE1MDgsIDEyMTUxMiwgMTIxNTE2LCAxMjE1MjAsIDEyMTUyNCwgMTIxNTI4LCAKLSAgICAxMjE1MzIsIDEyMTUzNiwgMTIxNTQwLCAxMjE1NDQsIDEyMTU0OCwgMTIxNTUyLCAxMjE1NTYsIDEyMTU2MCwgMTIxNTY0LCAKLSAgICAxMjE1NjgsIDEyMTU3MiwgMTIxNTc2LCAxMjE1ODAsIDEyMTU4NCwgMTIxNTg4LCAxMjE1OTIsIDEyMTU5NiwgMTIxNjAwLCAKLSAgICAxMjE2MDQsIDEyMTYwOCwgMTIxNjEyLCAxMjE2MTYsIDEyMTYyMCwgMTIxNjI0LCAxMjE2MjgsIDEyMTYzMiwgMTIxNjM2LCAKLSAgICAxMjE2NDAsIDEyMTY0NCwgMTIxNjQ4LCAxMjE2NTIsIDEyMTY1NiwgMTIxNjYwLCAxMjE2NjQsIDEyMTY2OCwgMTIxNjcyLCAKLSAgICAxMjE2NzYsIDEyMTY4MCwgMTIxNjg0LCAxMjE2ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMTY5MiwgMTIxNjk4LCAxMjE3MDcsIDEyMTcxNSwgMTIxNzIzLCAxMjE3MzIsIDEyMTc0MSwgMTIxNzUwLCAxMjE3NTksIAotICAgIDEyMTc2OCwgMTIxNzc3LCAxMjE3ODYsIDEyMTc5NSwgMTIxODA0LCAxMjE4MTMsIDAsIDAsIDEyMTgyMiwgMTIxODMxLCAKLSAgICAxMjE4MzksIDEyMTg0NywgMTIxODU2LCAxMjE4NjUsIDEyMTg3NCwgMTIxODgzLCAxMjE4OTIsIDEyMTkwMSwgMTIxOTEwLCAKLSAgICAxMjE5MTksIDEyMTkyOCwgMTIxOTM3LCAwLCAwLCAxMjE5NDYsIDEyMTk1NSwgMTIxOTYzLCAxMjE5NzEsIDEyMTk4MCwgCi0gICAgMTIxOTg5LCAxMjE5OTgsIDEyMjAwNywgMTIyMDE2LCAxMjIwMjUsIDEyMjAzNCwgMTIyMDQzLCAxMjIwNTIsIDEyMjA2MSwgCi0gICAgMTIyMDcwLCAwLCAxMjIwNzcsIDEyMjA4NiwgMTIyMDk0LCAxMjIxMDIsIDEyMjExMSwgMTIyMTIwLCAxMjIxMjksIAotICAgIDEyMjEzOCwgMTIyMTQ3LCAxMjIxNTYsIDEyMjE2NSwgMTIyMTc0LCAxMjIxODMsIDEyMjE5MiwgMTIyMjAxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjIyMDgsIDEyMjIxNSwgMTIyMjIwLCAxMjIyMjQsIDEyMjIyOCwgMTIyMjMyLCAxMjIyMzcsIAotICAgIDEyMjI0MiwgMTIyMjQ3LCAxMjIyNTIsIDEyMjI1NywgMCwgMCwgMCwgMCwgMCwgMTIyMjYyLCAxMjIyNjcsIDEyMjI3MywgCi0gICAgMTIyMjc5LCAxMjIyODUsIDEyMjI5MCwgMTIyMjk2LCAxMjIzMDIsIDEyMjMwOCwgMTIyMzEzLCAxMjIzMTksIDEyMjMyNSwgCi0gICAgMTIyMzMwLCAxMjIzMzUsIDEyMjM0MSwgMTIyMzQ2LCAxMjIzNTIsIDEyMjM1OCwgMTIyMzYzLCAxMjIzNjksIDEyMjM3NSwgCi0gICAgMTIyMzgwLCAxMjIzODYsIDEyMjM5MiwgMTIyMzk4LCAxMjI0MDQsIDEyMjQxMCwgMTIyNDIxLCAxMjI0MjgsIDEyMjQzNCwgCi0gICAgMTIyNDM3LCAwLCAxMjI0NDAsIDEyMjQ0NSwgMTIyNDUxLCAxMjI0NTcsIDEyMjQ2MywgMTIyNDY4LCAxMjI0NzQsIAotICAgIDEyMjQ4MCwgMTIyNDg2LCAxMjI0OTEsIDEyMjQ5NywgMTIyNTAzLCAxMjI1MDgsIDEyMjUxMywgMTIyNTE5LCAxMjI1MjQsIAotICAgIDEyMjUzMCwgMTIyNTM2LCAxMjI1NDEsIDEyMjU0NywgMTIyNTUzLCAxMjI1NTgsIDEyMjU2NCwgMTIyNTcwLCAxMjI1NzYsIAotICAgIDEyMjU4MiwgMTIyNTg4LCAxMjI1OTEsIDEyMjU5NCwgMTIyNTk3LCAxMjI2MDAsIDEyMjYwMywgMTIyNjA2LCAxMjI2MTIsIAotICAgIDEyMjYxOSwgMTIyNjI2LCAxMjI2MzMsIDEyMjYzOSwgMTIyNjQ2LCAxMjI2NTMsIDEyMjY2MCwgMTIyNjY2LCAxMjI2NzMsIAotICAgIDEyMjY4MCwgMTIyNjg2LCAxMjI2OTIsIDEyMjY5OSwgMTIyNzA1LCAxMjI3MTIsIDEyMjcxOSwgMTIyNzI1LCAxMjI3MzIsIAotICAgIDEyMjczOSwgMTIyNzQ1LCAxMjI3NTIsIDEyMjc1OSwgMTIyNzY2LCAxMjI3NzMsIDEyMjc4MCwgMTIyNzg1LCAwLCAwLCAwLCAKLSAgICAwLCAxMjI3OTAsIDEyMjc5NiwgMTIyODAzLCAxMjI4MTAsIDEyMjgxNywgMTIyODIzLCAxMjI4MzAsIDEyMjgzNywgCi0gICAgMTIyODQ0LCAxMjI4NTAsIDEyMjg1NywgMTIyODY0LCAxMjI4NzAsIDEyMjg3NiwgMTIyODgzLCAxMjI4ODksIDEyMjg5NiwgCi0gICAgMTIyOTAzLCAxMjI5MDksIDEyMjkxNiwgMTIyOTIzLCAxMjI5MjksIDEyMjkzNiwgMTIyOTQzLCAxMjI5NTAsIDEyMjk1NywgCi0gICAgMTIyOTY0LCAxMjI5NzMsIDEyMjk3NywgMTIyOTgwLCAxMjI5ODMsIDEyMjk4NywgMTIyOTkxLCAxMjI5OTQsIDEyMjk5NywgCi0gICAgMTIzMDAwLCAxMjMwMDMsIDEyMzAwNiwgMTIzMDA5LCAxMjMwMTIsIDEyMzAxNSwgMTIzMDE4LCAxMjMwMjQsIDAsIDAsIDAsIAorICAgIDEyMDMxMiwgMTIwMzE2LCAxMjAzMjAsIDEyMDMyNCwgMTIwMzI4LCAxMjAzMzIsIDEyMDMzNiwgMTIwMzQwLCAxMjAzNDQsIAorICAgIDEyMDM0OCwgMTIwMzU0LCAxMjAzNjAsIDEyMDM2NiwgMCwgMTIwMzcyLCAxMjAzNzcsIDAsIDEyMDM4MiwgMCwgMCwgCisgICAgMTIwMzg3LCAwLCAxMjAzOTIsIDEyMDM5NywgMTIwNDAyLCAxMjA0MDcsIDEyMDQxMiwgMTIwNDE3LCAxMjA0MjIsIAorICAgIDEyMDQyNywgMTIwNDMyLCAxMjA0MzcsIDAsIDEyMDQ0MiwgMTIwNDQ3LCAxMjA0NTIsIDEyMDQ1NywgMCwgMTIwNDYyLCAwLCAKKyAgICAxMjA0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQ3MiwgMCwgMCwgMCwgMCwgMTIwNDc4LCAwLCAxMjA0ODQsIDAsIAorICAgIDEyMDQ5MCwgMCwgMTIwNDk2LCAxMjA1MDIsIDEyMDUwOCwgMCwgMTIwNTE0LCAxMjA1MjAsIDAsIDEyMDUyNiwgMCwgMCwgCisgICAgMTIwNTMyLCAwLCAxMjA1MzgsIDAsIDEyMDU0NCwgMCwgMTIwNTUwLCAwLCAxMjA1NTgsIDAsIDEyMDU2NiwgMTIwNTcyLCAwLCAKKyAgICAxMjA1NzgsIDAsIDAsIDEyMDU4NCwgMTIwNTkwLCAxMjA1OTYsIDEyMDYwMiwgMCwgMTIwNjA4LCAxMjA2MTQsIDEyMDYyMCwgCisgICAgMTIwNjI2LCAxMjA2MzIsIDEyMDYzOCwgMTIwNjQ0LCAwLCAxMjA2NTAsIDEyMDY1NiwgMTIwNjYyLCAxMjA2NjgsIDAsIAorICAgIDEyMDY3NCwgMTIwNjgwLCAxMjA2ODYsIDEyMDY5MiwgMCwgMTIwNzAwLCAwLCAxMjA3MDgsIDEyMDcxNCwgMTIwNzIwLCAKKyAgICAxMjA3MjYsIDEyMDczMiwgMTIwNzM4LCAxMjA3NDQsIDEyMDc1MCwgMTIwNzU2LCAxMjA3NjIsIDAsIDEyMDc2OCwgCisgICAgMTIwNzc0LCAxMjA3ODAsIDEyMDc4NiwgMTIwNzkyLCAxMjA3OTgsIDEyMDgwNCwgMTIwODEwLCAxMjA4MTYsIDEyMDgyMiwgCisgICAgMTIwODI4LCAxMjA4MzQsIDEyMDg0MCwgMTIwODQ2LCAxMjA4NTIsIDEyMDg1OCwgMTIwODY0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA4NzAsIDEyMDg3NSwgMTIwODgwLCAwLCAxMjA4ODUsIDEyMDg5MCwgMTIwODk1LCAxMjA5MDAsIDEyMDkwNSwgMCwgCisgICAgMTIwOTEwLCAxMjA5MTUsIDEyMDkyMCwgMTIwOTI1LCAxMjA5MzAsIDEyMDkzNSwgMTIwOTQwLCAxMjA5NDUsIDEyMDk1MCwgCisgICAgMTIwOTU1LCAxMjA5NjAsIDEyMDk2NSwgMTIwOTcwLCAxMjA5NzUsIDEyMDk4MCwgMTIwOTg1LCAxMjA5OTAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEyMDk5NSwgMTIxMDA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjEwMTMsIAorICAgIDEyMTAyMCwgMTIxMDI3LCAxMjEwMzQsIDEyMTA0MSwgMTIxMDQ4LCAxMjEwNTUsIDEyMTA2MSwgMTIxMDY4LCAxMjEwNzUsIAorICAgIDEyMTA4MiwgMTIxMDkwLCAxMjEwOTgsIDEyMTEwNiwgMTIxMTE0LCAxMjExMjIsIDEyMTEzMCwgMTIxMTM3LCAxMjExNDQsIAorICAgIDEyMTE1MSwgMTIxMTU5LCAxMjExNjcsIDEyMTE3NSwgMTIxMTgzLCAxMjExOTEsIDEyMTE5OSwgMTIxMjA2LCAxMjEyMTMsIAorICAgIDEyMTIyMCwgMTIxMjI4LCAxMjEyMzYsIDEyMTI0NCwgMTIxMjUyLCAxMjEyNjAsIDEyMTI2OCwgMTIxMjczLCAxMjEyNzgsIAorICAgIDEyMTI4MywgMTIxMjg4LCAxMjEyOTMsIDEyMTI5OCwgMTIxMzAzLCAxMjEzMDgsIDEyMTMxMywgMCwgMCwgMCwgMCwgCisgICAgMTIxMzE4LCAxMjEzMjMsIDEyMTMyNywgMTIxMzMxLCAxMjEzMzUsIDEyMTMzOSwgMTIxMzQzLCAxMjEzNDcsIDEyMTM1MSwgCisgICAgMTIxMzU1LCAxMjEzNTksIDEyMTM2MywgMTIxMzY3LCAxMjEzNzEsIDEyMTM3NSwgMTIxMzc5LCAxMjEzODMsIDEyMTM4NywgCisgICAgMTIxMzkxLCAxMjEzOTUsIDEyMTM5OSwgMTIxNDAzLCAxMjE0MDcsIDEyMTQxMSwgMTIxNDE1LCAxMjE0MTksIDEyMTQyMywgCisgICAgMTIxNDI3LCAxMjE0MzEsIDEyMTQzNSwgMTIxNDM5LCAxMjE0NDMsIDEyMTQ0NywgMTIxNDUxLCAxMjE0NTUsIDEyMTQ1OSwgCisgICAgMTIxNDYzLCAxMjE0NjcsIDEyMTQ3MSwgMTIxNDc1LCAxMjE0NzksIDEyMTQ4MywgMTIxNDg3LCAxMjE0OTEsIDEyMTQ5NSwgCisgICAgMTIxNDk5LCAxMjE1MDMsIDEyMTUwNywgMTIxNTExLCAxMjE1MTUsIDEyMTUxOSwgMTIxNTI0LCAxMjE1MjgsIDEyMTUzMiwgCisgICAgMTIxNTM2LCAxMjE1NDAsIDEyMTU0NCwgMTIxNTQ4LCAxMjE1NTIsIDEyMTU1NiwgMTIxNTYwLCAxMjE1NjQsIDEyMTU2OCwgCisgICAgMTIxNTcyLCAxMjE1NzYsIDEyMTU4MCwgMTIxNTg0LCAxMjE1ODgsIDEyMTU5MiwgMTIxNTk2LCAxMjE2MDAsIDEyMTYwNCwgCisgICAgMTIxNjA4LCAxMjE2MTIsIDEyMTYxNiwgMTIxNjIwLCAxMjE2MjQsIDEyMTYyOCwgMTIxNjMyLCAxMjE2MzYsIDEyMTY0MCwgCisgICAgMTIxNjQ0LCAxMjE2NDgsIDEyMTY1MiwgMTIxNjU2LCAxMjE2NjAsIDEyMTY2NCwgMTIxNjY4LCAxMjE2NzIsIDEyMTY3NiwgCisgICAgMTIxNjgwLCAxMjE2ODQsIDEyMTY4OCwgMTIxNjkyLCAxMjE2OTYsIDEyMTcwMCwgMTIxNzA0LCAxMjE3MDgsIDEyMTcxMiwgCisgICAgMTIxNzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE3MjAsIDEyMTcyNiwgMTIxNzM1LCAKKyAgICAxMjE3NDMsIDEyMTc1MSwgMTIxNzYwLCAxMjE3NjksIDEyMTc3OCwgMTIxNzg3LCAxMjE3OTYsIDEyMTgwNSwgMTIxODE0LCAKKyAgICAxMjE4MjMsIDEyMTgzMiwgMTIxODQxLCAwLCAwLCAxMjE4NTAsIDEyMTg1OSwgMTIxODY3LCAxMjE4NzUsIDEyMTg4NCwgCisgICAgMTIxODkzLCAxMjE5MDIsIDEyMTkxMSwgMTIxOTIwLCAxMjE5MjksIDEyMTkzOCwgMTIxOTQ3LCAxMjE5NTYsIDEyMTk2NSwgCisgICAgMCwgMCwgMTIxOTc0LCAxMjE5ODMsIDEyMTk5MSwgMTIxOTk5LCAxMjIwMDgsIDEyMjAxNywgMTIyMDI2LCAxMjIwMzUsIAorICAgIDEyMjA0NCwgMTIyMDUzLCAxMjIwNjIsIDEyMjA3MSwgMTIyMDgwLCAxMjIwODksIDEyMjA5OCwgMCwgMTIyMTA1LCAKKyAgICAxMjIxMTQsIDEyMjEyMiwgMTIyMTMwLCAxMjIxMzksIDEyMjE0OCwgMTIyMTU3LCAxMjIxNjYsIDEyMjE3NSwgMTIyMTg0LCAKKyAgICAxMjIxOTMsIDEyMjIwMiwgMTIyMjExLCAxMjIyMjAsIDEyMjIyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyMjM2LCAKKyAgICAxMjIyNDMsIDEyMjI0OCwgMTIyMjUyLCAxMjIyNTYsIDEyMjI2MCwgMTIyMjY1LCAxMjIyNzAsIDEyMjI3NSwgMTIyMjgwLCAKKyAgICAxMjIyODUsIDAsIDAsIDAsIDAsIDAsIDEyMjI5MCwgMTIyMjk1LCAxMjIzMDEsIDEyMjMwNywgMTIyMzEzLCAxMjIzMTgsIAorICAgIDEyMjMyNCwgMTIyMzMwLCAxMjIzMzYsIDEyMjM0MSwgMTIyMzQ3LCAxMjIzNTMsIDEyMjM1OCwgMTIyMzYzLCAxMjIzNjksIAorICAgIDEyMjM3NCwgMTIyMzgwLCAxMjIzODYsIDEyMjM5MSwgMTIyMzk3LCAxMjI0MDMsIDEyMjQwOCwgMTIyNDE0LCAxMjI0MjAsIAorICAgIDEyMjQyNiwgMTIyNDMyLCAxMjI0MzgsIDEyMjQ0OSwgMTIyNDU2LCAxMjI0NjIsIDEyMjQ2NSwgMCwgMTIyNDY4LCAKKyAgICAxMjI0NzMsIDEyMjQ3OSwgMTIyNDg1LCAxMjI0OTEsIDEyMjQ5NiwgMTIyNTAyLCAxMjI1MDgsIDEyMjUxNCwgMTIyNTE5LCAKKyAgICAxMjI1MjUsIDEyMjUzMSwgMTIyNTM2LCAxMjI1NDEsIDEyMjU0NywgMTIyNTUyLCAxMjI1NTgsIDEyMjU2NCwgMTIyNTY5LCAKKyAgICAxMjI1NzUsIDEyMjU4MSwgMTIyNTg2LCAxMjI1OTIsIDEyMjU5OCwgMTIyNjA0LCAxMjI2MTAsIDEyMjYxNiwgMTIyNjE5LCAKKyAgICAxMjI2MjIsIDEyMjYyNSwgMTIyNjI4LCAxMjI2MzEsIDEyMjYzNCwgMTIyNjQwLCAxMjI2NDcsIDEyMjY1NCwgMTIyNjYxLCAKKyAgICAxMjI2NjcsIDEyMjY3NCwgMTIyNjgxLCAxMjI2ODgsIDEyMjY5NCwgMTIyNzAxLCAxMjI3MDgsIDEyMjcxNCwgMTIyNzIwLCAKKyAgICAxMjI3MjcsIDEyMjczMywgMTIyNzQwLCAxMjI3NDcsIDEyMjc1MywgMTIyNzYwLCAxMjI3NjcsIDEyMjc3MywgMTIyNzgwLCAKKyAgICAxMjI3ODcsIDEyMjc5NCwgMTIyODAxLCAxMjI4MDgsIDEyMjgxMywgMCwgMCwgMCwgMCwgMTIyODE4LCAxMjI4MjQsIAorICAgIDEyMjgzMSwgMTIyODM4LCAxMjI4NDUsIDEyMjg1MSwgMTIyODU4LCAxMjI4NjUsIDEyMjg3MiwgMTIyODc4LCAxMjI4ODUsIAorICAgIDEyMjg5MiwgMTIyODk4LCAxMjI5MDQsIDEyMjkxMSwgMTIyOTE3LCAxMjI5MjQsIDEyMjkzMSwgMTIyOTM3LCAxMjI5NDQsIAorICAgIDEyMjk1MSwgMTIyOTU3LCAxMjI5NjQsIDEyMjk3MSwgMTIyOTc4LCAxMjI5ODUsIDEyMjk5MiwgMTIzMDAxLCAxMjMwMDUsIAorICAgIDEyMzAwOCwgMTIzMDExLCAxMjMwMTUsIDEyMzAxOSwgMTIzMDIyLCAxMjMwMjUsIDEyMzAyOCwgMTIzMDMxLCAxMjMwMzQsIAorICAgIDEyMzAzNywgMTIzMDQwLCAxMjMwNDMsIDEyMzA0NiwgMTIzMDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjMwMjcsIDEyMzAzNCwgMTIzMDQyLCAxMjMwNTAsIDEyMzA1OCwgMTIzMDY1LCAxMjMwNzMsIDEyMzA4MSwgMTIzMDg5LCAKLSAgICAxMjMwOTYsIDEyMzEwNCwgMTIzMTEyLCAxMjMxMTksIDEyMzEyNiwgMTIzMTM0LCAxMjMxNDEsIDEyMzE0OSwgMTIzMTU3LCAKLSAgICAxMjMxNjQsIDEyMzE3MiwgMTIzMTgwLCAxMjMxODcsIDEyMzE5NSwgMTIzMjAzLCAxMjMyMTEsIDEyMzIxOSwgMTIzMjI3LCAKLSAgICAxMjMyMzEsIDEyMzIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMjM4LCAxMjMyNDQsIAotICAgIDEyMzI1MCwgMTIzMjU2LCAxMjMyNjAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjkwLCAxMjMyOTYsIAotICAgIDEyMzMwMiwgMTIzMzA4LCAxMjMzMTQsIDEyMzMyMCwgMTIzMzI2LCAxMjMzMzIsIDEyMzMzOCwgMTIzMzQ0LCAxMjMzNTAsIAotICAgIDEyMzM1NiwgMTIzMzYyLCAxMjMzNjgsIDEyMzM3NCwgMTIzMzgwLCAxMjMzODYsIDEyMzM5MiwgMTIzMzk4LCAxMjM0MDQsIAotICAgIDEyMzQxMCwgMTIzNDE2LCAxMjM0MjIsIDEyMzQyOCwgMTIzNDM0LCAxMjM0NDAsIDEyMzQ0NiwgMTIzNDUyLCAxMjM0NTgsIAotICAgIDEyMzQ2NCwgMTIzNDcwLCAxMjM0NzYsIDEyMzQ4MiwgMTIzNDg4LCAwLCAwLCAwLCAwLCAwLCAxMjM0OTQsIDEyMzUwNSwgCi0gICAgMTIzNTE2LCAxMjM1MjcsIDEyMzUzOCwgMTIzNTQ5LCAxMjM1NjAsIDEyMzU3MSwgMTIzNTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjM1OTMsIDEyMzU5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTIzNjAxLCAxMjM2MDMsIDEyMzYwNSwgMTIzNjA5LCAxMjM2MTQsIDEyMzYxOSwgMTIzNjIxLCAKLSAgICAxMjM2MjcsIDEyMzYzMiwgMTIzNjM0LCAxMjM2NDAsIDEyMzY0NCwgMTIzNjQ2LCAxMjM2NTAsIDEyMzY1NiwgMTIzNjYyLCAKLSAgICAxMjM2NjgsIDEyMzY3MywgMTIzNjc3LCAxMjM2ODQsIDEyMzY5MSwgMTIzNjk4LCAxMjM3MDMsIDEyMzcxMCwgMTIzNzE3LCAKLSAgICAxMjM3MjQsIDEyMzcyOCwgMTIzNzM0LCAxMjM3NDMsIDEyMzc1MiwgMTIzNzU5LCAxMjM3NjQsIDEyMzc2OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNzcyLCAxMjM3NzQsIDEyMzc3NiwgMTIzNzgwLCAKLSAgICAxMjM3ODQsIDEyMzc4OCwgMCwgMTIzNzkwLCAxMjM3OTIsIDEyMzc5NiwgMTIzNzk4LCAxMjM4MDAsIDEyMzgwMiwgCi0gICAgMTIzODA0LCAxMjM4MDksIDEyMzgxNCwgMTIzODE2LCAxMjM4MjIsIDEyMzgyNiwgMTIzODMwLCAxMjM4MzgsIDEyMzg0MCwgCi0gICAgMTIzODQyLCAxMjM4NDQsIDEyMzg0NiwgMTIzODQ4LCAxMjM4NTAsIDEyMzg1MiwgMTIzODU0LCAxMjM4NTYsIDEyMzg1OCwgCi0gICAgMTIzODYyLCAxMjM4NjYsIDEyMzg2OCwgMTIzODcwLCAxMjM4NzIsIDEyMzg3NCwgMTIzODc2LCAxMjM4ODEsIDEyMzg4NywgCi0gICAgMTIzODkxLCAxMjM4OTUsIDEyMzg5OSwgMTIzOTAzLCAxMjM5MDgsIDEyMzkxMiwgMTIzOTE0LCAxMjM5MTYsIDEyMzkyMCwgCi0gICAgMTIzOTI2LCAxMjM5MjgsIDEyMzkzMCwgMTIzOTMyLCAxMjM5MzYsIDEyMzk0NSwgMTIzOTUxLCAxMjM5NTUsIDEyMzk1OSwgCi0gICAgMTIzOTYxLCAxMjM5NjMsIDEyMzk2NiwgMTIzOTY4LCAxMjM5NzAsIDEyMzk3MiwgMTIzOTc2LCAxMjM5NzgsIDEyMzk4MiwgCi0gICAgMTIzOTg3LCAxMjM5ODksIDEyMzk5NCwgMTI0MDAwLCAxMjQwMDcsIDEyNDAxMSwgMTI0MDE1LCAxMjQwMTksIDEyNDAyMywgCi0gICAgMTI0MDI5LCAwLCAwLCAwLCAxMjQwMzMsIDEyNDAzNSwgMTI0MDM5LCAxMjQwNDMsIDEyNDA0NSwgMTI0MDQ5LCAxMjQwNTMsIAotICAgIDEyNDA1NSwgMTI0MDU5LCAxMjQwNjEsIDEyNDA2NSwgMTI0MDY5LCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODUsIAotICAgIDEyNDA4OSwgMTI0MDkzLCAxMjQwOTksIDEyNDEwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI0MTA3LCAxMjQxMTEsIDEyNDExNSwgMTI0MTE5LCAxMjQxMjYsIDEyNDEyOCwgMTI0MTMyLCAxMjQxMzQsIDEyNDEzNiwgCi0gICAgMTI0MTQwLCAxMjQxNDQsIDEyNDE0OCwgMTI0MTUwLCAxMjQxNTQsIDEyNDE1OCwgMTI0MTYyLCAxMjQxNjYsIDEyNDE3MCwgCi0gICAgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgMTI0MTg0LCAxMjQxODcsIDEyNDE5MiwgMTI0MTk0LCAxMjQxOTYsIDEyNDE5OSwgCi0gICAgMTI0MjAxLCAxMjQyMDMsIDEyNDIwNiwgMTI0MjEzLCAxMjQyMjAsIDEyNDIyNywgMTI0MjMyLCAxMjQyMzYsIDEyNDIzOCwgCi0gICAgMTI0MjQwLCAwLCAxMjQyNDIsIDEyNDI0NCwgMTI0MjQ4LCAxMjQyNTIsIDEyNDI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MjU4LCAxMjQyNjIsIDEyNDI2NywgMTI0MjcxLCAKLSAgICAxMjQyNzcsIDEyNDI4MywgMTI0Mjg1LCAxMjQyODcsIDEyNDI5MywgMTI0Mjk1LCAxMjQyOTksIDEyNDMwMywgMTI0MzA1LCAKLSAgICAxMjQzMDksIDEyNDMxMSwgMTI0MzE1LCAxMjQzMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNDMyMywgMTI0MzI1LCAxMjQzMjcsIDEyNDMyOSwgMTI0MzMzLCAxMjQzMzUsIDEyNDMzNywgMTI0MzM5LCAKLSAgICAxMjQzNDEsIDEyNDM0MywgMTI0MzQ1LCAxMjQzNDcsIDEyNDM0OSwgMTI0MzUxLCAxMjQzNTMsIDEyNDM1NSwgMTI0MzU3LCAKLSAgICAxMjQzNTksIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgMTI0Mzc1LCAKLSAgICAxMjQzNzcsIDEyNDM4MSwgMTI0MzgzLCAxMjQzODUsIDEyNDM4NywgMTI0MzkxLCAxMjQzOTMsIDEyNDM5NywgMTI0Mzk5LCAKLSAgICAxMjQ0MDEsIDEyNDQwNSwgMTI0NDA5LCAxMjQ0MTUsIDEyNDQxNywgMTI0NDE5LCAxMjQ0MjEsIDEyNDQyMywgMTI0NDI3LCAKLSAgICAxMjQ0MzEsIDEyNDQzMywgMTI0NDM3LCAxMjQ0NDEsIDEyNDQ0NSwgMTI0NDQ5LCAxMjQ0NTMsIDEyNDQ1NywgMTI0NDYxLCAKLSAgICAxMjQ0NjUsIDEyNDQ2OSwgMTI0NDczLCAxMjQ0NzcsIDEyNDQ4MSwgMTI0NDg1LCAxMjQ0ODksIDEyNDQ5MywgMTI0NDk3LCAKLSAgICAxMjQ1MDEsIDAsIDEyNDUwNSwgMCwgMTI0NTA3LCAxMjQ1MDksIDEyNDUxMSwgMTI0NTEzLCAxMjQ1MTUsIDEyNDUyMywgCi0gICAgMTI0NTMxLCAxMjQ1MzksIDEyNDU0NywgMTI0NTUyLCAxMjQ1NTcsIDEyNDU2MiwgMTI0NTY2LCAxMjQ1NzAsIDEyNDU3NSwgCi0gICAgMTI0NTc5LCAxMjQ1ODEsIDEyNDU4NSwgMTI0NTg3LCAxMjQ1ODksIDEyNDU5MSwgMTI0NTkzLCAxMjQ1OTUsIDEyNDU5NywgCi0gICAgMTI0NTk5LCAxMjQ2MDMsIDEyNDYwNSwgMTI0NjA3LCAxMjQ2MDksIDEyNDYxMywgMTI0NjE3LCAxMjQ2MjEsIDEyNDYyNSwgCi0gICAgMTI0NjI5LCAxMjQ2MzEsIDEyNDYzNywgMTI0NjQzLCAxMjQ2NDUsIDEyNDY0NywgMTI0NjQ5LCAxMjQ2NTEsIDEyNDY1MywgCi0gICAgMTI0NjYyLCAxMjQ2NjksIDEyNDY3NiwgMTI0NjgwLCAxMjQ2ODcsIDEyNDY5MiwgMTI0Njk5LCAxMjQ3MDgsIDEyNDcxMywgCi0gICAgMTI0NzE3LCAxMjQ3MjEsIDEyNDcyMywgMTI0NzI3LCAxMjQ3MjksIDEyNDczMywgMTI0NzM3LCAxMjQ3MzksIDEyNDc0MywgCi0gICAgMTI0NzQ3LCAxMjQ3NTEsIDEyNDc1MywgMTI0NzU1LCAxMjQ3NjEsIDEyNDc2MywgMTI0NzY1LCAxMjQ3NjcsIDEyNDc3MSwgCi0gICAgMTI0Nzc1LCAxMjQ3NzcsIDEyNDc4MSwgMTI0NzgzLCAxMjQ3ODUsIDEyNDc4OCwgMTI0NzkyLCAxMjQ3OTQsIDEyNDc5OCwgCi0gICAgMTI0ODAwLCAxMjQ4MDIsIDEyNDgwNywgMTI0ODA5LCAxMjQ4MTMsIDEyNDgxNywgMTI0ODIwLCAxMjQ4MjQsIDEyNDgyOCwgCi0gICAgMTI0ODMyLCAxMjQ4MzYsIDEyNDg0MCwgMTI0ODQ0LCAxMjQ4NDgsIDEyNDg1MywgMTI0ODU3LCAxMjQ4NjEsIDEyNDg3MCwgCi0gICAgMTI0ODc1LCAxMjQ4NzgsIDEyNDg4MCwgMTI0ODgzLCAxMjQ4ODYsIDEyNDg5MSwgMTI0ODkzLCAxMjQ4OTYsIDEyNDkwMSwgCi0gICAgMTI0OTA1LCAxMjQ5MDgsIDEyNDkxMiwgMTI0OTE2LCAxMjQ5MTksIDEyNDkyNCwgMTI0OTI4LCAxMjQ5MzIsIDEyNDkzNiwgCi0gICAgMTI0OTQwLCAxMjQ5NDYsIDEyNDk1MiwgMTI0OTU4LCAxMjQ5NjQsIDEyNDk2OSwgMTI0OTgwLCAxMjQ5ODIsIDEyNDk4NiwgCi0gICAgMTI0OTg4LCAxMjQ5OTAsIDEyNDk5NCwgMTI0OTk4LCAxMjUwMDAsIDEyNTAwNCwgMTI1MDA5LCAxMjUwMTQsIDEyNTAyMCwgCi0gICAgMTI1MDIyLCAxMjUwMjYsIDEyNTAzMCwgMTI1MDM3LCAxMjUwNDQsIDEyNTA0OCwgMTI1MDUwLCAxMjUwNTIsIDEyNTA1NiwgCi0gICAgMTI1MDU4LCAxMjUwNjIsIDEyNTA2NiwgMTI1MDcwLCAxMjUwNzIsIDEyNTA3NCwgMTI1MDgxLCAxMjUwODUsIDEyNTA4OCwgCi0gICAgMTI1MDkyLCAxMjUwOTYsIDEyNTEwMCwgMTI1MTAyLCAxMjUxMDYsIDEyNTEwOCwgMTI1MTEwLCAxMjUxMTQsIDEyNTExNiwgCi0gICAgMTI1MTIwLCAxMjUxMjQsIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzgsIDEyNTE0MiwgMTI1MTQ0LCAxMjUxNDcsIDEyNTE1MSwgCi0gICAgMTI1MTU4LCAxMjUxNjcsIDEyNTE3NiwgMTI1MTg0LCAxMjUxOTIsIDEyNTE5NCwgMTI1MTk4LCAxMjUyMDAsIDEyNTIwNCwgCi0gICAgMTI1MjE1LCAxMjUyMTksIDEyNTIyNSwgMTI1MjMxLCAxMjUyMzYsIDAsIDEyNTIzOCwgMTI1MjQyLCAxMjUyNDQsIAotICAgIDEyNTI0NiwgMCwgMCwgMCwgMTI1MjQ4LCAxMjUyNTMsIDEyNTI2MywgMTI1Mjc4LCAxMjUyOTAsIDEyNTMwMiwgMTI1MzA2LCAKLSAgICAxMjUzMTAsIDEyNTMxNiwgMTI1MzE4LCAxMjUzMjYsIDEyNTMzNCwgMTI1MzM2LCAxMjUzNDAsIDEyNTM0NiwgMTI1MzUyLCAKLSAgICAxMjUzNTksIDEyNTM2NiwgMTI1MzY4LCAxMjUzNzAsIDEyNTM3MywgMTI1Mzc1LCAxMjUzODEsIDEyNTM4MywgMTI1Mzg2LCAKLSAgICAxMjUzOTAsIDEyNTM5NiwgMTI1NDAyLCAxMjU0MTMsIDEyNTQxOSwgMTI1NDI2LCAxMjU0MzQsIDEyNTQzOCwgMTI1NDQ2LCAKLSAgICAxMjU0NTQsIDEyNTQ2MCwgMTI1NDY2LCAxMjU0NzMsIDEyNTQ3NSwgMTI1NDc5LCAxMjU0ODEsIDEyNTQ4MywgMTI1NDg4LCAKLSAgICAxMjU0OTAsIDEyNTQ5MiwgMTI1NDk0LCAxMjU0OTYsIDEyNTUwMCwgMTI1NTExLCAxMjU1MTcsIDEyNTUyMSwgMTI1NTI1LCAKLSAgICAxMjU1MjksIDEyNTUzNSwgMTI1NTQxLCAxMjU1NDcsIDEyNTU1MywgMTI1NTU4LCAxMjU1NjMsIDEyNTU2OSwgMTI1NTc1LCAKLSAgICAxMjU1ODIsIDAsIDAsIDEyNTU4OSwgMTI1NTk0LCAxMjU2MDIsIDEyNTYwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI1NjE1LCAxMjU2MjIsIDEyNTYyOSwgMTI1NjM2LCAxMjU2NDQsIDEyNTY1MiwgMTI1NjYwLCAxMjU2NjgsIAotICAgIDEyNTY3NiwgMTI1Njg0LCAxMjU2OTIsIDEyNTcwMCwgMTI1NzA4LCAxMjU3MTQsIDEyNTcyMCwgMTI1NzI2LCAxMjU3MzIsIAotICAgIDEyNTczOCwgMTI1NzQ0LCAxMjU3NTAsIDEyNTc1NiwgMTI1NzYyLCAxMjU3NjgsIDEyNTc3NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMDU1LCAxMjMwNjIsIDEyMzA3MCwgCisgICAgMTIzMDc4LCAxMjMwODYsIDEyMzA5MywgMTIzMTAxLCAxMjMxMDksIDEyMzExNywgMTIzMTI0LCAxMjMxMzIsIDEyMzE0MCwgCisgICAgMTIzMTQ3LCAxMjMxNTQsIDEyMzE2MiwgMTIzMTY5LCAxMjMxNzcsIDEyMzE4NSwgMTIzMTkyLCAxMjMyMDAsIDEyMzIwOCwgCisgICAgMTIzMjE1LCAxMjMyMjMsIDEyMzIzMSwgMTIzMjM5LCAxMjMyNDcsIDEyMzI1NSwgMTIzMjU5LCAxMjMyNjMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjg4LCAKKyAgICAxMjMyOTQsIDEyMzMwMCwgMTIzMzA2LCAxMjMzMTIsIDEyMzMxOCwgMTIzMzI0LCAxMjMzMzAsIDEyMzMzNiwgMTIzMzQyLCAKKyAgICAxMjMzNDgsIDEyMzM1NCwgMTIzMzYwLCAxMjMzNjYsIDEyMzM3MiwgMTIzMzc4LCAxMjMzODQsIDEyMzM5MCwgMTIzMzk2LCAKKyAgICAxMjM0MDIsIDEyMzQwOCwgMTIzNDE0LCAxMjM0MjAsIDEyMzQyNiwgMTIzNDMyLCAxMjM0MzgsIDEyMzQ0NCwgMTIzNDUwLCAKKyAgICAxMjM0NTYsIDEyMzQ2MiwgMTIzNDY4LCAxMjM0NzQsIDEyMzQ4MCwgMTIzNDg2LCAxMjM0OTIsIDEyMzQ5OCwgMTIzNTA0LCAKKyAgICAxMjM1MTAsIDEyMzUxNiwgMCwgMCwgMCwgMCwgMCwgMTIzNTIyLCAxMjM1MzMsIDEyMzU0NCwgMTIzNTU1LCAxMjM1NjYsIAorICAgIDEyMzU3NywgMTIzNTg4LCAxMjM1OTksIDEyMzYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNjIxLCAxMjM2MjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzYyOSwgCisgICAgMTIzNjMxLCAxMjM2MzMsIDEyMzYzNywgMTIzNjQyLCAxMjM2NDcsIDEyMzY0OSwgMTIzNjU1LCAxMjM2NjAsIDEyMzY2MiwgCisgICAgMTIzNjY4LCAxMjM2NzIsIDEyMzY3NCwgMTIzNjc4LCAxMjM2ODQsIDEyMzY5MCwgMTIzNjk2LCAxMjM3MDEsIDEyMzcwNSwgCisgICAgMTIzNzEyLCAxMjM3MTksIDEyMzcyNiwgMTIzNzMxLCAxMjM3MzgsIDEyMzc0NSwgMTIzNzUyLCAxMjM3NTYsIDEyMzc2MiwgCisgICAgMTIzNzcxLCAxMjM3ODAsIDEyMzc4NywgMTIzNzkyLCAxMjM3OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEyMzgwMCwgMTIzODAyLCAxMjM4MDQsIDEyMzgwOCwgMTIzODEyLCAxMjM4MTYsIDAsIDEyMzgxOCwgCisgICAgMTIzODIwLCAxMjM4MjQsIDEyMzgyNiwgMTIzODI4LCAxMjM4MzAsIDEyMzgzMiwgMTIzODM3LCAxMjM4NDIsIDEyMzg0NCwgCisgICAgMTIzODUwLCAxMjM4NTQsIDEyMzg1OCwgMTIzODY2LCAxMjM4NjgsIDEyMzg3MCwgMTIzODcyLCAxMjM4NzQsIDEyMzg3NiwgCisgICAgMTIzODc4LCAxMjM4ODAsIDEyMzg4MiwgMTIzODg0LCAxMjM4ODYsIDEyMzg5MCwgMTIzODk0LCAxMjM4OTYsIDEyMzg5OCwgCisgICAgMTIzOTAwLCAxMjM5MDIsIDEyMzkwNCwgMTIzOTA5LCAxMjM5MTUsIDEyMzkxOSwgMTIzOTIzLCAxMjM5MjcsIDEyMzkzMSwgCisgICAgMTIzOTM2LCAxMjM5NDAsIDEyMzk0MiwgMTIzOTQ0LCAxMjM5NDgsIDEyMzk1NCwgMTIzOTU2LCAxMjM5NTgsIDEyMzk2MCwgCisgICAgMTIzOTY0LCAxMjM5NzMsIDEyMzk3OSwgMTIzOTgzLCAxMjM5ODcsIDEyMzk4OSwgMTIzOTkxLCAxMjM5OTQsIDEyMzk5NiwgCisgICAgMTIzOTk4LCAxMjQwMDAsIDEyNDAwNCwgMTI0MDA2LCAxMjQwMTAsIDEyNDAxNSwgMTI0MDE3LCAxMjQwMjIsIDEyNDAyOCwgCisgICAgMTI0MDM1LCAxMjQwMzksIDEyNDA0MywgMTI0MDQ3LCAxMjQwNTEsIDEyNDA1NywgMCwgMCwgMCwgMTI0MDYxLCAxMjQwNjMsIAorICAgIDEyNDA2NywgMTI0MDcxLCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODMsIDEyNDA4NywgMTI0MDg5LCAxMjQwOTMsIAorICAgIDEyNDA5NywgMTI0MTAxLCAxMjQxMDUsIDEyNDEwOSwgMTI0MTEzLCAxMjQxMTcsIDEyNDEyMSwgMTI0MTI3LCAxMjQxMzEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDEzNSwgMTI0MTM5LCAxMjQxNDMsIDEyNDE0NywgCisgICAgMTI0MTU0LCAxMjQxNTYsIDEyNDE2MCwgMTI0MTYyLCAxMjQxNjQsIDEyNDE2OCwgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgCisgICAgMTI0MTgyLCAxMjQxODYsIDEyNDE5MCwgMTI0MTk0LCAxMjQxOTgsIDEyNDIwMCwgMTI0MjA0LCAxMjQyMDYsIDEyNDIxMiwgCisgICAgMTI0MjE1LCAxMjQyMjAsIDEyNDIyMiwgMTI0MjI0LCAxMjQyMjcsIDEyNDIyOSwgMTI0MjMxLCAxMjQyMzQsIDEyNDI0MSwgCisgICAgMTI0MjQ4LCAxMjQyNTUsIDEyNDI2MCwgMTI0MjY0LCAxMjQyNjYsIDEyNDI2OCwgMCwgMTI0MjcwLCAxMjQyNzIsIAorICAgIDEyNDI3NiwgMTI0MjgwLCAxMjQyODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyNDI4NiwgMTI0MjkwLCAxMjQyOTUsIDEyNDI5OSwgMTI0MzA1LCAxMjQzMTEsIDEyNDMxMywgCisgICAgMTI0MzE1LCAxMjQzMjEsIDEyNDMyMywgMTI0MzI3LCAxMjQzMzEsIDEyNDMzMywgMTI0MzM3LCAxMjQzMzksIDEyNDM0MywgCisgICAgMTI0MzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQzNTEsIDEyNDM1MywgCisgICAgMTI0MzU1LCAxMjQzNTcsIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgCisgICAgMTI0Mzc1LCAxMjQzNzcsIDEyNDM3OSwgMTI0MzgxLCAxMjQzODMsIDEyNDM4NSwgMTI0Mzg3LCAxMjQzODksIDEyNDM5MSwgCisgICAgMTI0MzkzLCAxMjQzOTUsIDEyNDM5NywgMTI0Mzk5LCAxMjQ0MDEsIDEyNDQwMywgMTI0NDA1LCAxMjQ0MDksIDEyNDQxMSwgCisgICAgMTI0NDEzLCAxMjQ0MTUsIDEyNDQxOSwgMTI0NDIxLCAxMjQ0MjUsIDEyNDQyNywgMTI0NDI5LCAxMjQ0MzMsIDEyNDQzNywgCisgICAgMTI0NDQzLCAxMjQ0NDUsIDEyNDQ0NywgMTI0NDQ5LCAxMjQ0NTEsIDEyNDQ1NSwgMTI0NDU5LCAxMjQ0NjEsIDEyNDQ2NSwgCisgICAgMTI0NDY5LCAxMjQ0NzMsIDEyNDQ3NywgMTI0NDgxLCAxMjQ0ODUsIDEyNDQ4OSwgMTI0NDkzLCAxMjQ0OTcsIDEyNDUwMSwgCisgICAgMTI0NTA1LCAxMjQ1MDksIDEyNDUxMywgMTI0NTE3LCAxMjQ1MjEsIDEyNDUyNSwgMTI0NTI5LCAwLCAxMjQ1MzMsIDAsIAorICAgIDEyNDUzNSwgMTI0NTM3LCAxMjQ1MzksIDEyNDU0MSwgMTI0NTQzLCAxMjQ1NTEsIDEyNDU1OSwgMTI0NTY3LCAxMjQ1NzUsIAorICAgIDEyNDU4MCwgMTI0NTg1LCAxMjQ1OTAsIDEyNDU5NCwgMTI0NTk4LCAxMjQ2MDMsIDEyNDYwNywgMTI0NjA5LCAxMjQ2MTMsIAorICAgIDEyNDYxNSwgMTI0NjE3LCAxMjQ2MTksIDEyNDYyMSwgMTI0NjIzLCAxMjQ2MjUsIDEyNDYyNywgMTI0NjMxLCAxMjQ2MzMsIAorICAgIDEyNDYzNSwgMTI0NjM3LCAxMjQ2NDEsIDEyNDY0NSwgMTI0NjQ5LCAxMjQ2NTMsIDEyNDY1NywgMTI0NjU5LCAxMjQ2NjUsIAorICAgIDEyNDY3MSwgMTI0NjczLCAxMjQ2NzUsIDEyNDY3NywgMTI0Njc5LCAxMjQ2ODEsIDEyNDY5MCwgMTI0Njk3LCAxMjQ3MDQsIAorICAgIDEyNDcwOCwgMTI0NzE1LCAxMjQ3MjAsIDEyNDcyNywgMTI0NzM2LCAxMjQ3NDEsIDEyNDc0NSwgMTI0NzQ5LCAxMjQ3NTEsIAorICAgIDEyNDc1NSwgMTI0NzU3LCAxMjQ3NjEsIDEyNDc2NSwgMTI0NzY3LCAxMjQ3NzEsIDEyNDc3NSwgMTI0Nzc5LCAxMjQ3ODEsIAorICAgIDEyNDc4MywgMTI0Nzg5LCAxMjQ3OTEsIDEyNDc5MywgMTI0Nzk1LCAxMjQ3OTksIDEyNDgwMywgMTI0ODA1LCAxMjQ4MDksIAorICAgIDEyNDgxMSwgMTI0ODEzLCAxMjQ4MTYsIDEyNDgyMCwgMTI0ODIyLCAxMjQ4MjYsIDEyNDgyOCwgMTI0ODMwLCAxMjQ4MzUsIAorICAgIDEyNDgzNywgMTI0ODQxLCAxMjQ4NDUsIDEyNDg0OCwgMTI0ODUyLCAxMjQ4NTYsIDEyNDg2MCwgMTI0ODY0LCAxMjQ4NjgsIAorICAgIDEyNDg3MiwgMTI0ODc2LCAxMjQ4ODEsIDEyNDg4NSwgMTI0ODg5LCAxMjQ4OTgsIDEyNDkwMywgMTI0OTA2LCAxMjQ5MDgsIAorICAgIDEyNDkxMSwgMTI0OTE0LCAxMjQ5MTksIDEyNDkyMSwgMTI0OTI0LCAxMjQ5MjksIDEyNDkzMywgMTI0OTM2LCAxMjQ5NDAsIAorICAgIDEyNDk0NCwgMTI0OTQ3LCAxMjQ5NTIsIDEyNDk1NiwgMTI0OTYwLCAxMjQ5NjQsIDEyNDk2OCwgMTI0OTc0LCAxMjQ5ODAsIAorICAgIDEyNDk4NiwgMTI0OTkyLCAxMjQ5OTcsIDEyNTAwOCwgMTI1MDEwLCAxMjUwMTQsIDEyNTAxNiwgMTI1MDE4LCAxMjUwMjIsIAorICAgIDEyNTAyNiwgMTI1MDI4LCAxMjUwMzIsIDEyNTAzNywgMTI1MDQyLCAxMjUwNDgsIDEyNTA1MCwgMTI1MDU0LCAxMjUwNTgsIAorICAgIDEyNTA2NSwgMTI1MDcyLCAxMjUwNzYsIDEyNTA3OCwgMTI1MDgwLCAxMjUwODQsIDEyNTA4NiwgMTI1MDkwLCAxMjUwOTQsIAorICAgIDEyNTA5OCwgMTI1MTAwLCAxMjUxMDIsIDEyNTEwOSwgMTI1MTEzLCAxMjUxMTYsIDEyNTEyMCwgMTI1MTI0LCAxMjUxMjgsIAorICAgIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzYsIDEyNTEzOCwgMTI1MTQyLCAxMjUxNDQsIDEyNTE0OCwgMTI1MTUyLCAxMjUxNTgsIAorICAgIDEyNTE2MiwgMTI1MTY2LCAxMjUxNzAsIDEyNTE3MiwgMTI1MTc1LCAxMjUxNzksIDEyNTE4NiwgMTI1MTk1LCAxMjUyMDQsIAorICAgIDEyNTIxMiwgMTI1MjIwLCAxMjUyMjIsIDEyNTIyNiwgMTI1MjI4LCAxMjUyMzIsIDEyNTI0MywgMTI1MjQ3LCAxMjUyNTMsIAorICAgIDEyNTI1OSwgMTI1MjY0LCAwLCAxMjUyNjYsIDEyNTI3MCwgMTI1MjcyLCAxMjUyNzQsIDAsIDAsIDAsIDEyNTI3NiwgCisgICAgMTI1MjgxLCAxMjUyOTEsIDEyNTMwNiwgMTI1MzE4LCAxMjUzMzAsIDEyNTMzNCwgMTI1MzM4LCAxMjUzNDQsIDEyNTM0NiwgCisgICAgMTI1MzU0LCAxMjUzNjIsIDEyNTM2NCwgMTI1MzY4LCAxMjUzNzQsIDEyNTM4MCwgMTI1Mzg3LCAxMjUzOTQsIDEyNTM5NiwgCisgICAgMTI1Mzk4LCAxMjU0MDEsIDEyNTQwMywgMTI1NDA5LCAxMjU0MTEsIDEyNTQxNCwgMTI1NDE4LCAxMjU0MjQsIDEyNTQzMCwgCisgICAgMTI1NDQxLCAxMjU0NDcsIDEyNTQ1NCwgMTI1NDYyLCAxMjU0NjYsIDEyNTQ3NCwgMTI1NDgyLCAxMjU0ODgsIDEyNTQ5NCwgCisgICAgMTI1NTAxLCAxMjU1MDMsIDEyNTUwNywgMTI1NTA5LCAxMjU1MTEsIDEyNTUxNiwgMTI1NTE4LCAxMjU1MjAsIDEyNTUyMiwgCisgICAgMTI1NTI0LCAxMjU1MjgsIDEyNTUzOSwgMTI1NTQ1LCAxMjU1NDksIDEyNTU1MywgMTI1NTU3LCAxMjU1NjMsIDEyNTU2OSwgCisgICAgMTI1NTc1LCAxMjU1ODEsIDEyNTU4NiwgMTI1NTkxLCAxMjU1OTcsIDEyNTYwMywgMTI1NjEwLCAwLCAwLCAxMjU2MTcsIAorICAgIDEyNTYyMiwgMTI1NjMwLCAxMjU2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTY0MywgCisgICAgMTI1NjUwLCAxMjU2NTcsIDEyNTY2NCwgMTI1NjcyLCAxMjU2ODAsIDEyNTY4OCwgMTI1Njk2LCAxMjU3MDQsIDEyNTcxMiwgCisgICAgMTI1NzIwLCAxMjU3MjgsIDEyNTczNiwgMTI1NzQyLCAxMjU3NDgsIDEyNTc1NCwgMTI1NzYwLCAxMjU3NjYsIDEyNTc3MiwgCisgICAgMTI1Nzc4LCAxMjU3ODQsIDEyNTc5MCwgMTI1Nzk2LCAxMjU4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTc4MCwgCi0gICAgMTI1Nzg0LCAxMjU3ODgsIDEyNTc5MywgMTI1Nzk4LCAxMjU4MDAsIDEyNTgwNCwgMTI1ODEzLCAxMjU4MjEsIDEyNTgyOSwgCi0gICAgMTI1ODQyLCAxMjU4NTUsIDEyNTg2OCwgMTI1ODc1LCAxMjU4ODIsIDEyNTg4NiwgMTI1ODk1LCAxMjU5MDMsIDEyNTkwNywgCi0gICAgMTI1OTE2LCAxMjU5MjMsIDEyNTkyNywgMTI1OTMxLCAxMjU5MzUsIDEyNTkzOSwgMTI1OTQ2LCAxMjU5NTAsIDEyNTk1NCwgCi0gICAgMTI1OTU4LCAxMjU5NjIsIDEyNTk2OSwgMTI1OTc4LCAxMjU5ODcsIDEyNTk5NCwgMTI2MDA2LCAxMjYwMTgsIDEyNjAyMiwgCi0gICAgMTI2MDI2LCAxMjYwMzAsIDEyNjAzNCwgMTI2MDM4LCAxMjYwNDIsIDEyNjA1MCwgMTI2MDU4LCAxMjYwNjYsIDEyNjA3MCwgCi0gICAgMTI2MDc0LCAxMjYwNzgsIDEyNjA4MiwgMTI2MDg2LCAxMjYwOTAsIDEyNjA5NiwgMTI2MTAyLCAxMjYxMDYsIDEyNjExNywgCi0gICAgMTI2MTI1LCAxMjYxMjksIDEyNjEzMywgMTI2MTM3LCAxMjYxNDEsIDEyNjE0NywgMTI2MTU0LCAxMjYxNjUsIDEyNjE3NSwgCi0gICAgMTI2MTg1LCAxMjYxOTYsIDEyNjIwNSwgMTI2MjE2LCAxMjYyMjIsIDEyNjIyOCwgMCwgMCwgMCwgMCwgMTI2MjM0LCAKLSAgICAxMjYyNDMsIDEyNjI1MCwgMTI2MjU2LCAxMjYyNjAsIDEyNjI2NCwgMTI2MjY4LCAxMjYyNzcsIDEyNjI4OSwgMTI2MjkzLCAKLSAgICAxMjYzMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTgwOCwgMTI1ODEyLCAxMjU4MTYsIAorICAgIDEyNTgyMSwgMTI1ODI2LCAxMjU4MjgsIDEyNTgzMiwgMTI1ODQxLCAxMjU4NDksIDEyNTg1NywgMTI1ODcwLCAxMjU4ODMsIAorICAgIDEyNTg5NiwgMTI1OTAzLCAxMjU5MTAsIDEyNTkxNCwgMTI1OTIzLCAxMjU5MzEsIDEyNTkzNSwgMTI1OTQ0LCAxMjU5NTEsIAorICAgIDEyNTk1NSwgMTI1OTU5LCAxMjU5NjMsIDEyNTk2NywgMTI1OTc0LCAxMjU5NzgsIDEyNTk4MiwgMTI1OTg2LCAxMjU5OTAsIAorICAgIDEyNTk5NywgMTI2MDA2LCAxMjYwMTUsIDEyNjAyMiwgMTI2MDM0LCAxMjYwNDYsIDEyNjA1MCwgMTI2MDU0LCAxMjYwNTgsIAorICAgIDEyNjA2MiwgMTI2MDY2LCAxMjYwNzAsIDEyNjA3OCwgMTI2MDg2LCAxMjYwOTQsIDEyNjA5OCwgMTI2MTAyLCAxMjYxMDYsIAorICAgIDEyNjExMCwgMTI2MTE0LCAxMjYxMTgsIDEyNjEyNCwgMTI2MTMwLCAxMjYxMzQsIDEyNjE0NSwgMTI2MTUzLCAxMjYxNTcsIAorICAgIDEyNjE2MSwgMTI2MTY1LCAxMjYxNjksIDEyNjE3NSwgMTI2MTgyLCAxMjYxOTMsIDEyNjIwMywgMTI2MjEzLCAxMjYyMjQsIAorICAgIDEyNjIzMywgMTI2MjQ0LCAxMjYyNTAsIDEyNjI1NiwgMCwgMCwgMCwgMCwgMTI2MjYyLCAxMjYyNzEsIDEyNjI3OCwgCisgICAgMTI2Mjg0LCAxMjYyODgsIDEyNjI5MiwgMTI2Mjk2LCAxMjYzMDUsIDEyNjMxNywgMTI2MzIxLCAxMjYzMjgsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEyNjMwNywgMTI2MzA5LCAxMjYzMTEsIDEyNjMxNSwgMTI2MzE5LCAxMjYzMjMsIDEyNjMzMiwgMTI2MzM0LCAKLSAgICAxMjYzMzYsIDEyNjMzOSwgMTI2MzQxLCAxMjYzNDMsIDEyNjM0NywgMTI2MzQ5LCAxMjYzNTMsIDEyNjM1NSwgMTI2MzU5LCAKLSAgICAxMjYzNjEsIDEyNjM2MywgMTI2MzY3LCAxMjYzNzEsIDEyNjM3NywgMTI2Mzc5LCAxMjYzODMsIDEyNjM4NSwgMTI2Mzg5LCAKLSAgICAxMjYzOTMsIDEyNjM5NywgMTI2NDAxLCAxMjY0MDMsIDEyNjQwNSwgMTI2NDA5LCAxMjY0MTMsIDEyNjQxNywgMTI2NDIxLCAKLSAgICAxMjY0MjMsIDEyNjQyNSwgMTI2NDI3LCAxMjY0MzIsIDEyNjQzNywgMTI2NDQwLCAxMjY0NDgsIDEyNjQ1NiwgMTI2NDU4LCAKLSAgICAxMjY0NjMsIDEyNjQ2NiwgMTI2NDcxLCAxMjY0ODIsIDEyNjQ4OSwgMTI2NDk0LCAxMjY0OTksIDEyNjUwMSwgMTI2NTA1LCAKLSAgICAxMjY1MDcsIDEyNjUxMSwgMTI2NTEzLCAxMjY1MTcsIDEyNjUyMSwgMTI2NTI0LCAxMjY1MjcsIDEyNjUyOSwgMTI2NTMyLCAKLSAgICAxMjY1MzQsIDEyNjUzOCwgMTI2NTQwLCAxMjY1NDIsIDEyNjU0NCwgMTI2NTQ4LCAxMjY1NTAsIDEyNjU1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MzM1LCAKKyAgICAxMjYzMzcsIDEyNjMzOSwgMTI2MzQzLCAxMjYzNDcsIDEyNjM1MSwgMTI2MzYwLCAxMjYzNjIsIDEyNjM2NCwgMTI2MzY3LCAKKyAgICAxMjYzNjksIDEyNjM3MSwgMTI2Mzc1LCAxMjYzNzcsIDEyNjM4MSwgMTI2MzgzLCAxMjYzODcsIDEyNjM4OSwgMTI2MzkxLCAKKyAgICAxMjYzOTUsIDEyNjM5OSwgMTI2NDA1LCAxMjY0MDcsIDEyNjQxMSwgMTI2NDEzLCAxMjY0MTcsIDEyNjQyMSwgMTI2NDI1LCAKKyAgICAxMjY0MjksIDEyNjQzMSwgMTI2NDMzLCAxMjY0MzcsIDEyNjQ0MSwgMTI2NDQ1LCAxMjY0NDksIDEyNjQ1MSwgMTI2NDUzLCAKKyAgICAxMjY0NTUsIDEyNjQ2MCwgMTI2NDY1LCAxMjY0NjgsIDEyNjQ3NiwgMTI2NDg0LCAxMjY0ODYsIDEyNjQ5MSwgMTI2NDk0LCAKKyAgICAxMjY0OTksIDEyNjUxMCwgMTI2NTE3LCAxMjY1MjIsIDEyNjUyNywgMTI2NTI5LCAxMjY1MzMsIDEyNjUzNSwgMTI2NTM5LCAKKyAgICAxMjY1NDEsIDEyNjU0NSwgMTI2NTQ5LCAxMjY1NTIsIDEyNjU1NSwgMTI2NTU3LCAxMjY1NjAsIDEyNjU2MiwgMTI2NTY2LCAKKyAgICAxMjY1NjgsIDEyNjU3MCwgMTI2NTcyLCAxMjY1NzYsIDEyNjU3OCwgMTI2NTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjY1NTcsIDEyNjU2MiwgMTI2NTY3LCAxMjY1NzIsIDEyNjU3NywgMTI2NTgyLCAKLSAgICAxMjY1ODcsIDEyNjU5NCwgMTI2NjAxLCAxMjY2MDgsIDEyNjYxNSwgMTI2NjIwLCAxMjY2MjUsIDEyNjYzMCwgMTI2NjM1LCAKLSAgICAxMjY2NDIsIDEyNjY0OCwgMTI2NjU1LCAxMjY2NjIsIDEyNjY2OSwgMTI2Njc0LCAxMjY2NzksIDEyNjY4NCwgMTI2Njg5LCAKLSAgICAxMjY2OTQsIDEyNjcwMSwgMTI2NzA4LCAxMjY3MTMsIDEyNjcxOCwgMTI2NzI1LCAxMjY3MzIsIDEyNjc0MCwgMTI2NzQ4LCAKLSAgICAxMjY3NTUsIDEyNjc2MiwgMTI2NzcwLCAxMjY3NzgsIDEyNjc4NiwgMTI2NzkzLCAxMjY4MDMsIDEyNjgxNCwgMTI2ODE5LCAKLSAgICAxMjY4MjYsIDEyNjgzMywgMTI2ODQwLCAxMjY4NDgsIDEyNjg1NiwgMTI2ODY3LCAxMjY4NzUsIDEyNjg4MywgMTI2ODkxLCAKLSAgICAxMjY4OTYsIDEyNjkwMSwgMTI2OTA2LCAxMjY5MTEsIDEyNjkxNiwgMTI2OTIxLCAxMjY5MjYsIDEyNjkzMSwgMTI2OTM2LCAKLSAgICAxMjY5NDEsIDEyNjk0NiwgMTI2OTUxLCAxMjY5NTgsIDEyNjk2MywgMTI2OTY4LCAxMjY5NzUsIDEyNjk4MCwgMTI2OTg1LCAKLSAgICAxMjY5OTAsIDEyNjk5NSwgMTI3MDAwLCAxMjcwMDUsIDEyNzAxMCwgMTI3MDE1LCAxMjcwMjAsIDEyNzAyNSwgMTI3MDMwLCAKLSAgICAxMjcwMzUsIDEyNzA0MiwgMTI3MDUwLCAxMjcwNTUsIDEyNzA2MCwgMTI3MDY3LCAxMjcwNzIsIDEyNzA3NywgMTI3MDgyLCAKLSAgICAxMjcwODksIDEyNzA5NCwgMTI3MTAxLCAxMjcxMDYsIDEyNzExMywgMTI3MTE4LCAxMjcxMjcsIDEyNzEzNiwgMTI3MTQxLCAKLSAgICAxMjcxNDYsIDEyNzE1MSwgMTI3MTU2LCAxMjcxNjEsIDEyNzE2NiwgMTI3MTcxLCAxMjcxNzYsIDEyNzE4MSwgMTI3MTg2LCAKLSAgICAxMjcxOTEsIDEyNzE5NiwgMTI3MjAxLCAxMjcyMDksIDEyNzIxNywgMTI3MjIyLCAxMjcyMjcsIDEyNzIzMiwgMTI3MjM3LCAKLSAgICAxMjcyNDIsIDEyNzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjU0LCAxMjcyNTgsIAotICAgIDEyNzI2MiwgMTI3MjY2LCAxMjcyNzAsIDEyNzI3NCwgMTI3Mjc4LCAxMjcyODIsIDEyNzI4NiwgMTI3MjkwLCAxMjcyOTQsIAorICAgIDAsIDAsIDEyNjU4NSwgMTI2NTkwLCAxMjY1OTUsIDEyNjYwMCwgMTI2NjA1LCAxMjY2MTAsIDEyNjYxNSwgMTI2NjIyLCAKKyAgICAxMjY2MjksIDEyNjYzNiwgMTI2NjQzLCAxMjY2NDgsIDEyNjY1MywgMTI2NjU4LCAxMjY2NjMsIDEyNjY3MCwgMTI2Njc2LCAKKyAgICAxMjY2ODMsIDEyNjY5MCwgMTI2Njk3LCAxMjY3MDIsIDEyNjcwNywgMTI2NzEyLCAxMjY3MTcsIDEyNjcyMiwgMTI2NzI5LCAKKyAgICAxMjY3MzYsIDEyNjc0MSwgMTI2NzQ2LCAxMjY3NTMsIDEyNjc2MCwgMTI2NzY4LCAxMjY3NzYsIDEyNjc4MywgMTI2NzkwLCAKKyAgICAxMjY3OTgsIDEyNjgwNiwgMTI2ODE0LCAxMjY4MjEsIDEyNjgzMSwgMTI2ODQyLCAxMjY4NDcsIDEyNjg1NCwgMTI2ODYxLCAKKyAgICAxMjY4NjgsIDEyNjg3NiwgMTI2ODg0LCAxMjY4OTUsIDEyNjkwMywgMTI2OTExLCAxMjY5MTksIDEyNjkyNCwgMTI2OTI5LCAKKyAgICAxMjY5MzQsIDEyNjkzOSwgMTI2OTQ0LCAxMjY5NDksIDEyNjk1NCwgMTI2OTU5LCAxMjY5NjQsIDEyNjk2OSwgMTI2OTc0LCAKKyAgICAxMjY5NzksIDEyNjk4NiwgMTI2OTkxLCAxMjY5OTYsIDEyNzAwMywgMTI3MDA4LCAxMjcwMTMsIDEyNzAxOCwgMTI3MDIzLCAKKyAgICAxMjcwMjgsIDEyNzAzMywgMTI3MDM4LCAxMjcwNDMsIDEyNzA0OCwgMTI3MDUzLCAxMjcwNTgsIDEyNzA2MywgMTI3MDcwLCAKKyAgICAxMjcwNzgsIDEyNzA4MywgMTI3MDg4LCAxMjcwOTUsIDEyNzEwMCwgMTI3MTA1LCAxMjcxMTAsIDEyNzExNywgMTI3MTIyLCAKKyAgICAxMjcxMjksIDEyNzEzNCwgMTI3MTQxLCAxMjcxNDYsIDEyNzE1NSwgMTI3MTY0LCAxMjcxNjksIDEyNzE3NCwgMTI3MTc5LCAKKyAgICAxMjcxODQsIDEyNzE4OSwgMTI3MTk0LCAxMjcxOTksIDEyNzIwNCwgMTI3MjA5LCAxMjcyMTQsIDEyNzIxOSwgMTI3MjI0LCAKKyAgICAxMjcyMjksIDEyNzIzNywgMTI3MjQ1LCAxMjcyNTAsIDEyNzI1NSwgMTI3MjYwLCAxMjcyNjUsIDEyNzI3MCwgMTI3Mjc2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcyODIsIDEyNzI4NiwgMTI3MjkwLCAxMjcyOTQsIAogICAgIDEyNzI5OCwgMTI3MzAyLCAxMjczMDYsIDEyNzMxMCwgMTI3MzE0LCAxMjczMTgsIDEyNzMyMiwgMTI3MzI2LCAxMjczMzAsIAogICAgIDEyNzMzNCwgMTI3MzM4LCAxMjczNDIsIDEyNzM0NiwgMTI3MzUwLCAxMjczNTQsIDEyNzM1OCwgMTI3MzYyLCAxMjczNjYsIAogICAgIDEyNzM3MCwgMTI3Mzc0LCAxMjczNzgsIDEyNzM4MiwgMTI3Mzg2LCAxMjczOTAsIDEyNzM5NCwgMTI3Mzk4LCAxMjc0MDIsIApAQCAtMTY5MzUsMTc3ICsxNjk1MiwxNzkgQEAKICAgICAxMjkzMTQsIDEyOTMxOCwgMTI5MzIyLCAxMjkzMjYsIDEyOTMzMCwgMTI5MzM0LCAxMjkzMzgsIDEyOTM0MiwgMTI5MzQ2LCAKICAgICAxMjkzNTAsIDEyOTM1NCwgMTI5MzU4LCAxMjkzNjIsIDEyOTM2NiwgMTI5MzcwLCAxMjkzNzQsIDEyOTM3OCwgMTI5MzgyLCAKICAgICAxMjkzODYsIDEyOTM5MCwgMTI5Mzk0LCAxMjkzOTgsIDEyOTQwMiwgMTI5NDA2LCAxMjk0MTAsIDEyOTQxNCwgMTI5NDE4LCAKKyAgICAxMjk0MjIsIDEyOTQyNiwgMTI5NDMwLCAxMjk0MzQsIDEyOTQzOCwgMTI5NDQyLCAxMjk0NDYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTQ1MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI5NDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk0MjYsIDEyOTQyOSwgMTI5NDMzLCAxMjk0MzcsIDEyOTQ0MCwgCi0gICAgMTI5NDQ0LCAxMjk0NDgsIDEyOTQ1MSwgMTI5NDU0LCAxMjk0NTgsIDEyOTQ2MiwgMTI5NDY1LCAxMjk0NjgsIDEyOTQ3MSwgCi0gICAgMTI5NDc0LCAxMjk0NzksIDEyOTQ4MiwgMTI5NDg2LCAxMjk0ODksIDEyOTQ5MiwgMTI5NDk1LCAxMjk0OTgsIDEyOTUwMSwgCi0gICAgMTI5NTA0LCAxMjk1MDcsIDEyOTUxMCwgMTI5NTEzLCAxMjk1MTYsIDEyOTUxOSwgMTI5NTIzLCAxMjk1MjcsIDEyOTUzMSwgCi0gICAgMTI5NTM1LCAxMjk1NDAsIDEyOTU0NSwgMTI5NTUxLCAxMjk1NTcsIDEyOTU2MywgMTI5NTY4LCAxMjk1NzQsIDEyOTU4MCwgCi0gICAgMTI5NTg2LCAxMjk1OTEsIDEyOTU5NywgMTI5NjAzLCAxMjk2MDgsIDEyOTYxMywgMTI5NjE5LCAxMjk2MjQsIDEyOTYzMCwgCi0gICAgMTI5NjM2LCAxMjk2NDEsIDEyOTY0NywgMTI5NjUzLCAxMjk2NTgsIDEyOTY2NCwgMTI5NjcwLCAxMjk2NzYsIDEyOTY4MiwgCi0gICAgMTI5Njg4LCAxMjk2OTIsIDEyOTY5NywgMTI5NzAxLCAxMjk3MDYsIDEyOTcxMCwgMTI5NzE1LCAxMjk3MjAsIDEyOTcyNiwgCi0gICAgMTI5NzMyLCAxMjk3MzgsIDEyOTc0MywgMTI5NzQ5LCAxMjk3NTUsIDEyOTc2MSwgMTI5NzY2LCAxMjk3NzIsIDEyOTc3OCwgCi0gICAgMTI5NzgzLCAxMjk3ODgsIDEyOTc5NCwgMTI5Nzk5LCAxMjk4MDUsIDEyOTgxMSwgMTI5ODE2LCAxMjk4MjIsIDEyOTgyOCwgCi0gICAgMTI5ODMzLCAxMjk4MzksIDEyOTg0NSwgMTI5ODUxLCAxMjk4NTcsIDEyOTg2MywgMTI5ODY4LCAxMjk4NzIsIDEyOTg3NywgCi0gICAgMTI5ODc5LCAxMjk4ODMsIDEyOTg4NiwgMTI5ODg5LCAxMjk4OTIsIDEyOTg5NSwgMTI5ODk4LCAxMjk5MDEsIDEyOTkwNCwgCi0gICAgMTI5OTA3LCAxMjk5MTAsIDEyOTkxMywgMTI5OTE2LCAxMjk5MTksIDEyOTkyMiwgMTI5OTI1LCAxMjk5MjgsIDEyOTkzMSwgCi0gICAgMTI5OTM0LCAxMjk5MzcsIDEyOTk0MCwgMTI5OTQzLCAxMjk5NDYsIDEyOTk0OSwgMTI5OTUyLCAxMjk5NTUsIDEyOTk1OCwgCi0gICAgMTI5OTYxLCAxMjk5NjQsIDEyOTk2NywgMTI5OTcwLCAxMjk5NzMsIDEyOTk3NiwgMTI5OTc5LCAxMjk5ODIsIDEyOTk4NSwgCi0gICAgMTI5OTg4LCAxMjk5OTEsIDEyOTk5NCwgMTI5OTk3LCAxMzAwMDAsIDEzMDAwMywgMTMwMDA2LCAxMzAwMDksIDEzMDAxMiwgCi0gICAgMTMwMDE1LCAxMzAwMTgsIDEzMDAyMSwgMTMwMDI0LCAxMzAwMjcsIDEzMDAzMCwgMTMwMDMzLCAxMzAwMzYsIDEzMDAzOSwgCi0gICAgMTMwMDQyLCAxMzAwNDUsIDEzMDA0OCwgMTMwMDUxLCAxMzAwNTQsIDEzMDA1NywgMTMwMDYwLCAxMzAwNjMsIDEzMDA2NiwgCi0gICAgMTMwMDY5LCAxMzAwNzIsIDEzMDA3NSwgMTMwMDc4LCAxMzAwODEsIDEzMDA4NCwgMTMwMDg3LCAxMzAwOTAsIDEzMDA5MywgCi0gICAgMTMwMDk2LCAxMzAwOTksIDEzMDEwMiwgMTMwMTA1LCAxMzAxMDgsIDEzMDExMSwgMTMwMTE0LCAxMzAxMTcsIDEzMDEyMCwgCi0gICAgMTMwMTIzLCAxMzAxMjYsIDEzMDEyOSwgMTMwMTMyLCAxMzAxMzUsIDEzMDEzOCwgMTMwMTQxLCAxMzAxNDQsIDEzMDE0NywgCi0gICAgMTMwMTUwLCAxMzAxNTMsIDEzMDE1NiwgMTMwMTU5LCAxMzAxNjIsIDEzMDE2NSwgMTMwMTY4LCAxMzAxNzEsIDEzMDE3NCwgCi0gICAgMTMwMTc3LCAxMzAxODAsIDEzMDE4MywgMTMwMTg2LCAxMzAxODksIDEzMDE5MiwgMTMwMTk1LCAxMzAxOTgsIDEzMDIwMSwgCi0gICAgMTMwMjA0LCAxMzAyMDcsIDEzMDIxMCwgMTMwMjEzLCAxMzAyMTYsIDEzMDIxOSwgMTMwMjIyLCAxMzAyMjUsIDEzMDIyOCwgCi0gICAgMTMwMjMxLCAxMzAyMzQsIDEzMDIzNywgMTMwMjQwLCAxMzAyNDMsIDEzMDI0NiwgMTMwMjQ5LCAxMzAyNTIsIDEzMDI1NSwgCi0gICAgMTMwMjU4LCAxMzAyNjEsIDEzMDI2NCwgMTMwMjY3LCAxMzAyNzAsIDEzMDI3MywgMTMwMjc2LCAxMzAyNzksIDEzMDI4MiwgCi0gICAgMTMwMjg1LCAxMzAyODgsIDEzMDI5MSwgMTMwMjk0LCAxMzAyOTcsIDEzMDMwMCwgMTMwMzAzLCAxMzAzMDYsIDEzMDMwOSwgCi0gICAgMTMwMzEyLCAxMzAzMTUsIDEzMDMxOCwgMTMwMzIxLCAxMzAzMjQsIDEzMDMyNywgMTMwMzMwLCAxMzAzMzMsIDEzMDMzNiwgCi0gICAgMTMwMzM5LCAxMzAzNDIsIDEzMDM0NSwgMTMwMzQ4LCAxMzAzNTEsIDEzMDM1NCwgMTMwMzU3LCAxMzAzNjAsIDEzMDM2MywgCi0gICAgMTMwMzY2LCAxMzAzNjksIDEzMDM3MiwgMTMwMzc1LCAxMzAzNzgsIDEzMDM4MSwgMTMwMzg0LCAxMzAzODcsIDEzMDM5MCwgCi0gICAgMTMwMzkzLCAxMzAzOTYsIDEzMDM5OSwgMTMwNDAyLCAxMzA0MDUsIDEzMDQwOCwgMTMwNDExLCAxMzA0MTQsIDEzMDQxNywgCi0gICAgMTMwNDIwLCAxMzA0MjMsIDEzMDQyNiwgMTMwNDI5LCAxMzA0MzIsIDEzMDQzNSwgMTMwNDM4LCAxMzA0NDEsIDEzMDQ0NCwgCi0gICAgMTMwNDQ3LCAxMzA0NTAsIDEzMDQ1MywgMTMwNDU2LCAxMzA0NTksIDEzMDQ2MiwgMTMwNDY1LCAxMzA0NjgsIDEzMDQ3MSwgCi0gICAgMTMwNDc0LCAxMzA0NzcsIDEzMDQ4MCwgMTMwNDgzLCAxMzA0ODYsIDEzMDQ4OSwgMTMwNDkyLCAxMzA0OTUsIDEzMDQ5OCwgCi0gICAgMTMwNTAxLCAxMzA1MDQsIDEzMDUwNywgMTMwNTEwLCAxMzA1MTMsIDEzMDUxNiwgMTMwNTE5LCAxMzA1MjIsIDEzMDUyNSwgCi0gICAgMTMwNTI4LCAxMzA1MzEsIDEzMDUzNCwgMTMwNTM3LCAxMzA1NDAsIDEzMDU0MywgMTMwNTQ2LCAxMzA1NDksIDEzMDU1MiwgCi0gICAgMTMwNTU1LCAxMzA1NTgsIDEzMDU2MSwgMTMwNTY0LCAxMzA1NjcsIDEzMDU3MCwgMTMwNTczLCAxMzA1NzYsIDEzMDU3OSwgCi0gICAgMTMwNTgyLCAxMzA1ODUsIDEzMDU4OCwgMTMwNTkxLCAxMzA1OTQsIDEzMDU5NywgMTMwNjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzA2MDMsIDEzMDYwNSwgMTMwNjA3LCAxMzA2MTIsIDEzMDYxNCwgCi0gICAgMTMwNjE5LCAxMzA2MjEsIDEzMDYyNiwgMTMwNjI4LCAxMzA2MzMsIDEzMDYzNSwgMTMwNjM3LCAxMzA2MzksIDEzMDY0MSwgCi0gICAgMTMwNjQzLCAxMzA2NDUsIDEzMDY0NywgMTMwNjQ5LCAxMzA2NTEsIDEzMDY1NCwgMTMwNjU3LCAxMzA2NTksIDEzMDY2MSwgCi0gICAgMTMwNjY1LCAxMzA2NjgsIDEzMDY3MywgMTMwNjc1LCAxMzA2NzcsIDEzMDY3OSwgMTMwNjgzLCAxMzA2ODYsIDEzMDY4OCwgCi0gICAgMTMwNjkyLCAxMzA2OTQsIDEzMDY5OCwgMTMwNzAwLCAxMzA3MDQsIDEzMDcwNywgMTMwNzA5LCAxMzA3MTMsIDEzMDcxNywgCi0gICAgMTMwNzE5LCAxMzA3MjUsIDEzMDcyNywgMTMwNzMyLCAxMzA3MzQsIDEzMDczOSwgMTMwNzQxLCAxMzA3NDYsIDEzMDc0OCwgCi0gICAgMTMwNzUzLCAxMzA3NTUsIDEzMDc1OCwgMTMwNzYwLCAxMzA3NjQsIDEzMDc2NiwgMTMwNzczLCAxMzA3NzUsIDEzMDc3NywgCi0gICAgMTMwNzc5LCAxMzA3ODQsIDEzMDc4NiwgMTMwNzg4LCAxMzA3OTAsIDEzMDc5MiwgMTMwNzk0LCAxMzA3OTksIDEzMDgwMywgCi0gICAgMTMwODA1LCAxMzA4MTAsIDEzMDgxNCwgMTMwODE2LCAxMzA4MjEsIDEzMDgyNSwgMTMwODI3LCAxMzA4MzIsIDEzMDgzNiwgCi0gICAgMTMwODM4LCAxMzA4NDAsIDEzMDg0MiwgMTMwODQ0LCAxMzA4NDgsIDEzMDg1MCwgMTMwODU1LCAxMzA4NTcsIDEzMDg2MywgCi0gICAgMTMwODY1LCAxMzA4NzEsIDEzMDg3MywgMTMwODc1LCAxMzA4NzcsIDEzMDg4MSwgMTMwODgzLCAxMzA4OTAsIDEzMDg5MiwgCi0gICAgMTMwODk5LCAxMzA5MDEsIDEzMDkwNiwgMTMwOTExLCAxMzA5MTMsIDEzMDkxOSwgMTMwOTI1LCAxMzA5MjcsIDEzMDkzMywgCi0gICAgMTMwOTM4LCAxMzA5NDAsIDEzMDk0NiwgMTMwOTUyLCAxMzA5NTQsIDEzMDk2MCwgMTMwOTY2LCAxMzA5NjgsIDEzMDk3NCwgCi0gICAgMTMwOTc4LCAxMzA5ODAsIDEzMDk4NSwgMTMwOTg3LCAxMzA5ODksIDEzMDk5NCwgMTMwOTk2LCAxMzA5OTgsIDEzMTAwNCwgCi0gICAgMTMxMDA2LCAxMzEwMTEsIDEzMTAxNSwgMTMxMDE3LCAxMzEwMjIsIDEzMTAyNiwgMTMxMDI4LCAxMzEwMzQsIDEzMTAzNiwgCi0gICAgMTMxMDQwLCAxMzEwNDIsIDEzMTA0NiwgMTMxMDQ4LCAxMzEwNTUsIDEzMTA2MiwgMTMxMDY0LCAxMzEwNzEsIDEzMTA3OCwgCi0gICAgMTMxMDgwLCAxMzEwODUsIDEzMTA4NywgMTMxMDk0LCAxMzEwOTYsIDEzMTEwMSwgMTMxMTAzLCAxMzExMDksIDEzMTExMSwgCi0gICAgMTMxMTE1LCAxMzExMTcsIDEzMTEyMywgMTMxMTI1LCAxMzExMjksIDEzMTEzMSwgMTMxMTM3LCAxMzExMzksIDEzMTE0MSwgCi0gICAgMTMxMTQzLCAxMzExNDgsIDEzMTE1MywgMTMxMTU1LCAxMzExNTksIDEzMTE2NiwgMTMxMTczLCAxMzExNzgsIDEzMTE4MywgCi0gICAgMTMxMTk1LCAxMzExOTcsIDEzMTE5OSwgMTMxMjAxLCAxMzEyMDMsIDEzMTIwNSwgMTMxMjA3LCAxMzEyMDksIDEzMTIxMSwgCi0gICAgMTMxMjEzLCAxMzEyMTUsIDEzMTIxNywgMTMxMjE5LCAxMzEyMjEsIDEzMTIyMywgMTMxMjI1LCAxMzEyMjcsIDEzMTIyOSwgCi0gICAgMTMxMjM1LCAxMzEyNDIsIDEzMTI0NywgMTMxMjUyLCAxMzEyNjMsIDEzMTI2NSwgMTMxMjY3LCAxMzEyNjksIDEzMTI3MSwgCi0gICAgMTMxMjczLCAxMzEyNzUsIDEzMTI3NywgMTMxMjc5LCAxMzEyODEsIDEzMTI4MywgMTMxMjg1LCAxMzEyODcsIDEzMTI4OSwgCi0gICAgMTMxMjkxLCAxMzEyOTMsIDEzMTI5NSwgMTMxMzAwLCAxMzEzMDIsIDEzMTMwNCwgMTMxMzE1LCAxMzEzMTcsIDEzMTMxOSwgCi0gICAgMTMxMzIxLCAxMzEzMjMsIDEzMTMyNSwgMTMxMzI3LCAxMzEzMjksIDEzMTMzMSwgMTMxMzMzLCAxMzEzMzUsIDEzMTMzNywgCi0gICAgMTMxMzM5LCAxMzEzNDEsIDEzMTM0MywgMTMxMzQ1LCAxMzEzNDcsIDEzMTM0OSwgMTMxMzUxLCAxMzEzNTMsIDEzMTM1NSwgCi0gICAgMTMxMzU3LCAxMzEzNTksIDEzMTM2MSwgMTMxMzYzLCAxMzEzNjUsIDEzMTM2NywgMTMxMzY5LCAxMzEzNzEsIDEzMTM3MywgCi0gICAgMTMxMzc1LCAxMzEzNzcsIDEzMTM3OSwgMTMxMzgxLCAxMzEzODMsIDEzMTM4NSwgMTMxMzg3LCAxMzEzODksIDEzMTM5MSwgCi0gICAgMTMxMzkzLCAxMzEzOTUsIDEzMTM5NywgMTMxMzk5LCAxMzE0MDEsIDEzMTQwMywgMTMxNDA1LCAxMzE0MDcsIDEzMTQwOSwgCi0gICAgMTMxNDExLCAxMzE0MTMsIDEzMTQxNSwgMTMxNDE3LCAxMzE0MTksIDEzMTQyMSwgMTMxNDIzLCAxMzE0MjUsIDEzMTQyNywgCi0gICAgMTMxNDI5LCAxMzE0MzEsIDEzMTQzMywgMTMxNDM1LCAxMzE0MzcsIDEzMTQzOSwgMTMxNDQxLCAxMzE0NDMsIDEzMTQ0NSwgCi0gICAgMTMxNDQ3LCAxMzE0NDksIDEzMTQ1MSwgMTMxNDUzLCAxMzE0NTUsIDEzMTQ1NywgMTMxNDU5LCAxMzE0NjEsIDEzMTQ2MywgCi0gICAgMTMxNDY1LCAxMzE0NjcsIDEzMTQ2OSwgMTMxNDcxLCAxMzE0NzMsIDEzMTQ3NSwgMTMxNDc3LCAxMzE0NzksIDEzMTQ4MSwgCi0gICAgMTMxNDgzLCAxMzE0ODUsIDEzMTQ4NywgMTMxNDg5LCAxMzE0OTEsIDEzMTQ5MywgMTMxNDk1LCAxMzE0OTcsIDEzMTQ5OSwgCi0gICAgMTMxNTAxLCAxMzE1MDMsIDEzMTUwNSwgMTMxNTA3LCAxMzE1MDksIDEzMTUxMSwgMTMxNTEzLCAxMzE1MTUsIDEzMTUxNywgCi0gICAgMTMxNTE5LCAxMzE1MjEsIDEzMTUyMywgMTMxNTI1LCAxMzE1MjcsIDEzMTUyOSwgMTMxNTMxLCAxMzE1MzMsIDEzMTUzNSwgCi0gICAgMTMxNTM3LCAxMzE1MzksIDEzMTU0MSwgMTMxNTQzLCAxMzE1NDUsIDEzMTU0NywgMTMxNTQ5LCAxMzE1NTEsIDEzMTU1MywgCi0gICAgMTMxNTU1LCAxMzE1NTcsIDEzMTU1OSwgMTMxNTYxLCAxMzE1NjMsIDEzMTU2NSwgMTMxNTY3LCAxMzE1NjksIDEzMTU3MSwgCi0gICAgMTMxNTczLCAxMzE1NzUsIDEzMTU3NywgMTMxNTc5LCAxMzE1ODEsIDEzMTU4MywgMTMxNTg1LCAxMzE1ODcsIDEzMTU4OSwgCi0gICAgMTMxNTkxLCAxMzE1OTMsIDEzMTU5NSwgMTMxNTk3LCAxMzE1OTksIDEzMTYwMSwgMTMxNjAzLCAxMzE2MDUsIDEzMTYwNywgCi0gICAgMTMxNjA5LCAxMzE2MTEsIDEzMTYxMywgMTMxNjE1LCAxMzE2MTcsIDEzMTYxOSwgMTMxNjIxLCAxMzE2MjMsIDEzMTYyNSwgCi0gICAgMTMxNjI3LCAxMzE2MjksIDEzMTYzMSwgMTMxNjMzLCAxMzE2MzUsIDEzMTYzNywgMTMxNjM5LCAxMzE2NDEsIDEzMTY0MywgCi0gICAgMTMxNjQ1LCAxMzE2NDcsIDEzMTY0OSwgMTMxNjUxLCAxMzE2NTMsIDEzMTY1NSwgMTMxNjU3LCAxMzE2NTksIDEzMTY2MSwgCi0gICAgMTMxNjYzLCAxMzE2NjUsIDEzMTY2NywgMTMxNjY5LCAxMzE2NzEsIDEzMTY3MywgMTMxNjc1LCAxMzE2NzcsIDEzMTY3OSwgCi0gICAgMTMxNjgxLCAxMzE2ODMsIDEzMTY4NSwgMTMxNjg3LCAxMzE2ODksIDEzMTY5MSwgMTMxNjkzLCAxMzE2OTUsIDEzMTY5NywgCi0gICAgMTMxNjk5LCAxMzE3MDEsIDEzMTcwMywgMTMxNzA1LCAxMzE3MDcsIDEzMTcwOSwgMTMxNzExLCAxMzE3MTMsIDEzMTcxNSwgCi0gICAgMTMxNzE3LCAxMzE3MTksIDEzMTcyMSwgMTMxNzIzLCAxMzE3MjUsIDEzMTcyNywgMTMxNzI5LCAxMzE3MzEsIDEzMTczMywgCi0gICAgMTMxNzM1LCAxMzE3MzcsIDEzMTczOSwgMTMxNzQxLCAxMzE3NDMsIDEzMTc0NSwgMTMxNzQ3LCAxMzE3NDksIDEzMTc1MSwgCi0gICAgMTMxNzUzLCAxMzE3NTUsIDEzMTc1NywgMTMxNzU5LCAxMzE3NjEsIDEzMTc2MywgMTMxNzY1LCAxMzE3NjcsIDEzMTc2OSwgCi0gICAgMTMxNzcxLCAxMzE3NzMsIDEzMTc3NSwgMTMxNzc3LCAxMzE3NzksIDEzMTc4MSwgMTMxNzgzLCAxMzE3ODUsIDEzMTc4NywgCi0gICAgMTMxNzg5LCAxMzE3OTEsIDEzMTc5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTMxNzk1LCAxMzE4MDUsIDEzMTgxNSwgMTMxODI0LCAxMzE4MzMsIDEzMTg0NiwgMTMxODU5LCAxMzE4NzEsIDEzMTg4MywgCi0gICAgMTMxODkzLCAxMzE5MDMsIDEzMTkxMywgMTMxOTIzLCAxMzE5MzQsIDEzMTk0NSwgMTMxOTU1LCAxMzE5NjQsIDEzMTk3MywgCi0gICAgMTMxOTgyLCAxMzE5OTUsIDEzMjAwOCwgMTMyMDIwLCAxMzIwMzIsIDEzMjA0MiwgMTMyMDUyLCAxMzIwNjIsIDEzMjA3MiwgCi0gICAgMTMyMDgxLCAxMzIwOTAsIDEzMjA5OSwgMTMyMTA4LCAxMzIxMTcsIDEzMjEyNiwgMTMyMTM1LCAxMzIxNDQsIDEzMjE1MywgCi0gICAgMTMyMTYyLCAxMzIxNzEsIDEzMjE4MCwgMTMyMTkxLCAxMzIyMDEsIDEzMjIxMSwgMTMyMjI0LCAxMzIyMzQsIDEzMjI0NywgCi0gICAgMTMyMjU0LCAxMzIyNjQsIDEzMjI3MSwgMTMyMjc4LCAxMzIyODUsIDEzMjI5MiwgMTMyMjk5LCAxMzIzMDYsIDEzMjMxNSwgCi0gICAgMTMyMzI0LCAxMzIzMzMsIDEzMjM0MiwgMTMyMzUxLCAxMzIzNjAsIDEzMjM2OSwgMTMyMzc4LCAxMzIzODYsIDEzMjM5NCwgCi0gICAgMTMyNDAxLCAxMzI0MTEsIDEzMjQyMCwgMTMyNDI4LCAxMzI0MzUsIDEzMjQ0NSwgMTMyNDU0LCAxMzI0NTgsIDEzMjQ2MiwgCi0gICAgMTMyNDY2LCAxMzI0NzAsIDEzMjQ3NCwgMTMyNDc4LCAxMzI0ODIsIDEzMjQ4NiwgMTMyNDkwLCAxMzI0OTQsIDEzMjQ5NywgCi0gICAgMTMyNTAxLCAxMzI1MDQsIDEzMjUwNywgMTMyNTExLCAxMzI1MTUsIDEzMjUxOSwgMTMyNTIzLCAxMzI1MjcsIDEzMjUzMSwgCi0gICAgMTMyNTM1LCAxMzI1MzksIDEzMjU0MywgMTMyNTQ3LCAxMzI1NTEsIDEzMjU1NSwgMTMyNTU5LCAxMzI1NjMsIDEzMjU2NywgCi0gICAgMTMyNTcxLCAxMzI1NzUsIDEzMjU3OSwgMTMyNTgzLCAxMzI1ODcsIDEzMjU5MSwgMTMyNTk1LCAxMzI1OTksIDEzMjYwMywgCi0gICAgMTMyNjA3LCAxMzI2MTEsIDEzMjYxNSwgMTMyNjE5LCAxMzI2MjMsIDEzMjYyNywgMTMyNjMxLCAxMzI2MzUsIDEzMjYzOSwgCi0gICAgMTMyNjQzLCAxMzI2NDcsIDEzMjY1MSwgMTMyNjU1LCAxMzI2NTksIDEzMjY2MywgMTMyNjY3LCAxMzI2NzEsIDEzMjY3NSwgCi0gICAgMTMyNjc5LCAxMzI2ODMsIDEzMjY4NywgMTMyNjkxLCAxMzI2OTUsIDEzMjY5OSwgMTMyNzAzLCAxMzI3MDcsIDEzMjcxMSwgCi0gICAgMTMyNzE1LCAxMzI3MTksIDEzMjcyMywgMTMyNzI3LCAxMzI3MzEsIDEzMjczNSwgMTMyNzM5LCAxMzI3NDMsIDEzMjc0NywgCi0gICAgMTMyNzUxLCAxMzI3NTUsIDEzMjc1OSwgMTMyNzYzLCAxMzI3NjcsIDEzMjc3MSwgMTMyNzc1LCAxMzI3NzksIDEzMjc4MywgCi0gICAgMTMyNzg3LCAxMzI3OTEsIDEzMjc5NSwgMTMyNzk5LCAxMzI4MDMsIDEzMjgwNywgMTMyODExLCAxMzI4MTUsIDEzMjgxOSwgCi0gICAgMTMyODIzLCAxMzI4MjcsIDEzMjgzMSwgMTMyODM1LCAxMzI4MzksIDEzMjg0MywgMTMyODQ3LCAxMzI4NTAsIDEzMjg1NCwgCi0gICAgMTMyODU4LCAxMzI4NjIsIDEzMjg2NiwgMTMyODcwLCAxMzI4NzQsIDEzMjg3OCwgMTMyODgyLCAxMzI4ODYsIDEzMjg5MCwgCi0gICAgMTMyODk0LCAxMzI4OTgsIDEzMjkwMiwgMTMyOTA2LCAxMzI5MTAsIDEzMjkxNCwgMTMyOTE4LCAxMzI5MjIsIDEzMjkyNiwgCi0gICAgMTMyOTMwLCAxMzI5MzQsIDEzMjkzOCwgMTMyOTQyLCAxMzI5NDYsIDEzMjk1MCwgMTMyOTU0LCAxMzI5NTgsIDEzMjk2MiwgCi0gICAgMTMyOTY2LCAxMzI5NzAsIDEzMjk3NCwgMTMyOTc4LCAxMzI5ODIsIDEzMjk4NiwgMTMyOTkwLCAxMzI5OTQsIDEzMjk5OCwgCi0gICAgMTMzMDAyLCAxMzMwMDYsIDEzMzAxMCwgMTMzMDE0LCAxMzMwMTgsIDEzMzAyMiwgMTMzMDI2LCAxMzMwMzAsIDEzMzAzNCwgCi0gICAgMTMzMDM4LCAxMzMwNDIsIDEzMzA0NiwgMTMzMDUwLCAxMzMwNTQsIDEzMzA1OCwgMTMzMDYyLCAxMzMwNjYsIDEzMzA3MCwgCi0gICAgMTMzMDc0LCAxMzMwNzgsIDEzMzA4MiwgMTMzMDg2LCAxMzMwOTAsIDEzMzA5NCwgMTMzMDk4LCAxMzMxMDIsIDEzMzEwNiwgCi0gICAgMTMzMTEwLCAxMzMxMTQsIDEzMzExOCwgMTMzMTIyLCAxMzMxMjYsIDEzMzEzMCwgMTMzMTM0LCAxMzMxMzgsIDEzMzE0MiwgCi0gICAgMTMzMTQ2LCAxMzMxNTAsIDEzMzE1NCwgMTMzMTU4LCAxMzMxNjIsIDEzMzE2NiwgMTMzMTcwLCAxMzMxNzQsIDEzMzE3OCwgCi0gICAgMTMzMTgyLCAxMzMxODYsIDEzMzE5MCwgMTMzMTk0LCAxMzMxOTgsIDEzMzIwMiwgMTMzMjA2LCAxMzMyMTAsIDEzMzIxNCwgCi0gICAgMTMzMjE4LCAxMzMyMjIsIDEzMzIyNiwgMTMzMjMwLCAxMzMyMzQsIDEzMzIzOCwgMTMzMjQyLCAxMzMyNDYsIDEzMzI1MCwgCi0gICAgMTMzMjU0LCAxMzMyNTgsIDEzMzI2MiwgMTMzMjY2LCAxMzMyNzAsIDEzMzI3NCwgMTMzMjc4LCAxMzMyODIsIDEzMzI4NiwgCi0gICAgMTMzMjkwLCAxMzMyOTQsIDEzMzI5OCwgMTMzMzAyLCAxMzMzMDYsIDEzMzMxMCwgMTMzMzE0LCAxMzMzMTgsIDEzMzMyMiwgCi0gICAgMTMzMzI2LCAxMzMzMzAsIDEzMzMzNCwgMTMzMzM4LCAxMzMzNDIsIDEzMzM0NiwgMTMzMzUwLCAxMzMzNTQsIDEzMzM1OCwgCi0gICAgMTMzMzYyLCAxMzMzNjYsIDEzMzM3MCwgMTMzMzc0LCAxMzMzNzgsIDEzMzM4MiwgMTMzMzg2LCAxMzMzOTAsIDEzMzM5NCwgCi0gICAgMTMzMzk4LCAxMzM0MDIsIDEzMzQwNiwgMTMzNDEwLCAxMzM0MTQsIDEzMzQxOCwgMTMzNDIyLCAxMzM0MjYsIDEzMzQzMCwgCi0gICAgMTMzNDM0LCAxMzM0MzgsIDEzMzQ0MiwgMTMzNDQ2LCAxMzM0NTAsIDEzMzQ1NCwgMTMzNDU4LCAxMzM0NjIsIDEzMzQ2NiwgCi0gICAgMTMzNDcwLCAxMzM0NzQsIDEzMzQ3OCwgMTMzNDgyLCAxMzM0ODYsIDEzMzQ5MCwgMTMzNDk0LCAxMzM0OTgsIDEzMzUwMiwgCi0gICAgMTMzNTA2LCAxMzM1MTAsIDEzMzUxNCwgMTMzNTE4LCAxMzM1MjIsIDEzMzUyNiwgMTMzNTMwLCAxMzM1MzQsIDEzMzUzOCwgCi0gICAgMTMzNTQyLCAxMzM1NDYsIDEzMzU1MCwgMTMzNTU0LCAxMzM1NTgsIDEzMzU2MiwgMTMzNTY2LCAxMzM1NzAsIDEzMzU3NCwgCi0gICAgMTMzNTc4LCAxMzM1ODIsIDEzMzU4NiwgMTMzNTkwLCAxMzM1OTQsIDEzMzU5OCwgMTMzNjAyLCAxMzM2MDYsIDEzMzYxMCwgCi0gICAgMTMzNjE0LCAxMzM2MTksIDEzMzYyNCwgMTMzNjI5LCAxMzM2MzMsIDEzMzYzOSwgMTMzNjQ2LCAxMzM2NTMsIDEzMzY2MCwgCi0gICAgMTMzNjY3LCAxMzM2NzQsIDEzMzY4MSwgMTMzNjg4LCAxMzM2OTUsIDEzMzcwMiwgMTMzNzA5LCAxMzM3MTYsIDEzMzcyMywgCi0gICAgMTMzNzMwLCAxMzM3MzYsIDEzMzc0MywgMTMzNzUwLCAxMzM3NTYsIDEzMzc2MywgMTMzNzcwLCAxMzM3NzcsIDEzMzc4NCwgCi0gICAgMTMzNzkxLCAxMzM3OTgsIDEzMzgwNSwgMTMzODEyLCAxMzM4MTksIDEzMzgyNiwgMTMzODMzLCAxMzM4NDAsIDEzMzg0NywgCi0gICAgMTMzODUzLCAxMzM4NTksIDEzMzg2NiwgMTMzODczLCAxMzM4ODIsIDEzMzg5MSwgMTMzOTAwLCAxMzM5MDksIDEzMzkxNCwgCi0gICAgMTMzOTE5LCAxMzM5MjUsIDEzMzkzMSwgMTMzOTM3LCAxMzM5NDMsIDEzMzk0OSwgMTMzOTU1LCAxMzM5NjEsIDEzMzk2NywgCi0gICAgMTMzOTczLCAxMzM5NzksIDEzMzk4NSwgMTMzOTkxLCAxMzM5OTYsIDEzNDAwMiwgMTM0MDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjk0NTQsIDEyOTQ1NywgMTI5NDYxLCAxMjk0NjUsIDEyOTQ2OCwgMTI5NDcyLCAxMjk0NzYsIAorICAgIDEyOTQ3OSwgMTI5NDgyLCAxMjk0ODYsIDEyOTQ5MCwgMTI5NDkzLCAxMjk0OTYsIDEyOTQ5OSwgMTI5NTAyLCAxMjk1MDcsIAorICAgIDEyOTUxMCwgMTI5NTE0LCAxMjk1MTcsIDEyOTUyMCwgMTI5NTIzLCAxMjk1MjYsIDEyOTUyOSwgMTI5NTMyLCAxMjk1MzUsIAorICAgIDEyOTUzOCwgMTI5NTQxLCAxMjk1NDQsIDEyOTU0NywgMTI5NTUxLCAxMjk1NTUsIDEyOTU1OSwgMTI5NTYzLCAxMjk1NjgsIAorICAgIDEyOTU3MywgMTI5NTc5LCAxMjk1ODUsIDEyOTU5MSwgMTI5NTk2LCAxMjk2MDIsIDEyOTYwOCwgMTI5NjE0LCAxMjk2MTksIAorICAgIDEyOTYyNSwgMTI5NjMxLCAxMjk2MzYsIDEyOTY0MSwgMTI5NjQ3LCAxMjk2NTIsIDEyOTY1OCwgMTI5NjY0LCAxMjk2NjksIAorICAgIDEyOTY3NSwgMTI5NjgxLCAxMjk2ODYsIDEyOTY5MiwgMTI5Njk4LCAxMjk3MDQsIDEyOTcxMCwgMTI5NzE2LCAxMjk3MjAsIAorICAgIDEyOTcyNSwgMTI5NzI5LCAxMjk3MzQsIDEyOTczOCwgMTI5NzQzLCAxMjk3NDgsIDEyOTc1NCwgMTI5NzYwLCAxMjk3NjYsIAorICAgIDEyOTc3MSwgMTI5Nzc3LCAxMjk3ODMsIDEyOTc4OSwgMTI5Nzk0LCAxMjk4MDAsIDEyOTgwNiwgMTI5ODExLCAxMjk4MTYsIAorICAgIDEyOTgyMiwgMTI5ODI3LCAxMjk4MzMsIDEyOTgzOSwgMTI5ODQ0LCAxMjk4NTAsIDEyOTg1NiwgMTI5ODYxLCAxMjk4NjcsIAorICAgIDEyOTg3MywgMTI5ODc5LCAxMjk4ODUsIDEyOTg5MSwgMTI5ODk2LCAxMjk5MDAsIDEyOTkwNSwgMTI5OTA3LCAxMjk5MTEsIAorICAgIDEyOTkxNCwgMTI5OTE3LCAxMjk5MjAsIDEyOTkyMywgMTI5OTI2LCAxMjk5MjksIDEyOTkzMiwgMTI5OTM1LCAxMjk5MzgsIAorICAgIDEyOTk0MSwgMTI5OTQ0LCAxMjk5NDcsIDEyOTk1MCwgMTI5OTUzLCAxMjk5NTYsIDEyOTk1OSwgMTI5OTYyLCAxMjk5NjUsIAorICAgIDEyOTk2OCwgMTI5OTcxLCAxMjk5NzQsIDEyOTk3NywgMTI5OTgwLCAxMjk5ODMsIDEyOTk4NiwgMTI5OTg5LCAxMjk5OTIsIAorICAgIDEyOTk5NSwgMTI5OTk4LCAxMzAwMDEsIDEzMDAwNCwgMTMwMDA3LCAxMzAwMTAsIDEzMDAxMywgMTMwMDE2LCAxMzAwMTksIAorICAgIDEzMDAyMiwgMTMwMDI1LCAxMzAwMjgsIDEzMDAzMSwgMTMwMDM0LCAxMzAwMzcsIDEzMDA0MCwgMTMwMDQzLCAxMzAwNDYsIAorICAgIDEzMDA0OSwgMTMwMDUyLCAxMzAwNTUsIDEzMDA1OCwgMTMwMDYxLCAxMzAwNjQsIDEzMDA2NywgMTMwMDcwLCAxMzAwNzMsIAorICAgIDEzMDA3NiwgMTMwMDc5LCAxMzAwODIsIDEzMDA4NSwgMTMwMDg4LCAxMzAwOTEsIDEzMDA5NCwgMTMwMDk3LCAxMzAxMDAsIAorICAgIDEzMDEwMywgMTMwMTA2LCAxMzAxMDksIDEzMDExMiwgMTMwMTE1LCAxMzAxMTgsIDEzMDEyMSwgMTMwMTI0LCAxMzAxMjcsIAorICAgIDEzMDEzMCwgMTMwMTMzLCAxMzAxMzYsIDEzMDEzOSwgMTMwMTQyLCAxMzAxNDUsIDEzMDE0OCwgMTMwMTUxLCAxMzAxNTQsIAorICAgIDEzMDE1NywgMTMwMTYwLCAxMzAxNjMsIDEzMDE2NiwgMTMwMTY5LCAxMzAxNzIsIDEzMDE3NSwgMTMwMTc4LCAxMzAxODEsIAorICAgIDEzMDE4NCwgMTMwMTg3LCAxMzAxOTAsIDEzMDE5MywgMTMwMTk2LCAxMzAxOTksIDEzMDIwMiwgMTMwMjA1LCAxMzAyMDgsIAorICAgIDEzMDIxMSwgMTMwMjE0LCAxMzAyMTcsIDEzMDIyMCwgMTMwMjIzLCAxMzAyMjYsIDEzMDIyOSwgMTMwMjMyLCAxMzAyMzUsIAorICAgIDEzMDIzOCwgMTMwMjQxLCAxMzAyNDQsIDEzMDI0NywgMTMwMjUwLCAxMzAyNTMsIDEzMDI1NiwgMTMwMjU5LCAxMzAyNjIsIAorICAgIDEzMDI2NSwgMTMwMjY4LCAxMzAyNzEsIDEzMDI3NCwgMTMwMjc3LCAxMzAyODAsIDEzMDI4MywgMTMwMjg2LCAxMzAyODksIAorICAgIDEzMDI5MiwgMTMwMjk1LCAxMzAyOTgsIDEzMDMwMSwgMTMwMzA0LCAxMzAzMDcsIDEzMDMxMCwgMTMwMzEzLCAxMzAzMTYsIAorICAgIDEzMDMxOSwgMTMwMzIyLCAxMzAzMjUsIDEzMDMyOCwgMTMwMzMxLCAxMzAzMzQsIDEzMDMzNywgMTMwMzQwLCAxMzAzNDMsIAorICAgIDEzMDM0NiwgMTMwMzQ5LCAxMzAzNTIsIDEzMDM1NSwgMTMwMzU4LCAxMzAzNjEsIDEzMDM2NCwgMTMwMzY3LCAxMzAzNzAsIAorICAgIDEzMDM3MywgMTMwMzc2LCAxMzAzNzksIDEzMDM4MiwgMTMwMzg1LCAxMzAzODgsIDEzMDM5MSwgMTMwMzk0LCAxMzAzOTcsIAorICAgIDEzMDQwMCwgMTMwNDAzLCAxMzA0MDYsIDEzMDQwOSwgMTMwNDEyLCAxMzA0MTUsIDEzMDQxOCwgMTMwNDIxLCAxMzA0MjQsIAorICAgIDEzMDQyNywgMTMwNDMwLCAxMzA0MzMsIDEzMDQzNiwgMTMwNDM5LCAxMzA0NDIsIDEzMDQ0NSwgMTMwNDQ4LCAxMzA0NTEsIAorICAgIDEzMDQ1NCwgMTMwNDU3LCAxMzA0NjAsIDEzMDQ2MywgMTMwNDY2LCAxMzA0NjksIDEzMDQ3MiwgMTMwNDc1LCAxMzA0NzgsIAorICAgIDEzMDQ4MSwgMTMwNDg0LCAxMzA0ODcsIDEzMDQ5MCwgMTMwNDkzLCAxMzA0OTYsIDEzMDQ5OSwgMTMwNTAyLCAxMzA1MDUsIAorICAgIDEzMDUwOCwgMTMwNTExLCAxMzA1MTQsIDEzMDUxNywgMTMwNTIwLCAxMzA1MjMsIDEzMDUyNiwgMTMwNTI5LCAxMzA1MzIsIAorICAgIDEzMDUzNSwgMTMwNTM4LCAxMzA1NDEsIDEzMDU0NCwgMTMwNTQ3LCAxMzA1NTAsIDEzMDU1MywgMTMwNTU2LCAxMzA1NTksIAorICAgIDEzMDU2MiwgMTMwNTY1LCAxMzA1NjgsIDEzMDU3MSwgMTMwNTc0LCAxMzA1NzcsIDEzMDU4MCwgMTMwNTgzLCAxMzA1ODYsIAorICAgIDEzMDU4OSwgMTMwNTkyLCAxMzA1OTUsIDEzMDU5OCwgMTMwNjAxLCAxMzA2MDQsIDEzMDYwNywgMTMwNjEwLCAxMzA2MTMsIAorICAgIDEzMDYxNiwgMTMwNjE5LCAxMzA2MjIsIDEzMDYyNSwgMTMwNjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMzA2MzEsIDEzMDYzMywgMTMwNjM1LCAxMzA2NDAsIDEzMDY0MiwgMTMwNjQ3LCAxMzA2NDksIAorICAgIDEzMDY1NCwgMTMwNjU2LCAxMzA2NjEsIDEzMDY2MywgMTMwNjY1LCAxMzA2NjcsIDEzMDY2OSwgMTMwNjcxLCAxMzA2NzMsIAorICAgIDEzMDY3NSwgMTMwNjc3LCAxMzA2NzksIDEzMDY4MiwgMTMwNjg1LCAxMzA2ODcsIDEzMDY4OSwgMTMwNjkzLCAxMzA2OTYsIAorICAgIDEzMDcwMSwgMTMwNzAzLCAxMzA3MDUsIDEzMDcwNywgMTMwNzExLCAxMzA3MTQsIDEzMDcxNiwgMTMwNzIwLCAxMzA3MjIsIAorICAgIDEzMDcyNiwgMTMwNzI4LCAxMzA3MzIsIDEzMDczNSwgMTMwNzM3LCAxMzA3NDEsIDEzMDc0NSwgMTMwNzQ3LCAxMzA3NTMsIAorICAgIDEzMDc1NSwgMTMwNzYwLCAxMzA3NjIsIDEzMDc2NywgMTMwNzY5LCAxMzA3NzQsIDEzMDc3NiwgMTMwNzgxLCAxMzA3ODMsIAorICAgIDEzMDc4NiwgMTMwNzg4LCAxMzA3OTIsIDEzMDc5NCwgMTMwODAxLCAxMzA4MDMsIDEzMDgwNSwgMTMwODA3LCAxMzA4MTIsIAorICAgIDEzMDgxNCwgMTMwODE2LCAxMzA4MTgsIDEzMDgyMCwgMTMwODIyLCAxMzA4MjcsIDEzMDgzMSwgMTMwODMzLCAxMzA4MzgsIAorICAgIDEzMDg0MiwgMTMwODQ0LCAxMzA4NDksIDEzMDg1MywgMTMwODU1LCAxMzA4NjAsIDEzMDg2NCwgMTMwODY2LCAxMzA4NjgsIAorICAgIDEzMDg3MCwgMTMwODcyLCAxMzA4NzYsIDEzMDg3OCwgMTMwODgzLCAxMzA4ODUsIDEzMDg5MSwgMTMwODkzLCAxMzA4OTksIAorICAgIDEzMDkwMSwgMTMwOTAzLCAxMzA5MDUsIDEzMDkwOSwgMTMwOTExLCAxMzA5MTgsIDEzMDkyMCwgMTMwOTI3LCAxMzA5MjksIAorICAgIDEzMDkzNCwgMTMwOTM5LCAxMzA5NDEsIDEzMDk0NywgMTMwOTUzLCAxMzA5NTUsIDEzMDk2MSwgMTMwOTY2LCAxMzA5NjgsIAorICAgIDEzMDk3NCwgMTMwOTgwLCAxMzA5ODIsIDEzMDk4OCwgMTMwOTk0LCAxMzA5OTYsIDEzMTAwMiwgMTMxMDA2LCAxMzEwMDgsIAorICAgIDEzMTAxMywgMTMxMDE1LCAxMzEwMTcsIDEzMTAyMiwgMTMxMDI0LCAxMzEwMjYsIDEzMTAzMiwgMTMxMDM0LCAxMzEwMzksIAorICAgIDEzMTA0MywgMTMxMDQ1LCAxMzEwNTAsIDEzMTA1NCwgMTMxMDU2LCAxMzEwNjIsIDEzMTA2NCwgMTMxMDY4LCAxMzEwNzAsIAorICAgIDEzMTA3NCwgMTMxMDc2LCAxMzEwODMsIDEzMTA5MCwgMTMxMDkyLCAxMzEwOTksIDEzMTEwNiwgMTMxMTA4LCAxMzExMTMsIAorICAgIDEzMTExNSwgMTMxMTIyLCAxMzExMjQsIDEzMTEyOSwgMTMxMTMxLCAxMzExMzcsIDEzMTEzOSwgMTMxMTQzLCAxMzExNDUsIAorICAgIDEzMTE1MSwgMTMxMTUzLCAxMzExNTcsIDEzMTE1OSwgMTMxMTY1LCAxMzExNjcsIDEzMTE2OSwgMTMxMTcxLCAxMzExNzYsIAorICAgIDEzMTE4MSwgMTMxMTgzLCAxMzExODUsIDEzMTE5NCwgMTMxMTk4LCAxMzEyMDUsIDEzMTIxMiwgMTMxMjE3LCAxMzEyMjIsIAorICAgIDEzMTIzNCwgMTMxMjM2LCAxMzEyMzgsIDEzMTI0MCwgMTMxMjQyLCAxMzEyNDQsIDEzMTI0NiwgMTMxMjQ4LCAxMzEyNTAsIAorICAgIDEzMTI1MiwgMTMxMjU0LCAxMzEyNTYsIDEzMTI1OCwgMTMxMjYwLCAxMzEyNjIsIDEzMTI2NCwgMTMxMjY2LCAxMzEyNjgsIAorICAgIDEzMTI3MCwgMTMxMjcyLCAxMzEyNzQsIDEzMTI3NiwgMTMxMjgyLCAxMzEyODksIDEzMTI5NCwgMTMxMjk5LCAxMzEzMTAsIAorICAgIDEzMTMxMiwgMTMxMzE0LCAxMzEzMTYsIDEzMTMxOCwgMTMxMzIwLCAxMzEzMjIsIDEzMTMyNCwgMTMxMzI2LCAxMzEzMjgsIAorICAgIDEzMTMzMCwgMTMxMzMyLCAxMzEzMzQsIDEzMTMzNiwgMTMxMzM4LCAxMzEzNDAsIDEzMTM0MiwgMTMxMzQ3LCAxMzEzNDksIAorICAgIDEzMTM1MSwgMTMxMzU3LCAxMzEzNjksIDEzMTM4MCwgMTMxMzgyLCAxMzEzODQsIDEzMTM4NiwgMTMxMzg4LCAxMzEzOTAsIAorICAgIDEzMTM5MiwgMTMxMzk0LCAxMzEzOTYsIDEzMTM5OCwgMTMxNDAwLCAxMzE0MDIsIDEzMTQwNCwgMTMxNDA2LCAxMzE0MDgsIAorICAgIDEzMTQxMCwgMTMxNDEyLCAxMzE0MTQsIDEzMTQxNiwgMTMxNDE4LCAxMzE0MjAsIDEzMTQyMiwgMTMxNDI0LCAxMzE0MjYsIAorICAgIDEzMTQyOCwgMTMxNDMwLCAxMzE0MzIsIDEzMTQzNCwgMTMxNDM2LCAxMzE0MzgsIDEzMTQ0MCwgMTMxNDQyLCAxMzE0NDQsIAorICAgIDEzMTQ0NiwgMTMxNDQ4LCAxMzE0NTAsIDEzMTQ1MiwgMTMxNDU0LCAxMzE0NTYsIDEzMTQ1OCwgMTMxNDYwLCAxMzE0NjIsIAorICAgIDEzMTQ2NCwgMTMxNDY2LCAxMzE0NjgsIDEzMTQ3MCwgMTMxNDcyLCAxMzE0NzQsIDEzMTQ3NiwgMTMxNDc4LCAxMzE0ODAsIAorICAgIDEzMTQ4MiwgMTMxNDg0LCAxMzE0ODYsIDEzMTQ4OCwgMTMxNDkwLCAxMzE0OTIsIDEzMTQ5NCwgMTMxNDk2LCAxMzE0OTgsIAorICAgIDEzMTUwMCwgMTMxNTAyLCAxMzE1MDQsIDEzMTUwNiwgMTMxNTA4LCAxMzE1MTAsIDEzMTUxMiwgMTMxNTE0LCAxMzE1MTYsIAorICAgIDEzMTUxOCwgMTMxNTIwLCAxMzE1MjIsIDEzMTUyNCwgMTMxNTI2LCAxMzE1MjgsIDEzMTUzMCwgMTMxNTMyLCAxMzE1MzQsIAorICAgIDEzMTUzNiwgMTMxNTM4LCAxMzE1NDAsIDEzMTU0MiwgMTMxNTQ0LCAxMzE1NDYsIDEzMTU0OCwgMTMxNTUwLCAxMzE1NTIsIAorICAgIDEzMTU1NCwgMTMxNTU2LCAxMzE1NTgsIDEzMTU2MCwgMTMxNTYyLCAxMzE1NjQsIDEzMTU2NiwgMTMxNTY4LCAxMzE1NzAsIAorICAgIDEzMTU3MiwgMTMxNTc0LCAxMzE1NzYsIDEzMTU3OCwgMTMxNTgwLCAxMzE1ODIsIDEzMTU4NCwgMTMxNTg2LCAxMzE1ODgsIAorICAgIDEzMTU5MCwgMTMxNTkyLCAxMzE1OTQsIDEzMTU5NiwgMTMxNTk4LCAxMzE2MDAsIDEzMTYwMiwgMTMxNjA0LCAxMzE2MDYsIAorICAgIDEzMTYwOCwgMTMxNjEwLCAxMzE2MTIsIDEzMTYxNCwgMTMxNjE2LCAxMzE2MTgsIDEzMTYyMCwgMTMxNjIyLCAxMzE2MjQsIAorICAgIDEzMTYyNiwgMTMxNjI4LCAxMzE2MzAsIDEzMTYzMiwgMTMxNjM0LCAxMzE2MzYsIDEzMTYzOCwgMTMxNjQwLCAxMzE2NDIsIAorICAgIDEzMTY0NCwgMTMxNjQ2LCAxMzE2NDgsIDEzMTY1MCwgMTMxNjUyLCAxMzE2NTQsIDEzMTY1NiwgMTMxNjU4LCAxMzE2NjAsIAorICAgIDEzMTY2MiwgMTMxNjY0LCAxMzE2NjYsIDEzMTY2OCwgMTMxNjcwLCAxMzE2NzIsIDEzMTY3NCwgMTMxNjc2LCAxMzE2NzgsIAorICAgIDEzMTY4MCwgMTMxNjgyLCAxMzE2ODQsIDEzMTY4NiwgMTMxNjg4LCAxMzE2OTAsIDEzMTY5MiwgMTMxNjk0LCAxMzE2OTYsIAorICAgIDEzMTY5OCwgMTMxNzAwLCAxMzE3MDIsIDEzMTcwNCwgMTMxNzA2LCAxMzE3MDgsIDEzMTcxMCwgMTMxNzEyLCAxMzE3MTQsIAorICAgIDEzMTcxNiwgMTMxNzE4LCAxMzE3MjAsIDEzMTcyMiwgMTMxNzI0LCAxMzE3MjYsIDEzMTcyOCwgMTMxNzMwLCAxMzE3MzIsIAorICAgIDEzMTczNCwgMTMxNzM2LCAxMzE3MzgsIDEzMTc0MCwgMTMxNzQyLCAxMzE3NDQsIDEzMTc0NiwgMTMxNzQ4LCAxMzE3NTAsIAorICAgIDEzMTc1MiwgMTMxNzU0LCAxMzE3NTYsIDEzMTc1OCwgMTMxNzYwLCAxMzE3NjIsIDEzMTc2NCwgMTMxNzY2LCAxMzE3NjgsIAorICAgIDEzMTc3MCwgMTMxNzcyLCAxMzE3NzQsIDEzMTc3NiwgMTMxNzc4LCAxMzE3ODAsIDEzMTc4MiwgMTMxNzg0LCAxMzE3ODYsIAorICAgIDEzMTc4OCwgMTMxNzkwLCAxMzE3OTIsIDEzMTc5NCwgMTMxNzk2LCAxMzE3OTgsIDEzMTgwMCwgMTMxODAyLCAxMzE4MDQsIAorICAgIDEzMTgwNiwgMTMxODA4LCAxMzE4MTAsIDEzMTgxMiwgMTMxODE0LCAxMzE4MTYsIDEzMTgxOCwgMTMxODIwLCAxMzE4MjIsIAorICAgIDEzMTgyNCwgMTMxODI2LCAxMzE4MjgsIDEzMTgzMCwgMTMxODMyLCAxMzE4MzQsIDEzMTgzNiwgMTMxODM4LCAxMzE4NDAsIAorICAgIDEzMTg0MiwgMTMxODQ0LCAxMzE4NDYsIDEzMTg0OCwgMTMxODUwLCAxMzE4NTIsIDEzMTg1NCwgMTMxODU2LCAxMzE4NTgsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTg2MCwgMTMxODcwLCAxMzE4ODAsIDEzMTg4OSwgMTMxODk4LCAxMzE5MTEsIAorICAgIDEzMTkyNCwgMTMxOTM2LCAxMzE5NDgsIDEzMTk1OCwgMTMxOTY4LCAxMzE5NzgsIDEzMTk4OCwgMTMxOTk5LCAxMzIwMTAsIAorICAgIDEzMjAyMCwgMTMyMDI5LCAxMzIwMzgsIDEzMjA0NywgMTMyMDYwLCAxMzIwNzMsIDEzMjA4NSwgMTMyMDk3LCAxMzIxMDcsIAorICAgIDEzMjExNywgMTMyMTI3LCAxMzIxMzcsIDEzMjE0NiwgMTMyMTU1LCAxMzIxNjQsIDEzMjE3MywgMTMyMTgyLCAxMzIxOTEsIAorICAgIDEzMjIwMCwgMTMyMjA5LCAxMzIyMTgsIDEzMjIyNywgMTMyMjM2LCAxMzIyNDUsIDEzMjI1NiwgMTMyMjY2LCAxMzIyNzYsIAorICAgIDEzMjI4OSwgMTMyMjk5LCAxMzIzMTIsIDEzMjMxOSwgMTMyMzI5LCAxMzIzMzYsIDEzMjM0MywgMTMyMzUwLCAxMzIzNTcsIAorICAgIDEzMjM2NCwgMTMyMzcxLCAxMzIzODAsIDEzMjM4OSwgMTMyMzk4LCAxMzI0MDcsIDEzMjQxNiwgMTMyNDI1LCAxMzI0MzQsIAorICAgIDEzMjQ0MywgMTMyNDUxLCAxMzI0NTksIDEzMjQ2NiwgMTMyNDc2LCAxMzI0ODUsIDEzMjQ5MywgMTMyNTAwLCAxMzI1MTAsIAorICAgIDEzMjUxOSwgMTMyNTI5LCAxMzI1MzksIDEzMjU1MCwgMTMyNTYwLCAxMzI1NjksIDEzMjU3OSwgMTMyNTg4LCAxMzI1OTgsIAorICAgIDEzMjYwNiwgMTMyNjEwLCAxMzI2MTQsIDEzMjYxOCwgMTMyNjIyLCAxMzI2MjYsIDEzMjYzMCwgMTMyNjM0LCAxMzI2MzgsIAorICAgIDEzMjY0MiwgMTMyNjQ2LCAxMzI2NDksIDEzMjY1MywgMTMyNjU2LCAxMzI2NTksIDEzMjY2MywgMTMyNjY3LCAxMzI2NzEsIAorICAgIDEzMjY3NSwgMTMyNjc5LCAxMzI2ODMsIDEzMjY4NywgMTMyNjkxLCAxMzI2OTUsIDEzMjY5OSwgMTMyNzAzLCAxMzI3MDcsIAorICAgIDEzMjcxMSwgMTMyNzE1LCAxMzI3MTksIDEzMjcyMywgMTMyNzI3LCAxMzI3MzEsIDEzMjczNSwgMTMyNzM5LCAxMzI3NDMsIAorICAgIDEzMjc0NywgMTMyNzUxLCAxMzI3NTUsIDEzMjc1OSwgMTMyNzYzLCAxMzI3NjcsIDEzMjc3MSwgMTMyNzc1LCAxMzI3NzksIAorICAgIDEzMjc4MywgMTMyNzg3LCAxMzI3OTEsIDEzMjc5NSwgMTMyNzk5LCAxMzI4MDMsIDEzMjgwNywgMTMyODExLCAxMzI4MTUsIAorICAgIDEzMjgxOSwgMTMyODIzLCAxMzI4MjcsIDEzMjgzMSwgMTMyODM1LCAxMzI4MzksIDEzMjg0MywgMTMyODQ3LCAxMzI4NTEsIAorICAgIDEzMjg1NSwgMTMyODU5LCAxMzI4NjMsIDEzMjg2NywgMTMyODcxLCAxMzI4NzUsIDEzMjg3OSwgMTMyODgzLCAxMzI4ODcsIAorICAgIDEzMjg5MSwgMTMyODk1LCAxMzI4OTksIDEzMjkwMywgMTMyOTA3LCAxMzI5MTEsIDEzMjkxNSwgMTMyOTE5LCAxMzI5MjMsIAorICAgIDEzMjkyNywgMTMyOTMxLCAxMzI5MzUsIDEzMjkzOSwgMTMyOTQzLCAxMzI5NDcsIDEzMjk1MSwgMTMyOTU1LCAxMzI5NTksIAorICAgIDEzMjk2MywgMTMyOTY3LCAxMzI5NzEsIDEzMjk3NSwgMTMyOTc5LCAxMzI5ODMsIDEzMjk4NywgMTMyOTkxLCAxMzI5OTUsIAorICAgIDEzMjk5OSwgMTMzMDAyLCAxMzMwMDYsIDEzMzAxMCwgMTMzMDE0LCAxMzMwMTgsIDEzMzAyMiwgMTMzMDI2LCAxMzMwMzAsIAorICAgIDEzMzAzNCwgMTMzMDM4LCAxMzMwNDIsIDEzMzA0NiwgMTMzMDUwLCAxMzMwNTQsIDEzMzA1OCwgMTMzMDYyLCAxMzMwNjYsIAorICAgIDEzMzA3MCwgMTMzMDc0LCAxMzMwNzgsIDEzMzA4MiwgMTMzMDg2LCAxMzMwOTAsIDEzMzA5NCwgMTMzMDk4LCAxMzMxMDIsIAorICAgIDEzMzEwNiwgMTMzMTEwLCAxMzMxMTQsIDEzMzExOCwgMTMzMTIyLCAxMzMxMjYsIDEzMzEzMCwgMTMzMTM0LCAxMzMxMzgsIAorICAgIDEzMzE0MiwgMTMzMTQ2LCAxMzMxNTAsIDEzMzE1NCwgMTMzMTU4LCAxMzMxNjIsIDEzMzE2NiwgMTMzMTcwLCAxMzMxNzQsIAorICAgIDEzMzE3OCwgMTMzMTgyLCAxMzMxODYsIDEzMzE5MCwgMTMzMTk0LCAxMzMxOTgsIDEzMzIwMiwgMTMzMjA2LCAxMzMyMTAsIAorICAgIDEzMzIxNCwgMTMzMjE4LCAxMzMyMjIsIDEzMzIyNiwgMTMzMjMwLCAxMzMyMzQsIDEzMzIzOCwgMTMzMjQyLCAxMzMyNDYsIAorICAgIDEzMzI1MCwgMTMzMjU0LCAxMzMyNTgsIDEzMzI2MiwgMTMzMjY2LCAxMzMyNzAsIDEzMzI3NCwgMTMzMjc4LCAxMzMyODIsIAorICAgIDEzMzI4NiwgMTMzMjkwLCAxMzMyOTQsIDEzMzI5OCwgMTMzMzAyLCAxMzMzMDYsIDEzMzMxMCwgMTMzMzE0LCAxMzMzMTgsIAorICAgIDEzMzMyMiwgMTMzMzI2LCAxMzMzMzAsIDEzMzMzNCwgMTMzMzM4LCAxMzMzNDIsIDEzMzM0NiwgMTMzMzUwLCAxMzMzNTQsIAorICAgIDEzMzM1OCwgMTMzMzYyLCAxMzMzNjYsIDEzMzM3MCwgMTMzMzc0LCAxMzMzNzgsIDEzMzM4MiwgMTMzMzg2LCAxMzMzOTAsIAorICAgIDEzMzM5NCwgMTMzMzk4LCAxMzM0MDIsIDEzMzQwNiwgMTMzNDEwLCAxMzM0MTQsIDEzMzQxOCwgMTMzNDIyLCAxMzM0MjYsIAorICAgIDEzMzQzMCwgMTMzNDM0LCAxMzM0MzgsIDEzMzQ0MiwgMTMzNDQ2LCAxMzM0NTAsIDEzMzQ1NCwgMTMzNDU4LCAxMzM0NjIsIAorICAgIDEzMzQ2NiwgMTMzNDcwLCAxMzM0NzQsIDEzMzQ3OCwgMTMzNDgyLCAxMzM0ODYsIDEzMzQ5MCwgMTMzNDk0LCAxMzM0OTgsIAorICAgIDEzMzUwMiwgMTMzNTA2LCAxMzM1MTAsIDEzMzUxNCwgMTMzNTE4LCAxMzM1MjIsIDEzMzUyNiwgMTMzNTMwLCAxMzM1MzQsIAorICAgIDEzMzUzOCwgMTMzNTQyLCAxMzM1NDYsIDEzMzU1MCwgMTMzNTU0LCAxMzM1NTgsIDEzMzU2MiwgMTMzNTY2LCAxMzM1NzAsIAorICAgIDEzMzU3NCwgMTMzNTc4LCAxMzM1ODIsIDEzMzU4NiwgMTMzNTkwLCAxMzM1OTQsIDEzMzU5OCwgMTMzNjAyLCAxMzM2MDYsIAorICAgIDEzMzYxMCwgMTMzNjE0LCAxMzM2MTgsIDEzMzYyMiwgMTMzNjI2LCAxMzM2MzAsIDEzMzYzNCwgMTMzNjM4LCAxMzM2NDIsIAorICAgIDEzMzY0NiwgMTMzNjUwLCAxMzM2NTQsIDEzMzY1OCwgMTMzNjYyLCAxMzM2NjYsIDEzMzY3MCwgMTMzNjc0LCAxMzM2NzgsIAorICAgIDEzMzY4MiwgMTMzNjg2LCAxMzM2OTAsIDEzMzY5NCwgMTMzNjk4LCAxMzM3MDIsIDEzMzcwNiwgMTMzNzEwLCAxMzM3MTQsIAorICAgIDEzMzcxOCwgMTMzNzIyLCAxMzM3MjYsIDEzMzczMCwgMTMzNzM0LCAxMzM3MzgsIDEzMzc0MiwgMTMzNzQ2LCAxMzM3NTAsIAorICAgIDEzMzc1NCwgMTMzNzU4LCAxMzM3NjIsIDEzMzc2NiwgMTMzNzcxLCAxMzM3NzYsIDEzMzc4MSwgMTMzNzg1LCAxMzM3OTEsIAorICAgIDEzMzc5OCwgMTMzODA1LCAxMzM4MTIsIDEzMzgxOSwgMTMzODI2LCAxMzM4MzMsIDEzMzg0MCwgMTMzODQ3LCAxMzM4NTQsIAorICAgIDEzMzg2MSwgMTMzODY4LCAxMzM4NzUsIDEzMzg4MiwgMTMzODg4LCAxMzM4OTUsIDEzMzkwMiwgMTMzOTA4LCAxMzM5MTUsIAorICAgIDEzMzkyMiwgMTMzOTI5LCAxMzM5MzYsIDEzMzk0MywgMTMzOTUwLCAxMzM5NTcsIDEzMzk2NCwgMTMzOTcxLCAxMzM5NzgsIAorICAgIDEzMzk4NSwgMTMzOTkyLCAxMzM5OTksIDEzNDAwNSwgMTM0MDExLCAxMzQwMTgsIDEzNDAyNSwgMTM0MDM0LCAxMzQwNDMsIAorICAgIDEzNDA1MiwgMTM0MDYxLCAxMzQwNjYsIDEzNDA3MSwgMTM0MDc3LCAxMzQwODMsIDEzNDA4OSwgMTM0MDk1LCAxMzQxMDEsIAorICAgIDEzNDEwNywgMTM0MTEzLCAxMzQxMTksIDEzNDEyNSwgMTM0MTMxLCAxMzQxMzcsIDEzNDE0MywgMTM0MTQ4LCAxMzQxNTQsIAorICAgIDEzNDE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiAvKiBuYW1lLT5jb2RlIGRpY3Rpb25hcnkgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29kZV9oYXNoW10gPSB7CiAgICAgNzQyMjQsIDQ4NTEsIDAsIDc4MTU2LCA3ODQ5OSwgMTI4Njg1LCA3OTI5LCAwLCAxOTQ2ODIsIDEyNzc2NiwgNzg1MDAsIAotICAgIDY2NDgwLCAwLCA0MjgzMywgNzQ1MjksIDEyMDY0LCAwLCA1OTYsIDk4MzgxMiwgNjk4NTAsIDEzMTkyLCA4NjUxLCAwLCAwLCAKKyAgICA2NjQ4MCwgMCwgNDI4MzMsIDc0NTI5LCAxMjA2NCwgMCwgNTk2LCA5ODM4MjEsIDY5ODUwLCAxMzE5MiwgODY1MSwgMCwgMCwgCiAgICAgMTIwMjE4LCAxMjk5NSwgNjQ4NjUsIDEzNzMsIDAsIDAsIDU4MTYsIDExOTA2NywgNjQ4MTAsIDQyMzEsIDY4MjUsIDQyODk3LCAKICAgICA0MjMzLCA0MjM0LCA0MjMyLCA5MTc4MzYsIDc0NDE1LCAxMjAyMTAsIDYzODQsIDkxNzg0MCwgNzgxMDgsIDg4NTEsIDAsIAotICAgIDEyODU1MywgMCwgNDE2MDEsIDg4NzQsIDk4Mzc3NCwgNzc0OCwgMCwgMCwgMCwgMTI3OTM5LCA0MTYwMywgOTc4NCwgMCwgCisgICAgMTI4NTUzLCAwLCA0MTYwMSwgODg3NCwgOTgzNzgzLCA3NzQ4LCAwLCAwLCAwLCAxMjc5MzksIDQxNjAzLCA5Nzg0LCAwLCAKICAgICA5MTg4LCA0MTYwMCwgMCwgMTIwNjE4LCAxMjgzNDMsIDE0NTcsIDM1MzUsIDAsIDAsIDAsIDAsIDY1MjQwLCAxMTk1MSwgMCwgCiAgICAgMzQwNCwgMCwgMCwgMCwgMTc1OSwgMCwgNDEwNzYsIDY4MzgzLCAxMjA1NzIsIDExOTIwNSwgNjY1NzcsIDk0MDE0LCAKLSAgICAxMjc3NjQsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgMzA1NSwgOTg1MiwgOTgzODUxLCAKKyAgICAxMjc3NjQsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgMzA1NSwgOTg1MiwgOTgzODYwLCAKICAgICA2NTI4OCwgMCwgMTEzOTgsIDAsIDkyNDE3LCAxMTkyNTUsIDAsIDAsIDYwMywgNzQzOTgsIDQzNTQ4LCAwLCAwLCA5MTc4MjQsIAogICAgIDMzNTAsIDEyMDgxNywgNjQzMTgsIDkxNzgyOCwgMTI3MDg5LCAzMzkwLCA3NDQ4MywgNDMyNjUsIDEyMDU5OSwgOTE3ODMwLCAKICAgICA3ODU3MywgMCwgMTkxOSwgMzQwMCwgMTIwNjUxLCAxMjc5NDQsIDExNjQ3LCA5MTc1NDAsIDY2NDQ2LCA2NDE0MSwgODU2MiwgCi0gICAgMjEyMSwgNjQxMzgsIDQwNDMsIDg3MTIsIDY0MTM0LCA2NDEzMywgMTEyOTcsIDk4MzY3OSwgOTgzMTUyLCAxMTk2NiwgCi0gICAgNjQxMjgsIDEyODU4NywgMCwgMCwgNjQxMzIsIDEwODY3LCA2NDEzMCwgNjQxMjksIDk4MzgzNSwgNDMzNzQsIDk3NzksIAorICAgIDIxMjEsIDY0MTM4LCA0MDQzLCA4NzEyLCA2NDEzNCwgNjQxMzMsIDExMjk3LCA5ODM2ODgsIDk4MzE1MiwgMTE5NjYsIAorICAgIDY0MTI4LCAxMjg1ODcsIDAsIDAsIDY0MTMyLCAxMDg2NywgNjQxMzAsIDY0MTI5LCA5ODM4NDQsIDQzMzc0LCA5Nzc5LCAKICAgICAyNzY0LCA2NjAwMiwgMTAxNjcsIDk0NzEsIDAsIDY2MDIxLCAwLCAwLCA1NDU3LCA1NDQwLCA4ODU3LCA5Mzk4MSwgNjUyODIsIAotICAgIDI4NDMsIDUzNTUsIDEyNzkyOCwgOTgzOTU2LCAwLCA1MTk0LCAxMTY1NywgNDM5ODQsIDEyODI5MiwgMCwgOTgzNjIwLCAwLCAKKyAgICAyODQzLCA1MzU1LCAxMjc5MjgsIDk4Mzk2NSwgMCwgNTE5NCwgMTE2NTcsIDQzOTg0LCAxMjgyOTIsIDAsIDk4MzYyMCwgMCwgCiAgICAgMCwgMTI3MDI3LCAxMDcxNywgNjQ1NzAsIDU2MzAsIDUzOTYsIDY0MTQzLCAxMDY4MiwgMCwgMTA2MDIsIDgwMCwgNDI0OTksIAogICAgIDY2MTg2LCAwLCAwLCA2NDkzMCwgMTE2MzEsIDY0MTQ2LCA2NDE0NSwgNjQxNDQsIDc2MiwgMTMxNzIsIDExODg1OSwgCiAgICAgMTk0NjYxLCA2NDQ2OCwgMTA5MDYsIDEzNTMsIDY5NjAsIDAsIDAsIDU4MjgsIDg3MjQsIDkxNzgwNiwgODkzMywgMTYwMSwgCiAgICAgNDIyNDQsIDg1OCwgNzA4MCwgNjQxMDksIDY0MTA4LCA4MDkwLCAwLCA3NDQwMSwgOTE3ODExLCA1ODcsIDAsIDEyODEzMSwgCi0gICAgMCwgMCwgMCwgNzgyMTQsIDI3NTAsIDc0MjE4LCA1NTYsIDY0MTU4LCA2NDE1NywgOTgzOTQwLCAxMjIxMywgMTk0Njc4LCAKKyAgICAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgNzQyMTgsIDU1NiwgNjQxNTgsIDY0MTU3LCA5ODM5NDksIDEyMjEzLCAxOTQ2NzgsIAogICAgIDI3NjAsIDAsIDAsIDAsIDE5NDc5NCwgNjQxNTYsIDY0MTU1LCA0MjQ5NiwgMCwgNjQxNTEsIDY0MTUwLCAxMjY3OSwgCiAgICAgMTAwNTMsIDEwNDIxLCAxMTA5MywgNjQxNTMsIDY0MTUyLCAwLCAwLCA0ODM5LCAwLCAwLCAxODc0LCAxMTkwMTYsIDAsIAogICAgIDY1NzcsIDY0MTI1LCA2NDEyNCwgNjQxMjMsIDAsIDEyNzUzMSwgOTI1MzQsIDcwMDcsIDc1OTAsIDY1NDQzLCA5MDM2LCAKQEAgLTE3MTE0LDEyICsxNzEzMywxMiBAQAogICAgIDY0MTAyLCA3ODU5LCAxOTQ1LCA2NDA5OSwgMCwgMTA0NTMsIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCA3Mzg5LCA5ODMxNjEsIAogICAgIDg3MDUsIDY0MDk3LCA2NDA5NiwgOTU3MSwgNTI4LCAxMjg2NzEsIDQ0MDE3LCAxMTQyOSwgNzEzNDcsIDAsIDk4MzA3NywgCiAgICAgOTE3OTkwLCA3Mzg0MSwgMCwgMCwgOTA1NiwgNjQzMTMsIDYxODgsIDEyMDAxOSwgNjE1NSwgNjQwNjgsIDE4MjMsIDY0MDY2LCAKLSAgICA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgOTIyMTIsIDAsIDQxOTA0LCA2NjM5LCA2NDA2NCwgOTgzNzY2LCAKLSAgICAxMjgzNDQsIDAsIDExNzYsIDExODk1OSwgMTI3OTMwLCA4MTYyLCAxMjg2NjcsIDk4MzgyMiwgMCwgMTIwNTE5LCA2NjM3NiwgCisgICAgNjQwNjUsIDY0MDcyLCA2NDA3MSwgNjMsIDcyMzMsIDkyMjEyLCAwLCA0MTkwNCwgNjYzOSwgNjQwNjQsIDk4Mzc3NSwgCisgICAgMTI4MzQ0LCAwLCAxMTc2LCAxMTg5NTksIDEyNzkzMCwgODE2MiwgMTI4NjY3LCA5ODM4MzEsIDAsIDEyMDUxOSwgNjYzNzYsIAogICAgIDY2MjQyLCAxMTQxNSwgNDMzMywgOTg1NSwgNjQxMTIsIDY0NjQyLCAwLCA1Mzg4LCAwLCAwLCAwLCA3NzE0LCA2NjIyMiwgCi0gICAgNjk5MDIsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCA5ODM0MTMsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCisgICAgNjk5MDIsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCA5ODM0MjEsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCiAgICAgODk5NiwgNDk5MiwgNDQ3MSwgNDI2MjIsIDY0MDc5LCA2NDA3OCwgOTIxNzksIDAsIDEyNjU3MCwgMCwgNjQ2MTUsIDQxOTE1LCAKLSAgICAwLCAxMjA3NSwgNzAwNjIsIDAsIDUxNzQsIDk4MzIxNSwgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMTI3OTA0LCAKKyAgICAwLCAxMjA3NSwgNzAwNjIsIDAsIDUxNzQsIDk4MzIxNywgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMTI3OTA0LCAKICAgICA4NDA4LCA2NDcwNCwgMCwgMCwgOTIyMywgMCwgNDE2MTYsIDY3OTk5LCA3Mzc5NywgMCwgMTExNiwgMTI4MjA0LCA0MzA0OSwgCiAgICAgNzEzNiwgNDMwNTAsIDg1NDgsIDEyMDQ4NSwgMCwgMTE5MDYxLCA5MTc5OTksIDAsIDEzMTE1LCA0MzY3NSwgNjQwOTEsIAogICAgIDkzMjIsIDAsIDEyMDU5NSwgNjQwOTUsIDY0MDk0LCA4MTExLCA2NjI0NywgNDIzMzIsIDY0MDg5LCA2NDA4OCwgNjE5OSwgMCwgCkBAIC0xNzEyNywxMCArMTcxNDYsMTAgQEAKICAgICA5OTI3LCA0MTMzNSwgNDExOCwgMTc5NywgMCwgNDEzMzQsIDAsIDQ2LCA0MzQ0OCwgMTI3ODgxLCAyOTgsIDAsIDEyODExNCwgCiAgICAgMCwgNDI2MjcsIDAsIDMyLCA2MTg3LCAxMTkwNTIsIDExNDk1LCAxMTQ1OSwgMzY2NSwgOTgzNjAwLCA0Mjg3MSwgMCwgCiAgICAgMTk5MjMsIDc0MzM1LCAwLCAxMjcxOTIsIDY2MjM5LCA0MjI2NCwgNjQ0MDMsIDQ0MTIsIDcyNDAsIDkyNDk1LCAwLCAKLSAgICA5ODM0NTgsIDY1NzU4LCAxMjc1MCwgNDE4MSwgODU0NCwgMCwgMTIwMTk5LCA5MTc4OTcsIDEyMDE5OCwgNjk4MDksIDYxODEsIAorICAgIDk4MzQ2NiwgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDkxNzg5NywgMTIwMTk4LCA2OTgwOSwgNjE4MSwgCiAgICAgNjUwMTQsIDAsIDAsIDk4MzE5NiwgMzYzOSwgMTE5NTg4LCAwLCAwLCAxMTg5MDQsIDEwMDczLCAxMjAyMDYsIDEyODg2MiwgCiAgICAgMTI3MTg2LCA2ODQwOSwgNDI4NDQsIDc0OTgsIDEwOTgsIDkyNTY1LCAxMjAyMDUsIDAsIDk4MzExOCwgMTAyMDcsIDg3ODksIAotICAgIDk4MzIyMywgMCwgMCwgOTgzNDY0LCA5MjM0LCAwLCA2MTgyLCA5ODM0NjYsIDY1MDU4LCAwLCA5ODM0NzAsIDk4MzQ2NywgMCwgCisgICAgOTgzMjI1LCAwLCAwLCA5ODM0NzIsIDkyMzQsIDAsIDYxODIsIDk4MzQ3NCwgNjUwNTgsIDAsIDk4MzQ3OCwgOTgzNDc1LCAwLCAKICAgICA1NDcxLCA5NDYxLCA1NTczLCAxMTg5MzYsIDU0NzMsIDQ0LCAwLCA2NjI0NCwgOTQwNzIsIDAsIDY2MjM4LCAxMjg0NCwgMCwgCiAgICAgMTYyMiwgNzc2NywgMTkwMCwgNDEzMzksIDExNDU4LCAwLCAwLCA2NTgxLCA1NTc2LCAwLCA2NDQwNSwgNDEzMzcsIDAsIAogICAgIDQxNjMxLCA4OTQ3LCA2ODM5MCwgMTI3ODQ0LCA0MTY5NCwgMCwgMCwgNzkwOCwgMCwgMTA0MDgsIDY1NzksIDAsIDY0NjE4LCAKQEAgLTE3MTM4LDEwICsxNzE1NywxMCBAQAogICAgIDk5OTIsIDEyODI5OSwgNTA1NywgMCwgMCwgNzQ1MzgsIDUwNTQsIDExODk1MSwgMTk0OTcxLCA3ODYwNiwgMCwgMTQzNywgCiAgICAgNDE2MTcsIDY1OCwgMzQ5NywgMTI4NTA5LCA3NDg2LCA1MDYxLCA1MDYwLCA0MjM1LCAxMjc4NzgsIDAsIDEyODUyOSwgCiAgICAgMTIxMTMsIDQyMzYsIDQ3MjcsIDAsIDAsIDc2OTMsIDEwNzQ5LCAwLCA3NDg4LCA1NzczLCA5NzgsIDEyODEzNCwgMCwgCi0gICAgNDE2MTksIDEwMjM5LCA2ODYxMSwgMCwgNjYyMDksIDAsIDEyODcwMCwgOTc0OCwgOTgzOTQ3LCAxMjc1MjQsIDAsIDAsIDAsIAotICAgIDAsIDE5NTA4MywgMCwgOTgzODM0LCAwLCAwLCAwLCAwLCAwLCA5MzQxLCAxMTk1OTYsIDIzNzksIDExMzI1LCAwLCA2NDY2OCwgCi0gICAgNjc4NTQsIDgxMjUsIDEyMDU0NSwgNjc0MywgMTE5MTc1LCA5MTc5NDAsIDIzNjksIDAsIDk4Mzk2MywgOTgzOTY0LCAKLSAgICAxMTkyMzUsIDc0MDkyLCA3MzkzNiwgNzAwOCwgNDM2NjAsIDAsIDAsIDAsIDIzNjcsIDEyNzgyNywgOTgzODQ4LCAyNjQsIAorICAgIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDAsIDY2MjA5LCAwLCAxMjg3MDAsIDk3NDgsIDk4Mzk1NiwgMTI3NTI0LCAwLCAwLCAwLCAKKyAgICAwLCAxOTUwODMsIDAsIDk4Mzg0MywgMCwgMCwgMCwgMCwgMCwgOTM0MSwgMTE5NTk2LCAyMzc5LCAxMTMyNSwgMCwgNjQ2NjgsIAorICAgIDY3ODU0LCA4MTI1LCAxMjA1NDUsIDY3NDMsIDExOTE3NSwgOTE3OTQwLCAyMzY5LCAwLCA5ODM5NzIsIDk4Mzk3MywgCisgICAgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDQzNjYwLCAwLCAwLCAwLCAyMzY3LCAxMjc4MjcsIDk4Mzg1NywgMjY0LCAKICAgICAyMzc1LCA4MDYwLCA2MTk0LCAxMTk4NTgsIDE4NDQsIDExOTA4NCwgMCwgNjAxOSwgMCwgMCwgNjk2MSwgMCwgMTE4ODM5LCAKICAgICAwLCA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDkyMzMzLCA3MjUsIAogICAgIDY1MDQyLCAxMTg3OTcsIDEyMDgwMCwgOTgzMDQwLCAxMjg5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjYxLCAxMjA3MDcsIApAQCAtMTcxNTksNjM0ICsxNzE3OCw2MzQgQEAKICAgICAxMjY1MDMsIDQxNjA3LCAxMjAxMTUsIDE2NzksIDEyMDExNiwgMTIwMTgwLCAxMjAxMTMsIDEyNzQ2MiwgNzAwNSwgNDE2MDksIAogICAgIDk1ODAsIDAsIDQwMSwgNjk5NDksIDQzNzc5LCA2OTY4LCA1NzYxLCAzNDIsIDg1NTMsIDAsIDgxNDMsIDEyNzExNSwgCiAgICAgMTE5ODMsIDkyMjQ5LCA2MjQsIDc0NTA4LCA0MDU3LCA0Mzc4OCwgNTA3OCwgNzQyNTgsIDEyNDc4LCAwLCA1MDc2LCAwLCAKLSAgICAxOTQ2MDksIDAsIDEyMDA5NywgNjg1LCA5MDI1LCAxNTI0LCAxMjYxOCwgMCwgNTUzOSwgMCwgOTI1MjMsIDEyMDEwMiwgCi0gICAgNzEzOCwgMTIwNTUyLCAwLCAxOTQ2MTEsIDc4NzUyLCAwLCAxMjUyMCwgODA1OCwgOTczMiwgMCwgNTA4MCwgNjQ3NzUsIAotICAgIDUwMzYsIDUwMzUsIDEyMDU5MCwgNDI2MDQsIDk4MzY0NywgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgNzg4MzgsIAotICAgIDQ0MzIsIDEyNzI3MSwgNTAzMywgMTI3MjczLCAxMjcyNzIsIDQ4MzYsIDM4ODgsIDczNzkyLCAxMDcyOSwgNjQ1NDYsIAotICAgIDEyNzI2MiwgNDM3MDQsIDEyNzI2NCwgMTI3MjUxLCA2NzU4OCwgMTE5MDAwLCAxMjcyNTIsIDEyNzI1NSwgODg1OCwgNjQwOSwgCi0gICAgMTI3MjU2LCAxMjAyNTIsIDEyODEwMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAxMjcyNDgsIDM0MzIsIDEwMjE4LCAwLCAKLSAgICA2MDk0LCA3NjQxLCA0MjQ0NSwgMCwgOTI0ODcsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCA5ODMxNzcsIDUwMzAsIDAsIAotICAgIDAsIDAsIDczODY5LCA5NjIyLCAwLCA2OTk0NCwgNjc4NywgMCwgMCwgMCwgOTgzNTgzLCAxMDU0NCwgMTI5MTksIDAsIAotICAgIDkyMjE4LCAwLCAwLCA2OTkwNiwgMTIwNzg5LCAwLCA5NDcsIDExOTgzNSwgMTk0NTg2LCAxOTQ1ODUsIDEwOTY5LCAKLSAgICAxMTk5MzUsIDc2MTMsIDkyNTYyLCAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgNzM3NiwgMTIwMTgxLCAxMjAxOTIsIAotICAgIDEyMDI2OCwgMCwgNDM1NjcsIDc0MDU2LCA5MTc5MTAsIDExODMzLCAxMTk5MTksIDcyMTYsIDY1MjMyLCA3MjE3LCAyNTEsIAotICAgIDcyMTgsIDc4OTUsIDQzOTUsIDQzNTM4LCAxMTk5MjYsIDExOTkyOSwgMTE5OTI4LCA3MjEzLCAxMTk5MjIsIDcyMTQsIAotICAgIDcyMTUsIDk4MzgyNywgNzQxNDEsIDg4ODAsIDc2ODUsIDY2NDU5LCAxMjAxNzMsIDY1NTQwLCAxMTk2MTgsIDYyNSwgODE4NywgCi0gICAgNDI4NjEsIDExMTMsIDcyMzYsIDc5MTUsIDM2MzAsIDEyMDE3NiwgODE3OSwgNzQyNjQsIDY3ODg2LCA5MzE2LCAxMDk4MCwgCi0gICAgMjQ4OSwgNjU2MjQsIDgxNTAsIDEzNTksIDY3NjUyLCAxMjczMjksIDEyNzMzMCwgNzM3NTYsIDUwNDIsIDUwNDEsIDQyNzY5LCAKLSAgICAxMjA4NCwgMTI3MzI0LCAxMjczMjEsIDkyMjc5LCAxMjczMTksIDEyNzMyMCwgMTI3MzE3LCAxMjczMTgsIDEyNzMxNSwgCi0gICAgMTIyODMsIDE2MTYsIDM3OTUsIDAsIDg3OTUsIDY2MjQ1LCAwLCAwLCAwLCAxMTM4LCA3MzkwNSwgMTI2NzcsIDAsIDAsIAotICAgIDMyMzksIDEyNzMxMSwgMCwgMCwgODQzMSwgMCwgNDIxNjQsIDAsIDExNzc4LCAxMjYyMCwgNjgyNiwgNzM3NzMsIDExOTA3MywgCi0gICAgNTA0MCwgMCwgMCwgOTgzNDM1LCA3ODQyMCwgMCwgNTAzOSwgMCwgNzg0MTgsIDAsIDUwMzgsIDAsIDAsIDEzMTg0LCAKLSAgICA3NDI5MywgMCwgNjQ2NDgsIDAsIDkzNTksIDc4NDE2LCAwLCAxMjg3NzAsIDY1MTU3LCA2NjYyLCAwLCAwLCAzODYzLCAKLSAgICA3MzkwOSwgNDgzNSwgNTUyNjYsIDQzNDMyLCAxMjc4MjIsIDQzMDksIDcxMjcsIDE5NDU2OSwgMCwgMTk0NTY4LCAxMzAxLCAKLSAgICAwLCA0MjU4OSwgNTY5LCAwLCA3MzgxMywgNzExLCA0Mzg5LCA3MTMzLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAKLSAgICAxOTQ1NzAsIDQxMzMxLCAxMDA2LCA3NDI0MCwgMCwgMTU1MCwgODIwMSwgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIAotICAgIDc3OTA4LCA0MjczOCwgNjU3ODQsIDc3OTA3LCA2NTI2NywgMzc1OCwgMCwgNjU3ODEsIDY0NzM0LCA3MDA3MywgMjQ0MCwgCi0gICAgNjU3ODAsIDc3OTEzLCA4NDQ5LCAwLCA1MDA4LCA5ODM1NzIsIDIxMTgsIDAsIDEyMTIxLCA4MjU1LCA1NTEyLCA3Mzg3NSwgCi0gICAgMjEyOCwgMjEzMCwgMjEzMSwgMjEyNiwgMjEzMywgMTExOSwgMTI3MDY4LCAyMTE0LCAyMTE2LCAyNDU1LCAwLCAyMTIyLCAKLSAgICAyMTIzLCAyMTI0LCAyMTI1LCAxMjc0ODYsIDg3MTQsIDk4MzgxMSwgMjExMywgMCwgMjExNSwgMTI4MTc3LCAxMjc5MDcsIAotICAgIDQzNzEzLCA1MDUyLCA2NjIyMCwgNTgyMSwgNjE4NiwgNjU3NzgsIDY1Nzc1LCA1MDUxLCA2NTc3MywgMTQyOSwgNDI2NDcsIAotICAgIDUwNTAsIDMwMiwgMzg4LCA0MTExNSwgNzM1LCA2NjM3LCA1OTA3LCA2NTA4OCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCAKLSAgICA5ODMxODEsIDEyMDAzLCA1NTEzLCA2NjY2LCA1MDUzLCA3NDIzMCwgNTUxMCwgNzg0NTEsIDAsIDc4NDQ3LCAyNDcwLCAKLSAgICA3ODQzNywgMCwgMTkyNSwgMCwgOTIyMzcsIDc0ODA3LCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCA5MjMxMywgMCwgNzQ0OTcsIAotICAgIDkyMzk1LCA4MDg5LCA2OTI5LCA2MzksIDk4MzU2MywgNjgxNzksIDY0NDQyLCAwLCA5MjM0OCwgNDU5OSwgNDE0MDIsIAotICAgIDY2NzQsIDQzMzk3LCA0MzI5NCwgMTQ3NiwgNjQ4LCAwLCA2NTgxOSwgMzIzMywgMCwgNDE3ODIsIDY5NTEsIDk0MDE3LCAKLSAgICA5ODM5NjcsIDM1MzAsIDk3NTAsIDEyODMxNywgMCwgNjY1NiwgNDI2MTgsIDAsIDUwNDYsIDg1MTIsIDY1ODU2LCA3NDI2MSwgCi0gICAgODk2NywgMCwgNTA0NSwgNDIwMjYsIDE5MTYsIDc5ODYsIDUwNDQsIDEyMDU1NiwgOTAwNiwgMTMxMjgsIDUwNDMsIDAsIAotICAgIDc4NTMsIDc0MDY4LCA3NDAwNCwgOTY2OSwgMTIzNDEsIDEyNzAzLCA4NDAyLCAwLCAxMTkwNzAsIDkxNzYwMCwgNDE3NTAsIAotICAgIDM1ODYsIDY0NTA4LCA0MzE0OCwgMCwgMCwgMTE5NjA2LCA2Nzk4MywgMTMyOTYsIDUxNywgMCwgMTI4NTM0LCAxOTQ5NDYsIAotICAgIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAwLCA3NDQ3OCwgMTA1MzEsIDc3ODQsIDQxNTI2LCAxMDgyOSwgNzM5OTEsIDgwNTcsIAotICAgIDExMjYsIDczODk1LCAwLCAxOTQ1OTEsIDAsIDM5MjUsIDQyNTEsIDgwNjksIDEwNTE3LCAxMjA0MzksIDQ4OSwgMCwgNDI1MCwgCi0gICAgMTIwNDQxLCAxMjA0NTIsIDQzMTUxLCA5ODMxNzgsIDE5NDg1MSwgNjYyMDAsIDAsIDAsIDAsIDc4NDIzLCAwLCAwLCA4NzExLCAKLSAgICA2MTgzLCAwLCAwLCAwLCAxMjA0NDgsIDc2MjMsIDExODkyNSwgMTE4ODg5LCA5MjM1LCAxMjc2MCwgNzQxNzYsIDY5NjYyLCAKLSAgICA2NjQ0NSwgNDM1NDAsIDEwMDYyLCAzNzQzLCAxMTUxNCwgMTEwNzgsIDAsIDEyMTM2LCAwLCAxMjY1OTcsIDEyMDQzNSwgMCwgCi0gICAgNzcyNiwgMCwgMTk5MjIsIDI2NywgMzM5MywgNDIxOTgsIDEzNzEsIDE5NDg0OSwgNjkyMzMsIDI0NTgsIDAsIDYyMDEsIDAsIAotICAgIDQxMDc0LCA0MjY2LCAxMDY1MiwgNDE2MTIsIDQxMDc3LCAzNDAyLCA5MDUwLCAzMzk4LCAwLCA5ODMzNDAsIDAsIDMzOTEsIAotICAgIDQxMDc1LCAyNDc2LCAwLCAxMjgwMTcsIDAsIDEwNjI1LCAwLCAxMjc2NywgMTMwMTcsIDc4NzQzLCA2NDI2MSwgNjQ5MzQsIAotICAgIDEyNzUzNywgMTMwMTQsIDEzMDEzLCAwLCA2NjczLCAwLCAwLCAwLCAxMjQzOCwgMCwgOTgzMzM0LCAwLCA5ODM4NzEsIAotICAgIDEyNjYzOCwgOTA1MywgMTMwMTUsIDc0NTIzLCAwLCA3MDQsIDY2MjE1LCA2MTk1LCA5ODM4MTksIDY2NjAsIDc4NzU4LCAKLSAgICA5MTc3NjAsIDkxNzc5MywgNDIyMTIsIDEyNjI5LCAxMTQzNSwgMCwgNTUyNTYsIDY1NTM4LCAwLCAxMjc5NDAsIDk4MzMzMywgCi0gICAgNzQ1NDcsIDEyNjU4NSwgNjU0NDgsIDc4MTAwLCAxMjk0OCwgMTE5MDAxLCAxOTUwMDIsIDExOTIzOCwgMTk1MDA0LCAKLSAgICA3ODA5OSwgMTI3MDg1LCAwLCAxMjgzMjAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDc4NDU4LCA2NjcyOCwgMTgxNiwgCi0gICAgMCwgNDI1MzMsIDE2OCwgNDI4NDUsIDQ4OTgsIDY0Mjk4LCA5ODMxNDEsIDAsIDQ5MDEsIDE4MjEsIDAsIDU3OCwgMzY1MywgCi0gICAgMCwgNzkxLCA5MTYyLCA2OTc3LCAwLCA3ODg4OSwgNzQ1NjEsIDAsIDczNzMxLCA4MzU0LCA0MzU5MCwgMTE5MzAzLCAKLSAgICA5ODM0NDEsIDc1NTcsIDExOTMzOSwgMTE5MzAxLCA4MjM0LCA3MjQxLCAwLCAxMjA2NzEsIDExOTE2NywgMTk0OTk2LCAKLSAgICAxMjgxMSwgNjU5MjUsIDM5NDYsIDc4MDc4LCAxMDk5OCwgNzgwODAsIDY3MywgMTk0ODY3LCA2NDM5NywgMTI4Mjc2LCAKLSAgICA3NDU5OSwgNzg0NDksIDg4OTAsIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIDI0NTIsIAotICAgIDc4MDgzLCAxMjg4MjQsIDg3MjksIDc4NDU2LCAwLCA3ODQ1LCA5MTc5MTcsIDcxMzAyLCA0NDA4LCA0MTIyLCA2NzcyLCAKLSAgICAxMTAzOSwgODcyMywgMTk0OTkwLCA3MTMxMCwgMTE5MzAyLCA3MzEsIDExOTMwNCwgOTIyODYsIDI0MzgsIDY0ODU1LCAKLSAgICAxMTkzMDAsIDExOTI5OSwgMTE3NSwgMCwgNDIxMzUsIDM3MywgMTE5MTcyLCAyMTE5LCAxMTQ1NywgMTE1MjEsIDc3MjMsIDAsIAotICAgIDAsIDAsIDQxOTUyLCAwLCA1MjczLCAyMTI3LCA1MjY5LCA2MzM3LCA1MjAyLCAyNDA0LCA1MjY3LCA0MjgyMywgMTEyOTEsIAotICAgIDE5OTE1LCA1Mjc3LCAxMjk2MywgMTI3ODY0LCA2MTg5LCA0MTI1LCAxMzE0LCAxMjEzMywgMTIwMzQwLCAxMTg4NzMsIAotICAgIDEyNzEsIDk4MzYzMSwgMCwgNjYwMjQsIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgMzg3OSwgMCwgMTI5NzgsIDQxNjYsIAotICAgIDQ1NzQsIDAsIDc1NjcsIDc0NTksIDk4MzE2MCwgNDEzOTAsIDUzODQsIDQxODgyLCA2NzY0NywgOTI1NDgsIDU3NTksIAotICAgIDk4MzkwMywgMCwgNDEzODgsIDY0NDQ2LCA0MTM5MiwgNjQyODgsIDQxMzg3LCAwLCA4NzA2LCA1NTUyLCA5ODMxODcsIDcwMCwgCi0gICAgMCwgNTU1MywgMCwgNzA4OCwgNTM1NiwgNzQ5OSwgNjgwMDcsIDY2NTk2LCA3NDA2NiwgMCwgMTAyNjMsIDU1NTQsIDAsIAotICAgIDEyMzQ0LCAxMDMxMSwgNzgxMTMsIDY2NjUsIDkyNjI2LCAwLCA3NjE4LCA4NTE3LCAxMTQ1NSwgNzg0NDAsIDY0NjMyLCAKLSAgICA2NDQ0NywgNTU1NSwgNzgwODgsIDc4MDkzLCA3ODA5MSwgMCwgNDI4MDMsIDY1MDMzLCA5MTQzLCA2NjY4LCAxOTUwNjcsIAotICAgIDY3OTk1LCAxOTUwNjksIDY1NiwgMTk1MDcxLCA2NTAzNywgNDU3NywgNjQ2MjQsIDAsIDAsIDAsIDk4MzY0MCwgNDI2OSwgCi0gICAgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIDY5NjQ0LCA5NTAsIDAsIDkyMjczLCA2NjU4MCwgMTE4ODk1LCA2NjY4MywgMTA1NTQsIAotICAgIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgOTg0OCwgMTAzODEsIDAsIAotICAgIDEyODg3MCwgOTgzNjkyLCAzNjUxLCAwLCAxMjA3MzAsIDEyNzU1NiwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCAKLSAgICA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAxMjA5MywgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgNzgzNzMsIDE0NDEsIAotICAgIDQyMDg3LCAzMDYzLCA2NTAsIDAsIDc4MzgsIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDEyMDc5MCwgCi0gICAgMTI4NTgyLCA5MDc4LCA4NTQ1LCA2NjM1NiwgMTI4Nzk5LCAwLCA5MTU0LCA5MTE4LCAxMjY1NDMsIDAsIDI2NzYsIDIyNzcsIAotICAgIDAsIDczODEyLCA2MTkwLCA4NTk5LCAxOTUwNTMsIDY5OTE4LCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCAKLSAgICA5MjYyMCwgMTIxMjksIDAsIDg0ODEsIDAsIDYyMDIsIDE5NTAzNSwgMTA5MjAsIDEyODIzNywgNTIwMywgMTk1MDM5LCAKLSAgICAxOTUwMzgsIDUxMDgsIDUxMDcsIDY1ODE4LCA2NjAxOSwgOTc2MiwgMCwgNTU0MSwgNzQ3NzIsIDAsIDEyNjEzLCA1Mjg0LCAKLSAgICA2NjU3LCAyMDcsIDEyODgwNiwgNDI3NSwgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCA3ODc4NiwgNTEwMywgCi0gICAgMTI3ODYxLCA2NDM0OCwgNDEzNjgsIDQzOTc0LCA0ODgsIDY5ODExLCAwLCA3MTMzOSwgMTAxNTcsIDAsIDQzMDM0LCAKLSAgICAxMTQzOCwgNjQ2NzQsIDAsIDkyNjk0LCA2ODQzMSwgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgCi0gICAgNDEzNjcsIDUxMDUsIDEyNzUwOSwgNjk3MjAsIDY0NzYsIDUxMDQsIDk4Mzc0MCwgMzA0LCAzMTc2LCAxMTkwMTAsIDAsIAotICAgIDkzMiwgMTIwNjMzLCA2NTY3LCAyMzgsIDY5NjU2LCAxOTUwMTEsIDE5NDU5NSwgMTk5MDUsIDEyMDU3NywgMTk1MDE1LCAKLSAgICA3ODg3MCwgNDEwNDQsIDY3NjQwLCAxOTQ5MDIsIDQyMDU1LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgCi0gICAgMTI1NTIsIDE5NTAxOSwgODgwMywgMzA5LCA2NjIyLCA4MTUxLCAxMDg1OCwgNzg3MDYsIDY3NjM2LCAwLCAxMjU2OCwgMCwgCi0gICAgMTI1NTMsIDEwODE0LCA0MzI3NSwgNjk1MCwgOTcxMiwgNjg2ODAsIDQzOTcwLCA5ODMxOTgsIDY1MTY1LCA5MjcyNSwgMCwgCi0gICAgNjY0NjYsIDAsIDAsIDAsIDY2NzI1LCA2MTkxLCAxMTM1MSwgMTA0MzcsIDExMzE2LCA2NzYzNCwgNDM3NjMsIDAsIDQxNzU0LCAKLSAgICA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCA2ODQ2MiwgODIzMiwgMTE4ODE3LCAwLCAzMjIyLCAwLCAwLCAwLCA2NjY2MywgCi0gICAgMCwgMCwgMTA4MzQsIDAsIDAsIDY1NzMyLCA5NDA5NSwgOTE3NTQ3LCA5MjY4MiwgNjc2NzksIDE5NTAyMCwgMCwgNzc4MSwgCi0gICAgNDEzODMsIDY0NTY4LCAwLCAxMjA3MzgsIDEyMDc3LCAwLCA2NDU4NiwgOTE3NjIwLCA0MjM5NiwgNTUyNTUsIDM0NzUsIAotICAgIDEyODAzNSwgMjQ3OSwgMCwgMzYzMiwgMTIwNzI4LCAxMDY5OCwgODM3NiwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgNjc2MzksIAotICAgIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCA2NTIyOSwgMTg0MywgNDIyODMsIDQzMjUwLCA0MTU2MiwgOTEwMCwgNzQ1NDgsIAotICAgIDkxNzYzMCwgMzY0MCwgMTI3MTkwLCA0MjMyMSwgNzI4NCwgMTk0OTc0LCAxOTQ5NzMsIDE5NDk1MCwgMTk0OTQ5LCAKLSAgICAxOTQ5NTIsIDE5NDk1MSwgMTI2NjQ5LCAxOTQ5NTMsIDQyMDgwLCAyNTI5LCAwLCAwLCAwLCA0MjA4MywgMTIwNjc4LCAKLSAgICA2ODM5OCwgMTk0OTU3LCA2NzYxOSwgNjYzNjcsIDE5NDk1OCwgOTYzNCwgOTIzODAsIDk5ODgsIDAsIDQxMDY4LCAwLCAKLSAgICA0Mjk1LCA2NTI2NCwgNjgwMDYsIDAsIDkyNTQ1LCAwLCA3ODUsIDgyMzYsIDEyODY0NywgOTAyNywgNjgxNjAsIDY3NjIzLCAKLSAgICA2NDM4MywgMTIwMjY1LCA5MjUsIDEyNzE1NiwgMCwgNDE5ODUsIDQxMDcxLCA5NTg2LCAwLCA0MTk4NCwgOTIxNywgMCwgMCwgCi0gICAgMCwgOTE4NiwgMjA2NywgNDAxNiwgOTgzNzk0LCAwLCAzODEsIDEyOTM2LCAwLCA0MjA3NywgMCwgNjk4ODAsIDUxODQsIAotICAgIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAxMjg1MzEsIDQ1ODUsIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgMCwgODEyLCAzNjE1LCAKLSAgICAwLCA1MTc4LCA0NDAwMCwgMTIwNTQ4LCA3ODgwNywgNTE4OCwgNzQyODcsIDY3NjI5LCAzNjA1LCAxMDY5MiwgMTE2NiwgCi0gICAgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCA0MjYxNiwgMTIwNjcwLCAyNDQyLCAxMDcwMywgNzg3ODksIDY3NjMyLCAKLSAgICA5MTc5MjQsIDEyNzcxLCAxMjczNiwgMTI3NTMsIDY2NzA4LCA3MzkzMywgNjc2MjYsIDQyNDAxLCAwLCA2OTg3MiwgCi0gICAgMTI3MzczLCA0MjI4OCwgMTI3NTEsIDAsIDg1NDIsIDEzMTQ1LCAxOTQ5NjMsIDI0NjgsIDY2NzA2LCA0MTI5NCwgMzYyNiwgCi0gICAgMzg4MywgNjQzODgsIDQyNDc5LCAwLCA0MTExNywgMCwgOTI1ODAsIDAsIDAsIDY3NjI0LCAwLCAxMjkwLCAwLCA2NTU4NSwgCi0gICAgMjcxNSwgODA2LCA2NTIwOCwgNDE4ODQsIDkxNzg4MywgMTMxOCwgNjQ3MzEsIDEyNjU3OCwgMCwgMCwgNjYzMjUsIDM0NjUsIAotICAgIDI0MDUsIDkyNDAsIDAsIDEyNzU2LCA2NTI1OSwgMCwgOTgzNzcyLCAxMjc1MiwgNTgzMywgMTQzMiwgMCwgNDE4ODMsIAotICAgIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgMjA2MiwgMTI3MjkzLCA2NDk0LCA1NTM3LCA3ODY1NiwgMCwgCi0gICAgMTk0NTg3LCAwLCAxMjExLCAwLCAwLCAwLCAxMTg4MzIsIDEyMzE4LCAwLCAwLCA2ODAwNSwgMTA2MjIsIDk4Mzc3MCwgMCwgCi0gICAgNzg2NTQsIDY1NjYsIDc4NjU5LCAwLCA3Mzc4MCwgMTE5MTk2LCA2NDg2NCwgMCwgNzg2NjAsIDAsIDgyODQsIDEzMDgxLCAwLCAKLSAgICAzNTg5LCA0MjA1MSwgNDAzNSwgNjQ5MiwgOTIyMzYsIDQyNjUsIDY2NDIsIDM5NzcsIDc0MTg2LCA0MTc3OCwgODM2LCAKLSAgICAxMTkyMTYsIDI0ODgsIDAsIDQ1ODIsIDAsIDAsIDQxNzc3LCAxMjkyNiwgOTgzMzY5LCA3NTI4LCAxMDU1MCwgMCwgOTI3MDYsIAotICAgIDAsIDEwOTYxLCAwLCAxMzc0LCA2NDg3OCwgMTE5MDE0LCAwLCA0MjM4OSwgNDEzNzQsIDIyODYsIDAsIDc4NDkyLCA0MTM3NywgCi0gICAgMTI3OTA5LCAwLCA0MDAsIDEyNTk3LCAxMjA1ODYsIDAsIDAsIDY2NjEsIDk4MzE0NSwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIAotICAgIDAsIDcxMzAxLCA5ODM4NTMsIDM0NzMsIDc3MTgsIDAsIDAsIDAsIDU1Mjg1LCAwLCAwLCAwLCAxMTk2OSwgOTgzMzgyLCAKLSAgICAxMjc4NDEsIDYzNjUsIDE4ODcsIDY3NjMsIDk4MzM2MiwgODA4MCwgNzAwNiwgMCwgOTgzMzYzLCA2NzU3LCA2NDM1MSwgCi0gICAgMTU0NCwgMCwgNjc2NiwgNjQ2NzcsIDEyMDcxNiwgOTgzMzY0LCA2MTQ2LCAwLCA3NzEsIDk4MzM2NSwgMCwgMTI4MTIsIAotICAgIDEzMTY4LCA0MjI3MiwgMTIyMDAsIDkxNzkyNywgNzkwNCwgMCwgOTUzLCAxMjkxNywgMTE5NTYwLCAxMjMwMCwgMCwgCi0gICAgMTE0OTEsIDk3MjQsIDEwMzQxLCA5ODM3NjQsIDk1MjQsIDc0OTAsIDExMzg5LCA3NDg5LCAzMzc5LCAwLCA3NDg3LCAwLCAKLSAgICA0NzEsIDc0ODQsIDc0ODIsIDY3NTMsIDc0ODAsIDU3NjQsIDc0NzgsIDc0NzcsIDY1MDEsIDc0NzUsIDY5MTgsIDc0NzMsIAotICAgIDc0NzIsIDI0NzQsIDc0NzAsIDc0NjgsIDEwMjMyLCAxMDYxNSwgMTAyMTMsIDEyNzI4OCwgOTIzNTcsIDEwMDQ5LCAxMTgzNCwgCi0gICAgMzU0NCwgMCwgNjAxNywgNjUzMTEsIDEyNzQ4MSwgMTIwMjE2LCAxMzMwNiwgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAwLCAKLSAgICAxMjA1NDQsIDAsIDAsIDkyNjYwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgNDI2NjUsIDkyMzQxLCAwLCAyMTM5LCA0MjU2LCAKLSAgICAxMjA3NzYsIDc0MzgwLCAwLCA0MjY3NSwgNDI2NTgsIDEyODQ1LCAwLCAwLCA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgCi0gICAgNjU2NzEsIDcwODMsIDEyMDAwOCwgODA2NiwgNzY3OCwgNzQ4NjUsIDAsIDAsIDAsIDAsIDcxODYsIDAsIDEyMDU1NSwgMCwgCi0gICAgNDQ1LCAxMjA1NjYsIDEyODMwOCwgMCwgMCwgODMzMCwgMCwgMCwgNDI3OTcsIDk4MzE1MCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAKLSAgICAxNzcwLCAwLCAxMjg4NjYsIDE1NjAsIDEyMDIwOSwgMTk0OTcyLCA0NTg0LCA3Mzg0MywgMCwgMTE3MTIsIDEwODY2LCAKLSAgICAxMTg5MjgsIDExMTgsIDcxMzM0LCAwLCAwLCAxMDgxLCA3NDM2LCA2ODQyMCwgNzI1MiwgMCwgNTk5NiwgNjk5MjEsIDQ5MDMsIAotICAgIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDcxMzksIDAsIDEyMDQ3LCA0MTM4NCwgMCwgMCwgMTg0OCwgNDMzNCwgCi0gICAgNjMyNCwgNDE5NzUsIDY0Nzc3LCAxMDY3NCwgMTIzMDgsIDEyMTg2LCAwLCAwLCA5ODM3MzIsIDEyNzE1LCA2ODAwMiwgCi0gICAgOTgzNDcxLCAxMjY2MzAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgNjY2ODUsIDExOTE1NywgNjgwMDAsIDkyNDY0LCAwLCAKLSAgICAxMjY5ODQsIDY4MDAxLCA5MzM0LCA5MjcwNSwgOTIzMTUsIDcwMTAxLCA3OTc1LCAwLCA3Nzk1NywgMCwgNjY2MjEsIDQ4ODQsIAotICAgIDY2NTk3LCA2OTczMiwgMCwgMCwgNjMxMywgNjU1MTMsIDY5ODU3LCAwLCAwLCAwLCAyMzQ1LCA0MzY5NywgNDYzLCAwLCAwLCAKLSAgICAxMTk2MDcsIDMxMTcsIDU0NjAsIDAsIDAsIDk4MzM3OSwgMCwgNDIyNzksIDE5NDU3NywgMCwgNzg0MTUsIDAsIDE5NTAwOCwgCi0gICAgOTgzMzc2LCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgMCwgMCwgMjQ4MiwgMTQ3MSwgMCwgMCwgCi0gICAgNDIyNDcsIDEyMzc4LCA3MzkyNSwgNjk2NjQsIDAsIDEyMzc0LCAwLCAwLCAwLCA5ODM2ODUsIDI0NjAsIDAsIDExOTQ0LCAKLSAgICAxMjM3NiwgMTI3ODY4LCA2NDY3OSwgMCwgMTIzODAsIDEwNTU3LCA2NDQ3MywgNTg3MCwgMCwgMjAyNCwgMTI3MTgwLCAwLCAKLSAgICAwLCA1MzksIDAsIDEyNzc2NSwgOTQwNTIsIDM4NTMsIDY1MTgwLCAxMjc5MjMsIDEyMDc5NiwgMTIwMjQ1LCA5MjMyNCwgMCwgCi0gICAgODY1OSwgMCwgMTI0NzQsIDkyNTc5LCA5NTAzLCAxOTQ5NjksIDI0NzgsIDAsIDQxNjIsIDAsIDQyNjAsIDEyOTUzLCAKLSAgICA2OTYzMywgMTIwMDg5LCAxMjQ3MCwgMCwgNzQxODksIDI3NDIsIDEyNDc2LCAxMTc5OCwgMTA5NDYsIDEyNzMxMCwgNTAwMCwgCi0gICAgMCwgOTgzNTc5LCAwLCA2OTY3MiwgODIxMywgNzQwMTcsIDc3NzEsIDYxNjEsIDY4MDE4LCA2NzA5LCAwLCA3ODg4NSwgCi0gICAgOTgzNjk5LCAxMjc5NzEsIDEyMDU4MiwgNzg1NDcsIDAsIDEwMzAxLCAxMDMzMywgMTAzOTcsIDAsIDAsIDczNzkxLCAwLCAwLCAKLSAgICAwLCAwLCAxMTkxMjMsIDQwMTQsIDEyODQyLCA3Mzk1MiwgMTIwMTUsIDEyNzI5MCwgODI3NSwgMzg5MywgOTgzMjU2LCAwLCAKLSAgICAxMjIxMCwgNzIyMSwgNDIxNDcsIDAsIDc0NTUwLCA3NDQ2NSwgNjQ3NDcsIDExODg0MSwgMCwgMTI1MTYsIDQ0NDQsIDAsIAotICAgIDkyMjcxLCA3NDUzNywgMTA4OTIsIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCA3ODM4OCwgNDE5NzMsIDM1OTEsIDQxOTY5LCAwLCAKLSAgICAyNDUzLCAxMjg1NDksIDkyNjY2LCA2NDcwNSwgMCwgMCwgMTAzNDksIDEwNDEzLCA0MzU5MSwgNDE5NjIsIDMyMDIsIAotICAgIDc0MzUzLCAwLCA4MzE2LCAwLCAwLCA5NDA2MCwgNjg3LCAwLCAwLCAwLCAxODQwLCAwLCA2ODY3MSwgMTE5ODA5LCA0ODgzLCAKLSAgICAyODUsIDQ3MjMsIDcwMDk5LCA5MjY5MiwgNDQ1OSwgNzQ1NzcsIDQyOTIxLCA0MTcyMCwgMTEwODksIDI0MCwgMTk5MDYsIDAsIAotICAgIDQyMzIzLCAwLCA5NzQzLCAxMjAyMzIsIDEzMTM0LCAxMjY1MzUsIDAsIDAsIDAsIDAsIDQyNjM0LCA5ODMzMzUsIDQzNDM3LCAKLSAgICAzMDgxLCAxMTQ2MywgMTIwMTU0LCAwLCAwLCAxMDQ0NSwgMCwgMCwgNjY3MTcsIDI2MTQsIDkxMjUsIDExOTAyMywgMTcyOSwgCi0gICAgMCwgMTIwMjM2LCA2NTIyMSwgNjM4ODMsIDQzMzM0LCA2NDg1MiwgMCwgNjUxOTQsIDY2MjAxLCAwLCA2NjU3OCwgNTAwMSwgCi0gICAgNDE4NzksIDc0NDI3LCA0MTIxLCA1MDAzLCA4ODQsIDY2NzAwLCA2Mzg3OSwgNDk0MywgNTE1MCwgNzM4ODksIDc0MTgyLCAKLSAgICAxMjc5MTUsIDY0MywgMzA4NiwgMCwgNDI0NDgsIDQyMjk5LCA1OCwgMCwgOTE3OTUyLCAxMjAwODMsIDYzODczLCA4NDkxLCAKLSAgICAwLCAwLCAwLCA0NTMwLCA0MjQwOSwgNzEyNiwgMTk0NTc1LCAyNzIxLCAxMjAwNzQsIDExOTA5NiwgMTk5MjksIDAsIAotICAgIDE5NDU3NCwgMCwgNDI0MiwgNDI2NCwgMTIwMDc3LCAxMjA1MzAsIDY2MTc5LCA0MjQxMiwgNjU5NDEsIDEzMTE0LCA2NDUyMiwgCi0gICAgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgNDQzNywgNzM5NDgsIDEyNzA3NCwgOTgzMjMyLCA1NTI4MCwgNDIxNzQsIAotICAgIDE5NDkyNSwgNDI0MzAsIDAsIDAsIDQyMzU1LCA2NjAyNiwgNDMwNiwgNDEzODAsIDY4NDMyLCA5MjU4NiwgMCwgNjY2NjcsIAotICAgIDEyNzMwOSwgMCwgMTI2NTIxLCA0MjIwMCwgNDI1NjYsIDAsIDAsIDUwODgsIDY5NDgsIDAsIDg1MjQsIDAsIDAsIDEyMzg1LCAKLSAgICAwLCAwLCA2OTY0NiwgMTM4NiwgNjQ1ODAsIDExNDgwLCA2MTE2LCA2NTAzOSwgNjUwMzgsIDEyMzkyLCA2NTAzNiwgODA2NCwgCi0gICAgMCwgMTIxMDEsIDU4MjIsIDExOTAwNCwgMjA4MCwgNzEwLCA3Nzk5OSwgMTE2NjMsIDE2NjYsIDQyMDkxLCAxMTk2NTcsIAotICAgIDEyMzgzLCA0MzY3MSwgNDIwOTIsIDY4NDE4LCA0Mjg5LCAwLCA2Mzg5NiwgMTIwNjEsIDQyMDk2LCA0MzYyMSwgMzM2MiwgCi0gICAgMTIzNzcsIDk4MzgyMywgOTgzODI1LCA2ODQ0OSwgNzQ2MSwgNzM5MDEsIDEyNDQsIDMzMSwgNzM3ODYsIDEyNjgzLCAKLSAgICAxMDY2MiwgMCwgODExMiwgMCwgNjU4NTIsIDAsIDEyMzc5LCAxOTQ4NzcsIDEyMDgxOCwgNDE5NjQsIDQyMjA4LCA2Mzg0MywgCi0gICAgMjA4NCwgNDE5NjUsIDAsIDY1ODY2LCA0MzI3LCAwLCA2Mzg0MCwgNzg1NDksIDQxMjIwLCAxMzAzMiwgMCwgNTg0LCAKLSAgICAxMjkzMywgNDMxNzcsIDEyMzczLCA2OTg1NSwgMTMwMDAsIDEzNTEsIDI5MzUsIDg2OTgsIDEyNjY1LCAwLCAxOTMwLCAwLCAKLSAgICA3ODIyOSwgMTI0MjcsIDY2NTE0LCA2OTg1OSwgMTMwMzEsIDAsIDYzOTAxLCAwLCAzNjU3LCAxMjg1NzIsIDY1MjAyLCAKLSAgICA2MDAwLCAxMTkyMDYsIDEyNDI2LCAxMjcxODEsIDAsIDQxNzQwLCAxMjQyOCwgNDEyODMsIDQxOTE2LCAxMTkyMTAsIDAsIDAsIAotICAgIDEyNDI5LCA2NzI3LCAwLCA3NTYyLCAwLCA1MTcwLCAwLCA0MTc1NSwgNjc2LCAwLCA2NjcwNCwgNjY2NjQsIDk5NzgsIAotICAgIDY2NDkxLCAzNTM2LCAwLCA5NzUyLCA5MjM5NywgNjE2MiwgMCwgNjkyMjgsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIAotICAgIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgMCwgNDIyMDcsIDc0NTQ5LCAxMTc5NiwgNDA5NzAsIDQxODMwLCAwLCAKLSAgICA5MTc3OTksIDgzMDgsIDkxNzc5NywgOTE3Nzk2LCAwLCA2Nzg2NCwgOTE3ODAxLCA5MTc4MDAsIDEyMzM2LCA0MTM1LCAKLSAgICA2OTgwNSwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCA2Mzg2MSwgMCwgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAKLSAgICAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgMCwgNzQ1NjAsIDQxMzcsIDgwODIsIDc4NTA2LCAxMTkwNjIsIAotICAgIDc4NTA0LCA2NzA0LCA0NTkxLCAxMjgwMjksIDAsIDAsIDk2ODAsIDAsIDEyMDYyMywgNTYxLCAxMjE1OSwgMTk1LCA3ODUwOCwgCi0gICAgNDE1MDEsIDAsIDQyMDMxLCA1NzE5LCA3MTcyLCA0MjY4NywgODM2OCwgMCwgNDE0OTksIDAsIDAsIDQyMjQyLCA0MTQ5OCwgCi0gICAgOTE3Nzk0LCA0MjAyNSwgNzg1NjUsIDY1ODA1LCA0MjQ2MywgMCwgMjkyNCwgMCwgMTIwNTEwLCAwLCAwLCAxMTkyMTMsIAotICAgIDczOTQxLCAwLCA0MjMzMCwgOTE3Nzg0LCAzOTY5LCAwLCAwLCA3MTY5LCAxOTkyLCA5NjUyLCA3Mzk3NywgNzI0NiwgCi0gICAgNDIwODYsIDEyNjYxNSwgMjIxOSwgMCwgMCwgMTI4ODAxLCAxOTQ4MzcsIDAsIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCAKLSAgICA5MTc3NzYsIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCAxMjcyNzYsIDkxNzc3OSwgMTI0MzEsIDg2NjgsIDEyNDM0LCA5ODM4MjYsIAotICAgIDkxNzc4MiwgNTk5OSwgMCwgNzcxMiwgMTI0MzIsIDEyODI0MywgNDM2NTMsIDE3MjYsIDEwMTUsIDAsIDgyMTIsIDAsIAotICAgIDEyODAxNCwgNDI0MjMsIDExOTA2NiwgMCwgMTI4MTA4LCA2NjcwOSwgMCwgODgxMSwgOTI3LCAwLCAwLCAxMjQzNiwgCi0gICAgOTgzMjM5LCA0MjAyMSwgMCwgMCwgMTI5OSwgMTIyNDAsIDQyMzUwLCA2NTE0MywgMCwgMTk1MDE2LCAwLCA3ODE5NywgCi0gICAgMTEzNDgsIDAsIDc4MDM3LCA5MTk0LCA5ODMxODQsIDAsIDE5OTE0LCAxMjE3OSwgOTgzODAzLCAyMjk2LCAxOTQ5MjMsIAotICAgIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIDI1OTQsIDM0NDQsIDYzODE3LCA2NDY1MSwgMCwgNDE1MDMsIAotICAgIDEyNzQ3OCwgMTEyNjUsIDAsIDEyMDc1NiwgMTk0OTIyLCAwLCA1NjY0LCAzOTcyLCAwLCAwLCAwLCAxMjg1MDgsIDEyNDE2LCAKLSAgICA5MTc3NjQsIDExOTYwOCwgMTA4MTYsIDkxNzc2OSwgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIDM4ODIsIDg1MzIsIDkxNzc3MSwgCi0gICAgMTU3MywgMTI4NjQ4LCAxMTk4NDcsIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIDY1MzQzLCAxMjY0OTEsIDEyNDE0LCAKLSAgICA4Mjg3LCA2ODIxOSwgMTk1MDE3LCA2ODEwOCwgMTE0MywgMTE5MTY5LCAxMTk4NDYsIDEyNDE1LCA2NjI2LCA0Mjc2MywgMCwgCi0gICAgMTE4ODg0LCA5MDIxLCAxMjA3ODMsIDAsIDExNzI0LCAwLCAwLCAxMjcxMDQsIDEyNjYxOSwgMCwgMCwgODAyNywgMTA5OTcsIAotICAgIDkxNzEsIDEyNzQxLCAxMTQwMCwgNzEzMDUsIDE5NDc5OSwgMCwgMTI4MjM5LCAwLCAxMjg4ODEsIDExOTYwNCwgMTI3NTIzLCAKLSAgICAxMjAxOTAsIDE5NDc3MywgNjc2MDgsIDEyODIxNCwgNDIzNjgsIDAsIDc3MTUsIDM4ODEsIDQxNDg3LCAxMjExOCwgNDI1MTQsIAotICAgIDY4NjUxLCAwLCA5ODM4ODYsIDMwMDksIDQxNDc2LCA0MTQ4OSwgNjk4MjUsIDMwMDcsIDE0NDgsIDMwMTgsIDE5NDgwOSwgCi0gICAgMzg4OSwgODUyMSwgNTA4MywgNTA4MiwgMTE5ODU5LCAxMjAxODQsIDg1MTksIDk4MzIzNSwgMzAxNCwgNTA4MSwgNjU4NTMsIAotICAgIDEyMDcxNSwgMCwgNjgwMTQsIDY5OTUxLCA1MDc5LCA2NDgwMiwgNDIyMTAsIDQ1OTcsIDY1NTMyLCAxMTgyOCwgMTIwMTg1LCAKLSAgICAxMjM3MSwgMCwgODQwNywgMCwgMTA4MDUsIDg1MTgsIDEwNzc5LCAxMjAxODgsIDcxMzAzLCA5ODM5MjQsIDEyMzY3LCAKLSAgICA0MjE3MCwgMCwgOTI1NTcsIDYyOSwgMTkyNCwgMCwgMTIwMzcsIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgCi0gICAgNjM5MzMsIDY5NzM1LCAxMjA4MTUsIDEyMzY5LCAxMDY0OSwgNjc5ODEsIDUwNzcsIDEyMDE3NCwgMTA4ODAsIDYzOTI3LCAKLSAgICA1MDc1LCA5MTc4ODEsIDAsIDY1MDc1LCAwLCAxMTAwNywgOTgzNjk2LCA2NjY1OSwgOTI2MDcsIDAsIDY2Njg0LCAwLCAKLSAgICAzNDM0LCA0OTU0LCAxOTA0LCAwLCA1MjY2LCAxMjY5ODAsIDUyNzIsIDEwNDk5LCA0NTA3LCA5NTc4LCA2MzkyMywgCi0gICAgMTIwMTc3LCA3OTc5LCAwLCA5ODMxLCAwLCAxOTQ5MjYsIDQ2MSwgOTgwMywgMCwgNDUwNCwgMTUwNSwgMCwgNjMyNSwgCi0gICAgNTI3NiwgNDMwMjEsIDEyMDQ4OCwgMCwgNTUyMzYsIDAsIDY2NDYxLCA1MTc3LCA0MTMyNCwgMTIwNTUsIDg3MjIsIDAsIAotICAgIDQxMzI3LCAwLCA2NjY5NSwgNDExNCwgNDA5LCA0MzgzLCA4OTAwLCA4OTQ4LCA0MTMyNSwgMCwgNzIxLCAxMDE4MiwgOTEwOCwgCi0gICAgNzEzMTEsIDAsIDExOTE4NSwgNDIyMjksIDE5NDkxMiwgMCwgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgCi0gICAgOTQxMDQsIDc4NTcxLCAwLCA3MTMyOCwgMTk0NTYyLCA0MTU3NiwgNDIyMTUsIDc4NTcwLCAxMTkyMDcsIDAsIDg1NzgsIAotICAgIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgNjQ3NjcsIDI2NzAsIDQxNjcsIDE5NDc5NiwgCi0gICAgMTE3MjMsIDAsIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA0MzQxNCwgNzM4NTQsIDExNzM3LCA5NzIxLCAwLCAwLCAwLCAKLSAgICAxMTc0MiwgMjQxOSwgMCwgMTE0OTMsIDEyMzM0LCAxOTQ5MTMsIDQxNTMsIDEyMzAyLCAxMDc5MywgNTI1MCwgMTI0MDcsIAotICAgIDExOTc4LCA0NDA0LCA5MTg5LCAxMjQwMSwgNDIwMDcsIDU3NzUsIDY3NTksIDY1ODA2LCA0Mzk5NywgMCwgNDIwMDIsIAotICAgIDEyNDA0LCA5ODM1NTMsIDAsIDQ5NDAsIDEyNDEwLCA3NjgzLCAxMTY3LCA3MzcyOSwgNDk4MywgMTIwNTA3LCA4NjEsIDAsIAotICAgIDAsIDAsIDAsIDQzNzU3LCA0MzM3MCwgMCwgMCwgMTE5NTYsIDAsIDAsIDAsIDk2MTYsIDY2MzEsIDAsIDEyODE2LCA0Mzc1OSwgCi0gICAgNDIyMTgsIDEyNzEwLCA2ODY3NCwgMTI3MjEsIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCA3NjE2LCAxOTUwNDQsIDAsIDEyNTc3LCAKLSAgICAwLCA5ODM4NzUsIDg1MywgNDI2OTMsIDE5NTAxNCwgMCwgOTgzNjM4LCA1MDE2LCA0MzUzNSwgNjM4OTMsIDQyODM1LCAKLSAgICA5NDkxLCA5MTc5MTMsIDAsIDkxNzkxNCwgMCwgMTI3MTIsIDcxMDUsIDEyNzgwNywgNjUwNjAsIDEyMDc5NywgOTkwMCwgCi0gICAgNzc1MCwgMCwgMTk0OTE5LCAwLCAxMjc4MzAsIDAsIDY0Nzc4LCAxMjU4NSwgMTA1NjUsIDEyODE1MSwgMTIxNzcsIDAsIDAsIAotICAgIDAsIDc3ODI0LCAwLCA0OTAwLCAxMjc4NzQsIDEyODc4LCA5MjYzMCwgODk4NCwgNDExOSwgNzQ3NjgsIDg5NzEsIDc4NTkzLCAKLSAgICA0MzExMywgOTcwMiwgNzg1OTQsIDExMDI1LCA5MjQ1LCAxMzA0OCwgNDkyNywgNDEzOCwgNzQxODUsIDkyNDgxLCA5MjcxMCwgCi0gICAgMTIzOTcsIDc3ODI3LCAwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIDAsIDEzMDUzLCAwLCAzOTQ4LCAxMDc4MSwgMTU0NiwgMCwgCi0gICAgNTAxMCwgMTY4MCwgMTA1MDcsIDc4NTkwLCA3ODU4MywgMCwgMCwgMCwgMTk0OTE1LCA3MjY3LCAwLCA3NDgzMywgMTI4MTgxLCAKLSAgICA1OTkzLCAyODE5LCAwLCAxMjcwNiwgNzc4NDAsIDE4OTMsIDcyNjYsIDYzOTE1LCA3MjY0LCA3MjY1LCAwLCAxMzYzLCAwLCAKLSAgICA2Mzk5NywgNjM5MTAsIDYzOTk2LCAzMDc3LCAwLCAwLCAxNTEyLCA2OTkyOSwgMTI1ODksIDQxNDc5LCAxMjgzMTMsIDAsIAotICAgIDQzMzM5LCAwLCA5ODM2LCAxMjA3MjcsIDAsIDQxNDgxLCA0MzMzNSwgNzgzMiwgNDIzNDMsIDMwOTAsIDQzMzM3LCA4MTcsIAotICAgIDE2NjQsIDE4NTAsIDEyODg0MSwgMzA3OSwgMTEzNDAsIDQyNDA4LCA0MjQ0NywgMTI3MTQwLCAxMjAwMjAsIDQyMzA3LCAKLSAgICAxMjM4NiwgNDIzMDQsIDkxNzU1NSwgMCwgMTIzODksIDAsIDkyMzY2LCA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAKLSAgICAxMTQ3LCA2Mzk5MiwgNDI4ODcsIDE5ODcsIDkyNzE4LCA1NDgwLCA3ODU4LCAxMTY1MywgNDExNiwgMTIzOTEsIDY2MTkzLCAKLSAgICAwLCA0OTM5LCAxMjM4NCwgMCwgMCwgNDE2ODYsIDYzOTA1LCAxMTk2MDEsIDE5NDY4OCwgOTgzMTkwLCAwLCAxMjY0OSwgMCwgCi0gICAgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCA0MzY0MywgMTk0Njg5LCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAKLSAgICAxMTk4MTMsIDc3NCwgMTE5ODI5LCAwLCAxMTk4MTUsIDU5OTQsIDEyNTM5LCAwLCA3ODM3NSwgMTIwNTk3LCAxMTk4MzMsIAotICAgIDk4MzEwNSwgMTE5NjAwLCAwLCAwLCA3NzE5LCA2MDI2LCAyNDg2LCAxMjgzMTIsIDExOTgwOCwgMTYyLCAwLCA2NTIxOSwgCi0gICAgNDEwNzMsIDk2ODcsIDQxNjgxLCA2MzA0LCAxMTk4MTIsIDY2MTk2LCAxOTQ4ODEsIDUyNjIsIDAsIDU1MjMzLCAxMjY4MSwgCi0gICAgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAxMjc1MjgsIDQyODEwLCAxMDQ5MiwgMCwgOTgzNjUyLCAwLCA0MzExOSwgMCwgCi0gICAgMTIwNzUzLCAxMjQwMywgMjUwMCwgMTk1MDEzLCAwLCA0ODk5LCAxMjcyOSwgMCwgMCwgNzQxMTMsIDIzNDMsIDQxMDMsIAotICAgIDE5OTQ2LCA3NDExMiwgNzc4NTEsIDEzMTEyLCAwLCAxOTUwMTIsIDEyODU5LCA3MDA4NywgMTIwMTQ4LCA2NjM2OSwgNTg2MSwgCi0gICAgMTI3NzU4LCAxMTk5OSwgMTI0MDAsIDAsIDk4MzgzMCwgMTI2NDUsIDUxNDYsIDExMzIwLCA2ODQxMCwgNjc0OCwgNjUwNDAsIAotICAgIDAsIDY0MTg0LCAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIDUxNDcsIDAsIDAsIDc0NTI0LCAwLCAxOTI4LCAwLCAKLSAgICA2NzY0OSwgNTk5MSwgMzQ0NSwgNjc2MDksIDQ5NzYsIDY0MTc2LCAwLCA2NzYxMCwgODI0MSwgMCwgNzc4NjgsIDQyMDYsIDAsIAotICAgIDAsIDAsIDEyODI5OCwgMCwgMTAxMzgsIDAsIDAsIDg4OTcsIDEyMDIzNCwgMCwgODM1NywgNDEyNCwgNzc4NjIsIDY1ODM2LCAKLSAgICAxMjA2NDEsIDEyNzkyNiwgNzc4NTksIDAsIDAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAxMjQwNSwgMTIwMTUwLCAKLSAgICA5MjY2NCwgMzk4LCAxMzI3OCwgOTcyMywgNjM2NiwgMTIwMzExLCA3OTQ1LCAwLCA0NDAyLCA5OTcwLCAxMjQwMiwgCi0gICAgOTgzMTM2LCA0MjM5MiwgMTMwNSwgMTI0MDgsIDAsIDQ0MDA3LCAwLCAwLCA0MTQ2NCwgMTI0MTEsIDEyOTY5LCAxMjA4MjQsIAotICAgIDQxNDY1LCA5ODM1NjUsIDg1MjgsIDE1NzUsIDAsIDYzOTU1LCAxNjUsIDMwMjQsIDQxNDY3LCAxMTkxNjMsIDAsIDkwOTMsIAotICAgIDAsIDkxNDcsIDEyODc4NywgNjM5NTgsIDAsIDkxNDgsIDk2OTIsIDQwOTYsIDUzLCA3Mzc3NiwgNjc1MCwgMTk1MDE4LCAwLCAKLSAgICA5NTk0LCAwLCAwLCA0MzUyNywgMCwgNzI3LCAxOTQ3MDMsIDE5NTAyMywgNTgwNSwgMCwgNjcyNiwgMCwgNDIxNzYsIAotICAgIDEyMzcwLCAxMTY1NSwgMTE5MDk1LCAxMDU5MSwgMjI4MCwgMCwgMTIzNzIsIDEyMDY0MiwgMTIwMzA3LCAwLCA5MjM0MywgMCwgCi0gICAgMTIzNjYsIDEwOTYzLCA2MDY2LCAxMzI5LCAwLCAzMDUyLCA5MjIwLCAwLCA2NDQ3OCwgMTk0NzAxLCAxMDgwMywgNDEzMiwgCi0gICAgMTIwMzA2LCA2ODQ3NCwgOTI0NzMsIDAsIDk4MzMwNSwgNzQ4MzcsIDEyMDE1NSwgMTQ5OSwgMCwgODA1NSwgNDI3NDAsIAotICAgIDYzOTY1LCAwLCA2Mzk2MiwgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCA2Mzk2OSwgMTE3ODEsIDQyNzE4LCAKLSAgICA4Nzg4LCAxMzU3LCA2NDg1MSwgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgOTk0MSwgMTIwMTcyLCAwLCAxOTMzLCAKLSAgICA2OTY1NSwgOTU2NCwgMCwgOTI0MzUsIDczODY2LCAwLCAwLCAyNDg3LCA2NzYxNCwgMzEyMSwgMTgwNCwgMzMxMSwgNjc2MTUsIAotICAgIDcwMDgxLCA3ODMwMiwgMTIyMjAsIDY3NjE2LCAxMjA1OTgsIDEyNzQ3NSwgMCwgNjgyMDAsIDY2NzUsIDEyODE0NCwgMCwgCi0gICAgNjc1OTIsIDEyMDY4NSwgMCwgNjQ3NzEsIDExOTgsIDkxMzIsIDAsIDY0NjE5LCA1MTAsIDY0NjYzLCAwLCAwLCA0NTYxLCAKLSAgICAyMTAxLCAxMzk4LCAwLCA5MjU1NCwgNzQwMzQsIDQxNTY5LCA5MjY4NCwgMTE0MDYsIDgxNjcsIDEyMTI3LCAwLCA4NDAsIDAsIAotICAgIDEyNjUxOCwgNzEwMSwgNjk2NywgMCwgMTk0ODk4LCA5Nzk2LCAwLCAzMzMsIDY5ODkxLCAwLCA4MTQ0LCAyMTE3LCAwLCAKLSAgICA5ODM1OTUsIDEyNDA2LCAwLCAxOTkzMSwgMTE5MDg5LCA2Njc4LCA3NzY5LCAwLCAxMjYyMSwgMCwgMTI3MzY2LCAxMDIyNywgCi0gICAgNDc2NCwgNDMxMDEsIDk5ODEsIDAsIDQwOTg2LCA0MTI3LCA2NjQ4NywgMCwgNDIyMDIsIDEyNzU0LCAxOTUwMjIsIDAsIDAsIAotICAgIDk0MDk3LCA2NzU5NCwgMjA0OCwgMTI5NDQsIDQwNTAsIDY3NTk1LCA5MTc5NjcsIDQzMTAyLCAxMDU4MSwgMTI5ODUsIAotICAgIDQ1MzMsIDE5NTAyMSwgNzQwMDMsIDY0OTAsIDAsIDEyMDM4LCAwLCAwLCAxMjA3MDQsIDY1NDYxLCA5Nzk4LCA2OTcwNCwgMCwgCi0gICAgMTk0OCwgNjk4NDEsIDAsIDk1MiwgMTI4MjM1LCAwLCAwLCAxMjA4MDIsIDY0NDksIDk0OTQsIDEyMDMxMywgMCwgNDMwOTgsIAotICAgIDQ4NDMsIDgxNDIsIDY0MTYwLCA0MDk4LCA2NDE3MCwgMCwgMCwgMzQzNiwgMTE5OTczLCAwLCAxMjgxNywgNjc1OTcsIAotICAgIDY2NzYsIDM5MzAsIDQyNjE1LCAwLCAwLCA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgCi0gICAgMCwgODUwMCwgNDIyMjIsIDEyMDE0MiwgNzM3NDMsIDEyMDQwMCwgNDMxNywgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMCwgCi0gICAgNjc2MDYsIDExOTA4MywgMCwgNDIyMTcsIDEzMTAyLCAwLCA2NjAwMywgNjY3MiwgMCwgMCwgMCwgOTgzNzM4LCA2Mzg0MSwgCi0gICAgOTYxMywgOTAwMSwgNDUyNiwgMTEyNzQsIDY3NjAxLCA2NDUyMCwgNjQyMTAsIDY2NjQsIDc4NzA0LCA0MjA1NiwgMTAyMjgsIAotICAgIDY0OTU3LCAxMTI4MSwgMCwgMzgwNywgMTQ2OSwgNjY2NDAsIDY1MzgxLCA0MjE5NywgNDk4OCwgNDIzNzIsIDAsIDk1OTgsIAotICAgIDkwNCwgMzUyLCA0MjIyNSwgMTQ1MSwgODA2MSwgODQ1MywgNDEzNCwgMCwgNzQ4NDcsIDY2NTc2LCAxMjc5MTYsIDAsIAotICAgIDEwNTIwLCA4NTc1LCA5OTYwLCAxMjAxLCAxMjcyODksIDEyODQ2LCAxMjcyOTEsIDEyNzI5MiwgMTE5MTksIDY0OTYyLCAKLSAgICAxMjcyODcsIDQzNzM5LCAxMjcyODEsIDg1MTEsIDk0NjAsIDgyMywgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgMTI3MzA1LCAKLSAgICAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgNjU3NjEsIAotICAgIDExOTU4NSwgMTE2MDYsIDY0Nzg0LCAxMTcwMiwgNjY0OTgsIDk4MjEsIDY0MzA0LCAwLCA1MTUyLCAxMTA0OCwgNzUzMywgCi0gICAgNjgzNjYsIDY0NDEwLCA5MjMwNSwgMCwgNDMyMywgMTIwMDYyLCA5MjY2OSwgNzEzMzIsIDEyNzA1MiwgNDI1ODcsIDQyMjE0LCAKLSAgICA0MTM5NCwgMCwgNDc2MywgNDExMiwgMTE4OTM1LCAwLCA1MjYwLCA0MzE0MywgOTQwMzgsIDMyNiwgMTIwMTMxLCA2ODQyMywgCi0gICAgMCwgMTA3NzEsIDI4NzYsIDc0MDc0LCA5MjUzMCwgMTk0OTI0LCA0MTM5OCwgNzM4MiwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIAotICAgIDQ1MywgNDEzOTYsIDEyMDUyNCwgNDI3MjAsIDEyMTQwLCA5NTcyLCAwLCA3MDAzLCAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAKLSAgICAxMjY0OTAsIDE5NDg4NSwgNDMxNDQsIDQxMjMsIDg0OTQsIDQzMTQ2LCA5OTc3LCAwLCAwLCA2NTc1OSwgMTA3NjUsIAotICAgIDY0MDYxLCA0NDY1LCA5ODA4LCA2NDA1NiwgNjU1ODIsIDQxMjYsIDAsIDk1MjEsIDk1ODksIDY0NzU1LCAwLCA2NDAyMCwgCi0gICAgMTI2NjA0LCAxMDQ2NCwgMCwgMCwgMTk0ODY5LCA2NDUxNCwgMTE1MjgsIDY0MDI0LCAxMjgwNzIsIDY3OSwgNjQwMTMsIDAsIAotICAgIDU4NTAsIDc1OCwgNzUzNiwgMCwgOTIyMzQsIDQxNDQxLCAxMDY5MywgNjQwMDYsIDk4MzU2NywgNjQwMDUsIDQwNTgsIAotICAgIDExOTAxOSwgMTI2NDg3LCA2NDY2MCwgMCwgMTE5MDUwLCAwLCA5ODMwNjksIDExMzksIDQzMjk4LCA2NDAyNywgNjQwMjksIAotICAgIDg5NzAsIDAsIDk5MzQsIDk4MzA5NCwgMTA3NzQsIDEyODAyMCwgNDIyMDEsIDEyNDIxLCAxMjgyMTYsIDAsIDE4NTIsIAotICAgIDMwNTcsIDY0MDQ2LCA3Mzc0NCwgNjQwMzQsIDY0MDM5LCAwLCAwLCAwLCAxOTQ4OTksIDkyMzIyLCA3NjQ1LCAxMjg1NCwgCi0gICAgNzQzMzgsIDM0OTYsIDAsIDAsIDAsIDkxMDIsIDYyNywgMTI3Nzk1LCA2MTU4LCA4MzI3LCA3NDU1MywgNjY2MzIsIDEyNDE5LCAKLSAgICAxMzMwOSwgMTE1NzAsIDEyNzgxMSwgMTk5NjAsIDExNjk2LCAwLCAxMDE4LCAxMTg5NzAsIDE5NDkwOSwgMTk0ODk3LCAKLSAgICAxNjgyLCAxOTQ4OTYsIDE5NDkxMSwgNDI3NTYsIDY3NjUsIDE5NDkwNiwgMCwgMCwgNzM4MTQsIDExNDEyLCA2NzY4LCAKLSAgICAxMDcyOCwgMTk0ODMwLCA3MTMxNiwgMTE4ODYzLCA0MzMxMSwgNjQ5NjYsIDExNTc3LCAwLCA0MzA0MCwgMTgzMywgMTE1NzYsIAotICAgIDAsIDc0Nzc5LCAwLCAxODUsIDY1MDg1LCA3NDUzMywgNjQ3NTQsIDE5NDg0OCwgNzUzNSwgODA4NSwgNDI1MjUsIDEyMDM4NywgCi0gICAgOTc0OSwgNDE3MDEsIDYxMzEsIDE5NDksIDQxMTcsIDc4NDcsIDEyMDQ4OSwgMTk0NzExLCA2NDQ4MywgNjU2OTMsIDAsIDAsIAotICAgIDAsIDY5Njk1LCA0MjI0MCwgMCwgMTI2NjUxLCA0Mjg2NCwgMTI2NDk4LCA2NDY2NywgNDE4NjgsIDExODQsIDAsIDgxNSwgCi0gICAgMTE0ODQsIDEyNzUzNSwgNjc4NDAsIDk4MzY0MiwgMCwgNjYxOTcsIDAsIDEwOTg2LCA2NDY4MywgOTgzNzc2LCAwLCAzNDU1LCAKLSAgICAwLCAwLCA5ODc5LCAwLCAwLCA0MTU4LCAxMjgwNTAsIDY4MTY2LCAwLCAwLCAwLCAwLCA2OTY0NSwgMzMyLCAxMTg4MDgsIDAsIAotICAgIDUxNDIsIDI0MDcsIDY5NjQzLCA0MjE5OSwgMCwgOTI0MDQsIDc0MzczLCAwLCA1NTIxNywgMCwgNjM4NzAsIDQzMTYzLCAwLCAKLSAgICAwLCA5MjM5MCwgNDI4NjcsIDE4MzQsIDAsIDkyNDYxLCA2OTgxNywgMTA5NDAsIDY1MjQ5LCAxMTkwNDAsIDg2NjIsIDAsIDAsIAotICAgIDI2NTIsIDEyMDUyNywgNzE2NCwgMTA3ODQsIDE5NTA5MywgNjc2NzQsIDAsIDkyMjMzLCA5MjQ4MiwgMTk0NzQ5LCA3NDU2MiwgCi0gICAgOTE3NTA1LCAxODI4LCA3NDQ3NCwgMTIwMzI3LCA3ODYyMCwgODUzMSwgMTI0OTksIDYyODAsIDEyMzI0LCAxMTg4NTQsIAotICAgIDY1MjM4LCA2ODM3NCwgNDgzMiwgNjU1NzMsIDAsIDYyNzksIDEyNTA4LCAxMjkwNCwgMTI1MDIsIDkxNjEsIDAsIDE2MjAsIAotICAgIDY0NDM2LCAzNjAxLCAxOTUwOTQsIDEyODA3MywgOTgzNTYyLCA2MDksIDExNTU1LCA5ODMwOTksIDEyNDk2LCAxMjc4MzksIAotICAgIDc0MTgxLCA0MzQzLCAxMjUwNSwgMCwgMTI3ODYzLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQyNjcxLCAwLCAwLCAKLSAgICAwLCA0MzU2NSwgNzEzMDYsIDEyNjQ5MywgMTI2OTYsIDEyODI1NiwgMCwgOTQwNjIsIDEyOTI5LCAwLCA3MTIsIDAsIDQxOTcsIAotICAgIDk4MzIwNCwgNDI4MTgsIDEyNjYzMiwgMCwgMTIwNDkwLCAwLCAxMTkxMzcsIDE1MDYsIDQzNTYyLCAwLCA5MjQ5MSwgMCwgCi0gICAgMTI2NTEsIDAsIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIDQ5MjQsIDY1NTkyLCAKLSAgICAxMTg4NDQsIDAsIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgMTIwMzMsIDQyMTc4LCAKLSAgICAwLCA2OTc2MCwgNDI1NzEsIDkyNjM1LCAwLCAwLCAwLCAwLCAwLCAxMjcxNzYsIDMxNzgsIDAsIDAsIDkyNzA0LCAwLCAKLSAgICA5MDgwLCAxMjcwMDAsIDEyMDM1MiwgMCwgNjgyMDksIDAsIDExMDgyLCAwLCA1Njk5LCAxOTUxMDAsIDY2MDAwLCA5NDg4LCAKLSAgICA2NTE2NiwgMTE5MTEyLCAwLCAwLCAwLCAwLCA3MTMxMywgMCwgNTI2NSwgNjkyMzUsIDAsIDExNDg3LCA2Nzg1OCwgMTI0NjQsIAotICAgIDAsIDQzMDQ1LCAwLCAwLCA0MzM0NSwgMCwgMTA3NzAsIDExODk5NCwgNjgwNywgNDY1LCA5ODI5LCAwLCA3NDM0OCwgMCwgCi0gICAgNDMzNDYsIDgxMTYsIDc5NSwgMCwgMCwgMTI0NjIsIDEwOTMwLCAxMDgzMSwgMCwgMTE4OTUyLCA2NDM2MiwgNzQzMzQsIAotICAgIDk4MzYwMiwgMTIwODExLCAwLCAxMjQ2OCwgODYwNywgMTAwOCwgMCwgMTAwOTIsIDE5NTA3OCwgOTE3ODQyLCA2Nzg1NSwgCi0gICAgNTUyNTcsIDczNzcxLCAxNzY2LCAxMTI4MiwgMTE5OTYsIDE4MjAsIDQ1NDcsIDAsIDAsIDAsIDAsIDEzMjIzLCAxMjg2NjUsIAotICAgIDY0NTk1LCAxMjcyOTQsIDAsIDkyMzExLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIDAsIDAsIDAsIDUzODIsIDAsIAotICAgIDAsIDAsIDExOTA2MCwgNjQ5NTMsIDU0MDYsIDE5OTIwLCA2OTg5NywgNjY1MTAsIDM1OTAsIDE5NDg2NCwgMTEzMCwgMCwgMCwgCi0gICAgNDIwMTYsIDExODIzLCA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgNzEzMjMsIDkzMjYsIDczODI2LCA1MzEwLCAKLSAgICA3NDgxMiwgNzg1ODQsIDkyMjI5LCA4OTU5LCA0MzU4OSwgNjc0NywgNjY3MjMsIDAsIDg1NjgsIDAsIDEyMDQ5NiwgNzM4MTYsIAotICAgIDEyMDgwMywgOTgzODM5LCA0MjY3MCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAxMjA2MzEsIDAsIDQzMDYzLCA3NDUxOSwgCi0gICAgMTI3MTgyLCAwLCA3MzkxNywgNzg0MywgNjk3ODMsIDExNjg5LCA1NDEwLCA1NzgzLCAxMDQ2OCwgODQwMywgNTQwMCwgCi0gICAgMTE1OTQsIDEyODI0NywgMCwgMTE4OTkwLCAxMDQ5MSwgNjk4NDIsIDY0NDEyLCAwLCAwLCA1NTg3LCA0Mjg2NSwgNjQ0MDQsIAotICAgIDgyNjgsIDQ5MjMsIDY1MDg2LCA4OTgxLCAxMjM4MiwgNDIxMzMsIDEyMDc1NSwgOTcwNiwgNjk3MzgsIDAsIDY2NjEwLCAKLSAgICAxMDQ2MSwgMTIxMDMsIDAsIDg2NDIsIDAsIDQyNzY2LCA5ODM4NTcsIDIyMTAsIDk5ODMsIDAsIDk0MDA5LCAwLCAwLCAwLCAKLSAgICA3Mzk4LCA0MTUxNSwgMCwgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAwLCA2NzQ5LCAzNjU4LCA5Mzk2NCwgCi0gICAgMTIwNTI1LCAwLCA3NjE3LCAxOTQ4NDEsIDEyODg4LCAxMjc5ODMsIDY3NjY4LCAxMzE0MywgMCwgOTE5MywgMTEwOTcsIAotICAgIDU3MDMsIDAsIDQxNTE3LCA0MTUwNCwgNDE1MTksIDEwMDE2LCA2NDMwNSwgMCwgNjU4NjQsIDYyMywgNzgxLCA2NzAsIAotICAgIDEwNjYwLCA1NzY5LCA2MTMsIDc1NDMsIDEyMDI3OSwgNDc3LCA0MTA4MywgOTI1MjEsIDAsIDU5MiwgMTU3OCwgMTI0NTksIAotICAgIDQzNDQ5LCAwLCAwLCA4MjI1LCAwLCA2NTQsIDExMzQ1LCA2NTMsIDY1MiwgMCwgNjQ3LCAwLCA2MzMsIDEyMDc0NCwgMCwgCi0gICAgMTI2NDcyLCAxMjQ4MCwgNDMyNDMsIDAsIDM5LCAxMjQ4NywgMCwgMTIwNTI5LCA3NDE5OSwgMTI0ODIsIDAsIDEyNDg5LCAwLCAKLSAgICAzMTk1LCA1NTUwLCA5ODM1NTQsIDc4OTcsIDAsIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAKLSAgICAyODc3LCAwLCAwLCAxNjc1LCA2OTg0MCwgMCwgMCwgMCwgMTAwNzAsIDEwNTk1LCAwLCAxMTkwNzcsIDE5NDc3NywgCi0gICAgOTgzNjExLCAwLCAwLCAwLCA0MzI0NCwgMCwgMCwgOTgzOTA3LCAxMTk1NjEsIDk4MzA3OCwgMCwgMTk0OTIxLCAxMjgxNjAsIAotICAgIDk5MzksIDAsIDk4MzE1MSwgNzc4NjAsIDAsIDAsIDI3MCwgMCwgMTA3MTQsIDAsIDAsIDAsIDAsIDAsIDY1MzcyLCAwLCAKLSAgICA3NDAzOCwgMTE5NTU4LCA2MjczLCA2NjY3OSwgMzY0LCA5NTk1LCAxOTQ5MDgsIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgCi0gICAgNjY0ODksIDIyNCwgMCwgNjg2NzAsIDkzMzIsIDQ5NjYsIDY4Njc3LCAwLCA2ODY0NCwgMCwgMzg0MSwgNjg2MzQsIDAsIAotICAgIDEwNzMyLCA2ODY0MCwgODUwLCA0OTcyLCAwLCAxMjg5MCwgMjkwOSwgNjg2MTksIDQ0MDA4LCA2ODYyNywgOTgzNzA5LCAKLSAgICAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIDExOTYyLCAxOTQ2OTQsIDEyNTA3LCAxMTk2LCAxMjg2ODcsIDEyODMxMSwgCi0gICAgNzc3LCAxMjAxODcsIDQzNzUsIDY1MjcxLCA2NzY3OCwgMCwgMTIxOTgsIDAsIDY0ODI0LCAxMTkzNDMsIDk4MzIzMCwgCi0gICAgOTQ1NCwgNjM3NzgsIDg2NTgsIDQyNTI4LCA3ODAwMCwgMjcwNSwgOTE3OTc1LCA0MTUyMCwgMCwgMCwgMTE5ODYsIDc3NjUsIAotICAgIDQyNTAyLCA4MjgwLCA3NDUyMCwgMjcwMSwgMCwgMTI3MDAyLCA1NzY3LCAwLCAwLCA5ODA5LCA4MzUzLCA2Mzc0NywgCi0gICAgNjY3MDEsIDYzNzcyLCA5ODM4MDUsIDYzNzQ1LCAxNzQ4LCA2Mzc3MCwgMCwgMCwgMCwgNjU1NDIsIDYzNzY2LCA1NTI0NCwgCi0gICAgMzA2MSwgMCwgNjM3NjQsIDYzNzg3LCA5MDY3LCA2MDk2LCAwLCA3Njk0LCAwLCA3MjU3LCA2Mzc2OCwgMzQ4NSwgMTI5ODcsIAotICAgIDAsIDEyNzUyMiwgMTIwNjI4LCA2MzgwNywgMTU5MSwgMCwgNjM4NiwgNjM3ODMsIDAsIDAsIDkyNTM1LCAwLCAwLCAwLCAKLSAgICA3NDU3NSwgMCwgNjU3MTksIDEzMDgzLCA2NDU3NCwgNjUwMTIsIDAsIDE2NDAsIDEyNDk1LCA2NjY5MSwgNzYyNCwgMzEzOCwgCi0gICAgMTA5OTYsIDkyMjQ3LCAxOTIyLCAwLCAxMjQ5OCwgMTA5ODcsIDY5OTM2LCA2OTkzOSwgMzg5NCwgNjU1NDMsIDAsIAotICAgIDE5NDg0MiwgOTgzNTg4LCA0OTMsIDAsIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA3NDAyMCwgMCwgOTE3OTM1LCAKLSAgICAxMDMzNSwgMzUyMCwgOTE3OTMyLCAxMjQ5MCwgNjQzMTUsIDAsIDEyNzAzOSwgMTI0OTMsIDYyMzMsIDQyNjgxLCAxMDAyLCAKLSAgICAxMjQ5MSwgMCwgNjQ5MTEsIDkyNjE1LCAyMDk2LCA2NTEyMCwgMCwgNzgyMTksIDk4MzA4MSwgMTE2MTEsIDExNjMyLCAKLSAgICAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgCi0gICAgNjYyMzYsIDY2MjExLCA2NjIxOCwgOTI2NzIsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDk4MzU1MiwgNzkwOSwgCi0gICAgNjYyMzQsIDExNjA1LCA2Mzc1OSwgOTgzNjQ1LCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgCi0gICAgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIAotICAgIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIAotICAgIDYzNzk3LCA5MjM5NCwgNDIzNTgsIDAsIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCAKLSAgICA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIDcwMDI4LCA3ODAzNCwgNDU3OSwgMTI4MDkwLCAwLCAxMjUxMSwgNzQ0NTMsIAotICAgIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgODYyMywgOTQwMTEsIDEyODA1MiwgMTI4MDQ4LCA3Mzc4LCAxMjUxMiwgCi0gICAgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCA4MzExLCAxMjUxMCwgCi0gICAgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDk4MzkxMSwgMCwgMCwgMjMyMywgCi0gICAgMCwgMjMxOSwgNzc5MTcsIDEyNDc3LCA3NzkxNiwgMjMxMSwgMCwgNDQxNSwgMjM3LCA2MjgxLCAxMjcyODAsIDAsIDAsIAotICAgIDIzMDksIDEzMTIsIDgxNzMsIDEyODg3MSwgMTI0NjksIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDEyODExMSwgOTM5NywgCi0gICAgMTE1MjQsIDkzOTUsIDkzOTYsIDkzOTMsIDkzOTQsIDkzOTEsIDkzOTIsIDkzODksIDYyMDksIDkzODcsIDkzODgsIDQ5MzIsIAotICAgIDkzODYsIDkzODMsIDkzODQsIDY3NDAsIDAsIDY1NDUxLCA4MTg1LCAwLCA5MTc4MzIsIDQzMDI0LCA0MzMzNiwgNjc2NTksIAotICAgIDIzMTMsIDEyODE2NywgNzk0OCwgOTIzNiwgOTI1NzEsIDAsIDAsIDEwNTcwLCA0MzQ3MywgNjI4OSwgMTA0ODQsIDAsIDAsIAotICAgIDExOTk4LCAxMjA4MiwgMTA5MjQsIDMxNDcsIDAsIDEyMDY4NCwgMTI1MjQsIDExOTA4MSwgMjMxMCwgMTE4MTgsIDkzODEsIAotICAgIDkzODIsIDkzNzksIDkzODAsIDkzNzcsIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDk4Mzc2OSwgOTM3MiwgCi0gICAgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCA5ODM5NDksIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgCi0gICAgODc0NCwgNzI2LCAwLCA5ODM4MjgsIDQxNTUsIDAsIDAsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIAotICAgIDEyNzgwNSwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgOTgzODMyLCAxMjUyNSwgOTgzNDYzLCAxMjAxNiwgNjU3NzAsIAotICAgIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgMCwgMTEwMzAsIDAsIDkyNTY3LCA2NTY5MSwgNjM5OTgsIAotICAgIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgCi0gICAgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCA2NjA4LCA0MTA0NywgMTIwMzIxLCA3ODM5NSwgCi0gICAgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIDEyMDMyMCwgMTEwNywgMCwgOTA3NiwgODg2MiwgCi0gICAgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAxMzIyMiwgNzQxNjUsIDc0NzgyLCAxMjY1MTQsIAotICAgIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIDk4MzkzOCwgNDk4LCA2NDQ3MSwgMTIwMzI0LCAKLSAgICAxMjg1NjcsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAxMjUyOCwgODAzMSwgMjQxNCwgMCwgNjk3MTksIDMyMzEsIDAsIDY0MjIsIAotICAgIDY2NTEyLCA2OTY1MywgMTI1MzAsIDI1MzcsIDc4NDA1LCA0MTQyOSwgMTI2NTgsIDEzMDM2LCA2NTc3MiwgMCwgNzg3MzgsIAotICAgIDQxNDMzLCA0NzE5LCA0NjksIDAsIDQzNjMsIDMzMTMsIDQxNDI4LCA3ODQwNywgMjAyMywgMTc3MiwgNzgyMjQsIDc4MjI1LCAKLSAgICA2NTcwNiwgMTAwNTEsIDY0ODEyLCA3ODIyMCwgMCwgOTkyMCwgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIAotICAgIDk2MDcsIDAsIDk2NjMsIDAsIDExOTYzNCwgNjUwMywgNDExMTAsIDAsIDE0OTEsIDAsIDAsIDEyNzMwNCwgNDEwNjEsIDAsIAotICAgIDE5NDgzOCwgMTI3MTg3LCA2NTAyNiwgNDE5OTMsIDQxNTA5LCAxMTA0NSwgNjUwMjgsIDc4NjAyLCA2NjQ3NiwgNDExMDgsIAotICAgIDk3MzgsIDQxOTk1LCAxMDc1LCAxOTU4LCAxMjUzNSwgNDE5OTIsIDQxNTA2LCAwLCA0MTY4NywgMCwgMTIwNzE3LCAKLSAgICAxMjc3NzYsIDk5NDAsIDEyNzI5OSwgNzY5MiwgOTgzODI0LCA4MDA4LCA0MTEzMSwgMzMwLCA4NTY2LCA2NTA4MywgNDExMzMsIAotICAgIDk4MTYsIDEyNjUxNywgMTI1MzIsIDc4NTUwLCA3ODU0NiwgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgMTI3Mjk4LCA2NDEzOSwgCi0gICAgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgMCwgNjQxMzYsIDEyNTM2LCAKLSAgICAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDk4MzEwMywgMTMwMzAsIDY3MDIsIDQ1MjcsIDAsIDEyNTM4LCAxMjg4MTAsIAotICAgIDk4MzYzNiwgNjU1OTksIDY1NzE3LCA5OTY2LCAwLCA0OTQ4LCAxMjQ4NCwgNDAzMiwgMTI4MTQ5LCAxMjYyMywgMCwgNjIwNywgCi0gICAgMCwgNjExNywgNjU5MzAsIDg0MTIsIDAsIDc0MzgsIDEyOTYsIDIzMjUsIDQxNTExLCAxMjY2MjUsIDEwMTQ5LCA3NDExOCwgCi0gICAgMCwgMTI3Mjg2LCAxMjQ4MSwgMCwgMTI0ODgsIDY2NzEzLCAwLCA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgNDI2MTksIAotICAgIDczNzY2LCAwLCA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCA2NTAzMiwgNDE1MTMsIDk4MzE2NiwgMTE5MjcsIDY2NTg0LCAKLSAgICA3ODU1OSwgNzg1NjAsIDc4NTU3LCA3ODU1OCwgMCwgNzg1NTYsIDg0OCwgOTg2OCwgMCwgNjQyNCwgNzg1NjgsIDExOTMzOCwgCi0gICAgNjk5MjIsIDc0MDMxLCA3ODU2MywgNzg1NjQsIDIzNTIsIDc4NTcyLCA4OTMsIDY0NTc2LCAxMTI4OSwgMTQwNywgNjc5NzMsIAotICAgIDAsIDEzMDI2LCA2NzYyLCA3ODU3OSwgNzg1ODAsIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgCi0gICAgMTM0MywgOTgzODE0LCAwLCA5MzI1LCA2ODE4LCA2MjgzLCAxMTczOCwgMCwgOTgzOTI1LCAwLCAxMTc0MSwgMCwgMCwgCi0gICAgOTIxNiwgODI2MywgMTEyNzksIDE5NDc1MiwgOTgzODE2LCAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAKLSAgICAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCA5OTU2LCAwLCAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIAotICAgIDEzMDIwLCAxMDAyNCwgMTk0NzY0LCA3NDU4MywgNzQzNDAsIDY5NjgxLCAwLCA0MzAwMSwgODAyOSwgMCwgMCwgOTgzNzcxLCAKLSAgICAzMzM1LCAwLCAwLCA5Nzc2LCAxMjA1MjYsIDE5NDc0OCwgNTIxNSwgNDI2NDQsIDMzMzMsIDE2MzIsIDE5NDc1MSwgNjQ4NDksIAotICAgIDMzNDIsIDc4NTgyLCA1MzYzLCAxMjk1NywgNzg1ODEsIDQxNTYsIDAsIDAsIDY0MjEsIDc4NTkxLCAxNjExLCA3ODU4OSwgCi0gICAgMTMwMTgsIDc0MjU3LCA3ODU4OCwgNzQ1NDIsIDMzMzcsIDQ1MzcsIDY3ODk1LCAxMTczNiwgMCwgNjg2MDgsIDY0ODIsIAotICAgIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDc4NTk1LCAyMTA4LCAyMzkyLCAKLSAgICAxMzA0NywgMCwgMCwgNjgxOSwgMTMwNDksIDY0OTksIDkyMjQzLCAxMjQyNCwgNjg2MTQsIDczOTQ0LCAxMzA1MCwgOTkyNCwgCi0gICAgMTk0NzQ1LCA2NTA3LCAxMjc5MTksIDk0MDczLCAxMjgwNjksIDMyNzcsIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIAotICAgIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgNjQ2MjYsIDY2MDM0LCA3NzUxLCAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgCi0gICAgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAxMjQyMCwgNDAyNCwgMTk0NzMwLCA0MTA1NCwgMTA3OCwgOTc1NywgNjk3MzYsIAotICAgIDQxMDU3LCAwLCAwLCAwLCAwLCA5ODM3ODIsIDkyMjEwLCA5MjQxMSwgMCwgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIDExOTExLCAKLSAgICAwLCAxMTg4NDIsIDIzNDYsIDEzMjcwLCA4OTU4LCAwLCA5NjQ2LCAzNzczLCA0MzE4MywgNjQwMSwgNTgzMSwgMCwgMCwgCi0gICAgMTMwNDMsIDgwNTYsIDkyNDk0LCA2NTY4MSwgMjA4LCAxMjczODIsIDQxNTE0LCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgCi0gICAgOTIyMjcsIDc4MjUsIDU2NjEsIDAsIDEyMDYzMCwgMzYwMywgNDExMDksIDIzOTgsIDM1NDgsIDEyNjU5NiwgMCwgMTE5OTMzLCAKLSAgICAwLCAzMTE1LCA5OTE4LCAwLCAxMTMyMSwgNDI5MTIsIDAsIDAsIDE5NDcyNiwgNDg3NiwgNjU4MDQsIDAsIDAsIDQzNDY4LCAKLSAgICA5ODMyNjYsIDQxNTU4LCA0MTQ3MSwgNzM5NTAsIDgxNTgsIDk5NDQsIDQxNDcyLCAxMjAyOTgsIDEzMDUxLCA3ODY4OSwgCi0gICAgMzE0MywgMTk0Njc0LCA2NzAxLCA0MTU1OSwgMTg5NiwgNjYyNTYsIDEzMDUyLCAxOTQ2ODAsIDU2NjUsIDAsIDExOTA3MSwgCi0gICAgNzAyNSwgNjM5NzQsIDAsIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCA1NjYyLCA0MjM4MiwgCi0gICAgMTk0Njg2LCA3MzkyNCwgMTEyMSwgNzgzMTksIDYzOTU5LCAwLCA5OTQyLCAxMzIzMSwgMCwgNjQ3NTIsIDQ3MzIsIAotICAgIDE5NDY2NiwgMTE1OTYsIDExOTkzMSwgNjUxODcsIDE2MjYsIDYzOTgzLCAxMDExMCwgNjQ3NzIsIDQyMDI0LCA2NDIwLCAKLSAgICA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIDQ5MTAsIDE5NDcyOCwgNjkyMzEsIDY0NzUzLCA2Mjc1LCA5Mzk1NywgMTE4ODMwLCAKLSAgICA2Mzk3OCwgMTEwNDQsIDMyMjksIDY0MjMsIDQyNzc0LCAwLCAwLCAwLCAxMjgyMywgMjMzMSwgOTE3ODEwLCA3MDg1LCAKLSAgICA2MTM3LCAwLCA3NTI0LCAwLCA5MTc4MDksIDgzNDYsIDAsIDgzMzgsIDEyODMxNSwgNjUwNDMsIDAsIDgyMiwgMTI3OTg0LCAKLSAgICA5OTAzLCA2NDcyMSwgNDI3MjIsIDY5ODc3LCAxOTQ2NTksIDc4NjU1LCA3ODY2MSwgMTk0NjYwLCA3ODY2MiwgNDEyNjUsIAotICAgIDUzMTEsIDE3OTUsIDk2NSwgMTE4NzkxLCAxMDU4NywgNzgwNTUsIDExMjc4LCA3ODYzMiwgMTk0NjQwLCAwLCAxMjk0NiwgCi0gICAgMTk0NjQxLCAxMTkzNDEsIDEyMDM0OSwgNjI5NCwgMzE0NCwgMTk0NjQ4LCAxOTQ2NDcsIDY1MDE5LCAxOTQ2NDksIDczOTkwLCAKLSAgICAwLCA5ODM5NTEsIDc0OCwgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDc4Nzk5LCAxOTQ2MjksIDEwNTU2LCAKLSAgICAyNDc1LCAxMjM4OCwgNDg4OSwgODk2OCwgNjc4NjMsIDM1OTMsIDAsIDAsIDIzNDIsIDAsIDE5NDYzNCwgNjUyMDYsIDQ4OTQsIAotICAgIDE5NDYzNSwgNDg5MCwgMTk0NjM3LCA5MTc4MDQsIDU4MSwgNDg5MywgOTgzNjE2LCA2NTcxLCA2NTU0NSwgNDg4OCwgNDE1NywgCi0gICAgNzgwNDgsIDc4MDQ5LCA3ODA0NiwgNzgwNDcsIDAsIDEwMTE5LCA2NDE1LCA0Mjg5MywgMCwgNjk3MDIsIDAsIDAsIDExMzc1LCAKLSAgICA2NDc0NiwgMjMzMiwgNzgwNjMsIDQxMiwgNzgwNjEsIDY0OTMyLCA0Mjg4MCwgNDM1ODcsIDAsIDAsIDAsIDAsIDY1MTk3LCAKLSAgICA3ODA2NiwgMTIyMDMsIDc4MDY0LCA3ODA2NSwgODkxMywgNjU4NTQsIDQ4NzUsIDY1ODExLCAxMjAzODEsIDEyMDM4OSwgCi0gICAgMTE4ODg4LCA5MzQ0LCA4ODI2LCAxMjAzODYsIDEyMDM5NSwgMTMxMDQsIDc0NzgxLCAxMTk5NywgMTIwMzkzLCA3ODA3NSwgCi0gICAgMCwgMzEzNCwgMCwgNjU2OTYsIDkyMzMxLCAwLCA2NjIxNywgMCwgODMzNCwgMTE5MzQ0LCAwLCAzNDQ5LCAwLCAwLCAKLSAgICA3ODQxNCwgNzg0MTMsIDExODk1MCwgNzQwMTEsIDAsIDAsIDAsIDAsIDE5MDgsIDEyMDE2NywgNDMyOCwgMTA3MzQsIAotICAgIDEyNzAxNCwgMCwgMTI3OTE0LCA3ODA0LCA3ODI3MiwgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgMCwgCi0gICAgNzgwNTQsIDQ5MTcsIDc0NTE2LCA3NDIwOCwgNjQyODUsIDQ5MTIsIDU0NjQsIDEyNzgzNiwgMTE4ODkzLCAyMzYxLCA3OTcxLCAKLSAgICA3ODA3MiwgNzgwNzMsIDU1MjQzLCA3ODA3MSwgMCwgODA4NiwgNzQzMTcsIDY3MDcsIDgzMTksIDIzMTIsIDQwOTc3LCAKLSAgICAxMDk2MCwgNDA5NjIsIDgzMDUsIDEyNTczLCA5ODM2MDgsIDQwOTgwLCA5ODM5NTUsIDEzMjAyLCAwLCAxMjU4MiwgNzgyODIsIAotICAgIDk4MzA0OCwgNjk4NTYsIDQyNDM4LCA1NTIyMSwgNjI4OCwgNzgyODAsIDEyNzk0NiwgNTY1MywgNDI0MDAsIDEwODkxLCAKLSAgICA3Njk4LCA1NjU4LCA3NDA0NSwgNzAwMzksIDAsIDAsIDQ5MTMsIDAsIDk4Mzk1MCwgNzEzMzMsIDQyMzI2LCAxMjgxOTQsIAotICAgIDEyNzI4LCA5MjY4NSwgNDI0NzgsIDIzMjcsIDAsIDEyNTYzLCA0MjI4NywgMTI3MDUsIDAsIDAsIDEyNTg4LCA4ODIxLCAKLSAgICA2MTUzLCAyODY3LCAxOTQ3MDgsIDY2MzEyLCA2OTgsIDEyODAwNywgMTk0NjA2LCAxMDM1NiwgNzAwMTcsIDE5NDcxMywgCi0gICAgNjUxLCAxMjY0MSwgMCwgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCA3ODQ2NSwgNzg0NjcsIDc4NDYzLCA3ODQ2NCwgMTI4ODUxLCAKLSAgICA3ODQ2MSwgMTk0Njk3LCA3NDM1NiwgNjQ5NDUsIDQ3MTYsIDQzMjc3LCAwLCA3ODQ3NCwgMTIzNDAsIDEyMDU2OCwgMCwgCi0gICAgMTk0NzAwLCA1NTI2NCwgNDEyMTEsIDEyMDY3NiwgODcwMywgNTQ2MiwgOTE3NjI5LCA5ODM0ODcsIDEwMTAxLCAwLCAKLSAgICA3MDA0OSwgODQ3OSwgNDE1MSwgNDE5MzMsIDAsIDAsIDY2MjU0LCAxMjA4MjEsIDAsIDAsIDEyODY1NCwgMCwgMTE5MTk0LCAKLSAgICA3NDA1MCwgOTI3MDEsIDAsIDAsIDAsIDAsIDAsIDEyMjc4LCAwLCAwLCAwLCAyNzAwLCAxMjU3NiwgNzg0MiwgMTI4OTksIDAsIAotICAgIDAsIDI2OTksIDAsIDczODQ1LCAyOTg1LCA5MjU2OCwgMTI2NDc1LCA5MTc4NDUsIDEyMTkyLCAxMTkzMTQsIDAsIDExOTMxMiwgCi0gICAgOTgyNywgMTE5MzEwLCAxMTkzMTEsIDExOTMwOCwgMTE5MzA5LCAxMTkzMDYsIDExNDgxLCA0MTIxMCwgMTE5MzA1LCAwLCAKLSAgICAzNSwgNzg0ODEsIDc4NDgyLCA2NjY5NCwgNjg0NzksIDc4NDc3LCA3ODQ3OCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAKLSAgICAxMDUzNCwgMCwgNzg0ODUsIDczODQ4LCA2Nzk3NSwgNDI3MiwgMCwgNDA5NjcsIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCAKLSAgICA3ODQ4NywgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgMjI5MiwgNjgyMTYsIDAsIDkxNzgyNiwgNTI0NCwgCi0gICAgNDE4OSwgOTQxMDgsIDY3NTk2LCAxMjc1MDQsIDQxODgsIDE4NzksIDAsIDk2OCwgMCwgNDM3NDMsIDAsIDg4NzMsIDIyNzksIAotICAgIDAsIDkxNzgyNywgNjU1NTUsIDEyNTc0LCAwLCAwLCAwLCA3NDQ5MCwgMTI3MDk5LCA0MzY1NywgMCwgMCwgMCwgNDI2ODIsIAotICAgIDEyNTc4LCAxMjcyMCwgMCwgNDEyMjcsIDAsIDEyMzQ2LCAxMjcxMDEsIDY0ODQ4LCAwLCAwLCA3MjUxLCAwLCAwLCAKLSAgICAxMTg4NTAsIDExOTE0MSwgMTI4NTQ2LCA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDc4ODA4LCA5NDY5LCAKLSAgICA5NjMyLCA5MjMyMywgNzQ3NjEsIDY0MzIzLCAxMjczMzUsIDAsIDAsIDAsIDMxMCwgMCwgNDEyODEsIDEwOTc2LCAwLCAKLSAgICA3MTMyNSwgMCwgNzQyNjYsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgCi0gICAgMTI3MzAsIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAxMjAxNjEsIDAsIDAsIDQxOTM0LCA3NDY1LCAwLCAKLSAgICAxMjgxNjgsIDk4MzI2MCwgNDcxNSwgNjEwMSwgOTQxMDYsIDQxOTM2LCAwLCA0ODc5LCAwLCA2NTQ0NiwgMCwgMzA3LCAKLSAgICAxMjcxNDcsIDk1ODUsIDUzNzQsIDk4MzI1OSwgMTI4MDU5LCAwLCAwLCAxMjY2MTgsIDEyMDM5MCwgMCwgNjU1NjcsIAotICAgIDEyMDYxNCwgMTkyOSwgMCwgMTIxNDIsIDAsIDEyMjM2LCA0MTQxOSwgMTk0NjE4LCAxMjA2MTAsIDEyOTgyLCAxOTQ2MjMsIAotICAgIDUzNzgsIDc4NzkxLCAxMjg2NzksIDQxNDIxLCAwLCA0NDYyLCAwLCAxMjY1OTksIDEyODA5MiwgODIxLCAwLCAyNDk4LCAKLSAgICA1ODAwLCAxMjAxNTcsIDk4MzExNSwgMTc2MCwgMjQyMSwgNDQ2OSwgMjMyNCwgODI4LCAzNjExLCA3ODQwMCwgNzU3LCAKLSAgICAxMTg1LCAwLCA3ODc3MCwgNDM1OTcsIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCA0Mzk3MSwgMCwgMCwgMTA2MzQsIAotICAgIDEwOTQyLCA3NzEzLCAyMzQ4LCAwLCA2NDM3NCwgNDM4MCwgMTk0NjA4LCAxMTkwNDQsIDk5ODIsIDY0MzI0LCA0MTI0MCwgCi0gICAgODYyLCA2NTYyNiwgNzg0NjIsIDE4MTAsIDM2NzMsIDUxMzcsIDE5NDYxNywgMCwgNzI3NywgNjU2MjIsIDAsIDc1NjYsIAotICAgIDY0Njg4LCAxOTQ1OTMsIDE5NDU5MiwgNzgwOTIsIDc0MzU3LCAxOTQ1OTcsIDQ3NDgsIDkyMjI4LCAxOTQ1OTgsIDE5NDYwMSwgCi0gICAgNDIyNjAsIDU4NzEsIDExOTA3NSwgMCwgNzQ1NzYsIDQ0MDE5LCAwLCAxMjgxODksIDM5NjcsIDE5NDYwNCwgMTMxMzcsIAotICAgIDg3NzUsIDEyNzk0NSwgMCwgMjk2MywgMCwgODQxMCwgNDQ1NCwgNzIzLCAxMjc4ODIsIDk2NiwgNDQ0OSwgOTIzMzAsIAotICAgIDkyMjM4LCAwLCA3ODE5LCAyMzIwLCAxOTQ1ODksIDMzOSwgNDk2OCwgMTk0NTkwLCAxMjAzOTksIDgwNzUsIDU1Mjc2LCAwLCAKLSAgICA4MDQ3LCAwLCA3ODgyNywgMTI2MzQsIDQxNTQyLCA3ODc4MCwgNzQ2NiwgNjcwNSwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgCi0gICAgOTgzNzU0LCAxNTg0LCA2NjY0NSwgNjA0NSwgNjcyOSwgMTIwNjQwLCA2NTIxOCwgMTE1NTksIDAsIDc4MDYyLCA3NTM3LCAwLCAKLSAgICAxMTM3MCwgMCwgMTAzMzAsIDAsIDEwMzk0LCAwLCA3NDE5NCwgMCwgMTI3OTI5LCA5NzgwLCAwLCAxMzA5MiwgMTk0NTc2LCAKLSAgICA3Nzk1MCwgMTk0NTc4LCA3MDc0LCA5MjY0OCwgMTk0NTc5LCAxOTQ1ODIsIDExNDE0LCAxMjg4NjgsIDI1MzEsIDEzMDM0LCAKLSAgICAwLCAwLCA0MjExLCAxMjU5LCA3NTE3LCAwLCAwLCAxOTQ1NjEsIDQwOTk2LCAxMzAzNywgNzA5MiwgNjQxLCA1MjE5LCAKLSAgICA5NDAzNCwgMTk0NTY2LCAxMTA2NCwgNDExMjksIDAsIDQyODUwLCAxMzAzNSwgOTA3NSwgOTIzODcsIDU0NjYsIDEyODE1MywgCi0gICAgMCwgNjQwOTgsIDY1NzkzLCA0NTM1LCAxOTQ1NzMsIDQyNzEsIDc4NDE3LCAxMjgzNTcsIDY3NjksIDQxNDEwLCA5ODM0NDQsIAotICAgIDY0MjYyLCA2NzY3LCA0MTQwNywgMCwgMCwgNjc1NSwgMTE4ODY0LCA5MDQ2LCAxMjc5MzQsIDEyNjYwOCwgMCwgMCwgMCwgMCwgCi0gICAgNjc2NzUsIDAsIDAsIDAsIDY0MzM4LCAyNTYzLCAxMzAzMywgMjQ3LCAxMTg5MTUsIDAsIDEyMzM4LCA0NjUxLCA2OTg5NSwgCi0gICAgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAwLCA0MTkwMywgNDM0NDcsIDExMDAxLCAwLCA0MjI1NSwgMCwgOTI2NjEsIDY5ODIxLCAKLSAgICA0MTkwNSwgMCwgMCwgMTA3NzUsIDk3OTMsIDUwMDksIDAsIDQyMjY5LCA2NDU4NywgOTgzMDYzLCA0MjUzNSwgNjk4MTIsIAotICAgIDY0NTI5LCA0MTQwOCwgNDI4NTMsIDM4NzcsIDEyMDc5NSwgNDI2NzQsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDk4Mzc2NywgCi0gICAgMTAyMzYsIDY1OTE4LCA0Mzc4MiwgMCwgMCwgNjQ1MDYsIDY5NjUyLCAxMTg5MjEsIDQ3NDcsIDEyODA1OCwgNjk4NDQsIAotICAgIDQzMjAwLCA1ODMyLCAwLCAwLCA1MTQxLCA0MjYwMCwgMCwgNDMyMDMsIDAsIDk4Mzc5MCwgNDMyODYsIDAsIDEyODIxMSwgCi0gICAgNDM3NzgsIDAsIDQxMzA1LCA3ODc3NiwgNDM3ODEsIDExMzAzLCA2NTU0NywgMCwgNzAzMSwgODU5LCAwLCAwLCAwLCA2MDU5LCAKLSAgICAxMjY5ODUsIDU1MjM1LCAwLCA4NTM1LCAwLCA2NTE5NiwgMTk0Nzg3LCA2NjAzMiwgMTE0ODgsIDEyMDQ4MSwgMTIwNzg2LCAKLSAgICA0MjIzMywgNjQxNDAsIDk5NDYsIDYzODg1LCAxOTQ3OTIsIDExODIyLCAwLCA0MzE4OSwgOTgzODg5LCAwLCAxNzg4LCAKLSAgICAxNTc5LCAxMjA0ODIsIDcxMjk4LCAwLCAwLCAwLCA5MDI4LCAxMTk1NzEsIDY5MjM0LCA5NDA1NSwgMCwgMTI4NSwgNjQ4ODIsIAotICAgIDQxMjQyLCA3MDA4NiwgMCwgMTI2NDAsIDAsIDc0MDEsIDAsIDEyNjI1LCA2ODE5OCwgMCwgNzAwODIsIDM5NDAsIDQxNTk3LCAKLSAgICA0Mzc1NCwgMzM5NiwgMTI2NDIsIDg2NjUsIDAsIDAsIDEyNjMwLCAxNjUzLCA5MTc4MTUsIDEwMTUzLCAwLCA2MTY2LCAKLSAgICAxMjA1MTYsIDExODk4OSwgMCwgODgxNSwgNjY2NzMsIDY1MDQ2LCA5Mjg1LCA5MTMsIDQyMjU5LCAxMTkzMTcsIDExOTMxOCwgCi0gICAgMjE0MiwgNjg0NTQsIDQyNDg1LCA5NDAxMiwgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAwLCA5MjY0MywgMCwgMTk0NjczLCAKLSAgICAxMjAzMiwgMCwgOTcyNSwgMCwgNzg0MzEsIDUyNjMsIDEyODE4LCA3ODQzMCwgNDE5MzksIDEwMDIyLCA2NTM4NywgNzg0MTksIAotICAgIDQyNzc3LCAxMDEzOSwgOTgwLCA0MzY5OCwgNjUzODYsIDIyMDgsIDAsIDQzNzAxLCA0MzE5OCwgNzE4NCwgMTIwNjczLCAKLSAgICAxOTQ3OTcsIDkxNzgxOSwgMTAwODUsIDExOTk5MiwgMCwgMTE5OTkzLCA2NjM0LCA5MjM3MywgMCwgMTE5MzIzLCA4MDcyLCAKLSAgICAxMTkzMjEsIDQzNzAwLCAwLCA4ODcyLCA3NzgzLCA5MTc5OTIsIDEyMzk4LCA4MjM3LCAwLCAwLCAxMjM5NSwgMCwgCi0gICAgMTI2OTc3LCAxMjA1NjUsIDk5MTQsIDIyMTcsIDkxNzg1NCwgNzM5NzUsIDYzNjcsIDYzNTEsIDY2Njg4LCAwLCA3ODEwNywgCi0gICAgMCwgNjQ3MzUsIDQxMjQzLCA5MjE5OSwgNzgwOCwgMTgyOSwgMCwgNDE5MzcsIDQzNTgsIDQzMjcyLCA2MzUzLCAwLCAwLCAKLSAgICAxMjA0MjIsIDAsIDE3MTAsIDAsIDAsIDY1NjA3LCAwLCA0OSwgNjYyNywgMCwgNjI1OCwgMTA2ODMsIDc4NjcyLCA5NzQxLCAKLSAgICA3ODMyOSwgNTY0OSwgNzg0NDEsIDQzNDQzLCA2NDQxOCwgMTY0MywgNjUyMTMsIDg0MDUsIDM0NzAsIDEyODIyNSwgMTMyMTMsIAotICAgIDQyNDUyLCA3ODMzMSwgMTIwNjY0LCA3ODQ0NSwgMCwgMTA3MiwgNzg0NTcsIDc4NDUyLCA3ODQ1NCwgNjU3NiwgNDE5ODgsIAotICAgIDQxMTMyLCA2NTY3NSwgMTA4MCwgMTIwMDAyLCA5ODg2LCA1NTIyNSwgMTEwMSwgNjg0MDQsIDEyMzA5LCA1NTIyNywgMCwgCi0gICAgMTI2MzIsIDEwODYsIDE4NjksIDc4Njg1LCA3NjgwLCAwLCA2NTQ1OCwgMTIwNzE0LCAxMjYzOSwgMzM4MCwgODEyMywgCi0gICAgMTA5MSwgMTI2MzgsIDc5NzcsIDQ1MDEsIDQxMDk5LCAwLCA2NjMwOSwgMCwgMCwgMTQ5NCwgOTgzMTQ2LCAxMjY2MTMsIDAsIAotICAgIDExNjkzLCAxMjY1MTMsIDEwNDk0LCA5MjY1NSwgNjU4NzIsIDEyMzYzLCAxMTM4NiwgMCwgMCwgMCwgMCwgNjQ1ODIsIDAsIAotICAgIDczNzk0LCAwLCA4MDIyLCAwLCAxMjA0NjIsIDc0MTA2LCAxMjQxMywgOTQwNjksIDkxNzk5NCwgOTE3OTkzLCA5MTc5OTUsIAotICAgIDU1NzAsIDE4ODEsIDcyMTAsIDAsIDEwMTIsIDQzNzUyLCAwLCAxMjA3MDksIDcyMDgsIDY2NDQyLCA1NTY5LCA5ODMyMzYsIAotICAgIDQyMzM5LCAwLCA2MDYzLCAwLCA3ODM4MywgMTE5NTk0LCA2MDUzLCA2NTYwMiwgMCwgOTIyMDEsIDY0NzI3LCA5MTYwLCAKLSAgICAxOTQ4MjcsIDAsIDAsIDkyMTgwLCAxMDUwMywgMTE4ODEwLCA2MDU1LCAzODcwLCA0Mjc5LCA4NDkwLCAxMjAxMTQsIDQzMTksIAotICAgIDY0Nzg2LCA4NjAyLCAxMjAxMTAsIDExMzI2LCA5MjIwNCwgOTgzMTE2LCAwLCAxMjAxMTksIDc4MzMzLCAxMjAxMTcsIAotICAgIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAzNjc0LCA5NzQwLCA5MTIxLCA1NTY4LCAxMjAxMDcsIAotICAgIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA0MjE1OSwgNDI4NzAsIDEyMDEwMSwgNTg5LCA3MDUwLCA5ODM3OTEsIDQzMjgxLCAKLSAgICAxMDIzMywgNDEyNjMsIDY2MjUxLCA2NTcyOSwgNjYyNTMsIDEyNjQ5NywgNzQwOTksIDQyNjQ1LCAwLCAxOTQ4MTUsIDg1ODMsIAotICAgIDAsIDU4NDcsIDY5MjgsIDEyODA3NCwgMCwgMCwgMCwgMCwgNjY1OTIsIDEyMjA0LCA5MTc5NjIsIDE5OTY2LCA3Nzg1NiwgCi0gICAgNDI1NjEsIDEyMDYyNiwgOTgzMjQ1LCAwLCA4MTIwLCAxMjA3MDEsIDAsIDAsIDEyODAxMiwgNDEwNjMsIDAsIDEwNjY0LCAwLCAKLSAgICA4MzY5LCAwLCA0NTUxLCAxOTQ5NjQsIDMzNjksIDAsIDAsIDk2NzMsIDY2MzM0LCA2NTU4MCwgMTA0NzgsIDExODk2MCwgCi0gICAgMTI1MTcsIDU1NywgOTQ1NywgMTIwMzQsIDk4MzY2MiwgNjM1NSwgMTI1MTksIDQxMDA0LCAwLCAxOTUwMjUsIDc0MDk0LCAwLCAKLSAgICAwLCA3Nzk3MCwgOTgzNTYwLCAwLCAxMjgxNzUsIDEyMTExLCAzOTI3LCAwLCAxMjUxNSwgMTQ3NCwgNjc4OTMsIDU0OTIsIAotICAgIDY5MjMsIDkyMjgxLCAxMDQ0MSwgNzM4MzYsIDAsIDQzOTkwLCA1NDkzLCAwLCA3NDMxOSwgMCwgNjY2MzUsIDEyMDE5LCAwLCAKLSAgICAxNjE4LCAwLCAxMjA0NzQsIDk2NDUsIDEwNDMwLCA5MTc5NTksIDU4NTMsIDEzMDYzLCAxMDM2MywgMCwgMTI5NTYsIAotICAgIDEyODE2OSwgMTIwNzI5LCAxMTMxNCwgOTE3NTgyLCAxMjA2MCwgMCwgNzgzOTIsIDEyODI2LCA2MzI5LCAwLCAxMDUxNCwgCi0gICAgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDc4Mzk4LCA0MzU3MCwgMjY5NywgNDM0MjAsIDc4Mzk2LCAKLSAgICAxMjcwNTcsIDI2OTUsIDQyMTcxLCAwLCAwLCAwLCA2NzYxNywgMTE4OTcxLCAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIAotICAgIDExNjQsIDEyODgxNywgMCwgNDE5MTgsIDk4MzE2OCwgMTI3NTQyLCA4Njg3LCA2NjAwOSwgMTIxNzgsIDcwNTMsIDEyODAwMSwgCi0gICAgNzQ2OSwgMCwgNTI0OCwgMTIyMTgsIDEyMDUzOCwgNjQyNywgNDI4ODQsIDQxMTIzLCAwLCAwLCA0Mjg3MywgNDExMjYsIAotICAgIDk5OTEsIDQxMTI4LCA3NDM3MSwgMTI3MDMxLCAwLCA5ODczLCAwLCA0Mjg3NywgNzk5NCwgNjQ3NjIsIDIwNTMsIDQyODQzLCAKLSAgICA2NTkxLCA5MzQwLCAwLCAxNTg5LCAwLCAyOTYsIDc0NDM4LCA3ODg1MiwgMCwgNjc4NDEsIDc0MzcwLCAwLCA4OTIyLCAKLSAgICAxMjgwNjgsIDc0NjAwLCAxMjcwMCwgNzQ4MzYsIDAsIDEyNTc5LCAwLCAxMjU3NSwgNjQxNiwgNTY1NiwgMjg5MSwgMTMyNjIsIAotICAgIDY1NTkwLCA1Mjk5LCAwLCAxMTQ3MywgNTQ0OSwgMTI1MiwgMCwgNzg0MDQsIDQxNDMxLCA3NDM2OSwgNjUzNzMsIDUyOTUsIAotICAgIDkxNzU2OSwgNzQxMTQsIDEyMjMsIDE2NDIsIDE3NCwgNzgzOTksIDg4MywgNDE2MSwgMTI2OTEsIDQyNjAzLCA0MTQxMywgCi0gICAgMzIxMiwgNDE0NTksIDMyMTEsIDc0ODEwLCA0MTQyNSwgMTI3MDI5LCA3ODQxMiwgNzQ0NTAsIDk3MjgsIDM4NDYsIDgwNzAsIAotICAgIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIDQ5ODYsIDEyMTg5LCAwLCAKLSAgICA2NzY0OCwgMTIwNDk5LCA5NDAwMSwgNDI1NywgMTIxMDQsIDc3OTQyLCA2MjIwLCA5MDA0LCA2NTU2MSwgMCwgNzc5NDksIDAsIAotICAgIDY4MTM1LCA5MTc1NzYsIDc3OTQ2LCAwLCA2OTY3OSwgNjk2ODQsIDk4OTAsIDc4NTYxLCAxMjk3MSwgNzg0NTMsIDkyNTU2LCAKLSAgICA3Mzg5OCwgMTE5NzksIDcwMDUxLCAxMTg5MDAsIDkxNzg5NCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIAotICAgIDc0MjI3LCAwLCA2NTMwNCwgNDY3OSwgMTAyMzAsIDY0MzAwLCA2NDg2NywgMzQyNywgNDI0MCwgMCwgMCwgMCwgMCwgCi0gICAgNDI5MTYsIDAsIDAsIDAsIDcyODIsIDc4NzI4LCA2NTczMywgNDQ0NSwgMTI3MTM4LCAxMjgwODIsIDM0OTQsIDc0NjA2LCAKLSAgICA2NTU1LCAwLCA3Nzk3NiwgMCwgMCwgNzg1NjYsIDAsIDk4MzE4OSwgNjU4OTgsIDk4MzIzOCwgNjUzMTIsIDU0NDcsIDAsIAotICAgIDEyODk1LCA2NTU5MywgNDAxMCwgMCwgNDExMDYsIDAsIDY0NDQ4LCAwLCA0MTEwNSwgMCwgNjU4MjAsIDYyMzIsIDAsIAotICAgIDEyODI4MCwgMCwgNDM2MDgsIDExOTA5MSwgMCwgNjUzOCwgNDMzNSwgNzgzNjQsIDM5NDEsIDQxMTIyLCAxMTA2MSwgCi0gICAgNzgzNjMsIDY0ODkyLCA5MTEzLCAxOTU0LCAxMjE1NSwgOTgzNjY1LCA0Mjg3OCwgMTE1MDAsIDAsIDAsIDc0NTc4LCAwLCAKLSAgICA2NTgzMiwgMCwgMCwgMCwgNzc5NzUsIDExOTIzMCwgNDU4NiwgMCwgMzUwLCAxMDk1MSwgMCwgNTA5LCAwLCAwLCA5MjMwNywgCi0gICAgMCwgMCwgNTEzMywgMCwgMCwgOTUwMCwgMCwgNDk1NywgNjQ3NDEsIDI0MjIsIDIyMTIsIDk4MzA4MCwgMCwgMCwgMjQ5NiwgCi0gICAgMTE1MTYsIDk0NCwgMTE4ODUxLCAzODkwLCAxMjE2OCwgMTQzOCwgMCwgOTgzMTE3LCAwLCA0MTk0NywgMTIyMCwgMTIwODI4LCAKLSAgICAxMjg1NTUsIDAsIDAsIDE1NzEsIDQyNjMwLCA0MTk0OSwgNDI4MDUsIDgyNzAsIDk0MywgNTY0LCAwLCAzMTIsIDQxOTgwLCAKLSAgICA5ODM5MzUsIDAsIDc4MTIwLCA4ODc3LCAyNjksIDQ0MjksIDYyNzIsIDk2MTcsIDE0NjAsIDY5NTQsIDc4NjU3LCA0MTEyMCwgCi0gICAgNjUxMjEsIDEwODYyLCA2MDYwLCA0MTExOSwgNDE0MTYsIDc0MzU1LCA0MTczLCAwLCAwLCAwLCAxOTA2LCA5MTc5ODYsIAotICAgIDExNTMyLCA3NDA3MywgMTI3MzM4LCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCA5MTc4OTUsIDY0Mjg3LCAwLCA3ODExNSwgCi0gICAgMTE0MjgsIDE3MzAsIDI0NTcsIDkxNzgwOCwgMTk5MTgsIDEwNDY5LCAwLCAwLCA3NzAzLCA4ODQwLCA4MDM1LCAwLCAwLCAKLSAgICA5MjIzMCwgMCwgNjEyOSwgMCwgMTI4NTI4LCAxMjgyNjgsIDAsIDc4NzQsIDg2ODEsIDExOTA5MiwgMCwgMTMxMzYsIDAsIDAsIAotICAgIDcwMTAyLCA2Mzg4NiwgMTE4ODgxLCA5NjA1LCA3MTMwOCwgMTMyMjAsIDEyODc3NiwgMTIwMjc0LCA1NTE0LCAwLCA5MjI4LCAKLSAgICAwLCAwLCAwLCA1MjQwLCA5ODExLCAxMDAxMiwgMzA5NiwgMCwgMCwgOTgzMzQzLCA2NjY3NiwgNjU4NzMsIDAsIDAsIDAsIAotICAgIDk1MDEsIDAsIDEyNzIsIDY0NTM2LCA2NTQ2NSwgNjQ2NTQsIDc0NjcsIDAsIDE0NjcsIDEwMTU4LCAxMDA0MCwgMCwgOTUxOSwgCi0gICAgMCwgOTE3ODEyLCAwLCAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCA5ODMzNDUsIDE5OTM1LCAwLCA5MjE2MiwgNjk2NzYsIAotICAgIDAsIDAsIDAsIDUyNzUsIDAsIDAsIDg2MzcsIDAsIDAsIDM3ODksIDYzODgwLCAxMTQ3MSwgNDM1NTQsIDY1ODYyLCAxMTQ3NCwgCi0gICAgNjYzMzIsIDY2NjAzLCAxMjgxMzgsIDI0MjYsIDEyMDQyLCA5MjE5NCwgOTgzOTAyLCA5NTM3LCAzOTYxLCAxMjExNSwgCi0gICAgNzc5NTMsIDI2MDUsIDQ1MDAsIDY0NTYxLCA1NTIyNCwgNDk4MSwgMCwgMCwgNjM4NzYsIDExNjY3LCA0MjY4NiwgNzc5NzMsIAotICAgIDQyMzYyLCA2NDY4NiwgNDQ5OSwgNDE2NDksIDc1ODksIDAsIDAsIDMyMzcsIDAsIDY4MjE1LCA5MTc5MDQsIDg1NDEsIAotICAgIDc4Mjk4LCA3MDAzNCwgNDE4NjYsIDAsIDAsIDAsIDAsIDY5OTI0LCA0MzU1NSwgMjgyMywgOTU1OSwgMTAwNjAsIDQxOTQwLCAKLSAgICA4Mjk5LCA0MTk0NSwgNzEzMiwgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDAsIAotICAgIDQxNjk5LCAxMDc2MiwgNDM3ODAsIDEyOTk5LCAwLCAwLCA4MTA2LCA0MTI4LCAwLCA2Mjc0LCA0NDk0LCAwLCA0MDEyLCAKLSAgICAxMDM5NSwgOTgzNTkxLCA0MzYzMywgNjU0NDcsIDEyNjUxMSwgMCwgMTEwMDQsIDY5NSwgNzM5LCA2OTYsIDc2MTEsIDAsIAotICAgIDQyNzU1LCA3NDgwMiwgOTIyNywgNzUwNiwgNzUxMCwgNjk5MzcsIDY5MSwgNzM4LCA3NTExLCA3NTEyLCA3NTE1LCAzODY4LCAKLSAgICA2ODgsIDQxODQ3LCA2OTAsIDI1NDgsIDczNywgOTc0LCA4MDAzLCA3NDA2LCA5MTc5MTEsIDAsIDEyODY4OCwgMzk4NSwgCi0gICAgOTE3OTEyLCA2NTg2MCwgNjM5MjEsIDcwNTEsIDY5Nzc3LCA0NjgyLCA5MTc4MDUsIDEyODA5LCA2NDA2LCA0Njg1LCAKLSAgICA5MjUwNSwgMTA4NzksIDEwMzQ3LCA0NjgwLCA2MzQxLCAwLCAzODUxLCA4MTMyLCA3NDMyNSwgMCwgOTE3OTA3LCAwLCAKLSAgICA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDAsIDAsIDQyNjU3LCA5MjQ2OCwgNzY0MywgNDIzNzMsIDExNzE0LCA2NzU4NywgCi0gICAgNDM1NjgsIDk4MzE3NSwgMTE3MTcsIDc2NTAsIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMTI4MTU1LCA3NjQ2LCAwLCAKLSAgICA3ODA4MiwgOTY1MSwgMCwgMzg5MSwgMCwgMCwgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCAyMzYzLCA5ODMxMzUsIDAsIAotICAgIDQzNTYxLCAwLCAwLCA3NDE0NiwgMTg2MCwgNzQ5NSwgNzU4MCwgNTgxMiwgNzQ5NywgNzU4NCwgMTE5MTQwLCAxMjc4NTMsIAotICAgIDAsIDEyMDM0NywgNzcyNywgMCwgODQ5OCwgNjk4MTgsIDg5NDksIDMwNjUsIDQyNzE5LCA3MTM1LCAxNTY5LCA5MjM3NSwgCi0gICAgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAxMjUzMywgOTgzODcwLCA2NDE4LCA0NTQzLCA3ODA4NiwgNjk2OSwgMCwgNzQ4MDAsIAotICAgIDAsIDY3OTc0LCAxMTk4MCwgMTI4NjUwLCA5ODM3OTIsIDYzODk0LCAxMjA3NjAsIDEyMjgyLCA2NjE5MiwgMCwgNzQ1OTIsIAotICAgIDg4NTAsIDc0Mjc1LCA5MjM4LCAxMDYxNywgOTE3NTQ1LCAwLCA5MjYyNSwgMCwgMTI3OTEsIDAsIDAsIDEyNzg0MywgNDQ0NywgCi0gICAgNzM3MzIsIDEyNzkzLCAxMjkwMCwgOTIzNzcsIDEwOTUwLCAwLCA3ODA4NywgMTI3OTAsIDQxNDAwLCAxMTkxMjgsIDY2NjA3LCAKLSAgICAxMjc5MiwgNDIyMzIsIDE5NDkzOCwgMTc0NCwgMTI3ODksIDEwMzY2LCAxMjMxNywgNDEzMTAsIDk4Mzg2MCwgNDEzOTksIDAsIAotICAgIDAsIDU1MjU4LCAwLCAxMjY5MCwgMCwgMCwgNDM2NzIsIDEyNzg0MCwgNDE2NTIsIDI5NzQsIDkwMTAsIDExMzE1LCAwLCAKLSAgICAyNzgsIDAsIDQxNDA1LCAxMTkyNTQsIDAsIDEwMDc3LCA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAwLCA2MDAyLCAwLCAKLSAgICA0MzU1MywgMCwgNjc5MDMsIDAsIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDAsIDAsIDAsIDg2NDYsIDk4MzE4NiwgCi0gICAgNzc4MjksIDcxMzYwLCAwLCA2NDEzLCA2NTUwLCAwLCAxOTQwLCAwLCA0MzYzNywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAKLSAgICAxMDA0NCwgMTI4MzIyLCAwLCAwLCA2ODY1OSwgNjQwMywgNTcwNywgMTAzOTMsIDEyNzUzMiwgMCwgNjY2MTQsIDAsIDAsIDAsIAotICAgIDEwMjk3LCAwLCAzNzQyLCAwLCAzOTU5LCAwLCAwLCAwLCAyNDY3LCAwLCA2MDAzLCA2Mzg0NCwgNjY2MywgODA0MCwgMCwgCi0gICAgNDM3NTgsIDQxODIsIDc4MTcxLCA0Njc2LCAxMjA1MDEsIDAsIDAsIDI1MTAsIDAsIDEwMjA4LCA3ODE2OCwgOTIzNjEsIAotICAgIDExNTQwLCA0MzU0NiwgNjY5MiwgMCwgNDEwNjAsIDAsIDQ2NjgsIDkwODMsIDAsIDAsIDc4MTQ0LCAxNTU5LCA2MzgzMSwgCi0gICAgOTY3NywgMTIwMjYwLCAwLCA2NTI1NiwgMCwgNzQwNzAsIDAsIDAsIDM2NSwgMTIwNTYsIDQzMDI3LCAxMjA0MjMsIDQxNzE2LCAKLSAgICAxMjgyMzYsIDAsIDEyMDQ3MiwgNTUxNiwgMjg0NSwgNzcxNywgODAzNiwgNDE3MTcsIDczODI3LCA1NDQsIDEyMDQ1LCAKLSAgICA2Mjc4LCAwLCA1NTE1LCAwLCAwLCA5ODMwNTEsIDY1MzM5LCA0MzIyMSwgMjIxMSwgMCwgNTUxNywgMCwgMCwgNzQ4NDEsIAotICAgIDY3ODg0LCAwLCA2Nzg5MCwgNjc4ODUsIDY3ODgwLCA2Nzg4MSwgNjc4ODIsIDY3ODgzLCAwLCAwLCA2Nzg3OSwgMTI3MTg4LCAKLSAgICAxOTAyLCA2Nzg4NywgOTYzOCwgMTI5NzYsIDEyNjU0NiwgMTI0ODMsIDEyMzY4LCA0MTc2OSwgNDI3MjYsIDQxNzY1LCAKLSAgICA3MzYxLCA2NjY3LCA2Nzg3NCwgNzU1NiwgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA0MjY3NywgNjc4ODksIDAsIDEzMTEsIAotICAgIDkxNzk2NiwgNDMyNiwgMTEwMDAsIDYzODI0LCAxMzA2OCwgMTA5MzIsIDEyODg4MCwgNjkxNywgNzgxNTUsIDAsIDk0OSwgCi0gICAgNzgxNjIsIDAsIDYxNDgsIDg2MDUsIDQyMjUzLCA3ODE3NywgMCwgMCwgNDI3MTUsIDAsIDAsIDAsIDYzODcxLCAwLCAKLSAgICA0MTc5NiwgMTI2OSwgNjUzMCwgMCwgNjUwNTcsIDAsIDUxNDQsIDEyMjIxLCA0MjcxNiwgMCwgNDQzMSwgNDMzMSwgCi0gICAgOTgzNzIwLCAxMjg2NzUsIDQxODM0LCA1Mjc5LCAwLCAxMDMzNiwgODMxMiwgMCwgNDI3MDEsIDEyODgyNSwgMCwgNzgxNjUsIAotICAgIDY2MDM2LCAwLCAwLCA2NDI4LCA0MjI3MCwgMCwgOTgzNTk2LCA0MzA1OSwgNDI2NjYsIDUyNTYsIDEwNjcsIDI1NSwgCi0gICAgMTIxMzEsIDk4MzcxMywgOTQ5MywgOTgzOTU5LCA0MTAxNCwgMTE3OTMsIDE5NDkyMCwgMCwgNzQzOTQsIDQzNDYwLCAKLSAgICAxMDY1MywgNDI3MjMsIDk4Mzg0NSwgMTE5NjMyLCAwLCA2NTYwLCA3MDE2LCA3NDI3NCwgOTgzNjE1LCA0MzU1NiwgMzkyOSwgCi0gICAgNjc5NzcsIDY2MTQsIDI3NjgsIDkyNTA0LCA5NzQ2LCA1MTM1LCAxMTgxMSwgMTI3OTYsIDExOTUzLCAwLCA2OTc2MSwgCi0gICAgNTEzOSwgMzQ2LCA3NDMwMywgNjMwNSwgMTI3OTUsIDQ2NzUsIDUxNjgsIDc4NTUyLCAxMjc3NTMsIDc0MzE1LCA3NDM2MSwgCi0gICAgODI1MywgODgxNywgMTEzNiwgMCwgNDM1NjMsIDkyMjMyLCAwLCAxOTQ3NTAsIDczOTIsIDgyMzAsIDkzNjUsIDAsIDAsIAotICAgIDk4MzYwNywgMCwgMCwgNDA0MSwgMCwgMjM1NywgNDMyNDAsIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCA0NDAwNCwgCi0gICAgNzE0MiwgMTE5ODgxLCAxMjM1MCwgNjU1NTQsIDExOTg4MiwgMTE5ODc3LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgNDM3OTUsIAotICAgIDc3NzAsIDEwNzEyLCA2NDg1MywgMTI2ODYsIDExODkxNiwgNDIzNzUsIDAsIDEyNzIzOCwgNjYzNTIsIDEwNDcwLCAwLCAKLSAgICAxMTA1OSwgMTA3OTEsIDkxNzk0NCwgNDUwLCAxMTkzMjgsIDAsIDEwNDMyLCAxMjA5NywgNTQ1MCwgNjQ2OTEsIDEyMzMsIDAsIAotICAgIDQ0MDA5LCA3ODI4NCwgNjYzMzgsIDAsIDAsIDE4MzksIDExODc5OSwgOTgzMjE3LCAxMDkyNywgMTcwMSwgOTgzNjU1LCAKLSAgICAyMzg4LCA0MTc0OSwgNDE3NjEsIDU0NTMsIDgzNjEsIDExOTg2NSwgNDE3NTgsIDU0NDQsIDQxNzYzLCA2NDg4OSwgNzE0MywgCi0gICAgOTI0OTMsIDc4Njc3LCAwLCA5MjQyOSwgNzgxNzQsIDY2NDMyLCA4ODAxLCAzMDUzLCA0MzQwLCA5ODMwNDQsIDAsIDY1ODEyLCAKLSAgICA5MTc4MzEsIDAsIDQxODI0LCA2Nzk4NSwgMTIwMjAzLCAxOTQ4MDAsIDE5NDgwMywgNDI3MDAsIDE5NDgwNSwgMTI3OTgwLCAKLSAgICAxOTQ4MDcsIDc4Njc2LCA5MjM1NiwgMTk0ODA4LCAwLCAwLCA0NDkzLCA0MzM2LCAwLCAyMzE0LCA0MzYwMiwgNzg4MjYsIAotICAgIDExOTMyNSwgMTk0ODExLCA0MjQzOSwgNjQ2MzgsIDQyMzI3LCA0MzUyOCwgNDQ4OSwgNzEzMzEsIDAsIDE5NDc5MywgMTkxMiwgCi0gICAgNDIzODUsIDEwMzA2LCAxMDM3MCwgMCwgMCwgODg2NywgMTAyNTAsIDEwMjU4LCAyNzEyLCAxNjM1LCA3ODgyMSwgMTQxMCwgCi0gICAgOTI2NzEsIDk4MzI0NCwgMTE4ODc4LCAwLCAwLCA5OTE5LCAxMjA1MjgsIDU1OSwgMTI4MTU3LCA0MTgyNSwgMTI3OTc1LCAKLSAgICA3ODE4OCwgNDg5MiwgNzQwMTYsIDE5NDc4MSwgNjU0MiwgNDE5NTcsIDEyODg2NSwgNTc3NywgMCwgNzU5LCA2NTc0OSwgCi0gICAgMjA3OSwgNjUyNDgsIDEyNzg4LCA2NDQ4NywgNjQ1NTIsIDAsIDEwMjIzLCA0MjA2MiwgMCwgMCwgMTI2NTczLCAzNjY4LCAKLSAgICA2NTc1NCwgNDM1NjAsIDEyMjI2LCA2Nzk5MSwgNjUxNDksIDIzNDAsIDQxOTU5LCAxOTQ3ODYsIDE5NDc4NSwgMTk0Nzg4LCAKLSAgICA0MzYxOCwgNjU3NDcsIDEwOTM3LCAyOTYyLCAwLCAyMzIxLCAzNTg3LCA2NTc0NSwgOTI0MzYsIDg5MjEsIDk5NTIsIDAsIDAsIAotICAgIDQyNzE0LCA5OTUxLCA0MzQwOSwgMTk0NzcwLCAyOTQ5LCA2NjAxMiwgMTk0Nzc1LCAxOTQ3NzQsIDI5NTgsIDY4MzU5LCAKLSAgICA0MTgyMCwgMjMwMCwgMjM5NSwgMTI4NTYzLCA5OTc2LCAxMjAwNDMsIDEyMDA1MCwgMTIwMDU4LCA2ODIyMCwgMTI4MTQzLCAKLSAgICA0MjgwOSwgNDI4MDcsIDAsIDEyMDA0NiwgMTAxOTgsIDQxNTAsIDY0MzcxLCA4MzE4LCA0MTc5MCwgNjc5NzYsIDQxODk4LCAKLSAgICAyMzYwLCA0MTc5NCwgOTE3OTQyLCA3MTMxNCwgMTI3ODE4LCAwLCAwLCAyNDE4LCA5ODMwOTgsIDI0MTEsIDExMzM2LCA3OTksIAotICAgIDYzODIzLCAxMDI3NiwgMTAzMDgsIDEwMzcyLCA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgMTAyNjAsIDExODk4MCwgCi0gICAgNTUyODQsIDkyMjAzLCAwLCAxMDM4NCwgOTgzMjE4LCAwLCAwLCA3NzUzLCAyMzUxLCA2NjU1LCA2NDQ4OSwgNjk5MzEsIDAsIAotICAgIDc3ODcyLCA0NDQzLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCA1NDQxLCA0MTg5NiwgCi0gICAgMTAyODgsIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgNzgxOTgsIDIwNDksIDEwMDk4LCAwLCAKLSAgICA3NDE0NSwgMTI3OTQzLCAxMDI2NCwgMTAyODAsIDkxODQsIDEwMzc2LCA3MDEzLCA0NDY3LCAwLCAwLCAwLCA0MTg4NywgMCwgCi0gICAgNDg2MiwgOTczNSwgNjUzNywgMTIwNTkxLCA3NDI4NiwgMzkxNCwgOTIxNzgsIDkzOTc2LCA5MDY1LCAxMjk2MSwgMCwgMCwgCi0gICAgOTIyNTMsIDAsIDI4OSwgMCwgNDY5NCwgMTE0MjAsIDQ2OTAsIDAsIDEyMDUxNCwgOTE3OTc4LCA0NjkzLCA3Mzg5MywgCi0gICAgNDI3MjQsIDAsIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgNjc5OTQsIDgyMzgsIDMxMTAsIDEyMDE2MiwgOTgzODk5LCAxMjAxNjMsIAotICAgIDY1MjgsIDEyNzU1MywgNDMwMzUsIDY5ODk4LCAyMTgsIDAsIDE1MjAsIDAsIDQ3ODYsIDAsIDQzMjI1LCA0NjAyLCAwLCAKLSAgICA3ODE2NywgMTAwODgsIDY1NDgsIDAsIDEyMDE1NiwgNDM5NzgsIDg5ODgsIDg4ODgsIDAsIDAsIDAsIDAsIDEwNjY2LCAwLCAKLSAgICA3MzkwMiwgNjk3NDAsIDAsIDAsIDk5NzUsIDEyODAzOSwgMTE5OTAyLCA0Njg5LCA4OTMyLCAwLCA2NTU2MCwgMTE5MjA5LCAKLSAgICA3NDQ0MSwgNzg4MTAsIDAsIDAsIDY3OTg3LCAwLCAwLCAwLCA2Nzk4OSwgMCwgMTAwNjUsIDgyMDcsIDAsIDkyNjEzLCAKLSAgICAxMjgwMTEsIDAsIDY2MiwgMCwgOTI0NCwgMTk0ODYzLCAwLCAxMTkyNjEsIDk4MzQyMCwgMCwgMCwgMCwgNDE5MjksIDAsIDAsIAotICAgIDY2Njc0LCA0MTkyNiwgMTIwNDA4LCAxMjA0NDMsIDEwNTEzLCA2NDYzNywgMTk0ODYyLCA2ODAxMywgNTIsIDEzMTE4LCAKLSAgICA2NDc1LCAwLCAxMjAzNDEsIDEyMDk1LCAxMDIyNSwgNDgxMiwgOTI1NzgsIDAsIDY3OTkyLCA3NDA4NSwgMCwgMzk3OCwgMCwgCi0gICAgOTE3OTQ1LCAxMjc4MjMsIDExNTgyLCAxMjA3NjEsIDEyMjgxLCAwLCA2NTQ0LCAxMzI0MSwgOTM5NjEsIDY5NzgyLCAKLSAgICAxMjg1NTcsIDE5NDg2MCwgMTE3NjUsIDY1MjU4LCAxMDM2OSwgMCwgMTU4NSwgNzE5MiwgMTAyNDksIDQyMiwgMTUwMCwgCi0gICAgMjAzNiwgOTg2LCAxOTQ4NTksIDY0Mzk0LCA1NzgxLCA1NTk5LCA2NDI5NCwgMjQ5NCwgMTIwNDUwLCA0ODYxLCA3NDAyMSwgCi0gICAgNjQzMzQsIDc4MjAzLCAxMjc4MDgsIDAsIDkyMjY2LCA2NTEwMiwgODk2MSwgNjU4NDIsIDEwMjQzLCAxMDI0NSwgNzQxOTEsIAotICAgIDEyMDQxMCwgMCwgMTIwNDUzLCA2NDgyMSwgOTQ3OCwgMjUwOCwgOTI2ODMsIDAsIDIwMiwgMTI4MjQ2LCA3NDEzMSwgMTI0MiwgCi0gICAgNjU1MTQsIDAsIDYzOTQwLCAxMjg3MDYsIDY0NTMzLCAxMjAxMjksIDAsIDY3ODQyLCAxMTk5MCwgOTI0MzAsIDYzOTM5LCAKLSAgICA0MzM3NSwgNjU0NDAsIDI1MDQsIDAsIDc4NjcxLCA2NDgyOSwgOTgzOTAxLCA2OTQzLCA5MTc5MzQsIDU4NTksIDAsIDI4NTgsIAotICAgIDk4MzM1MywgNzQyOTQsIDk4MzkwNSwgNjkyMzksIDAsIDExOTAyNywgMTI5OTIsIDI3NTMsIDE5MzYsIDcwMDc4LCA5MjU3NCwgCisgICAgMTk0NjA5LCAwLCA4Mjk1LCA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCA5MjUyMywgMTIwMTAyLCA3MTM4LCAKKyAgICAxMjA1NTIsIDAsIDE5NDYxMSwgNzg3NTIsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCA2NDc3NSwgNTAzNiwgCisgICAgNTAzNSwgMTIwNTkwLCA0MjYwNCwgOTgzNjU2LCAwLCA4MDc0LCAyNzUsIDEzMjkxLCAxOTA3LCA3ODgzOCwgNDQzMiwgCisgICAgMTI3MjcxLCA1MDMzLCAxMjcyNzMsIDEyNzI3MiwgNDgzNiwgMzg4OCwgNzM3OTIsIDEwNzI5LCA2NDU0NiwgMTI3MjYyLCAKKyAgICA0MzcwNCwgMTI3MjY0LCAxMjcyNTEsIDY3NTg4LCAxMTkwMDAsIDEyNzI1MiwgMTI3MjU1LCA4ODU4LCA2NDA5LCAxMjcyNTYsIAorICAgIDEyMDI1MiwgMTI4MTAwLCAwLCAwLCA2NjMyMSwgMCwgMTI4MTQsIDEyNzI0OCwgMzQzMiwgMTAyMTgsIDAsIDYwOTQsIAorICAgIDc2NDEsIDQyNDQ1LCAwLCA5MjQ4NywgNDI0MDYsIDE2NzYsIDc0MzIwLCAxOTQ2MDcsIDk4MzE3NywgNTAzMCwgMCwgMCwgMCwgCisgICAgNzM4NjksIDk2MjIsIDAsIDY5OTQ0LCA2Nzg3LCAwLCAwLCAwLCA5ODM1ODMsIDEwNTQ0LCAxMjkxOSwgMCwgOTIyMTgsIDAsIAorICAgIDAsIDY5OTA2LCAxMjA3ODksIDAsIDk0NywgMTE5ODM1LCAxOTQ1ODYsIDE5NDU4NSwgMTA5NjksIDExOTkzNSwgNzYxMywgCisgICAgOTI1NjIsIDExOTkzNiwgNDc5NSwgMTE5OTMwLCA3MDE4LCA3Mzc2LCAxMjAxODEsIDEyMDE5MiwgMTIwMjY4LCAwLCAKKyAgICA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMTE4MzMsIDExOTkxOSwgNzIxNiwgNjUyMzIsIDcyMTcsIDI1MSwgNzIxOCwgNzg5NSwgCisgICAgNDM5NSwgNDM1MzgsIDExOTkyNiwgMTE5OTI5LCAxMTk5MjgsIDcyMTMsIDExOTkyMiwgNzIxNCwgNzIxNSwgOTgzODM2LCAKKyAgICA3NDE0MSwgODg4MCwgNzY4NSwgNjY0NTksIDEyMDE3MywgNjU1NDAsIDExOTYxOCwgNjI1LCA4MTg3LCA0Mjg2MSwgMTExMywgCisgICAgNzIzNiwgNzkxNSwgMzYzMCwgMTIwMTc2LCA4MTc5LCA3NDI2NCwgNjc4ODYsIDkzMTYsIDEwOTgwLCAyNDg5LCA2NTYyNCwgCisgICAgODE1MCwgMTM1OSwgNjc2NTIsIDEyNzMyOSwgMTI3MzMwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAKKyAgICAxMjczMjQsIDEyNzMyMSwgOTIyNzksIDEyNzMxOSwgMTI3MzIwLCAxMjczMTcsIDEyNzMxOCwgMTI3MzE1LCAxMjI4MywgCisgICAgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMCwgMCwgMzIzOSwgCisgICAgMTI3MzExLCAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCA1MDQwLCAKKyAgICAwLCAwLCA5ODM0NDMsIDc4NDIwLCAwLCA1MDM5LCAwLCA3ODQxOCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIDc0MjkzLCAwLCAKKyAgICA2NDY0OCwgMCwgOTM1OSwgNzg0MTYsIDAsIDEyODc3MCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIDczOTA5LCA0ODM1LCAKKyAgICA1NTI2NiwgNDM0MzIsIDEyNzgyMiwgNDMwOSwgNzEyNywgMTk0NTY5LCAwLCAxOTQ1NjgsIDEzMDEsIDAsIDQyNTg5LCA1NjksIAorICAgIDAsIDczODEzLCA3MTEsIDQzODksIDcxMzMsIDAsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIDE5NDU3MCwgNDEzMzEsIAorICAgIDEwMDYsIDc0MjQwLCAwLCAxNTUwLCA4MjAxLCA3MzczNywgNzYyNywgNTQ5OSwgNTAzMSwgNzc5MDgsIDQyNzM4LCA2NTc4NCwgCisgICAgNzc5MDcsIDY1MjY3LCAzNzU4LCAwLCA2NTc4MSwgNjQ3MzQsIDcwMDczLCAyNDQwLCA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIAorICAgIDUwMDgsIDk4MzU3MiwgMjExOCwgMCwgMTIxMjEsIDgyNTUsIDU1MTIsIDczODc1LCAyMTI4LCAyMTMwLCAyMTMxLCAyMTI2LCAKKyAgICAyMTMzLCAxMTE5LCAxMjcwNjgsIDIxMTQsIDIxMTYsIDI0NTUsIDAsIDIxMjIsIDIxMjMsIDIxMjQsIDIxMjUsIDEyNzQ4NiwgCisgICAgODcxNCwgOTgzODIwLCAyMTEzLCAwLCAyMTE1LCAxMjgxNzcsIDEyNzkwNywgNDM3MTMsIDUwNTIsIDY2MjIwLCA1ODIxLCAKKyAgICA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIAorICAgIDY2MzcsIDU5MDcsIDY1MDg4LCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIDk4MzE4MSwgMTIwMDMsIDU1MTMsIDY2NjYsIAorICAgIDUwNTMsIDc0MjMwLCA1NTEwLCA3ODQ1MSwgMCwgNzg0NDcsIDI0NzAsIDc4NDM3LCAwLCAxOTI1LCAwLCA5MjIzNywgCisgICAgNzQ4MDcsIDAsIDUwNDgsIDUwNDcsIDAsIDAsIDAsIDkyMzEzLCAwLCA3NDQ5NywgOTIzOTUsIDgwODksIDY5MjksIDYzOSwgCisgICAgOTgzNTYzLCA2ODE3OSwgNjQ0NDIsIDAsIDkyMzQ4LCA0NTk5LCA0MTQwMiwgNjY3NCwgNDMzOTcsIDQzMjk0LCAxNDc2LCAKKyAgICA2NDgsIDAsIDY1ODE5LCAzMjMzLCAwLCA0MTc4MiwgNjk1MSwgOTQwMTcsIDk4Mzk3NiwgMzUzMCwgOTc1MCwgMTI4MzE3LCAKKyAgICAwLCA2NjU2LCA0MjYxOCwgMCwgNTA0NiwgODUxMiwgNjU4NTYsIDc0MjYxLCA4OTY3LCAwLCA1MDQ1LCA0MjAyNiwgMTkxNiwgCisgICAgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAKKyAgICAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgOTE3NjAwLCA0MTc1MCwgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAKKyAgICAxMTk2MDYsIDY3OTgzLCAxMzI5NiwgNTE3LCAwLCAxMjg1MzQsIDE5NDk0NiwgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIAorICAgIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgCisgICAgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIAorICAgIDk4MzE3OCwgMTk0ODUxLCA2NjIwMCwgMCwgMCwgMCwgNzg0MjMsIDAsIDAsIDg3MTEsIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgCisgICAgNzYyMywgMTE4OTI1LCAxMTg4ODksIDkyMzUsIDEyNzYwLCA3NDE3NiwgNjk2NjIsIDY2NDQ1LCA0MzU0MCwgMTAwNjIsIAorICAgIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIDEyNjU5NywgMTIwNDM1LCAwLCA3NzI2LCAwLCAxOTkyMiwgMjY3LCAKKyAgICAzMzkzLCA0MjE5OCwgMTM3MSwgMTk0ODQ5LCA2OTIzMywgMjQ1OCwgMCwgNjIwMSwgMCwgNDEwNzQsIDQyNjYsIDEwNjUyLCAKKyAgICA0MTYxMiwgNDEwNzcsIDM0MDIsIDkwNTAsIDMzOTgsIDAsIDk4MzM0OCwgMCwgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIAorICAgIDEyODAxNywgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgNzg3NDMsIDY0MjYxLCA2NDkzNCwgMTI3NTM3LCAxMzAxNCwgCisgICAgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCA5ODMzNDIsIDAsIDk4Mzg4MCwgMTI2NjM4LCA5MDUzLCAKKyAgICAxMzAxNSwgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDk4MzgyOCwgNjY2MCwgNzg3NTgsIDkxNzc2MCwgOTE3NzkzLCAKKyAgICA0MjIxMiwgMTI2MjksIDExNDM1LCAwLCA1NTI1NiwgNjU1MzgsIDAsIDEyNzk0MCwgOTgzMzQxLCA3NDU0NywgMTI2NTg1LCAKKyAgICA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgMTE5MjM4LCAxOTUwMDQsIDc4MDk5LCAxMjcwODUsIDAsIAorICAgIDEyODMyMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgNzg0NTgsIDY2NzI4LCAxODE2LCAwLCA0MjUzMywgMTY4LCAKKyAgICA0Mjg0NSwgNDg5OCwgNjQyOTgsIDk4MzE0MSwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAzNjUzLCAwLCA3OTEsIDkxNjIsIAorICAgIDY5NzcsIDAsIDc4ODg5LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAxMTkzMDMsIDk4MzQ0OSwgNzU1NywgCisgICAgMTE5MzM5LCAxMTkzMDEsIDgyMzQsIDcyNDEsIDAsIDEyMDY3MSwgMTE5MTY3LCAxOTQ5OTYsIDEyODExLCA2NTkyNSwgCisgICAgMzk0NiwgNzgwNzgsIDEwOTk4LCA3ODA4MCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAxMjgyNzYsIDc0NTk5LCA3ODQ0OSwgCisgICAgODg5MCwgMTk0OTc3LCAxOTQ5NzYsIDI0NDgsIDc4MDg1LCAxMDI2NywgODQyNCwgMjQ1MiwgNzgwODMsIDEyODgyNCwgCisgICAgODcyOSwgNzg0NTYsIDAsIDc4NDUsIDkxNzkxNywgNzEzMDIsIDQ0MDgsIDQxMjIsIDY3NzIsIDExMDM5LCA4NzIzLCAKKyAgICAxOTQ5OTAsIDcxMzEwLCAxMTkzMDIsIDczMSwgMTE5MzA0LCA5MjI4NiwgMjQzOCwgNjQ4NTUsIDExOTMwMCwgMTE5Mjk5LCAKKyAgICAxMTc1LCAwLCA0MjEzNSwgMzczLCAxMTkxNzIsIDIxMTksIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgMCwgMCwgNDE5NTIsIDAsIAorICAgIDUyNzMsIDIxMjcsIDUyNjksIDYzMzcsIDUyMDIsIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgMTk5MTUsIDUyNzcsIAorICAgIDEyOTYzLCAxMjc4NjQsIDYxODksIDQxMjUsIDEzMTQsIDEyMTMzLCAxMjAzNDAsIDExODg3MywgMTI3MSwgOTgzNjQwLCAwLCAKKyAgICA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAzODc5LCAwLCAxMjk3OCwgNDE2NiwgNDU3NCwgMCwgNzU2NywgNzQ1OSwgCisgICAgOTgzMTYwLCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCA5MjU0OCwgNTc1OSwgOTgzOTEyLCAwLCA0MTM4OCwgNjQ0NDYsIAorICAgIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDk4MzE4NywgNzAwLCAwLCA1NTUzLCAwLCA3MDg4LCA1MzU2LCAKKyAgICA3NDk5LCA2ODAwNywgNjY1OTYsIDc0MDY2LCAwLCAxMDI2MywgNTU1NCwgMCwgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgCisgICAgOTI2MjYsIDAsIDc2MTgsIDg1MTcsIDExNDU1LCA3ODQ0MCwgNjQ2MzIsIDY0NDQ3LCA1NTU1LCA3ODA4OCwgNzgwOTMsIAorICAgIDc4MDkxLCAwLCA0MjgwMywgNjUwMzMsIDkxNDMsIDY2NjgsIDE5NTA2NywgNjc5OTUsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIAorICAgIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgOTgzNjQ5LCA0MjY5LCA3Mzg4NSwgOTE3Nzc1LCA0Mjg0NiwgNjk2NDQsIAorICAgIDk1MCwgMCwgOTIyNzMsIDY2NTgwLCAxMTg4OTUsIDY2NjgzLCAxMDU1NCwgOTE3Nzc4LCAxMTkxMjEsIDAsIDUwOTgsIAorICAgIDkxNzc3MCwgMCwgMTE5MDk5LCA1MDk3LCA0OTM1LCA5ODQ4LCAxMDM4MSwgMCwgMTI4ODcwLCA5ODM3MDEsIDM2NTEsIDAsIAorICAgIDEyMDczMCwgMTI3NTU2LCA1MTAyLCA1MTAxLCAxMDI2OSwgMTI5ODMsIDgxMzgsIDQ1MTcsIDE5MzIsIDUxMDAsIDE0MzksIAorICAgIDEyMDkzLCAxMjQ3LCAxMDAzNCwgMTk1MDY0LCA1MDk5LCA3ODM3MywgMTQ0MSwgNDIwODcsIDMwNjMsIDY1MCwgMCwgNzgzOCwgCisgICAgMCwgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTIwNzkwLCAxMjg1ODIsIDkwNzgsIDg1NDUsIDY2MzU2LCAKKyAgICAxMjg3OTksIDAsIDkxNTQsIDkxMTgsIDEyNjU0MywgMCwgMjY3NiwgMjI3NywgMCwgNzM4MTIsIDYxOTAsIDg1OTksIAorICAgIDE5NTA1MywgNjk5MTgsIDEwNzk1LCA5ODU3LCA3MDE0LCA5ODU2LCAxOTUwMzMsIDkyNjIwLCAxMjEyOSwgMCwgODQ4MSwgMCwgCisgICAgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTI4MjM3LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIAorICAgIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIDY2NTcsIDIwNywgMTI4ODA2LCA0Mjc1LCAKKyAgICA3NDgxOSwgODU0LCA2ODE0NywgNzQzODEsIDAsIDc4Nzg2LCA1MTAzLCAxMjc4NjEsIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIAorICAgIDQ4OCwgNjk4MTEsIDAsIDcxMzM5LCAxMDE1NywgMCwgNDMwMzQsIDExNDM4LCA2NDY3NCwgMCwgOTI2OTQsIDY4NDMxLCAKKyAgICA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDY5ODEzLCA0MTM2NywgNTEwNSwgMTI3NTA5LCA2OTcyMCwgNjQ3NiwgCisgICAgNTEwNCwgOTgzNzQ5LCAzMDQsIDMxNzYsIDExOTAxMCwgMCwgOTMyLCAxMjA2MzMsIDY1NjcsIDIzOCwgNjk2NTYsIAorICAgIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIDc4ODcwLCA0MTA0NCwgNjc2NDAsIDE5NDkwMiwgCisgICAgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAxMjU1MiwgMTk1MDE5LCA4ODAzLCAzMDksIAorICAgIDY2MjIsIDgxNTEsIDEwODU4LCA3ODcwNiwgNjc2MzYsIDAsIDEyNTY4LCAwLCAxMjU1MywgMTA4MTQsIDQzMjc1LCA2OTUwLCAKKyAgICA5NzEyLCA2ODY4MCwgNDM5NzAsIDk4MzE5OCwgNjUxNjUsIDkyNzI1LCAwLCA2NjQ2NiwgMCwgMCwgMCwgNjY3MjUsIDYxOTEsIAorICAgIDExMzUxLCAxMDQzNywgMTEzMTYsIDY3NjM0LCA0Mzc2MywgMCwgNDE3NTQsIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIAorICAgIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIAorICAgIDk0MDk1LCA5MTc1NDcsIDkyNjgyLCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgCisgICAgMTIwNzcsIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgMTI4MDM1LCAyNDc5LCAwLCAzNjMyLCAKKyAgICAxMjA3MjgsIDEwNjk4LCA4Mzc2LCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCA2NzYzOSwgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIAorICAgIDY1MjI5LCAxODQzLCA0MjI4MywgNDMyNTAsIDQxNTYyLCA5MTAwLCA3NDU0OCwgOTE3NjMwLCAzNjQwLCAxMjcxOTAsIAorICAgIDQyMzIxLCA3Mjg0LCAxOTQ5NzQsIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIDE5NDk1MiwgMTk0OTUxLCAxMjY2NDksIAorICAgIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxMjA2NzgsIDY4Mzk4LCAxOTQ5NTcsIDY3NjE5LCA2NjM2NywgCisgICAgMTk0OTU4LCA5NjM0LCA5MjM4MCwgOTk4OCwgMCwgNDEwNjgsIDAsIDQyOTUsIDY1MjY0LCA2ODAwNiwgMCwgOTI1NDUsIDAsIAorICAgIDc4NSwgODIzNiwgMTI4NjQ3LCA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAxMjAyNjUsIDkyNSwgMTI3MTU2LCAwLCAKKyAgICA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIDQxOTg0LCA5MjE3LCAwLCAwLCAwLCA5MTg2LCAyMDY3LCA0MDE2LCA5ODM4MDMsIDAsIAorICAgIDM4MSwgMTI5MzYsIDAsIDQyMDc3LCAwLCA2OTg4MCwgNTE4NCwgNDIwNzgsIDE5NDk0NywgMTA4MTAsIDEyODUzMSwgNDU4NSwgCisgICAgMTk5NDMsIDU4NjAsIDY3NjMzLCAwLCAwLCA4MTIsIDM2MTUsIDAsIDUxNzgsIDQ0MDAwLCAxMjA1NDgsIDc4ODA3LCA1MTg4LCAKKyAgICA3NDI4NywgNjc2MjksIDM2MDUsIDEwNjkyLCAxMTY2LCA2NDQyOSwgNDI2MzksIDkyNCwgMCwgNjc2MzEsIDQyNjE2LCAKKyAgICAxMjA2NzAsIDI0NDIsIDEwNzAzLCA3ODc4OSwgNjc2MzIsIDkxNzkyNCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgNjY3MDgsIAorICAgIDczOTMzLCA2NzYyNiwgNDI0MDEsIDAsIDY5ODcyLCAxMjczNzMsIDQyMjg4LCAxMjc1MSwgMCwgODU0MiwgMTMxNDUsIAorICAgIDE5NDk2MywgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIDAsIDQxMTE3LCAwLCA5MjU4MCwgCisgICAgMCwgMCwgNjc2MjQsIDAsIDEyOTAsIDAsIDY1NTg1LCAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgOTE3ODgzLCAxMzE4LCAKKyAgICA2NDczMSwgMTI2NTc4LCAwLCAwLCA2NjMyNSwgMzQ2NSwgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCA5ODM3ODEsIAorICAgIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgNzM5MTIsIDk3OTksIDAsIDQxODg2LCAyNDgwLCAwLCAyMDYyLCAKKyAgICAxMjcyOTMsIDY0OTQsIDU1MzcsIDc4NjU2LCAwLCAxOTQ1ODcsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIAorICAgIDAsIDY4MDA1LCAxMDYyMiwgOTgzNzc5LCAwLCA3ODY1NCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAxMTkxOTYsIDY0ODY0LCAKKyAgICAwLCA3ODY2MCwgMCwgODI4NCwgMTMwODEsIDAsIDM1ODksIDQyMDUxLCA0MDM1LCA2NDkyLCA5MjIzNiwgNDI2NSwgNjY0MiwgCisgICAgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIDExOTIxNiwgMjQ4OCwgMCwgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCAKKyAgICA5ODMzNzcsIDc1MjgsIDEwNTUwLCAwLCA5MjcwNiwgMCwgMTA5NjEsIDAsIDEzNzQsIDY0ODc4LCAxMTkwMTQsIDAsIAorICAgIDQyMzg5LCA0MTM3NCwgMjI4NiwgMCwgNzg0OTIsIDQxMzc3LCAxMjc5MDksIDAsIDQwMCwgMTI1OTcsIDEyMDU4NiwgMCwgMCwgCisgICAgNjY2MSwgOTgzMTQ1LCA2NDgyNywgMCwgNzM4MTcsIDM5MCwgMCwgNzEzMDEsIDk4Mzg2MiwgMzQ3MywgNzcxOCwgMCwgMCwgCisgICAgMCwgNTUyODUsIDAsIDAsIDAsIDExOTY5LCA5ODMzOTAsIDEyNzg0MSwgNjM2NSwgMTg4NywgNjc2MywgOTgzMzcwLCA4MDgwLCAKKyAgICA3MDA2LCAwLCA5ODMzNzEsIDY3NTcsIDY0MzUxLCAxNTQ0LCAwLCA2NzY2LCA2NDY3NywgMTIwNzE2LCA5ODMzNzIsIDYxNDYsIAorICAgIDAsIDc3MSwgOTgzMzczLCAwLCAxMjgxMiwgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAwLCA5NTMsIAorICAgIDEyOTE3LCAxMTk1NjAsIDEyMzAwLCAwLCAxMTQ5MSwgOTcyNCwgMTAzNDEsIDk4Mzc3MywgOTUyNCwgNzQ5MCwgMTEzODksIAorICAgIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIDQ3MSwgNzQ4NCwgNzQ4MiwgNjc1MywgNzQ4MCwgNTc2NCwgNzQ3OCwgNzQ3NywgCisgICAgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgCisgICAgMTI3Mjg4LCA5MjM1NywgMTAwNDksIDExODM0LCAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMTI3NDgxLCAxMjAyMTYsIDEzMzA2LCAKKyAgICAxMDUzMywgNzg3MCwgNzM5NDksIDc2MjUsIDAsIDEyMDU0NCwgMCwgMCwgOTI2NjAsIDAsIDAsIDAsIDE5OTYxLCAyNDcyLCAKKyAgICA0MjY2NSwgOTIzNDEsIDAsIDIxMzksIDQyNTYsIDEyMDc3NiwgNzQzODAsIDAsIDQyNjc1LCA0MjY1OCwgMTI4NDUsIDAsIDAsIAorICAgIDY1MTM4LCAxMTkzNTUsIDY3ODYyLCAwLCA2NTY3MSwgNzA4MywgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgCisgICAgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCA0NDUsIDEyMDU2NiwgMTI4MzA4LCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgCisgICAgOTgzMTUwLCAxMjAyMTUsIDAsIDM5MDIsIDAsIDE3NzAsIDAsIDEyODg2NiwgMTU2MCwgMTIwMjA5LCAxOTQ5NzIsIDQ1ODQsIAorICAgIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDExODkyOCwgMTExOCwgNzEzMzQsIDAsIDAsIDEwODEsIDc0MzYsIDY4NDIwLCAKKyAgICA3MjUyLCAwLCA1OTk2LCA2OTkyMSwgNDkwMywgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgMTMzMCwgMCwgNzEzOSwgMCwgCisgICAgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCA2MzI0LCA0MTk3NSwgNjQ3NzcsIDEwNjc0LCAxMjMwOCwgMTIxODYsIAorICAgIDAsIDAsIDk4Mzc0MSwgMTI3MTUsIDY4MDAyLCA5ODM0NzksIDEyNjYzMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgCisgICAgMTE5MTU3LCA2ODAwMCwgOTI0NjQsIDAsIDEyNjk4NCwgNjgwMDEsIDkzMzQsIDkyNzA1LCA5MjMxNSwgNzAxMDEsIDc5NzUsIAorICAgIDAsIDc3OTU3LCAwLCA2NjYyMSwgNDg4NCwgNjY1OTcsIDY5NzMyLCAwLCAwLCA2MzEzLCA2NTUxMywgNjk4NTcsIDAsIDAsIAorICAgIDAsIDIzNDUsIDQzNjk3LCA0NjMsIDAsIDAsIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgOTgzMzg3LCAwLCA0MjI3OSwgCisgICAgMTk0NTc3LCAwLCA3ODQxNSwgMCwgMTk1MDA4LCA5ODMzODQsIDEzMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NjYzLCAwLCAwLCAKKyAgICAwLCAwLCAyNDgyLCAxNDcxLCAwLCAwLCA0MjI0NywgMTIzNzgsIDczOTI1LCA2OTY2NCwgMCwgMTIzNzQsIDAsIDAsIDAsIAorICAgIDk4MzY5NCwgMjQ2MCwgMCwgMTE5NDQsIDEyMzc2LCAxMjc4NjgsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCAKKyAgICA1ODcwLCAwLCAyMDI0LCAxMjcxODAsIDAsIDAsIDUzOSwgMCwgMTI3NzY1LCA5NDA1MiwgMzg1MywgNjUxODAsIDEyNzkyMywgCisgICAgMTIwNzk2LCAxMjAyNDUsIDkyMzI0LCAwLCA4NjU5LCAwLCAxMjQ3NCwgOTI1NzksIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgCisgICAgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIDY5NjMzLCAxMjAwODksIDEyNDcwLCAwLCA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAKKyAgICAxMDk0NiwgMTI3MzEwLCA1MDAwLCAwLCA5ODM1NzksIDAsIDY5NjcyLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgNjgwMTgsIAorICAgIDY3MDksIDAsIDc4ODg1LCA5ODM3MDgsIDEyNzk3MSwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIDEwMzMzLCAxMDM5NywgMCwgCisgICAgMCwgNzM3OTEsIDAsIDAsIDAsIDAsIDExOTEyMywgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMTI3MjkwLCA4Mjc1LCAKKyAgICAzODkzLCA5ODMyNjQsIDAsIDEyMjEwLCA3MjIxLCA0MjE0NywgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAKKyAgICAxMjUxNiwgNDQ0NCwgMCwgOTIyNzEsIDc0NTM3LCAxMDg5MiwgODIzMSwgMCwgNjQ3MywgNDE5NjgsIDc4Mzg4LCA0MTk3MywgCisgICAgMzU5MSwgNDE5NjksIDAsIDI0NTMsIDEyODU0OSwgOTI2NjYsIDY0NzA1LCAwLCAwLCAxMDM0OSwgMTA0MTMsIDQzNTkxLCAKKyAgICA0MTk2MiwgMzIwMiwgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDk0MDYwLCA2ODcsIDAsIDAsIDAsIDE4NDAsIDAsIDY4NjcxLCAKKyAgICAxMTk4MDksIDQ4ODMsIDI4NSwgNDcyMywgNzAwOTksIDkyNjkyLCA0NDU5LCA3NDU3NywgNDI5MjEsIDQxNzIwLCAxMTA4OSwgCisgICAgMjQwLCAxOTkwNiwgMCwgNDIzMjMsIDAsIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDEyNjUzNSwgMCwgMCwgMCwgMCwgNDI2MzQsIAorICAgIDk4MzM0MywgNDM0MzcsIDMwODEsIDExNDYzLCAxMjAxNTQsIDAsIDAsIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgCisgICAgMTE5MDIzLCAxNzI5LCAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgNDMzMzQsIDY0ODUyLCAwLCA2NTE5NCwgNjYyMDEsIDAsIAorICAgIDY2NTc4LCA1MDAxLCA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCAKKyAgICA3Mzg4OSwgNzQxODIsIDEyNzkxNSwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCA5MTc5NTIsIDEyMDA4MywgCisgICAgNjM4NzMsIDg0OTEsIDAsIDAsIDk4MzYyMywgNDUzMCwgNDI0MDksIDcxMjYsIDE5NDU3NSwgMjcyMSwgMTIwMDc0LCAKKyAgICAxMTkwOTYsIDE5OTI5LCAwLCAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIDEyMDA3NywgMTIwNTMwLCA2NjE3OSwgNDI0MTIsIAorICAgIDY1OTQxLCAxMzExNCwgNjQ1MjIsIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAxMjcwNzQsIAorICAgIDk4MzIzOCwgNTUyODAsIDQyMTc0LCAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgNjYwMjYsIDQzMDYsIDQxMzgwLCAKKyAgICA2ODQzMiwgOTI1ODYsIDAsIDY2NjY3LCAxMjczMDksIDAsIDEyNjUyMSwgNDIyMDAsIDQyNTY2LCAwLCAwLCA1MDg4LCAKKyAgICA2OTQ4LCAwLCA4NTI0LCAwLCAwLCAxMjM4NSwgMCwgMCwgNjk2NDYsIDEzODYsIDY0NTgwLCAxMTQ4MCwgNjExNiwgNjUwMzksIAorICAgIDY1MDM4LCAxMjM5MiwgNjUwMzYsIDgwNjQsIDAsIDEyMTAxLCA1ODIyLCAxMTkwMDQsIDIwODAsIDcxMCwgNzc5OTksIAorICAgIDExNjYzLCAxNjY2LCA0MjA5MSwgMTE5NjU3LCAxMjM4MywgNDM2NzEsIDQyMDkyLCA2ODQxOCwgNDI4OSwgMCwgNjM4OTYsIAorICAgIDEyMDYxLCA0MjA5NiwgNDM2MjEsIDMzNjIsIDEyMzc3LCA5ODM4MzIsIDk4MzgzNCwgNjg0NDksIDc0NjEsIDczOTAxLCAKKyAgICAxMjQ0LCAzMzEsIDczNzg2LCAxMjY4MywgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAKKyAgICAxMjA4MTgsIDQxOTY0LCA0MjIwOCwgNjM4NDMsIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIAorICAgIDc4NTQ5LCA0MTIyMCwgMTMwMzIsIDAsIDU4NCwgMTI5MzMsIDQzMTc3LCAxMjM3MywgNjk4NTUsIDEzMDAwLCAxMzUxLCAKKyAgICAyOTM1LCA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgNzgyMjksIDEyNDI3LCA2NjUxNCwgNjk4NTksIDEzMDMxLCAwLCAKKyAgICA2MzkwMSwgMCwgMzY1NywgMTI4NTcyLCA2NTIwMiwgNjAwMCwgMTE5MjA2LCAxMjQyNiwgMTI3MTgxLCAwLCA0MTc0MCwgCisgICAgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAxMjQyOSwgNjcyNywgMCwgNzU2MiwgMCwgNTE3MCwgMCwgCisgICAgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgOTIzOTcsIDYxNjIsIDAsIAorICAgIDY5MjI4LCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIDAsIDQyMjA3LCAKKyAgICA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgMCwgNjc4NjQsIAorICAgIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgNjk4MDUsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgNjM4NjEsIDAsIAorICAgIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDAsIDc0NTYwLCAKKyAgICA0MTM3LCA4MDgyLCA3ODUwNiwgMTE5MDYyLCA3ODUwNCwgNjcwNCwgNDU5MSwgMTI4MDI5LCAwLCAwLCA5NjgwLCAwLCAKKyAgICAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgNzg1MDgsIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgNDI2ODcsIDgzNjgsIAorICAgIDAsIDQxNDk5LCAwLCAwLCA0MjI0MiwgNDE0OTgsIDkxNzc5NCwgNDIwMjUsIDc4NTY1LCA2NTgwNSwgNDI0NjMsIDAsIAorICAgIDI5MjQsIDAsIDEyMDUxMCwgMCwgMCwgMTE5MjEzLCA3Mzk0MSwgMCwgNDIzMzAsIDkxNzc4NCwgMzk2OSwgMCwgMCwgNzE2OSwgCisgICAgMTk5MiwgOTY1MiwgNzM5NzcsIDcyNDYsIDQyMDg2LCAxMjY2MTUsIDIyMTksIDAsIDAsIDEyODgwMSwgMTk0ODM3LCAwLCAKKyAgICAzMjcsIDAsIDkwNDIsIDkxNzc3NywgOTE3Nzc2LCA2NTE0OCwgMTI0MzMsIDkxNzc4MSwgMTI3Mjc2LCA5MTc3NzksIAorICAgIDEyNDMxLCA4NjY4LCAxMjQzNCwgOTgzODM1LCA5MTc3ODIsIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAxMjgyNDMsIDQzNjUzLCAKKyAgICAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAxMjgwMTQsIDQyNDIzLCAxMTkwNjYsIDAsIDEyODEwOCwgNjY3MDksIDAsIDg4MTEsIAorICAgIDkyNywgMCwgMCwgMTI0MzYsIDk4MzI0NSwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgNjUxNDMsIDAsIAorICAgIDE5NTAxNiwgMCwgNzgxOTcsIDExMzQ4LCAwLCA3ODAzNywgOTE5NCwgOTgzMTg0LCAwLCAxOTkxNCwgMTIxNzksIDk4MzgxMiwgCisgICAgMjI5NiwgMTk0OTIzLCA2MzgzNiwgNjM4MzIsIDkxNzc3MywgMTA5NjcsIDYzODE2LCAyNTk0LCAzNDQ0LCA2MzgxNywgCisgICAgNjQ2NTEsIDAsIDQxNTAzLCAxMjc0NzgsIDExMjY1LCAwLCAxMjA3NTYsIDE5NDkyMiwgMCwgNTY2NCwgMzk3MiwgMCwgMCwgCisgICAgMCwgMTI4NTA4LCAxMjQxNiwgOTE3NzY0LCAxMTk2MDgsIDEwODE2LCA5MTc3NjksIDkxNzc2OCwgMTI0MTgsIDc0MTExLCAKKyAgICAzODgyLCA4NTMyLCA5MTc3NzEsIDE1NzMsIDEyODY0OCwgMTE5ODQ3LCA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCAKKyAgICA2NTM0MywgMTI2NDkxLCAxMjQxNCwgODI4NywgNjgyMTksIDE5NTAxNywgNjgxMDgsIDExNDMsIDExOTE2OSwgMTE5ODQ2LCAKKyAgICAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgMTI3MTA0LCAKKyAgICAxMjY2MTksIDAsIDAsIDgwMjcsIDEwOTk3LCA5MTcxLCAxMjc0MSwgMTE0MDAsIDcxMzA1LCAxOTQ3OTksIDAsIDEyODIzOSwgCisgICAgMCwgMTI4ODgxLCAxMTk2MDQsIDEyNzUyMywgMTIwMTkwLCAxOTQ3NzMsIDY3NjA4LCAxMjgyMTQsIDQyMzY4LCAwLCA3NzE1LCAKKyAgICAzODgxLCA0MTQ4NywgMTIxMTgsIDQyNTE0LCA2ODY1MSwgMCwgOTgzODk1LCAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAKKyAgICAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIDM4ODksIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCAKKyAgICA5ODMyNDEsIDMwMTQsIDUwODEsIDY1ODUzLCAxMjA3MTUsIDAsIDY4MDE0LCA2OTk1MSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCAKKyAgICA0NTk3LCA2NTUzMiwgMTE4MjgsIDEyMDE4NSwgMTIzNzEsIDAsIDg0MDcsIDAsIDEwODA1LCA4NTE4LCAxMDc3OSwgCisgICAgMTIwMTg4LCA3MTMwMywgOTgzOTMzLCAxMjM2NywgNDIxNzAsIDAsIDkyNTU3LCA2MjksIDE5MjQsIDAsIDEyMDM3LCAKKyAgICA3NDM2NiwgNTk4NywgODQ2MiwgODAwNSwgMTIzNjUsIDYzOTMzLCA2OTczNSwgMTIwODE1LCAxMjM2OSwgMTA2NDksIAorICAgIDY3OTgxLCA1MDc3LCAxMjAxNzQsIDEwODgwLCA2MzkyNywgNTA3NSwgOTE3ODgxLCAwLCA2NTA3NSwgMCwgMTEwMDcsIAorICAgIDk4MzcwNSwgNjY2NTksIDkyNjA3LCAwLCA2NjY4NCwgMCwgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCAKKyAgICA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgNjM5MjMsIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIAorICAgIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDYzMjUsIDUyNzYsIDQzMDIxLCAxMjA0ODgsIDAsIDU1MjM2LCAwLCA2NjQ2MSwgCisgICAgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCA0MTMyNywgMCwgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgCisgICAgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIDcxMzExLCAwLCAxMTkxODUsIDQyMjI5LCAxOTQ5MTIsIDAsIAorICAgIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgMTI1ODcsIDk0MTA0LCA3ODU3MSwgMCwgNzEzMjgsIDE5NDU2MiwgNDE1NzYsIAorICAgIDQyMjE1LCA3ODU3MCwgMTE5MjA3LCAwLCA4NTc4LCA1OTk1LCA3NTczLCA0MTU3NSwgNzQ3ODksIDc0NzUyLCA2Mzk0NCwgCisgICAgNjM5NDksIDY0NzY3LCAyNjcwLCA0MTY3LCAxOTQ3OTYsIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIAorICAgIDczODU0LCAxMTczNywgOTcyMSwgMCwgMCwgMCwgMTE3NDIsIDI0MTksIDAsIDExNDkzLCAxMjMzNCwgMTk0OTEzLCA0MTUzLCAKKyAgICAxMjMwMiwgMTA3OTMsIDUyNTAsIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCAKKyAgICA2NTgwNiwgNDM5OTcsIDAsIDQyMDAyLCAxMjQwNCwgOTgzNTUzLCAwLCA0OTQwLCAxMjQxMCwgNzY4MywgMTE2NywgNzM3MjksIAorICAgIDQ5ODMsIDEyMDUwNywgODYxLCAwLCAwLCAwLCAwLCA0Mzc1NywgNDMzNzAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCAKKyAgICA2NjMxLCAwLCAxMjgxNiwgNDM3NTksIDQyMjE4LCAxMjcxMCwgNjg2NzQsIDEyNzIxLCA0MTAxLCA2NjE4NSwgMCwgNTk5MiwgCisgICAgNzYxNiwgMTk1MDQ0LCAwLCAxMjU3NywgMCwgOTgzODg0LCA4NTMsIDQyNjkzLCAxOTUwMTQsIDAsIDk4MzY0NywgNTAxNiwgCisgICAgNDM1MzUsIDYzODkzLCA0MjgzNSwgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA3MTA1LCAxMjc4MDcsIAorICAgIDY1MDYwLCAxMjA3OTcsIDk5MDAsIDc3NTAsIDAsIDE5NDkxOSwgMCwgMTI3ODMwLCAwLCA2NDc3OCwgMTI1ODUsIDEwNTY1LCAKKyAgICAxMjgxNTEsIDEyMTc3LCAwLCAwLCAwLCA3NzgyNCwgMCwgNDkwMCwgMTI3ODc0LCAxMjg3OCwgOTI2MzAsIDg5ODQsIDQxMTksIAorICAgIDc0NzY4LCA4OTcxLCA3ODU5MywgNDMxMTMsIDk3MDIsIDc4NTk0LCAxMTAyNSwgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIAorICAgIDc0MTg1LCA5MjQ4MSwgOTI3MTAsIDEyMzk3LCA3NzgyNywgMCwgMTMwNTQsIDEyMzk0LCAwLCAwLCAwLCAxMzA1MywgMCwgCisgICAgMzk0OCwgMTA3ODEsIDE1NDYsIDAsIDUwMTAsIDE2ODAsIDEwNTA3LCA3ODU5MCwgNzg1ODMsIDAsIDAsIDAsIDE5NDkxNSwgCisgICAgNzI2NywgMCwgNzQ4MzMsIDEyODE4MSwgNTk5MywgMjgxOSwgMCwgMTI3MDYsIDc3ODQwLCAxODkzLCA3MjY2LCA2MzkxNSwgCisgICAgNzI2NCwgNzI2NSwgMCwgMTM2MywgMCwgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgNjk5MjksIAorICAgIDEyNTg5LCA0MTQ3OSwgMTI4MzEzLCAwLCA0MzMzOSwgNzM3NzYsIDk4MzYsIDEyMDcyNywgMCwgNDE0ODEsIDQzMzM1LCAKKyAgICA3ODMyLCA0MjM0MywgMzA5MCwgNDMzMzcsIDgxNywgMTY2NCwgMTg1MCwgMTI4ODQxLCAzMDc5LCAxMTM0MCwgNDI0MDgsIAorICAgIDQyNDQ3LCAxMjcxNDAsIDEyMDAyMCwgNDIzMDcsIDEyMzg2LCA0MjMwNCwgOTE3NTU1LCAwLCAxMjM4OSwgMCwgOTIzNjYsIAorICAgIDQxOTk2LCAxMTUyNiwgNjM5ODUsIDU4NjQsIDExNDcsIDYzOTkyLCA0Mjg4NywgMTk4NywgOTI3MTgsIDU0ODAsIDc4NTgsIAorICAgIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCA0MTY4NiwgNjM5MDUsIDExOTYwMSwgCisgICAgMTk0Njg4LCA5ODMxOTAsIDAsIDEyNjQ5LCAwLCAwLCA4MjQ3LCA1MDcsIDkxLCAyMDQyLCAxMjA3NzUsIDQzNjQzLCAKKyAgICAxOTQ2ODksIDY2MDI4LCAxMDAzNiwgNDE4NDQsIDExOTgxMywgNzc0LCAxMTk4MjksIDAsIDExOTgxNSwgNTk5NCwgMTI1MzksIAorICAgIDAsIDc4Mzc1LCAxMjA1OTcsIDExOTgzMywgOTgzMTA1LCAxMTk2MDAsIDAsIDAsIDc3MTksIDYwMjYsIDI0ODYsIDEyODMxMiwgCisgICAgMTE5ODA4LCAxNjIsIDAsIDY1MjE5LCA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDE5NDg4MSwgCisgICAgNTI2MiwgMCwgNTUyMzMsIDEyNjgxLCA0MjM3OSwgMCwgNzUzNCwgMTIyMTksIDAsIDEyNzUyOCwgNDI4MTAsIDEwNDkyLCAwLCAKKyAgICA5ODM2NjEsIDAsIDQzMTE5LCAwLCAxMjA3NTMsIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDEyNzI5LCAwLCAwLCAKKyAgICA3NDExMywgMjM0MywgNDEwMywgMTk5NDYsIDc0MTEyLCA3Nzg1MSwgMTMxMTIsIDAsIDE5NTAxMiwgMTI4NTksIDcwMDg3LCAKKyAgICAxMjAxNDgsIDY2MzY5LCA1ODYxLCAxMjc3NTgsIDExOTk5LCAxMjQwMCwgMCwgOTgzODM5LCAxMjY0NSwgNTE0NiwgMTEzMjAsIAorICAgIDY4NDEwLCA2NzQ4LCA2NTA0MCwgMCwgNjQxODQsIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgNTE0NywgMCwgMCwgCisgICAgNzQ1MjQsIDAsIDE5MjgsIDAsIDY3NjQ5LCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIDY3NjEwLCA4MjQxLCAKKyAgICAwLCA3Nzg2OCwgNDIwNiwgMCwgMCwgMCwgMTI4Mjk4LCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMTIwMjM0LCAwLCA4MzU3LCAKKyAgICA0MTI0LCA3Nzg2MiwgNjU4MzYsIDEyMDY0MSwgMTI3OTI2LCA3Nzg1OSwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIAorICAgIDEyNDA1LCAxMjAxNTAsIDkyNjY0LCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAxMjAzMTEsIDc5NDUsIDAsIDQ0MDIsIAorICAgIDk5NzAsIDEyNDAyLCA5ODMxMzYsIDQyMzkyLCAxMzA1LCAxMjQwOCwgMCwgNDQwMDcsIDAsIDAsIDQxNDY0LCAxMjQxMSwgCisgICAgMTI5NjksIDEyMDgyNCwgNDE0NjUsIDk4MzU2NSwgODUyOCwgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIAorICAgIDExOTE2MywgMCwgOTA5MywgMCwgOTE0NywgMTI4Nzg3LCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDgyOTYsIAorICAgIDY3NTAsIDE5NTAxOCwgMCwgOTU5NCwgMCwgMCwgNDM1MjcsIDAsIDcyNywgMTk0NzAzLCAxOTUwMjMsIDU4MDUsIDAsIAorICAgIDY3MjYsIDAsIDQyMTc2LCAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDIyODAsIDAsIDEyMzcyLCAxMjA2NDIsIAorICAgIDEyMDMwNywgMCwgOTIzNDMsIDAsIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIAorICAgIDE5NDcwMSwgMTA4MDMsIDQxMzIsIDEyMDMwNiwgNjg0NzQsIDkyNDczLCAwLCA5ODMzMTMsIDc0ODM3LCAxMjAxNTUsIAorICAgIDE0OTksIDAsIDgwNTUsIDQyNzQwLCA2Mzk2NSwgMCwgNjM5NjIsIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgCisgICAgNjM5NjksIDExNzgxLCA0MjcxOCwgODc4OCwgMTM1NywgNjQ4NTEsIDY1NzQzLCAwLCA4Nzc0LCAwLCAxMjcwODYsIDk5NDEsIAorICAgIDEyMDE3MiwgMCwgMTkzMywgNjk2NTUsIDk1NjQsIDAsIDkyNDM1LCA3Mzg2NiwgMCwgMCwgMjQ4NywgNjc2MTQsIDMxMjEsIAorICAgIDE4MDQsIDMzMTEsIDY3NjE1LCA3MDA4MSwgNzgzMDIsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAxMjc0NzUsIDAsIDY4MjAwLCAKKyAgICA2Njc1LCAxMjgxNDQsIDAsIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCAKKyAgICA2NDY2MywgMCwgMCwgNDU2MSwgMjEwMSwgMTM5OCwgMCwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgOTI2ODQsIDExNDA2LCAKKyAgICA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAxMjY1MTgsIDcxMDEsIDY5NjcsIDAsIDE5NDg5OCwgOTc5NiwgMCwgMzMzLCAKKyAgICA2OTg5MSwgMCwgODE0NCwgMjExNywgMCwgOTgzNTk1LCAxMjQwNiwgMCwgMTk5MzEsIDExOTA4OSwgNjY3OCwgNzc2OSwgMCwgCisgICAgMTI2MjEsIDAsIDEyNzM2NiwgMTAyMjcsIDQ3NjQsIDQzMTAxLCA5OTgxLCAwLCA0MDk4NiwgNDEyNywgNjY0ODcsIDAsIAorICAgIDQyMjAyLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCA5NDA5NywgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgCisgICAgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDEyOTg1LCA0NTMzLCAxOTUwMjEsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgCisgICAgMTIwNzA0LCA2NTQ2MSwgOTc5OCwgNjk3MDQsIDAsIDE5NDgsIDY5ODQxLCAwLCA5NTIsIDEyODIzNSwgMCwgMCwgMTIwODAyLCAKKyAgICA2NDQ5LCA5NDk0LCAxMjAzMTMsIDAsIDQzMDk4LCA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIAorICAgIDExOTk3MywgMCwgMTI4MTcsIDY3NTk3LCA2Njc2LCAzOTMwLCA0MjYxNSwgMCwgMCwgNjc1OTgsIDAsIDAsIDAsIDY1NTkxLCAKKyAgICA0MTU4MSwgNjU5MTYsIDE0NTMsIDAsIDAsIDAsIDg1MDAsIDQyMjIyLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIAorICAgIDExNTQzLCA2NzY3NiwgNjQ2NzYsIDAsIDAsIDY3NjA2LCAxMTkwODMsIDAsIDQyMjE3LCAxMzEwMiwgMCwgNjYwMDMsIAorICAgIDY2NzIsIDAsIDAsIDAsIDk4Mzc0NywgNjM4NDEsIDk2MTMsIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIAorICAgIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgMTEyODEsIDAsIDM4MDcsIDE0NjksIDY2NjQwLCAKKyAgICA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCA5MDQsIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIAorICAgIDQxMzQsIDAsIDc0ODQ3LCA2NjU3NiwgMTI3OTE2LCAwLCAxMDUyMCwgODU3NSwgOTk2MCwgMTIwMSwgMTI3Mjg5LCAxMjg0NiwgCisgICAgMTI3MjkxLCAxMjcyOTIsIDExOTE5LCA2NDk2MiwgMTI3Mjg3LCA0MzczOSwgMTI3MjgxLCA4NTExLCA5NDYwLCA4MjMsIAorICAgIDExNTg3LCAxMjMwNSwgMCwgNjQ2OTUsIDEyNzMwNSwgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgCisgICAgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIDY1NzYxLCAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCAKKyAgICA5ODIxLCA2NDMwNCwgMCwgNTE1MiwgMTEwNDgsIDc1MzMsIDY4MzY2LCA2NDQxMCwgOTIzMDUsIDAsIDQzMjMsIDEyMDA2MiwgCisgICAgOTI2NjksIDcxMzMyLCAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgCisgICAgNTI2MCwgNDMxNDMsIDk0MDM4LCAzMjYsIDEyMDEzMSwgNjg0MjMsIDAsIDEwNzcxLCAyODc2LCA3NDA3NCwgOTI1MzAsIAorICAgIDE5NDkyNCwgNDEzOTgsIDczODIsIDk4MDIsIDEyNzA3NywgMTI3MDc2LCA0NTMsIDQxMzk2LCAxMjA1MjQsIDQyNzIwLCAKKyAgICAxMjE0MCwgOTU3MiwgMCwgNzAwMywgMTk0ODgzLCA0MjMzNCwgNzcwNCwgMTI2NDkwLCAxOTQ4ODUsIDQzMTQ0LCA0MTIzLCAKKyAgICA4NDk0LCA0MzE0NiwgOTk3NywgMCwgMCwgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCAKKyAgICA0MTI2LCAwLCA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDEyNjYwNCwgMTA0NjQsIDAsIDAsIDE5NDg2OSwgNjQ1MTQsIAorICAgIDExNTI4LCA2NDAyNCwgMTI4MDcyLCA2NzksIDY0MDEzLCAwLCA1ODUwLCA3NTgsIDc1MzYsIDAsIDkyMjM0LCA0MTQ0MSwgCisgICAgMTA2OTMsIDY0MDA2LCA5ODM1NjcsIDY0MDA1LCA0MDU4LCAxMTkwMTksIDEyNjQ4NywgNjQ2NjAsIDAsIDExOTA1MCwgMCwgCisgICAgOTgzMDY5LCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCA4OTcwLCAwLCA5OTM0LCA5ODMwOTQsIDEwNzc0LCAxMjgwMjAsIAorICAgIDQyMjAxLCAxMjQyMSwgMTI4MjE2LCAwLCAxODUyLCAzMDU3LCA2NDA0NiwgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgMCwgMCwgCisgICAgMTk0ODk5LCA5MjMyMiwgNzY0NSwgMTI4NTQsIDc0MzM4LCAzNDk2LCAwLCAwLCAwLCA5MTAyLCA2MjcsIDEyNzc5NSwgCisgICAgNjE1OCwgODMyNywgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgMTMzMDksIDExNTcwLCAxMjc4MTEsIDE5OTYwLCAxMTY5NiwgMCwgCisgICAgMTAxOCwgMTE4OTcwLCAxOTQ5MDksIDE5NDg5NywgMTY4MiwgMTk0ODk2LCAxOTQ5MTEsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIAorICAgIDAsIDAsIDczODE0LCAxMTQxMiwgNjc2OCwgMTA3MjgsIDE5NDgzMCwgNzEzMTYsIDExODg2MywgNDMzMTEsIDY0OTY2LCAKKyAgICAxMTU3NywgMCwgNDMwNDAsIDE4MzMsIDExNTc2LCAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAKKyAgICAxOTQ4NDgsIDc1MzUsIDgwODUsIDQyNTI1LCAxMjAzODcsIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAKKyAgICAxMjA0ODksIDE5NDcxMSwgNjQ0ODMsIDY1NjkzLCAwLCAwLCAwLCA2OTY5NSwgNDIyNDAsIDAsIDEyNjY1MSwgNDI4NjQsIAorICAgIDEyNjQ5OCwgNjQ2NjcsIDQxODY4LCAxMTg0LCAwLCA4MTUsIDExNDg0LCAxMjc1MzUsIDY3ODQwLCA5ODM2NTEsIDAsIAorICAgIDY2MTk3LCAwLCAxMDk4NiwgNjQ2ODMsIDk4Mzc4NSwgMCwgMzQ1NSwgMCwgMCwgOTg3OSwgMCwgMCwgNDE1OCwgMTI4MDUwLCAKKyAgICA2ODE2NiwgMCwgMCwgMCwgMCwgNjk2NDUsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCA2OTY0MywgNDIxOTksIDAsIAorICAgIDkyNDA0LCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgMCwgOTIzOTAsIDQyODY3LCAxODM0LCAwLCAKKyAgICA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAyNjUyLCAxMjA1MjcsIDcxNjQsIAorICAgIDEwNzg0LCAxOTUwOTMsIDY3Njc0LCAwLCA5MjIzMywgOTI0ODIsIDE5NDc0OSwgNzQ1NjIsIDkxNzUwNSwgMTgyOCwgCisgICAgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCA2NTIzOCwgNjgzNzQsIAorICAgIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCA2NDQzNiwgMzYwMSwgCisgICAgMTk1MDk0LCAxMjgwNzMsIDk4MzU2MiwgNjA5LCAxMTU1NSwgOTgzMDk5LCAxMjQ5NiwgMTI3ODM5LCA3NDE4MSwgNDM0MywgCisgICAgMTI1MDUsIDAsIDEyNzg2MywgMCwgMTEzNzcsIDIzOSwgMCwgNjM3LCAwLCAwLCA0MjY3MSwgMCwgMCwgMCwgNDM1NjUsIAorICAgIDcxMzA2LCAxMjY0OTMsIDEyNjk2LCAxMjgyNTYsIDAsIDk0MDYyLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCA5ODMyMDYsIAorICAgIDQyODE4LCAxMjY2MzIsIDAsIDEyMDQ5MCwgMCwgMTE5MTM3LCAxNTA2LCA0MzU2MiwgMCwgOTI0OTEsIDAsIDEyNjUxLCAwLCAKKyAgICA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgMTE4ODQ0LCAwLCAKKyAgICAxMjcwODgsIDM1NSwgOTcxOSwgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIDEyMDMzLCA0MjE3OCwgMCwgNjk3NjAsIAorICAgIDQyNTcxLCA5MjYzNSwgMCwgMCwgMCwgMCwgMCwgMTI3MTc2LCAzMTc4LCAwLCAwLCA5MjcwNCwgMCwgOTA4MCwgMTI3MDAwLCAKKyAgICAxMjAzNTIsIDAsIDY4MjA5LCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCA2NjAwMCwgOTQ4OCwgNjUxNjYsIDExOTExMiwgCisgICAgMCwgMCwgMCwgMCwgNzEzMTMsIDAsIDUyNjUsIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgCisgICAgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIDQzMzQ2LCA4MTE2LCAKKyAgICA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCA5ODM2MDIsIDEyMDgxMSwgCisgICAgMCwgMTI0NjgsIDg2MDcsIDEwMDgsIDAsIDEwMDkyLCAxOTUwNzgsIDkxNzg0MiwgNjc4NTUsIDU1MjU3LCA3Mzc3MSwgCisgICAgMTc2NiwgMTEyODIsIDExOTk2LCAxODIwLCA0NTQ3LCAwLCAwLCAwLCAwLCAxMzIyMywgMTI4NjY1LCA2NDU5NSwgMTI3Mjk0LCAKKyAgICAwLCA5MjMxMSwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAwLCAwLCAwLCA1MzgyLCAwLCAwLCAwLCAxMTkwNjAsIAorICAgIDY0OTUzLCA1NDA2LCAxOTkyMCwgNjk4OTcsIDY2NTEwLCAzNTkwLCAxOTQ4NjQsIDExMzAsIDAsIDAsIDQyMDE2LCAxMTgyMywgCisgICAgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDcxMzIzLCA5MzI2LCA3MzgyNiwgNTMxMCwgNzQ4MTIsIDc4NTg0LCAKKyAgICA5MjIyOSwgODk1OSwgNDM1ODksIDY3NDcsIDY2NzIzLCAwLCA4NTY4LCAwLCAxMjA0OTYsIDczODE2LCAxMjA4MDMsIAorICAgIDk4Mzg0OCwgNDI2NzAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMTIwNjMxLCAwLCA0MzA2MywgNzQ1MTksIDEyNzE4MiwgMCwgCisgICAgNzM5MTcsIDc4NDMsIDY5NzgzLCAxMTY4OSwgNTQxMCwgNTc4MywgMTA0NjgsIDg0MDMsIDU0MDAsIDExNTk0LCAxMjgyNDcsIAorICAgIDAsIDExODk5MCwgMTA0OTEsIDY5ODQyLCA2NDQxMiwgMCwgMCwgNTU4NywgNDI4NjUsIDY0NDA0LCA4MjY4LCA0OTIzLCAKKyAgICA2NTA4NiwgODk4MSwgMTIzODIsIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDY5NzM4LCAwLCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAKKyAgICAwLCA4NjQyLCAwLCA0Mjc2NiwgOTgzODY2LCAyMjEwLCA5OTgzLCAwLCA5NDAwOSwgMCwgMCwgMCwgNzM5OCwgNDE1MTUsIDAsIAorICAgIDExODAyLCA4MDQxLCAxNDYxLCA5MTAsIDExOTEzMywgMCwgNjc0OSwgMzY1OCwgOTM5NjQsIDEyMDUyNSwgMCwgNzYxNywgCisgICAgMTk0ODQxLCAxMjg4OCwgMTI3OTgzLCA2NzY2OCwgMTMxNDMsIDAsIDkxOTMsIDExMDk3LCA1NzAzLCAwLCA0MTUxNywgCisgICAgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAxMDY2MCwgNTc2OSwgNjEzLCAKKyAgICA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIDkyNTIxLCAwLCA1OTIsIDE1NzgsIDEyNDU5LCA0MzQ0OSwgMCwgMCwgODIyNSwgCisgICAgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIDEyNjQ3MiwgMTI0ODAsIDQzMjQzLCAKKyAgICAwLCAzOSwgMTI0ODcsIDAsIDEyMDUyOSwgNzQxOTksIDEyNDgyLCAwLCAxMjQ4OSwgMCwgMzE5NSwgNTU1MCwgOTgzNTU0LCAKKyAgICA3ODk3LCAwLCAxMjAzLCA3NDM5NiwgMTgxMywgNjQ1NDQsIDQxMzExLCAxMjA5MCwgMCwgMjg3NywgMCwgMCwgMTY3NSwgCisgICAgNjk4NDAsIDAsIDAsIDAsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAxOTQ3NzcsIDk4MzYxMSwgMCwgMCwgMCwgNDMyNDQsIAorICAgIDAsIDAsIDk4MzkxNiwgMTE5NTYxLCA5ODMwNzgsIDAsIDE5NDkyMSwgMTI4MTYwLCA5OTM5LCAwLCA5ODMxNTEsIDc3ODYwLCAKKyAgICAwLCAwLCAyNzAsIDAsIDEwNzE0LCAwLCAwLCAwLCAwLCAwLCA2NTM3MiwgMCwgNzQwMzgsIDExOTU1OCwgNjI3MywgNjY2NzksIAorICAgIDM2NCwgOTU5NSwgMTk0OTA4LCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIDY2NDg5LCAyMjQsIDAsIDY4NjcwLCA5MzMyLCAKKyAgICA0OTY2LCA2ODY3NywgMCwgNjg2NDQsIDAsIDM4NDEsIDY4NjM0LCAwLCAxMDczMiwgNjg2NDAsIDg1MCwgNDk3MiwgMCwgCisgICAgMTI4OTAsIDI5MDksIDY4NjE5LCA0NDAwOCwgNjg2MjcsIDk4MzcxOCwgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAKKyAgICAxMTk2MiwgMTk0Njk0LCAxMjUwNywgMTE5NiwgMTI4Njg3LCAxMjgzMTEsIDc3NywgMTIwMTg3LCA0Mzc1LCA2NTI3MSwgCisgICAgNjc2NzgsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMTE5MzQzLCA5ODMyMzYsIDk0NTQsIDYzNzc4LCA4NjU4LCA0MjUyOCwgCisgICAgNzgwMDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCA0MjUwMiwgODI4MCwgNzQ1MjAsIDI3MDEsIAorICAgIDAsIDEyNzAwMiwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIDY2NzAxLCA2Mzc3MiwgOTgzODE0LCA2Mzc0NSwgCisgICAgMTc0OCwgNjM3NzAsIDAsIDAsIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgCisgICAgNjA5NiwgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIAorICAgIDE1OTEsIDAsIDYzODYsIDYzNzgzLCAwLCAwLCA5MjUzNSwgMCwgMCwgMCwgNzQ1NzUsIDAsIDY1NzE5LCAxMzA4MywgCisgICAgNjQ1NzQsIDY1MDEyLCAwLCAxNjQwLCAxMjQ5NSwgNjY2OTEsIDc2MjQsIDMxMzgsIDEwOTk2LCA5MjI0NywgMTkyMiwgMCwgCisgICAgMTI0OTgsIDEwOTg3LCA2OTkzNiwgNjk5MzksIDM4OTQsIDY1NTQzLCAwLCAxOTQ4NDIsIDk4MzU4OCwgNDkzLCAwLCAKKyAgICA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIDkxNzkzMiwgCisgICAgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA0MjY4MSwgMTAwMiwgMTI0OTEsIDAsIDY0OTExLCAKKyAgICA5MjYxNSwgMjA5NiwgNjUxMjAsIDAsIDc4MjE5LCA5ODMwODEsIDgzNzgsIDExNjMyLCAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgCisgICAgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgNjYyMzYsIDY2MjExLCA2NjIxOCwgCisgICAgOTI2NzIsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDk4MzU1MiwgNzkwOSwgNjYyMzQsIDExNjA1LCA2Mzc1OSwgCisgICAgOTgzNjU0LCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgCisgICAgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCAKKyAgICA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIDYzNzk3LCA5MjM5NCwgNDIzNTgsIDAsIAorICAgIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIAorICAgIDcwMDI4LCA3ODAzNCwgNDU3OSwgMTI4MDkwLCAwLCAxMjUxMSwgNzQ0NTMsIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgCisgICAgODYyMywgOTQwMTEsIDEyODA1MiwgMTI4MDQ4LCA3Mzc4LCAxMjUxMiwgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgCisgICAgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCA4MzExLCAxMjUxMCwgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAKKyAgICAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDk4MzkyMCwgMCwgMCwgMjMyMywgMCwgMjMxOSwgNzc5MTcsIDEyNDc3LCA3NzkxNiwgCisgICAgMjMxMSwgMCwgNDQxNSwgMjM3LCA2MjgxLCAxMjcyODAsIDAsIDAsIDIzMDksIDEzMTIsIDgxNzMsIDEyODg3MSwgMTI0NjksIAorICAgIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDEyODExMSwgOTM5NywgMTE1MjQsIDkzOTUsIDkzOTYsIDkzOTMsIDkzOTQsIAorICAgIDkzOTEsIDkzOTIsIDkzODksIDYyMDksIDkzODcsIDkzODgsIDQ5MzIsIDkzODYsIDkzODMsIDkzODQsIDY3NDAsIDAsIAorICAgIDY1NDUxLCA4MTg1LCAwLCA5MTc4MzIsIDQzMDI0LCA0MzMzNiwgNjc2NTksIDIzMTMsIDEyODE2NywgNzk0OCwgOTIzNiwgCisgICAgOTI1NzEsIDAsIDAsIDEwNTcwLCA0MzQ3MywgNjI4OSwgMTA0ODQsIDAsIDAsIDExOTk4LCAxMjA4MiwgMTA5MjQsIDMxNDcsIAorICAgIDAsIDEyMDY4NCwgMTI1MjQsIDExOTA4MSwgMjMxMCwgMTE4MTgsIDkzODEsIDkzODIsIDkzNzksIDkzODAsIDkzNzcsIAorICAgIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDk4Mzc3OCwgOTM3MiwgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCAKKyAgICA5ODM5NTgsIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgODc0NCwgNzI2LCAwLCA5ODM4MzcsIDQxNTUsIDAsIAorICAgIDAsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIDEyNzgwNSwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgCisgICAgOTgzODQxLCAxMjUyNSwgOTgzNDcxLCAxMjAxNiwgNjU3NzAsIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgCisgICAgMCwgMTEwMzAsIDAsIDkyNTY3LCA2NTY5MSwgNjM5OTgsIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgCisgICAgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCAKKyAgICA2NjA4LCA0MTA0NywgMTIwMzIxLCA3ODM5NSwgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIAorICAgIDEyMDMyMCwgMTEwNywgMCwgOTA3NiwgODg2MiwgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAKKyAgICAxMzIyMiwgNzQxNjUsIDc0NzgyLCAxMjY1MTQsIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIAorICAgIDk4Mzk0NywgNDk4LCA2NDQ3MSwgMTIwMzI0LCAxMjg1NjcsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAxMjUyOCwgODAzMSwgCisgICAgMjQxNCwgMCwgNjk3MTksIDMyMzEsIDAsIDY0MjIsIDY2NTEyLCA2OTY1MywgMTI1MzAsIDI1MzcsIDc4NDA1LCA0MTQyOSwgCisgICAgMTI2NTgsIDEzMDM2LCA2NTc3MiwgMCwgNzg3MzgsIDQxNDMzLCA0NzE5LCA0NjksIDAsIDQzNjMsIDMzMTMsIDQxNDI4LCAKKyAgICA3ODQwNywgMjAyMywgMTc3MiwgNzgyMjQsIDc4MjI1LCA2NTcwNiwgMTAwNTEsIDY0ODEyLCA3ODIyMCwgMCwgOTkyMCwgCisgICAgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIDk2MDcsIDAsIDk2NjMsIDk4MzIyOCwgMTE5NjM0LCA2NTAzLCAKKyAgICA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMTI3MzA0LCA0MTA2MSwgMCwgMTk0ODM4LCAxMjcxODcsIDY1MDI2LCA0MTk5MywgCisgICAgNDE1MDksIDExMDQ1LCA2NTAyOCwgNzg2MDIsIDY2NDc2LCA0MTEwOCwgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCAKKyAgICA0MTk5MiwgNDE1MDYsIDAsIDQxNjg3LCAwLCAxMjA3MTcsIDEyNzc3NiwgOTk0MCwgMTI3Mjk5LCA3NjkyLCA5ODM4MzMsIAorICAgIDgwMDgsIDQxMTMxLCAzMzAsIDg1NjYsIDY1MDgzLCA0MTEzMywgOTgxNiwgMTI2NTE3LCAxMjUzMiwgNzg1NTAsIDc4NTQ2LCAKKyAgICAzNTA4LCAxMjcwNTgsIDQzMjM1LCAwLCAxMjcyOTgsIDY0MTM5LCA3ODIzMSwgNjQxMSwgMTI5MTAsIDc4NTU0LCA2NjY0NCwgCisgICAgMTMwMjgsIDY3MzcsIDEyNTM3LCAwLCAwLCA2NDEzNiwgMTI1MzYsIDIzNTAsIDEzMDI5LCA3ODIzMywgMCwgOTgzMTAzLCAKKyAgICAxMzAzMCwgNjcwMiwgNDUyNywgMCwgMTI1MzgsIDEyODgxMCwgOTgzNjQ1LCA2NTU5OSwgNjU3MTcsIDk5NjYsIDAsIDQ5NDgsIAorICAgIDEyNDg0LCA0MDMyLCAxMjgxNDksIDEyNjIzLCAwLCA2MjA3LCAwLCA2MTE3LCA2NTkzMCwgODQxMiwgMCwgNzQzOCwgMTI5NiwgCisgICAgMjMyNSwgNDE1MTEsIDEyNjYyNSwgMTAxNDksIDc0MTE4LCAwLCAxMjcyODYsIDEyNDgxLCAwLCAxMjQ4OCwgNjY3MTMsIDAsIAorICAgIDQxNTU2LCA2NDQxNCwgMTE4ODAyLCAyMzU0LCA0MjYxOSwgNzM3NjYsIDAsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIAorICAgIDY1MDMyLCA0MTUxMywgOTgzMTY2LCAxMTkyNywgNjY1ODQsIDc4NTU5LCA3ODU2MCwgNzg1NTcsIDc4NTU4LCAwLCA3ODU1NiwgCisgICAgODQ4LCA5ODY4LCAwLCA2NDI0LCA3ODU2OCwgMTE5MzM4LCA2OTkyMiwgNzQwMzEsIDc4NTYzLCA3ODU2NCwgMjM1MiwgCisgICAgNzg1NzIsIDg5MywgNjQ1NzYsIDExMjg5LCAxNDA3LCA2Nzk3MywgMCwgMTMwMjYsIDY3NjIsIDc4NTc5LCA3ODU4MCwgCisgICAgMTMwMjMsIDg5MDMsIDk3NzcsIDY2NzE1LCAxODcxLCA4MDk5LCAwLCAwLCAxMzQzLCA5ODM4MjMsIDAsIDkzMjUsIDY4MTgsIAorICAgIDYyODMsIDExNzM4LCAwLCA5ODM5MzQsIDAsIDExNzQxLCAwLCAwLCA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCAKKyAgICA5ODM4MjUsIDE5NDc1NCwgMTMwMjEsIDY0NDk0LCAzMTM2LCAxOTQ3NTgsIDE5NDc1NywgMTk0NzYwLCAxMzAyMiwgNDI3MzcsIAorICAgIDk5NTYsIDAsIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgMTMwMjAsIDEwMDI0LCAxOTQ3NjQsIDc0NTgzLCAKKyAgICA3NDM0MCwgNjk2ODEsIDAsIDQzMDAxLCA4MDI5LCAwLCAwLCA5ODM3ODAsIDMzMzUsIDAsIDAsIDk3NzYsIDEyMDUyNiwgCisgICAgMTk0NzQ4LCA1MjE1LCA0MjY0NCwgMzMzMywgMTYzMiwgMTk0NzUxLCA2NDg0OSwgMzM0MiwgNzg1ODIsIDUzNjMsIDEyOTU3LCAKKyAgICA3ODU4MSwgNDE1NiwgMCwgMCwgNjQyMSwgNzg1OTEsIDE2MTEsIDc4NTg5LCAxMzAxOCwgNzQyNTcsIDc4NTg4LCA3NDU0MiwgCisgICAgMzMzNywgNDUzNywgNjc4OTUsIDExNzM2LCAwLCA2ODYwOCwgNjQ4MiwgNDIxNCwgNzM3OTAsIDExOTQ1LCAwLCAxMzA0NiwgCisgICAgODgzOCwgNDI1LCA0MDI1LCAxMDcwOSwgNzg1OTUsIDIxMDgsIDIzOTIsIDEzMDQ3LCAwLCAwLCA2ODE5LCAxMzA0OSwgCisgICAgNjQ5OSwgOTIyNDMsIDEyNDI0LCA2ODYxNCwgNzM5NDQsIDEzMDUwLCA5OTI0LCAxOTQ3NDUsIDY1MDcsIDEyNzkxOSwgCisgICAgOTQwNzMsIDEyODA2OSwgMzI3NywgODkyOSwgNDk0NywgNDEwNTUsIDAsIDE5NDcyMiwgMTk0NzIxLCAxOTQ3MjQsIDEzMDQ1LCAKKyAgICA2NDYyNiwgNjYwMzQsIDc3NTEsIDE5NDcyNywgODM3MSwgMTk0NzI5LCAzOTk3LCAxMjgwNiwgODc2OCwgMTMwNDQsIDAsIAorICAgIDEyNDIwLCA0MDI0LCAxOTQ3MzAsIDQxMDU0LCAxMDc4LCA5NzU3LCA2OTczNiwgNDEwNTcsIDAsIDAsIDAsIDAsIDk4Mzc5MSwgCisgICAgOTIyMTAsIDkyNDExLCAwLCA0MTQ5NiwgMCwgOTE2NSwgMTU3MiwgMTE5MTEsIDAsIDExODg0MiwgMjM0NiwgMTMyNzAsIAorICAgIDg5NTgsIDAsIDk2NDYsIDM3NzMsIDQzMTgzLCA2NDAxLCA1ODMxLCAwLCAwLCAxMzA0MywgODA1NiwgOTI0OTQsIDY1NjgxLCAKKyAgICAyMDgsIDEyNzM4MiwgNDE1MTQsIDAsIDAsIDAsIDEwNjk5LCA2NDA4LCA5MjIyNywgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAKKyAgICAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMTI2NTk2LCAwLCAxMTk5MzMsIDAsIDMxMTUsIDk5MTgsIDAsIDgyOTQsIAorICAgIDQyOTEyLCAwLCAwLCAxOTQ3MjYsIDQ4NzYsIDY1ODA0LCAwLCAwLCA0MzQ2OCwgOTgzMjc0LCA0MTU1OCwgNDE0NzEsIAorICAgIDczOTUwLCA4MTU4LCA5OTQ0LCA0MTQ3MiwgMTIwMjk4LCAxMzA1MSwgNzg2ODksIDMxNDMsIDE5NDY3NCwgNjcwMSwgCisgICAgNDE1NTksIDE4OTYsIDY2MjU2LCAxMzA1MiwgMTk0NjgwLCA1NjY1LCAwLCAxMTkwNzEsIDcwMjUsIDYzOTc0LCAwLCAKKyAgICA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgNTY2MiwgNDIzODIsIDE1NjQsIDczOTI0LCAxMTIxLCAKKyAgICA3ODMxOSwgNjM5NTksIDAsIDk5NDIsIDEzMjMxLCAwLCA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgMTE5OTMxLCAKKyAgICA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCA2NDc3MiwgNDIwMjQsIDY0MjAsIDQyMDI4LCAwLCAxMDUwOSwgMjc5NSwgCisgICAgNDkxMCwgMTk0NzI4LCA2OTIzMSwgNjQ3NTMsIDYyNzUsIDkzOTU3LCAxMTg4MzAsIDYzOTc4LCAxMTA0NCwgMzIyOSwgCisgICAgNjQyMywgNDI3NzQsIDAsIDAsIDAsIDEyODIzLCAyMzMxLCA5MTc4MTAsIDcwODUsIDYxMzcsIDAsIDc1MjQsIDAsIAorICAgIDkxNzgwOSwgODM0NiwgMCwgODMzOCwgMTI4MzE1LCA2NTA0MywgMCwgODIyLCAxMjc5ODQsIDk5MDMsIDY0NzIxLCA0MjcyMiwgCisgICAgNjk4NzcsIDE5NDY1OSwgNzg2NTUsIDc4NjYxLCAxOTQ2NjAsIDc4NjYyLCA0MTI2NSwgNTMxMSwgMTc5NSwgOTY1LCAKKyAgICAxMTg3OTEsIDEwNTg3LCA3ODA1NSwgMTEyNzgsIDc4NjMyLCAxOTQ2NDAsIDAsIDEyOTQ2LCAxOTQ2NDEsIDExOTM0MSwgCisgICAgMTIwMzQ5LCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgNjUwMTksIDE5NDY0OSwgNzM5OTAsIDAsIDk4Mzk2MCwgNzQ4LCAKKyAgICA0MTA2NywgMjMzMCwgNTM1LCAzMTQ4LCAxMjM3NSwgNzg3OTksIDE5NDYyOSwgMTA1NTYsIDI0NzUsIDEyMzg4LCA0ODg5LCAKKyAgICA4OTY4LCA2Nzg2MywgMzU5MywgMCwgMCwgMjM0MiwgMCwgMTk0NjM0LCA2NTIwNiwgNDg5NCwgMTk0NjM1LCA0ODkwLCAKKyAgICAxOTQ2MzcsIDkxNzgwNCwgNTgxLCA0ODkzLCA5ODM2MTYsIDY1NzEsIDY1NTQ1LCA0ODg4LCA0MTU3LCA3ODA0OCwgNzgwNDksIAorICAgIDc4MDQ2LCA3ODA0NywgMCwgMTAxMTksIDY0MTUsIDQyODkzLCAwLCA2OTcwMiwgMCwgMCwgMTEzNzUsIDY0NzQ2LCAyMzMyLCAKKyAgICA3ODA2MywgNDEyLCA3ODA2MSwgNjQ5MzIsIDQyODgwLCA0MzU4NywgMCwgMCwgMCwgMCwgNjUxOTcsIDc4MDY2LCAxMjIwMywgCisgICAgNzgwNjQsIDc4MDY1LCA4OTEzLCA2NTg1NCwgNDg3NSwgNjU4MTEsIDEyMDM4MSwgMTIwMzg5LCAxMTg4ODgsIDkzNDQsIAorICAgIDg4MjYsIDEyMDM4NiwgMTIwMzk1LCAxMzEwNCwgNzQ3ODEsIDExOTk3LCAxMjAzOTMsIDc4MDc1LCAwLCAzMTM0LCAwLCAKKyAgICA2NTY5NiwgOTIzMzEsIDAsIDY2MjE3LCAwLCA4MzM0LCAxMTkzNDQsIDAsIDM0NDksIDAsIDAsIDc4NDE0LCA3ODQxMywgCisgICAgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMTIwMTY3LCA0MzI4LCAxMDczNCwgMTI3MDE0LCAwLCAxMjc5MTQsIAorICAgIDc4MDQsIDc4MjcyLCAxMDgxMSwgNjI1MCwgMTEzMzksIDQ5MTQsIDExMzY3LCAwLCA3ODA1NCwgNDkxNywgNzQ1MTYsIAorICAgIDc0MjA4LCA2NDI4NSwgNDkxMiwgNTQ2NCwgMTI3ODM2LCAxMTg4OTMsIDIzNjEsIDc5NzEsIDc4MDcyLCA3ODA3MywgCisgICAgNTUyNDMsIDc4MDcxLCAwLCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgNDA5NzcsIDEwOTYwLCA0MDk2MiwgCisgICAgODMwNSwgMTI1NzMsIDk4MzYwOCwgNDA5ODAsIDk4Mzk2NCwgMTMyMDIsIDAsIDEyNTgyLCA3ODI4MiwgOTgzMDQ4LCAKKyAgICA2OTg1NiwgNDI0MzgsIDU1MjIxLCA2Mjg4LCA3ODI4MCwgMTI3OTQ2LCA1NjUzLCA0MjQwMCwgMTA4OTEsIDc2OTgsIDU2NTgsIAorICAgIDc0MDQ1LCA3MDAzOSwgMCwgMCwgNDkxMywgMCwgOTgzOTU5LCA3MTMzMywgNDIzMjYsIDEyODE5NCwgMTI3MjgsIDkyNjg1LCAKKyAgICA0MjQ3OCwgMjMyNywgMCwgMTI1NjMsIDQyMjg3LCAxMjcwNSwgMCwgMCwgMTI1ODgsIDg4MjEsIDYxNTMsIDI4NjcsIAorICAgIDE5NDcwOCwgNjYzMTIsIDY5OCwgMTI4MDA3LCAxOTQ2MDYsIDEwMzU2LCA3MDAxNywgMTk0NzEzLCA2NTEsIDEyNjQxLCAwLCAKKyAgICAwLCAwLCAwLCA0MTU1MiwgNjUxMTUsIDc4NDY1LCA3ODQ2NywgNzg0NjMsIDc4NDY0LCAxMjg4NTEsIDc4NDYxLCAxOTQ2OTcsIAorICAgIDc0MzU2LCA2NDk0NSwgNDcxNiwgNDMyNzcsIDAsIDc4NDc0LCAxMjM0MCwgMTIwNTY4LCAwLCAxOTQ3MDAsIDU1MjY0LCAKKyAgICA0MTIxMSwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDk4MzQ5NSwgMTAxMDEsIDAsIDcwMDQ5LCA4NDc5LCA0MTUxLCAKKyAgICA0MTkzMywgMCwgMCwgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMTI4NjU0LCAwLCAxMTkxOTQsIDc0MDUwLCA5MjcwMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgMCwgMjY5OSwgMCwgNzM4NDUsIAorICAgIDI5ODUsIDkyNTY4LCAxMjY0NzUsIDkxNzg0NSwgMTIxOTIsIDExOTMxNCwgMCwgMTE5MzEyLCA5ODI3LCAxMTkzMTAsIAorICAgIDExOTMxMSwgMTE5MzA4LCAxMTkzMDksIDExOTMwNiwgMTE0ODEsIDQxMjEwLCAxMTkzMDUsIDAsIDM1LCA3ODQ4MSwgCisgICAgNzg0ODIsIDY2Njk0LCA2ODQ3OSwgNzg0NzcsIDc4NDc4LCA0MzU5NiwgNjA5MCwgNjQyNTcsIDc4MTIsIDEwNTM0LCAwLCAKKyAgICA3ODQ4NSwgNzM4NDgsIDY3OTc1LCA0MjcyLCAwLCA0MDk2NywgNDA5NjQsIDkxNzgyNSwgMTI3MDQsIDc4NDg3LCA0MzMwNiwgCisgICAgMCwgNjQ0OTcsIDEyMTM4LCA3OTMwLCAwLCAyMjkyLCA2ODIxNiwgMCwgOTE3ODI2LCA1MjQ0LCA0MTg5LCA5NDEwOCwgCisgICAgNjc1OTYsIDEyNzUwNCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCA0Mzc0MywgMCwgODg3MywgMjI3OSwgMCwgOTE3ODI3LCAKKyAgICA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAxMjcwOTksIDQzNjU3LCAwLCAwLCAwLCA0MjY4MiwgMTI1NzgsIAorICAgIDEyNzIwLCAwLCA0MTIyNywgMCwgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIDExODg1MCwgCisgICAgMTE5MTQxLCAxMjg1NDYsIDY2MDE1LCAwLCA5NTksIDg4ODUsIDEyNTY0LCA2NjQ1NywgNzg4MDgsIDk0NjksIDk2MzIsIAorICAgIDkyMzIzLCA3NDc2MSwgNjQzMjMsIDEyNzMzNSwgMCwgMCwgMCwgMzEwLCAwLCA0MTI4MSwgMTA5NzYsIDAsIDcxMzI1LCAwLCAKKyAgICA3NDI2NiwgMTAwNTQsIDY0OTcsIDg1NzQsIDAsIDkwMTIsIDE5OTU4LCA3NDQyMCwgNjUwODksIDEzMjE1LCAxMjczMCwgCisgICAgNjUxNjMsIDc0MDQ0LCAzNzQsIDQzMTk1LCA4MTYsIDEyMDE2MSwgMCwgMCwgNDE5MzQsIDc0NjUsIDAsIDEyODE2OCwgCisgICAgOTgzMjY4LCA0NzE1LCA2MTAxLCA5NDEwNiwgNDE5MzYsIDAsIDQ4NzksIDAsIDY1NDQ2LCAwLCAzMDcsIDEyNzE0NywgCisgICAgOTU4NSwgNTM3NCwgOTgzMjY3LCAxMjgwNTksIDAsIDAsIDEyNjYxOCwgMTIwMzkwLCAwLCA2NTU2NywgMTIwNjE0LCAxOTI5LCAKKyAgICAwLCAxMjE0MiwgMCwgMTIyMzYsIDQxNDE5LCAxOTQ2MTgsIDEyMDYxMCwgMTI5ODIsIDE5NDYyMywgNTM3OCwgNzg3OTEsIAorICAgIDEyODY3OSwgNDE0MjEsIDAsIDQ0NjIsIDAsIDEyNjU5OSwgMTI4MDkyLCA4MjEsIDAsIDI0OTgsIDU4MDAsIDEyMDE1NywgCisgICAgOTgzMTE1LCAxNzYwLCAyNDIxLCA0NDY5LCAyMzI0LCA4MjgsIDM2MTEsIDc4NDAwLCA3NTcsIDExODUsIDAsIDc4NzcwLCAKKyAgICA0MzU5NywgMTA2MjgsIDc0ODA4LCAxOTQ1NzIsIDc5OTksIDQzOTcxLCAwLCAwLCAxMDYzNCwgMTA5NDIsIDc3MTMsIDIzNDgsIAorICAgIDAsIDY0Mzc0LCA0MzgwLCAxOTQ2MDgsIDExOTA0NCwgOTk4MiwgNjQzMjQsIDQxMjQwLCA4NjIsIDY1NjI2LCA3ODQ2MiwgCisgICAgMTgxMCwgMzY3MywgNTEzNywgMTk0NjE3LCAwLCA3Mjc3LCA2NTYyMiwgMCwgNzU2NiwgNjQ2ODgsIDE5NDU5MywgMTk0NTkyLCAKKyAgICA3ODA5MiwgNzQzNTcsIDE5NDU5NywgNDc0OCwgOTIyMjgsIDE5NDU5OCwgMTk0NjAxLCA0MjI2MCwgNTg3MSwgMTE5MDc1LCAKKyAgICAwLCA3NDU3NiwgNDQwMTksIDAsIDEyODE4OSwgMzk2NywgMTk0NjA0LCAxMzEzNywgODc3NSwgMTI3OTQ1LCAwLCAyOTYzLCAKKyAgICAwLCA4NDEwLCA0NDU0LCA3MjMsIDEyNzg4MiwgOTY2LCA0NDQ5LCA5MjMzMCwgOTIyMzgsIDAsIDc4MTksIDIzMjAsIAorICAgIDE5NDU4OSwgMzM5LCA0OTY4LCAxOTQ1OTAsIDEyMDM5OSwgODA3NSwgNTUyNzYsIDAsIDgwNDcsIDAsIDc4ODI3LCAxMjYzNCwgCisgICAgNDE1NDIsIDc4NzgwLCA3NDY2LCA2NzA1LCAxMjE3NCwgNDI2MTAsIDAsIDc0NDUyLCA5ODM3NjMsIDE1ODQsIDY2NjQ1LCAKKyAgICA2MDQ1LCA2NzI5LCAxMjA2NDAsIDY1MjE4LCAxMTU1OSwgMCwgNzgwNjIsIDc1MzcsIDAsIDExMzcwLCAwLCAxMDMzMCwgMCwgCisgICAgMTAzOTQsIDAsIDc0MTk0LCAwLCAxMjc5MjksIDk3ODAsIDAsIDEzMDkyLCAxOTQ1NzYsIDc3OTUwLCAxOTQ1NzgsIDcwNzQsIAorICAgIDkyNjQ4LCAxOTQ1NzksIDE5NDU4MiwgMTE0MTQsIDEyODg2OCwgMjUzMSwgMTMwMzQsIDAsIDAsIDQyMTEsIDEyNTksIAorICAgIDc1MTcsIDAsIDAsIDE5NDU2MSwgNDA5OTYsIDEzMDM3LCA3MDkyLCA2NDEsIDUyMTksIDk0MDM0LCAxOTQ1NjYsIDExMDY0LCAKKyAgICA0MTEyOSwgMCwgNDI4NTAsIDEzMDM1LCA5MDc1LCA5MjM4NywgNTQ2NiwgMTI4MTUzLCAwLCA2NDA5OCwgNjU3OTMsIDQ1MzUsIAorICAgIDE5NDU3MywgNDI3MSwgNzg0MTcsIDEyODM1NywgNjc2OSwgNDE0MTAsIDk4MzQ1MiwgNjQyNjIsIDY3NjcsIDQxNDA3LCAwLCAKKyAgICAwLCA2NzU1LCAxMTg4NjQsIDkwNDYsIDEyNzkzNCwgMTI2NjA4LCAwLCAwLCAwLCAwLCA2NzY3NSwgMCwgMCwgMCwgNjQzMzgsIAorICAgIDI1NjMsIDEzMDMzLCAyNDcsIDExODkxNSwgMCwgMTIzMzgsIDQ2NTEsIDY5ODk1LCAxMTI3MCwgMCwgMCwgMTE5MzMsIDAsIAorICAgIDAsIDQxOTAzLCA0MzQ0NywgMTEwMDEsIDAsIDQyMjU1LCAwLCA5MjY2MSwgNjk4MjEsIDQxOTA1LCAwLCAwLCAxMDc3NSwgCisgICAgOTc5MywgNTAwOSwgMCwgNDIyNjksIDY0NTg3LCA5ODMwNjMsIDQyNTM1LCA2OTgxMiwgNjQ1MjksIDQxNDA4LCA0Mjg1MywgCisgICAgMzg3NywgMTIwNzk1LCA0MjY3NCwgODE0NywgNDM1NjYsIDExOTAyMSwgOTgzNzc2LCAxMDIzNiwgNjU5MTgsIDQzNzgyLCAwLCAKKyAgICAwLCA2NDUwNiwgNjk2NTIsIDExODkyMSwgNDc0NywgMTI4MDU4LCA2OTg0NCwgNDMyMDAsIDU4MzIsIDAsIDAsIDUxNDEsIAorICAgIDQyNjAwLCAwLCA0MzIwMywgMCwgOTgzNzk5LCA0MzI4NiwgMCwgMTI4MjExLCA0Mzc3OCwgMCwgNDEzMDUsIDc4Nzc2LCAKKyAgICA0Mzc4MSwgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIDAsIDAsIDYwNTksIDEyNjk4NSwgNTUyMzUsIDAsIDg1MzUsIAorICAgIDAsIDY1MTk2LCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMTIwNDgxLCAxMjA3ODYsIDQyMjMzLCA2NDE0MCwgOTk0NiwgCisgICAgNjM4ODUsIDE5NDc5MiwgMTE4MjIsIDAsIDQzMTg5LCA5ODM4OTgsIDAsIDE3ODgsIDE1NzksIDEyMDQ4MiwgNzEyOTgsIDAsIAorICAgIDAsIDAsIDkwMjgsIDExOTU3MSwgNjkyMzQsIDk0MDU1LCAwLCAxMjg1LCA2NDg4MiwgNDEyNDIsIDcwMDg2LCAwLCAxMjY0MCwgCisgICAgMCwgNzQwMSwgMCwgMTI2MjUsIDY4MTk4LCAwLCA3MDA4MiwgMzk0MCwgNDE1OTcsIDQzNzU0LCAzMzk2LCAxMjY0MiwgCisgICAgODY2NSwgMCwgMCwgMTI2MzAsIDE2NTMsIDkxNzgxNSwgMTAxNTMsIDAsIDYxNjYsIDEyMDUxNiwgMTE4OTg5LCAwLCA4ODE1LCAKKyAgICA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIDExOTMxNywgMTE5MzE4LCAyMTQyLCA2ODQ1NCwgNDI0ODUsIAorICAgIDk0MDEyLCA3ODc4LCA4MjExLCA0MjI5MywgNjQzNzcsIDAsIDkyNjQzLCAwLCAxOTQ2NzMsIDEyMDMyLCAwLCA5NzI1LCAwLCAKKyAgICA3ODQzMSwgNTI2MywgMTI4MTgsIDc4NDMwLCA0MTkzOSwgMTAwMjIsIDY1Mzg3LCA3ODQxOSwgNDI3NzcsIDEwMTM5LCA5ODAsIAorICAgIDQzNjk4LCA2NTM4NiwgMjIwOCwgMCwgNDM3MDEsIDQzMTk4LCA3MTg0LCAxMjA2NzMsIDE5NDc5NywgOTE3ODE5LCAxMDA4NSwgCisgICAgMTE5OTkyLCAwLCAxMTk5OTMsIDY2MzQsIDkyMzczLCAwLCAxMTkzMjMsIDgwNzIsIDExOTMyMSwgNDM3MDAsIDAsIDg4NzIsIAorICAgIDc3ODMsIDkxNzk5MiwgMTIzOTgsIDgyMzcsIDAsIDAsIDEyMzk1LCAwLCAxMjY5NzcsIDEyMDU2NSwgOTkxNCwgMjIxNywgCisgICAgOTE3ODU0LCA3Mzk3NSwgNjM2NywgNjM1MSwgNjY2ODgsIDAsIDc4MTA3LCAwLCA2NDczNSwgNDEyNDMsIDkyMTk5LCA3ODA4LCAKKyAgICAxODI5LCAwLCA0MTkzNywgNDM1OCwgNDMyNzIsIDYzNTMsIDAsIDAsIDEyMDQyMiwgMCwgMTcxMCwgMCwgMCwgNjU2MDcsIDAsIAorICAgIDQ5LCA2NjI3LCAwLCA2MjU4LCAxMDY4MywgNzg2NzIsIDk3NDEsIDc4MzI5LCA1NjQ5LCA3ODQ0MSwgNDM0NDMsIDY0NDE4LCAKKyAgICAxNjQzLCA2NTIxMywgODQwNSwgMzQ3MCwgMTI4MjI1LCAxMzIxMywgNDI0NTIsIDc4MzMxLCAxMjA2NjQsIDc4NDQ1LCAwLCAKKyAgICAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgNDExMzIsIDY1Njc1LCAxMDgwLCAxMjAwMDIsIDk4ODYsIAorICAgIDU1MjI1LCAxMTAxLCA2ODQwNCwgMTIzMDksIDU1MjI3LCAwLCAxMjYzMiwgMTA4NiwgMTg2OSwgNzg2ODUsIDc2ODAsIDAsIAorICAgIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAxMDkxLCAxMjYzOCwgNzk3NywgNDUwMSwgNDEwOTksIDAsIAorICAgIDY2MzA5LCAwLCAwLCAxNDk0LCA5ODMxNDYsIDEyNjYxMywgMCwgMTE2OTMsIDEyNjUxMywgMTA0OTQsIDkyNjU1LCA2NTg3MiwgCisgICAgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgNzM3OTQsIDAsIDgwMjIsIDAsIDEyMDQ2MiwgNzQxMDYsIAorICAgIDEyNDEzLCA5NDA2OSwgOTE3OTk0LCA5MTc5OTMsIDkxNzk5NSwgNTU3MCwgMTg4MSwgNzIxMCwgMCwgMTAxMiwgNDM3NTIsIAorICAgIDAsIDEyMDcwOSwgNzIwOCwgNjY0NDIsIDU1NjksIDk4MzI0MiwgNDIzMzksIDAsIDYwNjMsIDAsIDc4MzgzLCAxMTk1OTQsIAorICAgIDYwNTMsIDY1NjAyLCAwLCA5MjIwMSwgNjQ3MjcsIDkxNjAsIDE5NDgyNywgMCwgMCwgOTIxODAsIDEwNTAzLCAxMTg4MTAsIAorICAgIDYwNTUsIDM4NzAsIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDkyMjA0LCAKKyAgICA5ODMxMTYsIDAsIDEyMDExOSwgNzgzMzMsIDEyMDExNywgMTIwMTE4LCAxMjAwOTksIDEyMDEwMCwgNjUwODcsIDU1NzEsIAorICAgIDM2NzQsIDk3NDAsIDkxMjEsIDU1NjgsIDEyMDEwNywgMTIwMTA4LCA0MjA4NSwgMTAxMDcsIDQyMTU5LCA0Mjg3MCwgCisgICAgMTIwMTAxLCA1ODksIDcwNTAsIDk4MzgwMCwgNDMyODEsIDEwMjMzLCA0MTI2MywgNjYyNTEsIDY1NzI5LCA2NjI1MywgCisgICAgMTI2NDk3LCA3NDA5OSwgNDI2NDUsIDAsIDE5NDgxNSwgODU4MywgMCwgNTg0NywgNjkyOCwgMTI4MDc0LCAwLCAwLCAwLCAwLCAKKyAgICA2NjU5MiwgMTIyMDQsIDkxNzk2MiwgMTk5NjYsIDc3ODU2LCA0MjU2MSwgMTIwNjI2LCA5ODMyNTEsIDAsIDgxMjAsIAorICAgIDEyMDcwMSwgMCwgMCwgMTI4MDEyLCA0MTA2MywgMCwgMTA2NjQsIDAsIDgzNjksIDAsIDQ1NTEsIDE5NDk2NCwgMzM2OSwgMCwgCisgICAgMCwgOTY3MywgNjYzMzQsIDY1NTgwLCAxMDQ3OCwgMTE4OTYwLCAxMjUxNywgNTU3LCA5NDU3LCAxMjAzNCwgOTgzNjcxLCAKKyAgICA2MzU1LCAxMjUxOSwgNDEwMDQsIDAsIDE5NTAyNSwgNzQwOTQsIDAsIDAsIDc3OTcwLCA5ODM1NjAsIDAsIDEyODE3NSwgCisgICAgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgNjkyMywgOTIyODEsIDEwNDQxLCA3MzgzNiwgMCwgCisgICAgNDM5OTAsIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIDE2MTgsIDAsIDEyMDQ3NCwgOTY0NSwgMTA0MzAsIAorICAgIDkxNzk1OSwgNTg1MywgMTMwNjMsIDEwMzYzLCAwLCAxMjk1NiwgMTI4MTY5LCAxMjA3MjksIDExMzE0LCA5MTc1ODIsIAorICAgIDEyMDYwLCAwLCA3ODM5MiwgMTI4MjYsIDYzMjksIDAsIDEwNTE0LCA2NTUxNywgNzQzOTUsIDI3MDcsIDgzMDksIDAsIAorICAgIDEyNzA1NCwgNzgzOTgsIDQzNTcwLCAyNjk3LCA0MzQyMCwgNzgzOTYsIDEyNzA1NywgMjY5NSwgNDIxNzEsIDAsIDAsIDAsIAorICAgIDY3NjE3LCAxMTg5NzEsIDAsIDI2OTMsIDEyMTI1LCAxMjc2NiwgMCwgMTE2NCwgMTI4ODE3LCAwLCA0MTkxOCwgOTgzMTY4LCAKKyAgICAxMjc1NDIsIDg2ODcsIDY2MDA5LCAxMjE3OCwgNzA1MywgMTI4MDAxLCA3NDY5LCAwLCA1MjQ4LCAxMjIxOCwgMTIwNTM4LCAKKyAgICA2NDI3LCA0Mjg4NCwgNDExMjMsIDAsIDAsIDQyODczLCA0MTEyNiwgOTk5MSwgNDExMjgsIDc0MzcxLCAxMjcwMzEsIDAsIAorICAgIDk4NzMsIDAsIDQyODc3LCA3OTk0LCA2NDc2MiwgMjA1MywgNDI4NDMsIDY1OTEsIDkzNDAsIDAsIDE1ODksIDAsIDI5NiwgCisgICAgNzQ0MzgsIDc4ODUyLCAwLCA2Nzg0MSwgNzQzNzAsIDAsIDg5MjIsIDEyODA2OCwgNzQ2MDAsIDEyNzAwLCA3NDgzNiwgMCwgCisgICAgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAxMzI2MiwgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAKKyAgICAxMjUyLCAwLCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgNTI5NSwgOTE3NTY5LCA3NDExNCwgMTIyMywgMTY0MiwgCisgICAgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIDQxNDEzLCAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIAorICAgIDQxNDI1LCAxMjcwMjksIDc4NDEyLCA3NDQ1MCwgOTcyOCwgMzg0NiwgODA3MCwgNjE1MCwgNjYzNiwgNDM3MCwgMCwgMCwgCisgICAgNzQxNzgsIDc0NTg3LCA3NDExNywgMCwgMCwgMCwgNDk4NiwgMTIxODksIDAsIDY3NjQ4LCAxMjA0OTksIDk0MDAxLCA0MjU3LCAKKyAgICAxMjEwNCwgNzc5NDIsIDYyMjAsIDkwMDQsIDY1NTYxLCAwLCA3Nzk0OSwgMCwgNjgxMzUsIDkxNzU3NiwgNzc5NDYsIDAsIAorICAgIDY5Njc5LCA2OTY4NCwgOTg5MCwgNzg1NjEsIDEyOTcxLCA3ODQ1MywgOTI1NTYsIDczODk4LCAxMTk3OSwgNzAwNTEsIAorICAgIDExODkwMCwgOTE3ODk0LCAwLCA5NjM1LCAxMjYwMCwgODg3MSwgMCwgMCwgMCwgNjQ2OSwgNzQyMjcsIDAsIDY1MzA0LCAKKyAgICA0Njc5LCAxMDIzMCwgNjQzMDAsIDY0ODY3LCAzNDI3LCA0MjQwLCAwLCAwLCAwLCAwLCA0MjkxNiwgMCwgMCwgMCwgNzI4MiwgCisgICAgNzg3MjgsIDY1NzMzLCA0NDQ1LCAxMjcxMzgsIDEyODA4MiwgMzQ5NCwgNzQ2MDYsIDY1NTUsIDAsIDc3OTc2LCAwLCAwLCAKKyAgICA3ODU2NiwgMCwgOTgzMTg5LCA2NTg5OCwgOTgzMjQ0LCA2NTMxMiwgNTQ0NywgMCwgMTI4OTUsIDY1NTkzLCA0MDEwLCAwLCAKKyAgICA0MTEwNiwgMCwgNjQ0NDgsIDAsIDQxMTA1LCAwLCA2NTgyMCwgNjIzMiwgMCwgMTI4MjgwLCAwLCA0MzYwOCwgMTE5MDkxLCAKKyAgICAwLCA2NTM4LCA0MzM1LCA3ODM2NCwgMzk0MSwgNDExMjIsIDExMDYxLCA3ODM2MywgNjQ4OTIsIDkxMTMsIDE5NTQsIAorICAgIDEyMTU1LCA5ODM2NzQsIDQyODc4LCAxMTUwMCwgMCwgMCwgNzQ1NzgsIDAsIDY1ODMyLCAwLCAwLCAwLCA3Nzk3NSwgCisgICAgMTE5MjMwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDkyMzA3LCAwLCAwLCA1MTMzLCAwLCAwLCA5NTAwLCAKKyAgICAwLCA0OTU3LCA2NDc0MSwgMjQyMiwgMjIxMiwgOTgzMDgwLCAwLCAwLCAyNDk2LCAxMTUxNiwgOTQ0LCAxMTg4NTEsIDM4OTAsIAorICAgIDEyMTY4LCAxNDM4LCAwLCA5ODMxMTcsIDAsIDQxOTQ3LCAxMjIwLCAxMjA4MjgsIDEyODU1NSwgMCwgMCwgMTU3MSwgCisgICAgNDI2MzAsIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgNDE5ODAsIDk4Mzk0NCwgMCwgNzgxMjAsIAorICAgIDg4NzcsIDI2OSwgNDQyOSwgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgNzg2NTcsIDQxMTIwLCA2NTEyMSwgMTA4NjIsIAorICAgIDYwNjAsIDQxMTE5LCA0MTQxNiwgNzQzNTUsIDQxNzMsIDAsIDAsIDAsIDE5MDYsIDkxNzk4NiwgMTE1MzIsIDc0MDczLCAKKyAgICAxMjczMzgsIDAsIDE5ODUsIDYyOTYsIDk1ODIsIDkxNzg5NSwgNjQyODcsIDAsIDc4MTE1LCAxMTQyOCwgMTczMCwgMjQ1NywgCisgICAgOTE3ODA4LCAxOTkxOCwgMTA0NjksIDAsIDAsIDc3MDMsIDg4NDAsIDgwMzUsIDAsIDAsIDkyMjMwLCAwLCA2MTI5LCAwLCAKKyAgICAxMjg1MjgsIDEyODI2OCwgMCwgNzg3NCwgODY4MSwgMTE5MDkyLCAwLCAxMzEzNiwgMCwgMCwgNzAxMDIsIDYzODg2LCAKKyAgICAxMTg4ODEsIDk2MDUsIDcxMzA4LCAxMzIyMCwgMTI4Nzc2LCAxMjAyNzQsIDU1MTQsIDAsIDkyMjgsIDAsIDAsIDAsIDUyNDAsIAorICAgIDk4MTEsIDEwMDEyLCAzMDk2LCAwLCAwLCA5ODMzNTEsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgOTUwMSwgMCwgMTI3MiwgCisgICAgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAwLCA5MTc4MTIsIDAsIAorICAgIDExODg5OSwgMTIxOTMsIDAsIDAsIDAsIDAsIDk4MzM1MywgMTk5MzUsIDAsIDkyMTYyLCA2OTY3NiwgMCwgMCwgMCwgNTI3NSwgCisgICAgMCwgMCwgODYzNywgMCwgMCwgMzc4OSwgNjM4ODAsIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCA2NjMzMiwgNjY2MDMsIAorICAgIDEyODEzOCwgMjQyNiwgMTIwNDIsIDkyMTk0LCA5ODM5MTEsIDk1MzcsIDM5NjEsIDEyMTE1LCA3Nzk1MywgMjYwNSwgNDUwMCwgCisgICAgNjQ1NjEsIDU1MjI0LCA0OTgxLCAwLCAwLCA2Mzg3NiwgMTE2NjcsIDQyNjg2LCA3Nzk3MywgNDIzNjIsIDY0Njg2LCA0NDk5LCAKKyAgICA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgNjgyMTUsIDkxNzkwNCwgODU0MSwgNzgyOTgsIDcwMDM0LCA0MTg2NiwgMCwgCisgICAgMCwgMCwgMCwgNjk5MjQsIDQzNTU1LCAyODIzLCA5NTU5LCAxMDA2MCwgNDE5NDAsIDgyOTksIDQxOTQ1LCA3MTMyLCAKKyAgICA0MTk0MSwgMzMwOCwgNzE5MCwgNjQ4ODAsIDg2MTQsIDY1MjIwLCA0MTQ5MywgMCwgNDE2OTksIDEwNzYyLCA0Mzc4MCwgCisgICAgMTI5OTksIDAsIDAsIDgxMDYsIDQxMjgsIDAsIDYyNzQsIDQ0OTQsIDAsIDQwMTIsIDEwMzk1LCA5ODM1OTEsIDQzNjMzLCAKKyAgICA2NTQ0NywgMTI2NTExLCAwLCAxMTAwNCwgNjk1LCA3MzksIDY5NiwgNzYxMSwgMCwgNDI3NTUsIDc0ODAyLCA5MjI3LCAKKyAgICA3NTA2LCA3NTEwLCA2OTkzNywgNjkxLCA3MzgsIDc1MTEsIDc1MTIsIDc1MTUsIDM4NjgsIDY4OCwgNDE4NDcsIDY5MCwgCisgICAgMjU0OCwgNzM3LCA5NzQsIDgwMDMsIDc0MDYsIDkxNzkxMSwgMCwgMTI4Njg4LCAzOTg1LCA5MTc5MTIsIDY1ODYwLCAKKyAgICA2MzkyMSwgNzA1MSwgNjk3NzcsIDQ2ODIsIDkxNzgwNSwgMTI4MDksIDY0MDYsIDQ2ODUsIDkyNTA1LCAxMDg3OSwgMTAzNDcsIAorICAgIDQ2ODAsIDYzNDEsIDAsIDM4NTEsIDgxMzIsIDc0MzI1LCAwLCA5MTc5MDcsIDAsIDQxOTU4LCAxMTkxNzYsIDkxNzkwOCwgMCwgCisgICAgMCwgNDI2NTcsIDkyNDY4LCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCA0MzU2OCwgOTgzMTc1LCAxMTcxNywgNzY1MCwgCisgICAgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAxMjgxNTUsIDc2NDYsIDAsIDc4MDgyLCA5NjUxLCAwLCAzODkxLCAwLCAwLCAKKyAgICAyMzM3LCAxNzM1LCA3NDMyNCwgNjc4NjAsIDIzNjMsIDk4MzEzNSwgMCwgNDM1NjEsIDAsIDAsIDc0MTQ2LCAxODYwLCAKKyAgICA3NDk1LCA3NTgwLCA1ODEyLCA3NDk3LCA3NTg0LCAxMTkxNDAsIDEyNzg1MywgMCwgMTIwMzQ3LCA3NzI3LCAwLCA4NDk4LCAKKyAgICA2OTgxOCwgODk0OSwgMzA2NSwgNDI3MTksIDcxMzUsIDE1NjksIDkyMzc1LCAxMjUzNCwgMTIxMjQsIDc2OTAsIDAsIAorICAgIDEyNTMzLCA5ODM4NzksIDY0MTgsIDQ1NDMsIDc4MDg2LCA2OTY5LCAwLCA3NDgwMCwgMCwgNjc5NzQsIDExOTgwLCAKKyAgICAxMjg2NTAsIDk4MzgwMSwgNjM4OTQsIDEyMDc2MCwgMTIyODIsIDY2MTkyLCAwLCA3NDU5MiwgODg1MCwgNzQyNzUsIDkyMzgsIAorICAgIDEwNjE3LCA5MTc1NDUsIDAsIDkyNjI1LCAwLCAxMjc5MSwgMCwgMCwgMTI3ODQzLCA0NDQ3LCA3MzczMiwgMTI3OTMsIAorICAgIDEyOTAwLCA5MjM3NywgMTA5NTAsIDAsIDc4MDg3LCAxMjc5MCwgNDE0MDAsIDExOTEyOCwgNjY2MDcsIDEyNzkyLCA0MjIzMiwgCisgICAgMTk0OTM4LCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCA0MTMxMCwgOTgzODY5LCA0MTM5OSwgMCwgMCwgNTUyNTgsIDAsIAorICAgIDEyNjkwLCAwLCAwLCA0MzY3MiwgMTI3ODQwLCA0MTY1MiwgMjk3NCwgOTAxMCwgMTEzMTUsIDAsIDI3OCwgMCwgNDE0MDUsIAorICAgIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIDQzNTUzLCAwLCA2NzkwMywgMCwgCisgICAgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgOTgzMTg2LCA3NzgyOSwgNzEzNjAsIDAsIDY0MTMsIAorICAgIDY1NTAsIDAsIDE5NDAsIDAsIDQzNjM3LCAyMjAsIDY1MTkzLCA0MzU1MSwgMTA2NzgsIDEwMDQ0LCAxMjgzMjIsIDAsIDAsIAorICAgIDY4NjU5LCA2NDAzLCA1NzA3LCAxMDM5MywgMTI3NTMyLCAwLCA2NjYxNCwgMCwgMCwgMCwgMTAyOTcsIDAsIDM3NDIsIDAsIAorICAgIDM5NTksIDAsIDAsIDAsIDI0NjcsIDAsIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCAwLCA0Mzc1OCwgNDE4MiwgNzgxNzEsIAorICAgIDQ2NzYsIDEyMDUwMSwgMCwgMCwgMjUxMCwgMCwgMTAyMDgsIDc4MTY4LCA5MjM2MSwgMTE1NDAsIDQzNTQ2LCA2NjkyLCAwLCAKKyAgICA0MTA2MCwgMCwgNDY2OCwgOTA4MywgMCwgMCwgNzgxNDQsIDE1NTksIDYzODMxLCA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAKKyAgICAwLCA3NDA3MCwgMCwgMCwgMzY1LCAxMjA1NiwgNDMwMjcsIDEyMDQyMywgNDE3MTYsIDEyODIzNiwgMCwgMTIwNDcyLCAKKyAgICA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNzM4MjcsIDU0NCwgMTIwNDUsIDYyNzgsIDAsIDU1MTUsIDAsIDAsIAorICAgIDk4MzA1MSwgNjUzMzksIDQzMjIxLCAyMjExLCAwLCA1NTE3LCAwLCAwLCA3NDg0MSwgNjc4ODQsIDAsIDY3ODkwLCA2Nzg4NSwgCisgICAgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDAsIDAsIDY3ODc5LCAxMjcxODgsIDE5MDIsIDY3ODg3LCA5NjM4LCAKKyAgICAxMjk3NiwgMTI2NTQ2LCAxMjQ4MywgMTIzNjgsIDQxNzY5LCA0MjcyNiwgNDE3NjUsIDczNjEsIDY2NjcsIDY3ODc0LCAKKyAgICA3NTU2LCA2Nzg3OCwgNzQzNTEsIDExMjY0LCA5ODksIDQyNjc3LCA2Nzg4OSwgMCwgMTMxMSwgOTE3OTY2LCA0MzI2LCAKKyAgICAxMTAwMCwgNjM4MjQsIDEzMDY4LCAxMDkzMiwgMTI4ODgwLCA2OTE3LCA3ODE1NSwgMCwgOTQ5LCA3ODE2MiwgMCwgNjE0OCwgCisgICAgODYwNSwgNDIyNTMsIDc4MTc3LCAwLCAwLCA0MjcxNSwgMCwgMCwgMCwgNjM4NzEsIDAsIDQxNzk2LCAxMjY5LCA2NTMwLCAwLCAKKyAgICA2NTA1NywgMCwgNTE0NCwgMTIyMjEsIDQyNzE2LCAwLCA0NDMxLCA0MzMxLCA5ODM3MjksIDEyODY3NSwgNDE4MzQsIDUyNzksIAorICAgIDAsIDEwMzM2LCA4MzEyLCAwLCA0MjcwMSwgMTI4ODI1LCAwLCA3ODE2NSwgNjYwMzYsIDAsIDAsIDY0MjgsIDQyMjcwLCAwLCAKKyAgICA5ODM1OTYsIDQzMDU5LCA0MjY2NiwgNTI1NiwgMTA2NywgMjU1LCAxMjEzMSwgOTgzNzIyLCA5NDkzLCA5ODM5NjgsIAorICAgIDQxMDE0LCAxMTc5MywgMTk0OTIwLCAwLCA3NDM5NCwgNDM0NjAsIDEwNjUzLCA0MjcyMywgOTgzODU0LCAxMTk2MzIsIDAsIAorICAgIDY1NjAsIDcwMTYsIDc0Mjc0LCA5ODM2MTUsIDQzNTU2LCAzOTI5LCA2Nzk3NywgNjYxNCwgMjc2OCwgOTI1MDQsIDk3NDYsIAorICAgIDUxMzUsIDExODExLCAxMjc5NiwgMTE5NTMsIDAsIDY5NzYxLCA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgCisgICAgNTE2OCwgNzg1NTIsIDEyNzc1MywgNzQzMTUsIDc0MzYxLCA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgOTIyMzIsIDAsIAorICAgIDE5NDc1MCwgNzM5MiwgODIzMCwgOTM2NSwgMCwgMCwgOTgzNjA3LCAwLCAwLCA0MDQxLCAwLCAyMzU3LCA0MzI0MCwgCisgICAgMTI3ODYsIDIyOSwgMTE5ODg1LCAxMTk4ODQsIDQ0MDA0LCA3MTQyLCAxMTk4ODEsIDEyMzUwLCA2NTU1NCwgMTE5ODgyLCAKKyAgICAxMTk4NzcsIDExOTg3NiwgMTI3ODUsIDYzODYzLCA0Mzc5NSwgNzc3MCwgMTA3MTIsIDY0ODUzLCAxMjY4NiwgMTE4OTE2LCAKKyAgICA0MjM3NSwgMCwgMTI3MjM4LCA2NjM1MiwgMTA0NzAsIDAsIDExMDU5LCAxMDc5MSwgOTE3OTQ0LCA0NTAsIDExOTMyOCwgMCwgCisgICAgMTA0MzIsIDEyMDk3LCA1NDUwLCA2NDY5MSwgMTIzMywgMCwgNDQwMDksIDc4Mjg0LCA2NjMzOCwgMCwgMCwgMTgzOSwgCisgICAgMTE4Nzk5LCA5ODMyMTksIDEwOTI3LCAxNzAxLCA5ODM2NjQsIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgCisgICAgMTE5ODY1LCA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCA3MTQzLCA5MjQ5MywgNzg2NzcsIDAsIDkyNDI5LCA3ODE3NCwgCisgICAgNjY0MzIsIDg4MDEsIDMwNTMsIDQzNDAsIDk4MzA0NCwgMCwgNjU4MTIsIDkxNzgzMSwgMCwgNDE4MjQsIDY3OTg1LCAKKyAgICAxMjAyMDMsIDE5NDgwMCwgMTk0ODAzLCA0MjcwMCwgMTk0ODA1LCAxMjc5ODAsIDE5NDgwNywgNzg2NzYsIDkyMzU2LCAKKyAgICAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIDIzMTQsIDQzNjAyLCA3ODgyNiwgMTE5MzI1LCAxOTQ4MTEsIDQyNDM5LCAKKyAgICA2NDYzOCwgNDIzMjcsIDQzNTI4LCA0NDg5LCA3MTMzMSwgMCwgMTk0NzkzLCAxOTEyLCA0MjM4NSwgMTAzMDYsIDEwMzcwLCAKKyAgICAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIDE2MzUsIDc4ODIxLCAxNDEwLCA5MjY3MSwgOTgzMjUwLCAxMTg4NzgsIAorICAgIDAsIDAsIDk5MTksIDEyMDUyOCwgNTU5LCAxMjgxNTcsIDQxODI1LCAxMjc5NzUsIDc4MTg4LCA0ODkyLCA3NDAxNiwgCisgICAgMTk0NzgxLCA2NTQyLCA0MTk1NywgMTI4ODY1LCA1Nzc3LCAwLCA3NTksIDY1NzQ5LCAyMDc5LCA2NTI0OCwgMTI3ODgsIAorICAgIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAwLCAwLCAxMjY1NzMsIDM2NjgsIDY1NzU0LCA0MzU2MCwgMTIyMjYsIAorICAgIDY3OTkxLCA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgMTk0Nzg1LCAxOTQ3ODgsIDQzNjE4LCA2NTc0NywgMTA5MzcsIAorICAgIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCA5MjQzNiwgODkyMSwgOTk1MiwgMCwgMCwgNDI3MTQsIDk5NTEsIDQzNDA5LCAKKyAgICAxOTQ3NzAsIDI5NDksIDY2MDEyLCAxOTQ3NzUsIDE5NDc3NCwgMjk1OCwgNjgzNTksIDQxODIwLCAyMzAwLCAyMzk1LCAKKyAgICAxMjg1NjMsIDk5NzYsIDEyMDA0MywgMTIwMDUwLCAxMjAwNTgsIDY4MjIwLCAxMjgxNDMsIDQyODA5LCA0MjgwNywgMCwgCisgICAgMTIwMDQ2LCAxMDE5OCwgNDE1MCwgNjQzNzEsIDgzMTgsIDQxNzkwLCA2Nzk3NiwgNDE4OTgsIDIzNjAsIDQxNzk0LCAKKyAgICA5MTc5NDIsIDcxMzE0LCAxMjc4MTgsIDAsIDAsIDI0MTgsIDk4MzA5OCwgMjQxMSwgMTEzMzYsIDc5OSwgNjM4MjMsIAorICAgIDEwMjc2LCAxMDMwOCwgMTAzNzIsIDkxNzU0MSwgNDE3NzIsIDQyODEzLCAyMzE3LCAxMDI2MCwgMTE4OTgwLCA1NTI4NCwgCisgICAgOTIyMDMsIDAsIDEwMzg0LCA5ODMyMjAsIDAsIDAsIDc3NTMsIDIzNTEsIDY2NTUsIDY0NDg5LCA2OTkzMSwgMCwgNzc4NzIsIAorICAgIDQ0NDMsIDQyNzc5LCAyMzAsIDAsIDAsIDQzNTQ5LCA0ODU1LCA0MjE1MCwgNjU3MzksIDU0NDEsIDQxODk2LCAxMDI4OCwgCisgICAgMTAzMjAsIDAsIDg1NSwgNzA0NiwgNjEwOSwgNjUwNDUsIDYzODM5LCA3ODE5OCwgMjA0OSwgMTAwOTgsIDAsIDc0MTQ1LCAKKyAgICAxMjc5NDMsIDEwMjY0LCAxMDI4MCwgOTE4NCwgMTAzNzYsIDcwMTMsIDQ0NjcsIDAsIDAsIDAsIDQxODg3LCAwLCA0ODYyLCAKKyAgICA5NzM1LCA2NTM3LCAxMjA1OTEsIDc0Mjg2LCAzOTE0LCA5MjE3OCwgOTM5NzYsIDkwNjUsIDEyOTYxLCAwLCAwLCA5MjI1MywgCisgICAgMCwgMjg5LCAwLCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDczODkzLCA0MjcyNCwgMCwgCisgICAgNDY4OCwgMTIwNDU0LCAwLCAwLCA2Nzk5NCwgODIzOCwgMzExMCwgMTIwMTYyLCA5ODM5MDgsIDEyMDE2MywgNjUyOCwgCisgICAgMTI3NTUzLCA0MzAzNSwgNjk4OTgsIDIxOCwgMCwgMTUyMCwgMCwgNDc4NiwgMCwgNDMyMjUsIDQ2MDIsIDAsIDc4MTY3LCAKKyAgICAxMDA4OCwgNjU0OCwgMCwgMTIwMTU2LCA0Mzk3OCwgODk4OCwgODg4OCwgMCwgMCwgMCwgMCwgMTA2NjYsIDAsIDczOTAyLCAKKyAgICA2OTc0MCwgMCwgMCwgOTk3NSwgMTI4MDM5LCAxMTk5MDIsIDQ2ODksIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIDc0NDQxLCAKKyAgICA3ODgxMCwgMCwgMCwgNjc5ODcsIDAsIDAsIDAsIDY3OTg5LCAwLCAxMDA2NSwgODIwNywgMCwgOTI2MTMsIDEyODAxMSwgMCwgCisgICAgNjYyLCAwLCA5MjQ0LCAxOTQ4NjMsIDAsIDExOTI2MSwgOTgzNDI4LCAwLCAwLCAwLCA0MTkyOSwgMCwgMCwgNjY2NzQsIAorICAgIDQxOTI2LCAxMjA0MDgsIDEyMDQ0MywgMTA1MTMsIDY0NjM3LCAxOTQ4NjIsIDY4MDEzLCA1MiwgMTMxMTgsIDY0NzUsIDAsIAorICAgIDEyMDM0MSwgMTIwOTUsIDEwMjI1LCA0ODEyLCA5MjU3OCwgMCwgNjc5OTIsIDc0MDg1LCAwLCAzOTc4LCAwLCA5MTc5NDUsIAorICAgIDEyNzgyMywgMTE1ODIsIDEyMDc2MSwgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCA5Mzk2MSwgNjk3ODIsIDEyODU1NywgCisgICAgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIDEwMzY5LCAwLCAxNTg1LCA3MTkyLCAxMDI0OSwgNDIyLCAxNTAwLCAyMDM2LCA5ODYsIAorICAgIDE5NDg1OSwgNjQzOTQsIDU3ODEsIDU1OTksIDY0Mjk0LCAyNDk0LCAxMjA0NTAsIDQ4NjEsIDc0MDIxLCA2NDMzNCwgCisgICAgNzgyMDMsIDEyNzgwOCwgMCwgOTIyNjYsIDY1MTAyLCA4OTYxLCA2NTg0MiwgMTAyNDMsIDEwMjQ1LCA3NDE5MSwgMTIwNDEwLCAKKyAgICAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCA5MjY4MywgMCwgMjAyLCAxMjgyNDYsIDc0MTMxLCAxMjQyLCA2NTUxNCwgCisgICAgMCwgNjM5NDAsIDEyODcwNiwgNjQ1MzMsIDEyMDEyOSwgMCwgNjc4NDIsIDExOTkwLCA5MjQzMCwgNjM5MzksIDQzMzc1LCAKKyAgICA2NTQ0MCwgMjUwNCwgMCwgNzg2NzEsIDY0ODI5LCA5ODM5MTAsIDY5NDMsIDkxNzkzNCwgNTg1OSwgMCwgMjg1OCwgCisgICAgOTgzMzYxLCA3NDI5NCwgOTgzOTE0LCA2OTIzOSwgMCwgMTE5MDI3LCAxMjk5MiwgMjc1MywgMTkzNiwgNzAwNzgsIDkyNTc0LCAKICAgICAyNzUxLCAxMjY2MiwgMjc2MywgODk1MywgNjQ3MDEsIDEwNzMxLCAxMjkyMiwgNzA1MiwgOTE3ODM5LCAwLCAwLCAwLCAKICAgICA2MzkyMCwgNzQxMjgsIDI4NTYsIDExOTkxMCwgNDcsIDY5OTA4LCAxMjY5ODYsIDY1ODU4LCAwLCAwLCAwLCA3ODk5LCAwLCAKICAgICA4NDE3LCA0Mzc5OCwgNzA3MiwgMCwgMCwgNDAzMywgMTI4MTY0LCA0Mzk5MiwgMCwgMCwgMjEyLCA2NDYwMCwgMTkwMywgCkBAIC0xNzc5NywyMyArMTc4MTYsMjMgQEAKICAgICAxMjYyNCwgMCwgMTY3MywgNDgxMSwgOTIzODMsIDU5ODYsIDkzMzgsIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIAogICAgIDExOTU5OCwgOTgyMCwgMCwgMTIxODcsIDAsIDAsIDU5ODQsIDAsIDQzMzA4LCA0MzkzLCA2NzY1MCwgMCwgMCwgMCwgMCwgCiAgICAgNzQ4MjYsIDY0NzMzLCAwLCAwLCAzNDkxLCAwLCAwLCAxMjgyMTksIDM1MTQsIDY1NDg1LCAwLCA3NDkyLCAwLCA3NDYwNSwgCi0gICAgOTI0ODMsIDc1MTQsIDk4MzM1OSwgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIAorICAgIDkyNDgzLCA3NTE0LCA5ODMzNjcsIDAsIDE5NDczMSwgNzUwMiwgNzU4NywgNjgzNTMsIDAsIDAsIDYzOTI1LCAwLCA3NjEwLCAKICAgICAyMTksIDAsIDAsIDY5MiwgNDM1ODgsIDc0NDMzLCA0MTYzNSwgNDMyNDEsIDk2ODgsIDcxNDcsIDk1MzUsIDAsIDkzOTkxLCAKICAgICAwLCA2NDUzMCwgMCwgNjQ2MTAsIDExODA0LCAwLCA3MTQ5LCA3NDUzLCAwLCA4MDEzLCAwLCA5MjMwMSwgMCwgODg5NSwgCiAgICAgNTI1MywgNzAwMjUsIDU0NTgsIDAsIDI4NjYsIDAsIDEyNzg2MCwgNjUxMTEsIDY4NDMzLCA2NzAwLCAxMjA0ODQsIDAsIAotICAgIDEyMDU4MywgMCwgODk2MiwgNzc5NjAsIDk2NDEsIDQzNjk0LCA3MDU5LCA5ODM2NjgsIDAsIDk2MDQsIDc4NzAwLCA3NDQxLCAKLSAgICA2MzgyNiwgNjc5NzAsIDExODk0MSwgNjQzOTIsIDE5NDczNSwgOTgzNjc4LCAyODQ0LCA5ODM5MzIsIDQxOTc0LCAwLCAKLSAgICAxMjEzOSwgNjc5NzEsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAxOTQ3MzQsIDAsIDE5NDc2NSwgOTgzMjI3LCAKKyAgICAxMjA1ODMsIDAsIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgNzA1OSwgOTgzNjc3LCAwLCA5NjA0LCA3ODcwMCwgNzQ0MSwgCisgICAgNjM4MjYsIDY3OTcwLCAxMTg5NDEsIDY0MzkyLCAxOTQ3MzUsIDk4MzY4NywgMjg0NCwgOTgzOTQxLCA0MTk3NCwgMCwgCisgICAgMTIxMzksIDY3OTcxLCAwLCAwLCAzMzU4LCA2NTI5NSwgMCwgMzEwNCwgMTk0NzM0LCAwLCAxOTQ3NjUsIDk4MzIzMywgCiAgICAgNTMwOCwgMCwgMjkwLCAwLCAwLCAyODYyLCAyNzkyLCAxOTUwODgsIDk4MzA3MCwgMCwgMzI2OCwgNjY1OTEsIDAsIDY1NTIsIAogICAgIDQyMzY3LCA3MDM1LCAxMjA1NTgsIDAsIDAsIDE4MTQsIDAsIDEwMjQwLCA5MjMzOCwgNzQzMDUsIDAsIDc0NTI4LCA2NTkwMywgCiAgICAgMCwgNDI2NDYsIDc2MDYsIDI1OTEsIDI4MzcsIDQzNDEsIDc3OTU2LCA2NDQ4MiwgMTI3MzM3LCA4MTYzLCA2NTI3MCwgMCwgCiAgICAgNzc5MzIsIDAsIDkxMTIsIDc0NDMxLCA4NjMsIDk0OTAsIDExOTg5OCwgMTI4MzQ5LCA0MzMyMywgMTIwNTEzLCAxMTk4OTcsIAogICAgIDkwNzEsIDEyNzMzMywgMCwgMzY1NCwgNzc4OSwgOTYzNywgMCwgMjUzNSwgNjU1MDQsIDc2NTMsIDQwOTkzLCAxMTk4OTksIAotICAgIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCA5ODM4ODUsIDExMDA2LCAxMjkyNywgNzgwNywgODA3MywgMCwgMTA2MjksIDAsIAorICAgIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCA5ODM4OTQsIDExMDA2LCAxMjkyNywgNzgwNywgODA3MywgMCwgMTA2MjksIDAsIAogICAgIDc0MDg4LCAzMDU2LCAxMDgyMywgMTI4Nzk3LCAxMjczMjcsIDg3NjIsIDEwNTA4LCA2OTY4OSwgNzM3NzAsIDQzOTY5LCAKICAgICA0MzE5MywgMTA3MzcsIDM0NjMsIDk4MzA2NSwgMCwgNjY2MzMsIDg2OTUsIDQ4MTUsIDExMzIyLCA1ODExLCAxMjM0NSwgCiAgICAgNzA0OSwgMTE5OTExLCA1MTk1LCAxOTUwODEsIDAsIDY2NjM5LCAwLCAwLCAwLCAxMjgwNDEsIDAsIDkyMzg1LCAxMjYyLCAwLCAKLSAgICA2NTYxLCAxOTkzOSwgMCwgMCwgMTI4NTM1LCAxMTk5MDYsIDAsIDAsIDk4MzA5NywgMCwgOTgzNjU4LCAxMTk5MDcsIAorICAgIDY1NjEsIDE5OTM5LCAwLCAwLCAxMjg1MzUsIDExOTkwNiwgMCwgMCwgOTgzMDk3LCAwLCA5ODM2NjcsIDExOTkwNywgCiAgICAgNjQ2MTIsIDExOTkxLCAwLCAwLCAwLCAxNTAyLCA5MTc1NjgsIDAsIDkxMDcsIDEyNzMxNiwgNTcwMiwgMzY1NSwgNjc2NjEsIAogICAgIDg0MzAsIDAsIDc0MTMyLCAxMjA3NTgsIDAsIDc0MDU3LCA5NjAzLCAwLCA1MjU0LCAxMjA3NDIsIDc3MjQsIDc0Mzg4LCAKICAgICA2ODM3NSwgMTA3OTYsIDUxMjksIDAsIDAsIDU5MCwgNzU3OSwgNTYxNCwgNTg5MywgOTIyODAsIDExNzIwLCA5MjQ5NiwgCkBAIC0xNzgyNywxNyArMTc4NDYsMTcgQEAKICAgICAwLCA2NTU1OCwgNjU5NDYsIDgxMTMsIDcwODcsIDUyNTUsIDE3ODYsIDY2MSwgMCwgMCwgMCwgNzQ0MjMsIDcxMzQ1LCA1ODYsIAogICAgIDc0NDE0LCA2NDM1OSwgMTI2NywgMTI4MjY5LCA2NTQ2OCwgMCwgNjU3MzEsIDAsIDEyNzE3OSwgMzYyMSwgMTIwNDczLCAKICAgICA2NjY2NiwgNjQyMTEsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgMTEzODMsIDAsIDAsIDAsIDE3MTQsIAotICAgIDc0NDA2LCAxMjc4MzEsIDAsIDk4MzkxMiwgMCwgNjYyMjUsIDAsIDAsIDQyNjYwLCAxMTQzNiwgMjA3MCwgNjQsIDEyMDY5NCwgCisgICAgNzQ0MDYsIDEyNzgzMSwgMCwgOTgzOTIxLCAwLCA2NjIyNSwgMCwgMCwgNDI2NjAsIDExNDM2LCAyMDcwLCA2NCwgMTIwNjk0LCAKICAgICAwLCAxMDI5MSwgMTAzMjMsIDI4MjYsIDAsIDAsIDAsIDQyMDA4LCA5NzA4LCA0MjcxMCwgMCwgNDIwMTEsIDQxOTk5LCAKLSAgICA5MjE2NCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAwLCA5ODM5NjAsIDY1ODMzLCA3Nzg0OCwgMCwgCisgICAgOTIxNjQsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgOTgzOTY5LCA2NTgzMywgNzc4NDgsIDAsIAogICAgIDE3NjUsIDAsIDAsIDY1NTg4LCAwLCAwLCAwLCA4NDAxLCAwLCA0MjAxNCwgMCwgNzAzMCwgMTk0NzA0LCAxMDQ3OSwgCiAgICAgNjQ5NTksIDI4NTIsIDAsIDAsIDAsIDAsIDEyODU4NiwgOTE3OTUxLCA2OTYzLCAwLCAxMjY2NywgNjQ1NDAsIDc0Nzg2LCAKICAgICAxMDE0NywgMTI5MzUsIDEyNzU2OCwgMTI2NDgzLCAwLCAwLCAwLCA3ODc1NywgMCwgMCwgMCwgMCwgOTk5NCwgMTI0NjcsIAogICAgIDI4NjQsIDY0NzE5LCAxMTQ4LCAxMDQzNSwgMTE0NjIsIDQxNjc1LCA3MDg0LCAyNzY1LCAwLCA0MzM4MiwgMCwgMTIwNzE5LCAKICAgICAxMjgxODgsIDkyNTE2LCA2NjY2MiwgMCwgNzgxMzMsIDkzNjQsIDE5NDY4NSwgNzQ0MTYsIDAsIDAsIDc3OTg4LCAyNjMsIAotICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3MzMsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAorICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3NDIsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAogICAgIDcxNzcsIDcwMTA1LCAwLCAwLCAwLCA0MjYyLCAxMDI4NSwgMTA3MjIsIDQyMDIwLCAxMjY1NzUsIDY4MDYsIDY5OTIsIAotICAgIDQyMDE5LCAwLCA0MTI5MCwgOTgzNzA3LCA3NTAsIDAsIDcxMzA0LCAxMDE2MywgNjM5MTMsIDcxMzAwLCA3MDMyLCA1OTU0LCAKKyAgICA0MjAxOSwgMCwgNDEyOTAsIDk4MzcxNiwgNzUwLCAwLCA3MTMwNCwgMTAxNjMsIDYzOTEzLCA3MTMwMCwgNzAzMiwgNTk1NCwgCiAgICAgNjQ5MzEsIDQzMTQsIDAsIDE5OCwgNjg0NTMsIDczMCwgMTIwMDk0LCA2MzkwNywgNzc5OTMsIDc4ODkxLCAxMzE2NSwgCiAgICAgNzEwNywgNzQxNzEsIDQyODA0LCA2NzgsIDgyNDAsIDc4MDE1LCAxMjg3ODQsIDQxMzc4LCAxMTAwOCwgNjkzOCwgNzAwMjYsIAogICAgIDkyNjM3LCAyMDk3LCA2NjI0NiwgMTIwNTYwLCAwLCAwLCAwLCAzODkyLCA2ODYzMiwgNjk2NDIsIDY3MTIsIDY2MDQ1LCAKQEAgLTE3ODQ1LDMxICsxNzg2NCwzMSBAQAogICAgIDY5NjY5LCA0MzI1NCwgNzM4MzEsIDAsIDEwMjkzLCA1OTUyLCAxMjgxLCA0Mzc0NywgMCwgMCwgMTA2NzcsIDYwNCwgCiAgICAgNDEwOTcsIDkxODIsIDE4NTksIDAsIDkyNjAzLCAzNDI1LCAxMjc0ODgsIDAsIDI4MzYsIDAsIDAsIDk3MDcsIDAsIDQzMjAyLCAKICAgICAwLCAwLCA2NTE5OSwgMTczOCwgOTE3ODE4LCAxMjgxNTgsIDI4MzIsIDkyNzAyLCA5NjcwLCAxMjkzNywgMCwgNjYzNzQsIAotICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MTQsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAorICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MjMsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAogICAgIDEzMzEsIDAsIDAsIDAsIDEyNzA4LCAwLCA1MDkwLCA1MDg5LCAxMjc5NzcsIDAsIDExOTEwOSwgMCwgMTI4NjgxLCAzMTksIAogICAgIDExODg0NywgNDM0NzksIDk0NzcsIDAsIDAsIDUwODcsIDkyMzI1LCA3NjQwLCA5NiwgNTA4NiwgMCwgOTIzNzksIDAsIAogICAgIDUwODUsIDY0Mjg2LCA5MjY2NSwgMCwgNDE0MjIsIDAsIDExOTkwMSwgNDIzNTYsIDM3NzIsIDAsIDAsIDUwMTEsIDAsIDAsIAogICAgIDEyNjU4NywgMCwgMTI3MTY1LCAxMjcyNDEsIDY2NzcsIDc2MDEsIDAsIDU5MSwgNjQ0MTksIDExODk1MywgOTIyNjIsIDAsIAogICAgIDExODkyMywgNzAwODQsIDAsIDEwOTM5LCA2MTA2LCA2OTMzLCA0MTI3MSwgNjc2MCwgNzEzNDMsIDQ1MzQsIDQxMjcwLCAKICAgICAxMjg4NzYsIDAsIDY1NTc0LCAwLCA5MjI0LCA2OTg1MywgMzY3MSwgODk3NiwgMTI2NDc0LCAwLCA0MTI3NSwgNjM3MiwgCi0gICAgMTI4MDg0LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCA0MTI3MywgOTgzNzIxLCAwLCA2NzI4LCAwLCA5NzE1LCAwLCAKKyAgICAxMjgwODQsIDU1MjYxLCA3OTYzLCA2MzcxLCAwLCA1NjgsIDAsIDQxMjczLCA5ODM3MzAsIDAsIDY3MjgsIDAsIDk3MTUsIDAsIAogICAgIDgyNTgsIDExNzUzLCA3NDgyMCwgMCwgOTYwMiwgMTE4OTE5LCA0MiwgMCwgNDM2ODgsIDAsIDAsIDc0NTgsIDAsIDAsIAogICAgIDY1Mzg1LCAxMTk5MDAsIDAsIDExOTU4LCAwLCA5MTc4MjIsIDAsIDYyNTQsIDQyNzIxLCA2NjMzNiwgODA0NSwgMTE1NTAsIAogICAgIDAsIDAsIDk4MzU5NywgNDI4NTgsIDExNzg5LCA2NTg2OCwgNTU1NywgMTAxMzMsIDk3MzcsIDEzMTA5LCAwLCA5NDY3LCAKICAgICA1NTU4LCA4ODc4LCAxMjgxMzYsIDE5NTAzNiwgNzQ1MSwgNjcwNiwgMTAxNDYsIDAsIDkwODYsIDY0NTY2LCAwLCA2NDU4NCwgCiAgICAgNzQzNywgNzQ1NCwgMTI1OTQsIDEyODY5MCwgNjgzNjIsIDQ1NDYsIDc3MzEsIDAsIDcwMDQ4LCA3NDI0MywgMCwgMzgwNSwgCi0gICAgMCwgMTk0NTY1LCA0NDAwMSwgNDEwMDgsIDAsIDYzMDcsIDE5OTQ5LCA5ODM3ODEsIDc1NDQsIDk4MzA0NSwgNDM0NjksIDAsIAorICAgIDAsIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgOTgzNzkwLCA3NTQ0LCA5ODMwNDUsIDQzNDY5LCAwLCAKICAgICAwLCAxMDE1MiwgNjQ0MjIsIDY1MDkxLCAxMTkxMTMsIDc2MDIsIDY0NzI5LCAwLCA0MzUyMSwgMCwgNDIzMDIsIDQzNzExLCAKICAgICA0MzUyMywgNDE0NDcsIDU1NTksIDAsIDg3MDQsIDIzOTcsIDU1NTYsIDAsIDAsIDAsIDkwMTEsIDk2MzAsIDkyNjMzLCAwLCAKICAgICA5Mzk5OCwgNTUwNiwgMCwgMTkxMSwgNjY2NTIsIDAsIDk5NjEsIDg4NDUsIDY2Njk4LCAwLCAxMDc5MiwgODg4OSwgMCwgCi0gICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzNzk2LCA3NDM2NSwgNzU1MiwgMCwgMCwgCisgICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzODA1LCA3NDM2NSwgNzU1MiwgMCwgMCwgCiAgICAgNjUzODQsIDcyMjMsIDQ1NTksIDAsIDE5NTYsIDQzMTM4LCA3MDI0LCA2NTcyOCwgNjQ1MDEsIDEyMTAsIDE5NTA3NywgCi0gICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyODUsIAotICAgIDk4Mzc4MywgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCisgICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyOTMsIAorICAgIDk4Mzc5MiwgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCiAgICAgMTA5NDEsIDY1NzIxLCA2OTYyLCAwLCAwLCAxMTkzMjQsIDAsIDExMDE0LCAxMjc5NzIsIDg5NDIsIDEyMDAwLCA2OTIyNCwgCiAgICAgOTIyNjcsIDEyODUzNiwgMTE5NzQsIDkyMjEzLCA0Mjc3MiwgMTI3NTE4LCAxMTY1MCwgNTAxMywgOTI2NjMsIDEyNjU4MywgCi0gICAgNjYyMTAsIDExODkxNCwgNjYxMywgOTI0NzYsIDAsIDQzODE5LCA5ODM3NjEsIDAsIDY0NzE0LCAwLCAwLCAxMjE2MiwgCi0gICAgMTIxMjAsIDQzNDc2LCA5ODM3NTcsIDExMDI0LCA3NDgxMSwgNjYyMjgsIDEwNTYzLCAwLCAxMjcxOTYsIDQzNTIyLCAyNDYyLCAKKyAgICA2NjIxMCwgMTE4OTE0LCA2NjEzLCA5MjQ3NiwgMCwgNDM4MTksIDk4Mzc3MCwgMCwgNjQ3MTQsIDAsIDAsIDEyMTYyLCAKKyAgICAxMjEyMCwgNDM0NzYsIDk4Mzc2NiwgMTEwMjQsIDc0ODExLCA2NjIyOCwgMTA1NjMsIDAsIDEyNzE5NiwgNDM1MjIsIDI0NjIsIAogICAgIDAsIDE4MzcsIDAsIDYzOTcyLCA2OTU3LCAwLCAxMjA1NTksIDQ5NTIsIDY1NzE4LCA2NTgyNywgNTUwNCwgNjU3MjAsIAogICAgIDY1NzE0LCA2NTcxNSwgNjU3MTYsIDAsIDEyNzAwNSwgMTI3MTE5LCAzMTA5LCA2Mzk3NSwgNzQwMjgsIDAsIDgxMDcsIAogICAgIDExOTIzNCwgMTEyNywgNDU1LCAwLCA2Mzk2OCwgMTI3OTI0LCAzNDgzLCAxMTk1OTMsIDE5ODksIDAsIDY5Njc4LCA5MTA0LCAKQEAgLTE3ODgyLDcgKzE3OTAxLDcgQEAKICAgICA0MTg2OSwgMTI2MTksIDAsIDEwMTU0LCA5ODMwNDMsIDc0NDM5LCAyMDM5LCAwLCA3NDQ2LCAxNjg0LCA2Mzk3OSwgMTA5NzQsIAogICAgIDQ1OCwgMTIwNjIwLCAwLCA2OTc5MSwgMTI3MTYxLCAxMTkxNiwgNjUwMTYsIDAsIDY5NjcxLCA0MjExNSwgOTgzMTMzLCAKICAgICAxMjI4OCwgNzgwNTcsIDAsIDE0OTMsIDQyMTExLCA3NTUzLCA0MDk3LCAxMjgxOTksIDEzMDgwLCAwLCA2NTgwOCwgNjYxMCwgCi0gICAgNjAzMCwgODA1OSwgNzUwOCwgMTMxMzEsIDAsIDk4MzQyMywgMCwgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMTI4MTkyLCAKKyAgICA2MDMwLCA4MDU5LCA3NTA4LCAxMzEzMSwgMCwgOTgzNDMxLCAwLCA4Nzk0LCA0MTI3OCwgNDE2MjksIDEyMTU0LCAxMjgxOTIsIAogICAgIDQxMjc3LCA2NDY1OCwgMCwgNjQzODAsIDY2MjUsIDc0MzU0LCAxOTkwNCwgMCwgMCwgMCwgNjUzNzEsIDcwNzgsIDAsIDgzMywgCiAgICAgMCwgNjM2OSwgMCwgMTA5NzksIDQxOTUzLCAwLCA0MTQzNCwgNjA2MiwgMCwgMCwgMTk5MTYsIDY5MTMsIDkzMywgMTM0MSwgCiAgICAgOTg0MiwgNjcyMCwgNjU3NDQsIDAsIDk4MzU5MiwgMTI4Mjk1LCAwLCA3NDA1LCAxMDEwNSwgNjU4MTAsIDAsIDQxNjMyLCAKQEAgLTE3ODk3LDIzICsxNzkxNiwyMyBAQAogICAgIDY3NDEsIDQzMDQ3LCAwLCAxMzE4MCwgMTI4NTE3LCA0MTgsIDkxNzk3MiwgNjQ0OTUsIDEwMjk1LCAxMDMyNywgMTAzOTEsIAogICAgIDQxNzUyLCA3NDMzOSwgODY0MSwgNDE0NDksIDAsIDc0MTAwLCAwLCAxMDkxMSwgNjk0MiwgMCwgMTAyNCwgNDI4NDksIAogICAgIDQxNzUxLCA2OTc3NiwgODk0MSwgOTgzNTU2LCA0NTU0LCAwLCA5MDIzLCAxMTY4NSwgMCwgOTkyOCwgNzg2MTcsIDAsIAotICAgIDExNDM3LCA0Mzc0MSwgOTIxNjMsIDEyMDcwMCwgNjM5NjcsIDk4MzQ3NSwgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIAorICAgIDExNDM3LCA0Mzc0MSwgOTIxNjMsIDEyMDcwMCwgNjM5NjcsIDk4MzQ4MywgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIAogICAgIDQzMTY2LCAwLCAxMTY4MCwgOTI2MTksIDExNjg2LCA3ODU0NCwgNjUyMjQsIDQ1NjUsIDQ2NTUsIDExOTU1MywgMCwgCiAgICAgOTIxODMsIDY0NTIzLCAxMDM0MywgMTA0MDcsIDAsIDY2NjcxLCAxMTQ2NiwgMCwgMTI4MDAzLCA0Mjg5MCwgNzQwMTMsIAogICAgIDEyMDUwLCA2ODIwMSwgMjg2MCwgMCwgMCwgMCwgNDI3OTIsIDU3NDMsIDEwNDI0LCAxMjA2NSwgNDI4NzIsIDAsIDkyMzQyLCAKICAgICAwLCA4ODc1LCAwLCAwLCA5MTc5OTEsIDc1MzEsIDEyODQ3LCAyNDEzLCAwLCA3ODYzNSwgOTYyLCAwLCAxMjg1NSwgNDExOTYsIAotICAgIDQyNTY0LCAwLCAxNTgyLCA5ODM3MDYsIDU1MDgsIDAsIDAsIDAsIDEwODAxLCA2OTg3NiwgOTIzNTQsIDAsIDcxNzMsIDQ5NiwgCisgICAgNDI1NjQsIDAsIDE1ODIsIDk4MzcxNSwgNTUwOCwgMCwgMCwgMCwgMTA4MDEsIDY5ODc2LCA5MjM1NCwgMCwgNzE3MywgNDk2LCAKICAgICAxMDQzOSwgNDMxMywgNjQ2MDcsIDY5NjM4LCA3ODYwLCAwLCA5MDYsIDQyNzkzLCAyODQyLCA2NDA1LCA2NDcyMiwgMTMxMzIsIAogICAgIDc5OCwgNjQ2OTQsIDEyODAxLCA4NDA2LCAxMTUzLCA5MjE3MywgNjQ3ODgsIDAsIDgwNTQsIDkxNzQsIDEyODY1MiwgCiAgICAgOTE3OTc2LCA5OTY0LCA3NDQwOSwgNDE2MTEsIDQ2NDIsIDY2NTc0LCAxMTU1NiwgOTE3OTgyLCAwLCA3ODg1NywgNDIwODksIAogICAgIDc4ODU1LCA5MDA4LCAwLCAxMjY1OTIsIDE5NTA5NiwgNDIwNzksIDkxNzk4MSwgNzc5MjQsIDQyNTEzLCA3NzkyNywgCi0gICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzY5MywgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKLSAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzcyMywgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCisgICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzcwMiwgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKKyAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzczMiwgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCiAgICAgNDIwMDQsIDAsIDAsIDQyMzE3LCA0MTk5OCwgMCwgNjk0NiwgMCwgMCwgMCwgMTI4MTkzLCA2NTIwNCwgMCwgNjgxMTMsIAogICAgIDQyNjkwLCA5ODgwLCA0MjAxMCwgNzQ4MjQsIDY0NTg5LCAxMDExMSwgNjQ4NzUsIDEyNzg4MCwgNjgzOTksIDQzOTk4LCAKICAgICAxMTM2MCwgMCwgMCwgMCwgMTE4ODI2LCA0MjE0OSwgMCwgMCwgMCwgNjQ5NDEsIDc3OTE5LCAxMjA0MjEsIDEyODA3NywgMCwgCiAgICAgNTUyNDcsIDQxMTAsIDY2MDA1LCA2OTU5LCAxMDkyOSwgMTE5MTEwLCAwLCA2NjcwMywgNzc5MjEsIDg2MTcsIDQxOTgyLCAKLSAgICA2MDI1LCA2OTI0MiwgOTgzMTc2LCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIDk4MzM2OCwgMTAxMTcsIDk4MzE2OSwgCisgICAgNjAyNSwgNjkyNDIsIDk4MzE3NiwgMCwgMCwgMCwgOTU5NywgNDIwOTksIDQzMTcyLCA5ODMzNzYsIDEwMTE3LCA5ODMxNjksIAogICAgIDkyMjk3LCA0MTYzNiwgMCwgMCwgMTIwNjgxLCA4MzAxLCAwLCAwLCAxODcsIDAsIDY1NjY5LCAxMjgzMzksIDQ5NjMsIDAsIAogICAgIDEyNzUxNywgMCwgODk2NCwgNjU2NzYsIDc3NzUsIDAsIDQxOTQ4LCAwLCAwLCAwLCA0MTk0MiwgNjU0NDksIDMxNjAsIAogICAgIDEwMDgxLCAxMzIyNiwgNDIxMjEsIDQyNDc1LCA0MjY2MywgMTI4MjEwLCA0MTc2NiwgMTE5MTE0LCA2NTg4MiwgNzg4NDksIApAQCAtMTc5MjMsMjAgKzE3OTQyLDIwIEBACiAgICAgMzEwMywgMCwgNDE3NTMsIDEyODU0MCwgMCwgMCwgNzg4NDQsIDc4ODQ1LCA0MTczOSwgNzg4NDMsIDQyNTE1LCAxMDkzMSwgCiAgICAgNDE3NTYsIDQzMzQ3LCA0MjU2MCwgNTM5MSwgNDE3NDYsIDExOTE0NywgOTI1OTEsIDQxMjU5LCA1NTYxLCA2OTkzMCwgCiAgICAgMjY5MSwgMCwgNjU1NTMsIDc5MzMsIDU1NjIsIDY5ODAwLCAxMjgyNjUsIDQxMjYyLCAxMjgxNDYsIDY0NDIxLCA3NDg0NiwgCi0gICAgNDEyNTEsIDAsIDAsIDM5NzksIDAsIDAsIDc0ODEzLCA5ODM3MzAsIDAsIDAsIDAsIDkyNTI0LCA0MTI2NiwgMCwgNjY1NjYsIAorICAgIDQxMjUxLCAwLCAwLCAzOTc5LCAwLCAwLCA3NDgxMywgOTgzNzM5LCAwLCAwLCAwLCA5MjUyNCwgNDEyNjYsIDAsIDY2NTY2LCAKICAgICAxMjg4MzYsIDEwNTg1LCA2NTc0MSwgNDE3MzcsIDk1NzQsIDI2NjYsIDAsIDQxNzM4LCA4MzEsIDQxOSwgMTMxMjYsIAogICAgIDEwNzE2LCAwLCA0MjgyMiwgMCwgNjQzNCwgMCwgNjkzOSwgNzc2NiwgNjQzMiwgMTI4MTA2LCA2OTkzMiwgOTE2LCA3NjksIAogICAgIDQxNzQyLCAxMTk2OCwgNzQ4MDUsIDY0MzMsIDU1NjMsIDU0NywgMTk0MywgNjQzOSwgNTU2MCwgNDk5NCwgNDg3LCAKICAgICAxMjY1MzcsIDQ0OTcsIDM3NTQsIDEyNzA1NiwgMTIwNDI0LCA5MDM5LCAwLCA0MTc3NiwgMCwgODcxNiwgMTU5NSwgNDE2MTUsIAotICAgIDAsIDAsIDc0MjYwLCAwLCA0Mjg1NCwgNDMyMTksIDEyODcwOSwgOTgzNDUyLCAxMjE4NSwgMTI4ODc5LCA3MDA3MiwgCi0gICAgNjgzNTUsIDY4MzU3LCAwLCA0Mjg1NiwgODYzNCwgMCwgOTgzMzg5LCA0MjA5LCAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgCi0gICAgNjU2MTIsIDEyNzU0MywgNjY5LCA1Njc5LCAwLCA2OTc4NiwgOTI1NDAsIDAsIDk4MzQ1NiwgNTY3OCwgMTE4MjEsIDAsIAotICAgIDY3MTEsIDQ2MCwgMCwgMCwgOTgzNDUzLCAwLCAxMjA3NDcsIDAsIDAsIDc4MDUwLCAxMTkwMjIsIDAsIDk4MzQ1NCwgMCwgCisgICAgMCwgMCwgNzQyNjAsIDAsIDQyODU0LCA0MzIxOSwgMTI4NzA5LCA5ODM0NjAsIDEyMTg1LCAxMjg4NzksIDcwMDcyLCAKKyAgICA2ODM1NSwgNjgzNTcsIDAsIDQyODU2LCA4NjM0LCAwLCA5ODMzOTcsIDQyMDksIDEyMDcwMiwgMCwgNjU4NzksIDQxNTM4LCAKKyAgICA2NTYxMiwgMTI3NTQzLCA2NjksIDU2NzksIDAsIDY5Nzg2LCA5MjU0MCwgMCwgOTgzNDY0LCA1Njc4LCAxMTgyMSwgMCwgCisgICAgNjcxMSwgNDYwLCAwLCAwLCA5ODM0NjEsIDAsIDEyMDc0NywgMCwgMCwgNzgwNTAsIDExOTAyMiwgMCwgOTgzNDYyLCAwLCAKICAgICA3NzgyLCA5MDQ0LCA0OTc0LCAxMTc2MCwgNzg0OTQsIDc1NzcsIDY1NzExLCA0MTkxMiwgMTIxNiwgMCwgMTI4MDc5LCAKLSAgICA1NzkyLCAwLCAwLCA3ODUwMSwgMCwgMjkzMywgMTIyNDQsIDAsIDU2ODMsIDk4MzM4NCwgMCwgNzgxMTksIDE1NDksIDAsIDAsIAorICAgIDU3OTIsIDAsIDAsIDc4NTAxLCAwLCAyOTMzLCAxMjI0NCwgMCwgNTY4MywgOTgzMzkyLCAwLCA3ODExOSwgMTU0OSwgMCwgMCwgCiAgICAgMTIwMzk4LCA1NjgyLCA2MjA2LCA4NjcwLCAxMDI1NiwgNTY4MCwgNjk5MzUsIDEwMDAxLCAxMjg1MTIsIDY5NzY4LCAxNDQ5LCAKICAgICAxMDI0MSwgNzgyOTAsIDEyODIyOCwgMCwgMTA1NTIsIDY0MzQyLCA0MTkyMiwgMTI4NTQ4LCA4NTg0LCA2ODAzMCwgNTU2NywgCi0gICAgMjcxNywgMCwgMCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgOTgzMjQ4LCAxMjgwMjYsIDAsIDY1NzA4LCAKKyAgICAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCA5ODMyNTYsIDEyODAyNiwgMCwgNjU3MDgsIAogICAgIDY1NzA5LCA1NTY2LCA2OTgwMywgNjU3MDQsIDY1NzA1LCAxMTkwNCwgNDI4NzUsIDQzMzczLCA0MjUzOSwgNTk0MiwgODQ2OCwgCiAgICAgMTIwNTYxLCAxMDM2MSwgMTA0MjUsIDY1Njk3LCA2NTY5OCwgNjU2OTksIDAsIDY2NTk4LCAwLCA2NDY2NCwgMTA2NDcsIAogICAgIDc4NzAyLCA3ODcwMywgNzg2OTAsIDQ1NywgNzg1MDIsIDY1NzAxLCAxOTM0LCA0MzAwNiwgMTE5OTAzLCA4ODAyLCA3ODcxMCwgCkBAIC0xNzk1MCwxNCArMTc5NjksMTQgQEAKICAgICAxMTk1NzAsIDQyMjM5LCA4NTM2LCA3ODc0MCwgNzgzMjQsIDc4NzI2LCA3NDQzMiwgNzI0LCAwLCAxNDU1LCA3ODc0OSwgCiAgICAgNzE4MywgNjQ1ODMsIDc4NzQ3LCA2ODQ0MywgNDE3NSwgNzg3NDEsIDQzNjE0LCA2OTgwMSwgOTM5LCAwLCA0MzUyMCwgCiAgICAgNjg2MTMsIDc0NTY5LCA5MTc5NTgsIDAsIDc4NzYzLCA3ODc2NCwgNzg3NjAsIDEwNzg4LCA2MDg4LCA3ODc1OSwgNzg3NTUsIAotICAgIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCA5ODMyMTEsIDkyMjYxLCA2MzcwLCAwLCA3ODI3LCAKKyAgICAxOTAsIDAsIDEyNTkzLCAwLCA4MTg4LCA2NDQwOCwgMCwgNDQxNywgOTgzMjEzLCA5MjI2MSwgNjM3MCwgMCwgNzgyNywgCiAgICAgNjg0NDEsIDY5NjUsIDAsIDAsIDEzMjAxLCAxMjgyMDUsIDY5ODk2LCAwLCA3NDM4MiwgNzM3ODEsIDc5MTgsIDczOTg4LCAwLCAKLSAgICAwLCA5MTc4ODQsIDE3MjgsIDAsIDQzNzY0LCAxNzgsIDEyOTcyLCA5MjY3OSwgMCwgOTE3ODg3LCA5MjU2MywgOTgzMzczLCAKKyAgICAwLCA5MTc4ODQsIDE3MjgsIDAsIDQzNzY0LCAxNzgsIDEyOTcyLCA5MjY3OSwgMCwgOTE3ODg3LCA5MjU2MywgOTgzMzgxLCAKICAgICAwLCA3ODMyNywgMTIwNDA1LCA2NTY5MCwgMCwgMCwgMTE5MDU0LCAwLCA5MjUyLCA5MTc4ODksIDQ2NTIsIDY4MzcxLCAwLCAKICAgICAwLCAwLCAxMzA2NSwgOTkyMywgMTA4MDYsIDAsIDExNzYzLCA3MDAxNiwgMTIwNjg4LCA2NzIzLCA3ODE4NywgMCwgNjk5MywgCi0gICAgMCwgMCwgODMzMywgMCwgMCwgMTEzOTAsIDAsIDc0NDY0LCAwLCA5MjMyMCwgNzQwODAsIDk4MzMwNywgNjk5MTEsIDExOTEwLCAKKyAgICAwLCAwLCA4MzMzLCAwLCAwLCAxMTM5MCwgMCwgNzQ0NjQsIDAsIDkyMzIwLCA3NDA4MCwgOTgzMzE1LCA2OTkxMSwgMTE5MTAsIAogICAgIDkyNTU5LCA4Mjc4LCA4OTYzLCA0MDM0LCAxMjg1NjAsIDAsIDY1MzQ0LCAxMjA1MTcsIDQxNzQ3LCAwLCAwLCA4Njc3LCAwLCAKLSAgICAxMjcwNywgOTM1MCwgNjYwMzcsIDEyODE4MCwgODgzNiwgMTIzMTUsIDEyNzQ3LCA4MzAwLCA5ODM3NDEsIDAsIDc0OTEsIAorICAgIDEyNzA3LCA5MzUwLCA2NjAzNywgMTI4MTgwLCA4ODM2LCAxMjMxNSwgMTI3NDcsIDgzMDAsIDk4Mzc1MCwgMCwgNzQ5MSwgCiAgICAgODg1NiwgNzEzNjEsIDAsIDQzMTUwLCAxMjc3NjgsIDEyMDQwNCwgNjUzODksIDEyMDQwMiwgMTIwNDAzLCAxMDgxMywgCiAgICAgMjU5MiwgMTI4NTMsIDQzMjY5LCA3MjYzLCAxMjAyNDQsIDY1MzYsIDEyMDIzOCwgMTIwMjM5LCA2NTUxNiwgMTIzMjEsIAogICAgIDEyMDM5MSwgMTIwMzg4LCA1NTI4NywgMTAwMDcsIDEyMDI0NiwgOTU4OCwgMTIwMjQ4LCAxNTk2LCAxMjAzODMsIDQxOTk0LCAKQEAgLTE3OTgyLDI3ICsxODAwMSwyNyBAQAogICAgIDExNiwgMTI5OTgsIDEyMiwgMTIxLCAxMjAsIDExMSwgMTEwLCAxMDksIDEwOCwgMTE1LCAxMTQsIDExMywgMTEyLCAxMDMsIAogICAgIDEwMiwgMTAxLCAxMDAsIDEwNywgMTA2LCAxMDUsIDEwNCwgNjQzNiwgNzM5NzQsIDUzNCwgNDEyMTIsIDc3OTMxLCAxNTM2LCAKICAgICA2NDA5MywgNzM5NzAsIDc3OTMwLCAxMjcxNTcsIDAsIDYwMjAsIDEyNzE2LCAxMjcxMTIsIDEyNzQ0LCA0NzUsIDEyMDM5NCwgCi0gICAgMTMyNjYsIDEyNzgxMywgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDk4MzI5OSwgODEzNCwgCi0gICAgMTI4MDI4LCAyOTEzLCA3Mzg3MCwgMTI3MTEzLCAxODY2LCAwLCAxOTUwOTUsIDAsIDg5MjMsIDE2NDUsIDEyMDU5LCAKKyAgICAxMzI2NiwgMTI3ODEzLCAxMjcxMTEsIDAsIDczOTI2LCAwLCAxMDY0NSwgMTIxMiwgNjU0MywgOTgzMzA3LCA4MTM0LCAKKyAgICAxMjgwMjgsIDI5MTMsIDczODcwLCAxMjcxMTMsIDE4NjYsIDk4MzIyOSwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgCiAgICAgNjY1ODUsIDcxMjk3LCAzMTk2LCAwLCAwLCA1OTM1LCAxMjUwLCAxMjcwNjYsIDgxNzQsIDk3ODcsIDY3MzMsIDk4NTksIAogICAgIDc5MTYsIDk4NjEsIDk4NjAsIDUyNTgsIDE4ODIsIDE4OTIsIDY3MzEsIDEwODgyLCA0MDUsIDExNDU0LCA3MzkxMSwgMCwgCiAgICAgMTI4NzgxLCA0MTE2OSwgODkzOSwgNDEyNDUsIDAsIDQxMTcwLCAxNDU0LCAxMTM2OSwgNjQ3NywgMTIxNTcsIDAsIDAsIDAsIAotICAgIDQxMTcyLCA3ODU1LCAwLCAwLCAxMDQ4MCwgMCwgMCwgNzc5MzYsIDgyNjQsIDEyNjEwLCA5ODMzMDAsIDY0NSwgMTI2NjE2LCAKKyAgICA0MTE3MiwgNzg1NSwgMCwgMCwgMTA0ODAsIDAsIDAsIDc3OTM2LCA4MjY0LCAxMjYxMCwgOTgzMzA4LCA2NDUsIDEyNjYxNiwgCiAgICAgNzYwOSwgNDA5NzMsIDY5OTQzLCA3MzgzMywgNjk5NDgsIDU4MjQsIDk4NCwgNzc5MTgsIDEwNjg4LCA1ODUxLCAwLCA3NzI5LCAKICAgICA3Mzk4MiwgMTIwNTE4LCAwLCAxOTUwODYsIDQzMzY5LCAwLCAxMjgxNDAsIDY4NDE1LCA5ODMwOTMsIDQ1MzgsIDEyMDQwNiwgCi0gICAgNDMxNDEsIDAsIDk4MzIwOCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgCisgICAgNDMxNDEsIDAsIDk4MzIxMCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgCiAgICAgOTgzMTU5LCAxMjk5NywgMCwgMCwgMCwgMCwgMjM4MSwgMTI4ODMsIDEwOTk0LCAxMDUyOSwgNDE5MDYsIDAsIDAsIDAsIAogICAgIDEyNDI1LCAxMDY2MSwgMTA4NTYsIDk2MTQsIDI0MjgsIDQxNDc4LCA4NTgyLCAxMDA2NCwgNzM5MzAsIDAsIDAsIDAsIAotICAgIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDkyMTgxLCA4NDU1LCAxMDA4MiwgMTE1NzUsIDk4MzQ4MiwgMTE5NTY2LCAwLCAxMjgwOCwgCisgICAgNjQ4OTYsIDExOTE2MiwgMTk1MiwgOTIxODEsIDg0NTUsIDEwMDgyLCAxMTU3NSwgOTgzNDkwLCAxMTk1NjYsIDAsIDEyODA4LCAKICAgICAxMjE4MywgNjE0NSwgMTE4OTU1LCA2NDkyOSwgOTI0MzMsIDAsIDk4MzE5MywgNDMxODYsIDQyNTA5LCAwLCAzOTIyLCAKICAgICA5MTg3LCA5ODM2MTQsIDAsIDEwMTkxLCAxMTkwNTcsIDExNzUyLCAzMzUzLCA5MzU4LCAwLCA3MTM2NiwgNjY2ODAsIAotICAgIDEyMDA5MCwgODI0OCwgNzkzMSwgODU1OCwgOTc5NSwgNjgzODAsIDk4MzI4OSwgMCwgMTIwMDgyLCAxMjAwODEsIDEyMDA4NCwgCisgICAgMTIwMDkwLCA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgOTgzMjk3LCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCAKICAgICA0MTAyNywgMTIwMDg2LCAwLCAxMjAwODgsIDczNjYsIDcwMTksIDEyMDA3MywgMCwgMTE3NTEsIDEyMDA3OCwgNzgyOTQsIAogICAgIDY0NjU3LCA4NjU3LCAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIDEyMDA3MSwgMCwgMCwgCiAgICAgNDMxNTQsIDQxMDI5LCAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDk0MDc3LCAxMTI5NCwgMCwgNjY2NjUsIDc4NTEsIDAsIAotICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NTUsIAorICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NjQsIAogICAgIDAsIDgwODgsIDAsIDc0MDEyLCA5MjUwMCwgMCwgNDQzOSwgNjkyNiwgOTgzMDQ3LCAxMjkyNCwgMTI4MjI3LCA0MjM2OSwgCi0gICAgNDM1MCwgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgOTgzMjc1LCAwLCAwLCAKKyAgICA0MzUwLCA2NTQ5MSwgNjUxNDUsIDkwNDEsIDQzNTU5LCA2NDU3NywgMTA4MjYsIDAsIDExMjk2LCA5ODMyODMsIDAsIDAsIAogICAgIDY1ODI1LCA5NTc3LCA2ODE5OSwgMCwgNjQ2NzAsIDk4MzEyMSwgNzgwNTYsIDY3OTMsIDExMjk1LCAwLCA3ODA1MywgCiAgICAgNzM4NzIsIDAsIDAsIDEwOTAyLCAwLCAwLCA3ODA3MCwgNzgwNjgsIDEwNDcyLCAyOTk1LCAwLCAwLCA2NDY4MiwgMjM3MSwgCiAgICAgNzgwNjksIDEyMDgwOCwgMjU5LCAxMDA5LCA5MjE3MSwgMjQwMiwgMjMzMywgNjQ0MCwgMTk0NzQxLCAwLCA2NTEyNSwgCkBAIC0xODAxMCwxOSArMTgwMjksMTkgQEAKICAgICAxMjcwNzAsIDQxMjYxLCAxMTkzNjIsIDQzNjQwLCA4NjEzLCAwLCA5NDA0OSwgNjczNiwgMTk1MDkyLCA0MTQ5MiwgMTIwMDUsIAogICAgIDY5OTI3LCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCA3ODA3NiwgMTk0NzM4LCAKICAgICA3ODA3NywgNjk5MjgsIDAsIDc4ODAwLCA5MjY1MywgNjQ0NDUsIDQyNjY4LCA2NjM1LCAwLCA2MTY0LCA2NTE3MCwgMCwgMCwgCi0gICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY0OSwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCisgICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY1OCwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCiAgICAgNzgwNDUsIDkwODgsIDAsIDY0NTQ1LCAxMzk2LCAwLCA3NTQ2LCAzODQ3LCAxMjcxNzcsIDEyNzgzNSwgNDk4NSwgMTMyODgsIAogICAgIDY3MiwgODA5OCwgNDMxOTYsIDE5NDc0NiwgOTgzMDk2LCAxMjgxMjYsIDQyNjU1LCA3NDA0MywgNjUwNzIsIDE1NzcsIAogICAgIDExNzcyLCAxMzA0MSwgNTkyOCwgNDUyNSwgMTA2NTgsIDY1OTExLCAxMjY2LCAxMDE4MCwgMCwgMTI4NTg0LCAxMjYyMiwgMCwgCiAgICAgMCwgMCwgMTk0NzE0LCAxMjcxMzksIDEzMzEwLCA3NzMsIDE5OTMzLCAxNTM5LCAwLCAxMjY5ODMsIDQyNzMxLCA2Nzk3MiwgCiAgICAgMCwgMCwgMCwgMzA1MSwgNTg2MiwgNzgyMywgOTI0NzgsIDAsIDEyMDQxMSwgMzI1MCwgNDM5OTEsIDY5Njg3LCA2NjY0OSwgCi0gICAgOTUxMCwgNjYyMzcsIDk4MzI5NCwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCisgICAgOTUxMCwgNjYyMzcsIDk4MzMwMiwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCiAgICAgOTE3OTY4LCA2NzI1LCAxMjgwMTMsIDkxNzk3MSwgOTIzMTQsIDM0NzEsIDkxNzk3MCwgNTQ3OSwgODgyLCA2Njg2LCAKLSAgICAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCA5ODMyOTgsIDkyNjk2LCAwLCAwLCAwLCAxMjg1MjMsIDMyMjUsIAorICAgIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDk4MzMwNiwgOTI2OTYsIDAsIDAsIDAsIDEyODUyMywgMzIyNSwgCiAgICAgOTE3OTk2LCA0NDMzLCA0MTE1NiwgNDM5NzMsIDQzMTczLCAxNDQzLCA0MzgxLCAwLCAwLCAxMDkyNiwgMTE3NTYsIDExNzU3LCAKICAgICA2NDg3OSwgOTE3OTQ5LCA5MTc5NTAsIDEyNzg0OCwgMTMyMjcsIDAsIDEwMDIxLCA1MTYwLCAxMzg3LCAwLCA5MTc5NTMsIAogICAgIDQxNDE4LCAwLCA2NTkxNCwgNjcyMSwgMjE3LCA5MTc5NTUsIDkxNzk2MCwgOTE3OTYxLCAxMDQ0MywgMTA3ODksIDQxMTU4LCAKLSAgICAxMTkyNTcsIDQyNzQsIDk4MzI5MiwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAKKyAgICAxMTkyNTcsIDQyNzQsIDk4MzMwMCwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAKICAgICAwLCA0MTI1MiwgNjY2ODIsIDAsIDExOTYzNywgNDEyNDksIDEzNjYsIDY0NjM1LCA2NTA0NywgMTI0NjYsIDAsIDAsIDQzOTcsIAogICAgIDEyODAzNywgMTI4MzM2LCA0MTI5NiwgOTU0NSwgNDEyOTEsIDEyODA0OSwgMCwgNDE0ODUsIDM1MTEsIDQxMjgyLCA1OTIzLCAKICAgICAxMDQwMCwgMCwgMTI4ODE4LCA3NjAsIDAsIDEyMDg4LCA1Nzg2LCAwLCA0MjI1NiwgMTE5ODY5LCAxMTk4NjAsIDQxNywgCkBAIC0xODAzMiwxNSArMTgwNTEsMTUgQEAKICAgICAxMTk1NzYsIDAsIDAsIDEzNzUsIDY2NzA1LCA0MzU3MywgNjUyNjAsIDQyMDYzLCAwLCA0MjgxMSwgMTAzMTIsIDY5ODQ1LCAKICAgICAxMjA3OTQsIDc4NDAsIDAsIDQzNjMwLCAxMDI1MiwgMCwgMTI4MTA0LCA0MzE4NSwgMCwgNDM5NiwgMCwgMTE5ODgwLCAKICAgICAxMDc2OSwgOTY3NiwgMTE5MDQxLCAwLCA5NzUzLCAwLCA4OTQ0LCAwLCAwLCAxMDQ3MywgMCwgMCwgNjA3MiwgNDMwMjUsIAotICAgIDEwMjk5LCAwLCAwLCAxMjA2MDgsIDY2MzI2LCA5ODM0MzksIDEyNzc5NCwgMCwgNDM4MTEsIDkzMzAsIDEyMDU5NiwgNzIyMiwgCi0gICAgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgOTgzNzczLCAxMzI4MSwgNjY1MTcsIDc4NjUsIDEwMDg3LCA3ODM0MywgMCwgCisgICAgMTAyOTksIDAsIDAsIDEyMDYwOCwgNjYzMjYsIDk4MzQ0NywgMTI3Nzk0LCAwLCA0MzgxMSwgOTMzMCwgMTIwNTk2LCA3MjIyLCAKKyAgICAxMDI4MywgMTAzMTUsIDEwMzc5LCA0OTk2LCA5ODM3ODIsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCAKICAgICA3ODM0NywgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCA2NDgwNiwgNDMxODAsIDc3OTI4LCA3NDE0LCA3NzkyOSwgNDM5ODIsIAogICAgIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDQzNDA1LCAxNjAyLCAwLCAwLCA4NTIsIDAsIDEyMTYwLCAwLCAxMDIxMiwgCiAgICAgNjU0MzUsIDAsIDEyMDcxLCA5NjA5LCAxMjE1NiwgOTE3OTgzLCA5MTc5ODQsIDQzNTg2LCAxMTAzNSwgMTA0MTEsIAogICAgIDkxNzk4OCwgMTAyNTUsIDY3MTAsIDEwMjc5LCA0MTk0LCAxMDM3NSwgNzM5MDAsIDAsIDQzMTUsIDEyNjQ0LCAxMjc1MTYsIAogICAgIDc3OTM3LCA0MzYzOSwgNDMzNDMsIDc4Nzc3LCA5MTc5OTgsIDExNTAxLCA0MTE3NywgMTI4Njg5LCAwLCA5MTc3OTIsIDAsIAogICAgIDkyNDEzLCA4NzE1LCAwLCA0MTE3OSwgMCwgNDMzMTMsIDAsIDQxMTc2LCAwLCA5OTQsIDAsIDg0NTIsIDEyNzEwMywgCi0gICAgNzM5NjYsIDAsIDAsIDU5MjEsIDAsIDI1OTcsIDAsIDU5MjIsIDExODkwMywgNzc5NDMsIDQxODYsIDkyNTMxLCAxMjcxMDYsIAorICAgIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDc3OTQzLCA0MTg2LCA5MjUzMSwgMTE5OTY3LCAKICAgICAxMjcxMDUsIDY3MTgsIDAsIDQ0MDYsIDc0NjAxLCA4NDgwLCA5MTkyLCA5NzQ3LCAxMjY1MzAsIDQ0MTMsIDkyMTk2LCAKICAgICA0MjI2OCwgMzE5OCwgNTkyNCwgNTkyMCwgOTI0NjksIDY5MjEsIDc4MDgxLCA3NDAwNywgNDI4NjksIDg0MTgsIDExNjgxLCAKICAgICA0MzE2OSwgMTAxNzYsIDAsIDc0MiwgMCwgMjg5MywgMTA3NzIsIDY1Mjc2LCA1OTM3LCAxOTE0LCAyNTUzLCAxMTY4MiwgCkBAIC0xODA2Myw3ICsxODA4Miw3IEBACiAgICAgNzgzMCwgMTE2NTEsIDEzMDkzLCA2NDAwMiwgMCwgNjU3NDIsIDEyODc0LCAxMTk1OTcsIDExNTkwLCAwLCA3NDA0OCwgCiAgICAgMTI4MzUwLCA4NTk1LCAwLCA5MTc5NDcsIDQzNzAzLCAxMzA5NywgMCwgNjQ2NDMsIDEzMjgzLCAxMjY5NywgMCwgMTIzODEsIAogICAgIDM0ODgsIDU5MzMsIDEwMDMzLCA3MzczOCwgNjYyNDEsIDY1NTcwLCAwLCAxMjI5NywgMTE5MTUzLCAxOTU1LCAwLCA1MzQ5LCAKLSAgICA0MjUzOCwgMCwgMCwgNzQxMSwgOTQ2MiwgOTE3NTU0LCAwLCAwLCAwLCA0MjczNiwgMCwgNTc1NiwgOTgzMjE5LCA3NjM4LCAKKyAgICA0MjUzOCwgMCwgMCwgNzQxMSwgOTQ2MiwgOTE3NTU0LCAwLCAwLCAwLCA0MjczNiwgMCwgNTc1NiwgOTgzMjIxLCA3NjM4LCAKICAgICA0MTY0MiwgNDI3NjQsIDAsIDQzMTA5LCA3NjM3LCA1NzUyLCA3NDAzNywgMCwgNzM4MzIsIDEyODgyNywgMTIwNjM1LCAKICAgICAxMjgyMzEsIDc4MzM0LCAwLCA3NjM2LCA2NTE3MSwgOTEyNCwgMCwgNzg4OTIsIDEyMDc5OCwgMjkxLCAwLCAwLCAyMDI3LCAKICAgICA2NjIzMCwgMTAwODAsIDc4MTM2LCAxMDQwMywgMCwgNDY0MCwgNjQ3MTMsIDEwMjI0LCAxMjA0MjksIDQyNTEyLCAxMjA0MzEsIApAQCAtMTgwNzUsMTcgKzE4MDk0LDE3IEBACiAgICAgNzgyNzAsIDEyNzk4MiwgOTgzMTcyLCA2NDcyOCwgMCwgNzg2NzMsIDc4Njc0LCAxNjU5LCA5MTksIDQyNzg0LCAxNjcxLCAKICAgICAxOTUwODksIDYwNjksIDkyMTksIDEyODU1OCwgMTY2MSwgMTMxMjAsIDYzNzg0LCA2OTgxOSwgMTAxNDAsIDk3MTMsIAogICAgIDExOTE0MywgMCwgMCwgOTQwNTAsIDIzMDYsIDEwNDg1LCAxMTg5NDMsIDYwNjgsIDEwNjEyLCAxOTUwOTksIDExOTU2NywgCi0gICAgMTk1MTAxLCA5MjU2MSwgNDE0NjIsIDEyMDQ3MCwgMTk1MDc5LCA1NDIyLCAxMjgyMzQsIDAsIDAsIDAsIDEwMjI5LCAKKyAgICAxOTUxMDEsIDkyNTYxLCA0MTQ2MiwgMTIwNDcwLCAxOTUwNzksIDU0MjIsIDEyODIzNCwgOTgzNjI5LCAwLCAwLCAxMDIyOSwgCiAgICAgMTA2MzUsIDgyNiwgMTI4MDgxLCAxOTUwODIsIDE5NTA4NSwgMTk1MDg0LCAxOTUwODcsIDY0ODMsIDkyMjExLCAxODA4LCAKICAgICA3ODQ4LCAwLCA4MTAwLCA3ODIyNywgNzg2NjksIDc4NjcwLCAxMzMwMSwgNzg2NjcsIDk2NjcsIDc4NjY1LCA3ODg3MiwgMCwgCiAgICAgMTEwMDMsIDk5MDQsIDAsIDAsIDEyMDY5MCwgOTE0NCwgMTA5MjEsIDAsIDc4NjgwLCA5ODQwLCA2NTEzMSwgNzg2NzgsIAogICAgIDc3ODQxLCAxMDMxMywgMCwgMCwgNjQzMjAsIDEwMjY1LCA3ODY4NiwgMTA5NjIsIDc4Njg0LCA0MzAwOCwgODk0NSwgCiAgICAgNzg2ODMsIDAsIDQxLCAxOTUwNzIsIDE3OTIsIDEyMDUxNSwgMTk1MDczLCA4NjU1LCAxOTUwNzUsIDkyNTQ0LCA3Nzk1MSwgCi0gICAgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMTI3ODA0LCAxMTkwNjgsIDMxMjYsIDAsIDc0MTM2LCAxMDk1NywgOTgzNjk0LCAKKyAgICAxMjA2NiwgMCwgMzg1LCA0MTUyLCAyNTg1LCAxMjc4MDQsIDExOTA2OCwgMzEyNiwgMCwgNzQxMzYsIDEwOTU3LCA5ODM3MDMsIAogICAgIDQzMjU4LCAxMTkxMTYsIDEyNzg3MywgMTMxNTcsIDAsIDkxNzU0NCwgMzU3MCwgMCwgNzQ0MywgMCwgNDQwMDYsIDY5OTcsIAogICAgIDY4MDA0LCAxMjY2MzEsIDc4NzksIDg3MzksIDExMDc1LCAwLCA2NTIxNiwgMCwgNjk3OTUsIDI1OTMsIDg0NjMsIDc4MTAsIAogICAgIDkxNzg2MiwgNzgzOSwgMTE5OTEzLCA3ODgwNiwgMTE5OTEyLCA5NjkxLCA0NDExLCA3ODgwMiwgMCwgMCwgNDM0NDIsIAotICAgIDY5ODUxLCA2NTI1NCwgMTAwNjYsIDk4Mzg4MCwgMCwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIAorICAgIDY5ODUxLCA2NTI1NCwgMTAwNjYsIDk4Mzg4OSwgMCwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIAogICAgIDAsIDExOTkyMywgMTIzOTAsIDExOTE3MSwgMTYzNCwgNjgxMTUsIDAsIDExMDU2LCA5ODM1NzQsIDExOTkyNSwgMCwgCiAgICAgNDExNjUsIDExMzI4LCAxMjQ1MCwgMCwgNDExNjYsIDAsIDEyNDU2LCAxMTk5MTQsIDE3MSwgNTk0MSwgMTI0NTIsIAogICAgIDE5NDcwOSwgMTI0NTgsIDEyNTMxLCA3ODc3OSwgNDMwMTMsIDYzODAwLCA3NDE2MiwgMTI3NTY5LCAxMjA0ODMsIDk5NjksIApAQCAtMTgxMDAsNyArMTgxMTksNyBAQAogICAgIDEzMjQ0LCAxMjA0NjYsIDQyMTY3LCA3NDM1LCA3ODE5MywgNTM4MCwgMTE5MDg2LCA2OTIyNSwgMTE1NSwgMTEzNjUsIAogICAgIDQzMTI2LCA3Nzk3MiwgMCwgNjU2ODQsIDAsIDU2MDEsIDY1MTkyLCA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDEyODU0MywgCiAgICAgMTE3MiwgNjk3OTksIDY3ODYsIDQzNjAxLCAxMjA0NzYsIDc0MTI2LCA1NjAzLCAwLCA0NDczLCAwLCAxOTQ4MjMsIDAsIAotICAgIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDEyNzM4NCwgNTM0NywgNjk4MDIsIDk4MzYyMywgNzM4NjgsIDExODk0NCwgCisgICAgNjUzNDcsIDY1MzQ2LCA2NTM0NSwgMCwgMTI3Mzg0LCA1MzQ3LCA2OTgwMiwgOTgzNjMyLCA3Mzg2OCwgMTE4OTQ0LCAKICAgICAxMDU4OCwgMCwgMCwgNjM3NTUsIDAsIDUzNDMsIDc4NDIyLCAxMjA2NjEsIDQ1NTUsIDUzNDEsIDAsIDcwMDcxLCAxMjg2NzAsIAogICAgIDUzNTEsIDc4Njc1LCA0MzEwNCwgNjUyNDQsIDkxNzg5MiwgNjQ1NDEsIDQyNTE5LCA3NDQ3MiwgMCwgMCwgNzQ3NjUsIAogICAgIDkxNzg4OCwgMTI3NTEwLCA2NjM4LCAwLCA2NTExMywgMjcxLCA3NDE4MCwgNjUzNzAsIDg4MzUsIDY1MzY4LCAxMjY1MywgCkBAIC0xODExMCwxNCArMTgxMjksMTQgQEAKICAgICAwLCA0OTE2LCAwLCAzODAsIDEwOTU4LCA2NjU2MywgNzc5NTUsIDY5NzczLCA5NzczLCAxMzE2NywgMTI5MTgsIDQxMDk2LCAKICAgICA3Mzk4MCwgNjkyNDUsIDc4MjU0LCA5MTc4OTMsIDEwNjg0LCAwLCA5MTc4OTYsIDAsIDc5NDYsIDEyNTQxLCA4MTgyLCAKICAgICA2NzU4NiwgNjk3ODAsIDAsIDAsIDAsIDAsIDkwMDUsIDEyMjUsIDY2MzAsIDAsIDAsIDAsIDY4MDExLCA4ODQ3LCAwLCAKLSAgICA2NTg3NiwgNTUzNSwgODMyOSwgNzQ1OTAsIDk4MzIwNiwgOTI2MDksIDAsIDAsIDMxMjcsIDI1OTUsIDY1NzEzLCA0MjAxMywgCi0gICAgOTgzODQ5LCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCA0Mzc1MSwgNzQyMDAsIDQ5NzAsIDg3NjQsIAorICAgIDY1ODc2LCA1NTM1LCA4MzI5LCA3NDU5MCwgOTgzMjA4LCA5MjYwOSwgMCwgMCwgMzEyNywgMjU5NSwgNjU3MTMsIDQyMDEzLCAKKyAgICA5ODM4NTgsIDU2MDcsIDQxMDg5LCAwLCAwLCA3NDI1NiwgMjY2NSwgMTEzMDQsIDQzNzUxLCA3NDIwMCwgNDk3MCwgODc2NCwgCiAgICAgMTIwNDU5LCA4OTM0LCA5MjcyNiwgNDE1NjYsIDQ0OTIsIDAsIDY1MDExLCA0MTA5MCwgMCwgMCwgMTE4OCwgNzI1NCwgCiAgICAgMTEwMCwgMCwgMTI4MzAxLCA0MTA4MSwgMjkxMiwgMTE3NDksIDY5NzkyLCAwLCA2ODAxOSwgMzU3MiwgMTAwMjMsIDQ5NTksIAotICAgIDEzMDc5LCAwLCA5ODMyNjgsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAotICAgIDEzMzA0LCAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDk4MzMwMSwgOTcyLCAKLSAgICA0MTQ1MywgOTgzNDM0LCAwLCA3Mzg4MywgNjgwMjIsIDczOTQ1LCA5ODM3MjYsIDIyODgsIDE5OTU1LCA5NTM4LCAwLCAKLSAgICA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDk4MzQzMiwgMTEwMTksIDAsIDAsIDAsIDY4MDIwLCA0MTA3OCwgNzEzNjUsIAorICAgIDEzMDc5LCAwLCA5ODMyNzYsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAorICAgIDEzMzA0LCAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDk4MzMwOSwgOTcyLCAKKyAgICA0MTQ1MywgOTgzNDQyLCAwLCA3Mzg4MywgNjgwMjIsIDczOTQ1LCA5ODM3MzUsIDIyODgsIDE5OTU1LCA5NTM4LCAwLCAKKyAgICA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDk4MzQ0MCwgMTEwMTksIDAsIDAsIDAsIDY4MDIwLCA0MTA3OCwgNzEzNjUsIAogICAgIDI2MSwgNTkyNywgNzc5MSwgMCwgNzM2MiwgMCwgMTA2OTYsIDAsIDYwNzMsIDk4MzgsIDExODkyMCwgMCwgNjA3NSwgCiAgICAgOTM5OTUsIDI4MiwgMTI2NTEwLCA2NDM3LCA3NDA3OCwgMTI4MDAwLCA5ODAxLCAwLCA3NDE3NywgMCwgMCwgMzQ3NCwgCiAgICAgMTE4Nzg3LCAwLCAxMjA2NTUsIDYwODEsIDAsIDc4ODc0LCA3NDA3NiwgNzg4NzksIDAsIDAsIDAsIDAsIDAsIDg3NTEsIApAQCAtMTgxMzgsNyArMTgxNTcsNyBAQAogICAgIDQ1NjQsIDAsIDAsIDc0MjcxLCA3Mzc1MywgODM3NCwgOTgzMTU2LCAwLCA2ODI5LCA1MjI1LCAxMjg4MDcsIDEyNzM4NSwgMCwgCiAgICAgMCwgMTE5NjE1LCAwLCA3NDc5MywgNTYyNiwgNzM4MDcsIDExNzcxLCA3NDA3NSwgMTI3MjM2LCAxMjgwMTksIDQyNjE0LCAKICAgICA1MzUzLCA1NjI1LCA3NDE3OSwgMCwgMCwgMTAxMCwgNjQ1NzIsIDQxNzgwLCA0MjYyMywgNjQyNzcsIDY5OTQyLCA2OTUyLCAKLSAgICA5ODMyNjQsIDEyMDc1MiwgNzg3NjIsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIAorICAgIDk4MzI3MiwgMTIwNzUyLCA3ODc2MiwgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgCiAgICAgMTIwMDM4LCAxMjAwMjcsIDEyMDAyOCwgMTIwMDI1LCA1NjI4LCAxMjAwMzEsIDk3MCwgMTIwMDI5LCA0NzcyLCAyNDAwLCAKICAgICA1NjI3LCAxMjAwMTcsIDEyMDAxOCwgMTIwMDIzLCA2NDI3NSwgMTIwMDIxLCA4Nzg2LCAwLCAyMDMsIDAsIDAsIDAsIDAsIAogICAgIDc4MzUwLCAwLCA2NDM3OCwgNDIwNTQsIDAsIDAsIDU1NCwgMTE5NjQ5LCAxMTM1OCwgMCwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgCkBAIC0xODE1MCw5ICsxODE2OSw5IEBACiAgICAgMTE2OCwgOTI1MSwgOTA4MiwgMTE5OTY0LCA2NDA1NSwgNDI3ODEsIDM4NjYsIDEyMzIzLCA0MTUxMiwgNzM4MDUsIDY4MTIxLCAKICAgICAwLCA0MTQ5NCwgOTIzMTYsIDQ2NjAsIDAsIDEwNDA1LCAwLCA3ODgwMywgMCwgMCwgNDIwNDAsIDczOTE4LCAxMTk2MjcsIAogICAgIDc5NDQsIDQxNDU0LCAxMjYwNSwgMCwgNDIyMDUsIDQxNDU1LCAyMzYsIDY0MDUxLCA3ODg2NywgODIxNCwgMCwgMCwgMCwgCi0gICAgNDE0NTcsIDk4Mzk2MSwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDc0MTMsIDY4MDEyLCA3ODAyOSwgCisgICAgNDE0NTcsIDk4Mzk3MCwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDc0MTMsIDY4MDEyLCA3ODAyOSwgCiAgICAgODc2NiwgMCwgNzgwNzksIDU4NTQsIDEyNzk3NCwgMTA1ODMsIDAsIDExOTk4OSwgMCwgMTA0MTYsIDkxNzg2OSwgMzg3MiwgCi0gICAgOTE3ODY4LCAwLCA4NDI5LCAwLCAxMTg4MDYsIDI4MzgsIDEyODgwMiwgMCwgOTE3ODY2LCAwLCAwLCAwLCA5ODM5NTgsIAorICAgIDkxNzg2OCwgMCwgODQyOSwgMCwgMTE4ODA2LCAyODM4LCAxMjg4MDIsIDAsIDkxNzg2NiwgMCwgMCwgMCwgOTgzOTY3LCAKICAgICA5NDAwNSwgMTEwOTYsIDEyMDgxMywgMTA1NTMsIDE2NjIsIDg0ODMsIDEyMDM5NiwgNDM2MDUsIDU4OTIsIDQzNDE4LCAwLCAKICAgICA3Mzc0MiwgNjYsIDY1LCA2OCwgNjcsIDcwLCA2OSwgNzIsIDcxLCA3NCwgNzMsIDc2LCA3NSwgNzgsIDc3LCA4MCwgNzksIAogICAgIDgyLCA4MSwgODQsIDgzLCA4NiwgODUsIDg4LCA4NywgOTAsIDg5LCAxMTk4NjIsIDEwMzU3LCA3Mzg1LCA4MTcwLCAxNzA0LCAKQEAgLTE4MTY3LDcgKzE4MTg2LDcgQEAKICAgICAxMjQ3MiwgMCwgNjk4NjQsIDc2OTksIDEyMzkzLCAwLCAwLCAwLCA3NDUxOCwgODIyMywgMCwgNDI2MSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTI4MzAyLCAwLCAxMjgwNDYsIDQzNDE5LCAwLCA2NDU1NCwgMTA1NzQsIDM4NzgsIDAsIDQyMzUyLCAxNzUyLCAKICAgICA3Mzc4NSwgMCwgNDI1MDYsIDEyODU0MSwgMTAxOTksIDAsIDAsIDY4MDIxLCA2NTkxOSwgMCwgNjY5NSwgNzIwLCAzMjQsIDAsIAotICAgIDAsIDQzNDA2LCA5ODM3MjcsIDE0NjQsIDQwOTg1LCAwLCA3OTc0LCAwLCA0MzQ3NCwgMCwgNjQ0ODgsIDAsIDAsIDY0MDQxLCAKKyAgICAwLCA0MzQwNiwgOTgzNzM2LCAxNDY0LCA0MDk4NSwgMCwgNzk3NCwgMCwgNDM0NzQsIDAsIDY0NDg4LCAwLCAwLCA2NDA0MSwgCiAgICAgNzQ3ODcsIDAsIDc4ODY1LCA5MjI1OCwgNjU1OTcsIDAsIDc4ODYzLCAwLCAxMzAyLCAwLCA3ODg2MSwgMTE5MTM0LCAwLCAwLCAKICAgICA1MjA0LCA3NDc3NCwgNDM0MDQsIDExODM1LCAwLCAzOTk1LCA2ODM2MCwgNjU2MDgsIDM3MTQsIDkyMTkwLCAwLCAwLCAKICAgICAxMDk5OSwgMTE3NTAsIDAsIDQzMjUxLCA2ODY2MCwgNDMzMDEsIDAsIDEyMDU1NywgODEzMCwgODY3MiwgMTA4NDUsIApAQCAtMTgxNzUsMjIgKzE4MTk0LDIyIEBACiAgICAgNjEyLCAwLCA2NDQwMSwgNjY0NDgsIDY4Mzc2LCAwLCAxNjc0LCAwLCA1ODIzLCA5ODMxNjMsIDEyMjgwLCAwLCA1NDAsIAogICAgIDc0NTY0LCAxMTkwMTcsIDAsIDg0MzIsIDAsIDExMDczLCAwLCA2NDMxNiwgMCwgMCwgODIwLCA0MTc0MSwgMCwgMTIwNjY3LCAKICAgICAwLCA2NDY4NCwgMTI2OTkyLCAzMzU5LCA3ODAwLCA2OTkzNCwgNjUxNzcsIDYyMjYsIDM1MywgMTIzOTYsIDAsIDExOTYxMiwgCi0gICAgNjQ3NDIsIDEyODY4MiwgMTIwMjgyLCAwLCA5ODM0NDIsIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3ODg0NywgMTg4NCwgCisgICAgNjQ3NDIsIDEyODY4MiwgMTIwMjgyLCAwLCA5ODM0NTAsIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3ODg0NywgMTg4NCwgCiAgICAgOTQ4MSwgNDI0MTgsIDcwMDU5LCA0MTE1NywgMCwgMTE5NSwgNjQ4OTgsIDc5MjQsIDAsIDQxMTUxLCAyMDEwLCAwLCAKICAgICA0MTMyOCwgNDIzNDQsIDAsIDEyNDA5LCAwLCA0MzYwLCAxMjcwMDksIDk3MzksIDEyODU1MCwgNjk5MzMsIDczOTIxLCAwLCAKLSAgICA0MjUyMSwgODUzOSwgOTgzNzE2LCAwLCAxMTg5ODYsIDAsIDQ3ODgsIDAsIDY4MDIzLCA2NTczNCwgOTgzNDQ3LCA0Mzc5MCwgCisgICAgNDI1MjEsIDg1MzksIDk4MzcyNSwgMCwgMTE4OTg2LCAwLCA0Nzg4LCAwLCA2ODAyMywgNjU3MzQsIDk4MzQ1NSwgNDM3OTAsIAogICAgIDAsIDEzMDc1LCA3NDQyOSwgOTQwNjMsIDY0NTY5LCA0MzUzMiwgMTA4MzcsIDI0OTIsIDEyNzE5NywgMTE4OTAxLCA2ODYzNywgCiAgICAgNDExMzYsIDQzNzg1LCAxMTgxMywgOTY0OSwgNDExNTQsIDExOTYxNywgNTEyOCwgNDAzOCwgNDExNDMsIDY1NjA0LCAKICAgICA2NDg1OSwgNDE1OTIsIDY3NzEsIDE2NDgsIDU0MzUsIDkxNzgzNywgNjczNCwgNDEzNDMsIDExOTg0OCwgNjU0MzksIAogICAgIDEyNzA5LCA2OTg2LCA5MjM2NCwgNjgwMTUsIDAsIDQxMzQ5LCA3MDAyMSwgMTI1ODEsIDEwMzc0LCA1MTc1LCAwLCA3MzgwNiwgCiAgICAgMTAyNTQsIDAsIDEwMjc4LCAxMDI2MiwgNjk4NTgsIDQxMzQ2LCAwLCA2MDcsIDAsIDExOTg1MiwgMTI4ODQ2LCAxMjkyMywgCiAgICAgMTAzMTQsIDEwMjgyLCA2NTQ3NywgMTAzNzgsIDEyMDI5NywgNDA5NzYsIDgyNjUsIDAsIDExOTgzNCwgNDA5NzUsIDU4NDAsIAotICAgIDQyODM4LCAwLCA0MDk3OCwgOTgzODg4LCAxMTk4NDAsIDAsIDk4MzA3MSwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAKKyAgICA0MjgzOCwgMCwgNDA5NzgsIDk4Mzg5NywgMTE5ODQwLCAwLCA5ODMwNzEsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgCiAgICAgMTE5ODM2LCA2Nzc5LCAwLCAwLCAzNTI1LCA2ODI0LCAxMTg4ODYsIDAsIDAsIDU2MTksIDY1ODIyLCAxMjY1NjcsIAogICAgIDE5NDg4MiwgNzQ1NSwgMCwgNTYxNiwgMTE0ODYsIDk2NTYsIDAsIDAsIDEwNzI3LCA1NjE1LCAwLCAxMjA1NTEsIDQyMzgwLCAKICAgICA2NDg5NSwgNDM2OTMsIDY2NDUxLCA4MDgsIDU0NTUsIDExMzQ3LCAwLCAxMDI2LCA1NjIwLCAxOTQ4ODcsIDAsIDExMzUwLCAKICAgICA1NjE3LCAwLCA5MjI1LCA2NDYzOSwgMTI3MDczLCA5MTQ1LCAxMjgwNjAsIDEzMzgsIDEyMDU4MSwgOTgzMTU4LCAxMjczOSwgCi0gICAgNDYwMywgMzA4NCwgOTgzMTU1LCA5MjQ4NCwgOTg1OCwgNjAzNywgMCwgMzk3NCwgNzgyMTMsIDEwMjkwLCA5ODM2OTUsIAorICAgIDQ2MDMsIDMwODQsIDk4MzE1NSwgOTI0ODQsIDk4NTgsIDYwMzcsIDAsIDM5NzQsIDc4MjEzLCAxMDI5MCwgOTgzNzA0LCAKICAgICAzMDgzLCAxMDMyMiwgMCwgMCwgMCwgNDEwMzYsIDAsIDAsIDQzMzIxLCA2NTYwNiwgMCwgNDEwMzIsIDQyMzg4LCAwLCAKICAgICA2NDcwMCwgMTAwMTEsIDE0NDUsIDQwOTYxLCAwLCAxMTkxMDUsIDAsIDQwOTYwLCAwLCAxOTQ4OTEsIDAsIDQwOTYzLCAKICAgICA2NDk1MiwgMTA0MDIsIDAsIDAsIDkyMzA0LCAxMDYwMywgMCwgMCwgOTgzMTEzLCAwLCA2NzE0LCAxMDA4MywgMTI3MDY5LCAKQEAgLTE4MjAyLDkgKzE4MjIxLDkgQEAKICAgICA0MTk3NiwgOTcyMCwgOTE3NjA2LCAxMTc2NywgNDE5NzAsIDE5NDU5NiwgNTgzNiwgMTIzNTgsIDAsIDQzNTUsIDkwNDgsIAogICAgIDEyMTgwLCA2NTAyNywgNjQ2ODAsIDEzMDM4LCA0MzY5OSwgMCwgNDE0ODgsIDEyODA4NywgODUyNywgMTk0OTE3LCAxMjM2MiwgCiAgICAgMTI0MzUsIDEyMzYwLCA0MTA1MywgMzI2NiwgMCwgMTIzNTYsIDg2MTYsIDQxNDY2LCAwLCA5MjU4OCwgMTE0NTAsIDAsIAotICAgIDM2MzgsIDEyMzU0LCAwLCAzMjE2LCAwLCAyMzU4LCA5MjYwNiwgODYzMywgMCwgOTgzNzM2LCAxMTkxODIsIDY5MjQ0LCAwLCAKKyAgICAzNjM4LCAxMjM1NCwgMCwgMzIxNiwgMCwgMjM1OCwgOTI2MDYsIDg2MzMsIDAsIDk4Mzc0NSwgMTE5MTgyLCA2OTI0NCwgMCwgCiAgICAgMCwgMTE3NTksIDE5NDkwMywgNjM2OCwgNzQ4MjMsIDAsIDQxNDIzLCA4MDc4LCAxMDUwNCwgMTI3NTU4LCA0MTY5OCwgCi0gICAgNDIyMzcsIDAsIDcwMDIsIDk4MzY2OSwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCA0MTQ3MywgCisgICAgNDIyMzcsIDAsIDcwMDIsIDk4MzY3OCwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCA0MTQ3MywgCiAgICAgMTA0NjYsIDEzMDk5LCAwLCAwLCAwLCA2NDM1LCAwLCAxMTM2MiwgMCwgMCwgNjUzODIsIDAsIDQxNDIwLCAwLCAzNjI1LCAKICAgICA3ODE1NywgNDE0MDksIDAsIDY5NjM5LCAyMDQxLCA5MTc4LCA5NjcyLCA0MTQyNywgNDM1NDEsIDQzMzE3LCAwLCAwLCAwLCAKICAgICA0MTQyNCwgOTE3NTk4LCAxMjA1NDYsIDAsIDEyODIxMiwgMCwgNDE0MTcsIDEyNjEsIDAsIDAsIDEyMTAyLCAxMTk2NjIsIApAQCAtMTgyMTQsOSArMTgyMzMsOSBAQAogICAgIDQxNDYxLCAxMjg4MjMsIDAsIDEyNzkxMiwgMCwgODgxOSwgMTI2NjMsIDAsIDQxMTg0LCA3NDAxNCwgMjMyLCA3NDgzNSwgCiAgICAgMTIwNjQ2LCA5MTY4LCA2NTc4NiwgMCwgMCwgMCwgOTA5NCwgMCwgMTE3NTgsIDY4NDI1LCAwLCAxMDY0LCA0MjQ2NywgCiAgICAgMTI4MDQ0LCAxMDExNSwgMTk5MjQsIDkyNzExLCAwLCA3ODYyLCA2NDU1MSwgMTMyMjQsIDg1MTYsIDQxODYyLCA2NjY1MCwgCi0gICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjEsIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCisgICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjksIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCiAgICAgMzc4NywgNDExNzQsIDAsIDQxNDU4LCAwLCA0MTQ2MywgNDI0MTMsIDExMjkyLCAyNDA2LCA3NzUsIDAsIDY1NTg0LCAKLSAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NDMsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKKyAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NTIsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKICAgICAxMjA2MDAsIDQxNDU2LCAwLCAxNTk5LCAxMTMzMywgMCwgNjcwMywgODUxMywgMCwgMTYxMywgMCwgNjg0NTYsIDEyNTk4LCAKICAgICA5ODMxOTEsIDEyMDczNCwgNzg3NDUsIDc0NTAwLCA0MTQ2MCwgMTAxNDUsIDEwNTQyLCA5OTM3LCA3ODc0NiwgNzAwMjksIAogICAgIDk5MDUsIDAsIDY1NzMwLCAwLCAxMjAzNzQsIDg0MjcsIDEyMDM3NSwgNTUyNDYsIDEyMDM3NiwgMCwgMTE0OTcsIDY0Njg3LCAKQEAgLTE4MjM2LDIxICsxODI1NSwyMSBAQAogICAgIDQxMjg3LCA5MjYxMCwgMCwgMCwgNDIyMTksIDEyODI1NywgMCwgNDE5ODcsIDQxNjc2LCA5ODMwNTksIDEyMDgyMywgCiAgICAgOTgzMTQ0LCA0MTY3MCwgMCwgOTI1OTAsIDI3OTYsIDU1MjkxLCAxMTY4MywgOTkwMiwgNzQ1MjEsIDY3OTg4LCAxMTQ1MSwgCiAgICAgOTgzMTExLCAxMjg4MjIsIDQyNjMxLCAyMzU5LCAwLCA2Nzg0NCwgNzQxNjQsIDQxMjM4LCA1NDgsIDExNDA1LCAxMzEzMywgCi0gICAgNjQzNjgsIDk4MzIzMywgMTI4Nzk1LCAwLCAzOTcsIDQzNjIyLCA0MjEzOSwgOTU0NywgOTU5MCwgMTI4MjM4LCAxNjE0LCAKKyAgICA2NDM2OCwgOTgzMjM5LCAxMjg3OTUsIDAsIDM5NywgNDM2MjIsIDQyMTM5LCA5NTQ3LCA5NTkwLCAxMjgyMzgsIDE2MTQsIAogICAgIDQzNjYxLCA2NDM1NiwgNjYzMDcsIDY2NTEsIDEzNTgsIDAsIDQyOCwgOTYyMCwgMTQ2NiwgNzgxMTIsIDEwOTgyLCAKICAgICAxMTg4MzEsIDEzMzMsIDcxMDQsIDQwNywgNjQyNSwgMTI4ODM0LCA3NDI1MywgMCwgMCwgMCwgNTgwNCwgMTE5NzYsIDg1NTQsIAogICAgIDkyNzIxLCAwLCAwLCA5MDU3LCA0MjI5NCwgNDEyMTgsIDAsIDAsIDc4MTM3LCAxODgzLCAxMDk1MiwgODA0OCwgNzgxNDIsIAotICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY2NywgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAorICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY3NiwgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAogICAgIDg0NDgsIDcxNDEsIDc0MTgzLCAwLCAxMjY3NSwgMTI2NTksIDAsIDQyMzYzLCAxMjA2MjQsIDE5NDgyNCwgNTUyNzMsIAogICAgIDEwNzY2LCAxMjAxMiwgMjM4NiwgNjQ3MzIsIDkxNzAsIDkxNzgyMSwgOTEyMywgNjQ1ODUsIDEyMDUwMCwgMTE5MTU4LCAKICAgICA3MTQwLCAxMDk3NywgMTI3Mzc4LCA0MTY0LCA5MDgxLCAwLCAxMjA1NjksIDQyMDQ5LCA0MjA0MiwgODcwOSwgMTI4MjgzLCAKICAgICAxMjY0NzcsIDEyMDYzNywgNDI0MTksIDY0Nzk5LCA0MjA0NywgMCwgMCwgODQ3MCwgMTE4MDcsIDY1ODk3LCA1NzcsIDAsIAotICAgIDk4Mzc1MSwgNzQzMDAsIDAsIDEyNzMwOCwgNzQ4NDAsIDAsIDAsIDEyODc5MSwgOTIyMjQsIDg3MzYsIDE0MTQsIDQyNjQzLCAKKyAgICA5ODM3NjAsIDc0MzAwLCAwLCAxMjczMDgsIDc0ODQwLCAwLCAwLCAxMjg3OTEsIDkyMjI0LCA4NzM2LCAxNDE0LCA0MjY0MywgCiAgICAgOTY4MywgNDM0ODYsIDc0MzQ0LCAwLCAyNTM2LCAwLCA2NjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzMTcsIDY5OTQ1LCAKICAgICA2NjMxNSwgMjEwNiwgMTIwMjIyLCAxMTI3MywgMCwgNDMwMDQsIDc1NDEsIDAsIDAsIDk2MSwgNjQzMDcsIDY2MzI0LCAKICAgICA2NDkwNiwgMTI4NTkxLCAzMTA2LCA2NTkxNywgNDEyODQsIDE2OTYsIDAsIDg5MSwgMTIxMDUsIDAsIDQyNjI0LCAxMjgwMiwgCiAgICAgMzI2NCwgODgyNCwgMTMyNjgsIDQzMDAzLCAxMDkzNiwgMCwgMCwgMCwgMTk0ODI2LCA5MjY4OCwgMCwgMjMyMiwgMTIwMzcxLCAKLSAgICA5ODM1ODQsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMTI4NzkzLCA5ODMzOTAsIDQzMjE2LCAKKyAgICA5ODM1ODQsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMTI4NzkzLCA5ODMzOTgsIDQzMjE2LCAKICAgICA2MDg5LCA3ODY4MiwgMCwgMTIwNTc4LCA0MTcwLCAxMDI5LCAxMjc3NjEsIDEyNzAzNiwgMTE5MjI0LCA0MjM3NCwgMCwgCiAgICAgNzQ0LCAwLCAwLCAwLCA2NTgyMywgMTI3ODI2LCAwLCAzNTUxLCAwLCAwLCA0NjIzLCA1NTI2OCwgMCwgNDU5OCwgOTgzMTYyLCAKICAgICA2NTEzNiwgMTI3MTM2LCAwLCAwLCAxMDg1MSwgMCwgNjE3OSwgOTI2MDIsIDYxODAsIDAsIDExOTUyLCAxMjA3NzgsIApAQCAtMTgyNjAsMTAgKzE4Mjc5LDEwIEBACiAgICAgMjMwOCwgMCwgNzQxNDksIDAsIDIzMTgsIDk4MzE4MywgNjYzNjEsIDgxOTgsIDAsIDY0MzYwLCAxMjYwMSwgNDI1MzYsIAogICAgIDY1MjY2LCAxMjA4MjcsIDc0MzA3LCA5MjQ2MiwgNjk3MCwgNTQwNCwgNDMzMzIsIDM2NjcsIDc5MzYsIDEyOTI1LCAKICAgICAxMjY5ODksIDYzODUsIDAsIDAsIDExODk0OSwgMTA4NzQsIDY1NTA1LCAxMjgwODMsIDAsIDQyMDUzLCAyMDc1LCA0MjA1NywgCi0gICAgMTEwODMsIDQyMDUyLCAwLCAwLCA2NzY1MSwgMCwgOTY2NSwgOTIzMDAsIDk4MzY1NywgMTMxODEsIDAsIDAsIDAsIDcwMDg4LCAKLSAgICA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCA5NDA5NiwgOTgzOTM3LCAKKyAgICAxMTA4MywgNDIwNTIsIDAsIDAsIDY3NjUxLCAwLCA5NjY1LCA5MjMwMCwgOTgzNjY2LCAxMzE4MSwgMCwgMCwgMCwgNzAwODgsIAorICAgIDc0MTQ4LCAwLCAwLCAxMjAyMjUsIDEyMDIyOSwgMTIwMjI0LCA3NDE3MiwgNDExNDUsIDAsIDk0MDk2LCA5ODM5NDYsIAogICAgIDQxMTQ4LCA4NjgzLCA3NTk0LCAxMjc1MTksIDAsIDExOTA5MCwgMTA4NjksIDQzNDU4LCA0MTE0NiwgOTI0MDcsIDExNDQxLCAKLSAgICAwLCAzNTEyLCAxMTk2MzMsIDk4MzcwMCwgODEwMywgMCwgMCwgNjUxODQsIDExNzgwLCA0MTU2MywgNDI3OTYsIDAsIAorICAgIDAsIDM1MTIsIDExOTYzMywgOTgzNzA5LCA4MTAzLCAwLCAwLCA2NTE4NCwgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgCiAgICAgNjk3NDIsIDQxNTQ0LCA2NTE0NiwgMCwgMCwgMCwgMCwgMTk5NDIsIDAsIDExODkwOCwgNzk4OCwgMTA0MzYsIDc0MjczLCAKICAgICAzMjcxLCA3MzgwNCwgNjQ3MTEsIDAsIDk0MDY0LCAwLCAwLCAzODA0LCAxMzA3MCwgMTE1NTcsIDQyMDQ0LCAwLCAxMDk1LCAKICAgICAwLCAzNTk5LCAxMjc3NzQsIDAsIDEyODg2MSwgODUxNCwgMCwgMCwgMCwgNzQzNDYsIDY2Njk3LCAwLCAxMTY4NCwgMCwgCkBAIC0xODI3MiwyMyArMTgyOTEsMjMgQEAKICAgICAwLCAxMjc3NzIsIDAsIDkxNzU0MiwgMCwgMCwgNjUzOSwgMCwgMCwgMCwgMTk0ODU2LCAwLCAxMjA0OTIsIDQxMTkwLCAKICAgICAzOTczLCAxMTkzNjUsIDQ1NzUsIDQxMTkzLCA3OTgyLCA0MjksIDAsIDEyNzE5NCwgMCwgMTk0ODU0LCA2NTc5MiwgMCwgCiAgICAgMTE4OTY4LCA2NDE3LCAxMTg5MTgsIDc4MTc4LCAwLCAxOTQ4NTAsIDAsIDAsIDQ5MTksIDEwNTkwLCAxMjg1NTYsIDc3NTUsIAotICAgIDAsIDAsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgOTgzNjU5LCAKKyAgICAwLCAwLCA2NDU0OCwgMTIwNTA2LCAxNjIxLCAxMDIxNCwgNjUxMjYsIDAsIDEyNzAwNCwgMCwgMTIxODgsIDk4MzY2OCwgCiAgICAgMTYxNywgODA1MCwgMCwgNTAxNSwgMCwgMTE5MTc0LCA0MjU5MCwgMTk0ODcxLCAxNzU2LCA3ODE4MSwgMCwgNjU3NjgsIAogICAgIDYzNTIsIDQxODkyLCAwLCA3NTU1LCAxMzEwMywgNTQwOCwgMjgxNywgMTIxNCwgNjk5MTksIDkyMzM1LCA5ODMxMjUsIDAsIAogICAgIDAsIDAsIDEyNzE5NSwgNzk1NywgODY4OSwgNjQ3MjMsIDEwNTYsIDQyODk2LCA3NDE0NywgMTk0ODEzLCAwLCA1NTI4NiwgCi0gICAgNzA3MywgNjU4NTAsIDEyMzI3LCA5ODM5MzksIDExOTAyOCwgMCwgMCwgMCwgMjM0MSwgODQ1MCwgODQ4NCwgODQ3NCwgCi0gICAgOTgzMjUyLCAwLCA3MDA3OSwgODQ2MSwgMTI4MTAyLCAxMjE1MywgMTI3OTksIDAsIDQzNzA5LCA0MzcwOCwgOTQ1MSwgCi0gICAgNzU3MSwgMTMwNzMsIDAsIDAsIDY4MSwgOTgzMjQ2LCA3MDMsIDAsIDMyNzIsIDg3ODEsIDEyODk0LCA3MDA3NywgMTE3MDksIAorICAgIDcwNzMsIDY1ODUwLCAxMjMyNywgOTgzOTQ4LCAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIDg0ODQsIDg0NzQsIAorICAgIDk4MzI2MCwgMCwgNzAwNzksIDg0NjEsIDEyODEwMiwgMTIxNTMsIDEyNzk5LCAwLCA0MzcwOSwgNDM3MDgsIDk0NTEsIAorICAgIDc1NzEsIDEzMDczLCAwLCAwLCA2ODEsIDk4MzI1MiwgNzAzLCAwLCAzMjcyLCA4NzgxLCAxMjg5NCwgNzAwNzcsIDExNzA5LCAKICAgICA5MjI4OCwgNzQ0NDYsIDAsIDkyNTMyLCAwLCAxMTMzOCwgMTIwNzY4LCAzMjc2LCAwLCAwLCA2NTkyOCwgMCwgMCwgNjUwMjEsIAogICAgIDY0Nzk1LCA3NDU3NCwgMCwgMTAwNDcsIDc4ODE0LCAzMjYyLCA3ODgxMSwgNDI3MTEsIDAsIDAsIDY4NDc4LCAxNjMsIDU3NiwgCiAgICAgOTg5NSwgMTY1NSwgNzg4MTcsIDc0NTkxLCA3ODgxNSwgNzg4MTYsIDk4MzEyMiwgMCwgMCwgMCwgMTAwMzksIDAsIAotICAgIDk4MzkzNiwgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDExMDM2LCA2NTI1MiwgOTIzODIsIDAsIDAsIDAsIAorICAgIDk4Mzk0NSwgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDExMDM2LCA2NTI1MiwgOTIzODIsIDAsIDAsIDAsIAogICAgIDY3ODQ4LCAwLCAwLCAwLCA4ODg3LCAxMjc1MjEsIDcyOTUsIDExMDMxLCAwLCA0MzE1NywgMCwgODk0NiwgMTAzNDgsIAotICAgIDEwNDEyLCA4NzU1LCAwLCAwLCA1NzE4LCAxMzIyMSwgMCwgMCwgNzgxMzUsIDAsIDk4MzcwMiwgODgxMCwgNzQ0OTksIDY4NiwgCisgICAgMTA0MTIsIDg3NTUsIDAsIDAsIDU3MTgsIDEzMjIxLCAwLCAwLCA3ODEzNSwgMCwgOTgzNzExLCA4ODEwLCA3NDQ5OSwgNjg2LCAKICAgICAwLCA3MTM2MiwgNDYxOSwgMTE4OTU0LCA2NjU0LCA3Mzc2OSwgNzQ0MjYsIDAsIDEyMDQwLCA2NTY4OSwgMTAxMjgsIAotICAgIDY1MTE4LCAwLCAxMTkxNTEsIDc0MjA1LCA5MjY1MSwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDk4MzYzOSwgMCwgNjU0NTUsIAorICAgIDY1MTE4LCAwLCAxMTkxNTEsIDc0MjA1LCA5MjY1MSwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDk4MzY0OCwgMCwgNjU0NTUsIAogICAgIDAsIDkyMjQ2LCAwLCAxMTkxMjksIDAsIDEyODg2LCAxMjc5MjAsIDY2NjI0LCAwLCA0MzU1NywgMTAzMDAsIDEwMTYxLCAKLSAgICAxMDM5NiwgNzQxMzUsIDk4MzQ0NSwgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCAKKyAgICAxMDM5NiwgNzQxMzUsIDk4MzQ1MywgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCAKICAgICA0MTQ3NSwgMTI4NjcyLCA5Mzk3NSwgMCwgMTE0NzksIDAsIDEyMDM1NiwgNjM1MCwgMTI4NjQsIDY5Njc0LCA3ODExNCwgCiAgICAgMTA2MSwgNjQ3ODAsIDIwMDEsIDQzMTExLCA1NTIzMCwgMTI4Njg2LCA0MDUyLCAwLCA3NjI2LCAwLCAwLCAxMDQ1LCAwLCAKICAgICA1NjMxLCA0MTExMywgMCwgMCwgNDM3MDcsIDc0MTI3LCAwLCAwLCA4NDg2LCAwLCA3Mzc1OCwgMjMzNSwgNDM2MiwgCkBAIC0xODMwNCw4ICsxODMyMyw4IEBACiAgICAgOTIyNDUsIDQ0MCwgMCwgMTMwODUsIDkyMzMsIDc0MjE2LCAwLCAwLCA5OTU3LCAxMjgyODUsIDY2NDQ3LCA4MDQ2LCAKICAgICA2NDk2MywgNjU3NzcsIDEwMTI1LCA3NDIxMiwgNDI4MTksIDEwOTEwLCAwLCAxNTIxLCA5ODk2LCA5Mzk2NSwgMTA0ODcsIAogICAgIDY5ODc4LCAxMjUyNywgMCwgNzk3MCwgMCwgMTI4NjYwLCAwLCA2NTc2OSwgNTI0MywgOTg0OSwgNTIzOSwgNjU3NzEsIAotICAgIDk4MzIyOSwgMCwgNTIzNywgNjk3MTQsIDAsIDEwMTAzLCA1MjQ3LCA0NzY5LCAwLCAxMTg5NzcsIDEyODczLCAyMjgzLCAKLSAgICA5ODMyMzEsIDAsIDMwMDgsIDQ4OTYsIDAsIDEyMDg3LCAwLCA1NTIzMSwgNDExMDMsIDAsIDY0NTY1LCA0NzczLCAwLCAKKyAgICA5ODMyMzUsIDAsIDUyMzcsIDY5NzE0LCAwLCAxMDEwMywgNTI0NywgNDc2OSwgMCwgMTE4OTc3LCAxMjg3MywgMjI4MywgCisgICAgOTgzMjM3LCAwLCAzMDA4LCA0ODk2LCAwLCAxMjA4NywgMCwgNTUyMzEsIDQxMTAzLCAwLCA2NDU2NSwgNDc3MywgMCwgCiAgICAgOTI3MTcsIDcwMDc0LCA0NzcwLCAwLCA5MTc1NjcsIDg3MzEsIDY1Mzc4LCAxMjczNjIsIDEyMDYxOSwgOTEyMiwgMTI4MDMzLCAKICAgICAxMjY2MDAsIDQ3NzQsIDMwMTksIDk5OTcsIDEyODM0LCAwLCA5NDU2LCAxMDIxNSwgMTIwNTQ3LCAwLCAwLCAwLCAwLCAKICAgICA3NDc3NiwgNDI4MSwgNDc2OCwgMCwgNDE1MzUsIDQwOTksIDkwMTcsIDAsIDAsIDc4MDk1LCAwLCA3ODA5NiwgMCwgMCwgMCwgCkBAIC0xODMxOSwxMCArMTgzMzgsMTAgQEAKICAgICA3NjM0LCA2NTE2NywgOTg0NSwgMCwgMCwgNTcwMSwgOTcyMiwgNDE0OTAsIDk4MzE1MywgMTQyNiwgNjgyMTcsIDAsIAogICAgIDY4NDQ3LCA0MjIwNCwgNTUyNzAsIDg1NzEsIDE5NDk5MSwgNzgwNjcsIDAsIDc4ODE4LCA5MjcxOSwgNDMxODIsIDEyMTg0LCAKICAgICAwLCA0MjAyMiwgMCwgMTAyODEsIDAsIDU2NTAsIDQzMTk0LCA2NDcxMiwgMTA3NDQsIDAsIDk5MCwgNTY0NywgMCwgNzM4NywgCi0gICAgNzg3MzQsIDQxMTE0LCAxMTQ3NywgNTY0NiwgMTI4NzksIDExMDE4LCA5ODM5MjEsIDM5NDUsIDkyNTg5LCAwLCAwLCAwLCAwLCAKKyAgICA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDk4MzkzMCwgMzk0NSwgOTI1ODksIDAsIDAsIDAsIDAsIAogICAgIDc4MjEyLCAxMjc3NDYsIDEwMjAsIDczNzYzLCAwLCA3ODczMSwgNTY0OCwgNjQ3NDgsIDE5NDkxMCwgNzg3MzMsIDEwMjA1LCAKLSAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NDYsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAotICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY1MywgMTE4ODM2LCA5ODM3MzksIDc4NDI3LCAxMTQwLCAKKyAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NTUsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAorICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY2MiwgMTE4ODM2LCA5ODM3NDgsIDc4NDI3LCAxMTQwLCAKICAgICA3ODQyNiwgMCwgMTAxNTksIDAsIDAsIDgxMjgsIDAsIDAsIDkxNzk2NSwgMTgxNSwgMTk5MTAsIDg5MCwgMCwgMzI2NywgCiAgICAgOTIyOTEsIDAsIDEwMTIzLCAwLCA0NDEwLCAxMDQxLCAxMDU3NiwgNjM1NCwgOTI1ODEsIDU4MCwgNzQyMzIsIDAsIAogICAgIDEyODM0NywgMCwgMCwgMCwgMTk5MzgsIDY1OTA2LCAxMjc4MTksIDAsIDAsIDMyOTgsIDUzNzUsIDEwMTQyLCAwLCA4MjE1LCAKQEAgLTE4MzMzLDE2ICsxODM1MiwxNiBAQAogICAgIDQxNTIxLCAxMTg5MzQsIDQ5NCwgMTMyNTAsIDAsIDY1MDk4LCA2MzY0LCA5NTYsIDAsIDEyODMwLCAxMDQ2MiwgNzM3NDAsIAogICAgIDczNzM0LCAwLCAwLCAwLCA2NjQ0OSwgMTMyNjMsIDc0MjgxLCA2OTIxNywgMTMxNzEsIDEyNzc5NiwgMCwgMCwgOTIyOTQsIAogICAgIDAsIDEwNDQsIDQxMjc2LCAwLCAwLCAwLCA0MjA2OCwgMTE3OTUsIDAsIDAsIDAsIDAsIDQyNDUwLCAzOTA3LCAwLCA2NDUyNiwgCi0gICAgMTE4MjksIDY4MTk3LCAxMjI5NSwgMCwgMTE0NzUsIDAsIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgOTgzNDQ2LCA3MDk4LCAwLCAKKyAgICAxMTgyOSwgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCA5ODM0NTQsIDcwOTgsIDAsIAogICAgIDAsIDEwNTcsIDU2NiwgNDI2OTYsIDAsIDMwMTYsIDQyMjc0LCA0MzQ2NCwgNjY0OTAsIDEyOTIxLCA2NjU3MSwgNzg0NzIsIAogICAgIDkyNTEwLCAzMDA2LCA0NjIwLCAxMjcyMzcsIDk4MzU3OCwgMCwgMCwgNjQ2NTksIDAsIDEyNzc0OSwgNTUyNTMsIDYzNTcsIAogICAgIDYzNjIsIDg2MjYsIDcxMzM3LCAyMjE2LCA5MDkwLCA2NTM3NywgNDE1OTYsIDAsIDQyOTIwLCAxNjk4LCAwLCA2NDQ3NywgMCwgCiAgICAgNDM4MTMsIDEwNTMsIDAsIDc4MjY5LCAwLCAxMjY1ODYsIDEwNTIsIDEwNTEsIDQ1OSwgMTA2MCwgNzQzNDksIDY2NDc5LCAwLCAKICAgICAwLCAwLCAwLCA0MjQ5MCwgNjg5LCA2NTA4LCA0MTYzLCA0MjI5OCwgODYzOSwgNjY2NDEsIDQyNDYsIDAsIDAsIDEyMTMwLCAKLSAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMTI3ODUwLCAwLCAwLCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzU5LCAwLCAKKyAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMTI3ODUwLCAwLCAwLCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzY4LCAwLCAKICAgICAwLCAxMjcyNzQsIDAsIDYzNTgsIDYzNjEsIDE5MjYsIDYzNTYsIDkyNjI3LCA3ODk4LCA4MTEwLCAxMDkzNSwgMCwgMTAwNjksIAotICAgIDU4MzAsIDAsIDQzNjg1LCAwLCAwLCAwLCAwLCA4NjkzLCA3ODYxMSwgMTE5NTY1LCA5ODM3OTksIDEyMDQxMywgMCwgCi0gICAgMTI3MjU3LCA2NTg5NCwgMCwgMCwgMCwgOTgzOTE0LCAwLCAwLCAxMTkxODcsIDIxMzUsIDc4ODY4LCAwLCAwLCA3ODg2OSwgCisgICAgNTgzMCwgMCwgNDM2ODUsIDAsIDAsIDAsIDAsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDk4MzgwOCwgMTIwNDEzLCAwLCAKKyAgICAxMjcyNTcsIDY1ODk0LCAwLCAwLCAwLCA5ODM5MjMsIDAsIDAsIDExOTE4NywgMjEzNSwgNzg4NjgsIDAsIDAsIDc4ODY5LCAKICAgICA0MjMxMywgNTU3OSwgOTI0MTIsIDAsIDk4MzA4MiwgOTQwMDIsIDAsIDU1NzgsIDQxNzc0LCAxMjgxMTUsIDQyMDIzLCAKICAgICA2MjM0LCA1NjY5LCA5MjI3NSwgMCwgMCwgMCwgMTI3NTA2LCA2ODIwMiwgNTU4MywgMCwgMCwgNDI0MjYsIDU1ODAsIAogICAgIDQyMjc2LCAyOTIzLCA4OTIsIDIyMjAsIDQyNDY1LCA0MTMzMCwgMTk0OTg3LCA1Nzk1LCA2NTUxMiwgMTE5MDA2LCA2NTcwMiwgCkBAIC0xODM1Miw3ICsxODM3MSw3IEBACiAgICAgNjQ5MDAsIDcxNTMsIDYwOTUsIDQxODY1LCAwLCAzMDE1LCAxMjgwMjMsIDEyNjQ2NSwgNTIxMSwgOTgzMDgzLCA2NDAwLCAwLCAKICAgICAxOTQ5ODMsIDcwMDU0LCA4MTg5LCAxMTI3NiwgMCwgMCwgMzcyLCAxMjg4MjksIDAsIDExODg3NCwgNDIxMDIsIDQxNTg1LCAKICAgICAxMjgyMDIsIDAsIDQyMTAxLCAyNzYsIDc4NDAyLCAwLCAzMywgNzQyMjYsIDEyNzMwMywgOTAwNywgMTE4Nzk2LCA0MTU4OCwgCi0gICAgNjYwMzMsIDQyNywgMTA3NjMsIDExODgxOSwgMCwgMTI3ODg0LCAwLCAxMDMxLCA2MjU3LCAwLCA0MjEwNCwgMCwgOTgzOTcxLCAKKyAgICA2NjAzMywgNDI3LCAxMDc2MywgMTE4ODE5LCAwLCAxMjc4ODQsIDAsIDEwMzEsIDYyNTcsIDAsIDQyMTA0LCAwLCA5ODM5ODAsIAogICAgIDIzMjgsIDkyNDA5LCAxMDcxLCA0Mjg5OSwgMCwgNzQ4NDgsIDAsIDk4MzU4MCwgMCwgMTA0NywgMCwgMCwgNjQ3OTAsIDAsIAogICAgIDY5NzIzLCAxMDY1MSwgMCwgMCwgMCwgMCwgOTIyMDYsIDExOTE4MSwgNTcxMSwgNDE2MzMsIDEyMDk4LCA2NTU3MSwgOTE2NiwgCiAgICAgMCwgNTcxMCwgMCwgNjc5MCwgNjUxNjgsIDEzMjE2LCAwLCA2OTcxNiwgNjk3MjYsIDAsIDY0NjExLCA0MTYyMywgMTk1MDAxLCAKQEAgLTE4MzYxLDEyMCArMTgzODAsMTIwIEBACiAgICAgOTE5NiwgNjk2NzAsIDAsIDAsIDAsIDAsIDExODkxMSwgMCwgMCwgMCwgMCwgMCwgMTIwMDEwLCAwLCA4NzAxLCA2ODEzMCwgCiAgICAgMTE5NjE2LCAxMjA1MjIsIDAsIDQyNDc3LCAxOTQ5OTQsIDEyMTIzLCA0NDk1LCA0MzU2OSwgMCwgMCwgMCwgNjQ5NDYsIAogICAgIDEwOTkyLCAwLCAxMjAwMDksIDAsIDAsIDkzMTgsIDkzOTg2LCAxMzI0OSwgNjU2NzksIDczODA4LCAwLCA2NTQ1NywgCi0gICAgNDIyNDksIDc2MzksIDQzOTk1LCA2Nzg0NSwgNDI2NDEsIDU0NTQsIDAsIDAsIDE5NDk5NywgMTIwMDA1LCAwLCA5ODM5NTcsIAorICAgIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIDEyMDAwNSwgMCwgOTgzOTY2LCAKICAgICA1MDg0LCAwLCAwLCAxMTg4NjEsIDAsIDczMywgOTE3ODc2LCA3ODAxNCwgNzg0MzYsIDc4NDM1LCA0MTY3NywgMCwgOTIxOCwgCi0gICAgMTczMSwgMCwgOTgzNzM3LCAwLCA2Nzk5MCwgMCwgMCwgMCwgMTIwMDAxLCAxMjcwMTgsIDkyNDkyLCA1MTU1LCAxMjAwMDAsIAotICAgIDUzNTgsIDk4MzczNSwgMCwgOTE3NzY3LCA2NDQyNCwgOTgzMjI1LCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDc4MzE1LCAKKyAgICAxNzMxLCAwLCA5ODM3NDYsIDAsIDY3OTkwLCAwLCAwLCAwLCAxMjAwMDEsIDEyNzAxOCwgOTI0OTIsIDUxNTUsIDEyMDAwMCwgCisgICAgNTM1OCwgOTgzNzQ0LCAwLCA5MTc3NjcsIDY0NDI0LCA5ODMyMzEsIDM4NDAsIDY0MzE0LCA0MTQzMiwgMCwgNzgzMTUsIAogICAgIDY4NDMwLCA2Nzk4MCwgNDMyNTMsIDY1OTQzLCAwLCAzMzcxLCAxMDk4OCwgMCwgODc3MSwgMTQ3OSwgMCwgMCwgMTEwOSwgCi0gICAgMTE1ODAsIDAsIDY0NjAxLCAxMjIwNSwgMCwgMCwgNjQ1MDcsIDg4NjgsIDM5OSwgNjc5NzgsIDc0ODQyLCA5ODMyNzYsIAotICAgIDk4MzcxMiwgMTIxNDksIDEzMDg4LCA1NTEsIDAsIDEwMTU2LCAxMjExOSwgOTI1NzIsIDAsIDI1NDQsIDY1MDc0LCAKKyAgICAxMTU4MCwgMCwgNjQ2MDEsIDEyMjA1LCAwLCAwLCA2NDUwNywgODg2OCwgMzk5LCA2Nzk3OCwgNzQ4NDIsIDk4MzI4NCwgCisgICAgOTgzNzIxLCAxMjE0OSwgMTMwODgsIDU1MSwgMCwgMTAxNTYsIDEyMTE5LCA5MjU3MiwgMCwgMjU0NCwgNjUwNzQsIAogICAgIDExOTIxMSwgMCwgMCwgNzgwMTEsIDM1MSwgMTE5MTQ5LCAwLCAwLCA1NTIyOSwgMCwgNzQyNjgsIDAsIDAsIDAsIDQyMzc3LCAKLSAgICAwLCAwLCAwLCA5ODM5MTUsIDAsIDkwMTMsIDQwNTQsIDAsIDk4MzU3MCwgMCwgMCwgNzM5NjAsIDU1ODUsIDY1ODgxLCAKKyAgICAwLCAwLCAwLCA5ODM5MjQsIDAsIDkwMTMsIDQwNTQsIDAsIDk4MzU3MCwgOTgzNjI4LCAwLCA3Mzk2MCwgNTU4NSwgNjU4ODEsIAogICAgIDI1NDksIDc0NDY5LCAwLCAwLCA1NTg0LCA4MzU4LCAwLCA2NDIxNSwgOTIyMTksIDEwOTE5LCAwLCA3OTgwLCAxMjY2MDEsIAotICAgIDk4Mzc3NSwgMjIxOCwgNDE4MDAsIDU1ODksIDAsIDI2NjQsIDQxNjEzLCA1NTg2LCAxMTg4OTAsIDAsIDExMzU2LCAwLCAwLCAKKyAgICA5ODM3ODQsIDIyMTgsIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgNTU4NiwgMTE4ODkwLCAwLCAxMTM1NiwgMCwgMCwgCiAgICAgNDM0NTIsIDc4NjA5LCAwLCA0MjU3MywgNjc4NTYsIDAsIDc4MTI5LCAwLCAwLCA3NDM5MiwgODEzNSwgNjQ1MCwgMTAwNTUsIAogICAgIDc3OTk2LCAwLCAwLCAxMTkyMjUsIDU2NTcsIDAsIDk2MjYsIDAsIDc3OTk0LCAxMDE3OSwgNTY1NCwgMTI5MzksIDkyNTczLCAKICAgICAxMjA3OTksIDAsIDAsIDU2NTIsIDEwOTQ1LCAwLCA2NjQ4NiwgMCwgMzY2MSwgNzg2MywgMCwgMCwgMCwgNzQ1MDksIAotICAgIDk4Mzg0MywgNTY1OSwgMCwgNzg2OTIsIDY2NzI5LCA1NjU1LCAwLCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAxMjc3OTIsIAotICAgIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIDEwMzA0LCAKLSAgICAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4NzgsIDY0ODcwLCAwLCAzNDY3LCA5ODM4ODIsIDAsIAotICAgIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIDcwMDM2LCAKLSAgICA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MTcsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIDYzOTk0LCAKLSAgICAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzE1LCA2NDU1NiwgMCwgMCwgNTY2OCwgCi0gICAgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAxOTk1MiwgCi0gICAgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIDE0OTcsIAotICAgIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCA2Nzg5NiwgCi0gICAgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgNjU5MTIsIDAsIAotICAgIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIDk0MTA1LCAKLSAgICA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4Mzc5NywgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAxMjg4MzIsIAotICAgIDk4Mzg0MiwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIDEyNzI3MCwgCi0gICAgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgOTgzODAwLCAKLSAgICA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCA1NjM1LCAKLSAgICAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgMCwgMCwgCi0gICAgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY3NiwgNzgzMDAsIAotICAgIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIDExNzA1LCAKLSAgICA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAxMDU4LCAKLSAgICAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAwLCAKLSAgICA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIDY3NjIxLCAKLSAgICAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgNjU4MjYsIAotICAgIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIDY1Mzc2LCAKLSAgICAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgMTAwMzAsIDUzMDYsIAotICAgIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCA5NzEwLCAwLCAwLCAKLSAgICAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIDEyMTcxLCAxMTkyNDAsIAotICAgIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5MCwgMTMwOCwgMCwgMjUzNCwgCi0gICAgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCA3NDQ3MCwgNjY2MTgsIAotICAgIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgOTgzMTY3LCAyOTgwLCAKLSAgICA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIDkyMjc2LCA0NDAxMSwgCi0gICAgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCA5MzUsIDAsIDY1ODQwLCAKLSAgICAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIDQyMzQxLCA2NTI4NCwgCi0gICAgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgMTE5MjE3LCA3MjQ4LCAwLCAKLSAgICAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgNzgyMjYsIDEyODc3NSwgCi0gICAgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCA2NjU3NSwgNDU0MiwgCi0gICAgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIDk4MzkwOSwgCi0gICAgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCA5ODk4LCAKLSAgICA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc4NiwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgNDQwOSwgMCwgCi0gICAgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIDY1MjMxLCAKLSAgICA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIDAsIDU2ODUsIAotICAgIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCA0MzYzNSwgCi0gICAgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAxMDkzOCwgMCwgCi0gICAgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIDEwNzkwLCAKLSAgICAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkyOSwgMTEzNzYsIAotICAgIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCA3ODMwNSwgCi0gICAgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCA0MTg3MSwgCi0gICAgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgMTI3OTM3LCAwLCAKLSAgICA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgMTE5NDgsIAotICAgIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAxMDAzMSwgCi0gICAgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgMCwgCi0gICAgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkyNywgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKKyAgICA5ODM4NTIsIDU2NTksIDAsIDc4NjkyLCA2NjcyOSwgNTY1NSwgOTgzNjI2LCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAKKyAgICAxMjc3OTIsIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIAorICAgIDEwMzA0LCAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4ODcsIDY0ODcwLCAwLCAzNDY3LCAKKyAgICA5ODM4OTEsIDAsIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIAorICAgIDcwMDM2LCA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MjYsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIAorICAgIDYzOTk0LCAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzI0LCA2NDU1NiwgMCwgMCwgCisgICAgNTY2OCwgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAKKyAgICAxOTk1MiwgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIAorICAgIDE0OTcsIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCAKKyAgICA2Nzg5NiwgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgCisgICAgNjU5MTIsIDAsIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIAorICAgIDk0MTA1LCA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4MzgwNiwgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAKKyAgICAxMjg4MzIsIDk4Mzg1MSwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIAorICAgIDEyNzI3MCwgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgCisgICAgOTgzODA5LCA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCAKKyAgICA1NjM1LCAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgCisgICAgMCwgMCwgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY4NSwgCisgICAgNzgzMDAsIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIAorICAgIDExNzA1LCA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAKKyAgICAxMDU4LCAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAKKyAgICAwLCA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIAorICAgIDY3NjIxLCAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgCisgICAgNjU4MjYsIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIAorICAgIDY1Mzc2LCAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgCisgICAgMTAwMzAsIDUzMDYsIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCAKKyAgICA5NzEwLCAwLCAwLCAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIAorICAgIDEyMTcxLCAxMTkyNDAsIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5OSwgCisgICAgMTMwOCwgMCwgMjUzNCwgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCAKKyAgICA3NDQ3MCwgNjY2MTgsIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgCisgICAgOTgzMTY3LCAyOTgwLCA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIAorICAgIDkyMjc2LCA0NDAxMSwgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCAKKyAgICA5MzUsIDAsIDY1ODQwLCAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIAorICAgIDQyMzQxLCA2NTI4NCwgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgCisgICAgMTE5MjE3LCA3MjQ4LCAwLCAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgCisgICAgNzgyMjYsIDEyODc3NSwgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCAKKyAgICA2NjU3NSwgNDU0MiwgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIAorICAgIDk4MzkxOCwgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCAKKyAgICA5ODk4LCA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc5NSwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgCisgICAgNDQwOSwgMCwgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIAorICAgIDY1MjMxLCA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIAorICAgIDAsIDU2ODUsIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCAKKyAgICA0MzYzNSwgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAKKyAgICAxMDkzOCwgMCwgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIAorICAgIDEwNzkwLCAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkzOCwgCisgICAgMTEzNzYsIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCAKKyAgICA3ODMwNSwgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCAKKyAgICA0MTg3MSwgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgCisgICAgMTI3OTM3LCAwLCA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgCisgICAgMTE5NDgsIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAKKyAgICAxMDAzMSwgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgCisgICAgMCwgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkzNiwgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKICAgICA2ODYyNCwgMCwgODMyLCAxMjA2OTMsIDEyMDc3MCwgNzg0NzMsIDY2MDA3LCA3ODQ3MSwgNjU3MDMsIDAsIDAsIDQyNzMyLCAKICAgICA1MTgwLCA5MjY5OSwgNDEzOTUsIDQxNTMwLCAxMTY5MSwgNjQ3NzMsIDkyMjE0LCA3NDAwMiwgMCwgMCwgMTI4NjQ1LCAKLSAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MDQsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKKyAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MTMsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKICAgICA0MzY4NywgMCwgMCwgNDI4NSwgNjYxOTUsIDAsIDQyMzAsIDAsIDczNjcsIDQzMjU2LCA5MjM1MywgNzU2MywgNDIzNzYsIDAsIAogICAgIDY4NDQyLCAxMjA1MTIsIDAsIDAsIDIxNCwgMCwgMCwgNzg0NjYsIDY1ODkzLCAxMjIwOCwgOTk3MywgMCwgNjYzMTEsIAogICAgIDY1NTg5LCAxMjgyNzcsIDI2MDMsIDAsIDAsIDAsIDcwMDQ3LCAwLCA2MDIyLCAwLCAyODg0LCAwLCAxMTYyMCwgMCwgNDMsIAogICAgIDAsIDY2NDUzLCAxMDE2LCA0MTEwNywgMCwgNDExMjEsIDM4ODUsIDkyLCA2NTQ1NiwgNjQ2MDgsIDAsIDc0ODAxLCAwLCAKLSAgICAyMDc0LCAwLCA3ODI4MywgMCwgMTI0NTMsIDEyODEyOCwgOTgzODE3LCA3NDI0MSwgMTI2NTY4LCA2NzkxLCAxMjQ1NywgCisgICAgMjA3NCwgMCwgNzgyODMsIDAsIDEyNDUzLCAxMjgxMjgsIDk4MzgyNiwgNzQyNDEsIDEyNjU2OCwgNjc5MSwgMTI0NTcsIAogICAgIDc4MjY4LCAwLCAwLCAwLCA3ODI3OSwgMCwgMCwgOTIzNTgsIDY2NjM3LCA3OTk1LCA4NzU5LCA0MzQyMSwgNzgyNzcsIAogICAgIDEyNDQ5LCAxMjg1NTIsIDAsIDAsIDg3NTIsIDMxOTcsIDQ3MjAsIDEwMTY1LCAwLCAxMTkyNDksIDAsIDExNTk1LCA2NDg5MywgCiAgICAgMCwgNDM0MzUsIDAsIDAsIDQ5OTMsIDAsIDYxNjgsIDEwOTM0LCAxOTQ2LCA3NDEsIDAsIDU0OTQsIDQ2MzksIDk4MzE0NywgCiAgICAgMTk5MCwgNjY1ODksIDQ0OTgsIDc4NjY0LCAxMTkxODMsIDAsIDAsIDY5NzM0LCAyOTYwLCA3Mzc3OSwgMCwgODk2OSwgCiAgICAgMTI4MTE3LCA0MzQyNCwgMTI3MDU5LCAwLCAyOTUwLCAxMTk1NzksIDYyMTAsIDY1NzUzLCAzNzAsIDAsIDAsIDAsIDQ5NTMsIAotICAgIDk4MzY3MywgMCwgMCwgMCwgNjkyMzAsIDAsIDAsIDY1Njg4LCA5ODMyNDAsIDUwNjMsIDM1MTcsIDI5NjQsIDQzNjYzLCAKKyAgICA5ODM2ODIsIDAsIDAsIDAsIDY5MjMwLCAwLCAwLCA2NTY4OCwgOTgzMjQ2LCA1MDYzLCAzNTE3LCAyOTY0LCA0MzY2MywgCiAgICAgOTE3NzYyLCA2MzQ0LCA3NDc5MSwgMTA1NjYsIDEwMTQ0LCA2NjMzMywgODI1MiwgNzI5LCA2NjAxNiwgNzgyNTMsIDAsIAogICAgIDcxMzE3LCA2NDkyMywgMTI4MDQwLCA0MzY2OSwgOTAzMiwgNzgyNjMsIDc4MjY0LCAwLCA0MTIxNSwgMCwgNjU4ODMsIDAsIAogICAgIDkxNzc3NCwgMTIwNjAyLCAzNzYxLCAwLCAwLCA3MDA2OCwgMCwgMTI5MTIsIDExOTAxMiwgMzg1MCwgMTI4MTkxLCAwLCAwLCAKICAgICAwLCAwLCA5MDgsIDAsIDg2MTEsIDAsIDAsIDEyNzU1NSwgNDM2OTEsIDQxMTk3LCAwLCA4OTc4LCAxMjA1NDAsIDExOTEzNSwgCiAgICAgNDE1ODYsIDEwNTI3LCAwLCA5MTc4NDgsIDM4NDgsIDc4NzM5LCAxOTQ5MzcsIDEyNzUzNiwgNjUyNDEsIDUzMzYsIAotICAgIDk4MzI1MSwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjQ5LCAxMjcxNjMsIDY4MTkzLCAzNDcsIAorICAgIDk4MzI1OSwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjU3LCAxMjcxNjMsIDY4MTkzLCAzNDcsIAogICAgIDAsIDAsIDc4Nzc1LCA2NDY3NSwgNDE1ODIsIDc4Nzc0LCA3ODc0NCwgNjU1NzksIDEyOTgwLCA3ODc2OSwgMTIxNDMsIAogICAgIDY5NjU3LCA3ODUxMiwgMCwgNDM0NDEsIDQxODA0LCA3ODUyMywgMCwgNzg1MjUsIDAsIDEyODg1OSwgNDE1ODQsIDEwNjgxLCAKLSAgICAwLCA5ODM2ODYsIDczOTM4LCAwLCAxMjgwMjIsIDQ4MDAsIDY2NjYxLCAwLCA2NjMwNiwgNjQ3MTUsIDc4NTM0LCA5NTE4LCAKLSAgICA2NjA5LCAxMDQzNCwgMCwgMTEzMTksIDEwOTcsIDAsIDkxNzg1MCwgNDE3MzAsIDk4MzIxMiwgMCwgNzM4NDcsIDc4NzYxLCAKLSAgICA2NTE3MiwgNDE3MjgsIDQxNzIxLCAwLCAwLCAwLCA0MTIwMywgOTE3NjEyLCAxMzExMCwgNDE3MjYsIDk4Mzg0NiwgMCwgCisgICAgMCwgOTgzNjk1LCA3MzkzOCwgMCwgMTI4MDIyLCA0ODAwLCA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCA3ODUzNCwgOTUxOCwgCisgICAgNjYwOSwgMTA0MzQsIDAsIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIDQxNzMwLCA5ODMyMTQsIDAsIDczODQ3LCA3ODc2MSwgCisgICAgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMCwgMCwgMCwgNDEyMDMsIDkxNzYxMiwgMTMxMTAsIDQxNzI2LCA5ODM4NTUsIDAsIAogICAgIDEwMDAsIDY5NjUxLCAwLCA0MTE0MCwgMTIwOSwgNzM5NzgsIDAsIDczNzUwLCAxMDczLCA2MzIxLCA3Nzg3OCwgNDExMzgsIAogICAgIDAsIDY4MjEzLCAwLCAxMjE2NywgMTExNSwgNDE2MDUsIDk3OTQsIDEyNzA2MiwgNjc2NzEsIDU1MjQ4LCAxMjIzNywgCiAgICAgNzg3ODcsIDY2MzE0LCA2NTg3LCA5MjkwLCA3ODc4MiwgNzg3ODMsIDkyMzEsIDc4NzgxLCAyOTU5LCA3OTI2LCAwLCAwLCAwLCAKLSAgICA2NDM5OCwgMCwgMTE5OTcwLCAxMjMxMSwgOTgzNzE4LCA3ODc5NiwgNzg3OTgsIDc4Nzk0LCA3ODc5NSwgNjg0MzQsIAorICAgIDY0Mzk4LCAwLCAxMTk5NzAsIDEyMzExLCA5ODM3MjcsIDc4Nzk2LCA3ODc5OCwgNzg3OTQsIDc4Nzk1LCA2ODQzNCwgCiAgICAgNzg3OTMsIDY2NjcwLCAwLCAwLCAxMjI5MCwgMTIwMTY5LCAwLCAxMTk4NzMsIDQyMTQyLCA5OTY4LCA4MjA1LCAwLCA1MTMxLCAKLSAgICAwLCA5NjI3LCA3ODUzNiwgNzg1NDIsIDc4NTM1LCA5ODMyMTAsIDE5NDQsIDEyNDgsIDEwMTQ4LCAxMjc3NTUsIDExOTk5MCwgCisgICAgMCwgOTYyNywgNzg1MzYsIDc4NTQyLCA3ODUzNSwgOTgzMjEyLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIAogICAgIDExOTk5MSwgMTI3MDEsIDc4Mzc2LCAxMTMwOCwgMTE5OTk1LCAwLCAxMTk5OTcsIDExOTk5OCwgNjUzMDUsIDY1MTAwLCAKICAgICA0MDMxLCA0Mjc5NCwgMTIwMDAzLCA3MDc1LCA4MTU0LCAxMTk5ODUsIDEyMDAwNywgNDE4MTcsIDczOTM0LCA0MjI3NSwgCiAgICAgMTIwMDExLCAxMjAwMTIsIDc4NTI2LCAxMjAwMTQsIDEyMDAxNSwgNjA0MSwgMCwgNDE4OTksIDAsIDgwMDIsIDAsIDQzNjQsIAogICAgIDAsIDAsIDY0MzMyLCAwLCA3ODEzLCA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCA3ODQ1NSwgNzI3OSwgCi0gICAgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgOTgzMjcyLCAxMzAxMiwgNDU3MSwgMCwgMCwgMTIwMTY0LCAKKyAgICAxMjA0MSwgMTQxOCwgMTA4ODUsIDEyNjczLCAwLCAwLCA5NjYwLCA5ODMyODAsIDEzMDEyLCA0NTcxLCAwLCAwLCAxMjAxNjQsIAogICAgIDEyMDc4LCAyOTcwLCAwLCAxMDkzMywgMCwgNzc4NzAsIDAsIDEyNzAxNSwgMCwgNDE1OTksIDAsIDEyODgzMSwgMCwgCiAgICAgMTI5NTAsIDkyMTYwLCAzNDg2LCAwLCA3ODMxMSwgNDIzOSwgMCwgMTI3Nzk5LCA2NjUxMSwgMCwgMjYzNywgNjQ2MjksIAotICAgIDg0NjAsIDEyNzA1MywgODQ3NiwgOTgzOTY2LCAwLCAwLCAwLCA2NTY3MywgMTAxOSwgNzg0OTUsIDQxNDgsIDAsIDEyMjg5LCAKLSAgICAwLCA0MzE2LCAwLCAxMzExOSwgODQ4OCwgNTQxMiwgNjYyNDMsIDk5MzUsIDAsIDczODY0LCA5ODMyMDEsIDQxNzM0LCAKKyAgICA4NDYwLCAxMjcwNTMsIDg0NzYsIDk4Mzk3NSwgMCwgMCwgMCwgNjU2NzMsIDEwMTksIDc4NDk1LCA0MTQ4LCAwLCAxMjI4OSwgCisgICAgMCwgNDMxNiwgMCwgMTMxMTksIDg0ODgsIDU0MTIsIDY2MjQzLCA5OTM1LCAwLCA3Mzg2NCwgOTgzMjAzLCA0MTczNCwgCiAgICAgODIwNiwgNzQwODEsIDkxNjMsIDMyODYsIDkwNzIsIDU4NjcsIDEzMzAyLCA3NjIyLCA3MTIwLCA0MTczNiwgOTI1NDYsIAogICAgIDQxNzMxLCAwLCA3NDAwLCA1NDE2LCA2ODY2MywgMTE4OTI0LCAxMDgxNywgMCwgNDE1MzksIDEyNzI4NCwgMCwgNzM5NjMsIAogICAgIDQxODU1LCA0MTg2NywgNjU1NjQsIDExMjc3LCA2NTg5MiwgMTE1MzYsIDEwNjIwLCA5MjI3MiwgNzExNSwgNjYwMzAsIAogICAgIDczOTMyLCA1NDk4LCA3Mzk0MiwgNDE1MzYsIDAsIDY4MjA0LCA5MjU4NywgMzQ1OSwgODk5NywgMCwgMCwgMCwgMCwgCi0gICAgOTI1MTIsIDAsIDY2Mzc3LCA2OTc4MSwgMCwgOTgzNjkwLCA3ODUxMSwgMzE2MSwgMjk1LCAxMjAyMDcsIDAsIDkyMjIzLCAKKyAgICA5MjUxMiwgMCwgNjYzNzcsIDY5NzgxLCAwLCA5ODM2OTksIDc4NTExLCAzMTYxLCAyOTUsIDEyMDIwNywgMCwgOTIyMjMsIAogICAgIDEyNzg1NiwgNzg3NDIsIDkwMTYsIDQzNDU0LCA2MzkwMywgNjM5MDIsIDQzNjQxLCAwLCAzOTcxLCAwLCA3MDA2MywgMjk1MiwgCiAgICAgNzg3NjUsIDExMDM4LCAxMDkwMSwgNjM5MDAsIDYzODk5LCA2Mzg5OCwgOTQwNDMsIDY2NywgMTIzMzIsIDYzODg3LCA2MDg2LCAKLSAgICA0MTcyMiwgMCwgNTE3MiwgMCwgMCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIDg1NTUsIAotICAgIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCisgICAgNDE3MjIsIDAsIDUxNzIsIDAsIDk4MzI3OCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIAorICAgIDg1NTUsIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCiAgICAgNjM4NzUsIDYzODc0LCAxMTQ2MCwgNzQzMiwgMTkxMywgNDE5MTMsIDYzODUyLCAxMjY2MzYsIDAsIDQyMzQ4LCA3Mzg5MiwgCiAgICAgNjc1MiwgNDQ2LCA0MTkxMSwgMTI3OTA2LCA2Mzg1MSwgNjM4NTAsIDQxOTEwLCAwLCA2Mzg0NiwgMjk3MiwgMTI5MzIsIAogICAgIDcyNjIsIDAsIDYzODQ5LCA2Mzg0OCwgNjM4NDcsIDEyODA3MCwgNjU3MCwgODMwMiwgNzI1OSwgNjM4NDIsIDQxNzgsIApAQCAtMTg0ODgsOCArMTg1MDcsOCBAQAogICAgIDc1ODMsIDc2NzksIDI5MDMsIDAsIDMwMDEsIDExNTgsIDg3NDUsIDQzNzQ2LCA3Mzc0OCwgNjM4NjYsIDc4NjI2LCAxOTE1LCAKICAgICA0ODQ2LCAwLCA2NjM3MSwgMTE4OTg0LCA0MjEwNSwgMjk5MCwgMTIwMTI4LCA4MDUsIDY5MjM4LCA2NDQzOCwgMTIwNzAsIAogICAgIDg3NjAsIDExMTcsIDExODk4NywgMTIyMTIsIDEyMDEyMywgNjUxNzQsIDQyMzU3LCA2MzgzNSwgNjM4MzQsIDAsIDc4MjQwLCAKLSAgICAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NDQsIDk4Mzc5NSwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKLSAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzODk1LCA1MjI3LCA5MDQ3LCA2MzgyMiwgMTI3MTYyLCA2MDkxLCAwLCAKKyAgICAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NTMsIDk4MzgwNCwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKKyAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzOTA0LCA1MjI3LCA5MDQ3LCA2MzgyMiwgMTI3MTYyLCA2MDkxLCAwLCAKICAgICAxMDY5MSwgNTYwLCA1NjQzLCA4MjI2LCAxMTk1NzgsIDYzODEyLCA2MzgxMSwgNjM4MTAsIDYzODA5LCAyMjg5LCA2MzgxNSwgCiAgICAgNjM4MTQsIDYzODEzLCA2MDQ3LCAxNTk3LCAxMjAxNDMsIDc4MCwgMjA2LCA3NzkyNSwgNDkzNiwgNjUxNDcsIDgxNjgsIAogICAgIDYzOTMwLCAyMDc2LCAxMDkzLCA5ODgyLCA2MzkzNCwgMjA4MiwgNjM5MzIsIDEyODE1MCwgNjM5MjksIDM1NDYsIDE2MDUsIApAQCAtMTg1MDcsMjYyICsxODUyNiwyNjIgQEAKICAgICA0MzY1OSwgMTI5NTEsIDEyMDYzOCwgOTkwNiwgMjA1NCwgMjMzNCwgNzg1MTUsIDYzOTE2LCA1NDgzLCA2MzkxNCwgNjk3MzcsIAogICAgIDYzOTExLCA1NDg0LCA2MzkwOSwgNjM5MDgsIDI1MzksIDAsIDQzOTgwLCA1NDg1LCAwLCA0MjY5NywgOTA2MSwgNTUzNCwgCiAgICAgMTA2NzIsIDQ1MDIsIDAsIDI1MywgMCwgNjgyMDgsIDAsIDkyMDMsIDc0MjMxLCAwLCAxMTUzMCwgOTI1NDIsIDY4NjY4LCAwLCAKLSAgICAxMTg5MDcsIDAsIDEwNDc0LCA0MzQyNiwgMTMyNTcsIDQyMzU0LCAxMjgwOTksIDk4MzY4OSwgNzAwNDQsIDE5NTA2NSwgMCwgCi0gICAgODQxMywgOTgzODA3LCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCA3NDM1MCwgMTk1MDYzLCAwLCAwLCAKLSAgICAwLCAxMjY2MzksIDAsIDAsIDk0MDc4LCAxMjgxMzMsIDEyNzc2NywgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCA0MjkxMywgCi0gICAgOTIxODcsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAxMDc2LCA3NDMzLCAxNDM2LCA3Mzg0NCwgNTUyMjYsIDEyODM1MywgCi0gICAgNjM5ODIsIDczOTMsIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgMTMwNywgCi0gICAgMCwgMTA1MTUsIDQxNTg5LCAxMjg2OTgsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIDU0MTMsIAotICAgIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgOTgzNjI0LCA0NTE4LCAKLSAgICAxMDk5MCwgNjUwNzMsIDUxNjcsIDQ0ODEsIDM3NzEsIDEyMDE1OCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCA0MzA3MywgCi0gICAgNDE2OTAsIDEyNDc5LCA5ODM2MjYsIDAsIDAsIDk4MzgwOSwgNzAwNDYsIDE2MjgsIDEyNzE0OSwgOTgzNDc5LCA5ODM3MjIsIAotICAgIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCA5NDA1NiwgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIDEzMDA0LCAKLSAgICAwLCA0NDU3LCAwLCAwLCAwLCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgNjU4MDcsIDAsIDY4NDY0LCAxMjYzMywgCi0gICAgMTI4NzAsIDY5NzA1LCA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIDc0MjUxLCAwLCAxMjA2NDcsIAotICAgIDAsIDUwLCAxMDU1OCwgOTg3MSwgNDI2MTIsIDQzNjU1LCAwLCAwLCAwLCA2NjQ2OCwgMCwgMTMyNTksIDQ0NDgsIDAsIAotICAgIDk4MzgzNiwgMCwgNzAwNDMsIDY3ODUzLCAwLCAxMDY0MCwgMTE1MzksIDExNTEsIDAsIDkxNzYwNywgMTI3NTQ0LCAKLSAgICAxMjcwNzksIDE5NTA1MCwgMTI3ODUyLCAwLCAwLCAwLCAxMjUwMSwgNjQ2MDQsIDAsIDExNTI3LCAxMTg4NzAsIDg4MTIsIDAsIAotICAgIDExNTM4LCA4NjczLCAxMjY1MCwgMTEwMjAsIDAsIDY2NDY3LCAyMTA1LCA4MDg3LCA3ODE2MywgNjk2MzIsIDk4OTQsIDAsIAotICAgIDAsIDAsIDQ2MzYsIDU1MjYyLCA3ODUxMywgNDUxNSwgMjM4MiwgMCwgMTI3MDU1LCAwLCAxMjA0OTUsIDAsIDEyODI4NCwgCi0gICAgMTIyNzcsIDE5NDYyNywgMTE5OTUsIDkyNTUzLCAwLCAxMjE1OCwgMCwgODc0MSwgMTAxOTcsIDAsIDkyNDI2LCAwLCA2NTMxLCAKLSAgICAwLCAxMjc4NDYsIDQ3MywgNDM0MTUsIDAsIDk4MzY0MSwgMTg3MywgMTA4NywgMCwgMCwgMCwgNzg1MjcsIDY2NDM5LCAKLSAgICA0MzIxOCwgOTgzMTIzLCAxOTQ3MTYsIDcyMzcsIDEyNTA0LCA3NDI4MiwgMCwgOTgzNTcxLCAwLCA5NDg5LCAwLCAwLCAKLSAgICA0Mzg0LCA3NDIyMCwgNjM4NDUsIDIwNTgsIDEyODg2MywgMTMyOTUsIDQzMTkxLCAxMjgwMzAsIDAsIDExNTQsIDM4NTcsIAotICAgIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgMTIwNzA2LCA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIDAsIDQ5NSwgCi0gICAgMTE5MDA3LCA0MTcxMiwgNzk4MywgMCwgOTM5OTcsIDAsIDYzNDcsIDEyMDE2NSwgNzY1NCwgNDE3MTAsIDQxOTYsIDAsIAotICAgIDQzNywgNDE3MDksIDczNzcyLCAwLCAwLCA5NDY1LCAxMzI5MCwgMTE5MTgwLCA0OTk3LCA2NDMwNiwgMCwgMCwgNDk5OSwgCi0gICAgMTk0NjQyLCAwLCAxMjY1ODIsIDQ3MTEsIDEyMDc2OSwgMCwgMjczOSwgMCwgODA0NCwgNzQ4MzQsIDE5NDY0MywgNDE3ODksIAotICAgIDEyODE0MiwgMTA4MDksIDAsIDAsIDAsIDE3NzksIDY2MDAsIDY2MDEsIDQxNTQzLCA1MzI1LCA2NDIsIDY0MTg3LCAxMzA1OCwgCi0gICAgMTIwNDQ5LCAxMjg3NSwgMCwgOTIxODYsIDEzMjI5LCAwLCAxMDU3NSwgNDMzOTksIDAsIDAsIDQxNzkxLCAxMTA0LCAwLCAwLCAKLSAgICAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCA2NTY5LCAwLCAwLCAwLCA2OTg0OSwgNjc4MywgMCwgCi0gICAgMTI5OTMsIDgwNDksIDQxNTQ4LCA0NDAyMSwgNjQ1OCwgOTgzNzk4LCAxMjg4ODIsIDQ3NjEsIDYzODI4LCA0NzY2LCAKLSAgICA2NDYyMywgMTI3MywgNDM0MDcsIDAsIDExODg3NiwgMTk1MDQ1LCA2OTEyLCAxMzEzLCA2MzIyLCAxMDQ4MywgOTgzNjAzLCAKLSAgICA0MTU0NSwgMCwgOTI0NDksIDAsIDAsIDAsIDAsIDc4NjI0LCAzNDg0LCA3NDMzNywgMCwgMCwgODUwMywgNTEyMiwgNDE1MjcsIAotICAgIDAsIDY2MzIwLCA5ODM4MDIsIDAsIDAsIDAsIDQxNTM3LCA2OTY4MywgODMwMywgODI4MiwgMTE4MTcsIDczODU3LCAxMDAwMywgCi0gICAgNzM4NTksIDY1OTA0LCA3MzYzLCAxNjg2LCAwLCA3ODQwNiwgMTE0NjcsIDM2NjQsIDY1OTIxLCA2NDI5OSwgMTk0NjY0LCAwLCAKLSAgICAwLCA0MzI0LCAxMjYsIDQyMjQ2LCAxMTkxNTIsIDAsIDc0Mzc4LCA2NTkyNiwgNzc0NCwgMTk0NjM2LCA3NDI3NywgNzQzMDIsIAotICAgIDc4MDUyLCA0MzgxNywgNjk2NiwgNDM4MjIsIDgxMzYsIDAsIDY1NjAwLCAxNjMzLCAwLCAwLCA0NzYyLCAxMTAzLCAwLCAwLCAKLSAgICA0NzY1LCA5ODM0ODQsIDEzMDc4LCAwLCA0NzYwLCA2MzgyNywgMjA1MCwgMTA4NzEsIDQzMTk5LCAxMTAyLCAwLCA0MjIzNiwgCi0gICAgMTI4ODY3LCAxOTQ2NjcsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgODYyNywgMTIyNzksIDExMTEsIDAsIDkyMTYxLCAKLSAgICA0NzA3LCA2ODIwNiwgMTAxNDMsIDc4ODMsIDEyNzA4MSwgNzg4MCwgNDUyMiwgODY0NSwgNTcwNCwgMTMwMTAsIDAsIDgzMDQsIAotICAgIDkxNzU2MSwgMCwgMTE5NTc1LCAyMjkzLCAwLCA2NjY1NCwgMCwgOTI2NzYsIDAsIDEzMDA4LCAwLCA0Mzg1LCAwLCAxMzAxMSwgCi0gICAgMCwgOTI1NjksIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgNDE3OTMsIDY1NzYzLCA3NDIyMSwgMTIwMTQxLCAKLSAgICA0MTc5MiwgNDI3NzAsIDk0MDU0LCA2NTc2MiwgMTE4ODI5LCA0MzgyMSwgNTcwOSwgMCwgOTQwNTMsIDQzODE2LCAwLCAwLCAKLSAgICAxMDc5LCAzODY3LCA1NzA4LCAwLCAwLCA0Mzc5NywgNTcwNiwgNjQ3NjgsIDU3MDUsIDg3OTEsIDQwMDUsIDAsIDEwMjM3LCAKLSAgICAxMDk5MSwgMTI4ODE2LCA0MzQ1OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIDEzMTcwLCAxMjU0MCwgOTE3NTc3LCA0MjYwNSwgCi0gICAgMTIwNzY1LCAxMjY2MTcsIDY4NjQ3LCA5MTc1NzIsIDEwMDU4LCAwLCA3NDg2NywgMTk0NjU0LCAxMjcwNzgsIDMzMzksIAotICAgIDExNDQ4LCAxMTA2LCA5MTc1OTEsIDkxNzU5MCwgOTE3NTkzLCAzMzQwLCA5MTc1ODcsIDkxNzU4NiwgOTE3NTg5LCAKLSAgICA5MTc1ODgsIDEyMDU0MSwgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIDkyMjI2LCAxMzI0NiwgODY0LCAwLCAKLSAgICAxMTg5MjYsIDg5NzIsIDAsIDc4NDksIDEyMDA5MiwgOTI1MzMsIDEzMjQwLCAxOTUwNjgsIDUxOTIsIDQzMzgsIDY3OTgyLCAKLSAgICAxMDk0OCwgOTE3NjAxLCAxMzE5OSwgOTI1NzUsIDEyMzYsIDEzMjA4LCAxMzI2MSwgMTMxODksIDEzMTg4LCA5Mzk5MywgMCwgCi0gICAgNzQ0MCwgMCwgMTIwMTUzLCA5NTUzLCAxNTkwLCA2Mzc3NywgNjM3NzYsIDEzMTc4LCA2Mzc4MiwgNjM3ODEsIDYzNzgwLCAKLSAgICA2Mzc3OSwgMTU4MywgMCwgMTMyNjAsIDQ1NTAsIDAsIDY0MjA1LCAwLCAwLCA0MTUyMiwgOTgzOTA2LCA5MjE2OCwgCi0gICAgOTgzNzYzLCA5MTc4NTgsIDExMzU0LCA5NDA3MSwgMCwgNDI3OTUsIDAsIDExOTE5NSwgMTEzOTQsIDE5NDY0NiwgMTMyMzYsIAotICAgIDEzMjcyLCAxMzE5NCwgMTMzNCwgNjk5MjYsIDQ0NzksIDExNzgsIDY1NTg2LCAxMjA2NjMsIDY2NjgxLCAxMTkxOTMsIAotICAgIDQ2MDEsIDAsIDAsIDk4Mzc1NiwgMCwgMCwgMTk0NjU4LCAwLCA2ODA5LCA2Mzc4NiwgNjAzMSwgMCwgNjM3OTEsIDYzNzkwLCAKLSAgICAxMTQ1LCA2Mzc4OCwgNzkxMCwgNjM3ODUsIDQzMTUzLCA3NTQsIDEwMTkyLCAxMzEwNSwgODE4MywgMTIwNzQxLCAyMDM3LCAKLSAgICAwLCAwLCAxMDc0NywgMTI1LCAwLCA2NDg5MCwgMCwgOTgzMTMxLCAwLCA0MTcxOSwgNjM3NTgsIDM1MjMsIDEwNzQsIAotICAgIDEzMjU4LCA5NTM2LCA3NDA3NywgMCwgNDQyNywgNzQyNDIsIDYzNzU3LCA0MzE0NSwgMTIyMTcsIDYzNzU0LCA0MTUzMiwgCi0gICAgMTM0OSwgNjM3NTAsIDYzNzQ5LCAwLCAwLCAwLCA2Mzc1MywgNjM4MDIsIDQxMDg0LCAxMjA2MjIsIDY4MTMzLCA0MTkzMCwgCi0gICAgNjM4MDUsIDYzODA0LCA0MzYzMiwgNjM4MDEsIDQxMDgyLCA4MTQwLCA2Mzc5OCwgNjI2MCwgMCwgMCwgOTQwNzQsIDYzNzkzLCAKLSAgICAxMTk4OCwgMzg5OCwgMTI4MjQxLCAxMDIwMSwgMTIyMzgsIDYzNzk1LCA0MjE5NCwgMTAzNjcsIDEyNTIxLCAxMDQzMSwgCi0gICAgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIDk4MzMyMSwgNDIyMDMsIDc5NTAsIDEwODA0LCA2Mzc3MSwgCi0gICAgNDI3ODcsIDQzODYsIDEyMjI0LCA2OTczLCAyNzkzLCAxMjQ3NSwgMCwgMCwgNjM3NjksIDk1MzAsIDk4MzExOSwgMTIyMzIsIAotICAgIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIDc5MiwgMCwgNjQ4MDMsIDAsIDg3NDIsIDAsIDExMDUzLCAKLSAgICAxMjg3OTYsIDYzNzQ0LCAxMjgxMDcsIDAsIDc1ODgsIDYzNzQ4LCAxNjkzLCA2Mzc0NiwgNDMyMDQsIDUwNTUsIDY4NDI2LCAKLSAgICA5MTc4NTMsIDEwOTAsIDEyMDY3OSwgMTI4MzU2LCAxMTY2NSwgNzQxMzMsIDQ1NTgsIDY1Njg1LCA5NTIzLCAwLCAwLCAKLSAgICA3ODY4MSwgMTE1MTMsIDAsIDYxNTcsIDYzNzc1LCA2Mzc3NCwgNjM3NzMsIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgCi0gICAgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCA3ODI3MSwgMTMwMDYsIDY0NDMzLCAwLCAwLCA5NDEsIDAsIDAsIDAsIDY1NTQxLCAKLSAgICAxMTA2MywgMCwgODIyOCwgMCwgNDIwNjUsIDAsIDAsIDk0MDM5LCAwLCA5MjQ1NSwgNzM4NiwgMCwgNjQ0NDQsIDAsIAotICAgIDExOTg2MywgNDM2MDMsIDk0MDc1LCA2NTM5NywgMjg4LCAwLCAwLCAwLCAxMDAyNSwgNjk5MTUsIDI5MTgsIDAsIDY1MzAwLCAKLSAgICAxMTk4NzEsIDk4ODMsIDY0NzI2LCAyNzkwLCA2NTM5NSwgMzc5MywgMCwgMTI3ODI5LCA2NTM5MywgMCwgNzQxMzgsIDAsIDAsIAotICAgIDAsIDc0MTM5LCA5MjcxMiwgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAxMjgyLCAKLSAgICAxMjA3NzEsIDAsIDAsIDEwODg4LCA5ODM2MDQsIDY1MjQyLCAwLCAzMzMwLCAwLCAwLCA5ODM5NjUsIDAsIDAsIDc0MjU5LCAKLSAgICAzMzA0LCA0Mjc1MywgMCwgMCwgMCwgMTYyNywgMCwgMCwgMCwgNTM3MSwgMTMxMTYsIDAsIDE4MjYsIDExODc5NCwgMCwgCi0gICAgNDMwOTQsIDcwMDIzLCA0MzY1MCwgOTQwMzcsIDAsIDkwMzUsIDAsIDAsIDEyODAwNSwgMCwgOTIyMDcsIDY4MTI1LCAwLCAKLSAgICAxNjQsIDAsIDk0MDY3LCA5NDAwMCwgNjk1OCwgMCwgNDMxMTYsIDAsIDcwMDE5LCAxMzI0NSwgMCwgMCwgMTI3Mzc2LCAwLCAKLSAgICA3MDAzMSwgMTI3NzU2LCAxMjY2NiwgMTMxNzUsIDEzMjA3LCAxMjA0MTQsIDY2MDE0LCAxMjA0MjgsIDc0NDcsIDU5MjksIDAsIAotICAgIDY1NTA5LCAwLCA3NDQ5LCAxMTMwNiwgMCwgNzM5MjAsIDMxODAsIDAsIDYzODA4LCA5MDU0LCA5NzEsIDEzMDYyLCAwLCAwLCAKLSAgICA2NTE5NSwgMTAxNjQsIDkyMjUyLCA3NDQyOCwgMCwgNzgxNDYsIDkyNjExLCAwLCAwLCAwLCAxMDA0NSwgMTI4ODIsIAotICAgIDEzMjc1LCAxMjgxNjEsIDExMDU3LCAwLCAxMzI3NiwgMCwgNDE1MjUsIDc4MTUwLCA3MjcxLCAxMTQ0NCwgMCwgMCwgMCwgCi0gICAgMTIyMjksIDQxNTIzLCAwLCA0MzQxMSwgNzM3NTEsIDAsIDY0ODEzLCAwLCAwLCAxMDQ3NiwgMzg1OCwgMCwgMzkzMiwgCi0gICAgNjQ5NTgsIDAsIDAsIDczOTg5LCA2ODE5MiwgMCwgNjk4NDcsIDM2OSwgMCwgNDE3ODQsIDAsIDY0MTYzLCAwLCAwLCAwLCAKLSAgICA2NTQ3NCwgNDc5NiwgMTIyOTIsIDEyNjU5NSwgNjU0NzksIDAsIDQxNzgxLCAxMDQ4NiwgNDE0ODAsIDQzMDAyLCA5ODk5LCAKLSAgICAwLCAwLCA0MDQsIDEyODIxLCAzNzQxLCAwLCA1Nzg4LCA4MDkyLCA2ODIxMiwgNDEyMjIsIDE4MzEsIDY2MDIwLCAzOTgyLCAKLSAgICAwLCA0Mzg4LCAwLCA3NDYsIDEyMDc4NCwgMCwgMCwgMTIwMTgsIDY1Mjk0LCAwLCAwLCAwLCAwLCA0NDIyLCA0NzA4LCAKLSAgICAzNzk5LCA3NDI5MiwgMTE5MzU3LCAwLCA3NDQzMCwgMCwgMTE3MDAsIDQzNzQsIDAsIDEyODE3OSwgMTM2NCwgMCwgODAzOCwgCi0gICAgMCwgOTE3NTk3LCAxMjg2OCwgNjk4MTQsIDAsIDY3MzUsIDczOTc5LCAxMzE3NCwgNzM5NjgsIDEzMjI1LCAwLCA2OTgwOCwgCi0gICAgNjU4MzUsIDAsIDIzNjUsIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIDQyODY2LCAwLCAwLCAwLCA2NjQzOCwgNDE3ODUsIAotICAgIDEyNjE3LCA2NDE3MiwgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgOTgzNTY4LCAwLCAwLCA5MjQwMiwgMTI4MDYyLCAxMjk2NSwgCi0gICAgMzg0LCA2NDUxMiwgMTA0MDQsIDEwMzQwLCAxMTkzNTIsIDE1NTYsIDUyNzQsIDEzMjEwLCAxMjAxMjUsIDEwMDE3LCA5NzMzLCAKLSAgICA0MTc4NywgOTgzMjM3LCAxMjY5OTQsIDQxMzczLCA3ODAzOSwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCAKLSAgICA0MTM3MSwgMTE2NTYsIDAsIDEyMDcwMywgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDEyODAxOCwgMTA5NiwgCi0gICAgMCwgMCwgNDI2ODgsIDEyNDQxLCAxMjM1NSwgMTE5MzQ4LCAxMTkzNDcsIDQzMTgsIDEwNDUyLCAwLCA4MDMyLCAxMzI0MywgCi0gICAgMTMyMzcsIDEyNzE5LCAxMjY2NDYsIDExOTEwMSwgMCwgNjQ4ODQsIDExOTg3MiwgMTE5MzQ1LCA4NTk3LCAwLCAwLCA5ODY0LCAKLSAgICAwLCAxMjA3ODUsIDExOTg3NCwgOTQxMDcsIDEzMTk1LCA0MTQ1MiwgNjQ5NjEsIDc3MjIsIDAsIDEwNDU5LCAxMTk4NzgsIDAsIAotICAgIDExOTg3OSwgNjY1OTAsIDEyODEyMywgNDE1MzMsIDY2MzM3LCAwLCA5MjE4NCwgMCwgNDk2NSwgNDM0NDUsIDkxNzUzNiwgCi0gICAgNzM4NDksIDAsIDQzNjM4LCA3ODUzNywgMTI4Mjg3LCA2MjYxLCAxMTkzNDIsIDQzMTQ3LCA2NjU3MCwgMTk1NywgMTA0MjAsIAotICAgIDk4MiwgMjc1NiwgMTMyOTIsIDEzMjA2LCAxMjg4MjgsIDAsIDI5MjUsIDczODA5LCAxMzA1NiwgMTI3NTU5LCAxMzIxMiwgCi0gICAgNDMyMzgsIDAsIDEzMTkwLCAxMzE4NywgOTI1NDEsIDEzMTk4LCAxMTg3OTMsIDAsIDUyNDIsIDExOTE3OSwgNjQ0NzYsIAotICAgIDE2OTQsIDgyMTYsIDcxMzY5LCA2NzcwLCA0MzMzMSwgMCwgNjU2MjAsIDk4MzcxOSwgNDM1NDQsIDEyNjQ2NiwgMCwgCi0gICAgNDE0NDQsIDY1NjIxLCA2OTk1NSwgOTE5NywgNTI0NiwgMTE5MTA2LCAxMzE4NSwgOTcwOSwgMTIwMzIzLCAxMjAzMjIsIAotICAgIDEyMzE0LCA2NTYxNiwgNTIzOCwgMTE5MzMzLCAwLCAxMTkzMzcsIDUyMzYsIDQwOTc5LCAwLCA3NDIwMSwgODI4NiwgCi0gICAgMTI4NTM3LCAzOTM2LCAxMTkzMzEsIDExNjk5LCA0MTM0NywgMTI3MjQ5LCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIAotICAgIDEzMjM5LCAxMjY5MiwgNzk2OSwgMTI3MjY2LCA3MjE5LCAxMjcyNTAsIDEyODI1MSwgMTIwNTA5LCAwLCA2NjIyNCwgNzM0LCAKLSAgICAyOTc5LCAxMjAzMDMsIDY1NjE5LCA5ODcyLCA5NTcsIDY0OTIxLCAxODQ2LCA2NjYzMSwgNDE0NzcsIDExOTI1NiwgCi0gICAgMTIwMzEwLCA3NDUxMSwgNDE3NzAsIDE2NzAsIDY0NDIsIDEyMDMxNywgNDI0NDYsIDUzNzksIDEyMDMxOCwgNDExNjMsIAotICAgIDc0ODMyLCAxMjAzMTUsIDEyMDMxNCwgMTE1MDYsIDAsIDQyODQxLCAxMzI2NywgMCwgMCwgNDE3NzUsIDAsIDcxMzAsIAotICAgIDQxNzczLCAwLCAxMDY2MywgMCwgMCwgMCwgNjE1MSwgMTIxMTAsIDQyNjczLCA2NTU3MiwgNjUyOTMsIDY1MjUwLCAxMzI2NSwgCi0gICAgMTMyNjQsIDY0NTE4LCAwLCA2MTAwLCAwLCA5MjY0NywgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgNTYxMiwgCi0gICAgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAxMjY2MzcsIDExOTY1LCAwLCA2ODM1OCwgMCwgNjk3ODksIDAsIDkyMjYwLCAKLSAgICA2ODEwMiwgOTY5OCwgNzgxNCwgNzQ0NzYsIDExOTY1MSwgMTI4NTE0LCAwLCA0MTkyMSwgMTE4ODU4LCA5NzU2LCA2OTg1LCAKLSAgICAxMTkyNTgsIDc4NDkwLCA3NDIxOSwgMCwgMCwgMTE4OTk3LCA4MDEyLCA1Njc0LCAxMjM1MywgMCwgMTIzNjEsIDU2NzcsIAotICAgIDU1ODgsIDAsIDQxOTI1LCAxMjgxMjQsIDQxOTIwLCA1NjczLCAxMjA1MzQsIDU2NzYsIDQxOTIzLCAxMjY5NCwgMTE4OTc4LCAKLSAgICA1NjcyLCAxMjk0LCAwLCA3ODA1OSwgMCwgNDI1MTEsIDE3MjcsIDEyMDcyNSwgNDI0MzYsIDAsIDAsIDAsIDc0MjIyLCAKLSAgICA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgNzQwOTAsIDU4MjYsIDU1MjMyLCA1ODEzLCAwLCAxMjA3MTIsIAotICAgIDU4NDEsIDU4MzcsIDU1MjM0LCAwLCAzMTA1LCAxMjgyOSwgNTgzOCwgNTc5NiwgMCwgMTE5NTkyLCA1NzkzLCAwLCA1ODY2LCAKLSAgICA1Nzk3LCA0MTAxMSwgNTg2NSwgMTIwMDkxLCA3OTU2LCA1OTgsIDAsIDY0NjQ5LCA1ODA2LCA0MjM5OCwgMCwgOTAzNywgCi0gICAgNTY3MSwgMTIwMDQxLCAwLCAwLCAwLCAxMjg4NTUsIDAsIDg0NywgMTI4MjQyLCA5NTI5LCAwLCA2NjY1NywgNjk4MCwgCi0gICAgNzg0ODMsIDEyMDAzNSwgNzg0ODQsIDk4MzQ4MywgMCwgMTIwMDMzLCA3ODQ4NiwgMCwgMCwgMTIwMDM5LCA0MjY4MywgMCwgCi0gICAgOTgzMDU1LCA3MTE0LCAwLCAwLCA0MzE5MCwgNjU0NjMsIDE1NTQsIDAsIDQyNjExLCA0MjU2MywgMCwgNTY1MSwgMjkyOSwgCi0gICAgNjc5MiwgNDMyMDEsIDAsIDE5OTYzLCA1Njk4LCAwLCAwLCAwLCAwLCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDY5NzI3LCAKLSAgICA2ODE0MSwgODM3MiwgMCwgNjUxMTYsIDAsIDEyMDAyMiwgMTAxNzUsIDEwMzg4LCA0Mjc5OSwgOTQxMDAsIDQxMDEzLCAKLSAgICAxMDU2OCwgMCwgOTgzNjE4LCAyODY5LCAwLCA0MTAxNSwgMTk0NjkyLCAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgNDE4MDIsIDAsIAotICAgIDQyNjA4LCA3ODQ2OSwgOTg4NCwgNDc1OSwgMCwgMCwgMTAyNjYsIDQxMzU5LCAxMTcwLCA0MzM2NSwgNjk4MTAsIDczOTA4LCAKLSAgICAxNjA5LCA5MDIsIDAsIDYzOTM2LCAxMjg4NzUsIDExNjYxLCA4MTIyLCA1ODE4LCAwLCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgCi0gICAgMjU1NCwgNTE1OCwgNTcxNCwgMjIxMywgMCwgMCwgODA3LCA0MzA3OSwgMCwgNzg0NzUsIDk3NiwgNTUxMSwgNjQ1NTMsIDAsIAotICAgIDQyMTU1LCAwLCA0MTM1NiwgNzQxMTAsIDExODgwMSwgMTI2NjE0LCAwLCA4Njc2LCA5ODMyODMsIDAsIDU1ODIsIDQ1MSwgCi0gICAgNjM5NDEsIDU3OTgsIDkzNDksIDQyMDE4LCAxMjc4NTgsIDAsIDAsIDQzNjA5LCA1OTA2LCAxMjA1NTMsIDE0NDAsIDAsIAotICAgIDEyODg1MywgMTIwMDE2LCA3NDI4MywgMTEwMDUsIDAsIDY2NjU2LCA2NjA0NCwgMCwgMTk0Njk4LCAwLCAwLCA0MzM5MywgCi0gICAgMTAwOTQsIDAsIDExNTI5LCAxMDg1NywgMTIwNjQzLCA2NjQzNiwgNjU0NiwgOTMsIDgxMDIsIDAsIDY4NDA1LCAwLCAwLCAKLSAgICA4MTcxLCAwLCAxMTkwOTcsIDEyNzA2NCwgOTE3NTQzLCAzODMsIDcxNTQsIDQxNjU2LCA5MjYzNCwgOTQwNDAsIDAsIDUxODcsIAotICAgIDcxMjk2LCAxMjcyNzcsIDExMjg2LCA2ODYyMCwgNjQyMTcsIDAsIDUyMzIsIDAsIDQxMDA5LCAwLCA0MTAwNSwgMCwgMCwgCi0gICAgOTgzODE4LCA4MjkyLCAxOTUwNzQsIDQ5ODAsIDg4NjAsIDczOTQ3LCAxMDAyOCwgNjUyOTEsIDcwNzYsIDEzMTgyLCAKLSAgICAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgNzk3MiwgMCwgNzg3ODUsIDAsIDc5MDAsIDAsIDExMzA5LCAzODA2LCAKLSAgICA0MTk4LCA0MjcyNSwgMCwgNjc2NTYsIDk5OTUsIDAsIDkyNTUyLCAwLCAxMjkzMSwgMCwgNDI2ODQsIDc0Mjg1LCAyMDg4LCAKLSAgICA2NDIxMywgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgNzQ3NzEsIDAsIDAsIDEyODM2LCAwLCAwLCA3NDM0MiwgODU5MywgCi0gICAgMCwgMCwgNjg0NDUsIDEzMjU1LCAwLCAwLCA3NDY0LCAwLCA2NTg2NSwgMCwgMTk0NjUwLCAxMjcxNDQsIDAsIDkzNDIsIAotICAgIDEyMDQ2NCwgMCwgNjQ1MTYsIDAsIDc4NzkyLCAxMDEyOSwgNDEwMDcsIDc0Mzc1LCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAKLSAgICAxMTkxMzYsIDAsIDAsIDY5NzI0LCA0MDk5MiwgOTIyNjQsIDEyNzE1MywgNjg2NTMsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgCi0gICAgNzQxMDUsIDM2MzMsIDk4Mzg5MSwgNjUxNjIsIDQxMjM0LCAxMjA4OSwgNzgyODEsIDk3NzEsIDk4Mzg5NiwgMTMyNTEsIAotICAgIDEyODcwMSwgMCwgNjI2MiwgMjc4NCwgNDI3NDMsIDAsIDgxMjYsIDY2NDgzLCAwLCAwLCA0NDEsIDQyNjIxLCAwLCAwLCAKLSAgICA0MTAwMiwgNDA5OTksIDExOTYyMywgNDMyNjYsIDcxMDgsIDE5NDc3OSwgMTA4OTAsIDc0NDgxLCA2NTgzNCwgODMyNCwgCi0gICAgMTE5MTAzLCA2NDQxNywgNzQ4MTcsIDEyNzQ2NSwgNjQ3MzcsIDAsIDk4MzY1MCwgODkzMCwgNjY2NzgsIDc0MjQ5LCAxMTkzLCAKLSAgICAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAwLCA3NzkwNCwgOTI2NDAsIDc3OTA1LCAKLSAgICA5MDM0LCA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIDAsIDAsIDAsIDQyODE1LCAwLCAKLSAgICA0MTk2NiwgMCwgMTI3NDcxLCAwLCAxMTc5MiwgNDMwNjQsIDQxMDI1LCA5MTEsIDc1MzksIDAsIDAsIDEyMDMzOSwgNjUxNTksIAotICAgIDY0MzkwLCAwLCAwLCA1NTIwLCAxMTY2MiwgMCwgNjUzMzAsIDQyODEyLCAwLCAwLCAxMjMyNiwgOTgzODQ3LCAwLCA0MjgwOCwgCi0gICAgMTI4MzM3LCA5MzQ4LCA2NDkwMSwgOTgzODUyLCAwLCAwLCAwLCAwLCAwLCA5MTc1ODQsIDQzNzAyLCA5ODM1NzYsIDU4NTcsIAotICAgIDY1MzQyLCA5MjcyNywgMTE5MTIwLCAxMjAwNzksIDg2NDQsIDAsIDAsIDAsIDc0Mjk2LCA0MTkwOSwgMCwgMTIwMzMyLCAKLSAgICAyNzkxLCA2OTY2MywgMTg5MSwgNjk4MjQsIDAsIDQxOTA3LCA2NjY0NywgMTE4OTM5LCA4NzYxLCAxMjk0MiwgNTc0OCwgMCwgCi0gICAgMTA3NzMsIDAsIDAsIDg3OTYsIDc4MTQ5LCA2NDEyLCAyMDYxLCA4NTIwLCAxMzE0NiwgMTI3MTg1LCA2MzkzMSwgMCwgCi0gICAgNjU5MDIsIDI4ODIsIDAsIDAsIDEyODQzLCA0NTIwLCAxMjAzNDUsIDkyNDU5LCAwLCA5ODM2NTEsIDAsIDczODYwLCAwLCAwLCAKLSAgICA2NDM0NSwgMCwgOTIwMSwgMTI4MzE0LCAxOTQ5NDAsIDAsIDAsIDQzNjc5LCA5MTc1ODUsIDY1MTE3LCA5MjI3MCwgMCwgCi0gICAgMTA0MjcsIDAsIDM4NDQsIDEyMDY3NSwgOTc1NSwgMTExMCwgNjYxMiwgMTIyMjIsIDAsIDEyODc4OSwgMCwgMCwgNzgzLCAKLSAgICAxOTQ5MzUsIDAsIDAsIDk4MzA2NCwgMTk0NzIwLCA2NTA1NiwgMzYyMCwgNDExODAsIDY4Mzc4LCA0NTU2LCAwLCAwLCAKLSAgICAxOTQ5MzMsIDc0MjUwLCAwLCA2NzY1NywgMTA1MTAsIDQzODIsIDY2NDgyLCAwLCAwLCAxMjc1MjcsIDkxNzcsIDg5MDIsIAotICAgIDkzOTU4LCA5ODM5LCAwLCAxMjg5MSwgOTgzNzQ2LCA5ODM2MjcsIDYzOTk5LCAyMDE2LCA0MTkxNywgOTc4OCwgNjM5MjgsIAotICAgIDAsIDE4NjIsIDY1ODAwLCA5MTU1LCA2NjYyMywgOTc4NiwgNjUwODIsIDQxOTE5LCA4NTc5LCA0MTkxNCwgNzk4MSwgMCwgCi0gICAgNjYwMTcsIDQ1MDgsIDY0ODgzLCA5MjQ1NiwgOTI1MjIsIDEyNzgxNCwgMCwgNjQ1OTIsIDc0Mjc2LCAxMjAwODAsIDY3ODQsIAotICAgIDc4Nzg4LCA2ODE4MSwgMCwgMCwgMCwgMTI3NTM0LCAxMjE0NywgOTAyNCwgNjYzNzgsIDY2NDcyLCA5ODM5MjAsIDY0Mjg5LCAKLSAgICA2NTI4OSwgNzgxNTEsIDY2NjU4LCAxOTQ5MjksIDY0NTA5LCA3ODE1MiwgMCwgMTI2NTA1LCAxMTA1MSwgOTgzMjg4LCAwLCAKLSAgICAxMTM1NSwgNjU4ODUsIDAsIDEyODMxMCwgNDEyMTQsIDAsIDEyMjk5LCAwLCA3NTAwLCA0NTA2LCA3NzczLCAwLCAwLCAKLSAgICA5OTYzLCA2ODY0OSwgMTI2NjA5LCA0MDQwLCAxMjA1NzAsIDYxNjcsIDAsIDYzOTIyLCA2NTk0LCA5ODM3MzEsIDAsIDAsIAotICAgIDM2MjQsIDQzMDM2LCAwLCA2Mzg3LCA2Mzk5MCwgMTk5NDcsIDYzOTg4LCA0MTk1NSwgMCwgNjM5OTMsIDEwNDQwLCA5NjExLCAKLSAgICA2NTYwNSwgNjgwMywgMCwgNzczOCwgNjM5ODYsIDExNDQ2LCA2Mzk4NCwgOTI2NDEsIDM0MzUsIDc4MTY0LCA0MzgxNCwgCi0gICAgNDM4MTAsIDcwMjksIDY0MjU4LCA0MTI5MiwgMTE4ODk4LCAxMjc0OCwgNDI3NDIsIDk1MTcsIDExNTE4LCAwLCA3ODc5MCwgCi0gICAgMCwgNjc5OTMsIDYzOTU2LCA0MjQ1OCwgNjM5NTQsIDYzOTUzLCA2Mzk2MCwgOTU5MSwgNDUxNiwgMTAyMTcsIDY4MzcwLCAKLSAgICAxMTQ2OSwgNjk2OTcsIDQyMzA2LCAyNzIzLCAxMTg5NDcsIDAsIDAsIDAsIDAsIDAsIDExMzk3LCAyODgwLCAwLCAwLCAKLSAgICAyODcyLCAwLCAwLCAzNDk4LCA0Mzc4LCA5MTc1MzksIDQyNzAsIDAsIDY1NTUxLCA2ODIwNSwgNjYzMywgNDMzODcsIDAsIAotICAgIDUyMzAsIDAsIDAsIDAsIDAsIDAsIDgxNjEsIDM5MywgMTIwMTMsIDAsIDAsIDEyNjQ3OSwgNDE1LCA2Mzk2NCwgNjM5NjMsIAotICAgIDQyMzQ1LCA5MjMxMCwgNTE4MywgMTg3NywgNDI0OTgsIDAsIDI5MjcsIDAsIDYzOTYxLCA0NDcyLCAwLCAwLCA3ODE1OSwgCi0gICAgNjk2OTksIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDEyODA3OCwgNzA4MSwgMTA3MzAsIDc2OTEsIDEwMzMxLCA2MzgzMCwgCi0gICAgMTE5NjI1LCA0MjkyMiwgNDIxMDMsIDg2MjgsIDk4MTMsIDAsIDQyNDUzLCAxNjA0LCA5NTY1LCAxMDUzOSwgNjk3MDEsIAotICAgIDY1NzY0LCA0MTQxNSwgNjU3NjcsIDAsIDg0NTcsIDQyMzAxLCAxMTM3MiwgNjQ4NzMsIDExOTkyLCAwLCAwLCA2Mzk4MCwgCi0gICAgMTE4MDEsIDM2MjIsIDk4MzEyNCwgNjQzMzYsIDEyMDE3LCAxMDQ2MywgNjM5ODEsIDQ5NjcsIDY0MTg5LCAxOTY2LCAKLSAgICA0MzYyOCwgMCwgOTgzMjg0LCAwLCAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIAotICAgIDQwMiwgMCwgMTMxNDcsIDEyODY5MiwgNDIxMDAsIDY0NjQ2LCAxMzIyOCwgMCwgNDE4NzUsIDM1MTUsIDc0MjUyLCAxMTgwNSwgCi0gICAgMCwgMTEzMDIsIDYyNTksIDQzMzk1LCAwLCAwLCAxOTQ2NzAsIDAsIDkyMzUxLCAwLCA3NDQyNSwgMTEyOTksIDE1NjEsIDAsIAotICAgIDkyMzU5LCA2NDk0MiwgOTgzNTU5LCAxOTQ3MzMsIDk4MzY3NywgMTk0NzMyLCAwLCA3NDMwMSwgMCwgMTEyODAsIDAsIAotICAgIDY5Nzg0LCA3NDA2MCwgMCwgMCwgMTE5NjY0LCA1MTQ1LCAxMjQ4NiwgNjUwMTgsIDY2NTE2LCA1NDA5LCAxMjczNzksIAotICAgIDE5NDY2OSwgNzQwMiwgNTM5OSwgOTY4NSwgNzQwODksIDc5NTIsIDU0MDEsIDAsIDY2NjE2LCA2ODQyMSwgOTgzOTEwLCAwLCAKLSAgICA1NDA1LCAxMjc4NzUsIDY0ODY2LCAwLCAxMTk1ODMsIDEyODM0NSwgNzg3ODQsIDc0MjQ4LCAxMTMzMCwgMTk0NzIzLCAKLSAgICA2NDY5MCwgMzI1NCwgMCwgMCwgMTI4MjA3LCA0MjM5MCwgNDM2NzgsIDE5NDcyNSwgOTgzOTAwLCA2NTA3NywgMCwgNjM4OCwgCi0gICAgMzM1NSwgOTUwOCwgOTg2NywgNTcyMywgMTE1MjAsIDU2MTEsIDAsIDMzNzcsIDAsIDAsIDAsIDAsIDc4MjI4LCAwLCAKLSAgICA5ODM3NTMsIDQyNjkxLCA5MTc4ODYsIDEyNzE5OCwgNzQ3NjcsIDAsIDEyNzA3NSwgMTM3OSwgMjQ2LCAwLCA5ODM3NTIsIAotICAgIDM3ODgsIDk4MzEwNiwgMTEwNDEsIDkyNTQ5LCA2NjMwNCwgMCwgMCwgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTgzNjg4LCAxMDY1NiwgMCwgNjUyMTQsIDExOTI0MiwgNDI1NjcsIDkyMjE3LCAxMzE2MywgOTgzMjAyLCAxMjA4MzEsIAotICAgIDc0NTk3LCAzMTgyLCAwLCAwLCAwLCA2NTAzNCwgNjU4ODksIDQyMTY5LCA0NzU1LCA3NDI0NCwgMTk0NjIxLCAxMTQ0MywgMCwgCi0gICAgNjYzMTksIDc0NTk4LCA2MDgsIDYwMCwgMCwgMTIxOSwgMzkzNCwgNjQyMDYsIDExNDgzLCA3NDUxMCwgMCwgNzQ0ODUsIAotICAgIDQyNDQyLCA2NTQ3MCwgOTgzODk4LCA2NDIwMiwgMTMxNjAsIDc3NTksIDQyNDgyLCA0ODUsIDEyODAwNiwgMCwgOTgyOCwgMCwgCi0gICAgMCwgNDIyODAsIDAsIDkzNTEsIDc3NzgsIDY0Mzc5LCA3NDk2LCA0MjQzMSwgNjkxNiwgMTIwOCwgMCwgMTE5NjMxLCAKLSAgICAxMTAwMiwgNDI0NzAsIDAsIDExODk0NiwgMCwgMCwgNzQwNDEsIDAsIDcwMDQ1LCA0MzUzOSwgNTQxMSwgNDIxOTYsIDAsIDAsIAotICAgIDAsIDkxNTAsIDAsIDQyMzkzLCAxMzA4NiwgMTMxMCwgMTk0Njg3LCA5MzM3LCAxMjA1MiwgMTA2NDMsIDU1MjcxLCAKLSAgICA5ODMxNzksIDEyMTY2LCAyNTQ2LCAxOTQ2ODMsIDIxMywgMTE4ODUyLCA2NTYxMSwgMCwgMCwgMTk0NzU2LCA3NDMxMCwgCi0gICAgNjU1NCwgMCwgMTE5MTQsIDU0NTIsIDAsIDAsIDAsIDAsIDAsIDE5NDY4MSwgOTI1NjAsIDI3MTMsIDAsIDk2NTAsIDQzMzMwLCAKLSAgICAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDkyNjU5LCAwLCA2ODIyMywgNDE0MywgMTk0Njc3LCAwLCA2NTc0OCwgNDE0MSwgCi0gICAgOTY4MiwgNjUyODcsIDE1MDgsIDEyNzAxMywgODc3OSwgMTA1NjksIDg3MjUsIDEzMjk5LCA2NjYzOCwgNjU3NTAsIDQyMjYzLCAKLSAgICA0MTQ1LCA2MzgwLCA2NTc1MSwgNjY2MTMsIDQzOTk0LCA2NTczOCwgNTUyNTAsIDkxODUsIDk1NTAsIDAsIDQzNDAzLCAwLCAKLSAgICAwLCAwLCA2NTczNiwgNDE5NTEsIDY0ODE2LCA2NTc1NiwgOTgzMjAzLCAxMjk1NSwgMTA1OTYsIDI4ODgsIDE5NDY0NSwgMCwgCi0gICAgMCwgOTY1NywgOTAxOSwgMTk0NzY2LCAwLCAyODc4LCA1MzkwLCAwLCAxOTQ5NjEsIDAsIDY4Njc5LCA0MzU1MiwgNzUwMSwgCi0gICAgNjMyOCwgMCwgMTA0MjksIDEwMzY1LCAwLCAwLCA0MTk0NiwgNzUwMywgNTIzNSwgODAzLCA2ODM4MSwgMCwgMCwgODk4NiwgCi0gICAgMTI2NTQyLCAxMDYzMiwgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAwLCAxMjY2NDcsIDAsIDExODg4NywgMTc5MSwgNTE5MSwgCi0gICAgOTI4OCwgNjQ4MjIsIDI4OTIsIDAsIDQzMzk0LCA1NTUsIDAsIDAsIDY2NjQ2LCAwLCAxMTkwMDIsIDEzMTUxLCA3NDUxMiwgCi0gICAgNzI4OSwgNzQwNTUsIDY0MTYxLCA4ODU0LCA2NDE2MiwgNTg1OCwgNDE5MjcsIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAKLSAgICAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAxMjg4MTMsIDEzMTU4LCA5MjE2NiwgNzIxMSwgMCwgOTM3MSwgNzM5NzMsIAotICAgIDkxNzU1MywgNjgyOCwgMTYyNSwgOTIzMDIsIDAsIDEzNDIsIDY4NDQwLCA2NDE3MSwgMTI2NzA0LCAxMDkwMywgOTgzNDg2LCAKLSAgICAwLCAwLCAwLCAwLCA0NDgyLCA0MTYwNiwgMCwgMTI4NTY5LCA5ODMxMTIsIDAsIDY0MzgxLCAwLCAwLCAxOTUwOTAsIAotICAgIDQyMjQ1LCAxMjY0NjcsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIDY2Njg3LCA2NjYxOSwgMTI2NDg5LCA3ODAyNSwgMCwgCi0gICAgMTEzNDksIDQwOTkxLCA5MTc1NzAsIDAsIDExOTU5OSwgMTIwODMwLCAwLCAxMTk3LCAxMjgyODIsIDExNDksIDE5NDk3MCwgCi0gICAgMCwgMCwgNDA5OTAsIDQzNzY1LCAwLCAzNDkyLCAwLCAxMjc5NDIsIDAsIDAsIDAsIDEyODM4LCA5ODM5NjksIDE5OTQ4LCAwLCAKLSAgICAzMDk5LCAwLCAwLCA0MTA4NywgMCwgMCwgMCwgMTE5MDU5LCAxMjAzNiwgNDEzMDksIDAsIDAsIDgxNTIsIDAsIDQxNTUwLCAKLSAgICAxMjIyNywgOTgzNjEzLCAwLCAxMjgyOCwgMTI3NTExLCAwLCAwLCAxMjA3MDgsIDAsIDAsIDEwMzg2LCAxMTk1NzQsIDAsIDAsIAotICAgIDkyNjgwLCA5ODM3ODAsIDY4MTU0LCAwLCAxNzQzLCAwLCAwLCA5MjIzOSwgNjUxODYsIDkxNzU3MSwgMCwgOTYwNiwgMCwgMCwgCi0gICAgNjQ0MzksIDAsIDAsIDkyNjg2LCAwLCAwLCAxOTQ5NjcsIDAsIDAsIDMzOTUsIDkzNjIsIDEwODc4LCAwLCAwLCA3ODM2MiwgCi0gICAgNjQ4MzAsIDAsIDEyNjU1NywgNDEwOTEsIDM0MjYsIDEzNDQsIDg4NzAsIDAsIDAsIDQ3MzUsIDEyNzAxNywgNjExOSwgCi0gICAgMTI4MjIsIDQyNjk5LCAwLCA5ODM4MTUsIDc0ODE4LCAxNDIzLCAwLCA0MjYzNywgNDEwODAsIDAsIDEyMDM5LCAxMDU1OSwgCi0gICAgMCwgMTE4ODkyLCAwLCA5NDcyLCAwLCAxMTkyOSwgMCwgNzE3MCwgOTU5NiwgNjEzMCwgMTI4ODI2LCA0MzYyOSwgMTE1NzksIAotICAgIDc4NzEzLCAwLCAxOTQ3NDAsIDEyODY5MSwgOTIxODUsIDY2Njk5LCA2NDQ0MCwgMTAwNCwgOTI1ODQsIDE5NDczNywgCi0gICAgNDMyMzQsIDY2MDA4LCAxMjYyNywgMCwgNjg0MTQsIDAsIDQzNjE5LCA0MzMwMywgMTEzMDAsIDQzMzA0LCA5Njg2LCA1ODkwLCAKLSAgICAxMTc3NiwgNzU1OCwgMTI3MTU4LCA2NTYyNywgMCwgMTA3MTgsIDEzMTU0LCAzNDYxLCA5MTM5LCAwLCAwLCAwLCAwLCAKLSAgICA2NTM2NSwgNzM4NzcsIDY1NjI4LCA3ODAxOSwgMTIwMzE5LCAwLCA0MTcwOCwgMTI4NjAsIDI2NDEsIDEyMDY5LCAxMDgzOCwgCi0gICAgNTQwMywgMTAzNTIsIDcwMDg1LCAxMDA2MSwgNDMyMzcsIDAsIDUxNDAsIDIwOSwgMTI4ODQ3LCA0MTcwNCwgNDEwNTYsIAotICAgIDQzMDc4LCAxMjgxMjUsIDExODgwOSwgMCwgMTA4OTksIDY1NDY5LCA5MjM2MiwgMCwgMCwgMjQxMCwgOTkzLCAwLCAKLSAgICAxMjA1ODksIDEyMDY4OSwgNzg2OTMsIDAsIDAsIDcyMzIsIDAsIDExOTI1MywgMCwgNzExMCwgNzQ0NjIsIDIwNjYsIAotICAgIDEwNDg5LCA0MjE2NiwgNDM0NjMsIDEwNjU5LCAzNjAwLCAwLCA0MjI0LCAxMzM2LCA0MTUxOCwgMCwgMCwgMCwgMCwgCi0gICAgNDExMzksIDY0ODIwLCA5MjUzOCwgMTI5NjYsIDQxMTM0LCAwLCAwLCAwLCAwLCAyNzIsIDQyNjMsIDg3OTMsIDAsIDAsIAotICAgIDQxNTAyLCAwLCA5ODMsIDEyNTQ5LCAwLCAwLCAxMTkwLCA0MTA5LCAxMzM1LCA4NDEsIDU4ODgsIDQxMzU4LCA2NDg2MywgCi0gICAgOTU0NCwgNDM0ODEsIDAsIDE5NDgwNiwgNzAwMjcsIDIwOTksIDUxMjAsIDI0MDksIDc3OTksIDAsIDc0NDI0LCAwLCAwLCAKLSAgICA0NzMxLCAwLCA2NjYyOSwgMCwgMCwgMTI1NSwgNDE0OSwgOTI0NywgMCwgOTkxMywgMCwgMCwgNjQ5MTQsIDkxNzc4NywgCi0gICAgNjUxMDEsIDAsIDExNjk0LCA5MjQ3NSwgMTE2OTAsIDU4MzUsIDEyNzE2NCwgNjY2MjUsIDEwODQyLCA0MTM1NCwgNDIxMjMsIAotICAgIDQzMDk3LCAxMTY4OCwgNjY2MzQsIDEwOTQsIDE5NCwgNjQ2OTIsIDAsIDgxODAsIDAsIDAsIDk5NzIsIDczODY1LCA0NTE5LCAKLSAgICA2MTE0LCAxMDg5OCwgNDMwNzIsIDAsIDAsIDkzOTYwLCA5ODMzMTQsIDEyNjU4MSwgMTA2OTUsIDAsIDc1NDAsIDAsIDg4MSwgCi0gICAgNzg1NywgNjA2NywgNjUxNjQsIDAsIDAsIDAsIDEzMzExLCA2ODQwMywgNDE4NTcsIDY0MzIxLCA4MzU5LCAwLCAxMjY4OSwgCi0gICAgMCwgMTk0NTk0LCAwLCA5ODMzMDQsIDk4Mzg3MiwgNjgxODMsIDAsIDk4MzMwNiwgMTI4NywgNTQzNiwgMCwgOTgzMzA5LCAKLSAgICA3NDE0MiwgOTIzMjgsIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCA2OTY2OCwgODk4NSwgMTIxMDksIDk4MzMxNSwgMCwgCi0gICAgMTI3MjQyLCAwLCAwLCAzNjUyLCAxMDUzNywgMCwgMTI3NiwgMTIwNDQwLCA2NTQ5LCAyNzksIDczNzQ1LCAwLCAwLCAwLCAKLSAgICAxNDg5LCAwLCAwLCAwLCAzODk5LCAxMDA3LCA0MjEyNCwgOTgzNTU3LCA0MjEyMiwgOTIzMzcsIDkyMzY3LCAwLCAxMTk4NSwgCi0gICAgMTM0NSwgNzg2MDAsIDAsIDAsIDg5NTYsIDQzMDgzLCA5NDA1NywgNDIxMzgsIDc4NjEwLCAwLCAxMjE1MSwgNzg2MDgsIAotICAgIDc4NjA0LCA3ODYwNSwgNjI4NSwgNzg2MDMsIDc4NjEyLCA3ODYxMywgNjU5NDIsIDQ5MiwgODY4NSwgMCwgOTgzNzUwLCAwLCAKLSAgICA3ODYyMiwgNDM3MTIsIDI1ODIsIDExNDcwLCA2NDUzOCwgNzQ0NCwgNzg2MTUsIDc4NjE2LCAyMjk3LCAwLCA3MzgzNywgCi0gICAgMTE5ODIzLCAyNTI3LCAxMTk4MjQsIDE5NywgMjc5OSwgOTI1OTQsIDQxOTQ0LCAxMjAyNzYsIDk5MzMsIDAsIDY2NTE1LCAKLSAgICA3NjcsIDU1MjQsIDcwMjgsIDAsIDAsIDExOTgyNywgMTE5ODE3LCAxMTk4MjgsIDc4NjMzLCAxMDg5NiwgMCwgMTc5OSwgCi0gICAgMTIwNDk3LCA2OTcxLCA3NDMzNiwgMTI4MzQyLCAwLCA2NTM0MCwgMTE4OTc5LCA0MTU1MSwgMjQzNCwgOTQwMTgsIDAsIAotICAgIDEyMDU3OSwgMCwgNDYzMSwgMCwgMCwgNjQwNywgMCwgNjMzOCwgNDMyMTQsIDAsIDc1NzAsIDAsIDMxOTIsIDAsIDg0MTQsIAotICAgIDAsIDkzOTgzLCAwLCAwLCAwLCA5MTY0LCA2NjYxMiwgOTM5NTksIDMxNzEsIDY2MjMsIDQ5NjEsIDY4Mzk2LCA4ODYsIAotICAgIDU1MjE2LCA4NjU0LCA3ODgzMiwgOTk5MywgNzQzOTAsIDY0NjAzLCA3MDA2NiwgNjkyNDEsIDk1OTksIDc4NjI5LCA0MzA4NCwgCi0gICAgNzg2MjcsIDc4NjI4LCA3ODYyNSwgMjM5OSwgNjk2OTMsIDg5OTQsIDEwOTQ0LCA0MTIwOCwgOTgzNzA0LCA0MTE2OCwgCi0gICAgODE3OCwgMCwgMzM2NywgOTIzMzQsIDQyNTEwLCA3ODY0MSwgNzg2MzYsIDY4MDQsIDc4NjM0LCAxOTQ3LCAwLCAwLCAKLSAgICA5MjY4MSwgNDI3NTksIDExMDY4LCAxNzA1LCA5MzMxLCAwLCA3NDc5OCwgOTE4MSwgNjUzNTksIDAsIDgwMTcsIDExOTgzMSwgCi0gICAgNjUwOTYsIDY2NzIwLCAwLCA0MzQ3NSwgMCwgNDkwOSwgMTIxMjYsIDEyODY3MywgMTIwNjk2LCA0OTA0LCA5ODMzMjUsIAotICAgIDY5NjUwLCAxMzY1LCA5MjUzLCA0Mjc1NywgNDM0MzYsIDc0NjIsIDAsIDAsIDAsIDAsIDExOTU4NywgNjQ0MTUsIDAsIDAsIAotICAgIDUzOTgsIDAsIDEyNzM4NiwgOTM5NTMsIDAsIDAsIDExOTAxNSwgMCwgMCwgOTQ3NiwgMCwgOTgzNzY4LCAxMjc2MywgCi0gICAgMTI2NjAzLCAzNjI5LCAwLCAxMzAwNSwgMCwgMzYyOCwgMCwgMCwgOTI1MDIsIDM0NjksIDQyMTA3LCA0MjExNiwgOTE3NTc4LCAKLSAgICA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgODUxLCA5MDQwLCAwLCA2NDY2NSwgNDMwODYsIDkxMTQsIDAsIDQyNTgzLCAKLSAgICA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAxMTk4MjEsIDMyMzYsIDExMzE3LCAxMjUxLCA3Nzc3LCA0MTg1MiwgCi0gICAgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIDEyMDI2OSwgMTAyNTksIDk4NjUsIDY1ODIxLCAwLCA2MDE4LCAKLSAgICA5MjI5MCwgMCwgMTIyNzYsIDAsIDY4MzcyLCAwLCA5MjI1OSwgMTE5MjQ0LCAwLCA5ODMyMjQsIDEwNDY3LCAwLCAyNDQzLCAKLSAgICAxMDkxOCwgNzgyMTcsIDExOTgyNSwgMTAwMSwgOTI0MSwgMTkyNywgMCwgMCwgNzM5ODcsIDEyNzg4NSwgMCwgMCwgCisgICAgMTE4OTA3LCAwLCAxMDQ3NCwgNDM0MjYsIDEzMjU3LCA0MjM1NCwgMTI4MDk5LCA5ODM2OTgsIDcwMDQ0LCAxOTUwNjUsIDAsIAorICAgIDg0MTMsIDk4MzgxNiwgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzQzNTAsIDE5NTA2MywgMCwgMCwgCisgICAgMCwgMTI2NjM5LCAxMjAwOTcsIDAsIDk0MDc4LCAxMjgxMzMsIDEyNzc2NywgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCAKKyAgICA0MjkxMywgOTIxODcsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAxMDc2LCA3NDMzLCAxNDM2LCA3Mzg0NCwgNTUyMjYsIAorICAgIDEyODM1MywgNjM5ODIsIDczOTMsIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgCisgICAgMTMwNywgMCwgMTA1MTUsIDQxNTg5LCAxMjg2OTgsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIAorICAgIDU0MTMsIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgOTgzNjMzLCAKKyAgICA0NTE4LCAxMDk5MCwgNjUwNzMsIDUxNjcsIDQ0ODEsIDM3NzEsIDEyMDE1OCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCAKKyAgICA0MzA3MywgNDE2OTAsIDEyNDc5LCA5ODM2MzUsIDAsIDAsIDk4MzgxOCwgNzAwNDYsIDE2MjgsIDEyNzE0OSwgOTgzNDg3LCAKKyAgICA5ODM3MzEsIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCA5NDA1NiwgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIAorICAgIDEzMDA0LCAwLCA0NDU3LCAwLCAwLCAxOTQ4MTgsIDAsIDU2ODQsIDg2NzgsIDEwOTE0LCAwLCA1Njg5LCA2NTgwNywgMCwgCisgICAgNjg0NjQsIDEyNjMzLCAxMjg3MCwgNjk3MDUsIDY1MTgzLCA1Njg4LCAxMTkyNiwgNjAzMywgNjMxMCwgNTY4NiwgMCwgCisgICAgNzQyNTEsIDAsIDEyMDY0NywgMCwgNTAsIDEwNTU4LCA5ODcxLCA0MjYxMiwgNDM2NTUsIDAsIDAsIDAsIDY2NDY4LCAwLCAKKyAgICAxMzI1OSwgNDQ0OCwgMCwgOTgzODQ1LCAwLCA3MDA0MywgNjc4NTMsIDAsIDEwNjQwLCAxMTUzOSwgMTE1MSwgMCwgCisgICAgOTE3NjA3LCAxMjc1NDQsIDEyNzA3OSwgMTk1MDUwLCAxMjc4NTIsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIAorICAgIDExODg3MCwgODgxMiwgMCwgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDIxMDUsIDgwODcsIDc4MTYzLCAKKyAgICA2OTYzMiwgOTg5NCwgMCwgMCwgMCwgNDYzNiwgNTUyNjIsIDc4NTEzLCA0NTE1LCAyMzgyLCAwLCAxMjcwNTUsIDAsIAorICAgIDEyMDQ5NSwgMCwgMTI4Mjg0LCAxMjI3NywgMTk0NjI3LCAxMTk5NSwgOTI1NTMsIDAsIDEyMTU4LCAwLCA4NzQxLCAxMDE5NywgCisgICAgMCwgOTI0MjYsIDAsIDY1MzEsIDAsIDEyNzg0NiwgNDczLCA0MzQxNSwgMCwgOTgzNjUwLCAxODczLCAxMDg3LCAwLCAwLCAwLCAKKyAgICA3ODUyNywgNjY0MzksIDQzMjE4LCA5ODMxMjMsIDE5NDcxNiwgNzIzNywgMTI1MDQsIDc0MjgyLCAwLCA5ODM1NzEsIDAsIAorICAgIDk0ODksIDAsIDAsIDQzODQsIDc0MjIwLCA2Mzg0NSwgMjA1OCwgMTI4ODYzLCAxMzI5NSwgNDMxOTEsIDEyODAzMCwgMCwgCisgICAgMTE1NCwgMzg1NywgMTIwNSwgMCwgMCwgMTMxMDAsIDEyOTU4LCAxMjA3MDYsIDc0MTY4LCAwLCAwLCA0NDIxLCAxMDU5MiwgCisgICAgMCwgNDk1LCAxMTkwMDcsIDQxNzEyLCA3OTgzLCAwLCA5Mzk5NywgMCwgNjM0NywgMTIwMTY1LCA3NjU0LCA0MTcxMCwgCisgICAgNDE5NiwgMCwgNDM3LCA0MTcwOSwgNzM3NzIsIDAsIDAsIDk0NjUsIDEzMjkwLCAxMTkxODAsIDQ5OTcsIDY0MzA2LCAwLCAwLCAKKyAgICA0OTk5LCAxOTQ2NDIsIDAsIDEyNjU4MiwgNDcxMSwgMTIwNzY5LCAwLCAyNzM5LCAwLCA4MDQ0LCA3NDgzNCwgMTk0NjQzLCAKKyAgICA0MTc4OSwgMTI4MTQyLCAxMDgwOSwgMCwgMCwgMCwgMTc3OSwgNjYwMCwgNjYwMSwgNDE1NDMsIDUzMjUsIDY0MiwgNjQxODcsIAorICAgIDEzMDU4LCAxMjA0NDksIDEyODc1LCAwLCA5MjE4NiwgMTMyMjksIDAsIDEwNTc1LCA0MzM5OSwgMCwgMCwgNDE3OTEsIAorICAgIDExMDQsIDAsIDAsIDEwNjU1LCAwLCAwLCAwLCAwLCAxMDgyLCAxOTUwNDksIDg0MjgsIDY1NjksIDAsIDAsIDAsIDY5ODQ5LCAKKyAgICA2NzgzLCAwLCAxMjk5MywgODA0OSwgNDE1NDgsIDQ0MDIxLCA2NDU4LCA5ODM4MDcsIDEyODg4MiwgNDc2MSwgNjM4MjgsIAorICAgIDQ3NjYsIDY0NjIzLCAxMjczLCA0MzQwNywgMCwgMTE4ODc2LCAxOTUwNDUsIDY5MTIsIDEzMTMsIDYzMjIsIDEwNDgzLCAKKyAgICA5ODM2MDMsIDQxNTQ1LCAwLCA5MjQ0OSwgMCwgMCwgMCwgMCwgNzg2MjQsIDM0ODQsIDc0MzM3LCAwLCAwLCA4NTAzLCAKKyAgICA1MTIyLCA0MTUyNywgMCwgNjYzMjAsIDk4MzgxMSwgMCwgMCwgMCwgNDE1MzcsIDY5NjgzLCA4MzAzLCA4MjgyLCAxMTgxNywgCisgICAgNzM4NTcsIDEwMDAzLCA3Mzg1OSwgNjU5MDQsIDczNjMsIDE2ODYsIDAsIDc4NDA2LCAxMTQ2NywgMzY2NCwgNjU5MjEsIAorICAgIDY0Mjk5LCAxOTQ2NjQsIDAsIDAsIDQzMjQsIDEyNiwgNDIyNDYsIDExOTE1MiwgMCwgNzQzNzgsIDY1OTI2LCA3NzQ0LCAKKyAgICAxOTQ2MzYsIDc0Mjc3LCA3NDMwMiwgNzgwNTIsIDQzODE3LCA2OTY2LCA0MzgyMiwgODEzNiwgMCwgNjU2MDAsIDE2MzMsIDAsIAorICAgIDAsIDQ3NjIsIDExMDMsIDAsIDAsIDQ3NjUsIDk4MzQ5MiwgMTMwNzgsIDAsIDQ3NjAsIDYzODI3LCAyMDUwLCAxMDg3MSwgCisgICAgNDMxOTksIDExMDIsIDAsIDQyMjM2LCAxMjg4NjcsIDE5NDY2NywgMTE1NDYsIDc0Nzk0LCAzMzcsIDAsIDQyNTkxLCA4NjI3LCAKKyAgICAxMjI3OSwgMTExMSwgMCwgOTIxNjEsIDQ3MDcsIDY4MjA2LCAxMDE0MywgNzg4MywgMTI3MDgxLCA3ODgwLCA0NTIyLCAKKyAgICA4NjQ1LCA1NzA0LCAxMzAxMCwgMCwgODMwNCwgOTE3NTYxLCAwLCAxMTk1NzUsIDIyOTMsIDAsIDY2NjU0LCAwLCA5MjY3NiwgCisgICAgMCwgMTMwMDgsIDAsIDQzODUsIDAsIDEzMDExLCAwLCA5MjU2OSwgMTE5MTYxLCAxMzAwOSwgMTYwLCAyNjc3LCAwLCAwLCAKKyAgICA0MTc5MywgNjU3NjMsIDc0MjIxLCAxMjAxNDEsIDQxNzkyLCA0Mjc3MCwgOTQwNTQsIDY1NzYyLCAxMTg4MjksIDQzODIxLCAKKyAgICA1NzA5LCAwLCA5NDA1MywgNDM4MTYsIDAsIDAsIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDQzNzk3LCA1NzA2LCA2NDc2OCwgCisgICAgNTcwNSwgODc5MSwgNDAwNSwgMCwgMTAyMzcsIDEwOTkxLCAxMjg4MTYsIDQzNDU5LCA5MTczLCA5MTc1ODEsIDkxNzU4MCwgCisgICAgMTMxNzAsIDEyNTQwLCA5MTc1NzcsIDQyNjA1LCAxMjA3NjUsIDEyNjYxNywgNjg2NDcsIDkxNzU3MiwgMTAwNTgsIDAsIAorICAgIDc0ODY3LCAxOTQ2NTQsIDEyNzA3OCwgMzMzOSwgMTE0NDgsIDExMDYsIDkxNzU5MSwgOTE3NTkwLCA5MTc1OTMsIDMzNDAsIAorICAgIDkxNzU4NywgOTE3NTg2LCA5MTc1ODksIDkxNzU4OCwgMTIwNTQxLCAxMDYwNSwgMTMwOSwgNjM5NjYsIDEyMDc0MywgMTc1NCwgCisgICAgOTIyMjYsIDEzMjQ2LCA4NjQsIDAsIDExODkyNiwgODk3MiwgMCwgNzg0OSwgMTIwMDkyLCA5MjUzMywgMTMyNDAsIAorICAgIDE5NTA2OCwgNTE5MiwgNDMzOCwgNjc5ODIsIDEwOTQ4LCA5MTc2MDEsIDEzMTk5LCA5MjU3NSwgMTIzNiwgMTMyMDgsIAorICAgIDEzMjYxLCAxMzE4OSwgMTMxODgsIDkzOTkzLCAwLCA3NDQwLCAwLCAxMjAxNTMsIDk1NTMsIDE1OTAsIDYzNzc3LCA2Mzc3NiwgCisgICAgMTMxNzgsIDYzNzgyLCA2Mzc4MSwgNjM3ODAsIDYzNzc5LCAxNTgzLCAwLCAxMzI2MCwgNDU1MCwgMCwgNjQyMDUsIDAsIDAsIAorICAgIDQxNTIyLCA5ODM5MTUsIDkyMTY4LCA5ODM3NzIsIDkxNzg1OCwgMTEzNTQsIDk0MDcxLCAwLCA0Mjc5NSwgMCwgMTE5MTk1LCAKKyAgICAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgMTMyNzIsIDEzMTk0LCAxMzM0LCA2OTkyNiwgNDQ3OSwgMTE3OCwgNjU1ODYsIAorICAgIDEyMDY2MywgNjY2ODEsIDExOTE5MywgNDYwMSwgMCwgMCwgOTgzNzY1LCAwLCAwLCAxOTQ2NTgsIDAsIDY4MDksIDYzNzg2LCAKKyAgICA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIDc1NCwgMTAxOTIsIAorICAgIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDY0ODkwLCAwLCA5ODMxMzEsIDAsIAorICAgIDQxNzE5LCA2Mzc1OCwgMzUyMywgMTA3NCwgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIAorICAgIDQzMTQ1LCAxMjIxNywgNjM3NTQsIDQxNTMyLCAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgCisgICAgNDEwODQsIDEyMDYyMiwgNjgxMzMsIDQxOTMwLCA2MzgwNSwgNjM4MDQsIDQzNjMyLCA2MzgwMSwgNDEwODIsIDgxNDAsIAorICAgIDYzNzk4LCA2MjYwLCAwLCAwLCA5NDA3NCwgNjM3OTMsIDExOTg4LCAzODk4LCAxMjgyNDEsIDEwMjAxLCAxMjIzOCwgCisgICAgNjM3OTUsIDQyMTk0LCAxMDM2NywgMTI1MjEsIDEwNDMxLCA0MjExNCwgNDE5MzIsIDEwNjgsIDAsIDEyNTIzLCAxMjk0NSwgCisgICAgOTgzMzI5LCA0MjIwMywgNzk1MCwgMTA4MDQsIDYzNzcxLCA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAKKyAgICAwLCAwLCA2Mzc2OSwgOTUzMCwgOTgzMTE5LCAxMjIzMiwgMTMxMzUsIDg1OTYsIDU2ODEsIDYzNzYyLCA0NTk1LCA2Mzc2MCwgCisgICAgNzkyLCAwLCA2NDgwMywgMCwgODc0MiwgMCwgMTEwNTMsIDEyODc5NiwgNjM3NDQsIDEyODEwNywgMCwgNzU4OCwgNjM3NDgsIAorICAgIDE2OTMsIDYzNzQ2LCA0MzIwNCwgNTA1NSwgNjg0MjYsIDkxNzg1MywgMTA5MCwgMTIwNjc5LCAxMjgzNTYsIDExNjY1LCAKKyAgICA3NDEzMywgNDU1OCwgNjU2ODUsIDk1MjMsIDAsIDAsIDc4NjgxLCAxMTUxMywgMCwgNjE1NywgNjM3NzUsIDYzNzc0LCAKKyAgICA2Mzc3MywgMTMxOTEsIDEyMTcwLCAzNTAwLCAzMTM5LCAwLCAzMTcwLCAxMjQ4NSwgMCwgMTA4NzIsIDc4MjcxLCAxMzAwNiwgCisgICAgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgMCwgMCwgNjU1NDEsIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgMCwgOTQwMzksIAorICAgIDAsIDkyNDU1LCA3Mzg2LCAwLCA2NDQ0NCwgMCwgMTE5ODYzLCA0MzYwMywgOTQwNzUsIDY1Mzk3LCAyODgsIDAsIDAsIDAsIAorICAgIDEwMDI1LCA2OTkxNSwgMjkxOCwgMCwgNjUzMDAsIDExOTg3MSwgOTg4MywgNjQ3MjYsIDI3OTAsIDY1Mzk1LCAzNzkzLCAwLCAKKyAgICAxMjc4MjksIDY1MzkzLCAwLCA3NDEzOCwgMCwgMCwgMCwgNzQxMzksIDkyNzEyLCA2NTM5NCwgMTE1NDgsIDUyNzAsIDAsIAorICAgIDY1Mzk2LCAwLCA2NTgxMywgMTMyNTYsIDEyODIsIDEyMDc3MSwgMCwgMCwgMTA4ODgsIDk4MzYwNCwgNjUyNDIsIDAsIAorICAgIDMzMzAsIDAsIDAsIDk4Mzk3NCwgMCwgMCwgNzQyNTksIDMzMDQsIDQyNzUzLCAwLCAwLCAwLCAxNjI3LCAwLCAwLCAwLCAKKyAgICA1MzcxLCAxMzExNiwgMCwgMTgyNiwgMTE4Nzk0LCAwLCA0MzA5NCwgNzAwMjMsIDQzNjUwLCA5NDAzNywgMCwgOTAzNSwgMCwgCisgICAgMCwgMTI4MDA1LCAwLCA5MjIwNywgNjgxMjUsIDAsIDE2NCwgMCwgOTQwNjcsIDk0MDAwLCA2OTU4LCAwLCA0MzExNiwgMCwgCisgICAgNzAwMTksIDEzMjQ1LCAwLCAwLCAxMjczNzYsIDAsIDcwMDMxLCAxMjc3NTYsIDEyNjY2LCAxMzE3NSwgMTMyMDcsIAorICAgIDEyMDQxNCwgNjYwMTQsIDEyMDQyOCwgNzQ0NywgNTkyOSwgMCwgNjU1MDksIDAsIDc0NDksIDExMzA2LCAwLCA3MzkyMCwgCisgICAgMzE4MCwgMCwgNjM4MDgsIDkwNTQsIDk3MSwgMTMwNjIsIDAsIDAsIDY1MTk1LCAxMDE2NCwgOTIyNTIsIDc0NDI4LCAwLCAKKyAgICA3ODE0NiwgOTI2MTEsIDAsIDAsIDAsIDEwMDQ1LCAxMjg4MiwgMTMyNzUsIDEyODE2MSwgMTEwNTcsIDAsIDEzMjc2LCAwLCAKKyAgICA0MTUyNSwgNzgxNTAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAxMjIyOSwgNDE1MjMsIDAsIDQzNDExLCA3Mzc1MSwgMCwgCisgICAgNjQ4MTMsIDAsIDAsIDEwNDc2LCAzODU4LCAwLCAzOTMyLCA2NDk1OCwgMCwgMCwgNzM5ODksIDY4MTkyLCAwLCA2OTg0NywgCisgICAgMzY5LCAwLCA0MTc4NCwgMCwgNjQxNjMsIDAsIDAsIDAsIDY1NDc0LCA0Nzk2LCAxMjI5MiwgMTI2NTk1LCA2NTQ3OSwgMCwgCisgICAgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgNDMwMDIsIDk4OTksIDAsIDAsIDQwNCwgMTI4MjEsIDM3NDEsIDAsIDU3ODgsIDgwOTIsIAorICAgIDY4MjEyLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDM5ODIsIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAwLCAxMjAxOCwgCisgICAgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgCisgICAgNDM3NCwgMCwgMTI4MTc5LCAxMzY0LCAwLCA4MDM4LCAwLCA5MTc1OTcsIDEyODY4LCA2OTgxNCwgMCwgNjczNSwgNzM5NzksIAorICAgIDEzMTc0LCA3Mzk2OCwgMTMyMjUsIDAsIDY5ODA4LCA2NTgzNSwgMCwgMjM2NSwgNzg0MSwgMCwgNDI4NTUsIDExODg1NiwgCisgICAgNDI4NjYsIDAsIDAsIDAsIDY2NDM4LCA0MTc4NSwgMTI2MTcsIDY0MTcyLCAxMzE3MywgNDM3MiwgMTE5MzU0LCAwLCAKKyAgICA5ODM1NjgsIDAsIDAsIDkyNDAyLCAxMjgwNjIsIDEyOTY1LCAzODQsIDY0NTEyLCAxMDQwNCwgMTAzNDAsIDExOTM1MiwgCisgICAgMTU1NiwgNTI3NCwgMTMyMTAsIDEyMDEyNSwgMTAwMTcsIDk3MzMsIDQxNzg3LCA5ODMyNDMsIDEyNjk5NCwgNDEzNzMsIAorICAgIDc4MDM5LCAxMjMwMywgMCwgMTMyMzIsIDEzMjMzLCAzNDksIDQ4NjMsIDQxMzcxLCAxMTY1NiwgMCwgMTIwNzAzLCAKKyAgICAxMTk4ODMsIDEyODYxLCA0Mzk4LCA4NTQzLCA2NTYxOCwgMTI4MDE4LCAxMDk2LCAwLCAwLCA0MjY4OCwgMTI0NDEsIAorICAgIDEyMzU1LCAxMTkzNDgsIDExOTM0NywgNDMxOCwgMTA0NTIsIDAsIDgwMzIsIDEzMjQzLCAxMzIzNywgMTI3MTksIDEyNjY0NiwgCisgICAgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIDAsIDEyMDc4NSwgMTE5ODc0LCAKKyAgICA5NDEwNywgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgMTE5ODc5LCA2NjU5MCwgCisgICAgMTI4MTIzLCA0MTUzMywgNjYzMzcsIDAsIDkyMTg0LCAwLCA0OTY1LCA0MzQ0NSwgOTE3NTM2LCA3Mzg0OSwgMCwgNDM2MzgsIAorICAgIDc4NTM3LCAxMjgyODcsIDYyNjEsIDExOTM0MiwgNDMxNDcsIDY2NTcwLCAxOTU3LCAxMDQyMCwgOTgyLCAyNzU2LCAxMzI5MiwgCisgICAgMTMyMDYsIDEyODgyOCwgMCwgMjkyNSwgNzM4MDksIDEzMDU2LCAxMjc1NTksIDEzMjEyLCA0MzIzOCwgMCwgMTMxOTAsIAorICAgIDEzMTg3LCA5MjU0MSwgMTMxOTgsIDExODc5MywgMCwgNTI0MiwgMTE5MTc5LCA2NDQ3NiwgMTY5NCwgODIxNiwgNzEzNjksIAorICAgIDY3NzAsIDQzMzMxLCAwLCA2NTYyMCwgOTgzNzI4LCA0MzU0NCwgMTI2NDY2LCAwLCA0MTQ0NCwgNjU2MjEsIDY5OTU1LCAKKyAgICA5MTk3LCA1MjQ2LCAxMTkxMDYsIDEzMTg1LCA5NzA5LCAxMjAzMjMsIDEyMDMyMiwgMTIzMTQsIDY1NjE2LCA1MjM4LCAKKyAgICAxMTkzMzMsIDAsIDExOTMzNywgNTIzNiwgNDA5NzksIDAsIDc0MjAxLCA4Mjg2LCAxMjg1MzcsIDM5MzYsIDExOTMzMSwgCisgICAgMTE2OTksIDQxMzQ3LCAxMjcyNDksIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgMTMyMzksIDEyNjkyLCA3OTY5LCAKKyAgICAxMjcyNjYsIDcyMTksIDEyNzI1MCwgMTI4MjUxLCAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIDI5NzksIDEyMDMwMywgNjU2MTksIAorICAgIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgCisgICAgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgNTM3OSwgMTIwMzE4LCA0MTE2MywgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAxMTUwNiwgCisgICAgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCA0MTc3NSwgMCwgNzEzMCwgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCA2MTUxLCAKKyAgICAxMjExMCwgNDI2NzMsIDY1NTcyLCA2NTI5MywgNjUyNTAsIDEzMjY1LCAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDAsIAorICAgIDkyNjQ3LCA1ODA4LCA2NTkyMiwgMCwgMTI5NjcsIDY2MDQxLCA1NjEyLCA0NTgzLCAwLCAwLCA2ODA5NywgNjQ1NzUsIAorICAgIDEyNjYzNywgMTE5NjUsIDAsIDY4MzU4LCAwLCA2OTc4OSwgMCwgOTIyNjAsIDY4MTAyLCA5Njk4LCA3ODE0LCA3NDQ3NiwgCisgICAgMTE5NjUxLCAxMjg1MTQsIDAsIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIDExOTI1OCwgNzg0OTAsIDc0MjE5LCAwLCAwLCAKKyAgICAxMTg5OTcsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgNTU4OCwgMCwgNDE5MjUsIDEyODEyNCwgNDE5MjAsIAorICAgIDU2NzMsIDEyMDUzNCwgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIDU2NzIsIDEyOTQsIDAsIDc4MDU5LCAwLCA0MjUxMSwgCisgICAgMTcyNywgMTIwNzI1LCA0MjQzNiwgMCwgMCwgMCwgNzQyMjIsIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDEwMzE2LCAKKyAgICA3NDA5MCwgNTgyNiwgNTUyMzIsIDU4MTMsIDAsIDEyMDcxMiwgNTg0MSwgNTgzNywgNTUyMzQsIDAsIDMxMDUsIDEyODI5LCAKKyAgICA1ODM4LCA1Nzk2LCAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIAorICAgIDU5OCwgMCwgNjQ2NDksIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCA1NjcxLCAxMjAwNDEsIDk4MzI1NSwgMCwgMCwgMTI4ODU1LCAKKyAgICAwLCA4NDcsIDEyODI0MiwgOTUyOSwgMCwgNjY2NTcsIDY5ODAsIDc4NDgzLCAxMjAwMzUsIDc4NDg0LCA5ODM0OTEsIDAsIAorICAgIDEyMDAzMywgNzg0ODYsIDAsIDAsIDEyMDAzOSwgNDI2ODMsIDAsIDk4MzA1NSwgNzExNCwgMCwgMCwgNDMxOTAsIDY1NDYzLCAKKyAgICAxNTU0LCAwLCA0MjYxMSwgNDI1NjMsIDAsIDU2NTEsIDI5MjksIDY3OTIsIDQzMjAxLCAwLCAxOTk2MywgNTY5OCwgMCwgMCwgCisgICAgMCwgMCwgNTY0NCwgMTAyOTIsIDY1NTQ2LCA2OTcyNywgNjgxNDEsIDgzNzIsIDAsIDY1MTE2LCAwLCAxMjAwMjIsIDEwMTc1LCAKKyAgICAxMDM4OCwgNDI3OTksIDk0MTAwLCA0MTAxMywgMTA1NjgsIDAsIDk4MzYxOCwgMjg2OSwgMCwgNDEwMTUsIDE5NDY5MiwgCisgICAgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCA0MjYwOCwgNzg0NjksIDk4ODQsIDQ3NTksIDAsIDAsIDEwMjY2LCAKKyAgICA0MTM1OSwgMTE3MCwgNDMzNjUsIDY5ODEwLCA3MzkwOCwgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMTI4ODc1LCAxMTY2MSwgCisgICAgODEyMiwgNTgxOCwgMCwgMCwgMzg2MSwgOTU0MCwgMTEwMjgsIDI1NTQsIDUxNTgsIDU3MTQsIDIyMTMsIDAsIDAsIDgwNywgCisgICAgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAwLCA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIAorICAgIDEyNjYxNCwgMCwgODY3NiwgOTgzMjkxLCAwLCA1NTgyLCA0NTEsIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMTI3ODU4LCAKKyAgICAwLCAwLCA0MzYwOSwgNTkwNiwgMTIwNTUzLCAxNDQwLCAwLCAxMjg4NTMsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCAKKyAgICA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgCisgICAgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgCisgICAgMzgzLCA3MTU0LCA0MTY1NiwgOTI2MzQsIDk0MDQwLCAwLCA1MTg3LCA3MTI5NiwgMTI3Mjc3LCAxMTI4NiwgNjg2MjAsIAorICAgIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIDk4MzgyNywgODI5MiwgMTk1MDc0LCA0OTgwLCAKKyAgICA4ODYwLCA3Mzk0NywgMTAwMjgsIDY1MjkxLCA3MDc2LCAxMzE4MiwgMTk0NzA1LCAwLCAwLCAxMDYzMSwgNjYwMzEsIDc5NzIsIAorICAgIDAsIDc4Nzg1LCAwLCA3OTAwLCAwLCAxMTMwOSwgMzgwNiwgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCA5MjU1MiwgCisgICAgMCwgMTI5MzEsIDAsIDQyNjg0LCA3NDI4NSwgMjA4OCwgNjQyMTMsIDY0MzY2LCA2NTE1NiwgODgxNCwgNDIyMzgsIDc0NzcxLCAKKyAgICAwLCAwLCAxMjgzNiwgMCwgMCwgNzQzNDIsIDg1OTMsIDAsIDAsIDY4NDQ1LCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIAorICAgIDAsIDE5NDY1MCwgMTI3MTQ0LCAwLCA5MzQyLCAxMjA0NjQsIDAsIDY0NTE2LCAwLCA3ODc5MiwgMTAxMjksIDQxMDA3LCAKKyAgICA3NDM3NSwgMCwgNDA5OTUsIDEyMjA5LCA0MTAxMiwgMTE5MTM2LCAwLCAwLCA2OTcyNCwgNDA5OTIsIDkyMjY0LCAxMjcxNTMsIAorICAgIDY4NjUzLCA0MzU1OCwgNTUyMiwgMCwgNjEsIDAsIDc0MTA1LCAzNjMzLCA5ODM5MDAsIDY1MTYyLCA0MTIzNCwgMTIwODksIAorICAgIDc4MjgxLCA5NzcxLCA5ODM5MDUsIDEzMjUxLCAxMjg3MDEsIDAsIDYyNjIsIDI3ODQsIDQyNzQzLCAwLCA4MTI2LCA2NjQ4MywgCisgICAgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCA3MTA4LCAxOTQ3NzksIDEwODkwLCAKKyAgICA3NDQ4MSwgNjU4MzQsIDgzMjQsIDExOTEwMywgNjQ0MTcsIDc0ODE3LCAxMjc0NjUsIDY0NzM3LCAwLCA5ODM2NTksIDg5MzAsIAorICAgIDY2Njc4LCA3NDI0OSwgMTE5MywgMTAwNTYsIDE4MDAsIDEzMjUzLCAxMzI1MiwgNzgyOSwgMCwgMCwgNzc0MywgMCwgMCwgCisgICAgNzc5MDQsIDkyNjQwLCA3NzkwNSwgOTAzNCwgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgMTAzMzgsIDY2NDY5LCAKKyAgICAwLCAwLCAwLCA0MjgxNSwgMCwgNDE5NjYsIDAsIDEyNzQ3MSwgMCwgMTE3OTIsIDQzMDY0LCA0MTAyNSwgOTExLCA3NTM5LCAKKyAgICAwLCAwLCAxMjAzMzksIDY1MTU5LCA2NDM5MCwgMCwgMCwgNTUyMCwgMTE2NjIsIDAsIDY1MzMwLCA0MjgxMiwgMCwgMCwgCisgICAgMTIzMjYsIDk4Mzg1NiwgMCwgNDI4MDgsIDEyODMzNywgOTM0OCwgNjQ5MDEsIDk4Mzg2MSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOTE3NTg0LCA0MzcwMiwgOTgzNTc2LCA1ODU3LCA2NTM0MiwgOTI3MjcsIDExOTEyMCwgMTIwMDc5LCA4NjQ0LCAwLCAwLCAwLCAKKyAgICA3NDI5NiwgNDE5MDksIDAsIDEyMDMzMiwgMjc5MSwgNjk2NjMsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIAorICAgIDExODkzOSwgODc2MSwgMTI5NDIsIDU3NDgsIDAsIDEwNzczLCAwLCAwLCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgODUyMCwgCisgICAgMTMxNDYsIDEyNzE4NSwgNjM5MzEsIDAsIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCA5MjQ1OSwgCisgICAgMCwgOTgzNjYwLCAwLCA3Mzg2MCwgMCwgMCwgNjQzNDUsIDAsIDkyMDEsIDEyODMxNCwgMTk0OTQwLCAwLCAwLCA0MzY3OSwgCisgICAgOTE3NTg1LCA2NTExNywgOTIyNzAsIDAsIDEwNDI3LCAwLCAzODQ0LCAxMjA2NzUsIDk3NTUsIDExMTAsIDY2MTIsIDEyMjIyLCAKKyAgICAwLCAxMjg3ODksIDAsIDAsIDc4MywgMTk0OTM1LCAwLCAwLCA5ODMwNjQsIDE5NDcyMCwgNjUwNTYsIDM2MjAsIDQxMTgwLCAKKyAgICA2ODM3OCwgNDU1NiwgMCwgMCwgMTk0OTMzLCA3NDI1MCwgMCwgNjc2NTcsIDEwNTEwLCA0MzgyLCA2NjQ4MiwgMCwgMCwgCisgICAgMTI3NTI3LCA5MTc3LCA4OTAyLCA5Mzk1OCwgOTgzOSwgMCwgMTI4OTEsIDk4Mzc1NSwgOTgzNjM2LCA2Mzk5OSwgMjAxNiwgCisgICAgNDE5MTcsIDk3ODgsIDYzOTI4LCAwLCAxODYyLCA2NTgwMCwgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgCisgICAgODU3OSwgNDE5MTQsIDc5ODEsIDAsIDY2MDE3LCA0NTA4LCA2NDg4MywgOTI0NTYsIDkyNTIyLCAxMjc4MTQsIDAsIDY0NTkyLCAKKyAgICA3NDI3NiwgMTIwMDgwLCA2Nzg0LCA3ODc4OCwgNjgxODEsIDAsIDAsIDAsIDEyNzUzNCwgMTIxNDcsIDkwMjQsIDY2Mzc4LCAKKyAgICA2NjQ3MiwgOTgzOTI5LCA2NDI4OSwgNjUyODksIDc4MTUxLCA2NjY1OCwgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIAorICAgIDEyNjUwNSwgMTEwNTEsIDk4MzI5NiwgMCwgMTEzNTUsIDY1ODg1LCAwLCAxMjgzMTAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgCisgICAgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgOTk2MywgNjg2NDksIDEyNjYwOSwgNDA0MCwgMTIwNTcwLCA2MTY3LCAwLCAKKyAgICA2MzkyMiwgNjU5NCwgOTgzNzQwLCAwLCAwLCAzNjI0LCA0MzAzNiwgMCwgNjM4NywgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgCisgICAgNDE5NTUsIDAsIDYzOTkzLCAxMDQ0MCwgOTYxMSwgNjU2MDUsIDY4MDMsIDAsIDc3MzgsIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIAorICAgIDkyNjQxLCAzNDM1LCA3ODE2NCwgNDM4MTQsIDQzODEwLCA3MDI5LCA2NDI1OCwgNDEyOTIsIDExODg5OCwgMTI3NDgsIAorICAgIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIDAsIDY3OTkzLCA2Mzk1NiwgNDI0NTgsIDYzOTU0LCA2Mzk1MywgCisgICAgNjM5NjAsIDk1OTEsIDQ1MTYsIDEwMjE3LCA2ODM3MCwgMTE0NjksIDY5Njk3LCA0MjMwNiwgMjcyMywgMTE4OTQ3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCA0MjcwLCAwLCAKKyAgICA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIDEyMDEzLCAwLCAKKyAgICAwLCAxMjY0NzksIDQxNSwgNjM5NjQsIDYzOTYzLCA0MjM0NSwgOTIzMTAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAKKyAgICAwLCA2Mzk2MSwgNDQ3MiwgMCwgMCwgNzgxNTksIDY5Njk5LCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAxMjgwNzgsIDcwODEsIAorICAgIDEwNzMwLCA3NjkxLCAxMDMzMSwgNjM4MzAsIDExOTYyNSwgNDI5MjIsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgCisgICAgMTYwNCwgOTU2NSwgMTA1MzksIDY5NzAxLCA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIAorICAgIDY0ODczLCAxMTk5MiwgMCwgMCwgNjM5ODAsIDExODAxLCAzNjIyLCA5ODMxMjQsIDY0MzM2LCAxMjAxNywgMTA0NjMsIAorICAgIDYzOTgxLCA0OTY3LCA2NDE4OSwgMTk2NiwgNDM2MjgsIDAsIDk4MzI5MiwgMCwgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIAorICAgIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCA0MDIsIDAsIDEzMTQ3LCAxMjg2OTIsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIAorICAgIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIDAsIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCAKKyAgICA5MjM1MSwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCA5MjM1OSwgNjQ5NDIsIDk4MzU1OSwgMTk0NzMzLCA5ODM2ODYsIAorICAgIDE5NDczMiwgMCwgNzQzMDEsIDAsIDExMjgwLCAwLCA2OTc4NCwgNzQwNjAsIDAsIDAsIDExOTY2NCwgNTE0NSwgMTI0ODYsIAorICAgIDY1MDE4LCA2NjUxNiwgNTQwOSwgMTI3Mzc5LCAxOTQ2NjksIDc0MDIsIDUzOTksIDk2ODUsIDc0MDg5LCA3OTUyLCA1NDAxLCAKKyAgICAwLCA2NjYxNiwgNjg0MjEsIDk4MzkxOSwgMCwgNTQwNSwgMTI3ODc1LCA2NDg2NiwgMCwgMTE5NTgzLCAxMjgzNDUsIAorICAgIDc4Nzg0LCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgNjQ2OTAsIDMyNTQsIDAsIDAsIDEyODIwNywgNDIzOTAsIDQzNjc4LCAKKyAgICAxOTQ3MjUsIDk4MzkwOSwgNjUwNzcsIDAsIDYzODgsIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAwLCAKKyAgICAzMzc3LCAwLCAwLCAwLCAwLCA3ODIyOCwgMCwgOTgzNzYyLCA0MjY5MSwgOTE3ODg2LCAxMjcxOTgsIDc0NzY3LCAwLCAKKyAgICAxMjcwNzUsIDEzNzksIDI0NiwgMCwgOTgzNzYxLCAzNzg4LCA5ODMxMDYsIDExMDQxLCA5MjU0OSwgNjYzMDQsIDAsIDAsIAorICAgIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDAsIDAsIDAsIDAsIDk4MzY5NywgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCAKKyAgICA5MjIxNywgMTMxNjMsIDk4MzIwNCwgMTIwODMxLCA3NDU5NywgMzE4MiwgMCwgMCwgMCwgNjUwMzQsIDY1ODg5LCA0MjE2OSwgCisgICAgNDc1NSwgNzQyNDQsIDE5NDYyMSwgMTE0NDMsIDAsIDY2MzE5LCA3NDU5OCwgNjA4LCA2MDAsIDAsIDEyMTksIDM5MzQsIAorICAgIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCA0MjQ0MiwgNjU0NzAsIDk4MzkwNywgNjQyMDIsIDEzMTYwLCA3NzU5LCAKKyAgICA0MjQ4MiwgNDg1LCAxMjgwMDYsIDAsIDk4MjgsIDAsIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgCisgICAgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCAKKyAgICA3MDA0NSwgNDM1MzksIDU0MTEsIDQyMTk2LCAwLCAwLCAwLCA5MTUwLCAwLCA0MjM5MywgMTMwODYsIDEzMTAsIDE5NDY4NywgCisgICAgOTMzNywgMTIwNTIsIDEwNjQzLCA1NTI3MSwgOTgzMTc5LCAxMjE2NiwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgCisgICAgNjU2MTEsIDAsIDAsIDE5NDc1NiwgNzQzMTAsIDY1NTQsIDAsIDExOTE0LCA1NDUyLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIAorICAgIDkyNTYwLCAyNzEzLCAwLCA5NjUwLCA0MzMzMCwgMCwgMTk0Njc1LCAxNDA2LCAwLCAwLCA5MjY1OSwgMCwgNjgyMjMsIAorICAgIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIDQxNDEsIDk2ODIsIDY1Mjg3LCAxNTA4LCAxMjcwMTMsIDg3NzksIDEwNTY5LCAKKyAgICA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgNDE0NSwgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIAorICAgIDU1MjUwLCA5MTg1LCA5NTUwLCAwLCA0MzQwMywgMCwgMCwgMCwgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDk4MzIwNSwgCisgICAgMTI5NTUsIDEwNTk2LCAyODg4LCAxOTQ2NDUsIDAsIDAsIDk2NTcsIDkwMTksIDE5NDc2NiwgMCwgMjg3OCwgNTM5MCwgMCwgCisgICAgMTk0OTYxLCAwLCA2ODY3OSwgNDM1NTIsIDc1MDEsIDYzMjgsIDAsIDEwNDI5LCAxMDM2NSwgMCwgMCwgNDE5NDYsIDc1MDMsIAorICAgIDUyMzUsIDgwMywgNjgzODEsIDAsIDAsIDg5ODYsIDEyNjU0MiwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMCwgCisgICAgMTI2NjQ3LCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIDkyODgsIDY0ODIyLCAyODkyLCAwLCA0MzM5NCwgNTU1LCAwLCAwLCAKKyAgICA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIDcyODksIDc0MDU1LCA2NDE2MSwgODg1NCwgNjQxNjIsIDU4NTgsIAorICAgIDQxOTI3LCAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMTI4ODEzLCAxMzE1OCwgCisgICAgOTIxNjYsIDcyMTEsIDAsIDkzNzEsIDczOTczLCA5MTc1NTMsIDY4MjgsIDE2MjUsIDkyMzAyLCAwLCAxMzQyLCA2ODQ0MCwgCisgICAgNjQxNzEsIDEyNjcwNCwgMTA5MDMsIDk4MzQ5NCwgMCwgMCwgMCwgMCwgNDQ4MiwgNDE2MDYsIDAsIDEyODU2OSwgOTgzMTEyLCAKKyAgICAwLCA2NDM4MSwgMCwgMCwgMTk1MDkwLCA0MjI0NSwgMTI2NDY3LCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCA2NjY4NywgCisgICAgNjY2MTksIDEyNjQ4OSwgNzgwMjUsIDAsIDExMzQ5LCA0MDk5MSwgOTE3NTcwLCAwLCAxMTk1OTksIDEyMDgzMCwgMCwgCisgICAgMTE5NywgMTI4MjgyLCAxMTQ5LCAxOTQ5NzAsIDAsIDAsIDQwOTkwLCA0Mzc2NSwgMCwgMzQ5MiwgMCwgMTI3OTQyLCAwLCAwLCAKKyAgICAwLCAxMjgzOCwgOTgzOTc4LCAxOTk0OCwgMCwgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIAorICAgIDQxMzA5LCAwLCAwLCA4MTUyLCAwLCA0MTU1MCwgMTIyMjcsIDk4MzYxMywgMCwgMTI4MjgsIDEyNzUxMSwgMCwgMCwgCisgICAgMTIwNzA4LCAwLCAwLCAxMDM4NiwgMTE5NTc0LCAwLCAwLCA5MjY4MCwgOTgzNzg5LCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgCisgICAgOTIyMzksIDY1MTg2LCA5MTc1NzEsIDAsIDk2MDYsIDAsIDAsIDY0NDM5LCAwLCAwLCA5MjY4NiwgMCwgMCwgMTk0OTY3LCAwLCAKKyAgICAwLCAzMzk1LCA5MzYyLCAxMDg3OCwgMCwgMCwgNzgzNjIsIDY0ODMwLCAwLCAxMjY1NTcsIDQxMDkxLCAzNDI2LCAxMzQ0LCAKKyAgICA4ODcwLCAwLCAwLCA0NzM1LCAxMjcwMTcsIDYxMTksIDEyODIyLCA0MjY5OSwgMCwgOTgzODI0LCA3NDgxOCwgMTQyMywgMCwgCisgICAgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgMTA1NTksIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgMTE5MjksIDAsIDcxNzAsIAorICAgIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCA3ODcxMywgMCwgMTk0NzQwLCAxMjg2OTEsIDkyMTg1LCA2NjY5OSwgCisgICAgNjQ0NDAsIDEwMDQsIDkyNTg0LCAxOTQ3MzcsIDQzMjM0LCA2NjAwOCwgMTI2MjcsIDAsIDY4NDE0LCAwLCA0MzYxOSwgCisgICAgNDMzMDMsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgMTE3NzYsIDc1NTgsIDEyNzE1OCwgNjU2MjcsIDAsIDEwNzE4LCAKKyAgICAxMzE1NCwgMzQ2MSwgOTEzOSwgMCwgMCwgMCwgMCwgNjUzNjUsIDczODc3LCA2NTYyOCwgNzgwMTksIDEyMDMxOSwgMCwgCisgICAgNDE3MDgsIDEyODYwLCAyNjQxLCAxMjA2OSwgMTA4MzgsIDU0MDMsIDEwMzUyLCA3MDA4NSwgMTAwNjEsIDQzMjM3LCAwLCAKKyAgICA1MTQwLCAyMDksIDEyODg0NywgNDE3MDQsIDQxMDU2LCA0MzA3OCwgMTI4MTI1LCAxMTg4MDksIDAsIDEwODk5LCA2NTQ2OSwgCisgICAgOTIzNjIsIDAsIDAsIDI0MTAsIDk5MywgMCwgMTIwNTg5LCAxMjA2ODksIDc4NjkzLCAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIAorICAgIDAsIDcxMTAsIDc0NDYyLCAyMDY2LCAxMDQ4OSwgNDIxNjYsIDQzNDYzLCAxMDY1OSwgMzYwMCwgMCwgNDIyNCwgMTMzNiwgCisgICAgNDE1MTgsIDAsIDAsIDAsIDAsIDQxMTM5LCA2NDgyMCwgOTI1MzgsIDEyOTY2LCA0MTEzNCwgMCwgMCwgMCwgMCwgMjcyLCAKKyAgICA0MjYzLCA4NzkzLCAwLCAwLCA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCAKKyAgICA1ODg4LCA0MTM1OCwgNjQ4NjMsIDk1NDQsIDQzNDgxLCAwLCAxOTQ4MDYsIDcwMDI3LCAyMDk5LCA1MTIwLCAyNDA5LCAKKyAgICA3Nzk5LCAwLCA3NDQyNCwgMCwgMCwgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIDAsIDk5MTMsIDAsIAorICAgIDAsIDY0OTE0LCA5MTc3ODcsIDY1MTAxLCAwLCAxMTY5NCwgOTI0NzUsIDExNjkwLCA1ODM1LCAxMjcxNjQsIDY2NjI1LCAKKyAgICAxMDg0MiwgNDEzNTQsIDQyMTIzLCA0MzA5NywgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAKKyAgICAwLCA5OTcyLCA3Mzg2NSwgNDUxOSwgNjExNCwgMTA4OTgsIDQzMDcyLCAwLCAwLCA5Mzk2MCwgOTgzMzIyLCAxMjY1ODEsIAorICAgIDEwNjk1LCAwLCA3NTQwLCAwLCA4ODEsIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAxMzMxMSwgNjg0MDMsIDQxODU3LCAKKyAgICA2NDMyMSwgODM1OSwgMCwgMTI2ODksIDAsIDE5NDU5NCwgMCwgOTgzMzEyLCA5ODM4ODEsIDY4MTgzLCAwLCA5ODMzMTQsIAorICAgIDEyODcsIDU0MzYsIDAsIDk4MzMxNywgNzQxNDIsIDkyMzI4LCA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgNjk2NjgsIAorICAgIDg5ODUsIDEyMTA5LCA5ODMzMjMsIDAsIDEyNzI0MiwgMCwgMCwgMzY1MiwgMTA1MzcsIDAsIDEyNzYsIDEyMDQ0MCwgNjU0OSwgCisgICAgMjc5LCA3Mzc0NSwgMCwgMCwgMCwgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgNDIxMjQsIDk4MzU1NywgNDIxMjIsIAorICAgIDkyMzM3LCA5MjM2NywgMCwgMTE5ODUsIDEzNDUsIDc4NjAwLCAwLCAwLCA4OTU2LCA0MzA4MywgOTQwNTcsIDQyMTM4LCAKKyAgICA3ODYxMCwgMCwgMTIxNTEsIDc4NjA4LCA3ODYwNCwgNzg2MDUsIDYyODUsIDc4NjAzLCA3ODYxMiwgNzg2MTMsIDY1OTQyLCAKKyAgICA0OTIsIDg2ODUsIDAsIDk4Mzc1OSwgMCwgNzg2MjIsIDQzNzEyLCAyNTgyLCAxMTQ3MCwgNjQ1MzgsIDc0NDQsIDc4NjE1LCAKKyAgICA3ODYxNiwgMjI5NywgMCwgNzM4MzcsIDExOTgyMywgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDkyNTk0LCA0MTk0NCwgCisgICAgMTIwMjc2LCA5OTMzLCAwLCA2NjUxNSwgNzY3LCA1NTI0LCA3MDI4LCAwLCAwLCAxMTk4MjcsIDExOTgxNywgMTE5ODI4LCAKKyAgICA3ODYzMywgMTA4OTYsIDAsIDE3OTksIDEyMDQ5NywgNjk3MSwgNzQzMzYsIDEyODM0MiwgMCwgNjUzNDAsIDExODk3OSwgCisgICAgNDE1NTEsIDI0MzQsIDk0MDE4LCAwLCAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIDAsIDYzMzgsIDQzMjE0LCAwLCAKKyAgICA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAwLCA5Mzk4MywgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDkzOTU5LCAzMTcxLCAKKyAgICA2NjIzLCA0OTYxLCA2ODM5NiwgODg2LCA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgNzAwNjYsIAorICAgIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAxMDk0NCwgCisgICAgNDEyMDgsIDk4MzcxMywgNDExNjgsIDgxNzgsIDAsIDMzNjcsIDkyMzM0LCA0MjUxMCwgNzg2NDEsIDc4NjM2LCA2ODA0LCAKKyAgICA3ODYzNCwgMTk0NywgMCwgMCwgOTI2ODEsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgNzQ3OTgsIDkxODEsIAorICAgIDY1MzU5LCAwLCA4MDE3LCAxMTk4MzEsIDY1MDk2LCA2NjcyMCwgMCwgNDM0NzUsIDAsIDQ5MDksIDEyMTI2LCAxMjg2NzMsIAorICAgIDEyMDY5NiwgNDkwNCwgOTgzMzMzLCA2OTY1MCwgMTM2NSwgOTI1MywgNDI3NTcsIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAKKyAgICAxMTk1ODcsIDY0NDE1LCAwLCAwLCA1Mzk4LCAwLCAxMjczODYsIDkzOTUzLCAwLCAwLCAxMTkwMTUsIDAsIDAsIDk0NzYsIDAsIAorICAgIDk4Mzc3NywgMTI3NjMsIDEyNjYwMywgMzYyOSwgMCwgMTMwMDUsIDAsIDM2MjgsIDAsIDAsIDkyNTAyLCAzNDY5LCA0MjEwNywgCisgICAgNDIxMTYsIDkxNzU3OCwgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIDQzMDg2LCA5MTE0LCAKKyAgICAwLCA0MjU4MywgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgMTE5ODIxLCAzMjM2LCAxMTMxNywgMTI1MSwgNzc3NywgCisgICAgNDE4NTIsIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIDEwMjU5LCA5ODY1LCA2NTgyMSwgMCwgCisgICAgNjAxOCwgOTIyOTAsIDAsIDEyMjc2LCAwLCA2ODM3MiwgMCwgOTIyNTksIDExOTI0NCwgMCwgOTgzMjMwLCAxMDQ2NywgMCwgCisgICAgMjQ0MywgMTA5MTgsIDc4MjE3LCAxMTk4MjUsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAxMjc4ODUsIDAsIDAsIAogICAgIDExODgyOCwgMTIwMjcxLCA2NTY3OCwgMTI4NjcsIDAsIDgyNjAsIDc3OTQ1LCA3NTE5LCAxMTUwNSwgMTIyNzQsIDg5MDQsIAogICAgIDUxOCwgNjU4NTcsIDAsIDEyODY3NCwgMTMyMDQsIDQzODcsIDg1NywgMCwgNjUzNjksIDAsIDkyMzM2LCA0MzEyNSwgCiAgICAgMTIwNTkyLCAwLCAwLCAwLCAwLCA1MTM2LCAxOTY4LCA5ODMwNDEsIDEyNjYyNywgMTMzNywgNjQ5NjcsIDE2MjksIDAsIApAQCAtMTg3NzcsNDQgKzE4Nzk2LDQ0IEBACiAgICAgNzg2OTgsIDc4Njk3LCA3ODY5NiwgNzg2OTUsIDg3MTAsIDQyNDk1LCAxMTg5NTYsIDAsIDQwNTEsIDEwNDYwLCA0MzM2NCwgCiAgICAgMTE4OTE3LCAxMzU2LCAxMjE2MSwgNDI3MTMsIDEyODg1NywgMTI3MjY4LCAxNjE5LCA5NzAzLCA0MzE1MiwgNDI0ODksIAogICAgIDQyMTEyLCAxMjc5NzgsIDE4NzUsIDEwODA4LCA0MjEwOSwgMTIwMjg0LCA0MTg2MCwgNjQ4NjIsIDEzMzA1LCA2NDkwNywgCi0gICAgNTI4OSwgMTMxNDQsIDEyODY1OCwgMCwgNTU3NSwgOTY3NSwgMCwgNTk0MCwgMjI2LCAyNjQ5LCA2MzM2LCA5ODMyNjksIAorICAgIDUyODksIDEzMTQ0LCAxMjg2NTgsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNjMzNiwgOTgzMjc3LCAKICAgICAxMTk4MzAsIDQzMjM2LCAzMzgyLCA0MjQ0OSwgNjQ5OCwgMTY1OCwgMTE5MzYsIDc4MjMyLCAwLCAxMTI2OSwgMTAxNTEsIAogICAgIDczNzU5LCA0MzEwMCwgNjk4ODgsIDY1NTA4LCAwLCAwLCAwLCA4OTM1LCA5MTc5ODUsIDAsIDAsIDAsIDYxNiwgNzQ3NTMsIAogICAgIDY1MTc4LCA0Njg0LCA3ODcwMSwgMTE5NjUzLCAwLCAxMjY1NTEsIDAsIDYwNDgsIDc0NDYwLCA0MjExMCwgNzM5NjUsIAogICAgIDEwODcwLCA4NTU3LCAxMTA1NCwgNjg2NjQsIDExOTA0OSwgOTY4MSwgNDQ3NSwgMCwgNDExNDIsIDIxMDAsIDAsIDEyMDczMSwgCi0gICAgNjAzNSwgMCwgNzY1MSwgMTAyOTYsIDY0NDQzLCAwLCA5ODMyODcsIDkxNzk4NywgMCwgMTE4OTY2LCA3NDE0NCwgNDA5OTcsIAorICAgIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCA2NDQ0MywgMCwgOTgzMjk1LCA5MTc5ODcsIDAsIDExODk2NiwgNzQxNDQsIDQwOTk3LCAKICAgICAwLCAxMDM5MiwgMTAzMjgsIDQwOTk4LCA0MzQ2MiwgNzQ0ODgsIDAsIDk4MDAsIDg5NzksIDAsIDEzMzA3LCA0MTAwMCwgMCwgCiAgICAgMTE5MjM5LCA2NDg3LCAzMzg2LCAwLCAxMDM0NCwgMCwgNjUyOTksIDUzOTQsIDQzMjQ2LCA3ODI0MywgMTAyMjAsIDY2NTA1LCAKICAgICA0MTIwMCwgMTI4NTgzLCA0NDI1LCAwLCAwLCAwLCA0MzA3NCwgNzM3OTksIDk4MzIwMCwgNzgxNDcsIDAsIDEyMTczLCAKICAgICA3ODU0NSwgMCwgMTI3MDExLCA2NTMzOCwgMCwgMCwgMTE5NTgyLCA0NDc0LCAwLCA0MzA5MywgMTI4NjQ0LCAxNTg3LCAwLCAKLSAgICAxMjczNzIsIDY0NDc1LCAxMjgwOTgsIDEzNjksIDk4MzY2MywgOTk1OSwgNzkyNywgMCwgNDU2MCwgMCwgMCwgOTIyNzcsIDAsIAotICAgIDY0OTQ4LCA0NDMwLCA3NDM0NywgNDI2MDEsIDQ1MTQsIDY2NDM0LCA5Mzk1NSwgODE5NCwgNjU0NjIsIDEwNjI2LCAxMDk2NSwgCi0gICAgMCwgODg5MywgOTgzMjkzLCAxMjU0MiwgMCwgNjUzNDEsIDAsIDY1ODI5LCA3OTI1LCAxMTk4MjIsIDEwNDc1LCAwLCAwLCAKLSAgICAxMzUyLCAxMTA2OSwgNzcwNywgMTI3NTYwLCAxMjY0ODYsIDY1Mjc5LCAxMjcxMDIsIDY4MjA3LCAxMjcxMDAsIDcwOTksIAotICAgIDYwNDAsIDEyNzA5NywgMTAwNzEsIDAsIDkzMzYsIDQzNzUwLCAwLCA4ODk5LCA3Nzk4LCA2NDQ3NCwgNjQyNTksIDY5ODczLCAKLSAgICA2NTE4OCwgNzgyMCwgNDMwMTgsIDEyNzA4MiwgMCwgNzc0NiwgMTQ5MiwgNzg1NTEsIDEwODg0LCA3Nzk4MiwgMCwgNTEyNywgCi0gICAgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAyOTk5LCA2MzQyLCA2ODYzNiwgCi0gICAgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDAsIDAsIDYzMjMsIDE5NDY4NCwgODIyNCwgMCwgCi0gICAgODkzOCwgNjA0MywgMTI3MzgsIDAsIDk4MzA3NiwgNTMyMSwgMCwgMTk0Nzk4LCAwLCAyNTg5LCA3NDMzMiwgMTY4OSwgCi0gICAgNzgwMiwgNDY4MywgNzQzMTgsIDQyNzA0LCAxMjAyOTYsIDExOTA1LCAwLCAwLCAxMjg1MTYsIDEyODE2MywgNzQ1MTMsIAotICAgIDYwNDksIDAsIDQwMjcsIDgzNCwgMTE4OTYyLCAxODAzLCAwLCAxNTAzLCAwLCAwLCA3MTMxMiwgNTczMSwgMTM4MSwgMjM4NywgCi0gICAgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA0MzE0MiwgMCwgOTYwMSwgMjg3OSwgOTY2OCwgOTc2NiwgMCwgCi0gICAgNTcyOSwgOTE3ODMzLCA3NDQxMCwgNjAzNiwgNjQ4ODEsIDQwMjYsIDkzNjEsIDEyNzA5MSwgMjg4NywgMCwgMzUyNiwgCi0gICAgNjI5OCwgMCwgNzc4OTcsIDEyMDA5NSwgNzg1MTksIDAsIDg1NzIsIDYwMjEsIDc3ODk2LCAxMjgyODgsIDc3ODk1LCAKLSAgICA0MzE1NSwgMCwgMTE5ODQ5LCAzMTQ2LCAxMDk1OSwgOTQ4MywgMCwgNzc4OTMsIDEwOTgxLCAxNjYsIDkxNzg0MSwgODYzNSwgCi0gICAgOTgzNjA2LCAxMDYyMywgNDA4LCAxMTkwNTgsIDEyNzUwNywgMTMyOTgsIDAsIDc0MjYsIDQxNjQxLCAxMjcxNywgMCwgCi0gICAgNzYwNywgMTA2MzksIDQzMzk2LCAwLCAwLCA0MTY0MywgNzQxMzQsIDk4MzA1NCwgODcxMywgNDE2NDAsIDEwMjIxLCAKLSAgICA0MTY0NSwgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgOTM5OTQsIDc3OTAxLCAzNDcyLCA4Njk3LCAKLSAgICAwLCAwLCA5ODM4MDYsIDAsIDAsIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgOTI0MzIsIDc0NTcyLCAwLCA0MjEzNiwgMCwgMCwgCi0gICAgMCwgMCwgMzI0NywgMTE5ODU0LCA2NTAxNywgOTgzOTQ0LCA2ODQyOCwgNjY2NjgsIDAsIDAsIDEwOTgzLCAwLCAwLCAwLCAKLSAgICA0MTU2NywgMCwgMCwgMCwgMTk0NjI0LCAxMTk4NTMsIDAsIDAsIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgMCwgCi0gICAgNDA5ODgsIDkyNTkyLCA3NDgwOSwgNDE3MjcsIDAsIDQyODQ4LCAyMzk2LCA5MTc3NjYsIDAsIDc0MDE4LCA5MTc1MzgsIAorICAgIDEyNzM3MiwgNjQ0NzUsIDEyODA5OCwgMTM2OSwgOTgzNjcyLCA5OTU5LCA3OTI3LCAwLCA0NTYwLCAwLCAwLCA5MjI3NywgCisgICAgOTgzNjIxLCA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCA2NjQzNCwgOTM5NTUsIDgxOTQsIDY1NDYyLCAKKyAgICAxMDYyNiwgMTA5NjUsIDAsIDg4OTMsIDk4MzMwMSwgMTI1NDIsIDAsIDY1MzQxLCAwLCA2NTgyOSwgNzkyNSwgMTE5ODIyLCAKKyAgICAxMDQ3NSwgMCwgMCwgMTM1MiwgMTEwNjksIDc3MDcsIDEyNzU2MCwgMTI2NDg2LCA2NTI3OSwgMTI3MTAyLCA2ODIwNywgCisgICAgMTI3MTAwLCA3MDk5LCA2MDQwLCAxMjcwOTcsIDEwMDcxLCAwLCA5MzM2LCA0Mzc1MCwgMCwgODg5OSwgNzc5OCwgNjQ0NzQsIAorICAgIDY0MjU5LCA2OTg3MywgNjUxODgsIDc4MjAsIDQzMDE4LCAxMjcwODIsIDAsIDc3NDYsIDE0OTIsIDc4NTUxLCAxMDg4NCwgCisgICAgNzc5ODIsIDAsIDUxMjcsIDExMjg1LCA0MjUwMSwgNTQ5NSwgNDI3MywgNDMwOTUsIDQxNDI2LCAxMDg0OSwgNTczMCwgCisgICAgMjk5OSwgNjM0MiwgNjg2MzYsIDc0MzA0LCAzNzEsIDY0MzczLCA2MDIzLCAxNjksIDU0OTcsIDExNzA4LCAwLCAwLCA2MzIzLCAKKyAgICAxOTQ2ODQsIDgyMjQsIDAsIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCA5ODMwNzYsIDUzMjEsIDAsIDE5NDc5OCwgMCwgMjU4OSwgCisgICAgNzQzMzIsIDE2ODksIDc4MDIsIDQ2ODMsIDc0MzE4LCA0MjcwNCwgMTIwMjk2LCAxMTkwNSwgMCwgMCwgMTI4NTE2LCAKKyAgICAxMjgxNjMsIDc0NTEzLCA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgNzEzMTIsIAorICAgIDU3MzEsIDEzODEsIDIzODcsIDAsIDAsIDgyODksIDY0NTI1LCA2NTgxNywgMjg4MSwgNDMxNDIsIDAsIDk2MDEsIDI4NzksIAorICAgIDk2NjgsIDk3NjYsIDAsIDU3MjksIDkxNzgzMywgNzQ0MTAsIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIAorICAgIDI4ODcsIDAsIDM1MjYsIDYyOTgsIDAsIDc3ODk3LCAxMjAwOTUsIDc4NTE5LCAwLCA4NTcyLCA2MDIxLCA3Nzg5NiwgCisgICAgMTI4Mjg4LCA3Nzg5NSwgNDMxNTUsIDAsIDExOTg0OSwgMzE0NiwgMTA5NTksIDk0ODMsIDAsIDc3ODkzLCAxMDk4MSwgMTY2LCAKKyAgICA5MTc4NDEsIDg2MzUsIDk4MzYwNiwgMTA2MjMsIDQwOCwgMTE5MDU4LCAxMjc1MDcsIDEzMjk4LCAwLCA3NDI2LCA0MTY0MSwgCisgICAgMTI3MTcsIDAsIDc2MDcsIDEwNjM5LCA0MzM5NiwgMCwgMCwgNDE2NDMsIDc0MTM0LCA5ODMwNTQsIDg3MTMsIDQxNjQwLCAKKyAgICAxMDIyMSwgNDE2NDUsIDY2NzEyLCA2NjQ1LCA2NDYsIDY2NzI2LCA2NjcxMSwgNDIxMjksIDkzOTk0LCA3NzkwMSwgMzQ3MiwgCisgICAgODY5NywgMCwgMCwgOTgzODE1LCAwLCAwLCAwLCA1ODA5LCAxOTUwLCAxMTkzNTYsIDkyNDMyLCA3NDU3MiwgMCwgNDIxMzYsIAorICAgIDAsIDAsIDAsIDAsIDMyNDcsIDExOTg1NCwgNjUwMTcsIDk4Mzk1MywgNjg0MjgsIDY2NjY4LCAwLCAwLCAxMDk4MywgMCwgMCwgCisgICAgMCwgNDE1NjcsIDAsIDAsIDAsIDE5NDYyNCwgMTE5ODUzLCAwLCAwLCA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIAorICAgIDAsIDQwOTg4LCA5MjU5MiwgNzQ4MDksIDQxNzI3LCAwLCA0Mjg0OCwgMjM5NiwgOTE3NzY2LCAwLCA3NDAxOCwgOTE3NTM4LCAKICAgICA2NDk0MCwgNzAyNywgMzg4NiwgMCwgNDI0NTcsIDExOTAwOCwgMCwgOTk2LCA2ODEyMywgOTQwNTgsIDQyNDksIDAsIAogICAgIDkxNzU5NCwgMTE3MDcsIDgyMjIsIDAsIDc5MzksIDkyNDU0LCA5MjQ2MCwgMTI3ODAxLCA5MTc1OTIsIDEyODM1OSwgODUzNCwgCi0gICAgMTI3MTU0LCA0MDk4MywgMCwgOTgzMjM0LCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIDEyNTU4LCAxNTQwLCA5MTc1NDksIAorICAgIDEyNzE1NCwgNDA5ODMsIDAsIDk4MzI0MCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMTU0MCwgOTE3NTQ5LCAKICAgICAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIDAsIDAsIDkxNzU1OSwgMCwgMCwgMTU2MywgMTI4MDM0LCA5NjE5LCAKLSAgICA5ODM5MzEsIDAsIDAsIDEyNzg3MiwgNzEzNjMsIDU4MDMsIDc3OTcsIDYwNzAsIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCAKLSAgICA2NTAwOSwgOTgzOTMzLCAxMjU2NywgMTI4NzAzLCAwLCA0MTQxMiwgMCwgMCwgMzYwNywgOTIwMCwgMTAwNDYsIDk2MTIsIAorICAgIDk4Mzk0MCwgMCwgMCwgMTI3ODcyLCA3MTM2MywgNTgwMywgNzc5NywgNjA3MCwgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIAorICAgIDY1MDA5LCA5ODM5NDIsIDEyNTY3LCAxMjg3MDMsIDAsIDQxNDEyLCAwLCAwLCAzNjA3LCA5MjAwLCAxMDA0NiwgOTYxMiwgCiAgICAgNDIxNTMsIDgyMTgsIDk0ODUsIDAsIDIwMzIsIDc4MzU0LCAwLCAwLCAwLCAwLCAwLCA0MzA4NSwgNjA1NywgNTA4LCAKICAgICA5Mzk2OCwgMTI4MDE1LCA2Nzk2OCwgMCwgOTI0MDUsIDAsIDAsIDYzOCwgNjA4MywgMTE5MDcyLCAwLCAwLCAyMzA1LCAKICAgICA3ODM0OCwgNjgwOTYsIDAsIDYwNTYsIDY2NTksIDY3OTY5LCAwLCA2MDg1LCAwLCAwLCAzOTE1LCA0MTYzNCwgMCwgNDE2MzksIApAQCAtMTg4MjIsMTUgKzE4ODQxLDE1IEBACiAgICAgMTIzMjgsIDUwMSwgOTM5ODUsIDEwNjAxLCAwLCA1ODMsIDAsIDQxOTc3LCAwLCA2NjAwNCwgMTE5MzUwLCA2NTA1LCAKICAgICA3NDAxMCwgMCwgMTMwNjQsIDU1MjY3LCAxMjA4MTAsIDY1MDAsIDU1MjYsIDY1MDQ5LCAwLCA3Mzc2NCwgMCwgOTIzNzYsIAogICAgIDEyNzQ1LCA5Njc4LCAwLCAxMjA1ODcsIDk4NjksIDEyODgxNSwgMTc3MSwgMCwgODkzNiwgMCwgMCwgNDIwOCwgNzgzNDEsIAotICAgIDc4NTY3LCA3ODM0MiwgMCwgOTgzNDQ4LCA3NDEwMSwgMCwgMTE3NjIsIDAsIDkyNDIyLCA3Nzk5NywgNjgwMTAsIDY2NDc1LCAKKyAgICA3ODU2NywgNzgzNDIsIDAsIDk4MzQ1NiwgNzQxMDEsIDAsIDExNzYyLCAwLCA5MjQyMiwgNzc5OTcsIDY4MDEwLCA2NjQ3NSwgCiAgICAgMCwgNTAyNywgNzgxNzIsIDEyODg3OCwgMCwgNTA2OSwgNzM4NjIsIDUwMjgsIDk4OTcsIDAsIDczNzM5LCA1MDI2LCAKLSAgICA5ODMyNDcsIDY4NjM5LCA2MzMxLCAxMDA3OSwgODkzMSwgMCwgMTQxNSwgODg2NiwgNDE5MDEsIDc0NzkwLCA3ODEzOCwgCisgICAgOTgzMjUzLCA2ODYzOSwgNjMzMSwgMTAwNzksIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgNzgxMzgsIAogICAgIDExOTM2MSwgOTgzNTY0LCA0MzEwNiwgNTAyOSwgNjUzMDksIDE1ODAsIDM1OTgsIDY4NDI0LCA0MTA3MCwgNzc5MDMsIDAsIAotICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzAsIDEwNjAwLCA5MTc4NjcsIAorICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzksIDEwNjAwLCA5MTc4NjcsIAogICAgIDYyMCwgNDEwMDEsIDYwMjgsIDAsIDQyODkyLCAwLCA3NDgyMiwgNTAyNCwgMTIwODI5LCA0MTAwMywgMCwgNTAyNSwgCi0gICAgNjk4OTIsIDk4MzIwNywgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCisgICAgNjk4OTIsIDk4MzIwOSwgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCiAgICAgMTE2MDIsIDYyNDMsIDExNTc0LCAxMTU4MSwgMTE1OTcsIDExNTk4LCA2MjUzLCA2MTA1LCAxMTU4NCwgNzQxOTUsIDExNTY5LCAKLSAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCAwLCAxMDgxNSwgMTE2MTksIDIzMDEsIDQxNTQwLCA3ODE1LCAKKyAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCA5ODMyMjcsIDEwODE1LCAxMTYxOSwgMjMwMSwgNDE1NDAsIDc4MTUsIAogICAgIDExNjE2LCA2OTc5LCAxMjA4MCwgNzcyMSwgMTE2MDQsIDc4NjksIDE1OTIsIDAsIDQyMTUyLCA3ODQ5OCwgNDEwNDgsIAogICAgIDkxNzc2MywgODI5LCAwLCA5MjQwNiwgMTk5NTAsIDAsIDEyNjQ4MiwgNjYxNiwgMCwgMTE4ODc1LCAxMDk1MywgMzkxLCAwLCAKICAgICA2OTc4NSwgNDgyLCA0MjI5NiwgMTE1ODgsIDAsIDQzNjA2LCAwLCA2ODM5NywgNjYzNzAsIDc0NTA2LCA0MjMzNSwgCkBAIC0xODgzOSw5ICsxODg1OCw5IEBACiAgICAgMTEzMzcsIDc4MjA5LCA5MTc4MjAsIDYzOTg5LCAzOTU4LCAxMjEzMiwgMTg0OSwgMCwgOTkyMSwgNDI0NTEsIDQyNTMsIAogICAgIDQxMTQ3LCA0MjA2NCwgMTE5NTksIDQyNDA0LCA0MTE2MCwgMCwgMzYxOCwgNzgzMzgsIDAsIDQzMzAwLCA1MTU2LCA5MjYyOSwgCiAgICAgMCwgOTI5LCA2ODI3LCA0MjAzNSwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIDY2NDM1LCAyMjE1LCA0MTY2MiwgOTQwMTAsIDAsIAotICAgIDAsIDAsIDkzOTUyLCA0NTc4LCA2NDUxMywgNDE2NjQsIDk4MzcyNSwgNDI1NzgsIDEyODc5NCwgNDE2NjEsIDc4NzE1LCAKKyAgICAwLCAwLCA5Mzk1MiwgNDU3OCwgNjQ1MTMsIDQxNjY0LCA5ODM3MzQsIDQyNTc4LCAxMjg3OTQsIDQxNjYxLCA3ODcxNSwgCiAgICAgNDMyNjcsIDkzNTYsIDAsIDAsIDAsIDEyODYsIDEwMTY2LCAwLCAwLCA2NDcwNywgOTgzMTI3LCA0MjQ3NiwgNzczMCwgCi0gICAgOTgzODUwLCAxMjg1MjIsIDQyNDgzLCAwLCAwLCA0MjMyNCwgNDIyOTEsIDEwMDIwLCA0MzM1OSwgMCwgNjY0MSwgNTI1LCAKKyAgICA5ODM4NTksIDEyODUyMiwgNDI0ODMsIDAsIDAsIDQyMzI0LCA0MjI5MSwgMTAwMjAsIDQzMzU5LCAwLCA2NjQxLCA1MjUsIAogICAgIDQxNjI3LCA5MTc5MjMsIDg3NjMsIDEyODMwNCwgNDE2MjgsIDUzMywgMTE5MzEsIDY1MjI1LCA4MzIxLCA0MjUwNCwgCiAgICAgNDI1ODEsIDAsIDY5MTUsIDQyMzEwLCA0Mzc3LCA4NTU5LCAwLCA3NDM2MCwgMCwgMTMxOTMsIDY0MzUwLCAxMTY2NiwgCiAgICAgODY3OSwgNDE5MjQsIDE1NzYsIDc3MzUsIDkyMzk4LCAwLCA3Mzg0MCwgOTgzMDkyLCAxMTM3NCwgNzgwNDMsIDEwODg5LCAKQEAgLTE4ODU5LDI0ICsxODg3OCwyNCBAQAogICAgIDgyNDQsIDM2MiwgOTI0MzksIDAsIDgwMzcsIDQzNzc3LCAxMTUzNSwgMCwgNzQ4NDUsIDUxODUsIDcxNjUsIDU1MjEsIAogICAgIDEwMzM0LCAyMDkzLCA3MTMyOSwgMTAzMDIsIDEyODExMiwgMTAxMDQsIDEwMjcsIDUxODEsIDAsIDAsIDEwNTIzLCAxNDQ2LCAKICAgICA0MjMyMCwgNDE2NDYsIDk5MSwgNTE4OSwgNDI0NzIsIDQxNjQ3LCAxMjAxMDUsIDE3MjIsIDU1ODEsIDQyODk4LCAzNDA1LCAKLSAgICAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCA5MjQ0NywgOTgzODEwLCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIAotICAgIDQzNjgyLCAwLCA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgNzc5MTEsIDAsIDQxOTkxLCA5ODM4ODQsIDAsIDc2MzAsIAorICAgIDAsIDE5NDY0NCwgNTUyMywgMCwgNDI2MjAsIDkyNDQ3LCA5ODM4MTksIDk1NDksIDAsIDEwNTQ5LCA1NTI4MiwgOTY2MSwgCisgICAgNDM2ODIsIDAsIDc3OTEwLCAxMjAwMjYsIDc4NzA4LCAwLCA3NzkxMSwgMCwgNDE5OTEsIDk4Mzg5MywgMCwgNzYzMCwgCiAgICAgOTg0NiwgNzY4NCwgMTAzNTAsIDAsIDExNzQsIDc3OTgxLCA0MjczMywgNzc5NzgsIDc3OTgwLCA2NjQ4NSwgNzc5NzcsIAogICAgIDQyMjc3LCA3Nzk3NCwgNDI0NTYsIDY1NjY3LCAxMjcwMzcsIDEyMzMwLCAxMjgyNzIsIDAsIDQyNDE3LCA0MjM4MywgCiAgICAgNjY2MzAsIDQxMzQ0LCA2MjkzLCAwLCA2NjI1MiwgNzc5ODQsIDc0NDQzLCAwLCAxMDIwOSwgODMxMywgNDE5NSwgNzQ0MzUsIAotICAgIDEzMTYsIDY2NjkwLCAxMjAwMzIsIDYzMzIsIDY0ODk0LCAwLCA2NTg3MSwgNzgwNjAsIDE3MzYsIDk4MzY3NSwgMzkwMSwgCisgICAgMTMxNiwgNjY2OTAsIDEyMDAzMiwgNjMzMiwgNjQ4OTQsIDAsIDY1ODcxLCA3ODA2MCwgMTczNiwgOTgzNjg0LCAzOTAxLCAKICAgICAxMjIyOCwgMTIwMTUxLCA2NTIwMCwgMzM4MywgMTA0NDYsIDc4ODQxLCA2OTMsIDkxMzAsIDMxNCwgNjQxNDksIDQyNDIwLCAKLSAgICAxMTk0OSwgOTgzNjYwLCAxMjAxNTIsIDExMDI2LCAxMjg3ODgsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAKKyAgICAxMTk0OSwgOTgzNjY5LCAxMjAxNTIsIDExMDI2LCAxMjg3ODgsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAKICAgICA0MjcwNiwgMTc1MSwgMjczLCA4MTY1LCAxMzE2NiwgMTIwNzYzLCA3ODg0MCwgNzEzNjgsIDEyODI0LCAwLCA0NTI4LCAKICAgICA1MzIwLCA2MzAxLCA0MzY2MiwgNjEzMywgOTMzOSwgOTQ2MywgNDIzNDYsIDEwOTIyLCA2NDU2MCwgMzc1NywgMCwgMCwgMCwgCi0gICAgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg1OSwgCi0gICAgNzQwOTUsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCA5MjY0NiwgMCwgMTIyMzMsIDk4Mzg2MiwgCisgICAgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg2OCwgCisgICAgNzQwOTUsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCA5MjY0NiwgMCwgMTIyMzMsIDk4Mzg3MSwgCiAgICAgMTAyMywgNDc0LCAwLCAxMTk4MTgsIDAsIDAsIDQyNDg3LCA2NTU1NiwgMCwgMTI3ODY2LCA0MjI5NSwgMCwgMCwgNzEzMjIsIAogICAgIDkyNTE4LCA5ODM1LCA2NjQ5OSwgMCwgNTQxNywgMTIyNzUsIDEwODk1LCAwLCAyNzQsIDAsIDE4NTgsIDAsIDAsIDU1MjUxLCAKICAgICAxMDExOCwgMzEzMywgMTI4MDA4LCA3Mzc5NSwgMCwgOTYxMCwgODA2OCwgODE5NywgMCwgNjk5LCAwLCA0MTY2NSwgNTg2OCwgCiAgICAgMCwgOTI2OTUsIDQyMTgyLCA3NTgxLCAxOTk0MCwgNDM2NjgsIDQxNjY3LCAxMjgwNTcsIDAsIDE5MjMsIDY1NTgzLCAKICAgICA2NTgwMiwgOTM5NzAsIDY0NTk3LCA0MzQ0NCwgMTE5MTg0LCA5MjE5NywgMCwgNjQ2NCwgNzAzNiwgMjk5NiwgMTkzNywgCi0gICAgOTgzNzQyLCAwLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCAwLCAwLCAxMTAxNywgMTIwNjAxLCAwLCAyOTMsIAorICAgIDk4Mzc1MSwgMCwgNDE4MzUsIDQwNDcsIDQxODQyLCAwLCA2NDEwNywgMCwgMCwgMTEwMTcsIDEyMDYwMSwgMCwgMjkzLCAKICAgICA3Nzk2NiwgOTIxNjksIDY0NzkxLCA0MTgyNywgNDI0NjYsIDQzNDIyLCAxMDU3OSwgODU2MCwgNzEzNTAsIDY1NDEzLCAKICAgICA3Nzk2MywgNDgwMywgMTI5NjQsIDE3MzksIDE5NDEsIDM5MDAsIDAsIDE3MTMsIDc3OTY5LCAwLCA3Mzk1NywgMTE0MDcsIAogICAgIDQyNDQxLCA0MTk3MSwgNjI5NywgMTIwMDk4LCA2NDEwNSwgMTI4MDgwLCA0MjQ4MSwgMTE3MTYsIDY2NDczLCA3MTc5LCAKQEAgLTE4ODk0LDMzNyArMTg5MTMsMzM4IEBACiAgICAgMzY1OSwgOTUzMywgMTg0LCAxNTUzLCAxMzEwNywgNjU0ODQsIDY5NjQ4LCAxMDUwMiwgNzQ0NTcsIDAsIDAsIDQxNTU0LCAwLCAKICAgICA4MjIwLCA5MTc5NDMsIDQxNTU3LCAwLCAwLCAxMTA3MCwgMTE5MjIxLCA1MTU3LCA0MDIwLCA3Mzg1OCwgNDE1NTUsIDk1MTQsIAogICAgIDY0ODE4LCA2NTEwMywgNjQ2NDEsIDY0MzAzLCA3ODEzMSwgNzUyMCwgMCwgNzQzNzcsIDExMDI5LCA2NjY1MSwgOTgzMDY4LCAKLSAgICAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgOTgzNzg5LCAxMjczNDgsIDEyMDA5NiwgNzQ2MDIsIDk5NTUsIAorICAgIDAsIDExODkzMCwgNjQ1MjcsIDAsIDc4NzcsIDczODAzLCA5ODM3OTgsIDEyNzM0OCwgMTIwMDk2LCA3NDYwMiwgOTk1NSwgCiAgICAgMTE5NTU3LCA0MDU1LCA0MjgxNywgMCwgNjUyMTIsIDExNzE1LCAxMjE5MCwgMTIzMTksIDc4NjMwLCAwLCA3ODYzMSwgCiAgICAgOTUwMiwgNjU0MjcsIDAsIDY1NDI0LCAxMjYwNywgMCwgOTczNCwgNjU0MjUsIDAsIDAsIDEyNzM1NywgNzg4MzUsIDkyNDEwLCAKICAgICAxMDExMiwgMTA4MjcsIDAsIDk4NjYsIDc0NTI3LCA2NjY3NSwgMCwgODYyNSwgNjQzNDYsIDExMjkwLCAxMDQ3NywgMCwgCi0gICAgODYzNiwgOTgzOTE4LCA4MzE1LCA2NTQ0NCwgOTgzNzg0LCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMTI3MTA4LCAKKyAgICA4NjM2LCA5ODM5MjcsIDgzMTUsIDY1NDQ0LCA5ODM3OTMsIDAsIDc0NTk1LCA2MTUyLCAwLCAwLCA2NjI5LCAxMjcxMDgsIAogICAgIDEyMDE3MSwgMCwgNzQ1ODksIDQzOTkzLCAwLCA2OTc5MCwgNjQ0MzUsIDAsIDQzNjkwLCAxMTA0NiwgMTE0OTAsIDQyNzMwLCAKICAgICA0NDg1LCAxMjcxMDcsIDAsIDY0OTI2LCAwLCAwLCAwLCA1ODY5LCAxMjQzNywgNDI3MjgsIDAsIDcwNDAsIDM1ODgsIDAsIAotICAgIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMCwgNzg2NDIsIDIyMywgMCwgNjk2NzUsIDEyMDE2NiwgNDI0NDQsIDAsIDY0NDk5LCAKLSAgICA2NTI0NSwgMCwgMTE3MSwgMCwgNjk3MTcsIDAsIDE4MDUsIDg3NzIsIDQzODIwLCAwLCA5OTMwLCA2NTI0NywgNzg2MTksIAotICAgIDEyMDExMSwgMjMzOCwgMCwgMTE4ODUzLCAwLCA0MjY3NiwgMCwgNjQ4MDAsIDY1MjM2LCA2NzY0NCwgNjgxMjYsIDEyMTMsIAotICAgIDAsIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCAxMjczNjksIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCA2NDA3MCwgCi0gICAgNjQwNzMsIDEwNjc5LCAwLCA3Nzk1NCwgOTQwMiwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIDY1NDM2LCAwLCAKLSAgICAyMTIwLCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDc0MTkyLCAxMDcwMSwgMTc2NCwgMzEwMSwgMTI3ODE1LCAxMjg1OCwgCi0gICAgMTIwMTU5LCAwLCAxMTM3MywgNjM3OCwgMTI3ODU5LCAxMjAxMDMsIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAyMTI5LCAwLCAKLSAgICA5MjIyLCA5ODM3MjksIDAsIDQyNTksIDkwOTIsIDc0NTY3LCA0MTk2MSwgMCwgMTI3MjQsIDY2MzU3LCA0MjMzMSwgNjQ5MzUsIAotICAgIDAsIDAsIDEyOTMsIDc5NDcsIDIxMzIsIDk4Mzc1OCwgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNDI3MTcsIDM2MTMsIDEyODgzNywgCi0gICAgMCwgMCwgNjU4ODgsIDg4MTYsIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgMTIwMzA0LCAKLSAgICA5ODMxMTQsIDg4MjIsIDAsIDExNTcsIDY0OTAzLCA4NjM4LCAwLCAwLCAwLCAwLCA2OTg0OCwgODIzNSwgMTIwMzE2LCAKLSAgICA0NDA1LCAxMDA4NiwgMTIwMjQ3LCAwLCA2OTIxNiwgMCwgNjU0MzAsIDcxMzIxLCA2MDc5LCA2ODE3LCAxMDc2NCwgCi0gICAgMTI3OTEwLCA2NDI5MSwgMTI4MDUxLCA5OTgsIDEyMDMxMiwgMTEwNjIsIDEzMTcsIDY0MzI3LCAxNTU4LCAwLCAxOTkxLCAKLSAgICA3ODgyLCA0MjI1NCwgMCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIDExOTMzNiwgNTc0MiwgNDMwNzYsIAotICAgIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgMTE5MzM0LCA3ODk2LCA3NTEsIDY1OTUsIDY1OTYsIDEyMDMyNSwgCi0gICAgNjYzNzMsIDAsIDAsIDY0OTA4LCA5MjY5MSwgNjMxMSwgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIDQzMTA4LCAxMjAzMjYsIAotICAgIDAsIDQxNzA1LCA5MjE4OCwgNjU5OCwgMCwgNjU5OSwgMTIwMzM0LCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgMCwgNjU5NywgCi0gICAgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAyMjgxLCA2OTkwNCwgMCwgMTk4OCwgNTQwNywgNjc4NjUsIDI0MzAsIDQxNjc4LCAKLSAgICAwLCAxMjAyNDMsIDIzMzYsIDk4Mzg5NCwgMCwgNzg4NzEsIDEyMDQ0MiwgOTgzNzYwLCAxOTIxLCAxMDk0NywgMTk5MjcsIDAsIAotICAgIDY1NDA2LCAwLCAxOTkxMywgNDI4NCwgMTMyMTcsIDAsIDQzNzg5LCAxMjg0MSwgOTIyOSwgMTA5NTYsIDQyMjg1LCA0MTY3NCwgCi0gICAgMTk5NjQsIDQxNjc5LCA2NTA4NCwgMzUyMSwgMCwgNTc3NCwgODMyNSwgMCwgNjU0MDMsIDk4MzA4OSwgMTg1NCwgMTA3OTQsIAotICAgIDAsIDY3NjYwLCA2OTg0NiwgMCwgNzgzNTksIDUyODAsIDAsIDQzNDQsIDEyOTA1LCA2NTQzMywgNjA3NiwgNjQ3OTMsIAotICAgIDQxNjEwLCA3NjgsIDEyMDc0LCA0NDIsIDAsIDY4MTYyLCA2NDA4MSwgMTI5MzQsIDQxNjgyLCA2NTQzMiwgNDE2OTMsIDAsIAotICAgIDYwNzEsIDY1NDM0LCAxMjc0NjcsIDQ4MDQsIDQwNTMsIDAsIDEyNzQ2OSwgMTk0NjUzLCA0MTY5NiwgNDY3LCA2OTgyMywgCi0gICAgMTI3NDYzLCA2OTc5NywgMTk0NjUyLCAxMjc0NzMsIDg0MjEsIDEyNzQ3MiwgNjk2ODIsIDQzNzA1LCA1MDIsIDAsIDY1NDMxLCAKLSAgICAxMTkwNTYsIDY5OTU0LCAxMjA0MywgMTMwMywgMzE2LCA3MzY0LCAyMDI5LCAyMTM2LCAxMTkyNDYsIDExNTMzLCA2NDM2NSwgCi0gICAgNDM0ODAsIDkyNjM5LCA0ODYwLCAxMjY2NDgsIDEyNzg3NywgNDI0ODgsIDAsIDk1ODMsIDEyODg0OSwgNTU0NiwgODAxOSwgCi0gICAgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIDIzNTUsIDEyMTUwLCA2NTcyNSwgNTU0MywgNzc5ODksIDYzNzUxLCAxMjEzNywgCi0gICAgNTU0OCwgNzc5ODUsIDAsIDY1NzI3LCA2ODM4OCwgNjU3MjYsIDYwNzcsIDEyODM1MiwgNjU0NTIsIDAsIDExMzAxLCAKLSAgICA3ODAxMywgNzgwMDgsIDc4MDEwLCA5ODc0LCA3ODAwNywgMCwgMTMxOSwgMzA1MCwgNjU0MTAsIDAsIDAsIDc4MDE2LCAKLSAgICA3ODAxNywgNDI4MzAsIDQzOTk2LCA2NjcxNiwgMTI4MTM3LCA0NjkxLCA5MjI0MiwgOTM0NSwgNjIxLCA5MjcwOSwgCi0gICAgMTI4MjIyLCAwLCA2NTQxMSwgMCwgNDExODIsIDczODgxLCA2NTQwOCwgNzM4OTksIDc4MDI0LCA5NDc0LCAxMDU0NSwgCi0gICAgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIDkyMzYzLCA5OTk2LCAKLSAgICA4NTA4LCAwLCA3MDEyLCA4MTk1LCAxMjc4MzQsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCA1NDUsIDk1NzUsIAotICAgIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDY5ODU0LCA4ODU5LCA2ODIwLCA3NDM0NSwgNjUxMTAsIDEyMDc0MCwgMCwgMCwgOTExOSwgCi0gICAgMjc4NywgNzkyMCwgMTE4ODIzLCA0MDIxLCAyMDEyLCA3OTg1LCAwLCAxMTk2NjMsIDAsIDAsIDc4MDIxLCA3ODAyMiwgNDEwLCAKLSAgICA3ODAyMCwgMTgwMiwgNzgwMTgsIDc0MTA3LCAwLCA0MTY1OSwgNDE2NzEsIDE4MjcsIDAsIDY0Mzk2LCAxMDEyNiwgMTIxMTYsIAotICAgIDQxNjczLCAxMjAzNzAsIDExNDIyLCA3ODE0MSwgMTIwMzczLCAzODYwLCAxMjAzNjcsIDY4NDEyLCA0MTM0NSwgMTIwMzYyLCAKLSAgICAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgMjEwNCwgNjQ4NTgsIDM2MSwgCi0gICAgMTIwMzU3LCA4NDUsIDAsIDQxNTYwLCAxMTk3MCwgNDU2MiwgOTE3OTIwLCAyOTI2LCA5MTc5MTksIDQ1NjksIDc0MTMwLCAwLCAKLSAgICA0MzQ4NywgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMTE4ODkxLCA2NTYyOSwgMCwgMTk0ODU4LCAwLCAwLCAxMjc1NDUsIAotICAgIDEyMDU0MywgMCwgMCwgNjI5MSwgMCwgNzg2MzksIDQxNjY5LCA3MDk0LCA5MTc5MjEsIDAsIDk4MzU4MSwgNzQwNTQsIAotICAgIDEyNzc1NCwgMTk1MDI5LCAwLCA4MzksIDk4MzMxMSwgNzY5NSwgODc2OSwgNjUyNDYsIDQ4MjksIDE5NDY2MywgNDg1OSwgCi0gICAgNjQ0NjcsIDAsIDk4Mzk1NCwgMTE4OTk4LCA3MjA2LCAwLCA2NjQ3LCA0Mzk4NiwgMCwgNjk3NjYsIDAsIDY0NzY0LCA0MjEwLCAKLSAgICA5ODM4NTQsIDEyNzkzNiwgODA0LCAwLCAwLCAxMjI5OCwgMCwgNjY2NTMsIDAsIDY0OTI0LCAxMDA5MSwgNzM5MzEsIDk0NjgsIAotICAgIDc0MjQ1LCAwLCAwLCA3NDI0NiwgOTI1MDMsIDEyODM5LCA2NDY2OSwgOTIyMDIsIDAsIDEyNzksIDE0MjUsIDYyMjQsIAotICAgIDExOTIyOSwgMTEwNDksIDAsIDkyNjk3LCA0MzIzOSwgODQ4MiwgOTI0NDAsIDAsIDUwMzIsIDY5Njc3LCAxMTk0MCwgCi0gICAgNjc4ODgsIDY2NCwgMTIwNDM3LCA1MDM0LCAwLCAwLCAxMjc1MjUsIDQyNzAyLCA3Mzg4OCwgOTgzMTQ5LCAxMzI5NCwgCi0gICAgNjc4NzMsIDY0ODY5LCA2MDMyLCAwLCA5MTE1LCA3NDMwLCAxMjAzNzcsIDAsIDEyMDgxOSwgNjgzODcsIDEyMDE2OCwgCi0gICAgNzM5MTMsIDEyMDE3MCwgNDExNjEsIDU1MTgsIDQxNzQsIDEwOTkzLCA0MTE2MiwgMTIwMTYwLCA2NDUyOCwgMTE2OSwgNDM0LCAKLSAgICA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCAxMTg4NjcsIDEyODgwMCwgNTI0LCAwLCA3NDAyOSwgCi0gICAgNzg4LCA3NDAyNywgMCwgMTk0NjM4LCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIDQyNjM2LCAwLCA2OTcyNSwgMCwgMTIwNjU2LCAKLSAgICAwLCA2Nzg3NiwgMCwgMCwgMCwgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgMCwgMTE5MTA3LCA0MzYxMiwgNjQzNDQsIDAsIAotICAgIDAsIDEwODU1LCA1NDQ1LCA5MzU1LCAwLCA2NTE5OCwgNzM5MSwgODk4OSwgMjIxLCA2NTY4NiwgMCwgMCwgODAxMCwgNzE5MSwgCi0gICAgNDk2MiwgNjk3NzIsIDg4NTUsIDAsIDAsIDY0NDY5LCAxMjA0MjYsIDEwNTU1LCAwLCA0MzMzMywgOTIyOTksIDAsIAotICAgIDEyMDQyNywgMTA0NTEsIDAsIDY3NjUzLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIDk5NDcsIDEyMDE0OSwgNzgzMTcsIDM4NzMsIAotICAgIDgzNjcsIDAsIDEyMDE0NiwgNDM0MzMsIDQzNjQ5LCAxMTk4NywgMCwgMCwgMTEwMTAsIDEyNzIzLCA3NDA1OSwgNzQwNjIsIAotICAgIDYyMTcsIDU4OTYsIDAsIDc2ODIsIDc0MDQ5LCAxNDYyLCAxMDIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDI1OTUsIDAsIAotICAgIDc0NDAyLCAxMTg4NjAsIDAsIDEyMDQxOSwgOTI0OTcsIDc0MDUyLCAwLCA5MjM3OCwgMTIwNTQ5LCAxMTkwODIsIDY0Mjk1LCAKLSAgICAxMjA0MTgsIDAsIDY0NzY1LCA3MzkyMywgMTIwNDE3LCAxMjA2NjIsIDY5OTIwLCAxOTQ3MDIsIDYyMTYsIDAsIDEwNzU1LCAKLSAgICA5NDU1LCAwLCA4MTI0LCAxMjcwNDIsIDk0NzAsIDY5NDQsIDEyNzU0MCwgMCwgNjk2ODAsIDI4MjgsIDAsIDUzMSwgNDI2MzgsIAotICAgIDAsIDAsIDAsIDQzNDI4LCA4MjA0LCAzNjE0LCAyODI3LCA5Njk2LCAwLCAwLCA4NzI4LCA0MzU0LCAxMDkwNCwgNzg1NjIsIAotICAgIDE5OTM2LCA3ODMzLCAxMjA2OTEsIDAsIDQyNTk5LCA0MjU5NywgNDI3MDksIDEyMDQwOSwgMTI3MDQ0LCAwLCA4NTM3LCAwLCAKLSAgICAwLCA5MzU0LCA5ODMxNjQsIDEyODgzMywgNDExOTksIDEwMTIxLCAyMDI4LCAwLCA5ODMxOTQsIDY5NzE1LCAwLCAzMDYyLCAKLSAgICAwLCA3NDQ0NywgMTI2MDgsIDAsIDY2NDQwLCA3NTQ1LCA5NzAwLCAxMjU4MCwgOTIyMDUsIDEyMDc3NywgMTIwNTAyLCAKLSAgICA0MTE1NSwgMCwgNzQwNzEsIDAsIDk4MzQ0OSwgMTI3MTMsIDAsIDAsIDAsIDc4NzcyLCAwLCAxNzM0LCAwLCAwLCAxMjcwNDAsIAotICAgIDY0NTk0LCAyNDU2LCAyMzEsIDAsIDc0MTY3LCA1NDIsIDAsIDExODc4NiwgMCwgOTgzOTcwLCAxMjMwLCAwLCAwLCAzNTk3LCAKLSAgICA0NDQ2LCAxMDU4NCwgNzQyMzUsIDkyMjE1LCA0MDM3LCAxMjc5MzgsIDgzNTIsIDAsIDU2ODcsIDAsIDY0NTE1LCAwLCAKLSAgICAxOTQ4MDEsIDU1MjY1LCA2Nzg0NiwgNzg0MzQsIDk3MDQsIDAsIDAsIDcwMDgwLCA3MTMzOCwgMCwgODY2MCwgMTI2NDk1LCAKLSAgICAwLCAwLCA3ODc3MywgNzQ0ODIsIDQ0ODMsIDE3MDksIDY5NzIxLCA5OTA5LCA2MDgwLCAwLCAxMjAzNTgsIDE3NDYsIDEzMTUsIAotICAgIDg2NjcsIDAsIDAsIDEzMTQwLCA2NTg5OSwgMTA2MDQsIDAsIDQ0ODAsIDExMjY2LCAxMjgxNTIsIDEyMjYsIDY5MzAsIAotICAgIDY3OTc5LCA5ODM2ODEsIDYzNjAsIDEwODk3LCA0MTIzMCwgNjA1LCAwLCA3NDc4NSwgNjk4NzUsIDAsIDAsIDQxNTAwLCAwLCAKLSAgICAzMTEsIDExNDUzLCA2MjIxLCAxMDYwOCwgNjQ5NDMsIDc0MjgwLCAxMDg3NywgMTE4ODY4LCA2NDg4NSwgNzQyNzIsIDAsIDAsIAotICAgIDEyODU1OSwgMTIwNzM2LCA3NDMxMiwgMzQ1LCAwLCA3NDQ1NiwgNjQ2MDYsIDk5MTcsIDAsIDkyMjMxLCA1MDM3LCAwLCAKLSAgICAxNzc2LCA4NDIyLCAwLCAxMTg4MTQsIDQxNTA4LCA0MTIwMSwgMzIzLCA0MzMyOCwgMCwgNDI2OTgsIDEyOTUsIDE5NDg1MywgCi0gICAgNDYyNSwgMCwgNDYzMCwgMTMxMTcsIDAsIDEyODc3MiwgNjUxMjMsIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIAotICAgIDY1NjY2LCAyNTE5LCA5MjM2OSwgNjU0MjAsIDkyNDc5LCAwLCA0MjUyLCA1MDQ5LCA0MjY1OSwgMTE5MDExLCA3MDYsIAotICAgIDc3NTQsIDEwODU0LCA4NzM4LCAwLCA2NTQxOSwgMCwgMCwgNjQ5LCA2NTQyMSwgMCwgNjY3MDIsIDAsIDEyNjcwLCAxMDEzLCAKLSAgICAwLCA2NDkxOSwgNzA1LCAwLCA2NTQyMiwgMTI3ODAzLCAxMTgzLCAxMjY1MTksIDcwMTcsIDQyODUyLCAwLCA4MTU3LCAKLSAgICA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDk4Mzg2OSwgNzQwMzUsIDAsIDExOTEzLCA3Mzg3NCwgNjY5NiwgMCwgODkyMCwgCi0gICAgMTE5Mjk4LCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMjA1MSwgNjYyMjcsIDAsIDQxODQsIDAsIDAsIDEwMTc3LCA3Mzc3NywgCi0gICAgMTg1NywgMTk0NjU3LCA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCA3ODMyMSwgNzgzMjIsIDQ2MjQsIDc4MTgsIAotICAgIDExOTE3MywgMCwgMCwgNzgwNSwgMCwgOTQwMDcsIDY5MzUsIDkyMjkyLCA3ODMyNSwgNzgzMjYsIDc4MzIzLCA0MzMyNywgCi0gICAgNDM5ODksIDExOTA0NiwgODQ5MiwgODI1MCwgODQ1OSwgMCwgODQ5NywgODQ5NiwgMCwgMCwgNzgzMzYsIDc4MzM5LCA5NTQzLCAKLSAgICA3ODMzNSwgNzgzMzIsIDc3ODMyLCA2NTg0OSwgNzc4MzEsIDk4Mzk1MiwgMCwgMTI0NTEsIDAsIDg2ODQsIDAsIDYxMDIsIDAsIAotICAgIDUyOTgsIDAsIDUyOTQsIDAsIDAsIDk4MzQ1MSwgMTk1MDYyLCA5OTQ5LCAxMTk4MjYsIDQzNjE3LCAxMTkyMTUsIDAsIAotICAgIDEyMDczLCAwLCAwLCA3Nzg2MywgMTMxMDgsIDEyMDYxNywgMTE0MzksIDQxNDY4LCA5ODM3NDgsIDAsIDUyOTIsIDU1MjcyLCAKLSAgICA5ODM4NzQsIDE5MzksIDUzMDIsIDM5NzAsIDkxNzg3OSwgMTI0NTUsIDE3OTMsIDAsIDAsIDAsIDY2NDMsIDkyNDc3LCAKLSAgICA2NTI2MywgMCwgNzgzMzAsIDQxMjkzLCA3ODMyOCwgNjU5MjMsIDAsIDEzMjE5LCA5NTY5LCAwLCA3NDM4MywgMCwgNzQxOTcsIAotICAgIDAsIDU1MDAsIDg4MTMsIDAsIDAsIDc0NTY2LCA1MzIyLCAwLCA3ODM0MCwgNDM2MzEsIDUzMjQsIDY2NDQzLCAzNzg0LCAKLSAgICA0MTYxNCwgNjUyNjksIDYyMzAsIDc4MzQ5LCA3ODM0NSwgNDMzMjQsIDMzNjAsIDc4MzQ0LCAxMTUyMywgMCwgOTI0ODgsIAotICAgIDk5MjYsIDcxOTcsIDAsIDY4NDI5LCA0Mjg5NCwgNDE4MjEsIDEyNDksIDc4MzYwLCA3ODM2MSwgNzgzNTYsIDc4MzU4LCAKLSAgICA3ODM1MywgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgCi0gICAgMCwgMCwgNzgwNzQsIDY5NDcsIDQxMTUyLCA4ODcsIDkyNDksIDY1NjUsIDc4NTEwLCA0MTk5MCwgNzg1MDksIDQxODExLCAKLSAgICA3NDQ2NiwgOTM5NjYsIDY2NzAsIDc3ODgyLCAwLCAwLCA0MzA5MiwgNDMzMjUsIDAsIDEwMTY4LCAwLCA5NzgxLCAxMjg2NTUsIAotICAgIDkxOTAsIDAsIDk2NjYsIDgyNjksIDY1OTQ0LCA3NDAwNSwgMTMwMTksIDExNjcwLCA2OTg2MCwgMzE1LCAxMjgxMywgCi0gICAgOTgzNDUwLCA3ODQzMiwgNzgyNTYsIDc4MzUxLCA3ODM1MiwgMCwgOTgzNjQ4LCAwLCAwLCAxMzc4LCA5NTA5LCAwLCAwLCAKLSAgICA3NDQ3NSwgMzA2NiwgOTIyMjAsIDY3ODQ3LCAwLCA5MjM1NSwgMCwgNzgzNjUsIDg3ODcsIDEyMDM3OSwgMTk0NjE2LCAKLSAgICA0MTYxOCwgMTk0NjE1LCA3ODI2MSwgMTk0NjE0LCAwLCA2NDY1MiwgMCwgMTk0NjEyLCAwLCA3ODM2NiwgNDIwODgsIDAsIAotICAgIDE5NTA2MSwgNzE3NiwgNDM3NTYsIDEwMTM3LCA2MTIxLCAxMDk5NSwgNzgyNTksIDc0NTM0LCA4MTE5LCA2NDg3NCwgCi0gICAgOTE3ODE2LCAxMjcxOTksIDE5NDkzOSwgMCwgNzQ1MjUsIDAsIDAsIDEyOTMwLCAxMzk0LCA3NDUxNCwgMCwgNzQ1MTUsIDAsIAotICAgIDExODgwNCwgMjk5OCwgOTUyNywgMTIwNjU5LCA2NTE5MCwgMTI5NzcsIDQyMDkwLCAxMTkxNjUsIDAsIDExOTEwMCwgCi0gICAgNDEyMzYsIDkyMjM1LCA0MjAwNSwgNDIwMDMsIDQxMjM3LCA1ODQ4LCAwLCAwLCAzNjcwLCAxMjg2NTcsIDE5NDYwMCwgMCwgCi0gICAgMCwgNzg5MCwgMCwgMTEyOTgsIDQzMzE1LCAwLCA2MjI5LCAxNTkzLCAwLCAwLCA2MTksIDQ2MzUsIDY1MDgwLCAwLCAKLSAgICAxMjgwMDIsIDQxMjAsIDY1MzM3LCA2NTMzNiwgMCwgMTE4MDgsIDExOTIxNCwgNzQxMTUsIDkzNjYsIDQyNzkwLCA0MjAwNiwgCi0gICAgMTE5MTE1LCA2NTMyNywgNjUzMjYsIDY1MzI1LCAxMDc1NywgMTUwNywgNDIyMTYsIDY1MzIxLCA2NTMyMCwgNjUzMzUsIAotICAgIDY1MzM0LCA2NTMzMywgNjUzMzIsIDY1MzMxLCA0MjA1OSwgNjUzMjksIDQyNjg5LCA5MjQyNywgOTEyOCwgOTQwNDUsIAotICAgIDQyMDczLCA2Nzg1LCA2NDU5MCwgOTgzODIxLCA0MzcxLCA3MTk2LCA2NTMxOCwgMjAzNSwgNjUzMTYsIDQxMDYsIDY1MzE0LCAKLSAgICA2NTMxMywgNDIwNzQsIDEyNzg0NywgNDEyMjgsIDAsIDY1NjA5LCA0MTI0MSwgNzkwMywgNDEyMzksIDQzNTMzLCA3ODQ1OSwgCi0gICAgNzE4OSwgMCwgMCwgMCwgMTIzNTcsIDQyODAyLCA3ODQ1MCwgODQ4NywgOTEzMSwgMCwgNDYxNSwgMTI2OTUsIDEyNzc1MiwgCi0gICAgMCwgMTIxNzUsIDAsIDY0NTM1LCAwLCA3ODA5LCAwLCAwLCA1NjIsIDEyMTY5LCA2NTkwLCA2OTc2MiwgNjY0NTUsIDY0NzM4LCAKLSAgICAzMjE5LCA2ODY1NCwgOTgzNzc4LCAwLCAxMDM3LCAwLCAyMDI1LCAxMjgyNjMsIDEzMDk4LCA3ODQ0MiwgMTA2MzcsIDQ1NjgsIAotICAgIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDQzNjIzLCAxMTA3MiwgMTI3MTkxLCAwLCAwLCAxMjYwNiwgNzg0MzMsIAotICAgIDI4MjUsIDAsIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgOTIzMjcsIDczNjUsIDk4Mzc0NCwgMTIwNTkzLCAxMzA3MSwgMCwgCi0gICAgNDUyLCA0MTA0OSwgNDI4NDAsIDYzNDYsIDI4MzEsIDU0NjEsIDc0NTk2LCAxMTQ2NSwgNTIxMiwgMCwgNjQ3MDMsIAotICAgIDExOTE5MSwgNDIzMDgsIDcxODEsIDAsIDQxMzMyLCAwLCAxMjMzMywgMCwgMTY2OCwgMCwgMCwgMCwgMTE4NywgOTgzMzc3LCAKLSAgICA0MjYyOCwgNzg1NzUsIDAsIDEyODc3NywgMCwgMzI0MCwgMTI4NTE4LCAxMjE5NCwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCAKLSAgICA4MTY2LCAwLCAwLCAwLCA3NDUzNSwgMTYyMywgNjUyOTcsIDEyODg1NiwgNTcxLCAwLCA0OTE4LCAwLCA1Mjg4LCAxMjcyOTUsIAotICAgIDg5MTYsIDY1MDQ4LCAxOTA5LCA4ODY0LCAwLCAwLCAxMDczNiwgOTI1MDgsIDExNTcxLCA3NjE1LCAxMjczMDAsIDkyMjk2LCAKLSAgICA0MjM3LCA5MjU3NiwgMTAzNSwgNjU4MTUsIDAsIDc4ODEsIDcwMSwgNjU5MzYsIDM0ODksIDAsIDAsIDEyMDc1MSwgMTE0MDMsIAotICAgIDAsIDAsIDEyNzE0NiwgMzc5NiwgNjgwMCwgMCwgMzk5NCwgMTE0MjEsIDAsIDE5NTA3NiwgMCwgOTgzOTEzLCAwLCAwLCAKLSAgICA2NDg1NywgMTI4MTA1LCAyODU1LCAxMjc4MjgsIDY2MzA4LCA0MTYyMSwgNjgyMTQsIDEyNzI4MywgMTI3ODE3LCAxMDY1NCwgCi0gICAgMCwgMTE5MjI2LCAxMjE2NCwgMzI0NiwgNzkwNiwgNDM5NzIsIDY1ODQ3LCA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCAKLSAgICA3NDI3MCwgMTI4Mjg5LCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgMjM3OCwgNDMxMzYsIDEyNzkwNSwgODQ2NiwgCi0gICAgOTgzNTc1LCA5MzIwLCA4MDAxLCAxMjMyLCA4MTM5LCAxMTYxNywgMCwgMCwgMTE0MDksIDY4MzczLCA2MzgyLCAwLCAKLSAgICA2NDYzNCwgMTI4Mjc5LCAwLCAxMTYxMiwgMCwgNjc2MDAsIDIzNzQsIDk0MDY2LCA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIAotICAgIDUyODYsIDExOTI5NywgMCwgMCwgNjQ5MjUsIDEyMDI4MywgMTk0NTg0LCAxMTg5ODIsIDE5NDU4MywgNzcwNSwgMTE5NDIsIAotICAgIDExMzA1LCAxOTQ1ODEsIDMzMDksIDAsIDAsIDAsIDAsIDY4MDIsIDAsIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgCi0gICAgMCwgNjY2MTUsIDQyNTY1LCA0MTY1MSwgMCwgMCwgMCwgNDE2NTAsIDY2NTA3LCA2NjQ3MCwgMCwgMTI5MTQsIDQxNDkxLCAKLSAgICA2NjAxMCwgMTE5NTUyLCA2MDc4LCA5OTU0LCAwLCAxNDc1LCAxMTkyNDcsIDk5MzgsIDYwODQsIDkxNzU0NiwgNDEwNjQsIAotICAgIDQxMDYyLCAwLCAwLCAzMjU2LCAxMDE4OSwgNDIwNzYsIDQzMjUyLCA3ODgyMywgOTE3OTA2LCA4NzI3LCAwLCA2NTg3NSwgMCwgCi0gICAgMCwgMTI3NzYyLCAxMDU2MiwgNzQyMTUsIDQzMDY1LCAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgOTAxNSwgNzEzNTEsIDAsIAotICAgIDM2MzUsIDY0MzM3LCA5ODMyNzMsIDAsIDAsIDcxOTUsIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIDAsIDAsIAotICAgIDY1NjEzLCA3NzkwOSwgOTI0MjAsIDczOTk3LCAwLCAwLCAxMTkyMTgsIDc5ODQsIDg2MDAsIDc0NDM0LCAxMjc3NzAsIAotICAgIDQxNzYsIDcwMDUwLCAyMDM0LCA5MjU1MSwgMTIwODA1LCA2NTg5MSwgMTI3MDM4LCAwLCAzMTgsIDIwMzgsIDEyODg2MCwgCi0gICAgNzg1OTYsIDAsIDM2NDksIDEzMTQ5LCA0MjE0NSwgNDI3OTgsIDM2MzQsIDEyMDI5MSwgMTE4OTI3LCA2NzY3NywgMTIwMTI0LCAKLSAgICA3ODY2LCAwLCAxMTQwMiwgNDIxNDYsIDk0MDMyLCA3NDIzOCwgNDI2NjQsIDI4NDksIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIAotICAgIDE3NjEsIDExODEyLCA2NTM3OSwgNjgzODYsIDEyODE4NSwgMTE1OSwgMCwgNjk3MjksIDAsIDAsIDcxNzgsIDE5NDYzMiwgMCwgCi0gICAgNDE2ODAsIDAsIDEyODIwMywgMTE1MzQsIDE1MTQsIDExNjY4LCA2Nzg5MSwgOTMxMywgNzAxNSwgMCwgNjc4NzcsIAotICAgIDE5NDU2NywgMTI5ODksIDY2NDc0LCA5MzY4LCAxMjg0OCwgMTYyNCwgNDMyNzAsIDAsIDc0Mjc4LCAxMDgxOCwgMTI2NjQ0LCAKLSAgICA5OTUzLCAwLCA3ODQyMSwgMTE5NCwgMzI0MiwgOTc2MSwgOTU1NSwgODU5OCwgMTIwMjk5LCA2MTY5LCAxMjg3MSwgMTU1MSwgCi0gICAgMjc5OCwgNjUxNzYsIDQ5NTgsIDQyNzUyLCAxMTkwMjUsIDAsIDY3ODc1LCAxMjAzMDEsIDM0OTUsIDY2NjQ4LCAxOTQ3NjgsIAotICAgIDAsIDY4MzY0LCA5ODMyMjIsIDQ4OTEsIDAsIDEwNjQxLCAwLCA3Mzc0NiwgMCwgNjgzNTIsIDAsIDczNzg3LCAxOTQ4MjksIAotICAgIDE5NDYzMywgNzE5OSwgNjQ5NTUsIDAsIDAsIDAsIDAsIDAsIDQyNjg1LCA0MjY3OSwgMTkzLCAwLCAwLCAwLCA0MjY2NywgMCwgCi0gICAgNTI3MSwgOTIzMTgsIDkyNTE3LCAxMTg4ODIsIDEzNjIsIDEzMjk3LCAwLCAxMjgwOTQsIDAsIDk4MzMyMywgNzM3ODksIDAsIAotICAgIDY2NTgsIDQ0MjYsIDAsIDkyNjI4LCA5ODM4MzMsIDkyMzE5LCA3Mjc2LCA0MjE2MywgNTIyMCwgMCwgMCwgOTgzMzIyLCAKLSAgICAyNDE2LCAzMzEwLCA0MjcwMywgMCwgMzc5LCAwLCA0Mzc1NSwgMCwgMCwgMzIyMywgNjU0OTIsIDEyODQsIDE5NDc3MSwgCi0gICAgNDU0OSwgMCwgMCwgOTgzMTU0LCAxMjc3NjMsIDEwODA3LCA5NTU4LCAxOTQ2MTMsIDAsIDg1MTUsIDg2ODgsIDEyODY2LCAKLSAgICA2NTMwOCwgMzI5NCwgOTgzMzI0LCA4NTI5LCAxMjgxMDEsIDQzMzg1LCA3NTY0LCAwLCA0MzMyOSwgMCwgOTI0NTgsIAotICAgIDczNzU3LCA2NjQ1NiwgNDIzNTksIDAsIDIwMzEsIDAsIDcyMDIsIDAsIDEyNjc2LCA0MjcyOSwgOTIxOTgsIDMyMTUsIDAsIAotICAgIDc3MTAsIDE2MTAsIDczODAxLCAwLCAwLCA2NTY4MiwgMCwgMTIwNTM3LCA2NTkyNCwgOTk3NCwgMjI4LCA2NjM1NCwgMTUwMSwgCi0gICAgMCwgNjQzOTUsIDUxNzksIDcyMDAsIDYyMjUsIDAsIDY1Nzk0LCAxNzI1LCA2NTUzMywgODE5NiwgNzQ3NiwgNzQzOTksIDAsIAotICAgIDAsIDcxNTIsIDg1MDIsIDU3NjIsIDE5NjcsIDc0ODMsIDAsIDAsIDgxMDQsIDAsIDc0NzQsIDc3OTc5LCAwLCAxMjY1MDcsIAotICAgIDEwNDE0LCAxMzAwMSwgODE0MSwgMCwgNDI1MzcsIDE1NTcsIDQzNTk0LCAxMjg2NDIsIDYzMzAsIDY4MDUsIDg2MzEsIAotICAgIDI1NDUsIDcwMDUyLCAxMjcxNjYsIDAsIDc0MTkwLCAwLCAwLCA5ODM3NzcsIDQyNzYyLCAwLCA0MjkxNCwgMTY1MCwgMjYyLCAKLSAgICAxNjM3LCAwLCA3OTAxLCAzMjM4LCAxMjgxNzMsIDQxODYxLCAwLCAxMjg1ODUsIDY1MTU4LCAxMDg2MCwgOTQwNTksIAotICAgIDQzNjU4LCA3NTI3LCAwLCA0MzMxOSwgNjQxOSwgMCwgNDUsIDAsIDY0NTg4LCA5Mzk4OSwgMCwgMTE5ODEwLCA3MTk0LCAKLSAgICA1MjkxLCAwLCA0MzY2NiwgMTMxMjksIDAsIDkwODQsIDAsIDg3MzcsIDAsIDEyODgxLCAwLCAxMjkwNiwgOTYzOSwgNzkxMiwgCi0gICAgMjYyMCwgMCwgMCwgMCwgOTgzODY2LCAxNzksIDY1ODk2LCAwLCA2NDc1NiwgMjg1MywgNzg0NDMsIDExODgxMywgOTgzODgxLCAKLSAgICAxMTg5OTYsIDExOTAwOSwgMjg1MCwgODA4NCwgOTgzMDg1LCA3Mzg1MCwgMjgwMSwgOTIyODQsIDQyMDY5LCAxMTk4MzksIAotICAgIDc0NzU0LCAxMTk4NDEsIDQyMDcyLCAxMTk4NDMsIDExOTg0MiwgMTAzOTgsIDk4MzA1NiwgMCwgODM3NywgMTI3MTE2LCAKLSAgICA4MjQ1LCA2ODQwMSwgMzE1OCwgOTIzOTYsIDM5ODMsIDQzNjU2LCA5MjMsIDExOTg1NywgMTE5ODU2LCAyOTIsIDEzMDAyLCAKLSAgICAxMTk4NDUsIDExOTg0NCwgMzIyMSwgMTc2MywgOTI0NjMsIDQ2MTIsIDExOTg1MSwgMTE5ODUwLCA3MjUzLCAxMjcxMTAsIAotICAgIDY4MzkxLCAwLCAxMDc4MiwgMzYzNywgMTI5OTYsIDQzNTQyLCAwLCA2NDU3OCwgOTgzNjY2LCAzMjI4LCA2OTYzNiwgODc4MywgCi0gICAgMCwgMTE5NjE0LCAyNzMxLCAwLCAwLCA3ODU4NSwgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDc4NTg2LCA0MzMxNiwgCi0gICAgNDE3NywgMTEyODMsIDkwODksIDAsIDczOTk2LCA5ODMxNzMsIDY0NTAwLCA0MzY3NCwgMCwgNjQ5NDcsIDE4NTYsIDAsIDAsIAotICAgIDYzNzksIDAsIDAsIDAsIDMyMDgsIDEyOTc1LCA3NDc3NSwgMTI3MzgwLCA5ODM5MjIsIDkyMzg5LCA3NDA3MiwgNTUyNjksIAotICAgIDAsIDAsIDk4MzY3NCwgMjAzMywgNzg1NzcsIDc4NTc2LCAxOTUwMjYsIDU1MjU0LCA3NzQwLCAwLCAwLCAwLCA3Mzk2NCwgMCwgCi0gICAgOTM5ODgsIDY3NjEyLCA2NTY3NCwgMTI4MjQ0LCA5NDExMCwgNDE2ODksIDAsIDc0MDA2LCA2NDkwOSwgNjY0NiwgMTE3OTAsIAotICAgIDc0MDE5LCAwLCAxMjgwNjYsIDEyODAzMSwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgMTIwNjA1LCA3MjMwLCA4MjU3LCAwLCAKLSAgICA4Nzc4LCA0MTY4OCwgMCwgNjU3NzYsIDIwNzEsIDgzMTQsIDY0NTksIDAsIDc2MjgsIDY1MDkyLCA3MzkwMywgNjY3MjEsIAotICAgIDExMzQyLCAxMjg1NjEsIDAsIDAsIDEyODIyNiwgMTI3MDAxLCAwLCAxMTgxMCwgMTMxNjQsIDEwNzIzLCA5NjcsIDk4Mzk0MiwgCi0gICAgMTI2NDY5LCAxMTk0NiwgMCwgMzI1NywgMCwgMTIzMDcsIDE4NDUsIDk4MzE1NywgNDM1MjYsIDAsIDAsIDE4ODYsIDQyMzQyLCAKLSAgICAxMDA4OSwgODcwLCA3NjQ4LCAzNDk5LCA4NjA5LCA3NjUyLCA4NzYsIDg3MSwgODc3LCAwLCA4NzgsIDQyMDE1LCA4NzksIAotICAgIDQzNjkyLCA0NTYzLCAwLCAwLCA3NTkxLCA2NTg4NywgODY3LCA5NTIwLCA4NzIsIDEyNjYwNywgODY4LCA4NzMsIDc2NDIsIAotICAgIDAsIDg2OSwgODc0LCA3NjQ0LCAxMjA2NzQsIDg3NSwgNzkwLCAxMjgzMDMsIDAsIDAsIDAsIDY2MTgyLCA5ODMyNTAsIAotICAgIDU0MjksIDE5NTA1NSwgNjYxODAsIDEyNjQ4MCwgNjYxODEsIDY4NDUyLCA5ODMyODEsIDk4MzI0MiwgNDIwNjcsIDAsIAotICAgIDU0MzMsIDEwNjU3LCA3OTExLCAxOTQ2MjIsIDE1NDcsIDY2MTc2LCA0MjAxMiwgMTIwNTc2LCA1NDI1LCA0OTc3LCA5OTk5LCAKLSAgICA1MzE3LCA1NDIzLCA0NjExLCAwLCA2NzYzNywgMCwgOTY3OSwgNzQxMjIsIDAsIDAsIDAsIDY2MTk0LCA0NDE4LCA2NjE4NCwgCi0gICAgNDYyOCwgNDI0NSwgMTE5NjQ4LCAwLCAwLCAxODUxLCAwLCAxMjcxODksIDExOTA4LCAwLCA5MzYwLCAxMTg4OTcsIAotICAgIDk4MzI3MCwgNDI3NzYsIDY2MTg3LCAxMjgzNywgODgyOSwgNzcxMSwgOTI3MTQsIDAsIDkyMzIxLCA0MzMxOCwgMCwgODgwOSwgCi0gICAgNjk4ODEsIDAsIDk4MzE0MiwgMTIwNjA0LCA5ODMwNTIsIDk4Mzg3MywgMCwgOTgzMjYyLCAwLCAwLCA3NDI3LCA5OTU4LCAKLSAgICA0NTg4LCA0MzY4MCwgMCwgNzQ0ODQsIDE5NDk2OCwgMjQzMywgMCwgMTE5NjIyLCAzMzUyLCA3NDM2MywgOTgzODc2LCAwLCAKLSAgICA3OTMsIDc0NDA0LCAwLCAzMDUsIDU2NywgNjc2NjIsIDg0MiwgMTI4NTE5LCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgCi0gICAgMTE4ODc3LCAwLCA3ODM3LCA5MTc2MjUsIDgxOCwgNTMzNywgMTk0NjI4LCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIAotICAgIDEyNjU3NiwgMTIwNTk0LCA3NDA4NiwgOTE3NjE1LCA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCAKLSAgICAxMjcxNzIsIDkxNzYwOCwgNDk2OSwgMTI1NCwgOTE3NjA1LCA5MTc2MDQsIDkzOTY3LCA5MTc2MDIsIDY1MjI4LCA3ODIyMSwgCi0gICAgMTI2NjEyLCAwLCAyODQwLCAwLCAxMTk5ODIsIDk4MzkzMCwgMCwgMzI0NSwgOTA2OCwgNjgxOTQsIDY0NzI1LCAwLCAwLCAKLSAgICAxMjk5MSwgMCwgMjY1MSwgNjgwMTYsIDk4MzI1NywgOTE3NjExLCAxMjcwMjYsIDEyODg4MywgMCwgMCwgNDM2NDgsIAotICAgIDEyMDgxMiwgMCwgNDMzMjIsIDkyNjYyLCAwLCAwLCA2NDM3MiwgOTI2OTgsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCAKLSAgICA3NDUyLCAzMjg1LCAxMjg3NzksIDEyNzgyMSwgMTE5OTg4LCA2NTYxMCwgMjM5MSwgMCwgOTIyNDgsIDY3MSwgMjUwLCAKLSAgICA3NDM0LCA2MTgsIDY2OCwgNjEwLCA0MjgwMCwgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCAKLSAgICA2MjgsIDM5MDUsIDczODEwLCAwLCAxMjgyNjYsIDY0NzQ5LCA2Nzg1MCwgMjEwNywgMCwgMCwgNDYwNSwgMTI4MTc0LCAKLSAgICA5ODMxOTIsIDQzMzcyLCA2NTk0NSwgMTI4ODM4LCAwLCAxMTk1OTAsIDAsIDAsIDAsIDk4NywgNjkyNywgMTE1NzIsIAotICAgIDQyMjYxLCAxMTQ2NCwgMzM2NSwgOTk3MSwgMCwgMCwgMTI4Mjk3LCAwLCAwLCAwLCAwLCAxMTMzNCwgNDMzMjYsIDEyNjA5LCAKLSAgICAxMTUxOSwgMTE1MDMsIDU1MzAsIDUyMTAsIDAsIDQ2MjcsIDk4Mzg4MywgNTIwOCwgMCwgMTI4ODQyLCAxMDMzMiwgNTIxOCwgCi0gICAgNzk3NiwgOTE1NiwgMCwgMzI0NCwgNTUyOSwgNjk2NDcsIDczODk0LCAxMjg4NTIsIDU0MzIsIDY0OTY1LCA1NTI3LCAKLSAgICA3NDAzMywgMTA1MTYsIDc3OTAsIDU1MjgsIDAsIDQyMTQwLCAxMjAyODEsIDAsIDAsIDQzNTQ1LCA5ODg3LCAwLCA0MDAwLCAKLSAgICA3NDI5LCA3NDI4LCA2NjUsIDc0MjQsIDMyMDYsIDEyMDI3OCwgNzg4NCwgMCwgMTI4NTY2LCA5MTc5ODksIDEyODY2NiwgCi0gICAgMjExLCAyNTA5LCAxMjg4NTgsIDEyMDU3MywgNjg2NzIsIDMyMjAsIDQyMjM1LCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgCi0gICAgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIDEyNzI1OCwgNTg1MiwgMCwgMCwgMTI3MjU5LCAxNzA4LCAwLCA5ODMxNjUsIAotICAgIDI2MjMsIDExOTQzLCAwLCA2OTIyNiwgMCwgNDY5OCwgNjY1MDksIDEwNjYsIDExOTkyMSwgNDcwMSwgOTgzODY3LCAKLSAgICAxMjAyODUsIDc0MjI1LCA5NDExMSwgODI2NywgMCwgMTI3MjY1LCAwLCA3NTE2LCAwLCAyNjI1LCA5ODM5NjgsIDgwMzQsIAotICAgIDc0MzA5LCAwLCAzNjMxLCAxMDk1NSwgNzg1MCwgMTIwMjkzLCA4NDE2LCAwLCAwLCAwLCA0MzM4NCwgMTI2NjAsIDAsIDAsIAotICAgIDAsIDc0ODUwLCA0MTA2OSwgMCwgMTI4MTU2LCAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIDcxMywgNzk5MCwgMCwgMzk5MCwgCi0gICAgMCwgOTgzMjU0LCA2NjM2OCwgNTAxNywgNjQ5NTYsIDcwNzEsIDAsIDExOTE0NCwgMTAzMCwgMTE4ODAwLCA5ODMxMjAsIAotICAgIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAwLCAxMjAzNTAsIDAsIDYzMzksIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCA5NCwgCi0gICAgMTg4MCwgNzQ3NjYsIDk4MzgyOSwgODkwOCwgMCwgMTI4NzA3LCA2NTkxMywgNzg0NzAsIDEwNzUyLCAxMzAwMywgMCwgCi0gICAgMTI2NTcyLCA0MTMwNywgODczMiwgMTIwMzM4LCAwLCAxNzU3LCA2OTY0LCA0Njk2LCAwLCAxMjAzMzUsIDY0Nzg1LCA3Mzk0LCAKLSAgICAzNjQxLCA1NDE5LCAxMjgwNTUsIDAsIDEyNzg4MywgMCwgMTIwMzQ0LCA0Mzk4OCwgMCwgODYxMCwgNDMwNjIsIDc1OTIsIAotICAgIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIDY5ODk0LCA0MzE3MSwgMTQ1OSwgMCwgNjUyNDMsIDc4NjM4LCAxOTk1MywgMCwgCi0gICAgMTUwNCwgNzAwNjQsIDAsIDEyOTEzLCA3NDIwNiwgNzUyOSwgMCwgMTI4Njk5LCA5ODM5NDgsIDEyMDc4MiwgNDExMywgMCwgCi0gICAgMjM3MiwgMzM2LCAwLCA3NTA5LCAxMjE1MiwgMCwgNjgyLCA2NjQ1OCwgNDE1MDUsIDAsIDY0NzQzLCAxMDU5MywgMTcwMywgCi0gICAgMCwgOTgzOTQ2LCA4MDMzLCA2OTk1MywgMCwgOTgxMCwgMTI3MjY5LCAwLCAxMjk3MCwgMCwgNDIzNTEsIDEwMTA5LCAKLSAgICA5MTc2MjMsIDAsIDE5NDY5MywgMCwgOTI2OTAsIDAsIDAsIDc0MjkxLCAxOTY1LCA3MDY5LCA0MzMxMiwgMCwgNzM4ODcsIDAsIAotICAgIDIwODcsIDY0MzcwLCA2MzE0LCA0MTcxNCwgODUwMSwgMCwgMCwgNzQyMzksIDQxMzE3LCA5MjYxNCwgMjA5MSwgNzQ1NDUsIAotICAgIDIwOTAsIDAsIDkzNTMsIDcxMTcsIDIwNzcsIDc3ODg2LCAwLCAxMDQ5OCwgMjA4MywgNzc4ODgsIDAsIDAsIDExOTIzNiwgCi0gICAgNjM0LCAwLCAwLCAwLCA2OTc3OSwgNDE2NSwgODc0NiwgMCwgOTY1NCwgMTI4NTYsIDY5MjQsIDAsIDcwNjYsIDk4MzcxMCwgCi0gICAgMCwgMTI4MTM1LCA0MTAzNywgNDI2OTIsIDc3ODYsIDEyOTU5LCA0MTAzOSwgMTI3NDgzLCAwLCA2ODAsIDIzMDIsIAotICAgIDEyODIwMCwgMTE4MSwgNzA1NiwgMzE3NCwgMTI2NTE2LCAwLCA5MjY2OCwgNjU2NjUsIDEyNzM3NSwgMTI2NTA2LCA2OTIwLCAKLSAgICAwLCA5MjI5NSwgMCwgMTE4OTY1LCAwLCA2NDY0NCwgMTI2OTgxLCA3NDExOSwgMCwgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIAotICAgIDY1MzAyLCA0MDk4OSwgMCwgMTk0Njk2LCAwLCA0Mjc2MCwgMCwgOTgzNTY2LCAwLCA0MDk4NywgNDY2NywgMCwgOTgzOTIzLCAKLSAgICA4ODI4LCAwLCAwLCAxMjQ2LCA0NzQ2LCAwLCAwLCAxMTAyMSwgNDc0OSwgOTI2NzUsIDAsIDkyMSwgNDc0NCwgMCwgMTI3MDIsIAotICAgIDI0MiwgMCwgMTU2NiwgODIxNywgMCwgNjQ2NTMsIDc4Mzg2LCAxMjgxMjEsIDc0MDM2LCA3NDUwNSwgNDMyNzQsIDUzMTMsIAotICAgIDk1MSwgMCwgMCwgOTgzODU4LCA3NjA0LCA5ODMyODIsIDQwMDksIDEyNzgxNiwgOTgzNzAxLCAxMjA1NjIsIDAsIDk4MzcxMSwgCi0gICAgNjQ4NjAsIDExOTEzOCwgMTE5MDY5LCAwLCAxMjczNzAsIDQwNDgsIDk4MzU5OCwgMCwgNzAwMjQsIDE2NDYsIDc3ODkwLCAKLSAgICA2NDUzNCwgNzM5OTUsIDEyMDcwNSwgMCwgMTE5ODkwLCAyNTc5LCAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAKLSAgICAzNDQxLCAxMTk4OTQsIDI5NzUsIDc0NDQyLCA5ODIyLCA5ODM5MjYsIDU1MjIwLCAxMDA4NCwgNzM5NDMsIDExODg0MCwgMCwgCi0gICAgOTE3NTYyLCAxOTQ2MTAsIDMzOTksIDk4NTEsIDk4MzcwOCwgMTE5MDksIDkwNTksIDAsIDc2ODcsIDAsIDY3ODksIDAsIDAsIAotICAgIDAsIDcxMzY3LCAwLCAwLCAxNzc3LCA5MTUxLCAxMTM3LCA2OTc2NywgNzQ5LCA0MjM2NiwgMCwgNTM4NSwgMTI4NTc0LCAKLSAgICAxMjgyMTgsIDAsIDAsIDU5ODksIDAsIDAsIDEyODA5MSwgMCwgNDE2ODUsIDY5MjIzLCAwLCA5NzY5LCA0MTY4NCwgCi0gICAgOTgzMjE0LCA1MTksIDAsIDExNzQwLCA1NzY2LCAwLCAwLCAyNjAwLCA4ODQ4LCAxMjAxMzgsIDQxMjk3LCAwLCAzNjY2LCAKLSAgICA3NDQ3MywgNDEzMDAsIDc0NDY4LCA2NTE2MCwgMCwgNjk2ODgsIDY5NzcxLCA3NDQ3OSwgMCwgNjU1OCwgMCwgMCwgNjk3NjUsIAotICAgIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgMCwgNjk3NjMsIDAsIDExNzI5LCA4NzE5LCA5MDYwLCAwLCAxMjAxMzksIAotICAgIDEwNzYxLCAwLCAwLCAwLCAxMTg3OTIsIDExNzM0LCA5ODMyMjEsIDExNzMwLCAwLCA5NTkzLCA1NzU3LCAyNDAzLCA2NDgwOCwgCi0gICAgNTUyNzUsIDAsIDExNzI4LCA0MzU3MiwgMCwgMCwgNzc2NCwgOTgzNzA1LCAxMTA5NCwgMTIwODI1LCAwLCAwLCA0MjgyLCAKLSAgICA4Mjk4LCAwLCAwLCAwLCAwLCAwLCA2NDQ0OSwgMCwgMTI2NjUwLCA2Mzg1NCwgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCAKLSAgICA3ODI1MCwgMCwgNzc3NCwgMTA2MDcsIDk3OTIsIDAsIDAsIDAsIDAsIDEyMDc2NCwgMCwgMTAwMTksIDc0NzYyLCAwLCAKLSAgICAzNDU4LCA0MzY1LCA3MDA1MywgOTgzNzAzLCAzNjQ3LCAwLCAyNjAyLCAxMjgzNDEsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIAotICAgIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIDQxMjE5LCA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMTI2NDc2LCA5MjE5MywgNzU5NywgCi0gICAgMTA1MjgsIDAsIDAsIDM3MzIsIDczOTEwLCAxOTQ1ODgsIDUzNDQsIDAsIDQzMzY2LCA0MzM2MywgOTA2MiwgMTE5MjUyLCAwLCAKLSAgICAwLCAwLCA2NDQ3OSwgOTIzMiwgOTI1OTYsIDAsIDAsIDE5NDcxMiwgMTA5MDAsIDQxNTMxLCAxMjYzLCAzNzIwLCAxMjA0OCwgCi0gICAgMCwgNjQyOTIsIDQxNTI0LCA3MjI3LCAxMTk2MzUsIDYwOTksIDQxNTM0LCAwLCAxMjczNTQsIDEyNzM0NSwgMjk5LCAKLSAgICA5MTc5NTcsIDg1MjUsIDEyNzM0NywgMzUyNCwgOTE3NTY1LCA4ODMxLCAxMjczNDksIDkyNTY0LCAzMDc1LCA2Nzg2NywgCi0gICAgMTI3MzUyLCAwLCA2NjM2MiwgMCwgNjQzNTMsIDAsIDAsIDU4NDUsIDAsIDAsIDAsIDI1ODEsIDgyMDAsIDY1MTE0LCAKLSAgICA2ODQ2MCwgMCwgNDMyODMsIDU1NTEsIDAsIDEyMDczNSwgMCwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgCi0gICAgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgCi0gICAgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIAotICAgIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgCi0gICAgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgOTgzMzcxLCAwLCA5ODMyMjAsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgCi0gICAgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIAotICAgIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCAKLSAgICA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCAKLSAgICA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCAKLSAgICA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIAotICAgIDExOTY2MSwgMCwgMCwgOTgzMzEzLCAxMjA3MzcsIDAsIDk4Mzk2MiwgOTgzMzEyLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCAKLSAgICA5ODMzMTcsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAKLSAgICAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzkxLCAwLCAwLCAwLCAwLCA2NTUxMCwgMCwgMCwgNTIzMywgCi0gICAgOTgzMzI3LCA2NDc5MiwgOTgzMzI2LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCAKLSAgICA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIAotICAgIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCAKLSAgICA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIAotICAgIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIAotICAgIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCAKLSAgICA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAKLSAgICAwLCA0Mjg4OCwgNjU3MTIsIDk4MzI5NiwgMzg2OSwgMTE5MzcsIDU3MjUsIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIAotICAgIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgCi0gICAgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgCi0gICAgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCAKLSAgICA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAKLSAgICAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCAKLSAgICA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgCi0gICAgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzc0LCAKLSAgICAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCAKLSAgICA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIAotICAgIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgCi0gICAgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgCi0gICAgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyODYsIDEzMDc2LCAzMTM1LCA5ODMyNzksIAotICAgIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgMTAxODMsIDAsIDI2MDgsIDE0NzAsIAotICAgIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgCi0gICAgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAKLSAgICAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAKLSAgICAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgNjk3NCwgMCwgMCwgOTgzMjA5LCA1MDAyLCAwLCAKLSAgICA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIDk4Mzk1MywgMTI4MjI5LCAwLCA0MTI4OSwgMCwgCi0gICAgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAxMjg2NjEsIDAsIDk4MzM2NywgNDEyNzksIDAsIDAsIAotICAgIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAKLSAgICAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyMCwgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIAotICAgIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIAotICAgIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgCi0gICAgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIAotICAgIDM3NTEsIDkxMjAsIDk4MzQ3NywgMCwgMTc5OCwgNzA5LCAwLCAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIAotICAgIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIAotICAgIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAKLSAgICAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgCi0gICAgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgCi0gICAgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCAKLSAgICA5ODM3MjgsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgCi0gICAgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCAKLSAgICA0MzM5OCwgMjU4MCwgOTgzODAxLCA0MTM0MSwgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgCi0gICAgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIAotICAgIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzcyNCwgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgCi0gICAgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCAKLSAgICA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTYsIDcwNjEsIAotICAgIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgCi0gICAgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIAotICAgIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgCi0gICAgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgCi0gICAgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgCi0gICAgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAKLSAgICAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgCi0gICAgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgCi0gICAgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIAotICAgIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIAotICAgIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgCi0gICAgNDc0MywgMCwgMCwgNzQwNDAsIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAKLSAgICAwLCAzOTY0LCA2NTkyLCAwLCAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgCi0gICAgNDIwNzAsIDY1NjMsIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzg4LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAKLSAgICAxMjc5NjksIDAsIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIAotICAgIDExODgyMiwgMTc1MCwgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg3OSwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIAotICAgIDExOTE0NSwgMCwgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgCi0gICAgNDUxMiwgMTE5MzYwLCA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIAotICAgIDM5NzUsIDAsIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCAKLSAgICA0MTA5NSwgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgCi0gICAgMCwgMCwgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAorICAgIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMTI3MTA2LCA3ODY0MiwgMjIzLCAwLCA2OTY3NSwgMTIwMTY2LCA0MjQ0NCwgMCwgCisgICAgNjQ0OTksIDY1MjQ1LCAwLCAxMTcxLCAwLCA2OTcxNywgMCwgMTgwNSwgODc3MiwgNDM4MjAsIDAsIDk5MzAsIDY1MjQ3LCAKKyAgICA3ODYxOSwgMTIwMTExLCAyMzM4LCAwLCAxMTg4NTMsIDAsIDQyNjc2LCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCA2ODEyNiwgCisgICAgMTIxMywgMCwgNjQwNzUsIDc5NywgNjQwNzQsIDg3MzQsIDQyMTIsIDEyNzM2OSwgNjQzODcsIDQxMTUsIDAsIDUwMDUsIAorICAgIDY0MDcwLCA2NDA3MywgMTA2NzksIDAsIDc3OTU0LCA5NDAyLCA2NDI3NiwgNDI2LCAwLCAwLCA4MjUxLCAxMDEzNiwgCisgICAgNjU0MzYsIDAsIDIxMjAsIDQzMzAyLCAxMjI0LCAwLCA2NTU3NiwgNzQxOTIsIDEwNzAxLCAxNzY0LCAzMTAxLCAxMjc4MTUsIAorICAgIDEyODU4LCAxMjAxNTksIDAsIDExMzczLCA2Mzc4LCAxMjc4NTksIDEyMDEwMywgODY2MywgOTMxMiwgNDE2NDQsIDQ1MzksIAorICAgIDIxMjksIDAsIDkyMjIsIDk4MzczOCwgMCwgNDI1OSwgOTA5MiwgNzQ1NjcsIDQxOTYxLCAwLCAxMjcyNCwgNjYzNTcsIAorICAgIDQyMzMxLCA2NDkzNSwgMCwgMCwgMTI5MywgNzk0NywgMjEzMiwgOTgzNzY3LCA3NDU5MywgMTIwMzA4LCAyNDU0LCA0MjcxNywgCisgICAgMzYxMywgMTI4ODM3LCAwLCAwLCA2NTg4OCwgODgxNiwgMTA5NzgsIDEwODQwLCAwLCAxMDY2OCwgMCwgNDMwODcsIDEyNTk1LCAKKyAgICAxMjAzMDQsIDk4MzExNCwgODgyMiwgMCwgMTE1NywgNjQ5MDMsIDg2MzgsIDAsIDAsIDAsIDAsIDY5ODQ4LCA4MjM1LCAKKyAgICAxMjAzMTYsIDQ0MDUsIDEwMDg2LCAxMjAyNDcsIDAsIDY5MjE2LCAwLCA2NTQzMCwgNzEzMjEsIDYwNzksIDY4MTcsIAorICAgIDEwNzY0LCAxMjc5MTAsIDY0MjkxLCAxMjgwNTEsIDk5OCwgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDAsIAorICAgIDE5OTEsIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgMTE5MzM2LCA1NzQyLCAKKyAgICA0MzA3NiwgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgCisgICAgMTIwMzI1LCA2NjM3MywgMCwgMCwgNjQ5MDgsIDkyNjkxLCA2MzExLCAwLCAxMjAwNCwgMTE5MTkyLCAxMjA0OSwgNDMxMDgsIAorICAgIDEyMDMyNiwgMCwgNDE3MDUsIDkyMTg4LCA2NTk4LCAwLCA2NTk5LCAxMjAzMzQsIDAsIDQyMTQ4LCAxMTg4MjUsIDY2MDI3LCAKKyAgICAwLCA2NTk3LCA5NDEyLCA4MzQwLCAxMTgyNCwgNjQ3NDUsIDIyODEsIDY5OTA0LCAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgCisgICAgMjQzMCwgNDE2NzgsIDAsIDEyMDI0MywgMjMzNiwgOTgzOTAzLCAwLCA3ODg3MSwgMTIwNDQyLCA5ODM3NjksIDE5MjEsIAorICAgIDEwOTQ3LCAxOTkyNywgMCwgNjU0MDYsIDAsIDE5OTEzLCA0Mjg0LCAxMzIxNywgMCwgNDM3ODksIDEyODQxLCA5MjI5LCAKKyAgICAxMDk1NiwgNDIyODUsIDQxNjc0LCAxOTk2NCwgNDE2NzksIDY1MDg0LCAzNTIxLCAwLCA1Nzc0LCA4MzI1LCAwLCA2NTQwMywgCisgICAgOTgzMDg5LCAxODU0LCAxMDc5NCwgMCwgNjc2NjAsIDY5ODQ2LCAwLCA3ODM1OSwgNTI4MCwgMCwgNDM0NCwgMTI5MDUsIAorICAgIDY1NDMzLCA2MDc2LCA2NDc5MywgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAxMjkzNCwgCisgICAgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgNjA3MSwgNjU0MzQsIDEyNzQ2NywgNDgwNCwgNDA1MywgMCwgMTI3NDY5LCAKKyAgICAxOTQ2NTMsIDQxNjk2LCA0NjcsIDY5ODIzLCAxMjc0NjMsIDY5Nzk3LCAxOTQ2NTIsIDEyNzQ3MywgODQyMSwgMTI3NDcyLCAKKyAgICA2OTY4MiwgNDM3MDUsIDUwMiwgMCwgNjU0MzEsIDExOTA1NiwgNjk5NTQsIDEyMDQzLCAxMzAzLCAzMTYsIDczNjQsIDIwMjksIAorICAgIDIxMzYsIDExOTI0NiwgMTE1MzMsIDY0MzY1LCA0MzQ4MCwgOTI2MzksIDQ4NjAsIDEyNjY0OCwgMTI3ODc3LCA0MjQ4OCwgMCwgCisgICAgOTU4MywgMTI4ODQ5LCA1NTQ2LCA4MDE5LCA3Mzg1NiwgMCwgMCwgMCwgNTU0NCwgMjM1NSwgMTIxNTAsIDY1NzI1LCA1NTQzLCAKKyAgICA3Nzk4OSwgNjM3NTEsIDEyMTM3LCA1NTQ4LCA3Nzk4NSwgMCwgNjU3MjcsIDY4Mzg4LCA2NTcyNiwgNjA3NywgMTI4MzUyLCAKKyAgICA2NTQ1MiwgMCwgMTEzMDEsIDc4MDEzLCA3ODAwOCwgNzgwMTAsIDk4NzQsIDc4MDA3LCAwLCAxMzE5LCAzMDUwLCA2NTQxMCwgCisgICAgMCwgMCwgNzgwMTYsIDc4MDE3LCA0MjgzMCwgNDM5OTYsIDY2NzE2LCAxMjgxMzcsIDQ2OTEsIDkyMjQyLCA5MzQ1LCA2MjEsIAorICAgIDkyNzA5LCAxMjgyMjIsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgNzgwMjQsIDk0NzQsIAorICAgIDEwNTQ1LCAxMTkxMTgsIDEwODg3LCAzNzg2LCA2NTQwOSwgODg5NCwgNDMxNzksIDExOTYxMSwgNzkyMywgMzcxNiwgCisgICAgOTIzNjMsIDk5OTYsIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDEyNzgzNCwgOTU2NiwgMCwgMzcyMiwgMCwgNDE3MDcsIDg0OTMsIAorICAgIDU0NSwgOTU3NSwgNDEzNzksIDEwMDUwLCAxMjcxOCwgNjk4NTQsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAKKyAgICAwLCAwLCA5MTE5LCAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIAorICAgIDc4MDIyLCA0MTAsIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIAorICAgIDEwMTI2LCAxMjExNiwgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIAorICAgIDQxMzQ1LCAxMjAzNjIsIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCAKKyAgICA2NDg1OCwgMzYxLCAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDkxNzkxOSwgCisgICAgNDU2OSwgNzQxMzAsIDAsIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIDY1NjI5LCAwLCAKKyAgICAxOTQ4NTgsIDAsIDAsIDEyNzU0NSwgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgCisgICAgMCwgOTgzNTgxLCA3NDA1NCwgMTI3NzU0LCAxOTUwMjksIDAsIDgzOSwgOTgzMzE5LCA3Njk1LCA4NzY5LCA2NTI0NiwgCisgICAgNDgyOSwgMTk0NjYzLCA0ODU5LCA2NDQ2NywgMCwgOTgzOTYzLCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDQzOTg2LCAwLCAKKyAgICA2OTc2NiwgMCwgNjQ3NjQsIDQyMTAsIDk4Mzg2MywgMTI3OTM2LCA4MDQsIDAsIDAsIDEyMjk4LCAwLCA2NjY1MywgMCwgCisgICAgNjQ5MjQsIDEwMDkxLCA3MzkzMSwgOTQ2OCwgNzQyNDUsIDAsIDAsIDc0MjQ2LCA5MjUwMywgMTI4MzksIDY0NjY5LCAKKyAgICA5MjIwMiwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgMTE5MjI5LCAxMTA0OSwgMCwgOTI2OTcsIDQzMjM5LCA4NDgyLCA5MjQ0MCwgCisgICAgMCwgNTAzMiwgNjk2NzcsIDExOTQwLCA2Nzg4OCwgNjY0LCAxMjA0MzcsIDUwMzQsIDAsIDAsIDEyNzUyNSwgNDI3MDIsIAorICAgIDczODg4LCA5ODMxNDksIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgCisgICAgMTIwODE5LCA2ODM4NywgMTIwMTY4LCA3MzkxMywgMTIwMTcwLCA0MTE2MSwgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAKKyAgICAxMjAxNjAsIDY0NTI4LCAxMTY5LCA0MzQsIDQxNDM3LCAxOTA1LCA2MDM0LCA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgCisgICAgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAxOTQ2MzgsIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgCisgICAgNDI2MzYsIDAsIDY5NzI1LCAwLCAxMjA2NTYsIDAsIDY3ODc2LCAwLCAwLCAwLCA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAKKyAgICAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgMCwgMTA4NTUsIDU0NDUsIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAKKyAgICAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCA0OTYyLCA2OTc3MiwgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgCisgICAgMTA1NTUsIDAsIDQzMzMzLCA5MjI5OSwgMCwgMTIwNDI3LCAxMDQ1MSwgMCwgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgCisgICAgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgODM2NywgMCwgMTIwMTQ2LCA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAKKyAgICAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgNjIxNywgNTg5NiwgMCwgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgNzQ0MDIsIDExODg2MCwgMCwgMTIwNDE5LCA5MjQ5NywgNzQwNTIsIDAsIAorICAgIDkyMzc4LCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIDEyMDQxOCwgMCwgNjQ3NjUsIDczOTIzLCAxMjA0MTcsIDEyMDY2MiwgCisgICAgNjk5MjAsIDE5NDcwMiwgNjIxNiwgMCwgMTA3NTUsIDk0NTUsIDAsIDgxMjQsIDEyNzA0MiwgOTQ3MCwgNjk0NCwgMTI3NTQwLCAKKyAgICAwLCA2OTY4MCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgMCwgMCwgMCwgNDM0MjgsIDgyMDQsIDM2MTQsIDI4MjcsIDk2OTYsIDAsIAorICAgIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMCwgNDI1OTksIDQyNTk3LCA0MjcwOSwgCisgICAgMTIwNDA5LCAxMjcwNDQsIDAsIDg1MzcsIDAsIDAsIDkzNTQsIDk4MzE2NCwgMTI4ODMzLCA0MTE5OSwgMTAxMjEsIDIwMjgsIAorICAgIDAsIDk4MzE5NCwgNjk3MTUsIDAsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCAKKyAgICA5MjIwNSwgMTIwNzc3LCAxMjA1MDIsIDQxMTU1LCAwLCA3NDA3MSwgMCwgOTgzNDU3LCAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIAorICAgIDAsIDE3MzQsIDAsIDAsIDEyNzA0MCwgNjQ1OTQsIDI0NTYsIDIzMSwgMCwgNzQxNjcsIDU0MiwgMCwgMTE4Nzg2LCAwLCAKKyAgICA5ODM5NzksIDEyMzAsIDAsIDAsIDM1OTcsIDQ0NDYsIDEwNTg0LCA3NDIzNSwgOTIyMTUsIDQwMzcsIDEyNzkzOCwgODM1MiwgCisgICAgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIDE5NDgwMSwgNTUyNjUsIDY3ODQ2LCA3ODQzNCwgOTcwNCwgMCwgMCwgNzAwODAsIAorICAgIDcxMzM4LCAwLCA4NjYwLCAxMjY0OTUsIDAsIDAsIDc4NzczLCA3NDQ4MiwgNDQ4MywgMTcwOSwgNjk3MjEsIDk5MDksIAorICAgIDYwODAsIDAsIDEyMDM1OCwgMTc0NiwgMTMxNSwgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgCisgICAgMTEyNjYsIDEyODE1MiwgMTIyNiwgNjkzMCwgNjc5NzksIDk4MzY5MCwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIAorICAgIDc0Nzg1LCA2OTg3NSwgMCwgMCwgNDE1MDAsIDAsIDMxMSwgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNzQyODAsIAorICAgIDEwODc3LCAxMTg4NjgsIDY0ODg1LCA3NDI3MiwgMCwgMCwgMTI4NTU5LCAxMjA3MzYsIDc0MzEyLCAzNDUsIDAsIDc0NDU2LCAKKyAgICA2NDYwNiwgOTkxNywgMCwgOTIyMzEsIDUwMzcsIDAsIDE3NzYsIDg0MjIsIDAsIDExODgxNCwgNDE1MDgsIDQxMjAxLCAzMjMsIAorICAgIDQzMzI4LCAwLCA0MjY5OCwgMTI5NSwgMTk0ODUzLCA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMTI4NzcyLCA2NTEyMywgCisgICAgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgNjU2NjYsIDI1MTksIDkyMzY5LCA2NTQyMCwgOTI0NzksIDAsIDQyNTIsIAorICAgIDUwNDksIDQyNjU5LCAxMTkwMTEsIDcwNiwgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAKKyAgICAwLCA2NjcwMiwgMCwgMTI2NzAsIDEwMTMsIDAsIDY0OTE5LCA3MDUsIDAsIDY1NDIyLCAxMjc4MDMsIDExODMsIDEyNjUxOSwgCisgICAgNzAxNywgNDI4NTIsIDAsIDgxNTcsIDk3MzYsIDY0NTAzLCA2NTQxOCwgMCwgOTgzODc4LCA3NDAzNSwgMCwgMTE5MTMsIAorICAgIDczODc0LCA2Njk2LCAwLCA4OTIwLCAxMTkyOTgsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgCisgICAgMCwgMCwgMTAxNzcsIDczNzc3LCAxODU3LCAxOTQ2NTcsIDQ2MjYsIDg0NjQsIDg0NzIsIDAsIDQ2MjksIDg0OTksIDc4MzIxLCAKKyAgICA3ODMyMiwgNDYyNCwgNzgxOCwgMTE5MTczLCAwLCAwLCA3ODA1LCAwLCA5NDAwNywgNjkzNSwgOTIyOTIsIDc4MzI1LCAKKyAgICA3ODMyNiwgNzgzMjMsIDQzMzI3LCA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAKKyAgICAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIDc4MzM1LCA3ODMzMiwgNzc4MzIsIDY1ODQ5LCA3NzgzMSwgOTgzOTYxLCAwLCAKKyAgICAxMjQ1MSwgMCwgODY4NCwgMCwgNjEwMiwgMCwgNTI5OCwgMCwgNTI5NCwgMCwgMCwgOTgzNDU5LCAxOTUwNjIsIDk5NDksIAorICAgIDExOTgyNiwgNDM2MTcsIDExOTIxNSwgMCwgMTIwNzMsIDAsIDAsIDc3ODYzLCAxMzEwOCwgMTIwNjE3LCAxMTQzOSwgCisgICAgNDE0NjgsIDk4Mzc1NywgMCwgNTI5MiwgNTUyNzIsIDk4Mzg4MywgMTkzOSwgNTMwMiwgMzk3MCwgOTE3ODc5LCAxMjQ1NSwgCisgICAgMTc5MywgMCwgMCwgMCwgNjY0MywgOTI0NzcsIDY1MjYzLCAwLCA3ODMzMCwgNDEyOTMsIDc4MzI4LCA2NTkyMywgMCwgCisgICAgMTMyMTksIDk1NjksIDAsIDc0MzgzLCAwLCA3NDE5NywgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIAorICAgIDc4MzQwLCA0MzYzMSwgNTMyNCwgNjY0NDMsIDM3ODQsIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgCisgICAgMzM2MCwgNzgzNDQsIDExNTIzLCAwLCA5MjQ4OCwgOTkyNiwgNzE5NywgMCwgNjg0MjksIDQyODk0LCA0MTgyMSwgMTI0OSwgCisgICAgNzgzNjAsIDc4MzYxLCA3ODM1NiwgNzgzNTgsIDc4MzUzLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIAorICAgIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAwLCAwLCA3ODA3NCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgCisgICAgNzg1MTAsIDQxOTkwLCA3ODUwOSwgNDE4MTEsIDc0NDY2LCA5Mzk2NiwgNjY3MCwgNzc4ODIsIDAsIDAsIDQzMDkyLCAKKyAgICA0MzMyNSwgMCwgMTAxNjgsIDAsIDk3ODEsIDEyODY1NSwgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAKKyAgICAxMzAxOSwgMTE2NzAsIDY5ODYwLCAzMTUsIDEyODEzLCA5ODM0NTgsIDc4NDMyLCA3ODI1NiwgNzgzNTEsIDc4MzUyLCAwLCAKKyAgICA5ODM2NTcsIDAsIDAsIDEzNzgsIDk1MDksIDAsIDAsIDc0NDc1LCAzMDY2LCA5MjIyMCwgNjc4NDcsIDAsIDkyMzU1LCAwLCAKKyAgICA3ODM2NSwgODc4NywgMTIwMzc5LCAxOTQ2MTYsIDQxNjE4LCAxOTQ2MTUsIDc4MjYxLCAxOTQ2MTQsIDAsIDY0NjUyLCAwLCAKKyAgICAxOTQ2MTIsIDAsIDc4MzY2LCA0MjA4OCwgMCwgMTk1MDYxLCA3MTc2LCA0Mzc1NiwgMTAxMzcsIDYxMjEsIDEwOTk1LCAKKyAgICA3ODI1OSwgNzQ1MzQsIDgxMTksIDY0ODc0LCA5MTc4MTYsIDEyNzE5OSwgMTk0OTM5LCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIAorICAgIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgCisgICAgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCA0MTIzNiwgOTIyMzUsIDQyMDA1LCA0MjAwMywgNDEyMzcsIDU4NDgsIDAsIDAsIAorICAgIDM2NzAsIDEyODY1NywgMTk0NjAwLCAwLCAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIAorICAgIDYxOSwgNDYzNSwgNjUwODAsIDAsIDEyODAwMiwgNDEyMCwgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgCisgICAgOTM2NiwgNDI3OTAsIDQyMDA2LCAxMTkxMTUsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAxNTA3LCA0MjIxNiwgCisgICAgNjUzMjEsIDY1MzIwLCA2NTMzNSwgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCA2NTMyOSwgNDI2ODksIAorICAgIDkyNDI3LCA5MTI4LCA5NDA0NSwgNDIwNzMsIDY3ODUsIDY0NTkwLCA5ODM4MzAsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCAKKyAgICA2NTMxNiwgNDEwNiwgNjUzMTQsIDY1MzEzLCA0MjA3NCwgMTI3ODQ3LCA0MTIyOCwgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCAKKyAgICA0MTIzOSwgNDM1MzMsIDc4NDU5LCA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCAKKyAgICA0NjE1LCAxMjY5NSwgMTI3NzUyLCAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDAsIDU2MiwgMTIxNjksIDY1OTAsIAorICAgIDY5NzYyLCA2NjQ1NSwgNjQ3MzgsIDMyMTksIDY4NjU0LCA5ODM3ODcsIDAsIDEwMzcsIDAsIDIwMjUsIDEyODI2MywgCisgICAgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgNDM2MjMsIDExMDcyLCAKKyAgICAxMjcxOTEsIDAsIDAsIDEyNjA2LCA3ODQzMywgMjgyNSwgMCwgMTA4MjUsIDgwNzksIDI4MjEsIDQxMDQ2LCA5MjMyNywgCisgICAgNzM2NSwgOTgzNzUzLCAxMjA1OTMsIDEzMDcxLCAwLCA0NTIsIDQxMDQ5LCA0Mjg0MCwgNjM0NiwgMjgzMSwgNTQ2MSwgCisgICAgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgNDEzMzIsIDAsIDEyMzMzLCAwLCAKKyAgICAxNjY4LCAwLCAwLCAwLCAxMTg3LCA5ODMzODUsIDQyNjI4LCA3ODU3NSwgMCwgMTI4Nzc3LCAwLCAzMjQwLCAxMjg1MTgsIAorICAgIDEyMTk0LCAwLCAxMTU5MSwgNDEwNjUsIDUzMjMsIDgxNjYsIDAsIDAsIDAsIDc0NTM1LCAxNjIzLCA2NTI5NywgMTI4ODU2LCAKKyAgICA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCAKKyAgICA5MjUwOCwgMTE1NzEsIDc2MTUsIDEyNzMwMCwgOTIyOTYsIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgCisgICAgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAxMTQwMywgMCwgMCwgMTI3MTQ2LCAzNzk2LCA2ODAwLCAwLCAzOTk0LCAKKyAgICAxMTQyMSwgMCwgMTk1MDc2LCAwLCA5ODM5MjIsIDAsIDAsIDY0ODU3LCAxMjgxMDUsIDI4NTUsIDEyNzgyOCwgNjYzMDgsIAorICAgIDQxNjIxLCA2ODIxNCwgMTI3MjgzLCAxMjc4MTcsIDEwNjU0LCAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCA0Mzk3MiwgCisgICAgNjU4NDcsIDcxODIsIDAsIDEzMDI0LCAxOTQ4MjIsIDc0MjcwLCAxMjgyODksIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAKKyAgICAyMzc4LCA0MzEzNiwgMTI3OTA1LCA4NDY2LCA5ODM1NzUsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAKKyAgICAxMTQwOSwgNjgzNzMsIDYzODIsIDAsIDY0NjM0LCAxMjgyNzksIDAsIDExNjEyLCAwLCA2NzYwMCwgMjM3NCwgOTQwNjYsIAorICAgIDg0NzUsIDExNjA5LCA2NjMxMywgMCwgMCwgNTI4NiwgMTE5Mjk3LCAwLCAwLCA2NDkyNSwgMTIwMjgzLCAxOTQ1ODQsIAorICAgIDExODk4MiwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgMTEzMDUsIDE5NDU4MSwgMzMwOSwgMCwgMCwgMCwgMCwgNjgwMiwgMCwgCisgICAgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAwLCA2NjYxNSwgNDI1NjUsIDQxNjUxLCAwLCAwLCAwLCA0MTY1MCwgCisgICAgNjY1MDcsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDk5NTQsIDAsIDE0NzUsIAorICAgIDExOTI0NywgOTkzOCwgNjA4NCwgOTE3NTQ2LCA0MTA2NCwgNDEwNjIsIDAsIDAsIDMyNTYsIDEwMTg5LCA0MjA3NiwgCisgICAgNDMyNTIsIDc4ODIzLCA5MTc5MDYsIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAxMjc3NjIsIDEwNTYyLCA3NDIxNSwgNDMwNjUsIAorICAgIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCA3MTM1MSwgMCwgMzYzNSwgNjQzMzcsIDk4MzI4MSwgMCwgMCwgNzE5NSwgCisgICAgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgNjU2MTMsIDc3OTA5LCA5MjQyMCwgNzM5OTcsIDAsIDAsIAorICAgIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgNDE3NiwgNzAwNTAsIDIwMzQsIDkyNTUxLCAxMjA4MDUsIAorICAgIDY1ODkxLCAxMjcwMzgsIDAsIDMxOCwgMjAzOCwgMTI4ODYwLCA3ODU5NiwgMCwgMzY0OSwgMTMxNDksIDQyMTQ1LCA0Mjc5OCwgCisgICAgMzYzNCwgMTIwMjkxLCAxMTg5MjcsIDY3Njc3LCAxMjAxMjQsIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgOTQwMzIsIDc0MjM4LCAKKyAgICA0MjY2NCwgMjg0OSwgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgMTc2MSwgMTE4MTIsIDY1Mzc5LCA2ODM4NiwgMTI4MTg1LCAKKyAgICAxMTU5LCAwLCA2OTcyOSwgMCwgMCwgNzE3OCwgMTk0NjMyLCAwLCA0MTY4MCwgMCwgMTI4MjAzLCAxMTUzNCwgMTUxNCwgCisgICAgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgMTk0NTY3LCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAKKyAgICAxNjI0LCA0MzI3MCwgMCwgNzQyNzgsIDEwODE4LCAxMjY2NDQsIDk5NTMsIDAsIDc4NDIxLCAxMTk0LCAzMjQyLCA5NzYxLCAKKyAgICA5NTU1LCA4NTk4LCAxMjAyOTksIDYxNjksIDEyODcxLCAxNTUxLCAyNzk4LCA2NTE3NiwgNDk1OCwgNDI3NTIsIDExOTAyNSwgCisgICAgMCwgNjc4NzUsIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDE5NDc2OCwgMCwgNjgzNjQsIDk4MzIyNCwgNDg5MSwgMCwgMTA2NDEsIAorICAgIDAsIDczNzQ2LCAwLCA2ODM1MiwgMCwgNzM3ODcsIDE5NDgyOSwgMTk0NjMzLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDI2ODUsIDQyNjc5LCAxOTMsIDAsIDAsIDAsIDQyNjY3LCAwLCA1MjcxLCA5MjMxOCwgOTI1MTcsIDExODg4MiwgMTM2MiwgCisgICAgMTMyOTcsIDAsIDEyODA5NCwgMCwgOTgzMzMxLCA3Mzc4OSwgMCwgNjY1OCwgNDQyNiwgMCwgOTI2MjgsIDk4Mzg0MiwgCisgICAgOTIzMTksIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCA5ODMzMzAsIDI0MTYsIDMzMTAsIDQyNzAzLCAwLCAzNzksIDAsIAorICAgIDQzNzU1LCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCA0NTQ5LCAwLCAwLCA5ODMxNTQsIDEyNzc2MywgCisgICAgMTA4MDcsIDk1NTgsIDE5NDYxMywgMCwgODUxNSwgODY4OCwgMTI4NjYsIDY1MzA4LCAzMjk0LCA5ODMzMzIsIDg1MjksIAorICAgIDEyODEwMSwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAwLCA5MjQ1OCwgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgCisgICAgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCA5MjE5OCwgMzIxNSwgMCwgNzcxMCwgMTYxMCwgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAKKyAgICAxMjA1MzcsIDY1OTI0LCA5OTc0LCAyMjgsIDY2MzU0LCAxNTAxLCAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgNjIyNSwgMCwgCisgICAgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgMCwgNzE1MiwgODUwMiwgNTc2MiwgMTk2NywgCisgICAgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgNzc5NzksIDAsIDEyNjUwNywgMTA0MTQsIDEzMDAxLCA4MTQxLCAwLCAKKyAgICA0MjUzNywgMTU1NywgNDM1OTQsIDEyODY0MiwgNjMzMCwgNjgwNSwgODYzMSwgMjU0NSwgNzAwNTIsIDEyNzE2NiwgMCwgCisgICAgNzQxOTAsIDAsIDAsIDk4Mzc4NiwgNDI3NjIsIDAsIDQyOTE0LCAxNjUwLCAyNjIsIDE2MzcsIDAsIDc5MDEsIDMyMzgsIAorICAgIDEyODE3MywgNDE4NjEsIDAsIDEyODU4NSwgNjUxNTgsIDEwODYwLCA5NDA1OSwgNDM2NTgsIDc1MjcsIDAsIDQzMzE5LCAKKyAgICA2NDE5LCAwLCA0NSwgMCwgNjQ1ODgsIDkzOTg5LCAwLCAxMTk4MTAsIDcxOTQsIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMCwgCisgICAgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIDEyOTA2LCA5NjM5LCA3OTEyLCAyNjIwLCAwLCAwLCAwLCA5ODM4NzUsIAorICAgIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCA5ODM4OTAsIDExODk5NiwgMTE5MDA5LCAyODUwLCAKKyAgICA4MDg0LCA5ODMwODUsIDczODUwLCAyODAxLCA5MjI4NCwgNDIwNjksIDExOTgzOSwgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIAorICAgIDExOTg0MywgMTE5ODQyLCAxMDM5OCwgOTgzMDU2LCAwLCA4Mzc3LCAxMjcxMTYsIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgCisgICAgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCAKKyAgICA5MjQ2MywgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgCisgICAgNDM1NDIsIDAsIDY0NTc4LCA5ODM2NzUsIDMyMjgsIDY5NjM2LCA4NzgzLCAwLCAxMTk2MTQsIDI3MzEsIDAsIDAsIDc4NTg1LCAKKyAgICA0MTAyLCA3Njk2LCA3Mzg3OCwgMCwgMCwgNzg1ODYsIDQzMzE2LCA0MTc3LCAxMTI4MywgOTA4OSwgMCwgNzM5OTYsIAorICAgIDk4MzE3MywgNjQ1MDAsIDQzNjc0LCAwLCA2NDk0NywgMTg1NiwgMCwgMCwgNjM3OSwgMCwgMCwgMCwgMzIwOCwgMTI5NzUsIAorICAgIDc0Nzc1LCAxMjczODAsIDk4MzkzMSwgOTIzODksIDc0MDcyLCA1NTI2OSwgMCwgMCwgOTgzNjgzLCAyMDMzLCA3ODU3NywgCisgICAgNzg1NzYsIDE5NTAyNiwgNTUyNTQsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCA5Mzk4OCwgNjc2MTIsIDY1Njc0LCAKKyAgICAxMjgyNDQsIDk0MTEwLCA0MTY4OSwgMCwgNzQwMDYsIDY0OTA5LCA2NjQ2LCAxMTc5MCwgNzQwMTksIDAsIDEyODA2NiwgCisgICAgMTI4MDMxLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAxMjA2MDUsIDcyMzAsIDgyNTcsIDAsIDg3NzgsIDQxNjg4LCAwLCAKKyAgICA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgNjUwOTIsIDczOTAzLCA2NjcyMSwgMTEzNDIsIDEyODU2MSwgMCwgCisgICAgMCwgMTI4MjI2LCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIDk2NywgOTgzOTUxLCAxMjY0NjksIDExOTQ2LCAwLCAKKyAgICAzMjU3LCAwLCAxMjMwNywgMTg0NSwgOTgzMTU3LCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIDEwMDg5LCA4NzAsIDc2NDgsIAorICAgIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgNDM2OTIsIDQ1NjMsIDAsIDAsIAorICAgIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMTI2NjA3LCA4NjgsIDg3MywgNzY0MiwgMCwgODY5LCA4NzQsIDc2NDQsIAorICAgIDEyMDY3NCwgODc1LCA3OTAsIDEyODMwMywgMCwgMCwgMCwgNjYxODIsIDk4MzI1OCwgNTQyOSwgMTk1MDU1LCA2NjE4MCwgCisgICAgMTI2NDgwLCA2NjE4MSwgNjg0NTIsIDk4MzI4OSwgOTgzMjQ4LCA0MjA2NywgMCwgNTQzMywgMTA2NTcsIDc5MTEsIAorICAgIDE5NDYyMiwgMTU0NywgNjYxNzYsIDQyMDEyLCAxMjA1NzYsIDU0MjUsIDQ5NzcsIDk5OTksIDUzMTcsIDU0MjMsIDQ2MTEsIAorICAgIDAsIDY3NjM3LCAwLCA5Njc5LCA3NDEyMiwgMCwgMCwgMCwgNjYxOTQsIDQ0MTgsIDY2MTg0LCA0NjI4LCA0MjQ1LCAKKyAgICAxMTk2NDgsIDAsIDAsIDE4NTEsIDAsIDEyNzE4OSwgMTE5MDgsIDAsIDkzNjAsIDExODg5NywgOTgzMjAyLCA0Mjc3NiwgCisgICAgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCA5MjcxNCwgMCwgOTIzMjEsIDQzMzE4LCAwLCA4ODA5LCA2OTg4MSwgMCwgCisgICAgOTgzMTQyLCAxMjA2MDQsIDk4MzA1MiwgOTgzODgyLCAwLCA5ODMyNzAsIDAsIDAsIDc0MjcsIDk5NTgsIDQ1ODgsIDQzNjgwLCAKKyAgICAwLCA3NDQ4NCwgMTk0OTY4LCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCA5ODM4ODUsIDAsIDc5MywgNzQ0MDQsIDAsIAorICAgIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAxMjg1MTksIDgyMDgsIDAsIDQxNjk1LCAxNjQ3LCAxMTg4NzcsIDAsIDc4MzcsIAorICAgIDkxNzYyNSwgODE4LCA1MzM3LCAxOTQ2MjgsIDkxNzYyMSwgNDEzNzYsIDExOTk3OCwgMTI2NTc2LCAxMjA1OTQsIDc0MDg2LCAKKyAgICA5MTc2MTUsIDkxNzYxNCwgOTE3NjEzLCAxMDk3MywgNjYzNTksIDEzNzIsIDEyNzE3MiwgOTE3NjA4LCA0OTY5LCAxMjU0LCAKKyAgICA5MTc2MDUsIDkxNzYwNCwgOTM5NjcsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAxMjY2MTIsIDAsIDI4NDAsIDAsIDExOTk4MiwgCisgICAgOTgzOTM5LCAwLCAzMjQ1LCA5MDY4LCA2ODE5NCwgNjQ3MjUsIDAsIDAsIDEyOTkxLCAwLCAyNjUxLCA2ODAxNiwgOTgzMjY1LCAKKyAgICA5MTc2MTEsIDEyNzAyNiwgMTI4ODgzLCAwLCAwLCA0MzY0OCwgMTIwODEyLCAwLCA0MzMyMiwgOTI2NjIsIDAsIDAsIAorICAgIDY0MzcyLCA5MjY5OCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIDc0NTIsIDMyODUsIDEyODc3OSwgMTI3ODIxLCAKKyAgICAxMTk5ODgsIDY1NjEwLCAyMzkxLCAwLCA5MjI0OCwgNjcxLCAyNTAsIDc0MzQsIDYxOCwgNjY4LCA2MTAsIDQyODAwLCAKKyAgICA3NDMxLCAxMTUyLCA0MjgwMSwgNjQwLCAxMjA2NjYsIDc0NDgsIDc0MzksIDYyOCwgMzkwNSwgNzM4MTAsIDAsIDEyODI2NiwgCisgICAgNjQ3NDksIDY3ODUwLCAyMTA3LCAwLCAwLCA0NjA1LCAxMjgxNzQsIDk4MzE5MiwgNDMzNzIsIDY1OTQ1LCAxMjg4MzgsIDAsIAorICAgIDExOTU5MCwgMCwgMCwgMCwgOTg3LCA2OTI3LCAxMTU3MiwgNDIyNjEsIDExNDY0LCAzMzY1LCA5OTcxLCAwLCAwLCAKKyAgICAxMjgyOTcsIDAsIDAsIDAsIDAsIDExMzM0LCA0MzMyNiwgMTI2MDksIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgCisgICAgNDYyNywgOTgzODkyLCA1MjA4LCAwLCAxMjg4NDIsIDEwMzMyLCA1MjE4LCA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCAKKyAgICA2OTY0NywgNzM4OTQsIDEyODg1MiwgNTQzMiwgNjQ5NjUsIDU1MjcsIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgCisgICAgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgCisgICAgMTIwMjc4LCA3ODg0LCAwLCAxMjg1NjYsIDkxNzk4OSwgMTI4NjY2LCAyMTEsIDI1MDksIDEyODg1OCwgMTIwNTczLCAKKyAgICA2ODY3MiwgMzIyMCwgNDIyMzUsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgCisgICAgMTI3MjU4LCA1ODUyLCAwLCAwLCAxMjcyNTksIDE3MDgsIDAsIDk4MzE2NSwgMjYyMywgMTE5NDMsIDAsIDY5MjI2LCAwLCAKKyAgICA0Njk4LCA2NjUwOSwgMTA2NiwgMTE5OTIxLCA0NzAxLCA5ODM4NzYsIDEyMDI4NSwgNzQyMjUsIDk0MTExLCA4MjY3LCAwLCAKKyAgICAxMjcyNjUsIDAsIDc1MTYsIDAsIDI2MjUsIDk4Mzk3NywgODAzNCwgNzQzMDksIDAsIDM2MzEsIDEwOTU1LCA3ODUwLCAKKyAgICAxMjAyOTMsIDg0MTYsIDAsIDAsIDAsIDQzMzg0LCAxMjY2MCwgMCwgMCwgMCwgNzQ4NTAsIDQxMDY5LCAwLCAxMjgxNTYsIAorICAgIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgNzEzLCA3OTkwLCAwLCAzOTkwLCAwLCA5ODMyNjIsIDY2MzY4LCA1MDE3LCAKKyAgICA2NDk1NiwgNzA3MSwgMCwgMTE5MTQ0LCAxMDMwLCAxMTg4MDAsIDk4MzEyMCwgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIAorICAgIDAsIDEyMDM1MCwgMCwgNjMzOSwgNzc0NSwgOTg0NCwgMCwgNjQ2NTAsIDk0LCAxODgwLCA3NDc2NiwgOTgzODM4LCA4OTA4LCAKKyAgICAwLCAxMjg3MDcsIDY1OTEzLCA3ODQ3MCwgMTA3NTIsIDEzMDAzLCAwLCAxMjY1NzIsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIAorICAgIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDEyMDMzNSwgNjQ3ODUsIDczOTQsIDM2NDEsIDU0MTksIDEyODA1NSwgMCwgMTI3ODgzLCAKKyAgICAwLCAxMjAzNDQsIDQzOTg4LCAwLCA4NjEwLCA0MzA2MiwgNzU5MiwgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgNjk4OTQsIAorICAgIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgNzg2MzgsIDE5OTUzLCAwLCAxNTA0LCA3MDA2NCwgMCwgMTI5MTMsIDc0MjA2LCAKKyAgICA3NTI5LCAwLCAxMjg2OTksIDk4Mzk1NywgMTIwNzgyLCA0MTEzLCAwLCAyMzcyLCAzMzYsIDAsIDc1MDksIDEyMTUyLCAwLCAKKyAgICA2ODIsIDY2NDU4LCA0MTUwNSwgMCwgNjQ3NDMsIDEwNTkzLCAxNzAzLCAwLCA5ODM5NTUsIDgwMzMsIDY5OTUzLCAwLCAKKyAgICA5ODEwLCAxMjcyNjksIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIDkxNzYyMywgMCwgMTk0NjkzLCAwLCA5MjY5MCwgMCwgCisgICAgMCwgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAKKyAgICAwLCAwLCA3NDIzOSwgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgMjA5MCwgMCwgOTM1MywgNzExNywgMjA3NywgNzc4ODYsIAorICAgIDAsIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgMTE5MjM2LCA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCAKKyAgICA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgOTgzNzE5LCAwLCAxMjgxMzUsIDQxMDM3LCA0MjY5MiwgNzc4NiwgMTI5NTksIAorICAgIDQxMDM5LCAxMjc0ODMsIDAsIDY4MCwgMjMwMiwgMTI4MjAwLCAxMTgxLCA3MDU2LCAzMTc0LCAxMjY1MTYsIDAsIDkyNjY4LCAKKyAgICA2NTY2NSwgMTI3Mzc1LCAxMjY1MDYsIDY5MjAsIDAsIDkyMjk1LCAwLCAxMTg5NjUsIDAsIDY0NjQ0LCAxMjY5ODEsIAorICAgIDc0MTE5LCAwLCA0MTAyOCwgMCwgNjIzMSwgMjYxMywgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCAKKyAgICA5ODM1NjYsIDAsIDQwOTg3LCA0NjY3LCAwLCA5ODM5MzIsIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCAKKyAgICA0NzQ5LCA5MjY3NSwgMCwgOTIxLCA0NzQ0LCAwLCAxMjcwMiwgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgNzgzODYsIAorICAgIDEyODEyMSwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgOTUxLCAwLCAwLCA5ODM4NjcsIDc2MDQsIDk4MzI5MCwgNDAwOSwgCisgICAgMTI3ODE2LCA5ODM3MTAsIDEyMDU2MiwgMCwgOTgzNzIwLCA2NDg2MCwgMTE5MTM4LCAxMTkwNjksIDAsIDEyNzM3MCwgCisgICAgNDA0OCwgOTgzNTk4LCAwLCA3MDAyNCwgMTY0NiwgNzc4OTAsIDY0NTM0LCA3Mzk5NSwgMTIwNzA1LCAwLCAxMTk4OTAsIAorICAgIDI1NzksIDExOTkwNSwgMzE3NywgMTEzNTcsIDkwOTksIDQxMDcsIDM0NDEsIDExOTg5NCwgMjk3NSwgNzQ0NDIsIDk4MjIsIAorICAgIDk4MzkzNSwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCA5MTc1NjIsIDE5NDYxMCwgMzM5OSwgOTg1MSwgCisgICAgOTgzNzE3LCAxMTkwOSwgOTA1OSwgMCwgNzY4NywgMCwgNjc4OSwgMCwgMCwgMCwgNzEzNjcsIDAsIDAsIDE3NzcsIDkxNTEsIAorICAgIDExMzcsIDY5NzY3LCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAxMjg1NzQsIDEyODIxOCwgMCwgMCwgNTk4OSwgMCwgMCwgCisgICAgMTI4MDkxLCAwLCA0MTY4NSwgNjkyMjMsIDAsIDk3NjksIDQxNjg0LCA5ODMyMTYsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIDAsIAorICAgIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCAKKyAgICA2OTY4OCwgNjk3NzEsIDc0NDc5LCAwLCA2NTU4LCAwLCAwLCA2OTc2NSwgMTIwNzUwLCAyNTIsIDAsIDQxMzAyLCAwLCAwLCAKKyAgICAwLCA2OTc2MywgMCwgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIAorICAgIDk4MzIyMywgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIDI0MDMsIDY0ODA4LCA1NTI3NSwgMCwgMTE3MjgsIDQzNTcyLCAwLCAwLCAKKyAgICA3NzY0LCA5ODM3MTQsIDExMDk0LCAxMjA4MjUsIDAsIDk4MzIyNiwgNDI4MiwgODI5OCwgMCwgMCwgMCwgMCwgMCwgNjQ0NDksIAorICAgIDAsIDEyNjY1MCwgNjM4NTQsIDg0NTYsIDAsIDc0NzgzLCA2NTY3MCwgMCwgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAKKyAgICAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgMzQ1OCwgNDM2NSwgNzAwNTMsIDk4MzcxMiwgMzY0NywgCisgICAgMCwgMjYwMiwgMTI4MzQxLCAwLCAxOTQ3MDcsIDQxMTM1LCAwLCAwLCAwLCA2NDYzMSwgMTcyLCA0OTcxLCA0MTIxOSwgCisgICAgNDExMzcsIDE4ODksIDcyMzgsIDY1NDUsIDEyNjQ3NiwgOTIxOTMsIDc1OTcsIDEwNTI4LCAwLCAwLCAzNzMyLCA3MzkxMCwgCisgICAgMTk0NTg4LCA1MzQ0LCAwLCA0MzM2NiwgNDMzNjMsIDkwNjIsIDExOTI1MiwgMCwgMCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCAKKyAgICAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgCisgICAgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMTI3MzU0LCAxMjczNDUsIDI5OSwgOTE3OTU3LCA4NTI1LCAxMjczNDcsIDM1MjQsIAorICAgIDkxNzU2NSwgODgzMSwgMTI3MzQ5LCA5MjU2NCwgMzA3NSwgNjc4NjcsIDEyNzM1MiwgMCwgNjYzNjIsIDAsIDY0MzUzLCAwLCAKKyAgICAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgNjg0NjAsIDAsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIAorICAgIDk4MzIwMSwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIAorICAgIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCAKKyAgICA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIAorICAgIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgCisgICAgOTgzMzc5LCAwLCA5ODMyMjIsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIAorICAgIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgCisgICAgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAKKyAgICAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCAKKyAgICA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIAorICAgIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIDExOTY2MSwgMCwgMCwgOTgzMzIxLCAxMjA3MzcsIDAsIDk4Mzk3MSwgCisgICAgOTgzMzIwLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCA5ODMzMjUsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIAorICAgIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzk5LCAwLCAwLCAwLCAwLCAKKyAgICA2NTUxMCwgMCwgMCwgNTIzMywgOTgzMzM1LCA2NDc5MiwgOTgzMzM0LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIAorICAgIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIAorICAgIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCAKKyAgICA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgCisgICAgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIAorICAgIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIAorICAgIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIAorICAgIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAwLCA0Mjg4OCwgNjU3MTIsIDk4MzMwNCwgMzg2OSwgMTE5MzcsIDU3MjUsIAorICAgIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIAorICAgIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIAorICAgIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAKKyAgICAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAKKyAgICAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIAorICAgIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgCisgICAgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCAKKyAgICA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzgyLCAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIAorICAgIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIAorICAgIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAKKyAgICAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIAorICAgIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyOTQsIAorICAgIDEzMDc2LCAzMTM1LCA5ODMyODcsIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgCisgICAgMTAxODMsIDAsIDI2MDgsIDE0NzAsIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCAKKyAgICA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgCisgICAgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgCisgICAgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgCisgICAgNjk3NCwgMCwgMCwgOTgzMjExLCA1MDAyLCAwLCA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIAorICAgIDk4Mzk2MiwgMTI4MjI5LCAwLCA0MTI4OSwgMCwgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAKKyAgICAxMjg2NjEsIDAsIDk4MzM3NSwgNDEyNzksIDAsIDAsIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgCisgICAgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyOSwgCisgICAgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIAorICAgIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCAKKyAgICA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAKKyAgICAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIDM3NTEsIDkxMjAsIDk4MzQ4NSwgMCwgMTc5OCwgNzA5LCAwLCAKKyAgICAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIAorICAgIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgCisgICAgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIAorICAgIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCAKKyAgICA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIAorICAgIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCA5ODM3MzcsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCAKKyAgICA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCAKKyAgICA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCA0MzM5OCwgMjU4MCwgOTgzODEwLCA0MTM0MSwgCisgICAgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCAKKyAgICA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzczMywgCisgICAgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgCisgICAgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgCisgICAgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTgsIDcwNjEsIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCAKKyAgICA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgCisgICAgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIAorICAgIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgCisgICAgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIAorICAgIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAKKyAgICAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgCisgICAgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIAorICAgIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgCisgICAgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIAorICAgIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAKKyAgICAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgNDc0MywgMCwgMCwgNzQwNDAsIAorICAgIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAwLCAzOTY0LCA2NTkyLCAwLCAKKyAgICAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgNDIwNzAsIDY1NjMsIAorICAgIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzk2LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAxMjc5NjksIDAsIAorICAgIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIDExODgyMiwgMTc1MCwgCisgICAgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg4OCwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIDExOTE0NSwgMCwgCisgICAgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgNDUxMiwgMTE5MzYwLCAKKyAgICA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIDM5NzUsIDAsIAorICAgIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCA0MTA5NSwgCisgICAgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgMCwgMCwgCisgICAgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAogICAgIDEyODAzMiwgMCwgNDI1MzEsIDExOTEwOCwgMTUxMCwgMCwgODI1NiwgMCwgMTEzOTMsIDAsIDg4NzksIDEyODA3NSwgCiAgICAgOTI0NzQsIDg3NzAsIDAsIDAsIDc4Mzc3LCAxOTEwLCA4NjcxLCA3ODM3NCwgNDI4MywgMCwgMTI3MTE3LCA2ODM2MSwgCiAgICAgNzgzMTgsIDI2NTQsIDc4OTMsIDE5NTAwNywgMCwgMCwgMCwgNjUxMDYsIDQyNzYxLCAxMjg1NywgNDU4MSwgODQxMSwgCkBAIC0xOTIzNiwyOCArMTkyNTYsMjggQEAKICAgICA5MTc2MTksIDAsIDAsIDEwMDQzLCAwLCAxMTg2LCA0MTU3MSwgNjk5OSwgNjE3LCA5NDY0LCAxMjY2NDIsIDM2NzUsIDUyMDcsIAogICAgIDY1MDYyLCA1MjEzLCAxOTQ3NjksIDI2MTcsIDQxMzQ4LCA0MTU2OCwgMTI4ODAzLCAzMjUzLCAxMjA1MzUsIDAsIDg2MzAsIAogICAgIDEyODU0NCwgMCwgNTU5NiwgNTU0NSwgNzI4OCwgMjU4NiwgNjQ4ODcsIDAsIDUyMTcsIDcxMzM2LCAwLCAwLCAwLCA2NDI5MywgCi0gICAgNjgwOTgsIDI2MzUsIDAsIDAsIDk4MzgzNywgMCwgOTgzNjMyLCA3ODM1LCA3MDA0MCwgMCwgMTk0OTg4LCA5MjI4NSwgCisgICAgNjgwOTgsIDI2MzUsIDAsIDAsIDk4Mzg0NiwgMCwgOTgzNjQxLCA3ODM1LCA3MDA0MCwgMCwgMTk0OTg4LCA5MjI4NSwgCiAgICAgNjQ1NTgsIDEyNzEyMiwgMCwgMTI3MTIxLCAwLCAxMjc5MTMsIDAsIDU3ODQsIDk4MzEwMiwgMCwgMCwgNzAwMzMsIDQwMTEsIAotICAgIDkxNzYxNiwgNjgxMDEsIDAsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0ODgsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIAorICAgIDkxNzYxNiwgNjgxMDEsIDAsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0OTYsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIAogICAgIDU1OTgsIDEyMDcsIDEyMDUyMSwgNjY2ODksIDM1MDEsIDQyNTgyLCA0MzYwMCwgMTk0NzgwLCAwLCAxMTI0LCA1NTk3LCAKLSAgICAxOTQ3NzgsIDE5NDc3MiwgOTMyMSwgOTgzNDc2LCA5ODM0NzMsIDk4MzQ3NCwgMCwgMTcxOSwgNjgzNTYsIDY4MzU0LCAKLSAgICA5NjcxLCAxMTI1LCA0Mzk5LCAxMjc0NzksIDkxNzYxMCwgOTgzNDgwLCA3NjMxLCA1NDg4LCA3MTI4LCAxMjA1MzIsIDAsIAorICAgIDE5NDc3OCwgMTk0NzcyLCA5MzIxLCA5ODM0ODQsIDk4MzQ4MSwgOTgzNDgyLCAwLCAxNzE5LCA2ODM1NiwgNjgzNTQsIAorICAgIDk2NzEsIDExMjUsIDQzOTksIDEyNzQ3OSwgOTE3NjEwLCA5ODM0ODgsIDc2MzEsIDU0ODgsIDcxMjgsIDEyMDUzMiwgMCwgCiAgICAgNTQ5MSwgMCwgODkzNywgNDMwNDQsIDI2MDQsIDc0MTg3LCA1NDkwLCA0MzA0NiwgNTQ4OSwgNzIxMiwgMTE3NjgsIDQzMDQzLCAKICAgICA2MzAwLCAwLCA3MTIyLCAwLCA0MzkwLCA0NTQsIDQxMzk3LCAwLCA5ODc1LCA3NTkzLCAxOTQ3OTEsIDkyMjc0LCAxMTg5MTMsIAogICAgIDcyMDcsIDAsIDY1OTAxLCAyMzk0LCAyNTc1LCAwLCAzNzQ2LCAxMTAxNiwgNjU3NTIsIDEyMDAzNywgMCwgNDM0MjMsIAogICAgIDEyODY4MywgMTE5ODksIDAsIDAsIDAsIDAsIDAsIDgyNDksIDEyODE3MiwgMCwgNzg1MzEsIDY2NDAsIDc0ODA2LCAyNTk4LCAKLSAgICA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyMDcxMCwgNjUwMDgsIDAsIDE5NDc4NCwgMTk0OTg5LCAxOTQ3OTUsIDk4MzQ2NSwgCi0gICAgOTI1MTUsIDY4NDc1LCA5Mzk3MywgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxMjgwNDMsIDY5ODkzLCAxMDM2LCA5ODM0NjksIAotICAgIDkyNDE5LCAxNzIzLCAxMjgwNTYsIDc0MjE3LCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCA5ODM0NjEsIAotICAgIDc0NDg2LCA5ODM0NTksIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCAKKyAgICA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyMDcxMCwgNjUwMDgsIDAsIDE5NDc4NCwgMTk0OTg5LCAxOTQ3OTUsIDk4MzQ3MywgCisgICAgOTI1MTUsIDY4NDc1LCA5Mzk3MywgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxMjgwNDMsIDY5ODkzLCAxMDM2LCA5ODM0NzcsIAorICAgIDkyNDE5LCAxNzIzLCAxMjgwNTYsIDc0MjE3LCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCA5ODM0NjksIAorICAgIDc0NDg2LCA5ODM0NjcsIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCAKICAgICA3ODE0MCwgNzgxMzksIDE5NDk4NSwgODEyMSwgMTA0MzgsIDc0NDg3LCA0MjU3NCwgMTMyODUsIDU1MjYzLCAxMTkwNywgCiAgICAgMTk1MDAwLCA1NjkwLCA5MjI1NSwgOTM5OTIsIDAsIDQzMTgxLCAxMzA5NSwgMCwgMTI3ODU3LCA2NDQ5OCwgMCwgOTUwNiwgCiAgICAgNjk3OCwgMTk0OTkzLCA3Nzk5MiwgMCwgMCwgMTk0OTkyLCAwLCAxMjc4NDUsIDExMjIsIDMxNywgMCwgMCwgMCwgMCwgCiAgICAgMTkyMCwgMCwgMTAxNzMsIDgyNywgMCwgMCwgNzgzNzgsIDEyMDEyNiwgNTIyMywgMTMwNCwgMCwgMTE5NTY0LCA1MjI2LCAKICAgICAxMjYwMiwgOTQwNDQsIDAsIDkzMjksIDc3NTgsIDkyMzksIDQxMTczLCA1MjI0LCA1NDg3LCAxMjIyLCA1NjkyLCA0MTcyNSwgCiAgICAgNjkyMjksIDk2NzQsIDU2OTUsIDQxNzExLCA2NDYyNywgMTk5MDksIDAsIDc0NjA0LCA1NjkxLCAyODcsIDg2NiwgMjMzLCAKLSAgICAxMjc0OTAsIDk4MzQzMywgNDI4MTYsIDk0MDM2LCA2NTE0MCwgNzQ3OTcsIDAsIDg4MzAsIDY1NjgsIDQyMzAwLCAxMDUyNCwgCi0gICAgNDExNzUsIDk4MzQ0MCwgOTgzNDM3LCA5ODM0MzgsIDUyOTYsIDk4MzQzNiwgNDI0OTIsIDQzNDAyLCA5MjQ2NiwgMzMwMiwgCisgICAgMTI3NDkwLCA5ODM0NDEsIDQyODE2LCA5NDAzNiwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIAorICAgIDQxMTc1LCA5ODM0NDgsIDk4MzQ0NSwgOTgzNDQ2LCA1Mjk2LCA5ODM0NDQsIDQyNDkyLCA0MzQwMiwgOTI0NjYsIDMzMDIsIAogICAgIDAsIDAsIDY1MTYsIDY1MTUsIDY1MTQsIDY1MTMsIDY1MTIsIDAsIDc4NTYsIDg2OTAsIDAsIDAsIDEyMTIyLCAxMTk2MDIsIAogICAgIDQzOTc2LCAwLCAxNzg1LCA2OTkyNSwgNjg2MjIsIDY1MTUzLCAxOTQ4MTAsIDUxMzgsIDAsIDAsIDExODg2OSwgMCwgNDU0MCwgCiAgICAgNDExODEsIDAsIDYyMDAsIDAsIDUxMzQsIDAsIDMyMiwgNDY0MywgNTEzMiwgMCwgNjM4OSwgMTI4NTMzLCA1MTQzLCAwLCAKQEAgLTE5MjY1LDcgKzE5Mjg1LDcgQEAKICAgICAxMjcwMTIsIDEwMjcwLCAxMDI4NiwgMTAzMTgsIDEwMzgyLCA0MzUyOSwgNjY0NzcsIDAsIDAsIDc0MTcwLCAwLCAzMjM0LCAKICAgICAwLCAwLCA3NDM3NiwgNDMxMzksIDExODgxNSwgMTI3MDg0LCAxMjA2MjcsIDg3NjcsIDAsIDc0NDg5LCA5Njk1LCAxMjA3NDYsIAogICAgIDUyMDEsIDAsIDYyMTUsIDEyNzE0LCA2MjE0LCAxMzEwMSwgMCwgMTk0OTk5LCA2NTI2OCwgMCwgMCwgMCwgMTEwMjcsIDAsIAotICAgIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIDEyNzA3MSwgOTgzNjYxLCAzMjAsIDAsIAorICAgIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIDEyNzA3MSwgOTgzNjcwLCAzMjAsIDAsIAogICAgIDg2NDcsIDAsIDMwNDksIDAsIDY0NzEsIDQyMDcxLCA0MzE1NiwgOTkyNSwgMTI3MzU2LCAxMjczNTUsIDY2NDc4LCA0OTYwLCAKICAgICA1NTQ5LCAxMjczNTksIDEyNzM0NiwgODQ4NSwgNDY3MSwgNTQxOCwgMTI3MzUwLCAzMzUxLCAxMjcwMDYsIDEyNzM1MSwgCiAgICAgMTA2MTAsIDU0MTQsIDMwNjQsIDYyMTIsIDQyODYsIDU0MjEsIDEyNzM0NCwgOTU1NCwgMCwgOTQwNDgsIDEyNzEwOSwgCkBAIC0xOTI3MywxNiArMTkyOTMsMTYgQEAKICAgICAxMjYwMywgNzEzMSwgMTE0MzAsIDQ1NjYsIDc1MTgsIDkzMTcsIDM4MDEsIDEwMzQyLCAxMDQwNiwgMCwgMTE5MjU5LCAKICAgICA0MjU3NiwgMCwgNTIwMCwgMTI2NjExLCA5MTc5NDgsIDAsIDkxODMsIDEyNzM2MSwgNzQ0NTgsIDczODI1LCAzOTUsIDU0ODIsIAogICAgIDUxOTgsIDQzNDksIDEwMzkwLCA3NDIwMiwgNTE5NiwgNDMyMjQsIDYxMTMsIDQyMDA5LCA1MjA1LCAwLCA0MzMwNywgMCwgCi0gICAgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgMTE4ODQzLCA5MTI2LCA0MzUsIDAsIDEyMDE0LCAxMDM3NywgODA5MywgOTA3OSwgCi0gICAgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMTI4MTc4LCA1NzM4LCAKLSAgICA5ODMyMTMsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIAorICAgIDExODk3MywgMCwgMTIxMzQsIDAsIDAsIDExODg0MywgOTEyNiwgNDM1LCA5ODM2MjQsIDEyMDE0LCAxMDM3NywgODA5MywgCisgICAgOTA3OSwgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMTI4MTc4LCA1NzM4LCAKKyAgICA5ODMyMTUsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIAogICAgIDMxNDksIDUzNTksIDEyMDEzNCwgMCwgNzkxNCwgNTM1NywgOTIxNzAsIDEyODY1OSwgMjYyNCwgNTM2NCwgMCwgMTE0MzEsIAogICAgIDEyMDAzMCwgOTEwMSwgMTEwNTgsIDc4Mjg4LCAwLCA3ODI5MywgNDIyNzEsIDc4Mjg5LCA0MjkxNywgMTIwNzkzLCAwLCAKICAgICA2NTU2NiwgNjcxNywgMTA2MTksIDQzMzYwLCA3ODM4NSwgNzgzODQsIDExODMyLCA3ODM4MiwgNzgzODEsIDc4MzgwLCAKICAgICA3ODM3OSwgOTMxOSwgNzA5NywgMTE5MDU1LCA3NzkwNiwgMzIzMiwgNzM4MjQsIDc0NTgxLCAxMjA2MzIsIDAsIDAsIAogICAgIDQxODg5LCA5MjQ1MywgMCwgMTE2MSwgNDE4OTUsIDc0MTAzLCA5NzAxLCA4NjIyLCAwLCAwLCA3MzgxOSwgMTIwNTg4LCAKICAgICA1MDEyLCA3NzkxMiwgNDEzNjIsIDY5ODYyLCA3ODI5NiwgMTE5MjEsIDAsIDExNzY5LCAwLCA2ODYwOSwgNDEzNjQsIDAsIAotICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAwLCA5MTcsIDY4NDIyLCAxMTk5MTUsIDcxMzQsIAorICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAxMTYxMSwgOTE3LCA2ODQyMiwgMTE5OTE1LCA3MTM0LCAKICAgICA4MTk5LCA3ODM4OSwgMTE5OTE3LCA2NzcsIDExOTkxNiwgMCwgMTE5OTMyLCAxMjcxNjksIDAsIDAsIDAsIDMzNDksIAogICAgIDc0MTI1LCA3MDIyLCA4OTI3LCA0NzM5LCAwLCA1ODAyLCAwLCA4NjE1LCAwLCAwLCA0OTEsIDEyODgxOSwgMTAxOTAsIAogICAgIDEyMDY5OCwgNjU4MzcsIDEyODgyMCwgODQyNiwgMTEwOTIsIDk4OTEsIDAsIDQyNDk3LCA3MTEzLCA3NTg2LCA0MjMwNSwgCkBAIC0xOTMxMCwzMCArMTkzMzAsMzAgQEAKICAgICA1NTI1MiwgNzM5NzIsIDE0NDIsIDAsIDU4OTQsIDcwMDY5LCAwLCA0MTE3MSwgOTI1MTEsIDc0MzEzLCAwLCAxMzE2MiwgMCwgCiAgICAgMzMzNCwgMTk1MDEwLCAxMTg4MDMsIDc3ODgxLCA2NjAyMiwgMCwgMCwgMTY1MSwgMTI4NzcxLCA4ODYxLCAwLCAwLCAxMTQyLCAKICAgICAwLCA4MjcxLCAwLCA5ODMwNTgsIDEyNjY0NSwgMTI5MDMsIDAsIDQwMDIsIDQzNjI2LCAxMDQ0MiwgMTA2NzYsIDMzNDQsIDAsIAotICAgIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAwLCA3ODg1MywgMCwgNzg4NTQsIAorICAgIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAxOTQ2ODYsIDc4ODUzLCAwLCA3ODg1NCwgCiAgICAgMTIwMzYwLCAwLCAxMTc4NCwgMCwgNzgwMTIsIDQ3MDAsIDY2MzY2LCA3ODg1OCwgMTIwMzU5LCAxMTAxMiwgMCwgNzg4NTYsIAogICAgIDkyNDAwLCA3Nzg3OSwgNDk3MywgODc4NCwgNzc4NzcsIDc0ODA0LCA3Nzg3NCwgNzc4NjksIDc3ODcxLCA0MjQ0MCwgMCwgCiAgICAgNDMxMTgsIDAsIDQyMzY0LCA2Nzc0LCA2NzczLCA5MTc1NjAsIDEyMDM2OSwgMTAzNDYsIDEwNDEwLCA3ODg1OSwgOTI0MywgCiAgICAgMjQ2NCwgNzQyNjMsIDYxMDgsIDMzNzIsIDAsIDYyNDcsIDQzMTE3LCA3NDUyNiwgNzEyMSwgNzQxNjYsIDAsIDEyMDM1NSwgCiAgICAgOTI1MzcsIDAsIDAsIDE5NTAzNCwgMCwgMCwgMCwgNzAwODMsIDMzNTQsIDE5NTAzNywgNDE5MiwgOTI4OSwgMTE4OTk5LCAKICAgICA0MTE5MSwgMzg3NiwgMCwgNzAwNjcsIDEyMDY2MCwgNDM2OTYsIDQzMzgwLCAwLCA5ODMwOTEsIDAsIDAsIDExNjAzLCAKLSAgICA5ODM5NDUsIDAsIDY1ODksIDEyODU4OCwgMTk0Njc5LCAwLCAwLCA5ODM2OTEsIDAsIDAsIDQyNTcyLCAxMjgyNjQsIAorICAgIDk4Mzk1NCwgMCwgNjU4OSwgMTI4NTg4LCAxOTQ2NzksIDAsIDAsIDk4MzcwMCwgMCwgMCwgNDI1NzIsIDEyODI2NCwgCiAgICAgMTA2MzAsIDc0ODI3LCAxOTYzLCAxMTYyMiwgMTI3MDk4LCAxMTY1NCwgMCwgNzU1MCwgMTA2ODYsIDU5MDMsIDAsIDc4MDA5LCAKICAgICA0MTMyOSwgOTY2MiwgOTE3OTM3LCA2NDY5OCwgMzM2NiwgMTAzOTksIDAsIDU1NDIsIDExMDEzLCAxMjc5MjcsIDEyODMwMCwgCi0gICAgMCwgNzg2MjEsIDE5NDY3MiwgNjkyNSwgMCwgMCwgOTE3OTI5LCAwLCAxMTU2OCwgOTgzNjY0LCA0MzM2NywgNjQ1NzksIAorICAgIDAsIDc4NjIxLCAxOTQ2NzIsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgMTE1NjgsIDk4MzY3MywgNDMzNjcsIDY0NTc5LCAKICAgICA5MTc5MzAsIDc4NTIsIDAsIDAsIDY3NTQsIDYzMTIsIDAsIDY0NjcyLCA2NTI5NiwgMCwgMTE4OTU3LCAwLCA0MTYsIAogICAgIDEyMjk2LCA2ODQ1NywgNzM4MzQsIDY4MTc3LCAxMTA1MCwgMTA5ODQsIDkyMjA4LCAwLCAwLCA5MjE4MiwgMCwgOTgzNjA1LCAKLSAgICA5NTMyLCA2NjM1NSwgMCwgOTgzMjI4LCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDEyODI4MSwgMTk1MDMxLCAwLCAxOTUwMzAsIAorICAgIDk1MzIsIDY2MzU1LCAwLCA5ODMyMzQsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMTI4MjgxLCAxOTUwMzEsIDAsIDE5NTAzMCwgCiAgICAgMTk1MDU3LCAxMTQ0NSwgMCwgMjExMiwgMTk1MDU2LCAxMjg4MTQsIDEwMTg1LCAxMDIxLCAxMjgxMzAsIDk1MDcsIDEwMjEwLCAKICAgICA3NDU0NCwgODAyMywgMTIwMCwgMTIyNDMsIDc4MDAxLCA1MjgyLCA3ODAwMywgOTYyNCwgMTE1NDUsIDAsIDEyMDQ5MywgCiAgICAgMzM0MywgNDQyNCwgMTEwNDcsIDE4ODUsIDQzMjY4LCAzODk2LCA3ODQ0NCwgNjY0OTcsIDI5NDcsIDM5MiwgNzg5NCwgCiAgICAgNDM5MSwgNjgxMzksIDk4MzA2MiwgMTMwNTksIDc0ODE2LCA3Nzk5OCwgMzM4MSwgNzk0MiwgMCwgNjkyMTksIDAsIDY0NzU3LCAKICAgICAwLCAzOTEzLCAwLCAwLCA3ODIzNSwgNzA0NCwgMTI2NSwgMCwgNjMwOSwgNzA0NSwgNzE3NSwgNzA0NywgNzgyMzksIAotICAgIDExNzkxLCAwLCAwLCA4MjIxLCA3ODMwNywgNDE4NjQsIDAsIDAsIDAsIDAsIDE2NywgOTgzODk3LCA3ODMwMSwgOTgzNjQ0LCAKLSAgICA3NDIxMSwgNDE4OTcsIDY4NDc3LCAwLCA5MTc1ODMsIDk4MzYyNSwgOTQwNjUsIDI0OTMsIDAsIDExODgxMSwgMCwgMCwgCisgICAgMTE3OTEsIDAsIDAsIDgyMjEsIDc4MzA3LCA0MTg2NCwgMCwgMCwgMCwgMCwgMTY3LCA5ODM5MDYsIDc4MzAxLCA5ODM2NTMsIAorICAgIDc0MjExLCA0MTg5NywgNjg0NzcsIDAsIDkxNzU4MywgOTgzNjM0LCA5NDA2NSwgMjQ5MywgMCwgMTE4ODExLCAwLCAwLCAKICAgICA2NDM1NCwgMCwgODc3NywgMCwgNDA2LCA4ODg0LCAyMzg1LCAwLCA5MjQ1MCwgMCwgOTE3NTczLCA0MzAzMCwgNDIwMjcsIAogICAgIDEyMTE0LCAwLCA5MTc1NzksIDY0OTM2LCAxOTQ2OTUsIDAsIDEyMDYyOSwgMTA1NjEsIDAsIDgzNjUsIDEyMDUzOSwgCi0gICAgOTgzNzY1LCA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgNzQxMjEsIDAsIDkxNzU3NSwgNzgzNCwgNzQxNTksIDAsIAorICAgIDk4Mzc3NCwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAKICAgICA5MTc1NzQsIDEwMjk4LCA2NjI0LCA0OTA4LCA5MTc1OTYsIDE2MzksIDAsIDAsIDc0MTU3LCA2MzI3LCA2NzI0LCAwLCAKICAgICAxMjgwODYsIDkyNTY2LCA2OTkxMCwgNDgxNywgNzg0NDYsIDE5NDc1OSwgOTI1MzYsIDcwNDMsIDk2MDAsIDExMDIyLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCA3NTQ4LCA2NDc5NCwgNDIwNTAsIDEyMjkxLCA1NTI4OSwgMTk0NzYxLCAxMjM0MywgNjU3LCAKQEAgLTE5MzQzLDE0ICsxOTM2MywxNCBAQAogICAgIDQxNDA2LCA0MzI3MywgNzQxNjAsIDExOTk4MywgNzM5MzksIDkyNjM4LCAxMTk5ODQsIDExOTk3OSwgNDE0MDQsIDExNjUsIAogICAgIDExOTk4MCwgNDQ1MSwgMTMwODcsIDAsIDExMjg0LCAxMTk5ODcsIDcwMDk3LCA2NTE1NSwgNDMwMTQsIDU0MzksIDkzNjMsIAogICAgIDcwMDcwLCAzMzc1LCAxMjg4NjksIDU5MDAsIDkzOTkwLCA3ODg5LCAyNzIyLCA0MjI2MiwgMCwgMCwgMTI4Nzc0LCAwLCAKLSAgICAyMjgyLCAwLCAxMjc4MTAsIDExNDAxLCA5ODM4MTMsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgCi0gICAgMTI3ODg3LCAwLCAxMjczODEsIDQ4NjgsIDExOTk2NywgMTE5OTY2LCAxMTg3OTgsIDAsIDAsIDQzMTYxLCAwLCA5MjM2MCwgCi0gICAgMCwgNTE4MiwgMCwgMTIwNTQyLCAwLCAwLCA0MjI2LCAxMTkyNDMsIDEyMTM1LCA1NzMyLCA0NDY0LCAwLCA3MTMzMCwgOTc3LCAKKyAgICAyMjgyLCAwLCAxMjc4MTAsIDExNDAxLCA5ODM4MjIsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgCisgICAgMTI3ODg3LCAwLCAxMjczODEsIDQ4NjgsIDgyOTcsIDExOTk2NiwgMTE4Nzk4LCAwLCAwLCA0MzE2MSwgMCwgOTIzNjAsIDAsIAorICAgIDUxODIsIDAsIDEyMDU0MiwgMCwgMCwgNDIyNiwgMTE5MjQzLCAxMjEzNSwgNTczMiwgNDQ2NCwgMCwgNzEzMzAsIDk3NywgCiAgICAgNDQ1OCwgMCwgMCwgNjQ3NzAsIDc0ODM4LCAwLCAzNDQsIDAsIDE5NDc5MCwgMTM5NSwgNjQyNzksIDAsIDkyMjQwLCAwLCAKICAgICA3ODYsIDAsIDQzMTc0LCA2NDM0MCwgMCwgMTk0NzY3LCAxMjA3MjMsIDQzMDI2LCA3NjEyLCAxMDEzMiwgNjQ0MTMsIAogICAgIDY1MDI1LCAwLCAwLCAwLCA5Mzk1NiwgMCwgNjg0NDQsIDAsIDkyNDM3LCAwLCAxMTkxNjAsIDEwMjA0LCA5MjY1NiwgMCwgCi0gICAgMTI3ODA5LCA5ODM2MzUsIDEzOTksIDk4MzY0MywgNjUyMTcsIDAsIDg4NTIsIDEyODU3MSwgMjQxLCAxMjg3ODAsIDQ5MDcsIAotICAgIDAsIDk4MzYzMCwgNzkzMiwgOTcyNywgMTI4ODczLCA3NDI1NSwgODc0OCwgMCwgMCwgOTgzNjM0LCAwLCA0Mjc4MCwgMCwgMCwgCisgICAgMTI3ODA5LCA5ODM2NDQsIDEzOTksIDk4MzY1MiwgNjUyMTcsIDAsIDg4NTIsIDEyODU3MSwgMjQxLCAxMjg3ODAsIDQ5MDcsIAorICAgIDAsIDk4MzYzOSwgNzkzMiwgOTcyNywgMTI4ODczLCA3NDI1NSwgODc0OCwgMCwgMCwgOTgzNjQzLCAwLCA0Mjc4MCwgMCwgMCwgCiAgICAgMCwgNDIxNywgMCwgODY1MCwgMCwgMCwgMCwgNjk5MDAsIDExODg3MiwgNDMwOTksIDM5NjUsIDExOTExOSwgNjcxOSwgMCwgCiAgICAgMTMzMDAsIDc4NDM5LCA5Mzk3MSwgNDMwNTcsIDY2NTg4LCAxMTg5OTEsIDAsIDAsIDczODE1LCA0NDIwLCAwLCA2NDEwLCAKICAgICA3NzYwLCAwLCAwLCAwLCAwLCAwLCA3Mjk0LCAwLCAwLCAwLCA5MDY2LCAwLCAxMTk5MywgNDMxODgsIDI2MjYsIDc3NjIsIDAsIApAQCAtMTkzNTgsNDUgKzE5Mzc4LDQ1IEBACiAgICAgNjY0NTQsIDk1OTIsIDQyODUxLCAxMjY5OTMsIDE1NDIsIDkyMzAzLCAwLCAwLCAwLCAwLCA3NDMxMSwgNzg0OTcsIDAsIAogICAgIDEwMTgxLCAwLCA0MzYyNCwgMCwgNzc3OSwgMCwgMTAxOTUsIDk0NzksIDYwMjksIDAsIDkyMjY4LCA5Njg5LCAwLCA2NTU3NywgCiAgICAgODk5MywgNjYzNTgsIDAsIDQyMzc4LCAzMzY4LCA2MDYsIDEyNzAzMCwgNzY5NywgNjkyMzcsIDY5Nzg3LCAyMDMwLCAwLCAKLSAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgOTgzMzMxLCA5ODMzMzAsIDk4MzMyOSwgOTgzMzI4LCAyNzM1LCAKKyAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgOTgzMzM5LCA5ODMzMzgsIDk4MzMzNywgOTgzMzM2LCAyNzM1LCAKICAgICA0MjgzMSwgNzc5MzUsIDEyNzEyMCwgNzQ4NjYsIDg4ODEsIDExOTA0NywgMCwgMCwgNzM5NDYsIDAsIDAsIDAsIDY4MTQwLCAKLSAgICA5ODM5MTksIDk1NzYsIDEyODg3MiwgMzM0NywgNDE2MCwgNTE1NCwgNTUyODgsIDM3OTQsIDY2NTY0LCA4NTMwLCAxMjcwNjMsIAotICAgIDc3MDksIDQxMTEyLCA5ODMxMzIsIDY2NTYwLCA0MjA0MSwgNDU3MiwgMTI4NzYsIDY2NTYxLCA5ODM3NDksIDY3NTgsIAotICAgIDk4MzkxNywgMTYxNSwgNTg1NSwgODA5LCAwLCA5MjI4MywgMTI4MzE2LCAxMjgwMDQsIDU3OTksIDk4MzMyMCwgNzAxMDAsIAotICAgIDk4MzMxOCwgNzI2MCwgOTgzMzE2LCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCA3ODgxOSwgNjQzODYsIDY1MjU3LCAwLCA2ODYxNiwgCisgICAgOTgzOTI4LCA5NTc2LCAxMjg4NzIsIDMzNDcsIDQxNjAsIDUxNTQsIDU1Mjg4LCAzNzk0LCA2NjU2NCwgODUzMCwgMTI3MDYzLCAKKyAgICA3NzA5LCA0MTExMiwgOTgzMTMyLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDEyODc2LCA2NjU2MSwgOTgzNzU4LCA2NzU4LCAKKyAgICA5ODM5MjYsIDE2MTUsIDU4NTUsIDgwOSwgMCwgOTIyODMsIDEyODMxNiwgMTI4MDA0LCA1Nzk5LCA5ODMzMjgsIDcwMTAwLCAKKyAgICA5ODMzMjYsIDcyNjAsIDk4MzMyNCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgNzg4MTksIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIAogICAgIDEyMDYwNywgOTM0NywgMTI4MDY3LCA2NTMyLCAwLCAwLCAwLCAxMjcwNjAsIDY1ODI4LCAwLCAyODMsIDY4NjY1LCA3ODgxMywgCi0gICAgNTMyLCA3ODY2MywgMCwgOTgzNzg3LCAxMjA2MDksIDAsIDMzNzAsIDAsIDExMzYxLCA1NDQzLCA3ODc3OCwgODE1MywgCi0gICAgNzM3NjcsIDAsIDEwNzQxLCAwLCAyMjk4LCAwLCA5ODM5MDgsIDY1NDk1LCA2NDcwNiwgOTgzMzEwLCA0MzM0NCwgOTgzMzA4LCAKLSAgICA3MTQ0LCA5NDY2LCA3ODg2NiwgOTgyNCwgOTgzMzAzLCA5ODMzMDIsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIAorICAgIDUzMiwgNzg2NjMsIDAsIDk4Mzc5NiwgMTIwNjA5LCAwLCAzMzcwLCAwLCAxMTM2MSwgNTQ0MywgNzg3NzgsIDgxNTMsIAorICAgIDczNzY3LCAwLCAxMDc0MSwgMCwgMjI5OCwgMCwgOTgzOTE3LCA2NTQ5NSwgNjQ3MDYsIDk4MzMxOCwgNDMzNDQsIDk4MzMxNiwgCisgICAgNzE0NCwgOTQ2NiwgNzg4NjYsIDk4MjQsIDk4MzMxMSwgOTgzMzEwLCAwLCAwLCA5MTUsIDQzNDI1LCAwLCAwLCAwLCAwLCAKICAgICAxMjcxNzgsIDQzMjY0LCA3MDA5NiwgMCwgMCwgNDMwMzgsIDc4ODY0LCA2NzMwLCA3ODg2MiwgNjgxNjEsIDY0NTUwLCAKICAgICA1MTg2LCA3MzYwLCAxMjc4MzcsIDAsIDEyMTA4LCAwLCA2NTEyNCwgNDMxMjcsIDY2MDQzLCAwLCA2MzI2LCA0MzEwNywgCi0gICAgNzc4MjYsIDAsIDQyNTYyLCAwLCAxMjg4MjEsIDAsIDEyODUyMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgOTgzMjk3LCAKLSAgICAxMTcxOCwgOTgzMjk1LCAxMjg4OSwgOTI2NTcsIDEyNzEzNywgMCwgMCwgMCwgNTUyNDUsIDAsIDE2MzAsIDEyODIzMiwgCisgICAgNzc4MjYsIDAsIDQyNTYyLCAwLCAxMjg4MjEsIDAsIDEyODUyMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgOTgzMzA1LCAKKyAgICAxMTcxOCwgOTgzMzAzLCAxMjg4OSwgOTI2NTcsIDEyNzEzNywgMCwgMCwgMCwgNTUyNDUsIDAsIDE2MzAsIDEyODIzMiwgCiAgICAgNjU0ODMsIDAsIDEyNTY1LCAwLCA2NTQ3NiwgMTIwMDEzLCAwLCAxMTk1NTQsIDkyODMsIDc3MDAsIDkxNzUzNywgOTY5MCwgCiAgICAgNjU0OTksIDAsIDY0NTkzLCA1MTIsIDMzNzYsIDY4MjEwLCAwLCAxMjg2NzcsIDc3ODkyLCA2MzIsIDEyOTQwLCA3Nzg5MSwgCi0gICAgNDI1MjksIDc4NTg3LCAwLCA1OTU3LCAxMTA1OTMsIDg5MjYsIDk4MzI5MSwgOTgzMjkwLCAxMjgyNzMsIDEwNzQ1LCAKKyAgICA0MjUyOSwgNzg1ODcsIDAsIDU5NTcsIDExMDU5MywgODkyNiwgOTgzMjk5LCA5ODMyOTgsIDEyODI3MywgMTA3NDUsIAogICAgIDEwMTc0LCA3Mzc5LCA2NDU4MSwgNTM4NiwgMTIwNjg2LCAxMTcxMywgMTA2MzMsIDY5NzA4LCA1MDU2LCAwLCAwLCAwLCAKICAgICAxMjA3NzMsIDAsIDk4MTIsIDAsIDQ0NjAsIDAsIDAsIDcxMzA3LCAxMjgwMzgsIDAsIDAsIDEyNzE3NCwgNjQyNzgsIAogICAgIDkyMzcwLCA0MzQ2NiwgMCwgMCwgNjQzODksIDI5NTMsIDczODc5LCAxODAxLCAxMjgzNSwgMTE5MDI5LCAwLCA3MzgyMywgMCwgCi0gICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyNzgsIDk4MzI3NywgCi0gICAgMTI4NTcwLCAxMjEwNiwgOTgzMjc0LCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCisgICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyODYsIDk4MzI4NSwgCisgICAgMTI4NTcwLCAxMjEwNiwgOTgzMjgyLCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCiAgICAgOTUyMiwgNzQwNzksIDc4MjY2LCA2NjYwNCwgMCwgMzM4NCwgNjkyMjcsIDEwNzAyLCA4MzAsIDc3OTAyLCA3Nzg5OSwgCiAgICAgNzc5MDAsIDg0NTEsIDAsIDAsIDAsIDY5NzM5LCAwLCAwLCAwLCAwLCAyOTA4LCAwLCA0MzM4NiwgNjQ5MDIsIDQyNDMsIDAsIAotICAgIDEyMjM5LCAwLCAwLCA0NDQxLCAwLCA5ODMyNzEsIDczOTQwLCA2NDM1MiwgMTI3NTEzLCA5ODMyNjcsIDQxMSwgOTgzMjY1LCAKLSAgICA5MTk5LCA5ODMyNjMsIDQwNTYsIDExODk5MiwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCA5ODM5MjgsIDU0MjgsIDE5NDc0MywgCisgICAgMTIyMzksIDAsIDAsIDQ0NDEsIDAsIDk4MzI3OSwgNzM5NDAsIDY0MzUyLCAxMjc1MTMsIDk4MzI3NSwgNDExLCA5ODMyNzMsIAorICAgIDkxOTksIDk4MzI3MSwgNDA1NiwgMTE4OTkyLCA0MTg5MCwgMCwgMjczMCwgNDE2MDQsIDk4MzkzNywgNTQyOCwgMTk0NzQzLCAKICAgICAzMzY0LCA0MjI2NSwgNjQ0MzcsIDEyNzkzNSwgMTE4ODE2LCAxOTQ3NDIsIDk2ODQsIDIxNiwgMCwgMTQwMSwgMTI4MDUzLCAKICAgICA0NDAxMiwgMCwgMCwgOTI1ODUsIDkxNTgsIDc3ODQyLCA2OTkwNSwgNTc2OCwgMCwgMCwgMCwgNDg0LCAxOTQ3MzksIDAsIDAsIAotICAgIDY1ODk1LCAwLCAwLCAzMzM4LCA3MzkzNSwgNTcyLCA3MDQxLCAyNzM2LCA2NzYwNSwgOTgzMjU1LCA5Mzk2MiwgMjc5NCwgCisgICAgNjU4OTUsIDAsIDAsIDMzMzgsIDczOTM1LCA1NzIsIDcwNDEsIDI3MzYsIDY3NjA1LCA5ODMyNjMsIDkzOTYyLCAyNzk0LCAKICAgICA4ODA3LCA2NDQ5MSwgNzc4NDcsIDU0MzgsIDUyMjIsIDUzODEsIDQzMTE0LCAwLCA1MTkzLCA1MTI1LCA1NDU2LCA1NTA5LCAKICAgICA3Nzg0NiwgMTk0NzQ3LCA5NTM0LCAwLCAwLCAwLCAzNDMwLCAwLCAwLCA3ODcxNywgMCwgOTgxLCAwLCA0MzMwLCA3MzkyOSwgCiAgICAgMTIwNTM2LCAxODI0LCAxMDkwOCwgMCwgNzAzNCwgNDE2ODMsIDY0NjE3LCAwLCA3Mzc1NCwgMzk1NywgNjQzNTgsIDY0NTQ3LCAKLSAgICAxMjgyNTksIDY3NCwgNjM5OTEsIDk4MzI0MywgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgMzc1OSwgMTE0MTEsIAorICAgIDEyODI1OSwgNjc0LCA2Mzk5MSwgOTgzMjQ5LCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAzNzU5LCAxMTQxMSwgCiAgICAgODM2NCwgNTEyMywgMTE5NjI4LCA1MjgxLCA1NDY5LCA1MTIxLCAxMTkyNDUsIDExODk5MywgMCwgNTEzMCwgMCwgMCwgCiAgICAgNzc5OTAsIDAsIDEyMDcyNiwgMTIyMSwgMjczMywgMTE3NDYsIDc3OTkxLCA1MjE2LCAwLCAwLCAwLCAwLCAzNDY4LCA3MDMzLCAKICAgICA5MjMwLCA1OTM5LCAxOTUwNTIsIDAsIDAsIDEyMDY3NywgNjg0MDAsIDcyNzgsIDEwMzIxLCAxMDI4OSwgNjQ2MTMsIAotICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDA1LCAwLCAxMTczOSwgOTgzNDE4LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAorICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDEzLCAwLCAxMTczOSwgOTgzNDI2LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAogICAgIDEyNDQ4LCA3NTc2LCAxMDQwMSwgMTAzMzcsIDczODUyLCAwLCAxMzA1NywgMCwgMTI2OTc2LCAwLCAxMDAwOSwgMCwgCi0gICAgNDE3MDMsIDk4MzYyOSwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIDEyNzkwOCwgMCwgMCwgMCwgOTI0NTcsIDAsIAorICAgIDQxNzAzLCA5ODM2MzgsIDEyMTY1LCAwLCAwLCA5ODg1LCAwLCA4MDc3LCAwLCAxMjc5MDgsIDAsIDAsIDAsIDkyNDU3LCAwLCAKICAgICA0MjIwLCAxMDcyNSwgMTA0MzMsIDAsIDY4Mzk1LCA0OTg3LCA2NDUxOSwgMCwgMTI4MzQwLCAwLCAwLCAwLCAxMDk3MCwgCiAgICAgMTE3MzMsIDAsIDEyMDc5MiwgMCwgMTk5NDQsIDAsIDkwMDksIDg1NTEsIDkyMzQ1LCAxMTQ2OCwgNjQ2MzYsIDc1NzUsIDAsIAogICAgIDI3MjQsIDAsIDAsIDEyMzEzLCAxMTA1OTIsIDUxNSwgMTE5OTQ3LCA0Mjc5MSwgNjM5ODcsIDc4Mjg2LCAxMTk5NDMsIApAQCAtMTk0MDYsNzMgKzE5NDI2LDczIEBACiAgICAgMCwgNDQ3NywgMTE4OTY0LCA4MTQsIDQyMDY2LCA2NjE4MywgNjYyMDQsIDQzNzg2LCAxMTk5NjEsIDY2MTk4LCA0MTg4MCwgCiAgICAgNjYxODgsIDExNjIzLCA3ODE0OCwgMTE5NTUsIDY2MTkwLCA2NjE5MSwgNDExMTEsIDY2MTg5LCA3Mzc4OCwgNzc4OCwgCiAgICAgNDg0NywgMCwgMTI3NzU5LCAwLCAwLCAwLCAxNTgxLCA2NTM1LCA3ODE2MSwgMTI5NTQsIDQzMCwgNzgxNjAsIDU1MjU5LCAKLSAgICA3ODE1OCwgMTI4MDM2LCA1Mjc4LCA0OTQ1LCA0Mjg4MywgNDk1MCwgOTgzNDMwLCA2ODYyNSwgOTgzNDI4LCA3MjY5LCAwLCAKLSAgICA1OTY0LCAxMjkwOCwgOTgzNTU1LCAwLCA3NDc2NCwgNzQ0NzcsIDExOTE0NiwgMTk0OTM2LCA0OTQ5LCA5ODM0MjEsIDQ0MywgCi0gICAgOTgzNDE5LCA0OTQ0LCA1NDY3LCAxMTk2MDMsIDAsIDY1MTM3LCA2MDQ0LCA2NTM5MiwgMCwgNDIxMywgMCwgNDEzMDMsIDAsIAotICAgIDE5NDkzMSwgMTE5OTYyLCA0MTMwNiwgNzM5ODQsIDI2OTgsIDEyNzE1OSwgMCwgMTIwNzIsIDMxOTMsIDAsIDQxMzA0LCAKLSAgICA4MjQsIDEyODY3NiwgMTIwOTEsIDc4ODkzLCA3ODg5NCwgMTE5ODE2LCA0NjczLCA2NDgwNCwgNDY3OCwgMTE5ODIwLCAKLSAgICAxMTk4MTksIDY1MDU5LCAwLCA2NzM5LCAwLCA1NDgxLCAzNDkwLCAxMTk5LCAxMTk4MTEsIDgzNTYsIDY5OTQ3LCAxMTk4MzIsIAotICAgIDQ2NzcsIDEyNjg4LCAzMTAyLCAwLCA0NjcyLCA3ODE3MywgNzgxNzUsIDU1MzEsIDY4MzY3LCA0MjU3NSwgNzgxNzAsIAotICAgIDc4MTY2LCA0Njc0LCA0NTQ4LCA0NDAwNSwgMTE5OTQ5LCA2ODY1OCwgMTE5OTQ2LCA4MDI1LCA2ODYzMCwgMTI3MDI0LCAKLSAgICAxODU1LCA5ODM0MDQsIDY4NjY5LCA5ODM0MDIsIDkyNDQ1LCAxMjc1NTQsIDAsIDEyNzMzOSwgMTE5NjUyLCAyNzQ1LCAKLSAgICAxMTc5NywgOTgzNDEwLCAxMjgxNTksIDkyMDIsIDQ2NTQsIDk4MzQwNiwgOTgzNDA4LCA2ODYzOCwgNzM5OTMsIDEwNTI1LCAKLSAgICA0NjQ5LCA2NTIwOSwgOTgzNDA5LCAwLCA0NjQ4LCA0MzA4MCwgOTgzMzk4LCA5ODMzOTksIDk4MzM5NiwgNjI0NiwgNjQ5NTAsIAotICAgIDc4MjgsIDQ2NTAsIDY3NzcsIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDc4MDA1LCA5MjM4NCwgNDMxODcsIDg2NjksIAotICAgIDk4MzQwNywgNjgyMSwgNjUwOTMsIDAsIDc4ODgxLCAyNzE2LCAwLCA5ODMwNjAsIDk4MzQxMSwgMCwgNjgzNjksIDEyMDA1NCwgCi0gICAgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCA3ODAyNywgNzgwMjYsIDc5OTIsIDAsIDAsIDQ2NjIsIDc4MDMzLCA3ODAzMiwgCi0gICAgOTE0OSwgOTE0NiwgNTk5LCAyMDgxLCA3ODAzMSwgNzgwMzAsIDE5NDk2MiwgNDY1NiwgMTAxMzAsIDY4NDUwLCA3ODExLCAKLSAgICA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCA1NzEzLCA1ODE0LCA0NjYxLCA0MjQzNCwgOTgzNDAzLCAKLSAgICAwLCAwLCA2NDkwNCwgOTAyNiwgMTA4MzMsIDc0ODY0LCA3NTQ3LCA0ODY3LCAwLCAxMDAwOCwgMTAyMjIsIDMwNTQsIAotICAgIDE5NDk1NiwgOTc0NCwgNzg4NjAsIDc2MDUsIDQ2MjIsIDExOTY1NiwgOTgzMzg3LCA5NDA3MCwgOTgzMzg1LCA5ODMzODYsIAotICAgIDk4MzM4MywgOTA0NSwgNzg4ODgsIDQyMjUsIDE5OTI2LCA3ODg4NywgMTI4ODAsIDY1MzA3LCA0NjE3LCA3ODg4MywgCi0gICAgOTgzMzc4LCA0MTczMiwgNDYxNiwgMTA1MTgsIDEwNDIzLCAxMDM1OSwgOTgzMzcyLCA1OTU4LCAwLCA5ODM0MjUsIDQyMTUsIAotICAgIDk3ODksIDkxNzk0MSwgNDMyMSwgNDYyMSwgOTgzMzgxLCA0MTMxMywgNTIyLCA1MzY4LCAwLCA2NTgwMywgMCwgNTM2NiwgCi0gICAgMTIyMDEsIDUzNzIsIDAsIDk4MzQwMSwgMCwgNzcyMCwgNzM5MCwgMjY5NiwgOTgzMzkyLCAwLCA0NjM4LCA5ODMzOTcsIAotICAgIDE3OTAsIDc4MjQyLCA1OTY1LCA2NDM2MywgNjY1NjksIDY4NjQ2LCAxMjc4MzMsIDUzNzYsIDE4MzUsIDUzMzUsIDE5NDk2NiwgCi0gICAgMTI4MDg5LCA0NjMzLCAwLCA2ODExOSwgMTE4MCwgNDYzMiwgMTI4MDkzLCA1Mzg3LCA1MzMzLCAwLCAwLCA0MjA5NCwgCi0gICAgNTMzMSwgNDYzNCwgMTE5MjgsIDk4MzU5NCwgNTMzOCwgNDYzNywgMTI4MTcwLCA1OTcxLCA0MjQxNCwgMCwgMTI2OCwgCi0gICAgNjUwOTcsIDQyMzYxLCAwLCAwLCA3Mzg1MywgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCA0NzU4LCAKLSAgICA5ODMzNjYsIDE2MDgsIDI3MzgsIDAsIDEwNDU1LCA0NzUzLCA3NDAyNiwgMTEzNDQsIDQyMjIsIDYyNDAsIDUyMzEsIAotICAgIDc0Mzg0LCA5ODMzNzAsIDY4Mzc3LCA2MjQ4LCA5ODMzNTQsIDk4MzM1NSwgOTgzMzUyLCA0MjMxOCwgOTI1ODIsIDUyMjksIAorICAgIDc4MTU4LCAxMjgwMzYsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCA5ODM0MzgsIDY4NjI1LCA5ODM0MzYsIDcyNjksIDAsIAorICAgIDU5NjQsIDEyOTA4LCA5ODM1NTUsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDk4MzQyOSwgNDQzLCAKKyAgICA5ODM0MjcsIDQ5NDQsIDU0NjcsIDExOTYwMywgOTgzMjU0LCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIAorICAgIDQxMzAzLCAwLCAxOTQ5MzEsIDExOTk2MiwgNDEzMDYsIDczOTg0LCAyNjk4LCAxMjcxNTksIDAsIDEyMDcyLCAzMTkzLCAwLCAKKyAgICA0MTMwNCwgODI0LCAxMjg2NzYsIDEyMDkxLCA3ODg5MywgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIAorICAgIDExOTgyMCwgMTE5ODE5LCA2NTA1OSwgMCwgNjczOSwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCA2OTk0NywgCisgICAgMTE5ODMyLCA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgNDY3MiwgNzgxNzMsIDc4MTc1LCA1NTMxLCA2ODM2NywgNDI1NzUsIAorICAgIDc4MTcwLCA3ODE2NiwgNDY3NCwgNDU0OCwgNDQwMDUsIDExOTk0OSwgNjg2NTgsIDExOTk0NiwgODAyNSwgNjg2MzAsIAorICAgIDEyNzAyNCwgMTg1NSwgOTgzNDEyLCA2ODY2OSwgOTgzNDEwLCA5MjQ0NSwgMTI3NTU0LCAwLCAxMjczMzksIDExOTY1MiwgCisgICAgMjc0NSwgMTE3OTcsIDk4MzQxOCwgMTI4MTU5LCA5MjAyLCA0NjU0LCA5ODM0MTQsIDk4MzQxNiwgNjg2MzgsIDczOTkzLCAKKyAgICAxMDUyNSwgNDY0OSwgNjUyMDksIDk4MzQxNywgMCwgNDY0OCwgNDMwODAsIDk4MzQwNiwgOTgzNDA3LCA5ODM0MDQsIDYyNDYsIAorICAgIDY0OTUwLCA3ODI4LCA0NjUwLCA2Nzc3LCA2Nzc2LCA2Nzc1LCA0NjUzLCA3ODIyLCA3ODAwNSwgOTIzODQsIDQzMTg3LCAKKyAgICA4NjY5LCA5ODM0MTUsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgMjcxNiwgMCwgOTgzMDYwLCA5ODM0MTksIDAsIDY4MzY5LCAKKyAgICAxMjAwNTQsIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgNzgwMjcsIDc4MDI2LCA3OTkyLCAwLCAwLCA0NjYyLCA3ODAzMywgCisgICAgNzgwMzIsIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIDQ2NTYsIDEwMTMwLCA2ODQ1MCwgCisgICAgNzgxMSwgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgNTgxNCwgNDY2MSwgNDI0MzQsIAorICAgIDk4MzQxMSwgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgMTAwMDgsIDEwMjIyLCAKKyAgICAzMDU0LCAxOTQ5NTYsIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDk4MzM5NSwgOTQwNzAsIDk4MzM5MywgCisgICAgOTgzMzk0LCA5ODMzOTEsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgCisgICAgNzg4ODMsIDk4MzM4NiwgNDE3MzIsIDQ2MTYsIDEwNTE4LCAxMDQyMywgMTAzNTksIDk4MzM4MCwgNTk1OCwgMCwgOTgzNDMzLCAKKyAgICA0MjE1LCA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDk4MzM4OSwgNDEzMTMsIDUyMiwgNTM2OCwgMCwgNjU4MDMsIDAsIAorICAgIDUzNjYsIDEyMjAxLCA1MzcyLCAwLCA5ODM0MDksIDAsIDc3MjAsIDczOTAsIDI2OTYsIDk4MzQwMCwgMCwgNDYzOCwgCisgICAgOTgzNDA1LCAxNzkwLCA3ODI0MiwgNTk2NSwgNjQzNjMsIDY2NTY5LCA2ODY0NiwgMTI3ODMzLCA1Mzc2LCAxODM1LCA1MzM1LCAKKyAgICAxOTQ5NjYsIDEyODA4OSwgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDEyODA5MywgNTM4NywgNTMzMywgMCwgMCwgCisgICAgNDIwOTQsIDUzMzEsIDQ2MzQsIDExOTI4LCA5ODM1OTQsIDUzMzgsIDQ2MzcsIDEyODE3MCwgNTk3MSwgNDI0MTQsIDAsIAorICAgIDEyNjgsIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgCisgICAgNDc1OCwgOTgzMzc0LCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCAKKyAgICA3NDM4NCwgOTgzMzc4LCA2ODM3NywgNjI0OCwgOTgzMzYyLCA5ODMzNjMsIDk4MzM2MCwgNDIzMTgsIDkyNTgyLCA1MjI5LCAKICAgICA0NzU3LCAwLCAwLCAyNzI4LCA0NzUyLCA2NDU2MywgNjUyMzUsIDUyMzQsIDAsIDEyODE0NSwgMCwgMTA3MTMsIDcxNjYsIDAsIAogICAgIDI2MjIsIDc0NjAsIDEyNzMwMiwgMCwgMCwgODk1NCwgNzQ3NjAsIDY1MTg5LCAyNjMyLCA0MjYxNywgMTAxMDgsIDEwMTEsIAogICAgIDU1NzQsIDE4NTMsIDI3MDksIDY1MTM5LCA1NTc3LCAwLCAwLCAxMTg4NzEsIDY4NjQxLCA4OTY1LCA3NjM1LCA0MjE3NywgCi0gICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQxMiwgCi0gICAgOTgzODYzLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0NzIsIDk4MzQxNSwgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODU2LCAKLSAgICA3NDAyMiwgOTgzNDE0LCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDgxLCA1NzIxLCA5ODMzOTMsIDU1MTksIDg2MzIsIAotICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNDQsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAotICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM0NywgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAotICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQxLCA5ODMzMzgsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCisgICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQyMCwgCisgICAgOTgzODcyLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0ODAsIDk4MzQyMywgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODY1LCAKKyAgICA3NDAyMiwgOTgzNDIyLCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDg5LCA1NzIxLCA5ODM0MDEsIDU1MTksIDg2MzIsIAorICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNTIsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAorICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM1NSwgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAorICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQ5LCA5ODMzNDYsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCiAgICAgNDExMjQsIDUxOTAsIDY3NjI4LCAwLCA2ODE0NSwgNzA4NiwgMCwgNjc5OTgsIDY3NjIwLCAwLCAyNzM0LCAxMTA3NCwgMCwgCiAgICAgNjc2MjcsIDQzNTkzLCAwLCA2NzYyNSwgNTk2MCwgMCwgODk5MiwgNDI1OTMsIDEyODI2MCwgMTc4MiwgNjc2MjIsIDY4MTE0LCAKICAgICAxMTk5MzksIDAsIDY4MTgwLCA1NTAxLCAxMTk5NTIsIDQyNTA4LCA3NDQyLCA0MzY2NSwgMzU5LCA0MTI1MywgNjgzOTIsIAogICAgIDYyMzksIDExOTk1NiwgNDEyNTYsIDAsIDY4MTM0LCAwLCA3NDIwOSwgOTE3NTUwLCA5MzQ2LCA2OTY2MCwgNDEyNTQsIAogICAgIDEyODA0NywgNDMyOTEsIDM3NjcsIDU3MzcsIDAsIDQ4NjUsIDAsIDU3NDAsIDkxNzk5NywgNTczNiwgNDM2OCwgNjQ3MjQsIAotICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4MzgzMSwgNDg2OSwgMTIwNTYzLCAwLCAKLSAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDU1LCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAorICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4Mzg0MCwgNDg2OSwgMTIwNTYzLCAwLCAKKyAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDYzLCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAogICAgIDc4MTc2LCA2ODY2NywgNjgzODIsIDY4Njc2LCAxMjc5MjUsIDEwMTIyLCA0ODY0LCA2NjU2OCwgNDE0NCwgNzkzNywgMCwgCiAgICAgNjI0NSwgNjg2NTIsIDI3MzIsIDQyNzM0LCA3NDUsIDAsIDE5NTA5NywgOTIxOTUsIDQ3NzcsIDc4MjEsIDAsIDY4NjMxLCAKLSAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0NzgsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKKyAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0ODYsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKICAgICA2NDQwNywgMCwgMTI4MzIzLCA4NTc3LCAxMjg1NjIsIDY4MTk2LCA0MzI4NSwgMTAyMTYsIDQ3ODIsIDAsIDAsIDEyMDc1NywgCiAgICAgNjg2MTgsIDEyMzI1LCA0MzA1NiwgODcxNywgMCwgMCwgNDc3NiwgNzM4MTgsIDExNDkyLCA4NzAwLCAwLCAxMzE3NiwgCiAgICAgNjgzNjMsIDEwNDI2LCAwLCA5MTc1OTksIDEwMzYyLCAxOTQ3MDYsIDE3MTUsIDQ4NDksIDgyNDIsIDk1NjEsIDczOTIyLCAKICAgICA0MzI3OCwgNDI2MzUsIDAsIDAsIDU5NjMsIDkxNzkyNiwgMCwgMCwgNDg1MCwgMCwgMTYwNywgNDY2LCA0ODUzLCAxMTg5OTUsIAotICAgIDQ4NTQsIDEyNzkxOCwgNTE2NCwgOTgzODYxLCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgCisgICAgNDg1NCwgMTI3OTE4LCA1MTY0LCA5ODM4NzAsIDEzNTAsIDUxMjQsIDY0NDIwLCAxOTkzLCA1MzYyLCA4NDcxLCAyNzA4LCAKICAgICA5MjQ3MSwgMTI0NDUsIDM3ODUsIDIzNCwgMzE5OSwgMCwgNDEyNjgsIDQ4NDgsIDI1MzAsIDkxNzkwOSwgMjA2OCwgMTk2NCwgCiAgICAgMCwgNzM3NjIsIDEwNDU4LCAwLCA4NTc2LCA3ODU0MywgMCwgMjcwNCwgNDc5NCwgMCwgNjgyMTEsIDgzMjIsIDQ3OTcsIAotICAgIDU3NTMsIDAsIDI2OTQsIDQ3OTIsIDAsIDI0MzksIDY1MTA0LCA2OTgwNCwgOTgzNDE2LCAzMDMsIDk4MzEwMSwgOTI2MjIsIAotICAgIDk4MzQxNywgMjQzNywgMCwgNDIyMSwgNDg0NCwgOTIyMTYsIDAsIDAsIDAsIDcwMDQyLCAwLCA0MzI5MiwgMCwgMjQ0MSwgCisgICAgNTc1MywgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgNjUxMDQsIDY5ODA0LCA5ODM0MjQsIDMwMywgOTgzMTAxLCA5MjYyMiwgCisgICAgOTgzNDI1LCAyNDM3LCAwLCA0MjIxLCA0ODQ0LCA5MjIxNiwgMCwgMCwgMCwgNzAwNDIsIDAsIDQzMjkyLCAwLCAyNDQxLCAKICAgICAxMDczOSwgNjUwOTAsIDAsIDExOTMyNywgMTI2NTQxLCAyNDUxLCAyNzE0LCAxMTkzMjYsIDAsIDQzMzc5LCA0OTM3LCAKICAgICA0MzM3NiwgNzUzLCA1ODQ5LCAxMDU5NywgNDMwODksIDExNzIyLCA5MjQ4LCA5MjU1NSwgNDI4NzksIDExNzI1LCAwLCAwLCAKICAgICAyNzI2LCAzMTA3LCA3Mzk1OCwgNDk0MSwgNjQ5MzcsIDExOTIzMywgOTE0MCwgMTQwOCwgNTI2MSwgNDYwNywgMCwgMTgxLCAKLSAgICA5ODM0MjIsIDQ5NDIsIDk1MzksIDQ5MzgsIDAsIDY1MjAxLCA1MjU5LCA5MzY5LCA2NDE4NSwgNDE0MiwgNTI1NywgCisgICAgOTgzNDMwLCA0OTQyLCA5NTM5LCA0OTM4LCAwLCA2NTIwMSwgNTI1OSwgOTM2OSwgNjQxODUsIDQxNDIsIDUyNTcsIAogICAgIDk4MzYwMSwgMCwgNDk2NCwgNTI2NCwgNjQxNzgsIDY0MTc3LCAxMjk3OSwgNDE0MTEsIDY0MTgyLCA2NDE4MSwgNjQxODAsIAogICAgIDY0MTc5LCA5NDgyLCA0ODczLCA0MTIzMSwgMTgyMiwgNDI1MjYsIDEyODU4MSwgMTI3NTgsIDM4NjUsIDAsIDAsIDEwNTAwLCAKICAgICAwLCAxMTkwMjQsIDc4MDI4LCA5MjQwOCwgOTgzMCwgNDM2NDIsIDM4OSwgMTA4OTMsIDc1MjEsIDEyNzg3OSwgNDg3MiwgCiAgICAgNTQ2MywgMCwgMzEyNSwgOTU2NywgMCwgNDg3OCwgNTQ1OSwgNDYwNCwgOTE3OTMxLCA5NTU3LCA1NDY1LCA2ODYxNywgMCwgCi0gICAgMTE0OTQsIDEyNjQ5MiwgOTU2MywgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDk4MzQzMSwgNzg3MTQsIDY0MTkxLCAKKyAgICAxMTQ5NCwgMTI2NDkyLCA5NTYzLCAxMDg2NSwgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgOTgzNDM5LCA3ODcxNCwgNjQxOTEsIAogICAgIDY0MTkwLCA4ODk4LCA2NDE4OCwgMCwgNDEwMzAsIDc4ODM2LCAwLCA5MTc4MzUsIDc4ODIwLCA5MTc4MzQsIDAsIDc4ODA1LCAKLSAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCA5ODM0MjksIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCAKKyAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCA5ODM0MzcsIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCAKICAgICA3MDc5LCA1ODU2LCAxMjcwNDMsIDUxNjMsIDc4ODA5LCAxMjgxNjIsIDE4MTcsIDY2NzI0LCA3ODUzOCwgMCwgMTA1NjQsIAogICAgIDc3NjMsIDEzMDc3LCA0MTgxMywgNDQwMCwgNDE3NDUsIDY0MjA3LCAxMDI3NSwgODkyNSwgMTAzNzEsIDEwMzA3LCA0MTgxNCwgCiAgICAgNDI0OCwgMCwgMCwgNDU0MSwgNjI5OSwgNjQyMDQsIDY0MjAzLCA2NDIwMSwgNjQyMDAsIDY0MTk5LCA2NDE5OCwgMTI2NDcxLCAKQEAgLTE5NDg1LDMzICsxOTUwNSwzMyBAQAogICAgIDY1MjIyLCA2OTk4LCA3ODE4MCwgMCwgMzEyOCwgNDc4OSwgNTA2NywgNTA2NiwgMTE4ODQ5LCA0Nzg0LCAwLCA4ODI3LCAKICAgICAxMTQ2LCA1MDY1LCA2OTg5MCwgNzgxOTIsIDY4MTM2LCA3ODE5MCwgNDM0MTIsIDUwNjQsIDI0MzEsIDAsIDk0NTAsIDE4MDksIAogICAgIDAsIDc4MjAwLCA3ODIwMSwgNTA2MiwgMTI2NCwgNjQ4MTcsIDEzMjU0LCAxMTY5NywgMTI2NTk4LCA5Nzg1LCA2NDcxNiwgMCwgCi0gICAgMzkzMywgNzQ1NTksIDQ3NDAsIDc5NTQsIDAsIDAsIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCA5ODM4NjQsIAorICAgIDM5MzMsIDc0NTU5LCA0NzQwLCA3OTU0LCAwLCAwLCA0MjYwOSwgMCwgNzQxNzUsIDAsIDEyNzAxNiwgMCwgOTgzODczLCAKICAgICA0MjEzMCwgMCwgNTE1MSwgOTE3ODI5LCA5MTc4MjMsIDAsIDkzOTgwLCAwLCA3NjIwLCAzODAwLCA2NTEyMiwgMCwgMCwgCiAgICAgODM1NSwgNzg1NCwgMCwgOTU0LCA2NDkyNywgNDE4NSwgNDEwNDUsIDEyNzE0MSwgNDE0MzgsIDQxNDM5LCA2ODY2NiwgCi0gICAgMTA3MTEsIDQ1OTMsIDEyNzc0NSwgMTIwNTg0LCA5ODM0MDAsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDAsIDAsIDAsIAorICAgIDEwNzExLCA0NTkzLCAxMjc3NDUsIDEyMDU4NCwgOTgzNDA4LCA2NDc3NCwgODA1MywgMTA1MzIsIDY2NzI3LCAwLCAwLCAwLCAKICAgICA2NDc1OSwgNjM4MSwgNTE2NiwgOTg4OCwgMTI3ODAwLCA1MTQ4LCA0MjgzNCwgMCwgNzgyMDUsIDc4MjA2LCA0Mzc4NywgCiAgICAgNzgyMDQsIDY0MTMxLCAzMTE5LCA5MTc4MTQsIDAsIDMwNjAsIDY0MTM1LCA5OTg2LCAwLCA3Nzg3NiwgNjM2LCAxMTY5OCwgCi0gICAgMCwgOTgzNDQzLCA5OTE2LCAxMTcwMSwgNzgzNiwgNDI3NDEsIDY0MTM3LCA4MzIwLCA3ODY0MCwgODg2MywgOTI0MzEsIAotICAgIDExOTk2MCwgMTQ3NywgNDMyODksIDAsIDc0MzU4LCA4NjE4LCA5ODMzOTQsIDk5MDgsIDk4Mzk3MiwgMCwgMCwgMzkzNywgCi0gICAgMTIzMTIsIDAsIDk4MzM5NSwgMCwgNjQ3ODEsIDkxMiwgNjM0OSwgNDUzNiwgOTM5NTQsIDc0NTMyLCAxMjY1OTQsIDYyNDQsIAotICAgIDkyMjA5LCA3MTM0MSwgMzkzNSwgMTIwNjY1LCA5ODM0NjgsIDAsIDExOTUwLCA1MzkyLCA0MjI0OCwgNjUxMjksIDY4NjU2LCAKKyAgICAwLCA5ODM0NTEsIDk5MTYsIDExNzAxLCA3ODM2LCA0Mjc0MSwgNjQxMzcsIDgzMjAsIDc4NjQwLCA4ODYzLCA5MjQzMSwgCisgICAgMTE5OTYwLCAxNDc3LCA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDk4MzQwMiwgOTkwOCwgOTgzOTgxLCAwLCAwLCAzOTM3LCAKKyAgICAxMjMxMiwgMCwgOTgzNDAzLCAwLCA2NDc4MSwgOTEyLCA2MzQ5LCA0NTM2LCA5Mzk1NCwgNzQ1MzIsIDEyNjU5NCwgNjI0NCwgCisgICAgOTIyMDksIDcxMzQxLCAzOTM1LCAxMjA2NjUsIDk4MzQ3NiwgMCwgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgNjg2NTYsIAogICAgIDUzOTcsIDAsIDEyMDQ2LCAxMjU5OSwgMCwgMTI4MjYxLCA1Mzk1LCAwLCA1MzkzLCAzNTQsIDY4NjE1LCAxMTk5NDgsIAogICAgIDc4NTAzLCAwLCAwLCA0MjAzOSwgMCwgMCwgNjQxNDIsIDYyNiwgMCwgNTg5NSwgMCwgMCwgNTc4MCwgMCwgMCwgMTI4ODc0LCAKICAgICAwLCAwLCA0MzI5NywgOTgzMDc5LCA0MzExLCA0NjQ0LCA4ODE4LCAwLCAxMjgxODYsIDAsIDcxNDUsIDM5MTgsIDY2NDUyLCAKICAgICAzNzk3LCAxNjQ0LCA5MjM0NiwgOTY1OCwgNDE0MCwgMTEzODUsIDY1OTQ3LCA2NDU1LCA5MDMwLCA4MTMsIDExOTk0NSwgCiAgICAgNjgxMzEsIDQxNDYsIDExOTk1NywgNTM2MCwgMjQ2NiwgMCwgNjc2NjksIDExOTk0MiwgNjI0OSwgNDIxMTcsIDkyMjg3LCAKLSAgICAxMjgyMjQsIDAsIDAsIDc0MDQ2LCA0Mzc0NSwgNDkxMSwgOTg4LCA5MTc4MDcsIDAsIDk4MzQ2MCwgNDMwNjEsIDcwNTQsIAorICAgIDEyODIyNCwgMCwgMCwgNzQwNDYsIDQzNzQ1LCA0OTExLCA5ODgsIDkxNzgwNywgMCwgOTgzNDY4LCA0MzA2MSwgNzA1NCwgCiAgICAgNjQxNDcsIDAsIDY0OTIwLCA2ODE5NSwgNjY5OCwgMTE4OTMzLCA5MjUwNiwgMCwgMTIwMDA2LCAxMTk4MSwgMTIyMDIsIDAsIAogICAgIDExMDMyLCA2NzY1NCwgNjA5MywgMTE2MDgsIDk3NSwgNjg2NjIsIDY1ODQzLCAxNzAsIDAsIDAsIDQxNjksIDAsIDQxODU5LCAKICAgICA2MDU4LCAxMjA0MDEsIDEzMjAzLCAxMjA2NTcsIDAsIDAsIDY4NjU3LCA5ODE4LCAxMDE3OCwgMTAzMjQsIDQyMTA2LCAKICAgICA1ODk4LCA3NDU0MCwgNDczOCwgNDE4NTYsIDcwNjIsIDkxNzg2NSwgNDczNywgMTE3NzksIDQ3NDIsIDEyMDU2NCwgOTIzOTEsIAotICAgIDczNzM2LCA5ODMzNTYsIDk4MjUsIDY0NDgsIDY3MTUsIDEyNzAwOCwgNDgzMSwgMCwgOTI1MjUsIDAsIDUzMDAsIDQ3NDEsIAotICAgIDQyMTA4LCA5ODMzNDYsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCA5MjE5MSwgNzg0OTEsIDQzMjg4LCAwLCA2NjYyMCwgCi0gICAgOTE3OTE2LCAxMjczMzEsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCA5ODMzNTgsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAorICAgIDczNzM2LCA5ODMzNjQsIDk4MjUsIDY0NDgsIDY3MTUsIDEyNzAwOCwgNDgzMSwgMCwgOTI1MjUsIDAsIDUzMDAsIDQ3NDEsIAorICAgIDQyMTA4LCA5ODMzNTQsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCA5MjE5MSwgNzg0OTEsIDQzMjg4LCAwLCA2NjYyMCwgCisgICAgOTE3OTE2LCAxMjczMzEsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCA5ODMzNjYsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAogICAgIDM5MjgsIDkxNzg3MCwgNDMzNzgsIDEwNzA2LCA3MTk4LCAwLCA0ODQyLCAxMjA1MywgMTI4MTI5LCAwLCA0ODQxLCAwLCAKICAgICA0MTcxLCAxMjAwOCwgNjI1MSwgMzkyMywgMTQ5MCwgMCwgMTE5NTkxLCAxMjY1MTIsIDQwOTcyLCA1MjQ1LCAwLCAxMDExNCwgCiAgICAgNDIwMDEsIDQxODg4LCA0ODQ1LCA4MzMyLCA0MDk3NCwgNjQzNDcsIDQ4NDAsIDkwNzcsIDc4MzQ2LCAxNzQ3LCA5MTc4NDksIAotICAgIDQ4MjUsIDY5MjQwLCA5MTc4NTIsIDY4NjU1LCAwLCA5ODMzODAsIDAsIDAsIDY4NjI4LCA5ODMzMzksIDk4NTAsIDExODkzNywgCisgICAgNDgyNSwgNjkyNDAsIDkxNzg1MiwgNjg2NTUsIDAsIDk4MzM4OCwgMCwgMCwgNjg2MjgsIDk4MzM0NywgOTg1MCwgMTE4OTM3LCAKICAgICAzNjcsIDE0NzIsIDkxNzg1OSwgNjY4NywgMTI3NCwgMCwgNTkwNSwgMTIzMzksIDg5MTksIDczOTUzLCAxMDkwNywgNjUyNjEsIAogICAgIDExMDIzLCAxMTk1NTksIDQ4MzAsIDkxMzQsIDc4NjY2LCA2NDEyNiwgNDMwMTEsIDAsIDEyNjYyNiwgNjQxMDEsIDAsIDAsIAogICAgIDQ4MjQsIDEwNjE0LCAxMTk2NTksIDAsIDE4ODgsIDE5NjAsIDc4NjEsIDkxNzg1NiwgNzg1MjQsIDQxODM2LCA0MzAxMiwgCkBAIC0xOTUyMCwxMiArMTk1NDAsMTIgQEAKICAgICA2NDExOCwgMTI2OTk4LCAxMjk2MiwgMCwgMTI2NTgwLCA0MDE3LCAxMjgyNywgNTI0MSwgMTIwMzkyLCAwLCA0MTExOCwgCiAgICAgMzkyNCwgMCwgMTEzNjYsIDkxNzg0MywgMCwgMCwgOTE3ODQ2LCA0MTExNiwgOTE3ODQ0LCA5MTc1NjQsIDAsIDExMzYzLCAKICAgICAxMjA1NywgMTE5MTcsIDE1NjcsIDc0MDAwLCA0NzIxLCAxMjY2NDEsIDY2MjAyLCA4OTU3LCA0MTM5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjc0MCwgMTI4NzAyLCA0NzIyLCA2ODE2LCAxMjc3OTMsIDEyNzU5LCA0NzI1LCA5ODMzNzUsIDQ3MjYsIDAsIAotICAgIDE5NDg5MiwgMCwgMTI4MzIxLCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAwLCAKLSAgICAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA0NDAwMiwgNjQyMTQsIDE2NTYsIDQxODMxLCAwLCAKLSAgICAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCA0MTg0NSwgCi0gICAgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIDAsIAotICAgIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzAxMDQsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCisgICAgMCwgMTI3NDAsIDEyODcwMiwgNDcyMiwgNjgxNiwgMTI3NzkzLCAxMjc1OSwgNDcyNSwgOTgzMzgzLCA0NzI2LCAwLCAKKyAgICAxOTQ4OTIsIDk4MzYyMiwgMTI4MzIxLCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAKKyAgICAwLCAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA0NDAwMiwgNjQyMTQsIDE2NTYsIDQxODMxLCAKKyAgICAwLCAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCAKKyAgICA0MTg0NSwgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIAorICAgIDAsIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzAxMDQsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCiAgICAgMTIwMDU3LCA2NTQxNywgNjQ3MTcsIDEyMDA2MCwgMTIwMDYxLCA2NTQxNSwgMTIwMDU5LCA2MjkyLCA2NTMwMywgNzk1NSwgCiAgICAgNjQ1MiwgNDcxMywgMTI4MTk2LCA2NjI0OSwgOTE3ODg1LCA5MTc4OTAsIDkxNzg5MSwgNjUxNTIsIDcxOSwgMTIwMDQ0LCAKICAgICA3ODYyMywgMTIwMDQyLCA2NzEzLCA0NTMyLCA2NTQxMiwgNjk4MjIsIDEwODY4LCA0NzE3LCAyMzQ5LCA1OTAyLCA2NjQ1MCwgCkBAIC0xOTUzNywyNiArMTk1NTcsMjYgQEAKICAgICA0ODE0LCAwLCA0ODEwLCAwLCAwLCA2NDkyOCwgMTA1NDMsIDAsIDM1MjIsIDcxMzM1LCA0MTQsIDY1NDA0LCAwLCAxOTUwMjcsIAogICAgIDY0NTYsIDczODIwLCAwLCA2NjkxLCA0MjE5MywgOTIyMjUsIDEyODE3MSwgMCwgNzQ0OTUsIDAsIDAsIDAsIDExODgyMCwgCiAgICAgOTc1MSwgNjU0MDcsIDEyODA4NSwgMTE3NzAsIDM5MTksIDAsIDAsIDY1MDYxLCAwLCAwLCAwLCAxMjIzNSwgMCwgMCwgCi0gICAgMTI3MjMzLCA2NDA5MiwgOTgzNDYyLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDY5OTEzLCAxMDE2MiwgMTAzMTAsIDAsIDg0NTQsIAorICAgIDEyNzIzMywgNjQwOTIsIDk4MzQ3MCwgNjQwODAsIDAsIDY0MDkwLCAwLCA2OTkxMywgMTAxNjIsIDEwMzEwLCAwLCA4NDU0LCAKICAgICAxMjc4ODgsIDQyMDM4LCAzODcsIDQxMzYzLCAxMjczNywgMCwgNDc4MCwgNDMzNjgsIDAsIDY0MzEwLCA2NDYyMSwgNjczMiwgCi0gICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg2NSwgCi0gICAgMCwgOTgzNDI2LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAotICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQyNCwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCisgICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg3NCwgCisgICAgMCwgOTgzNDM0LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAorICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQzMiwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCiAgICAgMjI5MSwgMTI5MDIsIDAsIDQyODkxLCA2NjMyNywgNzQyOTgsIDkxNzg1NywgMTA3OTksIDY5NjkwLCAyNTg3LCA2NjM3MiwgCiAgICAgMCwgNDE5MywgOTIyNTAsIDQyNDEsIDk4MzA1NywgNzk5OCwgMCwgMCwgMCwgMTI2NjQwLCAyMzE2LCAxMTg4MjEsIDAsIDAsIAotICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4NzcsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAorICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4ODYsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAogICAgIDExOTIzMiwgMCwgNDE1OTAsIDAsIDcwMDk4LCAzNzgwLCA3NDg1LCA1Nzc5LCAwLCA0MjAzNywgMCwgMzkwNiwgMTIzNDksIAogICAgIDAsIDgzMjYsIDAsIDY1NDk4LCAzNzYzLCA2OTgzLCA1NjE4LCAwLCAzNzc5LCAwLCA0MzYxMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMjgwLCA3NDU1OCwgMTI3MzMyLCA2ODEzOCwgMTMwNzIsIDE4OTQsIDAsIDAsIDY1NDc4LCA0MzMxMCwgNzIzMSwgMCwgCi0gICAgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIDY0NTMsIDEwMjAwLCA2MjM1LCA5ODM3NDMsIDExOTIzNywgMCwgMTI4ODA1LCAKKyAgICAxMTc3MywgMCwgMCwgMCwgMCwgMjU1MSwgMCwgNjQ1MywgMTAyMDAsIDYyMzUsIDk4Mzc1MiwgMTE5MjM3LCAwLCAxMjg4MDUsIAogICAgIDQ0NzAsIDExODI2LCA5MTc1NTcsIDc3ODAsIDUzNjksIDExODk1OCwgNTI0OSwgMCwgNTM2NywgODc1NiwgMTI3MTQzLCAwLCAKLSAgICA1Mzc3LCAxMjA1ODUsIDY4MTQzLCAxNjg4LCA3ODI0NSwgOTgzMzQ4LCA2OTY4NSwgOTgzNzQ3LCAwLCAwLCA0NDAyMCwgCisgICAgNTM3NywgMTIwNTg1LCA2ODE0MywgMTY4OCwgNzgyNDUsIDk4MzM1NiwgNjk2ODUsIDk4Mzc1NiwgMCwgMCwgNDQwMjAsIAogICAgIDY4MDgsIDQxMzE5LCAxMzAwLCAxMDY1MCwgNDE2OTIsIDY0NTA1LCAyMjkwLCAwLCAxMTk2MjQsIDE0NjUsIDEwODUwLCAKICAgICAzOTQzLCAwLCA0MTIwNSwgNDEzMTUsIDExODk2MSwgMCwgMCwgNTM1MiwgMCwgMCwgODgzOSwgNDEzMTQsIDczODQsIDc3ODUsIAogICAgIDQxMjA0LCAxMjczMjIsIDQxMjA5LCA2OTYzNywgOTIyNDEsIDQzNjA3LCAwLCAwLCA1NDIwLCAzODk3LCAxMDEzNCwgMCwgCiAgICAgNzQ0MTcsIDQwMTgsIDcxNTAsIDY4MTI3LCAwLCAwLCAwLCAwLCAxMjc1MjYsIDI1NjEsIDY4NjIxLCAzNTQyLCA3MTQ4LCAKICAgICAxMjA3NiwgNzk1MSwgNjgxNTIsIDExODg1NywgNTMwMywgNjI3NiwgMTcwNiwgMCwgNzg3NTEsIDcxNDYsIDAsIDY1MTUwLCAKLSAgICA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgOTgzNDI3LCA2OTY0MSwgMTA3NTMsIAorICAgIDQxODE5LCAwLCA3Mzk1MSwgMTA4NDcsIDQxODIyLCA5OTg1LCA4NjAsIDAsIDEwNTA2LCA5ODM0MzUsIDY5NjQxLCAxMDc1MywgCiAgICAgMTA4MzAsIDAsIDYxNSwgNjQ0OTAsIDc1NzQsIDkyNjE3LCA3NzkyMiwgMCwgMTI5MDksIDQzMDE2LCA2NDU1OSwgMTI3MDI4LCAKICAgICAwLCAwLCA2Nzk5NiwgMjAyMCwgMCwgNDAyMiwgMTI4NzgzLCAwLCA3NzkyMywgMTI2NTkzLCA0MTY5MSwgMCwgMCwgNzQzMjksIAogICAgIDAsIDY0NjIyLCA5MDcwLCAwLCA2ODQxMSwgMzkxMSwgNDI4MjksIDQzMTIyLCAxMDMzLCA3NDQ0MCwgMCwgNzAwMCwgMzkwNCwgCkBAIC0xOTU3MSw3ICsxOTU5MSw3IEBACiAgICAgNjg2NzUsIDEyODA1NCwgMTUxMSwgOTMyNCwgNzgyMTEsIDEwNTE5LCA2NjMzMSwgMzQ1NCwgMTk5MzAsIDAsIDQxMDE5LCAwLCAKICAgICAwLCA2NTI5MiwgNjgyMiwgMTI4NjIsIDAsIDAsIDQyMTQzLCA0MTgyOCwgNzgyMDcsIDY1NTMxLCA3ODIwOCwgMTE4ODc5LCAKICAgICA1NTIyMywgMCwgMTI4MDcxLCA0MTgyNiwgODg2NSwgNjQwMiwgMCwgMTMyNzksIDc5MTcsIDc0NzU1LCAwLCA3NzMzLCAwLCAKLSAgICA0OTk4LCA5ODM4ODcsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKKyAgICA0OTk4LCA5ODM4OTYsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKICAgICAwLCA3NDc4OCwgMjAxNCwgMCwgMCwgOTc2NSwgMCwgMCwgMCwgMTk1MDU5LCA3ODM1NywgNjUyODEsIDEyNzgyNSwgMTA5NDksIAogICAgIDAsIDAsIDAsIDIwMTUsIDAsIDAsIDAsIDY2MzE4LCA0MzIzMywgMCwgNDI1MTcsIDAsIDAsIDAsIDEyNjk4LCA4MDk0LCAKICAgICAxMDEzNSwgNjU5MDksIDY0NzQsIDc5NCwgMCwgMTI2NTYsIDEyODEyMiwgMTE5MzUzLCAxMjgyNzAsIDE2NjUsIDAsIDQ4MzMsIApAQCAtMTk1OTAsOSArMTk2MTAsOSBAQAogICAgIDk0MjUsIDk0MjYsIDk0MjcsIDk0MjgsIDk0MjksIDY0NzU4LCAyMzYyLCA5NjU1LCAwLCAyMDA0LCA5MDk2LCA5NzgyLCAKICAgICAxMjg4NDgsIDkxNzIsIDEyODU0NSwgMTk5NjUsIDAsIDU5NTUsIDY3NjY2LCAxMTA4LCAwLCA3NDc3MywgMCwgMCwgNjQ3ODIsIAogICAgIDM5MjYsIDkyNDQ4LCA2NTIxMCwgODc5OCwgMCwgOTIxNjUsIDEzOTIsIDAsIDAsIDEyNzM2NCwgMTA2MDYsIDgwNjUsIAotICAgIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgOTI0MTgsIDQwMTksIDAsIDk4MzI4MCwgNDMyODAsIDgyMTksIAotICAgIDY4NDAyLCAxODEyLCAxMTk5NjMsIDk4MzY4MywgMCwgMTI2NDg4LCA0MjQxMCwgNzQ0NDgsIDExOTEzMiwgNjA1NCwgCi0gICAgMTA2OTcsIDMxNjksIDQyMjk3LCA0MjMyMiwgMTA2NDIsIDM5MDksIDk5NTAsIDAsIDEyODEzOSwgOTgzMjUzLCA2ODY3OCwgCisgICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCA5MjQxOCwgNDAxOSwgMCwgOTgzMjg4LCA0MzI4MCwgODIxOSwgCisgICAgNjg0MDIsIDE4MTIsIDExOTk2MywgOTgzNjkyLCAwLCAxMjY0ODgsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCA2MDU0LCAKKyAgICAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgMzkwOSwgOTk1MCwgMCwgMTI4MTM5LCA5ODMyNjEsIDY4Njc4LCAKICAgICAwLCAwLCAxMDQ5LCAwLCA2NTcwNywgMjMwNCwgNDE4MDYsIDkyMzI2LCA0MjMzNiwgMzkyMSwgMCwgMTE3NzUsIDY0NzYwLCAKICAgICAxMTc2NiwgMTAzOCwgNDIzMDMsIDk4MjMsIDEyNzI3OCwgNjkyMzYsIDQwMDgsIDY0MDA0LCA4NzczLCAxMDczMywgMzYsIDAsIAogICAgIDUxNTMsIDQxODA1LCAwLCA3MzczNSwgNzYzLCA0MTgwOCwgNjQ5MTAsIDk4MzEzMCwgMjAwOSwgMCwgMCwgMTI3MTQyLCAKQEAgLTE5NjA3LDcgKzE5NjI3LDcgQEAKICAgICA3ODAwMiwgMCwgNzUxMywgMTg2MywgNDcxMCwgMCwgNTk1NiwgNzYyMSwgNzgwMDYsIDkyNjI0LCA0NzA1LCA3MTYsIAogICAgIDc4MDA0LCAwLCA0NzA0LCAxMjAwNDAsIDEyMDI3MCwgNDIyNDEsIDE2MSwgNDM5NzcsIDc0NTQ2LCA2NjIxNCwgNDcwNiwgMCwgCiAgICAgNjk5MTQsIDQyNjcyLCA0NzA5LCAxMDY4MCwgMTE5MDY1LCA0MzI5MywgMTE5OTQ0LCAwLCAxMTkxNjQsIDEyMDMyOCwgCi0gICAgOTI0NjcsIDEwMTg3LCAxNzAwLCAxMTkyMjMsIDAsIDAsIDEyODExOSwgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCA5ODM2MzMsIAorICAgIDkyNDY3LCAxMDE4NywgMTcwMCwgMTE5MjIzLCAwLCAwLCAxMjgxMTksIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgOTgzNjQyLCAKICAgICA4NTA2LCAwLCAwLCAxMjY5OTYsIDEwMDUsIDkzNywgNzgyMTYsIDQ3MzQsIDI4NzAsIDAsIDc4MjE4LCA5ODMxMDksIDc0NjMsIAogICAgIDQ3MjksIDAsIDIzNSwgMTM4NCwgNDcyOCwgMCwgMTIwNDIwLCA5MjQ5MCwgNzQ0NDksIDgxMDksIDQzMTA1LCA5ODMxNzQsIAogICAgIDQ3MzAsIDQ0NywgMTMxODYsIDE1MTMsIDQ3MzMsIDEyMDQxNSwgMCwgMCwgNDI1MjcsIDEyOTExLCA0MzQyNywgMTM4MywgCkBAIC0xOTYxOCw3ICsxOTYzOCw3IEBACiAgICAgMTI3NjksIDY1OTA1LCA0MTY5NywgMTI4MywgMTIwMzAyLCA0Nzc5LCAwLCAzNzE5LCA0MDA2LCA5ODM1NjksIDE5OTU3LCAKICAgICAxMjg3NzMsIDIwMjEsIDExOTMzMiwgMTIwNjk5LCAxMTkxNTAsIDQzMDI4LCA2NTQ5MywgNDE4MzgsIDM4NzUsIDU5NjIsIAogICAgIDY0MzQxLCA5MjYxNiwgOTgxNCwgNDM0NTcsIDU4MjcsIDMzMTQsIDc3ODcsIDc4MjM0LCA2NTQ5NCwgNjgxNTMsIDAsIDAsIAotICAgIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMTk0NjI2LCAwLCAwLCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3ODUsIAorICAgIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMTk0NjI2LCAwLCAwLCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3OTQsIAogICAgIDk3NDIsIDUyMSwgMCwgMTA4MDAsIDkyMjIyLCA4NDA0LCAxOTQ2MjUsIDQ4MywgNzA5NiwgNzA4OSwgNjYzMjMsIDkyOCwgMCwgCiAgICAgMCwgMTE5MDE4LCAxMDU5OSwgMTE1ODYsIDM5ODksIDEwOTcxLCA0Mzc0OCwgNjU3ODIsIDk4NDEsIDg4NDMsIDEyMTQ1LCAKICAgICA5MjQ3MCwgMTAwNzQsIDc4NTQ4LCAwLCAzNzY5LCAwLCAwLCAwLCA5ODMxMDcsIDk1NzMsIDAsIDY1MjkwLCA4ODQ5LCAwLCAKQEAgLTE5NjI2LDE3ICsxOTY0NiwxNyBAQAogICAgIDczODM4LCA3ODU1MywgNTgyNSwgMTMwMDcsIDY4MTY1LCAwLCAxMjA0NTcsIDEyNjYxLCA3NjA4LCAxMDM1NCwgMTA0MTgsIAogICAgIDQyNDExLCAyMDIyLCAwLCAxNDA5LCAxMjE5NSwgNDAwMSwgMzExMiwgMTA4MjQsIDEyMDYzOSwgMTM5MCwgMCwgMCwgNDIxLCAKICAgICA0MzUzNiwgNTg0NiwgMTIwMTIwLCA0MTMwLCAxMjc3NzUsIDc1OTUsIDQyNTg4LCA3NjAwLCAxMjAxMjEsIDY2MDM1LCAKLSAgICA5ODM5MDQsIDAsIDY1ODUxLCA0MjYwNywgMTI4MTkwLCA5MjQwMywgMzE2OCwgMCwgNDIxMzQsIDExODMxLCAyMzcwLCAKKyAgICA5ODM5MTMsIDAsIDY1ODUxLCA0MjYwNywgMTI4MTkwLCA5MjQwMywgMzE2OCwgMCwgNDIxMzQsIDExODMxLCAyMzcwLCAKICAgICAyODQ2LCA5MjYwNSwgMCwgMCwgMTIwMTMyLCAwLCAxODM2LCAwLCAwLCA5MjU1OCwgMzc0MCwgNjk4NDMsIDYyOTAsIAogICAgIDY1Mzc0LCAxMjA0NTEsIDIzOTAsIDM5NDQsIDY2NjI4LCAxMjA0MzQsIDAsIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIAotICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDk4MzczNCwgMCwgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIAorICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDk4Mzc0MywgMCwgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIAogICAgIDk5OTgsIDEyODU2NCwgMCwgMCwgMCwgMCwgNjIwNCwgMCwgMCwgODI3OSwgODc3NiwgNjQ5NTQsIDQ5NzUsIDcwMDc1LCAKICAgICAxMjAxMzAsIDQyNjcsIDE2MzEsIDQyMjA2LCA3Nzk4MywgMCwgMTk1MDQ2LCA2NTcwMCwgNjY1NjIsIDAsIDY0NjQ1LCAwLCAKLSAgICAwLCAxMjY1ODgsIDEyNTg2LCAwLCA5MjQyLCAxMjc5MjIsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCA5ODM3ODgsIAorICAgIDAsIDEyNjU4OCwgMTI1ODYsIDAsIDkyNDIsIDEyNzkyMiwgMCwgNDUyMywgNTg0MiwgMTA0OTUsIDMxMjIsIDk4Mzc5NywgCiAgICAgNzc5MywgNzgyNzUsIDkzMjgsIDExOTEwNCwgNzgzOTMsIDEyNjA0LCAwLCA2NjE1LCAyMjg1LCA5MjM0NCwgMzk4NiwgCi0gICAgNDQwMjUsIDAsIDg5MTIsIDY0NTU1LCA3NDA5LCAwLCA5ODMzNTAsIDk1NDEsIDc4Mjc2LCAwLCAxMTI3NSwgODU0MCwgCi0gICAgMTE0OTgsIDAsIDk4MzM0OSwgNDEwNDAsIDI0NTksIDAsIDEzMDYwLCA0MTA0MSwgNzQ0MTMsIDk4MzEzOCwgMCwgMCwgCi0gICAgNjg0MjcsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIDcwMjAsIDEyMDM1MywgMzc2NSwgOTgzMzQyLCAwLCAxNjA2LCAxMjAzNDgsIAorICAgIDQ0MDI1LCAwLCA4OTEyLCA2NDU1NSwgNzQwOSwgMCwgOTgzMzU4LCA5NTQxLCA3ODI3NiwgMCwgMTEyNzUsIDg1NDAsIAorICAgIDExNDk4LCAwLCA5ODMzNTcsIDQxMDQwLCAyNDU5LCAwLCAxMzA2MCwgNDEwNDEsIDc0NDEzLCA5ODMxMzgsIDAsIDAsIAorICAgIDY4NDI3LCAxMDQ1MCwgMTI1NTEsIDQxMDQzLCA3MDIwLCAxMjAzNTMsIDM3NjUsIDk4MzM1MCwgMCwgMTYwNiwgMTIwMzQ4LCAKICAgICAxMjAzNTEsIDMwOTMsIDY4NDM2LCAwLCA5ODMwNjEsIDExOTYxMywgMCwgMCwgNDMxMiwgNzQwOTEsIDEyMDMzNywgCiAgICAgMTIwMzM2LCAxMTkyMywgNDAyMywgMTIwMzMzLCA1NzYzLCA5NDAxNSwgNDgyNywgMTA4OTQsIDEyODEwLCA2NDQwNiwgCiAgICAgMTE4Nzg1LCA0NDU1LCA3NDMyMSwgNDMzLCAxMTk2MjAsIDY2NjYwLCAyNDk5LCAwLCAwLCAxMTg4MzcsIDExOTczLCAKQEAgLTE5NjQ2LDI1ICsxOTY2NiwyNSBAQAogICAgIDcwMDQsIDAsIDY1ODgwLCAxMjc4ODYsIDExOTA0OCwgMjM4MCwgMTEzODAsIDAsIDkzOTk2LCAyMzc2LCAwLCAxMTkzMjAsIAogICAgIDAsIDUxOTcsIDEyNzA0NiwgMTI3MDQ3LCAxMjcwNDgsIDIzNjYsIDEyNzA1MCwgMTI3MDUxLCAxMjA1NTQsIDEyMDA0NSwgMCwgCiAgICAgMCwgMCwgOTgzMDg0LCAwLCAwLCAwLCA3NDE4OCwgNzEzNDIsIDk4MzA4NiwgOTgzNTczLCAxMjAwNDcsIDEyODU3NSwgMCwgCi0gICAgMCwgMTIwMDQ5LCAwLCAxODQ3LCAwLCAxMDMzOSwgOTgzMzU3LCA0MjM4NCwgMCwgNDIyNywgNzQxNTgsIDAsIDkyNTAxLCAKLSAgICA0MzAzMiwgMCwgNDIzNjUsIDAsIDEyNjcxLCAxMTM4NCwgMCwgOTgzNDU3LCAwLCA2NDc5NywgOTgzMzM3LCA1ODIwLCAKLSAgICA5ODMzMzYsIDEyMDA1MiwgMTIwMDY1LCAwLCAxMjAwNjQsIDEyMDY1MCwgNDIxMzcsIDk4OTMsIDI3NTQsIDEyNjY0LCAKKyAgICAwLCAxMjAwNDksIDAsIDE4NDcsIDAsIDEwMzM5LCA5ODMzNjUsIDQyMzg0LCAwLCA0MjI3LCA3NDE1OCwgMCwgOTI1MDEsIAorICAgIDQzMDMyLCAwLCA0MjM2NSwgMCwgMTI2NzEsIDExMzg0LCAwLCA5ODM0NjUsIDAsIDY0Nzk3LCA5ODMzNDUsIDU4MjAsIAorICAgIDk4MzM0NCwgMTIwMDUyLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIAogICAgIDEyMDA2MywgMCwgNzM3NywgMTI3ODY3LCA0MTc5OSwgNjU1MzAsIDE3MTEsIDEyOTg0LCA0MzAzOSwgMzExNCwgNjI1NSwgCi0gICAgOTgzMzMyLCAxMTg5MzgsIDAsIDEwODUzLCA5MjYsIDk4MzM2MSwgNzQxODQsIDk4MzM2MCwgMTIwMDU1LCAwLCA0MzE3NSwgCisgICAgOTgzMzQwLCAxMTg5MzgsIDAsIDEwODUzLCA5MjYsIDk4MzM2OSwgNzQxODQsIDk4MzM2OCwgMTIwMDU1LCAwLCA0MzE3NSwgCiAgICAgMCwgNDMwMzcsIDQxNzk4LCA0MTAzNSwgMTE1ODMsIDEyNzc2OSwgNDE4MDEsIDExOTA4OCwgMTE5NjA1LCA1MjAsIDQyMDAsIAotICAgIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCA5ODM2NzIsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIAorICAgIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCA5ODM2ODEsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIAogICAgIDY0NTQzLCA5MTc5NDYsIDY1NTYzLCAwLCA5MTc5NzQsIDI4NjEsIDQzNzkzLCAxMDA5NSwgMCwgOTE5NSwgOTIzODYsIAogICAgIDE4NjEsIDAsIDczNzMzLCAwLCAwLCA0MzA0MSwgMCwgNDM3OTQsIDEyODUzMCwgMzg1OSwgMTIxODEsIDQxNjYwLCA4MjA5LCAKICAgICAwLCA3Mzg2NywgMTI5NzMsIDAsIDc0NzU3LCAxMjc1MTQsIDQxNjU4LCAwLCAwLCA1NzYwLCAwLCA3NDMsIDQ0MTQsIAogICAgIDEyMDc2NiwgMCwgNDI2MzIsIDkxNzk3MywgNjUxNjEsIDczODk2LCAxMjg1ODksIDAsIDE0MDUsIDExOTA2MywgNDMyMjAsIAogICAgIDQzMzQxLCAwLCAxOTkxOSwgMCwgNjQ1MzIsIDY1MzY3LCA0MzcxMCwgMCwgMCwgMzUxMywgMCwgMTE4ODgzLCA0MzM0MiwgCiAgICAgMTE5MDY0LCA2NTUyOSwgNjUzNjQsIDEyODE5NywgMCwgNjQ4NSwgMTM5NywgMCwgNDE5ODYsIDkyNjc4LCAwLCAwLCAKLSAgICA3NDA5NywgMCwgNzQ3MSwgMTIwNzksIDY3OTk3LCAxMjY4MiwgNDMyODcsIDkyMzE3LCAwLCA5ODMxNDMsIDk4MzY5OCwgMCwgCisgICAgNzQwOTcsIDAsIDc0NzEsIDEyMDc5LCA2Nzk5NywgMTI2ODIsIDQzMjg3LCA5MjMxNywgMCwgOTgzMTQzLCA5ODM3MDcsIDAsIAogICAgIDAsIDEwOTksIDEwNDkwLCAwLCAxMDUwMSwgNjUxODEsIDc0NDYzLCAwLCA0NjQsIDQxNjI0LCA2NTI4MywgNjc2NjMsIAogICAgIDc4MjIyLCAxMzQ2LCAwLCA5MTc2MzEsIDY0NTczLCA2NDg5NywgNDIzLCAxODE4LCA2NTE0NCwgMCwgODI3MiwgMTI3ODEyLCAKLSAgICAxOTkxMSwgNDIxOCwgMzA4NywgNjQ5NjAsIDEyNzIzNCwgNDM1NjQsIDAsIDAsIDk1ODQsIDEwNDY1LCA5ODM4OTMsIAorICAgIDE5OTExLCA0MjE4LCAzMDg3LCA2NDk2MCwgMTI3MjM0LCA0MzU2NCwgMCwgMCwgOTU4NCwgMTA0NjUsIDk4MzkwMiwgCiAgICAgNzQzNTksIDEyNjI2LCA5MTA2LCAwLCA0MjY0MiwgMTIwMjMwLCA2NDc1MCwgOTM5MCwgMCwgNDE3OTcsIDAsIDAsIDI2NSwgCi0gICAgNDE3OTUsIDY0NjY2LCAxMjY1MDgsIDQzNTMwLCAyNzUyLCAwLCAwLCA5ODM0ODUsIDU5LCAwLCA5ODM1OTMsIDAsIDkyMzcxLCAKKyAgICA0MTc5NSwgNjQ2NjYsIDEyNjUwOCwgNDM1MzAsIDI3NTIsIDAsIDAsIDk4MzQ5MywgNTksIDAsIDk4MzU5MywgMCwgOTIzNzEsIAogICAgIDc3ODczLCA0MTgxMCwgMCwgNzAxMCwgMCwgNDE4MDksIDQxNDk1LCAxMTkzNjQsIDAsIDQyMjUyLCA0MjIxMywgODAwOSwgCiAgICAgMzMwNSwgNDMwMzMsIDUxMSwgOTI3MDAsIDY2MjU1LCAxMzEyNywgMTIwMDY3LCAwLCA3NDM5NywgMTIwMjM1LCA5MTc5NzcsIAogICAgIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDE5NDg3MCwgMjEwMywgMTAzODcsIDQ0NTMsIDQzMjc2LCA5MTc3ODMsIApAQCAtMTk2NzUsMTcgKzE5Njk1LDE3IEBACiAgICAgMCwgNDE4NDEsIDQzMzM4LCAwLCAwLCA1NzI2LCA2NDkxNSwgNDIxNzUsIDAsIDAsIDQxNDk3LCA2NTA0NCwgMTIwMTA5LCAKICAgICAyODUxLCA0MzAxNywgOTgzNTg5LCAwLCA0MzczLCA3ODA1OCwgMCwgOTU4NywgMTc4OSwgNjY3MSwgMTI4ODQwLCAzMTAwLCAKICAgICAwLCA2NTM2MCwgMCwgOTIzNjUsIDkxNzc4OSwgNjQ5MjIsIDAsIDgxOTAsIDEyMDgzLCAwLCAwLCA2NTA2LCA2NDMxMiwgCi0gICAgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDk4MzgzOCwgMTE5MTI1LCAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIAorICAgIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCA5ODM4NDcsIDExOTEyNSwgMzQzOSwgMTgyNSwgMTE5MiwgMTIwMTA2LCA4ODkxLCAKICAgICAzMDgwLCAxMjAyMjgsIDIzNDcsIDU0MzAsIDAsIDg5OTAsIDI4NDgsIDAsIDEyODIyMywgOTI1MjgsIDI0OSwgMCwgMCwgMCwgCiAgICAgMTIwNjU4LCAwLCAwLCA4ODgzLCA5MTc4MDIsIDcyOCwgNjgxNzgsIDk5NSwgMCwgMCwgNjQ4MjYsIDAsIDkxNzc5OCwgCi0gICAgMTI4MzQ4LCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMTk0ODE0LCA5ODM4NDEsIDEyMTEyLCA2OTkxMiwgMCwgCisgICAgMTI4MzQ4LCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMTk0ODE0LCA5ODM4NTAsIDEyMTEyLCA2OTkxMiwgMCwgCiAgICAgMCwgNzQ0MTksIDEyMzM1LCAxMjAxMDQsIDkxNzc5NSwgMzQ0MywgMzEyOSwgMCwgMjEwMiwgNjU0NDUsIDc4MjU4LCAKICAgICA2NDg5MSwgMCwgNzcyNSwgNjUxMDgsIDc4MjU1LCAwLCA4NjI0LCA2OTI0NiwgMTI0NDYsIDQzMjk1LCAwLCA0MTg5NCwgMCwgCiAgICAgNjI3NywgNDE2NzIsIDQxODkzLCAxMDAxMCwgMTI4Njc4LCAzNTQwLCAxMjg2NDksIDgzNSwgNzEzNDAsIDY5ODE2LCAKICAgICAxMTk4NjgsIDc0NDA4LCAwLCA3Mzk1OSwgNTQyNiwgNDI1OCwgMCwgMCwgNTQyNCwgMTI4MTI3LCA4MjgzLCAwLCA1NDM0LCAKICAgICA5ODM1OTAsIDAsIDE5OTE3LCAxMTQwOCwgMCwgMTE5NDcsIDAsIDE0MDQsIDMwOTUsIDExNDMyLCAxMjgzMDcsIDM0NjQsIAogICAgIDY0ODYsIDQ4MTksIDEyODIzMywgMCwgNTcwLCA4MDk1LCAzNjcyLCAxMTk4NjQsIDE0OTgsIDY3ODY2LCAwLCAxMjg1MzksIAotICAgIDQzMSwgMCwgMCwgMTI4MTgyLCAxMjgwOTYsIDY4MTY3LCA5ODM2NTQsIDEzMDk2LCAxMjg2NDMsIDAsIDQzNDA4LCA5NTE2LCAKKyAgICA0MzEsIDAsIDAsIDEyODE4MiwgMTI4MDk2LCA2ODE2NywgOTgzNjYzLCAxMzA5NiwgMTI4NjQzLCAwLCA0MzQwOCwgOTUxNiwgCiAgICAgMTI4NTM4LCA1MjY4LCA0MjIzMCwgNDIyMjAsIDAsIDQ0NTAsIDEyMDUxMSwgMTE1NDcsIDQzNDE3LCAxMjg1NDIsIDM1NiwgCiAgICAgMzQ3NywgMjI3LCAxMDQ4OCwgNjgyMDMsIDM4MiwgMTE0MTgsIDAsIDE5NTA2NiwgMCwgMCwgMCwgMCwgNjQ4NCwgMjU0MSwgCiAgICAgNjYwMzksIDAsIDc4NzE4LCA5MjcyMywgMzU0OSwgMCwgOTExMCwgMTE5NjY1LCAyNzQzLCAwLCA0MzI5MCwgMTk0ODEyLCAKQEAgLTE5Njk0LDcgKzE5NzE0LDcgQEAKICAgICAxMjg0OSwgMzk1MywgMTg5NywgMCwgNjUwOTQsIDExOTk0LCA0MzM5LCA3NDU1NiwgOTI2NTQsIDY3ODQzLCAwLCAwLCAwLCAKICAgICA2ODQ3MywgNzQxMDQsIDUyMjgsIDEyODgwNCwgNzg2OCwgNDMxODQsIDAsIDAsIDczOTg2LCA0MzQzOCwgMCwgNDMwMjIsIDAsIAogICAgIDExNjIsIDkxNzg0NywgMjY3MSwgMCwgMCwgOTI2MzIsIDkyNjMxLCAxMTg4NjUsIDQ1NTMsIDczODExLCAwLCAxOTUwMDUsIAotICAgIDAsIDAsIDE5OTIxLCA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDk4Mzc3OSwgNTUyNDksIDQ4MjAsIAorICAgIDAsIDAsIDE5OTIxLCA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDk4Mzc4OCwgNTUyNDksIDQ4MjAsIAogICAgIDY1MjM5LCAxOTQ2NjIsIDAsIDE5NDY2NSwgNDMwNDIsIDExOTIxMiwgMTM3NywgMTI4NjksIDQ4OTcsIDQyODIxLCA5MjUwLCAKICAgICAwLCA0NDM4LCA2NDM4NSwgMCwgMTc1MywgMTEzMzEsIDYxNDcsIDE5NDk0MSwgNDMyODIsIDg4MzMsIDAsIDAsIDY1MDQsIAogICAgIDc4NDA4LCAxMjY5NzksIDEwNzE5LCAwLCAxODk4LCAxNDEzLCA0MjQ0MywgMCwgODAyLCAxMjE0MSwgMCwgMTk0NjcxLCAKQEAgLTE5NzAzLDcgKzE5NzIzLDcgQEAKICAgICA3ODcxOSwgNjY1NzMsIDAsIDc4NzI0LCA3ODcxMiwgMTE3NjEsIDE5NDY1NSwgMCwgNDEwOTQsIDAsIDAsIDE5NDg5MywgMCwgCiAgICAgOTI2ODksIDYxOTYsIDY5NDUsIDkzOTY5LCAxOTQ4OTAsIDEyODE4NCwgMTIwNDkxLCAxMTgxNiwgMTk0OTQzLCA1NzMzLCAKICAgICAyOTMwLCAwLCAwLCA0MTA5OCwgMCwgNDEwOTMsIDAsIDY2NjI2LCA1ODgsIDk3NjAsIDAsIDE5NDcxNywgMTIzOCwgMjAwLCAKLSAgICA5ODMyMDUsIDE2NjAsIDczOTE2LCAwLCAxMTg5MDUsIDc0MzYyLCAwLCA5MjQ4NSwgMTk0NjUxLCAwLCA5ODM2OTcsIDMzOTQsIAorICAgIDk4MzIwNywgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIDAsIDkyNDg1LCAxOTQ2NTEsIDAsIDk4MzcwNiwgMzM5NCwgCiAgICAgMTk0ODk0LCAxMjA2NjgsIDAsIDAsIDEyNzM1OCwgNjYyMTksIDEyNzE4MywgNDMyODQsIDE5NDY1NiwgNzgxNywgMTg0MSwgCiAgICAgMTEwNTUsIDEyMDUzMywgMTk0OTc5LCAxOTQ5ODIsIDE2NjksIDEwNzc2LCAxOTQ5ODEsIDc3MDEsIDE5NDk4MCwgMCwgCiAgICAgMTk0OTk1LCAxNzMyLCA0MDMwLCAwLCAzOTYzLCA2NjYxMSwgMTI3NTMwLCA0MTc2OCwgNjQ5MSwgMCwgNjUzMjQsIDkxNCwgCkBAIC0xOTcxMSwzMCArMTk3MzEsMzAgQEAKICAgICAxMjAwOSwgMTIzOTksIDAsIDY3ODUyLCA2NTUzNywgMCwgMTA4NDEsIDQzNDMwLCA1MzAxLCAwLCA5MjYxOCwgNTczNCwgCiAgICAgODk2MCwgMCwgOTI1MjcsIDY1MzE3LCA3Nzg4MCwgMCwgMCwgMCwgMTIzMDQsIDAsIDAsIDY1MzE1LCA5MjY3MCwgMTI4NTExLCAKICAgICAwLCAwLCAwLCAxMTk2MjEsIDkyNTI5LCA3NDUzNiwgMTI0NDcsIDY0NDg2LCAxMjczNzQsIDEyNjU2MiwgOTgzMTI5LCAwLCAKLSAgICAwLCA5ODM3OTMsIDQyNzY3LCAxMDkxNSwgMCwgMTIwMDcsIDQzNjk1LCAxMjA1MjAsIDExOTc1LCAxOTQ4NzgsIDAsIAorICAgIDAsIDk4MzgwMiwgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgNDM2OTUsIDEyMDUyMCwgMTE5NzUsIDE5NDg3OCwgMCwgCiAgICAgOTI2MDQsIDI1NTUsIDg2MjksIDEyODY0MCwgNDMxNjgsIDQxODcyLCA0MzcwNiwgNDQ5NiwgMTk0ODc5LCAxMjgxNDgsIAogICAgIDEyMDI0MSwgMCwgMCwgMCwgMCwgNjQ3MzAsIDcwMDQxLCA2NjcxNCwgNjgyMjIsIDAsIDcwMDc2LCA2NTU5NiwgOTIzMDYsIAogICAgIDExNDE2LCA0MjgwLCA2NzY1NSwgODc2NSwgMTI3ODQsIDc3OTIsIDEzOTMsIDEyNjQ3MywgNjc4NzEsIDc0Mzg2LCAwLCAKICAgICA4MjMzLCAxMjgyMCwgMCwgNjY4MywgMTk0ODc2LCAzNDQyLCAxMjE0NCwgMjg0MSwgMTI1NDMsIDAsIDE0NzMsIDQyODIwLCAKICAgICA2NDMyOSwgMTI3ODMyLCAwLCA2ODY0MiwgNjQ4OCwgMzU3LCAxMDQ4LCA0MTEwMCwgMCwgNDExMDQsIDk0MDAzLCAzNDA2LCAKICAgICAxMDU0LCA3MTMyMCwgMTA0MCwgNjU0NTAsIDAsIDQ0MzQsIDEwNjksIDAsIDExODg2MiwgNjU3MzcsIDkxNzc2NSwgCi0gICAgMTI4NzA1LCAwLCA5ODM2ODQsIDk2OTMsIDQxOTQzLCAxMjY1NjQsIDQxOTMxLCA0MTc1OSwgMTI3NTcsIDQzNTMsIDAsIAotICAgIDEwNTksIDk3OTAsIDg5OTUsIDExOTk3NCwgOTgzNjg3LCA2NTkzNywgMCwgNDE3NjQsIDEwNjQ2LCAwLCAxMTg4MzMsIAotICAgIDkyMzcyLCAwLCA3NDgzMCwgNzg1NjksIDEyNzQzLCA5ODM2ODAsIDY0ODAsIDkxNzc2MSwgNDE3NzksIDQyNTgwLCA2NjYwMSwgCi0gICAgMTIyMDcsIDExOTYxOSwgNjMzNSwgNjY2MDIsIDExMzEyLCA2NDgwNywgMCwgMCwgNDE3NjcsIDExOTYyOSwgOTgzNzU1LCAKLSAgICA0MzAyMCwgMTI4MjcxLCAzOTU1LCA3NDI1NCwgMCwgOTgzNzQ1LCA5MTc4NjEsIDAsIDc3OTI2LCA5NzcwLCA5MjQ2LCAKKyAgICAxMjg3MDUsIDAsIDk4MzY5MywgOTY5MywgNDE5NDMsIDEyNjU2NCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgCisgICAgMTA1OSwgOTc5MCwgODk5NSwgMTE5OTc0LCA5ODM2OTYsIDY1OTM3LCAwLCA0MTc2NCwgMTA2NDYsIDAsIDExODgzMywgCisgICAgOTIzNzIsIDAsIDc0ODMwLCA3ODU2OSwgMTI3NDMsIDk4MzY4OSwgNjQ4MCwgOTE3NzYxLCA0MTc3OSwgNDI1ODAsIDY2NjAxLCAKKyAgICAxMjIwNywgMTE5NjE5LCA2MzM1LCA2NjYwMiwgMTEzMTIsIDY0ODA3LCAwLCAwLCA0MTc2NywgMTE5NjI5LCA5ODM3NjQsIAorICAgIDQzMDIwLCAxMjgyNzEsIDM5NTUsIDc0MjU0LCAwLCA5ODM3NTQsIDkxNzg2MSwgMCwgNzc5MjYsIDk3NzAsIDkyNDYsIAogICAgIDEyMjMwLCAwLCAwLCAwLCAxMDQ0OCwgNDE3ODMsIDQxNzg2LCAxMjcwOTMsIDEyNzk3LCAyNzU1LCA2NDU3MSwgNzg1NzgsIAogICAgIDE5NDkyNywgNDg1NywgMCwgNDQyOCwgMTI3OTQsIDczNzU1LCAxMjgwNjEsIDc4NTc0LCAwLCA3NDI4NCwgMCwgNTc0NywgCiAgICAgNzg4MjUsIDAsIDc5NzgsIDQxMDkyLCA3NDU3MSwgMCwgMTE5MjQsIDQzODEyLCA0MjE0NCwgNjUwMTUsIDAsIDU2MywgMCwgCi0gICAgOTgzNjgyLCAxMjc5OCwgMTEyNzEsIDU3LCAwLCAwLCA5MTc4NjAsIDExOTA0MywgMCwgOTQwNTEsIDQzMTM3LCA2OTQsIDAsIAorICAgIDk4MzY5MSwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgOTE3ODYwLCAxMTkwNDMsIDAsIDk0MDUxLCA0MzEzNywgNjk0LCAwLCAKICAgICA5ODc2LCAwLCAxMTkxNjgsIDAsIDc4ODIyLCA2NDUzNywgMCwgMjc3LCA3NDM4NSwgNzIyOSwgMTI3NjEsIDAsIDAsIAogICAgIDEzMDI1LCA2NDgxMSwgODc1NywgNzg4MjQsIDEyNjQ3OCwgMTU3NCwgNzM4MSwgMCwgMjUyNSwgNDg1MiwgNTc0OSwgCiAgICAgNjg0NjUsIDEzMDI3LCA0MjgyNCwgMTIwNTc0LCAxMDM5LCA3MTUxLCAxMDE1NSwgNTc0NSwgMTg4LCA0MTg1OCwgMTE1OTIsIAogICAgIDAsIDc0MDE1LCA5MDU1LCA0MTg1MywgNDg1OCwgOTE3NzgwLCAwLCA0MzYsIDQ3NzEsIDAsIDI3ODYsIDAsIDQ4NTYsIAogICAgIDgwNTEsIDAsIDExOTYwOSwgNzEzMjcsIDk2NDQsIDAsIDAsIDAsIDE5NDkxNiwgMTIwNzMyLCA2NjcxMCwgMTE4ODM0LCAKLSAgICA5ODMzNTEsIDczOTA2LCAxMjg2ODAsIDEyNzExNCwgMCwgMTAyMzQsIDU4NDMsIDExOTM5LCAwLCA0MjE1NywgMCwgMzE1NywgCisgICAgOTgzMzU5LCA3MzkwNiwgMTI4NjgwLCAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIAogICAgIDE5NDkxOCwgNjgzOTMsIDAsIDM1MDQsIDExOTE3OCwgMCwgMTA4MjIsIDUxNDksIDY2MDI5LCAxMDIyNiwgNjUxNDIsIAotICAgIDEyODAyNSwgMzU5NCwgNDI0MjQsIDE5NDk1OSwgNDAsIDEyNjU3LCA5ODM2NTYsIDAsIDM4NiwgMCwgODgzNCwgMCwgCisgICAgMTI4MDI1LCAzNTk0LCA0MjQyNCwgMTk0OTU5LCA0MCwgMTI2NTcsIDk4MzY2NSwgMCwgMzg2LCAwLCA4ODM0LCAwLCAKICAgICAxMjgxNSwgNDM1NzQsIDAsIDczOTA3LCAwLCA3NDE5NiwgNzIyMCwgNzQ1MDQsIDAsIDc0MzE2LCAwLCA2NTMyMiwgNDMwNCwgCiAgICAgNzQ1MDMsIDgxNjAsIDc4NzA3LCAxOTQ3NTMsIDAsIDAsIDEyODUyNiwgMTM0OCwgOTIzNDksIDc4NTk3LCAxMjY1MzksIAogICAgIDEzMzAzLCAwLCA5MjM5MiwgMTk0NzU1LCA3NTk5LCAxMjc4LCA0MzYxNiwgMTMyNjksIDAsIDAsIDc0Mzg3LCA3ODE3OSwgCkBAIC0xOTc0NiwyNSArMTk3NjYsMjUgQEAKICAgICA0MjUwNywgMTk2MiwgNDMzMDUsIDc4NDc2LCA0MjUwNSwgMTE2NjAsIDAsIDIwNzIsIDkyMzEyLCA2OTk1LCA3NDE3MywgCiAgICAgNTQzNywgNzQxNzQsIDEwNjY5LCA4NzAyLCA3OTY0LCA5MjM1MiwgMCwgMTk5LCAxOTQ4NDMsIDQxMDUsIDE5NDg0NSwgCiAgICAgMTk0Njk5LCAxOTQ4NDcsIDE5NDcxMCwgMTE5ODc1LCAxMzE0OCwgNzU2MCwgNzg0NzksIDkyMjYsIDc4NDgwLCAxOTUwNzAsIAotICAgIDY0NzIsIDY1ODE0LCA3Mzk1NCwgMCwgNDcyNCwgMCwgMCwgOTE5MSwgMCwgNjQ0MzIsIDk4MzgwOCwgOTgzMjQxLCAKKyAgICA2NDcyLCA2NTgxNCwgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCA5ODM4MTcsIDk4MzI0NywgCiAgICAgMTk1MDI0LCAxMDE5NiwgNzg4NiwgMCwgNjU4NSwgMCwgNjY4MCwgMTk1MDQyLCAwLCAxOTUwNTEsIDY2NzksIDc0NDEyLCAKLSAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYyMiwgOTgzNjI4LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKKyAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYzMSwgOTgzNjM3LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKICAgICAxOTQ4MzIsIDY2ODEsIDEyNzQ4MiwgMTI2OTMsIDE5NDgzNiwgNDI3MjcsIDc4MTk2LCAxMjgyNTIsIDc4MTk1LCA2NTQ0MiwgCi0gICAgMTE5NjEwLCA2OTczMywgOTk4OSwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDE5NDgxOCwgMTI4ODQ1LCAxOTQ4MjAsIAorICAgIDExOTYxMCwgNjk3MzMsIDk5ODksIDQzMjQ4LCA2NjI0OCwgMTk0ODE2LCAwLCAxMTMyMSwgMTI4ODQ1LCAxOTQ4MjAsIAogICAgIDE5NDgxOSwgNTI5NywgNzA0MiwgMTMyODQsIDYxMTIsIDc5NjgsIDE5NDgyNSwgNzM5MjcsIDkyNDQ0LCAxOTQ3MzYsIAogICAgIDY1NzQ2LCAxMjc0NzYsIDY5ODg5LCA3NDM4OSwgMTI4Njk2LCA0MzQyLCA0MjgzOSwgMTk0ODMxLCAxNjc3LCAwLCAwLCAKICAgICAxMjY1OTAsIDkxNzg1NSwgMTEwOTEsIDExMDExLCAyNzE5LCAwLCAwLCAxMTk1OTUsIDEwMTYwLCAwLCAwLCA3NTg1LCAKICAgICA2NTE2OSwgMjA1MiwgNDMwOCwgOTIxNzQsIDQzMDAwLCA3NTA1LCA1NDMsIDY0OTE2LCA2NDczNiwgMCwgMCwgNjQ2NTUsIDAsIAotICAgIDExODkyMiwgMjA2NCwgMCwgNDMxNTgsIDc5MDIsIDAsIDY1MjY1LCAxOTQ2MzksIDAsIDEyNzE3MCwgMCwgMCwgMCwgMCwgCi0gICAgMTI5OTQsIDkyNzI4LCAxMDgyOCwgOTgzOTM0LCA2MjI4LCA0MzA3LCAzNDgyLCAxMjg1MjcsIDAsIDAsIDAsIDUwNiwgCi0gICAgNzQ1NzMsIDQxMTk0LCA2NTczNSwgMjA1NSwgNDMyNTUsIDQxMTk1LCAwLCA4MTY5LCA5ODM2NzEsIDg4NDEsIDAsIDUxNiwgCisgICAgMTE4OTIyLCAyMDY0LCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMTI3MTcwLCAwLCA5ODM2MjUsIDAsIAorICAgIDAsIDEyOTk0LCA5MjcyOCwgMTA4MjgsIDk4Mzk0MywgNjIyOCwgNDMwNywgMzQ4MiwgMTI4NTI3LCAwLCAwLCAwLCA1MDYsIAorICAgIDc0NTczLCA0MTE5NCwgNjU3MzUsIDIwNTUsIDQzMjU1LCA0MTE5NSwgMCwgODE2OSwgOTgzNjgwLCA4ODQxLCAwLCA1MTYsIAogICAgIDkzOTc0LCAyMDYzLCAxMTkwNTEsIDM0LCAxMjg4NTAsIDEyMDE4NiwgMTE1MDQsIDE2MTIsIDc0MzMzLCAxMjAxODIsIAogICAgIDExODI3LCA3NDMwOCwgMTIwMDEsIDEyMDE3OCwgMTAyNDIsIDY0NTY0LCAxMjAxNzksIDY3OTg2LCA2NTg0LCA3NzQ5LCAKICAgICAxMTAzNywgMCwgMTc1OCwgMTI3MDkyLCAxMDY2NywgMTA1NjAsIDEyMDE5NywgOTI1OTMsIDE5MzUsIDExNTE3LCAxMjAxOTMsIAogICAgIDEyMDE5NiwgMTIwMTk1LCAxOTMxLCAxMjAxODksIDc0ODM5LCAxMjAxOTEsIDEyMTcsIDY0NzAyLCAxMjY0MywgODI1LCAKICAgICAxMjc4MzgsIDE5NDkwNSwgMTIyOTQsIDkyNDI4LCA3ODgzNCwgOTEzOCwgNzg4MzEsIDc4ODMzLCAxMjYzMSwgNzg4MjksIAogICAgIDExMDgwLCA3NDU1NCwgNjQwMDAsIDU1OTEsIDEyMzksIDAsIDExMzEzLCAwLCAzNDAzLCAwLCAwLCA2NDM2NCwgOTIyNjksIAotICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQwLCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAorICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQ5LCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAogICAgIDM0MzMsIDkyMzkzLCAxMjYxNSwgMTU5NCwgNDIxOTIsIDY5MTQsIDY3NjAzLCAwLCAxMTk1NjksIDc0NTY1LCA0MTM1MywgCiAgICAgNjc2MDIsIDY3NjExLCA0MzM3LCAwLCAxMjcyOTYsIDkxOCwgNjUwMzUsIDQxMzUxLCA3NjgxLCAxOTQ5MDAsIDQyNTc3LCAKICAgICA0MTM5MywgMTI2NjgsIDE5NDkwNCwgMjQ3NywgMTI3Mjg1LCAwLCAxMjczMDEsIDAsIDY3NjA0LCAxOTQ4ODAsIDEyNzIzNSwgCkBAIC0xOTc3NiwxNCArMTk3OTYsMTQgQEAKICAgICA3Mzc5NiwgMCwgMTE5MjI4LCAxMjAzNSwgMCwgMjgxOCwgMCwgNzQ0MTEsIDczNzkzLCAwLCA0MTcyLCAwLCAwLCA4MzczLCAKICAgICAxMDg3MywgMTIxOTcsIDAsIDAsIDkyMjY1LCA2OTcwNiwgMCwgNzgyMTAsIDAsIDEyODExMCwgMTk0ODY1LCAxMjY5ODIsIAogICAgIDc0NTYzLCA2NDgyOCwgMTE0MTksIDE5NDg2OCwgNzY2LCAxMjU3LCAwLCAxMTg4NDUsIDExMzgxLCAzMjY1LCA2NjYxNywgCi0gICAgMzI3NCwgMTI3MzY1LCAxMjY1MjMsIDk0MDQyLCA5ODM5NDEsIDc0NTIyLCA0MTk4OSwgMCwgMCwgMTI4Nzk4LCAzMjYzLCAwLCAKKyAgICAzMjc0LCAxMjczNjUsIDEyNjUyMywgOTQwNDIsIDk4Mzk1MCwgNzQ1MjIsIDQxOTg5LCAwLCAwLCAxMjg3OTgsIDMyNjMsIDAsIAogICAgIDY1NjcyLCAwLCAzMjcwLCA2NDUzOSwgMTE0ODksIDAsIDAsIDAsIDAsIDk1MDUsIDY1NTE4LCAxOTQ3NzYsIDc1NiwgCiAgICAgMTk0NjA1LCAwLCAwLCAwLCA3MjYxLCAwLCAxODYsIDAsIDExOTE1NiwgNTc3MCwgMTMxNzksIDY1ODMwLCAxMjYxMiwgCi0gICAgMTI5NDksIDY0ODU2LCAxMjgwMCwgOTgzODkyLCA3NDIwMywgNjQ3MTgsIDExNTA3LCAwLCA5MjQzNCwgMTE4OTI5LCAwLCAKKyAgICAxMjk0OSwgNjQ4NTYsIDEyODAwLCA5ODM5MDEsIDc0MjAzLCA2NDcxOCwgMTE1MDcsIDAsIDkyNDM0LCAxMTg5MjksIDAsIAogICAgIDExNTc4LCAwLCAxMTkyOTYsIDAsIDAsIDAsIDAsIDc0NTY4LCA5MjU0LCAwLCAxNzk0LCAxMjAyMTcsIDY0NTIxLCA1NjI0LCAKICAgICAxMjAyMjAsIDEyMDIyMSwgMTE5OTU4LCAxMjAyMjMsIDM2MTcsIDY2NjM2LCA2NDg4NiwgOTQwNjEsIDEyMDIxMiwgCiAgICAgMTIwMjEzLCAxMjAyMTQsIDE4NzIsIDY2NTA4LCAxMjA0NjcsIDQxMDc5LCAxMDc0OCwgNTUwMiwgMTE5MzMwLCA0NDUyLCAwLCAKLSAgICA5ODM3NjIsIDkyNTI2LCA0NTExLCAwLCA5ODM4NjgsIDY0Njc4LCAxMTQyNSwgMCwgNDMyNDUsIDEyMzEsIDE5NDc4MywgCisgICAgOTgzNzcxLCA5MjUyNiwgNDUxMSwgMCwgOTgzODc3LCA2NDY3OCwgMTE0MjUsIDAsIDQzMjQ1LCAxMjMxLCAxOTQ3ODMsIAogICAgIDY5OTAzLCAwLCA5MDAzLCA4MTkyLCAwLCA1MzA1LCA5NjUzLCAxMDYxNiwgODY5NCwgOTU0NiwgMCwgMCwgMTIwNDc4LCAKICAgICAxMjAyMDAsIDY1MjA1LCAxMjAyMDIsIDY0MDYzLCA5ODc4LCA3NDc4MCwgMTE5NjI2LCA3ODIwMiwgNjQwNTgsIDg3OTksIAogICAgIDQyMTMxLCAwLCA2NDA2MiwgMTAyOCwgNjQwNjAsIDY0MDU5LCA4MzcsIDEwNTY3LCAwLCA0MzEwMywgMCwgMTIwNzU0LCAKQEAgLTE5NzkyLDI2ICsxOTgxMiwyNiBAQAogICAgIDY0MDMyLCA0MjczNSwgNjQwMzgsIDY0MDM3LCA2NDAzNiwgNjQwMzUsIDQyOTEsIDE5NDkyOCwgNjQwMTUsIDY0MDE0LCAKICAgICA2NDY4MSwgMTk0OTMwLCAwLCA3ODE0NSwgMCwgNDMwOTAsIDAsIDM0NzYsIDg5NzMsIDY0MDEyLCA0MjQ3MywgNjQwMTAsIAogICAgIDY0MDA4LCA2NDAwNywgMjAwMywgNzcwNiwgNjQ1MTcsIDc4MTUzLCAyNTM4LCA2NDAwOSwgMjA0LCAwLCA0ODAyLCA0MTExLCAKLSAgICA4MjM5LCA5MDk4LCA0ODA1LCA2NDAwMSwgNjQwNTcsIDc4ODUsIDcyNDcsIDY0MDU0LCA5ODMyNTgsIDAsIDQ3NjcsIDkzNDMsIAorICAgIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDk4MzI2NiwgMCwgNDc2NywgOTM0MywgCiAgICAgNjQwNDksIDY0MDQ4LCAxMjAwMzQsIDExMzMsIDY0MDUzLCA2NDA1MiwgNDM0NTMsIDY0MDUwLCA0MTM0MCwgMTE4OTc1LCAKICAgICAxOTQ4MzUsIDEwMDA1LCAxMjMyOSwgNDEzMzMsIDAsIDg0ODksIDE5NDIsIDAsIDE5NDgzNCwgNDI1MjAsIDEyODI0OSwgMCwgCiAgICAgMCwgMTA3NjAsIDY0MDIzLCA2NDAyMiwgNjQwMjEsIDY1ODIsIDQzNjcwLCAwLCA2NDAyNSwgOTE2NywgNDIxNTEsIDc4MjQ0LCAKLSAgICA5ODMyMjYsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKKyAgICA5ODMyMzIsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKICAgICA3NzkxNCwgNzgyNDYsIDc4MjQ3LCAwLCA3NzkxNSwgNzg3NjYsIDY3ODgsIDEzMDk0LCA3NzkyMCwgNzUzMiwgNDE0MTQsIAogICAgIDc4NTIwLCAzMTc5LCA3ODUxOCwgNjQ3NjksIDc4NTE0LCA3ODUxNywgMTE0NjEsIDc0NDU0LCAxMDc1MSwgOTA1MSwgCi0gICAgMTIwNzIwLCA2NzA4LCAxMDUzNSwgMCwgNjgyMTgsIDU1Mjc0LCAyMDA4LCA2NDAzMSwgNjQwMzAsIDI5NCwgNDE4NzQsIDAsIAotICAgIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgNDE3ODgsIDE5NDg0NCwgMCwgNDM1MSwgCi0gICAgNjM0MywgNDMyNDcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgMTE5ODg5LCAxMTQzMywgMTE5ODk1LCAKLSAgICAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAxOTQ4MzksIDEyOTE1LCA0Mzk2OCwgMzI5NywgOTY5OSwgMTk0OTU1LCAxMTM1LCAKLSAgICAwLCAwLCAxMjg1MjUsIDE5OTUsIDY3MjIsIDk4MzkxNiwgMCwgMjU1MiwgNDE1NDYsIDYwLCA2ODM5NCwgODY0OSwgNDE1NDksIAotICAgIDc4NDk2LCA5ODMzMTksIDAsIDY2ODIsIDAsIDc4Njc5LCA2NDcxMCwgNDE1NDcsIDk4MzYyMSwgMjAxMywgMTI4MjkxLCAKLSAgICA3ODUzMCwgNzg1MzIsIDc4NTI4LCA3ODUyOSwgMTI4MzIsIDc4NDkzLCA4MDgxLCA4MzYyLCAzNTM3LCAxMTk5MDgsIDkxMzcsIAotICAgIDcxNTUsIDg5OTksIDAsIDc4NTMzLCAzNDY2LCAwLCAwLCAxOTk2LCAwLCAzNDUzLCA2MjgyLCAwLCAyMDAyLCAyMDAwLCAKLSAgICAxMjAxNzUsIDUzNywgMCwgNDE3OSwgNjUxMTksIDE5OTgsIDAsIDE4NDIsIDAsIDkyNjc0LCA5NjI4LCA2ODQ0NiwgMTIwODEsIAotICAgIDk4MjYsIDY0NTAyLCAxNzY3LCAwLCAwLCAwLCAxMjAyMDEsIDk4MzYzNywgMCwgMCwgMzA1OSwgNDQwMjQsIDEyMDIwNCwgCi0gICAgMTE5OTUzLCA5MjY5MywgMCwgMCwgOTI0NTIsIDQxMDAsIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgMzU5MiwgMTAwNzgsIDAsIAotICAgIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMTI4NzkyLCAxMDc0MiwgMCwgNDI5MTgsIDE5OTQsIDkyODEsIDMyOTYsIAotICAgIDEyODY1LCAxOTk3LCAxODk1LCAKKyAgICAxMjA3MjAsIDY3MDgsIDEwNTM1LCA5ODM2MjcsIDY4MjE4LCA1NTI3NCwgMjAwOCwgNjQwMzEsIDY0MDMwLCAyOTQsIAorICAgIDQxODc0LCAwLCAxMjY5OTEsIDY1OTI5LCAwLCAwLCAwLCAwLCA2NDAyOCwgODE0NiwgNjQwMjYsIDQxNzg4LCAxOTQ4NDQsIAorICAgIDAsIDQzNTEsIDYzNDMsIDQzMjQ3LCAxMTk4ODgsIDAsIDExOTg4NiwgMTE5ODkxLCAxMTk4OTIsIDExOTg4OSwgMTE0MzMsIAorICAgIDExOTg5NSwgMTE5ODk2LCAwLCA3ODAxLCA2NTU3OCwgMTk0ODM5LCAxMjkxNSwgNDM5NjgsIDMyOTcsIDk2OTksIDE5NDk1NSwgCisgICAgMTEzNSwgMCwgMCwgMTI4NTI1LCAxOTk1LCA2NzIyLCA5ODM5MjUsIDAsIDI1NTIsIDQxNTQ2LCA2MCwgNjgzOTQsIDg2NDksIAorICAgIDQxNTQ5LCA3ODQ5NiwgOTgzMzI3LCAwLCA2NjgyLCAwLCA3ODY3OSwgNjQ3MTAsIDQxNTQ3LCA5ODM2MzAsIDIwMTMsIAorICAgIDEyODI5MSwgNzg1MzAsIDc4NTMyLCA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgCisgICAgMTE5OTA4LCA5MTM3LCA3MTU1LCA4OTk5LCAwLCA3ODUzMywgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgCisgICAgMjAwMiwgMjAwMCwgMTIwMTc1LCA1MzcsIDAsIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCA5MjY3NCwgOTYyOCwgCisgICAgNjg0NDYsIDEyMDgxLCA5ODI2LCA2NDUwMiwgMTc2NywgMCwgMCwgMCwgMTIwMjAxLCA5ODM2NDYsIDAsIDAsIDMwNTksIAorICAgIDQ0MDI0LCAxMjAyMDQsIDExOTk1MywgOTI2OTMsIDAsIDAsIDkyNDUyLCA0MTAwLCA5MjAsIDE4MTEsIDEzNTUsIDAsIDAsIAorICAgIDM1OTIsIDEwMDc4LCAwLCAwLCAwLCA4NTkyLCA2NTg3MCwgNjgxNjQsIDEyODc5MiwgMTA3NDIsIDAsIDQyOTE4LCAxOTk0LCAKKyAgICA5MjgxLCAzMjk2LCAxMjg2NSwgMTk5NywgMTg5NSwgCiB9OwogCiAjZGVmaW5lIGNvZGVfbWFnaWMgNDcKQEAgLTE5ODE5LDcgKzE5ODM5LDcgQEAKICNkZWZpbmUgY29kZV9wb2x5IDMyNzcxCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19zdGFydCA9IDB4ZjAwMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFsaWFzZXNfZW5kID0gMHhmMDFjMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19lbmQgPSAweGYwMWM5Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lX2FsaWFzZXNbXSA9IHsKICAgICAweDAwMDAsCiAgICAgMHgwMDAwLApAQCAtMTk5ODIsNiArMjAwMDIsOCBAQAogICAgIDB4MDFBMiwKICAgICAweDAxQTMsCiAgICAgMHgwMzRGLAorICAgIDB4MDYxQywKKyAgICAweDA3MDksCiAgICAgMHgwQ0RFLAogICAgIDB4MEU5RCwKICAgICAweDBFOUYsCkBAIC0yMDAwNSw2ICsyMDAyNywxMCBAQAogICAgIDB4MjAyRiwKICAgICAweDIwNUYsCiAgICAgMHgyMDYwLAorICAgIDB4MjA2NiwKKyAgICAweDIwNjcsCisgICAgMHgyMDY4LAorICAgIDB4MjA2OSwKICAgICAweDIxMTgsCiAgICAgMHgyNDQ4LAogICAgIDB4MjQ0OSwKQEAgLTIwMDI5LDYgKzIwMDU1LDggQEAKICAgICAweEZFRkYsCiAgICAgMHhGRUZGLAogICAgIDB4RkVGRiwKKyAgICAweDEyMkQ0LAorICAgIDB4MTIyRDUsCiAgICAgMHgxRDBDNSwKICAgICAweEUwMTAwLAogICAgIDB4RTAxMDEsCkBAIC0yMDI3OCw3ICsyMDMwNiw3IEBACiB9IG5hbWVkX3NlcXVlbmNlOwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19zdGFydCA9IDB4ZjAyMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19lbmQgPSAweGYwM2E1Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lZF9zZXF1ZW5jZXNfZW5kID0gMHhmMDNhZTsKIHN0YXRpYyBjb25zdCBuYW1lZF9zZXF1ZW5jZSBuYW1lZF9zZXF1ZW5jZXNbXSA9IHsKICAgICB7MiwgezB4MDEwMCwgMHgwMzAwfX0sCiAgICAgezIsIHsweDAxMDEsIDB4MDMwMH19LApAQCAtMjAzNDksNiArMjAzNzcsMTUgQEAKICAgICB7MiwgezB4MDI1OSwgMHgwMzAxfX0sCiAgICAgezIsIHsweDAyNUEsIDB4MDMwMH19LAogICAgIHsyLCB7MHgwMjVBLCAweDAzMDF9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNjI3fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDY0OH19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2NDl9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkM2fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZDN319LAorICAgIHsyLCB7MHgwNjI2LCAweDA2Qzh9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkQwfX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZENX19LAorICAgIHsyLCB7MHgwNjQ2LCAweDA2QTl9fSwKICAgICB7MywgezB4MDk5NSwgMHgwOUNELCAweDA5Qjd9fSwKICAgICB7MiwgezB4MEI5NSwgMHgwQkNEfX0sCiAgICAgezIsIHsweDBCOTksIDB4MEJDRH19LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy94eGxpbWl0ZWQuYyBiL01vZHVsZXMveHhsaW1pdGVkLmMKaW5kZXggNjYxYjZlMi4uZWVjZGFiOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy94eGxpbWl0ZWQuYworKysgYi9Nb2R1bGVzL3h4bGltaXRlZC5jCkBAIC00NCw3ICs0NCw3IEBACiBYeG9fZGVhbGxvYyhYeG9PYmplY3QgKnNlbGYpCiB7CiAgICAgUHlfWERFQ1JFRihzZWxmLT54X2F0dHIpOwotICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICAoKGZyZWVmdW5jKVB5VHlwZV9HZXRTbG90KFB5X1RZUEUoc2VsZiksIFB5X3RwX2ZyZWUpKShzZWxmKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvemlwaW1wb3J0LmMgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCmluZGV4IDJmZWIyYTguLjhmZTkxOTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemlwaW1wb3J0LmMKKysrIGIvTW9kdWxlcy96aXBpbXBvcnQuYwpAQCAtMTQsNiArMTQsMTAgQEAKICAgICBpbnQgdHlwZTsKIH07CiAKKyNpZmRlZiBBTFRTRVAKK19QeV9JREVOVElGSUVSKHJlcGxhY2UpOworI2VuZGlmCisKIC8qIHppcF9zZWFyY2hvcmRlciBkZWZpbmVzIGhvdyB3ZSBzZWFyY2ggZm9yIGEgbW9kdWxlIGluIHRoZSBaaXAKICAgIGFyY2hpdmU6IHdlIGZpcnN0IHNlYXJjaCBmb3IgYSBwYWNrYWdlIF9faW5pdF9fLCB0aGVuIGZvcgogICAgbm9uLXBhY2thZ2UgLnB5YywgLnB5byBhbmQgLnB5IGVudHJpZXMuIFRoZSAucHljIGFuZCAucHlvIGVudHJpZXMKQEAgLTY2LDkgKzcwLDYgQEAKICAgICBQeU9iamVjdCAqcGF0aCwgKmZpbGVzLCAqdG1wOwogICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW4sIGZsZW47Ci0jaWZkZWYgQUxUU0VQCi0gICAgX1B5X0lERU5USUZJRVIocmVwbGFjZSk7Ci0jZW5kaWYKIAogICAgIGlmICghX1B5QXJnX05vS2V5d29yZHMoInppcGltcG9ydGVyKCkiLCBrd2RzKSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTE3LDYgKzExOCw4IEBACiAgICAgICAgIGlmIChmbGVuID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX1N1YnN0cmluZyhwYXRoLCAwLCBmbGVuKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoWmlwSW1wb3J0RXJyb3IsICJub3QgYSBaaXAgZmlsZSIpOwpAQCAtNDY5LDEwICs0NzIsMTMgQEAKICAgICBpZiAoaXNwYWNrYWdlKSB7CiAgICAgICAgIC8qIGFkZCBfX3BhdGhfXyB0byB0aGUgbW9kdWxlICpiZWZvcmUqIHRoZSBjb2RlIGdldHMKICAgICAgICAgICAgZXhlY3V0ZWQgKi8KLSAgICAgICAgUHlPYmplY3QgKnBrZ3BhdGgsICpmdWxscGF0aDsKLSAgICAgICAgUHlPYmplY3QgKnN1Ym5hbWUgPSBnZXRfc3VibmFtZShmdWxsbmFtZSk7CisgICAgICAgIFB5T2JqZWN0ICpwa2dwYXRoLCAqZnVsbHBhdGgsICpzdWJuYW1lOwogICAgICAgICBpbnQgZXJyOwogCisgICAgICAgIHN1Ym5hbWUgPSBnZXRfc3VibmFtZShmdWxsbmFtZSk7CisgICAgICAgIGlmIChzdWJuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIGZ1bGxwYXRoID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVJWMlVSVVIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+YXJjaGl2ZSwgU0VQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5wcmVmaXgsIHN1Ym5hbWUpOwpAQCAtNTU0LDkgKzU2MCw2IEBACiB7CiAgICAgWmlwSW1wb3J0ZXIgKnNlbGYgPSAoWmlwSW1wb3J0ZXIgKilvYmo7CiAgICAgUHlPYmplY3QgKnBhdGgsICprZXk7Ci0jaWZkZWYgQUxUU0VQCi0gICAgX1B5X0lERU5USUZJRVIocmVwbGFjZSk7Ci0jZW5kaWYKICAgICBQeU9iamVjdCAqdG9jX2VudHJ5OwogICAgIFB5X3NzaXplX3QgcGF0aF9zdGFydCwgcGF0aF9sZW4sIGxlbjsKIApAQCAtODYyLDYgKzg2NSw3IEBACiAgICAgbG9uZyBsLCBjb3VudDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgY2hhciBuYW1lW01BWFBBVEhMRU4gKyA1XTsKKyAgICBjaGFyIGR1bW15WzhdOyAvKiBCdWZmZXIgdG8gcmVhZCB1bnVzZWQgaGVhZGVyIHZhbHVlcyBpbnRvICovCiAgICAgUHlPYmplY3QgKm5hbWVvYmogPSBOVUxMOwogICAgIGNoYXIgKnAsIGVuZG9mX2NlbnRyYWxfZGlyWzIyXTsKICAgICBQeV9zc2l6ZV90IGFyY19vZmZzZXQ7ICAvKiBBYnNvbHV0ZSBvZmZzZXQgdG8gc3RhcnQgb2YgdGhlIHppcC1hcmNoaXZlLiAqLwpAQCAtODY5LDcgKzg3Myw3IEBACiAgICAgY29uc3QgY2hhciAqY2hhcnNldDsKICAgICBpbnQgYm9vdHN0cmFwOwogCi0gICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGFyY2hpdmUsICJyYiIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgImNhbid0IG9wZW4gWmlwIGZpbGU6ICVSIiwgYXJjaGl2ZSk7CkBAIC05MDUsMTcgKzkwOSwyNSBAQAogCiAgICAgLyogU3RhcnQgb2YgQ2VudHJhbCBEaXJlY3RvcnkgKi8KICAgICBjb3VudCA9IDA7CisgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0LCAwKSA9PSAtMSkKKyAgICAgICAgZ290byBmaWxlX2Vycm9yOwogICAgIGZvciAoOzspIHsKICAgICAgICAgUHlPYmplY3QgKnQ7CiAgICAgICAgIGludCBlcnI7CiAKLSAgICAgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0LCAwKSA9PSAtMSkgIC8qIFN0YXJ0IG9mIGZpbGUgaGVhZGVyICovCi0gICAgICAgICAgICBnb3RvIGZzZWVrX2Vycm9yOworICAgICAgICAvKiBTdGFydCBvZiBmaWxlIGhlYWRlciAqLwogICAgICAgICBsID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOworICAgICAgICBpZiAobCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKGwgIT0gMHgwMjAxNEI1MCkKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogQmFkOiBDZW50cmFsIERpciBGaWxlIEhlYWRlciAqLwotICAgICAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQgKyA4LCAwKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisKKyAgICAgICAgLyogT24gV2luZG93cywgY2FsbGluZyBmc2VlayB0byBza2lwIG92ZXIgdGhlIGZpZWxkcyB3ZSBkb24ndCB1c2UgaXMKKyAgICAgICAgc2xvd2VyIHRoYW4gcmVhZGluZyB0aGUgZGF0YSBpbnRvIGEgZHVtbXkgYnVmZmVyIGJlY2F1c2UgZnNlZWsgZmx1c2hlcworICAgICAgICBzdGRpbydzIGludGVybmFsIGJ1ZmZlcnMuIFNlZSBpc3N1ZSAjODc0NS4gKi8KKyAgICAgICAgaWYgKGZyZWFkKGR1bW15LCAxLCA0LCBmcCkgIT0gNCkgLyogU2tpcCB1bnVzZWQgZmllbGRzLCBhdm9pZCBmc2VlayAqLworICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOworCiAgICAgICAgIGZsYWdzID0gKHVuc2lnbmVkIHNob3J0KVB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CiAgICAgICAgIGNvbXByZXNzID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKICAgICAgICAgdGltZSA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CkBAIC05MjQsMTIgKzkzNiwxNSBAQAogICAgICAgICBkYXRhX3NpemUgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgICAgIGZpbGVfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICAgICAgbmFtZV9zaXplID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKLSAgICAgICAgaGVhZGVyX3NpemUgPSA0NiArIG5hbWVfc2l6ZSArCisgICAgICAgIGhlYWRlcl9zaXplID0gbmFtZV9zaXplICsKICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKSArCiAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7Ci0gICAgICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCArIDQyLCAwKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisgICAgICAgIGlmIChmcmVhZChkdW1teSwgMSwgOCwgZnApICE9IDgpIC8qIFNraXAgdW51c2VkIGZpZWxkcywgYXZvaWQgZnNlZWsgKi8KKyAgICAgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKICAgICAgICAgZmlsZV9vZmZzZXQgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCkgKyBhcmNfb2Zmc2V0OworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgaWYgKG5hbWVfc2l6ZSA+IE1BWFBBVEhMRU4pCiAgICAgICAgICAgICBuYW1lX3NpemUgPSBNQVhQQVRITEVOOwogCkBAIC05NDEsNyArOTU2LDkgQEAKICAgICAgICAgICAgIHArKzsKICAgICAgICAgfQogICAgICAgICAqcCA9IDA7ICAgICAgICAgLyogQWRkIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSAqLwotICAgICAgICBoZWFkZXJfb2Zmc2V0ICs9IGhlYWRlcl9zaXplOworICAgICAgICBmb3IgKDsgaSA8IGhlYWRlcl9zaXplOyBpKyspIC8qIFNraXAgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciAqLworICAgICAgICAgICAgaWYoZ2V0YyhmcCkgPT0gRU9GKSAvKiBBdm9pZCBmc2VlayAqLworICAgICAgICAgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKIAogICAgICAgICBib290c3RyYXAgPSAwOwogICAgICAgICBpZiAoZmxhZ3MgJiAweDA4MDApCkBAIC05ODgsNyArMTAwNSw3IEBACiAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyB6aXBpbXBvcnQ6IGZvdW5kICVsZCBuYW1lcyBpbiAlUlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LCBhcmNoaXZlKTsKICAgICByZXR1cm4gZmlsZXM7Ci1mc2Vla19lcnJvcjoKK2ZpbGVfZXJyb3I6CiAgICAgZmNsb3NlKGZwKTsKICAgICBQeV9YREVDUkVGKGZpbGVzKTsKICAgICBQeV9YREVDUkVGKG5hbWVvYmopOwpAQCAtMTA1NSw3ICsxMDcyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGFyY2hpdmUsICJyYiIpOwogICAgIGlmICghZnApIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCkBAIC0xMDczLDkgKzEwOTAsMTAgQEAKICAgICBsID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgIGlmIChsICE9IDB4MDQwMzRCNTApIHsKICAgICAgICAgLyogQmFkOiBMb2NhbCBGaWxlIEhlYWRlciAqLwotICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiYmFkIGxvY2FsIGZpbGUgaGVhZGVyIGluICVVIiwKLSAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBsb2NhbCBmaWxlIGhlYWRlciBpbiAlVSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSk7CiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEwODcsNiArMTEwNSwxMCBAQAogCiAgICAgbCA9IDMwICsgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKSArCiAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7ICAgICAgICAvKiBsb2NhbCBoZWFkZXIgc2l6ZSAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBmaWxlX29mZnNldCArPSBsOyAgICAgICAgICAgLyogU3RhcnQgb2YgZmlsZSBkYXRhICovCiAKICAgICBieXRlc19zaXplID0gY29tcHJlc3MgPT0gMCA/IGRhdGFfc2l6ZSA6IGRhdGFfc2l6ZSArIDE7CkBAIC0xMjQ5LDcgKzEyNzEsNyBAQAogfQogCiAvKiBHaXZlbiBhIHN0cmluZyBidWZmZXIgY29udGFpbmluZyBQeXRob24gc291cmNlIGNvZGUsIGNvbXBpbGUgaXQKLSAgIHJldHVybiBhbmQgcmV0dXJuIGEgY29kZSBvYmplY3QgYXMgYSBuZXcgcmVmZXJlbmNlLiAqLworICAgYW5kIHJldHVybiBhIGNvZGUgb2JqZWN0IGFzIGEgbmV3IHJlZmVyZW5jZS4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBjb21waWxlX3NvdXJjZShQeU9iamVjdCAqcGF0aG5hbWUsIFB5T2JqZWN0ICpzb3VyY2UpCiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nIGIvTW9kdWxlcy96bGliL0NoYW5nZUxvZwppbmRleCBmMzEwYmIwLi5mMjJhYWJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCisrKyBiL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKQEAgLTEsMTIgKzEsMjc2IEBACiAKICAgICAgICAgICAgICAgICBDaGFuZ2VMb2cgZmlsZSBmb3IgemxpYgogCitDaGFuZ2VzIGluIDEuMi44ICgyOCBBcHIgMjAxMykKKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMgZm9yIFdpbmRvd3MgUlQgW1ZvbGxhbnRdCistIERvIG5vdCBmb3JjZSBaX0NPTlNUIGZvciBDKysKKy0gQ2xlYW4gdXAgY29udHJpYi92c3R1ZGlvIFtSb6ddCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gemxpYi5oCistIEZpeCBtaXhlZCBsaW5lIGVuZGluZ3MgaW4gY29udHJpYi92c3R1ZGlvCisKK0NoYW5nZXMgaW4gMS4yLjcuMyAoMTMgQXByIDIwMTMpCistIEZpeCB2ZXJzaW9uIG51bWJlcnMgYW5kIERMTCBuYW1lcyBpbiBjb250cmliL3ZzdHVkaW8vKi96bGliLnJjCisKK0NoYW5nZXMgaW4gMS4yLjcuMiAoMTMgQXByIDIwMTMpCistIENoYW5nZSBjaGVjayBmb3IgYSBmb3VyLWJ5dGUgdHlwZSBiYWNrIHRvIGhleGFkZWNpbWFsCistIEZpeCB0eXBvIGluIHdpbjMyL01ha2VmaWxlLm1zYworLSBBZGQgY2FzdHMgaW4gZ3p3cml0ZS5jIGZvciBwb2ludGVyIGRpZmZlcmVuY2VzCisKK0NoYW5nZXMgaW4gMS4yLjcuMSAoMjQgTWFyIDIwMTMpCistIFJlcGxhY2UgdXNlIG9mIHVuc2FmZSBzdHJpbmcgZnVuY3Rpb25zIHdpdGggc25wcmludGYgaWYgYXZhaWxhYmxlCistIEF2b2lkIGluY2x1ZGluZyBzdGRkZWYuaCBvbiBXaW5kb3dzIGZvciBaX1NPTE8gY29tcGlsZSBbTmllc3NpbmtdCistIEZpeCBnemdldGMgdW5kZWZpbmUgd2hlbiBaX1BSRUZJWCBzZXQgW1R1cmtdCistIEVsaW1pbmF0ZSB1c2Ugb2YgbWt0ZW1wIGluIE1ha2VmaWxlIChub3QgYWx3YXlzIGF2YWlsYWJsZSkKKy0gRml4IGJ1ZyBpbiAnRicgbW9kZSBmb3IgZ3pvcGVuKCkKKy0gQWRkIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgZnVuY3Rpb24KKy0gQ29ycmVjdCBjb21tZW50IGluIGRlZmxhdGUuaAorLSBVc2UgX3NucHJpbnRmIGZvciBzbnByaW50ZiBpbiBNaWNyb3NvZnQgQworLSBPbiBEYXJ3aW4sIG9ubHkgdXNlIC91c3IvYmluL2xpYnRvb2wgaWYgbGlidG9vbCBpcyBub3QgQXBwbGUKKy0gRGVsZXRlICItLXZlcnNpb24iIGZpbGUgaWYgY3JlYXRlZCBieSAiYXIgLS12ZXJzaW9uIiBbUmljaGFyZCBHLl0KKy0gRml4IGNvbmZpZ3VyZSBjaGVjayBmb3IgdmVyYWNpdHkgb2YgY29tcGlsZXIgZXJyb3IgcmV0dXJuIGNvZGVzCistIEZpeCBDTWFrZSBjb21waWxhdGlvbiBvZiBzdGF0aWMgbGliIGZvciBNU1ZDMjAxMCB4NjQKKy0gUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpbiBpbmZiYWNrOS5jCistIEZpeCBhcmd1bWVudCBjaGVja3MgaW4gZ3psb2dfY29tcHJlc3MoKSBhbmQgZ3psb2dfd3JpdGUoKQorLSBDbGVhbiB1cCB0aGUgdXNhZ2Ugb2Ygel9jb25zdCBhbmQgcmVzcGVjdCBjb25zdCB1c2FnZSB3aXRoaW4gemxpYgorLSBDbGVhbiB1cCBleGFtcGxlcy9nemxvZy5bY2hdIGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudCB0eXBlcworLSBBdm9pZCBzaGlmdCBlcXVhbCB0byBiaXRzIGluIHR5cGUgKGNhdXNlZCBlbmRsZXNzIGxvb3ApCistIEZpeCB1bmludGlhbGl6ZWQgdmFsdWUgYnVnIGluIGd6cHV0YygpIGludHJvZHVjZWQgYnkgY29uc3QgcGF0Y2hlcworLSBGaXggbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgaW4gZXhhbXBsZXMvenJhbi5jIFtOb3JdCistIEZpeCBidWcgd2hlcmUgZ3pvcGVuKCksIGd6Y2xvc2UoKSB3b3VsZCB3cml0ZSBhbiBlbXB0eSBmaWxlCistIEZpeCBidWcgaW4gZ3pjbG9zZSgpIHdoZW4gZ3p3cml0ZSgpIHJ1bnMgb3V0IG9mIG1lbW9yeQorLSBDaGVjayBmb3IgaW5wdXQgYnVmZmVyIG1hbGxvYyBmYWlsdXJlIGluIGV4YW1wbGVzL2d6YXBwZW5kLmMKKy0gQWRkIG5vdGUgdG8gY29udHJpYi9ibGFzdCB0byB1c2UgYmluYXJ5IG1vZGUgaW4gc3RkaW8KKy0gRml4IGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudGx5IHNpZ25lZCBpbnRlZ2VycyBpbiBjb250cmliL2JsYXN0CistIENoZWNrIGZvciBpbnZhbGlkIGNvZGUgbGVuZ3RoIGNvZGVzIGluIGNvbnRyaWIvcHVmZgorLSBGaXggc2VyaW91cyBidXQgdmVyeSByYXJlIGRlY29tcHJlc3Npb24gYnVnIGluIGluZnRyZWVzLmMKKy0gVXBkYXRlIGluZmxhdGVCYWNrKCkgY29tbWVudHMsIHNpbmNlIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyCistIFVzZSB1bmRlcnNjb3JlZCBJL08gZnVuY3Rpb24gbmFtZXMgZm9yIFdJTkFQSV9GQU1JTFkKKy0gQWRkIF90cl9mbHVzaF9iaXRzIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzIHByZWZpeGVkIGJ5IC0tenByZWZpeAorLSBBZGQgY29udHJpYi92c3R1ZGlvL3ZjMTAgcHJlLWJ1aWxkIHN0ZXAgZm9yIHN0YXRpYyBvbmx5CistIFF1b3RlIC0tdmVyc2lvbi1zY3JpcHQgYXJndW1lbnQgaW4gQ01ha2VMaXN0cy50eHQKKy0gRG9uJ3Qgc3BlY2lmeSAtLXZlcnNpb24tc2NyaXB0IG9uIEFwcGxlIHBsYXRmb3JtcyBpbiBDTWFrZUxpc3RzLnR4dAorLSBGaXggY2FzdGluZyBlcnJvciBpbiBjb250cmliL3Rlc3R6bGliL3Rlc3R6bGliLmMKKy0gRml4IHR5cGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBtYXRjaCByZXN1bHQgb2YgZ2V0X2NyY190YWJsZSgpCistIFNpbXBsaWZ5IGNvbnRyaWIvdnN0dWRpby92YzEwIHdpdGggJ2QnIHN1ZmZpeAorLSBBZGQgVE9QIHN1cHBvcnQgdG8gd2luMzIvTWFrZWZpbGUubXNjCistIFN1cG9ydCBpNjg2IGFuZCBhbWQ2NCBhc3NlbWJsZXIgYnVpbGRzIGluIENNYWtlTGlzdHMudHh0CistIEZpeCB0eXBvcyBpbiB0aGUgdXNlIG9mIF9MQVJHRUZJTEU2NF9TT1VSQ0UgaW4gemNvbmYuaAorLSBBZGQgdmMxMSBhbmQgdmMxMiBidWlsZCBmaWxlcyB0byBjb250cmliL3ZzdHVkaW8KKy0gQWRkIGd6dnByaW50ZigpIGFzIGFuIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBpbiB6bGliCistIEZpeCBjb25maWd1cmUgZm9yIFN1biBzaGVsbAorLSBSZW1vdmUgcnVudGltZSBjaGVjayBpbiBjb25maWd1cmUgZm9yIGZvdXItYnl0ZSBpbnRlZ2VyIHR5cGUKKy0gQWRkIGNhc3RzIGFuZCBjb25zdHMgdG8gZWFzZSB1c2VyIGNvbnZlcnNpb24gdG8gQysrCistIEFkZCBtYW4gcGFnZXMgZm9yIG1pbml6aXAgYW5kIG1pbml1bnppcAorLSBJbiBNYWtlZmlsZSB1bmluc3RhbGwsIGRvbid0IHJtIGlmIHByZWNlZGluZyBjZCBmYWlscworLSBEbyBub3QgcmV0dXJuIFpfQlVGX0VSUk9SIGlmIGRlZmxhdGVQYXJhbSgpIGhhcyBub3RoaW5nIHRvIHdyaXRlCisKK0NoYW5nZXMgaW4gMS4yLjcgKDIgTWF5IDIwMTIpCistIFJlcGxhY2UgdXNlIG9mIG1lbW1vdmUoKSB3aXRoIGEgc2ltcGxlIGNvcHkgZm9yIHBvcnRhYmlsaXR5CistIFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBzdHJlcnJvcgorLSBSZXN0b3JlIGd6Z2V0Y18gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCAxLjIuNgorLSBGaXggYnVpbGQgd2l0aCBub24tR05VIG1ha2Ugb24gU29sYXJpcworLSBSZXF1aXJlIGdjYyA0LjAgb3IgbGF0ZXIgb24gTWFjIE9TIFggdG8gdXNlIHRoZSBoaWRkZW4gYXR0cmlidXRlCistIEluY2x1ZGUgdW5pc3RkLmggZm9yIFdhdGNvbSBDCistIFVzZSBfX1dBVENPTUNfXyBpbnN0ZWFkIG9mIF9fV0FUQ09NX18KKy0gRG8gbm90IHVzZSB0aGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaWYgTk9fVklaIGRlZmluZWQKKy0gSW1wcm92ZSB0aGUgZGV0ZWN0aW9uIG9mIG5vIGhpZGRlbiB2aXNpYmlsaXR5IGF0dHJpYnV0ZQorLSBBdm9pZCB1c2luZyBfX2ludDY0IGZvciBnY2Mgb3Igc29sbyBjb21waWxhdGlvbgorLSBDYXN0IHRvIGNoYXIgKiBpbiBnenByaW50ZiB0byBhdm9pZCB3YXJuaW5ncyBbWmluc2VyXQorLSBGaXggbWFrZV92bXMuY29tIGZvciBWQVggW1ppbnNlcl0KKy0gRG9uJ3QgdXNlIGxpYnJhcnkgb3IgYnVpbHQtaW4gYnl0ZSBzd2FwcworLSBTaW1wbGlmeSB0ZXN0IGFuZCB1c2Ugb2YgZ2NjIGhpZGRlbiBhdHRyaWJ1dGUKKy0gRml4IGJ1ZyBpbiBnemNsb3NlX3coKSB3aGVuIGd6d3JpdGUoKSBmYWlscyB0byBhbGxvY2F0ZSBtZW1vcnkKKy0gQWRkICJ4IiAoT19FWENMKSBhbmQgImUiIChPX0NMT0VYRUMpIG1vZGVzIHN1cHBvcnQgdG8gZ3pvcGVuKCkKKy0gRml4IGJ1ZyBpbiB0ZXN0L21pbmlnemlwLmMgZm9yIGNvbmZpZ3VyZSAtLXNvbG8KKy0gRml4IGNvbnRyaWIvdnN0dWRpbyBwcm9qZWN0IGxpbmsgZXJyb3JzIFtNb2hhbmF0aGFzXQorLSBBZGQgYWJpbGl0eSB0byBjaG9vc2UgdGhlIGJ1aWxkZXIgaW4gbWFrZV92bXMuY29tIFtTY2h3ZWRhXQorLSBBZGQgREVTVERJUiBzdXBwb3J0IHRvIG1pbmd3MzIgd2luMzIvTWFrZWZpbGUuZ2NjCistIEZpeCBjb21tZW50cyBpbiB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIHByb3BlciB1c2FnZQorLSBBbGxvdyBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb25zIGZvciBjbWFrZQorLSBHZW5lcmF0ZSBhbmQgaW5zdGFsbCB0aGUgcGtnLWNvbmZpZyBmaWxlIHdpdGggY21ha2UKKy0gQnVpbGQgYm90aCBhIHN0YXRpYyBhbmQgYSBzaGFyZWQgdmVyc2lvbiBvZiB6bGliIHdpdGggY21ha2UKKy0gSW5jbHVkZSB2ZXJzaW9uIHN5bWJvbHMgZm9yIGNtYWtlIGJ1aWxkcworLSBJZiB1c2luZyBjbWFrZSB3aXRoIE1TVkMsIGFkZCB0aGUgc291cmNlIGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZXMKKy0gUmVtb3ZlIHVubmVlZGVkIEVYVFJBX0NGTEFHUyBmcm9tIHdpbjMyL01ha2VmaWxlLmdjYyBbVHJ1dGFdCistIE1vdmUgb2Jzb2xldGUgZW14IG1ha2VmaWxlIHRvIG9sZCBbVHJ1dGFdCistIEFsbG93IHRoZSB1c2Ugb2YgLVd1bmRlZiB3aGVuIGNvbXBpbGluZyBvciB1c2luZyB6bGliCistIEF2b2lkIHRoZSB1c2Ugb2YgdGhlIC11IG9wdGlvbiB3aXRoIG1rdGVtcAorLSBJbXByb3ZlIGluZmxhdGUoKSBkb2N1bWVudGF0aW9uIG9uIHRoZSB1c2Ugb2YgWl9GSU5JU0gKKy0gUmVjb2duaXplIGNsYW5nIGFzIGdjYworLSBBZGQgZ3pvcGVuX3coKSBpbiBXaW5kb3dzIGZvciB3aWRlIGNoYXJhY3RlciBwYXRoIG5hbWVzCistIFJlbmFtZSB6Y29uZi5oIGluIENNYWtlTGlzdHMudHh0IHRvIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkKKy0gQWRkIHNvdXJjZSBkaXJlY3RvcnkgaW4gQ01ha2VMaXN0cy50eHQgZm9yIGJ1aWxkaW5nIGV4YW1wbGVzCistIExvb2sgaW4gYnVpbGQgZGlyZWN0b3J5IGZvciB6bGliLnBjIGluIENNYWtlTGlzdHMudHh0CistIFJlbW92ZSBnemZsYWdzIGZyb20gemxpYnZjLmRlZiBpbiB2YzkgYW5kIHZjMTAKKy0gRml4IGNvbnRyaWIvbWluaXppcCBjb21waWxhdGlvbiBpbiB0aGUgTWluR1cgZW52aXJvbm1lbnQKKy0gVXBkYXRlIC4vY29uZmlndXJlIGZvciBTb2xhcmlzLCBzdXBwb3J0IC0tNjQgW01vb25leV0KKy0gUmVtb3ZlIC1SLiBmcm9tIFNvbGFyaXMgc2hhcmVkIGJ1aWxkIChwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZSkKKy0gQXZvaWQgcmFjZSBjb25kaXRpb24gZm9yIHBhcmFsbGVsIG1ha2UgKC1qKSBydW5uaW5nIGV4YW1wbGUKKy0gRml4IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiBnZXRfY3JjX3RhYmxlKCkgYW5kIGNyY190YWJsZQorLSBGaXggcGFyc2luZyBvZiB2ZXJzaW9uIHdpdGggIi0iIGluIENNYWtlTGlzdHMudHh0IFtTbmlkZXIsIFppZWdsZXJdCistIEZpeCB0aGUgcGF0aCB0byB6bGliLm1hcCBpbiBDTWFrZUxpc3RzLnR4dAorLSBGb3JjZSB0aGUgbmF0aXZlIGxpYnRvb2wgaW4gTWFjIE9TIFggdG8gYXZvaWQgR05VIGxpYnRvb2wgW0JlZWJlXQorLSBBZGQgaW5zdHJ1Y3Rpb25zIHRvIHdpbjMyL01ha2VmaWxlLmdjYyBmb3Igc2hhcmVkIGluc3RhbGwgW1RvcnJpXQorCitDaGFuZ2VzIGluIDEuMi42LjEgKDEyIEZlYiAyMDEyKQorLSBBdm9pZCB0aGUgdXNlIG9mIHRoZSBPYmplY3RpdmUtQyByZXNlcnZlZCBuYW1lICJpZCIKKy0gSW5jbHVkZSBpby5oIGluIGd6Z3V0cy5oIGZvciBNaWNyb3NvZnQgY29tcGlsZXJzCistIEZpeCBwcm9ibGVtIHdpdGggLi9jb25maWd1cmUgLS1wcmVmaXggYW5kIGd6Z2V0YyBtYWNybworLSBJbmNsdWRlIGd6X2hlYWRlciBkZWZpbml0aW9uIHdoZW4gY29tcGlsaW5nIHpsaWIgc29sbworLSBQdXQgZ3pmbGFncygpIGZ1bmN0aW9uYWxpdHkgYmFjayBpbiB6dXRpbC5jCistIEF2b2lkIGxpYnJhcnkgaGVhZGVyIGluY2x1ZGUgaW4gY3JjMzIuYyBmb3IgWl9TT0xPCistIFVzZSBuYW1lIGluIEdDQ19DTEFTU0lDIGFzIEMgY29tcGlsZXIgZm9yIGNvdmVyYWdlIHRlc3RpbmcsIGlmIHNldAorLSBNaW5vciBjbGVhbnVwIGluIGNvbnRyaWIvbWluaXppcC96aXAuYyBbVm9sbGFudF0KKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBbWmluc2VyXQorLSBSZW1vdmUgdW5uZWNlc3NhcnkgZ3pnZXRjXyBmdW5jdGlvbgorLSBVc2Ugb3B0aW1pemVkIGJ5dGUgc3dhcCBvcGVyYXRpb25zIGZvciBNaWNyb3NvZnQgYW5kIEdOVSBbU255ZGVyXQorLSBGaXggbWlub3IgdHlwbyBpbiB6bGliLmggY29tbWVudHMgW1J6ZXNuaW93aWVja2ldCisKK0NoYW5nZXMgaW4gMS4yLjYgKDI5IEphbiAyMDEyKQorLSBVcGRhdGUgdGhlIFBhc2NhbCBpbnRlcmZhY2UgaW4gY29udHJpYi9wYXNjYWwKKy0gRml4IGZ1bmN0aW9uIG51bWJlcnMgZm9yIGd6Z2V0Y18gaW4gemxpYnZjLmRlZiBmaWxlcworLSBGaXggY29uZmlndXJlLmFjIGZvciBjb250cmliL21pbml6aXAgW1NjaGlmZmVyXQorLSBGaXggbGFyZ2UtZW50cnkgZGV0ZWN0aW9uIGluIG1pbml6aXAgb24gNjQtYml0IHN5c3RlbXMgW1NjaGlmZmVyXQorLSBIYXZlIC4vY29uZmlndXJlIHVzZSB0aGUgY29tcGlsZXIgcmV0dXJuIGNvZGUgZm9yIGVycm9yIGluZGljYXRpb24KKy0gRml4IENNYWtlTGlzdHMudHh0IGZvciBjcm9zcyBjb21waWxhdGlvbiBbTWNDbHVyZV0KKy0gRml4IGNvbnRyaWIvbWluaXppcC96aXAuYyBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMgW0RhbHNuZXNdCistIEZpeCBjb21waWxhdGlvbiBvZiBjb250cmliL21pbml6aXAgb24gRnJlZUJTRCBbTWFycXVlel0KKy0gQ29ycmVjdCBzdWdnZXN0ZWQgdXNhZ2VzIGluIHdpbjMyL01ha2VmaWxlLm1zYyBbU2hhY2hhciwgSG9ydmF0aF0KKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDIG9uIGFsbCBwbGF0Zm9ybXMgW1RydXRhXQorLSBNYWtlIHZlcnNpb24gZXhwbGljaXQgaW4gY29udHJpYi9taW5pemlwL2NvbmZpZ3VyZS5hYyBbQm9zbWFuc10KKy0gQXZvaWQgd2FybmluZyBmb3Igbm8gZW5jcnlwdGlvbiBpbiBjb250cmliL21pbml6aXAvemlwLmMgW1ZvbGxhbnRdCistIE1pbm9yIGNsZWFudXAgdXAgY29udHJpYi9taW5pemlwL3VuemlwLmMgW1ZvbGxhbnRdCistIEZpeCBidWcgd2hlbiBjb21waWxpbmcgbWluaXppcCB3aXRoIEMrKyBbVm9sbGFudF0KKy0gUHJvdGVjdCBmb3IgbG9uZyBuYW1lIGFuZCBleHRyYSBmaWVsZHMgaW4gY29udHJpYi9taW5pemlwIFtWb2xsYW50XQorLSBBdm9pZCBzb21lIHdhcm5pbmdzIGluIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gQWRkIC1JLi4vLi4gLUwuLi8uLiB0byBDRkxBR1MgZm9yIG1pbml6aXAgYW5kIG1pbml1bnppcAorLSBBZGQgbWlzc2luZyBsaWJzIHRvIG1pbml6aXAgbGlua2VyIGNvbW1hbmQKKy0gQWRkIHN1cHBvcnQgZm9yIFZQQVRIIGJ1aWxkcyBpbiBjb250cmliL21pbml6aXAKKy0gQWRkIGFuIC0tZW5hYmxlLWRlbW9zIG9wdGlvbiB0byBjb250cmliL21pbml6aXAvY29uZmlndXJlCistIEFkZCB0aGUgZ2VuZXJhdGlvbiBvZiBjb25maWd1cmUubG9nIGJ5IC4vY29uZmlndXJlCistIEV4aXQgd2hlbiByZXF1aXJlZCBwYXJhbWV0ZXJzIG5vdCBwcm92aWRlZCB0byB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gSGF2ZSBnenB1dGMgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgd3JpdHRlbiBpbnN0ZWFkIG9mIHRoZSBhcmd1bWVudAorLSBVc2UgdGhlIC1tIG9wdGlvbiBvbiBsZGNvbmZpZyBmb3IgQlNEIHN5c3RlbXMgW1RvYmlhc10KKy0gQ29ycmVjdCBpbiB6bGliLm1hcCB3aGVuIGRlZmxhdGVSZXNldEtlZXAgd2FzIGFkZGVkCisKK0NoYW5nZXMgaW4gMS4yLjUuMyAoMTUgSmFuIDIwMTIpCistIFJlc3RvcmUgZ3pnZXRjIGZ1bmN0aW9uIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eQorLSBEbyBub3QgdXNlIF9sc2Vla2k2NCB1bmRlciBCb3JsYW5kIEMrKyBbVHJ1dGFdCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5tc2MgdG8gYnVpbGQgdGVzdC8qLmMgW1RydXRhXQorLSBSZW1vdmUgb2xkL3Zpc3VhbGM2IGdpdmVuIENNYWtlZmlsZSBhbmQgb3RoZXIgYWx0ZXJuYXRpdmVzCistIFVwZGF0ZSBBUzQwMCBidWlsZCBmaWxlcyBhbmQgZG9jdW1lbnRhdGlvbiBbTW9ubmVyYXRdCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5nY2MgdG8gYnVpbGQgdGVzdC8qLmMgW1RydXRhXQorLSBQZXJtaXQgc3Ryb25nZXIgZmx1c2hlcyBhZnRlciBaX0JMT0NLIGZsdXNoZXMKKy0gQXZvaWQgZXh0cmFuZW91cyBlbXB0eSBibG9ja3Mgd2hlbiBkb2luZyBlbXB0eSBmbHVzaGVzCistIFBlcm1pdCBaX05VTEwgYXJndW1lbnRzIHRvIGRlZmxhdGVQZW5kaW5nCistIEFsbG93IGRlZmxhdGVQcmltZSgpIHRvIGluc2VydCBiaXRzIGluIHRoZSBtaWRkbGUgb2YgYSBzdHJlYW0KKy0gUmVtb3ZlIHNlY29uZCBlbXB0eSBzdGF0aWMgYmxvY2sgZm9yIFpfUEFSVElBTF9GTFVTSAorLSBXcml0ZSBvdXQgYWxsIG9mIHRoZSBhdmFpbGFibGUgYml0cyB3aGVuIHVzaW5nIFpfQkxPQ0sKKy0gSW5zZXJ0IHRoZSBmaXJzdCB0d28gc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBhZnRlciBhIGZsdXNoCisKK0NoYW5nZXMgaW4gMS4yLjUuMiAoMTcgRGVjIDIwMTEpCistIGZpeCBsZCBlcnJvcjogdW5hYmxlIHRvIGZpbmQgdmVyc2lvbiBkZXBlbmRlbmN5ICdaTElCXzEuMi41JworLSB1c2UgcmVsYXRpdmUgc3ltbGlua3MgZm9yIHNoYXJlZCBsaWJzCistIEF2b2lkIHNlYXJjaGluZyBwYXN0IHdpbmRvdyBmb3IgWl9STEUgc3RyYXRlZ3kKKy0gQXNzdXJlIHRoYXQgaGlnaC13YXRlciBtYXJrIGluaXRpYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGluIGRlZmxhdGUKKy0gQWRkIGFzc2VydGlvbnMgdG8gZmlsbF93aW5kb3coKSBpbiBkZWZsYXRlLmMgdG8gbWF0Y2ggY29tbWVudHMKKy0gVXBkYXRlIHB5dGhvbiBsaW5rIGluIFJFQURNRQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIGd6cmVhZC5jCistIEZpeCBidWcgaW4gZ3pnZXRzKCkgZm9yIGEgY29uY2F0ZW5hdGVkIGVtcHR5IGd6aXAgc3RyZWFtCistIENvcnJlY3QgZXJyb3IgaW4gY29tbWVudCBmb3IgZ3pfbWFrZSgpCistIENoYW5nZSBnenJlYWQoKSBhbmQgcmVsYXRlZCB0byBpZ25vcmUganVuayBhZnRlciBnemlwIHN0cmVhbXMKKy0gQWxsb3cgZ3pyZWFkKCkgYW5kIHJlbGF0ZWQgdG8gY29udGludWUgYWZ0ZXIgZ3pjbGVhcmVycigpCistIEFsbG93IGd6cmV3aW5kKCkgYW5kIGd6c2VlaygpIGFmdGVyIGEgcHJlbWF0dXJlIGVuZC1vZi1maWxlCistIFNpbXBsaWZ5IGd6c2VlaygpIG5vdyB0aGF0IHJhdyBhZnRlciBnemlwIGlzIGlnbm9yZWQKKy0gQ2hhbmdlIGd6Z2V0YygpIHRvIGEgbWFjcm8gZm9yIHNwZWVkICh+NDAlIHNwZWVkdXAgaW4gdGVzdGluZykKKy0gRml4IGd6Y2xvc2UoKSB0byByZXR1cm4gdGhlIGFjdHVhbCBlcnJvciBsYXN0IGVuY291bnRlcmVkCistIEFsd2F5cyBhZGQgbGFyZ2UgZmlsZSBzdXBwb3J0IGZvciB3aW5kb3dzCistIEluY2x1ZGUgemNvbmYuaCBmb3Igd2luZG93cyBsYXJnZSBmaWxlIHN1cHBvcnQKKy0gSW5jbHVkZSB6Y29uZi5oLmNtYWtlaW4gZm9yIHdpbmRvd3MgbGFyZ2UgZmlsZSBzdXBwb3J0CistIFVwZGF0ZSB6Y29uZi5oLmNtYWtlaW4gb24gbWFrZSBkaXN0Y2xlYW4KKy0gTWVyZ2UgdmVzdGlnaWFsIHZzbnByaW50ZiBkZXRlcm1pbmF0aW9uIGZyb20genV0aWwuaCB0byBnemd1dHMuaAorLSBDbGFyaWZ5IGhvdyBnem9wZW4oKSBhcHBlbmRzIGluIHpsaWIuaCBjb21tZW50cworLSBDb3JyZWN0IGRvY3VtZW50YXRpb24gb2YgZ3pkaXJlY3QoKSBzaW5jZSBqdW5rIGF0IGVuZCBub3cgaWdub3JlZAorLSBBZGQgYSB0cmFuc3BhcmVudCB3cml0ZSBtb2RlIHRvIGd6b3BlbigpIHdoZW4gJ1QnIGlzIGluIHRoZSBtb2RlCistIFVwZGF0ZSBweXRob24gbGluayBpbiB6bGliIG1hbiBwYWdlCistIEdldCBpbmZmaXhlZC5oIGFuZCBNQUtFRklYRUQgcmVzdWx0IHRvIG1hdGNoCistIEFkZCBhIC4vY29uZmlnIC0tc29sbyBvcHRpb24gdG8gbWFrZSB6bGliIHN1YnNldCB3aXRoIG5vIGxpYmFyeSB1c2UKKy0gQWRkIHVuZG9jdW1lbnRlZCBpbmZsYXRlUmVzZXRLZWVwKCkgZnVuY3Rpb24gZm9yIENBQiBmaWxlIGRlY29kaW5nCistIEFkZCAtLWNvdmVyIG9wdGlvbiB0byAuL2NvbmZpZ3VyZSBmb3IgZ2NjIGNvdmVyYWdlIHRlc3RpbmcKKy0gQWRkICNkZWZpbmUgWkxJQl9DT05TVCBvcHRpb24gdG8gdXNlIGNvbnN0IGluIHRoZSB6X3N0cmVhbSBpbnRlcmZhY2UKKy0gQWRkIGNvbW1lbnQgdG8gZ3pkb3BlbigpIGluIHpsaWIuaCB0byB1c2UgZHVwKCkgd2hlbiB1c2luZyBmaWxlbm8oKQorLSBOb3RlIGJlaGF2aW9yIG9mIHVuY29tcHJlc3MoKSB0byBwcm92aWRlIGFzIG11Y2ggZGF0YSBhcyBpdCBjYW4KKy0gQWRkIGZpbGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBhaWQgaW4gYnVpbGRpbmcgbGlibWluaXppcAorLSBTcGxpdCBvZmYgQVIgb3B0aW9ucyBpbiBNYWtlZmlsZS5pbiBhbmQgY29uZmlndXJlCistIENoYW5nZSBPTiBtYWNybyB0byBaX0FSRyB0byBhdm9pZCBhcHBsaWNhdGlvbiBjb25mbGljdHMKKy0gRmFjaWxpdGF0ZSBjb21waWxhdGlvbiB3aXRoIEJvcmxhbmQgQysrIGZvciBwcmFnbWFzIGFuZCB2c25wcmludGYKKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDKysKKy0gTW92ZSBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMgdG8gdGVzdC8KKy0gU2ltcGxpZnkgaW5jb21wbGV0ZSBjb2RlIHRhYmxlIGZpbGxpbmcgaW4gaW5mbGF0ZV90YWJsZSgpCistIFJlbW92ZSBjb2RlIGZyb20gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUKKy0gVGVzdCB0aGUgaW5mbGF0ZSBjb2RlIHdpdGggZnVsbCBjb3ZlcmFnZQorLSBBbGxvdyBkZWZsYXRlU2V0RGljdGlvbmFyeSwgaW5mbGF0ZVNldERpY3Rpb25hcnkgYXQgYW55IHRpbWUgKGluIHJhdykKKy0gQWRkIGRlZmxhdGVSZXNldEtlZXAgYW5kIGZpeCBpbmZsYXRlUmVzZXRLZWVwIHRvIHJldGFpbiBkaWN0aW9uYXJ5CistIEZpeCBnendyaXRlLmMgdG8gYWNjb21tb2RhdGUgcmVkdWNlZCBtZW1vcnkgemxpYiBjb21waWxhdGlvbgorLSBIYXZlIGluZmxhdGUoKSB3aXRoIFpfRklOSVNIIGF2b2lkIHRoZSBhbGxvY2F0aW9uIG9mIGEgd2luZG93CistIERvIG5vdCBzZXQgc3RybS0+YWRsZXIgd2hlbiBkb2luZyByYXcgaW5mbGF0ZQorLSBGaXggZ3plb2YoKSB0byBiZWhhdmUganVzdCBsaWtlIGZlb2YoKSB3aGVuIHJlYWQgaXMgbm90IHBhc3QgZW5kIG9mIGZpbGUKKy0gRml4IGJ1ZyBpbiBnenJlYWQuYyB3aGVuIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQKKy0gQXZvaWQgdXNlIG9mIFpfQlVGX0VSUk9SIGluIGd6KiBmdW5jdGlvbnMgZXhjZXB0IGZvciBwcmVtYXR1cmUgRU9GCistIERvY3VtZW50IGd6cmVhZCgpIGNhcGFiaWxpdHkgdG8gcmVhZCBjb25jdXJyZW50bHkgd3JpdHRlbiBmaWxlcworLSBSZW1vdmUgaGFyZC1jb2Rpbmcgb2YgcmVzb3VyY2UgY29tcGlsZXIgaW4gQ01ha2VMaXN0cy50eHQgW0JsYW1tb10KKworQ2hhbmdlcyBpbiAxLjIuNS4xICgxMCBTZXAgMjAxMSkKKy0gVXBkYXRlIEZBUSBlbnRyeSBvbiBzaGFyZWQgYnVpbGRzICgjMTMpCistIEF2b2lkIHN5bWJvbGljIGFyZ3VtZW50IHRvIGNobW9kIGluIE1ha2VmaWxlLmluCistIEZpeCBidWcgYW5kIGFkZCBjb25zdHMgaW4gY29udHJpYi9wdWZmIFtPYmVyaHVtZXJdCistIFVwZGF0ZSBjb250cmliL3B1ZmYvemVyb3MucmF3IHRlc3QgZmlsZSB0byBoYXZlIGFsbCBibG9jayB0eXBlcworLSBBZGQgZnVsbCBjb3ZlcmFnZSB0ZXN0IGZvciBwdWZmIGluIGNvbnRyaWIvcHVmZi9NYWtlZmlsZQorLSBGaXggc3RhdGljLW9ubHktYnVpbGQgaW5zdGFsbCBpbiBNYWtlZmlsZS5pbgorLSBGaXggYnVnIGluIHVuekdldEN1cnJlbnRGaWxlSW5mbygpIGluIGNvbnRyaWIvbWluaXppcCBbS3Vub10KKy0gQWRkIGxpYnouYSBkZXBlbmRlbmN5IHRvIHNoYXJlZCBpbiBNYWtlZmlsZS5pbiBmb3IgcGFyYWxsZWwgYnVpbGRzCistIFNwZWxsIG91dCAibnVtYmVyIiAoaW5zdGVhZCBvZiAibmIiKSBpbiB6bGliLmggZm9yIHRvdGFsX2luLCB0b3RhbF9vdXQKKy0gUmVwbGFjZSAkKC4uLikgd2l0aCBgLi4uYCBpbiBjb25maWd1cmUgZm9yIG5vbi1iYXNoIHNoIFtCb3dsZXJdCistIEFkZCBkYXJ3aW4qIHRvIERhcndpbiogYW5kIHNvbGFyaXMqIHRvIFN1bk9TXCA1KiBpbiBjb25maWd1cmUgW0dyb2ZmZW5dCistIEFkZCBzb2xhcmlzKiB0byBMaW51eCogaW4gY29uZmlndXJlIHRvIGFsbG93IGdjYyB1c2UgW0dyb2ZmZW5dCistIEFkZCAqYnNkKiB0byBMaW51eCogY2FzZSBpbiBjb25maWd1cmUgW0Jhci1MZXZdCistIEFkZCBpbmZmYXN0Lm9iaiB0byBkZXBlbmRlbmNpZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZGVmbGF0ZS5oIFtLb2hsZXJdCistIENoYW5nZSBsaWJ6ZGxsLmEgYWdhaW4gdG8gbGliei5kbGwuYSAoISkgaW4gd2luMzIvTWFrZWZpbGUuZ2NjCistIEFkZCB0ZXN0IHRvIGNvbmZpZ3VyZSBmb3IgR05VIEMgbG9va2luZyBmb3IgZ2NjIGluIG91dHB1dCBvZiAkY2MgLXYKKy0gQWRkIHpsaWIucGMgZ2VuZXJhdGlvbiB0byB3aW4zMi9NYWtlZmlsZS5nY2MgW1dlaWdlbHRdCistIEZpeCBidWcgaW4gemxpYi5oIGZvciBfRklMRV9PRkZTRVRfQklUUyBzZXQgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugbm90CistIEFkZCBjb21tZW50IGluIHpsaWIuaCB0aGF0IGFkbGVyMzJfY29tYmluZSB3aXRoIGxlbjIgPCAwIG1ha2VzIG5vIHNlbnNlCistIE1ha2UgTk9fRElWSURFIG9wdGlvbiBpbiBhZGxlcjMyLmMgbXVjaCBmYXN0ZXIgKHRoYW5rcyB0byBKb2huIFJlaXNlcikKKy0gTWFrZSBzdHJvbmdlciB0ZXN0IGluIHpjb25mLmggdG8gaW5jbHVkZSB1bmlzdGQuaCBmb3IgTEZTCistIEFwcGx5IERhcndpbiBwYXRjaGVzIGZvciA2NC1iaXQgZmlsZSBvZmZzZXRzIHRvIGNvbnRyaWIvbWluaXppcCBbU2xhY2tdCistIEZpeCB6bGliLmggTEZTIHN1cHBvcnQgd2hlbiBaX1BSRUZJWCB1c2VkCistIEFkZCB1cGRhdGVkIGFzNDAwIHN1cHBvcnQgKHJlbW92ZWQgZnJvbSBvbGQpIFtNb25uZXJhdF0KKy0gQXZvaWQgZGVmbGF0ZSBzZW5zaXRpdml0eSB0byB2b2xhdGlsZSBpbnB1dCBkYXRhCistIEF2b2lkIGRpdmlzaW9uIGluIGFkbGVyMzJfY29tYmluZSBmb3IgTk9fRElWSURFCistIENsYXJpZnkgdGhlIHVzZSBvZiBaX0ZJTklTSCB3aXRoIGRlZmxhdGVCb3VuZCgpIGFtb3VudCBvZiBzcGFjZQorLSBTZXQgYmluYXJ5IGZvciBvdXRwdXQgZmlsZSBpbiBwdWZmLmMKKy0gVXNlIHU0IHR5cGUgZm9yIGNyY190YWJsZSB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFwcGx5IGNhc3RzIGluIHpsaWIuaCB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFkZCBPRiB0byBwcm90b3R5cGVzIGZvciBhZGxlcjMyX2NvbWJpbmVfIGFuZCBjcmMzMl9jb21iaW5lXyBbTWlsbGVyXQorLSBJbXByb3ZlIGluZmxhdGVTeW5jKCkgZG9jdW1lbnRhdGlvbiB0byBub3RlIGluZGV0ZXJtaW5hbmN5CistIEFkZCBkZWZsYXRlUGVuZGluZygpIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgYW1vdW50IG9mIHBlbmRpbmcgb3V0cHV0CistIENvcnJlY3QgdGhlIHNwZWxsaW5nIG9mICJzcGVjaWZpY2F0aW9uIiBpbiBGQVEgW1JhbmRlcnMtUGVocnNvbl0KKy0gQWRkIGEgY2hlY2sgaW4gY29uZmlndXJlIGZvciBzdGRhcmcuaCwgdXNlIGZvciBnenByaW50ZigpCistIENoZWNrIHRoYXQgcG9pbnRlcnMgZml0IGluIGludHMgd2hlbiBnenByaW50KCkgY29tcGlsZWQgb2xkIHN0eWxlCistIEFkZCBkdW1teSBuYW1lIGJlZm9yZSAkKFNIQVJFRExJQlYpIGluIE1ha2VmaWxlIFtCYXItTGV2LCBCb3dsZXJdCistIERlbGV0ZSBsaW5lIGluIGNvbmZpZ3VyZSB0aGF0IGFkZHMgLUwuIGxpYnouYSB0byBMREZMQUdTIFtXZWlnZWx0XQorLSBBZGQgZGVidWcgcmVjb3JkcyBpbiBhc3NtZWJsZXIgY29kZSBbTG9uZGVyXQorLSBVcGRhdGUgUkZDIHJlZmVyZW5jZXMgdG8gdXNlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sLy4uLiBbTGldCistIEFkZCAtLWFyY2hzIG9wdGlvbiwgdXNlIG9mIGxpYnRvb2wgdG8gY29uZmlndXJlIGZvciBNYWMgT1MgWCBbQm9yc3RlbF0KKwogQ2hhbmdlcyBpbiAxLjIuNSAoMTkgQXByIDIwMTApCiAtIERpc2FibGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIFtCYXItTGV2XQogLSBEZWZhdWx0IHRvIGxpYmRpciBhcyBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtOaWVkZXJdCiAtIFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZXMgb24gbW9kaWZpZWQgc291cmNlIGZpbGVzCiAtIFVwZGF0ZSB0cmVlcy5jIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgbW9kaWZpZWQgdHJlZXMuaAogLSBFeGl0IGNvbmZpZ3VyZSBmb3IgTWluR1csIHN1Z2dlc3Rpbmcgd2luMzIvTWFrZWZpbGUuZ2NjCistIENoZWNrIGZvciBOVUxMIHBhdGggaW4gZ3pfb3BlbiBbSG9tdXJsdV0KIAogQ2hhbmdlcyBpbiAxLjIuNC41ICgxOCBBcHIgMjAxMCkKIC0gU2V0IHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW1Rvcm9rXQpAQCAtMjYxLDcgKzUyNSw3IEBACiAtIENsZWFyIGJ5dGVzIGFmdGVyIGRlZmxhdGUgbG9va2FoZWFkIHRvIGF2b2lkIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGEKIC0gQ2hhbmdlIGEgbGltaXQgaW4gaW5mdHJlZXMuYyB0byBiZSBtb3JlIHRyYW5zcGFyZW50IHRvIENvdmVyaXR5IFByZXZlbnQKIC0gVXBkYXRlIHdpbjMyL3psaWIuZGVmIHdpdGggZXhwb3J0ZWQgc3ltYm9scyBmcm9tIHpsaWIuaAotLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaCBbV2lsbGVtXQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9ycyBpbiB6bGliLmggW1dpbGxlbSwgU29icmFkb10KIC0gQWxsb3cgWl9CTE9DSyBmb3IgZGVmbGF0ZSgpIHRvIGZvcmNlIGEgbmV3IGJsb2NrCiAtIEFsbG93IG5lZ2F0aXZlIGJpdHMgaW4gaW5mbGF0ZVByaW1lKCkgdG8gZGVsZXRlIGV4aXN0aW5nIGJpdCBidWZmZXIKIC0gQWRkIFpfVFJFRVMgZmx1c2ggb3B0aW9uIHRvIGluZmxhdGUoKSB0byByZXR1cm4gYXQgZW5kIG9mIHRyZWVzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvRkFRIGIvTW9kdWxlcy96bGliL0ZBUQppbmRleCAxYTIyNzUwLi45OWI3Y2Y5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvRkFRCisrKyBiL01vZHVsZXMvemxpYi9GQVEKQEAgLTQ0LDggKzQ0LDggQEAKIAogIDYuIFdoZXJlJ3MgdGhlIHpsaWIgZG9jdW1lbnRhdGlvbiAobWFuIHBhZ2VzLCBldGMuKT8KIAotICAgIEl0J3MgaW4gemxpYi5oIC4gIEV4YW1wbGVzIG9mIHpsaWIgdXNhZ2UgYXJlIGluIHRoZSBmaWxlcyBleGFtcGxlLmMgYW5kCi0gICAgbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCisgICAgSXQncyBpbiB6bGliLmggLiAgRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBhcmUgaW4gdGhlIGZpbGVzIHRlc3QvZXhhbXBsZS5jCisgICAgYW5kIHRlc3QvbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCiAKICA3LiBXaHkgZG9uJ3QgeW91IHVzZSBHTlUgYXV0b2NvbmYgb3IgbGlidG9vbCBvciAuLi4/CiAKQEAgLTg0LDggKzg0LDEwIEBACiAKIDEzLiBIb3cgY2FuIEkgbWFrZSBhIFVuaXggc2hhcmVkIGxpYnJhcnk/CiAKLSAgICBtYWtlIGNsZWFuCi0gICAgLi9jb25maWd1cmUgLXMKKyAgICBCeSBkZWZhdWx0IGEgc2hhcmVkIChhbmQgYSBzdGF0aWMpIGxpYnJhcnkgaXMgYnVpbHQgZm9yIFVuaXguICBTbzoKKworICAgIG1ha2UgZGlzdGNsZWFuCisgICAgLi9jb25maWd1cmUKICAgICBtYWtlCiAKIDE0LiBIb3cgZG8gSSBpbnN0YWxsIGEgc2hhcmVkIHpsaWIgbGlicmFyeSBvbiBVbml4PwpAQCAtMzI1LDcgKzMyNyw3IEBACiAgICAgY29ycmVjdGx5IHBvaW50cyB0byB0aGUgemxpYiBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUwIGZvciB0aGUgImRlZmxhdGUiCiAgICAgdHJhbnNmZXIgZW5jb2RpbmcsIHRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIG9mIHNlcnZlcnMgYW5kIGJyb3dzZXJzIHRoYXQKICAgICBpbmNvcnJlY3RseSBwcm9kdWNlIG9yIGV4cGVjdCByYXcgZGVmbGF0ZSBkYXRhIHBlciB0aGUgZGVmbGF0ZQotICAgIHNwZWNmaWNpYXRpb24gaW4gUkZDIDE5NTEsIG1vc3Qgbm90YWJseSBNaWNyb3NvZnQuICBTbyBldmVuIHRob3VnaCB0aGUKKyAgICBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiAgU28gZXZlbiB0aG91Z2ggdGhlCiAgICAgImRlZmxhdGUiIHRyYW5zZmVyIGVuY29kaW5nIHVzaW5nIHRoZSB6bGliIGZvcm1hdCB3b3VsZCBiZSB0aGUgbW9yZQogICAgIGVmZmljaWVudCBhcHByb2FjaCAoYW5kIGluIGZhY3QgZXhhY3RseSB3aGF0IHRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQKICAgICBmb3IpLCB1c2luZyB0aGUgImd6aXAiIHRyYW5zZmVyIGVuY29kaW5nIGlzIHByb2JhYmx5IG1vcmUgcmVsaWFibGUgZHVlIHRvCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvSU5ERVggYi9Nb2R1bGVzL3psaWIvSU5ERVgKaW5kZXggZjZjNTFjYS4uMmJhMDY0MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0lOREVYCisrKyBiL01vZHVsZXMvemxpYi9JTkRFWApAQCAtNyw2ICs3LDkgQEAKIFJFQURNRSAgICAgICAgICBndWVzcyB3aGF0CiBjb25maWd1cmUgICAgICAgY29uZmlndXJlIHNjcmlwdCBmb3IgVW5peAogbWFrZV92bXMuY29tICAgIG1ha2VmaWxlIGZvciBWTVMKK3Rlc3QvZXhhbXBsZS5jICB6bGliIHVzYWdlcyBleGFtcGxlcyBmb3IgYnVpbGQgdGVzdGluZwordGVzdC9taW5pZ3ppcC5jIG1pbmltYWwgZ3ppcC1saWtlIGZ1bmN0aW9uYWxpdHkgZm9yIGJ1aWxkIHRlc3RpbmcKK3Rlc3QvaW5mY292ZXIuYyBpbmYqLmMgY29kZSBjb3ZlcmFnZSBmb3IgYnVpbGQgY292ZXJhZ2UgdGVzdGluZwogdHJlZWJ1aWxkLnhtbCAgIFhNTCBkZXNjcmlwdGlvbiBvZiBzb3VyY2UgZmlsZSBkZXBlbmRlbmNpZXMKIHpjb25mLmguY21ha2VpbiB6Y29uZi5oIHRlbXBsYXRlIGZvciBjbWFrZQogemNvbmYuaC5pbiAgICAgIHpjb25mLmggdGVtcGxhdGUgZm9yIGNvbmZpZ3VyZQpAQCAtMTQsOSArMTcsMTEgQEAKIHpsaWIuMy5wZGYgICAgICBNYW4gcGFnZSBpbiBQREYgZm9ybWF0CiB6bGliLm1hcCAgICAgICAgTGludXggc3ltYm9sIGluZm9ybWF0aW9uCiB6bGliLnBjLmluICAgICAgVGVtcGxhdGUgZm9yIHBrZy1jb25maWcgZGVzY3JpcHRvcgoremxpYi5wYy5jbWFrZWluIHpsaWIucGMgdGVtcGxhdGUgZm9yIGNtYWtlCiB6bGliMmFuc2kgICAgICAgcGVybCBzY3JpcHQgdG8gY29udmVydCBzb3VyY2UgZmlsZXMgZm9yIEMrKyBjb21waWxhdGlvbgogCiBhbWlnYS8gICAgICAgICAgbWFrZWZpbGVzIGZvciBBbWlnYSBTQVMgQworYXM0MDAvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQVMvNDAwCiBkb2MvICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0cyBhbmQgYWxnb3JpdGhtcwogbXNkb3MvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgTVNET1MKIG5pbnRlbmRvZHMvICAgICBtYWtlZmlsZSBmb3IgTmludGVuZG8gRFMKQEAgLTU2LDEwICs2MSw4IEBACiB6dXRpbC5jCiB6dXRpbC5oCiAKLSAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgZm9yIHNhbXBsZSBwcm9ncmFtczoKLWV4YW1wbGUuYwotbWluaWd6aXAuYwotU2VlIGV4YW1wbGVzL1JFQURNRS5leGFtcGxlcyBmb3IgbW9yZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3Igc2FtcGxlIHByb2dyYW1zCitTZWUgZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzCiAKLSAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb24gYnkgdGhpcmQgcGFydGllcworICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkIGNvbnRyaWJ1dGlvbnMgYnkgdGhpcmQgcGFydGllcwogU2VlIGNvbnRyaWIvUkVBRE1FLmNvbnRyaWIKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbiBiL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgppbmRleCA1YjE1YmQwLi5jNjFhYTMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCkBAIC0xLDUgKzEsNSBAQAogIyBNYWtlZmlsZSBmb3IgemxpYgotIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCiAjIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKIAogIyBUbyBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgpAQCAtMzIsMTEgKzMyLDEyIEBACiAKIFNUQVRJQ0xJQj1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCi1TSEFSRURMSUJWPWxpYnouc28uMS4yLjUKK1NIQVJFRExJQlY9bGliei5zby4xLjIuOAogU0hBUkVETElCTT1saWJ6LnNvLjEKIExJQlM9JChTVEFUSUNMSUIpICQoU0hBUkVETElCVikKIAotQVI9YXIgcmMKK0FSPWFyCitBUkZMQUdTPXJjCiBSQU5MSUI9cmFubGliCiBMRENPTkZJRz1sZGNvbmZpZwogTERTSEFSRURMSUJDPS1sYwpAQCAtNTMsMTEgKzU0LDEzIEBACiBtYW4zZGlyID0gJHttYW5kaXJ9L21hbjMKIHBrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKIAotT0JKQyA9IGFkbGVyMzIubyBjb21wcmVzcy5vIGNyYzMyLm8gZGVmbGF0ZS5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIFwKLQlnendyaXRlLm8gaW5mYmFjay5vIGluZmZhc3QubyBpbmZsYXRlLm8gaW5mdHJlZXMubyB0cmVlcy5vIHVuY29tcHIubyB6dXRpbC5vCitPQkpaID0gYWRsZXIzMi5vIGNyYzMyLm8gZGVmbGF0ZS5vIGluZmJhY2subyBpbmZmYXN0Lm8gaW5mbGF0ZS5vIGluZnRyZWVzLm8gdHJlZXMubyB6dXRpbC5vCitPQkpHID0gY29tcHJlc3MubyB1bmNvbXByLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vCitPQkpDID0gJChPQkpaKSAkKE9CSkcpCiAKLVBJQ19PQkpDID0gYWRsZXIzMi5sbyBjb21wcmVzcy5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGd6Y2xvc2UubG8gZ3psaWIubG8gZ3pyZWFkLmxvIFwKLQlnendyaXRlLmxvIGluZmJhY2subG8gaW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHVuY29tcHIubG8genV0aWwubG8KK1BJQ19PQkpaID0gYWRsZXIzMi5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGluZmJhY2subG8gaW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHp1dGlsLmxvCitQSUNfT0JKRyA9IGNvbXByZXNzLmxvIHVuY29tcHIubG8gZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQubG8gZ3p3cml0ZS5sbworUElDX09CSkMgPSAkKFBJQ19PQkpaKSAkKFBJQ19PQkpHKQogCiAjIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vLCBQSUNfT0JKQT1tYXRjaC5sbwogT0JKQSA9CkBAIC04MCwzNSArODMsNDkgQEAKIHRlc3Q6IGFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKIAogdGVzdHN0YXRpYzogc3RhdGljCi0JQGlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGU7IHRoZW4gXAorCUBUTVBTVD10bXBzdF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGUgJCRUTVBTVCA7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUFNUCiAKIHRlc3RzaGFyZWQ6IHNoYXJlZAogCUBMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAogCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCiAJRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChEWUxEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg7IFwKIAlTSExJQl9QQVRIPWBwd2RgOiQoU0hMSUJfUEFUSCkgOyBleHBvcnQgU0hMSUJfUEFUSDsgXAotCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwc2ggfCAuL21pbmlnemlwc2ggLWQgJiYgLi9leGFtcGxlc2g7IHRoZW4gXAorCVRNUFNIPXRtcHNoXyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXBzaCB8IC4vbWluaWd6aXBzaCAtZCAmJiAuL2V4YW1wbGVzaCAkJFRNUFNIOyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgc2hhcmVkIHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiBzaGFyZWQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUFNICiAKIHRlc3Q2NDogYWxsNjQKLQlAaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NDsgdGhlbiBcCisJQFRNUDY0PXRtcDY0XyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NCAkJFRNUDY0OyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUDY0CisKK2luZmNvdmVyLm86IHRlc3QvaW5mY292ZXIuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9pbmZjb3Zlci5jCisKK2luZmNvdmVyOiBpbmZjb3Zlci5vIGxpYnouYQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBpbmZjb3Zlci5vIGxpYnouYQorCitjb3ZlcjogaW5mY292ZXIKKwlybSAtZiAqLmdjZGEKKwkuL2luZmNvdmVyCisJZ2NvdiBpbmYqLmMKIAogbGliei5hOiAkKE9CSlMpCi0JJChBUikgJEAgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQogCS1AICgkKFJBTkxJQikgJEAgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCiAKIG1hdGNoLm86IG1hdGNoLlMKQEAgLTEyMywxMSArMTQwLDE3IEBACiAJbXYgX21hdGNoLm8gbWF0Y2gubG8KIAlybSAtZiBfbWF0Y2gucwogCi1leGFtcGxlNjQubzogZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCi0JJChDQykgJChDRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgZXhhbXBsZS5jCitleGFtcGxlLm86IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L2V4YW1wbGUuYwogCi1taW5pZ3ppcDY0Lm86IG1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCBtaW5pZ3ppcC5jCittaW5pZ3ppcC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvbWluaWd6aXAuYworCitleGFtcGxlNjQubzogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9leGFtcGxlLmMKKworbWluaWd6aXA2NC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9taW5pZ3ppcC5jCiAKIC5TVUZGSVhFUzogLmxvCiAKQEAgLTEzNiw3ICsxNTksNyBAQAogCSQoQ0MpICQoU0ZMQUdTKSAtRFBJQyAtYyAtbyBvYmpzLyQqLm8gJDwKIAktQG12IG9ianMvJCoubyAkQAogCi0kKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKQorcGxhY2VibyAkKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKSBsaWJ6LmEKIAkkKExEU0hBUkVEKSAkKFNGTEFHUykgLW8gJEAgJChQSUNfT0JKUykgJChMRFNIQVJFRExJQkMpICQoTERGTEFHUykKIAlybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKQogCWxuIC1zICRAICQoU0hBUkVETElCKQpAQCAtMTY4LDE0ICsxOTEsMTYgQEAKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChtYW4zZGlyKSAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQobWFuM2Rpcik7IGZpCiAJLUBpZiBbICEgLWQgJChERVNURElSKSQocGtnY29uZmlnZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IGZpCiAJY3AgJChTVEFUSUNMSUIpICQoREVTVERJUikkKGxpYmRpcikKLQljcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikKLQljZCAkKERFU1RESVIpJChsaWJkaXIpOyBjaG1vZCB1PXJ3LGdvPXIgJChTVEFUSUNMSUIpCi0JLUAoY2QgJChERVNURElSKSQobGliZGlyKTsgJChSQU5MSUIpIGxpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKLQktQGNkICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IGlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAotCSAgY2htb2QgNzU1ICQoU0hBUkVETElCVik7IFwKLQkgIHJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKTsgXAotCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQk0pOyBcCisJY2htb2QgNjQ0ICQoREVTVERJUikkKGxpYmRpcikvJChTVEFUSUNMSUIpCisJLUAoJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQorCS1AaWYgdGVzdCAtbiAiJChTSEFSRURMSUJWKSI7IHRoZW4gXAorCSAgY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpOyBcCisJICBlY2hvICJjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikiOyBcCisJICBjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpOyBcCisJICBlY2hvICJjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpIjsgXAorCSAgcm0gLWYgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCisJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpOyBcCisJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAogCSAgKCQoTERDT05GSUcpIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKIAlmaQogCWNwIHpsaWIuMyAkKERFU1RESVIpJChtYW4zZGlyKQpAQCAtMTkxLDIyICsyMTYsMjUgQEAKIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5jbHVkZWRpcikvemxpYi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3pjb25mLmgKIAogdW5pbnN0YWxsOgotCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBybSAtZiB6bGliLmggemNvbmYuaAotCWNkICQoREVTVERJUikkKGxpYmRpcik7IHJtIC1mIGxpYnouYTsgXAotCWlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAorCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpICYmIHJtIC1mIHpsaWIuaCB6Y29uZi5oCisJY2QgJChERVNURElSKSQobGliZGlyKSAmJiBybSAtZiBsaWJ6LmE7IFwKKwlpZiB0ZXN0IC1uICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKIAkgIHJtIC1mICQoU0hBUkVETElCVikgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSk7IFwKIAlmaQotCWNkICQoREVTVERJUikkKG1hbjNkaXIpOyBybSAtZiB6bGliLjMKLQljZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpOyBybSAtZiB6bGliLnBjCisJY2QgJChERVNURElSKSQobWFuM2RpcikgJiYgcm0gLWYgemxpYi4zCisJY2QgJChERVNURElSKSQocGtnY29uZmlnZGlyKSAmJiBybSAtZiB6bGliLnBjCiAKIGRvY3M6IHpsaWIuMy5wZGYKIAogemxpYi4zLnBkZjogemxpYi4zCiAJZ3JvZmYgLW1hbmRvYyAtZiBIIC1UIHBzIHpsaWIuMyB8IHBzMnBkZiAtIHpsaWIuMy5wZGYKIAotemNvbmYuaC5pbjogemNvbmYuaC5jbWFrZWluCi0Jc2VkICIvXiNjbWFrZWRlZmluZS9EIiA8IHpjb25mLmguY21ha2VpbiA+IHpjb25mLmguaW4KLQl0b3VjaCAtciB6Y29uZi5oLmNtYWtlaW4gemNvbmYuaC5pbgoremNvbmYuaC5jbWFrZWluOiB6Y29uZi5oLmluCisJLUAgVEVNUEZJTEU9emNvbmZoXyQkOyBcCisJZWNobyAiLyNkZWZpbmUgWkNPTkZfSC8gYVxcXFxcbiNjbWFrZWRlZmluZSBaX1BSRUZJWFxcXFxcbiNjbWFrZWRlZmluZSBaX0hBVkVfVU5JU1REX0hcbiIgPj4gJCRURU1QRklMRSAmJlwKKwlzZWQgLWYgJCRURU1QRklMRSB6Y29uZi5oLmluID4gemNvbmYuaC5jbWFrZWluICYmXAorCXRvdWNoIC1yIHpjb25mLmguaW4gemNvbmYuaC5jbWFrZWluICYmXAorCXJtICQkVEVNUEZJTEUKIAogemNvbmY6IHpjb25mLmguaW4KIAljcCAtcCB6Y29uZi5oLmluIHpjb25mLmgKQEAgLTIxNiwxMyArMjQ0LDE2IEBACiAJcm0gLWYgKi5vICoubG8gKn4gXAogCSAgIGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkgZXhhbXBsZXNoJChFWEUpIG1pbmlnemlwc2gkKEVYRSkgXAogCSAgIGV4YW1wbGU2NCQoRVhFKSBtaW5pZ3ppcDY0JChFWEUpIFwKKwkgICBpbmZjb3ZlciBcCiAJICAgbGliei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAogCSAgIF9tYXRjaC5zIG1ha2V0cmVlIGNvbnRyaWIvaW5mYmFjazkvKi5vCiAJcm0gLXJmIG9ianMKKwlybSAtZiAqLmdjZGEgKi5nY25vICouZ2NvdgorCXJtIC1mIGNvbnRyaWIvaW5mYmFjazkvKi5nY2RhIGNvbnRyaWIvaW5mYmFjazkvKi5nY25vIGNvbnRyaWIvaW5mYmFjazkvKi5nY292CiAKIG1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgotZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiBkb2NzCi0Jcm0gLWYgTWFrZWZpbGUgemxpYi5wYworZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiB6Y29uZi5oLmNtYWtlaW4gZG9jcworCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMgY29uZmlndXJlLmxvZwogCS1Acm0gLWYgLkRTX1N0b3JlCiAJLUBwcmludGYgJ2FsbDpcblx0LUBlY2hvICJQbGVhc2UgdXNlIC4vY29uZmlndXJlIGZpcnN0LiAgVGhhbmsgeW91LiJcbicgPiBNYWtlZmlsZQogCS1AcHJpbnRmICdcbmRpc3RjbGVhbjpcblx0bWFrZSAtZiBNYWtlZmlsZS5pbiBkaXN0Y2xlYW5cbicgPj4gTWFrZWZpbGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9SRUFETUUgYi9Nb2R1bGVzL3psaWIvUkVBRE1FCmluZGV4IGQ0MjE5YmYuLjVjYTlkMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9SRUFETUUKKysrIGIvTW9kdWxlcy96bGliL1JFQURNRQpAQCAtMSwyMiArMSwyMiBAQAogWkxJQiBEQVRBIENPTVBSRVNTSU9OIExJQlJBUlkKIAotemxpYiAxLjIuNSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKK3psaWIgMS4yLjggaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCiB0aHJlYWQgc2FmZS4gIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcwotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUgZm9ybWF0KQotYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwICh6bGliIGZvcm1hdCksIHJmYzE5NTEgKGRlZmxhdGUgZm9ybWF0KSBhbmQKK3JmYzE5NTIgKGd6aXAgZm9ybWF0KS4KIAogQWxsIGZ1bmN0aW9ucyBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSB6bGliLmgKICh2b2x1bnRlZXIgdG8gd3JpdGUgbWFuIHBhZ2VzIHdlbGNvbWUsIGNvbnRhY3QgemxpYkBnemlwLm9yZykuICBBIHVzYWdlIGV4YW1wbGUKLW9mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRoZSBmaWxlIGV4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQgdGhlIGxpYnJhcnkKLWlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlIG1pbmlnemlwLmMuICBUaGUKLWNvbXByZXNzaW9uIGxpYnJhcnkgaXRzZWxmIGlzIGNvbXBvc2VkIG9mIGFsbCBzb3VyY2UgZmlsZXMgZXhjZXB0IGV4YW1wbGUuYyBhbmQKLW1pbmlnemlwLmMuCitvZiB0aGUgbGlicmFyeSBpcyBnaXZlbiBpbiB0aGUgZmlsZSB0ZXN0L2V4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQKK3RoZSBsaWJyYXJ5IGlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlCit0ZXN0L21pbmlnemlwLmMuICBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBpdHNlbGYgaXMgY29tcG9zZWQgb2YgYWxsIHNvdXJjZQorZmlsZXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LgogCiBUbyBjb21waWxlIGFsbCBmaWxlcyBhbmQgcnVuIHRoZSB0ZXN0IHByb2dyYW0sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGF0CiB0aGUgdG9wIG9mIE1ha2VmaWxlLmluLiAgSW4gc2hvcnQgIi4vY29uZmlndXJlOyBtYWtlIHRlc3QiLCBhbmQgaWYgdGhhdCBnb2VzCi13ZWxsLCAibWFrZSBpbnN0YWxsIiBzaG91bGQgd29yayBmb3IgbW9zdCBmbGF2b3JzIG9mIFVuaXguICBGb3IgV2luZG93cywgdXNlIG9uZQotb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIGluIHdpbjMyLyBvciBjb250cmliL3ZzdHVkaW8vIC4gIEZvciBWTVMsIHVzZQord2VsbCwgIm1ha2UgaW5zdGFsbCIgc2hvdWxkIHdvcmsgZm9yIG1vc3QgZmxhdm9ycyBvZiBVbml4LiAgRm9yIFdpbmRvd3MsIHVzZQorb25lIG9mIHRoZSBzcGVjaWFsIG1ha2VmaWxlcyBpbiB3aW4zMi8gb3IgY29udHJpYi92c3R1ZGlvLyAuICBGb3IgVk1TLCB1c2UKIG1ha2Vfdm1zLmNvbS4KIAogUXVlc3Rpb25zIGFib3V0IHpsaWIgc2hvdWxkIGJlIHNlbnQgdG8gPHpsaWJAZ3ppcC5vcmc+LCBvciB0byBHaWxsZXMgVm9sbGFudApAQCAtMzEsNyArMzEsNyBAQAogaXNzdWUgb2YgRHIuICBEb2JiJ3MgSm91cm5hbDsgYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBhdAogaHR0cDovL21hcmtuZWxzb24udXMvMTk5Ny8wMS8wMS96bGliLWVuZ2luZS8gLgogCi1UaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjUgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi44IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KIAogVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IGNvbnRyaWIvIC4KIApAQCAtNDQsNyArNDQsNyBAQAogCiBBIFB5dGhvbiBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgPGFta0BhbWsuY2E+IGlzCiBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnMsIHNlZQotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbCAuCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvemxpYi5odG1sIC4KIAogemxpYiBpcyBidWlsdCBpbnRvIHRjbDogaHR0cDovL3dpa2kudGNsLnRrLzQ2MTAgLgogCkBAIC04NCw3ICs4NCw3IEBACiAKIENvcHlyaWdodCBub3RpY2U6CiAKLSAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jIGIvTW9kdWxlcy96bGliL2FkbGVyMzIuYwppbmRleCA2NWFkNmE1Li5hODY4ZjA3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCisrKyBiL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKQEAgLTEsNSArMSw1IEBACiAvKiBhZGxlcjMyLmMgLS0gY29tcHV0ZSB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDcgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksOSArOSw5IEBACiAKICNkZWZpbmUgbG9jYWwgc3RhdGljCiAKLWxvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8odUxvbmcgYWRsZXIxLCB1TG9uZyBhZGxlcjIsIHpfb2ZmNjRfdCBsZW4yKTsKK2xvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8gT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6X29mZjY0X3QgbGVuMikpOwogCi0jZGVmaW5lIEJBU0UgNjU1MjFVTCAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworI2RlZmluZSBCQVNFIDY1NTIxICAgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KICNkZWZpbmUgTk1BWCA1NTUyCiAvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsgKG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KIApAQCAtMjEsMzkgKzIxLDQ0IEBACiAjZGVmaW5lIERPOChidWYsaSkgIERPNChidWYsaSk7IERPNChidWYsaSs0KTsKICNkZWZpbmUgRE8xNihidWYpICAgRE84KGJ1ZiwwKTsgRE84KGJ1Ziw4KTsKIAotLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAqLworLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAtLQorICAgdHJ5IGl0IGJvdGggd2F5cyB0byBzZWUgd2hpY2ggaXMgZmFzdGVyICovCiAjaWZkZWYgTk9fRElWSURFCi0jICBkZWZpbmUgTU9EKGEpIFwKKy8qIG5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgQkFTRSBpcyA2NTUyMSwgd2hlcmUgNjU1MzYgJSA2NTUyMSA9PSAxNQorICAgKHRoYW5rIHlvdSB0byBKb2huIFJlaXNlciBmb3IgcG9pbnRpbmcgdGhpcyBvdXQpICovCisjICBkZWZpbmUgQ0hPUChhKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE2KSkgYSAtPSAoQkFTRSA8PCAxNik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTUpKSBhIC09IChCQVNFIDw8IDE1KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNCkpIGEgLT0gKEJBU0UgPDwgMTQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEzKSkgYSAtPSAoQkFTRSA8PCAxMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTIpKSBhIC09IChCQVNFIDw8IDEyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMSkpIGEgLT0gKEJBU0UgPDwgMTEpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEwKSkgYSAtPSAoQkFTRSA8PCAxMCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOSkpIGEgLT0gKEJBU0UgPDwgOSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOCkpIGEgLT0gKEJBU0UgPDwgOCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNykpIGEgLT0gKEJBU0UgPDwgNyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNikpIGEgLT0gKEJBU0UgPDwgNik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNSkpIGEgLT0gKEJBU0UgPDwgNSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNCkpIGEgLT0gKEJBU0UgPDwgNCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMykpIGEgLT0gKEJBU0UgPDwgMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMikpIGEgLT0gKEJBU0UgPDwgMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMSkpIGEgLT0gKEJBU0UgPDwgMSk7IFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmVUw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0QyOChhKSBcCisgICAgZG8geyBcCisgICAgICAgIENIT1AoYSk7IFwKICAgICAgICAgaWYgKGEgPj0gQkFTRSkgYSAtPSBCQVNFOyBcCiAgICAgfSB3aGlsZSAoMCkKLSMgIGRlZmluZSBNT0Q0KGEpIFwKKyMgIGRlZmluZSBNT0QoYSkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA0KSkgYSAtPSAoQkFTRSA8PCA0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAzKSkgYSAtPSAoQkFTRSA8PCAzKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAyKSkgYSAtPSAoQkFTRSA8PCAyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxKSkgYSAtPSAoQkFTRSA8PCAxKTsgXAorICAgICAgICBDSE9QKGEpOyBcCisgICAgICAgIE1PRDI4KGEpOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0Q2MyhhKSBcCisgICAgZG8geyAvKiB0aGlzIGFzc3VtZXMgYSBpcyBub3QgbmVnYXRpdmUgKi8gXAorICAgICAgICB6X29mZjY0X3QgdG1wID0gYSA+PiAzMjsgXAorICAgICAgICBhICY9IDB4ZmZmZmZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA4KSAtICh0bXAgPDwgNSkgKyB0bXA7IFwKKyAgICAgICAgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgICAgIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAogICAgICAgICBpZiAoYSA+PSBCQVNFKSBhIC09IEJBU0U7IFwKICAgICB9IHdoaWxlICgwKQogI2Vsc2UKICMgIGRlZmluZSBNT0QoYSkgYSAlPSBCQVNFCi0jICBkZWZpbmUgTU9ENChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0QyOChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0Q2MyhhKSBhICU9IEJBU0UKICNlbmRpZgogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC05Miw3ICs5Nyw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGFkbGVyID49IEJBU0UpCiAgICAgICAgICAgICBhZGxlciAtPSBCQVNFOwotICAgICAgICBNT0Q0KHN1bTIpOyAgICAgICAgICAgICAvKiBvbmx5IGFkZGVkIHNvIG1hbnkgQkFTRSdzICovCisgICAgICAgIE1PRDI4KHN1bTIpOyAgICAgICAgICAgIC8qIG9ubHkgYWRkZWQgc28gbWFueSBCQVNFJ3MgKi8KICAgICAgICAgcmV0dXJuIGFkbGVyIHwgKHN1bTIgPDwgMTYpOwogICAgIH0KIApAQCAtMTM3LDggKzE0MiwxMyBAQAogICAgIHVuc2lnbmVkIGxvbmcgc3VtMjsKICAgICB1bnNpZ25lZCByZW07CiAKKyAgICAvKiBmb3IgbmVnYXRpdmUgbGVuLCByZXR1cm4gaW52YWxpZCBhZGxlcjMyIGFzIGEgY2x1ZSBmb3IgZGVidWdnaW5nICovCisgICAgaWYgKGxlbjIgPCAwKQorICAgICAgICByZXR1cm4gMHhmZmZmZmZmZlVMOworCiAgICAgLyogdGhlIGRlcml2YXRpb24gb2YgdGhpcyBmb3JtdWxhIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIgKi8KLSAgICByZW0gPSAodW5zaWduZWQpKGxlbjIgJSBCQVNFKTsKKyAgICBNT0Q2MyhsZW4yKTsgICAgICAgICAgICAgICAgLyogYXNzdW1lcyBsZW4yID49IDAgKi8KKyAgICByZW0gPSAodW5zaWduZWQpbGVuMjsKICAgICBzdW0xID0gYWRsZXIxICYgMHhmZmZmOwogICAgIHN1bTIgPSByZW0gKiBzdW0xOwogICAgIE1PRChzdW0yKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0IGIvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKaW5kZXggYjAyMmRkZS4uYzk3ZjQ5NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKKysrIGIvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKQEAgLTEyMSw3ICsxMjEsNyBAQAoga2J5dGVzLiAgWW91IGNhbiBpbWFnaW5lIHRoYXQgZmlsbGluZyBpbiBhIDJeMTUgZW50cnkgdGFibGUgZm9yIGEgMTUtYml0IGNvZGUKIHdvdWxkIHRha2UgdG9vIGxvbmcgaWYgeW91J3JlIG9ubHkgZGVjb2Rpbmcgc2V2ZXJhbCB0aG91c2FuZCBzeW1ib2xzLiAgQXQgdGhlCiBvdGhlciBleHRyZW1lLCB5b3UgY291bGQgbWFrZSBhIG5ldyB0YWJsZSBmb3IgZXZlcnkgYml0IGluIHRoZSBjb2RlLiAgSW4gZmFjdCwKLXRoYXQncyBlc3NlbnRpYWxseSBhIEh1ZmZtYW4gdHJlZS4gIEJ1dCB0aGVuIHlvdSBzcGVuZCB0d28gbXVjaCB0aW1lCit0aGF0J3MgZXNzZW50aWFsbHkgYSBIdWZmbWFuIHRyZWUuICBCdXQgdGhlbiB5b3Ugc3BlbmQgdG9vIG11Y2ggdGltZQogdHJhdmVyc2luZyB0aGUgdHJlZSB3aGlsZSBkZWNvZGluZywgZXZlbiBmb3Igc2hvcnQgc3ltYm9scy4KIAogU28gdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgZmlyc3QgbG9va3VwIHRhYmxlIGlzIGEgdHJhZGUgb2YgdGhlIHRpbWUgdG8KQEAgLTIwNiw0ICsyMDYsNCBAQAogcHAuIDMzNy0zNDMuCiAKIGBgREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24nJyBhdmFpbGFibGUgaW4KLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0CitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYyBiL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCmluZGV4IGVhNGRmYmUuLjZlOTc2MjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCisrKyBiL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgel9zdHJlYW0gc3RyZWFtOwogICAgIGludCBlcnI7CiAKLSAgICBzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopc291cmNlOworICAgIHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CiAgICAgc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc291cmNlTGVuOwogI2lmZGVmIE1BWFNFR182NEsKICAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NvbmZpZ3VyZSBiL01vZHVsZXMvemxpYi9jb25maWd1cmUKaW5kZXggYmQ5ZWRkMi4uYjc3YThhOCAxMDA3NTUKLS0tIGEvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQorKysgYi9Nb2R1bGVzL3psaWIvY29uZmlndXJlCkBAIC0xMywzOSArMTMsNTIgQEAKICMgSWYgeW91IGhhdmUgcHJvYmxlbXMsIHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MgYmVmb3JlIHJlcG9ydGluZwogIyBhbiBlcnJvci4KIAorIyBzdGFydCBvZmYgY29uZmlndXJlLmxvZworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiBjb25maWd1cmUubG9nCitlY2hvICQwICQqID4+IGNvbmZpZ3VyZS5sb2cKK2RhdGUgPj4gY29uZmlndXJlLmxvZworCisjIHNldCBjb21tYW5kIHByZWZpeCBmb3IgY3Jvc3MtY29tcGlsYXRpb24KIGlmIFsgLW4gIiR7Q0hPU1R9IiBdOyB0aGVuCi0gICAgdW5hbWU9IiQoZWNobyAiJHtDSE9TVH0iIHwgc2VkIC1lICdzL15bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpLS4qJC9cMS8nKSIKKyAgICB1bmFtZT0iYGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJ2AiCiAgICAgQ1JPU1NfUFJFRklYPSIke0NIT1NUfS0iCiBmaQogCisjIGRlc3RpbmF0aW9uIG5hbWUgZm9yIHN0YXRpYyBsaWJyYXJ5CiBTVEFUSUNMSUI9bGliei5hCi1MREZMQUdTPSIke0xERkxBR1N9IC1MLiAke1NUQVRJQ0xJQn0iCisKKyMgZXh0cmFjdCB6bGliIHZlcnNpb24gbnVtYmVycyBmcm9tIHpsaWIuaAogVkVSPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKC4qXCkiLiovXDEvcCcgPCB6bGliLmhgCiBWRVIzPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlxcLlswLTldKlwpLiovXDEvcCcgPCB6bGliLmhgCiBWRVIyPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlwpXFwuLiovXDEvcCcgPCB6bGliLmhgCiBWRVIxPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlwpXFwuLiovXDEvcCcgPCB6bGliLmhgCisKKyMgZXN0YWJsaXNoIGNvbW1hbmRzIGZvciBsaWJyYXJ5IGJ1aWxkaW5nCiBpZiAiJHtDUk9TU19QUkVGSVh9YXIiIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIEFSPSR7QVItIiR7Q1JPU1NfUFJFRklYfWFyIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIEFSPSR7QVItImFyIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKLUFSX1JDPSIke0FSfSByYyIKK0FSRkxBR1M9JHtBUkZMQUdTLSJyYyJ9CiBpZiAiJHtDUk9TU19QUkVGSVh9cmFubGliIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KICAgICBSQU5MSUI9JHtSQU5MSUItIiR7Q1JPU1NfUFJFRklYfXJhbmxpYiJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7UkFOTElCfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke1JBTkxJQn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIFJBTkxJQj0ke1JBTkxJQi0icmFubGliIn0KIGZpCiBpZiAiJHtDUk9TU19QUkVGSVh9bm0iIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIE5NPSR7Tk0tIiR7Q1JPU1NfUFJFRklYfW5tIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtOTX0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtOTX0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIE5NPSR7Tk0tIm5tIn0KIGZpCisKKyMgc2V0IGRlZmF1bHRzIGJlZm9yZSBwcm9jZXNzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zCiBMRENPTkZJRz0ke0xEQ09ORklHLSJsZGNvbmZpZyJ9CiBMRFNIQVJFRExJQkM9IiR7TERTSEFSRURMSUJDLS1sY30iCitBUkNIUz0KIHByZWZpeD0ke3ByZWZpeC0vdXNyL2xvY2FsfQogZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeC0nJHtwcmVmaXh9J30KIGxpYmRpcj0ke2xpYmRpci0nJHtleGVjX3ByZWZpeH0vbGliJ30KQEAgLTU0LDIwICs2NywzOSBAQAogbWFuZGlyPSR7bWFuZGlyLScke3ByZWZpeH0vc2hhcmUvbWFuJ30KIHNoYXJlZF9leHQ9Jy5zbycKIHNoYXJlZD0xCitzb2xvPTAKK2NvdmVyPTAKIHpwcmVmaXg9MAoremNvbnN0PTAKIGJ1aWxkNjQ9MAogZ2NjPTAKIG9sZF9jYz0iJENDIgogb2xkX2NmbGFncz0iJENGTEFHUyIKK09CSkM9JyQoT0JKWikgJChPQkpHKScKK1BJQ19PQkpDPSckKFBJQ19PQkpaKSAkKFBJQ19PQkpHKScKIAorIyBsZWF2ZSB0aGlzIHNjcmlwdCwgb3B0aW9uYWxseSBpbiBhIGJhZCB3YXkKK2xlYXZlKCkKK3sKKyAgaWYgdGVzdCAiJCoiICE9ICIwIjsgdGhlbgorICAgIGVjaG8gIioqICQwIGFib3J0aW5nLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBmaQorICBybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QuZ2NubyAuLy0tdmVyc2lvbgorICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBleGl0ICQxCit9CisKKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgb3B0aW9ucwogd2hpbGUgdGVzdCAkIyAtZ2UgMQogZG8KIGNhc2UgIiQxIiBpbgogICAgIC1oKiB8IC0taGVscCkKLSAgICAgIGVjaG8gJ3VzYWdlOicKLSAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLXpwcmVmaXhdIFstLXByZWZpeD1QUkVGSVhdICBbLS1lcHJlZml4PUVYUFJFRklYXScKLSAgICAgIGVjaG8gJyAgICBbLS1zdGF0aWNdIFstLTY0XSBbLS1saWJkaXI9TElCRElSXSBbLS1zaGFyZWRsaWJkaXI9TElCRElSXScKLSAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdJworICAgICAgZWNobyAndXNhZ2U6JyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgIGNvbmZpZ3VyZSBbLS1jb25zdF0gWy0tenByZWZpeF0gWy0tcHJlZml4PVBSRUZJWF0gIFstLWVwcmVmaXg9RVhQUkVGSVhdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgICAgWy0tc3RhdGljXSBbLS02NF0gWy0tbGliZGlyPUxJQkRJUl0gWy0tc2hhcmVkbGliZGlyPUxJQkRJUl0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdIFstLWFyY2hzPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCJdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgICAgIGV4aXQgMCA7OwogICAgIC1wKj0qIHwgLS1wcmVmaXg9KikgcHJlZml4PWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CiAgICAgLWUqPSogfCAtLWVwcmVmaXg9KikgZXhlY19wcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKQEAgLTgxLDUxICsxMTMsODggQEAKICAgICAtaSogfCAtLWluY2x1ZGVkaXIpIGluY2x1ZGVkaXI9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CiAgICAgLXMqIHwgLS1zaGFyZWQgfCAtLWVuYWJsZS1zaGFyZWQpIHNoYXJlZD0xOyBzaGlmdCA7OwogICAgIC10IHwgLS1zdGF0aWMpIHNoYXJlZD0wOyBzaGlmdCA7OworICAgIC0tc29sbykgc29sbz0xOyBzaGlmdCA7OworICAgIC0tY292ZXIpIGNvdmVyPTE7IHNoaWZ0IDs7CiAgICAgLXoqIHwgLS16cHJlZml4KSB6cHJlZml4PTE7IHNoaWZ0IDs7CiAgICAgLTYqIHwgLS02NCkgYnVpbGQ2ND0xOyBzaGlmdCA7OwotICAgIC0tc3lzY29uZmRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIjsgc2hpZnQgOzsKLSAgICAtLWxvY2Fsc3RhdGVkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tbG9jYWxzdGF0ZWRpciI7IHNoaWZ0IDs7Ci0gICAgKikgZWNobyAidW5rbm93biBvcHRpb246ICQxIjsgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIjsgZXhpdCAxIDs7CisgICAgLWEqPSogfCAtLWFyY2hzPSopIEFSQ0hTPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CisgICAgLS1zeXNjb25mZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLXN5c2NvbmZkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLS1sb2NhbHN0YXRlZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLWxvY2Fsc3RhdGVkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLWMqIHwgLS1jb25zdCkgemNvbnN0PTE7IHNoaWZ0IDs7CisgICAgKikKKyAgICAgIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBsZWF2ZSAxOzsKICAgICBlc2FjCiBkb25lCiAKKyMgdGVtcG9yYXJ5IGZpbGUgbmFtZQogdGVzdD16dGVzdCQkCisKKyMgcHV0IGFyZ3VtZW50cyBpbiBsb2csIGFsc28gcHV0IHRlc3QgZmlsZSBpbiBsb2cgaWYgdXNlZCBpbiBhcmd1bWVudHMKK3Nob3coKQoreworICBjYXNlICIkKiIgaW4KKyAgICAqJHRlc3QuYyopCisgICAgICBlY2hvID09PSAkdGVzdC5jID09PSA+PiBjb25maWd1cmUubG9nCisgICAgICBjYXQgJHRlc3QuYyA+PiBjb25maWd1cmUubG9nCisgICAgICBlY2hvID09PSA+PiBjb25maWd1cmUubG9nOzsKKyAgZXNhYworICBlY2hvICQqID4+IGNvbmZpZ3VyZS5sb2cKK30KKworIyBjaGVjayBmb3IgZ2NjIHZzLiBjYyBhbmQgc2V0IGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYmFzZWQgb24gdGhlIHN5c3RlbSBpZGVudGlmaWVkIGJ5IHVuYW1lCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiBleHRlcm4gaW50IGdldGNoYXIoKTsKIGludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KIEVPRgogCi10ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yICR7Q1JPU1NfUFJFRklYfWdjYy4uLgordGVzdCAteiAiJENDIiAmJiBlY2hvIENoZWNraW5nIGZvciAke0NST1NTX1BSRUZJWH1nY2MuLi4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogY2M9JHtDQy0ke0NST1NTX1BSRUZJWH1nY2N9CiBjZmxhZ3M9JHtDRkxBR1MtIi1PMyJ9CiAjIHRvIGZvcmNlIHRoZSBhc20gdmVyc2lvbiB1c2U6IENGTEFHUz0iLU8zIC1EQVNNViIgLi9jb25maWd1cmUKIGNhc2UgIiRjYyIgaW4KICAgKmdjYyopIGdjYz0xIDs7CisgICpjbGFuZyopIGdjYz0xIDs7Citlc2FjCitjYXNlIGAkY2MgLXYgMj4mMWAgaW4KKyAgKmdjYyopIGdjYz0xIDs7CiBlc2FjCiAKLWlmIHRlc3QgIiRnY2MiIC1lcSAxICYmICgkY2MgLWMgJGNmbGFncyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorc2hvdyAkY2MgLWMgJHRlc3QuYworaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRjYyAtYyAkdGVzdC5jKSA+PiBjb25maWd1cmUubG9nIDI+JjE7IHRoZW4KKyAgZWNobyAuLi4gdXNpbmcgZ2NjID4+IGNvbmZpZ3VyZS5sb2cKICAgQ0M9IiRjYyIKKyAgQ0ZMQUdTPSIke0NGTEFHUy0tTzN9ICR7QVJDSFN9IgogICBTRkxBR1M9IiR7Q0ZMQUdTLS1PM30gLWZQSUMiCi0gIENGTEFHUz0iJHtDRkxBR1MtLU8zfSIKKyAgTERGTEFHUz0iJHtMREZMQUdTfSAke0FSQ0hTfSIKICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgogICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCiAgICAgU0ZMQUdTPSIke1NGTEFHU30gLW02NCIKICAgZmkKICAgaWYgdGVzdCAiJHtaTElCR0NDV0FSTn0iID0gIllFUyI7IHRoZW4KLSAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1wZWRhbnRpYyIKKyAgICBpZiB0ZXN0ICIkemNvbnN0IiAtZXEgMTsgdGhlbgorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtV2Nhc3QtcXVhbCAtcGVkYW50aWMgLURaTElCX0NPTlNUIgorICAgIGVsc2UKKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLXBlZGFudGljIgorICAgIGZpCiAgIGZpCiAgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KICAgICB1bmFtZT1gKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCiAgIGZpCiAgIGNhc2UgIiR1bmFtZSIgaW4KLSAgTGludXgqIHwgbGludXgqIHwgR05VIHwgR05VLyogfCAqQlNEIHwgRHJhZ29uRmx5KSBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9IDs7CisgIExpbnV4KiB8IGxpbnV4KiB8IEdOVSB8IEdOVS8qIHwgc29sYXJpcyopCisgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LHpsaWIubWFwIn0gOzsKKyAgKkJTRCB8ICpic2QqIHwgRHJhZ29uRmx5KQorICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9CisgICAgICAgIExEQ09ORklHPSJsZGNvbmZpZyAtbSIgOzsKICAgQ1lHV0lOKiB8IEN5Z3dpbiogfCBjeWd3aW4qIHwgT1MvMiopCiAgICAgICAgIEVYRT0nLmV4ZScgOzsKLSAgTUlOR1cqfG1pbmd3KikKKyAgTUlOR1cqIHwgbWluZ3cqKQogIyB0ZW1wb3JhcnkgYnlwYXNzCiAgICAgICAgIHJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotICAgICAgICBlY2hvICJQbGVhc2UgdXNlIHdpbjMyL01ha2VmaWxlLmdjYyBpbnN0ZWFkLiIKLSAgICAgICAgZXhpdCAxCisgICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugd2luMzIvTWFrZWZpbGUuZ2NjIGluc3RlYWQuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICAgIGxlYXZlIDEKICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifQogICAgICAgICBMRFNIQVJFRExJQkM9IiIKICAgICAgICAgRVhFPScuZXhlJyA7OwpAQCAtMTQyLDE3ICsyMTEsMjUgQEAKICAgICAgICAgICAgICAgICAgc2hhcmVkX2V4dD0nLnNsJwogICAgICAgICAgICAgICAgICBTSEFSRURMSUI9J2xpYnouc2wnIDs7CiAgICAgICAgICBlc2FjIDs7Ci0gIERhcndpbiopICAgc2hhcmVkX2V4dD0nLmR5bGliJworICBEYXJ3aW4qIHwgZGFyd2luKikKKyAgICAgICAgICAgICBzaGFyZWRfZXh0PScuZHlsaWInCiAgICAgICAgICAgICAgU0hBUkVETElCPWxpYnokc2hhcmVkX2V4dAogICAgICAgICAgICAgIFNIQVJFRExJQlY9bGliei4kVkVSJHNoYXJlZF9leHQKICAgICAgICAgICAgICBTSEFSRURMSUJNPWxpYnouJFZFUjEkc2hhcmVkX2V4dAotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIzIn0gOzsKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAkbGliZGlyLyRTSEFSRURMSUJNIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJFZFUjEgLWN1cnJlbnRfdmVyc2lvbiAkVkVSMyJ9CisgICAgICAgICAgICAgaWYgbGlidG9vbCAtViAyPiYxIHwgZ3JlcCBBcHBsZSA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICBBUj0ibGlidG9vbCIKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIEFSPSIvdXNyL2Jpbi9saWJ0b29sIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQVJGTEFHUz0iLW8iIDs7CiAgICopICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIn0gOzsKICAgZXNhYwogZWxzZQogICAjIGZpbmQgc3lzdGVtIG5hbWUgYW5kIGNvcnJlc3BvbmRpbmcgY2Mgb3B0aW9ucwogICBDQz0ke0NDLWNjfQogICBnY2M9MAorICBlY2hvIC4uLiB1c2luZyAkQ0MgPj4gY29uZmlndXJlLmxvZwogICBpZiB0ZXN0IC16ICIkdW5hbWUiOyB0aGVuCiAgICAgdW5hbWU9YCh1bmFtZSAtc3IgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAKICAgZmkKQEAgLTE4MywxOSArMjYwLDM0IEBACiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItNCAtTyJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MifQogICAgICAgICAgICAgIFJBTkxJQj0ke1JBTkxJQi0idHJ1ZSJ9Ci0gICAgICAgICAgICAgQVJfUkM9ImNjIC1BIiA7OworICAgICAgICAgICAgIEFSPSJjYyIKKyAgICAgICAgICAgICBBUkZMQUdTPSItQSIgOzsKICAgU0NPX1NWXCAzLjIqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMyAtZHkgLUtQSUMgIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMyJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLWR5IC1LUElDIC1HIn0gOzsKLSAgU3VuT1NcIDUqKSBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9Ci0gICAgICAgICBjYXNlIGAodW5hbWUgLW0gfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICAgIGk4NiopCi0gICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSIteHBlbnRpdW0gLWZhc3QgLUtQSUMgLVIuIn0KLSAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi14cGVudGl1bSAtZmFzdCJ9IDs7Ci0gICAgICAgICAqKQotICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXhjZzkyIC1LUElDIC1SLiJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteGNnOTIifSA7OwotICAgICAgICAgZXNhYyA7OworICBTdW5PU1wgNSogfCBzb2xhcmlzKikKKyAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIC1oIGxpYnokc2hhcmVkX2V4dC4kVkVSMSJ9CisgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC1LUElDIn0KKyAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QifQorICAgICAgICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgorICAgICAgICAgICAgICMgb2xkIHZlcnNpb25zIG9mIFN1blBSTy9Xb3Jrc2hvcC9TdHVkaW8gZG9uJ3Qgc3VwcG9ydCAtbTY0LAorICAgICAgICAgICAgICMgYnV0IG5ld2VyIG9uZXMgZG8uICBDaGVjayBmb3IgaXQuCisgICAgICAgICAgICAgZmxhZzY0PWAkQ0MgLWZsYWdzIHwgZWdyZXAgLS0gJ14tbTY0J2AKKyAgICAgICAgICAgICBpZiB0ZXN0IHgiJGZsYWc2NCIgIT0geCIiIDsgdGhlbgorICAgICAgICAgICAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCisgICAgICAgICAgICAgICAgICAgaTg2KikKKyAgICAgICAgICAgICAgICAgICAgIFNGTEFHUz0iJFNGTEFHUyAteGFyY2g9YW1kNjQiCisgICAgICAgICAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhhcmNoPWFtZDY0IiA7OworICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICBTRkxBR1M9IiRTRkxBR1MgLXhhcmNoPXY5IgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC14YXJjaD12OSIgOzsKKyAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICAgICAgOzsKICAgU3VuT1NcIDQqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMiAtUElDIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMiJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ibGQifSA7OwpAQCAtMjI1LDI1ICszMTcsNzkgQEAKICAgZXNhYwogZmkKIAorIyBkZXN0aW5hdGlvbiBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcnkgaWYgbm90IGRlZmluZWQgYWJvdmUKIFNIQVJFRExJQj0ke1NIQVJFRExJQi0ibGlieiRzaGFyZWRfZXh0In0KIFNIQVJFRExJQlY9JHtTSEFSRURMSUJWLSJsaWJ6JHNoYXJlZF9leHQuJFZFUiJ9CiBTSEFSRURMSUJNPSR7U0hBUkVETElCTS0ibGlieiRzaGFyZWRfZXh0LiRWRVIxIn0KIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgZGVmaW5lIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBjb21waWxlciBhbmQgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGxvZ2dpbmcgdGhlIHJlc3VsdHMKKworY2F0ID4gJHRlc3QuYyA8PEVPRgorI2Vycm9yIGVycm9yCitFT0YKK2lmICgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorICB0cnkoKQorICB7CisgICAgc2hvdyAkKgorICAgIHRlc3QgImAoICQqICkgMj4mMSB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIgorICB9CisgIGVjaG8gLSB1c2luZyBhbnkgb3V0cHV0IGZyb20gY29tcGlsZXIgdG8gaW5kaWNhdGUgYW4gZXJyb3IgPj4gY29uZmlndXJlLmxvZworZWxzZQordHJ5KCkKK3sKKyAgc2hvdyAkKgorICAoICQqICkgPj4gY29uZmlndXJlLmxvZyAyPiYxCisgIHJldD0kPworICBpZiB0ZXN0ICRyZXQgLW5lIDA7IHRoZW4KKyAgICBlY2hvICIoZXhpdCBjb2RlICIkcmV0IikiID4+IGNvbmZpZ3VyZS5sb2cKKyAgZmkKKyAgcmV0dXJuICRyZXQKK30KK2ZpCisKK3RyeWJvdGgoKQoreworICBzaG93ICQqCisgIGdvdD1gKCAkKiApIDI+JjFgCisgIHJldD0kPworICBwcmludGYgJXMgIiRnb3QiID4+IGNvbmZpZ3VyZS5sb2cKKyAgaWYgdGVzdCAkcmV0IC1uZSAwOyB0aGVuCisgICAgcmV0dXJuICRyZXQKKyAgZmkKKyAgdGVzdCAiJGdvdCIgPSAiIgorfQorCitjYXQgPiAkdGVzdC5jIDw8IEVPRgoraW50IGZvbygpIHsgcmV0dXJuIDA7IH0KK0VPRgorZWNobyAiQ2hlY2tpbmcgZm9yIG9ic2Vzc2l2ZS1jb21wdWxzaXZlIGNvbXBpbGVyIG9wdGlvbnMuLi4iID4+IGNvbmZpZ3VyZS5sb2cKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiQ29tcGlsZXIgZXJyb3IgcmVwb3J0aW5nIGlzIHRvbyBoYXJzaCBmb3IgJDAgKHBlcmhhcHMgcmVtb3ZlIC1XZXJyb3IpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBsZWF2ZSAxCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBzZWUgaWYgc2hhcmVkIGxpYnJhcnkgYnVpbGQgc3VwcG9ydGVkCitjYXQgPiAkdGVzdC5jIDw8RU9GCitleHRlcm4gaW50IGdldGNoYXIoKTsKK2ludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KK0VPRgogaWYgdGVzdCAkc2hhcmVkIC1lcSAxOyB0aGVuCi0gIGVjaG8gQ2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuLi4KKyAgZWNobyBDaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4uLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICMgd2UgbXVzdCB0ZXN0IGluIHR3byBzdGVwcyAoY2MgdGhlbiBsZCksIHJlcXVpcmVkIGF0IGxlYXN0IG9uIFN1bk9TIDQueAotICBpZiB0ZXN0ICJgKCRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiICYmCi0gICAgIHRlc3QgImAoJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNIQVJFRExJQlYgd2l0aCAkQ0MuCisgIGlmIHRyeSAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jICYmCisgICAgIHRyeSAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm87IHRoZW4KKyAgICBlY2hvIEJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5ICRTSEFSRURMSUJWIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsaWYgdGVzdCAteiAiJG9sZF9jYyIgLWEgLXogIiRvbGRfY2ZsYWdzIjsgdGhlbgotICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4KKyAgICBlY2hvIE5vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBzaGFyZWQ9MDsKICAgZWxzZQotICAgIGVjaG8gVGVzdGVkICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMKLSAgICAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jCi0gICAgZWNobyBUZXN0ZWQgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vCi0gICAgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vCi0gICAgZWNobyAnTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUycKKyAgICBlY2hvICdObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0OyB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgc2hhcmVkPTA7CiAgIGZpCiBmaQpAQCAtMjU0LDI1ICs0MDAsNDMgQEAKICAgU0hBUkVETElCPSIiCiAgIFNIQVJFRExJQlY9IiIKICAgU0hBUkVETElCTT0iIgotICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRTVEFUSUNMSUIgdmVyc2lvbiAkVkVSIHdpdGggJENDLgorICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRTVEFUSUNMSUIgdmVyc2lvbiAkVkVSIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgIEFMTD0ic3RhdGljIHNoYXJlZCIKICAgVEVTVD0iYWxsIHRlc3RzdGF0aWMgdGVzdHNoYXJlZCIKIGZpCiAKKyMgY2hlY2sgZm9yIHVuZGVyc2NvcmVzIGluIGV4dGVybmFsIG5hbWVzIGZvciB1c2UgYnkgYXNzZW1ibGVyIGNvZGUKK0NQUD0ke0NQUC0iJENDIC1FIn0KK2Nhc2UgJENGTEFHUyBpbgorICAqQVNNViopCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCisgICAgc2hvdyAiJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyIKKyAgICBpZiB0ZXN0ICJgJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIjsgdGhlbgorICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgorICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWxzZQorICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIFllcy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGZpIDs7Citlc2FjCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQsIGFuZCBpZiBub25lLCBjaGVjayBmb3IgZnNlZWtvKCkKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIG9mZjY0X3QgZHVtbXkgPSAwOwogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTIC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCitpZiB0cnkgJENDIC1jICRDRkxBR1MgLURfTEFSR0VGSUxFNjRfU09VUkNFPTEgJHRlc3QuYzsgdGhlbgogICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKICAgU0ZMQUdTPSIke1NGTEFHU30gLURfTEFSR0VGSUxFNjRfU09VUkNFPTEiCiAgIEFMTD0iJHtBTEx9IGFsbDY0IgogICBURVNUPSIke1RFU1R9IHRlc3Q2NCIKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIgorICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQotICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBOby4iCisgIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiBpbnQgbWFpbih2b2lkKSB7CkBAIC0yODAsMjcyICs0NDQsMzM1IEBACiAgIHJldHVybiAwOwogfQogRU9GCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsc2UKICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRE5PX0ZTRUVLTyIKICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtRE5PX0ZTRUVLTyIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBmaQogZmkKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHN0cmVycm9yKCkgZm9yIHVzZSBieSBneiogZnVuY3Rpb25zCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK2ludCBtYWluKCkgeyByZXR1cm4gc3RybGVuKHN0cmVycm9yKGVycm5vKSk7IH0KK0VPRgoraWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0cmVycm9yLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19TVFJFUlJPUiIKKyAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19TVFJFUlJPUiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0cmVycm9yLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZmkKKworIyBjb3B5IGNsZWFuIHpjb25mLmggZm9yIHN1YnNlcXVlbnQgZWRpdHMKIGNwIC1wIHpjb25mLmguaW4gemNvbmYuaAogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3IgdW5pc3RkLmggYW5kIHNhdmUgcmVzdWx0IGluIHpjb25mLmgKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDx1bmlzdGQuaD4KIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgogICBzZWQgPCB6Y29uZi5oICIvXiNpZmRlZiBIQVZFX1VOSVNURF9ILiogbWF5IGJlL3MvZGVmIEhBVkVfVU5JU1REX0hcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKICAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIFllcy4iCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCi0gIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGZpCiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBzdGRhcmcuaCBhbmQgc2F2ZSByZXN1bHQgaW4gemNvbmYuaAorY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIHNlZCA8IHpjb25mLmggIi9eI2lmZGVmIEhBVkVfU1REQVJHX0guKiBtYXkgYmUvcy9kZWYgSEFWRV9TVERBUkdfSFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitmaQorCisjIGlmIHRoZSB6XyBwcmVmaXggd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmgKIGlmIHRlc3QgJHpwcmVmaXggLWVxIDE7IHRoZW4KICAgc2VkIDwgemNvbmYuaCAiLyNpZmRlZiBaX1BSRUZJWC4qIG1heSBiZS9zL2RlZiBaX1BSRUZJWFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAogICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAotICBlY2hvICJVc2luZyB6XyBwcmVmaXggb24gYWxsIHN5bWJvbHMuIgorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyAiVXNpbmcgel8gcHJlZml4IG9uIGFsbCBzeW1ib2xzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKIAorIyBpZiAtLXNvbG8gY29tcGlsYXRpb24gd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmggYW5kIHJlbW92ZSBneiBzdHVmZiBmcm9tIG9iamVjdCBsaXN0cworaWYgdGVzdCAkc29sbyAtZXEgMTsgdGhlbgorICBzZWQgJy8jZGVmaW5lIFpDT05GX0gvYVwKKyNkZWZpbmUgWl9TT0xPCisKKycgPCB6Y29uZi5oID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCitPQkpDPSckKE9CSlopJworUElDX09CSkM9JyQoUElDX09CSlopJworZmkKKworIyBpZiBjb2RlIGNvdmVyYWdlIHRlc3Rpbmcgd2FzIHJlcXVlc3RlZCwgdXNlIG9sZGVyIGdjYyBpZiBkZWZpbmVkLCBlLmcuICJnY2MtNC4yIiBvbiBNYWMgT1MgWAoraWYgdGVzdCAkY292ZXIgLWVxIDE7IHRoZW4KKyAgQ0ZMQUdTPSIke0NGTEFHU30gLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIgorICBpZiB0ZXN0IC1uICIkR0NDX0NMQVNTSUMiOyB0aGVuCisgICAgQ0M9JEdDQ19DTEFTU0lDCisgIGZpCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjb25kdWN0IGEgc2VyaWVzIG9mIHRlc3RzIHRvIHJlc29sdmUgZWlnaHQgcG9zc2libGUgY2FzZXMgb2YgdXNpbmcgInZzIiBvciAicyIgcHJpbnRmIGZ1bmN0aW9ucworIyAodXNpbmcgc3RkYXJnIG9yIG5vdCksIHdpdGggb3Igd2l0aG91dCAibiIgKHByb3Zpbmcgc2l6ZSBvZiBidWZmZXIpLCBhbmQgd2l0aCBvciB3aXRob3V0IGEKKyMgcmV0dXJuIHZhbHVlLiAgVGhlIG1vc3Qgc2VjdXJlIHJlc3VsdCBpcyB2c25wcmludGYoKSB3aXRoIGEgcmV0dXJuIHZhbHVlLiAgc25wcmludGYoKSB3aXRoIGEKKyMgcmV0dXJuIHZhbHVlIGlzIHNlY3VyZSBhcyB3ZWxsLCBidXQgdGhlbiBnenByaW50ZigpIHdpbGwgYmUgbGltaXRlZCB0byAyMCBhcmd1bWVudHMuCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlICJ6Y29uZi5oIgotCiBpbnQgbWFpbigpCiB7CiAjaWZuZGVmIFNUREMKICAgY2hva2UgbWUKICNlbmRpZgotCiAgIHJldHVybiAwOwogfQogRU9GCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkuIgotCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiAwOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKLSAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCi0KKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotCiBpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICBuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwogICByZXR1cm4gbjsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fdnNucHJpbnRmIgogICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX3ZzbnByaW50ZiIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCi0gICAgZWNobyAiICBXQVJOSU5HOiB2c25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byB2c3ByaW50ZigpLiB6bGliIgotICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IgotICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIFdBUk5JTkc6IHZzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHZzcHJpbnRmKCkuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgaW50IG47CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKLQogICB2YV9zdGFydChhcCwgZm10KTsKICAgbiA9IHZzcHJpbnRmKGJ1ZiwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiBuOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c3ByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3ZzcHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBmaQogZWxzZQotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkuIgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIpOwogICByZXR1cm4gMDsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgpKTsKIH0KIEVPRgogCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHJldHVybiBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCAiZm9vIik7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU19zbnByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NucHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fc25wcmludGYiCiAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fc25wcmludGYiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCi0gICAgZWNobyAiICBXQVJOSU5HOiBzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHNwcmludGYoKS4gemxpYiIKLSAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIKLSAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIFdBUk5JTkc6IHNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gc3ByaW50ZigpLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCAiZm9vIik7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZmkKIGZpCiAKKyMgc2VlIGlmIHdlIGNhbiBoaWRlIHpsaWIgaW50ZXJuYWwgc3ltYm9scyB0aGF0IGFyZSBsaW5rZWQgYmV0d2VlbiBzZXBhcmF0ZSBzb3VyY2UgZmlsZXMKIGlmIHRlc3QgIiRnY2MiIC1lcSAxOyB0aGVuCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykKLSMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCi0jZWxzZQotIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKLSNlbmRpZgorI2RlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiBpbnQgWkxJQl9JTlRFUk5BTCBmb287CiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAwOwogfQogRU9GCi0gIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIKKyAgaWYgdHJ5Ym90aCAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZWxzZQotICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX1ZJWiIKLSAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19WSVoiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGZpCiBmaQogCi1DUFA9JHtDUFAtIiRDQyAtRSJ9Ci1jYXNlICRDRkxBR1MgaW4KLSAgKkFTTVYqKQotICAgIGlmIHRlc3QgImAkTk0gJHRlc3QubyB8IGdyZXAgX2hlbGxvYCIgPSAiIjsgdGhlbgotICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgotICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLgotICAgIGVsc2UKLSAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBZZXMuCi0gICAgZmkgOzsKLWVzYWMKKyMgc2hvdyB0aGUgcmVzdWx0cyBpbiB0aGUgbG9nCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQUxMID0gJEFMTCA+PiBjb25maWd1cmUubG9nCitlY2hvIEFSID0gJEFSID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQVJGTEFHUyA9ICRBUkZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ0MgPSAkQ0MgPj4gY29uZmlndXJlLmxvZworZWNobyBDRkxBR1MgPSAkQ0ZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ1BQID0gJENQUCA+PiBjb25maWd1cmUubG9nCitlY2hvIEVYRSA9ICRFWEUgPj4gY29uZmlndXJlLmxvZworZWNobyBMRENPTkZJRyA9ICRMRENPTkZJRyA+PiBjb25maWd1cmUubG9nCitlY2hvIExERkxBR1MgPSAkTERGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIExEU0hBUkVEID0gJExEU0hBUkVEID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERTSEFSRURMSUJDID0gJExEU0hBUkVETElCQyA+PiBjb25maWd1cmUubG9nCitlY2hvIE9CSkMgPSAkT0JKQyA+PiBjb25maWd1cmUubG9nCitlY2hvIFBJQ19PQkpDID0gJFBJQ19PQkpDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gUkFOTElCID0gJFJBTkxJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFNGTEFHUyA9ICRTRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUIgPSAkU0hBUkVETElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCTSA9ICRTSEFSRURMSUJNID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCViA9ICRTSEFSRURMSUJWID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU1RBVElDTElCID0gJFNUQVRJQ0xJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFRFU1QgPSAkVEVTVCA+PiBjb25maWd1cmUubG9nCitlY2hvIFZFUiA9ICRWRVIgPj4gY29uZmlndXJlLmxvZworZWNobyBaX1U0ID0gJFpfVTQgPj4gY29uZmlndXJlLmxvZworZWNobyBleGVjX3ByZWZpeCA9ICRleGVjX3ByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIGluY2x1ZGVkaXIgPSAkaW5jbHVkZWRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIGxpYmRpciA9ICRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBtYW5kaXIgPSAkbWFuZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gcHJlZml4ID0gJHByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIHNoYXJlZGxpYmRpciA9ICRzaGFyZWRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyB1bmFtZSA9ICR1bmFtZSA+PiBjb25maWd1cmUubG9nCiAKLXJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotCi0jIHVkcGF0ZSBNYWtlZmlsZQorIyB1ZHBhdGUgTWFrZWZpbGUgd2l0aCB0aGUgY29uZmlndXJlIHJlc3VsdHMKIHNlZCA8IE1ha2VmaWxlLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwpAQCAtNTU3LDcgKzc4NCw4IEBACiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKIC9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIwogL15MRENPTkZJRyAqPS9zIz0uKiM9JExEQ09ORklHIwogL15MRFNIQVJFRExJQkMgKj0vcyM9LiojPSRMRFNIQVJFRExJQkMjCkBAIC01NjgsMTAgKzc5NiwxMyBAQAogL15zaGFyZWRsaWJkaXIgKj0vcyM9LiojPSRzaGFyZWRsaWJkaXIjCiAvXmluY2x1ZGVkaXIgKj0vcyM9LiojPSRpbmNsdWRlZGlyIwogL15tYW5kaXIgKj0vcyM9LiojPSRtYW5kaXIjCisvXk9CSkMgKj0vcyM9LiojPSAkT0JKQyMKKy9eUElDX09CSkMgKj0vcyM9LiojPSAkUElDX09CSkMjCiAvXmFsbDogKi9zIzouKiM6ICRBTEwjCiAvXnRlc3Q6ICovcyM6LiojOiAkVEVTVCMKICIgPiBNYWtlZmlsZQogCisjIGNyZWF0ZSB6bGliLnBjIHdpdGggdGhlIGNvbmZpZ3VyZSByZXN1bHRzCiBzZWQgPCB6bGliLnBjLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwpAQCAtNTgxLDcgKzgxMiw4IEBACiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKIC9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIwogL15FWEUgKj0vcyM9LiojPSRFWEUjCiAvXnByZWZpeCAqPS9zIz0uKiM9JHByZWZpeCMKQEAgLTU5NCwzICs4MjYsNiBAQAogIiB8IHNlZCAtZSAiCiBzL1xAVkVSU0lPTlxALyRWRVIvZzsKICIgPiB6bGliLnBjCisKKyMgZG9uZQorbGVhdmUgMApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NyYzMyLmMgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwppbmRleCA5MWJlMzcyLi45NzlhNzE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY3JjMzIuYworKysgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGNyYzMyLmMgLS0gY29tcHV0ZSB0aGUgQ1JDLTMyIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExLCAyMDEyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqCiAgKiBUaGFua3MgdG8gUm9kbmV5IEJyb3duIDxyYnJvd242NEBjc2MuY29tLmF1PiBmb3IgaGlzIGNvbnRyaWJ1dGlvbiBvZiBmYXN0ZXIKQEAgLTE3LDYgKzE3LDggQEAKICAgb2YgdGhlIGNyYyB0YWJsZXMuICBUaGVyZWZvcmUsIGlmIHlvdSAjZGVmaW5lIERZTkFNSUNfQ1JDX1RBQkxFLCB5b3Ugc2hvdWxkCiAgIGZpcnN0IGNhbGwgZ2V0X2NyY190YWJsZSgpIHRvIGluaXRpYWxpemUgdGhlIHRhYmxlcyBiZWZvcmUgYWxsb3dpbmcgbW9yZSB0aGFuCiAgIG9uZSB0aHJlYWQgdG8gdXNlIGNyYzMyKCkuCisKKyAgRFlOQU1JQ19DUkNfVEFCTEUgYW5kIE1BS0VDUkNIIGNhbiBiZSAjZGVmaW5lZCB0byB3cml0ZSBvdXQgY3JjMzIuaC4KICAqLwogCiAjaWZkZWYgTUFLRUNSQ0gKQEAgLTMwLDMxICszMiwxMSBAQAogCiAjZGVmaW5lIGxvY2FsIHN0YXRpYwogCi0vKiBGaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSBmb3IgY3JjMzJfbGl0dGxlKCkgYW5kIGNyYzMyX2JpZygpLiAqLwotI2lmbmRlZiBOT0JZRk9VUgotIyAgaWZkZWYgU1REQyAgICAgICAgICAgLyogbmVlZCBBTlNJIEMgbGltaXRzLmggdG8gZGV0ZXJtaW5lIHNpemVzICovCi0jICAgIGluY2x1ZGUgPGxpbWl0cy5oPgotIyAgICBkZWZpbmUgQllGT1VSCi0jICAgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTQ7Ci0jICAgIGVsc2UKLSMgICAgICBpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1NDsKLSMgICAgICBlbHNlCi0jICAgICAgICBpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1NDsKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgdW5kZWYgQllGT1VSICAgICAvKiBjYW4ndCBmaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSEgKi8KLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmIC8qIFNUREMgKi8KLSNlbmRpZiAvKiAhTk9CWUZPVVIgKi8KLQogLyogRGVmaW5pdGlvbnMgZm9yIGRvaW5nIHRoZSBjcmMgZm91ciBkYXRhIGJ5dGVzIGF0IGEgdGltZS4gKi8KKyNpZiAhZGVmaW5lZChOT0JZRk9VUikgJiYgZGVmaW5lZChaX1U0KQorIyAgZGVmaW5lIEJZRk9VUgorI2VuZGlmCiAjaWZkZWYgQllGT1VSCi0jICBkZWZpbmUgUkVWKHcpICgoKCh3KT4+MjQpJjB4ZmYpKygoKHcpPj44KSYweGZmMDApKyBcCi0gICAgICAgICAgICAgICAgKCgodykmMHhmZjAwKTw8OCkrKCgodykmMHhmZik8PDI0KSkKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfbGl0dGxlIE9GKCh1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnIE9GKCh1bnNpZ25lZCBsb25nLApAQCAtNjgsMTYgKzUwLDE2IEBACiBsb2NhbCB1bnNpZ25lZCBsb25nIGdmMl9tYXRyaXhfdGltZXMgT0YoKHVuc2lnbmVkIGxvbmcgKm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2ZWMpKTsKIGxvY2FsIHZvaWQgZ2YyX21hdHJpeF9zcXVhcmUgT0YoKHVuc2lnbmVkIGxvbmcgKnNxdWFyZSwgdW5zaWduZWQgbG9uZyAqbWF0KSk7Ci1sb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZjY0X3QgbGVuMik7Citsb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyBPRigodUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmY2NF90IGxlbjIpKTsKIAogCiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKIAogbG9jYWwgdm9sYXRpbGUgaW50IGNyY190YWJsZV9lbXB0eSA9IDE7Ci1sb2NhbCB1bnNpZ25lZCBsb25nIEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XTsKK2xvY2FsIHpfY3JjX3QgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdOwogbG9jYWwgdm9pZCBtYWtlX2NyY190YWJsZSBPRigodm9pZCkpOwogI2lmZGVmIE1BS0VDUkNICi0gICBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlIE9GKChGSUxFICosIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICopKTsKKyAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3Qgel9jcmNfdCBGQVIgKikpOwogI2VuZGlmIC8qIE1BS0VDUkNIICovCiAvKgogICBHZW5lcmF0ZSB0YWJsZXMgZm9yIGEgYnl0ZS13aXNlIDMyLWJpdCBDUkMgY2FsY3VsYXRpb24gb24gdGhlIHBvbHlub21pYWw6CkBAIC0xMDcsOSArODksOSBAQAogKi8KIGxvY2FsIHZvaWQgbWFrZV9jcmNfdGFibGUoKQogewotICAgIHVuc2lnbmVkIGxvbmcgYzsKKyAgICB6X2NyY190IGM7CiAgICAgaW50IG4sIGs7Ci0gICAgdW5zaWduZWQgbG9uZyBwb2x5OyAgICAgICAgICAgICAgICAgLyogcG9seW5vbWlhbCBleGNsdXNpdmUtb3IgcGF0dGVybiAqLworICAgIHpfY3JjX3QgcG9seTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbHlub21pYWwgZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8KICAgICAvKiB0ZXJtcyBvZiBwb2x5bm9taWFsIGRlZmluaW5nIHRoaXMgY3JjIChleGNlcHQgeF4zMik6ICovCiAgICAgc3RhdGljIHZvbGF0aWxlIGludCBmaXJzdCA9IDE7ICAgICAgLyogZmxhZyB0byBsaW1pdCBjb25jdXJyZW50IG1ha2luZyAqLwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9IHswLDEsMiw0LDUsNyw4LDEwLDExLDEyLDE2LDIyLDIzLDI2fTsKQEAgLTEyMSwxMyArMTAzLDEzIEBACiAgICAgICAgIGZpcnN0ID0gMDsKIAogICAgICAgICAvKiBtYWtlIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuIGZyb20gcG9seW5vbWlhbCAoMHhlZGI4ODMyMFVMKSAqLwotICAgICAgICBwb2x5ID0gMFVMOwotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKTsgbisrKQotICAgICAgICAgICAgcG9seSB8PSAxVUwgPDwgKDMxIC0gcFtuXSk7CisgICAgICAgIHBvbHkgPSAwOworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKGludCkoc2l6ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKSk7IG4rKykKKyAgICAgICAgICAgIHBvbHkgfD0gKHpfY3JjX3QpMSA8PCAoMzEgLSBwW25dKTsKIAogICAgICAgICAvKiBnZW5lcmF0ZSBhIGNyYyBmb3IgZXZlcnkgOC1iaXQgdmFsdWUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7Ci0gICAgICAgICAgICBjID0gKHVuc2lnbmVkIGxvbmcpbjsKKyAgICAgICAgICAgIGMgPSAoel9jcmNfdCluOwogICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDg7IGsrKykKICAgICAgICAgICAgICAgICBjID0gYyAmIDEgPyBwb2x5IF4gKGMgPj4gMSkgOiBjID4+IDE7CiAgICAgICAgICAgICBjcmNfdGFibGVbMF1bbl0gPSBjOwpAQCAtMTM4LDExICsxMjAsMTEgQEAKICAgICAgICAgICAgYW5kIHRoZW4gdGhlIGJ5dGUgcmV2ZXJzYWwgb2YgdGhvc2UgYXMgd2VsbCBhcyB0aGUgZmlyc3QgdGFibGUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAgICAgICAgICAgICBjID0gY3JjX3RhYmxlWzBdW25dOwotICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gUkVWKGMpOworICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAgICAgIGZvciAoayA9IDE7IGsgPCA0OyBrKyspIHsKICAgICAgICAgICAgICAgICBjID0gY3JjX3RhYmxlWzBdW2MgJiAweGZmXSBeIChjID4+IDgpOwogICAgICAgICAgICAgICAgIGNyY190YWJsZVtrXVtuXSA9IGM7Ci0gICAgICAgICAgICAgICAgY3JjX3RhYmxlW2sgKyA0XVtuXSA9IFJFVihjKTsKKyAgICAgICAgICAgICAgICBjcmNfdGFibGVbayArIDRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmIC8qIEJZRk9VUiAqLwpAQCAtMTY0LDcgKzE0Niw3IEBACiAgICAgICAgIGlmIChvdXQgPT0gTlVMTCkgcmV0dXJuOwogICAgICAgICBmcHJpbnRmKG91dCwgIi8qIGNyYzMyLmggLS0gdGFibGVzIGZvciByYXBpZCBDUkMgY2FsY3VsYXRpb25cbiIpOwogICAgICAgICBmcHJpbnRmKG91dCwgIiAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNyYzMyLmNcbiAqL1xuXG4iKTsKLSAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB6X2NyY190IEZBUiAiKTsKICAgICAgICAgZnByaW50ZihvdXQsICJjcmNfdGFibGVbVEJMU11bMjU2XSA9XG57XG4gIHtcbiIpOwogICAgICAgICB3cml0ZV90YWJsZShvdXQsIGNyY190YWJsZVswXSk7CiAjICBpZmRlZiBCWUZPVVIKQEAgLTE4NCwxMiArMTY2LDEzIEBACiAjaWZkZWYgTUFLRUNSQ0gKIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUob3V0LCB0YWJsZSkKICAgICBGSUxFICpvdXQ7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKnRhYmxlOworICAgIGNvbnN0IHpfY3JjX3QgRkFSICp0YWJsZTsKIHsKICAgICBpbnQgbjsKIAogICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykKLSAgICAgICAgZnByaW50ZihvdXQsICIlczB4JTA4bHhVTCVzIiwgbiAlIDUgPyAiIiA6ICIgICAgIiwgdGFibGVbbl0sCisgICAgICAgIGZwcmludGYob3V0LCAiJXMweCUwOGx4VUwlcyIsIG4gJSA1ID8gIiIgOiAiICAgICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHRhYmxlW25dKSwKICAgICAgICAgICAgICAgICBuID09IDI1NSA/ICJcbiIgOiAobiAlIDUgPT0gNCA/ICIsXG4iIDogIiwgIikpOwogfQogI2VuZGlmIC8qIE1BS0VDUkNIICovCkBAIC0yMDQsMTMgKzE4NywxMyBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBhc20gdmVyc2lvbnMgb2YgY3JjMzIoKQogICovCi1jb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCitjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCiB7CiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKICAgICBpZiAoY3JjX3RhYmxlX2VtcHR5KQogICAgICAgICBtYWtlX2NyY190YWJsZSgpOwogI2VuZGlmIC8qIERZTkFNSUNfQ1JDX1RBQkxFICovCi0gICAgcmV0dXJuIChjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqKWNyY190YWJsZTsKKyAgICByZXR1cm4gKGNvbnN0IHpfY3JjX3QgRkFSICopY3JjX3RhYmxlOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0yMzIsNyArMjE1LDcgQEAKIAogI2lmZGVmIEJZRk9VUgogICAgIGlmIChzaXplb2Yodm9pZCAqKSA9PSBzaXplb2YocHRyZGlmZl90KSkgewotICAgICAgICB1NCBlbmRpYW47CisgICAgICAgIHpfY3JjX3QgZW5kaWFuOwogCiAgICAgICAgIGVuZGlhbiA9IDE7CiAgICAgICAgIGlmICgqKCh1bnNpZ25lZCBjaGFyICopKCZlbmRpYW4pKSkKQEAgLTI2NiwxNyArMjQ5LDE3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKICAgICB1bnNpZ25lZCBsZW47CiB7Ci0gICAgcmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25zdCB1NCBGQVIgKmJ1ZjQ7CisgICAgcmVnaXN0ZXIgel9jcmNfdCBjOworICAgIHJlZ2lzdGVyIGNvbnN0IHpfY3JjX3QgRkFSICpidWY0OwogCi0gICAgYyA9ICh1NCljcmM7CisgICAgYyA9ICh6X2NyY190KWNyYzsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzBdWyhjIF4gKmJ1ZisrKSAmIDB4ZmZdIF4gKGMgPj4gOCk7CiAgICAgICAgIGxlbi0tOwogICAgIH0KIAotICAgIGJ1ZjQgPSAoY29uc3QgdTQgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOworICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0xJVDMyOwogICAgICAgICBsZW4gLT0gMzI7CkBAIC0zMDYsMTcgKzI4OSwxNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CiAgICAgdW5zaWduZWQgbGVuOwogewotICAgIHJlZ2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpidWY0OworICAgIHJlZ2lzdGVyIHpfY3JjX3QgYzsKKyAgICByZWdpc3RlciBjb25zdCB6X2NyY190IEZBUiAqYnVmNDsKIAotICAgIGMgPSBSRVYoKHU0KWNyYyk7CisgICAgYyA9IFpTV0FQMzIoKHpfY3JjX3QpY3JjKTsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzRdWyhjID4+IDI0KSBeICpidWYrK10gXiAoYyA8PCA4KTsKICAgICAgICAgbGVuLS07CiAgICAgfQogCi0gICAgYnVmNCA9IChjb25zdCB1NCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CisgICAgYnVmNCA9IChjb25zdCB6X2NyY190IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKICAgICBidWY0LS07CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0JJRzMyOwpAQCAtMzMzLDcgKzMxNiw3IEBACiAgICAgICAgIGMgPSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1ZisrXSBeIChjIDw8IDgpOwogICAgIH0gd2hpbGUgKC0tbGVuKTsKICAgICBjID0gfmM7Ci0gICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShSRVYoYykpOworICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoWlNXQVAzMihjKSk7CiB9CiAKICNlbmRpZiAvKiBCWUZPVVIgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jcmMzMi5oIGIvTW9kdWxlcy96bGliL2NyYzMyLmgKaW5kZXggODA1M2I2MS4uOWUwYzc3OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2NyYzMyLmgKKysrIGIvTW9kdWxlcy96bGliL2NyYzMyLmgKQEAgLTIsNyArMiw3IEBACiAgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jCiAgKi8KIAotbG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQorbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQogewogICB7CiAgICAgMHgwMDAwMDAwMFVMLCAweDc3MDczMDk2VUwsIDB4ZWUwZTYxMmNVTCwgMHg5OTA5NTFiYVVMLCAweDA3NmRjNDE5VUwsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuYwppbmRleCBiY2VmNjdjLi42OTY5NTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmMgLS0gY29tcHJlc3MgZGF0YSB1c2luZyB0aGUgZGVmbGF0aW9uIGFsZ29yaXRobQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTM3LDcgKzM3LDcgQEAKICAqICBSRUZFUkVOQ0VTCiAgKgogICogICAgICBEZXV0c2NoLCBMLlAuLCJERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiIuCi0gKiAgICAgIEF2YWlsYWJsZSBpbiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dAorICogICAgICBBdmFpbGFibGUgaW4gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MQogICoKICAqICAgICAgQSBkZXNjcmlwdGlvbiBvZiB0aGUgUmFiaW4gYW5kIEthcnAgYWxnb3JpdGhtIGlzIGdpdmVuIGluIHRoZSBib29rCiAgKiAgICAgICAgICJBbGdvcml0aG1zIiBieSBSLiBTZWRnZXdpY2ssIEFkZGlzb24tV2VzbGV5LCBwMjUyLgpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAogY29uc3QgY2hhciBkZWZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgZGVmbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKKyAgICIgZGVmbGF0ZSAxLjIuOCBDb3B5cmlnaHQgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtMTU1LDkgKzE1NSwxMiBAQAogc3RydWN0IHN0YXRpY190cmVlX2Rlc2NfcyB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KICNlbmRpZgogCisvKiByYW5rIFpfQkxPQ0sgYmV0d2VlbiBaX05PX0ZMVVNIIGFuZCBaX1BBUlRJQUxfRkxVU0ggKi8KKyNkZWZpbmUgUkFOSyhmKSAoKChmKSA8PCAxKSAtICgoZikgPiA0ID8gOSA6IDApKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFVwZGF0ZSBhIGhhc2ggdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgYnl0ZQotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIFVQREFURV9IQVNIIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCiAgKiAgICBpbnB1dCBjaGFyYWN0ZXJzLCBzbyB0aGF0IGEgcnVubmluZyBoYXNoIGtleSBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUKICAqICAgIHByZXZpb3VzIGtleSBpbnN0ZWFkIG9mIGNvbXBsZXRlIHJlY2FsY3VsYXRpb24gZWFjaCB0aW1lLgogICovCkBAIC0xNzAsNyArMTczLDcgQEAKICAqIHRoZSBwcmV2aW91cyBsZW5ndGggb2YgdGhlIGhhc2ggY2hhaW4uCiAgKiBJZiB0aGlzIGZpbGUgaXMgY29tcGlsZWQgd2l0aCAtREZBU1RFU1QsIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBmb3JjZWQKICAqIHRvIDEsIGFuZCBubyBoYXNoIGNoYWlucyBhcmUgbWFpbnRhaW5lZC4KLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKICAqICAgIGlucHV0IGNoYXJhY3RlcnMgYW5kIHRoZSBmaXJzdCBNSU5fTUFUQ0ggYnl0ZXMgb2Ygc3RyIGFyZSB2YWxpZAogICogICAgKGV4Y2VwdCBmb3IgdGhlIGxhc3QgTUlOX01BVENILTEgYnl0ZXMgb2YgdGhlIGlucHV0IGZpbGUpLgogICovCkBAIC0yMzUsMTAgKzIzOCwxOSBAQAogCiAgICAgc3RybS0+bXNnID0gWl9OVUxMOwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKIAogI2lmZGVmIEZBU1RFU1QKICAgICBpZiAobGV2ZWwgIT0gMCkgbGV2ZWwgPSAxOwpAQCAtMjkzLDcgKzMwNSw3IEBACiAgICAgaWYgKHMtPndpbmRvdyA9PSBaX05VTEwgfHwgcy0+cHJldiA9PSBaX05VTEwgfHwgcy0+aGVhZCA9PSBaX05VTEwgfHwKICAgICAgICAgcy0+cGVuZGluZ19idWYgPT0gWl9OVUxMKSB7CiAgICAgICAgIHMtPnN0YXR1cyA9IEZJTklTSF9TVEFURTsKLSAgICAgICAgc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coWl9NRU1fRVJST1IpOworICAgICAgICBzdHJtLT5tc2cgPSBFUlJfTVNHKFpfTUVNX0VSUk9SKTsKICAgICAgICAgZGVmbGF0ZUVuZCAoc3RybSk7CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9CkBAIC0zMTQsNDMgKzMyNiw3MCBAQAogICAgIHVJbnQgIGRpY3RMZW5ndGg7CiB7CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICB1SW50IGxlbmd0aCA9IGRpY3RMZW5ndGg7Ci0gICAgdUludCBuOwotICAgIElQb3MgaGFzaF9oZWFkID0gMDsKKyAgICB1SW50IHN0ciwgbjsKKyAgICBpbnQgd3JhcDsKKyAgICB1bnNpZ25lZCBhdmFpbDsKKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHQ7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMIHx8Ci0gICAgICAgIHN0cm0tPnN0YXRlLT53cmFwID09IDIgfHwKLSAgICAgICAgKHN0cm0tPnN0YXRlLT53cmFwID09IDEgJiYgc3RybS0+c3RhdGUtPnN0YXR1cyAhPSBJTklUX1NUQVRFKSkKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIHdyYXAgPSBzLT53cmFwOworICAgIGlmICh3cmFwID09IDIgfHwgKHdyYXAgPT0gMSAmJiBzLT5zdGF0dXMgIT0gSU5JVF9TVEFURSkgfHwgcy0+bG9va2FoZWFkKQogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAKLSAgICBzID0gc3RybS0+c3RhdGU7Ci0gICAgaWYgKHMtPndyYXApCisgICAgLyogd2hlbiB1c2luZyB6bGliIHdyYXBwZXJzLCBjb21wdXRlIEFkbGVyLTMyIGZvciBwcm92aWRlZCBkaWN0aW9uYXJ5ICovCisgICAgaWYgKHdyYXAgPT0gMSkKICAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKKyAgICBzLT53cmFwID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGF2b2lkIGNvbXB1dGluZyBBZGxlci0zMiBpbiByZWFkX2J1ZiAqLwogCi0gICAgaWYgKGxlbmd0aCA8IE1JTl9NQVRDSCkgcmV0dXJuIFpfT0s7Ci0gICAgaWYgKGxlbmd0aCA+IHMtPndfc2l6ZSkgewotICAgICAgICBsZW5ndGggPSBzLT53X3NpemU7Ci0gICAgICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIGxlbmd0aDsgLyogdXNlIHRoZSB0YWlsIG9mIHRoZSBkaWN0aW9uYXJ5ICovCisgICAgLyogaWYgZGljdGlvbmFyeSB3b3VsZCBmaWxsIHdpbmRvdywganVzdCByZXBsYWNlIHRoZSBoaXN0b3J5ICovCisgICAgaWYgKGRpY3RMZW5ndGggPj0gcy0+d19zaXplKSB7CisgICAgICAgIGlmICh3cmFwID09IDApIHsgICAgICAgICAgICAvKiBhbHJlYWR5IGVtcHR5IG90aGVyd2lzZSAqLworICAgICAgICAgICAgQ0xFQVJfSEFTSChzKTsKKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CisgICAgICAgICAgICBzLT5pbnNlcnQgPSAwOworICAgICAgICB9CisgICAgICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIHMtPndfc2l6ZTsgIC8qIHVzZSB0aGUgdGFpbCAqLworICAgICAgICBkaWN0TGVuZ3RoID0gcy0+d19zaXplOwogICAgIH0KLSAgICB6bWVtY3B5KHMtPndpbmRvdywgZGljdGlvbmFyeSwgbGVuZ3RoKTsKLSAgICBzLT5zdHJzdGFydCA9IGxlbmd0aDsKLSAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKWxlbmd0aDsKIAotICAgIC8qIEluc2VydCBhbGwgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSAoZXhjZXB0IGZvciB0aGUgbGFzdCB0d28gYnl0ZXMpLgotICAgICAqIHMtPmxvb2thaGVhZCBzdGF5cyBudWxsLCBzbyBzLT5pbnNfaCB3aWxsIGJlIHJlY29tcHV0ZWQgYXQgdGhlIG5leHQKLSAgICAgKiBjYWxsIG9mIGZpbGxfd2luZG93LgotICAgICAqLwotICAgIHMtPmluc19oID0gcy0+d2luZG93WzBdOwotICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbMV0pOwotICAgIGZvciAobiA9IDA7IG4gPD0gbGVuZ3RoIC0gTUlOX01BVENIOyBuKyspIHsKLSAgICAgICAgSU5TRVJUX1NUUklORyhzLCBuLCBoYXNoX2hlYWQpOworICAgIC8qIGluc2VydCBkaWN0aW9uYXJ5IGludG8gd2luZG93IGFuZCBoYXNoICovCisgICAgYXZhaWwgPSBzdHJtLT5hdmFpbF9pbjsKKyAgICBuZXh0ID0gc3RybS0+bmV4dF9pbjsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7CisgICAgc3RybS0+bmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopZGljdGlvbmFyeTsKKyAgICBmaWxsX3dpbmRvdyhzKTsKKyAgICB3aGlsZSAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgeworICAgICAgICBzdHIgPSBzLT5zdHJzdGFydDsKKyAgICAgICAgbiA9IHMtPmxvb2thaGVhZCAtIChNSU5fTUFUQ0gtMSk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsKKyNpZm5kZWYgRkFTVEVTVAorICAgICAgICAgICAgcy0+cHJldltzdHIgJiBzLT53X21hc2tdID0gcy0+aGVhZFtzLT5pbnNfaF07CisjZW5kaWYKKyAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICBzdHIrKzsKKyAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgICAgcy0+c3Ryc3RhcnQgPSBzdHI7CisgICAgICAgIHMtPmxvb2thaGVhZCA9IE1JTl9NQVRDSC0xOworICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICB9Ci0gICAgaWYgKGhhc2hfaGVhZCkgaGFzaF9oZWFkID0gMDsgIC8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICBzLT5zdHJzdGFydCArPSBzLT5sb29rYWhlYWQ7CisgICAgcy0+YmxvY2tfc3RhcnQgPSAobG9uZylzLT5zdHJzdGFydDsKKyAgICBzLT5pbnNlcnQgPSBzLT5sb29rYWhlYWQ7CisgICAgcy0+bG9va2FoZWFkID0gMDsKKyAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSC0xOworICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CisgICAgc3RybS0+bmV4dF9pbiA9IG5leHQ7CisgICAgc3RybS0+YXZhaWxfaW4gPSBhdmFpbDsKKyAgICBzLT53cmFwID0gd3JhcDsKICAgICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQoraW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0S2VlcCAoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwpAQCAtMzgwLDEyICs0MTksMjMgQEAKICAgICBzLT5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDsKIAogICAgIF90cl9pbml0KHMpOwotICAgIGxtX2luaXQocyk7CiAKICAgICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQorICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOworICAgIGlmIChyZXQgPT0gWl9PSykKKyAgICAgICAgbG1faW5pdChzdHJtLT5zdGF0ZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0ZVNldEhlYWRlciAoc3RybSwgaGVhZCkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBnel9oZWFkZXJwIGhlYWQ7CkBAIC0zOTcsMTQgKzQ0Nyw0MiBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUGVuZGluZyAoc3RybSwgcGVuZGluZywgYml0cykKKyAgICB1bnNpZ25lZCAqcGVuZGluZzsKKyAgICBpbnQgKmJpdHM7CisgICAgel9zdHJlYW1wIHN0cm07Cit7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChwZW5kaW5nICE9IFpfTlVMTCkKKyAgICAgICAgKnBlbmRpbmcgPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICBpZiAoYml0cyAhPSBaX05VTEwpCisgICAgICAgICpiaXRzID0gc3RybS0+c3RhdGUtPmJpX3ZhbGlkOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgKHN0cm0sIGJpdHMsIHZhbHVlKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGludCBiaXRzOwogICAgIGludCB2YWx1ZTsKIHsKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGludCBwdXQ7CisKICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgc3RybS0+c3RhdGUtPmJpX3ZhbGlkID0gYml0czsKLSAgICBzdHJtLT5zdGF0ZS0+YmlfYnVmID0gKHVzaCkodmFsdWUgJiAoKDEgPDwgYml0cykgLSAxKSk7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIGlmICgoQnl0ZWYgKikocy0+ZF9idWYpIDwgcy0+cGVuZGluZ19vdXQgKyAoKEJ1Zl9zaXplICsgNykgPj4gMykpCisgICAgICAgIHJldHVybiBaX0JVRl9FUlJPUjsKKyAgICBkbyB7CisgICAgICAgIHB1dCA9IEJ1Zl9zaXplIC0gcy0+YmlfdmFsaWQ7CisgICAgICAgIGlmIChwdXQgPiBiaXRzKQorICAgICAgICAgICAgcHV0ID0gYml0czsKKyAgICAgICAgcy0+YmlfYnVmIHw9ICh1c2gpKCh2YWx1ZSAmICgoMSA8PCBwdXQpIC0gMSkpIDw8IHMtPmJpX3ZhbGlkKTsKKyAgICAgICAgcy0+YmlfdmFsaWQgKz0gcHV0OworICAgICAgICBfdHJfZmx1c2hfYml0cyhzKTsKKyAgICAgICAgdmFsdWUgPj49IHB1dDsKKyAgICAgICAgYml0cyAtPSBwdXQ7CisgICAgfSB3aGlsZSAoYml0cyk7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKQEAgLTQzNSw2ICs1MTMsOCBAQAogICAgICAgICBzdHJtLT50b3RhbF9pbiAhPSAwKSB7CiAgICAgICAgIC8qIEZsdXNoIHRoZSBsYXN0IGJ1ZmZlcjogKi8KICAgICAgICAgZXJyID0gZGVmbGF0ZShzdHJtLCBaX0JMT0NLKTsKKyAgICAgICAgaWYgKGVyciA9PSBaX0JVRl9FUlJPUiAmJiBzLT5wZW5kaW5nID09IDApCisgICAgICAgICAgICBlcnIgPSBaX09LOwogICAgIH0KICAgICBpZiAocy0+bGV2ZWwgIT0gbGV2ZWwpIHsKICAgICAgICAgcy0+bGV2ZWwgPSBsZXZlbDsKQEAgLTU2MiwxOSArNjQyLDIyIEBACiBsb2NhbCB2b2lkIGZsdXNoX3BlbmRpbmcoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKLSAgICB1bnNpZ25lZCBsZW4gPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICB1bnNpZ25lZCBsZW47CisgICAgZGVmbGF0ZV9zdGF0ZSAqcyA9IHN0cm0tPnN0YXRlOwogCisgICAgX3RyX2ZsdXNoX2JpdHMocyk7CisgICAgbGVuID0gcy0+cGVuZGluZzsKICAgICBpZiAobGVuID4gc3RybS0+YXZhaWxfb3V0KSBsZW4gPSBzdHJtLT5hdmFpbF9vdXQ7CiAgICAgaWYgKGxlbiA9PSAwKSByZXR1cm47CiAKLSAgICB6bWVtY3B5KHN0cm0tPm5leHRfb3V0LCBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQsIGxlbik7CisgICAgem1lbWNweShzdHJtLT5uZXh0X291dCwgcy0+cGVuZGluZ19vdXQsIGxlbik7CiAgICAgc3RybS0+bmV4dF9vdXQgICs9IGxlbjsKLSAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQgICs9IGxlbjsKKyAgICBzLT5wZW5kaW5nX291dCAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX291dCArPSBsZW47CiAgICAgc3RybS0+YXZhaWxfb3V0ICAtPSBsZW47Ci0gICAgc3RybS0+c3RhdGUtPnBlbmRpbmcgLT0gbGVuOwotICAgIGlmIChzdHJtLT5zdGF0ZS0+cGVuZGluZyA9PSAwKSB7Ci0gICAgICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nX2J1ZjsKKyAgICBzLT5wZW5kaW5nIC09IGxlbjsKKyAgICBpZiAocy0+cGVuZGluZyA9PSAwKSB7CisgICAgICAgIHMtPnBlbmRpbmdfb3V0ID0gcy0+cGVuZGluZ19idWY7CiAgICAgfQogfQogCkBAIC04MDEsNyArODg0LDcgQEAKICAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQgYW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcAogICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi4KICAgICAgKi8KLSAgICB9IGVsc2UgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZmx1c2ggPD0gb2xkX2ZsdXNoICYmCisgICAgfSBlbHNlIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIFJBTksoZmx1c2gpIDw9IFJBTksob2xkX2ZsdXNoKSAmJgogICAgICAgICAgICAgICAgZmx1c2ggIT0gWl9GSU5JU0gpIHsKICAgICAgICAgRVJSX1JFVFVSTihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgfQpAQCAtODUwLDYgKzkzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05NDUsMTIgKzEwMjksMTIgQEAKIAogICAgIHNzID0gc291cmNlLT5zdGF0ZTsKIAotICAgIHptZW1jcHkoZGVzdCwgc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOwogCiAgICAgZHMgPSAoZGVmbGF0ZV9zdGF0ZSAqKSBaQUxMT0MoZGVzdCwgMSwgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoZHMgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgZGVzdC0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKSBkczsKLSAgICB6bWVtY3B5KGRzLCBzcywgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMsICh2b2lkcGYpc3MsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CiAgICAgZHMtPnN0cm0gPSBkZXN0OwogCiAgICAgZHMtPndpbmRvdyA9IChCeXRlZiAqKSBaQUxMT0MoZGVzdCwgZHMtPndfc2l6ZSwgMipzaXplb2YoQnl0ZSkpOwpAQCAtOTY2LDggKzEwNTAsOCBAQAogICAgIH0KICAgICAvKiBmb2xsb3dpbmcgem1lbWNweSBkbyBub3Qgd29yayBmb3IgMTYtYml0IE1TRE9TICovCiAgICAgem1lbWNweShkcy0+d2luZG93LCBzcy0+d2luZG93LCBkcy0+d19zaXplICogMiAqIHNpemVvZihCeXRlKSk7Ci0gICAgem1lbWNweShkcy0+cHJldiwgc3MtPnByZXYsIGRzLT53X3NpemUgKiBzaXplb2YoUG9zKSk7Ci0gICAgem1lbWNweShkcy0+aGVhZCwgc3MtPmhlYWQsIGRzLT5oYXNoX3NpemUgKiBzaXplb2YoUG9zKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLT5wcmV2LCAodm9pZHBmKXNzLT5wcmV2LCBkcy0+d19zaXplICogc2l6ZW9mKFBvcykpOworICAgIHptZW1jcHkoKHZvaWRwZilkcy0+aGVhZCwgKHZvaWRwZilzcy0+aGVhZCwgZHMtPmhhc2hfc2l6ZSAqIHNpemVvZihQb3MpKTsKICAgICB6bWVtY3B5KGRzLT5wZW5kaW5nX2J1Ziwgc3MtPnBlbmRpbmdfYnVmLCAodUludClkcy0+cGVuZGluZ19idWZfc2l6ZSk7CiAKICAgICBkcy0+cGVuZGluZ19vdXQgPSBkcy0+cGVuZGluZ19idWYgKyAoc3MtPnBlbmRpbmdfb3V0IC0gc3MtPnBlbmRpbmdfYnVmKTsKQEAgLTEwMDEsMTUgKzEwODUsMTUgQEAKIAogICAgIHN0cm0tPmF2YWlsX2luICAtPSBsZW47CiAKKyAgICB6bWVtY3B5KGJ1Ziwgc3RybS0+bmV4dF9pbiwgbGVuKTsKICAgICBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMSkgewotICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIHN0cm0tPm5leHRfaW4sIGxlbik7CisgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgYnVmLCBsZW4pOwogICAgIH0KICNpZmRlZiBHWklQCiAgICAgZWxzZSBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMikgewotICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdHJtLT5uZXh0X2luLCBsZW4pOworICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBidWYsIGxlbik7CiAgICAgfQogI2VuZGlmCi0gICAgem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7CiAgICAgc3RybS0+bmV4dF9pbiAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX2luICs9IGxlbjsKIApAQCAtMTAzNiw2ICsxMTIwLDcgQEAKICAgICBzLT5zdHJzdGFydCA9IDA7CiAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKICAgICBzLT5sb29rYWhlYWQgPSAwOworICAgIHMtPmluc2VydCA9IDA7CiAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+cHJldl9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgIHMtPmluc19oID0gMDsKQEAgLTEzMTAsNiArMTM5NSw4IEBACiAgICAgdW5zaWduZWQgbW9yZTsgICAgLyogQW1vdW50IG9mIGZyZWUgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgd2luZG93LiAqLwogICAgIHVJbnQgd3NpemUgPSBzLT53X3NpemU7CiAKKyAgICBBc3NlcnQocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCwgImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZCIpOworCiAgICAgZG8gewogICAgICAgICBtb3JlID0gKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZSAtKHVsZylzLT5sb29rYWhlYWQgLSh1bGcpcy0+c3Ryc3RhcnQpOwogCkBAIC0xMzYyLDcgKzE0NDksNyBAQAogI2VuZGlmCiAgICAgICAgICAgICBtb3JlICs9IHdzaXplOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSByZXR1cm47CisgICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSBicmVhazsKIAogICAgICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzoKICAgICAgICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiYKQEAgLTEzODEsMTIgKzE0NjgsMjQgQEAKICAgICAgICAgcy0+bG9va2FoZWFkICs9IG47CiAKICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB2YWx1ZSBub3cgdGhhdCB3ZSBoYXZlIHNvbWUgaW5wdXQ6ICovCi0gICAgICAgIGlmIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7Ci0gICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzLT5zdHJzdGFydF07Ci0gICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3MtPnN0cnN0YXJ0KzFdKTsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgICAgIHVJbnQgc3RyID0gcy0+c3Ryc3RhcnQgLSBzLT5pbnNlcnQ7CisgICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzdHJdOworICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyAxXSk7CiAjaWYgTUlOX01BVENIICE9IDMKICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCiAjZW5kaWYKKyAgICAgICAgICAgIHdoaWxlIChzLT5pbnNlcnQpIHsKKyAgICAgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgICAgICBzLT5wcmV2W3N0ciAmIHMtPndfbWFza10gPSBzLT5oZWFkW3MtPmluc19oXTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICAgICAgc3RyKys7CisgICAgICAgICAgICAgICAgcy0+aW5zZXJ0LS07CisgICAgICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA8IE1JTl9NQVRDSCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogSWYgdGhlIHdob2xlIGlucHV0IGhhcyBsZXNzIHRoYW4gTUlOX01BVENIIGJ5dGVzLCBpbnNfaCBpcyBnYXJiYWdlLAogICAgICAgICAgKiBidXQgdGhpcyBpcyBub3QgaW1wb3J0YW50IHNpbmNlIG9ubHkgbGl0ZXJhbCBieXRlcyB3aWxsIGJlIGVtaXR0ZWQuCkBAIC0xNDI3LDYgKzE1MjYsOSBAQAogICAgICAgICAgICAgcy0+aGlnaF93YXRlciArPSBpbml0OwogICAgICAgICB9CiAgICAgfQorCisgICAgQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUgLSBNSU5fTE9PS0FIRUFELAorICAgICAgICAgICAibm90IGVub3VnaCByb29tIGZvciBzZWFyY2giKTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNTA2LDggKzE2MDgsMTQgQEAKICAgICAgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOwogICAgICAgICB9CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKChsb25nKXMtPnN0cnN0YXJ0ID4gcy0+YmxvY2tfc3RhcnQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE2MDMsOCArMTcxMSwxNCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0IDwgTUlOX01BVENILTEgPyBzLT5zdHJzdGFydCA6IE1JTl9NQVRDSC0xOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAjaWZuZGVmIEZBU1RFU1QKQEAgLTE3MjgsOCArMTg0MiwxNCBAQAogICAgICAgICBfdHJfdGFsbHlfbGl0KHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSwgYmZsdXNoKTsKICAgICAgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSBzLT5zdHJzdGFydCA8IE1JTl9NQVRDSC0xID8gcy0+c3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMTsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KICNlbmRpZiAvKiBGQVNURVNUICovCiAKQEAgLTE3NDksMTEgKzE4NjksMTEgQEAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdAogICAgICAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwotICAgICAgICAgKiBmb3IgdGhlIGxvbmdlc3QgZW5jb2RhYmxlIHJ1bi4KKyAgICAgICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8IE1BWF9NQVRDSCkgeworICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7Ci0gICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUFYX01BVENIICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHsKKyAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPD0gTUFYX01BVENIICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmVlZF9tb3JlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KQEAgLTE3NzYsNiArMTg5Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoX2xlbmd0aCA+IHMtPmxvb2thaGVhZCkKICAgICAgICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+bG9va2FoZWFkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1SW50KShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOwogICAgICAgICB9CiAKICAgICAgICAgLyogRW1pdCBtYXRjaCBpZiBoYXZlIHJ1biBvZiBNSU5fTUFUQ0ggb3IgbG9uZ2VyLCBlbHNlIGVtaXQgbGl0ZXJhbCAqLwpAQCAtMTc5Niw4ICsxOTE3LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xODI5LDYgKzE5NTYsMTIgQEAKICAgICAgICAgcy0+c3Ryc3RhcnQrKzsKICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmggYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCmluZGV4IGNiZjBkMWUuLmNlMDI5OWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKKysrIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGRlZmxhdGUuaCAtLSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQ4LDYgKzQ4LDkgQEAKICNkZWZpbmUgTUFYX0JJVFMgMTUKIC8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqLwogCisjZGVmaW5lIEJ1Zl9zaXplIDE2CisvKiBzaXplIG9mIGJpdCBidWZmZXIgaW4gYmlfYnVmICovCisKICNkZWZpbmUgSU5JVF9TVEFURSAgICA0MgogI2RlZmluZSBFWFRSQV9TVEFURSAgIDY5CiAjZGVmaW5lIE5BTUVfU1RBVEUgICAgNzMKQEAgLTEwMSw3ICsxMDQsNyBAQAogICAgIGludCAgIHdyYXA7ICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KICAgICBnel9oZWFkZXJwICBnemhlYWQ7ICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqLwogICAgIHVJbnQgICBnemluZGV4OyAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovCi0gICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogU1RPUkVEIChmb3IgemlwIG9ubHkpIG9yIERFRkxBVEVEICovCisgICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogY2FuIG9ubHkgYmUgREVGTEFURUQgKi8KICAgICBpbnQgICBsYXN0X2ZsdXNoOyAgICAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlvdXMgZGVmbGF0ZSBjYWxsICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IGRlZmxhdGUuYzogKi8KQEAgLTE4OCw3ICsxOTEsNyBAQAogICAgIGludCBuaWNlX21hdGNoOyAvKiBTdG9wIHNlYXJjaGluZyB3aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovCi0gICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcmVzcyBjb21waWxlciB3YXJuaW5nICovCisgICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLwogICAgIHN0cnVjdCBjdF9kYXRhX3MgZHluX2x0cmVlW0hFQVBfU0laRV07ICAgLyogbGl0ZXJhbCBhbmQgbGVuZ3RoIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9kdHJlZVsyKkRfQ09ERVMrMV07IC8qIGRpc3RhbmNlIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGJsX3RyZWVbMipCTF9DT0RFUysxXTsgIC8qIEh1ZmZtYW4gdHJlZSBmb3IgYml0IGxlbmd0aHMgKi8KQEAgLTI0NCw3ICsyNDcsNyBAQAogICAgIHVsZyBvcHRfbGVuOyAgICAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggb3B0aW1hbCB0cmVlcyAqLwogICAgIHVsZyBzdGF0aWNfbGVuOyAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICovCiAgICAgdUludCBtYXRjaGVzOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqLwotICAgIGludCBsYXN0X2VvYl9sZW47ICAgLyogYml0IGxlbmd0aCBvZiBFT0IgY29kZSBmb3IgbGFzdCBibG9jayAqLworICAgIHVJbnQgaW5zZXJ0OyAgICAgICAgLyogYnl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqLwogCiAjaWZkZWYgREVCVUcKICAgICB1bGcgY29tcHJlc3NlZF9sZW47IC8qIHRvdGFsIGJpdCBsZW5ndGggb2YgY29tcHJlc3NlZCBmaWxlIG1vZCAyXjMyICovCkBAIC0yOTQsNiArMjk3LDcgQEAKIGludCBaTElCX0lOVEVSTkFMIF90cl90YWxseSBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdW5zaWduZWQgZGlzdCwgdW5zaWduZWQgbGMpKTsKIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9hbGlnbiBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9zdG9yZWRfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMgYi9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCmluZGV4IDYwNDczNmYuLjEzOGE2OTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMKKysrIGIvTW9kdWxlcy96bGliL2V4YW1wbGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGV4YW1wbGUuYyAtLSB1c2FnZSBleGFtcGxlIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2IEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTI2LDcgKzI2LDcgQEAKICAgICB9IFwKIH0KIAotY29uc3QgY2hhciBoZWxsb1tdID0gImhlbGxvLCBoZWxsbyEiOworel9jb25zdCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhlbGxvISI7CiAvKiAiaGVsbG8gd29ybGQiIHdvdWxkIGJlIG1vcmUgc3RhbmRhcmQsIGJ1dCB0aGUgcmVwZWF0ZWQgImhlbGxvIgogICogc3RyZXNzZXMgdGhlIGNvbXByZXNzaW9uIGNvZGUgYmV0dGVyLCBzb3JyeS4uLgogICovCkBAIC0zNCwxMCArMzQsNiBAQAogY29uc3QgY2hhciBkaWN0aW9uYXJ5W10gPSAiaGVsbG8iOwogdUxvbmcgZGljdElkOyAvKiBBZGxlcjMyIHZhbHVlIG9mIHRoZSBkaWN0aW9uYXJ5ICovCiAKLXZvaWQgdGVzdF9jb21wcmVzcyAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwotdm9pZCB0ZXN0X2d6aW8gICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKmZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKIHZvaWQgdGVzdF9kZWZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4pKTsKIHZvaWQgdGVzdF9pbmZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwpAQCAtNTMsNiArNDksMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CiBpbnQgIG1haW4gICAgICAgICAgICAgICBPRigoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkpOwogCisKKyNpZmRlZiBaX1NPTE8KKwordm9pZCAqbXlhbGxvYyBPRigodm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKTsKK3ZvaWQgbXlmcmVlIE9GKCh2b2lkICosIHZvaWQgKikpOworCit2b2lkICpteWFsbG9jKHEsIG4sIG0pCisgICAgdm9pZCAqcTsKKyAgICB1bnNpZ25lZCBuLCBtOworeworICAgIHEgPSBaX05VTEw7CisgICAgcmV0dXJuIGNhbGxvYyhuLCBtKTsKK30KKwordm9pZCBteWZyZWUodm9pZCAqcSwgdm9pZCAqcCkKK3sKKyAgICBxID0gWl9OVUxMOworICAgIGZyZWUocCk7Cit9CisKK3N0YXRpYyBhbGxvY19mdW5jIHphbGxvYyA9IG15YWxsb2M7CitzdGF0aWMgZnJlZV9mdW5jIHpmcmVlID0gbXlmcmVlOworCisjZWxzZSAvKiAhWl9TT0xPICovCisKK3N0YXRpYyBhbGxvY19mdW5jIHphbGxvYyA9IChhbGxvY19mdW5jKTA7CitzdGF0aWMgZnJlZV9mdW5jIHpmcmVlID0gKGZyZWVfZnVuYykwOworCit2b2lkIHRlc3RfY29tcHJlc3MgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9nemlvICAgICAgICAgIE9GKChjb25zdCBjaGFyICpmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGVzdCBjb21wcmVzcygpIGFuZCB1bmNvbXByZXNzKCkKICAqLwpAQCAtMTYzLDYgKzE5Miw4IEBACiAjZW5kaWYKIH0KIAorI2VuZGlmIC8qIFpfU09MTyAqLworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFRlc3QgZGVmbGF0ZSgpIHdpdGggc21hbGwgYnVmZmVycwogICovCkBAIC0xNzQsMTQgKzIwNSwxNCBAQAogICAgIGludCBlcnI7CiAgICAgdUxvbmcgbGVuID0gKHVMb25nKXN0cmxlbihoZWxsbykrMTsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAKICAgICB3aGlsZSAoY19zdHJlYW0udG90YWxfaW4gIT0gbGVuICYmIGNfc3RyZWFtLnRvdGFsX291dCA8IGNvbXByTGVuKSB7CkBAIC0yMTMsOCArMjQ0LDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTI1Miw4ICsyODMsOCBAQAogICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KICAgICBpbnQgZXJyOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfQkVTVF9TUEVFRCk7CkBAIC0zMDksOCArMzQwLDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTM0OSwxNCArMzgwLDE0IEBACiAgICAgaW50IGVycjsKICAgICB1SW50IGxlbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAgICAgY19zdHJlYW0uYXZhaWxfaW4gPSAzOwogICAgIGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpjb21wckxlbjsKQEAgLTM4OCw4ICs0MTksOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtNDMwLDIyICs0NjEsMjIgQEAKICAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCiAgICAgaW50IGVycjsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCiAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJmNfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgICAgICAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZVNldERpY3Rpb25hcnkiKTsKIAogICAgIGRpY3RJZCA9IGNfc3RyZWFtLmFkbGVyOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAgICAgY19zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpY29tcHJMZW47CiAKLSAgICBjX3N0cmVhbS5uZXh0X2luID0gKEJ5dGVmKiloZWxsbzsKKyAgICBjX3N0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc3RybGVuKGhlbGxvKSsxOwogCiAgICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfRklOSVNIKTsKQEAgLTQ2OSw4ICs1MDAsOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtNDkxLDcgKzUyMiw3IEBACiAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZkX3N0cmVhbSwgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKICAgICAgICAgfQogICAgICAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZSB3aXRoIGRpY3QiKTsKICAgICB9CkBAIC01NDAsMTAgKzU3MSwxNSBAQAogICAgICAgICBwcmludGYoIm91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KKworI2lmZGVmIFpfU09MTworICAgIGFyZ2MgPSBzdHJsZW4oYXJndlswXSk7CisjZWxzZQogICAgIHRlc3RfY29tcHJlc3MoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKIAogICAgIHRlc3RfZ3ppbygoYXJnYyA+IDEgPyBhcmd2WzFdIDogVEVTVEZJTEUpLAogICAgICAgICAgICAgICB1bmNvbXByLCB1bmNvbXByTGVuKTsKKyNlbmRpZgogCiAgICAgdGVzdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbik7CiAgICAgdGVzdF9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3pndXRzLmggYi9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKaW5kZXggMGY4ZmI3OS4uZDg3NjU5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6Z3V0cy5oCisrKyBiL01vZHVsZXMvemxpYi9nemd1dHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGd6Z3V0cy5oIC0tIHpsaWIgaW50ZXJuYWwgaGVhZGVyIGRlZmluaXRpb25zIGZvciBneiogb3BlcmF0aW9ucwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTIsNyArMTIsNyBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorI2lmZGVmIEhBVkVfSElEREVOCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogI2Vsc2UKICMgIGRlZmluZSBaTElCX0lOVEVSTkFMCkBAIC0yNywxMyArMjcsODAgQEAKICNlbmRpZgogI2luY2x1ZGUgPGZjbnRsLmg+CiAKKyNpZmRlZiBfV0lOMzIKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX1dJTjMyKQorIyAgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWZkZWYgV0lOQVBJX0ZBTUlMWQorIyAgZGVmaW5lIG9wZW4gX29wZW4KKyMgIGRlZmluZSByZWFkIF9yZWFkCisjICBkZWZpbmUgd3JpdGUgX3dyaXRlCisjICBkZWZpbmUgY2xvc2UgX2Nsb3NlCisjZW5kaWYKKwogI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwogIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKICNlbmRpZgogCisjaWYgZGVmaW5lZChTVERDOTkpIHx8IChkZWZpbmVkKF9fVFVSQk9DX18pICYmIF9fVFVSQk9DX18gPj0gMHg1NTApCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1TRE9TKSAmJiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKEJPUkxBTkRDID4gMHg0MTApCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgIGlmZGVmIE1TRE9TCisvKiB2c25wcmludGYgbWF5IGV4aXN0IG9uIHNvbWUgTVMtRE9TIGNvbXBpbGVycyAoREpHUFA/KSwKKyAgIGJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzdW1lIGl0IGRvZXNuJ3QuICovCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX1RVUkJPQ19fCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBXSU4zMgorLyogSW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KKyMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisjICAgICAgaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNTAwICkKKyMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fU0FTQworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgVk1TCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX09TNDAwX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fTVZTX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiB1bmxpa2Ugc25wcmludGYgKHdoaWNoIGlzIHJlcXVpcmVkIGluIEM5OSwgeWV0IHN0aWxsIG5vdCBzdXBwb3J0ZWQgYnkKKyAgIE1pY3Jvc29mdCBtb3JlIHRoYW4gYSBkZWNhZGUgbGF0ZXIhKSwgX3NucHJpbnRmIGRvZXMgbm90IGd1YXJhbnRlZSBudWxsCisgICB0ZXJtaW5hdGlvbiBvZiB0aGUgcmVzdWx0IC0tIGhvd2V2ZXIgdGhpcyBpcyBvbmx5IHVzZWQgaW4gZ3psaWIuYyB3aGVyZQorICAgdGhlIHJlc3VsdCBpcyBhc3N1cmVkIHRvIGZpdCBpbiB0aGUgc3BhY2UgcHJvdmlkZWQgKi8KICNpZmRlZiBfTVNDX1ZFUgotIyAgaW5jbHVkZSA8aW8uaD4KLSMgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCiAKICNpZm5kZWYgbG9jYWwKQEAgLTUyLDcgKzExOSw3IEBACiAjICBpbmNsdWRlIDx3aW5kb3dzLmg+CiAjICBkZWZpbmUgenN0cmVycm9yKCkgZ3pfc3Ryd2luZXJyb3IoKERXT1JEKUdldExhc3RFcnJvcigpKQogI2Vsc2UKLSMgIGlmZGVmIFNUREMKKyMgIGlmbmRlZiBOT19TVFJFUlJPUgogIyAgICBpbmNsdWRlIDxlcnJuby5oPgogIyAgICBkZWZpbmUgenN0cmVycm9yKCkgc3RyZXJyb3IoZXJybm8pCiAjICBlbHNlCkBAIC02OCw3ICsxMzUsMTUgQEAKICAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOwogI2VuZGlmCiAKLS8qIGRlZmF1bHQgaS9vIGJ1ZmZlciBzaXplIC0tIGRvdWJsZSB0aGlzIGZvciBvdXRwdXQgd2hlbiByZWFkaW5nICovCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisjaWYgTUFYX01FTV9MRVZFTCA+PSA4CisjICBkZWZpbmUgREVGX01FTV9MRVZFTCA4CisjZWxzZQorIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgIE1BWF9NRU1fTEVWRUwKKyNlbmRpZgorCisvKiBkZWZhdWx0IGkvbyBidWZmZXIgc2l6ZSAtLSBkb3VibGUgdGhpcyBmb3Igb3V0cHV0IHdoZW4gcmVhZGluZyAodGhpcyBhbmQKKyAgIHR3aWNlIHRoaXMgbXVzdCBiZSBhYmxlIHRvIGZpdCBpbiBhbiB1bnNpZ25lZCB0eXBlKSAqLwogI2RlZmluZSBHWkJVRlNJWkUgODE5MgogCiAvKiBnemlwIG1vZGVzLCBhbHNvIHByb3ZpZGUgYSBsaXR0bGUgaW50ZWdyaXR5IGNoZWNrIG9uIHRoZSBwYXNzZWQgc3RydWN0dXJlICovCkBAIC04NCwyMyArMTU5LDI1IEBACiAKIC8qIGludGVybmFsIGd6aXAgZmlsZSBzdGF0ZSBkYXRhIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAvKiBleHBvc2VkIGNvbnRlbnRzIGZvciBnemdldGMoKSBtYWNybyAqLworICAgIHN0cnVjdCBnekZpbGVfcyB4OyAgICAgIC8qICJ4IiBmb3IgZXhwb3NlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHguaGF2ZTogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCB4Lm5leHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4Lm5leHQ6IG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgucG9zOiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgICAgIC8qIHVzZWQgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyAqLwogICAgIGludCBtb2RlOyAgICAgICAgICAgICAgIC8qIHNlZSBnemlwIG1vZGVzIGFib3ZlICovCiAgICAgaW50IGZkOyAgICAgICAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCiAgICAgY2hhciAqcGF0aDsgICAgICAgICAgICAgLyogcGF0aCBvciBmZCBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLSAgICB6X29mZjY0X3QgcG9zOyAgICAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgdW5zaWduZWQgc2l6ZTsgICAgICAgICAgLyogYnVmZmVyIHNpemUsIHplcm8gaWYgbm90IGFsbG9jYXRlZCB5ZXQgKi8KICAgICB1bnNpZ25lZCB3YW50OyAgICAgICAgICAvKiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUsIGRlZmF1bHQgaXMgR1pCVUZTSVpFICovCiAgICAgdW5zaWduZWQgY2hhciAqaW47ICAgICAgLyogaW5wdXQgYnVmZmVyICovCiAgICAgdW5zaWduZWQgY2hhciAqb3V0OyAgICAgLyogb3V0cHV0IGJ1ZmZlciAoZG91YmxlLXNpemVkIHdoZW4gcmVhZGluZykgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpuZXh0OyAgICAvKiBuZXh0IG91dHB1dCBkYXRhIHRvIGRlbGl2ZXIgb3Igd3JpdGUgKi8KKyAgICBpbnQgZGlyZWN0OyAgICAgICAgICAgICAvKiAwIGlmIHByb2Nlc3NpbmcgZ3ppcCwgMSBpZiB0cmFuc3BhcmVudCAqLwogICAgICAgICAvKiBqdXN0IGZvciByZWFkaW5nICovCi0gICAgdW5zaWduZWQgaGF2ZTsgICAgICAgICAgLyogYW1vdW50IG9mIG91dHB1dCBkYXRhIHVudXNlZCBhdCBuZXh0ICovCi0gICAgaW50IGVvZjsgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBlbmQgb2YgaW5wdXQgZmlsZSByZWFjaGVkICovCi0gICAgel9vZmY2NF90IHN0YXJ0OyAgICAgICAgLyogd2hlcmUgdGhlIGd6aXAgZGF0YSBzdGFydGVkLCBmb3IgcmV3aW5kaW5nICovCi0gICAgel9vZmY2NF90IHJhdzsgICAgICAgICAgLyogd2hlcmUgdGhlIHJhdyBkYXRhIHN0YXJ0ZWQsIGZvciBzZWVraW5nICovCiAgICAgaW50IGhvdzsgICAgICAgICAgICAgICAgLyogMDogZ2V0IGhlYWRlciwgMTogY29weSwgMjogZGVjb21wcmVzcyAqLwotICAgIGludCBkaXJlY3Q7ICAgICAgICAgICAgIC8qIHRydWUgaWYgbGFzdCByZWFkIGRpcmVjdCwgZmFsc2UgaWYgZ3ppcCAqLworICAgIHpfb2ZmNjRfdCBzdGFydDsgICAgICAgIC8qIHdoZXJlIHRoZSBnemlwIGRhdGEgc3RhcnRlZCwgZm9yIHJld2luZGluZyAqLworICAgIGludCBlb2Y7ICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgZW5kIG9mIGlucHV0IGZpbGUgcmVhY2hlZCAqLworICAgIGludCBwYXN0OyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgcmVhZCByZXF1ZXN0ZWQgcGFzdCBlbmQgKi8KICAgICAgICAgLyoganVzdCBmb3Igd3JpdGluZyAqLwogICAgIGludCBsZXZlbDsgICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICovCiAgICAgaW50IHN0cmF0ZWd5OyAgICAgICAgICAgLyogY29tcHJlc3Npb24gc3RyYXRlZ3kgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemlvLmMgYi9Nb2R1bGVzL3psaWIvZ3ppby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTkwZjQ5Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvemxpYi9nemlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDI2ICswLDAgQEAKLS8qIGd6aW8uYyAtLSBJTyBvbiAuZ3ogZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKgotICogQ29tcGlsZSB0aGlzIGZpbGUgd2l0aCAtRE5PX0daQ09NUFJFU1MgdG8gYXZvaWQgdGhlIGNvbXByZXNzaW9uIGNvZGUuCi0gKi8KLQotLyogQCgjKSAkSWQkICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAienV0aWwuaCIKLQotI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwotIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKLSNlbmRpZgotCi0jaWZuZGVmIE5PX0RVTU1ZX0RFQ0wKLXN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRpZgotCi0jaWZuZGVmIFpfQlVGU0laRQotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZpbmUgWl9CVUZTSVpFIDQwOTYgLyogbWluaW1pemUgbWVtb3J5IHVzYWdlIGZvciAxNi1iaXQgRE9TICovCi0jICBlbHNlCi0jICAgIGRlZmluZSBaX0JVRlNJWkUgMTYzODQKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgWl9QUklOVEZfQlVGU0laRQotIyAgZGVmaW5lIFpfUFJJTlRGX0JVRlNJWkUgNDA5NgotI2VuZGlmCi0KLSNpZmRlZiBfX01WU19fCi0jICBwcmFnbWEgbWFwIChmZG9wZW4gLCAiXDE3NFwxNzRGRE9QRU4iKQotICAgRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKLSNlbmRpZgotCi0jaWZuZGVmIFNUREMKLWV4dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1SW50IHNpemUpKTsKLWV4dGVybiB2b2lkICAgZnJlZSAgIE9GKCh2b2lkcGYgcHRyKSk7Ci0jZW5kaWYKLQotI2RlZmluZSBBTExPQyhzaXplKSBtYWxsb2Moc2l6ZSkKLSNkZWZpbmUgVFJZRlJFRShwKSB7aWYgKHApIGZyZWUocCk7fQotCi1zdGF0aWMgaW50IGNvbnN0IGd6X21hZ2ljWzJdID0gezB4MWYsIDB4OGJ9OyAvKiBnemlwIG1hZ2ljIGhlYWRlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAqLwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgYXNjaWkgdGV4dCAqLwotI2RlZmluZSBIRUFEX0NSQyAgICAgMHgwMiAvKiBiaXQgMSBzZXQ6IGhlYWRlciBDUkMgcHJlc2VudCAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5lIFJFU0VSVkVEICAgICAweEUwIC8qIGJpdHMgNS4uNzogcmVzZXJ2ZWQgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgZ3pfc3RyZWFtIHsKLSAgICB6X3N0cmVhbSBzdHJlYW07Ci0gICAgaW50ICAgICAgel9lcnI7ICAgLyogZXJyb3IgY29kZSBmb3IgbGFzdCBzdHJlYW0gb3BlcmF0aW9uICovCi0gICAgaW50ICAgICAgel9lb2Y7ICAgLyogc2V0IGlmIGVuZCBvZiBpbnB1dCBmaWxlICovCi0gICAgRklMRSAgICAgKmZpbGU7ICAgLyogLmd6IGZpbGUgKi8KLSAgICBCeXRlICAgICAqaW5idWY7ICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBCeXRlICAgICAqb3V0YnVmOyAvKiBvdXRwdXQgYnVmZmVyICovCi0gICAgdUxvbmcgICAgY3JjOyAgICAgLyogY3JjMzIgb2YgdW5jb21wcmVzc2VkIGRhdGEgKi8KLSAgICBjaGFyICAgICAqbXNnOyAgICAvKiBlcnJvciBtZXNzYWdlICovCi0gICAgY2hhciAgICAgKnBhdGg7ICAgLyogcGF0aCBuYW1lIGZvciBkZWJ1Z2dpbmcgb25seSAqLwotICAgIGludCAgICAgIHRyYW5zcGFyZW50OyAvKiAxIGlmIGlucHV0IGZpbGUgaXMgbm90IGEgLmd6IGZpbGUgKi8KLSAgICBjaGFyICAgICBtb2RlOyAgICAvKiAndycgb3IgJ3InICovCi0gICAgel9vZmZfdCAgc3RhcnQ7ICAgLyogc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhIGluIGZpbGUgKGhlYWRlciBza2lwcGVkKSAqLwotICAgIHpfb2ZmX3QgIGluOyAgICAgIC8qIGJ5dGVzIGludG8gZGVmbGF0ZSBvciBpbmZsYXRlICovCi0gICAgel9vZmZfdCAgb3V0OyAgICAgLyogYnl0ZXMgb3V0IG9mIGRlZmxhdGUgb3IgaW5mbGF0ZSAqLwotICAgIGludCAgICAgIGJhY2s7ICAgIC8qIG9uZSBjaGFyYWN0ZXIgcHVzaC1iYWNrICovCi0gICAgaW50ICAgICAgbGFzdDsgICAgLyogdHJ1ZSBpZiBwdXNoLWJhY2sgaXMgbGFzdCBjaGFyYWN0ZXIgKi8KLX0gZ3pfc3RyZWFtOwotCi0KLWxvY2FsIGd6RmlsZSBnel9vcGVuICAgICAgT0YoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCAgZmQpKTsKLWxvY2FsIGludCBkb19mbHVzaCAgICAgICAgT0YoKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpKTsKLWxvY2FsIGludCAgICBnZXRfYnl0ZSAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgdm9pZCAgIGNoZWNrX2hlYWRlciBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCBpbnQgICAgZGVzdHJveSAgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIHZvaWQgICBwdXRMb25nICAgICAgT0YoKEZJTEUgKmZpbGUsIHVMb25nIHgpKTsKLWxvY2FsIHVMb25nICBnZXRMb25nICAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gVGhlIG1vZGUgcGFyYW1ldGVyCi0gICBpcyBhcyBpbiBmb3BlbiAoInJiIiBvciAid2IiKS4gVGhlIGZpbGUgaXMgZ2l2ZW4gZWl0aGVyIGJ5IGZpbGUgZGVzY3JpcHRvcgotICAgb3IgcGF0aCBuYW1lIChpZiBmZCA9PSAtMSkuCi0gICAgIGd6X29wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQgb3IgaWYgdGhlcmUgd2FzCi0gICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGU7IGVycm5vCi0gICBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNhc2VzIChpZiBlcnJubyBpcyB6ZXJvLCB0aGUKLSAgIHpsaWIgZXJyb3IgaXMgWl9NRU1fRVJST1IpLgotKi8KLWxvY2FsIGd6RmlsZSBnel9vcGVuIChwYXRoLCBtb2RlLCBmZCkKLSAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci0gICAgaW50ICBmZDsKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsgLyogY29tcHJlc3Npb24gbGV2ZWwgKi8KLSAgICBpbnQgc3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7IC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5ICovCi0gICAgY2hhciAqcCA9IChjaGFyKiltb2RlOwotICAgIGd6X3N0cmVhbSAqczsKLSAgICBjaGFyIGZtb2RlWzgwXTsgLyogY29weSBvZiBtb2RlLCB3aXRob3V0IHRoZSBjb21wcmVzc2lvbiBsZXZlbCAqLwotICAgIGNoYXIgKm0gPSBmbW9kZTsKLQotICAgIGlmICghcGF0aCB8fCAhbW9kZSkgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMgPSAoZ3pfc3RyZWFtICopQUxMT0Moc2l6ZW9mKGd6X3N0cmVhbSkpOwotICAgIGlmICghcykgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMtPnN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIHMtPnN0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBzLT5zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWYgPSBaX05VTEw7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmID0gWl9OVUxMOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IHMtPnN0cmVhbS5hdmFpbF9vdXQgPSAwOwotICAgIHMtPmZpbGUgPSBOVUxMOwotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+aW4gPSAwOwotICAgIHMtPm91dCA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICBzLT5tc2cgPSBOVUxMOwotICAgIHMtPnRyYW5zcGFyZW50ID0gMDsKLQotICAgIHMtPnBhdGggPSAoY2hhciopQUxMT0Moc3RybGVuKHBhdGgpKzEpOwotICAgIGlmIChzLT5wYXRoID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgIH0KLSAgICBzdHJjcHkocy0+cGF0aCwgcGF0aCk7IC8qIGRvIHRoaXMgZWFybHkgZm9yIGRlYnVnZ2luZyAqLwotCi0gICAgcy0+bW9kZSA9ICdcMCc7Ci0gICAgZG8gewotICAgICAgICBpZiAoKnAgPT0gJ3InKSBzLT5tb2RlID0gJ3InOwotICAgICAgICBpZiAoKnAgPT0gJ3cnIHx8ICpwID09ICdhJykgcy0+bW9kZSA9ICd3JzsKLSAgICAgICAgaWYgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpIHsKLSAgICAgICAgICAgIGxldmVsID0gKnAgLSAnMCc7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2YnKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdoJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9IVUZGTUFOX09OTFk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1InKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX1JMRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICptKysgPSAqcDsgLyogY29weSB0aGUgbW9kZSAqLwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKnArKyAmJiBtICE9IGZtb2RlICsgc2l6ZW9mKGZtb2RlKSk7Ci0gICAgaWYgKHMtPm1vZGUgPT0gJ1wwJykgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgIGVyciA9IGRlZmxhdGVJbml0MigmKHMtPnN0cmVhbSksIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9ERUZMQVRFRCwgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgc3RyYXRlZ3kpOwotICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gc3VwcHJlc3MgemxpYiBoZWFkZXIgKi8KLQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSNlbmRpZgotICAgICAgICBpZiAoZXJyICE9IFpfT0sgfHwgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gID0gcy0+aW5idWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLQotICAgICAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJihzLT5zdHJlYW0pLCAtTUFYX1dCSVRTKTsKLSAgICAgICAgLyogd2luZG93Qml0cyBpcyBwYXNzZWQgPCAwIHRvIHRlbGwgdGhhdCB0aGVyZSBpcyBubyB6bGliIGhlYWRlci4KLSAgICAgICAgICogTm90ZSB0aGF0IGluIHRoaXMgY2FzZSBpbmZsYXRlICpyZXF1aXJlcyogYW4gZXh0cmEgImR1bW15IiBieXRlCi0gICAgICAgICAqIGFmdGVyIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBpbiBvcmRlciB0byBjb21wbGV0ZSBkZWNvbXByZXNzaW9uIGFuZAotICAgICAgICAgKiByZXR1cm4gWl9TVFJFQU1fRU5ELiBIZXJlIHRoZSBnemlwIENSQzMyIGVuc3VyZXMgdGhhdCA0IGJ5dGVzIGFyZQotICAgICAgICAgKiBwcmVzZW50IGFmdGVyIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChlcnIgIT0gWl9PSyB8fCBzLT5pbmJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotCi0gICAgZXJybm8gPSAwOwotICAgIHMtPmZpbGUgPSBmZCA8IDAgPyBGX09QRU4ocGF0aCwgZm1vZGUpIDogKEZJTEUqKWZkb3BlbihmZCwgZm1vZGUpOwotCi0gICAgaWYgKHMtPmZpbGUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgfQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotICAgICAgICAvKiBXcml0ZSBhIHZlcnkgc2ltcGxlIC5neiBoZWFkZXI6Ci0gICAgICAgICAqLwotICAgICAgICBmcHJpbnRmKHMtPmZpbGUsICIlYyVjJWMlYyVjJWMlYyVjJWMlYyIsIGd6X21hZ2ljWzBdLCBnel9tYWdpY1sxXSwKLSAgICAgICAgICAgICBaX0RFRkxBVEVELCAwIC8qZmxhZ3MqLywgMCwwLDAsMCAvKnRpbWUqLywgMCAvKnhmbGFncyovLCBPU19DT0RFKTsKLSAgICAgICAgcy0+c3RhcnQgPSAxMEw7Ci0gICAgICAgIC8qIFdlIHVzZSAxMEwgaW5zdGVhZCBvZiBmdGVsbChzLT5maWxlKSB0byBiZWNhdXNlIGZ0ZWxsIGNhdXNlcyBhbgotICAgICAgICAgKiBmZmx1c2ggb24gc29tZSBzeXN0ZW1zLiBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lc24ndCB1c2UKLSAgICAgICAgICogc3RhcnQgYW55d2F5IGluIHdyaXRlIG1vZGUsIHNvIHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgbm90Ci0gICAgICAgICAqIG5lY2Vzc2FyeS4KLSAgICAgICAgICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hlY2tfaGVhZGVyKHMpOyAvKiBza2lwIHRoZSAuZ3ogaGVhZGVyICovCi0gICAgICAgIHMtPnN0YXJ0ID0gZnRlbGwocy0+ZmlsZSkgLSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgfQotCi0gICAgcmV0dXJuIChnekZpbGUpczsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCi0qLwotZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIChwYXRoLCBtb2RlKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLXsKLSAgICByZXR1cm4gZ3pfb3BlbiAocGF0aCwgbW9kZSwgLTEpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQXNzb2NpYXRlIGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gZmQgaXMgbm90IGR1cCdlZCBoZXJlCi0gICB0byBtaW1pYyB0aGUgYmVoYXZpbyh1KXIgb2YgZmRvcGVuLgotKi8KLWd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gKGZkLCBtb2RlKQotICAgIGludCBmZDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotewotICAgIGNoYXIgbmFtZVs0Nl07ICAgICAgLyogYWxsb3cgZm9yIHVwIHRvIDEyOC1iaXQgaW50ZWdlcnMgKi8KLQotICAgIGlmIChmZCA8IDApIHJldHVybiAoZ3pGaWxlKVpfTlVMTDsKLSAgICBzcHJpbnRmKG5hbWUsICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCi0KLSAgICByZXR1cm4gZ3pfb3BlbiAobmFtZSwgbW9kZSwgZmQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIHN0cmF0ZWd5Ci0gKi8KLWludCBaRVhQT1JUIGd6c2V0cGFyYW1zIChmaWxlLCBsZXZlbCwgc3RyYXRlZ3kpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGxldmVsOwotICAgIGludCBzdHJhdGVneTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgLyogTWFrZSByb29tIHRvIGFsbG93IGZsdXNoaW5nICovCi0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRidWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmbGF0ZVBhcmFtcyAoJihzLT5zdHJlYW0pLCBsZXZlbCwgc3RyYXRlZ3kpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZCBhIGJ5dGUgZnJvbSBhIGd6X3N0cmVhbTsgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luLiBSZXR1cm4gRU9GCi0gICBmb3IgZW5kIG9mIGZpbGUuCi0gICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBoYXMgYmVlbiBzdWNlc3NmdWxseSBvcGVuZWQgZm9yIHJlYWRpbmcuCi0qLwotbG9jYWwgaW50IGdldF9ieXRlKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGlmIChzLT56X2VvZikgcmV0dXJuIEVPRjsKLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClmcmVhZChzLT5pbmJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICBpZiAoZmVycm9yKHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICByZXR1cm4gRU9GOwotICAgICAgICB9Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbi0tOwotICAgIHJldHVybiAqKHMtPnN0cmVhbS5uZXh0X2luKSsrOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIENoZWNrIHRoZSBnemlwIGhlYWRlciBvZiBhIGd6X3N0cmVhbSBvcGVuZWQgZm9yIHJlYWRpbmcuIFNldCB0aGUgc3RyZWFtCi0gICAgbW9kZSB0byB0cmFuc3BhcmVudCBpZiB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgaXMgbm90IHByZXNlbnQ7IHNldCBzLT5lcnIKLSAgICB0byBaX0RBVEFfRVJST1IgaWYgdGhlIG1hZ2ljIGhlYWRlciBpcyBwcmVzZW50IGJ1dCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyCi0gICAgaXMgaW5jb3JyZWN0LgotICAgIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBzdWNlc3NmdWxseTsKLSAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gaXMgemVybyBmb3IgdGhlIGZpcnN0IHRpbWUsIGJ1dCBtYXkgYmUgbm9uLXplcm8KLSAgICAgICBmb3IgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSovCi1sb2NhbCB2b2lkIGNoZWNrX2hlYWRlcihzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpbnQgbWV0aG9kOyAvKiBtZXRob2QgYnl0ZSAqLwotICAgIGludCBmbGFnczsgIC8qIGZsYWdzIGJ5dGUgKi8KLSAgICB1SW50IGxlbjsKLSAgICBpbnQgYzsKLQotICAgIC8qIEFzc3VyZSB0d28gYnl0ZXMgaW4gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gcGVlayBhaGVhZCAtLSBoYW5kbGUgY2FzZQotICAgICAgIHdoZXJlIGZpcnN0IGJ5dGUgb2YgaGVhZGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGUgbGFzdAotICAgICAgIGd6aXAgc2VnbWVudCAqLwotICAgIGxlbiA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICBpZiAobGVuIDwgMikgewotICAgICAgICBpZiAobGVuKSBzLT5pbmJ1ZlswXSA9IHMtPnN0cmVhbS5uZXh0X2luWzBdOwotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGxlbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmICsgbGVuLCAxLCBaX0JVRlNJWkUgPj4gbGVuLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwICYmIGZlcnJvcihzLT5maWxlKSkgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gKz0gbGVuOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luIDwgMikgewotICAgICAgICAgICAgcy0+dHJhbnNwYXJlbnQgPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBQZWVrIGFoZWFkIHRvIGNoZWNrIHRoZSBnemlwIG1hZ2ljIGhlYWRlciAqLwotICAgIGlmIChzLT5zdHJlYW0ubmV4dF9pblswXSAhPSBnel9tYWdpY1swXSB8fAotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pblsxXSAhPSBnel9tYWdpY1sxXSkgewotICAgICAgICBzLT50cmFuc3BhcmVudCA9IDE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luIC09IDI7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gKz0gMjsKLQotICAgIC8qIENoZWNrIHRoZSByZXN0IG9mIHRoZSBnemlwIGhlYWRlciAqLwotICAgIG1ldGhvZCA9IGdldF9ieXRlKHMpOwotICAgIGZsYWdzID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKG1ldGhvZCAhPSBaX0RFRkxBVEVEIHx8IChmbGFncyAmIFJFU0VSVkVEKSAhPSAwKSB7Ci0gICAgICAgIHMtPnpfZXJyID0gWl9EQVRBX0VSUk9SOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyogRGlzY2FyZCB0aW1lLCB4ZmxhZ3MgYW5kIE9TIGNvZGU6ICovCi0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCA2OyBsZW4rKykgKHZvaWQpZ2V0X2J5dGUocyk7Ci0KLSAgICBpZiAoKGZsYWdzICYgRVhUUkFfRklFTEQpICE9IDApIHsgLyogc2tpcCB0aGUgZXh0cmEgZmllbGQgKi8KLSAgICAgICAgbGVuICA9ICAodUludClnZXRfYnl0ZShzKTsKLSAgICAgICAgbGVuICs9ICgodUludClnZXRfYnl0ZShzKSk8PDg7Ci0gICAgICAgIC8qIGxlbiBpcyBnYXJiYWdlIGlmIEVPRiBidXQgdGhlIGxvb3AgYmVsb3cgd2lsbCBxdWl0IGFueXdheSAqLwotICAgICAgICB3aGlsZSAobGVuLS0gIT0gMCAmJiBnZXRfYnl0ZShzKSAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIE9SSUdfTkFNRSkgIT0gMCkgeyAvKiBza2lwIHRoZSBvcmlnaW5hbCBmaWxlIG5hbWUgKi8KLSAgICAgICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykpICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIENPTU1FTlQpICE9IDApIHsgICAvKiBza2lwIHRoZSAuZ3ogZmlsZSBjb21tZW50ICovCi0gICAgICAgIHdoaWxlICgoYyA9IGdldF9ieXRlKHMpKSAhPSAwICYmIGMgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MgJiBIRUFEX0NSQykgIT0gMCkgeyAgLyogc2tpcCB0aGUgaGVhZGVyIGNyYyAqLwotICAgICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IDI7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLSAgICB9Ci0gICAgcy0+el9lcnIgPSBzLT56X2VvZiA/IFpfREFUQV9FUlJPUiA6IFpfT0s7Ci19Ci0KLSAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENsZWFudXAgdGhlbiBmcmVlIHRoZSBnaXZlbiBnel9zdHJlYW0uIFJldHVybiBhIHpsaWIgZXJyb3IgY29kZS4KLSAgIFRyeSBmcmVlaW5nIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIGFsbG9jYXRpb25zLgotICovCi1sb2NhbCBpbnQgZGVzdHJveSAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaW50IGVyciA9IFpfT0s7Ci0KLSAgICBpZiAoIXMpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLQotICAgIGlmIChzLT5zdHJlYW0uc3RhdGUgIT0gTlVMTCkgewotICAgICAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgICAgICBlcnIgPSBkZWZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmIChzLT5tb2RlID09ICdyJykgewotICAgICAgICAgICAgZXJyID0gaW5mbGF0ZUVuZCgmKHMtPnN0cmVhbSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzLT5maWxlICE9IE5VTEwgJiYgZmNsb3NlKHMtPmZpbGUpKSB7Ci0jaWZkZWYgRVNQSVBFCi0gICAgICAgIGlmIChlcnJubyAhPSBFU1BJUEUpIC8qIGZjbG9zZSBpcyBicm9rZW4gZm9yIHBpcGVzIGluIEhQL1VYICovCi0jZW5kaWYKLSAgICAgICAgICAgIGVyciA9IFpfRVJSTk87Ci0gICAgfQotICAgIGlmIChzLT56X2VyciA8IDApIGVyciA9IHMtPnpfZXJyOwotCi0gICAgVFJZRlJFRShzLT5pbmJ1Zik7Ci0gICAgVFJZRlJFRShzLT5vdXRidWYpOwotICAgIFRSWUZSRUUocy0+cGF0aCk7Ci0gICAgVFJZRlJFRShzKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkICgwIGZvciBlbmQgb2YgZmlsZSkuCi0qLwotaW50IFpFWFBPUlQgZ3pyZWFkIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcCBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0gICAgQnl0ZWYgKnN0YXJ0ID0gKEJ5dGVmKilidWY7IC8qIHN0YXJ0aW5nIHBvaW50IGZvciBjcmMgY29tcHV0YXRpb24gKi8KLSAgICBCeXRlICAqbmV4dF9vdXQ7IC8qID09IHN0cmVhbS5uZXh0X291dCBidXQgbm90IGZvcmNlZCBmYXIgKGZvciBNU0RPUykgKi8KLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIGlmIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykgcmV0dXJuIC0xOwotICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpIHJldHVybiAwOyAgLyogRU9GICovCi0KLSAgICBuZXh0X291dCA9IChCeXRlKilidWY7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IGxlbjsKLQotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ICYmIHMtPmJhY2sgIT0gRU9GKSB7Ci0gICAgICAgICpuZXh0X291dCsrID0gcy0+YmFjazsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0Kys7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQtLTsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIGlmIChzLT5sYXN0KSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpfU1RSRUFNX0VORDsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCkgewotCi0gICAgICAgIGlmIChzLT50cmFuc3BhcmVudCkgewotICAgICAgICAgICAgLyogQ29weSBmaXJzdCB0aGUgbG9va2FoZWFkIGJ5dGVzOiAqLwotICAgICAgICAgICAgdUludCBuID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBzLT5zdHJlYW0uYXZhaWxfb3V0KSBuID0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgICAgIHptZW1jcHkocy0+c3RyZWFtLm5leHRfb3V0LCBzLT5zdHJlYW0ubmV4dF9pbiwgbik7Ci0gICAgICAgICAgICAgICAgbmV4dF9vdXQgKz0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBuZXh0X291dDsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiAgICs9IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCAtPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiAgLT0gbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID4gMCkgewotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgLT0KLSAgICAgICAgICAgICAgICAgICAgKHVJbnQpZnJlYWQobmV4dF9vdXQsIDEsIHMtPnN0cmVhbS5hdmFpbF9vdXQsIHMtPmZpbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuIC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgICAgICBzLT5pbiAgKz0gbGVuOwotICAgICAgICAgICAgcy0+b3V0ICs9IGxlbjsKLSAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgcmV0dXJuIChpbnQpbGVuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCAmJiAhcy0+el9lb2YpIHsKLQotICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luID0gKHVJbnQpZnJlYWQocy0+aW5idWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSk7Ci0gICAgICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZlcnJvcihzLT5maWxlKSkgewotICAgICAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+aW4gKz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBpbmZsYXRlKCYocy0+c3RyZWFtKSwgWl9OT19GTFVTSCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCkgewotICAgICAgICAgICAgLyogQ2hlY2sgQ1JDIGFuZCBvcmlnaW5hbCBzaXplICovCi0gICAgICAgICAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUludCkocy0+c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gcy0+c3RyZWFtLm5leHRfb3V0OwotCi0gICAgICAgICAgICBpZiAoZ2V0TG9uZyhzKSAhPSBzLT5jcmMpIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpZ2V0TG9uZyhzKTsKLSAgICAgICAgICAgICAgICAvKiBUaGUgdW5jb21wcmVzc2VkIGxlbmd0aCByZXR1cm5lZCBieSBhYm92ZSBnZXRsb25nKCkgbWF5IGJlCi0gICAgICAgICAgICAgICAgICogZGlmZmVyZW50IGZyb20gcy0+b3V0IGluIGNhc2Ugb2YgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSAgICAgICAgICAgICAgICAgKiBDaGVjayBmb3Igc3VjaCBmaWxlczoKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjaGVja19oZWFkZXIocyk7Ci0gICAgICAgICAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfT0spIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KCYocy0+c3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAgICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSyB8fCBzLT56X2VvZikgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgc3RhcnQsICh1SW50KShzLT5zdHJlYW0ubmV4dF9vdXQgLSBzdGFydCkpOwotCi0gICAgaWYgKGxlbiA9PSBzLT5zdHJlYW0uYXZhaWxfb3V0ICYmCi0gICAgICAgIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gKGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX291dCk7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuIGd6Z2V0YyByZXR1cm5zIHRoaXMgYnl0ZQotICAgb3IgLTEgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGM7Ci0KLSAgICByZXR1cm4gZ3pyZWFkKGZpbGUsICZjLCAxKSA9PSAxID8gYyA6IC0xOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUHVzaCBvbmUgYnl0ZSBiYWNrIG9udG8gdGhlIHN0cmVhbS4KLSovCi1pbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQotICAgIGludCBjOwotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InIHx8IGMgPT0gRU9GIHx8IHMtPmJhY2sgIT0gRU9GKSByZXR1cm4gRU9GOwotICAgIHMtPmJhY2sgPSBjOwotICAgIHMtPm91dC0tOwotICAgIHMtPmxhc3QgPSAocy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKTsKLSAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICByZXR1cm4gYzsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFJlYWRzIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSB1bnRpbCBsZW4tMSBjaGFyYWN0ZXJzIGFyZQotICAgcmVhZCwgb3IgYSBuZXdsaW5lIGNoYXJhY3RlciBpcyByZWFkIGFuZCB0cmFuc2ZlcnJlZCB0byBidWYsIG9yIGFuCi0gICBlbmQtb2YtZmlsZSBjb25kaXRpb24gaXMgZW5jb3VudGVyZWQuICBUaGUgc3RyaW5nIGlzIHRoZW4gdGVybWluYXRlZAotICAgd2l0aCBhIG51bGwgY2hhcmFjdGVyLgotICAgICAgZ3pnZXRzIHJldHVybnMgYnVmLCBvciBaX05VTEwgaW4gY2FzZSBvZiBlcnJvci4KLQotICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbm90IG9wdGltaXplZCBhdCBhbGwuCi0qLwotY2hhciAqIFpFWFBPUlQgZ3pnZXRzKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgbGVuOwotewotICAgIGNoYXIgKmIgPSBidWY7Ci0gICAgaWYgKGJ1ZiA9PSBaX05VTEwgfHwgbGVuIDw9IDApIHJldHVybiBaX05VTEw7Ci0KLSAgICB3aGlsZSAoLS1sZW4gPiAwICYmIGd6cmVhZChmaWxlLCBidWYsIDEpID09IDEgJiYgKmJ1ZisrICE9ICdcbicpIDsKLSAgICAqYnVmID0gJ1wwJzsKLSAgICByZXR1cm4gYiA9PSBidWYgJiYgbGVuID4gMCA/IFpfTlVMTCA6IGI7Ci19Ci0KLQotI2lmbmRlZiBOT19HWkNPTVBSRVNTCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6d3JpdGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotaW50IFpFWFBPUlQgZ3p3cml0ZSAoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgdm9pZHBjIGJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gbGVuOwotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9pbiAhPSAwKSB7Ci0KLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgICAgICBpZiAoZndyaXRlKHMtPm91dGJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKSAhPSBaX0JVRlNJWkUpIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgICAgICB9Ci0gICAgICAgIHMtPmluICs9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gZGVmbGF0ZSgmKHMtPnN0cmVhbSksIFpfTk9fRkxVU0gpOwotICAgICAgICBzLT5pbiAtPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSykgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgKGNvbnN0IEJ5dGVmICopYnVmLCBsZW4pOwotCi0gICAgcmV0dXJuIChpbnQpKGxlbiAtIHMtPnN0cmVhbS5hdmFpbF9pbik7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKLSAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgotICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotI2lmZGVmIFNUREMKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLyogYXJncyAqLyAuLi4pCi17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVGU0laRV07Ci0gICAgdmFfbGlzdCB2YTsKLSAgICBpbnQgbGVuOwotCi0gICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotI2lmZGVmIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSB2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0jICBlbmRpZgotI2Vsc2UKLSMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICh2b2lkKXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotIyAgZW5kaWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gKGludClzaXplb2YoYnVmKSB8fCBidWZbc2l6ZW9mKGJ1ZikgLSAxXSAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCBidWYsICh1bnNpZ25lZClsZW4pOwotfQotI2Vsc2UgLyogbm90IEFOU0kgQyAqLwotCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKLSAgICAgICAgICAgICAgICAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKLSAgICBpbnQgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAotICAgICAgICBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjA7Ci17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVGU0laRV07Ci0gICAgaW50IGxlbjsKLQotICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKLSNpZmRlZiBOT19zbnByaW50ZgotIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoYnVmLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSMgIGVuZGlmCi0jZWxzZQotIyAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotIyAgZW5kaWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gc2l6ZW9mKGJ1ZikgfHwgYnVmW3NpemVvZihidWYpIC0gMV0gIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgYnVmLCBsZW4pOwotfQotI2VuZGlmCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgV3JpdGVzIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBjaGFyLCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenB1dGMgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnenB1dGMoZmlsZSwgYykKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgYzsKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGNjID0gKHVuc2lnbmVkIGNoYXIpIGM7IC8qIHJlcXVpcmVkIGZvciBiaWcgZW5kaWFuIHN5c3RlbXMgKi8KLQotICAgIHJldHVybiBnendyaXRlKGZpbGUsICZjYywgMSkgPT0gMSA/IChpbnQpY2MgOiAtMTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRpbmcKLSAgIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICAgIGd6cHV0cyByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6cHV0cyhmaWxlLCBzKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKnM7Ci17Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgKGNoYXIqKXMsICh1bnNpZ25lZClzdHJsZW4ocykpOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuIFRoZSBwYXJhbWV0ZXIKLSAgIGZsdXNoIGlzIGFzIGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uCi0qLwotbG9jYWwgaW50IGRvX2ZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgZmx1c2g7Ci17Ci0gICAgdUludCBsZW47Ci0gICAgaW50IGRvbmUgPSAwOwotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOyAvKiBzaG91bGQgYmUgemVybyBhbHJlYWR5IGFueXdheSAqLwotCi0gICAgZm9yICg7OykgewotICAgICAgICBsZW4gPSBaX0JVRlNJWkUgLSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIGlmIChsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKCh1SW50KWZ3cml0ZShzLT5vdXRidWYsIDEsIGxlbiwgcy0+ZmlsZSkgIT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgIHJldHVybiBaX0VSUk5POwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZG9uZSkgYnJlYWs7Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGRlZmxhdGUoJihzLT5zdHJlYW0pLCBmbHVzaCk7Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIC8qIElnbm9yZSB0aGUgc2Vjb25kIG9mIHR3byBjb25zZWN1dGl2ZSBmbHVzaGVzOiAqLwotICAgICAgICBpZiAobGVuID09IDAgJiYgcy0+el9lcnIgPT0gWl9CVUZfRVJST1IpIHMtPnpfZXJyID0gWl9PSzsKLQotICAgICAgICAvKiBkZWZsYXRlIGhhcyBmaW5pc2hlZCBmbHVzaGluZyBvbmx5IHdoZW4gaXQgaGFzbid0IHVzZWQgdXAKLSAgICAgICAgICogYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXI6Ci0gICAgICAgICAqLwotICAgICAgICBkb25lID0gKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCB8fCBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpOwotCi0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LICYmIHMtPnpfZXJyICE9IFpfU1RSRUFNX0VORCkgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiAgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EID8gWl9PSyA6IHMtPnpfZXJyOwotfQotCi1pbnQgWkVYUE9SVCBnemZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICAgZ3pGaWxlIGZpbGU7Ci0gICAgIGludCBmbHVzaDsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotICAgIGludCBlcnIgPSBkb19mbHVzaCAoZmlsZSwgZmx1c2gpOwotCi0gICAgaWYgKGVycikgcmV0dXJuIGVycjsKLSAgICBmZmx1c2gocy0+ZmlsZSk7Ci0gICAgcmV0dXJuICBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogcy0+el9lcnI7Ci19Ci0jZW5kaWYgLyogTk9fR1pDT01QUkVTUyAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4KLSAgIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQotICAgICAgZ3pzZWVrIHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJvbQotICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSAgICAgIFNFRUtfRU5EIGlzIG5vdCBpbXBsZW1lbnRlZCwgcmV0dXJucyBlcnJvci4KLSAgICAgIEluIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgZ3pzZWVrIGNhbiBiZSBleHRyZW1lbHkgc2xvdy4KLSovCi16X29mZl90IFpFWFBPUlQgZ3pzZWVrIChmaWxlLCBvZmZzZXQsIHdoZW5jZSkKLSAgICBnekZpbGUgZmlsZTsKLSAgICB6X29mZl90IG9mZnNldDsKLSAgICBpbnQgd2hlbmNlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHdoZW5jZSA9PSBTRUVLX0VORCB8fAotICAgICAgICBzLT56X2VyciA9PSBaX0VSUk5PIHx8IHMtPnpfZXJyID09IFpfREFUQV9FUlJPUikgewotICAgICAgICByZXR1cm4gLTFMOwotICAgIH0KLQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgcmV0dXJuIC0xTDsKLSNlbHNlCi0gICAgICAgIGlmICh3aGVuY2UgPT0gU0VFS19TRVQpIHsKLSAgICAgICAgICAgIG9mZnNldCAtPSBzLT5pbjsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0IDwgMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiB6ZXJvIGJ5dGVzIHRvIHdyaXRlLiAqLwotICAgICAgICBpZiAocy0+aW5idWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICBzLT5pbmJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOyAvKiBmb3Igc2Vla2luZyAqLwotICAgICAgICAgICAgaWYgKHMtPmluYnVmID09IFpfTlVMTCkgcmV0dXJuIC0xTDsKLSAgICAgICAgICAgIHptZW16ZXJvKHMtPmluYnVmLCBaX0JVRlNJWkUpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICAgICAgdUludCBzaXplID0gWl9CVUZTSVpFOwotICAgICAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9ICh1SW50KW9mZnNldDsKLQotICAgICAgICAgICAgc2l6ZSA9IGd6d3JpdGUoZmlsZSwgcy0+aW5idWYsIHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHMtPmluOwotI2VuZGlmCi0gICAgfQotICAgIC8qIFJlc3Qgb2YgZnVuY3Rpb24gaXMgZm9yIHJlYWRpbmcgb25seSAqLwotCi0gICAgLyogY29tcHV0ZSBhYnNvbHV0ZSBwb3NpdGlvbiAqLwotICAgIGlmICh3aGVuY2UgPT0gU0VFS19DVVIpIHsKLSAgICAgICAgb2Zmc2V0ICs9IHMtPm91dDsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCA8IDApIHJldHVybiAtMUw7Ci0KLSAgICBpZiAocy0+dHJhbnNwYXJlbnQpIHsKLSAgICAgICAgLyogbWFwIHRvIGZzZWVrICovCi0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIGlmIChmc2VlayhzLT5maWxlLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgcy0+aW4gPSBzLT5vdXQgPSBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgfQotCi0gICAgLyogRm9yIGEgbmVnYXRpdmUgc2VlaywgcmV3aW5kIGFuZCB1c2UgcG9zaXRpdmUgc2VlayAqLwotICAgIGlmIChvZmZzZXQgPj0gcy0+b3V0KSB7Ci0gICAgICAgIG9mZnNldCAtPSBzLT5vdXQ7Ci0gICAgfSBlbHNlIGlmIChnenJld2luZChmaWxlKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xTDsKLSAgICB9Ci0gICAgLyogb2Zmc2V0IGlzIG5vdyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAuICovCi0KLSAgICBpZiAob2Zmc2V0ICE9IDAgJiYgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICBzLT5vdXRidWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSAgICAgICAgaWYgKHMtPm91dGJ1ZiA9PSBaX05VTEwpIHJldHVybiAtMUw7Ci0gICAgfQotICAgIGlmIChvZmZzZXQgJiYgcy0+YmFjayAhPSBFT0YpIHsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIG9mZnNldC0tOwotICAgICAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX1NUUkVBTV9FTkQ7Ci0gICAgfQotICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICBpbnQgc2l6ZSA9IFpfQlVGU0laRTsKLSAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9IChpbnQpb2Zmc2V0OwotCi0gICAgICAgIHNpemUgPSBnenJlYWQoZmlsZSwgcy0+b3V0YnVmLCAodUludClzaXplKTsKLSAgICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuIC0xTDsKLSAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgfQotICAgIHJldHVybiBzLT5vdXQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXdpbmRzIGlucHV0IGZpbGUuCi0qLwotaW50IFpFWFBPUlQgZ3pyZXdpbmQgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAtMTsKLQotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgaWYgKCFzLT50cmFuc3BhcmVudCkgKHZvaWQpaW5mbGF0ZVJlc2V0KCZzLT5zdHJlYW0pOwotICAgIHMtPmluID0gMDsKLSAgICBzLT5vdXQgPSAwOwotICAgIHJldHVybiBmc2VlayhzLT5maWxlLCBzLT5zdGFydCwgU0VFS19TRVQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCi0qLwotel9vZmZfdCBaRVhQT1JUIGd6dGVsbCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICByZXR1cm4gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUik7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIDEgd2hlbiBFT0YgaGFzIHByZXZpb3VzbHkgYmVlbiBkZXRlY3RlZCByZWFkaW5nIHRoZSBnaXZlbgotICAgaW5wdXQgc3RyZWFtLCBvdGhlcndpc2UgemVyby4KLSovCi1pbnQgWkVYUE9SVCBnemVvZiAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgLyogV2l0aCBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcyB0aGF0IGNhbiBoYXZlIGVtYmVkZGVkCi0gICAgICogY3JjIHRyYWlsZXJzLCB6X2VvZiBpcyBubyBsb25nZXIgdGhlIG9ubHkvYmVzdCBpbmRpY2F0b3Igb2YgRU9GCi0gICAgICogb24gYSBnel9zdHJlYW0uIEhhbmRsZSBlbmQtb2Ytc3RyZWFtIGVycm9yIGV4cGxpY2l0bHkgaGVyZS4KLSAgICAgKi8KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gMDsKLSAgICBpZiAocy0+el9lb2YpIHJldHVybiAxOwotICAgIHJldHVybiBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIDEgaWYgcmVhZGluZyBhbmQgZG9pbmcgc28gdHJhbnNwYXJlbnRseSwgb3RoZXJ3aXNlIHplcm8uCi0qLwotaW50IFpFWFBPUlQgZ3pkaXJlY3QgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAwOwotICAgIHJldHVybiBzLT50cmFuc3BhcmVudDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBPdXRwdXRzIGEgbG9uZyBpbiBMU0Igb3JkZXIgdG8gdGhlIGdpdmVuIGZpbGUKLSovCi1sb2NhbCB2b2lkIHB1dExvbmcgKGZpbGUsIHgpCi0gICAgRklMRSAqZmlsZTsKLSAgICB1TG9uZyB4OwotewotICAgIGludCBuOwotICAgIGZvciAobiA9IDA7IG4gPCA0OyBuKyspIHsKLSAgICAgICAgZnB1dGMoKGludCkoeCAmIDB4ZmYpLCBmaWxlKTsKLSAgICAgICAgeCA+Pj0gODsKLSAgICB9Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgUmVhZHMgYSBsb25nIGluIExTQiBvcmRlciBmcm9tIHRoZSBnaXZlbiBnel9zdHJlYW0uIFNldHMgel9lcnIgaW4gY2FzZQotICAgb2YgZXJyb3IuCi0qLwotbG9jYWwgdUxvbmcgZ2V0TG9uZyAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgdUxvbmcgeCA9ICh1TG9uZylnZXRfYnl0ZShzKTsKLSAgICBpbnQgYzsKLQotICAgIHggKz0gKCh1TG9uZylnZXRfYnl0ZShzKSk8PDg7Ci0gICAgeCArPSAoKHVMb25nKWdldF9ieXRlKHMpKTw8MTY7Ci0gICAgYyA9IGdldF9ieXRlKHMpOwotICAgIGlmIChjID09IEVPRikgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgeCArPSAoKHVMb25nKWMpPDwyNDsKLSAgICByZXR1cm4geDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKLSAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4KLSovCi1pbnQgWkVYUE9SVCBnemNsb3NlIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgIGlmIChkb19mbHVzaCAoZmlsZSwgWl9GSU5JU0gpICE9IFpfT0spCi0gICAgICAgICAgICByZXR1cm4gZGVzdHJveSgoZ3pfc3RyZWFtKilmaWxlKTsKLQotICAgICAgICBwdXRMb25nIChzLT5maWxlLCBzLT5jcmMpOwotICAgICAgICBwdXRMb25nIChzLT5maWxlLCAodUxvbmcpKHMtPmluICYgMHhmZmZmZmZmZikpOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBkZXN0cm95KChnel9zdHJlYW0qKWZpbGUpOwotfQotCi0jaWZkZWYgU1REQwotIyAgZGVmaW5lIHpzdHJlcnJvcihlcnJudW0pIHN0cmVycm9yKGVycm51bSkKLSNlbHNlCi0jICBkZWZpbmUgenN0cmVycm9yKGVycm51bSkgIiIKLSNlbmRpZgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuIElmIGFuCi0gICBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwKLSAgIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCi0gICB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCi0qLwotY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvciAoZmlsZSwgZXJybnVtKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCAqZXJybnVtOwotewotICAgIGNoYXIgKm07Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgKmVycm51bSA9IFpfU1RSRUFNX0VSUk9SOwotICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKUVSUl9NU0coWl9TVFJFQU1fRVJST1IpOwotICAgIH0KLSAgICAqZXJybnVtID0gcy0+el9lcnI7Ci0gICAgaWYgKCplcnJudW0gPT0gWl9PSykgcmV0dXJuIChjb25zdCBjaGFyKikiIjsKLQotICAgIG0gPSAoY2hhciopKCplcnJudW0gPT0gWl9FUlJOTyA/IHpzdHJlcnJvcihlcnJubykgOiBzLT5zdHJlYW0ubXNnKTsKLQotICAgIGlmIChtID09IE5VTEwgfHwgKm0gPT0gJ1wwJykgbSA9IChjaGFyKilFUlJfTVNHKHMtPnpfZXJyKTsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLSAgICBzLT5tc2cgPSAoY2hhciopQUxMT0Moc3RybGVuKHMtPnBhdGgpICsgc3RybGVuKG0pICsgMyk7Ci0gICAgaWYgKHMtPm1zZyA9PSBaX05VTEwpIHJldHVybiAoY29uc3QgY2hhciopRVJSX01TRyhaX01FTV9FUlJPUik7Ci0gICAgc3RyY3B5KHMtPm1zZywgcy0+cGF0aCk7Ci0gICAgc3RyY2F0KHMtPm1zZywgIjogIik7Ci0gICAgc3RyY2F0KHMtPm1zZywgbSk7Ci0gICAgcmV0dXJuIChjb25zdCBjaGFyKilzLT5tc2c7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBDbGVhciB0aGUgZXJyb3IgYW5kIGVuZC1vZi1maWxlIGZsYWdzLCBhbmQgZG8gdGhlIHNhbWUgZm9yIHRoZSByZWFsIGZpbGUuCi0qLwotdm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHJldHVybjsKLSAgICBpZiAocy0+el9lcnIgIT0gWl9TVFJFQU1fRU5EKSBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIGNsZWFyZXJyKHMtPmZpbGUpOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6bGliLmMgYi9Nb2R1bGVzL3psaWIvZ3psaWIuYwppbmRleCA2MDNlNjBlLi5mYWUyMDJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3psaWIuYworKysgYi9Nb2R1bGVzL3psaWIvZ3psaWIuYwpAQCAtMSwxOSArMSwyMyBAQAogLyogZ3psaWIuYyAtLSB6bGliIGZ1bmN0aW9ucyBjb21tb24gdG8gcmVhZGluZyBhbmQgd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCiAjaW5jbHVkZSAiZ3pndXRzLmgiCiAKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgZGVmaW5lIExTRUVLIF9sc2Vla2k2NAorI2Vsc2UKICNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAogIyAgZGVmaW5lIExTRUVLIGxzZWVrNjQKICNlbHNlCiAjICBkZWZpbmUgTFNFRUsgbHNlZWsKICNlbmRpZgorI2VuZGlmCiAKIC8qIExvY2FsIGZ1bmN0aW9ucyAqLwogbG9jYWwgdm9pZCBnel9yZXNldCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBnekZpbGUgZ3pfb3BlbiBPRigoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworbG9jYWwgZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICopKTsKIAogI2lmIGRlZmluZWQgVU5ERVJfQ0UKIApAQCAtNzEsMjggKzc1LDQwIEBACiBsb2NhbCB2b2lkIGd6X3Jlc2V0KHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKKyAgICBzdGF0ZS0+eC5oYXZlID0gMDsgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCBkYXRhIGF2YWlsYWJsZSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7ICAgLyogZm9yIHJlYWRpbmcgLi4uICovCi0gICAgICAgIHN0YXRlLT5oYXZlID0gMDsgICAgICAgICAgICAvKiBubyBvdXRwdXQgZGF0YSBhdmFpbGFibGUgKi8KICAgICAgICAgc3RhdGUtPmVvZiA9IDA7ICAgICAgICAgICAgIC8qIG5vdCBhdCBlbmQgb2YgZmlsZSAqLworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7ICAgICAgICAgICAgLyogaGF2ZSBub3QgcmVhZCBwYXN0IGVuZCB5ZXQgKi8KICAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7ICAgICAgICAgIC8qIGxvb2sgZm9yIGd6aXAgaGVhZGVyICovCi0gICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOyAgICAgICAgICAvKiBkZWZhdWx0IGZvciBlbXB0eSBmaWxlICovCiAgICAgfQogICAgIHN0YXRlLT5zZWVrID0gMDsgICAgICAgICAgICAgICAgLyogbm8gc2VlayByZXF1ZXN0IHBlbmRpbmcgKi8KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7ICAgIC8qIGNsZWFyIGVycm9yICovCi0gICAgc3RhdGUtPnBvcyA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyB1bmNvbXByZXNzZWQgZGF0YSB5ZXQgKi8KKyAgICBzdGF0ZS0+eC5wb3MgPSAwOyAgICAgICAgICAgICAgIC8qIG5vIHVuY29tcHJlc3NlZCBkYXRhIHlldCAqLwogICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsgICAgICAgLyogbm8gaW5wdXQgZGF0YSB5ZXQgKi8KIH0KIAogLyogT3BlbiBhIGd6aXAgZmlsZSBlaXRoZXIgYnkgbmFtZSBvciBmaWxlIGRlc2NyaXB0b3IuICovCiBsb2NhbCBnekZpbGUgZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSkKLSAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNvbnN0IHZvaWQgKnBhdGg7CiAgICAgaW50IGZkOwogICAgIGNvbnN0IGNoYXIgKm1vZGU7CiB7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHNpemVfdCBsZW47CisgICAgaW50IG9mbGFnOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCBjbG9leGVjID0gMDsKKyNlbmRpZgorI2lmZGVmIE9fRVhDTAorICAgIGludCBleGNsdXNpdmUgPSAwOworI2VuZGlmCisKKyAgICAvKiBjaGVjayBpbnB1dCAqLworICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogYWxsb2NhdGUgZ3pGaWxlIHN0cnVjdHVyZSB0byByZXR1cm4gKi8KLSAgICBzdGF0ZSA9IG1hbGxvYyhzaXplb2YoZ3pfc3RhdGUpKTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApbWFsbG9jKHNpemVvZihnel9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdGF0ZS0+c2l6ZSA9IDA7ICAgICAgICAgICAgLyogbm8gYnVmZmVycyBhbGxvY2F0ZWQgeWV0ICovCkBAIC0xMDMsNiArMTE5LDcgQEAKICAgICBzdGF0ZS0+bW9kZSA9IEdaX05PTkU7CiAgICAgc3RhdGUtPmxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwogICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsKKyAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKICAgICB3aGlsZSAoKm1vZGUpIHsKICAgICAgICAgaWYgKCptb2RlID49ICcwJyAmJiAqbW9kZSA8PSAnOScpCiAgICAgICAgICAgICBzdGF0ZS0+bGV2ZWwgPSAqbW9kZSAtICcwJzsKQEAgLTEyNCw2ICsxNDEsMTYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGNhc2UgJ2InOiAgICAgICAvKiBpZ25vcmUgLS0gd2lsbCByZXF1ZXN0IGJpbmFyeSBhbnl3YXkgKi8KICAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgICAgIGNsb2V4ZWMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgT19FWENMCisgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICBleGNsdXNpdmUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM1LDYgKzE2MiwxMCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSVhFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogICAgICAgIC8qIGNvdWxkIGNvbnNpZGVyIGFzIGFuIGVycm9yLCBidXQganVzdCBpZ25vcmUgKi8KICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICB9CkBAIC0xNDcsMzAgKzE3OCw3MSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICAvKiBjYW4ndCBmb3JjZSB0cmFuc3BhcmVudCByZWFkICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7ICAgICAgLyogZm9yIGVtcHR5IGZpbGUgKi8KKyAgICB9CisKICAgICAvKiBzYXZlIHRoZSBwYXRoIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCi0gICAgc3RhdGUtPnBhdGggPSBtYWxsb2Moc3RybGVuKHBhdGgpICsgMSk7CisjaWZkZWYgX1dJTjMyCisgICAgaWYgKGZkID09IC0yKSB7CisgICAgICAgIGxlbiA9IHdjc3RvbWJzKE5VTEwsIHBhdGgsIDApOworICAgICAgICBpZiAobGVuID09IChzaXplX3QpLTEpCisgICAgICAgICAgICBsZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopcGF0aCk7CisgICAgc3RhdGUtPnBhdGggPSAoY2hhciAqKW1hbGxvYyhsZW4gKyAxKTsKICAgICBpZiAoc3RhdGUtPnBhdGggPT0gTlVMTCkgewogICAgICAgICBmcmVlKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0cmNweShzdGF0ZS0+cGF0aCwgcGF0aCk7CisjaWZkZWYgX1dJTjMyCisgICAgaWYgKGZkID09IC0yKQorICAgICAgICBpZiAobGVuKQorICAgICAgICAgICAgd2NzdG9tYnMoc3RhdGUtPnBhdGgsIHBhdGgsIGxlbiArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqKHN0YXRlLT5wYXRoKSA9IDA7CisgICAgZWxzZQorI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgc25wcmludGYoc3RhdGUtPnBhdGgsIGxlbiArIDEsICIlcyIsIChjb25zdCBjaGFyICopcGF0aCk7CisjZWxzZQorICAgICAgICBzdHJjcHkoc3RhdGUtPnBhdGgsIHBhdGgpOworI2VuZGlmCiAKLSAgICAvKiBvcGVuIHRoZSBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1vZGUgKG9yIGp1c3QgdXNlIGZkKSAqLwotICAgIHN0YXRlLT5mZCA9IGZkICE9IC0xID8gZmQgOgotICAgICAgICBvcGVuKHBhdGgsCisgICAgLyogY29tcHV0ZSB0aGUgZmxhZ3MgZm9yIG9wZW4oKSAqLworICAgIG9mbGFnID0KICNpZmRlZiBPX0xBUkdFRklMRQotICAgICAgICAgICAgT19MQVJHRUZJTEUgfAorICAgICAgICBPX0xBUkdFRklMRSB8CiAjZW5kaWYKICNpZmRlZiBPX0JJTkFSWQotICAgICAgICAgICAgT19CSU5BUlkgfAorICAgICAgICBPX0JJTkFSWSB8CiAjZW5kaWYKLSAgICAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KLSAgICAgICAgICAgICAgICBPX1JET05MWSA6Ci0gICAgICAgICAgICAgICAgKE9fV1JPTkxZIHwgT19DUkVBVCB8ICgKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPT0gR1pfV1JJVEUgPwotICAgICAgICAgICAgICAgICAgICAgICAgT19UUlVOQyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBPX0FQUEVORCkpKSwKLSAgICAgICAgICAgIDA2NjYpOworI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICAoY2xvZXhlYyA/IE9fQ0xPRVhFQyA6IDApIHwKKyNlbmRpZgorICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/CisgICAgICAgICBPX1JET05MWSA6CisgICAgICAgICAoT19XUk9OTFkgfCBPX0NSRUFUIHwKKyNpZmRlZiBPX0VYQ0wKKyAgICAgICAgICAoZXhjbHVzaXZlID8gT19FWENMIDogMCkgfAorI2VuZGlmCisgICAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1dSSVRFID8KKyAgICAgICAgICAgT19UUlVOQyA6CisgICAgICAgICAgIE9fQVBQRU5EKSkpOworCisgICAgLyogb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncyAob3IganVzdCB1c2UgZmQpICovCisgICAgc3RhdGUtPmZkID0gZmQgPiAtMSA/IGZkIDogKAorI2lmZGVmIF9XSU4zMgorICAgICAgICBmZCA9PSAtMiA/IF93b3BlbihwYXRoLCBvZmxhZywgMDY2NikgOgorI2VuZGlmCisgICAgICAgIG9wZW4oKGNvbnN0IGNoYXIgKilwYXRoLCBvZmxhZywgMDY2NikpOwogICAgIGlmIChzdGF0ZS0+ZmQgPT0gLTEpIHsKICAgICAgICAgZnJlZShzdGF0ZS0+cGF0aCk7CiAgICAgICAgIGZyZWUoc3RhdGUpOwpAQCAtMjE2LDE1ICsyODgsMjkgQEAKICAgICBjaGFyICpwYXRoOyAgICAgICAgIC8qIGlkZW50aWZpZXIgZm9yIGVycm9yIG1lc3NhZ2VzICovCiAgICAgZ3pGaWxlIGd6OwogCi0gICAgaWYgKGZkID09IC0xIHx8IChwYXRoID0gbWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQorICAgIGlmIChmZCA9PSAtMSB8fCAocGF0aCA9IChjaGFyICopbWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKHBhdGgsIDcgKyAzICogc2l6ZW9mKGludCksICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCisjZWxzZQogICAgIHNwcmludGYocGF0aCwgIjxmZDolZD4iLCBmZCk7ICAgLyogZm9yIGRlYnVnZ2luZyAqLworI2VuZGlmCiAgICAgZ3ogPSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKTsKICAgICBmcmVlKHBhdGgpOwogICAgIHJldHVybiBnejsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIF9XSU4zMgorZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuX3cocGF0aCwgbW9kZSkKKyAgICBjb25zdCB3Y2hhcl90ICpwYXRoOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTIsIG1vZGUpOworfQorI2VuZGlmCisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUIGd6YnVmZmVyKGZpbGUsIHNpemUpCiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgdW5zaWduZWQgc2l6ZTsKQEAgLTI0Myw4ICszMjksOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjaGVjayBhbmQgc2V0IHJlcXVlc3RlZCBzaXplICovCi0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzaXplIDwgMikKKyAgICAgICAgc2l6ZSA9IDI7ICAgICAgICAgICAgICAgLyogbmVlZCB0d28gYnl0ZXMgdG8gY2hlY2sgbWFnaWMgaGVhZGVyICovCiAgICAgc3RhdGUtPndhbnQgPSBzaXplOwogICAgIHJldHVybiAwOwogfQpAQCAtMjYxLDcgKzM0Nyw4IEBACiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogYmFjayB1cCBhbmQgc3RhcnQgb3ZlciAqLwpAQCAtMjg5LDcgKzM3Niw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNoZWNrIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjYW4gb25seSBzZWVrIGZyb20gc3RhcnQgb3IgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiAqLwpAQCAtMjk4LDMxICszODUsMzIgQEAKIAogICAgIC8qIG5vcm1hbGl6ZSBvZmZzZXQgdG8gYSBTRUVLX0NVUiBzcGVjaWZpY2F0aW9uICovCiAgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkKLSAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT5wb3M7CisgICAgICAgIG9mZnNldCAtPSBzdGF0ZS0+eC5wb3M7CiAgICAgZWxzZSBpZiAoc3RhdGUtPnNlZWspCiAgICAgICAgIG9mZnNldCArPSBzdGF0ZS0+c2tpcDsKICAgICBzdGF0ZS0+c2VlayA9IDA7CiAKICAgICAvKiBpZiB3aXRoaW4gcmF3IGFyZWEgd2hpbGUgcmVhZGluZywganVzdCBnbyB0aGVyZSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEICYmIHN0YXRlLT5ob3cgPT0gQ09QWSAmJgotICAgICAgICBzdGF0ZS0+cG9zICsgb2Zmc2V0ID49IHN0YXRlLT5yYXcpIHsKLSAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+aGF2ZSwgU0VFS19DVVIpOworICAgICAgICAgICAgc3RhdGUtPngucG9zICsgb2Zmc2V0ID49IDApIHsKKyAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+eC5oYXZlLCBTRUVLX0NVUik7CiAgICAgICAgIGlmIChyZXQgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CiAgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gb2Zmc2V0OwotICAgICAgICByZXR1cm4gc3RhdGUtPnBvczsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHN0YXRlLT54LnBvczsKICAgICB9CiAKICAgICAvKiBjYWxjdWxhdGUgc2tpcCBhbW91bnQsIHJld2luZGluZyBpZiBuZWVkZWQgZm9yIGJhY2sgc2VlayB3aGVuIHJlYWRpbmcgKi8KICAgICBpZiAob2Zmc2V0IDwgMCkgewogICAgICAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkgICAgICAgICAvKiB3cml0aW5nIC0tIGNhbid0IGdvIGJhY2t3YXJkcyAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPnBvczsKKyAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT54LnBvczsKICAgICAgICAgaWYgKG9mZnNldCA8IDApICAgICAgICAgICAgICAgICAgICAgLyogYmVmb3JlIHN0YXJ0IG9mIGZpbGUhICovCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChnenJld2luZChmaWxlKSA9PSAtMSkgICAgICAgICAgIC8qIHJld2luZCwgdGhlbiBza2lwIHRvIG9mZnNldCAqLwpAQCAtMzMxLDExICs0MTksMTEgQEAKIAogICAgIC8qIGlmIHJlYWRpbmcsIHNraXAgd2hhdCdzIGluIG91dHB1dCBidWZmZXIgKG9uZSBsZXNzIGd6Z2V0YygpIGNoZWNrKSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7Ci0gICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPmhhdmUgPiBvZmZzZXQgPwotICAgICAgICAgICAgKHVuc2lnbmVkKW9mZnNldCA6IHN0YXRlLT5oYXZlOwotICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOwotICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlID4gb2Zmc2V0ID8KKyAgICAgICAgICAgICh1bnNpZ25lZClvZmZzZXQgOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgIG9mZnNldCAtPSBuOwogICAgIH0KIApAQCAtMzQ0LDcgKzQzMiw3IEBACiAgICAgICAgIHN0YXRlLT5zZWVrID0gMTsKICAgICAgICAgc3RhdGUtPnNraXAgPSBvZmZzZXQ7CiAgICAgfQotICAgIHJldHVybiBzdGF0ZS0+cG9zICsgb2Zmc2V0OworICAgIHJldHVybiBzdGF0ZS0+eC5wb3MgKyBvZmZzZXQ7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTM3Myw3ICs0NjEsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiByZXR1cm4gcG9zaXRpb24gKi8KLSAgICByZXR1cm4gc3RhdGUtPnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7CisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQzMyw4ICs1MjEsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8qIHJldHVybiBlbmQtb2YtZmlsZSBzdGF0ZSAqLwotICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KLSAgICAgICAgKHN0YXRlLT5lb2YgJiYgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPT0gMCAmJiBzdGF0ZS0+aGF2ZSA9PSAwKSA6IDA7CisgICAgcmV0dXJuIHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPyBzdGF0ZS0+cGFzdCA6IDA7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQ1NCw3ICs1NDEsOCBAQAogICAgIC8qIHJldHVybiBlcnJvciBpbmZvcm1hdGlvbiAqLwogICAgIGlmIChlcnJudW0gIT0gTlVMTCkKICAgICAgICAgKmVycm51bSA9IHN0YXRlLT5lcnI7Ci0gICAgcmV0dXJuIHN0YXRlLT5tc2cgPT0gTlVMTCA/ICIiIDogc3RhdGUtPm1zZzsKKyAgICByZXR1cm4gc3RhdGUtPmVyciA9PSBaX01FTV9FUlJPUiA/ICJvdXQgb2YgbWVtb3J5IiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1zZyA9PSBOVUxMID8gIiIgOiBzdGF0ZS0+bXNnKTsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDcxLDggKzU1OSwxMCBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvKiBjbGVhciBlcnJvciBhbmQgZW5kLW9mLWZpbGUgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkKKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgewogICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOworICAgIH0KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiB9CiAKQEAgLTQ5NCwyNiArNTg0LDMzIEBACiAgICAgICAgIHN0YXRlLT5tc2cgPSBOVUxMOwogICAgIH0KIAorICAgIC8qIGlmIGZhdGFsLCBzZXQgc3RhdGUtPnguaGF2ZSB0byAwIHNvIHRoYXQgdGhlIGd6Z2V0YygpIG1hY3JvIGZhaWxzICovCisgICAgaWYgKGVyciAhPSBaX09LICYmIGVyciAhPSBaX0JVRl9FUlJPUikKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CisKICAgICAvKiBzZXQgZXJyb3IgY29kZSwgYW5kIGlmIG5vIG1lc3NhZ2UsIHRoZW4gZG9uZSAqLwogICAgIHN0YXRlLT5lcnIgPSBlcnI7CiAgICAgaWYgKG1zZyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKLSAgICAvKiBmb3IgYW4gb3V0IG9mIG1lbW9yeSBlcnJvciwgc2F2ZSBhcyBzdGF0aWMgc3RyaW5nICovCi0gICAgaWYgKGVyciA9PSBaX01FTV9FUlJPUikgewotICAgICAgICBzdGF0ZS0+bXNnID0gKGNoYXIgKiltc2c7CisgICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHJldHVybiBsaXRlcmFsIHN0cmluZyB3aGVuIHJlcXVlc3RlZCAqLworICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvKiBjb25zdHJ1Y3QgZXJyb3IgbWVzc2FnZSB3aXRoIHBhdGggKi8KLSAgICBpZiAoKHN0YXRlLT5tc2cgPSBtYWxsb2Moc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMykpID09IE5VTEwpIHsKKyAgICBpZiAoKHN0YXRlLT5tc2cgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzKSkgPT0KKyAgICAgICAgICAgIE5VTEwpIHsKICAgICAgICAgc3RhdGUtPmVyciA9IFpfTUVNX0VSUk9SOwotICAgICAgICBzdGF0ZS0+bXNnID0gKGNoYXIgKikib3V0IG9mIG1lbW9yeSI7CiAgICAgICAgIHJldHVybjsKICAgICB9CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihzdGF0ZS0+bXNnLCBzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzLAorICAgICAgICAgICAgICIlcyVzJXMiLCBzdGF0ZS0+cGF0aCwgIjogIiwgbXNnKTsKKyNlbHNlCiAgICAgc3RyY3B5KHN0YXRlLT5tc2csIHN0YXRlLT5wYXRoKTsKICAgICBzdHJjYXQoc3RhdGUtPm1zZywgIjogIik7CiAgICAgc3RyY2F0KHN0YXRlLT5tc2csIG1zZyk7CisjZW5kaWYKICAgICByZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nenJlYWQuYyBiL01vZHVsZXMvemxpYi9nenJlYWQuYwppbmRleCA1NDgyMDFhLi5iZjQ1MzhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKKysrIGIvTW9kdWxlcy96bGliL2d6cmVhZC5jCkBAIC0xLDUgKzEsNSBAQAogLyogZ3pyZWFkLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOCwxMCArOCw5IEBACiAvKiBMb2NhbCBmdW5jdGlvbnMgKi8KIGxvY2FsIGludCBnel9sb2FkIE9GKChnel9zdGF0ZXAsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIHVuc2lnbmVkICopKTsKIGxvY2FsIGludCBnel9hdmFpbCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBpbnQgZ3pfbmV4dDQgT0YoKGd6X3N0YXRlcCwgdW5zaWduZWQgbG9uZyAqKSk7Ci1sb2NhbCBpbnQgZ3pfaGVhZCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfbG9vayBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfZGVjb21wIE9GKChnel9zdGF0ZXApKTsKLWxvY2FsIGludCBnel9tYWtlIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9mZXRjaCBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfc2tpcCBPRigoZ3pfc3RhdGVwLCB6X29mZjY0X3QpKTsKIAogLyogVXNlIHJlYWQoKSB0byBsb2FkIGEgYnVmZmVyIC0tIHJldHVybiAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuICBSZWFkIGZyb20KQEAgLTQ2LDczICs0NSw1NCBAQAogICAgZXJyb3IsIDAgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IHRoZSBlb2YgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZW5kIG9mIHRoZSBpbnB1dAogICAgZmlsZSBpcyByZWFjaGVkLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgYmUgdW51c2VkIGRhdGEgaW4gdGhlIGJ1ZmZlci4gIE9uY2UKICAgIHRoYXQgZGF0YSBoYXMgYmVlbiB1c2VkLCBubyBtb3JlIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZWFkIHRoZSBmaWxlLgotICAgZ3pfYXZhaWwoKSBhc3N1bWVzIHRoYXQgc3RybS0+YXZhaWxfaW4gPT0gMC4gKi8KKyAgIElmIHN0cm0tPmF2YWlsX2luICE9IDAsIHRoZW4gdGhlIGN1cnJlbnQgZGF0YSBpcyBtb3ZlZCB0byB0aGUgYmVnaW5uaW5nIG9mCisgICB0aGUgaW5wdXQgYnVmZmVyLCBhbmQgdGhlbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBidWZmZXIgaXMgbG9hZGVkIHdpdGggdGhlCisgICBhdmFpbGFibGUgZGF0YSBmcm9tIHRoZSBpbnB1dCBmaWxlLiAqLwogbG9jYWwgaW50IGd6X2F2YWlsKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKKyAgICB1bnNpZ25lZCBnb3Q7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKHN0YXRlLT5lb2YgPT0gMCkgewotICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPmluLCBzdGF0ZS0+c2l6ZSwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgKikmKHN0cm0tPmF2YWlsX2luKSkgPT0gLTEpCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbikgeyAgICAgICAvKiBjb3B5IHdoYXQncyB0aGVyZSB0byB0aGUgc3RhcnQgKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdGF0ZS0+aW47CisgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBjaGFyICpxID0gc3RybS0+bmV4dF9pbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG4gPSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqcCsrID0gKnErKzsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5pbiArIHN0cm0tPmF2YWlsX2luLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luLCAmZ290KSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gZ290OwogICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotLyogR2V0IG5leHQgYnl0ZSBmcm9tIGlucHV0LCBvciAtMSBpZiBlbmQgb3IgZXJyb3IuICovCi0jZGVmaW5lIE5FWFQoKSAoKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKSA/IC0xIDogXAotICAgICAgICAgICAgICAgIChzdHJtLT5hdmFpbF9pbiA9PSAwID8gLTEgOiBcCi0gICAgICAgICAgICAgICAgIChzdHJtLT5hdmFpbF9pbi0tLCAqKHN0cm0tPm5leHRfaW4pKyspKSkKLQotLyogR2V0IGEgZm91ci1ieXRlIGxpdHRsZS1lbmRpYW4gaW50ZWdlciBhbmQgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgdGhlIHZhbHVlCi0gICBpbiAqcmV0LiAgT3RoZXJ3aXNlIC0xIGlzIHJldHVybmVkIGFuZCAqcmV0IGlzIG5vdCBtb2RpZmllZC4gKi8KLWxvY2FsIGludCBnel9uZXh0NChzdGF0ZSwgcmV0KQotICAgIGd6X3N0YXRlcCBzdGF0ZTsKLSAgICB1bnNpZ25lZCBsb25nICpyZXQ7Ci17Ci0gICAgaW50IGNoOwotICAgIHVuc2lnbmVkIGxvbmcgdmFsOwotICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7Ci0KLSAgICB2YWwgPSBORVhUKCk7Ci0gICAgdmFsICs9ICh1bnNpZ25lZClORVhUKCkgPDwgODsKLSAgICB2YWwgKz0gKHVuc2lnbmVkIGxvbmcpTkVYVCgpIDw8IDE2OwotICAgIGNoID0gTkVYVCgpOwotICAgIGlmIChjaCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHZhbCArPSAodW5zaWduZWQgbG9uZyljaCA8PCAyNDsKLSAgICAqcmV0ID0gdmFsOwotICAgIHJldHVybiAwOwotfQotCi0vKiBMb29rIGZvciBnemlwIGhlYWRlciwgc2V0IHVwIGZvciBpbmZsYXRlIG9yIGNvcHkuICBzdGF0ZS0+aGF2ZSBtdXN0IGJlIHplcm8uCisvKiBMb29rIGZvciBnemlwIGhlYWRlciwgc2V0IHVwIGZvciBpbmZsYXRlIG9yIGNvcHkuICBzdGF0ZS0+eC5oYXZlIG11c3QgYmUgMC4KICAgIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4sIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4gIHN0YXRlLT5ob3cgd2lsbCBiZQogICAgbGVmdCB1bmNoYW5nZWQgaWYgdGhlcmUgaXMgbm8gbW9yZSBpbnB1dCBkYXRhIGF2YWlsYWJsZSwgd2lsbCBiZSBzZXQgdG8gQ09QWQogICAgaWYgdGhlcmUgaXMgbm8gZ3ppcCBoZWFkZXIgYW5kIGRpcmVjdCBjb3B5aW5nIHdpbGwgYmUgcGVyZm9ybWVkLCBvciBpdCB3aWxsCi0gICBiZSBzZXQgdG8gR1pJUCBmb3IgZGVjb21wcmVzc2lvbiwgYW5kIHRoZSBnemlwIGhlYWRlciB3aWxsIGJlIHNraXBwZWQgc28KLSAgIHRoYXQgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGRhdGEgaXMgdGhlIHJhdyBkZWZsYXRlIHN0cmVhbS4gIElmIGRpcmVjdAotICAgY29weWluZywgdGhlbiBsZWZ0b3ZlciBpbnB1dCBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB3aWxsIGJlIGNvcGllZCB0bwotICAgdGhlIG91dHB1dCBidWZmZXIuICBJbiB0aGF0IGNhc2UsIGFsbCBmdXJ0aGVyIGZpbGUgcmVhZHMgd2lsbCBiZSBkaXJlY3RseSB0bwotICAgZWl0aGVyIHRoZSBvdXRwdXQgYnVmZmVyIG9yIGEgdXNlciBidWZmZXIuICBJZiBkZWNvbXByZXNzaW5nLCB0aGUgaW5mbGF0ZQotICAgc3RhdGUgYW5kIHRoZSBjaGVjayB2YWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkLiAgZ3pfaGVhZCgpIHdpbGwgcmV0dXJuIDAgb24KLSAgIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZS4gIEZhaWx1cmVzIG1heSBpbmNsdWRlIHJlYWQgZXJyb3JzIG9yIGd6aXAgaGVhZGVyCi0gICBlcnJvcnMuICAqLwotbG9jYWwgaW50IGd6X2hlYWQoc3RhdGUpCisgICBiZSBzZXQgdG8gR1pJUCBmb3IgZGVjb21wcmVzc2lvbi4gIElmIGRpcmVjdCBjb3B5aW5nLCB0aGVuIGxlZnRvdmVyIGlucHV0CisgICBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB3aWxsIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gIEluIHRoYXQKKyAgIGNhc2UsIGFsbCBmdXJ0aGVyIGZpbGUgcmVhZHMgd2lsbCBiZSBkaXJlY3RseSB0byBlaXRoZXIgdGhlIG91dHB1dCBidWZmZXIgb3IKKyAgIGEgdXNlciBidWZmZXIuICBJZiBkZWNvbXByZXNzaW5nLCB0aGUgaW5mbGF0ZSBzdGF0ZSB3aWxsIGJlIGluaXRpYWxpemVkLgorICAgZ3pfbG9vaygpIHdpbGwgcmV0dXJuIDAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLiAqLworbG9jYWwgaW50IGd6X2xvb2soc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7Ci0gICAgaW50IGZsYWdzOwotICAgIHVuc2lnbmVkIGxlbjsKIAogICAgIC8qIGFsbG9jYXRlIHJlYWQgYnVmZmVycyBhbmQgaW5mbGF0ZSBtZW1vcnkgKi8KICAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCkgewogICAgICAgICAvKiBhbGxvY2F0ZSBidWZmZXJzICovCi0gICAgICAgIHN0YXRlLT5pbiA9IG1hbGxvYyhzdGF0ZS0+d2FudCk7Ci0gICAgICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CisgICAgICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50IDw8IDEpOwogICAgICAgICBpZiAoc3RhdGUtPmluID09IE5VTEwgfHwgc3RhdGUtPm91dCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPm91dCAhPSBOVUxMKQogICAgICAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CkBAIC0xMjksNyArMTA5LDcgQEAKICAgICAgICAgc3RhdGUtPnN0cm0ub3BhcXVlID0gWl9OVUxMOwogICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7CiAgICAgICAgIHN0YXRlLT5zdHJtLm5leHRfaW4gPSBaX05VTEw7Ci0gICAgICAgIGlmIChpbmZsYXRlSW5pdDIoJihzdGF0ZS0+c3RybSksIC0xNSkgIT0gWl9PSykgeyAgICAvKiByYXcgaW5mbGF0ZSAqLworICAgICAgICBpZiAoaW5mbGF0ZUluaXQyKCYoc3RhdGUtPnN0cm0pLCAxNSArIDE2KSAhPSBaX09LKSB7ICAgIC8qIGd1bnppcCAqLwogICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKICAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKICAgICAgICAgICAgIHN0YXRlLT5zaXplID0gMDsKQEAgLTEzOCw4MyArMTE4LDQ1IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBnZXQgc29tZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KLSAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgIC8qIGdldCBhdCBsZWFzdCB0aGUgbWFnaWMgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IDIpIHsKICAgICAgICAgaWYgKGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvKiBsb29rIGZvciB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgYnl0ZXMgMzEgYW5kIDEzOSAqLwotICAgIGlmIChzdHJtLT5uZXh0X2luWzBdID09IDMxKSB7Ci0gICAgICAgIHN0cm0tPmF2YWlsX2luLS07Ci0gICAgICAgIHN0cm0tPm5leHRfaW4rKzsKLSAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gJiYgc3RybS0+bmV4dF9pblswXSA9PSAxMzkpIHsKLSAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBnemlwIGhlYWRlciwgd29vIGhvbyEgKi8KLSAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luLS07Ci0gICAgICAgICAgICBzdHJtLT5uZXh0X2luKys7Ci0KLSAgICAgICAgICAgIC8qIHNraXAgcmVzdCBvZiBoZWFkZXIgKi8KLSAgICAgICAgICAgIGlmIChORVhUKCkgIT0gOCkgeyAgICAgIC8qIGNvbXByZXNzaW9uIG1ldGhvZCAqLwotICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsYWdzID0gTkVYVCgpOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMHhlMCkgeyAgICAgLyogcmVzZXJ2ZWQgZmxhZyBiaXRzICovCi0gICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVua25vd24gaGVhZGVyIGZsYWdzIHNldCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIG1vZGlmaWNhdGlvbiB0aW1lICovCi0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBleHRyYSBmbGFncyAqLwotICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogb3BlcmF0aW5nIHN5c3RlbSAqLwotICAgICAgICAgICAgaWYgKGZsYWdzICYgNCkgeyAgICAgICAgLyogZXh0cmEgZmllbGQgKi8KLSAgICAgICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpTkVYVCgpOwotICAgICAgICAgICAgICAgIGxlbiArPSAodW5zaWduZWQpTkVYVCgpIDw8IDg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGxlbi0tKQotICAgICAgICAgICAgICAgICAgICBpZiAoTkVYVCgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWdzICYgOCkgICAgICAgICAgLyogZmlsZSBuYW1lICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKE5FWFQoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIDE2KSAgICAgICAgIC8qIGNvbW1lbnQgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoTkVYVCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMikgeyAgICAgICAgLyogaGVhZGVyIGNyYyAqLwotICAgICAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBhbiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGlzIG5vdCBjaGVja2VkIGZvciBoZXJlIC0tIGl0IHdpbGwgYmUKLSAgICAgICAgICAgICAgIG5vdGljZWQgb24gdGhlIGZpcnN0IHJlcXVlc3QgZm9yIHVuY29tcHJlc3NlZCBkYXRhICovCi0KLSAgICAgICAgICAgIC8qIHNldCB1cCBmb3IgZGVjb21wcmVzc2lvbiAqLwotICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOwotICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgICAgIHN0YXRlLT5ob3cgPSBHWklQOwotICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIG5vdCBhIGd6aXAgZmlsZSAtLSBzYXZlIGZpcnN0IGJ5dGUgKDMxKSBhbmQgZmFsbCB0byByYXcgaS9vICovCi0gICAgICAgICAgICBzdGF0ZS0+b3V0WzBdID0gMzE7Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSA9IDE7Ci0gICAgICAgIH0KKyAgICAvKiBsb29rIGZvciBnemlwIG1hZ2ljIGJ5dGVzIC0tIGlmIHRoZXJlLCBkbyBnemlwIGRlY29kaW5nIChub3RlOiB0aGVyZSBpcworICAgICAgIGEgbG9naWNhbCBkaWxlbW1hIGhlcmUgd2hlbiBjb25zaWRlcmluZyB0aGUgY2FzZSBvZiBhIHBhcnRpYWxseSB3cml0dGVuCisgICAgICAgZ3ppcCBmaWxlLCB0byB3aXQsIGlmIGEgc2luZ2xlIDMxIGJ5dGUgaXMgd3JpdHRlbiwgdGhlbiB3ZSBjYW5ub3QgdGVsbAorICAgICAgIHdoZXRoZXIgdGhpcyBpcyBhIHNpbmdsZS1ieXRlIGZpbGUsIG9yIGp1c3QgYSBwYXJ0aWFsbHkgd3JpdHRlbiBnemlwCisgICAgICAgZmlsZSAtLSBmb3IgaGVyZSB3ZSBhc3N1bWUgdGhhdCBpZiBhIGd6aXAgZmlsZSBpcyBiZWluZyB3cml0dGVuLCB0aGVuCisgICAgICAgdGhlIGhlYWRlciB3aWxsIGJlIHdyaXR0ZW4gaW4gYSBzaW5nbGUgb3BlcmF0aW9uLCBzbyB0aGF0IHJlYWRpbmcgYQorICAgICAgIHNpbmdsZSBieXRlIGlzIHN1ZmZpY2llbnQgaW5kaWNhdGlvbiB0aGF0IGl0IGlzIG5vdCBhIGd6aXAgZmlsZSkgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPiAxICYmCisgICAgICAgICAgICBzdHJtLT5uZXh0X2luWzBdID09IDMxICYmIHN0cm0tPm5leHRfaW5bMV0gPT0gMTM5KSB7CisgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKKyAgICAgICAgc3RhdGUtPmhvdyA9IEdaSVA7CisgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAwOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvKiBkb2luZyByYXcgaS9vLCBzYXZlIHN0YXJ0IG9mIHJhdyBkYXRhIGZvciBzZWVraW5nLCBjb3B5IGFueSBsZWZ0b3ZlcgotICAgICAgIGlucHV0IHRvIG91dHB1dCAtLSB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZXIgdGhhbgotICAgICAgIHRoZSBpbnB1dCBidWZmZXIsIHdoaWNoIGFsc28gYXNzdXJlcyBzcGFjZSBmb3IgZ3p1bmdldGMoKSAqLwotICAgIHN0YXRlLT5yYXcgPSBzdGF0ZS0+cG9zOwotICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dDsKKyAgICAvKiBubyBnemlwIGhlYWRlciAtLSBpZiB3ZSB3ZXJlIGRlY29kaW5nIGd6aXAgYmVmb3JlLCB0aGVuIHRoaXMgaXMgdHJhaWxpbmcKKyAgICAgICBnYXJiYWdlLiAgSWdub3JlIHRoZSB0cmFpbGluZyBnYXJiYWdlIGFuZCBmaW5pc2guICovCisgICAgaWYgKHN0YXRlLT5kaXJlY3QgPT0gMCkgeworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIHN0YXRlLT5lb2YgPSAxOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogZG9pbmcgcmF3IGkvbywgY29weSBhbnkgbGVmdG92ZXIgaW5wdXQgdG8gb3V0cHV0IC0tIHRoaXMgYXNzdW1lcyB0aGF0CisgICAgICAgdGhlIG91dHB1dCBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIGlucHV0IGJ1ZmZlciwgd2hpY2ggYWxzbyBhc3N1cmVzCisgICAgICAgc3BhY2UgZm9yIGd6dW5nZXRjKCkgKi8KKyAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dDsKICAgICBpZiAoc3RybS0+YXZhaWxfaW4pIHsKLSAgICAgICAgbWVtY3B5KHN0YXRlLT5uZXh0ICsgc3RhdGUtPmhhdmUsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKLSAgICAgICAgc3RhdGUtPmhhdmUgKz0gc3RybS0+YXZhaWxfaW47CisgICAgICAgIG1lbWNweShzdGF0ZS0+eC5uZXh0LCBzdHJtLT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSBzdHJtLT5hdmFpbF9pbjsKICAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOwogICAgIH0KICAgICBzdGF0ZS0+aG93ID0gQ09QWTsKQEAgLTIyMywxOSArMTY1LDE1IEBACiB9CiAKIC8qIERlY29tcHJlc3MgZnJvbSBpbnB1dCB0byB0aGUgcHJvdmlkZWQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBpbiB0aGUgc3RhdGUuCi0gICBJZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgcmVhY2hlZCwgdGhlbiB2ZXJpZnkgdGhlIGd6aXAgdHJhaWxlcgotICAgY2hlY2sgdmFsdWUgYW5kIGxlbmd0aCAobW9kdWxvIDJeMzIpLiAgc3RhdGUtPmhhdmUgYW5kIHN0YXRlLT5uZXh0IGFyZSBzZXQKLSAgIHRvIHBvaW50IHRvIHRoZSBqdXN0IGRlY29tcHJlc3NlZCBkYXRhLCBhbmQgdGhlIGNyYyBpcyB1cGRhdGVkLiAgSWYgdGhlCi0gICB0cmFpbGVyIGlzIHZlcmlmaWVkLCBzdGF0ZS0+aG93IGlzIHJlc2V0IHRvIExPT0sgdG8gbG9vayBmb3IgdGhlIG5leHQgZ3ppcAotICAgc3RyZWFtIG9yIHJhdyBkYXRhLCBvbmNlIHN0YXRlLT5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xCi0gICBvbiBmYWlsdXJlLiAgRmFpbHVyZXMgbWF5IGluY2x1ZGUgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgb3IgYSBmYWlsZWQgZ3ppcAotICAgdHJhaWxlciB2ZXJpZmljYXRpb24uICovCisgICBPbiByZXR1cm4sIHN0YXRlLT54LmhhdmUgYW5kIHN0YXRlLT54Lm5leHQgcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkCisgICBkYXRhLiAgSWYgdGhlIGd6aXAgc3RyZWFtIGNvbXBsZXRlcywgc3RhdGUtPmhvdyBpcyByZXNldCB0byBMT09LIHRvIGxvb2sgZm9yCisgICB0aGUgbmV4dCBnemlwIHN0cmVhbSBvciByYXcgZGF0YSwgb25jZSBzdGF0ZS0+eC5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwCisgICBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAqLwogbG9jYWwgaW50IGd6X2RlY29tcChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0ID0gWl9PSzsKICAgICB1bnNpZ25lZCBoYWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBjcmMsIGxlbjsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCiAgICAgLyogZmlsbCBvdXRwdXQgYnVmZmVyIHVwIHRvIGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLwpAQCAtMjQ1LDE1ICsxODMsMTUgQEAKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgLyogZGVjb21wcmVzcyBhbmQgaGFuZGxlIGVycm9ycyAqLwogICAgICAgICByZXQgPSBpbmZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOwogICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VSUk9SIHx8IHJldCA9PSBaX05FRURfRElDVCkgewogICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW5mbGF0ZSBzdHJlYW0gY29ycnVwdCIpOworICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbmZsYXRlIHN0cmVhbSBjb3JydXB0Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldCA9PSBaX01FTV9FUlJPUikgewpAQCAtMjYyLDY3ICsyMDAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeyAgICAgICAgICAgICAgLyogZGVmbGF0ZSBzdHJlYW0gaW52YWxpZCAqLwogICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPT0gTlVMTCA/ICJjb21wcmVzc2VkIGRhdGEgZXJyb3IiIDogc3RybS0+bXNnKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNvbXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpOwogCi0gICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgYW5kIGNyYyBjaGVjayB2YWx1ZSAqLwotICAgIHN0YXRlLT5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OwotICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+aGF2ZTsKLSAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdGF0ZS0+bmV4dCwgc3RhdGUtPmhhdmUpOworICAgIC8qIHVwZGF0ZSBhdmFpbGFibGUgb3V0cHV0ICovCisgICAgc3RhdGUtPnguaGF2ZSA9IGhhZCAtIHN0cm0tPmF2YWlsX291dDsKKyAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5oYXZlOwogCi0gICAgLyogY2hlY2sgZ3ppcCB0cmFpbGVyIGlmIGF0IGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLwotICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgIGlmIChnel9uZXh0NChzdGF0ZSwgJmNyYykgPT0gLTEgfHwgZ3pfbmV4dDQoc3RhdGUsICZsZW4pID09IC0xKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjcmMgIT0gc3RybS0+YWRsZXIpIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJpbmNvcnJlY3QgZGF0YSBjaGVjayIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZW4gIT0gKHN0cm0tPnRvdGFsX291dCAmIDB4ZmZmZmZmZmZMKSkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgImluY29ycmVjdCBsZW5ndGggY2hlY2siKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsgICAgICAvKiByZWFkeSBmb3IgbmV4dCBzdHJlYW0sIG9uY2UgaGF2ZSBpcyAwIChsZWF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0IHVuY2hhbmdlZCB0byByZW1lbWJlciBob3cpICovCi0gICAgfQorICAgIC8qIGlmIHRoZSBnemlwIHN0cmVhbSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBsb29rIGZvciBhbm90aGVyICovCisgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOwogCiAgICAgLyogZ29vZCBkZWNvbXByZXNzaW9uICovCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIE1ha2UgZGF0YSBhbmQgcHV0IGluIHRoZSBvdXRwdXQgYnVmZmVyLiAgQXNzdW1lcyB0aGF0IHN0YXRlLT5oYXZlID09IDAuCisvKiBGZXRjaCBkYXRhIGFuZCBwdXQgaXQgaW4gdGhlIG91dHB1dCBidWZmZXIuICBBc3N1bWVzIHN0YXRlLT54LmhhdmUgaXMgMC4KICAgIERhdGEgaXMgZWl0aGVyIGNvcGllZCBmcm9tIHRoZSBpbnB1dCBmaWxlIG9yIGRlY29tcHJlc3NlZCBmcm9tIHRoZSBpbnB1dAogICAgZmlsZSBkZXBlbmRpbmcgb24gc3RhdGUtPmhvdy4gIElmIHN0YXRlLT5ob3cgaXMgTE9PSywgdGhlbiBhIGd6aXAgaGVhZGVyIGlzCi0gICBsb29rZWQgZm9yIChhbmQgc2tpcHBlZCBpZiBmb3VuZCkgdG8gZGV0ZXJtaW5lIHdpdGhlciB0byBjb3B5IG9yIGRlY29tcHJlc3MuCi0gICBSZXR1cm5zIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIGd6X21ha2UoKSB3aWxsIGxlYXZlIHN0YXRlLT5oYXZlIGFzIENPUFkKLSAgIG9yIEdaSVAgdW5sZXNzIHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBhbmQgYWxsIGRhdGEgaGFzCi0gICBiZWVuIHByb2Nlc3NlZC4gICovCi1sb2NhbCBpbnQgZ3pfbWFrZShzdGF0ZSkKKyAgIGxvb2tlZCBmb3IgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY29weSBvciBkZWNvbXByZXNzLiAgUmV0dXJucyAtMSBvbiBlcnJvciwKKyAgIG90aGVyd2lzZSAwLiAgZ3pfZmV0Y2goKSB3aWxsIGxlYXZlIHN0YXRlLT5ob3cgYXMgQ09QWSBvciBHWklQIHVubGVzcyB0aGUKKyAgIGVuZCBvZiB0aGUgaW5wdXQgZmlsZSBoYXMgYmVlbiByZWFjaGVkIGFuZCBhbGwgZGF0YSBoYXMgYmVlbiBwcm9jZXNzZWQuICAqLworbG9jYWwgaW50IGd6X2ZldGNoKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSykgeyAgICAgICAgICAgLyogbG9vayBmb3IgZ3ppcCBoZWFkZXIgKi8KLSAgICAgICAgaWYgKGd6X2hlYWQoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUpICAgICAgICAgICAgICAgIC8qIGdvdCBzb21lIGRhdGEgZnJvbSBnel9oZWFkKCkgKi8KKyAgICBkbyB7CisgICAgICAgIHN3aXRjaChzdGF0ZS0+aG93KSB7CisgICAgICAgIGNhc2UgTE9PSzogICAgICAvKiAtPiBMT09LLCBDT1BZIChvbmx5IGlmIG5ldmVyIEdaSVApLCBvciBHWklQICovCisgICAgICAgICAgICBpZiAoZ3pfbG9vayhzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPUFk6ICAgICAgLyogLT4gQ09QWSAqLworICAgICAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPnguaGF2ZSkpCisgICAgICAgICAgICAgICAgICAgID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0OwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAgICAgIC8qIHN0cmFpZ2h0IGNvcHkgKi8KLSAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPmhhdmUpKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0OwotICAgIH0KLSAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IEdaSVApIHsgICAgICAvKiBkZWNvbXByZXNzICovCi0gICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplIDw8IDE7Ci0gICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKLSAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgICAgICBjYXNlIEdaSVA6ICAgICAgLyogLT4gR1pJUCBvciBMT09LIChpZiBlbmQgb2YgZ3ppcCBzdHJlYW0pICovCisgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZSA8PCAxOworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OworICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc3RhdGUtPnguaGF2ZSA9PSAwICYmICghc3RhdGUtPmVvZiB8fCBzdHJtLT5hdmFpbF9pbikpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMzYsMTIgKzI2MiwxMiBAQAogICAgIC8qIHNraXAgb3ZlciBsZW4gYnl0ZXMgb3IgcmVhY2ggZW5kLW9mLWZpbGUsIHdoaWNoZXZlciBjb21lcyBmaXJzdCAqLwogICAgIHdoaWxlIChsZW4pCiAgICAgICAgIC8qIHNraXAgb3ZlciB3aGF0ZXZlciBpcyBpbiBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+aGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+aGF2ZSA+IGxlbiA/Ci0gICAgICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT54LmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPnguaGF2ZSA+IGxlbiA/CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgICAgIGxlbiAtPSBuOwogICAgICAgICB9CiAKQEAgLTM1Miw3ICsyNzgsNyBAQAogICAgICAgICAvKiBuZWVkIG1vcmUgZGF0YSB0byBza2lwIC0tIGxvYWQgdXAgb3V0cHV0IGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCi0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMzc0LDE0ICszMDAsMTUgQEAKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKICAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogc2luY2UgYW4gaW50IGlzIHJldHVybmVkLCBtYWtlIHN1cmUgbGVuIGZpdHMgaW4gb25lLCBvdGhlcndpc2UgcmV0dXJuCiAgICAgICAgd2l0aCBhbiBlcnJvciAodGhpcyBhdm9pZHMgdGhlIGZsYXcgaW4gdGhlIGludGVyZmFjZSkgKi8KICAgICBpZiAoKGludClsZW4gPCAwKSB7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTQwMCw0OSArMzI3LDUxIEBACiAgICAgZ290ID0gMDsKICAgICBkbyB7CiAgICAgICAgIC8qIGZpcnN0IGp1c3QgdHJ5IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPmhhdmU7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOwogICAgICAgICB9CiAKICAgICAgICAgLyogb3V0cHV0IGJ1ZmZlciBlbXB0eSAtLSByZXR1cm4gaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgKi8KLSAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmVvZiAmJiBzdHJtLT5hdmFpbF9pbiA9PSAwKQorICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0cm0tPmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsgICAgICAgIC8qIHRyaWVkIHRvIHJlYWQgcGFzdCBlbmQgKi8KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgLyogbmVlZCBvdXRwdXQgZGF0YSAtLSBmb3Igc21hbGwgbGVuIG9yIG5ldyBzdHJlYW0gbG9hZCB1cCBvdXIgb3V0cHV0CiAgICAgICAgICAgIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IExPT0sgfHwgbGVuIDwgKHN0YXRlLT5zaXplIDw8IDEpKSB7CiAgICAgICAgICAgICAvKiBnZXQgbW9yZSBvdXRwdXQsIGxvb2tpbmcgZm9yIGhlYWRlciBpZiByZXF1aXJlZCAqLwotICAgICAgICAgICAgaWYgKGd6X21ha2Uoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgaWYgKGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogbm8gcHJvZ3Jlc3MgeWV0IC0tIGdvIGJhY2sgdG8gbWVtY3B5KCkgYWJvdmUgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBubyBwcm9ncmVzcyB5ZXQgLS0gZ28gYmFjayB0byBjb3B5IGFib3ZlICovCiAgICAgICAgICAgICAvKiB0aGUgY29weSBhYm92ZSBhc3N1cmVzIHRoYXQgd2Ugd2lsbCBsZWF2ZSB3aXRoIHNwYWNlIGluIHRoZQogICAgICAgICAgICAgICAgb3V0cHV0IGJ1ZmZlciwgYWxsb3dpbmcgYXQgbGVhc3Qgb25lIGd6dW5nZXRjKCkgdG8gc3VjY2VlZCAqLwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIHJlYWQgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAvKiByZWFkIGRpcmVjdGx5ICovCi0gICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgYnVmLCBsZW4sICZuKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgbGVuLCAmbikgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIGRlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsgIC8qIHN0YXRlLT5ob3cgPT0gR1pJUCAqLwogICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVuOwotICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBidWY7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOwogICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIC8qIHVwZGF0ZSBwcm9ncmVzcyAqLwogICAgICAgICBsZW4gLT0gbjsKICAgICAgICAgYnVmID0gKGNoYXIgKilidWYgKyBuOwogICAgICAgICBnb3QgKz0gbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICB9IHdoaWxlIChsZW4pOwogCiAgICAgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkIGludG8gdXNlciBidWZmZXIgKHdpbGwgZml0IGluIGludCkgKi8KQEAgLTQ1MCw2ICszNzksMTEgQEAKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgdW5kZWYgel9nemdldGMKKyNlbHNlCisjICB1bmRlZiBnemdldGMKKyNlbmRpZgogaW50IFpFWFBPUlQgZ3pnZXRjKGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7CkBAIC00NjIsMTUgKzM5NiwxNiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiB0cnkgb3V0cHV0IGJ1ZmZlciAobm8gbmVlZCB0byBjaGVjayBmb3Igc2tpcCByZXF1ZXN0KSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICBzdGF0ZS0+aGF2ZS0tOwotICAgICAgICBzdGF0ZS0+cG9zKys7Ci0gICAgICAgIHJldHVybiAqKHN0YXRlLT5uZXh0KSsrOworICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgIHN0YXRlLT54LmhhdmUtLTsKKyAgICAgICAgc3RhdGUtPngucG9zKys7CisgICAgICAgIHJldHVybiAqKHN0YXRlLT54Lm5leHQpKys7CiAgICAgfQogCiAgICAgLyogbm90aGluZyB0aGVyZSAtLSB0cnkgZ3pyZWFkKCkgKi8KQEAgLTQ3OCw2ICs0MTMsMTIgQEAKICAgICByZXR1cm4gcmV0IDwgMSA/IC0xIDogYnVmWzBdOwogfQogCitpbnQgWkVYUE9SVCBnemdldGNfKGZpbGUpCitnekZpbGUgZmlsZTsKK3sKKyAgICByZXR1cm4gZ3pnZXRjKGZpbGUpOworfQorCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQogICAgIGludCBjOwpAQCAtNDkwLDggKzQzMSw5IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHByb2Nlc3MgYSBza2lwIHJlcXVlc3QgKi8KQEAgLTUwNiwzMiArNDQ4LDM0IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGlmIG91dHB1dCBidWZmZXIgZW1wdHksIHB1dCBieXRlIGF0IGVuZCAoYWxsb3dzIG1vcmUgcHVzaGluZykgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgewotICAgICAgICBzdGF0ZS0+aGF2ZSA9IDE7Ci0gICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKSAtIDE7Ci0gICAgICAgIHN0YXRlLT5uZXh0WzBdID0gYzsKLSAgICAgICAgc3RhdGUtPnBvcy0tOworICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDE7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKKyAgICAgICAgc3RhdGUtPngubmV4dFswXSA9IGM7CisgICAgICAgIHN0YXRlLT54LnBvcy0tOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgICAgIHJldHVybiBjOwogICAgIH0KIAogICAgIC8qIGlmIG5vIHJvb20sIGdpdmUgdXAgKG11c3QgaGF2ZSBhbHJlYWR5IGRvbmUgYSBnenVuZ2V0YygpKSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAib3V0IG9mIHJvb20gdG8gcHVzaCBjaGFyYWN0ZXJzIik7CisgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gKHN0YXRlLT5zaXplIDw8IDEpKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJvdXQgb2Ygcm9vbSB0byBwdXNoIGNoYXJhY3RlcnMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8qIHNsaWRlIG91dHB1dCBkYXRhIGlmIG5lZWRlZCBhbmQgaW5zZXJ0IGJ5dGUgYmVmb3JlIGV4aXN0aW5nIGRhdGEgKi8KLSAgICBpZiAoc3RhdGUtPm5leHQgPT0gc3RhdGUtPm91dCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPmhhdmU7CisgICAgaWYgKHN0YXRlLT54Lm5leHQgPT0gc3RhdGUtPm91dCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPnguaGF2ZTsKICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSk7CiAgICAgICAgIHdoaWxlIChzcmMgPiBzdGF0ZS0+b3V0KQogICAgICAgICAgICAgKi0tZGVzdCA9ICotLXNyYzsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBkZXN0OworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gZGVzdDsKICAgICB9Ci0gICAgc3RhdGUtPmhhdmUrKzsKLSAgICBzdGF0ZS0+bmV4dC0tOwotICAgIHN0YXRlLT5uZXh0WzBdID0gYzsKLSAgICBzdGF0ZS0+cG9zLS07CisgICAgc3RhdGUtPnguaGF2ZSsrOworICAgIHN0YXRlLT54Lm5leHQtLTsKKyAgICBzdGF0ZS0+eC5uZXh0WzBdID0gYzsKKyAgICBzdGF0ZS0+eC5wb3MtLTsKKyAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgcmV0dXJuIGM7CiB9CiAKQEAgLTU1MSw4ICs0OTUsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLwpAQCAtNTY5LDMyICs1MTQsMzEgQEAKICAgICBsZWZ0ID0gKHVuc2lnbmVkKWxlbiAtIDE7CiAgICAgaWYgKGxlZnQpIGRvIHsKICAgICAgICAgLyogYXNzdXJlIHRoYXQgc29tZXRoaW5nIGlzIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogZXJyb3IgKi8KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7ICAgICAvKiBlbmQgb2YgZmlsZSAqLwotICAgICAgICAgICAgICAgIGlmIChidWYgPT0gc3RyKSAgICAgICAgIC8qIGdvdCBidXBrdXMgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZ290IHNvbWV0aGluZyAtLSByZXR1cm4gaXQgKi8KLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCAmJiBnel9mZXRjaChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCkgeyAgICAgICAvKiBlbmQgb2YgZmlsZSAqLworICAgICAgICAgICAgc3RhdGUtPnBhc3QgPSAxOyAgICAgICAgICAgIC8qIHJlYWQgcGFzdCBlbmQgKi8KKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gd2hhdCB3ZSBoYXZlICovCiAgICAgICAgIH0KIAogICAgICAgICAvKiBsb29rIGZvciBlbmQtb2YtbGluZSBpbiBjdXJyZW50IG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVmdCA/IGxlZnQgOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgZW9sID0gbWVtY2hyKHN0YXRlLT5uZXh0LCAnXG4nLCBuKTsKKyAgICAgICAgbiA9IHN0YXRlLT54LmhhdmUgPiBsZWZ0ID8gbGVmdCA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgIGVvbCA9ICh1bnNpZ25lZCBjaGFyICopbWVtY2hyKHN0YXRlLT54Lm5leHQsICdcbicsIG4pOwogICAgICAgICBpZiAoZW9sICE9IE5VTEwpCi0gICAgICAgICAgICBuID0gKHVuc2lnbmVkKShlb2wgLSBzdGF0ZS0+bmV4dCkgKyAxOworICAgICAgICAgICAgbiA9ICh1bnNpZ25lZCkoZW9sIC0gc3RhdGUtPngubmV4dCkgKyAxOwogCiAgICAgICAgIC8qIGNvcHkgdGhyb3VnaCBlbmQtb2YtbGluZSwgb3IgcmVtYWluZGVyIGlmIG5vdCBmb3VuZCAqLwotICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7Ci0gICAgICAgIHN0YXRlLT5oYXZlIC09IG47Ci0gICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPngubmV4dCwgbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgbGVmdCAtPSBuOwogICAgICAgICBidWYgKz0gbjsKICAgICB9IHdoaWxlIChsZWZ0ICYmIGVvbCA9PSBOVUxMKTsKIAotICAgIC8qIGZvdW5kIGVuZC1vZi1saW5lIG9yIG91dCBvZiBzcGFjZSAtLSB0ZXJtaW5hdGUgc3RyaW5nIGFuZCByZXR1cm4gaXQgKi8KKyAgICAvKiByZXR1cm4gdGVybWluYXRlZCBzdHJpbmcsIG9yIGlmIG5vdGhpbmcsIGVuZCBvZiBmaWxlICovCisgICAgaWYgKGJ1ZiA9PSBzdHIpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGJ1ZlswXSA9IDA7CiAgICAgcmV0dXJuIHN0cjsKIH0KQEAgLTYxMCwxNiArNTU0LDEyIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgLyogaWYgdGhlIHN0YXRlIGlzIG5vdCBrbm93biwgYnV0IHdlIGNhbiBmaW5kIG91dCwgdGhlbiBkbyBzbyAodGhpcyBpcwogICAgICAgIG1haW5seSBmb3IgcmlnaHQgYWZ0ZXIgYSBnem9wZW4oKSBvciBnemRvcGVuKCkpICovCi0gICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyAmJiBzdGF0ZS0+aGF2ZSA9PSAwKQotICAgICAgICAodm9pZClnel9oZWFkKHN0YXRlKTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCAmJiBzdGF0ZS0+aG93ID09IExPT0sgJiYgc3RhdGUtPnguaGF2ZSA9PSAwKQorICAgICAgICAodm9pZClnel9sb29rKHN0YXRlKTsKIAotICAgIC8qIHJldHVybiAxIGlmIHJlYWRpbmcgZGlyZWN0LCAwIGlmIGRlY29tcHJlc3NpbmcgYSBnemlwIHN0cmVhbSAqLworICAgIC8qIHJldHVybiAxIGlmIHRyYW5zcGFyZW50LCAwIGlmIHByb2Nlc3NpbmcgYSBnemlwIHN0cmVhbSAqLwogICAgIHJldHVybiBzdGF0ZS0+ZGlyZWN0OwogfQogCkBAIC02MjcsNyArNTY3LDcgQEAKIGludCBaRVhQT1JUIGd6Y2xvc2VfcihmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewotICAgIGludCByZXQ7CisgICAgaW50IHJldCwgZXJyOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KQEAgLTY0NSw5ICs1ODUsMTAgQEAKICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOwogICAgIH0KKyAgICBlcnIgPSBzdGF0ZS0+ZXJyID09IFpfQlVGX0VSUk9SID8gWl9CVUZfRVJST1IgOiBaX09LOwogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKICAgICByZXQgPSBjbG9zZShzdGF0ZS0+ZmQpOwogICAgIGZyZWUoc3RhdGUpOwotICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogWl9PSzsKKyAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IGVycjsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nendyaXRlLmMgYi9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jCmluZGV4IGU4ZGVmYzYuLmFhNzY3ZmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nendyaXRlLmMKKysrIGIvTW9kdWxlcy96bGliL2d6d3JpdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGd6d3JpdGUuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3Igd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xOCw0NCArMTgsNTUgQEAKICAgICBpbnQgcmV0OwogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICAvKiBhbGxvY2F0ZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgKi8KLSAgICBzdGF0ZS0+aW4gPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCB8fCBzdGF0ZS0+b3V0ID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7Ci0gICAgICAgIGlmIChzdGF0ZS0+aW4gIT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAvKiBhbGxvY2F0ZSBpbnB1dCBidWZmZXIgKi8KKyAgICBzdGF0ZS0+aW4gPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMKSB7CiAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIC8qIGFsbG9jYXRlIGRlZmxhdGUgbWVtb3J5LCBzZXQgdXAgZm9yIGd6aXAgY29tcHJlc3Npb24gKi8KLSAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7Ci0gICAgc3RybS0+emZyZWUgPSBaX05VTEw7Ci0gICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOwotICAgIHJldCA9IGRlZmxhdGVJbml0MihzdHJtLCBzdGF0ZS0+bGV2ZWwsIFpfREVGTEFURUQsCi0gICAgICAgICAgICAgICAgICAgICAgIDE1ICsgMTYsIDgsIHN0YXRlLT5zdHJhdGVneSk7Ci0gICAgaWYgKHJldCAhPSBaX09LKSB7Ci0gICAgICAgIGZyZWUoc3RhdGUtPmluKTsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgLyogb25seSBuZWVkIG91dHB1dCBidWZmZXIgYW5kIGRlZmxhdGUgc3RhdGUgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgLyogYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciAqLworICAgICAgICBzdGF0ZS0+b3V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgICAgICBpZiAoc3RhdGUtPm91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICAvKiBhbGxvY2F0ZSBkZWZsYXRlIG1lbW9yeSwgc2V0IHVwIGZvciBnemlwIGNvbXByZXNzaW9uICovCisgICAgICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+emZyZWUgPSBaX05VTEw7CisgICAgICAgIHN0cm0tPm9wYXF1ZSA9IFpfTlVMTDsKKyAgICAgICAgcmV0ID0gZGVmbGF0ZUluaXQyKHN0cm0sIHN0YXRlLT5sZXZlbCwgWl9ERUZMQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9XQklUUyArIDE2LCBERUZfTUVNX0xFVkVMLCBzdGF0ZS0+c3RyYXRlZ3kpOworICAgICAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBtYXJrIHN0YXRlIGFzIGluaXRpYWxpemVkICovCiAgICAgc3RhdGUtPnNpemUgPSBzdGF0ZS0+d2FudDsKIAotICAgIC8qIGluaXRpYWxpemUgd3JpdGUgYnVmZmVyICovCi0gICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7Ci0gICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OwotICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgLyogaW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogLyogQ29tcHJlc3Mgd2hhdGV2ZXIgaXMgYXQgYXZhaWxfaW4gYW5kIG5leHRfaW4gYW5kIHdyaXRlIHRvIHRoZSBvdXRwdXQgZmlsZS4KICAgIFJldHVybiAtMSBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRvIHRoZSBvdXRwdXQgZmlsZSwgb3RoZXJ3aXNlIDAuCiAgICBmbHVzaCBpcyBhc3N1bWVkIHRvIGJlIGEgdmFsaWQgZGVmbGF0ZSgpIGZsdXNoIHZhbHVlLiAgSWYgZmx1c2ggaXMgWl9GSU5JU0gsCi0gICB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICovCisgICB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICBJZiBnei0+ZGlyZWN0CisgICBpcyB0cnVlLCB0aGVuIHNpbXBseSB3cml0ZSB0byB0aGUgb3V0cHV0IGZpbGUgd2l0aG91dCBjb21wcmVzc2luZywgYW5kCisgICBpZ25vcmUgZmx1c2guICovCiBsb2NhbCBpbnQgZ3pfY29tcChzdGF0ZSwgZmx1c2gpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIGludCBmbHVzaDsKQEAgLTY4LDYgKzc5LDE3IEBACiAgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIAorICAgIC8qIHdyaXRlIGRpcmVjdGx5IGlmIHJlcXVlc3RlZCAqLworICAgIGlmIChzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIGdvdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgICAgICBpZiAoZ290IDwgMCB8fCAodW5zaWduZWQpZ290ICE9IHN0cm0tPmF2YWlsX2luKSB7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgLyogcnVuIGRlZmxhdGUoKSBvbiBwcm92aWRlZCBpbnB1dCB1bnRpbCBpdCBwcm9kdWNlcyBubyBtb3JlIG91dHB1dCAqLwogICAgIHJldCA9IFpfT0s7CiAgICAgZG8gewpAQCAtNzUsOCArOTcsOCBAQAogICAgICAgICAgICBkb2luZyBaX0ZJTklTSCB0aGVuIGRvbid0IHdyaXRlIHVudGlsIHdlIGdldCB0byBaX1NUUkVBTV9FTkQgKi8KICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAwIHx8IChmbHVzaCAhPSBaX05PX0ZMVVNIICYmCiAgICAgICAgICAgICAoZmx1c2ggIT0gWl9GSU5JU0ggfHwgcmV0ID09IFpfU1RSRUFNX0VORCkpKSB7Ci0gICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKShzdHJtLT5uZXh0X291dCAtIHN0YXRlLT5uZXh0KTsKLSAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+bmV4dCwgaGF2ZSkpIDwgMCB8fAorICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5uZXh0KTsKKyAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+eC5uZXh0LCBoYXZlKSkgPCAwIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWdvdCAhPSBoYXZlKSkgewogICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtODUsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKICAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OwogICAgICAgICB9CiAKICAgICAgICAgLyogY29tcHJlc3MgKi8KQEAgLTEzMSw3ICsxNTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gbjsKICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBsZW4gLT0gbjsKQEAgLTE0Niw3ICsxNjgsNiBAQAogICAgIHVuc2lnbmVkIGxlbjsKIHsKICAgICB1bnNpZ25lZCBwdXQgPSBsZW47Ci0gICAgdW5zaWduZWQgbjsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgel9zdHJlYW1wIHN0cm07CiAKQEAgLTE2Myw3ICsxODQsNyBAQAogICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgogICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIHRoZSBmbGF3IGluIHRoZSBpbnRlcmZhY2UpICovCiAgICAgaWYgKChpbnQpbGVuIDwgMCkgewotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE4NiwxNiArMjA3LDE5IEBACiAgICAgaWYgKGxlbiA8IHN0YXRlLT5zaXplKSB7CiAgICAgICAgIC8qIGNvcHkgdG8gaW5wdXQgYnVmZmVyLCBjb21wcmVzcyB3aGVuIGZ1bGwgKi8KICAgICAgICAgZG8geworICAgICAgICAgICAgdW5zaWduZWQgaGF2ZSwgY29weTsKKwogICAgICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgICAgIG4gPSBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBsZW4pCi0gICAgICAgICAgICAgICAgbiA9IGxlbjsKLSAgICAgICAgICAgIG1lbWNweShzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4sIGJ1Ziwgbik7Ci0gICAgICAgICAgICBzdHJtLT5hdmFpbF9pbiArPSBuOwotICAgICAgICAgICAgc3RhdGUtPnBvcyArPSBuOwotICAgICAgICAgICAgYnVmID0gKGNoYXIgKilidWYgKyBuOwotICAgICAgICAgICAgbGVuIC09IG47CisgICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKSgoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luKSAtIHN0YXRlLT5pbik7CisgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPnNpemUgLSBoYXZlOworICAgICAgICAgICAgaWYgKGNvcHkgPiBsZW4pCisgICAgICAgICAgICAgICAgY29weSA9IGxlbjsKKyAgICAgICAgICAgIG1lbWNweShzdGF0ZS0+aW4gKyBoYXZlLCBidWYsIGNvcHkpOworICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gY29weTsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBjb3B5OworICAgICAgICAgICAgYnVmID0gKGNvbnN0IGNoYXIgKilidWYgKyBjb3B5OworICAgICAgICAgICAgbGVuIC09IGNvcHk7CiAgICAgICAgICAgICBpZiAobGVuICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IHdoaWxlIChsZW4pOwpAQCAtMjA3LDggKzIzMSw4IEBACiAKICAgICAgICAgLyogZGlyZWN0bHkgY29tcHJlc3MgdXNlciBidWZmZXIgdG8gZmlsZSAqLwogICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlbjsKLSAgICAgICAgc3RybS0+bmV4dF9pbiA9ICh2b2lkcClidWY7Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgICAgICBzdHJtLT5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilidWY7CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIyMiw2ICsyNDYsNyBAQAogICAgIGd6RmlsZSBmaWxlOwogICAgIGludCBjOwogeworICAgIHVuc2lnbmVkIGhhdmU7CiAgICAgdW5zaWduZWQgY2hhciBidWZbMV07CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwpAQCAtMjQ1LDE5ICsyNzAsMjMgQEAKIAogICAgIC8qIHRyeSB3cml0aW5nIHRvIGlucHV0IGJ1ZmZlciBmb3Igc3BlZWQgKHN0YXRlLT5zaXplID09IDAgaWYgYnVmZmVyIG5vdAogICAgICAgIGluaXRpYWxpemVkKSAqLwotICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IHN0YXRlLT5zaXplKSB7CisgICAgaWYgKHN0YXRlLT5zaXplKSB7CiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQogICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgc3RybS0+bmV4dF9pbltzdHJtLT5hdmFpbF9pbisrXSA9IGM7Ci0gICAgICAgIHN0YXRlLT5wb3MrKzsKLSAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKChzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4pIC0gc3RhdGUtPmluKTsKKyAgICAgICAgaWYgKGhhdmUgPCBzdGF0ZS0+c2l6ZSkgeworICAgICAgICAgICAgc3RhdGUtPmluW2hhdmVdID0gYzsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luKys7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgICAgIHJldHVybiBjICYgMHhmZjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qIG5vIHJvb20gaW4gYnVmZmVyIG9yIG5vdCBpbml0aWFsaXplZCwgdXNlIGd6X3dyaXRlKCkgKi8KICAgICBidWZbMF0gPSBjOwogICAgIGlmIChnendyaXRlKGZpbGUsIGJ1ZiwgMSkgIT0gMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBjOworICAgIHJldHVybiBjICYgMHhmZjsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtMjc0LDE2ICszMDMsMTUgQEAKICAgICByZXR1cm4gcmV0ID09IDAgJiYgbGVuICE9IDAgPyAtMSA6IHJldDsKIH0KIAotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCitpbnQgWkVYUE9SVFZBIGd6dnByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIGludCBzaXplLCBsZW47CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwotICAgIHZhX2xpc3QgdmE7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCiAgICAgaWYgKGZpbGUgPT0gTlVMTCkKQEAgLTMxMywyNSArMzQxLDIwIEBACiAgICAgLyogZG8gdGhlIHByaW50ZigpIGludG8gdGhlIGlucHV0IGJ1ZmZlciwgcHV0IGxlbmd0aCBpbiBsZW4gKi8KICAgICBzaXplID0gKGludCkoc3RhdGUtPnNpemUpOwogICAgIHN0YXRlLT5pbltzaXplIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwogI2lmZGVmIE5PX3ZzbnByaW50ZgogIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7CisgICAgKHZvaWQpdnNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCB2YSk7CiAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplOyBsZW4rKykKICAgICAgICAgaWYgKHN0YXRlLT5pbltsZW5dID09IDApIGJyZWFrOwogIyAgZWxzZQotICAgIGxlbiA9IHZzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKKyAgICBsZW4gPSB2c3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIHZhKTsKICMgIGVuZGlmCiAjZWxzZQogIyAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBsZW4gPSBzdHJsZW4oc3RhdGUtPmluKTsKKyAgICAodm9pZCl2c25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCB2YSk7CisgICAgbGVuID0gc3RybGVuKChjaGFyICopKHN0YXRlLT5pbikpOwogIyAgZWxzZQogICAgIGxlbiA9IHZzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0zNDIsMTEgKzM2NSwyMiBAQAogICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBkZWZlciBjb21wcmVzc2lvbiB1bnRpbCBuZWVkZWQgKi8KICAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZClsZW47CiAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwogICAgIHJldHVybiBsZW47CiB9CiAKLSNlbHNlIC8qICFTVERDICovCitpbnQgWkVYUE9SVFZBIGd6cHJpbnRmKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IHZhOworICAgIGludCByZXQ7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICByZXQgPSBnenZwcmludGYoZmlsZSwgZm9ybWF0LCB2YSk7CisgICAgdmFfZW5kKHZhKTsKKyAgICByZXR1cm4gcmV0OworfQorCisjZWxzZSAvKiAhU1REQyAmJiAhWl9IQVZFX1NUREFSR19IICovCiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLApAQCAtMzY2LDYgKzQwMCwxMCBAQAogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAorICAgIC8qIGNoZWNrIHRoYXQgY2FuIHJlYWxseSBwYXNzIHBvaW50ZXIgaW4gaW50cyAqLworICAgIGlmIChzaXplb2YoaW50KSAhPSBzaXplb2Yodm9pZCAqKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzkwLDIyICs0MjgsMjMgQEAKICAgICBzdGF0ZS0+aW5bc2l6ZSAtIDFdID0gMDsKICNpZmRlZiBOT19zbnByaW50ZgogIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICBzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAogICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKQogICAgICAgICBpZiAoc3RhdGUtPmluW2xlbl0gPT0gMCkgYnJlYWs7CiAjICBlbHNlCi0gICAgbGVuID0gc3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgbGVuID0gc3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CiAjICBlbmRpZgogI2Vsc2UKICMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgc25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICBzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihzdGF0ZS0+aW4pOworICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKShzdGF0ZS0+aW4pKTsKICMgIGVsc2UKLSAgICBsZW4gPSBzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGxlbiA9IHNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwKKyAgICAgICAgICAgICAgICAgICBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LAorICAgICAgICAgICAgICAgICAgIGExOSwgYTIwKTsKICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtNDE2LDcgKzQ1NSw3IEBACiAgICAgLyogdXBkYXRlIGJ1ZmZlciBhbmQgcG9zaXRpb24sIGRlZmVyIGNvbXByZXNzaW9uIHVudGlsIG5lZWRlZCAqLwogICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKWxlbjsKICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgcmV0dXJuIGxlbjsKIH0KIApAQCAtNTAwLDcgKzUzOSw3IEBACiBpbnQgWkVYUE9SVCBnemNsb3NlX3coZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKLSAgICBpbnQgcmV0ID0gMDsKKyAgICBpbnQgcmV0ID0gWl9PSzsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCkBAIC01MTUsMTcgKzU1NCwyNCBAQAogICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KICAgICBpZiAoc3RhdGUtPnNlZWspIHsKICAgICAgICAgc3RhdGUtPnNlZWsgPSAwOwotICAgICAgICByZXQgKz0gZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0ID0gc3RhdGUtPmVycjsKICAgICB9CiAKICAgICAvKiBmbHVzaCwgZnJlZSBtZW1vcnksIGFuZCBjbG9zZSBmaWxlICovCi0gICAgcmV0ICs9IGd6X2NvbXAoc3RhdGUsIFpfRklOSVNIKTsKLSAgICAodm9pZClkZWZsYXRlRW5kKCYoc3RhdGUtPnN0cm0pKTsKLSAgICBmcmVlKHN0YXRlLT5vdXQpOwotICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpID09IC0xKQorICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgfQogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKLSAgICByZXQgKz0gY2xvc2Uoc3RhdGUtPmZkKTsKKyAgICBpZiAoY2xvc2Uoc3RhdGUtPmZkKSA9PSAtMSkKKyAgICAgICAgcmV0ID0gWl9FUlJOTzsKICAgICBmcmVlKHN0YXRlKTsKLSAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IFpfT0s7CisgICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZiYWNrLmMgYi9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCmluZGV4IGFmM2E4YzkuLmYzODMzYzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKKysrIGIvTW9kdWxlcy96bGliL2luZmJhY2suYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmJhY2suYyAtLSBpbmZsYXRlIHVzaW5nIGEgY2FsbC1iYWNrIGludGVyZmFjZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQyLDEwICs0MiwxOSBAQAogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOyAgICAgICAgICAgICAgICAgLyogaW4gY2FzZSB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilaQUxMT0Moc3RybSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwpAQCAtMjQ2LDcgKzI1NSw3IEBACiB2b2lkIEZBUiAqb3V0X2Rlc2M7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBoYXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLwpAQCAtMzk0LDcgKzQwMyw2IEBACiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmZhc3QuYyBiL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKaW5kZXggMmYxZDYwYi4uYmRhNTljZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmZhc3QuYworKysgYi9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mZmFzdC5jIC0tIGZhc3QgZGVjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA4LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA4LCAyMDEwLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC02OSw4ICs2OSw4IEBACiB1bnNpZ25lZCBzdGFydDsgICAgICAgICAvKiBpbmZsYXRlKCkncyBzdGFydGluZyB2YWx1ZSBmb3Igc3RybS0+YXZhaWxfb3V0ICovCiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqaW47ICAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9pbiAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpsYXN0OyAgICAvKiB3aGlsZSBpbiA8IGxhc3QsIGVub3VnaCBpbnB1dCBhdmFpbGFibGUgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICppbjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbGFzdDsgICAgLyogaGF2ZSBlbm91Z2ggaW5wdXQgd2hpbGUgaW4gPCBsYXN0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKm91dDsgICAgIC8qIGxvY2FsIHN0cm0tPm5leHRfb3V0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKmJlZzsgICAgIC8qIGluZmxhdGUoKSdzIGluaXRpYWwgc3RybS0+bmV4dF9vdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kOyAgICAgLyogd2hpbGUgb3V0IDwgZW5kLCBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaCBiL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCmluZGV4IDc1ZWQ0YjUuLmQ2MjgzMjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCisrKyBiL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCkBAIC0yLDkgKzIsOSBAQAogICAgICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG1ha2VmaXhlZCgpLgogICAgICAqLwogCi0gICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQKLSAgICAgICBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQKLSAgICAgICBpcyBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4KKyAgICAgICBJdCBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxpYnJhcnkgYW5kIGlzCisgICAgICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgogICAgICAqLwogCiAgICAgc3RhdGljIGNvbnN0IGNvZGUgbGVuZml4WzUxMl0gPSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jIGIvTW9kdWxlcy96bGliL2luZmxhdGUuYwppbmRleCBhODQzMWFiLi44NzBmODliIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRlLmMgLS0gemxpYiBkZWNvbXByZXNzaW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOTMsMTQgKzkzLDE1IEBACiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIGxvY2FsIHZvaWQgZml4ZWR0YWJsZXMgT0YoKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGUpKTsKLWxvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBvdXQpKTsKK2xvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29weSkpOwogI2lmZGVmIEJVSUxERklYRUQKICAgIHZvaWQgbWFrZWZpeGVkIE9GKCh2b2lkKSk7CiAjZW5kaWYKLWxvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKK2xvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbikpOwogCi1pbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQoc3RybSkKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAoc3RybSkKIHpfc3RyZWFtcCBzdHJtOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CkBAIC0xMDksMTUgKzExMCwxMyBAQAogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIHN0cm0tPnRvdGFsX2luID0gc3RybS0+dG90YWxfb3V0ID0gc3RhdGUtPnRvdGFsID0gMDsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7Ci0gICAgc3RybS0+YWRsZXIgPSAxOyAgICAgICAgLyogdG8gc3VwcG9ydCBpbGwtY29uY2VpdmVkIEphdmEgdGVzdCBzdWl0ZSAqLworICAgIGlmIChzdGF0ZS0+d3JhcCkgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KKyAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+d3JhcCAmIDE7CiAgICAgc3RhdGUtPm1vZGUgPSBIRUFEOwogICAgIHN0YXRlLT5sYXN0ID0gMDsKICAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAwOwogICAgIHN0YXRlLT5kbWF4ID0gMzI3NjhVOwogICAgIHN0YXRlLT5oZWFkID0gWl9OVUxMOwotICAgIHN0YXRlLT53c2l6ZSA9IDA7Ci0gICAgc3RhdGUtPndoYXZlID0gMDsKLSAgICBzdGF0ZS0+d25leHQgPSAwOwogICAgIHN0YXRlLT5ob2xkID0gMDsKICAgICBzdGF0ZS0+Yml0cyA9IDA7CiAgICAgc3RhdGUtPmxlbmNvZGUgPSBzdGF0ZS0+ZGlzdGNvZGUgPSBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKQEAgLTEyNyw2ICsxMjYsMTkgQEAKICAgICByZXR1cm4gWl9PSzsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0KHN0cm0pCit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIHN0YXRlLT53c2l6ZSA9IDA7CisgICAgc3RhdGUtPndoYXZlID0gMDsKKyAgICBzdGF0ZS0+d25leHQgPSAwOworICAgIHJldHVybiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpCiB6X3N0cmVhbXAgc3RybTsKIGludCB3aW5kb3dCaXRzOwpAQCAtMTgwLDEwICsxOTIsMTkgQEAKICAgICBpZiAoc3RybSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKikKICAgICAgICAgICAgIFpBTExPQyhzdHJtLCAxLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CkBAIC0zMjEsOCArMzQyLDggQEAKICAgICBsb3cgPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKChsb3cgJSA3KSA9PSAwKSBwcmludGYoIlxuICAgICAgICAiKTsKLSAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9Iiwgc3RhdGUubGVuY29kZVtsb3ddLm9wLCBzdGF0ZS5sZW5jb2RlW2xvd10uYml0cywKLSAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOworICAgICAgICBwcmludGYoInsldSwldSwlZH0iLCAobG93ICYgMTI3KSA9PSA5OSA/IDY0IDogc3RhdGUubGVuY29kZVtsb3ddLm9wLAorICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZVtsb3ddLmJpdHMsIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOwogICAgICAgICBpZiAoKytsb3cgPT0gc2l6ZSkgYnJlYWs7CiAgICAgICAgIHB1dGNoYXIoJywnKTsKICAgICB9CkBAIC0zNTUsMTIgKzM3NiwxMyBAQAogICAgb3V0cHV0IHdpbGwgZmFsbCBpbiB0aGUgb3V0cHV0IGRhdGEsIG1ha2luZyBtYXRjaCBjb3BpZXMgc2ltcGxlciBhbmQgZmFzdGVyLgogICAgVGhlIGFkdmFudGFnZSBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3IncyBkYXRhIGNhY2hlcy4KICAqLwotbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpCitsb2NhbCBpbnQgdXBkYXRld2luZG93KHN0cm0sIGVuZCwgY29weSkKIHpfc3RyZWFtcCBzdHJtOwotdW5zaWduZWQgb3V0OworY29uc3QgQnl0ZWYgKmVuZDsKK3Vuc2lnbmVkIGNvcHk7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjb3B5LCBkaXN0OworICAgIHVuc2lnbmVkIGRpc3Q7CiAKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKIApAQCAtMzgwLDE5ICs0MDIsMTggQEAKICAgICB9CiAKICAgICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi8KLSAgICBjb3B5ID0gb3V0IC0gc3RybS0+YXZhaWxfb3V0OwogICAgIGlmIChjb3B5ID49IHN0YXRlLT53c2l6ZSkgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPndzaXplLCBzdGF0ZS0+d3NpemUpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIHN0YXRlLT53c2l6ZSwgc3RhdGUtPndzaXplKTsKICAgICAgICAgc3RhdGUtPnduZXh0ID0gMDsKICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZGlzdCA9IHN0YXRlLT53c2l6ZSAtIHN0YXRlLT53bmV4dDsKICAgICAgICAgaWYgKGRpc3QgPiBjb3B5KSBkaXN0ID0gY29weTsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBzdHJtLT5uZXh0X291dCAtIGNvcHksIGRpc3QpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIGVuZCAtIGNvcHksIGRpc3QpOwogICAgICAgICBjb3B5IC09IGRpc3Q7CiAgICAgICAgIGlmIChjb3B5KSB7Ci0gICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIHN0cm0tPm5leHRfb3V0IC0gY29weSwgY29weSk7CisgICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIGNvcHksIGNvcHkpOwogICAgICAgICAgICAgc3RhdGUtPnduZXh0ID0gY29weTsKICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKICAgICAgICAgfQpAQCAtNDk5LDExICs1MjAsNiBAQAogICAgICAgICBiaXRzIC09IGJpdHMgJiA3OyBcCiAgICAgfSB3aGlsZSAoMCkKIAotLyogUmV2ZXJzZSB0aGUgYnl0ZXMgaW4gYSAzMi1iaXQgdmFsdWUgKi8KLSNkZWZpbmUgUkVWRVJTRShxKSBcCi0gICAgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAotICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKLQogLyoKICAgIGluZmxhdGUoKSB1c2VzIGEgc3RhdGUgbWFjaGluZSB0byBwcm9jZXNzIGFzIG11Y2ggaW5wdXQgZGF0YSBhbmQgZ2VuZXJhdGUgYXMKICAgIG11Y2ggb3V0cHV0IGRhdGEgYXMgcG9zc2libGUgYmVmb3JlIHJldHVybmluZy4gIFRoZSBzdGF0ZSBtYWNoaW5lIGlzCkBAIC01OTEsNyArNjA3LDcgQEAKIGludCBmbHVzaDsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGhhdmUsIGxlZnQ7ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCkBAIC03OTcsNyArODEzLDcgQEAKICNlbmRpZgogICAgICAgICBjYXNlIERJQ1RJRDoKICAgICAgICAgICAgIE5FRURCSVRTKDMyKTsKLSAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gUkVWRVJTRShob2xkKTsKKyAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gWlNXQVAzMihob2xkKTsKICAgICAgICAgICAgIElOSVRCSVRTKCk7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IERJQ1Q7CiAgICAgICAgIGNhc2UgRElDVDoKQEAgLTkwNSw3ICs5MjEsNyBAQAogICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgMTkpCiAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbb3JkZXJbc3RhdGUtPmhhdmUrK11dID0gMDsKICAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwotICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA3OwogICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUtPmxlbnMsIDE5LCAmKHN0YXRlLT5uZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTkyNSw3ICs5NDEsNiBAQAogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgewotICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOwogICAgICAgICAgICAgICAgIH0KQEAgLTk4MCw3ICs5OTUsNyBAQAogICAgICAgICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAogICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgRU5PVUdIIGNvbnN0YW50cywgd2hpY2ggZGVwZW5kIG9uIHRob3NlIHZhbHVlcyAqLwogICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCBzdGF0ZS0+bmxlbiwgJihzdGF0ZS0+bmV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC05ODksNyArMTAwNCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+ZGlzdGNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmRpc3Rjb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5kaXN0Yml0cyA9IDY7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS0+bGVucyArIHN0YXRlLT5ubGVuLCBzdGF0ZS0+bmRpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bmV4dCksICYoc3RhdGUtPmRpc3RiaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtMTE3MCw3ICsxMTg1LDcgQEAKICNpZmRlZiBHVU5aSVAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5mbGFncyA/IGhvbGQgOgogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICBSRVZFUlNFKGhvbGQpKSAhPSBzdGF0ZS0+Y2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgIFpTV0FQMzIoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykgewogICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTQsOCArMTIyOSw5IEBACiAgICAgICovCiAgIGluZl9sZWF2ZToKICAgICBSRVNUT1JFKCk7Ci0gICAgaWYgKHN0YXRlLT53c2l6ZSB8fCAoc3RhdGUtPm1vZGUgPCBDSEVDSyAmJiBvdXQgIT0gc3RybS0+YXZhaWxfb3V0KSkKLSAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpKSB7CisgICAgaWYgKHN0YXRlLT53c2l6ZSB8fCAob3V0ICE9IHN0cm0tPmF2YWlsX291dCAmJiBzdGF0ZS0+bW9kZSA8IEJBRCAmJgorICAgICAgICAgICAgKHN0YXRlLT5tb2RlIDwgQ0hFQ0sgfHwgZmx1c2ggIT0gWl9GSU5JU0gpKSkKKyAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLT5uZXh0X291dCwgb3V0IC0gc3RybS0+YXZhaWxfb3V0KSkgewogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CiAgICAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgIH0KQEAgLTEyNDksMTMgKzEyNjUsMzcgQEAKICAgICByZXR1cm4gWl9PSzsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZUdldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKK3pfc3RyZWFtcCBzdHJtOworQnl0ZWYgKmRpY3Rpb25hcnk7Cit1SW50ICpkaWN0TGVuZ3RoOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICAvKiBjaGVjayBzdGF0ZSAqLworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKworICAgIC8qIGNvcHkgZGljdGlvbmFyeSAqLworICAgIGlmIChzdGF0ZS0+d2hhdmUgJiYgZGljdGlvbmFyeSAhPSBaX05VTEwpIHsKKyAgICAgICAgem1lbWNweShkaWN0aW9uYXJ5LCBzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LAorICAgICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSAtIHN0YXRlLT53bmV4dCk7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSArIHN0YXRlLT53aGF2ZSAtIHN0YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2luZG93LCBzdGF0ZS0+d25leHQpOworICAgIH0KKyAgICBpZiAoZGljdExlbmd0aCAhPSBaX05VTEwpCisgICAgICAgICpkaWN0TGVuZ3RoID0gc3RhdGUtPndoYXZlOworICAgIHJldHVybiBaX09LOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQogel9zdHJlYW1wIHN0cm07CiBjb25zdCBCeXRlZiAqZGljdGlvbmFyeTsKIHVJbnQgZGljdExlbmd0aDsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGxvbmcgaWQ7CisgICAgdW5zaWduZWQgbG9uZyBkaWN0aWQ7CisgICAgaW50IHJldDsKIAogICAgIC8qIGNoZWNrIHN0YXRlICovCiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwpAQCAtMTI2MywyOSArMTMwMywyMSBAQAogICAgIGlmIChzdGF0ZS0+d3JhcCAhPSAwICYmIHN0YXRlLT5tb2RlICE9IERJQ1QpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAotICAgIC8qIGNoZWNrIGZvciBjb3JyZWN0IGRpY3Rpb25hcnkgaWQgKi8KKyAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkZW50aWZpZXIgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gRElDVCkgewotICAgICAgICBpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgIGlkID0gYWRsZXIzMihpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7Ci0gICAgICAgIGlmIChpZCAhPSBzdGF0ZS0+Y2hlY2spCisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKKyAgICAgICAgaWYgKGRpY3RpZCAhPSBzdGF0ZS0+Y2hlY2spCiAgICAgICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOwogICAgIH0KIAotICAgIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cgKi8KLSAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0tPmF2YWlsX291dCkpIHsKKyAgICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93IHVzaW5nIHVwZGF0ZXdpbmRvdygpLCB3aGljaCB3aWxsIGFtZW5kIHRoZQorICAgICAgIGV4aXN0aW5nIGRpY3Rpb25hcnkgaWYgYXBwcm9wcmlhdGUgKi8KKyAgICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSArIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpOworICAgIGlmIChyZXQpIHsKICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9Ci0gICAgaWYgKGRpY3RMZW5ndGggPiBzdGF0ZS0+d3NpemUpIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBkaWN0aW9uYXJ5ICsgZGljdExlbmd0aCAtIHN0YXRlLT53c2l6ZSwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+d3NpemUpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d3NpemUgLSBkaWN0TGVuZ3RoLCBkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgIGRpY3RMZW5ndGgpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBkaWN0TGVuZ3RoOwotICAgIH0KICAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAxOwogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBkaWN0aW9uYXJ5IHNldFxuIikpOwogICAgIHJldHVybiBaX09LOwpAQCAtMTMyMSw3ICsxMzUzLDcgQEAKICAqLwogbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaChoYXZlLCBidWYsIGxlbikKIHVuc2lnbmVkIEZBUiAqaGF2ZTsKLXVuc2lnbmVkIGNoYXIgRkFSICpidWY7Citjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwogdW5zaWduZWQgbGVuOwogewogICAgIHVuc2lnbmVkIGdvdDsKQEAgLTE0MzMsOCArMTQ2NSw4IEBACiAgICAgfQogCiAgICAgLyogY29weSBzdGF0ZSAqLwotICAgIHptZW1jcHkoZGVzdCwgc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKLSAgICB6bWVtY3B5KGNvcHksIHN0YXRlLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOworICAgIHptZW1jcHkoKHZvaWRwZiljb3B5LCAodm9pZHBmKXN0YXRlLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUtPmxlbmNvZGUgPj0gc3RhdGUtPmNvZGVzICYmCiAgICAgICAgIHN0YXRlLT5sZW5jb2RlIDw9IHN0YXRlLT5jb2RlcyArIEVOT1VHSCAtIDEpIHsKICAgICAgICAgY29weS0+bGVuY29kZSA9IGNvcHktPmNvZGVzICsgKHN0YXRlLT5sZW5jb2RlIC0gc3RhdGUtPmNvZGVzKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKaW5kZXggMTFlOWM1Mi4uNDRkODljZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKKysrIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZ0cmVlcy5jIC0tIGdlbmVyYXRlIEh1ZmZtYW4gdHJlZXMgZm9yIGVmZmljaWVudCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIE1BWEJJVFMgMTUKIAogY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgaW5mbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIE1hcmsgQWRsZXIgIjsKKyAgICIgaW5mbGF0ZSAxLjIuOCBDb3B5cmlnaHQgMTk5NS0yMDEzIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMH07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxleHRbMzFdID0geyAvKiBMZW5ndGggY29kZXMgMjU3Li4yODUgZXh0cmEgKi8KICAgICAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsCi0gICAgICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MywgMTk1fTsKKyAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OH07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRiYXNlWzMyXSA9IHsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqLwogICAgICAgICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsCiAgICAgICAgIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywgNDA5NywgNjE0NSwKQEAgLTIwOCw4ICsyMDgsOCBAQAogICAgIG1hc2sgPSB1c2VkIC0gMTsgICAgICAgICAgICAvKiBtYXNrIGZvciBjb21wYXJpbmcgbG93ICovCiAKICAgICAvKiBjaGVjayBhdmFpbGFibGUgdGFibGUgc3BhY2UgKi8KLSAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSF9MRU5TKSB8fAotICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAvKiBwcm9jZXNzIGFsbCBjb2RlcyBhbmQgbWFrZSB0YWJsZSBlbnRyaWVzICovCkBAIC0yNzcsOCArMjc3LDggQEAKIAogICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLwogICAgICAgICAgICAgdXNlZCArPSAxVSA8PCBjdXJyOwotICAgICAgICAgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0hfTEVOUykgfHwKLSAgICAgICAgICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgICAgICAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8CisgICAgICAgICAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgICAgIC8qIHBvaW50IGVudHJ5IGluIHJvb3QgdGFibGUgdG8gc3ViLXRhYmxlICovCkBAIC0yODksMzggKzI4OSwxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoKLSAgICAgICBGaWxsIGluIHJlc3Qgb2YgdGFibGUgZm9yIGluY29tcGxldGUgY29kZXMuICBUaGlzIGxvb3AgaXMgc2ltaWxhciB0byB0aGUKLSAgICAgICBsb29wIGFib3ZlIGluIGluY3JlbWVudGluZyBodWZmIGZvciB0YWJsZSBpbmRpY2VzLiAgSXQgaXMgYXNzdW1lZCB0aGF0Ci0gICAgICAgbGVuIGlzIGVxdWFsIHRvIGN1cnIgKyBkcm9wLCBzbyB0aGVyZSBpcyBubyBsb29wIG5lZWRlZCB0byBpbmNyZW1lbnQKLSAgICAgICB0aHJvdWdoIGhpZ2ggaW5kZXggYml0cy4gIFdoZW4gdGhlIGN1cnJlbnQgc3ViLXRhYmxlIGlzIGZpbGxlZCwgdGhlIGxvb3AKLSAgICAgICBkcm9wcyBiYWNrIHRvIHRoZSByb290IHRhYmxlIHRvIGZpbGwgaW4gYW55IHJlbWFpbmluZyBlbnRyaWVzIHRoZXJlLgotICAgICAqLwotICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcik2NDsgICAgICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLwotICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKLSAgICBoZXJlLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkwOwotICAgIHdoaWxlIChodWZmICE9IDApIHsKLSAgICAgICAgLyogd2hlbiBkb25lIHdpdGggc3ViLXRhYmxlLCBkcm9wIGJhY2sgdG8gcm9vdCB0YWJsZSAqLwotICAgICAgICBpZiAoZHJvcCAhPSAwICYmIChodWZmICYgbWFzaykgIT0gbG93KSB7Ci0gICAgICAgICAgICBkcm9wID0gMDsKLSAgICAgICAgICAgIGxlbiA9IHJvb3Q7Ci0gICAgICAgICAgICBuZXh0ID0gKnRhYmxlOwotICAgICAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpbGVuOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogcHV0IGludmFsaWQgY29kZSBtYXJrZXIgaW4gdGFibGUgKi8KLSAgICAgICAgbmV4dFtodWZmID4+IGRyb3BdID0gaGVyZTsKLQotICAgICAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqLwotICAgICAgICBpbmNyID0gMVUgPDwgKGxlbiAtIDEpOwotICAgICAgICB3aGlsZSAoaHVmZiAmIGluY3IpCi0gICAgICAgICAgICBpbmNyID4+PSAxOwotICAgICAgICBpZiAoaW5jciAhPSAwKSB7Ci0gICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwotICAgICAgICAgICAgaHVmZiArPSBpbmNyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGh1ZmYgPSAwOworICAgIC8qIGZpbGwgaW4gcmVtYWluaW5nIHRhYmxlIGVudHJ5IGlmIGNvZGUgaXMgaW5jb21wbGV0ZSAoZ3VhcmFudGVlZCB0byBoYXZlCisgICAgICAgYXQgbW9zdCBvbmUgcmVtYWluaW5nIGVudHJ5LCBzaW5jZSBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRlLCB0aGUKKyAgICAgICBtYXhpbXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovCisgICAgaWYgKGh1ZmYgIT0gMCkgeworICAgICAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLworICAgICAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7CisgICAgICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7CisgICAgICAgIG5leHRbaHVmZl0gPSBoZXJlOwogICAgIH0KIAogICAgIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmggYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaAppbmRleCAyNDIzMGM1Li5iYWE1M2EwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaAorKysgYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaApAQCAtNDEsNyArNDEsNyBAQAogICAgZXhhbXBsZXMvZW5vdWdoLmMgZm91bmQgaW4gdGhlIHpsaWIgZGlzdHJpYnR1dGlvbi4gIFRoZSBhcmd1bWVudHMgdG8gdGhhdAogICAgcHJvZ3JhbSBhcmUgdGhlIG51bWJlciBvZiBzeW1ib2xzLCB0aGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUsIGFuZCB0aGUKICAgIG1heGltdW0gYml0IGxlbmd0aCBvZiBhIGNvZGUuICAiZW5vdWdoIDI4NiA5IDE1IiBmb3IgbGl0ZXJhbC9sZW5ndGggY29kZXMKLSAgIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCisgICByZXR1cm5zIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCiAgICBUaGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUgKDkgb3IgNikgaXMgZm91bmQgaW4gdGhlIGZpZnRoIGFyZ3VtZW50IG9mIHRoZQogICAgaW5mbGF0ZV90YWJsZSgpIGNhbGxzIGluIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jLiAgSWYgdGhlIHJvb3QgdGFibGUgc2l6ZSBpcwogICAgY2hhbmdlZCwgdGhlbiB0aGVzZSBtYXhpbXVtIHNpemVzIHdvdWxkIGJlIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkIGFuZApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbSBiL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KaW5kZXggNjU3NjQ5MC4uNjVlOWQwYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQorKysgYi9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCkBAIC0zLDcgKzMsNyBAQAogJCEKICQhIEluIGNhc2Ugb2YgcHJvYmxlbXMgd2l0aCB0aGUgaW5zdGFsbCB5b3UgbWlnaHQgY29udGFjdCBtZSBhdAogJCEgemluc2VyQHppbnNlci5uby1pcC5pbmZvKHByZWZlcnJlZCkgb3IKLSQhIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbSAod29yaykKKyQhIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tICh3b3JrKQogJCEKICQhIE1ha2UgcHJvY2VkdXJlIGhpc3RvcnkgZm9yIFpsaWIKICQhCkBAIC0xNCw5ICsxNCwxNiBAQAogJCEgMC4wMyAyMDA5MTIyNCBBZGQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZSBjaGVjawogJCEgMC4wNCAyMDEwMDExMCBBZGQgbmV3IGd6Y2xvc2UsIGd6bGliLCBnenJlYWQsIGd6d3JpdGUKICQhIDAuMDUgMjAxMDAyMjEgRXhjaGFuZ2UgemxpYmRlZnMuaCBieSB6Y29uZi5oLmluCiskISAwLjA2IDIwMTIwMTExIEZpeCBtaXNzaW5nIGFtaXNzX2VyciwgdXBkYXRlIHpjb25mX2guaW4sIGZpeCBuZXcgZXhtcGxlcworJCEgICAgICAgICAgICAgICBzdWJkaXIgcGF0aCwgdXBkYXRlIG1vZHVsZSBzZWFyY2ggaW4gbWFrZWZpbGUuaW4KKyQhIDAuMDcgMjAxMjAxMTUgVHJpZ2dlcmVkIGJ5IHdvcmsgZG9uZSBieSBBbGV4ZXkgQ2h1cGFoaW4gY29tcGxldGx5IHJlZGVzaWduZWQKKyQhICAgICAgICAgICAgICAgc2hhcmVkIGltYWdlIGNyZWF0aW9uCiskISAwLjA4IDIwMTIwMjE5IE1ha2UgaXQgd29yayBvbiBWQVggYWdhaW4sIHByZS1sb2FkIG1pc3Npbmcgc3ltYm9scyB0byBzaGFyZWQKKyQhICAgICAgICAgICAgICAgaW1hZ2UKKyQhIDAuMDkgMjAxMjAzMDUgU01TLiAgUDEgc2V0cyBidWlsZGVyICgiTU1LIiwgIk1NUyIsICIgIiAoYnVpbHQtaW4pKS4KKyQhICAgICAgICAgICAgICAgIiIgLT4gYXV0b21hdGljLCBwcmVmZXJlbmNlOiBNTUssIE1NUywgYnVpbHQtaW4uCiAkIQogJCBvbiBlcnJvciB0aGVuIGdvdG8gZXJyX2V4aXQKLSQgc2V0IHByb2MvcGFyc2U9ZXh0CiAkIQogJCB0cnVlICA9IDEKICQgZmFsc2UgPSAwCkBAIC0zMiwzMSArMzksNDMgQEAKICQhCiAkISBTZXR1cCB2YXJpYWJsZXMgaG9sZGluZyAiY29uZmlnIiBpbmZvcm1hdGlvbgogJCEKLSQgTWFrZSAgICA9ICIiCiskIE1ha2UgICAgPSAiJydwMSciCiAkIG5hbWUgICAgID0gIlpsaWIiCiAkIHZlcnNpb24gID0gIj8uPy4/IgogJCB2X3N0cmluZyA9ICJaTElCX1ZFUlNJT04iCiAkIHZfZmlsZSAgID0gInpsaWIuaCIKLSQgY2NvcHQgICA9ICIiCiskIGNjb3B0ICAgPSAiL2luY2x1ZGUgPSBbXSIKICQgbG9wdHMgICA9ICIiCiAkIGRuc3JsICAgPSAiIgotJCBhY29uZl9pbl9maWxlID0gInpjb25mLmguaW4jemNvbmYuaF9pbiIKKyQgYWNvbmZfaW5fZmlsZSA9ICJ6Y29uZi5oLmluI3pjb25mLmhfaW4jemNvbmZfaC5pbiIKICQgY29uZl9jaGVja19zdHJpbmcgPSAiIgogJCBsaW5rb25seSA9IGZhbHNlCiAkIG9wdGZpbGUgID0gbmFtZSArICIub3B0IgorJCBtYXBmaWxlICA9IG5hbWUgKyAiLm1hcCIKICQgbGliZGVmcyAgPSAiIgorJCB2YXggICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjEwMjQKICQgYXhwICAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS4xMDI0IC5hbmQuIGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjQwOTYKKyQgaWE2NCAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS40MDk2CiAkIQotJCB3aG9hbWkgPSBmJHBhcnNlKGYkZW52aW9ybm1lbnQoIlByb2NlZHVyZSIpLCwsLCJOT19DT05DRUFMIikKKyQhIDIwMTItMDMtMDUgU01TLgorJCEgV2h5IGlzIHRoaXMgbmVlZGVkPyAgQW5kIGlmIGl0IGlzIG5lZWRlZCwgd2h5IG5vdCBzaW1wbHkgIi5ub3QuIHZheCI/CiskIQorJCEhISBpZiBheHAgLm9yLiBpYTY0IHRoZW4gIHNldCBwcm9jL3BhcnNlPWV4dGVuZGVkCiskIQorJCB3aG9hbWkgPSBmJHBhcnNlKGYkZW52aXJvbm1lbnQoIlByb2NlZHVyZSIpLCwsLCJOT19DT05DRUFMIikKICQgbXlkZWYgID0gRiRwYXJzZSh3aG9hbWksLCwiREVWSUNFIikKICQgbXlkaXIgID0gZiRwYXJzZSh3aG9hbWksLCwiRElSRUNUT1JZIikgLSAiXVsiCiAkIG15cHJvYyA9IGYkcGFyc2Uod2hvYW1pLCwsIk5hbWUiKSArIGYkcGFyc2Uod2hvYW1pLCwsInR5cGUiKQogJCEKICQhIENoZWNrIGZvciBNTUsvTU1TCiAkIQotJCBJZiBGJFNlYXJjaCAoIlN5cyRTeXN0ZW06TU1TLkVYRSIpIC5uZXMuICIiIFRoZW4gTWFrZSA9ICJNTVMiCi0kIElmIEYkVHlwZSAoTU1LKSAuZXFzLiAiU1RSSU5HIiBUaGVuIE1ha2UgPSAiTU1LIgotJCEKKyQgaWYgKE1ha2UgLmVxcy4gIiIpCiskIHRoZW4KKyQgICBJZiBGJFNlYXJjaCAoIlN5cyRTeXN0ZW06TU1TLkVYRSIpIC5uZXMuICIiIFRoZW4gTWFrZSA9ICJNTVMiCiskICAgSWYgRiRUeXBlIChNTUspIC5lcXMuICJTVFJJTkciIFRoZW4gTWFrZSA9ICJNTUsiCiskIGVsc2UKKyQgICBNYWtlID0gZiRlZGl0KCBNYWtlLCAidHJpbSIpCiskIGVuZGlmCiAkIQogJCBnb3N1YiBmaW5kX3ZlcnNpb24KICQhCkBAIC02OSw2ICs4OCw3IEBACiAkIQogJCBnb3N1YiBjaGVja19jb21waWxlcgogJCBjbG9zZSB0b3B0CiskIGNsb3NlIG9wdGYKICQhCiAkIGlmIGl0c19kZWNjCiAkIHRoZW4KQEAgLTgzLDYgKzEwMywxNSBAQAogJCAgICAgICBkZWZpbmUgc3lzIGRlY2MkbGlicmFyeV9pbmNsdWRlOgogJCAgICAgZW5kaWYKICQgICBlbmRpZgorJCEKKyQhIDIwMTItMDMtMDUgU01TLgorJCEgV2h5IC9OQU1FUyA9IEFTX0lTPyAgV2h5IG5vdCBzaW1wbHkgIi5ub3QuIHZheCI/ICBBbmQgd2h5IG5vdCBvbiBWQVg/CiskIQorJCAgIGlmIGF4cCAub3IuIGlhNjQKKyQgICB0aGVuCiskICAgICAgIGNjb3B0ID0gY2NvcHQgKyAiL25hbWU9YXNfaXMvb3B0PShpbmxpbmU9c3BlZWQpIgorJCAgICAgICBzX2Nhc2UgPSB0cnVlCiskICAgZW5kaWYKICQgZW5kaWYKICQgaWYgaXRzX3ZheGMgLm9yLiBpdHNfZ251YwogJCB0aGVuCkBAIC0xMjIsMTUgKzE1MSwyMCBAQAogJCBlbmRpZgogJCBnb3RvIGFjb25mX2xvb3AKICRBQ09ORl9FWElUOgorJCB3cml0ZSBhY29uZiAiIgorJCB3cml0ZSBhY29uZiAiLyogVk1TIHNwZWNpZmljcyBhZGRlZCBieSBtYWtlX3Ztcy5jb206ICovIgogJCB3cml0ZSBhY29uZiAiI2RlZmluZSBWTVMgMSIKICQgd3JpdGUgYWNvbmYgIiNpbmNsdWRlIDx1bmlzdGQuaD4iCiAkIHdyaXRlIGFjb25mICIjaW5jbHVkZSA8dW5peGlvLmg+IgogJCB3cml0ZSBhY29uZiAiI2lmZGVmIF9MQVJHRUZJTEUiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIG9mZjY0X3QgX19vZmY2NF90IgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmb3BlbjY0IGZvcGVuIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmc2Vla282NCBmc2Vla28iCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGxzZWVrNjQgbHNlZWsiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgb2ZmNjRfdCBfX29mZjY0X3QiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmb3BlbjY0IGZvcGVuIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZnNlZWtvNjQgZnNlZWtvIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgbHNlZWs2NCBsc2VlayIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiI2VuZGlmIgorJCB3cml0ZSBhY29uZiAiI2lmICFkZWZpbmVkKCBfX1ZBWCkgJiYgKF9fQ1JUTF9WRVIgPj0gNzAzMTIwMDApIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgSEFWRV9WU05QUklOVEYiCiAkIHdyaXRlIGFjb25mICIjZW5kaWYiCiAkIGNsb3NlIGFjb25mX2luCiAkIGNsb3NlIGFjb25mCkBAIC0xMzksOCArMTczLDkgQEAKICQhCiAkIHdyaXRlIHN5cyRvdXRwdXQgIkNvbXBpbGluZyBabGliIHNvdXJjZXMgLi4uIgogJCBpZiBtYWtlLmVxcy4iIgotJCAgdGhlbgotJCAgIGRlbGUgZXhhbXBsZS5vYmo7KixtaW5pZ3ppcC5vYmo7KgorJCB0aGVuCiskICAgaWYgKGYkc2VhcmNoKCAiZXhhbXBsZS5vYmo7KiIpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSBleGFtcGxlLm9iajsqCiskICAgaWYgKGYkc2VhcmNoKCAibWluaWd6aXAub2JqOyoiKSAubmVzLiAiIikgdGhlbiBkZWxldGUgbWluaWd6aXAub2JqOyoKICQgICBDQUxMIE1BS0UgYWRsZXIzMi5PQkogIkNDICcnQ0NPUFQnIGFkbGVyMzIiIC0KICAgICAgICAgICAgICAgICBhZGxlcjMyLmMgemxpYi5oIHpjb25mLmgKICQgICBDQUxMIE1BS0UgY29tcHJlc3MuT0JKICJDQyAnJ0NDT1BUJyBjb21wcmVzcyIgLQpAQCAtMTc0LDQxICsyMDksMzQgQEAKICQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBabGliIC4uLiIKICQgICBDQUxMIE1BS0UgbGliei5PTEIgImxpYi9jcmVhIGxpYnoub2xiICoub2JqIiAqLk9CSgogJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIGV4YW1wbGUuLi4iCi0kICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBleGFtcGxlIiAtCi0gICAgICAgICAgICAgICAgZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBbLnRlc3RdZXhhbXBsZSIgLQorICAgICAgICAgICAgICAgIFsudGVzdF1leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKICQgICBjYWxsIG1ha2UgZXhhbXBsZS5leGUgIkxJTksgZXhhbXBsZSxsaWJ6Lm9sYi9saWIiIGV4YW1wbGUub2JqIGxpYnoub2xiCi0kICAgaWYgZiRzZWFyY2goIngxMXZtczp4dm1zdXRpbHMub2xiIikgLm5lcy4gIiIKLSQgICB0aGVuCi0kICAgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBtaW5pZ3ppcC4uLiIKLSQgICAgIENBTEwgTUFLRSBtaW5pZ3ppcC5PQkogIkNDICcnQ0NPUFQnIG1pbmlnemlwIiAtCi0gICAgICAgICAgICAgICAgbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAotJCAgICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCi0gICAgICAgICAgICAgICAgIkxJTksgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYiIgLQotICAgICAgICAgICAgICAgIG1pbmlnemlwLm9iaiBsaWJ6Lm9sYgotJCAgIGVuZGlmCi0kICBlbHNlCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgbWluaWd6aXAuLi4iCiskICAgQ0FMTCBNQUtFIG1pbmlnemlwLk9CSiAiQ0MgJydDQ09QVCcgWy50ZXN0XW1pbmlnemlwIiAtCisgICAgICAgICAgICAgIFsudGVzdF1taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCiskICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCisgICAgICAgICAgICAgICJMSU5LIG1pbmlnemlwLGxpYnoub2xiL2xpYiIgLQorICAgICAgICAgICAgICBtaW5pZ3ppcC5vYmogbGliei5vbGIKKyQgZWxzZQogJCAgIGdvc3ViIGNyZWFfbW1zCiAkICAgd3JpdGUgc3lzJG91dHB1dCAiTWFrZSAnJ25hbWUnICcndmVyc2lvbicgd2l0aCAnJ01ha2UnICIKICQgICAnbWFrZScKLSQgIGVuZGlmCi0kIQotJCEgQWxwaGEgZ2V0cyBhIHNoYXJlYWJsZSBpbWFnZQotJCEKLSQgSWYgYXhwCi0kIFRoZW4KLSQgICBnb3N1YiBjcmVhX29saXN0Ci0kICAgd3JpdGUgc3lzJG91dHB1dCAiQ3JlYXRpbmcgbGlienNoci5leGUiCi0kICAgY2FsbCBhbmFsX29ial9heHAgbW9kdWxlcy5vcHQgX2xpbmsub3B0Ci0kICAgaWYgc19jYXNlCi0kICAgdGhlbgotJCAgICAgIG9wZW4vYXBwZW5kIG9wdGYgbW9kdWxlcy5vcHQKLSQgICAgICB3cml0ZSBvcHRmICJjYXNlX3NlbnNpdGl2ZT1ZRVMiCi0kICAgICAgY2xvc2Ugb3B0ZgotJCAgIGVuZGlmCi0kICAgTElOS18nbG9wdHMnL1NIQVJFPWxpYnpzaHIuZXhlIG1vZHVsZXMub3B0L29wdCxfbGluay5vcHQvb3B0CiAkIGVuZGlmCiskIQorJCEgQ3JlYXRlIHNoYXJlYWJsZSBpbWFnZQorJCEKKyQgZ29zdWIgY3JlYV9vbGlzdAorJCB3cml0ZSBzeXMkb3V0cHV0ICJDcmVhdGluZyBsaWJ6c2hyLmV4ZSIKKyQgY2FsbCBtYXBfMl9zaG9wdCAnbWFwZmlsZScgJ29wdGZpbGUnCiskIExJTktfJ2xvcHRzJy9TSEFSRT1saWJ6c2hyLmV4ZSBtb2R1bGVzLm9wdC9vcHQsJ29wdGZpbGUnL29wdAogJCB3cml0ZSBzeXMkb3V0cHV0ICJabGliIGJ1aWxkIGNvbXBsZXRlZCIKKyQgZGVsZXRlL25vbG9nIHRtcC5vcHQ7KgogJCBleGl0CiskQU1JU1NfRVJSOgorJCB3cml0ZSBzeXMkb3V0cHV0ICJObyBzb3VyY2UgZm9yIGNvbmZpZy5oaW4gZm91bmQuIgorJCB3cml0ZSBzeXMkb3V0cHV0ICJUcmllZCBhbnkgb2YgJydhY29uZl9pbl9maWxlJyIKKyQgZ290byBlcnJfZXhpdAogJENDX0VSUjoKICQgd3JpdGUgc3lzJG91dHB1dCAiQyBjb21waWxlciByZXF1aXJlZCB0byBidWlsZCAnJ25hbWUnIgogJCBnb3RvIGVycl9leGl0CkBAIC0yMTYsNyArMjQ0LDYgQEAKICQgc2V0IG1lc3NhZ2UvZmFjaWwvaWRlbnQvc2V2ZXIvdGV4dAogJCBjbG9zZS9ub2xvZyBvcHRmCiAkIGNsb3NlL25vbG9nIHRvcHQKLSQgY2xvc2Uvbm9sb2cgY29uZl9oaW4KICQgY2xvc2Uvbm9sb2cgYWNvbmZfaW4KICQgY2xvc2Uvbm9sb2cgYWNvbmYKICQgY2xvc2Uvbm9sb2cgb3V0CkBAIC0zOTcsNyArNDI0LDcgQEAKICQgZGVjawogIyBkZXNjcmlwLm1tczogTU1TIGRlc2NyaXB0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIHpsaWIgb24gVk1TCiAjIHdyaXR0ZW4gYnkgTWFydGluIFAuSi4gWmluc2VyCi0jIDx6aW5zZXJAemluc2VyLm5vLWlwLmluZm8gb3Igemluc2VyQHN5c2Rldi5kZXV0c2NoZS1ib2Vyc2UuY29tPgorIyA8emluc2VyQHppbnNlci5uby1pcC5pbmZvIG9yIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tPgogCiBPQkpTID0gYWRsZXIzMi5vYmosIGNvbXByZXNzLm9iaiwgY3JjMzIub2JqLCBnemNsb3NlLm9iaiwgZ3psaWIub2JqXAogICAgICAgIGd6cmVhZC5vYmosIGd6d3JpdGUub2JqLCB1bmNvbXByLm9iaiwgaW5mYmFjay5vYmpcCkBAIC00MDcsMTAgKzQzNCw5IEBACiAkIGVvZAogJCB3cml0ZSBvdXQgIkNGTEFHUz0iLCBjY29wdAogJCB3cml0ZSBvdXQgIkxPUFRTPSIsIGxvcHRzCiskIHdyaXRlIG91dCAiYWxsIDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlIGxpYnoub2xiIgogJCBjb3B5IHN5cyRpbnB1dDogb3V0CiAkIGRlY2sKLQotYWxsIDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlIGxpYnoub2xiCiAgICAgICAgIEAgd3JpdGUgc3lzJG91dHB1dCAiIEV4YW1wbGUgYXBwbGljYXRpb25zIGF2YWlsYWJsZSIKIAogbGliei5vbGIgOiBsaWJ6Lm9sYigkKE9CSlMpKQpAQCAtNDIwLDcgKzQ0Niw3IEBACiAgICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgZXhhbXBsZSxsaWJ6Lm9sYi9saWIKIAogbWluaWd6aXAuZXhlIDogbWluaWd6aXAub2JqIGxpYnoub2xiCi0gICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYgorICAgICAgICAgICAgICBsaW5rICQoTE9QVFMpIG1pbmlnemlwLGxpYnoub2xiL2xpYgogCiBjbGVhbiA6CiAJZGVsZXRlICoub2JqOyosbGliei5vbGI7KiwqLm9wdDsqLCouZXhlOyoKQEAgLTQzMSw3ICs0NTcsNyBAQAogY29tcHJlc3Mub2JqIDogY29tcHJlc3MuYyB6bGliLmggemNvbmYuaAogY3JjMzIub2JqICAgIDogY3JjMzIuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBkZWZsYXRlLm9iaiAgOiBkZWZsYXRlLmMgZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKLWV4YW1wbGUub2JqICA6IGV4YW1wbGUuYyB6bGliLmggemNvbmYuaAorZXhhbXBsZS5vYmogIDogWy50ZXN0XWV4YW1wbGUuYyB6bGliLmggemNvbmYuaAogZ3pjbG9zZS5vYmogIDogZ3pjbG9zZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGd6bGliLm9iaiAgICA6IGd6bGliLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogZ3pyZWFkLm9iaiAgIDogZ3pyZWFkLmMgenV0aWwuaCB6bGliLmggemNvbmYuaApAQCAtNDM5LDcgKzQ2NSw3IEBACiBpbmZmYXN0Lm9iaiAgOiBpbmZmYXN0LmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmZhc3QuaAogaW5mbGF0ZS5vYmogIDogaW5mbGF0ZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGluZnRyZWVzLm9iaiA6IGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCi1taW5pZ3ppcC5vYmogOiBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCittaW5pZ3ppcC5vYmogOiBbLnRlc3RdbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAogdHJlZXMub2JqICAgIDogdHJlZXMuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAogdW5jb21wci5vYmogIDogdW5jb21wci5jIHpsaWIuaCB6Y29uZi5oCiB6dXRpbC5vYmogICAgOiB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKQEAgLTQ1NSwxMyArNDgxLDE4IEBACiAkQ1JFQV9PTElTVDoKICQgb3Blbi9yZWFkIG1pbiBtYWtlZmlsZS5pbgogJCBvcGVuL3dyaXRlIG1vZCBtb2R1bGVzLm9wdAotJCBzcmNfY2hlY2sgPSAiT0JKQyA9IgorJCBzcmNfY2hlY2tfbGlzdCA9ICJPQkpaID0jT0JKRyA9IgogJE1STE9PUDoKICQgcmVhZC9lbmQ9bXJkb25lIG1pbiByZWMKLSQgaWYgKGYkZXh0cmFjdCgwLDYscmVjKSAubmVzLiBzcmNfY2hlY2spIHRoZW4gZ290byBtcmxvb3AKKyQgaSA9IDAKKyRTUkNfQ0hFQ0tfTE9PUDoKKyQgc3JjX2NoZWNrID0gZiRlbGVtZW50KGksICIjIiwgc3JjX2NoZWNrX2xpc3QpCiskIGkgPSBpKzEKKyQgaWYgc3JjX2NoZWNrIC5lcXMuICIjIiB0aGVuIGdvdG8gbXJsb29wCiskIGlmIChmJGV4dHJhY3QoMCw2LHJlYykgLm5lcy4gc3JjX2NoZWNrKSB0aGVuIGdvdG8gc3JjX2NoZWNrX2xvb3AKICQgcmVjID0gcmVjIC0gc3JjX2NoZWNrCiAkIGdvc3ViIGV4dHJhX2ZpbG5hbQotJCBpZiAoZiRlbGVtZW50KDEsIlwiLHJlYykgLmVxcy4gIlwiKSB0aGVuIGdvdG8gbXJkb25lCiskIGlmIChmJGVsZW1lbnQoMSwiXCIscmVjKSAuZXFzLiAiXCIpIHRoZW4gZ290byBtcmxvb3AKICRNUlNMT09QOgogJCByZWFkL2VuZD1tcmRvbmUgbWluIHJlYwogJCBnb3N1YiBleHRyYV9maWxuYW0KQEAgLTY3MiwxMjQgKzcwMyw2IEBACiAkIHJldHVybgogJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQhCi0kISBBbmFseXplIE9iamVjdCBmaWxlcyBmb3IgT3BlblZNUyBBWFAgdG8gZXh0cmFjdCBQcm9jZWR1cmUgYW5kIERhdGEKLSQhIGluZm9ybWF0aW9uIHRvIGJ1aWxkIGEgc3ltYm9sIHZlY3RvciBmb3IgYSBzaGFyZWFibGUgaW1hZ2UKLSQhIEFsbCB0aGUgImJyYWlucyIgb2YgdGhpcyBsb2dpYyB3YXMgc3VnZ2VzdGVkIGJ5IEhhcnRtdXQgQmVja2VyCi0kISAoSGFydG11dC5CZWNrZXJAY29tcGFxLmNvbSkuIEFsbCB0aGUgYnVncyB3ZXJlIGludHJvZHVjZWQgYnkgbWUKLSQhICh6aW5zZXJAemluc2VyLm5vLWlwLmluZm8pLCBzbyBpZiB5b3UgZG8gaGF2ZSBwcm9ibGVtIHJlcG9ydHMgcGxlYXNlIGRvIG5vdAotJCEgYm90aGVyIEhhcnRtdXQvSFAsIGJ1dCBnZXQgaW4gdG91Y2ggd2l0aCBtZQotJCEKLSQhIFZlcnNpb24gaGlzdG9yeQotJCEgMC4wMSAyMDA0MDQwNiBTa2lwIG92ZXIgc2hhcmVhYmxlIGltYWdlcyBpbiBvcHRpb24gZmlsZQotJCEgMC4wMiAyMDA0MTEwOSBGaXggb3B0aW9uIGZpbGUgZm9yIHNoYXJlYWJsZSBpbWFnZXMgd2l0aCBjYXNlX3NlbnNpdGl2ZT1ZRVMKLSQhIDAuMDMgMjAwNTAxMDcgU2tpcCBvdmVyIElkZW50aWZpY2F0aW9uIGxhYmVscyBpbiBvcHRpb24gZmlsZQotJCEgMC4wNCAyMDA2MDExNyBBZGQgdXBwZXJjYXNlIGFsaWFzIHRvIGNvZGUgY29tcGlsZWQgd2l0aCAvbmFtZT1hc19pcwotJCEKLSQgQU5BTF9PQkpfQVhQOiBTdWJyb3V0aW5lCi0kIFYgPSAnRiRWZXJpZnkoMCkKLSQgU0FZIDo9ICJXUklURV8gU1lTJE9VVFBVVCIKLSQKLSQgSUYgRiRTRUFSQ0goIicnUDEnIikgLkVRUy4gIiIKLSQgVEhFTgotJCAgICBTQVkgIkFOQUxfT0JKX0FYUC1FLU5PU1VDSEZJTEU6ICBFcnJvciwgaW5wdXRmaWxlICcncDEnIG5vdCBhdmFpbGFibGUiCi0kICAgIGdvdG8gZXhpdF9hYQotJCBFTkRJRgotJCBJRiAiJydQMiciIC5FUVMuICIiCi0kIFRIRU4KLSQgICAgU0FZICJBTkFMX09CSl9BWFA6ICBFcnJvciwgbm8gb3V0cHV0IGZpbGUgcHJvdmlkZWQiCi0kICAgIGdvdG8gZXhpdF9hYQotJCBFTkRJRgotJAotJCBvcGVuL3JlYWQgaW4gJ3AxCi0kIGNyZWF0ZSBhLnRtcAotJCBvcGVuL2FwcGVuZCBhdG1wIGEudG1wCi0kIGxvb3A6Ci0kIHJlYWQvZW5kPWVuZF9sb29wIGluIGxpbmUKLSQgaWYgZiRsb2NhdGUoIi9TSEFSRSIsZiRlZGl0KGxpbmUsInVwY2FzZSIpKSAubHQuIGYkbGVuZ3RoKGxpbmUpCi0kIHRoZW4KLSQgICB3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX1NLUF9TSFItaS1za2lwc2hhcmUsICcnbGluZSciCi0kICAgZ290byBsb29wCi0kIGVuZGlmCi0kIGlmIGYkbG9jYXRlKCJJREVOVElGSUNBVElPTj0iLGYkZWRpdChsaW5lLCJ1cGNhc2UiKSkgLmx0LiBmJGxlbmd0aChsaW5lKQotJCB0aGVuCi0kICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLWktaWRlbnQ6IElkZW50aWZpY2F0aW9uICIsIC0KLSAgICAgICAgICAgICAgICAgICAgIGYkZWxlbWVudCgxLCI9IixsaW5lKQotJCAgIGdvdG8gbG9vcAotJCBlbmRpZgotJCBmPSBmJHNlYXJjaChsaW5lKQotJCBpZiBmIC5lcXMuICIiCi0kIHRoZW4KLSQJd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLXctbm9zdWNoZmlsZSwgJydsaW5lJyIKLSQJZ290byBsb29wCi0kIGVuZGlmCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGRlZmluZS91c2VyIHN5cyRlcnJvciBubDoKLSQgYW5hbC9vYmovZ3NkICdmIC9vdXQ9eC50bXAKLSQgb3Blbi9yZWFkIHh0bXAgeC50bXAKLSQgWExPT1A6Ci0kIHJlYWQvZW5kPWVuZF94bG9vcCB4dG1wIHhsaW5lCi0kIHhsaW5lID0gZiRlZGl0KHhsaW5lLCJjb21wcmVzcyIpCi0kIHdyaXRlIGF0bXAgeGxpbmUKLSQgZ290byB4bG9vcAotJCBFTkRfWExPT1A6Ci0kIGNsb3NlIHh0bXAKLSQgZ290byBsb29wCi0kIGVuZF9sb29wOgotJCBjbG9zZSBpbgotJCBjbG9zZSBhdG1wCi0kIGlmIGYkc2VhcmNoKCJhLnRtcCIpIC5lcXMuICIiIC0KLQl0aGVuICQgZXhpdAotJCAhIGFsbCBnbG9iYWwgZGVmaW5pdGlvbnMKLSQgc2VhcmNoIGEudG1wICJzeW1ib2w6IiwiRUdTWSRWX0RFRiAxIiwiRUdTWSRWX05PUk0gMSIvb3V0PWIudG1wCi0kICEgYWxsIHByb2NlZHVyZXMKLSQgc2VhcmNoIGIudG1wICJFR1NZJFZfTk9STSAxIi93aW5kPSgwLDEpIC9vdXQ9Yy50bXAKLSQgc2VhcmNoIGMudG1wICJzeW1ib2w6Ii9vdXQ9ZC50bXAKLSQgZGVmaW5lL3VzZXIgc3lzJG91dHB1dCBubDoKLSQgZWRpdG8vZWR0L2NvbW1hbmQ9c3lzJGlucHV0IGQudG1wCi1zdWIvc3ltYm9sOiAiL3N5bWJvbF92ZWN0b3I9KC93aG9sZQotc3ViLyIvPVBST0NFRFVSRSkvd2hvbGUKLWV4aXQKLSQgISBhbGwgZGF0YQotJCBzZWFyY2ggYi50bXAgIkVHU1kkVl9ERUYgMSIvd2luZD0oMCwxKSAvb3V0PWUudG1wCi0kIHNlYXJjaCBlLnRtcCAic3ltYm9sOiIvb3V0PWYudG1wCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGVkaXRvL2VkdC9jb21tYW5kPXN5cyRpbnB1dCBmLnRtcAotc3ViL3N5bWJvbDogIi9zeW1ib2xfdmVjdG9yPSgvd2hvbGUKLXN1Yi8iLz1EQVRBKS93aG9sZQotZXhpdAotJCBzb3J0L25vZHVwbCBkLnRtcCxmLnRtcCBnLnRtcAotJCBvcGVuL3JlYWQgcmF3X3ZlY3RvciBnLnRtcAotJCBvcGVuL3dyaXRlIGNhc2VfdmVjdG9yICdwMicKLSQgUkFXTE9PUDoKLSQgcmVhZC9lbmQ9ZW5kX3Jhd2xvb3AgcmF3X3ZlY3RvciByYXdfZWxlbWVudAotJCB3cml0ZSBjYXNlX3ZlY3RvciByYXdfZWxlbWVudAotJCBpZiBmJGxvY2F0ZSgiPVBST0NFRFVSRSkiLHJhd19lbGVtZW50KSAubHQuIGYkbGVuZ3RoKHJhd19lbGVtZW50KQotJCB0aGVuCi0kICAgICBuYW1lID0gZiRlbGVtZW50KDEsIj0iLHJhd19lbGVtZW50KSAtICIoIgotJCAgICAgaWYgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpIC5uZXMuIG5hbWUgdGhlbiAtCi0gICAgICAgICAgd3JpdGUgY2FzZV92ZWN0b3IgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLCAtCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBmJGVkaXQobmFtZSwiVVBDQVNFIiksIG5hbWUpCi0kIGVuZGlmCi0kIGlmIGYkbG9jYXRlKCI9REFUQSkiLHJhd19lbGVtZW50KSAubHQuIGYkbGVuZ3RoKHJhd19lbGVtZW50KQotJCB0aGVuCi0kICAgICBuYW1lID0gZiRlbGVtZW50KDEsIj0iLHJhd19lbGVtZW50KSAtICIoIgotJCAgICAgaWYgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpIC5uZXMuIG5hbWUgdGhlbiAtCi0gICAgICAgICAgd3JpdGUgY2FzZV92ZWN0b3IgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPURBVEEpIiwgLQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpLCBuYW1lKQotJCBlbmRpZgotJCBnb3RvIHJhd2xvb3AKLSQgRU5EX1JBV0xPT1A6Ci0kIGNsb3NlIHJhd192ZWN0b3IKLSQgY2xvc2UgY2FzZV92ZWN0b3IKLSQgZGVsZXRlIGEudG1wOyosYi50bXA7KixjLnRtcDsqLGQudG1wOyosZS50bXA7KixmLnRtcDsqLGcudG1wOyoKLSQgaWYgZiRzZWFyY2goIngudG1wIikgLm5lcy4gIiIgLQotCXRoZW4gJCBkZWxldGUgeC50bXA7KgotJCEKLSQgRVhJVF9BQToKLSQgaWYgViB0aGVuIHNldCB2ZXJpZnkKLSQgZW5kc3Vicm91dGluZQotJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQhCiAkISBXcml0ZSBjb25maWd1cmF0aW9uIHRvIGJvdGggcGVybWFuZW50IGFuZCB0ZW1wb3JhcnkgY29uZmlnIGZpbGUKICQhCiAkISBWZXJzaW9uIGhpc3RvcnkKQEAgLTgwMiwzICs3MTUsMTUzIEBACiAkICBjbG9zZSBjb25maAogJEVORFNVQlJPVVRJTkUKICQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQW5hbHl6ZSB0aGUgcHJvamVjdCBtYXAgZmlsZSBhbmQgY3JlYXRlIHRoZSBzeW1ib2wgdmVjdG9yIGZvciBhIHNoYXJlYWJsZQorJCEgaW1hZ2UgZnJvbSBpdAorJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDEyMDEyOCBGaXJzdCB2ZXJzaW9uCiskISAwLjAyIDIwMTIwMjI2IEFkZCBwcmUtbG9hZCBsb2dpYworJCEKKyQgTUFQXzJfU0hPUFQ6IFN1YnJvdXRpbmUKKyQhCiskIFNBWSA6PSAiV1JJVEVfIFNZUyRPVVRQVVQiCiskIQorJCBJRiBGJFNFQVJDSCgiJydQMSciKSAuRVFTLiAiIgorJCBUSEVOCiskICAgIFNBWSAiTUFQXzJfU0hPUFQtRS1OT1NVQ0hGSUxFOiAgRXJyb3IsIGlucHV0ZmlsZSAnJ3AxJyBub3QgYXZhaWxhYmxlIgorJCAgICBnb3RvIGV4aXRfbTJzCiskIEVORElGCiskIElGICInJ1AyJyIgLkVRUy4gIiIKKyQgVEhFTgorJCAgICBTQVkgIk1BUF8yX1NIT1BUOiAgRXJyb3IsIG5vIG91dHB1dCBmaWxlIHByb3ZpZGVkIgorJCAgICBnb3RvIGV4aXRfbTJzCiskIEVORElGCiskIQorJCBtb2R1bGUxID0gImRlZmxhdGUjZGVmbGF0ZUVuZCNkZWZsYXRlSW5pdF8jZGVmbGF0ZVBhcmFtcyNkZWZsYXRlU2V0RGljdGlvbmFyeSIKKyQgbW9kdWxlMiA9ICJnemNsb3NlI2d6ZXJyb3IjZ3pnZXRjI2d6Z2V0cyNnem9wZW4jZ3pwcmludGYjZ3pwdXRjI2d6cHV0cyNnenJlYWQiCiskIG1vZHVsZTMgPSAiZ3pzZWVrI2d6dGVsbCNpbmZsYXRlI2luZmxhdGVFbmQjaW5mbGF0ZUluaXRfI2luZmxhdGVTZXREaWN0aW9uYXJ5IgorJCBtb2R1bGU0ID0gImluZmxhdGVTeW5jI3VuY29tcHJlc3MjemxpYlZlcnNpb24jY29tcHJlc3MiCiskIG9wZW4vcmVhZCBtYXAgJ3AxCiskIGlmIGF4cCAub3IuIGlhNjQKKyQgdGhlbgorJCAgICAgb3Blbi93cml0ZSBhb3B0IGEub3B0CiskICAgICBvcGVuL3dyaXRlIGJvcHQgYi5vcHQKKyQgICAgIHdyaXRlIGFvcHQgIiBDQVNFX1NFTlNJVElWRT1ZRVMiCiskICAgICB3cml0ZSBib3B0ICJTWU1CT0xfVkVDVE9SPSAoLSIKKyQgICAgIG1vZF9zeW1fbnVtID0gMQorJCBNT0RfU1lNX0xPT1A6CiskICAgICBpZiBmJHR5cGUobW9kdWxlJ21vZF9zeW1fbnVtJykgLm5lcy4gIiIKKyQgICAgIHRoZW4KKyQgICAgICAgICBtb2RfaW4gPSAwCiskIE1PRF9TWU1fSU46CiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVsZW1lbnQobW9kX2luLCAiIyIsIG1vZHVsZSdtb2Rfc3ltX251bScpCiskICAgICAgICAgaWYgc2hhcmVkX3Byb2MgLm5lcy4gIiMiCiskICAgICAgICAgdGhlbgorJCAgICAgICAgICAgICB3cml0ZSBhb3B0IGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwtCisgICAgICAgIAkJICAgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIiksc2hhcmVkX3Byb2MpCiskICAgICAgICAgICAgIHdyaXRlIGJvcHQgZiRmYW8oIiFBUz1QUk9DRURVUkUsLSIsc2hhcmVkX3Byb2MpCiskICAgICAgICAgICAgIG1vZF9pbiA9IG1vZF9pbiArIDEKKyQgICAgICAgICAgICAgZ290byBtb2Rfc3ltX2luCiskICAgICAgICAgZW5kaWYKKyQgICAgICAgICBtb2Rfc3ltX251bSA9IG1vZF9zeW1fbnVtICsgMQorJCAgICAgICAgIGdvdG8gbW9kX3N5bV9sb29wCiskICAgICBlbmRpZgorJE1BUF9MT09QOgorJCAgICAgcmVhZC9lbmQ9bWFwX2VuZCBtYXAgbGluZQorJCAgICAgaWYgKGYkbG9jYXRlKCJ7IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkpIC5vci4gLQorICAgICAgICAgKGYkbG9jYXRlKCJnbG9iYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSkKKyQgICAgIHRoZW4KKyQgICAgICAgICBwcm9jID0gdHJ1ZQorJCAgICAgICAgIGdvdG8gbWFwX2xvb3AKKyQgICAgIGVuZGlmCiskICAgICBpZiBmJGxvY2F0ZSgifSIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICBpZiBmJGxvY2F0ZSgibG9jYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgaWYgcHJvYworJCAgICAgdGhlbgorJCAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRlZGl0KGxpbmUsImNvbGxhcHNlIikKKyQgICAgICAgICBjaG9wX3NlbWkgPSBmJGxvY2F0ZSgiOyIsIHNoYXJlZF9wcm9jKQorJCAgICAgICAgIGlmIGNob3Bfc2VtaSAubHQuIGYkbGVuZ3RoKHNoYXJlZF9wcm9jKSB0aGVuIC0KKyAgICAgICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGV4dHJhY3QoMCwgY2hvcF9zZW1pLCBzaGFyZWRfcHJvYykKKyQgICAgICAgICB3cml0ZSBhb3B0IGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwtCisgICAgICAgIAkJCSBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpLHNoYXJlZF9wcm9jKQorJCAgICAgICAgIHdyaXRlIGJvcHQgZiRmYW8oIiFBUz1QUk9DRURVUkUsLSIsc2hhcmVkX3Byb2MpCiskICAgICBlbmRpZgorJCAgICAgZ290byBtYXBfbG9vcAorJE1BUF9FTkQ6CiskICAgICBjbG9zZS9ub2xvZyBhb3B0CiskICAgICBjbG9zZS9ub2xvZyBib3B0CiskICAgICBvcGVuL2FwcGVuZCBsaWJvcHQgJ3AyJworJCAgICAgb3Blbi9yZWFkIGFvcHQgYS5vcHQKKyQgICAgIG9wZW4vcmVhZCBib3B0IGIub3B0CiskQUxPT1A6CiskICAgICByZWFkL2VuZD1hbG9vcF9lbmQgYW9wdCBsaW5lCiskICAgICB3cml0ZSBsaWJvcHQgbGluZQorJCAgICAgZ290byBhbG9vcAorJEFMT09QX0VORDoKKyQgICAgIGNsb3NlL25vbG9nIGFvcHQKKyQgICAgIHN2ID0gIiIKKyRCTE9PUDoKKyQgICAgIHJlYWQvZW5kPWJsb29wX2VuZCBib3B0IHN2bgorJCAgICAgaWYgKHN2bi5uZXMuIiIpCiskICAgICB0aGVuCiskICAgICAgICBpZiAoc3YubmVzLiIiKSB0aGVuIHdyaXRlIGxpYm9wdCBzdgorJCAgICAgICAgc3YgPSBzdm4KKyQgICAgIGVuZGlmCiskICAgICBnb3RvIGJsb29wCiskQkxPT1BfRU5EOgorJCAgICAgd3JpdGUgbGlib3B0IGYkZXh0cmFjdCgwLGYkbGVuZ3RoKHN2KS0yLHN2KSwgIi0iCiskICAgICB3cml0ZSBsaWJvcHQgIikiCiskICAgICBjbG9zZS9ub2xvZyBib3B0CiskICAgICBkZWxldGUvbm9sb2cvbm9jb25mIGEub3B0OyosYi5vcHQ7KgorJCBlbHNlCiskICAgICBpZiB2YXgKKyQgICAgIHRoZW4KKyQgICAgIG9wZW4vYXBwZW5kIGxpYm9wdCAncDInCiskICAgICBtb2Rfc3ltX251bSA9IDEKKyQgVk1PRF9TWU1fTE9PUDoKKyQgICAgIGlmIGYkdHlwZShtb2R1bGUnbW9kX3N5bV9udW0nKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICAgIG1vZF9pbiA9IDAKKyQgVk1PRF9TWU1fSU46CiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVsZW1lbnQobW9kX2luLCAiIyIsIG1vZHVsZSdtb2Rfc3ltX251bScpCiskICAgICAgICAgaWYgc2hhcmVkX3Byb2MgLm5lcy4gIiMiCiskICAgICAgICAgdGhlbgorJCAgICAgCSAgICAgIHdyaXRlIGxpYm9wdCBmJGZhbygiVU5JVkVSU0FMPSFBUyIsLQorICAgICAgCSAgCQkJICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpKQorJCAgICAgICAgICAgICBtb2RfaW4gPSBtb2RfaW4gKyAxCiskICAgICAgICAgICAgIGdvdG8gdm1vZF9zeW1faW4KKyQgICAgICAgICBlbmRpZgorJCAgICAgICAgIG1vZF9zeW1fbnVtID0gbW9kX3N5bV9udW0gKyAxCiskICAgICAgICAgZ290byB2bW9kX3N5bV9sb29wCiskICAgICBlbmRpZgorJFZNQVBfTE9PUDoKKyQgICAgIAkgIHJlYWQvZW5kPXZtYXBfZW5kIG1hcCBsaW5lCiskICAgICAJICBpZiAoZiRsb2NhdGUoInsiLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSkgLm9yLiAtCisgICAJICAgICAgKGYkbG9jYXRlKCJnbG9iYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSkKKyQgICAgIAkgIHRoZW4KKyQgICAgIAkgICAgICBwcm9jID0gdHJ1ZQorJCAgICAgCSAgICAgIGdvdG8gdm1hcF9sb29wCiskICAgICAJICBlbmRpZgorJCAgICAgCSAgaWYgZiRsb2NhdGUoIn0iLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgCSAgaWYgZiRsb2NhdGUoImxvY2FsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIAkgIGlmIHByb2MKKyQgICAgIAkgIHRoZW4KKyQgICAgIAkgICAgICBzaGFyZWRfcHJvYyA9IGYkZWRpdChsaW5lLCJjb2xsYXBzZSIpCiskICAgICAJICAgICAgY2hvcF9zZW1pID0gZiRsb2NhdGUoIjsiLCBzaGFyZWRfcHJvYykKKyQgICAgIAkgICAgICBpZiBjaG9wX3NlbWkgLmx0LiBmJGxlbmd0aChzaGFyZWRfcHJvYykgdGhlbiAtCisgICAgICAJICAJICBzaGFyZWRfcHJvYyA9IGYkZXh0cmFjdCgwLCBjaG9wX3NlbWksIHNoYXJlZF9wcm9jKQorJCAgICAgCSAgICAgIHdyaXRlIGxpYm9wdCBmJGZhbygiVU5JVkVSU0FMPSFBUyIsLQorICAgICAgCSAgCQkJICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpKQorJCAgICAgCSAgZW5kaWYKKyQgICAgIAkgIGdvdG8gdm1hcF9sb29wCiskVk1BUF9FTkQ6CiskICAgICBlbHNlCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVW5rbm93biBBcmNoaXRlY3R1cmUgKE5vdCBWQVgsIEFYUCwgb3IgSUE2NCkiCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiTm8gb3B0aW9ucyBmaWxlIGNyZWF0ZWQiCiskICAgICBlbmRpZgorJCBlbmRpZgorJCBFWElUX00yUzoKKyQgY2xvc2Uvbm9sb2cgbWFwCiskIGNsb3NlL25vbG9nIGxpYm9wdAorJCBlbmRzdWJyb3V0aW5lCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYyBiL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCmluZGV4IDk4MjVjY2MuLmIzMDI1YTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCisrKyBiL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCkBAIC0xLDUgKzEsNSBAQAogLyogbWluaWd6aXAuYyAtLSBzaW11bGF0ZSBnemlwIHVzaW5nIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQwLDYgKzQwLDEwIEBACiAjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCiAjZW5kaWYKIAorI2lmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjZW5kaWYKKwogI2lmZGVmIFZNUwogIyAgZGVmaW5lIHVubGluayBkZWxldGUKICMgIGRlZmluZSBHWl9TVUZGSVggIi1neiIKQEAgLTEzOCw2ICsxNDIsMTk3IEBACiAjICBkZWZpbmUgbG9jYWwKICNlbmRpZgogCisjaWZkZWYgWl9TT0xPCisvKiBmb3IgWl9TT0xPLCBjcmVhdGUgc2ltcGxpZmllZCBneiogZnVuY3Rpb25zIHVzaW5nIGRlZmxhdGUgYW5kIGluZmxhdGUgKi8KKworI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKFpfTEFSR0UpCisjICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIHVubGluaygpICovCisjZW5kaWYKKwordm9pZCAqbXlhbGxvYyBPRigodm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKTsKK3ZvaWQgbXlmcmVlIE9GKCh2b2lkICosIHZvaWQgKikpOworCit2b2lkICpteWFsbG9jKHEsIG4sIG0pCisgICAgdm9pZCAqcTsKKyAgICB1bnNpZ25lZCBuLCBtOworeworICAgIHEgPSBaX05VTEw7CisgICAgcmV0dXJuIGNhbGxvYyhuLCBtKTsKK30KKwordm9pZCBteWZyZWUocSwgcCkKKyAgICB2b2lkICpxLCAqcDsKK3sKKyAgICBxID0gWl9OVUxMOworICAgIGZyZWUocCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zIHsKKyAgICBGSUxFICpmaWxlOworICAgIGludCB3cml0ZTsKKyAgICBpbnQgZXJyOworICAgIGNoYXIgKm1zZzsKKyAgICB6X3N0cmVhbSBzdHJtOworfSAqZ3pGaWxlOworCitnekZpbGUgZ3pvcGVuIE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworZ3pGaWxlIGd6ZG9wZW4gT0YoKGludCwgY29uc3QgY2hhciAqKSk7CitnekZpbGUgZ3pfb3BlbiBPRigoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworCitnekZpbGUgZ3pvcGVuKHBhdGgsIG1vZGUpCitjb25zdCBjaGFyICpwYXRoOworY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAtMSwgbW9kZSk7Cit9CisKK2d6RmlsZSBnemRvcGVuKGZkLCBtb2RlKQoraW50IGZkOworY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihOVUxMLCBmZCwgbW9kZSk7Cit9CisKK2d6RmlsZSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKQorICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgaW50IGZkOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgZ3pGaWxlIGd6OworICAgIGludCByZXQ7CisKKyAgICBneiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGd6RmlsZV9zKSk7CisgICAgaWYgKGd6ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGd6LT53cml0ZSA9IHN0cmNocihtb2RlLCAndycpICE9IE5VTEw7CisgICAgZ3otPnN0cm0uemFsbG9jID0gbXlhbGxvYzsKKyAgICBnei0+c3RybS56ZnJlZSA9IG15ZnJlZTsKKyAgICBnei0+c3RybS5vcGFxdWUgPSBaX05VTEw7CisgICAgaWYgKGd6LT53cml0ZSkKKyAgICAgICAgcmV0ID0gZGVmbGF0ZUluaXQyKCYoZ3otPnN0cm0pLCAtMSwgOCwgMTUgKyAxNiwgOCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIGd6LT5zdHJtLm5leHRfaW4gPSAwOworICAgICAgICBnei0+c3RybS5hdmFpbF9pbiA9IFpfTlVMTDsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUluaXQyKCYoZ3otPnN0cm0pLCAxNSArIDE2KTsKKyAgICB9CisgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgIGZyZWUoZ3opOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZ3otPmZpbGUgPSBwYXRoID09IE5VTEwgPyBmZG9wZW4oZmQsIGd6LT53cml0ZSA/ICJ3YiIgOiAicmIiKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3BlbihwYXRoLCBnei0+d3JpdGUgPyAid2IiIDogInJiIik7CisgICAgaWYgKGd6LT5maWxlID09IE5VTEwpIHsKKyAgICAgICAgZ3otPndyaXRlID8gZGVmbGF0ZUVuZCgmKGd6LT5zdHJtKSkgOiBpbmZsYXRlRW5kKCYoZ3otPnN0cm0pKTsKKyAgICAgICAgZnJlZShneik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBnei0+ZXJyID0gMDsKKyAgICBnei0+bXNnID0gIiI7CisgICAgcmV0dXJuIGd6OworfQorCitpbnQgZ3p3cml0ZSBPRigoZ3pGaWxlLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKSk7CisKK2ludCBnendyaXRlKGd6LCBidWYsIGxlbikKKyAgICBnekZpbGUgZ3o7CisgICAgY29uc3Qgdm9pZCAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICB6X3N0cmVhbSAqc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtCVUZMRU5dOworCisgICAgaWYgKGd6ID09IE5VTEwgfHwgIWd6LT53cml0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIHN0cm0tPm5leHRfaW4gPSAodm9pZCAqKWJ1ZjsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGxlbjsKKyAgICBkbyB7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBCVUZMRU47CisgICAgICAgICh2b2lkKWRlZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgIGZ3cml0ZShvdXQsIDEsIEJVRkxFTiAtIHN0cm0tPmF2YWlsX291dCwgZ3otPmZpbGUpOworICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCA9PSAwKTsKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQgZ3pyZWFkIE9GKChnekZpbGUsIHZvaWQgKiwgdW5zaWduZWQpKTsKKworaW50IGd6cmVhZChneiwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGd6OworICAgIHZvaWQgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBnb3Q7CisgICAgdW5zaWduZWQgY2hhciBpblsxXTsKKyAgICB6X3N0cmVhbSAqc3RybTsKKworICAgIGlmIChneiA9PSBOVUxMIHx8IGd6LT53cml0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGd6LT5lcnIpCisgICAgICAgIHJldHVybiAwOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBzdHJtLT5uZXh0X291dCA9ICh2b2lkICopYnVmOworICAgIHN0cm0tPmF2YWlsX291dCA9IGxlbjsKKyAgICBkbyB7CisgICAgICAgIGdvdCA9IGZyZWFkKGluLCAxLCAxLCBnei0+ZmlsZSk7CisgICAgICAgIGlmIChnb3QgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdHJtLT5uZXh0X2luID0gaW47CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMTsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IpIHsKKyAgICAgICAgICAgIGd6LT5lcnIgPSBaX0RBVEFfRVJST1I7CisgICAgICAgICAgICBnei0+bXNnID0gc3RybS0+bXNnOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0KTsKKyAgICByZXR1cm4gbGVuIC0gc3RybS0+YXZhaWxfb3V0OworfQorCitpbnQgZ3pjbG9zZSBPRigoZ3pGaWxlKSk7CisKK2ludCBnemNsb3NlKGd6KQorICAgIGd6RmlsZSBnejsKK3sKKyAgICB6X3N0cmVhbSAqc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtCVUZMRU5dOworCisgICAgaWYgKGd6ID09IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgaWYgKGd6LT53cml0ZSkgeworICAgICAgICBzdHJtLT5uZXh0X2luID0gWl9OVUxMOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gQlVGTEVOOworICAgICAgICAgICAgKHZvaWQpZGVmbGF0ZShzdHJtLCBaX0ZJTklTSCk7CisgICAgICAgICAgICBmd3JpdGUob3V0LCAxLCBCVUZMRU4gLSBzdHJtLT5hdmFpbF9vdXQsIGd6LT5maWxlKTsKKyAgICAgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ID09IDApOworICAgICAgICBkZWZsYXRlRW5kKHN0cm0pOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGluZmxhdGVFbmQoc3RybSk7CisgICAgZmNsb3NlKGd6LT5maWxlKTsKKyAgICBmcmVlKGd6KTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworY29uc3QgY2hhciAqZ3plcnJvciBPRigoZ3pGaWxlLCBpbnQgKikpOworCitjb25zdCBjaGFyICpnemVycm9yKGd6LCBlcnIpCisgICAgZ3pGaWxlIGd6OworICAgIGludCAqZXJyOworeworICAgICplcnIgPSBnei0+ZXJyOworICAgIHJldHVybiBnei0+bXNnOworfQorCisjZW5kaWYKKwogY2hhciAqcHJvZzsKIAogdm9pZCBlcnJvciAgICAgICAgICAgIE9GKChjb25zdCBjaGFyICptc2cpKTsKQEAgLTI3Miw4ICs0NjcsMTIgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKG91dGZpbGUsIHNpemVvZihvdXRmaWxlKSwgIiVzJXMiLCBmaWxlLCBHWl9TVUZGSVgpOworI2Vsc2UKICAgICBzdHJjcHkob3V0ZmlsZSwgZmlsZSk7CiAgICAgc3RyY2F0KG91dGZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKIAogICAgIGluID0gZm9wZW4oZmlsZSwgInJiIik7CiAgICAgaWYgKGluID09IE5VTEwpIHsKQEAgLTMwOCw3ICs1MDcsMTEgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsIGZpbGUpOworI2Vsc2UKICAgICBzdHJjcHkoYnVmLCBmaWxlKTsKKyNlbmRpZgogCiAgICAgaWYgKGxlbiA+IFNVRkZJWF9MRU4gJiYgc3RyY21wKGZpbGUrbGVuLVNVRkZJWF9MRU4sIEdaX1NVRkZJWCkgPT0gMCkgewogICAgICAgICBpbmZpbGUgPSBmaWxlOwpAQCAtMzE3LDcgKzUyMCwxMSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIG91dGZpbGUgPSBmaWxlOwogICAgICAgICBpbmZpbGUgPSBidWY7CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiVzIiwgR1pfU1VGRklYKTsKKyNlbHNlCiAgICAgICAgIHN0cmNhdChpbmZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKICAgICB9CiAgICAgaW4gPSBnem9wZW4oaW5maWxlLCAicmIiKTsKICAgICBpZiAoaW4gPT0gTlVMTCkgewpAQCAtMzU1LDcgKzU2MiwxMSBAQAogICAgIGd6RmlsZSBmaWxlOwogICAgIGNoYXIgKmJuYW1lLCBvdXRtb2RlWzIwXTsKIAorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYob3V0bW9kZSwgc2l6ZW9mKG91dG1vZGUpLCAiJXMiLCAid2I2ICIpOworI2Vsc2UKICAgICBzdHJjcHkob3V0bW9kZSwgIndiNiAiKTsKKyNlbmRpZgogCiAgICAgcHJvZyA9IGFyZ3ZbMF07CiAgICAgYm5hbWUgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvdHJlZXMuYyBiL01vZHVsZXMvemxpYi90cmVlcy5jCmluZGV4IDU2ZTliYjEuLjFmZDc3NTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi90cmVlcy5jCisrKyBiL01vZHVsZXMvemxpYi90cmVlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyogdHJlZXMuYyAtLSBvdXRwdXQgZGVmbGF0ZWQgZGF0YSB1c2luZyBIdWZmbWFuIGNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseQogICogZGV0ZWN0X2RhdGFfdHlwZSgpIGZ1bmN0aW9uIHByb3ZpZGVkIGZyZWVseSBieSBDb3NtaW4gVHJ1dGEsIDIwMDYKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwpAQCAtNzQsMTEgKzc0LDYgQEAKICAqIHByb2JhYmlsaXR5LCB0byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIGxlbmd0aHMgZm9yIHVudXNlZCBiaXQgbGVuZ3RoIGNvZGVzLgogICovCiAKLSNkZWZpbmUgQnVmX3NpemUgKDggKiAyKnNpemVvZihjaGFyKSkKLS8qIE51bWJlciBvZiBiaXRzIHVzZWQgd2l0aGluIGJpX2J1Zi4gKGJpX2J1ZiBtaWdodCBiZSBpbXBsZW1lbnRlZCBvbgotICogbW9yZSB0aGFuIDE2IGJpdHMgb24gc29tZSBzeXN0ZW1zLikKLSAqLwotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuCiAgKi8KQEAgLTE1MSw4ICsxNDYsOCBAQAogbG9jYWwgaW50ICBidWlsZF9ibF90cmVlICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdm9pZCBzZW5kX2FsbF90cmVlcyBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGxjb2RlcywgaW50IGRjb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGNvZGVzKSk7Ci1sb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjdF9kYXRhICpsdHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0X2RhdGEgKmR0cmVlKSk7Citsb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjb25zdCBjdF9kYXRhICpsdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlKSk7CiBsb2NhbCBpbnQgIGRldGVjdF9kYXRhX3R5cGUgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHVuc2lnbmVkIGJpX3JldmVyc2UgT0YoKHVuc2lnbmVkIHZhbHVlLCBpbnQgbGVuZ3RoKSk7CiBsb2NhbCB2b2lkIGJpX3dpbmR1cCAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CkBAIC0zOTksNyArMzk0LDYgQEAKIAogICAgIHMtPmJpX2J1ZiA9IDA7CiAgICAgcy0+YmlfdmFsaWQgPSAwOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KICNpZmRlZiBERUJVRwogICAgIHMtPmNvbXByZXNzZWRfbGVuID0gMEw7CiAgICAgcy0+Yml0c19zZW50ID0gMEw7CkBAIC04ODMsMTUgKzg3NywxNyBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZsdXNoIHRoZSBiaXRzIGluIHRoZSBiaXQgYnVmZmVyIHRvIHBlbmRpbmcgb3V0cHV0IChsZWF2ZXMgYXQgbW9zdCA3IGJpdHMpCisgKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyhzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgYmlfZmx1c2gocyk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogU2VuZCBvbmUgZW1wdHkgc3RhdGljIGJsb2NrIHRvIGdpdmUgZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZS4KICAqIFRoaXMgdGFrZXMgMTAgYml0cywgb2Ygd2hpY2ggNyBtYXkgcmVtYWluIGluIHRoZSBiaXQgYnVmZmVyLgotICogVGhlIGN1cnJlbnQgaW5mbGF0ZSBjb2RlIHJlcXVpcmVzIDkgYml0cyBvZiBsb29rYWhlYWQuIElmIHRoZQotICogbGFzdCB0d28gY29kZXMgZm9yIHRoZSBwcmV2aW91cyBibG9jayAocmVhbCBjb2RlIHBsdXMgRU9CKSB3ZXJlIGNvZGVkCi0gKiBvbiA1IGJpdHMgb3IgbGVzcywgaW5mbGF0ZSBtYXkgaGF2ZSBvbmx5IDUrMyBiaXRzIG9mIGxvb2thaGVhZCB0byBkZWNvZGUKLSAqIHRoZSBsYXN0IHJlYWwgY29kZS4gSW4gdGhpcyBjYXNlIHdlIHNlbmQgdHdvIGVtcHR5IHN0YXRpYyBibG9ja3MgaW5zdGVhZAotICogb2Ygb25lLiAoVGhlcmUgYXJlIG5vIHByb2JsZW1zIGlmIHRoZSBwcmV2aW91cyBibG9jayBpcyBzdG9yZWQgb3IgZml4ZWQuKQotICogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBvZiBsYXN0IHJlYWwgY29kZSBlbmNvZGVkCi0gKiBvbiBvbmUgYml0IG9ubHkuCiAgKi8KIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfYWxpZ24ocykKICAgICBkZWZsYXRlX3N0YXRlICpzOwpAQCAtOTAyLDIwICs4OTgsNiBAQAogICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsgLyogMyBmb3IgYmxvY2sgdHlwZSwgNyBmb3IgRU9CICovCiAjZW5kaWYKICAgICBiaV9mbHVzaChzKTsKLSAgICAvKiBPZiB0aGUgMTAgYml0cyBmb3IgdGhlIGVtcHR5IGJsb2NrLCB3ZSBoYXZlIGFscmVhZHkgc2VudAotICAgICAqICgxMCAtIGJpX3ZhbGlkKSBiaXRzLiBUaGUgbG9va2FoZWFkIGZvciB0aGUgbGFzdCByZWFsIGNvZGUgKGJlZm9yZQotICAgICAqIHRoZSBFT0Igb2YgdGhlIHByZXZpb3VzIGJsb2NrKSB3YXMgdGh1cyBhdCBsZWFzdCBvbmUgcGx1cyB0aGUgbGVuZ3RoCi0gICAgICogb2YgdGhlIEVPQiBwbHVzIHdoYXQgd2UgaGF2ZSBqdXN0IHNlbnQgb2YgdGhlIGVtcHR5IHN0YXRpYyBibG9jay4KLSAgICAgKi8KLSAgICBpZiAoMSArIHMtPmxhc3RfZW9iX2xlbiArIDEwIC0gcy0+YmlfdmFsaWQgPCA5KSB7Ci0gICAgICAgIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVM8PDEsIDMpOwotICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsKLSNlbmRpZgotICAgICAgICBiaV9mbHVzaChzKTsKLSAgICB9Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gNzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC05OTAsNyArOTcyLDggQEAKICAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT0gb3B0X2xlbmIpIHsKICNlbmRpZgogICAgICAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUzw8MSkrbGFzdCwgMyk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopc3RhdGljX2x0cmVlLCAoY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopc3RhdGljX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPnN0YXRpY19sZW47CiAjZW5kaWYKQEAgLTk5OCw3ICs5ODEsOCBAQAogICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUzw8MSkrbGFzdCwgMyk7CiAgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMtPmxfZGVzYy5tYXhfY29kZSsxLCBzLT5kX2Rlc2MubWF4X2NvZGUrMSwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2JsaW5kZXgrMSk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopcy0+ZHluX2x0cmVlLCAoY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPm9wdF9sZW47CiAjZW5kaWYKQEAgLTEwNzUsOCArMTA1OSw4IEBACiAgKi8KIGxvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2socywgbHRyZWUsIGR0cmVlKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLwotICAgIGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCisgICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLworICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCiB7CiAgICAgdW5zaWduZWQgZGlzdDsgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLwogICAgIGludCBsYzsgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0ID09IDApICovCkBAIC0xMTE4LDcgKzExMDIsNiBAQAogICAgIH0gd2hpbGUgKGx4IDwgcy0+bGFzdF9saXQpOwogCiAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgbHRyZWUpOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IGx0cmVlW0VORF9CTE9DS10uTGVuOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEyMjYsNyArMTIwOSw2IEBACiAgICAgaW50ICAgICAgaGVhZGVyOyAgLyogdHJ1ZSBpZiBibG9jayBoZWFkZXIgbXVzdCBiZSB3cml0dGVuICovCiB7CiAgICAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqLwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KIAogICAgIGlmIChoZWFkZXIpIHsKICAgICAgICAgcHV0X3Nob3J0KHMsICh1c2gpbGVuKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi91bmNvbXByLmMgYi9Nb2R1bGVzL3psaWIvdW5jb21wci5jCmluZGV4IGFkOThiZTMuLjI0MmU5NDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi91bmNvbXByLmMKKysrIGIvTW9kdWxlcy96bGliL3VuY29tcHIuYwpAQCAtMzAsNyArMzAsNyBAQAogICAgIHpfc3RyZWFtIHN0cmVhbTsKICAgICBpbnQgZXJyOwogCi0gICAgc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKXNvdXJjZTsKKyAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOwogICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKICAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwogICAgIGlmICgodUxvbmcpc3RyZWFtLmF2YWlsX2luICE9IHNvdXJjZUxlbikgcmV0dXJuIFpfQlVGX0VSUk9SOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmggYi9Nb2R1bGVzL3psaWIvemNvbmYuaAppbmRleCAwMmNlNTZjLi45OTg3YTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaAorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNSwxMSArMTUsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjcsOSArMjksMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00MCw0NCArNDQsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTkyLDE2ICsxMDUsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMSw3ICsxMzAsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTcsNiArMjE4LDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0Myw2ICsyNzAsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTYsMTIgKzM5MSw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MCwyMSArNDQwLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTQsMTggKzQ4MSwxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluIGIvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgppbmRleCBhMmY3MWIxLi4wNDMwMTljIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluCisrKyBiL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4KQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTcsMTEgKzE3LDEzIEBACiAgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCiAgKi8KICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCiAvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKICMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKICMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAogIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKQEAgLTI5LDkgKzMxLDExIEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NApAQCAtNDIsNDQgKzQ2LDUzIEBACiAjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwogIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwogIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZwogIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQogIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKICMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQogIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCi0jICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4Ci0jICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKLSMgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgotIyAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKLSMgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCi0jICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCi0jICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93Ci0jICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKLSMgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCi0jICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKLSMgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCi0jICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAotIyAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwotIyAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwotIyAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0Ci0jICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgotIyAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0Ci0jICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKLSMgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKLSMgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKLSMgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAotIyAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlawotIyAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Ci0jICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKLSMgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKLSMgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAotIyAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCi0jICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCkBAIC05NCwxNiArMTA3LDIyIEBACiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgogIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKICMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKICMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CiAjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0jICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYwotIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgogIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKICMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCkBAIC0xMTMsNyArMTMyLDkgQEAKICMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCiAjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKICMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKICMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKICMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCiAjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwpAQCAtMTk5LDYgKzIyMCwxMiBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKIC8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKICMgIGRlZmluZSBOT19EVU1NWV9ERUNMCkBAIC0yNDUsNiArMjcyLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQpAQCAtMzU4LDEyICszOTMsNDcgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KICMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKICNlbmRpZgogCisjaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1NUREFSR19ICisjZW5kaWYKKwogI2lmZGVmIFNUREMKLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRhcmcuaD4gICAgICAgICAvKiBmb3IgdmFfbGlzdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgICAgICAgIC8qIGZvciB3Y2hhcl90ICovCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIGEgbGl0dGxlIHRyaWNrIHRvIGFjY29tbW9kYXRlIGJvdGggIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kCkBAIC0zNzIsMjEgKzQ0MiwzOCBAQAogICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCiAgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucwogICovCi0jaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKICMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgaWZuZGVmIHpfb2ZmX3QKLSMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0VFS19TRVQKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwpAQCAtMzk2LDE4ICs0ODMsMTQgQEAKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQogIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CiAjZWxzZQotIyAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmguaW4gYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgppbmRleCAwMmNlNTZjLi45OTg3YTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgpAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNSwxMSArMTUsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjcsOSArMjksMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00MCw0NCArNDQsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTkyLDE2ICsxMDUsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMSw3ICsxMzAsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTcsNiArMjE4LDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0Myw2ICsyNzAsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTYsMTIgKzM5MSw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MCwyMSArNDQwLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTQsMTggKzQ4MSwxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaW4uaCBiL01vZHVsZXMvemxpYi96Y29uZi5pbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2E5NDMxLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5pbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLS8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICovCi0KLS8qIEAoIykgJElkJCAqLwotCi0jaWZuZGVmIFpDT05GX0gKLSNkZWZpbmUgWkNPTkZfSAotCi0vKgotICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAotICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCi0gKi8KLSNpZmRlZiBaX1BSRUZJWAotIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwotIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKLSMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCi0jICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUluaXRfCi0jICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQotIyAgZGVmaW5lIGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQKLSMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCi0jICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQotIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAotIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKLSMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKLSMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKLSMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCi0jICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwotIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKLSMgIGRlZmluZSBpbmZsYXRlQ29weSAgICAgICAgICAgel9pbmZsYXRlQ29weQotIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAotIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCi0jICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCi0jICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgotIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCi0jICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotCi0jICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwotIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKLSMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYwotIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKLSMgIGRlZmluZSB1SW50ICAgICAgICAgICAgICAgICAgel91SW50Ci0jICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAgIHpfdUxvbmcKLSMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgotIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCi0jICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgotIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCi0jICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCi0jICBkZWZpbmUgdm9pZHBmICAgICAgICAgICAgICAgIHpfdm9pZHBmCi0jICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9pZHAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9TKQotIyAgZGVmaW5lIE1TRE9TCi0jZW5kaWYKLSNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCi0jICBkZWZpbmUgT1MyCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQotIyAgZGVmaW5lIFdJTkRPV1MKLSNlbmRpZgotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQotIyAgaWZuZGVmIFdJTjMyCi0jICAgIGRlZmluZSBXSU4zMgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCi0jICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCi0jICAgIGlmbmRlZiBTWVMxNkJJVAotIyAgICAgIGRlZmluZSBTWVMxNkJJVAotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKgotICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0aGUgYWxsb2MgZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKLSAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KLSAqLwotI2lmZGVmIFNZUzE2QklUCi0jICBkZWZpbmUgTUFYU0VHXzY0SwotI2VuZGlmCi0jaWZkZWYgTVNET1MKLSMgIGRlZmluZSBVTkFMSUdORURfT0sKLSNlbmRpZgotCi0jaWZkZWYgX19TVERDX1ZFUlNJT05fXwotIyAgaWZuZGVmIFNUREMKLSMgICAgZGVmaW5lIFNUREMKLSMgIGVuZGlmCi0jICBpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSMgICAgaWZuZGVmIFNUREM5OQotIyAgICAgIGRlZmluZSBTVERDOTkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0KLSNpZm5kZWYgU1REQwotIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLwotIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KLSNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQotIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKLSNlbmRpZgotCi0vKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KLSNpZm5kZWYgTUFYX01FTV9MRVZFTAotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA4Ci0jICBlbHNlCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDkKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogTWF4aW11bSB2YWx1ZSBmb3Igd2luZG93Qml0cyBpbiBkZWZsYXRlSW5pdDIgYW5kIGluZmxhdGVJbml0Mi4KLSAqIFdBUk5JTkc6IHJlZHVjaW5nIE1BWF9XQklUUyBtYWtlcyBtaW5pZ3ppcCB1bmFibGUgdG8gZXh0cmFjdCAuZ3ogZmlsZXMKLSAqIGNyZWF0ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJhY3RlZCBieQotICogZ3ppcC4pCi0gKi8KLSNpZm5kZWYgTUFYX1dCSVRTCi0jICBkZWZpbmUgTUFYX1dCSVRTICAgMTUgLyogMzJLIExaNzcgd2luZG93ICovCi0jZW5kaWYKLQotLyogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6Ci0gICAgICAgICAgICAoMSA8PCAod2luZG93Qml0cysyKSkgKyAgKDEgPDwgKG1lbUxldmVsKzkpKQotIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHM9MTUgICsgIDEyOEsgZm9yIG1lbUxldmVsID0gOCAgKGRlZmF1bHQgdmFsdWVzKQotIHBsdXMgYSBmZXcga2lsb2J5dGVzIGZvciBzbWFsbCBvYmplY3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVkdWNlCi0gdGhlIGRlZmF1bHQgbWVtb3J5IHJlcXVpcmVtZW50cyBmcm9tIDI1NksgdG8gMTI4SywgY29tcGlsZSB3aXRoCi0gICAgIG1ha2UgQ0ZMQUdTPSItTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NyIKLSBPZiBjb3Vyc2UgdGhpcyB3aWxsIGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gpLgotCi0gICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAxIDw8IHdpbmRvd0JpdHMKLSB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCi0gZm9yIHNtYWxsIG9iamVjdHMuCi0qLwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLwotCi0jaWZuZGVmIE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLSMgIGlmZGVmIFNUREMKLSMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzCi0jICBlbHNlCi0jICAgIGRlZmluZSBPRihhcmdzKSAgKCkKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKLSAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCi0gKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKLSAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVkIHRoZSBtaXhlZCBtb2RlbCwKLSAqIGp1c3QgZGVmaW5lIEZBUiB0byBiZSBlbXB0eS4KLSAqLwotI2lmZGVmIFNZUzE2QklUCi0jICBpZiBkZWZpbmVkKE1fSTg2U00pIHx8IGRlZmluZWQoTV9JODZNTSkKLSAgICAgLyogTVNDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwotIyAgICBkZWZpbmUgU01BTExfTUVESVVNCi0jICAgIGlmZGVmIF9NU0NfVkVSCi0jICAgICAgZGVmaW5lIEZBUiBfZmFyCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgRkFSIGZhcgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkKF9fU01BTExfXykgfHwgZGVmaW5lZChfX01FRElVTV9fKSkKLSAgICAgLyogVHVyYm8gQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KLSMgICAgZGVmaW5lIFNNQUxMX01FRElVTQotIyAgICBpZmRlZiBfX0JPUkxBTkRDX18KLSMgICAgICBkZWZpbmUgRkFSIF9mYXIKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBGQVIgZmFyCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpCi0gICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIGFzIGEgRExMLCBkZWZpbmUgWkxJQl9ETEwuCi0gICAgKiBUaGlzIGlzIG5vdCBtYW5kYXRvcnksIGJ1dCBpdCBvZmZlcnMgYSBsaXR0bGUgcGVyZm9ybWFuY2UgaW5jcmVhc2UuCi0gICAgKi8KLSMgIGlmZGVmIFpMSUJfRExMCi0jICAgIGlmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPj0gMHg1MDApKQotIyAgICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKLSMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgICBlbHNlCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmICAvKiBaTElCX0RMTCAqLwotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiB3aXRoIHRoZSBXSU5BUEkvV0lOQVBJViBjYWxsaW5nIGNvbnZlbnRpb24sCi0gICAgKiBkZWZpbmUgWkxJQl9XSU5BUEkuCi0gICAgKiBDYXV0aW9uOiB0aGUgc3RhbmRhcmQgWkxJQjEuRExMIGlzIE5PVCBjb21waWxlZCB1c2luZyBaTElCX1dJTkFQSS4KLSAgICAqLwotIyAgaWZkZWYgWkxJQl9XSU5BUEkKLSMgICAgaWZkZWYgRkFSCi0jICAgICAgdW5kZWYgRkFSCi0jICAgIGVuZGlmCi0jICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSAgICAgLyogTm8gbmVlZCBmb3IgX2V4cG9ydCwgdXNlIFpMSUIuREVGIGluc3RlYWQuICovCi0gICAgIC8qIEZvciBjb21wbGV0ZSBXaW5kb3dzIGNvbXBhdGliaWxpdHksIHVzZSBXSU5BUEksIG5vdCBfX3N0ZGNhbGwuICovCi0jICAgIGRlZmluZSBaRVhQT1JUIFdJTkFQSQotIyAgICBpZmRlZiBXSU4zMgotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgV0lOQVBJVgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBGQVIgQ0RFQ0wKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fQkVPU19fKQotIyAgaWZkZWYgWkxJQl9ETEwKLSMgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBaRVhURVJOCi0jICBkZWZpbmUgWkVYVEVSTiBleHRlcm4KLSNlbmRpZgotI2lmbmRlZiBaRVhQT1JUCi0jICBkZWZpbmUgWkVYUE9SVAotI2VuZGlmCi0jaWZuZGVmIFpFWFBPUlRWQQotIyAgZGVmaW5lIFpFWFBPUlRWQQotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jICBkZWZpbmUgRkFSCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9fTUFDVFlQRVNfXykKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgQnl0ZTsgIC8qIDggYml0cyAqLwotI2VuZGlmCi10eXBlZGVmIHVuc2lnbmVkIGludCAgIHVJbnQ7ICAvKiAxNiBiaXRzIG9yIG1vcmUgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMgb3IgbW9yZSAqLwotCi0jaWZkZWYgU01BTExfTUVESVVNCi0gICAvKiBCb3JsYW5kIEMvQysrIGFuZCBzb21lIG9sZCBNU0MgdmVyc2lvbnMgaWdub3JlIEZBUiBpbnNpZGUgdHlwZWRlZiAqLwotIyAgZGVmaW5lIEJ5dGVmIEJ5dGUgRkFSCi0jZWxzZQotICAgdHlwZWRlZiBCeXRlICBGQVIgQnl0ZWY7Ci0jZW5kaWYKLXR5cGVkZWYgY2hhciAgRkFSIGNoYXJmOwotdHlwZWRlZiBpbnQgICBGQVIgaW50ZjsKLXR5cGVkZWYgdUludCAgRkFSIHVJbnRmOwotdHlwZWRlZiB1TG9uZyBGQVIgdUxvbmdmOwotCi0jaWZkZWYgU1REQwotICAgdHlwZWRlZiB2b2lkIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIHZvaWQgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgdm9pZCAgICAgICAqdm9pZHA7Ci0jZWxzZQotICAgdHlwZWRlZiBCeXRlIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIEJ5dGUgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7Ci0jZW5kaWYKLQotI2lmIDAgICAgICAgICAgIC8qIEhBVkVfVU5JU1REX0ggLS0gdGhpcyBsaW5lIGlzIHVwZGF0ZWQgYnkgLi9jb25maWd1cmUgKi8KLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3Igb2ZmX3QgKi8KLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGRlZmluZSB6X29mZl90IG9mZl90Ci0jZW5kaWYKLSNpZm5kZWYgU0VFS19TRVQKLSMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwotIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KLSMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCi0jZW5kaWYKLSNpZm5kZWYgel9vZmZfdAotIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgRkFSCi0jICAgIHVuZGVmIEZBUgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlRW5kLCJERUVORCIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdDJfLCJJTklOMiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU2V0RGljdGlvbmFyeSwiSU5TRURJIikKLSMgICBwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX2Zhc3QsIklORkEiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklOQ09QWSIpCi0jZW5kaWYKLQotI2VuZGlmIC8qIFpDT05GX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96bGliLjMgYi9Nb2R1bGVzL3psaWIvemxpYi4zCmluZGV4IDI3YWRjNGMuLjAxNjBlNjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96bGliLjMKKysrIGIvTW9kdWxlcy96bGliL3psaWIuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBaTElCIDMgIjE5IEFwciAyMDEwIgorLlRIIFpMSUIgMyAiMjggQXByIDIwMTMiCiAuU0ggTkFNRQogemxpYiBcLSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnkKIC5TSCBTWU5PUFNJUwpAQCAtMzYsOSArMzYsOSBAQAogLklSIHpsaWIuaCAuCiBUaGUgZGlzdHJpYnV0aW9uIHNvdXJjZSBpbmNsdWRlcyBleGFtcGxlcyBvZiB1c2Ugb2YgdGhlIGxpYnJhcnkKIGluIHRoZSBmaWxlcwotLkkgZXhhbXBsZS5jCisuSSB0ZXN0L2V4YW1wbGUuYwogYW5kCi0uSVIgbWluaWd6aXAuYywKKy5JUiB0ZXN0L21pbmlnemlwLmMsCiBhcyB3ZWxsIGFzIG90aGVyIGV4YW1wbGVzIGluIHRoZQogLklSIGV4YW1wbGVzLwogZGlyZWN0b3J5LgpAQCAtNjUsNyArNjUsNyBAQAogd3JpdHRlbiBieSBBLk0uIEt1Y2hsaW5nIChhbWtAbWFnbmV0LmNvbSksCiBpcyBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnM6CiAuSVAKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvbGliL21vZHVsZS16bGliLmh0bWwKK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS96bGliLmh0bWwKIC5MUAogLkkgemxpYgogaXMgYnVpbHQgaW50bwpAQCAtOTUsMTEgKzk1LDExIEBACiBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkMKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlczoKIC5JUAotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoZm9yIHRoZSB6bGliIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCiAuYnIKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0IChmb3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEgKGZvciB0aGUgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0KQogLmJyCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUyLnR4dCAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUyIChmb3IgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKIC5MUAogTWFyayBOZWxzb24gd3JvdGUgYW4gYXJ0aWNsZSBhYm91dAogLkkgemxpYgpAQCAtMTI1LDggKzEyNSw4IEBACiBTZW5kIHF1ZXN0aW9ucyBhbmQvb3IgY29tbWVudHMgdG8gemxpYkBnemlwLm9yZywKIG9yIChmb3IgdGhlIFdpbmRvd3MgRExMIHZlcnNpb24pIHRvIEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSkuCiAuU0ggQVVUSE9SUwotVmVyc2lvbiAxLjIuNQotQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCitWZXJzaW9uIDEuMi44CitDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKIGFuZCBNYXJrIEFkbGVyIChtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1KS4KIC5MUAogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMtaXMsIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIuaCBiL01vZHVsZXMvemxpYi96bGliLmgKaW5kZXggNzlhMTg3Yy4uM2UwYzc2NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIuaAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5oCkBAIC0xLDcgKzEsNyBAQAogLyogemxpYi5oIC0tIGludGVyZmFjZSBvZiB0aGUgJ3psaWInIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gIHZlcnNpb24gMS4yLjUsIEFwcmlsIDE5dGgsIDIwMTAKKyAgdmVyc2lvbiAxLjIuOCwgQXByaWwgMjh0aCwgMjAxMwogCi0gIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKQEAgLTI0LDggKzI0LDggQEAKIAogCiAgIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MgKFJlcXVlc3QgZm9yCi0gIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0Ci0gICh6bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCisgIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAKKyAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MSAoZGVmbGF0ZSBmb3JtYXQpIGFuZCByZmMxOTUyIChnemlwIGZvcm1hdCkuCiAqLwogCiAjaWZuZGVmIFpMSUJfSApAQCAtMzcsMTEgKzM3LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjUiCi0jZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTI1MAorI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi44IgorI2RlZmluZSBaTElCX1ZFUk5VTSAweDEyODAKICNkZWZpbmUgWkxJQl9WRVJfTUFKT1IgMQogI2RlZmluZSBaTElCX1ZFUl9NSU5PUiAyCi0jZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDUKKyNkZWZpbmUgWkxJQl9WRVJfUkVWSVNJT04gOAogI2RlZmluZSBaTElCX1ZFUl9TVUJSRVZJU0lPTiAwCiAKIC8qCkBAIC04MywxNSArODMsMTUgQEAKIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZTsKIAogdHlwZWRlZiBzdHJ1Y3Qgel9zdHJlYW1fcyB7Ci0gICAgQnl0ZWYgICAgKm5leHRfaW47ICAvKiBuZXh0IGlucHV0IGJ5dGUgKi8KKyAgICB6X2NvbnN0IEJ5dGVmICpuZXh0X2luOyAgICAgLyogbmV4dCBpbnB1dCBieXRlICovCiAgICAgdUludCAgICAgYXZhaWxfaW47ICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfaW4gKi8KLSAgICB1TG9uZyAgICB0b3RhbF9pbjsgIC8qIHRvdGFsIG5iIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCisgICAgdUxvbmcgICAgdG90YWxfaW47ICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KIAogICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovCiAgICAgdUludCAgICAgYXZhaWxfb3V0OyAvKiByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBuZXh0X291dCAqLwotICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbmIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLworICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKi8KIAotICAgIGNoYXIgICAgICptc2c7ICAgICAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCisgICAgel9jb25zdCBjaGFyICptc2c7ICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KICAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICpzdGF0ZTsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovCiAKICAgICBhbGxvY19mdW5jIHphbGxvYzsgIC8qIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlICovCkBAIC0zMjcsOCArMzI3LDkgQEAKIAogICAgIFpfRklOSVNIIGNhbiBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0IGlmIGFsbCB0aGUgY29tcHJlc3Npb24KICAgaXMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiAgSW4gdGhpcyBjYXNlLCBhdmFpbF9vdXQgbXVzdCBiZSBhdCBsZWFzdCB0aGUKLSAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgSWYgZGVmbGF0ZSBkb2VzIG5vdCByZXR1cm4KLSAgWl9TVFJFQU1fRU5ELCB0aGVuIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgVGhlbiBkZWZsYXRlIGlzIGd1YXJhbnRlZWQgdG8KKyAgcmV0dXJuIFpfU1RSRUFNX0VORC4gIElmIG5vdCBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCBkZWZsYXRlIHdpbGwKKyAgbm90IHJldHVybiBaX1NUUkVBTV9FTkQsIGFuZCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCiAKICAgICBkZWZsYXRlKCkgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgaW5wdXQgcmVhZAogICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX2luIGJ5dGVzKS4KQEAgLTQ1MSwyMyArNDUyLDI5IEBACiAgIGVycm9yLiAgSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcCAoYQogICBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUgc2V0IHRvIFpfRklOSVNILiAgSW4KICAgdGhpcyBjYXNlIGFsbCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCBhbmQgYWxsIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQ7Ci0gIGF2YWlsX291dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgdW5jb21wcmVzc2VkIGRhdGEuICAoVGhlIHNpemUKLSAgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4gc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgZm9yIHRoaXMKLSAgcHVycG9zZS4pIFRoZSBuZXh0IG9wZXJhdGlvbiBvbiB0aGlzIHN0cmVhbSBtdXN0IGJlIGluZmxhdGVFbmQgdG8gZGVhbGxvY2F0ZQotICB0aGUgZGVjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZSB1c2Ugb2YgWl9GSU5JU0ggaXMgbmV2ZXIgcmVxdWlyZWQsIGJ1dCBjYW4gYmUKLSAgdXNlZCB0byBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIG1heSBiZSB1c2VkIGZvciB0aGUgc2luZ2xlCi0gIGluZmxhdGUoKSBjYWxsLgorICBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGZvciB0aGUKKyAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiAgKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuCisgIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgdXNlIG9mIFpfRklOSVNIIGlzIG5vdAorICByZXF1aXJlZCB0byBwZXJmb3JtIGFuIGluZmxhdGlvbiBpbiBvbmUgc3RlcC4gIEhvd2V2ZXIgaXQgbWF5IGJlIHVzZWQgdG8KKyAgaW5mb3JtIGluZmxhdGUgdGhhdCBhIGZhc3RlciBhcHByb2FjaCBjYW4gYmUgdXNlZCBmb3IgdGhlIHNpbmdsZSBpbmZsYXRlKCkKKyAgY2FsbC4gIFpfRklOSVNIIGFsc28gaW5mb3JtcyBpbmZsYXRlIHRvIG5vdCBtYWludGFpbiBhIHNsaWRpbmcgd2luZG93IGlmIHRoZQorICBzdHJlYW0gY29tcGxldGVzLCB3aGljaCByZWR1Y2VzIGluZmxhdGUncyBtZW1vcnkgZm9vdHByaW50LiAgSWYgdGhlIHN0cmVhbQorICBkb2VzIG5vdCBjb21wbGV0ZSwgZWl0aGVyIGJlY2F1c2Ugbm90IGFsbCBvZiB0aGUgc3RyZWFtIGlzIHByb3ZpZGVkIG9yIG5vdAorICBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCB0aGVuIGEgc2xpZGluZyB3aW5kb3cgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kCisgIGluZmxhdGUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHRvIGNvbnRpbnVlIHRoZSBvcGVyYXRpb24gYXMgaWYgWl9OT19GTFVTSCBoYWQKKyAgYmVlbiB1c2VkLgogCiAgICAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGluZmxhdGUoKSBhbHdheXMgZmx1c2hlcyBhcyBtdWNoIG91dHB1dCBhcwogICBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlciwgYW5kIGFsd2F5cyB1c2VzIHRoZSBmYXN0ZXIgYXBwcm9hY2ggb24gdGhlCi0gIGZpcnN0IGNhbGwuICBTbyB0aGUgb25seSBlZmZlY3Qgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gIGlzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpLCBhcyBub3RlZCBiZWxvdywgb3Igd2hlbiBpdCByZXR1cm5zIGVhcmx5Ci0gIGJlY2F1c2UgWl9CTE9DSyBvciBaX1RSRUVTIGlzIHVzZWQuCisgIGZpcnN0IGNhbGwuICBTbyB0aGUgZWZmZWN0cyBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGluIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlCisgIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpIGFzIG5vdGVkIGJlbG93LCB3aGVuIGluZmxhdGUoKSByZXR1cm5zIGVhcmx5CisgIHdoZW4gWl9CTE9DSyBvciBaX1RSRUVTIGlzIHVzZWQsIGFuZCB3aGVuIGluZmxhdGUoKSBhdm9pZHMgdGhlIGFsbG9jYXRpb24gb2YKKyAgbWVtb3J5IGZvciBhIHNsaWRpbmcgd2luZG93IHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4KIAogICAgICBJZiBhIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhZnRlciB0aGlzIGNhbGwgKHNlZSBpbmZsYXRlU2V0RGljdGlvbmFyeQotICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiB0aGUgZGljdGlvbmFyeQorICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgdGhlIGRpY3Rpb25hcnkKICAgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfTkVFRF9ESUNUOyBvdGhlcndpc2UgaXQgc2V0cwotICBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkIHNvIGZhciAodGhhdCBpcywKKyAgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAogICB0b3RhbF9vdXQgYnl0ZXMpIGFuZCByZXR1cm5zIFpfT0ssIFpfU1RSRUFNX0VORCBvciBhbiBlcnJvciBjb2RlIGFzIGRlc2NyaWJlZAogICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyCiAgIGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5ECkBAIC00NzgsNyArNDg1LDkgQEAKICAgaW5pdGlhbGl6aW5nIHdpdGggaW5mbGF0ZUluaXQyKCkuICBBbnkgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBnemlwCiAgIGhlYWRlciBpcyBub3QgcmV0YWluZWQsIHNvIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdGhhdCBpbmZvcm1hdGlvbiBzaG91bGQKICAgaW5zdGVhZCB1c2UgcmF3IGluZmxhdGUsIHNlZSBpbmZsYXRlSW5pdDIoKSBiZWxvdywgb3IgaW5mbGF0ZUJhY2soKSBhbmQKLSAgcGVyZm9ybSB0aGVpciBvd24gcHJvY2Vzc2luZyBvZiB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIuCisgIHBlcmZvcm0gdGhlaXIgb3duIHByb2Nlc3Npbmcgb2YgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyLiAgV2hlbiBwcm9jZXNzaW5nCisgIGd6aXAtd3JhcHBlZCBkZWZsYXRlIGRhdGEsIHN0cm0tPmFkbGVyMzIgaXMgc2V0IHRvIHRoZSBDUkMtMzIgb2YgdGhlIG91dHB1dAorICBwcm9kdWN0ZWQgc28gZmFyLiAgVGhlIENSQy0zMiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGd6aXAgdHJhaWxlci4KIAogICAgIGluZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0IHByb2Nlc3NlZAogICBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzCkBAIC01ODAsMTAgKzU4OSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOwogLyoKICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBzZXF1ZW5jZQotICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvciBkZWZsYXRlUmVzZXQsIGJlZm9yZSBhbnkgY2FsbAotICAgb2YgZGVmbGF0ZS4gIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQotICAgZGljdGlvbmFyeSAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4KKyAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gIFdoZW4gdXNpbmcgdGhlIHpsaWIgZm9ybWF0LCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCwgZGVmbGF0ZUluaXQyIG9yCisgICBkZWZsYXRlUmVzZXQsIGFuZCBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZS4gIFdoZW4gZG9pbmcgcmF3IGRlZmxhdGUsIHRoaXMKKyAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGVpdGhlciBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZSwgb3IgaW1tZWRpYXRlbHkKKyAgIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIGEgZGVmbGF0ZSBibG9jaywgaS5lLiBhZnRlciBhbGwgaW5wdXQgaGFzIGJlZW4KKyAgIGNvbnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIGRlbGl2ZXJlZCB3aGVuIHVzaW5nIGFueSBvZiB0aGUgZmx1c2gKKyAgIG9wdGlvbnMgWl9CTE9DSywgWl9QQVJUSUFMX0ZMVVNILCBaX1NZTkNfRkxVU0gsIG9yIFpfRlVMTF9GTFVTSC4gIFRoZQorICAgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUgZGljdGlvbmFyeSAoc2VlCisgICBpbmZsYXRlU2V0RGljdGlvbmFyeSkuCiAKICAgICAgVGhlIGRpY3Rpb25hcnkgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseQogICAgdG8gYmUgZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seQpAQCAtNjEwLDggKzYyNCw4IEBACiAgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKICAgIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUgaWYgZGVmbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhpcyBzdHJlYW0KLSAgIG9yIGlmIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgYnNvcnQpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKLSAgIHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCisgICBvciBpZiBub3QgYXQgYSBibG9jayBib3VuZGFyeSBmb3IgcmF3IGRlZmxhdGUpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcworICAgbm90IHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTY4OCw5ICs3MDIsMjkgQEAKICAgIGRlZmxhdGlvbiBvZiBzb3VyY2VMZW4gYnl0ZXMuICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZWZsYXRlSW5pdCgpIG9yCiAgICBkZWZsYXRlSW5pdDIoKSwgYW5kIGFmdGVyIGRlZmxhdGVTZXRIZWFkZXIoKSwgaWYgdXNlZC4gIFRoaXMgd291bGQgYmUgdXNlZAogICAgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBmb3IgZGVmbGF0aW9uIGluIGEgc2luZ2xlIHBhc3MsIGFuZCBzbyB3b3VsZCBiZQotICAgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuCisgICBjYWxsZWQgYmVmb3JlIGRlZmxhdGUoKS4gIElmIHRoYXQgZmlyc3QgZGVmbGF0ZSgpIGNhbGwgaXMgcHJvdmlkZWQgdGhlCisgICBzb3VyY2VMZW4gaW5wdXQgYnl0ZXMsIGFuIG91dHB1dCBidWZmZXIgYWxsb2NhdGVkIHRvIHRoZSBzaXplIHJldHVybmVkIGJ5CisgICBkZWZsYXRlQm91bmQoKSwgYW5kIHRoZSBmbHVzaCB2YWx1ZSBaX0ZJTklTSCwgdGhlbiBkZWZsYXRlKCkgaXMgZ3VhcmFudGVlZAorICAgdG8gcmV0dXJuIFpfU1RSRUFNX0VORC4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGNvbXByZXNzZWQgc2l6ZSB0bworICAgYmUgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCgpIGlmIGZsdXNoIG9wdGlvbnMgb3RoZXIKKyAgIHRoYW4gWl9GSU5JU0ggb3IgWl9OT19GTFVTSCBhcmUgdXNlZC4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVBlbmRpbmcgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJpdHMpKTsKKy8qCisgICAgIGRlZmxhdGVQZW5kaW5nKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZCBiaXRzIG9mIG91dHB1dCB0aGF0IGhhdmUKKyAgIGJlZW4gZ2VuZXJhdGVkLCBidXQgbm90IHlldCBwcm92aWRlZCBpbiB0aGUgYXZhaWxhYmxlIG91dHB1dC4gIFRoZSBieXRlcyBub3QKKyAgIHByb3ZpZGVkIHdvdWxkIGJlIGR1ZSB0byB0aGUgYXZhaWxhYmxlIG91dHB1dCBzcGFjZSBoYXZpbmcgYmVpbmcgY29uc3VtZWQuCisgICBUaGUgbnVtYmVyIG9mIGJpdHMgb2Ygb3V0cHV0IG5vdCBwcm92aWRlZCBhcmUgYmV0d2VlbiAwIGFuZCA3LCB3aGVyZSB0aGV5CisgICBhd2FpdCBtb3JlIGJpdHMgdG8gam9pbiB0aGVtIGluIG9yZGVyIHRvIGZpbGwgb3V0IGEgZnVsbCBieXRlLiAgSWYgcGVuZGluZworICAgb3IgYml0cyBhcmUgWl9OVUxMLCB0aGVuIHRob3NlIHZhbHVlcyBhcmUgbm90IHNldC4KKworICAgICBkZWZsYXRlUGVuZGluZyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisgKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkpOwpAQCAtNzAzLDggKzczNyw5IEBACiAgICB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHZhbHVlCiAgICB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuCiAKLSAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgcm9vbSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGluc2VydCB0aGUgYml0cywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzb3VyY2Ugc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNzkwLDEwICs4MjUsMTEgQEAKICAgIGlmIHRoYXQgY2FsbCByZXR1cm5lZCBaX05FRURfRElDVC4gIFRoZSBkaWN0aW9uYXJ5IGNob3NlbiBieSB0aGUgY29tcHJlc3NvcgogICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYWRsZXIzMiB2YWx1ZSByZXR1cm5lZCBieSB0aGF0IGNhbGwgb2YgaW5mbGF0ZS4KICAgIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKLSAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCi0gICBpbW1lZGlhdGVseSBhZnRlciBpbmZsYXRlSW5pdDIoKSBvciBpbmZsYXRlUmVzZXQoKSBhbmQgYmVmb3JlIGFueSBjYWxsIG9mCi0gICBpbmZsYXRlKCkgdG8gc2V0IHRoZSBkaWN0aW9uYXJ5LiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlCi0gICBkaWN0aW9uYXJ5IHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgorICAgZGVmbGF0ZVNldERpY3Rpb25hcnkpLiAgRm9yIHJhdyBpbmZsYXRlLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55CisgICB0aW1lIHRvIHNldCB0aGUgZGljdGlvbmFyeS4gIElmIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgIHdpbmRvdyBhbmQgdGhlcmUgaXMgYWxyZWFkeSBkYXRhIGluIHRoZSB3aW5kb3csIHRoZW4gdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkKKyAgIHdpbGwgYW1lbmQgd2hhdCdzIHRoZXJlLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlIGRpY3Rpb25hcnkKKyAgIHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgogCiAgICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKQEAgLTgwMywxOSArODM5LDM4IEBACiAgICBpbmZsYXRlKCkuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVmICpkaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgKmRpY3RMZW5ndGgpKTsKKy8qCisgICAgIFJldHVybnMgdGhlIHNsaWRpbmcgZGljdGlvbmFyeSBiZWluZyBtYWludGFpbmVkIGJ5IGluZmxhdGUuICBkaWN0TGVuZ3RoIGlzCisgICBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGljdGlvbmFyeSwgYW5kIHRoYXQgbWFueSBieXRlcyBhcmUgY29waWVkCisgICB0byBkaWN0aW9uYXJ5LiAgZGljdGlvbmFyeSBtdXN0IGhhdmUgZW5vdWdoIHNwYWNlLCB3aGVyZSAzMjc2OCBieXRlcyBpcworICAgYWx3YXlzIGVub3VnaC4gIElmIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgaXMgY2FsbGVkIHdpdGggZGljdGlvbmFyeSBlcXVhbCB0bworICAgWl9OVUxMLCB0aGVuIG9ubHkgdGhlIGRpY3Rpb25hcnkgbGVuZ3RoIGlzIHJldHVybmVkLCBhbmQgbm90aGluZyBpcyBjb3BpZWQuCisgICBTaW1pbGFyeSwgaWYgZGljdExlbmd0aCBpcyBaX05VTEwsIHRoZW4gaXQgaXMgbm90IHNldC4KKworICAgICBpbmZsYXRlR2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzdHJlYW0gc3RhdGUgaXMgaW5jb25zaXN0ZW50LgorKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU3luYyBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCi0gICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlIHRoZQotICAgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKKyAgICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgdW50aWwgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUKKyAgIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKICAgIGF2YWlsYWJsZSBpbnB1dCBpcyBza2lwcGVkLiAgTm8gb3V0cHV0IGlzIHByb3ZpZGVkLgogCi0gICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsIFpfQlVGX0VSUk9SCi0gICBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50IGhhcyBiZWVuCi0gICBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4gIEluIHRoZQotICAgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdG90YWxfaW4KLSAgIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlIGVycm9yIGNhc2UsCi0gICB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUgaW5wdXQgZWFjaAotICAgdGltZSwgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCisgICAgIGluZmxhdGVTeW5jIHNlYXJjaGVzIGZvciBhIDAwIDAwIEZGIEZGIHBhdHRlcm4gaW4gdGhlIGNvbXByZXNzZWQgZGF0YS4KKyAgIEFsbCBmdWxsIGZsdXNoIHBvaW50cyBoYXZlIHRoaXMgcGF0dGVybiwgYnV0IG5vdCBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcworICAgcGF0dGVybiBhcmUgZnVsbCBmbHVzaCBwb2ludHMuCisKKyAgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgcG9zc2libGUgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwKKyAgIFpfQlVGX0VSUk9SIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQKKyAgIGhhcyBiZWVuIGZvdW5kLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50LgorICAgSW4gdGhlIHN1Y2Nlc3MgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IGN1cnJlbnQgdmFsdWUgb2YKKyAgIHRvdGFsX2luIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlCisgICBlcnJvciBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUKKyAgIGlucHV0IGVhY2ggdGltZSwgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTk2MiwxMiArMTAxNywxMyBAQAogICAgICBTZWUgaW5mbGF0ZUJhY2soKSBmb3IgdGhlIHVzYWdlIG9mIHRoZXNlIHJvdXRpbmVzLgogCiAgICAgIGluZmxhdGVCYWNrSW5pdCB3aWxsIHJldHVybiBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGFueSBvZgotICAgdGhlIHBhcmFtYXRlcnMgYXJlIGludmFsaWQsIFpfTUVNX0VSUk9SIGlmIHRoZSBpbnRlcm5hbCBzdGF0ZSBjb3VsZCBub3QgYmUKKyAgIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgY291bGQgbm90IGJlCiAgICBhbGxvY2F0ZWQsIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkb2VzIG5vdCBtYXRjaAogICAgdGhlIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlLgogKi8KIAotdHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9GKCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7Cit0eXBlZGVmIHVuc2lnbmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIgKikpOwogdHlwZWRlZiBpbnQgKCpvdXRfZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVkKSk7CiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2sgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtOTc1LDExICsxMDMxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZnVuYyBvdXQsIHZvaWQgRkFSICpvdXRfZGVzYykpOwogLyoKICAgICAgaW5mbGF0ZUJhY2soKSBkb2VzIGEgcmF3IGluZmxhdGUgd2l0aCBhIHNpbmdsZSBjYWxsIHVzaW5nIGEgY2FsbC1iYWNrCi0gICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gaW5mbGF0ZSgpIGZvcgotICAgZmlsZSBpL28gYXBwbGljYXRpb25zIGluIHRoYXQgaXQgYXZvaWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUgb3V0cHV0IGFuZCB0aGUKLSAgIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dCBidWZmZXIuICBUaGlzCi0gICBmdW5jdGlvbiB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dCBidWZmZXIgcGFzc2VkIGJ5Ci0gICB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCisgICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IHRoYW4KKyAgIGluZmxhdGUoKSBmb3IgZmlsZSBpL28gYXBwbGljYXRpb25zLCBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5aW5nIGJldHdlZW4gdGhlCisgICBvdXRwdXQgYW5kIHRoZSBzbGlkaW5nIHdpbmRvdyBieSBzaW1wbHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlci4gIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyIG9uIG1vZGVybiBDUFVzIHdoZW4gdXNlZCB3aXRoIGxhcmdlCisgICBidWZmZXJzLiAgaW5mbGF0ZUJhY2soKSB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dAorICAgYnVmZmVyIHBhc3NlZCBieSB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCiAKICAgICAgaW5mbGF0ZUJhY2tJbml0KCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlCiAgICBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aCB0aGUgdXNlci1wcm92aWRlZCB3aW5kb3cgYnVmZmVyLgpAQCAtMTA4OCw2ICsxMTQ1LDcgQEAKICAgICAgMjctMzE6IDAgKHJlc2VydmVkKQogICovCiAKKyNpZm5kZWYgWl9TT0xPCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHV0aWxpdHkgZnVuY3Rpb25zICovCiAKQEAgLTExNDksMTAgKzEyMDcsMTEgQEAKIAogICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKLSAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4KKyAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4gIEluCisgICB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20sIHVuY29tcHJlc3MoKSB3aWxsIGZpbGwgdGhlIG91dHB1dAorICAgYnVmZmVyIHdpdGggdGhlIHVuY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoYXQgcG9pbnQuCiAqLwogCi0KICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgZmlsZSBhY2Nlc3MgZnVuY3Rpb25zICovCiAKIC8qCkBAIC0xMTYyLDcgKzEyMjEsNyBAQAogICAgd3JhcHBlciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4KICovCiAKLXR5cGVkZWYgdm9pZHAgZ3pGaWxlOyAgICAgICAvKiBvcGFxdWUgZ3ppcCBmaWxlIGRlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zICpnekZpbGU7ICAgIC8qIHNlbWktb3BhcXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovCiAKIC8qCiBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOwpAQCAtMTE3MiwxMyArMTIzMSwyOCBAQAogICAgYSBzdHJhdGVneTogJ2YnIGZvciBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gnIGZvciBIdWZmbWFuLW9ubHkKICAgIGNvbXByZXNzaW9uIGFzIGluICJ3YjFoIiwgJ1InIGZvciBydW4tbGVuZ3RoIGVuY29kaW5nIGFzIGluICJ3YjFSIiwgb3IgJ0YnCiAgICBmb3IgZml4ZWQgY29kZSBjb21wcmVzc2lvbiBhcyBpbiAid2I5RiIuICAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgotICAgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSBBbHNvICJhIgotICAgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwgYmUKLSAgIHdyaXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IsIHNpbmNlIHJlYWRpbmcKLSAgIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLgorICAgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSAgJ1QnIHdpbGwKKyAgIHJlcXVlc3QgdHJhbnNwYXJlbnQgd3JpdGluZyBvciBhcHBlbmRpbmcgd2l0aCBubyBjb21wcmVzc2lvbiBhbmQgbm90IHVzaW5nCisgICB0aGUgZ3ppcCBmb3JtYXQuCisKKyAgICAgImEiIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgInciIHRvIHJlcXVlc3QgdGhhdCB0aGUgZ3ppcCBzdHJlYW0gdGhhdCB3aWxsCisgICBiZSB3cml0dGVuIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgIisiIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLCBzaW5jZQorICAgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgc2FtZSBnemlwIGZpbGUgaXMgbm90IHN1cHBvcnRlZC4gIFRoZSBhZGRpdGlvbiBvZgorICAgIngiIHdoZW4gd3JpdGluZyB3aWxsIGNyZWF0ZSB0aGUgZmlsZSBleGNsdXNpdmVseSwgd2hpY2ggZmFpbHMgaWYgdGhlIGZpbGUKKyAgIGFscmVhZHkgZXhpc3RzLiAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQsIHRoZSBhZGRpdGlvbiBvZiAiZSIgd2hlbgorICAgcmVhZGluZyBvciB3cml0aW5nIHdpbGwgc2V0IHRoZSBmbGFnIHRvIGNsb3NlIHRoZSBmaWxlIG9uIGFuIGV4ZWN2ZSgpIGNhbGwuCisKKyAgICAgVGhlc2UgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGd6aXAsIHdpbGwgcmVhZCBhbmQgZGVjb2RlIGEgc2VxdWVuY2Ugb2YgZ3ppcAorICAgc3RyZWFtcyBpbiBhIGZpbGUuICBUaGUgYXBwZW5kIGZ1bmN0aW9uIG9mIGd6b3BlbigpIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZQorICAgc3VjaCBhIGZpbGUuICAoQWxzbyBzZWUgZ3pmbHVzaCgpIGZvciBhbm90aGVyIHdheSB0byBkbyB0aGlzLikgIFdoZW4KKyAgIGFwcGVuZGluZywgZ3pvcGVuIGRvZXMgbm90IHRlc3Qgd2hldGhlciB0aGUgZmlsZSBiZWdpbnMgd2l0aCBhIGd6aXAgc3RyZWFtLAorICAgbm9yIGRvZXMgaXQgbG9vayBmb3IgdGhlIGVuZCBvZiB0aGUgZ3ppcCBzdHJlYW1zIHRvIGJlZ2luIGFwcGVuZGluZy4gIGd6b3BlbgorICAgd2lsbCBzaW1wbHkgYXBwZW5kIGEgZ3ppcCBzdHJlYW0gdG8gdGhlIGV4aXN0aW5nIGZpbGUuCiAKICAgICAgZ3pvcGVuIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbiBnemlwIGZvcm1hdDsgaW4gdGhpcwotICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgorICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLiAgV2hlbgorICAgcmVhZGluZywgdGhpcyB3aWxsIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgbG9va2luZyBmb3IgdGhlIG1hZ2ljIHR3by0KKyAgIGJ5dGUgZ3ppcCBoZWFkZXIuCiAKICAgICAgZ3pvcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLCBpZiB0aGVyZSB3YXMKICAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIGd6RmlsZSBzdGF0ZSwgb3IgaWYgYW4gaW52YWxpZCBtb2RlIHdhcwpAQCAtMTE5Nyw3ICsxMjcxLDExIEBACiAgICBkZXNjcmlwdG9yIGZkLCBqdXN0IGxpa2UgZmNsb3NlKGZkb3BlbihmZCwgbW9kZSkpIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yCiAgICBmZC4gIElmIHlvdSB3YW50IHRvIGtlZXAgZmQgb3BlbiwgdXNlIGZkID0gZHVwKGZkX2tlZXApOyBneiA9IGd6ZG9wZW4oZmQsCiAgICBtb2RlKTsuICBUaGUgZHVwbGljYXRlZCBkZXNjcmlwdG9yIHNob3VsZCBiZSBzYXZlZCB0byBhdm9pZCBhIGxlYWssIHNpbmNlCi0gICBnemRvcGVuIGRvZXMgbm90IGNsb3NlIGZkIGlmIGl0IGZhaWxzLgorICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4gIElmIHlvdSBhcmUgdXNpbmcgZmlsZW5vKCkgdG8gZ2V0IHRoZQorICAgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBGSUxFICosIHRoZW4geW91IHdpbGwgaGF2ZSB0byB1c2UgZHVwKCkgdG8gYXZvaWQKKyAgIGRvdWJsZS1jbG9zZSgpaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBCb3RoIGd6Y2xvc2UoKSBhbmQgZmNsb3NlKCkgd2lsbAorICAgY2xvc2UgdGhlIGFzc29jaWF0ZWQgZmlsZSBkZXNjcmlwdG9yLCBzbyB0aGV5IG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgZmlsZQorICAgZGVzY3JpcHRvcnMuCiAKICAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCiAgICBnekZpbGUgc3RhdGUsIGlmIGFuIGludmFsaWQgbW9kZSB3YXMgc3BlY2lmaWVkIChhbiAncicsICd3Jywgb3IgJ2EnIHdhcyBub3QKQEAgLTEyMzUsMTQgKzEzMTMsMjYgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pyZWFkIE9GKChnekZpbGUgZmlsZSwgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pKTsKIC8qCiAgICAgIFJlYWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gIElmCi0gICB0aGUgaW5wdXQgZmlsZSB3YXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZlbiBudW1iZXIgb2YKLSAgIGJ5dGVzIGludG8gdGhlIGJ1ZmZlci4KKyAgIHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCisgICBieXRlcyBpbnRvIHRoZSBidWZmZXIgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZS4KIAogICAgICBBZnRlciByZWFjaGluZyB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaW4gdGhlIGlucHV0LCBnenJlYWQgd2lsbCBjb250aW51ZQotICAgdG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbSwgb3IgZmFpbGluZyB0aGF0LCByZWFkaW5nIHRoZSByZXN0Ci0gICBvZiB0aGUgaW5wdXQgZmlsZSBkaXJlY3RseSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBUaGUgZW50aXJlIGlucHV0IGZpbGUKLSAgIHdpbGwgYmUgcmVhZCBpZiBnenJlYWQgaXMgY2FsbGVkIHVudGlsIGl0IHJldHVybnMgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQKLSAgIGxlbi4KKyAgIHRvIHJlYWQsIGxvb2tpbmcgZm9yIGFub3RoZXIgZ3ppcCBzdHJlYW0uICBBbnkgbnVtYmVyIG9mIGd6aXAgc3RyZWFtcyBtYXkgYmUKKyAgIGNvbmNhdGVuYXRlZCBpbiB0aGUgaW5wdXQgZmlsZSwgYW5kIHdpbGwgYWxsIGJlIGRlY29tcHJlc3NlZCBieSBnenJlYWQoKS4KKyAgIElmIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZ3ppcCBzdHJlYW0gaXMgZW5jb3VudGVyZWQgYWZ0ZXIgYSBnemlwIHN0cmVhbSwKKyAgIHRoYXQgcmVtYWluaW5nIHRyYWlsaW5nIGdhcmJhZ2UgaXMgaWdub3JlZCAoYW5kIG5vIGVycm9yIGlzIHJldHVybmVkKS4KKworICAgICBnenJlYWQgY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGd6aXAgZmlsZSB0aGF0IGlzIGJlaW5nIGNvbmN1cnJlbnRseSB3cml0dGVuLgorICAgVXBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgZ3pyZWFkIHdpbGwgcmV0dXJuIHdpdGggdGhlIGF2YWlsYWJsZQorICAgZGF0YS4gIElmIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGd6ZXJyb3IgaXMgWl9PSyBvciBaX0JVRl9FUlJPUiwgdGhlbgorICAgZ3pjbGVhcmVyciBjYW4gYmUgdXNlZCB0byBjbGVhciB0aGUgZW5kIG9mIGZpbGUgaW5kaWNhdG9yIGluIG9yZGVyIHRvIHBlcm1pdAorICAgZ3pyZWFkIHRvIGJlIHRyaWVkIGFnYWluLiAgWl9PSyBpbmRpY2F0ZXMgdGhhdCBhIGd6aXAgc3RyZWFtIHdhcyBjb21wbGV0ZWQKKyAgIG9uIHRoZSBsYXN0IGd6cmVhZC4gIFpfQlVGX0VSUk9SIGluZGljYXRlcyB0aGF0IHRoZSBpbnB1dCBmaWxlIGVuZGVkIGluIHRoZQorICAgbWlkZGxlIG9mIGEgZ3ppcCBzdHJlYW0uICBOb3RlIHRoYXQgZ3pyZWFkIGRvZXMgbm90IHJldHVybiAtMSBpbiB0aGUgZXZlbnQKKyAgIG9mIGFuIGluY29tcGxldGUgZ3ppcCBzdHJlYW0uICBUaGlzIGVycm9yIGlzIGRlZmVycmVkIHVudGlsIGd6Y2xvc2UoKSwgd2hpY2gKKyAgIHdpbGwgcmV0dXJuIFpfQlVGX0VSUk9SIGlmIHRoZSBsYXN0IGd6cmVhZCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgZ3ppcAorICAgc3RyZWFtLiAgQWx0ZXJuYXRpdmVseSwgZ3plcnJvciBjYW4gYmUgdXNlZCBiZWZvcmUgZ3pjbG9zZSB0byBkZXRlY3QgdGhpcworICAgY2FzZS4KIAogICAgICBnenJlYWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSByZWFkLCBsZXNzIHRoYW4KICAgIGxlbiBmb3IgZW5kIG9mIGZpbGUsIG9yIC0xIGZvciBlcnJvci4KQEAgLTEyNTYsNyArMTM0Niw3IEBACiAgICBlcnJvci4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CitaRVhURVJOIGludCBaRVhQT1JUVkEgZ3pwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOwogLyoKICAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3VtZW50cyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVyCiAgICBjb250cm9sIG9mIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiAgZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9mCkBAIC0xMzAxLDcgKzEzOTEsMTAgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOwogLyoKICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlIG9yIC0xCi0gICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgorICAgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBtYWNybyBmb3Igc3BlZWQuCisgICBBcyBzdWNoLCBpdCBkb2VzIG5vdCBkbyBhbGwgb2YgdGhlIGNoZWNraW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgZG8uICBJLmUuCisgICBpdCBkb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgZmlsZSBpcyBOVUxMLCBub3Igd2hldGhlciB0aGUgc3RydWN0dXJlIGZpbGUKKyAgIHBvaW50cyB0byBoYXMgYmVlbiBjbG9iYmVyZWQgb3Igbm90LgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenVuZ2V0YyBPRigoaW50IGMsIGd6RmlsZSBmaWxlKSk7CkBAIC0xMzk3LDkgKzE0OTAsNyBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemRpcmVjdCBPRigoZ3pGaWxlIGZpbGUpKTsKIC8qCiAgICAgIFJldHVybnMgdHJ1ZSAoMSkgaWYgZmlsZSBpcyBiZWluZyBjb3BpZWQgZGlyZWN0bHkgd2hpbGUgcmVhZGluZywgb3IgZmFsc2UKLSAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLiAgVGhpcyBzdGF0ZSBjYW4gY2hhbmdlIGZyb20KLSAgIGZhbHNlIHRvIHRydWUgd2hpbGUgcmVhZGluZyB0aGUgaW5wdXQgZmlsZSBpZiB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaXMKLSAgIHJlYWNoZWQsIGJ1dCBpcyBmb2xsb3dlZCBieSBkYXRhIHRoYXQgaXMgbm90IGFub3RoZXIgZ3ppcCBzdHJlYW0uCisgICAoMCkgaWYgZmlsZSBpcyBhIGd6aXAgc3RyZWFtIGJlaW5nIGRlY29tcHJlc3NlZC4KIAogICAgICBJZiB0aGUgaW5wdXQgZmlsZSBpcyBlbXB0eSwgZ3pkaXJlY3QoKSB3aWxsIHJldHVybiB0cnVlLCBzaW5jZSB0aGUgaW5wdXQKICAgIGRvZXMgbm90IGNvbnRhaW4gYSBnemlwIHN0cmVhbS4KQEAgLTE0MDgsNiArMTQ5OSwxMyBAQAogICAgY2F1c2UgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQgdG8gYWxsb3cgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgaWYgaXQKICAgIGlzIGEgZ3ppcCBmaWxlLiAgVGhlcmVmb3JlIGlmIGd6YnVmZmVyKCkgaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKICAgIGd6ZGlyZWN0KCkuCisKKyAgICAgV2hlbiB3cml0aW5nLCBnemRpcmVjdCgpIHJldHVybnMgdHJ1ZSAoMSkgaWYgdHJhbnNwYXJlbnQgd3JpdGluZyB3YXMKKyAgIHJlcXVlc3RlZCAoIndUIiBmb3IgdGhlIGd6b3BlbigpIG1vZGUpLCBvciBmYWxzZSAoMCkgb3RoZXJ3aXNlLiAgKE5vdGU6CisgICBnemRpcmVjdCgpIGlzIG5vdCBuZWVkZWQgd2hlbiB3cml0aW5nLiAgVHJhbnNwYXJlbnQgd3JpdGluZyBtdXN0IGJlCisgICBleHBsaWNpdGx5IHJlcXVlc3RlZCwgc28gdGhlIGFwcGxpY2F0aW9uIGFscmVhZHkga25vd3MgdGhlIGFuc3dlci4gIFdoZW4KKyAgIGxpbmtpbmcgc3RhdGljYWxseSwgdXNpbmcgZ3pkaXJlY3QoKSB3aWxsIGluY2x1ZGUgYWxsIG9mIHRoZSB6bGliIGNvZGUgZm9yCisgICBnemlwIGZpbGUgcmVhZGluZyBhbmQgZGVjb21wcmVzc2lvbiwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmVkLikKICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBPRigoZ3pGaWxlIGZpbGUpKTsKQEAgLTE0MTksNyArMTUxNyw4IEBACiAgICBtdXN0IG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYWxsb2NhdGlvbi4KIAogICAgICBnemNsb3NlIHdpbGwgcmV0dXJuIFpfU1RSRUFNX0VSUk9SIGlmIGZpbGUgaXMgbm90IHZhbGlkLCBaX0VSUk5PIG9uIGEKLSAgIGZpbGUgb3BlcmF0aW9uIGVycm9yLCBvciBaX09LIG9uIHN1Y2Nlc3MuCisgICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgWl9NRU1fRVJST1IgaWYgb3V0IG9mIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlCisgICBsYXN0IHJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLCBvciBaX09LIG9uIHN1Y2Nlc3MuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6Y2xvc2VfciBPRigoZ3pGaWxlIGZpbGUpKTsKQEAgLTE0NTcsNiArMTU1Niw3IEBACiAgICBmaWxlIHRoYXQgaXMgYmVpbmcgd3JpdHRlbiBjb25jdXJyZW50bHkuCiAqLwogCisjZW5kaWYgLyogIVpfU09MTyAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KIApAQCAtMTQ5MiwxNiArMTU5MiwxNyBAQAogICAgICBDb21iaW5lIHR3byBBZGxlci0zMiBjaGVja3N1bXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywgc2VxMQogICAgYW5kIHNlcTIgd2l0aCBsZW5ndGhzIGxlbjEgYW5kIGxlbjIsIEFkbGVyLTMyIGNoZWNrc3VtcyB3ZXJlIGNhbGN1bGF0ZWQgZm9yCiAgICBlYWNoLCBhZGxlcjEgYW5kIGFkbGVyMi4gIGFkbGVyMzJfY29tYmluZSgpIHJldHVybnMgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mCi0gICBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLgorICAgc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5IGFkbGVyMSwgYWRsZXIyLCBhbmQgbGVuMi4gIE5vdGUKKyAgIHRoYXQgdGhlIHpfb2ZmX3QgdHlwZSAobGlrZSBvZmZfdCkgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGxlbjIgaXMKKyAgIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGhhcyBubyBtZWFuaW5nIG9yIHV0aWxpdHkuCiAqLwogCiBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzIgICBPRigodUxvbmcgY3JjLCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbikpOwogLyoKICAgICAgVXBkYXRlIGEgcnVubmluZyBDUkMtMzIgd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQgcmV0dXJuIHRoZQogICAgdXBkYXRlZCBDUkMtMzIuICBJZiBidWYgaXMgWl9OVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVpcmVkCi0gICBpbml0aWFsIHZhbHVlIGZvciB0aGUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MKLSAgIGNvbXBsZW1lbnQpIGlzIHBlcmZvcm1lZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUKLSAgIGFwcGxpY2F0aW9uLgorICAgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyYy4gIFByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncyBjb21wbGVtZW50KSBpcworICAgcGVyZm9ybWVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZSBhcHBsaWNhdGlvbi4KIAogICAgVXNhZ2UgZXhhbXBsZToKIApAQCAtMTU0NCwxNyArMTY0NSw0MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX3NpemUpKTsKICNkZWZpbmUgZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIFwKLSAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUluaXQoc3RybSkgXAotICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCiAgICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAotICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCi0gICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlQmFja0luaXQoc3RybSwgd2luZG93Qml0cywgd2luZG93KSBcCiAgICAgICAgIGluZmxhdGVCYWNrSW5pdF8oKHN0cm0pLCAod2luZG93Qml0cyksICh3aW5kb3cpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKworI2lmbmRlZiBaX1NPTE8KKworLyogZ3pnZXRjKCkgbWFjcm8gYW5kIGl0cyBzdXBwb3J0aW5nIGZ1bmN0aW9uIGFuZCBleHBvc2VkIGRhdGEgc3RydWN0dXJlLiAgTm90ZQorICogdGhhdCB0aGUgcmVhbCBpbnRlcm5hbCBzdGF0ZSBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBleHBvc2VkIHN0cnVjdHVyZS4KKyAqIFRoaXMgYWJicmV2aWF0ZWQgc3RydWN0dXJlIGV4cG9zZXMganVzdCBlbm91Z2ggZm9yIHRoZSBnemdldGMoKSBtYWNyby4gIFRoZQorICogdXNlciBzaG91bGQgbm90IG1lc3Mgd2l0aCB0aGVzZSBleHBvc2VkIGVsZW1lbnRzLCBzaW5jZSB0aGVpciBuYW1lcyBvcgorICogYmVoYXZpb3IgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHBlcmhhcHMgZXZlbiBjYXByaWNpb3VzbHkuICBUaGV5IGNhbgorICogb25seSBiZSB1c2VkIGJ5IHRoZSBnemdldGMoKSBtYWNyby4gIFlvdSBoYXZlIGJlZW4gd2FybmVkLgorICovCitzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgdW5zaWduZWQgY2hhciAqbmV4dDsKKyAgICB6X29mZjY0X3QgcG9zOworfTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjXyBPRigoZ3pGaWxlIGZpbGUpKTsgIC8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIHVuZGVmIHpfZ3pnZXRjCisjICBkZWZpbmUgel9nemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkKKyNlbHNlCisjICBkZWZpbmUgZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiBnemdldGMoZykpCisjZW5kaWYKIAogLyogcHJvdmlkZSA2NC1iaXQgb2Zmc2V0IGZ1bmN0aW9ucyBpZiBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQsIGFuZC9vcgogICogY2hhbmdlIHRoZSByZWd1bGFyIGZ1bmN0aW9ucyB0byA2NCBiaXRzIGlmIF9GSUxFX09GRlNFVF9CSVRTIGlzIDY0IChpZgpAQCAtMTU2Miw3ICsxNjg4LDcgQEAKICAqIGZ1bmN0aW9ucyBhcmUgY2hhbmdlZCB0byA2NCBiaXRzKSAtLSBpbiBjYXNlIHRoZXNlIGFyZSBzZXQgb24gc3lzdGVtcwogICogd2l0aG91dCBsYXJnZSBmaWxlIHN1cHBvcnQsIF9MRlM2NF9MQVJHRUZJTEUgbXVzdCBhbHNvIGJlIHRydWUKICAqLwotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWZkZWYgWl9MQVJHRTY0CiAgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOwogICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOwogICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CkBAIC0xNTcxLDE0ICsxNjk3LDIzIEBACiAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmNjRfdCkpOwogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChaTElCX0lOVEVSTkFMKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIF9MRlM2NF9MQVJHRUZJTEUtMAotIyAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAotIyAgZGVmaW5lIGd6c2VlayBnenNlZWs2NAotIyAgZGVmaW5lIGd6dGVsbCBnenRlbGw2NAotIyAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKLSMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjcmMzMl9jb21iaW5lIGNyYzMyX2NvbWJpbmU2NAotIyAgaWZkZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorI2lmICFkZWZpbmVkKFpMSUJfSU5URVJOQUwpICYmIGRlZmluZWQoWl9XQU5UNjQpCisjICBpZmRlZiBaX1BSRUZJWF9TRVQKKyMgICAgZGVmaW5lIHpfZ3pvcGVuIHpfZ3pvcGVuNjQKKyMgICAgZGVmaW5lIHpfZ3pzZWVrIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIHpfZ3p0ZWxsIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIHpfZ3pvZmZzZXQgel9nem9mZnNldDY0CisjICAgIGRlZmluZSB6X2FkbGVyMzJfY29tYmluZSB6X2FkbGVyMzJfY29tYmluZTY0CisjICAgIGRlZmluZSB6X2NyYzMyX2NvbWJpbmUgel9jcmMzMl9jb21iaW5lNjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAorIyAgICBkZWZpbmUgZ3pzZWVrIGd6c2VlazY0CisjICAgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBhZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5lNjQKKyMgIGVuZGlmCisjICBpZm5kZWYgWl9MQVJHRTY0CiAgICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CiAgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmX3QsIGludCkpOwogICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CkBAIC0xNTk1LDYgKzE3MzAsMTMgQEAKICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICNlbmRpZgogCisjZWxzZSAvKiBaX1NPTE8gKi8KKworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisKKyNlbmRpZiAvKiAhWl9TT0xPICovCisKIC8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2lmICFkZWZpbmVkKFpVVElMX0gpICYmICFkZWZpbmVkKE5PX0RVTU1ZX0RFQ0wpCiAgICAgc3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsKQEAgLTE2MDMsOCArMTc0NSwyMSBAQAogLyogdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyAqLwogWkVYVEVSTiBjb25zdCBjaGFyICAgKiBaRVhQT1JUIHpFcnJvciAgICAgICAgICAgT0YoKGludCkpOwogWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3RyZWFtcCkpOwotWkVYVEVSTiBjb25zdCB1TG9uZ2YgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKK1pFWFRFUk4gY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKIFpFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlVW5kZXJtaW5lIE9GKCh6X3N0cmVhbXAsIGludCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChaX1NPTE8pCitaRVhURVJOIGd6RmlsZSAgICAgICAgIFpFWFBPUlQgZ3pvcGVuX3cgT0YoKGNvbnN0IHdjaGFyX3QgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlRWQSBnenZwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgdmEpKTsKKyMgIGVuZGlmCisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi5tYXAgYi9Nb2R1bGVzL3psaWIvemxpYi5tYXAKaW5kZXggZjI4MmQzNi4uNTVjNjY0NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIubWFwCisrKyBiL01vZHVsZXMvemxpYi96bGliLm1hcApAQCAtNjYsMyArNjYsMTggQEAKICAgICBnemNsb3NlX3I7CiAgICAgZ3pjbG9zZV93OwogfSBaTElCXzEuMi4zLjQ7CisKK1pMSUJfMS4yLjUuMSB7CisgICAgZGVmbGF0ZVBlbmRpbmc7Cit9IFpMSUJfMS4yLjMuNTsKKworWkxJQl8xLjIuNS4yIHsKKyAgICBkZWZsYXRlUmVzZXRLZWVwOworICAgIGd6Z2V0Y187CisgICAgaW5mbGF0ZVJlc2V0S2VlcDsKK30gWkxJQl8xLjIuNS4xOworCitaTElCXzEuMi43LjEgeworICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5OworICAgIGd6dnByaW50ZjsKK30gWkxJQl8xLjIuNS4yOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3p1dGlsLmMgYi9Nb2R1bGVzL3psaWIvenV0aWwuYwppbmRleCA4OThlZDM0Li4yM2QyZWJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvenV0aWwuYworKysgYi9Nb2R1bGVzL3psaWIvenV0aWwuYwpAQCAtMSwxNyArMSwyMCBAQAogLyogenV0aWwuYyAtLSB0YXJnZXQgZGVwZW5kZW50IHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1LCAyMDEwLCAyMDExLCAyMDEyIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAogLyogQCgjKSAkSWQkICovCiAKICNpbmNsdWRlICJ6dXRpbC5oIgorI2lmbmRlZiBaX1NPTE8KKyMgIGluY2x1ZGUgImd6Z3V0cy5oIgorI2VuZGlmCiAKICNpZm5kZWYgTk9fRFVNTVlfREVDTAogc3RydWN0IGludGVybmFsX3N0YXRlICAgICAge2ludCBkdW1teTt9OyAvKiBmb3IgYnVnZ3kgY29tcGlsZXJzICovCiAjZW5kaWYKIAotY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKK3pfY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKICJuZWVkIGRpY3Rpb25hcnkiLCAgICAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi8KICJzdHJlYW0gZW5kIiwgICAgICAgICAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi8KICIiLCAgICAgICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi8KQEAgLTg1LDI3ICs4OCwyNyBAQAogI2lmZGVmIEZBU1RFU1QKICAgICBmbGFncyArPSAxTCA8PCAyMTsKICNlbmRpZgotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQogIyAgaWZkZWYgTk9fdnNucHJpbnRmCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI1OworICAgIGZsYWdzICs9IDFMIDw8IDI1OwogIyAgICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVsc2UKICMgICAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbHNlCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI0OworICAgIGZsYWdzICs9IDFMIDw8IDI0OwogIyAgaWZkZWYgTk9fc25wcmludGYKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CiAjICAgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbHNlCiAjICAgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgpAQCAtMTgxLDYgKzE4NCw3IEBACiB9CiAjZW5kaWYKIAorI2lmbmRlZiBaX1NPTE8KIAogI2lmZGVmIFNZUzE2QklUCiAKQEAgLTMxNiwzICszMjAsNSBAQAogfQogCiAjZW5kaWYgLyogTVlfWkNBTExPQyAqLworCisjZW5kaWYgLyogIVpfU09MTyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3p1dGlsLmggYi9Nb2R1bGVzL3psaWIvenV0aWwuaAppbmRleCAyNThmYTg4Li4yNGFiMDZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvenV0aWwuaAorKysgYi9Nb2R1bGVzL3psaWIvenV0aWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHp1dGlsLmggLS0gaW50ZXJuYWwgaW50ZXJmYWNlIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIFpVVElMX0gKICNkZWZpbmUgWlVUSUxfSAogCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorI2lmZGVmIEhBVkVfSElEREVOCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogI2Vsc2UKICMgIGRlZmluZSBaTElCX0lOVEVSTkFMCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpbmNsdWRlICJ6bGliLmgiCiAKLSNpZmRlZiBTVERDCisjaWYgZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBpZiAhKGRlZmluZWQoX1dJTjMyX1dDRSkgJiYgZGVmaW5lZChfTVNDX1ZFUikpCiAjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPgogIyAgZW5kaWYKQEAgLTI5LDYgKzI5LDEwIEBACiAjICBpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCisjaWZkZWYgWl9TT0xPCisgICB0eXBlZGVmIGxvbmcgcHRyZGlmZl90OyAgLyogZ3Vlc3MgLS0gd2lsbCBiZSBjYXVnaHQgaWYgZ3Vlc3MgaXMgd3JvbmcgKi8KKyNlbmRpZgorCiAjaWZuZGVmIGxvY2FsCiAjICBkZWZpbmUgbG9jYWwgc3RhdGljCiAjZW5kaWYKQEAgLTQwLDEzICs0NCwxMyBAQAogdHlwZWRlZiB1c2ggRkFSIHVzaGY7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF07IC8qIGluZGV4ZWQgYnkgMi16bGliX2Vycm9yICovCitleHRlcm4gel9jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdOyAvKiBpbmRleGVkIGJ5IDItemxpYl9lcnJvciAqLwogLyogKHNpemUgZ2l2ZW4gdG8gYXZvaWQgc2lsbHkgd2FybmluZ3Mgd2l0aCBWaXN1YWwgQysrKSAqLwogCiAjZGVmaW5lIEVSUl9NU0coZXJyKSB6X2Vycm1zZ1taX05FRURfRElDVC0oZXJyKV0KIAogI2RlZmluZSBFUlJfUkVUVVJOKHN0cm0sZXJyKSBcCi0gIHJldHVybiAoc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coZXJyKSwgKGVycikpCisgIHJldHVybiAoc3RybS0+bXNnID0gRVJSX01TRyhlcnIpLCAoZXJyKSkKIC8qIFRvIGJlIHVzZWQgb25seSB3aGVuIHRoZSBzdGF0ZSBpcyBrbm93biB0byBiZSB2YWxpZCAqLwogCiAgICAgICAgIC8qIGNvbW1vbiBjb25zdGFudHMgKi8KQEAgLTc4LDE2ICs4MiwxOCBAQAogCiAjaWYgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoV0lORE9XUykgJiYgIWRlZmluZWQoV0lOMzIpKQogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDAKLSMgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0jICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQotICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KLSAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVlKCB2b2lkICpibG9jayApOwotICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7Ci0jICAgIGVsc2UKLSMgICAgICBpbmNsdWRlIDxhbGxvYy5oPgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQorICAgICAgICAgLyogQWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdvcmRzIG9ubHkgZW5hYmxlZCAqLworICAgICAgICAgdm9pZCBfQ2RlY2wgZmFyZnJlZSggdm9pZCAqYmxvY2sgKTsKKyAgICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7CisjICAgICAgZWxzZQorIyAgICAgICAgaW5jbHVkZSA8YWxsb2MuaD4KKyMgICAgICBlbmRpZgorIyAgICBlbHNlIC8qIE1TQyBvciBESkdQUCAqLworIyAgICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgICBlbmRpZgotIyAgZWxzZSAvKiBNU0Mgb3IgREpHUFAgKi8KLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTEwNywxOCArMTEzLDIwIEBACiAKICNpZmRlZiBPUzIKICMgIGRlZmluZSBPU19DT0RFICAweDA2Ci0jICBpZmRlZiBNX0k4NgorIyAgaWYgZGVmaW5lZChNX0k4NikgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoTUFDT1MpIHx8IGRlZmluZWQoVEFSR0VUX09TX01BQykKICMgIGRlZmluZSBPU19DT0RFICAweDA3Ci0jICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCi0jICAgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZkb3BlbiAqLwotIyAgZWxzZQotIyAgICBpZm5kZWYgZmRvcGVuCi0jICAgICAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29zICE9IF9fd2luMzJfb3MKKyMgICAgICBpbmNsdWRlIDx1bml4Lmg+IC8qIGZvciBmZG9wZW4gKi8KKyMgICAgZWxzZQorIyAgICAgIGlmbmRlZiBmZG9wZW4KKyMgICAgICAgIGRlZmluZSBmZG9wZW4oZmQsbW9kZSkgTlVMTCAvKiBObyBmZG9wZW4oKSAqLworIyAgICAgIGVuZGlmCiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCkBAIC0xNTMsMTQgKzE2MSwxNSBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKE1TRE9TKQogICAjcHJhZ21hIHdhcm4gLTgwMDQKICAgI3ByYWdtYSB3YXJuIC04MDA4CiAgICNwcmFnbWEgd2FybiAtODA2NgogI2VuZGlmCiAKIC8qIHByb3ZpZGUgcHJvdG90eXBlcyBmb3IgdGhlc2Ugd2hlbiBidWlsZGluZyB6bGliIHdpdGhvdXQgTEZTICovCi0jaWYgIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIFwKKyAgICAoIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDApCiAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICNlbmRpZgpAQCAtMTc3LDQyICsxODYsNyBAQAogCiAgICAgICAgICAvKiBmdW5jdGlvbnMgKi8KIAotI2lmIGRlZmluZWQoU1REQzk5KSB8fCAoZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBfX1RVUkJPQ19fID49IDB4NTUwKQotIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19DWUdXSU5fXykKLSMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgIGlmZGVmIE1TRE9TCi0gICAgIC8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8pLAotICAgICAgICBidXQgZm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0LiAqLwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgX19UVVJCT0NfXwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgV0lOMzIKLSAgICAgLyogSW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KLSMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCi0jICAgICAgaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNTAwICkKLSMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmZGVmIF9fU0FTQwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotI2VuZGlmCi0jaWZkZWYgVk1TCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQocHlyKQorI2lmIGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBOT19NRU1DUFkKICNlbmRpZgogI2lmIGRlZmluZWQoU01BTExfTUVESVVNKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19TQ19fKQpAQCAtMjYxLDE0ICsyMzUsMTkgQEAKICMgIGRlZmluZSBUcmFjZWN2KGMseCkKICNlbmRpZgogCi0KLXZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgT0YoKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSkpOwotdm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpKTsKKyNpZm5kZWYgWl9TT0xPCisgICB2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jIE9GKCh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUpKTsKKyAgIHZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7CisjZW5kaWYKIAogI2RlZmluZSBaQUxMT0Moc3RybSwgaXRlbXMsIHNpemUpIFwKICAgICAgICAgICAgKCooKHN0cm0pLT56YWxsb2MpKSgoc3RybSktPm9wYXF1ZSwgKGl0ZW1zKSwgKHNpemUpKQogI2RlZmluZSBaRlJFRShzdHJtLCBhZGRyKSAgKCooKHN0cm0pLT56ZnJlZSkpKChzdHJtKS0+b3BhcXVlLCAodm9pZHBmKShhZGRyKSkKICNkZWZpbmUgVFJZX0ZSRUUocywgcCkge2lmIChwKSBaRlJFRShzLCBwKTt9CiAKKy8qIFJldmVyc2UgdGhlIGJ5dGVzIGluIGEgMzItYml0IHZhbHVlICovCisjZGVmaW5lIFpTV0FQMzIocSkgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAorICAgICAgICAgICAgICAgICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKKwogI2VuZGlmIC8qIFpVVElMX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYm1vZHVsZS5jIGIvTW9kdWxlcy96bGlibW9kdWxlLmMKaW5kZXggMWQxMDcyZC4uMGQyZTE4OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGlibW9kdWxlLmMKKysrIGIvTW9kdWxlcy96bGlibW9kdWxlLmMKQEAgLTMsMTEgKzMsMTMgQEAKIAogLyogV2luZG93cyB1c2VyczogIHJlYWQgUHl0aG9uJ3MgUENidWlsZFxyZWFkbWUudHh0ICovCiAKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiemxpYi5oIgogCisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICNpbmNsdWRlICJweXRocmVhZC5oIgogICAgICNkZWZpbmUgRU5URVJfWkxJQihvYmopIFwKQEAgLTI3LDEwICsyOSw5IEBACiAjZWxzZQogIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgIE1BWF9NRU1fTEVWRUwKICNlbmRpZgotI2RlZmluZSBERUZfV0JJVFMgTUFYX1dCSVRTCiAKLS8qIFRoZSBvdXRwdXQgYnVmZmVyIHdpbGwgYmUgaW5jcmVhc2VkIGluIGNodW5rcyBvZiBERUZBVUxUQUxMT0MgYnl0ZXMuICovCi0jZGVmaW5lIERFRkFVTFRBTExPQyAoMTYqMTAyNCkKKy8qIEluaXRpYWwgYnVmZmVyIHNpemUuICovCisjZGVmaW5lIERFRl9CVUZfU0laRSAoMTYqMTAyNCkKIAogc3RhdGljIFB5VHlwZU9iamVjdCBDb21wdHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgRGVjb21wdHlwZTsKQEAgLTgwLDM1ICs4MSwxMyBAQAogICAgICAgICBQeUVycl9Gb3JtYXQoWmxpYkVycm9yLCAiRXJyb3IgJWQgJXM6ICUuMjAwcyIsIGVyciwgbXNnLCB6bXNnKTsKIH0KIAotUHlEb2NfU1RSVkFSKGNvbXByZXNzb2JqX19kb2NfXywKLSJjb21wcmVzc29iaihsZXZlbD0tMSwgbWV0aG9kPURFRkxBVEVELCB3Yml0cz0xNSwgbWVtbGV2ZWw9OCxcbiIKLSIgICAgICAgICAgICBzdHJhdGVneT1aX0RFRkFVTFRfU1RSQVRFR1lbLCB6ZGljdF0pXG4iCi0iIC0tIFJldHVybiBhIGNvbXByZXNzb3Igb2JqZWN0LlxuIgotIlxuIgotImxldmVsIGlzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCAoYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05OyBkZWZhdWx0IGlzIDYpLlxuIgotIkhpZ2hlciBjb21wcmVzc2lvbiBsZXZlbHMgYXJlIHNsb3dlciwgYnV0IHByb2R1Y2Ugc21hbGxlciByZXN1bHRzLlxuIgotIlxuIgotIm1ldGhvZCBpcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBJZiBnaXZlbiwgdGhpcyBtdXN0IGJlIERFRkxBVEVELlxuIgotIlxuIgotIndiaXRzIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplIChyYW5nZTogOC4uMTUpLlxuIgotIlxuIgotIm1lbWxldmVsIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLlxuIgotIlZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDEgdG8gOS4gSGlnaGVyIHZhbHVlcyByZXN1bHQgaW4gaGlnaGVyIG1lbW9yeSB1c2FnZSxcbiIKLSJmYXN0ZXIgY29tcHJlc3Npb24sIGFuZCBzbWFsbGVyIG91dHB1dC5cbiIKLSJcbiIKLSJzdHJhdGVneSBpcyB1c2VkIHRvIHR1bmUgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gUG9zc2libGUgdmFsdWVzIGFyZVxuIgotIlpfREVGQVVMVF9TVFJBVEVHWSwgWl9GSUxURVJFRCwgYW5kIFpfSFVGRk1BTl9PTkxZLlxuIgotIlxuIgotInpkaWN0IGlzIHRoZSBwcmVkZWZpbmVkIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgLSBhIHNlcXVlbmNlIG9mIGJ5dGVzXG4iCi0iY29udGFpbmluZyBzdWJzZXF1ZW5jZXMgdGhhdCBhcmUgbGlrZWx5IHRvIG9jY3VyIGluIHRoZSBpbnB1dCBkYXRhLiIpOwotCi1QeURvY19TVFJWQVIoZGVjb21wcmVzc29ial9fZG9jX18sCi0iZGVjb21wcmVzc29iaihbd2JpdHNbLCB6ZGljdF1dKSAtLSBSZXR1cm4gYSBkZWNvbXByZXNzb3Igb2JqZWN0LlxuIgotIlxuIgotIk9wdGlvbmFsIGFyZyB3Yml0cyBpcyB0aGUgd2luZG93IGJ1ZmZlciBzaXplLlxuIgotIlxuIgotIk9wdGlvbmFsIGFyZyB6ZGljdCBpcyB0aGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LiBUaGlzIG11c3QgYmVcbiIKLSJ0aGUgc2FtZSBkaWN0aW9uYXJ5IGFzIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IgdGhhdCBwcm9kdWNlZCB0aGUgaW5wdXQgZGF0YS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIHpsaWIKK2NsYXNzIHpsaWIuQ29tcHJlc3MgImNvbXBvYmplY3QgKiIgIiZDb21wdHlwZSIKK2NsYXNzIHpsaWIuRGVjb21wcmVzcyAiY29tcG9iamVjdCAqIiAiJkRlY29tcHR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1iZmQ0YzM0MDU3M2JhOTFkXSovCiAKIHN0YXRpYyBjb21wb2JqZWN0ICoKIG5ld2NvbXBvYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlKQpAQCAtMTMyLDQwICsxMTEsNjMgQEAKICAgICB9CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGxvY2siKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3Moc3RyaW5nWywgbGV2ZWxdKSAtLSBSZXR1cm5lZCBjb21wcmVzc2VkIHN0cmluZy5cbiIKLSJcbiIKLSJPcHRpb25hbCBhcmcgbGV2ZWwgaXMgdGhlIGNvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuIik7CitzdGF0aWMgdm9pZCoKK1B5WmxpYl9NYWxsb2Modm9pZHBmIGN0eCwgdUludCBpdGVtcywgdUludCBzaXplKQoreworICAgIGlmIChpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDogdGhlIEdJTCBpcyBub3QgaGVsZCB3aGVuCisgICAgICAgaW5mbGF0ZSgpIGFuZCBkZWZsYXRlKCkgYXJlIGNhbGxlZCAqLworICAgIHJldHVybiBQeU1lbV9SYXdNYWxsb2MoaXRlbXMgKiBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK1B5WmxpYl9GcmVlKHZvaWRwZiBjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuY29tcHJlc3MKKworICAgIGJ5dGVzOiBQeV9idWZmZXIKKyAgICAgICAgQmluYXJ5IGRhdGEgdG8gYmUgY29tcHJlc3NlZC4KKyAgICBsZXZlbDogaW50KGNfZGVmYXVsdD0iWl9ERUZBVUxUX0NPTVBSRVNTSU9OIikgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwsIGluIDAtOS4KKyAgICAvCisKK1JldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBjb21wcmVzc2VkIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfY29tcHJlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9jb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqYnl0ZXMsIGludCBsZXZlbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZDdkZDQ1ODg3ODhlZmQzIGlucHV0PWJlM2FiZTk5MzRiZGE0YjNdKi8KIHsKICAgICBQeU9iamVjdCAqUmV0dXJuVmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwogICAgIEJ5dGUgKmlucHV0LCAqb3V0cHV0ID0gTlVMTDsKICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOwotICAgIGludCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIGVycjsKKyAgICBpbnQgZXJyOwogICAgIHpfc3RyZWFtIHpzdDsKIAotICAgIC8qIHJlcXVpcmUgUHl0aG9uIHN0cmluZyBvYmplY3QsIG9wdGlvbmFsICdsZXZlbCcgYXJnICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOmNvbXByZXNzIiwgJnBpbnB1dCwgJmxldmVsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgaWYgKChzaXplX3QpYnl0ZXMtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBpbnB1dCA9IGJ5dGVzLT5idWY7CisgICAgbGVuZ3RoID0gKHVuc2lnbmVkIGludClieXRlcy0+bGVuOwogCiAgICAgenN0LmF2YWlsX291dCA9IGxlbmd0aCArIGxlbmd0aC8xMDAwICsgMTIgKyAxOwogCi0gICAgb3V0cHV0ID0gKEJ5dGUqKW1hbGxvYyh6c3QuYXZhaWxfb3V0KTsKKyAgICBvdXRwdXQgPSAoQnl0ZSopUHlNZW1fTWFsbG9jKHpzdC5hdmFpbF9vdXQpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIGNvbXByZXNzIGRhdGEiKTsKQEAgLTE3NSw4ICsxNzcsOSBAQAogICAgIC8qIFBhc3QgdGhlIHBvaW50IG9mIG5vIHJldHVybi4gIEZyb20gaGVyZSBvbiBvdXQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCiAgICAgICAgd2UgY2xlYW4gdXAgbWFsbG9jcyAmIElOQ1JFRnMuICovCiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKW91dHB1dDsKICAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7CiAgICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOwpAQCAtMjE3LDU2ICsyMjAsMTAwIEBACiAgICAgICAgIHpsaWJfZXJyb3IoenN0LCBlcnIsICJ3aGlsZSBmaW5pc2hpbmcgY29tcHJlc3Npb24iKTsKIAogIGVycm9yOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7Ci0gICAgZnJlZShvdXRwdXQpOworICAgIFB5TWVtX0ZyZWUob3V0cHV0KTsKIAogICAgIHJldHVybiBSZXR1cm5WYWw7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXByZXNzX19kb2NfXywKLSJkZWNvbXByZXNzKHN0cmluZ1ssIHdiaXRzWywgYnVmc2l6ZV1dKSAtLSBSZXR1cm4gZGVjb21wcmVzc2VkIHN0cmluZy5cbiIKLSJcbiIKLSJPcHRpb25hbCBhcmcgd2JpdHMgaXMgdGhlIHdpbmRvdyBidWZmZXIgc2l6ZS4gIE9wdGlvbmFsIGFyZyBidWZzaXplIGlzXG4iCi0idGhlIGluaXRpYWwgb3V0cHV0IGJ1ZmZlciBzaXplLiIpOworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyB1aW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKKyAgICBjb252ZXJ0ZXIgPSAndWludF9jb252ZXJ0ZXInCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MjIyNjM4NTVmN2EzZWJmZF0qLworCitzdGF0aWMgaW50Cit1aW50X2NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwdHIpCit7CisgICAgbG9uZyB2YWw7CisgICAgdW5zaWduZWQgbG9uZyB1dmFsOworCisgICAgdmFsID0gUHlMb25nX0FzTG9uZyhvYmopOworICAgIGlmICh2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICB1dmFsID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9iaik7CisgICAgICAgIGlmICh1dmFsID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICh2YWwgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdXZhbCA9ICh1bnNpZ25lZCBsb25nKXZhbDsKKyAgICB9CisKKyAgICBpZiAodXZhbCA+IFVJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIGZvciBDIHVuc2lnbmVkIGludCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAqKHVuc2lnbmVkIGludCAqKXB0ciA9IFB5X1NBRkVfRE9XTkNBU1QodXZhbCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKKyAgICByZXR1cm4gMTsKK30KKworLypbY2xpbmljIGlucHV0XQoremxpYi5kZWNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAgICAgQ29tcHJlc3NlZCBkYXRhLgorICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLgorICAgIGJ1ZnNpemU6IHVpbnQoY19kZWZhdWx0PSJERUZfQlVGX1NJWkUiKSA9IERFRl9CVUZfU0laRQorICAgICAgICBUaGUgaW5pdGlhbCBvdXRwdXQgYnVmZmVyIHNpemUuCisgICAgLworCitSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuY29tcHJlc3NlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2RlY29tcHJlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9kZWNvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgd2JpdHMsIHVuc2lnbmVkIGludCBidWZzaXplKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTllNTQ2NGU3MmRmOWNiNWYgaW5wdXQ9MGY0YjlhYmI3MTAzZjUwZV0qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHRfc3RyID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwogICAgIEJ5dGUgKmlucHV0OwogICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CiAgICAgaW50IGVycjsKLSAgICBpbnQgd3NpemU9REVGX1dCSVRTOwotICAgIFB5X3NzaXplX3Qgcl9zdHJsZW49REVGQVVMVEFMTE9DOworICAgIHVuc2lnbmVkIGludCBuZXdfYnVmc2l6ZTsKICAgICB6X3N0cmVhbSB6c3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGluOmRlY29tcHJlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlucHV0LCAmd3NpemUsICZyX3N0cmxlbikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWRhdGEtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBpbnB1dCA9IGRhdGEtPmJ1ZjsKKyAgICBsZW5ndGggPSAodW5zaWduZWQgaW50KWRhdGEtPmxlbjsKIAotICAgIGlmIChyX3N0cmxlbiA8PSAwKQotICAgICAgICByX3N0cmxlbiA9IDE7CisgICAgaWYgKGJ1ZnNpemUgPT0gMCkKKyAgICAgICAgYnVmc2l6ZSA9IDE7CiAKICAgICB6c3QuYXZhaWxfaW4gPSBsZW5ndGg7Ci0gICAgenN0LmF2YWlsX291dCA9IHJfc3RybGVuOworICAgIHpzdC5hdmFpbF9vdXQgPSBidWZzaXplOwogCi0gICAgaWYgKCEocmVzdWx0X3N0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcl9zdHJsZW4pKSkKKyAgICBpZiAoIShyZXN1bHRfc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBidWZzaXplKSkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpOwogICAgIHpzdC5uZXh0X2luID0gKEJ5dGUgKilpbnB1dDsKLSAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJnpzdCwgd3NpemUpOworICAgIGVyciA9IGluZmxhdGVJbml0MigmenN0LCB3Yml0cyk7CiAKICAgICBzd2l0Y2goZXJyKSB7CiAgICAgY2FzZShaX09LKToKQEAgLTMwMywxNCArMzUwLDE4IEBACiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgY2FzZShaX09LKToKICAgICAgICAgICAgIC8qIG5lZWQgbW9yZSBtZW1vcnkgKi8KLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdF9zdHIsIHJfc3RybGVuIDw8IDEpIDwgMCkgeworICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgICAgIG5ld19idWZzaXplID0gYnVmc2l6ZSA8PCAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5ld19idWZzaXplID0gVUlOVF9NQVg7CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHRfc3RyLCBuZXdfYnVmc2l6ZSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgenN0Lm5leHRfb3V0ID0KLSAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpICsgcl9zdHJsZW47Ci0gICAgICAgICAgICB6c3QuYXZhaWxfb3V0ID0gcl9zdHJsZW47Ci0gICAgICAgICAgICByX3N0cmxlbiA9IHJfc3RybGVuIDw8IDE7CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKSArIGJ1ZnNpemU7CisgICAgICAgICAgICB6c3QuYXZhaWxfb3V0ID0gYnVmc2l6ZTsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBuZXdfYnVmc2l6ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKQEAgLTMyOCw0NiArMzc5LDY3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0X3N0ciwgenN0LnRvdGFsX291dCkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKICAgICByZXR1cm4gcmVzdWx0X3N0cjsKIAogIGVycm9yOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7CiAgICAgUHlfWERFQ1JFRihyZXN1bHRfc3RyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jb21wcmVzc29iaihQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgY29tcG9iamVjdCAqc2VsZjsKLSAgICBpbnQgbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBtZXRob2Q9REVGTEFURUQ7Ci0gICAgaW50IHdiaXRzPU1BWF9XQklUUywgbWVtTGV2ZWw9REVGX01FTV9MRVZFTCwgc3RyYXRlZ3k9MCwgZXJyOwotICAgIFB5X2J1ZmZlciB6ZGljdDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImxldmVsIiwgIm1ldGhvZCIsICJ3Yml0cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1MZXZlbCIsICJzdHJhdGVneSIsICJ6ZGljdCIsIE5VTEx9OworLypbY2xpbmljIGlucHV0XQoremxpYi5jb21wcmVzc29iagogCi0gICAgemRpY3QuYnVmID0gTlVMTDsgLyogU2VudGluZWwsIHNvIHdlIGNhbiB0ZWxsIHdoZXRoZXIgemRpY3Qgd2FzIHN1cHBsaWVkLiAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpaWlpaXkqOmNvbXByZXNzb2JqIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZsZXZlbCwgJm1ldGhvZCwgJndiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1MZXZlbCwgJnN0cmF0ZWd5LCAmemRpY3QpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBsZXZlbDogaW50KGNfZGVmYXVsdD0iWl9ERUZBVUxUX0NPTVBSRVNTSU9OIikgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgICAgICAgVGhlIGNvbXByZXNzaW9uIGxldmVsIChhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwLTk7IGRlZmF1bHQgaXMgNikuCisgICAgICAgIEhpZ2hlciBjb21wcmVzc2lvbiBsZXZlbHMgYXJlIHNsb3dlciwgYnV0IHByb2R1Y2Ugc21hbGxlciByZXN1bHRzLgorICAgIG1ldGhvZDogaW50KGNfZGVmYXVsdD0iREVGTEFURUQiKSA9IERFRkxBVEVECisgICAgICAgIFRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uICBJZiBnaXZlbiwgdGhpcyBtdXN0IGJlIERFRkxBVEVELgorICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAocmFuZ2U6IDguLjE1KS4KKyAgICBtZW1MZXZlbDogaW50KGNfZGVmYXVsdD0iREVGX01FTV9MRVZFTCIpID0gREVGX01FTV9MRVZFTAorICAgICAgICBDb250cm9scyB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGZvciBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4KKyAgICAgICAgVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMSB0byA5LiAgSGlnaGVyIHZhbHVlcyByZXN1bHQgaW4gaGlnaGVyIG1lbW9yeQorICAgICAgICB1c2FnZSwgZmFzdGVyIGNvbXByZXNzaW9uLCBhbmQgc21hbGxlciBvdXRwdXQuCisgICAgc3RyYXRlZ3k6IGludChjX2RlZmF1bHQ9IlpfREVGQVVMVF9TVFJBVEVHWSIpID0gWl9ERUZBVUxUX1NUUkFURUdZCisgICAgICAgIFVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgUG9zc2libGUgdmFsdWVzIGFyZQorICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1ksIFpfRklMVEVSRUQsIGFuZCBaX0hVRkZNQU5fT05MWS4KKyAgICB6ZGljdDogUHlfYnVmZmVyID0gTm9uZQorICAgICAgICBUaGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IC0gYSBzZXF1ZW5jZSBvZiBieXRlcworICAgICAgICBjb250YWluaW5nIHN1YnNlcXVlbmNlcyB0aGF0IGFyZSBsaWtlbHkgdG8gb2NjdXIgaW4gdGhlIGlucHV0IGRhdGEuCisKK1JldHVybiBhIGNvbXByZXNzb3Igb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBsZXZlbCwgaW50IG1ldGhvZCwgaW50IHdiaXRzLCBpbnQgbWVtTGV2ZWwsIGludCBzdHJhdGVneSwgUHlfYnVmZmVyICp6ZGljdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04OWU1YTZjMTQ0OWNhYTllIGlucHV0PWIwMzQ4NDdmODgyMWY2YWZdKi8KK3sKKyAgICBjb21wb2JqZWN0ICpzZWxmID0gTlVMTDsKKyAgICBpbnQgZXJyOworCisgICAgaWYgKHpkaWN0LT5idWYgIT0gTlVMTCAmJiAoc2l6ZV90KXpkaWN0LT5sZW4gPiBVSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBsZW5ndGggZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIHNlbGYgPSBuZXdjb21wb2JqZWN0KCZDb21wdHlwZSk7CiAgICAgaWYgKHNlbGY9PU5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc2VsZi0+enN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgc2VsZi0+enN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgc2VsZi0+enN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBOVUxMOwogICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IDA7CiAgICAgZXJyID0gZGVmbGF0ZUluaXQyKCZzZWxmLT56c3QsIGxldmVsLCBtZXRob2QsIHdiaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpOwogICAgIHN3aXRjaChlcnIpIHsKICAgICBjYXNlIChaX09LKToKICAgICAgICAgc2VsZi0+aXNfaW5pdGlhbGlzZWQgPSAxOwotICAgICAgICBpZiAoemRpY3QuYnVmID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHpkaWN0LT5idWYgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwgemRpY3QuYnVmLCB6ZGljdC5sZW4pOworICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0LT5idWYsICh1bnNpZ25lZCBpbnQpemRpY3QtPmxlbik7CiAgICAgICAgICAgICBzd2l0Y2ggKGVycikgewogICAgICAgICAgICAgY2FzZSAoWl9PSyk6CiAgICAgICAgICAgICAgICAgZ290byBzdWNjZXNzOwpAQCAtMzk0LDIyICs0NjYsMjggQEAKICBlcnJvcjoKICAgICBQeV9DTEVBUihzZWxmKTsKICBzdWNjZXNzOgotICAgIGlmICh6ZGljdC5idWYgIT0gTlVMTCkKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3QpOwogICAgIHJldHVybiAoUHlPYmplY3QqKXNlbGY7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfZGVjb21wcmVzc29iaihQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ3Yml0cyIsICJ6ZGljdCIsIE5VTEx9OwotICAgIGludCB3Yml0cz1ERUZfV0JJVFMsIGVycjsKLSAgICBjb21wb2JqZWN0ICpzZWxmOwotICAgIFB5T2JqZWN0ICp6ZGljdD1OVUxMOworLypbY2xpbmljIGlucHV0XQoremxpYi5kZWNvbXByZXNzb2JqCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aU86ZGVjb21wcmVzc29iaiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmd2JpdHMsICZ6ZGljdCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLgorICAgIHpkaWN0OiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSBiJycKKyAgICAgICAgVGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeS4gIFRoaXMgbXVzdCBiZSB0aGUgc2FtZQorICAgICAgICBkaWN0aW9uYXJ5IGFzIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IgdGhhdCBwcm9kdWNlZCB0aGUgaW5wdXQgZGF0YS4KKworUmV0dXJuIGEgZGVjb21wcmVzc29yIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCB3Yml0cywgUHlPYmplY3QgKnpkaWN0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThjY2Q1ODNmYmQ2MzE3OTggaW5wdXQ9NjdmMDUxNDVhNjkyMDEyN10qLworeworICAgIGludCBlcnI7CisgICAgY29tcG9iamVjdCAqc2VsZjsKKwogICAgIGlmICh6ZGljdCAhPSBOVUxMICYmICFQeU9iamVjdF9DaGVja0J1ZmZlcih6ZGljdCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBhcmd1bWVudCBtdXN0IHN1cHBvcnQgdGhlIGJ1ZmZlciBwcm90b2NvbCIpOwpAQCAtNDE5LDggKzQ5Nyw5IEBACiAgICAgc2VsZiA9IG5ld2NvbXBvYmplY3QoJkRlY29tcHR5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICBzZWxmLT56c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICBzZWxmLT56c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICBzZWxmLT56c3Qub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT56c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICBzZWxmLT56c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IE5VTEw7CiAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKICAgICBpZiAoemRpY3QgIT0gTlVMTCkgewpAQCAtNDc2LDM3ICs1NTUsNDEgQEAKICAgICBEZWFsbG9jKHNlbGYpOwogfQogCi1QeURvY19TVFJWQVIoY29tcF9jb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3MoZGF0YSkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgZGF0YSBjb21wcmVzc2VkLlxuIgotIlxuIgotIkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGxcbiIKLSJiZSBzdG9yZWQgaW4gaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy5cbiIKLSJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5Db21wcmVzcy5jb21wcmVzcwogCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgICAgIEJpbmFyeSBkYXRhIHRvIGJlIGNvbXByZXNzZWQuCisgICAgLworCitSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBkYXRhLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsCitiZSBzdG9yZWQgaW4gaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KK0NhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfb2JqY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX0NvbXByZXNzX2NvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVkNWNkNzkxY2JjNmE3ZjQgaW5wdXQ9MGQ5NTkwOGQ2ZTY0ZmFiOF0qLwogewogICAgIGludCBlcnI7CiAgICAgdW5zaWduZWQgaW50IGlucGxlbjsKLSAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IERFRkFVTFRBTExPQzsKLSAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZfQlVGX1NJWkUsIG5ld19sZW5ndGg7CisgICAgUHlPYmplY3QgKlJldFZhbDsKICAgICBCeXRlICppbnB1dDsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RvdGFsX291dDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6Y29tcHJlc3MiLCAmcGlucHV0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWRhdGEtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGlucGxlbiA9IHBpbnB1dC5sZW47CisgICAgaW5wdXQgPSBkYXRhLT5idWY7CisgICAgaW5wbGVuID0gKHVuc2lnbmVkIGludClkYXRhLT5sZW47CiAKICAgICBpZiAoIShSZXRWYWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIEVOVEVSX1pMSUIoc2VsZik7CiAKQEAgLTUyMywxNSArNjA2LDE4IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoZXJyID09IFpfT0sgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOwotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSAoVUlOVF9NQVggPj4gMSkpCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBVSU5UX01BWDsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBuZXdfbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSArIGxlbmd0aDsKICAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgWl9OT19GTFVTSCk7CkBAIC01NDQsMTkgKzYzMCwxNSBAQAogCiAgICAgaWYgKGVyciAhPSBaX09LICYmIGVyciAhPSBaX0JVRl9FUlJPUikgewogICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgY29tcHJlc3NpbmcgZGF0YSIpOwotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKKyAgICAgICAgZ290byBkb25lOwogICAgIH0KICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKLSBlcnJvcjoKKyBkb25lOgogICAgIExFQVZFX1pMSUIoc2VsZik7Ci0gZXJyb3Jfb3V0ZXI6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKICAgICByZXR1cm4gUmV0VmFsOwogfQogCkBAIC01NzIsNyArNjU0LDcgQEAKICAgICAgICAgICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVudXNlZF9kYXRhKTsKICAgICAgICAgICAgIFB5X3NzaXplX3QgbmV3X3NpemU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3X2RhdGE7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+enN0LmF2YWlsX2luID4gUFlfU1NJWkVfVF9NQVggLSBvbGRfc2l6ZSkgeworICAgICAgICAgICAgaWYgKChzaXplX3Qpc2VsZi0+enN0LmF2YWlsX2luID4gKHNpemVfdClVSU5UX01BWCAtIChzaXplX3Qpb2xkX3NpemUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KQEAgLTYwMyw1NSArNjg1LDUwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhkYXRhLCBtYXhfbGVuZ3RoKSAtLSBSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkXG4iCi0idmVyc2lvbiBvZiB0aGUgZGF0YS5cbiIKLSJcbiIKLSJBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpblxuIgotImludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG4iCi0iQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy5cbiIKLSJJZiB0aGUgbWF4X2xlbmd0aCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlXG4iCi0ibm8gbG9uZ2VyIHRoYW4gbWF4X2xlbmd0aC4gIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgotInRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5EZWNvbXByZXNzLmRlY29tcHJlc3MKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgICAgICBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb21wcmVzcy4KKyAgICBtYXhfbGVuZ3RoOiB1aW50ID0gMAorICAgICAgICBUaGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KKyAgICAgICAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluCisgICAgICAgIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpbgoraW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KK0NhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfb2JqZGVjb21wcmVzcyhjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWF4X2xlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NTVjY2NjOTA4N2JmZTU1IGlucHV0PTAyY2ZjMDQ3Mzc3Y2VjODZdKi8KIHsKLSAgICBpbnQgZXJyLCBtYXhfbGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgaW5wbGVuOwotICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOworICAgIGludCBlcnI7CisgICAgdW5zaWduZWQgaW50IG9sZF9sZW5ndGgsIGxlbmd0aCA9IERFRl9CVUZfU0laRTsKICAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwotICAgIEJ5dGUgKmlucHV0OwogICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOmRlY29tcHJlc3MiLCAmcGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4X2xlbmd0aCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClkYXRhLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKLSAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGlucGxlbiA9IHBpbnB1dC5sZW47Ci0gICAgaWYgKG1heF9sZW5ndGggPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIm1heF9sZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBsaW1pdCBhbW91bnQgb2YgZGF0YSBhbGxvY2F0ZWQgdG8gbWF4X2xlbmd0aCAqLwogICAgIGlmIChtYXhfbGVuZ3RoICYmIGxlbmd0aCA+IG1heF9sZW5ndGgpCiAgICAgICAgIGxlbmd0aCA9IG1heF9sZW5ndGg7CiAgICAgaWYgKCEoUmV0VmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBFTlRFUl9aTElCKHNlbGYpOwogCiAgICAgc3RhcnRfdG90YWxfb3V0ID0gc2VsZi0+enN0LnRvdGFsX291dDsKLSAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSBpbnBsZW47Ci0gICAgc2VsZi0+enN0Lm5leHRfaW4gPSBpbnB1dDsKKyAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KWRhdGEtPmxlbjsKKyAgICBzZWxmLT56c3QubmV4dF9pbiA9IGRhdGEtPmJ1ZjsKICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwogICAgIHNlbGYtPnpzdC5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKTsKIApAQCAtNjY2LDEyICs3NDMsMjEgQEAKICAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9Ci0gICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCYoc2VsZi0+enN0KSwgemRpY3RfYnVmLmJ1ZiwgemRpY3RfYnVmLmxlbik7CisKKyAgICAgICAgaWYgKChzaXplX3QpemRpY3RfYnVmLmxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgInpkaWN0IGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ6ZGljdF9idWYpOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmKHNlbGYtPnpzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0X2J1Zi5idWYsICh1bnNpZ25lZCBpbnQpemRpY3RfYnVmLmxlbik7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0X2J1Zik7CiAgICAgICAgIGlmIChlcnIgIT0gWl9PSykgewogICAgICAgICAgICAgemxpYl9lcnJvcihzZWxmLT56c3QsIGVyciwgIndoaWxlIGRlY29tcHJlc3NpbmcgZGF0YSIpOwotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgLyogUmVwZWF0IHRoZSBjYWxsIHRvIGluZmxhdGUuICovCkBAIC02OTcsOCArNzgzLDcgQEAKICAgICAgICAgICAgIGxlbmd0aCA9IG1heF9sZW5ndGg7CiAKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGgpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KQEAgLTczMiwzOSArODE3LDM5IEBACiAgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCiAgZXJyb3I6CiAgICAgTEVBVkVfWkxJQihzZWxmKTsKLSBlcnJvcl9vdXRlcjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW5wdXQpOwogICAgIHJldHVybiBSZXRWYWw7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21wX2ZsdXNoX19kb2NfXywKLSJmbHVzaCggW21vZGVdICkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCi0iXG4iCi0ibW9kZSBjYW4gYmUgb25lIG9mIHRoZSBjb25zdGFudHMgWl9TWU5DX0ZMVVNILCBaX0ZVTExfRkxVU0gsIFpfRklOSVNIOyB0aGVcbiIKLSJkZWZhdWx0IHZhbHVlIHVzZWQgd2hlbiBtb2RlIGlzIG5vdCBzcGVjaWZpZWQgaXMgWl9GSU5JU0guXG4iCi0iSWYgbW9kZSA9PSBaX0ZJTklTSCwgdGhlIGNvbXByZXNzb3Igb2JqZWN0IGNhbiBubyBsb25nZXIgYmUgdXNlZCBhZnRlclxuIgotImNhbGxpbmcgdGhlIGZsdXNoKCkgbWV0aG9kLiAgT3RoZXJ3aXNlLCBtb3JlIGRhdGEgY2FuIHN0aWxsIGJlIGNvbXByZXNzZWQuIik7CisvKltjbGluaWMgaW5wdXRdCit6bGliLkNvbXByZXNzLmZsdXNoCisKKyAgICBtb2RlOiBpbnQoY19kZWZhdWx0PSJaX0ZJTklTSCIpID0gemxpYi5aX0ZJTklTSAorICAgICAgICBPbmUgb2YgdGhlIGNvbnN0YW50cyBaX1NZTkNfRkxVU0gsIFpfRlVMTF9GTFVTSCwgWl9GSU5JU0guCisgICAgICAgIElmIG1vZGUgPT0gWl9GSU5JU0gsIHRoZSBjb21wcmVzc29yIG9iamVjdCBjYW4gbm8gbG9uZ2VyIGJlCisgICAgICAgIHVzZWQgYWZ0ZXIgY2FsbGluZyB0aGUgZmx1c2goKSBtZXRob2QuICBPdGhlcndpc2UsIG1vcmUgZGF0YQorICAgICAgICBjYW4gc3RpbGwgYmUgY29tcHJlc3NlZC4KKyAgICAvCisKK1JldHVybiBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIGFueSByZW1haW5pbmcgY29tcHJlc3NlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2ZsdXNoKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9Db21wcmVzc19mbHVzaF9pbXBsKGNvbXBvYmplY3QgKnNlbGYsIGludCBtb2RlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWEyMDNmNGNlZmM5ZGU3MjcgaW5wdXQ9NzNlZDA2Njc5NGJkMTViY10qLwogewotICAgIGludCBlcnIsIGxlbmd0aCA9IERFRkFVTFRBTExPQzsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZfQlVGX1NJWkUsIG5ld19sZW5ndGg7CiAgICAgUHlPYmplY3QgKlJldFZhbDsKLSAgICBpbnQgZmx1c2htb2RlID0gWl9GSU5JU0g7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmZsdXNoIiwgJmZsdXNobW9kZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgLyogRmx1c2hpbmcgd2l0aCBaX05PX0ZMVVNIIGlzIGEgbm8tb3AsIHNvIHRoZXJlJ3Mgbm8gcG9pbnQgaW4KICAgICAgICBkb2luZyBhbnkgd29yayBhdCBhbGw7IGp1c3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gKi8KLSAgICBpZiAoZmx1c2htb2RlID09IFpfTk9fRkxVU0gpIHsKKyAgICBpZiAobW9kZSA9PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwogICAgIH0KIApAQCAtNzc5LDMxICs4NjQsMzQgQEAKICAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCk7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIGZsdXNobW9kZSk7CisgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIG1vZGUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKiB3aGlsZSBaX09LIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCwKICAgICAgICBzbyBleHRlbmQgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwogICAgIHdoaWxlIChlcnIgPT0gWl9PSyAmJiBzZWxmLT56c3QuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGggPDwgMSkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIGlmIChsZW5ndGggPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gVUlOVF9NQVg7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbmV3X2xlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQogICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGVyciA9IGRlZmxhdGUoJihzZWxmLT56c3QpLCBmbHVzaG1vZGUpOworICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgbW9kZSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQogCi0gICAgLyogSWYgZmx1c2htb2RlIGlzIFpfRklOSVNILCB3ZSBhbHNvIGhhdmUgdG8gY2FsbCBkZWZsYXRlRW5kKCkgdG8gZnJlZQorICAgIC8qIElmIG1vZGUgaXMgWl9GSU5JU0gsIHdlIGFsc28gaGF2ZSB0byBjYWxsIGRlZmxhdGVFbmQoKSB0byBmcmVlCiAgICAgICAgdmFyaW91cyBkYXRhIHN0cnVjdHVyZXMuIE5vdGUgd2Ugc2hvdWxkIG9ubHkgZ2V0IFpfU1RSRUFNX0VORCB3aGVuCi0gICAgICAgZmx1c2htb2RlIGlzIFpfRklOSVNILCBidXQgY2hlY2tpbmcgYm90aCBmb3Igc2FmZXR5Ki8KLSAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCAmJiBmbHVzaG1vZGUgPT0gWl9GSU5JU0gpIHsKKyAgICAgICBtb2RlIGlzIFpfRklOSVNILCBidXQgY2hlY2tpbmcgYm90aCBmb3Igc2FmZXR5Ki8KKyAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCAmJiBtb2RlID09IFpfRklOSVNIKSB7CiAgICAgICAgIGVyciA9IGRlZmxhdGVFbmQoJihzZWxmLT56c3QpKTsKICAgICAgICAgaWYgKGVyciAhPSBaX09LKSB7CiAgICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZmluaXNoaW5nIGNvbXByZXNzaW9uIik7CkBAIC04MjYsOCArOTE0LDcgQEAKICAgICB9CiAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKICBlcnJvcjoKQEAgLTgzNywxMSArOTI0LDE2IEBACiB9CiAKICNpZmRlZiBIQVZFX1pMSUJfQ09QWQotUHlEb2NfU1RSVkFSKGNvbXBfY29weV9fZG9jX18sCi0iY29weSgpIC0tIFJldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworLypbY2xpbmljIGlucHV0XQoremxpYi5Db21wcmVzcy5jb3B5CisKK1JldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jb3B5KGNvbXBvYmplY3QgKnNlbGYpCit6bGliX0NvbXByZXNzX2NvcHlfaW1wbChjb21wb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUxNDRhYTE1M2MyMWU4MDUgaW5wdXQ9YzY1NjM1MWY5NGI4MjcxOF0qLwogewogICAgIGNvbXBvYmplY3QgKnJldHZhbCA9IE5VTEw7CiAgICAgaW50IGVycjsKQEAgLTg5MSwxMSArOTgzLDE1IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfY29weV9fZG9jX18sCi0iY29weSgpIC0tIFJldHVybiBhIGNvcHkgb2YgdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0LiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5EZWNvbXByZXNzLmNvcHkKKworUmV0dXJuIGEgY29weSBvZiB0aGUgZGVjb21wcmVzc2lvbiBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfdW5jb3B5KGNvbXBvYmplY3QgKnNlbGYpCit6bGliX0RlY29tcHJlc3NfY29weV9pbXBsKGNvbXBvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDJhODgzYTJhNTEwYzhjYyBpbnB1dD1iYTZjM2U5NjcxMmE1OTZiXSovCiB7CiAgICAgY29tcG9iamVjdCAqcmV0dmFsID0gTlVMTDsKICAgICBpbnQgZXJyOwpAQCAtOTQ3LDM0ICsxMDQzLDQzIEBACiB9CiAjZW5kaWYKIAotUHlEb2NfU1RSVkFSKGRlY29tcF9mbHVzaF9fZG9jX18sCi0iZmx1c2goIFtsZW5ndGhdICkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZ1xuIgotImRlY29tcHJlc3NlZCBkYXRhLiBsZW5ndGgsIGlmIGdpdmVuLCBpcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZVxuIgotIm91dHB1dCBidWZmZXIuXG4iCi0iXG4iCi0iVGhlIGRlY29tcHJlc3NvciBvYmplY3QgY2FuIG5vIGxvbmdlciBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuRGVjb21wcmVzcy5mbHVzaAorCisgICAgbGVuZ3RoOiB1aW50KGNfZGVmYXVsdD0iREVGX0JVRl9TSVpFIikgPSB6bGliLkRFRl9CVUZfU0laRQorICAgICAgICB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBkZWNvbXByZXNzZWQgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl91bmZsdXNoKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9EZWNvbXByZXNzX2ZsdXNoX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgdW5zaWduZWQgaW50IGxlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYjZmYjc1M2FiNjk4ZTIyIGlucHV0PTE1ODA5NTY1MDU5Nzg5OTNdKi8KIHsKLSAgICBpbnQgZXJyLCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgbmV3X2xlbmd0aDsKICAgICBQeU9iamVjdCAqIHJldHZhbCA9IE5VTEw7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CisgICAgUHlfc3NpemVfdCBzaXplOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpmbHVzaCIsICZsZW5ndGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuZ3RoIDw9IDApIHsKKyAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKICAgICBpZiAoIShyZXR2YWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogCiAgICAgRU5URVJfWkxJQihzZWxmKTsKIAorICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CisKICAgICBzdGFydF90b3RhbF9vdXQgPSBzZWxmLT56c3QudG90YWxfb3V0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+dW5jb25zdW1lZF90YWlsKTsKKyAgICAvKiBzYXZlX3VuY29uc3VtZWRfaW5wdXQoKSBlbnN1cmVzIHRoYXQgdW5jb25zdW1lZF90YWlsIGxlbmd0aCBpcyBsZXNzZXIKKyAgICAgICBvciBlcXVhbCB0aGFuIFVJTlRfTUFYICovCisgICAgc2VsZi0+enN0LmF2YWlsX2luID0gUHlfU0FGRV9ET1dOQ0FTVChzaXplLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwogICAgIHNlbGYtPnpzdC5uZXh0X2luID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT51bmNvbnN1bWVkX3RhaWwpOwogICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7CiAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpOwpAQCAtOTg2LDE0ICsxMDkxLDE3IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoKGVyciA9PSBaX09LIHx8IGVyciA9PSBaX0JVRl9FUlJPUikgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAobGVuZ3RoIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IFVJTlRfTUFYOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIG5ld19sZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVyciA9IGluZmxhdGUoJihzZWxmLT56c3QpLCBaX0ZJTklTSCk7CkBAIC0xMDIwLDggKzExMjgsNyBAQAogICAgIH0KIAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwotICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihyZXR2YWwpOwogICAgIH0KIAogZXJyb3I6CkBAIC0xMDMxLDI4ICsxMTM4LDI0IEBACiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy96bGlibW9kdWxlLmMuaCIKKwogc3RhdGljIFB5TWV0aG9kRGVmIGNvbXBfbWV0aG9kc1tdID0KIHsKLSAgICB7ImNvbXByZXNzIiwgKGJpbmFyeWZ1bmMpUHlabGliX29iamNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgIGNvbXBfY29tcHJlc3NfX2RvY19ffSwKLSAgICB7ImZsdXNoIiwgKGJpbmFyeWZ1bmMpUHlabGliX2ZsdXNoLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgIGNvbXBfZmx1c2hfX2RvY19ffSwKKyAgICBaTElCX0NPTVBSRVNTX0NPTVBSRVNTX01FVEhPRERFRgorICAgIFpMSUJfQ09NUFJFU1NfRkxVU0hfTUVUSE9EREVGCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLSAgICB7ImNvcHkiLCAgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb3B5LCBNRVRIX05PQVJHUywKLSAgICAgICAgICAgICAgY29tcF9jb3B5X19kb2NfX30sCisgICAgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgogI2VuZGlmCiAgICAge05VTEwsIE5VTEx9CiB9OwogCiBzdGF0aWMgUHlNZXRob2REZWYgRGVjb21wX21ldGhvZHNbXSA9CiB7Ci0gICAgeyJkZWNvbXByZXNzIiwgKGJpbmFyeWZ1bmMpUHlabGliX29iamRlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXBfZGVjb21wcmVzc19fZG9jX199LAotICAgIHsiZmx1c2giLCAoYmluYXJ5ZnVuYylQeVpsaWJfdW5mbHVzaCwgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICBkZWNvbXBfZmx1c2hfX2RvY19ffSwKKyAgICBaTElCX0RFQ09NUFJFU1NfREVDT01QUkVTU19NRVRIT0RERUYKKyAgICBaTElCX0RFQ09NUFJFU1NfRkxVU0hfTUVUSE9EREVGCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLSAgICB7ImNvcHkiLCAgKFB5Q0Z1bmN0aW9uKVB5WmxpYl91bmNvcHksIE1FVEhfTk9BUkdTLAotICAgICAgICAgICAgICBkZWNvbXBfY29weV9fZG9jX199LAorICAgIFpMSUJfREVDT01QUkVTU19DT1BZX01FVEhPRERFRgogI2VuZGlmCiAgICAge05VTEwsIE5VTEx9CiB9OwpAQCAtMTA2NSw5NiArMTE2OCw5NSBAQAogICAgIHtOVUxMfSwKIH07CiAKLVB5RG9jX1NUUlZBUihhZGxlcjMyX19kb2NfXywKLSJhZGxlcjMyKHN0cmluZ1ssIHN0YXJ0XSkgLS0gQ29tcHV0ZSBhbiBBZGxlci0zMiBjaGVja3N1bSBvZiBzdHJpbmcuXG4iCi0iXG4iCi0iQW4gb3B0aW9uYWwgc3RhcnRpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZC4gIFRoZSByZXR1cm5lZCBjaGVja3N1bSBpc1xuIgotImFuIGludGVnZXIuIik7CisvKltjbGluaWMgaW5wdXRdCit6bGliLmFkbGVyMzIKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIHZhbHVlOiB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKSA9IDEKKyAgICAgICAgU3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNoZWNrc3VtLgorICAgIC8KKworQ29tcHV0ZSBhbiBBZGxlci0zMiBjaGVja3N1bSBvZiBkYXRhLgorCitUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9hZGxlcjMyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfYWRsZXIzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IHZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUxZDZkNzVlZTY1NWM3OGEgaW5wdXQ9NmZmNDU1Nzg3MjE2MGU4OF0qLwogewotICAgIHVuc2lnbmVkIGludCBhZGxlcjMydmFsID0gMTsgIC8qIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCkgKi8KLSAgICBQeV9idWZmZXIgcGJ1ZjsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STphZGxlcjMyIiwgJnBidWYsICZhZGxlcjMydmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogUmVsZWFzaW5nIHRoZSBHSUwgZm9yIHZlcnkgc21hbGwgYnVmZmVycyBpcyBpbmVmZmljaWVudAogICAgICAgIGFuZCBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgKi8KLSAgICBpZiAocGJ1Zi5sZW4gPiAxMDI0KjUpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gcGJ1Zi5idWY7Ci0gICAgICAgIFB5X3NzaXplX3QgbGVuID0gcGJ1Zi5sZW47CisgICAgaWYgKGRhdGEtPmxlbiA+IDEwMjQqNSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBkYXRhLT5idWY7CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgLyogQXZvaWQgdHJ1bmNhdGlvbiBvZiBsZW5ndGggZm9yIHZlcnkgbGFyZ2UgYnVmZmVycy4gYWRsZXIzMigpIHRha2VzCiAgICAgICAgICAgIGxlbmd0aCBhcyBhbiB1bnNpZ25lZCBpbnQsIHdoaWNoIG1heSBiZSBuYXJyb3dlciB0aGFuIFB5X3NzaXplX3QuICovCi0gICAgICAgIHdoaWxlIChsZW4gPiAoc2l6ZV90KSBVSU5UX01BWCkgewotICAgICAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgYnVmLCBVSU5UX01BWCk7CisgICAgICAgIHdoaWxlICgoc2l6ZV90KWxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGFkbGVyMzIodmFsdWUsIGJ1ZiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgYnVmICs9IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICAgICAgbGVuIC09IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICB9Ci0gICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIGJ1ZiwgbGVuKTsKKyAgICAgICAgdmFsdWUgPSBhZGxlcjMyKHZhbHVlLCBidWYsICh1bnNpZ25lZCBpbnQpbGVuKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9IGVsc2UgewotICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICB2YWx1ZSA9IGFkbGVyMzIodmFsdWUsIGRhdGEtPmJ1ZiwgKHVuc2lnbmVkIGludClkYXRhLT5sZW4pOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoYWRsZXIzMnZhbCAmIDB4ZmZmZmZmZmZVKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcodmFsdWUgJiAweGZmZmZmZmZmVSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjcmMzMl9fZG9jX18sCi0iY3JjMzIoc3RyaW5nWywgc3RhcnRdKSAtLSBDb21wdXRlIGEgQ1JDLTMyIGNoZWNrc3VtIG9mIHN0cmluZy5cbiIKLSJcbiIKLSJBbiBvcHRpb25hbCBzdGFydGluZyB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkLiAgVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzXG4iCi0iYW4gaW50ZWdlci4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuY3JjMzIKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIHZhbHVlOiB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKSA9IDAKKyAgICAgICAgU3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNoZWNrc3VtLgorICAgIC8KKworQ29tcHV0ZSBhIENSQy0zMiBjaGVja3N1bSBvZiBkYXRhLgorCitUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jcmMzMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzFlOTg2ZTc0ZmU3YjYyMyBpbnB1dD0yNmMzZWQ0MzBmYTAwYjRjXSovCiB7Ci0gICAgdW5zaWduZWQgaW50IGNyYzMydmFsID0gMDsgIC8qIGNyYzMyKDBMLCBaX05VTEwsIDApICovCi0gICAgUHlfYnVmZmVyIHBidWY7CiAgICAgaW50IHNpZ25lZF92YWw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfEk6Y3JjMzIiLCAmcGJ1ZiwgJmNyYzMydmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogUmVsZWFzaW5nIHRoZSBHSUwgZm9yIHZlcnkgc21hbGwgYnVmZmVycyBpcyBpbmVmZmljaWVudAogICAgICAgIGFuZCBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgKi8KLSAgICBpZiAocGJ1Zi5sZW4gPiAxMDI0KjUpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gcGJ1Zi5idWY7Ci0gICAgICAgIFB5X3NzaXplX3QgbGVuID0gcGJ1Zi5sZW47CisgICAgaWYgKGRhdGEtPmxlbiA+IDEwMjQqNSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBkYXRhLT5idWY7CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgLyogQXZvaWQgdHJ1bmNhdGlvbiBvZiBsZW5ndGggZm9yIHZlcnkgbGFyZ2UgYnVmZmVycy4gY3JjMzIoKSB0YWtlcwogICAgICAgICAgICBsZW5ndGggYXMgYW4gdW5zaWduZWQgaW50LCB3aGljaCBtYXkgYmUgbmFycm93ZXIgdGhhbiBQeV9zc2l6ZV90LiAqLwotICAgICAgICB3aGlsZSAobGVuID4gKHNpemVfdCkgVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIGNyYzMydmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgVUlOVF9NQVgpOworICAgICAgICB3aGlsZSAoKHNpemVfdClsZW4gPiBVSU5UX01BWCkgeworICAgICAgICAgICAgdmFsdWUgPSBjcmMzMih2YWx1ZSwgYnVmLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBidWYgKz0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgICAgICBsZW4gLT0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgIH0KLSAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBidWYsIGxlbik7CisgICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMih2YWx1ZSwgYnVmLCAodW5zaWduZWQgaW50KWxlbik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIodmFsdWUsIGRhdGEtPmJ1ZiwgKHVuc2lnbmVkIGludClkYXRhLT5sZW4pOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc2lnbmVkX3ZhbCAmIDB4ZmZmZmZmZmZVKTsKIH0KIAogCiBzdGF0aWMgUHlNZXRob2REZWYgemxpYl9tZXRob2RzW10gPQogewotICAgIHsiYWRsZXIzMiIsIChQeUNGdW5jdGlvbilQeVpsaWJfYWRsZXIzMiwgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICAgIGFkbGVyMzJfX2RvY19ffSwKLSAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb21wcmVzcywgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgY29tcHJlc3NfX2RvY19ffSwKLSAgICB7ImNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb21wcmVzc29iaiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb2JqX19kb2NfX30sCi0gICAgeyJjcmMzMiIsIChQeUNGdW5jdGlvbilQeVpsaWJfY3JjMzIsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgY3JjMzJfX2RvY19ffSwKLSAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pUHlabGliX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzX19kb2NfX30sCi0gICAgeyJkZWNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9kZWNvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzb2JqX19kb2NfX30sCisgICAgWkxJQl9BRExFUjMyX01FVEhPRERFRgorICAgIFpMSUJfQ09NUFJFU1NfTUVUSE9EREVGCisgICAgWkxJQl9DT01QUkVTU09CSl9NRVRIT0RERUYKKyAgICBaTElCX0NSQzMyX01FVEhPRERFRgorICAgIFpMSUJfREVDT01QUkVTU19NRVRIT0RERUYKKyAgICBaTElCX0RFQ09NUFJFU1NPQkpfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9CiB9OwogCkBAIC0xMjY1LDIwICsxMzY3LDIxIEBACiAgICAgICAgIFB5X0lOQ1JFRihabGliRXJyb3IpOwogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVycm9yIiwgWmxpYkVycm9yKTsKICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1BWF9XQklUUyIsIE1BWF9XQklUUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRkxBVEVEIiwgREVGTEFURUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfTUVNX0xFVkVMIiwgREVGX01FTV9MRVZFTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfQkVTVF9TUEVFRCIsIFpfQkVTVF9TUEVFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfQkVTVF9DT01QUkVTU0lPTiIsIFpfQkVTVF9DT01QUkVTU0lPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfREVGQVVMVF9DT01QUkVTU0lPTiIsIFpfREVGQVVMVF9DT01QUkVTU0lPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfRklMVEVSRUQiLCBaX0ZJTFRFUkVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9IVUZGTUFOX09OTFkiLCBaX0hVRkZNQU5fT05MWSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfREVGQVVMVF9TVFJBVEVHWSIsIFpfREVGQVVMVF9TVFJBVEVHWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTUFYX1dCSVRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZMQVRFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX01FTV9MRVZFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0JVRl9TSVpFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0JFU1RfU1BFRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfQkVTVF9DT01QUkVTU0lPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0ZJTFRFUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0hVRkZNQU5fT05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9ERUZBVUxUX1NUUkFURUdZKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZJTklTSCIsIFpfRklOSVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9OT19GTFVTSCIsIFpfTk9fRkxVU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX1NZTkNfRkxVU0giLCBaX1NZTkNfRkxVU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZVTExfRkxVU0giLCBaX0ZVTExfRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRklOSVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX05PX0ZMVVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX1NZTkNfRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRlVMTF9GTFVTSCk7CiAKICAgICB2ZXIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhaTElCX1ZFUlNJT04pOwogICAgIGlmICh2ZXIgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL09iamVjdHMvYWJzdHJhY3QuYyBiL09iamVjdHMvYWJzdHJhY3QuYwppbmRleCAxMjRlNzY2Li5lZWM5NTMyIDEwMDY0NAotLS0gYS9PYmplY3RzL2Fic3RyYWN0LmMKKysrIGIvT2JqZWN0cy9hYnN0cmFjdC5jCkBAIC02NCw0OSArNjQsNzIgQEAKIH0KICNkZWZpbmUgUHlPYmplY3RfTGVuZ3RoIFB5T2JqZWN0X1NpemUKIAoraW50CitfUHlPYmplY3RfSGFzTGVuKFB5T2JqZWN0ICpvKSB7CisgICAgcmV0dXJuIChQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZSAmJiBQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZS0+c3FfbGVuZ3RoKSB8fAorICAgICAgICAoUHlfVFlQRShvKS0+dHBfYXNfbWFwcGluZyAmJiBQeV9UWVBFKG8pLT50cF9hc19tYXBwaW5nLT5tcF9sZW5ndGgpOworfQogCiAvKiBUaGUgbGVuZ3RoIGhpbnQgZnVuY3Rpb24gcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSBmcm9tIG8uX19sZW5fXygpCi0gICBvciBvLl9fbGVuZ3RoX2hpbnRfXygpLiAgSWYgdGhvc2UgbWV0aG9kcyBhcmVuJ3QgZm91bmQgb3IgcmV0dXJuIGEgbmVnYXRpdmUKLSAgIHZhbHVlLCB0aGVuIHRoZSBkZWZhdWx0dmFsdWUgaXMgcmV0dXJuZWQuICBJZiBvbmUgb2YgdGhlIGNhbGxzIGZhaWxzLAorICAgb3Igby5fX2xlbmd0aF9oaW50X18oKS4gSWYgdGhvc2UgbWV0aG9kcyBhcmVuJ3QgZm91bmQgdGhlIGRlZmF1bHR2YWx1ZSBpcworICAgcmV0dXJuZWQuICBJZiBvbmUgb2YgdGhlIGNhbGxzIGZhaWxzIHdpdGggYW4gZXhjZXB0aW9uIG90aGVyIHRoYW4gVHlwZUVycm9yCiAgICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgLTEuCiAqLwogCiBQeV9zc2l6ZV90Ci1fUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUpCitQeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSkKIHsKKyAgICBQeU9iamVjdCAqaGludCwgKnJlc3VsdDsKKyAgICBQeV9zc2l6ZV90IHJlczsKICAgICBfUHlfSURFTlRJRklFUihfX2xlbmd0aF9oaW50X18pOwotICAgIFB5T2JqZWN0ICpybywgKmhpbnRtZXRoOwotICAgIFB5X3NzaXplX3QgcnY7Ci0KLSAgICAvKiB0cnkgby5fX2xlbl9fKCkgKi8KLSAgICBydiA9IFB5T2JqZWN0X1NpemUobyk7Ci0gICAgaWYgKHJ2ID49IDApCi0gICAgICAgIHJldHVybiBydjsKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBpZiAoX1B5T2JqZWN0X0hhc0xlbihvKSkgeworICAgICAgICByZXMgPSBQeU9iamVjdF9MZW5ndGgobyk7CisgICAgICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICAvKiB0cnkgby5fX2xlbmd0aF9oaW50X18oKSAqLwotICAgIGhpbnRtZXRoID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19sZW5ndGhfaGludF9fKTsKLSAgICBpZiAoaGludG1ldGggPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICBoaW50ID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19sZW5ndGhfaGludF9fKTsKKyAgICBpZiAoaGludCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7Ci0gICAgfQotICAgIHJvID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhoaW50bWV0aCwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKGhpbnRtZXRoKTsKLSAgICBpZiAocm8gPT0gTlVMTCkgewotICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOwogICAgIH0KLSAgICBydiA9IFB5TG9uZ19DaGVjayhybykgPyBQeUxvbmdfQXNTc2l6ZV90KHJvKSA6IGRlZmF1bHR2YWx1ZTsKLSAgICBQeV9ERUNSRUYocm8pOwotICAgIHJldHVybiBydjsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhpbnQsIE5VTEwpOworICAgIFB5X0RFQ1JFRihoaW50KTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgfQorICAgIGlmICghUHlMb25nX0NoZWNrKHJlc3VsdCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIl9fbGVuZ3RoX2hpbnRfXyBtdXN0IGJlIGFuIGludGVnZXIsIG5vdCAlLjEwMHMiLAorICAgICAgICAgICAgUHlfVFlQRShyZXN1bHQpLT50cF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gUHlMb25nX0FzU3NpemVfdChyZXN1bHQpOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIl9fbGVuZ3RoX2hpbnRfXygpIHNob3VsZCByZXR1cm4gPj0gMCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiByZXM7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTIwMiw3ICsyMjUsNyBAQAogfQogCiBpbnQKLVB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKK1B5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleTsKICAgICBpbnQgcmV0OwpAQCAtMTE2Miw2ICsxMTg1LDE1IEBACiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgLyogSXNzdWUgIzE3NTc2OiB3YXJuIGlmICdyZXN1bHQnIG5vdCBvZiBleGFjdCB0eXBlIGludC4gKi8KKyAgICBpZiAoUHlFcnJfV2FybkZvcm1hdChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIDEsCisgICAgICAgICAgICAiX19pbmRleF9fIHJldHVybmVkIG5vbi1pbnQgKHR5cGUgJS4yMDBzKS4gICIKKyAgICAgICAgICAgICJUaGUgYWJpbGl0eSB0byByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgYSBzdHJpY3Qgc3ViY2xhc3Mgb2YgaW50ICIKKyAgICAgICAgICAgICJpcyBkZXByZWNhdGVkLCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBQeXRob24uIiwKKyAgICAgICAgICAgIHJlc3VsdC0+b2JfdHlwZS0+dHBfbmFtZSkpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjQwLDcgKzE2NzIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEd1ZXNzIHJlc3VsdCBzaXplIGFuZCBhbGxvY2F0ZSBzcGFjZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQodiwgMTApOworICAgIG4gPSBQeU9iamVjdF9MZW5ndGhIaW50KHYsIDEwKTsKICAgICBpZiAobiA9PSAtMSkKICAgICAgICAgZ290byBGYWlsOwogICAgIHJlc3VsdCA9IFB5VHVwbGVfTmV3KG4pOwpAQCAtMTkwMCw3ICsxOTMyLDcgQEAKICNkZWZpbmUgUHlNYXBwaW5nX0xlbmd0aCBQeU1hcHBpbmdfU2l6ZQogCiBQeU9iamVjdCAqCi1QeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleSwgKnI7CiAKQEAgLTE5MTYsNyArMTk0OCw3IEBACiB9CiAKIGludAotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQorUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpva2V5OwogICAgIGludCByOwpAQCAtMTkzNSw3ICsxOTY3LDcgQEAKIH0KIAogaW50Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAKQEAgLTIwMzQsMTAgKzIwNjYsMTYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXN1bHQgPSAoKmNhbGwpKGZ1bmMsIGFyZywga3cpOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorI2lmZGVmIE5ERUJVRworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAiTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgfHwgKHJlc3VsdCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJyUuMjAwcycgb2JqZWN0IGlzIG5vdCBjYWxsYWJsZSIsCkBAIC0yMDcyLDcgKzIxMTAsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK1B5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmFyZ3M7CkBAIC0yMDg3LDEyICsyMTI1LDE0IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIGNhbGxfZnVuY3Rpb25fdGFpbChjYWxsYWJsZSwgYXJncyk7CiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjExMiw3ICsyMTUyLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQorY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQogewogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjE0MSw3ICsyMTgxLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIxNTEsOSArMjE5MSw4IEBACiAgICAgICAgIHJldHVybiBudWxsX2Vycm9yKCk7CiAKICAgICBmdW5jID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvLCBuYW1lKTsKLSAgICBpZiAoZnVuYyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwogICAgIHJldHZhbCA9IGNhbGxtZXRob2QoZnVuYywgZm9ybWF0LCB2YSwgMCk7CkBAIC0yMTYyLDcgKzIyMDEsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMTcyLDkgKzIyMTIsOCBAQAogICAgICAgICByZXR1cm4gbnVsbF9lcnJvcigpOwogCiAgICAgZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQobywgbmFtZSk7Ci0gICAgaWYgKGZ1bmMgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKICAgICByZXR2YWwgPSBjYWxsbWV0aG9kKGZ1bmMsIGZvcm1hdCwgdmEsIDApOwpAQCAtMjE4Myw3ICsyMjIyLDggQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sIGNoYXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIxOTMsOSArMjIzMyw4IEBACiAgICAgICAgIHJldHVybiBudWxsX2Vycm9yKCk7CiAKICAgICBmdW5jID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvLCBuYW1lKTsKLSAgICBpZiAoZnVuYyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKICAgICByZXR2YWwgPSBjYWxsbWV0aG9kKGZ1bmMsIGZvcm1hdCwgdmEsIDEpOwogICAgIHZhX2VuZCh2YSk7CkBAIC0yMjAzLDcgKzIyNDIsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMjczLDcgKzIzMTMsNyBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqbmFtZSwgLi4uKQogewogICAgIFB5T2JqZWN0ICphcmdzLCAqdG1wOwpAQCAtMjY0OCw4ICsyNjg4LDggQEAKICAqIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgcG9pbnRlcnMgd2l0aCBhIE5VTEwgY2hhciogdGVybWluYXRpbmcgdGhlIGFycmF5LgogICogKGllOiBhbiBhcmd2IG9yIGVudiBsaXN0KQogICoKLSAqIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSByZXR1cm5lZCBsaXN0IGlzIGFsbG9jYXRlZCB1c2luZyBtYWxsb2MoKSBhbmQgTVVTVAotICogYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIGZyZWUoKSBsb29wIG9yIF9QeV9GcmVlQ2hhclBBcnJheSgpLgorICogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHJldHVybmVkIGxpc3QgaXMgYWxsb2NhdGVkIHVzaW5nIFB5TWVtX01hbGxvYygpCisgKiBhbmQgTVVTVCBiZSBmcmVlZCBieSBfUHlfRnJlZUNoYXJQQXJyYXkoKS4KICAqLwogY2hhciAqY29uc3QgKgogX1B5U2VxdWVuY2VfQnl0ZXNUb0NoYXJwQXJyYXkoUHlPYmplY3QqIHNlbGYpCkBAIC0yNjU3LDYgKzI2OTcsNyBAQAogICAgIGNoYXIgKiphcnJheTsKICAgICBQeV9zc2l6ZV90IGksIGFyZ2M7CiAgICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGFyZ2MgPSBQeVNlcXVlbmNlX1NpemUoc2VsZik7CiAgICAgaWYgKGFyZ2MgPT0gLTEpCkBAIC0yNjY5LDcgKzI3MTAsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhcnJheSA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgIGFycmF5ID0gUHlNZW1fTWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CiAgICAgaWYgKGFycmF5ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNjg4LDExICsyNzI5LDEzIEBACiAgICAgICAgICAgICBhcnJheVtpXSA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KLSAgICAgICAgYXJyYXlbaV0gPSBzdHJkdXAoZGF0YSk7CisgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGl0ZW0pICsgMTsKKyAgICAgICAgYXJyYXlbaV0gPSBQeU1lbV9NYWxsb2Moc2l6ZSk7CiAgICAgICAgIGlmICghYXJyYXlbaV0pIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGFycmF5W2ldLCBkYXRhLCBzaXplKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KICAgICBhcnJheVthcmdjXSA9IE5VTEw7CkBAIC0yNzEyLDcgKzI3NTUsNyBAQAogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBmb3IgKGkgPSAwOyBhcnJheVtpXSAhPSBOVUxMOyArK2kpIHsKLSAgICAgICAgZnJlZShhcnJheVtpXSk7CisgICAgICAgIFB5TWVtX0ZyZWUoYXJyYXlbaV0pOwogICAgIH0KLSAgICBmcmVlKCh2b2lkKilhcnJheSk7CisgICAgUHlNZW1fRnJlZSgodm9pZCopYXJyYXkpOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYyBiL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKaW5kZXggNTA2NjdhNi4uNWI3NTcwNSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCkBAIC0xNTAsNiArMTUwLDcgQEAKICAgICB9CiAgICAgUHlfU0laRShuZXcpID0gc2l6ZTsKICAgICBuZXctPm9iX2FsbG9jID0gYWxsb2M7CisgICAgbmV3LT5vYl9zdGFydCA9IG5ldy0+b2JfYnl0ZXM7CiAgICAgbmV3LT5vYl9leHBvcnRzID0gMDsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKiluZXc7CkBAIC0xNzcsNDggKzE3OCw3MCBAQAogUHlCeXRlQXJyYXlfUmVzaXplKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgdm9pZCAqc3ZhbDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9hbGxvYzsKKyAgICBQeUJ5dGVBcnJheU9iamVjdCAqb2JqID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpOworICAgIFB5X3NzaXplX3QgYWxsb2MgPSBvYmotPm9iX2FsbG9jOworICAgIFB5X3NzaXplX3QgbG9naWNhbF9vZmZzZXQgPSBvYmotPm9iX3N0YXJ0IC0gb2JqLT5vYl9ieXRlczsKIAogICAgIGFzc2VydChzZWxmICE9IE5VTEwpOwogICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSk7CiAgICAgYXNzZXJ0KHNpemUgPj0gMCk7CisgICAgYXNzZXJ0KGxvZ2ljYWxfb2Zmc2V0ID49IDApOworICAgIGFzc2VydChsb2dpY2FsX29mZnNldCA8PSBhbGxvYyk7CiAKICAgICBpZiAoc2l6ZSA9PSBQeV9TSVpFKHNlbGYpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIV9jYW5yZXNpemUoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZikpIHsKKyAgICBpZiAoIV9jYW5yZXNpemUob2JqKSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKHNpemUgPCBhbGxvYyAvIDIpIHsKLSAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSA8IGFsbG9jKSB7Ci0gICAgICAgIC8qIFdpdGhpbiBhbGxvY2F0ZWQgc2l6ZTsgcXVpY2sgZXhpdCAqLwotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpemUgPD0gYWxsb2MgKiAxLjEyNSkgewotICAgICAgICAvKiBNb2RlcmF0ZSB1cHNpemU7IG92ZXJhbGxvY2F0ZSBzaW1pbGFyIHRvIGxpc3RfcmVzaXplKCkgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgaWYgKHNpemUgKyBsb2dpY2FsX29mZnNldCArIDEgPCBhbGxvYykgeworICAgICAgICAvKiBDdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8gaG9zdCB0aGUgcmVxdWVzdGVkIHNpemUsCisgICAgICAgICAgIGRlY2lkZSBvbiBhIHN0cmF0ZWd5LiAqLworICAgICAgICBpZiAoc2l6ZSA8IGFsbG9jIC8gMikgeworICAgICAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KKyAgICAgICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNaW5vciBkb3duc2l6ZTsgcXVpY2sgZXhpdCAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7CisgICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogTWFqb3IgdXBzaXplOyByZXNpemUgdXAgdG8gZXhhY3Qgc2l6ZSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICAvKiBOZWVkIGdyb3dpbmcsIGRlY2lkZSBvbiBhIHN0cmF0ZWd5ICovCisgICAgICAgIGlmIChzaXplIDw9IGFsbG9jICogMS4xMjUpIHsKKyAgICAgICAgICAgIC8qIE1vZGVyYXRlIHVwc2l6ZTsgb3ZlcmFsbG9jYXRlIHNpbWlsYXIgdG8gbGlzdF9yZXNpemUoKSAqLworICAgICAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNYWpvciB1cHNpemU7IHJlc2l6ZSB1cCB0byBleGFjdCBzaXplICovCisgICAgICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3ZhbCA9IFB5T2JqZWN0X1JlYWxsb2MoKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlcywgYWxsb2MpOwotICAgIGlmIChzdmFsID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChsb2dpY2FsX29mZnNldCA+IDApIHsKKyAgICAgICAgc3ZhbCA9IFB5T2JqZWN0X01hbGxvYyhhbGxvYyk7CisgICAgICAgIGlmIChzdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHN2YWwsIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgUHlfTUlOKHNpemUsIFB5X1NJWkUoc2VsZikpKTsKKyAgICAgICAgUHlPYmplY3RfRnJlZShvYmotPm9iX2J5dGVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN2YWwgPSBQeU9iamVjdF9SZWFsbG9jKG9iai0+b2JfYnl0ZXMsIGFsbG9jKTsKKyAgICAgICAgaWYgKHN2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXMgPSBzdmFsOworICAgIG9iai0+b2JfYnl0ZXMgPSBvYmotPm9iX3N0YXJ0ID0gc3ZhbDsKICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2FsbG9jID0gYWxsb2M7Ci0gICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLworICAgIG9iai0+b2JfYWxsb2MgPSBhbGxvYzsKKyAgICBvYmotPm9iX2J5dGVzW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTI4OCwxMyArMzExLDEzIEBACiAgICAgfQogICAgIGlmIChzaXplIDwgc2VsZi0+b2JfYWxsb2MpIHsKICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZildID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCisgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtQeV9TSVpFKHNlbGYpXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwogICAgIH0KICAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIG15c2l6ZSwgdm8uYnVmLCB2by5sZW4pOworICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgKyBteXNpemUsIHZvLmJ1Ziwgdm8ubGVuKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwpAQCAtMzMxLDYgKzM1NCw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBteXNpemU7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIGNvdW50ID0gMDsKQEAgLTMzOCwxOSArMzYyLDE2IEBACiAgICAgaWYgKGNvdW50ID4gMCAmJiBteXNpemUgPiBQWV9TU0laRV9UX01BWCAvIGNvdW50KQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzaXplID0gbXlzaXplICogY291bnQ7Ci0gICAgaWYgKHNpemUgPCBzZWxmLT5vYl9hbGxvYykgewotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKKyAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgaWYgKG15c2l6ZSA9PSAxKQotICAgICAgICBtZW1zZXQoc2VsZi0+b2JfYnl0ZXMsIHNlbGYtPm9iX2J5dGVzWzBdLCBzaXplKTsKKyAgICAgICAgbWVtc2V0KGJ1ZiwgYnVmWzBdLCBzaXplKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIGkqbXlzaXplLCBzZWxmLT5vYl9ieXRlcywgbXlzaXplKTsKKyAgICAgICAgICAgIG1lbWNweShidWYgKyBpKm15c2l6ZSwgYnVmLCBteXNpemUpOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRihzZWxmKTsKQEAgLTM2Niw3ICszODcsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImJ5dGVhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpKHNlbGYtPm9iX2J5dGVzW2ldKSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zODUsNyArNDA2LDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiYnl0ZWFycmF5IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoc2VsZi0+b2JfYnl0ZXNbaV0pKTsKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaW5kZXgpKSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoLCBjdXIsIGk7CkBAIC0zOTgsOCArNDE5LDggQEAKICAgICAgICAgaWYgKHNsaWNlbGVuZ3RoIDw9IDApCiAgICAgICAgICAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwogICAgICAgICBlbHNlIGlmIChzdGVwID09IDEpIHsKLSAgICAgICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIHN0YXJ0LCBzbGljZWxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFyICpzb3VyY2VfYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwpAQCAtNDI1LDEwICs0NDYsOTQgQEAKIH0KIAogc3RhdGljIGludAorYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnl0ZXMsIFB5X3NzaXplX3QgYnl0ZXNfbGVuKQoreworICAgIFB5X3NzaXplX3QgYXZhaWwgPSBoaSAtIGxvOworICAgIGNoYXIgKmJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICBQeV9zc2l6ZV90IGdyb3d0aCA9IGJ5dGVzX2xlbiAtIGF2YWlsOworICAgIGludCByZXMgPSAwOworICAgIGFzc2VydChhdmFpbCA+PSAwKTsKKworICAgIGlmIChncm93dGggPCAwKSB7CisgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBpZiAobG8gPT0gMCkgeworICAgICAgICAgICAgLyogU2hyaW5rIHRoZSBidWZmZXIgYnkgYWR2YW5jaW5nIGl0cyBsb2dpY2FsIHN0YXJ0ICovCisgICAgICAgICAgICBzZWxmLT5vYl9zdGFydCAtPSBncm93dGg7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdGFpbC0tLS0tLT58CisgICAgICAgICAgICAgIHwgICAgICB8PC1ieXRlc19sZW4tPnw8LS0tLS10YWlsLS0tLS0tPnwKKyAgICAgICAgICAgICAgMCAgICBuZXdfbG8gICAgICAgICBuZXdfaGkgICAgICAgICAgbmV3X3NpemUKKyAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgICAgICB8ICAgfDwtYnl0ZXNfbGVuLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgbG8gKyBieXRlc19sZW4sIGJ1ZiArIGhpLAorICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gaGkpOworICAgICAgICB9CisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApIHsKKyAgICAgICAgICAgIC8qIElzc3VlICMxOTU3ODogSGFuZGxpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaGVyZSBpcworICAgICAgICAgICAgICAgdHJpY2t5IGhlcmUgYmVjYXVzZSB0aGUgYnl0ZWFycmF5IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICBtb2RpZmllZC4gRGVwZW5kaW5nIG9uIGdyb3d0aCBhbmQgbG8sIHRoZSBiZWhhdmlvdXIgaXMKKyAgICAgICAgICAgICAgIGRpZmZlcmVudC4KKworICAgICAgICAgICAgICAgSWYgZ3Jvd3RoIDwgMCBhbmQgbG8gIT0gMCwgdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGJ1dCBhCisgICAgICAgICAgICAgICBNZW1vcnlFcnJvciBpcyBzdGlsbCByYWlzZWQgYW5kIHRoZSBtZW1vcnkgYmxvY2sgaXMgbm90CisgICAgICAgICAgICAgICBzaHJpbmtlZC4gT3RoZXJ3aXNlLCB0aGUgYnl0ZWFycmF5IGlzIHJlc3RvcmVkIGluIGl0cyBwcmV2aW91cworICAgICAgICAgICAgICAgc3RhdGUgYW5kIGEgTWVtb3J5RXJyb3IgaXMgcmFpc2VkLiAqLworICAgICAgICAgICAgaWYgKGxvID09IDApIHsKKyAgICAgICAgICAgICAgICBzZWxmLT5vYl9zdGFydCArPSBncm93dGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogbWVtbW92ZSgpIHJlbW92ZWQgYnl0ZXMsIHRoZSBieXRlYXJyYXkgb2JqZWN0IGNhbm5vdCBiZQorICAgICAgICAgICAgICAgcmVzdG9yZWQgaW4gaXRzIHByZXZpb3VzIHN0YXRlLiAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSArPSBncm93dGg7CisgICAgICAgICAgICByZXMgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgfQorICAgIGVsc2UgaWYgKGdyb3d0aCA+IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikgPiAoUHlfc3NpemVfdClQWV9TU0laRV9UX01BWCAtIGdyb3d0aCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgICAgIC8qIE1ha2UgdGhlIHBsYWNlIGZvciB0aGUgYWRkaXRpb25hbCBieXRlcyAqLworICAgICAgICAvKgorICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgfCAgIHw8LS0tYnl0ZXNfbGVuLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgKi8KKyAgICAgICAgbWVtbW92ZShidWYgKyBsbyArIGJ5dGVzX2xlbiwgYnVmICsgaGksCisgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGxvIC0gYnl0ZXNfbGVuKTsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXNfbGVuID4gMCkKKyAgICAgICAgbWVtY3B5KGJ1ZiArIGxvLCBieXRlcywgYnl0ZXNfbGVuKTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50CiBieXRlYXJyYXlfc2V0c2xpY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGksCiAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWVzKQogewotICAgIFB5X3NzaXplX3QgYXZhaWwsIG5lZWRlZDsKKyAgICBQeV9zc2l6ZV90IG5lZWRlZDsKICAgICB2b2lkICpieXRlczsKICAgICBQeV9idWZmZXIgdmJ5dGVzOwogICAgIGludCByZXMgPSAwOwpAQCAtNDY3LDUwICs1NzIsOSBAQAogICAgIGlmIChoaSA+IFB5X1NJWkUoc2VsZikpCiAgICAgICAgIGhpID0gUHlfU0laRShzZWxmKTsKIAotICAgIGF2YWlsID0gaGkgLSBsbzsKLSAgICBpZiAoYXZhaWwgPCAwKQotICAgICAgICBsbyA9IGhpID0gYXZhaWwgPSAwOwotCi0gICAgaWYgKGF2YWlsICE9IG5lZWRlZCkgewotICAgICAgICBpZiAoYXZhaWwgPiBuZWVkZWQpIHsKLSAgICAgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkgewotICAgICAgICAgICAgICAgIHJlcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgfCAgIHw8LW5lZWRlZC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIDAgICBsbyAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgbG8gKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgaGksCi0gICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogbmVlZCB0byB2ZXJpZnkgdGhpcyBjYW4ndCBvdmVyZmxvdyEgKi8KLSAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSArIG5lZWRlZCAtIGF2YWlsKSA8IDApIHsKLSAgICAgICAgICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXZhaWwgPCBuZWVkZWQpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICB8ICAgfDwtLS0tbmVlZGVkLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgbG8gKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgaGksCi0gICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBsbyAtIG5lZWRlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmVlZGVkID4gMCkKLSAgICAgICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgbG8sIGJ5dGVzLCBuZWVkZWQpOwotCi0KLSBmaW5pc2g6CisgICAgcmVzID0gYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihzZWxmLCBsbywgaGksIGJ5dGVzLCBuZWVkZWQpOwogICAgIGlmICh2Ynl0ZXMubGVuICE9IC0xKQotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmJ5dGVzKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmJ5dGVzKTsKICAgICByZXR1cm4gcmVzOwogfQogCkBAIC01MzMsNyArNTk3LDcgQEAKICAgICBpZiAoIV9nZXRieXRldmFsdWUodmFsdWUsICZpdmFsKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+b2JfYnl0ZXNbaV0gPSBpdmFsOworICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtpXSA9IGl2YWw7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU0MSw3ICs2MDUsOCBAQAogYnl0ZWFycmF5X2Fzc19zdWJzY3JpcHQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbmRleCwgUHlPYmplY3QgKnZhbHVlcykKIHsKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgbmVlZGVkOwotICAgIGNoYXIgKmJ5dGVzOworICAgIGNoYXIgKmJ1ZiwgKmJ5dGVzOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAogICAgIGlmIChQeUluZGV4X0NoZWNrKGluZGV4KSkgewogICAgICAgICBQeV9zc2l6ZV90IGkgPSBQeU51bWJlcl9Bc1NzaXplX3QoaW5kZXgsIFB5RXhjX0luZGV4RXJyb3IpOwpAQCAtNTY4LDcgKzYzMyw3IEBACiAgICAgICAgICAgICBpbnQgaXZhbDsKICAgICAgICAgICAgIGlmICghX2dldGJ5dGV2YWx1ZSh2YWx1ZXMsICZpdmFsKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBzZWxmLT5vYl9ieXRlc1tpXSA9IChjaGFyKWl2YWw7CisgICAgICAgICAgICBidWZbaV0gPSAoY2hhcilpdmFsOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC02MDYsNyArNjcxLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayh2YWx1ZXMpKTsKLSAgICAgICAgYnl0ZXMgPSAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopdmFsdWVzKS0+b2JfYnl0ZXM7CisgICAgICAgIGJ5dGVzID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHZhbHVlcyk7CiAgICAgICAgIG5lZWRlZCA9IFB5X1NJWkUodmFsdWVzKTsKICAgICB9CiAgICAgLyogTWFrZSBzdXJlIGJbNToyXSA9IC4uLiBpbnNlcnRzIGJlZm9yZSA1LCBub3QgYmVmb3JlIDIuICovCkBAIC02MTQsMzggKzY3OSw3IEBACiAgICAgICAgIChzdGVwID4gMCAmJiBzdGFydCA+IHN0b3ApKQogICAgICAgICBzdG9wID0gc3RhcnQ7CiAgICAgaWYgKHN0ZXAgPT0gMSkgewotICAgICAgICBpZiAoc2xpY2VsZW4gIT0gbmVlZGVkKSB7Ci0gICAgICAgICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKHNsaWNlbGVuID4gbmVlZGVkKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgIDAgICBzdGFydCAgICAgICAgICAgc3RvcCAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgICAgIHwgICB8PC0tLXNsaWNlbGVuLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgIHw8LW5lZWRlZC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgc3RhcnQgKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBzdG9wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgbmVlZGVkIC0gc2xpY2VsZW4pIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoc2xpY2VsZW4gPCBuZWVkZWQpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgIHw8LS0tLW5lZWRlZC0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0ICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIHN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gc3RhcnQgLSBuZWVkZWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRlZCA+IDApCi0gICAgICAgICAgICBtZW1jcHkoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCwgYnl0ZXMsIG5lZWRlZCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBieXRlYXJyYXlfc2V0c2xpY2VfbGluZWFyKHNlbGYsIHN0YXJ0LCBzdG9wLCBieXRlcywgbmVlZGVkKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChuZWVkZWQgPT0gMCkgewpAQCAtNjcyLDE0ICs3MDYsMTQgQEAKICAgICAgICAgICAgICAgICBpZiAoY3VyICsgc3RlcCA+PSAoc2l6ZV90KVB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKQogICAgICAgICAgICAgICAgICAgICBsaW0gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAtIGN1ciAtIDE7CiAKLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgY3VyIC0gaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzICsgY3VyICsgMSwgbGltKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiArIGN1ciAtIGksCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjdXIgKyAxLCBsaW0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogTW92ZSB0aGUgdGFpbCBvZiB0aGUgYnl0ZXMsIGluIG9uZSBjaHVuayAqLwogICAgICAgICAgICAgY3VyID0gc3RhcnQgKyAoc2l6ZV90KXNsaWNlbGVuKnN0ZXA7CiAgICAgICAgICAgICBpZiAoY3VyIDwgKHNpemVfdClQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSkgewotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBjdXIgLSBzbGljZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzICsgY3VyLAorICAgICAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgY3VyIC0gc2xpY2VsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAtIGN1cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCkBAIC03MDEsNyArNzM1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOyBjdXIgKz0gc3RlcCwgaSsrKQotICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzW2N1cl0gPSBieXRlc1tpXTsKKyAgICAgICAgICAgICAgICBidWZbY3VyXSA9IGJ5dGVzW2ldOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODEsNyArODE1LDcgQEAKICAgICAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBjb3VudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbWVtc2V0KHNlbGYtPm9iX2J5dGVzLCAwLCBjb3VudCk7CisgICAgICAgICAgICBtZW1zZXQoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCAwLCBjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNzk0LDcgKzgyOCw4IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHNpemUgPSB2aWV3LmxlbjsKICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApIGdvdG8gZmFpbDsKLSAgICAgICAgaWYgKFB5QnVmZmVyX1RvQ29udGlndW91cyhzZWxmLT5vYl9ieXRlcywgJnZpZXcsIHNpemUsICdDJykgPCAwKQorICAgICAgICBpZiAoUHlCdWZmZXJfVG9Db250aWd1b3VzKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwKKyAgICAgICAgICAgICZ2aWV3LCBzaXplLCAnQycpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtODM4LDcgKzg3Myw3IEBACiAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpKys7CiAgICAgICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBQeV9TSVpFKHNlbGYpKzEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZiktMV0gPSB2YWx1ZTsKKyAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW1B5X1NJWkUoc2VsZiktMV0gPSB2YWx1ZTsKICAgICB9CiAKICAgICAvKiBDbGVhbiB1cCBhbmQgcmV0dXJuIHN1Y2Nlc3MgKi8KQEAgLTg2Miw5ICs4OTcsMTAgQEAKICAgICAvKiAxNSA9PSBzdHJsZW4ocXVvdGVfcHJlZml4KSArIDIgKyBzdHJsZW4ocXVvdGVfcG9zdGZpeCkgKyAxICovCiAgICAgc2l6ZV90IG5ld3NpemU7CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIGNoYXIgYzsKLSAgICByZWdpc3RlciBjaGFyICpwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBjaGFyICpieXRlczsKKyAgICBjaGFyIGM7CisgICAgY2hhciAqcDsKICAgICBpbnQgcXVvdGU7CiAgICAgY2hhciAqdGVzdCwgKnN0YXJ0OwogICAgIGNoYXIgKmJ1ZmZlcjsKQEAgLTg5OSwxMSArOTM1LDEyIEBACiAgICAgICAgICpwKysgPSAqcXVvdGVfcHJlZml4Kys7CiAgICAgKnArKyA9IHF1b3RlOwogCisgICAgYnl0ZXMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8qIFRoZXJlJ3MgYXQgbGVhc3QgZW5vdWdoIHJvb20gZm9yIGEgaGV4IGVzY2FwZQogICAgICAgICAgICBhbmQgYSBjbG9zaW5nIHF1b3RlLiAqLwogICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gYnVmZmVyKSA+PSA1KTsKLSAgICAgICAgYyA9IHNlbGYtPm9iX2J5dGVzW2ldOworICAgICAgICBjID0gYnl0ZXNbaV07CiAgICAgICAgIGlmIChjID09ICdcJycgfHwgYyA9PSAnXFwnKQogICAgICAgICAgICAgKnArKyA9ICdcXCcsICpwKysgPSBjOwogICAgICAgICBlbHNlIGlmIChjID09ICdcdCcpCkBAIC0xMDM4LDYgKzEwNzUsNyBAQAogI2RlZmluZSBGQVNUU0VBUkNIIGZhc3RzZWFyY2gKICNkZWZpbmUgU1RSSU5HTElCKEYpIHN0cmluZ2xpYl8jI0YKICNkZWZpbmUgU1RSSU5HTElCX0NIQVIgY2hhcgorI2RlZmluZSBTVFJJTkdMSUJfU0laRU9GX0NIQVIgMQogI2RlZmluZSBTVFJJTkdMSUJfTEVOIFB5Qnl0ZUFycmF5X0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgUHlCeXRlQXJyYXlfQVNfU1RSSU5HCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKQEAgLTEwNDksNiArMTA4Nyw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9qb2luLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jdHlwZS5oIgpAQCAtMTQyOSw5ICsxNDY4LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlYXJyYXlfdHJhbnNsYXRlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBjaGFyICppbnB1dCwgKm91dHB1dDsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICp0YWJsZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGM7CisgICAgY2hhciAqaW5wdXQsICpvdXRwdXQ7CisgICAgY29uc3QgY2hhciAqdGFibGU7CisgICAgUHlfc3NpemVfdCBpLCBjOwogICAgIFB5T2JqZWN0ICppbnB1dF9vYmogPSAoUHlPYmplY3QqKXNlbGY7CiAgICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0OwogICAgIFB5X3NzaXplX3QgaW5sZW47CkBAIC0yMTkyLDcgKzIyMzEsNyBAQAogICAgIFB5X3NzaXplX3QgaSwgaiwgbiA9IFB5X1NJWkUoc2VsZik7CiAKICAgICBqID0gbiAvIDI7Ci0gICAgaGVhZCA9IHNlbGYtPm9iX2J5dGVzOworICAgIGhlYWQgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgdGFpbCA9IGhlYWQgKyBuIC0gMTsKICAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CiAgICAgICAgIHN3YXAgPSAqaGVhZDsKQEAgLTIyMTMsNiArMjI1Miw3IEBACiAgICAgUHlPYmplY3QgKnZhbHVlOwogICAgIGludCBpdmFsOwogICAgIFB5X3NzaXplX3Qgd2hlcmUsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibk86aW5zZXJ0IiwgJndoZXJlLCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIyMjYsNiArMjI2Niw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiArIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgaWYgKHdoZXJlIDwgMCkgewogICAgICAgICB3aGVyZSArPSBuOwpAQCAtMjIzNCw4ICsyMjc1LDggQEAKICAgICB9CiAgICAgaWYgKHdoZXJlID4gbikKICAgICAgICAgd2hlcmUgPSBuOwotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIG4gLSB3aGVyZSk7Ci0gICAgc2VsZi0+b2JfYnl0ZXNbd2hlcmVdID0gaXZhbDsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlICsgMSwgYnVmICsgd2hlcmUsIG4gLSB3aGVyZSk7CisgICAgYnVmW3doZXJlXSA9IGl2YWw7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTIyNjAsNyArMjMwMSw3IEBACiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuICsgMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPm9iX2J5dGVzW25dID0gdmFsdWU7CisgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW25dID0gdmFsdWU7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTIyOTEsNyArMjMzMiw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogVHJ5IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudC4gMzIgaXMgYXJiaXRyYXJ5LiAqLwotICAgIGJ1Zl9zaXplID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYXJnLCAzMik7CisgICAgYnVmX3NpemUgPSBQeU9iamVjdF9MZW5ndGhIaW50KGFyZywgMzIpOwogICAgIGlmIChidWZfc2l6ZSA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNTMsNiArMjM5NCw3IEBACiB7CiAgICAgaW50IHZhbHVlOwogICAgIFB5X3NzaXplX3Qgd2hlcmUgPSAtMSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgY2hhciAqYnVmOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwb3AiLCAmd2hlcmUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNzEsOCArMjQxMyw5IEBACiAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHZhbHVlID0gc2VsZi0+b2JfYnl0ZXNbd2hlcmVdOwotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSwgc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOworICAgIHZhbHVlID0gYnVmW3doZXJlXTsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlLCBidWYgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuIC0gMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjM4OCwxMiArMjQzMSwxMyBAQAogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IHdoZXJlLCBuID0gUHlfU0laRShzZWxmKTsKKyAgICBjaGFyICpidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAKICAgICBpZiAoISBfZ2V0Ynl0ZXZhbHVlKGFyZywgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKHdoZXJlID0gMDsgd2hlcmUgPCBuOyB3aGVyZSsrKSB7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9ieXRlc1t3aGVyZV0gPT0gdmFsdWUpCisgICAgICAgIGlmIChidWZbd2hlcmVdID09IHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICh3aGVyZSA9PSBuKSB7CkBAIC0yNDAzLDcgKzI0NDcsNyBAQAogICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOworICAgIG1lbW1vdmUoYnVmICsgd2hlcmUsIGJ1ZiArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gLSAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yNDEzLDIxICsyNDU3LDIxIEBACiAvKiBYWFggVGhlc2UgdHdvIGhlbHBlcnMgY291bGQgYmUgb3B0aW1pemVkIGlmIGFyZ3NpemUgPT0gMSAqLwogCiBzdGF0aWMgUHlfc3NpemVfdAotbHN0cmlwX2hlbHBlcih1bnNpZ25lZCBjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCitsc3RyaXBfaGVscGVyKGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKICAgICAgICAgICAgICAgdm9pZCAqYXJncHRyLCBQeV9zc2l6ZV90IGFyZ3NpemUpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG15c2l6ZSAmJiBtZW1jaHIoYXJncHRyLCBteXB0cltpXSwgYXJnc2l6ZSkpCisgICAgd2hpbGUgKGkgPCBteXNpemUgJiYgbWVtY2hyKGFyZ3B0ciwgKHVuc2lnbmVkIGNoYXIpIG15cHRyW2ldLCBhcmdzaXplKSkKICAgICAgICAgaSsrOwogICAgIHJldHVybiBpOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotcnN0cmlwX2hlbHBlcih1bnNpZ25lZCBjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCityc3RyaXBfaGVscGVyKGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKICAgICAgICAgICAgICAgdm9pZCAqYXJncHRyLCBQeV9zc2l6ZV90IGFyZ3NpemUpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gbXlzaXplIC0gMTsKLSAgICB3aGlsZSAoaSA+PSAwICYmIG1lbWNocihhcmdwdHIsIG15cHRyW2ldLCBhcmdzaXplKSkKKyAgICB3aGlsZSAoaSA+PSAwICYmIG1lbWNocihhcmdwdHIsICh1bnNpZ25lZCBjaGFyKSBteXB0cltpXSwgYXJnc2l6ZSkpCiAgICAgICAgIGktLTsKICAgICByZXR1cm4gaSArIDE7CiB9CkBAIC0yNDQyLDcgKzI0ODYsNyBAQAogYnl0ZWFycmF5X3N0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpzdHJpcCIsICZhcmcpKQpAQCAtMjQ1NCwxMCArMjQ5OCwxMCBAQAogICAgIGVsc2UgewogICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJncHRyID0gdmFyZy5idWY7CisgICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwogICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CiAgICAgfQotICAgIG15cHRyID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKICAgICBsZWZ0ID0gbHN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChsZWZ0ID09IG15c2l6ZSkKQEAgLTI0NjYsNyArMjUxMCw3IEBACiAgICAgICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKKyAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUobXlwdHIgKyBsZWZ0LCByaWdodCAtIGxlZnQpOwogfQogCiBQeURvY19TVFJWQVIobHN0cmlwX19kb2NfXywKQEAgLTI0NzksNyArMjUyMyw3IEBACiBieXRlYXJyYXlfbHN0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzpsc3RyaXAiLCAmYXJnKSkKQEAgLTI0OTEsMTYgKzI1MzUsMTYgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IHZhcmcuYnVmOworICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKICAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOwogICAgIH0KLSAgICBteXB0ciA9IHNlbGYtPm9iX2J5dGVzOworICAgIG15cHRyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CiAgICAgbGVmdCA9IGxzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICByaWdodCA9IG15c2l6ZTsKICAgICBpZiAoYXJnICE9IFB5X05vbmUpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOwotICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKIH0KIAogUHlEb2NfU1RSVkFSKHJzdHJpcF9fZG9jX18sCkBAIC0yNTEzLDcgKzI1NTcsNyBAQAogYnl0ZWFycmF5X3JzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOworICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2YXJnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cnN0cmlwIiwgJmFyZykpCkBAIC0yNTI1LDE1ICsyNTY5LDE1IEBACiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSB2YXJnLmJ1ZjsKKyAgICAgICAgYXJncHRyID0gKGNoYXIgKikgdmFyZy5idWY7CiAgICAgICAgIGFyZ3NpemUgPSB2YXJnLmxlbjsKICAgICB9Ci0gICAgbXlwdHIgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzLCByaWdodCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyLCByaWdodCk7CiB9CiAKIFB5RG9jX1NUUlZBUihkZWNvZGVfZG9jLApAQCAtMjU3OCw3MyArMjYyMiw5IEBACiBpbiBiZXR3ZWVuIGVhY2ggcGFpciwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgbmV3IGJ5dGVhcnJheS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9qb2luKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXQpCitieXRlYXJyYXlfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIFB5T2JqZWN0ICpzZXE7Ci0gICAgUHlfc3NpemVfdCBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeV9zc2l6ZV90IG47Ci0gICAgUHlPYmplY3QgKippdGVtczsKLSAgICBQeV9zc2l6ZV90IHRvdGFsc2l6ZSA9IDA7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICpkZXN0OwotCi0gICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KGl0LCAiY2FuIG9ubHkgam9pbiBhbiBpdGVyYWJsZSIpOwotICAgIGlmIChzZXEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOwotICAgIGl0ZW1zID0gUHlTZXF1ZW5jZV9GYXN0X0lURU1TKHNlcSk7Ci0KLSAgICAvKiBDb21wdXRlIHRoZSB0b3RhbCBzaXplLCBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSBhbGwgYnl0ZXMgKi8KLSAgICAvKiBYWFggU2hvdWxkbid0IHdlIHVzZSBfZ2V0YnVmZmVyKCkgb24gdGhlc2UgaXRlbXMgaW5zdGVhZD8gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYmogPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFQeUJ5dGVBcnJheV9DaGVjayhvYmopICYmICFQeUJ5dGVzX0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBvbmx5IGpvaW4gYW4gaXRlcmFibGUgb2YgYnl0ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICIoaXRlbSAlbGQgaGFzIHR5cGUgJyUuMTAwcycpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFggJWxkIGlzbid0IHJpZ2h0IG9uIFdpbjY0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpaSwgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgdG90YWxzaXplICs9IG15c2l6ZTsKLSAgICAgICAgdG90YWxzaXplICs9IFB5X1NJWkUob2JqKTsKLSAgICAgICAgaWYgKHRvdGFsc2l6ZSA8IDApIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQWxsb2NhdGUgdGhlIHJlc3VsdCwgYW5kIGNvcHkgdGhlIGJ5dGVzICovCi0gICAgcmVzdWx0ID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdG90YWxzaXplKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZGVzdCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhyZXN1bHQpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKm9iaiA9IGl0ZW1zW2ldOwotICAgICAgICBQeV9zc2l6ZV90IHNpemUgPSBQeV9TSVpFKG9iaik7Ci0gICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKG9iaikpCi0gICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhvYmopOwotICAgICAgICBlbHNlCi0gICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKG9iaik7Ci0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc2VsZi0+b2JfYnl0ZXMsIG15c2l6ZSk7Ci0gICAgICAgICAgICBkZXN0ICs9IG15c2l6ZTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoZGVzdCwgYnVmLCBzaXplKTsKLSAgICAgICAgZGVzdCArPSBzaXplOwotICAgIH0KLQotICAgIC8qIERvbmUgKi8KLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLyogRXJyb3IgaGFuZGxpbmcgKi8KLSAgZXJyb3I6Ci0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9ieXRlc19qb2luKHNlbGYsIGl0ZXJhYmxlKTsKIH0KIAogUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLApAQCAtMjc0OCw2ICsyNzI4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CisgICAgY2hhciAqYnVmOwogCiAgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfX19kaWN0X18pOwogICAgIGlmIChkaWN0ID09IE5VTEwpIHsKQEAgLTI3NTYsMTkgKzI3MzcsMjAgQEAKICAgICAgICAgUHlfSU5DUkVGKGRpY3QpOwogICAgIH0KIAorICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBpZiAocHJvdG8gPCAzKSB7CiAgICAgICAgIC8qIHVzZSBzdHIgYmFzZWQgcmVkdWN0aW9uIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLnggKi8KICAgICAgICAgUHlPYmplY3QgKmxhdGluMTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX2J5dGVzKQotICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShzZWxmLT5vYl9ieXRlcywgUHlfU0laRShzZWxmKSwgTlVMTCk7CisgICAgICAgIGlmIChQeV9TSVpFKHNlbGYpKQorICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShidWYsIFB5X1NJWkUoc2VsZiksIE5VTEwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7CiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyhOcylOKSIsIFB5X1RZUEUoc2VsZiksIGxhdGluMSwgImxhdGluLTEiLCBkaWN0KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIHVzZSBtb3JlIGVmZmljaWVudCBieXRlIGJhc2VkIHJlZHVjdGlvbiAqLwotICAgICAgICBpZiAoc2VsZi0+b2JfYnl0ZXMpIHsKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyh5IylOKSIsIFB5X1RZUEUoc2VsZiksIHNlbGYtPm9iX2J5dGVzLCBQeV9TSVpFKHNlbGYpLCBkaWN0KTsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikpIHsKKyAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyh5IylOKSIsIFB5X1RZUEUoc2VsZiksIGJ1ZiwgUHlfU0laRShzZWxmKSwgZGljdCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oKU4pIiwgUHlfVFlQRShzZWxmKSwgZGljdCk7CkBAIC0yODQ5LDcgKzI4MzEsNyBAQAogICAgIHsiY291bnQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCiAgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX2RvY30sCiAgICAgeyJlbmRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZW5kc3dpdGgsIE1FVEhfVkFSQVJHUywgZW5kc3dpdGhfX2RvY19ffSwKLSAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgIGV4cGFuZHRhYnNfX2RvY19ffSwKICAgICB7ImV4dGVuZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZXh0ZW5kLCBNRVRIX08sIGV4dGVuZF9fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZmluZCwgTUVUSF9WQVJBUkdTLCBmaW5kX19kb2NfX30sCkBAIC0zMDAwLDcgKzI5ODIsNyBAQAogCiAgICAgaWYgKGl0LT5pdF9pbmRleCA8IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlcSkpIHsKICAgICAgICAgaXRlbSA9IFB5TG9uZ19Gcm9tTG9uZygKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNlcS0+b2JfYnl0ZXNbaXQtPml0X2luZGV4XSk7CisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VxKVtpdC0+aXRfaW5kZXhdKTsKICAgICAgICAgaWYgKGl0ZW0gIT0gTlVMTCkKICAgICAgICAgICAgICsraXQtPml0X2luZGV4OwogICAgICAgICByZXR1cm4gaXRlbTsKZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jIGIvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKaW5kZXggZWYzYzJmNy4uNGU4MTA3YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKKysrIGIvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKQEAgLTEwLDkgKzEwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzc3BhY2UoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNTUEFDRSgqcCkpCkBAIC00MCw5ICs0MCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2FscGhhKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTQUxQSEEoKnApKQpAQCAtNzAsOSArNzAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNhbG51bShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0FMTlVNKCpwKSkKQEAgLTEwMCw5ICsxMDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNkaWdpdChjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0RJR0lUKCpwKSkKQEAgLTEzMCw5ICsxMzAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNsb3dlcihjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTE2NCw5ICsxNjQsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXN1cHBlcihjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTIwMCw5ICsyMDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXN0aXRsZShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZCwgcHJldmlvdXNfaXNfY2FzZWQ7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICBjYXNlZCA9IDA7CiAgICAgcHJldmlvdXNfaXNfY2FzZWQgPSAwOwogICAgIGZvciAoOyBwIDwgZTsgcCsrKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2ggPSAqcDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaCA9ICpwOwogCiAgICAgICAgIGlmIChQeV9JU1VQUEVSKGNoKSkgewogICAgICAgICAgICAgaWYgKHByZXZpb3VzX2lzX2Nhc2VkKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlc29iamVjdC5jIGIvT2JqZWN0cy9ieXRlc29iamVjdC5jCmluZGV4IGY2ZDE2ZGEuLmI5M2I5ZWYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZXNvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVzb2JqZWN0LmMKQEAgLTEwLDkgKzEwLDE4IEBACiBzdGF0aWMgUHlfc3NpemVfdAogX2dldGJ1ZmZlcihQeU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCiB7Ci0gICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVyID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7CisgICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVycHJvY3M7CisgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIC8qIEZhc3QgcGF0aCwgZS5nLiBmb3IgLmpvaW4oKSBvZiBtYW55IGJ5dGVzIG9iamVjdHMgKi8KKyAgICAgICAgUHlfSU5DUkVGKG9iaik7CisgICAgICAgIHZpZXctPm9iaiA9IG9iajsKKyAgICAgICAgdmlldy0+YnVmID0gUHlCeXRlc19BU19TVFJJTkcob2JqKTsKKyAgICAgICAgdmlldy0+bGVuID0gUHlCeXRlc19HRVRfU0laRShvYmopOworICAgICAgICByZXR1cm4gdmlldy0+bGVuOworICAgIH0KIAotICAgIGlmIChidWZmZXIgPT0gTlVMTCB8fCBidWZmZXItPmJmX2dldGJ1ZmZlciA9PSBOVUxMKQorICAgIGJ1ZmZlcnByb2NzID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7CisgICAgaWYgKGJ1ZmZlcnByb2NzID09IE5VTEwgfHwgYnVmZmVycHJvY3MtPmJmX2dldGJ1ZmZlciA9PSBOVUxMKQogICAgIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJUeXBlICUuMTAwcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGJ1ZmZlciBBUEkiLApAQCAtMjAsNyArMjksNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKGJ1ZmZlci0+YmZfZ2V0YnVmZmVyKG9iaiwgdmlldywgUHlCVUZfU0lNUExFKSA8IDApCisgICAgaWYgKGJ1ZmZlcnByb2NzLT5iZl9nZXRidWZmZXIob2JqLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiB2aWV3LT5sZW47CiB9CkBAIC02NSw3ICs3NCw3IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBzaXplKQogewotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAiTmVnYXRpdmUgc2l6ZSBwYXNzZWQgdG8gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSIpOwpAQCAtOTgsNyArMTA3LDcgQEAKICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIHNpemUpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOwogICAgIG9wLT5vYl9zaGFzaCA9IC0xOwogICAgIGlmIChzdHIgIT0gTlVMTCkKICAgICAgICAgUHlfTUVNQ1BZKG9wLT5vYl9zdmFsLCBzdHIsIHNpemUpOwpAQCAtMTE3LDggKzEyNiw4IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVzX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBzaXplOwotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIHNpemVfdCBzaXplOworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOwogCiAgICAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKICAgICBzaXplID0gc3RybGVuKHN0cik7CkBAIC0xNDYsNyArMTU1LDcgQEAKICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIHNpemUpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOwogICAgIG9wLT5vYl9zaGFzaCA9IC0xOwogICAgIFB5X01FTUNQWShvcC0+b2Jfc3ZhbCwgc3RyLCBzaXplKzEpOwogICAgIC8qIHNoYXJlIHNob3J0IHN0cmluZ3MgKi8KQEAgLTUxNyw3ICs1MjYsNyBAQAogLyogb2JqZWN0IGFwaSAqLwogCiBQeV9zc2l6ZV90Ci1QeUJ5dGVzX1NpemUocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlCeXRlc19TaXplKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MjgsNyArNTM3LDcgQEAKIH0KIAogY2hhciAqCi1QeUJ5dGVzX0FzU3RyaW5nKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5Qnl0ZXNfQXNTdHJpbmcoUHlPYmplY3QgKm9wKQogewogICAgIGlmICghUHlCeXRlc19DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTUzOSw5ICs1NDgsOSBAQAogfQogCiBpbnQKLVB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY2hhciAqKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCAqbGVuKQorUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpsZW4pCiB7CiAgICAgaWYgKHMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTU3Myw2ICs1ODIsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvam9pbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY3R5cGUuaCIKQEAgLTU4Miw3ICs1OTIsNyBAQAogUHlPYmplY3QgKgogUHlCeXRlc19SZXByKFB5T2JqZWN0ICpvYmosIGludCBzbWFydHF1b3RlcykKIHsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0KiBvcCA9IChQeUJ5dGVzT2JqZWN0Kikgb2JqOworICAgIFB5Qnl0ZXNPYmplY3QqIG9wID0gKFB5Qnl0ZXNPYmplY3QqKSBvYmo7CiAgICAgUHlfc3NpemVfdCBpLCBsZW5ndGggPSBQeV9TSVpFKG9wKTsKICAgICBzaXplX3QgbmV3c2l6ZSwgc3F1b3RlcywgZHF1b3RlczsKICAgICBQeU9iamVjdCAqdjsKQEAgLTcyMSwxMiArNzMxLDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yZXBlYXQocmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBuKQorYnl0ZXNfcmVwZWF0KFB5Qnl0ZXNPYmplY3QgKmEsIFB5X3NzaXplX3QgbikKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKICAgICBzaXplX3QgbmJ5dGVzOwogICAgIGlmIChuIDwgMCkKICAgICAgICAgbiA9IDA7CkBAIC03NTIsNyArNzYyLDcgQEAKICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIG5ieXRlcyk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CiAgICAgb3AtPm9iX3NoYXNoID0gLTE7CiAgICAgb3AtPm9iX3N2YWxbc2l6ZV0gPSAnXDAnOwogICAgIGlmIChQeV9TSVpFKGEpID09IDEgJiYgbiA+IDApIHsKQEAgLTc5Niw3ICs4MDYsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfaXRlbShQeUJ5dGVzT2JqZWN0ICphLCByZWdpc3RlciBQeV9zc2l6ZV90IGkpCitieXRlc19pdGVtKFB5Qnl0ZXNPYmplY3QgKmEsIFB5X3NzaXplX3QgaSkKIHsKICAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKGEpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CkBAIC04MDUsNiArODE1LDIzIEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcilhLT5vYl9zdmFsW2ldKTsKIH0KIAorUHlfTE9DQUwoaW50KQorYnl0ZXNfY29tcGFyZV9lcShQeUJ5dGVzT2JqZWN0ICphLCBQeUJ5dGVzT2JqZWN0ICpiKQoreworICAgIGludCBjbXA7CisgICAgUHlfc3NpemVfdCBsZW47CisKKyAgICBsZW4gPSBQeV9TSVpFKGEpOworICAgIGlmIChQeV9TSVpFKGIpICE9IGxlbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoYS0+b2Jfc3ZhbFswXSAhPSBiLT5vYl9zdmFsWzBdKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNtcCA9IG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBsZW4pOworICAgIHJldHVybiAoY21wID09IDApOworfQorCiBzdGF0aWMgUHlPYmplY3QqCiBieXRlc19yaWNoY29tcGFyZShQeUJ5dGVzT2JqZWN0ICphLCBQeUJ5dGVzT2JqZWN0ICpiLCBpbnQgb3ApCiB7CkBAIC04MjUsNTMgKzg1Miw1NSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdCA9IFB5X05vdEltcGxlbWVudGVkOwotICAgICAgICBnb3RvIG91dDsKICAgICB9Ci0gICAgaWYgKGEgPT0gYikgeworICAgIGVsc2UgaWYgKGEgPT0gYikgewogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6Y2FzZSBQeV9MRTpjYXNlIFB5X0dFOgorICAgICAgICBjYXNlIFB5X0VROgorICAgICAgICBjYXNlIFB5X0xFOgorICAgICAgICBjYXNlIFB5X0dFOgorICAgICAgICAgICAgLyogYSBzdHJpbmcgaXMgZXF1YWwgdG8gaXRzZWxmICovCiAgICAgICAgICAgICByZXN1bHQgPSBQeV9UcnVlOwotICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIGNhc2UgUHlfTkU6Y2FzZSBQeV9MVDpjYXNlIFB5X0dUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfTkU6CisgICAgICAgIGNhc2UgUHlfTFQ6CisgICAgICAgIGNhc2UgUHlfR1Q6CiAgICAgICAgICAgICByZXN1bHQgPSBQeV9GYWxzZTsKLSAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG9wID09IFB5X0VRKSB7Ci0gICAgICAgIC8qIFN1cHBvcnRpbmcgUHlfTkUgaGVyZSBhcyB3ZWxsIGRvZXMgbm90IHNhdmUKLSAgICAgICAgICAgbXVjaCB0aW1lLCBzaW5jZSBQeV9ORSBpcyByYXJlbHkgdXNlZC4gICovCi0gICAgICAgIGlmIChQeV9TSVpFKGEpID09IFB5X1NJWkUoYikKLSAgICAgICAgICAgICYmIChhLT5vYl9zdmFsWzBdID09IGItPm9iX3N2YWxbMF0KLSAgICAgICAgICAgICYmIG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBQeV9TSVpFKGEpKSA9PSAwKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gUHlfVHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X0ZhbHNlOworICAgIGVsc2UgaWYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSB7CisgICAgICAgIGludCBlcSA9IGJ5dGVzX2NvbXBhcmVfZXEoYSwgYik7CisgICAgICAgIGVxIF49IChvcCA9PSBQeV9ORSk7CisgICAgICAgIHJlc3VsdCA9IGVxID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbGVuX2EgPSBQeV9TSVpFKGEpOworICAgICAgICBsZW5fYiA9IFB5X1NJWkUoYik7CisgICAgICAgIG1pbl9sZW4gPSBQeV9NSU4obGVuX2EsIGxlbl9iKTsKKyAgICAgICAgaWYgKG1pbl9sZW4gPiAwKSB7CisgICAgICAgICAgICBjID0gUHlfQ0hBUk1BU0soKmEtPm9iX3N2YWwpIC0gUHlfQ0hBUk1BU0soKmItPm9iX3N2YWwpOworICAgICAgICAgICAgaWYgKGMgPT0gMCkKKyAgICAgICAgICAgICAgICBjID0gbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIG1pbl9sZW4pOwogICAgICAgICB9Ci0gICAgICAgIGdvdG8gb3V0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0gMDsKKyAgICAgICAgaWYgKGMgPT0gMCkKKyAgICAgICAgICAgIGMgPSAobGVuX2EgPCBsZW5fYikgPyAtMSA6IChsZW5fYSA+IGxlbl9iKSA/IDEgOiAwOworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgUHlfTFQ6IGMgPSBjIDwgIDA7IGJyZWFrOworICAgICAgICBjYXNlIFB5X0xFOiBjID0gYyA8PSAwOyBicmVhazsKKyAgICAgICAgY2FzZSBQeV9HVDogYyA9IGMgPiAgMDsgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfR0U6IGMgPSBjID49IDA7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IGMgPyBQeV9UcnVlIDogUHlfRmFsc2U7CiAgICAgfQotICAgIGxlbl9hID0gUHlfU0laRShhKTsgbGVuX2IgPSBQeV9TSVpFKGIpOwotICAgIG1pbl9sZW4gPSAobGVuX2EgPCBsZW5fYikgPyBsZW5fYSA6IGxlbl9iOwotICAgIGlmIChtaW5fbGVuID4gMCkgewotICAgICAgICBjID0gUHlfQ0hBUk1BU0soKmEtPm9iX3N2YWwpIC0gUHlfQ0hBUk1BU0soKmItPm9iX3N2YWwpOwotICAgICAgICBpZiAoYz09MCkKLSAgICAgICAgICAgIGMgPSBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgbWluX2xlbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGMgPSAwOwotICAgIGlmIChjID09IDApCi0gICAgICAgIGMgPSAobGVuX2EgPCBsZW5fYikgPyAtMSA6IChsZW5fYSA+IGxlbl9iKSA/IDEgOiAwOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIFB5X0xUOiBjID0gYyA8ICAwOyBicmVhazsKLSAgICBjYXNlIFB5X0xFOiBjID0gYyA8PSAwOyBicmVhazsKLSAgICBjYXNlIFB5X0VROiBhc3NlcnQoMCk7ICBicmVhazsgLyogdW5yZWFjaGFibGUgKi8KLSAgICBjYXNlIFB5X05FOiBjID0gYyAhPSAwOyBicmVhazsKLSAgICBjYXNlIFB5X0dUOiBjID0gYyA+ICAwOyBicmVhazsKLSAgICBjYXNlIFB5X0dFOiBjID0gYyA+PSAwOyBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXN1bHQgPSBQeV9Ob3RJbXBsZW1lbnRlZDsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHJlc3VsdCA9IGMgPyBQeV9UcnVlIDogUHlfRmFsc2U7Ci0gIG91dDoKKwogICAgIFB5X0lOQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC04ODEsNyArOTEwLDcgQEAKIHsKICAgICBpZiAoYS0+b2Jfc2hhc2ggPT0gLTEpIHsKICAgICAgICAgLyogQ2FuJ3QgZmFpbCAqLwotICAgICAgICBhLT5vYl9zaGFzaCA9IF9QeV9IYXNoQnl0ZXMoKHVuc2lnbmVkIGNoYXIgKikgYS0+b2Jfc3ZhbCwgUHlfU0laRShhKSk7CisgICAgICAgIGEtPm9iX3NoYXNoID0gX1B5X0hhc2hCeXRlcyhhLT5vYl9zdmFsLCBQeV9TSVpFKGEpKTsKICAgICB9CiAgICAgcmV0dXJuIGEtPm9iX3NoYXNoOwogfQpAQCAtMTEyNSw5NCArMTE1NCw5IEBACiBFeGFtcGxlOiBiJy4nLmpvaW4oW2InYWInLCBiJ3BxJywgYidycyddKSAtPiBiJ2FiLnBxLnJzJy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2pvaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvcmlnKQorYnl0ZXNfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIGNoYXIgKnNlcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOwotICAgIGNvbnN0IFB5X3NzaXplX3Qgc2VwbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKTsKLSAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLSAgICBjaGFyICpwOwotICAgIFB5X3NzaXplX3Qgc2VxbGVuID0gMDsKLSAgICBzaXplX3Qgc3ogPSAwOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqc2VxLCAqaXRlbTsKLQotICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChvcmlnLCAiIik7Ci0gICAgaWYgKHNlcSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOwotICAgIGlmIChzZXFsZW4gPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygiIik7Ci0gICAgfQotICAgIGlmIChzZXFsZW4gPT0gMSkgewotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgMCk7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QoaXRlbSkpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIHRoaW5ncyB0byBqb2luLCBvciBlbHNlIHdlIGhhdmUgYSBzdWJjbGFzcwotICAgICAqIG9mIHRoZSBidWlsdGluIHR5cGVzIGluIHRoZSBzZXF1ZW5jZS4KLSAgICAgKiBEbyBhIHByZS1wYXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHRvdGFsIGFtb3VudCBvZiBzcGFjZSB3ZSdsbAotICAgICAqIG5lZWQgKHN6KSwgYW5kIHNlZSB3aGV0aGVyIGFsbCBhcmd1bWVudCBhcmUgYnl0ZXMuCi0gICAgICovCi0gICAgLyogWFhYIFNob3VsZG4ndCB3ZSB1c2UgX2dldGJ1ZmZlcigpIG9uIHRoZXNlIGl0ZW1zIGluc3RlYWQ/ICovCi0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBvbGRfc3ogPSBzejsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOwotICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soaXRlbSkgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBpdGVtICV6ZDogZXhwZWN0ZWQgYnl0ZXMsIgotICAgICAgICAgICAgICAgICAgICAgICAgICIgJS44MHMgZm91bmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGksIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBzeiArPSBQeV9TSVpFKGl0ZW0pOwotICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgICAgc3ogKz0gc2VwbGVuOwotICAgICAgICBpZiAoc3ogPCBvbGRfc3ogfHwgc3ogPiBQWV9TU0laRV9UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgImpvaW4oKSByZXN1bHQgaXMgdG9vIGxvbmcgZm9yIGJ5dGVzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQWxsb2NhdGUgcmVzdWx0IHNwYWNlLiAqLwotICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIqKU5VTEwsIHN6KTsKLSAgICBpZiAocmVzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIENhdGVuYXRlIGV2ZXJ5dGhpbmcuICovCi0gICAgLyogSSdtIG5vdCB3b3JyaWVkIGFib3V0IGEgUHlCeXRlQXJyYXkgaXRlbSBncm93aW5nIGJlY2F1c2UgdGhlcmUncwotICAgICAgIG5vd2hlcmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB3ZSByZWxlYXNlIHRoZSBHSUwuICovCi0gICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7Ci0gICAgICAgIHNpemVfdCBuOwotICAgICAgICBjaGFyICpxOwotICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIHNlcCwgc2VwbGVuKTsKLSAgICAgICAgICAgIHAgKz0gc2VwbGVuOwotICAgICAgICB9Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKLSAgICAgICAgbiA9IFB5X1NJWkUoaXRlbSk7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKGl0ZW0pKQotICAgICAgICAgICAgcSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBxID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBQeV9NRU1DUFkocCwgcSwgbik7Ci0gICAgICAgIHAgKz0gbjsKLSAgICB9Ci0KLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiBzdHJpbmdsaWJfYnl0ZXNfam9pbihzZWxmLCBpdGVyYWJsZSk7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTE0MzUsNyArMTM3OSw3IEBACiB7CiAgICAgUHlPYmplY3QgKnNlcCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgKGNoYXIgKilzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHNlcCAhPSBOVUxMICYmIHNlcCAhPSBQeV9Ob25lKSB7CkBAIC0xNTQ5LDkgKzE0OTMsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzX3RyYW5zbGF0ZShQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBjaGFyICppbnB1dCwgKm91dHB1dDsKKyAgICBjaGFyICppbnB1dCwgKm91dHB1dDsKICAgICBjb25zdCBjaGFyICp0YWJsZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGMsIGNoYW5nZWQgPSAwOworICAgIFB5X3NzaXplX3QgaSwgYywgY2hhbmdlZCA9IDA7CiAgICAgUHlPYmplY3QgKmlucHV0X29iaiA9IChQeU9iamVjdCopc2VsZjsKICAgICBjb25zdCBjaGFyICpvdXRwdXRfc3RhcnQsICpkZWxfdGFibGU9TlVMTDsKICAgICBQeV9zc2l6ZV90IGlubGVuLCB0YWJsZW4sIGRlbGxlbiA9IDA7CkBAIC0yMzI5LDggKzIyNzMsNiBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nID09IE5VTEwpCi0gICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOwogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiB9CiAKQEAgLTI0NjAsNyArMjQwMiw3IEBACiAgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZGVjb2RlLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBkZWNvZGVfX2RvY19ffSwKICAgICB7ImVuZHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2VuZHN3aXRoLCBNRVRIX1ZBUkFSR1MsCiAgICAgIGVuZHN3aXRoX19kb2NfX30sCi0gICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICBleHBhbmR0YWJzX19kb2NfX30sCiAgICAgeyJmaW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LAogICAgIHsiZnJvbWhleCIsIChQeUNGdW5jdGlvbilieXRlc19mcm9taGV4LCBNRVRIX1ZBUkFSR1N8TUVUSF9DTEFTUywKQEAgLTI2OTIsNyArMjYzNCw3IEBACiAgICAgfQogCiAgICAgLyogRm9yIGl0ZXJhdG9yIHZlcnNpb24sIGNyZWF0ZSBhIHN0cmluZyBvYmplY3QgYW5kIHJlc2l6ZSBhcyBuZWVkZWQgKi8KLSAgICBzaXplID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoeCwgNjQpOworICAgIHNpemUgPSBQeU9iamVjdF9MZW5ndGhIaW50KHgsIDY0KTsKICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBBbGxvY2F0ZSBhbiBleHRyYSBieXRlIHRvIHByZXZlbnQgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgpIGZyb20KQEAgLTI3NTAsOSArMjY5Miw4IEBACiAgICAgcmV0dXJuIG5ldzsKIAogICBlcnJvcjoKLSAgICAvKiBFcnJvciBoYW5kbGluZyB3aGVuIG5ldyAhPSBOVUxMICovCiAgICAgUHlfWERFQ1JFRihpdCk7Ci0gICAgUHlfREVDUkVGKG5ldyk7CisgICAgUHlfWERFQ1JFRihuZXcpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yODM4LDkgKzI3NzksOSBAQAogfTsKIAogdm9pZAotUHlCeXRlc19Db25jYXQocmVnaXN0ZXIgUHlPYmplY3QgKipwdiwgcmVnaXN0ZXIgUHlPYmplY3QgKncpCitQeUJ5dGVzX0NvbmNhdChQeU9iamVjdCAqKnB2LCBQeU9iamVjdCAqdykKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBhc3NlcnQocHYgIT0gTlVMTCk7CiAgICAgaWYgKCpwdiA9PSBOVUxMKQogICAgICAgICByZXR1cm47CkBAIC0yODU0LDcgKzI3OTUsNyBAQAogfQogCiB2b2lkCi1QeUJ5dGVzX0NvbmNhdEFuZERlbChyZWdpc3RlciBQeU9iamVjdCAqKnB2LCByZWdpc3RlciBQeU9iamVjdCAqdykKK1B5Qnl0ZXNfQ29uY2F0QW5kRGVsKFB5T2JqZWN0ICoqcHYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5Qnl0ZXNfQ29uY2F0KHB2LCB3KTsKICAgICBQeV9YREVDUkVGKHcpOwpAQCAtMjg3OCw4ICsyODE5LDggQEAKIGludAogX1B5Qnl0ZXNfUmVzaXplKFB5T2JqZWN0ICoqcHYsIFB5X3NzaXplX3QgbmV3c2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpzdjsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeUJ5dGVzT2JqZWN0ICpzdjsKICAgICB2ID0gKnB2OwogICAgIGlmICghUHlCeXRlc19DaGVjayh2KSB8fCBQeV9SRUZDTlQodikgIT0gMSB8fCBuZXdzaXplIDwgMCkgewogICAgICAgICAqcHYgPSAwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGFzc29iamVjdC5jIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCmluZGV4IGNkYzliMWMuLjBjMGJkNDcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY2xhc3NvYmplY3QuYworKysgYi9PYmplY3RzL2NsYXNzb2JqZWN0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIFB5T2JqZWN0ICoKIFB5TWV0aG9kX05ldyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlNZXRob2RPYmplY3QgKmltOworICAgIFB5TWV0aG9kT2JqZWN0ICppbTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBpbSA9IGZyZWVfbGlzdDsKICAgICBpZiAoaW0gIT0gTlVMTCkgewogICAgICAgICBmcmVlX2xpc3QgPSAoUHlNZXRob2RPYmplY3QgKikoaW0tPmltX3NlbGYpOwotICAgICAgICBQeU9iamVjdF9JTklUKGltLCAmUHlNZXRob2RfVHlwZSk7CisgICAgICAgICh2b2lkKVB5T2JqZWN0X0lOSVQoaW0sICZQeU1ldGhvZF9UeXBlKTsKICAgICAgICAgbnVtZnJlZS0tOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTY5LDYgKzY5LDMwIEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWltOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorbWV0aG9kX3JlZHVjZShQeU1ldGhvZE9iamVjdCAqaW0pCit7CisgICAgUHlPYmplY3QgKnNlbGYgPSBQeU1ldGhvZF9HRVRfU0VMRihpbSk7CisgICAgUHlPYmplY3QgKmZ1bmMgPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oaW0pOworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBQeU9iamVjdCAqZnVuY25hbWU7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBmdW5jbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZnVuYywgJlB5SWRfX19uYW1lX18pOworICAgIGlmIChmdW5jbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT04pIiwgZ2V0YXR0ciwgc2VsZiwgZnVuY25hbWUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbWV0aG9kX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pbWV0aG9kX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKwogLyogRGVzY3JpcHRvcnMgZm9yIFB5TWV0aG9kIGF0dHJpYnV0ZXMgKi8KIAogLyogaW1fZnVuYyBhbmQgaW1fc2VsZiBhcmUgc3RvcmVkIGluIHRoZSBQeU1ldGhvZCBvYmplY3QgKi8KQEAgLTE2NCw3ICsxODgsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbWV0aG9kX2RlYWxsb2MocmVnaXN0ZXIgUHlNZXRob2RPYmplY3QgKmltKQorbWV0aG9kX2RlYWxsb2MoUHlNZXRob2RPYmplY3QgKmltKQogewogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGltKTsKICAgICBpZiAoaW0tPmltX3dlYWtyZWZsaXN0ICE9IE5VTEwpCkBAIC0zNjcsNyArMzkxLDcgQEAKICAgICBvZmZzZXRvZihQeU1ldGhvZE9iamVjdCwgaW1fd2Vha3JlZmxpc3QpLCAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBtZXRob2RfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBtZXRob2RfbWVtYmVybGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTA5LDcgKzUzMyw3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqCiBpbnN0YW5jZW1ldGhvZF9kZXNjcl9nZXQoUHlPYmplY3QgKmRlc2NyLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqdHlwZSkgewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpmdW5jID0gUHlJbnN0YW5jZU1ldGhvZF9HRVRfRlVOQ1RJT04oZGVzY3IpOworICAgIFB5T2JqZWN0ICpmdW5jID0gUHlJbnN0YW5jZU1ldGhvZF9HRVRfRlVOQ1RJT04oZGVzY3IpOwogICAgIGlmIChvYmogPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgICAgIHJldHVybiBmdW5jOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMgYi9PYmplY3RzL2NvZGVvYmplY3QuYwppbmRleCA5NzEzZjYxLi4zNTNmNDE0IDEwMDY0NAotLS0gYS9PYmplY3RzL2NvZGVvYmplY3QuYworKysgYi9PYmplY3RzL2NvZGVvYmplY3QuYwpAQCAtNzQsNiArNzQsMTEgQEAKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBmaWxlbmFtZSBpcyBhIHJlYWR5IFVuaWNvZGUgc3RyaW5nICovCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShmaWxlbmFtZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIG5fY2VsbHZhcnMgPSBQeVR1cGxlX0dFVF9TSVpFKGNlbGx2YXJzKTsKICAgICBpbnRlcm5fc3RyaW5ncyhuYW1lcyk7CiAgICAgaW50ZXJuX3N0cmluZ3ModmFybmFtZXMpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMgYi9PYmplY3RzL2NvbXBsZXhvYmplY3QuYwppbmRleCBiMDhhYTZmLi5hNWI3NmYwIDEwMDY0NAotLS0gYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYworKysgYi9PYmplY3RzL2NvbXBsZXhvYmplY3QuYwpAQCAtMjExLDEzICsyMTEsMTMgQEAKIFB5T2JqZWN0ICoKIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoUHlfY29tcGxleCBjdmFsKQogewotICAgIHJlZ2lzdGVyIFB5Q29tcGxleE9iamVjdCAqb3A7CisgICAgUHlDb21wbGV4T2JqZWN0ICpvcDsKIAogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXcgKi8KICAgICBvcCA9IChQeUNvbXBsZXhPYmplY3QgKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZihQeUNvbXBsZXhPYmplY3QpKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVChvcCwgJlB5Q29tcGxleF9UeXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKG9wLCAmUHlDb21wbGV4X1R5cGUpOwogICAgIG9wLT5jdmFsID0gY3ZhbDsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9wOwogfQpAQCAtMjcxLDYgKzI3MSwxMiBAQAogICAgIGlmIChmKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGYsIE5VTEwpOwogICAgICAgICBQeV9ERUNSRUYoZik7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCAmJiAhUHlDb21wbGV4X0NoZWNrKHJlcykpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgIl9fY29tcGxleF9fIHNob3VsZCByZXR1cm4gYSBjb21wbGV4IG9iamVjdCIpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKQEAgLTI5NiwxMiArMzAyLDYgQEAKICAgICBuZXdvcCA9IHRyeV9jb21wbGV4X3NwZWNpYWxfbWV0aG9kKG9wKTsKIAogICAgIGlmIChuZXdvcCkgewotICAgICAgICBpZiAoIVB5Q29tcGxleF9DaGVjayhuZXdvcCkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIl9fY29tcGxleF9fIHNob3VsZCByZXR1cm4gYSBjb21wbGV4IG9iamVjdCIpOwotICAgICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKLSAgICAgICAgICAgIHJldHVybiBjdjsKLSAgICAgICAgfQogICAgICAgICBjdiA9ICgoUHlDb21wbGV4T2JqZWN0ICopbmV3b3ApLT5jdmFsOwogICAgICAgICBQeV9ERUNSRUYobmV3b3ApOwogICAgICAgICByZXR1cm4gY3Y7CkBAIC03MDUsNyArNzA1LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlDb21wbGV4X0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtNzczLDggKzc3Myw5IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodiwgJnMsICZsZW4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJjb21wbGV4KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTk1Myw4ICs5NTQsOSBAQAogICAgICAgICBuYmkgPSBpLT5vYl90eXBlLT50cF9hc19udW1iZXI7CiAgICAgaWYgKG5iciA9PSBOVUxMIHx8IG5ici0+bmJfZmxvYXQgPT0gTlVMTCB8fAogICAgICAgICAoKGkgIT0gTlVMTCkgJiYgKG5iaSA9PSBOVUxMIHx8IG5iaS0+bmJfZmxvYXQgPT0gTlVMTCkpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICBQeV9UWVBFKHIpLT50cF9uYW1lKTsKICAgICAgICAgaWYgKG93bl9yKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvZGVzY3JvYmplY3QuYyBiL09iamVjdHMvZGVzY3JvYmplY3QuYwppbmRleCBiYTk4YTMwLi4yZGY1YWM1IDEwMDY0NAotLS0gYS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICgoUHlUeXBlT2JqZWN0ICopdHlwZSktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIHR5cGUpOworICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIHR5cGUsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTI1LDcgKzEyNSw3IEBACiAKICAgICBpZiAoZGVzY3JfY2hlY2soKFB5RGVzY3JPYmplY3QgKilkZXNjciwgb2JqLCAmcmVzKSkKICAgICAgICAgcmV0dXJuIHJlczsKLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgb2JqKTsKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBvYmosIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCBzZWxmKTsKKyAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBzZWxmLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBhcmdjKTsKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgc2VsZik7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgc2VsZiwgTlVMTCk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CkBAIC0zNTMsMTEgKzM1MywxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ldGhvZF9nZXRfZG9jKFB5TWV0aG9kRGVzY3JPYmplY3QgKmRlc2NyLCB2b2lkICpjbG9zdXJlKQogewotICAgIGlmIChkZXNjci0+ZF9tZXRob2QtPm1sX2RvYyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgfQotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkZXNjci0+ZF9tZXRob2QtPm1sX2RvYyk7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX21ldGhvZC0+bWxfbmFtZSwgZGVzY3ItPmRfbWV0aG9kLT5tbF9kb2MpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWV0aG9kX2dldF90ZXh0X3NpZ25hdHVyZShQeU1ldGhvZERlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX21ldGhvZC0+bWxfbmFtZSwgZGVzY3ItPmRfbWV0aG9kLT5tbF9kb2MpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzk4LDYgKzQwMCwyNCBAQAogICAgIHJldHVybiBkZXNjci0+ZF9xdWFsbmFtZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2Rlc2NyX3JlZHVjZShQeURlc2NyT2JqZWN0ICpkZXNjcikKK3sKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT08pIiwgZ2V0YXR0ciwgUHlEZXNjcl9UWVBFKGRlc2NyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeURlc2NyX05BTUUoZGVzY3IpKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGRlc2NyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZGVzY3JfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBzdGF0aWMgUHlNZW1iZXJEZWYgZGVzY3JfbWVtYmVyc1tdID0gewogICAgIHsiX19vYmpjbGFzc19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfdHlwZSksIFJFQURPTkxZfSwKICAgICB7Il9fbmFtZV9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfbmFtZSksIFJFQURPTkxZfSwKQEAgLTQwNyw2ICs0MjcsNyBAQAogc3RhdGljIFB5R2V0U2V0RGVmIG1ldGhvZF9nZXRzZXRbXSA9IHsKICAgICB7Il9fZG9jX18iLCAoZ2V0dGVyKW1ldGhvZF9nZXRfZG9jfSwKICAgICB7Il9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpZGVzY3JfZ2V0X3F1YWxuYW1lfSwKKyAgICB7Il9fdGV4dF9zaWduYXR1cmVfXyIsIChnZXR0ZXIpbWV0aG9kX2dldF90ZXh0X3NpZ25hdHVyZX0sCiAgICAgezB9CiB9OwogCkBAIC00NDUsMTYgKzQ2NiwxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBwZXJkZXNjcl9nZXRfZG9jKFB5V3JhcHBlckRlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBpZiAoZGVzY3ItPmRfYmFzZS0+ZG9jID09IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGRlc2NyLT5kX2Jhc2UtPmRvYyk7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX2Jhc2UtPm5hbWUsIGRlc2NyLT5kX2Jhc2UtPmRvYyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3cmFwcGVyZGVzY3JfZ2V0X3RleHRfc2lnbmF0dXJlKFB5V3JhcHBlckRlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX2Jhc2UtPm5hbWUsIGRlc2NyLT5kX2Jhc2UtPmRvYyk7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiB3cmFwcGVyZGVzY3JfZ2V0c2V0W10gPSB7CiAgICAgeyJfX2RvY19fIiwgKGdldHRlcil3cmFwcGVyZGVzY3JfZ2V0X2RvY30sCiAgICAgeyJfX3F1YWxuYW1lX18iLCAoZ2V0dGVyKWRlc2NyX2dldF9xdWFsbmFtZX0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKXdyYXBwZXJkZXNjcl9nZXRfdGV4dF9zaWduYXR1cmV9LAogICAgIHswfQogfTsKIApAQCAtNDk0LDcgKzUxOCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTMyLDcgKzU1Niw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTY5LDcgKzU5Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZW1iZXJfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNjQzLDcgKzY2Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICB3cmFwcGVyZGVzY3JfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMTAwOSw3ICsxMDMzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB3cmFwcGVyX3JpY2hjb21wYXJlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG9wKQogewotICAgIGludCByZXN1bHQ7CisgICAgUHlfaW50cHRyX3QgcmVzdWx0OwogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5V3JhcHBlckRlc2NyT2JqZWN0ICphX2Rlc2NyLCAqYl9kZXNjcjsKIApAQCAtMTA4NSw2ICsxMTA5LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3AtPnNlbGYpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgord3JhcHBlcl9yZWR1Y2Uod3JhcHBlcm9iamVjdCAqd3ApCit7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICpnZXRhdHRyOworICAgIF9QeV9JREVOVElGSUVSKGdldGF0dHIpOworCisgICAgYnVpbHRpbnMgPSBQeUV2YWxfR2V0QnVpbHRpbnMoKTsKKyAgICBnZXRhdHRyID0gX1B5RGljdF9HZXRJdGVtSWQoYnVpbHRpbnMsICZQeUlkX2dldGF0dHIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9PKSIsIGdldGF0dHIsIHdwLT5zZWxmLCBQeURlc2NyX05BTUUod3AtPmRlc2NyKSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiB3cmFwcGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pd3JhcHBlcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIHN0YXRpYyBQeU1lbWJlckRlZiB3cmFwcGVyX21lbWJlcnNbXSA9IHsKICAgICB7Il9fc2VsZl9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHdyYXBwZXJvYmplY3QsIHNlbGYpLCBSRUFET05MWX0sCiAgICAgezB9CkBAIC0xMTA4LDE3ICsxMTQ5LDE1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13cmFwcGVyX2RvYyh3cmFwcGVyb2JqZWN0ICp3cCkKK3dyYXBwZXJfZG9jKHdyYXBwZXJvYmplY3QgKndwLCB2b2lkICpjbG9zdXJlKQogewotICAgIGNvbnN0IGNoYXIgKnMgPSB3cC0+ZGVzY3ItPmRfYmFzZS0+ZG9jOworICAgIHJldHVybiBfUHlUeXBlX0dldERvY0Zyb21JbnRlcm5hbERvYyh3cC0+ZGVzY3ItPmRfYmFzZS0+bmFtZSwgd3AtPmRlc2NyLT5kX2Jhc2UtPmRvYyk7Cit9CiAKLSAgICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcocyk7Ci0gICAgfQorc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBwZXJfdGV4dF9zaWduYXR1cmUod3JhcHBlcm9iamVjdCAqd3AsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0VGV4dFNpZ25hdHVyZUZyb21JbnRlcm5hbERvYyh3cC0+ZGVzY3ItPmRfYmFzZS0+bmFtZSwgd3AtPmRlc2NyLT5kX2Jhc2UtPmRvYyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMTMyLDYgKzExNzEsNyBAQAogICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKXdyYXBwZXJfbmFtZX0sCiAgICAgeyJfX3F1YWxuYW1lX18iLCAoZ2V0dGVyKXdyYXBwZXJfcXVhbG5hbWV9LAogICAgIHsiX19kb2NfXyIsIChnZXR0ZXIpd3JhcHBlcl9kb2N9LAorICAgIHsiX190ZXh0X3NpZ25hdHVyZV9fIiwgKGdldHRlcil3cmFwcGVyX3RleHRfc2lnbmF0dXJlfSwKICAgICB7MH0KIH07CiAKQEAgLTExOTMsNyArMTIzMyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICB3cmFwcGVyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICB3cmFwcGVyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICB3cmFwcGVyX2dldHNldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9kaWN0b2JqZWN0LmMgYi9PYmplY3RzL2RpY3RvYmplY3QuYwppbmRleCA3YWE1ZWE4Li4xY2NlYTZlIDEwMDY0NAotLS0gYS9PYmplY3RzL2RpY3RvYmplY3QuYworKysgYi9PYmplY3RzL2RpY3RvYmplY3QuYwpAQCAtNjksNiArNjksMTEgQEAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZXEuaCIKIAorLypbY2xpbmljIGlucHV0XQorY2xhc3MgZGljdCAiUHlEaWN0T2JqZWN0ICoiICImUHlEaWN0X1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1mMTU3YTVhMGNlOTU4OWQ2XSovCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICAvKiBDYWNoZWQgaGFzaCBjb2RlIG9mIG1lX2tleS4gKi8KICAgICBQeV9oYXNoX3QgbWVfaGFzaDsKQEAgLTk1LDIwICsxMDAsNiBAQAogaXQncyBVU0FCTEVfRlJBQ1RJT04gKGN1cnJlbnRseSB0d28tdGhpcmRzKSBmdWxsLgogKi8KIAotLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQotICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKLSAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCi1zdGF0aWMgdm9pZAotc2V0X2tleV9lcnJvcihQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICp0dXA7Ci0gICAgdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7Ci0gICAgaWYgKCF0dXApCi0gICAgICAgIHJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KLSAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7Ci0gICAgUHlfREVDUkVGKHR1cCk7Ci19Ci0KICNkZWZpbmUgUEVSVFVSQl9TSElGVCA1CiAKIC8qCkBAIC0zMDUsOSArMjk2LDkgQEAKICAqICNkZWZpbmUgVVNBQkxFX0ZSQUNUSU9OKG4pICgoKG4pID4+IDEpICsgKChuKSA+PiAyKSAtICgobikgPj4gMykpCiAqLwogCi0vKiBHUk9XVEhfUkFURS4gR3Jvd3RoIHJhdGUgdXBvbiBoaXR0aW5nIG1heGltdW0gbG9hZC4gCi0gKiBDdXJyZW50bHkgc2V0IHRvIHVzZWQqMiArIGNhcGFjaXR5LzIuIAotICogVGhpcyBtZWFucyB0aGF0IGRpY3RzIGRvdWJsZSBpbiBzaXplIHdoZW4gZ3Jvd2luZyB3aXRob3V0IGRlbGV0aW9ucywgCisvKiBHUk9XVEhfUkFURS4gR3Jvd3RoIHJhdGUgdXBvbiBoaXR0aW5nIG1heGltdW0gbG9hZC4KKyAqIEN1cnJlbnRseSBzZXQgdG8gdXNlZCoyICsgY2FwYWNpdHkvMi4KKyAqIFRoaXMgbWVhbnMgdGhhdCBkaWN0cyBkb3VibGUgaW4gc2l6ZSB3aGVuIGdyb3dpbmcgd2l0aG91dCBkZWxldGlvbnMsCiAgKiBidXQgaGF2ZSBtb3JlIGhlYWQgcm9vbSB3aGVuIHRoZSBudW1iZXIgb2YgZGVsZXRpb25zIGlzIG9uIGEgcGFyIHdpdGggdGhlCiAgKiBudW1iZXIgb2YgaW5zZXJ0aW9ucy4KICAqIFJhaXNpbmcgdGhpcyB0byB1c2VkKjQgZG91YmxlcyBtZW1vcnkgY29uc3VtcHRpb24gZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mCkBAIC0zODksNiArMzgwLDcgQEAKIG5ld19kaWN0KFB5RGljdEtleXNPYmplY3QgKmtleXMsIFB5T2JqZWN0ICoqdmFsdWVzKQogewogICAgIFB5RGljdE9iamVjdCAqbXA7CisgICAgYXNzZXJ0KGtleXMgIT0gTlVMTCk7CiAgICAgaWYgKG51bWZyZWUpIHsKICAgICAgICAgbXAgPSBmcmVlX2xpc3RbLS1udW1mcmVlXTsKICAgICAgICAgYXNzZXJ0IChtcCAhPSBOVUxMKTsKQEAgLTQzMSw3ICs0MjMsMTAgQEAKIFB5T2JqZWN0ICoKIFB5RGljdF9OZXcodm9pZCkKIHsKLSAgICByZXR1cm4gbmV3X2RpY3QobmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKSwgTlVMTCk7CisgICAgUHlEaWN0S2V5c09iamVjdCAqa2V5cyA9IG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCk7CisgICAgaWYgKGtleXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG5ld19kaWN0KGtleXMsIE5VTEwpOwogfQogCiAvKgpAQCAtNDYzLDEzICs0NTgsMTMgQEAKIGxvb2tkaWN0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2s7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OworICAgIHNpemVfdCBtYXNrOwogICAgIFB5RGljdEtleUVudHJ5ICplcDA7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOwotICAgIHJlZ2lzdGVyIGludCBjbXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIGludCBjbXA7CiAgICAgUHlPYmplY3QgKnN0YXJ0a2V5OwogCiB0b3A6CkBAIC01NTUsMTIgKzU1MCwxMiBAQAogbG9va2RpY3RfdW5pY29kZShQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7CisgICAgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwID0gJm1wLT5tYV9rZXlzLT5ka19lbnRyaWVzWzBdOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gaGFuZGxlIG5vbi11bmljb2RlIGtleXMsCiAgICAgICAgaW5jbHVkaW5nIHN1YmNsYXNzZXMgb2Ygc3RyOyBlLmcuLCBvbmUgcmVhc29uIHRvIHN1YmNsYXNzCkBAIC02MjAsMTEgKzYxNSwxMSBAQAogbG9va2RpY3RfdW5pY29kZV9ub2R1bW15KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTY2NSwxMSArNjYwLDExIEBACiBsb29rZGljdF9zcGxpdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSkgewogICAgICAgICBlcCA9IGxvb2tkaWN0KG1wLCBrZXksIGhhc2gsIHZhbHVlX2FkZHIpOwpAQCAtMTIzNyw3ICsxMjMyLDcgQEAKICAgICBpZiAoZXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICgqdmFsdWVfYWRkciA9PSBOVUxMKSB7Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgb2xkX3ZhbHVlID0gKnZhbHVlX2FkZHI7CkBAIC0xMzkxLDcgKzEzODYsNyBAQAogICAgICAgICB9CiAgICAgICAgIERLX0RFQ1JFRihrZXlzKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZSBpZiAoa2V5cyAhPSBOVUxMKSB7CiAgICAgICAgIGFzc2VydChrZXlzLT5ka19yZWZjbnQgPT0gMSk7CiAgICAgICAgIERLX0RFQ1JFRihrZXlzKTsKICAgICB9CkBAIC0xNDA3LDkgKzE0MDIsOSBAQAogZGljdF9yZXByKFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpzLCAqdGVtcCwgKmNvbG9uID0gTlVMTDsKLSAgICBQeU9iamVjdCAqcGllY2VzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOworICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOworICAgIGludCBmaXJzdDsKIAogICAgIGkgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0ICopbXApOwogICAgIGlmIChpICE9IDApIHsKQEAgLTE0MTcsNzEgKzE0MTIsNzMgQEAKICAgICB9CiAKICAgICBpZiAobXAtPm1hX3VzZWQgPT0gMCkgewotICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygie30iKTsKLSAgICAgICAgZ290byBEb25lOworICAgICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbXApOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoInt9Iik7CiAgICAgfQogCi0gICAgcGllY2VzID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAocGllY2VzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgLyogInsiICsgIjE6IDIiICsgIiwgMzogNCIgKiAobGVuIC0gMSkgKyAifSIgKi8KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyA0ICsgKDIgKyA0KSAqIChtcC0+bWFfdXNlZCAtIDEpICsgMTsKIAotICAgIGNvbG9uID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjogIik7Ci0gICAgaWYgKGNvbG9uID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJ3snKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAvKiBEbyByZXByKCkgb24gZWFjaCBrZXkrdmFsdWUgcGFpciwgYW5kIGluc2VydCAiOiAiIGJldHdlZW4gdGhlbS4KICAgICAgICBOb3RlIHRoYXQgcmVwciBtYXkgbXV0YXRlIHRoZSBkaWN0LiAqLwogICAgIGkgPSAwOworICAgIGZpcnN0ID0gMTsKICAgICB3aGlsZSAoUHlEaWN0X05leHQoKFB5T2JqZWN0ICopbXAsICZpLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgIGludCBzdGF0dXM7CisgICAgICAgIFB5T2JqZWN0ICpzOworICAgICAgICBpbnQgcmVzOworCiAgICAgICAgIC8qIFByZXZlbnQgcmVwciBmcm9tIGRlbGV0aW5nIGtleSBvciB2YWx1ZSBkdXJpbmcga2V5IGZvcm1hdC4gKi8KICAgICAgICAgUHlfSU5DUkVGKGtleSk7CiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisKKyAgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCAiLCAyKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBmaXJzdCA9IDA7CisKICAgICAgICAgcyA9IFB5T2JqZWN0X1JlcHIoa2V5KTsKLSAgICAgICAgUHlVbmljb2RlX0FwcGVuZCgmcywgY29sb24pOwotICAgICAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZzLCBQeU9iamVjdF9SZXByKHZhbHVlKSk7Ci0gICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKHBpZWNlcywgcyk7Ci0gICAgICAgIFB5X0RFQ1JFRihzKTsgIC8qIGFwcGVuZCBjcmVhdGVkIGEgbmV3IHJlZiAqLwotICAgICAgICBpZiAoc3RhdHVzIDwgMCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcyk7CisgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIjogIiwgMikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBzID0gUHlPYmplY3RfUmVwcih2YWx1ZSk7CisgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHMpOworICAgICAgICBQeV9ERUNSRUYocyk7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBQeV9DTEVBUihrZXkpOworICAgICAgICBQeV9DTEVBUih2YWx1ZSk7CiAgICAgfQogCi0gICAgLyogQWRkICJ7fSIgZGVjb3JhdGlvbnMgdG8gdGhlIGZpcnN0IGFuZCBsYXN0IGl0ZW1zLiAqLwotICAgIGFzc2VydChQeUxpc3RfR0VUX1NJWkUocGllY2VzKSA+IDApOwotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygieyIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB0ZW1wID0gUHlMaXN0X0dFVF9JVEVNKHBpZWNlcywgMCk7Ci0gICAgUHlVbmljb2RlX0FwcGVuZEFuZERlbCgmcywgdGVtcCk7Ci0gICAgUHlMaXN0X1NFVF9JVEVNKHBpZWNlcywgMCwgcyk7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnfScpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygifSIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB0ZW1wID0gUHlMaXN0X0dFVF9JVEVNKHBpZWNlcywgUHlMaXN0X0dFVF9TSVpFKHBpZWNlcykgLSAxKTsKLSAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZ0ZW1wLCBzKTsKLSAgICBQeUxpc3RfU0VUX0lURU0ocGllY2VzLCBQeUxpc3RfR0VUX1NJWkUocGllY2VzKSAtIDEsIHRlbXApOwotICAgIGlmICh0ZW1wID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLQotICAgIC8qIFBhc3RlIHRoZW0gYWxsIHRvZ2V0aGVyIHdpdGggIiwgIiBiZXR3ZWVuLiAqLwotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLCAiKTsKLSAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgcmVzdWx0ID0gUHlVbmljb2RlX0pvaW4ocywgcGllY2VzKTsKLSAgICBQeV9ERUNSRUYocyk7Ci0KLURvbmU6Ci0gICAgUHlfWERFQ1JFRihwaWVjZXMpOwotICAgIFB5X1hERUNSRUYoY29sb24pOwogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltcCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKworZXJyb3I6CisgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1wKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CisgICAgUHlfWERFQ1JFRihrZXkpOworICAgIFB5X1hERUNSRUYodmFsdWUpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdApAQCAtMTQ5MSw3ICsxNDg4LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfc3Vic2NyaXB0KFB5RGljdE9iamVjdCAqbXAsIHJlZ2lzdGVyIFB5T2JqZWN0ICprZXkpCitkaWN0X3N1YnNjcmlwdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5X2hhc2hfdCBoYXNoOwpAQCAtMTUyMyw3ICsxNTIwLDcgQEAKICAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UKQEAgLTE1NDcsMTAgKzE1NDQsMTAgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2tleXMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3Rfa2V5cyhQeURpY3RPYmplY3QgKm1wKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgajsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeV9zc2l6ZV90IGksIGo7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbiwgb2Zmc2V0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwpAQCAtMTU5MSwxMCArMTU4OCwxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF92YWx1ZXMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfdmFsdWVzKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgajsKICAgICBQeV9zc2l6ZV90IHNpemUsIG4sIG9mZnNldDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMTYzMywxMCArMTYzMCwxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9pdGVtcyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9pdGVtcyhQeURpY3RPYmplY3QgKm1wKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgbjsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeV9zc2l6ZV90IGksIGosIG47CiAgICAgUHlfc3NpemVfdCBzaXplLCBvZmZzZXQ7CiAgICAgUHlPYmplY3QgKml0ZW0sICprZXk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwpAQCAtMTY5NCwzNyArMTY5MSw3MiBAQAogICAgIHJldHVybiB2OwogfQogCisvKltjbGluaWMgaW5wdXRdCitAY2xhc3NtZXRob2QKK2RpY3QuZnJvbWtleXMKKyAgICBpdGVyYWJsZTogb2JqZWN0CisgICAgdmFsdWU6IG9iamVjdD1Ob25lCisgICAgLworCitSZXR1cm5zIGEgbmV3IGRpY3Qgd2l0aCBrZXlzIGZyb20gaXRlcmFibGUgYW5kIHZhbHVlcyBlcXVhbCB0byB2YWx1ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRpY3RfZnJvbWtleXNfX2RvY19fLAorImZyb21rZXlzKCR0eXBlLCBpdGVyYWJsZSwgdmFsdWU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBuZXcgZGljdCB3aXRoIGtleXMgZnJvbSBpdGVyYWJsZSBhbmQgdmFsdWVzIGVxdWFsIHRvIHZhbHVlLiIpOworCisjZGVmaW5lIERJQ1RfRlJPTUtFWVNfTUVUSE9EREVGICAgIFwKKyAgICB7ImZyb21rZXlzIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfZnJvbWtleXMsIE1FVEhfVkFSQVJHU3xNRVRIX0NMQVNTLCBkaWN0X2Zyb21rZXlzX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2Zyb21rZXlzKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQorZGljdF9mcm9ta2V5c19pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKml0ZXJhYmxlLCBQeU9iamVjdCAqdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGljdF9mcm9ta2V5cyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpzZXE7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKml0ZXJhYmxlOwogICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJmcm9ta2V5cyIsCisgICAgICAgIDEsIDIsCisgICAgICAgICZpdGVyYWJsZSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRpY3RfZnJvbWtleXNfaW1wbCh0eXBlLCBpdGVyYWJsZSwgdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0X2Zyb21rZXlzX2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUsIFB5T2JqZWN0ICp2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NWY4ZGMwZmZhODc0MDZmIGlucHV0PWI4NWE2NjdmOWJmNDY2OWRdKi8KK3sKICAgICBQeU9iamVjdCAqaXQ7ICAgICAgIC8qIGl0ZXIoc2VxKSAqLwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmQ7CiAgICAgaW50IHN0YXR1czsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZyb21rZXlzIiwgMSwgMiwgJnNlcSwgJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBkID0gUHlPYmplY3RfQ2FsbE9iamVjdChjbHMsIE5VTEwpOworICAgIGQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwogICAgIGlmIChkID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGQpICYmICgoUHlEaWN0T2JqZWN0ICopZCktPm1hX3VzZWQgPT0gMCkgewotICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3Qoc2VxKSkgeworICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoaXRlcmFibGUpKSB7CiAgICAgICAgICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7CiAgICAgICAgICAgICBQeU9iamVjdCAqb2xkdmFsdWU7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAgICAgICAgICAgICBQeU9iamVjdCAqa2V5OwogICAgICAgICAgICAgUHlfaGFzaF90IGhhc2g7CiAKLSAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeV9TSVpFKHNlcSkpKSB7CisgICAgICAgICAgICBpZiAoZGljdHJlc2l6ZShtcCwgUHlfU0laRShpdGVyYWJsZSkpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAoX1B5RGljdF9OZXh0KHNlcSwgJnBvcywgJmtleSwgJm9sZHZhbHVlLCAmaGFzaCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChfUHlEaWN0X05leHQoaXRlcmFibGUsICZwb3MsICZrZXksICZvbGR2YWx1ZSwgJmhhc2gpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGluc2VydGRpY3QobXAsIGtleSwgaGFzaCwgdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzMyLDE4ICsxNzY0LDE4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICAgfQotICAgICAgICBpZiAoUHlBbnlTZXRfQ2hlY2tFeGFjdChzZXEpKSB7CisgICAgICAgIGlmIChQeUFueVNldF9DaGVja0V4YWN0KGl0ZXJhYmxlKSkgewogICAgICAgICAgICAgUHlEaWN0T2JqZWN0ICptcCA9IChQeURpY3RPYmplY3QgKilkOwogICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSAwOwogICAgICAgICAgICAgUHlPYmplY3QgKmtleTsKICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoOwogCi0gICAgICAgICAgICBpZiAoZGljdHJlc2l6ZShtcCwgUHlTZXRfR0VUX1NJWkUoc2VxKSkpIHsKKyAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeVNldF9HRVRfU0laRShpdGVyYWJsZSkpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAoX1B5U2V0X05leHRFbnRyeShzZXEsICZwb3MsICZrZXksICZoYXNoKSkgeworICAgICAgICAgICAgd2hpbGUgKF9QeVNldF9OZXh0RW50cnkoaXRlcmFibGUsICZwb3MsICZrZXksICZoYXNoKSkgewogICAgICAgICAgICAgICAgIGlmIChpbnNlcnRkaWN0KG1wLCBrZXksIGhhc2gsIHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTc1Myw3ICsxNzg1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihzZXEpOworICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpewogICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTkwOCw4ICsxOTQwLDggQEAKIGludAogUHlEaWN0X01lcmdlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG92ZXJyaWRlKQogewotICAgIHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsICpvdGhlcjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG47CisgICAgUHlEaWN0T2JqZWN0ICptcCwgKm90aGVyOworICAgIFB5X3NzaXplX3QgaSwgbjsKICAgICBQeURpY3RLZXlFbnRyeSAqZW50cnk7CiAKICAgICAvKiBXZSBhY2NlcHQgZm9yIHRoZSBhcmd1bWVudCBlaXRoZXIgYSBjb25jcmV0ZSBkaWN0aW9uYXJ5IG9iamVjdCwKQEAgLTIwMDYsNyArMjAzOCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NvcHkocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfY29weShQeURpY3RPYmplY3QgKm1wKQogewogICAgIHJldHVybiBQeURpY3RfQ29weSgoUHlPYmplY3QqKW1wKTsKIH0KQEAgLTIxMTgsMTMgKzIxNTAsMTggQEAKICAgICAgICAgaWYgKGF2YWwgIT0gTlVMTCkgewogICAgICAgICAgICAgaW50IGNtcDsKICAgICAgICAgICAgIFB5T2JqZWN0ICpidmFsOworICAgICAgICAgICAgUHlPYmplY3QgKip2YWRkcjsKICAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBlcC0+bWVfa2V5OwogICAgICAgICAgICAgLyogdGVtcG9yYXJpbHkgYnVtcCBhdmFsJ3MgcmVmY291bnQgdG8gZW5zdXJlIGl0IHN0YXlzCiAgICAgICAgICAgICAgICBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGggaXQgKi8KICAgICAgICAgICAgIFB5X0lOQ1JFRihhdmFsKTsKICAgICAgICAgICAgIC8qIGRpdHRvIGZvciBrZXkgKi8KICAgICAgICAgICAgIFB5X0lOQ1JFRihrZXkpOwotICAgICAgICAgICAgYnZhbCA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKChQeU9iamVjdCAqKWIsIGtleSk7CisgICAgICAgICAgICAvKiByZXVzZSB0aGUga25vd24gaGFzaCB2YWx1ZSAqLworICAgICAgICAgICAgaWYgKChiLT5tYV9rZXlzLT5ka19sb29rdXApKGIsIGtleSwgZXAtPm1lX2hhc2gsICZ2YWRkcikgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBidmFsID0gTlVMTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBidmFsID0gKnZhZGRyOwogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBpZiAoYnZhbCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGF2YWwpOwpAQCAtMjE2Miw5ICsyMTk5LDMxIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorLypbY2xpbmljIGlucHV0XQorCitAY29leGlzdAorZGljdC5fX2NvbnRhaW5zX18KKworICBrZXk6IG9iamVjdAorICAvCisKK1RydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRpY3RfX19jb250YWluc19fX19kb2NfXywKKyJfX2NvbnRhaW5zX18oJHNlbGYsIGtleSwgLylcbiIKKyItLVxuIgorIlxuIgorIlRydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZS4iKTsKKworI2RlZmluZSBESUNUX19fQ09OVEFJTlNfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19jb250YWluc19fIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfX19jb250YWluc19fLCBNRVRIX098TUVUSF9DT0VYSVNULCBkaWN0X19fY29udGFpbnNfX19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jb250YWlucyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KQorZGljdF9fX2NvbnRhaW5zX18oUHlEaWN0T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNjZjNmOGFhZjJjYzVjYzMgaW5wdXQ9Yjg1MmIyYTE5YjUxYWIyNF0qLwogeworICAgIHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAgPSBzZWxmOwogICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKICAgICBQeU9iamVjdCAqKnZhbHVlX2FkZHI7CkBAIC0yMTgyLDcgKzIyNDEsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9nZXQocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCitkaWN0X2dldChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqa2V5OwogICAgIFB5T2JqZWN0ICpmYWlsb2JqID0gUHlfTm9uZTsKQEAgLTIyMTAsMTkgKzIyNjksMTkgQEAKICAgICByZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotZGljdF9zZXRkZWZhdWx0KHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQorUHlPYmplY3QgKgorUHlEaWN0X1NldERlZmF1bHQoUHlPYmplY3QgKmQsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0b2JqKQogewotICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgUHlPYmplY3QgKmZhaWxvYmogPSBQeV9Ob25lOworICAgIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopZDsKICAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9hZGRyOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2V0ZGVmYXVsdCIsIDEsIDIsICZrZXksICZmYWlsb2JqKSkKKyAgICBpZiAoIVB5RGljdF9DaGVjayhkKSkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KKyAgICB9CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CiAgICAgICAgIChoYXNoID0gKChQeUFTQ0lJT2JqZWN0ICopIGtleSktPmhhc2gpID09IC0xKSB7CiAgICAgICAgIGhhc2ggPSBQeU9iamVjdF9IYXNoKGtleSk7CkBAIC0yMjQwLDIzICsyMjk5LDM1IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBlcCA9IGZpbmRfZW1wdHlfc2xvdChtcCwga2V5LCBoYXNoLCAmdmFsdWVfYWRkcik7CiAgICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKGZhaWxvYmopOworICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdG9iaik7CiAgICAgICAgIFB5X0lOQ1JFRihrZXkpOwotICAgICAgICBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCBmYWlsb2JqKTsKKyAgICAgICAgTUFJTlRBSU5fVFJBQ0tJTkcobXAsIGtleSwgZGVmYXVsdG9iaik7CiAgICAgICAgIGVwLT5tZV9rZXkgPSBrZXk7CiAgICAgICAgIGVwLT5tZV9oYXNoID0gaGFzaDsKLSAgICAgICAgKnZhbHVlX2FkZHIgPSBmYWlsb2JqOwotICAgICAgICB2YWwgPSBmYWlsb2JqOworICAgICAgICAqdmFsdWVfYWRkciA9IGRlZmF1bHRvYmo7CisgICAgICAgIHZhbCA9IGRlZmF1bHRvYmo7CiAgICAgICAgIG1wLT5tYV9rZXlzLT5ka191c2FibGUtLTsKICAgICAgICAgbXAtPm1hX3VzZWQrKzsKICAgICB9Ci0gICAgUHlfSU5DUkVGKHZhbCk7CiAgICAgcmV0dXJuIHZhbDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RpY3Rfc2V0ZGVmYXVsdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqa2V5LCAqdmFsOworICAgIFB5T2JqZWN0ICpkZWZhdWx0b2JqID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNldGRlZmF1bHQiLCAxLCAyLCAma2V5LCAmZGVmYXVsdG9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdmFsID0gUHlEaWN0X1NldERlZmF1bHQoKFB5T2JqZWN0ICopbXAsIGtleSwgZGVmYXVsdG9iaik7CisgICAgUHlfWElOQ1JFRih2YWwpOworICAgIHJldHVybiB2YWw7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NsZWFyKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2NsZWFyKFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgUHlEaWN0X0NsZWFyKChQeU9iamVjdCAqKW1wKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTIyNzgsNyArMjM0OSw3IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmx0OwogICAgICAgICB9Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKQEAgLTIyOTYsNyArMjM2Nyw3IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmx0OwogICAgICAgICB9Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAqdmFsdWVfYWRkciA9IE5VTEw7CkBAIC0yNDM3LDkgKzI1MDgsNiBAQAogICAgIHJldHVybiBzaXplb2YoUHlEaWN0S2V5c09iamVjdCkgKyAoREtfU0laRShrZXlzKS0xKSAqIHNpemVvZihQeURpY3RLZXlFbnRyeSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjb250YWluc19fZG9jX18sCi0iRC5fX2NvbnRhaW5zX18oaykgLT4gVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlIik7Ci0KIFB5RG9jX1NUUlZBUihnZXRpdGVtX19kb2NfXywgInguX19nZXRpdGVtX18oeSkgPD09PiB4W3ldIik7CiAKIFB5RG9jX1NUUlZBUihzaXplb2ZfX2RvY19fLApAQCAtMjQ2MCwxNCArMjUyOCwxMCBAQAogMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuIik7CiAKIFB5RG9jX1NUUlZBUih1cGRhdGVfX2RvY19fLAotIkQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBkaWN0L2l0ZXJhYmxlIEUgYW5kIEYuXG4iCi0iSWYgRSBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciBrIGluIEU6IERba10gPSBFW2tdXG5cCi1JZiBFIHByZXNlbnQgYW5kIGxhY2tzIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIChrLCB2KSBpbiBFOiBEW2tdID0gdlxuXAotSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMgZm9sbG93ZWQgYnk6IGZvciBrIGluIEY6IERba10gPSBGW2tdIik7Ci0KLVB5RG9jX1NUUlZBUihmcm9ta2V5c19fZG9jX18sCi0iZGljdC5mcm9ta2V5cyhTWyx2XSkgLT4gTmV3IGRpY3Qgd2l0aCBrZXlzIGZyb20gUyBhbmQgdmFsdWVzIGVxdWFsIHRvIHYuXG5cCi12IGRlZmF1bHRzIHRvIE5vbmUuIik7CisiRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIGRpY3QvaXRlcmFibGUgRSBhbmQgRi5cblwKK0lmIEUgaXMgcHJlc2VudCBhbmQgaGFzIGEgLmtleXMoKSBtZXRob2QsIHRoZW4gZG9lczogIGZvciBrIGluIEU6IERba10gPSBFW2tdXG5cCitJZiBFIGlzIHByZXNlbnQgYW5kIGxhY2tzIGEgLmtleXMoKSBtZXRob2QsIHRoZW4gZG9lczogIGZvciBrLCB2IGluIEU6IERba10gPSB2XG5cCitJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGsgaW4gRjogIERba10gPSBGW2tdIik7CiAKIFB5RG9jX1NUUlZBUihjbGVhcl9fZG9jX18sCiAiRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4iKTsKQEAgLTI0ODgsOCArMjU1Miw3IEBACiAgICAgICAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgbWFwcF9tZXRob2RzW10gPSB7Ci0gICAgeyJfX2NvbnRhaW5zX18iLChQeUNGdW5jdGlvbilkaWN0X2NvbnRhaW5zLCAgICAgTUVUSF9PIHwgTUVUSF9DT0VYSVNULAotICAgICBjb250YWluc19fZG9jX199LAorICAgIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRgogICAgIHsiX19nZXRpdGVtX18iLCAoUHlDRnVuY3Rpb24pZGljdF9zdWJzY3JpcHQsICAgICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCiAgICAgIGdldGl0ZW1fX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilkaWN0X3NpemVvZiwgICAgICAgTUVUSF9OT0FSR1MsCkBAIC0yNTEwLDggKzI1NzMsNyBAQAogICAgIHZhbHVlc19fZG9jX199LAogICAgIHsidXBkYXRlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfdXBkYXRlLCAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICB1cGRhdGVfX2RvY19ffSwKLSAgICB7ImZyb21rZXlzIiwgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X2Zyb21rZXlzLCAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9DTEFTUywKLSAgICAgZnJvbWtleXNfX2RvY19ffSwKKyAgICBESUNUX0ZST01LRVlTX01FVEhPRERFRgogICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfY2xlYXIsICAgICAgICBNRVRIX05PQVJHUywKICAgICAgY2xlYXJfX2RvY19ffSwKICAgICB7ImNvcHkiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X2NvcHksICAgICAgICAgTUVUSF9OT0FSR1MsCkBAIC0yNTY4LDIyICsyNjMwLDIzIEBACiBkaWN0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqc2VsZjsKKyAgICBQeURpY3RPYmplY3QgKmQ7CiAKICAgICBhc3NlcnQodHlwZSAhPSBOVUxMICYmIHR5cGUtPnRwX2FsbG9jICE9IE5VTEwpOwogICAgIHNlbGYgPSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKLSAgICBpZiAoc2VsZiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdE9iamVjdCAqZCA9IChQeURpY3RPYmplY3QgKilzZWxmOwotICAgICAgICBkLT5tYV9rZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKLSAgICAgICAgLyogWFhYIC0gU2hvdWxkIHdlIHJhaXNlIGEgbm8tbWVtb3J5IGVycm9yPyAqLwotICAgICAgICBpZiAoZC0+bWFfa2V5cyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBES19JTkNSRUYoUHlfRU1QVFlfS0VZUyk7Ci0gICAgICAgICAgICBkLT5tYV9rZXlzID0gUHlfRU1QVFlfS0VZUzsKLSAgICAgICAgICAgIGQtPm1hX3ZhbHVlcyA9IGVtcHR5X3ZhbHVlczsKLSAgICAgICAgfQotICAgICAgICBkLT5tYV91c2VkID0gMDsKLSAgICAgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KLSAgICAgICAgaWYgKHR5cGUgPT0gJlB5RGljdF9UeXBlKQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soZCk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZCA9IChQeURpY3RPYmplY3QgKilzZWxmOworCisgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KKyAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCisgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGQpOworCisgICAgZC0+bWFfdXNlZCA9IDA7CisgICAgZC0+bWFfa2V5cyA9IG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCk7CisgICAgaWYgKGQtPm1hX2tleXMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTI2NTksOCArMjcyMiwxMCBAQAogewogICAgIFB5T2JqZWN0ICprdjsKICAgICBrdiA9IF9QeVVuaWNvZGVfRnJvbUlkKGtleSk7IC8qIGJvcnJvd2VkICovCi0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBQeURpY3RfR2V0SXRlbShkcCwga3YpOwogfQogCkBAIC0yNjcxLDggKzI3MzYsMTAgQEAKIHsKICAgICBQeU9iamVjdCAqa3YsICpydjsKICAgICBrdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGtleSk7Ci0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJ2ID0gUHlEaWN0X0dldEl0ZW0odiwga3YpOwogICAgIFB5X0RFQ1JFRihrdik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtMjcwMyw2ICsyNzcwLDE1IEBACiB9CiAKIGludAorX1B5RGljdF9EZWxJdGVtSWQoUHlPYmplY3QgKnYsIF9QeV9JZGVudGlmaWVyICprZXkpCit7CisgICAgUHlPYmplY3QgKmt2ID0gX1B5VW5pY29kZV9Gcm9tSWQoa2V5KTsgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeURpY3RfRGVsSXRlbSh2LCBrdik7Cit9CisKK2ludAogUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnYsIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqa3Y7CkBAIC0yNzk1LDggKzI4NzEsOCBAQAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9pdGVybmV4dGtleShkaWN0aXRlcm9iamVjdCAqZGkpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlzT2JqZWN0ICprOworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5RGljdEtleXNPYmplY3QgKms7CiAgICAgUHlEaWN0T2JqZWN0ICpkID0gZGktPmRpX2RpY3Q7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTI4NzgsNyArMjk1NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKmRpY3RpdGVyX2l0ZXJuZXh0dmFsdWUoZGljdGl0ZXJvYmplY3QgKmRpKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKICAgICBQeURpY3RPYmplY3QgKmQgPSBkaS0+ZGlfZGljdDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMjk1OSw3ICszMDM1LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqZGljdGl0ZXJfaXRlcm5leHRpdGVtKGRpY3RpdGVyb2JqZWN0ICpkaSkKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpyZXN1bHQgPSBkaS0+ZGlfcmVzdWx0OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwogICAgIFB5RGljdE9iamVjdCAqZCA9IGRpLT5kaV9kaWN0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IDZiMDQ3MDAuLjg3M2ZiYzYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC0xNiw5ICsxNiw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlPYmplY3QgKlB5RXhjX1dpbmRvd3NFcnJvciA9IE5VTEw7CiAjZW5kaWYKLSNpZmRlZiBfX1ZNUwotUHlPYmplY3QgKlB5RXhjX1ZNU0Vycm9yID0gTlVMTDsKLSNlbmRpZgogCiAvKiBUaGUgZGljdCBtYXAgZnJvbSBlcnJubyBjb2RlcyB0byBPU0Vycm9yIHN1YmNsYXNzZXMgKi8KIHN0YXRpYyBQeU9iamVjdCAqZXJybm9tYXAgPSBOVUxMOwpAQCAtMTIxLDExICsxMTgsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBCYXNlRXhjZXB0aW9uX3JlcHIoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICpzZWxmKQogewotICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqZG90OworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgY2hhciAqZG90OwogCi0gICAgbmFtZSA9IChjaGFyICopUHlfVFlQRShzZWxmKS0+dHBfbmFtZTsKLSAgICBkb3QgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisgICAgbmFtZSA9IFB5X1RZUEUoc2VsZiktPnRwX25hbWU7CisgICAgZG90ID0gKGNvbnN0IGNoYXIgKikgc3RycmNocihuYW1lLCAnLicpOwogICAgIGlmIChkb3QgIT0gTlVMTCkgbmFtZSA9IGRvdCsxOwogCiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyVSIiwgbmFtZSwgc2VsZi0+YXJncyk7CkBAIC03MjcsMTMgKzcyNCwxNyBAQAogICogd2UgaGFjayBhcmdzIHNvIHRoYXQgaXQgb25seSBjb250YWlucyB0d28gaXRlbXMuICBUaGlzIGFsc28KICAqIG1lYW5zIHdlIG5lZWQgb3VyIG93biBfX3N0cl9fKCkgd2hpY2ggcHJpbnRzIG91dCB0aGUgZmlsZW5hbWUKICAqIHdoZW4gaXQgd2FzIHN1cHBsaWVkLgorICoKKyAqIChJZiBhIGZ1bmN0aW9uIGhhcyB0d28gZmlsZW5hbWVzLCBzdWNoIGFzIHJlbmFtZSgpLCBzeW1saW5rKCksCisgKiBvciBjb3B5KCksIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoKSBpcyBjYWxsZWQsCisgKiB3aGljaCBhbGxvd3MgcGFzc2luZyBpbiBhIHNlY29uZCBmaWxlbmFtZS4pCiAgKi8KIAogLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFudXAgb24gZXJyb3IsIHRoZSBjYWxsZXIgc2hvdWxkICovCiBzdGF0aWMgaW50CiBvc2Vycm9yX3BhcnNlX2FyZ3MoUHlPYmplY3QgKipwX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipteWVycm5vLCBQeU9iamVjdCAqKnN0cmVycm9yLAotICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKmZpbGVuYW1lLCBQeU9iamVjdCAqKmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAsIFB5T2JqZWN0ICoqd2luZXJyb3IKICNlbmRpZgpAQCAtNzQxLDE0ICs3NDIsMjMgQEAKIHsKICAgICBQeV9zc2l6ZV90IG5hcmdzOwogICAgIFB5T2JqZWN0ICphcmdzID0gKnBfYXJnczsKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIC8qCisgICAgICogaWdub3JlZCBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMsCisgICAgICogYnV0IHBhcnNlZCBzbyBPU0Vycm9yIGhhcyBhIGNvbnNpc3RlbnQgc2lnbmF0dXJlCisgICAgICovCisgICAgUHlPYmplY3QgKl93aW5lcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKip3aW5lcnJvciA9ICZfd2luZXJyb3I7CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAgICAgbmFyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwogCi0jaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDQpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiT1NFcnJvciIsIDIsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lLCB3aW5lcnJvcikpCisgICAgaWYgKG5hcmdzID49IDIgJiYgbmFyZ3MgPD0gNSkgeworICAgICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJPU0Vycm9yIiwgMiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteWVycm5vLCBzdHJlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgd2luZXJyb3IsIGZpbGVuYW1lMikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAoKndpbmVycm9yICYmIFB5TG9uZ19DaGVjaygqd2luZXJyb3IpKSB7CiAgICAgICAgICAgICBsb25nIGVycmNvZGUsIHdpbmVycmNvZGU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3YXJnczsKQEAgLTc4MCwxNCArNzkwLDggQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICAgICAgICAgIGFyZ3MgPSAqcF9hcmdzID0gbmV3YXJnczsKICAgICAgICAgfQorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KICAgICB9Ci0jZWxzZQotICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDMpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiT1NFcnJvciIsIDIsIDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZW5kaWYKIAogICAgIHJldHVybiAwOwogfQpAQCAtNzk1LDcgKzc5OSw3IEBACiBzdGF0aWMgaW50CiBvc2Vycm9yX2luaXQoUHlPU0Vycm9yT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqKnBfYXJncywKICAgICAgICAgICAgICBQeU9iamVjdCAqbXllcnJubywgUHlPYmplY3QgKnN0cmVycm9yLAotICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZQorICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAsIFB5T2JqZWN0ICp3aW5lcnJvcgogI2VuZGlmCkBAIC04MTksOSArODIzLDE0IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOwogICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUgPSBmaWxlbmFtZTsKIAotICAgICAgICAgICAgaWYgKG5hcmdzID49IDIgJiYgbmFyZ3MgPD0gMykgewotICAgICAgICAgICAgICAgIC8qIGZpbGVuYW1lIGlzIHJlbW92ZWQgZnJvbSB0aGUgYXJncyB0dXBsZSAoZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgICAgICAgICBwdXJwb3Nlcywgc2VlIHRlc3RfZXhjZXB0aW9ucy5weSkgKi8KKyAgICAgICAgICAgIGlmIChmaWxlbmFtZTIgJiYgZmlsZW5hbWUyICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUyKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZTIgPSBmaWxlbmFtZTI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDUpIHsKKyAgICAgICAgICAgICAgICAvKiBmaWxlbmFtZSwgZmlsZW5hbWUyLCBhbmQgd2luZXJyb3IgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYXJncyB0dXBsZQorICAgICAgICAgICAgICAgICAgIChmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcywgc2VlIHRlc3RfZXhjZXB0aW9ucy5weSkgKi8KICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3Vic2xpY2UgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDAsIDIpOwogICAgICAgICAgICAgICAgIGlmICghc3Vic2xpY2UpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTg0NSw3ICs4NTQsNyBAQAogICAgIC8qIFN0ZWFscyB0aGUgcmVmZXJlbmNlIHRvIGFyZ3MgKi8KICAgICBQeV9DTEVBUihzZWxmLT5hcmdzKTsKICAgICBzZWxmLT5hcmdzID0gYXJnczsKLSAgICBhcmdzID0gTlVMTDsKKyAgICAqcF9hcmdzID0gYXJncyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTg4MCwxNyArODg5LDIwIEBACiBPU0Vycm9yX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9TRXJyb3JPYmplY3QgKnNlbGYgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpteWVycm5vID0gTlVMTCwgKnN0cmVycm9yID0gTlVMTCwgKmZpbGVuYW1lID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbXllcnJubyA9IE5VTEwsICpzdHJlcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTCwgKmZpbGVuYW1lMiA9IE5VTEw7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5T2JqZWN0ICp3aW5lcnJvciA9IE5VTEw7CiAjZW5kaWYKIAorICAgIFB5X0lOQ1JFRihhcmdzKTsKKwogICAgIGlmICghb3NlcnJvcl91c2VfaW5pdCh0eXBlKSkgewogICAgICAgICBpZiAoIV9QeUFyZ19Ob0tleXdvcmRzKHR5cGUtPnRwX25hbWUsIGt3ZHMpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgIFB5X0lOQ1JFRihhcmdzKTsKLSAgICAgICAgaWYgKG9zZXJyb3JfcGFyc2VfYXJncygmYXJncywgJm15ZXJybm8sICZzdHJlcnJvciwgJmZpbGVuYW1lCisgICAgICAgIGlmIChvc2Vycm9yX3BhcnNlX2FyZ3MoJmFyZ3MsICZteWVycm5vLCAmc3RyZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCAmZmlsZW5hbWUyCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJndpbmVycm9yCiAjZW5kaWYKQEAgLTkxOSw3ICs5MzEsNyBAQAogICAgIHNlbGYtPndyaXR0ZW4gPSAtMTsKIAogICAgIGlmICghb3NlcnJvcl91c2VfaW5pdCh0eXBlKSkgewotICAgICAgICBpZiAob3NlcnJvcl9pbml0KHNlbGYsICZhcmdzLCBteWVycm5vLCBzdHJlcnJvciwgZmlsZW5hbWUKKyAgICAgICAgaWYgKG9zZXJyb3JfaW5pdChzZWxmLCAmYXJncywgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lLCBmaWxlbmFtZTIKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgICAgICAgICAgICAgICAgICAgLCB3aW5lcnJvcgogI2VuZGlmCkBAIC05MzIsNiArOTQ0LDcgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisgICAgUHlfWERFQ1JFRihhcmdzKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7CiAKIGVycm9yOgpAQCAtOTQzLDcgKzk1Niw4IEBACiBzdGF0aWMgaW50CiBPU0Vycm9yX2luaXQoUHlPU0Vycm9yT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgUHlPYmplY3QgKm15ZXJybm8gPSBOVUxMLCAqc3RyZXJyb3IgPSBOVUxMLCAqZmlsZW5hbWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpteWVycm5vID0gTlVMTCwgKnN0cmVycm9yID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBOVUxMLCAqZmlsZW5hbWUyID0gTlVMTDsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlPYmplY3QgKndpbmVycm9yID0gTlVMTDsKICNlbmRpZgpAQCAtOTU2LDE0ICs5NzAsMTQgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgUHlfSU5DUkVGKGFyZ3MpOwotICAgIGlmIChvc2Vycm9yX3BhcnNlX2FyZ3MoJmFyZ3MsICZteWVycm5vLCAmc3RyZXJyb3IsICZmaWxlbmFtZQorICAgIGlmIChvc2Vycm9yX3BhcnNlX2FyZ3MoJmFyZ3MsICZteWVycm5vLCAmc3RyZXJyb3IsICZmaWxlbmFtZSwgJmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJndpbmVycm9yCiAjZW5kaWYKICAgICAgICAgKSkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGlmIChvc2Vycm9yX2luaXQoc2VsZiwgJmFyZ3MsIG15ZXJybm8sIHN0cmVycm9yLCBmaWxlbmFtZQorICAgIGlmIChvc2Vycm9yX2luaXQoc2VsZiwgJmFyZ3MsIG15ZXJybm8sIHN0cmVycm9yLCBmaWxlbmFtZSwgZmlsZW5hbWUyCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICAgICAgICAgICAgICAgLCB3aW5lcnJvcgogI2VuZGlmCkBAIC05ODMsNiArOTk3LDcgQEAKICAgICBQeV9DTEVBUihzZWxmLT5teWVycm5vKTsKICAgICBQeV9DTEVBUihzZWxmLT5zdHJlcnJvcik7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZmlsZW5hbWUpOworICAgIFB5X0NMRUFSKHNlbGYtPmZpbGVuYW1lMik7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0NMRUFSKHNlbGYtPndpbmVycm9yKTsKICNlbmRpZgpAQCAtMTAwNCw2ICsxMDE5LDcgQEAKICAgICBQeV9WSVNJVChzZWxmLT5teWVycm5vKTsKICAgICBQeV9WSVNJVChzZWxmLT5zdHJlcnJvcik7CiAgICAgUHlfVklTSVQoc2VsZi0+ZmlsZW5hbWUpOworICAgIFB5X1ZJU0lUKHNlbGYtPmZpbGVuYW1lMik7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X1ZJU0lUKHNlbGYtPndpbmVycm9yKTsKICNlbmRpZgpAQCAtMTAxMywyMyArMTAyOSw0MiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIE9TRXJyb3Jfc3RyKFB5T1NFcnJvck9iamVjdCAqc2VsZikKIHsKKyNkZWZpbmUgT1JfTk9ORSh4KSAoKHgpPyh4KTpQeV9Ob25lKQogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAvKiBJZiBhdmFpbGFibGUsIHdpbmVycm9yIGhhcyB0aGUgcHJpb3JpdHkgb3ZlciBteWVycm5vICovCi0gICAgaWYgKHNlbGYtPndpbmVycm9yICYmIHNlbGYtPmZpbGVuYW1lKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltXaW5FcnJvciAlU10gJVM6ICVSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPndpbmVycm9yID8gc2VsZi0+d2luZXJyb3I6IFB5X05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5zdHJlcnJvciA/IHNlbGYtPnN0cmVycm9yOiBQeV9Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUpOworICAgIGlmIChzZWxmLT53aW5lcnJvciAmJiBzZWxmLT5maWxlbmFtZSkgeworICAgICAgICBpZiAoc2VsZi0+ZmlsZW5hbWUyKSB7CisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltXaW5FcnJvciAlU10gJVM6ICVSIC0+ICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPndpbmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPnN0cmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbV2luRXJyb3IgJVNdICVTOiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT53aW5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5zdHJlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUpOworICAgICAgICB9CisgICAgfQogICAgIGlmIChzZWxmLT53aW5lcnJvciAmJiBzZWxmLT5zdHJlcnJvcikKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbV2luRXJyb3IgJVNdICVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPndpbmVycm9yID8gc2VsZi0+d2luZXJyb3I6IFB5X05vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5zdHJlcnJvciA/IHNlbGYtPnN0cmVycm9yOiBQeV9Ob25lKTsKICNlbmRpZgotICAgIGlmIChzZWxmLT5maWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbRXJybm8gJVNdICVTOiAlUiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5teWVycm5vID8gc2VsZi0+bXllcnJubzogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmVycm9yID8gc2VsZi0+c3RyZXJyb3I6IFB5X05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSk7CisgICAgaWYgKHNlbGYtPmZpbGVuYW1lKSB7CisgICAgICAgIGlmIChzZWxmLT5maWxlbmFtZTIpIHsKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW0Vycm5vICVTXSAlUzogJVIgLT4gJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX05PTkUoc2VsZi0+bXllcnJubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5zdHJlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW0Vycm5vICVTXSAlUzogJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX05PTkUoc2VsZi0+bXllcnJubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5zdHJlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUpOworICAgICAgICB9CisgICAgfQogICAgIGlmIChzZWxmLT5teWVycm5vICYmIHNlbGYtPnN0cmVycm9yKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltFcnJubyAlU10gJVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+bXllcnJubyA/IHNlbGYtPm15ZXJybm86IFB5X05vbmUsCkBAIC0xMDQ2LDcgKzEwODEsOCBAQAogICAgIC8qIHNlbGYtPmFyZ3MgaXMgb25seSB0aGUgZmlyc3QgdHdvIHJlYWwgYXJndW1lbnRzIGlmIHRoZXJlIHdhcyBhCiAgICAgICogZmlsZSBuYW1lIGdpdmVuIHRvIE9TRXJyb3IuICovCiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPT0gMiAmJiBzZWxmLT5maWxlbmFtZSkgewotICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMyk7CisgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IHNlbGYtPmZpbGVuYW1lMiA/IDUgOiAzOworICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoc2l6ZSk7CiAgICAgICAgIGlmICghYXJncykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMDYwLDYgKzEwOTYsMjAgQEAKIAogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+ZmlsZW5hbWUpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDIsIHNlbGYtPmZpbGVuYW1lKTsKKworICAgICAgICBpZiAoc2VsZi0+ZmlsZW5hbWUyKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhpcyB0dXBsZSBpcyBlc3NlbnRpYWxseSB1c2VkIGFzIE9TRXJyb3IoKmFyZ3MpLgorICAgICAgICAgICAgICogU28sIHRvIHJlY3JlYXRlIGZpbGVuYW1lMiwgd2UgbmVlZCB0byBwYXNzIGluCisgICAgICAgICAgICAgKiB3aW5lcnJvciBhcyB3ZWxsLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDMsIFB5X05vbmUpOworCisgICAgICAgICAgICAvKiBmaWxlbmFtZTIgKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5maWxlbmFtZTIpOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCA0LCBzZWxmLT5maWxlbmFtZTIpOworICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihhcmdzKTsKIApAQCAtMTA5OSw2ICsxMTQ5LDggQEAKICAgICAgICAgUHlEb2NfU1RSKCJleGNlcHRpb24gc3RyZXJyb3IiKX0sCiAgICAgeyJmaWxlbmFtZSIsIFRfT0JKRUNULCBvZmZzZXRvZihQeU9TRXJyb3JPYmplY3QsIGZpbGVuYW1lKSwgMCwKICAgICAgICAgUHlEb2NfU1RSKCJleGNlcHRpb24gZmlsZW5hbWUiKX0sCisgICAgeyJmaWxlbmFtZTIiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlPU0Vycm9yT2JqZWN0LCBmaWxlbmFtZTIpLCAwLAorICAgICAgICBQeURvY19TVFIoInNlY29uZCBleGNlcHRpb24gZmlsZW5hbWUiKX0sCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHsid2luZXJyb3IiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlPU0Vycm9yT2JqZWN0LCB3aW5lcnJvciksIDAsCiAgICAgICAgIFB5RG9jX1NUUigiV2luMzIgZXhjZXB0aW9uIGNvZGUiKX0sCkBAIC0xMjAyLDYgKzEyNTQsOSBAQAogICogICAgU3ludGF4RXJyb3IgZXh0ZW5kcyBFeGNlcHRpb24KICAqLwogCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3VzdG9taXNlIGVycm9yIG1lc3NhZ2UgZm9yIHNvbWUgc3ludGF4IGVycm9ycyAqLworc3RhdGljIGludCBfcmVwb3J0X21pc3NpbmdfcGFyZW50aGVzZXMoUHlTeW50YXhFcnJvck9iamVjdCAqc2VsZik7CisKIHN0YXRpYyBpbnQKIFN5bnRheEVycm9yX2luaXQoUHlTeW50YXhFcnJvck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewpAQCAtMTI0Niw2ICsxMzAxLDEzIEBACiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT50ZXh0KTsKIAogICAgICAgICBQeV9ERUNSRUYoaW5mbyk7CisKKyAgICAgICAgLyogSXNzdWUgIzIxNjY5OiBDdXN0b20gZXJyb3IgZm9yICdwcmludCcgJiAnZXhlYycgYXMgc3RhdGVtZW50cyAqLworICAgICAgICBpZiAoc2VsZi0+dGV4dCAmJiBQeVVuaWNvZGVfQ2hlY2soc2VsZi0+dGV4dCkpIHsKKyAgICAgICAgICAgIGlmIChfcmVwb3J0X21pc3NpbmdfcGFyZW50aGVzZXMoc2VsZikgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMTc4NSw2ICsxODQ3LDEwIEBACiAgICAgUHlPYmplY3QgKnJlYXNvbl9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICplbmNvZGluZ19zdHIgPSBOVUxMOwogCisgICAgaWYgKCF1c2VsZi0+b2JqZWN0KQorICAgICAgICAvKiBOb3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuICovCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7CisKICAgICAvKiBHZXQgcmVhc29uIGFuZCBlbmNvZGluZyBhcyBzdHJpbmdzLCB3aGljaCB0aGV5IG1pZ2h0IG5vdCBiZSBpZgogICAgICAgIHRoZXkndmUgYmVlbiBtb2RpZmllZCBhZnRlciB3ZSB3ZXJlIGNvbnRydWN0ZWQuICovCiAgICAgcmVhc29uX3N0ciA9IFB5T2JqZWN0X1N0cih1c2VsZi0+cmVhc29uKTsKQEAgLTE5MDMsNiArMTk2OSwxMCBAQAogICAgIFB5T2JqZWN0ICpyZWFzb25fc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZW5jb2Rpbmdfc3RyID0gTlVMTDsKIAorICAgIGlmICghdXNlbGYtPm9iamVjdCkKKyAgICAgICAgLyogTm90IHByb3Blcmx5IGluaXRpYWxpemVkLiAqLworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOworCiAgICAgLyogR2V0IHJlYXNvbiBhbmQgZW5jb2RpbmcgYXMgc3RyaW5ncywgd2hpY2ggdGhleSBtaWdodCBub3QgYmUgaWYKICAgICAgICB0aGV5J3ZlIGJlZW4gbW9kaWZpZWQgYWZ0ZXIgd2Ugd2VyZSBjb250cnVjdGVkLiAqLwogICAgIHJlYXNvbl9zdHIgPSBQeU9iamVjdF9TdHIodXNlbGYtPnJlYXNvbik7CkBAIC0xOTk3LDYgKzIwNjcsMTAgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVhc29uX3N0ciA9IE5VTEw7CiAKKyAgICBpZiAoIXVzZWxmLT5vYmplY3QpCisgICAgICAgIC8qIE5vdCBwcm9wZXJseSBpbml0aWFsaXplZC4gKi8KKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKwogICAgIC8qIEdldCByZWFzb24gYXMgYSBzdHJpbmcsIHdoaWNoIGl0IG1pZ2h0IG5vdCBiZSBpZiBpdCdzIGJlZW4KICAgICAgICBtb2RpZmllZCBhZnRlciB3ZSB3ZXJlIGNvbnRydWN0ZWQuICovCiAgICAgcmVhc29uX3N0ciA9IFB5T2JqZWN0X1N0cih1c2VsZi0+cmVhc29uKTsKQEAgLTIwNjAsNyArMjEzNCw3IEBACiAgICAgUHlPYmplY3QgKm9iamVjdCwKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgY29uc3QgY2hhciAqcmVhc29uKQogewotICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yLCAiT25zIiwKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciwgIk9ubnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LCBzdGFydCwgZW5kLCByZWFzb24pOwogfQogCkBAIC0yMzI3LDcgKzI0MDEsNyBAQAogICAgIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKLSNpbmNsdWRlIDxXaW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3ZXJlIGFkZGVkIHRvIGVycm5vLmggaW4gVlMyMDEwIGJ1dCBoYXZlCiAgICBwcmVmZXJyZWQgV1NBIGVxdWl2YWxlbnRzLiAqLwogI3VuZGVmIEVBRERSSU5VU0UKQEAgLTI0NzEsOSArMjU0NSw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogICAgIElOSVRfQUxJQVMoV2luZG93c0Vycm9yLCBPU0Vycm9yKQogI2VuZGlmCi0jaWZkZWYgX19WTVMKLSAgICBJTklUX0FMSUFTKFZNU0Vycm9yLCBPU0Vycm9yKQotI2VuZGlmCiAgICAgUE9TVF9JTklUKEVPRkVycm9yKQogICAgIFBPU1RfSU5JVChSdW50aW1lRXJyb3IpCiAgICAgUE9TVF9JTklUKE5vdEltcGxlbWVudGVkRXJyb3IpCkBAIC0yNTkxLDMgKzI2NjIsMjU5IEBACiAgICAgZnJlZV9wcmVhbGxvY2F0ZWRfbWVtZXJyb3JzKCk7CiAgICAgUHlfQ0xFQVIoZXJybm9tYXApOwogfQorCisvKiBIZWxwZXIgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgInJhaXNlIFggZnJvbSBZIiBpbiBDLCBidXQgYWx3YXlzIHVzaW5nCisgKiB0aGUgY3VycmVudCBleGNlcHRpb24gcmF0aGVyIHRoYW4gcGFzc2luZyBvbmUgaW4uCisgKgorICogV2UgY3VycmVudGx5IGxpbWl0IHRoaXMgdG8gKm9ubHkqIGV4Y2VwdGlvbnMgdGhhdCB1c2UgdGhlIEJhc2VFeGNlcHRpb24KKyAqIHRwX2luaXQgYW5kIHRwX25ldyBtZXRob2RzLCBzaW5jZSB3ZSBjYW4gYmUgcmVhc29uYWJseSBzdXJlIHdlIGNhbiB3cmFwCisgKiB0aG9zZSBjb3JyZWN0bHkgd2l0aG91dCBsb3NpbmcgZGF0YSBhbmQgd2l0aG91dCBsb3NpbmcgYmFja3dhcmRzCisgKiBjb21wYXRpYmlsaXR5LgorICoKKyAqIFdlIGFsc28gYWltIHRvIHJ1bGUgb3V0ICphbGwqIGV4Y2VwdGlvbnMgdGhhdCBtaWdodCBiZSBzdG9yaW5nIGFkZGl0aW9uYWwKKyAqIHN0YXRlLCB3aGV0aGVyIGJ5IGhhdmluZyBhIHNpemUgZGlmZmVyZW5jZSByZWxhdGl2ZSB0byBCYXNlRXhjZXB0aW9uLAorICogYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIGluIGR1cmluZyBjb25zdHJ1Y3Rpb24gb3IgYnkgaGF2aW5nIGEKKyAqIG5vbi1lbXB0eSBpbnN0YW5jZSBkaWN0LgorICoKKyAqIFdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHdpdGggd2hhdCB3ZSB3cmFwLCBzaW5jZSBjaGFuZ2luZyB0eXBlcyB0bworICogYSBicm9hZGVyIGV4Y2VwdGlvbiB0eXBlIHdvdWxkIGJlIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgZm9yCisgKiBleGlzdGluZyBjb2RlY3MsIGFuZCB3aXRoIGRpZmZlcmVudCBpbml0IG9yIG5ldyBtZXRob2QgaW1wbGVtZW50YXRpb25zCisgKiBtYXkgZWl0aGVyIG5vdCBzdXBwb3J0IGluc3RhbnRpYXRpb24gd2l0aCBQeUVycl9Gb3JtYXQgb3IgbG9zZQorICogaW5mb3JtYXRpb24gd2hlbiBpbnN0YW50aWF0ZWQgdGhhdCB3YXkuCisgKgorICogWFhYIChuY29naGxhbik6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXByZWhlbnNpdmUgYnkgZXhwbG9pdGluZyB0aGUKKyAqIGZhY3QgdGhhdCBleGNlcHRpb25zIGFyZSBleHBlY3RlZCB0byBzdXBwb3J0IHBpY2tsaW5nLiBJZiBtb3JlIGJ1aWx0aW4KKyAqIGV4Y2VwdGlvbnMgKGUuZy4gQXR0cmlidXRlRXJyb3IpIHN0YXJ0IHRvIGJlIGNvbnZlcnRlZCB0byByaWNoCisgKiBleGNlcHRpb25zIHdpdGggYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCB0aGF0J3MgcHJvYmFibHkgYSBiZXR0ZXIgYXBwcm9hY2gKKyAqIHRvIHB1cnN1ZSBvdmVyIGFkZGluZyBzcGVjaWFsIGNhc2VzIGZvciBwYXJ0aWN1bGFyIHN0YXRlZnVsIHN1YmNsYXNzZXMuCisgKgorICogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGV4Y2VwdGlvbiAoaWYgYW55KSwgTlVMTCBpZiB0aGUKKyAqIGV4aXN0aW5nIGV4Y2VwdGlvbiB3YXMgbGVmdCBpbiBwbGFjZS4KKyAqLworUHlPYmplY3QgKgorX1B5RXJyX1RyeVNldEZyb21DYXVzZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBQeU9iamVjdCogbXNnX3ByZWZpeDsKKyAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CisgICAgUHlUeXBlT2JqZWN0ICpjYXVnaHRfdHlwZTsKKyAgICBQeU9iamVjdCAqKmRpY3RwdHI7CisgICAgUHlPYmplY3QgKmluc3RhbmNlX2FyZ3M7CisgICAgUHlfc3NpemVfdCBudW1fYXJncywgY2F1Z2h0X3R5cGVfc2l6ZSwgYmFzZV9leGNfc2l6ZTsKKyAgICBQeU9iamVjdCAqbmV3X2V4YywgKm5ld192YWwsICpuZXdfdGI7CisgICAgdmFfbGlzdCB2YXJnczsKKyAgICBpbnQgc2FtZV9iYXNpY19zaXplOworCisgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKKyAgICBjYXVnaHRfdHlwZSA9IChQeVR5cGVPYmplY3QgKilleGM7CisgICAgLyogRW5zdXJlIHR5cGUgaW5mbyBpbmRpY2F0ZXMgbm8gZXh0cmEgc3RhdGUgaXMgc3RvcmVkIGF0IHRoZSBDIGxldmVsCisgICAgICogYW5kIHRoYXQgdGhlIHR5cGUgY2FuIGJlIHJlaW5zdGFudGlhdGVkIHVzaW5nIFB5RXJyX0Zvcm1hdAorICAgICAqLworICAgIGNhdWdodF90eXBlX3NpemUgPSBjYXVnaHRfdHlwZS0+dHBfYmFzaWNzaXplOworICAgIGJhc2VfZXhjX3NpemUgPSBfUHlFeGNfQmFzZUV4Y2VwdGlvbi50cF9iYXNpY3NpemU7CisgICAgc2FtZV9iYXNpY19zaXplID0gKAorICAgICAgICBjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgfHwKKyAgICAgICAgKFB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhjYXVnaHRfdHlwZSkgJiYKKyAgICAgICAgICAgIChjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgKyBzaXplb2YoUHlPYmplY3QgKikpCisgICAgICAgICkKKyAgICApOworICAgIGlmIChjYXVnaHRfdHlwZS0+dHBfaW5pdCAhPSAoaW5pdHByb2MpQmFzZUV4Y2VwdGlvbl9pbml0IHx8CisgICAgICAgIGNhdWdodF90eXBlLT50cF9uZXcgIT0gQmFzZUV4Y2VwdGlvbl9uZXcgfHwKKyAgICAgICAgIXNhbWVfYmFzaWNfc2l6ZSB8fAorICAgICAgICBjYXVnaHRfdHlwZS0+dHBfaXRlbXNpemUgIT0gX1B5RXhjX0Jhc2VFeGNlcHRpb24udHBfaXRlbXNpemUpIHsKKyAgICAgICAgLyogV2UgY2FuJ3QgYmUgc3VyZSB3ZSBjYW4gd3JhcCB0aGlzIHNhZmVseSwgc2luY2UgaXQgbWF5IGNvbnRhaW4KKyAgICAgICAgICogbW9yZSBzdGF0ZSB0aGFuIGp1c3QgdGhlIGV4Y2VwdGlvbiB0eXBlLiBBY2NvcmRpbmdseSwgd2UganVzdAorICAgICAgICAgKiBsZWF2ZSBpdCBhbG9uZS4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhlIGFyZ3MgYXJlIGVtcHR5IG9yIGNvbnRhaW4gYSBzaW5nbGUgc3RyaW5nICovCisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwsICZ0Yik7CisgICAgaW5zdGFuY2VfYXJncyA9ICgoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICopdmFsKS0+YXJnczsKKyAgICBudW1fYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoaW5zdGFuY2VfYXJncyk7CisgICAgaWYgKG51bV9hcmdzID4gMSB8fAorICAgICAgICAobnVtX2FyZ3MgPT0gMSAmJgorICAgICAgICAgIVB5VW5pY29kZV9DaGVja0V4YWN0KFB5VHVwbGVfR0VUX0lURU0oaW5zdGFuY2VfYXJncywgMCkpKSkgeworICAgICAgICAvKiBNb3JlIHRoYW4gMSBhcmcsIG9yIHRoZSBvbmUgYXJnIHdlIGRvIGhhdmUgaXNuJ3QgYSBzdHJpbmcKKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRW5zdXJlIHRoZSBpbnN0YW5jZSBkaWN0IGlzIGFsc28gZW1wdHkgKi8KKyAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIodmFsKTsKKyAgICBpZiAoZGljdHB0ciAhPSBOVUxMICYmICpkaWN0cHRyICE9IE5VTEwgJiYKKyAgICAgICAgUHlPYmplY3RfTGVuZ3RoKCpkaWN0cHRyKSA+IDApIHsKKyAgICAgICAgLyogV2hpbGUgd2UgY291bGQgcG90ZW50aWFsbHkgY29weSBhIG5vbi1lbXB0eSBpbnN0YW5jZSBkaWN0aW9uYXJ5CisgICAgICAgICAqIHRvIHRoZSByZXBsYWNlbWVudCBleGNlcHRpb24sIGZvciBub3cgd2UgdGFrZSB0aGUgbW9yZQorICAgICAgICAgKiBjb25zZXJ2YXRpdmUgcGF0aCBvZiBsZWF2aW5nIGV4Y2VwdGlvbnMgd2l0aCBhdHRyaWJ1dGVzIHNldAorICAgICAgICAgKiBhbG9uZS4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRm9yIGV4Y2VwdGlvbnMgdGhhdCB3ZSBjYW4gd3JhcCBzYWZlbHksIHdlIGNoYWluIHRoZSBvcmlnaW5hbAorICAgICAqIGV4Y2VwdGlvbiB0byBhIG5ldyBvbmUgb2YgdGhlIGV4YWN0IHNhbWUgdHlwZSB3aXRoIGFuCisgICAgICogZXJyb3IgbWVzc2FnZSB0aGF0IG1lbnRpb25zIHRoZSBhZGRpdGlvbmFsIGRldGFpbHMgYW5kIHRoZQorICAgICAqIG9yaWdpbmFsIGV4Y2VwdGlvbi4KKyAgICAgKgorICAgICAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gd3JhcCBPU0Vycm9yIGFuZCB2YXJpb3VzIG90aGVyIGV4Y2VwdGlvbgorICAgICAqIHR5cGVzIGFzIHdlbGwsIGJ1dCB0aGF0J3MgcXVpdGUgYSBiaXQgdHJpY2tpZXIgZHVlIHRvIHRoZSBleHRyYQorICAgICAqIHN0YXRlIHBvdGVudGlhbGx5IHN0b3JlZCBvbiBPU0Vycm9yIGluc3RhbmNlcy4KKyAgICAgKi8KKyAgICAvKiBFbnN1cmUgdGhlIHRyYWNlYmFjayBpcyBzZXQgY29ycmVjdGx5IG9uIHRoZSBleGlzdGluZyBleGNlcHRpb24gKi8KKyAgICBpZiAodGIgIT0gTlVMTCkgeworICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgIFB5X0RFQ1JFRih0Yik7CisgICAgfQorCisjaWZkZWYgSEFWRV9TVERBUkdfUFJPVE9UWVBFUworICAgIHZhX3N0YXJ0KHZhcmdzLCBmb3JtYXQpOworI2Vsc2UKKyAgICB2YV9zdGFydCh2YXJncyk7CisjZW5kaWYKKyAgICBtc2dfcHJlZml4ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOworICAgIHZhX2VuZCh2YXJncyk7CisgICAgaWYgKG1zZ19wcmVmaXggPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5RXJyX0Zvcm1hdChleGMsICIlVSAoJXM6ICVTKSIsCisgICAgICAgICAgICAgICAgIG1zZ19wcmVmaXgsIFB5X1RZUEUodmFsKS0+dHBfbmFtZSwgdmFsKTsKKyAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICBQeV9ERUNSRUYobXNnX3ByZWZpeCk7CisgICAgUHlFcnJfRmV0Y2goJm5ld19leGMsICZuZXdfdmFsLCAmbmV3X3RiKTsKKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJm5ld19leGMsICZuZXdfdmFsLCAmbmV3X3RiKTsKKyAgICBQeUV4Y2VwdGlvbl9TZXRDYXVzZShuZXdfdmFsLCB2YWwpOworICAgIFB5RXJyX1Jlc3RvcmUobmV3X2V4YywgbmV3X3ZhbCwgbmV3X3RiKTsKKyAgICByZXR1cm4gbmV3X3ZhbDsKK30KKworCisvKiBUbyBoZWxwIHdpdGggbWlncmF0aW9uIGZyb20gUHl0aG9uIDIsIFN5bnRheEVycm9yLl9faW5pdF9fIGFwcGxpZXMgc29tZQorICogaGV1cmlzdGljcyB0byB0cnkgdG8gcmVwb3J0IGEgbW9yZSBtZWFuaW5nZnVsIGV4Y2VwdGlvbiB3aGVuIHByaW50IGFuZAorICogZXhlYyBhcmUgdXNlZCBsaWtlIHN0YXRlbWVudHMuCisgKgorICogVGhlIGhldXJpc3RpY3MgYXJlIGN1cnJlbnRseSBleHBlY3RlZCB0byBkZXRlY3QgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAqICAgLSB0b3AgbGV2ZWwgc3RhdGVtZW50CisgKiAgIC0gc3RhdGVtZW50IGluIGEgbmVzdGVkIHN1aXRlCisgKiAgIC0gdHJhaWxpbmcgc2VjdGlvbiBvZiBhIG9uZSBsaW5lIGNvbXBsZXggc3RhdGVtZW50CisgKgorICogVGhleSdyZSBjdXJyZW50bHkga25vd24gbm90IHRvIHRyaWdnZXI6CisgKiAgIC0gYWZ0ZXIgYSBzZW1pLWNvbG9uCisgKgorICogVGhlIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGEgYml0IG9kZCBpbiBjYXNlcyB3aGVyZSB0aGUgImFyZ3VtZW50cyIgYXJlCisgKiBjb21wbGV0ZWx5IGlsbGVnYWwgc3ludGFjdGljYWxseSwgYnV0IHRoYXQgaXNuJ3Qgd29ydGggdGhlIGhhc3NsZSBvZgorICogZml4aW5nLgorICoKKyAqIFdlIGFsc28gY2FuJ3QgZG8gYW55dGhpbmcgYWJvdXQgY2FzZXMgdGhhdCBhcmUgbGVnYWwgUHl0aG9uIDMgc3ludGF4CisgKiBidXQgbWVhbiBzb21ldGhpbmcgZW50aXJlbHkgZGlmZmVyZW50IGZyb20gd2hhdCB0aGV5IGRpZCBpbiBQeXRob24gMgorICogKG9taXR0aW5nIHRoZSBhcmd1bWVudHMgZW50aXJlbHksIHByaW50aW5nIGl0ZW1zIHByZWNlZGVkIGJ5IGEgdW5hcnkgcGx1cworICogb3IgbWludXMsIHVzaW5nIHRoZSBzdHJlYW0gcmVkaXJlY3Rpb24gc3ludGF4KS4KKyAqLworCitzdGF0aWMgaW50CitfY2hlY2tfZm9yX2xlZ2FjeV9zdGF0ZW1lbnRzKFB5U3ludGF4RXJyb3JPYmplY3QgKnNlbGYsIFB5X3NzaXplX3Qgc3RhcnQpCit7CisgICAgLyogUmV0dXJuIHZhbHVlczoKKyAgICAgKiAgIC0xOiBhbiBlcnJvciBvY2N1cnJlZAorICAgICAqICAgIDA6IG5vdGhpbmcgaGFwcGVuZWQKKyAgICAgKiAgICAxOiB0aGUgY2hlY2sgdHJpZ2dlcmVkICYgdGhlIGVycm9yIG1lc3NhZ2Ugd2FzIGNoYW5nZWQKKyAgICAgKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKnByaW50X3ByZWZpeCA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpleGVjX3ByZWZpeCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCB0ZXh0X2xlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYtPnRleHQpOworICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZi0+dGV4dCk7CisgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYtPnRleHQpOworCisgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworICAgIHdoaWxlIChzdGFydCA8IHRleHRfbGVuKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBzdGFydCk7CisgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdGFydCsrOworICAgIH0KKyAgICAvKiBDaGVja2luZyBhZ2FpbnN0IGFuIGVtcHR5IG9yIHdoaXRlc3BhY2Utb25seSBwYXJ0IG9mIHRoZSBzdHJpbmcgKi8KKyAgICBpZiAoc3RhcnQgPT0gdGV4dF9sZW4pIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIGxlZ2FjeSBwcmludCBzdGF0ZW1lbnRzICovCisgICAgaWYgKHByaW50X3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIHByaW50X3ByZWZpeCA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJwcmludCAiKTsKKyAgICAgICAgaWYgKHByaW50X3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9UYWlsbWF0Y2goc2VsZi0+dGV4dCwgcHJpbnRfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCB0ZXh0X2xlbiwgLTEpKSB7CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPm1zZyk7CisgICAgICAgIHNlbGYtPm1zZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHBhcmVudGhlc2VzIGluIGNhbGwgdG8gJ3ByaW50JyIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBmb3IgbGVnYWN5IGV4ZWMgc3RhdGVtZW50cyAqLworICAgIGlmIChleGVjX3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIGV4ZWNfcHJlZml4ID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoImV4ZWMgIik7CisgICAgICAgIGlmIChleGVjX3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9UYWlsbWF0Y2goc2VsZi0+dGV4dCwgZXhlY19wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHRleHRfbGVuLCAtMSkpIHsKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+bXNnKTsKKyAgICAgICAgc2VsZi0+bXNnID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHBhcmVudGhlc2VzIGluIGNhbGwgdG8gJ2V4ZWMnIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAvKiBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSAqLworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfcmVwb3J0X21pc3NpbmdfcGFyZW50aGVzZXMoUHlTeW50YXhFcnJvck9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9VQ1M0IGxlZnRfcGFyZW4gPSA0MDsKKyAgICBQeV9zc2l6ZV90IGxlZnRfcGFyZW5faW5kZXg7CisgICAgUHlfc3NpemVfdCB0ZXh0X2xlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYtPnRleHQpOworICAgIGludCBsZWdhY3lfY2hlY2tfcmVzdWx0ID0gMDsKKworICAgIC8qIFNraXAgZW50aXJlbHkgaWYgdGhlcmUgaXMgYW4gb3BlbmluZyBwYXJlbnRoZXNpcyAqLworICAgIGxlZnRfcGFyZW5faW5kZXggPSBQeVVuaWNvZGVfRmluZENoYXIoc2VsZi0+dGV4dCwgbGVmdF9wYXJlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHRfbGVuLCAxKTsKKyAgICBpZiAobGVmdF9wYXJlbl9pbmRleCA8IC0xKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGxlZnRfcGFyZW5faW5kZXggIT0gLTEpIHsKKyAgICAgICAgLyogVXNlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBmb3IgYW55IGxpbmUgd2l0aCBhbiBvcGVuaW5nIHBhcmVuICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvKiBIYW5kbGUgdGhlIHNpbXBsZSBzdGF0ZW1lbnQgY2FzZSAqLworICAgIGxlZ2FjeV9jaGVja19yZXN1bHQgPSBfY2hlY2tfZm9yX2xlZ2FjeV9zdGF0ZW1lbnRzKHNlbGYsIDApOworICAgIGlmIChsZWdhY3lfY2hlY2tfcmVzdWx0IDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisKKyAgICB9CisgICAgaWYgKGxlZ2FjeV9jaGVja19yZXN1bHQgPT0gMCkgeworICAgICAgICAvKiBIYW5kbGUgdGhlIG9uZS1saW5lIGNvbXBsZXggc3RhdGVtZW50IGNhc2UgKi8KKyAgICAgICAgUHlfVUNTNCBjb2xvbiA9IDU4OworICAgICAgICBQeV9zc2l6ZV90IGNvbG9uX2luZGV4OworICAgICAgICBjb2xvbl9pbmRleCA9IFB5VW5pY29kZV9GaW5kQ2hhcihzZWxmLT50ZXh0LCBjb2xvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdGV4dF9sZW4sIDEpOworICAgICAgICBpZiAoY29sb25faW5kZXggPCAtMSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xvbl9pbmRleCA+PSAwICYmIGNvbG9uX2luZGV4IDwgdGV4dF9sZW4pIHsKKyAgICAgICAgICAgIC8qIENoZWNrIGFnYWluLCBzdGFydGluZyBmcm9tIGp1c3QgYWZ0ZXIgdGhlIGNvbG9uICovCisgICAgICAgICAgICBpZiAoX2NoZWNrX2Zvcl9sZWdhY3lfc3RhdGVtZW50cyhzZWxmLCBjb2xvbl9pbmRleCsxKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZpbGVvYmplY3QuYyBiL09iamVjdHMvZmlsZW9iamVjdC5jCmluZGV4IDk4ZjQyYTkuLjU5NmY5MDkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmlsZW9iamVjdC5jCisrKyBiL09iamVjdHMvZmlsZW9iamVjdC5jCkBAIC0yNiw4ICsyNiw4IEBACiAvKiBFeHRlcm5hbCBDIGludGVyZmFjZSAqLwogCiBQeU9iamVjdCAqCi1QeUZpbGVfRnJvbUZkKGludCBmZCwgY2hhciAqbmFtZSwgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgIGNoYXIgKmVycm9ycywgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCitQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiB7CiAgICAgUHlPYmplY3QgKmlvLCAqc3RyZWFtOwogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwpAQCAtMzkwLDcgKzM5MCw3IEBACiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZXJybm8gPSAwOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKG4gPiBJTlRfTUFYKQogICAgICAgICBuID0gSU5UX01BWDsKICAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIGMsIChpbnQpbik7CmRpZmYgLS1naXQgYS9PYmplY3RzL2Zsb2F0b2JqZWN0LmMgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKaW5kZXggYTA4YTg1Mi4uMDViNzY3OSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jCisrKyBiL09iamVjdHMvZmxvYXRvYmplY3QuYwpAQCAtOSwxMSArOSw2IEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxmbG9hdC5oPgogCi0jdW5kZWYgTUFYCi0jdW5kZWYgTUlOCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKLQogCiAvKiBTcGVjaWFsIGZyZWUgbGlzdAogICAgZnJlZV9saXN0IGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGF2YWlsYWJsZSBQeUZsb2F0T2JqZWN0cywgbGlua2VkCkBAIC0xMTQsNyArMTA5LDcgQEAKIFB5T2JqZWN0ICoKIFB5RmxvYXRfRnJvbURvdWJsZShkb3VibGUgZnZhbCkKIHsKLSAgICByZWdpc3RlciBQeUZsb2F0T2JqZWN0ICpvcCA9IGZyZWVfbGlzdDsKKyAgICBQeUZsb2F0T2JqZWN0ICpvcCA9IGZyZWVfbGlzdDsKICAgICBpZiAob3AgIT0gTlVMTCkgewogICAgICAgICBmcmVlX2xpc3QgPSAoUHlGbG9hdE9iamVjdCAqKSBQeV9UWVBFKG9wKTsKICAgICAgICAgbnVtZnJlZS0tOwpAQCAtMTI0LDcgKzExOSw3IEBACiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9CiAgICAgLyogSW5saW5lIFB5T2JqZWN0X05ldyAqLwotICAgIFB5T2JqZWN0X0lOSVQob3AsICZQeUZsb2F0X1R5cGUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVQob3AsICZQeUZsb2F0X1R5cGUpOwogICAgIG9wLT5vYl9mdmFsID0gZnZhbDsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9wOwogfQpAQCAtMTQ5LDggKzE0NCw5IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHYsICZzLCAmbGVuKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgImZsb2F0KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciIpOworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImZsb2F0KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgbGFzdCA9IHMgKyBsZW47CkBAIC0yNDYsNyArMjQyLDcgQEAKIHN0YXRpYyBpbnQKIGNvbnZlcnRfdG9fZG91YmxlKFB5T2JqZWN0ICoqdiwgZG91YmxlICpkYmwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9iaiA9ICp2OworICAgIFB5T2JqZWN0ICpvYmogPSAqdjsKIAogICAgIGlmIChQeUxvbmdfQ2hlY2sob2JqKSkgewogICAgICAgICAqZGJsID0gUHlMb25nX0FzRG91YmxlKG9iaik7CkBAIC0xMTMxLDcgKzExMjcsNyBAQAogICAgIH0KIAogICAgIG0gPSBmcmV4cChmYWJzKHgpLCAmZSk7Ci0gICAgc2hpZnQgPSAxIC0gTUFYKERCTF9NSU5fRVhQIC0gZSwgMCk7CisgICAgc2hpZnQgPSAxIC0gUHlfTUFYKERCTF9NSU5fRVhQIC0gZSwgMCk7CiAgICAgbSA9IGxkZXhwKG0sIHNoaWZ0KTsKICAgICBlIC09IHNoaWZ0OwogCkBAIC0xMjg1LDggKzEyODEsOCBAQAogICAgIGZkaWdpdHMgPSBjb2VmZl9lbmQgLSBzX3N0b3JlOwogICAgIGlmIChuZGlnaXRzID09IDApCiAgICAgICAgIGdvdG8gcGFyc2VfZXJyb3I7Ci0gICAgaWYgKG5kaWdpdHMgPiBNSU4oREJMX01JTl9FWFAgLSBEQkxfTUFOVF9ESUcgLSBMT05HX01JTi8yLAotICAgICAgICAgICAgICAgICAgICAgIExPTkdfTUFYLzIgKyAxIC0gREJMX01BWF9FWFApLzQpCisgICAgaWYgKG5kaWdpdHMgPiBQeV9NSU4oREJMX01JTl9FWFAgLSBEQkxfTUFOVF9ESUcgLSBMT05HX01JTi8yLAorICAgICAgICAgICAgICAgICAgICAgICAgIExPTkdfTUFYLzIgKyAxIC0gREJMX01BWF9FWFApLzQpCiAgICAgICAgIGdvdG8gaW5zYW5lX2xlbmd0aF9lcnJvcjsKIAogICAgIC8qIFtwIDxleHBvbmVudD5dICovCkBAIC0xMzQyLDcgKzEzMzgsNyBAQAogCiAgICAgLyogbHNiID0gZXhwb25lbnQgb2YgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSAqcm91bmRlZCogdmFsdWUuCiAgICAgICAgVGhpcyBpcyB0b3BfZXhwIC0gREJMX01BTlRfRElHIHVubGVzcyByZXN1bHQgaXMgc3Vibm9ybWFsLiAqLwotICAgIGxzYiA9IE1BWCh0b3BfZXhwLCAobG9uZylEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUc7CisgICAgbHNiID0gUHlfTUFYKHRvcF9leHAsIChsb25nKURCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRzsKIAogICAgIHggPSAwLjA7CiAgICAgaWYgKGV4cCA+PSBsc2IpIHsKQEAgLTE0MjEsNyArMTQxNyw3IEBACiA+Pj4gZmxvYXQuZnJvbWhleCgnMHgxLmZmZmZwMTAnKVxuXAogMjA0Ny45ODQzNzVcblwKID4+PiBmbG9hdC5mcm9taGV4KCctMHgxcC0xMDc0JylcblwKLS00Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCIpOworLTVlLTMyNCIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNzExLDcgKzE3MDcsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdF9zcGVjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeUZsb2F0X0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtMTg1OCw3ICsxODU0LDcgQEAKICAgICBmbG9hdF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKIAotdm9pZAoraW50CiBfUHlGbG9hdF9Jbml0KHZvaWQpCiB7CiAgICAgLyogV2UgYXR0ZW1wdCB0byBkZXRlcm1pbmUgaWYgdGhpcyBtYWNoaW5lIGlzIHVzaW5nIElFRUUKQEAgLTE5MDgsOCArMTkwNCwxMSBAQAogICAgIGZsb2F0X2Zvcm1hdCA9IGRldGVjdGVkX2Zsb2F0X2Zvcm1hdDsKIAogICAgIC8qIEluaXQgZmxvYXQgaW5mbyAqLwotICAgIGlmIChGbG9hdEluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmRmxvYXRJbmZvVHlwZSwgJmZsb2F0aW5mb19kZXNjKTsKKyAgICBpZiAoRmxvYXRJbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZGbG9hdEluZm9UeXBlLCAmZmxvYXRpbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKaW5kZXggYjMxMjEzMC4uNTVlZTU2MyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jCisrKyBiL09iamVjdHMvZnJhbWVvYmplY3QuYwpAQCAtNywxMSArNyw2IEBACiAjaW5jbHVkZSAib3Bjb2RlLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSN1bmRlZiBNSU4KLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIE1BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQotCiAjZGVmaW5lIE9GRih4KSBvZmZzZXRvZihQeUZyYW1lT2JqZWN0LCB4KQogCiBzdGF0aWMgUHlNZW1iZXJEZWYgZnJhbWVfbWVtYmVybGlzdFtdID0gewpAQCAtMjYsNyArMjEsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZyYW1lX2dldGxvY2FscyhQeUZyYW1lT2JqZWN0ICpmLCB2b2lkICpjbG9zdXJlKQogewotICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGYpOworICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0lOQ1JFRihmLT5mX2xvY2Fscyk7CiAgICAgcmV0dXJuIGYtPmZfbG9jYWxzOwogfQpAQCAtMTYwLDggKzE1Niw4IEBACiAKICAgICAvKiBXZSdyZSBub3cgcmVhZHkgdG8gbG9vayBhdCB0aGUgYnl0ZWNvZGUuICovCiAgICAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoZi0+Zl9jb2RlLT5jb19jb2RlLCAoY2hhciAqKikmY29kZSwgJmNvZGVfbGVuKTsKLSAgICBtaW5fYWRkciA9IE1JTihuZXdfbGFzdGksIGYtPmZfbGFzdGkpOwotICAgIG1heF9hZGRyID0gTUFYKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7CisgICAgbWluX2FkZHIgPSBQeV9NSU4obmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKKyAgICBtYXhfYWRkciA9IFB5X01BWChuZXdfbGFzdGksIGYtPmZfbGFzdGkpOwogCiAgICAgLyogWW91IGNhbid0IGp1bXAgb250byBhIGxpbmUgd2l0aCBhbiAnZXhjZXB0JyBzdGF0ZW1lbnQgb24gaXQgLQogICAgICAqIHRoZXkgZXhwZWN0IHRvIGhhdmUgYW4gZXhjZXB0aW9uIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCB3aGljaApAQCAtMjkzLDcgKzI4OSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIG1pbl9kZWx0YV9pYmxvY2sgPSBNSU4obWluX2RlbHRhX2libG9jaywgZGVsdGFfaWJsb2NrKTsKKyAgICAgICAgbWluX2RlbHRhX2libG9jayA9IFB5X01JTihtaW5fZGVsdGFfaWJsb2NrLCBkZWx0YV9pYmxvY2spOwogCiAgICAgICAgIGlmIChvcCA+PSBIQVZFX0FSR1VNRU5UKSB7CiAgICAgICAgICAgICBhZGRyICs9IDI7CkBAIC00NjYsNyArNDYyLDcgQEAKIGZyYW1lX3RyYXZlcnNlKFB5RnJhbWVPYmplY3QgKmYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipwOwotICAgIGludCBpLCBzbG90czsKKyAgICBQeV9zc2l6ZV90IGksIHNsb3RzOwogCiAgICAgUHlfVklTSVQoZi0+Zl9iYWNrKTsKICAgICBQeV9WSVNJVChmLT5mX2NvZGUpOwpAQCAtNDkzLDEwICs0ODksMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWZyYW1lX2NsZWFyKFB5RnJhbWVPYmplY3QgKmYpCitmcmFtZV90cF9jbGVhcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipwLCAqKm9sZHRvcDsKLSAgICBpbnQgaSwgc2xvdHM7CisgICAgUHlfc3NpemVfdCBpLCBzbG90czsKIAogICAgIC8qIEJlZm9yZSBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgdGhhdCB0aGlzIGZyYW1lIGlzIGNsZWFybHkgbWFya2VkCiAgICAgICogYXMgYmVpbmcgZGVmdW5jdCEgIEVsc2UsIGUuZy4sIGEgZ2VuZXJhdG9yIHJlYWNoYWJsZSBmcm9tIHRoaXMKQEAgLTUwNSw2ICs1MDEsNyBAQAogICAgICAqLwogICAgIG9sZHRvcCA9IGYtPmZfc3RhY2t0b3A7CiAgICAgZi0+Zl9zdGFja3RvcCA9IE5VTEw7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOwogCiAgICAgUHlfQ0xFQVIoZi0+Zl9leGNfdHlwZSk7CiAgICAgUHlfQ0xFQVIoZi0+Zl9leGNfdmFsdWUpOwpAQCAtNTI1LDYgKzUyMiwyNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZnJhbWVfY2xlYXIoUHlGcmFtZU9iamVjdCAqZikKK3sKKyAgICBpZiAoZi0+Zl9leGVjdXRpbmcpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY2xlYXIgYW4gZXhlY3V0aW5nIGZyYW1lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoZi0+Zl9nZW4pIHsKKyAgICAgICAgX1B5R2VuX0ZpbmFsaXplKGYtPmZfZ2VuKTsKKyAgICAgICAgYXNzZXJ0KGYtPmZfZ2VuID09IE5VTEwpOworICAgIH0KKyAgICBmcmFtZV90cF9jbGVhcihmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGNsZWFyX19kb2NfXywKKyJGLmNsZWFyKCk6IGNsZWFyIG1vc3QgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZSBmcmFtZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgogZnJhbWVfc2l6ZW9mKFB5RnJhbWVPYmplY3QgKmYpCiB7CiAgICAgUHlfc3NpemVfdCByZXMsIGV4dHJhcywgbmNlbGxzLCBuZnJlZXM7CkBAIC01NDMsNiArNTU5LDggQEAKICJGLl9fc2l6ZW9mX18oKSAtPiBzaXplIG9mIEYgaW4gbWVtb3J5LCBpbiBieXRlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgZnJhbWVfbWV0aG9kc1tdID0geworICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWZyYW1lX2NsZWFyLCAgICAgICBNRVRIX05PQVJHUywKKyAgICAgY2xlYXJfX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilmcmFtZV9zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCiAgICAgIHNpemVvZl9fZG9jX199LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwpAQCAtNTcxLDcgKzU4OSw3IEBACiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWZyYW1lX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpZnJhbWVfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIChpbnF1aXJ5KWZyYW1lX3RwX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwpAQCAtNTgzLDEzICs2MDEsMTMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCAqYnVpbHRpbl9vYmplY3Q7CitfUHlfSURFTlRJRklFUihfX2J1aWx0aW5zX18pOwogCiBpbnQgX1B5RnJhbWVfSW5pdCgpCiB7Ci0gICAgYnVpbHRpbl9vYmplY3QgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19idWlsdGluc19fIik7Ci0gICAgaWYgKGJ1aWx0aW5fb2JqZWN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOworICAgIC8qIEJlZm9yZSwgUHlJZF9fX2J1aWx0aW5zX18gd2FzIGEgc3RyaW5nIGNyZWF0ZWQgZXhwbGljaXRseSBpbgorICAgICAgIHRoaXMgZnVuY3Rpb24uIE5vdyB0aGVyZSBpcyBub3RoaW5nIHRvIGluaXRpYWxpemUgYW55bW9yZSwgYnV0CisgICAgICAgdGhlIGZ1bmN0aW9uIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTYxMCw3ICs2MjgsNyBAQAogICAgIH0KICNlbmRpZgogICAgIGlmIChiYWNrID09IE5VTEwgfHwgYmFjay0+Zl9nbG9iYWxzICE9IGdsb2JhbHMpIHsKLSAgICAgICAgYnVpbHRpbnMgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBidWlsdGluX29iamVjdCk7CisgICAgICAgIGJ1aWx0aW5zID0gX1B5RGljdF9HZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fKTsKICAgICAgICAgaWYgKGJ1aWx0aW5zKSB7CiAgICAgICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2soYnVpbHRpbnMpKSB7CiAgICAgICAgICAgICAgICAgYnVpbHRpbnMgPSBQeU1vZHVsZV9HZXREaWN0KGJ1aWx0aW5zKTsKQEAgLTcwOCwxMSArNzI2LDEyIEBACiAgICAgICAgIFB5X0lOQ1JFRihsb2NhbHMpOwogICAgICAgICBmLT5mX2xvY2FscyA9IGxvY2FsczsKICAgICB9Ci0gICAgZi0+Zl90c3RhdGUgPSB0c3RhdGU7CiAKICAgICBmLT5mX2xhc3RpID0gLTE7CiAgICAgZi0+Zl9saW5lbm8gPSBjb2RlLT5jb19maXJzdGxpbmVubzsKICAgICBmLT5mX2libG9jayA9IDA7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOworICAgIGYtPmZfZ2VuID0gTlVMTDsKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhmKTsKICAgICByZXR1cm4gZjsKQEAgLTc1MywxMiArNzcyLDkgQEAKICAgIElmIGRlcmVmIGlzIHRydWUsIHRoZW4gdGhlIHZhbHVlcyBiZWluZyBjb3BpZWQgYXJlIGNlbGwgdmFyaWFibGVzCiAgICBhbmQgdGhlIHZhbHVlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBjZWxsIHZhcmlhYmxlIGJlZm9yZSBiZWluZyBwdXQKICAgIGluIGRpY3QuCi0KLSAgIEV4Y2VwdGlvbnMgcmFpc2VkIHdoaWxlIG1vZGlmeWluZyB0aGUgZGljdCBhcmUgc2lsZW50bHkgaWdub3JlZCwKLSAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gcmVwb3J0IHRoZW0uCiAgKi8KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIG1hcF90b19kaWN0KFB5T2JqZWN0ICptYXAsIFB5X3NzaXplX3Qgbm1hcCwgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICoqdmFsdWVzLAogICAgICAgICAgICAgaW50IGRlcmVmKQogewpAQCAtNzcwLDE5ICs3ODYsMjQgQEAKICAgICAgICAgUHlPYmplY3QgKmtleSA9IFB5VHVwbGVfR0VUX0lURU0obWFwLCBqKTsKICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gdmFsdWVzW2pdOwogICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKGtleSkpOwotICAgICAgICBpZiAoZGVyZWYpIHsKKyAgICAgICAgaWYgKGRlcmVmICYmIHZhbHVlICE9IE5VTEwpIHsKICAgICAgICAgICAgIGFzc2VydChQeUNlbGxfQ2hlY2sodmFsdWUpKTsKICAgICAgICAgICAgIHZhbHVlID0gUHlDZWxsX0dFVCh2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9EZWxJdGVtKGRpY3QsIGtleSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0oZGljdCwga2V5KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogLyogQ29weSB2YWx1ZXMgZnJvbSB0aGUgImxvY2FscyIgZGljdCBpbnRvIHRoZSBmYXN0IGxvY2Fscy4KQEAgLTgzOSw0MiArODYwLDQ5IEBACiAgICAgfQogfQogCi12b2lkCi1QeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoraW50CitQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIC8qIE1lcmdlIGZhc3QgbG9jYWxzIGludG8gZi0+Zl9sb2NhbHMgKi8KICAgICBQeU9iamVjdCAqbG9jYWxzLCAqbWFwOwogICAgIFB5T2JqZWN0ICoqZmFzdDsKLSAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlfc3NpemVfdCBqOwotICAgIGludCBuY2VsbHMsIG5mcmVldmFyczsKLSAgICBpZiAoZiA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisgICAgUHlfc3NpemVfdCBuY2VsbHMsIG5mcmVldmFyczsKKworICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CiAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIENhbid0IHJlcG9ydCBpdCA6LSggKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGNvID0gZi0+Zl9jb2RlOwogICAgIG1hcCA9IGNvLT5jb192YXJuYW1lczsKLSAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobWFwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworICAgIGlmICghUHlUdXBsZV9DaGVjayhtYXApKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb192YXJuYW1lcyBtdXN0IGJlIGEgdHVwbGUsIG5vdCAlcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG1hcCktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZhc3QgPSBmLT5mX2xvY2Fsc3BsdXM7CiAgICAgaiA9IFB5VHVwbGVfR0VUX1NJWkUobWFwKTsKICAgICBpZiAoaiA+IGNvLT5jb19ubG9jYWxzKQogICAgICAgICBqID0gY28tPmNvX25sb2NhbHM7Ci0gICAgaWYgKGNvLT5jb19ubG9jYWxzKQotICAgICAgICBtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCk7CisgICAgaWYgKGNvLT5jb19ubG9jYWxzKSB7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBuY2VsbHMgPSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycyk7CiAgICAgbmZyZWV2YXJzID0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fZnJlZXZhcnMpOwogICAgIGlmIChuY2VsbHMgfHwgbmZyZWV2YXJzKSB7Ci0gICAgICAgIG1hcF90b19kaWN0KGNvLT5jb19jZWxsdmFycywgbmNlbGxzLAotICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscywgMSk7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fY2VsbHZhcnMsIG5jZWxscywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzLCAxKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwogICAgICAgICAvKiBJZiB0aGUgbmFtZXNwYWNlIGlzIHVub3B0aW1pemVkLCB0aGVuIG9uZSBvZiB0aGUKICAgICAgICAgICAgZm9sbG93aW5nIGNhc2VzIGFwcGxpZXM6CiAgICAgICAgICAgIDEuIEl0IGRvZXMgbm90IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMsIGJlY2F1c2UgaXQKQEAgLTg4NCwxMSArOTEyLDI0IEBACiAgICAgICAgICAgIGludG8gdGhlIGxvY2FscyBkaWN0IHVzZWQgYnkgdGhlIGNsYXNzLgogICAgICAgICAqLwogICAgICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fT1BUSU1JWkVEKSB7Ci0gICAgICAgICAgICBtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzICsgbmNlbGxzLCAxKTsKKyAgICAgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscyArIG5jZWxscywgMSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KLSAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCit2b2lkCitQeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoreworICAgIGludCByZXM7CisKKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworCisgICAgcmVzID0gUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKIHZvaWQKQEAgLTkwMCw3ICs5NDEsNyBAQAogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgaW50IG5jZWxscywgbmZyZWV2YXJzOworICAgIFB5X3NzaXplX3QgbmNlbGxzLCBuZnJlZXZhcnM7CiAgICAgaWYgKGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzOwpAQCAtOTUyLDcgKzk5Myw2IEBACiBQeUZyYW1lX0Zpbmkodm9pZCkKIHsKICAgICAodm9pZClQeUZyYW1lX0NsZWFyRnJlZUxpc3QoKTsKLSAgICBQeV9DTEVBUihidWlsdGluX29iamVjdCk7CiB9CiAKIC8qIFByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIG9wdGltaXplZCBhbGxvY2F0b3IgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZnVuY29iamVjdC5jIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKaW5kZXggNDk0MTViOS4uYjA0MzkzNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKQEAgLTgsNjAgKzgsNTkgQEAKIFB5T2JqZWN0ICoKIFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKFB5T2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIFB5RnVuY3Rpb25PYmplY3QgKm9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RnVuY3Rpb25fVHlwZSk7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpfX25hbWVfXyA9IDA7Ci0gICAgaWYgKG9wICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKmRvYzsKLSAgICAgICAgUHlPYmplY3QgKmNvbnN0czsKLSAgICAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICAgICAgb3AtPmZ1bmNfd2Vha3JlZmxpc3QgPSBOVUxMOwotICAgICAgICBQeV9JTkNSRUYoY29kZSk7Ci0gICAgICAgIG9wLT5mdW5jX2NvZGUgPSBjb2RlOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFscyk7Ci0gICAgICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOwotICAgICAgICBvcC0+ZnVuY19uYW1lID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUpOwotICAgICAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCi0gICAgICAgIG9wLT5mdW5jX2t3ZGVmYXVsdHMgPSBOVUxMOyAvKiBObyBrZXl3b3JkIG9ubHkgZGVmYXVsdHMgKi8KLSAgICAgICAgb3AtPmZ1bmNfY2xvc3VyZSA9IE5VTEw7Ci0gICAgICAgIGNvbnN0cyA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX2NvbnN0czsKLSAgICAgICAgaWYgKFB5VHVwbGVfU2l6ZShjb25zdHMpID49IDEpIHsKLSAgICAgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOwotICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZG9jKSkKLSAgICAgICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihkb2MpOwotICAgICAgICBvcC0+ZnVuY19kb2MgPSBkb2M7Ci0gICAgICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7CisgICAgUHlGdW5jdGlvbk9iamVjdCAqb3A7CisgICAgUHlPYmplY3QgKmRvYywgKmNvbnN0cywgKm1vZHVsZTsKKyAgICBzdGF0aWMgUHlPYmplY3QgKl9fbmFtZV9fID0gTlVMTDsKIAotICAgICAgICAvKiBfX21vZHVsZV9fOiBJZiBtb2R1bGUgbmFtZSBpcyBpbiBnbG9iYWxzLCB1c2UgaXQuCi0gICAgICAgICAgIE90aGVyd2lzZSwgdXNlIE5vbmUuCi0gICAgICAgICovCi0gICAgICAgIGlmICghX19uYW1lX18pIHsKLSAgICAgICAgICAgIF9fbmFtZV9fID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgICAgICBpZiAoIV9fbmFtZV9fKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtb2R1bGUgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBfX25hbWVfXyk7Ci0gICAgICAgIGlmIChtb2R1bGUpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOwotICAgICAgICAgICAgb3AtPmZ1bmNfbW9kdWxlID0gbW9kdWxlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChxdWFsbmFtZSkKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gcXVhbG5hbWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKKyAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkgeworICAgICAgICBfX25hbWVfXyA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOworICAgICAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsICZQeUZ1bmN0aW9uX1R5cGUpOworICAgIGlmIChvcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9wLT5mdW5jX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICBQeV9JTkNSRUYoY29kZSk7CisgICAgb3AtPmZ1bmNfY29kZSA9IGNvZGU7CisgICAgUHlfSU5DUkVGKGdsb2JhbHMpOworICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOworICAgIG9wLT5mdW5jX25hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19uYW1lOworICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19uYW1lKTsKKyAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCisgICAgb3AtPmZ1bmNfa3dkZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGtleXdvcmQgb25seSBkZWZhdWx0cyAqLworICAgIG9wLT5mdW5jX2Nsb3N1cmUgPSBOVUxMOworCisgICAgY29uc3RzID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fY29uc3RzOworICAgIGlmIChQeVR1cGxlX1NpemUoY29uc3RzKSA+PSAxKSB7CisgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhkb2MpKQorICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKyAgICBQeV9JTkNSRUYoZG9jKTsKKyAgICBvcC0+ZnVuY19kb2MgPSBkb2M7CisKKyAgICBvcC0+ZnVuY19kaWN0ID0gTlVMTDsKKyAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOworICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gTlVMTDsKKworICAgIC8qIF9fbW9kdWxlX186IElmIG1vZHVsZSBuYW1lIGlzIGluIGdsb2JhbHMsIHVzZSBpdC4KKyAgICAgICBPdGhlcndpc2UsIHVzZSBOb25lLiAqLworICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtKGdsb2JhbHMsIF9fbmFtZV9fKTsKKyAgICBpZiAobW9kdWxlKSB7CisgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOworICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBtb2R1bGU7CisgICAgfQorICAgIGlmIChxdWFsbmFtZSkKKyAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKyAgICBlbHNlCisgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOworCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKG9wKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopb3A7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2dlbm9iamVjdC5jIGIvT2JqZWN0cy9nZW5vYmplY3QuYwppbmRleCAyZTc0YjhjLi4wOGQzMGJmIDEwMDY0NAotLS0gYS9PYmplY3RzL2dlbm9iamVjdC5jCisrKyBiL09iamVjdHMvZ2Vub2JqZWN0LmMKQEAgLTE1LDYgKzE1LDMxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK19QeUdlbl9GaW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBpZiAoZ2VuLT5naV9mcmFtZSA9PSBOVUxMIHx8IGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgPT0gTlVMTCkKKyAgICAgICAgLyogR2VuZXJhdG9yIGlzbid0IHBhdXNlZCwgc28gbm8gbmVlZCB0byBjbG9zZSAqLworICAgICAgICByZXR1cm47CisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgcmVzID0gZ2VuX2Nsb3NlKGdlbiwgTlVMTCk7CisKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZWxmKTsKKyAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Cit9CisKIHN0YXRpYyB2b2lkCiBnZW5fZGVhbGxvYyhQeUdlbk9iamVjdCAqZ2VuKQogewpAQCAtMjcsMTIgKzUyLDggQEAKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKIAotICAgIGlmIChnZW4tPmdpX2ZyYW1lICE9IE5VTEwgJiYgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIEdlbmVyYXRvciBpcyBwYXVzZWQsIHNvIHdlIG5lZWQgdG8gY2xvc2UgKi8KLSAgICAgICAgUHlfVFlQRShnZW4pLT50cF9kZWwoc2VsZik7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQotICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KLSAgICB9CisgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KIAogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIFB5X0NMRUFSKGdlbi0+Z2lfZnJhbWUpOwpAQCAtNDAsNyArNjEsNiBAQAogICAgIFB5T2JqZWN0X0dDX0RlbChnZW4pOwogfQogCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBnZW5fc2VuZF9leChQeUdlbk9iamVjdCAqZ2VuLCBQeU9iamVjdCAqYXJnLCBpbnQgZXhjKQogewpAQCAtNzYsNyArOTYsNiBAQAogCiAgICAgLyogR2VuZXJhdG9ycyBhbHdheXMgcmV0dXJuIHRvIHRoZWlyIG1vc3QgcmVjZW50IGNhbGxlciwgbm90CiAgICAgICogbmVjZXNzYXJpbHkgdGhlaXIgY3JlYXRvci4gKi8KLSAgICBmLT5mX3RzdGF0ZSA9IHRzdGF0ZTsKICAgICBQeV9YSU5DUkVGKHRzdGF0ZS0+ZnJhbWUpOwogICAgIGFzc2VydChmLT5mX2JhY2sgPT0gTlVMTCk7CiAgICAgZi0+Zl9iYWNrID0gdHN0YXRlLT5mcmFtZTsKQEAgLTkwLDggKzEwOSw2IEBACiAgICAgICogY3ljbGUuICovCiAgICAgYXNzZXJ0KGYtPmZfYmFjayA9PSB0c3RhdGUtPmZyYW1lKTsKICAgICBQeV9DTEVBUihmLT5mX2JhY2spOwotICAgIC8qIENsZWFyIHRoZSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCBzdGF0ZSAqLwotICAgIGYtPmZfdHN0YXRlID0gTlVMTDsKIAogICAgIC8qIElmIHRoZSBnZW5lcmF0b3IganVzdCByZXR1cm5lZCAoYXMgb3Bwb3NlZCB0byB5aWVsZGluZyksIHNpZ25hbAogICAgICAqIHRoYXQgdGhlIGdlbmVyYXRvciBpcyBleGhhdXN0ZWQuICovCkBAIC0xMjMsNiArMTQwLDcgQEAKICAgICAgICAgUHlfWERFQ1JFRih0KTsKICAgICAgICAgUHlfWERFQ1JFRih2KTsKICAgICAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgICAgIGdlbi0+Z2lfZnJhbWUtPmZfZ2VuID0gTlVMTDsKICAgICAgICAgZ2VuLT5naV9mcmFtZSA9IE5VTEw7CiAgICAgICAgIFB5X0RFQ1JFRihmKTsKICAgICB9CkBAIC0yMjUsNjggKzI0Myw2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkCi1nZW5fZGVsKFB5T2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKLSAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKLQotICAgIGlmIChnZW4tPmdpX2ZyYW1lID09IE5VTEwgfHwgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCA9PSBOVUxMKQotICAgICAgICAvKiBHZW5lcmF0b3IgaXNuJ3QgcGF1c2VkLCBzbyBubyBuZWVkIHRvIGNsb3NlICovCi0gICAgICAgIHJldHVybjsKLQotICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPT0gMCk7Ci0gICAgc2VsZi0+b2JfcmVmY250ID0gMTsKLQotICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCi0gICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICByZXMgPSBnZW5fY2xvc2UoZ2VuLCBOVUxMKTsKLQotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNlbGYpOwotICAgIGVsc2UKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0KLSAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCi0gICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKLQotICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKLSAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgotICAgICAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKLSAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKLSAgICAgICAgcmV0dXJuOyAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KLQotICAgIC8qIGNsb3NlKCkgcmVzdXJyZWN0ZWQgaXQhICBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgUHlfREVDUkVGCi0gICAgICogbmV2ZXIgaGFwcGVuZWQuCi0gICAgICovCi0gICAgewotICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgc2VsZi0+b2JfcmVmY250ID0gcmVmY250OwotICAgIH0KLSAgICBhc3NlcnQoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpICYmCi0gICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7Ci0KLSAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICogdW5kb25lLgotICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC0tKFB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzKTsKLSAgICAtLShQeV9UWVBFKHNlbGYpLT50cF9hbGxvY3MpOwotI2VuZGlmCi19Ci0KLQogCiBQeURvY19TVFJWQVIodGhyb3dfZG9jLAogInRocm93KHR5cFssdmFsWyx0Yl1dKSAtPiByYWlzZSBleGNlcHRpb24gaW4gZ2VuZXJhdG9yLFxuXApAQCAtNTIwLDcgKzQ3Niw4IEBACiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywvKiB0cF9mbGFncyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8CisgICAgICAgIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylnZW5fdHJhdmVyc2UsICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTU0Nyw3ICs1MDQsOSBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCi0gICAgZ2VuX2RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICBfUHlHZW5fRmluYWxpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiBQeU9iamVjdCAqCkBAIC01NTksNiArNTE4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGdlbi0+Z2lfZnJhbWUgPSBmOworICAgIGYtPmZfZ2VuID0gKFB5T2JqZWN0ICopIGdlbjsKICAgICBQeV9JTkNSRUYoZi0+Zl9jb2RlKTsKICAgICBnZW4tPmdpX2NvZGUgPSAoUHlPYmplY3QgKikoZi0+Zl9jb2RlKTsKICAgICBnZW4tPmdpX3J1bm5pbmcgPSAwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9pdGVyb2JqZWN0LmMgYi9PYmplY3RzL2l0ZXJvYmplY3QuYwppbmRleCAzY2ZiZWFmLi43N2ZmODEwIDEwMDY0NAotLS0gYS9PYmplY3RzL2l0ZXJvYmplY3QuYworKysgYi9PYmplY3RzL2l0ZXJvYmplY3QuYwpAQCAtNCw3ICs0LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICBsb25nICAgICAgaXRfaW5kZXg7CisgICAgUHlfc3NpemVfdCBpdF9pbmRleDsKICAgICBQeU9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSBzZXFpdGVyb2JqZWN0OwogCkBAIC03Niw5ICs3NiwxNCBAQAogICAgIFB5X3NzaXplX3Qgc2Vxc2l6ZSwgbGVuOwogCiAgICAgaWYgKGl0LT5pdF9zZXEpIHsKLSAgICAgICAgc2Vxc2l6ZSA9IFB5U2VxdWVuY2VfU2l6ZShpdC0+aXRfc2VxKTsKLSAgICAgICAgaWYgKHNlcXNpemUgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNMZW4oaXQtPml0X3NlcSkpIHsKKyAgICAgICAgICAgIHNlcXNpemUgPSBQeVNlcXVlbmNlX1NpemUoaXQtPml0X3NlcSk7CisgICAgICAgICAgICBpZiAoc2Vxc2l6ZSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKyAgICAgICAgfQogICAgICAgICBsZW4gPSBzZXFzaXplIC0gaXQtPml0X2luZGV4OwogICAgICAgICBpZiAobGVuID49IDApCiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGxlbik7CmRpZmYgLS1naXQgYS9PYmplY3RzL2xpc3RvYmplY3QuYyBiL09iamVjdHMvbGlzdG9iamVjdC5jCmluZGV4IGFlMzY1NzcuLmZkNWE3MmEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbGlzdG9iamVjdC5jCisrKyBiL09iamVjdHMvbGlzdG9iamVjdC5jCkBAIC0yMTMsMTEgKzIxMywxMSBAQAogfQogCiBpbnQKLVB5TGlzdF9TZXRJdGVtKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLAotICAgICAgICAgICAgICAgcmVnaXN0ZXIgUHlPYmplY3QgKm5ld2l0ZW0pCitQeUxpc3RfU2V0SXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSwKKyAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXdpdGVtKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvbGRpdGVtOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqcDsKKyAgICBQeU9iamVjdCAqb2xkaXRlbTsKKyAgICBQeU9iamVjdCAqKnA7CiAgICAgaWYgKCFQeUxpc3RfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5X1hERUNSRUYobmV3aXRlbSk7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMzM4LDU3ICszMzgsNTcgQEAKIGxpc3RfcmVwcihQeUxpc3RPYmplY3QgKnYpCiB7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpzID0gTlVMTDsKLSAgICBfUHlBY2N1IGFjYzsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnNlcCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnM7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAKICAgICBpZiAoUHlfU0laRSh2KSA9PSAwKSB7CiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiW10iKTsKICAgICB9CiAKLSAgICBpZiAoc2VwID09IE5VTEwpIHsKLSAgICAgICAgc2VwID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiwgIik7Ci0gICAgICAgIGlmIChzZXAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIGkgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0Kil2KTsKICAgICBpZiAoaSAhPSAwKSB7CiAgICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJbLi4uXSIpIDogTlVMTDsKICAgICB9CiAKLSAgICBpZiAoX1B5QWNjdV9Jbml0KCZhY2MpKQotICAgICAgICBnb3RvIGVycm9yOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICAvKiAiWyIgKyAiMSIgKyAiLCAyIiAqIChsZW4gLSAxKSArICJdIiAqLworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gMSArIDEgKyAoMiArIDEpICogKFB5X1NJWkUodikgLSAxKSArIDE7CiAKLSAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIlsiKTsKLSAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJ1snKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIocyk7CiAKICAgICAvKiBEbyByZXByKCkgb24gZWFjaCBlbGVtZW50LiAgTm90ZSB0aGF0IHRoaXMgbWF5IG11dGF0ZSB0aGUgbGlzdCwKICAgICAgICBzbyBtdXN0IHJlZmV0Y2ggdGhlIGxpc3Qgc2l6ZSBvbiBlYWNoIGl0ZXJhdGlvbi4gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRSh2KTsgKytpKSB7CisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCAiLCAyKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBnZXR0aW5nIHRoZSByZXByIG9mIGEgbGlzdCIpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgcyA9IFB5T2JqZWN0X1JlcHIodi0+b2JfaXRlbVtpXSk7CiAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgICAgICBpZiAoaSA+IDAgJiYgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHNlcCkpCisgICAgICAgIGlmIChzID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCBzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIFB5X0NMRUFSKHMpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzKTsKICAgICB9Ci0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJdIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJ10nKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIocyk7CiAKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7Ci0gICAgcmV0dXJuIF9QeUFjY3VfRmluaXNoKCZhY2MpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogZXJyb3I6Ci0gICAgX1B5QWNjdV9EZXN0cm95KCZhY2MpOwotICAgIFB5X1hERUNSRUYocyk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKil2KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTY0NCw5ICs2NDQsMTQgQEAKICAgICBtZW1jcHkocmVjeWNsZSwgJml0ZW1baWxvd10sIHMpOwogCiAgICAgaWYgKGQgPCAwKSB7IC8qIERlbGV0ZSAtZCBpdGVtcyAqLwotICAgICAgICBtZW1tb3ZlKCZpdGVtW2loaWdoK2RdLCAmaXRlbVtpaGlnaF0sCi0gICAgICAgICAgICAoUHlfU0laRShhKSAtIGloaWdoKSpzaXplb2YoUHlPYmplY3QgKikpOwotICAgICAgICBsaXN0X3Jlc2l6ZShhLCBQeV9TSVpFKGEpICsgZCk7CisgICAgICAgIFB5X3NzaXplX3QgdGFpbDsKKyAgICAgICAgdGFpbCA9IChQeV9TSVpFKGEpIC0gaWhpZ2gpICogc2l6ZW9mKFB5T2JqZWN0ICopOworICAgICAgICBtZW1tb3ZlKCZpdGVtW2loaWdoK2RdLCAmaXRlbVtpaGlnaF0sIHRhaWwpOworICAgICAgICBpZiAobGlzdF9yZXNpemUoYSwgUHlfU0laRShhKSArIGQpIDwgMCkgeworICAgICAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaF0sICZpdGVtW2loaWdoK2RdLCB0YWlsKTsKKyAgICAgICAgICAgIG1lbWNweSgmaXRlbVtpbG93XSwgcmVjeWNsZSwgcyk7CisgICAgICAgICAgICBnb3RvIEVycm9yOworICAgICAgICB9CiAgICAgICAgIGl0ZW0gPSBhLT5vYl9pdGVtOwogICAgIH0KICAgICBlbHNlIGlmIChkID4gMCkgeyAvKiBJbnNlcnQgZCBpdGVtcyAqLwpAQCAtODI2LDcgKzgzMSw3IEBACiAgICAgaXRlcm5leHQgPSAqaXQtPm9iX3R5cGUtPnRwX2l0ZXJuZXh0OwogCiAgICAgLyogR3Vlc3MgYSByZXN1bHQgbGlzdCBzaXplLiAqLwotICAgIG4gPSBfUHlPYmplY3RfTGVuZ3RoSGludChiLCA4KTsKKyAgICBuID0gUHlPYmplY3RfTGVuZ3RoSGludChiLCA4KTsKICAgICBpZiAobiA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTg3MSw4ICs4NzYsMTAgQEAKICAgICB9CiAKICAgICAvKiBDdXQgYmFjayByZXN1bHQgbGlzdCBpZiBpbml0aWFsIGd1ZXNzIHdhcyB0b28gbGFyZ2UuICovCi0gICAgaWYgKFB5X1NJWkUoc2VsZikgPCBzZWxmLT5hbGxvY2F0ZWQpCi0gICAgICAgIGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpOyAgLyogc2hyaW5raW5nIGNhbid0IGZhaWwgKi8KKyAgICBpZiAoUHlfU0laRShzZWxmKSA8IHNlbGYtPmFsbG9jYXRlZCkgeworICAgICAgICBpZiAobGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICBQeV9ERUNSRUYoaXQpOwogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtOTI1LDE3ICs5MzIsMTcgQEAKICAgICB2ID0gc2VsZi0+b2JfaXRlbVtpXTsKICAgICBpZiAoaSA9PSBQeV9TSVpFKHNlbGYpIC0gMSkgewogICAgICAgICBzdGF0dXMgPSBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpIC0gMSk7Ci0gICAgICAgIGFzc2VydChzdGF0dXMgPj0gMCk7Ci0gICAgICAgIHJldHVybiB2OyAvKiBhbmQgdiBub3cgb3ducyB0aGUgcmVmZXJlbmNlIHRoZSBsaXN0IGhhZCAqLworICAgICAgICBpZiAoc3RhdHVzID49IDApCisgICAgICAgICAgICByZXR1cm4gdjsgLyogYW5kIHYgbm93IG93bnMgdGhlIHJlZmVyZW5jZSB0aGUgbGlzdCBoYWQgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X0lOQ1JFRih2KTsKICAgICBzdGF0dXMgPSBsaXN0X2Fzc19zbGljZShzZWxmLCBpLCBpKzEsIChQeU9iamVjdCAqKU5VTEwpOwotICAgIGFzc2VydChzdGF0dXMgPj0gMCk7Ci0gICAgLyogVXNlIHN0YXR1cywgc28gdGhhdCBpbiBhIHJlbGVhc2UgYnVpbGQgY29tcGlsZXJzIGRvbid0Ci0gICAgICogY29tcGxhaW4gYWJvdXQgdGhlIHVudXNlZCBuYW1lLgotICAgICAqLwotICAgICh2b2lkKSBzdGF0dXM7Ci0KKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gdjsKIH0KIApAQCAtMTA1MSw5ICsxMDU4LDkgQEAKIHN0YXRpYyBpbnQKIGJpbmFyeXNvcnQoc29ydHNsaWNlIGxvLCBQeU9iamVjdCAqKmhpLCBQeU9iamVjdCAqKnN0YXJ0KQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgazsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKmwsICoqcCwgKipyOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpwaXZvdDsKKyAgICBQeV9zc2l6ZV90IGs7CisgICAgUHlPYmplY3QgKipsLCAqKnAsICoqcjsKKyAgICBQeU9iamVjdCAqcGl2b3Q7CiAKICAgICBhc3NlcnQobG8ua2V5cyA8PSBzdGFydCAmJiBzdGFydCA8PSBoaSk7CiAgICAgLyogYXNzZXJ0IFtsbywgc3RhcnQpIGlzIHNvcnRlZCAqLwpAQCAtMjQ3Niw2ICsyNDgzLDcgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICoqZ2FyYmFnZTsKICAgICAgICAgICAgIHNpemVfdCBjdXI7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgICAgICBpbnQgcmVzOwogCiAgICAgICAgICAgICBpZiAoc2xpY2VsZW5ndGggPD0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTI1MjYsMTQgKzI1MzQsMTQgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtPSBzbGljZWxlbmd0aDsKLSAgICAgICAgICAgIGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpOworICAgICAgICAgICAgcmVzID0gbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSk7CiAKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbGljZWxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGdhcmJhZ2VbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlNZW1fRlJFRShnYXJiYWdlKTsKIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLyogYXNzaWduIHNsaWNlICovCkBAIC0yNjYwLDcgKzI2NjgsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIGxvbmcgaXRfaW5kZXg7CisgICAgUHlfc3NpemVfdCBpdF9pbmRleDsKICAgICBQeUxpc3RPYmplY3QgKml0X3NlcTsgLyogU2V0IHRvIE5VTEwgd2hlbiBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KIH0gbGlzdGl0ZXJvYmplY3Q7CiAKQEAgLTI3OTcsNyArMjgwNSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogbGlzdGl0ZXJfc2V0c3RhdGUobGlzdGl0ZXJvYmplY3QgKml0LCBQeU9iamVjdCAqc3RhdGUpCiB7Ci0gICAgbG9uZyBpbmRleCA9IFB5TG9uZ19Bc0xvbmcoc3RhdGUpOworICAgIFB5X3NzaXplX3QgaW5kZXggPSBQeUxvbmdfQXNTc2l6ZV90KHN0YXRlKTsKICAgICBpZiAoaW5kZXggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGl0LT5pdF9zZXEgIT0gTlVMTCkgewpAQCAtMjk2MCw3ICsyOTY4LDcgQEAKICAgICBpZiAoZm9yd2FyZCkgewogICAgICAgICBsaXN0aXRlcm9iamVjdCAqaXQgPSAobGlzdGl0ZXJvYmplY3QgKilfaXQ7CiAgICAgICAgIGlmIChpdC0+aXRfc2VxKQotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTylsIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKKyAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbiIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+aXRfc2VxLCBpdC0+aXRfaW5kZXgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGxpc3RyZXZpdGVyb2JqZWN0ICppdCA9IChsaXN0cmV2aXRlcm9iamVjdCAqKV9pdDsKZGlmZiAtLWdpdCBhL09iamVjdHMvbG9uZ29iamVjdC5jIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKaW5kZXggMjI0NWVjZS4uNzAzNmMwZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9sb25nb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKQEAgLTE3LDcgKzE3LDggQEAKICNlbmRpZgogCiAvKiBjb252ZXJ0IGEgUHlMb25nIG9mIHNpemUgMSwgMCBvciAtMSB0byBhbiBzZGlnaXQgKi8KLSNkZWZpbmUgTUVESVVNX1ZBTFVFKHgpIChQeV9TSVpFKHgpIDwgMCA/IC0oc2RpZ2l0KSh4KS0+b2JfZGlnaXRbMF0gOiAgIFwKKyNkZWZpbmUgTUVESVVNX1ZBTFVFKHgpIChhc3NlcnQoLTEgPD0gUHlfU0laRSh4KSAmJiBQeV9TSVpFKHgpIDw9IDEpLCAgIFwKKyAgICAgICAgIFB5X1NJWkUoeCkgPCAwID8gLShzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSA6ICAgXAogICAgICAgICAgICAgIChQeV9TSVpFKHgpID09IDAgPyAoc2RpZ2l0KTAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAoc2RpZ2l0KSh4KS0+b2JfZGlnaXRbMF0pKQogI2RlZmluZSBBQlMoeCkgKCh4KSA8IDAgPyAtKHgpIDogKHgpKQpAQCAtNzIsMTEgKzczLDIxIEBACiAKIC8qIElmIGEgZnJlc2hseS1hbGxvY2F0ZWQgaW50IGlzIGFscmVhZHkgc2hhcmVkLCBpdCBtdXN0CiAgICBiZSBhIHNtYWxsIGludGVnZXIsIHNvIG5lZ2F0aW5nIGl0IG11c3QgZ28gdG8gUHlMb25nX0Zyb21Mb25nICovCi0jZGVmaW5lIE5FR0FURSh4KSBcCi0gICAgZG8gaWYgKFB5X1JFRkNOVCh4KSA9PSAxKSBQeV9TSVpFKHgpID0gLVB5X1NJWkUoeCk7ICBcCi0gICAgICAgZWxzZSB7IFB5T2JqZWN0KiB0bXA9UHlMb25nX0Zyb21Mb25nKC1NRURJVU1fVkFMVUUoeCkpOyAgXAotICAgICAgICAgICBQeV9ERUNSRUYoeCk7ICh4KSA9IChQeUxvbmdPYmplY3QqKXRtcDsgfSAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSgwKQorUHlfTE9DQUxfSU5MSU5FKHZvaWQpCitfUHlMb25nX05lZ2F0ZShQeUxvbmdPYmplY3QgKip4X3ApCit7CisgICAgUHlMb25nT2JqZWN0ICp4OworCisgICAgeCA9IChQeUxvbmdPYmplY3QgKikqeF9wOworICAgIGlmIChQeV9SRUZDTlQoeCkgPT0gMSkgeworICAgICAgICBQeV9TSVpFKHgpID0gLVB5X1NJWkUoeCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqeF9wID0gKFB5TG9uZ09iamVjdCAqKVB5TG9uZ19Gcm9tTG9uZygtTUVESVVNX1ZBTFVFKHgpKTsKKyAgICBQeV9ERUNSRUYoeCk7Cit9CisKIC8qIEZvciBpbnQgbXVsdGlwbGljYXRpb24sIHVzZSB0aGUgTyhOKioyKSBzY2hvb2wgYWxnb3JpdGhtIHVubGVzcwogICogYm90aCBvcGVyYW5kcyBjb250YWluIG1vcmUgdGhhbiBLQVJBVFNVQkFfQ1VUT0ZGIGRpZ2l0cyAodGhpcwogICogYmVpbmcgYW4gaW50ZXJuYWwgUHl0aG9uIGludCBkaWdpdCwgaW4gYmFzZSBCQVNFKS4KQEAgLTkxLDExICsxMDIsNiBAQAogICovCiAjZGVmaW5lIEZJVkVBUllfQ1VUT0ZGIDgKIAotI3VuZGVmIE1JTgotI3VuZGVmIE1BWAotI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKLSNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPiAoeSkgPyAoeSkgOiAoeCkpCi0KICNkZWZpbmUgU0lHQ0hFQ0soUHlUcnlCbG9jaykgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSBQeVRyeUJsb2NrICAgIFwKQEAgLTEwNiw3ICsxMTIsNyBAQAogICAgb2YgdGhlIGFsZ29yaXRobXMgdXNlZCwgdGhpcyBjb3VsZCBzYXZlIGF0IG1vc3QgYmUgb25lIHdvcmQgYW55d2F5LiAqLwogCiBzdGF0aWMgUHlMb25nT2JqZWN0ICoKLWxvbmdfbm9ybWFsaXplKHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdikKK2xvbmdfbm9ybWFsaXplKFB5TG9uZ09iamVjdCAqdikKIHsKICAgICBQeV9zc2l6ZV90IGogPSBBQlMoUHlfU0laRSh2KSk7CiAgICAgUHlfc3NpemVfdCBpID0gajsKQEAgLTE1NSw2ICsxNjEsMTUgQEAKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICAvKiBJc3N1ZSAjMTc1NzY6IHdhcm4gaWYgJ3Jlc3VsdCcgbm90IG9mIGV4YWN0IHR5cGUgaW50LiAqLworICAgIGlmIChQeUVycl9XYXJuRm9ybWF0KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywgMSwKKyAgICAgICAgICAgICJfX2ludF9fIHJldHVybmVkIG5vbi1pbnQgKHR5cGUgJS4yMDBzKS4gICIKKyAgICAgICAgICAgICJUaGUgYWJpbGl0eSB0byByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgYSBzdHJpY3Qgc3ViY2xhc3Mgb2YgaW50ICIKKyAgICAgICAgICAgICJpcyBkZXByZWNhdGVkLCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBQeXRob24uIiwKKyAgICAgICAgICAgIHJlc3VsdC0+b2JfdHlwZS0+dHBfbmFtZSkpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gKFB5TG9uZ09iamVjdCAqKXJlc3VsdDsKIH0KIApAQCAtMzc3LDcgKzM5Miw3IEBACiBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKnZ2LCBpbnQgKm92ZXJmbG93KQogewogICAgIC8qIFRoaXMgdmVyc2lvbiBieSBUaW0gUGV0ZXJzICovCi0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHgsIHByZXY7CiAgICAgbG9uZyByZXM7CiAgICAgUHlfc3NpemVfdCBpOwpAQCAtNDg5LDcgKzUwNCw3IEBACiAKIFB5X3NzaXplX3QKIFB5TG9uZ19Bc1NzaXplX3QoUHlPYmplY3QgKnZ2KSB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICBzaXplX3QgeCwgcHJldjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpZ247CkBAIC01NDUsNyArNTYwLDcgQEAKIHVuc2lnbmVkIGxvbmcKIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHgsIHByZXY7CiAgICAgUHlfc3NpemVfdCBpOwogCkBAIC01NzUsNyArNTkwLDcgQEAKICAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgfCB2LT5vYl9kaWdpdFtpXTsKICAgICAgICAgaWYgKCh4ID4+IFB5TG9uZ19TSElGVCkgIT0gcHJldikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gQyB1bnNpZ25lZCBsb25nIik7CiAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC0xOwogICAgICAgICB9CkBAIC01ODksNyArNjA0LDcgQEAKIHNpemVfdAogUHlMb25nX0FzU2l6ZV90KFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHNpemVfdCB4LCBwcmV2OwogICAgIFB5X3NzaXplX3QgaTsKIApAQCAtNjMyLDcgKzY0Nyw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZwogX1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgbG9uZyB4OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTY2MCw3ICs2NzUsNyBAQAogfQogCiB1bnNpZ25lZCBsb25nCi1QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soUHlPYmplY3QgKm9wKQogewogICAgIFB5TG9uZ09iamVjdCAqbG87CiAgICAgdW5zaWduZWQgbG9uZyB2YWw7CkBAIC05NzUsOSArOTkwLDYgQEAKIFB5TG9uZ19Gcm9tVm9pZFB0cih2b2lkICpwKQogewogI2lmIFNJWkVPRl9WT0lEX1AgPD0gU0laRU9GX0xPTkcKLSAgICAvKiBzcGVjaWFsLWNhc2UgbnVsbCBwb2ludGVyICovCi0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykoUHlfdWludHB0cl90KXApOwogI2Vsc2UKIApAQCAtOTg3LDkgKzk5OSw2IEBACiAjaWYgU0laRU9GX0xPTkdfTE9ORyA8IFNJWkVPRl9WT0lEX1AKICMgICBlcnJvciAiUHlMb25nX0Zyb21Wb2lkUHRyOiBzaXplb2YoUFlfTE9OR19MT05HKSA8IHNpemVvZih2b2lkKikiCiAjZW5kaWYKLSAgICAvKiBzcGVjaWFsLWNhc2UgbnVsbCBwb2ludGVyICovCi0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykoUHlfdWludHB0cl90KXApOwogI2VuZGlmIC8qIFNJWkVPRl9WT0lEX1AgPD0gU0laRU9GX0xPTkcgKi8KIApAQCAtMTAzNSw3ICsxMDQ0LDYgQEAKICAqIHJld3JpdHRlbiB0byB1c2UgdGhlIG5ld2VyIFB5TG9uZ197QXMsRnJvbX1CeXRlQXJyYXkgQVBJLgogICovCiAKLSNkZWZpbmUgSVNfTElUVExFX0VORElBTiAoaW50KSoodW5zaWduZWQgY2hhciopJm9uZQogI2RlZmluZSBQWV9BQlNfTExPTkdfTUlOICgwLSh1bnNpZ25lZCBQWV9MT05HX0xPTkcpUFlfTExPTkdfTUlOKQogCiAvKiBDcmVhdGUgYSBuZXcgaW50IG9iamVjdCBmcm9tIGEgQyBQWV9MT05HX0xPTkcgaW50LiAqLwpAQCAtMTE4OCw3ICsxMTk2LDYgQEAKIHsKICAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgUFlfTE9OR19MT05HIGJ5dGVzOwotICAgIGludCBvbmUgPSAxOwogICAgIGludCByZXM7CiAgICAgaW50IGRvX2RlY3JlZiA9IDA7IC8qIGlmIG5iX2ludCB3YXMgY2FsbGVkICovCiAKQEAgLTEyMjAsNyArMTIyNyw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJlcyA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKXYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIElTX0xJVFRMRV9FTkRJQU4sIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIFBZX0xJVFRMRV9FTkRJQU4sIDEpOwogICAgIH0KICAgICBpZiAoZG9fZGVjcmVmKSB7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKQEAgLTEyNDEsNyArMTI0OCw2IEBACiB7CiAgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyBieXRlczsKLSAgICBpbnQgb25lID0gMTsKICAgICBpbnQgcmVzOwogCiAgICAgaWYgKHZ2ID09IE5VTEwpIHsKQEAgLTEyNjAsNyArMTI2Niw3IEBACiAgICAgfQogCiAgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBQWV9MSVRUTEVfRU5ESUFOLCAwKTsKIAogICAgIC8qIFBsYW4gOSBjYW4ndCBoYW5kbGUgUFlfTE9OR19MT05HIGluID8gOiBleHByZXNzaW9ucyAqLwogICAgIGlmIChyZXMgPCAwKQpAQCAtMTI3NSw3ICsxMjgxLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBQWV9MT05HX0xPTkcKIF9QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzayhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgeDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpZ247CkBAIC0xMzAzLDcgKzEzMDksNyBAQAogfQogCiB1bnNpZ25lZCBQWV9MT05HX0xPTkcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICpvcCkKIHsKICAgICBQeUxvbmdPYmplY3QgKmxvOwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB2YWw7CkBAIC0xMzI1LDcgKzEzMzEsNiBAQAogICAgIFB5X0RFQ1JFRihsbyk7CiAgICAgcmV0dXJuIHZhbDsKIH0KLSN1bmRlZiBJU19MSVRUTEVfRU5ESUFOCiAKIC8qIEdldCBhIEMgbG9uZyBsb25nIGludCBmcm9tIGFuIGludCBvYmplY3Qgb3IgYW55IG9iamVjdCB0aGF0IGhhcyBhbgogICAgX19pbnRfXyBtZXRob2QuCkBAIC0xMzQxLDcgKzEzNDYsNyBAQAogUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCiB7CiAgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB4LCBwcmV2OwogICAgIFBZX0xPTkdfTE9ORyByZXM7CiAgICAgUHlfc3NpemVfdCBpOwpAQCAtMTYwNiw3ICsxNjExLDcgQEAKICAgICAqLwogICAgIGlmIChzaXplX2EgPiBQWV9TU0laRV9UX01BWCAvIFB5TG9uZ19TSElGVCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGlzIHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIC8qIHRoZSBleHByZXNzaW9uIHNpemVfYSAqIFB5TG9uZ19TSElGVCBpcyBub3cgc2FmZSBmcm9tIG92ZXJmbG93ICovCkBAIC0xNjc2LDcgKzE2ODEsNiBAQAogICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHAgPSAoVFlQRSopUHlVbmljb2RlX0RBVEEoc3RyKSArIHN0cmxlbjsgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAqcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgLyogcG91dFswXSB0aHJvdWdoIHBvdXRbc2l6ZS0yXSBjb250cmlidXRlIGV4YWN0bHkgICAgICAgICAgICBcCiAgICAgICAgICAgIF9QeUxvbmdfREVDSU1BTF9TSElGVCBkaWdpdHMgZWFjaCAqLyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBmb3IgKGk9MDsgaSA8IHNpemUgLSAxOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE3NDksNyArMTc1Myw3IEBACiBsb25nX2Zvcm1hdF9iaW5hcnkoUHlPYmplY3QgKmFhLCBpbnQgYmFzZSwgaW50IGFsdGVybmF0ZSwKICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnBfb3V0cHV0LCBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICphID0gKFB5TG9uZ09iamVjdCAqKWFhOworICAgIFB5TG9uZ09iamVjdCAqYSA9IChQeUxvbmdPYmplY3QgKilhYTsKICAgICBQeU9iamVjdCAqdjsKICAgICBQeV9zc2l6ZV90IHN6OwogICAgIFB5X3NzaXplX3Qgc2l6ZV9hOwpAQCAtMTc5MCw3ICsxNzk0LDcgQEAKICAgICAgICAgLyogRW5zdXJlIG92ZXJmbG93IGRvZXNuJ3Qgb2NjdXIgZHVyaW5nIGNvbXB1dGF0aW9uIG9mIHN6LiAqLwogICAgICAgICBpZiAoc2l6ZV9hID4gKFBZX1NTSVpFX1RfTUFYIC0gMykgLyBQeUxvbmdfU0hJRlQpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgaXMgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIHNpemVfYV9pbl9iaXRzID0gKHNpemVfYSAtIDEpICogUHlMb25nX1NISUZUICsKQEAgLTE5NDYsMTAgKzE5NTAsMTAgQEAKICAqIHN0cmluZyBjaGFyYWN0ZXJzLgogICovCiBzdGF0aWMgUHlMb25nT2JqZWN0ICoKLWxvbmdfZnJvbV9iaW5hcnlfYmFzZShjaGFyICoqc3RyLCBpbnQgYmFzZSkKK2xvbmdfZnJvbV9iaW5hcnlfYmFzZShjb25zdCBjaGFyICoqc3RyLCBpbnQgYmFzZSkKIHsKLSAgICBjaGFyICpwID0gKnN0cjsKLSAgICBjaGFyICpzdGFydCA9IHA7CisgICAgY29uc3QgY2hhciAqcCA9ICpzdHI7CisgICAgY29uc3QgY2hhciAqc3RhcnQgPSBwOwogICAgIGludCBiaXRzX3Blcl9jaGFyOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeUxvbmdPYmplY3QgKno7CkBAIC0yMDE0LDEwICsyMDE4LDEwIEBACiAgKiBJZiB1bnN1Y2Nlc3NmdWwsIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4KICAqLwogUHlPYmplY3QgKgotUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCitQeUxvbmdfRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNoYXIgKipwZW5kLCBpbnQgYmFzZSkKIHsKICAgICBpbnQgc2lnbiA9IDEsIGVycm9yX2lmX25vbnplcm8gPSAwOwotICAgIGNoYXIgKnN0YXJ0LCAqb3JpZ19zdHIgPSBzdHI7CisgICAgY29uc3QgY2hhciAqc3RhcnQsICpvcmlnX3N0ciA9IHN0cjsKICAgICBQeUxvbmdPYmplY3QgKnogPSBOVUxMOwogICAgIFB5T2JqZWN0ICpzdHJvYmo7CiAgICAgUHlfc3NpemVfdCBzbGVuOwpAQCAtMjE0NiwxMyArMjE1MCwxMyBAQAoganVzdCAxIGRpZ2l0IGF0IHRoZSBzdGFydCwgc28gdGhhdCB0aGUgY29weWluZyBjb2RlIHdhcyBleGVyY2lzZWQgZm9yIGV2ZXJ5CiBkaWdpdCBiZXlvbmQgdGhlIGZpcnN0LgogKioqLwotICAgICAgICByZWdpc3RlciB0d29kaWdpdHMgYzsgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCisgICAgICAgIHR3b2RpZ2l0cyBjOyAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KICAgICAgICAgUHlfc3NpemVfdCBzaXplX3o7CiAgICAgICAgIGludCBpOwogICAgICAgICBpbnQgY29udndpZHRoOwogICAgICAgICB0d29kaWdpdHMgY29udm11bHRtYXgsIGNvbnZtdWx0OwogICAgICAgICBkaWdpdCAqcHosICpwenN0b3A7Ci0gICAgICAgIGNoYXIqIHNjYW47CisgICAgICAgIGNvbnN0IGNoYXIqIHNjYW47CiAKICAgICAgICAgc3RhdGljIGRvdWJsZSBsb2dfYmFzZV9CQVNFWzM3XSA9IHswLjBlMCx9OwogICAgICAgICBzdGF0aWMgaW50IGNvbnZ3aWR0aF9iYXNlWzM3XSA9IHswLH07CkBAIC0yMjgwLDE5ICsyMjg0LDE5IEBACiAgICAgaWYgKHogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHBlbmQgIT0gTlVMTCkKLSAgICAgICAgKnBlbmQgPSBzdHI7CisgICAgICAgICpwZW5kID0gKGNoYXIgKilzdHI7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSB6OwogCiAgIG9uRXJyb3I6CiAgICAgaWYgKHBlbmQgIT0gTlVMTCkKLSAgICAgICAgKnBlbmQgPSBzdHI7CisgICAgICAgICpwZW5kID0gKGNoYXIgKilzdHI7CiAgICAgUHlfWERFQ1JFRih6KTsKICAgICBzbGVuID0gc3RybGVuKG9yaWdfc3RyKSA8IDIwMCA/IHN0cmxlbihvcmlnX3N0cikgOiAyMDA7CiAgICAgc3Ryb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKG9yaWdfc3RyLCBzbGVuKTsKICAgICBpZiAoc3Ryb2JqID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlLjIwMFIiLAogICAgICAgICAgICAgICAgICBiYXNlLCBzdHJvYmopOwogICAgIFB5X0RFQ1JFRihzdHJvYmopOwogICAgIHJldHVybiBOVUxMOwpAQCAtMjMxNiw3ICsyMzIwLDcgQEAKICAgICBzdHJvYmogPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIFB5X01JTihsZW4sIDIwMCkpOwogICAgIGlmIChzdHJvYmogIT0gTlVMTCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJVIiLAorICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlLjIwMFIiLAogICAgICAgICAgICAgICAgICAgICAgYmFzZSwgc3Ryb2JqKTsKICAgICAgICAgUHlfREVDUkVGKHN0cm9iaik7CiAgICAgfQpAQCAtMjMzNyw3ICsyMzQxLDcgQEAKIFB5T2JqZWN0ICoKIFB5TG9uZ19Gcm9tVW5pY29kZU9iamVjdChQeU9iamVjdCAqdSwgaW50IGJhc2UpCiB7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCwgKmFzY2lpZGlnLCAqc3Ryb2JqOworICAgIFB5T2JqZWN0ICpyZXN1bHQsICphc2NpaWRpZzsKICAgICBjaGFyICpidWZmZXIsICplbmQgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgYnVmbGVuOwogCkBAIC0yMzU5LDEzICsyMzYzLDkgQEAKICAgICAgICAgUHlfREVDUkVGKGFzY2lpZGlnKTsKICAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwogICAgIH0KLSAgICBzdHJvYmogPSBQeVNlcXVlbmNlX0dldFNsaWNlKHUsIDAsIDIwMCk7Ci0gICAgaWYgKHN0cm9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlUiIsCi0gICAgICAgICAgICAgICAgICAgICBiYXNlLCBzdHJvYmopOwotICAgICAgICBQeV9ERUNSRUYoc3Ryb2JqKTsKLSAgICB9CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJS4yMDBSIiwKKyAgICAgICAgICAgICAgICAgYmFzZSwgdSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI0MTksMTAgKzI0MTksMjEgQEAKICAgICAgICBUaGUgcXVvdGllbnQgeiBoYXMgdGhlIHNpZ24gb2YgYSpiOwogICAgICAgIHRoZSByZW1haW5kZXIgciBoYXMgdGhlIHNpZ24gb2YgYSwKICAgICAgICBzbyBhID0gYip6ICsgci4gKi8KLSAgICBpZiAoKFB5X1NJWkUoYSkgPCAwKSAhPSAoUHlfU0laRShiKSA8IDApKQotICAgICAgICBORUdBVEUoeik7Ci0gICAgaWYgKFB5X1NJWkUoYSkgPCAwICYmIFB5X1NJWkUoKnByZW0pICE9IDApCi0gICAgICAgIE5FR0FURSgqcHJlbSk7CisgICAgaWYgKChQeV9TSVpFKGEpIDwgMCkgIT0gKFB5X1NJWkUoYikgPCAwKSkgeworICAgICAgICBfUHlMb25nX05lZ2F0ZSgmeik7CisgICAgICAgIGlmICh6ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKCpwcmVtKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoUHlfU0laRShhKSA8IDAgJiYgUHlfU0laRSgqcHJlbSkgIT0gMCkgeworICAgICAgICBfUHlMb25nX05lZ2F0ZShwcmVtKTsKKyAgICAgICAgaWYgKCpwcmVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih6KTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCpwcmVtKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KICAgICAqcGRpdiA9IG1heWJlX3NtYWxsX2xvbmcoeik7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yNjk4LDcgKzI3MDksNyBAQAogICAgIHggPSBfUHlMb25nX0ZyZXhwKChQeUxvbmdPYmplY3QgKil2LCAmZXhwb25lbnQpOwogICAgIGlmICgoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHx8IGV4cG9uZW50ID4gREJMX01BWF9FWFApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAibG9uZyBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gZmxvYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gZmxvYXQiKTsKICAgICAgICAgcmV0dXJuIC0xLjA7CiAgICAgfQogICAgIHJldHVybiBsZGV4cCh4LCAoaW50KWV4cG9uZW50KTsKQEAgLTI5MTgsOCArMjkyOSwxMSBAQAogICAgICAgICBib3Jyb3cgJj0gMTsgLyogS2VlcCBvbmx5IG9uZSBzaWduIGJpdCAqLwogICAgIH0KICAgICBhc3NlcnQoYm9ycm93ID09IDApOwotICAgIGlmIChzaWduIDwgMCkKLSAgICAgICAgTkVHQVRFKHopOworICAgIGlmIChzaWduIDwgMCkgeworICAgICAgICBfUHlMb25nX05lZ2F0ZSgmeik7CisgICAgICAgIGlmICh6ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIGxvbmdfbm9ybWFsaXplKHopOwogfQogCkBAIC0zMDg2LDcgKzMxMDAsNyBAQAogICAgIFB5X3NzaXplX3Qgc2l6ZV9sbywgc2l6ZV9oaTsKICAgICBjb25zdCBQeV9zc2l6ZV90IHNpemVfbiA9IEFCUyhQeV9TSVpFKG4pKTsKIAotICAgIHNpemVfbG8gPSBNSU4oc2l6ZV9uLCBzaXplKTsKKyAgICBzaXplX2xvID0gUHlfTUlOKHNpemVfbiwgc2l6ZSk7CiAgICAgc2l6ZV9oaSA9IHNpemVfbiAtIHNpemVfbG87CiAKICAgICBpZiAoKGhpID0gX1B5TG9uZ19OZXcoc2l6ZV9oaSkpID09IE5VTEwpCkBAIC0zMzU3LDcgKzMzNzEsNyBAQAogICAgIG5iZG9uZSA9IDA7CiAgICAgd2hpbGUgKGJzaXplID4gMCkgewogICAgICAgICBQeUxvbmdPYmplY3QgKnByb2R1Y3Q7Ci0gICAgICAgIGNvbnN0IFB5X3NzaXplX3QgbmJ0b3VzZSA9IE1JTihic2l6ZSwgYXNpemUpOworICAgICAgICBjb25zdCBQeV9zc2l6ZV90IG5idG91c2UgPSBQeV9NSU4oYnNpemUsIGFzaXplKTsKIAogICAgICAgICAvKiBNdWx0aXBseSB0aGUgbmV4dCBzbGljZSBvZiBiIGJ5IGEuICovCiAgICAgICAgIG1lbWNweShic2xpY2UtPm9iX2RpZ2l0LCBiLT5vYl9kaWdpdCArIG5iZG9uZSwKQEAgLTM0MTAsOCArMzQyNCwxMSBAQAogCiAgICAgeiA9IGtfbXVsKGEsIGIpOwogICAgIC8qIE5lZ2F0ZSBpZiBleGFjdGx5IG9uZSBvZiB0aGUgaW5wdXRzIGlzIG5lZ2F0aXZlLiAqLwotICAgIGlmICgoKFB5X1NJWkUoYSkgXiBQeV9TSVpFKGIpKSA8IDApICYmIHopCi0gICAgICAgIE5FR0FURSh6KTsKKyAgICBpZiAoKChQeV9TSVpFKGEpIF4gUHlfU0laRShiKSkgPCAwKSAmJiB6KSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gKFB5T2JqZWN0ICopejsKIH0KIApAQCAtMzY0OCw3ICszNjY1LDcgQEAKICAgICAgICAgZ290byB1bmRlcmZsb3dfb3JfemVybzsKIAogICAgIC8qIENob29zZSB2YWx1ZSBmb3Igc2hpZnQ7IHNlZSBjb21tZW50cyBmb3Igc3RlcCAxIGFib3ZlLiAqLwotICAgIHNoaWZ0ID0gTUFYKGRpZmYsIERCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRyAtIDI7CisgICAgc2hpZnQgPSBQeV9NQVgoZGlmZiwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMjsKIAogICAgIGluZXhhY3QgPSAwOwogCkBAIC0zNzE5LDcgKzM3MzYsNyBAQAogICAgIHhfYml0cyA9ICh4X3NpemUtMSkqUHlMb25nX1NISUZUK2JpdHNfaW5fZGlnaXQoeC0+b2JfZGlnaXRbeF9zaXplLTFdKTsKIAogICAgIC8qIFRoZSBudW1iZXIgb2YgZXh0cmEgYml0cyB0aGF0IGhhdmUgdG8gYmUgcm91bmRlZCBhd2F5LiAqLwotICAgIGV4dHJhX2JpdHMgPSBNQVgoeF9iaXRzLCBEQkxfTUlOX0VYUCAtIHNoaWZ0KSAtIERCTF9NQU5UX0RJRzsKKyAgICBleHRyYV9iaXRzID0gUHlfTUFYKHhfYml0cywgREJMX01JTl9FWFAgLSBzaGlmdCkgLSBEQkxfTUFOVF9ESUc7CiAgICAgYXNzZXJ0KGV4dHJhX2JpdHMgPT0gMiB8fCBleHRyYV9iaXRzID09IDMpOwogCiAgICAgLyogUm91bmQgYnkgZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZSBsb3cgZGlnaXQgb2YgeC4gKi8KQEAgLTM4NTgsNyArMzg3NSw5IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoYyk7CiAgICAgICAgICAgICBjID0gdGVtcDsKICAgICAgICAgICAgIHRlbXAgPSBOVUxMOwotICAgICAgICAgICAgTkVHQVRFKGMpOworICAgICAgICAgICAgX1B5TG9uZ19OZWdhdGUoJmMpOworICAgICAgICAgICAgaWYgKGMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwogICAgICAgICB9CiAKICAgICAgICAgLyogaWYgbW9kdWx1cyA9PSAxOgpAQCAtMzk2NCwxMCArMzk4Myw3IEBACiAgICAgZ290byBEb25lOwogCiAgIEVycm9yOgotICAgIGlmICh6ICE9IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHopOwotICAgICAgICB6ID0gTlVMTDsKLSAgICB9CisgICAgUHlfQ0xFQVIoeik7CiAgICAgLyogZmFsbCB0aHJvdWdoICovCiAgIERvbmU6CiAgICAgaWYgKFB5X1NJWkUoYikgPiBGSVZFQVJZX0NVVE9GRikgewpAQCAtNDA5NywxMCArNDExMywxMCBAQAogCiAgICAgc2hpZnRieSA9IFB5TG9uZ19Bc1NzaXplX3QoKFB5T2JqZWN0ICopYik7CiAgICAgaWYgKHNoaWZ0YnkgPT0gLTFMICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2hpZnRieSA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJuZWdhdGl2ZSBzaGlmdCBjb3VudCIpOwotICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIC8qIHdvcmRzaGlmdCwgcmVtc2hpZnQgPSBkaXZtb2Qoc2hpZnRieSwgUHlMb25nX1NISUZUKSAqLwogICAgIHdvcmRzaGlmdCA9IHNoaWZ0YnkgLyBQeUxvbmdfU0hJRlQ7CkBAIC00MTEyLDkgKzQxMjgsMTEgQEAKICAgICAgICAgKytuZXdzaXplOwogICAgIHogPSBfUHlMb25nX05ldyhuZXdzaXplKTsKICAgICBpZiAoeiA9PSBOVUxMKQotICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKLSAgICBpZiAoUHlfU0laRShhKSA8IDApCi0gICAgICAgIE5FR0FURSh6KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5X1NJWkUoYSkgPCAwKSB7CisgICAgICAgIGFzc2VydChQeV9SRUZDTlQoeikgPT0gMSk7CisgICAgICAgIFB5X1NJWkUoeikgPSAtUHlfU0laRSh6KTsKKyAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IHdvcmRzaGlmdDsgaSsrKQogICAgICAgICB6LT5vYl9kaWdpdFtpXSA9IDA7CiAgICAgYWNjdW0gPSAwOwpAQCAtNDEyOCw3ICs0MTQ2LDYgQEAKICAgICBlbHNlCiAgICAgICAgIGFzc2VydCghYWNjdW0pOwogICAgIHogPSBsb25nX25vcm1hbGl6ZSh6KTsKLSAgbHNoaWZ0X2Vycm9yOgogICAgIHJldHVybiAoUHlPYmplY3QgKikgbWF5YmVfc21hbGxfbG9uZyh6KTsKIH0KIApAQCAtNDE1Myw3ICs0MTcwLDcgQEAKIAogc3RhdGljIFB5T2JqZWN0ICoKIGxvbmdfYml0d2lzZShQeUxvbmdPYmplY3QgKmEsCi0gICAgICAgICAgICAgaW50IG9wLCAgLyogJyYnLCAnfCcsICdeJyAqLworICAgICAgICAgICAgIGNoYXIgb3AsICAvKiAnJicsICd8JywgJ14nICovCiAgICAgICAgICAgICAgUHlMb25nT2JqZWN0ICpiKQogewogICAgIGludCBuZWdhLCBuZWdiLCBuZWd6OwpAQCAtNDMyOCw4ICs0MzQ1LDcgQEAKIGxvbmdfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T2JqZWN0ICpvYmFzZSA9IE5VTEwsICp4ID0gTlVMTDsKLSAgICBsb25nIGJhc2U7Ci0gICAgaW50IG92ZXJmbG93OworICAgIFB5X3NzaXplX3QgYmFzZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7IngiLCAiYmFzZSIsIDB9OwogCiAgICAgaWYgKHR5cGUgIT0gJlB5TG9uZ19UeXBlKQpAQCAtNDM0OCwxMCArNDM2NCwxMCBAQAogICAgIGlmIChvYmFzZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlOdW1iZXJfTG9uZyh4KTsKIAotICAgIGJhc2UgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cob2Jhc2UsICZvdmVyZmxvdyk7CisgICAgYmFzZSA9IFB5TnVtYmVyX0FzU3NpemVfdChvYmFzZSwgTlVMTCk7CiAgICAgaWYgKGJhc2UgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKG92ZXJmbG93IHx8IChiYXNlICE9IDAgJiYgYmFzZSA8IDIpIHx8IGJhc2UgPiAzNikgeworICAgIGlmICgoYmFzZSAhPSAwICYmIGJhc2UgPCAyKSB8fCBiYXNlID4gMzYpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiaW50KCkgYmFzZSBtdXN0IGJlID49IDIgYW5kIDw9IDM2Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDQzMiw3ICs0NDQ4LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlMb25nX0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtNTA4MiwxNSArNTA5OCwxNyBAQAogICAgICAgICAgICAgYXNzZXJ0KHYtPm9iX2RpZ2l0WzBdID09IGFicyhpdmFsKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeU9iamVjdF9JTklUKHYsICZQeUxvbmdfVHlwZSk7CisgICAgICAgICAgICAodm9pZClQeU9iamVjdF9JTklUKHYsICZQeUxvbmdfVHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgUHlfU0laRSh2KSA9IHNpemU7CiAgICAgICAgIHYtPm9iX2RpZ2l0WzBdID0gYWJzKGl2YWwpOwogICAgIH0KICNlbmRpZgogICAgIC8qIGluaXRpYWxpemUgaW50X2luZm8gKi8KLSAgICBpZiAoSW50X0luZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmSW50X0luZm9UeXBlLCAmaW50X2luZm9fZGVzYyk7CisgICAgaWYgKEludF9JbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZJbnRfSW5mb1R5cGUsICZpbnRfaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICByZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvbWVtb3J5b2JqZWN0LmMgYi9PYmplY3RzL21lbW9yeW9iamVjdC5jCmluZGV4IDE4OWFmODguLmNiNjQ0YjggMTAwNjQ0Ci0tLSBhL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tZW1vcnlvYmplY3QuYwpAQCAtMjQwMiw3ICsyNDAyLDcgQEAKIAogLyogQXMgc2VxdWVuY2UgKi8KIHN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBtZW1vcnlfYXNfc2VxdWVuY2UgPSB7Ci0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KKyAgICAgICAgKGxlbmZ1bmMpbWVtb3J5X2xlbmd0aCwgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfY29uY2F0ICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KICAgICAgICAgKHNzaXplYXJnZnVuYyltZW1vcnlfaXRlbSwgICAgICAgIC8qIHNxX2l0ZW0gKi8KQEAgLTI3NDIsNyArMjc0Miw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBDYW4ndCBmYWlsICovCi0gICAgICAgIHNlbGYtPmhhc2ggPSBfUHlfSGFzaEJ5dGVzKCh1bnNpZ25lZCBjaGFyICopbWVtLCB2aWV3LT5sZW4pOworICAgICAgICBzZWxmLT5oYXNoID0gX1B5X0hhc2hCeXRlcyhtZW0sIHZpZXctPmxlbik7CiAKICAgICAgICAgaWYgKG1lbSAhPSB2aWV3LT5idWYpCiAgICAgICAgICAgICBQeU1lbV9GcmVlKG1lbSk7CmRpZmYgLS1naXQgYS9PYmplY3RzL21ldGhvZG9iamVjdC5jIGIvT2JqZWN0cy9tZXRob2RvYmplY3QuYwppbmRleCBmMDY4NWRkLi5mMjYxNmQ0IDEwMDY0NAotLS0gYS9PYmplY3RzL21ldGhvZG9iamVjdC5jCisrKyBiL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKQEAgLTEzLDYgKzEzLDE1IEBACiAjZGVmaW5lIFB5Q0Z1bmN0aW9uX01BWEZSRUVMSVNUIDI1NgogI2VuZGlmCiAKKy8qIHVuZGVmaW5lIG1hY3JvIHRyYW1wb2xpbmUgdG8gUHlDRnVuY3Rpb25fTmV3RXggKi8KKyN1bmRlZiBQeUNGdW5jdGlvbl9OZXcKKworUHlPYmplY3QgKgorUHlDRnVuY3Rpb25fTmV3KFB5TWV0aG9kRGVmICptbCwgUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ld0V4KG1sLCBzZWxmLCBOVUxMKTsKK30KKwogUHlPYmplY3QgKgogUHlDRnVuY3Rpb25fTmV3RXgoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1vZHVsZSkKIHsKQEAgLTIwLDcgKzI5LDcgQEAKICAgICBvcCA9IGZyZWVfbGlzdDsKICAgICBpZiAob3AgIT0gTlVMTCkgewogICAgICAgICBmcmVlX2xpc3QgPSAoUHlDRnVuY3Rpb25PYmplY3QgKikob3AtPm1fc2VsZik7Ci0gICAgICAgIFB5T2JqZWN0X0lOSVQob3AsICZQeUNGdW5jdGlvbl9UeXBlKTsKKyAgICAgICAgKHZvaWQpUHlPYmplY3RfSU5JVChvcCwgJlB5Q0Z1bmN0aW9uX1R5cGUpOwogICAgICAgICBudW1mcmVlLS07CiAgICAgfQogICAgIGVsc2UgewpAQCAtNzAsMjMgKzc5LDM0IEBACiBQeU9iamVjdCAqCiBQeUNGdW5jdGlvbl9DYWxsKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnLCBQeU9iamVjdCAqa3cpCiB7CisjZGVmaW5lIENIRUNLX1JFU1VMVChyZXMpIGFzc2VydChyZXMgIT0gTlVMTCB8fCBQeUVycl9PY2N1cnJlZCgpKQorCiAgICAgUHlDRnVuY3Rpb25PYmplY3QqIGYgPSAoUHlDRnVuY3Rpb25PYmplY3QqKWZ1bmM7CiAgICAgUHlDRnVuY3Rpb24gbWV0aCA9IFB5Q0Z1bmN0aW9uX0dFVF9GVU5DVElPTihmdW5jKTsKICAgICBQeU9iamVjdCAqc2VsZiA9IFB5Q0Z1bmN0aW9uX0dFVF9TRUxGKGZ1bmMpOworICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlfc3NpemVfdCBzaXplOwogCiAgICAgc3dpdGNoIChQeUNGdW5jdGlvbl9HRVRfRkxBR1MoZnVuYykgJiB+KE1FVEhfQ0xBU1MgfCBNRVRIX1NUQVRJQyB8IE1FVEhfQ09FWElTVCkpIHsKICAgICBjYXNlIE1FVEhfVkFSQVJHUzoKLSAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApCi0gICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBhcmcpOworICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgeworICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBhcmcpOworICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUzoKLSAgICAgICAgcmV0dXJuICgqKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKW1ldGgpKHNlbGYsIGFyZywga3cpOworICAgICAgICByZXMgPSAoKihQeUNGdW5jdGlvbldpdGhLZXl3b3JkcyltZXRoKShzZWxmLCBhcmcsIGt3KTsKKyAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CiAgICAgY2FzZSBNRVRIX05PQVJHUzoKICAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApIHsKICAgICAgICAgICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIE5VTEwpOworICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgTlVMTCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIG5vIGFyZ3VtZW50cyAoJXpkIGdpdmVuKSIsCiAgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSwgc2l6ZSk7CkBAIC05Niw4ICsxMTYsMTEgQEAKICAgICBjYXNlIE1FVEhfTzoKICAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApIHsKICAgICAgICAgICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0oYXJnLCAwKSk7CisgICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCkpOworICAgICAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCAoJXpkIGdpdmVuKSIsCiAgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSwgc2l6ZSk7CkBAIC0xMTQsNiArMTM3LDggQEAKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJS4yMDBzKCkgdGFrZXMgbm8ga2V5d29yZCBhcmd1bWVudHMiLAogICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lKTsKICAgICByZXR1cm4gTlVMTDsKKworI3VuZGVmIENIRUNLX1JFU1VMVAogfQogCiAvKiBNZXRob2RzICh0aGUgc3RhbmRhcmQgYnVpbHQtaW4gbWV0aG9kcywgdGhhdCBpcykgKi8KQEAgLTEzNSwxNCArMTYwLDM1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCittZXRoX3JlZHVjZShQeUNGdW5jdGlvbk9iamVjdCAqbSkKK3sKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBpZiAobS0+bV9zZWxmID09IE5VTEwgfHwgUHlNb2R1bGVfQ2hlY2sobS0+bV9zZWxmKSkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKG0tPm1fbWwtPm1sX25hbWUpOworCisgICAgYnVpbHRpbnMgPSBQeUV2YWxfR2V0QnVpbHRpbnMoKTsKKyAgICBnZXRhdHRyID0gX1B5RGljdF9HZXRJdGVtSWQoYnVpbHRpbnMsICZQeUlkX2dldGF0dHIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9zKSIsIGdldGF0dHIsIG0tPm1fc2VsZiwgbS0+bV9tbC0+bWxfbmFtZSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBtZXRoX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pbWV0aF9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCittZXRoX2dldF9fdGV4dF9zaWduYXR1cmVfXyhQeUNGdW5jdGlvbk9iamVjdCAqbSwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKG0tPm1fbWwtPm1sX25hbWUsIG0tPm1fbWwtPm1sX2RvYyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBtZXRoX2dldF9fZG9jX18oUHlDRnVuY3Rpb25PYmplY3QgKm0sIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgY29uc3QgY2hhciAqZG9jID0gbS0+bV9tbC0+bWxfZG9jOwotCi0gICAgaWYgKGRvYyAhPSBOVUxMKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoZG9jKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKG0tPm1fbWwtPm1sX25hbWUsIG0tPm1fbWwtPm1sX2RvYyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yMTEsNiArMjU3LDcgQEAKICAgICB7Il9fbmFtZV9fIiwgKGdldHRlciltZXRoX2dldF9fbmFtZV9fLCBOVUxMLCBOVUxMfSwKICAgICB7Il9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpbWV0aF9nZXRfX3F1YWxuYW1lX18sIE5VTEwsIE5VTEx9LAogICAgIHsiX19zZWxmX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X19zZWxmX18sIE5VTEwsIE5VTEx9LAorICAgIHsiX190ZXh0X3NpZ25hdHVyZV9fIiwgKGdldHRlciltZXRoX2dldF9fdGV4dF9zaWduYXR1cmVfXywgTlVMTCwgTlVMTH0sCiAgICAgezB9CiB9OwogCkBAIC0zMDgsNyArMzU1LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIG1ldGhfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIG1ldGhfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIG1ldGhfZ2V0c2V0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC0zNDYsMTcgKzM5MywzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJlZSBQeUNGdW5jdGlvbk9iamVjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1mcmVlLCBzaXplb2YoUHlDRnVuY3Rpb25PYmplY3QpKTsKIH0KLQotLyogUHlDRnVuY3Rpb25fTmV3KCkgaXMgbm93IGp1c3QgYSBtYWNybyB0aGF0IGNhbGxzIFB5Q0Z1bmN0aW9uX05ld0V4KCksCi0gICBidXQgaXQncyBwYXJ0IG9mIHRoZSBBUEkgc28gd2UgbmVlZCB0byBrZWVwIGEgZnVuY3Rpb24gYXJvdW5kIHRoYXQKLSAgIGV4aXN0aW5nIEMgZXh0ZW5zaW9ucyBjYW4gY2FsbC4KLSovCi0KLSN1bmRlZiBQeUNGdW5jdGlvbl9OZXcKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlDRnVuY3Rpb25fTmV3KFB5TWV0aG9kRGVmICosIFB5T2JqZWN0ICopOwotCi1QeU9iamVjdCAqCi1QeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZikKLXsKLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgobWwsIHNlbGYsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9tb2R1bGVvYmplY3QuYyBiL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKaW5kZXggNzI5NzhhZS4uZjUwOTkzMiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9tb2R1bGVvYmplY3QuYworKysgYi9PYmplY3RzL21vZHVsZW9iamVjdC5jCkBAIC0xMSw2ICsxMSw4IEBACiAgICAgUHlPYmplY3QgKm1kX2RpY3Q7CiAgICAgc3RydWN0IFB5TW9kdWxlRGVmICptZF9kZWY7CiAgICAgdm9pZCAqbWRfc3RhdGU7CisgICAgUHlPYmplY3QgKm1kX3dlYWtsaXN0OworICAgIFB5T2JqZWN0ICptZF9uYW1lOyAgLyogZm9yIGxvZ2dpbmcgcHVycG9zZXMgYWZ0ZXIgbWRfZGljdCBpcyBjbGVhcmVkICovCiB9IFB5TW9kdWxlT2JqZWN0OwogCiBzdGF0aWMgUHlNZW1iZXJEZWYgbW9kdWxlX21lbWJlcnNbXSA9IHsKQEAgLTI2LDYgKzI4LDM1IEBACiB9OwogCiAKK3N0YXRpYyBpbnQKK21vZHVsZV9pbml0X2RpY3QoUHlNb2R1bGVPYmplY3QgKm1vZCwgUHlPYmplY3QgKm1kX2RpY3QsCisgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqZG9jKQoreworICAgIGlmIChtZF9kaWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoZG9jID09IE5VTEwpCisgICAgICAgIGRvYyA9IFB5X05vbmU7CisKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fbmFtZV9fIiwgbmFtZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19kb2NfXyIsIGRvYykgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19wYWNrYWdlX18iLCBQeV9Ob25lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX2xvYWRlcl9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19zcGVjX18iLCBQeV9Ob25lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KG5hbWUpKSB7CisgICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKKyAgICAgICAgUHlfWERFQ1JFRihtb2QtPm1kX25hbWUpOworICAgICAgICBtb2QtPm1kX25hbWUgPSBuYW1lOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisKIFB5T2JqZWN0ICoKIFB5TW9kdWxlX05ld09iamVjdChQeU9iamVjdCAqbmFtZSkKIHsKQEAgLTM1LDE0ICs2NiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBtLT5tZF9kZWYgPSBOVUxMOwogICAgIG0tPm1kX3N0YXRlID0gTlVMTDsKKyAgICBtLT5tZF93ZWFrbGlzdCA9IE5VTEw7CisgICAgbS0+bWRfbmFtZSA9IE5VTEw7CiAgICAgbS0+bWRfZGljdCA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAobS0+bWRfZGljdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG0tPm1kX2RpY3QsICJfX25hbWVfXyIsIG5hbWUpICE9IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fZG9jX18iLCBQeV9Ob25lKSAhPSAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG0tPm1kX2RpY3QsICJfX3BhY2thZ2VfXyIsIFB5X05vbmUpICE9IDApCisgICAgaWYgKG1vZHVsZV9pbml0X2RpY3QobSwgbS0+bWRfZGljdCwgbmFtZSwgTlVMTCkgIT0gMCkKICAgICAgICAgZ290byBmYWlsOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKG0pOwogICAgIHJldHVybiAoUHlPYmplY3QgKiltOwpAQCAtMjcyLDYgKzI5OSwxNCBAQAogdm9pZAogX1B5TW9kdWxlX0NsZWFyKFB5T2JqZWN0ICptKQogeworICAgIFB5T2JqZWN0ICpkID0gKChQeU1vZHVsZU9iamVjdCAqKW0pLT5tZF9kaWN0OworICAgIGlmIChkICE9IE5VTEwpCisgICAgICAgIF9QeU1vZHVsZV9DbGVhckRpY3QoZCk7Cit9CisKK3ZvaWQKK19QeU1vZHVsZV9DbGVhckRpY3QoUHlPYmplY3QgKmQpCit7CiAgICAgLyogVG8gbWFrZSB0aGUgZXhlY3V0aW9uIG9yZGVyIG9mIGRlc3RydWN0b3JzIGZvciBnbG9iYWwKICAgICAgICBvYmplY3RzIGEgYml0IG1vcmUgcHJlZGljdGFibGUsIHdlIGZpcnN0IHphcCBhbGwgb2JqZWN0cwogICAgICAgIHdob3NlIG5hbWUgc3RhcnRzIHdpdGggYSBzaW5nbGUgdW5kZXJzY29yZSwgYmVmb3JlIHdlIGNsZWFyCkBAIC0yODEsMTEgKzMxNiw2IEBACiAKICAgICBQeV9zc2l6ZV90IHBvczsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7Ci0gICAgUHlPYmplY3QgKmQ7Ci0KLSAgICBkID0gKChQeU1vZHVsZU9iamVjdCAqKW0pLT5tZF9kaWN0OwotICAgIGlmIChkID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKIAogICAgIC8qIEZpcnN0LCBjbGVhciBvbmx5IG5hbWVzIHN0YXJ0aW5nIHdpdGggYSBzaW5nbGUgdW5kZXJzY29yZSAqLwogICAgIHBvcyA9IDA7CkBAIC0zNDksOSArMzc5LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgbS0+bWRfZGljdCA9IGRpY3Q7CiAgICAgfQotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19uYW1lX18iLCBuYW1lKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgIl9fZG9jX18iLCBkb2MpIDwgMCkKKyAgICBpZiAobW9kdWxlX2luaXRfZGljdChtLCBkaWN0LCBuYW1lLCBkb2MpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQpAQCAtMzYwLDEyICszODgsMTUgQEAKIG1vZHVsZV9kZWFsbG9jKFB5TW9kdWxlT2JqZWN0ICptKQogewogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sobSk7CisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIG0tPm1kX25hbWUpIHsKKyAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGRlc3Ryb3kgJVNcbiIsIG0tPm1kX25hbWUpOworICAgIH0KKyAgICBpZiAobS0+bWRfd2Vha2xpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgbSk7CiAgICAgaWYgKG0tPm1kX2RlZiAmJiBtLT5tZF9kZWYtPm1fZnJlZSkKICAgICAgICAgbS0+bWRfZGVmLT5tX2ZyZWUobSk7Ci0gICAgaWYgKG0tPm1kX2RpY3QgIT0gTlVMTCkgewotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIoKFB5T2JqZWN0ICopbSk7Ci0gICAgICAgIFB5X0RFQ1JFRihtLT5tZF9kaWN0KTsKLSAgICB9CisgICAgUHlfWERFQ1JFRihtLT5tZF9kaWN0KTsKKyAgICBQeV9YREVDUkVGKG0tPm1kX25hbWUpOwogICAgIGlmIChtLT5tZF9zdGF0ZSAhPSBOVUxMKQogICAgICAgICBQeU1lbV9GUkVFKG0tPm1kX3N0YXRlKTsKICAgICBQeV9UWVBFKG0pLT50cF9mcmVlKChQeU9iamVjdCAqKW0pOwpAQCAtMzc0LDU1ICs0MDUsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtb2R1bGVfcmVwcihQeU1vZHVsZU9iamVjdCAqbSkKIHsKLSAgICBQeU9iamVjdCAqbmFtZSwgKmZpbGVuYW1lLCAqcmVwciwgKmxvYWRlciA9IE5VTEw7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IHRzdGF0ZS0+aW50ZXJwOwogCi0gICAgLyogU2VlIGlmIHRoZSBtb2R1bGUgaGFzIGFuIF9fbG9hZGVyX18uICBJZiBpdCBkb2VzLCBnaXZlIHRoZSBsb2FkZXIgdGhlCi0gICAgICogZmlyc3Qgc2hvdCBhdCBwcm9kdWNpbmcgYSByZXByIGZvciB0aGUgbW9kdWxlLgotICAgICAqLwotICAgIGlmIChtLT5tZF9kaWN0ICE9IE5VTEwpIHsKLSAgICAgICAgbG9hZGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fbG9hZGVyX18iKTsKLSAgICB9Ci0gICAgaWYgKGxvYWRlciAhPSBOVUxMKSB7Ci0gICAgICAgIHJlcHIgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGxvYWRlciwgIm1vZHVsZV9yZXByIiwgIihPKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKW0sIE5VTEwpOwotICAgICAgICBpZiAocmVwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHJlcHI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogX19sb2FkZXJfXy5tb2R1bGVfcmVwcihtKSBkaWQgbm90IHByb3ZpZGUgdXMgd2l0aCBhIHJlcHIuICBOZXh0LCBzZWUgaWYKLSAgICAgKiB0aGUgbW9kdWxlIGhhcyBhbiBfX2ZpbGVfXy4gIElmIGl0IGRvZXNuJ3QgdGhlbiB1c2UgcmVwcihfX2xvYWRlcl9fKSBpZgotICAgICAqIGl0IGV4aXN0cywgb3RoZXJ3aXNlLCBqdXN0IHVzZSBtb2R1bGUuX19uYW1lX18uCi0gICAgICovCi0gICAgbmFtZSA9IFB5TW9kdWxlX0dldE5hbWVPYmplY3QoKFB5T2JqZWN0ICopbSk7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCI/IiwgMSk7Ci0gICAgICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZmlsZW5hbWUgPSBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdCgoUHlPYmplY3QgKiltKTsKLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAvKiBUaGVyZSdzIG5vIG0uX19maWxlX18sIHNvIGlmIHRoZXJlIHdhcyBhbiBfX2xvYWRlcl9fLCB1c2UgdGhhdCBpbgotICAgICAgICAgKiB0aGUgcmVwciwgb3RoZXJ3aXNlLCB0aGUgb25seSB0aGluZyB5b3UgY2FuIHVzZSBpcyBtLl9fbmFtZV9fCi0gICAgICAgICAqLwotICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPG1vZHVsZSAlUj4iLCBuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPG1vZHVsZSAlUiAoJVIpPiIsIG5hbWUsIGxvYWRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogRmluYWxseSwgdXNlIG0uX19maWxlX18gKi8KLSAgICBlbHNlIHsKLSAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSIGZyb20gJVI+IiwgbmFtZSwgZmlsZW5hbWUpOwotICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwotICAgIH0KLSAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgcmV0dXJuIHJlcHI7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QoaW50ZXJwLT5pbXBvcnRsaWIsICJfbW9kdWxlX3JlcHIiLCAiTyIsIG0pOwogfQogCiBzdGF0aWMgaW50CkBAIC01MTEsNyArNDk3LDcgQEAKICAgICAodHJhdmVyc2Vwcm9jKW1vZHVsZV90cmF2ZXJzZSwgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpbW9kdWxlX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgb2Zmc2V0b2YoUHlNb2R1bGVPYmplY3QsIG1kX3dlYWtsaXN0KSwgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBtb2R1bGVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMgYi9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jCmluZGV4IGZmMjc4ZDMuLjcyMGFjMGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYwpAQCAtNDQsNyArNDQsNyBAQAogICAgIGlmIChhcmdzICE9IE5VTEwpIHsKICAgICAgICAgUHlfc3NpemVfdCBhcmdjb3VudCA9IFB5T2JqZWN0X1NpemUoYXJncyk7CiAgICAgICAgIGlmIChhcmdjb3VudCA8IDApCi0gICAgICAgICAgICByZXR1cm4gYXJnY291bnQ7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGVsc2UgaWYgKGFyZ2NvdW50ID4gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIm5vIHBvc2l0aW9uYWwgYXJndW1lbnRzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC02NiwxNiArNjYsMjAgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotbmFtZXNwYWNlX3JlcHIoX1B5TmFtZXNwYWNlT2JqZWN0ICpucykKK25hbWVzcGFjZV9yZXByKFB5T2JqZWN0ICpucykKIHsKICAgICBpbnQgaSwgbG9vcF9lcnJvciA9IDA7CiAgICAgUHlPYmplY3QgKnBhaXJzID0gTlVMTCwgKmQgPSBOVUxMLCAqa2V5cyA9IE5VTEwsICprZXlzX2l0ZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKnNlcGFyYXRvciwgKnBhaXJzcmVwciwgKnJlcHIgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBuYW1lOwogCi0gICAgaSA9IFB5X1JlcHJFbnRlcigoUHlPYmplY3QgKilucyk7CisgICAgbmFtZSA9IChQeV9UWVBFKG5zKSA9PSAmX1B5TmFtZXNwYWNlX1R5cGUpID8gIm5hbWVzcGFjZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBucy0+b2JfdHlwZS0+dHBfbmFtZTsKKworICAgIGkgPSBQeV9SZXByRW50ZXIobnMpOwogICAgIGlmIChpICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGkgPiAwID8gUHlVbmljb2RlX0Zyb21TdHJpbmcoIm5hbWVzcGFjZSguLi4pIikgOiBOVUxMOworICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoLi4uKSIsIG5hbWUpIDogTlVMTDsKICAgICB9CiAKICAgICBwYWlycyA9IFB5TGlzdF9OZXcoMCk7CkBAIC05Nyw3ICsxMDEsNyBAQAogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgd2hpbGUgKChrZXkgPSBQeUl0ZXJfTmV4dChrZXlzX2l0ZXIpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soa2V5KSAmJiBQeVVuaWNvZGVfR0VUX1NJWkUoa2V5KSA+IDApIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5VW5pY29kZV9HRVRfTEVOR1RIKGtleSkgPiAwKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUsICppdGVtOwogCiAgICAgICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGQsIGtleSk7CkBAIC0xMjcsOCArMTMxLDcgQEAKICAgICBpZiAocGFpcnNyZXByID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVTKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUHlPYmplY3QgKilucyktPm9iX3R5cGUtPnRwX25hbWUsIHBhaXJzcmVwcik7CisgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyglUykiLCBuYW1lLCBwYWlyc3JlcHIpOwogICAgIFB5X0RFQ1JFRihwYWlyc3JlcHIpOwogCiBlcnJvcjoKQEAgLTEzNiw3ICsxMzksNyBAQAogICAgIFB5X1hERUNSRUYoZCk7CiAgICAgUHlfWERFQ1JFRihrZXlzKTsKICAgICBQeV9YREVDUkVGKGtleXNfaXRlcik7Ci0gICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW5zKTsKKyAgICBQeV9SZXByTGVhdmUobnMpOwogCiAgICAgcmV0dXJuIHJlcHI7CiB9CkBAIC0xNTgsMTQgKzE2MSw0OSBAQAogfQogCiAKK3N0YXRpYyBQeU9iamVjdCAqCituYW1lc3BhY2VfcmljaGNvbXBhcmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvdGhlciwgaW50IG9wKQoreworICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKHNlbGYsIChQeU9iamVjdCAqKSZfUHlOYW1lc3BhY2VfVHlwZSkgJiYKKyAgICAgICAgICAgIFB5T2JqZWN0X0lzSW5zdGFuY2Uob3RoZXIsIChQeU9iamVjdCAqKSZfUHlOYW1lc3BhY2VfVHlwZSkpCisgICAgICAgIHJldHVybiBQeU9iamVjdF9SaWNoQ29tcGFyZSgoKF9QeU5hbWVzcGFjZU9iamVjdCAqKXNlbGYpLT5uc19kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9QeU5hbWVzcGFjZU9iamVjdCAqKW90aGVyKS0+bnNfZGljdCwgb3ApOworICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7CisgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworfQorCisKK1B5RG9jX1NUUlZBUihuYW1lc3BhY2VfcmVkdWNlX19kb2NfXywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmciKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yZWR1Y2UoX1B5TmFtZXNwYWNlT2JqZWN0ICpucykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXJncyA9IFB5VHVwbGVfTmV3KDApOworCisgICAgaWYgKCFhcmdzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IFB5VHVwbGVfUGFjaygzLCAoUHlPYmplY3QgKilQeV9UWVBFKG5zKSwgYXJncywgbnMtPm5zX2RpY3QpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBuYW1lc3BhY2VfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiluYW1lc3BhY2VfcmVkdWNlLCBNRVRIX05PQVJHUywKKyAgICAgbmFtZXNwYWNlX3JlZHVjZV9fZG9jX199LAorICAgIHtOVUxMLCAgICAgICAgIE5VTEx9ICAvKiBzZW50aW5lbCAqLworfTsKKworCiBQeURvY19TVFJWQVIobmFtZXNwYWNlX2RvYywKICJBIHNpbXBsZSBhdHRyaWJ1dGUtYmFzZWQgbmFtZXNwYWNlLlxuXAogXG5cCi1uYW1lc3BhY2UoKiprd2FyZ3MpIik7CitTaW1wbGVOYW1lc3BhY2UoKiprd2FyZ3MpIik7CiAKIFB5VHlwZU9iamVjdCBfUHlOYW1lc3BhY2VfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICAgICJuYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgICJ0eXBlcy5TaW1wbGVOYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIHNpemVvZihfUHlOYW1lc3BhY2VPYmplY3QpLCAgICAgICAgICAgICAgICAgLyogdHBfc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAoZGVzdHJ1Y3RvciluYW1lc3BhY2VfZGVhbGxvYywgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KQEAgLTE4OCwxMSArMjI2LDExIEBACiAgICAgbmFtZXNwYWNlX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKW5hbWVzcGFjZV90cmF2ZXJzZSwgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpbmFtZXNwYWNlX2NsZWFyLCAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBuYW1lc3BhY2VfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBuYW1lc3BhY2VfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBuYW1lc3BhY2VfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYmplY3QuYyBiL09iamVjdHMvb2JqZWN0LmMKaW5kZXggZTA3OWQ1MS4uYTFhNjlmYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYmplY3QuYworKysgYi9PYmplY3RzL29iamVjdC5jCkBAIC04LDYgKzgsMTIgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKFB5X1JlcHIpOworX1B5X0lERU5USUZJRVIoX19ieXRlc19fKTsKK19QeV9JREVOVElGSUVSKF9fZGlyX18pOworX1B5X0lERU5USUZJRVIoX19pc2Fic3RyYWN0bWV0aG9kX18pOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworCiAjaWZkZWYgUHlfUkVGX0RFQlVHCiBQeV9zc2l6ZV90IF9QeV9SZWZUb3RhbDsKIApAQCAtMjIsNyArMjgsNyBAQAogICAgIG8gPSBfUHlEaWN0X0R1bW15KCk7CiAgICAgaWYgKG8gIT0gTlVMTCkKICAgICAgICAgdG90YWwgLT0gby0+b2JfcmVmY250OwotICAgIG8gPSBfUHlTZXRfRHVtbXkoKTsKKyAgICBvID0gX1B5U2V0X0R1bW15OwogICAgIGlmIChvICE9IE5VTEwpCiAgICAgICAgIHRvdGFsIC09IG8tPm9iX3JlZmNudDsKICAgICByZXR1cm4gdG90YWw7CkBAIC0yNTUsNiArMjYxLDcyIEBACiAgICAgcmV0dXJuIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCB0cCwgbml0ZW1zKTsKIH0KIAordm9pZAorUHlPYmplY3RfQ2FsbEZpbmFsaXplcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShzZWxmKTsKKworICAgIC8qIFRoZSBmb3JtZXIgY291bGQgaGFwcGVuIG9uIGhlYXB0eXBlcyBjcmVhdGVkIGZyb20gdGhlIEMgQVBJLCBlLmcuCisgICAgICAgUHlUeXBlX0Zyb21TcGVjKCkuICovCisgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSB8fAorICAgICAgICB0cC0+dHBfZmluYWxpemUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIC8qIHRwX2ZpbmFsaXplIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAqLworICAgIGlmIChQeVR5cGVfSVNfR0ModHApICYmIF9QeUdDX0ZJTkFMSVpFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHAtPnRwX2ZpbmFsaXplKHNlbGYpOworICAgIGlmIChQeVR5cGVfSVNfR0ModHApKQorICAgICAgICBfUHlHQ19TRVRfRklOQUxJWkVEKHNlbGYsIDEpOworfQorCitpbnQKK1B5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHJlZmNudDsKKworICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLworICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgIT0gMCkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MgY2FsbGVkIG9uICIKKyAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHdpdGggYSBub24temVybyByZWZjb3VudCIpOworICAgIH0KKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgUHlPYmplY3RfQ2FsbEZpbmFsaXplcihzZWxmKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiB0cF9maW5hbGl6ZSByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisKKyAgICBpZiAoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpKSB7CisgICAgICAgIGFzc2VydChfUHlHQ19SRUZTKHNlbGYpICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICB9CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCisgICAgcmV0dXJuIC0xOworfQorCiBpbnQKIFB5T2JqZWN0X1ByaW50KFB5T2JqZWN0ICpvcCwgRklMRSAqZnAsIGludCBmbGFncykKIHsKQEAgLTM0MCwxMSArNDEyLDE3IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWw7CiAjZW5kaWYKKyAgICAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9iamVjdCAgOiAiKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBnaWwgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCisKKyAgICAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAgICAgICAgICh2b2lkKVB5T2JqZWN0X1ByaW50KG9wLCBzdGRlcnIsIDApOworICAgICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbCk7CiAjZW5kaWYKQEAgLTM3Nyw2ICs0NTUsMTQgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfcmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPm9iX3R5cGUtPnRwX25hbWUsIHYpOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9SZXByKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIHJlcyA9ICgqdi0+b2JfdHlwZS0+dHBfcmVwcikodik7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQxOSw2ICs1MDUsMTMgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfc3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9SZXByKHYpOwogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9TdHIoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCisKICAgICAvKiBJdCBpcyBwb3NzaWJsZSBmb3IgYSB0eXBlIHRvIGhhdmUgYSB0cF9zdHIgcmVwcmVzZW50YXRpb24gdGhhdCBsb29wcwogICAgICAgIGluZmluaXRlbHkuICovCiAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIGdldHRpbmcgdGhlIHN0ciBvZiBhbiBvYmplY3QiKSkKQEAgLTQ1MSw2ICs1NDQsOSBAQAogICAgIGlmIChyZXByID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSShyZXByKSkKKyAgICAgICAgcmV0dXJuIHJlcHI7CisKICAgICAvKiByZXByIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBQeVVuaWNvZGUgb2JqZWN0IGJ5IFB5T2JqZWN0X1JlcHIgKi8KICAgICBhc2NpaSA9IF9QeVVuaWNvZGVfQXNBU0NJSVN0cmluZyhyZXByLCAiYmFja3NsYXNocmVwbGFjZSIpOwogICAgIFB5X0RFQ1JFRihyZXByKTsKQEAgLTQ3MCw3ICs1NjYsNiBAQAogUHlPYmplY3RfQnl0ZXMoUHlPYmplY3QgKnYpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKmZ1bmM7Ci0gICAgX1B5X0lERU5USUZJRVIoX19ieXRlc19fKTsKIAogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoIjxOVUxMPiIpOwpAQCAtNjM2LDE1MCArNzMxLDYgQEAKICAgICByZXR1cm4gb2s7CiB9CiAKLS8qIFNldCBvZiBoYXNoIHV0aWxpdHkgZnVuY3Rpb25zIHRvIGhlbHAgbWFpbnRhaW5pbmcgdGhlIGludmFyaWFudCB0aGF0Ci0gICAgaWYgYT09YiB0aGVuIGhhc2goYSk9PWhhc2goYikKLQotICAgQWxsIHRoZSB1dGlsaXR5IGZ1bmN0aW9ucyAoX1B5X0hhc2gqKCkpIHJldHVybiAiLTEiIHRvIHNpZ25pZnkgYW4gZXJyb3IuCi0qLwotCi0vKiBGb3IgbnVtZXJpYyB0eXBlcywgdGhlIGhhc2ggb2YgYSBudW1iZXIgeCBpcyBiYXNlZCBvbiB0aGUgcmVkdWN0aW9uCi0gICBvZiB4IG1vZHVsbyB0aGUgcHJpbWUgUCA9IDIqKl9QeUhBU0hfQklUUyAtIDEuICBJdCdzIGRlc2lnbmVkIHNvIHRoYXQKLSAgIGhhc2goeCkgPT0gaGFzaCh5KSB3aGVuZXZlciB4IGFuZCB5IGFyZSBudW1lcmljYWxseSBlcXVhbCwgZXZlbiBpZgotICAgeCBhbmQgeSBoYXZlIGRpZmZlcmVudCB0eXBlcy4KLQotICAgQSBxdWljayBzdW1tYXJ5IG9mIHRoZSBoYXNoaW5nIHN0cmF0ZWd5OgotCi0gICAoMSkgRmlyc3QgZGVmaW5lIHRoZSAncmVkdWN0aW9uIG9mIHggbW9kdWxvIFAnIGZvciBhbnkgcmF0aW9uYWwKLSAgIG51bWJlciB4OyB0aGlzIGlzIGEgc3RhbmRhcmQgZXh0ZW5zaW9uIG9mIHRoZSB1c3VhbCBub3Rpb24gb2YKLSAgIHJlZHVjdGlvbiBtb2R1bG8gUCBmb3IgaW50ZWdlcnMuICBJZiB4ID09IHAvcSAod3JpdHRlbiBpbiBsb3dlc3QKLSAgIHRlcm1zKSwgdGhlIHJlZHVjdGlvbiBpcyBpbnRlcnByZXRlZCBhcyB0aGUgcmVkdWN0aW9uIG9mIHAgdGltZXMKLSAgIHRoZSBpbnZlcnNlIG9mIHRoZSByZWR1Y3Rpb24gb2YgcSwgYWxsIG1vZHVsbyBQOyBpZiBxIGlzIGV4YWN0bHkKLSAgIGRpdmlzaWJsZSBieSBQIHRoZW4gZGVmaW5lIHRoZSByZWR1Y3Rpb24gdG8gYmUgaW5maW5pdHkuICBTbyB3ZSd2ZQotICAgZ290IGEgd2VsbC1kZWZpbmVkIG1hcAotCi0gICAgICByZWR1Y2UgOiB7IHJhdGlvbmFsIG51bWJlcnMgfSAtPiB7IDAsIDEsIDIsIC4uLiwgUC0xLCBpbmZpbml0eSB9LgotCi0gICAoMikgTm93IGZvciBhIHJhdGlvbmFsIG51bWJlciB4LCBkZWZpbmUgaGFzaCh4KSBieToKLQotICAgICAgcmVkdWNlKHgpICAgaWYgeCA+PSAwCi0gICAgICAtcmVkdWNlKC14KSBpZiB4IDwgMAotCi0gICBJZiB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24gaXMgaW5maW5pdHkgKHRoaXMgaXMgaW1wb3NzaWJsZSBmb3IKLSAgIGludGVnZXJzLCBmbG9hdHMgYW5kIERlY2ltYWxzKSB0aGVuIHVzZSB0aGUgcHJlZGVmaW5lZCBoYXNoIHZhbHVlCi0gICBfUHlIQVNIX0lORiBmb3IgeCA+PSAwLCBvciAtX1B5SEFTSF9JTkYgZm9yIHggPCAwLCBpbnN0ZWFkLgotICAgX1B5SEFTSF9JTkYsIC1fUHlIQVNIX0lORiBhbmQgX1B5SEFTSF9OQU4gYXJlIGFsc28gdXNlZCBmb3IgdGhlCi0gICBoYXNoZXMgb2YgZmxvYXQgYW5kIERlY2ltYWwgaW5maW5pdGllcyBhbmQgbmFucy4KLQotICAgQSBzZWxsaW5nIHBvaW50IGZvciB0aGUgYWJvdmUgc3RyYXRlZ3kgaXMgdGhhdCBpdCBtYWtlcyBpdCBwb3NzaWJsZQotICAgdG8gY29tcHV0ZSBoYXNoZXMgb2YgZGVjaW1hbCBhbmQgYmluYXJ5IGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAgIGVmZmljaWVudGx5LCBldmVuIGlmIHRoZSBleHBvbmVudCBvZiB0aGUgYmluYXJ5IG9yIGRlY2ltYWwgbnVtYmVyCi0gICBpcyBsYXJnZS4gIFRoZSBrZXkgcG9pbnQgaXMgdGhhdAotCi0gICAgICByZWR1Y2UoeCAqIHkpID09IHJlZHVjZSh4KSAqIHJlZHVjZSh5KSAobW9kdWxvIF9QeUhBU0hfTU9EVUxVUykKLQotICAgcHJvdmlkZWQgdGhhdCB7cmVkdWNlKHgpLCByZWR1Y2UoeSl9ICE9IHswLCBpbmZpbml0eX0uICBUaGUgcmVkdWN0aW9uIG9mIGEKLSAgIGJpbmFyeSBvciBkZWNpbWFsIGZsb2F0IGlzIG5ldmVyIGluZmluaXR5LCBzaW5jZSB0aGUgZGVub21pbmF0b3IgaXMgYSBwb3dlcgotICAgb2YgMiAoZm9yIGJpbmFyeSkgb3IgYSBkaXZpc29yIG9mIGEgcG93ZXIgb2YgMTAgKGZvciBkZWNpbWFsKS4gIFNvIHdlIGhhdmUsCi0gICBmb3Igbm9ubmVnYXRpdmUgeCwKLQotICAgICAgcmVkdWNlKHggKiAyKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMioqZSkgJSBfUHlIQVNIX01PRFVMVVMKLQotICAgICAgcmVkdWNlKHggKiAxMCoqZSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKDEwKiplKSAlIF9QeUhBU0hfTU9EVUxVUwotCi0gICBhbmQgcmVkdWNlKDEwKiplKSBjYW4gYmUgY29tcHV0ZWQgZWZmaWNpZW50bHkgYnkgdGhlIHVzdWFsIG1vZHVsYXIKLSAgIGV4cG9uZW50aWF0aW9uIGFsZ29yaXRobS4gIEZvciByZWR1Y2UoMioqZSkgaXQncyBldmVuIGJldHRlcjogc2luY2UKLSAgIFAgaXMgb2YgdGhlIGZvcm0gMioqbi0xLCByZWR1Y2UoMioqZSkgaXMgMioqKGUgbW9kIG4pLCBhbmQgbXVsdGlwbGljYXRpb24KLSAgIGJ5IDIqKihlIG1vZCBuKSBtb2R1bG8gMioqbi0xIGp1c3QgYW1vdW50cyB0byBhIHJvdGF0aW9uIG9mIGJpdHMuCi0KLSAgICovCi0KLVB5X2hhc2hfdAotX1B5X0hhc2hEb3VibGUoZG91YmxlIHYpCi17Ci0gICAgaW50IGUsIHNpZ247Ci0gICAgZG91YmxlIG07Ci0gICAgUHlfdWhhc2hfdCB4LCB5OwotCi0gICAgaWYgKCFQeV9JU19GSU5JVEUodikpIHsKLSAgICAgICAgaWYgKFB5X0lTX0lORklOSVRZKHYpKQotICAgICAgICAgICAgcmV0dXJuIHYgPiAwID8gX1B5SEFTSF9JTkYgOiAtX1B5SEFTSF9JTkY7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBfUHlIQVNIX05BTjsKLSAgICB9Ci0KLSAgICBtID0gZnJleHAodiwgJmUpOwotCi0gICAgc2lnbiA9IDE7Ci0gICAgaWYgKG0gPCAwKSB7Ci0gICAgICAgIHNpZ24gPSAtMTsKLSAgICAgICAgbSA9IC1tOwotICAgIH0KLQotICAgIC8qIHByb2Nlc3MgMjggYml0cyBhdCBhIHRpbWU7ICB0aGlzIHNob3VsZCB3b3JrIHdlbGwgYm90aCBmb3IgYmluYXJ5Ci0gICAgICAgYW5kIGhleGFkZWNpbWFsIGZsb2F0aW5nIHBvaW50LiAqLwotICAgIHggPSAwOwotICAgIHdoaWxlIChtKSB7Ci0gICAgICAgIHggPSAoKHggPDwgMjgpICYgX1B5SEFTSF9NT0RVTFVTKSB8IHggPj4gKF9QeUhBU0hfQklUUyAtIDI4KTsKLSAgICAgICAgbSAqPSAyNjg0MzU0NTYuMDsgIC8qIDIqKjI4ICovCi0gICAgICAgIGUgLT0gMjg7Ci0gICAgICAgIHkgPSAoUHlfdWhhc2hfdCltOyAgLyogcHVsbCBvdXQgaW50ZWdlciBwYXJ0ICovCi0gICAgICAgIG0gLT0geTsKLSAgICAgICAgeCArPSB5OwotICAgICAgICBpZiAoeCA+PSBfUHlIQVNIX01PRFVMVVMpCi0gICAgICAgICAgICB4IC09IF9QeUhBU0hfTU9EVUxVUzsKLSAgICB9Ci0KLSAgICAvKiBhZGp1c3QgZm9yIHRoZSBleHBvbmVudDsgIGZpcnN0IHJlZHVjZSBpdCBtb2R1bG8gX1B5SEFTSF9CSVRTICovCi0gICAgZSA9IGUgPj0gMCA/IGUgJSBfUHlIQVNIX0JJVFMgOiBfUHlIQVNIX0JJVFMtMS0oKC0xLWUpICUgX1B5SEFTSF9CSVRTKTsKLSAgICB4ID0gKCh4IDw8IGUpICYgX1B5SEFTSF9NT0RVTFVTKSB8IHggPj4gKF9QeUhBU0hfQklUUyAtIGUpOwotCi0gICAgeCA9IHggKiBzaWduOwotICAgIGlmICh4ID09IChQeV91aGFzaF90KS0xKQotICAgICAgICB4ID0gKFB5X3VoYXNoX3QpLTI7Ci0gICAgcmV0dXJuIChQeV9oYXNoX3QpeDsKLX0KLQotUHlfaGFzaF90Ci1fUHlfSGFzaFBvaW50ZXIodm9pZCAqcCkKLXsKLSAgICBQeV9oYXNoX3QgeDsKLSAgICBzaXplX3QgeSA9IChzaXplX3QpcDsKLSAgICAvKiBib3R0b20gMyBvciA0IGJpdHMgYXJlIGxpa2VseSB0byBiZSAwOyByb3RhdGUgeSBieSA0IHRvIGF2b2lkCi0gICAgICAgZXhjZXNzaXZlIGhhc2ggY29sbGlzaW9ucyBmb3IgZGljdHMgYW5kIHNldHMgKi8KLSAgICB5ID0gKHkgPj4gNCkgfCAoeSA8PCAoOCAqIFNJWkVPRl9WT0lEX1AgLSA0KSk7Ci0gICAgeCA9IChQeV9oYXNoX3QpeTsKLSAgICBpZiAoeCA9PSAtMSkKLSAgICAgICAgeCA9IC0yOwotICAgIHJldHVybiB4OwotfQotCi1QeV9oYXNoX3QKLV9QeV9IYXNoQnl0ZXModW5zaWduZWQgY2hhciAqcCwgUHlfc3NpemVfdCBsZW4pCi17Ci0gICAgUHlfdWhhc2hfdCB4OwotICAgIFB5X3NzaXplX3QgaTsKLQotICAgIC8qCi0gICAgICBXZSBtYWtlIHRoZSBoYXNoIG9mIHRoZSBlbXB0eSBzdHJpbmcgYmUgMCwgcmF0aGVyIHRoYW4gdXNpbmcKLSAgICAgIChwcmVmaXggXiBzdWZmaXgpLCBzaW5jZSB0aGlzIHNsaWdodGx5IG9iZnVzY2F0ZXMgdGhlIGhhc2ggc2VjcmV0Ci0gICAgKi8KLSNpZmRlZiBQeV9ERUJVRwotICAgIGFzc2VydChfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZCk7Ci0jZW5kaWYKLSAgICBpZiAobGVuID09IDApIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQucHJlZml4OwotICAgIHggXj0gKFB5X3VoYXNoX3QpICpwIDw8IDc7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gKFB5X3VoYXNoX3QpICpwKys7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgbGVuOwotICAgIHggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LnN1ZmZpeDsKLSAgICBpZiAoeCA9PSAtMSkKLSAgICAgICAgeCA9IC0yOwotICAgIHJldHVybiB4OwotfQotCiBQeV9oYXNoX3QKIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZChQeU9iamVjdCAqdikKIHsKQEAgLTc4OCw4ICs3MzksNiBAQAogICAgIHJldHVybiAtMTsKIH0KIAotX1B5X0hhc2hTZWNyZXRfdCBfUHlfSGFzaFNlY3JldDsKLQogUHlfaGFzaF90CiBQeU9iamVjdF9IYXNoKFB5T2JqZWN0ICp2KQogewpAQCAtODU5LDcgKzgwOCw2IEBACiB7CiAgICAgaW50IHJlczsKICAgICBQeU9iamVjdCogaXNhYnN0cmFjdDsKLSAgICBfUHlfSURFTlRJRklFUihfX2lzYWJzdHJhY3RtZXRob2RfXyk7CiAKICAgICBpZiAob2JqID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTAzMiw4ICs5ODAsMTIgQEAKIFB5T2JqZWN0ICoKIF9QeU9iamVjdF9HZXRCdWlsdGluKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZCwgKmF0dHI7Ci0gICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJidWlsdGlucyIpOworICAgIFB5T2JqZWN0ICptb2RfbmFtZSwgKm1vZCwgKmF0dHI7CisKKyAgICBtb2RfbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2J1aWx0aW5zKTsgICAvKiBib3Jyb3dlZCAqLworICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnQobW9kX25hbWUpOwogICAgIGlmIChtb2QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXR0ciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobW9kLCBuYW1lKTsKQEAgLTEzMTcsMTIgKzEyNjksMTEgQEAKIF9kaXJfbG9jYWxzKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm5hbWVzOwotICAgIFB5T2JqZWN0ICpsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgUHlPYmplY3QgKmxvY2FsczsKIAotICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJmcmFtZSBkb2VzIG5vdCBleGlzdCIpOworICAgIGxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICBpZiAobG9jYWxzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KIAogICAgIG5hbWVzID0gUHlNYXBwaW5nX0tleXMobG9jYWxzKTsKICAgICBpZiAoIW5hbWVzKQpAQCAtMTM0Nyw3ICsxMjk4LDYgQEAKIF9kaXJfb2JqZWN0KFB5T2JqZWN0ICpvYmopCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKnNvcnRlZDsKLSAgICBfUHlfSURFTlRJRklFUihfX2Rpcl9fKTsKICAgICBQeU9iamVjdCAqZGlyZnVuYyA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG9iaiwgJlB5SWRfX19kaXJfXyk7CiAKICAgICBhc3NlcnQob2JqKTsKQEAgLTE1MTUsNiArMTQ2NSwxNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorTm90SW1wbGVtZW50ZWRfcmVkdWNlKFB5T2JqZWN0ICpvcCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIk5vdEltcGxlbWVudGVkIik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBub3RpbXBsZW1lbnRlZF9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKU5vdEltcGxlbWVudGVkX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5T2JqZWN0ICoKIG5vdGltcGxlbWVudGVkX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewogICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIHx8IChrd2FyZ3MgJiYgUHlEaWN0X1NpemUoa3dhcmdzKSkpIHsKQEAgLTE1MjQsMTIgKzE0ODUsMjEgQEAKICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CiB9CiAKK3N0YXRpYyB2b2lkCitub3RpbXBsZW1lbnRlZF9kZWFsbG9jKFB5T2JqZWN0KiBpZ25vcmUpCit7CisgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgZ2V0IGNhbGxlZCwgYnV0IHdlIGFsc28gZG9uJ3Qgd2FudCB0byBTRUdWIGlmCisgICAgICogd2UgYWNjaWRlbnRhbGx5IGRlY3JlZiBOb3RJbXBsZW1lbnRlZCBvdXQgb2YgZXhpc3RlbmNlLgorICAgICAqLworICAgIFB5X0ZhdGFsRXJyb3IoImRlYWxsb2NhdGluZyBOb3RJbXBsZW1lbnRlZCIpOworfQorCiBQeVR5cGVPYmplY3QgX1B5Tm90SW1wbGVtZW50ZWRfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJOb3RJbXBsZW1lbnRlZFR5cGUiLAogICAgIDAsCiAgICAgMCwKLSAgICBub25lX2RlYWxsb2MsICAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KKyAgICBub3RpbXBsZW1lbnRlZF9kZWFsbG9jLCAgICAgICAvKnRwX2RlYWxsb2MqLyAvKm5ldmVyIGNhbGxlZCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwpAQCAtMTU1Miw3ICsxNTIyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzICovCisgICAgbm90aW1wbGVtZW50ZWRfbWV0aG9kcywgLyp0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UgKi8KQEAgLTE2OTksMTUgKzE2NjksNiBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5TWVtYmVyRGVzY3JfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG1lbWJlciBkZXNjcmlwdG9yIHR5cGUiKTsKIAotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RmlsdGVyX1R5cGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBmaWx0ZXIgdHlwZSIpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlNYXBfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG1hcCB0eXBlIik7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVppcF9UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgemlwIHR5cGUiKTsKLQogICAgIGlmIChQeVR5cGVfUmVhZHkoJl9QeU5hbWVzcGFjZV9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbmFtZXNwYWNlIHR5cGUiKTsKIApAQCAtMTc0OSwxMCArMTcxMCwxMCBAQAogfQogCiB2b2lkCi1fUHlfRm9yZ2V0UmVmZXJlbmNlKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK19QeV9Gb3JnZXRSZWZlcmVuY2UoUHlPYmplY3QgKm9wKQogewogI2lmZGVmIFNMT1dfVU5SRUZfQ0hFQ0sKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcDsKKyAgICBQeU9iamVjdCAqcDsKICNlbmRpZgogICAgIGlmIChvcC0+b2JfcmVmY250IDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiVU5SRUYgbmVnYXRpdmUgcmVmY250Iik7CkBAIC0xODU2LDI2ICsxODE3LDYgQEAKIFB5X3NzaXplX3QgKCpfUHlfYWJzdHJhY3RfaGFjaykoUHlPYmplY3QgKikgPSBQeU9iamVjdF9TaXplOwogCiAKLS8qIFB5dGhvbidzIG1hbGxvYyB3cmFwcGVycyAoc2VlIHB5bWVtLmgpICovCi0KLXZvaWQgKgotUHlNZW1fTWFsbG9jKHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIFB5TWVtX01BTExPQyhuYnl0ZXMpOwotfQotCi12b2lkICoKLVB5TWVtX1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gUHlNZW1fUkVBTExPQyhwLCBuYnl0ZXMpOwotfQotCi12b2lkCi1QeU1lbV9GcmVlKHZvaWQgKnApCi17Ci0gICAgUHlNZW1fRlJFRShwKTsKLX0KLQogdm9pZAogX1B5T2JqZWN0X0RlYnVnVHlwZVN0YXRzKEZJTEUgKm91dCkKIHsKQEAgLTE4ODUsNyArMTgyNiw2IEBACiAgICAgX1B5RnJhbWVfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogICAgIF9QeUxpc3RfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogICAgIF9QeU1ldGhvZF9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7Ci0gICAgX1B5U2V0X0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKICAgICBfUHlUdXBsZV9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiB9CiAKQEAgLTE5MDEsOCArMTg0MSw2IEBACiAgICBTZWUgZGljdG9iamVjdC5jIGFuZCBsaXN0b2JqZWN0LmMgZm9yIGV4YW1wbGVzIG9mIHVzZS4KICovCiAKLSNkZWZpbmUgS0VZICJQeV9SZXByIgotCiBpbnQKIFB5X1JlcHJFbnRlcihQeU9iamVjdCAqb2JqKQogewpAQCAtMTkxMSwxNCArMTg0OSwxNiBAQAogICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGRpY3QgPSBQeVRocmVhZFN0YXRlX0dldERpY3QoKTsKKyAgICAvKiBJZ25vcmUgYSBtaXNzaW5nIHRocmVhZC1zdGF0ZSwgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQKKyAgICAgICBlYXJseSBvbiBzdGFydHVwLiAqLwogICAgIGlmIChkaWN0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGxpc3QgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkaWN0LCBLRVkpOworICAgIGxpc3QgPSBfUHlEaWN0X0dldEl0ZW1JZChkaWN0LCAmUHlJZF9QeV9SZXByKTsKICAgICBpZiAobGlzdCA9PSBOVUxMKSB7CiAgICAgICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgICAgICBpZiAobGlzdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgS0VZLCBsaXN0KSA8IDApCisgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChkaWN0LCAmUHlJZF9QeV9SZXByLCBsaXN0KSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKICAgICB9CkBAIC0xOTI3LDcgKzE4NjcsOCBAQAogICAgICAgICBpZiAoUHlMaXN0X0dFVF9JVEVNKGxpc3QsIGkpID09IG9iaikKICAgICAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBQeUxpc3RfQXBwZW5kKGxpc3QsIG9iaik7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgb2JqKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTkzNywxMyArMTg3OCwxOCBAQAogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIFB5T2JqZWN0ICpsaXN0OwogICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAKICAgICBkaWN0ID0gUHlUaHJlYWRTdGF0ZV9HZXREaWN0KCk7CiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIGxpc3QgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkaWN0LCBLRVkpOworICAgICAgICBnb3RvIGZpbmFsbHk7CisKKyAgICBsaXN0ID0gX1B5RGljdF9HZXRJdGVtSWQoZGljdCwgJlB5SWRfUHlfUmVwcik7CiAgICAgaWYgKGxpc3QgPT0gTlVMTCB8fCAhUHlMaXN0X0NoZWNrKGxpc3QpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gZmluYWxseTsKKwogICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7CiAgICAgLyogQ291bnQgYmFja3dhcmRzIGJlY2F1c2Ugd2UgYWx3YXlzIGV4cGVjdCBvYmogdG8gYmUgbGlzdFstMV0gKi8KICAgICB3aGlsZSAoLS1pID49IDApIHsKQEAgLTE5NTIsNiArMTg5OCwxMCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKK2ZpbmFsbHk6CisgICAgLyogaWdub3JlIGV4Y2VwdGlvbnMgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gcmVwb3J0IHRoZW0uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKIH0KIAogLyogVHJhc2hjYW4gc3VwcG9ydC4gKi8KQEAgLTE5NzIsNyArMTkyMiw3IEBACiBfUHlUcmFzaF9kZXBvc2l0X29iamVjdChQeU9iamVjdCAqb3ApCiB7CiAgICAgYXNzZXJ0KFB5T2JqZWN0X0lTX0dDKG9wKSk7Ci0gICAgYXNzZXJ0KF9QeV9BU19HQyhvcCktPmdjLmdjX3JlZnMgPT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIGFzc2VydChfUHlHQ19SRUZTKG9wKSA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CiAgICAgYXNzZXJ0KG9wLT5vYl9yZWZjbnQgPT0gMCk7CiAgICAgX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcHJldiA9IChQeUdDX0hlYWQgKilfUHlUcmFzaF9kZWxldGVfbGF0ZXI7CiAgICAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyID0gb3A7CkBAIC0xOTg0LDcgKzE5MzQsNyBAQAogewogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAgICAgYXNzZXJ0KFB5T2JqZWN0X0lTX0dDKG9wKSk7Ci0gICAgYXNzZXJ0KF9QeV9BU19HQyhvcCktPmdjLmdjX3JlZnMgPT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIGFzc2VydChfUHlHQ19SRUZTKG9wKSA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CiAgICAgYXNzZXJ0KG9wLT5vYl9yZWZjbnQgPT0gMCk7CiAgICAgX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcHJldiA9IChQeUdDX0hlYWQgKikgdHN0YXRlLT50cmFzaF9kZWxldGVfbGF0ZXI7CiAgICAgdHN0YXRlLT50cmFzaF9kZWxldGVfbGF0ZXIgPSBvcDsKZGlmZiAtLWdpdCBhL09iamVjdHMvb2JtYWxsb2MuYyBiL09iamVjdHMvb2JtYWxsb2MuYwppbmRleCBjMjYxYjY4Li4wMDRjZmFhIDEwMDY0NAotLS0gYS9PYmplY3RzL29ibWFsbG9jLmMKKysrIGIvT2JqZWN0cy9vYm1hbGxvYy5jCkBAIC0xLDE0ICsxLDM3NCBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCi0jaWZkZWYgV0lUSF9QWU1BTExPQworLyogUHl0aG9uJ3MgbWFsbG9jIHdyYXBwZXJzIChzZWUgcHltZW0uaCkgKi8KIAotI2lmZGVmIEhBVkVfTU1BUAotICNpbmNsdWRlIDxzeXMvbW1hbi5oPgotICNpZmRlZiBNQVBfQU5PTllNT1VTCi0gICNkZWZpbmUgQVJFTkFTX1VTRV9NTUFQCisjaWZkZWYgUFlNQUxMT0NfREVCVUcgICAvKiBXSVRIX1BZTUFMTE9DICYmIFBZTUFMTE9DX0RFQlVHICovCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCogX1B5TWVtX0RlYnVnTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApOworc3RhdGljIHZvaWQqIF9QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKworc3RhdGljIHZvaWQgX1B5T2JqZWN0X0RlYnVnRHVtcEFkZHJlc3MoY29uc3Qgdm9pZCAqcCk7CitzdGF0aWMgdm9pZCBfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoY2hhciBhcGlfaWQsIGNvbnN0IHZvaWQgKnApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9faGFzX2ZlYXR1cmUpICAvKiBDbGFuZyAqLworICNpZiBfX2hhc19mZWF0dXJlKGFkZHJlc3Nfc2FuaXRpemVyKSAgLyogaXMgQVNBTiBlbmFibGVkPyAqLworICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUyBcCisgICAgICAgIF9fYXR0cmlidXRlX18oKG5vX2FkZHJlc3Nfc2FmZXR5X2FuYWx5c2lzKSkgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICNlbHNlCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCisgI2VuZGlmCisjZWxzZQorICNpZiBkZWZpbmVkKF9fU0FOSVRJWkVfQUREUkVTU19fKSAgLyogR0NDIDQuOC54LCBpcyBBU0FOIGVuYWJsZWQ/ICovCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXygobm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXMpKSBcCisgICAgICAgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgI2Vsc2UKKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKICAjZW5kaWYKICNlbmRpZgogCisjaWZkZWYgV0lUSF9QWU1BTExPQworCisjaWZkZWYgTVNfV0lORE9XUworIyAgaW5jbHVkZSA8d2luZG93cy5oPgorI2VsaWYgZGVmaW5lZChIQVZFX01NQVApCisjICBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyAgaWZkZWYgTUFQX0FOT05ZTU9VUworIyAgICBkZWZpbmUgQVJFTkFTX1VTRV9NTUFQCisjICBlbmRpZgorI2VuZGlmCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkKiBfUHlPYmplY3RfTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgX1B5T2JqZWN0X0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkKiBfUHlPYmplY3RfUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworI2VuZGlmCisKKworc3RhdGljIHZvaWQgKgorX1B5TWVtX1Jhd01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIC8qIFB5TWVtX01hbGxvYygwKSBtZWFucyBtYWxsb2MoMSkuIFNvbWUgc3lzdGVtcyB3b3VsZCByZXR1cm4gTlVMTAorICAgICAgIGZvciBtYWxsb2MoMCksIHdoaWNoIHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuIFNvbWUgcGxhdGZvcm1zIHdvdWxkCisgICAgICAgcmV0dXJuIGEgcG9pbnRlciB3aXRoIG5vIG1lbW9yeSBiZWhpbmQgaXQsIHdoaWNoIHdvdWxkIGJyZWFrIHB5bWFsbG9jLgorICAgICAgIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHNpemUgPSAxOworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9SYXdSZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBzaXplID0gMTsKKyAgICByZXR1cm4gcmVhbGxvYyhwdHIsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorX1B5TWVtX1Jhd0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgZnJlZShwdHIpOworfQorCisKKyNpZmRlZiBNU19XSU5ET1dTCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFWaXJ0dWFsQWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gVmlydHVhbEFsbG9jKE5VTEwsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBNRU1fQ09NTUlUIHwgTUVNX1JFU0VSVkUsIFBBR0VfUkVBRFdSSVRFKTsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYVZpcnR1YWxGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBWaXJ0dWFsRnJlZShwdHIsIDAsIE1FTV9SRUxFQVNFKTsKK30KKworI2VsaWYgZGVmaW5lZChBUkVOQVNfVVNFX01NQVApCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFNbWFwKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqcHRyOworICAgIHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisgICAgaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBhc3NlcnQocHRyICE9IE5VTEwpOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlPYmplY3RfQXJlbmFNdW5tYXAodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIG11bm1hcChwdHIsIHNpemUpOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X0FyZW5hTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYUZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIGZyZWUocHRyKTsKK30KKyNlbmRpZgorCisKKyNkZWZpbmUgUFlSQVdfRlVOQ1MgX1B5TWVtX1Jhd01hbGxvYywgX1B5TWVtX1Jhd1JlYWxsb2MsIF9QeU1lbV9SYXdGcmVlCisjaWZkZWYgV0lUSF9QWU1BTExPQworIyAgZGVmaW5lIFBZT0JKX0ZVTkNTIF9QeU9iamVjdF9NYWxsb2MsIF9QeU9iamVjdF9SZWFsbG9jLCBfUHlPYmplY3RfRnJlZQorI2Vsc2UKKyMgIGRlZmluZSBQWU9CSl9GVU5DUyBQWVJBV19GVU5DUworI2VuZGlmCisjZGVmaW5lIFBZTUVNX0ZVTkNTIFBZUkFXX0ZVTkNTCisKKyNpZmRlZiBQWU1BTExPQ19ERUJVRwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIFdlIHRhZyBlYWNoIGJsb2NrIHdpdGggYW4gQVBJIElEIGluIG9yZGVyIHRvIHRhZyBBUEkgdmlvbGF0aW9ucyAqLworICAgIGNoYXIgYXBpX2lkOworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworfSBkZWJ1Z19hbGxvY19hcGlfdDsKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGRlYnVnX2FsbG9jX2FwaV90IHJhdzsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCBtZW07CisgICAgZGVidWdfYWxsb2NfYXBpX3Qgb2JqOworfSBfUHlNZW1fRGVidWcgPSB7CisgICAgeydyJywge05VTEwsIFBZUkFXX0ZVTkNTfX0sCisgICAgeydtJywge05VTEwsIFBZTUVNX0ZVTkNTfX0sCisgICAgeydvJywge05VTEwsIFBZT0JKX0ZVTkNTfX0KKyAgICB9OworCisjZGVmaW5lIFBZREJHX0ZVTkNTIF9QeU1lbV9EZWJ1Z01hbGxvYywgX1B5TWVtX0RlYnVnUmVhbGxvYywgX1B5TWVtX0RlYnVnRnJlZQorI2VuZGlmCisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlNZW1fUmF3ID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5yYXcsIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZUkFXX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCitzdGF0aWMgUHlNZW1BbGxvY2F0b3IgX1B5TWVtID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5tZW0sIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZTUVNX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCitzdGF0aWMgUHlNZW1BbGxvY2F0b3IgX1B5T2JqZWN0ID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5vYmosIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZT0JKX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCisjdW5kZWYgUFlSQVdfRlVOQ1MKKyN1bmRlZiBQWU1FTV9GVU5DUworI3VuZGVmIFBZT0JKX0ZVTkNTCisjdW5kZWYgUFlEQkdfRlVOQ1MKKworc3RhdGljIFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgX1B5T2JqZWN0X0FyZW5hID0ge05VTEwsCisjaWZkZWYgTVNfV0lORE9XUworICAgIF9QeU9iamVjdF9BcmVuYVZpcnR1YWxBbGxvYywgX1B5T2JqZWN0X0FyZW5hVmlydHVhbEZyZWUKKyNlbGlmIGRlZmluZWQoQVJFTkFTX1VTRV9NTUFQKQorICAgIF9QeU9iamVjdF9BcmVuYU1tYXAsIF9QeU9iamVjdF9BcmVuYU11bm1hcAorI2Vsc2UKKyAgICBfUHlPYmplY3RfQXJlbmFNYWxsb2MsIF9QeU9iamVjdF9BcmVuYUZyZWUKKyNlbmRpZgorICAgIH07CisKK3ZvaWQKK1B5TWVtX1NldHVwRGVidWdIb29rcyh2b2lkKQoreworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisKKyAgICBhbGxvYy5tYWxsb2MgPSBfUHlNZW1fRGVidWdNYWxsb2M7CisgICAgYWxsb2MucmVhbGxvYyA9IF9QeU1lbV9EZWJ1Z1JlYWxsb2M7CisgICAgYWxsb2MuZnJlZSA9IF9QeU1lbV9EZWJ1Z0ZyZWU7CisKKyAgICBpZiAoX1B5TWVtX1Jhdy5tYWxsb2MgIT0gX1B5TWVtX0RlYnVnTWFsbG9jKSB7CisgICAgICAgIGFsbG9jLmN0eCA9ICZfUHlNZW1fRGVidWcucmF3OworICAgICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJl9QeU1lbV9EZWJ1Zy5yYXcuYWxsb2MpOworICAgICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jKTsKKyAgICB9CisKKyAgICBpZiAoX1B5TWVtLm1hbGxvYyAhPSBfUHlNZW1fRGVidWdNYWxsb2MpIHsKKyAgICAgICAgYWxsb2MuY3R4ID0gJl9QeU1lbV9EZWJ1Zy5tZW07CisgICAgICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmX1B5TWVtX0RlYnVnLm1lbS5hbGxvYyk7CisgICAgICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2MpOworICAgIH0KKworICAgIGlmIChfUHlPYmplY3QubWFsbG9jICE9IF9QeU1lbV9EZWJ1Z01hbGxvYykgeworICAgICAgICBhbGxvYy5jdHggPSAmX1B5TWVtX0RlYnVnLm9iajsKKyAgICAgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZfUHlNZW1fRGVidWcub2JqLmFsbG9jKTsKKyAgICAgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZhbGxvYyk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQKK1B5TWVtX0dldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpCit7CisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiAqYWxsb2NhdG9yID0gX1B5TWVtX1JhdzsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiAqYWxsb2NhdG9yID0gX1B5TWVtOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6ICphbGxvY2F0b3IgPSBfUHlPYmplY3Q7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIHVua25vd24gZG9tYWluICovCisgICAgICAgIGFsbG9jYXRvci0+Y3R4ID0gTlVMTDsKKyAgICAgICAgYWxsb2NhdG9yLT5tYWxsb2MgPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPnJlYWxsb2MgPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPmZyZWUgPSBOVUxMOworICAgIH0KK30KKwordm9pZAorUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IF9QeU1lbV9SYXcgPSAqYWxsb2NhdG9yOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IF9QeU1lbSA9ICphbGxvY2F0b3I7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogX1B5T2JqZWN0ID0gKmFsbG9jYXRvcjsgYnJlYWs7CisgICAgLyogaWdub3JlIHVua25vd24gZG9tYWluICovCisgICAgfQorCit9CisKK3ZvaWQKK1B5T2JqZWN0X0dldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICAqYWxsb2NhdG9yID0gX1B5T2JqZWN0X0FyZW5hOworfQorCit2b2lkCitQeU9iamVjdF9TZXRBcmVuYUFsbG9jYXRvcihQeU9iamVjdEFyZW5hQWxsb2NhdG9yICphbGxvY2F0b3IpCit7CisgICAgX1B5T2JqZWN0X0FyZW5hID0gKmFsbG9jYXRvcjsKK30KKwordm9pZCAqCitQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgLyoKKyAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KKyAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjaworICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgorICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIHNpemUgPCAwIGlzIG5vdCByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeU1lbV9SYXcubWFsbG9jKF9QeU1lbV9SYXcuY3R4LCBzaXplKTsKK30KKwordm9pZCoKK1B5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbV9SYXcucmVhbGxvYyhfUHlNZW1fUmF3LmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3ZvaWQgUHlNZW1fUmF3RnJlZSh2b2lkICpwdHIpCit7CisgICAgX1B5TWVtX1Jhdy5mcmVlKF9QeU1lbV9SYXcuY3R4LCBwdHIpOworfQorCit2b2lkICoKK1B5TWVtX01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlNZW0ubWFsbG9jKF9QeU1lbS5jdHgsIHNpemUpOworfQorCit2b2lkICoKK1B5TWVtX1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbS5yZWFsbG9jKF9QeU1lbS5jdHgsIHB0ciwgbmV3X3NpemUpOworfQorCit2b2lkCitQeU1lbV9GcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlNZW0uZnJlZShfUHlNZW0uY3R4LCBwdHIpOworfQorCitjaGFyICoKK19QeU1lbV9SYXdTdHJkdXAoY29uc3QgY2hhciAqc3RyKQoreworICAgIHNpemVfdCBzaXplOworICAgIGNoYXIgKmNvcHk7CisKKyAgICBzaXplID0gc3RybGVuKHN0cikgKyAxOworICAgIGNvcHkgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZSk7CisgICAgaWYgKGNvcHkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbWVtY3B5KGNvcHksIHN0ciwgc2l6ZSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK2NoYXIgKgorX1B5TWVtX1N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciAqY29weTsKKworICAgIHNpemUgPSBzdHJsZW4oc3RyKSArIDE7CisgICAgY29weSA9IFB5TWVtX01hbGxvYyhzaXplKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtZW1jcHkoY29weSwgc3RyLCBzaXplKTsKKyAgICByZXR1cm4gY29weTsKK30KKwordm9pZCAqCitQeU9iamVjdF9NYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKHNpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5T2JqZWN0Lm1hbGxvYyhfUHlPYmplY3QuY3R4LCBzaXplKTsKK30KKwordm9pZCAqCitQeU9iamVjdF9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChuZXdfc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlPYmplY3QucmVhbGxvYyhfUHlPYmplY3QuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKwordm9pZAorUHlPYmplY3RfRnJlZSh2b2lkICpwdHIpCit7CisgICAgX1B5T2JqZWN0LmZyZWUoX1B5T2JqZWN0LmN0eCwgcHRyKTsKK30KKworCisjaWZkZWYgV0lUSF9QWU1BTExPQworCiAjaWZkZWYgV0lUSF9WQUxHUklORAogI2luY2x1ZGUgPHZhbGdyaW5kL3ZhbGdyaW5kLmg+CiAKQEAgLTUyNSw2ICs4ODUsMTUgQEAKIC8qIEhpZ2ggd2F0ZXIgbWFyayAobWF4IHZhbHVlIGV2ZXIgc2VlbikgZm9yIG5hcmVuYXNfY3VycmVudGx5X2FsbG9jYXRlZC4gKi8KIHN0YXRpYyBzaXplX3QgbmFyZW5hc19oaWdod2F0ZXIgPSAwOwogCitzdGF0aWMgUHlfc3NpemVfdCBfUHlfQWxsb2NhdGVkQmxvY2tzID0gMDsKKworUHlfc3NpemVfdAorX1B5X0dldEFsbG9jYXRlZEJsb2Nrcyh2b2lkKQoreworICAgIHJldHVybiBfUHlfQWxsb2NhdGVkQmxvY2tzOworfQorCisKIC8qIEFsbG9jYXRlIGEgbmV3IGFyZW5hLiAgSWYgd2UgcnVuIG91dCBvZiBtZW1vcnksIHJldHVybiBOVUxMLiAgRWxzZQogICogYWxsb2NhdGUgYSBuZXcgYXJlbmEsIGFuZCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgYW4gYXJlbmFfb2JqZWN0CiAgKiBkZXNjcmliaW5nIHRoZSBuZXcgYXJlbmEuICBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlIGNhbGxlciB3aWxsIHNldApAQCAtNTM2LDcgKzkwNSw2IEBACiAgICAgc3RydWN0IGFyZW5hX29iamVjdCogYXJlbmFvYmo7CiAgICAgdWludCBleGNlc3M7ICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgYWJvdmUgcG9vbCBhbGlnbm1lbnQgKi8KICAgICB2b2lkICphZGRyZXNzOwotICAgIGludCBlcnI7CiAKICNpZmRlZiBQWU1BTExPQ19ERUJVRwogICAgIGlmIChQeV9HRVRFTlYoIlBZVEhPTk1BTExPQ1NUQVRTIikpCkBAIC01NTgsNyArOTI2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBvdmVyZmxvdyAqLwogI2VuZGlmCiAgICAgICAgIG5ieXRlcyA9IG51bWFyZW5hcyAqIHNpemVvZigqYXJlbmFzKTsKLSAgICAgICAgYXJlbmFvYmogPSAoc3RydWN0IGFyZW5hX29iamVjdCAqKXJlYWxsb2MoYXJlbmFzLCBuYnl0ZXMpOworICAgICAgICBhcmVuYW9iaiA9IChzdHJ1Y3QgYXJlbmFfb2JqZWN0ICopUHlNZW1fUmF3UmVhbGxvYyhhcmVuYXMsIG5ieXRlcyk7CiAgICAgICAgIGlmIChhcmVuYW9iaiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGFyZW5hcyA9IGFyZW5hb2JqOwpAQCAtNTg5LDE1ICs5NTcsOCBAQAogICAgIGFyZW5hb2JqID0gdW51c2VkX2FyZW5hX29iamVjdHM7CiAgICAgdW51c2VkX2FyZW5hX29iamVjdHMgPSBhcmVuYW9iai0+bmV4dGFyZW5hOwogICAgIGFzc2VydChhcmVuYW9iai0+YWRkcmVzcyA9PSAwKTsKLSNpZmRlZiBBUkVOQVNfVVNFX01NQVAKLSAgICBhZGRyZXNzID0gbW1hcChOVUxMLCBBUkVOQV9TSVpFLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApOwotICAgIGVyciA9IChhZGRyZXNzID09IE1BUF9GQUlMRUQpOwotI2Vsc2UKLSAgICBhZGRyZXNzID0gbWFsbG9jKEFSRU5BX1NJWkUpOwotICAgIGVyciA9IChhZGRyZXNzID09IDApOwotI2VuZGlmCi0gICAgaWYgKGVycikgeworICAgIGFkZHJlc3MgPSBfUHlPYmplY3RfQXJlbmEuYWxsb2MoX1B5T2JqZWN0X0FyZW5hLmN0eCwgQVJFTkFfU0laRSk7CisgICAgaWYgKGFkZHJlc3MgPT0gTlVMTCkgewogICAgICAgICAvKiBUaGUgYWxsb2NhdGlvbiBmYWlsZWQ6IHJldHVybiBOVUxMIGFmdGVyIHB1dHRpbmcgdGhlCiAgICAgICAgICAqIGFyZW5hb2JqIGJhY2suCiAgICAgICAgICAqLwpAQCAtNzYwLDE1ICsxMTIxLDE2IEBACiAgKiBVbmxlc3MgdGhlIG9wdGltaXplciByZW9yZGVycyBldmVyeXRoaW5nLCBiZWluZyB0b28gc21hcnQuLi4KICAqLwogCi0jdW5kZWYgUHlPYmplY3RfTWFsbG9jCi12b2lkICoKLVB5T2JqZWN0X01hbGxvYyhzaXplX3QgbmJ5dGVzKQorc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuYnl0ZXMpCiB7CiAgICAgYmxvY2sgKmJwOwogICAgIHBvb2xwIHBvb2w7CiAgICAgcG9vbHAgbmV4dDsKICAgICB1aW50IHNpemU7CiAKKyAgICBfUHlfQWxsb2NhdGVkQmxvY2tzKys7CisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEpKQogICAgICAgICBydW5uaW5nX29uX3ZhbGdyaW5kID0gUlVOTklOR19PTl9WQUxHUklORDsKQEAgLTc3NywxNSArMTEzOSw2IEBACiAjZW5kaWYKIAogICAgIC8qCi0gICAgICogTGltaXQgb3Vyc2VsdmVzIHRvIFBZX1NTSVpFX1RfTUFYIGJ5dGVzIHRvIHByZXZlbnQgc2VjdXJpdHkgaG9sZXMuCi0gICAgICogTW9zdCBweXRob24gaW50ZXJuYWxzIGJsaW5kbHkgdXNlIGEgc2lnbmVkIFB5X3NzaXplX3QgdG8gdHJhY2sKLSAgICAgKiB0aGluZ3Mgd2l0aG91dCBjaGVja2luZyBmb3Igb3ZlcmZsb3dzIG9yIG5lZ2F0aXZlcy4KLSAgICAgKiBBcyBzaXplX3QgaXMgdW5zaWduZWQsIGNoZWNraW5nIGZvciBuYnl0ZXMgPCAwIGlzIG5vdCByZXF1aXJlZC4KLSAgICAgKi8KLSAgICBpZiAobmJ5dGVzID4gUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyoKICAgICAgKiBUaGlzIGltcGxpY2l0bHkgcmVkaXJlY3RzIG1hbGxvYygwKS4KICAgICAgKi8KICAgICBpZiAoKG5ieXRlcyAtIDEpIDwgU01BTExfUkVRVUVTVF9USFJFU0hPTEQpIHsKQEAgLTkwMSw2ICsxMjU0LDcgQEAKICAgICAgICAgICAgICAgICAgKiBhbmQgZnJlZSBsaXN0IGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLgogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGJwID0gcG9vbC0+ZnJlZWJsb2NrOworICAgICAgICAgICAgICAgIGFzc2VydChicCAhPSBOVUxMKTsKICAgICAgICAgICAgICAgICBwb29sLT5mcmVlYmxvY2sgPSAqKGJsb2NrICoqKWJwOwogICAgICAgICAgICAgICAgIFVOTE9DSygpOwogICAgICAgICAgICAgICAgIHJldHVybiAodm9pZCAqKWJwOwpAQCAtOTU2LDE2ICsxMzEwLDE5IEBACiAgICAgICogbGFzdCBjaGFuY2UgdG8gc2VydmUgdGhlIHJlcXVlc3QpIG9yIHdoZW4gdGhlIG1heCBtZW1vcnkgbGltaXQKICAgICAgKiBoYXMgYmVlbiByZWFjaGVkLgogICAgICAqLwotICAgIGlmIChuYnl0ZXMgPT0gMCkKLSAgICAgICAgbmJ5dGVzID0gMTsKLSAgICByZXR1cm4gKHZvaWQgKiltYWxsb2MobmJ5dGVzKTsKKyAgICB7CisgICAgICAgIHZvaWQgKnJlc3VsdCA9IFB5TWVtX1Jhd01hbGxvYyhuYnl0ZXMpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MtLTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiB9CiAKIC8qIGZyZWUgKi8KIAotI3VuZGVmIFB5T2JqZWN0X0ZyZWUKLXZvaWQKLVB5T2JqZWN0X0ZyZWUodm9pZCAqcCkKK0FUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUworc3RhdGljIHZvaWQKK19QeU9iamVjdF9GcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCkKIHsKICAgICBwb29scCBwb29sOwogICAgIGJsb2NrICpsYXN0ZnJlZTsKQEAgLTk3OCw2ICsxMzM1LDggQEAKICAgICBpZiAocCA9PSBOVUxMKSAgICAgIC8qIGZyZWUoTlVMTCkgaGFzIG5vIGVmZmVjdCAqLwogICAgICAgICByZXR1cm47CiAKKyAgICBfUHlfQWxsb2NhdGVkQmxvY2tzLS07CisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPiAwKSkKICAgICAgICAgZ290byByZWRpcmVjdDsKQEAgLTEwNzIsMTEgKzE0MzEsOCBAQAogICAgICAgICAgICAgICAgIHVudXNlZF9hcmVuYV9vYmplY3RzID0gYW87CiAKICAgICAgICAgICAgICAgICAvKiBGcmVlIHRoZSBlbnRpcmUgYXJlbmEuICovCi0jaWZkZWYgQVJFTkFTX1VTRV9NTUFQCi0gICAgICAgICAgICAgICAgbXVubWFwKCh2b2lkICopYW8tPmFkZHJlc3MsIEFSRU5BX1NJWkUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBmcmVlKCh2b2lkICopYW8tPmFkZHJlc3MpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgX1B5T2JqZWN0X0FyZW5hLmZyZWUoX1B5T2JqZWN0X0FyZW5hLmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFvLT5hZGRyZXNzLCBBUkVOQV9TSVpFKTsKICAgICAgICAgICAgICAgICBhby0+YWRkcmVzcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWFyayB1bmFzc29jaWF0ZWQgKi8KICAgICAgICAgICAgICAgICAtLW5hcmVuYXNfY3VycmVudGx5X2FsbG9jYXRlZDsKIApAQCAtMTE4NSw3ICsxNTQxLDcgQEAKIHJlZGlyZWN0OgogI2VuZGlmCiAgICAgLyogV2UgZGlkbid0IGFsbG9jYXRlIHRoaXMgYWRkcmVzcy4gKi8KLSAgICBmcmVlKHApOworICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiB9CiAKIC8qIHJlYWxsb2MuICBJZiBwIGlzIE5VTEwsIHRoaXMgYWN0cyBsaWtlIG1hbGxvYyhuYnl0ZXMpLiAgRWxzZSBpZiBuYnl0ZXM9PTAsCkBAIC0xMTkzLDkgKzE1NDksOSBAQAogICogcmV0dXJuIGEgbm9uLU5VTEwgcmVzdWx0LgogICovCiAKLSN1bmRlZiBQeU9iamVjdF9SZWFsbG9jCi12b2lkICoKLVB5T2JqZWN0X1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK0FUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUworc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQogewogICAgIHZvaWQgKmJwOwogICAgIHBvb2xwIHBvb2w7CkBAIC0xMjA1LDE2ICsxNTYxLDcgQEAKICNlbmRpZgogCiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X01hbGxvYyhuYnl0ZXMpOwotCi0gICAgLyoKLSAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KLSAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawotICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgotICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIG5ieXRlcyA8IDAgaXMgbm90IHJlcXVpcmVkLgotICAgICAqLwotICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBfUHlPYmplY3RfTWFsbG9jKGN0eCwgbmJ5dGVzKTsKIAogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICAvKiBUcmVhdCBydW5uaW5nX29uX3ZhbGdyaW5kID09IC0xIHRoZSBzYW1lIGFzIDAgKi8KQEAgLTEyNDIsMTAgKzE1ODksMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNpemUgPSBuYnl0ZXM7CiAgICAgICAgIH0KLSAgICAgICAgYnAgPSBQeU9iamVjdF9NYWxsb2MobmJ5dGVzKTsKKyAgICAgICAgYnAgPSBfUHlPYmplY3RfTWFsbG9jKGN0eCwgbmJ5dGVzKTsKICAgICAgICAgaWYgKGJwICE9IE5VTEwpIHsKICAgICAgICAgICAgIG1lbWNweShicCwgcCwgc2l6ZSk7Ci0gICAgICAgICAgICBQeU9iamVjdF9GcmVlKHApOworICAgICAgICAgICAgX1B5T2JqZWN0X0ZyZWUoY3R4LCBwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYnA7CiAgICAgfQpAQCAtMTI2MywxNCArMTYxMCwxNCBAQAogICAgICAqIGF0IHAuICBJbnN0ZWFkIHdlIHB1bnQ6ICBsZXQgQyBjb250aW51ZSB0byBtYW5hZ2UgdGhpcyBibG9jay4KICAgICAgKi8KICAgICBpZiAobmJ5dGVzKQotICAgICAgICByZXR1cm4gcmVhbGxvYyhwLCBuYnl0ZXMpOworICAgICAgICByZXR1cm4gUHlNZW1fUmF3UmVhbGxvYyhwLCBuYnl0ZXMpOwogICAgIC8qIEMgZG9lc24ndCBkZWZpbmUgdGhlIHJlc3VsdCBvZiByZWFsbG9jKHAsIDApIChpdCBtYXkgb3IgbWF5IG5vdAogICAgICAqIHJldHVybiBOVUxMIHRoZW4pLCBidXQgUHl0aG9uJ3MgZG9jcyBwcm9taXNlIHRoYXQgbmJ5dGVzPT0wIG5ldmVyCiAgICAgICogcmV0dXJucyBOVUxMLiAgV2UgZG9uJ3QgcGFzcyAwIHRvIHJlYWxsb2MoKSwgdG8gYXZvaWQgdGhhdCBlbmRjYXNlCiAgICAgICogdG8gYmVnaW4gd2l0aC4gIEV2ZW4gdGhlbiwgd2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHJlYWxsb2MoKSB3b24ndAogICAgICAqIHJldHVybiBOVUxMLgogICAgICAqLwotICAgIGJwID0gcmVhbGxvYyhwLCAxKTsKKyAgICBicCA9IFB5TWVtX1Jhd1JlYWxsb2MocCwgMSk7CiAgICAgcmV0dXJuIGJwID8gYnAgOiBwOwogfQogCkBAIC0xMjgwLDIzICsxNjI3LDEyIEBACiAvKiBweW1hbGxvYyBub3QgZW5hYmxlZDogIFJlZGlyZWN0IHRoZSBlbnRyeSBwb2ludHMgdG8gbWFsbG9jLiAgVGhlc2Ugd2lsbAogICogb25seSBiZSB1c2VkIGJ5IGV4dGVuc2lvbnMgdGhhdCBhcmUgY29tcGlsZWQgd2l0aCBweW1hbGxvYyBlbmFibGVkLiAqLwogCi12b2lkICoKLVB5T2JqZWN0X01hbGxvYyhzaXplX3QgbikKK1B5X3NzaXplX3QKK19QeV9HZXRBbGxvY2F0ZWRCbG9ja3Modm9pZCkKIHsKLSAgICByZXR1cm4gUHlNZW1fTUFMTE9DKG4pOworICAgIHJldHVybiAwOwogfQogCi12b2lkICoKLVB5T2JqZWN0X1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG4pCi17Ci0gICAgcmV0dXJuIFB5TWVtX1JFQUxMT0MocCwgbik7Ci19Ci0KLXZvaWQKLVB5T2JqZWN0X0ZyZWUodm9pZCAqcCkKLXsKLSAgICBQeU1lbV9GUkVFKHApOwotfQogI2VuZGlmIC8qIFdJVEhfUFlNQUxMT0MgKi8KIAogI2lmZGVmIFBZTUFMTE9DX0RFQlVHCkBAIC0xMzE2LDEwICsxNjUyLDYgQEAKICNkZWZpbmUgREVBREJZVEUgICAgICAgMHhEQiAgICAvKiBkZWFkIChuZXdseSBmcmVlZCkgbWVtb3J5ICovCiAjZGVmaW5lIEZPUkJJRERFTkJZVEUgIDB4RkIgICAgLyogdW50b3VjaGFibGUgYnl0ZXMgYXQgZWFjaCBlbmQgb2YgYSBibG9jayAqLwogCi0vKiBXZSB0YWcgZWFjaCBibG9jayB3aXRoIGFuIEFQSSBJRCBpbiBvcmRlciB0byB0YWcgQVBJIHZpb2xhdGlvbnMgKi8KLSNkZWZpbmUgX1BZTUFMTE9DX01FTV9JRCAnbScgICAvKiB0aGUgUHlNZW1fTWFsbG9jKCkgQVBJICovCi0jZGVmaW5lIF9QWU1BTExPQ19PQkpfSUQgJ28nICAgLyogVGhlIFB5T2JqZWN0X01hbGxvYygpIEFQSSAqLwotCiBzdGF0aWMgc2l6ZV90IHNlcmlhbG5vID0gMDsgICAgIC8qIGluY3JlbWVudGVkIG9uIGVhY2ggZGVidWcge20scmV9YWxsb2MgKi8KIAogLyogc2VyaWFsbm8gaXMgYWx3YXlzIGluY3JlbWVudGVkIHZpYSBjYWxsaW5nIHRoaXMgcm91dGluZS4gIFRoZSBwb2ludCBpcwpAQCAtMTM5Miw3ICsxNzI0LDkgQEAKIHBbMDogU10KICAgICBOdW1iZXIgb2YgYnl0ZXMgb3JpZ2luYWxseSBhc2tlZCBmb3IuICBUaGlzIGlzIGEgc2l6ZV90LCBiaWctZW5kaWFuIChlYXNpZXIKICAgICB0byByZWFkIGluIGEgbWVtb3J5IGR1bXApLgotcFtTOiAyKlNdCitwW1NdCisgICAgQVBJIElELiAgU2VlIFBFUCA0NDUuICBUaGlzIGlzIGEgY2hhcmFjdGVyLCBidXQgc2VlbXMgdW5kb2N1bWVudGVkLgorcFtTKzE6IDIqU10KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggdW5kZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzIqUzogMipTK25dCiAgICAgVGhlIHJlcXVlc3RlZCBtZW1vcnksIGZpbGxlZCB3aXRoIGNvcGllcyBvZiBDTEVBTkJZVEUuCkBAIC0xNDAyLDU4ICsxNzM2LDE4IEBACiBwWzIqUytuOiAyKlMrbitTXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCBvdmVyLSB3cml0ZXMgYW5kIHJlYWRzLgogcFsyKlMrbitTOiAyKlMrbisyKlNdCi0gICAgQSBzZXJpYWwgbnVtYmVyLCBpbmNyZW1lbnRlZCBieSAxIG9uIGVhY2ggY2FsbCB0byBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSAgICBhbmQgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYy4KKyAgICBBIHNlcmlhbCBudW1iZXIsIGluY3JlbWVudGVkIGJ5IDEgb24gZWFjaCBjYWxsIHRvIF9QeU1lbV9EZWJ1Z01hbGxvYworICAgIGFuZCBfUHlNZW1fRGVidWdSZWFsbG9jLgogICAgIFRoaXMgaXMgYSBiaWctZW5kaWFuIHNpemVfdC4KICAgICBJZiAiYmFkIG1lbW9yeSIgaXMgZGV0ZWN0ZWQgbGF0ZXIsIHRoZSBzZXJpYWwgbnVtYmVyIGdpdmVzIGFuCiAgICAgZXhjZWxsZW50IHdheSB0byBzZXQgYSBicmVha3BvaW50IG9uIHRoZSBuZXh0IHJ1biwgdG8gY2FwdHVyZSB0aGUKICAgICBpbnN0YW50IGF0IHdoaWNoIHRoaXMgYmxvY2sgd2FzIHBhc3NlZCBvdXQuCiAqLwogCi0vKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU1lbV8qIG1lbW9yeSBBUEkgKi8KLXZvaWQgKgotX1B5TWVtX0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3QgbmJ5dGVzKQogewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgbmJ5dGVzKTsKLX0KLXZvaWQgKgotX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKF9QWU1BTExPQ19NRU1fSUQsIHAsIG5ieXRlcyk7Ci19Ci12b2lkCi1fUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShfUFlNQUxMT0NfTUVNX0lELCBwKTsKLX0KLQotLyogZGVidWcgcmVwbGFjZW1lbnRzIGZvciB0aGUgUHlPYmplY3RfKiBtZW1vcnkgQVBJICovCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgbmJ5dGVzKTsKLX0KLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKF9QWU1BTExPQ19PQkpfSUQsIHAsIG5ieXRlcyk7Ci19Ci12b2lkCi1fUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShfUFlNQUxMT0NfT0JKX0lELCBwKTsKLX0KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzcyhjb25zdCB2b2lkICpwKQotewotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShfUFlNQUxMT0NfT0JKX0lELCBwKTsKLX0KLQotCi0vKiBnZW5lcmljIGRlYnVnIG1lbW9yeSBhcGksIHdpdGggYW4gImlkIiB0byBpZGVudGlmeSB0aGUgQVBJIGluIHVzZSAqLwotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoY2hhciBpZCwgc2l6ZV90IG5ieXRlcykKLXsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OwogICAgIHVjaGFyICpwOyAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzIG9mIG1hbGxvYydlZCBibG9jayAqLwogICAgIHVjaGFyICp0YWlsOyAgICAgICAgLyogcCArIDIqU1NUICsgbmJ5dGVzID09IHBvaW50ZXIgdG8gdGFpbCBwYWQgYnl0ZXMgKi8KICAgICBzaXplX3QgdG90YWw7ICAgICAgIC8qIG5ieXRlcyArIDQqU1NUICovCkBAIC0xNDY0LDE0ICsxNzU4LDE0IEBACiAgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgc2l6ZV90ICovCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcCA9ICh1Y2hhciAqKVB5T2JqZWN0X01hbGxvYyh0b3RhbCk7CisgICAgcCA9ICh1Y2hhciAqKWFwaS0+YWxsb2MubWFsbG9jKGFwaS0+YWxsb2MuY3R4LCB0b3RhbCk7CiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBhdCBwLCB3cml0ZSBzaXplIChTU1QgYnl0ZXMpLCBpZCAoMSBieXRlKSwgcGFkIChTU1QtMSBieXRlcykgKi8KICAgICB3cml0ZV9zaXplX3QocCwgbmJ5dGVzKTsKLSAgICBwW1NTVF0gPSAodWNoYXIpaWQ7Ci0gICAgbWVtc2V0KHAgKyBTU1QgKyAxICwgRk9SQklEREVOQllURSwgU1NULTEpOworICAgIHBbU1NUXSA9ICh1Y2hhcilhcGktPmFwaV9pZDsKKyAgICBtZW1zZXQocCArIFNTVCArIDEsIEZPUkJJRERFTkJZVEUsIFNTVC0xKTsKIAogICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICBtZW1zZXQocCArIDIqU1NULCBDTEVBTkJZVEUsIG5ieXRlcyk7CkBAIC0xNDg5LDM1ICsxNzgzLDM3IEBACiAgICBUaGVuIGZpbGxzIHRoZSBvcmlnaW5hbCBieXRlcyB3aXRoIERFQURCWVRFLgogICAgVGhlbiBjYWxscyB0aGUgdW5kZXJseWluZyBmcmVlLgogKi8KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApCitzdGF0aWMgdm9pZAorX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApCiB7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgKmFwaSA9IChkZWJ1Z19hbGxvY19hcGlfdCAqKWN0eDsKICAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXAgLSAyKlNTVDsgIC8qIGFkZHJlc3MgcmV0dXJuZWQgZnJvbSBtYWxsb2MgKi8KICAgICBzaXplX3QgbmJ5dGVzOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShhcGksIHApOworICAgIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhhcGktPmFwaV9pZCwgcCk7CiAgICAgbmJ5dGVzID0gcmVhZF9zaXplX3QocSk7CiAgICAgbmJ5dGVzICs9IDQqU1NUOwogICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICBtZW1zZXQocSwgREVBREJZVEUsIG5ieXRlcyk7Ci0gICAgUHlPYmplY3RfRnJlZShxKTsKKyAgICBhcGktPmFsbG9jLmZyZWUoYXBpLT5hbGxvYy5jdHgsIHEpOwogfQogCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoY2hhciBhcGksIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKIHsKLSAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXA7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgKmFwaSA9IChkZWJ1Z19hbGxvY19hcGlfdCAqKWN0eDsKKyAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXAsICpvbGRxOwogICAgIHVjaGFyICp0YWlsOwogICAgIHNpemVfdCB0b3RhbDsgICAgICAgLyogbmJ5dGVzICsgNCpTU1QgKi8KICAgICBzaXplX3Qgb3JpZ2luYWxfbmJ5dGVzOwogICAgIGludCBpOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShhcGksIG5ieXRlcyk7CisgICAgICAgIHJldHVybiBfUHlNZW1fRGVidWdNYWxsb2MoY3R4LCBuYnl0ZXMpOwogCi0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CisgICAgX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGFwaS0+YXBpX2lkLCBwKTsKICAgICBidW1wc2VyaWFsbm8oKTsKICAgICBvcmlnaW5hbF9uYnl0ZXMgPSByZWFkX3NpemVfdChxIC0gMipTU1QpOwogICAgIHRvdGFsID0gbmJ5dGVzICsgNCpTU1Q7CkBAIC0xNTI1LDI0ICsxODIxLDI2IEBACiAgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgc2l6ZV90ICovCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKG5ieXRlcyA8IG9yaWdpbmFsX25ieXRlcykgewotICAgICAgICAvKiBzaHJpbmtpbmc6ICBtYXJrIG9sZCBleHRyYSBtZW1vcnkgZGVhZCAqLwotICAgICAgICBtZW1zZXQocSArIG5ieXRlcywgREVBREJZVEUsIG9yaWdpbmFsX25ieXRlcyAtIG5ieXRlcyArIDIqU1NUKTsKLSAgICB9Ci0KICAgICAvKiBSZXNpemUgYW5kIGFkZCBkZWNvcmF0aW9ucy4gV2UgbWF5IGdldCBhIG5ldyBwb2ludGVyIGhlcmUsIGluIHdoaWNoCiAgICAgICogY2FzZSB3ZSBkaWRuJ3QgZ2V0IHRoZSBjaGFuY2UgdG8gbWFyayB0aGUgb2xkIG1lbW9yeSB3aXRoIERFQURCWVRFLAogICAgICAqIGJ1dCB3ZSBsaXZlIHdpdGggdGhhdC4KICAgICAgKi8KLSAgICBxID0gKHVjaGFyICopUHlPYmplY3RfUmVhbGxvYyhxIC0gMipTU1QsIHRvdGFsKTsKKyAgICBvbGRxID0gcTsKKyAgICBxID0gKHVjaGFyICopYXBpLT5hbGxvYy5yZWFsbG9jKGFwaS0+YWxsb2MuY3R4LCBxIC0gMipTU1QsIHRvdGFsKTsKICAgICBpZiAocSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChxID09IG9sZHEgJiYgbmJ5dGVzIDwgb3JpZ2luYWxfbmJ5dGVzKSB7CisgICAgICAgIC8qIHNocmlua2luZzogIG1hcmsgb2xkIGV4dHJhIG1lbW9yeSBkZWFkICovCisgICAgICAgIG1lbXNldChxICsgbmJ5dGVzLCBERUFEQllURSwgb3JpZ2luYWxfbmJ5dGVzIC0gbmJ5dGVzKTsKKyAgICB9CisKICAgICB3cml0ZV9zaXplX3QocSwgbmJ5dGVzKTsKLSAgICBhc3NlcnQocVtTU1RdID09ICh1Y2hhcilhcGkpOworICAgIGFzc2VydChxW1NTVF0gPT0gKHVjaGFyKWFwaS0+YXBpX2lkKTsKICAgICBmb3IgKGkgPSAxOyBpIDwgU1NUOyArK2kpCiAgICAgICAgIGFzc2VydChxW1NTVCArIGldID09IEZPUkJJRERFTkJZVEUpOwogICAgIHEgKz0gMipTU1Q7CisKICAgICB0YWlsID0gcSArIG5ieXRlczsKICAgICBtZW1zZXQodGFpbCwgRk9SQklEREVOQllURSwgU1NUKTsKICAgICB3cml0ZV9zaXplX3QodGFpbCArIFNTVCwgc2VyaWFsbm8pOwpAQCAtMTU2MSw4ICsxODU5LDggQEAKICAqIGFuZCBjYWxsIFB5X0ZhdGFsRXJyb3IgdG8ga2lsbCB0aGUgcHJvZ3JhbS4KICAqIFRoZSBBUEkgaWQsIGlzIGFsc28gY2hlY2tlZC4KICAqLwotIHZvaWQKLV9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShjaGFyIGFwaSwgY29uc3Qgdm9pZCAqcCkKK3N0YXRpYyB2b2lkCitfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApCiB7CiAgICAgY29uc3QgdWNoYXIgKnEgPSAoY29uc3QgdWNoYXIgKilwOwogICAgIGNoYXIgbXNnYnVmWzY0XTsKQEAgLTE2MTQsNyArMTkxMiw3IEBACiB9CiAKIC8qIERpc3BsYXkgaW5mbyB0byBzdGRlcnIgYWJvdXQgdGhlIG1lbW9yeSBibG9jayBhdCBwLiAqLwotdm9pZAorc3RhdGljIHZvaWQKIF9QeU9iamVjdF9EZWJ1Z0R1bXBBZGRyZXNzKGNvbnN0IHZvaWQgKnApCiB7CiAgICAgY29uc3QgdWNoYXIgKnEgPSAoY29uc3QgdWNoYXIgKilwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9yYW5nZW9iamVjdC5jIGIvT2JqZWN0cy9yYW5nZW9iamVjdC5jCmluZGV4IGYyMDMwYzMuLmQ2YjQyNzkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvcmFuZ2VvYmplY3QuYworKysgYi9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKQEAgLTMxOCwxOTUgKzMxOCw2IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotLyogQWRkaXRpb25hbCBoZWxwZXJzLCBzaW5jZSB0aGUgc3RhbmRhcmQgc2xpY2UgaGVscGVycwotICogYWxsIGNsaXAgdG8gUFlfU1NJWkVfVF9NQVgKLSAqLwotCi0vKiBSZXBsYWNlIF9QeUV2YWxfU2xpY2VJbmRleCAqLwotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXB1dGVfc2xpY2VfZWxlbWVudChQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIGlmIChvYmogIT0gTlVMTCkgewotICAgICAgICBpZiAoUHlJbmRleF9DaGVjayhvYmopKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9JbmRleChvYmopOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBSZXBsYWNlIFB5U2xpY2VfR2V0SW5kaWNlc0V4Ci0gKiAgIFJlc3VsdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHNsaWNlIGlzIGVtcHR5Ci0gKiAgICAoLTEgPSBlcnJvciwgMCA9IGVtcHR5IHNsaWNlLCAxID0gc2xpY2UgY29udGFpbnMgZWxlbWVudHMpCi0gKi8KLXN0YXRpYyBpbnQKLWNvbXB1dGVfc2xpY2VfaW5kaWNlcyhyYW5nZW9iamVjdCAqciwgUHlTbGljZU9iamVjdCAqc2xpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydCwgUHlPYmplY3QgKipzdG9wLCBQeU9iamVjdCAqKnN0ZXApCi17Ci0gICAgaW50IGNtcF9yZXN1bHQsIGhhc19lbGVtZW50czsKLSAgICBQeV9zc2l6ZV90IGNsYW1wZWRfc3RlcCA9IDA7Ci0gICAgUHlPYmplY3QgKnplcm8gPSBOVUxMLCAqb25lID0gTlVMTCwgKm5lZ19vbmUgPSBOVUxMLCAqY2FuZGlkYXRlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdG1wX3N0YXJ0ID0gTlVMTCwgKnRtcF9zdG9wID0gTlVMTCwgKnRtcF9zdGVwID0gTlVMTDsKLSAgICB6ZXJvID0gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICh6ZXJvID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMSk7Ci0gICAgaWYgKG9uZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgbmVnX29uZSA9IFB5TG9uZ19Gcm9tTG9uZygtMSk7Ci0gICAgaWYgKG5lZ19vbmUgPT0gTlVMTCkgZ290byBGYWlsOwotCi0gICAgLyogQ2FsY3VsYXRlIHN0ZXAgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0ZXAgPT0gUHlfTm9uZSkgewotICAgICAgICBjbGFtcGVkX3N0ZXAgPSAxOwotICAgICAgICB0bXBfc3RlcCA9IG9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGVwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIV9QeUV2YWxfU2xpY2VJbmRleChzbGljZS0+c3RlcCwgJmNsYW1wZWRfc3RlcCkpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA9PSAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpOwotICAgICAgICAgICAgZ290byBGYWlsOwotICAgICAgICB9Ci0gICAgICAgIHRtcF9zdGVwID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdGVwKTsKLSAgICAgICAgaWYgKHRtcF9zdGVwID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICB9Ci0KLSAgICAvKiBDYWxjdWxhdGUgc3RhcnQgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0YXJ0ID09IFB5X05vbmUpIHsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgIHRtcF9zdGFydCA9IFB5TnVtYmVyX1N1YnRyYWN0KHItPmxlbmd0aCwgb25lKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gemVybzsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FuZGlkYXRlID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdGFydCk7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNhbmRpZGF0ZSwgemVybywgUHlfTFQpOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlIDwgMCAqLwotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfQWRkKHItPmxlbmd0aCwgY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgUHlfQ0xFQVIoY2FuZGlkYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA+PSAwICovCi0gICAgICAgICAgICB0bXBfc3RhcnQgPSBjYW5kaWRhdGU7Ci0gICAgICAgICAgICBjYW5kaWRhdGUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RhcnQgPCAwICovCi0gICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RhcnQpOwotICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSBuZWdfb25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSB6ZXJvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RhcnQgPj0gMCAqLwotICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHItPmxlbmd0aCwgUHlfR0UpOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLyogdG1wX3N0YXJ0ID49IHItPmxlbmd0aCAqLwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3N0YXJ0ID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSByLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIENhbGN1bGF0ZSBzdG9wIHZhbHVlICovCi0gICAgaWYgKHNsaWNlLT5zdG9wID09IFB5X05vbmUpIHsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgIHRtcF9zdG9wID0gbmVnX29uZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRtcF9zdG9wID0gci0+bGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FuZGlkYXRlID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdG9wKTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY2FuZGlkYXRlLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPCAwICovCi0gICAgICAgICAgICB0bXBfc3RvcCA9IFB5TnVtYmVyX0FkZChyLT5sZW5ndGgsIGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgICBpZiAodG1wX3N0b3AgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgUHlfQ0xFQVIoY2FuZGlkYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA+PSAwICovCi0gICAgICAgICAgICB0bXBfc3RvcCA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RvcCwgemVybywgUHlfTFQpOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgLyogdG1wX3N0b3AgPCAwICovCi0gICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RvcCk7Ci0gICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gbmVnX29uZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0b3AgPSB6ZXJvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdG9wID49IDAgKi8KLSAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0b3AsIHItPmxlbmd0aCwgUHlfR0UpOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLyogdG1wX3N0b3AgPj0gci0+bGVuZ3RoICovCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0b3ApOwotICAgICAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3N0b3AgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gci0+bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIENoZWNrIGlmIHRoZSBzbGljZSBpcyBlbXB0eSBvciBub3QgKi8KLSAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICBoYXNfZWxlbWVudHMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB0bXBfc3RvcCwgUHlfR1QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGhhc19lbGVtZW50cyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHRtcF9zdG9wLCBQeV9MVCk7Ci0gICAgfQotICAgIGlmIChoYXNfZWxlbWVudHMgPT0gLTEpIGdvdG8gRmFpbDsKLQotICAgICpzdGFydCA9IHRtcF9zdGFydDsKLSAgICAqc3RvcCA9IHRtcF9zdG9wOwotICAgICpzdGVwID0gdG1wX3N0ZXA7Ci0gICAgUHlfREVDUkVGKG5lZ19vbmUpOwotICAgIFB5X0RFQ1JFRihvbmUpOwotICAgIFB5X0RFQ1JFRih6ZXJvKTsKLSAgICByZXR1cm4gaGFzX2VsZW1lbnRzOwotCi0gIEZhaWw6Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RhcnQpOwotICAgIFB5X1hERUNSRUYodG1wX3N0b3ApOwotICAgIFB5X1hERUNSRUYodG1wX3N0ZXApOwotICAgIFB5X1hERUNSRUYoY2FuZGlkYXRlKTsKLSAgICBQeV9YREVDUkVGKG5lZ19vbmUpOwotICAgIFB5X1hERUNSRUYob25lKTsKLSAgICBQeV9YREVDUkVGKHplcm8pOwotICAgIHJldHVybiAtMTsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICoKIGNvbXB1dGVfc2xpY2UocmFuZ2VvYmplY3QgKnIsIFB5T2JqZWN0ICpfc2xpY2UpCiB7CkBAIC01MTQsMTAgKzMyNSwxMSBAQAogICAgIHJhbmdlb2JqZWN0ICpyZXN1bHQ7CiAgICAgUHlPYmplY3QgKnN0YXJ0ID0gTlVMTCwgKnN0b3AgPSBOVUxMLCAqc3RlcCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnN1YnN0YXJ0ID0gTlVMTCwgKnN1YnN0b3AgPSBOVUxMLCAqc3Vic3RlcCA9IE5VTEw7Ci0gICAgaW50IGhhc19lbGVtZW50czsKKyAgICBpbnQgZXJyb3I7CiAKLSAgICBoYXNfZWxlbWVudHMgPSBjb21wdXRlX3NsaWNlX2luZGljZXMociwgc2xpY2UsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKLSAgICBpZiAoaGFzX2VsZW1lbnRzID09IC0xKSByZXR1cm4gTlVMTDsKKyAgICBlcnJvciA9IF9QeVNsaWNlX0dldExvbmdJbmRpY2VzKHNsaWNlLCByLT5sZW5ndGgsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKKyAgICBpZiAoZXJyb3IgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc3Vic3RlcCA9IFB5TnVtYmVyX011bHRpcGx5KHItPnN0ZXAsIHN0ZXApOwogICAgIGlmIChzdWJzdGVwID09IE5VTEwpIGdvdG8gZmFpbDsKQEAgLTUyNywxMyArMzM5LDggQEAKICAgICBpZiAoc3Vic3RhcnQgPT0gTlVMTCkgZ290byBmYWlsOwogICAgIFB5X0NMRUFSKHN0YXJ0KTsKIAotICAgIGlmIChoYXNfZWxlbWVudHMpIHsKLSAgICAgICAgc3Vic3RvcCA9IGNvbXB1dGVfaXRlbShyLCBzdG9wKTsKLSAgICAgICAgaWYgKHN1YnN0b3AgPT0gTlVMTCkgZ290byBmYWlsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1YnN0b3AgPSBzdWJzdGFydDsKLSAgICAgICAgUHlfSU5DUkVGKHN1YnN0b3ApOwotICAgIH0KKyAgICBzdWJzdG9wID0gY29tcHV0ZV9pdGVtKHIsIHN0b3ApOworICAgIGlmIChzdWJzdG9wID09IE5VTEwpIGdvdG8gZmFpbDsKICAgICBQeV9DTEVBUihzdG9wKTsKIAogICAgIHJlc3VsdCA9IG1ha2VfcmFuZ2Vfb2JqZWN0KFB5X1RZUEUociksIHN1YnN0YXJ0LCBzdWJzdG9wLCBzdWJzdGVwKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc2V0b2JqZWN0LmMgYi9PYmplY3RzL3NldG9iamVjdC5jCmluZGV4IGVhNWEyNGMuLjM0ZTQzYjkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2V0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zZXRvYmplY3QuYwpAQCAtMSwxNTQgKzEsMTE4IEBACiAKIC8qIHNldCBvYmplY3QgaW1wbGVtZW50YXRpb24KKwogICAgV3JpdHRlbiBhbmQgbWFpbnRhaW5lZCBieSBSYXltb25kIEQuIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAgICBEZXJpdmVkIGZyb20gTGliL3NldHMucHkgYW5kIE9iamVjdHMvZGljdG9iamVjdC5jLgogCi0gICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KKyAgIENvcHlyaWdodCAoYykgMjAwMy0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgVGhlIGJhc2ljIGxvb2t1cCBmdW5jdGlvbiB1c2VkIGJ5IGFsbCBvcGVyYXRpb25zLgorICAgVGhpcyBpcyBiYXNlZCBvbiBBbGdvcml0aG0gRCBmcm9tIEtudXRoIFZvbC4gMywgU2VjLiA2LjQuCisKKyAgIFRoZSBpbml0aWFsIHByb2JlIGluZGV4IGlzIGNvbXB1dGVkIGFzIGhhc2ggbW9kIHRoZSB0YWJsZSBzaXplLgorICAgU3Vic2VxdWVudCBwcm9iZSBpbmRpY2VzIGFyZSBjb21wdXRlZCBhcyBleHBsYWluZWQgaW4gT2JqZWN0cy9kaWN0b2JqZWN0LmMuCisKKyAgIFRvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHksIGVhY2ggcHJvYmUgaW5zcGVjdHMgYSBzZXJpZXMgb2YgY29uc2VjdXRpdmUKKyAgIG5lYXJieSBlbnRyaWVzIGJlZm9yZSBtb3Zpbmcgb24gdG8gcHJvYmVzIGVsc2V3aGVyZSBpbiBtZW1vcnkuICBUaGlzIGxlYXZlcworICAgdXMgd2l0aCBhIGh5YnJpZCBvZiBsaW5lYXIgcHJvYmluZyBhbmQgb3BlbiBhZGRyZXNzaW5nLiAgVGhlIGxpbmVhciBwcm9iaW5nCisgICByZWR1Y2VzIHRoZSBjb3N0IG9mIGhhc2ggY29sbGlzaW9ucyBiZWNhdXNlIGNvbnNlY3V0aXZlIG1lbW9yeSBhY2Nlc3NlcworICAgdGVuZCB0byBiZSBtdWNoIGNoZWFwZXIgdGhhbiBzY2F0dGVyZWQgcHJvYmVzLiAgQWZ0ZXIgTElORUFSX1BST0JFUyBzdGVwcywKKyAgIHdlIHRoZW4gdXNlIG9wZW4gYWRkcmVzc2luZyB3aXRoIHRoZSB1cHBlciBiaXRzIGZyb20gdGhlIGhhc2ggdmFsdWUuICBUaGlzCisgICBoZWxwcyBicmVhay11cCBsb25nIGNoYWlucyBvZiBjb2xsaXNpb25zLgorCisgICBBbGwgYXJpdGhtZXRpYyBvbiBoYXNoIHNob3VsZCBpZ25vcmUgb3ZlcmZsb3cuCisKKyAgIFVubGlrZSB0aGUgZGljdGlvbmFyeSBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvb2trZXkgZnVuY3Rpb25zIGNhbiByZXR1cm4KKyAgIE5VTEwgaWYgdGhlIHJpY2ggY29tcGFyaXNvbiByZXR1cm5zIGFuIGVycm9yLgogKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9lcS5oIgogCi0vKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCi0gKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQotICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyB2b2lkCi1zZXRfa2V5X2Vycm9yKFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnR1cDsKLSAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKLSAgICBpZiAoIXR1cCkKLSAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLwotICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKLSAgICBQeV9ERUNSRUYodHVwKTsKLX0KKy8qIE9iamVjdCB1c2VkIGFzIGR1bW15IGtleSB0byBmaWxsIGRlbGV0ZWQgZW50cmllcyAqLworc3RhdGljIFB5T2JqZWN0IF9kdW1teV9zdHJ1Y3Q7CiAKLS8qIFRoaXMgbXVzdCBiZSA+PSAxLiAqLworI2RlZmluZSBkdW1teSAoJl9kdW1teV9zdHJ1Y3QpCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09IEJlZ2luIGxvZ2ljIGZvciBwcm9iaW5nIHRoZSBoYXNoIHRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogU2V0IHRoaXMgdG8gemVybyB0byB0dXJuLW9mZiBsaW5lYXIgcHJvYmluZyAqLworI2lmbmRlZiBMSU5FQVJfUFJPQkVTCisjZGVmaW5lIExJTkVBUl9QUk9CRVMgOQorI2VuZGlmCisKKy8qIFRoaXMgbXVzdCBiZSA+PSAxICovCiAjZGVmaW5lIFBFUlRVUkJfU0hJRlQgNQogCi0vKiBPYmplY3QgdXNlZCBhcyBkdW1teSBrZXkgdG8gZmlsbCBkZWxldGVkIGVudHJpZXMgKi8KLXN0YXRpYyBQeU9iamVjdCAqZHVtbXkgPSBOVUxMOyAvKiBJbml0aWFsaXplZCBieSBmaXJzdCBjYWxsIHRvIG1ha2VfbmV3X3NldCgpICovCi0KLSNpZmRlZiBQeV9SRUZfREVCVUcKLVB5T2JqZWN0ICoKLV9QeVNldF9EdW1teSh2b2lkKQotewotICAgIHJldHVybiBkdW1teTsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIElOSVRfTk9OWkVST19TRVRfU0xPVFMoc28pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChzbyktPnRhYmxlID0gKHNvKS0+c21hbGx0YWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoc28pLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHNvKS0+aGFzaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCkKLQotI2RlZmluZSBFTVBUWV9UT19NSU5TSVpFKHNvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtZW1zZXQoKHNvKS0+c21hbGx0YWJsZSwgMCwgc2l6ZW9mKChzbyktPnNtYWxsdGFibGUpKTsgICAgICBcCi0gICAgKHNvKS0+dXNlZCA9IChzbyktPmZpbGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIElOSVRfTk9OWkVST19TRVRfU0xPVFMoc28pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0KLS8qIFJldXNlIHNjaGVtZSB0byBzYXZlIGNhbGxzIHRvIG1hbGxvYywgZnJlZSwgYW5kIG1lbXNldCAqLwotI2lmbmRlZiBQeVNldF9NQVhGUkVFTElTVAotI2RlZmluZSBQeVNldF9NQVhGUkVFTElTVCA4MAotI2VuZGlmCi1zdGF0aWMgUHlTZXRPYmplY3QgKmZyZWVfbGlzdFtQeVNldF9NQVhGUkVFTElTVF07Ci1zdGF0aWMgaW50IG51bWZyZWUgPSAwOwotCi0KLS8qCi1UaGUgYmFzaWMgbG9va3VwIGZ1bmN0aW9uIHVzZWQgYnkgYWxsIG9wZXJhdGlvbnMuCi1UaGlzIGlzIGJhc2VkIG9uIEFsZ29yaXRobSBEIGZyb20gS251dGggVm9sLiAzLCBTZWMuIDYuNC4KLU9wZW4gYWRkcmVzc2luZyBpcyBwcmVmZXJyZWQgb3ZlciBjaGFpbmluZyBzaW5jZSB0aGUgbGluayBvdmVyaGVhZCBmb3IKLWNoYWluaW5nIHdvdWxkIGJlIHN1YnN0YW50aWFsICgxMDAlIHdpdGggdHlwaWNhbCBtYWxsb2Mgb3ZlcmhlYWQpLgotCi1UaGUgaW5pdGlhbCBwcm9iZSBpbmRleCBpcyBjb21wdXRlZCBhcyBoYXNoIG1vZCB0aGUgdGFibGUgc2l6ZS4gU3Vic2VxdWVudAotcHJvYmUgaW5kaWNlcyBhcmUgY29tcHV0ZWQgYXMgZXhwbGFpbmVkIGluIE9iamVjdHMvZGljdG9iamVjdC5jLgotCi1BbGwgYXJpdGhtZXRpYyBvbiBoYXNoIHNob3VsZCBpZ25vcmUgb3ZlcmZsb3cuCi0KLVVubGlrZSB0aGUgZGljdGlvbmFyeSBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvb2trZXkgZnVuY3Rpb25zIGNhbiByZXR1cm4KLU5VTEwgaWYgdGhlIHJpY2ggY29tcGFyaXNvbiByZXR1cm5zIGFuIGVycm9yLgotKi8KLQogc3RhdGljIHNldGVudHJ5ICoKLXNldF9sb29ra2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2gpCitzZXRfbG9va2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CiAgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKLSAgICByZWdpc3RlciBpbnQgY21wOwotICAgIFB5T2JqZWN0ICpzdGFydGtleTsKKyAgICBzZXRlbnRyeSAqZnJlZXNsb3QgPSBOVUxMOworICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CisgICAgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCisgICAgc2l6ZV90IGo7CisgICAgaW50IGNtcDsKIAotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgfHwgZW50cnktPmtleSA9PSBrZXkpCisgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBlbnRyeTsKIAotICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15KQotICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwotICAgIGVsc2UgewotICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCkgewotICAgICAgICAgICAgc3RhcnRrZXkgPSBlbnRyeS0+a2V5OworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnN0YXJ0a2V5ID0gZW50cnktPmtleTsKICAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7CiAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKICAgICAgICAgICAgIGlmIChjbXAgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgaWYgKHRhYmxlID09IHNvLT50YWJsZSAmJiBlbnRyeS0+a2V5ID09IHN0YXJ0a2V5KSB7CisgICAgICAgICAgICBpZiAodGFibGUgIT0gc28tPnRhYmxlIHx8IGVudHJ5LT5rZXkgIT0gc3RhcnRrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOworICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCisgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworCisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRrZXkgPSBlbnRyeS0+a2V5OworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7CisgICAgICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0a2V5LCBrZXksIFB5X0VRKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOworICAgICAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBpZiAodGFibGUgIT0gc28tPnRhYmxlIHx8IGVudHJ5LT5rZXkgIT0gc3RhcnRrZXkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKICAgICAgICAgICAgICAgICBpZiAoY21wID4gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogVGhlIGNvbXBhcmUgZGlkIG1ham9yIG5hc3R5IHN0dWZmIHRvIHRoZQotICAgICAgICAgICAgICAgICAqIHNldDogIHN0YXJ0IG92ZXIuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwogICAgICAgICB9Ci0gICAgICAgIGZyZWVzbG90ID0gTlVMTDsKLSAgICB9CiAKLSAgICAvKiBJbiB0aGUgbG9vcCwga2V5ID09IGR1bW15IGlzIGJ5IGZhciAoZmFjdG9yIG9mIDEwMHMpIHRoZQotICAgICAgIGxlYXN0IGxpa2VseSBvdXRjb21lLCBzbyB0ZXN0IGZvciB0aGF0IGxhc3QuICovCi0gICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7Ci0gICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisKICAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOwotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoZnJlZXNsb3QgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBlbnRyeSA9IGZyZWVzbG90OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKLSAgICAgICAgICAgIHN0YXJ0a2V5ID0gZW50cnktPmtleTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7Ci0gICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOwotICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKLSAgICAgICAgICAgIGlmIChjbXAgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgaWYgKHRhYmxlID09IHNvLT50YWJsZSAmJiBlbnRyeS0+a2V5ID09IHN0YXJ0a2V5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogVGhlIGNvbXBhcmUgZGlkIG1ham9yIG5hc3R5IHN0dWZmIHRvIHRoZQotICAgICAgICAgICAgICAgICAqIHNldDogIHN0YXJ0IG92ZXIuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CiAgICAgfQotICAgIHJldHVybiBlbnRyeTsKKyAgZm91bmRfbnVsbDoKKyAgICByZXR1cm4gZnJlZXNsb3QgPT0gTlVMTCA/IGVudHJ5IDogZnJlZXNsb3Q7CiB9CiAKIC8qCkBAIC0xNTcsMTQgKzEyMSwxNSBAQAogICogc2VlIGlmIHRoZSBjb21wYXJpc29uIGFsdGVyZWQgdGhlIHRhYmxlLgogICovCiBzdGF0aWMgc2V0ZW50cnkgKgotc2V0X2xvb2trZXlfdW5pY29kZShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoKQorc2V0X2xvb2trZXlfdW5pY29kZShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CiAgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZnJlZXNsb3QgPSBOVUxMOworICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CisgICAgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsKKyAgICBzaXplX3QgajsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTE3NCw0NiArMTM5LDk0IEBACiAgICAgICAgIHNvLT5sb29rdXAgPSBzZXRfbG9va2tleTsKICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwogICAgIH0KLSAgICBpID0gKHNpemVfdCloYXNoICYgbWFzazsKLSAgICBlbnRyeSA9ICZ0YWJsZVtpXTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMIHx8IGVudHJ5LT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkpCi0gICAgICAgIGZyZWVzbG90ID0gZW50cnk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkKLSAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgZnJlZXNsb3QgPSBOVUxMOwotICAgIH0KIAotICAgIC8qIEluIHRoZSBsb29wLCBrZXkgPT0gZHVtbXkgaXMgYnkgZmFyIChmYWN0b3Igb2YgMTAwcykgdGhlCi0gICAgICAgbGVhc3QgbGlrZWx5IG91dGNvbWUsIHNvIHRlc3QgZm9yIHRoYXQgbGFzdC4gKi8KLSAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyA7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKLSAgICAgICAgaSA9IChpIDw8IDIpICsgaSArIHBlcnR1cmIgKyAxOwotICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gZnJlZXNsb3QgPT0gTlVMTCA/IGVudHJ5IDogZnJlZXNsb3Q7CisgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleQogICAgICAgICAgICAgfHwgKGVudHJ5LT5oYXNoID09IGhhc2gKLSAgICAgICAgICAgICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkKLSAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCisgICAgICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQorICAgICAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCiAgICAgICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCiAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworCisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5CisgICAgICAgICAgICAgICAgfHwgKGVudHJ5LT5oYXNoID09IGhhc2gKKyAgICAgICAgICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQorICAgICAgICAgICAgICAgICAgICAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7CisgICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOworCisgICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKICAgICB9Ci0gICAgYXNzZXJ0KDApOyAgICAgICAgICAvKiBOT1QgUkVBQ0hFRCAqLwotICAgIHJldHVybiAwOworICBmb3VuZF9udWxsOgorICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKIH0KIAogLyoKK0ludGVybmFsIHJvdXRpbmUgdXNlZCBieSBzZXRfdGFibGVfcmVzaXplKCkgdG8gaW5zZXJ0IGFuIGl0ZW0gd2hpY2ggaXMKK2tub3duIHRvIGJlIGFic2VudCBmcm9tIHRoZSBzZXQuICBUaGlzIHJvdXRpbmUgYWxzbyBhc3N1bWVzIHRoYXQKK3RoZSBzZXQgY29udGFpbnMgbm8gZGVsZXRlZCBlbnRyaWVzLiAgQmVzaWRlcyB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCwKK3VzaW5nIHNldF9pbnNlcnRfY2xlYW4oKSBpbiBzZXRfdGFibGVfcmVzaXplKCkgaXMgZGFuZ2Vyb3VzIChTRiBidWcgIzE0NTYyMDkpLgorTm90ZSB0aGF0IG5vIHJlZmNvdW50cyBhcmUgY2hhbmdlZCBieSB0aGlzIHJvdXRpbmU7IGlmIG5lZWRlZCwgdGhlIGNhbGxlcgoraXMgcmVzcG9uc2libGUgZm9yIGluY3JlZidpbmcgYGtleWAuCisqLworc3RhdGljIHZvaWQKK3NldF9pbnNlcnRfY2xlYW4oUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKK3sKKyAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IChzaXplX3Qpc28tPm1hc2s7CisgICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2g7CisgICAgc2l6ZV90IGo7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICB9CisgICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7CisgICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOworICAgIH0KKyAgZm91bmRfbnVsbDoKKyAgICBlbnRyeS0+a2V5ID0ga2V5OworICAgIGVudHJ5LT5oYXNoID0gaGFzaDsKKyAgICBzby0+ZmlsbCsrOworICAgIHNvLT51c2VkKys7Cit9CisKKy8qID09PT09PT09IEVuZCBsb2dpYyBmb3IgcHJvYmluZyB0aGUgaGFzaCB0YWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoKIEludGVybmFsIHJvdXRpbmUgdG8gaW5zZXJ0IGEgbmV3IGtleSBpbnRvIHRoZSB0YWJsZS4KIFVzZWQgYnkgdGhlIHB1YmxpYyBpbnNlcnQgcm91dGluZS4KIEVhdHMgYSByZWZlcmVuY2UgdG8ga2V5LgogKi8KIHN0YXRpYyBpbnQKLXNldF9pbnNlcnRfa2V5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCitzZXRfaW5zZXJ0X2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAKICAgICBhc3NlcnQoc28tPmxvb2t1cCAhPSBOVUxMKTsKICAgICBlbnRyeSA9IHNvLT5sb29rdXAoc28sIGtleSwgaGFzaCk7CkBAIC0yMzAsNyArMjQzLDYgQEAKICAgICAgICAgZW50cnktPmtleSA9IGtleTsKICAgICAgICAgZW50cnktPmhhc2ggPSBoYXNoOwogICAgICAgICBzby0+dXNlZCsrOwotICAgICAgICBQeV9ERUNSRUYoZHVtbXkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIEFDVElWRSAqLwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKQEAgLTIzOSwzNSArMjUxLDYgQEAKIH0KIAogLyoKLUludGVybmFsIHJvdXRpbmUgdXNlZCBieSBzZXRfdGFibGVfcmVzaXplKCkgdG8gaW5zZXJ0IGFuIGl0ZW0gd2hpY2ggaXMKLWtub3duIHRvIGJlIGFic2VudCBmcm9tIHRoZSBzZXQuICBUaGlzIHJvdXRpbmUgYWxzbyBhc3N1bWVzIHRoYXQKLXRoZSBzZXQgY29udGFpbnMgbm8gZGVsZXRlZCBlbnRyaWVzLiAgQmVzaWRlcyB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCwKLXVzaW5nIHNldF9pbnNlcnRfY2xlYW4oKSBpbiBzZXRfdGFibGVfcmVzaXplKCkgaXMgZGFuZ2Vyb3VzIChTRiBidWcgIzE0NTYyMDkpLgotTm90ZSB0aGF0IG5vIHJlZmNvdW50cyBhcmUgY2hhbmdlZCBieSB0aGlzIHJvdXRpbmU7IGlmIG5lZWRlZCwgdGhlIGNhbGxlcgotaXMgcmVzcG9uc2libGUgZm9yIGluY3JlZidpbmcgYGtleWAuCi0qLwotc3RhdGljIHZvaWQKLXNldF9pbnNlcnRfY2xlYW4ocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKLXsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IChzaXplX3Qpc28tPm1hc2s7Ci0gICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKLQotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGZvciAocGVydHVyYiA9IGhhc2g7IGVudHJ5LT5rZXkgIT0gTlVMTDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgewotICAgICAgICBpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7Ci0gICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICB9Ci0gICAgc28tPmZpbGwrKzsKLSAgICBlbnRyeS0+a2V5ID0ga2V5OwotICAgIGVudHJ5LT5oYXNoID0gaGFzaDsKLSAgICBzby0+dXNlZCsrOwotfQotCi0vKgogUmVzdHJ1Y3R1cmUgdGhlIHRhYmxlIGJ5IGFsbG9jYXRpbmcgYSBuZXcgdGFibGUgYW5kIHJlaW5zZXJ0aW5nIGFsbAoga2V5cyBhZ2Fpbi4gIFdoZW4gZW50cmllcyBoYXZlIGJlZW4gZGVsZXRlZCwgdGhlIG5ldyB0YWJsZSBtYXkKIGFjdHVhbGx5IGJlIHNtYWxsZXIgdGhhbiB0aGUgb2xkIG9uZS4KQEAgLTMzMCwyMyArMzEzLDE0IEBACiAgICAgc28tPnRhYmxlID0gbmV3dGFibGU7CiAgICAgc28tPm1hc2sgPSBuZXdzaXplIC0gMTsKICAgICBtZW1zZXQobmV3dGFibGUsIDAsIHNpemVvZihzZXRlbnRyeSkgKiBuZXdzaXplKTsKKyAgICBpID0gc28tPnVzZWQ7CiAgICAgc28tPnVzZWQgPSAwOwotICAgIGkgPSBzby0+ZmlsbDsKICAgICBzby0+ZmlsbCA9IDA7CiAKICAgICAvKiBDb3B5IHRoZSBkYXRhIG92ZXI7IHRoaXMgaXMgcmVmY291bnQtbmV1dHJhbCBmb3IgYWN0aXZlIGVudHJpZXM7CiAgICAgICAgZHVtbXkgZW50cmllcyBhcmVuJ3QgY29waWVkIG92ZXIsIG9mIGNvdXJzZSAqLwogICAgIGZvciAoZW50cnkgPSBvbGR0YWJsZTsgaSA+IDA7IGVudHJ5KyspIHsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgLyogVU5VU0VEICovCi0gICAgICAgICAgICA7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmtleSA9PSBkdW1teSkgewotICAgICAgICAgICAgLyogRFVNTVkgKi8KLSAgICAgICAgICAgIC0taTsKLSAgICAgICAgICAgIGFzc2VydChlbnRyeS0+a2V5ID09IGR1bW15KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIEFDVElWRSAqLworICAgICAgICBpZiAoZW50cnktPmtleSAhPSBOVUxMICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgIHNldF9pbnNlcnRfY2xlYW4oc28sIGVudHJ5LT5rZXksIGVudHJ5LT5oYXNoKTsKICAgICAgICAgfQpAQCAtMzYwLDkgKzMzNCw5IEBACiAvKiBDQVVUSU9OOiBzZXRfYWRkX2tleS9lbnRyeSgpIG11c3QgZ3VhcmFudGVlIGl0IHdvbid0IHJlc2l6ZSB0aGUgdGFibGUgKi8KIAogc3RhdGljIGludAotc2V0X2FkZF9lbnRyeShyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICplbnRyeSkKK3NldF9hZGRfZW50cnkoUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqZW50cnkpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBuX3VzZWQ7CisgICAgUHlfc3NpemVfdCBuX3VzZWQ7CiAgICAgUHlPYmplY3QgKmtleSA9IGVudHJ5LT5rZXk7CiAgICAgUHlfaGFzaF90IGhhc2ggPSBlbnRyeS0+aGFzaDsKIApAQCAtMzc5LDEwICszNTMsMTAgQEAKIH0KIAogc3RhdGljIGludAotc2V0X2FkZF9rZXkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQorc2V0X2FkZF9rZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQogewotICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgbl91c2VkOworICAgIFB5X2hhc2hfdCBoYXNoOworICAgIFB5X3NzaXplX3Qgbl91c2VkOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CiAgICAgICAgIChoYXNoID0gKChQeUFTQ0lJT2JqZWN0ICopIGtleSktPmhhc2gpID09IC0xKSB7CkBAIC00MDcsNyArMzgxLDcgQEAKIAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfZW50cnkoUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqb2xkZW50cnkpCi17ICAgICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKK3sgICAgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICpvbGRfa2V5OwogCiAgICAgZW50cnkgPSAoc28tPmxvb2t1cCkoc28sIG9sZGVudHJ5LT5rZXksIG9sZGVudHJ5LT5oYXNoKTsKQEAgLTQxNiw3ICszOTAsNiBAQAogICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgIHx8ICBlbnRyeS0+a2V5ID09IGR1bW15KQogICAgICAgICByZXR1cm4gRElTQ0FSRF9OT1RGT1VORDsKICAgICBvbGRfa2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIFB5X0RFQ1JFRihvbGRfa2V5KTsKQEAgLTQyNiw4ICszOTksOCBAQAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKLSAgICByZWdpc3RlciBQeV9oYXNoX3QgaGFzaDsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfaGFzaF90IGhhc2g7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICpvbGRfa2V5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwpAQCAtNDQ0LDEzICs0MTcsMjMgQEAKICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMICB8fCAgZW50cnktPmtleSA9PSBkdW1teSkKICAgICAgICAgcmV0dXJuIERJU0NBUkRfTk9URk9VTkQ7CiAgICAgb2xkX2tleSA9IGVudHJ5LT5rZXk7Ci0gICAgUHlfSU5DUkVGKGR1bW15KTsKICAgICBlbnRyeS0+a2V5ID0gZHVtbXk7CiAgICAgc28tPnVzZWQtLTsKICAgICBQeV9ERUNSRUYob2xkX2tleSk7CiAgICAgcmV0dXJuIERJU0NBUkRfRk9VTkQ7CiB9CiAKK3N0YXRpYyB2b2lkCitzZXRfZW1wdHlfdG9fbWluc2l6ZShQeVNldE9iamVjdCAqc28pCit7CisgICAgbWVtc2V0KHNvLT5zbWFsbHRhYmxlLCAwLCBzaXplb2Yoc28tPnNtYWxsdGFibGUpKTsKKyAgICBzby0+ZmlsbCA9IDA7CisgICAgc28tPnVzZWQgPSAwOworICAgIHNvLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7CisgICAgc28tPnRhYmxlID0gc28tPnNtYWxsdGFibGU7CisgICAgc28tPmhhc2ggPSAtMTsKK30KKwogc3RhdGljIGludAogc2V0X2NsZWFyX2ludGVybmFsKFB5U2V0T2JqZWN0ICpzbykKIHsKQEAgLTQ1OCwxNCArNDQxLDEzIEBACiAgICAgaW50IHRhYmxlX2lzX21hbGxvY2VkOwogICAgIFB5X3NzaXplX3QgZmlsbDsKICAgICBzZXRlbnRyeSBzbWFsbF9jb3B5W1B5U2V0X01JTlNJWkVdOwotI2lmZGVmIFB5X0RFQlVHCi0gICAgUHlfc3NpemVfdCBpLCBuOwotICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKIAotICAgIG4gPSBzby0+bWFzayArIDE7Ci0gICAgaSA9IDA7CisjaWZkZWYgUHlfREVCVUcKKyAgICBQeV9zc2l6ZV90IGkgPSAwOworICAgIFB5X3NzaXplX3QgbiA9IHNvLT5tYXNrICsgMTsKICNlbmRpZgogCisgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIHRhYmxlID0gc28tPnRhYmxlOwogICAgIGFzc2VydCh0YWJsZSAhPSBOVUxMKTsKICAgICB0YWJsZV9pc19tYWxsb2NlZCA9IHRhYmxlICE9IHNvLT5zbWFsbHRhYmxlOwpAQCAtNDc4LDcgKzQ2MCw3IEBACiAgICAgICovCiAgICAgZmlsbCA9IHNvLT5maWxsOwogICAgIGlmICh0YWJsZV9pc19tYWxsb2NlZCkKLSAgICAgICAgRU1QVFlfVE9fTUlOU0laRShzbyk7CisgICAgICAgIHNldF9lbXB0eV90b19taW5zaXplKHNvKTsKIAogICAgIGVsc2UgaWYgKGZpbGwgPiAwKSB7CiAgICAgICAgIC8qIEl0J3MgYSBzbWFsbCB0YWJsZSB3aXRoIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQuCkBAIC00ODcsNyArNDY5LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIG1lbWNweShzbWFsbF9jb3B5LCB0YWJsZSwgc2l6ZW9mKHNtYWxsX2NvcHkpKTsKICAgICAgICAgdGFibGUgPSBzbWFsbF9jb3B5OwotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKKyAgICAgICAgc2V0X2VtcHR5X3RvX21pbnNpemUoc28pOwogICAgIH0KICAgICAvKiBlbHNlIGl0J3MgYSBzbWFsbCB0YWJsZSB0aGF0J3MgYWxyZWFkeSBlbXB0eSAqLwogCkBAIC01MDIsNyArNDg0LDggQEAKICNlbmRpZgogICAgICAgICBpZiAoZW50cnktPmtleSkgewogICAgICAgICAgICAgLS1maWxsOwotICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gZHVtbXkpCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOwogICAgICAgICB9CiAjaWZkZWYgUHlfREVCVUcKICAgICAgICAgZWxzZQpAQCAtNTMzLDcgKzUxNiw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgbWFzazsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqdGFibGU7CisgICAgc2V0ZW50cnkgKnRhYmxlOwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIGkgPSAqcG9zX3B0cjsKQEAgLTU1Myw3ICs1MzYsNyBAQAogc3RhdGljIHZvaWQKIHNldF9kZWFsbG9jKFB5U2V0T2JqZWN0ICpzbykKIHsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5X3NzaXplX3QgZmlsbCA9IHNvLT5maWxsOwogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2soc28pOwogICAgIFB5X1RSQVNIQ0FOX1NBRkVfQkVHSU4oc28pCkBAIC01NjMsMTUgKzU0NiwxMyBAQAogICAgIGZvciAoZW50cnkgPSBzby0+dGFibGU7IGZpbGwgPiAwOyBlbnRyeSsrKSB7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5KSB7CiAgICAgICAgICAgICAtLWZpbGw7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBkdW1teSkKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHNvLT50YWJsZSAhPSBzby0+c21hbGx0YWJsZSkKICAgICAgICAgUHlNZW1fREVMKHNvLT50YWJsZSk7Ci0gICAgaWYgKG51bWZyZWUgPCBQeVNldF9NQVhGUkVFTElTVCAmJiBQeUFueVNldF9DaGVja0V4YWN0KHNvKSkKLSAgICAgICAgZnJlZV9saXN0W251bWZyZWUrK10gPSBzbzsKLSAgICBlbHNlCi0gICAgICAgIFB5X1RZUEUoc28pLT50cF9mcmVlKHNvKTsKKyAgICBQeV9UWVBFKHNvKS0+dHBfZnJlZShzbyk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9FTkQoc28pCiB9CiAKQEAgLTYzMiw4ICs2MTMsOCBAQAogICAgIFB5U2V0T2JqZWN0ICpvdGhlcjsKICAgICBQeU9iamVjdCAqa2V5OwogICAgIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfc3NpemVfdCBpOworICAgIHNldGVudHJ5ICplbnRyeTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKG90aGVyc2V0KSk7CkBAIC03MDEsOCArNjgyLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfcG9wKFB5U2V0T2JqZWN0ICpzbykKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGkgPSAwOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGkgPSAwOworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeU9iamVjdCAqa2V5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwpAQCAtNzM0LDcgKzcxNSw2IEBACiAgICAgICAgIH0KICAgICB9CiAgICAga2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIHNvLT50YWJsZVswXS5oYXNoID0gaSArIDE7ICAvKiBuZXh0IHBsYWNlIHRvIHN0YXJ0ICovCkBAIC03NTgsNiArNzM4LDE3IEBACiBzdGF0aWMgUHlfaGFzaF90CiBmcm96ZW5zZXRfaGFzaChQeU9iamVjdCAqc2VsZikKIHsKKyAgICAvKiBNb3N0IG9mIHRoZSBjb25zdGFudHMgaW4gdGhpcyBoYXNoIGFsZ29yaXRobSBhcmUgcmFuZG9tbHkgY2hvb3NlbgorICAgICAgIGxhcmdlIHByaW1lcyB3aXRoICJpbnRlcmVzdGluZyBiaXQgcGF0dGVybnMiIGFuZCB0aGF0IHBhc3NlZAorICAgICAgIHRlc3RzIGZvciBnb29kIGNvbGxpc2lvbiBzdGF0aXN0aWNzIG9uIGEgdmFyaWV0eSBvZiBwcm9ibGVtYXRpYworICAgICAgIGRhdGFzZXRzIHN1Y2ggYXM6CisKKyAgICAgICAgICBwcyA9IFtdCisgICAgICAgICAgZm9yIHIgaW4gcmFuZ2UoMjEpOgorICAgICAgICAgICAgICBwcyArPSBpdGVydG9vbHMuY29tYmluYXRpb25zKHJhbmdlKDIwKSwgcikKKyAgICAgICAgICBudW1fZGlzdGluY3RfaGFzaGVzID0gbGVuKHtoYXNoKGZyb3plbnNldChzKSkgZm9yIHMgaW4gcHN9KQorCisgICAgKi8KICAgICBQeVNldE9iamVjdCAqc28gPSAoUHlTZXRPYmplY3QgKilzZWxmOwogICAgIFB5X3VoYXNoX3QgaCwgaGFzaCA9IDE5Mjc4NjgyMzdVTDsKICAgICBzZXRlbnRyeSAqZW50cnk7CkBAIC03NzQsOCArNzY1LDEwIEBACiAgICAgICAgICAgIGhhc2hlcyBzbyB0aGF0IG1hbnkgZGlzdGluY3QgY29tYmluYXRpb25zIGNvbGxhcHNlIHRvIG9ubHkKICAgICAgICAgICAgYSBoYW5kZnVsIG9mIGRpc3RpbmN0IGhhc2ggdmFsdWVzLiAqLwogICAgICAgICBoID0gZW50cnktPmhhc2g7Ci0gICAgICAgIGhhc2ggXj0gKGggXiAoaCA8PCAxNikgXiA4OTg2OTc0N1VMKSAgKiAzNjQ0Nzk4MTY3VUw7CisgICAgICAgIGhhc2ggXj0gKChoIF4gODk4Njk3NDdVTCkgXiAoaCA8PCAxNikpICogMzY0NDc5ODE2N1VMOwogICAgIH0KKyAgICAvKiBNYWtlIHRoZSBmaW5hbCByZXN1bHQgc3ByZWFkLW91dCBpbiBhIGRpZmZlcmVudCBwYXR0ZXJuCisgICAgICAgdGhhbiB0aGUgYWxnb3JpdGhtIGZvciB0dXBsZXMgb3Igb3RoZXIgcHl0aG9uIG9iamVjdHMuICovCiAgICAgaGFzaCA9IGhhc2ggKiA2OTA2OVUgKyA5MDcxMzM5MjNVTDsKICAgICBpZiAoaGFzaCA9PSAtMSkKICAgICAgICAgaGFzaCA9IDU5MDkyMzcxM1VMOwpAQCAtODY5LDggKzg2Miw4IEBACiBzdGF0aWMgUHlPYmplY3QgKnNldGl0ZXJfaXRlcm5leHQoc2V0aXRlcm9iamVjdCAqc2kpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2s7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X3NzaXplX3QgaSwgbWFzazsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlTZXRPYmplY3QgKnNvID0gc2ktPnNpX3NldDsKIAogICAgIGlmIChzbyA9PSBOVUxMKQpAQCAtMTAyNCwzMyArMTAxNywxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ha2VfbmV3X3NldChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICppdGVyYWJsZSkKIHsKLSAgICByZWdpc3RlciBQeVNldE9iamVjdCAqc28gPSBOVUxMOwotCi0gICAgaWYgKGR1bW15ID09IE5VTEwpIHsgLyogQXV0by1pbml0aWFsaXplIGR1bW15ICovCi0gICAgICAgIGR1bW15ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxkdW1teSBrZXk+Iik7Ci0gICAgICAgIGlmIChkdW1teSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIFB5U2V0T2JqZWN0ICpzbyA9IE5VTEw7CiAKICAgICAvKiBjcmVhdGUgUHlTZXRPYmplY3Qgc3RydWN0dXJlICovCi0gICAgaWYgKG51bWZyZWUgJiYKLSAgICAgICAgKHR5cGUgPT0gJlB5U2V0X1R5cGUgIHx8ICB0eXBlID09ICZQeUZyb3plblNldF9UeXBlKSkgewotICAgICAgICBzbyA9IGZyZWVfbGlzdFstLW51bWZyZWVdOwotICAgICAgICBhc3NlcnQgKHNvICE9IE5VTEwgJiYgUHlBbnlTZXRfQ2hlY2tFeGFjdChzbykpOwotICAgICAgICBQeV9UWVBFKHNvKSA9IHR5cGU7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2UoKFB5T2JqZWN0ICopc28pOwotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKLSAgICAgICAgUHlPYmplY3RfR0NfVHJhY2soc28pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNvID0gKFB5U2V0T2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7Ci0gICAgICAgIGlmIChzbyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIC8qIHRwX2FsbG9jIGhhcyBhbHJlYWR5IHplcm9lZCB0aGUgc3RydWN0dXJlICovCi0gICAgICAgIGFzc2VydChzby0+dGFibGUgPT0gTlVMTCAmJiBzby0+ZmlsbCA9PSAwICYmIHNvLT51c2VkID09IDApOwotICAgICAgICBJTklUX05PTlpFUk9fU0VUX1NMT1RTKHNvKTsKLSAgICB9CisgICAgc28gPSAoUHlTZXRPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAoc28gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBzby0+ZmlsbCA9IDA7CisgICAgc28tPnVzZWQgPSAwOworICAgIHNvLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7CisgICAgc28tPnRhYmxlID0gc28tPnNtYWxsdGFibGU7CiAgICAgc28tPmxvb2t1cCA9IHNldF9sb29ra2V5X3VuaWNvZGU7CisgICAgc28tPmhhc2ggPSAtMTsKICAgICBzby0+d2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgaWYgKGl0ZXJhYmxlICE9IE5VTEwpIHsKQEAgLTExMTMsMzUgKzEwOTIsMTUgQEAKIGludAogUHlTZXRfQ2xlYXJGcmVlTGlzdCh2b2lkKQogewotICAgIGludCBmcmVlbGlzdF9zaXplID0gbnVtZnJlZTsKLSAgICBQeVNldE9iamVjdCAqc287Ci0KLSAgICB3aGlsZSAobnVtZnJlZSkgewotICAgICAgICBudW1mcmVlLS07Ci0gICAgICAgIHNvID0gZnJlZV9saXN0W251bWZyZWVdOwotICAgICAgICBQeU9iamVjdF9HQ19EZWwoc28pOwotICAgIH0KLSAgICByZXR1cm4gZnJlZWxpc3Rfc2l6ZTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZAogUHlTZXRfRmluaSh2b2lkKQogewotICAgIFB5U2V0X0NsZWFyRnJlZUxpc3QoKTsKLSAgICBQeV9DTEVBUihkdW1teSk7CiAgICAgUHlfQ0xFQVIoZW1wdHlmcm96ZW5zZXQpOwogfQogCi0vKiBQcmludCBzdW1tYXJ5IGluZm8gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBvcHRpbWl6ZWQgYWxsb2NhdG9yICovCi12b2lkCi1fUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhGSUxFICpvdXQpCi17Ci0gICAgX1B5RGVidWdBbGxvY2F0b3JTdGF0cyhvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJlZSBQeVNldE9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBudW1mcmVlLCBzaXplb2YoUHlTZXRPYmplY3QpKTsKLX0KLQotCiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKQEAgLTE5NTIsNyArMTkxMSw3IEBACiAgICAgfQogCiAgICAgaWYgKHJ2ID09IERJU0NBUkRfTk9URk9VTkQpIHsKLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjM5Niw2ICsyMzU1LDkgQEAKICAgICByZXR1cm4gc2V0X3VwZGF0ZV9pbnRlcm5hbCgoUHlTZXRPYmplY3QgKilzZXQsIGl0ZXJhYmxlKTsKIH0KIAorLyogRXhwb3J0ZWQgZm9yIHRoZSBnZGIgcGx1Z2luJ3MgYmVuZWZpdC4gKi8KK1B5T2JqZWN0ICpfUHlTZXRfRHVtbXkgPSBkdW1teTsKKwogI2lmZGVmIFB5X0RFQlVHCiAKIC8qIFRlc3QgY29kZSB0byBiZSBjYWxsZWQgd2l0aCBhbnkgdGhyZWUgZWxlbWVudCBzZXQuCkBAIC0yNDE0LDcgKzIzNzYsNyBAQAogICAgIFB5X3NzaXplX3QgY291bnQ7CiAgICAgY2hhciAqczsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKmVsZW09TlVMTCwgKmR1cD1OVUxMLCAqdCwgKmYsICpkdXAyLCAqeDsKKyAgICBQeU9iamVjdCAqZWxlbT1OVUxMLCAqZHVwPU5VTEwsICp0LCAqZiwgKmR1cDIsICp4PU5VTEw7CiAgICAgUHlPYmplY3QgKm9iID0gKFB5T2JqZWN0ICopc287CiAgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlPYmplY3QgKnN0cjsKQEAgLTI1MzcsMyArMjQ5OSw0NiBAQAogI3VuZGVmIGFzc2VydFJhaXNlcwogCiAjZW5kaWYKKworLyoqKioqIER1bW15IFN0cnVjdCAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2R1bW15X3JlcHIoUHlPYmplY3QgKm9wKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPGR1bW15IGtleT4iKTsKK30KKworc3RhdGljIHZvaWQKK2R1bW15X2RlYWxsb2MoUHlPYmplY3QqIGlnbm9yZSkKK3sKKyAgICBQeV9GYXRhbEVycm9yKCJkZWFsbG9jYXRpbmcgPGR1bW15IGtleT4iKTsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCBfUHlTZXREdW1teV9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgIjxkdW1teSBrZXk+IHR5cGUiLAorICAgIDAsCisgICAgMCwKKyAgICBkdW1teV9kZWFsbG9jLCAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KKyAgICBkdW1teV9yZXByLCAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zdHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxULCAvKnRwX2ZsYWdzICovCit9OworCitzdGF0aWMgUHlPYmplY3QgX2R1bW15X3N0cnVjdCA9IHsKKyAgX1B5T2JqZWN0X0VYVFJBX0lOSVQKKyAgMiwgJl9QeVNldER1bW15X1R5cGUKK307CisKZGlmZiAtLWdpdCBhL09iamVjdHMvc2xpY2VvYmplY3QuYyBiL09iamVjdHMvc2xpY2VvYmplY3QuYwppbmRleCAxNTkzMzM1Li4xMDQ5NTIzIDEwMDY0NAotLS0gYS9PYmplY3RzL3NsaWNlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zbGljZW9iamVjdC5jCkBAIC0zMyw2ICszMywxNyBAQAogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiRWxsaXBzaXMiKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2VsbGlwc2lzX3JlZHVjZShQeU9iamVjdCAqb3ApCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJFbGxpcHNpcyIpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgZWxsaXBzaXNfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbillbGxpcHNpc19yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIFB5VHlwZU9iamVjdCBQeUVsbGlwc2lzX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAiZWxsaXBzaXMiLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCkBAIC02MSw3ICs3Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZWxsaXBzaXNfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC0yOTksMjMgKzMxMCwxOTggQEAKICAgICB7MH0KIH07CiAKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgc2xpY2UgYXJndW1lbnQgdG8gYSBQeUxvbmcsIGFuZCByYWlzZSBUeXBlRXJyb3IKKyAgIHdpdGggYSBzdWl0YWJsZSBtZXNzYWdlIG9uIGZhaWx1cmUuICovCisKK3N0YXRpYyBQeU9iamVjdCoKK2V2YWx1YXRlX3NsaWNlX2luZGV4KFB5T2JqZWN0ICp2KQoreworICAgIGlmIChQeUluZGV4X0NoZWNrKHYpKSB7CisgICAgICAgIHJldHVybiBQeU51bWJlcl9JbmRleCh2KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8qIENvbXB1dGUgc2xpY2UgaW5kaWNlcyBnaXZlbiBhIHNsaWNlIGFuZCBsZW5ndGguICBSZXR1cm4gLTEgb24gZmFpbHVyZS4gIFVzZWQKKyAgIGJ5IHNsaWNlLmluZGljZXMgYW5kIHJhbmdlb2JqZWN0IHNsaWNpbmcuICBBc3N1bWVzIHRoYXQgYGxlbmAgaXMgYQorICAgbm9ubmVnYXRpdmUgaW5zdGFuY2Ugb2YgUHlMb25nLiAqLworCitpbnQKK19QeVNsaWNlX0dldExvbmdJbmRpY2VzKFB5U2xpY2VPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0X3B0ciwgUHlPYmplY3QgKipzdG9wX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RlcF9wdHIpCit7CisgICAgUHlPYmplY3QgKnN0YXJ0PU5VTEwsICpzdG9wPU5VTEwsICpzdGVwPU5VTEw7CisgICAgUHlPYmplY3QgKnVwcGVyPU5VTEwsICpsb3dlcj1OVUxMOworICAgIGludCBzdGVwX2lzX25lZ2F0aXZlLCBjbXBfcmVzdWx0OworCisgICAgLyogQ29udmVydCBzdGVwIHRvIGFuIGludGVnZXI7IHJhaXNlIGZvciB6ZXJvIHN0ZXAuICovCisgICAgaWYgKHNlbGYtPnN0ZXAgPT0gUHlfTm9uZSkgeworICAgICAgICBzdGVwID0gUHlMb25nX0Zyb21Mb25nKDFMKTsKKyAgICAgICAgaWYgKHN0ZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHN0ZXBfaXNfbmVnYXRpdmUgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW50IHN0ZXBfc2lnbjsKKyAgICAgICAgc3RlcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0ZXApOworICAgICAgICBpZiAoc3RlcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgc3RlcF9zaWduID0gX1B5TG9uZ19TaWduKHN0ZXApOworICAgICAgICBpZiAoc3RlcF9zaWduID09IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHN0ZXBfaXNfbmVnYXRpdmUgPSBzdGVwX3NpZ24gPCAwOworICAgIH0KKworICAgIC8qIEZpbmQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBmb3Igc3RhcnQgYW5kIHN0b3AuICovCisgICAgaWYgKHN0ZXBfaXNfbmVnYXRpdmUpIHsKKyAgICAgICAgbG93ZXIgPSBQeUxvbmdfRnJvbUxvbmcoLTFMKTsKKyAgICAgICAgaWYgKGxvd2VyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHVwcGVyID0gUHlOdW1iZXJfQWRkKGxlbmd0aCwgbG93ZXIpOworICAgICAgICBpZiAodXBwZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb3dlciA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgICAgIGlmIChsb3dlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICB1cHBlciA9IGxlbmd0aDsKKyAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICB9CisKKyAgICAvKiBDb21wdXRlIHN0YXJ0LiAqLworICAgIGlmIChzZWxmLT5zdGFydCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0YXJ0ID0gc3RlcF9pc19uZWdhdGl2ZSA/IHVwcGVyIDogbG93ZXI7CisgICAgICAgIFB5X0lOQ1JFRihzdGFydCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdGFydCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0YXJ0KTsKKyAgICAgICAgaWYgKHN0YXJ0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChfUHlMb25nX1NpZ24oc3RhcnQpIDwgMCkgeworICAgICAgICAgICAgLyogc3RhcnQgKz0gbGVuZ3RoICovCisgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlOdW1iZXJfQWRkKHN0YXJ0LCBsZW5ndGgpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gdG1wOworICAgICAgICAgICAgaWYgKHN0YXJ0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydCwgbG93ZXIsIFB5X0xUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYobG93ZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBsb3dlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnQsIHVwcGVyLCBQeV9HVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gdXBwZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb21wdXRlIHN0b3AuICovCisgICAgaWYgKHNlbGYtPnN0b3AgPT0gUHlfTm9uZSkgeworICAgICAgICBzdG9wID0gc3RlcF9pc19uZWdhdGl2ZSA/IGxvd2VyIDogdXBwZXI7CisgICAgICAgIFB5X0lOQ1JFRihzdG9wKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0b3AgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzZWxmLT5zdG9wKTsKKyAgICAgICAgaWYgKHN0b3AgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeUxvbmdfU2lnbihzdG9wKSA8IDApIHsKKyAgICAgICAgICAgIC8qIHN0b3AgKz0gbGVuZ3RoICovCisgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlOdW1iZXJfQWRkKHN0b3AsIGxlbmd0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICBzdG9wID0gdG1wOworICAgICAgICAgICAgaWYgKHN0b3AgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0b3AsIGxvd2VyLCBQeV9MVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGxvd2VyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICAgICAgc3RvcCA9IGxvd2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdG9wLCB1cHBlciwgUHlfR1QpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih1cHBlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgICAgIHN0b3AgPSB1cHBlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICpzdGFydF9wdHIgPSBzdGFydDsKKyAgICAqc3RvcF9wdHIgPSBzdG9wOworICAgICpzdGVwX3B0ciA9IHN0ZXA7CisgICAgUHlfREVDUkVGKHVwcGVyKTsKKyAgICBQeV9ERUNSRUYobG93ZXIpOworICAgIHJldHVybiAwOworCisgIGVycm9yOgorICAgICpzdGFydF9wdHIgPSAqc3RvcF9wdHIgPSAqc3RlcF9wdHIgPSBOVUxMOworICAgIFB5X1hERUNSRUYoc3RhcnQpOworICAgIFB5X1hERUNSRUYoc3RvcCk7CisgICAgUHlfWERFQ1JFRihzdGVwKTsKKyAgICBQeV9YREVDUkVGKHVwcGVyKTsKKyAgICBQeV9YREVDUkVGKGxvd2VyKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHNsaWNlLmluZGljZXMuICovCisKIHN0YXRpYyBQeU9iamVjdCoKIHNsaWNlX2luZGljZXMoUHlTbGljZU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGxlbikKIHsKLSAgICBQeV9zc2l6ZV90IGlsZW4sIHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbmd0aDsKKyAgICBQeU9iamVjdCAqc3RhcnQsICpzdG9wLCAqc3RlcDsKKyAgICBQeU9iamVjdCAqbGVuZ3RoOworICAgIGludCBlcnJvcjsKIAotICAgIGlsZW4gPSBQeU51bWJlcl9Bc1NzaXplX3QobGVuLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICAvKiBDb252ZXJ0IGxlbmd0aCB0byBhbiBpbnRlZ2VyIGlmIG5lY2Vzc2FyeTsgcmFpc2UgZm9yIG5lZ2F0aXZlIGxlbmd0aC4gKi8KKyAgICBsZW5ndGggPSBQeU51bWJlcl9JbmRleChsZW4pOworICAgIGlmIChsZW5ndGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoaWxlbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgaWYgKF9QeUxvbmdfU2lnbihsZW5ndGgpIDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggc2hvdWxkIG5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICBQeV9ERUNSRUYobGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeU9iamVjdCopc2VsZiwgaWxlbiwgJnN0YXJ0LCAmc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ZXAsICZzbGljZWxlbmd0aCkgPCAwKSB7CisgICAgZXJyb3IgPSBfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhzZWxmLCBsZW5ndGgsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKKyAgICBQeV9ERUNSRUYobGVuZ3RoKTsKKyAgICBpZiAoZXJyb3IgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIobm5uKSIsIHN0YXJ0LCBzdG9wLCBzdGVwKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTk5OKSIsIHN0YXJ0LCBzdG9wLCBzdGVwKTsKIH0KIAogUHlEb2NfU1RSVkFSKHNsaWNlX2luZGljZXNfZG9jLApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dCBiL09iamVjdHMvc3RyaW5nbGliL1JFQURNRS50eHQKaW5kZXggYWI1MDZkNi4uOGZmNmFkOCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9SRUFETUUudHh0CkBAIC0xLDQgKzEsNCBAQAotYml0cyBzaGFyZWQgYnkgdGhlIHN0cmluZ29iamVjdCBhbmQgdW5pY29kZW9iamVjdCBpbXBsZW1lbnRhdGlvbnMgKGFuZAorYml0cyBzaGFyZWQgYnkgdGhlIGJ5dGVzb2JqZWN0IGFuZCB1bmljb2Rlb2JqZWN0IGltcGxlbWVudGF0aW9ucyAoYW5kCiBwb3NzaWJseSBvdGhlciBtb2R1bGVzLCBpbiBhIG5vdCB0b28gZGlzdGFudCBmdXR1cmUpLgogCiB0aGUgc3R1ZmYgaW4gaGVyZSBpcyBpbmNsdWRlZCBpbnRvIHJlbGV2YW50IHBsYWNlczsgc2VlIHRoZSBpbmRpdmlkdWFsCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaAppbmRleCBmNjI4MTNkLi5kMGZjMThkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXKFNUUixMRU4pICAgX1B5VW5pY29kZV9Gcm9tQVNDSUkoKGNoYXIqKShTVFIpLChMRU4pKQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaCBiL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCmluZGV4IGYzNTMzNjcuLjJlYjJkMTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCkBAIC0zOCw4ICszOCw4IEBACiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHMsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAgICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9zID0gczsKLSAgICAgICAgICAgICAgICByZWdpc3RlciBTVFJJTkdMSUJfQ0hBUiAqX3AgPSBwOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9zID0gczsKKyAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqX3AgPSBwOwogICAgICAgICAgICAgICAgIHdoaWxlIChfcyA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgYSB3aG9sZSBsb25nIGF0IGEgdGltZSAoZWl0aGVyIDQgb3IgOCBieXRlcyksCiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkbyBhIGZhc3QgdW5yb2xsZWQgY29weSBpZiBpdCBvbmx5IGNvbnRhaW5zIEFTQ0lJCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKikgX3M7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgICAgICAgICAgICAgICAgICBfcFswXSA9IChTVFJJTkdMSUJfQ0hBUikodmFsdWUgJiAweEZGdSk7CiAgICAgICAgICAgICAgICAgICAgIF9wWzFdID0gKFNUUklOR0xJQl9DSEFSKSgodmFsdWUgPj4gOCkgJiAweEZGdSk7CiAgICAgICAgICAgICAgICAgICAgIF9wWzJdID0gKFNUUklOR0xJQl9DSEFSKSgodmFsdWUgPj4gMTYpICYgMHhGRnUpOwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9ICppbnB0cjsKICAgICBTVFJJTkdMSUJfQ0hBUiAqcCA9IGRlc3QgKyAqb3V0cG9zOwogICAgIC8qIE9mZnNldHMgZnJvbSBxIGZvciByZXRyaWV2aW5nIGJ5dGUgcGFpcnMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIGludCBpaGkgPSAhIW5hdGl2ZV9vcmRlcmluZywgaWxvID0gIW5hdGl2ZV9vcmRlcmluZzsKICNlbHNlCiAgICAgaW50IGloaSA9ICFuYXRpdmVfb3JkZXJpbmcsIGlsbyA9ICEhbmF0aXZlX29yZGVyaW5nOwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgICAgICAgICAgIHJlYWRzIGFyZSBtb3JlIGV4cGVuc2l2ZSwgYmV0dGVyIHRvIGRlZmVyIHRvIGFub3RoZXIgaXRlcmF0aW9uLiAqLwogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocSwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHJ1bnMgb2YgaW4tcmFuZ2Ugbm9uLXN1cnJvZ2F0ZSBjaGFycy4gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9xID0gcTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9xID0gcTsKICAgICAgICAgICAgIHdoaWxlIChfcSA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBibG9jayA9ICogKHVuc2lnbmVkIGxvbmcgKikgX3E7CiAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZV9vcmRlcmluZykgewpAQCAtNTE3LDcgKzUxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gU1dBQihibG9jayk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAjIGlmIFNJWkVPRl9MT05HID09IDQKICAgICAgICAgICAgICAgICBwWzBdID0gKFNUUklOR0xJQl9DSEFSKShibG9jayAmIDB4RkZGRnUpOwogICAgICAgICAgICAgICAgIHBbMV0gPSAoU1RSSU5HTElCX0NIQVIpKGJsb2NrID4+IDE2KTsKQEAgLTU5NiwyNiArNTk2LDMwIEBACiAjdW5kZWYgU1dBQgogCiAKLVB5X0xPQ0FMX0lOTElORSh2b2lkKQotU1RSSU5HTElCKHV0ZjE2X2VuY29kZSkodW5zaWduZWQgc2hvcnQgKm91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICppbiwKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHg4MAorUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCitTVFJJTkdMSUIodXRmMTZfZW5jb2RlKShjb25zdCBTVFJJTkdMSUJfQ0hBUiAqaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICoqb3V0cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hdGl2ZV9vcmRlcmluZykKIHsKKyAgICB1bnNpZ25lZCBzaG9ydCAqb3V0ID0gKm91dHB0cjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqZW5kID0gaW4gKyBsZW47CiAjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDEKLSMgZGVmaW5lIFNXQUIyKENIKSAgKChDSCkgPDwgOCkKLSNlbHNlCi0jIGRlZmluZSBTV0FCMihDSCkgICgoKENIKSA8PCA4KSB8ICgoQ0gpID4+IDgpKQotI2VuZGlmCi0jaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAogICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKLSMgaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDIKLSAgICAgICAgUHlfTUVNQ1BZKG91dCwgaW4sIDIgKiBsZW4pOwotIyBlbHNlCi0gICAgICAgIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUyhTVFJJTkdMSUJfQ0hBUiwgdW5zaWduZWQgc2hvcnQsIGluLCBlbmQsIG91dCk7Ci0jIGVuZGlmCisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKKyAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CisgICAgICAgICAgICBvdXRbMF0gPSBpblswXTsKKyAgICAgICAgICAgIG91dFsxXSA9IGluWzFdOworICAgICAgICAgICAgb3V0WzJdID0gaW5bMl07CisgICAgICAgICAgICBvdXRbM10gPSBpblszXTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgeworICAgICAgICAgICAgKm91dCsrID0gKmluKys7CisgICAgICAgIH0KICAgICB9IGVsc2UgeworIyBkZWZpbmUgU1dBQjIoQ0gpICAoKENIKSA8PCA4KSAvKiBoaWdoIGJ5dGUgaXMgemVybyAqLwogICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CiAgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgewogICAgICAgICAgICAgb3V0WzBdID0gU1dBQjIoaW5bMF0pOwpAQCAtNjI1LDM3ICs2MjksOTUgQEAKICAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OwogICAgICAgICB9CiAgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgewotICAgICAgICAgICAgKm91dCsrID0gU1dBQjIoKmluKTsKLSAgICAgICAgICAgICsraW47CisgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7CisgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7CiAgICAgICAgIH0KKyN1bmRlZiBTV0FCMgogICAgIH0KKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW47CiAjZWxzZQogICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPCAweDEwMDAwCisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKKyAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CisgICAgICAgICAgICAvKiBjaGVjayBpZiBhbnkgY2hhcmFjdGVyIGlzIGEgc3Vycm9nYXRlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgaWYgKCgoaW5bMF0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzFdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsyXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bM10gXiAweGQ4MDApICYgMHhmODAwKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgb3V0WzBdID0gaW5bMF07CisgICAgICAgICAgICBvdXRbMV0gPSBpblsxXTsKKyAgICAgICAgICAgIG91dFsyXSA9IGluWzJdOworICAgICAgICAgICAgb3V0WzNdID0gaW5bM107CisgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgewotICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICppbisrOwotICAgICAgICAgICAgaWYgKGNoIDwgMHgxMDAwMCkKKyAgICAgICAgICAgIFB5X1VDUzQgY2g7CisgICAgICAgICAgICBjaCA9ICppbisrOworICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwKQogICAgICAgICAgICAgICAgICpvdXQrKyA9IGNoOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZTAwMCkKKyAgICAgICAgICAgICAgICAvKiByZWplY3Qgc3Vycm9nYXRlIGNoYXJhY3RlcnMgKFUrREM4MDAtVStERkZGKSAqLworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHgxMDAwMAorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIG91dFswXSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIG91dFsxXSA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBjaDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CisjZGVmaW5lIFNXQUIyKENIKSAgKCgoQ0gpIDw8IDgpIHwgKChDSCkgPj4gOCkpCisjaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAorICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworICAgICAgICAgICAgLyogY2hlY2sgaWYgYW55IGNoYXJhY3RlciBpcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGlmICgoKGluWzBdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsxXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMl0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzNdIF4gMHhkODAwKSAmIDB4ZjgwMCkgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG91dFswXSA9IFNXQUIyKGluWzBdKTsKKyAgICAgICAgICAgIG91dFsxXSA9IFNXQUIyKGluWzFdKTsKKyAgICAgICAgICAgIG91dFsyXSA9IFNXQUIyKGluWzJdKTsKKyAgICAgICAgICAgIG91dFszXSA9IFNXQUIyKGluWzNdKTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7CiAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweDEwMDAwKQorICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwKQogICAgICAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKChQeV9VQ1MyKWNoKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweGUwMDApCisgICAgICAgICAgICAgICAgLyogcmVqZWN0IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIChVK0RDODAwLVUrREZGRikgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisjaWYgU1RSSU5HTElCX01BWF9DSEFSID49IDB4MTAwMDAKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID49IDB4MTAwMDApIHsKICAgICAgICAgICAgICAgICBQeV9VQ1MyIGNoMSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIFB5X1VDUzIgY2gyID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgICAgICBvdXRbMF0gPSBTV0FCMihjaDEpOwogICAgICAgICAgICAgICAgIG91dFsxXSA9IFNXQUIyKGNoMik7CiAgICAgICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7CisgICAgICAgIH0KICN1bmRlZiBTV0FCMgorICAgIH0KKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW47CisgIGZhaWw6CisgICAgKm91dHB0ciA9IG91dDsKKyAgICByZXR1cm4gbGVuIC0gKGVuZCAtIGluICsgMSk7CisjZW5kaWYKIH0KKyNlbmRpZgorCiAjZW5kaWYgLyogU1RSSU5HTElCX0lTX1VOSUNPREUgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2VxLmggYi9PYmplY3RzL3N0cmluZ2xpYi9lcS5oCmluZGV4IDNlNWY1MTAuLmY4ZmQzODQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2VxLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaApAQCAtNiw4ICs2LDggQEAKIFB5X0xPQ0FMX0lOTElORShpbnQpCiB1bmljb2RlX2VxKFB5T2JqZWN0ICphYSwgUHlPYmplY3QgKmJiKQogewotICAgIHJlZ2lzdGVyIFB5VW5pY29kZU9iamVjdCAqYSA9IChQeVVuaWNvZGVPYmplY3QgKilhYTsKLSAgICByZWdpc3RlciBQeVVuaWNvZGVPYmplY3QgKmIgPSAoUHlVbmljb2RlT2JqZWN0ICopYmI7CisgICAgUHlVbmljb2RlT2JqZWN0ICphID0gKFB5VW5pY29kZU9iamVjdCAqKWFhOworICAgIFB5VW5pY29kZU9iamVjdCAqYiA9IChQeVVuaWNvZGVPYmplY3QgKiliYjsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoYSkgPT0gLTEgfHwgUHlVbmljb2RlX1JFQURZKGIpID09IC0xKSB7CiAgICAgICAgIGFzc2VydCgwICYmICJ1bmljb2RlX2VxIHJlYWR5IGZhaWwiKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBiL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAppbmRleCA1NWFjNzdkLi5jZDdjYWM0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCkBAIC0xNDIsNiArMTQyLDggQEAKICAgICBtYXNrID0gMDsKIAogICAgIGlmIChtb2RlICE9IEZBU1RfUlNFQVJDSCkgeworICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqc3MgPSBzICsgbSAtIDE7CisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICpwcCA9IHAgKyBtIC0gMTsKIAogICAgICAgICAvKiBjcmVhdGUgY29tcHJlc3NlZCBib3llci1tb29yZSBkZWx0YSAxIHRhYmxlICovCiAKQEAgLTE1Niw3ICsxNTgsNyBAQAogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gdzsgaSsrKSB7CiAgICAgICAgICAgICAvKiBub3RlOiB1c2luZyBtbGFzdCBpbiB0aGUgc2tpcCBwYXRoIHNsb3dzIHRoaW5ncyBkb3duIG9uIHg4NiAqLwotICAgICAgICAgICAgaWYgKHNbaSttLTFdID09IHBbbS0xXSkgeworICAgICAgICAgICAgaWYgKHNzW2ldID09IHBwWzBdKSB7CiAgICAgICAgICAgICAgICAgLyogY2FuZGlkYXRlIG1hdGNoICovCiAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1sYXN0OyBqKyspCiAgICAgICAgICAgICAgICAgICAgIGlmIChzW2kral0gIT0gcFtqXSkKQEAgLTE3MiwxMyArMTc0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvKiBtaXNzOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2krbV0pKQorICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNzW2krMV0pKQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIG07CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIHNraXA7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHNraXA6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaSttXSkpCisgICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc3NbaSsxXSkpCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oCmluZGV4IDA2NTU5YzguLmViM2ZlODggMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB3aGlsZSAocCA8IGVuZCkgewogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9wID0gcDsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9wID0gcDsKICAgICAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSBfcDsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBVQ1MxX0FTQ0lJX0NIQVJfTUFTSykKQEAgLTY2LDcgKzY2LDcgQEAKICNlbHNlCiAjZXJyb3IgSW52YWxpZCBTVFJJTkdMSUJfU0laRU9GX0NIQVIgKG11c3QgYmUgMSwgMiBvciA0KQogI2VuZGlmCi0gICAgcmVnaXN0ZXIgUHlfVUNTNCBtYXNrOworICAgIFB5X1VDUzQgbWFzazsKICAgICBQeV9zc2l6ZV90IG4gPSBlbmQgLSBiZWdpbjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqcCA9IGJlZ2luOwogICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBiZWdpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obiwgNCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmggYi9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2OGIzMQotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaApAQCAtMCwwICsxLDEzMyBAQAorLyogc3RyaW5nbGliOiBieXRlcyBqb2luaW5nIGltcGxlbWVudGF0aW9uICovCisKKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgIT0gMQorI2Vycm9yIGpvaW4uaCBvbmx5IGNvbXBhdGlibGUgd2l0aCBieXRlLXdpc2Ugc3RyaW5ncworI2VuZGlmCisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorU1RSSU5HTElCKGJ5dGVzX2pvaW4pKFB5T2JqZWN0ICpzZXAsIFB5T2JqZWN0ICppdGVyYWJsZSkKK3sKKyAgICBjaGFyICpzZXBzdHIgPSBTVFJJTkdMSUJfU1RSKHNlcCk7CisgICAgY29uc3QgUHlfc3NpemVfdCBzZXBsZW4gPSBTVFJJTkdMSUJfTEVOKHNlcCk7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IHNlcWxlbiA9IDA7CisgICAgUHlfc3NpemVfdCBzeiA9IDA7CisgICAgUHlfc3NpemVfdCBpLCBuYnVmczsKKyAgICBQeU9iamVjdCAqc2VxLCAqaXRlbTsKKyAgICBQeV9idWZmZXIgKmJ1ZmZlcnMgPSBOVUxMOworI2RlZmluZSBOQl9TVEFUSUNfQlVGRkVSUyAxMAorICAgIFB5X2J1ZmZlciBzdGF0aWNfYnVmZmVyc1tOQl9TVEFUSUNfQlVGRkVSU107CisKKyAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QoaXRlcmFibGUsICJjYW4gb25seSBqb2luIGFuIGl0ZXJhYmxlIik7CisgICAgaWYgKHNlcSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOworICAgIGlmIChzZXFsZW4gPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgcmV0dXJuIFNUUklOR0xJQl9ORVcoTlVMTCwgMCk7CisgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgIGlmIChzZXFsZW4gPT0gMSkgeworICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgMCk7CisgICAgICAgIGlmIChTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QoaXRlbSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBpZiAoc2VxbGVuID4gTkJfU1RBVElDX0JVRkZFUlMpIHsKKyAgICAgICAgYnVmZmVycyA9IFB5TWVtX05FVyhQeV9idWZmZXIsIHNlcWxlbik7CisgICAgICAgIGlmIChidWZmZXJzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBidWZmZXJzID0gc3RhdGljX2J1ZmZlcnM7CisgICAgfQorCisgICAgLyogSGVyZSBpcyB0aGUgZ2VuZXJhbCBjYXNlLiAgRG8gYSBwcmUtcGFzcyB0byBmaWd1cmUgb3V0IHRoZSB0b3RhbAorICAgICAqIGFtb3VudCBvZiBzcGFjZSB3ZSdsbCBuZWVkIChzeiksIGFuZCBzZWUgd2hldGhlciBhbGwgYXJndW1lbnRzIGFyZQorICAgICAqIGJ1ZmZlci1jb21wYXRpYmxlLgorICAgICAqLworICAgIGZvciAoaSA9IDAsIG5idWZzID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7CisgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOworICAgICAgICBpZiAoX2dldGJ1ZmZlcihpdGVtLCAmYnVmZmVyc1tpXSkgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBpdGVtICV6ZDogZXhwZWN0ZWQgYnl0ZXMsIGJ5dGVhcnJheSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvciBhbiBvYmplY3Qgd2l0aCB0aGUgYnVmZmVyIGludGVyZmFjZSwgJS44MHMgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGksIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBuYnVmcyA9IGkgKyAxOyAgLyogZm9yIGVycm9yIGNsZWFudXAgKi8KKyAgICAgICAgaXRlbWxlbiA9IGJ1ZmZlcnNbaV0ubGVuOworICAgICAgICBpZiAoaXRlbWxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gc3opIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHN6ICs9IGl0ZW1sZW47CisgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChzZXBsZW4gPiBQWV9TU0laRV9UX01BWCAtIHN6KSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN6ICs9IHNlcGxlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VxbGVuICE9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFsbG9jYXRlIHJlc3VsdCBzcGFjZS4gKi8KKyAgICByZXMgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIHN6KTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAvKiBDYXRlbmF0ZSBldmVyeXRoaW5nLiAqLworICAgIHAgPSBTVFJJTkdMSUJfU1RSKHJlcyk7CisgICAgaWYgKCFzZXBsZW4pIHsKKyAgICAgICAgLyogZmFzdCBwYXRoICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG4gPSBidWZmZXJzW2ldLmxlbjsKKyAgICAgICAgICAgIGNoYXIgKnEgPSBidWZmZXJzW2ldLmJ1ZjsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKKyAgICAgICAgICAgIHAgKz0gbjsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKSB7CisgICAgICAgIFB5X3NzaXplX3QgbjsKKyAgICAgICAgY2hhciAqcTsKKyAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBzZXBzdHIsIHNlcGxlbik7CisgICAgICAgICAgICBwICs9IHNlcGxlbjsKKyAgICAgICAgfQorICAgICAgICBuID0gYnVmZmVyc1tpXS5sZW47CisgICAgICAgIHEgPSBidWZmZXJzW2ldLmJ1ZjsKKyAgICAgICAgUHlfTUVNQ1BZKHAsIHEsIG4pOworICAgICAgICBwICs9IG47CisgICAgfQorICAgIGdvdG8gZG9uZTsKKworZXJyb3I6CisgICAgcmVzID0gTlVMTDsKK2RvbmU6CisgICAgUHlfREVDUkVGKHNlcSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5idWZzOyBpKyspCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcnNbaV0pOworICAgIGlmIChidWZmZXJzICE9IHN0YXRpY19idWZmZXJzKQorICAgICAgICBQeU1lbV9GUkVFKGJ1ZmZlcnMpOworICAgIHJldHVybiByZXM7Cit9CisKKyN1bmRlZiBOQl9TVEFUSUNfQlVGRkVSUwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAppbmRleCA0MGNiNTEyLi5lZDMyYTZmIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaApAQCAtMjksNiArMjksMTEgQEAKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOworCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob3V0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAjZWxzZQogICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBzdHJfb2JqKTsKQEAgLTc5LDYgKzg0LDExIEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgU1RSSU5HTElCX05FVyhzdHIsIHN0cl9sZW4pKTsKKworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG91dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBTVFJJTkdMSUJfRU1QVFkpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzE4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9yZXBsYWNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyogc3RyaW5nbGliOiByZXBsYWNlIGltcGxlbWVudGF0aW9uICovCisKKyNpZm5kZWYgU1RSSU5HTElCX0ZBU1RTRUFSQ0hfSAorI2Vycm9yIG11c3QgaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIgYmVmb3JlIGluY2x1ZGluZyB0aGlzIG1vZHVsZQorI2VuZGlmCisKK1B5X0xPQ0FMX0lOTElORSh2b2lkKQorU1RSSU5HTElCKHJlcGxhY2VfMWNoYXJfaW5wbGFjZSkoU1RSSU5HTElCX0NIQVIqIHMsIFNUUklOR0xJQl9DSEFSKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHUxLCBQeV9VQ1M0IHUyLCBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgICpzID0gdTI7CisgICAgd2hpbGUgKC0tbWF4Y291bnQgJiYgKytzICE9IGVuZCkgeworICAgICAgICAvKiBGaW5kIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZXBsYWNlZC4KKworICAgICAgICAgICBJZiBpdCBvY2N1cnMgb2Z0ZW4sIGl0IGlzIGZhc3RlciB0byBzY2FuIGZvciBpdCB1c2luZyBhbiBpbmxpbmUKKyAgICAgICAgICAgbG9vcC4gIElmIGl0IG9jY3VycyBzZWxkb20sIGl0IGlzIGZhc3RlciB0byBzY2FuIGZvciBpdCB1c2luZyBhCisgICAgICAgICAgIGZ1bmN0aW9uIGNhbGw7IHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCBpcyBhbW9ydGl6ZWQKKyAgICAgICAgICAgYWNyb3NzIHRoZSBtYW55IGNoYXJhY3RlcnMgdGhhdCBjYWxsIGNvdmVycy4gIFdlIHN0YXJ0IHdpdGggYW4KKyAgICAgICAgICAgaW5saW5lIGxvb3AgYW5kIHVzZSBhIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBmYWxsIGJhY2sKKyAgICAgICAgICAgdG8gYSBmdW5jdGlvbiBjYWxsLiAqLworICAgICAgICBpZiAoKnMgIT0gdTEpIHsKKyAgICAgICAgICAgIGludCBhdHRlbXB0cyA9IDEwOworICAgICAgICAgICAgLyogc2VhcmNoIHUxIGluIGEgZHVtbXkgbG9vcCAqLworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytzID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICgqcyA9PSB1MSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCEtLWF0dGVtcHRzKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGlmIHUxIHdhcyBub3QgZm91bmQgZm9yIGF0dGVtcHRzIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIHVzZSBGQVNUU0VBUkNIKCkgb3IgbWVtY2hyKCkgKi8KKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPT0gMQorICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIHMgPSBtZW1jaHIocywgdTEsIGVuZCAtIHMpOworICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiBjaDEgPSAoU1RSSU5HTElCX0NIQVIpIHUxOworICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIGkgPSBGQVNUU0VBUkNIKHMsIGVuZCAtIHMsICZjaDEsIDEsIDAsIEZBU1RfU0VBUkNIKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBzICs9IGk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgLyogcmVzdGFydCB0aGUgZHVtbXkgbG9vcCAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKnMgPSB1MjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaAppbmRleCA5NDdkZDI4Li4zMWY3N2E3IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKQEAgLTM0NSw4ICszNDUsOCBAQAogICAgICAgIGFuZCB0aGUgYXBwZW5kcyBvbmx5IGRvbmUgd2hlbiB0aGUgcHJlYWxsb2MgYnVmZmVyIGlzIGZ1bGwuCiAgICAgICAgVGhhdCdzIHRvbyBtdWNoIHdvcmsgZm9yIGxpdHRsZSBnYWluLiovCiAKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGo7CiAgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgIFB5T2JqZWN0ICpzdWI7CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaCBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaAppbmRleCA3YmI5MWE3Li5jZTI3ZjNlIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCkBAIC0yMSw3ICsyMSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORwogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgX1B5Qnl0ZXNfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeUJ5dGVzX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeUJ5dGVzX0NoZWNrRXhhY3QKICNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1N0cgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAppbmRleCBjYmQ3MTQ0Li5jYWU2ZWExIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaApAQCAtNSwyMSArNSwyMyBAQAogICAgc2hhcmVkIGNvZGUgaW4gYnl0ZXNfbWV0aG9kcy5jIHRvIGN1dCBkb3duIG9uIGR1cGxpY2F0ZSBjb2RlIGJsb2F0LiAgKi8KIAogUHlEb2NfU1RSVkFSKGV4cGFuZHRhYnNfX2RvY19fLAotIkIuZXhwYW5kdGFicyhbdGFic2l6ZV0pIC0+IGNvcHkgb2YgQlxuXAorIkIuZXhwYW5kdGFicyh0YWJzaXplPTgpIC0+IGNvcHkgb2YgQlxuXAogXG5cCiBSZXR1cm4gYSBjb3B5IG9mIEIgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSBleHBhbmRlZCB1c2luZyBzcGFjZXMuXG5cCiBJZiB0YWJzaXplIGlzIG5vdCBnaXZlbiwgYSB0YWIgc2l6ZSBvZiA4IGNoYXJhY3RlcnMgaXMgYXNzdW1lZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0Kgotc3RyaW5nbGliX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc3RyaW5nbGliX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBjb25zdCBjaGFyICplLCAqcDsKICAgICBjaGFyICpxOwogICAgIFB5X3NzaXplX3QgaSwgajsKICAgICBQeU9iamVjdCAqdTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InRhYnNpemUiLCAwfTsKICAgICBpbnQgdGFic2l6ZSA9IDg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmV4cGFuZHRhYnMiLCAmdGFic2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxpOmV4cGFuZHRhYnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnRhYnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEZpcnN0IHBhc3M6IGRldGVybWluZSBzaXplIG9mIG91dHB1dCBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaAppbmRleCBlOGM2ZmNiLi5jZTFlYjU3IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbVVDUzEKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oCmluZGV4IDQ1ZTU3MjkuLmY5MDBjYjYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tVUNTMgotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmgKaW5kZXggNjQ3YTI3ZS4uODZhNDgwZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21VQ1M0Ci0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmggYi9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCmluZGV4IDAzMTE3ZWMuLmY5ZDNmMWQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaApAQCAtNiw3ICs2LDYgQEAKICN1bmRlZiAgU1RSSU5HTElCX1NUUgogI3VuZGVmICBTVFJJTkdMSUJfTEVOCiAjdW5kZWYgIFNUUklOR0xJQl9ORVcKLSN1bmRlZiAgU1RSSU5HTElCX1JFU0laRQogI3VuZGVmICBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcKICN1bmRlZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaAppbmRleCBkNDcxOWE1Li5hZWMyMjFhIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiBzdGF0aWMgaW50CiBwYXJzZV9maWVsZChTdWJTdHJpbmcgKnN0ciwgU3ViU3RyaW5nICpmaWVsZF9uYW1lLCBTdWJTdHJpbmcgKmZvcm1hdF9zcGVjLAotICAgICAgICAgICAgUHlfVUNTNCAqY29udmVyc2lvbikKKyAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nLCBQeV9VQ1M0ICpjb252ZXJzaW9uKQogewogICAgIC8qIE5vdGUgdGhpcyBmdW5jdGlvbiB3b3JrcyBpZiB0aGUgZmllbGQgbmFtZSBpcyB6ZXJvIGxlbmd0aCwKICAgICAgICB3aGljaCBpcyBnb29kLiAgWmVybyBsZW5ndGggZmllbGQgbmFtZXMgYXJlIGhhbmRsZWQgbGF0ZXIsIGluCkBAIC01NjEsNiArNTYxLDE1IEBACiAgICAgZmllbGRfbmFtZS0+c3RhcnQgPSBzdHItPnN0YXJ0OwogICAgIHdoaWxlIChzdHItPnN0YXJ0IDwgc3RyLT5lbmQpIHsKICAgICAgICAgc3dpdGNoICgoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKykpKSB7CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmV4cGVjdGVkICd7JyBpbiBmaWVsZCBuYW1lIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICBmb3IgKDsgc3RyLT5zdGFydCA8IHN0ci0+ZW5kOyBzdHItPnN0YXJ0KyspCisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQpID09ICddJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnfSc6CiAgICAgICAgIGNhc2UgJzonOgogICAgICAgICBjYXNlICchJzoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTcwLDQxICs1NzksNjIgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydCAtIDE7CiAgICAgaWYgKGMgPT0gJyEnIHx8IGMgPT0gJzonKSB7CisgICAgICAgIFB5X3NzaXplX3QgY291bnQ7CiAgICAgICAgIC8qIHdlIGhhdmUgYSBmb3JtYXQgc3BlY2lmaWVyIGFuZC9vciBhIGNvbnZlcnNpb24gKi8KICAgICAgICAgLyogZG9uJ3QgaW5jbHVkZSB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydC0xOwotCi0gICAgICAgIC8qIHRoZSBmb3JtYXQgc3BlY2lmaWVyIGlzIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgKi8KLSAgICAgICAgZm9ybWF0X3NwZWMtPnN0ciA9IHN0ci0+c3RyOwotICAgICAgICBmb3JtYXRfc3BlYy0+c3RhcnQgPSBzdHItPnN0YXJ0OwotICAgICAgICBmb3JtYXRfc3BlYy0+ZW5kID0gc3RyLT5lbmQ7CiAKICAgICAgICAgLyogc2VlIGlmIHRoZXJlJ3MgYSBjb252ZXJzaW9uIHNwZWNpZmllciAqLwogICAgICAgICBpZiAoYyA9PSAnIScpIHsKICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYW5vdGhlciBjaGFyYWN0ZXIgcHJlc2VudCAqLwotICAgICAgICAgICAgaWYgKGZvcm1hdF9zcGVjLT5zdGFydCA+PSBmb3JtYXRfc3BlYy0+ZW5kKSB7CisgICAgICAgICAgICBpZiAoc3RyLT5zdGFydCA+PSBzdHItPmVuZCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kIG9mIGZvcm1hdCB3aGlsZSBsb29raW5nIGZvciBjb252ZXJzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZCBvZiBzdHJpbmcgd2hpbGUgbG9va2luZyBmb3IgY29udmVyc2lvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZXIiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpjb252ZXJzaW9uID0gUHlVbmljb2RlX1JFQURfQ0hBUihmb3JtYXRfc3BlYy0+c3RyLCBmb3JtYXRfc3BlYy0+c3RhcnQrKyk7CisgICAgICAgICAgICAqY29udmVyc2lvbiA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKyk7CiAKLSAgICAgICAgICAgIC8qIGlmIHRoZXJlIGlzIGFub3RoZXIgY2hhcmFjdGVyLCBpdCBtdXN0IGJlIGEgY29sb24gKi8KLSAgICAgICAgICAgIGlmIChmb3JtYXRfc3BlYy0+c3RhcnQgPCBmb3JtYXRfc3BlYy0+ZW5kKSB7Ci0gICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoZm9ybWF0X3NwZWMtPnN0ciwgZm9ybWF0X3NwZWMtPnN0YXJ0KyspOworICAgICAgICAgICAgaWYgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgeworICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspOworICAgICAgICAgICAgICAgIGlmIChjID09ICd9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgaWYgKGMgIT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICc6JyBhZnRlciBmb3JtYXQgc3BlY2lmaWVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJzonIGFmdGVyIGNvbnZlcnNpb24gc3BlY2lmaWVyIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBmb3JtYXRfc3BlYy0+c3RyID0gc3RyLT5zdHI7CisgICAgICAgIGZvcm1hdF9zcGVjLT5zdGFydCA9IHN0ci0+c3RhcnQ7CisgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgd2hpbGUgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgeworICAgICAgICAgICAgc3dpdGNoICgoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKykpKSB7CisgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMTsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYy0+ZW5kID0gc3RyLT5zdGFydCAtIDE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWF0Y2hlZCAneycgaW4gZm9ybWF0IHNwZWMiKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgLyogZW5kIG9mIHN0cmluZywgdGhlcmUncyBubyBmb3JtYXRfc3BlYyBvciBjb252ZXJzaW9uICovCi0gICAgICAgIGZpZWxkX25hbWUtPmVuZCA9IHN0ci0+c3RhcnQ7CisgICAgZWxzZSBpZiAoYyAhPSAnfScpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleHBlY3RlZCAnfScgYmVmb3JlIGVuZCBvZiBzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgcmV0dXJuIDE7CiB9CkBAIC02MzgsMTAgKzY2OCw5IEBACiAgICAgICAgICAgICAgICAgICAgIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsIFB5X1VDUzQgKmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKQogewotICAgIGludCBhdF9lbmQsIGhpdF9mb3JtYXRfc3BlYzsKKyAgICBpbnQgYXRfZW5kOwogICAgIFB5X1VDUzQgYyA9IDA7CiAgICAgUHlfc3NpemVfdCBzdGFydDsKLSAgICBpbnQgY291bnQ7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IG1hcmt1cF9mb2xsb3dzID0gMDsKIApAQCAtNzEzLDUyICs3NDIsMTIgQEAKICAgICBpZiAoIW1hcmt1cF9mb2xsb3dzKQogICAgICAgICByZXR1cm4gMjsKIAotICAgIC8qIHRoaXMgaXMgbWFya3VwLCBmaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBieSBjb3VudGluZyBuZXN0ZWQKLSAgICAgICBicmFjZXMuICBub3RlIHRoYXQgdGhpcyBwcm9oaWJpdHMgZXNjYXBlZCBicmFjZXMsIHNvIHRoYXQKLSAgICAgICBmb3JtYXRfc3BlY3MgY2Fubm90IGhhdmUgYnJhY2VzIGluIHRoZW0uICovCisgICAgLyogdGhpcyBpcyBtYXJrdXA7IHBhcnNlIHRoZSBmaWVsZCAqLwogICAgICpmaWVsZF9wcmVzZW50ID0gMTsKLSAgICBjb3VudCA9IDE7Ci0KLSAgICBzdGFydCA9IHNlbGYtPnN0ci5zdGFydDsKLQotICAgIC8qIHdlIGtub3cgd2UgY2FuJ3QgaGF2ZSBhIHplcm8gbGVuZ3RoIHN0cmluZywgc28gZG9uJ3Qgd29ycnkKLSAgICAgICBhYm91dCB0aGF0IGNhc2UgKi8KLSAgICBoaXRfZm9ybWF0X3NwZWMgPSAwOwotICAgIHdoaWxlIChzZWxmLT5zdHIuc3RhcnQgPCBzZWxmLT5zdHIuZW5kKSB7Ci0gICAgICAgIHN3aXRjaCAoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc2VsZi0+c3RyLnN0ciwgc2VsZi0+c3RyLnN0YXJ0KyspKSB7Ci0gICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgaWYgKCFoaXRfZm9ybWF0X3NwZWMpIHsKLSAgICAgICAgICAgICAgICBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgaGl0X2Zvcm1hdF9zcGVjID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgIC8qIHRoZSBmb3JtYXQgc3BlYyBuZWVkcyB0byBiZSByZWN1cnNpdmVseSBleHBhbmRlZC4KLSAgICAgICAgICAgICAgIHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCBhbmQgbm90IHN0cmljdGx5IG5lZWRlZCAqLwotICAgICAgICAgICAgaWYgKGhpdF9mb3JtYXRfc3BlYykKLSAgICAgICAgICAgICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnfSc6Ci0gICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgaWYgKGNvdW50IDw9IDApIHsKLSAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lLiAgcGFyc2UgYW5kIGdldCBvdXQgKi8KLSAgICAgICAgICAgICAgICBTdWJTdHJpbmcgczsKLQotICAgICAgICAgICAgICAgIFN1YlN0cmluZ19pbml0KCZzLCBzZWxmLT5zdHIuc3RyLCBzdGFydCwgc2VsZi0+c3RyLnN0YXJ0IC0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlX2ZpZWxkKCZzLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywgY29udmVyc2lvbikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgICAgICAvKiBzdWNjZXNzICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIGVuZCBvZiBzdHJpbmcgd2hpbGUgc2VhcmNoaW5nIGZvciBtYXRjaGluZyAnfScgKi8KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWF0Y2hlZCAneycgaW4gZm9ybWF0Iik7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFwYXJzZV9maWVsZCgmc2VsZi0+c3RyLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZywgY29udmVyc2lvbikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAyOwogfQogCiAKQEAgLTg3NywyNSArODY2LDE5IEBACiAgICAgU3ViU3RyaW5nIGxpdGVyYWw7CiAgICAgU3ViU3RyaW5nIGZpZWxkX25hbWU7CiAgICAgU3ViU3RyaW5nIGZvcm1hdF9zcGVjOwotICAgIFB5X1VDUzQgY29udmVyc2lvbiwgbWF4Y2hhcjsKLSAgICBQeV9zc2l6ZV90IHN1YmxlbjsKLSAgICBpbnQgZXJyOworICAgIFB5X1VDUzQgY29udmVyc2lvbjsKIAogICAgIE1hcmt1cEl0ZXJhdG9yX2luaXQoJml0ZXIsIGlucHV0LT5zdHIsIGlucHV0LT5zdGFydCwgaW5wdXQtPmVuZCk7CiAgICAgd2hpbGUgKChyZXN1bHQgPSBNYXJrdXBJdGVyYXRvcl9uZXh0KCZpdGVyLCAmbGl0ZXJhbCwgJmZpZWxkX3ByZXNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWVsZF9uYW1lLCAmZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKSkgPT0gMikgewotICAgICAgICBzdWJsZW4gPSBsaXRlcmFsLmVuZCAtIGxpdGVyYWwuc3RhcnQ7Ci0gICAgICAgIGlmIChzdWJsZW4pIHsKLSAgICAgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKGxpdGVyYWwuc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdGFydCwgbGl0ZXJhbC5lbmQpOwotICAgICAgICAgICAgZXJyID0gX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgc3VibGVuLCBtYXhjaGFyKTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gLTEpCisgICAgICAgIGlmIChsaXRlcmFsLmVuZCAhPSBsaXRlcmFsLnN0YXJ0KSB7CisgICAgICAgICAgICBpZiAoIWZpZWxkX3ByZXNlbnQgJiYgaXRlci5zdHIuc3RhcnQgPT0gaXRlci5zdHIuZW5kKQorICAgICAgICAgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3Vic3RyaW5nKHdyaXRlciwgbGl0ZXJhbC5zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLnN0YXJ0LCBsaXRlcmFsLmVuZCkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdHIsIGxpdGVyYWwuc3RhcnQsIHN1Ymxlbik7Ci0gICAgICAgICAgICB3cml0ZXItPnBvcyArPSBzdWJsZW47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZmllbGRfcHJlc2VudCkgewpAQCAtOTIwLDcgKzkwMyw2IEBACiAgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCwgQXV0b051bWJlciAqYXV0b19udW1iZXIpCiB7CiAgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Ci0gICAgUHlfc3NpemVfdCBtaW5sZW47CiAKICAgICAvKiBjaGVjayB0aGUgcmVjdXJzaW9uIGxldmVsICovCiAgICAgaWYgKHJlY3Vyc2lvbl9kZXB0aCA8PSAwKSB7CkBAIC05MjksOCArOTExLDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbWlubGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQtPnN0cikgKyAxMDA7Ci0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIG1pbmxlbik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQtPnN0cikgKyAxMDA7CiAKICAgICBpZiAoIWRvX21hcmt1cChpbnB1dCwgYXJncywga3dhcmdzLCAmd3JpdGVyLCByZWN1cnNpb25fZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgYXV0b19udW1iZXIpKSB7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAppbmRleCBmMTZmMjFlLi4zZGI1NjI5IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKQEAgLTIxLDE3ICsyMSwxMSBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBQeVVuaWNvZGVfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDAKLSNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1VuaWNvZGUKLSNkZWZpbmUgU1RSSU5HTElCX1RPQVNDSUkgICAgICAgIFB5T2JqZWN0X1JlcHIKLSNlbHNlCiAjZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9TdHIKICNkZWZpbmUgU1RSSU5HTElCX1RPQVNDSUkgICAgICAgIFB5T2JqZWN0X0FTQ0lJCi0jZW5kaWYKIAogI2RlZmluZSBTVFJJTkdMSUJfV0FOVF9DT05UQUlOU19PQkogMQogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cnVjdHNlcS5jIGIvT2JqZWN0cy9zdHJ1Y3RzZXEuYwppbmRleCBjM2I5YTcyLi42NjQzNDRiIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cnVjdHNlcS5jCisrKyBiL09iamVjdHMvc3RydWN0c2VxLmMKQEAgLTExLDE3ICsxMSwyMCBAQAogLyogRmllbGRzIHdpdGggdGhpcyBuYW1lIGhhdmUgb25seSBhIGZpZWxkIGluZGV4LCBub3QgYSBmaWVsZCBuYW1lLgogICAgVGhleSBhcmUgb25seSBhbGxvd2VkIGZvciBpbmRpY2VzIDwgbl92aXNpYmxlX2ZpZWxkcy4gKi8KIGNoYXIgKlB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkID0gInVubmFtZWQgZmllbGQiOworX1B5X0lERU5USUZJRVIobl9zZXF1ZW5jZV9maWVsZHMpOworX1B5X0lERU5USUZJRVIobl9maWVsZHMpOworX1B5X0lERU5USUZJRVIobl91bm5hbWVkX2ZpZWxkcyk7CiAKICNkZWZpbmUgVklTSUJMRV9TSVpFKG9wKSBQeV9TSVpFKG9wKQogI2RlZmluZSBWSVNJQkxFX1NJWkVfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCB2aXNpYmxlX2xlbmd0aF9rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fc2VxdWVuY2VfZmllbGRzKSkKIAogI2RlZmluZSBSRUFMX1NJWkVfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCByZWFsX2xlbmd0aF9rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fZmllbGRzKSkKICNkZWZpbmUgUkVBTF9TSVpFKG9wKSBSRUFMX1NJWkVfVFAoUHlfVFlQRShvcCkpCiAKICNkZWZpbmUgVU5OQU1FRF9GSUVMRFNfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCB1bm5hbWVkX2ZpZWxkc19rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fdW5uYW1lZF9maWVsZHMpKQogI2RlZmluZSBVTk5BTUVEX0ZJRUxEUyhvcCkgVU5OQU1FRF9GSUVMRFNfVFAoUHlfVFlQRShvcCkpCiAKIApAQCAtNTksNyArNjIsNyBAQAogc3RydWN0c2VxX2RlYWxsb2MoUHlTdHJ1Y3RTZXF1ZW5jZSAqb2JqKQogewogICAgIFB5X3NzaXplX3QgaSwgc2l6ZTsKLSAgICAKKwogICAgIHNpemUgPSBSRUFMX1NJWkUob2JqKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFB5X1hERUNSRUYob2JqLT5vYl9pdGVtW2ldKTsKQEAgLTIzMCw4ICsyMzMsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHN0cnVjdHNlcV9yZWR1Y2UoUHlTdHJ1Y3RTZXF1ZW5jZSogc2VsZikKIHsKLSAgICBQeU9iamVjdCogdHVwOwotICAgIFB5T2JqZWN0KiBkaWN0OworICAgIFB5T2JqZWN0KiB0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0KiBkaWN0ID0gTlVMTDsKICAgICBQeU9iamVjdCogcmVzdWx0OwogICAgIFB5X3NzaXplX3Qgbl9maWVsZHMsIG5fdmlzaWJsZV9maWVsZHMsIG5fdW5uYW1lZF9maWVsZHM7CiAgICAgaW50IGk7CkBAIC0yNDAsMTUgKzI0MywxMiBAQAogICAgIG5fdmlzaWJsZV9maWVsZHMgPSBWSVNJQkxFX1NJWkUoc2VsZik7CiAgICAgbl91bm5hbWVkX2ZpZWxkcyA9IFVOTkFNRURfRklFTERTKHNlbGYpOwogICAgIHR1cCA9IFB5VHVwbGVfTmV3KG5fdmlzaWJsZV9maWVsZHMpOwotICAgIGlmICghdHVwKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIXR1cCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGRpY3QgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCFkaWN0KSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0dXApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFkaWN0KQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG5fdmlzaWJsZV9maWVsZHM7IGkrKykgewogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+b2JfaXRlbVtpXSk7CkBAIC0yNTcsOCArMjU3LDggQEAKIAogICAgIGZvciAoOyBpIDwgbl9maWVsZHM7IGkrKykgewogICAgICAgICBjaGFyICpuID0gUHlfVFlQRShzZWxmKS0+dHBfbWVtYmVyc1tpLW5fdW5uYW1lZF9maWVsZHNdLm5hbWU7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2l0ZW1baV0pOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgbiwgc2VsZi0+b2JfaXRlbVtpXSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICByZXN1bHQgPSBQeV9CdWlsZFZhbHVlKCIoTyhPTykpIiwgUHlfVFlQRShzZWxmKSwgdHVwLCBkaWN0KTsKQEAgLTI2Nyw2ICsyNjcsMTEgQEAKICAgICBQeV9ERUNSRUYoZGljdCk7CiAKICAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHR1cCk7CisgICAgUHlfWERFQ1JFRihkaWN0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHN0cnVjdHNlcV9tZXRob2RzW10gPSB7CkBAIC0zMTUsMTIgKzMyMCwxMyBAQAogICAgIHN0cnVjdHNlcV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwogCi12b2lkCi1QeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQoraW50CitQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU1lbWJlckRlZiogbWVtYmVyczsKICAgICBpbnQgbl9tZW1iZXJzLCBuX3VubmFtZWRfbWVtYmVycywgaSwgazsKKyAgICBQeU9iamVjdCAqdjsKIAogI2lmZGVmIFB5X1RSQUNFX1JFRlMKICAgICAvKiBpZiB0aGUgdHlwZSBvYmplY3Qgd2FzIGNoYWluZWQsIHVuY2hhaW4gaXQgZmlyc3QKQEAgLTM0Miw4ICszNDgsMTAgQEAKICAgICB0eXBlLT50cF9kb2MgPSBkZXNjLT5kb2M7CiAKICAgICBtZW1iZXJzID0gUHlNZW1fTkVXKFB5TWVtYmVyRGVmLCBuX21lbWJlcnMtbl91bm5hbWVkX21lbWJlcnMrMSk7Ci0gICAgaWYgKG1lbWJlcnMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtZW1iZXJzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGZvciAoaSA9IGsgPSAwOyBpIDwgbl9tZW1iZXJzOyArK2kpIHsKICAgICAgICAgaWYgKGRlc2MtPmZpZWxkc1tpXS5uYW1lID09IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkKQpAQCAtMzYxLDMwICszNjksNTYgQEAKICAgICB0eXBlLT50cF9tZW1iZXJzID0gbWVtYmVyczsKIAogICAgIGlmIChQeVR5cGVfUmVhZHkodHlwZSkgPCAwKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAtMTsKICAgICBQeV9JTkNSRUYodHlwZSk7CiAKICAgICBkaWN0ID0gdHlwZS0+dHBfZGljdDsKICNkZWZpbmUgU0VUX0RJQ1RfRlJPTV9JTlQoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgdmFsdWUpOyAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHYgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBrZXksIHYpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICB2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwga2V5LCB2KSA8IDApIHsgICAgICAgICAgIFwKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAogICAgIFNFVF9ESUNUX0ZST01fSU5UKHZpc2libGVfbGVuZ3RoX2tleSwgZGVzYy0+bl9pbl9zZXF1ZW5jZSk7CiAgICAgU0VUX0RJQ1RfRlJPTV9JTlQocmVhbF9sZW5ndGhfa2V5LCBuX21lbWJlcnMpOwogICAgIFNFVF9ESUNUX0ZST01fSU5UKHVubmFtZWRfZmllbGRzX2tleSwgbl91bm5hbWVkX21lbWJlcnMpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK1B5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCit7CisgICAgKHZvaWQpUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIodHlwZSwgZGVzYyk7CiB9CiAKIFB5VHlwZU9iamVjdCoKIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZShQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCiB7Ci0gICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQgPSAoUHlUeXBlT2JqZWN0KilQeVR5cGVfR2VuZXJpY0FsbG9jKCZQeVR5cGVfVHlwZSwgMCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUocmVzdWx0LCBkZXNjKTsKKyAgICBQeVR5cGVPYmplY3QgKnJlc3VsdDsKKworICAgIHJlc3VsdCA9IChQeVR5cGVPYmplY3QqKVB5VHlwZV9HZW5lcmljQWxsb2MoJlB5VHlwZV9UeXBlLCAwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihyZXN1bHQsIGRlc2MpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK2ludCBfUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0KHZvaWQpCit7CisgICAgaWYgKF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fc2VxdWVuY2VfZmllbGRzKSA9PSBOVUxMCisgICAgICAgIHx8IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fZmllbGRzKSA9PSBOVUxMCisgICAgICAgIHx8IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fdW5uYW1lZF9maWVsZHMpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy90dXBsZW9iamVjdC5jIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCmluZGV4IGY4MTU1OTUuLjZmZDRkYjMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHVwbGVvYmplY3QuYworKysgYi9PYmplY3RzL3R1cGxlb2JqZWN0LmMKQEAgLTYzLDkgKzYzLDkgQEAKIH0KIAogUHlPYmplY3QgKgotUHlUdXBsZV9OZXcocmVnaXN0ZXIgUHlfc3NpemVfdCBzaXplKQorUHlUdXBsZV9OZXcoUHlfc3NpemVfdCBzaXplKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKm9wOworICAgIFB5VHVwbGVPYmplY3QgKm9wOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIH0KIAogUHlfc3NpemVfdAotUHlUdXBsZV9TaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5VHVwbGVfU2l6ZShQeU9iamVjdCAqb3ApCiB7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeVR1cGxlX0dldEl0ZW0ocmVnaXN0ZXIgUHlPYmplY3QgKm9wLCByZWdpc3RlciBQeV9zc2l6ZV90IGkpCitQeVR1cGxlX0dldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTE0NywxMCArMTQ3LDEwIEBACiB9CiAKIGludAotUHlUdXBsZV9TZXRJdGVtKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqbmV3aXRlbSkKK1B5VHVwbGVfU2V0SXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKm5ld2l0ZW0pCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9sZGl0ZW07Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipwOworICAgIFB5T2JqZWN0ICpvbGRpdGVtOworICAgIFB5T2JqZWN0ICoqcDsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob3ApIHx8IG9wLT5vYl9yZWZjbnQgIT0gMSkgewogICAgICAgICBQeV9YREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTIyNCwxMCArMjI0LDEwIEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi10dXBsZWRlYWxsb2MocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqb3ApCit0dXBsZWRlYWxsb2MoUHlUdXBsZU9iamVjdCAqb3ApCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgbGVuID0gIFB5X1NJWkUob3ApOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9ICBQeV9TSVpFKG9wKTsKICAgICBQeU9iamVjdF9HQ19VblRyYWNrKG9wKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0JFR0lOKG9wKQogICAgIGlmIChsZW4gPiAwKSB7CkBAIC0yNTUsMjAgKzI1NSwxMiBAQAogdHVwbGVyZXByKFB5VHVwbGVPYmplY3QgKnYpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBuOwotICAgIFB5T2JqZWN0ICpzID0gTlVMTDsKLSAgICBfUHlBY2N1IGFjYzsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnNlcCA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAKICAgICBuID0gUHlfU0laRSh2KTsKICAgICBpZiAobiA9PSAwKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIigpIik7CiAKLSAgICBpZiAoc2VwID09IE5VTEwpIHsKLSAgICAgICAgc2VwID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiwgIik7Ci0gICAgICAgIGlmIChzZXAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIC8qIFdoaWxlIG5vdCBtdXRhYmxlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0byBlbmQgdXAgd2l0aCBhIGN5Y2xlIGluIGEKICAgICAgICB0dXBsZSB0aHJvdWdoIGFuIG9iamVjdCB0aGF0IHN0b3JlcyBpdHNlbGYgd2l0aGluIGEgdHVwbGUgKGFuZCB0aHVzCiAgICAgICAgaW5maW5pdGVseSBhc2tzIGZvciB0aGUgcmVwciBvZiBpdHNlbGYpLiBUaGlzIHNob3VsZCBvbmx5IGJlCkBAIC0yNzgsNDAgKzI3MCw1OCBAQAogICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygiKC4uLikiKSA6IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgaWYgKFB5X1NJWkUodikgPiAxKSB7CisgICAgICAgIC8qICIoIiArICIxIiArICIsIDIiICogKGxlbiAtIDEpICsgIikiICovCisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gMSArIDEgKyAoMiArIDEpICogKFB5X1NJWkUodikgLSAxKSArIDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiAiKDEsKSIgKi8KKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSA0OworICAgIH0KIAotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiKCIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnKCcpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihzKTsKIAogICAgIC8qIERvIHJlcHIoKSBvbiBlYWNoIGVsZW1lbnQuICovCiAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBQeU9iamVjdCAqczsKKworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwgIiwgMikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgcmVwciBvZiBhIHR1cGxlIikpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzID0gUHlPYmplY3RfUmVwcih2LT5vYl9pdGVtW2ldKTsKICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAgICAgIGlmIChpID4gMCAmJiBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgc2VwKSkKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHMpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgUHlfQ0xFQVIocyk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHMpOwogICAgIH0KLSAgICBpZiAobiA+IDEpCi0gICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiKSIpOwotICAgIGVsc2UKLSAgICAgICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsKSIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOworCisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKG4gPiAxKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnKScpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsKSIsIDIpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwotICAgIHJldHVybiBfUHlBY2N1X0ZpbmlzaCgmYWNjKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIGVycm9yOgotICAgIF9QeUFjY3VfRGVzdHJveSgmYWNjKTsKLSAgICBQeV9YREVDUkVGKHMpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0zMjIsMTUgKzMzMiwxOCBAQAogCiAgICAgIDEwODI1MjcsIDExNjUwNDksIDEwODI1MzEsIDExNjUwNTcsIDEyNDc1ODEsIDEzMzAxMDMsIDEwODI1MzMsCiAgICAgIDEzMzAxMTEsIDE0MTI2MzMsIDExNjUwNjksIDEyNDc1OTksIDE0OTUxNzcsIDE1Nzc2OTkKKworICAgVGVzdHMgaGF2ZSBzaG93biB0aGF0IGl0J3Mgbm90IHdvcnRoIHRvIGNhY2hlIHRoZSBoYXNoIHZhbHVlLCBzZWUKKyAgIGlzc3VlICM5Njg1LgogKi8KIAogc3RhdGljIFB5X2hhc2hfdAogdHVwbGVoYXNoKFB5VHVwbGVPYmplY3QgKnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfdWhhc2hfdCB4OyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IHk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBsZW4gPSBQeV9TSVpFKHYpOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqcDsKKyAgICBQeV91aGFzaF90IHg7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBQeV9oYXNoX3QgeTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X1NJWkUodik7CisgICAgUHlPYmplY3QgKipwOwogICAgIFB5X3VoYXNoX3QgbXVsdCA9IF9QeUhBU0hfTVVMVElQTElFUjsKICAgICB4ID0gMHgzNDU2NzhVTDsKICAgICBwID0gdi0+b2JfaXRlbTsKQEAgLTM2Nyw3ICszODAsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVpdGVtKHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSkKK3R1cGxlaXRlbShQeVR1cGxlT2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInR1cGxlIGluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtMzc4LDEyICszOTEsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlc2xpY2UocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpbG93LAotICAgICAgICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGloaWdoKQordHVwbGVzbGljZShQeVR1cGxlT2JqZWN0ICphLCBQeV9zc2l6ZV90IGlsb3csCisgICAgICAgICAgIFB5X3NzaXplX3QgaWhpZ2gpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqbnA7CisgICAgUHlUdXBsZU9iamVjdCAqbnA7CiAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGlmIChpbG93IDwgMCkKICAgICAgICAgaWxvdyA9IDA7CkBAIC00MjAsMTAgKzQzMywxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVjb25jYXQocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlPYmplY3QgKmJiKQordHVwbGVjb25jYXQoUHlUdXBsZU9iamVjdCAqYSwgUHlPYmplY3QgKmJiKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OwogICAgIFB5VHVwbGVPYmplY3QgKm5wOwogICAgIGlmICghUHlUdXBsZV9DaGVjayhiYikpIHsKQEAgLTgzMyw4ICs4NDYsOCBAQAogaW50CiBfUHlUdXBsZV9SZXNpemUoUHlPYmplY3QgKipwdiwgUHlfc3NpemVfdCBuZXdzaXplKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqc3Y7CisgICAgUHlUdXBsZU9iamVjdCAqdjsKKyAgICBQeVR1cGxlT2JqZWN0ICpzdjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBvbGRzaXplOwogCkBAIC05MjUsNyArOTM4LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICBsb25nIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlUdXBsZU9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSB0dXBsZWl0ZXJvYmplY3Q7CiAKQEAgLTk4Myw3ICs5OTYsNyBAQAogdHVwbGVpdGVyX3JlZHVjZSh0dXBsZWl0ZXJvYmplY3QgKml0KQogewogICAgIGlmIChpdC0+aXRfc2VxKQotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKWwiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKW4iLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+aXRfc2VxLCBpdC0+aXRfaW5kZXgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oKCkpIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSk7CkBAIC05OTIsNyArMTAwNSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogdHVwbGVpdGVyX3NldHN0YXRlKHR1cGxlaXRlcm9iamVjdCAqaXQsIFB5T2JqZWN0ICpzdGF0ZSkKIHsKLSAgICBsb25nIGluZGV4ID0gUHlMb25nX0FzTG9uZyhzdGF0ZSk7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TG9uZ19Bc1NzaXplX3Qoc3RhdGUpOwogICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoaXQtPml0X3NlcSAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9PYmplY3RzL3R5cGVvYmplY3QuYyBiL09iamVjdHMvdHlwZW9iamVjdC5jCmluZGV4IDg4NTFmYWUuLmJhMTA2YTEzOSAxMDA2NDQKLS0tIGEvT2JqZWN0cy90eXBlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKQEAgLTM1LDE5ICszNSwxMjcgQEAKIHN0YXRpYyBzdHJ1Y3QgbWV0aG9kX2NhY2hlX2VudHJ5IG1ldGhvZF9jYWNoZVsxIDw8IE1DQUNIRV9TSVpFX0VYUF07CiBzdGF0aWMgdW5zaWduZWQgaW50IG5leHRfdmVyc2lvbl90YWcgPSAwOwogCisvKiBhbHBoYWJldGljYWwgb3JkZXIgKi8KK19QeV9JREVOVElGSUVSKF9fYWJzdHJhY3RtZXRob2RzX18pOwogX1B5X0lERU5USUZJRVIoX19jbGFzc19fKTsKK19QeV9JREVOVElGSUVSKF9fZGVsaXRlbV9fKTsKIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKIF9QeV9JREVOVElGSUVSKF9fZG9jX18pOwotX1B5X0lERU5USUZJRVIoX19nZXRpdGVtX18pOwogX1B5X0lERU5USUZJRVIoX19nZXRhdHRyaWJ1dGVfXyk7CitfUHlfSURFTlRJRklFUihfX2dldGl0ZW1fXyk7CiBfUHlfSURFTlRJRklFUihfX2hhc2hfXyk7CitfUHlfSURFTlRJRklFUihfX2xlbl9fKTsKIF9QeV9JREVOVElGSUVSKF9fbW9kdWxlX18pOwogX1B5X0lERU5USUZJRVIoX19uYW1lX18pOwogX1B5X0lERU5USUZJRVIoX19uZXdfXyk7CitfUHlfSURFTlRJRklFUihfX3NldGl0ZW1fXyk7CitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzbG90X3RwX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CiAKKy8qCisgKiBmaW5kcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2NzdHJpbmcncyBpbnRyb3NwZWN0aW9uIHNpZ25hdHVyZS4KKyAqIGlmIHByZXNlbnQsIHJldHVybnMgYSBwb2ludGVyIHBvaW50aW5nIHRvIHRoZSBmaXJzdCAnKCcuCisgKiBvdGhlcndpc2UgcmV0dXJucyBOVUxMLgorICoKKyAqIGRvZXNuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZCwgb25seSB0aGF0IGl0CisgKiBoYXMgYSB2YWxpZCBwcmVmaXguICAodGhlIHNpZ25hdHVyZSBtdXN0IGFsc28gcGFzcyBza2lwX3NpZ25hdHVyZS4pCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2ZpbmRfc2lnbmF0dXJlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRvYykKK3sKKyAgICBjb25zdCBjaGFyICpkb3Q7CisgICAgc2l6ZV90IGxlbmd0aDsKKworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGFzc2VydChuYW1lICE9IE5VTEwpOworCisgICAgLyogZm9yIGRvdHRlZCBuYW1lcyBsaWtlIGNsYXNzZXMsIG9ubHkgdXNlIHRoZSBsYXN0IGNvbXBvbmVudCAqLworICAgIGRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKyAgICBpZiAoZG90KQorICAgICAgICBuYW1lID0gZG90ICsgMTsKKworICAgIGxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICBpZiAoc3RybmNtcChkb2MsIG5hbWUsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGRvYyArPSBsZW5ndGg7CisgICAgaWYgKCpkb2MgIT0gJygnKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gZG9jOworfQorCisjZGVmaW5lIFNJR05BVFVSRV9FTkRfTUFSS0VSICAgICAgICAgIilcbi0tXG5cbiIKKyNkZWZpbmUgU0lHTkFUVVJFX0VORF9NQVJLRVJfTEVOR1RIICA2CisvKgorICogc2tpcHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBkb2NzdHJpbmcncyBpbnN0cm9zcGVjdGlvbiBzaWduYXR1cmUuCisgKiAoYXNzdW1lcyBkb2Mgc3RhcnRzIHdpdGggYSB2YWxpZCBzaWduYXR1cmUgcHJlZml4LikKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorc2tpcF9zaWduYXR1cmUoY29uc3QgY2hhciAqZG9jKQoreworICAgIHdoaWxlICgqZG9jKSB7CisgICAgICAgIGlmICgoKmRvYyA9PSAqU0lHTkFUVVJFX0VORF9NQVJLRVIpICYmCisgICAgICAgICAgICAhc3RybmNtcChkb2MsIFNJR05BVFVSRV9FTkRfTUFSS0VSLCBTSUdOQVRVUkVfRU5EX01BUktFUl9MRU5HVEgpKQorICAgICAgICAgICAgcmV0dXJuIGRvYyArIFNJR05BVFVSRV9FTkRfTUFSS0VSX0xFTkdUSDsKKyAgICAgICAgaWYgKCgqZG9jID09ICdcbicpICYmIChkb2NbMV0gPT0gJ1xuJykpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZG9jKys7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitfUHlUeXBlX0RvY1dpdGhvdXRTaWduYXR1cmUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaW50ZXJuYWxfZG9jKQoreworICAgIGNvbnN0IGNoYXIgKmRvYyA9IGZpbmRfc2lnbmF0dXJlKG5hbWUsIGludGVybmFsX2RvYyk7CisKKyAgICBpZiAoZG9jKSB7CisgICAgICAgIGRvYyA9IHNraXBfc2lnbmF0dXJlKGRvYyk7CisgICAgICAgIGlmIChkb2MpCisgICAgICAgICAgICByZXR1cm4gZG9jOworICAgICAgICB9CisgICAgcmV0dXJuIGludGVybmFsX2RvYzsKK30KKworUHlPYmplY3QgKgorX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2MoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaW50ZXJuYWxfZG9jKQoreworICAgIGNvbnN0IGNoYXIgKmRvYyA9IF9QeVR5cGVfRG9jV2l0aG91dFNpZ25hdHVyZShuYW1lLCBpbnRlcm5hbF9kb2MpOworCisgICAgaWYgKCFkb2MpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoZG9jKTsKK30KKworUHlPYmplY3QgKgorX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmludGVybmFsX2RvYykKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydCA9IGZpbmRfc2lnbmF0dXJlKG5hbWUsIGludGVybmFsX2RvYyk7CisgICAgY29uc3QgY2hhciAqZW5kOworCisgICAgaWYgKHN0YXJ0KQorICAgICAgICBlbmQgPSBza2lwX3NpZ25hdHVyZShzdGFydCk7CisgICAgZWxzZQorICAgICAgICBlbmQgPSBOVUxMOworICAgIGlmICghZW5kKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorCisgICAgLyogYmFjayAiZW5kIiB1cCB1bnRpbCBpdCBwb2ludHMganVzdCBwYXN0IHRoZSBmaW5hbCAnKScgKi8KKyAgICBlbmQgLT0gU0lHTkFUVVJFX0VORF9NQVJLRVJfTEVOR1RIIC0gMTsKKyAgICBhc3NlcnQoKGVuZCAtIHN0YXJ0KSA+PSAyKTsgLyogc2hvdWxkIGJlICIoKSIgYXQgbGVhc3QgKi8KKyAgICBhc3NlcnQoZW5kWy0xXSA9PSAnKScpOworICAgIGFzc2VydChlbmRbMF0gPT0gJ1xuJyk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShzdGFydCwgZW5kIC0gc3RhcnQpOworfQorCiB1bnNpZ25lZCBpbnQKIFB5VHlwZV9DbGVhckNhY2hlKHZvaWQpCiB7CkBAIC05NCwxNiArMjAyLDE3IEBACiAgICAgICAgbmVlZGVkLgogICAgICAqLwogICAgIFB5T2JqZWN0ICpyYXcsICpyZWY7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGlmICghUHlUeXBlX0hhc0ZlYXR1cmUodHlwZSwgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRykpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJhdyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHJhdyAhPSBOVUxMKSB7Ci0gICAgICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUocmF3KTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHJhdywgaSk7CisgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChyYXcpKTsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChyYXcsICZpLCBOVUxMLCAmcmVmKSkgeworICAgICAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKICAgICAgICAgICAgIHJlZiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgICAgICBpZiAocmVmICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICBQeVR5cGVfTW9kaWZpZWQoKFB5VHlwZU9iamVjdCAqKXJlZik7CkBAIC0zMzYsMTEgKzQ0NSwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHR5cGVfbW9kdWxlKFB5VHlwZU9iamVjdCAqdHlwZSwgdm9pZCAqY29udGV4dCkKIHsKLSAgICBQeU9iamVjdCAqbW9kOwogICAgIGNoYXIgKnM7CiAKICAgICBpZiAodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKSB7Ci0gICAgICAgIG1vZCA9IF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18pOworICAgICAgICBQeU9iamVjdCAqbW9kID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXyk7CiAgICAgICAgIGlmICghbW9kKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX21vZHVsZV9fIik7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTM0OSwxMSArNDU3LDE0IEBACiAgICAgICAgIHJldHVybiBtb2Q7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqbmFtZTsKICAgICAgICAgcyA9IHN0cnJjaHIodHlwZS0+dHBfbmFtZSwgJy4nKTsKICAgICAgICAgaWYgKHMgIT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoCiAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgKFB5X3NzaXplX3QpKHMgLSB0eXBlLT50cF9uYW1lKSk7Ci0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiYnVpbHRpbnMiKTsKKyAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2J1aWx0aW5zKTsKKyAgICAgICAgUHlfWElOQ1JFRihuYW1lKTsKKyAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogfQogCkBAIC0zNzUsOSArNDg2LDExIEBACiAgICAgLyogdHlwZSBpdHNlbGYgaGFzIGFuIF9fYWJzdHJhY3RtZXRob2RzX18gZGVzY3JpcHRvciAodGhpcykuIERvbid0IHJldHVybgogICAgICAgIHRoYXQuICovCiAgICAgaWYgKHR5cGUgIT0gJlB5VHlwZV9UeXBlKQotICAgICAgICBtb2QgPSBQeURpY3RfR2V0SXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICBtb2QgPSBfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKICAgICBpZiAoIW1vZCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgIFB5T2JqZWN0ICptZXNzYWdlID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXyk7CisgICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCBtZXNzYWdlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X1hJTkNSRUYobW9kKTsKQEAgLTM5NiwxMyArNTA5LDE1IEBACiAgICAgICAgIGFic3RyYWN0ID0gUHlPYmplY3RfSXNUcnVlKHZhbHVlKTsKICAgICAgICAgaWYgKGFic3RyYWN0IDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iLCB2YWx1ZSk7CisgICAgICAgIHJlcyA9IF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18sIHZhbHVlKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGFic3RyYWN0ID0gMDsKLSAgICAgICAgcmVzID0gUHlEaWN0X0RlbEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgcmVzID0gX1B5RGljdF9EZWxJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXyk7CiAgICAgICAgIGlmIChyZXMgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptZXNzYWdlID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXyk7CisgICAgICAgICAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQpAQCAtNDI4LDYgKzU0Myw3IEBACiBzdGF0aWMgaW50IGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQoUHlUeXBlT2JqZWN0ICosIFB5VHlwZU9iamVjdCAqLCBjaGFyICopOwogc3RhdGljIGludCBhZGRfc3ViY2xhc3MoUHlUeXBlT2JqZWN0KiwgUHlUeXBlT2JqZWN0Kik7CiBzdGF0aWMgdm9pZCByZW1vdmVfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICosIFB5VHlwZU9iamVjdCAqKTsKK3N0YXRpYyB2b2lkIHJlbW92ZV9hbGxfc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpiYXNlcyk7CiBzdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3Nsb3RzKFB5VHlwZU9iamVjdCAqKTsKIAogdHlwZWRlZiBpbnQgKCp1cGRhdGVfY2FsbGJhY2spKFB5VHlwZU9iamVjdCAqLCB2b2lkICopOwpAQCAtNDQxLDE1ICs1NTcsMTUgQEAKIHsKICAgICBQeVR5cGVPYmplY3QgKnN1YmNsYXNzOwogICAgIFB5T2JqZWN0ICpyZWYsICpzdWJjbGFzc2VzLCAqb2xkX21ybzsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgc3ViY2xhc3NlcyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHN1YmNsYXNzZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhzdWJjbGFzc2VzKSk7Ci0gICAgbiA9IFB5TGlzdF9HRVRfU0laRShzdWJjbGFzc2VzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShzdWJjbGFzc2VzLCBpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3Qoc3ViY2xhc3NlcykpOworICAgIGkgPSAwOworCisgICAgd2hpbGUgKFB5RGljdF9OZXh0KHN1YmNsYXNzZXMsICZpLCBOVUxMLCAmcmVmKSkgewogICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICBzdWJjbGFzcyA9IChQeVR5cGVPYmplY3QgKilQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpOwogICAgICAgICBhc3NlcnQoc3ViY2xhc3MgIT0gTlVMTCk7CkBAIC01NjgsMTMgKzY4NCw3IEBACiAgICAgLyogZm9yIG5vdywgc29kIHRoYXQ6IGp1c3QgcmVtb3ZlIGZyb20gYWxsIG9sZF9iYXNlcywKICAgICAgICBhZGQgdG8gYWxsIG5ld19iYXNlcyAqLwogCi0gICAgZm9yIChpID0gUHlUdXBsZV9HRVRfU0laRShvbGRfYmFzZXMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgb2IgPSBQeVR1cGxlX0dFVF9JVEVNKG9sZF9iYXNlcywgaSk7Ci0gICAgICAgIGlmIChQeVR5cGVfQ2hlY2sob2IpKSB7Ci0gICAgICAgICAgICByZW1vdmVfc3ViY2xhc3MoCi0gICAgICAgICAgICAgICAgKFB5VHlwZU9iamVjdCopb2IsIHR5cGUpOwotICAgICAgICB9Ci0gICAgfQorICAgIHJlbW92ZV9hbGxfc3ViY2xhc3Nlcyh0eXBlLCBvbGRfYmFzZXMpOwogCiAgICAgZm9yIChpID0gUHlUdXBsZV9HRVRfU0laRSh2YWx1ZSkgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICBvYiA9IFB5VHVwbGVfR0VUX0lURU0odmFsdWUsIGkpOwpAQCAtNjIwLDggKzczMCw5IEBACiB0eXBlX2dldF9kb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCB2b2lkICpjb250ZXh0KQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgaWYgKCEodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKSAmJiB0eXBlLT50cF9kb2MgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHR5cGUtPnRwX2RvYyk7CisgICAgaWYgKCEodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKSAmJiB0eXBlLT50cF9kb2MgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2ModHlwZS0+dHBfbmFtZSwgdHlwZS0+dHBfZG9jKTsKKyAgICB9CiAgICAgcmVzdWx0ID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXyk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgICAgIHJlc3VsdCA9IFB5X05vbmU7CkBAIC02MzcsNiArNzQ4LDEyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3R5cGVfZ2V0X3RleHRfc2lnbmF0dXJlKFB5VHlwZU9iamVjdCAqdHlwZSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKHR5cGUtPnRwX25hbWUsIHR5cGUtPnRwX2RvYyk7Cit9CisKIHN0YXRpYyBpbnQKIHR5cGVfc2V0X2RvYyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgdm9pZCAqY29udGV4dCkKIHsKQEAgLTY4Myw2ICs4MDAsNyBAQAogICAgICAoc2V0dGVyKXR5cGVfc2V0X2Fic3RyYWN0bWV0aG9kcywgTlVMTH0sCiAgICAgeyJfX2RpY3RfXyIsICAoZ2V0dGVyKXR5cGVfZGljdCwgIE5VTEwsIE5VTEx9LAogICAgIHsiX19kb2NfXyIsIChnZXR0ZXIpdHlwZV9nZXRfZG9jLCAoc2V0dGVyKXR5cGVfc2V0X2RvYywgTlVMTH0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKXR5cGVfZ2V0X3RleHRfc2lnbmF0dXJlLCBOVUxMLCBOVUxMfSwKICAgICB7MH0KIH07CiAKQEAgLTcwNCw3ICs4MjIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAobW9kICE9IE5VTEwgJiYgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobW9kLCAiYnVpbHRpbnMiKSkKKyAgICBpZiAobW9kICE9IE5VTEwgJiYgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG1vZCwgJlB5SWRfYnVpbHRpbnMpKQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGNsYXNzICclVS4lVSc+IiwgbW9kLCBuYW1lKTsKICAgICBlbHNlCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8Y2xhc3MgJyVzJz4iLCB0eXBlLT50cF9uYW1lKTsKQEAgLTcyNiw2ICs4NDQsMTMgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiB0eXBlX2NhbGwoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgb2JqID0gdHlwZS0+dHBfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmIChvYmogIT0gTlVMTCkgewogICAgICAgICAvKiBVZ2x5IGV4Y2VwdGlvbjogd2hlbiB0aGUgY2FsbCB3YXMgdHlwZShzb21ldGhpbmcpLApAQCAtNzQwLDEwICs4NjUsMTIgQEAKICAgICAgICAgaWYgKCFQeVR5cGVfSXNTdWJ0eXBlKFB5X1RZUEUob2JqKSwgdHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gb2JqOwogICAgICAgICB0eXBlID0gUHlfVFlQRShvYmopOwotICAgICAgICBpZiAodHlwZS0+dHBfaW5pdCAhPSBOVUxMICYmCi0gICAgICAgICAgICB0eXBlLT50cF9pbml0KG9iaiwgYXJncywga3dkcykgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKLSAgICAgICAgICAgIG9iaiA9IE5VTEw7CisgICAgICAgIGlmICh0eXBlLT50cF9pbml0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGludCByZXMgPSB0eXBlLT50cF9pbml0KG9iaiwgYXJncywga3dkcyk7CisgICAgICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICAgICAgICAgIG9iaiA9IE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG9iajsKQEAgLTc3MCw3ICs4OTcsNyBAQAogICAgICAgICBQeV9JTkNSRUYodHlwZSk7CiAKICAgICBpZiAodHlwZS0+dHBfaXRlbXNpemUgPT0gMCkKLSAgICAgICAgUHlPYmplY3RfSU5JVChvYmosIHR5cGUpOworICAgICAgICAodm9pZClQeU9iamVjdF9JTklUKG9iaiwgdHlwZSk7CiAgICAgZWxzZQogICAgICAgICAodm9pZCkgUHlPYmplY3RfSU5JVF9WQVIoKFB5VmFyT2JqZWN0ICopb2JqLCB0eXBlLCBuaXRlbXMpOwogCkBAIC05MDIsNiArMTAyOSw3IEBACiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlLCAqYmFzZTsKICAgICBkZXN0cnVjdG9yIGJhc2VkZWFsbG9jOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgaW50IGhhc19maW5hbGl6ZXI7CiAKICAgICAvKiBFeHRyYWN0IHRoZSB0eXBlOyB3ZSBleHBlY3QgaXQgdG8gYmUgYSBoZWFwIHR5cGUgKi8KICAgICB0eXBlID0gUHlfVFlQRShzZWxmKTsKQEAgLTkxNyw2ICsxMDQ1LDEwIEBACiAgICAgICAgICAgIGNsZWFyX3Nsb3RzKCksIG9yIERFQ1JFRiB0aGUgZGljdCwgb3IgY2xlYXIgd2Vha3JlZnMuICovCiAKICAgICAgICAgLyogTWF5YmUgY2FsbCBmaW5hbGl6ZXI7IGV4aXQgZWFybHkgaWYgcmVzdXJyZWN0ZWQgKi8KKyAgICAgICAgaWYgKHR5cGUtPnRwX2ZpbmFsaXplKSB7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUtPnRwX2RlbCkgewogICAgICAgICAgICAgdHlwZS0+dHBfZGVsKHNlbGYpOwogICAgICAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApCkBAIC05NjgsMjUgKzExMDAsMzYgQEAKICAgICAgICAgYXNzZXJ0KGJhc2UpOwogICAgIH0KIAotICAgIC8qIElmIHdlIGFkZGVkIGEgd2Vha2xpc3QsIHdlIGNsZWFyIGl0LiAgICAgIERvIHRoaXMgKmJlZm9yZSogY2FsbGluZwotICAgICAgIHRoZSBmaW5hbGl6ZXIgKF9fZGVsX18pLCBjbGVhcmluZyBzbG90cywgb3IgY2xlYXJpbmcgdGhlIGluc3RhbmNlCi0gICAgICAgZGljdC4gKi8KKyAgICBoYXNfZmluYWxpemVyID0gdHlwZS0+dHBfZmluYWxpemUgfHwgdHlwZS0+dHBfZGVsOwogCisgICAgLyogTWF5YmUgY2FsbCBmaW5hbGl6ZXI7IGV4aXQgZWFybHkgaWYgcmVzdXJyZWN0ZWQgKi8KKyAgICBpZiAoaGFzX2ZpbmFsaXplcikKKyAgICAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKHNlbGYpOworCisgICAgaWYgKHR5cGUtPnRwX2ZpbmFsaXplKSB7CisgICAgICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZikgPCAwKSB7CisgICAgICAgICAgICAvKiBSZXN1cnJlY3RlZCAqLworICAgICAgICAgICAgZ290byBlbmRsYWJlbDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBJZiB3ZSBhZGRlZCBhIHdlYWtsaXN0LCB3ZSBjbGVhciBpdC4gICAgICBEbyB0aGlzICpiZWZvcmUqIGNhbGxpbmcKKyAgICAgICB0cF9kZWwsIGNsZWFyaW5nIHNsb3RzLCBvciBjbGVhcmluZyB0aGUgaW5zdGFuY2UgZGljdC4gKi8KICAgICBpZiAodHlwZS0+dHBfd2Vha2xpc3RvZmZzZXQgJiYgIWJhc2UtPnRwX3dlYWtsaXN0b2Zmc2V0KQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKHNlbGYpOwogCi0gICAgLyogTWF5YmUgY2FsbCBmaW5hbGl6ZXI7IGV4aXQgZWFybHkgaWYgcmVzdXJyZWN0ZWQgKi8KICAgICBpZiAodHlwZS0+dHBfZGVsKSB7Ci0gICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKICAgICAgICAgdHlwZS0+dHBfZGVsKHNlbGYpOwotICAgICAgICBpZiAoc2VsZi0+b2JfcmVmY250ID4gMCkKLSAgICAgICAgICAgIGdvdG8gZW5kbGFiZWw7ICAgICAgICAgICAgICAvKiByZXN1cnJlY3RlZCAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKKyAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApIHsKKyAgICAgICAgICAgIC8qIFJlc3VycmVjdGVkICovCisgICAgICAgICAgICBnb3RvIGVuZGxhYmVsOworICAgICAgICB9CisgICAgfQorICAgIGlmIChoYXNfZmluYWxpemVyKSB7CisgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgICAgICAvKiBOZXcgd2Vha3JlZnMgY291bGQgYmUgY3JlYXRlZCBkdXJpbmcgdGhlIGZpbmFsaXplciBjYWxsLgotICAgICAgICAgICAgSWYgdGhpcyBvY2N1cnMsIGNsZWFyIHRoZW0gb3V0IHdpdGhvdXQgY2FsbGluZyB0aGVpcgotICAgICAgICAgICAgZmluYWxpemVycyBzaW5jZSB0aGV5IG1pZ2h0IHJlbHkgb24gcGFydCBvZiB0aGUgb2JqZWN0Ci0gICAgICAgICAgICBiZWluZyBmaW5hbGl6ZWQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4gKi8KKyAgICAgICAgICAgSWYgdGhpcyBvY2N1cnMsIGNsZWFyIHRoZW0gb3V0IHdpdGhvdXQgY2FsbGluZyB0aGVpcgorICAgICAgICAgICBmaW5hbGl6ZXJzIHNpbmNlIHRoZXkgbWlnaHQgcmVseSBvbiBwYXJ0IG9mIHRoZSBvYmplY3QKKyAgICAgICAgICAgYmVpbmcgZmluYWxpemVkIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuICovCiAgICAgICAgIGlmICh0eXBlLT50cF93ZWFrbGlzdG9mZnNldCAmJiAhYmFzZS0+dHBfd2Vha2xpc3RvZmZzZXQpIHsKICAgICAgICAgICAgIC8qIE1vZGVsZWQgYWZ0ZXIgR0VUX1dFQUtSRUZTX0xJU1RQVFIoKSAqLwogICAgICAgICAgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdCA9IChQeVdlYWtSZWZlcmVuY2UgKiopIFwKQEAgLTE0NDYsOCArMTU4OSwxMCBAQAogICAgICAgIHRoYXQgaXMgbm90IGluY2x1ZGVkIGluIGFjYy4KICAgICAqLwogICAgIHJlbWFpbiA9IChpbnQgKilQeU1lbV9NQUxMT0MoU0laRU9GX0lOVCp0b19tZXJnZV9zaXplKTsKLSAgICBpZiAocmVtYWluID09IE5VTEwpCisgICAgaWYgKHJlbWFpbiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IHRvX21lcmdlX3NpemU7IGkrKykKICAgICAgICAgcmVtYWluW2ldID0gMDsKIApAQCAtMTQ3OSw3ICsxNjI0LDcgQEAKICAgICAgICAgfQogICAgICAgICBvayA9IFB5TGlzdF9BcHBlbmQoYWNjLCBjYW5kaWRhdGUpOwogICAgICAgICBpZiAob2sgPCAwKSB7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHJlbWFpbik7CisgICAgICAgICAgICBQeU1lbV9GUkVFKHJlbWFpbik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRvX21lcmdlX3NpemU7IGorKykgewpAQCAtMTkzOSw3ICsyMDg0LDcgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1sb25nCit1bnNpZ25lZCBsb25nCiBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0ICp0eXBlKQogewogICAgIHJldHVybiB0eXBlLT50cF9mbGFnczsKQEAgLTIxMDgsNyArMjI1Myw3IEBACiAgICAgICAgICAgICBpZiAoIXZhbGlkX2lkZW50aWZpZXIodG1wKSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayh0bXApKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyh0bXAsICJfX2RpY3RfXyIpID09IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQodG1wLCAmUHlJZF9fX2RpY3RfXykgPT0gMCkgewogICAgICAgICAgICAgICAgIGlmICghbWF5X2FkZF9kaWN0IHx8IGFkZF9kaWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX19kaWN0X18gc2xvdCBkaXNhbGxvd2VkOiAiCkBAIC0yMTM5LDcgKzIyODQsNyBAQAogICAgICAgICBmb3IgKGkgPSBqID0gMDsgaSA8IG5zbG90czsgaSsrKSB7CiAgICAgICAgICAgICB0bXAgPSBQeVR1cGxlX0dFVF9JVEVNKHNsb3RzLCBpKTsKICAgICAgICAgICAgIGlmICgoYWRkX2RpY3QgJiYKLSAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX19kaWN0X18iKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQodG1wLCAmUHlJZF9fX2RpY3RfXykgPT0gMCkgfHwKICAgICAgICAgICAgICAgICAoYWRkX3dlYWsgJiYKICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX193ZWFrcmVmX18iKSA9PSAwKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIyMTAsNyArMjM1NSw3IEBACiAKICAgICAvKiBJbml0aWFsaXplIHRwX2ZsYWdzICovCiAgICAgdHlwZS0+dHBfZmxhZ3MgPSBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hFQVBUWVBFIHwKLSAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRTsKKyAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRTsKICAgICBpZiAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpCiAgICAgICAgIHR5cGUtPnRwX2ZsYWdzIHw9IFB5X1RQRkxBR1NfSEFWRV9HQzsKIApAQCAtMjI4MCw4ICsyNDI1LDEwIEBACiAgICAgICAgICAgICAvKiBTaWxlbnRseSB0cnVuY2F0ZSB0aGUgZG9jc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG51bGwgYnl0ZXMuICovCiAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oZG9jX3N0cik7CiAgICAgICAgICAgICB0cF9kb2MgPSAoY2hhciAqKVB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKLSAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbWNweSh0cF9kb2MsIGRvY19zdHIsIGxlbiArIDEpOwogICAgICAgICAgICAgdHlwZS0+dHBfZG9jID0gdHBfZG9jOwogICAgICAgICB9CkBAIC0yMzI1LDkgKzI0NzIsNiBAQAogICAgICAgICAgICAgdHlwZS0+dHBfZGljdG9mZnNldCA9IHNsb3RvZmZzZXQ7CiAgICAgICAgIHNsb3RvZmZzZXQgKz0gc2l6ZW9mKFB5T2JqZWN0ICopOwogICAgIH0KLSAgICBpZiAodHlwZS0+dHBfZGljdG9mZnNldCkgewotICAgICAgICBldC0+aHRfY2FjaGVkX2tleXMgPSBfUHlEaWN0X05ld0tleXNGb3JDbGFzcygpOwotICAgIH0KICAgICBpZiAoYWRkX3dlYWspIHsKICAgICAgICAgYXNzZXJ0KCFiYXNlLT50cF9pdGVtc2l6ZSk7CiAgICAgICAgIHR5cGUtPnRwX3dlYWtsaXN0b2Zmc2V0ID0gc2xvdG9mZnNldDsKQEAgLTIzNzcsNiArMjUyMSwxMCBAQAogICAgIC8qIFB1dCB0aGUgcHJvcGVyIHNsb3RzIGluIHBsYWNlICovCiAgICAgZml4dXBfc2xvdF9kaXNwYXRjaGVycyh0eXBlKTsKIAorICAgIGlmICh0eXBlLT50cF9kaWN0b2Zmc2V0KSB7CisgICAgICAgIGV0LT5odF9jYWNoZWRfa2V5cyA9IF9QeURpY3RfTmV3S2V5c0ZvckNsYXNzKCk7CisgICAgfQorCiAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgIHJldHVybiAoUHlPYmplY3QgKil0eXBlOwogCkBAIC0yNDAxLDcgKzI1NDksNyBAQAogICAgIGNoYXIgKnM7CiAgICAgY2hhciAqcmVzX3N0YXJ0ID0gKGNoYXIqKXJlczsKICAgICBQeVR5cGVfU2xvdCAqc2xvdDsKLSAgICAKKwogICAgIC8qIFNldCB0aGUgdHlwZSBuYW1lIGFuZCBxdWFsbmFtZSAqLwogICAgIHMgPSBzdHJyY2hyKHNwZWMtPm5hbWUsICcuJyk7CiAgICAgaWYgKHMgPT0gTlVMTCkKQEAgLTI0MjIsNyArMjU3MCw3IEBACiAgICAgdHlwZS0+dHBfbmFtZSA9IHNwZWMtPm5hbWU7CiAgICAgaWYgKCF0eXBlLT50cF9uYW1lKQogICAgICAgICBnb3RvIGZhaWw7Ci0gICAgCisKICAgICAvKiBBZGp1c3QgZm9yIGVtcHR5IHR1cGxlIGJhc2VzICovCiAgICAgaWYgKCFiYXNlcykgewogICAgICAgICBiYXNlID0gJlB5QmFzZU9iamVjdF9UeXBlOwpAQCAtMjQ4MiwxNyArMjYzMCwxNyBAQAogICAgICAgICAvKiBuZWVkIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBkb2NzdHJpbmcgc2xvdCwgd2hpY2ggdXN1YWxseQogICAgICAgICAgICBwb2ludHMgdG8gYSBzdGF0aWMgc3RyaW5nIGxpdGVyYWwgKi8KICAgICAgICAgaWYgKHNsb3QtPnNsb3QgPT0gUHlfdHBfZG9jKSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKHNsb3QtPnBmdW5jKSsxOworICAgICAgICAgICAgY29uc3QgY2hhciAqb2xkX2RvYyA9IF9QeVR5cGVfRG9jV2l0aG91dFNpZ25hdHVyZSh0eXBlLT50cF9uYW1lLCBzbG90LT5wZnVuYyk7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKG9sZF9kb2MpKzE7CiAgICAgICAgICAgICBjaGFyICp0cF9kb2MgPSBQeU9iamVjdF9NQUxMT0MobGVuKTsKLSAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgbWVtY3B5KHRwX2RvYywgc2xvdC0+cGZ1bmMsIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBvbGRfZG9jLCBsZW4pOwogICAgICAgICAgICAgdHlwZS0+dHBfZG9jID0gdHBfZG9jOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICh0eXBlLT50cF9kaWN0b2Zmc2V0KSB7Ci0gICAgICAgIHJlcy0+aHRfY2FjaGVkX2tleXMgPSBfUHlEaWN0X05ld0tleXNGb3JDbGFzcygpOwotICAgIH0KICAgICBpZiAodHlwZS0+dHBfZGVhbGxvYyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIEl0J3MgYSBoZWFwIHR5cGUsIHNvIG5lZWRzIHRoZSBoZWFwIHR5cGVzJyBkZWFsbG9jLgogICAgICAgICAgICBzdWJ0eXBlX2RlYWxsb2Mgd2lsbCBjYWxsIHRoZSBiYXNlIHR5cGUncyB0cF9kZWFsbG9jLCBpZgpAQCAtMjUwMywxMCArMjY1MSwxNCBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkodHlwZSkgPCAwKQogICAgICAgICBnb3RvIGZhaWw7CiAKKyAgICBpZiAodHlwZS0+dHBfZGljdG9mZnNldCkgeworICAgICAgICByZXMtPmh0X2NhY2hlZF9rZXlzID0gX1B5RGljdF9OZXdLZXlzRm9yQ2xhc3MoKTsKKyAgICB9CisKICAgICAvKiBTZXQgdHlwZS5fX21vZHVsZV9fICovCiAgICAgcyA9IHN0cnJjaHIoc3BlYy0+bmFtZSwgJy4nKTsKICAgICBpZiAocyAhPSBOVUxMKQotICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fLCAKKyAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXywKICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICBzcGVjLT5uYW1lLCAoUHlfc3NpemVfdCkocyAtIHNwZWMtPm5hbWUpKSk7CiAKQEAgLTI1MjMsNiArMjY3NSwxOSBAQAogICAgIHJldHVybiBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMoc3BlYywgTlVMTCk7CiB9CiAKK3ZvaWQgKgorUHlUeXBlX0dldFNsb3QoUHlUeXBlT2JqZWN0ICp0eXBlLCBpbnQgc2xvdCkKK3sKKyAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKHR5cGUsIFB5X1RQRkxBR1NfSEVBUFRZUEUpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHNsb3QgPj0gUHlfQVJSQVlfTEVOR1RIKHNsb3RvZmZzZXRzKSkgeworICAgICAgICAvKiBFeHRlbnNpb24gbW9kdWxlIHJlcXVlc3Rpbmcgc2xvdCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiAgKih2b2lkKiopKCgoY2hhciopdHlwZSkgKyBzbG90b2Zmc2V0c1tzbG90XSk7Cit9CiAKIC8qIEludGVybmFsIEFQSSB0byBsb29rIGZvciBhIG5hbWUgdGhyb3VnaCB0aGUgTVJPLgogICAgVGhpcyByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlLCBhbmQgZG9lc24ndCBzZXQgYW4gZXhjZXB0aW9uISAqLwpAQCAtMjY5NSwxMCArMjg2MCwxNCBAQAogdHlwZV9kZWFsbG9jKFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKICAgICBQeUhlYXBUeXBlT2JqZWN0ICpldDsKKyAgICBQeU9iamVjdCAqdHAsICp2YWwsICp0YjsKIAogICAgIC8qIEFzc2VydCB0aGlzIGlzIGEgaGVhcC1hbGxvY2F0ZWQgdHlwZSBvYmplY3QgKi8KICAgICBhc3NlcnQodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKTsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyh0eXBlKTsKKyAgICBQeUVycl9GZXRjaCgmdHAsICZ2YWwsICZ0Yik7CisgICAgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKHR5cGUsIHR5cGUtPnRwX2Jhc2VzKTsKKyAgICBQeUVycl9SZXN0b3JlKHRwLCB2YWwsIHRiKTsKICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKXR5cGUpOwogICAgIGV0ID0gKFB5SGVhcFR5cGVPYmplY3QgKil0eXBlOwogICAgIFB5X1hERUNSRUYodHlwZS0+dHBfYmFzZSk7CkBAIC0yNzIzLDcgKzI4OTIsNyBAQAogdHlwZV9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3NfaWdub3JlZCkKIHsKICAgICBQeU9iamVjdCAqbGlzdCwgKnJhdywgKnJlZjsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKGxpc3QgPT0gTlVMTCkKQEAgLTI3MzEsMTAgKzI5MDAsOSBAQAogICAgIHJhdyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHJhdyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gbGlzdDsKLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKHJhdykpOwotICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUocmF3KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShyYXcsIGkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChyYXcpKTsKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoUHlEaWN0X05leHQocmF3LCAmaSwgTlVMTCwgJnJlZikpIHsKICAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKICAgICAgICAgcmVmID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKICAgICAgICAgaWYgKHJlZiAhPSBQeV9Ob25lKSB7CkBAIC0yODY3LDYgKzMwMzUsOCBAQAogfTsKIAogUHlEb2NfU1RSVkFSKHR5cGVfZG9jLAorLyogdGhpcyB0ZXh0IHNpZ25hdHVyZSBjYW5ub3QgYmUgYWNjdXJhdGUgeWV0LiAgd2lsbCBmaXguICAtLWxhcnJ5ICovCisidHlwZShvYmplY3Rfb3JfbmFtZSwgYmFzZXMsIGRpY3QpXG4iCiAidHlwZShvYmplY3QpIC0+IHRoZSBvYmplY3QncyB0eXBlXG4iCiAidHlwZShuYW1lLCBiYXNlcywgZGljdCkgLT4gYSBuZXcgdHlwZSIpOwogCkBAIC0yOTIzLDggKzMwOTMsOCBAQAogICAgICAgICAgICBjbGFzcydzIGRpY3Q7IHRoZSBjeWNsZSB3aWxsIGJlIGJyb2tlbiB0aGF0IHdheS4KIAogICAgICAgIHRwX3N1YmNsYXNzZXM6Ci0gICAgICAgICAgIEEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgY2FuJ3QgYmUgcGFydCBvZiBhIGN5Y2xlOyBhbmQKLSAgICAgICAgICAgbGlzdHMgaGF2ZSB0aGVpciBvd24gdHBfY2xlYXIuCisgICAgICAgICAgIEEgZGljdCBvZiB3ZWFrIHJlZmVyZW5jZXMgY2FuJ3QgYmUgcGFydCBvZiBhIGN5Y2xlOyBhbmQKKyAgICAgICAgICAgZGljdHMgaGF2ZSB0aGVpciBvd24gdHBfY2xlYXIuCiAKICAgICAgICBzbG90cyAoaW4gUHlIZWFwVHlwZU9iamVjdCk6CiAgICAgICAgICAgIEEgdHVwbGUgb2Ygc3RyaW5ncyBjYW4ndCBiZSBwYXJ0IG9mIGEgY3ljbGUuCkBAIC0zMTQxLDcgKzMzMTEsNyBAQAogICAgICAgICBQeV9YREVDUkVGKG1vZCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAobW9kICE9IE5VTEwgJiYgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobW9kLCAiYnVpbHRpbnMiKSkKKyAgICBpZiAobW9kICE9IE5VTEwgJiYgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG1vZCwgJlB5SWRfYnVpbHRpbnMpKQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVVLiVVIG9iamVjdCBhdCAlcD4iLCBtb2QsIG5hbWUsIHNlbGYpOwogICAgIGVsc2UKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKQEAgLTMzMTMsNyArMzQ4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAiX19jbGFzc19fIGFzc2lnbm1lbnQ6IG9ubHkgZm9yIGhlYXAgdHlwZXMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChuZXd0bywgb2xkdG8sICJfX2NsYXNzX18iKSkgeworICAgIGlmIChjb21wYXRpYmxlX2Zvcl9hc3NpZ25tZW50KG9sZHRvLCBuZXd0bywgIl9fY2xhc3NfXyIpKSB7CiAgICAgICAgIFB5X0lOQ1JFRihuZXd0byk7CiAgICAgICAgIFB5X1RZUEUoc2VsZikgPSBuZXd0bzsKICAgICAgICAgUHlfREVDUkVGKG9sZHRvKTsKQEAgLTMzNjYsMTUwICszNTM2LDQyMyBAQAogICAgIHJldHVybiBQeUltcG9ydF9JbXBvcnQoY29weXJlZ19zdHIpOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotc2xvdG5hbWVzKFB5T2JqZWN0ICpjbHMpCitQeV9MT0NBTChQeU9iamVjdCAqKQorX1B5VHlwZV9HZXRTbG90TmFtZXMoUHlUeXBlT2JqZWN0ICpjbHMpCiB7Ci0gICAgUHlPYmplY3QgKmNsc2RpY3Q7CiAgICAgUHlPYmplY3QgKmNvcHlyZWc7CiAgICAgUHlPYmplY3QgKnNsb3RuYW1lczsKICAgICBfUHlfSURFTlRJRklFUihfX3Nsb3RuYW1lc19fKTsKICAgICBfUHlfSURFTlRJRklFUihfc2xvdG5hbWVzKTsKIAotICAgIGNsc2RpY3QgPSAoKFB5VHlwZU9iamVjdCAqKWNscyktPnRwX2RpY3Q7Ci0gICAgc2xvdG5hbWVzID0gX1B5RGljdF9HZXRJdGVtSWQoY2xzZGljdCwgJlB5SWRfX19zbG90bmFtZXNfXyk7Ci0gICAgaWYgKHNsb3RuYW1lcyAhPSBOVUxMICYmIFB5TGlzdF9DaGVjayhzbG90bmFtZXMpKSB7CisgICAgYXNzZXJ0KFB5VHlwZV9DaGVjayhjbHMpKTsKKworICAgIC8qIEdldCB0aGUgc2xvdCBuYW1lcyBmcm9tIHRoZSBjYWNoZSBpbiB0aGUgY2xhc3MgaWYgcG9zc2libGUuICovCisgICAgc2xvdG5hbWVzID0gX1B5RGljdF9HZXRJdGVtSWRXaXRoRXJyb3IoY2xzLT50cF9kaWN0LCAmUHlJZF9fX3Nsb3RuYW1lc19fKTsKKyAgICBpZiAoc2xvdG5hbWVzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmICFQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzLl9fc2xvdG5hbWVzX18gc2hvdWxkIGJlIGEgbGlzdCBvciBOb25lLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNscy0+dHBfbmFtZSwgUHlfVFlQRShzbG90bmFtZXMpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5X0lOQ1JFRihzbG90bmFtZXMpOwogICAgICAgICByZXR1cm4gc2xvdG5hbWVzOwogICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qIFRoZSBjbGFzcyBkb2VzIG5vdCBoYXZlIHRoZSBzbG90IG5hbWVzIGNhY2hlZCB5ZXQuICovCisgICAgfQogCiAgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CiAgICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzbG90bmFtZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGNvcHlyZWcsICZQeUlkX19zbG90bmFtZXMsICJPIiwgY2xzKTsKKyAgICAvKiBVc2UgX3Nsb3RuYW1lcyBmdW5jdGlvbiBmcm9tIHRoZSBjb3B5cmVnIG1vZHVsZSB0byBmaW5kIHRoZSBzbG90cworICAgICAgIGJ5IHRoaXMgY2xhc3MgYW5kIGl0cyBiYXNlcy4gVGhpcyBmdW5jdGlvbiB3aWxsIGNhY2hlIHRoZSByZXN1bHQKKyAgICAgICBpbiBfX3Nsb3RuYW1lc19fLiAqLworICAgIHNsb3RuYW1lcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGNvcHlyZWcsICZQeUlkX19zbG90bmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLCBOVUxMKTsKICAgICBQeV9ERUNSRUYoY29weXJlZyk7Ci0gICAgaWYgKHNsb3RuYW1lcyAhPSBOVUxMICYmCi0gICAgICAgIHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmCi0gICAgICAgICFQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkKLSAgICB7CisgICAgaWYgKHNsb3RuYW1lcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzbG90bmFtZXMgIT0gUHlfTm9uZSAmJiAhUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJjb3B5cmVnLl9zbG90bmFtZXMgZGlkbid0IHJldHVybiBhIGxpc3Qgb3IgTm9uZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImNvcHlyZWcuX3Nsb3RuYW1lcyBkaWRuJ3QgcmV0dXJuIGEgbGlzdCBvciBOb25lIik7CiAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOwotICAgICAgICBzbG90bmFtZXMgPSBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gc2xvdG5hbWVzOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotcmVkdWNlXzIoUHlPYmplY3QgKm9iaikKK1B5X0xPQ0FMKFB5T2JqZWN0ICopCitfUHlPYmplY3RfR2V0U3RhdGUoUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeU9iamVjdCAqY2xzLCAqZ2V0bmV3YXJnczsKLSAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICphcmdzMiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmdldHN0YXRlID0gTlVMTCwgKnN0YXRlID0gTlVMTCwgKm5hbWVzID0gTlVMTDsKLSAgICBQeU9iamVjdCAqc2xvdHMgPSBOVUxMLCAqbGlzdGl0ZW1zID0gTlVMTCwgKmRpY3RpdGVtcyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMLCAqbmV3b2JqID0gTlVMTCwgKnJlcyA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBpLCBuOwotICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0bmV3YXJnc19fKTsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisgICAgUHlPYmplY3QgKmdldHN0YXRlOwogICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0c3RhdGVfXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfXyk7Ci0KLSAgICBjbHMgPSAoUHlPYmplY3QgKikgUHlfVFlQRShvYmopOwotCi0gICAgZ2V0bmV3YXJncyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2dldG5ld2FyZ3NfXyk7Ci0gICAgaWYgKGdldG5ld2FyZ3MgIT0gTlVMTCkgewotICAgICAgICBhcmdzID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRuZXdhcmdzLCBOVUxMKTsKLSAgICAgICAgUHlfREVDUkVGKGdldG5ld2FyZ3MpOwotICAgICAgICBpZiAoYXJncyAhPSBOVUxMICYmICFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUsICIKLSAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShhcmdzKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOwotICAgIH0KLSAgICBpZiAoYXJncyA9PSBOVUxMKQotICAgICAgICBnb3RvIGVuZDsKIAogICAgIGdldHN0YXRlID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fZ2V0c3RhdGVfXyk7Ci0gICAgaWYgKGdldHN0YXRlICE9IE5VTEwpIHsKKyAgICBpZiAoZ2V0c3RhdGUgPT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqc2xvdG5hbWVzOworCisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUHlPYmplY3QgKipkaWN0OworICAgICAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7CisgICAgICAgICAgICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBvYmplY3QncyBkaWN0IGlzIG5vdCBpbml0aWFsaXplZAorICAgICAgICAgICAgICAgeWV0LiBJbiB0aGlzIGNhc2UsIHdlIHdpbGwgcmV0dXJuIE5vbmUgZm9yIHRoZSBzdGF0ZS4KKyAgICAgICAgICAgICAgIFdlIGFsc28gcmV0dXJuIE5vbmUgaWYgdGhlIGRpY3QgaXMgZW1wdHkgdG8gbWFrZSB0aGUgYmVoYXZpb3IKKyAgICAgICAgICAgICAgIGNvbnNpc3RlbnQgcmVnYXJkbGVzcyB3aGV0aGVyIHRoZSBkaWN0IHdhcyBpbml0aWFsaXplZCBvciBub3QuCisgICAgICAgICAgICAgICBUaGlzIG1ha2UgdW5pdCB0ZXN0aW5nIGVhc2llci4gKi8KKyAgICAgICAgICAgIGlmIChkaWN0ICE9IE5VTEwgJiYgKmRpY3QgIT0gTlVMTCAmJiBQeURpY3RfU2l6ZSgqZGljdCkgPiAwKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAqZGljdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlID0gUHlfTm9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICBzbG90bmFtZXMgPSBfUHlUeXBlX0dldFNsb3ROYW1lcyhQeV9UWVBFKG9iaikpOworICAgICAgICBpZiAoc2xvdG5hbWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydChzbG90bmFtZXMgPT0gUHlfTm9uZSB8fCBQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSk7CisgICAgICAgIGlmIChzbG90bmFtZXMgIT0gUHlfTm9uZSAmJiBQeV9TSVpFKHNsb3RuYW1lcykgPiAwKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc2xvdHM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHNsb3RuYW1lc19zaXplLCBpOworCisgICAgICAgICAgICBzbG90cyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgIGlmIChzbG90cyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2xvdG5hbWVzX3NpemUgPSBQeV9TSVpFKHNsb3RuYW1lcyk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2xvdG5hbWVzX3NpemU7IGkrKykgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWU7CisKKyAgICAgICAgICAgICAgICBuYW1lID0gUHlMaXN0X0dFVF9JVEVNKHNsb3RuYW1lcywgaSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBJdCBpcyBub3QgYW4gZXJyb3IgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudC4gKi8KKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBQeURpY3RfU2V0SXRlbShzbG90cywgbmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogVGhlIGxpc3QgaXMgc3RvcmVkIG9uIHRoZSBjbGFzcyBzbyBpdCBtYXkgbXV0YXRlcyB3aGlsZSB3ZQorICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUgb3ZlciBpdCAqLworICAgICAgICAgICAgICAgIGlmIChzbG90bmFtZXNfc2l6ZSAhPSBQeV9TSVpFKHNsb3RuYW1lcykpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3Nsb3RzbmFtZV9fIGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogV2UgaGFuZGxlIGVycm9ycyB3aXRoaW4gdGhlIGxvb3AgaGVyZS4gKi8KKyAgICAgICAgICAgICAgICBpZiAoMCkgeworICAgICAgICAgICAgICAgICAgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdHMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElmIHdlIGZvdW5kIHNvbWUgc2xvdCBhdHRyaWJ1dGVzLCBwYWNrIHRoZW0gaW4gYSB0dXBsZSBhbG9uZworICAgICAgICAgICAgICAgdGhlIG9yZ2luYWwgYXR0cmlidXRlIGRpY3Rpb25hcnkuICovCisgICAgICAgICAgICBpZiAoUHlEaWN0X1NpemUoc2xvdHMpID4gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdGF0ZTI7CisKKyAgICAgICAgICAgICAgICBzdGF0ZTIgPSBQeVR1cGxlX1BhY2soMiwgc3RhdGUsIHNsb3RzKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZTIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGUyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RzKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICB9CisgICAgZWxzZSB7IC8qIGdldHN0YXRlICE9IE5VTEwgKi8KICAgICAgICAgc3RhdGUgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldHN0YXRlLCBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGdldHN0YXRlKTsKICAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKipkaWN0OwotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBkaWN0ID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2JqKTsKLSAgICAgICAgaWYgKGRpY3QgJiYgKmRpY3QpCi0gICAgICAgICAgICBzdGF0ZSA9ICpkaWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZSA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihzdGF0ZSk7Ci0gICAgICAgIG5hbWVzID0gc2xvdG5hbWVzKGNscyk7Ci0gICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIGlmIChuYW1lcyAhPSBQeV9Ob25lICYmIFB5TGlzdF9HRVRfU0laRShuYW1lcykgPiAwKSB7Ci0gICAgICAgICAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKG5hbWVzKSk7Ci0gICAgICAgICAgICBzbG90cyA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgIGlmIChzbG90cyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgICAgICAvKiBDYW4ndCBwcmUtY29tcHV0ZSB0aGUgbGlzdCBzaXplOyB0aGUgbGlzdAotICAgICAgICAgICAgICAgaXMgc3RvcmVkIG9uIHRoZSBjbGFzcyBzbyBhY2Nlc3NpYmxlIHRvIG90aGVyCi0gICAgICAgICAgICAgICB0aHJlYWRzLCB3aGljaCBtYXkgYmUgcnVuIGJ5IERFQ1JFRiAqLwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9HRVRfU0laRShuYW1lcyk7IGkrKykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWU7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IFB5TGlzdF9HRVRfSVRFTShuYW1lcywgaSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBQeURpY3RfU2V0SXRlbShzbG90cywgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4pIHsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IFB5X0J1aWxkVmFsdWUoIihOTykiLCBzdGF0ZSwgc2xvdHMpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIH0KKworICAgIHJldHVybiBzdGF0ZTsKK30KKworUHlfTE9DQUwoaW50KQorX1B5T2JqZWN0X0dldE5ld0FyZ3VtZW50cyhQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqKmFyZ3MsIFB5T2JqZWN0ICoqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpnZXRuZXdhcmdzLCAqZ2V0bmV3YXJnc19leDsKKyAgICBfUHlfSURFTlRJRklFUihfX2dldG5ld2FyZ3NfZXhfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19nZXRuZXdhcmdzX18pOworCisgICAgaWYgKGFyZ3MgPT0gTlVMTCB8fCBrd2FyZ3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFdlIGZpcnN0IGF0dGVtcHQgdG8gZmV0Y2ggdGhlIGFyZ3VtZW50cyBmb3IgX19uZXdfXyBieSBjYWxsaW5nCisgICAgICAgX19nZXRuZXdhcmdzX2V4X18gb24gdGhlIG9iamVjdC4gKi8KKyAgICBnZXRuZXdhcmdzX2V4ID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwob2JqLCAmUHlJZF9fX2dldG5ld2FyZ3NfZXhfXyk7CisgICAgaWYgKGdldG5ld2FyZ3NfZXggIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqbmV3YXJncyA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZ2V0bmV3YXJnc19leCwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihnZXRuZXdhcmdzX2V4KTsKKyAgICAgICAgaWYgKG5ld2FyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhuZXdhcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gc2hvdWxkIHJldHVybiBhIHR1cGxlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIFB5X1RZUEUobmV3YXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChQeV9TSVpFKG5ld2FyZ3MpICE9IDIpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUgb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggMiwgbm90ICV6ZCIsIFB5X1NJWkUobmV3YXJncykpOworICAgICAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICphcmdzID0gUHlUdXBsZV9HRVRfSVRFTShuZXdhcmdzLCAwKTsKKyAgICAgICAgUHlfSU5DUkVGKCphcmdzKTsKKyAgICAgICAgKmt3YXJncyA9IFB5VHVwbGVfR0VUX0lURU0obmV3YXJncywgMSk7CisgICAgICAgIFB5X0lOQ1JFRigqa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworCisgICAgICAgIC8qIFhYWCBXZSBzaG91bGQgcGVyaGFwcyBhbGxvdyBOb25lIHRvIGJlIHBhc3NlZCBoZXJlLiAqLworICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soKmFyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBpdGVtIG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIG11c3QgYmUgYSB0dXBsZSwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKCphcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9DTEVBUigqYXJncyk7CisgICAgICAgICAgICBQeV9DTEVBUigqa3dhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVB5RGljdF9DaGVjaygqa3dhcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2Vjb25kIGl0ZW0gb2YgdGhlIHR1cGxlIHJldHVybmVkIGJ5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gbXVzdCBiZSBhIGRpY3QsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSgqa3dhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9DTEVBUigqYXJncyk7CisgICAgICAgICAgICBQeV9DTEVBUigqa3dhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFRoZSBvYmplY3QgZG9lcyBub3QgaGF2ZSBfX2dldG5ld2FyZ3NfZXhfXyBzbyB3ZSBmYWxsYmFjayBvbiB1c2luZworICAgICAgIF9fZ2V0bmV3YXJnc19fIGluc3RlYWQuICovCisgICAgZ2V0bmV3YXJncyA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG9iaiwgJlB5SWRfX19nZXRuZXdhcmdzX18pOworICAgIGlmIChnZXRuZXdhcmdzICE9IE5VTEwpIHsKKyAgICAgICAgKmFyZ3MgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldG5ld2FyZ3MsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZ2V0bmV3YXJncyk7CisgICAgICAgIGlmICgqYXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKCphcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX18gc2hvdWxkIHJldHVybiBhIHR1cGxlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIFB5X1RZUEUoKmFyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCphcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAqa3dhcmdzID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBUaGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgX19nZXRuZXdhcmdzX2V4X18gYW5kIF9fZ2V0bmV3YXJnc19fLiBUaGlzIG1heQorICAgICAgIG1lYW5zIF9fbmV3X18gZG9lcyBub3QgdGFrZXMgYW55IGFyZ3VtZW50cyBvbiB0aGlzIG9iamVjdCwgb3IgdGhhdCB0aGUKKyAgICAgICBvYmplY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSByZWR1Y2UgcHJvdG9jb2wgZm9yIHBpY2tsaW5nIG9yCisgICAgICAgY29weWluZy4gKi8KKyAgICAqYXJncyA9IE5VTEw7CisgICAgKmt3YXJncyA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKK1B5X0xPQ0FMKGludCkKK19QeU9iamVjdF9HZXRJdGVtc0l0ZXIoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKipsaXN0aXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqZGljdGl0ZW1zKQoreworICAgIGlmIChsaXN0aXRlbXMgPT0gTlVMTCB8fCBkaWN0aXRlbXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIGlmICghUHlMaXN0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgbGlzdGl0ZW1zID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKGxpc3RpdGVtcyk7CisgICAgICAgICpsaXN0aXRlbXMgPSBQeV9Ob25lOworICAgICAgICBQeV9JTkNSRUYoKmxpc3RpdGVtcyk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBsaXN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7Ci0gICAgICAgIGlmIChsaXN0aXRlbXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAqbGlzdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihvYmopOworICAgICAgICBpZiAoKmxpc3RpdGVtcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIGlmICghUHlEaWN0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgZGljdGl0ZW1zID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKGRpY3RpdGVtcyk7CisgICAgICAgICpkaWN0aXRlbXMgPSBQeV9Ob25lOworICAgICAgICBQeV9JTkNSRUYoKmRpY3RpdGVtcyk7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqaXRlbXM7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGl0ZW1zKTsKLSAgICAgICAgUHlPYmplY3QgKml0ZW1zID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChvYmosICZQeUlkX2l0ZW1zLCAiIik7Ci0gICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIGRpY3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlbXMpOworCisgICAgICAgIGl0ZW1zID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3Mob2JqLCAmUHlJZF9pdGVtcywgTlVMTCk7CisgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUigqbGlzdGl0ZW1zKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAqZGljdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihpdGVtcyk7CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7Ci0gICAgICAgIGlmIChkaWN0aXRlbXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBpZiAoKmRpY3RpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUigqbGlzdGl0ZW1zKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAorICAgIGFzc2VydCgqbGlzdGl0ZW1zICE9IE5VTEwgJiYgKmRpY3RpdGVtcyAhPSBOVUxMKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcmVkdWNlXzQoUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICprd2FyZ3MgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb3B5cmVnOworICAgIFB5T2JqZWN0ICpuZXdvYmosICpuZXdhcmdzLCAqc3RhdGUsICpsaXN0aXRlbXMsICpkaWN0aXRlbXM7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9leF9fKTsKKworICAgIGlmIChfUHlPYmplY3RfR2V0TmV3QXJndW1lbnRzKG9iaiwgJmFyZ3MsICZrd2FyZ3MpIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CisgICAgICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGt3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIGt3YXJncyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgaWYgKGt3YXJncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CisgICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3b2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZChjb3B5cmVnLCAmUHlJZF9fX25ld29ial9leF9fKTsKKyAgICBQeV9ERUNSRUYoY29weXJlZyk7CisgICAgaWYgKG5ld29iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBuZXdhcmdzID0gUHlUdXBsZV9QYWNrKDMsIFB5X1RZUEUob2JqKSwgYXJncywga3dhcmdzKTsKKyAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgaWYgKG5ld2FyZ3MgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN0YXRlID0gX1B5T2JqZWN0X0dldFN0YXRlKG9iaik7CisgICAgaWYgKHN0YXRlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChfUHlPYmplY3RfR2V0SXRlbXNJdGVyKG9iaiwgJmxpc3RpdGVtcywgJmRpY3RpdGVtcykgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5VHVwbGVfUGFjayg1LCBuZXdvYmosIG5ld2FyZ3MsIHN0YXRlLCBsaXN0aXRlbXMsIGRpY3RpdGVtcyk7CisgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgUHlfREVDUkVGKGxpc3RpdGVtcyk7CisgICAgUHlfREVDUkVGKGRpY3RpdGVtcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JlZHVjZV8yKFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKmNsczsKKyAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICphcmdzMiA9IE5VTEwsICprd2FyZ3MgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdGF0ZSA9IE5VTEwsICpsaXN0aXRlbXMgPSBOVUxMLCAqZGljdGl0ZW1zID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29weXJlZyA9IE5VTEwsICpuZXdvYmogPSBOVUxMLCAqcmVzID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGksIG47CisgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfXyk7CisKKyAgICBpZiAoX1B5T2JqZWN0X0dldE5ld0FyZ3VtZW50cyhvYmosICZhcmdzLCAma3dhcmdzKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KGt3YXJncyA9PSBOVUxMKTsKKyAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChrd2FyZ3MgIT0gTlVMTCkgeworICAgICAgICBpZiAoUHlEaWN0X1NpemUoa3dhcmdzKSA+IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IHVzZSBwcm90b2NvbCA0IG9yIGdyZWF0ZXIgdG8gY29weSB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0OyBzaW5jZSBfX2dldG5ld2FyZ3NfZXhfXyByZXR1cm5lZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmQgYXJndW1lbnRzLiIpOworICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihrd2FyZ3MpOworICAgIH0KKworICAgIHN0YXRlID0gX1B5T2JqZWN0X0dldFN0YXRlKG9iaik7CisgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYgKF9QeU9iamVjdF9HZXRJdGVtc0l0ZXIob2JqLCAmbGlzdGl0ZW1zLCAmZGljdGl0ZW1zKSA8IDApCisgICAgICAgIGdvdG8gZW5kOworCiAgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CiAgICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkKICAgICAgICAgZ290byBlbmQ7CkBAIC0zNTIxLDYgKzM5NjQsNyBAQAogICAgIGFyZ3MyID0gUHlUdXBsZV9OZXcobisxKTsKICAgICBpZiAoYXJnczIgPT0gTlVMTCkKICAgICAgICAgZ290byBlbmQ7CisgICAgY2xzID0gKFB5T2JqZWN0ICopIFB5X1RZUEUob2JqKTsKICAgICBQeV9JTkNSRUYoY2xzKTsKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MyLCAwLCBjbHMpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTM1MzQsOSArMzk3OCw3IEBACiAgIGVuZDoKICAgICBQeV9YREVDUkVGKGFyZ3MpOwogICAgIFB5X1hERUNSRUYoYXJnczIpOwotICAgIFB5X1hERUNSRUYoc2xvdHMpOwogICAgIFB5X1hERUNSRUYoc3RhdGUpOwotICAgIFB5X1hERUNSRUYobmFtZXMpOwogICAgIFB5X1hERUNSRUYobGlzdGl0ZW1zKTsKICAgICBQeV9YREVDUkVGKGRpY3RpdGVtcyk7CiAgICAgUHlfWERFQ1JFRihjb3B5cmVnKTsKQEAgLTM1NjQsNyArNDAwNiw5IEBACiB7CiAgICAgUHlPYmplY3QgKmNvcHlyZWcsICpyZXM7CiAKLSAgICBpZiAocHJvdG8gPj0gMikKKyAgICBpZiAocHJvdG8gPj0gNCkKKyAgICAgICAgcmV0dXJuIHJlZHVjZV80KHNlbGYpOworICAgIGVsc2UgaWYgKHByb3RvID49IDIpCiAgICAgICAgIHJldHVybiByZWR1Y2VfMihzZWxmKTsKIAogICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOwpAQCAtMzY2OSwxNiArNDExMyw5IEBACiAgICAgICAgIC8qIElzc3VlIDc5OTQ6IElmIHdlJ3JlIGNvbnZlcnRpbmcgdG8gYSBzdHJpbmcsIHdlCiAgICAgICAgICAgIHNob3VsZCByZWplY3QgZm9ybWF0IHNwZWNpZmljYXRpb25zICovCiAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChmb3JtYXRfc3BlYykgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyBpcyBkZXByZWNhdGVkIiwgMSkgPCAwKSB7Ci0gICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIEV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvcjoKLSAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgIm5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIHBhc3NlZCB0byBvYmplY3QuX19mb3JtYXRfXyIpOwotICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0Zvcm1hdChzZWxmX2FzX3N0ciwgZm9ybWF0X3NwZWMpOwpAQCAtMzc4OCw4ICs0MjI1LDggQEAKICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KLSAgICBQeURvY19TVFIoIlRoZSBtb3N0IGJhc2UgdHlwZSIpLCAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAgLyogdHBfZmxhZ3MgKi8KKyAgICBQeURvY19TVFIoIm9iamVjdCgpXG4tLVxuXG5UaGUgbW9zdCBiYXNlIHR5cGUiKSwgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgb2JqZWN0X3JpY2hjb21wYXJlLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwpAQCAtMzgzMyw3ICs0MjcwLDcgQEAKICAgICAgICAgICAgIGRlc2NyID0gUHlEZXNjcl9OZXdDbGFzc01ldGhvZCh0eXBlLCBtZXRoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChtZXRoLT5tbF9mbGFncyAmIE1FVEhfU1RBVElDKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY2Z1bmMgPSBQeUNGdW5jdGlvbl9OZXcobWV0aCwgKFB5T2JqZWN0Kil0eXBlKTsKKyAgICAgICAgICBQeU9iamVjdCAqY2Z1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeChtZXRoLCAoUHlPYmplY3QqKXR5cGUsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGNmdW5jID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgZGVzY3IgPSBQeVN0YXRpY01ldGhvZF9OZXcoY2Z1bmMpOwpAQCAtNDEwMyw2ICs0NTQwLDEwIEBACiAgICAgICAgIENPUFlTTE9UKHRwX2luaXQpOwogICAgICAgICBDT1BZU0xPVCh0cF9hbGxvYyk7CiAgICAgICAgIENPUFlTTE9UKHRwX2lzX2djKTsKKyAgICAgICAgaWYgKCh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYKKyAgICAgICAgICAgIChiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkpIHsKKyAgICAgICAgICAgIENPUFlTTE9UKHRwX2ZpbmFsaXplKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKSA9PQogICAgICAgICAgICAgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKSkgewogICAgICAgICAgICAgLyogVGhleSBhZ3JlZSBhYm91dCBnYy4gKi8KQEAgLTQyNTIsMTQgKzQ2OTMsMjAgQEAKICAgICAgKi8KICAgICBpZiAoX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXykgPT0gTlVMTCkgewogICAgICAgICBpZiAodHlwZS0+dHBfZG9jICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpkb2MgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0eXBlLT50cF9kb2MpOworICAgICAgICAgICAgY29uc3QgY2hhciAqb2xkX2RvYyA9IF9QeVR5cGVfRG9jV2l0aG91dFNpZ25hdHVyZSh0eXBlLT50cF9uYW1lLAorICAgICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZG9jID0gUHlVbmljb2RlX0Zyb21TdHJpbmcob2xkX2RvYyk7CiAgICAgICAgICAgICBpZiAoZG9jID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fZG9jX18sIGRvYyk7CisgICAgICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXywgZG9jKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZG9jKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGRvYyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX19kb2NfXywgUHlfTm9uZSk7CisgICAgICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fX2RvY19fLCBQeV9Ob25lKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDMwMywxMyArNDc1MCwxMSBAQAogICAgIC8qIFdhcm4gZm9yIGEgdHlwZSB0aGF0IGltcGxlbWVudHMgdHBfY29tcGFyZSAobm93IGtub3duIGFzCiAgICAgICAgdHBfcmVzZXJ2ZWQpIGJ1dCBub3QgdHBfcmljaGNvbXBhcmUuICovCiAgICAgaWYgKHR5cGUtPnRwX3Jlc2VydmVkICYmICF0eXBlLT50cF9yaWNoY29tcGFyZSkgewotICAgICAgICBpbnQgZXJyb3I7Ci0gICAgICAgIGVycm9yID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIDEsCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZGVmaW5lcyB0cF9yZXNlcnZlZCAoZm9ybWVybHkgdHBfY29tcGFyZSkgIgogICAgICAgICAgICAgImJ1dCBub3QgdHBfcmljaGNvbXBhcmUuIENvbXBhcmlzb25zIG1heSBub3QgYmVoYXZlIGFzIGludGVuZGVkLiIsCiAgICAgICAgICAgICB0eXBlLT50cF9uYW1lKTsKLSAgICAgICAgaWYgKGVycm9yID09IC0xKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICAvKiBBbGwgZG9uZSAtLSBzZXQgdGhlIHJlYWR5IGZsYWcgKi8KQEAgLTQzMjYsNDkgKzQ3NzEsNTcgQEAKIHN0YXRpYyBpbnQKIGFkZF9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKmJhc2UsIFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaW50IHJlc3VsdDsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnJlZiwgKm5ld29iajsKKyAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgUHlPYmplY3QgKmRpY3QsICprZXksICpuZXdvYmo7CiAKLSAgICBsaXN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIGJhc2UtPnRwX3N1YmNsYXNzZXMgPSBsaXN0ID0gUHlMaXN0X05ldygwKTsKLSAgICAgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICBkaWN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKKyAgICBpZiAoZGljdCA9PSBOVUxMKSB7CisgICAgICAgIGJhc2UtPnRwX3N1YmNsYXNzZXMgPSBkaWN0ID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoZGljdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGxpc3QpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QoZGljdCkpOworICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCAqKSB0eXBlKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKICAgICBuZXdvYmogPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwotICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7Ci0gICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShsaXN0LCBpKTsKLSAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKLSAgICAgICAgaWYgKFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZikgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBQeUxpc3RfU2V0SXRlbShsaXN0LCBpLCBuZXdvYmopOworICAgIGlmIChuZXdvYmogIT0gTlVMTCkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbShkaWN0LCBrZXksIG5ld29iaik7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOwogICAgIH0KLSAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIG5ld29iaik7Ci0gICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgUHlfREVDUkVGKGtleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHZvaWQKIHJlbW92ZV9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKmJhc2UsIFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpyZWY7CisgICAgUHlPYmplY3QgKmRpY3QsICprZXk7CiAKLSAgICBsaXN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7CisgICAgZGljdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGFzc2VydChQeUxpc3RfQ2hlY2sobGlzdCkpOwotICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7Ci0gICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShsaXN0LCBpKTsKLSAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKLSAgICAgICAgaWYgKFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZikgPT0gKFB5T2JqZWN0Kil0eXBlKSB7Ci0gICAgICAgICAgICAvKiB0aGlzIGNhbid0IGZhaWwsIHJpZ2h0PyAqLwotICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxJdGVtKGxpc3QsIGkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChkaWN0KSk7CisgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkICopIHR5cGUpOworICAgIGlmIChrZXkgPT0gTlVMTCB8fCBQeURpY3RfRGVsSXRlbShkaWN0LCBrZXkpKSB7CisgICAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdHlwZSBpbml0aWFsaXphdGlvbiBlcnJvcmVkIG91dCBiZWZvcmUKKyAgICAgICAgICAgdGhlIGJhc2Ugc3ViY2xhc3NlcyB3ZXJlIHVwZGF0ZWQgKGUuZy4gYSBub24tc3RyIF9fcXVhbG5hbWVfXworICAgICAgICAgICB3YXMgcGFzc2VkIGluIHRoZSB0eXBlIGRpY3QpLiAqLworICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBQeV9YREVDUkVGKGtleSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfYWxsX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZXMpCit7CisgICAgaWYgKGJhc2VzKSB7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUoYmFzZXMpOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYXNlID0gUHlUdXBsZV9HRVRfSVRFTShiYXNlcywgaSk7CisgICAgICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKGJhc2UpKQorICAgICAgICAgICAgICAgIHJlbW92ZV9zdWJjbGFzcygoUHlUeXBlT2JqZWN0KikgYmFzZSwgdHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC00NzI1LDYgKzUxNzgsMTggQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBfZGVsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgdm9pZCAqd3JhcHBlZCkKK3sKKyAgICBkZXN0cnVjdG9yIGZ1bmMgPSAoZGVzdHJ1Y3Rvcil3cmFwcGVkOworCisgICAgaWYgKCFjaGVja19udW1fYXJncyhhcmdzLCAwKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAoKmZ1bmMpKHNlbGYpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogd3JhcF9yaWNoY21wZnVuYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIHZvaWQgKndyYXBwZWQsIGludCBvcCkKIHsKICAgICByaWNoY21wZnVuYyBmdW5jID0gKHJpY2hjbXBmdW5jKXdyYXBwZWQ7CkBAIC00ODkxLDggKzUzNTYsOSBAQAogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHRwX25ld19tZXRob2RkZWZbXSA9IHsKICAgICB7Il9fbmV3X18iLCAoUHlDRnVuY3Rpb24pdHBfbmV3X3dyYXBwZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICBQeURvY19TVFIoIlQuX19uZXdfXyhTLCAuLi4pIC0+ICIKLSAgICAgICAgICAgICAgICJhIG5ldyBvYmplY3Qgd2l0aCB0eXBlIFMsIGEgc3VidHlwZSBvZiBUIil9LAorICAgICBQeURvY19TVFIoIl9fbmV3X18oJHR5cGUsICphcmdzLCAqKmt3YXJncylcbi0tXG5cbiIKKyAgICAgICAgICAgICAgICJDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBvYmplY3QuICAiCisgICAgICAgICAgICAgICAiU2VlIGhlbHAodHlwZSkgZm9yIGFjY3VyYXRlIHNpZ25hdHVyZS4iKX0sCiAgICAgezB9CiB9OwogCkBAIC00OTAzLDcgKzUzNjksNyBAQAogCiAgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbmV3X18pICE9IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcodHBfbmV3X21ldGhvZGRlZiwgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KHRwX25ld19tZXRob2RkZWYsIChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwogICAgIGlmIChmdW5jID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19uZXdfXywgZnVuYykpIHsKQEAgLTUwMTUsNyArNTQ4MSw2IEBACiBzdGF0aWMgUHlfc3NpemVfdAogc2xvdF9zcV9sZW5ndGgoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoX19sZW5fXyk7CiAgICAgUHlPYmplY3QgKnJlcyA9IGNhbGxfbWV0aG9kKHNlbGYsICZQeUlkX19fbGVuX18sICIoKSIpOwogICAgIFB5X3NzaXplX3QgbGVuOwogCkBAIC01MDc2LDggKzU1NDEsNiBAQAogc2xvdF9zcV9hc3NfaXRlbShQeU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgX1B5X0lERU5USUZJRVIoX19kZWxpdGVtX18pOwotICAgIF9QeV9JREVOVElGSUVSKF9fc2V0aXRlbV9fKTsKIAogICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICByZXMgPSBjYWxsX21ldGhvZChzZWxmLCAmUHlJZF9fX2RlbGl0ZW1fXywgIihuKSIsIGluZGV4KTsKQEAgLTUxMjcsOCArNTU5MCw2IEBACiBzbG90X21wX2Fzc19zdWJzY3JpcHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGVsaXRlbV9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX3NldGl0ZW1fXyk7CiAKICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgcmVzID0gY2FsbF9tZXRob2Qoc2VsZiwgJlB5SWRfX19kZWxpdGVtX18sICIoTykiLCBrZXkpOwpAQCAtNTE3OSw3ICs1NjQwLDYgQEAKICAgICBQeU9iamVjdCAqZnVuYywgKmFyZ3M7CiAgICAgaW50IHJlc3VsdCA9IC0xOwogICAgIGludCB1c2luZ19sZW4gPSAwOwotICAgIF9QeV9JREVOVElGSUVSKF9fbGVuX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9fYm9vbF9fKTsKIAogICAgIGZ1bmMgPSBsb29rdXBfbWF5YmUoc2VsZiwgJlB5SWRfX19ib29sX18pOwpAQCAtNTI4MSwyOCArNTc0MSwxMSBAQAogICAgIF9QeV9JREVOVElGSUVSKF9fc3RyX18pOwogCiAgICAgZnVuYyA9IGxvb2t1cF9tZXRob2Qoc2VsZiwgJlB5SWRfX19zdHJfXyk7Ci0gICAgaWYgKGZ1bmMgIT0gTlVMTCkgewotICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBOVUxMKTsKLSAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogUHlPYmplY3QgKnJlc3M7ICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIHJlcyA9IHNsb3RfdHBfcmVwcihzZWxmKTsKLSAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgLyogWFhYIHRoaXMgaXMgbm9uLXNlbnNpY2FsLiBXaHkgc2hvdWxkIHdlIHJldHVybgotICAgICAgICAgICBhIGJ5dGVzIG9iamVjdCBmcm9tIF9fc3RyX18uIElzIHRoaXMgY29kZSBldmVuCi0gICAgICAgICAgIHVzZWQ/IC0gbXZsICovCi0gICAgICAgIGFzc2VydCgwKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgLyoKLSAgICAgICAgcmVzcyA9IF9QeVVuaWNvZGVfQXNEZWZhdWx0RW5jb2RlZFN0cmluZyhyZXMpOwotICAgICAgICBQeV9ERUNSRUYocmVzKTsKLSAgICAgICAgcmV0dXJuIHJlc3M7Ci0gICAgICAgICovCi0gICAgfQorICAgIGlmIChmdW5jID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIE5VTEwpOworICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgUHlfaGFzaF90CkBAIC01NTk4LDcgKzYwNDEsNiBAQAogICAgIFB5T2JqZWN0ICpmdW5jOwogICAgIFB5T2JqZWN0ICpuZXdhcmdzLCAqeDsKICAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgX1B5X0lERU5USUZJRVIoX19uZXdfXyk7CiAKICAgICBmdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKil0eXBlLCAmUHlJZF9fX25ld19fKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQpAQCAtNTYyMiwxNiArNjA2NCwxMiBAQAogfQogCiBzdGF0aWMgdm9pZAotc2xvdF90cF9kZWwoUHlPYmplY3QgKnNlbGYpCitzbG90X3RwX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQogewogICAgIF9QeV9JREVOVElGSUVSKF9fZGVsX18pOwogICAgIFB5T2JqZWN0ICpkZWwsICpyZXM7CiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKIAotICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPT0gMCk7Ci0gICAgc2VsZi0+b2JfcmVmY250ID0gMTsKLQogICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAKQEAgLTU2NDgsMzcgKzYwODYsNiBAQAogCiAgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLwogICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICAvKiBVbmRvIHRoZSB0ZW1wb3JhcnkgcmVzdXJyZWN0aW9uOyBjYW4ndCB1c2UgREVDUkVGIGhlcmUsIGl0IHdvdWxkCi0gICAgICogY2F1c2UgYSByZWN1cnNpdmUgY2FsbC4KLSAgICAgKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID4gMCk7Ci0gICAgaWYgKC0tc2VsZi0+b2JfcmVmY250ID09IDApCi0gICAgICAgIHJldHVybjsgICAgICAgICAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KLQotICAgIC8qIF9fZGVsX18gcmVzdXJyZWN0ZWQgaXQhICBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgUHlfREVDUkVGCi0gICAgICogbmV2ZXIgaGFwcGVuZWQuCi0gICAgICovCi0gICAgewotICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgc2VsZi0+b2JfcmVmY250ID0gcmVmY250OwotICAgIH0KLSAgICBhc3NlcnQoIVB5VHlwZV9JU19HQyhQeV9UWVBFKHNlbGYpKSB8fAotICAgICAgICAgICBfUHlfQVNfR0Moc2VsZiktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOwotICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbwotICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLwotICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKLSAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KLSAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKLSAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKLSAgICAgKiB1bmRvbmUuCi0gICAgICovCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgLS1QeV9UWVBFKHNlbGYpLT50cF9mcmVlczsKLSAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2FsbG9jczsKLSNlbmRpZgogfQogCiAKQEAgLTU3MjMsMjIgKzYxMzAsMjIgQEAKICAgICBFVFNMT1QoTkFNRSwgYXNfbnVtYmVyLlNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBET0MpCiAjZGVmaW5lIFVOU0xPVChOQU1FLCBTTE9ULCBGVU5DVElPTiwgV1JBUFBFUiwgRE9DKSBcCiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgV1JBUFBFUiwgXAotICAgICAgICAgICAieC4iIE5BTUUgIigpIDw9PT4gIiBET0MpCisgICAgICAgICAgIE5BTUUgIigkc2VsZiwgLylcbi0tXG5cbiIgRE9DKQogI2RlZmluZSBJQlNMT1QoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoeSkgPD09PiB4IiBET0MgInkiKQorICAgICAgICAgICBOQU1FICIoJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGYiIERPQyAidmFsdWUuIikKICNkZWZpbmUgQklOU0xPVChOQU1FLCBTTE9ULCBGVU5DVElPTiwgRE9DKSBcCiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgd3JhcF9iaW5hcnlmdW5jX2wsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoeSkgPD09PiB4IiBET0MgInkiKQorICAgICAgICAgICBOQU1FICIoJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGYiIERPQyAidmFsdWUuIikKICNkZWZpbmUgUkJJTlNMT1QoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIHdyYXBfYmluYXJ5ZnVuY19yLCBcCi0gICAgICAgICAgICJ4LiIgTkFNRSAiKHkpIDw9PT4geSIgRE9DICJ4IikKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiB2YWx1ZSIgRE9DICJzZWxmLiIpCiAjZGVmaW5lIEJJTlNMT1ROT1RJTkZJWChOQU1FLCBTTE9ULCBGVU5DVElPTiwgRE9DKSBcCiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgd3JhcF9iaW5hcnlmdW5jX2wsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoeSkgPD09PiAiIERPQykKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cbiIgRE9DKQogI2RlZmluZSBSQklOU0xPVE5PVElORklYKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBET0MpIFwKICAgICBFVFNMT1QoTkFNRSwgYXNfbnVtYmVyLlNMT1QsIEZVTkNUSU9OLCB3cmFwX2JpbmFyeWZ1bmNfciwgXAotICAgICAgICAgICAieC4iIE5BTUUgIih5KSA8PT0+ICIgRE9DKQorICAgICAgICAgICBOQU1FICIoJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuIiBET0MpCiAKIHN0YXRpYyBzbG90ZGVmIHNsb3RkZWZzW10gPSB7CiAgICAgVFBTTE9UKCJfX2dldGF0dHJpYnV0ZV9fIiwgdHBfZ2V0YXR0ciwgTlVMTCwgTlVMTCwgIiIpLApAQCAtNTc0Niw4MCArNjE1Myw4NSBAQAogICAgIFRQU0xPVCgiX19zZXRhdHRyX18iLCB0cF9zZXRhdHRyLCBOVUxMLCBOVUxMLCAiIiksCiAgICAgVFBTTE9UKCJfX2RlbGF0dHJfXyIsIHRwX3NldGF0dHIsIE5VTEwsIE5VTEwsICIiKSwKICAgICBUUFNMT1QoIl9fcmVwcl9fIiwgdHBfcmVwciwgc2xvdF90cF9yZXByLCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgInguX19yZXByX18oKSA8PT0+IHJlcHIoeCkiKSwKKyAgICAgICAgICAgIl9fcmVwcl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIHJlcHIoc2VsZikuIiksCiAgICAgVFBTTE9UKCJfX2hhc2hfXyIsIHRwX2hhc2gsIHNsb3RfdHBfaGFzaCwgd3JhcF9oYXNoZnVuYywKLSAgICAgICAgICAgInguX19oYXNoX18oKSA8PT0+IGhhc2goeCkiKSwKKyAgICAgICAgICAgIl9faGFzaF9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIGhhc2goc2VsZikuIiksCiAgICAgRkxTTE9UKCJfX2NhbGxfXyIsIHRwX2NhbGwsIHNsb3RfdHBfY2FsbCwgKHdyYXBwZXJmdW5jKXdyYXBfY2FsbCwKLSAgICAgICAgICAgInguX19jYWxsX18oLi4uKSA8PT0+IHgoLi4uKSIsIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAorICAgICAgICAgICAiX19jYWxsX18oJHNlbGYsIC8sICphcmdzLCAqKmt3YXJncylcbi0tXG5cbkNhbGwgc2VsZiBhcyBhIGZ1bmN0aW9uLiIsCisgICAgICAgICAgIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAogICAgIFRQU0xPVCgiX19zdHJfXyIsIHRwX3N0ciwgc2xvdF90cF9zdHIsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAieC5fX3N0cl9fKCkgPD09PiBzdHIoeCkiKSwKKyAgICAgICAgICAgIl9fc3RyX18oJHNlbGYsIC8pXG4tLVxuXG5SZXR1cm4gc3RyKHNlbGYpLiIpLAogICAgIFRQU0xPVCgiX19nZXRhdHRyaWJ1dGVfXyIsIHRwX2dldGF0dHJvLCBzbG90X3RwX2dldGF0dHJfaG9vaywKLSAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLCAieC5fX2dldGF0dHJpYnV0ZV9fKCduYW1lJykgPD09PiB4Lm5hbWUiKSwKKyAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLAorICAgICAgICAgICAiX19nZXRhdHRyaWJ1dGVfXygkc2VsZiwgbmFtZSwgLylcbi0tXG5cblJldHVybiBnZXRhdHRyKHNlbGYsIG5hbWUpLiIpLAogICAgIFRQU0xPVCgiX19nZXRhdHRyX18iLCB0cF9nZXRhdHRybywgc2xvdF90cF9nZXRhdHRyX2hvb2ssIE5VTEwsICIiKSwKICAgICBUUFNMT1QoIl9fc2V0YXR0cl9fIiwgdHBfc2V0YXR0cm8sIHNsb3RfdHBfc2V0YXR0cm8sIHdyYXBfc2V0YXR0ciwKLSAgICAgICAgICAgInguX19zZXRhdHRyX18oJ25hbWUnLCB2YWx1ZSkgPD09PiB4Lm5hbWUgPSB2YWx1ZSIpLAorICAgICAgICAgICAiX19zZXRhdHRyX18oJHNlbGYsIG5hbWUsIHZhbHVlLCAvKVxuLS1cblxuSW1wbGVtZW50IHNldGF0dHIoc2VsZiwgbmFtZSwgdmFsdWUpLiIpLAogICAgIFRQU0xPVCgiX19kZWxhdHRyX18iLCB0cF9zZXRhdHRybywgc2xvdF90cF9zZXRhdHRybywgd3JhcF9kZWxhdHRyLAotICAgICAgICAgICAieC5fX2RlbGF0dHJfXygnbmFtZScpIDw9PT4gZGVsIHgubmFtZSIpLAorICAgICAgICAgICAiX19kZWxhdHRyX18oJHNlbGYsIG5hbWUsIC8pXG4tLVxuXG5JbXBsZW1lbnQgZGVsYXR0cihzZWxmLCBuYW1lKS4iKSwKICAgICBUUFNMT1QoIl9fbHRfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2x0LAotICAgICAgICAgICAieC5fX2x0X18oeSkgPD09PiB4PHkiKSwKKyAgICAgICAgICAgIl9fbHRfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZjx2YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fbGVfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2xlLAotICAgICAgICAgICAieC5fX2xlX18oeSkgPD09PiB4PD15IiksCisgICAgICAgICAgICJfX2xlX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY8PXZhbHVlLiIpLAogICAgIFRQU0xPVCgiX19lcV9fIiwgdHBfcmljaGNvbXBhcmUsIHNsb3RfdHBfcmljaGNvbXBhcmUsIHJpY2hjbXBfZXEsCi0gICAgICAgICAgICJ4Ll9fZXFfXyh5KSA8PT0+IHg9PXkiKSwKKyAgICAgICAgICAgIl9fZXFfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZj09dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX25lX18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9uZSwKLSAgICAgICAgICAgInguX19uZV9fKHkpIDw9PT4geCE9eSIpLAorICAgICAgICAgICAiX19uZV9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmIT12YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fZ3RfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2d0LAotICAgICAgICAgICAieC5fX2d0X18oeSkgPD09PiB4PnkiKSwKKyAgICAgICAgICAgIl9fZ3RfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZj52YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fZ2VfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2dlLAotICAgICAgICAgICAieC5fX2dlX18oeSkgPD09PiB4Pj15IiksCisgICAgICAgICAgICJfX2dlX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY+PXZhbHVlLiIpLAogICAgIFRQU0xPVCgiX19pdGVyX18iLCB0cF9pdGVyLCBzbG90X3RwX2l0ZXIsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAieC5fX2l0ZXJfXygpIDw9PT4gaXRlcih4KSIpLAorICAgICAgICAgICAiX19pdGVyX18oJHNlbGYsIC8pXG4tLVxuXG5JbXBsZW1lbnQgaXRlcihzZWxmKS4iKSwKICAgICBUUFNMT1QoIl9fbmV4dF9fIiwgdHBfaXRlcm5leHQsIHNsb3RfdHBfaXRlcm5leHQsIHdyYXBfbmV4dCwKLSAgICAgICAgICAgInguX19uZXh0X18oKSA8PT0+IG5leHQoeCkiKSwKKyAgICAgICAgICAgIl9fbmV4dF9fKCRzZWxmLCAvKVxuLS1cblxuSW1wbGVtZW50IG5leHQoc2VsZikuIiksCiAgICAgVFBTTE9UKCJfX2dldF9fIiwgdHBfZGVzY3JfZ2V0LCBzbG90X3RwX2Rlc2NyX2dldCwgd3JhcF9kZXNjcl9nZXQsCi0gICAgICAgICAgICJkZXNjci5fX2dldF9fKG9ialssIHR5cGVdKSAtPiB2YWx1ZSIpLAorICAgICAgICAgICAiX19nZXRfXygkc2VsZiwgaW5zdGFuY2UsIG93bmVyLCAvKVxuLS1cblxuUmV0dXJuIGFuIGF0dHJpYnV0ZSBvZiBpbnN0YW5jZSwgd2hpY2ggaXMgb2YgdHlwZSBvd25lci4iKSwKICAgICBUUFNMT1QoIl9fc2V0X18iLCB0cF9kZXNjcl9zZXQsIHNsb3RfdHBfZGVzY3Jfc2V0LCB3cmFwX2Rlc2NyX3NldCwKLSAgICAgICAgICAgImRlc2NyLl9fc2V0X18ob2JqLCB2YWx1ZSkiKSwKKyAgICAgICAgICAgIl9fc2V0X18oJHNlbGYsIGluc3RhbmNlLCB2YWx1ZSwgLylcbi0tXG5cblNldCBhbiBhdHRyaWJ1dGUgb2YgaW5zdGFuY2UgdG8gdmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2RlbGV0ZV9fIiwgdHBfZGVzY3Jfc2V0LCBzbG90X3RwX2Rlc2NyX3NldCwKLSAgICAgICAgICAgd3JhcF9kZXNjcl9kZWxldGUsICJkZXNjci5fX2RlbGV0ZV9fKG9iaikiKSwKKyAgICAgICAgICAgd3JhcF9kZXNjcl9kZWxldGUsCisgICAgICAgICAgICJfX2RlbGV0ZV9fKCRzZWxmLCBpbnN0YW5jZSwgLylcbi0tXG5cbkRlbGV0ZSBhbiBhdHRyaWJ1dGUgb2YgaW5zdGFuY2UuIiksCiAgICAgRkxTTE9UKCJfX2luaXRfXyIsIHRwX2luaXQsIHNsb3RfdHBfaW5pdCwgKHdyYXBwZXJmdW5jKXdyYXBfaW5pdCwKLSAgICAgICAgICAgInguX19pbml0X18oLi4uKSBpbml0aWFsaXplcyB4OyAiCi0gICAgICAgICAgICJzZWUgaGVscCh0eXBlKHgpKSBmb3Igc2lnbmF0dXJlIiwKKyAgICAgICAgICAgIl9faW5pdF9fKCRzZWxmLCAvLCAqYXJncywgKiprd2FyZ3MpXG4tLVxuXG4iCisgICAgICAgICAgICJJbml0aWFsaXplIHNlbGYuICBTZWUgaGVscCh0eXBlKHNlbGYpKSBmb3IgYWNjdXJhdGUgc2lnbmF0dXJlLiIsCiAgICAgICAgICAgIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAotICAgIFRQU0xPVCgiX19uZXdfXyIsIHRwX25ldywgc2xvdF90cF9uZXcsIE5VTEwsICIiKSwKLSAgICBUUFNMT1QoIl9fZGVsX18iLCB0cF9kZWwsIHNsb3RfdHBfZGVsLCBOVUxMLCAiIiksCisgICAgVFBTTE9UKCJfX25ld19fIiwgdHBfbmV3LCBzbG90X3RwX25ldywgTlVMTCwKKyAgICAgICAgICAgIl9fbmV3X18odHlwZSwgLywgKmFyZ3MsICoqa3dhcmdzKVxuLS1cblxuIgorICAgICAgICAgICAiQ3JlYXRlIGFuZCByZXR1cm4gbmV3IG9iamVjdC4gIFNlZSBoZWxwKHR5cGUpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuIiksCisgICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZmluYWxpemUsIHNsb3RfdHBfZmluYWxpemUsICh3cmFwcGVyZnVuYyl3cmFwX2RlbCwgIiIpLAogCiAgICAgQklOU0xPVCgiX19hZGRfXyIsIG5iX2FkZCwgc2xvdF9uYl9hZGQsCi0gICAgICAgICIrIiksCisgICAgICAgICAgICIrIiksCiAgICAgUkJJTlNMT1QoIl9fcmFkZF9fIiwgbmJfYWRkLCBzbG90X25iX2FkZCwKLSAgICAgICAgICAgICAiKyIpLAorICAgICAgICAgICAiKyIpLAogICAgIEJJTlNMT1QoIl9fc3ViX18iLCBuYl9zdWJ0cmFjdCwgc2xvdF9uYl9zdWJ0cmFjdCwKLSAgICAgICAgIi0iKSwKKyAgICAgICAgICAgIi0iKSwKICAgICBSQklOU0xPVCgiX19yc3ViX18iLCBuYl9zdWJ0cmFjdCwgc2xvdF9uYl9zdWJ0cmFjdCwKLSAgICAgICAgICAgICAiLSIpLAorICAgICAgICAgICAiLSIpLAogICAgIEJJTlNMT1QoIl9fbXVsX18iLCBuYl9tdWx0aXBseSwgc2xvdF9uYl9tdWx0aXBseSwKLSAgICAgICAgIioiKSwKKyAgICAgICAgICAgIioiKSwKICAgICBSQklOU0xPVCgiX19ybXVsX18iLCBuYl9tdWx0aXBseSwgc2xvdF9uYl9tdWx0aXBseSwKLSAgICAgICAgICAgICAiKiIpLAorICAgICAgICAgICAiKiIpLAogICAgIEJJTlNMT1QoIl9fbW9kX18iLCBuYl9yZW1haW5kZXIsIHNsb3RfbmJfcmVtYWluZGVyLAotICAgICAgICAiJSIpLAorICAgICAgICAgICAiJSIpLAogICAgIFJCSU5TTE9UKCJfX3Jtb2RfXyIsIG5iX3JlbWFpbmRlciwgc2xvdF9uYl9yZW1haW5kZXIsCi0gICAgICAgICAgICAgIiUiKSwKKyAgICAgICAgICAgIiUiKSwKICAgICBCSU5TTE9UTk9USU5GSVgoIl9fZGl2bW9kX18iLCBuYl9kaXZtb2QsIHNsb3RfbmJfZGl2bW9kLAotICAgICAgICAiZGl2bW9kKHgsIHkpIiksCisgICAgICAgICAgICJSZXR1cm4gZGl2bW9kKHNlbGYsIHZhbHVlKS4iKSwKICAgICBSQklOU0xPVE5PVElORklYKCJfX3JkaXZtb2RfXyIsIG5iX2Rpdm1vZCwgc2xvdF9uYl9kaXZtb2QsCi0gICAgICAgICAgICAgImRpdm1vZCh5LCB4KSIpLAorICAgICAgICAgICAiUmV0dXJuIGRpdm1vZCh2YWx1ZSwgc2VsZikuIiksCiAgICAgTkJTTE9UKCJfX3Bvd19fIiwgbmJfcG93ZXIsIHNsb3RfbmJfcG93ZXIsIHdyYXBfdGVybmFyeWZ1bmMsCi0gICAgICAgICAgICJ4Ll9fcG93X18oeVssIHpdKSA8PT0+IHBvdyh4LCB5Wywgel0pIiksCisgICAgICAgICAgICJfX3Bvd19fKCRzZWxmLCB2YWx1ZSwgbW9kPU5vbmUsIC8pXG4tLVxuXG5SZXR1cm4gcG93KHNlbGYsIHZhbHVlLCBtb2QpLiIpLAogICAgIE5CU0xPVCgiX19ycG93X18iLCBuYl9wb3dlciwgc2xvdF9uYl9wb3dlciwgd3JhcF90ZXJuYXJ5ZnVuY19yLAotICAgICAgICAgICAieS5fX3Jwb3dfXyh4Wywgel0pIDw9PT4gcG93KHgsIHlbLCB6XSkiKSwKLSAgICBVTlNMT1QoIl9fbmVnX18iLCBuYl9uZWdhdGl2ZSwgc2xvdF9uYl9uZWdhdGl2ZSwgd3JhcF91bmFyeWZ1bmMsICIteCIpLAotICAgIFVOU0xPVCgiX19wb3NfXyIsIG5iX3Bvc2l0aXZlLCBzbG90X25iX3Bvc2l0aXZlLCB3cmFwX3VuYXJ5ZnVuYywgIit4IiksCisgICAgICAgICAgICJfX3Jwb3dfXygkc2VsZiwgdmFsdWUsIG1vZD1Ob25lLCAvKVxuLS1cblxuUmV0dXJuIHBvdyh2YWx1ZSwgc2VsZiwgbW9kKS4iKSwKKyAgICBVTlNMT1QoIl9fbmVnX18iLCBuYl9uZWdhdGl2ZSwgc2xvdF9uYl9uZWdhdGl2ZSwgd3JhcF91bmFyeWZ1bmMsICItc2VsZiIpLAorICAgIFVOU0xPVCgiX19wb3NfXyIsIG5iX3Bvc2l0aXZlLCBzbG90X25iX3Bvc2l0aXZlLCB3cmFwX3VuYXJ5ZnVuYywgIitzZWxmIiksCiAgICAgVU5TTE9UKCJfX2Fic19fIiwgbmJfYWJzb2x1dGUsIHNsb3RfbmJfYWJzb2x1dGUsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAiYWJzKHgpIiksCisgICAgICAgICAgICJhYnMoc2VsZikiKSwKICAgICBVTlNMT1QoIl9fYm9vbF9fIiwgbmJfYm9vbCwgc2xvdF9uYl9ib29sLCB3cmFwX2lucXVpcnlwcmVkLAotICAgICAgICAgICAieCAhPSAwIiksCi0gICAgVU5TTE9UKCJfX2ludmVydF9fIiwgbmJfaW52ZXJ0LCBzbG90X25iX2ludmVydCwgd3JhcF91bmFyeWZ1bmMsICJ+eCIpLAorICAgICAgICAgICAic2VsZiAhPSAwIiksCisgICAgVU5TTE9UKCJfX2ludmVydF9fIiwgbmJfaW52ZXJ0LCBzbG90X25iX2ludmVydCwgd3JhcF91bmFyeWZ1bmMsICJ+c2VsZiIpLAogICAgIEJJTlNMT1QoIl9fbHNoaWZ0X18iLCBuYl9sc2hpZnQsIHNsb3RfbmJfbHNoaWZ0LCAiPDwiKSwKICAgICBSQklOU0xPVCgiX19ybHNoaWZ0X18iLCBuYl9sc2hpZnQsIHNsb3RfbmJfbHNoaWZ0LCAiPDwiKSwKICAgICBCSU5TTE9UKCJfX3JzaGlmdF9fIiwgbmJfcnNoaWZ0LCBzbG90X25iX3JzaGlmdCwgIj4+IiksCkBAIC01ODMxLDkgKzYyNDMsOSBAQAogICAgIEJJTlNMT1QoIl9fb3JfXyIsIG5iX29yLCBzbG90X25iX29yLCAifCIpLAogICAgIFJCSU5TTE9UKCJfX3Jvcl9fIiwgbmJfb3IsIHNsb3RfbmJfb3IsICJ8IiksCiAgICAgVU5TTE9UKCJfX2ludF9fIiwgbmJfaW50LCBzbG90X25iX2ludCwgd3JhcF91bmFyeWZ1bmMsCi0gICAgICAgICAgICJpbnQoeCkiKSwKKyAgICAgICAgICAgImludChzZWxmKSIpLAogICAgIFVOU0xPVCgiX19mbG9hdF9fIiwgbmJfZmxvYXQsIHNsb3RfbmJfZmxvYXQsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAiZmxvYXQoeCkiKSwKKyAgICAgICAgICAgImZsb2F0KHNlbGYpIiksCiAgICAgSUJTTE9UKCJfX2lhZGRfXyIsIG5iX2lucGxhY2VfYWRkLCBzbG90X25iX2lucGxhY2VfYWRkLAogICAgICAgICAgICB3cmFwX2JpbmFyeWZ1bmMsICIrPSIpLAogICAgIElCU0xPVCgiX19pc3ViX18iLCBuYl9pbnBsYWNlX3N1YnRyYWN0LCBzbG90X25iX2lucGxhY2Vfc3VidHJhY3QsCkBAIC01ODYzLDQ1ICs2Mjc1LDQ4IEBACiAgICAgSUJTTE9UKCJfX2l0cnVlZGl2X18iLCBuYl9pbnBsYWNlX3RydWVfZGl2aWRlLAogICAgICAgICAgICBzbG90X25iX2lucGxhY2VfdHJ1ZV9kaXZpZGUsIHdyYXBfYmluYXJ5ZnVuYywgIi8iKSwKICAgICBOQlNMT1QoIl9faW5kZXhfXyIsIG5iX2luZGV4LCBzbG90X25iX2luZGV4LCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgInhbeTp6XSA8PT0+IHhbeS5fX2luZGV4X18oKTp6Ll9faW5kZXhfXygpXSIpLAotCisgICAgICAgICAgICJfX2luZGV4X18oJHNlbGYsIC8pXG4tLVxuXG4iCisgICAgICAgICAgICJSZXR1cm4gc2VsZiBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciwgaWYgc2VsZiBpcyBzdWl0YWJsZSAiCisgICAgICAgICAgICJmb3IgdXNlIGFzIGFuIGluZGV4IGludG8gYSBsaXN0LiIpLAogICAgIE1QU0xPVCgiX19sZW5fXyIsIG1wX2xlbmd0aCwgc2xvdF9tcF9sZW5ndGgsIHdyYXBfbGVuZnVuYywKLSAgICAgICAgICAgInguX19sZW5fXygpIDw9PT4gbGVuKHgpIiksCisgICAgICAgICAgICJfX2xlbl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIGxlbihzZWxmKS4iKSwKICAgICBNUFNMT1QoIl9fZ2V0aXRlbV9fIiwgbXBfc3Vic2NyaXB0LCBzbG90X21wX3N1YnNjcmlwdCwKICAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLAotICAgICAgICAgICAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKSwKKyAgICAgICAgICAgIl9fZ2V0aXRlbV9fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5SZXR1cm4gc2VsZltrZXldLiIpLAogICAgIE1QU0xPVCgiX19zZXRpdGVtX18iLCBtcF9hc3Nfc3Vic2NyaXB0LCBzbG90X21wX2Fzc19zdWJzY3JpcHQsCiAgICAgICAgICAgIHdyYXBfb2Jqb2JqYXJncHJvYywKLSAgICAgICAgICAgInguX19zZXRpdGVtX18oaSwgeSkgPD09PiB4W2ldPXkiKSwKKyAgICAgICAgICAgIl9fc2V0aXRlbV9fKCRzZWxmLCBrZXksIHZhbHVlLCAvKVxuLS1cblxuU2V0IHNlbGZba2V5XSB0byB2YWx1ZS4iKSwKICAgICBNUFNMT1QoIl9fZGVsaXRlbV9fIiwgbXBfYXNzX3N1YnNjcmlwdCwgc2xvdF9tcF9hc3Nfc3Vic2NyaXB0LAogICAgICAgICAgICB3cmFwX2RlbGl0ZW0sCi0gICAgICAgICAgICJ4Ll9fZGVsaXRlbV9fKHkpIDw9PT4gZGVsIHhbeV0iKSwKKyAgICAgICAgICAgIl9fZGVsaXRlbV9fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5EZWxldGUgc2VsZltrZXldLiIpLAogCiAgICAgU1FTTE9UKCJfX2xlbl9fIiwgc3FfbGVuZ3RoLCBzbG90X3NxX2xlbmd0aCwgd3JhcF9sZW5mdW5jLAotICAgICAgICAgICAieC5fX2xlbl9fKCkgPD09PiBsZW4oeCkiKSwKKyAgICAgICAgICAgIl9fbGVuX18oJHNlbGYsIC8pXG4tLVxuXG5SZXR1cm4gbGVuKHNlbGYpLiIpLAogICAgIC8qIEhlYXAgdHlwZXMgZGVmaW5pbmcgX19hZGRfXy9fX211bF9fIGhhdmUgc3FfY29uY2F0L3NxX3JlcGVhdCA9PSBOVUxMLgogICAgICAgIFRoZSBsb2dpYyBpbiBhYnN0cmFjdC5jIGFsd2F5cyBmYWxscyBiYWNrIHRvIG5iX2FkZC9uYl9tdWx0aXBseSBpbgogICAgICAgIHRoaXMgY2FzZS4gIERlZmluaW5nIGJvdGggdGhlIG5iXyogYW5kIHRoZSBzcV8qIHNsb3RzIHRvIGNhbGwgdGhlCiAgICAgICAgdXNlci1kZWZpbmVkIG1ldGhvZHMgaGFzIHVuZXhwZWN0ZWQgc2lkZS1lZmZlY3RzLCBhcyBzaG93biBieQogICAgICAgIHRlc3RfZGVzY3Iubm90aW1wbGVtZW50ZWQoKSAqLwogICAgIFNRU0xPVCgiX19hZGRfXyIsIHNxX2NvbmNhdCwgTlVMTCwgd3JhcF9iaW5hcnlmdW5jLAotICAgICAgInguX19hZGRfXyh5KSA8PT0+IHgreSIpLAorICAgICAgICAgICAiX19hZGRfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZit2YWx1ZS4iKSwKICAgICBTUVNMT1QoIl9fbXVsX18iLCBzcV9yZXBlYXQsIE5VTEwsIHdyYXBfaW5kZXhhcmdmdW5jLAotICAgICAgInguX19tdWxfXyhuKSA8PT0+IHgqbiIpLAorICAgICAgICAgICAiX19tdWxfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZip2YWx1ZS5uIiksCiAgICAgU1FTTE9UKCJfX3JtdWxfXyIsIHNxX3JlcGVhdCwgTlVMTCwgd3JhcF9pbmRleGFyZ2Z1bmMsCi0gICAgICAieC5fX3JtdWxfXyhuKSA8PT0+IG4qeCIpLAorICAgICAgICAgICAiX19ybXVsX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGYqdmFsdWUuIiksCiAgICAgU1FTTE9UKCJfX2dldGl0ZW1fXyIsIHNxX2l0ZW0sIHNsb3Rfc3FfaXRlbSwgd3JhcF9zcV9pdGVtLAotICAgICAgICAgICAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKSwKKyAgICAgICAgICAgIl9fZ2V0aXRlbV9fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5SZXR1cm4gc2VsZltrZXldLiIpLAogICAgIFNRU0xPVCgiX19zZXRpdGVtX18iLCBzcV9hc3NfaXRlbSwgc2xvdF9zcV9hc3NfaXRlbSwgd3JhcF9zcV9zZXRpdGVtLAotICAgICAgICAgICAieC5fX3NldGl0ZW1fXyhpLCB5KSA8PT0+IHhbaV09eSIpLAorICAgICAgICAgICAiX19zZXRpdGVtX18oJHNlbGYsIGtleSwgdmFsdWUsIC8pXG4tLVxuXG5TZXQgc2VsZltrZXldIHRvIHZhbHVlLiIpLAogICAgIFNRU0xPVCgiX19kZWxpdGVtX18iLCBzcV9hc3NfaXRlbSwgc2xvdF9zcV9hc3NfaXRlbSwgd3JhcF9zcV9kZWxpdGVtLAotICAgICAgICAgICAieC5fX2RlbGl0ZW1fXyh5KSA8PT0+IGRlbCB4W3ldIiksCisgICAgICAgICAgICJfX2RlbGl0ZW1fXygkc2VsZiwga2V5LCAvKVxuLS1cblxuRGVsZXRlIHNlbGZba2V5XS4iKSwKICAgICBTUVNMT1QoIl9fY29udGFpbnNfXyIsIHNxX2NvbnRhaW5zLCBzbG90X3NxX2NvbnRhaW5zLCB3cmFwX29iam9ianByb2MsCi0gICAgICAgICAgICJ4Ll9fY29udGFpbnNfXyh5KSA8PT0+IHkgaW4geCIpLAorICAgICAgICAgICAiX19jb250YWluc19fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5SZXR1cm4ga2V5IGluIHNlbGYuIiksCiAgICAgU1FTTE9UKCJfX2lhZGRfXyIsIHNxX2lucGxhY2VfY29uY2F0LCBOVUxMLAotICAgICAgd3JhcF9iaW5hcnlmdW5jLCAieC5fX2lhZGRfXyh5KSA8PT0+IHgrPXkiKSwKKyAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLAorICAgICAgICAgICAiX19pYWRkX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuSW1wbGVtZW50IHNlbGYrPXZhbHVlLiIpLAogICAgIFNRU0xPVCgiX19pbXVsX18iLCBzcV9pbnBsYWNlX3JlcGVhdCwgTlVMTCwKLSAgICAgIHdyYXBfaW5kZXhhcmdmdW5jLCAieC5fX2ltdWxfXyh5KSA8PT0+IHgqPXkiKSwKKyAgICAgICAgICAgd3JhcF9pbmRleGFyZ2Z1bmMsCisgICAgICAgICAgICJfX2ltdWxfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5JbXBsZW1lbnQgc2VsZio9dmFsdWUuIiksCiAKICAgICB7TlVMTH0KIH07CkBAIC02MTg0LDE1ICs2NTk5LDE0IEBACiB7CiAgICAgUHlUeXBlT2JqZWN0ICpzdWJjbGFzczsKICAgICBQeU9iamVjdCAqcmVmLCAqc3ViY2xhc3NlcywgKmRpY3Q7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIHN1YmNsYXNzZXMgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChzdWJjbGFzc2VzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGFzc2VydChQeUxpc3RfQ2hlY2soc3ViY2xhc3NlcykpOwotICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUoc3ViY2xhc3Nlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0oc3ViY2xhc3NlcywgaSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHN1YmNsYXNzZXMpKTsKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoUHlEaWN0X05leHQoc3ViY2xhc3NlcywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGFzc2VydChzdWJjbGFzcyAhPSBOVUxMKTsKQEAgLTYzMzgsOCArNjc1Miw4IEBACiAgICAgICAgIC8qIFdlIHdhbnQgX19jbGFzc19fIHRvIHJldHVybiB0aGUgY2xhc3Mgb2YgdGhlIHN1cGVyIG9iamVjdAogICAgICAgICAgICAoaS5lLiBzdXBlciwgb3IgYSBzdWJjbGFzcyksIG5vdCB0aGUgY2xhc3Mgb2Ygc3UtPm9iai4gKi8KICAgICAgICAgc2tpcCA9IChQeVVuaWNvZGVfQ2hlY2sobmFtZSkgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID09IDkgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2NsYXNzX18iKSA9PSAwKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSA9PSA5ICYmCisgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG5hbWUsICZQeUlkX19fY2xhc3NfXykgPT0gMCk7CiAgICAgfQogCiAgICAgaWYgKCFza2lwKSB7CkBAIC02NTA1LDkgKzY5MTksMTYgQEAKICAgICBpZiAodHlwZSA9PSBOVUxMKSB7CiAgICAgICAgIC8qIENhbGwgc3VwZXIoKSwgd2l0aG91dCBhcmdzIC0tIGZpbGwgaW4gZnJvbSBfX2NsYXNzX18KICAgICAgICAgICAgYW5kIGZpcnN0IGxvY2FsIHZhcmlhYmxlIG9uIHRoZSBzdGFjay4gKi8KLSAgICAgICAgUHlGcmFtZU9iamVjdCAqZiA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmZyYW1lOwotICAgICAgICBQeUNvZGVPYmplY3QgKmNvID0gZi0+Zl9jb2RlOworICAgICAgICBQeUZyYW1lT2JqZWN0ICpmOworICAgICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgICAgICBQeV9zc2l6ZV90IGksIG47CisgICAgICAgIGYgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5mcmFtZTsKKyAgICAgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwZXIoKTogbm8gY3VycmVudCBmcmFtZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGNvID0gZi0+Zl9jb2RlOwogICAgICAgICBpZiAoY28gPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwZXIoKTogbm8gY29kZSBvYmplY3QiKTsKQEAgLTY1NDUsOCArNjk2Niw3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShjby0+Y29fZnJlZXZhcnMsIGkpOwogICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhuYW1lKSk7Ci0gICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18iKSkgeworICAgICAgICAgICAgaWYgKCFfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobmFtZSwgJlB5SWRfX19jbGFzc19fKSkgewogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXggPSBjby0+Y29fbmxvY2FscyArCiAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKSArIGk7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmLT5mX2xvY2Fsc3BsdXNbaW5kZXhdOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYyBiL09iamVjdHMvdW5pY29kZWN0eXBlLmMKaW5kZXggYTU3MmMxMi4uZWE1NDBkNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYworKysgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCkBAIC02MSw3ICs2MSw3IEBACiAvKiBSZXR1cm5zIHRoZSB0aXRsZWNhc2UgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gY2ggb3IganVzdAogICAgY2ggaWYgbm8gdGl0bGVjYXNlIG1hcHBpbmcgaXMga25vd24uICovCiAKLVB5X1VDUzQgX1B5VW5pY29kZV9Ub1RpdGxlY2FzZShyZWdpc3RlciBQeV9VQ1M0IGNoKQorUHlfVUNTNCBfUHlVbmljb2RlX1RvVGl0bGVjYXNlKFB5X1VDUzQgY2gpCiB7CiAgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCmluZGV4IDQwODVkMjIuLmQ5YzEzMWMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCkBAIC00NywxMyArNDcsMTAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotLyogRW5kaWFubmVzcyBzd2l0Y2hlczsgZGVmYXVsdHMgdG8gbGl0dGxlIGVuZGlhbiAqLwotCi0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0jIGRlZmluZSBCWVRFT1JERVJfSVNfQklHX0VORElBTgotI2Vsc2UKLSMgZGVmaW5lIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0jZW5kaWYKKy8qW2NsaW5pYyBpbnB1dF0KK2NsYXNzIHN0ciAiUHlVbmljb2RlT2JqZWN0ICoiICImUHlVbmljb2RlX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD02MDRlOTE2ODU0ODAwZmE4XSovCiAKIC8qIC0tLSBHbG9iYWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMzAsMTYgKzEyNywxNCBAQAogLyogdHJ1ZSBpZiB0aGUgVW5pY29kZSBvYmplY3QgaGFzIGFuIGFsbG9jYXRlZCBVVEYtOCBtZW1vcnkgYmxvY2sKICAgIChub3Qgc2hhcmVkIHdpdGggb3RoZXIgZGF0YSkgKi8KICNkZWZpbmUgX1B5VW5pY29kZV9IQVNfVVRGOF9NRU1PUlkob3ApICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvcCkpLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICghUHlVbmljb2RlX0lTX0NPTVBBQ1RfQVNDSUkob3ApICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKCFQeVVuaWNvZGVfSVNfQ09NUEFDVF9BU0NJSShvcCkgICAgICAgICAgICAgICAgICAgXAogICAgICAgJiYgX1B5VW5pY29kZV9VVEY4KG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAmJiBfUHlVbmljb2RlX1VURjgob3ApICE9IFB5VW5pY29kZV9EQVRBKG9wKSkpCiAKIC8qIHRydWUgaWYgdGhlIFVuaWNvZGUgb2JqZWN0IGhhcyBhbiBhbGxvY2F0ZWQgd3N0ciBtZW1vcnkgYmxvY2sKICAgIChub3Qgc2hhcmVkIHdpdGggb3RoZXIgZGF0YSkgKi8KICNkZWZpbmUgX1B5VW5pY29kZV9IQVNfV1NUUl9NRU1PUlkob3ApICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvcCkpLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIChfUHlVbmljb2RlX1dTVFIob3ApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9QeVVuaWNvZGVfV1NUUihvcCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgKCFQeVVuaWNvZGVfSVNfUkVBRFkob3ApIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgX1B5VW5pY29kZV9XU1RSKG9wKSAhPSBQeVVuaWNvZGVfREFUQShvcCkpKSkKIApAQCAtMTUwLDkgKzE0NSw5IEBACiAgICBidWZmZXIgd2hlcmUgdGhlIHJlc3VsdCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRvLiAqLwogI2RlZmluZSBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoZnJvbV90eXBlLCB0b190eXBlLCBiZWdpbiwgZW5kLCB0bykgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRvX3R5cGUgKl90byA9ICh0b190eXBlICopIHRvOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgZnJvbV90eXBlICpfaXRlciA9IChiZWdpbik7ICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9lbmQgPSAoZW5kKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRvX3R5cGUgKl90byA9ICh0b190eXBlICopKHRvKTsgICAgICAgICAgICAgICAgXAorICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9pdGVyID0gKGZyb21fdHlwZSAqKShiZWdpbik7ICBcCisgICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX2VuZCA9IChmcm9tX3R5cGUgKikoZW5kKTsgICAgIFwKICAgICAgICAgUHlfc3NpemVfdCBuID0gKF9lbmQpIC0gKF9pdGVyKTsgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl91bnJvbGxlZF9lbmQgPSAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBfaXRlciArIF9QeV9TSVpFX1JPVU5EX0RPV04obiwgNCk7ICAgICAgICAgIFwKQEAgLTE5OSw2ICsxOTQsMTAgQEAKICAgICAgICAgcmV0dXJuIHVuaWNvZGVfZW1wdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpOworCiAvKiBMaXN0IG9mIHN0YXRpYyBzdHJpbmdzLiAqLwogc3RhdGljIF9QeV9JZGVudGlmaWVyICpzdGF0aWNfc3RyaW5ncyA9IE5VTEw7CiAKQEAgLTQyNyw4ICs0MjYsNiBAQAogI2lmbmRlZiBQeV9ERUJVRwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgYXNzZXJ0KFB5X1JFRkNOVCh1bmljb2RlKSA9PSAxKTsKLQogICAgIGxlbiA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSk7CiAgICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKQEAgLTQ0NSwxMCArNDQyLDEyIEBACiAgICAgfQogCiAgICAgaWYgKF9QeVVuaWNvZGVfUmVhZHkodW5pY29kZSkgPCAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYodW5pY29kZSk7CisgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2Vsc2UKKyAgICBhc3NlcnQoUHlfUkVGQ05UKHVuaWNvZGUpID09IDEpOworCiAgICAgLyogZG9uJ3QgbWFrZSB0aGUgcmVzdWx0IHJlYWR5IGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoYXQgdGhlIGNhbGxlcgogICAgICAgIG1ha2VzIHRoZSBzdHJpbmcgcmVhZHkgYmVmb3JlIHVzaW5nIGl0ICovCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7CkBAIC00NzEsNyArNDcwLDkgQEAKICAgICB9CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgMCk7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIDApOwogICAgICAgICBpZiAoY2ggPCAyNTYpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpsYXRpbjFfY2hhciA9IHVuaWNvZGVfbGF0aW4xW2NoXTsKICAgICAgICAgICAgIGlmIChsYXRpbjFfY2hhciAhPSBOVUxMKSB7CkBAIC01NDQsNyArNTQ1LDYgQEAKIAogc3RhdGljIEJMT09NX01BU0sgYmxvb21fbGluZWJyZWFrID0gfihCTE9PTV9NQVNLKTA7CiAKLSNkZWZpbmUgQkxPT01fQUREKG1hc2ssIGNoKSAoKG1hc2sgfD0gKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogI2RlZmluZSBCTE9PTShtYXNrLCBjaCkgICAgICgobWFzayAmICAoMVVMIDw8ICgoY2gpICYgKEJMT09NX1dJRFRIIC0gMSkpKSkpCiAKICNkZWZpbmUgQkxPT01fTElORUJSRUFLKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1NCwyMSArNTU0LDQwIEBACiBQeV9MT0NBTF9JTkxJTkUoQkxPT01fTUFTSykKIG1ha2VfYmxvb21fbWFzayhpbnQga2luZCwgdm9pZCogcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKKyNkZWZpbmUgQkxPT01fVVBEQVRFKFRZUEUsIE1BU0ssIFBUUiwgTEVOKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUWVBFICpkYXRhID0gKFRZUEUgKilQVFI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVFlQRSAqZW5kID0gZGF0YSArIExFTjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgY2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmb3IgKDsgZGF0YSAhPSBlbmQ7IGRhdGErKykgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNoID0gKmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNQVNLIHw9ICgxVUwgPDwgKGNoICYgKEJMT09NX1dJRFRIIC0gMSkpKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogICAgIC8qIGNhbGN1bGF0ZSBzaW1wbGUgYmxvb20tc3R5bGUgYml0bWFzayBmb3IgYSBnaXZlbiB1bmljb2RlIHN0cmluZyAqLwogCiAgICAgQkxPT01fTUFTSyBtYXNrOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIG1hc2sgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgQkxPT01fQUREKG1hc2ssIFB5VW5pY29kZV9SRUFEKGtpbmQsIHB0ciwgaSkpOwotCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzEsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzIsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzQsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KICAgICByZXR1cm4gbWFzazsKLX0KIAotI2RlZmluZSBCTE9PTV9NRU1CRVIobWFzaywgY2hyLCBzdHIpIFwKLSAgICAoQkxPT00obWFzaywgY2hyKSBcCi0gICAgICYmIChQeVVuaWNvZGVfRmluZENoYXIoc3RyLCBjaHIsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksIDEpID49IDApKQorI3VuZGVmIEJMT09NX1VQREFURQorfQogCiAvKiBDb21waWxhdGlvbiBvZiB0ZW1wbGF0ZWQgcm91dGluZXMgKi8KIApAQCAtNTg4LDYgKzYwNyw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvcmVwbGFjZS5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kX21heF9jaGFyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5kZWYuaCIKQEAgLTU5OCw2ICs2MTgsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3JlcGxhY2UuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9sb2NhbGV1dGlsLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuZGVmLmgiCkBAIC02MDgsNiArNjI5LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9yZXBsYWNlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi91bmRlZi5oIgpAQCAtNjU0LDYgKzY3NiwyNSBAQAogICAgIH0KIH0KIAorI2lmZGVmIFB5X0RFQlVHCisvKiBGaWxsIHRoZSBkYXRhIG9mIGFuIFVuaWNvZGUgc3RyaW5nIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzCisgICBlYXJsaWVyLgorCisgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywgYXQgbGVhc3QgZm9yCisgICBBU0NJSSBhbmQgVUNTLTQgc3RyaW5ncy4gVSswMEZGIGlzIGludmFsaWQgaW4gQVNDSUkgYW5kIFUrRkZGRkZGRkYgaXMgYW4KKyAgIGludmFsaWQgY2hhcmFjdGVyIGluIFVuaWNvZGUgNi4wLiAqLworc3RhdGljIHZvaWQKK3VuaWNvZGVfZmlsbF9pbnZhbGlkKFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90IG9sZF9sZW5ndGgpCit7CisgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICBQeV9VQ1MxICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSk7CisgICAgUHlfc3NpemVfdCBsZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyAgICBpZiAobGVuZ3RoIDw9IG9sZF9sZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1zZXQoZGF0YSArIG9sZF9sZW5ndGggKiBraW5kLCAweGZmLCAobGVuZ3RoIC0gb2xkX2xlbmd0aCkgKiBraW5kKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiByZXNpemVfY29tcGFjdChQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBsZW5ndGgpCiB7CkBAIC02NjIsNiArNzAzLDEwIEBACiAgICAgUHlfc3NpemVfdCBuZXdfc2l6ZTsKICAgICBpbnQgc2hhcmVfd3N0cjsKICAgICBQeU9iamVjdCAqbmV3X3VuaWNvZGU7CisjaWZkZWYgUHlfREVCVUcKKyAgICBQeV9zc2l6ZV90IG9sZF9sZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyNlbmRpZgorCiAgICAgYXNzZXJ0KHVuaWNvZGVfbW9kaWZpYWJsZSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19SRUFEWSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19DT01QQUNUKHVuaWNvZGUpKTsKQEAgLTcwMSw2ICs3NDYsOSBAQAogICAgICAgICBQeU9iamVjdF9ERUwoX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpKTsKICAgICAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpID0gTlVMTDsKICAgICB9CisjaWZkZWYgUHlfREVCVUcKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgMCk7CiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CkBAIC03MTksNiArNzY3LDkgQEAKICAgICAgICAgUHlfc3NpemVfdCBjaGFyX3NpemU7CiAgICAgICAgIGludCBzaGFyZV93c3RyLCBzaGFyZV91dGY4OwogICAgICAgICB2b2lkICpkYXRhOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCA9IF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpOworI2VuZGlmCiAKICAgICAgICAgZGF0YSA9IF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSk7CiAgICAgICAgIGNoYXJfc2l6ZSA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwpAQCAtNzU0LDYgKzgwNSw5IEBACiAgICAgICAgIH0KICAgICAgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7CiAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgZGF0YSwgbGVuZ3RoLCAwKTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgICAgICBpZiAoc2hhcmVfd3N0ciB8fCBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPT0gTlVMTCkgewogICAgICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTgwNiw4ICs4NjAsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGNvcHlfbGVuZ3RoID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKTsKICAgICAgICAgY29weV9sZW5ndGggPSBQeV9NSU4oY29weV9sZW5ndGgsIGxlbmd0aCk7Ci0gICAgICAgIFB5X1VOSUNPREVfQ09QWShfUHlVbmljb2RlX1dTVFIodyksIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfbGVuZ3RoKTsKKyAgICAgICAgUHlfTUVNQ1BZKF9QeVVuaWNvZGVfV1NUUih3KSwgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgY29weV9sZW5ndGggKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICByZXR1cm4gdzsKICAgICB9CiB9CkBAIC04MjQsNyArODc4LDcgQEAKIHN0YXRpYyBQeVVuaWNvZGVPYmplY3QgKgogX1B5VW5pY29kZV9OZXcoUHlfc3NpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlOworICAgIFB5VW5pY29kZU9iamVjdCAqdW5pY29kZTsKICAgICBzaXplX3QgbmV3X3NpemU7CiAKICAgICAvKiBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MgKi8KQEAgLTg0Nyw2ICs5MDEsMTkgQEAKICAgICBpZiAodW5pY29kZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuZXdfc2l6ZSA9IHNpemVvZihQeV9VTklDT0RFKSAqICgoc2l6ZV90KWxlbmd0aCArIDEpOworCisgICAgX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKKyAgICBfUHlVbmljb2RlX0hBU0godW5pY29kZSkgPSAtMTsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmludGVybmVkID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmtpbmQgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuY29tcGFjdCA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5yZWFkeSA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5hc2NpaSA9IDA7CisgICAgX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSAwOworICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9VVEY4X0xFTkdUSCh1bmljb2RlKSA9IDA7CisKICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPSAoUHlfVU5JQ09ERSopIFB5T2JqZWN0X01BTExPQyhuZXdfc2l6ZSk7CiAgICAgaWYgKCFfUHlVbmljb2RlX1dTVFIodW5pY29kZSkpIHsKICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwpAQCAtODYzLDE3ICs5MzAsNyBAQAogICAgICAqLwogICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKVswXSA9IDA7CiAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpW2xlbmd0aF0gPSAwOwotICAgIF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7Ci0gICAgX1B5VW5pY29kZV9IQVNIKHVuaWNvZGUpID0gLTE7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5pbnRlcm5lZCA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5raW5kID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmNvbXBhY3QgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkucmVhZHkgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuYXNjaWkgPSAwOwotICAgIF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID0gMDsKLSAgICBfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfVVRGOF9MRU5HVEgodW5pY29kZSkgPSAwOworCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QgKil1bmljb2RlLCAwKSk7CiAgICAgcmV0dXJuIHVuaWNvZGU7CiB9CkBAIC05NTQsMTcgKzEwMTEsMTkgQEAKICAgICB9CiAgICAgZWxzZQogICAgICAgICBkYXRhID0gdW5pY29kZS0+ZGF0YS5hbnk7Ci0gICAgcHJpbnRmKCIlczogbGVuPSV6dSwgIix1bmljb2RlX2tpbmRfbmFtZShvcCksIGFzY2lpLT5sZW5ndGgpOworICAgIHByaW50ZigiJXM6IGxlbj0lIiBQWV9GT1JNQVRfU0laRV9UICJ1LCAiLAorICAgICAgICAgICB1bmljb2RlX2tpbmRfbmFtZShvcCksIGFzY2lpLT5sZW5ndGgpOwogCiAgICAgaWYgKGFzY2lpLT53c3RyID09IGRhdGEpCiAgICAgICAgIHByaW50Zigic2hhcmVkICIpOwogICAgIHByaW50Zigid3N0cj0lcCIsIGFzY2lpLT53c3RyKTsKIAogICAgIGlmICghKGFzY2lpLT5zdGF0ZS5hc2NpaSA9PSAxICYmIGFzY2lpLT5zdGF0ZS5jb21wYWN0ID09IDEpKSB7Ci0gICAgICAgIHByaW50ZigiICglenUpLCAiLCBjb21wYWN0LT53c3RyX2xlbmd0aCk7CisgICAgICAgIHByaW50ZigiICglIiBQWV9GT1JNQVRfU0laRV9UICJ1KSwgIiwgY29tcGFjdC0+d3N0cl9sZW5ndGgpOwogICAgICAgICBpZiAoIWFzY2lpLT5zdGF0ZS5jb21wYWN0ICYmIGNvbXBhY3QtPnV0ZjggPT0gdW5pY29kZS0+ZGF0YS5hbnkpCiAgICAgICAgICAgICBwcmludGYoInNoYXJlZCAiKTsKLSAgICAgICAgcHJpbnRmKCJ1dGY4PSVwICglenUpIiwgY29tcGFjdC0+dXRmOCwgY29tcGFjdC0+dXRmOF9sZW5ndGgpOworICAgICAgICBwcmludGYoInV0Zjg9JXAgKCUiIFBZX0ZPUk1BVF9TSVpFX1QgInUpIiwKKyAgICAgICAgICAgICAgIGNvbXBhY3QtPnV0ZjgsIGNvbXBhY3QtPnV0ZjhfbGVuZ3RoKTsKICAgICB9CiAgICAgcHJpbnRmKCIsIGRhdGE9JXBcbiIsIGRhdGEpOwogfQpAQCAtMTA3OCwxMSArMTEzNyw3IEBACiAgICAgICAgIH0KICAgICB9CiAjaWZkZWYgUHlfREVCVUcKLSAgICAvKiBGaWxsIHRoZSBkYXRhIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzIGVhcmxpZXIuCi0gICAgICAgX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkgZGV0ZWN0cyBpbnZhbGlkIGNoYXJhY3RlcnMsCi0gICAgICAgYXQgbGVhc3QgZm9yIEFTQ0lJIGFuZCBVQ1MtNCBzdHJpbmdzLiBVKzAwRkYgaXMgaW52YWxpZCBpbiBBU0NJSQotICAgICAgIGFuZCBVK0ZGRkZGRkZGIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIGluIFVuaWNvZGUgNi4wLiAqLwotICAgIG1lbXNldChkYXRhLCAweGZmLCBzaXplICoga2luZCk7CisgICAgdW5pY29kZV9maWxsX2ludmFsaWQoKFB5T2JqZWN0Kil1bmljb2RlLCAwKTsKICNlbmRpZgogICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koKFB5T2JqZWN0Kil1bmljb2RlLCAwKSk7CiAgICAgcmV0dXJuIG9iajsKQEAgLTE1MTIsNyArMTU2Nyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi11bmljb2RlX2RlYWxsb2MocmVnaXN0ZXIgUHlPYmplY3QgKnVuaWNvZGUpCit1bmljb2RlX2RlYWxsb2MoUHlPYmplY3QgKnVuaWNvZGUpCiB7CiAgICAgc3dpdGNoIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodW5pY29kZSkpIHsKICAgICBjYXNlIFNTVEFURV9OT1RfSU5URVJORUQ6CkBAIC0xNjQ0LDM4ICsxNjk5LDYgQEAKICAgICByZXR1cm4gdW5pY29kZV9yZXNpemUocF91bmljb2RlLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW50Ci11bmljb2RlX3dpZGVuKFB5T2JqZWN0ICoqcF91bmljb2RlLCBQeV9zc2l6ZV90IGxlbmd0aCwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heGNoYXIpCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBhc3NlcnQoUHlVbmljb2RlX0lTX1JFQURZKCpwX3VuaWNvZGUpKTsKLSAgICBhc3NlcnQobGVuZ3RoIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpwX3VuaWNvZGUpKTsKLSAgICBpZiAobWF4Y2hhciA8PSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoKnBfdW5pY29kZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJlc3VsdCA9IFB5VW5pY29kZV9OZXcoUHlVbmljb2RlX0dFVF9MRU5HVEgoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjaGFyKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXN1bHQsIDAsICpwX3VuaWNvZGUsIDAsIGxlbmd0aCk7Ci0gICAgUHlfREVDUkVGKCpwX3VuaWNvZGUpOwotICAgICpwX3VuaWNvZGUgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXVuaWNvZGVfcHV0Y2hhcihQeU9iamVjdCAqKnBfdW5pY29kZSwgUHlfc3NpemVfdCAqcG9zLAotICAgICAgICAgICAgICAgIFB5X1VDUzQgY2gpCi17Ci0gICAgYXNzZXJ0KGNoIDw9IE1BWF9VTklDT0RFKTsKLSAgICBpZiAodW5pY29kZV93aWRlbihwX3VuaWNvZGUsICpwb3MsIGNoKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EQVRBKCpwX3VuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAoKnBvcykrKywgY2gpOwotICAgIHJldHVybiAwOwotfQotCiAvKiBDb3B5IGEgQVNDSUkgb3IgbGF0aW4xIGNoYXIqIHN0cmluZyBpbnRvIGEgUHl0aG9uIFVuaWNvZGUgc3RyaW5nLgogCiAgICBXQVJOSU5HOiBUaGUgZnVuY3Rpb24gZG9lc24ndCBjb3B5IHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlciBhbmQKQEAgLTE2OTIsNiArMTcxNSwxNCBAQAogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6IHsKICAgICAgICAgYXNzZXJ0KGluZGV4ICsgbGVuIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaWNvZGUpKTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKSB7CisgICAgICAgICAgICBQeV9VQ1M0IG1heGNoYXIgPSB1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoCisgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VDUzEqKXN0ciwKKyAgICAgICAgICAgICAgICAoY29uc3QgUHlfVUNTMSopc3RyICsgbGVuKTsKKyAgICAgICAgICAgIGFzc2VydChtYXhjaGFyIDwgMTI4KTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIG1lbWNweSgoY2hhciAqKSBkYXRhICsgaW5kZXgsIHN0ciwgbGVuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTcyMCw3ICsxNzUxLDYgQEAKICAgICB9CiB9CiAKLQogc3RhdGljIFB5T2JqZWN0KgogZ2V0X2xhdGluMV9jaGFyKHVuc2lnbmVkIGNoYXIgY2gpCiB7CkBAIC0xNzM3LDYgKzE3NjcsMzQgQEAKICAgICByZXR1cm4gdW5pY29kZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0KgordW5pY29kZV9jaGFyKFB5X1VDUzQgY2gpCit7CisgICAgUHlPYmplY3QgKnVuaWNvZGU7CisKKyAgICBhc3NlcnQoY2ggPD0gTUFYX1VOSUNPREUpOworCisgICAgaWYgKGNoIDwgMjU2KQorICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKGNoKTsKKworICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKKyAgICBpZiAodW5pY29kZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2ggKFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSlbMF0gPSAoUHlfVUNTMSljaDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEodW5pY29kZSlbMF0gPSAoUHlfVUNTMiljaDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpID09IFB5VW5pY29kZV80QllURV9LSU5EKTsKKyAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEodW5pY29kZSlbMF0gPSBjaDsKKyAgICB9CisgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7CisgICAgcmV0dXJuIHVuaWNvZGU7Cit9CisKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9Gcm9tVW5pY29kZShjb25zdCBQeV9VTklDT0RFICp1LCBQeV9zc2l6ZV90IHNpemUpCiB7CkBAIC0xOTM0LDE4ICsxOTkyLDggQEAKICAgICBpZiAoc2l6ZSA9PSAwKQogICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKICAgICBhc3NlcnQoc2l6ZSA+IDApOwotICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IHVbMF07Ci0gICAgICAgIGlmIChjaCA8IDI1NikKLSAgICAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpY2gpOwotCi0gICAgICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoMSwgY2gpOwotICAgICAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHJlcyksIFB5VW5pY29kZV9EQVRBKHJlcyksIDAsIGNoKTsKLSAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9CisgICAgaWYgKHNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIHVuaWNvZGVfY2hhcih1WzBdKTsKIAogICAgIG1heF9jaGFyID0gdWNzMmxpYl9maW5kX21heF9jaGFyKHUsIHUgKyBzaXplKTsKICAgICByZXMgPSBQeVVuaWNvZGVfTmV3KHNpemUsIG1heF9jaGFyKTsKQEAgLTE5NzAsMTggKzIwMTgsOCBAQAogICAgIGlmIChzaXplID09IDApCiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIGFzc2VydChzaXplID4gMCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBQeV9VQ1M0IGNoID0gdVswXTsKLSAgICAgICAgaWYgKGNoIDwgMjU2KQotICAgICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhciljaCk7Ci0KLSAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldygxLCBjaCk7Ci0gICAgICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQocmVzKSwgUHlVbmljb2RlX0RBVEEocmVzKSwgMCwgY2gpOwotICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJlcywgMSkpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KKyAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICByZXR1cm4gdW5pY29kZV9jaGFyKHVbMF0pOwogCiAgICAgbWF4X2NoYXIgPSB1Y3M0bGliX2ZpbmRfbWF4X2NoYXIodSwgdSArIHNpemUpOwogICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgbWF4X2NoYXIpOwpAQCAtMjI1Nyw3ICsyMjk1LDcgQEAKICNpZmRlZiBIQVZFX1dDSEFSX0gKIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihyZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LCBQeV9zc2l6ZV90IHNpemUpCitQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGNvbnN0IHdjaGFyX3QgKncsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAodyA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChzaXplID09IDApCkBAIC0yMjc3LDE2ICsyMzE1LDkgQEAKIAogc3RhdGljIHZvaWQKIG1ha2VmbXQoY2hhciAqZm10LCBpbnQgbG9uZ2ZsYWcsIGludCBsb25nbG9uZ2ZsYWcsIGludCBzaXplX3RmbGFnLAotICAgICAgICBpbnQgemVyb3BhZCwgaW50IHdpZHRoLCBpbnQgcHJlY2lzaW9uLCBjaGFyIGMpCisgICAgICAgIGNoYXIgYykKIHsKICAgICAqZm10KysgPSAnJSc7Ci0gICAgaWYgKHdpZHRoKSB7Ci0gICAgICAgIGlmICh6ZXJvcGFkKQotICAgICAgICAgICAgKmZtdCsrID0gJzAnOwotICAgICAgICBmbXQgKz0gc3ByaW50ZihmbXQsICIlZCIsIHdpZHRoKTsKLSAgICB9Ci0gICAgaWYgKHByZWNpc2lvbikKLSAgICAgICAgZm10ICs9IHNwcmludGYoZm10LCAiLiVkIiwgcHJlY2lzaW9uKTsKICAgICBpZiAobG9uZ2ZsYWcpCiAgICAgICAgICpmbXQrKyA9ICdsJzsKICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpIHsKQEAgLTIzMTEsNDQgKzIzNDIsMTM5IEBACiAgICAgKmZtdCA9ICdcMCc7CiB9CiAKLS8qIGhlbHBlciBmb3IgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgKi8KKy8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGxkIG9yICVwLgorICAgV2UgbmVlZCBhdCBtb3N0IGNlaWwobG9nMTAoMjU2KSpTSVpFT0ZfTE9OR19MT05HKSBkaWdpdHMsCisgICBwbHVzIDEgZm9yIHRoZSBzaWduLiAgNTMvMjIgaXMgYW4gdXBwZXIgYm91bmQgZm9yIGxvZzEwKDI1NikuICovCisjZGVmaW5lIE1BWF9MT05HX0xPTkdfQ0hBUlMgKDIgKyAoU0laRU9GX0xPTkdfTE9ORyo1My0xKSAvIDIyKQorCitzdGF0aWMgaW50Cit1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCB3aWR0aCwgUHlfc3NpemVfdCBwcmVjaXNpb24pCit7CisgICAgUHlfc3NpemVfdCBsZW5ndGgsIGZpbGwsIGFyZ2xlbjsKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7CisgICAgaWYgKChwcmVjaXNpb24gPT0gLTEgfHwgcHJlY2lzaW9uID49IGxlbmd0aCkKKyAgICAgICAgJiYgd2lkdGggPD0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHN0cik7CisKKyAgICBpZiAocHJlY2lzaW9uICE9IC0xKQorICAgICAgICBsZW5ndGggPSBQeV9NSU4ocHJlY2lzaW9uLCBsZW5ndGgpOworCisgICAgYXJnbGVuID0gUHlfTUFYKGxlbmd0aCwgd2lkdGgpOworICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKSA+IHdyaXRlci0+bWF4Y2hhcikKKyAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIoc3RyLCAwLCBsZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBhcmdsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAod2lkdGggPiBsZW5ndGgpIHsKKyAgICAgICAgZmlsbCA9IHdpZHRoIC0gbGVuZ3RoOworICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCAnICcpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB3cml0ZXItPnBvcyArPSBmaWxsOworICAgIH0KKworICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIDAsIGxlbmd0aCk7CisgICAgd3JpdGVyLT5wb3MgKz0gbGVuZ3RoOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgd2lkdGgsIFB5X3NzaXplX3QgcHJlY2lzaW9uKQoreworICAgIC8qIFVURi04ICovCisgICAgUHlfc3NpemVfdCBsZW5ndGg7CisgICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgaW50IHJlczsKKworICAgIGxlbmd0aCA9IHN0cmxlbihzdHIpOworICAgIGlmIChwcmVjaXNpb24gIT0gLTEpCisgICAgICAgIGxlbmd0aCA9IFB5X01JTihsZW5ndGgsIHByZWNpc2lvbik7CisgICAgdW5pY29kZSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwoc3RyLCBsZW5ndGgsICJyZXBsYWNlIiwgTlVMTCk7CisgICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmVzID0gdW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIHVuaWNvZGUsIHdpZHRoLCAtMSk7CisgICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIHJldHVybiByZXM7Cit9CiAKIHN0YXRpYyBjb25zdCBjaGFyKgotcGFyc2VfZm9ybWF0X2ZsYWdzKGNvbnN0IGNoYXIgKmYsCi0gICAgICAgICAgICAgICAgICAgaW50ICpwX3dpZHRoLCBpbnQgKnBfcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgIGludCAqcF9sb25nZmxhZywgaW50ICpwX2xvbmdsb25nZmxhZywgaW50ICpwX3NpemVfdGZsYWcpCit1bmljb2RlX2Zyb21mb3JtYXRfYXJnKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZiwgdmFfbGlzdCAqdmFyZ3MpCiB7Ci0gICAgaW50IHdpZHRoLCBwcmVjaXNpb24sIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWc7CisgICAgY29uc3QgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgemVyb3BhZDsKKyAgICBQeV9zc2l6ZV90IHdpZHRoOworICAgIFB5X3NzaXplX3QgcHJlY2lzaW9uOworICAgIGludCBsb25nZmxhZzsKKyAgICBpbnQgbG9uZ2xvbmdmbGFnOworICAgIGludCBzaXplX3RmbGFnOworICAgIFB5X3NzaXplX3QgZmlsbDsKKworICAgIHAgPSBmOworICAgIGYrKzsKKyAgICB6ZXJvcGFkID0gMDsKKyAgICBpZiAoKmYgPT0gJzAnKSB7CisgICAgICAgIHplcm9wYWQgPSAxOworICAgICAgICBmKys7CisgICAgfQogCiAgICAgLyogcGFyc2UgdGhlIHdpZHRoLnByZWNpc2lvbiBwYXJ0LCBlLmcuICIlMi41cyIgPT4gd2lkdGg9MiwgcHJlY2lzaW9uPTUgKi8KLSAgICBmKys7Ci0gICAgd2lkdGggPSAwOwotICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpCi0gICAgICAgIHdpZHRoID0gKHdpZHRoKjEwKSArICpmKysgLSAnMCc7Ci0gICAgcHJlY2lzaW9uID0gMDsKKyAgICB3aWR0aCA9IC0xOworICAgIGlmIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgd2lkdGggPSAqZiAtICcwJzsKKyAgICAgICAgZisrOworICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgICAgICBpZiAod2lkdGggPiAoUFlfU1NJWkVfVF9NQVggLSAoKGludCkqZiAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdpZHRoID0gKHdpZHRoICogMTApICsgKCpmIC0gJzAnKTsKKyAgICAgICAgICAgIGYrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmVjaXNpb24gPSAtMTsKICAgICBpZiAoKmYgPT0gJy4nKSB7CiAgICAgICAgIGYrKzsKLSAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkKLSAgICAgICAgICAgIHByZWNpc2lvbiA9IChwcmVjaXNpb24qMTApICsgKmYrKyAtICcwJzsKKyAgICAgICAgaWYgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICAgICAgcHJlY2lzaW9uID0gKCpmIC0gJzAnKTsKKyAgICAgICAgICAgIGYrKzsKKyAgICAgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJlY2lzaW9uID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpKmYgLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWNpc2lvbiB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAocHJlY2lzaW9uICogMTApICsgKCpmIC0gJzAnKTsKKyAgICAgICAgICAgICAgICBmKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgaWYgKCpmID09ICclJykgewogICAgICAgICAgICAgLyogIiUuMyVzIiA9PiBmIHBvaW50cyB0byAiMyIgKi8KICAgICAgICAgICAgIGYtLTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoKmYgPT0gJ1wwJykgewotICAgICAgICAvKiBib2d1cyBmb3JtYXQgIiUuMSIgPT4gZ28gYmFja3dhcmQsIGYgcG9pbnRzIHRvICIxIiAqLworICAgICAgICAvKiBib2d1cyBmb3JtYXQgIiUuMTIzIiA9PiBnbyBiYWNrd2FyZCwgZiBwb2ludHMgdG8gIjMiICovCiAgICAgICAgIGYtLTsKICAgICB9Ci0gICAgaWYgKHBfd2lkdGggIT0gTlVMTCkKLSAgICAgICAgKnBfd2lkdGggPSB3aWR0aDsKLSAgICBpZiAocF9wcmVjaXNpb24gIT0gTlVMTCkKLSAgICAgICAgKnBfcHJlY2lzaW9uID0gcHJlY2lzaW9uOwogCiAgICAgLyogSGFuZGxlICVsZCwgJWx1LCAlbGxkIGFuZCAlbGx1LiAqLwogICAgIGxvbmdmbGFnID0gMDsKICAgICBsb25nbG9uZ2ZsYWcgPSAwOwogICAgIHNpemVfdGZsYWcgPSAwOwotCiAgICAgaWYgKCpmID09ICdsJykgewogICAgICAgICBpZiAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScgfHwgZlsxXSA9PSAnaScpIHsKICAgICAgICAgICAgIGxvbmdmbGFnID0gMTsKQEAgLTIzNjcsNDk5ICsyNDkzLDI4NCBAQAogICAgICAgICBzaXplX3RmbGFnID0gMTsKICAgICAgICAgKytmOwogICAgIH0KLSAgICBpZiAocF9sb25nZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9sb25nZmxhZyA9IGxvbmdmbGFnOwotICAgIGlmIChwX2xvbmdsb25nZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9sb25nbG9uZ2ZsYWcgPSBsb25nbG9uZ2ZsYWc7Ci0gICAgaWYgKHBfc2l6ZV90ZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9zaXplX3RmbGFnID0gc2l6ZV90ZmxhZzsKKworICAgIGlmIChmWzFdID09ICdcMCcpCisgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMDsKKworICAgIHN3aXRjaCAoKmYpIHsKKyAgICBjYXNlICdjJzoKKyAgICB7CisgICAgICAgIGludCBvcmRpbmFsID0gdmFfYXJnKCp2YXJncywgaW50KTsKKyAgICAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBhcmd1bWVudCBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCBvcmRpbmFsKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnaSc6CisgICAgY2FzZSAnZCc6CisgICAgY2FzZSAndSc6CisgICAgY2FzZSAneCc6CisgICAgeworICAgICAgICAvKiB1c2VkIGJ5IHNwcmludGYgKi8KKyAgICAgICAgY2hhciBmbXRbMTBdOyAvKiBzaG91bGQgYmUgZW5vdWdoIGZvciAiJTBsbGRcMCIgKi8KKyAgICAgICAgY2hhciBidWZmZXJbTUFYX0xPTkdfTE9OR19DSEFSU107CisgICAgICAgIFB5X3NzaXplX3QgYXJnbGVuOworCisgICAgICAgIGlmICgqZiA9PSAndScpIHsKKyAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCAqZik7CisKKyAgICAgICAgICAgIGlmIChsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgbG9uZykpOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBzaXplX3QpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKmYgPT0gJ3gnKSB7CisgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgMCwgJ3gnKTsKKyAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsIHZhX2FyZygqdmFyZ3MsIGludCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsICpmKTsKKworICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBsb25nKSk7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIFB5X3NzaXplX3QpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKKworICAgICAgICBpZiAocHJlY2lzaW9uIDwgbGVuKQorICAgICAgICAgICAgcHJlY2lzaW9uID0gbGVuOworCisgICAgICAgIGFyZ2xlbiA9IFB5X01BWChwcmVjaXNpb24sIHdpZHRoKTsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGFyZ2xlbiwgMTI3KSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmICh3aWR0aCA+IHByZWNpc2lvbikgeworICAgICAgICAgICAgUHlfVUNTNCBmaWxsY2hhcjsKKyAgICAgICAgICAgIGZpbGwgPSB3aWR0aCAtIHByZWNpc2lvbjsKKyAgICAgICAgICAgIGZpbGxjaGFyID0gemVyb3BhZD8nMCc6JyAnOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgZmlsbGNoYXIpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJlY2lzaW9uID4gbGVuKSB7CisgICAgICAgICAgICBmaWxsID0gcHJlY2lzaW9uIC0gbGVuOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgJzAnKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IGZpbGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgYnVmZmVyLCBsZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdwJzoKKyAgICB7CisgICAgICAgIGNoYXIgbnVtYmVyW01BWF9MT05HX0xPTkdfQ0hBUlNdOworCisgICAgICAgIGxlbiA9IHNwcmludGYobnVtYmVyLCAiJXAiLCB2YV9hcmcoKnZhcmdzLCB2b2lkKikpOworICAgICAgICBhc3NlcnQobGVuID49IDApOworCisgICAgICAgIC8qICVwIGlzIGlsbC1kZWZpbmVkOiAgZW5zdXJlIGxlYWRpbmcgMHguICovCisgICAgICAgIGlmIChudW1iZXJbMV0gPT0gJ1gnKQorICAgICAgICAgICAgbnVtYmVyWzFdID0gJ3gnOworICAgICAgICBlbHNlIGlmIChudW1iZXJbMV0gIT0gJ3gnKSB7CisgICAgICAgICAgICBtZW1tb3ZlKG51bWJlciArIDIsIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgc3RybGVuKG51bWJlcikgKyAxKTsKKyAgICAgICAgICAgIG51bWJlclswXSA9ICcwJzsKKyAgICAgICAgICAgIG51bWJlclsxXSA9ICd4JzsKKyAgICAgICAgICAgIGxlbiArPSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyh3cml0ZXIsIG51bWJlciwgbGVuKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAncyc6CisgICAgeworICAgICAgICAvKiBVVEYtOCAqLworICAgICAgICBjb25zdCBjaGFyICpzID0gdmFfYXJnKCp2YXJncywgY29uc3QgY2hhciopOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX2NzdHIod3JpdGVyLCBzLCB3aWR0aCwgcHJlY2lzaW9uKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnVSc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIGFzc2VydChvYmogJiYgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKKworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIG9iaiwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnVic6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IHZhX2FyZygqdmFyZ3MsIGNvbnN0IGNoYXIgKik7CisgICAgICAgIGlmIChvYmopIHsKKyAgICAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NIRUNLKG9iaikpOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBvYmosIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cih3cml0ZXIsIHN0ciwgd2lkdGgsIHByZWNpc2lvbikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ1MnOgorICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZygqdmFyZ3MsIFB5T2JqZWN0ICopOworICAgICAgICBQeU9iamVjdCAqc3RyOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgc3RyID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgc3RyLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnUic6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICpyZXByOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgcmVwciA9IFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICAgICAgaWYgKCFyZXByKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgcmVwciwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnQSc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICphc2NpaTsKKyAgICAgICAgYXNzZXJ0KG9iaik7CisgICAgICAgIGFzY2lpID0gUHlPYmplY3RfQVNDSUkob2JqKTsKKyAgICAgICAgaWYgKCFhc2NpaSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIGFzY2lpLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihhc2NpaSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJyUnOgorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCAnJScpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIGlmIHdlIHN0dW1ibGUgdXBvbiBhbiB1bmtub3duIGZvcm1hdHRpbmcgY29kZSwgY29weSB0aGUgcmVzdAorICAgICAgICAgICBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byB0aGUgb3V0cHV0IHN0cmluZy4gKHdlIGNhbm5vdCBqdXN0CisgICAgICAgICAgIHNraXAgdGhlIGNvZGUsIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hhdCdzIGluIHRoZQorICAgICAgICAgICBhcmd1bWVudCBsaXN0KSAqLworICAgICAgICBsZW4gPSBzdHJsZW4ocCk7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlTGF0aW4xU3RyaW5nKHdyaXRlciwgcCwgbGVuKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBmID0gcCtsZW47CisgICAgICAgIHJldHVybiBmOworICAgIH0KKworICAgIGYrKzsKICAgICByZXR1cm4gZjsKIH0KIAotLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsZC4gIDIxIGNoYXJhY3RlcnMKLSAgIGFsbG93cyBmb3IgNjQtYml0IGludGVnZXJzIChpbiBkZWNpbWFsKSBhbmQgYW4gb3B0aW9uYWwgc2lnbi4gKi8KLSNkZWZpbmUgTUFYX0xPTkdfQ0hBUlMgMjEKLS8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGxkLgotICAgV2UgbmVlZCBhdCBtb3N0IGNlaWwobG9nMTAoMjU2KSpTSVpFT0ZfTE9OR19MT05HKSBkaWdpdHMsCi0gICBwbHVzIDEgZm9yIHRoZSBzaWduLiAgNTMvMjIgaXMgYW4gdXBwZXIgYm91bmQgZm9yIGxvZzEwKDI1NikuICovCi0jZGVmaW5lIE1BWF9MT05HX0xPTkdfQ0hBUlMgKDIgKyAoU0laRU9GX0xPTkdfTE9ORyo1My0xKSAvIDIyKQotCiBQeU9iamVjdCAqCiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQogewotICAgIHZhX2xpc3QgY291bnQ7Ci0gICAgUHlfc3NpemVfdCBjYWxsY291bnQgPSAwOwotICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdHMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBuID0gMDsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBwcmVjaXNpb24gPSAwOwotICAgIGludCB6ZXJvcGFkOwotICAgIGNvbnN0IGNoYXIqIGY7Ci0gICAgUHlPYmplY3QgKnN0cmluZzsKLSAgICAvKiB1c2VkIGJ5IHNwcmludGYgKi8KLSAgICBjaGFyIGZtdFs2MV07IC8qIHNob3VsZCBiZSBlbm91Z2ggZm9yICUwd2lkdGgucHJlY2lzaW9ubGxkICovCi0gICAgUHlfVUNTNCBtYXhjaGFyID0gMTI3OyAvKiByZXN1bHQgaXMgQVNDSUkgYnkgZGVmYXVsdCAqLwotICAgIFB5X1VDUzQgYXJnbWF4Y2hhcjsKLSAgICBQeV9zc2l6ZV90IG51bWJlcnNpemUgPSAwOwotICAgIGNoYXIgKm51bWJlcnJlc3VsdHMgPSBOVUxMOwotICAgIGNoYXIgKm51bWJlcnJlc3VsdCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIGludCBraW5kOwotICAgIHZvaWQgKmRhdGE7CisgICAgdmFfbGlzdCB2YXJnczI7CisgICAgY29uc3QgY2hhciAqZjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAotICAgIFB5X1ZBX0NPUFkoY291bnQsIHZhcmdzKTsKLSAgICAvKiBzdGVwIDE6IGNvdW50IHRoZSBudW1iZXIgb2YgJVMvJVIvJUEvJXMgZm9ybWF0IHNwZWNpZmljYXRpb25zCi0gICAgICogKHdlIGNhbGwgUHlPYmplY3RfU3RyKCkvUHlPYmplY3RfUmVwcigpL1B5T2JqZWN0X0FTQ0lJKCkvCi0gICAgICogUHlVbmljb2RlX0RlY29kZVVURjgoKSBmb3IgdGhlc2Ugb2JqZWN0cyBvbmNlIGR1cmluZyBzdGVwIDMgYW5kIHB1dCB0aGUKLSAgICAgKiByZXN1bHQgaW4gYW4gYXJyYXkpCi0gICAgICogYWxzbyBlc3RpbWF0ZSBhIHVwcGVyIGJvdW5kIGZvciBhbGwgdGhlIG51bWJlciBmb3JtYXRzIGluIHRoZSBzdHJpbmcsCi0gICAgICogbnVtYmVycyB3aWxsIGJlIGZvcm1hdHRlZCBpbiBzdGVwIDMgYW5kIGJlIGtlcHQgaW4gYSAnXDAnLXNlcGFyYXRlZAotICAgICAqIGJ1ZmZlciBiZWZvcmUgcHV0dGluZyBldmVyeXRoaW5nIHRvZ2V0aGVyLiAqLwotICAgIGZvciAoZiA9IGZvcm1hdDsgKmY7IGYrKykgeworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHN0cmxlbihmb3JtYXQpICsgMTAwOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworCisgICAgLyogdmFfbGlzdCBtYXkgYmUgYW4gYXJyYXkgKG9mIDEgaXRlbSkgb24gc29tZSBwbGF0Zm9ybXMgKGV4OiBBTUQ2NCkuCisgICAgICAgQ29weSBpdCB0byBiZSBhYmxlIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gYSBzdWJmdW5jdGlvbi4gKi8KKyAgICBQeV9WQV9DT1BZKHZhcmdzMiwgdmFyZ3MpOworCisgICAgZm9yIChmID0gZm9ybWF0OyAqZjsgKSB7CiAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKLSAgICAgICAgICAgIGludCBsb25nbG9uZ2ZsYWc7Ci0gICAgICAgICAgICAvKiBza2lwIHdpZHRoIG9yIHdpZHRoLnByZWNpc2lvbiAoZWcuICIxLjIiIG9mICIlMS4yZiIpICovCi0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsICZ3aWR0aCwgTlVMTCwgTlVMTCwgJmxvbmdsb25nZmxhZywgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoKmYgPT0gJ3MnIHx8ICpmPT0nUycgfHwgKmY9PSdSJyB8fCAqZj09J0EnIHx8ICpmPT0nVicpCi0gICAgICAgICAgICAgICAgKytjYWxsY291bnQ7Ci0KLSAgICAgICAgICAgIGVsc2UgaWYgKCpmID09ICdkJyB8fCAqZj09J3UnIHx8ICpmPT0naScgfHwgKmY9PSd4JyB8fCAqZj09J3AnKSB7Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2xvbmdmbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IE1BWF9MT05HX0xPTkdfQ0hBUlMpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1BWF9MT05HX0xPTkdfQ0hBUlM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAvKiBNQVhfTE9OR19DSEFSUyBpcyBlbm91Z2ggdG8gaG9sZCBhIDY0LWJpdCBpbnRlZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgc2lnbi4gIERlY2ltYWwgdGFrZXMgdGhlIG1vc3Qgc3BhY2UuICBUaGlzCi0gICAgICAgICAgICAgICAgICAgICAgIGlzbid0IGVub3VnaCBmb3Igb2N0YWwuICBJZiBhIHdpZHRoIGlzIHNwZWNpZmllZCB3ZQotICAgICAgICAgICAgICAgICAgICAgICBuZWVkIG1vcmUgKHdoaWNoIHdlIGFsbG9jYXRlIGxhdGVyKS4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgTUFYX0xPTkdfQ0hBUlMpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1BWF9MT05HX0NIQVJTOwotCi0gICAgICAgICAgICAgICAgLyogYWNjb3VudCBmb3IgdGhlIHNpemUgKyAnXDAnIHRvIHNlcGFyYXRlIG51bWJlcnMKLSAgICAgICAgICAgICAgICAgICBpbnNpZGUgb2YgdGhlIG51bWJlcnJlc3VsdHMgYnVmZmVyICovCi0gICAgICAgICAgICAgICAgbnVtYmVyc2l6ZSArPSAod2lkdGggKyAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgodW5zaWduZWQgY2hhcikqZiA+IDEyNykgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgIlB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIGV4cGVjdHMgYW4gQVNDSUktZW5jb2RlZCBmb3JtYXQgIgotICAgICAgICAgICAgICAgICJzdHJpbmcsIGdvdCBhIG5vbi1BU0NJSSBieXRlOiAweCUwMngiLAotICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSpmKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qIHN0ZXAgMjogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVzdWx0cyBvZgotICAgICAqIFB5T2JqZWN0X1N0cigpL1B5T2JqZWN0X1JlcHIoKS9QeVVuaWNvZGVfRGVjb2RlVVRGOCgpIGNhbGxzICovCi0gICAgaWYgKGNhbGxjb3VudCkgewotICAgICAgICBjYWxscmVzdWx0cyA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUHlPYmplY3QgKikgKiBjYWxsY291bnQpOwotICAgICAgICBpZiAoIWNhbGxyZXN1bHRzKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbHJlc3VsdCA9IGNhbGxyZXN1bHRzOwotICAgIH0KLSAgICAvKiBzdGVwIDIuNTogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVzdWx0cyBvZiBmb3JtYXRpbmcgbnVtYmVycyAqLwotICAgIGlmIChudW1iZXJzaXplKSB7Ci0gICAgICAgIG51bWJlcnJlc3VsdHMgPSBQeU9iamVjdF9NYWxsb2MobnVtYmVyc2l6ZSk7Ci0gICAgICAgIGlmICghbnVtYmVycmVzdWx0cykgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotICAgICAgICBudW1iZXJyZXN1bHQgPSBudW1iZXJyZXN1bHRzOwotICAgIH0KLQotICAgIC8qIHN0ZXAgMzogZm9ybWF0IG51bWJlcnMgYW5kIGZpZ3VyZSBvdXQgaG93IGxhcmdlIGEgYnVmZmVyIHdlIG5lZWQgKi8KLSAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKLSAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgY29uc3QgY2hhciogcDsKLSAgICAgICAgICAgIGludCBsb25nZmxhZzsKLSAgICAgICAgICAgIGludCBsb25nbG9uZ2ZsYWc7Ci0gICAgICAgICAgICBpbnQgc2l6ZV90ZmxhZzsKLSAgICAgICAgICAgIGludCBudW1wcmludGVkOwotCi0gICAgICAgICAgICBwID0gZjsKLSAgICAgICAgICAgIHplcm9wYWQgPSAoZlsxXSA9PSAnMCcpOwotICAgICAgICAgICAgZiA9IHBhcnNlX2Zvcm1hdF9mbGFncyhmLCAmd2lkdGgsICZwcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb25nZmxhZywgJmxvbmdsb25nZmxhZywgJnNpemVfdGZsYWcpOwotICAgICAgICAgICAgc3dpdGNoICgqZikgewotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IG9yZGluYWwgPSB2YV9hcmcoY291bnQsIGludCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlYyBhcmcgbm90IGluIHJhbmdlKDB4MTEwMDAwKSIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgKFB5X1VDUzQpb3JkaW5hbCk7Ci0gICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgemVyb3BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBwcmVjaXNpb24sICpmKTsKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIGxvbmcpKTsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgUFlfTE9OR19MT05HKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBQeV9zc2l6ZV90KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBpbnQpKTsKLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgLyogYWR2YW5jZSBieSArMSB0byBza2lwIG92ZXIgdGhlICdcMCcgKi8KLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCB6ZXJvcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHByZWNpc2lvbiwgJ3UnKTsKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHVuc2lnbmVkIGxvbmcpKTsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgUFlfTE9OR19MT05HKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBzaXplX3QpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHVuc2lnbmVkIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCAwLCAwLCAwLCB6ZXJvcGFkLCB3aWR0aCwgcHJlY2lzaW9uLCAneCcpOwotICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LCB2YV9hcmcoY291bnQsIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgIiVwIiwgdmFfYXJnKGNvdW50LCB2b2lkKikpOwotICAgICAgICAgICAgICAgIC8qICVwIGlzIGlsbC1kZWZpbmVkOiAgZW5zdXJlIGxlYWRpbmcgMHguICovCi0gICAgICAgICAgICAgICAgaWYgKG51bWJlcnJlc3VsdFsxXSA9PSAnWCcpCi0gICAgICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdFsxXSA9ICd4JzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChudW1iZXJyZXN1bHRbMV0gIT0gJ3gnKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1lbW1vdmUobnVtYmVycmVzdWx0ICsgMiwgbnVtYmVycmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihudW1iZXJyZXN1bHQpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdFswXSA9ICcwJzsKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzFdID0gJ3gnOwotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIFVURi04ICovCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcyA9IHZhX2FyZyhjb3VudCwgY29uc3QgY2hhciopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHIgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHMsIHN0cmxlbihzKSwgInJlcGxhY2UiLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIC8qIHNpbmNlIFB5VW5pY29kZV9EZWNvZGVVVEY4IHJldHVybnMgYWxyZWFkeSBmbGV4aWJsZQotICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgb2JqZWN0cywgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIHJlYWR5IG9uIHRoZW0gKi8KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHN0ciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaiAmJiBfUHlVbmljb2RlX0NIRUNLKG9iaikpOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUob2JqKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1YnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IHZhX2FyZyhjb3VudCwgY29uc3QgY2hhciAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyX29iajsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqIHx8IHN0cik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCFvYmogfHwgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShvYmopOwotICAgICAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyX29iaiA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwoc3RyLCBzdHJsZW4oc3RyKSwgInJlcGxhY2UiLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJfb2JqKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cl9vYmopID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyX29iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHN0cl9vYmo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0cjsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICBzdHIgPSBQeU9iamVjdF9TdHIob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHN0ciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUic6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlcHI7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaik7Ci0gICAgICAgICAgICAgICAgcmVwciA9IFB5T2JqZWN0X1JlcHIob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcHIpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHJlcHIpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHJlcHIpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXByKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgcmVwciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gcmVwcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphc2NpaTsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICBhc2NpaSA9IFB5T2JqZWN0X0FTQ0lJKG9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKCFhc2NpaSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoYXNjaWkpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhc2NpaSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShhc2NpaSk7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGFzY2lpKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgcmVwciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gYXNjaWk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIC8qIGlmIHdlIHN0dW1ibGUgdXBvbiBhbiB1bmtub3duCi0gICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZyBjb2RlLCBjb3B5IHRoZSByZXN0IG9mCi0gICAgICAgICAgICAgICAgICAgdGhlIGZvcm1hdCBzdHJpbmcgdG8gdGhlIG91dHB1dAotICAgICAgICAgICAgICAgICAgIHN0cmluZy4gKHdlIGNhbm5vdCBqdXN0IHNraXAgdGhlCi0gICAgICAgICAgICAgICAgICAgY29kZSwgc2luY2UgdGhlcmUncyBubyB3YXkgdG8ga25vdwotICAgICAgICAgICAgICAgICAgIHdoYXQncyBpbiB0aGUgYXJndW1lbnQgbGlzdCkgKi8KLSAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihwKTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4cGFuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuKys7Ci0gICAgfQotICBleHBhbmQ6Ci0gICAgLyogc3RlcCA0OiBmaWxsIHRoZSBidWZmZXIgKi8KLSAgICAvKiBTaW5jZSB3ZSd2ZSBhbmFseXplZCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkLAotICAgICAgIHdlIGRvbid0IGhhdmUgdG8gcmVzaXplIHRoZSBzdHJpbmcuCi0gICAgICAgVGhlcmUgY2FuIGJlIG5vIGVycm9ycyBiZXlvbmQgdGhpcyBwb2ludC4gKi8KLSAgICBzdHJpbmcgPSBQeVVuaWNvZGVfTmV3KG4sIG1heGNoYXIpOwotICAgIGlmICghc3RyaW5nKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHN0cmluZyk7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHN0cmluZyk7Ci0gICAgY2FsbHJlc3VsdCA9IGNhbGxyZXN1bHRzOwotICAgIG51bWJlcnJlc3VsdCA9IG51bWJlcnJlc3VsdHM7Ci0KLSAgICBmb3IgKGkgPSAwLCBmID0gZm9ybWF0OyAqZjsgZisrKSB7Ci0gICAgICAgIGlmICgqZiA9PSAnJScpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHA7Ci0KLSAgICAgICAgICAgIHAgPSBmOwotICAgICAgICAgICAgZiA9IHBhcnNlX2Zvcm1hdF9mbGFncyhmLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIC8qIGNoZWNraW5nIGZvciA9PSBiZWNhdXNlIHRoZSBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIGEgZW1wdHkKLSAgICAgICAgICAgICAgIHN0cmluZywgd2hpY2ggY2F1c2VzIGkgdG8gcG9pbnQgdG8gZW5kLCB0aGUgYXNzZXJ0IGF0IHRoZSBlbmQgb2YKLSAgICAgICAgICAgICAgIHRoZSBsb29wICovCi0gICAgICAgICAgICBhc3NlcnQoaSA8PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKLQotICAgICAgICAgICAgc3dpdGNoICgqZikgewotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IG9yZGluYWwgPSB2YV9hcmcodmFyZ3MsIGludCk7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgb3JkaW5hbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICBpZiAoKmYgPT0gJ3AnKQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCB2b2lkICopOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgaW50KTsKLSAgICAgICAgICAgICAgICAvKiBleHRyYWN0IHRoZSByZXN1bHQgZnJvbSBudW1iZXJyZXN1bHRzIGFuZCBhcHBlbmQuICovCi0gICAgICAgICAgICAgICAgbGVuID0gc3RybGVuKG51bWJlcnJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgdW5pY29kZV93cml0ZV9jc3RyKHN0cmluZywgaSwgbnVtYmVycmVzdWx0LCBsZW4pOwotICAgICAgICAgICAgICAgIC8qIHNraXAgb3ZlciB0aGUgc2VwYXJhdGluZyAnXDAnICovCi0gICAgICAgICAgICAgICAgaSArPSBsZW47Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IGxlbjsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKm51bWJlcnJlc3VsdCA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQrKzsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgY2hhciAqKTsKLSAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCgqY2FsbHJlc3VsdCkgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCAqY2FsbHJlc3VsdCwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGUgdW5pY29kZSgpL3JlcHIoKSA9PiBmb3JnZXQgaXQgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHN3aXRjaCB0byBuZXh0IHVuaWNvZGUoKS9yZXByKCkgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChvYmopIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgb2JqLCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdWJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgdmFfYXJnKHZhcmdzLCBjb25zdCBjaGFyICopOwotICAgICAgICAgICAgICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChvYmopIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksIG9iaiwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoKmNhbGxyZXN1bHQpIDw9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCAqY2FsbHJlc3VsdCwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUyc6Ci0gICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAvKiB1bnVzZWQsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKCpjYWxscmVzdWx0KSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCAgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGUgdW5pY29kZSgpL3JlcHIoKSA9PiBmb3JnZXQgaXQgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHN3aXRjaCB0byBuZXh0IHVuaWNvZGUoKS9yZXByKCkgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgJyUnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW4gPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICAgICAgdW5pY29kZV93cml0ZV9jc3RyKHN0cmluZywgaSwgcCwgbGVuKTsKLSAgICAgICAgICAgICAgICBpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBhc3NlcnQoaSA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGYgPSB1bmljb2RlX2Zyb21mb3JtYXRfYXJnKCZ3cml0ZXIsIGYsICZ2YXJnczIpOworICAgICAgICAgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQoaSA8IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgKmYpOwotICAgICAgICB9Ci0gICAgfQotICAgIGFzc2VydChpID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOworICAgICAgICAgICAgY29uc3QgY2hhciAqcDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwogCi0gIGVuZDoKLSAgICBpZiAoY2FsbHJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUoY2FsbHJlc3VsdHMpOwotICAgIGlmIChudW1iZXJyZXN1bHRzKQotICAgICAgICBQeU9iamVjdF9GcmVlKG51bWJlcnJlc3VsdHMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdChzdHJpbmcpOwotICBmYWlsOgotICAgIGlmIChjYWxscmVzdWx0cykgewotICAgICAgICBQeU9iamVjdCAqKmNhbGxyZXN1bHQyID0gY2FsbHJlc3VsdHM7Ci0gICAgICAgIHdoaWxlIChjYWxscmVzdWx0MiA8IGNhbGxyZXN1bHQpIHsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoKmNhbGxyZXN1bHQyKTsKLSAgICAgICAgICAgICsrY2FsbHJlc3VsdDI7CisgICAgICAgICAgICBwID0gZjsKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBjaGFyKSpwID4gMTI3KSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIGV4cGVjdHMgYW4gQVNDSUktZW5jb2RlZCBmb3JtYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgZ290IGEgbm9uLUFTQ0lJIGJ5dGU6IDB4JTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcikqcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnJScpOworICAgICAgICAgICAgbGVuID0gcCAtIGY7CisKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICAgICAgICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsIGYsIGxlbikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgZiA9IHA7CiAgICAgICAgIH0KLSAgICAgICAgUHlPYmplY3RfRnJlZShjYWxscmVzdWx0cyk7CiAgICAgfQotICAgIGlmIChudW1iZXJyZXN1bHRzKQotICAgICAgICBQeU9iamVjdF9GcmVlKG51bWJlcnJlc3VsdHMpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKworICBmYWlsOgorICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjk2NiwyNiArMjg3NywxNyBAQAogUHlPYmplY3QgKgogUHlVbmljb2RlX0Zyb21PcmRpbmFsKGludCBvcmRpbmFsKQogewotICAgIFB5T2JqZWN0ICp2OwogICAgIGlmIChvcmRpbmFsIDwgMCB8fCBvcmRpbmFsID4gTUFYX1VOSUNPREUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2hyKCkgYXJnIG5vdCBpbiByYW5nZSgweDExMDAwMCkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKChQeV9VQ1M0KW9yZGluYWwgPCAyNTYpCi0gICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpb3JkaW5hbCk7Ci0KLSAgICB2ID0gUHlVbmljb2RlX05ldygxLCBvcmRpbmFsKTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQodiksIFB5VW5pY29kZV9EQVRBKHYpLCAwLCBvcmRpbmFsKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHYsIDEpKTsKLSAgICByZXR1cm4gdjsKKyAgICByZXR1cm4gdW5pY29kZV9jaGFyKChQeV9VQ1M0KW9yZGluYWwpOwogfQogCiBQeU9iamVjdCAqCi1QeVVuaWNvZGVfRnJvbU9iamVjdChyZWdpc3RlciBQeU9iamVjdCAqb2JqKQorUHlVbmljb2RlX0Zyb21PYmplY3QoUHlPYmplY3QgKm9iaikKIHsKICAgICAvKiBYWFggUGVyaGFwcyB3ZSBzaG91bGQgbWFrZSB0aGlzIEFQSSBhbiBhbGlhcyBvZgogICAgICAgIFB5T2JqZWN0X1N0cigpIGluc3RlYWQgPyEgKi8KQEAgLTMwMDcsNyArMjkwOSw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChyZWdpc3RlciBQeU9iamVjdCAqb2JqLAorUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KFB5T2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewpAQCAtMzA1OSwxNCArMjk2MSwxNyBAQAogICAgMSBvbiBzdWNjZXNzLiAqLwogaW50CiBfUHlfbm9ybWFsaXplX2VuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvd2VyLAotICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3dlcl9sZW4pCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG93ZXJfbGVuKQogewogICAgIGNvbnN0IGNoYXIgKmU7CiAgICAgY2hhciAqbDsKICAgICBjaGFyICpsX2VuZDsKIAogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgIC8qIDYgPT0gc3RybGVuKCJ1dGYtOCIpICsgMSAqLworICAgICAgICBpZiAobG93ZXJfbGVuIDwgNikKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdHJjcHkobG93ZXIsICJ1dGYtOCIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CkBAIC0zMTA4LDcgKzMwMTMsOCBAQAogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwocywgc2l6ZSwgZXJyb3JzLCBOVUxMKTsKICAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChsb3dlciwgImxhdGluLTEiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAibGF0aW4xIikgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvODg1OS0xIikgPT0gMCkpCiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUxhdGluMShzLCBzaXplLCBlcnJvcnMpOwogI2lmZGVmIEhBVkVfTUJDUwogICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJtYmNzIikgPT0gMCkKQEAgLTMxMzQsOCArMzA0MCwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodW5pY29kZSkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIGRpZCBub3QgcmV0dXJuIGEgc3RyIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGRlY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUsIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CkBAIC0zMTkzLDggKzMxMDEsMTAgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHYpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZGVjb2RlciBkaWQgbm90IHJldHVybiBhIHN0ciBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBkZWNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZSgpIHRvIGRlY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVuaWNvZGUpLT50cF9uYW1lLCBQeV9UWVBFKHVuaWNvZGUpLT50cF9uYW1lKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQpAQCAtMzM0Miw3ICszMjUyLDcgQEAKICAgICB9CiAKICAgICBpZiAoc3Vycm9nYXRlZXNjYXBlKSB7Ci0gICAgICAgIC8qIGxvY2FsZSBlbmNvZGluZyB3aXRoIHN1cnJvZ2F0ZWVzY2FwZSAqLworICAgICAgICAvKiAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyICovCiAgICAgICAgIGNoYXIgKnN0cjsKIAogICAgICAgICBzdHIgPSBfUHlfd2NoYXIyY2hhcih3c3RyLCAmZXJyb3JfcG9zKTsKQEAgLTMzNjIsNiArMzI3Miw3IEBACiAgICAgICAgIFB5TWVtX0ZyZWUoc3RyKTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIC8qIHN0cmljdCBtb2RlICovCiAgICAgICAgIHNpemVfdCBsZW4sIGxlbjI7CiAKICAgICAgICAgbGVuID0gd2NzdG9tYnMoTlVMTCwgd3N0ciwgMCk7CkBAIC0zNDAwLDcgKzMzMTEsNyBAQAogICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoZXJybXNnLCAmZXJybGVuKTsKICAgICAgICAgaWYgKHdzdHIgIT0gTlVMTCkgewogICAgICAgICAgICAgcmVhc29uID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3c3RyLCBlcnJsZW4pOwotICAgICAgICAgICAgUHlNZW1fRnJlZSh3c3RyKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZXJybXNnID0gTlVMTDsKICAgICB9CkBAIC0zNDc4LDcgKzMzODksOCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKChzdHJjbXAobG93ZXIsICJsYXRpbi0xIikgPT0gMCkgfHwKICAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImxhdGluMSIpID09IDApIHx8Ci0gICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkpCisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzbzg4NTktMSIpID09IDApKQogICAgICAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcodW5pY29kZSwgZXJyb3JzKTsKICNpZmRlZiBIQVZFX01CQ1MKICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGxvd2VyLCAibWJjcyIpID09IDApCkBAIC0zNTAzLDcgKzM0MTUsOCBAQAogICAgICAgICBQeU9iamVjdCAqYjsKIAogICAgICAgICBlcnJvciA9IFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfUnVudGltZVdhcm5pbmcsIDEsCi0gICAgICAgICAgICAiZW5jb2RlciAlcyByZXR1cm5lZCBieXRlYXJyYXkgaW5zdGVhZCBvZiBieXRlcyIsCisgICAgICAgICAgICAiZW5jb2RlciAlcyByZXR1cm5lZCBieXRlYXJyYXkgaW5zdGVhZCBvZiBieXRlczsgIgorICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gZW5jb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCiAgICAgICAgICAgICBlbmNvZGluZyk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtMzUxNiw4ICszNDI5LDEwIEBACiAgICAgfQogCiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgImVuY29kZXIgZGlkIG5vdCByZXR1cm4gYSBieXRlcyBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAiJyUuNDAwcycgZW5jb2RlciByZXR1cm5lZCAnJS40MDBzJyBpbnN0ZWFkIG9mICdieXRlcyc7ICIKKyAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gZW5jb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICBQeV9ERUNSRUYodik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0zNTQzLDggKzM0NTgsMTAgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHYpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZW5jb2RlciBkaWQgbm90IHJldHVybiBhbiBzdHIgb2JqZWN0ICh0eXBlPSUuNDAwcykiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgZW5jb2RlciByZXR1cm5lZCAnJS40MDBzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KQEAgLTM2MDcsOCArMzUyNCw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpCi0gICAgeworICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpIHsKKyAgICAgICAgLyogInN1cnJvZ2F0ZWVzY2FwZSIgZXJyb3IgaGFuZGxlciAqLwogICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoc3RyLCAmd2xlbik7CiAgICAgICAgIGlmICh3c3RyID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmICh3bGVuID09IChzaXplX3QpLTEpCkBAIC0zNjE5LDkgKzM1MzYsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIHdsZW4pOwotICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdzdHIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RyaWN0IG1vZGUgKi8KICNpZm5kZWYgSEFWRV9CUk9LRU5fTUJTVE9XQ1MKICAgICAgICAgd2xlbiA9IG1ic3Rvd2NzKE5VTEwsIHN0ciwgMCk7CiAjZWxzZQpAQCAtMzY0MSw3ICszNTU5LDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qIFRoaXMgc2hvdWxkbid0IGZhaWwgbm93ICovCiAgICAgICAgIHdsZW4yID0gbWJzdG93Y3Mod3N0ciwgc3RyLCB3bGVuKzEpOwogICAgICAgICBpZiAod2xlbjIgPT0gKHNpemVfdCktMSkgewogICAgICAgICAgICAgaWYgKHdzdHIgIT0gc21hbGxidWYpCkBAIC0zNjY3LDcgKzM1ODQsNyBAQAogICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoZXJybXNnLCAmZXJybGVuKTsKICAgICAgICAgaWYgKHdzdHIgIT0gTlVMTCkgewogICAgICAgICAgICAgcmVhc29uID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3c3RyLCBlcnJsZW4pOwotICAgICAgICAgICAgUHlNZW1fRnJlZSh3c3RyKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZXJybXNnID0gTlVMTDsKICAgICB9CkBAIC0zNzM1LDE4ICszNjUyLDIwIEBACiAKIAogaW50Ci1fUHlVbmljb2RlX0hhc05VTENoYXJzKFB5T2JqZWN0KiBzKQorX1B5VW5pY29kZV9IYXNOVUxDaGFycyhQeU9iamVjdCogc3RyKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqbnVsID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHBvczsKIAotICAgIGlmIChudWwgPT0gTlVMTCkKLSAgICAgICAgbnVsID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJcMCIsIDEpOwotICAgIGlmIChudWwgPT0gTlVMTCkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0NvbnRhaW5zKHMsIG51bCk7CisgICAgcG9zID0gZmluZGNoYXIoUHlVbmljb2RlX0RBVEEoc3RyKSwgUHlVbmljb2RlX0tJTkQoc3RyKSwKKyAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpLCAnXDAnLCAxKTsKKyAgICBpZiAocG9zID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOwogfQogCi0KIGludAogUHlVbmljb2RlX0ZTQ29udmVydGVyKFB5T2JqZWN0KiBhcmcsIHZvaWQqIGFkZHIpCiB7CkBAIC0zODUwLDYgKzM3NjksNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IFB5T2JqZWN0X01BTExPQyhQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKSArIDEpOwogICAgICAgICBpZiAoX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTQwMTgsNiArMzkzOCw5IEBACiBQeV9VQ1M0CiBQeVVuaWNvZGVfUmVhZENoYXIoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3QgaW5kZXgpCiB7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQga2luZDsKKwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHVuaWNvZGUpIHx8IFB5VW5pY29kZV9SRUFEWSh1bmljb2RlKSA9PSAtMSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwogICAgICAgICByZXR1cm4gKFB5X1VDUzQpLTE7CkBAIC00MDI2LDcgKzM5NDksOSBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInN0cmluZyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIChQeV9VQ1M0KS0xOwogICAgIH0KLSAgICByZXR1cm4gUHlVbmljb2RlX1JFQURfQ0hBUih1bmljb2RlLCBpbmRleCk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5kZXgpOwogfQogCiBpbnQKQEAgLTQwODQsNiArNDAwOSw3IEBACiAgICAgUHlfQ0xFQVIoKmV4Y2VwdGlvbk9iamVjdCk7CiB9CiAKKyNpZmRlZiBIQVZFX01CQ1MKIC8qIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGhlbHBlcjoKICAgIGJ1aWxkIGFyZ3VtZW50cywgY2FsbCB0aGUgY2FsbGJhY2sgYW5kIGNoZWNrIHRoZSBhcmd1bWVudHMsCiAgICBpZiBubyBleGNlcHRpb24gb2NjdXJyZWQsIGNvcHkgdGhlIHJlcGxhY2VtZW50IHRvIHRoZSBvdXRwdXQKQEAgLTQwOTIsMTEgKzQwMTgsMTIgQEAKICovCiAKIHN0YXRpYyBpbnQKLXVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqcmVhc29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmlucHV0LCBjb25zdCBjaGFyICoqaW5lbmQsIFB5X3NzaXplX3QgKnN0YXJ0aW5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqb3V0cHV0LCBQeV9zc2l6ZV90ICpvdXRwb3MpCit1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93Y2hhcigKKyAgICBjb25zdCBjaGFyICplcnJvcnMsIFB5T2JqZWN0ICoqZXJyb3JIYW5kbGVyLAorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCisgICAgY29uc3QgY2hhciAqKmlucHV0LCBjb25zdCBjaGFyICoqaW5lbmQsIFB5X3NzaXplX3QgKnN0YXJ0aW5wb3MsCisgICAgUHlfc3NpemVfdCAqZW5kaW5wb3MsIFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LCBjb25zdCBjaGFyICoqaW5wdHIsCisgICAgUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcykKIHsKICAgICBzdGF0aWMgY2hhciAqYXJncGFyc2UgPSAiTyFuO2RlY29kaW5nIGVycm9yIGhhbmRsZXIgbXVzdCByZXR1cm4gKHN0ciwgaW50KSB0dXBsZSI7CiAKQEAgLTQxMDcsMTIgKzQwMzQsMTEgQEAKICAgICBQeV9zc2l6ZV90IHJlcXVpcmVkc2l6ZTsKICAgICBQeV9zc2l6ZV90IG5ld3BvczsKICAgICBQeU9iamVjdCAqaW5wdXRvYmogPSBOVUxMOwotICAgIGludCByZXMgPSAtMTsKKyAgICB3Y2hhcl90ICpyZXB3c3RyOworICAgIFB5X3NzaXplX3QgcmVwd2xlbjsKIAotICAgIGlmIChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgIT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpCi0gICAgICAgIG91dHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqb3V0cHV0KTsKLSAgICBlbHNlCi0gICAgICAgIG91dHNpemUgPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKCpvdXRwdXQpOworICAgIGFzc2VydCAoX1B5VW5pY29kZV9LSU5EKCpvdXRwdXQpID09IFB5VW5pY29kZV9XQ0hBUl9LSU5EKTsKKyAgICBvdXRzaXplID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCgqb3V0cHV0KTsKIAogICAgIGlmICgqZXJyb3JIYW5kbGVyID09IE5VTEwpIHsKICAgICAgICAgKmVycm9ySGFuZGxlciA9IFB5Q29kZWNfTG9va3VwRXJyb3IoZXJyb3JzKTsKQEAgLTQxMzcsNyArNDA2Myw5OCBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUocmVzdHVwbGUsIGFyZ3BhcnNlLCAmUHlVbmljb2RlX1R5cGUsICZyZXB1bmljb2RlLCAmbmV3cG9zKSkKICAgICAgICAgZ290byBvbkVycm9yOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPT0gLTEpCisKKyAgICAvKiBDb3B5IGJhY2sgdGhlIGJ5dGVzIHZhcmlhYmxlcywgd2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoZQorICAgICAgIGNhbGxiYWNrICovCisgICAgaW5wdXRvYmogPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QoKmV4Y2VwdGlvbk9iamVjdCk7CisgICAgaWYgKCFpbnB1dG9iaikKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIGlmICghUHlCeXRlc19DaGVjayhpbnB1dG9iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImV4Y2VwdGlvbiBhdHRyaWJ1dGUgb2JqZWN0IG11c3QgYmUgYnl0ZXMiKTsKKyAgICB9CisgICAgKmlucHV0ID0gUHlCeXRlc19BU19TVFJJTkcoaW5wdXRvYmopOworICAgIGluc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoaW5wdXRvYmopOworICAgICppbmVuZCA9ICppbnB1dCArIGluc2l6ZTsKKyAgICAvKiB3ZSBjYW4gREVDUkVGIHNhZmVseSwgYXMgdGhlIGV4Y2VwdGlvbiBoYXMgYW5vdGhlciByZWZlcmVuY2UsCisgICAgICAgc28gdGhlIG9iamVjdCB3b24ndCBnbyBhd2F5LiAqLworICAgIFB5X0RFQ1JFRihpbnB1dG9iaik7CisKKyAgICBpZiAobmV3cG9zPDApCisgICAgICAgIG5ld3BvcyA9IGluc2l6ZStuZXdwb3M7CisgICAgaWYgKG5ld3BvczwwIHx8IG5ld3Bvcz5pbnNpemUpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsICJwb3NpdGlvbiAlemQgZnJvbSBlcnJvciBoYW5kbGVyIG91dCBvZiBib3VuZHMiLCBuZXdwb3MpOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgcmVwd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHJlcHVuaWNvZGUsICZyZXB3bGVuKTsKKyAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCisgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKKyAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQorICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLworICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3MgKyByZXB3bGVuICsgaW5zaXplLW5ld3BvczsKKyAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgeworICAgICAgICBpZiAocmVxdWlyZWRzaXplIDwgMipvdXRzaXplKQorICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUob3V0cHV0LCByZXF1aXJlZHNpemUpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgd2NzbmNweShfUHlVbmljb2RlX1dTVFIoKm91dHB1dCkgKyAqb3V0cG9zLCByZXB3c3RyLCByZXB3bGVuKTsKKyAgICAqb3V0cG9zICs9IHJlcHdsZW47CisKKyAgICAqZW5kaW5wb3MgPSBuZXdwb3M7CisgICAgKmlucHRyID0gKmlucHV0ICsgbmV3cG9zOworCisgICAgLyogd2UgbWFkZSBpdCEgKi8KKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gMDsKKworICBvbkVycm9yOgorICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOworICAgIHJldHVybiAtMTsKK30KKyNlbmRpZiAgIC8qIEhBVkVfTUJDUyAqLworCitzdGF0aWMgaW50Cit1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgY29uc3QgY2hhciAqZXJyb3JzLCBQeU9iamVjdCAqKmVycm9ySGFuZGxlciwKKyAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqcmVhc29uLAorICAgIGNvbnN0IGNoYXIgKippbnB1dCwgY29uc3QgY2hhciAqKmluZW5kLCBQeV9zc2l6ZV90ICpzdGFydGlucG9zLAorICAgIFB5X3NzaXplX3QgKmVuZGlucG9zLCBQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwgY29uc3QgY2hhciAqKmlucHRyLAorICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciAvKiBQeU9iamVjdCAqKm91dHB1dCwgUHlfc3NpemVfdCAqb3V0cG9zICovKQoreworICAgIHN0YXRpYyBjaGFyICphcmdwYXJzZSA9ICJPIW47ZGVjb2RpbmcgZXJyb3IgaGFuZGxlciBtdXN0IHJldHVybiAoc3RyLCBpbnQpIHR1cGxlIjsKKworICAgIFB5T2JqZWN0ICpyZXN0dXBsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcHVuaWNvZGUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgaW5zaXplOworICAgIFB5X3NzaXplX3QgbmV3cG9zOworICAgIFB5X3NzaXplX3QgcmVwbGVuOworICAgIFB5T2JqZWN0ICppbnB1dG9iaiA9IE5VTEw7CisKKyAgICBpZiAoKmVycm9ySGFuZGxlciA9PSBOVUxMKSB7CisgICAgICAgICplcnJvckhhbmRsZXIgPSBQeUNvZGVjX0xvb2t1cEVycm9yKGVycm9ycyk7CisgICAgICAgIGlmICgqZXJyb3JIYW5kbGVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgbWFrZV9kZWNvZGVfZXhjZXB0aW9uKGV4Y2VwdGlvbk9iamVjdCwKKyAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICppbnB1dCwgKmluZW5kIC0gKmlucHV0LAorICAgICAgICAqc3RhcnRpbnBvcywgKmVuZGlucG9zLAorICAgICAgICByZWFzb24pOworICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgIHJlc3R1cGxlID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncygqZXJyb3JIYW5kbGVyLCAqZXhjZXB0aW9uT2JqZWN0LCBOVUxMKTsKKyAgICBpZiAocmVzdHVwbGUgPT0gTlVMTCkKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIGlmICghUHlUdXBsZV9DaGVjayhyZXN0dXBsZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgJmFyZ3BhcnNlWzRdKTsKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUocmVzdHVwbGUsIGFyZ3BhcnNlLCAmUHlVbmljb2RlX1R5cGUsICZyZXB1bmljb2RlLCAmbmV3cG9zKSkKICAgICAgICAgZ290byBvbkVycm9yOwogCiAgICAgLyogQ29weSBiYWNrIHRoZSBieXRlcyB2YXJpYWJsZXMsIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZCBieSB0aGUKQEAgLTQxNjIsNTQgKzQxNzksMjUgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgIT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpIHsKLSAgICAgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCi0gICAgICAgICAgIGhhdmUrdGhlIHJlcGxhY2VtZW50K3RoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHN0YXJ0aW5nCi0gICAgICAgICAgIGF0IHRoZSBuZXcgaW5wdXQgcG9zaXRpb24pLCBzbyB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlCi0gICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLwotICAgICAgICBQeV9zc2l6ZV90IHJlcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcHVuaWNvZGUpOwotICAgICAgICByZXF1aXJlZHNpemUgPSAqb3V0cG9zICsgcmVwbGVuICsgaW5zaXplLW5ld3BvczsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IG91dHNpemUpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlZHNpemU8MipvdXRzaXplKQotICAgICAgICAgICAgICAgIHJlcXVpcmVkc2l6ZSA9IDIqb3V0c2l6ZTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShvdXRwdXQsIHJlcXVpcmVkc2l6ZSkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAodW5pY29kZV93aWRlbihvdXRwdXQsICpvdXRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShyZXB1bmljb2RlKSkgPCAwKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycygqb3V0cHV0LCAqb3V0cG9zLCByZXB1bmljb2RlLCAwLCByZXBsZW4pOwotICAgICAgICAqb3V0cG9zICs9IHJlcGxlbjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdjaGFyX3QgKnJlcHdzdHI7Ci0gICAgICAgIFB5X3NzaXplX3QgcmVwd2xlbjsKLSAgICAgICAgcmVwd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHJlcHVuaWNvZGUsICZyZXB3bGVuKTsKLSAgICAgICAgaWYgKHJlcHdzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCi0gICAgICAgICAgIGhhdmUrdGhlIHJlcGxhY2VtZW50K3RoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHN0YXJ0aW5nCi0gICAgICAgICAgIGF0IHRoZSBuZXcgaW5wdXQgcG9zaXRpb24pLCBzbyB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlCi0gICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLwotICAgICAgICByZXF1aXJlZHNpemUgPSAqb3V0cG9zICsgcmVwd2xlbiArIGluc2l6ZS1uZXdwb3M7Ci0gICAgICAgIGlmIChyZXF1aXJlZHNpemUgPiBvdXRzaXplKSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZWRzaXplIDwgMipvdXRzaXplKQotICAgICAgICAgICAgICAgIHJlcXVpcmVkc2l6ZSA9IDIqb3V0c2l6ZTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShvdXRwdXQsIHJlcXVpcmVkc2l6ZSkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfQotICAgICAgICB3Y3NuY3B5KF9QeVVuaWNvZGVfV1NUUigqb3V0cHV0KSArICpvdXRwb3MsIHJlcHdzdHIsIHJlcHdsZW4pOwotICAgICAgICAqb3V0cG9zICs9IHJlcHdsZW47Ci0gICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPCAwKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgcmVwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwdW5pY29kZSk7CisgICAgd3JpdGVyLT5taW5fbGVuZ3RoICs9IHJlcGxlbjsKKyAgICBpZiAocmVwbGVuID4gMSkKKyAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAxOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgcmVwdW5pY29kZSkgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKwogICAgICplbmRpbnBvcyA9IG5ld3BvczsKICAgICAqaW5wdHIgPSAqaW5wdXQgKyBuZXdwb3M7CiAKICAgICAvKiB3ZSBtYWRlIGl0ISAqLwotICAgIHJlcyA9IDA7CisgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7CisgICAgcmV0dXJuIDA7CiAKICAgb25FcnJvcjoKICAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiAtMTsKIH0KIAogLyogLS0tIFVURi03IENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MzE3LDkgKzQzMDUsOCBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAgICAgY29uc3QgY2hhciAqZTsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKICAgICBpbnQgaW5TaGlmdCA9IDA7CiAgICAgUHlfc3NpemVfdCBzaGlmdE91dFN0YXJ0OwpAQCAtNDMyOSwxNyArNDMxNiwxNyBAQAogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCi0gICAgLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGl0J3MgYWxsIEFTQ0lJLiBXaWRlbiBsYXRlciBhcyBuZWNlc3NhcnkuICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplID09IDApIHsKICAgICAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAgICAgKmNvbnN1bWVkID0gMDsKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotICAgIHNoaWZ0T3V0U3RhcnQgPSBvdXRwb3MgPSAwOworICAgIC8qIFN0YXJ0IG9mZiBhc3N1bWluZyBpdCdzIGFsbCBBU0NJSS4gV2lkZW4gbGF0ZXIgYXMgbmVjZXNzYXJ5LiAqLworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisKKyAgICBzaGlmdE91dFN0YXJ0ID0gMDsKICAgICBlID0gcyArIHNpemU7CiAKICAgICB3aGlsZSAocyA8IGUpIHsKQEAgLTQzNjIsMTMgKzQzNDksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4cGVjdGluZyBhIHNlY29uZCBzdXJyb2dhdGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUob3V0Q2gpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjaDIgPSBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUyhzdXJyb2dhdGUsIG91dENoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaDIpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gyKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHN1cnJvZ2F0ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQzNzgsNyArNDM2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBvdXRDaDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIG91dENoKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgb3V0Q2gpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00Mzg3LDcgKzQzNzQsNyBAQAogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwogICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICBpZiAoc3Vycm9nYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIHN1cnJvZ2F0ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgc3Vycm9nYXRlKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQwOCw3ICs0Mzk1LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qICctJyBpcyBhYnNvcmJlZDsgb3RoZXIgdGVybWluYXRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBhcmUgcHJlc2VydmVkICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0MTgsMjAgKzQ0MDUsMjAgQEAKICAgICAgICAgICAgIHMrKzsgLyogY29uc3VtZSAnKycgKi8KICAgICAgICAgICAgIGlmIChzIDwgZSAmJiAqcyA9PSAnLScpIHsgLyogJystJyBlbmNvZGVzICcrJyAqLwogICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCAnKycpIDwgMCkKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgJysnKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeyAvKiBiZWdpbiBiYXNlNjQtZW5jb2RlZCBzZWN0aW9uICovCiAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDE7Ci0gICAgICAgICAgICAgICAgc2hpZnRPdXRTdGFydCA9IG91dHBvczsKKyAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0ID0gd3JpdGVyLnBvczsKICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzID0gMDsKICAgICAgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKERFQ09ERV9ESVJFQ1QoY2gpKSB7IC8qIGNoYXJhY3RlciBkZWNvZGVzIGFzIGl0c2VsZiAqLwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CkBAIC00NDQyLDExICs0NDI5LDExIEBACiAgICAgICAgIGNvbnRpbnVlOwogdXRmN0Vycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGY3IiwgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCkBAIC00NDU4LDExICs0NDQ1LDExIEBACiAgICAgICAgICAgICAgICAgKGJhc2U2NGJpdHMgPj0gNikgfHwKICAgICAgICAgICAgICAgICAoYmFzZTY0Yml0cyA+IDAgJiYgYmFzZTY0YnVmZmVyICE9IDApKSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHNpemU7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJ1dGY3IiwgInVudGVybWluYXRlZCBzaGlmdCBzZXF1ZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBpZiAocyA8IGUpCiAgICAgICAgICAgICAgICAgZ290byByZXN0YXJ0OwpAQCAtNDQ3MywzMiArNDQ2MCwyOSBAQAogICAgIGlmIChjb25zdW1lZCkgewogICAgICAgICBpZiAoaW5TaGlmdCkgewogICAgICAgICAgICAgKmNvbnN1bWVkID0gc3RhcnRpbnBvczsKLSAgICAgICAgICAgIGlmIChvdXRwb3MgIT0gc2hpZnRPdXRTdGFydCAmJgotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh1bmljb2RlKSA+IDEyNykgeworICAgICAgICAgICAgaWYgKHdyaXRlci5wb3MgIT0gc2hpZnRPdXRTdGFydCAmJiB3cml0ZXIubWF4Y2hhciA+IDEyNykgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUtpbmRBbmREYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQodW5pY29kZSksIFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRPdXRTdGFydCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwotICAgICAgICAgICAgICAgIHVuaWNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHNoaWZ0T3V0U3RhcnQpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRwb3MgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICpjb25zdW1lZCA9IHMtc3RhcnRzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00NTgxLDcgKzQ1NjUsNyBAQAogCiAgICAgICAgICAgICAvKiBjb2RlIGZpcnN0IHN1cnJvZ2F0ZSAqLwogICAgICAgICAgICAgYmFzZTY0Yml0cyArPSAxNjsKLSAgICAgICAgICAgIGJhc2U2NGJ1ZmZlciA9IChiYXNlNjRidWZmZXIgPDwgMTYpIHwgMHhkODAwIHwgKChjaC0weDEwMDAwKSA+PiAxMCk7CisgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDE2KSB8IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgd2hpbGUgKGJhc2U2NGJpdHMgPj0gNikgewogICAgICAgICAgICAgICAgICpvdXQrKyA9IFRPX0JBU0U2NChiYXNlNjRidWZmZXIgPj4gKGJhc2U2NGJpdHMtNikpOwogICAgICAgICAgICAgICAgIGJhc2U2NGJpdHMgLT0gNjsKQEAgLTQ2ODIsOSArNDY2Niw5IEBACiAgICAgaWYgKF9QeV9JU19BTElHTkVEKHAsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAvKiBGYXN0IHBhdGgsIHNlZSBpbiBTVFJJTkdMSUIodXRmOF9kZWNvZGUpIGZvcgogICAgICAgICAgICBhbiBleHBsYW5hdGlvbi4gKi8KLSAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9wID0gcDsKLSAgICAgICAgcmVnaXN0ZXIgUHlfVUNTMSAqIHEgPSBkZXN0OworICAgICAgICAvKiBIZWxwIGFsbG9jYXRpb24gKi8KKyAgICAgICAgY29uc3QgY2hhciAqX3AgPSBwOworICAgICAgICBQeV9VQ1MxICogcSA9IGRlc3Q7CiAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgaWYgKHZhbHVlICYgQVNDSUlfQ0hBUl9NQVNLKQpAQCAtNDcwNyw4ICs0NjkxLDggQEAKICAgICAgICAgLyogRmFzdCBwYXRoLCBzZWUgaW4gU1RSSU5HTElCKHV0ZjhfZGVjb2RlKSBpbiBzdHJpbmdsaWIvY29kZWNzLmgKICAgICAgICAgICAgZm9yIGFuIGV4cGxhbmF0aW9uLiAqLwogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7Ci0gICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9wID0gcDsKKyAgICAgICAgICAgIC8qIEhlbHAgYWxsb2NhdGlvbiAqLworICAgICAgICAgICAgY29uc3QgY2hhciAqX3AgPSBwOwogICAgICAgICAgICAgd2hpbGUgKF9wIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKQEAgLTQ3MzMsMTAgKzQ3MTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmNvbnN1bWVkKQogewotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgY29uc3QgY2hhciAqZW5kID0gcyArIHNpemU7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKQEAgLTQ3NTcsMjkgKzQ3NDAsMjYgQEAKICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhcilzWzBdKTsKICAgICB9CiAKLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICBvdXRwb3MgPSBhc2NpaV9kZWNvZGUocywgZW5kLCBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSk7Ci0gICAgcyArPSBvdXRwb3M7CisgICAgd3JpdGVyLnBvcyA9IGFzY2lpX2RlY29kZShzLCBlbmQsIHdyaXRlci5kYXRhKTsKKyAgICBzICs9IHdyaXRlci5wb3M7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgUHlfVUNTNCBjaDsKLSAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSB3cml0ZXIua2luZDsKICAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCi0gICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXIuYnVmZmVyKSkKKyAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewotICAgICAgICAgICAgY2ggPSB1Y3MybGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOwotICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChjaCkgewpAQCAtNDgwMywzNSArNDc4MywzMSBAQAogICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgY2ggLSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGYtOCIsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCiBFbmQ6Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAqY29uc3VtZWQgPSBzIC0gc3RhcnRzOwogCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDg0MSw3ICs0ODE3LDcgQEAKICAgIHVzZWQgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9uIE1hYyBPUyBYLgogCiAgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyAodXNlCi0gICBQeU1lbV9GcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSwgb3IgTlVMTCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4gKi8KKyAgIFB5TWVtX1Jhd0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpLCBvciBOVUxMIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLiAqLwogCiB3Y2hhcl90KgogX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKQEAgLTQ4NTQsNyArNDgzMCw3IEBACiAgICAgICAgY2hhcmFjdGVyIGNvdW50ICovCiAgICAgaWYgKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpIDwgKHNpemUgKyAxKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgdW5pY29kZSA9IFB5TWVtX01hbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICB1bmljb2RlID0gUHlNZW1fUmF3TWFsbG9jKChzaXplICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghdW5pY29kZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTQ5NzcsMTcgKzQ5NTMsMTEgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEsICplOwotICAgIGludCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLworICAgIGludCBsZSwgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KKyAgICBjb25zdCBjaGFyICplbmNvZGluZzsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKLSAgICAvKiBPZmZzZXRzIGZyb20gcSBmb3IgcmV0cmlldmluZyBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KLSAgICBpbnQgaW9yZGVyW10gPSB7MCwgMSwgMiwgM307Ci0jZWxzZQotICAgIGludCBpb3JkZXJbXSA9IHszLCAyLCAxLCAwfTsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCkBAIC01MDAxLDEwNyArNDk3MSwxMTggQEAKICAgICAgICBieXRlIG9yZGVyIHNldHRpbmcgYWNjb3JkaW5nbHkuIEluIG5hdGl2ZSBtb2RlLCB0aGUgbGVhZGluZyBCT00KICAgICAgICBtYXJrIGlzIHNraXBwZWQsIGluIGFsbCBvdGhlciBtb2RlcywgaXQgaXMgY29waWVkIHRvIHRoZSBvdXRwdXQKICAgICAgICBzdHJlYW0gYXMtaXMgKGdpdmluZyBhIFpXTkJTUCBjaGFyYWN0ZXIpLiAqLwotICAgIGlmIChibyA9PSAwKSB7Ci0gICAgICAgIGlmIChzaXplID49IDQpIHsKLSAgICAgICAgICAgIGNvbnN0IFB5X1VDUzQgYm9tID0gKHFbaW9yZGVyWzNdXSA8PCAyNCkgfCAocVtpb3JkZXJbMl1dIDw8IDE2KSB8Ci0gICAgICAgICAgICAgICAgKHFbaW9yZGVyWzFdXSA8PCA4KSB8IHFbaW9yZGVyWzBdXTsKLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgotICAgICAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib20gPT0gMHhGRkZFMDAwMCkgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IDE7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGJvID09IDAgJiYgc2l6ZSA+PSA0KSB7CisgICAgICAgIFB5X1VDUzQgYm9tID0gKHFbM10gPDwgMjQpIHwgKHFbMl0gPDwgMTYpIHwgKHFbMV0gPDwgOCkgfCBxWzBdOworICAgICAgICBpZiAoYm9tID09IDB4MDAwMEZFRkYpIHsKKyAgICAgICAgICAgIGJvID0gLTE7CisgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYm9tID09IDB4RkZGRTAwMDApIHsKKyAgICAgICAgICAgIGJvID0gMTsKKyAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnl0ZW9yZGVyKQorICAgICAgICAgICAgKmJ5dGVvcmRlciA9IGJvOworICAgIH0KKworICAgIGlmIChxID09IGUpIHsKKyAgICAgICAgaWYgKGNvbnN1bWVkKQorICAgICAgICAgICAgKmNvbnN1bWVkID0gc2l6ZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisgICAgfQorCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgbGUgPSBibyA8IDA7CiAjZWxzZQotICAgICAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJvbSA9PSAweEZGRkUwMDAwKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gLTE7Ci0gICAgICAgICAgICB9CisgICAgbGUgPSBibyA8PSAwOwogI2VuZGlmCisgICAgZW5jb2RpbmcgPSBsZSA/ICJ1dGYtMzItbGUiIDogInV0Zi0zMi1iZSI7CisKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAoZSAtIHEgKyAzKSAvIDQ7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgUHlfVUNTNCBjaCA9IDA7CisgICAgICAgIFB5X1VDUzQgbWF4Y2ggPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUod3JpdGVyLmJ1ZmZlcik7CisKKyAgICAgICAgaWYgKGUgLSBxID49IDQpIHsKKyAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQga2luZCA9IHdyaXRlci5raW5kOworICAgICAgICAgICAgdm9pZCAqZGF0YSA9IHdyaXRlci5kYXRhOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFzdCA9IGUgLSA0OworICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSB3cml0ZXIucG9zOworICAgICAgICAgICAgaWYgKGxlKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBjaCA9IChxWzNdIDw8IDI0KSB8IChxWzJdIDw8IDE2KSB8IChxWzFdIDw8IDgpIHwgcVswXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID4gbWF4Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgcG9zKyssIGNoKTsKKyAgICAgICAgICAgICAgICAgICAgcSArPSA0OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHEgPD0gbGFzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKHFbMF0gPDwgMjQpIHwgKHFbMV0gPDwgMTYpIHwgKHFbMl0gPDwgOCkgfCBxWzNdOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPiBtYXhjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBwb3MrKywgY2gpOworICAgICAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocSA8PSBsYXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBwb3M7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoYm8gPT0gLTEpIHsKLSAgICAgICAgLyogZm9yY2UgTEUgKi8KLSAgICAgICAgaW9yZGVyWzBdID0gMDsKLSAgICAgICAgaW9yZGVyWzFdID0gMTsKLSAgICAgICAgaW9yZGVyWzJdID0gMjsKLSAgICAgICAgaW9yZGVyWzNdID0gMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYm8gPT0gMSkgewotICAgICAgICAvKiBmb3JjZSBCRSAqLwotICAgICAgICBpb3JkZXJbMF0gPSAzOwotICAgICAgICBpb3JkZXJbMV0gPSAyOwotICAgICAgICBpb3JkZXJbMl0gPSAxOwotICAgICAgICBpb3JkZXJbM10gPSAwOwotICAgIH0KLQotICAgIC8qIFRoaXMgbWlnaHQgYmUgb25lIHRvIG11Y2gsIGJlY2F1c2Ugb2YgYSBCT00gKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldygoc2l6ZSszKS80LCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7Ci0gICAgb3V0cG9zID0gMDsKLQotICAgIHdoaWxlIChxIDwgZSkgewotICAgICAgICBQeV9VQ1M0IGNoOwotICAgICAgICAvKiByZW1haW5pbmcgYnl0ZXMgYXQgdGhlIGVuZD8gKHNpemUgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0KSAqLwotICAgICAgICBpZiAoZS1xPDQpIHsKLSAgICAgICAgICAgIGlmIChjb25zdW1lZCkKKyAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgZXJybXNnID0gImNvZGVwb2ludCBpbiBzdXJyb2dhdGUgY29kZSBwb2ludCByYW5nZSgweGQ4MDAsIDB4ZTAwMCkiOworICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpIC0gc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgNDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaCA8PSBtYXhjaCkgeworICAgICAgICAgICAgaWYgKHEgPT0gZSB8fCBjb25zdW1lZCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8qIHJlbWFpbmluZyBieXRlcyBhdCB0aGUgZW5kPyAoc2l6ZSBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IDQpICovCiAgICAgICAgICAgICBlcnJtc2cgPSAidHJ1bmNhdGVkIGRhdGEiOwotICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpLXN0YXJ0czsKLSAgICAgICAgICAgIGVuZGlucG9zID0gKChjb25zdCBjaGFyICopZSktc3RhcnRzOwotICAgICAgICAgICAgZ290byB1dGYzMkVycm9yOwotICAgICAgICAgICAgLyogVGhlIHJlbWFpbmluZyBpbnB1dCBjaGFycyBhcmUgaWdub3JlZCBpZiB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgIGNob29zZXMgdG8gc2tpcCB0aGUgaW5wdXQgKi8KKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gKChjb25zdCBjaGFyICopZSkgLSBzdGFydHM7CiAgICAgICAgIH0KLSAgICAgICAgY2ggPSAocVtpb3JkZXJbM11dIDw8IDI0KSB8IChxW2lvcmRlclsyXV0gPDwgMTYpIHwKLSAgICAgICAgICAgIChxW2lvcmRlclsxXV0gPDwgOCkgfCBxW2lvcmRlclswXV07Ci0KLSAgICAgICAgaWYgKGNoID49IDB4MTEwMDAwKQotICAgICAgICB7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGNoIDwgMHgxMTAwMDApIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm1zZyA9ICJjb2RlcG9pbnQgbm90IGluIHJhbmdlKDB4MTEwMDAwKSI7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSktc3RhcnRzOwotICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzQ7Ci0gICAgICAgICAgICBnb3RvIHV0ZjMyRXJyb3I7CisgICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSkgLSBzdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyA0OwogICAgICAgICB9Ci0gICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIHEgKz0gNDsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB1dGYzMkVycm9yOgotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisKKyAgICAgICAgLyogVGhlIHJlbWFpbmluZyBpbnB1dCBjaGFycyBhcmUgaWdub3JlZCBpZiB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgY2hvb3NlcyB0byBza2lwIHRoZSBpbnB1dCAqLworICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAidXRmMzIiLCBlcnJtc2csCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAoY29uc3QgY2hhciAqKikmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgKGNvbnN0IGNoYXIgKiopJnEsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChieXRlb3JkZXIpCi0gICAgICAgICpieXRlb3JkZXIgPSBibzsKLQogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gKGNvbnN0IGNoYXIgKilxLXN0YXJ0czsKIAotICAgIC8qIEFkanVzdCBsZW5ndGggKi8KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01MTE5LDExICs1MTAwLDE1IEBACiAgICAgdW5zaWduZWQgY2hhciAqcDsKICAgICBQeV9zc2l6ZV90IG5zaXplLCBpOwogICAgIC8qIE9mZnNldHMgZnJvbSBwIGZvciBzdG9yaW5nIGJ5dGUgcGFpcnMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIGludCBpb3JkZXJbXSA9IHswLCAxLCAyLCAzfTsKICNlbHNlCiAgICAgaW50IGlvcmRlcltdID0gezMsIDIsIDEsIDB9OwogI2VuZGlmCisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CisgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcCA9IE5VTEw7CiAKICNkZWZpbmUgU1RPUkVDSEFSKENIKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUxNTUsNyArNTE0MCw3IEBACiAgICAgaWYgKGJ5dGVvcmRlciA9PSAwKQogICAgICAgICBTVE9SRUNIQVIoMHhGRUZGKTsKICAgICBpZiAobGVuID09IDApCi0gICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgcmV0dXJuIHY7CiAKICAgICBpZiAoYnl0ZW9yZGVyID09IC0xKSB7CiAgICAgICAgIC8qIGZvcmNlIExFICovCkBAIC01MTYzLDYgKzUxNDgsNyBAQAogICAgICAgICBpb3JkZXJbMV0gPSAxOwogICAgICAgICBpb3JkZXJbMl0gPSAyOwogICAgICAgICBpb3JkZXJbM10gPSAzOworICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiOwogICAgIH0KICAgICBlbHNlIGlmIChieXRlb3JkZXIgPT0gMSkgewogICAgICAgICAvKiBmb3JjZSBCRSAqLwpAQCAtNTE3MCwxMyArNTE1NiwxMDMgQEAKICAgICAgICAgaW9yZGVyWzFdID0gMjsKICAgICAgICAgaW9yZGVyWzJdID0gMTsKICAgICAgICAgaW9yZGVyWzNdID0gMDsKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTMyLWJlIjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzIiOworCisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgICAgU1RPUkVDSEFSKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKTsKKyAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICBTVE9SRUNIQVIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47KSB7CisgICAgICAgIFB5X3NzaXplX3QgcmVwc2l6ZSwgbW9yZXVuaXRzOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgYXNzZXJ0KGNoIDw9IE1BWF9VTklDT0RFKTsKKyAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKKyAgICAgICAgICAgIFNUT1JFQ0hBUihjaCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gIGRvbmU6CisgICAgICAgIHJlcCA9IHVuaWNvZGVfZW5jb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgICAgICAgIHN0ciwgJmV4YywgaS0xLCBpLCAmaSk7CisKKyAgICAgICAgaWYgKCFyZXApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIHJlcHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlcCk7CisgICAgICAgICAgICBpZiAocmVwc2l6ZSAmIDMpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpIC0gMSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgLyA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhyZXApKTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXApOworICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfSVNfQVNDSUkocmVwKSkgeworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIGkgLSAxLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogZm91ciBieXRlcyBhcmUgcmVzZXJ2ZWQgZm9yIGVhY2ggc3Vycm9nYXRlICovCisgICAgICAgIGlmIChtb3JldW5pdHMgPiAxKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG91dHBvcyA9IHAgLSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgUHlfc3NpemVfdCBtb3JlYnl0ZXMgPSA0ICogKG1vcmV1bml0cyAtIDEpOworICAgICAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodikgPiBQWV9TU0laRV9UX01BWCAtIG1vcmVieXRlcykgeworICAgICAgICAgICAgICAgIC8qIGludGVnZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZ2LCBQeUJ5dGVzX0dFVF9TSVpFKHYpICsgbW9yZWJ5dGVzKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHAgPSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpICsgb3V0cG9zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socmVwKSkgeworICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcCksIHJlcHNpemUpOworICAgICAgICAgICAgcCArPSByZXBzaXplOworICAgICAgICB9IGVsc2UgLyogcmVwIGlzIHVuaWNvZGUgKi8geworICAgICAgICAgICAgY29uc3QgUHlfVUNTMSAqcmVwZGF0YTsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChyZXApID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgICAgIHJlcGRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXApOworICAgICAgICAgICAgd2hpbGUgKHJlcHNpemUtLSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqcmVwZGF0YSsrOworICAgICAgICAgICAgICAgIFNUT1JFQ0hBUihjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQeV9DTEVBUihyZXApOworICAgIH0KKworICAgIC8qIEN1dCBiYWNrIHRvIHNpemUgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IsIGZvciBleGFtcGxlLAorICAgICAgIGVuY29kaW5nIG9mIGEgc3RyaW5nIGNvbnRhaW5pbmcgaXNvbGF0ZWQgc3Vycm9nYXRlcyBhbmQgdGhlICdpZ25vcmUnCisgICAgICAgaGFuZGxlciBpcyB1c2VkLiAqLworICAgIG5zaXplID0gcCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCisgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiB2OworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlcCk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIHJldHVybiBOVUxMOwogI3VuZGVmIFNUT1JFQ0hBUgogfQogCkBAIC01MjIyLDE0ICs1Mjk4LDE0IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZTsKICAgICBpbnQgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOwogCiAgICAgcSA9ICh1bnNpZ25lZCBjaGFyICopczsKICAgICBlID0gcSArIHNpemU7CkBAIC01MjYxLDQwICs1MzM3LDQyIEBACiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIG5hdGl2ZV9vcmRlcmluZyA9IGJvIDw9IDA7CisgICAgZW5jb2RpbmcgPSBibyA8PSAwID8gInV0Zi0xNi1sZSIgOiAidXRmLTE2LWJlIjsKICNlbHNlCiAgICAgbmF0aXZlX29yZGVyaW5nID0gYm8gPj0gMDsKKyAgICBlbmNvZGluZyA9IGJvID49IDAgPyAidXRmLTE2LWJlIiA6ICJ1dGYtMTYtbGUiOwogI2VuZGlmCiAKICAgICAvKiBOb3RlOiBzaXplIHdpbGwgYWx3YXlzIGJlIGxvbmdlciB0aGFuIHRoZSByZXN1bHRpbmcgVW5pY29kZQogICAgICAgIGNoYXJhY3RlciBjb3VudCAqLwotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KChlIC0gcSArIDEpIC8gMiwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChlIC0gcSArIDEpIC8gMjsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICBvdXRwb3MgPSAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIFB5X1VDUzQgY2ggPSAwOwogICAgICAgICBpZiAoZSAtIHEgPj0gMikgewotICAgICAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgICAgIGludCBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgICAgICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXIuYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzEqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKICAgICAgICAgICAgICAgICBjaCA9IHVjczJsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMiopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOwogICAgICAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0Kil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MzMwLDIzICs1NDA4LDIyIEBACiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLAogICAgICAgICAgICAgICAgICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgInV0ZjE2IiwgZXJybXNnLAorICAgICAgICAgICAgICAgIGVuY29kaW5nLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikmZSwKICAgICAgICAgICAgICAgICAmc3RhcnRpbnBvcywKICAgICAgICAgICAgICAgICAmZW5kaW5wb3MsCiAgICAgICAgICAgICAgICAgJmV4YywKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikmcSwKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwKLSAgICAgICAgICAgICAgICAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKQEAgLTUzNTQsMTYgKzU0MzEsMTIgQEAKICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICpjb25zdW1lZCA9IChjb25zdCBjaGFyICopcS1zdGFydHM7CiAKLSAgICAvKiBBZGp1c3QgbGVuZ3RoICovCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTM3OSwxMyArNTQ1MiwxNyBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIHNob3J0ICpvdXQ7Ci0gICAgUHlfc3NpemVfdCBieXRlc2l6ZTsKICAgICBQeV9zc2l6ZV90IHBhaXJzOwotI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2lmIFBZX0JJR19FTkRJQU4KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nID0gYnl0ZW9yZGVyID49IDA7CiAjZWxzZQogICAgIGludCBuYXRpdmVfb3JkZXJpbmcgPSBieXRlb3JkZXIgPD0gMDsKICNlbmRpZgorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworICAgIFB5X3NzaXplX3QgbnNpemUsIHBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVwID0gTlVMTDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHN0cikpIHsKICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKQEAgLTU0MDcsOCArNTQ4NCw4IEBACiAgICAgfQogICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSBwYWlycyAtIChieXRlb3JkZXIgPT0gMCkpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIGJ5dGVzaXplID0gKGxlbiArIHBhaXJzICsgKGJ5dGVvcmRlciA9PSAwKSkgKiAyOwotICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVzaXplKTsKKyAgICBuc2l6ZSA9IGxlbiArIHBhaXJzICsgKGJ5dGVvcmRlciA9PSAwKTsKKyAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBuc2l6ZSAqIDIpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC01NDIwLDI1ICs1NDk3LDEwNyBAQAogICAgIGlmIChsZW4gPT0gMCkKICAgICAgICAgZ290byBkb25lOwogCi0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewotICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1MxICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDogewotICAgICAgICB1Y3MybGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1MyICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDogewotICAgICAgICB1Y3M0bGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1M0ICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYXNzZXJ0KDApOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIHVjczFsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1MxICopZGF0YSwgbGVuLCAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCisgICAgaWYgKGJ5dGVvcmRlciA8IDApCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNi1sZSI7CisgICAgZWxzZSBpZiAoYnl0ZW9yZGVyID4gMCkKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWJlIjsKKyAgICBlbHNlCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNiI7CisKKyAgICBwb3MgPSAwOworICAgIHdoaWxlIChwb3MgPCBsZW4pIHsKKyAgICAgICAgUHlfc3NpemVfdCByZXBzaXplLCBtb3JldW5pdHM7CisKKyAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgIHBvcyArPSB1Y3MybGliX3V0ZjE2X2VuY29kZSgoY29uc3QgUHlfVUNTMiAqKWRhdGEgKyBwb3MsIGxlbiAtIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICAgICAgcG9zICs9IHVjczRsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1M0ICopZGF0YSArIHBvcywgbGVuIC0gcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvcyA9PSBsZW4pCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByZXAgPSB1bmljb2RlX2VuY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIiwKKyAgICAgICAgICAgICAgICBzdHIsICZleGMsIHBvcywgcG9zICsgMSwgJnBvcyk7CisgICAgICAgIGlmICghcmVwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICByZXBzaXplID0gUHlCeXRlc19HRVRfU0laRShyZXApOworICAgICAgICAgICAgaWYgKHJlcHNpemUgJiAxKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSAvIDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHJlcCkpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcCk7CisgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9JU19BU0NJSShyZXApKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogdHdvIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3IgZWFjaCBzdXJyb2dhdGUgKi8KKyAgICAgICAgaWYgKG1vcmV1bml0cyA+IDEpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0cG9zID0gb3V0IC0gKHVuc2lnbmVkIHNob3J0KikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG1vcmVieXRlcyA9IDIgKiAobW9yZXVuaXRzIC0gMSk7CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRSh2KSA+IFBZX1NTSVpFX1RfTUFYIC0gbW9yZWJ5dGVzKSB7CisgICAgICAgICAgICAgICAgLyogaW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnYsIFB5Qnl0ZXNfR0VUX1NJWkUodikgKyBtb3JlYnl0ZXMpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgb3V0ID0gKHVuc2lnbmVkIHNob3J0KikgUHlCeXRlc19BU19TVFJJTkcodikgKyBvdXRwb3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkob3V0LCBQeUJ5dGVzX0FTX1NUUklORyhyZXApLCByZXBzaXplKTsKKyAgICAgICAgICAgIG91dCArPSBtb3JldW5pdHM7CisgICAgICAgIH0gZWxzZSAvKiByZXAgaXMgdW5pY29kZSAqLyB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQocmVwKSA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7CisgICAgICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZShQeVVuaWNvZGVfMUJZVEVfREFUQShyZXApLCByZXBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dCwgbmF0aXZlX29yZGVyaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKHJlcCk7CisgICAgfQorCisgICAgLyogQ3V0IGJhY2sgdG8gc2l6ZSBhY3R1YWxseSBuZWVkZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciwgZm9yIGV4YW1wbGUsCisgICAgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgY29udGFpbmluZyBpc29sYXRlZCBzdXJyb2dhdGVzIGFuZCB0aGUgJ2lnbm9yZScgaGFuZGxlcgorICAgIGlzIHVzZWQuICovCisgICAgbnNpemUgPSAodW5zaWduZWQgY2hhciopIG91dCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCisgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOwogICBkb25lOgogICAgIHJldHVybiB2OworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlcCk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIHJldHVybiBOVUxMOworI3VuZGVmIFNUT1JFQ0hBUgogfQogCiBQeU9iamVjdCAqCkBAIC01NTI5LDI3ICs1Njg4LDI2IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgY2hhciogbWVzc2FnZTsKICAgICBQeV9VQ1M0IGNociA9IDB4ZmZmZmZmZmY7IC8qIGluIGNhc2UgJ2dldGNvZGUnIG1lc3NlcyB1cCAqLwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGxlbiA9IGxlbmd0aF9vZl9lc2NhcGVkX2FzY2lpX3N0cmluZyhzLCBzaXplKTsKKyAgICBpZiAobGVuID09IDApCisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogCiAgICAgLyogQWZ0ZXIgbGVuZ3RoX29mX2VzY2FwZWRfYXNjaWlfc3RyaW5nKCkgdGhlcmUgYXJlIHR3byBhbHRlcm5hdGl2ZXMsCiAgICAgICAgZWl0aGVyIHRoZSBzdHJpbmcgaXMgcHVyZSBBU0NJSSB3aXRoIG5hbWVkIGVzY2FwZXMgbGlrZSBcbiwgZXRjLgogICAgICAgIGFuZCB3ZSBkZXRlcm1pbmVkIGl0J3MgZXhhY3Qgc2l6ZSAoY29tbW9uIGNhc2UpCiAgICAgICAgb3IgaXQgY29udGFpbnMgXHgsIFx1LCAuLi4gZXNjYXBlIHNlcXVlbmNlcy4gIHRoZW4gd2UgY3JlYXRlIGEKICAgICAgICBsZWdhY3kgd2NoYXIgc3RyaW5nIGFuZCByZXNpemUgaXQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLiAqLwotICAgIGlmIChsZW4gPj0gMCkgewotICAgICAgICB2ID0gUHlVbmljb2RlX05ldyhsZW4sIDEyNyk7Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHYpID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBsZW47CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBFc2NhcGVkIHN0cmluZ3Mgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZwpAQCAtNTU1NywxNSArNTcxNSwxMSBAQAogICAgICAgICAgICBsZW5ndGggYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgdHJ1ZSB2YWx1ZS4KICAgICAgICAgICAgKGJ1dCBpZiB0aGUgZXJyb3IgY2FsbGJhY2sgcmV0dXJucyBhIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nCiAgICAgICAgICAgIHdlJ2xsIGhhdmUgdG8gYWxsb2NhdGUgbW9yZSBzcGFjZSkgKi8KLSAgICAgICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBsZW4gPSBzaXplOworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CiAgICAgfQogCiAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgaSA9IDA7CisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKICAgICBlbmQgPSBzICsgc2l6ZTsKIAogICAgIHdoaWxlIChzIDwgZW5kKSB7CkBAIC01NTczLDEzICs1NzI3LDExIEBACiAgICAgICAgIFB5X1VDUzQgeDsKICAgICAgICAgaW50IGRpZ2l0czsKIAotICAgICAgICAvKiBUaGUgb25seSBjYXNlIGluIHdoaWNoIGkgPT0gYXNjaWlfbGVuZ3RoIGlzIGEgYmFja3NsYXNoCi0gICAgICAgICAgIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gKi8KLSAgICAgICAgYXNzZXJ0KGkgPD0gbGVuKTsKLQogICAgICAgICAvKiBOb24tZXNjYXBlIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIFVuaWNvZGUgb3JkaW5hbHMgKi8KICAgICAgICAgaWYgKCpzICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZpLCAodW5zaWduZWQgY2hhcikgKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzOworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTU5MSwxOCArNTc0MywxNCBAQAogICAgICAgICBpZiAocyA+IGVuZCkKICAgICAgICAgICAgIGMgPSAnXDAnOyAvKiBJbnZhbGlkIGFmdGVyIFwgKi8KIAotICAgICAgICAvKiBUaGUgb25seSBjYXNlIGluIHdoaWNoIGkgPT0gYXNjaWlfbGVuZ3RoIGlzIGEgYmFja3NsYXNoCi0gICAgICAgICAgIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gKi8KLSAgICAgICAgYXNzZXJ0KGkgPCBsZW4gfHwgKGkgPT0gbGVuICYmIGMgPT0gJ1xuJykpOwotCiAgICAgICAgIHN3aXRjaCAoYykgewogCiAgICAgICAgICAgICAvKiBceCBlc2NhcGVzICovCi0jZGVmaW5lIFdSSVRFQ0hBUihjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZpLCBjaCkgPCAwKSAgICBcCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH13aGlsZSgwKQorI2RlZmluZSBXUklURUNIQVIoY2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCAoY2gpKSA8IDApICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogICAgICAgICBjYXNlICdcbic6IGJyZWFrOwogICAgICAgICBjYXNlICdcXCc6IFdSSVRFQ0hBUignXFwnKTsgYnJlYWs7CkBAIC01NzI2LDM1ICs1ODc0LDMyIEBACiAKICAgICAgIGVycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1bmljb2RlZXNjYXBlIiwgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdiwgJmkpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KTsKICAgICAgICAgY29udGludWU7CiAgICAgfQogI3VuZGVmIFdSSVRFQ0hBUgogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBpKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgdWNuaGFzaEVycm9yOgogICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgUHlFeGNfVW5pY29kZUVycm9yLAogICAgICAgICAiXFxOIGVzY2FwZXMgbm90IHN1cHBvcnRlZCAoY2FuJ3QgbG9hZCB1bmljb2RlZGF0YSBtb2R1bGUpIgogICAgICAgICApOwotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTkwNywyMyArNjA1MiwyMiBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZW5kOwogICAgIGNvbnN0IGNoYXIgKmJzOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisKICAgICAvKiBFc2NhcGVkIHN0cmluZ3Mgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZwogICAgICAgIFVuaWNvZGUgc3RyaW5nLCBzbyB3ZSBzdGFydCB3aXRoIHNpemUgaGVyZSBhbmQgdGhlbiByZWR1Y2UgdGhlCiAgICAgICAgbGVuZ3RoIGFmdGVyIGNvbnZlcnNpb24gdG8gdGhlIHRydWUgdmFsdWUuIChCdXQgZGVjb2RpbmcgZXJyb3IKICAgICAgICBoYW5kbGVyIG1pZ2h0IGhhdmUgdG8gcmVzaXplIHRoZSBzdHJpbmcpICovCi0gICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgb3V0cG9zID0gMDsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworCiAgICAgZW5kID0gcyArIHNpemU7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjOwpAQCAtNTkzMyw3ICs2MDc3LDggQEAKIAogICAgICAgICAvKiBOb24tZXNjYXBlIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIFVuaWNvZGUgb3JkaW5hbHMgKi8KICAgICAgICAgaWYgKCpzICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsICh1bnNpZ25lZCBjaGFyKSpzKyspIDwgMCkKKyAgICAgICAgICAgIHggPSAodW5zaWduZWQgY2hhcikqcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTk0NSw3ICs2MDkwLDggQEAKICAgICAgICAgZm9yICg7cyA8IGVuZDspIHsKICAgICAgICAgICAgIGlmICgqcyAhPSAnXFwnKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgKHVuc2lnbmVkIGNoYXIpKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBpZiAoKChzIC0gYnMpICYgMSkgPT0gMCB8fApAQCAtNTk1Myw3ICs2MDk5LDcgQEAKICAgICAgICAgICAgICgqcyAhPSAndScgJiYgKnMgIT0gJ1UnKSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0cG9zLS07CisgICAgICAgIHdyaXRlci5wb3MtLTsKICAgICAgICAgY291bnQgPSAqcz09J3UnID8gNCA6IDg7CiAgICAgICAgIHMrKzsKIApAQCAtNTk2MiwxMSArNjEwOCwxMSBAQAogICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOwogICAgICAgICAgICAgaWYgKCFQeV9JU1hESUdJVChjKSkgewogICAgICAgICAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAicmF3dW5pY29kZWVzY2FwZSIsICJ0cnVuY2F0ZWQgXFx1WFhYWCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgZ290byBuZXh0Qnl0ZTsKICAgICAgICAgICAgIH0KQEAgLTU5NzksMjggKzYxMjUsMjcgQEAKICAgICAgICAgICAgICAgICB4ICs9IDEwICsgYyAtICdBJzsKICAgICAgICAgfQogICAgICAgICBpZiAoeCA8PSBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgeCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAicmF3dW5pY29kZWVzY2FwZSIsICJcXFV4eHh4eHh4eCBvdXQgb2YgcmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgIG5leHRCeXRlOgogICAgICAgICA7CiAgICAgfQotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjEwMCw4ICs2MjQ1LDcgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBjb25zdCBjaGFyICpyZWFzb247CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CkBAIC02MTEyLDE1ICs2MjU2LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAxKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBYWFggb3ZlcmZsb3cgZGV0ZWN0aW9uIG1pc3NpbmcgKi8KLSAgICB2ID0gUHlVbmljb2RlX05ldygoc2l6ZStQeV9VTklDT0RFX1NJWkUtMSkvIFB5X1VOSUNPREVfU0laRSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIG91dHBvcyA9IDA7Ci0gICAgZW5kID0gcyArIHNpemU7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgaWYgKHNpemUgLyBQeV9VTklDT0RFX1NJWkUgPiBQWV9TU0laRV9UX01BWCAtIDEpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChzaXplICsgKFB5X1VOSUNPREVfU0laRSAtIDEpKSAvIFB5X1VOSUNPREVfU0laRTsKKworICAgIGVuZCA9IHMgKyBzaXplOwogICAgIHdoaWxlIChzIDwgZW5kKSB7CiAgICAgICAgIFB5X1VOSUNPREUgdWNoOwogICAgICAgICBQeV9VQ1M0IGNoOwpAQCAtNjE2MiwyOCArNjMwOCwyNiBAQAogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgY29udGludWU7CiAKICAgZXJyb3I6CiAgICAgICAgIHN0YXJ0aW5wb3MgPSBzIC0gc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1bmljb2RlX2ludGVybmFsIiwgcmVhc29uLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTY1NDYsNyArNjY5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgaW50IGtpbmQ7CiAgICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CkBAIC02NTYzLDQ2ICs2NzA3LDQ2IEBACiAgICAgaWYgKHNpemUgPT0gMSAmJiAodW5zaWduZWQgY2hhcilzWzBdIDwgMTI4KQogICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKXNbMF0pOwogCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodW5pY29kZSA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlID0gcyArIHNpemU7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpOworICAgIGRhdGEgPSB3cml0ZXIuZGF0YTsKICAgICBvdXRwb3MgPSBhc2NpaV9kZWNvZGUocywgZSwgKFB5X1VDUzEgKilkYXRhKTsKLSAgICBpZiAob3V0cG9zID09IHNpemUpCi0gICAgICAgIHJldHVybiB1bmljb2RlOworICAgIHdyaXRlci5wb3MgPSBvdXRwb3M7CisgICAgaWYgKHdyaXRlci5wb3MgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCi0gICAgcyArPSBvdXRwb3M7Ci0gICAga2luZCA9IFB5VW5pY29kZV8xQllURV9LSU5EOworICAgIHMgKz0gd3JpdGVyLnBvczsKKyAgICBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikqczsKICAgICAgICAgaWYgKGMgPCAxMjgpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBvdXRwb3MrKywgYyk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgd3JpdGVyLnBvcywgYyk7CisgICAgICAgICAgICB3cml0ZXIucG9zKys7CiAgICAgICAgICAgICArK3M7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAxOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAiYXNjaWkiLCAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7Ci0gICAgICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAgICAgICAgICBraW5kID0gd3JpdGVyLmtpbmQ7CisgICAgICAgICAgICBkYXRhID0gd3JpdGVyLmRhdGE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7Ci0gICAgcmV0dXJuIHVuaWNvZGU7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTY2MzQsNyArNjc3OCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIEZhc3QgcGF0aDogaWYgaXQgaXMgYW4gQVNDSUktb25seSBzdHJpbmcsIGNvbnN0cnVjdCBieXRlcyBvYmplY3QKICAgICAgICBkaXJlY3RseS4gRWxzZSBkZWZlciB0byBhYm92ZSBmdW5jdGlvbiB0byByYWlzZSB0aGUgZXhjZXB0aW9uLiAqLwotICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodW5pY29kZSkgPCAxMjgpCisgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaWNvZGUpKTsKICAgICByZXR1cm4gdW5pY29kZV9lbmNvZGVfdWNzMSh1bmljb2RlLCBlcnJvcnMsIDEyOCk7CkBAIC02NzEyLDggKzY4NTYsOCBAQAogICogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgZnJvbSBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gdW5pY29kZSBvYmplY3QgaW4gc3RyaWN0CiAgKiBtb2RlLgogICoKLSAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGRlY29kZSBlcnJvciwgb3IgcmFpc2UgYQotICogV2luZG93c0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgorICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZGVjb2RlIGVycm9yLCBvciByYWlzZSBhbgorICogT1NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludAogZGVjb2RlX2NvZGVfcGFnZV9zdHJpY3QoVUlOVCBjb2RlX3BhZ2UsCkBAIC02NzY0LDcgKzY5MDgsNyBAQAogICogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgZnJvbSBhIGNvZGUgcGFnZSBpbnRvIHVuaWNvZGUgb2JqZWN0IHdpdGggYW4gZXJyb3IKICAqIGhhbmRsZXIuCiAgKgotICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGEgV2luZG93c0Vycm9yIG9yCisgKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYW4gT1NFcnJvciBvcgogICogVW5pY29kZURlY29kZUVycm9yIGV4Y2VwdGlvbiBhbmQgcmV0dXJucyAtMSBvbiBlcnJvci4KICAqLwogc3RhdGljIGludApAQCAtNjc4Myw3ICs2OTI3LDggQEAKICAgICAvKiBlYWNoIHN0ZXAgY2Fubm90IGRlY29kZSBtb3JlIHRoYW4gMSBjaGFyYWN0ZXIsIGJ1dCBhIGNoYXJhY3RlciBjYW4gYmUKICAgICAgICByZXByZXNlbnRlZCBhcyBhIHN1cnJvZ2F0ZSBwYWlyICovCiAgICAgd2NoYXJfdCBidWZmZXJbMl0sICpzdGFydG91dCwgKm91dDsKLSAgICBpbnQgaW5zaXplLCBvdXRzaXplOworICAgIGludCBpbnNpemU7CisgICAgUHlfc3NpemVfdCBvdXRzaXplOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICplbmNvZGluZ19vYmogPSBOVUxMOwpAQCAtNjg2Myw3ICs3MDA4LDcgQEAKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBpbiAtIHN0YXJ0aW47CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAxOwogICAgICAgICAgICAgb3V0cG9zID0gb3V0IC0gUHlVbmljb2RlX0FTX1VOSUNPREUoKnYpOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3djaGFyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCByZWFzb24sCiAgICAgICAgICAgICAgICAgICAgICZzdGFydGluLCAmZW5kaW4sICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZpbiwKQEAgLTcwMTksNyArNzE2NCw3IEBACiAgKiBtb2RlLgogICoKICAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGVuY29kZSBlcnJvciwgb3IgcmFpc2UKLSAqIGEgV2luZG93c0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgorICogYW4gT1NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludAogZW5jb2RlX2NvZGVfcGFnZV9zdHJpY3QoVUlOVCBjb2RlX3BhZ2UsIFB5T2JqZWN0ICoqb3V0Ynl0ZXMsCkBAIC03MDUzLDEwICs3MTk4LDExIEBACiAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGFzc2VydChzaXplIDw9IElOVF9NQVgpOwogCiAgICAgLyogRmlyc3QgZ2V0IHRoZSBzaXplIG9mIHRoZSByZXN1bHQgKi8KICAgICBvdXRzaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlX3BhZ2UsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgKGludClzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcHVzZWREZWZhdWx0Q2hhcik7CiAgICAgaWYgKG91dHNpemUgPD0gMCkKQEAgLTcwOTMsNyArNzIzOSw3IEBACiAKICAgICAvKiBEbyB0aGUgY29udmVyc2lvbiAqLwogICAgIG91dHNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGNvZGVfcGFnZSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAoaW50KXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBvdXRzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHB1c2VkRGVmYXVsdENoYXIpOwogICAgIFB5X0NMRUFSKHN1YnN0cmluZyk7CkBAIC03MTE1LDcgKzcyNjEsNyBAQAogICogRW5jb2RlIGEgVW5pY29kZSBzdHJpbmcgdG8gYSBXaW5kb3dzIGNvZGUgcGFnZSBpbnRvIGEgYnl0ZSBzdHJpbmcgdXNpbmcgYQogICogZXJyb3IgaGFuZGxlci4KICAqCi0gKiBSZXR1cm5zIGNvbnN1bWVkIGNoYXJhY3RlcnMgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYSBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMKKyAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCBvciByYWlzZSBhbiBPU0Vycm9yIGFuZCByZXR1cm5zCiAgKiAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludApAQCAtNzIwMSw5ICs3MzQ3LDggQEAKICAgICAgICAgICAgIGNoYXJzaXplID0gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoIC09IDB4MTAwMDA7Ci0gICAgICAgICAgICBjaGFyc1swXSA9IDB4ZDgwMCArIChjaCA+PiAxMCk7Ci0gICAgICAgICAgICBjaGFyc1sxXSA9IDB4ZGMwMCArIChjaCAmIDB4M2ZmKTsKKyAgICAgICAgICAgIGNoYXJzWzBdID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CisgICAgICAgICAgICBjaGFyc1sxXSA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICBjaGFyc2l6ZSA9IDI7CiAgICAgICAgIH0KIApAQCAtNzM5NiwyMjAgKzc1NDEsMjU4IEBACiAKIC8qIC0tLSBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgaW50CitjaGFybWFwX2RlY29kZV9zdHJpbmcoY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgUHlfc3NpemVfdCBzdGFydGlucG9zLCBlbmRpbnBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTCwgKmV4YyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBtYXBsZW47CisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBtYXBraW5kOworICAgIHZvaWQgKm1hcGRhdGE7CisgICAgUHlfVUNTNCB4OworICAgIHVuc2lnbmVkIGNoYXIgY2g7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKG1hcHBpbmcpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtYXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChtYXBwaW5nKTsKKyAgICBtYXBkYXRhID0gUHlVbmljb2RlX0RBVEEobWFwcGluZyk7CisgICAgbWFwa2luZCA9IFB5VW5pY29kZV9LSU5EKG1hcHBpbmcpOworCisgICAgZSA9IHMgKyBzaXplOworCisgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgeworICAgICAgICAvKiBmYXN0LXBhdGggZm9yIGNwMDM3LCBjcDUwMCBhbmQgaXNvODg1OV8xIGVuY29kaW5ncy4gaXNvODg1OV8xCisgICAgICAgICAqIGlzIGRpc2FibGVkIGluIGVuY29kaW5nIGFsaWFzZXMsIGxhdGluMSBpcyBwcmVmZXJyZWQgYmVjYXVzZQorICAgICAgICAgKiBpdHMgaW1wbGVtZW50YXRpb24gaXMgZmFzdGVyLiAqLworICAgICAgICBQeV9VQ1MxICptYXBkYXRhX3VjczEgPSAoUHlfVUNTMSAqKW1hcGRhdGE7CisgICAgICAgIFB5X1VDUzEgKm91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworCisgICAgICAgIGFzc2VydCAod3JpdGVyLT5raW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICBjaCA9ICpzOworICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMVtjaF07CisgICAgICAgICAgICBpZiAoeCA+IG1heGNoYXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgMSwgMHhmZikgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgICAgICAgICAgICAgIG91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICArK3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKKyAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgb3V0a2luZCA9IHdyaXRlci0+a2luZDsKKyAgICAgICAgICAgIFB5X1VDUzIgKm1hcGRhdGFfdWNzMiA9IChQeV9VQ1MyICopbWFwZGF0YTsKKyAgICAgICAgICAgIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMSAqb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqczsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMltjaF07CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgKytzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MyICpvdXRkYXRhID0gKFB5X1VDUzIgKil3cml0ZXItPmRhdGE7CisgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKnM7CisgICAgICAgICAgICAgICAgICAgIHggPSBtYXBkYXRhX3VjczJbY2hdOworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAweEZGRkUpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOworICAgICAgICAgICAgICAgICAgICBvdXRkYXRhW3dyaXRlci0+cG9zXSA9IHg7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICAgICAgICAgICsrczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2ggPSAqczsKKworICAgICAgICBpZiAoY2ggPCBtYXBsZW4pCisgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQobWFwa2luZCwgbWFwZGF0YSwgY2gpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4ID0gMHhmZmZlOyAvKiBpbnZhbGlkIHZhbHVlICovCitFcnJvcjoKKyAgICAgICAgaWYgKHggPT0gMHhmZmZlKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLworICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7CisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKKyAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgICAgICB3cml0ZXIpKSB7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB4KSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICsrczsKKyAgICB9CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gMDsKKworb25FcnJvcjoKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAorY2hhcm1hcF9kZWNvZGVfbWFwcGluZyhjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgUHlfc3NpemVfdCBzdGFydGlucG9zLCBlbmRpbnBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTCwgKmV4YyA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKyAgICBQeU9iamVjdCAqa2V5LCAqaXRlbSA9IE5VTEw7CisKKyAgICBlID0gcyArIHNpemU7CisKKyAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgY2ggPSAqczsKKworICAgICAgICAvKiBHZXQgbWFwcGluZyAoY2hhciBvcmRpbmFsIC0+IGludGVnZXIsIFVuaWNvZGUgY2hhciBvciBOb25lKSAqLworICAgICAgICBrZXkgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpY2gpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICAgICAgaXRlbSA9IFB5T2JqZWN0X0dldEl0ZW0obWFwcGluZywga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0xvb2t1cEVycm9yKSkgeworICAgICAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcgZm91bmQgbWVhbnM6IG1hcHBpbmcgaXMgdW5kZWZpbmVkLiAqLworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvKiBBcHBseSBtYXBwaW5nICovCisgICAgICAgIGlmIChpdGVtID09IFB5X05vbmUpCisgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgbG9uZyB2YWx1ZSA9IFB5TG9uZ19BU19MT05HKGl0ZW0pOworICAgICAgICAgICAgaWYgKHZhbHVlID09IDB4RkZGRSkKKyAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfVU5JQ09ERSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JWx4KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKU1BWF9VTklDT0RFICsgMSk7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaXRlbSkgPT0gLTEpCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pID09IDEpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IHZhbHVlID0gUHlVbmljb2RlX1JFQURfQ0hBUihpdGVtLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQorICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBpdGVtKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogd3JvbmcgcmV0dXJuIHZhbHVlICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IHJldHVybiBpbnRlZ2VyLCBOb25lIG9yIHN0ciIpOworICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGl0ZW0pOworICAgICAgICArK3M7CisgICAgICAgIGNvbnRpbnVlOworCitVbmRlZmluZWQ6CisgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCisgICAgICAgIFB5X0NMRUFSKGl0ZW0pOworICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CisgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOworICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCisgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgIHdyaXRlcikpIHsKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAwOworCitvbkVycm9yOgorICAgIFB5X1hERUNSRUYoaXRlbSk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gLTE7Cit9CisKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwKGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKLSAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwotICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKLSAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIGNvbnN0IGNoYXIgKmU7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgUHlfc3NpemVfdCBleHRyYWNoYXJzID0gMDsKLSAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAogICAgIC8qIERlZmF1bHQgdG8gTGF0aW4tMSAqLwogICAgIGlmIChtYXBwaW5nID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHMsIHNpemUsIGVycm9ycyk7CiAKLSAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBvdXRwb3MgPSAwOwotICAgIGUgPSBzICsgc2l6ZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobWFwcGluZykpIHsKLSAgICAgICAgUHlfc3NpemVfdCBtYXBsZW47Ci0gICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgbWFwa2luZDsKLSAgICAgICAgdm9pZCAqbWFwZGF0YTsKLSAgICAgICAgUHlfVUNTNCB4OwotCi0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobWFwcGluZykgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBtYXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChtYXBwaW5nKTsKLSAgICAgICAgbWFwZGF0YSA9IFB5VW5pY29kZV9EQVRBKG1hcHBpbmcpOwotICAgICAgICBtYXBraW5kID0gUHlVbmljb2RlX0tJTkQobWFwcGluZyk7Ci0gICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaDsKLSAgICAgICAgICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKLSAgICAgICAgICAgICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG91dGtpbmQgPSBQeVVuaWNvZGVfS0lORCh2KTsKLSAgICAgICAgICAgICAgICBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRkYXRhID0gUHlVbmljb2RlX0RBVEEodik7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh2KTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV8xQllURV9LSU5ELCBvdXRkYXRhLCBvdXRwb3MrKywgeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0ZGF0YSA9IFB5VW5pY29kZV9EQVRBKHYpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChQeVVuaWNvZGVfMkJZVEVfS0lORCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG91dGRhdGEsIG91dHBvcysrLCB4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaCA9ICpzOwotCi0gICAgICAgICAgICBpZiAoY2ggPCBtYXBsZW4pCi0gICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKG1hcGtpbmQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4ID0gMHhmZmZlOyAvKiBpbnZhbGlkIHZhbHVlICovCi1FcnJvcjoKLSAgICAgICAgICAgIGlmICh4ID09IDB4ZmZmZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLwotICAgICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgeCkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICsrczsKLSAgICAgICAgfQorICAgICAgICBpZiAoY2hhcm1hcF9kZWNvZGVfc3RyaW5nKHMsIHNpemUsIG1hcHBpbmcsIGVycm9ycywgJndyaXRlcikgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdywgKng7Ci0KLSAgICAgICAgICAgIC8qIEdldCBtYXBwaW5nIChjaGFyIG9yZGluYWwgLT4gaW50ZWdlciwgVW5pY29kZSBjaGFyIG9yIE5vbmUpICovCi0gICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKWNoKTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0obWFwcGluZywgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTG9va3VwRXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcgZm91bmQgbWVhbnM6IG1hcHBpbmcgaXMgdW5kZWZpbmVkLiAqLwotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBBcHBseSBtYXBwaW5nICovCi0gICAgICAgICAgICBpZiAoeCA9PSBQeV9Ob25lKQotICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh4KSkgewotICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUgPSBQeUxvbmdfQVNfTE9ORyh4KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gTUFYX1VOSUNPREUpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JWx4KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylNQVhfVU5JQ09ERSArIDEpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgdmFsdWUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soeCkpIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHRhcmdldHNpemU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHgpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0YXJnZXRzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoeCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0c2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDEtMSBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdmFsdWUgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHgsIDApOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIHZhbHVlKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXRzaXplID4gMSkgewotICAgICAgICAgICAgICAgICAgICAvKiAxLW4gbWFwcGluZyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0c2l6ZSA+IGV4dHJhY2hhcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2l6ZSBmaXJzdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuZWVkZWQgPSAodGFyZ2V0c2l6ZSAtIGV4dHJhY2hhcnMpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXRzaXplIDw8IDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjaGFycyArPSBuZWVkZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFggb3ZlcmZsb3cgZGV0ZWN0aW9uIG1pc3NpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSArIG5lZWRlZCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfd2lkZW4oJnYsIG91dHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHgpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29weUNoYXJhY3RlcnModiwgb3V0cG9zLCB4LCAwLCB0YXJnZXRzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0cG9zICs9IHRhcmdldHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJhY2hhcnMgLT0gdGFyZ2V0c2l6ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogMS0wIG1hcHBpbmc6IHNraXAgdGhlIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogd3JvbmcgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgcmV0dXJuIGludGVnZXIsIE5vbmUgb3Igc3RyIik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotVW5kZWZpbmVkOgotICAgICAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KLSAgICAgICAgICAgIFB5X1hERUNSRUYoeCk7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCi0gICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKSB7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGlmIChjaGFybWFwX2RlY29kZV9tYXBwaW5nKHMsIHNpemUsIG1hcHBpbmcsIGVycm9ycywgJndyaXRlcikgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwotICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwotICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODEyMywxMCArODMwNiwxNCBAQAogICAgICAqIC0xPW5vdCBpbml0aWFsaXplZCwgMD11bmtub3duLCAxPXN0cmljdCwgMj1yZXBsYWNlLAogICAgICAqIDM9aWdub3JlLCA0PXhtbGNoYXJyZWZyZXBsYWNlICovCiAgICAgaW50IGtub3duX2Vycm9ySGFuZGxlciA9IC0xOworICAgIHZvaWQgKmRhdGE7CisgICAgaW50IGtpbmQ7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKIAogICAgIC8qIERlZmF1bHQgdG8gTGF0aW4tMSAqLwogICAgIGlmIChtYXBwaW5nID09IE5VTEwpCkBAIC04MTQxLDcgKzgzMjgsNyBAQAogICAgICAgICByZXR1cm4gcmVzOwogCiAgICAgd2hpbGUgKGlucG9zPHNpemUpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgaW5wb3MpOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5wb3MpOwogICAgICAgICAvKiB0cnkgdG8gZW5jb2RlIGl0ICovCiAgICAgICAgIGNoYXJtYXBlbmNvZGVfcmVzdWx0IHggPSBjaGFybWFwZW5jb2RlX291dHB1dChjaCwgbWFwcGluZywgJnJlcywgJnJlc3Bvcyk7CiAgICAgICAgIGlmICh4PT1lbmNfRVhDRVBUSU9OKSAvKiBlcnJvciAqLwpAQCAtODIyNiwxOSArODQxMyw2IEBACiAgICAgfQogfQogCi0vKiByYWlzZXMgYSBVbmljb2RlVHJhbnNsYXRlRXJyb3IgKi8KLXN0YXRpYyB2b2lkCi1yYWlzZV90cmFuc2xhdGVfZXhjZXB0aW9uKFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydHBvcywgUHlfc3NpemVfdCBlbmRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikKLXsKLSAgICBtYWtlX3RyYW5zbGF0ZV9leGNlcHRpb24oZXhjZXB0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlLCBzdGFydHBvcywgZW5kcG9zLCByZWFzb24pOwotICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ICE9IE5VTEwpCi0gICAgICAgIFB5Q29kZWNfU3RyaWN0RXJyb3JzKCpleGNlcHRpb25PYmplY3QpOwotfQotCiAvKiBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBoZWxwZXI6CiAgICBidWlsZCBhcmd1bWVudHMsIGNhbGwgdGhlIGNhbGxiYWNrIGFuZCBjaGVjayB0aGUgYXJndW1lbnRzLAogICAgcHV0IHRoZSByZXN1bHQgaW50byBuZXdwb3MgYW5kIHJldHVybiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLCB3aGljaApAQCAtODUxNCw4ICs4Njg4LDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzd2l0Y2ggKGtub3duX2Vycm9ySGFuZGxlcikgewogICAgICAgICAgICAgY2FzZSAxOiAvKiBzdHJpY3QgKi8KLSAgICAgICAgICAgICAgICByYWlzZV90cmFuc2xhdGVfZXhjZXB0aW9uKCZleGMsIGlucHV0LCBjb2xsc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZW5kLCByZWFzb24pOworICAgICAgICAgICAgICAgIG1ha2VfdHJhbnNsYXRlX2V4Y2VwdGlvbigmZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgY29sbHN0YXJ0LCBjb2xsZW5kLCByZWFzb24pOworICAgICAgICAgICAgICAgIGlmIChleGMgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgUHlDb2RlY19TdHJpY3RFcnJvcnMoZXhjKTsKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjYXNlIDI6IC8qIHJlcGxhY2UgKi8KICAgICAgICAgICAgICAgICAvKiBObyBuZWVkIHRvIGNoZWNrIGZvciBzcGFjZSwgdGhpcyBpcyBhIDE6MSByZXBsYWNlbWVudCAqLwpAQCAtOTEwNyw3ICs5MjgzLDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEgfHwKICAgICAgICAgUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3Vic3RyaW5nKSA9PSAwKQogICAgICAgICByZXR1cm4gMTsKQEAgLTkxNDUsNyArOTMyMSw2IEBACiAgICAgICAgICAgICAvKiBXZSBkbyBub3QgbmVlZCB0byBjb21wYXJlIDAgYW5kIGxlbihzdWJzdHJpbmcpLTEgYmVjYXVzZQogICAgICAgICAgICAgICAgdGhlIGlmIHN0YXRlbWVudCBhYm92ZSBlbnN1cmVkIGFscmVhZHkgdGhhdCB0aGV5IGFyZSBlcXVhbAogICAgICAgICAgICAgICAgd2hlbiB3ZSBlbmQgdXAgaGVyZS4gKi8KLSAgICAgICAgICAgIC8qIFRPRE86IGhvbm9yIGRpcmVjdGlvbiBhbmQgZG8gYSBmb3J3YXJkIG9yIGJhY2t3YXJkcyBzZWFyY2ggKi8KICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBlbmRfc3ViOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZF9zZWxmLCBkYXRhX3NlbGYsIG9mZnNldCArIGkpICE9CiAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmRfc3ViLCBkYXRhX3N1YiwgaSkpCkBAIC05NjA3LDQxICs5NzgyLDQ5IEBACiAgICAgICAgICAgICBzZXBfZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHNlcCk7CiAgICAgfQogI2VuZGlmCi0gICAgZm9yIChpID0gMCwgcmVzX29mZnNldCA9IDA7IGkgPCBzZXFsZW47ICsraSkgewotICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47Ci0gICAgICAgIGl0ZW0gPSBpdGVtc1tpXTsKLSAgICAgICAgLyogQ29weSBpdGVtLCBhbmQgbWF5YmUgdGhlIHNlcGFyYXRvci4gKi8KLSAgICAgICAgaWYgKGkgJiYgc2VwbGVuICE9IDApIHsKLSAgICAgICAgICAgIGlmICh1c2VfbWVtY3B5KSB7CisgICAgaWYgKHVzZV9tZW1jcHkpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47CisgICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07CisKKyAgICAgICAgICAgIC8qIENvcHkgaXRlbSwgYW5kIG1heWJlIHRoZSBzZXBhcmF0b3IuICovCisgICAgICAgICAgICBpZiAoaSAmJiBzZXBsZW4gIT0gMCkgewogICAgICAgICAgICAgICAgIFB5X01FTUNQWShyZXNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQgKiBzZXBsZW4pOwogICAgICAgICAgICAgICAgIHJlc19kYXRhICs9IGtpbmQgKiBzZXBsZW47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXMsIHJlc19vZmZzZXQsIHNlcCwgMCwgc2VwbGVuKTsKLSAgICAgICAgICAgICAgICByZXNfb2Zmc2V0ICs9IHNlcGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpdGVtbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSk7Ci0gICAgICAgIGlmIChpdGVtbGVuICE9IDApIHsKLSAgICAgICAgICAgIGlmICh1c2VfbWVtY3B5KSB7CisKKyAgICAgICAgICAgIGl0ZW1sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKTsKKyAgICAgICAgICAgIGlmIChpdGVtbGVuICE9IDApIHsKICAgICAgICAgICAgICAgICBQeV9NRU1DUFkocmVzX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EQVRBKGl0ZW0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kICogaXRlbWxlbik7CiAgICAgICAgICAgICAgICAgcmVzX2RhdGEgKz0ga2luZCAqIGl0ZW1sZW47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQocmVzX2RhdGEgPT0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBraW5kICogUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwLCByZXNfb2Zmc2V0ID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47CisgICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07CisKKyAgICAgICAgICAgIC8qIENvcHkgaXRlbSwgYW5kIG1heWJlIHRoZSBzZXBhcmF0b3IuICovCisgICAgICAgICAgICBpZiAoaSAmJiBzZXBsZW4gIT0gMCkgeworICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcywgcmVzX29mZnNldCwgc2VwLCAwLCBzZXBsZW4pOworICAgICAgICAgICAgICAgIHJlc19vZmZzZXQgKz0gc2VwbGVuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVtbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSk7CisgICAgICAgICAgICBpZiAoaXRlbWxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzLCByZXNfb2Zmc2V0LCBpdGVtLCAwLCBpdGVtbGVuKTsKICAgICAgICAgICAgICAgICByZXNfb2Zmc2V0ICs9IGl0ZW1sZW47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHVzZV9tZW1jcHkpCi0gICAgICAgIGFzc2VydChyZXNfZGF0YSA9PSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICArIGtpbmQgKiBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXMpKTsKLSAgICBlbHNlCiAgICAgICAgIGFzc2VydChyZXNfb2Zmc2V0ID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcykpOworICAgIH0KIAogICAgIFB5X0RFQ1JFRihmc2VxKTsKICAgICBQeV9YREVDUkVGKHNlcCk7CkBAIC0xMDAzMyw2ICsxMDIxNiwzMSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorcmVwbGFjZV8xY2hhcl9pbnBsYWNlKFB5T2JqZWN0ICp1LCBQeV9zc2l6ZV90IHBvcywKKyAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHUxLCBQeV9VQ1M0IHUyLCBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodSk7CisgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHUpOworICAgIFB5X3NzaXplX3QgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodSk7CisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgdWNzMWxpYl9yZXBsYWNlXzFjaGFyX2lucGxhY2UoKFB5X1VDUzEgKilkYXRhICsgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSAqKWRhdGEgKyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxLCB1MiwgbWF4Y291bnQpOworICAgIH0KKyAgICBlbHNlIGlmIChraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7CisgICAgICAgIHVjczJsaWJfcmVwbGFjZV8xY2hhcl9pbnBsYWNlKChQeV9VQ1MyICopZGF0YSArIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzIgKilkYXRhICsgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MSwgdTIsIG1heGNvdW50KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChraW5kID09IFB5VW5pY29kZV80QllURV9LSU5EKTsKKyAgICAgICAgdWNzNGxpYl9yZXBsYWNlXzFjaGFyX2lucGxhY2UoKFB5X1VDUzQgKilkYXRhICsgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTNCAqKWRhdGEgKyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxLCB1MiwgbWF4Y291bnQpOworICAgIH0KK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIHJlcGxhY2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHIxLAogICAgICAgICBQeU9iamVjdCAqc3RyMiwgUHlfc3NpemVfdCBtYXhjb3VudCkKQEAgLTEwMDQ5LDcgKzEwMjU3LDcgQEAKICAgICBQeV9zc2l6ZV90IGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIxKTsKICAgICBQeV9zc2l6ZV90IGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIyKTsKICAgICBpbnQgbWF5c2hyaW5rOwotICAgIFB5X1VDUzQgbWF4Y2hhciwgbWF4Y2hhcl9zdHIyOworICAgIFB5X1VDUzQgbWF4Y2hhciwgbWF4Y2hhcl9zdHIxLCBtYXhjaGFyX3N0cjI7CiAKICAgICBpZiAobWF4Y291bnQgPCAwKQogICAgICAgICBtYXhjb3VudCA9IFBZX1NTSVpFX1RfTUFYOwpAQCAtMTAwNTgsMTUgKzEwMjY2LDE2IEBACiAKICAgICBpZiAoc3RyMSA9PSBzdHIyKQogICAgICAgICBnb3RvIG5vdGhpbmc7Ci0gICAgaWYgKHNraW5kIDwga2luZDEpCi0gICAgICAgIC8qIHN1YnN0cmluZyB0b28gd2lkZSB0byBiZSBwcmVzZW50ICovCi0gICAgICAgIGdvdG8gbm90aGluZzsKIAogICAgIG1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc2VsZik7CisgICAgbWF4Y2hhcl9zdHIxID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cjEpOworICAgIGlmIChtYXhjaGFyIDwgbWF4Y2hhcl9zdHIxKQorICAgICAgICAvKiBzdWJzdHJpbmcgdG9vIHdpZGUgdG8gYmUgcHJlc2VudCAqLworICAgICAgICBnb3RvIG5vdGhpbmc7CiAgICAgbWF4Y2hhcl9zdHIyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cjIpOwogICAgIC8qIFJlcGxhY2luZyBzdHIxIHdpdGggc3RyMiBtYXkgY2F1c2UgYSBtYXhjaGFyIHJlZHVjdGlvbiBpbiB0aGUKICAgICAgICByZXN1bHQgc3RyaW5nLiAqLwotICAgIG1heXNocmluayA9IChtYXhjaGFyX3N0cjIgPCBtYXhjaGFyKTsKKyAgICBtYXlzaHJpbmsgPSAobWF4Y2hhcl9zdHIyIDwgbWF4Y2hhcl9zdHIxKSAmJiAobWF4Y2hhciA9PSBtYXhjaGFyX3N0cjEpOwogICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgbWF4Y2hhcl9zdHIyKTsKIAogICAgIGlmIChsZW4xID09IGxlbjIpIHsKQEAgLTEwMDc2LDM1ICsxMDI4NSwxOSBAQAogICAgICAgICBpZiAobGVuMSA9PSAxKSB7CiAgICAgICAgICAgICAvKiByZXBsYWNlIGNoYXJhY3RlcnMgKi8KICAgICAgICAgICAgIFB5X1VDUzQgdTEsIHUyOwotICAgICAgICAgICAgaW50IHJraW5kOwotICAgICAgICAgICAgUHlfc3NpemVfdCBpbmRleCwgcG9zOwotICAgICAgICAgICAgY2hhciAqc3JjOworICAgICAgICAgICAgUHlfc3NpemVfdCBwb3M7CiAKLSAgICAgICAgICAgIHUxID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHIxLCAwKTsKLSAgICAgICAgICAgIHBvcyA9IGZpbmRjaGFyKHNidWYsIFB5VW5pY29kZV9LSU5EKHNlbGYpLCBzbGVuLCB1MSwgMSk7CisgICAgICAgICAgICB1MSA9IFB5VW5pY29kZV9SRUFEKGtpbmQxLCBidWYxLCAwKTsKKyAgICAgICAgICAgIHBvcyA9IGZpbmRjaGFyKHNidWYsIHNraW5kLCBzbGVuLCB1MSwgMSk7CiAgICAgICAgICAgICBpZiAocG9zIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG5vdGhpbmc7Ci0gICAgICAgICAgICB1MiA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyMiwgMCk7CisgICAgICAgICAgICB1MiA9IFB5VW5pY29kZV9SRUFEKGtpbmQyLCBidWYyLCAwKTsKICAgICAgICAgICAgIHUgPSBQeVVuaWNvZGVfTmV3KHNsZW4sIG1heGNoYXIpOwogICAgICAgICAgICAgaWYgKCF1KQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh1LCAwLCBzZWxmLCAwLCBzbGVuKTsKLSAgICAgICAgICAgIHJraW5kID0gUHlVbmljb2RlX0tJTkQodSk7CiAKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShya2luZCwgUHlVbmljb2RlX0RBVEEodSksIHBvcywgdTIpOwotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICAgICAgc3JjID0gc2J1ZjsKLSAgICAgICAgICAgIHdoaWxlICgtLW1heGNvdW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcysrOwotICAgICAgICAgICAgICAgIHNyYyArPSBwb3MgKiBQeVVuaWNvZGVfS0lORChzZWxmKTsKLSAgICAgICAgICAgICAgICBzbGVuIC09IHBvczsKLSAgICAgICAgICAgICAgICBpbmRleCArPSBwb3M7Ci0gICAgICAgICAgICAgICAgcG9zID0gZmluZGNoYXIoc3JjLCBQeVVuaWNvZGVfS0lORChzZWxmKSwgc2xlbiwgdTEsIDEpOwotICAgICAgICAgICAgICAgIGlmIChwb3MgPCAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUocmtpbmQsIFB5VW5pY29kZV9EQVRBKHUpLCBpbmRleCArIHBvcywgdTIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnModSwgMCwgc2VsZiwgMCwgc2xlbik7CisgICAgICAgICAgICByZXBsYWNlXzFjaGFyX2lucGxhY2UodSwgcG9zLCB1MSwgdTIsIG1heGNvdW50KTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGludCBya2luZCA9IHNraW5kOwpAQCAtMTA0MTYsOSArMTA2MDksMjQgQEAKIHN0YXRpYyBpbnQKIHVuaWNvZGVfY29tcGFyZShQeU9iamVjdCAqc3RyMSwgUHlPYmplY3QgKnN0cjIpCiB7CisjZGVmaW5lIENPTVBBUkUoVFlQRTEsIFRZUEUyKSBcCisgICAgZG8geyBcCisgICAgICAgIFRZUEUxKiBwMSA9IChUWVBFMSAqKWRhdGExOyBcCisgICAgICAgIFRZUEUyKiBwMiA9IChUWVBFMiAqKWRhdGEyOyBcCisgICAgICAgIFRZUEUxKiBlbmQgPSBwMSArIGxlbjsgXAorICAgICAgICBQeV9VQ1M0IGMxLCBjMjsgXAorICAgICAgICBmb3IgKDsgcDEgIT0gZW5kOyBwMSsrLCBwMisrKSB7IFwKKyAgICAgICAgICAgIGMxID0gKnAxOyBcCisgICAgICAgICAgICBjMiA9ICpwMjsgXAorICAgICAgICAgICAgaWYgKGMxICE9IGMyKSBcCisgICAgICAgICAgICAgICAgcmV0dXJuIChjMSA8IGMyKSA/IC0xIDogMTsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICB3aGlsZSAoMCkKKwogICAgIGludCBraW5kMSwga2luZDI7CiAgICAgdm9pZCAqZGF0YTEsICpkYXRhMjsKLSAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIGk7CisgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBsZW47CiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHN0cjEpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3RyMik7CkBAIC0xMDQyNiwxOSArMTA2MzQsMTE2IEBACiAgICAgZGF0YTIgPSBQeVVuaWNvZGVfREFUQShzdHIyKTsKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSk7CiAgICAgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpOworICAgIGxlbiA9IFB5X01JTihsZW4xLCBsZW4yKTsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBsZW4xICYmIGkgPCBsZW4yOyArK2kpIHsKLSAgICAgICAgUHlfVUNTNCBjMSwgYzI7Ci0gICAgICAgIGMxID0gUHlVbmljb2RlX1JFQUQoa2luZDEsIGRhdGExLCBpKTsKLSAgICAgICAgYzIgPSBQeVVuaWNvZGVfUkVBRChraW5kMiwgZGF0YTIsIGkpOwotCi0gICAgICAgIGlmIChjMSAhPSBjMikKLSAgICAgICAgICAgIHJldHVybiAoYzEgPCBjMikgPyAtMSA6IDE7CisgICAgc3dpdGNoKGtpbmQxKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgY21wID0gbWVtY21wKGRhdGExLCBkYXRhMiwgbGVuKTsKKyAgICAgICAgICAgIC8qIG5vcm1hbGl6ZSByZXN1bHQgb2YgbWVtY21wKCkgaW50byB0aGUgcmFuZ2UgWy0xOyAxXSAqLworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MxLCBQeV9VQ1MyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MxLCBQeV9VQ1M0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgc3dpdGNoKGtpbmQyKSB7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzIsIFB5X1VDUzEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMiwgUHlfVUNTMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MyLCBQeV9VQ1M0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgIHsKKyAgICAgICAgc3dpdGNoKGtpbmQyKSB7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzQsIFB5X1VDUzEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzQsIFB5X1VDUzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgICAgIHsKKyNpZiBkZWZpbmVkKEhBVkVfV01FTUNNUCkgJiYgU0laRU9GX1dDSEFSX1QgPT0gNAorICAgICAgICAgICAgaW50IGNtcCA9IHdtZW1jbXAoKHdjaGFyX3QgKilkYXRhMSwgKHdjaGFyX3QgKilkYXRhMiwgbGVuKTsKKyAgICAgICAgICAgIC8qIG5vcm1hbGl6ZSByZXN1bHQgb2Ygd21lbWNtcCgpIGludG8gdGhlIHJhbmdlIFstMTsgMV0gKi8KKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworI2Vsc2UKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTNCwgUHlfVUNTNCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKICAgICB9CiAKLSAgICByZXR1cm4gKGxlbjEgPCBsZW4yKSA/IC0xIDogKGxlbjEgIT0gbGVuMik7CisgICAgaWYgKGxlbjEgPT0gbGVuMikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbjEgPCBsZW4yKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKKworI3VuZGVmIENPTVBBUkUKIH0KIAorUHlfTE9DQUwoaW50KQordW5pY29kZV9jb21wYXJlX2VxKFB5T2JqZWN0ICpzdHIxLCBQeU9iamVjdCAqc3RyMikKK3sKKyAgICBpbnQga2luZDsKKyAgICB2b2lkICpkYXRhMSwgKmRhdGEyOworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCBjbXA7CisKKyAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIxKTsKKyAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMikgIT0gbGVuKQorICAgICAgICByZXR1cm4gMDsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyMSk7CisgICAgaWYgKFB5VW5pY29kZV9LSU5EKHN0cjIpICE9IGtpbmQpCisgICAgICAgIHJldHVybiAwOworICAgIGRhdGExID0gUHlVbmljb2RlX0RBVEEoc3RyMSk7CisgICAgZGF0YTIgPSBQeVVuaWNvZGVfREFUQShzdHIyKTsKKworICAgIGNtcCA9IG1lbWNtcChkYXRhMSwgZGF0YTIsIGxlbiAqIGtpbmQpOworICAgIHJldHVybiAoY21wID09IDApOworfQorCisKIGludAogUHlVbmljb2RlX0NvbXBhcmUoUHlPYmplY3QgKmxlZnQsIFB5T2JqZWN0ICpyaWdodCkKIHsKQEAgLTEwNDQ2LDYgKzEwNzUxLDExIEBACiAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobGVmdCkgPT0gLTEgfHwKICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEWShyaWdodCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgLyogYSBzdHJpbmcgaXMgZXF1YWwgdG8gaXRzZWxmICovCisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKICAgICAgICAgcmV0dXJuIHVuaWNvZGVfY29tcGFyZShsZWZ0LCByaWdodCk7CiAgICAgfQogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC0xMDQ1NiwyOSArMTA3NjYsNTkgQEAKIH0KIAogaW50CitfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQoUHlPYmplY3QgKmxlZnQsIF9QeV9JZGVudGlmaWVyICpyaWdodCkKK3sKKyAgICBQeU9iamVjdCAqcmlnaHRfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQocmlnaHQpOyAgIC8qIGJvcnJvd2VkICovCisgICAgaWYgKHJpZ2h0X3N0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Db21wYXJlKGxlZnQsIHJpZ2h0X3N0cik7Cit9CisKK2ludAogUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoUHlPYmplY3QqIHVuaSwgY29uc3QgY2hhciogc3RyKQogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOwogICAgIFB5X1VDUzQgY2hyOwogCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sodW5pKSk7CiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh1bmkpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaSk7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaSk7Ci0gICAgLyogQ29tcGFyZSBVbmljb2RlIHN0cmluZyBhbmQgc291cmNlIGNoYXJhY3RlciBzZXQgc3RyaW5nICovCi0gICAgZm9yIChpID0gMDsgKGNociA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKSAmJiBzdHJbaV07IGkrKykKLSAgICAgICAgaWYgKGNociAhPSBzdHJbaV0pCi0gICAgICAgICAgICByZXR1cm4gKGNociA8ICh1bnNpZ25lZCBjaGFyKShzdHJbaV0pKSA/IC0xIDogMTsKLSAgICAvKiBUaGlzIGNoZWNrIGtlZXBzIFB5dGhvbiBzdHJpbmdzIHRoYXQgZW5kIGluICdcMCcgZnJvbSBjb21wYXJpbmcgZXF1YWwKLSAgICAgdG8gQyBzdHJpbmdzIGlkZW50aWNhbCB1cCB0byB0aGF0IHBvaW50LiAqLwotICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpICE9IGkgfHwgY2hyKQotICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLwotICAgIGlmIChzdHJbaV0pCi0gICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLwotICAgIHJldHVybiAwOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmkpOworICAgICAgICBzaXplX3QgbGVuMSA9IChzaXplX3QpUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pKTsKKyAgICAgICAgc2l6ZV90IGxlbiwgbGVuMiA9IHN0cmxlbihzdHIpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIGxlbiA9IFB5X01JTihsZW4xLCBsZW4yKTsKKyAgICAgICAgY21wID0gbWVtY21wKGRhdGEsIHN0ciwgbGVuKTsKKyAgICAgICAgaWYgKGNtcCAhPSAwKSB7CisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlbjEgPiBsZW4yKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHVuaSBpcyBsb25nZXIgKi8KKyAgICAgICAgaWYgKGxlbjIgPiBsZW4xKQorICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBzdHIgaXMgbG9uZ2VyICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaSk7CisgICAgICAgIC8qIENvbXBhcmUgVW5pY29kZSBzdHJpbmcgYW5kIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IHN0cmluZyAqLworICAgICAgICBmb3IgKGkgPSAwOyAoY2hyID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpICYmIHN0cltpXTsgaSsrKQorICAgICAgICAgICAgaWYgKGNociAhPSBzdHJbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIChjaHIgPCAodW5zaWduZWQgY2hhcikoc3RyW2ldKSkgPyAtMSA6IDE7CisgICAgICAgIC8qIFRoaXMgY2hlY2sga2VlcHMgUHl0aG9uIHN0cmluZ3MgdGhhdCBlbmQgaW4gJ1wwJyBmcm9tIGNvbXBhcmluZyBlcXVhbAorICAgICAgICAgdG8gQyBzdHJpbmdzIGlkZW50aWNhbCB1cCB0byB0aGF0IHBvaW50LiAqLworICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pKSAhPSBpIHx8IGNocikKKyAgICAgICAgICAgIHJldHVybiAxOyAvKiB1bmkgaXMgbG9uZ2VyICovCisgICAgICAgIGlmIChzdHJbaV0pCisgICAgICAgICAgICByZXR1cm4gLTE7IC8qIHN0ciBpcyBsb25nZXIgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogfQogCiAKQEAgLTEwNDg5LDM2ICsxMDgyOSw0MyBAQAogUHlVbmljb2RlX1JpY2hDb21wYXJlKFB5T2JqZWN0ICpsZWZ0LCBQeU9iamVjdCAqcmlnaHQsIGludCBvcCkKIHsKICAgICBpbnQgcmVzdWx0OworICAgIFB5T2JqZWN0ICp2OwogCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhsZWZ0KSAmJiBQeVVuaWNvZGVfQ2hlY2socmlnaHQpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2OwotICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGxlZnQpID09IC0xIHx8Ci0gICAgICAgICAgICBQeVVuaWNvZGVfUkVBRFkocmlnaHQpID09IC0xKQorICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGxlZnQpIHx8ICFQeVVuaWNvZGVfQ2hlY2socmlnaHQpKQorICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGxlZnQpID09IC0xIHx8CisgICAgICAgIFB5VW5pY29kZV9SRUFEWShyaWdodCkgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGxlZnQgPT0gcmlnaHQpIHsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFB5X0VROgorICAgICAgICBjYXNlIFB5X0xFOgorICAgICAgICBjYXNlIFB5X0dFOgorICAgICAgICAgICAgLyogYSBzdHJpbmcgaXMgZXF1YWwgdG8gaXRzZWxmICovCisgICAgICAgICAgICB2ID0gUHlfVHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5X05FOgorICAgICAgICBjYXNlIFB5X0xUOgorICAgICAgICBjYXNlIFB5X0dUOgorICAgICAgICAgICAgdiA9IFB5X0ZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChsZWZ0KSAhPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyaWdodCkgfHwKLSAgICAgICAgICAgIFB5VW5pY29kZV9LSU5EKGxlZnQpICE9IFB5VW5pY29kZV9LSU5EKHJpZ2h0KSkgewotICAgICAgICAgICAgaWYgKG9wID09IFB5X0VRKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfRmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3AgPT0gUHlfTkUpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X1RydWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSB1bmljb2RlX2NvbXBhcmUobGVmdCwgcmlnaHQpOworICAgIH0KKyAgICBlbHNlIGlmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkgeworICAgICAgICByZXN1bHQgPSB1bmljb2RlX2NvbXBhcmVfZXEobGVmdCwgcmlnaHQpOworICAgICAgICByZXN1bHQgXj0gKG9wID09IFB5X05FKTsKKyAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlKGxlZnQsIHJpZ2h0KTsKIAogICAgICAgICAvKiBDb252ZXJ0IHRoZSByZXR1cm4gdmFsdWUgdG8gYSBCb29sZWFuICovCiAgICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBQeV9FUToKLSAgICAgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0ID09IDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTkU6Ci0gICAgICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCAhPSAwKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFB5X0xFOgogICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQgPD0gMCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNTM1LDE4ICsxMDg4MiwxNiBAQAogICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgcmV0dXJuIHY7CiAgICAgfQotCi0gICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworICAgIFB5X0lOQ1JFRih2KTsKKyAgICByZXR1cm4gdjsKIH0KIAogaW50CiBQeVVuaWNvZGVfQ29udGFpbnMoUHlPYmplY3QgKmNvbnRhaW5lciwgUHlPYmplY3QgKmVsZW1lbnQpCiB7CiAgICAgUHlPYmplY3QgKnN0ciwgKnN1YjsKLSAgICBpbnQga2luZDEsIGtpbmQyLCBraW5kOworICAgIGludCBraW5kMSwga2luZDI7CiAgICAgdm9pZCAqYnVmMSwgKmJ1ZjI7CiAgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOwogICAgIGludCByZXN1bHQ7CkBAIC0xMDU2NSwyMyArMTA5MTAsMTggQEAKICAgICAgICAgUHlfREVDUkVGKHN1Yik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWIpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzdWIpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICB9CiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHN0cik7CiAgICAga2luZDIgPSBQeVVuaWNvZGVfS0lORChzdWIpOwotICAgIGtpbmQgPSBraW5kMTsKICAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc3RyKTsKICAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3ViKTsKLSAgICBpZiAoa2luZDIgIT0ga2luZCkgewotICAgICAgICBpZiAoa2luZDIgPiBraW5kKSB7CisgICAgaWYgKGtpbmQyICE9IGtpbmQxKSB7CisgICAgICAgIGlmIChraW5kMiA+IGtpbmQxKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHN1Yiwga2luZCk7CisgICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWIsIGtpbmQxKTsKICAgICB9CiAgICAgaWYgKCFidWYyKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzdWIpOwpAQCAtMTA1OTEsNyArMTA5MzEsNyBAQAogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdWIpOwogCi0gICAgc3dpdGNoIChraW5kKSB7CisgICAgc3dpdGNoIChraW5kMSkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIHJlc3VsdCA9IHVjczFsaWJfZmluZChidWYxLCBsZW4xLCBidWYyLCBsZW4yLCAwKSAhPSAtMTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDYwOSw3ICsxMDk0OSw3IEBACiAgICAgUHlfREVDUkVGKHN0cik7CiAgICAgUHlfREVDUkVGKHN1Yik7CiAKLSAgICBpZiAoa2luZDIgIT0ga2luZCkKKyAgICBpZiAoa2luZDIgIT0ga2luZDEpCiAgICAgICAgIFB5TWVtX0ZyZWUoYnVmMik7CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTA2ODUsNyArMTEwMjUsOCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGxlZnQgPSAqcF9sZWZ0OwotICAgIGlmIChyaWdodCA9PSBOVUxMIHx8IGxlZnQgPT0gTlVMTCB8fCAhUHlVbmljb2RlX0NoZWNrKGxlZnQpKSB7CisgICAgaWYgKHJpZ2h0ID09IE5VTEwgfHwgbGVmdCA9PSBOVUxMCisgICAgICAgIHx8ICFQeVVuaWNvZGVfQ2hlY2sobGVmdCkgfHwgIVB5VW5pY29kZV9DaGVjayhyaWdodCkpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xMDcyNSwxNSArMTEwNjYsOSBAQAogICAgICAgICAmJiAhKFB5VW5pY29kZV9JU19BU0NJSShsZWZ0KSAmJiAhUHlVbmljb2RlX0lTX0FTQ0lJKHJpZ2h0KSkpCiAgICAgewogICAgICAgICAvKiBhcHBlbmQgaW5wbGFjZSAqLwotICAgICAgICBpZiAodW5pY29kZV9yZXNpemUocF9sZWZ0LCBuZXdfbGVuKSAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBYWFggaWYgX1B5VW5pY29kZV9SZXNpemUoKSBmYWlscywgJ2xlZnQnIGhhcyBiZWVuCi0gICAgICAgICAgICAgKiBkZWFsbG9jYXRlZCBzbyBpdCBjYW5ub3QgYmUgcHV0IGJhY2sgaW50bwotICAgICAgICAgICAgICogJ3ZhcmlhYmxlJy4gIFRoZSBNZW1vcnlFcnJvciBpcyByYWlzZWQgd2hlbiB0aGVyZQotICAgICAgICAgICAgICogaXMgbm8gdmFsdWUgaW4gJ3ZhcmlhYmxlJywgd2hpY2ggbWlnaHQgKHZlcnkKLSAgICAgICAgICAgICAqIHJlbW90ZWx5KSBiZSBhIGNhdXNlIG9mIGluY29tcGF0aWJpbGl0aWVzLgotICAgICAgICAgICAgICovCisgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShwX2xlZnQsIG5ld19sZW4pICE9IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9CisKICAgICAgICAgLyogY29weSAncmlnaHQnIGludG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBhcmVhIG9mICdsZWZ0JyAqLwogICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycygqcF9sZWZ0LCBsZWZ0X2xlbiwgcmlnaHQsIDAsIHJpZ2h0X2xlbik7CiAgICAgfQpAQCAtMTA3ODksOCArMTExMjQsMTAgQEAKIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CiAgICAga2luZDIgPSBQeVVuaWNvZGVfS0lORChzdWJzdHJpbmcpOwotICAgIGlmIChraW5kMiA+IGtpbmQxKQorICAgIGlmIChraW5kMiA+IGtpbmQxKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOworICAgIH0KICAgICBraW5kID0ga2luZDE7CiAgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzdWJzdHJpbmcpOwpAQCAtMTA4NjEsMjMgKzExMTk4LDI1IEBACiB9CiAKIFB5RG9jX1NUUlZBUihleHBhbmR0YWJzX19kb2NfXywKLSAgICAgICAgICAgICAiUy5leHBhbmR0YWJzKFt0YWJzaXplXSkgLT4gc3RyXG5cCisgICAgICAgICAgICAgIlMuZXhwYW5kdGFicyh0YWJzaXplPTgpIC0+IHN0clxuXAogXG5cCiBSZXR1cm4gYSBjb3B5IG9mIFMgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSBleHBhbmRlZCB1c2luZyBzcGFjZXMuXG5cCiBJZiB0YWJzaXplIGlzIG5vdCBnaXZlbiwgYSB0YWIgc2l6ZSBvZiA4IGNoYXJhY3RlcnMgaXMgYXNzdW1lZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0KgotdW5pY29kZV9leHBhbmR0YWJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3VuaWNvZGVfZXhwYW5kdGFicyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5X3NzaXplX3QgaSwgaiwgbGluZV9wb3MsIHNyY19sZW4sIGluY3I7CiAgICAgUHlfVUNTNCBjaDsKICAgICBQeU9iamVjdCAqdTsKICAgICB2b2lkICpzcmNfZGF0YSwgKmRlc3RfZGF0YTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InRhYnNpemUiLCAwfTsKICAgICBpbnQgdGFic2l6ZSA9IDg7CiAgICAgaW50IGtpbmQ7CiAgICAgaW50IGZvdW5kOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpleHBhbmR0YWJzIiwgJnRhYnNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8aTpleHBhbmR0YWJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZ0YWJzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQpAQCAtMTA5NjgsMTAgKzExMzA3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTA5ODksNyArMTEzMzIsNiBAQAogICAgIHZvaWQgKmRhdGE7CiAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kOwogICAgIFB5X1VDUzQgY2g7Ci0gICAgUHlPYmplY3QgKnJlczsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYpIHx8IFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwpAQCAtMTEwMDIsMTcgKzExMzQ0LDcgQEAKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CiAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5kZXgpOwotICAgIGlmIChjaCA8IDI1NikKLSAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcihjaCk7Ci0KLSAgICByZXMgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChyZXMpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShyZXMpOwotICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCAwLCBjaCk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiB1bmljb2RlX2NoYXIoY2gpOwogfQogCiAvKiBCZWxpZXZlIGl0IG9yIG5vdCwgdGhpcyBwcm9kdWNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgQVNDSUkgc3RyaW5ncwpAQCAtMTEwMzksNDMgKzExMzcxLDExIEBACiAgICAgICAgIF9QeVVuaWNvZGVfSEFTSChzZWxmKSA9IDA7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIC8qIFRoZSBoYXNoIGZ1bmN0aW9uIGFzIGEgbWFjcm8sIGdldHMgZXhwYW5kZWQgdGhyZWUgdGltZXMgYmVsb3cuICovCi0jZGVmaW5lIEhBU0goUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB4IF49IChQeV91aGFzaF90KSAqUCA8PCA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlICgtLWxlbiA+PSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKlArKzsgIFwKLQotICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQucHJlZml4OwotICAgIHN3aXRjaCAoUHlVbmljb2RlX0tJTkQoc2VsZikpIHsKLSAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOiB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKLSAgICAgICAgSEFTSChjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6IHsKLSAgICAgICAgY29uc3QgUHlfVUNTMiAqcyA9IFB5VW5pY29kZV8yQllURV9EQVRBKHNlbGYpOwotICAgICAgICBIQVNIKHMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDogewotICAgICAgICBQeV9VQ1M0ICpsOwotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoc2VsZikgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQgJiYKLSAgICAgICAgICAgICAgICJJbXBvc3NpYmxlIHN3aXRjaCBjYXNlIGluIHVuaWNvZGVfaGFzaCIpOwotICAgICAgICBsID0gUHlVbmljb2RlXzRCWVRFX0RBVEEoc2VsZik7Ci0gICAgICAgIEhBU0gobCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuc3VmZml4OwotCi0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKKyAgICB4ID0gX1B5X0hhc2hCeXRlcyhQeVVuaWNvZGVfREFUQShzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKSAqIFB5VW5pY29kZV9LSU5EKHNlbGYpKTsKICAgICBfUHlVbmljb2RlX0hBU0goc2VsZikgPSB4OwogICAgIHJldHVybiB4OwogfQotI3VuZGVmIEhBU0gKIAogUHlEb2NfU1RSVkFSKGluZGV4X19kb2NfXywKICAgICAgICAgICAgICAiUy5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKSAtPiBpbnRcblwKQEAgLTExMDk0LDEwICsxMTM5NCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKDEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTExNjI3LDYgKzExOTMxLDcgQEAKICAgICBpbnQga2luZDsKICAgICBQeV9zc2l6ZV90IGksIGosIGxlbjsKICAgICBCTE9PTV9NQVNLIHNlcG1hc2s7CisgICAgUHlfc3NpemVfdCBzZXBsZW47CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShzZXBvYmopID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExNjM0LDI0ICsxMTkzOSwzNSBAQAogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7CisgICAgc2VwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKTsKICAgICBzZXBtYXNrID0gbWFrZV9ibG9vbV9tYXNrKFB5VW5pY29kZV9LSU5EKHNlcG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQShzZXBvYmopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBsZW4pOwogCiAgICAgaSA9IDA7CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmCi0gICAgICAgICAgICAgICBCTE9PTV9NRU1CRVIoc2VwbWFzaywgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSksIHNlcG9iaikpIHsKKyAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQogICAgIH0KIAogICAgIGogPSBsZW47CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBqLS07CisgICAgICAgIHdoaWxlIChqID49IGkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGotLTsKLSAgICAgICAgfSB3aGlsZSAoaiA+PSBpICYmCi0gICAgICAgICAgICAgICAgIEJMT09NX01FTUJFUihzZXBtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKSwgc2Vwb2JqKSk7CisgICAgICAgIH0KKwogICAgICAgICBqKys7CiAgICAgfQogCkBAIC0xMTY5OCwzMCArMTIwMTQsNjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkb19zdHJpcChQeU9iamVjdCAqc2VsZiwgaW50IHN0cmlwdHlwZSkKIHsKLSAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpOwogCi0gICAgaSA9IDA7Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIFB5X1VOSUNPREVfSVNTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkpIHsKLSAgICAgICAgICAgIGkrKzsKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHNlbGYpKSB7CisgICAgICAgIFB5X1VDUzEgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBqID0gbGVuOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgeworICAgICAgICAgICAgai0tOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2pdOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqKys7CiAgICAgICAgIH0KICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKIAotICAgIGogPSBsZW47Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGogPSBsZW47CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7CiAgICAgICAgICAgICBqLS07Ci0gICAgICAgIH0gd2hpbGUgKGogPj0gaSAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaikpKTsKLSAgICAgICAgaisrOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBQeVVuaWNvZGVfU3Vic3RyaW5nKHNlbGYsIGksIGopOwpAQCAtMTE3MzMsNyArMTIwODIsNyBAQAogewogICAgIFB5T2JqZWN0ICpzZXAgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyICopc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzZXAgIT0gTlVMTCAmJiBzZXAgIT0gUHlfTm9uZSkgewpAQCAtMTE5NDUsNyArMTIyOTQsNyBAQAogICAgIFB5X3NzaXplX3QgaXNpemU7CiAgICAgUHlfc3NpemVfdCBvc2l6ZSwgc3F1b3RlLCBkcXVvdGUsIGksIG87CiAgICAgUHlfVUNTNCBtYXgsIHF1b3RlOwotICAgIGludCBpa2luZCwgb2tpbmQ7CisgICAgaW50IGlraW5kLCBva2luZCwgdW5jaGFuZ2VkOwogICAgIHZvaWQgKmlkYXRhLCAqb2RhdGE7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQpAQCAtMTE5NTYsNyArMTIzMDUsNyBAQAogCiAgICAgLyogQ29tcHV0ZSBsZW5ndGggb2Ygb3V0cHV0LCBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQKICAgICAgICBtYXhpbXVtIGNoYXJhY3RlciAqLwotICAgIG9zaXplID0gMjsgLyogcXVvdGVzICovCisgICAgb3NpemUgPSAwOwogICAgIG1heCA9IDEyNzsKICAgICBzcXVvdGUgPSBkcXVvdGUgPSAwOwogICAgIGlraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CkBAIC0xMTk4Nyw3ICsxMjMzNiw5IEBACiAgICAgfQogCiAgICAgcXVvdGUgPSAnXCcnOworICAgIHVuY2hhbmdlZCA9IChvc2l6ZSA9PSBpc2l6ZSk7CiAgICAgaWYgKHNxdW90ZSkgeworICAgICAgICB1bmNoYW5nZWQgPSAwOwogICAgICAgICBpZiAoZHF1b3RlKQogICAgICAgICAgICAgLyogQm90aCBzcXVvdGUgYW5kIGRxdW90ZSBwcmVzZW50LiBVc2Ugc3F1b3RlLAogICAgICAgICAgICAgICAgYW5kIGVzY2FwZSB0aGVtICovCkBAIC0xMTk5NSw2ICsxMjM0Niw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHF1b3RlID0gJyInOwogICAgIH0KKyAgICBvc2l6ZSArPSAyOyAgIC8qIHF1b3RlcyAqLwogCiAgICAgcmVwciA9IFB5VW5pY29kZV9OZXcob3NpemUsIG1heCk7CiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKQEAgLTEyMDA0LDgxICsxMjM1Niw4NyBAQAogCiAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgMCwgcXVvdGUpOwogICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG9zaXplLTEsIHF1b3RlKTsKKyAgICBpZiAodW5jaGFuZ2VkKSB7CisgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcHIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIG8gPSAxOyBpIDwgaXNpemU7IGkrKykgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7CiAKLSAgICBmb3IgKGkgPSAwLCBvID0gMTsgaSA8IGlzaXplOyBpKyspIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7Ci0KLSAgICAgICAgLyogRXNjYXBlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgKi8KLSAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBzcGVjaWFsIHdoaXRlc3BhY2UgdG8gJ1x0JywgXG4nLCAnXHInICovCi0gICAgICAgIGlmIChjaCA9PSAnXHQnKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndCcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoID09ICdcbicpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xyJykgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3InKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLwotICAgICAgICBlbHNlIGlmIChjaCA8ICcgJyB8fCBjaCA9PSAweDdGKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgIGVsc2UgaWYgKGNoIDwgMHg3RikgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBOb24tQVNDSUkgY2hhcmFjdGVycyAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIE1hcCBVbmljb2RlIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgKGNhdGVnb3JpZXMgWiogYW5kIEMqIGV4Y2VwdCBBU0NJSSBzcGFjZSkKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNQUklOVEFCTEUoY2gpKSB7CisgICAgICAgICAgICAvKiBFc2NhcGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyAqLworICAgICAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPD0gMHhmZikgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA8PSAweGZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndScpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogTWFwIDIxLWJpdCBjaGFyYWN0ZXJzIHRvICdcVTAweHh4eHh4JyAqLwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdVJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjApICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxNikgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTWFwIHNwZWNpYWwgd2hpdGVzcGFjZSB0byAnXHQnLCBcbicsICdccicgKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd0Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHInKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdyJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAnICcgfHwgY2ggPT0gMHg3RikgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENvcHkgQVNDSUkgY2hhcmFjdGVycyBhcy1pcyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweDdGKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE5vbi1BU0NJSSBjaGFyYWN0ZXJzICovCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBNYXAgVW5pY29kZSB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcmllcyBaKiBhbmQgQyogZXhjZXB0IEFTQ0lJIHNwYWNlKQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTUFJJTlRBQkxFKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9IDB4ZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPD0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd1Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMjEtYml0IGNoYXJhY3RlcnMgdG8gJ1xVMDB4eHh4eHgnICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnVScpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI4KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDIwKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDE2KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEyMTA4LDEwICsxMjQ2NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKC0xLCBzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQpOwogCkBAIC0xMjE0MCwxMCArMTI1MDIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgtMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTI1MDAsMjggKzEyODY2LDc2IEBACiAgICAgcmV0dXJuIGNhc2Vfb3BlcmF0aW9uKHNlbGYsIGRvX3N3YXBjYXNlKTsKIH0KIAotUHlEb2NfU1RSVkFSKG1ha2V0cmFuc19fZG9jX18sCi0gICAgICAgICAgICAgInN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pIC0+IGRpY3QgKHN0YXRpYyBtZXRob2QpXG5cCi1cblwKLVJldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3Igc3RyLnRyYW5zbGF0ZSgpLlxuXAotSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZVxuXAotb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS5cblwKLUNoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cCi1JZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmRcblwKLWluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGVcblwKLWNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdFxuXAotbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuIik7CisvKltjbGluaWMgaW5wdXRdCiAKLXN0YXRpYyBQeU9iamVjdCoKLXVuaWNvZGVfbWFrZXRyYW5zKFB5T2JqZWN0ICpudWxsLCBQeU9iamVjdCAqYXJncykKK0BzdGF0aWNtZXRob2QKK3N0ci5tYWtldHJhbnMgYXMgdW5pY29kZV9tYWtldHJhbnMKKworICB4OiBvYmplY3QKKworICB5OiB1bmljb2RlPU5VTEwKKworICB6OiB1bmljb2RlPU5VTEwKKworICAvCisKK1JldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3Igc3RyLnRyYW5zbGF0ZSgpLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlCitvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBOb25lLgorQ2hhcmFjdGVyIGtleXMgd2lsbCBiZSB0aGVuIGNvbnZlcnRlZCB0byBvcmRpbmFscy4KK0lmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZAoraW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkIHRvIHRoZQorY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuIElmIHRoZXJlIGlzIGEgdGhpcmQgYXJndW1lbnQsIGl0CittdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfXywKKyJtYWtldHJhbnMoeCwgeT1Ob25lLCB6PU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS5cbiIKKyJcbiIKKyJJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlXG4iCisib3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS5cbiIKKyJDaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLlxuIgorIklmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZFxuIgorImluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGVcbiIKKyJjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXRcbiIKKyJtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4iKTsKKworI2RlZmluZSBVTklDT0RFX01BS0VUUkFOU19NRVRIT0RERUYgICAgXAorICAgIHsibWFrZXRyYW5zIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVfbWFrZXRyYW5zLCBNRVRIX1ZBUkFSR1N8TUVUSF9TVEFUSUMsIHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlX21ha2V0cmFuc19pbXBsKFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSwgUHlPYmplY3QgKnopOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnModm9pZCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKngsICp5ID0gTlVMTCwgKnogPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp4OworICAgIFB5T2JqZWN0ICp5ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqeiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk98VVU6bWFrZXRyYW5zIiwKKyAgICAgICAgJngsICZ5LCAmeikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlX21ha2V0cmFuc19pbXBsKHgsIHksIHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlX21ha2V0cmFuc19pbXBsKFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSwgUHlPYmplY3QgKnopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTY2ZWRmNjMwZjc3NDM2YSBpbnB1dD03YmZiZjUyOWEyOTNjNmM1XSovCit7CiAgICAgUHlPYmplY3QgKm5ldyA9IE5VTEwsICprZXksICp2YWx1ZTsKICAgICBQeV9zc2l6ZV90IGkgPSAwOwogICAgIGludCByZXM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98VVU6bWFrZXRyYW5zIiwgJngsICZ5LCAmeikpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIG5ldyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoIW5ldykKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMjczMiw2ICsxMzE0Niw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICByZXN1bHQgPSB0YWlsbWF0Y2goc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kLCAtMSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CiAgICAgICAgICAgICB9CkBAIC0xMjc0OCw2ICsxMzE2NCw4IEBACiAgICAgfQogICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsIC0xKTsKICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAKQEAgLTEyNzgxLDYgKzEzMTk5LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsICsxKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTEyNzk2LDMzICsxMzIxNiw0OCBAQAogICAgIH0KICAgICByZXN1bHQgPSB0YWlsbWF0Y2goc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kLCArMSk7CiAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyZXN1bHQpOwogfQogCiBQeV9MT0NBTF9JTkxJTkUodm9pZCkKIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKLSAgICB3cml0ZXItPnNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcik7CisgICAgaWYgKCF3cml0ZXItPnJlYWRvbmx5KQorICAgICAgICB3cml0ZXItPnNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIC8qIENvcHktb24td3JpdGUgbW9kZTogc2V0IGJ1ZmZlciBzaXplIHRvIDAgc28KKyAgICAgICAgICogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCkgd2lsbCBjb3B5IChhbmQgZW5sYXJnZSkgdGhlIGJ1ZmZlciBvbgorICAgICAgICAgKiBuZXh0IHdyaXRlLiAqLworICAgICAgICB3cml0ZXItPnNpemUgPSAwOworICAgIH0KICAgICB3cml0ZXItPm1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUod3JpdGVyLT5idWZmZXIpOwogICAgIHdyaXRlci0+ZGF0YSA9IFB5VW5pY29kZV9EQVRBKHdyaXRlci0+YnVmZmVyKTsKICAgICB3cml0ZXItPmtpbmQgPSBQeVVuaWNvZGVfS0lORCh3cml0ZXItPmJ1ZmZlcik7CiB9CiAKIHZvaWQKLV9QeVVuaWNvZGVXcml0ZXJfSW5pdChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X3NzaXplX3QgbWluX2xlbmd0aCkKK19QeVVuaWNvZGVXcml0ZXJfSW5pdChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgbWVtc2V0KHdyaXRlciwgMCwgc2l6ZW9mKCp3cml0ZXIpKTsKICNpZmRlZiBQeV9ERUJVRwogICAgIHdyaXRlci0+a2luZCA9IDU7ICAgIC8qIGludmFsaWQga2luZCAqLwogI2VuZGlmCi0gICAgd3JpdGVyLT5taW5fbGVuZ3RoID0gUHlfTUFYKG1pbl9sZW5ndGgsIDEwMCk7Ci0gICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAobWluX2xlbmd0aCA+IDApOworICAgIHdyaXRlci0+bWluX2NoYXIgPSAxMjc7CiB9CiAKIGludAogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlSW50ZXJuYWwoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW5ndGgsIFB5X1VDUzQgbWF4Y2hhcikKIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAvKiBPbiBXaW5kb3dzLCBvdmVyYWxsb2NhdGUgYnkgNTAlIGlzIHRoZSBiZXN0IGZhY3RvciAqLworIyAgZGVmaW5lIE9WRVJBTExPQ0FURV9GQUNUT1IgMgorI2Vsc2UKKyAgIC8qIE9uIExpbnV4LCBvdmVyYWxsb2NhdGUgYnkgMjUlIGlzIHRoZSBiZXN0IGZhY3RvciAqLworIyAgZGVmaW5lIE9WRVJBTExPQ0FURV9GQUNUT1IgNAorI2VuZGlmCiAgICAgUHlfc3NpemVfdCBuZXdsZW47CiAgICAgUHlPYmplY3QgKm5ld2J1ZmZlcjsKIApAQCAtMTI4MzQsMjkgKzEzMjY5LDMwIEBACiAgICAgfQogICAgIG5ld2xlbiA9IHdyaXRlci0+cG9zICsgbGVuZ3RoOwogCisgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCB3cml0ZXItPm1pbl9jaGFyKTsKKwogICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZSkgewotICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIDI1JSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlc2l6ZSAqLwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyA0KSkKLSAgICAgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gNDsKLSAgICAgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCi0gICAgICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOworICAgICAgICBhc3NlcnQoIXdyaXRlci0+cmVhZG9ubHkpOworICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUKKyAgICAgICAgICAgICYmIG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SKSkgeworICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVhbGxvYygpICovCisgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUjsKICAgICAgICAgfQorICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQorICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOworCiAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gUHlVbmljb2RlX05ldyhuZXdsZW4sIG1heGNoYXIpOwogICAgICAgICBpZiAod3JpdGVyLT5idWZmZXIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgaWYgKG5ld2xlbiA+IHdyaXRlci0+c2l6ZSkgewotICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUpIHsKLSAgICAgICAgICAgIC8qIG92ZXJhbGxvY2F0ZSAyNSUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZXNpemUgKi8KLSAgICAgICAgICAgIGlmIChuZXdsZW4gPD0gKFBZX1NTSVpFX1RfTUFYIC0gbmV3bGVuIC8gNCkpCi0gICAgICAgICAgICAgICAgbmV3bGVuICs9IG5ld2xlbiAvIDQ7Ci0gICAgICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQotICAgICAgICAgICAgICAgIG5ld2xlbiA9IHdyaXRlci0+bWluX2xlbmd0aDsKKyAgICBlbHNlIGlmIChuZXdsZW4gPiB3cml0ZXItPnNpemUpIHsKKyAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlCisgICAgICAgICAgICAmJiBuZXdsZW4gPD0gKFBZX1NTSVpFX1RfTUFYIC0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUikpIHsKKyAgICAgICAgICAgIC8qIG92ZXJhbGxvY2F0ZSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlYWxsb2MoKSAqLworICAgICAgICAgICAgbmV3bGVuICs9IG5ld2xlbiAvIE9WRVJBTExPQ0FURV9GQUNUT1I7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKKyAgICAgICAgICAgIG5ld2xlbiA9IHdyaXRlci0+bWluX2xlbmd0aDsKIAogICAgICAgICBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhciB8fCB3cml0ZXItPnJlYWRvbmx5KSB7CiAgICAgICAgICAgICAvKiByZXNpemUgKyB3aWRlbiAqLwpAQCAtMTI4NzQsNyArMTMzMTAsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKLSAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICB9CiAgICAgZWxzZSBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhcikgewogICAgICAgICBhc3NlcnQoIXdyaXRlci0+cmVhZG9ubHkpOwpAQCAtMTI4ODUsOSArMTMzMjAsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5idWZmZXIsIDAsIHdyaXRlci0+cG9zKTsKICAgICAgICAgUHlfREVDUkVGKHdyaXRlci0+YnVmZmVyKTsKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7Ci0gICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgfQorICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgcmV0dXJuIDA7CisKKyN1bmRlZiBPVkVSQUxMT0NBVEVfRkFDVE9SCit9CisKK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIDEsIGNoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBjaCk7CisgICAgd3JpdGVyLT5wb3MrKzsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgY2gpOwogfQogCiBpbnQKQEAgLTEyOTA0LDExICsxMzM1NywxMCBAQAogICAgIG1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKICAgICBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhciB8fCBsZW4gPiB3cml0ZXItPnNpemUgLSB3cml0ZXItPnBvcykgewogICAgICAgICBpZiAod3JpdGVyLT5idWZmZXIgPT0gTlVMTCAmJiAhd3JpdGVyLT5vdmVyYWxsb2NhdGUpIHsKKyAgICAgICAgICAgIHdyaXRlci0+cmVhZG9ubHkgPSAxOwogICAgICAgICAgICAgUHlfSU5DUkVGKHN0cik7CiAgICAgICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IHN0cjsKICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7Ci0gICAgICAgICAgICB3cml0ZXItPnJlYWRvbmx5ID0gMTsKLSAgICAgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CiAgICAgICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMTI5MjEsMjggKzEzMzczLDE0MiBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKK3sKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisgICAgUHlfc3NpemVfdCBsZW47CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKKyAgICBhc3NlcnQoZW5kIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cikpOworICAgIGFzc2VydChzdGFydCA8PSBlbmQpOworCisgICAgaWYgKGVuZCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHN0cik7CisKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiB3cml0ZXItPm1heGNoYXIpCisgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHN0ciwgc3RhcnQsIGVuZCk7CisgICAgZWxzZQorICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgIGxlbiA9IGVuZCAtIHN0YXJ0OworCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgbWF4Y2hhcikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBzdGFydCwgbGVuKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphc2NpaSwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgaWYgKGxlbiA9PSAtMSkKKyAgICAgICAgbGVuID0gc3RybGVuKGFzY2lpKTsKKworICAgIGFzc2VydCh1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoKFB5X1VDUzEqKWFzY2lpLCAoUHlfVUNTMSopYXNjaWkgKyBsZW4pIDwgMTI4KTsKKworICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMICYmICF3cml0ZXItPm92ZXJhbGxvY2F0ZSkgeworICAgICAgICBQeU9iamVjdCAqc3RyOworCisgICAgICAgIHN0ciA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGFzY2lpLCBsZW4pOworICAgICAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7CisgICAgICAgIHdyaXRlci0+YnVmZmVyID0gc3RyOworICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOworICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIDEyNykgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAod3JpdGVyLT5raW5kKQorICAgIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgY29uc3QgUHlfVUNTMSAqc3RyID0gKGNvbnN0IFB5X1VDUzEgKilhc2NpaTsKKyAgICAgICAgUHlfVUNTMSAqZGF0YSA9IHdyaXRlci0+ZGF0YTsKKworICAgICAgICBQeV9NRU1DUFkoZGF0YSArIHdyaXRlci0+cG9zLCBzdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKAorICAgICAgICAgICAgUHlfVUNTMSwgUHlfVUNTMiwKKyAgICAgICAgICAgIGFzY2lpLCBhc2NpaSArIGxlbiwKKyAgICAgICAgICAgIChQeV9VQ1MyICopd3JpdGVyLT5kYXRhICsgd3JpdGVyLT5wb3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUygKKyAgICAgICAgICAgIFB5X1VDUzEsIFB5X1VDUzQsCisgICAgICAgICAgICBhc2NpaSwgYXNjaWkgKyBsZW4sCisgICAgICAgICAgICAoUHlfVUNTNCAqKXdyaXRlci0+ZGF0YSArIHdyaXRlci0+cG9zKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9CisKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUxhdGluMVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfVUNTNCBtYXhjaGFyOworCisgICAgbWF4Y2hhciA9IHVjczFsaWJfZmluZF9tYXhfY2hhcigoUHlfVUNTMSopc3RyLCAoUHlfVUNTMSopc3RyICsgbGVuKTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCBtYXhjaGFyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHVuaWNvZGVfd3JpdGVfY3N0cih3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIHN0ciwgbGVuKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKIFB5T2JqZWN0ICoKIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKKyAgICBQeU9iamVjdCAqc3RyOwogICAgIGlmICh3cml0ZXItPnBvcyA9PSAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYod3JpdGVyLT5idWZmZXIpOworICAgICAgICBQeV9DTEVBUih3cml0ZXItPmJ1ZmZlcik7CiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KICAgICBpZiAod3JpdGVyLT5yZWFkb25seSkgewotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0dFVF9MRU5HVEgod3JpdGVyLT5idWZmZXIpID09IHdyaXRlci0+cG9zKTsKLSAgICAgICAgcmV0dXJuIHdyaXRlci0+YnVmZmVyOworICAgICAgICBzdHIgPSB3cml0ZXItPmJ1ZmZlcjsKKyAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBOVUxMOworICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSA9PSB3cml0ZXItPnBvcyk7CisgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcikgIT0gd3JpdGVyLT5wb3MpIHsKICAgICAgICAgUHlPYmplY3QgKm5ld2J1ZmZlcjsKICAgICAgICAgbmV3YnVmZmVyID0gcmVzaXplX2NvbXBhY3Qod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zKTsKICAgICAgICAgaWYgKG5ld2J1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYod3JpdGVyLT5idWZmZXIpOworICAgICAgICAgICAgUHlfQ0xFQVIod3JpdGVyLT5idWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7CiAgICAgfQotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kod3JpdGVyLT5idWZmZXIsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHRfcmVhZHkod3JpdGVyLT5idWZmZXIpOworICAgIHN0ciA9IHdyaXRlci0+YnVmZmVyOworICAgIHdyaXRlci0+YnVmZmVyID0gTlVMTDsKKyAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkpOworICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdF9yZWFkeShzdHIpOwogfQogCiB2b2lkCkBAIC0xMjk3Nyw3ICsxMzU0Myw3IEBACiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeVVuaWNvZGVfRm9ybWF0QWR2YW5jZWRXcml0ZXIoJndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGZvcm1hdF9zcGVjLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoZm9ybWF0X3NwZWMpKTsKQEAgLTEzMDQ2LDcgKzEzNjEyLDggQEAKICAgICB7InRpdGxlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3RpdGxlLCBNRVRIX05PQVJHUywgdGl0bGVfX2RvY19ffSwKICAgICB7ImNlbnRlciIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9jZW50ZXIsIE1FVEhfVkFSQVJHUywgY2VudGVyX19kb2NfX30sCiAgICAgeyJjb3VudCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAotICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsIGV4cGFuZHRhYnNfX2RvY19ffSwKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZXhwYW5kdGFicywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKICAgICB7InBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9wYXJ0aXRpb24sIE1FVEhfTywgcGFydGl0aW9uX19kb2NfX30sCiAgICAgeyJpbmRleCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9pbmRleCwgTUVUSF9WQVJBUkdTLCBpbmRleF9fZG9jX199LApAQCAtMTMwNTgsNyArMTM2MjUsOCBAQAogICAgIHsicmp1c3QiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcmp1c3QsIE1FVEhfVkFSQVJHUywgcmp1c3RfX2RvY19ffSwKICAgICB7InJzdHJpcCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yc3RyaXAsIE1FVEhfVkFSQVJHUywgcnN0cmlwX19kb2NfX30sCiAgICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JwYXJ0aXRpb24sIE1FVEhfTywgcnBhcnRpdGlvbl9fZG9jX199LAotICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zcGxpdGxpbmVzLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBzcGxpdGxpbmVzX19kb2NfX30sCisgICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3NwbGl0bGluZXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHNwbGl0bGluZXNfX2RvY19ffSwKICAgICB7InN0cmlwIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3N0cmlwLCBNRVRIX1ZBUkFSR1MsIHN0cmlwX19kb2NfX30sCiAgICAgeyJzd2FwY2FzZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zd2FwY2FzZSwgTUVUSF9OT0FSR1MsIHN3YXBjYXNlX19kb2NfX30sCiAgICAgeyJ0cmFuc2xhdGUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfdHJhbnNsYXRlLCBNRVRIX08sIHRyYW5zbGF0ZV9fZG9jX199LApAQCAtMTMwODAsOCArMTM2NDgsNyBAQAogICAgIHsiZm9ybWF0IiwgKFB5Q0Z1bmN0aW9uKSBkb19zdHJpbmdfZm9ybWF0LCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBmb3JtYXRfX2RvY19ffSwKICAgICB7ImZvcm1hdF9tYXAiLCAoUHlDRnVuY3Rpb24pIGRvX3N0cmluZ19mb3JtYXRfbWFwLCBNRVRIX08sIGZvcm1hdF9tYXBfX2RvY19ffSwKICAgICB7Il9fZm9ybWF0X18iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfX2Zvcm1hdF9fLCBNRVRIX1ZBUkFSR1MsIHBfZm9ybWF0X19kb2NfX30sCi0gICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbWFrZXRyYW5zLAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX1NUQVRJQywgbWFrZXRyYW5zX19kb2NfX30sCisgICAgVU5JQ09ERV9NQUtFVFJBTlNfTUVUSE9EREVGCiAgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIHNpemVvZl9fZG9jX199LAogI2lmIDAKICAgICAvKiBUaGVzZSBtZXRob2RzIGFyZSBqdXN0IHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgaW1wbGVtZW50YXRpb24uICovCkBAIC0xMzE5NiwxNiArMTM3NjMsMzkgQEAKIAogLyogSGVscGVycyBmb3IgUHlVbmljb2RlX0Zvcm1hdCgpICovCiAKK3N0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90IHsKKyAgICBQeU9iamVjdCAqYXJnczsKKyAgICBpbnQgYXJnc19vd25lZDsKKyAgICBQeV9zc2l6ZV90IGFyZ2xlbiwgYXJnaWR4OworICAgIFB5T2JqZWN0ICpkaWN0OworCisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBmbXRraW5kOworICAgIFB5X3NzaXplX3QgZm10Y250LCBmbXRwb3M7CisgICAgdm9pZCAqZm10ZGF0YTsKKyAgICBQeU9iamVjdCAqZm10c3RyOworCisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Cit9OworCitzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgeworICAgIFB5X1VDUzQgY2g7CisgICAgaW50IGZsYWdzOworICAgIFB5X3NzaXplX3Qgd2lkdGg7CisgICAgaW50IHByZWM7CisgICAgaW50IHNpZ247Cit9OworCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0bmV4dGFyZyhQeU9iamVjdCAqYXJncywgUHlfc3NpemVfdCBhcmdsZW4sIFB5X3NzaXplX3QgKnBfYXJnaWR4KQordW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4KQogewotICAgIFB5X3NzaXplX3QgYXJnaWR4ID0gKnBfYXJnaWR4OwotICAgIGlmIChhcmdpZHggPCBhcmdsZW4pIHsKLSAgICAgICAgKCpwX2FyZ2lkeCkrKzsKLSAgICAgICAgaWYgKGFyZ2xlbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gYXJnczsKKyAgICBQeV9zc2l6ZV90IGFyZ2lkeCA9IGN0eC0+YXJnaWR4OworCisgICAgaWYgKGFyZ2lkeCA8IGN0eC0+YXJnbGVuKSB7CisgICAgICAgIGN0eC0+YXJnaWR4Kys7CisgICAgICAgIGlmIChjdHgtPmFyZ2xlbiA8IDApCisgICAgICAgICAgICByZXR1cm4gY3R4LT5hcmdzOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGFyZ2lkeCk7CisgICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGN0eC0+YXJncywgYXJnaWR4KTsKICAgICB9CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmb3JtYXQgc3RyaW5nIik7CkBAIC0xMzIxNCwzMyArMTM4MDQsNDIgQEAKIAogLyogUmV0dXJucyBhIG5ldyByZWZlcmVuY2UgdG8gYSBQeVVuaWNvZGUgb2JqZWN0LCBvciBOVUxMIG9uIGZhaWx1cmUuICovCiAKKy8qIEZvcm1hdCBhIGZsb2F0IGludG8gdGhlIHdyaXRlciBpZiB0aGUgd3JpdGVyIGlzIG5vdCBOVUxMLCBvciBpbnRvICpwX291dHB1dAorICAgb3RoZXJ3aXNlLgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KIHN0YXRpYyBpbnQKLWZvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBpbnQgZmxhZ3MsIGludCBwcmVjLCBpbnQgdHlwZSwKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK2Zvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgY2hhciAqcDsKICAgICBkb3VibGUgeDsKICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgcHJlYzsKKyAgICBpbnQgZHRvYV9mbGFnczsKIAogICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHYpOwogICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgcHJlYyA9IGFyZy0+cHJlYzsKICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgIHByZWMgPSA2OwogCi0gICAgcCA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh4LCB0eXBlLCBwcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRl9BTFQpID8gUHlfRFRTRl9BTFQgOiAwLCBOVUxMKTsKKyAgICBpZiAoYXJnLT5mbGFncyAmIEZfQUxUKQorICAgICAgICBkdG9hX2ZsYWdzID0gUHlfRFRTRl9BTFQ7CisgICAgZWxzZQorICAgICAgICBkdG9hX2ZsYWdzID0gMDsKKyAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIGFyZy0+Y2gsIHByZWMsIGR0b2FfZmxhZ3MsIE5VTEwpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBsZW4gPSBzdHJsZW4ocCk7CiAgICAgaWYgKHdyaXRlcikgewotICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCAxMjcpID09IC0xKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBwLCBsZW4pIDwgMCkgewogICAgICAgICAgICAgUHlNZW1fRnJlZShwKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBwLCBsZW4pOwotICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgKnBfb3V0cHV0ID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkocCwgbGVuKTsKQEAgLTEzMjY3LDcgKzEzODY2LDcgQEAKICAqIHByb2R1Y2UgYSAnLScgc2lnbiwgYnV0IGNhbiBmb3IgUHl0aG9uJ3MgdW5ib3VuZGVkIGludHMuCiAgKi8KIHN0YXRpYyBQeU9iamVjdCoKLWZvcm1hdGxvbmcoUHlPYmplY3QgKnZhbCwgaW50IGZsYWdzLCBpbnQgcHJlYywgaW50IHR5cGUpCitmb3JtYXRsb25nKFB5T2JqZWN0ICp2YWwsIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGNoYXIgKmJ1ZjsKQEAgLTEzMjc3LDYgKzEzODc2LDggQEAKICAgICBQeV9zc2l6ZV90IGxsZW47CiAgICAgaW50IG51bWRpZ2l0czsgICAgICAvKiBsZW4gPT0gbnVtbm9uZGlnaXRzICsgbnVtZGlnaXRzICovCiAgICAgaW50IG51bW5vbmRpZ2l0cyA9IDA7CisgICAgaW50IHByZWMgPSBhcmctPnByZWM7CisgICAgaW50IHR5cGUgPSBhcmctPmNoOwogCiAgICAgLyogQXZvaWQgZXhjZWVkaW5nIFNTSVpFX1RfTUFYICovCiAgICAgaWYgKHByZWMgPiBJTlRfTUFYLTMpIHsKQEAgLTEzMjg4LDEzICsxMzg4OSwxNCBAQAogICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodmFsKSk7CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoISIndHlwZScgbm90IGluIFtkaXVveFhdIik7CiAgICAgY2FzZSAnZCc6CisgICAgY2FzZSAnaSc6CiAgICAgY2FzZSAndSc6Ci0gICAgICAgIC8qIFNwZWNpYWwtY2FzZSBib29sZWFuOiB3ZSB3YW50IDAvMSAqLwotICAgICAgICBpZiAoUHlCb29sX0NoZWNrKHZhbCkpCi0gICAgICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RZUEUodmFsKS0+dHBfc3RyKHZhbCk7CisgICAgICAgIC8qIGludCBhbmQgaW50IHN1YmNsYXNzZXMgc2hvdWxkIHByaW50IG51bWVyaWNhbGx5IHdoZW4gYSBudW1lcmljICovCisgICAgICAgIC8qIGZvcm1hdCBjb2RlIGlzIHVzZWQgKHNlZSBpc3N1ZTE4NzgwKSAqLworICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ28nOgogICAgICAgICBudW1ub25kaWdpdHMgPSAyOwpAQCAtMTMzMDUsOCArMTM5MDcsNiBAQAogICAgICAgICBudW1ub25kaWdpdHMgPSAyOwogICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxNik7CiAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFzc2VydCghIid0eXBlJyBub3QgaW4gW2R1b3hYXSIpOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzMxNywxMiArMTM5MTcsMTQgQEAKIAogICAgIC8qIFRvIG1vZGlmeSB0aGUgc3RyaW5nIGluLXBsYWNlLCB0aGVyZSBjYW4gb25seSBiZSBvbmUgcmVmZXJlbmNlLiAqLwogICAgIGlmIChQeV9SRUZDTlQocmVzdWx0KSAhPSAxKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHJlc3VsdCk7CiAgICAgbGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCk7CiAgICAgaWYgKGxsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxhcmdlIGluIF9QeUJ5dGVzX0Zvcm1hdExvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzMzNCw3ICsxMzkzNiw3IEBACiAgICAgYXNzZXJ0KG51bWRpZ2l0cyA+IDApOwogCiAgICAgLyogR2V0IHJpZCBvZiBiYXNlIG1hcmtlciB1bmxlc3MgRl9BTFQgKi8KLSAgICBpZiAoKChmbGFncyAmIEZfQUxUKSA9PSAwICYmCisgICAgaWYgKCgoYXJnLT5mbGFncyAmIEZfQUxUKSA9PSAwICYmCiAgICAgICAgICh0eXBlID09ICdvJyB8fCB0eXBlID09ICd4JyB8fCB0eXBlID09ICdYJykpKSB7CiAgICAgICAgIGFzc2VydChidWZbc2lnbl0gPT0gJzAnKTsKICAgICAgICAgYXNzZXJ0KGJ1ZltzaWduKzFdID09ICd4JyB8fCBidWZbc2lnbisxXSA9PSAnWCcgfHwKQEAgLTEzMzc5LDE1ICsxMzk4MSwxMjEgQEAKICAgICAgICAgICAgIGlmIChidWZbaV0gPj0gJ2EnICYmIGJ1ZltpXSA8PSAneCcpCiAgICAgICAgICAgICAgICAgYnVmW2ldIC09ICdhJy0nQSc7CiAgICAgfQotICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkgfHwgbGVuICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCkpIHsKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhyZXN1bHQpCisgICAgICAgIHx8IGJ1ZiAhPSBQeVVuaWNvZGVfREFUQShyZXN1bHQpKSB7CiAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlOwogICAgICAgICB1bmljb2RlID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBsZW4pOwogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gdW5pY29kZTsKICAgICB9CisgICAgZWxzZSBpZiAobGVuICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCkpIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJnJlc3VsdCwgbGVuKSA8IDApCisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvKiBGb3JtYXQgYW4gaW50ZWdlciBvciBhIGZsb2F0IGFzIGFuIGludGVnZXIuCisgKiBSZXR1cm4gMSBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIHRoZSB3cml0ZXIsCisgKiAgICAgICAgMCBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvICpwX291dHB1dAorICogICAgICAgLTEgYW5kIHJhaXNlIGFuIGV4Y2VwdGlvbiBvbiBlcnJvciAqLworc3RhdGljIGludAorbWFpbmZvcm1hdGxvbmcoUHlPYmplY3QgKnYsCisgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCit7CisgICAgUHlPYmplY3QgKmlvYmosICpyZXM7CisgICAgY2hhciB0eXBlID0gKGNoYXIpYXJnLT5jaDsKKworICAgIGlmICghUHlOdW1iZXJfQ2hlY2sodikpCisgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworCisgICAgLyogbWFrZSBzdXJlIG51bWJlciBpcyBhIHR5cGUgb2YgaW50ZWdlciAqLworICAgIC8qIGlmIG5vdCwgaXNzdWUgZGVwcmVjYXRpb24gd2FybmluZyBmb3Igbm93ICovCisgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gJ28nIHx8IHR5cGUgPT0gJ3gnIHx8IHR5cGUgPT0gJ1gnKSB7CisgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfSW5kZXgodik7CisgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMgaW50IGNvbnZlcnNpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7CisgICAgICAgICAgICAgICAgaWYgKGlvYmogPT0gTlVMTCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7CisgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKGlvYmopKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlvYmogPSB2OworICAgICAgICBQeV9JTkNSRUYoaW9iaik7CisgICAgfQorCisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpCisgICAgICAgICYmIGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xCisgICAgICAgICYmICEoYXJnLT5mbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkKKyAgICAgICAgJiYgdHlwZSAhPSAnWCcpCisgICAgeworICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgaW50IGFsdGVybmF0ZSA9IGFyZy0+ZmxhZ3MgJiBGX0FMVDsKKyAgICAgICAgaW50IGJhc2U7CisKKyAgICAgICAgc3dpdGNoKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIid0eXBlJyBub3QgaW4gW2RpdW94WF0iKTsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBiYXNlID0gODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgY2FzZSAnWCc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDE2OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKHdyaXRlciwgdiwgYmFzZSwgYWx0ZXJuYXRlKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmVzID0gZm9ybWF0bG9uZyhpb2JqLCBhcmcpOworICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAqcF9vdXRwdXQgPSByZXM7CisgICAgcmV0dXJuIDA7CisKK3dyb25ndHlwZToKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgIgorICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAorICAgICAgICAgICAgdHlwZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIC0xOworfQorCiBzdGF0aWMgUHlfVUNTNAogZm9ybWF0Y2hhcihQeU9iamVjdCAqdikKIHsKQEAgLTEzMzk5LDggKzE0MTA3LDMwIEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIEludGVnZXIgaW5wdXQgdHJ1bmNhdGVkIHRvIGEgY2hhcmFjdGVyICovCisgICAgICAgIFB5T2JqZWN0ICppb2JqOwogICAgICAgICBsb25nIHg7CisgICAgICAgIC8qIG1ha2Ugc3VyZSBudW1iZXIgaXMgYSB0eXBlIG9mIGludGVnZXIgKi8KKyAgICAgICAgLyogaWYgbm90LCBpc3N1ZSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBub3cgKi8KKyAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9JbmRleCh2KTsKKyAgICAgICAgICAgIGlmIChpb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyBpbnQgY29udmVyc2lvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfTG9uZyh2KTsKKyAgICAgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IGlvYmo7CisgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgICAgIH0KKyAgICAgICAgLyogSW50ZWdlciBpbnB1dCB0cnVuY2F0ZWQgdG8gYSBjaGFyYWN0ZXIgKi8KICAgICAgICAgeCA9IFB5TG9uZ19Bc0xvbmcodik7CiAgICAgICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CkBAIC0xMzQyMCw1NDAgKzE0MTUwLDU4OCBAQAogICAgIHJldHVybiAoUHlfVUNTNCkgLTE7CiB9CiAKKy8qIFBhcnNlIG9wdGlvbnMgb2YgYW4gYXJndW1lbnQ6IGZsYWdzLCB3aWR0aCwgcHJlY2lzaW9uLgorICAgSGFuZGxlIGFsc28gIiUobmFtZSkiIHN5bnRheC4KKworICAgUmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIGFyZy0+c3RyLgorICAgUmV0dXJuIDEgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHdyaXR0ZW4gaW50byBjdHgtPndyaXRlciwKKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnX3BhcnNlKHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcpCit7CisjZGVmaW5lIEZPUk1BVF9SRUFEKGN0eCkgXAorICAgICAgICBQeVVuaWNvZGVfUkVBRCgoY3R4KS0+Zm10a2luZCwgKGN0eCktPmZtdGRhdGEsIChjdHgpLT5mbXRwb3MpCisKKyAgICBQeU9iamVjdCAqdjsKKworICAgIGlmIChhcmctPmNoID09ICcoJykgeworICAgICAgICAvKiBHZXQgYXJndW1lbnQgdmFsdWUgZnJvbSBhIGRpY3Rpb25hcnkuIEV4YW1wbGU6ICIlKG5hbWUpcyIuICovCisgICAgICAgIFB5X3NzaXplX3Qga2V5c3RhcnQ7CisgICAgICAgIFB5X3NzaXplX3Qga2V5bGVuOworICAgICAgICBQeU9iamVjdCAqa2V5OworICAgICAgICBpbnQgcGNvdW50ID0gMTsKKworICAgICAgICBpZiAoY3R4LT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCByZXF1aXJlcyBhIG1hcHBpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICArK2N0eC0+Zm10cG9zOworICAgICAgICAtLWN0eC0+Zm10Y250OworICAgICAgICBrZXlzdGFydCA9IGN0eC0+Zm10cG9zOworICAgICAgICAvKiBTa2lwIG92ZXIgYmFsYW5jZWQgcGFyZW50aGVzZXMgKi8KKyAgICAgICAgd2hpbGUgKHBjb3VudCA+IDAgJiYgLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGlmIChhcmctPmNoID09ICcpJykKKyAgICAgICAgICAgICAgICAtLXBjb3VudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPT0gJygnKQorICAgICAgICAgICAgICAgICsrcGNvdW50OworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgfQorICAgICAgICBrZXlsZW4gPSBjdHgtPmZtdHBvcyAtIGtleXN0YXJ0IC0gMTsKKyAgICAgICAgaWYgKGN0eC0+Zm10Y250IDwgMCB8fCBwY291bnQgPiAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQga2V5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gUHlVbmljb2RlX1N1YnN0cmluZyhjdHgtPmZtdHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzdGFydCwga2V5c3RhcnQgKyBrZXlsZW4pOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChjdHgtPmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjdHgtPmFyZ3MpOworICAgICAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMDsKKyAgICAgICAgfQorICAgICAgICBjdHgtPmFyZ3MgPSBQeU9iamVjdF9HZXRJdGVtKGN0eC0+ZGljdCwga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChjdHgtPmFyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMTsKKyAgICAgICAgY3R4LT5hcmdsZW4gPSAtMTsKKyAgICAgICAgY3R4LT5hcmdpZHggPSAtMjsKKyAgICB9CisKKyAgICAvKiBQYXJzZSBmbGFncy4gRXhhbXBsZTogIiUraSIgPT4gZmxhZ3M9Rl9TSUdOLiAqLworICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIHN3aXRjaCAoYXJnLT5jaCkgeworICAgICAgICBjYXNlICctJzogYXJnLT5mbGFncyB8PSBGX0xKVVNUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnKyc6IGFyZy0+ZmxhZ3MgfD0gRl9TSUdOOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnICc6IGFyZy0+ZmxhZ3MgfD0gRl9CTEFOSzsgY29udGludWU7CisgICAgICAgIGNhc2UgJyMnOiBhcmctPmZsYWdzIHw9IEZfQUxUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnMCc6IGFyZy0+ZmxhZ3MgfD0gRl9aRVJPOyBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBQYXJzZSB3aWR0aC4gRXhhbXBsZTogIiUxMHMiID0+IHdpZHRoPTEwICovCisgICAgaWYgKGFyZy0+Y2ggPT0gJyonKSB7CisgICAgICAgIHYgPSB1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKGN0eCk7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFyZy0+d2lkdGggPSBQeUxvbmdfQXNTc2l6ZV90KHYpOworICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYXJnLT53aWR0aCA8IDApIHsKKyAgICAgICAgICAgIGFyZy0+ZmxhZ3MgfD0gRl9MSlVTVDsKKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSAtYXJnLT53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJnLT5jaCA+PSAnMCcgJiYgYXJnLT5jaCA8PSAnOScpIHsKKyAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+Y2ggLSAnMCc7CisgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBTaW5jZSBhcmctPmNoIGlzIHVuc2lnbmVkLCB0aGUgUkhTIHdvdWxkIGVuZCB1cCBhcyB1bnNpZ25lZCwKKyAgICAgICAgICAgICAgIG1peGluZyBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24uIFNpbmNlIGFyZy0+Y2ggaXMgYmV0d2VlbgorICAgICAgICAgICAgICAgJzAnIGFuZCAnOScsIGNhc3RpbmcgdG8gaW50IGlzIHNhZmUuICovCisgICAgICAgICAgICBpZiAoYXJnLT53aWR0aCA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+d2lkdGgqMTAgKyAoYXJnLT5jaCAtICcwJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBQYXJzZSBwcmVjaXNpb24uIEV4YW1wbGU6ICIlLjNmIiA9PiBwcmVjPTMgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAnLicpIHsKKyAgICAgICAgYXJnLT5wcmVjID0gMDsKKyAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICB9CisgICAgICAgIGlmIChhcmctPmNoID09ICcqJykgeworICAgICAgICAgICAgdiA9IHVuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoY3R4KTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmctPnByZWMgPSBfUHlMb25nX0FzSW50KHYpOworICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChhcmctPnByZWMgPCAwKQorICAgICAgICAgICAgICAgIGFyZy0+cHJlYyA9IDA7CisgICAgICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhcmctPmNoID49ICcwJyAmJiBhcmctPmNoIDw9ICc5JykgeworICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5jaCAtICcwJzsKKyAgICAgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChhcmctPnByZWMgPiAoSU5UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWNpc2lvbiB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5wcmVjKjEwICsgKGFyZy0+Y2ggLSAnMCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogSWdub3JlICJoIiwgImwiIGFuZCAiTCIgZm9ybWF0IHByZWZpeCAoZXg6ICIlaGkiIG9yICIlbHMiKSAqLworICAgIGlmIChjdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgIGlmIChhcmctPmNoID09ICdoJyB8fCBhcmctPmNoID09ICdsJyB8fCBhcmctPmNoID09ICdMJykgeworICAgICAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGN0eC0+Zm10Y250IDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjdW5kZWYgRk9STUFUX1JFQUQKK30KKworLyogRm9ybWF0IG9uZSBhcmd1bWVudC4gU3VwcG9ydGVkIGNvbnZlcnNpb24gc3BlY2lmaWVyczoKKworICAgLSAicyIsICJyIiwgImEiOiBhbnkgdHlwZQorICAgLSAiaSIsICJkIiwgInUiOiBpbnQgb3IgZmxvYXQKKyAgIC0gIm8iLCAieCIsICJYIjogaW50CisgICAtICJlIiwgIkUiLCAiZiIsICJGIiwgImciLCAiRyI6IGZsb2F0CisgICAtICJjIjogaW50IG9yIHN0ciAoMSBjaGFyYWN0ZXIpCisKKyAgIFdoZW4gcG9zc2libGUsIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiBkaXJlY3RseSBpbnRvIHRoZSBVbmljb2RlIHdyaXRlcgorICAgKGN0eC0+d3JpdGVyKS4gQSBzdHJpbmcgaXMgY3JlYXRlZCB3aGVuIHBhZGRpbmcgaXMgcmVxdWlyZWQuCisKKyAgIFJldHVybiAwIGlmIHRoZSBhcmd1bWVudCBoYXMgYmVlbiBmb3JtYXR0ZWQgaW50byAqcF9zdHIsCisgICAgICAgICAgMSBpZiB0aGUgYXJndW1lbnQgaGFzIGJlZW4gd3JpdHRlbiBpbnRvIGN0eC0+d3JpdGVyLAorICAgICAgICAgLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmdfZm9ybWF0KHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnBfc3RyKQoreworICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciA9ICZjdHgtPndyaXRlcjsKKworICAgIGlmIChjdHgtPmZtdGNudCA9PSAwKQorICAgICAgICBjdHgtPndyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgaWYgKGFyZy0+Y2ggPT0gJyUnKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsICclJykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICB2ID0gdW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhjdHgpOworICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworCisgICAgc3dpdGNoIChhcmctPmNoKSB7CisgICAgY2FzZSAncyc6CisgICAgY2FzZSAncic6CisgICAgY2FzZSAnYSc6CisgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSAmJiBhcmctPndpZHRoID09IC0xICYmIGFyZy0+cHJlYyA9PSAtMSkgeworICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIod3JpdGVyLCB2LCAxMCwgYXJnLT5mbGFncyAmIEZfQUxUKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJiBhcmctPmNoID09ICdzJykgeworICAgICAgICAgICAgKnBfc3RyID0gdjsKKyAgICAgICAgICAgIFB5X0lOQ1JFRigqcF9zdHIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJ3MnKQorICAgICAgICAgICAgICAgICpwX3N0ciA9IFB5T2JqZWN0X1N0cih2KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPT0gJ3InKQorICAgICAgICAgICAgICAgICpwX3N0ciA9IFB5T2JqZWN0X1JlcHIodik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnBfc3RyID0gUHlPYmplY3RfQVNDSUkodik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdpJzoKKyAgICBjYXNlICdkJzoKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICdvJzoKKyAgICBjYXNlICd4JzoKKyAgICBjYXNlICdYJzoKKyAgICB7CisgICAgICAgIGludCByZXQgPSBtYWluZm9ybWF0bG9uZyh2LCBhcmcsIHBfc3RyLCB3cml0ZXIpOworICAgICAgICBpZiAocmV0ICE9IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICBhcmctPnNpZ24gPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdlJzoKKyAgICBjYXNlICdFJzoKKyAgICBjYXNlICdmJzoKKyAgICBjYXNlICdGJzoKKyAgICBjYXNlICdnJzoKKyAgICBjYXNlICdHJzoKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xCisgICAgICAgICAgICAmJiAhKGFyZy0+ZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBhcmcsIE5VTEwsIHdyaXRlcikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBhcmctPnNpZ24gPSAxOworICAgICAgICBpZiAoZm9ybWF0ZmxvYXQodiwgYXJnLCBwX3N0ciwgTlVMTCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnYyc6CisgICAgeworICAgICAgICBQeV9VQ1M0IGNoID0gZm9ybWF0Y2hhcih2KTsKKyAgICAgICAgaWYgKGNoID09IChQeV9VQ1M0KSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xKSB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgKnBfc3RyID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgZm9ybWF0IGNoYXJhY3RlciAnJWMnICgweCV4KSAiCisgICAgICAgICAgICAgICAgICAgICAiYXQgaW5kZXggJXpkIiwKKyAgICAgICAgICAgICAgICAgICAgICgzMTw9YXJnLT5jaCAmJiBhcmctPmNoPD0xMjYpID8gKGNoYXIpYXJnLT5jaCA6ICc/JywKKyAgICAgICAgICAgICAgICAgICAgIChpbnQpYXJnLT5jaCwKKyAgICAgICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zIC0gMSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCpwX3N0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgYXNzZXJ0IChQeVVuaWNvZGVfQ2hlY2soKnBfc3RyKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZ19vdXRwdXQoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHIpCit7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kOworICAgIHZvaWQgKnBidWY7CisgICAgUHlfc3NpemVfdCBwaW5kZXg7CisgICAgUHlfVUNTNCBzaWduY2hhcjsKKyAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisgICAgUHlfc3NpemVfdCBzdWJsZW47CisgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyID0gJmN0eC0+d3JpdGVyOworICAgIFB5X1VDUzQgZmlsbDsKKworICAgIGZpbGwgPSAnICc7CisgICAgaWYgKGFyZy0+c2lnbiAmJiBhcmctPmZsYWdzICYgRl9aRVJPKQorICAgICAgICBmaWxsID0gJzAnOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOworICAgIGlmICgoYXJnLT53aWR0aCA9PSAtMSB8fCBhcmctPndpZHRoIDw9IGxlbikKKyAgICAgICAgJiYgKGFyZy0+cHJlYyA9PSAtMSB8fCBhcmctPnByZWMgPj0gbGVuKQorICAgICAgICAmJiAhKGFyZy0+ZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQorICAgIHsKKyAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgc3RyKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogVHJ1bmNhdGUgdGhlIHN0cmluZyBmb3IgInMiLCAiciIgYW5kICJhIiBmb3JtYXRzCisgICAgICAgaWYgdGhlIHByZWNpc2lvbiBpcyBzZXQgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAncycgfHwgYXJnLT5jaCA9PSAncicgfHwgYXJnLT5jaCA9PSAnYScpIHsKKyAgICAgICAgaWYgKGFyZy0+cHJlYyA+PSAwICYmIGxlbiA+IGFyZy0+cHJlYykKKyAgICAgICAgICAgIGxlbiA9IGFyZy0+cHJlYzsKKyAgICB9CisKKyAgICAvKiBBZGp1c3Qgc2lnbiBhbmQgd2lkdGggKi8KKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyKTsKKyAgICBwYnVmID0gUHlVbmljb2RlX0RBVEEoc3RyKTsKKyAgICBwaW5kZXggPSAwOworICAgIHNpZ25jaGFyID0gJ1wwJzsKKyAgICBpZiAoYXJnLT5zaWduKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpOworICAgICAgICBpZiAoY2ggPT0gJy0nIHx8IGNoID09ICcrJykgeworICAgICAgICAgICAgc2lnbmNoYXIgPSBjaDsKKyAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgcGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJnLT5mbGFncyAmIEZfU0lHTikKKyAgICAgICAgICAgIHNpZ25jaGFyID0gJysnOworICAgICAgICBlbHNlIGlmIChhcmctPmZsYWdzICYgRl9CTEFOSykKKyAgICAgICAgICAgIHNpZ25jaGFyID0gJyAnOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmctPnNpZ24gPSAwOworICAgIH0KKyAgICBpZiAoYXJnLT53aWR0aCA8IGxlbikKKyAgICAgICAgYXJnLT53aWR0aCA9IGxlbjsKKworICAgIC8qIFByZXBhcmUgdGhlIHdyaXRlciAqLworICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgaWYgKCEoYXJnLT5mbGFncyAmIEZfTEpVU1QpKSB7CisgICAgICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgICAgIGlmICgoYXJnLT53aWR0aC0xKSA+IGxlbikKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGZpbGwpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGFyZy0+d2lkdGggPiBsZW4pCisgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBmaWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiBtYXhjaGFyKSB7CisgICAgICAgIFB5X1VDUzQgc3RybWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIoc3RyLCAwLCBwaW5kZXgrbGVuKTsKKyAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBzdHJtYXhjaGFyKTsKKyAgICB9CisKKyAgICBidWZsZW4gPSBhcmctPndpZHRoOworICAgIGlmIChhcmctPnNpZ24gJiYgbGVuID09IGFyZy0+d2lkdGgpCisgICAgICAgIGJ1ZmxlbisrOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBidWZsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBXcml0ZSB0aGUgc2lnbiBpZiBuZWVkZWQgKi8KKyAgICBpZiAoYXJnLT5zaWduKSB7CisgICAgICAgIGlmIChmaWxsICE9ICcgJykgeworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgc2lnbmNoYXIpOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJnLT53aWR0aCA+IGxlbikKKyAgICAgICAgICAgIGFyZy0+d2lkdGgtLTsKKyAgICB9CisKKyAgICAvKiBXcml0ZSB0aGUgbnVtZXJpYyBwcmVmaXggZm9yICJ4IiwgIlgiIGFuZCAibyIgZm9ybWF0cworICAgICAgIGlmIHRoZSBhbHRlcm5hdGUgZm9ybSBpcyB1c2VkLgorICAgICAgIEZvciBleGFtcGxlLCB3cml0ZSAiMHgiIGZvciB0aGUgIiUjeCIgZm9ybWF0LiAqLworICAgIGlmICgoYXJnLT5mbGFncyAmIEZfQUxUKSAmJiAoYXJnLT5jaCA9PSAneCcgfHwgYXJnLT5jaCA9PSAnWCcgfHwgYXJnLT5jaCA9PSAnbycpKSB7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXggKyAxKSA9PSBhcmctPmNoKTsKKyAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCAnMCcpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcysxLCBhcmctPmNoKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDI7CisgICAgICAgICAgICBwaW5kZXggKz0gMjsKKyAgICAgICAgfQorICAgICAgICBhcmctPndpZHRoIC09IDI7CisgICAgICAgIGlmIChhcmctPndpZHRoIDwgMCkKKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSAwOworICAgICAgICBsZW4gLT0gMjsKKyAgICB9CisKKyAgICAvKiBQYWQgbGVmdCB3aXRoIHRoZSBmaWxsIGNoYXJhY3RlciBpZiBuZWVkZWQgKi8KKyAgICBpZiAoYXJnLT53aWR0aCA+IGxlbiAmJiAhKGFyZy0+ZmxhZ3MgJiBGX0xKVVNUKSkgeworICAgICAgICBzdWJsZW4gPSBhcmctPndpZHRoIC0gbGVuOworICAgICAgICBGSUxMKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCBmaWxsLCB3cml0ZXItPnBvcywgc3VibGVuKTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gc3VibGVuOworICAgICAgICBhcmctPndpZHRoID0gbGVuOworICAgIH0KKworICAgIC8qIElmIHBhZGRpbmcgd2l0aCBzcGFjZXM6IHdyaXRlIHNpZ24gaWYgbmVlZGVkIGFuZC9vciBudW1lcmljIHByZWZpeCBpZgorICAgICAgIHRoZSBhbHRlcm5hdGUgZm9ybSBpcyB1c2VkICovCisgICAgaWYgKGZpbGwgPT0gJyAnKSB7CisgICAgICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIHNpZ25jaGFyKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChhcmctPmZsYWdzICYgRl9BTFQpICYmIChhcmctPmNoID09ICd4JyB8fCBhcmctPmNoID09ICdYJyB8fCBhcmctPmNoID09ICdvJykpIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KzEpID09IGFyZy0+Y2gpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgJzAnKTsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MrMSwgYXJnLT5jaCk7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSAyOworICAgICAgICAgICAgcGluZGV4ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXcml0ZSBjaGFyYWN0ZXJzICovCisgICAgaWYgKGxlbikgeworICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcGluZGV4LCBsZW4pOworICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgfQorCisgICAgLyogUGFkIHJpZ2h0IHdpdGggdGhlIGZpbGwgY2hhcmFjdGVyIGlmIG5lZWRlZCAqLworICAgIGlmIChhcmctPndpZHRoID4gbGVuKSB7CisgICAgICAgIHN1YmxlbiA9IGFyZy0+d2lkdGggLSBsZW47CisgICAgICAgIEZJTEwod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsICcgJywgd3JpdGVyLT5wb3MsIHN1Ymxlbik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IHN1YmxlbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEhlbHBlciBvZiBQeVVuaWNvZGVfRm9ybWF0KCk6IGZvcm1hdCBvbmUgYXJnLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmcoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCkKK3sKKyAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgYXJnOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgaW50IHJldDsKKworICAgIGFyZy5jaCA9IFB5VW5pY29kZV9SRUFEKGN0eC0+Zm10a2luZCwgY3R4LT5mbXRkYXRhLCBjdHgtPmZtdHBvcyk7CisgICAgYXJnLmZsYWdzID0gMDsKKyAgICBhcmcud2lkdGggPSAtMTsKKyAgICBhcmcucHJlYyA9IC0xOworICAgIGFyZy5zaWduID0gMDsKKyAgICBzdHIgPSBOVUxMOworCisgICAgcmV0ID0gdW5pY29kZV9mb3JtYXRfYXJnX3BhcnNlKGN0eCwgJmFyZyk7CisgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0ID0gdW5pY29kZV9mb3JtYXRfYXJnX2Zvcm1hdChjdHgsICZhcmcsICZzdHIpOworICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChyZXQgIT0gMSkgeworICAgICAgICByZXQgPSB1bmljb2RlX2Zvcm1hdF9hcmdfb3V0cHV0KGN0eCwgJmFyZywgc3RyKTsKKyAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGN0eC0+ZGljdCAmJiAoY3R4LT5hcmdpZHggPCBjdHgtPmFyZ2xlbikgJiYgYXJnLmNoICE9ICclJykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogUHlPYmplY3QgKgogUHlVbmljb2RlX0Zvcm1hdChQeU9iamVjdCAqZm9ybWF0LCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IGZtdGNudCwgZm10cG9zLCBhcmdsZW4sIGFyZ2lkeDsKLSAgICBpbnQgYXJnc19vd25lZCA9IDA7Ci0gICAgUHlPYmplY3QgKmRpY3QgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0ZW1wID0gTlVMTDsKLSAgICBQeU9iamVjdCAqc2Vjb25kID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdWZvcm1hdDsKLSAgICB2b2lkICpmbXQ7Ci0gICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kLCBmbXRraW5kOwotICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwotICAgIFB5X3NzaXplX3Qgc3VibGVuOwotICAgIFB5X1VDUzQgbWF4Y2hhcjsKKyAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCBjdHg7CiAKICAgICBpZiAoZm9ybWF0ID09IE5VTEwgfHwgYXJncyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgdWZvcm1hdCA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KGZvcm1hdCk7Ci0gICAgaWYgKHVmb3JtYXQgPT0gTlVMTCkKKworICAgIGN0eC5mbXRzdHIgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChmb3JtYXQpOworICAgIGlmIChjdHguZm10c3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodWZvcm1hdCkgPT0gLTEpIHsKLSAgICAgICAgUHlfREVDUkVGKHVmb3JtYXQpOworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoY3R4LmZtdHN0cikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKGN0eC5mbXRzdHIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgY3R4LmZtdGRhdGEgPSBQeVVuaWNvZGVfREFUQShjdHguZm10c3RyKTsKKyAgICBjdHguZm10a2luZCA9IFB5VW5pY29kZV9LSU5EKGN0eC5mbXRzdHIpOworICAgIGN0eC5mbXRjbnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChjdHguZm10c3RyKTsKKyAgICBjdHguZm10cG9zID0gMDsKIAotICAgIGZtdCA9IFB5VW5pY29kZV9EQVRBKHVmb3JtYXQpOwotICAgIGZtdGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1Zm9ybWF0KTsKLSAgICBmbXRjbnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1Zm9ybWF0KTsKLSAgICBmbXRwb3MgPSAwOwotCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIGZtdGNudCArIDEwMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZjdHgud3JpdGVyKTsKKyAgICBjdHgud3JpdGVyLm1pbl9sZW5ndGggPSBjdHguZm10Y250ICsgMTAwOworICAgIGN0eC53cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKIAogICAgIGlmIChQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgIGFyZ2xlbiA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKLSAgICAgICAgYXJnaWR4ID0gMDsKKyAgICAgICAgY3R4LmFyZ2xlbiA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKKyAgICAgICAgY3R4LmFyZ2lkeCA9IDA7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBhcmdsZW4gPSAtMTsKLSAgICAgICAgYXJnaWR4ID0gLTI7CisgICAgICAgIGN0eC5hcmdsZW4gPSAtMTsKKyAgICAgICAgY3R4LmFyZ2lkeCA9IC0yOwogICAgIH0KKyAgICBjdHguYXJnc19vd25lZCA9IDA7CiAgICAgaWYgKFB5TWFwcGluZ19DaGVjayhhcmdzKSAmJiAhUHlUdXBsZV9DaGVjayhhcmdzKSAmJiAhUHlVbmljb2RlX0NoZWNrKGFyZ3MpKQotICAgICAgICBkaWN0ID0gYXJnczsKKyAgICAgICAgY3R4LmRpY3QgPSBhcmdzOworICAgIGVsc2UKKyAgICAgICAgY3R4LmRpY3QgPSBOVUxMOworICAgIGN0eC5hcmdzID0gYXJnczsKIAotICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcykgIT0gJyUnKSB7CisgICAgd2hpbGUgKC0tY3R4LmZtdGNudCA+PSAwKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChjdHguZm10a2luZCwgY3R4LmZtdGRhdGEsIGN0eC5mbXRwb3MpICE9ICclJykgewogICAgICAgICAgICAgUHlfc3NpemVfdCBub25mbXRwb3M7Ci0gICAgICAgICAgICBub25mbXRwb3MgPSBmbXRwb3MrKzsKLSAgICAgICAgICAgIHdoaWxlIChmbXRjbnQgPj0gMCAmJgotICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKSAhPSAnJScpIHsKLSAgICAgICAgICAgICAgICBmbXRwb3MrKzsKLSAgICAgICAgICAgICAgICBmbXRjbnQtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPCAwKQotICAgICAgICAgICAgICAgIGZtdHBvcy0tOwotICAgICAgICAgICAgc3VibGVuID0gZm10cG9zIC0gbm9uZm10cG9zOwotICAgICAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodWZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmZtdHBvcywgbm9uZm10cG9zICsgc3VibGVuKTsKLSAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgc3VibGVuLCBtYXhjaGFyKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci5idWZmZXIsIHdyaXRlci5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Zm9ybWF0LCBub25mbXRwb3MsIHN1Ymxlbik7Ci0gICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKKyAgICAgICAgICAgIG5vbmZtdHBvcyA9IGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgIHdoaWxlIChjdHguZm10Y250ID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfUkVBRChjdHguZm10a2luZCwgY3R4LmZtdGRhdGEsIGN0eC5mbXRwb3MpICE9ICclJykgeworICAgICAgICAgICAgICAgIGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgICAgICBjdHguZm10Y250LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3R4LmZtdGNudCA8IDApIHsKKyAgICAgICAgICAgICAgICBjdHguZm10cG9zLS07CisgICAgICAgICAgICAgICAgY3R4LndyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZygmY3R4LndyaXRlciwgY3R4LmZtdHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmZtdHBvcywgY3R4LmZtdHBvcykgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEdvdCBhIGZvcm1hdCBzcGVjaWZpZXIgKi8KLSAgICAgICAgICAgIGludCBmbGFncyA9IDA7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHdpZHRoID0gLTE7Ci0gICAgICAgICAgICBpbnQgcHJlYyA9IC0xOwotICAgICAgICAgICAgUHlfVUNTNCBjID0gJ1wwJzsKLSAgICAgICAgICAgIFB5X1VDUzQgZmlsbDsKLSAgICAgICAgICAgIGludCBzaWduOwotICAgICAgICAgICAgUHlfVUNTNCBzaWduY2hhcjsKLSAgICAgICAgICAgIGludCBpc251bW9rOwotICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBOVUxMOwotICAgICAgICAgICAgdm9pZCAqcGJ1ZiA9IE5VTEw7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHBpbmRleCwgbGVuOwotICAgICAgICAgICAgUHlfVUNTNCBidWZtYXhjaGFyOwotICAgICAgICAgICAgUHlfc3NpemVfdCBidWZsZW47Ci0KLSAgICAgICAgICAgIGZtdHBvcysrOwotICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKTsKLSAgICAgICAgICAgIGlmIChjID09ICcoJykgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qga2V5c3RhcnQ7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBrZXlsZW47Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKmtleTsKLSAgICAgICAgICAgICAgICBpbnQgcGNvdW50ID0gMTsKLQotICAgICAgICAgICAgICAgIGlmIChkaWN0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgcmVxdWlyZXMgYSBtYXBwaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytmbXRwb3M7Ci0gICAgICAgICAgICAgICAgLS1mbXRjbnQ7Ci0gICAgICAgICAgICAgICAga2V5c3RhcnQgPSBmbXRwb3M7Ci0gICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIGJhbGFuY2VkIHBhcmVudGhlc2VzICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKHBjb3VudCA+IDAgJiYgLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKScpCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXBjb3VudDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnKCcpCi0gICAgICAgICAgICAgICAgICAgICAgICArK3Bjb3VudDsKLSAgICAgICAgICAgICAgICAgICAgZm10cG9zKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGtleWxlbiA9IGZtdHBvcyAtIGtleXN0YXJ0IC0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZm10Y250IDwgMCB8fCBwY291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0IGtleSIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGtleSA9IFB5VW5pY29kZV9TdWJzdHJpbmcodWZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXN0YXJ0LCBrZXlzdGFydCArIGtleWxlbik7Ci0gICAgICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICBhcmdzX293bmVkID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJncyA9IFB5T2JqZWN0X0dldEl0ZW0oZGljdCwga2V5KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnc19vd25lZCA9IDE7Ci0gICAgICAgICAgICAgICAgYXJnbGVuID0gLTE7Ci0gICAgICAgICAgICAgICAgYXJnaWR4ID0gLTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICBjYXNlICctJzogZmxhZ3MgfD0gRl9MSlVTVDsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnKyc6IGZsYWdzIHw9IEZfU0lHTjsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnICc6IGZsYWdzIHw9IEZfQkxBTks7IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgJyMnOiBmbGFncyB8PSBGX0FMVDsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnMCc6IGZsYWdzIHw9IEZfWkVSTzsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGMgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgdiA9IGdldG5leHRhcmcoYXJncywgYXJnbGVuLCAmYXJnaWR4KTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdpZHRoID0gUHlMb25nX0FzU3NpemVfdCh2KTsKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRl9MSlVTVDsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAtd2lkdGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgewotICAgICAgICAgICAgICAgIHdpZHRoID0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogU2luY2UgYyBpcyB1bnNpZ25lZCwgdGhlIFJIUyB3b3VsZCBlbmQgdXAgYXMgdW5zaWduZWQsCi0gICAgICAgICAgICAgICAgICAgICAgIG1peGluZyBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24uIFNpbmNlIGMgaXMgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICAgICAnMCcgYW5kICc5JywgY2FzdGluZyB0byBpbnQgaXMgc2FmZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpYyAtICcwJykpIC8gMTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB3aWR0aCoxMCArIChjIC0gJzAnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICBwcmVjID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIGlmIChjID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICB2ID0gZ2V0bmV4dGFyZyhhcmdzLCBhcmdsZW4sICZhcmdpZHgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmVjID0gX1B5TG9uZ19Bc0ludCh2KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgewotICAgICAgICAgICAgICAgICAgICBwcmVjID0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA+IChJTlRfTUFYIC0gKChpbnQpYyAtICcwJykpIC8gMTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWMgdG9vIGJpZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWMgPSBwcmVjKjEwICsgKGMgLSAnMCcpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBwcmVjICovCi0gICAgICAgICAgICBpZiAoZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnaCcgfHwgYyA9PSAnbCcgfHwgYyA9PSAnTCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZtdGNudCA8IDApIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0Iik7CisgICAgICAgICAgICBjdHguZm10cG9zKys7CisgICAgICAgICAgICBpZiAodW5pY29kZV9mb3JtYXRfYXJnKCZjdHgpID09IC0xKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPT0gMCkKLSAgICAgICAgICAgICAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgaWYgKGMgPT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCAxLCAnJScpID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgJyUnKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHYgPSBnZXRuZXh0YXJnKGFyZ3MsIGFyZ2xlbiwgJmFyZ2lkeCk7Ci0gICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgICAgICAgICAgc2lnbiA9IDA7Ci0gICAgICAgICAgICBzaWduY2hhciA9ICdcMCc7Ci0gICAgICAgICAgICBmaWxsID0gJyAnOwotICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0KLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikgJiYgd2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKCZ3cml0ZXIsIHYsIDEwLCBmbGFncyAmIEZfQUxUKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJiBjID09ICdzJykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gdjsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRlbXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ3MnKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFB5T2JqZWN0X1N0cih2KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAncicpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfUmVwcih2KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFB5T2JqZWN0X0FTQ0lJKHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgIGNhc2UgJ1gnOgotICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KQotICAgICAgICAgICAgICAgICAgICAmJiB3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xCi0gICAgICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChjKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTAsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTYsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgOCwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpc251bW9rID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoUHlOdW1iZXJfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmlvYmo9TlVMTDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpb2JqID0gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9Mb25nKHYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpb2JqIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKGlvYmopKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNudW1vayA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGZvcm1hdGxvbmcoaW9iaiwgZmxhZ3MsIHByZWMsIChjID09ICdpJz8gJ2QnOiBjKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaXNudW1vaykgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCAoY2hhciljLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGX1pFUk8pCi0gICAgICAgICAgICAgICAgICAgIGZpbGwgPSAnMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgICAgY2FzZSAnRSc6Ci0gICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgY2FzZSAnZyc6Ci0gICAgICAgICAgICBjYXNlICdHJzoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMQotICAgICAgICAgICAgICAgICAgICAmJiAhKGZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ZmxvYXQodiwgZmxhZ3MsIHByZWMsIGMsIE5VTEwsICZ3cml0ZXIpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc2lnbiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRl9aRVJPKQotICAgICAgICAgICAgICAgICAgICBmaWxsID0gJzAnOwotICAgICAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYywgJnRlbXAsIE5VTEwpID09IC0xKQotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IGZvcm1hdGNoYXIodik7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09IChQeV9VQ1M0KSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIDEsIGNoKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgY2gpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGVtcCA9IFB5VW5pY29kZV9Gcm9tT3JkaW5hbChjaCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICclYycgKDB4JXgpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IGluZGV4ICV6ZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMTw9YyAmJiBjPD0xMjYpID8gKGNoYXIpYyA6ICc/JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRwb3MgLSAxKTsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIGFzc2VydCAoUHlVbmljb2RlX0NoZWNrKHRlbXApKTsKLQotICAgICAgICAgICAgaWYgKHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEKLSAgICAgICAgICAgICAgICAmJiAhKGZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCB0ZW1wKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh0ZW1wKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHRlbXApOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh0ZW1wKTsKLSAgICAgICAgICAgIHBidWYgPSBQeVVuaWNvZGVfREFUQSh0ZW1wKTsKLSAgICAgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHRlbXApOwotCi0gICAgICAgICAgICBpZiAoYyA9PSAncycgfHwgYyA9PSAncicgfHwgYyA9PSAnYScpIHsKLSAgICAgICAgICAgICAgICBpZiAocHJlYyA+PSAwICYmIGxlbiA+IHByZWMpCi0gICAgICAgICAgICAgICAgICAgIGxlbiA9IHByZWM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIHBidWYgaXMgaW5pdGlhbGl6ZWQgaGVyZS4gKi8KLSAgICAgICAgICAgIHBpbmRleCA9IDA7Ci0gICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLScgfHwgY2ggPT0gJysnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpZ25jaGFyID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGxlbi0tOwotICAgICAgICAgICAgICAgICAgICBwaW5kZXgrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBGX1NJR04pCi0gICAgICAgICAgICAgICAgICAgIHNpZ25jaGFyID0gJysnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgRl9CTEFOSykKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSAnICc7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzaWduID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA8IGxlbikKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGxlbjsKLQotICAgICAgICAgICAgLyogQ29tcHV0ZSB0aGUgbGVuZ3RoIGFuZCBtYXhpbXVtIGNoYXJhY3RlciBvZiB0aGUKLSAgICAgICAgICAgICAgIHdyaXR0ZW4gY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgYnVmbWF4Y2hhciA9IDEyNzsKLSAgICAgICAgICAgIGlmICghKGZsYWdzICYgRl9MSlVTVCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHdpZHRoLTEpID4gbGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmbWF4Y2hhciA9IFB5X01BWChidWZtYXhjaGFyLCBmaWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zm1heGNoYXIgPSBQeV9NQVgoYnVmbWF4Y2hhciwgZmlsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodGVtcCwgMCwgcGluZGV4K2xlbik7Ci0gICAgICAgICAgICBidWZtYXhjaGFyID0gUHlfTUFYKGJ1Zm1heGNoYXIsIG1heGNoYXIpOwotCi0gICAgICAgICAgICBidWZsZW4gPSB3aWR0aDsKLSAgICAgICAgICAgIGlmIChzaWduICYmIGxlbiA9PSB3aWR0aCkKLSAgICAgICAgICAgICAgICBidWZsZW4rKzsKLQotICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCBidWZsZW4sIGJ1Zm1heGNoYXIpID09IC0xKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgICAgICAgICAgLyogV3JpdGUgY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsbCAhPSAnICcpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgc2lnbmNoYXIpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikKLSAgICAgICAgICAgICAgICAgICAgd2lkdGgtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGX0FMVCkgJiYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnIHx8IGMgPT0gJ28nKSkgewotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCArIDEpID09IGMpOwotICAgICAgICAgICAgICAgIGlmIChmaWxsICE9ICcgJykgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnMCcpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zKzEsIGMpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aWR0aCAtPSAyOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IDApCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gMDsKLSAgICAgICAgICAgICAgICBsZW4gLT0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbiAmJiAhKGZsYWdzICYgRl9MSlVTVCkpIHsKLSAgICAgICAgICAgICAgICBzdWJsZW4gPSB3aWR0aCAtIGxlbjsKLSAgICAgICAgICAgICAgICBGSUxMKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgZmlsbCwgd3JpdGVyLnBvcywgc3VibGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWxsID09ICcgJykgewotICAgICAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsIHNpZ25jaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRl9BTFQpICYmIChjID09ICd4JyB8fCBjID09ICdYJyB8fCBjID09ICdvJykpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCsxKSA9PSBjKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcysxLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBwaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsZW4pIHsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXIuYnVmZmVyLCB3cml0ZXIucG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAsIHBpbmRleCwgbGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikgewotICAgICAgICAgICAgICAgIHN1YmxlbiA9IHdpZHRoIC0gbGVuOwotICAgICAgICAgICAgICAgIEZJTEwod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCAnICcsIHdyaXRlci5wb3MsIHN1Ymxlbik7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSBzdWJsZW47Ci0gICAgICAgICAgICB9Ci0KLW5leHRhcmc6Ci0gICAgICAgICAgICBpZiAoZGljdCAmJiAoYXJnaWR4IDwgYXJnbGVuKSAmJiBjICE9ICclJykgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIik7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfQ0xFQVIodGVtcCk7Ci0gICAgICAgIH0gLyogJyUnICovCi0gICAgfSAvKiB1bnRpbCBlbmQgKi8KLSAgICBpZiAoYXJnaWR4IDwgYXJnbGVuICYmICFkaWN0KSB7CisgICAgaWYgKGN0eC5hcmdpZHggPCBjdHguYXJnbGVuICYmICFjdHguZGljdCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChhcmdzX293bmVkKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBpZiAoY3R4LmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKGN0eC5hcmdzKTsKICAgICB9Ci0gICAgUHlfREVDUkVGKHVmb3JtYXQpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0gICAgUHlfWERFQ1JFRihzZWNvbmQpOwotICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKyAgICBQeV9ERUNSRUYoY3R4LmZtdHN0cik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZjdHgud3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRih1Zm9ybWF0KTsKLSAgICBQeV9YREVDUkVGKHRlbXApOwotICAgIFB5X1hERUNSRUYoc2Vjb25kKTsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7Ci0gICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihjdHguZm10c3RyKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmN0eC53cml0ZXIpOworICAgIGlmIChjdHguYXJnc19vd25lZCkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmFyZ3MpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTE0MjEzLDcgKzE0OTkxLDcgQEAKIHZvaWQKIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKFB5T2JqZWN0ICoqcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcyA9ICpwOworICAgIFB5T2JqZWN0ICpzID0gKnA7CiAgICAgUHlPYmplY3QgKnQ7CiAjaWZkZWYgUHlfREVCVUcKICAgICBhc3NlcnQocyAhPSBOVUxMKTsKQEAgLTE0MjQyLDEyICsxNTAyMCwxMiBAQAogICAgIHQgPSBQeURpY3RfR2V0SXRlbShpbnRlcm5lZCwgcyk7CiAgICAgUHlfRU5EX0FMTE9XX1JFQ1VSU0lPTgogCi0gICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoKnApOwotICAgICAgICAgICAgKnAgPSB0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKHQpIHsKKyAgICAgICAgUHlfSU5DUkVGKHQpOworICAgICAgICBQeV9ERUNSRUYoKnApOworICAgICAgICAqcCA9IHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBQeVRocmVhZFN0YXRlX0dFVCgpLT5yZWN1cnNpb25fY3JpdGljYWwgPSAxOwogICAgIGlmIChQeURpY3RfU2V0SXRlbShpbnRlcm5lZCwgcywgcykgPCAwKSB7CkBAIC0xNDU1MCw3ICsxNTMyOCw3IEBACiBpbnQKIFB5X1VOSUNPREVfc3RybmNtcChjb25zdCBQeV9VTklDT0RFICpzMSwgY29uc3QgUHlfVU5JQ09ERSAqczIsIHNpemVfdCBuKQogewotICAgIHJlZ2lzdGVyIFB5X1VOSUNPREUgdTEsIHUyOworICAgIFB5X1VOSUNPREUgdTEsIHUyOwogICAgIGZvciAoOyBuICE9IDA7IG4tLSkgewogICAgICAgICB1MSA9ICpzMTsKICAgICAgICAgdTIgPSAqczI7CmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmggYi9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKaW5kZXggNDZhOTJiYi4uMWZkYzA5MiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCisrKyBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaApAQCAtMTU4OSw3ICsxNTg5LDcgQEAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIAogICAgIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDUsIDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIAogICAgIDIxLCAyMSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCA1LCAwLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDI1LCAyNSwgMjUsIDUsIDIxLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDk2LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNywgOCwgCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgOTYsIDUsIDUsIDUsIDUsIDU1LCAyNSwgMCwgMCwgNywgCiAgICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICAyNSwgMjUsIDI1LCAyLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjUsIDI1LCAyNSwgMjEsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDk2LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKQEAgLTE4MjgsNyArMTgyOCw3IEBACiAgICAgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDEzMiwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAxOCwgMTgsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDI1LCAxOCwgMjUsIApAQCAtMTkxNSwxMSArMTkxNSwxMSBAQAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIDUsIDUsIDYsIDMsIDMsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMiwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTgsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMiwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyNDUsIDk1LCAwLCAwLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI0NSwgOTUsIDAsIDAsIAogICAgIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDUsIDUsIDUsIDUsIDUsIDk1LCAyNDUsIDI2LCAyMiwgMjMsIDI0NiwgCiAgICAgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDUsIDUsIDUsIDUsIDUsIDAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKICAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgNiwgNiwgNiwgNiwgMjUsIDYsIDYsIDYsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDExMywgNSwgNSwgCkBAIC0yNTkzLDEwICsyNTkzLDEwIEBACiAgICAgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDI1MiwgMjUyLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDI1MiwgMjUyLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKQEAgLTMzODAsNiArMzM4MCw3IEBACiAgICAgY2FzZSAweDEyNDM1OgogICAgIGNhc2UgMHgxMjQ0QToKICAgICBjYXNlIDB4MTI0NTA6CisgICAgY2FzZSAweDEyNDU2OgogICAgIGNhc2UgMHgxMjQ1OToKICAgICBjYXNlIDB4MUQzNjE6CiAgICAgY2FzZSAweDFEN0QwOgpAQCAtMzQyNyw2ICszNDI4LDggQEAKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMDAwLjA7CiAgICAgY2FzZSAweDMyNTE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyMS4wOworICAgIGNhc2UgMHgxMjQzMjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxNjAwMC4wOwogICAgIGNhc2UgMHgzMjUyOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjIuMDsKICAgICBjYXNlIDB4MzI1MzoKQEAgLTM1MzQsNiArMzUzNyw3IEBACiAgICAgY2FzZSAweDEyNDNCOgogICAgIGNhc2UgMHgxMjQ0QjoKICAgICBjYXNlIDB4MTI0NTE6CisgICAgY2FzZSAweDEyNDU3OgogICAgIGNhc2UgMHgxRDM2MjoKICAgICBjYXNlIDB4MUQ3RDE6CiAgICAgY2FzZSAweDFEN0RCOgpAQCAtMzcyMSw2ICszNzI1LDggQEAKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQyLjA7CiAgICAgY2FzZSAweDMyQjg6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA0My4wOworICAgIGNhc2UgMHgxMjQzMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzMjAwMC4wOwogICAgIGNhc2UgMHgzMkI5OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDQuMDsKICAgICBjYXNlIDB4MzJCQToKQEAgLTQyNzEsNyArNDI3Nyw3IEBACiAvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwKICAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuCiAgKi8KLWludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoraW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKGNvbnN0IFB5X1VDUzQgY2gpCiB7CiAgICAgc3dpdGNoIChjaCkgewogICAgIGNhc2UgMHgwMDA5OgpAQCAtNDI4Nyw3ICs0MjkzLDYgQEAKICAgICBjYXNlIDB4MDA4NToKICAgICBjYXNlIDB4MDBBMDoKICAgICBjYXNlIDB4MTY4MDoKLSAgICBjYXNlIDB4MTgwRToKICAgICBjYXNlIDB4MjAwMDoKICAgICBjYXNlIDB4MjAwMToKICAgICBjYXNlIDB4MjAwMjoKQEAgLTQzMTMsNyArNDMxOCw3IEBACiAgKiBwcm9wZXJ0eSAnQksnLCAnQ1InLCAnTEYnIG9yICdOTCcgb3IgaGF2aW5nIGJpZGlyZWN0aW9uYWwKICAqIHR5cGUgJ0InLCAwIG90aGVyd2lzZS4KICAqLwotaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCkKK2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKGNvbnN0IFB5X1VDUzQgY2gpCiB7CiAgICAgc3dpdGNoIChjaCkgewogICAgIGNhc2UgMHgwMDBBOgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMgYi9PYmplY3RzL3dlYWtyZWZvYmplY3QuYwppbmRleCBiNDlkY2VlLi5jMDgzZjhmIDEwMDY0NAotLS0gYS9PYmplY3RzL3dlYWtyZWZvYmplY3QuYworKysgYi9PYmplY3RzL3dlYWtyZWZvYmplY3QuYwpAQCAtMzM4LDYgKzMzOCwxMSBAQAogfQogCiAKK3N0YXRpYyBQeU1lbWJlckRlZiB3ZWFrcmVmX21lbWJlcnNbXSA9IHsKKyAgICB7Il9fY2FsbGJhY2tfXyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVdlYWtSZWZlcmVuY2UsIHdyX2NhbGxiYWNrKSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfSAvKiBTZW50aW5lbCAqLworfTsKKwogUHlUeXBlT2JqZWN0CiBfUHlXZWFrcmVmX1JlZlR5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKQEAgLTM2OSw3ICszNzQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KKyAgICB3ZWFrcmVmX21lbWJlcnMsICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwpkaWZmIC0tZ2l0IGEvUEMvVkM2L19jdHlwZXMuZHNwIGIvUEMvVkM2L19jdHlwZXMuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzk4ZWFjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fY3R5cGVzLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXMiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2N0eXBlcyAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIgQ0ZHPSJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXMiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlcy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2N0eXBlcyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbGJhY2tzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcc3RnZGljdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AgYi9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlYjIxNy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2N0eXBlc190ZXN0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzX3Rlc3QubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiIENGRz0iX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc190ZXN0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXNfdGVzdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc190ZXN0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcCBiL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGMwY2RkLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2VsZW1lbnR0cmVlIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9lbGVtZW50dHJlZS5tYWsiIENGRz0iX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfZWxlbWVudHRyZWUiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWUucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EICJCWVRFT1JERVI9MTIzNCIgL0QgIlhNTF9DT05URVhUX0JZVEVTPTEwMjQiIC9EICJVU0VfUFlFWFBBVF9DQVBJIiAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19lbGVtZW50dHJlZV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fbXNpLmRzcCBiL1BDL1ZDNi9fbXNpLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhNjFiYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX21zaS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9tc2kiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X21zaSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfbXNpLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfbXNpLm1hayIgQ0ZHPSJfbXNpIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9tc2kgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX21zaSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9tc2kiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9tc2kiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX21zaS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX21zaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2lfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9tc2kgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX21zaSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUENcX21zaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwIGIvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI4NDcwLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9tdWx0aXByb2Nlc3NpbmciIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfbXVsdGlwcm9jZXNzaW5nLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfbXVsdGlwcm9jZXNzaW5nLm1hayIgQ0ZHPSJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9tdWx0aXByb2Nlc3NpbmciDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9tdWx0aXByb2Nlc3NpbmciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXVsdGlwcm9jZXNzaW5nLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFkMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXVsdGlwcm9jZXNzaW5nX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHdpbjMyX2Z1bmN0aW9ucy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zb2NrZXQuZHNwIGIvUEMvVkM2L19zb2NrZXQuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWVlOGYyLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc29ja2V0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NvY2tldCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fc29ja2V0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zb2NrZXQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zb2NrZXQubWFrIiBDRkc9Il9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfc29ja2V0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3NvY2tldCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zb2NrZXQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc29ja2V0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zb2NrZXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zb2NrZXRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3FsaXRlMy5kc3AgYi9QQy9WQzYvX3NxbGl0ZTMuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODY5OTM4Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc3FsaXRlMy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc3FsaXRlMyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fc3FsaXRlMyAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3FsaXRlMy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NxbGl0ZTMubWFrIiBDRkc9Il9zcWxpdGUzIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9zcWxpdGUzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3NxbGl0ZTMiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCBNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlMy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zcWxpdGUzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NxbGl0ZTNfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zcWxpdGUzIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NzbC5kc3AgYi9QQy9WQzYvX3NzbC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YmI5OTMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zc2wuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc3NsIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiIDB4MDEwNg0KLQ0KLUNGRz1fc3NsIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zc2wubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zc2wubWFrIiBDRkc9Il9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IikNCi0hTUVTU0FHRSAiX3NzbCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi0NCi0hSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgQ21kX0xpbmUgIk5NQUtFIC9mIF9zc2wubWFrIg0KLSMgUFJPUCBCQVNFIFJlYnVpbGRfT3B0ICIvYSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRmlsZSAiX3NzbC5leGUiDQotIyBQUk9QIEJBU0UgQnNjX05hbWUgIl9zc2wuYnNjIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zc2wiDQotIyBQUk9QIENtZF9MaW5lICJweXRob24gYnVpbGRfc3NsLnB5Ig0KLSMgUFJPUCBSZWJ1aWxkX09wdCAiLWEiDQotIyBQUk9QIFRhcmdldF9GaWxlICJfc3NsLnB5ZCINCi0jIFBST1AgQnNjX05hbWUgIiINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBCQVNFIENtZF9MaW5lICJOTUFLRSAvZiBfc3NsLm1hayINCi0jIFBST1AgQkFTRSBSZWJ1aWxkX09wdCAiL2EiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0ZpbGUgIl9zc2xfZC5weWQiDQotIyBQUk9QIEJBU0UgQnNjX05hbWUgIl9zc2xfZC5ic2MiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIENtZF9MaW5lICJweXRob25fZCAtdSBidWlsZF9zc2wucHkgLWQiDQotIyBQUk9QIFJlYnVpbGRfT3B0ICItYSINCi0jIFBST1AgVGFyZ2V0X0ZpbGUgIl9zc2xfZC5weWQiDQotIyBQUk9QIEJzY19OYW1lICIiDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3NsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NzbC5tYWsgYi9QQy9WQzYvX3NzbC5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3N2E2MTQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zc2wubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotCi0hSUZERUYgREVCVUcKLU1PRFVMRT1fc3NsX2QucHlkCi1URU1QX0RJUj14ODYtdGVtcC1kZWJ1Zy9fc3NsCi1DRkxBR1M9L09kIC9aaSAvTURkIC9MRGQgL0RERUJVRyAvRF9ERUJVRyAvRFdJTjMyCi1MRkxBR1M9L25vZGVmYXVsdGxpYjoibXN2Y3J0IgotIUVMU0UKLU1PRFVMRT1fc3NsLnB5ZAotVEVNUF9ESVI9eDg2LXRlbXAtcmVsZWFzZS9fc3NsCi1DRkxBR1M9L094IC9NRCAvTEQgL0RXSU4zMgotTEZMQUdTPQotIUVORElGCi0KLUlOQ0xVREVTPS1JIC4uLy4uL0luY2x1ZGUgLUkgLi4gLUkgJChTU0xfRElSKS9pbmMzMgotU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMgotTElCUz1nZGkzMi5saWIgd3NvY2szMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL2xpYnBhdGg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliIHNzbGVheTMyLmxpYgotCi1TT1VSQ0U9Li4vLi4vTW9kdWxlcy9fc3NsLmMgJChTU0xfTElCX0RJUikvbGliZWF5MzIubGliICQoU1NMX0xJQl9ESVIpL3NzbGVheTMyLmxpYgotCi0kKE1PRFVMRSk6ICQoU09VUkNFKSAuLi8qLmggLi4vLi4vSW5jbHVkZS8qLmgKLSAgICBAaWYgbm90IGV4aXN0ICIkKFRFTVBfRElSKS8uIiBta2RpciAiJChURU1QX0RJUikiCi0gICAgY2wgL25vbG9nbyAkKFNPVVJDRSkgJChDRkxBR1MpIC9GbyQoVEVNUF9ESVIpXCQqLm9iaiAkKElOQ0xVREVTKSAvbGluayAvb3V0OiQoTU9EVUxFKSAkKExJQlMpICQoTEZMQUdTKQpkaWZmIC0tZ2l0IGEvUEMvVkM2L190ZXN0Y2FwaS5kc3AgYi9QQy9WQzYvX3Rlc3RjYXBpLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhYTI1YS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3Rlc3RjYXBpLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3Rlc3RjYXBpIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90ZXN0Y2FwaS5tYWsiIENGRz0iX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfdGVzdGNhcGkiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFGMDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3Rlc3RjYXBpLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF90ZXN0Y2FwaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFGMDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190ZXN0Y2FwaV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGVzdGNhcGltb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fdGtpbnRlci5kc3AgYi9QQy9WQzYvX3RraW50ZXIuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDY5ZjU5Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fdGtpbnRlci5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfdGtpbnRlciIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90a2ludGVyLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGtpbnRlci5tYWsiIENGRz0iX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl90a2ludGVyIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlwuLlwuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl90a2ludGVyIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF90a2ludGVyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NWcubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NWcubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxOTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3RraW50ZXJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlIiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiV0lUSF9BUFBJTklUIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXHRjbHRrXGxpYlx0azg1LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODUubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxOTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3RraW50ZXIucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RraW50ZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHRrYXBwaW5pdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L2J1aWxkX3NzbC5weSBiL1BDL1ZDNi9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YWYwODQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L2J1aWxkX3NzbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0jIFNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIF9zc2wgbW9kdWxlIGZvciBXaW5kb3dzLgotIyBVc2VzIFBlcmwgdG8gc2V0dXAgdGhlIE9wZW5TU0wgZW52aXJvbm1lbnQgY29ycmVjdGx5Ci0jIGFuZCBidWlsZCBPcGVuU1NMLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbm1ha2Ugc2Vzc2lvbgotIyBmb3IgX3NzbC5weWQgaXRzZWxmLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQy9WQzYgZGlyZWN0b3J5LgotIwotIyBpdCBzaG91bGQgY29uZmlndXJlIGFuZCBidWlsZCBTU0wsIHRoZW4gYnVpbGQgdGhlIHNzbCBQeXRob24gZXh0ZW5zaW9uCi0jIHdpdGhvdXQgaW50ZXJ2ZW50aW9uLgotCi0jIE1vZGlmaWVkIGJ5IENocmlzdGlhbiBIZWltZXMKLSMgTm93IHRoaXMgc2NyaXB0IHN1cHBvcnRzIHByZS1nZW5lcmF0ZWQgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KLSMgRGV2ZWxvcGVycyBkb24ndCBuZWVkIGFuIGluc3RhbGxhdGlvbiBvZiBQZXJsIGFueW1vcmUgdG8gYnVpbGQgUHl0aG9uLiBBIHN2bgotIyBjaGVja291dCBmcm9tIG91ciBzdm4gcmVwb3NpdG9yeSBpcyBlbm91Z2guCi0KLWltcG9ydCBvcywgc3lzLCByZSwgc2h1dGlsCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCgiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiKQotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCgiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiKQotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50KCIgIiwgcCkKLSAgICAgICAgcHJpbnQoIiBOb25lIG9mIHRoZXNlIHZlcnNpb25zIGFwcGVhciBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgT3BlblNTTCIpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIiBOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIikKLSAgICBwcmludCgiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIpCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQoIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBmaW5kIGFuIFNTTCBkaXJlY3RvcnkgaW4gJyVzJyIgJSAoc291cmNlcywpKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJldHVybiBiZXN0X25hbWUKLQotZGVmIGZpeF9tYWtlZmlsZShtYWtlZmlsZSk6Ci0gICAgIiIiRml4IHNvbWUgc3R1ZmYgaW4gYWxsIG1ha2VmaWxlcwotICAgICIiIgotICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSk6Ci0gICAgICAgIHJldHVybgotICAgIHdpdGggb3BlbihtYWtlZmlsZSkgYXMgZmluOgotICAgICAgICBsaW5lcyA9IGZpbi5yZWFkbGluZXMoKQotICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUEVSTD0iKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJDUD0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gIkNQPWNvcHlcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiTUtESVI9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJNS0RJUj1ta2RpclxuIgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJDRkxBRz0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgZm9yIGFsZ28gaW4gKCJSQzUiLCAiTURDMiIsICJJREVBIik6Ci0gICAgICAgICAgICAgICAgICAgIG5vYWxnbyA9ICIgLURPUEVOU1NMX05PXyVzIiAlIGFsZ28KLSAgICAgICAgICAgICAgICAgICAgaWYgbm9hbGdvIG5vdCBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyBub2FsZ28KLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICdcbicKLSAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKLQotZGVmIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpOgotICAgIHByaW50KCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQotICAgIHByaW50KGRvX3NjcmlwdCkKLSAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQotCi1kZWYgY21wKGYxLCBmMik6Ci0gICAgYnVmc2l6ZSA9IDEwMjQgKiA4Ci0gICAgd2l0aCBvcGVuKGYxLCAncmInKSBhcyBmcDEsIG9wZW4oZjIsICdyYicpIGFzIGZwMjoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGIxID0gZnAxLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGIyID0gZnAyLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGlmIGIxICE9IGIyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGIxOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLWRlZiBjb3B5KHNyYywgZHN0KToKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShkc3QpIGFuZCBjbXAoc3JjLCBkc3QpOgotICAgICAgICByZXR1cm4KLSAgICBzaHV0aWwuY29weShzcmMsIGRzdCkKLQotZGVmIG1haW4oKToKLSAgICBkZWJ1ZyA9ICItZCIgaW4gc3lzLmFyZ3YKLSAgICBidWlsZF9hbGwgPSAiLWEiIGluIHN5cy5hcmd2Ci0gICAgaWYgMTogIyBXaW4zMgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCi0gICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgotICAgICAgICBtMzIgPSBtYWtlZmlsZQotICAgICAgICBkaXJzdWZmaXggPSAiMzIiCi0gICAgY29uZmlndXJlICs9ICIgbm8taWRlYSBuby1yYzUgbm8tbWRjMiIKLSAgICBtYWtlX2ZsYWdzID0gIiIKLSAgICBpZiBidWlsZF9hbGw6Ci0gICAgICAgIG1ha2VfZmxhZ3MgPSAiLWEiCi0gICAgIyBwZXJsIHNob3VsZCBiZSBvbiB0aGUgcGF0aCwgYnV0IHdlIGFsc28gbG9vayBpbiAiXHBlcmwiIGFuZCAiYzpcXHBlcmwiCi0gICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCi0gICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFsiXFxwZXJsXFxiaW4iLCAiQzpcXHBlcmxcXGJpbiJdKQotICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKLSAgICBpZiBwZXJsOgotICAgICAgICBwcmludCgiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJObyBQZXJsIGluc3RhbGxhdGlvbiB3YXMgZm91bmQuIEV4aXN0aW5nIE1ha2VmaWxlcyBhcmUgdXNlZC4iKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICMgTG9vayBmb3IgU1NMIDMgbGV2ZWxzIHVwIGZyb20gUEMvVkM2IC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCi0gICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKLSAgICBpZiBzc2xfZGlyIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwcmludCgiUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFrZWZpbGVzISIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGRlYnVnOgotICAgICAgICAgICAgICAgIHByaW50KCJPcGVuU1NMIGRlYnVnIGJ1aWxkcyBhcmVuJ3Qgc3VwcG9ydGVkLiIpCi0gICAgICAgICAgICAjaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgIyAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgIyAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAjICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgICAgIGZpeF9tYWtlZmlsZShtYWtlZmlsZSkKLSAgICAgICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmYuaCIsIHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCkKLSAgICAgICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmYuaCIsIHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCkKLQotICAgICAgICAjIElmIHRoZSBhc3NlbWJsZXIgZmlsZXMgZG9uJ3QgZXhpc3QgaW4gdG1wWFgsIGNvcHkgdGhlbSB0aGVyZQotICAgICAgICBpZiBwZXJsIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKCJhc20iK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoInRtcCIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBvcy5ta2RpcigidG1wIitkaXJzdWZmaXgpCi0gICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKCJhc20iK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5hc20iKTogY29udGludWUKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShyInRtcCVzXCVzIiAlIChkaXJzdWZmaXgsIGYpKTogY29udGludWUKLSAgICAgICAgICAgICAgICBzaHV0aWwuY29weShyImFzbSVzXCVzIiAlIChkaXJzdWZmaXgsIGYpLCAidG1wIitkaXJzdWZmaXgpCi0KLSAgICAgICAgIyBOb3cgcnVuIG1ha2UuCi0gICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiKQotCi0gICAgICAgICNtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIFBFUkw9XCIlc1wiIC1mIFwiJXNcIiIgJShwZXJsLCBtYWtlZmlsZSkKLSAgICAgICAgbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyAtZiBcIiVzXCIiICUgbWFrZWZpbGUKLSAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyBzc2wgbWFrZWZpbGVzOiIsIG1ha2VDb21tYW5kKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyAiK21ha2VmaWxlKyIgZmFpbGVkIikKLSAgICAgICAgICAgIHByaW50KHJjKQotICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3MuY2hkaXIob2xkX2NkKQotICAgICMgQW5kIGZpbmFsbHksIHdlIGNhbiBidWlsZCB0aGUgX3NzbCBtb2R1bGUgaXRzZWxmIGZvciBQeXRob24uCi0gICAgZGVmcyA9ICJTU0xfRElSPSVzIiAlIChzc2xfZGlyLCkKLSAgICBpZiBkZWJ1ZzoKLSAgICAgICAgZGVmcyA9IGRlZnMgKyAiICIgKyAiREVCVUc9MSIKLSAgICByYyA9IG9zLnN5c3RlbSgnbm1ha2UgL25vbG9nbyAtZiBfc3NsLm1hayAnICsgZGVmcyArICIgIiArIG1ha2VfZmxhZ3MpCi0gICAgc3lzLmV4aXQocmMpCi0KLWlmIF9fbmFtZV9fPT0nX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVkM2L2J1aWxkX3RraW50ZXIucHkgYi9QQy9WQzYvYnVpbGRfdGtpbnRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjYTkyYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvYnVpbGRfdGtpbnRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHN1YnByb2Nlc3MKLQotVENMX01BSk9SID0gOAotVENMX01JTk9SID0gNQotVENMX1BBVENIID0gMgotCi1USVhfTUFKT1IgPSA4Ci1USVhfTUlOT1IgPSA0Ci1USVhfUEFUQ0ggPSAzCi0KLWRlZiBhYnNwYXRoKG5hbWUpOgotICAgIHBhciA9IG9zLnBhdGgucGFyZGlyCi0gICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oX19maWxlX18sIHBhciwgcGFyLCBwYXIsIHBhciwgbmFtZSkpCi0KLVRDTF9ESVIgPSBhYnNwYXRoKCJ0Y2wlZC4lZC4lZCIgJSAoVENMX01BSk9SLCBUQ0xfTUlOT1IsIFRDTF9QQVRDSCkpCi1US19ESVIgID0gYWJzcGF0aCgidGslZC4lZC4lZCIgICUgKFRDTF9NQUpPUiwgVENMX01JTk9SLCBUQ0xfUEFUQ0gpKQotVElYX0RJUiA9IGFic3BhdGgoInRpeCVkLiVkLiVkIiAlIChUSVhfTUFKT1IsIFRJWF9NSU5PUiwgVElYX1BBVENIKSkKLU9VVF9ESVIgPSBhYnNwYXRoKCJ0Y2x0ayIpCi0KLWRlZiBoYXZlX2FyZ3MoKmEpOgotICAgIHJldHVybiBhbnkocyBpbiBzeXMuYXJndlsxOl0gZm9yIHMgaW4gYSkKLQotZGVmIGVudGVyKGRpcik6Ci0gICAgb3MuY2hkaXIob3MucGF0aC5qb2luKGRpciwgIndpbiIpKQotCi1kZWYgbWFpbigpOgotICAgIGRlYnVnID0gaGF2ZV9hcmdzKCItZCIsICItLWRlYnVnIikKLSAgICBjbGVhbiA9IGhhdmVfYXJncygiY2xlYW4iKQotICAgIGluc3RhbGwgPSBoYXZlX2FyZ3MoImluc3RhbGwiKQotICAgIHRjbCA9IGhhdmVfYXJncygidGNsIikKLSAgICB0ayA9IGhhdmVfYXJncygidGsiKQotICAgIHRpeCA9IGhhdmVfYXJncygidGl4IikKLSAgICBpZiBub3QodGNsKSBhbmQgbm90KHRrKSBhbmQgbm90KHRpeCk6Ci0gICAgICAgIHRjbCA9IHRrID0gdGl4ID0gVHJ1ZQotCi0gICAgZGVmIG5tYWtlKG1ha2VmaWxlLCAqYSk6Ci0gICAgICAgIGFyZ3MgPSBbIm5tYWtlIiwgIi9ub2xvZ28iLCAiL2YiLCBtYWtlZmlsZSwgIkRFQlVHPSVkIiAlIGRlYnVnXQotICAgICAgICBhcmdzLmV4dGVuZChhKQotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoYXJncykKLQotICAgIGlmIHRjbDoKLSAgICAgICAgZW50ZXIoVENMX0RJUikKLSAgICAgICAgZGVmIG5tYWtlX3RjbCgqYSk6Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAqYSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZV90Y2woImNsZWFuIikKLSAgICAgICAgZWxpZiBpbnN0YWxsOgotICAgICAgICAgICAgbm1ha2VfdGNsKCJpbnN0YWxsIiwgIklOU1RBTExESVI9IiArIE9VVF9ESVIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBubWFrZV90Y2woKQotCi0gICAgaWYgdGs6Ci0gICAgICAgIGVudGVyKFRLX0RJUikKLSAgICAgICAgZGVmIG5tYWtlX3RrKCphKToKLSAgICAgICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJUQ0xESVI9IiArIFRDTF9ESVIsICphKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlX3RrKCJjbGVhbiIpCi0gICAgICAgIGVsaWYgaW5zdGFsbDoKLSAgICAgICAgICAgIG5tYWtlX3RrKCJpbnN0YWxsIiwgIklOU1RBTExESVI9IiArIE9VVF9ESVIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBubWFrZV90aygpCi0KLSAgICBpZiB0aXg6Ci0gICAgICAgIGVudGVyKFRJWF9ESVIpCi0gICAgICAgIGRlZiBubWFrZV90aXgoKmEpOgotICAgICAgICAgICAgbm1ha2UoInB5dGhvbi5tYWsiLAotICAgICAgICAgICAgICAgICAgIlRDTF9NQUpPUj0lZCIgJSBUQ0xfTUFKT1IsCi0gICAgICAgICAgICAgICAgICAiVENMX01JTk9SPSVkIiAlIFRDTF9NSU5PUiwKLSAgICAgICAgICAgICAgICAgICJUQ0xfUEFUQ0g9JWQiICUgVENMX1BBVENILAotICAgICAgICAgICAgICAgICAgIk1BQ0hJTkU9SVg4NiIsICphKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlX3RpeCgiY2xlYW4iKQotICAgICAgICBlbGlmIGluc3RhbGw6Ci0gICAgICAgICAgICBubWFrZV90aXgoImluc3RhbGwiLCAiSU5TVEFMTF9ESVI9IiArIE9VVF9ESVIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBubWFrZV90aXgoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVkM2L2J6Mi5kc3AgYi9QQy9WQzYvYnoyLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUyY2JhZC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvYnoyLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iYnoyIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPWJ6MiAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJiejIubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgImJ6Mi5tYWsiIENGRz0iYnoyIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgImJ6MiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJiejIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJiejIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiYnoyIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcYnoyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC42IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXGJ6aXAyLTEuMC42XGxpYmJ6Mi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE3MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejIucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZSAvbm9kZWZhdWx0bGliDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImJ6MiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xiejIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxiemlwMi0xLjAuNiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNlxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgImJ6MiAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJiejIgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYnoybW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AgYi9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MzVlMTIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ibWFrZV92ZXJzaW9uaW5mbyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQotDQotQ0ZHPW1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJtYWtlX3ZlcnNpb25pbmZvLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJtYWtlX3ZlcnNpb25pbmZvLm1hayIgQ0ZHPSJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIm1ha2VfdmVyc2lvbmluZm8iDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXG1ha2VfdmVyc2lvbmluZm8iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0jIEJlZ2luIEN1c3RvbSBCdWlsZA0KLUlucHV0UGF0aD0uXG1ha2VfdmVyc2lvbmluZm8uZXhlDQotU09VUkNFPSIkKElucHV0UGF0aCkiDQotDQotIi4uXHB5dGhvbm50X3JjLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQotCS5cbWFrZV92ZXJzaW9uaW5mby5leGUgPi4uXHB5dGhvbm50X3JjLmgNCi0NCi0jIEVuZCBDdXN0b20gQnVpbGQNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLSMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQotSW5wdXRQYXRoPS5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZQ0KLVNPVVJDRT0iJChJbnB1dFBhdGgpIg0KLQ0KLSIuLlxweXRob25udF9yY19kLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQotCS5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSA+Li5ccHl0aG9ubnRfcmNfZC5oDQotDQotIyBFbmQgQ3VzdG9tIEJ1aWxkDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXG1ha2VfdmVyc2lvbmluZm8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9wY2J1aWxkLmRzdyBiL1BDL1ZDNi9wY2J1aWxkLmRzdwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdiMmViYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcGNidWlsZC5kc3cKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2N0eXBlcyI9Ii5cX2N0eXBlcy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2N0eXBlc190ZXN0Ij0iLlxfY3R5cGVzX3Rlc3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2VsZW1lbnR0cmVlIj0iLlxfZWxlbWVudHRyZWUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX21zaSI9Ii5cX21zaS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX211bHRpcHJvY2Vzc2luZyI9Ii5cX211bHRpcHJvY2Vzc2luZy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3NvY2tldCI9Ii5cX3NvY2tldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3NxbGl0ZTMiPSIuXF9zcWxpdGUzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zc2wiPSIuXF9zc2wuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgdzl4cG9wZW4NCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3Rlc3RjYXBpIj0iLlxfdGVzdGNhcGkuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl90a2ludGVyIj0iLlxfdGtpbnRlci5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiYnoyIj0iLlxiejIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibWFrZV92ZXJzaW9uaW5mbyI9Ii5cbWFrZV92ZXJzaW9uaW5mby5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweWV4cGF0Ij0iLlxweWV4cGF0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweXRob24iPSIuXHB5dGhvbi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9uY29yZSI9Ii5ccHl0aG9uY29yZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIG1ha2VfdmVyc2lvbmluZm8NCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9udyI9Ii5ccHl0aG9udy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic2VsZWN0Ij0iLlxzZWxlY3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInVuaWNvZGVkYXRhIj0iLlx1bmljb2RlZGF0YS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAidzl4cG9wZW4iPSIuXHc5eHBvcGVuLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIndpbnNvdW5kIj0iLlx3aW5zb3VuZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1HbG9iYWw6DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTwzPg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi0NCmRpZmYgLS1naXQgYS9QQy9WQzYvcHlleHBhdC5kc3AgYi9QQy9WQzYvcHlleHBhdC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MWM5ZWYuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5ZXhwYXQuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHlleHBhdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1weWV4cGF0IC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHlleHBhdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHlleHBhdC5tYWsiIENGRz0icHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAicHlleHBhdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5ZXhwYXQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EIEJZVEVPUkRFUj0xMjM0IC9EIFhNTF9DT05URVhUX0JZVEVTPTEwMjQgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weWV4cGF0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHlleHBhdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweWV4cGF0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiSEFWRV9FWFBBVF9IIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EIEJZVEVPUkRFUj0xMjM0IC9EIFhNTF9DT05URVhUX0JZVEVTPTEwMjQgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weWV4cGF0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccHlleHBhdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbi5kc3AgYi9QQy9WQzYvcHl0aG9uLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE4Yjc3Mi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcHl0aG9uLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQotDQotQ0ZHPXB5dGhvbiAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uLm1hayIgQ0ZHPSJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob24gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJweXRob24gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob24iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi4uLlxcSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdGFjazoweDIwMDAwMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob25fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweXRob24gLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5Y29uLmljbw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHB5dGhvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9leGUucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcHl0aG9uY29yZS5kc3AgYi9QQy9WQzYvcHl0aG9uY29yZS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZTk4ZDEuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsNzgwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9uY29yZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1weXRob25jb3JlIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uY29yZS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uY29yZS5tYWsiIENGRz0icHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbmNvcmUiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cbW9kdWxlc1x6bGliIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiVVNFX0RMX0VYUE9SVCIgL1lYIC9GRCAvWm0yMDAgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGxhcmdlaW50LmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9weXRob24zMy5kbGwiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9uY29yZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiVVNFX0RMX0VYUE9SVCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL1ptMjAwIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMzNfZC5kbGwiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19jbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaGsuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2lzbzIwMjIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2pwLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19rci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfdHcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jb2xsZWN0aW9uc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Nzdi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9qc29uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbHNwcm9mLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbWF0aC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3BpY2tsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3N0cnVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBDXF9zdWJwcm9jZXNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGltZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxfd2FybmluZ3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF93ZWFrcmVmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYWNjdS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxhY2NlbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGFzZGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhdGV4aXRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGJpdHNldC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYm9vbG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVhcnJheW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVzb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjYXBzdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNldmFsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY29kZWNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNvbXBpbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNvbXBsZXhvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcY29tcHJlc3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxjb25maWcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXGRsX250LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR0b2EuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZHlubG9hZF93aW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGVudW1vYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGVycm9ycy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGZpbGVpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmaWxldXRpbHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZmlyc3RzZXRzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZnJhbWVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZnJvemVuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZ1dHVyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZ2Ntb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGdlbm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRhcmdzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYw0KLSMgQUREIENQUCAvRCBCVUlMRD00Ng0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0Y29tcGlsZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldG9wdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXGdldHBhdGhwLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldHBsYXRmb3JtLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldHZlcnNpb24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ3JhbWluaXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZ3JhbW1hci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxncmFtbWFyMS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGltcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxpbXBvcnRkbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGxpc3Rub2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xsaXN0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xsb25nb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYWluLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG1hcnNoYWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1kNW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xtZXRob2RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbW9kdWxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cbXN2Y3J0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbXlyZWFkbGluZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG15c3RydG91bC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxub2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xvcGVyYXRvci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxwYXJzZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxwYXJzZXRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxwZWVwaG9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlhcmVuYS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweWN0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5ZnBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5bWF0aC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0YXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5c3RyY21wLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5c3RydG9kLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9udC5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHl0aG9ucnVuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5dGltZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxyYW5kb20uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHJhbmdlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHNldG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhMjU2bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xzdHJpbmdpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzdHJ1Y3RtZW1iZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzeW10YWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3lzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHRocmVhZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcdGltZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclx0b2tlbml6ZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cdHJhY2ViYWNrLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdHlwZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx1bmNvbXByLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x1bmljb2RlY3R5cGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHVuaWNvZGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3aW5yZWcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHh4c3VidHlwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcHl0aG9udy5kc3AgYi9QQy9WQzYvcHl0aG9udy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YzMyNWMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5dGhvbncuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9udyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iIDB4MDEwMQ0KLQ0KLUNGRz1weXRob253IC0gV2luMzIgQWxwaGEgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9udy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9udy5tYWsiIENGRz0icHl0aG9udyAtIFdpbjMyIEFscGhhIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAicHl0aG9udyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbnciDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXHBjIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9udyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob253Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5dGhvbndfZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9udyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX2V4ZS5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxXaW5NYWluLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcmVhZG1lLnR4dCBiL1BDL1ZDNi9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTc4Zjg1Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLUJ1aWxkaW5nIFB5dGhvbiB1c2luZyBWQysrIDYuMCBvciA1LjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgUHl0aG9uIGZvciBXaW4zMiBwbGF0Zm9ybXMsIGUuZy4gV2luZG93cwotMjAwMCBhbmQgWFAuICBJdCByZXF1aXJlcyBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2Lnggb3IgNS54IGFuZCBQbGF0Zm9ybQotU0RLIEZlYnJ1YXJ5IDIwMDMgRWRpdGlvbiAoQ29yZSBTREspLgotKEZvciBvdGhlciBXaW5kb3dzIHBsYXRmb3JtcyBhbmQgY29tcGlsZXJzLCBzZWUgLi4vcmVhZG1lLnR4dC4pCi0KLUFsbCB5b3UgbmVlZCB0byBkbyBpcyBvcGVuIHRoZSB3b3Jrc3BhY2UgInBjYnVpbGQuZHN3IiBpbiBNU1ZDKyssIHNlbGVjdAotdGhlIERlYnVnIG9yIFJlbGVhc2Ugc2V0dGluZyAodXNpbmcgQnVpbGQgLT4gU2V0IEFjdGl2ZSBDb25maWd1cmF0aW9uLi4uKSwKLWFuZCBidWlsZCB0aGUgcHJvamVjdHMuCi0KLVRoZSBwcm9wZXIgb3JkZXIgdG8gYnVpbGQgc3VicHJvamVjdHM6Ci0KLTEpIHB5dGhvbmNvcmUgKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBETEwgYW5kIGxpYnJhcnkgZmlsZXMsCi0gICAgICAgICAgICAgICBweXRob24zMy57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKLQotMikgcHl0aG9uICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gZXhlY3V0YWJsZSwKLSAgICAgICAgICAgcHl0aG9uLmV4ZSBpbiBSZWxlYXNlIG1vZGUpCi0KLTMpIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgYXMgZGVzaXJlZCBvciBuZWVkZWQgKG5vdGU6ICB5b3UgcHJvYmFibHkgZG9uJ3QKLSAgIHdhbnQgdG8gYnVpbGQgbW9zdCBvZiB0aGUgb3RoZXIgc3VicHJvamVjdHMsIHVubGVzcyB5b3UncmUgYnVpbGRpbmcgYW4KLSAgIGVudGlyZSBQeXRob24gZGlzdHJpYnV0aW9uIGZyb20gc2NyYXRjaCwgb3Igc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzCi0gICB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudDsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQotCi1XaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjMzX2QuZGxsLCBweXRob25fZC5leGUsIHB5ZXhwYXRfZC5weWQsIGFuZCBzbyBvbi4KLQotU1VCUFJPSkVDVFMKLS0tLS0tLS0tLS0tCi1UaGVzZSBzdWJwcm9qZWN0cyBzaG91bGQgYnVpbGQgb3V0IG9mIHRoZSBib3guICBTdWJwcm9qZWN0cyBvdGhlciB0aGFuIHRoZQotbWFpbiBvbmVzIChweXRob25jb3JlLCBweXRob24sIHB5dGhvbncpIGdlbmVyYWxseSBidWlsZCBhIERMTCAocmVuYW1lZCB0bwotLnB5ZCkgZnJvbSBhIHNwZWNpZmljIG1vZHVsZSBzbyB0aGF0IHVzZXJzIGRvbid0IGhhdmUgdG8gbG9hZCB0aGUgY29kZQotc3VwcG9ydGluZyB0aGF0IG1vZHVsZSB1bmxlc3MgdGhleSBpbXBvcnQgdGhlIG1vZHVsZS4KLQotcHl0aG9uY29yZQotICAgIC5kbGwgYW5kIC5saWIKLXB5dGhvbgotICAgIC5leGUKLXB5dGhvbncKLSAgICBweXRob253LmV4ZSwgYSB2YXJpYW50IG9mIHB5dGhvbi5leGUgdGhhdCBkb2Vzbid0IHBvcCB1cCBhIERPUyBib3gKLV9tc2kKLSAgICBfbXNpLmMuIFlvdSBuZWVkIHRvIGluc3RhbGwgV2luZG93cyBJbnN0YWxsZXIgU0RLIHRvIGJ1aWxkIHRoaXMgbW9kdWxlLgotX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCi1fdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKLXB5ZXhwYXQKLSAgICBQeXRob24gd3JhcHBlciBmb3IgYWNjZWxlcmF0ZWQgWE1MIHBhcnNpbmcsIHdoaWNoIGluY29ycG9yYXRlcyBzdGFibGUKLSAgICBjb2RlIGZyb20gdGhlIEV4cGF0IHByb2plY3Q6ICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGF0Lwotc2VsZWN0Ci0gICAgc2VsZWN0bW9kdWxlLmMKLXVuaWNvZGVkYXRhCi0gICAgbGFyZ2UgdGFibGVzIG9mIFVuaWNvZGUgZGF0YQotd2luc291bmQKLSAgICBwbGF5IHNvdW5kcyAodHlwaWNhbGx5IC53YXYgZmlsZXMpIHVuZGVyIFdpbmRvd3MKLQotVGhlIGZvbGxvd2luZyBzdWJwcm9qZWN0cyB3aWxsIGdlbmVyYWxseSBOT1QgYnVpbGQgb3V0IG9mIHRoZSBib3guICBUaGV5Ci13cmFwIGNvZGUgUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIHlvdSdsbCBuZWVkIHRvIGRvd25sb2FkIHRoZSBiYXNlCi1wYWNrYWdlcyBmaXJzdCBhbmQgdW5wYWNrIHRoZW0gaW50byBzaWJsaW5ncyBvZiBQQ2J1aWxkcydzIHBhcmVudAotZGlyZWN0b3J5OyBmb3IgZXhhbXBsZSwgaWYgeW91ciBQQ2J1aWxkIGlzICAuLi4uLi4uXGRpc3Rcc3JjXFBDYnVpbGRcLAotdW5wYWNrIGludG8gbmV3IHN1YmRpcmVjdG9yaWVzIG9mIGRpc3RcLgotCi1fdGtpbnRlcgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFJlcXVpcmVzIGJ1aWxkaW5nCi0gICAgVGNsL1RrIGZpcnN0LiAgRm9sbG93aW5nIGFyZSBpbnN0cnVjdGlvbnMgZm9yIFRjbC9UayA4LjUuMi4KLQotICAgIEdldCBzb3VyY2UKLSAgICAtLS0tLS0tLS0tCi0gICAgSW4gdGhlIGRpc3QgZGlyZWN0b3J5LCBydW4KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2wtOC41LjIuMSB0Y2w4LjUuMgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RrLTguNS4yLjAgdGs4LjUuMgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RpeC04LjQuMy4xIHRpeDguNC4zCi0KLSAgICBEZWJ1ZyBCdWlsZAotICAgIC0tLS0tLS0tLS0tCi0gICAgVG8gYnVpbGQgZGVidWcgdmVyc2lvbiwgYWRkIERFQlVHPTEgdG8gYWxsIG5tYWtlIGNhbGwgYmVsbG93LgotCi0gICAgQnVpbGQgVGNsIGZpcnN0IChkb25lIGhlcmUgdy8gTVNWQyA2IG9uIFdpbjJLKQotICAgIC0tLS0tLS0tLS0tLS0tLQotICAgIElmIHlvdXIgZW52aXJvbm1lbnQgZG9lc24ndCBoYXZlIHN0cnVjdCBfc3RhdDY0LCB5b3UgbmVlZCB0byBhcHBseQotICAgIHRjbDg1Mi5wYXRjaCBpbiB0aGlzIGRpcmVjdG9yeSB0byBkaXN0XHRjbDguNS4yXGdlbmVyaWNcdGNsLmguCi0KLSAgICBjZCBkaXN0XHRjbDguNS4yXHdpbgotICAgIHJ1biB2Y3ZhcnMzMi5iYXQKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YwotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgT3B0aW9uYWw6ICBydW4gdGVzdHMsIHZpYQotICAgICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyB0ZXN0Ci0KLSAgICAgICAgYWxsLnRjbDogICAgICAgIFRvdGFsICAgMjQyNDIgICBQYXNzZWQgIDIzMzU4ICAgU2tpcHBlZCA4NzcgICAgIEZhaWxlZCAgNwotICAgICAgICBTb3VyY2VkIDEzNyBUZXN0IEZpbGVzLgotICAgICAgICBGaWxlcyB3aXRoIGZhaWxpbmcgdGVzdHM6IGV4ZWMudGVzdCBodHRwLnRlc3QgaW8udGVzdCBtYWluLnRlc3Qgc3RyaW5nLnRlc3Qgc3RyaQotICAgICAgICBuZ09iai50ZXN0Ci0KLSAgICBCdWlsZCBUawotICAgIC0tLS0tLS0tCi0gICAgY2QgZGlzdFx0azguNS4yXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjUuMgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjUuMiBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIFhYWCBJIGhhdmUgbm8gaWRlYSB3aGV0aGVyICJubWFrZSAtZiBtYWtlZmlsZS52YyB0ZXN0IiBwYXNzZWQgb3IKLSAgICBYWFggZmFpbGVkLiAgSXQgcG9wcGVkIHVwIHRvbnMgb2YgbGl0dGxlIHdpbmRvd3MsIGFuZCBkaWQgbG90cyBvZgotICAgIFhYWCBzdHVmZiwgYW5kIG5vdGhpbmcgYmxldyB1cC4KLQotICAgIEJ1aWxkIFRpeAotICAgIC0tLS0tLS0tLQotICAgIGNkIGRpc3RcdGl4OC40LjNcd2luCi0gICAgbm1ha2UgLWYgcHl0aG9uLm1hayBUQ0xfTUFKT1I9OCBUQ0xfTUlOT1I9NSBUQ0xfUEFUQ0g9MiBNQUNISU5FPUlYODYgREVCVUc9MAotICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgVENMX01BSk9SPTggVENMX01JTk9SPTUgVENMX1BBVENIPTIgTUFDSElORT1JWDg2IERFQlVHPTAgSU5TVEFMTF9ESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi1iejIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIGxpYmJ6MiBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgSG9tZXBhZ2UKLSAgICAgICAgaHR0cDovL3d3dy5iemlwLm9yZy8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjYKLQotICAgIEFuZCByZXF1aXJlcyBidWlsZGluZyBiejIgZmlyc3QuCi0KLSAgICBjZCBkaXN0XGJ6aXAyLTEuMC42Ci0gICAgbm1ha2UgLWYgbWFrZWZpbGUubXNjCi0KLSAgICBBbGwgb2YgdGhpcyBtYW5hZ2VkIHRvIGJ1aWxkIGJ6aXAyLTEuMC42XGxpYmJ6Mi5saWIsIHdoaWNoIHRoZSBQeXRob24KLSAgICBwcm9qZWN0IGxpbmtzIGluLgotCi0KLV9zcWxpdGUzCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIFNRTGl0ZSBsaWJyYXJ5LgotICAgIAotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAotICAgIAotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS1zb3VyY2UtMy4zLjQKLSAgICAKLSAgICBUbyB1c2UgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaW4gYSBQeXRob24gYnVpbGQgdHJlZSwgY29weSBzcWxpdGUzLmRsbCBpbnRvCi0gICAgdGhlIFBDL1ZDNiBmb2xkZXIuCi0KLQotX3NzbAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgc2VjdXJlIHNvY2tldHMgbGlicmFyeS4KLQotICAgIEdldCB0aGUgbGF0ZXN0IHNvdXJjZSBjb2RlIGZvciBPcGVuU1NMIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZwotCi0gICAgWW91IChwcm9iYWJseSkgZG9uJ3Qgd2FudCB0aGUgImVuZ2luZSIgY29kZS4gIEZvciBleGFtcGxlLCBkb24ndCBnZXQKLSAgICAgICAgb3BlbnNzbC1lbmdpbmUtMC45LjZnLnRhci5negotCi0gICAgVW5wYWNrIGludG8gdGhlICJkaXN0IiBkaXJlY3RvcnksIHJldGFpbmluZyB0aGUgZm9sZGVyIG5hbWUgZnJvbQotICAgIHRoZSBhcmNoaXZlIC0gZm9yIGV4YW1wbGUsIHRoZSBsYXRlc3Qgc3RhYmxlIE9wZW5TU0wgd2lsbCBpbnN0YWxsIGFzCi0gICAgICAgIGRpc3Qvb3BlbnNzbC0xLjAuMWUKLQotICAgIFlvdSBuZWVkIHRvIHVzZSB2ZXJzaW9uIDEuMC4xZSBvZiBPcGVuU1NMLgotCi0gICAgWW91IGNhbiBpbnN0YWxsIHRoZSBOQVNNIGFzc2VtYmxlciBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cubmFzbS51cy8KLSAgICBmb3IgeDg2IGJ1aWxkcy4gIFB1dCBuYXNtdy5leGUgYW55d2hlcmUgaW4geW91ciBQQVRILgotICAgIE5vdGU6IHJlY2VudCByZWxlYXNlcyBvZiBuYXNtIG9ubHkgaGF2ZSBuYXNtLmV4ZS4gSnVzdCByZW5hbWUgaXQgdG8gCi0gICAgbmFzbXcuZXhlLgotCi0gICAgWW91IGNhbiBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL2FjdGl2ZXBlcmwvCi0gICAgaWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20gCi0gICAgcHl0aG9uJ3Mgc3VidmVyc2lvbiByZXBvc2l0b3J5LiBUaGUgc3ZuIHZlcnNpb24gY29udGFpbnMgcHJlLWJ1aWxkCi0gICAgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KLQotICAgIFRoZSBNU1ZDIHByb2plY3Qgc2ltcGx5IGludm9rZXMgUEMvVkM2L2J1aWxkX3NzbC5weSB0byBwZXJmb3JtCi0gICAgdGhlIGJ1aWxkLiAgVGhpcyBQeXRob24gc2NyaXB0IGxvY2F0ZXMgYW5kIGJ1aWxkcyB5b3VyIE9wZW5TU0wKLSAgICBpbnN0YWxsYXRpb24sIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBtYWtlZmlsZSB0byBidWlsZCB0aGUgZmluYWwgLnB5ZC4KLQotICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAotICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQotICAgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCi0KLSAgICBidWlsZF9zc2wucHkvTVNWQyBpc24ndCBjbGV2ZXIgZW5vdWdoIHRvIGNsZWFuIE9wZW5TU0wgLSB5b3UgbXVzdCBkbwotICAgIHRoaXMgYnkgaGFuZC4KLQotCi1ZT1VSIE9XTiBFWFRFTlNJT04gRExMcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCwgdGhlcmUncyBhbiBleGFtcGxlCi13aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLi9QQy9leGFtcGxlLzsgcmVhZCB0aGUgZmlsZQotcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KZGlmZiAtLWdpdCBhL1BDL1ZDNi9ybXB5Yy5weSBiL1BDL1ZDNi9ybXB5Yy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkNjgyMy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcm1weWMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIFJlbW92ZSBhbGwgdGhlIC5weWMgYW5kIC5weW8gZmlsZXMgdW5kZXIgLi4vTGliLgotCi0KLWRlZiBkZWx0cmVlKHJvb3QpOgotICAgIGltcG9ydCBvcwotICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgotCi0gICAgbnB5YyA9IG5weW8gPSAwCi0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocm9vdCk6Ci0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgZGVsZXRlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy5weWMnKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5YyArPSAxCi0gICAgICAgICAgICBlbGlmIG5hbWUuZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5byArPSAxCi0KLSAgICAgICAgICAgIGlmIGRlbGV0ZToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoam9pbihyb290LCBuYW1lKSkKLQotICAgIHJldHVybiBucHljLCBucHlvCi0KLW5weWMsIG5weW8gPSBkZWx0cmVlKCIuLi8uLi9MaWIiKQotcHJpbnQgbnB5YywgIi5weWMgZGVsZXRlZCwiLCBucHlvLCAiLnB5byBkZWxldGVkIgpkaWZmIC0tZ2l0IGEvUEMvVkM2L3J0LmJhdCBiL1BDL1ZDNi9ydC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE5ZWFkZDcuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLUByZW0gUnVuIFRlc3RzLiAgUnVuIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUuCi1AcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotQHJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLUByZW0gLU8gICBSdW4gcHl0aG9uLmV4ZSBvciBweXRob25fZC5leGUgKHNlZSAtZCkgd2l0aCAtTy4KLUByZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotQHJlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLgotQHJlbSAgICAgIC1xIHJ1bnMgdGhlIHRlc3RzIGp1c3Qgb25jZSwgYW5kIHdpdGhvdXQgZGVsZXRpbmcgLnB5W2NvXSBmaWxlcy4KLUByZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1AcmVtIHdoYXRldmVyIHJlbWFpbnMgaXMgcGFzc2VkIHRvIHJlZ3J0ZXN0LnB5LiAgRm9yIGV4YW1wbGUsCi1AcmVtICAgICBydCAtTyAtZCAteCB0ZXN0X3RocmVhZAotQHJlbSBydW5zCi1AcmVtICAgICBweXRob25fZCAtTyAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZAotQHJlbSB0d2ljZSwgYW5kCi1AcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1AcmVtIHJ1bnMKLUByZW0gICAgIHB5dGhvbl9kIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1nIHRlc3RfYmluYXNjaWkKLUByZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotQHNldCBfZXhlPXB5dGhvbgotQHNldCBfcW1vZGU9bm8KLUBzZXQgX2Rhc2hPPQotQGdvdG8gQ2hlY2tPcHRzCi06QWdhaW4KLUBzaGlmdAotOkNoZWNrT3B0cwotQGlmICIlMSI9PSItTyIgc2V0IF9kYXNoTz0tTwotQGlmICIlMSI9PSItTyIgZ290byBBZ2FpbgotQGlmICIlMSI9PSItcSIgc2V0IF9xbW9kZT15ZXMKLUBpZiAiJTEiPT0iLXEiIGdvdG8gQWdhaW4KLUBpZiAiJTEiPT0iLWQiIHNldCBfZXhlPXB5dGhvbl9kCi1AaWYgIiUxIj09Ii1kIiBnb3RvIEFnYWluCi1AaWYgIiVfcW1vZGUlIj09InllcyIgZ290byBRbW9kZQotQGVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotQCVfZXhlJSBybXB5Yy5weQotJV9leGUlICVfZGFzaE8lIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci1AZWNobyBBYm91dCB0byBydW4gYWdhaW4gd2l0aG91dCBkZWxldGluZyAucHljLy5weW8gZmlyc3Q6Ci1AcGF1c2UKLTpRbW9kZQotJV9leGUlICVfZGFzaE8lIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci1Ac2V0IF9leGU9Ci1Ac2V0IF9xbW9kZT0KLUBzZXQgX2Rhc2hPPQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3NlbGVjdC5kc3AgYi9QQy9WQzYvc2VsZWN0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBlNTI4Yy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvc2VsZWN0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ic2VsZWN0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXNlbGVjdCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJzZWxlY3QubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInNlbGVjdC5tYWsiIENGRz0ic2VsZWN0IC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJzZWxlY3QiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcc2VsZWN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3c29jazMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3NlbGVjdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xzZWxlY3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3NvY2szMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDExMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvb3V0OiIuL3NlbGVjdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzZWxlY3Rtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi90Y2w4NTIucGF0Y2ggYi9QQy9WQzYvdGNsODUyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDY3ODBhLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi90Y2w4NTIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0tLS0gdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaAlGcmkgSnVuIDEzIDAzOjM1OjM5IDIwMDgKLSsrKyB0Y2w4LjUuMlxnZW5lcmljXHRjbC5oCVN1biBKYW4gIDQgMTY6NTI6MzAgMjAwOQotQEAgLTM2Nyw3ICszNjcsNyBAQAotIHR5cGVkZWYgc3RydWN0IHN0YXRpNjQgVGNsX1N0YXRCdWY7Ci0gIyAgICAgICAgIGRlZmluZSBUQ0xfTExfTU9ESUZJRVIJIkwiCi0gIyAgICAgIGVsc2UgLyogX19CT1JMQU5EQ19fICovCi0tIyAgICAgICAgIGlmIF9NU0NfVkVSIDwgMTQwMCAmJiAhZGVmaW5lZChfTV9JWDg2KQotKyMgICAgICAgICBpZiBfTVNDX1ZFUiA8IDE0MDAgLyomJiAhZGVmaW5lZChfTV9JWDg2KSovCi0gdHlwZWRlZiBzdHJ1Y3QgX3N0YXRpNjQJVGNsX1N0YXRCdWY7Ci0gIyAgICAgICAgIGVsc2UKLSB0eXBlZGVmIHN0cnVjdCBfc3RhdDY0CVRjbF9TdGF0QnVmOwpkaWZmIC0tZ2l0IGEvUEMvVkM2L3VuaWNvZGVkYXRhLmRzcCBiL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNGRiNjcuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3VuaWNvZGVkYXRhLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0idW5pY29kZWRhdGEiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9dW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidW5pY29kZWRhdGEubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInVuaWNvZGVkYXRhLm1hayIgQ0ZHPSJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInVuaWNvZGVkYXRhIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTIwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi91bmljb2RlZGF0YS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHVuaWNvZGVkYXRhIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTIwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdW5pY29kZWRhdGFfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvdzl4cG9wZW4uZHNwIGIvUEMvVkM2L3c5eHBvcGVuLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2NDAzYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvdzl4cG9wZW4uZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ3OXhwb3BlbiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iIDB4MDEwMQ0KLQ0KLUNGRz13OXhwb3BlbiAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3OXhwb3Blbi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidzl4cG9wZW4ubWFrIiBDRkc9Inc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInc5eHBvcGVuIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHc5eHBvcGVuIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIgL25vbG9nbyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHc5eHBvcGVuIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIC9ub2xvZ28gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi93OXhwb3Blbl9kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHc5eHBvcGVuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvd2luc291bmQuZHNwIGIvUEMvVkM2L3dpbnNvdW5kLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwOWI5Yi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvd2luc291bmQuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ3aW5zb3VuZCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz13aW5zb3VuZCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3aW5zb3VuZC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAid2luc291bmQubWFrIiBDRkc9IndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIndpbnNvdW5kIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAid2luc291bmQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXHBjIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHdpbm1tLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL3dpbnNvdW5kLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcd2luc291bmQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgd2lubW0ubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHdpbnNvdW5kLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9Vbmluc3RhbC53c2UgYi9QQy9WUzcuMS9Vbmluc3RhbC53c2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNmRkMzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvVW5pbnN0YWwud3NlCisrKyAvZGV2L251bGwKQEAgLTEsNTE0ICswLDAgQEAKLURvY3VtZW50IFR5cGU6IFdTRQotaXRlbTogR2xvYmFsCi0gIFZlcnNpb249OC4xNAotICBGbGFncz0wMDAwMDEwMAotICBTcGxpdD0xNDIwCi0gIExhbmd1YWdlcz02NSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAotICBDb3B5IERlZmF1bHQ9MQotICBKYXBhbmVzZSBGb250IE5hbWU9TVMgR290aGljCi0gIEphcGFuZXNlIEZvbnQgU2l6ZT0xMAotICBTdGFydCBHcmFkaWVudD0wIDAgMjU1Ci0gIEVuZCBHcmFkaWVudD0wIDAgMAotICBXaW5kb3dzIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMDAwMDAxMDAwCi0gIE1lc3NhZ2UgRm9udD1NUyBTYW5zIFNlcmlmCi0gIEZvbnQgU2l6ZT04Ci0gIERpc2sgTGFiZWw9R0xCUwotICBEaXNrIEZpbGVuYW1lPUlOU1RBTEwKLSAgUGF0Y2ggRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICBQYXRjaCBUaHJlc2hvbGQ9MjAwCi0gIFBhdGNoIE1lbW9yeT00MDk2Ci0gIFBlci1Vc2VyIFZlcnNpb24gSUQ9MQotICBDcnlzdGFsIEZvcm1hdD0xMDExMTEwMDEwMTEwMDAwMDAxMDAwMTAwMTAwMTAwMQotICBTdGVwIFZpZXc9JlByb3BlcnRpZXMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIFRoaXMgaXMgYSB2ZXJiYXRpbSBjb3B5IG9mIFdpc2UncyBVbmluc3RhbC53c2UsIGFsdGVyZWQgYXQgdGhlIGVuZCB0byB3cml0ZQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD11bmluc3RhbGwgaW5mbyB1bmRlciBIS0NVIGluc3RlYWQgb2YgSEtMTSBpZiBvdXIgRE9BRE1JTiB2YXIgaXMgZmFsc2UuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgIEluc3RhbGwgU3VwcG9ydCBmb3IgdW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbi4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfUEFUSAotICBWYWx1ZT0lX0xPR0ZJTEVfUEFUSF8lCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfUEFUSAotICBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglXFVOV0lTRS5FWEUKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0VYRV9PU19UWVBFXwotICBWYWx1ZT1XSU4zMgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXFVOV0lTRTMyLkVYRQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRWxzZQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXFVOV0lTRS5FWEUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICBJbnN0YWxsIFN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9MQU5HCi0gIFZhbHVlPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9MQU5HCi0gIFZhbHVlPSVVTklOU1RBTExfTEFORyVcVU5XSVNFLklOSQotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0NfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19EX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRFVQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfRV9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREVVCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1GCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5QVEcKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0ZfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLlBURwotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19HX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUgKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfSF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1JCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JVEEKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0lfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLklUQQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREFOCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19KX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5EQU4KLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUsKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZJTgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfS19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRklOCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1MCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JU0wKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0xfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLklTTAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTkxECi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19NX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OTEQKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPU4KLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5PUgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfTl9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTk9SCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1PCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5TVkUKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX09fTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLlNWRQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9UAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSlBOCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19QX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5KUE4KLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgIEluc3RhbGwgdGhlIGFkZC9yZW1vdmUgb3IgdW5pbnN0YWxsIGljb24KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfUEFUSAotICBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1JTlNUX0xPR19QQVRICi0gIFZhbHVlPSVfTE9HRklMRV9QQVRIXyUKLSAgRmxhZ3M9MDAwMTAxMDAKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMDExMTAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdyaXRlIHVuaW5zdGFsbCBpbmZvIHVuZGVyIEhLTE0uICBUaGlzIGlmL2Vsc2UvZW5kIGJsb2NrIGFkZGVkIGJ5IFRpbS4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lQVBQVElUTEUlCi0gIFZhbHVlIE5hbWU9RGlzcGxheU5hbWUKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJSAlSU5TVF9MT0dfUEFUSCUKLSAgTmV3IFZhbHVlPQotICBWYWx1ZSBOYW1lPVVuaW5zdGFsbFN0cmluZwotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIHNhbWUsIGJ1dCB3cml0ZSB1bmRlciBIS0NVIGluc3RlYWQuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JUFQUFRJVExFJQotICBWYWx1ZSBOYW1lPURpc3BsYXlOYW1lCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVVTklOU1RBTExfUEFUSCUgJUlOU1RfTE9HX1BBVEglCi0gIE5ldyBWYWx1ZT0KLSAgVmFsdWUgTmFtZT1Vbmluc3RhbGxTdHJpbmcKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBBZGQgUHJvZ01hbiBJY29uCi0gIEdyb3VwPSVHUk9VUCUKLSAgSWNvbiBOYW1lPVVuaW5zdGFsbCAlQVBQVElUTEUlCi0gIENvbW1hbmQgTGluZT0lVU5JTlNUQUxMX1BBVEglICVJTlNUX0xPR19QQVRIJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMTExMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CUkFORAotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0yCi0gIGl0ZW06IEtleQotICAgIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICAgIE5ldyBWYWx1ZT0lQ09NUEFOWSUKLSAgICBWYWx1ZSBOYW1lPVJlZ0NvbXBhbnkKLSAgICBSb290PTIKLSAgZW5kCi0gIGl0ZW06IEtleQotICAgIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICAgIE5ldyBWYWx1ZT0lTkFNRSUKLSAgICBWYWx1ZSBOYW1lPVJlZ093bmVyCi0gICAgUm9vdD0yCi0gIGVuZAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qIGIvUEMvVlM3LjEvX2N0eXBlcy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTlkODguLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX2N0eXBlcy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwzMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9jdHlwZXMiDQotCVByb2plY3RHVUlEPSJ7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlcyINCi0JS2V5d29yZD0iV2luMzJQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IkZBTFNFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IkZBTFNFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc19kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IkZBTFNFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIC9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyAvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbHByb2MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xtYWxsb2NfY2xvc3VyZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjMyLmMiPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW42NC5hc20iPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCUNvbW1hbmRMaW5lPSJhbWQ2NF9tbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7DQotIg0KLQkJCQkJT3V0cHV0cz0iJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2ogYi9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGU4YTJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9jdHlwZXNfdGVzdCINCi0JUHJvamVjdEdVSUQ9Ins4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IkZBTFNFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NC10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlNaW5pbWFsUmVidWlsZD0iRkFMU0UiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qIGIvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyYjlkOS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfZWxlbWVudHRyZWUiDQotCVByb2plY3RHVUlEPSJ7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfSINCi0JU2NjUHJvamVjdE5hbWU9Il9lbGVtZW50dHJlZSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWVfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWVfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fZWxlbWVudHRyZWVfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWUucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fZWxlbWVudHRyZWUubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWUucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9lbGVtZW50dHJlZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX21zaS52Y3Byb2ogYi9QQy9WUzcuMS9fbXNpLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRmZDQ0Ny4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fbXNpLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX21zaSINCi0JUHJvamVjdEdVSUQ9InsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX21zaSINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlxwYyI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX21zaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2lfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX21zaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX21zaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIGJ1ZmZlcm92ZXJmbG93VS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgYnVmZmVyb3ZlcmZsb3dVLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xfbXNpLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc29ja2V0LnZjcHJvaiBiL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmVkOGU0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfc29ja2V0Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX3NvY2tldCINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXRfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc29ja2V0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NvY2tldC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc29ja2V0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTNy4xL19zcWxpdGUzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY3ZDk5MS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9zcWxpdGUzIg0KLQlQcm9qZWN0R1VJRD0iezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0iDQotCVNjY1Byb2plY3ROYW1lPSJfc3FsaXRlMyINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlM19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlMy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcaWE2NFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlMy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxhbWQ2NFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlMy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zc2wubWFrIGIvUEMvVlM3LjEvX3NzbC5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzZhNjMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NzbC5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1FWFRSQV9MSUJTPQotCi0hSUZERUYgREVCVUcKLVNVRkZJWD1fZC5weWQKLVRFTVA9eDg2LXRlbXAtZGVidWcvCi1DRkxBR1M9L09kIC9aaSAvTURkIC9MRGQgL0RERUJVRyAvRF9ERUJVRyAvRFdJTjMyCi1TU0xfTElCX0RJUj0kKFNTTF9ESVIpL291dDMyLmRiZwotIUVMU0UKLVNVRkZJWD0ucHlkCi1URU1QPXg4Ni10ZW1wLXJlbGVhc2UvCi1DRkxBR1M9L094IC9NRCAvTEQgL0RXSU4zMgotU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMgotIUVORElGCi0KLUlOQ0xVREVTPS1JIC4uLy4uL0luY2x1ZGUgLUkgLi4vLi4vUEMgLUkgJChTU0xfRElSKS9pbmMzMgotCi1TU0xfTElCUz1nZGkzMi5saWIgd3NvY2szMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL0xJQlBBVEg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliIHNzbGVheTMyLmxpYgotU1NMX1NPVVJDRT0uLi8uLi9Nb2R1bGVzL19zc2wuYyAKLQotSEFTSF9MSUJTPWdkaTMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbGlicGF0aDokKFNTTF9MSUJfRElSKSBsaWJlYXkzMi5saWIKLUhBU0hfU09VUkNFPS4uLy4uL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMgCi0KLWFsbDogX3NzbCQoU1VGRklYKSBfaGFzaGxpYiQoU1VGRklYKQotCi0jIFNwbGl0IGNvbXBpbGUvbGluayBpbnRvIHR3byBzdGVwcyB0byBiZXR0ZXIgc3VwcG9ydCBWU0V4dENvbXAKLV9zc2wkKFNVRkZJWCk6ICQoU1NMX1NPVVJDRSkgJChTU0xfTElCX0RJUikvbGliZWF5MzIubGliICQoU1NMX0xJQl9ESVIpL3NzbGVheTMyLmxpYiAuLi8uLi9QQy8qLmggLi4vLi4vSW5jbHVkZS8qLmgKLQlAaWYgbm90IGV4aXN0ICIkKFRFTVApL19zc2wvLiIgbWtkaXIgIiQoVEVNUCkvX3NzbCIKLQljbCAvbm9sb2dvIC9jICQoU1NMX1NPVVJDRSkgJChDRkxBR1MpIC9GbyQoVEVNUClcX3NzbFwkKi5vYmogJChJTkNMVURFUykKLQlsaW5rIC9ub2xvZ28gQDw8Ci0gICAgICAgICAgICAgL2RsbCAvb3V0Ol9zc2wkKFNVRkZJWCkgJChURU1QKVxfc3NsXCQqLm9iaiAkKFNTTF9MSUJTKSAkKEVYVFJBX0xJQlMpCi08PAotCi1faGFzaGxpYiQoU1VGRklYKTogJChIQVNIX1NPVVJDRSkgJChTU0xfTElCX0RJUikvbGliZWF5MzIubGliIC4uLy4uL1BDLyouaCAuLi8uLi9JbmNsdWRlLyouaAotICAgIEBpZiBub3QgZXhpc3QgIiQoVEVNUCkvX2hhc2hsaWIvLiIgbWtkaXIgIiQoVEVNUCkvX2hhc2hsaWIiCi0gICAgY2wgL25vbG9nbyAvYyAkKEhBU0hfU09VUkNFKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpIC9GbyQoVEVNUClcX2hhc2hsaWJcJCoub2JqICQoSU5DTFVERVMpIAotICAgIGxpbmsgL25vbG9nbyBAPDwKLQkvZGxsIC9vdXQ6X2hhc2hsaWIkKFNVRkZJWCkgJChIQVNIX0xJQlMpICQoRVhUUkFfTElCUykgJChURU1QKVxfaGFzaGxpYlwkKi5vYmoKLTw8CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3NsLnZjcHJvaiBiL1BDL1ZTNy4xL19zc2wudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmQ2NWZlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zc2wudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9zc2wiDQotCVJvb3ROYW1lc3BhY2U9Il9zc2wiDQotCVNjY1Byb2plY3ROYW1lPSIiDQotCVNjY0xvY2FsUGF0aD0iIg0KLQlLZXl3b3JkPSJNYWtlRmlsZVByb2oiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2wucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2xfZC5weWQiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9zc2wiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIC1hIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJlY2hvIE5vdGhpbmcgdG8gZG8iDQotCQkJCU91dHB1dD0iX3NzbC5weWQiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2wucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zc2wuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGFzaG9wZW5zc2wuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL190ZXN0Y2FwaS52Y3Byb2ogYi9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTk3ODQyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL190ZXN0Y2FwaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il90ZXN0Y2FwaSINCi0JU2NjUHJvamVjdE5hbWU9Il90ZXN0Y2FwaSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGVzdGNhcGkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGlfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGVzdGNhcGlfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGVzdGNhcGkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGNhcGltb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL190a2ludGVyLnZjcHJvaiBiL1BDL1ZTNy4xL190a2ludGVyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3MzQxNi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il90a2ludGVyIg0KLQlTY2NQcm9qZWN0TmFtZT0iX3RraW50ZXIiDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5cLi5cLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF90a2ludGVyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGtpbnRlcl9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3RraW50ZXIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGtpbnRlci5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlci5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGtpbnRlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRrYXBwaW5pdC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYW1kNjRfbWw2NC5iYXQgYi9QQy9WUzcuMS9hbWQ2NF9tbDY0LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5YWNmMS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9hbWQ2NF9tbDY0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFRyeSB0byBmaW5kIHRoZSBBTUQ2NCBhc3NlbWJsZXIgYW5kIGNhbGwgaXQgd2l0aCB0aGUgc3VwcGxpZWQgYXJndW1lbnRzLgotCi1zZXQgTUxFWEU9TWljcm9zb2Z0IFBsYXRmb3JtIFNES1xCaW5cV2luNjRceDg2XEFNRDY0XG1sNjQuRVhFCi0KLXJlbSBGb3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZWUgYWxzbwotcmVtIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9lbi11cy93aW42NC93aW42NC93b3c2NF9pbXBsZW1lbnRhdGlvbl9kZXRhaWxzLmFzcAotCi1pZiBleGlzdCAiJVByb2dyYW1GaWxlcyVcJU1MRVhFJSIgKAotICBzZXQgTUw2ND0iJVByb2dyYW1GaWxlcyVcJU1MRVhFJSIKLSkgZWxzZSBpZiBleGlzdCAiJVByb2dyYW1XNjQzMiVcJU1MRVhFJSIgKAotICBzZXQgTUw2ND0iJVByb2dyYW1XNjQzMiVcJU1MRVhFJSIKLSkgZWxzZSAoCi0gIHNldCBNTDY0PW1sNjQuZXhlCi0pCi0KLSVNTDY0JSAlKgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYnVpbGRfc3NsLmJhdCBiL1BDL1ZTNy4xL2J1aWxkX3NzbC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YmUzYzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYnVpbGRfc3NsLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLWlmICIlMSIgPT0gIlJlbGVhc2VBTUQ2NCIgY2FsbCAiJU1TU2RrJVxTZXRFbnYiIC9YUDY0IC9SRVRBSUwKLQotQGVjaG8gb2ZmCi1pZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCi0gIGlmICUxIEVRVSBEZWJ1ZyAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICApIEVMU0UgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob24uZXhlCi0gICkKLSkKLSVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyCi0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5weSBiL1BDL1ZTNy4xL2J1aWxkX3NzbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU5ZjRlMy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9idWlsZF9zc2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotIyBTY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBfc3NsIGFuZCBfaGFzaGxpYiBtb2R1bGVzIGZvciBXaW5kb3dzLgotIyBVc2VzIFBlcmwgdG8gc2V0dXAgdGhlIE9wZW5TU0wgZW52aXJvbm1lbnQgY29ycmVjdGx5Ci0jIGFuZCBidWlsZCBPcGVuU1NMLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbm1ha2Ugc2Vzc2lvbgotIyBmb3IgdGhlIGFjdHVhbCBfc3NsLnB5ZCBhbmQgX2hhc2hsaWIucHlkIERMTHMuCi0KLSMgVEhFT1JFVElDQUxMWSwgeW91IGNhbjoKLSMgKiBVbnBhY2sgdGhlIGxhdGVzdCBTU0wgcmVsZWFzZSBvbmUgbGV2ZWwgYWJvdmUgeW91ciBtYWluIFB5dGhvbiBzb3VyY2UKLSMgICBkaXJlY3RvcnkuICBJdCBpcyBsaWtlbHkgeW91IHdpbGwgYWxyZWFkeSBmaW5kIHRoZSB6bGliIGxpYnJhcnkgYW5kCi0jICAgYW55IG90aGVyIGV4dGVybmFsIHBhY2thZ2VzIHRoZXJlLgotIyAqIEluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGlzIHNvbWV3aGVyZSBvbiB5b3VyIHBhdGguCi0jICogUnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIFBDQnVpbGQgZGlyZWN0b3J5LgotIwotIyBpdCBzaG91bGQgY29uZmlndXJlIGFuZCBidWlsZCBTU0wsIHRoZW4gYnVpbGQgdGhlIF9zc2wgYW5kIF9oYXNobGliCi0jIFB5dGhvbiBleHRlbnNpb25zIHdpdGhvdXQgaW50ZXJ2ZW50aW9uLgotCi1pbXBvcnQgb3MsIHN5cywgcmUKLQotIyBGaW5kIGFsbCAiZm9vLmV4ZSIgZmlsZXMgb24gdGhlIFBBVEguCi1kZWYgZmluZF9hbGxfb25fcGF0aChmaWxlbmFtZSwgZXh0cmFzID0gTm9uZSk6Ci0gICAgZW50cmllcyA9IG9zLmVudmlyb25bIlBBVEgiXS5zcGxpdChvcy5wYXRoc2VwKQotICAgIHJldCA9IFtdCi0gICAgZm9yIHAgaW4gZW50cmllczoKLSAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICBpZiBleHRyYXM6Ci0gICAgICAgIGZvciBwIGluIGV4dHJhczoKLSAgICAgICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICByZXR1cm4gcmV0Ci0KLSMgRmluZCBhIHN1aXRhYmxlIFBlcmwgaW5zdGFsbGF0aW9uIGZvciBPcGVuU1NMLgotIyBjeWd3aW4gcGVybCBkb2VzICpub3QqIHdvcmsuICBBY3RpdmVQZXJsIGRvZXMuCi0jIEJlaW5nIGEgUGVybCBkdW1teSwgdGhlIHNpbXBsZXN0IHdheSBJIGNhbiBjaGVjayBpcyBpZiB0aGUgIldpbjMyIiBwYWNrYWdlCi0jIGlzIGF2YWlsYWJsZS4KLWRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6Ci0gICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4ocGVybCArICcgLWUgInVzZSBXaW4zMjsiJykKLSAgICAgICAgZmgucmVhZCgpCi0gICAgICAgIHJjID0gZmguY2xvc2UoKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHJldHVybiBwZXJsCi0gICAgcHJpbnQgIkNhbiBub3QgZmluZCBhIHN1aXRhYmxlIFBFUkw6IgotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCAiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiCi0gICAgICAgIGZvciBwIGluIHBlcmxzOgotICAgICAgICAgICAgcHJpbnQgIiAiLCBwCi0gICAgICAgIHByaW50ICIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQgIiBOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIgotICAgIHByaW50ICIgUGxlYXNlIGluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGFwcGVhcnMgb24geW91ciBwYXRoIgotICAgIHByaW50ICJUaGUgUHl0aG9uIFNTTCBtb2R1bGUgd2FzIG5vdCBidWlsdCIKLSAgICByZXR1cm4gTm9uZQotCi0jIExvY2F0ZSB0aGUgYmVzdCBTU0wgZGlyZWN0b3J5IGdpdmVuIGEgZmV3IHJvb3RzIHRvIGxvb2sgaW50by4KLWRlZiBmaW5kX2Jlc3Rfc3NsX2Rpcihzb3VyY2VzKToKLSAgICBjYW5kaWRhdGVzID0gW10KLSAgICBmb3IgcyBpbiBzb3VyY2VzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IGRvIG5vdCBhYnNwYXRoIHM7IHRoZSBidWlsZCB3aWxsIGZhaWwgaWYgYW55Ci0gICAgICAgICAgICAjIGhpZ2hlciB1cCBkaXJlY3RvcnkgbmFtZSBoYXMgc3BhY2VzIGluIGl0LgotICAgICAgICAgICAgZm5hbWVzID0gb3MubGlzdGRpcihzKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICBmbmFtZXMgPSBbXQotICAgICAgICBmb3IgZm5hbWUgaW4gZm5hbWVzOgotICAgICAgICAgICAgZnFuID0gb3MucGF0aC5qb2luKHMsIGZuYW1lKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcW4pIGFuZCBmbmFtZS5zdGFydHN3aXRoKCJvcGVuc3NsLSIpOgotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGZxbikKLSAgICAjIE5vdyB3ZSBoYXZlIGFsbCB0aGUgY2FuZGlkYXRlcywgbG9jYXRlIHRoZSBiZXN0LgotICAgIGJlc3RfcGFydHMgPSBbXQotICAgIGJlc3RfbmFtZSA9IE5vbmUKLSAgICBmb3IgYyBpbiBjYW5kaWRhdGVzOgotICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KCJbLi1dIiwgb3MucGF0aC5iYXNlbmFtZShjKSlbMTpdCi0gICAgICAgICMgZWcgLSBvcGVuc3NsLTAuOS43LWJldGExIC0gaWdub3JlIGFsbCAiYmV0YSIgb3IgYW55IG90aGVyIHF1YWxpZmllcnMKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA+PSA0OgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgcGFydHMgPiBiZXN0X3BhcnRzOgotICAgICAgICAgICAgYmVzdF9wYXJ0cyA9IHBhcnRzCi0gICAgICAgICAgICBiZXN0X25hbWUgPSBjCi0gICAgaWYgYmVzdF9uYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcmludCAiRm91bmQgYW4gU1NMIGRpcmVjdG9yeSBhdCAnJXMnIiAlIChiZXN0X25hbWUsKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICJDb3VsZCBub3QgZmluZCBhbiBTU0wgZGlyZWN0b3J5IGluICclcyciICUgKHNvdXJjZXMsKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJldHVybiBiZXN0X25hbWUKLQotZGVmIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpOgotICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUpCi0gICAgb3Muc3lzdGVtKGRvX3NjcmlwdCkKLQotZGVmIG1haW4oKToKLSAgICBidWlsZF9hbGwgPSAiLWEiIGluIHN5cy5hcmd2Ci0gICAgaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2UiOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgZGVidWcgPSBGYWxzZQotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lOMzIiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbWFzbSIKLSAgICAgICAgbWFrZWZpbGUgPSAibXNcXG50Lm1hayIKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICJEZWJ1ZyI6Ci0gICAgICAgIGFyY2ggPSAieDg2IgotICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX21hc20iCi0gICAgICAgIG1ha2VmaWxlPSJtc1xcZDMyLm1hayIKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlSXRhbml1bSI6Ci0gICAgICAgIGFyY2ggPSAiaWE2NCIKLSAgICAgICAgZGVidWcgPSBGYWxzZQotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lONjRJIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX3dpbjY0aSIKLSAgICAgICAgbWFrZWZpbGUgPSAibXNcXG50Lm1hayIKLSAgICAgICAgb3MuZW52aXJvblsiVlNFWFRDT01QX1VTRUNMIl0gPSAiTVNfSVRBTklVTSIKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlQU1ENjQiOgotICAgICAgICBhcmNoPSJhbWQ2NCIKLSAgICAgICAgZGVidWc9RmFsc2UKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjY0QSIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb193aW42NGEiCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudC5tYWsiCi0gICAgICAgIG9zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybCBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgcHJpbnQgIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICMgTG9vayBmb3IgU1NMIDIgbGV2ZWxzIHVwIGZyb20gcGNidWlsZCAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgotICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCi0gICAgaWYgc3NsX2RpciBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgb2xkX2NkID0gb3MuZ2V0Y3dkKCkKLSAgICB0cnk6Ci0gICAgICAgIG9zLmNoZGlyKHNzbF9kaXIpCi0gICAgICAgICMgSWYgdGhlIHNzbCBtYWtlZmlsZXMgZG8gbm90IGV4aXN0LCB3ZSBpbnZva2UgUGVybCB0byBnZW5lcmF0ZSB0aGVtLgotICAgICAgICAjIER1ZSB0byBhIGJ1ZyBpbiB0aGlzIHNjcmlwdCwgdGhlIG1ha2VmaWxlIHNvbWV0aW1lcyBlbmRlZCB1cCBlbXB0eQotICAgICAgICAjIEZvcmNlIGEgcmVnZW5lcmF0aW9uIGlmIGl0IGlzLgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpIG9yIG9zLnBhdGguZ2V0c2l6ZShtYWtlZmlsZSk9PTA6Ci0gICAgICAgICAgICBwcmludCAiQ3JlYXRpbmcgdGhlIG1ha2VmaWxlcy4uLiIKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgIyBQdXQgb3VyIHdvcmtpbmcgUGVybCBhdCB0aGUgZnJvbnQgb2Ygb3VyIHBhdGgKLSAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9IG9zLnBhdGguZGlybmFtZShwZXJsKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGhzZXAgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0KLSAgICAgICAgICAgIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpCi0gICAgICAgICAgICBpZiBhcmNoPT0ieDg2IiBhbmQgZGVidWc6Ci0gICAgICAgICAgICAgICAgIyB0aGUgZG9fbWFzbSBzY3JpcHQgaW4gb3BlbnNzbCBkb2Vzbid0IGdlbmVyYXRlIGEgZGVidWcKLSAgICAgICAgICAgICAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAgICAgb3Muc3lzdGVtKCJwZXJsIHV0aWxcbWsxbWYucGwgZGVidWcgIitjb25maWd1cmUrIiA+IittYWtlZmlsZSkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCi0gICAgICAgIHByaW50ICJFeGVjdXRpbmcgc3NsIG1ha2VmaWxlczoiLCBtYWtlQ29tbWFuZAotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgcHJpbnQgIkV4ZWN1dGluZyAiK21ha2VmaWxlKyIgZmFpbGVkIgotICAgICAgICAgICAgcHJpbnQgcmMKLSAgICAgICAgICAgIHN5cy5leGl0KHJjKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLmNoZGlyKG9sZF9jZCkKLSAgICAjIEFuZCBmaW5hbGx5LCB3ZSBjYW4gYnVpbGQgdGhlIF9zc2wgbW9kdWxlIGl0c2VsZiBmb3IgUHl0aG9uLgotICAgIGRlZnMgPSAiU1NMX0RJUj1cIiVzXCIiICUgKHNzbF9kaXIsKQotICAgIGlmIGRlYnVnOgotICAgICAgICBkZWZzID0gZGVmcyArICIgIiArICJERUJVRz0xIgotICAgIGlmIGFyY2ggaW4gKCdhbWQ2NCcsICdpYTY0Jyk6Ci0gICAgICAgIGRlZnMgPSBkZWZzICsgIiBFWFRSQV9DRkxBR1M9L0dTLSBFWFRSQV9MSUJTPWJ1ZmZlcm92ZXJmbG93VS5saWIiCi0gICAgbWFrZUNvbW1hbmQgPSAnbm1ha2UgL25vbG9nbyAtZiBfc3NsLm1hayAnICsgZGVmcyArICIgIiArIG1ha2VfZmxhZ3MKLSAgICBwcmludCAiRXhlY3V0aW5nOiIsIG1ha2VDb21tYW5kCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgc3lzLmV4aXQocmMpCi0KLWlmIF9fbmFtZV9fPT0nX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYnoyLnZjcHJvaiBiL1BDL1ZTNy4xL2J6Mi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDA1YTEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYnoyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iYnoyIg0KLQlSb290TmFtZXNwYWNlPSJiejIiDQotCVNjY1Byb2plY3ROYW1lPSJiejIiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXGJ6MiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibXN2Y3J0LGxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Ml9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Ml9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAuLlwuLlwuLlxiemlwMi0xLjAuMw0KLW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXGJ6MiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Mi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWINCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Mi5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vYnoyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAuLlwuLlwuLlxiemlwMi0xLjAuMw0KLW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYg0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Mi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWINCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJ6Mm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvZGIuYnVpbGQgYi9QQy9WUzcuMS9kYi5idWlsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE4N2Y3NC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9kYi5idWlsZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3Q+Ci0gPHRhcmdldCBuYW1lPSJhbGwiIGRlc2NyaXB0aW9uPSJCdWlsZCBhbGwgdGFyZ2V0cy4iPgotICAgPHNvbHV0aW9uIGNvbmZpZ3VyYXRpb249InJlbGVhc2UiPgotICAgICA8cHJvamVjdHM+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iZGJfc3RhdGljLnZjcHJvaiIgLz4KLSAgICAgPC9wcm9qZWN0cz4KLSAgIDwvc29sdXRpb24+Ci0gPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9maWVsZDMucHkgYi9QQy9WUzcuMS9maWVsZDMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZjI0Y2EuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvZmllbGQzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBBbiBhYnN1cmQgd29ya2Fyb3VuZCBmb3IgdGhlIGxhY2sgb2YgYXJpdGhtZXRpYyBpbiBNUydzIHJlc291cmNlIGNvbXBpbGVyLgotIyBBZnRlciBidWlsZGluZyBQeXRob24sIHJ1biB0aGlzLCB0aGVuIHBhc3RlIHRoZSBvdXRwdXQgaW50byB0aGUgYXBwcm9wcmlhdGUKLSMgcGFydCBvZiBQQ1xweXRob25fbnQucmMuCi0jIEV4YW1wbGUgb3V0cHV0OgotIwotIyAqIEZvciAyLjNhMCwKLSMgKiBQWV9NSUNST19WRVJTSU9OID0gMAotIyAqIFBZX1JFTEVBU0VfTEVWRUwgPSAnYWxwaGEnID0gMHhBCi0jICogUFlfUkVMRUFTRV9TRVJJQUwgPSAxCi0jICoKLSMgKiBhbmQgMCoxMDAwICsgMTAqMTAgKyAxID0gMTAxLgotIyAqLwotIyAjZGVmaW5lIEZJRUxEMyAxMDEKLQotaW1wb3J0IHN5cwotCi1tYWpvciwgbWlub3IsIG1pY3JvLCBsZXZlbCwgc2VyaWFsID0gc3lzLnZlcnNpb25faW5mbwotbGV2ZWxudW0gPSB7J2FscGhhJzogMHhBLAotICAgICAgICAgICAgJ2JldGEnOiAweEIsCi0gICAgICAgICAgICAnY2FuZGlkYXRlJzogMHhDLAotICAgICAgICAgICAgJ2ZpbmFsJzogMHhGLAotICAgICAgICAgICB9W2xldmVsXQotc3RyaW5nID0gc3lzLnZlcnNpb24uc3BsaXQoKVswXSAjIGxpa2UgJzIuM2EwJwotCi1wcmludCAiICogRm9yICVzLCIgJSBzdHJpbmcKLXByaW50ICIgKiBQWV9NSUNST19WRVJTSU9OID0gJWQiICUgbWljcm8KLXByaW50ICIgKiBQWV9SRUxFQVNFX0xFVkVMID0gJXIgPSAlcyIgJSAobGV2ZWwsIGhleChsZXZlbG51bSkpCi1wcmludCAiICogUFlfUkVMRUFTRV9TRVJJQUwgPSAlZCIgJSBzZXJpYWwKLXByaW50ICIgKiIKLQotZmllbGQzID0gbWljcm8gKiAxMDAwICsgbGV2ZWxudW0gKiAxMCArIHNlcmlhbAotCi1wcmludCAiICogYW5kICVkKjEwMDAgKyAlZCoxMCArICVkID0gJWQiICUgKG1pY3JvLCBsZXZlbG51bSwgc2VyaWFsLCBmaWVsZDMpCi1wcmludCAiICovIgotcHJpbnQgIiNkZWZpbmUgRklFTEQzIiwgZmllbGQzCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9pbnN0YWxsZXIuYm1wIGIvUEMvVlM3LjEvaW5zdGFsbGVyLmJtcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg3NWUxOS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9pbnN0YWxsZXIuYm1wCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8uYyBiL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYTJiNjYuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8uYworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vKiBUaGlzIGZpbGUgY3JlYXRlcyB0aGUgZ2V0YnVpbGRpbmZvLm8gb2JqZWN0LCBieSBmaXJzdAotICAgaW52b2tpbmcgc3Vid2NyZXYuZXhlIChpZiBmb3VuZCksIGFuZCB0aGVuIGludm9raW5nIGNsLmV4ZS4KLSAgIEFzIGEgc2lkZSBlZmZlY3QsIGl0IG1pZ2h0IGdlbmVyYXRlIFBDXFZTNy4xXGdldGJ1aWxkaW5mbzIuYwotICAgYWxzby4gSWYgdGhpcyBpc24ndCBhIHN1YnZlcnNpb24gY2hlY2tvdXQsIG9yIHN1YndjcmV2IGlzbid0Ci0gICBmb3VuZCwgaXQgY29tcGlsZXMgLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyBpbnN0ZWFkLgotCi0gICBDdXJyZW50bHksIHN1YndjcmV2LmV4ZSBpcyBmb3VuZCBmcm9tIHRoZSByZWdpc3RyeSBlbnRyaWVzCi0gICBvZiBUb3J0b2lzZVNWTi4KLQotICAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHBsYWNlIGdldGJ1aWxkaW5mby5vIGludG8gdGhlIHByb3BlcgotICAgYmluYXJ5IGRpcmVjdG9yeS4gVGhpcyBpc24ndCBuZWNlc3NhcnksIGFzIHRoaXMgdG9vbCBpcwotICAgaW52b2tlZCBhcyBhIHByZS1saW5rIHN0ZXAgZm9yIHB5dGhvbmNvcmUsIHNvIHRoYXQgb3ZlcndyaXRlcwotICAgYW55IHByZXZpb3VzIGdldGJ1aWxkaW5mby5vLgotCi0qLwotCi1pbnQgbWFrZV9idWlsZGluZm8yKCkKLXsKLSAgICBzdHJ1Y3QgX3N0YXQgc3Q7Ci0gICAgSEtFWSBoVG9ydG9pc2U7Ci0gICAgY2hhciBjb21tYW5kWzUwMF07Ci0gICAgRFdPUkQgdHlwZSwgc2l6ZTsKLSAgICBpZiAoX3N0YXQoIi5zdm4iLCAmc3QpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLyogQWxsb3cgc3VwcHJlc3Npb24gb2Ygc3Vid2NyZXYuZXhlIGludm9jYXRpb24gaWYgYSBub19zdWJ3Y3JldiBmaWxlIGlzIHByZXNlbnQuICovCi0gICAgaWYgKF9zdGF0KCJub19zdWJ3Y3JldiIsICZzdCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKFJlZ09wZW5LZXkoSEtFWV9MT0NBTF9NQUNISU5FLCAiU29mdHdhcmVcXFRvcnRvaXNlU1ZOIiwgJmhUb3J0b2lzZSkgIT0gRVJST1JfU1VDQ0VTUyAmJgotICAgICAgICBSZWdPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCAiU29mdHdhcmVcXFRvcnRvaXNlU1ZOIiwgJmhUb3J0b2lzZSkgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgLyogVG9ydG9pc2Ugbm90IGluc3RhbGxlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBjb21tYW5kWzBdID0gJyInOyAgLyogcXVvdGUgdGhlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUgKi8KLSAgICBzaXplID0gc2l6ZW9mKGNvbW1hbmQpIC0gMTsKLSAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGhUb3J0b2lzZSwgIkRpcmVjdG9yeSIsIDAsICZ0eXBlLCBjb21tYW5kKzEsICZzaXplKSAhPSBFUlJPUl9TVUNDRVNTIHx8Ci0gICAgICAgIHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAvKiBSZWdpc3RyeSBjb3JydXB0ZWQgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0KGNvbW1hbmQsICJiaW5cXHN1YndjcmV2LmV4ZSIpOwotICAgIGlmIChfc3RhdChjb21tYW5kKzEsICZzdCkgPCAwKQotICAgICAgICAvKiBzdWJ3Y3Jldi5leGUgbm90IHBhcnQgb2YgdGhlIHJlbGVhc2UgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0KGNvbW1hbmQsICJcIiAuLlxcLi4gLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyBnZXRidWlsZGluZm8yLmMiKTsKLSAgICBwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICBpZiAoc3lzdGVtKGNvbW1hbmQpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKmFyZ3ZbXSkKLXsKLSAgICBjaGFyIGNvbW1hbmRbNTAwXSA9ICJjbC5leGUgLWMgLURfV0lOMzIgLURVU0VfRExfRVhQT1JUIC1EX1dJTkRPV1MgLURXSU4zMiAtRF9XSU5ETEwgIjsKLSAgICBpbnQgZG9fdW5saW5rLCByZXN1bHQ7Ci0gICAgaWYgKGFyZ2MgIT0gMikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1ha2VfYnVpbGRpbmZvICQoQ29uZmlndXJhdGlvbk5hbWUpXG4iKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZSIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiRGVidWciKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLURfREVCVUcgLU1EZCAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlSXRhbml1bSIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgL1VTRUNMOk1TX0lUQU5JVU0gIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUFNRDY0IikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1NRCAiKTsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgL1VTRUNMOk1TX09QVEVST04gIik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24gJXNcbiIsIGFyZ3ZbMV0pOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIGlmICgoZG9fdW5saW5rID0gbWFrZV9idWlsZGluZm8yKCkpKQotICAgICAgICBzdHJjYXQoY29tbWFuZCwgImdldGJ1aWxkaW5mbzIuYyAtRFNVQldDUkVWICIpOwotICAgIGVsc2UKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICIuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIik7Ci0gICAgc3RyY2F0KGNvbW1hbmQsICIgLUZvZ2V0YnVpbGRpbmZvLm8gLUkuLlxcLi5cXEluY2x1ZGUgLUkuLlxcLi5cXFBDIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmVzdWx0ID0gc3lzdGVtKGNvbW1hbmQpOwotICAgIGlmIChkb191bmxpbmspCi0gICAgICAgIHVubGluaygiZ2V0YnVpbGRpbmZvMi5jIik7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby52Y3Byb2ogYi9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYzhhNWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJtYWtlX2J1aWxkaW5mbyINCi0JUHJvamVjdEdVSUQ9IntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXG1ha2VfYnVpbGRpbmZvIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFIg0KLQkJCQlNaW5pbWFsUmVidWlsZD0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iNSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ii8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxtYWtlX2J1aWxkaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSI0Ig0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ij4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFrZV9idWlsZGluZm8uYyI+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL21ha2VfdmVyc2lvbmluZm8udmNwcm9qIGIvUEMvVlM3LjEvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZmE0ZWIuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Im1ha2VfdmVyc2lvbmluZm8iDQotCVJvb3ROYW1lc3BhY2U9Im1ha2VfdmVyc2lvbmluZm8iDQotCVNjY1Byb2plY3ROYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcbWFrZV92ZXJzaW9uaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIuXG1ha2VfdmVyc2lvbmluZm8uZXhlICZndDsuLlwuLlxQQ1xweXRob25udF9yYy5oDQotIg0KLQkJCQlPdXRwdXRzPSIuLlwuLlxQQ1xweXRob25udF9yYy5oIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9tYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL21ha2VfdmVyc2lvbmluZm8ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iJChUYXJnZXRGaWxlTmFtZSkgJmd0OyAuLlwuLlxQQ1xweXRob25fbnQuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xtYWtlX3ZlcnNpb25pbmZvIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iLlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsuLlwuLlxQQ1xweXRob25udF9yY19kLmgNCi0iDQotCQkJCU91dHB1dHM9Ii4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL21ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9tYWtlX3ZlcnNpb25pbmZvX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iJChUYXJnZXRGaWxlTmFtZSkgJmd0OyAuLlwuLlxQQ1xweXRob25fbnRfZC5oIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1ha2VfdmVyc2lvbmluZm8uYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3BjYnVpbGQuc2xuIGIvUEMvVlM3LjEvcGNidWlsZC5zbG4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMGYxOWMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcGNidWlsZC5zbG4KKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gOC4wMA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NvY2tldCIsICJfc29ja2V0LnZjcHJvaiIsICJ7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zc2wiLCAiX3NzbC52Y3Byb2oiLCAiezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9ID0ge0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGNhcGkiLCAiX3Rlc3RjYXBpLnZjcHJvaiIsICJ7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjcHJvaiIsICJ7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImJ6MiIsICJiejIudmNwcm9qIiwgIntBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV92ZXJzaW9uaW5mbyIsICJtYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiIsICJ7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5ZXhwYXQiLCAicHlleHBhdC52Y3Byb2oiLCAiezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob24iLCAicHl0aG9uLnZjcHJvaiIsICJ7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbmNvcmUiLCAicHl0aG9uY29yZS52Y3Byb2oiLCAie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9ID0ge0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0NCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9ID0ge0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob253IiwgInB5dGhvbncudmNwcm9qIiwgIntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic2VsZWN0IiwgInNlbGVjdC52Y3Byb2oiLCAiezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ1bmljb2RlZGF0YSIsICJ1bmljb2RlZGF0YS52Y3Byb2oiLCAie0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3OXhwb3BlbiIsICJ3OXhwb3Blbi52Y3Byb2oiLCAie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3aW5zb3VuZCIsICJ3aW5zb3VuZC52Y3Byb2oiLCAiezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfZWxlbWVudHRyZWUiLCAiX2VsZW1lbnR0cmVlLnZjcHJvaiIsICJ7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjcHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9tc2kiLCAiX21zaS52Y3Byb2oiLCAiezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzIiwgIl9jdHlwZXMudmNwcm9qIiwgIntGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlc190ZXN0IiwgIl9jdHlwZXNfdGVzdC52Y3Byb2oiLCAiezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9ID0ge0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3FsaXRlMyIsICJfc3FsaXRlMy52Y3Byb2oiLCAiezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotR2xvYmFsDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uKSA9IHByZVNvbHV0aW9uDQotCQlEZWJ1ZyA9IERlYnVnDQotCQlSZWxlYXNlID0gUmVsZWFzZQ0KLQkJUmVsZWFzZUFNRDY0ID0gUmVsZWFzZUFNRDY0DQotCQlSZWxlYXNlSXRhbml1bSA9IFJlbGVhc2VJdGFuaXVtDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbikgPSBwb3N0U29sdXRpb24NCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25JdGVtcykgPSBwb3N0U29sdXRpb24NCi0JCS4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMgPSAuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotCQlyZWFkbWUudHh0ID0gcmVhZG1lLnR4dA0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUdsb2JhbHMpID0gcG9zdFNvbHV0aW9uDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5QWRkSW5zKSA9IHBvc3RTb2x1dGlvbg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2ogYi9QQy9WUzcuMS9weWV4cGF0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA3MzlmYS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weWV4cGF0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHlleHBhdCINCi0JU2NjUHJvamVjdE5hbWU9InB5ZXhwYXQiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztIQVZFX0VYUEFUX0g7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXRfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xweWV4cGF0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24uYnVpbGQgYi9QQy9WUzcuMS9weXRob24uYnVpbGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MTEwMWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uLmJ1aWxkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdD4KLSA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVzY3JpcHRpb249IkJ1aWxkIGFsbCB0YXJnZXRzLiI+Ci0gICA8c29sdXRpb24gY29uZmlndXJhdGlvbj0icmVsZWFzZSI+Ci0gICAgIDxwcm9qZWN0cz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJtYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiIgLz4KLSAgICAgPC9wcm9qZWN0cz4KLSAgIDwvc29sdXRpb24+Ci0gICA8ZXhlYyBwcm9ncmFtPSJtYWtlX3ZlcnNpb25pbmZvIiBvdXRwdXQ9InB5dGhvbm50X3JjLmgiIC8+Ci0KLSAgIDxzb2x1dGlvbiBjb25maWd1cmF0aW9uPSJyZWxlYXNlIiBzb2x1dGlvbmZpbGU9InBjYnVpbGQuc2xuIj4KLSAgICAgPGV4Y2x1ZGVwcm9qZWN0cz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJfdGtpbnRlci52Y3Byb2oiIC8+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iYnoyLnZjcHJvaiIgLz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJfc3FsaXRlMy52Y3Byb2oiIC8+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iX3NzbC52Y3Byb2oiIC8+Ci0gICAgIDwvZXhjbHVkZXByb2plY3RzPgotICAgPC9zb2x1dGlvbj4KLSA8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbi5pc3MgYi9QQy9WUzcuMS9weXRob24uaXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTZhM2MwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbi5pc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNDEgKzAsMCBAQAotOyBTY3JpcHQgZ2VuZXJhdGVkIGJ5IHRoZSBJbm5vIFNldHVwIFNjcmlwdCBXaXphcmQuCi07IFNFRSBUSEUgRE9DVU1FTlRBVElPTiBGT1IgREVUQUlMUyBPTiBDUkVBVElORyBJTk5PIFNFVFVQIFNDUklQVCBGSUxFUyEKLQotOyBUaGlzIGlzIHRoZSB3aG9sZSBiYWxsIG9mIHdheCBmb3IgYW4gSW5ubyBpbnN0YWxsZXIgZm9yIFB5dGhvbi4KLTsgVG8gdXNlLCBkb3dubG9hZCBJbm5vIFNldHVwIGZyb20gaHR0cDovL3d3dy5qcnNvZnR3YXJlLm9yZy9pc2RsLmh0bS8sCi07IGluc3RhbGwgaXQsIGFuZCBkb3VibGUtY2xpY2sgb24gdGhpcyBmaWxlLiAgVGhhdCBsYXVuY2hlcyB0aGUgSW5ubwotOyBzY3JpcHQgY29tcGlsZXIuICBUaGUgR1VJIGlzIGV4dGVtZWx5IHNpbXBsZSwgYW5kIGhhcyBvbmx5IG9uZSBidXR0b24KLTsgeW91IG1heSBub3QgcmVjb2duaXplIGluc3RhbnRseTogIGNsaWNrIGl0LiAgWW91J3JlIGRvbmUuICBJdCBidWlsZHMKLTsgdGhlIGluc3RhbGxlciBpbnRvIFBDQnVpbGQvUHl0aG9uLTIuMmExLmV4ZS4gIFNpemUgYW5kIHNwZWVkIG9mIHRoZQotOyBpbnN0YWxsZXIgYXJlIGNvbXBldGl0aXZlIHdpdGggdGhlIFdpc2UgaW5zdGFsbGVyOyBJbm5vIHVuaW5zdGFsbAotOyBzZWVtcyBtdWNoIHF1aWNrZXIgdGhhbiBXaXNlIChidXQgYWxzbyBmZWVibGVyLCBhbmQgdGhlIHVuaW5zdGFsbAotOyBsb2cgaXMgaW4gc29tZSB1bihodW1hbilyZWFkYWJsZSBiaW5hcnkgZm9ybWF0KS4KLTsKLTsgV2hhdCdzIERvbmUKLTsgLS0tLS0tLS0tLS0KLTsgQWxsIHRoZSB1c3VhbCBXaW5kb3dzIFB5dGhvbiBmaWxlcyBhcmUgaW5zdGFsbGVkIGJ5IHRoaXMgbm93LgotOyBBbGwgdGhlIHVzdWFsIFdpbmRvd3MgUHl0aG9uIFN0YXJ0IG1lbnUgZW50cmllcyBhcmUgY3JlYXRlZCBhbmQKLTsgd29yayBmaW5lLgotOyAucHksIC5weXcsIC5weWMgYW5kIC5weW8gZXh0ZW5zaW9ucyBhcmUgcmVnaXN0ZXJlZC4KLTsgICAgIFBST0JMRU06ICBJbm5vIHVuaW5zdGFsbCBkb2VzIG5vdCByZXN0b3JlIHRoZWlyIHByZXZpb3VzIHJlZ2lzdHJ5Ci07ICAgICAgICAgICAgICAgYXNzb2NpYXRpb25zIChpZiBhbnkpLiAgV2lzZSBkaWQuICBUaGlzIHdpbGwgbWFrZSBsaWZlCi07ICAgICAgICAgICAgICAgZGlmZmljdWx0IGZvciBhbHBoYSAoZXRjKSB0ZXN0ZXJzLgotOyBUaGUgUHl0aG9uIGluc3RhbGwgaXMgZnVsbHkgZnVuY3Rpb25hbCBmb3IgInR5cGljYWwiIHVzZXMuCi07Ci07IFdoYXQncyBOb3QgRG9uZQotOyAtLS0tLS0tLS0tLS0tLS0KLTsgTm9uZSBvZiAiTWFyayBIYW1tb25kJ3MiIHJlZ2lzdHJ5IGVudHJpZXMgYXJlIHdyaXR0ZW4uCi07IE5vIGluc3RhbGxhdGlvbiBvZiBmaWxlcyBpcyBkb25lIGludG8gdGhlIHN5c3RlbSBkaXI6Ci07ICAgICBUaGUgTVMgRExMcyBhcmVuJ3QgaGFuZGxlZCBhdCBhbGwgYnkgdGhpcyB5ZXQuCi07ICAgICBQeXRob24yMi5kbGwgaXMgdW5wYWNrZWQgaW50byB0aGUgbWFpbiBQeXRob24gZGlyLgotOwotOyBJbm5vIGNhbid0IGRvIGRpZmZlcmVudCB0aGluZ3Mgb24gTlQvMjAwMCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdXNlcgotOyBoYXMgQWRtaW4gcHJpdmlsZWdlcywgc28gSSBkb24ndCBrbm93IGhvdyB0byAic29sdmUiIGVpdGhlciBvZiB0aG9zZSwKLTsgc2hvcnQgb2YgYnVpbGRpbmcgdHdvIGluc3RhbGxlcnMgKG9uZSAqcmVxdWlyaW5nKiBBZG1pbiBwcml2cywgdGhlCi07IG90aGVyIG5vdCBkb2luZyBhbnl0aGluZyB0aGF0IG5lZWRzIEFkbWluIHByaXZzKS4KLTsKLTsgSW5ubyBoYXMgbm8gY29uY2VwdCBvZiB2YXJpYWJsZXMsIHNvIGxvdHMgb2YgbGluZXMgaW4gdGhpcyBmaWxlIG5lZWQKLTsgdG8gYmUgZmlkZGxlZCBieSBoYW5kIGFjcm9zcyByZWxlYXNlcy4gIFNpbXBsZXN0IHdheSBvdXQ6ICBzdGljayB0aGlzCi07IGZpbGUgaW4gYSBnaWFudCB0cmlwbGUtcXVvdGVkIHItc3RyaW5nIChub3RlIHRoYXQgYmFja3NsYXNoZXMgYXJlCi07IHJlcXVpcmVkIGFsbCBvdmVyIHRoZSBwbGFjZSBoZXJlIC0tIGZvcndhcmQgc2xhc2hlcyBET04nVCBXT1JLIGluCi07IElubm8pLCBhbmQgdXNlICUoeWFkZGEpcyBzdHJpbmcgaW50ZXJwb2xhdGlvbiB0byBkbyBzdWJzdGl0dXRpb25zOyBpLmUuLAotOyB3cml0ZSBhIHZlcnkgc2ltcGxlIFB5dGhvbiBwcm9ncmFtIHRvICpwcm9kdWNlKiB0aGlzIHNjcmlwdC4KLQotW1NldHVwXQotQXBwTmFtZT1QeXRob24gYW5kIGNvbWJpbmVkIFdpbjMyIEV4dGVuc2lvbnMKLUFwcFZlck5hbWU9UHl0aG9uIDIuMi4yIGFuZCBjb21iaW5lZCBXaW4zMiBFeHRlbnNpb25zIDE1MAotQXBwSWQ9UHl0aG9uIDIuMi4yLjE1MAotQXBwVmVyc2lvbj0yLjIuMi4xNTAKLUFwcENvcHlyaWdodD1QeXRob24gaXMgQ29weXJpZ2h0IKkgMjAwMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gV2luMzIgRXh0ZW5zaW9ucyBhcmUgQ29weXJpZ2h0IKkgMTk5Ni0yMDAxIEdyZWcgU3RlaW4gYW5kIE1hcmsgSGFtbW9uZC4KLQotOyBEZWZhdWx0IGluc3RhbGwgZGlyOyB2YWx1ZSBvZiB7YXBwfSBsYXRlciAodW5sZXNzIHVzZXIgb3ZlcnJpZGVzKS4KLTsge3NkfSA9IHN5c3RlbSByb290IGRyaXZlLCBwcm9iYWJseSAiQzoiLgotRGVmYXVsdERpck5hbWU9e3NkfVxQeXRob24yMgotO0RlZmF1bHREaXJOYW1lPXtwZn1cUHl0aG9uCi0KLTsgU3RhcnQgbWVudSBmb2xkZXIgbmFtZTsgdmFsdWUgb2Yge2dyb3VwfSBsYXRlciAodW5sZXNzIHVzZXIgb3ZlcnJpZGVzKS4KLURlZmF1bHRHcm91cE5hbWU9UHl0aG9uIDIuMgotCi07IFBvaW50IFNvdXJjZURpciB0byBvbmUgYWJvdmUgUENCdWlsZCA9IHNyYy4KLTsgbWVhbnMgdGhpcyBzY3JpcHQgY2FuIHJ1biB1bmNoYW5nZWQgZnJvbSBhbnlvbmUncyBDVlMgdHJlZSwgbm8gbWF0dGVyCi07IHdoYXQgdGhleSBjYWxsZWQgdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcmllcy4KLVNvdXJjZURpcj0uCi1PdXRwdXREaXI9Li4KLU91dHB1dEJhc2VGaWxlbmFtZT1QeXRob24tMi4yLjItV2luMzItMTUwLVNldHVwCi0KLUFwcFB1Ymxpc2hlcj1QeXRob25MYWJzIGF0IERpZ2l0YWwgQ3JlYXRpb25zCi1BcHBQdWJsaXNoZXJVUkw9aHR0cDovL3d3dy5weXRob24ub3JnCi1BcHBTdXBwb3J0VVJMPWh0dHA6Ly93d3cucHl0aG9uLm9yZwotQXBwVXBkYXRlc1VSTD1odHRwOi8vd3d3LnB5dGhvbi5vcmcKLQotQWx3YXlzQ3JlYXRlVW5pbnN0YWxsSWNvbj10cnVlCi1DaGFuZ2VzQXNzb2NpYXRpb25zPXRydWUKLVVuaW5zdGFsbExvZ01vZGU9bmV3Ci1BbGxvd05vSWNvbnM9dHJ1ZQotQWRtaW5Qcml2aWxlZ2VzUmVxdWlyZWQ9dHJ1ZQotVW5pbnN0YWxsRGlzcGxheUljb249e2FwcH1ccHljLmljbwotV2l6YXJkRGVidWc9ZmFsc2UKLQotOyBUaGUgZmV3ZXIgc2NyZWVucyB0aGUgYmV0dGVyOyBsZWF2ZSB0aGVzZSBjb21tZW50ZWQuCi0KLUNvbXByZXNzaW9uPWJ6aXAKLUluZm9CZWZvcmVGaWxlPUxJQ0VOU0UudHh0Ci07SW5mb0JlZm9yZUZpbGU9TWlzY1xORVdTCi0KLTsgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3Ugd2FudCB5b3VyIGluc3RhbGxhdGlvbiB0byBydW4gb24gTlQgMy41MSB0b28uCi07IE1pblZlcnNpb249NCwzLjUxCi0KLVtUeXBlc10KLU5hbWU6IG5vcm1hbDsgRGVzY3JpcHRpb246IFNlbGVjdCBkZXNpcmVkIGNvbXBvbmVudHM7IEZsYWdzOiBpc2N1c3RvbQotCi1bQ29tcG9uZW50c10KLU5hbWU6IG1haW47IERlc2NyaXB0aW9uOiBQeXRob24gYW5kIFdpbjMyIEV4dGVuc2lvbnM7IFR5cGVzOiBub3JtYWwKLU5hbWU6IGRvY3M7IERlc2NyaXB0aW9uOiBQeXRob24gZG9jdW1lbnRhdGlvbiAoSFRNTCk7IFR5cGVzOiBub3JtYWwKLU5hbWU6IHRrOyBEZXNjcmlwdGlvbjogVENML1RLLCB0a2ludGVyLCBhbmQgSWRsZTsgVHlwZXM6IG5vcm1hbAotTmFtZTogdG9vbHM7IERlc2NyaXB0aW9uOiBQeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29sc1wpOyBUeXBlczogbm9ybWFsCi1OYW1lOiB0ZXN0OyBEZXNjcmlwdGlvbjogUHl0aG9uIHRlc3Qgc3VpdGUgKExpYlx0ZXN0XCk7IFR5cGVzOiBub3JtYWwKLQotW1Rhc2tzXQotTmFtZTogZXh0ZW5zaW9uczsgRGVzY3JpcHRpb246IFJlZ2lzdGVyIGZpbGUgYXNzb2NpYXRpb25zICgucHksIC5weXcsIC5weWMsIC5weW8pOyBDb21wb25lbnRzOiBtYWluOyBDaGVjazogSXNBZG1pbkxvZ2dlZE9uCi0KLVtGaWxlc10KLTsgQ2F1dGlvbjogIFVzaW5nIGZvcndhcmQgc2xhc2hlcyBpbnN0ZWFkIHNjcmV3cyB1cCBpbiBhbWF6aW5nIHdheXMuCi07IFVua25vd246ICBCeSB0aGUgdGltZSBDb21wb25lbnRzIChhbmQgb3RoZXIgYXR0cnMpIGFyZSBhZGRlZCB0byB0aGVzZSBsaW5lcywgdGhleSdyZQotOyBnb2luZyB0byBnZXQgYXdmdWxseSBsb25nLiAgQnV0IGRvbid0IHNlZSBhIHdheSB0byBjb250aW51ZSBsb2dpY2FsIGxpbmVzIGFjcm9zcwotOyBwaHlzaWNhbCBsaW5lcy4KLQotU291cmNlOiBMSUNFTlNFLnR4dDsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGUKLVNvdXJjZTogUkVBRE1FLnR4dDsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGUKLVNvdXJjZTogTmV3cy50eHQ7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlCi1Tb3VyY2U6ICouaWNvOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IHB5dGhvbi5leGU7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IHB5dGhvbncuZXhlOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiB3OXhwb3Blbi5leGU7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLQotU291cmNlOiBETExzXHRjbDgzLmRsbDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGsKLVNvdXJjZTogRExMc1x0azgzLmRsbDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGsKLVNvdXJjZTogdGNsXCouKjsgRGVzdERpcjoge2FwcH1cdGNsOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0azsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogc3lzZGlyXHB5dGhvbjIyLmRsbDsgRGVzdERpcjoge3N5c307IENvcHlNb2RlOiBhbHdheXNza2lwaWZzYW1lb3JvbGRlcjsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHNoYXJlZGZpbGUgcmVzdGFydHJlcGxhY2UKLVNvdXJjZTogc3lzZGlyXFB5V2luVHlwZXMyMi5kbGw7IERlc3REaXI6IHtzeXN9OyBDb3B5TW9kZTogYWx3YXlzc2tpcGlmc2FtZW9yb2xkZXI7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZXN0YXJ0cmVwbGFjZSBzaGFyZWRmaWxlCi1Tb3VyY2U6IHN5c2RpclxweXRob25jb20yMi5kbGw7IERlc3REaXI6IHtzeXN9OyBDb3B5TW9kZTogYWx3YXlzc2tpcGlmc2FtZW9yb2xkZXI7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZXN0YXJ0cmVwbGFjZSBzaGFyZWRmaWxlCi0KLVNvdXJjZTogRExMc1xfc29ja2V0LnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF9zb2NrZXQubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfc3JlLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF9zcmUubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfc3ltdGFibGUucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcX3N5bXRhYmxlLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3Rlc3RjYXBpLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF90ZXN0Y2FwaS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF90a2ludGVyLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGsKLVNvdXJjZTogbGlic1xfdGtpbnRlci5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi0KLVNvdXJjZTogRExMc1xtbWFwLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXG1tYXAubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xwYXJzZXIucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNccGFyc2VyLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNccHlleHBhdC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xweWV4cGF0LmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcc2VsZWN0LnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHNlbGVjdC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHVuaWNvZGVkYXRhLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHVuaWNvZGVkYXRhLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcd2lucmVnLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHdpbnJlZy5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHdpbnNvdW5kLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHdpbnNvdW5kLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcemxpYi5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x6bGliLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IGxpYnNccHl0aG9uMjIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xleHBhdC5kbGw7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotCi0KLVNvdXJjZTogTGliXCoucHk7IERlc3REaXI6IHthcHB9XExpYjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBMaWJcY29tcGlsZXJcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcY29tcGlsZXI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcZGlzdHV0aWxzXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGRpc3R1dGlsczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxlbWFpbFwqLio7IERlc3REaXI6IHthcHB9XExpYlxlbWFpbDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxlbmNvZGluZ3NcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcZW5jb2RpbmdzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGhvdHNob3RcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcaG90c2hvdDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxsaWItb2xkXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGxpYi1vbGQ7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJceG1sXCouKjsgRGVzdERpcjoge2FwcH1cTGliXHhtbDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxob3RzaG90XCouKjsgRGVzdERpcjoge2FwcH1cTGliXGhvdHNob3Q7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcdGVzdFwqLio7IERlc3REaXI6IHthcHB9XExpYlx0ZXN0OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0ZXN0OyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHRraW50ZXJcKi5weTsgRGVzdERpcjoge2FwcH1cTGliXHRraW50ZXI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1xSRUFETUUudHh0OyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXFB5V2luMzIuY2htOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogZG9jcwotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMlwqLio7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21cKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tZXh0XCouKjsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21leHQ7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IGluY2x1ZGVcKi5oOyBEZXN0RGlyOiB7YXBwfVxpbmNsdWRlOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogVG9vbHNcaWRsZVwqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXGlkbGU7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBUb29sc1xweW5jaGVcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1xweW5jaGU7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRvb2xzOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogVG9vbHNcc2NyaXB0c1wqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXFNjcmlwdHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRvb2xzOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogVG9vbHNcd2ViY2hlY2tlclwqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRvb2xzOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogVG9vbHNcdmVyc2lvbmNoZWNrXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNcdmVyc2lvbmNoZWNrOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogRG9jXCouKjsgRGVzdERpcjoge2FwcH1cRG9jOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBGbGFnczogcmVjdXJzZXN1YmRpcnM7IENvbXBvbmVudHM6IGRvY3MKLQotCi1bSWNvbnNdCi1OYW1lOiB7Z3JvdXB9XFB5dGhvbiAoY29tbWFuZCBsaW5lKTsgRmlsZW5hbWU6IHthcHB9XHB5dGhvbi5leGU7IFdvcmtpbmdEaXI6IHthcHB9OyBDb21wb25lbnRzOiBtYWluCi1OYW1lOiB7Z3JvdXB9XFB5dGhvbiBNYW51YWxzOyBGaWxlbmFtZToge2FwcH1cRG9jXGluZGV4Lmh0bWw7IFdvcmtpbmdEaXI6IHthcHB9OyBDb21wb25lbnRzOiBkb2NzCi1OYW1lOiB7Z3JvdXB9XFdpbjMyIEV4dGVuc2lvbnMgSGVscDsgRmlsZW5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXFB5V2luMzIuY2htOyBXb3JraW5nRGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlczsgQ29tcG9uZW50czogZG9jcwotTmFtZToge2dyb3VwfVxNb2R1bGUgRG9jczsgRmlsZW5hbWU6IHthcHB9XHB5dGhvbncuZXhlOyBXb3JraW5nRGlyOiB7YXBwfTsgUGFyYW1ldGVyczogIiIie2FwcH1cVG9vbHNcU2NyaXB0c1xweWRvYy5weXciIiI7IENvbXBvbmVudHM6IHRvb2xzCi1OYW1lOiB7Z3JvdXB9XElETEUgKFB5dGhvbiBHVUkpOyBGaWxlbmFtZToge2FwcH1ccHl0aG9udy5leGU7IFdvcmtpbmdEaXI6IHthcHB9OyBQYXJhbWV0ZXJzOiAiIiJ7YXBwfVxUb29sc1xpZGxlXGlkbGUucHl3IiIiOyBDb21wb25lbnRzOiB0b29scwotCi1bUmVnaXN0cnldCi07IFJlZ2lzdGVyIC5weQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHk7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IENvbnRlbnQgVHlwZTsgVmFsdWVEYXRhOiB0ZXh0L3BsYWluOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIEZpbGU7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gRmlsZVxEZWZhdWx0SWNvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IHthcHB9XFB5LmljbwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIEZpbGVcc2hlbGxcb3Blblxjb21tYW5kOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogIiIie2FwcH1ccHl0aG9uLmV4ZSIiICIiJTEiIiAlKiIKLQotOyBSZWdpc3RlciAucHljCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHljOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIENvbXBpbGVkRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBDb21waWxlZEZpbGU7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBDb21waWxlZCBQeXRob24gRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gQ29tcGlsZWRGaWxlXERlZmF1bHRJY29uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YToge2FwcH1ccHljLmljbwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIENvbXBpbGVkRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQ7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiAiIiJ7YXBwfVxweXRob24uZXhlIiIgIiIlMSIiICUqIgotCi07IFJlZ2lzdGVyIC5weW8KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weW87IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gQ29tcGlsZWRGaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotCi07IFJlZ2lzdGVyIC5weXcKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weXc7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gTm9Db25GaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5dzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogQ29udGVudCBUeXBlOyBWYWx1ZURhdGE6IHRleHQvcGxhaW47IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gTm9Db25GaWxlOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIEZpbGUgKG5vIGNvbnNvbGUpOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBOb0NvbkZpbGVcRGVmYXVsdEljb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiB7YXBwfVxQeS5pY28KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBOb0NvbkZpbGVcc2hlbGxcb3Blblxjb21tYW5kOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogIiIie2FwcH1ccHl0aG9udy5leGUiIiAiIiUxIiIgJSoiCi0KLQotOyBQeXRob24gUmVnaXN0cnkgS2V5cwotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob247IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHk7IENoZWNrOiBJc0FkbWluTG9nZ2VkT24KLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmU7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxQeXRob25QYXRoOyBWYWx1ZURhdGE6ICJ7YXBwfVxMaWI7e2FwcH1cRExMcyI7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXFB5dGhvblBhdGhcd2luMzI7IFZhbHVlRGF0YTogInthcHB9XGxpYlxzaXRlLXBhY2thZ2VzXHdpbjMyO3thcHB9XGxpYlxzaXRlLXBhY2thZ2VzXHdpbjMyXGxpYiI7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcUHl0aG9uUGF0aFx3aW4zMmNvbTsgVmFsdWVEYXRhOiBDOlxQeXRob25cbGliXHNpdGUtcGFja2FnZXM7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcTW9kdWxlczsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcTW9kdWxlc1xweXRob25jb207IFZhbHVlRGF0YToge3N5c31ccHl0aG9uY29tMjIuZGxsOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXE1vZHVsZXNccHl3aW50eXBlczsgVmFsdWVEYXRhOiB7c3lzfVxQeVdpblR5cGVzMjIuZGxsOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEluc3RhbGxQYXRoOyBWYWx1ZURhdGE6IHthcHB9OyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5OyBWYWx1ZVR5cGU6IHN0cmluZwotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSW5zdGFsbFBhdGhcSW5zdGFsbEdyb3VwOyBWYWx1ZURhdGE6IHtncm91cH07IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSGVscDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSGVscFxNYWluIFB5dGhvbiBEb2N1bWVudGF0aW9uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVEYXRhOiB7YXBwfVxEb2NcaW5kZXguaHRtbDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5OyBDb21wb25lbnRzOiBkb2NzCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxIZWxwXFB5dGhvbiBXaW4zMiBEb2N1bWVudGF0aW9uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVEYXRhOiB7YXBwfVxsaWJcc2l0ZS1wYWNrYWdlc1xQeVdpbjMyLmNobTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5OyBDb21wb25lbnRzOiBkb2NzCi0KLVtfSVNUb29sXQotRW5hYmxlSVNYPXRydWUKLQotCi1bQ29kZV0KLVByb2dyYW0gU2V0dXA7Ci0KLUZ1bmN0aW9uIElzQWRtaW5Ob3RMb2dnZWRPbigpOiBCb29sZWFuOwotYmVnaW4KLSAgUmVzdWx0IDo9IE5vdCBJc0FkbWluTG9nZ2VkT24oKTsKLWVuZDsKLQotYmVnaW4KLWVuZC4KLQotCi0KLQotW1VuaW5zdGFsbERlbGV0ZV0KLU5hbWU6IHthcHB9XExpYlxjb21waWxlclwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxjb21waWxlclwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxjb21waWxlcjsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1xjb21tYW5kXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1xjb21tYW5kXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1xjb21tYW5kOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHM7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxlbWFpbFx0ZXN0XCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsXHRlc3RcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW1haWxcdGVzdDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGVtYWlsXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZW5jb2RpbmdzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVuY29kaW5nc1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbmNvZGluZ3M7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxob3RzaG90XCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGhvdHNob3RcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcaG90c2hvdDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGxpYi1vbGRcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcbGliLW9sZFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxsaWItb2xkOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcdGtpbnRlclwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0a2ludGVyXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRraW50ZXI7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx0ZXN0XCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRlc3RcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGVzdDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFxkb21cKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXGRvbVwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcZG9tOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXHBhcnNlcnNcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXHBhcnNlcnNcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXHBhcnNlcnM7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxcc2F4XCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxzYXhcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXHNheDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyOyBUeXBlOiBmaWxlc2FuZG9yZGlycwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb207IFR5cGU6IGZpbGVzYW5kb3JkaXJzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbWV4dDsgVHlwZTogZmlsZXNhbmRvcmRpcnMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHB5dGhvbmNvbS5weSo7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlczsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxMaWJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWI7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNccHluY2hlXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNccHluY2hlXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNccHluY2hlOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXGlkbGVcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xpZGxlXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcaWRsZTsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1xzY3JpcHRzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcc2NyaXB0c1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHNjcmlwdHM7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcdmVyc2lvbmNoZWNrXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcdmVyc2lvbmNoZWNrXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcdmVyc2lvbmNoZWNrOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcd2ViY2hlY2tlcjsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sczsgVHlwZTogZGlyaWZlbXB0eQotCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24udmNwcm9qIGIvUEMvVlM3LjEvcHl0aG9uLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiNDQwMS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJweXRob24iDQotCVNjY1Byb2plY3ROYW1lPSJweXRob24iDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob25fZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob25fZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIC9WU0VYVENPTVBfVkVSQk9TRSINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9uLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5Y29uLmljbyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xweXRob24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbjIwLndzZSBiL1BDL1ZTNy4xL3B5dGhvbjIwLndzZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3ZjZhZDMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uMjAud3NlCisrKyAvZGV2L251bGwKQEAgLTEsMzExNyArMCwwIEBACi1Eb2N1bWVudCBUeXBlOiBXU0UKLWl0ZW06IEdsb2JhbAotICBWZXJzaW9uPTkuMAotICBUaXRsZT1QeXRob24gMi40YTEKLSAgRmxhZ3M9MDAwMTAxMDAKLSAgTGFuZ3VhZ2VzPTY1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCi0gIEphcGFuZXNlIEZvbnQgTmFtZT1NUyBHb3RoaWMKLSAgSmFwYW5lc2UgRm9udCBTaXplPTEwCi0gIFN0YXJ0IEdyYWRpZW50PTAgMjU1IDAKLSAgRW5kIEdyYWRpZW50PTAgMTI4IDAKLSAgV2luZG93cyBGbGFncz0wMDAwMDEwMDAwMDAxMTAxMDAxMDAxMDEwMDAwMTAxMAotICBMb2cgUGF0aG5hbWU9JU1BSU5ESVIlXElOU1RBTEwuTE9HCi0gIE1lc3NhZ2UgRm9udD1NUyBTYW5zIFNlcmlmCi0gIEZvbnQgU2l6ZT04Ci0gIFBhZ2VzIE1vZGlmaWVkPTAwMDEwMDAwMDExMTAxMDAwMDAwMDAwMTAwMDAwMTExCi0gIEV4dHJhIFBhZ2VzPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTEwMDEwCi0gIERpc2sgRmlsZW5hbWU9U0VUVVAKLSAgUGF0Y2ggRmxhZ3M9MDAwMDAwMDAwMDAwMTAwMQotICBQYXRjaCBUaHJlc2hvbGQ9ODUKLSAgUGF0Y2ggTWVtb3J5PTQwMDAKLSAgTUlGIFBERiBWZXJzaW9uPTEuMAotICBNSUYgU01TIFZlcnNpb249Mi4wCi0gIEVYRSBGaWxlbmFtZT1QeXRob24tMi40YTEuZXhlCi0gIERpYWxvZ3MgVmVyc2lvbj04Ci0gIFZlcnNpb24gRmlsZT0yLjRhMQotICBWZXJzaW9uIERlc2NyaXB0aW9uPVB5dGhvbiBQcm9ncmFtbWluZyBMYW5ndWFnZQotICBWZXJzaW9uIENvcHlyaWdodD2pMjAwMS0yMDA3IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gIFZlcnNpb24gQ29tcGFueT1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgotICBDcnlzdGFsIEZvcm1hdD0xMDExMTEwMDEwMTEwMDAwMDAxMDAwMTAwMTAwMTAwMQotICBTdGVwIFZpZXc9JkFsbAotICBWYXJpYWJsZSBOYW1lMT1fV0lTRV8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24xPVdJU0Ugcm9vdCBkaXJlY3RvcnkKLSAgVmFyaWFibGUgRGVmYXVsdDE9QzpcUHJvZ3JhbW1lXFdpc2UgSW5zdGFsbGF0aW9uIFN5c3RlbQotICBWYXJpYWJsZSBGbGFnczE9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTI9X1RDTERJUl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24yPVRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIFRjbC9UayBpbnN0YWxsYXRpb24KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24yPWxpdmVzLiAgVGhpcyBtdXN0IGJlIGEgc2libGluZyBvZiB0aGUgUHl0aG9uCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMj1kaXJlY3RvcnkuCi0gIFZhcmlhYmxlIERlZmF1bHQyPXRjbDg0Ci0gIFZhcmlhYmxlIEZsYWdzMj0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lMz1fRE9DXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjM9VGhlIHVucGFja2VkIEhUTUwgZG9jIGRpcmVjdG9yeS4KLSAgVmFyaWFibGUgRGVmYXVsdDM9Li5caHRtbAotICBWYXJpYWJsZSBGbGFnczM9MDAwMDEwMDEKLSAgVmFyaWFibGUgTmFtZTQ9X1NZU18KLSAgVmFyaWFibGUgRGVzY3JpcHRpb240PVN5c3RlbSBkaXJlY3RvcnkgKHdoZXJlIHRvIGZpbmQgTVNWQ1JULkRMTCkKLSAgVmFyaWFibGUgRGVmYXVsdDQ9QzpcV2luZG93c1xTeXN0ZW0KLSAgVmFyaWFibGUgVmFsdWVzND1DOlxXaW5kb3dzXFN5c3RlbQotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XFdJTk5UXFN5c3RlbTMyCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcQ29kZVxNU0RMTHMKLSAgVmFyaWFibGUgVmFsdWVzND1DOlxXaW5kb3dzXFN5c3RlbTMyCi0gIFZhcmlhYmxlIEZsYWdzND0wMDAwMDAxMAotICBWYXJpYWJsZSBOYW1lNT1fUFlNQUpPUl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb241PVB5dGhvbiBtYWpvciB2ZXJzaW9uIG51bWJlcjsgdGhlIDIgaW4gMi4zLgotICBWYXJpYWJsZSBEZWZhdWx0NT0yCi0gIFZhcmlhYmxlIEZsYWdzNT0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lNj1fUFlNSU5PUl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb242PVB5dGhvbiBtaW5vciB2ZXJzaW9uIG51bWJlcjsgdGhlIDMgaW4gMi4zCi0gIFZhcmlhYmxlIERlZmF1bHQ2PTMKLSAgVmFyaWFibGUgRmxhZ3M2PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWU3PV9ET0FETUlOXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9VGhlIGluaXRpYWwgdmFsdWUgZm9yICVET0FETUlOJS4KLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PVdoZW4gMCwgd2UgbmV2ZXIgdHJ5IHRvIHdyaXRlIHVuZGVyIEhLTE0sCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz1hbmQgaW5zdGFsbCB0aGUgUHl0aG9uICsgTVMgcnVudGltZSBETExzIGluCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz10aGUgUHl0aG9uIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0gZGlyLgotICBWYXJpYWJsZSBEZWZhdWx0Nz0xCi0gIFZhcmlhYmxlIFZhbHVlczc9MQotICBWYXJpYWJsZSBWYWx1ZXM3PTAKLSAgVmFyaWFibGUgRmxhZ3M3PTAwMDAxMDEwCi0gIFZhcmlhYmxlIE5hbWU4PV9BTElBU05BTUVfCi0gIFZhcmlhYmxlIEZsYWdzOD0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lOT1fQUxJQVNQQVRIXwotICBWYXJpYWJsZSBGbGFnczk9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTEwPV9BTElBU1RZUEVfCi0gIFZhcmlhYmxlIEZsYWdzMTA9MDAwMDEwMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVBZVkVSX1NUUklORwotICBWYWx1ZT0yLjMKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdoZW4gdGhlIHZlcnNpb24gbnVtYmVyIGNoYW5nZXMsIHNldCB0aGUgY29tcGlsZXIKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9dnJibHMgX1BZTUFKT1JfIGFuZCAgX1BZTUlOT1JfLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RoaW5nIGluIHRoZSBzY3JpcHQgYmVsb3cgc2hvdWxkIG5lZWQgZmlkZGxpbmcgdGhlbi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9T3RoZXIgdGhpbmdzIHRoYXQgbmVlZCBmaWRkbGluZzoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgIFBZVkVSX1NUUklORyBhYm92ZS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgIFRoZSAiVGl0bGU6IiBpbiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIEdVSS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgIEJ1aWxkIFNldHRpbmdzIGFuZCBWZXJzaW9uIFJlc291cmNlIG9uIHN0ZXAgNiAoRmluaXNoKSBvZiB0aGUgSW5zdGFsbGF0aW9uIEV4cGVydAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgICAgIEJlIHN1cmUgdG8gc2VsZWN0IFN0ZXBzLT5BbGwgb3IgeW91IG1heSBub3Qgc2VlIHRoZXNlIQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V2hlbiB0aGUgdmVyc2lvbiBvZiBUY2wvVGsgY2hhbmdlcywgdGhlIGNvbXBpbGVyIHZyYmwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9X1RDTERJUl8gbWF5IGFsc28gbmVlZCB0byBiZSBjaGFuZ2VkLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUFQUFRJVExFCi0gIFZhbHVlPVB5dGhvbiAlUFlWRVJfU1RSSU5HJQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1QWV9WRVJTSU9OIHNob3VsZCBiZSBtYWpvci5taW5vciBvbmx5OyB1c2VkIHRvIGNyZWF0ZSB0aGUgcmVnaXN0cnkga2V5OyBtdXN0IG1hdGNoIE1TX0RMTF9JRCBpbiBweXRob25fbnQucmMKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVBZX1ZFUlNJT04KLSAgVmFsdWU9JV9QWU1BSk9SXyUuJV9QWU1JTk9SXyUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9R1JPVVAgaXMgdGhlIFN0YXJ0IG1lbnUgZ3JvdXAgbmFtZTsgdXNlciBjYW4gb3ZlcnJpZGUuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1HUk9VUAotICBWYWx1ZT1QeXRob24gJVBZX1ZFUlNJT04lCi0gIEZsYWdzPTEwMDAwMDAwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU1BSU5ESVIgaXMgdGhlIGFwcCBkaXJlY3Rvcnk7IHVzZXIgY2FuIG92ZXJyaWRlLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9TUFJTkRJUgotICBWYWx1ZT1QeXRob24lX1BZTUFKT1JfJSVfUFlNSU5PUl8lCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0lX0RPQURNSU5fJQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1HaXZlIG5vbi1hZG1pbiB1c2VycyBhIGNoYW5jZSB0byBhYm9ydC4KLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMDAxMTExMQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IERpc3BsYXkgTWVzc2FnZQotICBUaXRsZT1Eb2luZyBub24tYWRtaW4gaW5zdGFsbAotICBUZXh0PVRoZSBjdXJyZW50IGxvZ2luIGRvZXMgbm90IGhhdmUgQWRtaW5pc3RyYXRvciBQcml2aWxlZ2VzIG9uIHRoaXMgbWFjaGluZS4gIFB5dGhvbiB3aWxsIGluc3RhbGwgaXRzIHJlZ2lzdHJ5IGluZm9ybWF0aW9uIGludG8gdGhlIHBlci11c2VyIGFyZWEgb25seSBmb3IgdGhlIGN1cnJlbnQgbG9naW4sIGluc3RlYWQgb2YgaW50byB0aGUgcGVyLW1hY2hpbmUgYXJlYSBmb3IgZXZlcnkgYWNjb3VudCBvbiB0aGlzIG1hY2hpbmUuICBTb21lIGFkdmFuY2VkIHVzZXMgb2YgUHl0aG9uIG1heSBub3Qgd29yayBhcyBhIHJlc3VsdCAoZm9yIGV4YW1wbGUsIHJ1bm5pbmcgYSBQeXRob24gc2NyaXB0IGFzIGEgc2VydmljZSkuCi0gIFRleHQ9Ci0gIFRleHQ9SWYgdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCwgcGxlYXNlIGNsaWNrIENhbmNlbCB0byBhYm9ydCB0aGlzIGluc3RhbGxhdGlvbiwgbG9nIG9uIGFzIGFuIEFkbWluaXN0cmF0b3IsIGFuZCBzdGFydCB0aGUgaW5zdGFsbGF0aW9uIGFnYWluLgotICBGbGFncz0wMDAwMTAwMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJFR0lOIFdJWkFSRCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiB0aGUgInN0b3AiIG9uIHRoZSBuZXh0IGxpbmUgaXMgYWN0dWFsbHkgInBhdXNlIi4KLWVuZAotaXRlbTogT3Blbi9DbG9zZSBJTlNUQUxMLkxPRwotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JZiB0aGUgZGVzdGluYXRpb24gc3lzdGVtIGRvZXMgbm90IGhhdmUgYSB3cml0YWJsZSBXaW5kb3dzXFN5c3RlbSBkaXJlY3RvcnksIHN5c3RlbSBmaWxlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIFdpbmRvd3NcIGRpcmVjdG9yeQotZW5kCi1pdGVtOiBDaGVjayBpZiBGaWxlL0RpciBFeGlzdHMKLSAgUGF0aG5hbWU9JVNZUyUKLSAgRmxhZ3M9MTAwMDAxMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNZUwotICBWYWx1ZT0lV0lOJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMDExMTAxMQotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNPTU1PTgotICBLZXk9U09GVFdBUkVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb24KLSAgRGVmYXVsdD1DOlxQcm9ncmFtIEZpbGVzXENvbW1vbiBGaWxlcwotICBWYWx1ZSBOYW1lPUNvbW1vbkZpbGVzRGlyCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9UFJPR1JBTV9GSUxFUwotICBLZXk9U09GVFdBUkVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb24KLSAgRGVmYXVsdD1DOlxQcm9ncmFtIEZpbGVzCi0gIFZhbHVlIE5hbWU9UHJvZ3JhbUZpbGVzRGlyCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1FWFBMT1JFUgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiAgVGhlIFdpemFyZCBoYXJkY29kICJDOiIgYXQgdGhlIHN0YXJ0IG9mIHRoZSByZXBsYWNlbWVudCB0ZXh0IGZvciBNQUlORElSLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGF0J3Mgbm90IGFwcHJvcHJpYXRlIGlmIHRoZSBzeXN0ZW0gZHJpdmUgZG9lc24ndCBoYXBwZW4gdG8gYmUgQzouCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUkgcmVtb3ZlZCB0aGUgIkM6IiwgYW5kIHRoYXQgZGlkIHRoZSByaWdodCB0aGluZyBmb3IgdHdvIHBlb3BsZSB3aG8gdGVzdGVkIGl0IG9uIG5vbi1DOiBtYWNoaW5lcywKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9YnV0IGl0J3MgdW5jbGVhciB3aGV0aGVyIGl0IHdpbGwgYWx3YXlzIGRvIHRoZSByaWdodCB0aGluZy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPU1BSU5ESVIKLSAgVmFsdWU9XCVNQUlORElSJQotICBGbGFncz0wMDAwMTEwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CQUNLVVAgaXMgdGhlIHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIHBhdGggdGhhdCBhbGwgYmFja3VwIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvIHdoZW4gb3ZlcndyaXR0ZW4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJBQ0tVUAotICBWYWx1ZT0lTUFJTkRJUiVcQkFDS1VQCi0gIEZsYWdzPTEwMDAwMDAwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PURPQkFDS1VQIGRldGVybWluZXMgaWYgYSBiYWNrdXAgd2lsbCBiZSBwZXJmb3JtZWQuICBUaGUgcG9zc2libGUgdmFsdWVzIGFyZSBBIChkbyBiYWNrdXApIG9yIEIgKGRvIG5vdCBkbyBiYWNrdXApCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0JBQ0tVUAotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJSQU5ESU5HIGRldGVybWluZXMgaWYgdGhlIGluc3RhbGxhdGlvbiB3aWxsIGJlIGJyYW5kZWQgd2l0aCBhIG5hbWUgYW5kIGNvbXBhbnkuICBCeSBkZWZhdWx0LCB0aGlzIGlzIHdyaXR0ZW4gdG8gdGhlIElOU1QgZGlyZWN0b3J5IChpbnN0YWxsYXRpb24gbWVkaWEpLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QlJBTkRJTkcKLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9QlJBTkRJTkcKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBSZWFkIElOSSBWYWx1ZQotICBWYXJpYWJsZT1OQU1FCi0gIFBhdGhuYW1lPSVJTlNUJVxDVVNUREFUQS5JTkkKLSAgU2VjdGlvbj1SZWdpc3RyYXRpb24KLSAgSXRlbT1OYW1lCi1lbmQKLWl0ZW06IFJlYWQgSU5JIFZhbHVlCi0gIFZhcmlhYmxlPUNPTVBBTlkKLSAgUGF0aG5hbWU9JUlOU1QlXENVU1REQVRBLklOSQotICBTZWN0aW9uPVJlZ2lzdHJhdGlvbgotICBJdGVtPUNvbXBhbnkKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPU5BTUUKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQlJBTkQKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBHZXQgU3lzdGVtIEluZm9ybWF0aW9uCi0gIFZhcmlhYmxlPU5BTUUKLSAgRmxhZ3M9MDAwMDAxMTAKLWVuZAotaXRlbTogR2V0IFN5c3RlbSBJbmZvcm1hdGlvbgotICBWYXJpYWJsZT1DT01QQU5ZCi0gIEZsYWdzPTAwMDAwMTExCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RU5EIFdJWkFSRCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9U2V0IHZyYmxzIGZvciB0aGUgIkFkdmFuY2VkIE9wdGlvbnMiIHN1YmRpYWxvZyBvZiBDb21wb25lbnRzLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gIFZhbHVlPUIKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UQVNLUyB2YWx1ZXM6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUE6IFJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1COiBDcmVhdGUgU3RhcnQgTWVudSBzaG9ydGN1dHMKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUFCCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DT01QT05FTlRTIHZhbHVlczoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QTogaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1COiBUY2wvVGsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QzogZG9jcwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1EOiB0b29scwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FOiB0ZXN0IHN1aXRlCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUFCQ0RFCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NYXJjaCB0aHJ1IHRoZSB1c2VyIEdVSS4KLWVuZAotaXRlbTogV2l6YXJkIEJsb2NrCi0gIERpcmVjdGlvbiBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIEJpdG1hcCBQYXRobmFtZT0uXGluc3RhbGxlci5ibXAKLSAgWCBQb3NpdGlvbj05Ci0gIFkgUG9zaXRpb249MTAKLSAgRmlsbGVyIENvbG9yPTExMTczNzU5Ci0gIERpYWxvZz1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gIERpYWxvZz1CYWNrdXAgUmVwbGFjZWQgRmlsZXMKLSAgRGlhbG9nPVNlbGVjdCBDb21wb25lbnRzCi0gIERpYWxvZz1TZWxlY3QgUHJvZ3JhbSBNYW5hZ2VyIEdyb3VwCi0gIFZhcmlhYmxlPQotICBWYXJpYWJsZT0KLSAgVmFyaWFibGU9Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPQotICBWYWx1ZT0KLSAgVmFsdWU9Ci0gIFZhbHVlPUIKLSAgQ29tcGFyZT0wCi0gIENvbXBhcmU9MAotICBDb21wYXJlPTAKLSAgQ29tcGFyZT0zCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ESVNQTEFZCi0gIFZhbHVlPVN0YXJ0IEluc3RhbGxhdGlvbgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT1JbnN0YWxsIGRpcmVjdG9yeTogICVNQUlORElSJSVDUkxGJQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvaW5nIGFkbWluIGluc3RhbGwuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvaW5nIG5vbi1hZG1pbiBpbnN0YWxsLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JBQ0tVUAotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJU1ha2UgYmFja3VwcywgaW50byAlQkFDS1VQJSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb24ndCBtYWtlIGJhY2t1cHMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlQ29tcG9uZW50czolQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgUHl0aG9uIGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFRjbC9UayAoVGtpbnRlciwgSURMRSwgcHlkb2MpJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBQeXRob24gZG9jdW1lbnRhdGlvbiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgVG9vbCBhbmQgdXRpbGl0eSBzY3JpcHRzJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1FCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBQeXRob24gdGVzdCBzdWl0ZSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJVJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9uJ3QgcmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJVN0YXJ0IE1lbnUgZ3JvdXA6ICAlR1JPVVAlJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJU5vIFN0YXJ0IE1lbnUgc2hvcnRjdXRzLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMSAzMjMgMzMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICAgICAgVGV4dCBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlIHLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24KLSAgICAgIFRleHQgR2VybWFuPVppZWx2ZXJ6ZWljaG5pcyB35GhsZW4KLSAgICAgIFRleHQgU3BhbmlzaD1TZWxlY2Npb25lIGVsIGRpcmVjdG9yaW8gZGUgZGVzdGlubwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIERpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUKLSAgICBlbmQKLSAgICBpdGVtOiBMaXN0Ym94Ci0gICAgICBSZWN0YW5nbGU9MTA4IDU4IDMyMSAyMTkKLSAgICAgIFZhcmlhYmxlPU1BSU5ESVIKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAxMDAwMDAwMDEwMTAwMDAwMQotICAgICAgRmxhZ3M9MDAwMDExMDAwMDAwMTAxMAotICAgICAgVGV4dD0lTUFJTkRJUiUKLSAgICAgIFRleHQ9Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQwIDMxMyA1OAotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PVBsZWFzZSBzZWxlY3QgYSBkaXJlY3RvcnkgZm9yIHRoZSAlQVBQVElUTEUlIGZpbGVzLgotICAgIGVuZAotICBlbmQKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICAgIFRpdGxlIEZyZW5jaD1T6WxlY3Rpb25uZXIgbGUgculwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbgotICAgIFRpdGxlIEdlcm1hbj1aaWVsdmVyemVpY2huaXMgd+RobGVuCi0gICAgVGl0bGUgU3BhbmlzaD1TZWxlY2Npb25lIGVsIGRpcmVjdG9yaW8gZGUgZGVzdGlubwotICAgIFRpdGxlIEl0YWxpYW49U2VsZXppb25hcmUgRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZQotICAgIFdpZHRoPTI3NgotICAgIEhlaWdodD0yMTYKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogTGlzdGJveAotICAgICAgUmVjdGFuZ2xlPTYgNiAyMDQgMTg2Ci0gICAgICBWYXJpYWJsZT1NQUlORElSCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMTAwMDAwMDAxMDEwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAxMTAwMDAxMDAwMTAKLSAgICAgIFRleHQ9JU1BSU5ESVIlCi0gICAgICBUZXh0IEZyZW5jaD0lTUFJTkRJUiUKLSAgICAgIFRleHQgR2VybWFuPSVNQUlORElSJQotICAgICAgVGV4dCBTcGFuaXNoPSVNQUlORElSJQotICAgICAgVGV4dCBJdGFsaWFuPSVNQUlORElSJQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjA5IDggMjY1IDI2Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9T0sKLSAgICAgIFRleHQgRnJlbmNoPU9LCi0gICAgICBUZXh0IEdlcm1hbj1PSwotICAgICAgVGV4dCBTcGFuaXNoPUFjZXB0YXIKLSAgICAgIFRleHQgSXRhbGlhbj1PSwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjA5IDMxIDI2NSA1MAotICAgICAgVmFyaWFibGU9TUFJTkRJUgotICAgICAgVmFsdWU9JU1BSU5ESVJfU0FWRSUKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1DYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPUFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPUFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPUNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49QW5udWxsYQotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1CYWNrdXAgUmVwbGFjZWQgRmlsZXMKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUZpY2hpZXJzIGRlIFNhdXZlZ2FyZGUgUmVtcGxhY+lzCi0gICAgVGl0bGUgR2VybWFuPVNpY2hlcnVuZ3Nrb3BpZSB2b24gZXJzZXR6dGVuIERhdGVpZW4gZXJzdGVsbGVuCi0gICAgVGl0bGUgUG9ydHVndWVzZT1GaWNoZWlyb3Mgc3Vic3RpdHXtZG9zIGRlIHNlZ3VyYW7nYQotICAgIFRpdGxlIFNwYW5pc2g9Q29waWFzIGRlIHNlZ3VyaWRhZCBkZSBsb3MgYXJjaGl2b3MgcmVlbXBsYXphZG9zCi0gICAgVGl0bGUgSXRhbGlhbj1CYWNrdXAgZmlsZSBzb3N0aXR1aXRpCi0gICAgVGl0bGUgRGFuaXNoPVNpa2tlcmhlZHNrb3BpZXJpbmcgYWYgZXJzdGF0dGVkZSBmaWxlcgotICAgIFRpdGxlIER1dGNoPVZlcnZhbmdlbiBiZXN0YW5kZW4ga29waetyZW4KLSAgICBUaXRsZSBOb3J3ZWdpYW49U2lra2VyaGV0c2tvcGllcmUgZXJzdGF0dGVkZSBmaWxlcgotICAgIFRpdGxlIFN3ZWRpc2g9U+RrZXJoZXRza29waWVyYSB1dGJ5dHRhIGZpbGVyCi0gICAgV2lkdGg9MzUwCi0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MQotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXZhbnQ+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyPgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPSZQcvN4aW1vPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgICAgVGV4dCBEYW5pc2g9Jk7mc3RlPgotICAgICAgVGV4dCBEdXRjaD0mVm9sZ2VuZGU+Ci0gICAgICBUZXh0IE5vcndlZ2lhbj0mTmVzdGU+Ci0gICAgICBUZXh0IFN3ZWRpc2g9Jk7kc3RhID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MQotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwmWnVy/GNrCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9PCZSZXRvcm5hcgotICAgICAgVGV4dCBTcGFuaXNoPTwmUmV0cm9jZWRlcgotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgICBUZXh0IERhbmlzaD08JlRpbGJhZ2UKLSAgICAgIFRleHQgRHV0Y2g9PCZUZXJ1ZwotICAgICAgVGV4dCBOb3J3ZWdpYW49PCZUaWxiYWtlCi0gICAgICBUZXh0IFN3ZWRpc2g9PCAmVGlsbGJha2EKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI3OCAyMzQgMzMwIDI1MQotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1DYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPUFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPUFiYnJlY2hlbgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPUNhbmNlbGFyCi0gICAgICBUZXh0IFNwYW5pc2g9Q2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj1Bbm51bGxhCi0gICAgICBUZXh0IERhbmlzaD1Bbm51bGxlcgotICAgICAgVGV4dCBEdXRjaD1Bbm51bGVyZW4KLSAgICAgIFRleHQgTm9yd2VnaWFuPUF2YnJ5dAotICAgICAgVGV4dCBTd2VkaXNoPUF2YnJ5dAotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTExIDIyMSAzMjkgMjIzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQ2IDMyMCA5OAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PVRoaXMgaW5zdGFsbGF0aW9uIHByb2dyYW0gY2FuIGNyZWF0ZSBiYWNrdXAgY29waWVzIG9mIGFsbCBmaWxlcyByZXBsYWNlZCBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbi4gVGhlc2UgZmlsZXMgd2lsbCBiZSB1c2VkIHdoZW4gdGhlIHNvZnR3YXJlIGlzIHVuaW5zdGFsbGVkIGFuZCBhIHJvbGxiYWNrIGlzIHJlcXVlc3RlZC4gIElmIGJhY2t1cCBjb3BpZXMgYXJlIG5vdCBjcmVhdGVkLCB5b3Ugd2lsbCBvbmx5IGJlIGFibGUgdG8gdW5pbnN0YWxsIHRoZSBzb2Z0d2FyZSBhbmQgbm90IHJvbGwgdGhlIHN5c3RlbSBiYWNrIHRvIGEgcHJldmlvdXMgc3RhdGUuCi0gICAgICBUZXh0PQotICAgICAgVGV4dD1EbyB5b3Ugd2FudCB0byBjcmVhdGUgYmFja3VwcyBvZiByZXBsYWNlZCBmaWxlcz8KLSAgICAgIFRleHQgRnJlbmNoPUxlIHByb2dyYW1tZSBkJ2luc3RhbGxhdGlvbiBwZXV0IGNy6WVyIGRlcyBjb3BpZXMgZGUgc2F1dmVnYXJkZSBkZSB0b3VzIGxlcyBmaWNoaWVycyByZW1wbGFj6XMgcGVuZGFudCBsJ2luc3RhbGxhdGlvbi4gQ2VzIGZpY2hpZXJzIHNvbnQgdXRpbGlz6XMgYXUgY2FzIG/5IGxlIGxvZ2ljaWVsIGVzdCBk6XNpbnN0YWxs6SBldCBxdWUgbCdvbiBwcm9j6GRlIOAgbGEgcmVwcmlzZSBkdSBzeXN06G1lLiBTaSBsZXMgY29waWVzIGRlIHNhdXZlZ2FyZGUgbmUgc29udCBwYXMgY3Lp6WVzLCBvbiBuZSBwb3VycmEgcXVlIGTpc2luc3RhbGxlciBsZSBsb2dpY2llbCBzYW5zIHJlcHJlbmRyZSBsZSBzeXN06G1lIOAgdW4g6XRhdCBwculj6WRlbnQuIFZvdWxlei12b3VzIGNy6WVyIHVuZSBzYXV2ZWdhcmRlIGRlcyBmaWNoaWVycyByZW1wbGFj6XMgPwotICAgICAgVGV4dCBHZXJtYW49RGllc2VzIEluc3RhbGxhdGlvbnNwcm9ncmFtbSBrYW5uIFNpY2hlcnVuZ3Nrb3BpZW4gdm9uIGFsbGVuIHfkaHJlbmQgZGVyIEluc3RhbGxhdGlvbiBlcnNldHp0ZW4gRGF0ZWllbiBlcnN0ZWxsZW4uIERpZXNlIERhdGVpZW4gd2VyZGVuIHp1ciBS/GNrZ+RuZ2lnbWFjaHVuZyBkZXIgSW5zdGFsbGF0aW9uIHVuZCBiZWkgQW5mb3JkZXJ1bmcgZWluZXMgUm9sbGJhY2tzIHZlcndlbmRldC4gT2huZSBTaWNoZXJ1bmdza29waWVuIGlzdCBudXIgZWluZSBS/GNrZ+RuZ2lnbWFjaHVuZyBkZXIgSW5zdGFsbGF0aW9uIG32Z2xpY2gsIG5pY2h0IGFiZXIgZWluIFJvbGxiYWNrIGRlcyBTeXN0ZW1zLiBTaWNoZXJ1bmdza29waWVuIGRlciBlcnNldHp0ZW4gRGF0ZWllbiBlcnN0ZWxsZW4/Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9RXN0ZSBwcm9ncmFtYSBkZSBpbnN0YWxh5+NvIHBvZGUgY3JpYXIgY/NwaWFzIGRlIHNlZ3VyYW7nYSBkZSB0b2RvcyBvcyBmaWNoZWlyb3Mgc3Vic3RpdHXtZG9zIGR1cmFudGUgYSBpbnN0YWxh5+NvLiBFc3RlcyBmaWNoZWlyb3Mgc2Vy428gdXRpbGl6YWRvcyBxdWFuZG8gbyBwcm9ncmFtYSBmb3IgZGVzaW5zdGFsYWRvICBlIGZvciByZXF1aXNpdGFkYSB1bWEgcmV0b21hZGEuIFNlIGFzIGPzcGlhcyBkZSBzZWd1cmFu52EgbuNvIGZvcmVtIGNyaWFkYXMsIHPzIHBvZGVy4SBkZXNpbnN0YWxhciBvIHByb2dyYW1hIGUgbuNvIHBvZGUgcmV0b21hciAgdW0gZXN0YWRvIGFudGVyaW9yIGRvIHNpc3RlbWEuIERlc2VqYSBjcmlhciBj83BpYXMgZGUgc2VndXJhbudhIGRvcyBmaWNoZWlyb3Mgc3Vic3RpdHXtZG9zPwotICAgICAgVGV4dCBTcGFuaXNoPUVzdGUgcHJvZ3JhbWEgZGUgaW5zdGFsYWNp824gcHVlZGUgY3JlYXIgY29waWFzIGRlIHNlZ3VyaWRhZCBkZSB0b2RvcyBsb3MgYXJjaGl2b3MgcmVlbXBsYXphZG9zIGR1cmFudGUgbGEgaW5zdGFsYWNp824uIEVzdG9zIGFyY2hpdm9zIHNlIHV0aWxpemFy4W4gY3VhbmRvIHNlIGRlc2luc3RhbGUgZWwgc29mdHdhcmUgeSBzZSBzb2xpY2l0ZSB2b2x2ZXIgYWwgZXN0YWRvIGFudGVyaW9yLiBTaSBubyBzZSBjcmVhbiBjb3BpYXMgZGUgc2VndXJpZGFkLCD6bmljYW1lbnRlIHBvZHLhIGRlc2luc3RhbGFyIGVsIHNvZnR3YXJlIHkgbm8gcG9kcuEgZGV2b2x2ZXIgZWwgc2lzdGVtYSBhbCBlc3RhZG8gYW50ZXJpb3IuIL9EZXNlYSBjcmVhciBhcmNoaXZvcyBkZSBzZWd1cmlkYWQgZGUgbG9zIGFyY2hpdm9zIHJlZW1wbGF6YWRvcz8KLSAgICAgIFRleHQgSXRhbGlhbj1RdWVzdG8gcHJvZ3JhbW1hIGRpIGluc3RhbGxhemlvbmUgcHXyIGNyZWFyZSBjb3BpZSBkaSBiYWNrdXAgZGkgdHV0dGkgaSBmaWxlIHNvc3RpdHVpdGkgZHVyYW50ZSBskmluc3RhbGxhemlvbmUuIFF1ZXN0aSBmaWxlIHNhcmFubm8gdXNhdGkgcXVhbmRvIGlsIHNvZnR3YXJlIHNhcuAgZGlzaW5zdGFsbGF0byBlIHNhcuAgcmljaGllc3RvIHVuIHJpdG9ybm8gYWxsbyBzdGF0byBwcmVjZWRlbnRlLiBTZSBub24gY3JlaSBsZSBjb3BpZSBkaSBiYWNrdXAsIHBvdHJhaSBzb2xvIGRpc2luc3RhbGxhcmUgaWwgc29mdHdhcmUsIG1hIG5vbiBwb3RyYWkgcmlwb3J0YXJlIGlsIHNpc3RlbWEgYWxsbyBzdGF0byBwcmVjZWRlbnRlLiBWdW9pIGNyZWFyZSBpIGZpbGUgZGkgYmFja3VwIGRlaSBmaWxlIHNvc3RpdHVpdGk/Ci0gICAgICBUZXh0IERhbmlzaD1EZXR0ZSBpbnN0YWxsYXRpb25zcHJvZ3JhbSBrYW4gb3ByZXR0ZSBzaWtrZXJoZWRza29waWVyIGFmIGFsbGUgZmlsZXIsIHNvbSBlcnN0YXR0ZXMgdW5kZXIgaW5zdGFsbGF0aW9uZW4uIERpc3NlIGZpbGVyIGJlbnl0dGVzLCBu5XIgc29mdHdhcmVuIGZqZXJuZXMsIG9nIGRlbiB0aWRsaWdlcmUgc3lzdGVta29uZmlndXJhdGlvbiBnZW5ldGFibGVyZXMuIEh2aXMgZGVyIGlra2Ugb3ByZXR0ZXMgc2lra2VyaGVkc2tvcGllciwga2FuIGR1IGt1biBmamVybmUgZGVuIGluc3RhbGxlcmVkZSBzb2Z0d2FyZSBvZyBpa2tlIGdlbmV0YWJsZXJlIGRlbiB0aWRsaWdlcmUgc3lzdGVta29uZmlndXJhdGlvbi4gVmlsIGR1IG9wcmV0dGUgc2lra2VyaGVkc2tvcGllciBhZiBmaWxlciwgc29tIGVyc3RhdHRlcz8KLSAgICAgIFRleHQgRHV0Y2g9RGl0IGluc3RhbGxhdGllcHJvZ3JhbW1hIGthbiBrb3BpZetuIG1ha2VuIHZhbiBhbGxlIGJlc3RhbmRlbiBkaWUgdGlqZGVucyBkZSBpbnN0YWxsYXRpZSB3b3JkZW4gdmVydmFuZ2VuLiBEZXplIHdvcmRlbiBkYW4gZ2VicnVpa3QgYWxzIGRlIHNvZnR3YXJlLWluc3RhbGxhdGllIG9uZ2VkYWFuIHdvcmR0IGdlbWFha3QgZW4gdSBoZXQgc3lzdGVlbSB3aWx0IGxhdGVuIHRlcnVna2VyZW4gbmFhciBkZSBvb3JzcHJvbmtlbGlqa2Ugc3RhYXQuIEFscyBlciBnZWVuIGJhY2stdXAga29waWXrbiB3b3JkZW4gZ2VtYWFrdCwga3VudCB1IGRlIHNvZnR3YXJlIGVua2VsIHZlcndpamRlcmVuIG1hYXIgaGV0IHN5c3RlZW0gbmlldCBpbiBkZSBvb3JzcHJvbmtlbGlqa2Ugc3RhYXQgdGVydWdicmVuZ2VuLiBXaWx0IHUgZWVuIGJhY2stdXAgbWFrZW4gdmFuIGRlIHZlcnZhbmdlbiBiZXN0YW5kZW4/Ci0gICAgICBUZXh0IE5vcndlZ2lhbj1EZXR0ZSBpbnN0YWxsYXNqb25zcHJvZ3JhbW1ldCBrYW4gbGFnZSBzaWtrZXJoZXRza29waWVyIGF2IGFsbGUgZmlsZXIgc29tIGJsaXIgZXJzdGF0dGV0IHVuZGVyIGluc3RhbGxhc2pvbmVuLiBEaXNzZSBmaWxlbmUgdmlsIHRhcyBpIGJydWsgbuVyIHByb2dyYW12YXJlbiBlciBhdmluc3RhbGxlcnQgb2cgZGV0IGVyIGJlaG92IGZvciB0aWxiYWtlc3RpbGxpbmcuIEh2aXMgZGV0IGlra2UgZXIgbGFnZXQgc2lra2VyaGV0c2tvcGllciwga2FuIGR1IGt1biBhdmluc3RhbGxlcmUgcHJvZ3JhbXZhcmVuIG9nIGlra2Ugc3RpbGxlIHN5c3RlbWV0IHRpbGJha2UgdGlsIHRpZGxpZ2VyZSBzdGF0dXMuINhuc2tlciBkdSDlIGxhZ2Ugc2lra2VyaGV0c2tvcGllciBhdiBkZSBmaWxlbmUgc29tIGJsaXIgZXJzdGF0dGV0IG7lPwotICAgICAgVGV4dCBTd2VkaXNoPUluc3RhbGxhdGlvbnNwcm9ncmFtbWV0IGthbiBza2FwYSBz5GtlcmhldHNrb3Bpb3IgYXYgYWxsYSBmaWxlciBzb20gYnl0cyB1dCB1bmRlciBpbnN0YWxsYXRpb25lbi4gRGVzc2EgZmlsZXIga2FuIHNlZGFuIGFuduRuZGFzIG7kciBwcm9ncmFtdmFyYW4gYXZpbnN0YWxsZXJhcyBvY2ggZHUgYmVn5HIgcm9sbGJhY2suIE9tIGR1IGTlIGludGUgaGFyIG7lZ3JhIHPka2VyaGV0c2tvcGlvciBrYW4gZHUgYmFyYSBhdmluc3RhbGxlcmEgcHJvZ3JhbXZhcmFuLCBpbnRlIOV0ZXJza2FwYSBzeXN0ZW1ldCBpIGRlc3MgdGlkaWdhcmUgc2tpY2suIFZpbGwgZHUgZ/ZyYSBz5GtlcmhldHNrb3Bpb3IgYXYgZGUgZXJzYXR0YSBmaWxlcm5hPwotICAgIGVuZAotICAgIGl0ZW06IFJhZGlvIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE0MSAxMDYgMjY1IDEzNgotICAgICAgVmFyaWFibGU9RE9CQUNLVVAKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMTAwMQotICAgICAgVGV4dD0mWWVzLCBtYWtlIGJhY2t1cHMKLSAgICAgIFRleHQ9TiZvLCBkbyBub3QgbWFrZSBiYWNrdXBzCi0gICAgICBUZXh0PQotICAgICAgVGV4dCBGcmVuY2g9Jk91aQotICAgICAgVGV4dCBGcmVuY2g9TiZvbgotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEdlcm1hbj0mSmEKLSAgICAgIFRleHQgR2VybWFuPU4mZWluCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgUG9ydHVndWVzZT0mU2ltCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9TuMmbwotICAgICAgVGV4dCBQb3J0dWd1ZXNlPQotICAgICAgVGV4dCBTcGFuaXNoPSZT7QotICAgICAgVGV4dCBTcGFuaXNoPU4mbwotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBJdGFsaWFuPSZT7AotICAgICAgVGV4dCBJdGFsaWFuPU4mbwotICAgICAgVGV4dCBJdGFsaWFuPQotICAgICAgVGV4dCBEYW5pc2g9JkphCi0gICAgICBUZXh0IERhbmlzaD0mTmVqCi0gICAgICBUZXh0IERhbmlzaD0KLSAgICAgIFRleHQgRHV0Y2g9JkphCi0gICAgICBUZXh0IER1dGNoPU4mZWUKLSAgICAgIFRleHQgRHV0Y2g9Ci0gICAgICBUZXh0IE5vcndlZ2lhbj0mSmEKLSAgICAgIFRleHQgTm9yd2VnaWFuPSZOZWkKLSAgICAgIFRleHQgTm9yd2VnaWFuPQotICAgICAgVGV4dCBTd2VkaXNoPSZKYQotICAgICAgVGV4dCBTd2VkaXNoPU4mZWoKLSAgICAgIFRleHQgU3dlZGlzaD0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMgotICAgICAgUmVjdGFuZ2xlPTEwOCAxNzMgMzIwIDIwOAotICAgICAgQWN0aW9uPTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgICAgVGV4dD1CYWNrdXAgRmlsZSBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICAgIFRleHQgRnJlbmNoPVLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24gZGVzIGZpY2hpZXJzIGRlIHNhdXZlZ2FyZGUKLSAgICAgIFRleHQgR2VybWFuPVppZWx2ZXJ6ZWljaG5pcyBm/HIgZGllIFNpY2hlcnVuZ3NkYXRlaQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPURpcmVjdPNyaW8gZGUgZGVzdGlubyBkZSBmaWNoZWlybyBkZSBzZWd1cmFu52EKLSAgICAgIFRleHQgU3BhbmlzaD1EaXJlY3RvcmlvIGRlIERlc3Rpbm8gZGUgbG9zIEFyY2hpdm9zIGRlIFNlZ3VyaWRhZAotICAgICAgVGV4dCBJdGFsaWFuPURpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUgZGVpIGZpbGUgZGkgYmFja3VwCi0gICAgICBUZXh0IERhbmlzaD1EZXN0aW5hdGlvbnNiaWJsaW90ZWsgdGlsIHNpa2tlcmhlZHNrb3BpZXIKLSAgICAgIFRleHQgRHV0Y2g9RG9lbGRpcmVjdG9yeSBiYWNrdXAtYmVzdGFuZAotICAgICAgVGV4dCBOb3J3ZWdpYW49TeVsa2F0YWxvZyBmb3Igc2lra2VyaGV0c2tvcGllcgotICAgICAgVGV4dCBTd2VkaXNoPUthdGFsb2cgZvZyIHPka2VyaGV0c2tvcGllcmFkZSBmaWxlcgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzMKLSAgICAgIFJlY3RhbmdsZT0yNjUgMTg1IDMxOCAyMDMKLSAgICAgIFZhcmlhYmxlPUJBQ0tVUF9TQVZFCi0gICAgICBWYWx1ZT0lQkFDS1VQJQotICAgICAgRGVzdGluYXRpb24gRGlhbG9nPTEKLSAgICAgIEFjdGlvbj0yCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9QiZyb3dzZS4uLgotICAgICAgVGV4dCBGcmVuY2g9UCZhcmNvdXJpcgotICAgICAgVGV4dCBHZXJtYW49QiZs5HR0ZXJuLi4uCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9UCZyb2N1cmFyCi0gICAgICBUZXh0IFNwYW5pc2g9ViZpc3VhbGl6YXIuLi4KLSAgICAgIFRleHQgSXRhbGlhbj1TZm9nbGlhLi4uCi0gICAgICBUZXh0IERhbmlzaD0mR2VubmVtc2UuLi4KLSAgICAgIFRleHQgRHV0Y2g9QiZsYWRlcmVuLi4uCi0gICAgICBUZXh0IE5vcndlZ2lhbj1CbGEgaWdqZW5ub20KLSAgICAgIFRleHQgU3dlZGlzaD0mQmzkZGRyYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgQ29udHJvbCBOYW1lPUJBQ0s0Ci0gICAgICBSZWN0YW5nbGU9MTI5IDE4OCAyNTQgMjAwCi0gICAgICBEZXN0aW5hdGlvbiBEaWFsb2c9MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSVCQUNLVVAlCi0gICAgICBUZXh0IEZyZW5jaD0lQkFDS1VQJQotICAgICAgVGV4dCBHZXJtYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgUG9ydHVndWVzZT0lQkFDS1VQJQotICAgICAgVGV4dCBTcGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IEl0YWxpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgRGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IER1dGNoPSVCQUNLVVAlCi0gICAgICBUZXh0IE5vcndlZ2lhbj0lQkFDS1VQJQotICAgICAgVGV4dCBTd2VkaXNoPSVCQUNLVVAlCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDExIDMyMyAzNgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1CYWNrdXAgUmVwbGFjZWQgRmlsZXMKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZXMgY29tcG9zYW50cwotICAgICAgVGV4dCBHZXJtYW49S29tcG9uZW50ZW4gYXVzd+RobGVuCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBjb21wb25lbnRlcwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIGkgY29tcG9uZW50aQotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9RE9CQUNLVVAKLSAgICAgIFZhbHVlPUIKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMwotICAgICAgT3BlcmF0aW9uPTEKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLNAotICAgICAgT3BlcmF0aW9uPTEKLSAgICBlbmQKLSAgICBpdGVtOiBFbHNlIFN0YXRlbWVudAotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0szCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzQKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgZW5kCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICBUaXRsZSBGcmVuY2g9Q2hvaXNpc3NleiBsZSBy6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uCi0gICAgVGl0bGUgR2VybWFuPVppZWx2ZXJ6ZWljaG5pcyB35GhsZW4KLSAgICBUaXRsZSBQb3J0dWd1ZXNlPVNlbGVjY2lvbmFyIERpcmVjdPNyaW8gZGUgRGVzdGlubwotICAgIFRpdGxlIFNwYW5pc2g9U2VsZWNjaW9uZSBlbCBEaXJlY3RvcmlvIGRlIERlc3Rpbm8KLSAgICBUaXRsZSBJdGFsaWFuPVNlbGV6aW9uYSBEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lCi0gICAgVGl0bGUgRGFuaXNoPVbmbGcgRGVzdGluYXRpb25zYmlibGlvdGVrCi0gICAgVGl0bGUgRHV0Y2g9S2llcyBEb2VsZGlyZWN0b3J5Ci0gICAgVGl0bGUgTm9yd2VnaWFuPVZlbGcgbeVsa2F0YWxvZwotICAgIFRpdGxlIFN3ZWRpc2g9VuRsaiBkZXN0aW5hdGlvbnNrYWxhdG9nCi0gICAgV2lkdGg9Mjc2Ci0gICAgSGVpZ2h0PTIxNgotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBMaXN0Ym94Ci0gICAgICBSZWN0YW5nbGU9NiAzIDIwMCAxODYKLSAgICAgIFZhcmlhYmxlPUJBQ0tVUAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDEwMDAwMDAwMTAxMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMTEwMDAwMTAwMDEwCi0gICAgICBUZXh0PSVCQUNLVVAlCi0gICAgICBUZXh0PQotICAgICAgVGV4dCBGcmVuY2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBHZXJtYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPSVCQUNLVVAlCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Ci0gICAgICBUZXh0IFNwYW5pc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgSXRhbGlhbj0lQkFDS1VQJQotICAgICAgVGV4dCBJdGFsaWFuPQotICAgICAgVGV4dCBEYW5pc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRGFuaXNoPQotICAgICAgVGV4dCBEdXRjaD0lQkFDS1VQJQotICAgICAgVGV4dCBEdXRjaD0KLSAgICAgIFRleHQgTm9yd2VnaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IE5vcndlZ2lhbj0KLSAgICAgIFRleHQgU3dlZGlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBTd2VkaXNoPQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjA5IDggMjY1IDI2Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9T0sKLSAgICAgIFRleHQgRnJlbmNoPU9LCi0gICAgICBUZXh0IEdlcm1hbj1PSwotICAgICAgVGV4dCBQb3J0dWd1ZXNlPU9LCi0gICAgICBUZXh0IFNwYW5pc2g9QUNFUFRBUgotICAgICAgVGV4dCBJdGFsaWFuPU9LCi0gICAgICBUZXh0IERhbmlzaD1PSwotICAgICAgVGV4dCBEdXRjaD1PSwotICAgICAgVGV4dCBOb3J3ZWdpYW49T0sKLSAgICAgIFRleHQgU3dlZGlzaD1PSwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjA5IDMxIDI2NSA1MAotICAgICAgVmFyaWFibGU9QkFDS1VQCi0gICAgICBWYWx1ZT0lQkFDS1VQX1NBVkUlCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Q2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD1Bbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj1BYmJyZWNoZW4KLSAgICAgIFRleHQgUG9ydHVndWVzZT1DYW5jZWxhcgotICAgICAgVGV4dCBTcGFuaXNoPUNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49QW5udWxsYQotICAgICAgVGV4dCBEYW5pc2g9U2xldAotICAgICAgVGV4dCBEdXRjaD1Bbm51bGVyZW4KLSAgICAgIFRleHQgTm9yd2VnaWFuPUF2YnJ5dAotICAgICAgVGV4dCBTd2VkaXNoPUF2YnJ5dAotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TZWxlY3QgQ29tcG9uZW50cwotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwgJlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCAmWnVy/GNrCi0gICAgICBUZXh0IFNwYW5pc2g9PCAmQXRy4XMKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBDaGVja2JveAotICAgICAgUmVjdGFuZ2xlPTEwOCA2NiAzMTMgMTU2Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTEKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAxMTAKLSAgICAgIFRleHQ9UHl0aG9uIGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMKLSAgICAgIFRleHQ9VGNsL1RrIChUa2ludGVyLCBJRExFLCBweWRvYykKLSAgICAgIFRleHQ9UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dD1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0PVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0PQotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IEZyZW5jaD1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IEZyZW5jaD1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IEZyZW5jaD1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gaW50ZXJwcmV0ZXIsIGxpYnJhcnkgYW5kIElETEUKLSAgICAgIFRleHQgR2VybWFuPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgR2VybWFuPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgR2VybWFuPVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gaW50ZXJwcmV0ZXIsIGxpYnJhcnkgYW5kIElETEUKLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBJdGFsaWFuPQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0NSAzMjAgNjMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1DaG9vc2Ugd2hpY2ggY29tcG9uZW50cyB0byBpbnN0YWxsIGJ5IGNoZWNraW5nIHRoZSBib3hlcyBiZWxvdy4KLSAgICAgIFRleHQgRnJlbmNoPUNob2lzaXNzZXogbGVzIGNvbXBvc2FudHMgcXVlIHZvdXMgdm91bGV6IGluc3RhbGxlciBlbiBjb2NoYW50IGxlcyBjYXNlcyBjaS1kZXNzb3VzLgotICAgICAgVGV4dCBHZXJtYW49V+RobGVuIFNpZSBkaWUgenUgaW5zdGFsbGllcmVuZGVuIEtvbXBvbmVudGVuLCBpbmRlbSBTaWUgaW4gZGllIGVudHNwcmVjaGVuZGVuIEvkc3RjaGVuIGtsaWNrZW4uCi0gICAgICBUZXh0IFNwYW5pc2g9RWxpamEgbG9zIGNvbXBvbmVudGVzIHF1ZSBkZXNlZSBpbnN0YWxhciBtYXJjYW5kbyBsb3MgY3VhZHJvcyBkZSBhYmFqby4KLSAgICAgIFRleHQgSXRhbGlhbj1TY2VnbGllcmUgcXVhbGkgY29tcG9uZW50aSBpbnN0YWxsYXJlIHNlbGV6aW9uYW5kbyBsZSBjYXNlbGxlIHNvdHRvc3RhbnRpLgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIwMyAyNjkgMjIwCi0gICAgICBEZXN0aW5hdGlvbiBEaWFsb2c9MQotICAgICAgQWN0aW9uPTIKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1BZHZhbmNlZCBPcHRpb25zIC4uLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA0MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1TZWxlY3QgQ29tcG9uZW50cwotICAgICAgVGV4dCBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlcyBjb21wb3NhbnRzCi0gICAgICBUZXh0IEdlcm1hbj1Lb21wb25lbnRlbiBhdXN35GhsZW4KLSAgICAgIFRleHQgU3BhbmlzaD1TZWxlY2Npb25lIGNvbXBvbmVudGVzCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgaSBjb21wb25lbnRpCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MjUxIDE4MCAzMTEgMTkzCi0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBWYWx1ZT1NQUlORElSCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0yNTEgMTY4IDMxMSAxNzkKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEyMyAxNjggMjM0IDE4MQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PURpc2sgU3BhY2UgUmVxdWlyZWQ6Ci0gICAgICBUZXh0IEZyZW5jaD1Fc3BhY2UgZGlzcXVlIHJlcXVpcyA6Ci0gICAgICBUZXh0IEdlcm1hbj1Ob3R3ZW5kaWdlciBTcGVpY2hlcnBsYXR6OgotICAgICAgVGV4dCBTcGFuaXNoPUVzcGFjaW8gcmVxdWVyaWRvIGVuIGVsIGRpc2NvOgotICAgICAgVGV4dCBJdGFsaWFuPVNwYXppbyBzdSBkaXNjbyBuZWNlc3NhcmlvOgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEyMyAxODAgMjM0IDE5MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PURpc2sgU3BhY2UgUmVtYWluaW5nOgotICAgICAgVGV4dCBGcmVuY2g9RXNwYWNlIGRpc3F1ZSBkaXNwb25pYmxlIDoKLSAgICAgIFRleHQgR2VybWFuPVZlcmJsZWliZW5kZXIgU3BlaWNoZXJwbGF0ejoKLSAgICAgIFRleHQgU3BhbmlzaD1Fc3BhY2lvIGVuIGRpc2NvIGRpc3BvbmlibGU6Ci0gICAgICBUZXh0IEl0YWxpYW49U3BhemlvIHN1IGRpc2NvIGRpc3BvbmliaWxlOgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxNTggMzIwIDE5NgotICAgICAgQWN0aW9uPTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9RExHX0VWRU5UX1RZUEUKLSAgICAgIFZhbHVlPVZFUklGWQotICAgIGVuZAotICAgIGl0ZW06IFJlbWFyawotICAgICAgVGV4dD1JZiB0aGV5J3JlIGluc3RhbGxpbmcgVGNsL1RrLCBUb29scywgb3IgdGhlIHRlc3Qgc3VpdGUsIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHVubGVzcyB0aGV5J3JlIGluc3RhbGxpbmcgUHl0aG9uIHRvby4KLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIFZhbHVlPUJERQotICAgICAgRmxhZ3M9MDAwMDEwMTAKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIFZhbHVlPUEKLSAgICAgIEZsYWdzPTAwMDAwMDExCi0gICAgZW5kCi0gICAgaXRlbTogRGlzcGxheSBNZXNzYWdlCi0gICAgICBUaXRsZT1BcmUgeW91IHN1cmU/Ci0gICAgICBUZXh0PUluc3RhbGxpbmcgVGNsL1RrLCBUb29scyBvciB0aGUgdGVzdCBzdWl0ZSBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB1bmxlc3MgeW91IGluc3RhbGwgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzIHRvby4KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PUNsaWNrIFllcyBpZiB0aGF0J3MgcmVhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAgICBGbGFncz0wMDEwMTEwMQotICAgIGVuZAotICAgIGl0ZW06IFJlbWFyawotICAgICAgVGV4dD1Ob3RoaW5nIC0tIGp1c3QgcHJvY2VlZCB0byB0aGUgbmV4dCBkaWFsb2cuCi0gICAgZW5kCi0gICAgaXRlbTogRWxzZSBTdGF0ZW1lbnQKLSAgICBlbmQKLSAgICBpdGVtOiBSZW1hcmsKLSAgICAgIFRleHQ9UmV0dXJuIHRvIHRoZSBkaWFsb2cuCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IFZhcmlhYmxlCi0gICAgICBWYXJpYWJsZT1ETEdfRVZFTlRfVFlQRQotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICBlbmQKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9QWR2YW5jZWQgT3B0aW9ucwotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yMTMKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUmFkaW8gQnV0dG9uCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4yCi0gICAgICBSZWN0YW5nbGU9MTEgNDYgOTAgNzYKLSAgICAgIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAxMDAxCi0gICAgICBUZXh0PUFkbWluIGluc3RhbGwKLSAgICAgIFRleHQ9Tm9uLUFkbWluIGluc3RhbGxsCi0gICAgICBUZXh0PQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDE3MCAyNDQgMTg5Ci0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1PSwotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTUgMyAzMjYgODMKLSAgICAgIEFjdGlvbj0xCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjEKLSAgICAgIFJlY3RhbmdsZT0xMSAxMSAzMjEgNDUKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1CeSBkZWZhdWx0LCB0aGUgaW5zdGFsbCByZWNvcmRzIHNldHRpbmdzIGluIHRoZSBwZXItbWFjaGluZSBhcmVhIG9mIHRoZSByZWdpc3RyeSAoSEtMTSksIGFuZCBpbnN0YWxscyB0aGUgUHl0aG9uIGFuZCBDIHJ1bnRpbWUgRExMcyB0byAlU1lTMzIlLiAgQ2hvb3NlICJOb24tQWRtaW4gaW5zdGFsbCIgaWYgeW91IHdvdWxkIHByZWZlciBzZXR0aW5ncyBtYWRlIGluIHRoZSBwZXItdXNlciByZWdpc3RyeSAoSEtDVSksIGFuZCBETExzIGluc3RhbGxlZCBpbiAlTUFJTkRJUiUuCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9NSA5MCAzMjYgMTU3Ci0gICAgICBBY3Rpb249MQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogQ2hlY2tib3gKLSAgICAgIFJlY3RhbmdsZT0xMSAxMjEgMjQzIDE1MQotICAgICAgVmFyaWFibGU9VEFTS1MKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAxMQotICAgICAgVGV4dD1SZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMgKC5weSwgLnB5dywgLnB5YywgLnB5bykKLSAgICAgIFRleHQ9Q3JlYXRlIFN0YXJ0IE1lbnUgc2hvcnRjdXRzCi0gICAgICBUZXh0PQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTExIDEwMyAzMjAgMTIxCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2hvb3NlIHRhc2tzIHRvIHBlcmZvcm0gYnkgY2hlY2tpbmcgdGhlIGJveGVzIGJlbG93LgotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9RExHX0VWRU5UX1RZUEUKLSAgICAgIFZhbHVlPUlOSVQKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURPQURNSU4KLSAgICAgIFZhbHVlPTEKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjIKLSAgICBlbmQKLSAgICBpdGVtOiBFbHNlIFN0YXRlbWVudAotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIFRleHQKLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjEKLSAgICAgIENvbnRyb2wgVGV4dD1UaGlzIHNlY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgbG9nZ2VkIGluIHRvIGFuIGFjY291bnQgd2l0aCBBZG1pbmlzdHJhdG9yIHByaXZpbGVnZXMuCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4yCi0gICAgICBPcGVyYXRpb249MQotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TZWxlY3QgUHJvZ3JhbSBNYW5hZ2VyIEdyb3VwCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCAmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08ICZadXL8Y2sKLSAgICAgIFRleHQgU3BhbmlzaD08ICZBdHLhcwotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA1MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1TZWxlY3QgU3RhcnQgTWVudSBHcm91cAotICAgICAgVGV4dCBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlIGdyb3VwZSBkdSBHZXN0aW9ubmFpcmUgZGUgcHJvZ3JhbW1lCi0gICAgICBUZXh0IEdlcm1hbj1CZXN0aW1tdW5nIGRlciBQcm9ncmFtbS1NYW5hZ2VyZ3J1cHBlCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBncnVwbyBkZWwgQWRtaW5pc3RyYWRvciBkZSBwcm9ncmFtYXMKLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBpbCBncnVwcG8gUHJvZ01hbgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAzNSAzMjAgNjUKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1FbnRlciB0aGUgbmFtZSBvZiB0aGUgU3RhcnQgTWVudSBwcm9ncmFtIGdyb3VwIHRvIHdoaWNoIHRvIGFkZCB0aGUgJUFQUFRJVExFJSBpY29uczoKLSAgICAgIFRleHQgRnJlbmNoPUVudHJleiBsZSBub20gZHUgZ3JvdXBlIGR1IEdlc3Rpb25uYWlyZSBkZSBwcm9ncmFtbWUgZGFucyBsZXF1ZWwgdm91cyBzb3VoYWl0ZXogYWpvdXRlciBsZXMgaWP0bmVzIGRlICVBUFBUSVRMRSUgOgotICAgICAgVGV4dCBHZXJtYW49R2ViZW4gU2llIGRlbiBOYW1lbiBkZXIgUHJvZ3JhbW1ncnVwcGUgZWluLCBkZXIgZGFzIFN5bWJvbCAlQVBQVElUTEUlIGhpbnp1Z2Vm/Gd0IHdlcmRlbiBzb2xsOgotICAgICAgVGV4dCBTcGFuaXNoPUVzY3JpYmEgZWwgbm9tYnJlIGRlbCBncnVwbyBkZWwgQWRtaW5pc3RyYWRvciBkZSBwcm9ncmFtYXMgZW4gZWwgcXVlIGRlc2VhIGFncmVnYXIgbG9zIGljb25vcyBkZSAlQVBQVElUTEUlOgotICAgICAgVGV4dCBJdGFsaWFuPUluc2VyaXJlIGlsIG5vbWUgZGVsIGdydXBwbyBQcm9ncmFtIE1hbmFnZXIgcGVyIGFnZ2l1bmdlcmUgbGUgaWNvbmUgJUFQUFRJVExFJSBhOgotICAgIGVuZAotICAgIGl0ZW06IENvbWJvYm94Ci0gICAgICBSZWN0YW5nbGU9MTA4IDU2IDMyMCAyMTkKLSAgICAgIFZhcmlhYmxlPUdST1VQCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDEwMDAwMTAwMDAwMDExMDAwMDAwMDEKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9JUdST1VQJQotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPSVHUk9VUCUKLSAgICAgIFRleHQgR2VybWFuPSVHUk9VUCUKLSAgICAgIFRleHQgU3BhbmlzaD0lR1JPVVAlCi0gICAgICBUZXh0IEl0YWxpYW49JUdST1VQJQotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TdGFydCBJbnN0YWxsYXRpb24KLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08ICZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwgJlp1cvxjawotICAgICAgVGV4dCBTcGFuaXNoPTwgJkF0cuFzCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTAgMzIzIDUzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVJlYWR5IHRvIEluc3RhbGwhCi0gICAgICBUZXh0IEZyZW5jaD1Qcup0IOAgaW5zdGFsbGVyICEKLSAgICAgIFRleHQgR2VybWFuPUluc3RhbGxhdGlvbnNiZXJlaXQhCi0gICAgICBUZXh0IFNwYW5pc2g9oVByZXBhcmFkbyBwYXJhIGxhIGluc3RhbGFjafNuIQotICAgICAgVGV4dCBJdGFsaWFuPVByb250byBwZXIgbCdpbnN0YWxsYXppb25lIQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0MCAzMjAgNjIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1DbGljayB0aGUgTmV4dCBidXR0b24gdG8gaW5zdGFsbCAlQVBQVElUTEUlLCBvciB0aGUgQmFjayBidXR0b24gdG8gY2hhbmdlIGNob2ljZXM6Ci0gICAgICBUZXh0IEZyZW5jaD1Wb3VzIOp0ZXMgbWFpbnRlbmFudCBwcup0IOAgaW5zdGFsbGVyIGxlcyBmaWNoaWVycyAlQVBQVElUTEUlLgotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEZyZW5jaD1DbGlxdWV6IHN1ciBsZSBib3V0b24gU3VpdGUgcG91ciBjb21tZW5jZXIgbCdpbnN0YWxsYXRpb24gb3Ugc3VyIGxlIGJvdXRvbiBSZXRvdXIgcG91ciBlbnRyZXIgbGVzIGluZm9ybWF0aW9ucyBkJ2luc3RhbGxhdGlvbiDgIG5vdXZlYXUuCi0gICAgICBUZXh0IEdlcm1hbj1TaWUga/ZubmVuICVBUFBUSVRMRSUgbnVuIGluc3RhbGxpZXJlbi4KLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBHZXJtYW49S2xpY2tlbiBTaWUgYXVmICJXZWl0ZXIiLCB1bSBtaXQgZGVyIEluc3RhbGxhdGlvbiB6dSBiZWdpbm5lbi4gS2xpY2tlbiBTaWUgYXVmICJadXL8Y2siLCB1bSBkaWUgSW5zdGFsbGF0aW9uc2luZm9ybWF0aW9uZW4gbmV1IGVpbnp1Z2ViZW4uCi0gICAgICBUZXh0IFNwYW5pc2g9WWEgZXN04SBsaXN0byBwYXJhIGluc3RhbGFyICVBUFBUSVRMRSUuCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IFNwYW5pc2g9UHJlc2lvbmUgZWwgYm90824gU2lndWllbnRlIHBhcmEgY29tZW56YXIgbGEgaW5zdGFsYWNp824gbyBwcmVzaW9uZSBBdHLhcyBwYXJhIHZvbHZlciBhIGluZ3Jlc2FyIGxhIGluZm9ybWFjafNuIHBhcmEgbGEgaW5zdGFsYWNp824uCi0gICAgICBUZXh0IEl0YWxpYW49T3JhIOggcG9zc2liaWxlIGluc3RhbGxhcmUgJUFQUFRJVExFJS4KLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgSXRhbGlhbj1QcmVtZXJlIGlsIHB1bHNhbnRlIEF2YW50aSBwZXIgYXZ2aWFyZSBsJ2luc3RhbGxhemlvbmUgbyBpbCBwdWxzYW50ZSBJbmRpZXRybyBwZXIgcmVpbnNlcmlyZSBsZSBpbmZvcm1hemlvbmkgZGkgaW5zdGFsbGF6aW9uZS4KLSAgICBlbmQKLSAgICBpdGVtOiBFZGl0Ym94Ci0gICAgICBSZWN0YW5nbGU9MTA4IDY2IDMyNCAyMTkKLSAgICAgIEhlbHAgQ29udGV4dD0xNjcxMTY4MQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDAwMDAxMTAwMDExMDAwMTAwCi0gICAgICBUZXh0PSVTVU1NQVJZJQotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ESVNQTEFZCi0gIFZhbHVlPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VXNlciBtYXkgaGF2ZSBjaGFuZ2VkIE1BSU5ESVIsIHNvIHJlc2V0IEJBQ0tVUCB0byBtYXRjaC4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJBQ0tVUAotICBWYWx1ZT0lTUFJTkRJUiVcQkFDS1VQCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CRUdJTiBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V2hlbiB0aGUgQkFDS1VQIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIEJBQ0tVUERJUiBpcyBpbml0aWFsaXplZAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CQUNLVVAKLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QkFDS1VQRElSCi0gIFZhbHVlPSVCQUNLVVAlCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgQlJBTkRJTkcgaW5mb3JtYXRpb24gaXMgd3JpdHRlbiB0byB0aGUgSU5JIGZpbGUgb24gdGhlIGluc3RhbGxhdGlvbiBtZWRpYS4KLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUJSQU5ESU5HCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQlJBTkQKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IElOSSBGaWxlCi0gIFBhdGhuYW1lPSVJTlNUJVxDVVNUREFUQS5JTkkKLSAgU2V0dGluZ3M9W1JlZ2lzdHJhdGlvbl0KLSAgU2V0dGluZ3M9TkFNRT0lTkFNRSUKLSAgU2V0dGluZ3M9Q09NUEFOWT0lQ09NUEFOWSUKLSAgU2V0dGluZ3M9Ci1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QmVnaW4gd3JpdGluZyB0byB0aGUgSU5TVEFMTC5MT0cKLWVuZAotaXRlbTogT3Blbi9DbG9zZSBJTlNUQUxMLkxPRwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DaGVjayBmcmVlIGRpc2sgc3BhY2UgY2FsY3VsYXRlcyBmcmVlIGRpc2sgc3BhY2UgYXMgd2VsbCBhcyBjb21wb25lbnQgc2l6ZXMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUl0IHNob3VsZCBiZSBsb2NhdGVkIGJlZm9yZSBhbGwgSW5zdGFsbCBGaWxlIGFjdGlvbnMuCi1lbmQKLWl0ZW06IENoZWNrIERpc2sgU3BhY2UKLSAgQ29tcG9uZW50PUNPTVBPTkVOVFMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBpbmNsdWRlIHNjcmlwdCBhbGxvd3MgdW5pbnN0YWxsIHN1cHBvcnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIHRoaXMgaXMgb3VyIG93biBVbmluc3RhbC53c2UsIGEgY29weSBvZiBXaXNlJ3MgZXhjZXB0Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PWl0IHdyaXRlcyB0byBIS0NVIChpbnN0ZWFkIG9mIEhLTE0pIGlmIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBhZG1pbiBwcml2cy4KLWVuZAotaXRlbTogSW5jbHVkZSBTY3JpcHQKLSAgUGF0aG5hbWU9LlxVbmluc3RhbC53c2UKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogdGhlc2Ugc2VlbWluZyBuby1vcHMgYWN0dWFsbHkgY29udmVydCB0byBzaG9ydCBmaWxlbmFtZXMuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1DT01NT04KLSAgVmFsdWU9JUNPTU1PTiUKLSAgRmxhZ3M9MDAwMTAxMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPU1BSU5ESVIKLSAgVmFsdWU9JU1BSU5ESVIlCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgSUYvVEhFTi9FTFNFIHJlYWRzIHRoZSBjb3JyZWN0IHJlZ2lzdHJ5IGVudHJpZXMgZm9yIHNob3J0Y3V0L2ljb24gcGxhY2VtZW50Ci1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAxMTEwMTEKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1TVEFSVFVQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcU3RhcnQgTWVudVxQcm9ncmFtc1xTdGFydFVwCi0gIFZhbHVlIE5hbWU9U3RhcnRVcAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPURFU0tUT1BESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxEZXNrdG9wCi0gIFZhbHVlIE5hbWU9RGVza3RvcAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPVNUQVJUTUVOVURJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXFN0YXJ0IE1lbnUKLSAgVmFsdWUgTmFtZT1TdGFydCBNZW51Ci0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9R1JPVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxTdGFydCBNZW51XFByb2dyYW1zCi0gIFZhbHVlIE5hbWU9UHJvZ3JhbXMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DU1RBUlRVUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVTVEFSVFVQRElSJQotICBWYWx1ZSBOYW1lPUNvbW1vbiBTdGFydHVwCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q0RFU0tUT1BESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lREVTS1RPUERJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gRGVza3RvcAotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNTVEFSVE1FTlVESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lU1RBUlRNRU5VRElSJQotICBWYWx1ZSBOYW1lPUNvbW1vbiBTdGFydCBNZW51Ci0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q0dST1VQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JUdST1VQRElSJQotICBWYWx1ZSBOYW1lPUNvbW1vbiBQcm9ncmFtcwotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiAgdGhlIFdpemFyZCBsZWZ0IHRoaXMgYmxvY2sgZW1wdHkhCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVBlcmhhcHMgaXQncyBvbmx5IHJlbGV2YW50IG9uIFdpbmRvd3MgMy4xLgotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RU5EIFdJWkFSRCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1CCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSB1c2VyIGNob3NlIGEgbm9uLWFkbWluIGluc3RhbGwgaW4gIkFkdmFuY2VkIE9wdGlvbnMiLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIHNob3VsZCBjb21lIGFmdGVyIHRoZSBpbmNsdWRlIG9mIFVuaW5zdGFsLndzZSBhYm92ZSwgYmVjYXVzZQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD13cml0aW5nIHVuaW5zdGFsbCBpbmZvIHRvIEhLQ1UgaXMgaW5lZmZlY3RpdmUgZXhjZXB0IHVuZGVyIFdpbjJLLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUNHUk9VUF9TQVZFCi0gIFZhbHVlPSVHUk9VUCUKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9R1JPVVAKLSAgVmFsdWU9JUNHUk9VUERJUiVcJUdST1VQJQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9R1JPVVAKLSAgVmFsdWU9JUdST1VQRElSJVwlR1JPVVAlCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUxvbmcgc2VjdGlvbiB0byBpbnN0YWxsIGZpbGVzLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RExMREVTVAotICBWYWx1ZT0lU1lTMzIlCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ETExERVNUCi0gIFZhbHVlPSVNQUlORElSJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUluc3RhbGwgdGhlIGxpY2Vuc2UgZXZlbiBpZiB0aGV5IGRlc2VsZWN0IGV2ZXJ5dGhpbmcgPHdpbms+LgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpY2Vuc2UKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExJQ0VOU0UudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFJFQURNRS50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXG1pc2NcbmV3cwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTkVXUy50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JY29ucyAtLSBhbHdheXMgaW5zdGFsbCBzbyB0aGF0IHRoZSB1bmluc3RhbGxlciBjYW4gdXNlIHRoZW0gZm9yIGl0cyBvd24gZGlzcGxheS4KLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxwY1xweWNvbi5pY28KLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5Y29uLmljbwotICBGbGFncz0wMDAwMDAwMDEwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHljLmljbwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHljLmljbwotICBGbGFncz0wMDAwMDAwMDEwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHkuaWNvCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweS5pY28KLSAgRmxhZ3M9MDAwMDAwMDAxMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlc2UgYXJyYW5nZSB0byAocmVjdXJzaXZlbHkhKSBkZWxldGUgYWxsIC5weWMgYW5kIC5weW8gZmlsZXMgYXQgdW5pbnN0YWxsIHRpbWUuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgImRvZXMgdGhlIHJpZ2h0IHRoaW5nIjogIGFueSBkaXJlY3RvcmllcyBsZWZ0IGVtcHR5IGF0IHRoZSBlbmQgYXJlIHJlbW92ZWQuCi1lbmQKLWl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9RmlsZSBUcmVlOiAlTUFJTkRJUiVcKi5weWMKLWVuZAotaXRlbTogQWRkIFRleHQgdG8gSU5TVEFMTC5MT0cKLSAgVGV4dD1GaWxlIFRyZWU6ICVNQUlORElSJVwqLnB5bwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QTogaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcwotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUV4ZWN1dGFibGVzCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob24uZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweXRob24uZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5dGhvbncuZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweXRob253LmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3OXhwb3Blbi5leGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHc5eHBvcGVuLmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FeHRlbnNpb24gbW9kdWxlIERMTHMgKC5weWQpOyBrZWVwIGluIHN5bmNoIHdpdGggbGlicyBkaXJlY3RvcnkgbmV4dAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cd2lucmVnLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x3aW5yZWcucHlkCi0gIERlc2NyaXB0aW9uPUV4dGVuc2lvbiBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9jc3YucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9jc3YucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zcmUucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zcmUucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zc2wucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zc2wucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zeW10YWJsZS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3N5bXRhYmxlLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGVzdGNhcGkucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF90ZXN0Y2FwaS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3RraW50ZXIucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF90a2ludGVyLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc29ja2V0LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc29ja2V0LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxiejIucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXGJ6Mi5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cZGF0ZXRpbWUucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXGRhdGV0aW1lLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxtbWFwLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xtbWFwLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxwYXJzZXIucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHBhcnNlci5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHlleHBhdC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNccHlleHBhdC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cc2VsZWN0LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xzZWxlY3QucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHVuaWNvZGVkYXRhLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x1bmljb2RlZGF0YS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cd2luc291bmQucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHdpbnNvdW5kLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx6bGliLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x6bGliLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1MaW5rIGxpYnJhcmllcyAoLmxpYik7IGtlZXAgaW4gc3luY2ggd2l0aCBETExzIGFib3ZlLCBleGNlcHQgdGhhdCB0aGUgUHl0aG9uIGxpYiBsaXZlcyBoZXJlLgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cd2lucmVnLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1x3aW5yZWcubGliCi0gIERlc2NyaXB0aW9uPUxpbmsgbGlicmFyeSBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfY3N2LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfY3N2LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3JlLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc3JlLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3NsLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc3NsLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3ltdGFibGUubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zeW10YWJsZS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3Rlc3RjYXBpLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfdGVzdGNhcGkubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90a2ludGVyLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfdGtpbnRlci5saWIKLSAgRGVzY3JpcHRpb249RXh0ZW5zaW9uIG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NvY2tldC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3NvY2tldC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cYnoyLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xiejIubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGRhdGV0aW1lLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xkYXRldGltZS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cbW1hcC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcbW1hcC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccGFyc2VyLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xwYXJzZXIubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5ZXhwYXQubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHB5ZXhwYXQubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHNlbGVjdC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcc2VsZWN0LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx1bmljb2RlZGF0YS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcdW5pY29kZWRhdGEubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnNvdW5kLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1x3aW5zb3VuZC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cemxpYi5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcemxpYi5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5dGhvbiVfcHltYWpvcl8lJV9weW1pbm9yXyUubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHB5dGhvbiVfUFlNQUpPUl8lJV9QWU1JTk9SXyUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU1haW4gUHl0aG9uIERMTAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UZWxsIFdpc2UgaXQncyBPSyB0byBkZWxldGUgdGhlIFB5dGhvbiBETEwgYXQgdW5pbnN0YWxsIHRpbWUsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PWRlc3BpdGUgdGhhdCB3ZSAobWF5KSB3cml0ZSBpdCBpbnRvIGEgc3lzdGVtIGRpcmVjdG9yeS4KLWVuZAotaXRlbTogQWRkIFRleHQgdG8gSU5TVEFMTC5MT0cKLSAgVGV4dD1Ob24tU3lzdGVtIEZpbGU6Ci1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob24lX3B5bWFqb3JfJSVfcHltaW5vcl8lLmRsbAotICBEZXN0aW5hdGlvbj0lRExMREVTVCVccHl0aG9uJV9QWU1BSk9SXyUlX1BZTUlOT1JfJS5kbGwKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TGlicmFyaWVzIChMaWIvKQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWIKLSAgRGVzY3JpcHRpb249TGlicmFyeSBNb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGNvbXBpbGVyXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxjb21waWxlcgotICBEZXNjcmlwdGlvbj1QeXRob24gY29tcGlsZXIgd3JpdHRlbiBpbiBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHMKLSAgRGVzY3JpcHRpb249RGlzdHJpYnV0aW9uIHV0aWxpdHkgbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHNcUkVBRE1FLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHNcY29tbWFuZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QuZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFxjb21tYW5kX3RlbXBsYXRlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcY29tbWFuZF90ZW1wbGF0ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWwKLSAgRGVzY3JpcHRpb249TGlicmFyeSBlbWFpbCBwYWNrYWdlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdAotICBEZXNjcmlwdGlvbj1lbWFpbCB0ZXN0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcZGF0YVwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3RcZGF0YQotICBEZXNjcmlwdGlvbj1lbWFpbCB0ZXN0IGRhdGEKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XGRhdGFcKi5naWYKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0XGRhdGEKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdCBkYXRhCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFxkYXRhXCouYXUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0XGRhdGEKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdCBkYXRhCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVuY29kaW5nc1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW5jb2RpbmdzCi0gIERlc2NyaXB0aW9uPVVuaWNvZGUgZW5jb2RpbmcgdGFibGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGhvdHNob3RcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGhvdHNob3QKLSAgRGVzY3JpcHRpb249RmFzdCBQeXRob24gcHJvZmlsZXIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcbGliLW9sZFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcbGliLW9sZAotICBEZXNjcmlwdGlvbj1PYnNvbGV0ZSBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRraW50ZXJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRraW50ZXIKLSAgRGVzY3JpcHRpb249VGtpbnRlciByZWxhdGVkIGxpYnJhcnkgbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxsb2dnaW5nXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxsb2dnaW5nCi0gIERlc2NyaXB0aW9uPUxvZ2dpbmcgcGFja2FnZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxzaXRlLXBhY2thZ2VzXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHNpdGUtcGFja2FnZXNcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1TaXRlIHBhY2thZ2VzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sCi0gIERlc2NyaXB0aW9uPVhNTCBzdXBwb3J0IHBhY2thZ2VzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJceG1sXGRvbVwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sXGRvbQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFxwYXJzZXJzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWxccGFyc2VycwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFxzYXhcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbFxzYXgKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QyBJbmNsdWRlIGZpbGVzCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5caW5jbHVkZVwqLmgKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGluY2x1ZGUKLSAgRGVzY3JpcHRpb249SGVhZGVyIGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxwY1xweWNvbmZpZy5oCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxpbmNsdWRlXHB5Y29uZmlnLmgKLSAgRGVzY3JpcHRpb249SGVhZGVyIGZpbGVzIChweWNvbmZpZy5oKQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NaWNyb3NvZnQgQyBydW50aW1lIGxpYnJhcmllcwotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfU1lTXyVcTVNWQ0lSVC5ETEwKLSAgRGVzdGluYXRpb249JURMTERFU1QlXE1TVkNJUlQuRExMCi0gIERlc2NyaXB0aW9uPVZpc3VhbCBDKysgUnVudGltZSBETExzCi0gIEZsYWdzPTAwMDAwMTEwMDAwMTAwMTEKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1NZU18lXE1TVkNSVC5ETEwKLSAgRGVzdGluYXRpb249JURMTERFU1QlXE1TVkNSVC5ETEwKLSAgRGVzY3JpcHRpb249VmlzdWFsIEMrKyBSdW50aW1lIERMTHMKLSAgRmxhZ3M9MDAwMDAxMTAwMDAxMDAxMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUI6IFRjbC9UayAoVGtpbnRlciwgSURMRSwgcHlkb2MpCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGNsL1RrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cLi5cJV90Y2xkaXJfJVxiaW5cKi5kbGwKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHMKLSAgRGVzY3JpcHRpb249VGNsL1RrIGJpbmFyaWVzIGFuZCBsaWJyYXJpZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXC4uXCVfdGNsZGlyXyVcbGliXCouKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcdGNsCi0gIERlc2NyaXB0aW9uPVRjbC9UayBiaW5hcmllcyBhbmQgbGlicmFyaWVzCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUlETEUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYgotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXExpYlxpZGxlbGliXCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYgotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXExpYlxpZGxlbGliXCouZGVmCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYgotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXExpYlxpZGxlbGliXEljb25zXCoKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliXEljb25zCi0gIERlc2NyaXB0aW9uPUludGVncmF0ZWQgRGV2ZUxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cVG9vbHNcc2NyaXB0c1xpZGxlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dwotICBEZXNjcmlwdGlvbj1JRExFIGJvb3RzdHJhcCBzY3JpcHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V2luZG93cyBweWRvYyBkcml2ZXIKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXCoucHl3Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzCi0gIERlc2NyaXB0aW9uPVdpbmRvd3MgcHlkb2MgZHJpdmVyCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DOiBkb2NzCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX0RPQ18lXCouKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRG9jCi0gIERlc2NyaXB0aW9uPVB5dGhvbiBEb2N1bWVudGF0aW9uIChIVE1MKQotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RDogdG9vbHMKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHNjcmlwdHNcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0cwotICBEZXNjcmlwdGlvbj1VdGlsaXR5IFNjcmlwdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHNjcmlwdHNcKi5kb2MKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHMKLSAgRGVzY3JpcHRpb249VXRpbGl0eSBTY3JpcHRzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0c1xSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPVV0aWxpdHkgU2NyaXB0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHdlYmNoZWNrZXJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcd2ViY2hlY2tlcgotICBEZXNjcmlwdGlvbj1XZWIgY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x3ZWJjaGVja2VyXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcd2ViY2hlY2tlclxSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPVdlYiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x2ZXJzaW9uY2hlY2tcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcdmVyc2lvbmNoZWNrCi0gIERlc2NyaXB0aW9uPVZlcnNpb24gY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x2ZXJzaW9uY2hlY2tccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1x2ZXJzaW9uY2hlY2tcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1WZXJzaW9uIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGUKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGUKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHhcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxYCi0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBYIGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gUkVBRE1FCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVccHluY2hlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVccHluY2hlLnB5Ci0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBtYWluCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVccHluY2hlLnB5dwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXHB5bmNoZS5weXcKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIG5vY29uc29sZSBtYWluCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcaTE4blwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xpMThuCi0gIERlc2NyaXB0aW9uPUludGVybmF0aW9uYWxpemF0aW9uIGhlbHBlcnMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUU6IHRlc3Qgc3VpdGUKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XGF1ZGlvdGVzdC5hdQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3RcYXVkaW90ZXN0LmF1Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnV1ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnhtbAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoub3V0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi5iejIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnRhcgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCouZ3oKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFxvdXRwdXRcKi4qCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdFxvdXRwdXQKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3Qgb3V0cHV0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1ET05FIHdpdGggZmlsZSBjb3B5aW5nLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgcmVzdCBpcyByZWdpc3RyeSBhbmQgU3RhcnQgTWVudSBmaWRkbGluZy4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zLiAgQXMgdXN1YWwsIEFkbWluIHByaXZzIGdldCBpbiB0aGUgd2F5LCBidXQgd2l0aCBhIHR3aXN0OgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Zb3UgZG9uJ3QgbmVlZCBhZG1pbiBwcml2cyB0byB3cml0ZSB0byBIS0VZX0NMQVNTRVNfUk9PVCAqZXhjZXB0KiB1bmRlciBXaW4ySy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9T24gV2luMkssIGEgdXNlciB3aXRob3V0IEFkbWluIHByaXZzIGhhcyB0byByZWdpc3RlciBleHRlbnNpb25zIHVuZGVyIEhLQ1VcU29mdHdhcmVcQ0xBU1NFUyBpbnN0ZWFkLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CdXQgd2hpbGUgeW91IGNhbiAqZG8qIHRoYXQgdW5kZXIgb3RoZXIgZmxhdm9ycyBvZiBXaW5kb3dzIHRvbywgaXQgaGFzIG5vIHVzZWZ1bCBlZmZlY3QgZXhjZXB0IGluIFdpbjJLLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTExMTEwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1GaWxlIHR5cGVzLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZSAobm8gY29uc29sZSkKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgIiUlMSIgJSUqCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkNvbXBpbGVkRmlsZQotICBOZXcgVmFsdWU9Q29tcGlsZWQgUHl0aG9uIEZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Db21waWxlZEZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Db21waWxlZEZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweWMuaWNvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1GaWxlIGV4dGVuc2lvbnMuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHkKLSAgTmV3IFZhbHVlPVB5dGhvbi5GaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHkKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHl3Ci0gIE5ldyBWYWx1ZT1QeXRob24uTm9Db25GaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHl3Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5YwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5bwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1GaWxlIHR5cGVzLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlIChubyBjb25zb2xlKQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAiJSUxIiAlJSoKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uQ29tcGlsZWRGaWxlCi0gIE5ldyBWYWx1ZT1Db21waWxlZCBQeXRob24gRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkNvbXBpbGVkRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkNvbXBpbGVkRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5Yy5pY28KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1GaWxlIGV4dGVuc2lvbnMuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weQotICBOZXcgVmFsdWU9UHl0aG9uLkZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weQotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weXcKLSAgTmV3IFZhbHVlPVB5dGhvbi5Ob0NvbkZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weXcKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHljCi0gIE5ldyBWYWx1ZT1QeXRob24uQ29tcGlsZWRGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHlvCi0gIE5ldyBWYWx1ZT1QeXRob24uQ29tcGlsZWRGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUlmIHdlJ3JlIGluc3RhbGxpbmcgSURMRSwgYWxzbyBzZXQgYW4gRWRpdCBjb250ZXh0IG1lbnUgYWN0aW9uIHRvIHVzZSBJRExFLCBmb3IgLnB5IGFuZCAucHl3IGZpbGVzLgotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlXHNoZWxsXEVkaXQgd2l0aCBJRExFXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcgLW4gLWUgIiUlMSIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlXHNoZWxsXEVkaXQgd2l0aCBJRExFXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcgLW4gLWUgIiUlMSIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UmVnaXN0ZXIgUHl0aG9uIHBhdGhzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Xcml0ZSB0byBIS0xNIGZvciBhZG1pbiwgZWxzZSBIS0NVLiAgS2VlcCB0aGVzZSBibG9ja3Mgb3RoZXJ3aXNlIGlkZW50aWNhbCEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcQ3VycmVudFZlcnNpb24KLSAgUm9vdD0xMzAKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aAotICBOZXcgVmFsdWU9JU1BSU5ESVIlCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEluc3RhbGxQYXRoXEluc3RhbGxHcm91cAotICBOZXcgVmFsdWU9JUNHUk9VUF9TQVZFJQotICBOZXcgVmFsdWU9Ci0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXFB5dGhvblBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxMaWI7JU1BSU5ESVIlXERMTHMKLSAgTmV3IFZhbHVlPQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxNb2R1bGVzCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cQXBwIFBhdGhzXFB5dGhvbi5leGUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeXRob24uZXhlCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcQ3VycmVudFZlcnNpb24KLSAgUm9vdD0xMjkKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aAotICBOZXcgVmFsdWU9JU1BSU5ESVIlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEluc3RhbGxQYXRoXEluc3RhbGxHcm91cAotICBOZXcgVmFsdWU9JUNHUk9VUF9TQVZFJQotICBOZXcgVmFsdWU9Ci0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXFB5dGhvblBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxMaWI7JU1BSU5ESVIlXERMTHMKLSAgTmV3IFZhbHVlPQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxNb2R1bGVzCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cQXBwIFBhdGhzXFB5dGhvbi5leGUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeXRob24uZXhlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1SZWdpc3RyeSBmaWRkbGluZyBmb3IgZG9jcy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V3JpdGUgdG8gSEtMTSBmb3IgYWRtaW4sIGVsc2UgSEtDVS4gIEtlZXAgdGhlc2UgYmxvY2tzIG90aGVyd2lzZSBpZGVudGljYWwhCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEhlbHBcTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXERvY1xpbmRleC5odG1sCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEhlbHBcTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXERvY1xpbmRleC5odG1sCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1TZXQgdGhlIGFwcCBwdWJsaXNoZXIgYW5kIFVSTCBlbnRyaWVzIGZvciBXaW4ySyBhZGQvcmVtb3ZlLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JdCBkb2Vzbid0IGh1cnQgb24gb3RoZXIgc3lzdGVtcy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QXMgdXN1YWwsIHdyaXRlIHRvIEhLTE0gb3IgSEtDVSBkZXBlbmRpbmcgb24gQWRtaW4gcHJpdnMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUNBVVRJT046ICBJZiB5b3Ugc2V0IHRoaXMgaW5mbyBvbiB0aGUgIldpbmRvd3MgMjAwMCIgcGFnZSAoc3RlcCA2KSBvZiB0aGUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SW5zdGFsbGF0aW9uIEV4cGVydCwgaXQgb25seSBzaG93cyB1cCBpbiB0aGUgIklmIiBibG9jayBiZWxvdy4gIEtlZXAgaW4gc3luY2ghCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9SGVscExpbmsKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9UHl0aG9uTGFicyBhdCBab3BlIENvcnBvcmF0aW9uCi0gIFZhbHVlIE5hbWU9UHVibGlzaGVyCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1VUkxJbmZvQWJvdXQKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JVBZVkVSX1NUUklORyUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5VmVyc2lvbgotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHkuaWNvLC0wCi0gIFZhbHVlIE5hbWU9RGlzcGxheUljb24KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPUhlbHBMaW5rCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPVB5dGhvbkxhYnMgYXQgWm9wZSBDb3Jwb3JhdGlvbgotICBWYWx1ZSBOYW1lPVB1Ymxpc2hlcgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9VVJMSW5mb0Fib3V0Ci0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVQWVZFUl9TVFJJTkclCi0gIFZhbHVlIE5hbWU9RGlzcGxheVZlcnNpb24KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5LmljbywtMAotICBWYWx1ZSBOYW1lPURpc3BsYXlJY29uCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVBvcHVsYXRlIFN0YXJ0IE1lbnUgZ3JvdXAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9U2hvcnRjdXQgdG8gaW5zdGFsbGVyIG5vIG1hdHRlciB3aGF0LgotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVx1bndpc2UuZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcVW5pbnN0YWxsIFB5dGhvbi5sbmsKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVccHl0aG9uLmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXFB5dGhvbiAoY29tbWFuZCBsaW5lKS5sbmsKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEljb24gUGF0aG5hbWU9JU1BSU5ESVIlXHB5Y29uLmljbwotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVxweXRob253LmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXElETEUgKFB5dGhvbiBHVUkpLmxuawotICBDb21tYW5kIE9wdGlvbnM9IiVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyIKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVccHl0aG9udy5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxNb2R1bGUgRG9jcy5sbmsKLSAgQ29tbWFuZCBPcHRpb25zPSIlTUFJTkRJUiVcVG9vbHNcU2NyaXB0c1xweWRvY2d1aS5weXciCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVxEb2NcaW5kZXguaHRtbAotICBEZXN0aW5hdGlvbj0lR1JPVVAlXFB5dGhvbiBNYW51YWxzLmxuawotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JIGRvbid0IHRoaW5rIHdlIG5lZWQgdGhpcywgYnV0IGhhdmUgYWx3YXlzIGRvbmUgaXQuCi1lbmQKLWl0ZW06IFNlbGYtUmVnaXN0ZXIgT0NYcy9ETExzCi0gIERlc2NyaXB0aW9uPVVwZGF0aW5nIFN5c3RlbSBDb25maWd1cmF0aW9uLCBQbGVhc2UgV2FpdC4uLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotcmVtYXJrZWQgaXRlbTogUmVtYXJrCi0gIFRleHQ9RG9uJ3QgZW5hYmxlICJEZWxldGUgaW4tdXNlIGZpbGVzIi4gIEhlcmUncyB3aGF0IGhhcHBlbnM6Ci1lbmQKLXJlbWFya2VkIGl0ZW06IFJlbWFyawotICBUZXh0PUluc3RhbGwgUHl0aG9uOyB1bmluc3RhbGwgUHl0aG9uOyBpbnN0YWxsIFB5dGhvbiBhZ2Fpbi4gIFJlYm9vdCB0aGUgbWFjaGluZS4KLWVuZAotcmVtYXJrZWQgaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm93IFVOV0lTRS5FWEUgaXMgbWlzc2luZy4gIEkgdGhpbmsgdGhpcyBpcyBhIFdpc2UgYnVnLCBidXQgc28gaXQgZ29lcy4KLWVuZAotcmVtYXJrZWQgaXRlbTogQWRkIFRleHQgdG8gSU5TVEFMTC5MT0cKLSAgVGV4dD1EZWxldGUgaW4tdXNlIGZpbGVzOiBPbgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogV2l6YXJkIEJsb2NrCi0gIERpcmVjdGlvbiBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIEJpdG1hcCBQYXRobmFtZT0uXGluc3RhbGxlci5ibXAKLSAgWCBQb3NpdGlvbj05Ci0gIFkgUG9zaXRpb249MTAKLSAgRmlsbGVyIENvbG9yPTExMTczNzU5Ci0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9RmluaXNoZWQKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9JkZpbmlzaAotICAgICAgVGV4dCBGcmVuY2g9JkZpbgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlcgotICAgICAgVGV4dCBTcGFuaXNoPSZUZXJtaW5hcgotICAgICAgVGV4dCBJdGFsaWFuPSZGaW5lCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIFZhcmlhYmxlPURJU0FCTEVECi0gICAgICBWYWx1ZT0hCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTAgMzIzIDQ4Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PUluc3RhbGxhdGlvbiBDb21wbGV0ZWQhCi0gICAgICBUZXh0IEZyZW5jaD1JbnN0YWxsYXRpb24gdGVybWlu6WUgIQotICAgICAgVGV4dCBHZXJtYW49RGllIEluc3RhbGxhdGlvbiBpc3QgYWJnZXNjaGxvc3NlbiEKLSAgICAgIFRleHQgU3BhbmlzaD2hSW5zdGFsYWNp824gdGVybWluYWRhIQotICAgICAgVGV4dCBJdGFsaWFuPUluc3RhbGxhemlvbmUgY29tcGxldGF0YSEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDQgMzIwIDgyCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JUFQUFRJVExFJSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9UHJlc3MgdGhlIEZpbmlzaCBidXR0b24gdG8gZXhpdCB0aGlzIGluc3RhbGxhdGlvbi4KLSAgICAgIFRleHQgRnJlbmNoPSVBUFBUSVRMRSUgZXN0IG1haW50ZW5hbnQgaW5zdGFsbOkuCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgRnJlbmNoPUNsaXF1ZXogc3VyIGxlIGJvdXRvbiBGaW4gcG91ciBxdWl0dGVyIGwnaW5zdGFsbGF0aW9uLgotICAgICAgVGV4dCBHZXJtYW49JUFQUFRJVExFJSB3dXJkZSBlcmZvbGdyZWljaCBpbnN0YWxsaWVydC4KLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBHZXJtYW49S2xpY2tlbiBTaWUgYXVmICJXZWl0ZXIiLCB1bSBkaWUgSW5zdGFsbGF0aW9uIHp1IGJlZW5kZW4uCi0gICAgICBUZXh0IFNwYW5pc2g9JUFQUFRJVExFJSBzZSBoYSBpbnN0YWxhZG8gY29uIOl4aXRvLgotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBTcGFuaXNoPVByZXNpb25lIGVsIGJvdPNuIFRlcm1pbmFyIHBhcmEgc2FsaXIgZGUgZXN0YSBpbnN0YWxhY2nzbi4KLSAgICAgIFRleHQgSXRhbGlhbj1MJ2luc3RhbGxhemlvbmUgJUFQUFRJVExFJSDoIHN0YXRhIHBvcnRhdGEgYSB0ZXJtaW5lIGNvbiBzdWNjZXNzby4KLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgSXRhbGlhbj1QcmVtZXJlIGlsIHB1bHNhbnRlIEZpbmUgcGVyIHVzY2lyZSBkYWxsJ2luc3RhbGxhemlvbmUuCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDYgMTA1IDMxMiAyMTAKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1TcGVjaWFsIFdpbmRvd3MgdGhhbmtzIHRvOgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9V2lzZSBTb2x1dGlvbnMsIGZvciB0aGUgdXNlIG9mIEluc3RhbGxNYXN0ZXIgOC4xLgotICAgICAgVGV4dD0gICAgaHR0cDovL3d3dy53aXNlc29sdXRpb25zLmNvbS8KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PQotICAgICAgVGV4dD1MZXR0RXJyb3IsIEVyaWsgdmFuIEJsb2tsYW5kLCBmb3IgdGhlIFB5dGhvbiBmb3IgV2luZG93cyBncmFwaGljLgotICAgICAgVGV4dD0gICAgaHR0cDovL3d3dy5sZXR0ZXJyb3IuY29tLwotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PU1hcmsgSGFtbW9uZCwgd2l0aG91dCB3aG9zZSB5ZWFycyBvZiBmcmVlbHkgc2hhcmVkIFdpbmRvd3MgZXhwZXJ0aXNlLCBQeXRob24gZm9yIFdpbmRvd3Mgd291bGQgc3RpbGwgYmUgUHl0aG9uIGZvciBET1MuCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA2IDk1IDMxMiA5NgotICAgICAgQWN0aW9uPTMKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMQotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IE5ldyBFdmVudAotICBOYW1lPUNhbmNlbAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIGluY2x1ZGUgc2NyaXB0IHN1cHBvcnRzIGEgcm9sbGJhY2sgdG8gcHJlaW5zdGFsbGF0aW9uIHN0YXRlIGlmIHRoZSB1c2VyIGNob29zZXMgdG8gY2FuY2VsIGJlZm9yZSB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlLgotZW5kCi1pdGVtOiBJbmNsdWRlIFNjcmlwdAotICBQYXRobmFtZT0lX1dJU0VfJVxJTkNMVURFXHJvbGxiYWNrLndzZQotZW5kCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvaiBiL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWM0MTg0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsODI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJweXRob25jb3JlIg0KLQlQcm9qZWN0R1VJRD0ie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEzMH0iDQotCVJvb3ROYW1lc3BhY2U9InB5dGhvbmNvcmUiDQotCVNjY1Byb2plY3ROYW1lPSJweXRob25jb3JlIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzMuZGxsIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1VTRV9ETF9FWFBPUlQ7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24zM19kLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzNfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzMuZGxsIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iRkFMU0UiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cYW1kNjQtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzMuZGxsIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Il9pbyINCi0gICAgICAgICAgICBGaWx0ZXI9IiI+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xzdHJpbmdpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1x0ZXh0aW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMiPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQ0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9InpsaWIiDQotCQkJRmlsdGVyPSIiPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx1bmNvbXByLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jIj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaGsuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19rci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2xsZWN0aW9uc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jc3YuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2hlYXBxbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2pzb24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3BpY2tsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3JlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3N0cnVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQY1xfc3VicHJvY2Vzcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aW1lLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxfd2FybmluZ3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFic3RyYWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYWNjdS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYWNjZWxlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc2RsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhdGV4aXRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhdWRpb29wLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGJpdHNldC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYmx0aW5tb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xib29sb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVhcnJheW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNlbGxvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNldmFsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2xhc3NvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjbWF0aG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29kZWNzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29tcGlsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvbXBsZXhvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcY29uZmlnLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5hbWljX2Fubm90YXRpb25zLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkaWN0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGRsX250LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkdG9hLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGVudW1vYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZXJyb3JzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZpbGV1dGlscy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZmlyc3RzZXRzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnJhbWVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmcm96ZW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmdXR1cmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xnY21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGdlbm9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0YXJncy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29tcGlsZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0b3B0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGdldHBhdGhwLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0dmVyc2lvbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ3JhbWluaXQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIxLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydGRsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbGlzdG5vZGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xsaXN0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1haW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1hcnNoYWwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLSAJCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1kNW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZXRob2RvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtb2RzdXBwb3J0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbW9kdWxlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1zdmNydG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbXlyZWFkbGluZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzbnByaW50Zi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxub2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xvcGVyYXRvci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJccGFyc2VyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXRvay5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccGVlcGhvbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlhcmVuYS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHljdHlwZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlmcGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5bWF0aC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdGF0ZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJjbXAuYyINCi0JCQk+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RydG9kLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXRpbWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXFB5dGhvbi1hc3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX250LnJjIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aG9ucnVuLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxyYW5kb20uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNldG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTI1Nm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTFtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzbGljZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3RydWN0bWVtYmVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RydWN0c2VxLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzeW10YWJsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzeXNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRocmVhZC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclx0b2tlbml6ZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRyYWNlYmFjay5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHR1cGxlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdHlwZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGNcd2lucmVnLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcd2Vha3JlZm9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHh4c3VidHlwZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9udy52Y3Byb2ogYi9QQy9WUzcuMS9weXRob253LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdkN2Y1MC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob253LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHl0aG9udyINCi0JU2NjUHJvamVjdE5hbWU9InB5dGhvbnciDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5ccGMiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHB5dGhvbnciDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbndfZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbncuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9udy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob253LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9leGUucmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXFdpbk1haW4uYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3JlYWRtZS50eHQgYi9QQy9WUzcuMS9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmQ4YTcwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotQnVpbGRpbmcgUHl0aG9uIHVzaW5nIFZDKysgNy4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgcGxhdGZvcm1zLCBlLmcuIFdpbmRvd3MKLTk1LCA5OCBhbmQgTlQuICBJdCByZXF1aXJlcyBNaWNyb3NvZnQgVmlzdWFsIEMrKyA3LjEKLShhLmsuYS4gVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMpLgotKEZvciBvdGhlciBXaW5kb3dzIHBsYXRmb3JtcyBhbmQgY29tcGlsZXJzLCBzZWUgLi4vUEMvcmVhZG1lLnR4dC4pCi0KLUFsbCB5b3UgbmVlZCB0byBkbyBpcyBvcGVuIHRoZSB3b3Jrc3BhY2UgInBjYnVpbGQuc2xuIiBpbiBNU1ZDKyssIHNlbGVjdAotdGhlIERlYnVnIG9yIFJlbGVhc2Ugc2V0dGluZyAodXNpbmcgIlNvbHV0aW9uIENvbmZpZ3VyYXRpb24iIGZyb20KLXRoZSAiU3RhbmRhcmQiIHRvb2xiYXIiKSwgYW5kIGJ1aWxkIHRoZSBwcm9qZWN0cy4KLQotVGhlIHByb3BlciBvcmRlciB0byBidWlsZCBzdWJwcm9qZWN0czoKLQotMSkgcHl0aG9uY29yZSAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIERMTCBhbmQgbGlicmFyeSBmaWxlcywKLSAgICAgICAgICAgICAgIHB5dGhvbjMzLntkbGwsIGxpYn0gaW4gUmVsZWFzZSBtb2RlKQotICAgICAgICAgICAgICBOT1RFOiAgaW4gcHJldmlvdXMgcmVsZWFzZXMsIHRoaXMgc3VicHJvamVjdCB3YXMKLSAgICAgICAgICAgICAgbmFtZWQgYWZ0ZXIgdGhlIHJlbGVhc2UgbnVtYmVyLCBlLmcuIHB5dGhvbjIwLgotCi0yKSBweXRob24gKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBleGVjdXRhYmxlLAotICAgICAgICAgICBweXRob24uZXhlIGluIFJlbGVhc2UgbW9kZSkKLQotMykgdGhlIG90aGVyIHN1YnByb2plY3RzLCBhcyBkZXNpcmVkIG9yIG5lZWRlZCAobm90ZTogIHlvdSBwcm9iYWJseSBkb24ndAotICAgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzIHlvdSdyZSBidWlsZGluZyBhbgotICAgZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvciBzcGVjaWZpY2FsbHkgbWFraW5nIGNoYW5nZXMKLSAgIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50LCBvciBhcmUgcnVubmluZyBhIFB5dGhvbiBjb3JlIGJ1aWxkYm90Ci0gICB0ZXN0IHNsYXZlOyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uCi0KLVNVQlBST0pFQ1RTCi0tLS0tLS0tLS0tLQotVGhlc2Ugc3VicHJvamVjdHMgc2hvdWxkIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgU3VicHJvamVjdHMgb3RoZXIgdGhhbiB0aGUKLW1haW4gb25lcyAocHl0aG9uY29yZSwgcHl0aG9uLCBweXRob253KSBnZW5lcmFsbHkgYnVpbGQgYSBETEwgKHJlbmFtZWQgdG8KLS5weWQpIGZyb20gYSBzcGVjaWZpYyBtb2R1bGUgc28gdGhhdCB1c2VycyBkb24ndCBoYXZlIHRvIGxvYWQgdGhlIGNvZGUKLXN1cHBvcnRpbmcgdGhhdCBtb2R1bGUgdW5sZXNzIHRoZXkgaW1wb3J0IHRoZSBtb2R1bGUuCi0KLXB5dGhvbmNvcmUKLSAgICAuZGxsIGFuZCAubGliCi1weXRob24KLSAgICAuZXhlCi1weXRob253Ci0gICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94Ci1fc29ja2V0Ci0gICAgc29ja2V0bW9kdWxlLmMKLV90ZXN0Y2FwaQotICAgIHRlc3RzIG9mIHRoZSBQeXRob24gQyBBUEksIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9jYXBpLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwotcHlleHBhdAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBhY2NlbGVyYXRlZCBYTUwgcGFyc2luZywgd2hpY2ggaW5jb3Jwb3JhdGVzIHN0YWJsZQotICAgIGNvZGUgZnJvbSB0aGUgRXhwYXQgcHJvamVjdDogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwYXQvCi1zZWxlY3QKLSAgICBzZWxlY3Rtb2R1bGUuYwotdW5pY29kZWRhdGEKLSAgICBsYXJnZSB0YWJsZXMgb2YgVW5pY29kZSBkYXRhCi13aW5zb3VuZAotICAgIHBsYXkgc291bmRzICh0eXBpY2FsbHkgLndhdiBmaWxlcykgdW5kZXIgV2luZG93cwotCi1UaGUgZm9sbG93aW5nIHN1YnByb2plY3RzIHdpbGwgZ2VuZXJhbGx5IE5PVCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFRoZXkKLXdyYXAgY29kZSBQeXRob24gZG9lc24ndCBjb250cm9sLCBhbmQgeW91J2xsIG5lZWQgdG8gZG93bmxvYWQgdGhlIGJhc2UKLXBhY2thZ2VzIGZpcnN0IGFuZCB1bnBhY2sgdGhlbSBpbnRvIHNpYmxpbmdzIG9mIFBDJ3MgcGFyZW50Ci1kaXJlY3Rvcnk7IGZvciBleGFtcGxlLCBpZiB0aGlzIGRpcmVjdG9yeSBpcyAuLi4uXGRpc3RcdHJ1bmtcUENcVlM3LjEsCi11bnBhY2sgaW50byBuZXcgc3ViZGlyZWN0b3JpZXMgb2YgZGlzdFwuCi0KLV90a2ludGVyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBUayB3aW5kb3dpbmcgc3lzdGVtLiAgUmVxdWlyZXMgYnVpbGRpbmcKLSAgICBUY2wvVGsgZmlyc3QuICBGb2xsb3dpbmcgYXJlIGluc3RydWN0aW9ucyBmb3IgVGNsL1RrIDguNC4xMi4KLQotICAgIEdldCBzb3VyY2UKLSAgICAtLS0tLS0tLS0tCi0gICAgSW4gdGhlIGRpc3QgZGlyZWN0b3J5LCBydW4KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2w4LjQuMTIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90azguNC4xMgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RpeC04LjQuMAotCi0gICAgQnVpbGQgVGNsIGZpcnN0IChkb25lIGhlcmUgdy8gTVNWQyA3LjEgb24gV2luZG93cyBYUCkKLSAgICAtLS0tLS0tLS0tLS0tLS0KLSAgICBVc2UgIlN0YXJ0IC0+IEFsbCBQcm9ncmFtcyAtPiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMKLSAgICAgICAgIC0+IFZpc3VhbCBTdHVkaW8gLk5FVCBUb29scyAtPiBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMyBDb21tYW5kIFByb21wdCIKLSAgICB0byBnZXQgYSBzaGVsbCB3aW5kb3cgd2l0aCB0aGUgY29ycmVjdCBlbnZpcm9ubWVudCBzZXR0aW5ncwotICAgIGNkIGRpc3RcdGNsOC40LjEyXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBPcHRpb25hbDogIHJ1biB0ZXN0cywgdmlhCi0gICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIHRlc3QKLQotICAgICAgICBPbiBXaW5YUCBQcm8sIHdob2xseSB1cCB0byBkYXRlIGFzIG9mIDMwLUF1Zy0yMDA0OgotICAgICAgICBhbGwudGNsOiAgICAgICAgVG90YWwgICAxMDY3OCAgIFBhc3NlZCAgOTk2OSAgICBTa2lwcGVkIDcwOSAgICAgRmFpbGVkICAwCi0gICAgICAgIFNvdXJjZWQgMTI5IFRlc3QgRmlsZXMuCi0KLSAgICBCdWlsZCBUawotICAgIC0tLS0tLS0tCi0gICAgY2QgZGlzdFx0azguNC4xMlx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC40LjEyCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMiBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIFhYWCBPdXIgaW5zdGFsbGVyIGNvcGllcyBhIGxvdCBvZiBzdHVmZiBvdXQgb2YgdGhlIFRjbC9UayBpbnN0YWxsCi0gICAgWFhYIGRpcmVjdG9yeS4gIElzIGFsbCBvZiB0aGF0IHJlYWxseSBuZWVkZWQgZm9yIFB5dGhvbiB1c2Ugb2YgVGNsL1RrPwotCi0gICAgT3B0aW9uYWw6ICBydW4gdGVzdHMsIHZpYQotICAgICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC40LjEyIHRlc3QKLQotICAgICAgICBPbiBXaW5YUCBQcm8sIHdob2xseSB1cCB0byBkYXRlIGFzIG9mIDMwLUF1Zy0yMDA0OgotICAgICAgICBhbGwudGNsOiAgICAgICAgVG90YWwgICA4NDIwICAgIFBhc3NlZCAgNjgyNiAgICBTa2lwcGVkIDE1ODEgICAgRmFpbGVkICAxMwotICAgICAgICBTb3VyY2VkIDkxIFRlc3QgRmlsZXMuCi0gICAgICAgIEZpbGVzIHdpdGggZmFpbGluZyB0ZXN0czogY2FudkltZy50ZXN0IHNjcm9sbGJhci50ZXN0IHRleHRXaW5kLnRlc3Qgd2luV20udGVzdAotCi0gICBCdWlsdCBUaXgKLSAgIC0tLS0tLS0tLQotICAgY2QgZGlzdFx0aXgtOC40LjBcd2luCi0gICBubWFrZSAtZiBweXRob24ubWFrCi0gICBubWFrZSAtZiBweXRob24ubWFrIGluc3RhbGwKLQotYnoyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJiejIgY29tcHJlc3Npb24gbGlicmFyeS4gIEhvbWVwYWdlCi0gICAgICAgIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnppcDIvCi0gICAgRG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBweXRob24ub3JnIGNvcHkgaW50byB0aGUgZGlzdAotICAgIGRpcmVjdG9yeToKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC4zCi0KLSAgICBBIGN1c3RvbSBwcmUtbGluayBzdGVwIGluIHRoZSBiejIgcHJvamVjdCBzZXR0aW5ncyBzaG91bGQgbWFuYWdlIHRvCi0gICAgYnVpbGQgYnppcDItMS4wLjNcbGliYnoyLmxpYiBieSBtYWdpYyBiZWZvcmUgYnoyLnB5ZCAob3IgYnoyX2QucHlkKSBpcwotICAgIGxpbmtlZCBpbiBWUzcuMVwuCi0gICAgSG93ZXZlciwgdGhlIGJ6MiBwcm9qZWN0IGlzIG5vdCBzbWFydCBlbm91Z2ggdG8gcmVtb3ZlIGFueXRoaW5nIHVuZGVyCi0gICAgYnppcDItMS4wLjNcIHdoZW4geW91IGRvIGEgY2xlYW4sIHNvIGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgYnppcDIubGliCi0gICAgeW91IG5lZWQgdG8gY2xlYW4gdXAgYnppcDItMS4wLjNcIGJ5IGhhbmQuCi0KLSAgICBUaGUgYnVpbGQgc3RlcCBzaG91bGRuJ3QgeWllbGQgYW55IHdhcm5pbmdzIG9yIGVycm9ycywgYW5kIHNob3VsZCBlbmQKLSAgICBieSBkaXNwbGF5aW5nIDYgYmxvY2tzIGVhY2ggdGVybWluYXRlZCB3aXRoCi0gICAgICAgIEZDOiBubyBkaWZmZXJlbmNlcyBlbmNvdW50ZXJlZAotCi0gICAgQWxsIG9mIHRoaXMgbWFuYWdlZCB0byBidWlsZCBiemlwMi0xLjAuM1xsaWJiejIubGliLCB3aGljaCB0aGUgUHl0aG9uCi0gICAgcHJvamVjdCBsaW5rcyBpbi4KLQotX3NxbGl0ZTMKLSAgICBQeXRob24gd3JhcHBlciBmb3IgU1FMaXRlIGxpYnJhcnkuCi0gICAgCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCi0gICAgCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvc3FsaXRlLXNvdXJjZS0zLjMuNAotICAgIAotICAgIFRvIHVzZSB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpbiBhIFB5dGhvbiBidWlsZCB0cmVlLCBjb3B5IHNxbGl0ZTMuZGxsIGludG8KLSAgICB0aGUgVlM3LjEgZm9sZGVyLgotCi1fc3NsCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBzZWN1cmUgc29ja2V0cyBsaWJyYXJ5LgotCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCi0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9vcGVuc3NsLTAuOS44YQotCi0gICAgQWx0ZXJuYXRpdmVseSwgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcuCi0gICAgWW91IGNhbiAodGhlb3JldGljYWxseSkgdXNlIGFueSB2ZXJzaW9uIG9mIE9wZW5TU0wgeW91IGxpa2UgLSB0aGUKLSAgICBidWlsZCBwcm9jZXNzIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGxhdGVzdCB2ZXJzaW9uLgotCi0gICAgWW91IG11c3QgYWxzbyBpbnN0YWxsIEFjdGl2ZVBlcmwgZnJvbQotICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9Qcm9kdWN0cy9BY3RpdmVQZXJsLwotICAgIGFzIHRoaXMgaXMgdXNlZCBieSB0aGUgT3BlblNTTCBidWlsZCBwcm9jZXNzLiAgQ29tcGxhaW4gdG8gdGhlbSA8d2luaz4uCi0KLSAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIGJ1aWxkX3NzbC5weSB0byBwZXJmb3JtCi0gICAgdGhlIGJ1aWxkLiAgVGhpcyBQeXRob24gc2NyaXB0IGxvY2F0ZXMgYW5kIGJ1aWxkcyB5b3VyIE9wZW5TU0wKLSAgICBpbnN0YWxsYXRpb24sIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBtYWtlZmlsZSB0byBidWlsZCB0aGUgZmluYWwgLnB5ZC4KLQotICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAotICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQotICAgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCi0KLSAgICBidWlsZF9zc2wucHkvTVNWQyBpc24ndCBjbGV2ZXIgZW5vdWdoIHRvIGNsZWFuIE9wZW5TU0wgLSB5b3UgbXVzdCBkbwotICAgIHRoaXMgYnkgaGFuZC4KLQotQnVpbGRpbmcgZm9yIEl0YW5pdW0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBwcm9qZWN0IGZpbGVzIHN1cHBvcnQgYSBSZWxlYXNlSXRhbml1bSBjb25maWd1cmF0aW9uIHdoaWNoIGNyZWF0ZXMKLVdpbjY0L0l0YW5pdW0gYmluYXJpZXMuIEZvciB0aGlzIHRvIHdvcmssIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIFBsYXRmb3JtCi1TREssIGluIHBhcnRpY3VsYXIgdGhlIDY0LWJpdCBzdXBwb3J0LiBUaGlzIGluY2x1ZGVzIGFuIEl0YW5pdW0gY29tcGlsZXIKLShmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIFNESyBsaWtlbHkgaW5jbHVkZSBhbiBBTUQ2NCBjb21waWxlciBhcyB3ZWxsKS4KLUluIGFkZGl0aW9uLCB5b3UgbmVlZCB0aGUgVmlzdWFsIFN0dWRpbyBwbHVnaW4gZm9yIGV4dGVybmFsIEMgY29tcGlsZXJzLAotZnJvbSBodHRwOi8vc2YubmV0L3Byb2plY3RzL3ZzZXh0Y29tcC4gVGhlIHBsdWdpbiB3aWxsIHdyYXAgY2wuZXhlLCB0bwotbG9jYXRlIHRoZSBwcm9wZXIgdGFyZ2V0IGNvbXBpbGVyLCBhbmQgY29udmVydCBjb21waWxlciBvcHRpb25zCi1hY2NvcmRpbmdseS4gVGhlIHByb2plY3QgZmlsZXMgcmVxdWlyZSBhdGxlYXN0IHZlcnNpb24gMC45LgotCi1CdWlsZGluZyBmb3IgQU1ENjQKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIFJlbGVhc2VBTUQ2NCBjb25maWd1cmF0aW9uIGlzIHZlcnkgc2ltaWxhcgotdG8gdGhlIEl0YW5pdW0gY29uZmlndXJhdGlvbjsgbWFrZSBzdXJlIHlvdSB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mCi12c2V4dGNvbXAuCi0KLUJ1aWxkaW5nIFB5dGhvbiBVc2luZyB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgYnVpbGQgcHJvY2VzcyBmb3IgVmlzdWFsIEMrKyBjYW4gYmUgdXNlZCBhbG1vc3QgdW5jaGFuZ2VkIHdpdGggdGhlIGZyZWUgTVMKLVRvb2xraXQgQ29tcGlsZXIuIFRoaXMgcHJvdmlkZXMgYSB3YXkgb2YgYnVpbGRpbmcgUHl0aG9uIHVzaW5nIGZyZWVseQotYXZhaWxhYmxlIHNvZnR3YXJlLgotCi1Ob3RlIHRoYXQgTWljcm9zb2Z0IGhhdmUgd2l0aGRyYXduIHRoZSBmcmVlIE1TIFRvb2xraXQgQ29tcGlsZXIsIHNvIHRoaXMgY2FuCi1ubyBsb25nZXIgYmUgY29uc2lkZXJlZCBhIHN1cHBvcnRlZCBvcHRpb24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHN0aWxsCi1jb3JyZWN0LCBidXQgeW91IG5lZWQgdG8gYWxyZWFkeSBoYXZlIGEgY29weSBvZiB0aGUgY29tcGlsZXIgaW4gb3JkZXIgdG8gdXNlCi10aGVtLiBNaWNyb3NvZnQgbm93IHN1cHBseSBWaXN1YWwgQysrIDIwMDggRXhwcmVzcyBFZGl0aW9uIGZvciBmcmVlLCBidXQgdGhpcwotaXMgTk9UIGNvbXBhdGlibGUgd2l0aCBWaXN1YWwgQysrIDcuMSAoaXQgdXNlcyBhIGRpZmZlcmVudCBDIHJ1bnRpbWUpLCBhbmQgc28KLWNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBQeXRob24gY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZAotcHl0aG9uLm9yZyBidWlsZC4gSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHVzaW5nIFZpc3VhbCBDKysgMjAwOCBFeHByZXNzCi1FZGl0aW9uLCBob3dldmVyLCB5b3Ugc2hvdWxkIGxvb2sgYXQgdGhlIFBDQnVpbGQgZGlyZWN0b3J5LgotCi1SZXF1aXJlbWVudHMKLQotICAgIFRvIGJ1aWxkIFB5dGhvbiwgdGhlIGZvbGxvd2luZyB0b29scyBhcmUgcmVxdWlyZWQ6Ci0KLSAgICAqIFRoZSBWaXN1YWwgQysrIFRvb2xraXQgQ29tcGlsZXIKLSAgICAgICAgbm8gbG9uZ2VyIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgLSBzZWUgYWJvdmUKLSAgICAqIEEgcmVjZW50IFBsYXRmb3JtIFNESwotICAgICAgICBmcm9tIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZGV0YWlscy5hc3B4P0ZhbWlseUlEPTQ4NDI2OWUyLTNiODktNDdlMy04ZWI3LTFmMmJlNmQ3MTIzYQotICAgICogVGhlIC5ORVQgMS4xIFNESwotICAgICAgICBmcm9tIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZGV0YWlscy5hc3B4P0ZhbWlseUlEPTliM2EyY2E2LTM2NDctNDA3MC05ZjQxLWEzMzNjNmI5MTgxZAotCi0gICAgW0RvZXMgYW55b25lIGhhdmUgYmV0dGVyIFVSTHMgZm9yIHRoZSBsYXN0IDIgb2YgdGhlc2U/XQotCi0gICAgVGhlIHRvb2xraXQgY29tcGlsZXIgaXMgbmVlZGVkIGFzIGl0IGlzIGFuIG9wdGltaXNpbmcgY29tcGlsZXIgKHRoZQotICAgIGNvbXBpbGVyIHN1cHBsaWVkIHdpdGggdGhlIC5ORVQgU0RLIGlzIGEgbm9uLW9wdGltaXNpbmcgdmVyc2lvbikuIFRoZQotICAgIHBsYXRmb3JtIFNESyBpcyBuZWVkZWQgdG8gcHJvdmlkZSB0aGUgV2luZG93cyBoZWFkZXIgZmlsZXMgYW5kIGxpYnJhcmllcwotICAgICh0aGUgV2luZG93cyAyMDAzIFNlcnZlciBTUDEgZWRpdGlvbiwgdHlwaWNhbCBpbnN0YWxsLCBpcyBrbm93biB0byB3b3JrIC0KLSAgICBvdGhlciBjb25maWd1cmF0aW9ucyBvciB2ZXJzaW9ucyBhcmUgcHJvYmFibHkgZmluZSBhcyB3ZWxsKS4gVGhlIC5ORVQgMS4xCi0gICAgU0RLIGlzIG5lZWRlZCBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgdmVyc2lvbiBvZiBtc3ZjcnQuZGxsIHdoaWNoIGxpbmtzIHRvCi0gICAgdGhlIG1zdmNyNzEuZGxsIENSVC4gTm90ZSB0aGF0IHRoZSAuTkVUIDIuMCBTREsgaXMgTk9UIGFjY2VwdGFibGUsIGFzIGl0Ci0gICAgcmVmZXJlbmNlcyBtc3ZjcjgwLmRsbC4KLQotICAgIEFsbCBvZiB0aGUgYWJvdmUgaXRlbXMgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyBub3JtYWwuCi0KLSAgICBJZiB5b3UgaW50ZW5kIHRvIGJ1aWxkIHRoZSBvcGVuc3NsIChuZWVkZWQgZm9yIHRoZSBfc3NsIGV4dGVuc2lvbikgeW91Ci0gICAgd2lsbCBuZWVkIHRoZSBDIHJ1bnRpbWUgc291cmNlcyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgcGxhdGZvcm0gU0RLLgotCi0gICAgSW4gYWRkaXRpb24sIHlvdSB3aWxsIG5lZWQgTmFudCwgYXZhaWxhYmxlIGZyb20KLSAgICBodHRwOi8vbmFudC5zb3VyY2Vmb3JnZS5uZXQuIFRoZSAwLjg1IHJlbGVhc2UgY2FuZGlkYXRlIDMgdmVyc2lvbiBpcyBrbm93bgotICAgIHRvIHdvcmsuIFRoaXMgaXMgdGhlIGxhdGVzdCByZWxlYXNlZCB2ZXJzaW9uIGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcuIExhdGVyCi0gICAgIm5pZ2h0bHkgYnVpbGQiIHZlcnNpb25zIGFyZSBrbm93biBOT1QgdG8gd29yayAtIGl0IGlzIG5vdCBjbGVhciBhdAotICAgIHByZXNlbnQgd2hldGhlciBmdXR1cmUgcmVsZWFzZWQgdmVyc2lvbnMgd2lsbCB3b3JrLgotCi1TZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudAotCi0gICAgU3RhcnQgYSBwbGF0Zm9ybSBTREsgImJ1aWxkIGVudmlyb25tZW50IHdpbmRvdyIgZnJvbSB0aGUgc3RhcnQgbWVudS4gVGhlCi0gICAgIldpbmRvd3MgWFAgMzItYml0IHJldGFpbCIgdmVyc2lvbiBpcyBrbm93biB0byB3b3JrLgotCi0gICAgQWRkIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgdG8geW91ciBQQVRIOgotICAgICAgICAqIFRoZSB0b29sa2l0IGNvbXBpbGVyIGRpcmVjdG9yeQotICAgICAgICAqIFRoZSBTREsgIldpbjY0IiBiaW5hcmllcyBkaXJlY3RvcnkKLQkqIFRoZSBOYW50IGRpcmVjdG9yeQotICAgIEFkZCB0byB5b3VyIElOQ0xVREUgZW52aXJvbm1lbnQgdmFyaWFibGU6Ci0gICAgICAgICogVGhlIHRvb2xraXQgY29tcGlsZXIgSU5DTFVERSBkaXJlY3RvcnkKLSAgICBBZGQgdG8geW91ciBMSUIgZW52aXJvbm1lbnQgdmFyaWFibGU6Ci0gICAgICAgICogVGhlIHRvb2xraXQgY29tcGlsZXIgTElCIGRpcmVjdG9yeQotCSogVGhlIC5ORVQgU0RLIFZpc3VhbCBTdHVkaW8gMjAwMyBWQzdcbGliIGRpcmVjdG9yeQotCi0gICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBzaG91bGQgc2V0IHRoaW5ncyB1cCBhcyB5b3UgbmVlZCB0aGVtOgotCi0gICAgICAgIHJlbSBTZXQgdGhlc2UgdmFsdWVzIGFjY29yZGluZyB0byB3aGVyZSB5b3UgaW5zdGFsbGVkIHRoZSBzb2Z0d2FyZQotICAgICAgICBzZXQgVE9PTEtJVD1DOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgQysrIFRvb2xraXQgMjAwMwotICAgICAgICBzZXQgU0RLPUM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFBsYXRmb3JtIFNESwotICAgICAgICBzZXQgTkVUPUM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzCi0gICAgICAgIHNldCBOQU5UPUM6XFV0aWxzXE5hbnQKLQotICAgICAgICBzZXQgUEFUSD0lVE9PTEtJVCVcYmluOyVQQVRIJTslU0RLJVxCaW5cd2luNjQ7JU5BTlQlXGJpbgotICAgICAgICBzZXQgSU5DTFVERT0lVE9PTEtJVCVcaW5jbHVkZTslSU5DTFVERSUKLSAgICAgICAgc2V0IExJQj0lVE9PTEtJVCVcbGliOyVORVQlXFZDN1xsaWI7JUxJQiUKLQotICAgIFRoZSAid2luNjQiIGRpcmVjdG9yeSBmcm9tIHRoZSBTREsgaXMgYWRkZWQgdG8gc3VwcGx5IGV4ZWN1dGFibGVzIHN1Y2ggYXMKLSAgICAiY3Z0cmVzIiBhbmQgImxpYiIsIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIGVsc2V3aGVyZS4gVGhlIHZlcnNpb25zIGluIHRoZQotICAgICJ3aW42NCIgZGlyZWN0b3J5IGFyZSAzMi1iaXQgcHJvZ3JhbXMsIHNvIHRoZXkgYXJlIGZpbmUgdG8gdXNlIGhlcmUuCi0KLSAgICBUaGF0J3MgaXQuIFRvIGJ1aWxkIFB5dGhvbiAodGhlIGNvcmUgb25seSwgbm8gYmluYXJ5IGV4dGVuc2lvbnMgd2hpY2gKLSAgICBkZXBlbmQgb24gZXh0ZXJuYWwgbGlicmFyaWVzKSB5b3UganVzdCBuZWVkIHRvIGlzc3VlIHRoZSBjb21tYW5kCi0KLSAgICAgICAgbmFudCAtYnVpbGRmaWxlOnB5dGhvbi5idWlsZCBhbGwKLQotICAgIGZyb20gd2l0aGluIHRoZSBWUzcuMSBkaXJlY3RvcnkuCi0KLUV4dGVuc2lvbiBtb2R1bGVzCi0KLSAgICBUbyBidWlsZCB0aG9zZSBleHRlbnNpb24gbW9kdWxlcyB3aGljaCByZXF1aXJlIGV4dGVybmFsIGxpYnJhcmllcwotICAgIChfdGtpbnRlciwgYnoyLCBfc3FsaXRlMywgX3NzbCkgeW91IGNhbiBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwotICAgIGZvciB0aGUgVmlzdWFsIFN0dWRpbyBidWlsZCBhYm92ZSwgd2l0aCBhIGZldyBtaW5vciBtb2RpZmljYXRpb25zLiBUaGVzZQotICAgIGluc3RydWN0aW9ucyBoYXZlIG9ubHkgYmVlbiB0ZXN0ZWQgdXNpbmcgdGhlIHNvdXJjZXMgaW4gdGhlIFB5dGhvbgotICAgIHN1YnZlcnNpb24gcmVwb3NpdG9yeSAtIGJ1aWxkaW5nIGZyb20gb3JpZ2luYWwgc291cmNlcyBzaG91bGQgd29yaywgYnV0Ci0gICAgaGFzIG5vdCBiZWVuIHRlc3RlZC4KLQotICAgIEZvciBlYWNoIGV4dGVuc2lvbiBtb2R1bGUgeW91IHdpc2ggdG8gYnVpbGQsIHlvdSBzaG91bGQgcmVtb3ZlIHRoZQotICAgIGFzc29jaWF0ZWQgaW5jbHVkZSBsaW5lIGZyb20gdGhlIGV4Y2x1ZGVwcm9qZWN0cyBzZWN0aW9uIG9mIHBjLmJ1aWxkLgotCi0gICAgVGhlIGNoYW5nZXMgcmVxdWlyZWQgYXJlOgotCi0gICAgX3RraW50ZXIKLSAgICAgICAgVGhlIHRpeCBtYWtlZmlsZSAodGl4LTguNC4wXHdpblxtYWtlZmlsZS52YykgbXVzdCBiZSBtb2RpZmllZCB0bwotCXJlbW92ZSByZWZlcmVuY2VzIHRvIFRPT0xTMzIuIFRoZSByZWxldmFudCBsaW5lcyBzaG91bGQgYmUgY2hhbmdlZCB0bwotCXJlYWQ6Ci0gICAgICAgICAgICBjYzMyID0gY2wuZXhlCi0gICAgICAgICAgICBsaW5rMzIgPSBsaW5rLmV4ZQotICAgICAgICAgICAgaW5jbHVkZTMyID0gCi0JVGhlIHJlbWFpbmRlciBvZiB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIHdpbGwgd29yayBhcyBnaXZlbi4KLQotICAgIGJ6MgotICAgICAgICBObyBjaGFuZ2VzIGFyZSBuZWVkZWQKLQotICAgIF9zcWxpdGUzCi0gICAgICAgIE5vIGNoYW5nZXMgYXJlIG5lZWRlZC4gSG93ZXZlciwgaW4gb3JkZXIgZm9yIHRoZSB0ZXN0cyB0byBzdWNjZWVkLCBhCi0JY29weSBvZiBzcWxpdGUzLmRsbCBtdXN0IGJlIGRvd25sb2FkZWQsIGFuZCBwbGFjZWQgYWxvbmdzaWRlCi0JcHl0aG9uLmV4ZS4KLQotICAgIF9zc2wKLSAgICAgICAgVGhlIGRvY3VtZW50ZWQgYnVpbGQgcHJvY2VzcyB3b3JrcyBhcyB3cml0dGVuLiBIb3dldmVyLCBpdCBuZWVkcyBhCi0JY29weSBvZiB0aGUgZmlsZSBzZXRhcmd2Lm9iaiwgd2hpY2ggaXMgbm90IHN1cHBsaWVkIGluIHRoZSBwbGF0Zm9ybQotCVNESy4gSG93ZXZlciwgdGhlIHNvdXJjZXMgYXJlIGF2YWlsYWJsZSAoaW4gdGhlIGNydCBzb3VyY2UgY29kZSkuIFRvCi0JYnVpbGQgc2V0YXJndi5vYmosIHByb2NlZWQgYXMgZm9sbG93czoKLQotICAgICAgICBDb3B5IHNldGFyZ3YuYywgY3J1bnRpbWUuaCBhbmQgaW50ZXJuYWwuaCBmcm9tICVTREslXHNyY1xjcnQgdG8gYQotCXRlbXBvcmFyeSBkaXJlY3RvcnkuCi0JQ29tcGlsZSB1c2luZyAiY2wgL2MgL0kuIC9NRCAvRF9DUlRCTEQgc2V0YXJndi5jIgotCUNvcHkgdGhlIHJlc3VsdGluZyBzZXRhcmd2Lm9iaiB0byBzb21ld2hlcmUgb24geW91ciBMSUIgZW52aXJvbm1lbnQKLQkoJVNESyVcbGliIGlzIGEgcmVhc29uYWJsZSBwbGFjZSkuCi0KLQlXaXRoIHNldGFyZ3Yub2JqIGluIHBsYWNlLCB0aGUgc3RhbmRhcmQgYnVpbGQgcHJvY2VzcyBzaG91bGQgd29yawotCWZpbmUuCi0KLVlPVVIgT1dOIEVYVEVOU0lPTiBETExzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGV4dGVuc2lvbiBtb2R1bGUgRExMLCB0aGVyZSdzIGFuIGV4YW1wbGUKLXdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uL1BDL2V4YW1wbGUvOyByZWFkIHRoZSBmaWxlCi1yZWFkbWUudHh0IHRoZXJlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcm1weWMucHkgYi9QQy9WUzcuMS9ybXB5Yy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNjODU3Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9ybXB5Yy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUmVtb3ZlIGFsbCB0aGUgLnB5YyBhbmQgLnB5byBmaWxlcyB1bmRlciAuLi9MaWIuCi0KLQotZGVmIGRlbHRyZWUocm9vdCk6Ci0gICAgaW1wb3J0IG9zCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCi0KLSAgICBucHljID0gbnB5byA9IDAKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhyb290KToKLSAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBkZWxldGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5YycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHljICs9IDEKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHlvICs9IDEKLQotICAgICAgICAgICAgaWYgZGVsZXRlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShqb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmV0dXJuIG5weWMsIG5weW8KLQotbnB5YywgbnB5byA9IGRlbHRyZWUoIi4uL0xpYiIpCi1wcmludCBucHljLCAiLnB5YyBkZWxldGVkLCIsIG5weW8sICIucHlvIGRlbGV0ZWQiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9ydC5iYXQgYi9QQy9WUzcuMS9ydC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE5MTBhNzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcnQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gUnVuIFRlc3RzLiAgUnVuIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUuCi1yZW0gVXNhZ2U6ICBydCBbLWRdIFstT10gWy1xXSByZWdydGVzdF9hcmdzCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi1yZW0gLU8gICBSdW4gcHl0aG9uLmV4ZSBvciBweXRob25fZC5leGUgKHNlZSAtZCkgd2l0aCAtTy4KLXJlbSAtcSAgICJxdWljayIgLS0gbm9ybWFsbHkgdGhlIHRlc3RzIGFyZSBydW4gdHdpY2UsIHRoZSBmaXJzdCB0aW1lCi1yZW0gICAgICBhZnRlciBkZWxldGluZyBhbGwgdGhlIC5weVtjb10gZmlsZXMgcmVhY2hhYmxlIGZyb20gTGliLy4KLXJlbSAgICAgIC1xIHJ1bnMgdGhlIHRlc3RzIGp1c3Qgb25jZSwgYW5kIHdpdGhvdXQgZGVsZXRpbmcgLnB5W2NvXSBmaWxlcy4KLXJlbSBBbGwgbGVhZGluZyBpbnN0YW5jZXMgb2YgdGhlc2Ugc3dpdGNoZXMgYXJlIHNoaWZ0ZWQgb2ZmLCBhbmQKLXJlbSB3aGF0ZXZlciByZW1haW5zIGlzIHBhc3NlZCB0byByZWdydGVzdC5weS4gIEZvciBleGFtcGxlLAotcmVtICAgICBydCAtTyAtZCAteCB0ZXN0X3RocmVhZAotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLU8gLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLXggdGVzdF90aHJlYWQKLXJlbSB0d2ljZSwgYW5kCi1yZW0gICAgIHJ0IC1xIC1nIHRlc3RfYmluYXNjaWkKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1nIHRlc3RfYmluYXNjaWkKLXJlbSB0byBnZW5lcmF0ZSB0aGUgZXhwZWN0ZWQtb3V0cHV0IGZpbGUgZm9yIGJpbmFzY2lpIHF1aWNrbHkuCi1yZW0KLXJlbSBDb25mdXNpbmc6ICBpZiB5b3Ugd2FudCB0byBwYXNzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIGxpa2UKLXJlbSAgICAgLXUgbmV0d29yayxsYXJnZWZpbGUKLXJlbSB0aGVuIHlvdSBoYXZlIHRvIHF1b3RlIGl0IG9uIHRoZSBydCBsaW5lLCBsaWtlCi1yZW0gICAgIHJ0IC11ICJuZXR3b3JrLGxhcmdlZmlsZSIKLQotc2V0bG9jYWwKLQotc2V0IGV4ZT1weXRob24KLXNldCBxbW9kZT0KLXNldCBkYXNoTz0KLVBBVEggJVBBVEglOyV+ZHAwLi5cLi5cLi5cdGNsdGtcYmluCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItTyIgKHNldCBkYXNoTz0tTykgICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1xIiAoc2V0IHFtb2RlPXllcykgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLWQiIChzZXQgZXhlPXB5dGhvbl9kKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IGNtZD0lZXhlJSAlZGFzaE8lIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci1pZiBkZWZpbmVkIHFtb2RlIGdvdG8gUW1vZGUKLQotZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uCi0lZXhlJSBybXB5Yy5weQotCi1lY2hvIG9uCi0lY21kJQotQGVjaG8gb2ZmCi0KLWVjaG8gQWJvdXQgdG8gcnVuIGFnYWluIHdpdGhvdXQgZGVsZXRpbmcgLnB5Yy8ucHlvIGZpcnN0OgotcGF1c2UKLQotOlFtb2RlCi1lY2hvIG9uCi0lY21kJQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvc2VsZWN0LnZjcHJvaiBiL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNTJkNDUuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvc2VsZWN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0ic2VsZWN0Ig0KLQlTY2NQcm9qZWN0TmFtZT0ic2VsZWN0Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2Vcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMsbXN2Y3J0Ig0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3RfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3RfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2Vcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzZWxlY3Rtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3VuaWNvZGVkYXRhLnZjcHJvaiBiL1BDL1ZTNy4xL3VuaWNvZGVkYXRhLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0N2Y5Yi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InVuaWNvZGVkYXRhIg0KLQlTY2NQcm9qZWN0TmFtZT0idW5pY29kZWRhdGEiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGEucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGFfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGFfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGEucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGEucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM3LjEvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWYzYjRlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVNjY1Byb2plY3ROYW1lPSIiDQotCVNjY0xvY2FsUGF0aD0iIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1x3OXhwb3BlbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3c5eHBvcGVuX2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdzl4cG9wZW5fZC5wZGIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHc5eHBvcGVuIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi93OXhwb3Blbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdzl4cG9wZW4ucGRiIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHc5eHBvcGVuLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2ogYi9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNGNmMzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvd2luc291bmQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJ3aW5zb3VuZCINCi0JU2NjUHJvamVjdE5hbWU9IndpbnNvdW5kIg0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXHBjIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1x3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmRfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZF9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHdpbnNvdW5kLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fY3R5cGVzLnZjcHJvaiBiL1BDL1ZTOC4wL19jdHlwZXMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTczMjMzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19jdHlwZXMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNzA1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfY3R5cGVzIg0KLQlQcm9qZWN0R1VJRD0iezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0iDQotCVJvb3ROYW1lc3BhY2U9Il9jdHlwZXMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGN0eXBlcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGN0eXBlc19kbGZjbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaV9jb21tb24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmljb25maWcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZml0YXJnZXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2ZpZWxkLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jIg0KLQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW42NC5hc20iDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9aaSAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHdpbjY0Lm9iaiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHdpbjY0Lm9iaiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHdpbjY0Lm9iaiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19jdHlwZXNfdGVzdC52Y3Byb2ogYi9QQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTcyNDFlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19jdHlwZXNfdGVzdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9jdHlwZXNfdGVzdCINCi0JUHJvamVjdEdVSUQ9Ins5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9Ig0KLQlSb290TmFtZXNwYWNlPSJfY3R5cGVzX3Rlc3QiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fZWxlbWVudHRyZWUudmNwcm9qIGIvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU3ZGE3Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fZWxlbWVudHRyZWUudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNjEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfZWxlbWVudHRyZWUiDQotCVByb2plY3RHVUlEPSJ7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfSINCi0JUm9vdE5hbWVzcGFjZT0iX2VsZW1lbnR0cmVlIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxhc2NpaS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxhc2NpaXRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxleHBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxleHBhdF9jb25maWcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXRfZXh0ZXJuYWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcaWFzY2lpdGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGludGVybmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGxhdGluMXRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxtYWNjb25maWcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcbmFtZXRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxweWV4cGF0bnMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcdXRmOHRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx3aW5jb25maWcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9lbGVtZW50dHJlZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19oYXNobGliLnZjcHJvaiBiL1BDL1ZTOC4wL19oYXNobGliLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAzMWUyZS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9oYXNobGliIg0KLQlQcm9qZWN0R1VJRD0iezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0iDQotCVJvb3ROYW1lc3BhY2U9Il9oYXNobGliIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2hhc2hvcGVuc3NsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX21zaS52Y3Byb2ogYi9QQy9WUzguMC9fbXNpLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk5NzFjNi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fbXNpLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX21zaSINCi0JUHJvamVjdEdVSUQ9InszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9Ig0KLQlSb290TmFtZXNwYWNlPSJfbXNpIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xfbXNpLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2ogYi9QQy9WUzguMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYxY2FmYy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX211bHRpcHJvY2Vzc2luZyINCi0JUHJvamVjdEdVSUQ9Ins5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9Ig0KLQlSb290TmFtZXNwYWNlPSJfbXVsdGlwcm9jZXNzaW5nIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzZW1hcGhvcmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1x3aW4zMl9mdW5jdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fc29ja2V0LnZjcHJvaiBiL1BDL1ZTOC4wL19zb2NrZXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWJkOTgyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19zb2NrZXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfc29ja2V0Ig0KLQlQcm9qZWN0R1VJRD0iezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0iDQotCVJvb3ROYW1lc3BhY2U9Il9zb2NrZXQiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGYxOWYxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3NxbGl0ZTMiDQotCVByb2plY3RHVUlEPSJ7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fSINCi0JUm9vdE5hbWVzcGFjZT0iX3NxbGl0ZTMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3FsaXRlY29tcGF0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3NzbC52Y3Byb2ogYi9QQy9WUzguMC9fc3NsLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkyNjdhNC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3NzbCINCi0JUHJvamVjdEdVSUQ9IntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KLQlSb290TmFtZXNwYWNlPSJfc3NsIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NzbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL190a2ludGVyLnZjcHJvaiBiL1BDL1ZTOC4wL190a2ludGVyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcwMGJkZS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il90a2ludGVyIg0KLQlQcm9qZWN0R1VJRD0iezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQotCVJvb3ROYW1lc3BhY2U9Il90a2ludGVyIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWJEZWJ1ZykiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGs2NERpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0azY0TGliRGVidWcpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGs2NERpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0azY0TGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGs2NERpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0azY0TGliKSINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGs2NERpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0azY0TGliKSINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90a2ludGVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRrYXBwaW5pdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qIGIvUEMvVlM4LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMWVkZjIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImJkaXN0X3dpbmluc3QiDQotCVByb2plY3RHVUlEPSJ7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfSINCi0JUm9vdE5hbWVzcGFjZT0id2luaW5zdCINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJTWtUeXBMaWJDb21wYXRpYmxlPSJ0cnVlIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KLQkJCQlUeXBlTGlicmFyeU5hbWU9Ii5cLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIxIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQzsuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImNvbWN0bDMyLmxpYiBpbWFnZWhscC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC04LjAucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LnRsYiINCi0JCQkJSGVhZGVyRmlsZU5hbWU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZTsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJjb21jdGwzMi5saWIgaW1hZ2VobHAubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC04LjAtYW1kNjQuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLWFtZDY0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGV4dHJhY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcaW5zdGFsbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iemxpYiINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubCINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGFyY2hpdmUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcaW5zdGFsbC5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcUHl0aG9uUG93ZXJlZC5ibXAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGQuYmF0IGIvUEMvVlM4LjAvYnVpbGQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmM4MTg2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIEEgYmF0Y2ggcHJvZ3JhbSB0byBidWlsZCBvciByZWJ1aWxkIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uLgotcmVtIGp1c3QgZm9yIGNvbnZlbmllbmNlLgotCi1zZXRsb2NhbAotc2V0IHBsYXRmPVdpbjMyCi1zZXQgY29uZj1SZWxlYXNlCi1zZXQgYnVpbGQ9L2J1aWxkCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItYyIgKHNldCBjb25mPSUyKSAgICAgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItcCIgKHNldCBwbGF0Zj0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItciIgKHNldCBidWlsZD0vcmVidWlsZCkgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBjbWQ9ZGV2ZW52IHBjYnVpbGQuc2xuICVidWlsZCUgIiVjb25mJXwlcGxhdGYlIgotZWNobyAlY21kJQotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX2Vudi5iYXQgYi9QQy9WUzguMC9idWlsZF9lbnYuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzY3YWUzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX2Vudi5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AJWNvbXNwZWMlIC9rIGVudi5iYXQgJSoKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3Bnby5iYXQgYi9QQy9WUzguMC9idWlsZF9wZ28uYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzdiNWJmLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3Bnby5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBBIGJhdGNoIHByb2dyYW0gdG8gYnVpbGQgUEdPIChQcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24pIGJ5IGZpcnN0Ci1yZW0gYnVpbGRpbmcgaW5zdHJ1bWVudGVkIGJpbmFyaWVzLCB0aGVuIHJ1bm5pbmcgdGhlIHRlc3RzdWl0ZSwgYW5kCi1yZW0gZmluYWxseSBidWlsZGluZyB0aGUgb3B0aW1pemVkIGNvZGUuCi1yZW0gTm90ZSwgYWZ0ZXIgdGhlIGZpcnN0IGluc3RydW1lbnRlZCBydW4sIG9uZSBjYW4ganVzdCBrZWVwIG9uCi1yZW0gYnVpbGRpbmcgdGhlIFBHVXBkYXRlIGNvbmZpZ3VyYXRpb24gd2hpbGUgZGV2ZWxvcGluZy4KLQotc2V0bG9jYWwKLXNldCBwbGF0Zj1XaW4zMgotCi1yZW0gdXNlIHRoZSBwZXJmb3JtYW5jZSB0ZXN0c3VpdGUuICBUaGlzIGlzIHF1aWNrIGFuZCBzaW1wbGUKLXNldCBqb2IxPS4uXC4uXHRvb2xzXHB5YmVuY2hccHliZW5jaC5weSAtbiAxIC1DIDEgLS13aXRoLWdjCi1zZXQgcGF0aDE9Li5cLi5cdG9vbHNccHliZW5jaAotCi1yZW0gb3IgdGhlIHdob2xlIHRlc3RzdWl0ZSBmb3IgbW9yZSB0aG9yb3VnaCB0ZXN0aW5nCi1zZXQgam9iMj0uLlwuLlxsaWJcdGVzdFxyZWdydGVzdC5weQotc2V0IHBhdGgyPS4uXC4uXGxpYgotCi1zZXQgam9iPSVqb2IxJQotc2V0IGNscnBhdGg9JXBhdGgxJQotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLXAiIChzZXQgcGxhdGY9JTIpICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLTIiIChzZXQgam9iPSVqb2IyJSkgJiAoc2V0IGNscnBhdGg9JXBhdGgyJSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBQR0k9JXBsYXRmJS1wZ2kKLXNldCBQR089JXBsYXRmJS1wZ28KLQotQGVjaG8gb24KLXJlbSBidWlsZCB0aGUgaW5zdHJ1bWVudGVkIHZlcnNpb24KLWNhbGwgYnVpbGQgLXAgJXBsYXRmJSAtYyBQR0luc3RydW1lbnQKLQotcmVtIHJlbW92ZSAucHljIGZpbGVzLCAucGdjIGZpbGVzIGFuZCBleGVjdXRlIHRoZSBqb2IKLSVQR0klXHB5dGhvbi5leGUgcm1weWMucHkgJWNscnBhdGglCi1kZWwgJVBHSSVcKi5wZ2MKLSVQR0klXHB5dGhvbi5leGUgJWpvYiUKLQotcmVtIGZpbmFsbHkgYnVpbGQgdGhlIG9wdGltaXplZCB2ZXJzaW9uCi1pZiBleGlzdCAlUEdPJSBkZWwgL3MgL3EgJVBHTyUKLWNhbGwgYnVpbGQgLXAgJXBsYXRmJSAtYyBQR1VwZGF0ZQotCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9zc2wuYmF0IGIvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3YjA4Yi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9zc2wuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotQGVjaG8gb2ZmCi1pZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCi0gIGlmICUxIEVRVSBEZWJ1ZyAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zM19kLmRsbCBleGl0IDEKLSAgKSBFTFNFICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zMy5kbGwgZXhpdCAxCi0gICkKLSkKLSVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyICUzCi0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3NzbC5weSBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMxM2VmNS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9zc2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotIyBTY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBfc3NsIGFuZCBfaGFzaGxpYiBtb2R1bGVzIGZvciBXaW5kb3dzLgotIyBVc2VzIFBlcmwgdG8gc2V0dXAgdGhlIE9wZW5TU0wgZW52aXJvbm1lbnQgY29ycmVjdGx5Ci0jIGFuZCBidWlsZCBPcGVuU1NMLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbm1ha2Ugc2Vzc2lvbgotIyBmb3IgdGhlIGFjdHVhbCBfc3NsLnB5ZCBhbmQgX2hhc2hsaWIucHlkIERMTHMuCi0KLSMgVEhFT1JFVElDQUxMWSwgeW91IGNhbjoKLSMgKiBVbnBhY2sgdGhlIGxhdGVzdCBTU0wgcmVsZWFzZSBvbmUgbGV2ZWwgYWJvdmUgeW91ciBtYWluIFB5dGhvbiBzb3VyY2UKLSMgICBkaXJlY3RvcnkuICBJdCBpcyBsaWtlbHkgeW91IHdpbGwgYWxyZWFkeSBmaW5kIHRoZSB6bGliIGxpYnJhcnkgYW5kCi0jICAgYW55IG90aGVyIGV4dGVybmFsIHBhY2thZ2VzIHRoZXJlLgotIyAqIEluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGlzIHNvbWV3aGVyZSBvbiB5b3VyIHBhdGguCi0jICogUnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIFBDL1ZTOC4wIGRpcmVjdG9yeS4KLSMKLSMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBfc3NsIGFuZCBfaGFzaGxpYgotIyBQeXRob24gZXh0ZW5zaW9ucyB3aXRob3V0IGludGVydmVudGlvbi4KLQotIyBNb2RpZmllZCBieSBDaHJpc3RpYW4gSGVpbWVzCi0jIE5vdyB0aGlzIHNjcmlwdCBzdXBwb3J0cyBwcmUtZ2VuZXJhdGVkIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0jIERldmVsb3BlcnMgZG9uJ3QgbmVlZCBhbiBpbnN0YWxsYXRpb24gb2YgUGVybCBhbnltb3JlIHRvIGJ1aWxkIFB5dGhvbi4gQSBzdm4KLSMgY2hlY2tvdXQgZnJvbSBvdXIgc3ZuIHJlcG9zaXRvcnkgaXMgZW5vdWdoLgotIwotIyBJbiBPcmRlciB0byBjcmVhdGUgdGhlIGZpbGVzIGluIHRoZSBjYXNlIG9mIGFuIHVwZGF0ZSB5b3Ugc3RpbGwgbmVlZCBQZXJsLgotIyBSdW4gYnVpbGRfc3NsIGluIHRoaXMgb3JkZXI6Ci0jIHB5dGhvbi5leGUgYnVpbGRfc3NsLnB5IFJlbGVhc2UgeDY0Ci0jIHB5dGhvbi5leGUgYnVpbGRfc3NsLnB5IFJlbGVhc2UgV2luMzIKLQotaW1wb3J0IG9zLCBzeXMsIHJlLCBzaHV0aWwKLQotIyBGaW5kIGFsbCAiZm9vLmV4ZSIgZmlsZXMgb24gdGhlIFBBVEguCi1kZWYgZmluZF9hbGxfb25fcGF0aChmaWxlbmFtZSwgZXh0cmFzID0gTm9uZSk6Ci0gICAgZW50cmllcyA9IG9zLmVudmlyb25bIlBBVEgiXS5zcGxpdChvcy5wYXRoc2VwKQotICAgIHJldCA9IFtdCi0gICAgZm9yIHAgaW4gZW50cmllczoKLSAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICBpZiBleHRyYXM6Ci0gICAgICAgIGZvciBwIGluIGV4dHJhczoKLSAgICAgICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICByZXR1cm4gcmV0Ci0KLSMgRmluZCBhIHN1aXRhYmxlIFBlcmwgaW5zdGFsbGF0aW9uIGZvciBPcGVuU1NMLgotIyBjeWd3aW4gcGVybCBkb2VzICpub3QqIHdvcmsuICBBY3RpdmVQZXJsIGRvZXMuCi0jIEJlaW5nIGEgUGVybCBkdW1teSwgdGhlIHNpbXBsZXN0IHdheSBJIGNhbiBjaGVjayBpcyBpZiB0aGUgIldpbjMyIiBwYWNrYWdlCi0jIGlzIGF2YWlsYWJsZS4KLWRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6Ci0gICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4oJyIlcyIgLWUgInVzZSBXaW4zMjsiJyAlIHBlcmwpCi0gICAgICAgIGZoLnJlYWQoKQotICAgICAgICByYyA9IGZoLmNsb3NlKCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZXR1cm4gcGVybAotICAgIHByaW50KCJDYW4gbm90IGZpbmQgYSBzdWl0YWJsZSBQRVJMOiIpCi0gICAgaWYgcGVybHM6Ci0gICAgICAgIHByaW50KCIgdGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIpCi0gICAgICAgIGZvciBwIGluIHBlcmxzOgotICAgICAgICAgICAgcHJpbnQoIiAiLCBwKQotICAgICAgICBwcmludCgiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIikKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiIE5PIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQgb24gdGhpcyBtYWNoaW5lIGF0IGFsbCEiKQotICAgIHByaW50KCIgUGxlYXNlIGluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGFwcGVhcnMgb24geW91ciBwYXRoIikKLSAgICByZXR1cm4gTm9uZQotCi0jIExvY2F0ZSB0aGUgYmVzdCBTU0wgZGlyZWN0b3J5IGdpdmVuIGEgZmV3IHJvb3RzIHRvIGxvb2sgaW50by4KLWRlZiBmaW5kX2Jlc3Rfc3NsX2Rpcihzb3VyY2VzKToKLSAgICBjYW5kaWRhdGVzID0gW10KLSAgICBmb3IgcyBpbiBzb3VyY2VzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IGRvIG5vdCBhYnNwYXRoIHM7IHRoZSBidWlsZCB3aWxsIGZhaWwgaWYgYW55Ci0gICAgICAgICAgICAjIGhpZ2hlciB1cCBkaXJlY3RvcnkgbmFtZSBoYXMgc3BhY2VzIGluIGl0LgotICAgICAgICAgICAgZm5hbWVzID0gb3MubGlzdGRpcihzKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICBmbmFtZXMgPSBbXQotICAgICAgICBmb3IgZm5hbWUgaW4gZm5hbWVzOgotICAgICAgICAgICAgZnFuID0gb3MucGF0aC5qb2luKHMsIGZuYW1lKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcW4pIGFuZCBmbmFtZS5zdGFydHN3aXRoKCJvcGVuc3NsLSIpOgotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGZxbikKLSAgICAjIE5vdyB3ZSBoYXZlIGFsbCB0aGUgY2FuZGlkYXRlcywgbG9jYXRlIHRoZSBiZXN0LgotICAgIGJlc3RfcGFydHMgPSBbXQotICAgIGJlc3RfbmFtZSA9IE5vbmUKLSAgICBmb3IgYyBpbiBjYW5kaWRhdGVzOgotICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KCJbLi1dIiwgb3MucGF0aC5iYXNlbmFtZShjKSlbMTpdCi0gICAgICAgICMgZWcgLSBvcGVuc3NsLTAuOS43LWJldGExIC0gaWdub3JlIGFsbCAiYmV0YSIgb3IgYW55IG90aGVyIHF1YWxpZmllcnMKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA+PSA0OgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgcGFydHMgPiBiZXN0X3BhcnRzOgotICAgICAgICAgICAgYmVzdF9wYXJ0cyA9IHBhcnRzCi0gICAgICAgICAgICBiZXN0X25hbWUgPSBjCi0gICAgaWYgYmVzdF9uYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcmludCgiRm91bmQgYW4gU1NMIGRpcmVjdG9yeSBhdCAnJXMnIiAlIChiZXN0X25hbWUsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiQ291bGQgbm90IGZpbmQgYW4gU1NMIGRpcmVjdG9yeSBpbiAnJXMnIiAlIChzb3VyY2VzLCkpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmV0dXJuIGJlc3RfbmFtZQotCi1kZWYgY3JlYXRlX21ha2VmaWxlNjQobWFrZWZpbGUsIG0zMik6Ci0gICAgIiIiQ3JlYXRlIGFuZCBmaXggbWFrZWZpbGUgZm9yIDY0Yml0Ci0KLSAgICBSZXBsYWNlIDMyIHdpdGggNjRiaXQgZGlyZWN0b3JpZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobTMyKToKLSAgICAgICAgcmV0dXJuCi0gICAgd2l0aCBvcGVuKG0zMikgYXMgZmluOgotICAgICAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCI9dG1wMzIiLCAiPXRtcDY0IikKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCI9b3V0MzIiLCAiPW91dDY0IikKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCI9aW5jMzIiLCAiPWluYzY0IikKLSAgICAgICAgICAgICAgICAjIGZvcmNlIDY0IGJpdCBtYWNoaW5lCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiTUtMSUI9bGliIiwgIk1LTElCPWxpYiAvTUFDSElORTpYNjQiKQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIkxGTEFHUz0iLCAiTEZMQUdTPS9NQUNISU5FOlg2NCAiKQotICAgICAgICAgICAgICAgICMgZG9uJ3QgbGluayBhZ2FpbnN0IHRoZSBsaWIgb24gNjRiaXQgc3lzdGVtcwotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoImJ1ZmZlcm92ZXJmbG93dS5saWIiLCAiIikKLSAgICAgICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0gICAgb3MudW5saW5rKG0zMikKLQotZGVmIGZpeF9tYWtlZmlsZShtYWtlZmlsZSk6Ci0gICAgIiIiRml4IHNvbWUgc3R1ZmYgaW4gYWxsIG1ha2VmaWxlcwotICAgICIiIgotICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSk6Ci0gICAgICAgIHJldHVybgotICAgIHdpdGggb3BlbihtYWtlZmlsZSkgYXMgZmluOgotICAgICAgICBsaW5lcyA9IGZpbi5yZWFkbGluZXMoKQotICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUEVSTD0iKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJDUD0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gIkNQPWNvcHlcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiTUtESVI9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJNS0RJUj1ta2RpclxuIgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJDRkxBRz0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgZm9yIGFsZ28gaW4gKCJSQzUiLCAiTURDMiIsICJJREVBIik6Ci0gICAgICAgICAgICAgICAgICAgIG5vYWxnbyA9ICIgLURPUEVOU1NMX05PXyVzIiAlIGFsZ28KLSAgICAgICAgICAgICAgICAgICAgaWYgbm9hbGdvIG5vdCBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyBub2FsZ28KLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICdcbicKLSAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKLQotZGVmIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpOgotICAgIHByaW50KCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSsiIG5vLWlkZWEgbm8tbWRjMiIpCi0gICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSsiIG5vLWlkZWEgbm8tbWRjMiIpCi0gICAgcHJpbnQoZG9fc2NyaXB0KQotICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCi0KLWRlZiBjbXAoZjEsIGYyKToKLSAgICBidWZzaXplID0gMTAyNCAqIDgKLSAgICB3aXRoIG9wZW4oZjEsICdyYicpIGFzIGZwMSwgb3BlbihmMiwgJ3JiJykgYXMgZnAyOgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQotICAgICAgICAgICAgYjIgPSBmcDIucmVhZChidWZzaXplKQotICAgICAgICAgICAgaWYgYjEgIT0gYjI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgYjE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotZGVmIGNvcHkoc3JjLCBkc3QpOgotICAgIGlmIG9zLnBhdGguaXNmaWxlKGRzdCkgYW5kIGNtcChzcmMsIGRzdCk6Ci0gICAgICAgIHJldHVybgotICAgIHNodXRpbC5jb3B5KHNyYywgZHN0KQotCi1kZWYgbWFpbigpOgotICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKLSAgICBpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZSI6Ci0gICAgICAgIGRlYnVnID0gRmFsc2UKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICJEZWJ1ZyI6Ci0gICAgICAgIGRlYnVnID0gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Ioc3RyKHN5cy5hcmd2KSkKLQotICAgIGlmIHN5cy5hcmd2WzJdID09ICJXaW4zMiI6Ci0gICAgICAgIGFyY2ggPSAieDg2IgotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lOMzIiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbmFzbSIKLSAgICAgICAgbWFrZWZpbGU9Im1zXFxudC5tYWsiCi0gICAgICAgIG0zMiA9IG1ha2VmaWxlCi0gICAgICAgIGRpcnN1ZmZpeCA9ICIzMiIKLSAgICBlbGlmIHN5cy5hcmd2WzJdID09ICJ4NjQiOgotICAgICAgICBhcmNoPSJhbWQ2NCIKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjY0QSIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb193aW42NGEiCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudDY0Lm1hayIKLSAgICAgICAgbTMyID0gbWFrZWZpbGUucmVwbGFjZSgnNjQnLCAnJykKLSAgICAgICAgZGlyc3VmZml4ID0gIjY0IgotICAgICAgICAjb3MuZW52aXJvblsiVlNFWFRDT01QX1VTRUNMIl0gPSAiTVNfT1BURVJPTiIKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHN0cihzeXMuYXJndikpCi0KLSAgICBtYWtlX2ZsYWdzID0gIiIKLSAgICBpZiBidWlsZF9hbGw6Ci0gICAgICAgIG1ha2VfZmxhZ3MgPSAiLWEiCi0gICAgIyBwZXJsIHNob3VsZCBiZSBvbiB0aGUgcGF0aCwgYnV0IHdlIGFsc28gbG9vayBpbiAiXHBlcmwiIGFuZCAiYzpcXHBlcmwiCi0gICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCi0gICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFsiXFxwZXJsXFxiaW4iLCAiQzpcXHBlcmxcXGJpbiJdKQotICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKLSAgICBpZiBwZXJsOgotICAgICAgICBwcmludCgiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJObyBQZXJsIGluc3RhbGxhdGlvbiB3YXMgZm91bmQuIEV4aXN0aW5nIE1ha2VmaWxlcyBhcmUgdXNlZC4iKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICMgTG9vayBmb3IgU1NMIDMgbGV2ZWxzIHVwIGZyb20gUEMvVlM4LjAgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KLSAgICBzc2xfZGlyID0gZmluZF9iZXN0X3NzbF9kaXIoKCIuLlxcLi5cXC4uIiwpKQotICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIG9sZF9jZCA9IG9zLmdldGN3ZCgpCi0gICAgdHJ5OgotICAgICAgICBvcy5jaGRpcihzc2xfZGlyKQotICAgICAgICAjIHJlYnVpbGQgbWFrZWZpbGUgd2hlbiB3ZSBkbyB0aGUgcm9sZSBvdmVyIGZyb20gMzIgdG8gNjQgYnVpbGQKLSAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiIGFuZCBvcy5wYXRoLmlzZmlsZShtMzIpIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpOgotICAgICAgICAgICAgb3MudW5saW5rKG0zMikKLQotICAgICAgICAjIElmIHRoZSBzc2wgbWFrZWZpbGVzIGRvIG5vdCBleGlzdCwgd2UgaW52b2tlIFBlcmwgdG8gZ2VuZXJhdGUgdGhlbS4KLSAgICAgICAgIyBEdWUgdG8gYSBidWcgaW4gdGhpcyBzY3JpcHQsIHRoZSBtYWtlZmlsZSBzb21ldGltZXMgZW5kZWQgdXAgZW1wdHkKLSAgICAgICAgIyBGb3JjZSBhIHJlZ2VuZXJhdGlvbiBpZiBpdCBpcy4KLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKSBvciBvcy5wYXRoLmdldHNpemUobWFrZWZpbGUpPT0wOgotICAgICAgICAgICAgaWYgcGVybCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHByaW50KCJQZXJsIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBtYWtlZmlsZXMhIikKLSAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgICAgICAgICBwcmludCgiQ3JlYXRpbmcgdGhlIG1ha2VmaWxlcy4uLiIpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgICMgUHV0IG91ciB3b3JraW5nIFBlcmwgYXQgdGhlIGZyb250IG9mIG91ciBwYXRoCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0gPSBvcy5wYXRoLmRpcm5hbWUocGVybCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoc2VwICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdCi0gICAgICAgICAgICBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KQotICAgICAgICAgICAgaWYgZGVidWc6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIk9wZW5TU0wgZGVidWcgYnVpbGRzIGFyZW4ndCBzdXBwb3J0ZWQuIikKLSAgICAgICAgICAgICNpZiBhcmNoPT0ieDg2IiBhbmQgZGVidWc6Ci0gICAgICAgICAgICAjICAgICMgdGhlIGRvX21hc20gc2NyaXB0IGluIG9wZW5zc2wgZG9lc24ndCBnZW5lcmF0ZSBhIGRlYnVnCi0gICAgICAgICAgICAjICAgICMgYnVpbGQgbWFrZWZpbGUgc28gd2UgZ2VuZXJhdGUgaXQgaGVyZToKLSAgICAgICAgICAgICMgICAgb3Muc3lzdGVtKCJwZXJsIHV0aWxcbWsxbWYucGwgZGVidWcgIitjb25maWd1cmUrIiA+IittYWtlZmlsZSkKLQotICAgICAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiOgotICAgICAgICAgICAgICAgIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpCi0gICAgICAgICAgICBmaXhfbWFrZWZpbGUobWFrZWZpbGUpCi0gICAgICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mLmgiLCByImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gpCi0gICAgICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiLCByImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gpCi0KLSAgICAgICAgIyBJZiB0aGUgYXNzZW1ibGVyIGZpbGVzIGRvbid0IGV4aXN0IGluIHRtcFhYLCBjb3B5IHRoZW0gdGhlcmUKLSAgICAgICAgaWYgcGVybCBpcyBOb25lIGFuZCBvcy5wYXRoLmV4aXN0cygiYXNtIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCJ0bXAiK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoInRtcCIrZGlyc3VmZml4KQotICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcigiYXNtIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBmLmVuZHN3aXRoKCIuYXNtIik6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUociJ0bXAlc1wlcyIgJSAoZGlyc3VmZml4LCBmKSk6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkociJhc20lc1wlcyIgJSAoZGlyc3VmZml4LCBmKSwgInRtcCIrZGlyc3VmZml4KQotCi0gICAgICAgICMgTm93IHJ1biBtYWtlLgotICAgICAgICBpZiBhcmNoID09ICJhbWQ2NCI6Ci0gICAgICAgICAgICByYyA9IG9zLnN5c3RlbSgibWw2NCAtYyAtRm9tc1xcdXB0YWJsZS5vYmogbXNcXHVwdGFibGUuYXNtIikKLSAgICAgICAgICAgIGlmIHJjOgotICAgICAgICAgICAgICAgIHByaW50KCJtbDY0IGFzc2VtYmxlciBoYXMgZmFpbGVkLiIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0KLSAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXGJ1aWxkaW5mLmgiKQotICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cb3BlbnNzbGNvbmYuaCIpCi0KLSAgICAgICAgI21ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQotICAgICAgICBtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIC1mIFwiJXNcIiIgJSBtYWtlZmlsZQotICAgICAgICBwcmludCgiRXhlY3V0aW5nIHNzbCBtYWtlZmlsZXM6IiwgbWFrZUNvbW1hbmQpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByYyA9IG9zLnN5c3RlbShtYWtlQ29tbWFuZCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBwcmludCgiRXhlY3V0aW5nICIrbWFrZWZpbGUrIiBmYWlsZWQiKQotICAgICAgICAgICAgcHJpbnQocmMpCi0gICAgICAgICAgICBzeXMuZXhpdChyYykKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy5jaGRpcihvbGRfY2QpCi0gICAgc3lzLmV4aXQocmMpCi0KLWlmIF9fbmFtZV9fPT0nX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfdGtpbnRlci5weSBiL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNTkwMzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfdGtpbnRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLSIiIlNjcmlwdCB0byBjb21waWxlIHRoZSBkZXBlbmRlbmNpZXMgb2YgX3RraW50ZXIKLQotQ29weXJpZ2h0IChjKSAyMDA3IGJ5IENocmlzdGlhbiBIZWltZXMgPGNocmlzdGlhbkBjaGVpbWVzLmRlPgotCi1MaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKLXBhciA9IG9zLnBhdGgucGFyZGlyCi0KLWlmIDE6Ci0gICAgVENMID0gInRjbDguNC4xNiIKLSAgICBUSyA9ICJ0azguNC4xNiIKLSAgICBUSVggPSAidGl4LTguNC4wIgotZWxzZToKLSAgICBUQ0wgPSAidGNsOC41YjMiCi0gICAgVEsgPSAidGNsOC41YjMiCi0gICAgVElYID0gIlRpeDguNC4yIgotCi1ST09UID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihoZXJlLCBwYXIsIHBhciwgcGFyKSkKLSMgV2luZG93cyAyMDAwIGNvbXBhdGliaWxpdHk6IFdJTlZFUiAweDA1MDAKLSMgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM4Mzc0NS5hc3B4Ci1OTUFLRSA9ICJubWFrZSAvbm9sb2dvIC9mICVzIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwICVzICVzIgotCi1kZWYgbm1ha2UobWFrZWZpbGUsIGNvbW1hbmQ9IiIsICoqa3cpOgotICAgIGRlZmluZXMgPSAnICcuam9pbihrKyc9Jyt2IGZvciBrLCB2IGluIGt3Lml0ZW1zKCkpCi0gICAgY21kID0gTk1BS0UgJSAobWFrZWZpbGUsIGRlZmluZXMsIGNvbW1hbmQpCi0gICAgcHJpbnQoIlxuXG4iK2NtZCsiXG4iKQotICAgIGlmIG9zLnN5c3RlbShjbWQpICE9IDA6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihjbWQpCi0KLWRlZiBidWlsZChwbGF0Zm9ybSwgY2xlYW4pOgotICAgIGlmIHBsYXRmb3JtID09ICJXaW4zMiI6Ci0gICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oUk9PVCwgInRjbHRrIikKLSAgICAgICAgbWFjaGluZSA9ICJYODYiCi0gICAgZWxpZiBwbGF0Zm9ybSA9PSAieDY0IjoKLSAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihST09ULCAidGNsdGs2NCIpCi0gICAgICAgIG1hY2hpbmUgPSAiWDY0IgotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IocGxhdGZvcm0pCi0KLSAgICAjIFRDTAotICAgIHRjbGRpciA9IG9zLnBhdGguam9pbihST09ULCBUQ0wpCi0gICAgaWYgMToKLSAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKHRjbGRpciwgIndpbiIpKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJjbGVhbiIpCi0gICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIpCi0gICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJpbnN0YWxsIiwgSU5TVEFMTERJUj1kZXN0KQotCi0gICAgIyBUSwotICAgIGlmIDE6Ci0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihST09ULCBUSywgIndpbiIpKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJjbGVhbiIsIFRDTERJUj10Y2xkaXIpCi0gICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsIFRDTERJUj10Y2xkaXIpCi0gICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJpbnN0YWxsIiwgVENMRElSPXRjbGRpciwgSU5TVEFMTERJUj1kZXN0KQotCi0gICAgIyBUSVgKLSAgICBpZiAxOgotICAgICAgICAjIHB5dGhvbjkubWFrIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcKLSAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKFJPT1QsIFRJWCwgIndpbiIpKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlKCJweXRob245Lm1hayIsICJjbGVhbiIpCi0gICAgICAgIG5tYWtlKCJweXRob245Lm1hayIsIE1BQ0hJTkU9bWFjaGluZSkKLSAgICAgICAgbm1ha2UoInB5dGhvbjkubWFrIiwgImluc3RhbGwiKQotCi1kZWYgbWFpbigpOgotICAgIGlmIGxlbihzeXMuYXJndikgPCAyIG9yIHN5cy5hcmd2WzFdIG5vdCBpbiAoIldpbjMyIiwgIng2NCIpOgotICAgICAgICBwcmludCgiJXMgV2luMzJ8eDY0IiAlIHN5cy5hcmd2WzBdKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgaWYgIi1jIiBpbiBzeXMuYXJndjoKLSAgICAgICAgY2xlYW4gPSBUcnVlCi0gICAgZWxzZToKLSAgICAgICAgY2xlYW4gPSBGYWxzZQotCi0gICAgYnVpbGQoc3lzLmFyZ3ZbMV0sIGNsZWFuKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9iejIudmNwcm9qIGIvUEMvVlM4LjAvYnoyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYxMTk3OS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9iejIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJiejIiDQotCVByb2plY3RHVUlEPSJ7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fSINCi0JUm9vdE5hbWVzcGFjZT0iYnoyIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJ6Mm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iYnppcDIgMS4wLjYgSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliX3ByaXZhdGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9ImJ6aXAyIDEuMC42IFNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYmxvY2tzb3J0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxjb21wcmVzcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGNyY3RhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcZGVjb21wcmVzcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGh1ZmZtYW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxyYW5kdGFibGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9kZWJ1Zy52c3Byb3BzIGIvUEMvVlM4LjAvZGVidWcudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM2NDNjYi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9kZWJ1Zy52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImRlYnVnIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iS2lsbFB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob25fZC5leGUiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2Vudi5iYXQgYi9QQy9WUzguMC9lbnYuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDk5MGE4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2Vudi5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBlY2hvIG9mZgotc2V0IFZTOD0lUHJvZ3JhbUZpbGVzJVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA4Ci1lY2hvIEJ1aWxkIGVudmlyb25tZW50czogeDg2LCBpYTY0LCBhbWQ2NCwgeDg2X2FtZDY0LCB4ODZfaWE2NAotZWNoby4KLWNhbGwgIiVWUzglXFZDXHZjdmFyc2FsbC5iYXQiICUxCmRpZmYgLS1naXQgYS9QQy9WUzguMC9maWVsZDMucHkgYi9QQy9WUzguMC9maWVsZDMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkY2JlMzYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvZmllbGQzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBBbiBhYnN1cmQgd29ya2Fyb3VuZCBmb3IgdGhlIGxhY2sgb2YgYXJpdGhtZXRpYyBpbiBNUydzIHJlc291cmNlIGNvbXBpbGVyLgotIyBBZnRlciBidWlsZGluZyBQeXRob24sIHJ1biB0aGlzLCB0aGVuIHBhc3RlIHRoZSBvdXRwdXQgaW50byB0aGUgYXBwcm9wcmlhdGUKLSMgcGFydCBvZiBQQ1xweXRob25fbnQucmMuCi0jIEV4YW1wbGUgb3V0cHV0OgotIwotIyAqIEZvciAyLjNhMCwKLSMgKiBQWV9NSUNST19WRVJTSU9OID0gMAotIyAqIFBZX1JFTEVBU0VfTEVWRUwgPSAnYWxwaGEnID0gMHhBCi0jICogUFlfUkVMRUFTRV9TRVJJQUwgPSAxCi0jICoKLSMgKiBhbmQgMCoxMDAwICsgMTAqMTAgKyAxID0gMTAxLgotIyAqLwotIyAjZGVmaW5lIEZJRUxEMyAxMDEKLQotaW1wb3J0IHN5cwotCi1tYWpvciwgbWlub3IsIG1pY3JvLCBsZXZlbCwgc2VyaWFsID0gc3lzLnZlcnNpb25faW5mbwotbGV2ZWxudW0gPSB7J2FscGhhJzogMHhBLAotICAgICAgICAgICAgJ2JldGEnOiAweEIsCi0gICAgICAgICAgICAnY2FuZGlkYXRlJzogMHhDLAotICAgICAgICAgICAgJ2ZpbmFsJzogMHhGLAotICAgICAgICAgICB9W2xldmVsXQotc3RyaW5nID0gc3lzLnZlcnNpb24uc3BsaXQoKVswXSAjIGxpa2UgJzIuM2EwJwotCi1wcmludCgiICogRm9yICVzLCIgJSBzdHJpbmcpCi1wcmludCgiICogUFlfTUlDUk9fVkVSU0lPTiA9ICVkIiAlIG1pY3JvKQotcHJpbnQoIiAqIFBZX1JFTEVBU0VfTEVWRUwgPSAlciA9ICVzIiAlIChsZXZlbCwgaGV4KGxldmVsbnVtKSkpCi1wcmludCgiICogUFlfUkVMRUFTRV9TRVJJQUwgPSAlZCIgJSBzZXJpYWwpCi1wcmludCgiICoiKQotCi1maWVsZDMgPSBtaWNybyAqIDEwMDAgKyBsZXZlbG51bSAqIDEwICsgc2VyaWFsCi0KLXByaW50KCIgKiBhbmQgJWQqMTAwMCArICVkKjEwICsgJWQgPSAlZCIgJSAobWljcm8sIGxldmVsbnVtLCBzZXJpYWwsIGZpZWxkMykpCi1wcmludCgiICovIikKLXByaW50KCIjZGVmaW5lIEZJRUxEMyIsIGZpZWxkMykKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2lkbGUuYmF0IGIvUEMvVlM4LjAvaWRsZS5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyM2U3MDQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvaWRsZS5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBzdGFydCBpZGxlCi1yZW0gVXNhZ2U6ICBpZGxlIFstZF0KLXJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLQotc2V0bG9jYWwKLXNldCBleGU9cHl0aG9uCi1QQVRIICVQQVRIJTsuLlwuLlwuLlx0Y2x0a1xiaW4KLQotaWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdAotCi1zZXQgY21kPSVleGUlIC4uLy4uL0xpYi9pZGxlbGliL2lkbGUucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLQotZWNobyBvbgotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLmMgYi9QQy9WUzguMC9raWxsX3B5dGhvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjMyM2QzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIEhlbHBlciBwcm9ncmFtIGZvciBraWxsaW5nIGxpbmdlcmluZyBweXRob25bX2RdLmV4ZSBwcm9jZXNzZXMgYmVmb3JlCi0gKiBidWlsZGluZywgdGh1cyBhdHRlbXB0aW5nIHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmVzIGR1ZSB0byBmaWxlcyBiZWluZwotICogbG9ja2VkLgotICovCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d2NoYXIuaD4KLSNpbmNsdWRlIDx0bGhlbHAzMi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNwcmFnbWEgY29tbWVudChsaWIsICJwc2FwaSIpCi0KLSNpZmRlZiBfREVCVUcKLSNkZWZpbmUgUFlUSE9OX0VYRSAgICAgICAgICAoTCJweXRob25fZC5leGUiKQotI2RlZmluZSBQWVRIT05fRVhFX0xFTiAgICAgICgxMikKLSNkZWZpbmUgS0lMTF9QWVRIT05fRVhFICAgICAoTCJraWxsX3B5dGhvbl9kLmV4ZSIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRV9MRU4gKDE3KQotI2Vsc2UKLSNkZWZpbmUgUFlUSE9OX0VYRSAgICAgICAgICAoTCJweXRob24uZXhlIikKLSNkZWZpbmUgUFlUSE9OX0VYRV9MRU4gICAgICAoMTApCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRSAgICAgKEwia2lsbF9weXRob24uZXhlIikKLSNkZWZpbmUgS0lMTF9QWVRIT05fRVhFX0xFTiAoMTUpCi0jZW5kaWYKLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBIQU5ETEUgICBocCwgaHNwLCBoc207IC8qIHByb2Nlc3MsIHNuYXBzaG90IHByb2Nlc3Nlcywgc25hcHNob3QgbW9kdWxlcyAqLwotICAgIERXT1JEICAgIGRhYywgb3VyX3BpZDsKLSAgICBzaXplX3QgICBsZW47Ci0gICAgd2NoYXJfdCAgcGF0aFtNQVhfUEFUSCsxXTsKLQotICAgIE1PRFVMRUVOVFJZMzJXICBtZTsKLSAgICBQUk9DRVNTRU5UUlkzMlcgcGU7Ci0KLSAgICBtZS5kd1NpemUgPSBzaXplb2YoTU9EVUxFRU5UUlkzMlcpOwotICAgIHBlLmR3U2l6ZSA9IHNpemVvZihQUk9DRVNTRU5UUlkzMlcpOwotCi0gICAgbWVtc2V0KHBhdGgsIDAsIE1BWF9QQVRIKzEpOwotCi0gICAgb3VyX3BpZCA9IEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKLQotICAgIGhzbSA9IENyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUE1PRFVMRSwgb3VyX3BpZCk7Ci0gICAgaWYgKGhzbSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICBwcmludGYoIkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdFsxXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICghTW9kdWxlMzJGaXJzdFcoaHNtLCAmbWUpKSB7Ci0gICAgICAgIHByaW50ZigiTW9kdWxlMzJGaXJzdFdbMV0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEVudW1lcmF0ZSBvdmVyIHRoZSBtb2R1bGVzIGZvciB0aGUgY3VycmVudCBwcm9jZXNzIGluIG9yZGVyIHRvIGZpbmQKLSAgICAgKiBraWxsX3Byb2Nlc3NbX2RdLmV4ZSwgdGhlbiB0YWtlIGEgbm90ZSBvZiB0aGUgZGlyZWN0b3J5IGl0IGxpdmVzIGluLgotICAgICAqLwotICAgIGRvIHsKLSAgICAgICAgaWYgKF93Y3NuaWNtcChtZS5zek1vZHVsZSwgS0lMTF9QWVRIT05fRVhFLCBLSUxMX1BZVEhPTl9FWEVfTEVOKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGxlbiA9IHdjc25sZW5fcyhtZS5zekV4ZVBhdGgsIE1BWF9QQVRIKSAtIEtJTExfUFlUSE9OX0VYRV9MRU47Ci0gICAgICAgIHdjc25jcHlfcyhwYXRoLCBNQVhfUEFUSCsxLCBtZS5zekV4ZVBhdGgsIGxlbik7IAotCi0gICAgICAgIGJyZWFrOwotCi0gICAgfSB3aGlsZSAoTW9kdWxlMzJOZXh0Vyhoc20sICZtZSkpOwotCi0gICAgQ2xvc2VIYW5kbGUoaHNtKTsKLQotICAgIGlmIChwYXRoID09IE5VTEwpIHsKLSAgICAgICAgcHJpbnRmKCJmYWlsZWQgdG8gZGlzY2VybiBkaXJlY3Rvcnkgb2YgcnVubmluZyBwcm9jZXNzXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBUYWtlIGEgc25hcHNob3Qgb2Ygc3lzdGVtIHByb2Nlc3Nlcy4gIEVudW1lcmF0ZSBvdmVyIHRoZSBzbmFwc2hvdCwKLSAgICAgKiBsb29raW5nIGZvciBweXRob24gcHJvY2Vzc2VzLiAgV2hlbiB3ZSBmaW5kIG9uZSwgdmVyaWZ5IGl0IGxpdmVzCi0gICAgICogaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdlIGxpdmUgaW4uICBJZiBpdCBkb2VzLCBraWxsIGl0LiAgSWYgd2UncmUKLSAgICAgKiB1bmFibGUgdG8ga2lsbCBpdCwgdHJlYXQgdGhpcyBhcyBhIGZhdGFsIGVycm9yIGFuZCByZXR1cm4gMS4KLSAgICAgKiAKLSAgICAgKiBUaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGlzIHRoYXQgd2UncmUgY2FsbGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgCi0gICAgICogYnVpbGQgcHJvY2VzcyBvbiB0aGUgYmFzaXMgdGhhdCB3ZSdsbCB0YWtlIGNhcmUgb2Yga2lsbGluZyBhbnkKLSAgICAgKiBydW5uaW5nIGluc3RhbmNlcywgc3VjaCB0aGF0IHRoZSBidWlsZCB3b24ndCBlbmNvdW50ZXIgcGVybWlzc2lvbgotICAgICAqIGRlbmllZCBlcnJvcnMgZHVyaW5nIGxpbmtpbmcuIElmIHdlIGNhbid0IGtpbGwgb25lIG9mIHRoZSBwcm9jZXNzZXMsCi0gICAgICogd2UgY2FuJ3QgcHJvdmlkZSB0aGlzIGFzc3VyYW5jZSwgYW5kIHRoZSBidWlsZCBzaG91bGRuJ3Qgc3RhcnQuCi0gICAgICovCi0KLSAgICBoc3AgPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBQUk9DRVNTLCAwKTsKLSAgICBpZiAoaHNwID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIHByaW50ZigiQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90WzJdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKCFQcm9jZXNzMzJGaXJzdFcoaHNwLCAmcGUpKSB7Ci0gICAgICAgIHByaW50ZigiUHJvY2VzczMyRmlyc3RXIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgZGFjID0gUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiB8IFBST0NFU1NfVk1fUkVBRCB8IFBST0NFU1NfVEVSTUlOQVRFOwotICAgIGRvIHsKLQotICAgICAgICAvKgotICAgICAgICAgKiBYWFggVE9ETzogaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBiZSBmYW5jeSwgd2UgY291bGQgY2hlY2sgdGhlIAotICAgICAgICAgKiBtb2R1bGVzIGZvciBhbGwgcHJvY2Vzc2VzIChub3QganVzdCB0aGUgcHl0aG9uW19kXS5leGUgb25lcykKLSAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zM1tfZF0uZGxsKSwKLSAgICAgICAgICogYXMgdGhhdCB3b3VsZCBhbHNvIGluaGliaXQgb3VyIGFiaWxpdHkgdG8gcmVidWlsZCB0aGUgc29sdXRpb24uCi0gICAgICAgICAqIE5vdCB3b3J0aCBsb29zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjayAKLSAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgotICAgICAgICAgKi8KLQotICAgICAgICBpZiAoX3djc25pY21wKHBlLnN6RXhlRmlsZSwgUFlUSE9OX0VYRSwgUFlUSE9OX0VYRV9MRU4pKQotICAgICAgICAgICAgLyogVGhpcyBpc24ndCBhIHB5dGhvbiBwcm9jZXNzLiAqLwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogSXQncyBhIHB5dGhvbiBwcm9jZXNzLCBzbyBmaWd1cmUgb3V0IHdoaWNoIGRpcmVjdG9yeSBpdCdzIGluLi4uICovCi0gICAgICAgIGhzbSA9IENyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUE1PRFVMRSwgcGUudGgzMlByb2Nlc3NJRCk7Ci0gICAgICAgIGlmIChoc20gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICAvKiAKLSAgICAgICAgICAgICAqIElmIG91ciBtb2R1bGUgc25hcHNob3QgZmFpbHMgKHdoaWNoIHdpbGwgaGFwcGVuIGlmIHdlIGRvbid0IG93bgotICAgICAgICAgICAgICogdGhlIHByb2Nlc3MpLCBqdXN0IGlnbm9yZSBpdCBhbmQgY29udGludWUuICAoSXQgc2VlbXMgZGlmZmVyZW50Ci0gICAgICAgICAgICAgKiB2ZXJzaW9ucyBvZiBXaW5kb3dzIHJldHVybiBkaWZmZXJlbnQgdmFsdWVzIGZvciBHZXRMYXN0RXJyb3IoKQotICAgICAgICAgICAgICogaW4gdGhpcyBzaXR1YXRpb247IGl0J3MgZWFzaWVyIHRvIGp1c3QgaWdub3JlIGl0IGFuZCBtb3ZlIG9uIHZzLgotICAgICAgICAgICAgICogc3RvcHBpbmcgdGhlIGJ1aWxkIGZvciB3aGF0IGNvdWxkIGJlIGEgZmFsc2UgcG9zaXRpdmUuKQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFNb2R1bGUzMkZpcnN0Vyhoc20sICZtZSkpIHsKLSAgICAgICAgICAgIHByaW50ZigiTW9kdWxlMzJGaXJzdFdbMl0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChfd2NzbmljbXAobWUuc3pNb2R1bGUsIFBZVEhPTl9FWEUsIFBZVEhPTl9FWEVfTEVOKSkKLSAgICAgICAgICAgICAgICAvKiBXcm9uZyBtb2R1bGUsIHdlJ3JlIGxvb2tpbmcgZm9yIHB5dGhvbltfZF0uZXhlLi4uICovCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChfd2NzbmljbXAocGF0aCwgbWUuc3pFeGVQYXRoLCBsZW4pKQotICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgZG9lc24ndCBsaXZlIGluIG91ciBkaXJlY3RvcnkuICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8qIFB5dGhvbiBwcm9jZXNzIHJlc2lkaW5nIGluIHRoZSByaWdodCBkaXJlY3RvcnksIGtpbGwgaXQhICAqLwotICAgICAgICAgICAgaHAgPSBPcGVuUHJvY2VzcyhkYWMsIEZBTFNFLCBwZS50aDMyUHJvY2Vzc0lEKTsKLSAgICAgICAgICAgIGlmICghaHApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIk9wZW5Qcm9jZXNzIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghVGVybWluYXRlUHJvY2VzcyhocCwgMSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlRlcm1pbmF0ZVByb2Nlc3MgZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShocCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENsb3NlSGFuZGxlKGhwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIH0gd2hpbGUgKE1vZHVsZTMyTmV4dFcoaHNtLCAmbWUpKTsKLQotICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotCi0gICAgfSB3aGlsZSAoUHJvY2VzczMyTmV4dFcoaHNwLCAmcGUpKTsKLQotICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogdmk6IHNldCB0cz04IHN3PTQgc3RzPTQgZXhwYW5kdGFiICovCmRpZmYgLS1naXQgYS9QQy9WUzguMC9raWxsX3B5dGhvbi52Y3Byb2ogYi9QQy9WUzguMC9raWxsX3B5dGhvbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YmUzMzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJraWxsX3B5dGhvbiINCi0JUHJvamVjdEdVSUQ9Ins2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9Ig0KLQlSb290TmFtZXNwYWNlPSJraWxsX3B5dGhvbiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuXGtpbGxfcHl0aG9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8uYyBiL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZmEwN2EuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8uYworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2RlZmluZSBDTURfU0laRSA1MDAKLQotLyogVGhpcyBmaWxlIGNyZWF0ZXMgdGhlIGdldGJ1aWxkaW5mby5vIG9iamVjdCwgYnkgZmlyc3QKLSAgIGludm9raW5nIHN1YndjcmV2LmV4ZSAoaWYgZm91bmQpLCBhbmQgdGhlbiBpbnZva2luZyBjbC5leGUuCi0gICBBcyBhIHNpZGUgZWZmZWN0LCBpdCBtaWdodCBnZW5lcmF0ZSBQQ0J1aWxkXGdldGJ1aWxkaW5mbzIuYwotICAgYWxzby4gSWYgdGhpcyBpc24ndCBhIHN1YnZlcnNpb24gY2hlY2tvdXQsIG9yIHN1YndjcmV2IGlzbid0Ci0gICBmb3VuZCwgaXQgY29tcGlsZXMgLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyBpbnN0ZWFkLgotCi0gICBDdXJyZW50bHksIHN1YndjcmV2LmV4ZSBpcyBmb3VuZCBmcm9tIHRoZSByZWdpc3RyeSBlbnRyaWVzCi0gICBvZiBUb3J0b2lzZVNWTi4KLQotICAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHBsYWNlIGdldGJ1aWxkaW5mby5vIGludG8gdGhlIHByb3BlcgotICAgYmluYXJ5IGRpcmVjdG9yeS4gVGhpcyBpc24ndCBuZWNlc3NhcnksIGFzIHRoaXMgdG9vbCBpcwotICAgaW52b2tlZCBhcyBhIHByZS1saW5rIHN0ZXAgZm9yIHB5dGhvbmNvcmUsIHNvIHRoYXQgb3ZlcndyaXRlcwotICAgYW55IHByZXZpb3VzIGdldGJ1aWxkaW5mby5vLgotCi0gICBIb3dldmVyLCBpZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhpcyB3aWxsIGJlIHVzZWQKLSAgIGFzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3aGVyZSBhbnkgZ2V0YnVpbGRpbmZvMi5jIGFuZAotICAgZ2V0YnVpbGRpbmZvLm8gZmlsZXMgYXJlIHB1dC4gIFRoaXMgaXMgdXNlZnVsIGlmIG11bHRpcGxlCi0gICBjb25maWd1cmF0aW9ucyBhcmUgYmVpbmcgYnVpbHQgaW4gcGFyYWxsZWwsIHRvIGF2b2lkIHRoZW0KLSAgIHRyYW1wbGluZyBlYWNoIG90aGVyJ3MgZmlsZXMuCi0KLSovCi0KLWludCBtYWtlX2J1aWxkaW5mbzIoY29uc3QgY2hhciAqdG1wcGF0aCkKLXsKLSAgICBzdHJ1Y3QgX3N0YXQgc3Q7Ci0gICAgSEtFWSBoVG9ydG9pc2U7Ci0gICAgY2hhciBjb21tYW5kW0NNRF9TSVpFKzFdOwotICAgIERXT1JEIHR5cGUsIHNpemU7Ci0gICAgaWYgKF9zdGF0KCIuc3ZuIiwgJnN0KSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIC8qIEFsbG93IHN1cHByZXNzaW9uIG9mIHN1YndjcmV2LmV4ZSBpbnZvY2F0aW9uIGlmIGEgbm9fc3Vid2NyZXYgZmlsZSBpcyBwcmVzZW50LiAqLwotICAgIGlmIChfc3RhdCgibm9fc3Vid2NyZXYiLCAmc3QpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChSZWdPcGVuS2V5KEhLRVlfTE9DQUxfTUFDSElORSwgIlNvZnR3YXJlXFxUb3J0b2lzZVNWTiIsICZoVG9ydG9pc2UpICE9IEVSUk9SX1NVQ0NFU1MgJiYKLSAgICAgICAgUmVnT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgIlNvZnR3YXJlXFxUb3J0b2lzZVNWTiIsICZoVG9ydG9pc2UpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIC8qIFRvcnRvaXNlIG5vdCBpbnN0YWxsZWQgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29tbWFuZFswXSA9ICciJzsgIC8qIHF1b3RlIHRoZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlICovCi0gICAgc2l6ZSA9IHNpemVvZihjb21tYW5kKSAtIDE7Ci0gICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChoVG9ydG9pc2UsICJEaXJlY3RvcnkiLCAwLCAmdHlwZSwgY29tbWFuZCsxLCAmc2l6ZSkgIT0gRVJST1JfU1VDQ0VTUyB8fAotICAgICAgICB0eXBlICE9IFJFR19TWikKLSAgICAgICAgLyogUmVnaXN0cnkgY29ycnVwdGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiYmluXFxzdWJ3Y3Jldi5leGUiKTsKLSAgICBpZiAoX3N0YXQoY29tbWFuZCsxLCAmc3QpIDwgMCkKLSAgICAgICAgLyogc3Vid2NyZXYuZXhlIG5vdCBwYXJ0IG9mIHRoZSByZWxlYXNlICovCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiXCIgLi5cXC4uIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgaWYgKHN5c3RlbShjb21tYW5kKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAxOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCi17Ci0gICAgY2hhciBjb21tYW5kW0NNRF9TSVpFXSA9ICJjbC5leGUgLWMgLURfV0lOMzIgLURVU0VfRExfRVhQT1JUIC1EX1dJTkRPV1MgLURXSU4zMiAtRF9XSU5ETEwgIjsKLSAgICBjaGFyIHRtcHBhdGhbQ01EX1NJWkVdID0gIiI7Ci0gICAgaW50IGRvX3VubGluaywgcmVzdWx0OwotICAgIGNoYXIgKnRtcGRpciA9IE5VTEw7Ci0gICAgaWYgKGFyZ2MgPD0gMiB8fCBhcmdjID4gMykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1ha2VfYnVpbGRpbmZvICQoQ29uZmlndXJhdGlvbk5hbWUpIFt0bXBkaXJdXG4iKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZSIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiRGVidWciKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLURfREVCVUcgLU1EZCAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlSXRhbml1bSIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgL1VTRUNMOk1TX0lUQU5JVU0gIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUFNRDY0IikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1NRCAiKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgL1VTRUNMOk1TX09QVEVST04gIik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24gJXNcbiIsIGFyZ3ZbMV0pOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLSAgICBpZiAoYXJnYyA+IDIpIHsKLSAgICAgICAgdG1wZGlyID0gYXJndlsyXTsKLSAgICAgICAgc3RyY2F0X3ModG1wcGF0aCwgX2NvdW50b2YodG1wcGF0aCksIHRtcGRpcik7Ci0gICAgICAgIHN0cmNhdF9zKHRtcHBhdGgsIF9jb3VudG9mKHRtcHBhdGgpLCAiXFwiKTsKLSAgICB9Ci0KLSAgICBpZiAoKGRvX3VubGluayA9IG1ha2VfYnVpbGRpbmZvMih0bXBwYXRoKSkpIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mbzIuYyAtRFNVQldDUkVWICIpOwotICAgIH0gZWxzZQotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMiKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIiAtRm8iKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8ubyAtSS4uXFwuLlxcSW5jbHVkZSAtSS4uXFwuLlxcUEMiKTsKLSAgICBwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICByZXN1bHQgPSBzeXN0ZW0oY29tbWFuZCk7Ci0gICAgaWYgKGRvX3VubGluaykgewotICAgICAgICBjb21tYW5kWzBdID0gJ1wwJzsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mbzIuYyIpOwotICAgICAgICBfdW5saW5rKGNvbW1hbmQpOwotICAgIH0KLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLnZjcHJvaiBiL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI1Y2NjZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Im1ha2VfYnVpbGRpbmZvIg0KLQlQcm9qZWN0R1VJRD0ie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQotCVJvb3ROYW1lc3BhY2U9Im1ha2VfYnVpbGRpbmZvIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWtlX2J1aWxkaW5mby5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qIGIvUEMvVlM4LjAvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYmYxMGQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwzMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Im1ha2VfdmVyc2lvbmluZm8iDQotCVByb2plY3RHVUlEPSJ7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSINCi0JUm9vdE5hbWVzcGFjZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBQQy9weXRob25udF9yYyhfZCkuaCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mby5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yYy5oJiN4MEQ7JiN4MEE7Ig0KLQkJCQlPdXRwdXRzPSIkKFNvbHV0aW9uRGlyKS4uXC4uXFBDXHB5dGhvbm50X3JjLmgiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm8uZXhlIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKFRhcmdldERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mby5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnQuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBQQy9weXRob25udF9yYyhfZCkuaCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mby5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yYy5oJiN4MEQ7JiN4MEE7Ig0KLQkJCQlPdXRwdXRzPSIkKFNvbHV0aW9uRGlyKS4uXC4uXFBDXHB5dGhvbm50X3JjLmgiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm8uZXhlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBQQy9weXRob25udF9yYyhfZCkuaCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yY19kLmgiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvX2QuZXhlIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKFRhcmdldERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udF9kLmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBQQy9weXRob25udF9yYyhfZCkuaCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yY19kLmgiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnRfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcbWFrZV92ZXJzaW9uaW5mby5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3BjYnVpbGQuc2xuIGIvUEMvVlM4LjAvcGNidWlsZC5zbG4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhY2E0YWEuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcGNidWlsZC5zbG4KKysrIC9kZXYvbnVsbApAQCAtMSw1NjAgKzAsMCBAQAotTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gOS4wMA0KLSMgVmlzdWFsIFN0dWRpbyAyMDA1DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob24iLCAicHl0aG9uLnZjcHJvaiIsICJ7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0gPSB7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfdmVyc2lvbmluZm8iLCAibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiLCAie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uY29yZSIsICJweXRob25jb3JlLnZjcHJvaiIsICJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0gPSB7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfQ0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0gPSB7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbnciLCAicHl0aG9udy52Y3Byb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3OXhwb3BlbiIsICJ3OXhwb3Blbi52Y3Byb2oiLCAie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3Byb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQotRW5kUHJvamVjdA0KLVByb2plY3QoInsyMTUwRTMzMy04RkRDLTQyQTMtOTQ3NC0xQTM5NTZENDZERTh9IikgPSAiU29sdXRpb24gSXRlbXMiLCAiU29sdXRpb24gSXRlbXMiLCAiezU1M0VDMzNFLTk4MTYtNDk5Ni1BNjYwLTVENjE4NkEwQjBCM30iDQotCVByb2plY3RTZWN0aW9uKFNvbHV0aW9uSXRlbXMpID0gcHJlUHJvamVjdA0KLQkJLi5cLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYyA9IC4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMNCi0JCXJlYWRtZS50eHQgPSByZWFkbWUudHh0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAid2luc291bmQiLCAid2luc291bmQudmNwcm9qIiwgInsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlcyIsICJfY3R5cGVzLnZjcHJvaiIsICJ7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXNfdGVzdCIsICJfY3R5cGVzX3Rlc3QudmNwcm9qIiwgIns5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2VsZW1lbnR0cmVlIiwgIl9lbGVtZW50dHJlZS52Y3Byb2oiLCAiezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfbXNpIiwgIl9tc2kudmNwcm9qIiwgInszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NvY2tldCIsICJfc29ja2V0LnZjcHJvaiIsICJ7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zcWxpdGUzIiwgIl9zcWxpdGUzLnZjcHJvaiIsICJ7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0gPSB7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zc2wiLCAiX3NzbC52Y3Byb2oiLCAie0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9ID0gezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0NCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9ID0ge0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGNhcGkiLCAiX3Rlc3RjYXBpLnZjcHJvaiIsICJ7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjcHJvaiIsICJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImJ6MiIsICJiejIudmNwcm9qIiwgIns3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic2VsZWN0IiwgInNlbGVjdC52Y3Byb2oiLCAiezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ1bmljb2RlZGF0YSIsICJ1bmljb2RlZGF0YS52Y3Byb2oiLCAie0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweWV4cGF0IiwgInB5ZXhwYXQudmNwcm9qIiwgIntEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiYmRpc3Rfd2luaW5zdCIsICJiZGlzdF93aW5pbnN0LnZjcHJvaiIsICJ7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfSINCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfaGFzaGxpYiIsICJfaGFzaGxpYi52Y3Byb2oiLCAiezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9ID0ge0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzcWxpdGUzIiwgInNxbGl0ZTMudmNwcm9qIiwgIntBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX211bHRpcHJvY2Vzc2luZyIsICJfbXVsdGlwcm9jZXNzaW5nLnZjcHJvaiIsICJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNzbCIsICJzc2wudmNwcm9qIiwgIntFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAia2lsbF9weXRob24iLCAia2lsbF9weXRob24udmNwcm9qIiwgIns2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9Ig0KLUVuZFByb2plY3QNCi1HbG9iYWwNCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24NCi0JCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzINCi0JCURlYnVnfHg2NCA9IERlYnVnfHg2NA0KLQkJUEdJbnN0cnVtZW50fFdpbjMyID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQlQR0luc3RydW1lbnR8eDY0ID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJUEdVcGRhdGV8V2luMzIgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJUEdVcGRhdGV8eDY0ID0gUEdVcGRhdGV8eDY0DQotCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMg0KLQkJUmVsZWFzZXx4NjQgPSBSZWxlYXNlfHg2NA0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQotCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLUVuZEdsb2JhbA0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzIGIvUEMvVlM4LjAvcGdpbnN0cnVtZW50LnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YzVmMTguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcGdpbnN0cnVtZW50LnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icGdpbnN0cnVtZW50Ig0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoT3V0RGlyUEdJKSINCi0JSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLXBnaVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjIiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQlGYXZvclNpemVPclNwZWVkPSIyIg0KLQkJT21pdEZyYW1lUG9pbnRlcnM9InRydWUiDQotCQlFbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPSJmYWxzZSINCi0JCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCi0JCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCi0JCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KLQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCi0JCUxpbmtUaW1lQ29kZUdlbmVyYXRpb249IjIiDQotCQlQcm9maWxlR3VpZGVkRGF0YWJhc2U9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnaVwkKFRhcmdldE5hbWUpLnBnZCINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iT3V0RGlyUEdJIg0KLQkJVmFsdWU9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnaVwiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3BndXBkYXRlLnZzcHJvcHMgYi9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmNmYzJkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BndXBkYXRlLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icGd1cGRhdGUiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdvXCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoU29sdXRpb25EaXIpXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlBZGRpdGlvbmFsTWFuaWZlc3REZXBlbmRlbmNpZXM9IiINCi0JCUxpbmtUaW1lQ29kZUdlbmVyYXRpb249IjQiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5ZC52c3Byb3BzIGIvUEMvVlM4LjAvcHlkLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YzIxZTEuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHlkLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHlkIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRSINCi0JCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnB5ZCINCi0JCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5wZGIiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcilcJChUYXJnZXROYW1lKS5saWIiDQotCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJRW1iZWRNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCUNvbW1hbmRMaW5lPSIiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5ZF9kLnZzcHJvcHMgYi9QQy9WUzguMC9weWRfZC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTNhMzBiLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZF9kLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHlkX2QiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMCINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIwIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRSINCi0JCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QucHlkIg0KLQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QucGRiIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCUVtYmVkTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQlDb21tYW5kTGluZT0iIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcilweXRob25fZC5leGUiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qIGIvUEMvVlM4LjAvcHlleHBhdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1OWU0ZWMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHlleHBhdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZXhwYXQiDQotCVByb2plY3RHVUlEPSJ7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfSINCi0JUm9vdE5hbWVzcGFjZT0icHlleHBhdCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHlleHBhdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzIGIvUEMvVlM4LjAvcHlwcm9qZWN0LnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMWJkM2YuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHlwcm9qZWN0LnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHlwcm9qZWN0Ig0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uTmFtZSlcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOyAuLlwuLlxQQyINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzIiDQotCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQotCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJV2FybmluZ0xldmVsPSIzIg0KLQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCUNvbXBpbGVBcz0iMCINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSINCi0JCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCi0JCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJU3ViU3lzdGVtPSIyIg0KLQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KLQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQotCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXEluY2x1ZGUiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5RGxsTmFtZSINCi0JCVZhbHVlPSJweXRob24zMyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoU29sdXRpb25EaXIpXHB5dGhvbi5leGUiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImV4dGVybmFsc0RpciINCi0JCVZhbHVlPSIuLlwuLlwuLiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0ic3FsaXRlM0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNi4yMSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iYnoyRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxiemlwMi0xLjAuNiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0ib3BlbnNzbERpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcb3BlbnNzbC0xLjAuMWUiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx0Y2x0ayINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGs2NERpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGs2NCINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGtMaWIiDQotCQlWYWx1ZT0iJCh0Y2x0a0RpcilcbGliXHRjbDg1LmxpYiAkKHRjbHRrRGlyKVxsaWJcdGs4NS5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrTGliRGVidWciDQotCQlWYWx1ZT0iJCh0Y2x0a0RpcilcbGliXHRjbDg1Zy5saWIgJCh0Y2x0a0RpcilcbGliXHRrODVnLmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGs2NExpYiINCi0JCVZhbHVlPSIkKHRjbHRrNjREaXIpXGxpYlx0Y2w4NS5saWIgJCh0Y2x0azY0RGlyKVxsaWJcdGs4NS5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjRMaWJEZWJ1ZyINCi0JCVZhbHVlPSIkKHRjbHRrNjREaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGs2NERpcilcbGliXHRrODVnLmxpYiINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9uLnZjcHJvaiBiL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNDdjMGUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHl0aG9uLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHl0aG9uIg0KLQlQcm9qZWN0R1VJRD0ie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbl9kLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob25fZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjEwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5Y29uLmljbyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9leGUucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xweXRob24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvaiBiL1BDL1ZTOC4wL3B5dGhvbmNvcmUudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzViYjlkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5dGhvbmNvcmUudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTkyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHl0aG9uY29yZSINCi0JUHJvamVjdEdVSUQ9IntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9Ig0KLQlSb290TmFtZXNwYWNlPSJweXRob25jb3JlIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikkKFB5RGxsTmFtZSkubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikkKFB5RGxsTmFtZSkubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBEZWJ1ZyAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKV9kLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBEZWJ1ZyAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKV9kLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAoJEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJJbmNsdWRlIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYWJzdHJhY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYWNjdS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhc2RsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFzdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxiaXRzZXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYm9vbG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxieXRlc19tZXRob2RzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJ5dGVhcnJheW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxieXRlc29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjZWxsb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNldmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNsYXNzb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29kZWNzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvbXBpbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29tcGxleG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkYXRldGltZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkZXNjcm9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkaWN0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGR5bmFtaWNfYW5ub3RhdGlvbnMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZW51bW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxlcnJjb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGV2YWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmlsZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmaWxldXRpbHMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmxvYXRvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZm9ybWF0dGVyX3VuaWNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZnJhbWVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZnVuY29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxnZW5vYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZ3JhbWluaXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZ3JhbW1hci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxpbXBvcnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaW50cmNoZWNrLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGl0ZXJvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbGlzdG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxsb25naW50cmVwci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxsb25nb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1hcnNoYWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbWVtb3J5b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1ldGFncmFtbWFyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1ldGhvZG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtb2RzdXBwb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1vZHVsZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxub2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvYmppbXBsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG9wY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvc2RlZnMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGFyc2V0b2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGF0Y2hsZXZlbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwZ2VuLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBnZW5oZWFkZXJzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5X2N1cnNlcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWFyZW5hLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5Y2Fwc3VsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWN0eXBlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZGVidWcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHllcnJvcnMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlleHBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWZwZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWdldG9wdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweW1hY3Rvb2xib3guaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltYXRoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5dGltZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweW1lbS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXBvcnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdGF0ZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXN0cmNtcC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXN0cnRvZC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkdG9hLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXFB5dGhvbi1hc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcUHl0aG9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5dGhvbnJ1bi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRocmVhZC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxyYW5nZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzZXRvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc2xpY2VvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3RydWN0bWVtYmVyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN0cnVjdHNlcS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzeW10YWJsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzeXNtb2R1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdGltZWZ1bmNzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHRva2VuLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHRyYWNlYmFjay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0dXBsZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx1Y25oYXNoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHVuaWNvZGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcd2Vha3JlZm9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iTW9kdWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Nzdi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfanNvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sc3Byb2YuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3BpY2tsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3N0cnVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGltZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGltZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhdGV4aXRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXVkaW9vcC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiaW5hc2NpaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjbWF0aG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1haW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xvcGVyYXRvci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGExbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTI1Nm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGltZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9Il9pbyINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9InpsaWIiDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY29tcHJlc3MuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGd6aW8uYyINCi0JCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZpeGVkLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx1bmNvbXByLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHpjb25mLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHpjb25mLmluLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHpsaWIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iY2prY29kZWNzIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcYWxnX2ppc3gwMjAxLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcY2prY29kZWNzLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcZW11X2ppc3gwMjEzXzIwMDAuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19jbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2hrLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2pwLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3Nfa3IuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc190dy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iT2JqZWN0cyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFic3RyYWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFjY3UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYm9vbG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVhcnJheW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjYXBzdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNlbGxvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2xhc3NvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxjb3VudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkaWN0b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGVudW1vYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmFzdHNlYXJjaC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxmaW5kLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZsb2F0b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZyYW1lb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZ1bmNvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZ2Vub2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xsb25nb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZXRob2RvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbW9kdWxlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYm1hbGxvYy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJccGFydGl0aW9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHJhbmdlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNldG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzbGljZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcc3BsaXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RydWN0c2VxLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHR1cGxlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHR5cGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdW5pY29kZWN0eXBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdW5pY29kZXR5cGVfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcd2Vha3JlZm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUGFyc2VyIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxhY2NlbGVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYml0c2V0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZmlyc3RzZXRzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZ3JhbW1hci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIxLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbGlzdG5vZGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxtZXRhZ3JhbW1hci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxub2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJccGFyc2VyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJccGFyc2VyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJccGFyc2V0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclx0b2tlbml6ZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclx0b2tlbml6ZXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlBDIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXF9zdWJwcm9jZXNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3aW5yZWcuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGNvbmZpZy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZGxfbnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGVycm1hcC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZ2V0cGF0aHAuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1zdmNydG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHljb25maWcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlB5dGhvbiINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cX3dhcm5pbmdzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXNkbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGJsdGlubW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY2V2YWwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjb2RlY3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjb21waWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZXJyb3JzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZmlsZXV0aWxzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmcm96ZW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmdXR1cmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRhcmdzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29tcGlsZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRvcHQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHZlcnNpb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxncmFtaW5pdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydGRsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0ZGwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtYXJzaGFsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c25wcmludGYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXN0cnRvdWwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxwZWVwaG9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5YXJlbmEuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWN0eXBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlmcGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweW1hdGguYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXRpbWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0YXRlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJjbXAuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cnRvZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR0b2EuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aG9ucnVuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccmFuZG9tLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3RydWN0bWVtYmVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3ltdGFibGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzeXNtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0aHJlYWQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0aHJlYWRfbnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0cmFjZWJhY2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9udC5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXRob253LnZjcHJvaiBiL1BDL1ZTOC4wL3B5dGhvbncudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDM3Yjc4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5dGhvbncudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNjE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXRob253Ig0KLQlQcm9qZWN0R1VJRD0ie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253X2QuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9ud19kLmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXFdpbk1haW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9yZWxlYXNlLnZzcHJvcHMgYi9QQy9WUzguMC9yZWxlYXNlLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZGVmOTAuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InJlbGVhc2UiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJLaWxsUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoT3V0RGlyKVxraWxsX3B5dGhvbi5leGUiDQotCS8+CQ0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9ybXB5Yy5weSBiL1BDL1ZTOC4wL3JtcHljLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGUxNzA1Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3JtcHljLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBSZW1vdmUgYWxsIHRoZSAucHljIGFuZCAucHlvIGZpbGVzIHVuZGVyIC4uL0xpYi4KLQotCi1kZWYgZGVsdHJlZShyb290KToKLSAgICBpbXBvcnQgb3MKLSAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4KLQotICAgIG5weWMgPSBucHlvID0gMAotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHJvb3QpOgotICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGRlbGV0ZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcucHljJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weWMgKz0gMQotICAgICAgICAgICAgZWxpZiBuYW1lLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weW8gKz0gMQotCi0gICAgICAgICAgICBpZiBkZWxldGU6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGpvaW4ocm9vdCwgbmFtZSkpCi0KLSAgICByZXR1cm4gbnB5YywgbnB5bwotCi1ucHljLCBucHlvID0gZGVsdHJlZSgiLi4vLi4vTGliIikKLXByaW50KG5weWMsICIucHljIGRlbGV0ZWQsIiwgbnB5bywgIi5weW8gZGVsZXRlZCIpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9ydC5iYXQgYi9QQy9WUzguMC9ydC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MjllMTkuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcnQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gUnVuIFRlc3RzLiAgUnVuIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUuCi1yZW0gVXNhZ2U6ICBydCBbLWRdIFstT10gWy1xXSByZWdydGVzdF9hcmdzCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi1yZW0gLU8gICBSdW4gcHl0aG9uLmV4ZSBvciBweXRob25fZC5leGUgKHNlZSAtZCkgd2l0aCAtTy4KLXJlbSAtcSAgICJxdWljayIgLS0gbm9ybWFsbHkgdGhlIHRlc3RzIGFyZSBydW4gdHdpY2UsIHRoZSBmaXJzdCB0aW1lCi1yZW0gICAgICBhZnRlciBkZWxldGluZyBhbGwgdGhlIC5weVtjb10gZmlsZXMgcmVhY2hhYmxlIGZyb20gTGliLy4KLXJlbSAgICAgIC1xIHJ1bnMgdGhlIHRlc3RzIGp1c3Qgb25jZSwgYW5kIHdpdGhvdXQgZGVsZXRpbmcgLnB5W2NvXSBmaWxlcy4KLXJlbSBBbGwgbGVhZGluZyBpbnN0YW5jZXMgb2YgdGhlc2Ugc3dpdGNoZXMgYXJlIHNoaWZ0ZWQgb2ZmLCBhbmQKLXJlbSB3aGF0ZXZlciByZW1haW5zIGlzIHBhc3NlZCB0byByZWdydGVzdC5weS4gIEZvciBleGFtcGxlLAotcmVtICAgICBydCAtTyAtZCAteCB0ZXN0X3RocmVhZAotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLU8gLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLXggdGVzdF90aHJlYWQKLXJlbSB0d2ljZSwgYW5kCi1yZW0gICAgIHJ0IC1xIC1nIHRlc3RfYmluYXNjaWkKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1nIHRlc3RfYmluYXNjaWkKLXJlbSB0byBnZW5lcmF0ZSB0aGUgZXhwZWN0ZWQtb3V0cHV0IGZpbGUgZm9yIGJpbmFzY2lpIHF1aWNrbHkuCi1yZW0KLXJlbSBDb25mdXNpbmc6ICBpZiB5b3Ugd2FudCB0byBwYXNzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIGxpa2UKLXJlbSAgICAgLXUgbmV0d29yayxsYXJnZWZpbGUKLXJlbSB0aGVuIHlvdSBoYXZlIHRvIHF1b3RlIGl0IG9uIHRoZSBydCBsaW5lLCBsaWtlCi1yZW0gICAgIHJ0IC11ICJuZXR3b3JrLGxhcmdlZmlsZSIKLQotc2V0bG9jYWwKLQotc2V0IGV4ZT1weXRob24KLXNldCBxbW9kZT0KLXNldCBkYXNoTz0KLVBBVEggJVBBVEglOyV+ZHAwLi5cLi5cLi5cdGNsdGtcYmluCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItTyIgKHNldCBkYXNoTz0tTykgICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1xIiAoc2V0IHFtb2RlPXllcykgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLWQiIChzZXQgZXhlPXB5dGhvbl9kKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IGNtZD0lZXhlJSAlZGFzaE8lIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci1pZiBkZWZpbmVkIHFtb2RlIGdvdG8gUW1vZGUKLQotZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uCi0lZXhlJSBybXB5Yy5weQotCi1lY2hvIG9uCi0lY21kJQotQGVjaG8gb2ZmCi0KLWVjaG8gQWJvdXQgdG8gcnVuIGFnYWluIHdpdGhvdXQgZGVsZXRpbmcgLnB5Yy8ucHlvIGZpcnN0OgotcGF1c2UKLQotOlFtb2RlCi1lY2hvIG9uCi0lY21kJQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvc2VsZWN0LnZjcHJvaiBiL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MWZjMTYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc2VsZWN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ic2VsZWN0Ig0KLQlQcm9qZWN0R1VJRD0iezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30iDQotCVJvb3ROYW1lc3BhY2U9InNlbGVjdCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzguMC9zcWxpdGUzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFmYmU1ZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9zcWxpdGUzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ic3FsaXRlMyINCi0JUHJvamVjdEdVSUQ9IntBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9Ig0KLQlSb290TmFtZXNwYWNlPSJzcWxpdGUzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7Li5cLi5cLi5cc3FsaXRlLTMuNi4yMSZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjFcc3FsaXRlM2V4dC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjFcc3FsaXRlMy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcyBiL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwMDMyOC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ic3FsaXRlMyINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIg0KLQkJV2FybmluZ0xldmVsPSIxIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zc2wudmNwcm9qIGIvUEMvVlM4LjAvc3NsLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBkNjM1ZS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9zc2wudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJzc2wiDQotCVByb2plY3RHVUlEPSJ7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSINCi0JUm9vdE5hbWVzcGFjZT0ic3NsIg0KLQlLZXl3b3JkPSJNYWtlRmlsZVByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3VuaWNvZGVkYXRhLnZjcHJvaiBiL1BDL1ZTOC4wL3VuaWNvZGVkYXRhLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmN2QyMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InVuaWNvZGVkYXRhIg0KLQlQcm9qZWN0R1VJRD0ie0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0iDQotCVJvb3ROYW1lc3BhY2U9InVuaWNvZGVkYXRhIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YV9kYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x1bmljb2RlbmFtZV9kYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGEuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC93OXhwb3Blbi52Y3Byb2ogYi9QQy9WUzguMC93OXhwb3Blbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNGQyMDYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTc2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJ3OXhwb3BlbiINCi0JUHJvamVjdEdVSUQ9IntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlSb290TmFtZXNwYWNlPSJ3OXhwb3BlbiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHc5eHBvcGVuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvd2luc291bmQudmNwcm9qIGIvUEMvVlM4LjAvd2luc291bmQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzc5MzU3Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0id2luc291bmQiDQotCVByb2plY3RHVUlEPSJ7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fSINCi0JUm9vdE5hbWVzcGFjZT0id2luc291bmQiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcd2luc291bmQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC94NjQudnNwcm9wcyBiL1BDL1ZTOC4wL3g2NC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Zjg4ZDQ0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3g2NC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImFtZDY0Ig0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpXGFtZDY0XCINCi0JSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbk5hbWUpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCUFkZGl0aW9uYWxPcHRpb25zPSIvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU42NDtfTV9YNjQiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoSE9TVF9QWVRIT04pIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2oKaW5kZXggZjcxMDBmMS4uODJjNTdhZSAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCisrKyBiL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagpAQCAtNTU1LDEwICs1NTUsNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3FsaXRlY29tcGF0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX3NzbC52Y3Byb2ogYi9QQy9WUzkuMC9fc3NsLnZjcHJvagppbmRleCA5N2FhMjk0Li5iNDdkYzI3IDEwMDY0NAotLS0gYS9QQy9WUzkuMC9fc3NsLnZjcHJvagorKysgYi9QQy9WUzkuMC9fc3NsLnZjcHJvagpAQCAtMSw3ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KIDxWaXN1YWxTdHVkaW9Qcm9qZWN0DQogCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI5LjAwIg0KKwlWZXJzaW9uPSI5LDAwIg0KIAlOYW1lPSJfc3NsIg0KIAlQcm9qZWN0R1VJRD0ie0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0iDQogCVJvb3ROYW1lc3BhY2U9Il9zc2wiDQpAQCAtNTYsNyArNTYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTI0Myw3ICsyNDMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzY4LDcgKzM2OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTQzMSw3ICs0MzEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC00OTQsNyArNDk0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCiAJCQkvPg0KIAkJCTxUb29sDQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3Rlc3RjYXBpLnZjcHJvaiBiL1BDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIFBDL1ZTOC4wL190ZXN0Y2FwaS52Y3Byb2oKcmVuYW1lIHRvIFBDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qCmluZGV4IDc2YWQyZDguLjE0ZDkxMGQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL190ZXN0Y2FwaS52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oKQEAgLTEsMTAgKzEsMTAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KIDxWaXN1YWxTdHVkaW9Qcm9qZWN0DQogCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfdGVzdGNhcGkiDQotCVByb2plY3RHVUlEPSJ7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfSINCi0JUm9vdE5hbWVzcGFjZT0iX3Rlc3RjYXBpIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJfdGVzdGltcG9ydG11bHRpcGxlIg0KKwlQcm9qZWN0R1VJRD0iezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0iDQorCVJvb3ROYW1lc3BhY2U9Il90ZXN0aW1wb3J0bXVsdGlwbGUiDQogCUtleXdvcmQ9IldpbjMyUHJvaiINCiAJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KIAk+DQpAQCAtNTExLDcgKzUxMSw3IEBACiAJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQogCQkJPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGNhcGltb2R1bGUuYyINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90ZXN0aW1wb3J0bXVsdGlwbGUuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCTwvRmlsdGVyPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMgYi9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCmluZGV4IGJiMzIzZDMuLjYwNDczMWYgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMKKysrIGIvUEMvVlM5LjAva2lsbF9weXRob24uYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFhYWCBUT0RPOiBpZiB3ZSByZWFsbHkgd2FudGVkIHRvIGJlIGZhbmN5LCB3ZSBjb3VsZCBjaGVjayB0aGUgCiAgICAgICAgICAqIG1vZHVsZXMgZm9yIGFsbCBwcm9jZXNzZXMgKG5vdCBqdXN0IHRoZSBweXRob25bX2RdLmV4ZSBvbmVzKQotICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjMzW19kXS5kbGwpLAorICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjM0W19kXS5kbGwpLAogICAgICAgICAgKiBhcyB0aGF0IHdvdWxkIGFsc28gaW5oaWJpdCBvdXIgYWJpbGl0eSB0byByZWJ1aWxkIHRoZSBzb2x1dGlvbi4KICAgICAgICAgICogTm90IHdvcnRoIGxvb3Npbmcgc2xlZXAgb3ZlciB0aG91Z2g7IGZvciBub3csIGEgc2ltcGxlIGNoZWNrIAogICAgICAgICAgKiBmb3IganVzdCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9wY2J1aWxkLnNsbiBiL1BDL1ZTOS4wL3BjYnVpbGQuc2xuCmluZGV4IDhmOGNiYjYuLmJhN2Y2OWMgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL3BjYnVpbGQuc2xuCisrKyBiL1BDL1ZTOS4wL3BjYnVpbGQuc2xuCkBAIC0yMCwxMSArMjAsNiBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmNwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fSIpID0gIlNvbHV0aW9uIEl0ZW1zIiwgIlNvbHV0aW9uIEl0ZW1zIiwgIns1NTNFQzMzRS05ODE2LTQ5OTYtQTY2MC01RDYxODZBMEIwQjN9Ig0KQEAgLTg3LDYgKzgyLDExIEBACiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCiAJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGltcG9ydG11bHRpcGxlIiwgIl90ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qIiwgInszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQorCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQorCUVuZFByb2plY3RTZWN0aW9uDQorRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3RraW50ZXIiLCAiX3RraW50ZXIudmNwcm9qIiwgIns0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KIAlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQpAQCAtNDIwLDYgKzQyMCwyMiBAQAogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTY1MSw2ICs2NjcsMjIgQEAKIAkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJRW5kR2xvYmFsU2VjdGlvbg0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KIAkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMgYi9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcwppbmRleCBmZjM3NTllLi5hOTA5ODc1IDEwMDY0NAotLS0gYS9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcworKysgYi9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcwpAQCAtMzgsNyArMzgsNyBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9IlB5RGxsTmFtZSINCi0JCVZhbHVlPSJweXRob24zMyINCisJCVZhbHVlPSJweXRob24zNCINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iUHl0aG9uRXhlIg0KQEAgLTUwLDcgKzUwLDcgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJzcWxpdGUzRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy43LjEyIg0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy44LjMuMSINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iYnoyRGlyIg0KQEAgLTU4LDExICs1OCwxMSBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9Imx6bWFEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHh6LTUuMC4zIg0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuNSINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0ib3BlbnNzbERpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcb3BlbnNzbC0xLjAuMWUiDQorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFnIg0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJ0Y2x0a0RpciINCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvaiBiL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qCmluZGV4IDlmYjYzZmYuLmNmNjA0NzAgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qCisrKyBiL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qCkBAIC0xMTE5LDcgKzExMTksNyBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG9wZXJhdG9yLmMiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfb3BlcmF0b3IuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTExNTUsNiArMTE1NSwyMiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNyZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmVfY29uc3RhbnRzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNyZV9saWIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3N0YXQuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMjQyLDc0ICsxMjU4LDYgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMiDQotCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkBAIC0xNTg3LDYgKzE1MzUsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJccmVwbGFjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC93OXhwb3Blbi52Y3Byb2ogYi9QQy9WUzkuMC93OXhwb3Blbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhODViMDAuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTc2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI5LjAwIg0KLQlOYW1lPSJ3OXhwb3BlbiINCi0JUHJvamVjdEdVSUQ9IntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlSb290TmFtZXNwYWNlPSJ3OXhwb3BlbiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHc5eHBvcGVuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvX21zaS5jIGIvUEMvX21zaS5jCmluZGV4IDBiNWI5NGUuLjZhOTliNDAgMTAwNjQ0Ci0tLSBhL1BDL19tc2kuYworKysgYi9QQy9fbXNpLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogc3RhdGljIEZORkNJT1BFTihjYl9vcGVuKQogewotICAgIGludCByZXN1bHQgPSBfb3Blbihwc3pGaWxlLCBvZmxhZywgcG1vZGUpOworICAgIGludCByZXN1bHQgPSBfb3Blbihwc3pGaWxlLCBvZmxhZyB8IE9fTk9JTkhFUklULCBwbW9kZSk7CiAgICAgaWYgKHJlc3VsdCA9PSAtMSkKICAgICAgICAgKmVyciA9IGVycm5vOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC02Myw3ICs2Myw3IEBACiAKIHN0YXRpYyBGTkZDSVJFQUQoY2JfcmVhZCkKIHsKLSAgICBVSU5UIHJlc3VsdCA9IChVSU5UKV9yZWFkKGhmLCBtZW1vcnksIGNiKTsKKyAgICBVSU5UIHJlc3VsdCA9IChVSU5UKV9yZWFkKChpbnQpaGYsIG1lbW9yeSwgY2IpOwogICAgIGlmIChyZXN1bHQgIT0gY2IpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzEsNyArNzEsNyBAQAogCiBzdGF0aWMgRk5GQ0lXUklURShjYl93cml0ZSkKIHsKLSAgICBVSU5UIHJlc3VsdCA9IChVSU5UKV93cml0ZShoZiwgbWVtb3J5LCBjYik7CisgICAgVUlOVCByZXN1bHQgPSAoVUlOVClfd3JpdGUoKGludCloZiwgbWVtb3J5LCBjYik7CiAgICAgaWYgKHJlc3VsdCAhPSBjYikKICAgICAgICAgKmVyciA9IGVycm5vOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC03OSw3ICs3OSw3IEBACiAKIHN0YXRpYyBGTkZDSUNMT1NFKGNiX2Nsb3NlKQogewotICAgIGludCByZXN1bHQgPSBfY2xvc2UoaGYpOworICAgIGludCByZXN1bHQgPSBfY2xvc2UoKGludCloZik7CiAgICAgaWYgKHJlc3VsdCAhPSAwKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg3LDcgKzg3LDcgQEAKIAogc3RhdGljIEZORkNJU0VFSyhjYl9zZWVrKQogewotICAgIGxvbmcgcmVzdWx0ID0gKGxvbmcpX2xzZWVrKGhmLCBkaXN0LCBzZWVrdHlwZSk7CisgICAgbG9uZyByZXN1bHQgPSAobG9uZylfbHNlZWsoKGludCloZiwgZGlzdCwgc2Vla3R5cGUpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTc5LDcgKzE3OSw3IEBACiAKICAgICBDbG9zZUhhbmRsZShoYW5kbGUpOwogCi0gICAgcmV0dXJuIF9vcGVuKHBzek5hbWUsIF9PX1JET05MWSB8IF9PX0JJTkFSWSk7CisgICAgcmV0dXJuIF9vcGVuKHBzek5hbWUsIF9PX1JET05MWSB8IF9PX0JJTkFSWSB8IE9fTk9JTkhFUklUKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0KiBmY2ljcmVhdGUoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGFyZ3MpCkBAIC0xMDMwLDQwICsxMDMwLDQwIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSURCT1BFTl9UUkFOU0FDVCIsIChpbnQpTVNJREJPUEVOX1RSQU5TQUNUKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJREJPUEVOX1BBVENIRklMRSIsIChpbnQpTVNJREJPUEVOX1BBVENIRklMRSk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJQ09MSU5GT19OQU1FUyIsIE1TSUNPTElORk9fTkFNRVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lDT0xJTkZPX1RZUEVTIiwgTVNJQ09MSU5GT19UWVBFUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJQ09MSU5GT19OQU1FUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJQ09MSU5GT19UWVBFUyk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1NFRUsiLCBNU0lNT0RJRllfU0VFSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9SRUZSRVNIIiwgTVNJTU9ESUZZX1JFRlJFU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfSU5TRVJUIiwgTVNJTU9ESUZZX0lOU0VSVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9VUERBVEUiLCBNU0lNT0RJRllfVVBEQVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0FTU0lHTiIsIE1TSU1PRElGWV9BU1NJR04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfUkVQTEFDRSIsIE1TSU1PRElGWV9SRVBMQUNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX01FUkdFIiwgTVNJTU9ESUZZX01FUkdFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0RFTEVURSIsIE1TSU1PRElGWV9ERUxFVEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWSIsIE1TSU1PRElGWV9JTlNFUlRfVEVNUE9SQVJZKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFIiwgTVNJTU9ESUZZX1ZBTElEQVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX05FVyIsIE1TSU1PRElGWV9WQUxJREFURV9ORVcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVkFMSURBVEVfRklFTEQiLCBNU0lNT0RJRllfVkFMSURBVEVfRklFTEQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVkFMSURBVEVfREVMRVRFIiwgTVNJTU9ESUZZX1ZBTElEQVRFX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1NFRUspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9SRUZSRVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfSU5TRVJUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVVBEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfQVNTSUdOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfUkVQTEFDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX01FUkdFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEVfTkVXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEVfRklFTEQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9WQUxJREFURV9ERUxFVEUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9DT0RFUEFHRSIsIFBJRF9DT0RFUEFHRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9USVRMRSIsIFBJRF9USVRMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9TVUJKRUNUIiwgUElEX1NVQkpFQ1QpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQVVUSE9SIiwgUElEX0FVVEhPUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9LRVlXT1JEUyIsIFBJRF9LRVlXT1JEUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9DT01NRU5UUyIsIFBJRF9DT01NRU5UUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9URU1QTEFURSIsIFBJRF9URU1QTEFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9MQVNUQVVUSE9SIiwgUElEX0xBU1RBVVRIT1IpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfUkVWTlVNQkVSIiwgUElEX1JFVk5VTUJFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9MQVNUUFJJTlRFRCIsIFBJRF9MQVNUUFJJTlRFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9DUkVBVEVfRFRNIiwgUElEX0NSRUFURV9EVE0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVFNBVkVfRFRNIiwgUElEX0xBU1RTQVZFX0RUTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9QQUdFQ09VTlQiLCBQSURfUEFHRUNPVU5UKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1dPUkRDT1VOVCIsIFBJRF9XT1JEQ09VTlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ0hBUkNPVU5UIiwgUElEX0NIQVJDT1VOVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9BUFBOQU1FIiwgUElEX0FQUE5BTUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfU0VDVVJJVFkiLCBQSURfU0VDVVJJVFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DT0RFUEFHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1RJVExFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfU1VCSkVDVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0FVVEhPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0tFWVdPUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ09NTUVOVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9URU1QTEFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0xBU1RBVVRIT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9SRVZOVU1CRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9MQVNUUFJJTlRFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0NSRUFURV9EVE0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9MQVNUU0FWRV9EVE0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9QQUdFQ09VTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9XT1JEQ09VTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DSEFSQ09VTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9BUFBOQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfU0VDVVJJVFkpOwogCiAgICAgTVNJRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24gKCJfbXNpLk1TSUVycm9yIiwgTlVMTCwgTlVMTCk7CiAgICAgaWYgKCFNU0lFcnJvcikKZGlmZiAtLWdpdCBhL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jIGIvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLmMKaW5kZXggYzExZDQ1ZC4uZTk0MDFkOSAxMDA2NDQKLS0tIGEvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLmMKKysrIGIvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLmMKQEAgLTc0Myw3ICs3NDMsNyBAQAogICAgIGlmIChwYXRobmFtZSA9PSBOVUxMIHx8IHBhdGhuYW1lWzBdID09ICdcMCcpCiAgICAgICAgIHJldHVybiAyOwogCi0gICAgZmggPSBvcGVuKHBhdGhuYW1lLCBfT19SRE9OTFkpOworICAgIGZoID0gb3BlbihwYXRobmFtZSwgX09fUkRPTkxZIHwgT19OT0lOSEVSSVQpOwogICAgIGlmICgtMSA9PSBmaCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIHBvc3RpbnN0YWxsLXNjcmlwdCAlc1xuIiwKICAgICAgICAgICAgIHBhdGhuYW1lKTsKZGlmZiAtLWdpdCBhL1BDL2NvbmZpZy5jIGIvUEMvY29uZmlnLmMKaW5kZXggNTdiNTA3My4uNzJjOTM4MSAxMDA2NDQKLS0tIGEvUEMvY29uZmlnLmMKKysrIGIvUEMvY29uZmlnLmMKQEAgLTEzLDExICsxMywxMiBAQAogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfY21hdGgodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9lcnJubyh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2ZhdWx0aGFuZGxlcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X190cmFjZW1hbGxvYyh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2djKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfbWF0aCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19tZDUodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9udCh2b2lkKTsKLWV4dGVybiBQeU9iamVjdCogUHlJbml0X29wZXJhdG9yKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX29wZXJhdG9yKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfc2lnbmFsKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTEodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2hhMjU2KHZvaWQpOwpAQCAtNjQsNiArNjUsOCBAQAogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfYXRleGl0KHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBfUHlXYXJuaW5nc19Jbml0KHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0cmluZyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19zdGF0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX29wY29kZSh2b2lkKTsKIAogLyogdG9vbHMvZnJlZXplL21ha2Vjb25maWcucHkgbWFya2VyIGZvciBhZGRpdGlvbmFsICJleHRlcm4iICovCiAvKiAtLSBBRERNT0RVTEUgTUFSS0VSIDEgLS0gKi8KQEAgLTg3LDcgKzkwLDcgQEAKICAgICB7ImdjIiwgUHlJbml0X2djfSwKICAgICB7Im1hdGgiLCBQeUluaXRfbWF0aH0sCiAgICAgeyJudCIsIFB5SW5pdF9udH0sIC8qIFVzZSB0aGUgTlQgb3MgZnVuY3Rpb25zLCBub3QgcG9zaXggKi8KLSAgICB7Im9wZXJhdG9yIiwgUHlJbml0X29wZXJhdG9yfSwKKyAgICB7Il9vcGVyYXRvciIsIFB5SW5pdF9fb3BlcmF0b3J9LAogICAgIHsic2lnbmFsIiwgUHlJbml0X3NpZ25hbH0sCiAgICAgeyJfbWQ1IiwgUHlJbml0X19tZDV9LAogICAgIHsiX3NoYTEiLCBQeUluaXRfX3NoYTF9LApAQCAtMTAxLDYgKzEwNCw3IEBACiAgICAgeyJtc3ZjcnQiLCBQeUluaXRfbXN2Y3J0fSwKICAgICB7Il9sb2NhbGUiLCBQeUluaXRfX2xvY2FsZX0sCiAjZW5kaWYKKyAgICB7Il90cmFjZW1hbGxvYyIsIFB5SW5pdF9fdHJhY2VtYWxsb2N9LAogICAgIC8qIFhYWCBTaG91bGQgX3dpbmFwaSBnbyBpbiBhIFdJTjMyIGJsb2NrPyAgbm90IFdJTjY0PyAqLwogICAgIHsiX3dpbmFwaSIsIFB5SW5pdF9fd2luYXBpfSwKIApAQCAtMTU0LDYgKzE1OCw4IEBACiAgICAgeyJfaW8iLCBQeUluaXRfX2lvfSwKICAgICB7Il9waWNrbGUiLCBQeUluaXRfX3BpY2tsZX0sCiAgICAgeyJhdGV4aXQiLCBQeUluaXRfYXRleGl0fSwKKyAgICB7Il9zdGF0IiwgUHlJbml0X19zdGF0fSwKKyAgICB7Il9vcGNvZGUiLCBQeUluaXRfX29wY29kZX0sCiAKICAgICAvKiBTZW50aW5lbCAqLwogICAgIHswLCAwfQpkaWZmIC0tZ2l0IGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvaiBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKaW5kZXggZmJhMDBiNi4uZGYzNjM0MSAxMDA2NDQKLS0tIGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagorKysgYi9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qCkBAIC0zOSw3ICszOSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvZXhwb3J0OmluaXRleGFtcGxlIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24zMy5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjM0LmxpYiINCiAJCQkJT3V0cHV0RmlsZT0iLlxSZWxlYXNlL2V4YW1wbGUucHlkIg0KIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9leHBvcnQ6aW5pdGV4YW1wbGUiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjMzX2QubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24zNF9kLmxpYiINCiAJCQkJT3V0cHV0RmlsZT0iLlxEZWJ1Zy9leGFtcGxlX2QucHlkIg0KIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCmRpZmYgLS1naXQgYS9QQy9nZXRwYXRocC5jIGIvUEMvZ2V0cGF0aHAuYwppbmRleCBiNWJmMzI1Li5kZWI0MGU3IDEwMDY0NAotLS0gYS9QQy9nZXRwYXRocC5jCisrKyBiL1BDL2dldHBhdGhwLmMKQEAgLTEsNiArMSw2IEBACiAKIC8qIFJldHVybiB0aGUgaW5pdGlhbCBtb2R1bGUgc2VhcmNoIHBhdGguICovCi0vKiBVc2VkIGJ5IERPUywgT1MvMiwgV2luZG93cyAzLjEsIFdpbmRvd3MgOTUvOTgsIFdpbmRvd3MgTlQuICovCisvKiBVc2VkIGJ5IERPUywgV2luZG93cyAzLjEsIFdpbmRvd3MgOTUvOTgsIFdpbmRvd3MgTlQuICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFBBVEggUlVMRVMgRk9SIFdJTkRPV1M6CkBAIC0yNDUsOSArMjQ1LDkgQEAKICAgICAvKiBUcmllZCB0byB1c2Ugc3lzZ2V0KCJ3aW52ZXIiKSBidXQgaGVyZSBpcyB0b28gZWFybHkgOi0oICovCiAgICAgdmVyc2lvbkxlbiA9IHN0cmxlbihQeVdpbl9ETExWZXJzaW9uU3RyaW5nKTsKICAgICAvKiBTcGFjZSBmb3IgYWxsIHRoZSBjaGFycywgcGx1cyBvbmUgXDAgKi8KLSAgICBrZXlCdWYgPSBrZXlCdWZQdHIgPSBtYWxsb2Moc2l6ZW9mKGtleVByZWZpeCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV0NIQVIpKih2ZXJzaW9uTGVuLTEpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtleVN1ZmZpeCkpOworICAgIGtleUJ1ZiA9IGtleUJ1ZlB0ciA9IFB5TWVtX1Jhd01hbGxvYyhzaXplb2Yoa2V5UHJlZml4KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXQ0hBUikqKHZlcnNpb25MZW4tMSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2V5U3VmZml4KSk7CiAgICAgaWYgKGtleUJ1Zj09TlVMTCkgZ290byBkb25lOwogCiAgICAgbWVtY3B5KGtleUJ1ZlB0ciwga2V5UHJlZml4LCBzaXplb2Yoa2V5UHJlZml4KS1zaXplb2YoV0NIQVIpKTsKQEAgLTI3MSw3ICsyNzEsNyBAQAogICAgIC8qIEFsbG9jYXRlIGEgdGVtcCBhcnJheSBvZiBjaGFyIGJ1ZmZlcnMsIHNvIHdlIG9ubHkgbmVlZCB0byBsb29wCiAgICAgICAgcmVhZGluZyB0aGUgcmVnaXN0cnkgb25jZQogICAgICovCi0gICAgcHBQYXRocyA9IG1hbGxvYyggc2l6ZW9mKFdDSEFSICopICogbnVtS2V5cyApOworICAgIHBwUGF0aHMgPSBQeU1lbV9SYXdNYWxsb2MoIHNpemVvZihXQ0hBUiAqKSAqIG51bUtleXMgKTsKICAgICBpZiAocHBQYXRocz09TlVMTCkgZ290byBkb25lOwogICAgIG1lbXNldChwcFBhdGhzLCAwLCBzaXplb2YoV0NIQVIgKikgKiBudW1LZXlzKTsKICAgICAvKiBMb29wIG92ZXIgYWxsIHN1YmtleXMsIGFsbG9jYXRpbmcgYSB0ZW1wIHN1Yi1idWZmZXIuICovCkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAgICAgLyogRmluZCB0aGUgdmFsdWUgb2YgdGhlIGJ1ZmZlciBzaXplLCBtYWxsb2MsIHRoZW4gcmVhZCBpdCAqLwogICAgICAgICBSZWdRdWVyeVZhbHVlRXhXKHN1YktleSwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgJnJlcWRTaXplKTsKICAgICAgICAgaWYgKHJlcWRTaXplKSB7Ci0gICAgICAgICAgICBwcFBhdGhzW2luZGV4XSA9IG1hbGxvYyhyZXFkU2l6ZSk7CisgICAgICAgICAgICBwcFBhdGhzW2luZGV4XSA9IFB5TWVtX1Jhd01hbGxvYyhyZXFkU2l6ZSk7CiAgICAgICAgICAgICBpZiAocHBQYXRoc1tpbmRleF0pIHsKICAgICAgICAgICAgICAgICBSZWdRdWVyeVZhbHVlRXhXKHN1YktleSwgTlVMTCwgMCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQQllURSlwcFBhdGhzW2luZGV4XSwKQEAgLTMwOCw3ICszMDgsNyBAQAogICAgIGlmIChkYXRhU2l6ZSA9PSAwKSBnb3RvIGRvbmU7CiAKICAgICAvKiBvcmlnaW5hbCBkYXRhc2l6ZSBmcm9tIFJlZ1F1ZXJ5SW5mbyBkb2Vzbid0IGluY2x1ZGUgdGhlIFwwICovCi0gICAgZGF0YUJ1ZiA9IG1hbGxvYygoZGF0YVNpemUrMSkgKiBzaXplb2YoV0NIQVIpKTsKKyAgICBkYXRhQnVmID0gUHlNZW1fUmF3TWFsbG9jKChkYXRhU2l6ZSsxKSAqIHNpemVvZihXQ0hBUikpOwogICAgIGlmIChkYXRhQnVmKSB7CiAgICAgICAgIFdDSEFSICpzekN1ciA9IGRhdGFCdWY7CiAgICAgICAgIERXT1JEIHJlcWRTaXplID0gZGF0YVNpemU7CkBAIC0zNDYsMTQgKzM0NiwxMyBAQAogZG9uZToKICAgICAvKiBMb29wIGZyZWVpbmcgbXkgdGVtcCBidWZmZXJzICovCiAgICAgaWYgKHBwUGF0aHMpIHsKLSAgICAgICAgZm9yKGluZGV4PTA7aW5kZXg8bnVtS2V5cztpbmRleCsrKQotICAgICAgICAgICAgaWYgKHBwUGF0aHNbaW5kZXhdKSBmcmVlKHBwUGF0aHNbaW5kZXhdKTsKLSAgICAgICAgZnJlZShwcFBhdGhzKTsKKyAgICAgICAgZm9yKGluZGV4PTA7IGluZGV4PG51bUtleXM7IGluZGV4KyspCisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHBwUGF0aHNbaW5kZXhdKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShwcFBhdGhzKTsKICAgICB9CiAgICAgaWYgKG5ld0tleSkKICAgICAgICAgUmVnQ2xvc2VLZXkobmV3S2V5KTsKLSAgICBpZiAoa2V5QnVmKQotICAgICAgICBmcmVlKGtleUJ1Zik7CisgICAgUHlNZW1fUmF3RnJlZShrZXlCdWYpOwogICAgIHJldHVybiByZXR2YWw7CiB9CiAjZW5kaWYgLyogUHlfRU5BQkxFX1NIQVJFRCAqLwpAQCAtNDM0LDcgKzQzMyw3IEBACiAgICAgICAgIGNoYXIgKiBwID0gZmdldHMoYnVmZmVyLCBNQVhQQVRITEVOKjIsIGVudl9maWxlKTsKICAgICAgICAgd2NoYXJfdCB0bXBidWZmZXJbTUFYUEFUSExFTioyKzFdOwogICAgICAgICBQeU9iamVjdCAqIGRlY29kZWQ7Ci0gICAgICAgIGludCBuOworICAgICAgICBzaXplX3QgbjsKIAogICAgICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7CkBAIC02MTYsNyArNjE1LDcgQEAKICAgICBpZiAoZW52cGF0aCAhPSBOVUxMKQogICAgICAgICBidWZzeiArPSB3Y3NsZW4oZW52cGF0aCkgKyAxOwogCi0gICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmID0gbWFsbG9jKGJ1ZnN6KnNpemVvZih3Y2hhcl90KSk7CisgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmID0gUHlNZW1fUmF3TWFsbG9jKGJ1ZnN6KnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgIC8qIFdlIGNhbid0IGV4aXQsIHNvIHByaW50IGEgd2FybmluZyBhbmQgbGltcCBhbG9uZyAqLwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG1hbGxvYyBkeW5hbWljIFBZVEhPTlBBVEguXG4iKTsKQEAgLTYyOSwxMCArNjI4LDggQEAKICAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFBZVEhPTlBBVEg7CiAgICAgICAgIH0KICNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIGlmIChtYWNoaW5lcGF0aCkKLSAgICAgICAgICAgIGZyZWUobWFjaGluZXBhdGgpOwotICAgICAgICBpZiAodXNlcnBhdGgpCi0gICAgICAgICAgICBmcmVlKHVzZXJwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShtYWNoaW5lcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUodXNlcnBhdGgpOwogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY1MiwxMyArNjQ5LDEzIEBACiAgICAgICAgIHdjc2NweShidWYsIHVzZXJwYXRoKTsKICAgICAgICAgYnVmID0gd2NzY2hyKGJ1ZiwgTCdcMCcpOwogICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgZnJlZSh1c2VycGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUodXNlcnBhdGgpOwogICAgIH0KICAgICBpZiAobWFjaGluZXBhdGgpIHsKICAgICAgICAgd2NzY3B5KGJ1ZiwgbWFjaGluZXBhdGgpOwogICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CiAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICBmcmVlKG1hY2hpbmVwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShtYWNoaW5lcGF0aCk7CiAgICAgfQogICAgIGlmIChweXRob25ob21lID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFza2lwZGVmYXVsdCkgewpAQCAtNzQ1LDcgKzc0Miw3IEBACiBQeV9TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKSB7Ci0gICAgICAgIGZyZWUobW9kdWxlX3NlYXJjaF9wYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOwogICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwogICAgIH0KICAgICBpZiAocGF0aCAhPSBOVUxMKSB7CkBAIC03NTMsMTAgKzc1MCwxMCBAQAogICAgICAgICB3Y2hhcl90ICpwcm9nID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKICAgICAgICAgd2NzbmNweShwcm9ncGF0aCwgcHJvZywgTUFYUEFUSExFTik7CiAgICAgICAgIHByZWZpeFswXSA9IEwnXDAnOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBtYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUHlNZW1fUmF3TWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGggIT0gTlVMTCkKICAgICAgICAgICAgIHdjc2NweShtb2R1bGVfc2VhcmNoX3BhdGgsIHBhdGgpOwotCX0KKyAgICB9CiB9CiAKIHdjaGFyX3QgKgpkaWZmIC0tZ2l0IGEvUEMvbGF1bmNoZXIuYyBiL1BDL2xhdW5jaGVyLmMKaW5kZXggMjE2YTU2Mi4uZWUzY2Q0NCAxMDA2NDQKLS0tIGEvUEMvbGF1bmNoZXIuYworKysgYi9QQy9sYXVuY2hlci5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFZpbmF5IFNhamlwLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgVmluYXkgU2FqaXAuCiAgKiBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBjb250cmlidXRvciBhZ3JlZW1lbnQuCiAgKgogICogQmFzZWQgb24gdGhlIHdvcmsgb2Y6CkBAIC0xOCw3ICsxOCwyOCBAQAogCiAvKiBCdWlsZCBvcHRpb25zLiAqLwogI2RlZmluZSBTS0lQX1BSRUZJWAotLyogI2RlZmluZSBTRUFSQ0hfUEFUSCAqLworI2RlZmluZSBTRUFSQ0hfUEFUSAorCisvKiBFcnJvciBjb2RlcyAqLworCisjZGVmaW5lIFJDX05PX1NURF9IQU5ETEVTICAgMTAwCisjZGVmaW5lIFJDX0NSRUFURV9QUk9DRVNTICAgMTAxCisjZGVmaW5lIFJDX0JBRF9WSVJUVUFMX1BBVEggMTAyCisjZGVmaW5lIFJDX05PX1BZVEhPTiAgICAgICAgMTAzCisjZGVmaW5lIFJDX05PX01FTU9SWSAgICAgICAgMTA0CisvKgorICogU0NSSVBUX1dSQVBQRVIgaXMgdXNlZCB0byBjaG9vc2UgYmV0d2VlbiB0d28gdmFyaWFudHMgb2YgYW4gZXhlY3V0YWJsZSBidWlsdAorICogZnJvbSB0aGlzIHNvdXJjZSBmaWxlLiBJZiBub3QgZGVmaW5lZCwgdGhlIFBFUCAzOTcgUHl0aG9uIGxhdW5jaGVyIGlzIGJ1aWx0OworICogaWYgZGVmaW5lZCwgYSBzY3JpcHQgbGF1bmNoZXIgb2YgdGhlIHR5cGUgdXNlZCBieSBzZXR1cHRvb2xzIGlzIGJ1aWx0LCB3aGljaAorICogbG9va3MgZm9yIGEgc2NyaXB0IG5hbWUgcmVsYXRlZCB0byB0aGUgZXhlY3V0YWJsZSBuYW1lIGFuZCBydW5zIHRoYXQgc2NyaXB0CisgKiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBQeXRob24gaW50ZXJwcmV0ZXIuCisgKgorICogU0NSSVBUX1dSQVBQRVIgc2hvdWxkIGJlIHVuZGVmaW5lZCBpbiB0aGUgc291cmNlLCBhbmQgZGVmaW5lZCBpbiBhIFZTIHByb2plY3QKKyAqIHdoaWNoIGJ1aWxkcyB0aGUgc2V0dXB0b29scy1zdHlsZSBsYXVuY2hlci4KKyAqLworI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisjZGVmaW5lIFJDX05PX1NDUklQVCAgICAgICAgMTA1CisjZW5kaWYKIAogLyogSnVzdCBmb3Igbm93IC0gc3RhdGljIGRlZmluaXRpb24gKi8KIApAQCAtMzIsMzIgKzUzLDYgQEAKICAgICByZXR1cm4gcDsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBzaW1wbGlmeSBtZW1vcnkgbWFuYWdlbWVudAotICogYW5kIHRvIHRyZWF0IGJsYW5rIHZhbHVlcyBhcyBpZiB0aGV5IGFyZSBhYnNlbnQuCi0gKi8KLXN0YXRpYyB3Y2hhcl90ICogZ2V0X2Vudih3Y2hhcl90ICoga2V5KQotewotICAgIC8qIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLCBqdXN0IGxpa2UgZ2V0ZW52ICovCi0gICAgc3RhdGljIHdjaGFyX3QgYnVmWzI1Nl07Ci0gICAgRFdPUkQgcmVzdWx0ID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBidWYsIDI1Nik7Ci0KLSAgICBpZiAocmVzdWx0ID4gMjU1KSB7Ci0gICAgICAgIC8qIExhcmdlIGVudmlyb25tZW50IHZhcmlhYmxlLiBBY2NlcHQgc29tZSBsZWFrYWdlICovCi0gICAgICAgIHdjaGFyX3QgKmJ1ZjIgPSAod2NoYXJfdCopbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIChyZXN1bHQrMSkpOwotICAgICAgICBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZjIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBidWYyOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gMCkKLSAgICAgICAgLyogRWl0aGVyIHNvbWUgZXJyb3IsIGUuZy4gRVJST1JfRU5WVkFSX05PVF9GT1VORCwKLSAgICAgICAgICAgb3IgYW4gZW1wdHkgZW52aXJvbm1lbnQgdmFyaWFibGUuICovCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotCiBzdGF0aWMgdm9pZAogZGVidWcod2NoYXJfdCAqIGZvcm1hdCwgLi4uKQogewpAQCAtMTAwLDExICs5NSw0MCBAQAogI2lmICFkZWZpbmVkKF9XSU5ET1dTKQogICAgIGZ3cHJpbnRmKHN0ZGVyciwgTCIlc1xuIiwgbWVzc2FnZSk7CiAjZWxzZQotICAgIE1lc3NhZ2VCb3goTlVMTCwgbWVzc2FnZSwgVEVYVCgiUHl0aG9uIExhdW5jaGVyIGlzIHNvcnJ5IHRvIHNheSAuLi4iKSwgTUJfT0spOyAKKyAgICBNZXNzYWdlQm94KE5VTEwsIG1lc3NhZ2UsIFRFWFQoIlB5dGhvbiBMYXVuY2hlciBpcyBzb3JyeSB0byBzYXkgLi4uIiksCisgICAgICAgICAgICAgICBNQl9PSyk7IAogI2VuZGlmCiAgICAgRXhpdFByb2Nlc3MocmMpOwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIHNpbXBsaWZ5IG1lbW9yeSBtYW5hZ2VtZW50CisgKiBhbmQgdG8gdHJlYXQgYmxhbmsgdmFsdWVzIGFzIGlmIHRoZXkgYXJlIGFic2VudC4KKyAqLworc3RhdGljIHdjaGFyX3QgKiBnZXRfZW52KHdjaGFyX3QgKiBrZXkpCit7CisgICAgLyogVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsIGp1c3QgbGlrZSBnZXRlbnYgKi8KKyAgICBzdGF0aWMgd2NoYXJfdCBidWZbQlVGU0laRV07CisgICAgRFdPUkQgcmVzdWx0ID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBidWYsIEJVRlNJWkUpOworCisgICAgaWYgKHJlc3VsdCA+PSBCVUZTSVpFKSB7CisgICAgICAgIC8qIExhcmdlIGVudmlyb25tZW50IHZhcmlhYmxlLiBBY2NlcHQgc29tZSBsZWFrYWdlICovCisgICAgICAgIHdjaGFyX3QgKmJ1ZjIgPSAod2NoYXJfdCopbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIChyZXN1bHQrMSkpOworICAgICAgICBpZiAoYnVmMiA9IE5VTEwpIHsKKyAgICAgICAgICAgIGVycm9yKFJDX05PX01FTU9SWSwgTCJDb3VsZCBub3QgYWxsb2NhdGUgZW52aXJvbm1lbnQgYnVmZmVyIik7CisgICAgICAgIH0KKyAgICAgICAgR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBidWYyLCByZXN1bHQpOworICAgICAgICByZXR1cm4gYnVmMjsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IDApCisgICAgICAgIC8qIEVpdGhlciBzb21lIGVycm9yLCBlLmcuIEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQsCisgICAgICAgICAgIG9yIGFuIGVtcHR5IGVudmlyb25tZW50IHZhcmlhYmxlLiAqLworICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBidWY7Cit9CisKICNpZiBkZWZpbmVkKF9XSU5ET1dTKQogCiAjZGVmaW5lIFBZVEhPTl9FWEVDVVRBQkxFIEwicHl0aG9udy5leGUiCkBAIC0xMTUsMTEgKzEzOSw2IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIFJDX05PX1NURF9IQU5ETEVTICAgMTAwCi0jZGVmaW5lIFJDX0NSRUFURV9QUk9DRVNTICAgMTAxCi0jZGVmaW5lIFJDX0JBRF9WSVJUVUFMX1BBVEggMTAyCi0jZGVmaW5lIFJDX05PX1BZVEhPTiAgICAgICAgMTAzCi0KICNkZWZpbmUgTUFYX1ZFUlNJT05fU0laRSAgICA0CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTQ1Nyw2ICs0NzYsNTEgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKy8qCisgKiBDaGVjayBmb3IgYSBzY3JpcHQgbG9jYXRlZCBhbG9uZ3NpZGUgdGhlIGV4ZWN1dGFibGUKKyAqLworCisjaWYgZGVmaW5lZChfV0lORE9XUykKKyNkZWZpbmUgU0NSSVBUX1NVRkZJWCBMIi1zY3JpcHQucHl3IgorI2Vsc2UKKyNkZWZpbmUgU0NSSVBUX1NVRkZJWCBMIi1zY3JpcHQucHkiCisjZW5kaWYKKworc3RhdGljIHdjaGFyX3Qgd3JhcHBlZF9zY3JpcHRfcGF0aFtNQVhfUEFUSF07CisKKy8qIExvY2F0ZSB0aGUgc2NyaXB0IGJlaW5nIHdyYXBwZWQuCisgKgorICogVGhpcyBjb2RlIHNob3VsZCBzdG9yZSB0aGUgbmFtZSBvZiB0aGUgd3JhcHBlZCBzY3JpcHQgaW4KKyAqIHdyYXBwZWRfc2NyaXB0X3BhdGgsIG9yIHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbSB3aXRoIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vCisgKiB2YWxpZCB3cmFwcGVkIHNjcmlwdCBmaWxlLgorICovCitzdGF0aWMgdm9pZAorbG9jYXRlX3dyYXBwZWRfc2NyaXB0KCkKK3sKKyAgICB3Y2hhcl90ICogcDsKKyAgICBzaXplX3QgcGxlbjsKKyAgICBEV09SRCBhdHRyczsKKworICAgIHBsZW4gPSBHZXRNb2R1bGVGaWxlTmFtZVcoTlVMTCwgd3JhcHBlZF9zY3JpcHRfcGF0aCwgTUFYX1BBVEgpOworICAgIHAgPSB3Y3NyY2hyKHdyYXBwZWRfc2NyaXB0X3BhdGgsIEwnLicpOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgZGVidWcoTCJHZXRNb2R1bGVGaWxlTmFtZVcgcmV0dXJuZWQgdmFsdWUgaGFzIG5vIGV4dGVuc2lvbjogJXNcbiIsCisgICAgICAgICAgICAgIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgICAgICBlcnJvcihSQ19OT19TQ1JJUFQsIEwiV3JhcHBlciBuYW1lICclcycgaXMgbm90IHZhbGlkLiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgIH0KKworICAgIHdjc25jcHlfcyhwLCBNQVhfUEFUSCAtIChwIC0gd3JhcHBlZF9zY3JpcHRfcGF0aCkgKyAxLCBTQ1JJUFRfU1VGRklYLCBfVFJVTkNBVEUpOworICAgIGF0dHJzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgIGlmIChhdHRycyA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgeworICAgICAgICBkZWJ1ZyhMIkZpbGUgJyVzJyBub24tZXhpc3RlbnRcbiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgICAgICBlcnJvcihSQ19OT19TQ1JJUFQsIEwiU2NyaXB0IGZpbGUgJyVzJyBpcyBub3QgcHJlc2VudC4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICB9CisKKyAgICBkZWJ1ZyhMIlVzaW5nIHdyYXBwZWQgc2NyaXB0IGZpbGUgJyVzJ1xuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7Cit9CisjZW5kaWYKKwogLyoKICAqIFByb2Nlc3MgY3JlYXRpb24gY29kZQogICovCkBAIC01NTAsNyArNjE0LDcgQEAKICAgICAgICAgZXJyb3IoUkNfQ1JFQVRFX1BST0NFU1MsIEwiVW5hYmxlIHRvIGNyZWF0ZSBwcm9jZXNzIHVzaW5nICclcyciLCBjbWRsaW5lKTsKICAgICBBc3NpZ25Qcm9jZXNzVG9Kb2JPYmplY3Qoam9iLCBwaS5oUHJvY2Vzcyk7CiAgICAgQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7Ci0gICAgV2FpdEZvclNpbmdsZU9iamVjdChwaS5oUHJvY2VzcywgSU5GSU5JVEUpOworICAgIFdhaXRGb3JTaW5nbGVPYmplY3RFeChwaS5oUHJvY2VzcywgSU5GSU5JVEUsIEZBTFNFKTsKICAgICBvayA9IEdldEV4aXRDb2RlUHJvY2VzcyhwaS5oUHJvY2VzcywgJnJjKTsKICAgICBpZiAoIW9rKQogICAgICAgICBlcnJvcihSQ19DUkVBVEVfUFJPQ0VTUywgTCJGYWlsZWQgdG8gZ2V0IGV4aXQgY29kZSBvZiBwcm9jZXNzIik7CkBAIC01OTUsMTIgKzY1OSwxNyBAQAogICAgIH0KIH0KIAotc3RhdGljIHdjaGFyX3QgKiBidWlsdGluX3ZpcnR1YWxfcGF0aHMgW10gPSB7Ci0gICAgTCIvdXNyL2Jpbi9lbnYgcHl0aG9uIiwKLSAgICBMIi91c3IvYmluL3B5dGhvbiIsCi0gICAgTCIvdXNyL2xvY2FsL2Jpbi9weXRob24iLAotICAgIEwicHl0aG9uIiwKLSAgICBOVUxMCit0eXBlZGVmIHN0cnVjdCB7CisgICAgd2NoYXJfdCAqc2hlYmFuZzsKKyAgICBCT09MIHNlYXJjaDsKK30gU0hFQkFORzsKKworc3RhdGljIFNIRUJBTkcgYnVpbHRpbl92aXJ0dWFsX3BhdGhzIFtdID0geworICAgIHsgTCIvdXNyL2Jpbi9lbnYgcHl0aG9uIiwgVFJVRSB9LAorICAgIHsgTCIvdXNyL2Jpbi9weXRob24iLCBGQUxTRSB9LAorICAgIHsgTCIvdXNyL2xvY2FsL2Jpbi9weXRob24iLCBGQUxTRSB9LAorICAgIHsgTCJweXRob24iLCBGQUxTRSB9LAorICAgIHsgTlVMTCwgRkFMU0UgfSwKIH07CiAKIC8qIEZvciBub3csIGEgc3RhdGljIGFycmF5IG9mIGNvbW1hbmRzLiAqLwpAQCAtNzc2LDEwICs4NDUsMTAgQEAKIAogc3RhdGljIEJPT0wKIHBhcnNlX3NoZWJhbmcod2NoYXJfdCAqIHNoZWJhbmdfbGluZSwgaW50IG5jaGFycywgd2NoYXJfdCAqKiBjb21tYW5kLAotICAgICAgICAgICAgICB3Y2hhcl90ICoqIHN1ZmZpeCkKKyAgICAgICAgICAgICAgd2NoYXJfdCAqKiBzdWZmaXgsIEJPT0wgKnNlYXJjaCkKIHsKICAgICBCT09MIHJjID0gRkFMU0U7Ci0gICAgd2NoYXJfdCAqKiB2cHA7CisgICAgU0hFQkFORyAqIHZwcDsKICAgICBzaXplX3QgcGxlbjsKICAgICB3Y2hhcl90ICogcDsKICAgICB3Y2hhcl90IHphcHBlZDsKQEAgLTc4OSwxNSArODU4LDE3IEBACiAKICAgICAqY29tbWFuZCA9IE5VTEw7ICAgIC8qIGZhaWx1cmUgcmV0dXJuICovCiAgICAgKnN1ZmZpeCA9IE5VTEw7CisgICAgKnNlYXJjaCA9IEZBTFNFOwogCiAgICAgaWYgKCgqc2hlYmFuZ19saW5lKysgPT0gTCcjJykgJiYgKCpzaGViYW5nX2xpbmUrKyA9PSBMJyEnKSkgewogICAgICAgICBzaGViYW5nX2xpbmUgPSBza2lwX3doaXRlc3BhY2Uoc2hlYmFuZ19saW5lKTsKICAgICAgICAgaWYgKCpzaGViYW5nX2xpbmUpIHsKICAgICAgICAgICAgICpjb21tYW5kID0gc2hlYmFuZ19saW5lOwotICAgICAgICAgICAgZm9yICh2cHAgPSBidWlsdGluX3ZpcnR1YWxfcGF0aHM7ICp2cHA7ICsrdnBwKSB7Ci0gICAgICAgICAgICAgICAgcGxlbiA9IHdjc2xlbigqdnBwKTsKLSAgICAgICAgICAgICAgICBpZiAod2NzbmNtcChzaGViYW5nX2xpbmUsICp2cHAsIHBsZW4pID09IDApIHsKKyAgICAgICAgICAgIGZvciAodnBwID0gYnVpbHRpbl92aXJ0dWFsX3BhdGhzOyB2cHAtPnNoZWJhbmc7ICsrdnBwKSB7CisgICAgICAgICAgICAgICAgcGxlbiA9IHdjc2xlbih2cHAtPnNoZWJhbmcpOworICAgICAgICAgICAgICAgIGlmICh3Y3NuY21wKHNoZWJhbmdfbGluZSwgdnBwLT5zaGViYW5nLCBwbGVuKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHJjID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgKnNlYXJjaCA9IHZwcC0+c2VhcmNoOwogICAgICAgICAgICAgICAgICAgICAvKiBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIGFsbCBidWlsdGluIGNvbW1hbmRzIGNvbnRhaW4KICAgICAgICAgICAgICAgICAgICAgICogInB5dGhvbiIuCiAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODA1LDcgKzg3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgqdnBwID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICh2cHAtPnNoZWJhbmcgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogTm90IGZvdW5kIGluIGJ1aWx0aW5zIC0gbG9vayBpbiBjdXN0b21pemVkIGNvbW1hbmRzLgogICAgICAgICAgICAgICAgICAqCkBAIC04NTYsNyArOTI3LDcgQEAKIH0gQk9NOwogCiAvKgotICogU3RyaWN0bHksIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIFVURi0xNiBhbmYgVVRGLTMyLCBzaW5jZSBQeXRob24gaXRzZWxmCisgKiBTdHJpY3RseSwgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgVVRGLTE2IGFuZCBVVEYtMzIsIHNpbmNlIFB5dGhvbiBpdHNlbGYKICAqIGRvZXNuJ3QuIE5ldmVyIG1pbmQsIG9uZSBkYXkgaXQgbWlnaHQgLSB0aGVyZSdzIG5vIGhhcm0gbGVhdmluZyBpdCBpbi4KICAqLwogc3RhdGljIEJPTSBCT01zW10gPSB7CkBAIC0xMDEyLDggKzEwODMsMTAgQEAKICAgICBpbnQgaSwgaiwgbmNoYXJzID0gMDsKICAgICBpbnQgaGVhZGVyX2xlbjsKICAgICBCT09MIGlzX3ZpcnQ7CisgICAgQk9PTCBzZWFyY2g7CiAgICAgd2NoYXJfdCAqIGNvbW1hbmQ7CiAgICAgd2NoYXJfdCAqIHN1ZmZpeDsKKyAgICBDT01NQU5EICpjbWQgPSBOVUxMOwogICAgIElOU1RBTExFRF9QWVRIT04gKiBpcDsKIAogICAgIGlmIChyYyA9PSAwKSB7CkBAIC0xMTI1LDcgKzExOTgsNyBAQAogICAgICAgICAgICAgaWYgKG5jaGFycyA+IDApIHsKICAgICAgICAgICAgICAgICBzaGViYW5nX2xpbmVbLS1uY2hhcnNdID0gTCdcMCc7CiAgICAgICAgICAgICAgICAgaXNfdmlydCA9IHBhcnNlX3NoZWJhbmcoc2hlYmFuZ19saW5lLCBuY2hhcnMsICZjb21tYW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWZmaXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWZmaXgsICZzZWFyY2gpOwogICAgICAgICAgICAgICAgIGlmIChjb21tYW5kICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJwYXJzZV9zaGViYW5nOiBmb3VuZCBjb21tYW5kOiAlc1xuIiwgY29tbWFuZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNfdmlydCkgewpAQCAtMTE0MSw2ICsxMjE0LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoUkNfQkFEX1ZJUlRVQUxfUEFUSCwgTCJVbmtub3duIHZpcnR1YWwgXAogcGF0aCAnJXMnIiwgY29tbWFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kICs9IDY7ICAgLyogc2tpcCBwYXN0ICJweXRob24iICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoICYmICgoKmNvbW1hbmQgPT0gTCdcMCcpIHx8IGlzc3BhY2UoKmNvbW1hbmQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgaXMgZWxpZ2libGUgZm9yIHBhdGggc2VhcmNoLCBhbmQgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpcyBubyB2ZXJzaW9uIHNwZWNpZmljYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJzZWFyY2hpbmcgUEFUSCBmb3IgcHl0aG9uIGV4ZWN1dGFibGVcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IGZpbmRfb25fcGF0aChMInB5dGhvbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwiUHl0aG9uIG9uIHBhdGg6ICVzXG4iLCBjbWQgPyBjbWQtPnZhbHVlIDogTCI8bm90IGZvdW5kPiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJsb2NhdGVkIHB5dGhvbiBvbiBQQVRIOiAlc1xuIiwgY21kLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZV9jaGlsZChjbWQtPnZhbHVlLCBzdWZmaXgsIGNtZGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IGhlcmUsIGFzIHdlIGhhdmUgZm91bmQgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGQUxMIFRIUk9VR0g6IE5vIHB5dGhvbiBmb3VuZCBvbiBQQVRILCBzbyBmYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmFjayB0byBsb2NhdGluZyB0aGUgY29ycmVjdCBpbnN0YWxsZWQgcHl0aG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpjb21tYW5kICYmICF2YWxpZGF0ZV92ZXJzaW9uKGNvbW1hbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKFJDX0JBRF9WSVJUVUFMX1BBVEgsIEwiSW52YWxpZCB2ZXJzaW9uIFwKIHNwZWNpZmljYXRpb246ICclcycuXG5JbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc2NyaXB0LCAncHl0aG9uJyBuZWVkcyB0byBiZSBcCkBAIC0xMjIzLDYgKzEzMTMsMTIgQEAKICAgICB2b2lkICogdmVyc2lvbl9kYXRhOwogICAgIFZTX0ZJWEVERklMRUlORk8gKiBmaWxlX2luZm87CiAgICAgVUlOVCBibG9ja19zaXplOworICAgIGludCBpbmRleDsKKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorICAgIGludCBuZXdsZW47CisgICAgd2NoYXJfdCAqIG5ld2NvbW1hbmQ7CisgICAgd2NoYXJfdCAqIGF2WzJdOworI2VuZGlmCiAKICAgICB3cCA9IGdldF9lbnYoTCJQWUxBVU5DSF9ERUJVRyIpOwogICAgIGlmICgod3AgIT0gTlVMTCkgJiYgKCp3cCAhPSBMJ1wwJykpCkBAIC0xMjcxLDggKzEzNjcsOCBAQAogICAgICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgICAgICBkZWJ1ZyhMIkdldEZpbGVWZXJzaW9uSW5mbyBmYWlsZWQ6ICVYXG4iLCBHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IFZlclF1ZXJ5VmFsdWVXKHZlcnNpb25fZGF0YSwgTCJcXCIsICZmaWxlX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmxvY2tfc2l6ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uX2RhdGEsIEwiXFwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQVk9JRCAqKSAmZmlsZV9pbmZvLCAmYmxvY2tfc2l6ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJWZXJRdWVyeVZhbHVlIGZhaWxlZDogJVhcbiIsIEdldExhc3RFcnJvcigpKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTEzMDIsNyArMTM5OCw0MCBAQAogICAgIH0KIAogICAgIGNvbW1hbmQgPSBza2lwX21lKEdldENvbW1hbmRMaW5lVygpKTsKLSAgICBkZWJ1ZyhMIkNhbGxlZCB3aXRoIGNvbW1hbmQgbGluZTogJXMiLCBjb21tYW5kKTsKKyAgICBkZWJ1ZyhMIkNhbGxlZCB3aXRoIGNvbW1hbmQgbGluZTogJXNcbiIsIGNvbW1hbmQpOworCisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyAgICAvKiBUaGUgbGF1bmNoZXIgaXMgYmVpbmcgdXNlZCBpbiAic2NyaXB0IHdyYXBwZXIiIG1vZGUuCisgICAgICogVGhlcmUgc2hvdWxkIHRoZXJlZm9yZSBiZSBhIFB5dGhvbiBzY3JpcHQgbmFtZWQgPGV4ZW5hbWU+LXNjcmlwdC5weSBpbgorICAgICAqIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgbGF1bmNoZXIgZXhlY3V0YWJsZS4KKyAgICAgKiBQdXQgdGhlIHNjcmlwdCBuYW1lIGludG8gYXJndiBhcyB0aGUgZmlyc3QgKHNjcmlwdCBuYW1lKSBhcmd1bWVudC4KKyAgICAgKi8KKworICAgIC8qIEdldCB0aGUgd3JhcHBlZCBzY3JpcHQgbmFtZSAtIGlmIHRoZSBzY3JpcHQgaXMgbm90IHByZXNlbnQsIHRoaXMgd2lsbAorICAgICAqIHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbSB3aXRoIGFuIGVycm9yLgorICAgICAqLworICAgIGxvY2F0ZV93cmFwcGVkX3NjcmlwdCgpOworCisgICAgLyogQWRkIHRoZSB3cmFwcGVkIHNjcmlwdCB0byB0aGUgc3RhcnQgb2YgY29tbWFuZCAqLworICAgIG5ld2xlbiA9IHdjc2xlbih3cmFwcGVkX3NjcmlwdF9wYXRoKSArIHdjc2xlbihjb21tYW5kKSArIDI7IC8qICcgJyArIE5VTCAqLworICAgIG5ld2NvbW1hbmQgPSBtYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogbmV3bGVuKTsKKyAgICBpZiAoIW5ld2NvbW1hbmQpIHsKKyAgICAgICAgZXJyb3IoUkNfTk9fTUVNT1JZLCBMIkNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgY29tbWFuZCBsaW5lIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB3Y3NjcHlfcyhuZXdjb21tYW5kLCBuZXdsZW4sIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgICAgICB3Y3NjYXRfcyhuZXdjb21tYW5kLCBuZXdsZW4sIEwiICIpOworICAgICAgICB3Y3NjYXRfcyhuZXdjb21tYW5kLCBuZXdsZW4sIGNvbW1hbmQpOworICAgICAgICBkZWJ1ZyhMIlJ1bm5pbmcgd3JhcHBlZCBzY3JpcHQgd2l0aCBjb21tYW5kIGxpbmUgJyVzJ1xuIiwgbmV3Y29tbWFuZCk7CisgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKKyAgICAgICAgYXZbMF0gPSB3cmFwcGVkX3NjcmlwdF9wYXRoOworICAgICAgICBhdlsxXSA9IE5VTEw7CisgICAgICAgIG1heWJlX2hhbmRsZV9zaGViYW5nKGF2LCBuZXdjb21tYW5kKTsKKyAgICAgICAgLyogUmV0dXJucyBpZiBubyBzaGViYW5nIGxpbmUgLSBwYXNzIHRvIGRlZmF1bHQgcHJvY2Vzc2luZyAqLworICAgICAgICBjb21tYW5kID0gbmV3Y29tbWFuZDsKKyAgICAgICAgdmFsaWQgPSBGQUxTRTsKKyAgICB9CisjZWxzZQogICAgIGlmIChhcmdjIDw9IDEpIHsKICAgICAgICAgdmFsaWQgPSBGQUxTRTsKICAgICAgICAgcCA9IE5VTEw7CkBAIC0xMzEwLDEzICsxNDM5LDYgQEAKICAgICBlbHNlIHsKICAgICAgICAgcCA9IGFyZ3ZbMV07CiAgICAgICAgIHBsZW4gPSB3Y3NsZW4ocCk7Ci0gICAgICAgIGlmIChwWzBdICE9IEwnLScpIHsKLSAgICAgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKLSAgICAgICAgICAgIG1heWJlX2hhbmRsZV9zaGViYW5nKCZhcmd2WzFdLCBjb21tYW5kKTsKLSAgICAgICAgfQotICAgICAgICAvKiBObyBmaWxlIHdpdGggc2hlYmFuZywgb3IgYW4gdW5yZWNvZ25pc2VkIHNoZWJhbmcuCi0gICAgICAgICAqIElzIHRoZSBmaXJzdCBhcmcgYSBzcGVjaWFsIHZlcnNpb24gcXVhbGlmaWVyPwotICAgICAgICAgKi8KICAgICAgICAgdmFsaWQgPSAoKnAgPT0gTCctJykgJiYgdmFsaWRhdGVfdmVyc2lvbigmcFsxXSk7CiAgICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgICAgaXAgPSBsb2NhdGVfcHl0aG9uKCZwWzFdKTsKQEAgLTEzMjYsNyArMTQ0OCwxOSBAQAogICAgICAgICAgICAgY29tbWFuZCArPSB3Y3NsZW4ocCk7CiAgICAgICAgICAgICBjb21tYW5kID0gc2tpcF93aGl0ZXNwYWNlKGNvbW1hbmQpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yIChpbmRleCA9IDE7IGluZGV4IDwgYXJnYzsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGlmICgqYXJndltpbmRleF0gIT0gTCctJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kZXggPCBhcmdjKSB7CisgICAgICAgICAgICAgICAgcmVhZF9jb21tYW5kcygpOworICAgICAgICAgICAgICAgIG1heWJlX2hhbmRsZV9zaGViYW5nKCZhcmd2W2luZGV4XSwgY29tbWFuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CisjZW5kaWYKKwogICAgIGlmICghdmFsaWQpIHsKICAgICAgICAgaXAgPSBsb2NhdGVfcHl0aG9uKEwiIik7CiAgICAgICAgIGlmIChpcCA9PSBOVUxMKQpAQCAtMTM0NCw3ICsxNDc4LDcgQEAKICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCJcCiBQeXRob24gTGF1bmNoZXIgZm9yIFdpbmRvd3MgVmVyc2lvbiAlc1xuXG4iLCB2ZXJzaW9uX3RleHQpOwogICAgICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBMIlwKLXVzYWdlOiAlcyBbIGxhdW5jaGVyLWFyZ3VtZW50cyBdIHNjcmlwdCBbIHNjcmlwdC1hcmd1bWVudHMgXVxuXG4iLCBhcmd2WzBdKTsKK3VzYWdlOiAlcyBbIGxhdW5jaGVyLWFyZ3VtZW50cyBdIFsgcHl0aG9uLWFyZ3VtZW50cyBdIHNjcmlwdCBbIHNjcmlwdC1hcmd1bWVudHMgXVxuXG4iLCBhcmd2WzBdKTsKICAgICAgICAgICAgIGZwdXR3cyhMIlwKIExhdW5jaGVyIGFyZ3VtZW50czpcblxuXAogLTIgICAgIDogTGF1bmNoIHRoZSBsYXRlc3QgUHl0aG9uIDIueCB2ZXJzaW9uXG5cCmRpZmYgLS1naXQgYS9QQy9tc3ZjcnRtb2R1bGUuYyBiL1BDL21zdmNydG1vZHVsZS5jCmluZGV4IDA0ZDIwODguLjE4ZGVjNmQgMTAwNjQ0Ci0tLSBhL1BDL21zdmNydG1vZHVsZS5jCisrKyBiL1BDL21zdmNydG1vZHVsZS5jCkBAIC0xMTMsMTEgKzExMywxMiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1zdmNydF9vcGVuX29zZmhhbmRsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgbG9uZyBoYW5kbGU7CisgICAgUHlfaW50cHRyX3QgaGFuZGxlOwogICAgIGludCBmbGFnczsKICAgICBpbnQgZmQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImxpOm9wZW5fb3NmaGFuZGxlIiwgJmhhbmRsZSwgJmZsYWdzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiaTpvcGVuX29zZmhhbmRsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZmbGFncykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZmQgPSBfb3Blbl9vc2ZoYW5kbGUoaGFuZGxlLCBmbGFncyk7CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvTWFrZWZpbGUgYi9QQy9vczJlbXgvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMDYxMGUuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNjcyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0KLSMKLSMgVG9wLUxldmVsIE1ha2VmaWxlIGZvciBCdWlsZGluZyBQeXRob24gMi42IGZvciBPUy8yIHVzaW5nIEdDQy9FTVgKLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFuZHJldyBaYWJvbG90bnksIDxiaXRAZWx0ZWNoLnJ1PiBmb3IgUHl0aG9uIDEuNS4yCi0jIE1vZGlmaWVkIGJ5IEFuZHJldyBNYWNJbnR5cmUsIDxhbmR5bWFjQHBjdWcub3JnLmF1PiBmb3IgUHl0aG9uIDIuNgotIwotIyBUaGlzIG1ha2VmaWxlIHdhcyBkZXZlbG9wZWQgZm9yIHVzZSB3aXRoIFtQXUdDQy9FTVggY29tcGlsZXIgYW55Ci0jIHZlcnNpb24gYW5kIEdOVSBNYWtlLgotIwotIyBUaGUgb3V0cHV0IG9mIHRoZSBidWlsZCBpcyBhIGxhcmdpc2ggUHl0aG9uMjYuRExMIGNvbnRhaW5pbmcgdGhlCi0jIGVzc2VudGlhbCBtb2R1bGVzIG9mIFB5dGhvbiBhbmQgYSBzbWFsbCBQeXRob24uZXhlIHByb2dyYW0gdG8gc3RhcnQKLSMgdGhlIGludGVycHJldGVyLiBXaGVuIGVtYmVkZGluZyBQeXRob24gd2l0aGluIGFub3RoZXIgcHJvZ3JhbSwgb25seQotIyBQeXRob24yNi5ETEwgaXMgbmVlZGVkLiBXZSBhbHNvIGJ1aWxkIHB5dGhvbl9zLmEgc3RhdGljIGxpYnJhcnkgKHdoaWNoCi0jIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBPTUYgKC5saWIpIGZvcm1hdCB1c2luZyBlbXhvbWYgdG9vbCkgYW5kIGJvdGgKLSMgcHl0aG9uLmEgYW5kIHB5dGhvbi5saWIgaW1wb3J0IGxpYnJhcmllcy4gIFRoZW4gdGhlIG9wdGlvbmFsIAotIyBleHRlbnNpb24gbW9kdWxlcywgd2hpY2ggYXJlIE9TLzIgRExMcyByZW5hbWVkIHdpdGggYSBQWUQgZmlsZSBleHRlbnNpb24uCi0jCi0jIFJlY29tbWVuZGVkIGJ1aWxkIG9yZGVyOgotIyAgIG1ha2UgZGVwZW5kCQkoaWYgeW91IGhhdmUgbWFrZWRlcCkKLSMgICBtYWtlIGFsbAotIyAgIG1ha2UgbHgJCShpZiB5b3UgaGF2ZSBseGxpdGUpCi0jICAgbWFrZSB0ZXN0CQkob3B0aW9uYWwpCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyM9PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tCi0KLSMgPT09IENvbXBpbGF0aW9uIG1vZGU6IGRlYnVnIG9yIHJlbGVhc2UgPT09Ci1NT0RFPQkJb3B0aW1pemUKLSNNT0RFPQkJZGVidWcKLSMgPT09IEFzc2VydCgpIGVuYWJsZWQgPT09Ci1BU1NFUlRJT05TPW5vCi0jQVNTRVJUSU9OUz15ZXMKLSMgPT09IEhhcmQtd2lyZSBpbnN0YWxsYXRpb24gbG9jYXRpb24gPT09Ci1GSVhFRF9QWUhPTUU9bm8KLSNGSVhFRF9QWUhPTUU9eWVzCi0KLSMgPT09IE9wdGlvbmFsIG1vZHVsZXMgPT09Ci0jIERvIHlvdSBoYXZlIHRoZSBJbmZvWmlwIGNvbXByZXNzaW9uIGxpYnJhcnkgaW5zdGFsbGVkPwotSEFWRV9aTElCPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgVWx0cmEgRmFzdCBDcnlwdCAoVUZDKSBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfVUZDPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgVGNsL1RrIGxpYnJhcnkgaW5zdGFsbGVkPwotSEFWRV9UQ0xUSz0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEdOVSByZWFkbGluZSBsaWJyYXJ5IGluc3RhbGxlZD8KLSMgTk9URTogSSdtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBLYWkgVXdlIFJvbW1lbCdzIHBvcnQgdGhhdCAKLSMgICAgICAgLSBpcyBjb21waWxlZCB3aXRoIG11bHRpdGhyZWFkaW5nIGVuYWJsZWQKLSMgICAgICAgLSBpcyBsaW5rZWQgc3RhdGljYWxseQotIyAgICAgICBJIGhhdmUgaGFkIG5vIHN1Y2Nlc3MgdHJ5aW5nIHRvIHVzZSBhIERMTCB2ZXJzaW9uLCBldmVuIHdoZW4KLSMgICAgICAgY29tcGlsZWQgd2l0aCBtdWx0aXRocmVhZGluZyBlbmFibGVkLgotSEFWRV9HUkVBRExJTkU9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBCU0QgREIgbGlicmFyeSAodjEuODUpIGFzIGluY2x1ZGVkIGluIHRoZSBFTVhCU0QgcGFja2FnZT8KLSMgTk9URTogdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIHJlY29tcGlsZWQgd2l0aCBhIHN0cnVjdHVyZSBtZW1iZXIKLSMgICAgICAgcmVuYW1lZCB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHRoZSBtdWx0aXRocmVhZGVkIGVycm5vIHN1cHBvcnQKLSMgICAgICAgKHRoZXJlIGlzIGEgc3RydWN0dXJlIG1lbWJlciBjYWxsZWQgZXJybm8sIHVzZWQgZm9yIHNoYWRvd2luZyB0aGUKLSMgICAgICAgcmVhbCBlcnJubywgd2hpY2ggY29uZmxpY3RzIHdpdGggdGhlIGVycm5vIHJlZGVmaW5pdGlvbiBvZiAtWm10KQotSEFWRV9CU0REQj0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIG5jdXJzZXMgbGlicmFyeSBpbnN0YWxsZWQ/IEVNWCdzIEJTRCBjdXJzZXMgYXJlbid0IGVub3VnaCEgCi1IQVZFX05DVVJTRVM9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBHREJNIGxpYnJhcnkgaW5zdGFsbGVkPwotSEFWRV9HREJNPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgQloyIGNvbXByZXNzaW9uIGxpYnJhcnkgaW5zdGFsbGVkPwotSEFWRV9CWjI9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBPcGVuU1NMIGxpYnJhcmllcyBpbnN0YWxsZWQKLUhBVkVfT1BFTlNTTD0Jbm8KLQotIyA9PT0gaW5zdGFsbCBsb2NhdGlvbnMgPT09Ci0jIGRlZmF1bHQgdmFsdWUgb2YgUFlUSE9OSE9NRQotTElCX0RJUj1DOi9QeXRob24yNgotIyBkZWZhdWx0IGlzIHRvIGhhdmUgZXZlcnl0aGluZyBpbiBvciB1bmRlciBQWVRIT05IT01FCi1FWEVfRElSPSQoTElCX0RJUikKLURMTF9ESVI9JChFWEVfRElSKQotCi0KLSMgPT09IFRoZSBUb29scyA9PT0KLUNDPQkJZ2NjCi1DRkxBR1M9CQktWm10IC1XYWxsICQoSU5DTFVERSkKLUNGTEFHUy5MSUI9CSQoQ0ZMQUdTKQotTEQ9CQlnY2MKLUxERkxBR1M9CS1abXQgLVpjcnRkbGwgLUwuIC1sZ2NjCi1MREZMQUdTLkVYRT0JJChMREZMQUdTKQotTERGTEFHUy5ETEw9CSQoTERGTEFHUykgLVpkbGwKLUxERkxBR1MuQT0JJChMREZMQUdTKSAkKExJQlMpCi1BUkZMQUdTPQljcnMKLUlNUExJQj0JCWVteGltcAotRVhQTElCPQkJZW14ZXhwCi1FWEVPUFQ9CQllbXhiaW5kCi1QWV9ERUY9CQktRFB5X0JVSUxEX0NPUkUKLQotCi0jIGFkanVzdCBDIGNvbXBpbGVyIHNldHRpbmdzIGJhc2VkIG9uIGJ1aWxkIG9wdGlvbnMKLWlmZXEgKCQoTU9ERSksZGVidWcpCi0gIENGTEFHUys9CS1nIC1PCi0gIExERkxBR1MrPQktZwotZWxzZQotICBDRkxBR1MrPQktcyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1wcm9iZQotICBMREZMQUdTKz0JLXMKLWVuZGlmCi1DRkxBR1MrPQkkKFBZX0RFRikKLWlmZXEgKCQoQVNTRVJUSU9OUyksbm8pCi0gIENGTEFHUys9CS1ETkRFQlVHCi1lbmRpZgotaWZlcSAoJChGSVhFRF9QWUhPTUUpLHllcykKLSAgQ0ZMQUdTKz0JLURQUkVGSVg9JChEUVVPVEUpJChMSUJfRElSKSQoRFFVT1RFKQotZW5kaWYKLQotIyBXZSdyZSB1c2luZyB0aGUgT01GIGZvcm1hdCBzaW5jZSBFTVgncyBsZCBoYXMgYSBvYnNjdXJlIGJ1ZwotIyBiZWNhdXNlIG9mIHdoaWNoIGl0IHNvbWV0aW1lcyBmYWlscyB0byBidWlsZCByZWxvY2F0aW9ucwotIyBpbiAuZGF0YSBzZWdtZW50IHRoYXQgcG9pbnQgdG8gYW5vdGhlciAuZGF0YSBsb2NhdGlvbnMKLSMgKGV4Y2VwdCBmb3IgdGhlIGZpbmFsIGxpbmtpbmcgaWYgdGhlIC5FWEVzKQotT01GPQkJeWVzCi0KLSMgaWYgZm9yaygpIHN1cHBvcnQgaXMgcmVxdWlyZWQsIHRoZSBtYWluIGV4ZWN1dGFibGUgbXVzdCBiZSBsaW5rZWQgd2l0aCBsZAotRVhFT01GPQkJbm8KLQotIyBGaWxlIGV4dGVuc2lvbnMKLU1PRFVMRS5FWFQ9CS5weWQKLU1PRExJQi5FWFQ9CS5kbGwKLWlmZXEgKCQoT01GKSx5ZXMpCi0gIE89CQkub2JqCi0gIEE9CQkubGliCi0gIEFSPQkJZW14b21mYXIKLSAgQ0ZMQUdTKz0JLVpvbWYKLSAgTERGTEFHUys9CS1ab21mCi0gIGlmZXEgKCQoTU9ERSksZGVidWcpCi0gICAgQVJGTEFHUz0JLXA2NCBjcnMKLSAgZWxzZQotICAgIEFSRkxBR1M9CS1wMzIgY3JzCi0gIGVuZGlmCi1lbHNlCi0gIE89CQkubwotICBBPQkJLmEKLSAgQVI9CQlhcgotZW5kaWYKLQotCi0jID09PSBCdWlsZCB0aW1lIHJlc291cmNlIHNldHRpbmdzID09PQotCi0jIEVNWCdzIGRlZmF1bHQgbnVtYmVyIG9mIGZpbGUgaGFuZGxlcyBpcyA0MCwgd2hpY2ggaXMgc29tZXRpbWVzIGluc3VmZmljaWVudAotIyAodGhlIHRlbXBmaWxlIHJlZ3Jlc3Npb24gdGVzdCB0cmllcyB0byBjcmVhdGUgMTAwIHRlbXBvcmFyeSBmaWxlcykKLU5GSUxFUz0yNTAKLQotIyBUaGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBjaGlsZCB0aHJlYWRzIGlzIDY0ayBieXRlcywgd2hpY2ggaXMKLSMgaW5zdWZmaWNpZW50IGZvciBzb21lIGFwcGxpY2F0aW9ucyB3aGljaCBkbyBhIGxvdCBvZiB3b3JrIGluIHRocmVhZHMKLSMgKHN1Y2ggYXMgWm9wZSwgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIFBsb25lKS4KLSMgTm90ZSB0aGF0IHRoaXMgc2V0dGluZyBpcyBkaXN0aW5jdCBmcm9tIHRoZSBzdGFjayBzaXplIGZvciB0aGUgbWFpbgotIyB0aHJlYWQsIHdoaWNoIGlzIHNldCB2aWEgdGhlICUuZGVmIHJ1bGUgYmVsb3cuCi0jIEVNWCBkb2N1bWVudHMgdGhhdCB0aGUgdGhyZWFkIHN0YWNrIHNpemUgc2hvdWxkIGJlIGF0IGxlYXN0IDMyNzY4IGJ5dGVzOwotIyBmb3IgWm9wZS9QbG9uZSBhdCBsZWFzdCAxMjhrIGJ5dGVzIGlzIHJlY29tbWVuZGVkLgotIyBVbmNvbW1lbnQgJiBhZGp1c3QgdGhlIG5leHQgbGluZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplOgotI0NGTEFHUys9CS1EVEhSRUFEX1NUQUNLX1NJWkU9MHgyMDAwMAotCi0KLSMgPT09IFRoZSBlbnZpcm9ubWVudCA9PT0KLQotIyBTb3VyY2UgZmlsZSBwYXRocwotU1JDUEFUSD0uOy4uLy4uL1B5dGhvbjsuLi8uLi9QYXJzZXI7Li4vLi4vT2JqZWN0czsuLi8uLi9JbmNsdWRlOy4uLy4uL01vZHVsZXMKLSMgUHl0aG9uIGNvbnRhaW5zIHRoZSBjZW50cmFsIGNvcmUsIGNvbnRhaW5pbmcgdGhlIGJ1aWx0aW5zIGFuZCBpbnRlcnByZXRlci4KLSMgUGFyc2VyIGNvbnRhaW5zIFB5dGhvbidzIEludGVybmFsIFBhcnNlciBhbmQKLSMgICBTdGFuZGFsb25lIFBhcnNlciBHZW5lcmF0b3IgUHJvZ3JhbSAoU2hhcmVzIFNvbWUgb2YgUHl0aG9uJ3MgTW9kdWxlcykKLSMgT2JqZWN0cyBjb250YWlucyBQeXRob24gT2JqZWN0IFR5cGVzCi0jIE1vZHVsZXMgY29udGFpbnMgZXh0ZW5zaW9uIE1vZHVsZXMgKEJ1aWx0LUluIG9yIGFzIFNlcGFyYXRlIERMTHMpCi0KLSMgVW5peCBzaGVsbHMgdGVuZCB0byB1c2UgIiQiIGFzIGRlbGltaXRlciBmb3IgdmFyaWFibGUgbmFtZXMuCi0jIFRlc3QgZm9yIHRoaXMgYmVoYXZpb3VyIGFuZCBzZXQgJChCVUNLKSB2YXJpYWJsZSBjb3JyZXNwb25kaWdseSAuLi4KLV9fVE1QX186PSQoc2hlbGwgZWNobyAkJCQkKQotaWZlcSAoJChfX1RNUF9fKSwkJCQkKQotICBCVUNLPQkJJCQKLSAgQlJPPQkJKAotICBCUkM9CQkpCi1lbHNlCi0gIEJVQ0s9CQlcJCQKLSAgQlJPPQkJXCgKLSAgQlJDPQkJXCkKLWVuZGlmCi0jIENvbXB1dGUgdGhlICJkb3VibGUgcXVvdGUiIHZhcmlhYmxlCi1fX1RNUF9fOj0kKHNoZWxsIGVjaG8gIiIpCi1pZmVxICgkKF9fVE1QX18pLCIiKQotICBEUVVPVEU9CSIKLWVsc2UKLSAgRFFVT1RFPQlcIgotZW5kaWYKLQotIyBJbmNsdWRlIHBhdGhzCi0jSU5DTFVERT0JLUkkKHN1YnN0IDssIC1JLCAkKFNSQ1BBVEgpKQotSU5DTFVERT0JLUkuIC1JLi4vLi4vSW5jbHVkZQotCi0jIFBhdGggdG8gc2VhcmNoIGZvciAuYyBmaWxlcwotdnBhdGggJS5jIC47Li47JChTUkNQQVRIKQotCi0jIFRvcCBvZiB0aGUgcGFja2FnZSB0cmVlCi1UT1A9CQkuLi8uLi8KLQotIyBEaXJlY3RvcnkgZm9yIG91dHB1dCBmaWxlcwotT1VUQkFTRT0Jb3V0LwotT1VUPQkJJChPVVRCQVNFKSQoTU9ERSkvCi0KLSMgQWRkaXRpb25hbCBsaWJyYXJpZXMKLUxJQlM9CQktbHNvY2tldAotCi0jIFV0aWxpdHkgbWFjcm86IHJlcGxhY2VtZW50IGZvciAkXgotXl49CQkkKGZpbHRlci1vdXQgJSRBLCReKQotIyBVc2UgJChMXikgdG8gbGluayB3aXRoIGFsbCBsaWJyYXJpZXMgc3BlY2lmaWVkIGFzIGRlcGVuZGVuY2llcwotTF49CQkkKGFkZHByZWZpeCAtbCwkKGJhc2VuYW1lICQobm90ZGlyICQoZmlsdGVyICUkQSwkKykpKSkKLQotIyBCdWlsZCBydWxlcwotJChPVVQpJSRPOiAlLmMKLQkkKENDKSAkKENGTEFHUy5MSUIpIC1jICQ8IC1vICRACi0KLSUuYToKLQkkKExEKSAkKExERkxBR1MuQSkgLW8gJEAgJCheXikgJChMXikKLQotJS5kbGw6Ci0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi0lLnB5ZDogJChPVVQpJW1vZHVsZSRPICQoT1VUKSVfbS5kZWYKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKFBZVEhPTi5JTVBMSUIpICQoTElCUykKLQotJS5leGU6Ci0JJChMRCkgJChMREZMQUdTLkVYRSkgLW8gJEAgJCheXikgJChMXikKLQotJV9tLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKG5vdGRpciAkKikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLSAgICAgICAgaWZlcSAoJChERVNDUklQVElPTi4kKG5vdGRpciAkKikkKE1PRFVMRS5FWFQpKSwpCi0JICBAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gc3RhbmRhcmQgbW9kdWxlICQobm90ZGlyICQqKSQoRFFVT1RFKSA+PiRACi0gICAgICAgIGVsc2UKLQkgIEBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RVTEUuRVhUKSkkKERRVU9URSkgPj4kQAotICAgICAgICBlbmRpZgotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdCQobm90ZGlyICQqKSA+PiRACi0KLSUuZGVmOgotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBOQU1FICQobm90ZGlyICQqKSAkKEVYRVRZUEUuJChub3RkaXIgJCopLmV4ZSkgPiRACi0JQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpJChERVNDUklQVElPTi4kKG5vdGRpciAkKikuZXhlKSQoRFFVT1RFKSA+PiRACi0JQGVjaG8gU1RBQ0tTSVpFIDIwOTcxNTIgPj4kQAotCi0jIE91dHB1dCBmaWxlIG5hbWVzCi1QWVRIT05fVkVSPQkyLjYKLVBZVEhPTl9MSUI9CXB5dGhvbjMzCi1QWVRIT04uTElCPQkkKFBZVEhPTl9MSUIpX3MkQQotUFlUSE9OLklNUExJQj0JJChQWVRIT05fTElCKSRBCi1pZmVxICgkKEVYRU9NRikseWVzKQotICBQWVRIT04uRVhFSU1QPQkkKFBZVEhPTi5JTVBMSUIpCi0gIExETU9ERS5FWEU9CQktWm9tZgotZWxzZQotICBQWVRIT04uRVhFSU1QPQkkKFBZVEhPTl9MSUIpLmEKLSAgTERNT0RFLkVYRSA9IAotZW5kaWYKLVBZVEhPTi5ETEw9CSQoUFlUSE9OX0xJQikuZGxsCi1QWVRIT04uREVGPQkkKFBZVEhPTl9MSUIpLmRlZgotUFlUSE9OLkVYRT0JcHl0aG9uLmV4ZQotUFlUSE9OUE0uRVhFPQlweXRob25wbS5leGUKLVBHRU4uRVhFPQlwZ2VuLmV4ZQotTElCUkFSWT0JJChQWVRIT04uTElCKQotTERfTElCUkFSWT0JJChQWVRIT04uSU1QTElCKQotCi0jIEFkZGl0aW9uYWwgZXhlY3V0YWJsZSBwYXJhbWV0ZXJzCi1FWEVUWVBFLiQoUFlUSE9OLkVYRSk9CQlXSU5ET1dDT01QQVQKLUVYRVRZUEUuJChQWVRIT05QTS5FWEUpPQlXSU5ET1dBUEkKLUVYRVRZUEUuJChQR0VOLkVYRSk9CQlXSU5ET1dDT01QQVQKLURFU0NSSVBUSU9OLiQoUFlUSE9OLkVYRSk9CVB5dGhvbiBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXIgZm9yIE9TLzIKLURFU0NSSVBUSU9OLiQoUFlUSE9OUE0uRVhFKT0JJChERVNDUklQVElPTi4kKFBZVEhPTi5FWEUpKQotREVTQ1JJUFRJT04uJChQR0VOLkVYRSk9CVB5dGhvbiBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgcGFyc2VyIGdlbmVyYXRvciBmb3IgT1MvMgotCi0jIE1vZHVsZSBkZXNjcmlwdGlvbnMKLURFU0NSSVBUSU9OLnpsaWIkKE1PRFVMRS5FWFQpPQkJUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2Vzc2luZyB0aGUgSW5mb1ppcCBjb21wcmVzc2lvbiBsaWJyYXJ5Ci1ERVNDUklQVElPTi5jcnlwdCQoTU9EVUxFLkVYVCk9CQlQeXRob24gRXh0ZW5zaW9uIERMTCBpbXBsZW1lbnRpbmcgdGhlIGNyeXB0JChCUk8pJChCUkMpIGZ1bmN0aW9uCi1ERVNDUklQVElPTi5fdGtpbnRlciQoTU9EVUxFLkVYVCk9CVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3MgdG8gVGNsL1RrIEVudmlyb25tZW50Ci1ERVNDUklQVElPTi5yZWFkbGluZSQoTU9EVUxFLkVYVCk9CVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3MgdG8gR05VIFJlYWRMaW5lIGxpYnJhcnkKLURFU0NSSVBUSU9OLl9jdXJzZXMkKE1PRExJQi5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIG5jdXJzZXMgbGlicmFyeQotREVTQ1JJUFRJT04ucHlleHBhdCQoTU9EVUxFLkVYVCk9CVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3MgdG8gZXhwYXQgbGlicmFyeQotREVTQ1JJUFRJT04uYnoyJChNT0RVTEUuRVhUKT0JCVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3NpbmcgdGhlIGJ6MiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0KLSMgU291cmNlIGZpbGVzCi1TUkMuT1MyRU1YPQljb25maWcuYyBkbGZjbi5jIGdldHBhdGhwLmMKLVNSQy5NQUlOPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJTW9kdWxlcy9nZXRidWlsZGluZm8uYyBcCi0JCU1vZHVsZXMvbWFpbi5jKQotU1JDLk1PRFVMRVM9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlNb2R1bGVzL2djbW9kdWxlLmMgXAotCQlNb2R1bGVzL3NpZ25hbG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9wb3NpeG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMgXAotCQlNb2R1bGVzL2FycmF5bW9kdWxlLmMgXAotCQlNb2R1bGVzL2JpbmFzY2lpLmMgXAotCQlNb2R1bGVzL2NtYXRobW9kdWxlLmMgXAotCQlNb2R1bGVzL19jb2RlY3Ntb2R1bGUuYyBcCi0JCU1vZHVsZXMvY29sbGVjdGlvbnNtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2Nzdi5jIFwKLQkJTW9kdWxlcy9kYXRldGltZW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9lcnJub21vZHVsZS5jIFwKLQkJTW9kdWxlcy9mY250bG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMgXAotCQlNb2R1bGVzL19oZWFwcW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9pbWFnZW9wLmMgXAotCQlNb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMgXAotCQlNb2R1bGVzL21hdGhtb2R1bGUuYyBcCi0JCU1vZHVsZXMvb3BlcmF0b3IuYyBcCi0JCU1vZHVsZXMvX3JhbmRvbW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9zaGEyNTZtb2R1bGUuYyBcCi0JCU1vZHVsZXMvc2hhNTEybW9kdWxlLmMgXAotCQlNb2R1bGVzL19zcmUuYyBcCi0JCU1vZHVsZXMvX3N0cnVjdC5jIFwKLQkJTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jIFwKLQkJTW9kdWxlcy90ZXJtaW9zLmMgXAotCQlNb2R1bGVzL3RpbWVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX3dlYWtyZWYuYyBcCi0JCU1vZHVsZXMveHhzdWJ0eXBlLmMgXAotCQlNb2R1bGVzL3ppcGltcG9ydC5jKQotU1JDLlBBUlNFMT0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVBhcnNlci9hY2NlbGVyLmMgXAotCQlQYXJzZXIvZ3JhbW1hcjEuYyBcCi0JCVBhcnNlci9saXN0bm9kZS5jIFwKLQkJUGFyc2VyL25vZGUuYyBcCi0JCVBhcnNlci9wYXJzZXIuYyBcCi0JCVBhcnNlci9wYXJzZXRvay5jIFwKLQkJUGFyc2VyL2JpdHNldC5jIFwKLQkJUGFyc2VyL21ldGFncmFtbWFyLmMpCi1TUkMuUEFSU0UyPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJUGFyc2VyL3Rva2VuaXplci5jIFwKLQkJUGFyc2VyL215cmVhZGxpbmUuYykKLVNSQy5QQVJTRVI9CSQoU1JDLlBBUlNFMSkgXAotCQkkKFNSQy5QQVJTRTIpCi1TUkMuUFlUSE9OPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJUHl0aG9uL1B5dGhvbi1hc3QuYyBcCi0JCVB5dGhvbi9hc2RsLmMgXAotCQlQeXRob24vYXN0LmMgXAotCQlQeXRob24vYmx0aW5tb2R1bGUuYyBcCi0JCVB5dGhvbi9leGNlcHRpb25zLmMgXAotCQlQeXRob24vY2V2YWwuYyBcCi0JCVB5dGhvbi9jb21waWxlLmMgXAotCQlQeXRob24vY29kZWNzLmMgXAotCQlQeXRob24vZHluYW1pY19hbm5vdGF0aW9ucy5jIFwKLQkJUHl0aG9uL2Vycm9ycy5jIFwKLQkJUHl0aG9uL2Zyb3plbi5jIFwKLQkJUHl0aG9uL2Zyb3plbm1haW4uYyBcCi0JCVB5dGhvbi9mdXR1cmUuYyBcCi0JCVB5dGhvbi9nZXRhcmdzLmMgXAotCQlQeXRob24vZ2V0Y29tcGlsZXIuYyBcCi0JCVB5dGhvbi9nZXRjb3B5cmlnaHQuYyBcCi0JCVB5dGhvbi9nZXRwbGF0Zm9ybS5jIFwKLQkJUHl0aG9uL2dldHZlcnNpb24uYyBcCi0JCVB5dGhvbi9ncmFtaW5pdC5jIFwKLQkJUHl0aG9uL2ltcG9ydC5jIFwKLQkJUHl0aG9uL2ltcG9ydGRsLmMgXAotCQlQeXRob24vbWFyc2hhbC5jIFwKLQkJUHl0aG9uL21vZHN1cHBvcnQuYyBcCi0JCVB5dGhvbi9teXNucHJpbnRmLmMgXAotCQlQeXRob24vbXlzdHJ0b3VsLmMgXAotCQlQeXRob24vcHlhcmVuYS5jIFwKLQkJUHl0aG9uL3B5Y3R5cGUuYyBcCi0JCVB5dGhvbi9weWZwZS5jIFwKLQkJUHl0aG9uL3B5c3RhdGUuYyBcCi0JCVB5dGhvbi9weXN0cnRvZC5jIFwKLQkJUHl0aG9uL3B5dGhvbnJ1bi5jIFwKLQkJUHl0aG9uL3N0cnVjdG1lbWJlci5jIFwKLQkJUHl0aG9uL3N5bXRhYmxlLmMgXAotCQlQeXRob24vc3lzbW9kdWxlLmMgXAotCQlQeXRob24vdHJhY2ViYWNrLmMgXAotCQlQeXRob24vZ2V0b3B0LmMgXAotCQlQeXRob24vZHlubG9hZF9zaGxpYi5jIFwKLQkJUHl0aG9uL3RocmVhZC5jKQotU1JDLk9CSkVDVD0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU9iamVjdHMvYWJzdHJhY3QuYyBcCi0JCU9iamVjdHMvYm9vbG9iamVjdC5jIFwKLQkJT2JqZWN0cy9jZWxsb2JqZWN0LmMgXAotCQlPYmplY3RzL2NsYXNzb2JqZWN0LmMgXAotCQlPYmplY3RzL2NvYmplY3QuYyBcCi0JCU9iamVjdHMvY29kZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMgXAotCQlPYmplY3RzL2Rlc2Nyb2JqZWN0LmMgXAotCQlPYmplY3RzL2RpY3RvYmplY3QuYyBcCi0JCU9iamVjdHMvZW51bW9iamVjdC5jIFwKLQkJT2JqZWN0cy9maWxlb2JqZWN0LmMgXAotCQlPYmplY3RzL2Zsb2F0b2JqZWN0LmMgXAotCQlPYmplY3RzL2ZyYW1lb2JqZWN0LmMgXAotCQlPYmplY3RzL2Z1bmNvYmplY3QuYyBcCi0JCU9iamVjdHMvZ2Vub2JqZWN0LmMgXAotCQlPYmplY3RzL2l0ZXJvYmplY3QuYyBcCi0JCU9iamVjdHMvbGlzdG9iamVjdC5jIFwKLQkJT2JqZWN0cy9sb25nb2JqZWN0LmMgXAotCQlPYmplY3RzL21ldGhvZG9iamVjdC5jIFwKLQkJT2JqZWN0cy9tb2R1bGVvYmplY3QuYyBcCi0JCU9iamVjdHMvb2JqZWN0LmMgXAotCQlPYmplY3RzL29ibWFsbG9jLmMgXAotCQlPYmplY3RzL3Jhbmdlb2JqZWN0LmMgXAotCQlPYmplY3RzL3NldG9iamVjdC5jIFwKLQkJT2JqZWN0cy9zbGljZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9zdHJpbmdvYmplY3QuYyBcCi0JCU9iamVjdHMvc3RydWN0c2VxLmMgXAotCQlPYmplY3RzL3R1cGxlb2JqZWN0LmMgXAotCQlPYmplY3RzL3R5cGVvYmplY3QuYyBcCi0JCU9iamVjdHMvdW5pY29kZW9iamVjdC5jIFwKLQkJT2JqZWN0cy91bmljb2RlY3R5cGUuYyBcCi0JCU9iamVjdHMvd2Vha3JlZm9iamVjdC5jKQotCi1TUkMuTElCPQkkKFNSQy5PUzJFTVgpIFwKLQkJJChTUkMuTUFJTikgXAotCQkkKFNSQy5QQVJTRVIpIFwKLQkJJChTUkMuT0JKRUNUKSBcCi0JCSQoU1JDLlBZVEhPTikgXAotCQkkKFNSQy5NT0RVTEVTKQotT0JKLkxJQj0JJChhZGRwcmVmaXggJChPVVQpLCQobm90ZGlyICQoU1JDLkxJQjouYz0kTykpKQotCi1TUkMuUEdFTj0JJChTUkMuUEFSU0UxKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlPYmplY3RzL29ibWFsbG9jLmMpIFwKLQkJJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVB5dGhvbi9teXNucHJpbnRmLmMpIFwKLQkJJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVBhcnNlci90b2tlbml6ZXJfcGdlbi5jIFwKLQkJUGFyc2VyL3BnZW5tYWluLmMgXAotCQlQYXJzZXIvcGdlbi5jIFwKLQkJUGFyc2VyL3ByaW50Z3JhbW1hci5jIFwKLQkJUGFyc2VyL2dyYW1tYXIuYyBcCi0JCVBhcnNlci9maXJzdHNldHMuYykgXAotCi1PQkouUEdFTj0JJChhZGRwcmVmaXggJChPVVQpLCQobm90ZGlyICQoU1JDLlBHRU46LmM9JE8pKSkKLQotU1JDLkVYRT0JJChUT1ApTW9kdWxlcy9weXRob24uYwotU1JDLlBNRVhFPQlweXRob25wbS5jCi0KLSMgUHl0aG9uIG1vZHVsZXMgdG8gYmUgZHluYW1pY2FsbHkgbG9hZGVkIHRoYXQ6Ci0jICAgMSkgaGF2ZSBvbmx5IHNpbmdsZSBzb3VyY2UgZmlsZSBhbmQgcmVxdWlyZSBubyBleHRyYSBsaWJzCi0jICAgMikgdXNlIHRoZSBzdGFuZGFyZCBtb2R1bGUgbmFtaW5nIGNvbnZlbnRpb24KLSMgICAgICAodGhlICdtb2R1bGUnIGluID8/Pz8/bW9kdWxlLmMgaXMgYXNzdW1lZCkKLSMgLSB0aGVzZSBjYW4gYmUgYnVpbHQgd2l0aCBpbXBsaWNpdCBydWxlcwotRUFTWUVYVE1PRFVMRVM9CWZwZWN0bCBcCi0JCWZwZXRlc3QgXAotCQlwYXJzZXIgXAotCQlwd2QgXAotCQlzZWxlY3QgCi0KLSMgUHl0aG9uIG1vZHVsZXMgdG8gYmUgZHluYW1pY2FsbHkgbG9hZGVkIHRoYXQgbmVlZCBleHBsaWNpdCBidWlsZCBydWxlcwotIyAgKGVpdGhlciBtdWx0aXBsZSBzb3VyY2UgZmlsZXMgYW5kL29yIG5vbi1zdGFuZGFyZCBtb2R1bGUgbmFtaW5nKQotIyAgKE5PVEU6IHVzZSBzaG9ydGVuZWQgbmFtZXMgZm9yIG1vZHVsZXMgYWZmZWN0ZWQgYnkgOCBjaGFyIG5hbWUgbGltaXQpCi1IQVJERVhUTU9EVUxFUz0JX3NvY2tldCBcCi0JCV90ZXN0Y2FwIFwKLQkJdW5pY29kZWQKLQotIyBQeXRob24gbW9kdWxlcyB0aGF0IGFyZSB1c2VkIGFzIGxpYnJhcmllcyBhbmQgdGhlcmVmb3JlIG11c3QgdXNlCi0jIGEgLkRMTCBleHRlbnNpb24KLUxJQkVYVE1PRFVMRVM9Ci0KLSMgUHl0aG9uIGV4dGVybmFsICgkKE1PRFVMRS5FWFQpKSBtb2R1bGVzIC0gY2FuIGJlIEVBU1kgb3IgSEFSRAotaWZlcSAoJChIQVZFX1pMSUIpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQl6bGliCi1lbmRpZgotaWZlcSAoJChIQVZFX1VGQykseWVzKQotICBIQVJERVhUTU9EVUxFUys9CWNyeXB0Ci1lbmRpZgotaWZlcSAoJChIQVZFX1RDTFRLKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JX3RraW50ZXIKLSAgQ0ZMQUdTKz0JCS1ESEFTX0RJUkVOVCAtSS9UY2xUazgwL2luY2x1ZGUKLSAgVEtfTElCUys9CQktTC9UY2xUazgwL2xpYiAtbHRjbDgwIC1sdGs4MAotZW5kaWYKLWlmZXEgKCQoSEFWRV9HUkVBRExJTkUpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQlyZWFkbGluZQotZW5kaWYKLWlmZXEgKCQoSEFWRV9OQ1VSU0VTKSx5ZXMpCi0gIExJQkVYVE1PRFVMRVMrPQlfY3Vyc2VzCi0gIEhBUkRFWFRNT0RVTEVTKz0JX2N1cnNlc18KLWVuZGlmCi1pZmVxICgkKEhBVkVfR0RCTSkseWVzKQotICBIQVJERVhUTU9EVUxFUys9CV9nZGJtIF9kYm0KLWVuZGlmCi1pZmVxICgkKEhBVkVfQloyKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JYnoyCi1lbmRpZgotaWZlcSAoJChIQVZFX09QRU5TU0wpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQlfc3NsCi1lbmRpZgotCi0jIEV4cGF0IGlzIG5vdyBkaXN0cmlidXRlZCB3aXRoIHRoZSBQeXRob24gc291cmNlCi1IQVJERVhUTU9EVUxFUys9CXB5ZXhwYXQKLUVYUEFULklOQz0JLUkuLi8uLi9Nb2R1bGVzL2V4cGF0Ci1FWFBBVC5ERUY9CS1ESEFWRV9FWFBBVF9IIC1EWE1MX05TPTEgLURYTUxfRFREPTEgLURYTUxfQllURV9PUkRFUj0xMiBcCi0JCS1EWE1MX0NPTlRFTlRfQllURVM9MTAyNCAtREhBVkVfTUVNTU9WRT0xIC1ESEFWRV9CQ09QWT0xCi1FWFBBVC5TUkM9CSQoYWRkcHJlZml4IC4uLy4uL01vZHVsZXMvZXhwYXQvLCBcCi0JCXhtbHBhcnNlLmMgXAotCQl4bWxyb2xlLmMgXAotCQl4bWx0b2suYykKLQotIyBhbGwgdGhlIGV4dGVybmFsIG1vZHVsZXMKLUVYVEVSTkRMTFM9CSQoYWRkc3VmZml4ICQoTU9EVUxFLkVYVCksJChwYXRzdWJzdCAlbW9kdWxlLCUsJChFQVNZRVhUTU9EVUxFUykpKQotRVhURVJORExMUys9CSQoYWRkc3VmZml4ICQoTU9EVUxFLkVYVCksJChwYXRzdWJzdCAlbW9kdWxlLCUsJChIQVJERVhUTU9EVUxFUykpKQotRVhURVJORExMUys9CSQoYWRkc3VmZml4ICQoTU9ETElCLkVYVCksJChwYXRzdWJzdCAlbW9kdWxlLCUsJChMSUJFWFRNT0RVTEVTKSkpCi0KLSMgVGFyZ2V0cwotYWxsOiAgJChPVVQpICQoUFlUSE9OLkxJQikgJChQWVRIT04uREVGKSAkKFBZVEhPTi5JTVBMSUIpICQoUFlUSE9OLkRMTCkgXAotCXB5dGhvbl9ub25jb3JlCi0KLXB5dGhvbl9ub25jb3JlOgotCW1ha2UgUFlfREVGPSAkKFBZVEhPTi5FWEUpICQoUFlUSE9OUE0uRVhFKSAkKFBHRU4uRVhFKSAkKEVYVEVSTkRMTFMpCi0KLWNsZWFuOgotCXJtIC1mICQoT1VUKSoKLQlybSAtZiAkKFBZVEhPTi5MSUIpICQoUFlUSE9OLklNUExJQikgJChQWVRIT04uRVhFSU1QKSAkKFBZVEhPTi5ETEwpIFwKLQkgICQoUFlUSE9OLkVYRSkgJChQWVRIT05QTS5FWEUpICQoUEdFTi5FWEUpICokKE1PRFVMRS5FWFQpICouZGxsCi0JZmluZCAuLi8uLi9MaWIgLW5hbWUgIioucHlbY29dIiAtZXhlYyBybSB7fSAiOyIKLQotbHg6Ci0JQGVjaG8gUGFja2luZyBldmVyeXRoaW5nIHdpdGggbHhMaXRlLi4uCi0JbHhsaXRlICQoUFlUSE9OLkRMTCkgJChQWVRIT04uRVhFKSAkKFBZVEhPTlBNLkVYRSkgJChQR0VOLkVYRSkKLQotZGVwZW5kOiAkKE9VVEJBU0UpCi0JbWFrZWRlcCAtZiAkKE9VVEJBU0UpcHl0aG9uLmRlcCAtbyAkKEJVQ0spTyAtcCAkKEJVQ0spXChPVVRcKSBcCi0JICAtciAtYyAkKElOQ0xVREUpICQoU1JDLkxJQikgJChTUkMuUEdFTikKLQotJChPVVQpOiAkKE9VVEJBU0UpCi0KLSQoT1VUKSAkKE9VVEJBU0UpOgotCW1rZGlyLmV4ZSAkQAotCi0kKFBZVEhPTi5MSUIpOiAkKE9CSi5MSUIpCi0Jcm0uZXhlIC1mICRACi0JJChBUikgJChBUkZMQUdTKSAkQCAkXgotCi0jIHRoZSBQeXRob24gY29yZSBETEwgLmRlZiBmaWxlIG5lZWRzIHRvIGhhdmUgYSBudW1iZXIgb2Ygbm9uLXN0YXRpYwotIyBzeW1ib2xzIHRoYXQgYXJlbid0IHBhcnQgb2YgdGhlIFB5dGhvbiBDIEFQSSByZW1vdmVkIChjb21tZW50ZWQgb3V0KQotIyBmcm9tIHRoZSBETEwgZXhwb3J0IGxpc3QuCi0kKFBZVEhPTi5ERUYpOiAkKFBZVEhPTi5MSUIpCi0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIExJQlJBUlkgJChQWVRIT05fTElCKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKVB5dGhvbiAkKFBZVEhPTl9WRVIpIENvcmUgRExMJChEUVVPVEUpID4+JEAKLQlAZWNobyBQUk9UTU9ERSA+PiRACi0JQGVjaG8gREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgPj4kQAotCUBlY2hvIEVYUE9SVFMgPj4kQAotCSQoRVhQTElCKSAtdSAkKFBZVEhPTi5MSUIpIHxcCi0JIHNlZCAtZSAiL14gIC5pbml0Liovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAucGNyZV8uKi9zL14gLzsgLyIgXAotCQktZSAiL14gIC5hcnJheV9tZXRob2RzL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmZhc3Rfc2F2ZV9sZWF2ZS9zL14gLzsgLyIgXAotCQktZSAiL14gIC5kbG9wZW4vcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxzeW0vcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxjbG9zZS9zL14gLzsgLyIgXAotCQktZSAiL14gIC5kbGVycm9yL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLl9QeV9yZV8uKi9zL14gLzsgLyIgXAotCQktZSAiL14gIC5fUHlfTUQ1Liovcy9eIC87IC8iID4+JEAKLQotJChQWVRIT04uSU1QTElCKTogJChQWVRIT04uREVGKQotCSQoSU1QTElCKSAtbyAkQCAkXgotCi0kKFBZVEhPTi5FWEVJTVApOiAkKFBZVEhPTi5ERUYpCi0JJChJTVBMSUIpIC1vICRAICReCi0KLSQoUFlUSE9OLkRMTCk6ICQoT1VUKWRsbGVudHJ5JE8gJChQWVRIT04uTElCKSAkKFBZVEhPTi5ERUYpCi0KLSMgRXhwbGljaXQgbWFrZSB0YXJnZXRzIGZvciB0aGUgLkVYRXMgdG8gYmUgYWJsZSB0byB1c2UgTEQgdG8gbGluawotIyAoc28gdGhhdCBmb3JrKCkgd2lsbCB3b3JrIGlmIHJlcXVpcmVkKQotCi0kKFBZVEhPTi5FWEUpOiAkKFNSQy5FWEUpICQoUFlUSE9OLkVYRUlNUCkgJChPVVQpcHl0aG9uLmRlZgotCSQoQ0MpIC1abXQgJChMRE1PREUuRVhFKSAtWmNydGRsbCAtV2FsbCAkKElOQ0xVREUpIC1MLiAtbGdjYyAtbyAkQCAkKFNSQy5FWEUpICQoUFlUSE9OLkVYRUlNUCkgJChMSUJTKSAkKE9VVClweXRob24uZGVmCi0JJChFWEVPUFQpIC1hcSAkKFBZVEhPTi5FWEUpIC1oJChORklMRVMpCi0KLSQoUFlUSE9OUE0uRVhFKTogJChTUkMuUE1FWEUpICQoUFlUSE9OLkVYRUlNUCkgJChPVVQpcHl0aG9ucG0uZGVmCi0JJChDQykgLVptdCAkKExETU9ERS5FWEUpIC1aY3J0ZGxsIC1XYWxsICQoSU5DTFVERSkgLUwuIC1sZ2NjIC1vICRAICQoU1JDLlBNRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoTElCUykgJChPVVQpcHl0aG9ucG0uZGVmCi0JJChFWEVPUFQpIC1hcSAkKFBZVEhPTlBNLkVYRSkgLWgkKE5GSUxFUykKLQotJChQR0VOLkVYRSk6ICQoT0JKLlBHRU4pICQoT1VUKXBnZW4uZGVmCi0KLSMgRXhwbGljaXQgYnVpbGRpbmcgaW5zdHJ1Y3Rpb25zIGZvciB0aG9zZSBleHRlcm5hbCBtb2R1bGVzIHRoYXQgcmVxdWlyZSAKLSMgYXdrd2FyZCBoYW5kbGluZyAoZHVlIGUuZy4gdG8gbm9uLXN0ZCBuYW1pbmcsIG9yIG11bHRpcGxlIHNvdXJjZSBmaWxlcykKLSMgLSBzdGFuZGFyZCBtb2R1bGVzCi0KLV9zb2NrZXQkKE1PRFVMRS5FWFQpOiAkKE9VVClzb2NrZXRtb2R1bGUkTyAkKE9VVClfc29ja2V0X20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpCi0KLSMgX3Rlc3RjYXBpIG5lZWRzIHRvIGJlIHJlbmFtZWQgdG8gYmUgdXNlZnVsCi1fdGVzdGNhcGkkKE1PRFVMRS5FWFQpOiAkKE9VVClfdGVzdGNhcGltb2R1bGUkTyAkKE9VVClfdGVzdGNhcGlfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotX3Rlc3RjYXAkKE1PRFVMRS5FWFQpOiBfdGVzdGNhcGkkKE1PRFVMRS5FWFQpCi0JY3AgJF4gJEAKLQotIyB1bmljb2RlZGF0YSBuZWVkcyB0byBiZSByZW5hbWVkIHRvIGJlIHVzZWZ1bAotdW5pY29kZWRhdGEkKE1PRFVMRS5FWFQpOiAkKE9VVCl1bmljb2RlZGF0YSRPICQoT1VUKXVuaWNvZGVkYXRhX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpICQoTU9EVUxFX0xJQlMpCi0KLXVuaWNvZGVkJChNT0RVTEUuRVhUKTogdW5pY29kZWRhdGEkKE1PRFVMRS5FWFQpCi0JY3AgJF4gJEAKLQotY3J5cHQkKE1PRFVMRS5FWFQpOiAkKE9VVCljcnlwdG1vZHVsZSRPICQoT1VUKWNyeXB0X20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAtbHVmYyAkKExJQlMpCi0KLSMgVGhlIF9jdXJzZXNfcGFuZWwgbW9kdWxlIHJlcXVpcmVzIGEgY291cGxlIG9mIG5jdXJzZXMgbGlicmFyeSBlbnRyeQotIyBwb2ludHMsIHdoaWNoIGFyZSBiZXN0IGV4cG9zZWQgYXMgZXhwb3J0cyBmcm9tIHRoZSBfY3Vyc2VzIG1vZHVsZSBETEwKLSQoT1VUKV9jdXJzZXNfbS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIExJQlJBUlkgJChub3RkaXIgJCopIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0JQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpJChERVNDUklQVElPTi4kKG5vdGRpciAkKikkKE1PRExJQi5FWFQpKSQoRFFVT1RFKSA+PiRACi0JQGVjaG8gREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgPj4kQAotCUBlY2hvIEVYUE9SVFMgPj4kQAotCUBlY2hvIAlpbml0X2N1cnNlcyA+PiRACi0JQGVjaG8gCXdub3V0cmVmcmVzaCA+PiRACi0JQGVjaG8gCV9uY19wYW5lbGhvb2sgPj4kQAotCUBlY2hvIAlpc19saW5ldG91Y2hlZCA+PiRACi0JQGVjaG8gCW12d2luID4+JEAKLQlAZWNobyAJc3Rkc2NyID4+JEAKLQlAZWNobyAJd3RvdWNobG4gPj4kQAotCi0kKE9VVClfY3Vyc2VzX3BhbmVsX20uZGVmOgotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQobm90ZGlyICQqKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKVB5dGhvbiBzdGFuZGFyZCBtb2R1bGUgJChub3RkaXIgJCopJChEUVVPVEUpID4+JEAKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gSU1QT1JUUyA+PiRACi0JQGVjaG8gCV9jdXJzZXMud25vdXRyZWZyZXNoID4+JEAKLQlAZWNobyAJX2N1cnNlcy5fbmNfcGFuZWxob29rID4+JEAKLQlAZWNobyAJX2N1cnNlcy5pc19saW5ldG91Y2hlZCA+PiRACi0JQGVjaG8gCV9jdXJzZXMubXZ3aW4gPj4kQAotCUBlY2hvIAlfY3Vyc2VzLnN0ZHNjciA+PiRACi0JQGVjaG8gCV9jdXJzZXMud3RvdWNobG4gPj4kQAotCUBlY2hvIEVYUE9SVFMgPj4kQAotCUBlY2hvIAlpbml0X2N1cnNlc19wYW5lbCA+PiRACi0KLV9jdXJzZXMkKE1PRExJQi5FWFQpOiAkKE9VVClfY3Vyc2VzbW9kdWxlJE8gJChPVVQpX2N1cnNlc19tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbG5jdXJzZXMKLQotIyBjdXJzZXNfcGFuZWwgbmVlZHMgdG8gYmUgcmVuYW1lZCB0byBiZSB1c2VmdWwKLV9jdXJzZXNfcGFuZWwkKE1PRFVMRS5FWFQpOiAkKE9VVClfY3Vyc2VzX3BhbmVsJE8gJChPVVQpX2N1cnNlc19wYW5lbF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbHBhbmVsCi0KLV9jdXJzZXNfJChNT0RVTEUuRVhUKTogX2N1cnNlc19wYW5lbCQoTU9EVUxFLkVYVCkKLQljcCAkXiAkQAotCi1fZGJtJChNT0RVTEUuRVhUKTogJChPVVQpX2RibW1vZHVsZSRPICQoT1VUKWRibV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbGdkYm0KLQotX2dkYm0kKE1PRFVMRS5FWFQpOiAkKE9VVClfZ2RibW1vZHVsZSRPICQoT1VUKWdkYm1fbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxnZGJtCi0KLQotIyBFeHBhdCBpcyBub3cgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24sIHNvIHVzZSB0aGUgaW5jbHVkZWQgdmVyc2lvbgotJChPVVQpcHlleHBhdCRPOgkuLi8uLi9Nb2R1bGVzL3B5ZXhwYXQuYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgLWMgLW8gJEAgJF4KLSQoT1VUKXhtbHBhcnNlJE86CS4uLy4uL01vZHVsZXMvZXhwYXQveG1scGFyc2UuYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi0kKE9VVCl4bWxyb2xlJE86CS4uLy4uL01vZHVsZXMvZXhwYXQveG1scm9sZS5jCi0JJChDQykgJChDRkxBR1MpICQoRVhQQVQuSU5DKSAkKEVYUEFULkRFRikgLWMgLW8gJEAgJF4KLSQoT1VUKXhtbHRvayRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHRvay5jCi0JJChDQykgJChDRkxBR1MpICQoRVhQQVQuSU5DKSAkKEVYUEFULkRFRikgLWMgLW8gJEAgJF4KLXB5ZXhwYXQkKE1PRFVMRS5FWFQpOiAkKE9VVClweWV4cGF0JE8gJChPVVQpeG1scGFyc2UkTyAkKE9VVCl4bWxyb2xlJE8gXAotCQkkKE9VVCl4bWx0b2skTyAkKE9VVClweWV4cGF0X20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpCi0KLXJlYWRsaW5lJChNT0RVTEUuRVhUKTogJChPVVQpcmVhZGxpbmUkTyAkKE9VVClyZWFkbGluZV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbHJlYWRsaW5lIC1sbmN1cnNlcwotCi0jX3RraW50ZXIkKE1PRFVMRS5FWFQpOiAkKE9VVClfdGtpbnRlciRPICQoT1VUKXRjbE5vdGlmeSRPICQoT1VUKXRrYXBwaW5pdCRPCi1fdGtpbnRlciQoTU9EVUxFLkVYVCk6ICQoT1VUKV90a2ludGVyJE8gJChPVVQpdGNsTm90aWZ5JE8gXAotCQkkKE9VVClfdGtpbnRlcl9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAkKFRLX0xJQlMpCi0KLXpsaWIkKE1PRFVMRS5FWFQpOiAkKE9VVCl6bGlibW9kdWxlJE8gJChPVVQpemxpYl9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbHoKLQotYnoyJChNT0RVTEUuRVhUKTogJChPVVQpYnoybW9kdWxlJE8gJChPVVQpYnoyX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sYnoyCi0KLV9zc2wkKE1PRFVMRS5FWFQpOiAkKE9VVClfc3NsJE8gJChPVVQpX3NzbF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbHNzbCAtbGNyeXB0bwotCi0jIHRoZSB0ZXN0IHRhcmdldAotdGVzdDoKLQktZmluZCAuLi8uLi9MaWIgLW5hbWUgIioucHlbY29dIiAtZXhlYyBybSB7fSAiOyIKLQktLi9weXRob24gLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWwgLXUgIm5ldHdvcmsiCi0JLi9weXRob24gLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWwgLXUgIm5ldHdvcmsiCi0KLS1pbmNsdWRlICQoT1VUQkFTRSlweXRob24uZGVwCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvUkVBRE1FLm9zMmVteCBiL1BDL29zMmVteC9SRUFETUUub3MyZW14CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWNmNmRmLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9SRUFETUUub3MyZW14CisrKyAvZGV2L251bGwKQEAgLTEsNjYzICswLDAgQEAKLVRoaXMgaXMgYSBwb3J0IG9mIFB5dGhvbiAyLjYgdG8gT1MvMiB1c2luZyB0aGUgRU1YIGRldmVsb3BtZW50IHRvb2xzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVdoYXQncyBuZXcgc2luY2UgdGhlIHByZXZpb3VzIHJlbGVhc2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQW5vdGhlciBkYXksIGFub3RoZXIgdmVyc2lvbi4uLgotCi0KLUxpY2Vuc2VzIGFuZCBpbmZvIGFib3V0IFB5dGhvbiBhbmQgRU1YCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1QbGVhc2UgcmVhZCB0aGUgZmlsZSBSRUFETUUuUHl0aG9uLTIuNiBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UgZm9yIAotaW5mb3JtYXRpb24gYWJvdXQgUHl0aG9uIDIuNi4gIFRoaXMgZmlsZSBpcyB0aGUgUkVBRE1FIGZpbGUgZnJvbSB0aGUgCi1QeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24gYXZhaWxhYmxlIHZpYSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvIAotYW5kIGl0cyBtaXJyb3JzLiAgVGhlIGZpbGUgTElDRU5DRS5QeXRob24tMi42IGlzIHRoZSB0ZXh0IG9mIHRoZSBMaWNlbmNlIAotZnJvbSB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uLgotCi1Ob3RlIHRoYXQgdGhlIEVNWCBwYWNrYWdlIHRoYXQgdGhpcyBwYWNrYWdlIGRlcGVuZHMgb24gaXMgcmVsZWFzZWQgdW5kZXIgCi10aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UuICBQbGVhc2UgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gCi1hY2NvbXBhbnlpbmcgdGhlIEVNWCBSdW50aW1lIGxpYnJhcmllcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgCi1pbXBsaWNhdGlvbnMgb2YgdGhpcy4gIEEgY29weSBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdQTCBpcyBpbmNsdWRlZCBhcyB0aGUgCi1maWxlIENPUFlJTkcuZ3BsMi4KLQotUmVhZGxpbmUgYW5kIEdEQk0gYXJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLiAgSSB0aGluayAKLUViZXJoYXJkIE1hdHRlcycgcG9ydGluZyBjaGFuZ2VzIHRvIEJTRCBEQiB2MS44NSBhcmUgYWxzbyBHUEwnZWQgKEJTRCBEQiAKLWl0c2VsZiBpcyBCU0QgTGljZW5jZWQpLiAgbmN1cnNlcyBhbmQgZXhwYXQgYXBwZWFyIHRvIGJlIGNvdmVyZWQgYnkgTUlUIAotc3R5bGUgbGljZW5jZXMgLSBwbGVhc2UgcmVmZXIgdG8gdGhlIHNvdXJjZSBkaXN0cmlidXRpb25zIGZvciBtb3JlIGRldGFpbC4gIAotemxpYiBpcyBkaXN0cmlidXRhYmxlIHVuZGVyIGEgdmVyeSBmcmVlIGxpY2Vuc2UuICBHTlUgVUZDIGlzIHVuZGVyIHRoZSAKLUdOVSBMR1BMIChzZWUgZmlsZSBDT1BZSU5HLmxpYikuCi0KLU15IHBhdGNoZXMgdG8gdGhlIFB5dGhvbi0yLnggc291cmNlIGRpc3RyaWJ1dGlvbnMsIGFuZCBhbnkgb3RoZXIgcGFja2FnZXMgCi11c2VkIGluIHRoaXMgcG9ydCwgYXJlIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLQotVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCi1JbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3IgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIGFyaXNpbmcgZnJvbSB0aGUgCi11c2Ugb2YgdGhlIHNvZnR3YXJlLgotCi1JIGRvIGhvcGUgaG93ZXZlciB0aGF0IGl0IHByb3ZlcyB1c2VmdWwgdG8gc29tZW9uZS4KLQotCi1PdGhlciBwb3J0cwotLS0tLS0tLS0tLS0KLQotVGhlcmUgaGF2ZSBiZWVuIHBvcnRzIG9mIHByZXZpb3VzIHZlcnNpb25zIG9mIFB5dGhvbiB0byBPUy8yLgotCi1UaGUgYmVzdCBrbm93biB3b3VsZCBiZSB0aGF0IGJ5IEplZmYgUnVzaCwgbW9zdCByZWNlbnRseSBvZiB2ZXJzaW9uIAotMS41LjIuICBKZWZmIHVzZWQgSUJNJ3MgVmlzdWFsIEFnZSBDKysgKHYzKSBmb3IgaGlzIHBvcnRzLCBhbmQgaGlzIAotcGF0Y2hlcyBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbi4KLQotQW5keSBaYWJvbG90bnkgaW1wbGVtZW50ZWQgYSBwb3J0IG9mIFB5dGhvbiB2MS41LjIgdXNpbmcgdGhlIEVNWCAKLWRldmVsb3BtZW50IHRvb2xzLiAgSGlzIHBhdGNoZXMgYWdhaW5zdCB0aGUgUHl0aG9uIHYxLjUuMiBzb3VyY2UgCi1kaXN0cmlidXRpb24gaGF2ZSBiZWNvbWUgdGhlIGNvcmUgb2YgdGhpcyBwb3J0LCBhbmQgd2l0aG91dCBoaXMgZWZmb3J0cyAKLXRoaXMgcG9ydCB3b3VsZG4ndCBleGlzdC4gIEFuZHkncyBwb3J0IGFsc28gYXBwZWFycyB0byBoYXZlIGJlZW4gCi1jb21waWxlZCB3aXRoIGhpcyBwb3J0IG9mIGdjYyAyLjk1LjIgdG8gRU1YLCB3aGljaCBJIGhhdmUgYnV0IGhhdmUgCi1jaG9zZW4gbm90IHRvIHVzZSBmb3IgdGhlIGJpbmFyeSBkaXN0cmlidXRpb24gb2YgdGhpcyBwb3J0IChzZWUgaXRlbSAxNiAKLW9mIHRoZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIHNlY3Rpb24gYmVsb3cpLgotCi1JdCBpcyBwb3NzaWJsZSB0byBoYXZlIHRoZXNlIGVhcmxpZXIgcG9ydHMgc3RpbGwgdXNhYmxlIGFmdGVyIGluc3RhbGxpbmcgCi10aGlzIHBvcnQgLSBzZWUgdGhlIFJFQURNRS5vczJlbXgubXVsdGlwbGVfdmVyc2lvbnMgZmlsZSwgY29udHJpYnV0ZWQgYnkKLURyIERhdmlkIE1lcnR6LCBmb3IgYSBzdWdnZXN0ZWQgYXBwcm9hY2ggdG8gYWNoaWV2aW5nIHRoaXMuCi0KLQotU29mdHdhcmUgcmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBwYWNrYWdlIHJlcXVpcmVzIHRoZSBFTVggUnVudGltZSBwYWNrYWdlLCBhdmFpbGFibGUgZnJvbSB0aGUgCi1Ib2JiZXMgKGh0dHA6Ly9ob2JiZXMubm1zdS5lZHUvKSBhbmQgTEVPIChodHRwOi8vYXJjaGl2Lmxlby5vcmcvKSAKLWFyY2hpdmVzIG9mIE9TLzIgc29mdHdhcmUuICBJIGhhdmUgdXNlZCBFTVggdmVyc2lvbiAwLjlkIGZpeDA0IGluIAotZGV2ZWxvcGluZyB0aGlzIHBvcnQuCi0KLU15IGRldmVsb3BtZW50IHN5c3RlbSBpcyBydW5uaW5nIE9TLzIgdjQgd2l0aCBmaXhwYWNrIDEyLgotCi0zcmQgcGFydHkgc29mdHdhcmUgd2hpY2ggaGFzIGJlZW4gbGlua2VkIGludG8gZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXM6Ci0tIG5jdXJzZXMgICAgICAoc2VlIGh0dHA6Ly9kaWNrZXkuaGlzLmNvbS8gZm9yIG1vcmUgaW5mbywgdjUuMikKLS0gR05VIFJlYWRsaW5lIChLYWkgVXdlIFJvbW1lbCdzIHBvcnQgYXZhaWxhYmxlIGZyb20gSG9iYmVzIG9yIExFTywgdjIuMSkKLS0gR05VIEdEQk0gICAgIChLYWkgVXdlIFJvbW1lbCdzIHBvcnQgYXZhaWxhYmxlIGZyb20gSG9iYmVzIG9yIExFTywgdjEuNy4zKQotLSB6bGliICAgICAgICAgKGRlcml2ZWQgZnJvbSBIdW5nLUNoaSBDaHUncyBwb3J0IG9mIHYxLjEuMywgdjEuMS40KQotLSBleHBhdCAgICAgICAgKGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uLCB2MS45NS42KQotLSBHTlUgVUZDICAgICAgKEthaSBVd2UgUm9tbWVsJ3MgcG9ydCBhdmFpbGFibGUgZnJvbSBMRU8sIHYyLjAuNCkKLQotCi1BYm91dCB0aGlzIHBvcnQKLS0tLS0tLS0tLS0tLS0tLQotCi1JIGhhdmUgYXR0ZW1wdGVkIHRvIG1ha2UgdGhpcyBwb3J0IGFzIGNvbXBsZXRlIGFuZCBmdW5jdGlvbmFsIGFzIEkgY2FuLCAKLW5vdHdpdGhzdGFuZGluZyB0aGUgaXNzdWVzIGluIHRoZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIHNlY3Rpb24gYmVsb3cuCi0KLUNvcmUgY29tcG9uZW50czoKLQotUHl0aG9uLmV4ZSBpcyBsaW5rZWQgYXMgYW4gYS5vdXQgZXhlY3V0YWJsZSwgaWUgdXNpbmcgRU1YIG1ldGhvZCBFMSAKLXRvIGNvbXBpbGUgJiBsaW5rIHRoZSBleGVjdXRhYmxlLiAgVGhpcyBpcyBzbyB0aGF0IGZvcmsoKSB3b3JrcyAoc2VlIAotIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDEpLgotCi1QeXRob24yNi5kbGwgaXMgY3JlYXRlZCBhcyBhIG5vcm1hbCBPTUYgRExMLCB3aXRoIGFuIE9NRiBpbXBvcnQgCi1saWJyYXJ5IGFuZCBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlLiAgVGhlcmUgaXMgYWxzbyBhbiBhLm91dCAoLmEpIGltcG9ydCAKLWxpYnJhcnkgdG8gc3VwcG9ydCBsaW5raW5nIHRoZSBETEwgdG8gYS5vdXQgZXhlY3V0YWJsZXMuICBUaGUgRExMIAotcmVxdWlyZXMgdGhlIEVNWCBydW50aW1lIERMTHMuCi0KLVRoaXMgcG9ydCBoYXMgYmVlbiBidWlsdCB3aXRoIGNvbXBsZXRlIHN1cHBvcnQgZm9yIG11bHRpdGhyZWFkaW5nLgotCi1Nb2R1bGVzOgotCi1XaXRoIHRoZSBleGNlcHRpb24gb2YgbW9kdWxlcyB0aGF0IGhhdmUgYSBzaWduaWZpY2FudCBjb2RlIHNpemUsIG9yIGFyZSAKLW5vdCByZWNvbW1lbmRlZCBvciBkZXNpcmVkIGZvciBub3JtYWwgdXNlLCB0aGUgc3RhbmRhcmQgbW9kdWxlcyBhcmUgbm93IAotYnVpbHQgaW50byB0aGUgY29yZSBETEwgcmF0aGVyIHRoYW4gY29uZmlndXJlZCBhcyBkeW5hbWljYWxseSBsb2FkYWJsZSAKLW1vZHVsZXMuICBUaGlzIGlzIGZvciBib3RoIHJlYXNvbnMgb2YgcGVyZm9ybWFuY2UgKHN0YXJ0dXAgdGltZSkgYW5kIAotbWVtb3J5IHVzZSAobG90cyBvZiBzbWFsbCBETExzIGZyYWdtZW50IHRoZSBhZGRyZXNzIHNwYWNlKS4KLQotSSBoYXZlbid0IHlldCBjaGFuZ2VkIHRoZSBidWlsZGluZyBvZiBQeXRob24ncyBkeW5hbWljYWxseSBsb2FkYWJsZSAKLW1vZHVsZXMgb3ZlciB0byB1c2luZyB0aGUgRGlzdFV0aWxzLgotCi1TZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDMgZm9yIG5vdGVzIGFib3V0IHRoZSBmY250bCBtb2R1bGUsIGFuZCAKLSJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAxMCBmb3Igbm90ZXMgYWJvdXQgdGhlIHB3ZCBhbmQgZ3JwIG1vZHVsZXMuCi0KLVRoaXMgcG9ydCBzdXBwb3J0cyBjYXNlIHNlbnNpdGl2ZSBtb2R1bGUgaW1wb3J0IHNlbWFudGljcywgbWF0Y2hpbmcgCi10aGUgV2luZG93cyByZWxlYXNlLiAgVGhpcyBjYW4gYmUgZGVhY3RpdmF0ZWQgYnkgc2V0dGluZyB0aGUgUFlUSE9OQ0FTRU9LIAotZW52aXJvbm1lbnQgdmFyaWFibGUgKHRoZSB2YWx1ZSBkb2Vzbid0IG1hdHRlcikgLSBzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiAKLWl0ZW0gMTIuCi0KLU9wdGlvbmFsIG1vZHVsZXM6Ci0KLVdoZXJlIEkndmUgYmVlbiBhYmxlIHRvIGxvY2F0ZSB0aGUgcmVxdWlyZWQgM3JkIHBhcnR5IHBhY2thZ2VzIGFscmVhZHkgCi1wb3J0ZWQgdG8gT1MvMiwgSSd2ZSBidWlsdCBhbmQgaW5jbHVkZWQgdGhlbS4KLQotVGhlc2UgaW5jbHVkZSBuY3Vyc2VzIChfY3Vyc2VzLCBfY3Vyc2VzX3BhbmVsKSwKLUdOVSBHREJNIChnZGJtLCBkYm0pLCB6bGliICh6bGliKSwgR05VIFJlYWRsaW5lIChyZWFkbGluZSksIGFuZCBHTlUgVUZDIAotKGNyeXB0KS4KLQotRXhwYXQgaXMgbm93IGluY2x1ZGVkIGluIHRoZSBQeXRob24gcmVsZWFzZSBzb3VyY2ViYWxsLCBhbmQgdGhlIHB5ZXhwYXQgCi1tb2R1bGUgaXMgYWx3YXlzIGJ1aWx0LgotCi1JIGhhdmUgYnVpbHQgdGhlc2UgbW9kdWxlcyBzdGF0aWNhbGx5IGxpbmtlZCBhZ2FpbnN0IHRoZSAzcmQgcGFydHkgCi1saWJyYXJpZXMuICBVbmZvcnR1bmF0ZWx5IG15IGF0dGVtcHRzIHRvIHVzZSB0aGUgZGxsIHZlcnNpb24gb2YgR05VIAotcmVhZGxpbmUgaGF2ZSBiZWVuIGEgZGlzbWFsIGZhaWx1cmUsIGluIHRoYXQgd2hlbiB0aGUgZHluYW1pY2FsbHkgCi1saW5rZWQgcmVhZGxpbmUgbW9kdWxlIGlzIGFjdGl2ZSBvdGhlciBtb2R1bGVzIGltbWVkaWF0ZWx5IHByb3Zva2UgYSAKLWNvcmUgZHVtcCB3aGVuIGltcG9ydGVkLgotCi1Pbmx5IHRoZSBCU0QgREIgcGFja2FnZSAocGFydCBvZiB0aGUgQlNEIHBhY2thZ2UgZGlzdHJpYnV0ZWQgd2l0aCBFTVgpIAotbmVlZHMgc291cmNlIG1vZGlmaWNhdGlvbnMgdG8gYmUgdXNlZCBmb3IgdGhpcyBwb3J0LCBwZXJ0YWluaW5nIHRvIHVzZSAKLW9mIGVycm5vIHdpdGggbXVsdGl0aHJlYWRpbmcuCi0KLVRoZSBvdGhlciBwYWNrYWdlcywgZXhjZXB0IGZvciBuY3Vyc2VzIGFuZCB6bGliLCBuZWVkZWQgTWFrZWZpbGUgY2hhbmdlcyAKLWZvciBtdWx0aXRocmVhZGluZyBzdXBwb3J0IGJ1dCBubyBzb3VyY2UgY2hhbmdlcy4KLQotVGhlIF9jdXJzZXNfcGFuZWwgbW9kdWxlIGlzIGEgcG90ZW50aWFsIHByb2JsZW0gLSBzZWUgIllPVSBIQVZFIEJFRU4gCi1XQVJORUQiIGl0ZW0gMTMuCi0KLVVwc3RyZWFtIHNvdXJjZSBwYXRjaGVzOgotCi1ObyB1cGRhdGVzIHRvIHRoZSBQeXRob24gMi42IHJlbGVhc2UgaGF2ZSBiZWNvbWUgYXZhaWxhYmxlLgotCi1MaWJyYXJ5IGFuZCBvdGhlciBkaXN0cmlidXRlZCBQeXRob24gY29kZToKLQotVGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IGxpdmVzIGluIHRoZSBMaWIgZGlyZWN0b3J5LiAgQWxsIHRoZSBzdGFuZGFyZCAKLWxpYnJhcnkgY29kZSBpbmNsdWRlZCB3aXRoIHRoZSBQeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24gaXMgaW5jbHVkZWQgCi1pbiB0aGUgYmluYXJ5IGFyY2hpdmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgZG9zLTh4MyBhbmQgdGtpbnRlciAKLXN1YmRpcmVjdG9yaWVzIHdoaWNoIGhhdmUgYmVlbiBvbWl0dGVkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgYmluYXJ5IAotYXJjaGl2ZSAtIHRoZSBkb3MtOHgzIGNvbXBvbmVudHMgYXJlIHVubmVjZXNzYXJ5IGR1cGxpY2F0ZXMgYW5kIFRraW50ZXIgCi1pcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcG9ydCAoeWV0KS4gIEFsbCB0aGUgcGxhdC0qIHN1YmRpcmVjdG9yaWVzIGluIHRoZSAKLXNvdXJjZSBkaXN0cmlidXRpb24gaGF2ZSBhbHNvIGJlZW4gb21pdHRlZCwgZXhjZXB0IGZvciB0aGUgcGxhdC1vczJlbXggCi1zdWJkaXJlY3RvcnkuCi0KLVRoZSBUb29scyBhbmQgRGVtbyBkaXJlY3RvcmllcyBjb250YWluIGEgY29sbGVjdGlvbiBvZiBQeXRob24gc2NyaXB0cy4gIAotVG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBiaW5hcnkgYXJjaGl2ZSwgdGhlIERlbW8vc2dpLCBEZW1vL1RpeCwgCi1EZW1vL3RraW50ZXIsIFRvb2xzL2F1ZGlvcHkgYW5kIFRvb2xzL0lETEUgc3ViZGlyZWN0b3JpZXMgaGF2ZSBiZWVuIAotb21pdHRlZCBhcyBub3QgYmVpbmcgc3VwcG9ydGVkIGJ5IHRoaXMgcG9ydC4gIFRoZSBNaXNjIGRpcmVjdG9yeSBoYXMgCi1hbHNvIGJlZW4gb21pdHRlZC4KLQotQWxsIHN1YmRpcmVjdG9yaWVzIG9taXR0ZWQgZnJvbSB0aGUgYmluYXJ5IGFyY2hpdmUgY2FuIGJlIHJlY29uc3RpdHV0ZWQgCi1mcm9tIHRoZSBQeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24sIGlmIGRlc2lyZWQuCi0KLVN1cHBvcnQgZm9yIGJ1aWxkaW5nIFB5dGhvbiBleHRlbnNpb25zOgotCi1UaGUgQ29uZmlnIHN1YmRpcmVjdG9yeSBjb250YWlucyB0aGUgZmlsZXMgZGVzY3JpYmluZyB0aGUgY29uZmlndXJhdGlvbiAKLW9mIHRoZSBpbnRlcnByZXRlciBhbmQgdGhlIE1ha2VmaWxlLCBpbXBvcnQgbGlicmFyaWVzIGZvciB0aGUgUHl0aG9uIERMTCwgCi1hbmQgdGhlIG1vZHVsZSBkZWZpbml0aW9uIGZpbGUgdXNlZCB0byBjcmVhdGUgdGhlIFB5dGhvbiBETEwuICBUaGUgCi1JbmNsdWRlIHN1YmRpcmVjdG9yeSBjb250YWlucyBhbGwgdGhlIHN0YW5kYXJkIFB5dGhvbiBoZWFkZXIgZmlsZXMgCi1uZWVkZWQgZm9yIGJ1aWxkaW5nIGV4dGVuc2lvbnMuCi0KLUFzIEkgZG9uJ3QgaGF2ZSB0aGUgVmlzdWFsIEFnZSBDKysgY29tcGlsZXIsIEkndmUgbWFkZSBubyBhdHRlbXB0IHRvIAotaGF2ZSB0aGlzIHBvcnQgc3VwcG9ydCBleHRlbnNpb25zIGJ1aWx0IHdpdGggdGhhdCBjb21waWxlci4KLQotCi1QYWNrYWdpbmcKLS0tLS0tLS0tLQotCi1UaGlzIHBvcnQgaXMgcGFja2FnZWQgYXMgZm9sbG93czoKLS0gcHl0aG9uLTIuNi1vczJlbXgtYmluLTAzPz8/Py56aXAgIChiaW5hcmllcywgbGlicmFyeSBtb2R1bGVzKQotLSBweXRob24tMi42LW9zMmVteC1zcmMtMDM/Pz8/ICAgICAgKHBhdGNoZXMrbWFrZWZpbGVzIGZvciBub24tUHl0aG9uIGNvZGUpCi0KLUFzIGFsbCB0aGUgUHl0aG9uIHNwZWNpZmljIHBhdGNoZXMgZm9yIHRoZSBwb3J0IGFyZSBub3cgcGFydCBvZiB0aGUgCi1QeXRob24gcmVsZWFzZSB0YXJiYWxsLCBvbmx5IHRoZSBwYXRjaGVzIGFuZCBtYWtlZmlsZXMgaW52b2x2ZWQgaW4gCi1idWlsZGluZyBleHRlcm5hbCBsaWJyYXJpZXMgZm9yIG9wdGlvbmFsIGV4dGVuc2lvbnMgYXJlIGluY2x1ZGVkIGluIAotdGhlIHNvdXJjZSBhcmNoaXZlLgotCi1Eb2N1bWVudGF0aW9uIGZvciB0aGUgUHl0aG9uIGxhbmd1YWdlLCBhcyB3ZWxsIGFzIHRoZSBQeXRob24gMi42IAotc291cmNlIGRpc3RpYnV0aW9uLCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgUHl0aG9uIHdlYnNpdGUgCi0oaHR0cDovL3d3dy5weXRob24ub3JnLykgb3IgdGhlIFB5dGhvbiBwcm9qZWN0IHBhZ2VzIGF0IFNvdXJjZWZvcmdlIAotKGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvcHl0aG9uLykuCi0KLQotSW5zdGFsbGF0aW9uCi0tLS0tLS0tLS0tLS0KLQotT2J0YWluIGFuZCBpbnN0YWxsLCBhcyBwZXIgdGhlIGluY2x1ZGVkIGluc3RydWN0aW9ucywgdGhlIEVNWCBydW50aW1lIAotcGFja2FnZS4KLQotVW5wYWNrIHRoaXMgYXJjaGl2ZSwgcHJlc2VydmluZyB0aGUgc3ViZGlyZWN0b3JpZXMsIGluIHRoZSByb290IGRpcmVjdG9yeSAKLW9mIHRoZSBkcml2ZSB3aGVyZSB5b3Ugd2FudCBQeXRob24gdG8gbGl2ZS4KLQotQWRkIHRoZSBQeXRob24gZGlyZWN0b3J5IChlZyBDOlxQeXRob24yNikgdG8gdGhlIFBBVEggYW5kIExJQlBBVEggCi12YXJpYWJsZXMgaW4gQ09ORklHLlNZUy4KLQotWW91IHNob3VsZCB0aGVuIHNldCB0aGUgUFlUSE9OSE9NRSBhbmQgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgCi1pbiBDT05GSUcuU1lTLgotCi1QWVRIT05IT01FIHNob3VsZCBiZSBzZXQgdG8gUHl0aG9uJ3MgdG9wIGxldmVsIGRpcmVjdG9yeS4gIFBZVEhPTlBBVEggCi1zaG91bGQgYmUgc2V0IHRvIHRoZSBzZW1pY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgcHJpbmNpcGFsIFB5dGhvbiBsaWJyYXJ5IAotZGlyZWN0b3JpZXMuCi1JIHVzZToKLSAgU0VUIFBZVEhPTkhPTUU9RjovUHl0aG9uMjYKLSAgU0VUIFBZVEhPTlBBVEg9RjovUHl0aG9uMjYvTGliO0Y6L1B5dGhvbjI2L0xpYi9wbGF0LW9zMmVteDsKLSAgICAgICAgICAgICAgICAgRjovUHl0aG9uMjYvTGliL2xpYi1keW5sb2FkO0Y6L1B5dGhvbjI2L0xpYi9zaXRlLXBhY2thZ2VzCi0KLU5PVEUhOiAgdGhlIFBZVEhPTlBBVEggc2V0dGluZyBhYm92ZSBpcyBsaW5ld3JhcHBlZCBmb3IgdGhpcyBkb2N1bWVudCAtIGl0IAotc2hvdWxkIGFsbCBiZSBvbiBvbmUgbGluZSBpbiBDT05GSUcuU1lTIQotCi1JZiB5b3Ugd2lzaCB0byB1c2UgdGhlIGN1cnNlcyBtb2R1bGUsIHlvdSBzaG91bGQgc2V0IHRoZSBURVJNIGFuZCBURVJNSU5GTyAKLWVudmlyb25tZW50IHZhcmlhYmxlcyBhcHByb3ByaWF0ZWx5LgotCi1JZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIG5jdXJzZXMgaW5zdGFsbGVkLCBJIGhhdmUgaW5jbHVkZWQgYSBjb3B5IG9mIHRoZSAKLUVNWCBzdWJzZXQgb2YgdGhlIFRlcm1pbmZvIGRhdGFiYXNlIGluY2x1ZGVkIHdpdGggdGhlIG5jdXJzZXMtNS4yIHNvdXJjZSAKLWRpc3RyaWJ1dGlvbi4gIFRoaXMgY2FuIGJlIHVzZWQgYnkgc2V0dGluZyB0aGUgVEVSTUlORk8gZW52aXJvbm1lbnQgdmFyaWFibGUgCi10byB0aGUgcGF0aCBvZiB0aGUgVGVybWluZm8gc3ViZGlyZWN0b3J5IGJlbG93IHRoZSBQeXRob24gaG9tZSBkaXJlY3RvcnkuCi1PbiBteSBzeXN0ZW0gdGhpcyBsb29rcyBsaWtlOgotICBTRVQgVEVSTUlORk89RjovUHl0aG9uMjYvVGVybWluZm8KLQotRm9yIHRoZSBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlLCBJIHdvdWxkIHRyeSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgU0VUIFRFUk09YW5zaQotICBTRVQgVEVSTT1vczIKLSAgU0VUIFRFUk09d2luZG93Ci0KLVlvdSB3aWxsIGhhdmUgdG8gcmVib290IHlvdXIgc3lzdGVtIGZvciB0aGVzZSBjaGFuZ2VzIHRvIENPTkZJRy5TWVMgdG8gdGFrZSAKLWVmZmVjdC4KLQotSWYgeW91IHdpc2ggdG8gY29tcGlsZSBhbGwgdGhlIGluY2x1ZGVkIFB5dGhvbiBsaWJyYXJ5IG1vZHVsZXMgdG8gYnl0ZWNvZGUsIAoteW91IGNhbiBjaGFuZ2UgaW50byB0aGUgUHl0aG9uIGhvbWUgZGlyZWN0b3J5IGFuZCBydW4gdGhlIENPTVBJTEVBTEwuQ01EIAotYmF0Y2ggZmlsZS4KLQotWW91IGNhbiBleGVjdXRlIHRoZSByZWdyZXNzaW9uIHRlc3RzIGluY2x1ZGVkIHdpdGggdGhlIFB5dGhvbiAyLjYgc291cmNlIAotZGlzdHJpYnV0aW9uIGJ5IGNoYW5naW5nIHRvIHRoZSBQeXRob24gMi42IGhvbWUgZGlyZWN0b3J5IGFuZCBleGVjdXRpbmcgdGhlIAotUkVHUlRFU1QuQ01EIGJhdGNoIGZpbGUuICBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBrbm93biB0byBmYWlsIGF0IHRoaXMgCi10aW1lOgotLSB0ZXN0X21obGliIChJIGRvbid0IGtub3cgb2YgYW55IHBvcnQgb2YgTUggdG8gT1MvMik7Ci0tIHRlc3Rfc3RycHRpbWUgKHNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMjIpOwotLSB0ZXN0X3RpbWUgKHNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMjIpOwotLSB0ZXN0X3Bvc2l4cGF0aCAoc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAyMykuCi0KLU5vdGUgdGhhdCBzb21lIG9mIHRoZSBuZXR3b3JrIHJlbGF0ZWQgdGVzdHMgZXhwZWN0IHRoZSBsb29wYmFjayBpbnRlcmZhY2UKLShpbnRlcmZhY2UgImxvIiwgd2l0aCBJUCBhZGRyZXNzIDEyNy4wLjAuMSkgdG8gYmUgZW5hYmxlZCwgd2hpY2ggZnJvbSBteQotZXhwZXJpZW5jZSBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gIEFkZGl0aW9uYWxseSwgdGVzdF9wb3BlbjIKLWV4cGVjdHMgdGhlICJjYXQiIHV0aWxpdHkgKHN1Y2ggYXMgZm91bmQgaW4gcG9ydHMgb2YgdGhlIEdOVSB0b29scykgdG8KLWJlIGluc3RhbGxlZC4KLQotCi1CdWlsZGluZyBmcm9tIHNvdXJjZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2l0aCB0aGUgRU1YIHBvcnQgbm93IGNoZWNrZWQgaW50byBQeXRob24ncyBDVlMgcmVwb3NpdG9yeSwgdGhlIGJ1aWxkIAotaW5mcmFzdHJ1Y3R1cmUgaXMgcGFydCBvZiB0aGUgUHl0aG9uIHJlbGVhc2Ugc291cmNlYmFsbC4KLQotUHJlcmVxdWlzaXRlcwotCi1GaXJzdCBhbmQgZm9yZW1vc3QsIHlvdSBuZWVkIGFuIG9wZXJhdGlvbmFsIEVNWCBkZXZlbG9wbWVudCBpbnN0YWxsYXRpb24gLSAKLUVNWCB2MC45ZCB3aXRoIGZpeDA0ICh0aGUgbGF0ZXN0IGF0IHRpbWUgb2Ygd3JpdGluZykgJiB0aGUgZ2NjIDIuOC4xIAotY29tcGlsZXIgcmVsZWFzZWQgYnkgRWJlcmhhcmQgTWF0dGVzIGlzIHRoZSByZWNvbW1lbmRlZCBzZXR1cC4KLQotSWYgeW91IGhhdmUgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBnY2MgaW5zdGFsbGVkLCBzZWUgIllPVSBIQVZFIEJFRU4gCi1XQVJORUQiIGl0ZW0gMTYuCi0KLU90aGVyIGl0ZW1zIG9mIHNvZnR3YXJlIHJlcXVpcmVkOi0KLQotLSBHTlUgbWFrZSAoSSdtIHVzaW5nIHYzLjc2LjEpCi0tIHJtLCBjcCwgbWtkaXIgZnJvbSB0aGUgR05VIGZpbGUgdXRpbGl0aWVzIHBhY2thZ2UKLS0gR05VIGZpbmQKLS0gR05VIHNlZAotCi1Qcm9jZWR1cmUKLQotMC4gYWxsIGNoYW5nZXMgbWVudGlvbmVkIGFwcGx5IHRvIGZpbGVzIGluIHRoZSBQQy9vczJlbXggc3ViZGlyZWN0b3J5IAotICAgb2YgdGhlIFB5dGhvbiByZWxlYXNlIHNvdXJjZSB0cmVlLiAgbWFrZSBpcyBhbHNvIGV4ZWN1dGVkIGZyb20gdGhpcyAKLSAgIGRpcmVjdG9yeSwgc28gY2hhbmdlIGludG8gdGhpcyBkaXJlY3RvcnkgYmVmb3JlIHByb2NlZWRpbmcuCi0KLTEuIGRlY2lkZSBpZiB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uLgotICAgSWYgeW91IHdpc2ggdG8gZG8gdGhpcywgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgTElCX0RJUiAKLSAgIHRvIHRoZSBkaXJlY3RvcnkgeW91IHdpc2ggdG8gdXNlIGZvciBQWVRIT05IT01FIAotICAgKGVnIC91c3IvbG9jYWwvbGliL3B5dGhvbjIuNikuCi0KLSAgIElmIHlvdSB3YW50IFB5dGhvbiB0byBmaW5kIGl0cyBsaWJyYXJ5IHdpdGhvdXQgdGhlIFBZVEhPTkhPTUUgCi0gICBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQsIHNldCB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIAotICAgRklYRURfUFlIT01FIHRvICJ5ZXMiICh1bmNvbW1lbnQgdGhlIGFwcHJvcHJpYXRlIGxpbmUpLgotCi0yLiBJZiB5b3Ugd2lzaCB0aGUgUHl0aG9uIGV4ZWN1dGFibGVzIChweXRob24uZXhlLCBweXRob25wbS5leGUgJiBwZ2VuLmV4ZSkgCi0gICB0byBiZSBpbnN0YWxsZWQgaW4gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgUFlUSE9OSE9NRSBkaXJlY3RvcnksIHNldCAKLSAgIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgRVhFX0RJUiB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5LgotCi0zLiBJZiB5b3Ugd2lzaCB0aGUgUHl0aG9uIGNvcmUgRExMIChweXRob24zMy5kbGwpIHRvIGJlIGluc3RhbGxlZCBpbiBhIAotICAgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgUHl0aG9uIGV4ZWN1dGFibGVzIGFyZSAKLSAgIGluc3RhbGxlZCAoYnkgZGVmYXVsdCwgdGhlIFBZVEhPTkhPTUUgZGlyZWN0b3J5KSwgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgCi0gICBNYWtlZmlsZSB2YXJpYWJsZSBETExfRElSIHRvIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkuICBUaGlzIERMTCBtdXN0IAotICAgYmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5IG9uIHRoZSBzeXN0ZW0ncyBMSUJQQVRILCBvciB0aGF0IGdldHMgc2V0IAotICAgd2l0aCBCRUdJTkxJQlBBVEggb3IgRU5ETElCUEFUSC4KLQotNC4gSWYgeW91IGhhdmUgaW5zdGFsbGVkIGFueSBvZiB0aGUgbGlicmFyaWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQgCi0gICBvcHRpb25hbCBQeXRob24gbW9kdWxlcywgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgcmVsZXZhbnQgSEFWRV88cGFja2FnZT4gCi0gICBNYWtlZmlsZSB2YXJpYWJsZSB0byAieWVzIi4gIFRoZSBNYWtlZmlsZSBjdXJyZW50bHkgc3VwcG9ydHM6Ci0KLSAgIGxpYnJhcnkgICAgICAgICAgICAgICBNYWtlZmlsZSB2YXJpYWJsZQotICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgemxpYiAoMS4xLjQpICAgICAgICAgIEhBVkVfWkxJQgotICAgR05VIFVsdHJhRmFzdCBDcnlwdCAgIEhBVkVfVUZDCi0gICBUY2wvVGsgICAgICAgICAgICAgICAgSEFWRV9UQ0xUSyAobm90IGtub3duIHRvIHdvcmspCi0gICBHTlUgUmVhZGxpbmUgICAgICAgICAgSEFWRV9HUkVBRExJTkUKLSAgIG5jdXJzZXMgICAgICAgICAgICAgICBIQVZFX05DVVJTRVMKLSAgIEdOVSBnZGJtICAgICAgICAgICAgICBIQVZFX0dEQk0KLSAgIGxpYmJ6MiAgICAgICAgICAgICAgICBIQVZFX0JaMgotICAgT3BlblNTTCAgICAgICAgICAgICAgIEhBVkVfT1BFTlNTTAotCi0gICBQbGVhc2Ugbm90ZSB0aGF0IHlvdSBuZWVkIHRvIGNoZWNrIHRoYXQgd2hhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgCi0gICBpcyBjb21wYXRpYmxlIHdpdGggUHl0aG9uJ3MgYnVpbGQgb3B0aW9ucy4gIEluIHBhcnRpY3VsYXIsIHRoZSAKLSAgIEJTRCBEQiB2MS44NSBsaWJyYXJ5IG5lZWRzIHRvIGJlIHJlYnVpbHQgd2l0aCBhIHNvdXJjZSBwYXRjaCBmb3IgCi0gICBtdWx0aXRocmVhZCBzdXBwb3J0IChkb2Vzbid0IGNoYW5nZSB0aGUgbGlicmFyeSdzIHJlZW50cmFudCBzdGF0dXMgCi0gICBidXQgYWxsb3dzIGl0IHRvIGJlIGxpbmtlZCB0byBQeXRob24gd2hpY2ggaXMgbXVsdGl0aHJlYWRlZCkuICAKLSAgIFdpZGVseSBhdmFpbGFibGUgYmluYXJ5IHBhY2thZ2VzIG9mIG90aGVyIGxpYnJhcnlzICYgRExMcyBhcmUgCi0gICBub3QgYnVpbHQvbGlua2VkIHdpdGggbXVsdGl0aHJlYWQgc3VwcG9ydC4gIEJld2FyZSEKLQotICAgQWxzbyBub3RlIHRoYXQgdGhlIE1ha2VmaWxlIGN1cnJlbnRseSBleHBlY3RzIGFueSBsaWJyYXJpZXMgdG8gYmUgCi0gICBmb3VuZCB3aXRoIHRoZSBkZWZhdWx0IGxpYnJhcnkgc2VhcmNoIHBhdGguICBZb3UgbWF5IG5lZWQgdG8gYWRkIAotICAgLUwgc3dpdGNoZXMgdG8gdGhlIExERkxBR1MgTWFrZWZpbGUgdmFyaWFibGUgaWYgeW91IGhhdmUgaW5zdGFsbGVkIAotICAgbGlicmFyaWVzIGluIGRpcmVjdG9yaWVzIG5vdCBpbiB0aGUgZGVmYXVsdCBzZWFyY2ggcGF0aCAod2hpY2ggY2FuIAotICAgYmUgY29udHJvbGxlZCBieSB0aGUgTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHVzZWQgYnkgRU1YKS4KLQotNS4gbWFrZQotCi0gICBJdCBpcyB1c3VhbGx5IGEgZ29vZCBpZGVhIHRvIHJlZGlyZWN0IHRoZSBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zIAotICAgb2YgdGhlIG1ha2UgcHJvY2VzcyB0byBsb2cgZmlsZXMsIHNvIHRoYXQgeW91IGNhbiByZXZpZXcgYW55IG1lc3NhZ2VzLiAKLQotNi4gbWFrZSB0ZXN0Ci0KLSAgIFRoaXMgcnVucyB0aGUgUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMsIGFuZCBjb21wbGV0aW9uIGlzIGEgc2lnbiBvZiAKLSAgIGEgdXNhYmxlIGJ1aWxkLiAgWW91IHNob3VsZCBjaGVjayB0aGUgbGlzdCBvZiBza2lwcGVkIG1vZHVsZXMgdG8gCi0gICBlbnN1cmUgdGhhdCBhbnkgb3B0aW9uYWwgbW9kdWxlcyB5b3Ugc2VsZWN0ZWQgaGF2ZSBiZWVuIGJ1aWx0OyAKLSAgIGNoZWNraW5nIHRoZSBsaXN0IG9mIGZhaWx1cmVzIGFnYWluc3QgdGhlIGxpc3Qgb2Yga25vd24gZmFpbHVyZXMgCi0gICBlbHNld2hlcmUgaW4gdGhpcyBkb2N1bWVudCBpcyBhbHNvIHBydWRlbnQuCi0KLTcuIG1ha2UgaW5zdGFsbAotICAgPj4+Pj4+IE5PVCBZRVQgQ09NUExFVEUgPDw8PDw8IAotCi04LiBjaGFuZ2UgdG8gYSBkaXJlY3Rvcnkgb3V0c2lkZSB0aGUgUHl0aG9uIHNvdXJjZSB0cmVlIGFuZCBzdGFydCBQeXRob24uIAotICAgQ2hlY2sgdGhlIHZlcnNpb24gYW5kIGJ1aWxkIGRhdGUgdG8gY29uZmlybSBzYXRpc2ZhY3RvcnkgaW5zdGFsbGF0aW9uLgotCi0KLVlPVSBIQVZFIEJFRU4gV0FSTkVEISEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSSBrbm93IGFib3V0IGEgbnVtYmVyIG9mIG5hc3RpZXMgaW4gdGhpcyBwb3J0LgotCi0xLiAgRWJlcmhhcmQgTWF0dGVzLCBhdXRob3Igb2YgRU1YLCB3cml0ZXMgaW4gaGlzIGRvY3VtZW50YXRpb24gdGhhdCBmb3JrKCkgCi1pcyB2ZXJ5IGluZWZmaWNpZW50IGluIHRoZSBPUy8yIGVudmlyb25tZW50LiAgSXQgYWxzbyByZXF1aXJlcyB0aGF0IHRoZSAKLWV4ZWN1dGFibGUgYmUgbGlua2VkIGluIGEub3V0IGZvcm1hdCByYXRoZXIgdGhhbiBPTUYuICBVc2UgdGhlIG9zLmV4ZWMgCi1hbmQvb3IgdGhlIG9zLnNwYXduIGZhbWlseSBvZiBmdW5jdGlvbnMgd2hlcmUgcG9zc2libGUuCi0KLTIuICBJbiB0aGUgYWJzZW5jZSBvZiBHTlUgUmVhZGxpbmUsIHRlcm1pbmF0aW5nIHRoZSBpbnRlcnByZXRlciByZXF1aXJlcyBhIAotY29udHJvbC1aICheWikgZm9sbG93ZWQgYnkgYSBjYXJyaWFnZSByZXR1cm4uICBKZWZmIFJ1c2ggZG9jdW1lbnRlZCB0aGlzIAotcHJvYmxlbSBpbiBoaXMgUHl0aG9uIDEuNS4yIHBvcnQuICBXaXRoIFJlYWRsaW5lLCBhIGNvbnRyb2wtRCAoXkQpIHdvcmtzIAotYXMgcGVyIHRoZSBzdGFuZGFyZCBVbml4IGVudmlyb25tZW50LgotCi0zLiAgRU1YIG9ubHkgaGFzIGEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBmY250bCgpLiAgVGhlIGZjbnRsIG1vZHVsZSAKLWluIHRoaXMgcG9ydCBzdXBwb3J0cyB3aGF0IEVNWCBzdXBwb3J0cy4gIElmIGZjbnRsIGlzIGltcG9ydGFudCB0byB5b3UsIAotcGxlYXNlIHJldmlldyB0aGUgRU1YIEMgTGlicmFyeSBSZWZlcmVuY2UgKGluY2x1ZGVkIGluIC5JTkYgZm9ybWF0IGluIHRoZSAKLUVNWFZJRVcuWklQIGFyY2hpdmUgYXMgcGFydCBvZiB0aGUgY29tcGxldGUgRU1YIGRldmVsb3BtZW50IHRvb2xzIHN1aXRlKS4KLUJlY2F1c2Ugb2Ygb3RoZXIgc2lkZS1lZmZlY3RzIEkgaGF2ZSBtb2RpZmllZCB0aGUgdGVzdF9mY250bC5weSB0ZXN0IAotc2NyaXB0IHRvIGRlYWN0aXZhdGUgdGhlIGV4ZXJjaXNpbmcgb2YgdGhlIG1pc3NpbmcgZnVuY3Rpb25hbGl0eS4KLQotNC4gIFRoZSByZWFkbGluZSBtb2R1bGUgaGFzIGJlZW4gbGlua2VkIGFnYWluc3QgbmN1cnNlcyByYXRoZXIgdGhhbiB0aGUgCi10ZXJtY2FwIGxpYnJhcnkgc3VwcGxpZWQgd2l0aCBFTVguCi0KLTUuICBJIGhhdmUgY29uZmlndXJlZCB0aGlzIHBvcnQgdG8gdXNlICIvIiBhcyB0aGUgcHJlZmVycmVkIHBhdGggc2VwYXJhdG9yIAotY2hhcmFjdGVyLCByYXRoZXIgdGhhbiAiXCIgKCdcXCcpLCBpbiBsaW5lIHdpdGggdGhlIGNvbnZlbnRpb24gc3VwcG9ydGVkIAotYnkgRU1YLiAgQmFja3NsYXNoZXMgYXJlIHN0aWxsIHN1cHBvcnRlZCBvZiBjb3Vyc2UsIGFuZCBzdGlsbCBhcHBlYXIgaW4gCi11bmV4cGVjdGVkIHBsYWNlcyBkdWUgdG8gb3V0c2lkZSBzb3VyY2VzIHRoYXQgZG9uJ3QgZ2V0IG5vcm1hbGlzZWQuCi0KLTYuICBXaGlsZSB0aGUgRGlzdFV0aWxzIGNvbXBvbmVudHMgYXJlIG5vdyBmdW5jdGlvbmFsLCBvdGhlciAKLXBhY2thZ2luZy9iaW5hcnkgaGFuZGxpbmcgdG9vbHMgYW5kIHV0aWxpdGllcyBzdWNoIGFzIHRob3NlIGluY2x1ZGVkIGluCi10aGUgRGVtbyBhbmQgVG9vbHMgZGlyZWN0b3JpZXMgLSBmcmVlemUgaW4gcGFydGljdWxhciAtIGFyZSB1bmxpa2VseSB0byAKLXdvcmsuICBJZiB5b3UgZG8gZ2V0IHRoZW0gZ29pbmcsIEknZCBsaWtlIHRvIGtub3cgYWJvdXQgeW91ciBzdWNjZXNzLgotCi03LiAgSSBoYXZlbid0IHNldCBvdXQgdG8gc3VwcG9ydCB0aGUgW0JFR0lOfEVORF1MSUJQQVRIIGZ1bmN0aW9uYWxpdHkgCi1zdXBwb3J0ZWQgYnkgb25lIG9mIHRoZSBlYXJsaWVyIHBvcnRzIChSdXNoJ3M/PykuICBJZiBpdCB3b3JrcyBsZXQgbWUga25vdy4KLQotOC4gQXMgYSByZXN1bHQgb2YgdGhlIGxpbWl0YXRpb25zIGltcG9zZWQgYnkgRU1YJ3MgbGlicmFyeSByb3V0aW5lcywgdGhlIAotc3RhbmRhcmQgZXh0ZW5zaW9uIG1vZHVsZSBwd2Qgb25seSBzeW50aGVzaXNlcyBhIHNpbXBsZSBwYXNzd2QgZGF0YWJhc2UsIAotYW5kIHRoZSBncnAgbW9kdWxlIGNhbm5vdCBiZSBzdXBwb3J0ZWQgYXQgYWxsLgotCi1JIGhhdmUgd3JpdHRlbiBwdXJlIFB5dGhvbiBzdWJzdGl0dXRlcyBmb3IgcHdkIGFuZCBncnAsIHdoaWNoIGNhbiBwcm9jZXNzIAotcmVhbCBwYXNzd2QgYW5kIGdyb3VwIGZpbGVzIGZvciB0aG9zZSBhcHBsaWNhdGlvbnMgKHN1Y2ggYXMgTWFpbE1hbikgdGhhdCAKLXJlcXVpcmUgbW9yZSB0aGFuIEVNWCBlbXVsYXRlcy4gIEkgaGF2ZSBwbGFjZWQgcHdkLnB5IGFuZCBncnAucHkgaW4gCi1MaWIvcGxhdC1vczJlbXgsIHdoaWNoIGlzIHVzdWFsbHkgYmVmb3JlIExpYi9saWItZHlubG9hZCAod2hpY2ggY29udGFpbnMgCi1wd2QucHlkKSBpbiB0aGUgUFlUSE9OUEFUSC4gIElmIHlvdSBoYXZlIGJlY29tZSBhdHRhY2hlZCB0byB3aGF0IHB3ZC5weWQgCi1zdXBwb3J0cywgeW91IGNhbiBwdXQgTGliL2xpYi1keW5sb2FkIGJlZm9yZSBMaWIvcGxhdC1vczJlbXggaW4gUFlUSE9OUEFUSCAKLW9yIGRlbGV0ZS9yZW5hbWUgcHdkLnB5ICYgZ3JwLnB5LgotCi1wd2QucHkgJiBncnAucHkgc3VwcG9ydCBsb2NhdGluZyB0aGVpciBkYXRhIGZpbGVzIGJ5IGxvb2tpbmcgaW4gdGhlIAotZW52aXJvbm1lbnQgZm9yIHRoZW0gaW4gdGhlIGZvbGxvd2luZyBzZXF1ZW5jZToKLXB3ZC5weTogICRFVENfUEFTU1dEICAgICAgICAgICAgICglRVRDX1BBU1NXRCUpCi0gICAgICAgICAkRVRDL3Bhc3N3ZCAgICAgICAgICAgICAoJUVUQyUvcGFzc3dkKQotICAgICAgICAgJFBZVEhPTkhPTUUvRXRjL3Bhc3N3ZCAgKCVQWVRIT05IT01FJS9FdGMvcGFzc3dkKQotZ3JwLnB5OiAgJEVUQ19HUk9VUCAgICAgICAgICAgICAgKCVFVENfR1JPVVAlKQotICAgICAgICAgJEVUQy9ncm91cCAgICAgICAgICAgICAgKCVFVEMlL2dyb3VwKQotICAgICAgICAgJFBZVEhPTkhPTUUvRXRjL2dyb3VwICAgKCVQWVRIT05IT01FJS9FdGMvZ3JvdXApCi0KLVRoZSBFVENfUEFTU1dEIGFuZCBFVENfR1JPVVAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyAKLXN1cHBvcnQgZm9yIG11bHRpcGxlIHBhc3N3ZC9ncnAgZmlsZXMsIHdoZXJlIG90aGVyIGFwcGxpY2F0aW9ucyBtYXkgbm90IAotc3VwcG9ydCBhcyB3aWRlIGEgdmFyaWV0eSBvZiBpbnB1dCB2YXJpYXRpb25zIChkcml2ZSByZW1hcHBpbmdzLCAKLXNlcGFyYXRvcnMgZXRjKS4KLQotQm90aCBtb2R1bGVzIHN1cHBvcnQgdXNpbmcgZWl0aGVyIHRoZSAiOiIgY2hhcmFjdGVyIChVbml4IHN0YW5kYXJkKSBvciAKLSI7IiAoT1MvMiwgRE9TLCBXaW5kb3dzIHN0YW5kYXJkKSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBhbmQgcHdkLnB5IAotaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGRyaXZlIGxldHRlciBjb252ZXJzaW9ucyBmb3IgdGhlIGhvbWVfZGlyZWN0b3J5IGFuZCAKLXNoZWxsIGZpZWxkcyAoZm9yIHRoZSAiOiIgc2VwYXJhdG9yIG9ubHkpOgotICAgICAgICAgJHggIC0+ICB4OgotICAgICAgICAgeDsgIC0+ICB4OgotCi1FeGFtcGxlIHZlcnNpb25zIG9mIHBhc3N3ZCBhbmQgZ3JvdXAgYXJlIGluIHRoZSBFdGMgc3ViZGlyZWN0b3J5LiAgVGhlIAotcmVncmVzc2lvbiB0ZXN0cyAodGVzdF9wd2QgYW5kIHRlc3RfZ3JwKSB3aWxsIGZhaWwgaWYgdmFsaWQgcGFzc3dvcmQgYW5kIAotZ3JvdXAgZmlsZXMgY2Fubm90IGJlIGZvdW5kLCBidXQgc2hvdWxkIHBhc3Mgb3RoZXJ3aXNlLgotCi1CZSBhd2FyZSB0aGF0IFB5dGhvbidzIHB3ZCAmIGdyb3VwIG1vZHVsZXMgYXJlIGZvciByZWFkaW5nIHBhc3N3b3JkIGFuZCAKLWdyb3VwIGluZm9ybWF0aW9uIG9ubHkuCi0KLTExLiBFTVgncyB0ZXJtaW9zIHJvdXRpbmVzIGRvbid0IHN1cHBvcnQgYWxsIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG5vdyAKLWV4cG9zZWQgYnkgdGhlIHRlcm1pb3MgbW9kdWxlIC0gcmVmZXIgdG8gdGhlIEVNWCBkb2N1bWVudGF0aW9uIHRvIGZpbmQgCi1vdXQgd2hhdCBpcyBzdXBwb3J0ZWQuCi0KLTEyLiBUaGUgY2FzZSBzZW5zaXRpdmUgaW1wb3J0IHNlbWFudGljcyBpbnRyb2R1Y2VkIGluIFB5dGhvbiAyLjEgZm9yIG90aGVyIAotY2FzZSBpbnNlbnNpdGl2ZSBidXQgY2FzZSBwcmVzZXJ2aW5nIGZpbGUvb3BlcmF0aW5nIHN5c3RlbXMgKFdpbmRvd3MgZXRjKSwgCi1oYXZlIGJlZW4gaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBwb3J0LCBhbmQgYXJlIGFjdGl2ZSBieSBkZWZhdWx0LiAgU2V0dGluZyAKLXRoZSBQWVRIT05DQVNFT0sgZW52aXJvbm1lbnQgdmFyaWFibGUgKHRvIGFueSB2YWx1ZSkgcmV2ZXJ0cyB0byB0aGUgCi1wcmV2aW91cyAoY2FzZSBpbnNlbnNpdGl2ZSkgc2VtYW50aWNzLiAgVGhpcyBjYW4gYmUgYW4gaXNzdWUgd2l0aCBzb21lIAotZmlsZSBtYW5hZ2VtZW50IHV0aWxpdGllcyB0aGF0IGRvIG5vdCBwcmVzZXJ2ZSB0aGUgY2FzZSBvZiBmaWxlIGFuZAotZGlyZWN0b3J5IG5hbWVzLgotCi0xMy4gQmVjYXVzZSBJIGFtIHN0YXRpY2FsbHkgbGlua2luZyBuY3Vyc2VzLCB0aGUgX2N1cnNlc19wYW5lbCAKLW1vZHVsZSBoYXMgcG90ZW50aWFsIHByb2JsZW1zIGFyaXNpbmcgZnJvbSBzZXBhcmF0ZSBsaWJyYXJ5IGRhdGEgYXJlYXMuCi1UbyBhdm9pZCB0aGlzLCBJIGhhdmUgY29uZmlndXJlZCB0aGUgX2N1cnNlc18ucHlkIChpbXBvcnRlZCBhcyAKLSJfY3Vyc2VzX3BhbmVsIikgdG8gaW1wb3J0IHRoZSBuY3Vyc2VzIHN5bWJvbHMgaXQgbmVlZHMgZnJvbSBfY3Vyc2VzLmRsbCAKLSh3aGljaCBpcyB0aGUgY3Vyc2VzIG1vZHVsZSwgYnV0IHdpdGggYSAuZGxsIGV4dGVuc2lvbiByYXRoZXIgdGhhbiAucHlkIAotc28gdGhhdCB0aGUgZHluYW1pYyBsb2FkZXIgY2FuIGFjdHVhbGx5IGltcG9ydCB0aGUgc3ltYm9scyBmcm9tIGl0IGFzIGEgCi1ETEwpLgotCi1UaGUgc2l0ZSBtb2R1bGUgKExpYi9zaXRlLnB5KSBoYXMgY29kZSBhZGRlZCB0byB0d2VhayBCRUdJTkxJQlBBVEggc28KLXRoYXQgX2N1cnNlcy5kbGwgaXMgZm91bmQgd2hlbiBfY3Vyc2VzX3BhbmVsIGlzIGltcG9ydGVkLiAgSWYgeW91IGhhdmUKLXByb2JsZW1zIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBfY3Vyc2VzX3BhbmVsIHN1cHBvcnQgcGxlYXNlIGxldCBtZSBrbm93LAotYW5kIEknbGwgaGF2ZSBhbm90aGVyIGxvb2sgYXQgdGhpcy4KLQotMTQuIHN5cy5wbGF0Zm9ybSByZXBvcnRzICJvczJlbXgiIGluc3RlYWQgb2YgIm9zMiIuICBvcy5uYW1lIHN0aWxsIAotcmVwb3J0cyAib3MyIi4gIFRoaXMgY2hhbmdlIHdhcyB0byBtYWtlIGl0IGVhc2llciB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIAotdGhlIFZBQysrIGJ1aWxkIChmb3JtZXJseSBtYWludGFpbmVkIGJ5IE1pY2hhZWwgTXVsbGVyKSBhbmQgdGhlIEVNWCBidWlsZCAKLSh0aGlzIHBvcnQpLCBwcmluY2lwYWxseSBmb3IgRGlzdFV0aWxzLgotCi0xNS4gaXQgYXBwZWFycyB0aGF0IHRoZSAlVyBzdWJzdGl0dXRpb24gaW4gdGhlIEVNWCBzdHJmdGltZSgpIHJvdXRpbmUgaGFzIAotYW4gb2ZmLWJ5LW9uZSBidWcuICBzdHJmdGltZSB3YXMgbGlzdGVkIGFzIHBhc3NpbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgCi1pbiBwcmV2aW91cyByZWxlYXNlcywgYnV0IHRoaXMgZmFjdCBhcHBlYXJzIHRvIGhhdmUgYmVlbiBhbiBvdmVyc2lnaHQgaW4gCi10aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLiAgVG8gZml4IHRoaXMgcmVhbGx5IHJlcXVpcmVzIGEgcG9ydGFibGUgCi1zdHJmdGltZSByb3V0aW5lIC0gSSdtIGxvb2tpbmcgaW50byB1c2luZyBvbmUgZnJvbSBGcmVlQlNELCBidXQgaXRzIG5vdCAKLXJlYWR5IHlldC4KLQotMTYuIEkgaGF2ZSBzdWNjZXNzZnVsbHkgYnVpbHQgdGhpcyBwb3J0IHdpdGggQW5keSBaYWJvbG90bnkncyBwb3J0cyBvZiAKLXBnY2MgMi45NSBhbmQgZ2NjIDMuMi4xLCBpbiBhZGRpdGlvbiB0byBFTSdzIGdjYyAyLjguMS4KLQotSSBoYXZlIG5vdCBhdHRlbXB0ZWQgdG8gY29tcGlsZSBQeXRob24gd2l0aCBhbnkgdmVyc2lvbiBvZiBnY2MgcHJpb3IgdG8gCi12Mi44LjEuCi0KLVRoaXMgcmVsZWFzZSBzZWVzIHRoZSBkZWZhdWx0IG9wdGltaXNhdGlvbiBjaGFuZ2UgdG8gCi0iLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tcHJvYmUiLiAgVGhpcyB3b3JrcyBmaW5lIHRvbyBmb3IgcGdjYyAyLjk1IAotYnV0IG5vdCBmb3IgZ2NjIDMuMi4xLgotCi1XaXRoIGdjYyAzLjIuMSwgLU8zIGNhdXNlcyAyIHVuZXhwZWN0ZWQgdGVzdCBmYWlsdXJlczogdGVzdF9mb3JtYXQgYW5kIAotdGVzdF91bmljb2RlLiAgQm90aCB0aGVzZSB0ZXN0cyBwYXNzIGlmIC1PMiBpcyBpbnN0ZWFkIG9mIC1PMyB3aXRoIHRoaXMgCi1jb21waWxlciwgYW5kIHRoZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGlzIG5lZ2xpZ2libGUgKGluIGNvbnRyYXN0IHRvIAotZ2NjIDIuOC4xIGFuZCBwZ2NjIDIuOTUsIHdoZXJlIHRoZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIAotMiBvcHRpbWlzYXRpb24gc2V0dGluZ3MgYXBwcm9hY2hlcyAxMCUpLgotCi0xNy4gIG9zLnNwYXdudigpIGFuZCBvcy5zcGF3bnZlKCkgZXhwb3NlIEVNWCdzIGxpYnJhcnkgcm91dGluZXMgcmF0aGVyIAotdGhhbiB1c2UgdGhlIGVtdWxhdGlvbiBpbiBvcy5weS4KLQotSW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2Ygc29tZSBvZiB0aGUgZmVhdHVyZXMgdGhpcyBtYWtlcyBhdmFpbGFibGUgaW4gCi10aGUgT1MvMiBlbnZpcm9ubWVudCwgeW91IHNob3VsZCBwZXJ1c2UgdGhlIHJlbGV2YW50IEVNWCBkb2N1bWVudGF0aW9uIAotKEVNWExJQi5JTkYgaW4gdGhlIEVNWFZJRVcuWklQIGFyY2hpdmUgYWNjb21wYW55aW5nIHRoZSBFTVggYXJjaGl2ZXMgCi1vbiBIb2JiZXMgb3IgTEVPKS4gIEJlIGF3YXJlIHRoYXQgSSBoYXZlIGV4cG9zZWQgYWxsIHRoZSAibW9kZSIgb3B0aW9ucyAKLXN1cHBvcnRlZCBieSBFTVgsIGJ1dCB0aGVyZSBhcmUgY29tYmluYXRpb25zIHRoYXQgZWl0aGVyIGNhbm5vdCBiZSAKLXByYWN0aWNhbGx5IHVzZWQgYnkvaW4gUHl0aG9uIG9yIGhhdmUgdGhlIHBvdGVudGlhbCB0byBjb21wcm9taXNlIHlvdXIgCi1zeXN0ZW0ncyBzdGFiaWxpdHkuCi0KLTE4LiAgcHl0aG9ucG0uZXhlIHVzZWQgdG8gYmUganVzdCBweXRob24uZXhlIHdpdGggdGhlIFdJTkRPV0FQSSBsaW5rZXIgCi1vcHRpb24gc2V0IGluIHRoZSBweXRob25wbS5kZWYgZmlsZS4gIEluIHByYWN0aWNlLCB0aGlzIHR1cm5zIG91dCB0byBkbyAKLW5vdGhpbmcgdXNlZnVsLgotCi1JIGhhdmUgd3JpdHRlbiBhIHJlcGxhY2VtZW50IHdoaWNoIHdyYXBzIHRoZSBQeXRob24gRExMIGluIGEgZ2VudWluZSAKLVByZXNlbnRhdGlvbiBNYW5hZ2VyIGFwcGxpY2F0aW9uLiAgVGhpcyB2ZXJzaW9uIGFjdHVhbGx5IHJ1bnMgdGhlIAotUHl0aG9uIGludGVycHJldGVyIGluIGEgc2VwYXJhdGUgdGhyZWFkIGZyb20gdGhlIFBNIHNoZWxsLCBpbiBvcmRlciAKLXRoYXQgUHl0aG9uUE0gaGFzIGEgZnVuY3Rpb25pbmcgbWVzc2FnZSBxdWV1ZSBhcyBnb29kIFBNIGFwcHMgc2hvdWxkLgotSW4gaXRzIGN1cnJlbnQgc3RhdGUsIFB5dGhvblBNJ3Mgd2luZG93IGlzIGhpZGRlbi4gIEl0IGNhbiBiZSBkaXNwbGF5ZWQsIAotYWx0aG91Z2ggaXQgd2lsbCBoYXZlIG5vIGNvbnRlbnQgYXMgbm90aGluZyBpcyBldmVyIHdyaXR0ZW4gdG8gdGhlIAotd2luZG93LiAgT25seSB0aGUgImhpZGUiIGJ1dHRvbiBpcyBhdmFpbGFibGUuICBBbHRob3VnaCB0aGUgY29kZSAKLWhhcyBzdXBwb3J0IGZvciBzaHV0dGluZyBQeXRob25QTSBkb3duIHdoZW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyAKLXN0aWxsIGJ1c3kgKHZpYSB0aGUgImNvbnRyb2wiIG1lbnUpLCB0aGlzIGlzIG5vdCB3ZWxsIHRlc3RlZCBhbmQgZ2l2ZW4gCi1jb21tZW50cyBJJ3ZlIGNvbWUgYWNyb3NzIGluIEVNWCBkb2N1bWVudGF0aW9uIHN1Z2dlc3RpbmcgdGhhdCB0aGUgCi10aHJlYWQga2lsbGluZyBvcGVyYXRpb24gaGFzIHByb2JsZW1zIEkgd291bGQgc3VnZ2VzdCBjYXV0aW9uIGluIAotcmVseWluZyBvbiB0aGlzIGNhcGFiaWxpdHkuCi0KLVB5dGhvblBNIHByb2Nlc3NlcyBjb21tYW5kbGluZSBwYXJhbWV0ZXJzIG5vcm1hbGx5LiAgVGhlIHN0YW5kYXJkIGlucHV0LCAKLW91dHB1dCBhbmQgZXJyb3Igc3RyZWFtcyBhcmUgb25seSB1c2VmdWwgaWYgcmVkaXJlY3RlZCwgYXMgUHl0aG9uUE0ncyAKLXdpbmRvdyBpcyBub3QgYSBjb25zb2xlIGluIGFueSBmb3JtIGFuZCBzbyBjYW5ub3QgYWNjZXB0IG9yIGRpc3BsYXkgCi1hbnl0aGluZy4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgLWkgb3B0aW9uIGlzIGluZWZmZWN0aXZlLgotCi1CZWNhdXNlIHRoZSBQeXRob24gdGhyZWFkIGRvZXNuJ3QgY3JlYXRlIGl0cyBvd24gbWVzc2FnZSBxdWV1ZSwgY3JlYXRpbmcgCi1QTSBXaW5kb3dzIGFuZCBwZXJmb3JtaW5nIG1vc3QgUE0gb3BlcmF0aW9ucyBpcyBub3QgcG9zc2libGUgZnJvbSB3aXRoaW4gCi10aGlzIHRocmVhZC4gIEhvdyB0aGlzIHdpbGwgYWZmZWN0IHN1cHBvcnRpbmcgUE0gZXh0ZW5zaW9ucyAoc3VjaCBhcyAKLVRraW50ZXIgdXNpbmcgYSBQTSBwb3J0IG9mIFRjbC9Uaywgb3Igd3hQeXRob24gdXNpbmcgdGhlIFBNIHBvcnQgb2YgCi1XeFdpbmRvd3MpIGlzIHN0aWxsIGJlaW5nIHJlc2VhcmNoZWQuCi0KLU5vdGUgdGhhdCBvcy5mb3JrKCkgX0RPRVNfTk9UX1dPUktfIGluIFB5dGhvblBNIC0gU1lTMzE3NXMgYXJlIHRoZSByZXN1bHQgCi1vZiB0cnlpbmcuICBvcy5zcGF3bnYoKSBfZG9lc18gd29yay4gIFB5dGhvblBNIHBhc3NlcyBhbGwgcmVncmVzc2lvbiB0ZXN0cyAKLXRoYXQgdGhlIHN0YW5kYXJkIFB5dGhvbiBpbnRlcnByZXRlciAocHl0aG9uLmV4ZSkgcGFzc2VzLCB3aXRoIHRoZSBleGNlcHRpb24gCi1vZiB0ZXN0X2ZvcmsxIGFuZCB0ZXN0X3NvY2tldCB3aGljaCBib3RoIGF0dGVtcHQgdG8gdXNlIG9zLmZvcmsoKS4KLQotSSB2ZXJ5IG11Y2ggd2FudCBmZWVkYmFjayBvbiB0aGUgcGVyZm9ybWFuY2UsIGJlaGF2aW91ciBhbmQgdXRpbGl0eSBvZiAKLVB5dGhvblBNLiAgSSB3b3VsZCBsaWtlIHRvIGFkZCBhIFBNIGNvbnNvbGUgY2FwYWJpbGl0eSB0byBpdCwgYnV0IHRoYXQgCi13aWxsIGJlIGEgbm9uLXRyaXZpYWwgZWZmb3J0LiAgSSBtYXkgYmUgYWJsZSB0byBsZXZlcmFnZSB0aGUgY29kZSBpbiAKLUlsbHlhIFZhZXMnIFRjbC9UayBwb3J0LCB3aGljaCB3b3VsZCBtYWtlIGl0IGVhc2llci4KLQotMTkuICBvcy5jaGRpcigpIHVzZXMgRU1YJ3MgX2NoZGlyMigpLCB3aGljaCBzdXBwb3J0cyBjaGFuZ2luZyBib3RoIGRyaXZlIAotYW5kIGRpcmVjdG9yeSBhdCBvbmNlLiAgU2ltaWxhcmx5LCBvcy5nZXRjd2QoKSB1c2VzIEVNWCdzIF9nZXRjd2QoKSAKLXdoaWNoIHJldHVybnMgZHJpdmUgYXMgd2VsbCBhcyBwYXRoLgotCi0yMC4gIHB5Y29uZmlnLmggaXMgaW5zdGFsbGVkIGluIHRoZSBJbmNsdWRlIHN1YmRpcmVjdG9yeSB3aXRoIGFsbCAKLW90aGVyIGluY2x1ZGUgZmlsZXMuCi0KLTIxLiAgdGhlIGRlZmF1bHQgYnVpbGQgZXhwbGljaXRseSBzZXRzIHRoZSBudW1iZXIgb2YgZmlsZSBoYW5kbGVzIAotYXZhaWxhYmxlIHRvIGEgUHl0aG9uIHByb2Nlc3MgdG8gMjUwLiAgRU1YIGRlZmF1bHQgaXMgNDAsIHdoaWNoIGlzIAotaW5zdWZmaWNpZW50IGZvciB0aGUgdGVtcGZpbGUgcmVncmVzc2lvbiB0ZXN0ICh0ZXN0X3RlbXBmaWxlKSB3aGljaCAKLXRyaWVzIHRvIGNyZWF0ZSAxMDAgdGVtcG9yYXJ5IGZpbGVzLgotCi1UaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gdmlhIHRoZSBFTVhPUFQgZW52aXJvbm1lbnQgdmFyaWFibGU6Ci0gIHNldCBFTVhPUFQ9LWgyNTAKLWlzIGVxdWl2YWxlbnQgdG8gdGhlIHNldHRpbmcgY3VycmVudGx5IHVzZWQuICBUaGUgZW14YmluZCB1dGlsaXR5IChpZiB5b3UgCi1oYXZlIGl0IGluc3RhbGxlZCkgY2FuIGFsc28gYmUgdXNlZCB0byBwZXJtYW5lbnRseSBjaGFuZ2UgdGhlIHNldHRpbmcgaW4gCi1weXRob24uZXhlIC0gcGxlYXNlIHJlZmVyIHRvIHRoZSBFTVggZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotMjIuICBhIHB1cmUgcHl0aG9uIHN0cnB0aW1lIG1vZHVsZSBpcyBub3cgcGFydCBvZiB0aGUgUHl0aG9uIHN0YW5kYXJkCi1saWJyYXJ5LCBzdXBlcmNlZGluZyBhIHBsYXRmb3JtIHNwZWNpZmljIGV4dGVuc2lvbiBtb2R1bGUuIFRoaXMgbW9kdWxlCi1sZXZlcmFnZXMgdGhlIHN0cmZ0aW1lIG1vZHVsZSwgYW5kIGFzIGEgcmVzdWx0IHRlc3Rfc3RycHRpbWUgZmFpbHMKLWR1ZSB0byB0aGUgRU1YIHN0cmZ0aW1lIGJ1ZyBpbiBpdGVtIDIwIGFib3ZlLgotCi0yMy4gIHRlc3RfcG9zaXhwYXRoIGF0dGVtcHRzIHRvIGV4ZXJjaXNlIHZhcmlvdXMgUG9zaXggcGF0aCByZWxhdGVkCi1mdW5jdGlvbmFsaXR5LiAgTW9zdCBvZiB0aGUgc3ViLXRlc3RzIHBhc3MsIGJ1dCB0aGUgImlzbW91bnQiIGFuZAotInNhbWVzdGF0IiBzdWJ0ZXN0cyBmYWlsOgotLSBFTVggcHJvdmlkZXMgbm90IHNhdGlzZmFjdG9yeSBtb3VudCBwb2ludCBlbXVsYXRpb24sIHNvICJpc21vdW50IgotICBjYW5ub3Qgc3VjY2VlZDsKLS0gRU1YIGRvY3VtZW50cyB0aGF0IHN1Y2Nlc3NpdmUgc3RhdCgpIGNhbGxzIHdpbGwgcHJvZHVjZSBkaWZmZXJlbnQKLSAgcmVzdWx0cywgc28gInNhbWVzdGF0IiBjYW5ub3Qgc3VjY2VlZC4KLQotdGVzdF9wb3NpeHBhdGggc2hvdWxkIHNraXAgdGhlc2UgdGVzdHMgb24gRU1YLgotCi0yNC4gIEkgaGF2ZSByZXBvcnRzIG9mIEJpdFRvcnJlbnQgbm90IHdvcmtpbmcuICBJdCBhcHBlYXJzIHRoYXQgdGhlCi1FTVggc2VsZWN0KCkgZW11bGF0aW9uLCBwb3NzaWJseSBpbiBjb25jZXJ0IHdpdGggYnVncyBpbiB0aGUgVENQL0lQCi1zdGFjaywgcnVucyBpbnRvIHByb2JsZW1zIHVuZGVyIHRoZSBzdHJlc3MgaW1wb3NlZCBieSB0aGlzIGFwcGxpY2F0aW9uLgotSSB0aGluayBpdCBzdWZmaWNlcyB0byBzYXkgdGhhdCBCaXRUb3JyZW50IGlzIGEgZmFpciBzdHJlc3MgdGVzdCBvZiBhCi1zeXN0ZW0ncyBuZXR3b3JraW5nIGNhcGFiaWxpdHkuCi0KLTI1LiAgSW4gdGhlIGFic2VuY2Ugb2YgYW4gRU1YIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaW5rKCkgZnVuY3Rpb24sIEkndmUgCi1pbXBsZW1lbnRlZCBhIGNydWRlIFB5dGhvbiBlbXVsYXRpb24sIGluIHRoZSBmaWxlIAotTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weS4gIFRoaXMgaXMgaW1wb3J0ZWQgaW50byB0aGUgb3MgbW9kdWxlLCBhbmQgCi1iZWNvbWVzIGF2YWlsYWJsZSBhcyBvcy5saW5rKCkgaW4gdGhlIG5vcm1hbCB3YXkuCi0KLVRoZSBlbXVsYXRpb24gY29waWVzIHRoZSBzb3VyY2UgZmlsZSBpbiBiaW5hcnkgbW9kZSwgYW5kIHdpbGwgZmFpbCBpZiAKLWRpc2sgc3BhY2UgaXMgZXhoYXVzdGVkLiBUaGUgY2FsbCBmYWlscyBpZiB0aGUgdGFyZ2V0IGFscmVhZHkgZXhpc3RzLiAKLVRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRvIHRocmVhZCBzYWZldHkgd2l0aCB0aGlzIGVtdWxhdGlvbiAtIGJld2FyZSEKLQotVGhlIGVtdWxhdGlvbiB3YXMgd3JpdHRlbiB0byBzdXBwb3J0IGEgbGluaygpIGJhc2VkIGZpbGUgbG9ja2luZyBzeXN0ZW0gCi11c2VkIGluIEdOVSBNYWlsbWFuLgotCi0yNi4gIEFGX1VOSVggc29ja2V0cywgb3RoZXJ3aXNlIGtub3duIGFzIFVuaXggZG9tYWluIHNvY2tldHMsIGFyZSBub3cKLXN1cHBvcnRlZC4gIFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBzb21lIHRyYXBzIGFyaXNpbmcgZnJvbSB0aGUKLWltcGxlbWVudGF0aW9uIGluIElCTSdzIFRDUC9JUCBzdGFjazotCi0tIHRoZSBwYXRoIG5hbWUgbXVzdCBzdGFydCB3aXRoICdcXHNvY2tldFxcJyAoJy9zb2NrZXQvJyB3b24ndCB3b3JrISksCi0gIHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgZnVsbCBwYXRoIG5hbWUgbGVzcyB0aGFuIDEwOCBjaGFyYWN0ZXJzOwotLSB1bmxpa2UgVW5peCwgdGhlIHNvY2tldCBlbmRwb2ludHMgZG9uJ3QgZXhpc3QgaW4gdGhlIGZpbGVzeXN0ZW07Ci0tIGJ5IGRlZmF1bHQsIHNvY2tldHMgYXJlIGluIGJpbmFyeSBtb2RlLgotCi0yNy4gIEFzIG9mIFB5dGhvbiAyLjQsIHRoZSBtcHosIHJvdG9yIGFuZCB4cmVhZGxpbmVzIG1vZHVsZXMgaGF2ZSBiZWVuIAotZHJvcHBlZCBmcm9tIHRoZSBQeXRob24gc291cmNlIHRyZWUuCi0KLTI4LiAgVGhlIHN1YnByb2Nlc3MgbW9kdWxlIHdhcyBhZGRlZCB0byB0aGUgc3RhbmRhcmQgbGlicmFyeSByZWxhdGl2ZWx5Ci1sYXRlIGluIHRoZSAyLjQgZGV2ZWxvcG1lbnQgY3ljbGUuICBVbmZvcnR1bmF0ZWx5IEkgaGF2ZW4ndCBoYWQgdGhlCi1yb3VuZCB0dWl0cyB0byBhZGFwdCB0aGUgbW9kdWxlIHRvIHRoZSBFTVggZW52aXJvbm1lbnQgeWV0LCBhbmQKLXRlc3Rfc3VicHJvY2VzcyBoYXMgYSBudW1iZXIgb2YgZmFpbHVyZXMgYXMgYSByZXN1bHQuCi0KLTI5LiAgVGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3IgdGhyZWFkcyBoYXMgYmVlbiA2NGsuICBUaGlzIGlzIHByb3ZpbmcKLWluc3VmZmljaWVudCBmb3Igc29tZSBjb2RlYmFzZXMsIHN1Y2ggYXMgWm9wZS4gIFRoZSB0aHJlYWQgc3RhY2sgc2l6ZQotc3RpbGwgZGVmYXVsdHMgdG8gNjRrLCBidXQgdGhpcyBjYW4gbm93IGJlIGluY3JlYXNlZCB2aWEgdGhlIHN0YWNrX3NpemUoKQotZnVuY3Rpb24gZXhwb3NlZCBieSB0aGUgdGhyZWFkaW5nICYgdGhyZWFkIG1vZHVsZXMgYXMgd2VsbCBhcyBieSBkZWZpbmluZwotVEhSRUFEX1NUQUNLX1NJWkUgdG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUgaW4gdGhlIE1ha2VmaWxlICh3aGljaCBjb250YWlucwotYSBjb21tZW50ZWQgb3V0IGRlZmluaXRpb24gZm9yIDEyOGtCIHRocmVhZCBzdGFja3MpLiAgSSBoYXZlIHNlZW4KLXJlZmVyZW5jZXMgdG8gaGVhdnkgWm9wZS9QbG9uZSB1c2FnZSByZXF1aXJpbmcgMU1CIHRocmVhZCBzdGFja3Mgb24KLUZyZWVCU0QgYW5kIExpbnV4LCBidXQgZG91YnQgdGhhdCBmb3IgbW9zdCBsaWtlbHkgdXNhZ2Ugb24gT1MvMiB0aGF0Ci1tb3JlIHRoYW4gMjU2a0IgaXMgbmVjZXNzYXJ5LiAgVGhlIHNpemUgb2YgdGhlIHJlcXVpcmVkIHN0YWNrcyAobWFpbiAKLWFuZCB0aHJlYWQpIGNhbiB2YXJ5IHNpZ25pZmljYW50bHkgZGVwZW5kaW5nIG9uIHdoaWNoIHZlcnNpb24gb2YgZ2NjCi1pcyB1c2VkIGFsb25nIHdpdGggdGhlIGNvbXBpbGVyIG9wdGltaXNhdGlvbnMgc2VsZWN0ZWQuICBOb3RlIHRoYXQgdGhlCi1tYWluIHRocmVhZCBzdGFjayBzaXplIGlzIHNldCBkdXJpbmcgbGlua2luZyBhbmQgaXMgY3VycmVudGx5IDJNQi4KLQotLi4uIHByb2JhYmx5IG90aGVyIGlzc3VlcyB0aGF0IEkndmUgbm90IGVuY291bnRlcmVkLCBvciBkb24ndCByZW1lbWJlciA6LSgKLQotSWYgeW91IGVuY291bnRlciBvdGhlciBkaWZmaWN1bHRpZXMgd2l0aCB0aGlzIHBvcnQsIHdoaWNoIGNhbiBiZSAKLWNoYXJhY3RlcmlzZWQgYXMgcGVjdWxpYXIgdG8gdGhpcyBwb3J0IHJhdGhlciB0aGFuIHRvIHRoZSBQeXRob24gcmVsZWFzZSwKLUkgd291bGQgbGlrZSB0byBoZWFyIGFib3V0IHRoZW0uICBIb3dldmVyIEkgY2Fubm90IHByb21pc2UgdG8gYmUgYWJsZSB0byBkbyAKLWFueXRoaW5nIHRvIHJlc29sdmUgc3VjaCBwcm9ibGVtcy4gIFNlZSB0aGUgQ29udGFjdCBzZWN0aW9uIGJlbG93Li4uCi0KLQotVG8gZG8uLi4KLS0tLS0tLS0tCi0KLUluIG5vIHBhcnRpY3VsYXIgb3JkZXIgb2YgYXBwYXJlbnQgaW1wb3J0YW5jZSBvciBsaWtlbGlob29kLi4uCi0KLS0gc3VwcG9ydCBUa2ludGVyIGFuZC9vciBhbHRlcm5hdGl2ZSBHVUkgKHd4V2luZG93cz8/KQotCi0KLUNyZWRpdHMKLS0tLS0tLS0KLQotSW4gYWRkaXRpb24gdG8gcGVvcGxlIGlkZW50aWZpZWQgYWJvdmUsIEknZCBsaWtlIHRvIHRoYW5rOgotLSB0aGUgQkRGTCwgR3VpZG8gdmFuIFJvc3N1bSwgYW5kIGNyZXcgZm9yIFB5dGhvbjsKLS0gRHIgRGF2aWQgTWVydHosIGZvciB0cnlpbmcgb3V0IGEgcHJlLXJlbGVhc2Ugb2YgdGhpcyBwb3J0OwotLSB0aGUgUHl0aG9uLWxpc3QvY29tcC5sYW5nLnB5dGhvbiBjb21tdW5pdHk7Ci0tIEpvaG4gUG9sdG9yYWssIGZvciBpbnB1dCBhYm91dCBwd2QvZ3JwLgotCi1Db250YWN0Ci0tLS0tLS0tCi0KLUNvbnN0cnVjdGl2ZSBmZWVkYmFjaywgbmVnYXRpdmUgb3IgcG9zaXRpdmUsIGFib3V0IHRoaXMgcG9ydCBpcyB3ZWxjb21lIAotYW5kIHNob3VsZCBiZSBhZGRyZXNzZWQgdG8gbWUgYXQgdGhlIGUtbWFpbCBhZGRyZXNzZXMgYmVsb3cuCi0KLUkgaGF2ZSBhIHByaXZhdGUgbWFpbGluZyBsaXN0IGZvciBhbm5vdW5jZW1lbnRzIG9mIGZpeGVzICYgdXBkYXRlcyB0byAKLXRoaXMgcG9ydC4gIElmIHlvdSB3aXNoIHRvIHJlY2VpdmUgc3VjaCBlLW1haWwgYW5ub3VuY21lbnRzLCBwbGVhc2Ugc2VuZCAKLW1lIGFuIGUtbWFpbCByZXF1ZXN0aW5nIHRoYXQgeW91IGJlIGFkZGVkIHRvIHRoaXMgbGlzdC4KLQotQW5kcmV3IE1hY0ludHlyZQotRS1tYWlsOiBhbmR5bWFjQGJ1bGxzZXllLmFwYW5hLm9yZy5hdSwgb3IgYW5keW1hY0BwY3VnLm9yZy5hdQotV2ViOiAgICBodHRwOi8vd3d3LmFuZHltYWMub3JnLwotCi0yOCBKYW51YXJ5LCAyMDA4LgpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2NvbmZpZy5jIGIvUEMvb3MyZW14L2NvbmZpZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODc5MTEwLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9jb25maWcuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKiAtKi0gQyAtKi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAxOTkxLTE5OTUgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0sCi1UaGUgTmV0aGVybGFuZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKLUNlbnRydW0gb3IgQ1dJIG9yIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcyBvcgotQ05SSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi1wZXJtaXNzaW9uLgotCi1XaGlsZSBDV0kgaXMgdGhlIGluaXRpYWwgc291cmNlIGZvciB0aGlzIHNvZnR3YXJlLCBhIG1vZGlmaWVkIHZlcnNpb24KLWlzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMKLShDTlJJKSBhdCB0aGUgSW50ZXJuZXQgYWRkcmVzcyBmdHA6Ly9mdHAucHl0aG9uLm9yZy4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEFORCBDTlJJIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEgKLVJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NICi1DRU5UUlVNIE9SIENOUkkgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi1QUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgotVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgotUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNb2R1bGUgY29uZmlndXJhdGlvbiAqLwotCi0vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHRhYmxlIG9mIGJ1aWx0LWluIG1vZHVsZXMuCi0gICBTZWUgaW5pdF9idWlsdGluKCkgaW4gaW1wb3J0LmMuICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotZXh0ZXJuIHZvaWQgaW5pdG9zMigpOwotZXh0ZXJuIHZvaWQgaW5pdHNpZ25hbCgpOwotI2lmZGVmIFdJVEhfVEhSRUFECi1leHRlcm4gdm9pZCBpbml0X3RocmVhZCgpOwotI2VuZGlmCi1leHRlcm4gdm9pZCBpbml0X2NvZGVjcygpOwotZXh0ZXJuIHZvaWQgaW5pdF9jc3YoKTsKLWV4dGVybiB2b2lkIGluaXRfbG9jYWxlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3JhbmRvbSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9zcmUoKTsKLWV4dGVybiB2b2lkIGluaXRfc3ltdGFibGUoKTsKLWV4dGVybiB2b2lkIGluaXRfd2Vha3JlZigpOwotZXh0ZXJuIHZvaWQgaW5pdGFycmF5KCk7Ci1leHRlcm4gdm9pZCBpbml0YmluYXNjaWkoKTsKLWV4dGVybiB2b2lkIGluaXRjb2xsZWN0aW9ucygpOwotZXh0ZXJuIHZvaWQgaW5pdGNtYXRoKCk7Ci1leHRlcm4gdm9pZCBpbml0ZGF0ZXRpbWUoKTsKLWV4dGVybiB2b2lkIGluaXRkbCgpOwotZXh0ZXJuIHZvaWQgaW5pdGVycm5vKCk7Ci1leHRlcm4gdm9pZCBpbml0ZmNudGwoKTsKLWV4dGVybiB2b2lkIGluaXRfZnVuY3Rvb2xzKCk7Ci1leHRlcm4gdm9pZCBpbml0X2hlYXBxKCk7Ci1leHRlcm4gdm9pZCBpbml0aW1hZ2VvcCgpOwotZXh0ZXJuIHZvaWQgaW5pdGl0ZXJ0b29scygpOwotZXh0ZXJuIHZvaWQgaW5pdG1hdGgoKTsKLWV4dGVybiB2b2lkIGluaXRfbWQ1KCk7Ci1leHRlcm4gdm9pZCBpbml0b3BlcmF0b3IoKTsKLWV4dGVybiB2b2lkIGluaXRfc2hhKCk7Ci1leHRlcm4gdm9pZCBpbml0X3NoYTI1NigpOwotZXh0ZXJuIHZvaWQgaW5pdF9zaGE1MTIoKTsKLWV4dGVybiB2b2lkIGluaXRfc3RydWN0KCk7Ci1leHRlcm4gdm9pZCBpbml0dGVybWlvcygpOwotZXh0ZXJuIHZvaWQgaW5pdHRpbWUoKTsKLWV4dGVybiB2b2lkIGluaXR4eHN1YnR5cGUoKTsKLWV4dGVybiB2b2lkIGluaXR6aXBpbXBvcnQoKTsKLSNpZiAhSEFWRV9EWU5BTUlDX0xPQURJTkcKLWV4dGVybiB2b2lkIGluaXRfY3Vyc2VzKCk7Ci1leHRlcm4gdm9pZCBpbml0X2N1cnNlc19wYW5lbCgpOwotZXh0ZXJuIHZvaWQgaW5pdF90ZXN0Y2FwaSgpOwotZXh0ZXJuIHZvaWQgaW5pdGJ6MigpOwotZXh0ZXJuIHZvaWQgaW5pdGZwZWN0bCgpOwotZXh0ZXJuIHZvaWQgaW5pdGZwZXRlc3QoKTsKLWV4dGVybiB2b2lkIGluaXRwYXJzZXIoKTsKLWV4dGVybiB2b2lkIGluaXRwd2QoKTsKLWV4dGVybiB2b2lkIGluaXR1bmljb2RlZGF0YSgpOwotZXh0ZXJuIHZvaWQgaW5pdHpsaWIoKTsKLSNpZmRlZiBVU0VfU09DS0VUCi1leHRlcm4gdm9pZCBpbml0X3NvY2tldCgpOwotZXh0ZXJuIHZvaWQgaW5pdHNlbGVjdCgpOwotI2VuZGlmCi0jZW5kaWYKLS8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMSAtLSAqLwotCi1leHRlcm4gdm9pZCBQeU1hcnNoYWxfSW5pdCgpOwotZXh0ZXJuIHZvaWQgaW5pdGltcCgpOwotZXh0ZXJuIHZvaWQgaW5pdGdjKCk7Ci0KLXN0cnVjdCBfaW5pdHRhYiBfUHlJbXBvcnRfSW5pdHRhYltdID0gewotCi0gICAgeyJvczIiLCBpbml0b3MyfSwKLSAgICB7InNpZ25hbCIsIGluaXRzaWduYWx9LAotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgeyJfdGhyZWFkIiwgaW5pdF90aHJlYWR9LAotI2VuZGlmCi0gICAgeyJfY29kZWNzIiwgaW5pdF9jb2RlY3N9LAotICAgIHsiX2NzdiIsIGluaXRfY3N2fSwKLSAgICB7Il9sb2NhbGUiLCBpbml0X2xvY2FsZX0sCi0gICAgeyJfcmFuZG9tIiwgaW5pdF9yYW5kb219LAotICAgIHsiX3NyZSIsIGluaXRfc3JlfSwKLSAgICB7Il9zeW10YWJsZSIsIGluaXRfc3ltdGFibGV9LAotICAgIHsiX3dlYWtyZWYiLCBpbml0X3dlYWtyZWZ9LAotICAgIHsiYXJyYXkiLCBpbml0YXJyYXl9LAotICAgIHsiYmluYXNjaWkiLCBpbml0YmluYXNjaWl9LAotICAgIHsiY29sbGVjdGlvbnMiLCBpbml0Y29sbGVjdGlvbnN9LAotICAgIHsiY21hdGgiLCBpbml0Y21hdGh9LAotICAgIHsiZGF0ZXRpbWUiLCBpbml0ZGF0ZXRpbWV9LAotICAgIHsiZGwiLCBpbml0ZGx9LAotICAgIHsiZXJybm8iLCBpbml0ZXJybm99LAotICAgIHsiZmNudGwiLCBpbml0ZmNudGx9LAotICAgIHsiX2Z1bmN0b29scyIsIGluaXRfZnVuY3Rvb2xzfSwKLSAgICB7Il9oZWFwcSIsIGluaXRfaGVhcHF9LAotICAgIHsiaW1hZ2VvcCIsIGluaXRpbWFnZW9wfSwKLSAgICB7Iml0ZXJ0b29scyIsIGluaXRpdGVydG9vbHN9LAotICAgIHsibWF0aCIsIGluaXRtYXRofSwKLSAgICB7Im9wZXJhdG9yIiwgaW5pdG9wZXJhdG9yfSwKLSAgICB7Il9zaGEyNTYiLCBpbml0X3NoYTI1Nn0sCi0gICAgeyJfc2hhNTEyIiwgaW5pdF9zaGE1MTJ9LAotICAgIHsiX3N0cnVjdCIsIGluaXRfc3RydWN0fSwKLSAgICB7InRlcm1pb3MiLCBpbml0dGVybWlvc30sCi0gICAgeyJ0aW1lIiwgaW5pdHRpbWV9LAotICAgIHsieHhzdWJ0eXBlIiwgaW5pdHh4c3VidHlwZX0sCi0gICAgeyJ6aXBpbXBvcnQiLCBpbml0emlwaW1wb3J0fSwKLSNpZiAhSEFWRV9EWU5BTUlDX0xPQURJTkcKLSAgICB7Il9jdXJzZXMiLCBpbml0X2N1cnNlc30sCi0gICAgeyJfY3Vyc2VzX3BhbmVsIiwgaW5pdF9jdXJzZXNfcGFuZWx9LAotICAgIHsiX3Rlc3RjYXBpIiwgaW5pdF90ZXN0Y2FwaX0sCi0gICAgeyJiejIiLCBpbml0YnoyfSwKLSAgICB7ImZwZWN0bCIsIGluaXRmcGVjdGx9LAotICAgIHsiZnBldGVzdCIsIGluaXRmcGV0ZXN0fSwKLSAgICB7InBhcnNlciIsIGluaXRwYXJzZXJ9LAotICAgIHsicHdkIiwgaW5pdHB3ZH0sCi0gICAgeyJ1bmljb2RlZGF0YSIsIGluaXR1bmljb2RlZGF0YX0sCi0gICAgeyJ6bGliIiwgaW5pdHpsaWJ9LAotI2lmZGVmIFVTRV9TT0NLRVQKLSAgICB7Il9zb2NrZXQiLCBpbml0X3NvY2tldH0sCi0gICAgeyJzZWxlY3QiLCBpbml0c2VsZWN0fSwKLSNlbmRpZgotI2VuZGlmCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDIgLS0gKi8KLQotICAgIC8qIFRoaXMgbW9kdWxlICJsaXZlcyBpbiIgd2l0aCBtYXJzaGFsLmMgKi8KLSAgICB7Im1hcnNoYWwiLCBQeU1hcnNoYWxfSW5pdH0sCi0KLSAgICAvKiBUaGlzIGxpdmVzIGl0IHdpdGggaW1wb3J0LmMgKi8KLSAgICB7Il9pbXAiLCBpbml0aW1wfSwKLQotICAgIC8qIFRoZXNlIGVudHJpZXMgYXJlIGhlcmUgZm9yIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcyAqLwotICAgIHsiYnVpbHRpbnMiLCBOVUxMfSwKLSAgICB7InN5cyIsIE5VTEx9LAotCi0gICAgLyogVGhpcyBsaXZlcyBpbiBnY21vZHVsZS5jICovCi0gICAgeyJnYyIsIGluaXRnY30sCi0KLSAgICAvKiBTZW50aW5lbCAqLwotICAgIHswLCAwfQotfTsKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9kbGZjbi5jIGIvUEMvb3MyZW14L2RsZmNuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZGE5Y2QuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2RsZmNuLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotLyogLSotIEMgLSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgMTk5MS0xOTk1IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCi1DZW50cnVtIG9yIENXSSBvciBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgb3IKLUNOUkkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotcGVybWlzc2lvbi4KLQotV2hpbGUgQ1dJIGlzIHRoZSBpbml0aWFsIHNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSwgYSBtb2RpZmllZCB2ZXJzaW9uCi1pcyBtYWRlIGF2YWlsYWJsZSBieSB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzCi0oQ05SSSkgYXQgdGhlIEludGVybmV0IGFkZHJlc3MgZnRwOi8vZnRwLnB5dGhvbi5vcmcuCi0KLVNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBBTkQgQ05SSSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRICi1SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSAotQ0VOVFJVTSBPUiBDTlJJIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgZGxvcGVuKCkgLSBVbml4LWxpa2UgZHluYW1pYyBsaW5raW5nCi0gKiBlbXVsYXRpb24gZnVuY3Rpb25zIGZvciBPUy8yIHVzaW5nIERvc0xvYWRNb2R1bGUoKSBhbmQgY29tcGFueS4KLSAqLwotCi0jZGVmaW5lIElOQ0xfRE9TCi0jZGVmaW5lIElOQ0xfRE9TRVJST1JTCi0jZGVmaW5lIElOQ0xfRE9TU0VTTUdSCi0jZGVmaW5lIElOQ0xfV0lOUFJPR1JBTUxJU1QKLSNkZWZpbmUgSU5DTF9XSU5GUkFNRU1HUgotI2luY2x1ZGUgPG9zMi5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX3RyYWNrX3JlYyB7Ci0gICAgY2hhciAqbmFtZTsKLSAgICBITU9EVUxFIGhhbmRsZTsKLSAgICB2b2lkICppZDsKLSAgICBzdHJ1Y3QgX3RyYWNrX3JlYyAqbmV4dDsKLX0gdERMTGNoYWluLCAqRExMY2hhaW47Ci0KLXN0YXRpYyBETExjaGFpbiBkbGxvYWQgPSBOVUxMOyAgLyogQSBzaW1wbGUgY2hhaW5lZCBsaXN0IG9mIERMTCBuYW1lcyAqLwotc3RhdGljIGNoYXIgZGxlcnIgWzI1Nl07ICAgICAgICAvKiBsYXN0IGVycm9yIHRleHQgc3RyaW5nICovCi1zdGF0aWMgdm9pZCAqbGFzdF9pZDsKLQotc3RhdGljIERMTGNoYWluIGZpbmRfaWQodm9pZCAqaWQpCi17Ci0gICAgRExMY2hhaW4gdG1wOwotCi0gICAgZm9yICh0bXAgPSBkbGxvYWQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQotICAgICAgICBpZiAoaWQgPT0gdG1wLT5pZCkKLSAgICAgICAgICAgIHJldHVybiB0bXA7Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogbG9hZCBhIGR5bmFtaWMtbGluayBsaWJyYXJ5IGFuZCByZXR1cm4gaGFuZGxlICovCi12b2lkICpkbG9wZW4oY2hhciAqZmlsZW5hbWUsIGludCBmbGFncykKLXsKLSAgICBITU9EVUxFIGhtOwotICAgIERMTGNoYWluIHRtcDsKLSAgICBjaGFyIGVyclsyNTZdOwotICAgIGNoYXIgKmVycnR4dDsKLSAgICBpbnQgcmMgPSAwLCBzZXRfY2hhaW4gPSAwOwotCi0gICAgZm9yICh0bXAgPSBkbGxvYWQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQotICAgICAgICBpZiAoc3RybmljbXAodG1wLT5uYW1lLCBmaWxlbmFtZSwgOTk5KSA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICBpZiAoIXRtcCkKLSAgICB7Ci0gICAgICAgIHRtcCA9IChETExjaGFpbikgbWFsbG9jKHNpemVvZih0RExMY2hhaW4pKTsKLSAgICAgICAgaWYgKCF0bXApCi0gICAgICAgICAgICBnb3RvIG5vbWVtOwotICAgICAgICB0bXAtPm5hbWUgPSBzdHJkdXAoZmlsZW5hbWUpOwotICAgICAgICB0bXAtPm5leHQgPSBkbGxvYWQ7Ci0gICAgICAgIHNldF9jaGFpbiA9IDE7Ci0gICAgfQotCi0gICAgc3dpdGNoIChyYyA9IERvc0xvYWRNb2R1bGUoKFBTWikmZXJyLCBzaXplb2YoZXJyKSwgZmlsZW5hbWUsICZobSkpCi0gICAgewotICAgICAgICBjYXNlIE5PX0VSUk9SOgotICAgICAgICAgICAgdG1wLT5oYW5kbGUgPSBobTsKLSAgICAgICAgICAgIGlmIChzZXRfY2hhaW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZG8KLSAgICAgICAgICAgICAgICAgICAgbGFzdF9pZCsrOwotICAgICAgICAgICAgICAgIHdoaWxlICgobGFzdF9pZCA9PSAwKSB8fCAoZmluZF9pZChsYXN0X2lkKSkpOwotICAgICAgICAgICAgICAgIHRtcC0+aWQgPSBsYXN0X2lkOwotICAgICAgICAgICAgICAgIGRsbG9hZCA9IHRtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0bXAtPmlkOwotICAgICAgICBjYXNlIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EOgotICAgICAgICBjYXNlIEVSUk9SX1BBVEhfTk9UX0ZPVU5EOgotICAgICAgICAgICAgZXJydHh0ID0gIm1vZHVsZSBgJXMnIG5vdCBmb3VuZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTOgotICAgICAgICBjYXNlIEVSUk9SX05PVF9FTk9VR0hfTUVNT1JZOgotICAgICAgICBjYXNlIEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEOgotbm9tZW06Ci0gICAgICAgICAgICBlcnJ0eHQgPSAib3V0IG9mIHN5c3RlbSByZXNvdXJjZXMiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfQUNDRVNTX0RFTklFRDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJhY2Nlc3MgZGVuaWVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0JBRF9GT1JNQVQ6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9TRUdNRU5UX05VTUJFUjoKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX09SRElOQUw6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9NT0RVTEVUWVBFOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfRVhFX1NJR05BVFVSRToKLSAgICAgICAgY2FzZSBFUlJPUl9FWEVfTUFSS0VEX0lOVkFMSUQ6Ci0gICAgICAgIGNhc2UgRVJST1JfSVRFUkFURURfREFUQV9FWENFRURTXzY0SzoKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX01JTkFMTE9DU0laRToKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX1NFR0RQTDoKLSAgICAgICAgY2FzZSBFUlJPUl9BVVRPREFUQVNFR19FWENFRURTXzY0SzoKLSAgICAgICAgY2FzZSBFUlJPUl9SRUxPQ1NSQ19DSEFJTl9FWENFRURTX1NFR0xJTUlUOgotICAgICAgICAgICAgZXJydHh0ID0gImludmFsaWQgbW9kdWxlIGZvcm1hdCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX05BTUU6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiZmlsZW5hbWUgZG9lc24ndCBtYXRjaCBtb2R1bGUgbmFtZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjoKLSAgICAgICAgY2FzZSBFUlJPUl9MT0NLX1ZJT0xBVElPTjoKLSAgICAgICAgICAgIGVycnR4dCA9ICJzaGFyaW5nIHZpb2xhdGlvbiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9JTklUX1JPVVRJTkVfRkFJTEVEOgotICAgICAgICAgICAgZXJydHh0ID0gIm1vZHVsZSBpbml0aWFsaXphdGlvbiBmYWlsZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiY2F1c2UgYCVzJywgZXJyb3IgY29kZSA9ICVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzbnByaW50ZihkbGVyciwgc2l6ZW9mKGRsZXJyKSwgZXJydHh0LCAmZXJyLCByYyk7Ci0gICAgaWYgKHRtcCkKLSAgICB7Ci0gICAgICAgIGlmICh0bXAtPm5hbWUpCi0gICAgICAgICAgICBmcmVlKHRtcC0+bmFtZSk7Ci0gICAgICAgIGZyZWUodG1wKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGBzeW1ib2wnIGluIERMTCAqLwotdm9pZCAqZGxzeW0odm9pZCAqaGFuZGxlLCBjaGFyICpzeW1ib2wpCi17Ci0gICAgaW50IHJjID0gMDsKLSAgICBQRk4gYWRkcjsKLSAgICBjaGFyICplcnJ0eHQ7Ci0gICAgaW50IHN5bW9yZCA9IDA7Ci0gICAgRExMY2hhaW4gdG1wID0gZmluZF9pZChoYW5kbGUpOwotCi0gICAgaWYgKCF0bXApCi0gICAgICAgIGdvdG8gaW52X2hhbmRsZTsKLQotICAgIGlmICgqc3ltYm9sID09ICcjJykKLSAgICAgICAgc3ltb3JkID0gYXRvaShzeW1ib2wgKyAxKTsKLQotICAgIHN3aXRjaCAocmMgPSBEb3NRdWVyeVByb2NBZGRyKHRtcC0+aGFuZGxlLCBzeW1vcmQsIHN5bWJvbCwgJmFkZHIpKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIHJldHVybiAodm9pZCAqKWFkZHI7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9IQU5ETEU6Ci1pbnZfaGFuZGxlOgotICAgICAgICAgICAgZXJydHh0ID0gImludmFsaWQgbW9kdWxlIGhhbmRsZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9QUk9DX05PVF9GT1VORDoKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX05BTUU6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAibm8gc3ltYm9sIGAlcycgaW4gbW9kdWxlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJydHh0ID0gInN5bWJvbCBgJXMnLCBlcnJvciBjb2RlID0gJWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHNucHJpbnRmKGRsZXJyLCBzaXplb2YoZGxlcnIpLCBlcnJ0eHQsIHN5bWJvbCwgcmMpOwotICAgIHJldHVybiBOVUxMOwotfQotCi0vKiBmcmVlIGR5bmFtaWNhbGx5LWxpbmtlZCBsaWJyYXJ5ICovCi1pbnQgZGxjbG9zZSh2b2lkICpoYW5kbGUpCi17Ci0gICAgaW50IHJjOwotICAgIERMTGNoYWluIHRtcCA9IGZpbmRfaWQoaGFuZGxlKTsKLQotICAgIGlmICghdG1wKQotICAgICAgICBnb3RvIGludl9oYW5kbGU7Ci0KLSAgICBzd2l0Y2ggKHJjID0gRG9zRnJlZU1vZHVsZSh0bXAtPmhhbmRsZSkpCi0gICAgewotICAgICAgICBjYXNlIE5PX0VSUk9SOgotICAgICAgICAgICAgZnJlZSh0bXAtPm5hbWUpOwotICAgICAgICAgICAgZGxsb2FkID0gdG1wLT5uZXh0OwotICAgICAgICAgICAgZnJlZSh0bXApOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9IQU5ETEU6Ci1pbnZfaGFuZGxlOgotICAgICAgICAgICAgc3RyY3B5KGRsZXJyLCAiaW52YWxpZCBtb2R1bGUgaGFuZGxlIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9BQ0NFU1M6Ci0gICAgICAgICAgICBzdHJjcHkoZGxlcnIsICJhY2Nlc3MgZGVuaWVkIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi0vKiByZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyBsYXN0IG9jY3VycmVkIGRsIGVycm9yICovCi1jaGFyICpkbGVycm9yKCkKLXsKLSAgICByZXR1cm4gZGxlcnI7Ci19CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvZGxmY24uaCBiL1BDL29zMmVteC9kbGZjbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzNhZTY5Li4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9kbGZjbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyogLSotIEMgLSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgMTk5MS0xOTk1IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCi1DZW50cnVtIG9yIENXSSBvciBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgb3IKLUNOUkkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotcGVybWlzc2lvbi4KLQotV2hpbGUgQ1dJIGlzIHRoZSBpbml0aWFsIHNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSwgYSBtb2RpZmllZCB2ZXJzaW9uCi1pcyBtYWRlIGF2YWlsYWJsZSBieSB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzCi0oQ05SSSkgYXQgdGhlIEludGVybmV0IGFkZHJlc3MgZnRwOi8vZnRwLnB5dGhvbi5vcmcuCi0KLVNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBBTkQgQ05SSSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRICi1SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSAotQ0VOVFJVTSBPUiBDTlJJIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgZGxvcGVuKCkgLSBVbml4LWxpa2UgZHluYW1pYyBsaW5raW5nCi0gKiBlbXVsYXRpb24gZnVuY3Rpb25zIGZvciBPUy8yIHVzaW5nIERvc0xvYWRNb2R1bGUoKSBhbmQgY29tcGFueS4KLSAqLwotCi0jaWZuZGVmIF9ETEZDTl9ICi0jZGVmaW5lIF9ETEZDTl9ICi0KLS8qIGxvYWQgYSBkeW5hbWljLWxpbmsgbGlicmFyeSBhbmQgcmV0dXJuIGhhbmRsZSAqLwotdm9pZCAqZGxvcGVuKGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpOwotCi0vKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBgc3ltYm9sJyBpbiBETEwgKi8KLXZvaWQgKmRsc3ltKHZvaWQgKmhhbmRsZSwgY2hhciAqc3ltYm9sKTsKLQotLyogZnJlZSBkeW5hbWljYWxseS1saW5rZWQgbGlicmFyeSAqLwotaW50IGRsY2xvc2Uodm9pZCAqaGFuZGxlKTsKLQotLyogcmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgbGFzdCBvY2N1cnJlZCBkbCBlcnJvciAqLwotY2hhciAqZGxlcnJvcih2b2lkKTsKLQotI2VuZGlmIC8qICFfRExGQ05fSCAqLwpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2RsbGVudHJ5LmMgYi9QQy9vczJlbXgvZGxsZW50cnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNjY2ExYy4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZGxsZW50cnkuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFB5dGhvbiAyLjMgY29yZSBETEwuCi0gKi8KLQotI2RlZmluZSBOVUxMIDAKLQotI2RlZmluZSBSRUYocykgIGV4dGVybiB2b2lkIHMoKTsgdm9pZCAqX19fX3JlZl8jI3MgPSAmczsKLQotLyogTWFrZSByZWZlcmVuY2VzIHRvIGltcG9ydGVkIHN5bWJvbHMgdG8gcHVsbCB0aGVtIGZyb20gc3RhdGljIGxpYnJhcnkgKi8KLVJFRihQeV9NYWluKTsKLQotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi1leHRlcm4gaW50IF9DUlRfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9DUlRfdGVybSh2b2lkKTsKLWV4dGVybiB2b2lkIF9fY3RvcmR0b3JJbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX19jdG9yZHRvclRlcm0odm9pZCk7Ci0KLXVuc2lnbmVkIGxvbmcgX0RMTF9Jbml0VGVybSh1bnNpZ25lZCBsb25nIG1vZF9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgZmxhZykKLXsKLSAgICBzd2l0Y2ggKGZsYWcpCi0gICAgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBpZiAoX0NSVF9pbml0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBfX2N0b3JkdG9ySW5pdCgpOwotCi0gICAgICAgICAgICAvKiBJZ25vcmUgZmF0YWwgc2lnbmFscyAqLwotICAgICAgICAgICAgc2lnbmFsKFNJR1NFR1YsIFNJR19JR04pOwotICAgICAgICAgICAgc2lnbmFsKFNJR0ZQRSwgU0lHX0lHTik7Ci0KLSAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIF9fY3RvcmR0b3JUZXJtKCk7Ci0gICAgICAgICAgICBfQ1JUX3Rlcm0oKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvZ2V0cGF0aHAuYyBiL1BDL29zMmVteC9nZXRwYXRocC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDczNzc0Li4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9nZXRwYXRocC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE4ICswLDAgQEAKLQotLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFRoaXMgdmVyc2lvbiB1c2VkIGJ5IE9TLzIrRU1YICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIFBBVEggUlVMRVMgRk9SIE9TLzIrRU1YOgotICAgVGhpcyBkZXNjcmliZXMgaG93IHN5cy5wYXRoIGlzIGZvcm1lZCBvbiBPUy8yK0VNWC4gIEl0IGRlc2NyaWJlcyB0aGUKLSAgIGZ1bmN0aW9uYWxpdHksIG5vdCB0aGUgaW1wbGVtZW50YXRpb24gKGllLCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlc2UKLSAgIGFyZSBhY3R1YWxseSBmZXRjaGVkIGlzIGRpZmZlcmVudCkKLQotICAgKiBQeXRob24gYWx3YXlzIGFkZHMgYW4gZW1wdHkgZW50cnkgYXQgdGhlIHN0YXJ0LCB3aGljaCBjb3JyZXNwb25kcwotICAgICB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0KLSAgICogSWYgdGhlIFBZVEhPTlBBVEggZW52LiB2YXIuIGV4aXN0cywgaXRzIGVudHJpZXMgYXJlIGFkZGVkIG5leHQuCi0KLSAgICogV2UgYXR0ZW1wdCB0byBsb2NhdGUgdGhlICJQeXRob24gSG9tZSIgLSBpZiB0aGUgUFlUSE9OSE9NRSBlbnYgdmFyCi0gICAgIGlzIHNldCwgd2UgYmVsaWV2ZSBpdC4gIE90aGVyd2lzZSwgd2UgdXNlIHRoZSBwYXRoIG9mIG91ciBob3N0IC5FWEUncwotICAgICB0byB0cnkgYW5kIGxvY2F0ZSBvdXIgImxhbmRtYXJrIiAobGliXFxvcy5weSkgYW5kIGRlZHVjZSBvdXIgaG9tZS4KLSAgICAgLSBJZiB3ZSBETyBoYXZlIGEgUHl0aG9uIEhvbWU6IFRoZSByZWxldmFudCBzdWItZGlyZWN0b3JpZXMgKExpYiwKLSAgICAgICBwbGF0LXdpbiwgZXRjKSBhcmUgYmFzZWQgb24gdGhlIFB5dGhvbiBIb21lCi0gICAgIC0gSWYgd2UgRE8gTk9UIGhhdmUgYSBQeXRob24gSG9tZSwgdGhlIGNvcmUgUHl0aG9uIFBhdGggaXMKLSAgICAgICBsb2FkZWQgZnJvbSB0aGUgcmVnaXN0cnkuICBUaGlzIGlzIHRoZSBtYWluIFB5dGhvblBhdGgga2V5LAotICAgICAgIGFuZCBib3RoIEhLTE0gYW5kIEhLQ1UgYXJlIGNvbWJpbmVkIHRvIGZvcm0gdGhlIHBhdGgpCi0KLSAgICogSWZmIC0gd2UgY2FuIG5vdCBsb2NhdGUgdGhlIFB5dGhvbiBIb21lLCBhbmQgaGF2ZSBub3QgaGFkIGEgUFlUSE9OUEFUSAotICAgICBzcGVjaWZpZWQgKGllLCB3ZSBoYXZlIF9ub3RoaW5nXyB3ZSBjYW4gYXNzdW1lIGlzIGEgZ29vZCBwYXRoKSwgYQotICAgICBkZWZhdWx0IHBhdGggd2l0aCByZWxhdGl2ZSBlbnRyaWVzIGlzIHVzZWQgKGVnLiAuXExpYjsuXHBsYXQtd2luLCBldGMpCi0KLQotICBUaGUgZW5kIHJlc3VsdCBvZiBhbGwgdGhpcyBpczoKLSAgKiBXaGVuIHJ1bm5pbmcgcHl0aG9uLmV4ZSwgb3IgYW55IG90aGVyIC5leGUgaW4gdGhlIG1haW4gUHl0aG9uIGRpcmVjdG9yeQotICAgIChlaXRoZXIgYW4gaW5zdGFsbGVkIHZlcnNpb24sIG9yIGRpcmVjdGx5IGZyb20gdGhlIFBDYnVpbGQgZGlyZWN0b3J5KSwKLSAgICB0aGUgY29yZSBwYXRoIGlzIGRlZHVjZWQuCi0KLSAgKiBXaGVuIFB5dGhvbiBpcyBob3N0ZWQgaW4gYW5vdGhlciBleGUgKGRpZmZlcmVudCBkaXJlY3RvcnksIGVtYmVkZGVkIHZpYQotICAgIENPTSwgZXRjKSwgdGhlIFB5dGhvbiBIb21lIHdpbGwgbm90IGJlIGRlZHVjZWQsIHNvIHRoZSBjb3JlIHBhdGggZnJvbQotICAgIHRoZSByZWdpc3RyeSBpcyB1c2VkLiAgT3RoZXIgImFwcGxpY2F0aW9uIHBhdGhzICJpbiB0aGUgcmVnaXN0cnkgYXJlCi0gICAgYWx3YXlzIHJlYWQuCi0KLSAgKiBJZiBQeXRob24gY2FuJ3QgZmluZCBpdHMgaG9tZSBhbmQgdGhlcmUgaXMgbm8gcmVnaXN0cnkgKGVnLCBmcm96ZW4KLSAgICBleGUsIHNvbWUgdmVyeSBzdHJhbmdlIGluc3RhbGxhdGlvbiBzZXR1cCkgeW91IGdldCBhIHBhdGggd2l0aAotICAgIHNvbWUgZGVmYXVsdCwgYnV0IHJlbGF0aXZlLCBwYXRocy4KLQotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJvc2RlZnMuaCIKLQotI2lmbmRlZiBQWU9TX09TMgotI2Vycm9yIFRoaXMgZmlsZSBvbmx5IGNvbXBpbGFibGUgb24gT1MvMgotI2VuZGlmCi0KLSNkZWZpbmUgSU5DTF9ET1MKLSNpbmNsdWRlIDxvczIuaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYgLyogSEFWRV9VTklTVERfSCAqLwotCi0vKiBTZWFyY2ggaW4gc29tZSBjb21tb24gbG9jYXRpb25zIGZvciB0aGUgYXNzb2NpYXRlZCBQeXRob24gbGlicmFyaWVzLgotICoKLSAqIFB5X0dldFBhdGgoKSB0cmllcyB0byByZXR1cm4gYSBzZW5zaWJsZSBQeXRob24gbW9kdWxlIHNlYXJjaCBwYXRoLgotICoKLSAqIFRoZSBhcHByb2FjaCBpcyBhbiBhZGFwdGF0aW9uIGZvciBXaW5kb3dzIG9mIHRoZSBzdHJhdGVneSB1c2VkIGluCi0gKiAuLi9Nb2R1bGVzL2dldHBhdGguYzsgaXQgdXNlcyB0aGUgV2luZG93cyBSZWdpc3RyeSBhcyBvbmUgb2YgaXRzCi0gKiBpbmZvcm1hdGlvbiBzb3VyY2VzLgotICovCi0KLSNpZm5kZWYgTEFORE1BUksKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBMQU5ETUFSSyAibGliL29zLnB5IgotI2Vsc2UKLSNkZWZpbmUgTEFORE1BUksgImxpYlxcb3MucHkiCi0jZW5kaWYKLSNlbmRpZgotCi1zdGF0aWMgY2hhciBwcmVmaXhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLQotCi1zdGF0aWMgaW50Ci1pc19zZXAoY2hhciBjaCkgLyogZGV0ZXJtaW5lIGlmICJjaCIgaXMgYSBzZXBhcmF0b3IgY2hhcmFjdGVyICovCi17Ci0jaWZkZWYgQUxUU0VQCi0gICAgcmV0dXJuIGNoID09IFNFUCB8fCBjaCA9PSBBTFRTRVA7Ci0jZWxzZQotICAgIHJldHVybiBjaCA9PSBTRVA7Ci0jZW5kaWYKLX0KLQotLyogYXNzdW1lcyAnZGlyJyBudWxsIHRlcm1pbmF0ZWQgaW4gYm91bmRzLgotICogTmV2ZXIgd3JpdGVzIGJleW9uZCBleGlzdGluZyB0ZXJtaW5hdG9yLgotICovCi1zdGF0aWMgdm9pZAotcmVkdWNlKGNoYXIgKmRpcikKLXsKLSAgICBzaXplX3QgaSA9IHN0cmxlbihkaXIpOwotICAgIHdoaWxlIChpID4gMCAmJiAhaXNfc2VwKGRpcltpXSkpCi0gICAgICAgIC0taTsKLSAgICBkaXJbaV0gPSAnXDAnOwotfQotCi1zdGF0aWMgaW50Ci1leGlzdHMoY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgc3RydWN0IHN0YXQgYnVmOwotICAgIHJldHVybiBzdGF0KGZpbGVuYW1lLCAmYnVmKSA9PSAwOwotfQotCi0vKiBJcyBtb2R1bGUgIChjaGVjayBmb3IgLnB5Yy8ucHlvIHRvbykKLSAqIEFzc3VtZXMgJ2ZpbGVuYW1lJyBNQVhQQVRITEVOKzEgYnl0ZXMgbG9uZyAtCi0gKiBtYXkgZXh0ZW5kICdmaWxlbmFtZScgYnkgb25lIGNoYXJhY3Rlci4KLSAqLwotc3RhdGljIGludAotaXNtb2R1bGUoY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgaWYgKGV4aXN0cyhmaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgLyogQ2hlY2sgZm9yIHRoZSBjb21waWxlZCB2ZXJzaW9uIG9mIHByZWZpeC4gKi8KLSAgICBpZiAoc3RybGVuKGZpbGVuYW1lKSA8IE1BWFBBVEhMRU4pIHsKLSAgICAgICAgc3RyY2F0KGZpbGVuYW1lLCBQeV9PcHRpbWl6ZUZsYWcgPyAibyIgOiAiYyIpOwotICAgICAgICBpZiAoZXhpc3RzKGZpbGVuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogQWRkIGEgcGF0aCBjb21wb25lbnQsIGJ5IGFwcGVuZGluZyBzdHVmZiB0byBidWZmZXIuCi0gICBidWZmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IE1BWFBBVEhMRU4gKyAxIGJ5dGVzIGFsbG9jYXRlZCwgYW5kIGNvbnRhaW4gYQotICAgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZSB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyAobm90IGNvdW50aW5nCi0gICB0aGUgdHJhaWxpbmcgTlVMKS4gIEl0J3MgYSBmYXRhbCBlcnJvciBpZiBpdCBjb250YWlucyBhIHN0cmluZyBsb25nZXIgdGhhbgotICAgdGhhdCAoY2FsbGVycyBtdXN0IGJlIGNhcmVmdWwhKS4gIElmIHRoZXNlIHJlcXVpcmVtZW50cyBhcmUgbWV0LCBpdCdzCi0gICBndWFyYW50ZWVkIHRoYXQgYnVmZmVyIHdpbGwgc3RpbGwgYmUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBubyBtb3JlCi0gICB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyBhdCBleGl0LiAgSWYgc3R1ZmYgaXMgdG9vIGxvbmcsIG9ubHkgYXMgbXVjaCBvZgotICAgc3R1ZmYgYXMgZml0cyB3aWxsIGJlIGFwcGVuZGVkLgotKi8KLQotc3RhdGljIHZvaWQKLWpvaW4oY2hhciAqYnVmZmVyLCBjaGFyICpzdHVmZikKLXsKLSAgICBzaXplX3QgbiwgazsKLSAgICBpZiAoaXNfc2VwKHN0dWZmWzBdKSkKLSAgICAgICAgbiA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG4gPSBzdHJsZW4oYnVmZmVyKTsKLSAgICAgICAgaWYgKG4gPiAwICYmICFpc19zZXAoYnVmZmVyW24tMV0pICYmIG4gPCBNQVhQQVRITEVOKQotICAgICAgICAgICAgYnVmZmVyW24rK10gPSBTRVA7Ci0gICAgfQotICAgIGlmIChuID4gTUFYUEFUSExFTikKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiYnVmZmVyIG92ZXJmbG93IGluIGdldHBhdGhwLmMncyBqb2lucGF0aCgpIik7Ci0gICAgayA9IHN0cmxlbihzdHVmZik7Ci0gICAgaWYgKG4gKyBrID4gTUFYUEFUSExFTikKLSAgICAgICAgayA9IE1BWFBBVEhMRU4gLSBuOwotICAgIHN0cm5jcHkoYnVmZmVyK24sIHN0dWZmLCBrKTsKLSAgICBidWZmZXJbbitrXSA9ICdcMCc7Ci19Ci0KLS8qIGdvdGxhbmRtYXJrIG9ubHkgY2FsbGVkIGJ5IHNlYXJjaF9mb3JfcHJlZml4LCB3aGljaCBlbnN1cmVzCi0gKiAncHJlZml4JyBpcyBudWxsIHRlcm1pbmF0ZWQgaW4gYm91bmRzLiAgam9pbigpIGVuc3VyZXMKLSAqICdsYW5kbWFyaycgY2FuIG5vdCBvdmVyZmxvdyBwcmVmaXggaWYgdG9vIGxvbmcuCi0gKi8KLXN0YXRpYyBpbnQKLWdvdGxhbmRtYXJrKGNoYXIgKmxhbmRtYXJrKQotewotICAgIGludCBuLCBvazsKLQotICAgIG4gPSBzdHJsZW4ocHJlZml4KTsKLSAgICBqb2luKHByZWZpeCwgbGFuZG1hcmspOwotICAgIG9rID0gaXNtb2R1bGUocHJlZml4KTsKLSAgICBwcmVmaXhbbl0gPSAnXDAnOwotICAgIHJldHVybiBvazsKLX0KLQotLyogYXNzdW1lcyBhcmd2MF9wYXRoIGlzIE1BWFBBVEhMRU4rMSBieXRlcyBsb25nLCBhbHJlYWR5IFwwIHRlcm0nZC4KLSAqIGFzc3VtcHRpb24gcHJvdmlkZWQgYnkgb25seSBjYWxsZXIsIGNhbGN1bGF0ZV9wYXRoKCkKLSAqLwotc3RhdGljIGludAotc2VhcmNoX2Zvcl9wcmVmaXgoY2hhciAqYXJndjBfcGF0aCwgY2hhciAqbGFuZG1hcmspCi17Ci0gICAgLyogU2VhcmNoIGZyb20gYXJndjBfcGF0aCwgdW50aWwgbGFuZG1hcmsgaXMgZm91bmQgKi8KLSAgICBzdHJjcHkocHJlZml4LCBhcmd2MF9wYXRoKTsKLSAgICBkbyB7Ci0gICAgICAgIGlmIChnb3RsYW5kbWFyayhsYW5kbWFyaykpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgcmVkdWNlKHByZWZpeCk7Ci0gICAgfSB3aGlsZSAocHJlZml4WzBdKTsKLSAgICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ2V0X3Byb2dwYXRoKHZvaWQpCi17Ci0gICAgZXh0ZXJuIGNoYXIgKlB5X0dldFByb2dyYW1OYW1lKHZvaWQpOwotICAgIGNoYXIgKnBhdGggPSBnZXRlbnYoIlBBVEgiKTsKLSAgICBjaGFyICpwcm9nID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKLQotICAgIFBQSUIgcGliOwotICAgIGlmICgoRG9zR2V0SW5mb0Jsb2NrcyhOVUxMLCAmcGliKSA9PSAwKSAmJgotICAgICAgICAoRG9zUXVlcnlNb2R1bGVOYW1lKHBpYi0+cGliX2htdGUsIHNpemVvZihwcm9ncGF0aCksIHByb2dwYXRoKSA9PSAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHByb2cgPT0gTlVMTCB8fCAqcHJvZyA9PSAnXDAnKQotICAgICAgICBwcm9nID0gInB5dGhvbiI7Ci0KLSAgICAvKiBJZiB0aGVyZSBpcyBubyBzbGFzaCBpbiB0aGUgYXJndjAgcGF0aCwgdGhlbiB3ZSBoYXZlIHRvCi0gICAgICogYXNzdW1lIHB5dGhvbiBpcyBvbiB0aGUgdXNlcidzICRQQVRILCBzaW5jZSB0aGVyZSdzIG5vCi0gICAgICogb3RoZXIgd2F5IHRvIGZpbmQgYSBkaXJlY3RvcnkgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLiAgSWYKLSAgICAgKiAkUEFUSCBpc24ndCBleHBvcnRlZCwgeW91IGxvc2UuCi0gICAgICovCi0jaWZkZWYgQUxUU0VQCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApIHx8IHN0cmNocihwcm9nLCBBTFRTRVApKQotI2Vsc2UKLSAgICBpZiAoc3RyY2hyKHByb2csIFNFUCkpCi0jZW5kaWYKLSAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcHJvZywgTUFYUEFUSExFTik7Ci0gICAgZWxzZSBpZiAocGF0aCkgewotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgY2hhciAqZGVsaW0gPSBzdHJjaHIocGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gZGVsaW0gLSBwYXRoOwotICAgICAgICAgICAgICAgIC8qIGVuc3VyZSB3ZSBjYW4ndCBvdmVyd3JpdGUgYnVmZmVyICovCi0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgICAgICAgICAgICAgbGVuID0gbWluKE1BWFBBVEhMRU4sbGVuKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgbGVuID0gTUFYUEFUSExFTiA8IGxlbiA/IE1BWFBBVEhMRU4gOiBsZW47Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzdHJuY3B5KHByb2dwYXRoLCBwYXRoLCBsZW4pOwotICAgICAgICAgICAgICAgICoocHJvZ3BhdGggKyBsZW4pID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHJuY3B5KHByb2dwYXRoLCBwYXRoLCBNQVhQQVRITEVOKTsKLQotICAgICAgICAgICAgLyogam9pbigpIGlzIHNhZmUgZm9yIE1BWFBBVEhMRU4rMSBzaXplIGJ1ZmZlciAqLwotICAgICAgICAgICAgam9pbihwcm9ncGF0aCwgcHJvZyk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RzKHByb2dwYXRoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKCFkZWxpbSkgewotICAgICAgICAgICAgICAgIHByb2dwYXRoWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhdGggPSBkZWxpbSArIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYWxjdWxhdGVfcGF0aCh2b2lkKQotewotICAgIGNoYXIgYXJndjBfcGF0aFtNQVhQQVRITEVOKzFdOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBzaXplX3QgYnVmc3o7Ci0gICAgY2hhciAqcHl0aG9uaG9tZSA9IFB5X0dldFB5dGhvbkhvbWUoKTsKLSAgICBjaGFyICplbnZwYXRoID0gZ2V0ZW52KCJQWVRIT05QQVRIIik7Ci0gICAgY2hhciB6aXBfcGF0aFtNQVhQQVRITEVOKzFdOwotICAgIHNpemVfdCBsZW47Ci0KLSAgICBnZXRfcHJvZ3BhdGgoKTsKLSAgICAvKiBwcm9ncGF0aCBndWFyYW50ZWVkIFwwIHRlcm1pbmF0ZWQgaW4gTUFYUEFUSCsxIGJ5dGVzLiAqLwotICAgIHN0cmNweShhcmd2MF9wYXRoLCBwcm9ncGF0aCk7Ci0gICAgcmVkdWNlKGFyZ3YwX3BhdGgpOwotICAgIGlmIChweXRob25ob21lID09IE5VTEwgfHwgKnB5dGhvbmhvbWUgPT0gJ1wwJykgewotICAgICAgICBpZiAoc2VhcmNoX2Zvcl9wcmVmaXgoYXJndjBfcGF0aCwgTEFORE1BUkspKQotICAgICAgICAgICAgcHl0aG9uaG9tZSA9IHByZWZpeDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHl0aG9uaG9tZSA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgc3RybmNweShwcmVmaXgsIHB5dGhvbmhvbWUsIE1BWFBBVEhMRU4pOwotCi0gICAgaWYgKGVudnBhdGggJiYgKmVudnBhdGggPT0gJ1wwJykKLSAgICAgICAgZW52cGF0aCA9IE5VTEw7Ci0KLSAgICAvKiBDYWxjdWxhdGUgemlwIGFyY2hpdmUgcGF0aCAqLwotICAgIHN0cm5jcHkoemlwX3BhdGgsIHByb2dwYXRoLCBNQVhQQVRITEVOKTsKLSAgICB6aXBfcGF0aFtNQVhQQVRITEVOXSA9ICdcMCc7Ci0gICAgbGVuID0gc3RybGVuKHppcF9wYXRoKTsKLSAgICBpZiAobGVuID4gNCkgewotICAgICAgICB6aXBfcGF0aFtsZW4tM10gPSAneic7ICAvKiBjaGFuZ2UgZW5kaW5nIHRvICJ6aXAiICovCi0gICAgICAgIHppcF9wYXRoW2xlbi0yXSA9ICdpJzsKLSAgICAgICAgemlwX3BhdGhbbGVuLTFdID0gJ3AnOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgemlwX3BhdGhbMF0gPSAwOwotICAgIH0KLQotICAgIC8qIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgcGF0aCBmcm9tIHRoZSBmb2xsb3dpbmcgcGFydHMuCi0gICAgICogKDEpIHRoZSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBzZXQ7Ci0gICAgICogKDIpIHRoZSB6aXAgYXJjaGl2ZSBmaWxlIHBhdGg7Ci0gICAgICogKDMpIHRoZSBQWVRIT05QQVRIIGNvbmZpZyBtYWNybywgd2l0aCB0aGUgbGVhZGluZyAiLiIKLSAgICAgKiAgICAgb2YgZWFjaCBjb21wb25lbnQgcmVwbGFjZWQgd2l0aCBweXRob25ob21lLCBpZiBzZXQ7Ci0gICAgICogKDQpIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZXhlY3V0YWJsZSAoYXJndjBfcGF0aCkuCi0gICAgICogVGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBjYWxjdWxhdGVzICMzIGZpcnN0LgotICAgICAqLwotCi0gICAgLyogQ2FsY3VsYXRlIHNpemUgb2YgcmV0dXJuIGJ1ZmZlciAqLwotICAgIGlmIChweXRob25ob21lICE9IE5VTEwpIHsKLSAgICAgICAgY2hhciAqcDsKLSAgICAgICAgYnVmc3ogPSAxOwotICAgICAgICBmb3IgKHAgPSBQWVRIT05QQVRIOyAqcDsgcCsrKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gREVMSU0pCi0gICAgICAgICAgICAgICAgYnVmc3orKzsgLyogbnVtYmVyIG9mIERFTElNIHBsdXMgb25lICovCi0gICAgICAgIH0KLSAgICAgICAgYnVmc3ogKj0gc3RybGVuKHB5dGhvbmhvbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGJ1ZnN6ID0gMDsKLSAgICBidWZzeiArPSBzdHJsZW4oUFlUSE9OUEFUSCkgKyAxOwotICAgIGJ1ZnN6ICs9IHN0cmxlbihhcmd2MF9wYXRoKSArIDE7Ci0gICAgYnVmc3ogKz0gc3RybGVuKHppcF9wYXRoKSArIDE7Ci0gICAgaWYgKGVudnBhdGggIT0gTlVMTCkKLSAgICAgICAgYnVmc3ogKz0gc3RybGVuKGVudnBhdGgpICsgMTsKLQotICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZiA9IG1hbGxvYyhidWZzeik7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGNhbid0IGV4aXQsIHNvIHByaW50IGEgd2FybmluZyBhbmQgbGltcCBhbG9uZyAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG1hbGxvYyBkeW5hbWljIFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgaWYgKGVudnBhdGgpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZW52aXJvbm1lbnQgJFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGVudnBhdGg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIGRlZmF1bHQgc3RhdGljIHBhdGguXG4iKTsKLSAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIGVudnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotICAgIGlmICh6aXBfcGF0aFswXSkgewotICAgICAgICBzdHJjcHkoYnVmLCB6aXBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICB9Ci0KLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMKSB7Ci0gICAgICAgIHN0cmNweShidWYsIFBZVEhPTlBBVEgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgKnAgPSBQWVRIT05QQVRIOwotICAgICAgICBjaGFyICpxOwotICAgICAgICBzaXplX3QgbjsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgcSA9IHN0cmNocihwLCBERUxJTSk7Ci0gICAgICAgICAgICBpZiAocSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIG4gPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbiA9IHEtcDsKLSAgICAgICAgICAgIGlmIChwWzBdID09ICcuJyAmJiBpc19zZXAocFsxXSkpIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkoYnVmLCBweXRob25ob21lKTsKLSAgICAgICAgICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgbi0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RybmNweShidWYsIHAsIG4pOwotICAgICAgICAgICAgYnVmICs9IG47Ci0gICAgICAgICAgICBpZiAocSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgICAgICBwID0gcSsxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChhcmd2MF9wYXRoKSB7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICBzdHJjcHkoYnVmLCBhcmd2MF9wYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgICpidWYgPSAnXDAnOwotfQotCi0KLS8qIEV4dGVybmFsIGludGVyZmFjZSAqLwotCi1jaGFyICoKLVB5X0dldFBhdGgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLSAgICByZXR1cm4gbW9kdWxlX3NlYXJjaF9wYXRoOwotfQotCi1jaGFyICoKLVB5X0dldFByZWZpeCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotICAgIHJldHVybiBwcmVmaXg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0RXhlY1ByZWZpeCh2b2lkKQotewotICAgIHJldHVybiBQeV9HZXRQcmVmaXgoKTsKLX0KLQotY2hhciAqCi1QeV9HZXRQcm9ncmFtRnVsbFBhdGgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLSAgICByZXR1cm4gcHJvZ3BhdGg7Ci19CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvcHljb25maWcuaCBiL1BDL29zMmVteC9weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTYxMDVhLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9weWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLSNpZm5kZWYgUHlfQ09ORklHX0gKLSNkZWZpbmUgUHlfQ09ORklHX0gKLQotI2Vycm9yICJQRVAgMTE6IE9TLzIgaXMgbm93IHVuc3VwcG9ydGVkLCBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy40IgotCi0vKiBjb25maWcuaC4KLSAqIEF0IHNvbWUgdGltZSBpbiB0aGUgcGFzdCwgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkvZnJvbSBjb25maWd1cmUuCi0gKiBub3cgbWFpbnRhaW5lZCBtYW51YWxseS4KLSAqLwotCi0vKiBidWlsZCBlbnZpcm9ubWVudCAqLwotI2RlZmluZSBQTEFURk9STQkib3MyZW14IgotI2RlZmluZSBDT01QSUxFUgkiW0VNWCBHQ0MgIiBfX1ZFUlNJT05fXyAiXSIKLSNkZWZpbmUgUFlPU19PUzIJMQotI2RlZmluZSBQWUNDX0dDQwkxCi0KLS8qIGRlZmF1bHQgbG9jYXRpb24ocykgKi8KLSNpZm5kZWYgUFJFRklYCi0jZGVmaW5lIFBSRUZJWAkJIiIKLSNlbmRpZgotI2lmbmRlZiBQWVRIT05QQVRICi0jZGVmaW5lIFBZVEhPTlBBVEgJIi4vTGliOy4vTGliL3BsYXQtIiBQTEFURk9STSBcCi0JCQkiOy4vTGliL2xpYi1keW5sb2FkOy4vTGliL3NpdGUtcGFja2FnZXMiCi0jZW5kaWYKLQotLyogRGVidWdnaW5nICovCi0jaWZuZGVmIFB5X0RFQlVHCi0vKiNkZWZpbmUgUHlfREVCVUcgMSovCi0jZW5kaWYKLQotLyogaWYgYnVpbGRpbmcgYW4gZXh0ZW5zaW9uIG9yIHdyYXBwZXIgZXhlY3V0YWJsZSwKLSAqIG1hcmsgUHl0aG9uIEFQSSBzeW1ib2xzICJleHRlcm4iIHNvIHRoYXQgc3ltYm9scwotICogaW1wb3J0ZWQgZnJvbSB0aGUgUHl0aG9uIGNvcmUgRExMIGFyZW4ndCBkdXBsaWNhdGVkLgotICovCi0jaWZkZWYgUHlfQlVJTERfQ09SRQotIyAgZGVmaW5lIFB5QVBJX0ZVTkMoUlRZUEUpCVJUWVBFCi0jZWxzZQotIyAgZGVmaW5lIFB5QVBJX0ZVTkMoUlRZUEUpCWV4dGVybiBSVFlQRQotI2VuZGlmCi0jZGVmaW5lIFB5QVBJX0RBVEEoUlRZUEUpCWV4dGVybiBSVFlQRQotI2RlZmluZSBQeU1PRElOSVRfRlVOQwl2b2lkCi0KLS8qIFVzZSBPUy8yIGZsYXZvdXIgb2YgdGhyZWFkcyAqLwotI2RlZmluZSBXSVRIX1RIUkVBRAkxCi0jZGVmaW5lIE9TMl9USFJFQURTCTEKLQotLyogV2Ugd2FudCBzb2NrZXRzICovCi0jZGVmaW5lIFRDUElQVjQJCTEKLSNkZWZpbmUgVVNFX1NPQ0tFVAkxCi0jZGVmaW5lIHNvY2tsZW5fdAlpbnQKLSNkZWZpbmUgRkRfU0VUU0laRQkxMDI0Ci0KLS8qIGVuYWJsZSB0aGUgUHl0aG9uIG9iamVjdCBhbGxvY2F0b3IgKi8KLSNkZWZpbmUJV0lUSF9QWU1BTExPQwkxCi0KLS8qIGVuYWJsZSB0aGUgR0MgbW9kdWxlICovCi0jZGVmaW5lIFdJVEhfQ1lDTEVfR0MJMQotCi0vKiBEZWZpbmUgaWYgeW91IHdhbnQgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIGluIGV4dGVuc2lvbiBtb2R1bGVzICovCi0jZGVmaW5lIFdJVEhfRE9DX1NUUklOR1MgMQotCi0vKiBVbmljb2RlIHJlbGF0ZWQgKi8KLSNkZWZpbmUgUFlfVU5JQ09ERV9UWVBFCXdjaGFyX3QKLSNkZWZpbmUgUHlfVU5JQ09ERV9TSVpFIFNJWkVPRl9TSE9SVAotCi0vKiBFTVggZGVmaW5lcyBzc2l6ZV90ICovCi0jZGVmaW5lIEhBVkVfU1NJWkVfVAkxCi0KLS8qIHN5c3RlbSBjYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgSEFWRV9UVFlOQU1FCTEKLSNkZWZpbmUgSEFWRV9XQUlUCTEKLSNkZWZpbmUgSEFWRV9HRVRFR0lEICAgIDEKLSNkZWZpbmUgSEFWRV9HRVRFVUlEICAgIDEKLSNkZWZpbmUgSEFWRV9HRVRHSUQgICAgIDEKLSNkZWZpbmUgSEFWRV9HRVRQUElEICAgIDEKLSNkZWZpbmUgSEFWRV9HRVRVSUQgICAgIDEKLSNkZWZpbmUgSEFWRV9PUEVORElSICAgIDEKLSNkZWZpbmUgSEFWRV9QSVBFICAgICAgIDEKLSNkZWZpbmUgSEFWRV9QT1BFTiAgICAgIDEKLSNkZWZpbmUgSEFWRV9TWVNURU0JMQotI2RlZmluZSBIQVZFX1RUWU5BTUUJMQotI2RlZmluZSBIQVZFX0RZTkFNSUNfTE9BRElORwkxCi0KLS8qIGlmIHBvcnQgb2YgR0RCTSBpbnN0YWxsZWQsIGl0IGluY2x1ZGVzIE5EQk0gZW11bGF0aW9uICovCi0jZGVmaW5lIEhBVkVfTkRCTV9IIDEKLQotLyogbmVlZCB0aGlzIGZvciBzcGF3bnYgY29kZSBpbiBwb3NpeG1vZHVsZSAoY2xvbmVkIGZyb20gV0lOMzIgZGVmJ24pICovCi10eXBlZGVmIGxvbmcgaW50cHRyX3Q7Ci0KLS8qIHdlIGRvbid0IGhhdmUgdG1fem9uZSBidXQgZG8gaGF2ZSB0aGUgZXh0ZXJuYWwgYXJyYXkgdHpuYW1lICovCi0jZGVmaW5lIEhBVkVfVFpOQU1FIDEKLQotLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGludCBvciB2b2lkKS4gKi8KLSNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKLQotLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLwotI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQotCi0vKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgdHlwZSBsb25nIGxvbmcuICovCi0jZGVmaW5lIEhBVkVfTE9OR19MT05HIDEKLQotLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KLSNkZWZpbmUgSEFWRV9QUk9UT1RZUEVTIDEKLQotLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgdmFyaWFibGUgbGVuZ3RoIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqIChlLmcuIHZvaWQgZnByaW50ZihGSUxFICosIGNoYXIgKiwgLi4uKTspICphbmQqIDxzdGRhcmcuaD4uCi0gKi8KLSNkZWZpbmUgSEFWRV9TVERBUkdfUFJPVE9UWVBFUyAxCi0KLS8qIERlZmluZSBpZiBtYWxsb2MoMCkgcmV0dXJucyBhIE5VTEwgcG9pbnRlci4gKi8KLSNkZWZpbmUgTUFMTE9DX1pFUk9fUkVUVVJOU19OVUxMIDEKLQotLyogRGVmaW5lIHRvIGZvcmNlIHVzZSBvZiB0aHJlYWQtc2FmZSBlcnJubywgaF9lcnJubywgYW5kIG90aGVyIGZ1bmN0aW9ucy4gKi8KLSNkZWZpbmUgX1JFRU5UUkFOVCAxCi0KLS8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy9zZWxlY3QuaD4gYW5kIDxzeXMvdGltZS5oPgotICogKHdoaWNoIHlvdSBjYW4ndCBvbiBTQ08gT0RUIDMuMCkuCi0gKi8KLSNkZWZpbmUgU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FIDEKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhbiBvZmZfdC4gKi8KLSNkZWZpbmUgU0laRU9GX09GRl9UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhbiB0aW1lX3QuICovCi0jZGVmaW5lIFNJWkVPRl9USU1FX1QgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc2hvcnQuICovCi0jZGVmaW5lIFNJWkVPRl9TSE9SVCAyCi0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBpbnQuICovCi0jZGVmaW5lIFNJWkVPRl9JTlQgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgbG9uZy4gKi8KLSNkZWZpbmUgU0laRU9GX0xPTkcgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgbG9uZyBsb25nLiAqLwotI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDgKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHZvaWQgKi4gKi8KLSNkZWZpbmUgU0laRU9GX1ZPSURfUCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBzaXplX3QuICovCi0jZGVmaW5lIFNJWkVPRl9TSVpFX1QgNAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGFsYXJtIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0FMQVJNIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBjbG9jayBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9DTE9DSyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZHVwMiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9EVVAyIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBleGVjdiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9FWEVDViAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3Bhd252IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NQQVdOViAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZmxvY2sgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRkxPQ0sgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZvcmsgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRk9SSyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZnN5bmMgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRlNZTkMgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZ0aW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZUSU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmdHJ1bmNhdGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRlRSVU5DQVRFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRjd2QgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwZWVybmFtZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRQRUVSTkFNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGdycCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwaWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUElEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwd2VudCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRQV0VOVCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0dGltZW9mZGF5IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0d2QgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUV0QgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGh5cG90IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0hZUE9UIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBraWxsIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0tJTEwgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIG1lbW1vdmUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUVNTU9WRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbWt0aW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01LVElNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcGF1c2UgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUEFVU0UgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHB1dGVudiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9QVVRFTlYgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNlbGVjdCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRUxFQ1QgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldGdpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRHSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldGxvY2FsZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHBnaWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUUEdJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0dWlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFVJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0dmJ1ZiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRWQlVGIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzaWdhY3Rpb24gZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJlcnJvciBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TVFJFUlJPUiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZnRpbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSRlRJTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRjZ2V0cGdycCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9UQ0dFVFBHUlAgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRjc2V0cGdycCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9UQ1NFVFBHUlAgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRtcGZpbGUgZnVuY3Rpb24uICAqLwotI2RlZmluZSBIQVZFX1RNUEZJTEUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRpbWVzIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RJTUVTIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0cnVuY2F0ZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9UUlVOQ0FURSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdW5hbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVU5BTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHdhaXRwaWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfV0FJVFBJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGNvbmlvLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfQ09OSU9fSAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxkaXJlY3QuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9ESVJFQ1RfSAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfRElSRU5UX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlcnJuby5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9FUlJOT19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfRkNOVExfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfSU9fSAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuY3Vyc2VzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX05DVVJTRVNfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvZmlsZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfRklMRV9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRVNfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91bi5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVU5fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91dHNuYW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19VVFNOQU1FX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvd2FpdC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfVVRJTUVfSCAxCi0KLS8qIEVNWCBoYXMgYW4gc25wcmludGYoKS4gKi8KLSNkZWZpbmUgSEFWRV9TTlBSSU5URiAxCi0KLSNlbmRpZiAvKiAhUHlfQ09ORklHX0ggKi8KLQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5dGhvbjMzLmRlZiBiL1BDL29zMmVteC9weXRob24zMy5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NjcyNmIuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L3B5dGhvbjMzLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDEzMTQgKzAsMCBAQAotTElCUkFSWSBweXRob24zMyBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIAotREVTQ1JJUFRJT04gIlB5dGhvbiAyLjYgQ29yZSBETEwiIAotUFJPVE1PREUgCi1EQVRBIE1VTFRJUExFIE5PTlNIQVJFRCAKLUVYUE9SVFMgCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb25maWcpCi0gICJfUHlJbXBvcnRfSW5pdHRhYiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGRsZmNuKQotOyAgImRsb3BlbiIKLTsgICJkbHN5bSIKLTsgICJkbGNsb3NlIgotOyAgImRsZXJyb3IiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRwYXRocCkKLSAgIlB5X0dldFByb2dyYW1GdWxsUGF0aCIKLSAgIlB5X0dldFByZWZpeCIKLSAgIlB5X0dldEV4ZWNQcmVmaXgiCi0gICJQeV9HZXRQYXRoIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0YnVpbGRpbmZvKQotICAiUHlfR2V0QnVpbGRJbmZvIgotICAiX1B5X3N2bnZlcnNpb24iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtYWluKQotICAiUHlfTWFpbiIKLSAgIlB5X0dldEFyZ2NBcmd2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYWNjZWxlcikKLSAgIlB5R3JhbW1hcl9BZGRBY2NlbGVyYXRvcnMiCi0gICJQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ3JhbW1hcjEpCi0gICJQeUdyYW1tYXJfRmluZERGQSIKLSAgIlB5R3JhbW1hcl9MYWJlbFJlcHIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihsaXN0bm9kZSkKLSAgIlB5Tm9kZV9MaXN0VHJlZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG5vZGUpCi0gICJQeU5vZGVfTmV3IgotICAiUHlOb2RlX0FkZENoaWxkIgotICAiUHlOb2RlX0ZyZWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihwYXJzZXIpCi0gICJQeVBhcnNlcl9BZGRUb2tlbiIKLSAgIlB5UGFyc2VyX05ldyIKLSAgIlB5UGFyc2VyX0RlbGV0ZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHBhcnNldG9rKQotICAiUHlQYXJzZXJfUGFyc2VTdHJpbmciCi0gICJQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUiCi0gICJQeVBhcnNlcl9QYXJzZUZpbGUiCi0gICJQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyIKLSAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihiaXRzZXQpCi0gICJfUHlfbmV3Yml0c2V0IgotICAiX1B5X2RlbGJpdHNldCIKLSAgIl9QeV9hZGRiaXQiCi0gICJfUHlfc2FtZWJpdHNldCIKLSAgIl9QeV9tZXJnZWJpdHNldCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1ldGFncmFtbWFyKQotICAiX1B5X21ldGFfZ3JhbW1hciIKLSAgIlB5X21ldGFfZ3JhbW1hciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRva2VuaXplcikKLSAgIlB5VG9rZW5fT25lQ2hhciIKLSAgIlB5VG9rZW5fVHdvQ2hhcnMiCi0gICJQeVRva2VuX1RocmVlQ2hhcnMiCi0gICJQeVRva2VuaXplcl9Gcm9tU3RyaW5nIgotICAiUHlUb2tlbml6ZXJfRnJlZSIKLSAgIlB5VG9rZW5pemVyX0Zyb21GaWxlIgotICAiUHlUb2tlbml6ZXJfR2V0IgotICAiX1B5UGFyc2VyX1Rva2VuTmFtZXMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihteXJlYWRsaW5lKQotICAiX1B5T1NfUmVhZGxpbmVUU3RhdGUiCi0gICJQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIgotICAiUHlPU19TdGRpb1JlYWRsaW5lIgotICAiUHlPU19SZWFkbGluZSIKLSAgIlB5T1NfSW5wdXRIb29rIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYWJzdHJhY3QpCi0gICJfUHlPYmplY3RfTGVuZ3RoSGludCIKLSAgIlB5TWFwcGluZ19TaXplIgotICAiUHlPYmplY3RfQ2FsbE1ldGhvZCIKLSAgIlB5T2JqZWN0X0dldEl0ZW0iCi0gICJQeVNlcXVlbmNlX0dldEl0ZW0iCi0gICJQeU9iamVjdF9TZXRJdGVtIgotICAiUHlTZXF1ZW5jZV9TZXRJdGVtIgotICAiUHlPYmplY3RfRGVsSXRlbSIKLSAgIlB5U2VxdWVuY2VfRGVsSXRlbSIKLSAgIlB5TnVtYmVyX011bHRpcGx5IgotICAiUHlOdW1iZXJfSW5QbGFjZUFkZCIKLSAgIlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseSIKLSAgIlB5TnVtYmVyX0ludCIKLSAgIlB5TnVtYmVyX0xvbmciCi0gICJQeU51bWJlcl9GbG9hdCIKLSAgIlB5U2VxdWVuY2VfQ29uY2F0IgotICAiUHlTZXF1ZW5jZV9SZXBlYXQiCi0gICJQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQiCi0gICJQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQiCi0gICJQeVNlcXVlbmNlX0dldFNsaWNlIgotICAiUHlTZXF1ZW5jZV9TZXRTbGljZSIKLSAgIlB5U2VxdWVuY2VfVHVwbGUiCi0gICJQeU9iamVjdF9HZXRJdGVyIgotICAiUHlJdGVyX05leHQiCi0gICJQeVNlcXVlbmNlX0Zhc3QiCi0gICJfUHlTZXF1ZW5jZV9JdGVyU2VhcmNoIgotICAiUHlPYmplY3RfQ2FsbEZ1bmN0aW9uIgotICAiX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVCIKLSAgIl9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUIgotICAiUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MiCi0gICJQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzIgotICAiUHlPYmplY3RfQ21wIgotICAiUHlPYmplY3RfQ2FsbCIKLSAgIlB5T2JqZWN0X0NhbGxPYmplY3QiCi0gICJQeU9iamVjdF9UeXBlIgotICAiUHlPYmplY3RfU2l6ZSIKLSAgIlB5T2JqZWN0X0xlbmd0aCIKLSAgIlB5T2JqZWN0X0RlbEl0ZW1TdHJpbmciCi0gICJQeU9iamVjdF9Bc0NoYXJCdWZmZXIiCi0gICJQeU9iamVjdF9DaGVja1JlYWRCdWZmZXIiCi0gICJQeU9iamVjdF9Bc1JlYWRCdWZmZXIiCi0gICJQeU9iamVjdF9Bc1dyaXRlQnVmZmVyIgotICAiUHlOdW1iZXJfQ2hlY2siCi0gICJQeU51bWJlcl9BZGQiCi0gICJQeU51bWJlcl9TdWJ0cmFjdCIKLSAgIlB5TnVtYmVyX0RpdmlkZSIKLSAgIlB5TnVtYmVyX0Zsb29yRGl2aWRlIgotICAiUHlOdW1iZXJfVHJ1ZURpdmlkZSIKLSAgIlB5TnVtYmVyX1JlbWFpbmRlciIKLSAgIlB5TnVtYmVyX0Rpdm1vZCIKLSAgIlB5TnVtYmVyX1Bvd2VyIgotICAiUHlOdW1iZXJfTmVnYXRpdmUiCi0gICJQeU51bWJlcl9Qb3NpdGl2ZSIKLSAgIlB5TnVtYmVyX0Fic29sdXRlIgotICAiUHlOdW1iZXJfSW52ZXJ0IgotICAiUHlOdW1iZXJfTHNoaWZ0IgotICAiUHlOdW1iZXJfUnNoaWZ0IgotICAiUHlOdW1iZXJfQW5kIgotICAiUHlOdW1iZXJfWG9yIgotICAiUHlOdW1iZXJfT3IiCi0gICJQeU51bWJlcl9JbmRleCIKLSAgIlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdCIKLSAgIlB5TnVtYmVyX0luUGxhY2VEaXZpZGUiCi0gICJQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUiCi0gICJQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZSIKLSAgIlB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIiCi0gICJQeU51bWJlcl9JblBsYWNlUG93ZXIiCi0gICJQeU51bWJlcl9JblBsYWNlTHNoaWZ0IgotICAiUHlOdW1iZXJfSW5QbGFjZVJzaGlmdCIKLSAgIlB5TnVtYmVyX0luUGxhY2VBbmQiCi0gICJQeU51bWJlcl9JblBsYWNlWG9yIgotICAiUHlOdW1iZXJfSW5QbGFjZU9yIgotICAiUHlTZXF1ZW5jZV9DaGVjayIKLSAgIlB5U2VxdWVuY2VfU2l6ZSIKLSAgIlB5U2VxdWVuY2VfTGVuZ3RoIgotICAiUHlTZXF1ZW5jZV9EZWxTbGljZSIKLSAgIlB5U2VxdWVuY2VfTGlzdCIKLSAgIlB5U2VxdWVuY2VfQ291bnQiCi0gICJQeVNlcXVlbmNlX0NvbnRhaW5zIgotICAiUHlTZXF1ZW5jZV9JbiIKLSAgIlB5U2VxdWVuY2VfSW5kZXgiCi0gICJQeU1hcHBpbmdfQ2hlY2siCi0gICJQeU1hcHBpbmdfTGVuZ3RoIgotICAiUHlNYXBwaW5nX0hhc0tleVN0cmluZyIKLSAgIlB5TWFwcGluZ19IYXNLZXkiCi0gICJQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyIKLSAgIlB5TWFwcGluZ19TZXRJdGVtU3RyaW5nIgotICAiUHlPYmplY3RfSXNJbnN0YW5jZSIKLSAgIlB5T2JqZWN0X0lzU3ViY2xhc3MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihib29sb2JqZWN0KQotICAiUHlCb29sX0Zyb21Mb25nIgotICAiUHlCb29sX1R5cGUiCi0gICJfUHlfWmVyb1N0cnVjdCIKLSAgIl9QeV9UcnVlU3RydWN0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYnVmZmVyb2JqZWN0KQotICAiUHlCdWZmZXJfRnJvbU9iamVjdCIKLSAgIlB5QnVmZmVyX0Zyb21SZWFkV3JpdGVPYmplY3QiCi0gICJQeUJ1ZmZlcl9Gcm9tTWVtb3J5IgotICAiUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU1lbW9yeSIKLSAgIlB5QnVmZmVyX05ldyIKLSAgIlB5QnVmZmVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjZWxsb2JqZWN0KQotICAiUHlDZWxsX05ldyIKLSAgIlB5Q2VsbF9HZXQiCi0gICJQeUNlbGxfU2V0IgotICAiUHlDZWxsX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjbGFzc29iamVjdCkKLSAgIlB5Q2xhc3NfTmV3IgotICAiUHlDbGFzc19Jc1N1YmNsYXNzIgotICAiUHlJbnN0YW5jZV9OZXciCi0gICJQeUluc3RhbmNlX05ld1JhdyIKLSAgIlB5TWV0aG9kX05ldyIKLSAgIlB5TWV0aG9kX0Z1bmN0aW9uIgotICAiUHlNZXRob2RfU2VsZiIKLSAgIlB5TWV0aG9kX0NsYXNzIgotICAiX1B5SW5zdGFuY2VfTG9va3VwIgotICAiUHlNZXRob2RfRmluaSIKLSAgIlB5Q2xhc3NfVHlwZSIKLSAgIlB5SW5zdGFuY2VfVHlwZSIKLSAgIlB5TWV0aG9kX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjYXBzdWxlKQotICAiUHlDYXBzdWxlX0dldENvbnRleHQiCi0gICJQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvciIKLSAgIlB5Q2Fwc3VsZV9HZXROYW1lIgotICAiUHlDYXBzdWxlX0dldFBvaW50ZXIiCi0gICJQeUNhcHN1bGVfSW1wb3J0IgotICAiUHlDYXBzdWxlX0lzVmFsaWQiCi0gICJQeUNhcHN1bGVfTmV3IgotICAiUHlDYXBzdWxlX1NldENvbnRleHQiCi0gICJQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvciIKLSAgIlB5Q2Fwc3VsZV9TZXROYW1lIgotICAiUHlDYXBzdWxlX1NldFBvaW50ZXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2JqZWN0KQotICAiUHlDT2JqZWN0X0Zyb21Wb2lkUHRyIgotICAiUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYyIKLSAgIlB5Q09iamVjdF9Bc1ZvaWRQdHIiCi0gICJQeUNPYmplY3RfR2V0RGVzYyIKLSAgIlB5Q09iamVjdF9JbXBvcnQiCi0gICJQeUNPYmplY3RfU2V0Vm9pZFB0ciIKLSAgIlB5Q09iamVjdF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29kZW9iamVjdCkKLSAgIlB5Q29kZV9OZXciCi0gICJQeUNvZGVfQWRkcjJMaW5lIgotICAiUHlDb2RlX0NoZWNrTGluZU51bWJlciIKLSAgIlB5Q29kZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29tcGxleG9iamVjdCkKLSAgIl9QeV9jX3BvdyIKLSAgIl9QeV9jX3N1bSIKLSAgIl9QeV9jX2RpZmYiCi0gICJfUHlfY19uZWciCi0gICJfUHlfY19wcm9kIgotICAiX1B5X2NfcXVvdCIKLSAgIlB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgiCi0gICJQeUNvbXBsZXhfRnJvbURvdWJsZXMiCi0gICJQeUNvbXBsZXhfUmVhbEFzRG91YmxlIgotICAiUHlDb21wbGV4X0ltYWdBc0RvdWJsZSIKLSAgIlB5Q29tcGxleF9Bc0NDb21wbGV4IgotICAiUHlDb21wbGV4X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkZXNjcm9iamVjdCkKLSAgIlB5V3JhcHBlcl9OZXciCi0gICJQeURlc2NyX05ld01ldGhvZCIKLSAgIlB5RGVzY3JfTmV3Q2xhc3NNZXRob2QiCi0gICJQeURlc2NyX05ld01lbWJlciIKLSAgIlB5RGVzY3JfTmV3R2V0U2V0IgotICAiUHlEZXNjcl9OZXdXcmFwcGVyIgotICAiUHlEaWN0UHJveHlfTmV3IgotICAiUHlXcmFwcGVyRGVzY3JfVHlwZSIKLSAgIlB5UHJvcGVydHlfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGRpY3RvYmplY3QpCi0gICJQeURpY3RfTmV3IgotICAiUHlEaWN0X0dldEl0ZW0iCi0gICJQeURpY3RfU2V0SXRlbSIKLSAgIlB5RGljdF9EZWxJdGVtIgotICAiUHlEaWN0X0NsZWFyIgotICAiUHlEaWN0X01lcmdlRnJvbVNlcTIiCi0gICJQeURpY3RfTWVyZ2UiCi0gICJQeURpY3RfS2V5cyIKLSAgIlB5RGljdF9WYWx1ZXMiCi0gICJQeURpY3RfQ29udGFpbnMiCi0gICJQeURpY3RfTmV4dCIKLSAgIlB5RGljdF9JdGVtcyIKLSAgIlB5RGljdF9TaXplIgotICAiUHlEaWN0X0NvcHkiCi0gICJQeURpY3RfVXBkYXRlIgotICAiUHlEaWN0X0dldEl0ZW1TdHJpbmciCi0gICJQeURpY3RfU2V0SXRlbVN0cmluZyIKLSAgIlB5RGljdF9EZWxJdGVtU3RyaW5nIgotICAiUHlEaWN0X1R5cGUiCi0gICJQeURpY3RJdGVyS2V5X1R5cGUiCi0gICJQeURpY3RJdGVyVmFsdWVfVHlwZSIKLSAgIlB5RGljdEl0ZXJJdGVtX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihlbnVtb2JqZWN0KQotICAiUHlFbnVtX1R5cGUiCi0gICJQeVJldmVyc2VkX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmaWxlb2JqZWN0KQotICAiUHlGaWxlX0Zyb21TdHJpbmciCi0gICJQeV9Vbml2ZXJzYWxOZXdsaW5lRnJlYWQiCi0gICJQeUZpbGVfR2V0TGluZSIKLSAgIlB5RmlsZV9Tb2Z0U3BhY2UiCi0gICJQeUZpbGVfV3JpdGVPYmplY3QiCi0gICJQeUZpbGVfV3JpdGVTdHJpbmciCi0gICJQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yIgotICAiUHlfVW5pdmVyc2FsTmV3bGluZUZnZXRzIgotICAiUHlGaWxlX1NldEJ1ZlNpemUiCi0gICJQeUZpbGVfU2V0RW5jb2RpbmciCi0gICJQeUZpbGVfRnJvbUZpbGUiCi0gICJQeUZpbGVfQXNGaWxlIgotICAiUHlGaWxlX05hbWUiCi0gICJQeUZpbGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZsb2F0b2JqZWN0KQotICAiUHlGbG9hdF9Gcm9tU3RyaW5nIgotICAiUHlGbG9hdF9Bc0RvdWJsZSIKLSAgIlB5RmxvYXRfRmluaSIKLSAgIl9QeUZsb2F0X1BhY2s0IgotICAiX1B5RmxvYXRfUGFjazgiCi0gICJfUHlGbG9hdF9VbnBhY2s0IgotICAiX1B5RmxvYXRfVW5wYWNrOCIKLSAgIlB5RmxvYXRfRnJvbURvdWJsZSIKLSAgIlB5RmxvYXRfQXNSZXByU3RyaW5nIgotICAiUHlGbG9hdF9Bc1N0cmluZyIKLSAgIl9QeUZsb2F0X0luaXQiCi0gICJQeUZsb2F0X0FzU3RyaW5nRXgiCi0gICJQeUZsb2F0X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmcmFtZW9iamVjdCkKLSAgIlB5RnJhbWVfTmV3IgotICAiUHlGcmFtZV9GYXN0VG9Mb2NhbHMiCi0gICJQeUZyYW1lX0xvY2Fsc1RvRmFzdCIKLSAgIl9QeUZyYW1lX0luaXQiCi0gICJQeUZyYW1lX0ZpbmkiCi0gICJQeUZyYW1lX0Jsb2NrU2V0dXAiCi0gICJQeUZyYW1lX0Jsb2NrUG9wIgotICAiUHlGcmFtZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnVuY29iamVjdCkKLSAgIlB5RnVuY3Rpb25fTmV3IgotICAiUHlGdW5jdGlvbl9HZXRDb2RlIgotICAiUHlGdW5jdGlvbl9HZXRHbG9iYWxzIgotICAiUHlGdW5jdGlvbl9HZXRNb2R1bGUiCi0gICJQeUZ1bmN0aW9uX0dldERlZmF1bHRzIgotICAiUHlGdW5jdGlvbl9TZXREZWZhdWx0cyIKLSAgIlB5RnVuY3Rpb25fR2V0Q2xvc3VyZSIKLSAgIlB5RnVuY3Rpb25fU2V0Q2xvc3VyZSIKLSAgIlB5Q2xhc3NNZXRob2RfTmV3IgotICAiUHlTdGF0aWNNZXRob2RfTmV3IgotICAiUHlGdW5jdGlvbl9UeXBlIgotICAiUHlDbGFzc01ldGhvZF9UeXBlIgotICAiUHlTdGF0aWNNZXRob2RfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdlbm9iamVjdCkKLSAgIlB5R2VuX05ldyIKLSAgIlB5R2VuX05lZWRzRmluYWxpemluZyIKLSAgIlB5R2VuX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpbnRvYmplY3QpCi0gICJQeUludF9Bc0xvbmciCi0gICJQeUludF9Bc1Vuc2lnbmVkTG9uZ01hc2siCi0gICJQeUludF9Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrIgotICAiUHlJbnRfRnJvbVN0cmluZyIKLSAgIlB5SW50X0FzU3NpemVfdCIKLSAgIlB5SW50X0ZpbmkiCi0gICJQeUludF9Gcm9tVW5pY29kZSIKLSAgIlB5SW50X0Zyb21Mb25nIgotICAiUHlJbnRfRnJvbVNpemVfdCIKLSAgIlB5SW50X0Zyb21Tc2l6ZV90IgotICAiUHlJbnRfR2V0TWF4IgotICAiX1B5SW50X0luaXQiCi0gICJQeUludF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaXRlcm9iamVjdCkKLSAgIlB5U2VxSXRlcl9OZXciCi0gICJQeUNhbGxJdGVyX05ldyIKLSAgIlB5U2VxSXRlcl9UeXBlIgotICAiUHlDYWxsSXRlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobGlzdG9iamVjdCkKLSAgIlB5TGlzdF9OZXciCi0gICJQeUxpc3RfQXBwZW5kIgotICAiUHlMaXN0X1NpemUiCi0gICJQeUxpc3RfR2V0SXRlbSIKLSAgIlB5TGlzdF9TZXRJdGVtIgotICAiUHlMaXN0X0luc2VydCIKLSAgIlB5TGlzdF9HZXRTbGljZSIKLSAgIlB5TGlzdF9TZXRTbGljZSIKLSAgIlB5TGlzdF9Tb3J0IgotICAiUHlMaXN0X1JldmVyc2UiCi0gICJQeUxpc3RfQXNUdXBsZSIKLSAgIl9QeUxpc3RfRXh0ZW5kIgotICAiUHlMaXN0X0ZpbmkiCi0gICJQeUxpc3RfVHlwZSIKLSAgIlB5TGlzdEl0ZXJfVHlwZSIKLSAgIlB5TGlzdFJldkl0ZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGxvbmdvYmplY3QpCi0gICJQeUxvbmdfRnJvbURvdWJsZSIKLSAgIlB5TG9uZ19Bc0xvbmciCi0gICJfUHlMb25nX0FzU3NpemVfdCIKLSAgIlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyIKLSAgIl9QeUxvbmdfRnJvbUJ5dGVBcnJheSIKLSAgIl9QeUxvbmdfQXNCeXRlQXJyYXkiCi0gICJQeUxvbmdfQXNEb3VibGUiCi0gICJQeUxvbmdfRnJvbUxvbmdMb25nIgotICAiUHlMb25nX0FzTG9uZ0xvbmciCi0gICJQeUxvbmdfRnJvbVN0cmluZyIKLSAgIlB5TG9uZ19Gcm9tTG9uZyIKLSAgIlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nIgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayIKLSAgIl9QeUxvbmdfRnJvbVNpemVfdCIKLSAgIl9QeUxvbmdfRnJvbVNzaXplX3QiCi0gICJfUHlMb25nX0FzU2NhbGVkRG91YmxlIgotICAiUHlMb25nX0Zyb21Wb2lkUHRyIgotICAiUHlMb25nX0FzVm9pZFB0ciIKLSAgIlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZyIKLSAgIlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmciCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzayIKLSAgIlB5TG9uZ19Gcm9tVW5pY29kZSIKLSAgIl9QeUxvbmdfU2lnbiIKLSAgIl9QeUxvbmdfTnVtQml0cyIKLSAgIl9QeUxvbmdfTmV3IgotICAiX1B5TG9uZ19Db3B5IgotICAiUHlMb25nX1R5cGUiCi0gICJfUHlMb25nX0RpZ2l0VmFsdWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZXRob2RvYmplY3QpCi0gICJQeUNGdW5jdGlvbl9DYWxsIgotICAiUHlfRmluZE1ldGhvZEluQ2hhaW4iCi0gICJQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbiIKLSAgIlB5Q0Z1bmN0aW9uX0dldFNlbGYiCi0gICJQeUNGdW5jdGlvbl9HZXRGbGFncyIKLSAgIlB5X0ZpbmRNZXRob2QiCi0gICJQeUNGdW5jdGlvbl9OZXdFeCIKLSAgIlB5Q0Z1bmN0aW9uX0ZpbmkiCi0gICJQeUNGdW5jdGlvbl9OZXciCi0gICJQeUNGdW5jdGlvbl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobW9kdWxlb2JqZWN0KQotICAiUHlNb2R1bGVfTmV3IgotICAiX1B5TW9kdWxlX0NsZWFyIgotICAiUHlNb2R1bGVfR2V0RGljdCIKLSAgIlB5TW9kdWxlX0dldE5hbWUiCi0gICJQeU1vZHVsZV9HZXRGaWxlbmFtZSIKLSAgIlB5TW9kdWxlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihvYmplY3QpCi0gICJQeV9EaXZpc2lvbldhcm5pbmdGbGFnIgotICAiUHlPYmplY3RfU3RyIgotICAiUHlPYmplY3RfUmVwciIKLSAgIl9QeU9iamVjdF9TdHIiCi0gICJQeU9iamVjdF9Vbmljb2RlIgotICAiUHlPYmplY3RfR2V0QXR0ciIKLSAgIlB5T2JqZWN0X0lzVHJ1ZSIKLSAgIlB5TnVtYmVyX0NvZXJjZUV4IgotICAiUHlPYmplY3RfQ29tcGFyZSIKLSAgIlB5T2JqZWN0X1JpY2hDb21wYXJlIgotICAiX1B5X0hhc2hEb3VibGUiCi0gICJQeU9iamVjdF9IYXNoIgotICAiUHlPYmplY3RfU2V0QXR0ciIKLSAgIlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyIgotICAiUHlPYmplY3RfR2VuZXJpY1NldEF0dHIiCi0gICJQeUNhbGxhYmxlX0NoZWNrIgotICAiUHlPYmplY3RfRGlyIgotICAiUHlNZW1fTWFsbG9jIgotICAiUHlNZW1fUmVhbGxvYyIKLSAgIlB5TWVtX0ZyZWUiCi0gICJQeU9iamVjdF9QcmludCIKLSAgIl9QeU9iamVjdF9EdW1wIgotICAiUHlPYmplY3RfUmljaENvbXBhcmVCb29sIgotICAiUHlPYmplY3RfR2V0QXR0clN0cmluZyIKLSAgIlB5T2JqZWN0X1NldEF0dHJTdHJpbmciCi0gICJQeU9iamVjdF9IYXNBdHRyU3RyaW5nIgotICAiUHlPYmplY3RfSGFzQXR0ciIKLSAgIl9QeU9iamVjdF9HZXREaWN0UHRyIgotICAiUHlPYmplY3RfU2VsZkl0ZXIiCi0gICJQeU9iamVjdF9Ob3QiCi0gICJQeU51bWJlcl9Db2VyY2UiCi0gICJQeV9SZXByRW50ZXIiCi0gICJQeV9SZXByTGVhdmUiCi0gICJfUHlfSGFzaFBvaW50ZXIiCi0gICJQeV9JbmNSZWYiCi0gICJQeV9EZWNSZWYiCi0gICJfUHlUcmFzaF9kZXBvc2l0X29iamVjdCIKLSAgIl9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4iCi0gICJQeU9iamVjdF9Jbml0IgotICAiUHlPYmplY3RfSW5pdFZhciIKLSAgIl9QeU9iamVjdF9OZXciCi0gICJfUHlPYmplY3RfTmV3VmFyIgotICAiX1B5T2JqZWN0X0RlbCIKLSAgIl9QeV9SZWFkeVR5cGVzIgotICAiX1B5X1N3YXBwZWRPcCIKLSAgIl9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdCIKLSAgIl9QeV9Ob25lU3RydWN0IgotICAiX1B5X2NvYmplY3RfaGFjayIKLSAgIl9QeV9hYnN0cmFjdF9oYWNrIgotICAiX1B5VHJhc2hfZGVsZXRlX25lc3RpbmciCi0gICJfUHlUcmFzaF9kZWxldGVfbGF0ZXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihvYm1hbGxvYykKLSAgIlB5T2JqZWN0X01hbGxvYyIKLSAgIlB5T2JqZWN0X0ZyZWUiCi0gICJQeU9iamVjdF9SZWFsbG9jIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocmFuZ2VvYmplY3QpCi0gICJQeVJhbmdlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzZXRvYmplY3QpCi0gICJQeVNldF9Qb3AiCi0gICJQeVNldF9OZXciCi0gICJQeUZyb3plblNldF9OZXciCi0gICJQeVNldF9TaXplIgotICAiUHlTZXRfQ2xlYXIiCi0gICJQeVNldF9Db250YWlucyIKLSAgIlB5U2V0X0Rpc2NhcmQiCi0gICJQeVNldF9BZGQiCi0gICJfUHlTZXRfTmV4dCIKLSAgIl9QeVNldF9VcGRhdGUiCi0gICJQeVNldF9GaW5pIgotICAiUHlTZXRfVHlwZSIKLSAgIlB5RnJvemVuU2V0X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzbGljZW9iamVjdCkKLSAgIl9QeVNsaWNlX0Zyb21JbmRpY2VzIgotICAiUHlTbGljZV9HZXRJbmRpY2VzIgotICAiUHlTbGljZV9HZXRJbmRpY2VzRXgiCi0gICJQeVNsaWNlX05ldyIKLSAgIl9QeV9FbGxpcHNpc09iamVjdCIKLSAgIlB5U2xpY2VfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN0cmluZ29iamVjdCkKLSAgIlB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplIgotICAiUHlTdHJpbmdfSW50ZXJuSW5QbGFjZSIKLSAgIlB5U3RyaW5nX0Zyb21TdHJpbmciCi0gICJQeVN0cmluZ19Gcm9tRm9ybWF0ViIKLSAgIlB5U3RyaW5nX0FzU3RyaW5nIgotICAiX1B5U3RyaW5nX1Jlc2l6ZSIKLSAgIlB5U3RyaW5nX0Zyb21Gb3JtYXQiCi0gICJQeVN0cmluZ19Bc0RlY29kZWRTdHJpbmciCi0gICJQeVN0cmluZ19Bc0VuY29kZWRTdHJpbmciCi0gICJQeVN0cmluZ19EZWNvZGVFc2NhcGUiCi0gICJQeVN0cmluZ19SZXByIgotICAiUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplIgotICAiX1B5U3RyaW5nX0Zvcm1hdExvbmciCi0gICJQeVN0cmluZ19Gb3JtYXQiCi0gICJfUHlfUmVsZWFzZUludGVybmVkU3RyaW5ncyIKLSAgIlB5U3RyaW5nX1NpemUiCi0gICJQeVN0cmluZ19Db25jYXQiCi0gICJQeVN0cmluZ19Db25jYXRBbmREZWwiCi0gICJfUHlTdHJpbmdfRXEiCi0gICJQeVN0cmluZ19JbnRlcm5JbW1vcnRhbCIKLSAgIlB5U3RyaW5nX0ludGVybkZyb21TdHJpbmciCi0gICJfUHlTdHJpbmdfSm9pbiIKLSAgIlB5U3RyaW5nX0RlY29kZSIKLSAgIlB5U3RyaW5nX0VuY29kZSIKLSAgIlB5U3RyaW5nX0FzRW5jb2RlZE9iamVjdCIKLSAgIlB5U3RyaW5nX0FzRGVjb2RlZE9iamVjdCIKLSAgIlB5U3RyaW5nX0ZpbmkiCi0gICJQeVN0cmluZ19UeXBlIgotICAiUHlCYXNlU3RyaW5nX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJ1Y3RzZXEpCi0gICJQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlIgotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9OZXciCi0gICJQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHR1cGxlb2JqZWN0KQotICAiUHlUdXBsZV9OZXciCi0gICJQeVR1cGxlX1BhY2siCi0gICJfUHlUdXBsZV9SZXNpemUiCi0gICJQeVR1cGxlX1NpemUiCi0gICJQeVR1cGxlX0dldEl0ZW0iCi0gICJQeVR1cGxlX1NldEl0ZW0iCi0gICJQeVR1cGxlX0dldFNsaWNlIgotICAiUHlUdXBsZV9GaW5pIgotICAiUHlUdXBsZV9UeXBlIgotICAiUHlUdXBsZUl0ZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHR5cGVvYmplY3QpCi0gICJQeVR5cGVfSXNTdWJ0eXBlIgotICAiX1B5VHlwZV9Mb29rdXAiCi0gICJQeVR5cGVfUmVhZHkiCi0gICJQeVR5cGVfR2VuZXJpY0FsbG9jIgotICAiX1B5T2JqZWN0X1Nsb3RDb21wYXJlIgotICAiUHlUeXBlX0dlbmVyaWNOZXciCi0gICJQeVR5cGVfVHlwZSIKLSAgIlB5QmFzZU9iamVjdF9UeXBlIgotICAiUHlTdXBlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodW5pY29kZW9iamVjdCkKLSAgIlB5VW5pY29kZVVDUzJfUmVzaXplIgotICAiUHlVbmljb2RlVUNTMl9Gcm9tT3JkaW5hbCIKLSAgIlB5VW5pY29kZVVDUzJfRnJvbU9iamVjdCIKLSAgIlB5VW5pY29kZVVDUzJfRnJvbUVuY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZSIKLSAgIlB5VW5pY29kZVVDUzJfR2V0RGVmYXVsdEVuY29kaW5nIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVVEY4IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVMYXRpbjEiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZUFTQ0lJIgotICAiUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0FzVVRGOFN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfQXNMYXRpbjFTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0FzQVNDSUlTdHJpbmciCi0gICJQeVVuaWNvZGVfRGVjb2RlVVRGNyIKLSAgIlB5VW5pY29kZV9FbmNvZGVVVEY3IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVVEY4U3RhdGVmdWwiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZVVURjgiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2U3RhdGVmdWwiCi0gICJQeVVuaWNvZGVVQ1MyX0FzVVRGMTZTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVuaWNvZGVFc2NhcGUiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZVJhd1VuaWNvZGVFc2NhcGUiCi0gICJfUHlVbmljb2RlX0RlY29kZVVuaWNvZGVJbnRlcm5hbCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVDaGFybWFwIgotICAiUHlVbmljb2RlVUNTMl9UcmFuc2xhdGVDaGFybWFwIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVEZWNpbWFsIgotICAiUHlVbmljb2RlVUNTMl9Db3VudCIKLSAgIlB5VW5pY29kZVVDUzJfRmluZCIKLSAgIlB5VW5pY29kZVVDUzJfSm9pbiIKLSAgIlB5VW5pY29kZVVDUzJfU3BsaXRsaW5lcyIKLSAgIlB5VW5pY29kZVVDUzJfQ29tcGFyZSIKLSAgIlB5VW5pY29kZVVDUzJfQ29udGFpbnMiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbmNhdCIKLSAgIl9QeVVuaWNvZGVfWFN0cmlwIgotICAiUHlVbmljb2RlVUNTMl9SZXBsYWNlIgotICAiUHlVbmljb2RlVUNTMl9TcGxpdCIKLSAgIlB5VW5pY29kZVVDUzJfUlNwbGl0IgotICAiUHlVbmljb2RlVUNTMl9Gb3JtYXQiCi0gICJfUHlVbmljb2RlVUNTMl9Jbml0IgotICAiX1B5VW5pY29kZVVDUzJfRmluaSIKLSAgIlB5VW5pY29kZVVDUzJfRnJvbVVuaWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0FzVW5pY29kZSIKLSAgIlB5VW5pY29kZVVDUzJfR2V0U2l6ZSIKLSAgIlB5VW5pY29kZVVDUzJfR2V0TWF4IgotICAiX1B5VW5pY29kZVVDUzJfQXNEZWZhdWx0RW5jb2RlZFN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfU2V0RGVmYXVsdEVuY29kaW5nIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZE9iamVjdCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTYiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZVVURjE2IgotICAiUHlVbmljb2RlVUNTMl9Bc1VuaWNvZGVFc2NhcGVTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZVVuaWNvZGVFc2NhcGUiCi0gICJQeVVuaWNvZGVVQ1MyX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlTGF0aW4xIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVBU0NJSSIKLSAgIlB5VW5pY29kZVVDUzJfQXNDaGFybWFwU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9QYXJ0aXRpb24iCi0gICJQeVVuaWNvZGVVQ1MyX1JQYXJ0aXRpb24iCi0gICJQeVVuaWNvZGVVQ1MyX1RyYW5zbGF0ZSIKLSAgIlB5VW5pY29kZVVDUzJfVGFpbG1hdGNoIgotICAiUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdCIKLSAgIlB5VW5pY29kZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodW5pY29kZWN0eXBlKQotICAiX1B5VW5pY29kZV9UeXBlUmVjb3JkcyIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvTnVtZXJpYyIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzTG93ZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNVcHBlcmNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc1RpdGxlY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzV2hpdGVzcGFjZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzTGluZWJyZWFrIgotICAiX1B5VW5pY29kZVVDUzJfVG9Mb3dlcmNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Ub1VwcGVyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvVGl0bGVjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfVG9EZWNpbWFsRGlnaXQiCi0gICJfUHlVbmljb2RlVUNTMl9Ub0RpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfSXNEZWNpbWFsRGlnaXQiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0RpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfSXNOdW1lcmljIgotICAiX1B5VW5pY29kZVVDUzJfSXNBbHBoYSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHdlYWtyZWZvYmplY3QpCi0gICJQeVdlYWtyZWZfTmV3UmVmIgotICAiUHlXZWFrcmVmX05ld1Byb3h5IgotICAiUHlPYmplY3RfQ2xlYXJXZWFrUmVmcyIKLSAgIlB5V2Vha3JlZl9HZXRPYmplY3QiCi0gICJfUHlXZWFrcmVmX0dldFdlYWtyZWZDb3VudCIKLSAgIl9QeVdlYWtyZWZfQ2xlYXJSZWYiCi0gICJfUHlXZWFrcmVmX1JlZlR5cGUiCi0gICJfUHlXZWFrcmVmX1Byb3h5VHlwZSIKLSAgIl9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihQeXRob24tYXN0KQotOyAgImluaXRfYXN0IgotICAiTW9kdWxlIgotICAiSW50ZXJhY3RpdmUiCi0gICJFeHByZXNzaW9uIgotICAiU3VpdGUiCi0gICJGdW5jdGlvbkRlZiIKLSAgIkNsYXNzRGVmIgotICAiUmV0dXJuIgotICAiRGVsZXRlIgotICAiQXNzaWduIgotICAiQXVnQXNzaWduIgotICAiUHJpbnQiCi0gICJGb3IiCi0gICJXaGlsZSIKLSAgIklmIgotICAiV2l0aCIKLSAgIlJhaXNlIgotICAiVHJ5RXhjZXB0IgotICAiVHJ5RmluYWxseSIKLSAgIkFzc2VydCIKLSAgIkltcG9ydCIKLSAgIkltcG9ydEZyb20iCi0gICJFeGVjIgotICAiR2xvYmFsIgotICAiRXhwciIKLSAgIlBhc3MiCi0gICJCcmVhayIKLSAgIkNvbnRpbnVlIgotICAiQm9vbE9wIgotICAiQmluT3AiCi0gICJVbmFyeU9wIgotICAiTGFtYmRhIgotICAiSWZFeHAiCi0gICJEaWN0IgotICAiTGlzdENvbXAiCi0gICJHZW5lcmF0b3JFeHAiCi0gICJZaWVsZCIKLSAgIkNvbXBhcmUiCi0gICJDYWxsIgotICAiUmVwciIKLSAgIk51bSIKLSAgIlN0ciIKLSAgIkF0dHJpYnV0ZSIKLSAgIlN1YnNjcmlwdCIKLSAgIk5hbWUiCi0gICJMaXN0IgotICAiVHVwbGUiCi0gICJFbGxpcHNpcyIKLSAgIlNsaWNlIgotICAiRXh0U2xpY2UiCi0gICJJbmRleCIKLSAgImNvbXByZWhlbnNpb24iCi0gICJleGNlcHRoYW5kbGVyIgotICAiYXJndW1lbnRzIgotICAia2V5d29yZCIKLSAgImFsaWFzIgotICAiUHlBU1RfbW9kMm9iaiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFzZGwpCi0gICJhc2RsX3NlcV9uZXciCi0gICJhc2RsX2ludF9zZXFfbmV3IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYXN0KQotICAiUHlBU1RfRnJvbU5vZGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihibHRpbm1vZHVsZSkKLSAgIl9QeUJ1aWx0aW5fSW5pdCIKLSAgIlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihleGNlcHRpb25zKQotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZCIKLSAgIl9QeUV4Y19Jbml0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlIgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfQ3JlYXRlIgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfQ3JlYXRlIgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZyIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0IgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0IgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kIgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kIgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kIgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uIgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uIgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uIgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uIgotICAiX1B5RXhjX0ZpbmkiCi0gICJQeUV4Y19CYXNlRXhjZXB0aW9uIgotICAiUHlFeGNfRXhjZXB0aW9uIgotICAiUHlFeGNfU3RhbmRhcmRFcnJvciIKLSAgIlB5RXhjX1R5cGVFcnJvciIKLSAgIlB5RXhjX1N0b3BJdGVyYXRpb24iCi0gICJQeUV4Y19HZW5lcmF0b3JFeGl0IgotICAiUHlFeGNfU3lzdGVtRXhpdCIKLSAgIlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IgotICAiUHlFeGNfSW1wb3J0RXJyb3IiCi0gICJQeUV4Y19FbnZpcm9ubWVudEVycm9yIgotICAiUHlFeGNfSU9FcnJvciIKLSAgIlB5RXhjX09TRXJyb3IiCi0gICJQeUV4Y19FT0ZFcnJvciIKLSAgIlB5RXhjX1J1bnRpbWVFcnJvciIKLSAgIlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IiCi0gICJQeUV4Y19OYW1lRXJyb3IiCi0gICJQeUV4Y19VbmJvdW5kTG9jYWxFcnJvciIKLSAgIlB5RXhjX0F0dHJpYnV0ZUVycm9yIgotICAiUHlFeGNfSW5kZXhFcnJvciIKLSAgIlB5RXhjX1N5bnRheEVycm9yIgotICAiUHlFeGNfSW5kZW50YXRpb25FcnJvciIKLSAgIlB5RXhjX1RhYkVycm9yIgotICAiUHlFeGNfTG9va3VwRXJyb3IiCi0gICJQeUV4Y19LZXlFcnJvciIKLSAgIlB5RXhjX1ZhbHVlRXJyb3IiCi0gICJQeUV4Y19Vbmljb2RlRXJyb3IiCi0gICJQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IiCi0gICJQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IiCi0gICJQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3IiCi0gICJQeUV4Y19Bc3NlcnRpb25FcnJvciIKLSAgIlB5RXhjX0FyaXRobWV0aWNFcnJvciIKLSAgIlB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvciIKLSAgIlB5RXhjX092ZXJmbG93RXJyb3IiCi0gICJQeUV4Y19aZXJvRGl2aXNpb25FcnJvciIKLSAgIlB5RXhjX1N5c3RlbUVycm9yIgotICAiUHlFeGNfUmVmZXJlbmNlRXJyb3IiCi0gICJQeUV4Y19NZW1vcnlFcnJvciIKLSAgIlB5RXhjX1dhcm5pbmciCi0gICJQeUV4Y19Vc2VyV2FybmluZyIKLSAgIlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyIKLSAgIlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmciCi0gICJQeUV4Y19TeW50YXhXYXJuaW5nIgotICAiUHlFeGNfUnVudGltZVdhcm5pbmciCi0gICJQeUV4Y19GdXR1cmVXYXJuaW5nIgotICAiUHlFeGNfSW1wb3J0V2FybmluZyIKLSAgIlB5RXhjX01lbW9yeUVycm9ySW5zdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNldmFsKQotICAiUHlFdmFsX0V2YWxGcmFtZUV4IgotICAiUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMiCi0gICJQeUV2YWxfRXZhbENvZGVFeCIKLSAgIlB5RXZhbF9HZXRGcmFtZSIKLSAgIlB5RXZhbF9DYWxsT2JqZWN0IgotICAiUHlFdmFsX1NldFByb2ZpbGUiCi0gICJQeUV2YWxfU2V0VHJhY2UiCi0gICJQeUV2YWxfR2V0QnVpbHRpbnMiCi0gICJQeUV2YWxfR2V0R2xvYmFscyIKLSAgIlB5RXZhbF9HZXRMb2NhbHMiCi0gICJQeUV2YWxfR2V0UmVzdHJpY3RlZCIKLSAgIlB5RXZhbF9NZXJnZUNvbXBpbGVyRmxhZ3MiCi0gICJQeV9GbHVzaExpbmUiCi0gICJQeV9BZGRQZW5kaW5nQ2FsbCIKLSAgIlB5X01ha2VQZW5kaW5nQ2FsbHMiCi0gICJQeV9TZXRSZWN1cnNpb25MaW1pdCIKLSAgIlB5X0dldFJlY3Vyc2lvbkxpbWl0IgotICAiX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbCIKLSAgIlB5RXZhbF9HZXRGdW5jTmFtZSIKLSAgIlB5RXZhbF9HZXRGdW5jRGVzYyIKLSAgIlB5RXZhbF9HZXRDYWxsU3RhdHMiCi0gICJQeUV2YWxfRXZhbEZyYW1lIgotICAiUHlFdmFsX1NhdmVUaHJlYWQiCi0gICJQeUV2YWxfUmVzdG9yZVRocmVhZCIKLSAgIlB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQiCi0gICJQeUV2YWxfSW5pdFRocmVhZHMiCi0gICJQeUV2YWxfQWNxdWlyZUxvY2siCi0gICJQeUV2YWxfUmVsZWFzZUxvY2siCi0gICJQeUV2YWxfQWNxdWlyZVRocmVhZCIKLSAgIlB5RXZhbF9SZWxlYXNlVGhyZWFkIgotICAiUHlFdmFsX1JlSW5pdFRocmVhZHMiCi0gICJfUHlFdmFsX1NsaWNlSW5kZXgiCi0gICJQeUV2YWxfRXZhbENvZGUiCi0gICJfUHlFdmFsX0NhbGxUcmFjaW5nIgotICAiX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQiCi0gICJfUHlfQ2hlY2tJbnRlcnZhbCIKLSAgIl9QeV9UaWNrZXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb21waWxlKQotICAiX1B5X01hbmdsZSIKLSAgIlB5QVNUX0NvbXBpbGUiCi0gICJQeU5vZGVfQ29tcGlsZSIKLSAgIlB5X09wdGltaXplRmxhZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvZGVjcykKLSAgIl9QeUNvZGVjX0xvb2t1cCIKLSAgIlB5Q29kZWNfRW5jb2RlIgotICAiUHlDb2RlY19EZWNvZGUiCi0gICJQeUNvZGVjX0lnbm9yZUVycm9ycyIKLSAgIlB5Q29kZWNfUmVwbGFjZUVycm9ycyIKLSAgIlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMiCi0gICJQeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMiCi0gICJQeUNvZGVjX1JlZ2lzdGVyIgotICAiUHlDb2RlY19FbmNvZGVyIgotICAiUHlDb2RlY19EZWNvZGVyIgotICAiUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIiCi0gICJQeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlciIKLSAgIlB5Q29kZWNfU3RyZWFtUmVhZGVyIgotICAiUHlDb2RlY19TdHJlYW1Xcml0ZXIiCi0gICJQeUNvZGVjX1JlZ2lzdGVyRXJyb3IiCi0gICJQeUNvZGVjX0xvb2t1cEVycm9yIgotICAiUHlDb2RlY19TdHJpY3RFcnJvcnMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihlcnJvcnMpCi0gICJQeUVycl9TZXROb25lIgotICAiUHlFcnJfU2V0U3RyaW5nIgotICAiUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzIgotICAiUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uIgotICAiUHlFcnJfRmV0Y2giCi0gICJQeUVycl9DbGVhciIKLSAgIlB5RXJyX05vTWVtb3J5IgotICAiUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0IgotICAiUHlFcnJfRm9ybWF0IgotICAiUHlFcnJfTmV3RXhjZXB0aW9uIgotICAiUHlFcnJfV3JpdGVVbnJhaXNhYmxlIgotICAiUHlFcnJfU3ludGF4TG9jYXRpb24iCi0gICJQeUVycl9Qcm9ncmFtVGV4dCIKLSAgIlB5RXJyX1NldE9iamVjdCIKLSAgIlB5RXJyX09jY3VycmVkIgotICAiUHlFcnJfUmVzdG9yZSIKLSAgIlB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMiCi0gICJQeUVycl9CYWRBcmd1bWVudCIKLSAgIlB5RXJyX1NldEZyb21FcnJubyIKLSAgIlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZSIKLSAgIlB5RXJyX0JhZEludGVybmFsQ2FsbCIKLSAgIl9QeUVycl9CYWRJbnRlcm5hbENhbGwiCi0gICJQeUVycl9XYXJuIgotICAiUHlFcnJfV2FybkV4cGxpY2l0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnJvemVuKQotICAiUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZyb3plbm1haW4pCi0gICJQeV9Gcm96ZW5NYWluIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnV0dXJlKQotICAiUHlGdXR1cmVfRnJvbUFTVCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGFyZ3MpCi0gICJQeUFyZ19QYXJzZSIKLSAgIl9QeUFyZ19QYXJzZV9TaXplVCIKLSAgIlB5QXJnX1BhcnNlVHVwbGUiCi0gICJfUHlBcmdfUGFyc2VUdXBsZV9TaXplVCIKLSAgIlB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyIKLSAgIl9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQiCi0gICJQeUFyZ19VbnBhY2tUdXBsZSIKLSAgIl9QeUFyZ19Ob0tleXdvcmRzIgotICAiUHlBcmdfVmFQYXJzZSIKLSAgIlB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzIgotICAiX1B5QXJnX1ZhUGFyc2VfU2l6ZVQiCi0gICJfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRjb21waWxlcikKLSAgIlB5X0dldENvbXBpbGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0Y29weXJpZ2h0KQotICAiUHlfR2V0Q29weXJpZ2h0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0cGxhdGZvcm0pCi0gICJQeV9HZXRQbGF0Zm9ybSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldHZlcnNpb24pCi0gICJQeV9HZXRWZXJzaW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ3JhbWluaXQpCi0gICJfUHlQYXJzZXJfR3JhbW1hciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGltcG9ydCkKLSAgIl9QeUltcG9ydF9Jbml0IgotICAiX1B5SW1wb3J0SG9va3NfSW5pdCIKLSAgIlB5SW1wb3J0X0ltcG9ydE1vZHVsZSIKLSAgIlB5SW1wb3J0X0NsZWFudXAiCi0gICJfUHlJbXBvcnRfRml4dXBFeHRlbnNpb24iCi0gICJQeUltcG9ydF9BZGRNb2R1bGUiCi0gICJQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4IgotICAiUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlIgotICAiUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgiCi0gICJQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbCIKLSAgIlB5SW1wb3J0X1JlbG9hZE1vZHVsZSIKLSAgIlB5SW1wb3J0X0ltcG9ydCIKLTsgICJpbml0aW1wIgotICAiX1B5SW1wb3J0X0ZpbmkiCi0gICJQeUltcG9ydF9HZXRNYWdpY051bWJlciIKLSAgIlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlIgotICAiUHlJbXBvcnRfR2V0TW9kdWxlRGljdCIKLSAgIl9QeUltcG9ydF9GaW5kTW9kdWxlIgotICAiX1B5SW1wb3J0X0lzU2NyaXB0IgotICAiX1B5SW1wb3J0X1JlSW5pdExvY2siCi0gICJfUHlJbXBvcnRfRmluZEV4dGVuc2lvbiIKLSAgIlB5SW1wb3J0X0FwcGVuZEluaXR0YWIiCi0gICJQeUltcG9ydF9FeHRlbmRJbml0dGFiIgotICAiUHlJbXBvcnRfSW5pdHRhYiIKLSAgIl9QeUltcG9ydF9GaWxldGFiIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW1wb3J0ZGwpCi0gICJfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtYXJzaGFsKQotICAiUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUiCi0gICJQeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZyIKLSAgIlB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUiCi0gICJQeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGUiCi0gICJQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUiCi0gICJQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGUiCi0gICJQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmciCi0gICJQeU1hcnNoYWxfSW5pdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1vZHN1cHBvcnQpCi0gICJQeV9Jbml0TW9kdWxlNCIKLSAgIlB5X0J1aWxkVmFsdWUiCi0gICJfUHlfQnVpbGRWYWx1ZV9TaXplVCIKLSAgIlB5RXZhbF9DYWxsRnVuY3Rpb24iCi0gICJQeUV2YWxfQ2FsbE1ldGhvZCIKLSAgIl9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQiCi0gICJQeV9WYUJ1aWxkVmFsdWUiCi0gICJQeU1vZHVsZV9BZGRPYmplY3QiCi0gICJQeU1vZHVsZV9BZGRJbnRDb25zdGFudCIKLSAgIlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50IgotICAiX1B5X1BhY2thZ2VDb250ZXh0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobXlzbnByaW50ZikKLSAgIlB5T1Nfc25wcmludGYiCi0gICJQeU9TX3ZzbnByaW50ZiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG15c3RydG91bCkKLSAgIlB5T1Nfc3RydG91bCIKLSAgIlB5T1Nfc3RydG9sIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocHlhcmVuYSkKLSAgIlB5QXJlbmFfTmV3IgotICAiUHlBcmVuYV9GcmVlIgotICAiUHlBcmVuYV9NYWxsb2MiCi0gICJQeUFyZW5hX0FkZFB5T2JqZWN0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocHlmcGUpCi0gICJQeUZQRV9kdW1teSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5c3RhdGUpCi0gICJQeUludGVycHJldGVyU3RhdGVfQ2xlYXIiCi0gICJQeVRocmVhZFN0YXRlX0NsZWFyIgotICAiX1B5VGhyZWFkX0N1cnJlbnRGcmFtZXMiCi0gICJQeUdJTFN0YXRlX0Vuc3VyZSIKLSAgIlB5R0lMU3RhdGVfUmVsZWFzZSIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXciCi0gICJQeUludGVycHJldGVyU3RhdGVfRGVsZXRlIgotICAiUHlUaHJlYWRTdGF0ZV9EZWxldGUiCi0gICJQeVRocmVhZFN0YXRlX05ldyIKLSAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCIKLSAgIlB5VGhyZWFkU3RhdGVfR2V0IgotICAiUHlUaHJlYWRTdGF0ZV9Td2FwIgotICAiUHlUaHJlYWRTdGF0ZV9HZXREaWN0IgotICAiUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YyIKLSAgIlB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlIgotICAiUHlJbnRlcnByZXRlclN0YXRlX0hlYWQiCi0gICJQeUludGVycHJldGVyU3RhdGVfTmV4dCIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9UaHJlYWRIZWFkIgotICAiUHlUaHJlYWRTdGF0ZV9OZXh0IgotICAiX1B5R0lMU3RhdGVfSW5pdCIKLSAgIl9QeUdJTFN0YXRlX0ZpbmkiCi0gICJfUHlUaHJlYWRTdGF0ZV9DdXJyZW50IgotICAiX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweXRob25ydW4pCi0gICJQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWciCi0gICJQeV9EZWJ1Z0ZsYWciCi0gICJQeV9WZXJib3NlRmxhZyIKLSAgIlB5X05vU2l0ZUZsYWciCi0gICJQeV9JbnRlcmFjdGl2ZUZsYWciCi0gICJQeV9Gcm96ZW5GbGFnIgotICAiUHlfSW5pdGlhbGl6ZUV4IgotICAiUHlfRmF0YWxFcnJvciIKLSAgIlB5X05ld0ludGVycHJldGVyIgotICAiUHlFcnJfUHJpbnQiCi0gICJQeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzIgotICAiUHlQYXJzZXJfQVNURnJvbUZpbGUiCi0gICJQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncyIKLSAgIlB5UnVuX0ZpbGVFeEZsYWdzIgotICAiUHlfRXhpdCIKLSAgIlB5RXJyX1ByaW50RXgiCi0gICJQeUVycl9EaXNwbGF5IgotICAiUHlfU2V0UHJvZ3JhbU5hbWUiCi0gICJQeV9HZXRQcm9ncmFtTmFtZSIKLSAgIlB5X1NldFB5dGhvbkhvbWUiCi0gICJQeV9HZXRQeXRob25Ib21lIgotICAiUHlfSW5pdGlhbGl6ZSIKLSAgIlB5X0ZpbmFsaXplIgotICAiUHlfSXNJbml0aWFsaXplZCIKLSAgIlB5X0VuZEludGVycHJldGVyIgotICAiUHlSdW5fQW55RmlsZUZsYWdzIgotICAiUHlfRmRJc0ludGVyYWN0aXZlIgotICAiUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MiCi0gICJQeVJ1bl9BbnlGaWxlRXhGbGFncyIKLSAgIlB5UnVuX1NpbXBsZVN0cmluZ0ZsYWdzIgotICAiUHlSdW5fU3RyaW5nRmxhZ3MiCi0gICJQeVBhcnNlcl9BU1RGcm9tU3RyaW5nIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncyIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzIgotICAiUHlfQ29tcGlsZVN0cmluZ0ZsYWdzIgotICAiUHlfU3ltdGFibGVTdHJpbmciCi0gICJQeV9BdEV4aXQiCi0gICJQeU9TX2dldHNpZyIKLSAgIlB5T1Nfc2V0c2lnIgotICAiUHlQYXJzZXJfU2V0RXJyb3IiCi0gICJQeU1vZHVsZV9HZXRXYXJuaW5nc01vZHVsZSIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZSIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmlsZW5hbWUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZyIKLSAgIlB5UnVuX0FueUZpbGUiCi0gICJQeVJ1bl9BbnlGaWxlRXgiCi0gICJQeVJ1bl9GaWxlIgotICAiUHlSdW5fRmlsZUV4IgotICAiUHlSdW5fRmlsZUZsYWdzIgotICAiUHlSdW5fU2ltcGxlRmlsZSIKLSAgIlB5UnVuX1NpbXBsZUZpbGVFeCIKLSAgIlB5UnVuX1N0cmluZyIKLSAgIlB5UnVuX1NpbXBsZVN0cmluZyIKLSAgIlB5X0NvbXBpbGVTdHJpbmciCi0gICJQeVJ1bl9JbnRlcmFjdGl2ZU9uZSIKLSAgIlB5UnVuX0ludGVyYWN0aXZlTG9vcCIKLSAgIlB5X1VzZUNsYXNzRXhjZXB0aW9uc0ZsYWciCi0gICJQeV9Vbmljb2RlRmxhZyIKLSAgIl9QeV9RbmV3RmxhZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN0cnVjdG1lbWJlcikKLSAgIlB5TWVtYmVyX0dldCIKLSAgIlB5TWVtYmVyX0dldE9uZSIKLSAgIlB5TWVtYmVyX1NldE9uZSIKLSAgIlB5TWVtYmVyX1NldCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN5bXRhYmxlKQotICAiUHlTeW10YWJsZV9CdWlsZCIKLSAgIlB5U3ltdGFibGVfRnJlZSIKLSAgIlB5U1RfR2V0U2NvcGUiCi0gICJQeVN5bXRhYmxlX0xvb2t1cCIKLSAgIlB5U1RFbnRyeV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3lzbW9kdWxlKQotICAiX1B5U3lzX0luaXQiCi0gICJQeVN5c19Xcml0ZVN0ZGVyciIKLSAgIlB5U3lzX1NldFBhdGgiCi0gICJQeVN5c19TZXRBcmd2IgotICAiUHlTeXNfV3JpdGVTdGRvdXQiCi0gICJQeV9TdWJ2ZXJzaW9uUmV2aXNpb24iCi0gICJQeV9TdWJ2ZXJzaW9uU2hvcnRCcmFuY2giCi0gICJQeVN5c19HZXRPYmplY3QiCi0gICJQeVN5c19TZXRPYmplY3QiCi0gICJQeVN5c19HZXRGaWxlIgotICAiUHlTeXNfUmVzZXRXYXJuT3B0aW9ucyIKLSAgIlB5U3lzX0FkZFdhcm5PcHRpb24iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0cmFjZWJhY2spCi0gICJQeVRyYWNlQmFja19IZXJlIgotICAiUHlUcmFjZUJhY2tfUHJpbnQiCi0gICJQeVRyYWNlQmFja19UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0b3B0KQotICAiX1B5T1NfR2V0T3B0IgotICAiX1B5T1Nfb3B0ZXJyIgotICAiX1B5T1Nfb3B0aW5kIgotICAiX1B5T1Nfb3B0YXJnIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZHlubG9hZF9zaGxpYikKLSAgIl9QeUltcG9ydF9EeW5Mb2FkRmlsZXRhYiIKLSAgIl9QeUltcG9ydF9HZXREeW5Mb2FkRnVuYyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRocmVhZCkKLSAgIlB5VGhyZWFkX2RlbGV0ZV9rZXlfdmFsdWUiCi0gICJQeVRocmVhZF9pbml0X3RocmVhZCIKLSAgIlB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQiCi0gICJQeVRocmVhZF9leGl0X3RocmVhZCIKLSAgIlB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQiCi0gICJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrIgotICAiUHlUaHJlYWRfZnJlZV9sb2NrIgotICAiUHlUaHJlYWRfYWNxdWlyZV9sb2NrIgotICAiUHlUaHJlYWRfcmVsZWFzZV9sb2NrIgotICAiUHlUaHJlYWRfZ2V0X3N0YWNrc2l6ZSIKLSAgIlB5VGhyZWFkX3NldF9zdGFja3NpemUiCi0gICJQeVRocmVhZF9jcmVhdGVfa2V5IgotICAiUHlUaHJlYWRfZGVsZXRlX2tleSIKLSAgIlB5VGhyZWFkX3NldF9rZXlfdmFsdWUiCi0gICJQeVRocmVhZF9nZXRfa2V5X3ZhbHVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2Ntb2R1bGUpCi07ICAiaW5pdGdjIgotICAiX1B5T2JqZWN0X0dDX05ldyIKLSAgIl9QeU9iamVjdF9HQ19OZXdWYXIiCi0gICJQeUdDX0NvbGxlY3QiCi0gICJfUHlPYmplY3RfR0NfUmVzaXplIgotICAiX1B5T2JqZWN0X0dDX01hbGxvYyIKLSAgIlB5T2JqZWN0X0dDX1RyYWNrIgotICAiUHlPYmplY3RfR0NfVW5UcmFjayIKLSAgIlB5T2JqZWN0X0dDX0RlbCIKLSAgIl9QeUdDX0R1bXAiCi0gICJfUHlPYmplY3RfR0NfVHJhY2siCi0gICJfUHlPYmplY3RfR0NfVW5UcmFjayIKLSAgIl9QeU9iamVjdF9HQ19EZWwiCi0gICJfUHlHQ19nZW5lcmF0aW9uMCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNpZ25hbG1vZHVsZSkKLTsgICJpbml0c2lnbmFsIgotICAiUHlFcnJfQ2hlY2tTaWduYWxzIgotICAiUHlFcnJfU2V0SW50ZXJydXB0IgotICAiUHlPU19GaW5pSW50ZXJydXB0cyIKLSAgIlB5T1NfSW50ZXJydXB0T2NjdXJyZWQiCi0gICJQeU9TX0luaXRJbnRlcnJ1cHRzIgotICAiUHlPU19BZnRlckZvcmsiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihwb3NpeG1vZHVsZSkKLTsgICJpbml0b3MyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3RocmVhZG1vZHVsZSkKLTsgICJpbml0X3RocmVhZCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFycmF5bW9kdWxlKQotOyAgImluaXRhcnJheSIKLTsgICJhcnJheV9tZXRob2RzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYmluYXNjaWkpCi07ICAiaW5pdGJpbmFzY2lpIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY21hdGhtb2R1bGUpCi07ICAiaW5pdGNtYXRoIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2NvZGVjc21vZHVsZSkKLTsgICJpbml0X2NvZGVjcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbGxlY3Rpb25zbW9kdWxlKQotOyAgImluaXRjb2xsZWN0aW9ucyIKLSAgImRlcXVlaXRlcl90eXBlIgotICAiZGVxdWVyZXZpdGVyX3R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjUGlja2xlKQotOyAgImluaXRjUGlja2xlIgotOyAgImZhc3Rfc2F2ZV9sZWF2ZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9jc3YpCi07ICAiaW5pdF9jc3YiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkYXRldGltZW1vZHVsZSkKLTsgICJpbml0ZGF0ZXRpbWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkbG1vZHVsZSkKLTsgICJpbml0ZGwiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihlcnJub21vZHVsZSkKLTsgICJpbml0ZXJybm8iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmY250bG1vZHVsZSkKLTsgICJpbml0ZmNudGwiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfZnVuY3Rvb2xzbW9kdWxlKQotOyAgImluaXRfZnVuY3Rvb2xzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2hlYXBxbW9kdWxlKQotOyAgImluaXRfaGVhcHEiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpbWFnZW9wKQotOyAgImluaXRpbWFnZW9wIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaXRlcnRvb2xzbW9kdWxlKQotOyAgImluaXRpdGVydG9vbHMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfbG9jYWxlbW9kdWxlKQotOyAgImluaXRfbG9jYWxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWF0aG1vZHVsZSkKLTsgICJpbml0bWF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1kNSkKLSAgIm1kNV9maW5pc2giCi0gICJtZDVfaW5pdCIKLSAgIm1kNV9hcHBlbmQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZDVtb2R1bGUpCi07ICAiaW5pdF9tZDUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihvcGVyYXRvcikKLTsgICJpbml0b3BlcmF0b3IiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfcmFuZG9tbW9kdWxlKQotOyAgImluaXRfcmFuZG9tIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocmdiaW1nbW9kdWxlKQotOyAgImluaXRyZ2JpbWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzaGFtb2R1bGUpCi07ICAiaW5pdF9zaGEiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzaGEyNTZtb2R1bGUpCi07ICAiaW5pdF9zaGEyNTYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzaGE1MTJtb2R1bGUpCi07ICAiaW5pdF9zaGE1MTIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfc3JlKQotOyAgImluaXRfc3JlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3Ryb3Btb2R1bGUpCi07ICAiaW5pdHN0cm9wIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3N0cnVjdCkKLTsgICJpbml0X3N0cnVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN5bXRhYmxlbW9kdWxlKQotOyAgImluaXRfc3ltdGFibGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0ZXJtaW9zKQotOyAgImluaXR0ZXJtaW9zIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGltZW1vZHVsZSkKLTsgICJpbml0dGltZSIKLSAgIl9QeVRpbWVfRG91YmxlVG9UaW1ldCIKLTsgICJpbml0dGltZXpvbmUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0aW1pbmdtb2R1bGUpCi07ICAiaW5pdHRpbWluZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF93ZWFrcmVmKQotOyAgImluaXRfd2Vha3JlZiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHh4c3VidHlwZSkKLTsgICJpbml0eHhzdWJ0eXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoemlwaW1wb3J0KQotOyAgImluaXR6aXBpbXBvcnQiCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvcHl0aG9ucG0uYyBiL1BDL29zMmVteC9weXRob25wbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTQ3ZjRiLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9weXRob25wbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qIE9TLzIgUE0gbWFpbiBwcm9ncmFtIC0gY3JlYXRlcyBhIGhpZGRlbiB3aW5kb3csIGFuZCBzdGFydHMgUHl0aG9uCi0gKiBpbnRlcnByZXRlciBpbiBhIHNlcGFyYXRlIHRocmVhZCwgc28gdGhhdCBQeXRob24gc2NyaXB0cyBjYW4gYmUKLSAqIHJ1biBpbiBQTSBwcm9jZXNzIHNwYWNlIHdpdGhvdXQgYSBjb25zb2xlIFdpbmRvdy4gIFRoZSBpbnRlcnByZXRlcgotICogaXMgaW5jb3Jwb3JhdGVkIGJ5IGxpbmtpbmcgaW4gdGhlIFB5dGhvbiBETEwuCi0gKgotICogQXMgaXQgc3RhbmRzLCBJIGRvbid0IHRoaW5rIHRoaXMgaXMgYWRlcXVhdGUgZm9yIHN1cHBvcnRpbmcgUHl0aG9uCi0gKiBHVUkgbW9kdWxlcywgYXMgdGhlIFB5dGhvbiB0aHJlYWQgZG9lc24ndCBoYXZlIGl0cyBvd24gbWVzc2FnZQotICogcXVldWUgLSB3aGljaCBpcyByZXF1aXJlZCBvZiB0aHJlYWRzIHRoYXQgd2FudCB0byBjcmVhdGUvdXNlCi0gKiBQTSB3aW5kb3dzLgotICoKLSAqIFRoaXMgY29kZSBvd2VzIGEgbG90IHRvICJPUy8yIFByZXNlbnRhdGlvbiBNYW5hZ2VyIFByb2dyYW1taW5nIiwgYnkKLSAqIENoYXJsZXMgUGV0em9sZC4KLSAqCi0gKiBBbmRyZXcgTWFjSW50eXJlIDxhbmR5bWFjQGJ1bGxzZXllLmFwYW5hLm9yZy5hdT4sIEF1Z3VzdCAyMDAxLgotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBQeXRob24gMi4xLjEgbGljZW5jZSAtIHNlZSB0aGUgTElDRU5DRQotICogZmlsZSBpbiB0aGUgUHl0aG9uIHYyLjEuMSAob3IgbGF0ZXIpIHNvdXJjZSBkaXN0cmlidXRpb24uCi0gKiBDb3B5cmlnaHQgYXNzaWduZWQgdG8gdGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCAyMDAxLgotICovCi0KLSNkZWZpbmUgSU5DTF9ET1MKLSNkZWZpbmUgSU5DTF9XSU4KLSNpbmNsdWRlIDxvczIuaD4KLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotLyogdXNlIHN0cnVjdHVyZSB0byBwYXNzIGNvbW1hbmQgbGluZSB0byBQeXRob24gdGhyZWFkICovCi10eXBlZGVmIHN0cnVjdAotewotICAgIGludCBhcmdjOwotICAgIGNoYXIgKiphcmd2OwotICAgIEhXTkQgRnJhbWU7Ci0gICAgaW50IHJ1bm5pbmc7Ci19IGFyZ2xpc3Q7Ci0KLS8qIG1ha2UgdGhpcyBhIGdsb2JhbCB0byBzaW1wbGlmeSBhY2Nlc3MuCi0gKiBpdCBzaG91bGQgb25seSBiZSBzZXQgZnJvbSB0aGUgUHl0aG9uIHRocmVhZCwgb3IgYnkgdGhlIGNvZGUgdGhhdAotICogaW5pdGlhdGVzIHRoZSBQeXRob24gdGhyZWFkIHdoZW4gdGhlIHRocmVhZCBjYW5ub3QgYmUgY3JlYXRlZC4KLSAqLwotaW50IFB5dGhvblJDOwotCi1leHRlcm4gRExfRVhQT1JUKGludCkgUHlfTWFpbihpbnQsIGNoYXIgKiopOwotdm9pZCBQeXRob25UaHJlYWQodm9pZCAqKTsKLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBVTE9ORyBGcmFtZUZsYWdzID0gRkNGX1RJVExFQkFSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1NZU01FTlUgfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfU0laRUJPUkRFUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9ISURFQlVUVE9OIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1NIRUxMUE9TSVRJT04gfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfVEFTS0xJU1Q7Ci0gICAgSEFCIGhhYjsKLSAgICBITVEgaG1xOwotICAgIEhXTkQgQ2xpZW50OwotICAgIFFNU0cgcW1zZzsKLSAgICBhcmdsaXN0IGFyZ3M7Ci0gICAgaW50IHB5dGhvbl90aWQ7Ci0KLSAgICAvKiBpbml0IFBNIGFuZCBjcmVhdGUgbWVzc2FnZSBxdWV1ZSAqLwotICAgIGhhYiA9IFdpbkluaXRpYWxpemUoMCk7Ci0gICAgaG1xID0gV2luQ3JlYXRlTXNnUXVldWUoaGFiLCAwKTsKLQotICAgIC8qIGNyZWF0ZSBhIChoaWRkZW4pIFdpbmRvdyB0byBob3VzZSB0aGUgd2luZG93IHByb2NlZHVyZSAqLwotICAgIGFyZ3MuRnJhbWUgPSBXaW5DcmVhdGVTdGRXaW5kb3coSFdORF9ERVNLVE9QLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGcmFtZUZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob25QTSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNsaWVudCk7Ci0KLSAgICAvKiBydW4gUHl0aG9uIGludGVycHJldGVyIGluIGEgdGhyZWFkICovCi0gICAgYXJncy5hcmdjID0gYXJnYzsKLSAgICBhcmdzLmFyZ3YgPSBhcmd2OwotICAgIGFyZ3MucnVubmluZyA9IDA7Ci0gICAgaWYgKC0xID09IChweXRob25fdGlkID0gX2JlZ2ludGhyZWFkKFB5dGhvblRocmVhZCwgTlVMTCwgMTAyNCAqIDEwMjQsICZhcmdzKSkpCi0gICAgewotICAgICAgICAvKiBjb3VsZG4ndCBzdGFydCB0aHJlYWQgKi8KLSAgICAgICAgV2luQWxhcm0oSFdORF9ERVNLVE9QLCBXQV9FUlJPUik7Ci0gICAgICAgIFB5dGhvblJDID0gMTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLyogcHJvY2VzcyBQTSBtZXNzYWdlcywgdW50aWwgUHl0aG9uIGV4aXRzICovCi0gICAgICAgIHdoaWxlIChXaW5HZXRNc2coaGFiLCAmcW1zZywgTlVMTEhBTkRMRSwgMCwgMCkpCi0gICAgICAgICAgICBXaW5EaXNwYXRjaE1zZyhoYWIsICZxbXNnKTsKLSAgICAgICAgaWYgKGFyZ3MucnVubmluZyA+IDApCi0gICAgICAgICAgICBEb3NLaWxsVGhyZWFkKHB5dGhvbl90aWQpOwotICAgIH0KLQotICAgIC8qIGRlc3Ryb3kgd2luZG93LCBzaHV0ZG93biBtZXNzYWdlIHF1ZXVlIGFuZCBQTSAqLwotICAgIFdpbkRlc3Ryb3lXaW5kb3coYXJncy5GcmFtZSk7Ci0gICAgV2luRGVzdHJveU1zZ1F1ZXVlKGhtcSk7Ci0gICAgV2luVGVybWluYXRlKGhhYik7Ci0KLSAgICByZXR1cm4gUHl0aG9uUkM7Ci19Ci0KLXZvaWQgUHl0aG9uVGhyZWFkKHZvaWQgKmFyZ2wpCi17Ci0gICAgSEFCIGhhYjsKLSAgICBhcmdsaXN0ICphcmdzOwotCi0gICAgLyogUE0gaW5pdGlhbGlzYXRpb24gKi8KLSAgICBoYWIgPSBXaW5Jbml0aWFsaXplKDApOwotCi0gICAgLyogc3RhcnQgUHl0aG9uICovCi0gICAgYXJncyA9IChhcmdsaXN0ICopYXJnbDsKLSAgICBhcmdzLT5ydW5uaW5nID0gMTsKLSAgICBQeXRob25SQyA9IFB5X01haW4oYXJncy0+YXJnYywgYXJncy0+YXJndik7Ci0KLSAgICAvKiBlbnRlciBhIGNyaXRpY2FsIHNlY3Rpb24gYW5kIHNlbmQgdGhlIHRlcm1pbmF0aW9uIG1lc3NhZ2UgKi8KLSAgICBEb3NFbnRlckNyaXRTZWMoKTsKLSAgICBhcmdzLT5ydW5uaW5nID0gMDsKLSAgICBXaW5Qb3N0TXNnKGFyZ3MtPkZyYW1lLCBXTV9RVUlULCBOVUxMLCBOVUxMKTsKLQotICAgIC8qIHNodXRkb3duIFBNIGFuZCB0ZXJtaW5hdGUgdGhyZWFkICovCi0gICAgV2luVGVybWluYXRlKGhhYik7Ci0gICAgX2VuZHRocmVhZCgpOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvX3RraW50ZXIuZGVmIGIvUEMvb3MydmFjcHAvX3RraW50ZXIuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWRhYjhkLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL190a2ludGVyLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTElCUkFSWSAgICAgICAgX1RLSU5URVIgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQotREVTQ1JJUFRJT04gICAgJ1B5dGhvbiBFeHRlbnNpb24gRExMIHYxLjAgZm9yIEFjY2VzcyB0byBUY2wvVGsgRW52aXJvbm1lbnQnCi1QUk9UTU9ERQotREFUQSAgICAgICAgICAgTVVMVElQTEUgTk9OU0hBUkVECi0KLUVYUE9SVFMKLSAgICAgICAgICAgICAgIGluaXRfdGtpbnRlcgotCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9jb25maWcuYyBiL1BDL29zMnZhY3BwL2NvbmZpZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjZiNTIxLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL2NvbmZpZy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyogLSotIEMgLSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgKGMpIDIwMDAsIEJlT3Blbi5jb20uCi1Db3B5cmlnaHQgKGMpIDE5OTUtMjAwMCwgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzLgotQ29weXJpZ2h0IChjKSAxOTkwLTE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bS4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVNlZSB0aGUgZmlsZSAiTWlzYy9DT1BZUklHSFQiIGZvciBpbmZvcm1hdGlvbiBvbiB1c2FnZSBhbmQKLXJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgYW5kIGZvciBhIERJU0NMQUlNRVIgT0YgQUxMIFdBUlJBTlRJRVMuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE1vZHVsZSBjb25maWd1cmF0aW9uICovCi0KLS8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgdGFibGUgb2YgYnVpbHQtaW4gbW9kdWxlcy4KLSAgIFNlZSBpbml0X2J1aWx0aW4oKSBpbiBpbXBvcnQuYy4gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi1leHRlcm4gdm9pZCBpbml0YXJyYXkodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0YXVkaW9vcCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRiaW5hc2NpaSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRjbWF0aCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRlcnJubyh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRpbWFnZW9wKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG1hdGgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0bWQ1KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG50KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG9zMih2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRvcGVyYXRvcih2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRwb3NpeCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRyZ2JpbWcodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0c2lnbmFsKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHNlbGVjdCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfc29ja2V0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHN0cnVjdCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXR0aW1lKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdF90aHJlYWQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cGNyZSh2b2lkKTsKLSNpZmRlZiBXSU4zMgotZXh0ZXJuIHZvaWQgaW5pdG1zdmNydCh2b2lkKTsKLSNlbmRpZgotCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDEgLS0gKi8KLQotZXh0ZXJuIHZvaWQgUHlNYXJzaGFsX0luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0aW1wKHZvaWQpOwotCi1zdHJ1Y3QgX2luaXR0YWIgX1B5SW1wb3J0X0luaXR0YWJbXSA9IHsKLQotICAgICAgICB7ImFycmF5IiwgaW5pdGFycmF5fSwKLSNpZmRlZiBNX0kzODYKLSAgICAgICAgeyJhdWRpb29wIiwgaW5pdGF1ZGlvb3B9LAotI2VuZGlmCi0gICAgICAgIHsiYmluYXNjaWkiLCBpbml0YmluYXNjaWl9LAotICAgICAgICB7ImNtYXRoIiwgaW5pdGNtYXRofSwKLSAgICAgICAgeyJlcnJubyIsIGluaXRlcnJub30sCi0vLyAgICAgICAgeyJpbWFnZW9wIiwgaW5pdGltYWdlb3B9LAotICAgICAgICB7Im1hdGgiLCBpbml0bWF0aH0sCi0gICAgICAgIHsibWQ1IiwgaW5pdG1kNX0sCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykKLSAgICAgICAgeyJudCIsIGluaXRudH0sIC8qIFVzZSB0aGUgTlQgb3MgZnVuY3Rpb25zLCBub3QgcG9zaXggKi8KLSNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAgICAgeyJvczIiLCBpbml0b3MyfSwKLSNlbHNlCi0gICAgICAgIHsicG9zaXgiLCBpbml0cG9zaXh9LAotI2VuZGlmCi0jZW5kaWYKLSAgICAgICAgeyJvcGVyYXRvciIsIGluaXRvcGVyYXRvcn0sCi0vLyAgICAgICAgeyJyZ2JpbWciLCBpbml0cmdiaW1nfSwKLSAgICAgICAgeyJzaWduYWwiLCBpbml0c2lnbmFsfSwKLSNpZmRlZiBVU0VfU09DS0VUCi0gICAgICAgIHsiX3NvY2tldCIsIGluaXRfc29ja2V0fSwKLSAgICAgICAgeyJzZWxlY3QiLCBpbml0c2VsZWN0fSwKLSNlbmRpZgotICAgICAgICB7InN0cnVjdCIsIGluaXRzdHJ1Y3R9LAotICAgICAgICB7InRpbWUiLCBpbml0dGltZX0sCi0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICAgICAgeyJfdGhyZWFkIiwgaW5pdF90aHJlYWR9LAotI2VuZGlmCi0gICAgICAgIHsicGNyZSIsIGluaXRwY3JlfSwKLSNpZmRlZiBXSU4zMgotICAgICAgICB7Im1zdmNydCIsIGluaXRtc3ZjcnR9LAotI2VuZGlmCi0KLS8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMiAtLSAqLwotCi0gICAgICAgIC8qIFRoaXMgbW9kdWxlICJsaXZlcyBpbiIgd2l0aCBtYXJzaGFsLmMgKi8KLSAgICAgICAgeyJtYXJzaGFsIiwgUHlNYXJzaGFsX0luaXR9LAotCi0gICAgICAgIC8qIFRoaXMgbGl2ZXMgaXQgd2l0aCBpbXBvcnQuYyAqLwotICAgICAgICB7Il9pbXAiLCBpbml0aW1wfSwKLQotICAgICAgICAvKiBUaGVzZSBlbnRyaWVzIGFyZSBoZXJlIGZvciBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMgKi8KLSAgICAgICAgeyJidWlsdGlucyIsIE5VTEx9LAotICAgICAgICB7InN5cyIsIE5VTEx9LAotCi0gICAgICAgIC8qIFNlbnRpbmVsICovCi0gICAgICAgIHswLCAwfQotfTsKZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL2dldHBhdGhwLmMgYi9QQy9vczJ2YWNwcC9nZXRwYXRocC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmMyODI3Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL2dldHBhdGhwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotCi0vKiBSZXR1cm4gdGhlIGluaXRpYWwgbW9kdWxlIHNlYXJjaCBwYXRoLiAqLwotLyogVXNlZCBieSBET1MsIE9TLzIsIFdpbmRvd3MgMy4xLiAgV29ya3Mgb24gTlQgdG9vLiAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAib3NkZWZzLmgiCi0KLSNpZmRlZiBNU19XSU4zMgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLWV4dGVybiBCT09MIFB5V2luX0lzV2luMzJzKHZvaWQpOwotI2VuZGlmCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KLQotLyogU2VhcmNoIGluIHNvbWUgY29tbW9uIGxvY2F0aW9ucyBmb3IgdGhlIGFzc29jaWF0ZWQgUHl0aG9uIGxpYnJhcmllcy4KLSAqCi0gKiBUd28gZGlyZWN0b3JpZXMgbXVzdCBiZSBmb3VuZCwgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGRpcmVjdG9yeQotICogKHByZWZpeCksIGNvbnRhaW5pbmcgdGhlIGNvbW1vbiAucHkgYW5kIC5weWMgZmlsZXMsIGFuZCB0aGUgcGxhdGZvcm0KLSAqIGRlcGVuZGVudCBkaXJlY3RvcnkgKGV4ZWNfcHJlZml4KSwgY29udGFpbmluZyB0aGUgc2hhcmVkIGxpYnJhcnkKLSAqIG1vZHVsZXMuICBOb3RlIHRoYXQgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBjYW4gYmUgdGhlIHNhbWUgZGlyZWN0b3J5LAotICogYnV0IGZvciBzb21lIGluc3RhbGxhdGlvbnMsIHRoZXkgYXJlIGRpZmZlcmVudC4KLSAqCi0gKiBQeV9HZXRQYXRoKCkgdHJpZXMgdG8gcmV0dXJuIGEgc2Vuc2libGUgUHl0aG9uIG1vZHVsZSBzZWFyY2ggcGF0aC4KLSAqCi0gKiBGaXJzdCwgd2UgbG9vayB0byBzZWUgaWYgdGhlIGV4ZWN1dGFibGUgaXMgaW4gYSBzdWJkaXJlY3Rvcnkgb2YKLSAqIHRoZSBQeXRob24gYnVpbGQgZGlyZWN0b3J5LiAgV2UgY2FsY3VsYXRlIHRoZSBmdWxsIHBhdGggb2YgdGhlCi0gKiBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZXhlY3V0YWJsZSBhcyBwcm9ncGF0aC4gIFdlIHdvcmsgYmFja3dhcmRzCi0gKiBhbG9uZyBwcm9ncGF0aCBhbmQgbG9vayBmb3IgJGRpci9Nb2R1bGVzL1NldHVwLmluLCBhIGRpc3RpbmN0aXZlCi0gKiBsYW5kbWFyay4gIElmIGZvdW5kLCB3ZSB1c2UgJGRpci9MaWIgYXMgJHJvb3QuICBUaGUgcmV0dXJuZWQKLSAqIFB5dGhvbiBwYXRoIGlzIHRoZSBjb21waWxlZCAjZGVmaW5lIFBZVEhPTlBBVEggd2l0aCBhbGwgdGhlIGluaXRpYWwKLSAqICIuL2xpYiIgcmVwbGFjZWQgYnkgJHJvb3QuCi0gKgotICogT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhIFBZVEhPTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIHdlIHJldHVybiB0aGF0LgotICoKLSAqIE90aGVyd2lzZSB3ZSB0cnkgdG8gZmluZCAkcHJvZ3BhdGgvbGliL29zLnB5LCBhbmQgaWYgZm91bmQsIHRoZW4KLSAqIHJvb3QgaXMgJHByb2dwYXRoL2xpYiwgYW5kIHdlIHJldHVybiBQeXRob24gcGF0aCBhcyBjb21waWxlZCBQWVRIT05QQVRICi0gKiB3aXRoIGFsbCAiLi9saWIiIHJlcGxhY2VkIGJ5ICRyb290IChhcyBhYm92ZSkuCi0gKgotICovCi0KLSNpZm5kZWYgTEFORE1BUksKLSNkZWZpbmUgTEFORE1BUksgImxpYlxcb3MucHkiCi0jZW5kaWYKLQotc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwotCi0KLXN0YXRpYyBpbnQKLWlzX3NlcChjaGFyIGNoKSAvKiBkZXRlcm1pbmUgaWYgImNoIiBpcyBhIHNlcGFyYXRvciBjaGFyYWN0ZXIgKi8KLXsKLSNpZmRlZiBBTFRTRVAKLSAgICByZXR1cm4gY2ggPT0gU0VQIHx8IGNoID09IEFMVFNFUDsKLSNlbHNlCi0gICAgcmV0dXJuIGNoID09IFNFUDsKLSNlbmRpZgotfQotCi0KLXN0YXRpYyB2b2lkCi1yZWR1Y2UoY2hhciAqZGlyKQotewotICAgIGludCBpID0gc3RybGVuKGRpcik7Ci0gICAgd2hpbGUgKGkgPiAwICYmICFpc19zZXAoZGlyW2ldKSkKLSAgICAgICAgLS1pOwotICAgIGRpcltpXSA9ICdcMCc7Ci19Ci0KLQotc3RhdGljIGludAotZXhpc3RzKGNoYXIgKmZpbGVuYW1lKQotewotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICByZXR1cm4gc3RhdChmaWxlbmFtZSwgJmJ1ZikgPT0gMDsKLX0KLQotCi0vKiBBZGQgYSBwYXRoIGNvbXBvbmVudCwgYnkgYXBwZW5kaW5nIHN0dWZmIHRvIGJ1ZmZlci4KLSAgIGJ1ZmZlciBtdXN0IGhhdmUgYXQgbGVhc3QgTUFYUEFUSExFTiArIDEgYnl0ZXMgYWxsb2NhdGVkLCBhbmQgY29udGFpbiBhCi0gICBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBubyBtb3JlIHRoYW4gTUFYUEFUSExFTiBjaGFyYWN0ZXJzIChub3QgY291bnRpbmcKLSAgIHRoZSB0cmFpbGluZyBOVUwpLiAgSXQncyBhIGZhdGFsIGVycm9yIGlmIGl0IGNvbnRhaW5zIGEgc3RyaW5nIGxvbmdlciB0aGFuCi0gICB0aGF0IChjYWxsZXJzIG11c3QgYmUgY2FyZWZ1bCEpLiAgSWYgdGhlc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGl0J3MKLSAgIGd1YXJhbnRlZWQgdGhhdCBidWZmZXIgd2lsbCBzdGlsbCBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUKLSAgIHRoYW4gTUFYUEFUSExFTiBjaGFyYWN0ZXJzIGF0IGV4aXQuICBJZiBzdHVmZiBpcyB0b28gbG9uZywgb25seSBhcyBtdWNoIG9mCi0gICBzdHVmZiBhcyBmaXRzIHdpbGwgYmUgYXBwZW5kZWQuCi0qLwotc3RhdGljIHZvaWQKLWpvaW4oY2hhciAqYnVmZmVyLCBjaGFyICpzdHVmZikKLXsKLSAgICBpbnQgbiwgazsKLSAgICBpZiAoaXNfc2VwKHN0dWZmWzBdKSkKLSAgICAgICAgbiA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG4gPSBzdHJsZW4oYnVmZmVyKTsKLSAgICAgICAgaWYgKG4gPiAwICYmICFpc19zZXAoYnVmZmVyW24tMV0pICYmIG4gPCBNQVhQQVRITEVOKQotICAgICAgICAgICAgYnVmZmVyW24rK10gPSBTRVA7Ci0gICAgfQotICAgIGlmIChuID4gTUFYUEFUSExFTikKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiYnVmZmVyIG92ZXJmbG93IGluIGdldHBhdGhwLmMncyBqb2lucGF0aCgpIik7Ci0gICAgayA9IHN0cmxlbihzdHVmZik7Ci0gICAgaWYgKG4gKyBrID4gTUFYUEFUSExFTikKLSAgICAgICAgayA9IE1BWFBBVEhMRU4gLSBuOwotICAgIHN0cm5jcHkoYnVmZmVyK24sIHN0dWZmLCBrKTsKLSAgICBidWZmZXJbbitrXSA9ICdcMCc7Ci19Ci0KLQotc3RhdGljIGludAotc2VhcmNoX2Zvcl9wcmVmaXgoY2hhciAqYXJndjBfcGF0aCwgY2hhciAqbGFuZG1hcmspCi17Ci0gICAgaW50IG47Ci0KLSAgICAvKiBTZWFyY2ggZnJvbSBhcmd2MF9wYXRoLCB1bnRpbCByb290IGlzIGZvdW5kICovCi0gICAgc3RyY3B5KHByZWZpeCwgYXJndjBfcGF0aCk7Ci0gICAgZG8gewotICAgICAgICBuID0gc3RybGVuKHByZWZpeCk7Ci0gICAgICAgIGpvaW4ocHJlZml4LCBsYW5kbWFyayk7Ci0gICAgICAgIGlmIChleGlzdHMocHJlZml4KSkgewotICAgICAgICAgICAgcHJlZml4W25dID0gJ1wwJzsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIHByZWZpeFtuXSA9ICdcMCc7Ci0gICAgICAgIHJlZHVjZShwcmVmaXgpOwotICAgIH0gd2hpbGUgKHByZWZpeFswXSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBNU19XSU4zMgotI2luY2x1ZGUgIm1hbGxvYy5oIiAvLyBmb3IgYWxsb2NhIC0gc2VlIGNvbW1lbnRzIGJlbG93IQotZXh0ZXJuIGNvbnN0IGNoYXIgKlB5V2luX0RMTFZlcnNpb25TdHJpbmc7IC8vIGEgc3RyaW5nIGxvYWRlZCBmcm9tIHRoZSBETEwgYXQgc3RhcnR1cC4KLQotCi0vKiBMb2FkIGEgUFlUSE9OUEFUSCB2YWx1ZSBmcm9tIHRoZSByZWdpc3RyeS4KLSAgIExvYWQgZnJvbSBlaXRoZXIgSEtFWV9MT0NBTF9NQUNISU5FIG9yIEhLRVlfQ1VSUkVOVF9VU0VSLgotCi0gICBSZXR1cm5zIE5VTEwsIG9yIGEgcG9pbnRlciB0aGF0IHNob3VsZCBiZSBmcmVlZC4KLSovCi0KLXN0YXRpYyBjaGFyICoKLWdldHB5dGhvbnJlZ3BhdGgoSEtFWSBrZXlCYXNlLCBCT09MIGJXaW4zMnMpCi17Ci0gICAgSEtFWSBuZXdLZXkgPSAwOwotICAgIERXT1JEIG5hbWVTaXplID0gMDsKLSAgICBEV09SRCBkYXRhU2l6ZSA9IDA7Ci0gICAgRFdPUkQgbnVtRW50cmllcyA9IDA7Ci0gICAgTE9ORyByYzsKLSAgICBjaGFyICpyZXR2YWwgPSBOVUxMOwotICAgIGNoYXIgKmRhdGFCdWY7Ci0gICAgY29uc3QgY2hhciBrZXlQcmVmaXhbXSA9ICJTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFwiOwotICAgIGNvbnN0IGNoYXIga2V5U3VmZml4W10gPSAiXFxQeXRob25QYXRoIjsKLSAgICBpbnQgdmVyc2lvbkxlbjsKLSAgICBjaGFyICprZXlCdWY7Ci0KLSAgICAvLyBUcmllZCB0byB1c2Ugc3lzZ2V0KCJ3aW52ZXIiKSBidXQgaGVyZSBpcyB0b28gZWFybHkgOi0oCi0gICAgdmVyc2lvbkxlbiA9IHN0cmxlbihQeVdpbl9ETExWZXJzaW9uU3RyaW5nKTsKLSAgICAvLyBhbGxvY2EgPT0gbm8gZnJlZSByZXF1aXJlZCwgYnV0IG1lbW9yeSBvbmx5IGxvY2FsIHRvIGZuLgotICAgIC8vIGFsc28gbm8gaGVhcCBmcmFnbWVudGF0aW9uISAgQW0gSSBiZWluZyBzaWxseT8KLSAgICBrZXlCdWYgPSBhbGxvY2Eoc2l6ZW9mKGtleVByZWZpeCktMSArIHZlcnNpb25MZW4gKyBzaXplb2Yoa2V5U3VmZml4KSk7IC8vIGNoYXJzIG9ubHksIHBsdXMgMSBOVUxMLgotICAgIC8vIGxvdHMgb2YgY29uc3RhbnRzIGhlcmUgZm9yIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBhd2F5IDotKQotICAgIG1lbWNweShrZXlCdWYsIGtleVByZWZpeCwgc2l6ZW9mKGtleVByZWZpeCktMSk7Ci0gICAgbWVtY3B5KGtleUJ1ZitzaXplb2Yoa2V5UHJlZml4KS0xLCBQeVdpbl9ETExWZXJzaW9uU3RyaW5nLCB2ZXJzaW9uTGVuKTsKLSAgICBtZW1jcHkoa2V5QnVmK3NpemVvZihrZXlQcmVmaXgpLTErdmVyc2lvbkxlbiwga2V5U3VmZml4LCBzaXplb2Yoa2V5U3VmZml4KSk7IC8vIE5VTEwgY29tZXMgd2l0aCB0aGlzIG9uZSEKLQotICAgIHJjPVJlZ09wZW5LZXkoa2V5QmFzZSwKLSAgICAgICAgICAgICAgICAgIGtleUJ1ZiwKLSAgICAgICAgICAgICAgICAgICZuZXdLZXkpOwotICAgIGlmIChyYz09RVJST1JfU1VDQ0VTUykgewotICAgICAgICBSZWdRdWVyeUluZm9LZXkobmV3S2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgJm51bUVudHJpZXMsICZuYW1lU2l6ZSwgJmRhdGFTaXplLCBOVUxMLCBOVUxMKTsKLSAgICB9Ci0gICAgaWYgKGJXaW4zMnMgJiYgbnVtRW50cmllcz09MCAmJiBkYXRhU2l6ZT09MCkgewotICAgICAgICAvKiBtdXN0IGhhcmRjb2RlIGZvciBXaW4zMnMgKi8KLSAgICAgICAgbnVtRW50cmllcyA9IDE7Ci0gICAgICAgIGRhdGFTaXplID0gNTExOwotICAgIH0KLSAgICBpZiAobnVtRW50cmllcykgewotICAgICAgICAvKiBMb29wIG92ZXIgYWxsIHN1YmtleXMuICovCi0gICAgICAgIC8qIFdpbjMycyBkb2VzbnQga25vdyBob3cgbWFueSBzdWJrZXlzLCBzbyB3ZSBkbwotICAgICAgICAgICBpdCB0d2ljZSAqLwotICAgICAgICBjaGFyIGtleUJ1ZltNQVhfUEFUSCsxXTsKLSAgICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAgICAgaW50IG9mZiA9IDA7Ci0gICAgICAgIGZvcihpbmRleD0wOztpbmRleCsrKSB7Ci0gICAgICAgICAgICBsb25nIHJlcWRTaXplID0gMDsKLSAgICAgICAgICAgIERXT1JEIHJjID0gUmVnRW51bUtleShuZXdLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIGtleUJ1ZiwgTUFYX1BBVEgrMSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgcmMgPSBSZWdRdWVyeVZhbHVlKG5ld0tleSwga2V5QnVmLCBOVUxMLCAmcmVxZFNpemUpOwotICAgICAgICAgICAgaWYgKHJjKSBicmVhazsKLSAgICAgICAgICAgIGlmIChiV2luMzJzICYmIHJlcWRTaXplPT0wKSByZXFkU2l6ZSA9IDUxMjsKLSAgICAgICAgICAgIGRhdGFTaXplICs9IHJlcWRTaXplICsgMTsgLyogMSBmb3IgdGhlICI7IiAqLwotICAgICAgICB9Ci0gICAgICAgIGRhdGFCdWYgPSBtYWxsb2MoZGF0YVNpemUrMSk7Ci0gICAgICAgIGlmIChkYXRhQnVmPT1OVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7IC8qIHByZXR0eSBzZXJpb3VzPyAgUmFpc2UgZXJyb3I/ICovCi0gICAgICAgIC8qIE5vdyBsb29wIG92ZXIsIGdyYWJiaW5nIHRoZSBwYXRocy4KLSAgICAgICAgICAgU3Via2V5cyBiZWZvcmUgbWFpbiBsaWJyYXJ5ICovCi0gICAgICAgIGZvcihpbmRleD0wOztpbmRleCsrKSB7Ci0gICAgICAgICAgICBpbnQgYWRqdXN0OwotICAgICAgICAgICAgbG9uZyByZXFkU2l6ZSA9IGRhdGFTaXplOwotICAgICAgICAgICAgRFdPUkQgcmMgPSBSZWdFbnVtS2V5KG5ld0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwga2V5QnVmLE1BWF9QQVRIKzEpOwotICAgICAgICAgICAgaWYgKHJjKSBicmVhazsKLSAgICAgICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZShuZXdLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5QnVmLCBkYXRhQnVmK29mZiwgJnJlcWRTaXplKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICBpZiAocmVxZFNpemU+MSkgewotICAgICAgICAgICAgICAgIC8qIElmIE5vdGhpbmcsIG9yIG9ubHkgJ1wwJyBjb3BpZWQuICovCi0gICAgICAgICAgICAgICAgYWRqdXN0ID0gc3RybGVuKGRhdGFCdWYrb2ZmKTsKLSAgICAgICAgICAgICAgICBkYXRhU2l6ZSAtPSBhZGp1c3Q7Ci0gICAgICAgICAgICAgICAgb2ZmICs9IGFkanVzdDsKLSAgICAgICAgICAgICAgICBkYXRhQnVmW29mZisrXSA9ICc7JzsKLSAgICAgICAgICAgICAgICBkYXRhQnVmW29mZl0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGRhdGFTaXplLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyogQWRkaXRpb25hbGx5LCB3aW4zMnMgZG9lc250IHdvcmsgYXMgZXhwZWN0ZWQsIHNvCi0gICAgICAgICAgIHRoZSBzcGVjaWZpYyBzdHJsZW4oKSBpcyByZXF1aXJlZCBmb3IgMy4xLiAqLwotICAgICAgICByYyA9IFJlZ1F1ZXJ5VmFsdWUobmV3S2V5LCAiIiwgZGF0YUJ1ZitvZmYsICZkYXRhU2l6ZSk7Ci0gICAgICAgIGlmIChyYz09RVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgaWYgKHN0cmxlbihkYXRhQnVmKT09MCkKLSAgICAgICAgICAgICAgICBmcmVlKGRhdGFCdWYpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHZhbCA9IGRhdGFCdWY7IC8qIGNhbGxlciB3aWxsIGZyZWUgKi8KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcmVlKGRhdGFCdWYpOwotICAgIH0KLQotICAgIGlmIChuZXdLZXkpCi0gICAgICAgIFJlZ0Nsb3NlS2V5KG5ld0tleSk7Ci0gICAgcmV0dXJuIHJldHZhbDsKLX0KLSNlbmRpZiAvKiBNU19XSU4zMiAqLwotCi1zdGF0aWMgdm9pZAotZ2V0X3Byb2dwYXRoKHZvaWQpCi17Ci0gICAgZXh0ZXJuIGNoYXIgKlB5X0dldFByb2dyYW1OYW1lKHZvaWQpOwotICAgIGNoYXIgKnBhdGggPSBnZXRlbnYoIlBBVEgiKTsKLSAgICBjaGFyICpwcm9nID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKLQotI2lmZGVmIE1TX1dJTjMyCi0gICAgaWYgKEdldE1vZHVsZUZpbGVOYW1lKE5VTEwsIHByb2dwYXRoLCBNQVhQQVRITEVOKSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgaWYgKHByb2cgPT0gTlVMTCB8fCAqcHJvZyA9PSAnXDAnKQotICAgICAgICBwcm9nID0gInB5dGhvbiI7Ci0KLSAgICAvKiBJZiB0aGVyZSBpcyBubyBzbGFzaCBpbiB0aGUgYXJndjAgcGF0aCwgdGhlbiB3ZSBoYXZlIHRvCi0gICAgICogYXNzdW1lIHB5dGhvbiBpcyBvbiB0aGUgdXNlcidzICRQQVRILCBzaW5jZSB0aGVyZSdzIG5vCi0gICAgICogb3RoZXIgd2F5IHRvIGZpbmQgYSBkaXJlY3RvcnkgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLiAgSWYKLSAgICAgKiAkUEFUSCBpc24ndCBleHBvcnRlZCwgeW91IGxvc2UuCi0gICAgICovCi0jaWZkZWYgQUxUU0VQCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApIHx8IHN0cmNocihwcm9nLCBBTFRTRVApKQotI2Vsc2UKLSAgICBpZiAoc3RyY2hyKHByb2csIFNFUCkpCi0jZW5kaWYKLSAgICAgICAgc3RyY3B5KHByb2dwYXRoLCBwcm9nKTsKLSAgICBlbHNlIGlmIChwYXRoKSB7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBjaGFyICpkZWxpbSA9IHN0cmNocihwYXRoLCBERUxJTSk7Ci0KLSAgICAgICAgICAgIGlmIChkZWxpbSkgewotICAgICAgICAgICAgICAgIGludCBsZW4gPSBkZWxpbSAtIHBhdGg7Ci0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKHByb2dwYXRoICsgbGVuKSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RyY3B5KHByb2dwYXRoLCBwYXRoKTsKLQotICAgICAgICAgICAgam9pbihwcm9ncGF0aCwgcHJvZyk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RzKHByb2dwYXRoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKCFkZWxpbSkgewotICAgICAgICAgICAgICAgIHByb2dwYXRoWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhdGggPSBkZWxpbSArIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYWxjdWxhdGVfcGF0aCh2b2lkKQotewotICAgIGNoYXIgYXJndjBfcGF0aFtNQVhQQVRITEVOKzFdOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgYnVmc3o7Ci0gICAgY2hhciAqcHl0aG9uaG9tZSA9IFB5X0dldFB5dGhvbkhvbWUoKTsKLSAgICBjaGFyICplbnZwYXRoID0gUHlfR0VURU5WKCJQWVRIT05QQVRIIik7Ci0jaWZkZWYgTVNfV0lOMzIKLSAgICBjaGFyICptYWNoaW5lcGF0aCwgKnVzZXJwYXRoOwotCi0gICAgLyogQXJlIHdlIHJ1bm5pbmcgdW5kZXIgV2luZG93cyAzLjEoMSkgV2luMzJzPyAqLwotICAgIGlmIChQeVdpbl9Jc1dpbjMycygpKSB7Ci0gICAgICAgIC8qIE9ubHkgQ0xBU1NFU19ST09UIGlzIHN1cHBvcnRlZCAqLwotICAgICAgICBtYWNoaW5lcGF0aCA9IGdldHB5dGhvbnJlZ3BhdGgoSEtFWV9DTEFTU0VTX1JPT1QsIFRSVUUpOwotICAgICAgICB1c2VycGF0aCA9IE5VTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWFjaGluZXBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfTE9DQUxfTUFDSElORSwgRkFMU0UpOwotICAgICAgICB1c2VycGF0aCA9IGdldHB5dGhvbnJlZ3BhdGgoSEtFWV9DVVJSRU5UX1VTRVIsIEZBTFNFKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGdldF9wcm9ncGF0aCgpOwotICAgIHN0cmNweShhcmd2MF9wYXRoLCBwcm9ncGF0aCk7Ci0gICAgcmVkdWNlKGFyZ3YwX3BhdGgpOwotICAgIGlmIChweXRob25ob21lID09IE5VTEwgfHwgKnB5dGhvbmhvbWUgPT0gJ1wwJykgewotICAgICAgICBpZiAoc2VhcmNoX2Zvcl9wcmVmaXgoYXJndjBfcGF0aCwgTEFORE1BUkspKQotICAgICAgICAgICAgcHl0aG9uaG9tZSA9IHByZWZpeDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHl0aG9uaG9tZSA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgewotICAgIGNoYXIgKmRlbGltOwotCi0gICAgICAgIHN0cmNweShwcmVmaXgsIHB5dGhvbmhvbWUpOwotCi0gICAgLyogRXh0cmFjdCBBbnkgT3B0aW9uYWwgVHJhaWxpbmcgRVhFQ19QUkVGSVggKi8KLSAgICAvKiBlLmcuIFBZVEhPTkhPTUU9PHByZWZpeD46PGV4ZWNfcHJlZml4PiAgICovCi0gICAgZGVsaW0gPSBzdHJjaHIocHJlZml4LCBERUxJTSk7Ci0gICAgaWYgKGRlbGltKSB7Ci0gICAgICAgICpkZWxpbSA9ICdcMCc7Ci0gICAgICAgIHN0cmNweShleGVjX3ByZWZpeCwgZGVsaW0rMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN0cmNweShleGVjX3ByZWZpeCwgRVhFQ19QUkVGSVgpOwotICAgIH0KLQotICAgIGlmIChlbnZwYXRoICYmICplbnZwYXRoID09ICdcMCcpCi0gICAgICAgIGVudnBhdGggPSBOVUxMOwotCi0gICAgLyogV2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBwYXRoIGZyb20gdGhlIGZvbGxvd2luZyBwYXJ0czoKLSAgICAgICAoMSkgdGhlIFBZVEhPTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHNldDsKLSAgICAgICAoMikgZm9yIFdpbjMyLCB0aGUgbWFjaGluZXBhdGggYW5kIHVzZXJwYXRoLCBpZiBzZXQ7Ci0gICAgICAgKDMpIHRoZSBQWVRIT05QQVRIIGNvbmZpZyBtYWNybywgd2l0aCB0aGUgbGVhZGluZyAiLiIKLSAgICAgICAgICAgb2YgZWFjaCBjb21wb25lbnQgcmVwbGFjZWQgd2l0aCBweXRob25ob21lLCBpZiBzZXQ7Ci0gICAgICAgKDQpIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZXhlY3V0YWJsZSAoYXJndjBfcGF0aCkuCi0gICAgICAgVGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBjYWxjdWxhdGVzICMzIGZpcnN0LgotICAgICovCi0KLSAgICAvKiBDYWxjdWxhdGUgc2l6ZSBvZiByZXR1cm4gYnVmZmVyICovCi0gICAgaWYgKHB5dGhvbmhvbWUgIT0gTlVMTCkgewotICAgICAgICBjaGFyICpwOwotICAgICAgICBidWZzeiA9IDE7Ci0gICAgICAgIGZvciAocCA9IFBZVEhPTlBBVEg7ICpwOyBwKyspIHsKLSAgICAgICAgICAgIGlmICgqcCA9PSBERUxJTSkKLSAgICAgICAgICAgICAgICBidWZzeisrOyAvKiBudW1iZXIgb2YgREVMSU0gcGx1cyBvbmUgKi8KLSAgICAgICAgfQotICAgICAgICBidWZzeiAqPSBzdHJsZW4ocHl0aG9uaG9tZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgYnVmc3ogPSAwOwotICAgIGJ1ZnN6ICs9IHN0cmxlbihQWVRIT05QQVRIKSArIDE7Ci0gICAgaWYgKGVudnBhdGggIT0gTlVMTCkKLSAgICAgICAgYnVmc3ogKz0gc3RybGVuKGVudnBhdGgpICsgMTsKLSAgICBidWZzeiArPSBzdHJsZW4oYXJndjBfcGF0aCkgKyAxOwotI2lmZGVmIE1TX1dJTjMyCi0gICAgaWYgKG1hY2hpbmVwYXRoKQotICAgICAgICBidWZzeiArPSBzdHJsZW4obWFjaGluZXBhdGgpICsgMTsKLSAgICBpZiAodXNlcnBhdGgpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbih1c2VycGF0aCkgKyAxOwotI2VuZGlmCi0KLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3opOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBtYWxsb2MgZHluYW1pYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIGRlZmF1bHQgc3RhdGljICRQWVRIT05QQVRILlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBlbnZwYXRoOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBlbnZpcm9ubWVudCAkUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUFlUSE9OUEFUSDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGVudnBhdGgpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgZW52cGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICB9Ci0jaWZkZWYgTVNfV0lOMzIKLSAgICBpZiAobWFjaGluZXBhdGgpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgbWFjaGluZXBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotICAgIGlmICh1c2VycGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCB1c2VycGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMKSB7Ci0gICAgICAgIHN0cmNweShidWYsIFBZVEhPTlBBVEgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgKnAgPSBQWVRIT05QQVRIOwotICAgICAgICBjaGFyICpxOwotICAgICAgICBpbnQgbjsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgcSA9IHN0cmNocihwLCBERUxJTSk7Ci0gICAgICAgICAgICBpZiAocSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIG4gPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbiA9IHEtcDsKLSAgICAgICAgICAgIGlmIChwWzBdID09ICcuJyAmJiBpc19zZXAocFsxXSkpIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkoYnVmLCBweXRob25ob21lKTsKLSAgICAgICAgICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgbi0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RybmNweShidWYsIHAsIG4pOwotICAgICAgICAgICAgYnVmICs9IG47Ci0gICAgICAgICAgICBpZiAocSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgICAgICBwID0gcSsxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChhcmd2MF9wYXRoKSB7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICBzdHJjcHkoYnVmLCBhcmd2MF9wYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgICpidWYgPSAnXDAnOwotfQotCi0KLS8qIEV4dGVybmFsIGludGVyZmFjZSAqLwotCi1jaGFyICoKLVB5X0dldFBhdGgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLQotICAgIHJldHVybiBtb2R1bGVfc2VhcmNoX3BhdGg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJlZml4KHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1jaGFyICoKLVB5X0dldEV4ZWNQcmVmaXgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLQotICAgIHJldHVybiBleGVjX3ByZWZpeDsKLX0KLQotY2hhciAqCi1QeV9HZXRQcm9ncmFtRnVsbFBhdGgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLQotICAgIHJldHVybiBwcm9ncGF0aDsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL21ha2VmaWxlIGIvUEMvb3MydmFjcHAvbWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZjBhZGMuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvbWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQ5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgICAgICAgICAgVG9wLUxldmVsIE1ha2VmaWxlIGZvciBCdWlsZGluZyBQeXRob24gZm9yIE9TLzIKLSMKLSMgVGhpcyBtYWtlZmlsZSB3YXMgZGV2ZWxvcGVkIGZvciB1c2Ugd2l0aCBJQk0ncyBWaXN1YWxBZ2UgQy9DKysKLSMgZm9yIE9TLzIgY29tcGlsZXIsIHZlcnNpb24gMy4wLCB3aXRoIEZpeHBhY2sgOCBhcHBsaWVkLiAgSXQgdXNlcwotIyB2ZXJzaW9uIDQuMCBvZiB0aGUgTk1BS0UgdG9vbCB0aGF0IGNvbWVzIHdpdGggdGhhdCBwYWNrYWdlLgotIwotIyBUaGUgb3V0cHV0IG9mIHRoZSBidWlsZCBpcyBhIGxhcmdpc2ggUHl0aG9uMjMuRExMIGNvbnRhaW5pbmcgdGhlCi0jIGVzc2VudGlhbCBtb2R1bGVzIG9mIFB5dGhvbiBhbmQgYSBzbWFsbCBQeXRob24uZXhlIHByb2dyYW0gdG8gc3RhcnQKLSMgdGhlIGludGVycHJldGVyLiAgV2hlbiBlbWJlZGRpbmcgUHl0aG9uIHdpdGhpbiBhbm90aGVyIHByb2dyYW0sIG9ubHkKLSMgUHl0aG9uMjMuRExMIGlzIG5lZWRlZC4KLSMKLSMgVGhlc2UgdHdvIGJpbmFyaWVzIGNhbiBiZSBzdGF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBWaXN1YWxBZ2UgQy9DKysKLSMgcnVudGltZSBsaWJyYXJ5IChwcm9kdWNpbmcgbGFyZ2VyIGJpbmFyaWVzKSwgb3IgZHluYW1pY2FsbHkgbGlua2VkCi0jIHRvIG1ha2Ugc21hbGxlciBvbmVzIHRoYXQgcmVxdWlyZSB0aGUgY29tcGlsZXIgdG8gYmUgaW5zdGFsbGVkIG9uCi0jIGFueSBzeXN0ZW0gUHl0aG9uIGlzIHVzZWQgb24uICBSZXZpZXcgdGhlIC9HZCsgY29tcGlsZXIgb3B0aW9uIGZvcgotIyBob3cgdG8gZG8gdGhpcy4KLSMKLSMgTk9URTogSUJNJ3MgTk1BS0UgNC4wIGlzIHJhdGhlciBkdW1iLCByZXF1aXJpbmcgdGhpcyBtYWtlZmlsZSB0bwotIyAgICAgICBiZSBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBuZWNlc3NhcnkuICBJIHVzZSBPcHVzTUFLRQotIyAgICAgICBteXNlbGYgZm9yIGEgbXVjaCBtb3JlIHBvd2VyZnVsIE1BS0UgdG9vbCBidXQgbm90IGV2ZXJ5b25lCi0jICAgICAgIHdpc2hlcyB0byBidXkgaXQuICBIb3dldmVyLCBhcyBhIHJlc3VsdCBJIGRpZG4ndCBob29rIGluCi0jICAgICAgIHRoZSBkZXBlbmRlbmNpZXMgb24gdGhlIGluY2x1ZGUgZmlsZXMgYXMgTk1BS0UgaGFzIG5vIGVhc3kKLSMgICAgICAgd2F5IHRvIGRvIHRoaXMgd2l0aG91dCBleHBsaWNpdGx5IHNwZWxsaW5nIGl0IGFsbCBvdXQuCi0jCi0jIEhpc3RvcnkgKE1vc3QgUmVjZW50IEZpcnN0KQotIwotIyAyNi1TZXAtOTgganJyIFJldGVzdGVkIGFuZCBhZGp1c3RlZCBmb3IgYnVpbGRpbmcgdy9QeXRob24gMS41LjJhMQotIyAyMC1Ob3YtOTcganJyIENsZWFuZWQgVXAgZm9yIEFwcGx5aW5nIHRvIERpc3RyaWJ1dGlvbgotIyAyOS1PY3QtOTcganJyIE1vZGlmaWVkIGZvciBVc2Ugd2l0aCBQeXRob24gMS41IEFscGhhIDQKLSMgMDMtQXVnLTk2IGpyciBPcmlnaW5hbCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNCBSZWxlYXNlCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUGxhY2VzIGFuZCBUaGluZ3MKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLVBZX01PRFVMRVMgICAgICA9IC4uXC4uXE1vZHVsZXMKLVBZX09CSkVDVFMgICAgICA9IC4uXC4uXE9iamVjdHMKLVBZX1BBUlNFUiAgICAgICA9IC4uXC4uXFBhcnNlcgotUFlfUFlUSE9OICAgICAgID0gLi5cLi5cUHl0aG9uCi1QWV9JTkNMVURFICAgICAgPSAuLlwuLlxJbmNsdWRlCi1QWV9JTkNMVURFUyAgICAgPSAuOyQoUFlfSU5DTFVERSk7JChQWV9NT0RVTEVTKTskKFBZX09CSkVDVFMpOyQoUFlfUEFSU0VSKTskKFBZX1BZVEhPTikKLQotIyBGaWxlIHRvIENvbGxlY3QgV29yZHkgQ29tcGlsZXIgT3V0cHV0IHJlIEVycm9ycwotRVJSUwkJPSBtYWtlLm91dAotCi0jIFdoZXJlIHRvIEZpbmQgdGhlIElCTSBUQ1AvSVAgU29ja2V0IEluY2x1ZGVzIGFuZCBMaWJyYXJpZXMKLU9TMlRDUElQICAgICAgICA9IEM6XE1QVE4KLQotIyBXaGVyZSB0byBGaW5kIHRoZSBUY2wvVGsgQmFzZSBEaXJlY3RvcnkgZm9yIExpYnMvSW5jbHVkZXMKLVRDTFRLCQk9IEQ6XFRjbFRrCi1UQ0xCQVNFCQk9IEQ6XFRjbDcuNlxPUzIKLVRLQkFTRQkJPSBEOlxUazQuMlxPUzIKLQotIyBXaGVyZSB0byBQdXQgdGhlIC5PQkogRmlsZXMsIFRvIEtlZXAgVGhlbSBPdXQgb2YgdGhlIFdheQotUEFUSE9CSgkJPSBvYmoKLQotIyBTZWFyY2ggUGF0aCBmb3IgSW5jbHVkZSBGaWxlcwotUFJPSklOQ0xVREUJPSAuOyQoVENMQkFTRSk7JChUS0JBU0UpOyQoT1MyVENQSVApXEluY2x1ZGU7JChQWV9JTkNMVURFUykKLQotIyBQbGFjZSB0byBTZWFyY2ggZm9yIFNvdXJjZXMgcmUgT3B1c01BS0UgRGVwZW5kZW5jeSBHZW5lcmF0b3IgKENvbW1lcmNpYWwpCi1NS01GX1NSQ1MJPSAkKFBZX01PRFVMRVMpXCouYyAkKFBZX09CSkVDVFMpXCouYyAkKFBZX1BBUlNFUilcKi5jICQoUFlfUFlUSE9OKVwqLmMKLQotIy5IRFJQQVRILmMJOj0gJChQUk9KSU5DTFVERSw7PSApICQoLkhEUlBBVEguYykKLSMuUEFUSC5jICAgICAgICAgPSAuOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi1PVEhFUkxJQlMJPSBzbzMyZGxsLmxpYiB0Y3AzMmRsbC5saWIgIyBUY2w3Ni5saWIgVGs0Mi5saWIKLQotIyMjIyMjIyMjIyMjIyMjIyMKLSMgSW5mZXJlbmNlIFJ1bGVzCi0jIyMjIyMjIyMjIyMjIyMjIwoteyQoUFlfTU9EVUxFUylcfS5jeyQoUEFUSE9CSilcfS5vYmo6CSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQoteyQoUFlfT0JKRUNUUylcfS5jeyQoUEFUSE9CSilcfS5vYmo6CSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQoteyQoUFlfUEFSU0VSKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi17JChQWV9QWVRIT04pXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLS5jeyQoUEFUSE9CSilcfS5vYmo6CQkJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFB5dGhvbiBTdWJzeXN0ZW1zCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUFlUSE9OIGlzIHRoZSBjZW50cmFsIGNvcmUsIGNvbnRhaW5pbmcgdGhlIGJ1aWx0aW5zIGFuZCBpbnRlcnByZXRlci4KLVBZVEhPTgkJPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEJsdGluTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENFdmFsLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENvbXBpbGUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEVycm9ycy5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZyb3plbi5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldGFyZ3Mub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldENvbXBpbGVyLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldENvcHlyaWdodC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldE1UaW1lLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldE9wdC5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldFBsYXRmb3JtLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldFZlcnNpb24ub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1Jbml0Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEltcG9ydC5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEltcG9ydERMLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1hcnNoYWwub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1vZFN1cHBvcnQub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE15U3RydG91bC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFB5U3RhdGUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFB5dGhvblJ1bi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cnVjdE1lbWJlci5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN5c01vZHVsZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRocmVhZC5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRyYWNlQmFjay5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZyb3plbk1haW4ub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXGV4Y2VwdGlvbnMub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXHN5bXRhYmxlLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXGNvZGVjcy5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXGZ1dHVyZS5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXGR5bmxvYWRfb3MyLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXG15c25wcmludGYub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXGl0ZXJvYmplY3Qub2JqCi0KLSMgUHl0aG9uJ3MgSW50ZXJuYWwgUGFyc2VyCi1QQVJTRVIJCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEFjY2VsZXIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR3JhbW1hcjEub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxMaXN0Tm9kZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE5vZGUub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUGFyc2VyLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQYXJzZVRvay5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEJpdFNldC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTWV0YUdyYW1tYXIub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUb2tlbml6ZXIub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE15UmVhZGxpbmUub2JqCi0KLSMgUHl0aG9uIE9iamVjdCBUeXBlcwotT0JKRUNUUwkJPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQWJzdHJhY3Qub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCb29sT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEJ1ZmZlck9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ2VsbE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDbGFzc09iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENPYmplY3Qub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ29tcGxleE9iamVjdC5vYmogXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxEZXNjck9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXERpY3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRW51bU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGaWxlT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZsb2F0T2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnJhbWVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGdW5jT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEl0ZXJPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTGlzdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxMb25nT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1ldGhvZE9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTW9kdWxlT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxPYmplY3Qub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE9iTWFsbG9jLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUmFuZ2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTbGljZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cmluZ09iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RydWN0U2VxLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUdXBsZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFR5cGVPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVW5pY29kZU9iamVjdC5vYmogXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxVbmljb2RlQ1R5cGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFdlYWtyZWZPYmplY3Qub2JqCi0KLSMgRXh0ZW5zaW9uIE1vZHVsZXMgKEJ1aWx0LUluIG9yIGFzIFNlcGFyYXRlIERMTHMpCi1NT0RVTEVTCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxBcnJheU1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEJpbkFzY2lpLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ01hdGhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxFcnJub01vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdDTW9kdWxlLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0QnVpbGRJbmZvLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRQYXRoUC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1haW4ub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTWF0aE1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNRDVjLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1ENU1vZHVsZS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcT3BlcmF0b3Iub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQQ1JFTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFB5UENSRS5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUG9zaXhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxSZWdleE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFJlZ0V4cHIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2VsZWN0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTaWduYWxNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNvY2tldE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3Ryb3BNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJ1Y3RNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRpbWVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVGhyZWFkTW9kdWxlLm9iagotCi0jIFN0YW5kYWxvbmUgUGFyc2VyIEdlbmVyYXRvciBQcm9ncmFtIChTaGFyZXMgU29tZSBvZiBQeXRob24ncyBNb2R1bGVzKQotUEdFTiAgICAgICAgICAgID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBHZW4ub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUEdlbk1haW4ub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVNOUHJpbnRmLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRva2VuaXplcl9QZ2VuLm9iaiBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFByaW50R3JhbW1hci5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR3JhbW1hci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGaXJzdFNldHMub2JqCi0KLSMjIyMjIyMjIyMjIyMjIyMjIwotIyBNYWNyb3MgYW5kIEZsYWdzCi0jIyMjIyMjIyMjIyMjIyMjIyMKLV9CQVNFCQk9IC9RIC9XMiAvSSQoUFJPSklOQ0xVREUpCi0JCSMgL1EgICA9IE9taXQgSUJNIENvcHlyaWdodAotCQkjIC9XMiAgPSBTaG93IFdhcm5pbmdzL0Vycm9ycyBPbmx5Ci0KLV9HRU4JCT0gL0c0IC9HbSAvR2QtCi0JCSMgL0c0ICA9IEdlbmVyYXRlIENvZGUgZm9yIDQ4NiAoVXNlIDM4NiBmb3IgRGVidWdnZXIpCi0JCSMgL0dtICA9IFVzZSBNdWx0aXRocmVhZCBSdW50aW1lCi0JCSMgL0dkICA9IER5bmFtaWNhbGx5IExvYWQgUnVudGltZQotCQkjIC9NcyAgPSBVc2UgX1N5c3RlbSBDYWxsaW5nIENvbnZlbnRpb24gKHZzIF9PcHRsaW5rKQotCQkjICAgICAgICAodG8gYWxsb3cgbm9uLVZBQysrIGNvZGUgdG8gY2FsbCBpbnRvIFB5dGhvbjIzLmRsbCkKLQotX09QVAkJPSAvTyAvR2wKLQkJIyAvTyAgID0gRW5hYmxlIFNwZWVkLU9wdGltaXphdGlvbnMKLQkJIyAvT2wgID0gUGFzcyBDb2RlIFRocnUgSW50ZXJtZWRpYXRlIExpbmtlcgotCQkjIC9HdSAgPSBBZHZpc2UgTGlua2VyIEFsbCBFeHQgRGF0YSBpcyBJRCdkCi0JCSMgL0dsICA9IEhhdmUgTGlua2VyIFJlbW92ZSBVbnVzZWQgRm5zCi0KLV9EQkcJCT0gL1dwcm8tIC9UaS0gL0RIQVZFX0NPTkZJR19IIC9EVVNFX1NPQ0tFVAotICAgICAgICAgICAgICAgICMgL1dwcm89IEdlbmVyYXRlIENvbXBpbGVyIFdhcm5pbmdzIHJlIE1pc3NpbmcgUHJvdG90eXBlcwotCQkjIC9UaSAgPSBFbWJlZCBEZWJ1Z2dlci9BbmFseXplciBSZWNzCi0JCSMgL1RtICA9IEVuYWJsZSBEZWJ1ZyBNZW1vcnkgRm5zCi0JCSMgL1R4ICA9IFJlcXVlc3QgRnVsbCBEdW1wIFVwb24gRXhjZXB0aW9uCi0JCSMgL0RIQVZFX0NPTkZJR19IID0gQ2F1c2VzIFVzZSBvZiBDT05GSUcuSCBTZXR0aW5ncwotICAgICAgICAgICAgICAgICMgL0RVU0VfU09DS0VUID0gRW5hYmxlcyBCdWlsZGluZyBJbiBvZiBTb2NrZXQgQVBJCi0KLV9PVVQJCT0gCi0JCSMgL0ZiICA9IEVtYmVkIEJyb3dzZXIgUmVjcwotCQkjIC9HaCAgPSBHZW5lcmF0ZSBDb2RlIGZvciBQcm9maWxlciBIb29rcwotCQkjIC9GbCAgPSBPdXRwdXQgQy9DKysgTGlzdGluZyBGaWxlcwotICAgICAgICAgICAgICAgICMgL0xmICA9IFByb3ZpZGUgRnVsbCAoRGV0YWlsZWQpIExpc3RpbmcgRmlsZXMKLQkJIyAvRm0uID0gT3V0cHV0IExpbmtlciBNYXAgRmlsZQotCQkjIC9GdC4gPSBPdXRwdXQgQysrIFRlbXBsYXRlIFJlc29sdXRpb24gRmlsZXMKLQotX01BUAkJPSAvRm1Ob2lzZVwkKEBSKS5tYXAKLQotX0RMTAkJPSAvR2UtCi1fRVhFCQk9IC9HZQotCQkjIC9HZSA9IENyZWF0ZSBhbiBFWEUsIG5vdCBETEwKLQotQ0ZMQUdTCQk9ICQoX0JBU0UpICQoX0dFTikgJChfT1BUKSAkKF9EQkcpICQoX09VVCkgJChfRVhFKSAvU3MKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQcmltYXJ5IFRhcmdldChzKQotIyMjIyMjIyMjIyMjIyMjIyMjIwotQWxsOiAgb2JqIG5vaXNlIFB5Q29yZS5saWIgUHl0aG9uMjMubGliIFBHZW4uZXhlIFwKLSAgICAgIFB5dGhvbi5leGUgUHl0aG9uUE0uZXhlIFB5dGhvbjIzLmRsbCAjIF90a2ludGVyLmRsbAotCi1Nb2R1bGVzOiAkKE1PRFVMRVMpCi1PYmplY3RzOiAkKE9CSkVDVFMpCi1QYXJzZXI6ICAkKFBBUlNFUikKLVB5dGhvbjogICQoUFlUSE9OKQotCi0jIERpcmVjdG9yeSB0byBLZWVwIC5PQkogRmlsZXMgT3V0IG9mIHRoZSBXYXkKLW9iajoKLQlALW1rZGlyIG9iaiA+Pk5VTAotCi0jIERpcmVjdG9yeSB0byBLZWVwIC5NQVAgYW5kIFN1Y2ggVGV4dCBGaWxlcyBPdXQgb2YgdGhlIFdheQotbm9pc2U6Ci0JQC1ta2RpciBub2lzZSA+Pk5VTAotCi0jIyMjIyMjIyMjIyMjIwotIwotIyMjIyMjIyMjIyMjIyMKLQotIyBQeXRob24gRXh0ZW5zaW9uIERMTDogVGNsL1RrIEludGVyZmFjZQotI190a2ludGVyLmRsbDogJChQQVRIT0JKKVxfdGtpbnRlci5vYmogUHl0aG9uMjMubGliIF90a2ludGVyLmRlZgotIwlAIEVjaG8gTGlua2luZyAkQCBBcyBETEwKLSMJQCAkKENDKSAkKENGTEFHUykgL0IiL05PRSIgJChfRExMKSAvRmUkQCAkKF9NQVApICQqKiAkKE9USEVSTElCUykgPj4kKEVSUlMpCi0KLSMkKFBBVEhPQkopXF90a2ludGVyLm9iajogJChQWV9NT0RVTEVTKVxfdGtpbnRlci5jCi0jCUAgRWNobyBDb21waWxpbmcgJCoqCi0jCUAgJChDQykgLWMgJChDRkxBR1MpICQoX0RMTCkgLUZvJEAgJCoqID4+JChFUlJTKQotCi0jIE9iamVjdCBMaWJyYXJ5IG9mIEFsbCBFc3NlbnRpYWwgUHl0aG9uIFJvdXRpbmVzCi1QeUNvcmUubGliOiAkKE1PRFVMRVMpICQoT0JKRUNUUykgJChQQVJTRVIpICQoUFlUSE9OKSAkKFBBVEhPQkopXENvbmZpZy5vYmoKLQlAIEVjaG8gQWRkaW5nIFVwZGF0ZWQgT2JqZWN0IEZpbGVzIHRvIExpbmsgTGlicmFyeSAkQAotCUAgISBJTElCICRAIC9OT0xPR08gL05PQkFDS1VQIC0rJD8gOyA+PiQoRVJSUykKLQotUHl0aG9uMjMuZGxsOiAkKFBBVEhPQkopXENvbXBpbGUub2JqIFB5Q29yZS5saWIgUHl0aG9uLmRlZgotCUAgRWNobyBMaW5raW5nICRAIEFzIERMTAotCUAgJChDQykgJChDRkxBR1MpIC9CIi9OT0UiICQoX0RMTCkgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotIwlAIEVjaG8gQ29tcHJlc3NpbmcgJEAgd2l0aCBMeExpdGUKLSMJQCBseGxpdGUgJEAKLQotIyBJQk0gTGlua2VyIFJlcXVpcmVzIE9uZSBFeHBsaWNpdCAuT0JKIFRvIEJ1aWxkIGEgLkRMTCBmcm9tIGEgLkxJQgotJChQQVRIT0JKKVxDb21waWxlLm9iajogJChQWV9QWVRIT04pXENvbXBpbGUuYwotCUAgRWNobyBDb21waWxpbmcgJCoqCi0JQCAkKENDKSAtYyAkKENGTEFHUykgJChfRExMKSAtRm8kQCAkKiogPj4kKEVSUlMpCi0KLSMgSW1wb3J0IExpYnJhcnkgZm9yIFVzaW5nIHRoZSBQeXRob24yMy5kbGwKLVB5dGhvbjIzLmxpYjogUHl0aG9uLmRlZgotCUAgRWNobyBNYWtpbmcgJEAKLQlAIElNUExJQiAvTk9MT0dPIC9OT0lHTk9SRSAkQCAkKiogPj4kKEVSUlMpCi0JQCBJTElCIC9OT0xPR08gL0NPTlZGT1JNQVQgL05PRVhURElDVElPTkFSWSAvTk9CUk9XU0UgL05PQkFDS1VQICRAOyA+PiQoRVJSUykKLQotIyBTbWFsbCBDb21tYW5kLUxpbmUgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24yMy5kbGwKLVB5dGhvbi5leGU6ICQoUEFUSE9CSilcUHl0aG9uLm9iaiBQeXRob24yMy5saWIKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBFWEUKLQlAICQoQ0MpICQoQ0ZMQUdTKSAkKF9FWEUpIC9CIi9QTTpWSU8gL1NUQUNLOjM2MDAwMCIgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jIFNtYWxsIFBNLUdVSSBQcm9ncmFtIHRvIFN0YXJ0IEludGVycHJldGVyIGluIFB5dGhvbjIzLmRsbAotUHl0aG9uUE0uZXhlOiAkKFBBVEhPQkopXFB5dGhvbi5vYmogUHl0aG9uMjMubGliCi0JQCBFY2hvIExpbmtpbmcgJEAgQXMgRVhFCi0JQCAkKENDKSAkKENGTEFHUykgJChfRVhFKSAvQiIvUE06UE0gL1NUQUNLOjM2MDAwMCIgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi1QR2VuLmV4ZTogJChQR0VOKSBQeUNvcmUubGliCi0JQCBFY2hvIExpbmtpbmcgJEAgQXMgRVhFCi0JQCAkKENDKSAkKENGTEFHUykgJChfRVhFKSAvQiIvU1RBQ0s6MzYwMDAwIiAvRmUkQCAkKF9NQVApICQqKiAkKE9USEVSTElCUykgPj4kKEVSUlMpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1pc2NlbGxhbmVvdXMgVGFyZ2V0cwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBSZW1vdmUgSW50ZXJtZWRpYXRlIFRhcmdldHMgYnV0IExlYXZlIEV4ZWN1dGFibGUgQmluYXJpZXMKLWNsZWFuOgotCS0tIERlbCAvUSAkKFBBVEhPQkopXCoub2JqCQk+TlVMIDI+JjEKLQktLSBEZWwgL1EgL1kgTm9pc2UJCQk+TlVMIDI+JjEKLQktLSBEZWwgL1EgJChFUlJTKQkJCT5OVUwgMj4mMQotCi0jIFJlbW92ZSBBbGwgVGFyZ2V0cywgSW5jbHVkaW5nIEZpbmFsIEJpbmFyaWVzCi1kaXN0Y2xlYW46IGNsZWFuCi0gICAgICAgIC0tIERlbCAvUSBQeUNvcmUubGliIFB5dGhvbjIzLmxpYiAgICAgICA+TlVMIDI+JjEKLSAgICAgICAgLS0gRGVsIC9RIFB5dGhvbjIzLmRsbCBQeXRob24uZXhlIFBHZW4uZXhlID5OVUwgMj4mMQotCi1yZWxlYXNlOiBQeXRob24uZXhlIFB5dGhvbjIzLmRsbCBQeXRob24yMy5saWIKLQktLSBARWNobyBZIHwgY29weSAvVSBQeXRob24uZXhlICAgRDpcRVhFcwotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIFB5dGhvbjIzLmRsbCBEOlxETExzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgUHl0aG9uMjMubGliIEU6XFRhdVxMaWIKLQktLSBARWNobyBZIHwgY29weSAvVSBfdGtpbnRlci5kbGwgRDpcUHl0aG9uCi0KLXRlc3Q6Ci0gICAgICAgIHB5dGhvbiAuLlwuLlxsaWJcdGVzdFxyZWdydGVzdC5weQotCi0jIFVwZGF0ZSBEZXBlbmRlbmNpZXMgb24gVGFyZ2V0cyAoVXNlcyBPcHVzTUFLRSBDb21tZXJjaWFsIFByb2R1Y3QpCi1kZXBlbmQ6Ci0JRDpcT3B1c01ha2Vcb3MybWttZiAtYyAtcwotCi0jIyMgT1BVUyBNS01GOiAgRG8gbm90IHJlbW92ZSB0aGlzIGxpbmUhICBHZW5lcmF0ZWQgZGVwZW5kZW5jaWVzIGZvbGxvdy4KLQotX3RraW50ZXIub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWFycmF5bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWF1ZGlvb3Aub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1iaW5hc2NpaS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY21hdGhtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jcGlja2xlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY3J5cHRtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY3Vyc2VzbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLV9kYm1tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWVycm5vLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJub21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mY250bG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c1xpb2N0bC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZwZWN0bG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcGV0ZXN0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLV9nZGJtbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRidWlsZGluZm8ub2JqOiBweWNvbmZpZy5oCi0KLWdldHBhdGgub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1ncnBtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXGdycC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1pbWFnZW9wLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tYWluLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tYXRobW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbXB6bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ2ludHJlcHIuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1uaXNtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxzeXNcdGltZS5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW9wZXJhdG9yLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1wYXJzZXJtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oIFwKLQkgJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbWluaXQuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXBvc2l4Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcG9zaXhtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxteXRpbWUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1wd2Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKE9TMlRDUElQKVxJbmNsdWRlXHB3ZC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1yZWFkbGluZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcmVzb3VyY2Uub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxzeXNcdGltZS5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNlbGVjdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG15c2VsZWN0LmggJChQWV9JTkNMVURFKVxteXRpbWUuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zaWduYWxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc29ja2V0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcbmV0aW5ldFxpbi5oIFwKLQkgJChPUzJUQ1BJUClcSW5jbHVkZVxzeXNcc29ja2V0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxteXRpbWUuaCAkKE9TMlRDUElQKVxJbmNsdWRlXG5ldGRiLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc3RydWN0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc3lzbG9nbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxzeXNsb2cuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oIFwKLQkgJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotdGVybWlvcy5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotX3RocmVhZG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0aHJlYWQuaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRpbWVtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxteXRpbWUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi14eG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotemxpYm1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYWJzdHJhY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNsYXNzb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY29tcGxleG9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWRpY3RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZpbGVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mbG9hdG9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZyYW1lb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCBcCi0JICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZyYW1lb2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9wY29kZS5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mdW5jb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbGlzdG9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbG9uZ29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdpbnRyZXByLmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1ldGhvZG9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0b2tlbi5oIFwKLQkgJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbW9kdWxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcmFuZ2VvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc2xpY2VvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc3RyaW5nb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotdHVwbGVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotdHlwZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQoteHhvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWFjY2VsZXIub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxub2RlLmggXAotCSAkKFBZX1BBUlNFUilccGFyc2VyLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWJpdHNldC5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotZmlyc3RzZXRzLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1ncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxncmFtbWFyLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1ncmFtbWFyMS5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotaW50cmNoZWNrLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oCi0KLWxpc3Rub2RlLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotbWV0YWdyYW1tYXIub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGFncmFtbWFyLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9QQVJTRVIpXHBnZW4uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotbXlyZWFkbGluZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1ub2RlLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxub2RlLmggXAotCSAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotcGFyc2VyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZXJyY29kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxncmFtbWFyLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9QQVJTRVIpXHBhcnNlci5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1wYXJzZXRvay5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwYXJzZXIuaCAkKFBZX0lOQ0xVREUpXHBhcnNldG9rLmggXAotCSAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oIFwKLQkgJChQWV9QQVJTRVIpXHRva2VuaXplci5oCi0KLXBnZW4ub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGFncmFtbWFyLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9QQVJTRVIpXHBnZW4uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotcGdlbm1haW4ub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxub2RlLmggXAotCSAkKFBZX0lOQ0xVREUpXHBhcnNldG9rLmggJChQWV9QQVJTRVIpXHBnZW4uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1wcmludGdyYW1tYXIub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotdG9rZW5pemVyLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHRva2VuLmggJChQWV9QQVJTRVIpXHRva2VuaXplci5oCi0KLWF0b2Yub2JqOiBweWNvbmZpZy5oCi0KLWJsdGlubW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCBcCi0JICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGV2YWwuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jZXZhbC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmcmFtZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvcGNvZGUuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvbXBpbGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGdyYW1pbml0LmggXAotCSAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCBcCi0JICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3Bjb2RlLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWVycm9ycy5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZm1vZC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hdGguaAotCi1mcm96ZW4ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZyb3plbm1haW4ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldGFyZ3Mub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldGNvbXBpbGVyLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldGNvcHlyaWdodC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRwbGF0Zm9ybS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXR2ZXJzaW9uLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxwYXRjaGxldmVsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdyYW1pbml0Lm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLWh5cG90Lm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oCi0KLWltcG9ydC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZXJyY29kZS5oICQoUFlfSU5DTFVERSlcZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX1BZVEhPTilcaW1wb3J0ZGwuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWltcG9ydGRsLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX1BZVEhPTilcaW1wb3J0ZGwuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWFyc2hhbC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdpbnRyZXByLmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtYXJzaGFsLmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbW9kc3VwcG9ydC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbXlzdHJ0b3VsLm9iajogcHljb25maWcuaAotCi1weWZwZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxweWZwZS5oCi0KLXB5c3RhdGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXB5dGhvbnJ1bi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGJpdHNldC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCBcCi0JICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oIFwKLQkgJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtYXJzaGFsLmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxwYXJzZXRvay5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc2lnY2hlY2sub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cmR1cC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oCi0KLXN0cnRvZC5vYmo6IHB5Y29uZmlnLmgKLQotc3RydWN0bWVtYmVyLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc3lzbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxvc2RlZnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotdGhyZWFkLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXHRocmVhZC5oCi0KLXRyYWNlYmFjay5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnJhbWVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlcb3NkZWZzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL21ha2VmaWxlLm9tayBiL1BDL29zMnZhY3BwL21ha2VmaWxlLm9tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWExMmM5Ni4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQ3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgICAgICAgICAgVG9wLUxldmVsIE1ha2VmaWxlIGZvciBCdWlsZGluZyBQeXRob24gZm9yIE9TLzIKLSMKLSMgVGhpcyBtYWtlZmlsZSB3YXMgZGV2ZWxvcGVkIGZvciB1c2Ugd2l0aCBJQk0ncyBWaXN1YWxBZ2UgQy9DKysKLSMgZm9yIE9TLzIgY29tcGlsZXIsIHZlcnNpb24gMy4wLCB3aXRoIEZpeHBhY2sgOCBhcHBsaWVkLiAgSXQgdXNlcwotIyB0aGUgY29tbWVyY2lhbCBPcHVzTUFLRSB0b29sLgotIwotIyBUaGUgb3V0cHV0IG9mIHRoZSBidWlsZCBpcyBhIGxhcmdpc2ggUHl0aG9uMTUuRExMIGNvbnRhaW5pbmcgdGhlCi0jIGVzc2VudGlhbCBtb2R1bGVzIG9mIFB5dGhvbiBhbmQgYSBzbWFsbCBQeXRob24uZXhlIHByb2dyYW0gdG8gc3RhcnQKLSMgdGhlIGludGVycHJldGVyLiAgV2hlbiBlbWJlZGRpbmcgUHl0aG9uIHdpdGhpbiBhbm90aGVyIHByb2dyYW0sIG9ubHkKLSMgUHl0aG9uMTUuRExMIGlzIG5lZWRlZC4KLSMKLSMgVGhlc2UgdHdvIGJpbmFyaWVzIGNhbiBiZSBzdGF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBWaXN1YWxBZ2UgQy9DKysKLSMgcnVudGltZSBsaWJyYXJ5IChwcm9kdWNpbmcgbGFyZ2VyIGJpbmFyaWVzKSwgb3IgZHluYW1pY2FsbHkgbGlua2VkCi0jIHRvIG1ha2Ugc21hbGxlciBvbmVzIHRoYXQgcmVxdWlyZSB0aGUgY29tcGlsZXIgdG8gYmUgaW5zdGFsbGVkIG9uCi0jIGFueSBzeXN0ZW0gUHl0aG9uIGlzIHVzZWQgb24uCi0jCi0jIEhpc3RvcnkgKE1vc3QgUmVjZW50IEZpcnN0KQotIwotIyAyMC1Ob3YtOTcganJyIENsZWFuZWQgVXAgZm9yIEFwcGx5aW5nIHRvIERpc3RyaWJ1dGlvbgotIyAyOS1PY3QtOTcganJyIE1vZGlmaWVkIGZvciBVc2Ugd2l0aCBQeXRob24gMS41IEFscGhhIDQKLSMgMDMtQXVnLTk2IGpyciBPcmlnaW5hbCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNCBSZWxlYXNlCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUGxhY2VzIGFuZCBUaGluZ3MKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLVBZX01PRFVMRVMgICAgICA9IC4uXC4uXE1vZHVsZXMKLVBZX09CSkVDVFMgICAgICA9IC4uXC4uXE9iamVjdHMKLVBZX1BBUlNFUiAgICAgICA9IC4uXC4uXFBhcnNlcgotUFlfUFlUSE9OICAgICAgID0gLi5cLi5cUHl0aG9uCi1QWV9JTkNMVURFICAgICAgPSAuLlwuLlxJbmNsdWRlCi1QWV9JTkNMVURFUyAgICAgPSAuOyQoUFlfSU5DTFVERSk7JChQWV9NT0RVTEVTKTskKFBZX09CSkVDVFMpOyQoUFlfUEFSU0VSKTskKFBZX1BZVEhPTikKLQotIyBXaGVyZSB0byBGaW5kIHRoZSBJQk0gVENQL0lQIFNvY2tldCBJbmNsdWRlcyBhbmQgTGlicmFyaWVzCi1PUzJUQ1BJUCAgICAgICAgPSBDOlxNUFROCi0KLSMgV2hlcmUgdG8gUHV0IHRoZSAuT0JKIEZpbGVzLCBUbyBLZWVwIFRoZW0gT3V0IG9mIHRoZSBXYXkKLS5QQVRILm9iagk9IG9iagotCi0jIFNlYXJjaCBQYXRoIGZvciBJbmNsdWRlIEZpbGVzCi1QUk9KSU5DTFVERQk9IC47JChPUzJUQ1BJUClcSW5jbHVkZTskKFBZX0lOQ0xVREVTKQotCi0jIFBsYWNlIHRvIFNlYXJjaCBmb3IgU291cmNlcyByZSBPcHVzTUFLRSBEZXBlbmRlbmN5IEdlbmVyYXRvciAoQ29tbWVyY2lhbCkKLU1LTUZfU1JDUwk9ICQoUFlfTU9EVUxFUylcKi5jICQoUFlfT0JKRUNUUylcKi5jICQoUFlfUEFSU0VSKVwqLmMgJChQWV9QWVRIT04pXCouYwotCi0uSERSUEFUSC5jCTo9ICQoUFJPSklOQ0xVREUsOz0gKSAkKC5IRFJQQVRILmMpCi0uUEFUSC5jICAgICAgICAgPSAuOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi1PVEhFUkxJQlMJPSAkKE9TMlRDUElQKVxsaWJcc28zMmRsbC5saWIgJChPUzJUQ1BJUClcbGliXHRjcDMyZGxsLmxpYgotCi0jIyMjIyMjIyMjIyMjIyMjIwotIyBJbmZlcmVuY2UgUnVsZXMKLSMjIyMjIyMjIyMjIyMjIyMjCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQeXRob24gU3Vic3lzdGVtcwotIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFBZVEhPTiBpcyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi1QWVRIT04JCT0gICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEJsdGluTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBDRXZhbC5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQ29tcGlsZS5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEVycm9ycy5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBGcm96ZW4ub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0YXJncy5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldENvbXBpbGVyLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRDb3B5cmlnaHQub2JqICAgXAotICAgICAgICAgICAgICAgICAgR2V0TVRpbWUub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldE9wdC5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRQbGF0Zm9ybS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgR2V0VmVyc2lvbi5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIEdyYW1Jbml0Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBJbXBvcnQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgSW1wb3J0REwub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1hcnNoYWwub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNb2RTdXBwb3J0Lm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgTXlTdHJ0b3VsLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFB5U3RhdGUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQeXRob25SdW4ub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgU3RydWN0TWVtYmVyLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFN5c01vZHVsZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBUaHJlYWQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgVHJhY2VCYWNrLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEZyb3plbk1haW4ub2JqCi0KLSMgT21pdHRlZCBQeXRob24gRWxlbWVudHMgKGFuZCBSZWFzb24pOgotICAjIGF0b2YuYyAgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgZHVwMi5jICAgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBmbW9kLmMgICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGdldGN3ZC5jICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgaHlwb3QuYyAgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBtZW1tb3ZlLmMgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIHN0cmR1cC5jICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgc3RyZXJyb3IuYyAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBzdHJ0b2QuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotCi0gICMgc2lnY2hlY2suYyAgICAgIC0tIFByaW1pdGl2ZSBTaWduYWwgQ2F0Y2hlciAoU2lnbmFsTW9kdWxlLmMgVXNlZCBJbnN0ZWFkKQotICAjIHB5ZnBlLmMgICAgICAgICAtLSBQcmltaXRpdmUgRlBFIENhdGNoZXIgKE5vdCBSZWZlcmVuY2VkIGJ5IEFueW9uZSkKLSAgIyBmcm96ZW5tYWluLmMKLQotIyBQeXRob24ncyBJbnRlcm5hbCBQYXJzZXIKLVBBUlNFUgkJPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBBY2NlbGVyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtbWFyMS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBNeVJlYWRsaW5lLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBOb2RlLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQYXJzZXIub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQYXJzZVRvay5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBUb2tlbml6ZXIub2JqCi0KLSMgUHl0aG9uIE9iamVjdCBUeXBlcwotT0JKRUNUUwkJPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBBYnN0cmFjdC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBDbGFzc09iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICBDT2JqZWN0Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBDb21wbGV4T2JqZWN0Lm9iaiBcCi0gICAgICAgICAgICAgICAgICBEaWN0T2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBGaWxlT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBGbG9hdE9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICBGcmFtZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICBGdW5jT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBMaXN0T2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBMb25nT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBNZXRob2RPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICBNb2R1bGVPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICBPYmplY3Qub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBSYW5nZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICBTbGljZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICBTdHJpbmdPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICBUdXBsZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICBUeXBlT2JqZWN0Lm9iagotCi0jIE9taXR0ZWQgT2JqZWN0cyAoYW5kIFJlYXNvbik6Ci0gICMgeHhvYmplY3QuYyAgICAgIC0tIFRlbXBsYXRlIHRvIENyZWF0ZSBZb3VyIE93biBPYmplY3QgVHlwZXMKLQotIyBFeHRlbnNpb24gTW9kdWxlcyAoQnVpbHQtSW4gb3IgYXMgU2VwYXJhdGUgRExMcykKLU1PRFVMRVMJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQXJyYXlNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgQmluQXNjaWkub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgQ01hdGhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgRXJybm9Nb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgR2V0QnVpbGRJbmZvLm9iaiAgXAotICAgICAgICAgICAgICAgICAgR2V0UGF0aFAub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgTWFpbi5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgTWF0aE1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTUQ1Yy5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgTUQ1TW9kdWxlLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgT3BlcmF0b3Iub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgUG9zaXhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgUmVnZXhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgUmVnRXhwci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgUmVvcE1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgU2VsZWN0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgU2lnbmFsTW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgU29ja2V0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgU291bmRFeC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgU3Ryb3BNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgU3RydWN0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgVGltZU1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgVGhyZWFkTW9kdWxlLm9iagotCi0jIE9taXR0ZWQgTW9kdWxlcyAoYW5kIERlc2NyaXB0aW9uL1JlYXNvbik6Ci0gICMKLSAgIyBNdWx0aW1lZGlhOgotICAjIGF1ZGlvb3AuYyAgICAgICAtLSBWYXJpb3VzIENvbXB1dGUgT3BlcmF0aW9ucyBvbiBBdWRpbyBTYW1wbGVzCi0KLSAgIyBEYXRhYmFzZToKLSAgIyBfZGJtbW9kdWxlLmMgICAgLS0gV3JhcHBlciBvZiBEQk0gRGF0YWJhc2UgQVBJIChHZW5lcmljIEZsYXZvcikKLSAgIyBfZ2RibW1vZHVsZS5jICAgLS0gV3JhcHBlciBvZiBEQk0gRGF0YWJhc2UgQVBJIChHTlUgRmxhdm9yKQotCi0gICMgQ3J5cHRvZ3JhcGh5OgotICAjIGNyeXB0bW9kdWxlLmMgICAtLSBTaW1wbGUgV3JhcHBlciBmb3IgY3J5cHQoKSBGdW5jdGlvbgotCi0jICAgICAgICAgICAgICAgICAgZmNudGxtb2R1bGUub2JqICAgXAotIyAgICAgICAgICAgICAgICAgIGZwZWN0bG1vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICBmcGV0ZXN0bW9kdWxlLm9iaiBcCi0jIFVuaXgtU3BlY2lmaWMgICAgZ2V0cGF0aC5vYmogICAgICAgXAotIyAgICAgICAgICAgICAgICAgIGdycG1vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICBtcHptb2R1bGUub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgbmlzbW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHBhcnNlcm1vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICBwd2Rtb2R1bGUub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgcmVhZGxpbmUub2JqICAgICAgXAotIyAgICAgICAgICAgICAgICAgIHJlc291cmNlLm9iaiAgICAgIFwKLSMgICAgICAgICAgICAgICAgICBzeXNsb2dtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgdGVybWlvcy5vYmogICAgICAgXAotCi0gICMgVXNlciBJbnRlcmZhY2U6Ci0jICAgICAgICAgICAgICAgICAgX3RraW50ZXIub2JqICAgICAgXCAgICAgCi0jICAgICAgICAgICAgICAgICAgc3Rkd2lubW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIGN1cnNlc21vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICB0Y2xOb3RpZnkub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgdGthcHBpbml0Lm9iaiAgICAgXAotICAjIGZsbW9kdWxlLmMgICAgICAtLSBXcmFwcGVyIG9mIEZPUk1TIExpYnJhcnkgKFNjcmVlbiBGb3JtcykKLQotICAjIHpsaWJtb2R1bGUuYyAgICAtLSBXcmFwcGVyIG9mIFpMaWIgQ29tcHJlc3Npb24gQVBJIChHWmlwIEZvcm1hdCkKLSAgIyBwdXJlbW9kdWxlLmMgICAgLS0gV3JhcHBlciBvZiBQdXJpZnkgRGVidWdnaW5nIEFQSSAoUHJvYmFibHkgTm9uLU9TLzIpCi0gICMgeHhtb2R1bGUuYyAgICAgIC0tIFRlbXBsYXRlIHRvIENyZWF0ZSBZb3VyIE93biBNb2R1bGUKLQotIwotIyBTdGFuZGFsb25lIFBhcnNlciBHZW5lcmF0b3IgUHJvZ3JhbSAoU2hhcmVzIFNvbWUgb2YgUHl0aG9uJ3MgTW9kdWxlcykKLVBHRU4gICAgICAgICAgICA9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBHZW5NYWluLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBHZW4ub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFByaW50R3JhbW1hci5vYmogIFwKLSAgICAgICAgICAgICAgICAgIExpc3ROb2RlLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdyYW1tYXIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEJpdFNldC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEZpcnN0U2V0cy5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ldGFHcmFtbWFyLm9iagotCi0jIE9taXR0ZWQgUGFyc2VyIEVsZW1lbnRzIChhbmQgUmVhc29uKToKLSAgIyBpbnRyY2hlY2suYyAgICAgLS0gTm90IFJlZmVyZW5jZWQgYnkgQW55b25lICg/KQotCi0jIyMjIyMjIyMjIyMjIyMjIyMKLSMgTWFjcm9zIGFuZCBGbGFncwotIyMjIyMjIyMjIyMjIyMjIyMjCi1fQkFTRQkJPSAvUSAvVzIgL0kkKFBST0pJTkNMVURFKQotCQkjIC9RICAgPSBPbWl0IElCTSBDb3B5cmlnaHQKLQkJIyAvVzIgID0gU2hvdyBXYXJuaW5ncy9FcnJvcnMgT25seQotCQkjIC9GaSAgPSBDcmVhdGUgUHJlY29tcGlsZWQgSGVhZGVycwotCQkjIC9TaSAgPSBVdGlsaXplIFByZWNvbXBpbGVkIEhlYWRlcnMKLQotX0dFTgkJPSAvRzQgL0dtIC9HZCAvQiIvU1RBQ0s6MzYwMDAwIgotCQkjIC9HNCAgPSBHZW5lcmF0ZSBDb2RlIGZvciA0ODYgKFVzZSAzODYgZm9yIERlYnVnZ2VyKQotCQkjIC9HbSAgPSBVc2UgTXVsdGl0aHJlYWQgUnVudGltZQotCQkjIC9HZCAgPSBEeW5hbWljYWxseSBMb2FkIFJ1bnRpbWUKLQkJIyAvR3MgID0gUmVtb3ZlIENvZGUgZm9yIFN0YWNrIFByb2JlcwotCQkjIC9HeCAgPSBSZW1vdmUgQysrIEV4Y2VwdGlvbi1IYW5kbGluZyBJbmZvCi0JCSMgL1RkcCA9IEdlbmVyYXRlIENvZGUgZm9yIEMrKyBUZW1wbGF0ZXMKLQkJIyAvUm4gID0gR2VuZXJhdGUgQ29kZSB3aXRob3V0IGEgUnVudGltZQotCQkjIC9CIi9TVEFDSzpuIiA9IFNldCBTdGFjayBTaXplCi0KLV9PUFQJCT0gL08gL0dsCi0JCSMgL08gICA9IEVuYWJsZSBTcGVlZC1PcHRpbWl6YXRpb25zCi0JCSMgL09sICA9IFBhc3MgQ29kZSBUaHJ1IEludGVybWVkaWF0ZSBMaW5rZXIKLQkJIyAvR3UgID0gQWR2aXNlIExpbmtlciBBbGwgRXh0IERhdGEgaXMgSUQnZAotCQkjIC9HbCAgPSBIYXZlIExpbmtlciBSZW1vdmUgVW51c2VkIEZucwotCi1fREJHCQk9IC9ESEFWRV9DT05GSUdfSCAvRFVTRV9TT0NLRVQKLQkJIyAvVGkgID0gRW1iZWQgRGVidWdnZXIvQW5hbHl6ZXIgUmVjcwotCQkjIC9UbSAgPSBFbmFibGUgRGVidWcgTWVtb3J5IEZucwotCQkjIC9UeCAgPSBSZXF1ZXN0IEZ1bGwgRHVtcCBVcG9uIEV4Y2VwdGlvbgotCQkjIC9EREVCVUcgPSBFbmFibGUgQXBwLUludGVybmFsIERlYnVnZ2luZyBDb2RlCi0gICAgICAgICAgICAgICAgIyAvRFVTRV9TT0NLRVQgPSAKLSAgICAgICAgICAgICAgICAjIC9EVVNFX0RMX0VYUE9SVCA9IAotCi1fT1VUCQk9IAotCQkjIC9GYiAgPSBFbWJlZCBCcm93c2VyIFJlY3MKLQkJIyAvR2ggID0gR2VuZXJhdGUgQ29kZSBmb3IgUHJvZmlsZXIgSG9va3MKLQkJIyAvRmwgID0gT3V0cHV0IEMvQysrIExpc3RpbmcgRmlsZXMKLSAgICAgICAgICAgICAgICAjIC9MZiAgPSBQcm92aWRlIEZ1bGwgKERldGFpbGVkKSBMaXN0aW5nIEZpbGVzCi0JCSMgL0ZtLiA9IE91dHB1dCBMaW5rZXIgTWFwIEZpbGUKLQkJIyAvRnQuID0gT3V0cHV0IEMrKyBUZW1wbGF0ZSBSZXNvbHV0aW9uIEZpbGVzCi0KLV9NQVAJCT0gL0ZtTm9pc2VcJCguVEFSR0VULEIsPi5tYXApCi0KLV9ETEwJCT0gL0dlLQotX0VYRQkJPSAvR2UKLQkJIyAvR2UgPSBDcmVhdGUgYW4gRVhFLCBub3QgRExMCi0KLUNGTEFHUwkJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkgL1NzCi1DUFBGTEFHUwk9ICQoX0JBU0UpICQoX0dFTikgJChfT1BUKSAkKF9EQkcpICQoX09VVCkgJChfRVhFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFByaW1hcnkgVGFyZ2V0KHMpCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1BbGw6ICBvYmogbm9pc2UgUHlDb3JlLmxpYiBQeXRob24xNS5saWIgUHl0aG9uMTUuZGxsIFB5dGhvbi5leGUgUEdlbi5leGUKLQotIyMjIyMjIyMjIyMjIyMKLSMKLSMjIyMjIyMjIyMjIyMjCi0KLSMgT2JqZWN0IExpYnJhcnkgb2YgQWxsIEVzc2VudGlhbCBQeXRob24gUm91dGluZXMKLVB5Q29yZS5saWI6ICQoTU9EVUxFUykgJChPQkpFQ1RTKSAkKFBBUlNFUikgJChQWVRIT04pIENvbmZpZy5vYmoKLSAgICAgICAgJWRvICIlLmxpYiIKLQotUHl0aG9uMTUuZGxsOiBDb21waWxlLm9iaiBQeUNvcmUubGliIFB5dGhvbi5kZWYKLSAgICAgICAgJWRvICIlLmRsbCIgQ1BQRkxBR1MrPS9CIi9OT0UiIENQUEZMQUdTKz0kKF9NQVApCi0KLUNvbXBpbGUub2JqOiBDb21waWxlLmMKLSAgICAgICAgJWRvICIuYy5vYmoiIENGTEFHUys9JChfRExMKQotCi0jIEltcG9ydCBMaWJyYXJ5IGZvciBVc2luZyB0aGUgUHl0aG9uMTUuZGxsCi1QeXRob24xNS5saWI6IFB5dGhvbi5kZWYKLSAgICAgICAgJWRvICIuZGVmLmxpYiIKLQotIyBTbWFsbCBQcm9ncmFtIHRvIFN0YXJ0IEludGVycHJldGVyIGluIFB5dGhvbjE1LmRsbAotUHl0aG9uLmV4ZTogUHl0aG9uLm9iaiBQeXRob24xNS5saWIKLSAgICAgICAgJWRvICIlLmV4ZSIgQ1BQRkxBR1MrPSQoX01BUCkKLQotI1B5dGhvbi5vYmo6IFB5dGhvbi5jCi0jICAgICAgICAlZG8gIi5jLm9iaiIgQ0ZMQUdTKz0kKF9FWEUpCi0KLVBHZW4uZXhlOiAkKFBHRU4pIFB5Q29yZS5saWIKLSAgICAgICAgJWRvICIlLmV4ZSIgQ1BQRkxBR1MrPSQoX01BUCkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTWlzY2VsbGFuZW91cyBUYXJnZXRzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFJlbW92ZSBJbnRlcm1lZGlhdGUgVGFyZ2V0cyBidXQgTGVhdmUgRXhlY3V0YWJsZSBCaW5hcmllcwotY2xlYW46Ci0JLS0gRGVsIC9RICQoLlBBVEgub2JqKVwqLm9iagkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RIC9ZIE5vaXNlCQkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RICQoRVJSUykJCQk+TlVMIDI+JjEKLQotIyBSZW1vdmUgQWxsIFRhcmdldHMsIEluY2x1ZGluZyBGaW5hbCBCaW5hcmllcwotZGlzdGNsZWFuOiBjbGVhbgotICAgICAgICAtLSBEZWwgL1EgUHlDb3JlLmxpYiBQeXRob24xNS5saWIgICAgICAgPk5VTCAyPiYxCi0gICAgICAgIC0tIERlbCAvUSBQeXRob24xNS5kbGwgUHl0aG9uLmV4ZSAgICAgICA+TlVMIDI+JjEKLQotcmVsZWFzZTogUHl0aG9uLmV4ZSBQeXRob24xNS5kbGwgUHl0aG9uMTUubGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgJCguU09VUkNFUyxNIiouZXhlIikgRDpcRVhFcwotCS0tIEBFY2hvIFkgfCBjb3B5IC9VICQoLlNPVVJDRVMsTSIqLmRsbCIpIEQ6XERMTHMKLQktLSBARWNobyBZIHwgY29weSAvVSAkKC5TT1VSQ0VTLE0iKi5saWIiKSBFOlxUYXVcTGliCi0KLXRlc3Q6Ci0gICAgICAgIHB5dGhvbiAuLlwuLlxsaWJcdGVzdFxyZWdydGVzdC5weQotCi0jIFVwZGF0ZSBEZXBlbmRlbmNpZXMgb24gVGFyZ2V0cyAoVXNlcyBPcHVzTUFLRSBDb21tZXJjaWFsIFByb2R1Y3QpCi1kZXBlbmQ6Ci0JRDpcT3B1c01ha2Vcb3MybWttZiAtYyAtcwotCi0jIyMgT1BVUyBNS01GOiAgRG8gbm90IHJlbW92ZSB0aGlzIGxpbmUhICBHZW5lcmF0ZWQgZGVwZW5kZW5jaWVzIGZvbGxvdy4KLQotX3RraW50ZXIub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYXJyYXltb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYXVkaW9vcC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1iaW5hc2NpaS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jbWF0aG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jcGlja2xlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNyeXB0bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWN1cnNlc21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1fZGJtbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWVycm5vLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWVycm5vbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZjbnRsbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcc3lzXGlvY3RsLmggY2V2YWwuaCBcCi0JIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBcCi0JIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBcCi0JIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcGVjdGxtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnBldGVzdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1fZ2RibW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXRidWlsZGluZm8ub2JqOiBweWNvbmZpZy5oCi0KLWdldHBhdGgub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ3JwbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGdycC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWltYWdlb3Aub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWFpbi5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tYXRobW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1wem1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25naW50cmVwci5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW5pc21vZHVsZS5vYmo6IGFic3RyYWN0LmggYzpcbXB0blxpbmNsdWRlXHN5c1x0aW1lLmggY2V2YWwuaCBjbGFzc29iamVjdC5oIFwKLQkgY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1vcGVyYXRvci5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1wYXJzZXJtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGdyYW1pbml0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBvYmplY3QuaCBvYmppbXBsLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0b2tlbi5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1wb3NpeC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbXl0aW1lLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1wb3NpeG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbXl0aW1lLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1wd2Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBwd2QuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcmVhZGxpbmUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcmVzb3VyY2Uub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxzeXNcdGltZS5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBcCi0JIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIFwKLQkgZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc2VsZWN0bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBteXNlbGVjdC5oIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc2lnbmFsbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNvY2tldG1vZHVsZS5vYmo6IGFic3RyYWN0LmggYzpcbXB0blxpbmNsdWRlXG5ldGluZXRcaW4uaCBcCi0JIGM6XG1wdG5caW5jbHVkZVxzeXNcc29ja2V0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbXl0aW1lLmggbmV0ZGIuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggXAotCSBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXN0cnVjdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zeXNsb2dtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c2xvZy5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotdGVybWlvcy5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1fdGhyZWFkbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0aHJlYWQuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRpbWVtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQoteHhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotemxpYm1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1hYnN0cmFjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jbGFzc29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNvbXBsZXhvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZGljdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1maWxlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZsb2F0b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZyYW1lb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZyYW1lb2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3Bjb2RlLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnVuY29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1saXN0b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWxvbmdvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggXAotCSB0dXBsZW9iamVjdC5oCi0KLW1ldGhvZG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1vZHVsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1vYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcmFuZ2VvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc2xpY2VvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3RyaW5nb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXR1cGxlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXR5cGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQoteHhvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYWNjZWxlci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBcCi0JIHBhcnNlci5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotYml0c2V0Lm9iajogYml0c2V0LmggcHljb25maWcuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1maXJzdHNldHMub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotZ3JhbW1hci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1ncmFtbWFyMS5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1pbnRyY2hlY2sub2JqOiBweWNvbmZpZy5oIGludHJjaGVjay5oIG15bWFsbG9jLmggbXlwcm90by5oCi0KLWxpc3Rub2RlLm9iajogcHljb25maWcuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggXAotCSB0b2tlbi5oCi0KLW1ldGFncmFtbWFyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbWV0YWdyYW1tYXIuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIHBnZW4uaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1teXJlYWRsaW5lLm9iajogcHljb25maWcuaCBpbnRyY2hlY2suaCBteW1hbGxvYy5oIG15cHJvdG8uaAotCi1ub2RlLm9iajogcHljb25maWcuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotcGFyc2VyLm9iajogYml0c2V0LmggcHljb25maWcuaCBlcnJjb2RlLmggZ3JhbW1hci5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbm9kZS5oIHBhcnNlci5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotcGFyc2V0b2sub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGVycmNvZGUuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBub2RlLmggcGFyc2VyLmggcGFyc2V0b2suaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oIFwKLQkgdG9rZW5pemVyLmgKLQotcGdlbi5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG1ldGFncmFtbWFyLmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBub2RlLmggcGdlbi5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotcGdlbm1haW4ub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggXAotCSBwYXJzZXRvay5oIHBnZW4uaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1wcmludGdyYW1tYXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLXRva2VuaXplci5vYmo6IHB5Y29uZmlnLmggZXJyY29kZS5oIG15bWFsbG9jLmggbXlwcm90by5oIHBnZW5oZWFkZXJzLmggXAotCSBweWRlYnVnLmggdG9rZW4uaCB0b2tlbml6ZXIuaAotCi1hdG9mLm9iajogcHljb25maWcuaAotCi1ibHRpbm1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXZhbC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0LmggXAotCSBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNldmFsLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBldmFsLmggZmlsZW9iamVjdC5oIFwKLQkgZmxvYXRvYmplY3QuaCBmcmFtZW9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBcCi0JIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9wY29kZS5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggXAotCSB0dXBsZW9iamVjdC5oCi0KLWNvbXBpbGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGdyYW1pbml0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBvYmplY3QuaCBvYmppbXBsLmggXAotCSBvcGNvZGUuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRva2VuLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJvcnMub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZm1vZC5vYmo6IHB5Y29uZmlnLmggbXltYXRoLmgKLQotZnJvemVuLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZyb3plbm1haW4ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0YXJncy5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXRjb21waWxlci5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXRjb3B5cmlnaHQub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0cGxhdGZvcm0ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0dmVyc2lvbi5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHBhdGNobGV2ZWwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ3JhbWluaXQub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLWh5cG90Lm9iajogcHljb25maWcuaCBteW1hdGguaCBteXByb3RvLmgKLQotaW1wb3J0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBlcnJjb2RlLmggZXZhbC5oIFwKLQkgZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGltcG9ydGRsLmggXAotCSBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1hcnNoYWwuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG5vZGUuaCBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0b2tlbi5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotaW1wb3J0ZGwub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW1wb3J0ZGwuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tYXJzaGFsLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25naW50cmVwci5oIGxvbmdvYmplY3QuaCBtYXJzaGFsLmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tb2RzdXBwb3J0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW15c3RydG91bC5vYmo6IHB5Y29uZmlnLmgKLQotcHlmcGUub2JqOiBweWNvbmZpZy5oIHB5ZnBlLmgKLQotcHlzdGF0ZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1weXRob25ydW4ub2JqOiBhYnN0cmFjdC5oIGJpdHNldC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21waWxlLmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGVycmNvZGUuaCBldmFsLmggXAotCSBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggZ3JhbW1hci5oIGltcG9ydC5oIFwKLQkgaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtYXJzaGFsLmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIHBhcnNldG9rLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNpZ2NoZWNrLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXN0cmR1cC5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmgKLQotc3RydG9kLm9iajogcHljb25maWcuaAotCi1zdHJ1Y3RtZW1iZXIub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1zeXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotdGhyZWFkLm9iajogcHljb25maWcuaCB0aHJlYWQuaAotCi10cmFjZWJhY2sub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnJhbWVvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN0cnVjdG1lbWJlci5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaApkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvcHljb25maWcuaCBiL1BDL29zMnZhY3BwL3B5Y29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NjViNDQuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0jaWZuZGVmIFB5X0NPTkZJR19ICi0jZGVmaW5lIFB5X0NPTkZJR19ICi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBweWNvbmZpZy5oLiAgTk9UIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4KLSAqCi0gKiBUaGlzIGlzIGEgbWFudWFsbHkgbWFpbnRhaW5lZCB2ZXJzaW9uIHVzZWQgZm9yIHRoZSBJQk0gVmlzdWFsQWdlCi0gKiBDL0MrKyBjb21waWxlciBvbiB0aGUgT1MvMiBwbGF0Zm9ybS4gIEl0IGlzIGEgc3RhbmRhcmQgcGFydCBvZgotICogdGhlIFB5dGhvbiBkaXN0cmlidXRpb24uCi0gKgotICogRklMRVNZU1RFTSBERUZJTkVTOgotICogVGhlIGNvZGUgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIHdheSBvZiBuYW1pbmcgZmlsZXMgYW5kCi0gKiBkaXJlY3RvcnkgcGF0aHMgc2hvdWxkIGJlIHdyYXBwZWQgYXJvdW5kIG9uZSBvZiB0aGUgZm9sbG93aW5nCi0gKiAjZGVmaW5lczoKLSAqCi0gKiAgICAgRE9TRklMRVNZUyAgIFBDRE9TLVN0eWxlIChmb3IgUENET1MsIFdpbmRvd3MgYW5kIE9TLzIpCi0gKiAgICAgTUFDRklMRVNZUyAgIE1hY2ludG9zaC1TdHlsZQotICogICAgIFVOSVhGSUxFU1lTICBVbml4LVN0eWxlCi0gKiAgICAgQU1JR0FGSUxFU1lTIEFtaWdhRE9TLVN0eWxlCi0gKiAKLSAqIEJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCBjb21waWxlcnMgYW5kIG9wZXJhdGluZyBzeXN0ZW1zIGluCi0gKiB1c2Ugb24gdGhlIEludGVsIHBsYXRmb3JtLCBuZWl0aGVyIHRoZSBjb21waWxlciBuYW1lIG5vcgotICogdGhlIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSBpcyBzdWZmaWNpZW50LgotICoKLSAqIE9TLzIgREVGSU5FUzoKLSAqIFRoZSBjb2RlIHNwZWNpZmljIHRvIE9TLzIncyBQcm9ncmFtIEFQSSBzaG91bGQgYmUgd3JhcHBlZCBhcm91bmQKLSAqCi0gKiBfX1RPU19PUzJfXyAgIFRhcmdldCBPcGVyYXRpbmcgU3lzdGVtLCBPUy8yCi0gKgotICogQW55IGNvZGUgc3BlY2lmaWMgdG8gdGhlIGNvbXBpbGVyIGl0c2VsZiBzaG91bGQgYmUgd3JhcHBlZCB3aXRoCi0gKgotICogX19JQk1DX18gICAgICBJQk0gQyBDb21waWxlcgotICogX19JQk1DUFBfXyAgICBJQk0gQysrIENvbXBpbGVyCi0gKgotICogTm90ZSB0aGF0IHNpbmNlIHRoZSBWaXN1YWxBZ2UgQy9DKysgY29tcGlsZXIgaXMgYWxzbyBhdmFpbGFibGUKLSAqIGZvciB0aGUgV2luZG93cyBwbGF0Zm9ybSwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB1c2UgYm90aCBhCi0gKiBfX1RPU19PUzJfXyBhbmQgYSBfX0lCTUNfXyB0byBzZWxlY3QgYSB2ZXJ5IHNwZWNpZmljIGVudmlyb25tZW50LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogU29tZSBzeXN0ZW1zIHJlcXVpcmUgc3BlY2lhbCBkZWNsYXJhdGlvbnMgZm9yIGRhdGEgaXRlbXMgaW1wb3J0ZWQKLSAqIG9yIGV4cG9ydGVkIGZyb20gZHluYW1pYyBsaW5rIGxpYnJhcmllcy4gIE5vdGUgdGhhdCB0aGUgZGVmaW5pdGlvbgotICogb2YgRExfSU1QT1JUIGNvdmVycyBib3RoIGNhc2VzLiAgRGVmaW5lIFVTRV9ETF9JTVBPUlQgZm9yIHRoZSBjbGllbnQKLSAqIG9mIGEgRExMLiAgRGVmaW5lIFVTRV9ETF9FWFBPUlQgd2hlbiBtYWtpbmcgYSBETEwuCi0gKi8KLQotI2luY2x1ZGUgPGlvLmg+Ci0KLS8qIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgRmluZGluZyBNb2R1bGVzICovCi0jZGVmaW5lIFBSRUZJWCAgICAgICAgICAgICAgICAgIiIKLSNkZWZpbmUgRVhFQ19QUkVGSVggICAgICAgICAgICAiIgotCi0vKiBQcm92aWRlIGEgZGVmYXVsdCBsaWJyYXJ5IHNvIHdyaXRlcnMgb2YgZXh0ZW5zaW9uIG1vZHVsZXMKLSAqIHdvbid0IGhhdmUgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGl0IGFueW1vcmUKLSAqLwotI3ByYWdtYSBsaWJyYXJ5KCJQeXRob24yNC5saWIiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgMzItQml0IElCTSBWaXN1YWxBZ2UgQy9DKysgdjMuMCBmb3IgT1MvMiAgICAgKi8KLS8qICAoQ29udmVydCBDb21waWxlciBGbGFncyBpbnRvIFVzZWZ1bCBTd2l0Y2hlcykgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBQTEFURk9STSAgICAib3MyIgotI2RlZmluZSBDT01QSUxFUiAgICAiW1Zpc3VhbEFnZSBDL0MrK10iCi0jZGVmaW5lIFBZT1NfT1MyICAgIC8qIERlZmluZSBJbmRpY2F0b3Igb2YgT3BlcmF0aW5nIFN5c3RlbSAqLwotI2RlZmluZSBQWUNDX1ZBQ1BQICAvKiBEZWZpbmUgSW5kaWNhdG9yIG9mIEMgQ29tcGlsZXIgKi8KLQotICAvKiBQbGF0Zm9ybSBGaWxlc3lzdGVtICovCi0jZGVmaW5lIFBZVEhPTlBBVEggICIuOy5cXGxpYjsuXFxsaWJcXHBsYXQtd2luIgotI2RlZmluZSBET1NGSUxFU1lTICAvKiBPUy8yIFVzZXMgdGhlIERPUyBGaWxlIE5hbWluZyBDb252ZW50aW9ucyAqLwotLyogI2RlZmluZSBJTVBPUlRfOHgzX05BTUVTIChsZXQncyBtb3ZlIHVwIHRvIGxvbmcgZmlsZW5hbWVzKSAqLwotCi0gIC8qIFBsYXRmb3JtIENQVS1Nb2RlIERlcGVuZGVuY2llcyAqLwotI2RlZmluZSBXT1JEX0JJVCAgICAgICAgICAgICAgICAzMiAvKiBPUy8yIGlzIGEgMzItQml0IE9wZXJhdGluZyBTeXN0ZW0gKi8KLSNkZWZpbmUgTE9OR19CSVQgICAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgU0laRU9GX0lOVCAgICAgICAgICAgICAgIDQgLyogQ291bnQgb2YgQnl0ZXMgaW4gYW4gKGludCkgICAgICAgICAgICAqLwotI2RlZmluZSBTSVpFT0ZfTE9ORyAgICAgICAgICAgICAgNCAvKiBDb3VudCBvZiBCeXRlcyBpbiBhIChsb25nKSAgICAgICAgICAgICovCi0jZGVmaW5lIFNJWkVPRl9WT0lEX1AgICAgICAgICAgICA0IC8qIENvdW50IG9mIEJ5dGVzIGluIGEgKHZvaWQgKikgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9MT05HX0xPTkcgICAgIDEgKi8gLyogVkFDKysgZG9lcyBub3Qgc3VwcG9ydCAobG9uZyBsb25nKSAgICAqLwotLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HICAgOCAqLyAvKiBDb3VudCBvZiBCeXRlcyBpbiBhIChsb25nIGxvbmcpICAgICAgICovCi0KLS8qIHVuaWNvZGUgZGVmaW5pbmVzICovCi0jZGVmaW5lIFBZX1VOSUNPREVfVFlQRSAgICB3Y2hhcl90Ci0jZGVmaW5lIFB5X1VOSUNPREVfU0laRSBTSVpFT0ZfU0hPUlQKLQotLyogZHluYW1pYyBsb2FkaW5nICovCi0jZGVmaW5lIEhBVkVfRFlOQU1JQ19MT0FESU5HIDEKLQotLyogRGVmaW5lIGlmIHR5cGUgY2hhciBpcyB1bnNpZ25lZCBhbmQgeW91IGFyZSBub3QgdXNpbmcgZ2NjLiAgKi8KLSNpZm5kZWYgX19DSEFSX1VOU0lHTkVEX18KLS8qICN1bmRlZiBfX0NIQVJfVU5TSUdORURfXyAqLwotI2VuZGlmCi0KLXR5cGVkZWYgaW50IG1vZGVfdDsKLXR5cGVkZWYgaW50IHVpZF90OwotdHlwZWRlZiBpbnQgZ2lkX3Q7Ci10eXBlZGVmIGludCBwaWRfdDsKLQotI2lmIGRlZmluZWQoX19NVUxUSV9fKSAgICAgLyogSWYgQ29tcGlsZXIgL0d0KyBNdWx0aXRocmVhZCBPcHRpb24gRW5hYmxlZCwgICovCi0gICNkZWZpbmUgV0lUSF9USFJFQUQgICAgICAgICAgICAxIC8qIEVuYWJsZSBUaHJlYWRpbmcgVGhyb3VnaG91dCBQeXRob24gICAgKi8KLSAgI2RlZmluZSBPUzJfVEhSRUFEUyAgICAgICAgICAgIDEgLyogQW5kIFVzZSB0aGUgT1MvMiBGbGF2b3Igb2YgVGhyZWFkcyAgICAqLwotLyogI2RlZmluZSBfUkVFTlRSQU5UIDEgKi8gLyogVXNlIHRocmVhZC1zYWZlIGVycm5vLCBoX2Vycm5vLCBhbmQgb3RoZXIgZm5zICovCi0jZW5kaWYKLQotICAvKiBDb21waWxlciBSdW50aW1lIExpYnJhcnkgQ2FwYWJpbGl0aWVzICovCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxkaXJlY3QuaD4KLS8qICN1bmRlZiBCQURfU1RBVElDX0ZPUldBUkQgKi8gLyogaWYgY29tcGlsZXIgYm90Y2hlcyBzdGF0aWMgZndkIGRlY2xzICovCi0KLSNkZWZpbmUgU1REQ19IRUFERVJTICAgICAgICAgICAgIDEgLyogVkFDKysgaXMgYW4gQU5TSSBDIENvbXBpbGVyICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0hZUE9UICAgICAgICAgICAgICAgMSAvKiBoeXBvdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfUFVURU5WICAgICAgICAgICAgICAxIC8qIHB1dGVudigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgVkFfTElTVF9JU19BUlJBWSAgIDEgKi8gLyogaWYgdmFfbGlzdCBpcyBhbiBhcnJheSBvZiBzb21lIGtpbmQgICAqLwotLyogI2RlZmluZSBIQVZFX0NPTklPX0ggICAgICAgMSAqLyAvKiAjaW5jbHVkZSA8Y29uaW8uaD4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfRVJSTk9fSCAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU19UWVBFU19IICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgICAgICAgICAgICovCi0KLSAgLyogVmFyaWFibGUtQXJndW1lbnRzL1Byb3RvdHlwZXMgKi8KLSNkZWZpbmUgSEFWRV9QUk9UT1RZUEVTICAgICAgICAgIDEgLyogVkFDKysgc3VwcG9ydHMgQyBGdW5jdGlvbiBQcm90b3R5cGVzICAqLwotI2RlZmluZSBIQVZFX1NUREFSR19QUk9UT1RZUEVTICAgMSAvKiBPdXIgPHN0ZGFyZy5oPiBoYXMgcHJvdG90eXBlcyAgICAgICAgICovCi0KLSAgLyogU3RyaW5nL01lbW9yeS9Mb2NhbGUgT3BlcmF0aW9ucyAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUgICAgICAgICAgICAgMSAvKiBtZW1tb3ZlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1RSRVJST1IgICAgICAgICAgICAxIC8qIHN0cmVycm9yKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgICAgICAgICAgIDEgLyogc2V0bG9jYWxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBNQUxMT0NfWkVST19SRVRVUk5TX05VTEwgMSAvKiBPdXIgbWFsbG9jKDApIHJldHVybnMgYSBOVUxMIHB0ciAgICAgICovCi0KLSAgLyogU2lnbmFsIEhhbmRsaW5nICovCi0jZGVmaW5lIEhBVkVfU0lHTkFMX0ggICAgICAgICAgICAxIC8qIHNpZ25hbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUkVUU0lHVFlQRSAgICAgICAgICAgIHZvaWQgLyogUmV0dXJuIHR5cGUgb2YgaGFuZGxlcnMgKGludCBvciB2b2lkKSAqLwotLyogI3VuZGVmIFdBTlRfU0lHRlBFX0hBTkRMRVIgICAqLyAvKiBIYW5kbGUgU0lHRlBFIChzZWUgSW5jbHVkZS9weWZwZS5oKSAgICovCi0vKiAjZGVmaW5lIEhBVkVfQUxBUk0gICAgICAgICAxICovIC8qIGFsYXJtKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TSUdJTlRFUlJVUFQgIDEgKi8gLyogc2lnaW50ZXJydXB0KCkgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1NJR1JFTFNFICAgICAgMSAqLyAvKiBzaWdyZWxzZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIERPTlRfSEFWRV9TSUdfQUxBUk0gICAgICAxCi0jZGVmaW5lIERPTlRfSEFWRV9TSUdfUEFVU0UgICAgICAxCi0KLSAgLyogQ2xvY2svVGltZSBTdXBwb3J0ICovCi0jZGVmaW5lIEhBVkVfRlRJTUUgICAgICAgICAgICAgICAxIC8qIFdlIGhhdmUgZnRpbWUoKSBpbiA8c3lzL3RpbWViLmg+ICAgICAgKi8KLSNkZWZpbmUgSEFWRV9DTE9DSyAgICAgICAgICAgICAgIDEgLyogY2xvY2soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NUUkZUSU1FICAgICAgICAgICAgMSAvKiBzdHJmdGltZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfTUtUSU1FICAgICAgICAgICAgICAxIC8qIG1rdGltZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9UWk5BTUUgICAgICAgICAgICAgIDEgLyogTm8gdG1fem9uZSBidXQgZG8gaGF2ZSB0em5hbWVbXSAgICAgICAqLwotI2RlZmluZSBIQVZFX1RJTUVTICAgICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3RpbWVzLmg+ICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1VUSU1FX0ggICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvdXRpbWUuaD4gICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9VVElNRV9IICAgICAgIDEgKi8gLyogI2luY2x1ZGUgPHV0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU19USU1FX0ggICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4gICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIFRNX0lOX1NZU19USU1FICAgICAxICovIC8qIDxzeXMvdGltZS5oPiBkZWNsYXJlcyBzdHJ1Y3QgdG0gICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgICAgICAgIDEgLyogZ2V0dGltZW9mZGF5KCkgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBHRVRUSU1FT0ZEQVlfTk9fVFogMSAqLyAvKiBnZXR0aW1lb2ZkYXkoKSBkb2VzIG5vdCBoYXZlIDJuZCBhcmcgICovCi0vKiAjZGVmaW5lIEhBVkVfVElNRUdNICAgICAgICAxICovIC8qIHRpbWVnbSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FICAgICAgIDEgLyogTWl4IDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4gICAgICAgICAqLwotI2RlZmluZSBTWVNfU0VMRUNUX1dJVEhfU1lTX1RJTUUgMSAvKiBNaXggPHN5cy9zZWxlY3QuaD4gYW5kIDxzeXMvdGltZS5oPiAgICovCi0vKiAjZGVmaW5lIEhBVkVfQUxUWk9ORSAgICAgICAxICovIC8qIGlmIDx0aW1lLmg+IGRlZmluZXMgYWx0em9uZSAgICAgICAgICAgKi8KLQotICAvKiBOZXR3b3JrL1NvY2tldHMgU3VwcG9ydCAqLwotI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSCAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+ICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEJTRF9TRUxFQ1QgICAgICAgICAgICAgIDEgLyogVXNlIEJTRCB2ZXJzdXMgT1MvMiBmb3JtIG9mIHNlbGVjdCgpICAgKi8KLSNkZWZpbmUgSEFWRV9TRUxFQ1QgICAgICAgICAgICAgMSAvKiBzZWxlY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0dFVFBFRVJOQU1FICAgICAgICAxIC8qIGdldHBlZXJuYW1lKCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjdW5kZWYgSEFWRV9HRVRIT1NUTkFNRV9SIDEgKi8gLyogZ2V0aG9zdG5hbWVfcigpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAvKiBGaWxlIEkvTyAqLwotI2RlZmluZSBIQVZFX0RVUDIgICAgICAgICAgICAgICAgMSAvKiBkdXAyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAgICAgICAgICAxIC8qIGV4ZWN2KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TRVRWQlVGICAgICAgICAgICAgIDEgLyogc2V0dmJ1ZigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgICAgICAgICAgMSAvKiBnZXRjd2QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfUElQRSAgICAgICAgICAgICAgICAxIC8qIHBpcGUoKSAgICAgW09TLzItc3BlY2lmaWMgY29kZSBhZGRlZF0gKi8KLSNkZWZpbmUgSEFWRV9JT19IICAgICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0ZDTlRMX0ggICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZmNudGwuaD4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfRElSRUNUX0ggICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxkaXJlY3QuaD4gICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9GTE9DSyAgICAgICAgIDEgKi8gLyogZmxvY2soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1RSVU5DQVRFICAgICAgMSAqLyAvKiB0cnVuY2F0ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfRlRSVU5DQVRFICAgICAxICovIC8qIGZ0cnVuY2F0ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9MU1RBVCAgICAgICAgIDEgKi8gLyogbHN0YXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0RJUkVOVF9IICAgICAgMSAqLyAvKiAjaW5jbHVkZSA8ZGlyZW50Lmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAgICAxICovIC8qIG9wZW5kaXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAvKiBQcm9jZXNzIE9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHByb2Nlc3MuaD4gICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0dFVFBJRCAgICAgICAgICAgICAgMSAvKiBnZXRwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTVEVNICAgICAgICAgICAgICAxIC8qIHN5c3RlbSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9XQUlUICAgICAgICAgICAgICAgIDEgLyogd2FpdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0tJTEwgICAgICAgICAgICAgICAgMSAvKiBraWxsKCkgICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0jZGVmaW5lIEhBVkVfUE9QRU4gICAgICAgICAgICAgICAxIC8qIHBvcGVuKCkgICAgW09TLzItc3BlY2lmaWMgY29kZSBhZGRlZF0gKi8KLS8qICNkZWZpbmUgSEFWRV9HRVRQUElEICAgICAgIDEgKi8gLyogZ2V0cHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1dBSVRQSUQgICAgICAgMSAqLyAvKiB3YWl0cGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfRk9SSyAgICAgICAgICAxICovIC8qIGZvcmsoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAvKiBVc2VyL0dyb3VwIElEIFF1ZXJpZXMgKi8KLS8qICNkZWZpbmUgSEFWRV9HRVRFR0lEICAgICAgIDEgKi8KLS8qICNkZWZpbmUgSEFWRV9HRVRFVUlEICAgICAgIDEgKi8KLS8qICNkZWZpbmUgSEFWRV9HRVRHSUQgICAgICAgIDEgKi8KLS8qICNkZWZpbmUgSEFWRV9HRVRVSUQgICAgICAgIDEgKi8KLQotICAvKiBVbml4LVNwZWNpZmljICovCi0vKiAjZGVmaW5lIEhBVkVfU1lTX1VOX0ggICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvdW4uaD4gICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TWVNfVVRTTkFNRV9IIDEgKi8gLyogI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+ICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggICAgMSAqLyAvKiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4gICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVU5JU1REX0ggICAgICAxICovIC8qICNpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9VTkFNRSAgICAgICAgIDEgKi8gLyogdW5hbWUgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBEZWZpbmUgaWYgeW91IHdhbnQgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIGluIGV4dGVuc2lvbiBtb2R1bGVzICovCi0jZGVmaW5lIFdJVEhfRE9DX1NUUklOR1MgMQotCi0jaWZkZWYgVVNFX0RMX0VYUE9SVAotICAjZGVmaW5lIERMX0lNUE9SVChSVFlQRSkgUlRZUEUgX1N5c3RlbQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhUHlfQ09ORklHX0ggKi8KLQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvcHl0aG9uLmRlZiBiL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjVjMmEuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvcHl0aG9uLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDQ3OSArMCwwIEBACi1MSUJSQVJZICAgICAgICBQWVRIT04yNCBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFCi1ERVNDUklQVElPTiAgICAnUHl0aG9uIDIuNCBDb3JlIERMTCcKLVBST1RNT0RFCi1EQVRBICAgICAgICAgICBNVUxUSVBMRSBOT05TSEFSRUQKLQotRVhQT1JUUwotICAgICAgICAgICAgICAgOyBEYXRhCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9UeXBlCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfVHlwZQotICAgICAgICAgICAgICAgUHlDT2JqZWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5Q2xhc3NfVHlwZQotICAgICAgICAgICAgICAgUHlDb2RlX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9UeXBlCi0gICAgICAgICAgICAgICBQeURpY3RfVHlwZQotICAgICAgICAgICAgICAgUHlFeGNfQXJpdGhtZXRpY0Vycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19Bc3NlcnRpb25FcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfQXR0cmlidXRlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0VPRkVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19FbnZpcm9ubWVudEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19FeGNlcHRpb24KLSAgICAgICAgICAgICAgIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfSU9FcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfSW1wb3J0RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0luZGV4RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0tleUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19LZXlib2FyZEludGVycnVwdAotICAgICAgICAgICAgICAgUHlFeGNfTG9va3VwRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX01lbW9yeUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19NZW1vcnlFcnJvckluc3QKLSAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfT3ZlcmZsb3dFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19TeW50YXhFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUV4aXQKLSAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgICAgICAgIFB5RmlsZV9UeXBlCi0gICAgICAgICAgICAgICBQeUZsb2F0X1R5cGUKLSAgICAgICAgICAgICAgIFB5RnJhbWVfVHlwZQotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9UeXBlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzCi0gICAgICAgICAgICAgICBQeUltcG9ydF9Jbml0dGFiCi0gICAgICAgICAgICAgICBQeUluc3RhbmNlX1R5cGUKLSAgICAgICAgICAgICAgIFB5SW50X1R5cGUKLSAgICAgICAgICAgICAgIFB5TGlzdF9UeXBlCi0gICAgICAgICAgICAgICBQeUxvbmdfVHlwZQotICAgICAgICAgICAgICAgUHlNZXRob2RfVHlwZQotICAgICAgICAgICAgICAgUHlNb2R1bGVfVHlwZQotICAgICAgICAgICAgICAgUHlPU19JbnB1dEhvb2sKLSAgICAgICAgICAgICAgIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIKLSAgICAgICAgICAgICAgIFB5UmFuZ2VfVHlwZQotICAgICAgICAgICAgICAgUHlTbGljZV9UeXBlCi0gICAgICAgICAgICAgICBQeVN0cmluZ19UeXBlCi0gICAgICAgICAgICAgICBQeVRyYWNlQmFja19UeXBlCi0gICAgICAgICAgICAgICBQeVR1cGxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5VHlwZV9UeXBlCi0gICAgICAgICAgICAgICBQeV9EZWJ1Z0ZsYWcKLSAgICAgICAgICAgICAgIFB5X0Zyb3plbkZsYWcKLSAgICAgICAgICAgICAgIFB5X0ludGVyYWN0aXZlRmxhZwotICAgICAgICAgICAgICAgUHlfTm9TaXRlRmxhZwotICAgICAgICAgICAgICAgUHlfT3B0aW1pemVGbGFnCi0gICAgICAgICAgICAgICBQeV9Vc2VDbGFzc0V4Y2VwdGlvbnNGbGFnCi0gICAgICAgICAgICAgICBQeV9WZXJib3NlRmxhZwotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpbGV0YWIKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9Jbml0dGFiCi0gICAgICAgICAgICAgICBfUHlQYXJzZXJfR3JhbW1hcgotICAgICAgICAgICAgICAgX1B5UGFyc2VyX1Rva2VuTmFtZXMKLSAgICAgICAgICAgICAgIF9QeV9FbGxpcHNpc09iamVjdAotICAgICAgICAgICAgICAgX1B5X05vbmVTdHJ1Y3QKLSAgICAgICAgICAgICAgIF9QeV9QYWNrYWdlQ29udGV4dAotICAgICAgICAgICAgICAgX1B5X1RydWVTdHJ1Y3QKLSAgICAgICAgICAgICAgIF9QeV9aZXJvU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfYWJzdHJhY3RfaGFjawotICAgICAgICAgICAgICAgX1B5X2NhcHN1bGVfaGFjawotICAgICAgICAgICAgICAgX1B5X3JlX3N5bnRheAotICAgICAgICAgICAgICAgX1B5X3JlX3N5bnRheF90YWJsZQotCi0gICAgICAgICAgICAgICA7IENvZGUKLSAgICAgICAgICAgICAgIFB5QXJnX1BhcnNlCi0gICAgICAgICAgICAgICBQeUFyZ19QYXJzZVR1cGxlCi0gICAgICAgICAgICAgICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMKLSAgICAgICAgICAgICAgIFB5QXJnX1ZhUGFyc2UKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0ZpbmkKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldEZsYWdzCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0U2VsZgotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fTmV3Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0Q29udGV4dAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldERlc3RydWN0b3IKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXROYW1lCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0UG9pbnRlcgotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0ltcG9ydAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0lzVmFsaWQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9OZXcKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXRDb250ZXh0Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldE5hbWUKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXRQb2ludGVyCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfQXNWb2lkUHRyCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfRnJvbVZvaWRQdHIKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9HZXREZXNjCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfSW1wb3J0Ci0gICAgICAgICAgICAgICBQeUNhbGxhYmxlX0NoZWNrCi0gICAgICAgICAgICAgICBQeUNsYXNzX0lzU3ViY2xhc3MKLSAgICAgICAgICAgICAgIFB5Q2xhc3NfTmV3Ci0gICAgICAgICAgICAgICBQeUNvZGVfQWRkcjJMaW5lCi0gICAgICAgICAgICAgICBQeUNvZGVfTmV3Ci0gICAgICAgICAgICAgICBQeUNvbXBsZXhfQXNDQ29tcGxleAotICAgICAgICAgICAgICAgUHlDb21wbGV4X0Zyb21DQ29tcGxleAotICAgICAgICAgICAgICAgUHlDb21wbGV4X0Zyb21Eb3VibGVzCi0gICAgICAgICAgICAgICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlCi0gICAgICAgICAgICAgICBQeUNvbXBsZXhfUmVhbEFzRG91YmxlCi0gICAgICAgICAgICAgICBQeURpY3RfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5RGljdF9EZWxJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfRGVsSXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeURpY3RfSXRlbXMKLSAgICAgICAgICAgICAgIFB5RGljdF9LZXlzCi0gICAgICAgICAgICAgICBQeURpY3RfTmV3Ci0gICAgICAgICAgICAgICBQeURpY3RfTmV4dAotICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeURpY3RfU2l6ZQotICAgICAgICAgICAgICAgUHlEaWN0X1ZhbHVlcwotICAgICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQKLSAgICAgICAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbAotICAgICAgICAgICAgICAgUHlFcnJfQ2hlY2tTaWduYWxzCi0gICAgICAgICAgICAgICBQeUVycl9DbGVhcgotICAgICAgICAgICAgICAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcwotICAgICAgICAgICAgICAgUHlFcnJfRmV0Y2gKLSAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdAotICAgICAgICAgICAgICAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzCi0gICAgICAgICAgICAgICBQeUVycl9OZXdFeGNlcHRpb24KLSAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5Ci0gICAgICAgICAgICAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24KLSAgICAgICAgICAgICAgIFB5RXJyX09jY3VycmVkCi0gICAgICAgICAgICAgICBQeUVycl9QcmludAotICAgICAgICAgICAgICAgUHlFcnJfUHJpbnRFeAotICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZQotICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vCi0gICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldEludGVycnVwdAotICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZQotICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0Ci0gICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcKLSAgICAgICAgICAgICAgIFB5RXZhbF9BY3F1aXJlTG9jawotICAgICAgICAgICAgICAgUHlFdmFsX0FjcXVpcmVUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsRnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsTWV0aG9kCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbE9iamVjdAotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKLSAgICAgICAgICAgICAgIFB5RXZhbF9FdmFsQ29kZQotICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0RnJhbWUKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRHbG9iYWxzCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0TG9jYWxzCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0UmVzdHJpY3RlZAotICAgICAgICAgICAgICAgUHlFdmFsX0luaXRUaHJlYWRzCi0gICAgICAgICAgICAgICBQeUV2YWxfUmVsZWFzZUxvY2sKLSAgICAgICAgICAgICAgIFB5RXZhbF9SZWxlYXNlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUV2YWxfUmVzdG9yZVRocmVhZAotICAgICAgICAgICAgICAgUHlFdmFsX1NhdmVUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RmlsZV9Bc0ZpbGUKLSAgICAgICAgICAgICAgIFB5RmlsZV9Gcm9tRmlsZQotICAgICAgICAgICAgICAgUHlGaWxlX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RmlsZV9HZXRMaW5lCi0gICAgICAgICAgICAgICBQeUZpbGVfTmFtZQotICAgICAgICAgICAgICAgUHlGaWxlX1NldEJ1ZlNpemUKLSAgICAgICAgICAgICAgIFB5RmlsZV9Tb2Z0U3BhY2UKLSAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdAotICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nCi0gICAgICAgICAgICAgICBQeUZsb2F0X0FzRG91YmxlCi0gICAgICAgICAgICAgICBQeUZsb2F0X0FzU3RyaW5nCi0gICAgICAgICAgICAgICBQeUZsb2F0X0ZpbmkKLSAgICAgICAgICAgICAgIFB5RmxvYXRfRnJvbURvdWJsZQotICAgICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1BvcAotICAgICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwCi0gICAgICAgICAgICAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscwotICAgICAgICAgICAgICAgUHlGcmFtZV9GaW5pCi0gICAgICAgICAgICAgICBQeUZyYW1lX0xvY2Fsc1RvRmFzdAotICAgICAgICAgICAgICAgUHlGcmFtZV9OZXcKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0Q29kZQotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HZXREZWZhdWx0cwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HZXRHbG9iYWxzCi0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX05ldwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXREZWZhdWx0cwotICAgICAgICAgICAgICAgUHlHcmFtbWFyX0FkZEFjY2VsZXJhdG9ycwotICAgICAgICAgICAgICAgUHlHcmFtbWFyX0ZpbmRERkEKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9MYWJlbFJlcHIKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9SZW1vdmVBY2NlbGVyYXRvcnMKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0FkZE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgotICAgICAgICAgICAgICAgUHlJbXBvcnRfQ2xlYW51cAotICAgICAgICAgICAgICAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0V4dGVuZEluaXR0YWIKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCi0gICAgICAgICAgICAgICBQeUltcG9ydF9HZXRNb2R1bGVEaWN0Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnQKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeAotICAgICAgICAgICAgICAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlCi0gICAgICAgICAgICAgICBQeUluc3RhbmNlX0RvQmluT3AKLSAgICAgICAgICAgICAgIFB5SW5zdGFuY2VfTmV3Ci0gICAgICAgICAgICAgICBQeUludF9Bc0xvbmcKLSAgICAgICAgICAgICAgIFB5SW50X0ZpbmkKLSAgICAgICAgICAgICAgIFB5SW50X0Zyb21Mb25nCi0gICAgICAgICAgICAgICBQeUludF9HZXRNYXgKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcgotICAgICAgICAgICAgICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQotICAgICAgICAgICAgICAgUHlJbnRlcnByZXRlclN0YXRlX05ldwotICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZAotICAgICAgICAgICAgICAgUHlMaXN0X0FzVHVwbGUKLSAgICAgICAgICAgICAgIFB5TGlzdF9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeUxpc3RfR2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5TGlzdF9JbnNlcnQKLSAgICAgICAgICAgICAgIFB5TGlzdF9OZXcKLSAgICAgICAgICAgICAgIFB5TGlzdF9SZXZlcnNlCi0gICAgICAgICAgICAgICBQeUxpc3RfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlMaXN0X1NldFNsaWNlCi0gICAgICAgICAgICAgICBQeUxpc3RfU2l6ZQotICAgICAgICAgICAgICAgUHlMaXN0X1NvcnQKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc0RvdWJsZQotICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmdMb25nCi0gICAgICAgICAgICAgICBQeUxvbmdfQXNVbnNpZ25lZExvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCi0gICAgICAgICAgICAgICBQeUxvbmdfQXNWb2lkUHRyCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbURvdWJsZQotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbVZvaWRQdHIKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19DaGVjawotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19IYXNLZXkKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19IYXNLZXlTdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19MZW5ndGgKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfSW5pdAotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZwotICAgICAgICAgICAgICAgUHlNZW1fRnJlZQotICAgICAgICAgICAgICAgUHlNZW1fTWFsbG9jCi0gICAgICAgICAgICAgICBQeU1lbV9SZWFsbG9jCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9DbGFzcwotICAgICAgICAgICAgICAgUHlNZXRob2RfRmluaQotICAgICAgICAgICAgICAgUHlNZXRob2RfRnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5TWV0aG9kX05ldwotICAgICAgICAgICAgICAgUHlNZXRob2RfU2VsZgotICAgICAgICAgICAgICAgUHlNb2R1bGVfR2V0RGljdAotICAgICAgICAgICAgICAgUHlNb2R1bGVfR2V0TmFtZQotICAgICAgICAgICAgICAgUHlNb2R1bGVfTmV3Ci0gICAgICAgICAgICAgICBQeU5vZGVfQWRkQ2hpbGQKLSAgICAgICAgICAgICAgIFB5Tm9kZV9Db21waWxlCi0gICAgICAgICAgICAgICBQeU5vZGVfRnJlZQotOyAgICAgICAgICAgICAgIFB5Tm9kZV9MaXN0VHJlZQotICAgICAgICAgICAgICAgUHlOb2RlX05ldwotICAgICAgICAgICAgICAgUHlOdW1iZXJfQWJzb2x1dGUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0FkZAotICAgICAgICAgICAgICAgUHlOdW1iZXJfQW5kCi0gICAgICAgICAgICAgICBQeU51bWJlcl9DaGVjawotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ29lcmNlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Db2VyY2VFeAotICAgICAgICAgICAgICAgUHlOdW1iZXJfRGl2aWRlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9EaXZtb2QKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0Zsb2F0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9JbnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0ludmVydAotICAgICAgICAgICAgICAgUHlOdW1iZXJfTG9uZwotICAgICAgICAgICAgICAgUHlOdW1iZXJfTHNoaWZ0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9NdWx0aXBseQotICAgICAgICAgICAgICAgUHlOdW1iZXJfTmVnYXRpdmUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX09yCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Qb3NpdGl2ZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfUG93ZXIKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1JlbWFpbmRlcgotICAgICAgICAgICAgICAgUHlOdW1iZXJfUnNoaWZ0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9TdWJ0cmFjdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfWG9yCi0gICAgICAgICAgICAgICBQeU9TX0FmdGVyRm9yawotICAgICAgICAgICAgICAgUHlPU19GaW5pSW50ZXJydXB0cwotICAgICAgICAgICAgICAgUHlPU19Jbml0SW50ZXJydXB0cwotICAgICAgICAgICAgICAgUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAotICAgICAgICAgICAgICAgUHlPU19SZWFkbGluZQotICAgICAgICAgICAgICAgUHlPU19TdGRpb1JlYWRsaW5lCi0gICAgICAgICAgICAgICBQeU9TX3N0cnRvbAotICAgICAgICAgICAgICAgUHlPU19zdHJ0b3VsCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsRnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NhbGxNZXRob2QKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NhbGxPYmplY3QKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NtcAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ29tcGFyZQotICAgICAgICAgICAgICAgUHlPYmplY3RfRGVsSXRlbQotICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0QXR0cgotICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZwotICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlPYmplY3RfSGFzQXR0cgotICAgICAgICAgICAgICAgUHlPYmplY3RfSGFzQXR0clN0cmluZwotICAgICAgICAgICAgICAgUHlPYmplY3RfSGFzaAotICAgICAgICAgICAgICAgUHlPYmplY3RfSXNUcnVlCi0gICAgICAgICAgICAgICBQeU9iamVjdF9MZW5ndGgKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X05vdAotICAgICAgICAgICAgICAgUHlPYmplY3RfUHJpbnQKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1JlcHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1NldEF0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1NldEF0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1N0cgotICAgICAgICAgICAgICAgUHlPYmplY3RfVHlwZQotICAgICAgICAgICAgICAgUHlQYXJzZXJfQWRkVG9rZW4KLSAgICAgICAgICAgICAgIFB5UGFyc2VyX0RlbGV0ZQotICAgICAgICAgICAgICAgUHlQYXJzZXJfTmV3Ci0gICAgICAgICAgICAgICBQeVBhcnNlcl9QYXJzZUZpbGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX1BhcnNlU3RyaW5nCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nCi0gICAgICAgICAgICAgICBQeVJhbmdlX05ldwotICAgICAgICAgICAgICAgUHlSdW5fQW55RmlsZQotICAgICAgICAgICAgICAgUHlSdW5fRmlsZQotICAgICAgICAgICAgICAgUHlSdW5fSW50ZXJhY3RpdmVMb29wCi0gICAgICAgICAgICAgICBQeVJ1bl9JbnRlcmFjdGl2ZU9uZQotICAgICAgICAgICAgICAgUHlSdW5fU2ltcGxlRmlsZQotICAgICAgICAgICAgICAgUHlSdW5fU2ltcGxlU3RyaW5nCi0gICAgICAgICAgICAgICBQeVJ1bl9TdHJpbmcKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfQ29uY2F0Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NvbnRhaW5zCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NvdW50Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0RlbEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfRGVsU2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9HZXRTbGljZQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9JbgotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9JbmRleAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9MZW5ndGgKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfTGlzdAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9SZXBlYXQKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9TZXRTbGljZQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9UdXBsZQotICAgICAgICAgICAgICAgUHlTbGljZV9HZXRJbmRpY2VzCi0gICAgICAgICAgICAgICBQeVNsaWNlX05ldwotICAgICAgICAgICAgICAgUHlTdHJpbmdfQXNTdHJpbmcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0NvbmNhdAotICAgICAgICAgICAgICAgUHlTdHJpbmdfQ29uY2F0QW5kRGVsCi0gICAgICAgICAgICAgICBQeVN0cmluZ19GaW5pCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Gb3JtYXQKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplCi0gICAgICAgICAgICAgICBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19JbnRlcm5JblBsYWNlCi0gICAgICAgICAgICAgICBQeVN0cmluZ19TaXplCi0gICAgICAgICAgICAgICBQeVN5c19HZXRGaWxlCi0gICAgICAgICAgICAgICBQeVN5c19HZXRPYmplY3QKLSAgICAgICAgICAgICAgIFB5U3lzX1NldEFyZ3YKLSAgICAgICAgICAgICAgIFB5U3lzX1NldE9iamVjdAotICAgICAgICAgICAgICAgUHlTeXNfU2V0UGF0aAotICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIKLSAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3Rkb3V0Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0NsZWFyCi0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0RlbGV0ZQotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0RGljdAotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9OZXcKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfU3dhcAotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9hbGxvY2F0ZV9zZW1hCi0gICAgICAgICAgICAgICBQeVRocmVhZF9kb3duX3NlbWEKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2V4aXRfdGhyZWFkCi0gICAgICAgICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2ZyZWVfc2VtYQotICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudAotICAgICAgICAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZAotICAgICAgICAgICAgICAgUHlUaHJlYWRfdXBfc2VtYQotICAgICAgICAgICAgICAgUHlUb2tlbl9PbmVDaGFyCi0gICAgICAgICAgICAgICBQeVRva2VuX1R3b0NoYXJzCi0gICAgICAgICAgICAgICBQeVRva2VuaXplcl9GcmVlCi0gICAgICAgICAgICAgICBQeVRva2VuaXplcl9Gcm9tRmlsZQotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfR2V0Ci0gICAgICAgICAgICAgICBQeVRyYWNlQmFja19IZXJlCi0gICAgICAgICAgICAgICBQeVRyYWNlQmFja19QcmludAotICAgICAgICAgICAgICAgUHlUdXBsZV9GaW5pCi0gICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5VHVwbGVfTmV3Ci0gICAgICAgICAgICAgICBQeVR1cGxlX1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5VHVwbGVfU2l6ZQotICAgICAgICAgICAgICAgUHlfQWRkUGVuZGluZ0NhbGwKLSAgICAgICAgICAgICAgIFB5X0F0RXhpdAotICAgICAgICAgICAgICAgUHlfQnVpbGRWYWx1ZQotICAgICAgICAgICAgICAgUHlfQ29tcGlsZVN0cmluZwotICAgICAgICAgICAgICAgUHlfRW5kSW50ZXJwcmV0ZXIKLSAgICAgICAgICAgICAgIFB5X0V4aXQKLSAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IKLSAgICAgICAgICAgICAgIFB5X0ZkSXNJbnRlcmFjdGl2ZQotICAgICAgICAgICAgICAgUHlfRmluYWxpemUKLSAgICAgICAgICAgICAgIFB5X0ZpbmRNZXRob2QKLSAgICAgICAgICAgICAgIFB5X0ZpbmRNZXRob2RJbkNoYWluCi0gICAgICAgICAgICAgICBQeV9GbHVzaExpbmUKLSAgICAgICAgICAgICAgIFB5X0ZyZWUKLSAgICAgICAgICAgICAgIFB5X0dldEFyZ2NBcmd2Ci0gICAgICAgICAgICAgICBQeV9HZXRCdWlsZEluZm8KLSAgICAgICAgICAgICAgIFB5X0dldENvbXBpbGVyCi0gICAgICAgICAgICAgICBQeV9HZXRDb3B5cmlnaHQKLSAgICAgICAgICAgICAgIFB5X0dldEV4ZWNQcmVmaXgKLSAgICAgICAgICAgICAgIFB5X0dldFBhdGgKLSAgICAgICAgICAgICAgIFB5X0dldFBsYXRmb3JtCi0gICAgICAgICAgICAgICBQeV9HZXRQcmVmaXgKLSAgICAgICAgICAgICAgIFB5X0dldFByb2dyYW1GdWxsUGF0aAotICAgICAgICAgICAgICAgUHlfR2V0UHJvZ3JhbU5hbWUKLSAgICAgICAgICAgICAgIFB5X0dldFB5dGhvbkhvbWUKLSAgICAgICAgICAgICAgIFB5X0dldFZlcnNpb24KLSAgICAgICAgICAgICAgIFB5X0luaXRNb2R1bGU0Ci0gICAgICAgICAgICAgICBQeV9Jbml0aWFsaXplCi0gICAgICAgICAgICAgICBQeV9Jc0luaXRpYWxpemVkCi0gICAgICAgICAgICAgICBQeV9NYWluCi0gICAgICAgICAgICAgICBQeV9NYWtlUGVuZGluZ0NhbGxzCi0gICAgICAgICAgICAgICBQeV9NYWxsb2MKLSAgICAgICAgICAgICAgIFB5X05ld0ludGVycHJldGVyCi0gICAgICAgICAgICAgICBQeV9SZWFsbG9jCi0gICAgICAgICAgICAgICBQeV9SZXByRW50ZXIKLSAgICAgICAgICAgICAgIFB5X1JlcHJMZWF2ZQotICAgICAgICAgICAgICAgUHlfU2V0UHJvZ3JhbU5hbWUKLSAgICAgICAgICAgICAgIFB5X1NldFB5dGhvbkhvbWUKLSAgICAgICAgICAgICAgIFB5X1ZhQnVpbGRWYWx1ZQotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9GaW5pXzEKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fRmluaV8yCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0luaXRfMQotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9Jbml0XzIKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRmluaQotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfSW5pdAotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlCi0gICAgICAgICAgICAgICBfUHlMb25nX05ldwotICAgICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyCi0gICAgICAgICAgICAgICBfUHlPYmplY3RfTmV3Ci0gICAgICAgICAgICAgICBfUHlPYmplY3RfTmV3VmFyCi0gICAgICAgICAgICAgICBfUHlTdHJpbmdfUmVzaXplCi0gICAgICAgICAgICAgICBfUHlTeXNfSW5pdAotICAgICAgICAgICAgICAgX1B5VHVwbGVfUmVzaXplCi0gICAgICAgICAgICAgICBfUHlfTUQ1RmluYWwKLSAgICAgICAgICAgICAgIF9QeV9NRDVJbml0Ci0gICAgICAgICAgICAgICBfUHlfTUQ1VXBkYXRlCi07ICAgICAgICAgICAgICAgX1B5X2FkZGJpdAotICAgICAgICAgICAgICAgX1B5X2NfZGlmZgotICAgICAgICAgICAgICAgX1B5X2NfbmVnCi0gICAgICAgICAgICAgICBfUHlfY19wb3cKLSAgICAgICAgICAgICAgIF9QeV9jX3Byb2QKLSAgICAgICAgICAgICAgIF9QeV9jX3F1b3QKLSAgICAgICAgICAgICAgIF9QeV9jX3N1bQotOyAgICAgICAgICAgICAgIF9QeV9kZWxiaXRzZXQKLTsgICAgICAgICAgICAgICBfUHlfbWVyZ2ViaXRzZXQKLTsgICAgICAgICAgICAgICBfUHlfbWV0YV9ncmFtbWFyCi07ICAgICAgICAgICAgICAgX1B5X25ld2JpdHNldAotOyAgICAgICAgICAgICAgIF9QeV9zYW1lYml0c2V0Ci0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9UeXBlCi0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9Gcm9tT2JqZWN0Ci0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9Gcm9tTWVtb3J5Ci0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlTWVtb3J5Ci0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9OZXcKLQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvcmVhZG1lLnR4dCBiL1BDL29zMnZhY3BwL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNTg2MDQuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi1JQk0gVmlzdWFsQWdlIEMvQysrIGZvciBPUy8yCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRvIGJ1aWxkIFB5dGhvbiBmb3IgT1MvMiwgY2hhbmdlIGludG8gLi9vczJ2YWNwcCBhbmQgaXNzdWUgYW4gJ05NQUtFJwotY29tbWFuZC4gIFRoaXMgd2lsbCBidWlsZCBhIFBZVEhPTjE1LkRMTCBjb250YWluaW5nIHRoZSBzZXQgb2YgUHl0aG9uCi1tb2R1bGVzIGxpc3RlZCBpbiBjb25maWcuYyBhbmQgYSBzbWFsbCBQWVRIT04uRVhFIHRvIHN0YXJ0IHRoZQotaW50ZXJwcmV0ZXIuCi0KLUJ5IGNoYW5naW5nIHRoZSBDIGNvbXBpbGVyIGZsYWcgL0dkLSBpbiB0aGUgbWFrZWZpbGUgdG8gL0dkKywgeW91IGNhbgotcmVkdWNlIHRoZSBzaXplIG9mIHRoZXNlIGJ5IGNhdXNpbmcgUHl0aG9uIHRvIGR5bmFtaWNhbGx5IGxpbmsgdG8gdGhlCi1DIHJ1bnRpbWUgRExMcyBpbnN0ZWFkIG9mIGluY2x1ZGluZyB0aGVpciBidWxrIGluIHlvdXIgYmluYXJpZXMuIAotSG93ZXZlciwgdGhpcyBtZWFucyB0aGF0IGFueSBzeXN0ZW0gb24gd2hpY2ggeW91IHJ1biBQeXRob24gbXVzdCBoYXZlCi10aGUgVkFDKysgY29tcGlsZXIgaW5zdGFsbGVkIGluIG9yZGVyIHRvIGhhdmUgdGhvc2UgRExMcyBhdmFpbGFibGUuCi0KLUR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyB5b3UgbWF5IHNlZSBhIGNvdXBsZSBvZiBoYXJtbGVzcyB3YXJuaW5nczoKLQotICBGcm9tIHRoZSBDIENvbXBpbGVyLCAiTm8gZnVuY3Rpb24gcHJvdG90eXBlIGdpdmVuIGZvciBYWFgiLCB3aGljaAotICBjb21lcyBmcm9tIHRoZSB1c2Ugb2YgSyZSIHBhcmFtZXRlcnMgd2l0aGluIFB5dGhvbiBmb3IgcG9ydGFiaWxpdHkuCi0KLSAgRnJvbSB0aGUgSUxJQiBsaWJyYXJpYW4sICJNb2R1bGUgTm90IEZvdW5kIChYWFgpIiwgd2hpY2ggY29tZXMKLSAgZnJvbSBpdHMgYXR0ZW1wdCB0byBwZXJmb3JtIHRoZSAoLSspIG9wZXJhdGlvbiwgd2hpY2ggcmVtb3ZlcyBhbmQKLSAgdGhlbiBhZGRzIGEgLk9CSiB0byB0aGUgbGlicmFyeS4gIFRoZSBmaXJzdCB0aW1lIGEgYnVpbGQgaXMgZG9uZSwKLSAgaXQgb2J2aW91c2x5IGNhbm5vdCByZW1vdmUgd2hhdCBpcyBub3QgeWV0IGJ1aWx0LgotCi1UaGlzIGJ1aWxkIGluY2x1ZGVzIHN1cHBvcnQgZm9yIG1vc3QgUHl0aG9uIGZ1bmN0aW9uYWxpdHkgYXMgd2VsbCBhcwotVENQL0lQIHNvY2tldHMuICBJdCBvbWl0cyB0aGUgUG9zaXggYWJpbGl0eSB0byAnZm9yaycgYSBwcm9jZXNzIGJ1dAotc3VwcG9ydHMgdGhyZWFkcyB1c2luZyBPUy8yIG5hdGl2ZSBjYXBhYmlsaXRpZXMuICBJIGhhdmUgdHJpZWQgdG8KLXN1cHBvcnQgZXZlcnl0aGluZyBwb3NzaWJsZSBidXQgaGVyZSBhcmUgYSBmZXcgdXNhZ2Ugbm90ZXMuCi0KLQotLS0gb3MucG9wZW4oKSBVc2FnZSBXYXJuaW5ncwotCi1XaXRoIHJlc3BlY3QgdG8gbXkgaW1wbGVtZW50YXRpb24gb2YgcG9wZW4oKSB1bmRlciBPUy8yOgotCi0gICAgaW1wb3J0IG9zCi0KLSAgICBmZCA9IG9zLnBvcGVuKCJwa3ppcC5leGUgLUAganVuay56aXAiLCAnd2InKQotICAgIGZkLndyaXRlKCJmaWxlMS50eHRcbiIpCi0gICAgZmQud3JpdGUoImZpbGUyLnR4dFxuIikKLSAgICBmZC53cml0ZSgiZmlsZTMudHh0XG4iKQotICAgIGZkLndyaXRlKCJceDFhIikgICMgU2hvdWxkIE5vdCBCZSBOZWNlc3NhcnkgQnV0IElzCi0gICAgZmQuY2xvc2UoKQotCi1UaGVyZSBpcyBhIGJ1ZywgZWl0aGVyIGluIHRoZSBWQUMrKyBjb21waWxlciBvciBPUy8yIGl0c2VsZiwgd2hlcmUgdGhlCi1zaW1wbGUgY2xvc3VyZSBvZiB0aGUgd3JpdGUtc2lkZSBvZiBhIHBpcGUgLXRvLSBhIHByb2Nlc3MgZG9lcyBub3QKLXNlbmQgYW4gRU9GIHRvIHRoYXQgcHJvY2Vzcy4gIEkgZmluZCBJIG11c3QgZXhwbGljaXRseSB3cml0ZSBhCi1jb250cm9sLVogKEVPRikgYmVmb3JlIGNsb3NpbmcgdGhlIHBpcGUuICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gd2hlbgotdXNpbmcgcG9wZW4oKSBpbiByZWFkIG1vZGUuCi0KLU9uZSBvdGhlciBzbGlnaHQgZGlmZmVyZW5jZSB3aXRoIG15IHBvcGVuKCkgaXMgdGhhdCBJIHJldHVybiBOb25lCi1mcm9tIHRoZSBjbG9zZSgpLCBpbnN0ZWFkIG9mIHRoZSBVbml4IGNvbnZlbnRpb24gb2YgdGhlIHJldHVybiBjb2RlCi1vZiB0aGUgc3Bhd25lZCBwcm9ncmFtLiAgSSBjb3VsZCBmaW5kIG5vIGVhc3kgd2F5IHRvIGRvIHRoaXMgdW5kZXIKLU9TLzIuCi0KLQotLS0gQkVHSU5MSUJQQVRIL0VORExJQlBBVEgKLQotV2l0aCByZXNwZWN0IHRvIGVudmlyb25tZW50IHZhcmlhYmxlcywgdGhpcyBPUy8yIHBvcnQgc3VwcG9ydHMgdGhlCi1zcGVjaWFsLXRvLU9TLzIgbWFnaWMgbmFtZXMgb2YgJ0JFR0lOTElCUEFUSCcgYW5kICdFTkRMSUJQQVRIJyB0bwotY29udHJvbCB3aGVyZSB0byBsb2FkIGNvbnZlbnRpb25hbCBETExzIGZyb20uICBUaG9zZSBuYW1lcyBhcmUKLWludGVyY2VwdGVkIGFuZCBjb252ZXJ0ZWQgdG8gY2FsbHMgb24gdGhlIE9TLzIga2VybmVsIEFQSXMgYW5kCi1hcmUgaW5oZXJpdGVkIGJ5IGNoaWxkIHByb2Nlc3Nlcywgd2hldGhlciBQeXRob24tYmFzZWQgb3Igbm90LgotCi1BIGZldyBuZXcgYXR0cmlidXRlcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIG9zIG1vZHVsZToKLQotICAgIG9zLm1lbWluc3RhbGxlZCAgIyBDb3VudCBvZiBCeXRlcyBvZiBSQU0gSW5zdGFsbGVkIG9uIE1hY2hpbmUKLSAgICBvcy5tZW1rZXJuZWwgICAgICMgQ291bnQgb2YgQnl0ZXMgb2YgUkFNIFJlc2VydmVkIChOb24tU3dhcHBhYmxlKQotICAgIG9zLm1lbXZpcnR1YWwgICAgIyBDb3VudCBvZiBCeXRlcyBvZiBWaXJ0dWFsIFJBTSBQb3NzaWJsZQotICAgIG9zLnRpbWVzbGljZSAgICAgIyBEdXJhdGlvbiBvZiBTY2hlZHVsZXIgVGltZXNsaWNlLCBpbiBNaWxsaXNlY29uZHMKLSAgICBvcy5tYXhwYXRobGVuICAgICMgTWF4aW11bSBMZW5ndGggb2YgYSBQYXRoIFNwZWNpZmljYXRpb24sIGluIGNoYXJzCi0gICAgb3MubWF4bmFtZWxlbiAgICAjIE1heGltdW0gTGVuZ3RoIG9mIGEgU2luZ2xlIERpci9GaWxlIE5hbWUsIGluIGNoYXJzCi0gICAgb3MudmVyc2lvbiAgICAgICAjIFZlcnNpb24gb2YgT1MvMiBCZWluZyBSdW4gZS5nLiAiNC4wMCIKLSAgICBvcy5yZXZpc2lvbiAgICAgICMgUmV2aXNpb24gb2YgT1MvMiBCZWluZyBSdW4gKHVzdWFsbHkgemVybykKLSAgICBvcy5ib290ZHJpdmUgICAgICMgRHJpdmUgdGhhdCBTeXN0ZW0gQm9vdGVkIEZyb20gZS5nLiAiQzoiCi0gICAgICAgICAgICAgICAgICAgICAjICh1c2VmdWwgdG8gZmluZCB0aGUgQ09ORklHLlNZUyB1c2VkIHRvIGJvb3Qgd2l0aCkKLQotCi0tLSBVc2luZyBQeXRob24gYXMgdGhlIERlZmF1bHQgT1MvMiBCYXRjaCBMYW5ndWFnZQotCi1Ob3RlIHRoYXQgT1MvMiBzdXBwb3J0cyB0aGUgVW5peCB0ZWNobmlxdWUgb2YgcHV0dGluZyB0aGUgc3BlY2lhbAotY29tbWVudCBsaW5lIGF0IHRoZSB0aW1lIG9mIHNjcmlwdHMgZS5nLiAiIyEvdXNyL2Jpbi9weXRob24iIGluCi1hIGRpZmZlcmVudCBzeW50YWN0aWMgZm9ybS4gIFRvIGRvIHRoaXMsIHB1dCB5b3VyIHNjcmlwdCBpbnRvIGEgZmlsZQotd2l0aCBhIC5DTUQgZXh0ZW5zaW9uIGFuZCBhZGRlZCAnZXh0cHJvYycgdG8gdGhlIHRvcCBhcyBmb2xsb3dzOgotCi0gICAgZXh0cHJvYyBDOlxQeXRob25cUHl0aG9uLmV4ZSAteAotICAgIGltcG9ydCBvcwotICAgIHByaW50ICJIZWxsbyBmcm9tIFB5dGhvbiIKLQotVGhlICcteCcgb3B0aW9uIHRlbGxzIFB5dGhvbiB0byBza2lwIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlCi13aGlsZSBwcm9jZXNzaW5nIHRoZSByZXN0IGFzIG5vcm1hbCBQeXRob24gc291cmNlLgotCi0KLS0tIFN1Z2dlc3RlZCBFbnZpcm9ubWVudCBWYXJpYWJsZSBTZXR1cAotCi1XaXRoIHJlc3BlY3QgdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgUHl0aG9uLCBJIHVzZSB0aGUKLWZvbGxvd2luZyBzZXR1cDoKLQotICAgIFNldCBQWVRIT05IT01FPUU6XFRhdVxQcm9qZWN0c1xQeXRob247RDpcRExMcwotICAgIFNldCBQWVRIT05QQVRIPS47RTpcVGF1XFByb2plY3RzXFB5dGhvblxMaWI7IFwKLSAgICAgICAgICAgICAgICAgICAgIEU6XFRhdVxQcm9qZWN0c1xQeXRob25cTGliXHBsYXQtd2luCi0KLVRoZSBFWEVDX1BSRUZJWCAob3B0aW9uYWwgc2Vjb25kIHBhdGhzcGVjIG9uIFBZVEhPTkhPTUUpIGlzIHdoZXJlCi15b3UgcHV0IGFueSBQeXRob24gZXh0ZW5zaW9uIERMTHMgeW91IG1heSBjcmVhdGUvb2J0YWluLiAgVGhlcmUKLWFyZSBub25lIHByb3ZpZGVkIHdpdGggdGhpcyByZWxlYXNlLgotCi0KLS0tIENvbnRhY3QgSW5mbwotCi1KZWZmIFJ1c2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRpbmcgdGhlIFZBQ1BQIHBvcnQgOi0oCi0KLUkgZG9uJ3QgaGF2ZSB0aGUgVkFDUFAgY29tcGlsZXIsIHNvIGNhbid0IHJlbGlhYmx5IG1haW50YWluIHRoaXMgcG9ydC4gCi0KLUFueW9uZSB3aXRoIFZBQ1BQIHdobyBjYW4gY29udHJpYnV0ZSBwYXRjaGVzIHRvIGtlZXAgdGhpcyBwb3J0IGJ1aWxkYWJsZQotc2hvdWxkIHVwbG9hZCB0aGVtIHRvIHRoZSBQeXRob24gUGF0Y2ggTWFuYWdlciBhdCBTb3VyY2Vmb3JnZSBhbmQgCi1hc3NpZ24gdGhlbSB0byBtZSBmb3IgcmV2aWV3L2NoZWNraW4uCi0KLUFuZHJldyBNYWNJbnR5cmUKLWFpbWFjaW50eXJlIGF0IHVzZXJzLnNvdXJjZWZvcmdlLm5ldAotQXVndXN0IDE4LCAyMDAyLgpkaWZmIC0tZ2l0IGEvUEMvcHljb25maWcuaCBiL1BDL3B5Y29uZmlnLmgKaW5kZXggMGI5NjUzOS4uZTFjMTk4OCAxMDA2NDQKLS0tIGEvUEMvcHljb25maWcuaAorKysgYi9QQy9weWNvbmZpZy5oCkBAIC03NCw4ICs3NCw2IEBACiAjZGVmaW5lIERPTlRfSEFWRV9TSUdfUEFVU0UKICNkZWZpbmUgTE9OR19CSVQJMzIKICNkZWZpbmUgV09SRF9CSVQgMzIKLSNkZWZpbmUgUFJFRklYICIiCi0jZGVmaW5lIEVYRUNfUFJFRklYICIiCiAKICNkZWZpbmUgTVNfV0lOMzIgLyogb25seSBzdXBwb3J0IHdpbjMyIGFuZCBncmVhdGVyLiAqLwogI2RlZmluZSBNU19XSU5ET1dTCkBAIC0xNTYsMTUgKzE1NCw5IEBACiAjZW5kaWYgLyogTVNfV0lONjQgKi8KIAogLyogc2V0IHRoZSB2ZXJzaW9uIG1hY3JvcyBmb3IgdGhlIHdpbmRvd3MgaGVhZGVycyAqLwotI2lmZGVmIE1TX1dJTlg2NAotLyogNjQgYml0IG9ubHkgcnVucyBvbiBYUCBvciBncmVhdGVyICovCisvKiBQeXRob24gMy40KyByZXF1aXJlcyBXaW5kb3dzIFhQIG9yIGdyZWF0ZXIgKi8KICNkZWZpbmUgUHlfV0lOVkVSIDB4MDUwMSAvKiBfV0lOMzJfV0lOTlRfV0lOWFAgKi8KICNkZWZpbmUgUHlfTlREREkgTlRERElfV0lOWFAKLSNlbHNlCi0vKiBQeXRob24gMi42KyByZXF1aXJlcyBXaW5kb3dzIDIwMDAgb3IgZ3JlYXRlciAqLwotI2RlZmluZSBQeV9XSU5WRVIgMHgwNTAwIC8qIF9XSU4zMl9XSU5OVF9XSU4ySyAqLwotI2RlZmluZSBQeV9OVERESSBOVERESV9XSU4yS1NQNAotI2VuZGlmCiAKIC8qIFdlIG9ubHkgc2V0IHRoZXNlIHZhbHVlcyB3aGVuIGJ1aWxkaW5nIFB5dGhvbiAtIHdlIGRvbid0IHdhbnQgdG8gZm9yY2UKICAgIHRoZXNlIHZhbHVlcyBvbiBleHRlbnNpb25zLCBhcyB0aGF0IHdpbGwgYWZmZWN0IHRoZSBwcm90b3R5cGVzIGFuZApAQCAtMTk5LDggKzE5MSwxMCBAQAogI2RlZmluZSBIQVZFX1NTSVpFX1QgMQogCiAjaWYgZGVmaW5lZChNU19XSU4zMikgJiYgIWRlZmluZWQoTVNfV0lONjQpCi0jaWZkZWYgX01fSVg4NgorI2lmIGRlZmluZWQoX01fSVg4NikKICNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjMyIGJpdCAoSW50ZWwpIikKKyNlbGlmIGRlZmluZWQoX01fQVJNKQorI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChBUk0pIikKICNlbHNlCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKFVua25vd24pIikKICNlbmRpZgpAQCAtMzI4LDExICszMjIsMTEgQEAKIAkJCXRoZWlyIE1ha2VmaWxlIChvdGhlciBjb21waWxlcnMgYXJlIGdlbmVyYWxseQogCQkJdGFrZW4gY2FyZSBvZiBieSBkaXN0dXRpbHMuKSAqLwogIwkJCWlmIGRlZmluZWQoX0RFQlVHKQotIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMzX2QubGliIikKKyMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zNF9kLmxpYiIpCiAjCQkJZWxpZiBkZWZpbmVkKFB5X0xJTUlURURfQVBJKQogIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMubGliIikKICMJCQllbHNlCi0jCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzMubGliIikKKyMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zNC5saWIiKQogIwkJCWVuZGlmIC8qIF9ERUJVRyAqLwogIwkJZW5kaWYgLyogX01TQ19WRVIgKi8KICMJZW5kaWYgLyogUHlfQlVJTERfQ09SRSAqLwpAQCAtMzk2LDcgKzM5MCw3IEBACiAjZWxzZQogLyogVkM2LCBWUyAyMDAyIGFuZCBlVkM0IGRvbid0IHN1cHBvcnQgdGhlIEM5OSBMTCBzdWZmaXggZm9yIDY0LWJpdCBpbnRlZ2VyIGxpdGVyYWxzICovCiAjZGVmaW5lIFB5X0xMKHgpIHgjI0k2NAotI2VuZGlmICAvKiBfTVNDX1ZFUiA+IDEyMDAgICovCisjZW5kaWYgIC8qIF9NU0NfVkVSID4gMTMwMCAgKi8KICNlbmRpZiAgLyogX01TQ19WRVIgKi8KIAogI2VuZGlmCkBAIC00NDIsNiArNDM2LDExIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNvcHlzaWduJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9DT1BZU0lHTiAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcm91bmQnIGZ1bmN0aW9uLiAqLworI2lmIF9NU0NfVkVSID49IDE4MDAKKyNkZWZpbmUgSEFWRV9ST1VORCAxCisjZW5kaWYKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc2luZicgbWFjcm8uICovCiAjZGVmaW5lIEhBVkVfREVDTF9JU0lORiAxCiAKQEAgLTczMSw2ICs3MzAsOSBAQAogLyogVGhlIHNpemUgb2YgYHdjaGFyX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjZGVmaW5lIFNJWkVPRl9XQ0hBUl9UIDIKIAorLyogVGhlIHNpemUgb2YgYHBpZF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfUElEX1QgU0laRU9GX0lOVAorCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGRsIGxpYnJhcnkgKC1sZGwpLiAgKi8KIC8qICN1bmRlZiBIQVZFX0xJQkRMICovCiAKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbi5tayBiL1BDL3B5dGhvbi5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2NTEwNi4uMDAwMDAwMAotLS0gYS9QQy9weXRob24ubWsKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXByb2plY3QgOiBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIuZXhlIG46XHB5dGhvblxweXRob24tMS4mDQotNS4xXHBjXHdhdF9kb3NccHl0aF9kb3MuZXhlIC5TWU1CT0xJQw0KLQ0KLSFpbmNsdWRlIG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X29zMlxweXRoX29zMi5tazENCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9kb3NccHl0aF9kb3MubWsxDQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5kZWYgYi9QQy9weXRob24zLmRlZgppbmRleCA5NjZlNmM5Li4zN2U0NTRiIDEwMDY0NAotLS0gYS9QQy9weXRob24zLmRlZgorKysgYi9QQy9weXRob24zLmRlZgpAQCAtMSw2OTkgKzEsNzAxIEBACi07IFdoZW4gY2hhbmdpbmcgdGhpcyBmaWxlLCBydW4gcHl0aG9uMzNnZW4ucHkKKzsgV2hlbiBjaGFuZ2luZyB0aGlzIGZpbGUsIHJ1biBweXRob24zNGdlbi5weQogTElCUkFSWQkicHl0aG9uMyIKIEVYUE9SVFMKLSAgUHlBcmdfUGFyc2U9cHl0aG9uMzMuUHlBcmdfUGFyc2UKLSAgUHlBcmdfUGFyc2VUdXBsZT1weXRob24zMy5QeUFyZ19QYXJzZVR1cGxlCi0gIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zMy5QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMKLSAgUHlBcmdfVW5wYWNrVHVwbGU9cHl0aG9uMzMuUHlBcmdfVW5wYWNrVHVwbGUKLSAgUHlBcmdfVmFQYXJzZT1weXRob24zMy5QeUFyZ19WYVBhcnNlCi0gIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzPXB5dGhvbjMzLlB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gIFB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cz1weXRob24zMy5QeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHMKLSAgUHlCYXNlT2JqZWN0X1R5cGU9cHl0aG9uMzMuUHlCYXNlT2JqZWN0X1R5cGUgREFUQQotICBQeUJvb2xfRnJvbUxvbmc9cHl0aG9uMzMuUHlCb29sX0Zyb21Mb25nCi0gIFB5Qm9vbF9UeXBlPXB5dGhvbjMzLlB5Qm9vbF9UeXBlIERBVEEKLSAgUHlCeXRlQXJyYXlJdGVyX1R5cGU9cHl0aG9uMzMuUHlCeXRlQXJyYXlJdGVyX1R5cGUgREFUQQotICBQeUJ5dGVBcnJheV9Bc1N0cmluZz1weXRob24zMy5QeUJ5dGVBcnJheV9Bc1N0cmluZwotICBQeUJ5dGVBcnJheV9Db25jYXQ9cHl0aG9uMzMuUHlCeXRlQXJyYXlfQ29uY2F0Ci0gIFB5Qnl0ZUFycmF5X0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlCeXRlQXJyYXlfRnJvbU9iamVjdAotICBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeUJ5dGVBcnJheV9SZXNpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfUmVzaXplCi0gIFB5Qnl0ZUFycmF5X1NpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfU2l6ZQotICBQeUJ5dGVBcnJheV9UeXBlPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1R5cGUgREFUQQotICBQeUJ5dGVzSXRlcl9UeXBlPXB5dGhvbjMzLlB5Qnl0ZXNJdGVyX1R5cGUgREFUQQotICBQeUJ5dGVzX0FzU3RyaW5nPXB5dGhvbjMzLlB5Qnl0ZXNfQXNTdHJpbmcKLSAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUKLSAgUHlCeXRlc19Db25jYXQ9cHl0aG9uMzMuUHlCeXRlc19Db25jYXQKLSAgUHlCeXRlc19Db25jYXRBbmREZWw9cHl0aG9uMzMuUHlCeXRlc19Db25jYXRBbmREZWwKLSAgUHlCeXRlc19EZWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlCeXRlc19EZWNvZGVFc2NhcGUKLSAgUHlCeXRlc19Gcm9tRm9ybWF0PXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbUZvcm1hdAotICBQeUJ5dGVzX0Zyb21Gb3JtYXRWPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbUZvcm1hdFYKLSAgUHlCeXRlc19Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbU9iamVjdAotICBQeUJ5dGVzX0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlCeXRlc19Gcm9tU3RyaW5nCi0gIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeUJ5dGVzX1JlcHI9cHl0aG9uMzMuUHlCeXRlc19SZXByCi0gIFB5Qnl0ZXNfU2l6ZT1weXRob24zMy5QeUJ5dGVzX1NpemUKLSAgUHlCeXRlc19UeXBlPXB5dGhvbjMzLlB5Qnl0ZXNfVHlwZSBEQVRBCi0gIFB5Q0Z1bmN0aW9uX0NhbGw9cHl0aG9uMzMuUHlDRnVuY3Rpb25fQ2FsbAotICBQeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0PXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3QKLSAgUHlDRnVuY3Rpb25fR2V0RmxhZ3M9cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0RmxhZ3MKLSAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb249cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KLSAgUHlDRnVuY3Rpb25fR2V0U2VsZj1weXRob24zMy5QeUNGdW5jdGlvbl9HZXRTZWxmCi0gIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX05ld0V4Ci0gIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzMuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCi0gIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjMzLlB5Q2FsbEl0ZXJfTmV3Ci0gIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zMy5QeUNhbGxJdGVyX1R5cGUgREFUQQotICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjMzLlB5Q2FsbGFibGVfQ2hlY2sKLSAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzMuUHlDYXBzdWxlX0dldENvbnRleHQKLSAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzMuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKLSAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzMuUHlDYXBzdWxlX0dldE5hbWUKLSAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzMuUHlDYXBzdWxlX0dldFBvaW50ZXIKLSAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zMy5QeUNhcHN1bGVfSW1wb3J0Ci0gIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjMzLlB5Q2Fwc3VsZV9Jc1ZhbGlkCi0gIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzMuUHlDYXBzdWxlX05ldwotICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zMy5QeUNhcHN1bGVfU2V0Q29udGV4dAotICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zMy5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgotICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zMy5QeUNhcHN1bGVfU2V0TmFtZQotICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zMy5QeUNhcHN1bGVfU2V0UG9pbnRlcgotICBQeUNhcHN1bGVfVHlwZT1weXRob24zMy5QeUNhcHN1bGVfVHlwZSBEQVRBCi0gIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjMzLlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKLSAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycwotICBQeUNvZGVjX0RlY29kZT1weXRob24zMy5QeUNvZGVjX0RlY29kZQotICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzMuUHlDb2RlY19EZWNvZGVyCi0gIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjMzLlB5Q29kZWNfRW5jb2RlCi0gIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zMy5QeUNvZGVjX0VuY29kZXIKLSAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19JZ25vcmVFcnJvcnMKLSAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzMuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKLSAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzMuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKLSAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjMzLlB5Q29kZWNfS25vd25FbmNvZGluZwotICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjMzLlB5Q29kZWNfTG9va3VwRXJyb3IKLSAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zMy5QeUNvZGVjX1JlZ2lzdGVyCi0gIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zMy5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKLSAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfUmVwbGFjZUVycm9ycwotICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zMy5QeUNvZGVjX1N0cmVhbVJlYWRlcgotICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zMy5QeUNvZGVjX1N0cmVhbVdyaXRlcgotICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zMy5QeUNvZGVjX1N0cmljdEVycm9ycwotICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKLSAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjMzLlB5Q29tcGxleF9Gcm9tRG91YmxlcwotICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjMzLlB5Q29tcGxleF9JbWFnQXNEb3VibGUKLSAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zMy5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCi0gIFB5Q29tcGxleF9UeXBlPXB5dGhvbjMzLlB5Q29tcGxleF9UeXBlIERBVEEKLSAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zMy5QeURlc2NyX05ld0NsYXNzTWV0aG9kCi0gIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjMzLlB5RGVzY3JfTmV3R2V0U2V0Ci0gIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjMzLlB5RGVzY3JfTmV3TWVtYmVyCi0gIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjMzLlB5RGVzY3JfTmV3TWV0aG9kCi0gIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zMy5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQotICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zMy5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCi0gIFB5RGljdEtleXNfVHlwZT1weXRob24zMy5QeURpY3RLZXlzX1R5cGUgREFUQQotICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzMuUHlEaWN0UHJveHlfTmV3Ci0gIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzMuUHlEaWN0UHJveHlfVHlwZSBEQVRBCi0gIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjMzLlB5RGljdFZhbHVlc19UeXBlIERBVEEKLSAgUHlEaWN0X0NsZWFyPXB5dGhvbjMzLlB5RGljdF9DbGVhcgotICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzMuUHlEaWN0X0NvbnRhaW5zCi0gIFB5RGljdF9Db3B5PXB5dGhvbjMzLlB5RGljdF9Db3B5Ci0gIFB5RGljdF9EZWxJdGVtPXB5dGhvbjMzLlB5RGljdF9EZWxJdGVtCi0gIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9EZWxJdGVtU3RyaW5nCi0gIFB5RGljdF9HZXRJdGVtPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtCi0gIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtU3RyaW5nCi0gIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCi0gIFB5RGljdF9JdGVtcz1weXRob24zMy5QeURpY3RfSXRlbXMKLSAgUHlEaWN0X0tleXM9cHl0aG9uMzMuUHlEaWN0X0tleXMKLSAgUHlEaWN0X01lcmdlPXB5dGhvbjMzLlB5RGljdF9NZXJnZQotICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zMy5QeURpY3RfTWVyZ2VGcm9tU2VxMgotICBQeURpY3RfTmV3PXB5dGhvbjMzLlB5RGljdF9OZXcKLSAgUHlEaWN0X05leHQ9cHl0aG9uMzMuUHlEaWN0X05leHQKLSAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzMuUHlEaWN0X1NldEl0ZW0KLSAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlEaWN0X1NldEl0ZW1TdHJpbmcKLSAgUHlEaWN0X1NpemU9cHl0aG9uMzMuUHlEaWN0X1NpemUKLSAgUHlEaWN0X1R5cGU9cHl0aG9uMzMuUHlEaWN0X1R5cGUgREFUQQotICBQeURpY3RfVXBkYXRlPXB5dGhvbjMzLlB5RGljdF9VcGRhdGUKLSAgUHlEaWN0X1ZhbHVlcz1weXRob24zMy5QeURpY3RfVmFsdWVzCi0gIFB5RWxsaXBzaXNfVHlwZT1weXRob24zMy5QeUVsbGlwc2lzX1R5cGUgREFUQQotICBQeUVudW1fVHlwZT1weXRob24zMy5QeUVudW1fVHlwZSBEQVRBCi0gIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjMzLlB5RXJyX0JhZEFyZ3VtZW50Ci0gIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zMy5QeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjMzLlB5RXJyX0NoZWNrU2lnbmFscwotICBQeUVycl9DbGVhcj1weXRob24zMy5QeUVycl9DbGVhcgotICBQeUVycl9EaXNwbGF5PXB5dGhvbjMzLlB5RXJyX0Rpc3BsYXkKLSAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zMy5QeUVycl9FeGNlcHRpb25NYXRjaGVzCi0gIFB5RXJyX0ZldGNoPXB5dGhvbjMzLlB5RXJyX0ZldGNoCi0gIFB5RXJyX0Zvcm1hdD1weXRob24zMy5QeUVycl9Gb3JtYXQKLSAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjMzLlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcwotICBQeUVycl9OZXdFeGNlcHRpb249cHl0aG9uMzMuUHlFcnJfTmV3RXhjZXB0aW9uCi0gIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M9cHl0aG9uMzMuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYwotICBQeUVycl9Ob01lbW9yeT1weXRob24zMy5QeUVycl9Ob01lbW9yeQotICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb249cHl0aG9uMzMuUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCi0gIFB5RXJyX09jY3VycmVkPXB5dGhvbjMzLlB5RXJyX09jY3VycmVkCi0gIFB5RXJyX1ByaW50PXB5dGhvbjMzLlB5RXJyX1ByaW50Ci0gIFB5RXJyX1ByaW50RXg9cHl0aG9uMzMuUHlFcnJfUHJpbnRFeAotICBQeUVycl9Qcm9ncmFtVGV4dD1weXRob24zMy5QeUVycl9Qcm9ncmFtVGV4dAotICBQeUVycl9SZXN0b3JlPXB5dGhvbjMzLlB5RXJyX1Jlc3RvcmUKLSAgUHlFcnJfU2V0RnJvbUVycm5vPXB5dGhvbjMzLlB5RXJyX1NldEZyb21FcnJubwotICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWU9cHl0aG9uMzMuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi0gIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdD1weXRob24zMy5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKLSAgUHlFcnJfU2V0SW50ZXJydXB0PXB5dGhvbjMzLlB5RXJyX1NldEludGVycnVwdAotICBQeUVycl9TZXROb25lPXB5dGhvbjMzLlB5RXJyX1NldE5vbmUKLSAgUHlFcnJfU2V0T2JqZWN0PXB5dGhvbjMzLlB5RXJyX1NldE9iamVjdAotICBQeUVycl9TZXRTdHJpbmc9cHl0aG9uMzMuUHlFcnJfU2V0U3RyaW5nCi0gIFB5RXJyX1N5bnRheExvY2F0aW9uPXB5dGhvbjMzLlB5RXJyX1N5bnRheExvY2F0aW9uCi0gIFB5RXJyX1dhcm5FeD1weXRob24zMy5QeUVycl9XYXJuRXgKLSAgUHlFcnJfV2FybkV4cGxpY2l0PXB5dGhvbjMzLlB5RXJyX1dhcm5FeHBsaWNpdAotICBQeUVycl9XYXJuRm9ybWF0PXB5dGhvbjMzLlB5RXJyX1dhcm5Gb3JtYXQKLSAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlPXB5dGhvbjMzLlB5RXJyX1dyaXRlVW5yYWlzYWJsZQotICBQeUV2YWxfQWNxdWlyZUxvY2s9cHl0aG9uMzMuUHlFdmFsX0FjcXVpcmVMb2NrCi0gIFB5RXZhbF9BY3F1aXJlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9BY3F1aXJlVGhyZWFkCi0gIFB5RXZhbF9DYWxsRnVuY3Rpb249cHl0aG9uMzMuUHlFdmFsX0NhbGxGdW5jdGlvbgotICBQeUV2YWxfQ2FsbE1ldGhvZD1weXRob24zMy5QeUV2YWxfQ2FsbE1ldGhvZAotICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3Jkcz1weXRob24zMy5QeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcwotICBQeUV2YWxfRXZhbENvZGU9cHl0aG9uMzMuUHlFdmFsX0V2YWxDb2RlCi0gIFB5RXZhbF9FdmFsQ29kZUV4PXB5dGhvbjMzLlB5RXZhbF9FdmFsQ29kZUV4Ci0gIFB5RXZhbF9FdmFsRnJhbWU9cHl0aG9uMzMuUHlFdmFsX0V2YWxGcmFtZQotICBQeUV2YWxfRXZhbEZyYW1lRXg9cHl0aG9uMzMuUHlFdmFsX0V2YWxGcmFtZUV4Ci0gIFB5RXZhbF9HZXRCdWlsdGlucz1weXRob24zMy5QeUV2YWxfR2V0QnVpbHRpbnMKLSAgUHlFdmFsX0dldENhbGxTdGF0cz1weXRob24zMy5QeUV2YWxfR2V0Q2FsbFN0YXRzCi0gIFB5RXZhbF9HZXRGcmFtZT1weXRob24zMy5QeUV2YWxfR2V0RnJhbWUKLSAgUHlFdmFsX0dldEZ1bmNEZXNjPXB5dGhvbjMzLlB5RXZhbF9HZXRGdW5jRGVzYwotICBQeUV2YWxfR2V0RnVuY05hbWU9cHl0aG9uMzMuUHlFdmFsX0dldEZ1bmNOYW1lCi0gIFB5RXZhbF9HZXRHbG9iYWxzPXB5dGhvbjMzLlB5RXZhbF9HZXRHbG9iYWxzCi0gIFB5RXZhbF9HZXRMb2NhbHM9cHl0aG9uMzMuUHlFdmFsX0dldExvY2FscwotICBQeUV2YWxfSW5pdFRocmVhZHM9cHl0aG9uMzMuUHlFdmFsX0luaXRUaHJlYWRzCi0gIFB5RXZhbF9SZUluaXRUaHJlYWRzPXB5dGhvbjMzLlB5RXZhbF9SZUluaXRUaHJlYWRzCi0gIFB5RXZhbF9SZWxlYXNlTG9jaz1weXRob24zMy5QeUV2YWxfUmVsZWFzZUxvY2sKLSAgUHlFdmFsX1JlbGVhc2VUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1JlbGVhc2VUaHJlYWQKLSAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLSAgUHlFdmFsX1NhdmVUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1NhdmVUaHJlYWQKLSAgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZD1weXRob24zMy5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCi0gIFB5RXhjX0FyaXRobWV0aWNFcnJvcj1weXRob24zMy5QeUV4Y19Bcml0aG1ldGljRXJyb3IgREFUQQotICBQeUV4Y19Bc3NlcnRpb25FcnJvcj1weXRob24zMy5QeUV4Y19Bc3NlcnRpb25FcnJvciBEQVRBCi0gIFB5RXhjX0F0dHJpYnV0ZUVycm9yPXB5dGhvbjMzLlB5RXhjX0F0dHJpYnV0ZUVycm9yIERBVEEKLSAgUHlFeGNfQmFzZUV4Y2VwdGlvbj1weXRob24zMy5QeUV4Y19CYXNlRXhjZXB0aW9uIERBVEEKLSAgUHlFeGNfQnVmZmVyRXJyb3I9cHl0aG9uMzMuUHlFeGNfQnVmZmVyRXJyb3IgREFUQQotICBQeUV4Y19CeXRlc1dhcm5pbmc9cHl0aG9uMzMuUHlFeGNfQnl0ZXNXYXJuaW5nIERBVEEKLSAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCi0gIFB5RXhjX0VPRkVycm9yPXB5dGhvbjMzLlB5RXhjX0VPRkVycm9yIERBVEEKLSAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcj1weXRob24zMy5QeUV4Y19FbnZpcm9ubWVudEVycm9yIERBVEEKLSAgUHlFeGNfRXhjZXB0aW9uPXB5dGhvbjMzLlB5RXhjX0V4Y2VwdGlvbiBEQVRBCi0gIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcj1weXRob24zMy5QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IgREFUQQotICBQeUV4Y19GdXR1cmVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0Z1dHVyZVdhcm5pbmcgREFUQQotICBQeUV4Y19HZW5lcmF0b3JFeGl0PXB5dGhvbjMzLlB5RXhjX0dlbmVyYXRvckV4aXQgREFUQQotICBQeUV4Y19JT0Vycm9yPXB5dGhvbjMzLlB5RXhjX0lPRXJyb3IgREFUQQotICBQeUV4Y19JbXBvcnRFcnJvcj1weXRob24zMy5QeUV4Y19JbXBvcnRFcnJvciBEQVRBCi0gIFB5RXhjX0ltcG9ydFdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfSW1wb3J0V2FybmluZyBEQVRBCi0gIFB5RXhjX0luZGVudGF0aW9uRXJyb3I9cHl0aG9uMzMuUHlFeGNfSW5kZW50YXRpb25FcnJvciBEQVRBCi0gIFB5RXhjX0luZGV4RXJyb3I9cHl0aG9uMzMuUHlFeGNfSW5kZXhFcnJvciBEQVRBCi0gIFB5RXhjX0tleUVycm9yPXB5dGhvbjMzLlB5RXhjX0tleUVycm9yIERBVEEKLSAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQ9cHl0aG9uMzMuUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgREFUQQotICBQeUV4Y19Mb29rdXBFcnJvcj1weXRob24zMy5QeUV4Y19Mb29rdXBFcnJvciBEQVRBCi0gIFB5RXhjX01lbW9yeUVycm9yPXB5dGhvbjMzLlB5RXhjX01lbW9yeUVycm9yIERBVEEKLSAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0PXB5dGhvbjMzLlB5RXhjX01lbW9yeUVycm9ySW5zdCBEQVRBCi0gIFB5RXhjX05hbWVFcnJvcj1weXRob24zMy5QeUV4Y19OYW1lRXJyb3IgREFUQQotICBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yPXB5dGhvbjMzLlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IgREFUQQotICBQeUV4Y19PU0Vycm9yPXB5dGhvbjMzLlB5RXhjX09TRXJyb3IgREFUQQotICBQeUV4Y19PdmVyZmxvd0Vycm9yPXB5dGhvbjMzLlB5RXhjX092ZXJmbG93RXJyb3IgREFUQQotICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgREFUQQotICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3Q9cHl0aG9uMzMuUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0IERBVEEKLSAgUHlFeGNfUmVmZXJlbmNlRXJyb3I9cHl0aG9uMzMuUHlFeGNfUmVmZXJlbmNlRXJyb3IgREFUQQotICBQeUV4Y19SdW50aW1lRXJyb3I9cHl0aG9uMzMuUHlFeGNfUnVudGltZUVycm9yIERBVEEKLSAgUHlFeGNfUnVudGltZVdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfUnVudGltZVdhcm5pbmcgREFUQQotICBQeUV4Y19TdG9wSXRlcmF0aW9uPXB5dGhvbjMzLlB5RXhjX1N0b3BJdGVyYXRpb24gREFUQQotICBQeUV4Y19TeW50YXhFcnJvcj1weXRob24zMy5QeUV4Y19TeW50YXhFcnJvciBEQVRBCi0gIFB5RXhjX1N5bnRheFdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfU3ludGF4V2FybmluZyBEQVRBCi0gIFB5RXhjX1N5c3RlbUVycm9yPXB5dGhvbjMzLlB5RXhjX1N5c3RlbUVycm9yIERBVEEKLSAgUHlFeGNfU3lzdGVtRXhpdD1weXRob24zMy5QeUV4Y19TeXN0ZW1FeGl0IERBVEEKLSAgUHlFeGNfVGFiRXJyb3I9cHl0aG9uMzMuUHlFeGNfVGFiRXJyb3IgREFUQQotICBQeUV4Y19UeXBlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVHlwZUVycm9yIERBVEEKLSAgUHlFeGNfVW5ib3VuZExvY2FsRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZURlY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZVdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfVW5pY29kZVdhcm5pbmcgREFUQQotICBQeUV4Y19Vc2VyV2FybmluZz1weXRob24zMy5QeUV4Y19Vc2VyV2FybmluZyBEQVRBCi0gIFB5RXhjX1ZhbHVlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVmFsdWVFcnJvciBEQVRBCi0gIFB5RXhjX1dhcm5pbmc9cHl0aG9uMzMuUHlFeGNfV2FybmluZyBEQVRBCi0gIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yPXB5dGhvbjMzLlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIERBVEEKLSAgUHlFeGNlcHRpb25fR2V0Q2F1c2U9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0Q2F1c2UKLSAgUHlFeGNlcHRpb25fR2V0Q29udGV4dD1weXRob24zMy5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0Ci0gIFB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaz1weXRob24zMy5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2sKLSAgUHlFeGNlcHRpb25fU2V0Q2F1c2U9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0Q2F1c2UKLSAgUHlFeGNlcHRpb25fU2V0Q29udGV4dD1weXRob24zMy5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0Ci0gIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaz1weXRob24zMy5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sKLSAgUHlGaWxlX0Zyb21GZD1weXRob24zMy5QeUZpbGVfRnJvbUZkCi0gIFB5RmlsZV9HZXRMaW5lPXB5dGhvbjMzLlB5RmlsZV9HZXRMaW5lCi0gIFB5RmlsZV9Xcml0ZU9iamVjdD1weXRob24zMy5QeUZpbGVfV3JpdGVPYmplY3QKLSAgUHlGaWxlX1dyaXRlU3RyaW5nPXB5dGhvbjMzLlB5RmlsZV9Xcml0ZVN0cmluZwotICBQeUZpbHRlcl9UeXBlPXB5dGhvbjMzLlB5RmlsdGVyX1R5cGUgREFUQQotICBQeUZsb2F0X0FzRG91YmxlPXB5dGhvbjMzLlB5RmxvYXRfQXNEb3VibGUKLSAgUHlGbG9hdF9Gcm9tRG91YmxlPXB5dGhvbjMzLlB5RmxvYXRfRnJvbURvdWJsZQotICBQeUZsb2F0X0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlGbG9hdF9Gcm9tU3RyaW5nCi0gIFB5RmxvYXRfR2V0SW5mbz1weXRob24zMy5QeUZsb2F0X0dldEluZm8KLSAgUHlGbG9hdF9HZXRNYXg9cHl0aG9uMzMuUHlGbG9hdF9HZXRNYXgKLSAgUHlGbG9hdF9HZXRNaW49cHl0aG9uMzMuUHlGbG9hdF9HZXRNaW4KLSAgUHlGbG9hdF9UeXBlPXB5dGhvbjMzLlB5RmxvYXRfVHlwZSBEQVRBCi0gIFB5RnJvemVuU2V0X05ldz1weXRob24zMy5QeUZyb3plblNldF9OZXcKLSAgUHlGcm96ZW5TZXRfVHlwZT1weXRob24zMy5QeUZyb3plblNldF9UeXBlIERBVEEKLSAgUHlHQ19Db2xsZWN0PXB5dGhvbjMzLlB5R0NfQ29sbGVjdAotICBQeUdJTFN0YXRlX0Vuc3VyZT1weXRob24zMy5QeUdJTFN0YXRlX0Vuc3VyZQotICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZT1weXRob24zMy5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQotICBQeUdJTFN0YXRlX1JlbGVhc2U9cHl0aG9uMzMuUHlHSUxTdGF0ZV9SZWxlYXNlCi0gIFB5R2V0U2V0RGVzY3JfVHlwZT1weXRob24zMy5QeUdldFNldERlc2NyX1R5cGUgREFUQQotICBQeUltcG9ydF9BZGRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfQWRkTW9kdWxlCi0gIFB5SW1wb3J0X0FwcGVuZEluaXR0YWI9cHl0aG9uMzMuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgotICBQeUltcG9ydF9DbGVhbnVwPXB5dGhvbjMzLlB5SW1wb3J0X0NsZWFudXAKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeD1weXRob24zMy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4Ci0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcz1weXRob24zMy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMKLSAgUHlJbXBvcnRfR2V0SW1wb3J0ZXI9cHl0aG9uMzMuUHlJbXBvcnRfR2V0SW1wb3J0ZXIKLSAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKLSAgUHlJbXBvcnRfR2V0TWFnaWNUYWc9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TWFnaWNUYWcKLSAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdD1weXRob24zMy5QeUltcG9ydF9HZXRNb2R1bGVEaWN0Ci0gIFB5SW1wb3J0X0ltcG9ydD1weXRob24zMy5QeUltcG9ydF9JbXBvcnQKLSAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQotICBQeUltcG9ydF9JbXBvcnRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0TW9kdWxlCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2s9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jawotICBQeUltcG9ydF9SZWxvYWRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfUmVsb2FkTW9kdWxlCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcj1weXRob24zMy5QeUludGVycHJldGVyU3RhdGVfQ2xlYXIKLSAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZT1weXRob24zMy5QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXc9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX05ldwotICBQeUl0ZXJfTmV4dD1weXRob24zMy5QeUl0ZXJfTmV4dAotICBQeUxpc3RJdGVyX1R5cGU9cHl0aG9uMzMuUHlMaXN0SXRlcl9UeXBlIERBVEEKLSAgUHlMaXN0UmV2SXRlcl9UeXBlPXB5dGhvbjMzLlB5TGlzdFJldkl0ZXJfVHlwZSBEQVRBCi0gIFB5TGlzdF9BcHBlbmQ9cHl0aG9uMzMuUHlMaXN0X0FwcGVuZAotICBQeUxpc3RfQXNUdXBsZT1weXRob24zMy5QeUxpc3RfQXNUdXBsZQotICBQeUxpc3RfR2V0SXRlbT1weXRob24zMy5QeUxpc3RfR2V0SXRlbQotICBQeUxpc3RfR2V0U2xpY2U9cHl0aG9uMzMuUHlMaXN0X0dldFNsaWNlCi0gIFB5TGlzdF9JbnNlcnQ9cHl0aG9uMzMuUHlMaXN0X0luc2VydAotICBQeUxpc3RfTmV3PXB5dGhvbjMzLlB5TGlzdF9OZXcKLSAgUHlMaXN0X1JldmVyc2U9cHl0aG9uMzMuUHlMaXN0X1JldmVyc2UKLSAgUHlMaXN0X1NldEl0ZW09cHl0aG9uMzMuUHlMaXN0X1NldEl0ZW0KLSAgUHlMaXN0X1NldFNsaWNlPXB5dGhvbjMzLlB5TGlzdF9TZXRTbGljZQotICBQeUxpc3RfU2l6ZT1weXRob24zMy5QeUxpc3RfU2l6ZQotICBQeUxpc3RfU29ydD1weXRob24zMy5QeUxpc3RfU29ydAotICBQeUxpc3RfVHlwZT1weXRob24zMy5QeUxpc3RfVHlwZSBEQVRBCi0gIFB5TG9uZ1JhbmdlSXRlcl9UeXBlPXB5dGhvbjMzLlB5TG9uZ1JhbmdlSXRlcl9UeXBlIERBVEEKLSAgUHlMb25nX0FzRG91YmxlPXB5dGhvbjMzLlB5TG9uZ19Bc0RvdWJsZQotICBQeUxvbmdfQXNMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmcKLSAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdwotICBQeUxvbmdfQXNMb25nTG9uZz1weXRob24zMy5QeUxvbmdfQXNMb25nTG9uZwotICBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cKLSAgUHlMb25nX0FzU2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Bc1NpemVfdAotICBQeUxvbmdfQXNTc2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Bc1NzaXplX3QKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwotICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2s9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCi0gIFB5TG9uZ19Bc1ZvaWRQdHI9cHl0aG9uMzMuUHlMb25nX0FzVm9pZFB0cgotICBQeUxvbmdfRnJvbURvdWJsZT1weXRob24zMy5QeUxvbmdfRnJvbURvdWJsZQotICBQeUxvbmdfRnJvbUxvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21Mb25nCi0gIFB5TG9uZ19Gcm9tTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21Mb25nTG9uZwotICBQeUxvbmdfRnJvbVNpemVfdD1weXRob24zMy5QeUxvbmdfRnJvbVNpemVfdAotICBQeUxvbmdfRnJvbVNzaXplX3Q9cHl0aG9uMzMuUHlMb25nX0Zyb21Tc2l6ZV90Ci0gIFB5TG9uZ19Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tU3RyaW5nCi0gIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCi0gIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKLSAgUHlMb25nX0Zyb21Wb2lkUHRyPXB5dGhvbjMzLlB5TG9uZ19Gcm9tVm9pZFB0cgotICBQeUxvbmdfR2V0SW5mbz1weXRob24zMy5QeUxvbmdfR2V0SW5mbwotICBQeUxvbmdfVHlwZT1weXRob24zMy5QeUxvbmdfVHlwZSBEQVRBCi0gIFB5TWFwX1R5cGU9cHl0aG9uMzMuUHlNYXBfVHlwZSBEQVRBCi0gIFB5TWFwcGluZ19DaGVjaz1weXRob24zMy5QeU1hcHBpbmdfQ2hlY2sKLSAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKLSAgUHlNYXBwaW5nX0hhc0tleT1weXRob24zMy5QeU1hcHBpbmdfSGFzS2V5Ci0gIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX0hhc0tleVN0cmluZwotICBQeU1hcHBpbmdfSXRlbXM9cHl0aG9uMzMuUHlNYXBwaW5nX0l0ZW1zCi0gIFB5TWFwcGluZ19LZXlzPXB5dGhvbjMzLlB5TWFwcGluZ19LZXlzCi0gIFB5TWFwcGluZ19MZW5ndGg9cHl0aG9uMzMuUHlNYXBwaW5nX0xlbmd0aAotICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZz1weXRob24zMy5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZwotICBQeU1hcHBpbmdfU2l6ZT1weXRob24zMy5QeU1hcHBpbmdfU2l6ZQotICBQeU1hcHBpbmdfVmFsdWVzPXB5dGhvbjMzLlB5TWFwcGluZ19WYWx1ZXMKLSAgUHlNZW1fRnJlZT1weXRob24zMy5QeU1lbV9GcmVlCi0gIFB5TWVtX01hbGxvYz1weXRob24zMy5QeU1lbV9NYWxsb2MKLSAgUHlNZW1fUmVhbGxvYz1weXRob24zMy5QeU1lbV9SZWFsbG9jCi0gIFB5TWVtYmVyRGVzY3JfVHlwZT1weXRob24zMy5QeU1lbWJlckRlc2NyX1R5cGUgREFUQQotICBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdD1weXRob24zMy5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdAotICBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cz1weXRob24zMy5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cwotICBQeU1lbW9yeVZpZXdfVHlwZT1weXRob24zMy5QeU1lbW9yeVZpZXdfVHlwZSBEQVRBCi0gIFB5TWV0aG9kRGVzY3JfVHlwZT1weXRob24zMy5QeU1ldGhvZERlc2NyX1R5cGUgREFUQQotICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudD1weXRob24zMy5QeU1vZHVsZV9BZGRJbnRDb25zdGFudAotICBQeU1vZHVsZV9BZGRPYmplY3Q9cHl0aG9uMzMuUHlNb2R1bGVfQWRkT2JqZWN0Ci0gIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50PXB5dGhvbjMzLlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50Ci0gIFB5TW9kdWxlX0NyZWF0ZTI9cHl0aG9uMzMuUHlNb2R1bGVfQ3JlYXRlMgotICBQeU1vZHVsZV9HZXREZWY9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RGVmCi0gIFB5TW9kdWxlX0dldERpY3Q9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RGljdAotICBQeU1vZHVsZV9HZXRGaWxlbmFtZT1weXRob24zMy5QeU1vZHVsZV9HZXRGaWxlbmFtZQotICBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdD1weXRob24zMy5QeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdAotICBQeU1vZHVsZV9HZXROYW1lPXB5dGhvbjMzLlB5TW9kdWxlX0dldE5hbWUKLSAgUHlNb2R1bGVfR2V0U3RhdGU9cHl0aG9uMzMuUHlNb2R1bGVfR2V0U3RhdGUKLSAgUHlNb2R1bGVfTmV3PXB5dGhvbjMzLlB5TW9kdWxlX05ldwotICBQeU1vZHVsZV9UeXBlPXB5dGhvbjMzLlB5TW9kdWxlX1R5cGUgREFUQQotICBQeU51bGxJbXBvcnRlcl9UeXBlPXB5dGhvbjMzLlB5TnVsbEltcG9ydGVyX1R5cGUgREFUQQotICBQeU51bWJlcl9BYnNvbHV0ZT1weXRob24zMy5QeU51bWJlcl9BYnNvbHV0ZQotICBQeU51bWJlcl9BZGQ9cHl0aG9uMzMuUHlOdW1iZXJfQWRkCi0gIFB5TnVtYmVyX0FuZD1weXRob24zMy5QeU51bWJlcl9BbmQKLSAgUHlOdW1iZXJfQXNTc2l6ZV90PXB5dGhvbjMzLlB5TnVtYmVyX0FzU3NpemVfdAotICBQeU51bWJlcl9DaGVjaz1weXRob24zMy5QeU51bWJlcl9DaGVjawotICBQeU51bWJlcl9EaXZtb2Q9cHl0aG9uMzMuUHlOdW1iZXJfRGl2bW9kCi0gIFB5TnVtYmVyX0Zsb2F0PXB5dGhvbjMzLlB5TnVtYmVyX0Zsb2F0Ci0gIFB5TnVtYmVyX0Zsb29yRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0Zsb29yRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VBZGQ9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZUFkZAotICBQeU51bWJlcl9JblBsYWNlQW5kPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VBbmQKLSAgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQotICBQeU51bWJlcl9JblBsYWNlTHNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VMc2hpZnQKLSAgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQotICBQeU51bWJlcl9JblBsYWNlT3I9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZU9yCi0gIFB5TnVtYmVyX0luUGxhY2VQb3dlcj1weXRob24zMy5QeU51bWJlcl9JblBsYWNlUG93ZXIKLSAgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcj1weXRob24zMy5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyCi0gIFB5TnVtYmVyX0luUGxhY2VSc2hpZnQ9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAotICBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Q9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0Ci0gIFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VYb3I9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVhvcgotICBQeU51bWJlcl9JbmRleD1weXRob24zMy5QeU51bWJlcl9JbmRleAotICBQeU51bWJlcl9JbnZlcnQ9cHl0aG9uMzMuUHlOdW1iZXJfSW52ZXJ0Ci0gIFB5TnVtYmVyX0xvbmc9cHl0aG9uMzMuUHlOdW1iZXJfTG9uZwotICBQeU51bWJlcl9Mc2hpZnQ9cHl0aG9uMzMuUHlOdW1iZXJfTHNoaWZ0Ci0gIFB5TnVtYmVyX011bHRpcGx5PXB5dGhvbjMzLlB5TnVtYmVyX011bHRpcGx5Ci0gIFB5TnVtYmVyX05lZ2F0aXZlPXB5dGhvbjMzLlB5TnVtYmVyX05lZ2F0aXZlCi0gIFB5TnVtYmVyX09yPXB5dGhvbjMzLlB5TnVtYmVyX09yCi0gIFB5TnVtYmVyX1Bvc2l0aXZlPXB5dGhvbjMzLlB5TnVtYmVyX1Bvc2l0aXZlCi0gIFB5TnVtYmVyX1Bvd2VyPXB5dGhvbjMzLlB5TnVtYmVyX1Bvd2VyCi0gIFB5TnVtYmVyX1JlbWFpbmRlcj1weXRob24zMy5QeU51bWJlcl9SZW1haW5kZXIKLSAgUHlOdW1iZXJfUnNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX1JzaGlmdAotICBQeU51bWJlcl9TdWJ0cmFjdD1weXRob24zMy5QeU51bWJlcl9TdWJ0cmFjdAotICBQeU51bWJlcl9Ub0Jhc2U9cHl0aG9uMzMuUHlOdW1iZXJfVG9CYXNlCi0gIFB5TnVtYmVyX1RydWVEaXZpZGU9cHl0aG9uMzMuUHlOdW1iZXJfVHJ1ZURpdmlkZQotICBQeU51bWJlcl9Yb3I9cHl0aG9uMzMuUHlOdW1iZXJfWG9yCi0gIFB5T1NfQWZ0ZXJGb3JrPXB5dGhvbjMzLlB5T1NfQWZ0ZXJGb3JrCi0gIFB5T1NfSW5pdEludGVycnVwdHM9cHl0aG9uMzMuUHlPU19Jbml0SW50ZXJydXB0cwotICBQeU9TX0lucHV0SG9vaz1weXRob24zMy5QeU9TX0lucHV0SG9vayBEQVRBCi0gIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQ9cHl0aG9uMzMuUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAotICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyPXB5dGhvbjMzLlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgREFUQQotICBQeU9TX2RvdWJsZV90b19zdHJpbmc9cHl0aG9uMzMuUHlPU19kb3VibGVfdG9fc3RyaW5nCi0gIFB5T1NfZ2V0c2lnPXB5dGhvbjMzLlB5T1NfZ2V0c2lnCi0gIFB5T1NfbXlzdHJpY21wPXB5dGhvbjMzLlB5T1NfbXlzdHJpY21wCi0gIFB5T1NfbXlzdHJuaWNtcD1weXRob24zMy5QeU9TX215c3RybmljbXAKLSAgUHlPU19zZXRzaWc9cHl0aG9uMzMuUHlPU19zZXRzaWcKLSAgUHlPU19zbnByaW50Zj1weXRob24zMy5QeU9TX3NucHJpbnRmCi0gIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZT1weXRob24zMy5QeU9TX3N0cmluZ190b19kb3VibGUKLSAgUHlPU19zdHJ0b2w9cHl0aG9uMzMuUHlPU19zdHJ0b2wKLSAgUHlPU19zdHJ0b3VsPXB5dGhvbjMzLlB5T1Nfc3RydG91bAotICBQeU9TX3ZzbnByaW50Zj1weXRob24zMy5QeU9TX3ZzbnByaW50ZgotICBQeU9iamVjdF9BU0NJST1weXRob24zMy5QeU9iamVjdF9BU0NJSQotICBQeU9iamVjdF9Bc0NoYXJCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNDaGFyQnVmZmVyCi0gIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I9cHl0aG9uMzMuUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcgotICBQeU9iamVjdF9Bc1JlYWRCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNSZWFkQnVmZmVyCi0gIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgotICBQeU9iamVjdF9CeXRlcz1weXRob24zMy5QeU9iamVjdF9CeXRlcwotICBQeU9iamVjdF9DYWxsPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGwKLSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxGdW5jdGlvbgotICBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKLSAgUHlPYmplY3RfQ2FsbE1ldGhvZD1weXRob24zMy5QeU9iamVjdF9DYWxsTWV0aG9kCi0gIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCi0gIFB5T2JqZWN0X0NhbGxPYmplY3Q9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbE9iamVjdAotICBQeU9iamVjdF9DaGVja1JlYWRCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyCi0gIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnM9cHl0aG9uMzMuUHlPYmplY3RfQ2xlYXJXZWFrUmVmcwotICBQeU9iamVjdF9EZWxJdGVtPXB5dGhvbjMzLlB5T2JqZWN0X0RlbEl0ZW0KLSAgUHlPYmplY3RfRGVsSXRlbVN0cmluZz1weXRob24zMy5QeU9iamVjdF9EZWxJdGVtU3RyaW5nCi0gIFB5T2JqZWN0X0Rpcj1weXRob24zMy5QeU9iamVjdF9EaXIKLSAgUHlPYmplY3RfRm9ybWF0PXB5dGhvbjMzLlB5T2JqZWN0X0Zvcm1hdAotICBQeU9iamVjdF9GcmVlPXB5dGhvbjMzLlB5T2JqZWN0X0ZyZWUKLSAgUHlPYmplY3RfR0NfRGVsPXB5dGhvbjMzLlB5T2JqZWN0X0dDX0RlbAotICBQeU9iamVjdF9HQ19UcmFjaz1weXRob24zMy5QeU9iamVjdF9HQ19UcmFjawotICBQeU9iamVjdF9HQ19VblRyYWNrPXB5dGhvbjMzLlB5T2JqZWN0X0dDX1VuVHJhY2sKLSAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2VuZXJpY0dldEF0dHIKLSAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKLSAgUHlPYmplY3RfR2V0QXR0cj1weXRob24zMy5QeU9iamVjdF9HZXRBdHRyCi0gIFB5T2JqZWN0X0dldEF0dHJTdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfR2V0QXR0clN0cmluZwotICBQeU9iamVjdF9HZXRJdGVtPXB5dGhvbjMzLlB5T2JqZWN0X0dldEl0ZW0KLSAgUHlPYmplY3RfR2V0SXRlcj1weXRob24zMy5QeU9iamVjdF9HZXRJdGVyCi0gIFB5T2JqZWN0X0hhc0F0dHI9cHl0aG9uMzMuUHlPYmplY3RfSGFzQXR0cgotICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLSAgUHlPYmplY3RfSGFzaD1weXRob24zMy5QeU9iamVjdF9IYXNoCi0gIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZD1weXRob24zMy5QeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQKLSAgUHlPYmplY3RfSW5pdD1weXRob24zMy5QeU9iamVjdF9Jbml0Ci0gIFB5T2JqZWN0X0luaXRWYXI9cHl0aG9uMzMuUHlPYmplY3RfSW5pdFZhcgotICBQeU9iamVjdF9Jc0luc3RhbmNlPXB5dGhvbjMzLlB5T2JqZWN0X0lzSW5zdGFuY2UKLSAgUHlPYmplY3RfSXNTdWJjbGFzcz1weXRob24zMy5QeU9iamVjdF9Jc1N1YmNsYXNzCi0gIFB5T2JqZWN0X0lzVHJ1ZT1weXRob24zMy5QeU9iamVjdF9Jc1RydWUKLSAgUHlPYmplY3RfTGVuZ3RoPXB5dGhvbjMzLlB5T2JqZWN0X0xlbmd0aAotICBQeU9iamVjdF9NYWxsb2M9cHl0aG9uMzMuUHlPYmplY3RfTWFsbG9jCi0gIFB5T2JqZWN0X05vdD1weXRob24zMy5QeU9iamVjdF9Ob3QKLSAgUHlPYmplY3RfUmVhbGxvYz1weXRob24zMy5QeU9iamVjdF9SZWFsbG9jCi0gIFB5T2JqZWN0X1JlcHI9cHl0aG9uMzMuUHlPYmplY3RfUmVwcgotICBQeU9iamVjdF9SaWNoQ29tcGFyZT1weXRob24zMy5QeU9iamVjdF9SaWNoQ29tcGFyZQotICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2w9cHl0aG9uMzMuUHlPYmplY3RfUmljaENvbXBhcmVCb29sCi0gIFB5T2JqZWN0X1NlbGZJdGVyPXB5dGhvbjMzLlB5T2JqZWN0X1NlbGZJdGVyCi0gIFB5T2JqZWN0X1NldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfU2V0QXR0cgotICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X1NldEF0dHJTdHJpbmcKLSAgUHlPYmplY3RfU2V0SXRlbT1weXRob24zMy5QeU9iamVjdF9TZXRJdGVtCi0gIFB5T2JqZWN0X1NpemU9cHl0aG9uMzMuUHlPYmplY3RfU2l6ZQotICBQeU9iamVjdF9TdHI9cHl0aG9uMzMuUHlPYmplY3RfU3RyCi0gIFB5T2JqZWN0X1R5cGU9cHl0aG9uMzMuUHlPYmplY3RfVHlwZSBEQVRBCi0gIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzPXB5dGhvbjMzLlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCi0gIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3M9cHl0aG9uMzMuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncwotICBQeVByb3BlcnR5X1R5cGU9cHl0aG9uMzMuUHlQcm9wZXJ0eV9UeXBlIERBVEEKLSAgUHlSYW5nZUl0ZXJfVHlwZT1weXRob24zMy5QeVJhbmdlSXRlcl9UeXBlIERBVEEKLSAgUHlSYW5nZV9UeXBlPXB5dGhvbjMzLlB5UmFuZ2VfVHlwZSBEQVRBCi0gIFB5UmV2ZXJzZWRfVHlwZT1weXRob24zMy5QeVJldmVyc2VkX1R5cGUgREFUQQotICBQeVNlcUl0ZXJfTmV3PXB5dGhvbjMzLlB5U2VxSXRlcl9OZXcKLSAgUHlTZXFJdGVyX1R5cGU9cHl0aG9uMzMuUHlTZXFJdGVyX1R5cGUgREFUQQotICBQeVNlcXVlbmNlX0NoZWNrPXB5dGhvbjMzLlB5U2VxdWVuY2VfQ2hlY2sKLSAgUHlTZXF1ZW5jZV9Db25jYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db25jYXQKLSAgUHlTZXF1ZW5jZV9Db250YWlucz1weXRob24zMy5QeVNlcXVlbmNlX0NvbnRhaW5zCi0gIFB5U2VxdWVuY2VfQ291bnQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db3VudAotICBQeVNlcXVlbmNlX0RlbEl0ZW09cHl0aG9uMzMuUHlTZXF1ZW5jZV9EZWxJdGVtCi0gIFB5U2VxdWVuY2VfRGVsU2xpY2U9cHl0aG9uMzMuUHlTZXF1ZW5jZV9EZWxTbGljZQotICBQeVNlcXVlbmNlX0Zhc3Q9cHl0aG9uMzMuUHlTZXF1ZW5jZV9GYXN0Ci0gIFB5U2VxdWVuY2VfR2V0SXRlbT1weXRob24zMy5QeVNlcXVlbmNlX0dldEl0ZW0KLSAgUHlTZXF1ZW5jZV9HZXRTbGljZT1weXRob24zMy5QeVNlcXVlbmNlX0dldFNsaWNlCi0gIFB5U2VxdWVuY2VfSW49cHl0aG9uMzMuUHlTZXF1ZW5jZV9JbgotICBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0Ci0gIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdD1weXRob24zMy5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQKLSAgUHlTZXF1ZW5jZV9JbmRleD1weXRob24zMy5QeVNlcXVlbmNlX0luZGV4Ci0gIFB5U2VxdWVuY2VfTGVuZ3RoPXB5dGhvbjMzLlB5U2VxdWVuY2VfTGVuZ3RoCi0gIFB5U2VxdWVuY2VfTGlzdD1weXRob24zMy5QeVNlcXVlbmNlX0xpc3QKLSAgUHlTZXF1ZW5jZV9SZXBlYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9SZXBlYXQKLSAgUHlTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2V0SXRlbQotICBQeVNlcXVlbmNlX1NldFNsaWNlPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2V0U2xpY2UKLSAgUHlTZXF1ZW5jZV9TaXplPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2l6ZQotICBQeVNlcXVlbmNlX1R1cGxlPXB5dGhvbjMzLlB5U2VxdWVuY2VfVHVwbGUKLSAgUHlTZXRJdGVyX1R5cGU9cHl0aG9uMzMuUHlTZXRJdGVyX1R5cGUgREFUQQotICBQeVNldF9BZGQ9cHl0aG9uMzMuUHlTZXRfQWRkCi0gIFB5U2V0X0NsZWFyPXB5dGhvbjMzLlB5U2V0X0NsZWFyCi0gIFB5U2V0X0NvbnRhaW5zPXB5dGhvbjMzLlB5U2V0X0NvbnRhaW5zCi0gIFB5U2V0X0Rpc2NhcmQ9cHl0aG9uMzMuUHlTZXRfRGlzY2FyZAotICBQeVNldF9OZXc9cHl0aG9uMzMuUHlTZXRfTmV3Ci0gIFB5U2V0X1BvcD1weXRob24zMy5QeVNldF9Qb3AKLSAgUHlTZXRfU2l6ZT1weXRob24zMy5QeVNldF9TaXplCi0gIFB5U2V0X1R5cGU9cHl0aG9uMzMuUHlTZXRfVHlwZSBEQVRBCi0gIFB5U2xpY2VfR2V0SW5kaWNlcz1weXRob24zMy5QeVNsaWNlX0dldEluZGljZXMKLSAgUHlTbGljZV9HZXRJbmRpY2VzRXg9cHl0aG9uMzMuUHlTbGljZV9HZXRJbmRpY2VzRXgKLSAgUHlTbGljZV9OZXc9cHl0aG9uMzMuUHlTbGljZV9OZXcKLSAgUHlTbGljZV9UeXBlPXB5dGhvbjMzLlB5U2xpY2VfVHlwZSBEQVRBCi0gIFB5U29ydFdyYXBwZXJfVHlwZT1weXRob24zMy5QeVNvcnRXcmFwcGVyX1R5cGUgREFUQQotICBQeVN0YXRlX0ZpbmRNb2R1bGU9cHl0aG9uMzMuUHlTdGF0ZV9GaW5kTW9kdWxlCi0gIFB5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfQWRkTW9kdWxlCi0gIFB5U3RhdGVfUmVtb3ZlTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfUmVtb3ZlTW9kdWxlCi0gIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbT1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXc9cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlPXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZQotICBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtCi0gIFB5U3VwZXJfVHlwZT1weXRob24zMy5QeVN1cGVyX1R5cGUgREFUQQotICBQeVN5c19BZGRXYXJuT3B0aW9uPXB5dGhvbjMzLlB5U3lzX0FkZFdhcm5PcHRpb24KLSAgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGU9cHl0aG9uMzMuUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUKLSAgUHlTeXNfRm9ybWF0U3RkZXJyPXB5dGhvbjMzLlB5U3lzX0Zvcm1hdFN0ZGVycgotICBQeVN5c19Gb3JtYXRTdGRvdXQ9cHl0aG9uMzMuUHlTeXNfRm9ybWF0U3Rkb3V0Ci0gIFB5U3lzX0dldE9iamVjdD1weXRob24zMy5QeVN5c19HZXRPYmplY3QKLSAgUHlTeXNfSGFzV2Fybk9wdGlvbnM9cHl0aG9uMzMuUHlTeXNfSGFzV2Fybk9wdGlvbnMKLSAgUHlTeXNfUmVzZXRXYXJuT3B0aW9ucz1weXRob24zMy5QeVN5c19SZXNldFdhcm5PcHRpb25zCi0gIFB5U3lzX1NldEFyZ3Y9cHl0aG9uMzMuUHlTeXNfU2V0QXJndgotICBQeVN5c19TZXRBcmd2RXg9cHl0aG9uMzMuUHlTeXNfU2V0QXJndkV4Ci0gIFB5U3lzX1NldE9iamVjdD1weXRob24zMy5QeVN5c19TZXRPYmplY3QKLSAgUHlTeXNfU2V0UGF0aD1weXRob24zMy5QeVN5c19TZXRQYXRoCi0gIFB5U3lzX1dyaXRlU3RkZXJyPXB5dGhvbjMzLlB5U3lzX1dyaXRlU3RkZXJyCi0gIFB5U3lzX1dyaXRlU3Rkb3V0PXB5dGhvbjMzLlB5U3lzX1dyaXRlU3Rkb3V0Ci0gIFB5VGhyZWFkU3RhdGVfQ2xlYXI9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9DbGVhcgotICBQeVRocmVhZFN0YXRlX0RlbGV0ZT1weXRob24zMy5QeVRocmVhZFN0YXRlX0RlbGV0ZQotICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50Ci0gIFB5VGhyZWFkU3RhdGVfR2V0PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfR2V0Ci0gIFB5VGhyZWFkU3RhdGVfR2V0RGljdD1weXRob24zMy5QeVRocmVhZFN0YXRlX0dldERpY3QKLSAgUHlUaHJlYWRTdGF0ZV9OZXc9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9OZXcKLSAgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yz1weXRob24zMy5QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCi0gIFB5VGhyZWFkU3RhdGVfU3dhcD1weXRob24zMy5QeVRocmVhZFN0YXRlX1N3YXAKLSAgUHlUcmFjZUJhY2tfSGVyZT1weXRob24zMy5QeVRyYWNlQmFja19IZXJlCi0gIFB5VHJhY2VCYWNrX1ByaW50PXB5dGhvbjMzLlB5VHJhY2VCYWNrX1ByaW50Ci0gIFB5VHJhY2VCYWNrX1R5cGU9cHl0aG9uMzMuUHlUcmFjZUJhY2tfVHlwZSBEQVRBCi0gIFB5VHVwbGVJdGVyX1R5cGU9cHl0aG9uMzMuUHlUdXBsZUl0ZXJfVHlwZSBEQVRBCi0gIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdD1weXRob24zMy5QeVR1cGxlX0NsZWFyRnJlZUxpc3QKLSAgUHlUdXBsZV9HZXRJdGVtPXB5dGhvbjMzLlB5VHVwbGVfR2V0SXRlbQotICBQeVR1cGxlX0dldFNsaWNlPXB5dGhvbjMzLlB5VHVwbGVfR2V0U2xpY2UKLSAgUHlUdXBsZV9OZXc9cHl0aG9uMzMuUHlUdXBsZV9OZXcKLSAgUHlUdXBsZV9QYWNrPXB5dGhvbjMzLlB5VHVwbGVfUGFjawotICBQeVR1cGxlX1NldEl0ZW09cHl0aG9uMzMuUHlUdXBsZV9TZXRJdGVtCi0gIFB5VHVwbGVfU2l6ZT1weXRob24zMy5QeVR1cGxlX1NpemUKLSAgUHlUdXBsZV9UeXBlPXB5dGhvbjMzLlB5VHVwbGVfVHlwZSBEQVRBCi0gIFB5VHlwZV9DbGVhckNhY2hlPXB5dGhvbjMzLlB5VHlwZV9DbGVhckNhY2hlCi0gIFB5VHlwZV9Gcm9tU3BlYz1weXRob24zMy5QeVR5cGVfRnJvbVNwZWMKLSAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzPXB5dGhvbjMzLlB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcwotICBQeVR5cGVfR2VuZXJpY0FsbG9jPXB5dGhvbjMzLlB5VHlwZV9HZW5lcmljQWxsb2MKLSAgUHlUeXBlX0dlbmVyaWNOZXc9cHl0aG9uMzMuUHlUeXBlX0dlbmVyaWNOZXcKLSAgUHlUeXBlX0dldEZsYWdzPXB5dGhvbjMzLlB5VHlwZV9HZXRGbGFncwotICBQeVR5cGVfSXNTdWJ0eXBlPXB5dGhvbjMzLlB5VHlwZV9Jc1N1YnR5cGUKLSAgUHlUeXBlX01vZGlmaWVkPXB5dGhvbjMzLlB5VHlwZV9Nb2RpZmllZAotICBQeVR5cGVfUmVhZHk9cHl0aG9uMzMuUHlUeXBlX1JlYWR5Ci0gIFB5VHlwZV9UeXBlPXB5dGhvbjMzLlB5VHlwZV9UeXBlIERBVEEKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZQotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZwotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZUl0ZXJfVHlwZT1weXRob24zMy5QeVVuaWNvZGVJdGVyX1R5cGUgREFUQQotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlX0FwcGVuZD1weXRob24zMy5QeVVuaWNvZGVfQXBwZW5kCi0gIFB5VW5pY29kZV9BcHBlbmRBbmREZWw9cHl0aG9uMzMuUHlVbmljb2RlX0FwcGVuZEFuZERlbAotICBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNBU0NJSVN0cmluZwotICBQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmcKLSAgUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlCi0gIFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdAotICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcKLSAgUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGU9cHl0aG9uMzMuUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGUKLSAgUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0xhdGluMVN0cmluZwotICBQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMTZTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzVVRGMTZTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMzJTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzVVRGMzJTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGOFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNVVEY4U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZwotICBQeVVuaWNvZGVfQXNXaWRlQ2hhcj1weXRob24zMy5QeVVuaWNvZGVfQXNXaWRlQ2hhcgotICBQeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdD1weXRob24zMy5QeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdAotICBQeVVuaWNvZGVfQ29tcGFyZT1weXRob24zMy5QeVVuaWNvZGVfQ29tcGFyZQotICBQeVVuaWNvZGVfQ29uY2F0PXB5dGhvbjMzLlB5VW5pY29kZV9Db25jYXQKLSAgUHlVbmljb2RlX0NvbnRhaW5zPXB5dGhvbjMzLlB5VW5pY29kZV9Db250YWlucwotICBQeVVuaWNvZGVfQ291bnQ9cHl0aG9uMzMuUHlVbmljb2RlX0NvdW50Ci0gIFB5VW5pY29kZV9EZWNvZGU9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZQotICBQeVVuaWNvZGVfRGVjb2RlQVNDSUk9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZUFTQ0lJCi0gIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVDaGFybWFwCi0gIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQ9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZT1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZQotICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVMYXRpbjEKLSAgUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKLSAgUHlVbmljb2RlX0RlY29kZVVURjE2PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEYxNgotICBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVVRGMzI9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjMyCi0gIFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY4PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEY4Ci0gIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZT1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZQotICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXI9cHl0aG9uMzMuUHlVbmljb2RlX0ZTQ29udmVydGVyCi0gIFB5VW5pY29kZV9GU0RlY29kZXI9cHl0aG9uMzMuUHlVbmljb2RlX0ZTRGVjb2RlcgotICBQeVVuaWNvZGVfRmluZD1weXRob24zMy5QeVVuaWNvZGVfRmluZAotICBQeVVuaWNvZGVfRm9ybWF0PXB5dGhvbjMzLlB5VW5pY29kZV9Gb3JtYXQKLSAgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdD1weXRob24zMy5QeVVuaWNvZGVfRnJvbUZvcm1hdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdFY9cHl0aG9uMzMuUHlVbmljb2RlX0Zyb21Gb3JtYXRWCi0gIFB5VW5pY29kZV9Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tT2JqZWN0Ci0gIFB5VW5pY29kZV9Gcm9tT3JkaW5hbD1weXRob24zMy5QeVVuaWNvZGVfRnJvbU9yZGluYWwKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0Zyb21TdHJpbmcKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyPXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tV2lkZUNoYXIKLSAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nCi0gIFB5VW5pY29kZV9HZXRTaXplPXB5dGhvbjMzLlB5VW5pY29kZV9HZXRTaXplCi0gIFB5VW5pY29kZV9Jc0lkZW50aWZpZXI9cHl0aG9uMzMuUHlVbmljb2RlX0lzSWRlbnRpZmllcgotICBQeVVuaWNvZGVfSm9pbj1weXRob24zMy5QeVVuaWNvZGVfSm9pbgotICBQeVVuaWNvZGVfUGFydGl0aW9uPXB5dGhvbjMzLlB5VW5pY29kZV9QYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JQYXJ0aXRpb249cHl0aG9uMzMuUHlVbmljb2RlX1JQYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JTcGxpdD1weXRob24zMy5QeVVuaWNvZGVfUlNwbGl0Ci0gIFB5VW5pY29kZV9SZXBsYWNlPXB5dGhvbjMzLlB5VW5pY29kZV9SZXBsYWNlCi0gIFB5VW5pY29kZV9SZXNpemU9cHl0aG9uMzMuUHlVbmljb2RlX1Jlc2l6ZQotICBQeVVuaWNvZGVfUmljaENvbXBhcmU9cHl0aG9uMzMuUHlVbmljb2RlX1JpY2hDb21wYXJlCi0gIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZwotICBQeVVuaWNvZGVfU3BsaXQ9cHl0aG9uMzMuUHlVbmljb2RlX1NwbGl0Ci0gIFB5VW5pY29kZV9TcGxpdGxpbmVzPXB5dGhvbjMzLlB5VW5pY29kZV9TcGxpdGxpbmVzCi0gIFB5VW5pY29kZV9UYWlsbWF0Y2g9cHl0aG9uMzMuUHlVbmljb2RlX1RhaWxtYXRjaAotICBQeVVuaWNvZGVfVHJhbnNsYXRlPXB5dGhvbjMzLlB5VW5pY29kZV9UcmFuc2xhdGUKLSAgUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXA9cHl0aG9uMzMuUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKLSAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0RlY29kZVVURjc9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjcKLSAgUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsCi0gIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQ9cHl0aG9uMzMuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZwotICBQeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWw9cHl0aG9uMzMuUHlVbmljb2RlX0ludGVybkltbW9ydGFsCi0gIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlPXB5dGhvbjMzLlB5VW5pY29kZV9JbnRlcm5JblBsYWNlCi0gIFB5VW5pY29kZV9UeXBlPXB5dGhvbjMzLlB5VW5pY29kZV9UeXBlIERBVEEKLSAgUHlXZWFrcmVmX0dldE9iamVjdD1weXRob24zMy5QeVdlYWtyZWZfR2V0T2JqZWN0IERBVEEKLSAgUHlXZWFrcmVmX05ld1Byb3h5PXB5dGhvbjMzLlB5V2Vha3JlZl9OZXdQcm94eQotICBQeVdlYWtyZWZfTmV3UmVmPXB5dGhvbjMzLlB5V2Vha3JlZl9OZXdSZWYKLSAgUHlXcmFwcGVyRGVzY3JfVHlwZT1weXRob24zMy5QeVdyYXBwZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlXcmFwcGVyX05ldz1weXRob24zMy5QeVdyYXBwZXJfTmV3Ci0gIFB5WmlwX1R5cGU9cHl0aG9uMzMuUHlaaXBfVHlwZSBEQVRBCi0gIFB5X0FkZFBlbmRpbmdDYWxsPXB5dGhvbjMzLlB5X0FkZFBlbmRpbmdDYWxsCi0gIFB5X0F0RXhpdD1weXRob24zMy5QeV9BdEV4aXQKLSAgUHlfQnVpbGRWYWx1ZT1weXRob24zMy5QeV9CdWlsZFZhbHVlCi0gIFB5X0NvbXBpbGVTdHJpbmc9cHl0aG9uMzMuUHlfQ29tcGlsZVN0cmluZwotICBQeV9EZWNSZWY9cHl0aG9uMzMuUHlfRGVjUmVmCi0gIFB5X0VuZEludGVycHJldGVyPXB5dGhvbjMzLlB5X0VuZEludGVycHJldGVyCi0gIFB5X0V4aXQ9cHl0aG9uMzMuUHlfRXhpdAotICBQeV9GYXRhbEVycm9yPXB5dGhvbjMzLlB5X0ZhdGFsRXJyb3IKLSAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfRmluYWxpemU9cHl0aG9uMzMuUHlfRmluYWxpemUKLSAgUHlfR2V0QnVpbGRJbmZvPXB5dGhvbjMzLlB5X0dldEJ1aWxkSW5mbwotICBQeV9HZXRDb21waWxlcj1weXRob24zMy5QeV9HZXRDb21waWxlcgotICBQeV9HZXRDb3B5cmlnaHQ9cHl0aG9uMzMuUHlfR2V0Q29weXJpZ2h0Ci0gIFB5X0dldEV4ZWNQcmVmaXg9cHl0aG9uMzMuUHlfR2V0RXhlY1ByZWZpeAotICBQeV9HZXRQYXRoPXB5dGhvbjMzLlB5X0dldFBhdGgKLSAgUHlfR2V0UGxhdGZvcm09cHl0aG9uMzMuUHlfR2V0UGxhdGZvcm0KLSAgUHlfR2V0UHJlZml4PXB5dGhvbjMzLlB5X0dldFByZWZpeAotICBQeV9HZXRQcm9ncmFtRnVsbFBhdGg9cHl0aG9uMzMuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCi0gIFB5X0dldFByb2dyYW1OYW1lPXB5dGhvbjMzLlB5X0dldFByb2dyYW1OYW1lCi0gIFB5X0dldFB5dGhvbkhvbWU9cHl0aG9uMzMuUHlfR2V0UHl0aG9uSG9tZQotICBQeV9HZXRSZWN1cnNpb25MaW1pdD1weXRob24zMy5QeV9HZXRSZWN1cnNpb25MaW1pdAotICBQeV9HZXRWZXJzaW9uPXB5dGhvbjMzLlB5X0dldFZlcnNpb24KLSAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfSW5jUmVmPXB5dGhvbjMzLlB5X0luY1JlZgotICBQeV9Jbml0aWFsaXplPXB5dGhvbjMzLlB5X0luaXRpYWxpemUKLSAgUHlfSW5pdGlhbGl6ZUV4PXB5dGhvbjMzLlB5X0luaXRpYWxpemVFeAotICBQeV9Jc0luaXRpYWxpemVkPXB5dGhvbjMzLlB5X0lzSW5pdGlhbGl6ZWQKLSAgUHlfTWFpbj1weXRob24zMy5QeV9NYWluCi0gIFB5X01ha2VQZW5kaW5nQ2FsbHM9cHl0aG9uMzMuUHlfTWFrZVBlbmRpbmdDYWxscwotICBQeV9OZXdJbnRlcnByZXRlcj1weXRob24zMy5QeV9OZXdJbnRlcnByZXRlcgotICBQeV9SZXByRW50ZXI9cHl0aG9uMzMuUHlfUmVwckVudGVyCi0gIFB5X1JlcHJMZWF2ZT1weXRob24zMy5QeV9SZXByTGVhdmUKLSAgUHlfU2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzMuUHlfU2V0UHJvZ3JhbU5hbWUKLSAgUHlfU2V0UHl0aG9uSG9tZT1weXRob24zMy5QeV9TZXRQeXRob25Ib21lCi0gIFB5X1NldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjMzLlB5X1NldFJlY3Vyc2lvbkxpbWl0Ci0gIFB5X1N5bXRhYmxlU3RyaW5nPXB5dGhvbjMzLlB5X1N5bXRhYmxlU3RyaW5nCi0gIFB5X1ZhQnVpbGRWYWx1ZT1weXRob24zMy5QeV9WYUJ1aWxkVmFsdWUKLSAgX1B5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zMy5fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQ9cHl0aG9uMzMuX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVAotICBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVD1weXRob24zMy5fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAotICBfUHlPYmplY3RfR0NfTWFsbG9jPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19NYWxsb2MKLSAgX1B5T2JqZWN0X0dDX05ldz1weXRob24zMy5fUHlPYmplY3RfR0NfTmV3Ci0gIF9QeU9iamVjdF9HQ19OZXdWYXI9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX05ld1ZhcgotICBfUHlPYmplY3RfR0NfUmVzaXplPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19SZXNpemUKLSAgX1B5T2JqZWN0X05ldz1weXRob24zMy5fUHlPYmplY3RfTmV3Ci0gIF9QeU9iamVjdF9OZXdWYXI9cHl0aG9uMzMuX1B5T2JqZWN0X05ld1ZhcgotICBfUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzMuX1B5U3RhdGVfQWRkTW9kdWxlCi0gIF9QeVRocmVhZFN0YXRlX0luaXQ9cHl0aG9uMzMuX1B5VGhyZWFkU3RhdGVfSW5pdAotICBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYz1weXRob24zMy5fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYwotICBfUHlUcmFzaF9kZWxldGVfbGF0ZXI9cHl0aG9uMzMuX1B5VHJhc2hfZGVsZXRlX2xhdGVyIERBVEEKLSAgX1B5VHJhc2hfZGVsZXRlX25lc3Rpbmc9cHl0aG9uMzMuX1B5VHJhc2hfZGVsZXRlX25lc3RpbmcgREFUQQotICBfUHlUcmFzaF9kZXBvc2l0X29iamVjdD1weXRob24zMy5fUHlUcmFzaF9kZXBvc2l0X29iamVjdAotICBfUHlUcmFzaF9kZXN0cm95X2NoYWluPXB5dGhvbjMzLl9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KLSAgX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZT1weXRob24zMy5fUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIERBVEEKLSAgX1B5V2Vha3JlZl9Qcm94eVR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9Qcm94eVR5cGUgREFUQQotICBfUHlXZWFrcmVmX1JlZlR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9SZWZUeXBlIERBVEEKLSAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKLSAgX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQ9cHl0aG9uMzMuX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgREFUQQotICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsPXB5dGhvbjMzLl9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwKLSAgX1B5X0RlYWxsb2M9cHl0aG9uMzMuX1B5X0RlYWxsb2MKLSAgX1B5X0VsbGlwc2lzT2JqZWN0PXB5dGhvbjMzLl9QeV9FbGxpcHNpc09iamVjdCBEQVRBCi0gIF9QeV9GYWxzZVN0cnVjdD1weXRob24zMy5fUHlfRmFsc2VTdHJ1Y3QgREFUQQotICBfUHlfTm9uZVN0cnVjdD1weXRob24zMy5fUHlfTm9uZVN0cnVjdCBEQVRBCi0gIF9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdD1weXRob24zMy5fUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QgREFUQQotICBfUHlfU3dhcHBlZE9wPXB5dGhvbjMzLl9QeV9Td2FwcGVkT3AgREFUQQotICBfUHlfVHJ1ZVN0cnVjdD1weXRob24zMy5fUHlfVHJ1ZVN0cnVjdCBEQVRBCi0gIF9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAotICBfUHlBcmdfUGFyc2VfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotICBfUHlBcmdfVmFQYXJzZV9TaXplVD1weXRob24zMy5fUHlBcmdfVmFQYXJzZV9TaXplVAotICBfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCi0gIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9CdWlsZFZhbHVlX1NpemVUCisgIFB5QXJnX1BhcnNlPXB5dGhvbjM0LlB5QXJnX1BhcnNlCisgIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZQorICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCisgIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjM0LlB5QXJnX1VucGFja1R1cGxlCisgIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzQuUHlBcmdfVmFQYXJzZQorICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zNC5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzQuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCisgIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjM0LlB5QmFzZU9iamVjdF9UeXBlIERBVEEKKyAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjM0LlB5Qm9vbF9Gcm9tTG9uZworICBQeUJvb2xfVHlwZT1weXRob24zNC5QeUJvb2xfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjM0LlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzQuUHlCeXRlQXJyYXlfQXNTdHJpbmcKKyAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0NvbmNhdAorICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKKyAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1Jlc2l6ZQorICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1NpemUKKyAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zNC5QeUJ5dGVBcnJheV9UeXBlIERBVEEKKyAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zNC5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zNC5QeUJ5dGVzX0FzU3RyaW5nCisgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0CisgIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCisgIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjM0LlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCisgIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXQKKyAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXRWCisgIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zNC5QeUJ5dGVzX0Zyb21PYmplY3QKKyAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZworICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlc19SZXByPXB5dGhvbjM0LlB5Qnl0ZXNfUmVwcgorICBQeUJ5dGVzX1NpemU9cHl0aG9uMzQuUHlCeXRlc19TaXplCisgIFB5Qnl0ZXNfVHlwZT1weXRob24zNC5QeUJ5dGVzX1R5cGUgREFUQQorICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0NhbGwKKyAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0CisgIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZsYWdzCisgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCisgIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzQuUHlDRnVuY3Rpb25fR2V0U2VsZgorICBQeUNGdW5jdGlvbl9OZXc9cHl0aG9uMzQuUHlDRnVuY3Rpb25fTmV3CisgIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX05ld0V4CisgIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzQuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCisgIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjM0LlB5Q2FsbEl0ZXJfTmV3CisgIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zNC5QeUNhbGxJdGVyX1R5cGUgREFUQQorICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjM0LlB5Q2FsbGFibGVfQ2hlY2sKKyAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzQuUHlDYXBzdWxlX0dldENvbnRleHQKKyAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzQuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzQuUHlDYXBzdWxlX0dldE5hbWUKKyAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzQuUHlDYXBzdWxlX0dldFBvaW50ZXIKKyAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zNC5QeUNhcHN1bGVfSW1wb3J0CisgIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjM0LlB5Q2Fwc3VsZV9Jc1ZhbGlkCisgIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzQuUHlDYXBzdWxlX05ldworICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zNC5QeUNhcHN1bGVfU2V0Q29udGV4dAorICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zNC5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgorICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zNC5QeUNhcHN1bGVfU2V0TmFtZQorICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zNC5QeUNhcHN1bGVfU2V0UG9pbnRlcgorICBQeUNhcHN1bGVfVHlwZT1weXRob24zNC5QeUNhcHN1bGVfVHlwZSBEQVRBCisgIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjM0LlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycworICBQeUNvZGVjX0RlY29kZT1weXRob24zNC5QeUNvZGVjX0RlY29kZQorICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19EZWNvZGVyCisgIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjM0LlB5Q29kZWNfRW5jb2RlCisgIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zNC5QeUNvZGVjX0VuY29kZXIKKyAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19JZ25vcmVFcnJvcnMKKyAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKKyAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKKyAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjM0LlB5Q29kZWNfS25vd25FbmNvZGluZworICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjM0LlB5Q29kZWNfTG9va3VwRXJyb3IKKyAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyCisgIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKKyAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfUmVwbGFjZUVycm9ycworICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVJlYWRlcgorICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVdyaXRlcgorICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zNC5QeUNvZGVjX1N0cmljdEVycm9ycworICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKKyAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjM0LlB5Q29tcGxleF9Gcm9tRG91YmxlcworICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjM0LlB5Q29tcGxleF9JbWFnQXNEb3VibGUKKyAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zNC5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCisgIFB5Q29tcGxleF9UeXBlPXB5dGhvbjM0LlB5Q29tcGxleF9UeXBlIERBVEEKKyAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zNC5QeURlc2NyX05ld0NsYXNzTWV0aG9kCisgIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjM0LlB5RGVzY3JfTmV3R2V0U2V0CisgIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWVtYmVyCisgIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWV0aG9kCisgIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zNC5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQorICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zNC5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCisgIFB5RGljdEtleXNfVHlwZT1weXRob24zNC5QeURpY3RLZXlzX1R5cGUgREFUQQorICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzQuUHlEaWN0UHJveHlfTmV3CisgIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzQuUHlEaWN0UHJveHlfVHlwZSBEQVRBCisgIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjM0LlB5RGljdFZhbHVlc19UeXBlIERBVEEKKyAgUHlEaWN0X0NsZWFyPXB5dGhvbjM0LlB5RGljdF9DbGVhcgorICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzQuUHlEaWN0X0NvbnRhaW5zCisgIFB5RGljdF9Db3B5PXB5dGhvbjM0LlB5RGljdF9Db3B5CisgIFB5RGljdF9EZWxJdGVtPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtCisgIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtCisgIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCisgIFB5RGljdF9JdGVtcz1weXRob24zNC5QeURpY3RfSXRlbXMKKyAgUHlEaWN0X0tleXM9cHl0aG9uMzQuUHlEaWN0X0tleXMKKyAgUHlEaWN0X01lcmdlPXB5dGhvbjM0LlB5RGljdF9NZXJnZQorICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zNC5QeURpY3RfTWVyZ2VGcm9tU2VxMgorICBQeURpY3RfTmV3PXB5dGhvbjM0LlB5RGljdF9OZXcKKyAgUHlEaWN0X05leHQ9cHl0aG9uMzQuUHlEaWN0X05leHQKKyAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW0KKyAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW1TdHJpbmcKKyAgUHlEaWN0X1NpemU9cHl0aG9uMzQuUHlEaWN0X1NpemUKKyAgUHlEaWN0X1R5cGU9cHl0aG9uMzQuUHlEaWN0X1R5cGUgREFUQQorICBQeURpY3RfVXBkYXRlPXB5dGhvbjM0LlB5RGljdF9VcGRhdGUKKyAgUHlEaWN0X1ZhbHVlcz1weXRob24zNC5QeURpY3RfVmFsdWVzCisgIFB5RWxsaXBzaXNfVHlwZT1weXRob24zNC5QeUVsbGlwc2lzX1R5cGUgREFUQQorICBQeUVudW1fVHlwZT1weXRob24zNC5QeUVudW1fVHlwZSBEQVRBCisgIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjM0LlB5RXJyX0JhZEFyZ3VtZW50CisgIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5QeUVycl9CYWRJbnRlcm5hbENhbGwKKyAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjM0LlB5RXJyX0NoZWNrU2lnbmFscworICBQeUVycl9DbGVhcj1weXRob24zNC5QeUVycl9DbGVhcgorICBQeUVycl9EaXNwbGF5PXB5dGhvbjM0LlB5RXJyX0Rpc3BsYXkKKyAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNC5QeUVycl9FeGNlcHRpb25NYXRjaGVzCisgIFB5RXJyX0ZldGNoPXB5dGhvbjM0LlB5RXJyX0ZldGNoCisgIFB5RXJyX0Zvcm1hdD1weXRob24zNC5QeUVycl9Gb3JtYXQKKyAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjM0LlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcworICBQeUVycl9OZXdFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uCisgIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M9cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYworICBQeUVycl9Ob01lbW9yeT1weXRob24zNC5QeUVycl9Ob01lbW9yeQorICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCisgIFB5RXJyX09jY3VycmVkPXB5dGhvbjM0LlB5RXJyX09jY3VycmVkCisgIFB5RXJyX1ByaW50PXB5dGhvbjM0LlB5RXJyX1ByaW50CisgIFB5RXJyX1ByaW50RXg9cHl0aG9uMzQuUHlFcnJfUHJpbnRFeAorICBQeUVycl9Qcm9ncmFtVGV4dD1weXRob24zNC5QeUVycl9Qcm9ncmFtVGV4dAorICBQeUVycl9SZXN0b3JlPXB5dGhvbjM0LlB5RXJyX1Jlc3RvcmUKKyAgUHlFcnJfU2V0RnJvbUVycm5vPXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJubworICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWU9cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCisgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKKyAgUHlFcnJfU2V0SW50ZXJydXB0PXB5dGhvbjM0LlB5RXJyX1NldEludGVycnVwdAorICBQeUVycl9TZXROb25lPXB5dGhvbjM0LlB5RXJyX1NldE5vbmUKKyAgUHlFcnJfU2V0T2JqZWN0PXB5dGhvbjM0LlB5RXJyX1NldE9iamVjdAorICBQeUVycl9TZXRTdHJpbmc9cHl0aG9uMzQuUHlFcnJfU2V0U3RyaW5nCisgIFB5RXJyX1N5bnRheExvY2F0aW9uPXB5dGhvbjM0LlB5RXJyX1N5bnRheExvY2F0aW9uCisgIFB5RXJyX1dhcm5FeD1weXRob24zNC5QeUVycl9XYXJuRXgKKyAgUHlFcnJfV2FybkV4cGxpY2l0PXB5dGhvbjM0LlB5RXJyX1dhcm5FeHBsaWNpdAorICBQeUVycl9XYXJuRm9ybWF0PXB5dGhvbjM0LlB5RXJyX1dhcm5Gb3JtYXQKKyAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlPXB5dGhvbjM0LlB5RXJyX1dyaXRlVW5yYWlzYWJsZQorICBQeUV2YWxfQWNxdWlyZUxvY2s9cHl0aG9uMzQuUHlFdmFsX0FjcXVpcmVMb2NrCisgIFB5RXZhbF9BY3F1aXJlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9BY3F1aXJlVGhyZWFkCisgIFB5RXZhbF9DYWxsRnVuY3Rpb249cHl0aG9uMzQuUHlFdmFsX0NhbGxGdW5jdGlvbgorICBQeUV2YWxfQ2FsbE1ldGhvZD1weXRob24zNC5QeUV2YWxfQ2FsbE1ldGhvZAorICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3Jkcz1weXRob24zNC5QeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcworICBQeUV2YWxfRXZhbENvZGU9cHl0aG9uMzQuUHlFdmFsX0V2YWxDb2RlCisgIFB5RXZhbF9FdmFsQ29kZUV4PXB5dGhvbjM0LlB5RXZhbF9FdmFsQ29kZUV4CisgIFB5RXZhbF9FdmFsRnJhbWU9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZQorICBQeUV2YWxfRXZhbEZyYW1lRXg9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZUV4CisgIFB5RXZhbF9HZXRCdWlsdGlucz1weXRob24zNC5QeUV2YWxfR2V0QnVpbHRpbnMKKyAgUHlFdmFsX0dldENhbGxTdGF0cz1weXRob24zNC5QeUV2YWxfR2V0Q2FsbFN0YXRzCisgIFB5RXZhbF9HZXRGcmFtZT1weXRob24zNC5QeUV2YWxfR2V0RnJhbWUKKyAgUHlFdmFsX0dldEZ1bmNEZXNjPXB5dGhvbjM0LlB5RXZhbF9HZXRGdW5jRGVzYworICBQeUV2YWxfR2V0RnVuY05hbWU9cHl0aG9uMzQuUHlFdmFsX0dldEZ1bmNOYW1lCisgIFB5RXZhbF9HZXRHbG9iYWxzPXB5dGhvbjM0LlB5RXZhbF9HZXRHbG9iYWxzCisgIFB5RXZhbF9HZXRMb2NhbHM9cHl0aG9uMzQuUHlFdmFsX0dldExvY2FscworICBQeUV2YWxfSW5pdFRocmVhZHM9cHl0aG9uMzQuUHlFdmFsX0luaXRUaHJlYWRzCisgIFB5RXZhbF9SZUluaXRUaHJlYWRzPXB5dGhvbjM0LlB5RXZhbF9SZUluaXRUaHJlYWRzCisgIFB5RXZhbF9SZWxlYXNlTG9jaz1weXRob24zNC5QeUV2YWxfUmVsZWFzZUxvY2sKKyAgUHlFdmFsX1JlbGVhc2VUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1JlbGVhc2VUaHJlYWQKKyAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1Jlc3RvcmVUaHJlYWQKKyAgUHlFdmFsX1NhdmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1NhdmVUaHJlYWQKKyAgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZD1weXRob24zNC5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCisgIFB5RXhjX0FyaXRobWV0aWNFcnJvcj1weXRob24zNC5QeUV4Y19Bcml0aG1ldGljRXJyb3IgREFUQQorICBQeUV4Y19Bc3NlcnRpb25FcnJvcj1weXRob24zNC5QeUV4Y19Bc3NlcnRpb25FcnJvciBEQVRBCisgIFB5RXhjX0F0dHJpYnV0ZUVycm9yPXB5dGhvbjM0LlB5RXhjX0F0dHJpYnV0ZUVycm9yIERBVEEKKyAgUHlFeGNfQmFzZUV4Y2VwdGlvbj1weXRob24zNC5QeUV4Y19CYXNlRXhjZXB0aW9uIERBVEEKKyAgUHlFeGNfQnVmZmVyRXJyb3I9cHl0aG9uMzQuUHlFeGNfQnVmZmVyRXJyb3IgREFUQQorICBQeUV4Y19CeXRlc1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfQnl0ZXNXYXJuaW5nIERBVEEKKyAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCisgIFB5RXhjX0VPRkVycm9yPXB5dGhvbjM0LlB5RXhjX0VPRkVycm9yIERBVEEKKyAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcj1weXRob24zNC5QeUV4Y19FbnZpcm9ubWVudEVycm9yIERBVEEKKyAgUHlFeGNfRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXhjX0V4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcj1weXRob24zNC5QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IgREFUQQorICBQeUV4Y19GdXR1cmVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0Z1dHVyZVdhcm5pbmcgREFUQQorICBQeUV4Y19HZW5lcmF0b3JFeGl0PXB5dGhvbjM0LlB5RXhjX0dlbmVyYXRvckV4aXQgREFUQQorICBQeUV4Y19JT0Vycm9yPXB5dGhvbjM0LlB5RXhjX0lPRXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRFcnJvcj1weXRob24zNC5QeUV4Y19JbXBvcnRFcnJvciBEQVRBCisgIFB5RXhjX0ltcG9ydFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfSW1wb3J0V2FybmluZyBEQVRBCisgIFB5RXhjX0luZGVudGF0aW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZW50YXRpb25FcnJvciBEQVRBCisgIFB5RXhjX0luZGV4RXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZXhFcnJvciBEQVRBCisgIFB5RXhjX0tleUVycm9yPXB5dGhvbjM0LlB5RXhjX0tleUVycm9yIERBVEEKKyAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQ9cHl0aG9uMzQuUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgREFUQQorICBQeUV4Y19Mb29rdXBFcnJvcj1weXRob24zNC5QeUV4Y19Mb29rdXBFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9yPXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9yIERBVEEKKyAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0PXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9ySW5zdCBEQVRBCisgIFB5RXhjX05hbWVFcnJvcj1weXRob24zNC5QeUV4Y19OYW1lRXJyb3IgREFUQQorICBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yPXB5dGhvbjM0LlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IgREFUQQorICBQeUV4Y19PU0Vycm9yPXB5dGhvbjM0LlB5RXhjX09TRXJyb3IgREFUQQorICBQeUV4Y19PdmVyZmxvd0Vycm9yPXB5dGhvbjM0LlB5RXhjX092ZXJmbG93RXJyb3IgREFUQQorICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3Q9cHl0aG9uMzQuUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0IERBVEEKKyAgUHlFeGNfUmVmZXJlbmNlRXJyb3I9cHl0aG9uMzQuUHlFeGNfUmVmZXJlbmNlRXJyb3IgREFUQQorICBQeUV4Y19SdW50aW1lRXJyb3I9cHl0aG9uMzQuUHlFeGNfUnVudGltZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfUnVudGltZVdhcm5pbmcgREFUQQorICBQeUV4Y19TdG9wSXRlcmF0aW9uPXB5dGhvbjM0LlB5RXhjX1N0b3BJdGVyYXRpb24gREFUQQorICBQeUV4Y19TeW50YXhFcnJvcj1weXRob24zNC5QeUV4Y19TeW50YXhFcnJvciBEQVRBCisgIFB5RXhjX1N5bnRheFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfU3ludGF4V2FybmluZyBEQVRBCisgIFB5RXhjX1N5c3RlbUVycm9yPXB5dGhvbjM0LlB5RXhjX1N5c3RlbUVycm9yIERBVEEKKyAgUHlFeGNfU3lzdGVtRXhpdD1weXRob24zNC5QeUV4Y19TeXN0ZW1FeGl0IERBVEEKKyAgUHlFeGNfVGFiRXJyb3I9cHl0aG9uMzQuUHlFeGNfVGFiRXJyb3IgREFUQQorICBQeUV4Y19UeXBlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVHlwZUVycm9yIERBVEEKKyAgUHlFeGNfVW5ib3VuZExvY2FsRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZURlY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVdhcm5pbmcgREFUQQorICBQeUV4Y19Vc2VyV2FybmluZz1weXRob24zNC5QeUV4Y19Vc2VyV2FybmluZyBEQVRBCisgIFB5RXhjX1ZhbHVlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVmFsdWVFcnJvciBEQVRBCisgIFB5RXhjX1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfV2FybmluZyBEQVRBCisgIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yPXB5dGhvbjM0LlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIERBVEEKKyAgUHlFeGNlcHRpb25fR2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0Q2F1c2UKKyAgUHlFeGNlcHRpb25fR2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0CisgIFB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2sKKyAgUHlFeGNlcHRpb25fU2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0Q2F1c2UKKyAgUHlFeGNlcHRpb25fU2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0CisgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sKKyAgUHlGaWxlX0Zyb21GZD1weXRob24zNC5QeUZpbGVfRnJvbUZkCisgIFB5RmlsZV9HZXRMaW5lPXB5dGhvbjM0LlB5RmlsZV9HZXRMaW5lCisgIFB5RmlsZV9Xcml0ZU9iamVjdD1weXRob24zNC5QeUZpbGVfV3JpdGVPYmplY3QKKyAgUHlGaWxlX1dyaXRlU3RyaW5nPXB5dGhvbjM0LlB5RmlsZV9Xcml0ZVN0cmluZworICBQeUZpbHRlcl9UeXBlPXB5dGhvbjM0LlB5RmlsdGVyX1R5cGUgREFUQQorICBQeUZsb2F0X0FzRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfQXNEb3VibGUKKyAgUHlGbG9hdF9Gcm9tRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfRnJvbURvdWJsZQorICBQeUZsb2F0X0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlGbG9hdF9Gcm9tU3RyaW5nCisgIFB5RmxvYXRfR2V0SW5mbz1weXRob24zNC5QeUZsb2F0X0dldEluZm8KKyAgUHlGbG9hdF9HZXRNYXg9cHl0aG9uMzQuUHlGbG9hdF9HZXRNYXgKKyAgUHlGbG9hdF9HZXRNaW49cHl0aG9uMzQuUHlGbG9hdF9HZXRNaW4KKyAgUHlGbG9hdF9UeXBlPXB5dGhvbjM0LlB5RmxvYXRfVHlwZSBEQVRBCisgIFB5RnJvemVuU2V0X05ldz1weXRob24zNC5QeUZyb3plblNldF9OZXcKKyAgUHlGcm96ZW5TZXRfVHlwZT1weXRob24zNC5QeUZyb3plblNldF9UeXBlIERBVEEKKyAgUHlHQ19Db2xsZWN0PXB5dGhvbjM0LlB5R0NfQ29sbGVjdAorICBQeUdJTFN0YXRlX0Vuc3VyZT1weXRob24zNC5QeUdJTFN0YXRlX0Vuc3VyZQorICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZT1weXRob24zNC5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQorICBQeUdJTFN0YXRlX1JlbGVhc2U9cHl0aG9uMzQuUHlHSUxTdGF0ZV9SZWxlYXNlCisgIFB5R2V0U2V0RGVzY3JfVHlwZT1weXRob24zNC5QeUdldFNldERlc2NyX1R5cGUgREFUQQorICBQeUltcG9ydF9BZGRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfQWRkTW9kdWxlCisgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWI9cHl0aG9uMzQuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgorICBQeUltcG9ydF9DbGVhbnVwPXB5dGhvbjM0LlB5SW1wb3J0X0NsZWFudXAKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeD1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4CisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcz1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMKKyAgUHlJbXBvcnRfR2V0SW1wb3J0ZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0SW1wb3J0ZXIKKyAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKKyAgUHlJbXBvcnRfR2V0TWFnaWNUYWc9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNUYWcKKyAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdD1weXRob24zNC5QeUltcG9ydF9HZXRNb2R1bGVEaWN0CisgIFB5SW1wb3J0X0ltcG9ydD1weXRob24zNC5QeUltcG9ydF9JbXBvcnQKKyAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2s9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaworICBQeUltcG9ydF9SZWxvYWRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfUmVsb2FkTW9kdWxlCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcj1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfQ2xlYXIKKyAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZT1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXc9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX05ldworICBQeUl0ZXJfTmV4dD1weXRob24zNC5QeUl0ZXJfTmV4dAorICBQeUxpc3RJdGVyX1R5cGU9cHl0aG9uMzQuUHlMaXN0SXRlcl9UeXBlIERBVEEKKyAgUHlMaXN0UmV2SXRlcl9UeXBlPXB5dGhvbjM0LlB5TGlzdFJldkl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdF9BcHBlbmQ9cHl0aG9uMzQuUHlMaXN0X0FwcGVuZAorICBQeUxpc3RfQXNUdXBsZT1weXRob24zNC5QeUxpc3RfQXNUdXBsZQorICBQeUxpc3RfR2V0SXRlbT1weXRob24zNC5QeUxpc3RfR2V0SXRlbQorICBQeUxpc3RfR2V0U2xpY2U9cHl0aG9uMzQuUHlMaXN0X0dldFNsaWNlCisgIFB5TGlzdF9JbnNlcnQ9cHl0aG9uMzQuUHlMaXN0X0luc2VydAorICBQeUxpc3RfTmV3PXB5dGhvbjM0LlB5TGlzdF9OZXcKKyAgUHlMaXN0X1JldmVyc2U9cHl0aG9uMzQuUHlMaXN0X1JldmVyc2UKKyAgUHlMaXN0X1NldEl0ZW09cHl0aG9uMzQuUHlMaXN0X1NldEl0ZW0KKyAgUHlMaXN0X1NldFNsaWNlPXB5dGhvbjM0LlB5TGlzdF9TZXRTbGljZQorICBQeUxpc3RfU2l6ZT1weXRob24zNC5QeUxpc3RfU2l6ZQorICBQeUxpc3RfU29ydD1weXRob24zNC5QeUxpc3RfU29ydAorICBQeUxpc3RfVHlwZT1weXRob24zNC5QeUxpc3RfVHlwZSBEQVRBCisgIFB5TG9uZ1JhbmdlSXRlcl9UeXBlPXB5dGhvbjM0LlB5TG9uZ1JhbmdlSXRlcl9UeXBlIERBVEEKKyAgUHlMb25nX0FzRG91YmxlPXB5dGhvbjM0LlB5TG9uZ19Bc0RvdWJsZQorICBQeUxvbmdfQXNMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmcKKyAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdworICBQeUxvbmdfQXNMb25nTG9uZz1weXRob24zNC5QeUxvbmdfQXNMb25nTG9uZworICBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzU2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NpemVfdAorICBQeUxvbmdfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NzaXplX3QKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZworICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2s9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCisgIFB5TG9uZ19Bc1ZvaWRQdHI9cHl0aG9uMzQuUHlMb25nX0FzVm9pZFB0cgorICBQeUxvbmdfRnJvbURvdWJsZT1weXRob24zNC5QeUxvbmdfRnJvbURvdWJsZQorICBQeUxvbmdfRnJvbUxvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nCisgIFB5TG9uZ19Gcm9tTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nTG9uZworICBQeUxvbmdfRnJvbVNpemVfdD1weXRob24zNC5QeUxvbmdfRnJvbVNpemVfdAorICBQeUxvbmdfRnJvbVNzaXplX3Q9cHl0aG9uMzQuUHlMb25nX0Zyb21Tc2l6ZV90CisgIFB5TG9uZ19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tU3RyaW5nCisgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCisgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21Wb2lkUHRyPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVm9pZFB0cgorICBQeUxvbmdfR2V0SW5mbz1weXRob24zNC5QeUxvbmdfR2V0SW5mbworICBQeUxvbmdfVHlwZT1weXRob24zNC5QeUxvbmdfVHlwZSBEQVRBCisgIFB5TWFwX1R5cGU9cHl0aG9uMzQuUHlNYXBfVHlwZSBEQVRBCisgIFB5TWFwcGluZ19DaGVjaz1weXRob24zNC5QeU1hcHBpbmdfQ2hlY2sKKyAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX0hhc0tleT1weXRob24zNC5QeU1hcHBpbmdfSGFzS2V5CisgIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0hhc0tleVN0cmluZworICBQeU1hcHBpbmdfSXRlbXM9cHl0aG9uMzQuUHlNYXBwaW5nX0l0ZW1zCisgIFB5TWFwcGluZ19LZXlzPXB5dGhvbjM0LlB5TWFwcGluZ19LZXlzCisgIFB5TWFwcGluZ19MZW5ndGg9cHl0aG9uMzQuUHlNYXBwaW5nX0xlbmd0aAorICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZz1weXRob24zNC5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZworICBQeU1hcHBpbmdfU2l6ZT1weXRob24zNC5QeU1hcHBpbmdfU2l6ZQorICBQeU1hcHBpbmdfVmFsdWVzPXB5dGhvbjM0LlB5TWFwcGluZ19WYWx1ZXMKKyAgUHlNZW1fRnJlZT1weXRob24zNC5QeU1lbV9GcmVlCisgIFB5TWVtX01hbGxvYz1weXRob24zNC5QeU1lbV9NYWxsb2MKKyAgUHlNZW1fUmVhbGxvYz1weXRob24zNC5QeU1lbV9SZWFsbG9jCisgIFB5TWVtYmVyRGVzY3JfVHlwZT1weXRob24zNC5QeU1lbWJlckRlc2NyX1R5cGUgREFUQQorICBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdD1weXRob24zNC5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdAorICBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cz1weXRob24zNC5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cworICBQeU1lbW9yeVZpZXdfVHlwZT1weXRob24zNC5QeU1lbW9yeVZpZXdfVHlwZSBEQVRBCisgIFB5TWV0aG9kRGVzY3JfVHlwZT1weXRob24zNC5QeU1ldGhvZERlc2NyX1R5cGUgREFUQQorICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudD1weXRob24zNC5QeU1vZHVsZV9BZGRJbnRDb25zdGFudAorICBQeU1vZHVsZV9BZGRPYmplY3Q9cHl0aG9uMzQuUHlNb2R1bGVfQWRkT2JqZWN0CisgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50PXB5dGhvbjM0LlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50CisgIFB5TW9kdWxlX0NyZWF0ZTI9cHl0aG9uMzQuUHlNb2R1bGVfQ3JlYXRlMgorICBQeU1vZHVsZV9HZXREZWY9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGVmCisgIFB5TW9kdWxlX0dldERpY3Q9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGljdAorICBQeU1vZHVsZV9HZXRGaWxlbmFtZT1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZQorICBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdAorICBQeU1vZHVsZV9HZXROYW1lPXB5dGhvbjM0LlB5TW9kdWxlX0dldE5hbWUKKyAgUHlNb2R1bGVfR2V0U3RhdGU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0U3RhdGUKKyAgUHlNb2R1bGVfTmV3PXB5dGhvbjM0LlB5TW9kdWxlX05ldworICBQeU1vZHVsZV9UeXBlPXB5dGhvbjM0LlB5TW9kdWxlX1R5cGUgREFUQQorICBQeU51bGxJbXBvcnRlcl9UeXBlPXB5dGhvbjM0LlB5TnVsbEltcG9ydGVyX1R5cGUgREFUQQorICBQeU51bWJlcl9BYnNvbHV0ZT1weXRob24zNC5QeU51bWJlcl9BYnNvbHV0ZQorICBQeU51bWJlcl9BZGQ9cHl0aG9uMzQuUHlOdW1iZXJfQWRkCisgIFB5TnVtYmVyX0FuZD1weXRob24zNC5QeU51bWJlcl9BbmQKKyAgUHlOdW1iZXJfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TnVtYmVyX0FzU3NpemVfdAorICBQeU51bWJlcl9DaGVjaz1weXRob24zNC5QeU51bWJlcl9DaGVjaworICBQeU51bWJlcl9EaXZtb2Q9cHl0aG9uMzQuUHlOdW1iZXJfRGl2bW9kCisgIFB5TnVtYmVyX0Zsb2F0PXB5dGhvbjM0LlB5TnVtYmVyX0Zsb2F0CisgIFB5TnVtYmVyX0Zsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0Zsb29yRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VBZGQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZUFkZAorICBQeU51bWJlcl9JblBsYWNlQW5kPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VBbmQKKyAgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQorICBQeU51bWJlcl9JblBsYWNlTHNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VMc2hpZnQKKyAgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQorICBQeU51bWJlcl9JblBsYWNlT3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZU9yCisgIFB5TnVtYmVyX0luUGxhY2VQb3dlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUG93ZXIKKyAgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyCisgIFB5TnVtYmVyX0luUGxhY2VSc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAorICBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Q9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0CisgIFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VYb3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVhvcgorICBQeU51bWJlcl9JbmRleD1weXRob24zNC5QeU51bWJlcl9JbmRleAorICBQeU51bWJlcl9JbnZlcnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW52ZXJ0CisgIFB5TnVtYmVyX0xvbmc9cHl0aG9uMzQuUHlOdW1iZXJfTG9uZworICBQeU51bWJlcl9Mc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfTHNoaWZ0CisgIFB5TnVtYmVyX011bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX011bHRpcGx5CisgIFB5TnVtYmVyX05lZ2F0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX05lZ2F0aXZlCisgIFB5TnVtYmVyX09yPXB5dGhvbjM0LlB5TnVtYmVyX09yCisgIFB5TnVtYmVyX1Bvc2l0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX1Bvc2l0aXZlCisgIFB5TnVtYmVyX1Bvd2VyPXB5dGhvbjM0LlB5TnVtYmVyX1Bvd2VyCisgIFB5TnVtYmVyX1JlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9SZW1haW5kZXIKKyAgUHlOdW1iZXJfUnNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX1JzaGlmdAorICBQeU51bWJlcl9TdWJ0cmFjdD1weXRob24zNC5QeU51bWJlcl9TdWJ0cmFjdAorICBQeU51bWJlcl9Ub0Jhc2U9cHl0aG9uMzQuUHlOdW1iZXJfVG9CYXNlCisgIFB5TnVtYmVyX1RydWVEaXZpZGU9cHl0aG9uMzQuUHlOdW1iZXJfVHJ1ZURpdmlkZQorICBQeU51bWJlcl9Yb3I9cHl0aG9uMzQuUHlOdW1iZXJfWG9yCisgIFB5T1NfQWZ0ZXJGb3JrPXB5dGhvbjM0LlB5T1NfQWZ0ZXJGb3JrCisgIFB5T1NfSW5pdEludGVycnVwdHM9cHl0aG9uMzQuUHlPU19Jbml0SW50ZXJydXB0cworICBQeU9TX0lucHV0SG9vaz1weXRob24zNC5QeU9TX0lucHV0SG9vayBEQVRBCisgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQ9cHl0aG9uMzQuUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAorICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyPXB5dGhvbjM0LlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgREFUQQorICBQeU9TX2RvdWJsZV90b19zdHJpbmc9cHl0aG9uMzQuUHlPU19kb3VibGVfdG9fc3RyaW5nCisgIFB5T1NfZ2V0c2lnPXB5dGhvbjM0LlB5T1NfZ2V0c2lnCisgIFB5T1NfbXlzdHJpY21wPXB5dGhvbjM0LlB5T1NfbXlzdHJpY21wCisgIFB5T1NfbXlzdHJuaWNtcD1weXRob24zNC5QeU9TX215c3RybmljbXAKKyAgUHlPU19zZXRzaWc9cHl0aG9uMzQuUHlPU19zZXRzaWcKKyAgUHlPU19zbnByaW50Zj1weXRob24zNC5QeU9TX3NucHJpbnRmCisgIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZT1weXRob24zNC5QeU9TX3N0cmluZ190b19kb3VibGUKKyAgUHlPU19zdHJ0b2w9cHl0aG9uMzQuUHlPU19zdHJ0b2wKKyAgUHlPU19zdHJ0b3VsPXB5dGhvbjM0LlB5T1Nfc3RydG91bAorICBQeU9TX3ZzbnByaW50Zj1weXRob24zNC5QeU9TX3ZzbnByaW50ZgorICBQeU9iamVjdF9BU0NJST1weXRob24zNC5QeU9iamVjdF9BU0NJSQorICBQeU9iamVjdF9Bc0NoYXJCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNDaGFyQnVmZmVyCisgIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I9cHl0aG9uMzQuUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcgorICBQeU9iamVjdF9Bc1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNSZWFkQnVmZmVyCisgIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgorICBQeU9iamVjdF9CeXRlcz1weXRob24zNC5QeU9iamVjdF9CeXRlcworICBQeU9iamVjdF9DYWxsPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGwKKyAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbgorICBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZD1weXRob24zNC5QeU9iamVjdF9DYWxsTWV0aG9kCisgIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCisgIFB5T2JqZWN0X0NhbGxPYmplY3Q9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE9iamVjdAorICBQeU9iamVjdF9DaGVja1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyCisgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnM9cHl0aG9uMzQuUHlPYmplY3RfQ2xlYXJXZWFrUmVmcworICBQeU9iamVjdF9EZWxJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0RlbEl0ZW0KKyAgUHlPYmplY3RfRGVsSXRlbVN0cmluZz1weXRob24zNC5QeU9iamVjdF9EZWxJdGVtU3RyaW5nCisgIFB5T2JqZWN0X0Rpcj1weXRob24zNC5QeU9iamVjdF9EaXIKKyAgUHlPYmplY3RfRm9ybWF0PXB5dGhvbjM0LlB5T2JqZWN0X0Zvcm1hdAorICBQeU9iamVjdF9GcmVlPXB5dGhvbjM0LlB5T2JqZWN0X0ZyZWUKKyAgUHlPYmplY3RfR0NfRGVsPXB5dGhvbjM0LlB5T2JqZWN0X0dDX0RlbAorICBQeU9iamVjdF9HQ19UcmFjaz1weXRob24zNC5QeU9iamVjdF9HQ19UcmFjaworICBQeU9iamVjdF9HQ19VblRyYWNrPXB5dGhvbjM0LlB5T2JqZWN0X0dDX1VuVHJhY2sKKyAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY0dldEF0dHIKKyAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKKyAgUHlPYmplY3RfR2V0QXR0cj1weXRob24zNC5QeU9iamVjdF9HZXRBdHRyCisgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfR2V0QXR0clN0cmluZworICBQeU9iamVjdF9HZXRJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0dldEl0ZW0KKyAgUHlPYmplY3RfR2V0SXRlcj1weXRob24zNC5QeU9iamVjdF9HZXRJdGVyCisgIFB5T2JqZWN0X0hhc0F0dHI9cHl0aG9uMzQuUHlPYmplY3RfSGFzQXR0cgorICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKKyAgUHlPYmplY3RfSGFzaD1weXRob24zNC5QeU9iamVjdF9IYXNoCisgIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZD1weXRob24zNC5QeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQKKyAgUHlPYmplY3RfSW5pdD1weXRob24zNC5QeU9iamVjdF9Jbml0CisgIFB5T2JqZWN0X0luaXRWYXI9cHl0aG9uMzQuUHlPYmplY3RfSW5pdFZhcgorICBQeU9iamVjdF9Jc0luc3RhbmNlPXB5dGhvbjM0LlB5T2JqZWN0X0lzSW5zdGFuY2UKKyAgUHlPYmplY3RfSXNTdWJjbGFzcz1weXRob24zNC5QeU9iamVjdF9Jc1N1YmNsYXNzCisgIFB5T2JqZWN0X0lzVHJ1ZT1weXRob24zNC5QeU9iamVjdF9Jc1RydWUKKyAgUHlPYmplY3RfTGVuZ3RoPXB5dGhvbjM0LlB5T2JqZWN0X0xlbmd0aAorICBQeU9iamVjdF9NYWxsb2M9cHl0aG9uMzQuUHlPYmplY3RfTWFsbG9jCisgIFB5T2JqZWN0X05vdD1weXRob24zNC5QeU9iamVjdF9Ob3QKKyAgUHlPYmplY3RfUmVhbGxvYz1weXRob24zNC5QeU9iamVjdF9SZWFsbG9jCisgIFB5T2JqZWN0X1JlcHI9cHl0aG9uMzQuUHlPYmplY3RfUmVwcgorICBQeU9iamVjdF9SaWNoQ29tcGFyZT1weXRob24zNC5QeU9iamVjdF9SaWNoQ29tcGFyZQorICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2w9cHl0aG9uMzQuUHlPYmplY3RfUmljaENvbXBhcmVCb29sCisgIFB5T2JqZWN0X1NlbGZJdGVyPXB5dGhvbjM0LlB5T2JqZWN0X1NlbGZJdGVyCisgIFB5T2JqZWN0X1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfU2V0QXR0cgorICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X1NldEF0dHJTdHJpbmcKKyAgUHlPYmplY3RfU2V0SXRlbT1weXRob24zNC5QeU9iamVjdF9TZXRJdGVtCisgIFB5T2JqZWN0X1NpemU9cHl0aG9uMzQuUHlPYmplY3RfU2l6ZQorICBQeU9iamVjdF9TdHI9cHl0aG9uMzQuUHlPYmplY3RfU3RyCisgIFB5T2JqZWN0X1R5cGU9cHl0aG9uMzQuUHlPYmplY3RfVHlwZSBEQVRBCisgIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzPXB5dGhvbjM0LlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCisgIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3M9cHl0aG9uMzQuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncworICBQeVByb3BlcnR5X1R5cGU9cHl0aG9uMzQuUHlQcm9wZXJ0eV9UeXBlIERBVEEKKyAgUHlSYW5nZUl0ZXJfVHlwZT1weXRob24zNC5QeVJhbmdlSXRlcl9UeXBlIERBVEEKKyAgUHlSYW5nZV9UeXBlPXB5dGhvbjM0LlB5UmFuZ2VfVHlwZSBEQVRBCisgIFB5UmV2ZXJzZWRfVHlwZT1weXRob24zNC5QeVJldmVyc2VkX1R5cGUgREFUQQorICBQeVNlcUl0ZXJfTmV3PXB5dGhvbjM0LlB5U2VxSXRlcl9OZXcKKyAgUHlTZXFJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXFJdGVyX1R5cGUgREFUQQorICBQeVNlcXVlbmNlX0NoZWNrPXB5dGhvbjM0LlB5U2VxdWVuY2VfQ2hlY2sKKyAgUHlTZXF1ZW5jZV9Db25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db25jYXQKKyAgUHlTZXF1ZW5jZV9Db250YWlucz1weXRob24zNC5QeVNlcXVlbmNlX0NvbnRhaW5zCisgIFB5U2VxdWVuY2VfQ291bnQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db3VudAorICBQeVNlcXVlbmNlX0RlbEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxJdGVtCisgIFB5U2VxdWVuY2VfRGVsU2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxTbGljZQorICBQeVNlcXVlbmNlX0Zhc3Q9cHl0aG9uMzQuUHlTZXF1ZW5jZV9GYXN0CisgIFB5U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVNlcXVlbmNlX0dldEl0ZW0KKyAgUHlTZXF1ZW5jZV9HZXRTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX0dldFNsaWNlCisgIFB5U2VxdWVuY2VfSW49cHl0aG9uMzQuUHlTZXF1ZW5jZV9JbgorICBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0CisgIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdD1weXRob24zNC5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQKKyAgUHlTZXF1ZW5jZV9JbmRleD1weXRob24zNC5QeVNlcXVlbmNlX0luZGV4CisgIFB5U2VxdWVuY2VfTGVuZ3RoPXB5dGhvbjM0LlB5U2VxdWVuY2VfTGVuZ3RoCisgIFB5U2VxdWVuY2VfTGlzdD1weXRob24zNC5QeVNlcXVlbmNlX0xpc3QKKyAgUHlTZXF1ZW5jZV9SZXBlYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9SZXBlYXQKKyAgUHlTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0SXRlbQorICBQeVNlcXVlbmNlX1NldFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0U2xpY2UKKyAgUHlTZXF1ZW5jZV9TaXplPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2l6ZQorICBQeVNlcXVlbmNlX1R1cGxlPXB5dGhvbjM0LlB5U2VxdWVuY2VfVHVwbGUKKyAgUHlTZXRJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXRJdGVyX1R5cGUgREFUQQorICBQeVNldF9BZGQ9cHl0aG9uMzQuUHlTZXRfQWRkCisgIFB5U2V0X0NsZWFyPXB5dGhvbjM0LlB5U2V0X0NsZWFyCisgIFB5U2V0X0NvbnRhaW5zPXB5dGhvbjM0LlB5U2V0X0NvbnRhaW5zCisgIFB5U2V0X0Rpc2NhcmQ9cHl0aG9uMzQuUHlTZXRfRGlzY2FyZAorICBQeVNldF9OZXc9cHl0aG9uMzQuUHlTZXRfTmV3CisgIFB5U2V0X1BvcD1weXRob24zNC5QeVNldF9Qb3AKKyAgUHlTZXRfU2l6ZT1weXRob24zNC5QeVNldF9TaXplCisgIFB5U2V0X1R5cGU9cHl0aG9uMzQuUHlTZXRfVHlwZSBEQVRBCisgIFB5U2xpY2VfR2V0SW5kaWNlcz1weXRob24zNC5QeVNsaWNlX0dldEluZGljZXMKKyAgUHlTbGljZV9HZXRJbmRpY2VzRXg9cHl0aG9uMzQuUHlTbGljZV9HZXRJbmRpY2VzRXgKKyAgUHlTbGljZV9OZXc9cHl0aG9uMzQuUHlTbGljZV9OZXcKKyAgUHlTbGljZV9UeXBlPXB5dGhvbjM0LlB5U2xpY2VfVHlwZSBEQVRBCisgIFB5U29ydFdyYXBwZXJfVHlwZT1weXRob24zNC5QeVNvcnRXcmFwcGVyX1R5cGUgREFUQQorICBQeVN0YXRlX0ZpbmRNb2R1bGU9cHl0aG9uMzQuUHlTdGF0ZV9GaW5kTW9kdWxlCisgIFB5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfQWRkTW9kdWxlCisgIFB5U3RhdGVfUmVtb3ZlTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfUmVtb3ZlTW9kdWxlCisgIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXc9cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZQorICBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtCisgIFB5U3VwZXJfVHlwZT1weXRob24zNC5QeVN1cGVyX1R5cGUgREFUQQorICBQeVN5c19BZGRXYXJuT3B0aW9uPXB5dGhvbjM0LlB5U3lzX0FkZFdhcm5PcHRpb24KKyAgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGU9cHl0aG9uMzQuUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUKKyAgUHlTeXNfRm9ybWF0U3RkZXJyPXB5dGhvbjM0LlB5U3lzX0Zvcm1hdFN0ZGVycgorICBQeVN5c19Gb3JtYXRTdGRvdXQ9cHl0aG9uMzQuUHlTeXNfRm9ybWF0U3Rkb3V0CisgIFB5U3lzX0dldE9iamVjdD1weXRob24zNC5QeVN5c19HZXRPYmplY3QKKyAgUHlTeXNfSGFzV2Fybk9wdGlvbnM9cHl0aG9uMzQuUHlTeXNfSGFzV2Fybk9wdGlvbnMKKyAgUHlTeXNfUmVzZXRXYXJuT3B0aW9ucz1weXRob24zNC5QeVN5c19SZXNldFdhcm5PcHRpb25zCisgIFB5U3lzX1NldEFyZ3Y9cHl0aG9uMzQuUHlTeXNfU2V0QXJndgorICBQeVN5c19TZXRBcmd2RXg9cHl0aG9uMzQuUHlTeXNfU2V0QXJndkV4CisgIFB5U3lzX1NldE9iamVjdD1weXRob24zNC5QeVN5c19TZXRPYmplY3QKKyAgUHlTeXNfU2V0UGF0aD1weXRob24zNC5QeVN5c19TZXRQYXRoCisgIFB5U3lzX1dyaXRlU3RkZXJyPXB5dGhvbjM0LlB5U3lzX1dyaXRlU3RkZXJyCisgIFB5U3lzX1dyaXRlU3Rkb3V0PXB5dGhvbjM0LlB5U3lzX1dyaXRlU3Rkb3V0CisgIFB5VGhyZWFkU3RhdGVfQ2xlYXI9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9DbGVhcgorICBQeVRocmVhZFN0YXRlX0RlbGV0ZT1weXRob24zNC5QeVRocmVhZFN0YXRlX0RlbGV0ZQorICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50CisgIFB5VGhyZWFkU3RhdGVfR2V0PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfR2V0CisgIFB5VGhyZWFkU3RhdGVfR2V0RGljdD1weXRob24zNC5QeVRocmVhZFN0YXRlX0dldERpY3QKKyAgUHlUaHJlYWRTdGF0ZV9OZXc9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9OZXcKKyAgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yz1weXRob24zNC5QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCisgIFB5VGhyZWFkU3RhdGVfU3dhcD1weXRob24zNC5QeVRocmVhZFN0YXRlX1N3YXAKKyAgUHlUcmFjZUJhY2tfSGVyZT1weXRob24zNC5QeVRyYWNlQmFja19IZXJlCisgIFB5VHJhY2VCYWNrX1ByaW50PXB5dGhvbjM0LlB5VHJhY2VCYWNrX1ByaW50CisgIFB5VHJhY2VCYWNrX1R5cGU9cHl0aG9uMzQuUHlUcmFjZUJhY2tfVHlwZSBEQVRBCisgIFB5VHVwbGVJdGVyX1R5cGU9cHl0aG9uMzQuUHlUdXBsZUl0ZXJfVHlwZSBEQVRBCisgIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeVR1cGxlX0NsZWFyRnJlZUxpc3QKKyAgUHlUdXBsZV9HZXRJdGVtPXB5dGhvbjM0LlB5VHVwbGVfR2V0SXRlbQorICBQeVR1cGxlX0dldFNsaWNlPXB5dGhvbjM0LlB5VHVwbGVfR2V0U2xpY2UKKyAgUHlUdXBsZV9OZXc9cHl0aG9uMzQuUHlUdXBsZV9OZXcKKyAgUHlUdXBsZV9QYWNrPXB5dGhvbjM0LlB5VHVwbGVfUGFjaworICBQeVR1cGxlX1NldEl0ZW09cHl0aG9uMzQuUHlUdXBsZV9TZXRJdGVtCisgIFB5VHVwbGVfU2l6ZT1weXRob24zNC5QeVR1cGxlX1NpemUKKyAgUHlUdXBsZV9UeXBlPXB5dGhvbjM0LlB5VHVwbGVfVHlwZSBEQVRBCisgIFB5VHlwZV9DbGVhckNhY2hlPXB5dGhvbjM0LlB5VHlwZV9DbGVhckNhY2hlCisgIFB5VHlwZV9Gcm9tU3BlYz1weXRob24zNC5QeVR5cGVfRnJvbVNwZWMKKyAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzPXB5dGhvbjM0LlB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcworICBQeVR5cGVfR2VuZXJpY0FsbG9jPXB5dGhvbjM0LlB5VHlwZV9HZW5lcmljQWxsb2MKKyAgUHlUeXBlX0dlbmVyaWNOZXc9cHl0aG9uMzQuUHlUeXBlX0dlbmVyaWNOZXcKKyAgUHlUeXBlX0dldEZsYWdzPXB5dGhvbjM0LlB5VHlwZV9HZXRGbGFncworICBQeVR5cGVfR2V0U2xvdD1weXRob24zNC5QeVR5cGVfR2V0U2xvdAorICBQeVR5cGVfSXNTdWJ0eXBlPXB5dGhvbjM0LlB5VHlwZV9Jc1N1YnR5cGUKKyAgUHlUeXBlX01vZGlmaWVkPXB5dGhvbjM0LlB5VHlwZV9Nb2RpZmllZAorICBQeVR5cGVfUmVhZHk9cHl0aG9uMzQuUHlUeXBlX1JlYWR5CisgIFB5VHlwZV9UeXBlPXB5dGhvbjM0LlB5VHlwZV9UeXBlIERBVEEKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZQorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZworICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZUl0ZXJfVHlwZT1weXRob24zNC5QeVVuaWNvZGVJdGVyX1R5cGUgREFUQQorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlX0FwcGVuZD1weXRob24zNC5QeVVuaWNvZGVfQXBwZW5kCisgIFB5VW5pY29kZV9BcHBlbmRBbmREZWw9cHl0aG9uMzQuUHlVbmljb2RlX0FwcGVuZEFuZERlbAorICBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNBU0NJSVN0cmluZworICBQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmcKKyAgUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0CisgIFB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlCisgIFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGUKKyAgUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0xhdGluMVN0cmluZworICBQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGMTZTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVVRGMTZTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGMzJTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVVRGMzJTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGOFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNVVEY4U3RyaW5nCisgIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZworICBQeVVuaWNvZGVfQXNXaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVfQXNXaWRlQ2hhcgorICBQeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdD1weXRob24zNC5QeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdAorICBQeVVuaWNvZGVfQ29tcGFyZT1weXRob24zNC5QeVVuaWNvZGVfQ29tcGFyZQorICBQeVVuaWNvZGVfQ29uY2F0PXB5dGhvbjM0LlB5VW5pY29kZV9Db25jYXQKKyAgUHlVbmljb2RlX0NvbnRhaW5zPXB5dGhvbjM0LlB5VW5pY29kZV9Db250YWlucworICBQeVVuaWNvZGVfQ291bnQ9cHl0aG9uMzQuUHlVbmljb2RlX0NvdW50CisgIFB5VW5pY29kZV9EZWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZQorICBQeVVuaWNvZGVfRGVjb2RlQVNDSUk9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZUFTQ0lJCisgIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVDaGFybWFwCisgIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdAorICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZT1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZQorICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVMYXRpbjEKKyAgUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEYxNgorICBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzI9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjMyCisgIFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsCisgIFB5VW5pY29kZV9EZWNvZGVVVEY4PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY4CisgIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZT1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZQorICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXI9cHl0aG9uMzQuUHlVbmljb2RlX0ZTQ29udmVydGVyCisgIFB5VW5pY29kZV9GU0RlY29kZXI9cHl0aG9uMzQuUHlVbmljb2RlX0ZTRGVjb2RlcgorICBQeVVuaWNvZGVfRmluZD1weXRob24zNC5QeVVuaWNvZGVfRmluZAorICBQeVVuaWNvZGVfRm9ybWF0PXB5dGhvbjM0LlB5VW5pY29kZV9Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdAorICBQeVVuaWNvZGVfRnJvbUZvcm1hdD1weXRob24zNC5QeVVuaWNvZGVfRnJvbUZvcm1hdAorICBQeVVuaWNvZGVfRnJvbUZvcm1hdFY9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21Gb3JtYXRWCisgIFB5VW5pY29kZV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tT2JqZWN0CisgIFB5VW5pY29kZV9Gcm9tT3JkaW5hbD1weXRob24zNC5QeVVuaWNvZGVfRnJvbU9yZGluYWwKKyAgUHlVbmljb2RlX0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21TdHJpbmcKKyAgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZQorICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tV2lkZUNoYXIKKyAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nCisgIFB5VW5pY29kZV9HZXRTaXplPXB5dGhvbjM0LlB5VW5pY29kZV9HZXRTaXplCisgIFB5VW5pY29kZV9Jc0lkZW50aWZpZXI9cHl0aG9uMzQuUHlVbmljb2RlX0lzSWRlbnRpZmllcgorICBQeVVuaWNvZGVfSm9pbj1weXRob24zNC5QeVVuaWNvZGVfSm9pbgorICBQeVVuaWNvZGVfUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZV9QYXJ0aXRpb24KKyAgUHlVbmljb2RlX1JQYXJ0aXRpb249cHl0aG9uMzQuUHlVbmljb2RlX1JQYXJ0aXRpb24KKyAgUHlVbmljb2RlX1JTcGxpdD1weXRob24zNC5QeVVuaWNvZGVfUlNwbGl0CisgIFB5VW5pY29kZV9SZXBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZV9SZXBsYWNlCisgIFB5VW5pY29kZV9SZXNpemU9cHl0aG9uMzQuUHlVbmljb2RlX1Jlc2l6ZQorICBQeVVuaWNvZGVfUmljaENvbXBhcmU9cHl0aG9uMzQuUHlVbmljb2RlX1JpY2hDb21wYXJlCisgIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZworICBQeVVuaWNvZGVfU3BsaXQ9cHl0aG9uMzQuUHlVbmljb2RlX1NwbGl0CisgIFB5VW5pY29kZV9TcGxpdGxpbmVzPXB5dGhvbjM0LlB5VW5pY29kZV9TcGxpdGxpbmVzCisgIFB5VW5pY29kZV9UYWlsbWF0Y2g9cHl0aG9uMzQuUHlVbmljb2RlX1RhaWxtYXRjaAorICBQeVVuaWNvZGVfVHJhbnNsYXRlPXB5dGhvbjM0LlB5VW5pY29kZV9UcmFuc2xhdGUKKyAgUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXA9cHl0aG9uMzQuUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKKyAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKKyAgUHlVbmljb2RlX0RlY29kZVVURjc9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjcKKyAgUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsCisgIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAorICBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZworICBQeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWw9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkltbW9ydGFsCisgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5JblBsYWNlCisgIFB5VW5pY29kZV9UeXBlPXB5dGhvbjM0LlB5VW5pY29kZV9UeXBlIERBVEEKKyAgUHlXZWFrcmVmX0dldE9iamVjdD1weXRob24zNC5QeVdlYWtyZWZfR2V0T2JqZWN0IERBVEEKKyAgUHlXZWFrcmVmX05ld1Byb3h5PXB5dGhvbjM0LlB5V2Vha3JlZl9OZXdQcm94eQorICBQeVdlYWtyZWZfTmV3UmVmPXB5dGhvbjM0LlB5V2Vha3JlZl9OZXdSZWYKKyAgUHlXcmFwcGVyRGVzY3JfVHlwZT1weXRob24zNC5QeVdyYXBwZXJEZXNjcl9UeXBlIERBVEEKKyAgUHlXcmFwcGVyX05ldz1weXRob24zNC5QeVdyYXBwZXJfTmV3CisgIFB5WmlwX1R5cGU9cHl0aG9uMzQuUHlaaXBfVHlwZSBEQVRBCisgIFB5X0FkZFBlbmRpbmdDYWxsPXB5dGhvbjM0LlB5X0FkZFBlbmRpbmdDYWxsCisgIFB5X0F0RXhpdD1weXRob24zNC5QeV9BdEV4aXQKKyAgUHlfQnVpbGRWYWx1ZT1weXRob24zNC5QeV9CdWlsZFZhbHVlCisgIFB5X0NvbXBpbGVTdHJpbmc9cHl0aG9uMzQuUHlfQ29tcGlsZVN0cmluZworICBQeV9EZWNSZWY9cHl0aG9uMzQuUHlfRGVjUmVmCisgIFB5X0VuZEludGVycHJldGVyPXB5dGhvbjM0LlB5X0VuZEludGVycHJldGVyCisgIFB5X0V4aXQ9cHl0aG9uMzQuUHlfRXhpdAorICBQeV9GYXRhbEVycm9yPXB5dGhvbjM0LlB5X0ZhdGFsRXJyb3IKKyAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKKyAgUHlfRmluYWxpemU9cHl0aG9uMzQuUHlfRmluYWxpemUKKyAgUHlfR2V0QnVpbGRJbmZvPXB5dGhvbjM0LlB5X0dldEJ1aWxkSW5mbworICBQeV9HZXRDb21waWxlcj1weXRob24zNC5QeV9HZXRDb21waWxlcgorICBQeV9HZXRDb3B5cmlnaHQ9cHl0aG9uMzQuUHlfR2V0Q29weXJpZ2h0CisgIFB5X0dldEV4ZWNQcmVmaXg9cHl0aG9uMzQuUHlfR2V0RXhlY1ByZWZpeAorICBQeV9HZXRQYXRoPXB5dGhvbjM0LlB5X0dldFBhdGgKKyAgUHlfR2V0UGxhdGZvcm09cHl0aG9uMzQuUHlfR2V0UGxhdGZvcm0KKyAgUHlfR2V0UHJlZml4PXB5dGhvbjM0LlB5X0dldFByZWZpeAorICBQeV9HZXRQcm9ncmFtRnVsbFBhdGg9cHl0aG9uMzQuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCisgIFB5X0dldFByb2dyYW1OYW1lPXB5dGhvbjM0LlB5X0dldFByb2dyYW1OYW1lCisgIFB5X0dldFB5dGhvbkhvbWU9cHl0aG9uMzQuUHlfR2V0UHl0aG9uSG9tZQorICBQeV9HZXRSZWN1cnNpb25MaW1pdD1weXRob24zNC5QeV9HZXRSZWN1cnNpb25MaW1pdAorICBQeV9HZXRWZXJzaW9uPXB5dGhvbjM0LlB5X0dldFZlcnNpb24KKyAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKKyAgUHlfSW5jUmVmPXB5dGhvbjM0LlB5X0luY1JlZgorICBQeV9Jbml0aWFsaXplPXB5dGhvbjM0LlB5X0luaXRpYWxpemUKKyAgUHlfSW5pdGlhbGl6ZUV4PXB5dGhvbjM0LlB5X0luaXRpYWxpemVFeAorICBQeV9Jc0luaXRpYWxpemVkPXB5dGhvbjM0LlB5X0lzSW5pdGlhbGl6ZWQKKyAgUHlfTWFpbj1weXRob24zNC5QeV9NYWluCisgIFB5X01ha2VQZW5kaW5nQ2FsbHM9cHl0aG9uMzQuUHlfTWFrZVBlbmRpbmdDYWxscworICBQeV9OZXdJbnRlcnByZXRlcj1weXRob24zNC5QeV9OZXdJbnRlcnByZXRlcgorICBQeV9SZXByRW50ZXI9cHl0aG9uMzQuUHlfUmVwckVudGVyCisgIFB5X1JlcHJMZWF2ZT1weXRob24zNC5QeV9SZXByTGVhdmUKKyAgUHlfU2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzQuUHlfU2V0UHJvZ3JhbU5hbWUKKyAgUHlfU2V0UHl0aG9uSG9tZT1weXRob24zNC5QeV9TZXRQeXRob25Ib21lCisgIFB5X1NldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0LlB5X1NldFJlY3Vyc2lvbkxpbWl0CisgIFB5X1N5bXRhYmxlU3RyaW5nPXB5dGhvbjM0LlB5X1N5bXRhYmxlU3RyaW5nCisgIFB5X1ZhQnVpbGRWYWx1ZT1weXRob24zNC5QeV9WYUJ1aWxkVmFsdWUKKyAgX1B5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCisgIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQ9cHl0aG9uMzQuX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVAorICBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVD1weXRob24zNC5fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAorICBfUHlPYmplY3RfR0NfTWFsbG9jPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19NYWxsb2MKKyAgX1B5T2JqZWN0X0dDX05ldz1weXRob24zNC5fUHlPYmplY3RfR0NfTmV3CisgIF9QeU9iamVjdF9HQ19OZXdWYXI9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX05ld1ZhcgorICBfUHlPYmplY3RfR0NfUmVzaXplPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19SZXNpemUKKyAgX1B5T2JqZWN0X05ldz1weXRob24zNC5fUHlPYmplY3RfTmV3CisgIF9QeU9iamVjdF9OZXdWYXI9cHl0aG9uMzQuX1B5T2JqZWN0X05ld1ZhcgorICBfUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzQuX1B5U3RhdGVfQWRkTW9kdWxlCisgIF9QeVRocmVhZFN0YXRlX0luaXQ9cHl0aG9uMzQuX1B5VGhyZWFkU3RhdGVfSW5pdAorICBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYz1weXRob24zNC5fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYworICBfUHlUcmFzaF9kZWxldGVfbGF0ZXI9cHl0aG9uMzQuX1B5VHJhc2hfZGVsZXRlX2xhdGVyIERBVEEKKyAgX1B5VHJhc2hfZGVsZXRlX25lc3Rpbmc9cHl0aG9uMzQuX1B5VHJhc2hfZGVsZXRlX25lc3RpbmcgREFUQQorICBfUHlUcmFzaF9kZXBvc2l0X29iamVjdD1weXRob24zNC5fUHlUcmFzaF9kZXBvc2l0X29iamVjdAorICBfUHlUcmFzaF9kZXN0cm95X2NoYWluPXB5dGhvbjM0Ll9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KKyAgX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZT1weXRob24zNC5fUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIERBVEEKKyAgX1B5V2Vha3JlZl9Qcm94eVR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9Qcm94eVR5cGUgREFUQQorICBfUHlXZWFrcmVmX1JlZlR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9SZWZUeXBlIERBVEEKKyAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKKyAgX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgREFUQQorICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsPXB5dGhvbjM0Ll9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwKKyAgX1B5X0RlYWxsb2M9cHl0aG9uMzQuX1B5X0RlYWxsb2MKKyAgX1B5X0VsbGlwc2lzT2JqZWN0PXB5dGhvbjM0Ll9QeV9FbGxpcHNpc09iamVjdCBEQVRBCisgIF9QeV9GYWxzZVN0cnVjdD1weXRob24zNC5fUHlfRmFsc2VTdHJ1Y3QgREFUQQorICBfUHlfTm9uZVN0cnVjdD1weXRob24zNC5fUHlfTm9uZVN0cnVjdCBEQVRBCisgIF9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdD1weXRob24zNC5fUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QgREFUQQorICBfUHlfU3dhcHBlZE9wPXB5dGhvbjM0Ll9QeV9Td2FwcGVkT3AgREFUQQorICBfUHlfVHJ1ZVN0cnVjdD1weXRob24zNC5fUHlfVHJ1ZVN0cnVjdCBEQVRBCisgIF9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAorICBfUHlBcmdfUGFyc2VfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlX1NpemVUCisgIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCisgIF9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAorICBfUHlBcmdfVmFQYXJzZV9TaXplVD1weXRob24zNC5fUHlBcmdfVmFQYXJzZV9TaXplVAorICBfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCisgIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9CdWlsZFZhbHVlX1NpemVUCmRpZmYgLS1naXQgYS9QQy9weXRob24zLm1hayBiL1BDL3B5dGhvbjMubWFrCmluZGV4IDljZjE4MDcuLmZiOGU3YWEgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMubWFrCisrKyBiL1BDL3B5dGhvbjMubWFrCkBAIC0xLDE0ICsxLDE0IEBACi0kKE91dERpcilweXRob24zLmRsbDoJcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYgotCWNsIC9MRCAvRmUkKE91dERpcilweXRob24zLmRsbCBweXRob24zZGxsLmMgcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYgorJChPdXREaXIpcHl0aG9uMy5kbGw6CXB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIKKwljbCAvTEQgL0ZlJChPdXREaXIpcHl0aG9uMy5kbGwgcHl0aG9uM2RsbC5jIHB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIKIAotJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYjoJcHl0aG9uMzNzdHViLmRlZgotCWxpYiAvZGVmOnB5dGhvbjMzc3R1Yi5kZWYgL291dDokKE91dERpcilweXRob24zM3N0dWIubGliIC9NQUNISU5FOiQoTUFDSElORSkKKyQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWI6CXB5dGhvbjM0c3R1Yi5kZWYKKwlsaWIgL2RlZjpweXRob24zNHN0dWIuZGVmIC9vdXQ6JChPdXREaXIpcHl0aG9uMzRzdHViLmxpYiAvTUFDSElORTokKE1BQ0hJTkUpCiAKIGNsZWFuOgogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMuZGxsIGRlbCAkKE91dERpcilweXRob24zLmRsbAogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMubGliIGRlbCAkKE91dERpcilweXRob24zLmxpYgotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIgZGVsICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKKwlJRiBFWElTVCAkKE91dERpcilweXRob24zNHN0dWIubGliIGRlbCAkKE91dERpcilweXRob24zNHN0dWIubGliCiAJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMy5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjMuZXhwCi0JSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMzNzdHViLmV4cCBkZWwgJChPdXREaXIpcHl0aG9uMzNzdHViLmV4cAorCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5leHAKIAogcmVidWlsZDogY2xlYW4gJChPdXREaXIpcHl0aG9uMy5kbGwKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMzZ2VuLnB5IGIvUEMvcHl0aG9uMzRnZW4ucHkKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gUEMvcHl0aG9uMzNnZW4ucHkKcmVuYW1lIHRvIFBDL3B5dGhvbjM0Z2VuLnB5CmluZGV4IDIxYjlmNTYuLjE4MGNlMTEgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMzZ2VuLnB5CisrKyBiL1BDL3B5dGhvbjM0Z2VuLnB5CkBAIC0xLDkgKzEsOSBAQAotIyBHZW5lcmF0ZSBweXRob24zM3N0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgorIyBHZW5lcmF0ZSBweXRob24zNHN0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgogIyBUaGUgcmVndWxhciBpbXBvcnQgbGlicmFyeSBjYW5ub3QgYmUgdXNlZCwKICMgc2luY2UgaXQgZG9lc24ndCBwcm92aWRlIHRoZSByaWdodCBzeW1ib2xzIGZvcgogIyBkYXRhIGZvcndhcmRpbmcKLW91dCA9IG9wZW4oInB5dGhvbjMzc3R1Yi5kZWYiLCAidyIpCi1vdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjMzIlxuJykKK291dCA9IG9wZW4oInB5dGhvbjM0c3R1Yi5kZWYiLCAidyIpCitvdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjM0IlxuJykKIG91dC53cml0ZSgnRVhQT1JUU1xuJykKIAogaW5wID0gb3BlbigicHl0aG9uMy5kZWYiKQpAQCAtMTQsNyArMTQsNyBAQAogYXNzZXJ0IGxpbmUuc3RyaXAoKT09J0VYUE9SVFMnCiAKIGZvciBsaW5lIGluIGlucDoKLSAgICAjIFNZTTE9cHl0aG9uMzMuU1lNMlsgREFUQV0KKyAgICAjIFNZTTE9cHl0aG9uMzQuU1lNMlsgREFUQV0KICAgICBoZWFkLCB0YWlsID0gbGluZS5zcGxpdCgnLicpCiAgICAgaWYgJ0RBVEEnIGluIHRhaWw6CiAgICAgICAgIHN5bWJvbCwgdGFpbCA9IHRhaWwuc3BsaXQoJyAnKQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMzNzdHViLmRlZiBiL1BDL3B5dGhvbjM0c3R1Yi5kZWYKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gUEMvcHl0aG9uMzNzdHViLmRlZgpyZW5hbWUgdG8gUEMvcHl0aG9uMzRzdHViLmRlZgppbmRleCBkYjFhNTQ2Li4zMDc0Y2YzIDEwMDY0NAotLS0gYS9QQy9weXRob24zM3N0dWIuZGVmCisrKyBiL1BDL3B5dGhvbjM0c3R1Yi5kZWYKQEAgLTEsNCArMSw0IEBACi1MSUJSQVJZICJweXRob24zMyIKK0xJQlJBUlkgInB5dGhvbjM0IgogRVhQT1JUUwogUHlBcmdfUGFyc2UKIFB5QXJnX1BhcnNlVHVwbGUKQEAgLTM3LDYgKzM3LDcgQEAKIFB5Q0Z1bmN0aW9uX0dldEZsYWdzCiBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgogUHlDRnVuY3Rpb25fR2V0U2VsZgorUHlDRnVuY3Rpb25fTmV3CiBQeUNGdW5jdGlvbl9OZXdFeAogUHlDRnVuY3Rpb25fVHlwZQogUHlDYWxsSXRlcl9OZXcKQEAgLTUxNyw2ICs1MTgsNyBAQAogUHlUeXBlX0dlbmVyaWNBbGxvYwogUHlUeXBlX0dlbmVyaWNOZXcKIFB5VHlwZV9HZXRGbGFncworUHlUeXBlX0dldFNsb3QKIFB5VHlwZV9Jc1N1YnR5cGUKIFB5VHlwZV9Nb2RpZmllZAogUHlUeXBlX1JlYWR5CmRpZmYgLS1naXQgYS9QQy9yZWFkbWUudHh0IGIvUEMvcmVhZG1lLnR4dAppbmRleCBmZGMwOWFiLi42MGYyMzFlIDEwMDY0NAotLS0gYS9QQy9yZWFkbWUudHh0CisrKyBiL1BDL3JlYWRtZS50eHQKQEAgLTc5LDE5ICs3OSw2IEBACiBUaGUgc3ViZGlyZWN0b3JpZXMgVkM2LCBWUzcuMSBhbmQgVlM4LjAgY29udGFpbiBsZWdhY3kgc3VwcG9ydCBvbGRlcgogdmVyc2lvbnMgb2YgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIFNlZSBQQ2J1aWxkL3JlYWRtZS50eHQuCiAKLUVNWCBkZXZlbG9wbWVudCB0b29scyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVNlZSBvczJlbXgvcmVhZG1lLnR4dC4gVGhpcyBwbGF0Zm9ybSBpcyBtYWludGFpbmVkIGJ5IEFuZHJldyBNYWNJbnR5cmUuCi0KLUlCTSBWaXN1YWxBZ2UgQy9DKysgZm9yIE9TLzIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU2VlIG9zMnZhY3BwL3JlYWRtZS50eHQuICBUaGlzIHBsYXRmb3JtIGlzIHN1cHBvcnRlZCBieSBKZWZmIFJ1c2guCi0KLU5PVEU6IFN1cHBvcnQgZm9yIG9zMnZhY3BwIG1heSBiZSBkcm9wcGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4gUGxlYXNlIG1vdmUKLSAgICAgIHRvIEVNWC4KLQogTm90ZSBmb3IgV2luZG93cyAzLnggYW5kIERPUyB1c2VycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9QQy93OXhwb3Blbi5jIGIvUEMvdzl4cG9wZW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM5NzhkZC4uMDAwMDAwMAotLS0gYS9QQy93OXhwb3Blbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiB3OXhwb3Blbi5jCi0gKgotICogU2VydmVzIGFzIGFuIGludGVybWVkaWF0ZSBzdHViIFdpbjMyIGNvbnNvbGUgYXBwbGljYXRpb24gdG8KLSAqIGF2b2lkIGEgaGFuZ2luZyBwaXBlIHdoZW4gcmVkaXJlY3RpbmcgMTYtYml0IGNvbnNvbGUgYmFzZWQKLSAqIHByb2dyYW1zIChpbmNsdWRpbmcgTVMtRE9TIGNvbnNvbGUgYmFzZWQgcHJvZ3JhbXMgYW5kIGJhdGNoCi0gKiBmaWxlcykgb24gV2luZG93IDk1IGFuZCBXaW5kb3dzIDk4LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyB0byBiZSBsYXVuY2hlZCB3aXRoIHJlZGlyZWN0ZWQgc3RhbmRhcmQKLSAqIGhhbmRsZXMuIEl0IHdpbGwgbGF1bmNoIHRoZSBjb21tYW5kIGxpbmUgc3BlY2lmaWVkIDE2LWJpdAotICogY29uc29sZSBiYXNlZCBhcHBsaWNhdGlvbiBpbiB0aGUgc2FtZSBjb25zb2xlLCBmb3J3YXJkaW5nCi0gKiBpdHMgb3duIHJlZGlyZWN0ZWQgc3RhbmRhcmQgaGFuZGxlcyB0byB0aGUgMTYtYml0IGNoaWxkLgotCi0gKiBBS0Egc29sdXRpb24gdG8gdGhlIHByb2JsZW0gZGVzY3JpYmVkIGluIEtCOiBRMTUwOTU2LgotICovICAgIAotCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4gIC8qIGZvciBtYWxsb2MgYW5kIGl0cyBmcmllbmRzICovCi0KLWNvbnN0IGNoYXIgKnVzYWdlID0KLSJUaGlzIHByb2dyYW0gaXMgdXNlZCBieSBQeXRob24ncyBvcy5wb3BlbiBmdW5jdGlvblxuIgotInRvIHdvcmsgYXJvdW5kIGEgbGltaXRhdGlvbiBpbiBXaW5kb3dzIDk1Lzk4LiAgSXQgaXNcbiIKLSJub3QgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIHN0YW5kLWFsb25lIHByb2dyYW0uIjsKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgICBCT09MIGJSZXQ7Ci0gICAgU1RBUlRVUElORk8gc2k7Ci0gICAgUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKLSAgICBEV09SRCBleGl0X2NvZGU9MDsKLSAgICBzaXplX3QgY21kbGVuID0gMDsKLSAgICBpbnQgaTsKLSAgICBjaGFyICpjbWRsaW5lLCAqY21kbGluZWZpbGw7Ci0KLSAgICBpZiAoYXJnYyA8IDIpIHsKLSAgICAgICAgaWYgKEdldEZpbGVUeXBlKEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKSk9PUZJTEVfVFlQRV9DSEFSKQotICAgICAgICAgICAgLyogQXR0YWNoZWQgdG8gYSBjb25zb2xlLCBhbmQgdGhlcmVmb3JlIG5vdCBleGVjdXRlZCBieSBQeXRob24KLSAgICAgICAgICAgICAgIERpc3BsYXkgYSBtZXNzYWdlIGJveCBmb3IgdGhlIGlucXVpc2l0aXZlIHVzZXIKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBNZXNzYWdlQm94KE5VTEwsIHVzYWdlLCBhcmd2WzBdLCBNQl9PSyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogRWVlayAtIGV4ZWN1dGVkIGJ5IFB5dGhvbiwgYnV0IGFyZ3MgYXJlIHNjcmV3ZWQhCi0gICAgICAgICAgICAgICBXcml0ZSBhbiBlcnJvciBtZXNzYWdlIHRvIHN0ZG91dCBzbyB0aGVyZSBpcyBhdAotICAgICAgICAgICAgICAgbGVhc3Qgc29tZSBjbHVlIGZvciB0aGUgZW5kIHVzZXIgd2hlbiBpdCBhcHBlYXJzCi0gICAgICAgICAgICAgICBpbiB0aGVpciBvdXRwdXQuCi0gICAgICAgICAgICAgICBBIG1lc3NhZ2UgYm94IHdvdWxkIGJlIGhpZGRlbiBhbmQgYmxvY2tzIHRoZSBhcHAuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiSW50ZXJuYWwgcG9wZW4gZXJyb3IgLSBubyBhcmdzIHNwZWNpZmllZFxuJXNcbiIsIHVzYWdlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgLyogQnVpbGQgdXAgdGhlIGNvbW1hbmQtbGluZSBmcm9tIHRoZSBhcmdzLgotICAgICAgIEFyZ3Mgd2l0aCBhIHNwYWNlIGFyZSBxdW90ZWQsIGV4aXN0aW5nIHF1b3RlcyBhcmUgZXNjYXBlZC4KLSAgICAgICBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgY2FsY3VsYXRpbmcgdGhlIGJ1ZmZlciBzaXplLCB3ZSBhc3N1bWUKLSAgICAgICBldmVyeSBjaGFyYWN0ZXIgaXMgYSBxdW90ZSAtIGllLCB3ZSBhbGxvY2F0ZSBkb3VibGUgd2hhdCB3ZSBuZWVkCi0gICAgICAgaW4gdGhlIHdvcnN0IGNhc2UuICBBcyB0aGlzIGlzIG9ubHkgZG91YmxlIHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkCi0gICAgICAgdG8gdXMsIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhpcyBpcyByZWFzb25hYmx5IHNtYWxsLCBzbyB0aGUgdG90YWwgCi0gICAgICAgYWxsb2NhdGlvbiB3aWxsIGFsbW9zdCBhbHdheXMgYmUgPCA1MTIgYnl0ZXMuCi0gICAgKi8KLSAgICBmb3IgKGk9MTtpPGFyZ2M7aSsrKQotICAgICAgICBjbWRsZW4gKz0gc3RybGVuKGFyZ3ZbaV0pKjIgKyAzOyAvKiBvbmUgc3BhY2UsIG1heWJlIDIgcXVvdGVzICovCi0gICAgY21kbGluZSA9IGNtZGxpbmVmaWxsID0gKGNoYXIgKiltYWxsb2MoY21kbGVuKzEpOwotICAgIGlmIChjbWRsaW5lID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBmb3IgKGk9MTtpPGFyZ2M7aSsrKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmFyZ2xvb2s7Ci0gICAgICAgIGludCBiUXVvdGUgPSBzdHJjaHIoYXJndltpXSwgJyAnKSAhPSBOVUxMOwotICAgICAgICBpZiAoYlF1b3RlKQotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnIic7Ci0gICAgICAgIC8qIGVzY2FwZSBxdW90ZXMgKi8KLSAgICAgICAgZm9yIChhcmdsb29rPWFyZ3ZbaV07KmFyZ2xvb2s7YXJnbG9vaysrKSB7Ci0gICAgICAgICAgICBpZiAoKmFyZ2xvb2s9PSciJykKLSAgICAgICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICdcXCc7Ci0gICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICphcmdsb29rOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiUXVvdGUpCi0gICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICciJzsKLSAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnICc7Ci0gICAgfQotICAgICpjbWRsaW5lZmlsbCA9ICdcMCc7Ci0KLSAgICAvKiBNYWtlIGNoaWxkIHByb2Nlc3MgdXNlIHRoaXMgYXBwJ3Mgc3RhbmRhcmQgZmlsZXMuICovCi0gICAgWmVyb01lbW9yeSgmc2ksIHNpemVvZiBzaSk7Ci0gICAgc2kuY2IgPSBzaXplb2Ygc2k7Ci0gICAgc2kuZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOwotICAgIHNpLmhTdGRJbnB1dCA9IEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKTsKLSAgICBzaS5oU3RkT3V0cHV0ID0gR2V0U3RkSGFuZGxlKFNURF9PVVRQVVRfSEFORExFKTsKLSAgICBzaS5oU3RkRXJyb3IgPSBHZXRTdGRIYW5kbGUoU1REX0VSUk9SX0hBTkRMRSk7Ci0KLSAgICBiUmV0ID0gQ3JlYXRlUHJvY2VzcygKLSAgICAgICAgTlVMTCwgY21kbGluZSwKLSAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgVFJVRSwgMCwKLSAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgJnNpLCAmcGkKLSAgICAgICAgKTsKLQotICAgIGZyZWUoY21kbGluZSk7Ci0KLSAgICBpZiAoYlJldCkgewotICAgICAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChwaS5oUHJvY2VzcywgSU5GSU5JVEUpICE9IFdBSVRfRkFJTEVEKSB7Ci0JICAgIEdldEV4aXRDb2RlUHJvY2VzcyhwaS5oUHJvY2VzcywgJmV4aXRfY29kZSk7Ci0JfQotICAgICAgICBDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7Ci0gICAgICAgIENsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotICAgICAgICByZXR1cm4gZXhpdF9jb2RlOwotICAgIH0KLQotICAgIHJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvUEMvd2lucmVnLmMgYi9QQy93aW5yZWcuYwppbmRleCAzMzQ3ZWI3Li42M2M0MzdlIDEwMDY0NAotLS0gYS9QQy93aW5yZWcuYworKysgYi9QQy93aW5yZWcuYwpAQCAtODcxLDggKzg3MSwxMCBAQAogICAgICAgICAvKiBBTFNPIGhhbmRsZSBBTEwgdW5rbm93biBkYXRhIHR5cGVzIGhlcmUuICBFdmVuIGlmIHdlIGNhbid0CiAgICAgICAgICAgIHN1cHBvcnQgaXQgbmF0aXZlbHksIHdlIHNob3VsZCBoYW5kbGUgdGhlIGJpdHMuICovCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT0gUHlfTm9uZSkKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgKnJldERhdGFTaXplID0gMDsKKyAgICAgICAgICAgICAgICAqcmV0RGF0YUJ1ZiA9IE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeV9idWZmZXIgdmlldzsKIApAQCAtOTM3LDE0ICs5MzksMTQgQEAKICAgICAgICAgICAgICAgICB3Y2hhcl90ICpkYXRhID0gKHdjaGFyX3QgKilyZXREYXRhQnVmOwogICAgICAgICAgICAgICAgIGludCBsZW4gPSByZXREYXRhU2l6ZSAvIDI7CiAgICAgICAgICAgICAgICAgaW50IHMgPSBjb3VudFN0cmluZ3MoZGF0YSwgbGVuKTsKLSAgICAgICAgICAgICAgICB3Y2hhcl90ICoqc3RyID0gKHdjaGFyX3QgKiopbWFsbG9jKHNpemVvZih3Y2hhcl90ICopKnMpOworICAgICAgICAgICAgICAgIHdjaGFyX3QgKipzdHIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QgKikqcyk7CiAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKIAogICAgICAgICAgICAgICAgIGZpeHVwTXVsdGlTWihzdHIsIGRhdGEsIGxlbik7CiAgICAgICAgICAgICAgICAgb2JEYXRhID0gUHlMaXN0X05ldyhzKTsKICAgICAgICAgICAgICAgICBpZiAob2JEYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHN0cik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzOyBpbmRleCsrKQpAQCAtOTU0LDE0ICs5NTYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdpc3RyeSBzdHJpbmcgaXMgdG9vIGxvbmcgZm9yIGEgUHl0aG9uIHN0cmluZyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHN0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU2V0SXRlbShvYkRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHN0cltpbmRleF0sIGxlbikpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNzk2LDkgKzE3OTgsOSBAQAogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiSEtFWVR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmUHlIS0VZX1R5cGUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRihQeUV4Y19XaW5kb3dzRXJyb3IpOworICAgIFB5X0lOQ1JFRihQeUV4Y19PU0Vycm9yKTsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgImVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEFkZCB0aGUgcmVsZXZhbnQgY29uc3RhbnRzICovCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ogYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCnJlbmFtZSB0byBQQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKaW5kZXggZDFhZmUyMi4uZDBlZTcyZiAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX292ZXJsYXBwZWQudmN4cHJvagpAQCAtMSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KQEAgLTM1LDEwNCArMzUsOTUgQEAKICAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgogICA8L0l0ZW1Hcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fTwvUHJvamVjdEd1aWQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+dzl4cG9wZW48L1Jvb3ROYW1lc3BhY2U+CisgICAgPFByb2plY3RHdWlkPntFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5fb3ZlcmxhcHBlZDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KICAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KICAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgpAQCAtMTU5LDEyNyArMTUwLDgzIEBACiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3ZlcmxhcHBlZC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvX292ZXJsYXBwZWQudmN4cHJvai5maWx0ZXJzCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzCnJlbmFtZSB0byBQQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2ouZmlsdGVycwppbmRleCBkZWM2N2FkLi43OGRlODk1IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycworKysgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2ouZmlsdGVycwpAQCAtMiwxMSArMiwxMSBAQAogPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwPgogICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthYmMyZGZmZC0zZjJhLTQ3YmQtYjg5Yi0wMzE0Yzk5ZWYyMWV9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezZmNjdjOGRiLTdkZTctNDcxNC1hOTY3LTJiMGQ0YmM3MWYyZX08L1VuaXF1ZUlkZW50aWZpZXI+CiAgICAgPC9GaWx0ZXI+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG92ZXJsYXBwZWQuYyI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvaiBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvagppbmRleCAzOTJkYWQxLi5lZDM1ZDViIDEwMDY0NAotLS0gYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2oKKysrIGIvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qCkBAIC0yNDMsNyArMjQzLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccm93LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcc3FsaXRlY29tcGF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5oIiAvPgogICA8L0l0ZW1Hcm91cD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qLmZpbHRlcnMKaW5kZXggODhlNWZkYi4uZGNlNzdjOSAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qLmZpbHRlcnMKQEAgLTMwLDkgKzMwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NzbC52Y3hwcm9qIGIvUENidWlsZC9fc3NsLnZjeHByb2oKaW5kZXggYWU3MWQxOS4uNzM3ODc5NCAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3NsLnZjeHByb2oKKysrIGIvUENidWlsZC9fc3NsLnZjeHByb2oKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KQEAgLTIwMCw3ICsyMDAsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgpAQCAtMjEyLDcgKzIxMiw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgpAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+CkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvaiBiL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzdhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagpAQCAtMCwwICsxLDE2MSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5fdGVzdGVtYmVkPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RlbWJlZC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CisgICAgICA8UHJpdmF0ZT50cnVlPC9Qcml2YXRlPgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PnRydWU8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgICAgPENvcHlMb2NhbFNhdGVsbGl0ZUFzc2VtYmxpZXM+ZmFsc2U8L0NvcHlMb2NhbFNhdGVsbGl0ZUFzc2VtYmxpZXM+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+dHJ1ZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgICA8VXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHM+ZmFsc2U8L1VzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhNTRkNAotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0ZW1iZWQuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ogYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvagpzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCmNvcHkgdG8gUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oKaW5kZXggZDFhZmUyMi4uODQ5ODRmZiAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCkBAIC0zNSwxMDQgKzM1LDk1IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnc5eHBvcGVuPC9Sb290TmFtZXNwYWNlPgorICAgIDxQcm9qZWN0R3VpZD57MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X3Rlc3RpbXBvcnRtdWx0aXBsZTwvUm9vdE5hbWVzcGFjZT4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KICAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KICAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgpAQCAtMTU5LDEyOSArMTUwLDY5IEBACiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvai5maWx0ZXJzCnNpbWlsYXJpdHkgaW5kZXggNzIlCmNvcHkgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycwpjb3B5IHRvIFBDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGVjNjdhZC4uZGIwZDBhNiAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwpAQCAtMiwxMiArMiwxMiBAQAogPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwPgogICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthYmMyZGZmZC0zZjJhLTQ3YmQtYjg5Yi0wMzE0Yzk5ZWYyMWV9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezFlYzM4YWQ5LTFhYmYtNGI4MC04NjI4LWFjNDNjY2JhMzI0Yn08L1VuaXF1ZUlkZW50aWZpZXI+CiAgICAgPC9GaWx0ZXI+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0aW1wb3J0bXVsdGlwbGUuYyI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKaW5kZXggMzU3YjA4Yi4uODA1ZDc3YSAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9zc2wuYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfc3NsLmJhdApAQCAtMiwxMCArMiwxMCBAQAogaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAogICBpZiAlMSBFUVUgRGVidWcgKAogICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzNfZC5kbGwgZXhpdCAxCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjM0X2QuZGxsIGV4aXQgMQogICApIEVMU0UgKAogICAgIHNldCBIT1NUX1BZVEhPTj1weXRob24uZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjMzLmRsbCBleGl0IDEKKyAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzQuZGxsIGV4aXQgMQogICApCiApCiAlSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMiAlMwpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZF9zc2wucHkgYi9QQ2J1aWxkL2J1aWxkX3NzbC5weQppbmRleCA1YTdhODllLi4yNjBjYmYzIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3NzbC5weQorKysgYi9QQ2J1aWxkL2J1aWxkX3NzbC5weQpAQCAtMjQsNiArMjQsNyBAQAogIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIFdpbjMyCiAKIGltcG9ydCBvcywgc3lzLCByZSwgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcwogCiAjIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KIGRlZiBmaW5kX2FsbF9vbl9wYXRoKGZpbGVuYW1lLCBleHRyYXMgPSBOb25lKToKQEAgLTQ2LDI3ICs0NywyNiBAQAogIyBpcyBhdmFpbGFibGUuCiBkZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgogICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbcGVybCwgIi1lIiwgInVzZSBXaW4zMjsiXSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCgiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHBlcmwKKwogICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCgiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiKQorICAgICAgICBwcmludCgiVGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIpCiAgICAgICAgIGZvciBwIGluIHBlcmxzOgogICAgICAgICAgICAgcHJpbnQoIiAiLCBwKQogICAgICAgICBwcmludCgiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIikKICAgICBlbHNlOgotICAgICAgICBwcmludCgiIE5PIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQgb24gdGhpcyBtYWNoaW5lIGF0IGFsbCEiKQorICAgICAgICBwcmludCgiTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCiAgICAgcHJpbnQoIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiKQotICAgIHJldHVybiBOb25lCiAKICMgRmV0Y2ggU1NMIGRpcmVjdG9yeSBmcm9tIFZDIHByb3BlcnRpZXMKIGRlZiBnZXRfc3NsX2RpcigpOgogICAgIHByb3BmaWxlID0gKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAncHlwcm9qZWN0LnByb3BzJykpCi0gICAgd2l0aCBvcGVuKHByb3BmaWxlKSBhcyBmOgorICAgIHdpdGggb3Blbihwcm9wZmlsZSwgZW5jb2Rpbmc9J3V0Zi04LXNpZycpIGFzIGY6CiAgICAgICAgIG0gPSByZS5zZWFyY2goJ29wZW5zc2wtKFtePF0rKTwnLCBmLnJlYWQoKSkKICAgICAgICAgcmV0dXJuICIuLlwuLlxvcGVuc3NsLSIrbS5ncm91cCgxKQogCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkgYi9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKaW5kZXggNDE5NmNmMy4uYzgwN2U3YiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF90a2ludGVyLnB5CisrKyBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQpAQCAtMTEsMTYgKzExLDEyIEBACiBoZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiBwYXIgPSBvcy5wYXRoLnBhcmRpcgogCi1UQ0wgPSAidGNsOC41LjExIgotVEsgPSAidGs4LjUuMTEiCi1USVggPSAidGl4LTguNC4zLngiCitUQ0wgPSAidGNsOC42LjEiCitUSyA9ICJ0azguNi4xIgorVElYID0gInRpeC04LjQuMy4zIgogCiBST09UID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihoZXJlLCBwYXIsIHBhcikpCi0jIFdpbmRvd3MgMjAwMCBjb21wYXRpYmlsaXR5OiBXSU5WRVIgMHgwNTAwCi0jIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzODM3NDUuYXNweAotTk1BS0UgPSAoJ25tYWtlIC9ub2xvZ28gL2YgJXMgJwotICAgICdDT01QSUxFUkZMQUdTPVwiLURXSU5WRVI9MHgwNTAwIC1EX1dJTjMyX1dJTk5UPTB4MDUwMCAtRE5URERJX1ZFUlNJT049TlRERElfV0lOMktTUDRcIiAnCi0gICAgJyVzICVzJykKK05NQUtFID0gKCdubWFrZSAvbm9sb2dvIC9mICVzICVzICVzJykKIAogZGVmIG5tYWtlKG1ha2VmaWxlLCBjb21tYW5kPSIiLCAqKmt3KToKICAgICBkZWZpbmVzID0gJyAnLmpvaW4oaysnPScrc3RyKHYpIGZvciBrLCB2IGluIGt3Lml0ZW1zKCkpCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMgYi9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKaW5kZXggYmIzMjNkMy4uNjA0NzMxZiAxMDA2NDQKLS0tIGEvUENidWlsZC9raWxsX3B5dGhvbi5jCisrKyBiL1BDYnVpbGQva2lsbF9weXRob24uYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFhYWCBUT0RPOiBpZiB3ZSByZWFsbHkgd2FudGVkIHRvIGJlIGZhbmN5LCB3ZSBjb3VsZCBjaGVjayB0aGUgCiAgICAgICAgICAqIG1vZHVsZXMgZm9yIGFsbCBwcm9jZXNzZXMgKG5vdCBqdXN0IHRoZSBweXRob25bX2RdLmV4ZSBvbmVzKQotICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjMzW19kXS5kbGwpLAorICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjM0W19kXS5kbGwpLAogICAgICAgICAgKiBhcyB0aGF0IHdvdWxkIGFsc28gaW5oaWJpdCBvdXIgYWJpbGl0eSB0byByZWJ1aWxkIHRoZSBzb2x1dGlvbi4KICAgICAgICAgICogTm90IHdvcnRoIGxvb3Npbmcgc2xlZXAgb3ZlciB0aG91Z2g7IGZvciBub3csIGEgc2ltcGxlIGNoZWNrIAogICAgICAgICAgKiBmb3IganVzdCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3BjYnVpbGQuc2xuIGIvUENidWlsZC9wY2J1aWxkLnNsbgppbmRleCBkNmEwMjJmLi5hMzQ2ZTEwIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3BjYnVpbGQuc2xuCisrKyBiL1BDYnVpbGQvcGNidWlsZC5zbG4KQEAgLTE0LDggKzE0LDYgQEAKIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbnciLCAicHl0aG9udy52Y3hwcm9qIiwgIntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KIEVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjeHByb2oiLCAie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmN4cHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3aW5zb3VuZCIsICJ3aW5zb3VuZC52Y3hwcm9qIiwgInsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9Ig0KQEAgLTM4LDYgKzM2LDggQEAKIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0Y2FwaSIsICJfdGVzdGNhcGkudmN4cHJvaiIsICJ7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfSINCiBFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGltcG9ydG11bHRpcGxlIiwgIl90ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvaiIsICJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCitFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3hwcm9qIiwgIns0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9iejIiLCAiX2J6Mi52Y3hwcm9qIiwgIns3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9Ig0KQEAgLTc0LDYgKzc0LDEwIEBACiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfZnJlZXplX2ltcG9ydGxpYiIsICJfZnJlZXplX2ltcG9ydGxpYi52Y3hwcm9qIiwgInsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9Ig0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9vdmVybGFwcGVkIiwgIl9vdmVybGFwcGVkLnZjeHByb2oiLCAie0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RlbWJlZCIsICJfdGVzdGVtYmVkLnZjeHByb2oiLCAiezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0iDQorRW5kUHJvamVjdA0KIEdsb2JhbA0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KIAkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KQEAgLTE1MCwyMiArMTU0LDYgQEAKIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KQEAgLTM0Miw2ICszMzAsMjIgQEAKIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCkBAIC02MTEsNiArNjE1LDM2IEBACiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJRW5kR2xvYmFsU2VjdGlvbg0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KIAkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXByb2plY3QucHJvcHMgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwppbmRleCA4MTU1MjMxLi4wYjUxM2NlIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcworKysgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwpAQCAtMTMsMjAgKzEzLDIwIEBACiAgICAgPEludERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiPgotICAgIDxQeURsbE5hbWU+cHl0aG9uMzMkKFB5RGVidWdFeHQpPC9QeURsbE5hbWU+CisgICAgPFB5RGxsTmFtZT5weXRob24zNCQoUHlEZWJ1Z0V4dCk8L1B5RGxsTmFtZT4KICAgICA8UHl0aG9uRXhlPiQoT3V0RGlyKXB5dGhvbiQoUHlEZWJ1Z0V4dCkuZXhlPC9QeXRob25FeGU+CiAgICAgPEtpbGxQeXRob25FeGU+JChPdXREaXIpa2lsbF9weXRob24kKFB5RGVidWdFeHQpLmV4ZTwvS2lsbFB5dGhvbkV4ZT4KICAgICA8ZXh0ZXJuYWxzRGlyPi4uXC4uPC9leHRlcm5hbHNEaXI+Ci0gICAgPHNxbGl0ZTNEaXI+JChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjcuMTI8L3NxbGl0ZTNEaXI+CisgICAgPHNxbGl0ZTNEaXI+JChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjguMy4xPC9zcWxpdGUzRGlyPgogICAgIDxiejJEaXI+JChleHRlcm5hbHNEaXIpXGJ6aXAyLTEuMC42PC9iejJEaXI+Ci0gICAgPGx6bWFEaXI+JChleHRlcm5hbHNEaXIpXHh6LTUuMC4zPC9sem1hRGlyPgotICAgIDxvcGVuc3NsRGlyPiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4xZTwvb3BlbnNzbERpcj4KKyAgICA8bHptYURpcj4kKGV4dGVybmFsc0RpcilceHotNS4wLjU8L2x6bWFEaXI+CisgICAgPG9wZW5zc2xEaXI+JChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFpPC9vcGVuc3NsRGlyPgogICAgIDx0Y2x0a0Rpcj4kKGV4dGVybmFsc0RpcilcdGNsdGs8L3RjbHRrRGlyPgogICAgIDx0Y2x0azY0RGlyPiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azY0PC90Y2x0azY0RGlyPgotICAgIDx0Y2x0a0xpYj4kKHRjbHRrRGlyKVxsaWJcdGNsODUubGliOyQodGNsdGtEaXIpXGxpYlx0azg1LmxpYjwvdGNsdGtMaWI+Ci0gICAgPHRjbHRrTGliRGVidWc+JCh0Y2x0a0RpcilcbGliXHRjbDg1Zy5saWI7JCh0Y2x0a0RpcilcbGliXHRrODVnLmxpYjwvdGNsdGtMaWJEZWJ1Zz4KLSAgICA8dGNsdGs2NExpYj4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NS5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NS5saWI8L3RjbHRrNjRMaWI+Ci0gICAgPHRjbHRrNjRMaWJEZWJ1Zz4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NWcubGliOyQodGNsdGs2NERpcilcbGliXHRrODVnLmxpYjwvdGNsdGs2NExpYkRlYnVnPgorICAgIDx0Y2x0a0xpYj4kKHRjbHRrRGlyKVxsaWJcdGNsODZ0LmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NnQubGliPC90Y2x0a0xpYj4KKyAgICA8dGNsdGtMaWJEZWJ1Zz4kKHRjbHRrRGlyKVxsaWJcdGNsODZ0Zy5saWI7JCh0Y2x0a0RpcilcbGliXHRrODZ0Zy5saWI8L3RjbHRrTGliRGVidWc+CisgICAgPHRjbHRrNjRMaWI+JCh0Y2x0azY0RGlyKVxsaWJcdGNsODZ0LmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg2dC5saWI8L3RjbHRrNjRMaWI+CisgICAgPHRjbHRrNjRMaWJEZWJ1Zz4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NnRnLmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg2dGcubGliPC90Y2x0azY0TGliRGVidWc+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KQEAgLTQ5LDkgKzQ5LDggQEAKICAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgogICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CiAgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KLSAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPnRydWU8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj50cnVlPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICAgIDxSZXNvdXJjZUNvbXBpbGU+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qIGIvUENidWlsZC9weXRob24udmN4cHJvagppbmRleCBkMGE5ZGUwLi5iZDEyNjI0IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgIDxMaW5rPgogICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9uX2QuZXhlPC9PdXRwdXRGaWxlPgogICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8U3RhY2tSZXNlcnZlU2l6ZT4yMTAwMDAwPC9TdGFja1Jlc2VydmVTaXplPgorICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+NDE5NDMwNDwvU3RhY2tSZXNlcnZlU2l6ZT4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KQEAgLTM1NywxMiArMzU3LDggQEAKICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KICAgICA8L1Byb2plY3RSZWZlcmVuY2U+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0idzl4cG9wZW4udmN4cHJvaiI+Ci0gICAgICA8UHJvamVjdD57ZTllMGExZjYtMDAwOS00ZThjLWI4ZjgtMWI4ZjVkNDlhMDU4fTwvUHJvamVjdD4KLSAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+Ci0gICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvaiBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCmluZGV4IDhiNWM0MmYuLjYwMjFjZDcgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCisrKyBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICA8L1Jlc291cmNlQ29tcGlsZT4KICAgICA8UHJlTGlua0V2ZW50PgogICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKSI8L0NvbW1hbmQ+CisgICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KQEAgLTE4NCw3ICsxODQsNyBAQAogICAgIDxQcmVCdWlsZEV2ZW50PgogICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQogSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJuaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKKyAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCiAgICAgZXhpdCAvYiAwCiApPC9Db21tYW5kPgogICAgIDwvUHJlQnVpbGRFdmVudD4KQEAgLTIwOSw3ICsyMDksNyBAQAogICAgIDwvUmVzb3VyY2VDb21waWxlPgogICAgIDxQcmVMaW5rRXZlbnQ+CiAgICAgICA8TWVzc2FnZT5HZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLjwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpIjwvQ29tbWFuZD4KKyAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpXCI8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKEludERpcilnZXRidWlsZGluZm8ubzslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMjE5LDcgKzIxOSw3IEBACiAgICAgPFByZUJ1aWxkRXZlbnQ+CiAgICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCiBJRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQorICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKICAgICBleGl0IC9iIDAKICk8L0NvbW1hbmQ+CiAgICAgPC9QcmVCdWlsZEV2ZW50PgpAQCAtMjU0LDcgKzI1NCw3IEBACiAgICAgPFByZUJ1aWxkRXZlbnQ+CiAgICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCiBJRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQorICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKICAgICBleGl0IC9iIDAKICk8L0NvbW1hbmQ+CiAgICAgPC9QcmVCdWlsZEV2ZW50PgpAQCAtMjkyLDcgKzI5Miw3IEBACiAgICAgPFByZUJ1aWxkRXZlbnQ+CiAgICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCiBJRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQorICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKICAgICBleGl0IC9iIDAKICk8L0NvbW1hbmQ+CiAgICAgPC9QcmVCdWlsZEV2ZW50PgpAQCAtMzE0LDcgKzMxNCw3IEBACiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+CiAgICAgPFByZUxpbmtFdmVudD4KICAgICAgIDxNZXNzYWdlPkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uPC9NZXNzYWdlPgotICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcikiPC9Db21tYW5kPgorICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcilcIjwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoSW50RGlyKWdldGJ1aWxkaW5mby5vOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CkBAIC0zMjUsNyArMzI1LDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC0zNTAsNyArMzUwLDcgQEAKICAgICA8L1Jlc291cmNlQ29tcGlsZT4KICAgICA8UHJlTGlua0V2ZW50PgogICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKSI8L0NvbW1hbmQ+CisgICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KQEAgLTM2MSw3ICszNjEsNyBAQAogICAgIDxQcmVCdWlsZEV2ZW50PgogICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQogSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJuaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKKyAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCiAgICAgZXhpdCAvYiAwCiApPC9Db21tYW5kPgogICAgIDwvUHJlQnVpbGRFdmVudD4KQEAgLTM4Myw3ICszODMsNyBAQAogICAgIDwvUmVzb3VyY2VDb21waWxlPgogICAgIDxQcmVMaW5rRXZlbnQ+CiAgICAgICA8TWVzc2FnZT5HZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLjwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpIjwvQ29tbWFuZD4KKyAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpXCI8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKEludERpcilnZXRidWlsZGluZm8ubzslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMzk0LDcgKzM5NCw3IEBACiAgICAgPFByZUJ1aWxkRXZlbnQ+CiAgICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCiBJRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQorICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKICAgICBleGl0IC9iIDAKICk8L0NvbW1hbmQ+CiAgICAgPC9QcmVCdWlsZEV2ZW50PgpAQCAtNDE5LDcgKzQxOSw3IEBACiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+CiAgICAgPFByZUxpbmtFdmVudD4KICAgICAgIDxNZXNzYWdlPkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uPC9NZXNzYWdlPgotICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcikiPC9Db21tYW5kPgorICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcilcIjwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoSW50RGlyKWdldGJ1aWxkaW5mby5vOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CkBAIC00MzAsNyArNDMwLDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC00OTIsNiArNDkyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccGF0Y2hsZXZlbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxwZ2VuLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHBnZW5oZWFkZXJzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5aGFzaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweV9jdXJzZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHlhcmVuYS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWNhcHN1bGUuaCIgLz4KQEAgLTUyOCw3ICs1MjksMTEgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVcdW5pY29kZW9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVx3ZWFrcmVmb2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9tYXRoLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGhhc2h0YWJsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9jb25zdGFudHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2xpYi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHpsaWJcY3JjMzIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmgiIC8+CkBAIC01NTUsNiArNTYwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXGZhc3RzZWFyY2guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXGZpbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccmVwbGFjZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcc3BsaXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcdW5pY29kZXR5cGVfZGIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFBhcnNlclxwYXJzZXIuaCIgLz4KQEAgLTU4MCw2ICs1ODYsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfcGlja2xlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NyZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3RhdC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3RydWN0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF93ZWFrcmVmLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMiIC8+CkBAIC01OTEsMTIgKzU5OCwxNCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xmYXVsdGhhbmRsZXIuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtYWluLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3BlcmF0b3IuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wY29kZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfb3BlcmF0b3IuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIiAvPgpAQCAtNjA2LDYgKzYxNSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90cmFjZW1hbGxvYy5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHh4c3VidHlwZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyIgLz4KQEAgLTY5MSw2ICs3MDEsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcZGxfbnQuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXGdldHBhdGhwLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xtc3ZjcnRtb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWhhc2guYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxyYW5kb20uYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxfd2FybmluZ3MuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxhc2RsLmMiIC8+CkBAIC03NTcsNCArNzY4LDQgQEAKICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA1NjQ3ZmViLi44YzY1MjQ3IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTMwMCw2ICszMDAsMTUgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZS5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfY29uc3RhbnRzLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9saWIuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1xfaW88L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTM3OCw2ICszODcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccGFydGl0aW9uLmgiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxyZXBsYWNlLmgiPgorICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIj4KICAgICAgIDxGaWx0ZXI+T2JqZWN0czwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDA4LDkgKzQyMCwxNSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cUHl0aG9uXGNldmFsX2dpbC5oIj4KICAgICAgIDxGaWx0ZXI+UHl0aG9uPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5aGFzaC5oIj4KKyAgICAgIDxGaWx0ZXI+SW5jbHVkZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxuYW1lc3BhY2VvYmplY3QuaCI+CiAgICAgICA8RmlsdGVyPkluY2x1ZGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiPgpAQCAtNTAwLDcgKzUxOCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3BlcmF0b3IuYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGVyYXRvci5jIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyI+CkBAIC05MTcsOSArOTM1LDI0IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF93aW5hcGkuYyI+CiAgICAgICA8RmlsdGVyPlBDPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdGF0LmMiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHloYXNoLmMiPgorICAgICAgPEZpbHRlcj5QeXRob248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE9iamVjdHNcbmFtZXNwYWNlb2JqZWN0LmMiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGNvZGUuYyI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3RyYWNlbWFsbG9jLmMiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGhhc2h0YWJsZS5jIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyI+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3JlYWRtZS50eHQgYi9QQ2J1aWxkL3JlYWRtZS50eHQKaW5kZXggNmYwNzY4OS4uN2Q1NzcyNiAxMDA2NDQKLS0tIGEvUENidWlsZC9yZWFkbWUudHh0CisrKyBiL1BDYnVpbGQvcmVhZG1lLnR4dApAQCAtMSwyMDAgKzEsMjY0IEBACi1CdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyAxMC4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCdWlsZGluZyBQeXRob24gdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgYW5kIHg2NCBwbGF0Zm9ybXMsIGUuZy4KLVdpbmRvd3MgWFAsIFZpc3RhIGFuZCBXaW5kb3dzIFNlcnZlciAyMDA4LiAgSW4gb3JkZXIgdG8gYnVpbGQgMzItYml0Ci1kZWJ1ZyBhbmQgcmVsZWFzZSBleGVjdXRhYmxlcywgTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMCBFeHByZXNzIEVkaXRpb24gaXMKLXJlcXVpcmVkIGF0IHRoZSB2ZXJ5IGxlYXN0LiAgSW4gb3JkZXIgdG8gYnVpbGQgNjQtYml0IGRlYnVnIGFuZCByZWxlYXNlCi1leGVjdXRhYmxlcywgVmlzdWFsIFN0dWRpbyAyMDEwIFN0YW5kYXJkIEVkaXRpb24gaXMgcmVxdWlyZWQgYXQgdGhlIHZlcnkKLWxlYXN0LiAgSW4gb3JkZXIgdG8gYnVpbGQgYWxsIG9mIHRoZSBhYm92ZSwgYXMgd2VsbCBhcyBnZW5lcmF0ZSByZWxlYXNlIGJ1aWxkcwotdGhhdCBtYWtlIHVzZSBvZiBQcm9maWxlIEd1aWRlZCBPcHRpbWlzYXRpb24gKFBHMCksIFZpc3VhbCBTdHVkaW8gMjAxMAotUHJvZmVzc2lvbmFsIEVkaXRpb24gaXMgcmVxdWlyZWQgYXQgdGhlIHZlcnkgbGVhc3QuICBUaGUgb2ZmaWNpYWwgUHl0aG9uCi1yZWxlYXNlcyBhcmUgYnVpbHQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmlzdWFsIFN0dWRpby4KK1RoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgQ1B5dGhvbiBmb3IgTWljcm9zb2Z0IFdpbmRvd3MgTlQgdmVyc2lvbgorNS4xIG9yIGhpZ2hlciAoV2luZG93cyBYUCwgV2luZG93cyBTZXJ2ZXIgMjAwMywgb3IgbGF0ZXIpIG9uIDMyIGFuZCA2NAorYml0IHBsYXRmb3Jtcy4gIFVzaW5nIHRoaXMgZGlyZWN0b3J5IHJlcXVpcmVzIGFuIGluc3RhbGxhdGlvbiBvZgorTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMCAoTVNWQyAxMC4wKSBvZiBhbnkgZWRpdGlvbi4gIFRoZSBzcGVjaWZpYworcmVxdWlyZW1lbnRzIGFyZSBhcyBmb2xsb3dzOgogCi1Gb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL1BDL3JlYWRtZS50eHQuCitWaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uCisgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIDMyLWJpdCBEZWJ1ZyBhbmQgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcy4KKyAgICBUaGUgUHl0aG9uIGJ1aWxkIHNvbHV0aW9uIHBjYnVpbGQuc2xuIG1ha2VzIHVzZSBvZiBTb2x1dGlvbiBGb2xkZXJzLAorICAgIHdoaWNoIHRoaXMgZWRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0LiAgQW55IHRpbWUgcGNidWlsZC5zbG4gaXMgb3BlbmVkCisgICAgb3IgcmVsb2FkZWQgYnkgVmlzdWFsIEMrKywgYSB3YXJuaW5nIGFib3V0IFNvbHV0aW9uIEZvbGRlcnMgd2lsbCBiZQorICAgIGRpc3BsYXllZCB3aGljaCBjYW4gYmUgc2FmZWx5IGRpc21pc3NlZCB3aXRoIG5vIGltcGFjdCBvbiB5b3VyCisgICAgYWJpbGl0eSB0byBidWlsZCBQeXRob24uCitWaXN1YWwgU3R1ZGlvIDIwMTAgUHJvZmVzc2lvbmFsIEVkaXRpb24KKyAgICBSZXF1aXJlZCBmb3IgYnVpbGRpbmcgNjQtYml0IERlYnVnIGFuZCBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gYnVpbGRzCitWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlbWl1bSBFZGl0aW9uCisgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMgdGhhdCBtYWtlIHVzZSBvZgorICAgIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbiAoUEdPKSwgb24gZWl0aGVyIHBsYXRmb3JtLgogCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLnNsbiIgaW4gVmlzdWFsIFN0dWRpbywKLXNlbGVjdCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBwbGF0Zm9ybSBhbmQgZXZlbnR1YWxseQotYnVpbGQgdGhlIHNvbHV0aW9uLiBVbmxlc3MgeW91IGFyZSBnb2luZyB0byBkZWJ1ZyBhIHByb2JsZW0gaW4gdGhlIGNvcmUgb3IKLXlvdSBhcmUgZ29pbmcgdG8gY3JlYXRlIGFuIG9wdGltaXplZCBidWlsZCB5b3Ugd2FudCB0byBzZWxlY3QgIlJlbGVhc2UiIGFzCi1jb25maWd1cmF0aW9uLgorSW5zdGFsbGluZyBTZXJ2aWNlIFBhY2sgMSBmb3IgVmlzdWFsIFN0dWRpbyAyMDEwIGlzIGhpZ2hseSByZWNvbW1lbmRlZAordG8gYXZvaWQgTE5LMTEyMyBlcnJvcnMuCiAKLVRoZSBQQ2J1aWxkIGRpcmVjdG9yeSBpcyBjb21wYXRpYmxlIHdpdGggYWxsIHZlcnNpb25zIG9mIFZpc3VhbCBTdHVkaW8gZnJvbQotVlMgQysrIEV4cHJlc3MgRWRpdGlvbiBvdmVyIHRoZSBzdGFuZGFyZCBlZGl0aW9uIHVwIHRvIHRoZSBwcm9mZXNzaW9uYWwKLWVkaXRpb24uIEhvd2V2ZXIgdGhlIGV4cHJlc3MgZWRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmVzIGxpa2Ugc29sdXRpb24KLWZvbGRlcnMgb3IgcHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uIChQR08pLiBUaGUgbWlzc2luZyBiaXRzIGFuZCBwaWVjZXMKLXdvbid0IHN0b3AgeW91IGZyb20gYnVpbGRpbmcgUHl0aG9uLgorQWxsIHlvdSBuZWVkIHRvIGRvIHRvIGJ1aWxkIGlzIG9wZW4gdGhlIHNvbHV0aW9uICJwY2J1aWxkLnNsbiIgaW4gVmlzdWFsCitTdHVkaW8sIHNlbGVjdCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBwbGF0Zm9ybSwKK3RoZW4gYnVpbGQgd2l0aCAiQnVpbGQgU29sdXRpb24iIG9yIHRoZSBGNyBrZXlib2FyZCBzaG9ydGN1dC4gIFlvdSBjYW4KK2Fsc28gYnVpbGQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHVzaW5nIHRoZSAiYnVpbGQuYmF0IiBzY3JpcHQgaW4gdGhpcworZGlyZWN0b3J5LiAgVGhlIHNvbHV0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgdGhlIHByb2plY3RzIGluIHRoZQorY29ycmVjdCBvcmRlci4KIAotVGhlIHNvbHV0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgdGhlIHByb2plY3RzIGluIHRoZSBjb3JyZWN0IG9yZGVyLiAiQnVpbGQKLVNvbHV0aW9uIiBvciBGNyB0YWtlcyBjYXJlIG9mIGRlcGVuZGVuY2llcyBleGNlcHQgZm9yIHg2NCBidWlsZHMuIFRvIG1ha2UKLWNyb3NzIGNvbXBpbGluZyB4NjQgYnVpbGRzIG9uIGEgMzJiaXQgT1MgcG9zc2libGUgdGhlIHg2NCBidWlsZHMgcmVxdWlyZSBhCi0zMmJpdCB2ZXJzaW9uIG9mIFB5dGhvbi4KK1RoZSBzb2x1dGlvbiBjdXJyZW50bHkgc3VwcG9ydHMgdHdvIHBsYXRmb3Jtcy4gIFRoZSBXaW4zMiBwbGF0Zm9ybSBpcwordXNlZCB0byBidWlsZCBzdGFuZGFyZCB4ODYtY29tcGF0aWJsZSAzMi1iaXQgYmluYXJpZXMsIG91dHB1dCBpbnRvIHRoaXMKK2RpcmVjdG9yeS4gIFRoZSB4NjQgcGxhdGZvcm0gaXMgdXNlZCBmb3IgYnVpbGRpbmcgNjQtYml0IEFNRDY0IChha2EKK3g4Nl82NCBvciBFTTY0VCkgYmluYXJpZXMsIG91dHB1dCBpbnRvIHRoZSBhbWQ2NCBzdWItZGlyZWN0b3J5IHdoaWNoCit3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgVGhlIEl0YW5pdW0gKElBLTY0KQorcGxhdGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIFNlZSB0aGUgIkJ1aWxkaW5nIGZvciBBTUQ2NCIgc2VjdGlvbgorYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgNjQtYml0IGJ1aWxkcy4KIAotTk9URToKLSAgIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGJ1aWxkIG1vc3Qgb2YgdGhlIG90aGVyIHN1YnByb2plY3RzLCB1bmxlc3MKLSAgIHlvdSdyZSBidWlsZGluZyBhbiBlbnRpcmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiBmcm9tIHNjcmF0Y2gsIG9yCi0gICBzcGVjaWZpY2FsbHkgbWFraW5nIGNoYW5nZXMgdG8gdGhlIHN1YnN5c3RlbXMgdGhleSBpbXBsZW1lbnQsIG9yIGFyZQotICAgcnVubmluZyBhIFB5dGhvbiBjb3JlIGJ1aWxkYm90IHRlc3Qgc2xhdmU7IHNlZSBTVUJQUk9KRUNUUyBiZWxvdykKK0ZvdXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHNvbHV0aW9uOgorRGVidWcKKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiB3aXRoIGV4dHJhIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMsIGVxdWl2YWxlbnQKKyAgICB0byB1c2luZyAuL2NvbmZpZ3VyZSAtLXdpdGgtcHlkZWJ1ZyBvbiBVTklYLiAgQWxsIGJpbmFyaWVzIGJ1aWx0CisgICAgdXNpbmcgdGhpcyBjb25maWd1cmF0aW9uIGhhdmUgIl9kIiBhZGRlZCB0byB0aGVpciBuYW1lOgorICAgIHB5dGhvbjM0X2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLiAgQm90aCB0aGUKKyAgICBidWlsZCBhbmQgcnQgKHJ1biB0ZXN0KSBiYXRjaCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhY2NlcHQgYSAtZAorICAgIG9wdGlvbiBmb3IgZGVidWcgYnVpbGRzLiAgSWYgeW91IGFyZSBidWlsZGluZyBQeXRob24gdG8gaGVscCB3aXRoCisgICAgZGV2ZWxvcG1lbnQgb2YgQ1B5dGhvbiwgeW91IHdpbGwgbW9zdCBsaWtlbHkgdXNlIHRoaXMgY29uZmlndXJhdGlvbi4KK1BHSW5zdHJ1bWVudCwgUEdVcGRhdGUKKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBpbiBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUEdPLCB3aGljaAorICAgIHJlcXVpcmVzIFByZW1pdW0gRWRpdGlvbiBvZiBWaXN1YWwgU3R1ZGlvLiAgU2VlIHRoZSAiUHJvZmlsZQorICAgIEd1aWRlZCBPcHRpbWl6YXRpb24iIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBCdWlsZAorICAgIG91dHB1dCBmcm9tIGVhY2ggb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgbGFuZHMgaW4gaXRzIG93bgorICAgIHN1Yi1kaXJlY3Rvcnkgb2YgdGhpcyBkaXJlY3RvcnkuICBUaGUgb2ZmaWNpYWwgUHl0aG9uIHJlbGVhc2VzIGFyZQorICAgIGJ1aWx0IHVzaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgorUmVsZWFzZQorICAgIFVzZWQgdG8gYnVpbGQgUHl0aG9uIGFzIGl0IGlzIG1lYW50IHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbgorICAgIHNldHRpbmdzLCB0aG91Z2ggd2l0aG91dCBQR08uCiAKLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uIEJvdGgKLXRoZSBidWlsZCBhbmQgcnQgYmF0Y2ggZmlsZXMgYWNjZXB0IGEgLWQgb3B0aW9uIGZvciBkZWJ1ZyBidWlsZHMuCi0KLVRoZSAzMmJpdCBidWlsZHMgZW5kIHVwIGluIHRoZSBzb2x1dGlvbiBmb2xkZXIgUENidWlsZCB3aGlsZSB0aGUgeDY0IGJ1aWxkcwotbGFuZCBpbiB0aGUgYW1kNjQgc3ViZm9sZGVyLiBUaGUgUEdJIGFuZCBQR08gYnVpbGRzIGZvciBwcm9maWxlIGd1aWRlZAotb3B0aW1pemF0aW9uIGVuZCB1cCBpbiB0aGVpciBvd24gZm9sZGVycywgdG9vLgogCiBMZWdhY3kgc3VwcG9ydAogLS0tLS0tLS0tLS0tLS0KIAogWW91IGNhbiBmaW5kIGJ1aWxkIGRpcmVjdG9yaWVzIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGFuZAotVmlzdWFsIEMrKyBpbiB0aGUgUEMgZGlyZWN0b3J5LiBUaGUgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBubyBsb25nZXIKLWFjdGl2ZWx5IG1haW50YWluZWQgYW5kIG1heSBub3Qgd29yayBvdXQgb2YgdGhlIGJveC4KK1Zpc3VhbCBDKysgaW4gdGhlIFBDIGRpcmVjdG9yeS4gVGhlIGxlZ2FjeSBidWlsZCBkaXJlY3RvcmllcyBhcmUgbm8KK2xvbmdlciBhY3RpdmVseSBtYWludGFpbmVkIGFuZCBtYXkgbm90IHdvcmsgb3V0IG9mIHRoZSBib3guCiAKLVBDL1ZDNi8KLSAgICBWaXN1YWwgQysrIDYuMAotUEMvVlM3LjEvCi0gICAgVmlzdWFsIFN0dWRpbyAyMDAzICg3LjEpCi1QQy9WUzguMC8KLSAgICBWaXN1YWwgU3R1ZGlvIDIwMDUgKDguMCkKLVBDL1ZTOS4wLwotICAgIFZpc3VhbCBTdHVkaW8gMjAwOCAoOS4wKQorQ3VycmVudGx5LCB0aGUgb25seSBsZWdhY3kgYnVpbGQgZGlyZWN0b3J5IGlzIFBDXFZTOS4wLCBmb3IgVmlzdWFsCitTdHVkaW8gMjAwOCAoOS4wKS4KIAogCi1DIFJVTlRJTUUKK0MgUnVudGltZQogLS0tLS0tLS0tCiAKLVZpc3VhbCBTdHVkaW8gMjAxMCB1c2VzIHZlcnNpb24gMTAgb2YgdGhlIEMgcnVudGltZSAoTVNWQ1JUMTApLiAgVGhlIGV4ZWN1dGFibGVzCi1ubyBsb25nZXIgdXNlIHRoZSAiU2lkZSBieSBTaWRlIiBhc3NlbWJsaWVzIHVzZWQgaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlCi1jb21waWxlci4gIFRoaXMgc2ltcGxpZmllcyBkaXN0cmlidXRpb24gb2YgYXBwbGljYXRpb25zLgotVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBWQy9SZWRpc3QgZm9sZGVyIG9mIHlvdXIgdmlzdWFsIHN0dWRpbwotZGlzdHJpYnV0aW9uLiBGb3IgbW9yZSBpbmZvLCBzZWUgdGhlIFJlYWRtZSBpbiB0aGUgVkMvUmVkaXN0IGZvbGRlci4KK1Zpc3VhbCBTdHVkaW8gMjAxMCB1c2VzIHZlcnNpb24gMTAgb2YgdGhlIEMgcnVudGltZSAoTVNWQ1JUMTApLiAgVGhlCitleGVjdXRhYmxlcyBubyBsb25nZXIgdXNlIHRoZSAiU2lkZSBieSBTaWRlIiBhc3NlbWJsaWVzIHVzZWQgaW4gcHJldmlvdXMKK3ZlcnNpb25zIG9mIHRoZSBjb21waWxlci4gIFRoaXMgc2ltcGxpZmllcyBkaXN0cmlidXRpb24gb2YgYXBwbGljYXRpb25zLgogCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgorVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBWQy9SZWRpc3QgZm9sZGVyIG9mIHlvdXIKK1Zpc3VhbCBTdHVkaW8gZGlzdHJpYnV0aW9uLiBGb3IgbW9yZSBpbmZvLCBzZWUgdGhlIFJlYWRtZSBpbiB0aGUKK1ZDL1JlZGlzdCBmb2xkZXIuCiAKKworU3ViLVByb2plY3RzCistLS0tLS0tLS0tLS0KKworVGhlIENQeXRob24gcHJvamVjdCBpcyBzcGxpdCB1cCBpbnRvIHNldmVyYWwgc21hbGxlciBzdWItcHJvamVjdHMgd2hpY2gKK2FyZSBtYW5hZ2VkIGJ5IHRoZSBwY2J1aWxkLnNsbiBzb2x1dGlvbiBmaWxlLiAgRWFjaCBzdWItcHJvamVjdCBpcworcmVwcmVzZW50ZWQgYnkgYSAudmN4cHJvaiBhbmQgYSAudmN4cHJvai5maWx0ZXJzIGZpbGUgc3RhcnRpbmcgd2l0aCB0aGUKK25hbWUgb2YgdGhlIHN1Yi1wcm9qZWN0LiAgVGhlc2Ugc3ViLXByb2plY3RzIGZhbGwgaW50byBhIGZldyBnZW5lcmFsCitjYXRlZ29yaWVzOgorCitUaGUgZm9sbG93aW5nIHN1Yi1wcm9qZWN0cyByZXByZXNlbnQgdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCB0byBidWlsZAorYSBmdW5jdGlvbmluZyBDUHl0aG9uIGludGVycHJldGVyLiAgSWYgbm90aGluZyBlbHNlIGJ1aWxkcyBidXQgdGhlc2UsCit5b3UnbGwgaGF2ZSBhIHZlcnkgbGltaXRlZCBidXQgdXNhYmxlIHB5dGhvbi5leGU6CiBweXRob25jb3JlCiAgICAgLmRsbCBhbmQgLmxpYgogcHl0aG9uCiAgICAgLmV4ZQora2lsbF9weXRob24KKyAgICBraWxsX3B5dGhvbi5leGUsIGEgc21hbGwgcHJvZ3JhbSBkZXNpZ25lZCB0byBraWxsIGFueSBpbnN0YW5jZXMgb2YKKyAgICBweXRob24oX2QpLmV4ZSB0aGF0IGFyZSBydW5uaW5nIGFuZCBsaXZlIGluIHRoZSBidWlsZCBvdXRwdXQKKyAgICBkaXJlY3Rvcnk7IHRoaXMgaXMgbWVhbnQgdG8gYXZvaWQgYnVpbGQgaXNzdWVzIGR1ZSB0byBsb2NrZWQgZmlsZXMKK21ha2VfYnVpbGRpbmZvLCBtYWtlX3ZlcnNpb25pbmZvCisgICAgaGVscGVycyB0byBwcm92aWRlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byB0aGUgYnVpbGQgcHJvY2VzcworCitUaGVzZSBzdWItcHJvamVjdHMgcHJvdmlkZSBleHRyYSBleGVjdXRhYmxlcyB0aGF0IGFyZSB1c2VmdWwgZm9yIHJ1bm5pbmcKK0NQeXRob24gaW4gZGlmZmVyZW50IHdheXM6CiBweXRob253Ci0gICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94CisgICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBvcGVuIGEgQ29tbWFuZAorICAgIFByb21wdCB3aW5kb3cKK3B5bGF1bmNoZXIKKyAgICBweS5leGUsIHRoZSBQeXRob24gTGF1bmNoZXIgZm9yIFdpbmRvd3MsIHNlZQorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI2xhdW5jaGVyCitweXdsYXVuY2hlcgorICAgIHB5dy5leGUsIGEgdmFyaWFudCBvZiBweS5leGUgdGhhdCBkb2Vzbid0IG9wZW4gYSBDb21tYW5kIFByb21wdAorICAgIHdpbmRvdworX3Rlc3RlbWJlZAorICAgIF90ZXN0ZW1iZWQuZXhlLCBhIHNtYWxsIHByb2dyYW0gdGhhdCBlbWJlZHMgUHl0aG9uIGZvciB0ZXN0aW5nCisgICAgcHVycG9zZXMsIHVzZWQgYnkgdGVzdF9jYXBpLnB5CisKK1RoZXNlIGFyZSBtaXNjZWxsYW5lb3VzIHN1Yi1wcm9qZWN0cyB0aGF0IGRvbid0IHJlYWxseSBmaXQgdGhlIG90aGVyCitjYXRlZ29yaWVzLiAgQnkgZGVmYXVsdCwgdGhlc2UgcHJvamVjdHMgZG8gbm90IGJ1aWxkIGluIERlYnVnCitjb25maWd1cmF0aW9uOgorX2ZyZWV6ZV9pbXBvcnRsaWIKKyAgICBfZnJlZXplX2ltcG9ydGxpYi5leGUsIHVzZWQgdG8gcmVnZW5lcmF0ZSBQeXRob25caW1wb3J0bGliLmggYWZ0ZXIKKyAgICBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weQorYmRpc3Rfd2luaW5zdAorICAgIC4uXExpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTEwLjBbLWFtZDY0XS5leGUsIHRoZSBiYXNlCisgICAgZXhlY3V0YWJsZSB1c2VkIGJ5IHRoZSBkaXN0dXRpbHMgYmRpc3Rfd2luaW5zdCBjb21tYW5kCitweXRob24zZGxsCisgICAgcHl0aG9uMy5kbGwsIHRoZSBQRVAgMzg0IFN0YWJsZSBBQkkgZGxsCit4eGxpbWl0ZWQKKyAgICBidWlsZHMgYW4gZXhhbXBsZSBtb2R1bGUgdGhhdCBtYWtlcyB1c2Ugb2YgdGhlIFBFUCAzODQgU3RhYmxlIEFCSSwKKyAgICBzZWUgTW9kdWxlc1x4eGxpbWl0ZWQuYworCitUaGUgZm9sbG93aW5nIHN1Yi1wcm9qZWN0cyBhcmUgZm9yIGluZGl2aWR1YWwgbW9kdWxlcyBvZiB0aGUgc3RhbmRhcmQKK2xpYnJhcnkgd2hpY2ggYXJlIGltcGxlbWVudGVkIGluIEM7IGVhY2ggb25lIGJ1aWxkcyBhIERMTCAocmVuYW1lZCB0bworLnB5ZCkgb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcHJvamVjdDoKK19jdHlwZXMKK19jdHlwZXNfdGVzdAorX2RlY2ltYWwKK19lbGVtZW50dHJlZQorX2hhc2hsaWIKK19tc2kKK19tdWx0aXByb2Nlc3NpbmcKK19vdmVybGFwcGVkCiBfc29ja2V0Ci0gICAgc29ja2V0bW9kdWxlLmMKIF90ZXN0Y2FwaQotICAgIHRlc3RzIG9mIHRoZSBQeXRob24gQyBBUEksIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9jYXBpLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwogX3Rlc3RidWZmZXIKLSAgICBidWZmZXIgcHJvdG9jb2wgdGVzdHMsIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9idWZmZXIucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0YnVmZmVyLmMKK190ZXN0aW1wb3J0bXVsdGlwbGUKIHB5ZXhwYXQKLSAgICBQeXRob24gd3JhcHBlciBmb3IgYWNjZWxlcmF0ZWQgWE1MIHBhcnNpbmcsIHdoaWNoIGluY29ycG9yYXRlcyBzdGFibGUKLSAgICBjb2RlIGZyb20gdGhlIEV4cGF0IHByb2plY3Q6ICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGF0Lwogc2VsZWN0Ci0gICAgc2VsZWN0bW9kdWxlLmMKIHVuaWNvZGVkYXRhCi0gICAgbGFyZ2UgdGFibGVzIG9mIFVuaWNvZGUgZGF0YQogd2luc291bmQKLSAgICBwbGF5IHNvdW5kcyAodHlwaWNhbGx5IC53YXYgZmlsZXMpIHVuZGVyIFdpbmRvd3MKIAotUHl0aG9uLWNvbnRyb2xsZWQgc3VicHJvamVjdHMgdGhhdCB3cmFwIGV4dGVybmFsIHByb2plY3RzOgotX3NxbGl0ZTMKLSAgICBXcmFwcyBTUUxpdGUgMy43LjEyLCB3aGljaCBpcyBjdXJyZW50bHkgYnVpbHQgYnkgc3FsaXRlMy52Y3hwcm9qLgotX3RraW50ZXIKLSAgICBXcmFwcyB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFVubGlrZSBfc3FsaXRlMywgdGhlcmUncyBubwotICAgIGNvcnJlc3BvbmRpbmcgdGNsdGsudmN4cHJvai10eXBlIHByb2plY3QgdGhhdCBidWlsZHMgVGNsL1RrIGZyb20gdmN4cHJvaidzCi0gICAgd2l0aGluIG91ciBwY2J1aWxkLnNsbiwgd2hpY2ggbWVhbnMgdGhpcyBtb2R1bGUgZXhwZWN0cyB0byBmaW5kIGEKLSAgICBwcmUtYnVpbHQgVGNsL1RrIGluIGVpdGhlciAuLlwuLlx0Y2x0ayBmb3IgMzItYml0IG9yIC4uXC4uXHRjbHRrNjQgZm9yCi0gICAgNjQtYml0IChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuICBTZWUgYmVsb3cgZm9yIGluc3RydWN0aW9ucyB0byBidWlsZAotICAgIFRjbC9Uay4KK1RoZSBmb2xsb3dpbmcgUHl0aG9uLWNvbnRyb2xsZWQgc3ViLXByb2plY3RzIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMuCitOb3RlIHRoYXQgdGhlc2UgZXh0ZXJuYWwgbGlicmFyaWVzIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhIHdvcmtpbmcKK2ludGVycHJldGVyLCBidXQgdGhleSBkbyBpbXBsZW1lbnQgc2V2ZXJhbCBtYWpvciBmZWF0dXJlcy4gIFNlZSB0aGUKKyJHZXR0aW5nIEV4dGVybmFsIFNvdXJjZXMiIHNlY3Rpb24gYmVsb3cgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK2Fib3V0IGdldHRpbmcgdGhlIHNvdXJjZSBmb3IgYnVpbGRpbmcgdGhlc2UgbGlicmFyaWVzLiAgVGhlIHN1Yi1wcm9qZWN0cworYXJlOgogX2J6MgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnppcDIgY29tcHJlc3Npb24gbGlicmFyeS4gIEhvbWVwYWdlCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHZlcnNpb24gMS4wLjYgb2YgdGhlIGxpYmJ6aXAyIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAgICBIb21lcGFnZToKICAgICAgICAgaHR0cDovL3d3dy5iemlwLm9yZy8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjYKLQotICAgICoqIE5PVEU6IGlmIHlvdSB1c2UgdGhlIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsKC1hbWQ2NCkuYmF0IGFwcHJvYWNoIGZvcgotICAgIG9idGFpbmluZyBleHRlcm5hbCBzb3VyY2VzIHRoZW4geW91IGRvbid0IG5lZWQgdG8gbWFudWFsbHkgZ2V0IHRoZSBzb3VyY2UKLSAgICBhYm92ZSB2aWEgc3VidmVyc2lvbi4gKioKIF9sem1hCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJsem1hIGNvbXByZXNzaW9uIGxpYnJhcnkuCi0KLSAgICBEb3dubG9hZCB0aGUgcHJlLWJ1aWx0IFdpbmRvd3MgYmluYXJpZXMgZnJvbSBodHRwOi8vdHVrYWFuaS5vcmcveHovLCBhbmQKLSAgICBleHRyYWN0IHRvIC4uXHh6LTUuMC4zLiBJZiB5b3UgYXJlIHVzaW5nIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBsaWJsem1hLAotICAgIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGZyb20geHotPFZFUlNJT04+IHRvIHh6LTUuMC4zLgotCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJsem1hIGNvbXByZXNzaW9uIGxpYnJhcnksIHVzaW5nIHByZS1idWlsdAorICAgIGJpbmFyaWVzIG9mIFhaIFV0aWxzIHZlcnNpb24gNS4wLjUKKyAgICBIb21lcGFnZToKKyAgICAgICAgaHR0cDovL3R1a2Fhbmkub3JnL3h6LwogX3NzbAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgc2VjdXJlIHNvY2tldHMgbGlicmFyeS4KKyAgICBQeXRob24gd3JhcHBlciBmb3IgdmVyc2lvbiAxLjAuMWggb2YgdGhlIE9wZW5TU0wgc2VjdXJlIHNvY2tldHMKKyAgICBsaWJyYXJ5LCB3aGljaCBpcyBidWlsdCBieSBzc2wudmN4cHJvagorICAgIEhvbWVwYWdlOgorICAgICAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLwogCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCisgICAgQnVpbGRpbmcgT3BlblNTTCByZXF1aXJlcyBuYXNtLmV4ZSAodGhlIE5ldHdpZGUgQXNzZW1ibGVyKSwgdmVyc2lvbgorICAgIDIuMTAgb3IgbmV3ZXIgZnJvbQorICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvCisgICAgdG8gYmUgc29tZXdoZXJlIG9uIHlvdXIgUEFUSC4gIE1vcmUgcmVjZW50IHZlcnNpb25zIG9mIE9wZW5TU0wgbWF5CisgICAgbmVlZCBhIGxhdGVyIHZlcnNpb24gb2YgTkFTTS4gSWYgT3BlblNTTCdzIHNlbGYgdGVzdHMgZG9uJ3QgcGFzcywKKyAgICB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsIHJlYnVpbGQgb2YKKyAgICBPcGVuU1NMLgogCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0xLjAuMWUKLQotICAgICoqIE5PVEU6IGlmIHlvdSB1c2UgdGhlIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsKC1hbWQ2NCkuYmF0IGFwcHJvYWNoIGZvcgotICAgIG9idGFpbmluZyBleHRlcm5hbCBzb3VyY2VzIHRoZW4geW91IGRvbid0IG5lZWQgdG8gbWFudWFsbHkgZ2V0IHRoZSBzb3VyY2UKLSAgICBhYm92ZSB2aWEgc3VidmVyc2lvbi4gKioKLQotICAgIEFsdGVybmF0aXZlbHksIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLgotICAgIFlvdSBjYW4gKHRoZW9yZXRpY2FsbHkpIHVzZSBhbnkgdmVyc2lvbiBvZiBPcGVuU1NMIHlvdSBsaWtlIC0gdGhlCi0gICAgYnVpbGQgcHJvY2VzcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbi4KLQotICAgIFlvdSBtdXN0IGluc3RhbGwgdGhlIE5BU00gYXNzZW1ibGVyIDIuMTAgb3IgbmV3ZXIgZnJvbQotICAgICAgICBodHRwOi8vbmFzbS5zZi5uZXQKLSAgICBmb3IgeDg2IGJ1aWxkcy4gIFB1dCBuYXNtLmV4ZSBhbnl3aGVyZSBpbiB5b3VyIFBBVEguIE1vcmUgcmVjZW50Ci0gICAgdmVyc2lvbnMgb2YgT3BlblNTTCBtYXkgbmVlZCBhIGxhdGVyIHZlcnNpb24gb2YgTkFTTS4gSWYgT3BlblNTTCdzIHNlbGYKLSAgICB0ZXN0cyBkb24ndCBwYXNzLCB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsCi0gICAgcmVidWlsZCBvZiBPcGVuU1NMLgotCi0gICAgWW91IGNhbiBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCisgICAgSWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20KKyAgICBweXRob24ub3JnJ3Mgc3VidmVyc2lvbiByZXBvc2l0b3J5LCBQZXJsIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZQorICAgIG5lY2Vzc2FyeSBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLiAgQWN0aXZlUGVybCBpcyBhdmFpbGFibGUKKyAgICBmcm9tCiAgICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL2FjdGl2ZXBlcmwvCi0gICAgaWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20KLSAgICBweXRob24ncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIFRoZSBzdm4gdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbGQKLSAgICBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgorICAgIFRoZSBzdm4ucHl0aG9uLm9yZyB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsdCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5CisgICAgZmlsZXMuCiAKLSAgICBUaGUgYnVpbGQgcHJvY2VzcyBtYWtlcyBzdXJlIHRoYXQgbm8gcGF0ZW50ZWQgYWxnb3JpdGhtcyBhcmUgaW5jbHVkZWQuCi0gICAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBZb3UgbWF5IGhhdmUKLSAgICB0byBtYW51YWxseSByZW1vdmUgJChPQkpfRClcaV8qLm9iaiBmcm9tIG1zXG50Lm1hayBpZiB0aGUgYnVpbGQgcHJvY2VzcwotICAgIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIGZpbGVzIG9yIGZvcmJpZGRlbiBJREVBLiBBZ2FpbiB0aGUgZmlsZXMgcHJvdmlkZWQKLSAgICBpbiB0aGUgc3VidmVyc2lvbiByZXBvc2l0b3J5IGFyZSBhbHJlYWR5IGZpeGVkLgorICAgIFRoZSBidWlsZCBwcm9jZXNzIG1ha2VzIHN1cmUgdGhhdCBubyBwYXRlbnRlZCBhbGdvcml0aG1zIGFyZQorICAgIGluY2x1ZGVkLiAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLgorICAgIFlvdSBtYXkgaGF2ZSB0byBtYW51YWxseSByZW1vdmUgJChPQkpfRClcaV8qLm9iaiBmcm9tIG1zXG50Lm1hayBpZgorICAgIHVzaW5nIG9mZmljaWFsIHNvdXJjZXM7IHRoZSBzdm4ucHl0aG9uLm9yZy1ob3N0ZWQgdmVyc2lvbiBpcyBhbHJlYWR5CisgICAgZml4ZWQuCiAKLSAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIFBDQnVpbGQvYnVpbGRfc3NsLnB5IHRvIHBlcmZvcm0KLSAgICB0aGUgYnVpbGQuICBUaGlzIFB5dGhvbiBzY3JpcHQgbG9jYXRlcyBhbmQgYnVpbGRzIHlvdXIgT3BlblNTTAotICAgIGluc3RhbGxhdGlvbiwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBmaW5hbCAucHlkLgorICAgIFRoZSBzc2wudmN4cHJvaiBzdWItcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQ2J1aWxkL2J1aWxkX3NzbC5weSwKKyAgICB3aGljaCBsb2NhdGVzIGFuZCBidWlsZHMgT3BlblNTTC4KIAogICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAogICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQorICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4gIElmCisgICAgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5IChlLmcuLAorICAgIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZSBhCisgICAgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKICAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgogCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCisgICAgVGhlIHNzbCBzdWItcHJvamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvIGNsZWFuIHRoZSBPcGVuU1NMCisgICAgYnVpbGQ7IGlmIHlvdSBuZWVkIHRvIHJlYnVpbGQsIHlvdSdsbCBoYXZlIHRvIGNsZWFuIGl0IGJ5IGhhbmQuCitfc3FsaXRlMworICAgIFdyYXBzIFNRTGl0ZSAzLjguMy4xLCB3aGljaCBpcyBpdHNlbGYgYnVpbHQgYnkgc3FsaXRlMy52Y3hwcm9qCisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy8KK190a2ludGVyCisgICAgV3JhcHMgdmVyc2lvbiA4LjYuMSBvZiB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4KKyAgICBIb21lcGFnZToKKyAgICAgICAgaHR0cDovL3d3dy50Y2wudGsvCiAKLVRoZSBzdWJwcm9qZWN0cyBhYm92ZSB3cmFwIGV4dGVybmFsIHByb2plY3RzIFB5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCBhcwotc3VjaCwgYSBsaXR0bGUgbW9yZSB3b3JrIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGRvd25sb2FkIHRoZSByZWxldmFudCBzb3VyY2UKLWZpbGVzIGZvciBlYWNoIHByb2plY3QgYmVmb3JlIHRoZXkgY2FuIGJlIGJ1aWx0LiAgVGhlIGJ1aWxkYm90cyBkbyB0aGlzIGVhY2gKLXRpbWUgdGhleSdyZSBidWlsdCwgc28gdGhlIGVhc2llc3QgYXBwcm9hY2ggaXMgdG8gcnVuIGVpdGhlciBleHRlcm5hbC5iYXQgb3IKLWV4dGVybmFsLWFtZDY0LmJhdCBpbiB0aGUgLi5cVG9vbHNcYnVpbGRib3QgZGlyZWN0b3J5IGZyb20gLi5cLCBpLmUuOgorICAgIFVubGlrZSB0aGUgb3RoZXIgZXh0ZXJuYWwgbGlicmFyaWVzIGxpc3RlZCBhYm92ZSwgVGsgbXVzdCBiZSBidWlsdAorICAgIHNlcGFyYXRlbHkgYmVmb3JlIHRoZSBfdGtpbnRlciBtb2R1bGUgY2FuIGJlIGJ1aWx0LiBUaGlzIG1lYW5zIHRoYXQKKyAgICBhIHByZS1idWlsdCBUY2wvVGsgaW5zdGFsbGF0aW9uIGlzIGV4cGVjdGVkIGluIC4uXC4uXHRjbHRrICh0Y2x0azY0CisgICAgZm9yIDY0LWJpdCkgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuICBTZWUgIkdldHRpbmcgRXh0ZXJuYWwKKyAgICBTb3VyY2VzIiBiZWxvdyBmb3IgdGhlIGVhc2llc3QgbWV0aG9kIHRvIGVuc3VyZSBUY2wvVGsgaXMgYnVpbHQuCiAKLSAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cdHJ1bmtcUENidWlsZD5jZCAuLgotICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVuaz5Ub29sc1xidWlsZGJvdFxleHRlcm5hbC5iYXQKIAotVGhpcyBleHRyYWN0cyBhbGwgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzIGZyb20gaHR0cDovL3N2bi5weXRob24ub3JnL2V4dGVybmFsCi12aWEgU3VidmVyc2lvbiAoc28geW91J2xsIG5lZWQgYW4gc3ZuLmV4ZSBvbiB5b3VyIFBBVEgpIGFuZCBwbGFjZXMgdGhlbSBpbgotLi5cLi4gKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4gIFRoZSBleHRlcm5hbCgtYW1kNjQpLmJhdCBzY3JpcHRzIHdpbGwKLWFsc28gYnVpbGQgYSBkZWJ1ZyBidWlsZCBvZiBUY2wvVGs7IHRoZXJlIGFyZW4ndCBhbnkgZXF1aXZhbGVudCBiYXRjaCBmaWxlcwotZm9yIGJ1aWxkaW5nIHJlbGVhc2UgdmVyc2lvbnMgb2YgVGNsL1RrIGx5aW5nIGFyb3VuZCBpbiB0aGUgVG9vbHNcYnVpbGRib3QKLWRpcmVjdG9yeS4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgcmVsZWFzZSB2ZXJzaW9uIG9mIFRjbC9UayBpdCBpc24ndCBoYXJkCi10aG91Z2gsIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBleHRlcm5hbCgtYW1kNjQpLmJhdCBmaWxlIGFuZCBmaW5kIHRoZQotdHdvIG5tYWtlIGxpbmVzLCB0aGVuIGNhbGwgZWFjaCBvbmUgd2l0aG91dCB0aGUgJ0RFQlVHPTEnIHBhcmFtZXRlciwgaS5lLjoKK0dldHRpbmcgRXh0ZXJuYWwgU291cmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IGNhdGVnb3J5IG9mIHN1Yi1wcm9qZWN0cyBsaXN0ZWQgYWJvdmUgd3JhcCBleHRlcm5hbCBwcm9qZWN0cworUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIGFzIHN1Y2ggYSBsaXR0bGUgbW9yZSB3b3JrIGlzIHJlcXVpcmVkIGluCitvcmRlciB0byBkb3dubG9hZCB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGZvciBlYWNoIHByb2plY3QgYmVmb3JlIHRoZXkKK2NhbiBiZSBidWlsdC4gIFRoZSBidWlsZGJvdHMgbXVzdCBlbnN1cmUgdGhhdCBhbGwgbGlicmFyaWVzIGFyZSBwcmVzZW50CitiZWZvcmUgYnVpbGRpbmcsIHNvIHRoZSBlYXNpZXN0IGFwcHJvYWNoIGlzIHRvIHJ1biBlaXRoZXIgZXh0ZXJuYWwuYmF0CitvciBleHRlcm5hbC1hbWQ2NC5iYXQgKGRlcGVuZGluZyBvbiBwbGF0Zm9ybSkgaW4gdGhlIC4uXFRvb2xzXGJ1aWxkYm90CitkaXJlY3RvcnkgZnJvbSAuLlwsIGkuZS46CisKKyAgICBDOlxweXRob25cY3B5dGhvblxQQ2J1aWxkPmNkIC4uCisgICAgQzpccHl0aG9uXGNweXRob24+VG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwuYmF0CisKK1RoaXMgZXh0cmFjdHMgYWxsIHRoZSBleHRlcm5hbCBzdWItcHJvamVjdHMgZnJvbQorICAgIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbAordmlhIFN1YnZlcnNpb24gKHNvIHlvdSdsbCBuZWVkIGFuIHN2bi5leGUgb24geW91ciBQQVRIKSBhbmQgcGxhY2VzIHRoZW0KK2luIC4uXC4uIChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZG93bmxvYWQgc291cmNlcyBmcm9tIGVhY2ggcHJvamVjdCdzIGhvbWVwYWdlLAordGhvdWdoIHlvdSBtYXkgaGF2ZSB0byBjaGFuZ2UgdGhlIG5hbWVzIG9mIHNvbWUgZm9sZGVycyBpbiBvcmRlciB0byBtYWtlCit0aGluZ3Mgd29yay4gIEZvciBpbnN0YW5jZSwgaWYgeW91IHdlcmUgdG8gZG93bmxvYWQgYSB2ZXJzaW9uIDUuMC43IG9mCitYWiBVdGlscywgeW91IHdvdWxkIG5lZWQgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBpbnRvIC4uXC4uXHh6LTUuMC41Cithbnl3YXksIHNpbmNlIHRoYXQgaXMgd2hlcmUgdGhlIHNvbHV0aW9uIGlzIHNldCB0byBsb29rIGZvciB4ei4gIFRoZQorc2FtZSBpcyB0cnVlIGZvciBhbGwgb3RoZXIgZXh0ZXJuYWwgcHJvamVjdHMuCisKK1RoZSBleHRlcm5hbCgtYW1kNjQpLmJhdCBzY3JpcHRzIHdpbGwgYWxzbyBidWlsZCBhIGRlYnVnIGJ1aWxkIG9mCitUY2wvVGssIGJ1dCB0aGVyZSBhcmVuJ3QgYW55IGVxdWl2YWxlbnQgYmF0Y2ggZmlsZXMgZm9yIGJ1aWxkaW5nIHJlbGVhc2UKK3ZlcnNpb25zIG9mIFRjbC9UayBjdXJyZW50bHkgYXZhaWxhYmxlLiAgSWYgeW91IG5lZWQgdG8gYnVpbGQgYSByZWxlYXNlCit2ZXJzaW9uIG9mIFRjbC9UaywganVzdCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgZXh0ZXJuYWwoLWFtZDY0KS5iYXQKK2ZpbGUgYW5kIGZpbmQgdGhlIHR3byBubWFrZSBsaW5lcywgdGhlbiBjYWxsIGVhY2ggb25lIHdpdGhvdXQgdGhlCisnREVCVUc9MScgcGFyYW1ldGVyLCBpLmUuOgogCiBUaGUgZXh0ZXJuYWwtYW1kNjQuYmF0IGZpbGUgY29udGFpbnMgdGhpcyBmb3IgdGNsOgogICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsIGluc3RhbGwKQEAgLTIwMiw4OSArMjY2LDUzIEBACiBTbyBmb3IgYSByZWxlYXNlIGJ1aWxkLCB5b3UnZCBjYWxsIGl0IGFzOgogICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbCBpbnN0YWxsCiAKLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0gICAgWFhYIE91ciBpbnN0YWxsZXIgY29waWVzIGEgbG90IG9mIHN0dWZmIG91dCBvZiB0aGUgVGNsL1RrIGluc3RhbGwKLSAgICBYWFggZGlyZWN0b3J5LiAgSXMgYWxsIG9mIHRoYXQgcmVhbGx5IG5lZWRlZCBmb3IgUHl0aG9uIHVzZSBvZiBUY2wvVGs/CitOb3RlIHRoYXQgdGhlIGFib3ZlIGNvbW1hbmQgaXMgY2FsbGVkIGZyb20gd2l0aGluIC4uXC4uXHRjbC04LjYuMS4wXHdpbgorKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KTsgZG9uJ3QgZm9yZ2V0IHRvIGJ1aWxkIFRrIGFzIHdlbGwgYXMgVGNsIQogCi1UaGlzIHdpbGwgYmUgY2xlYW5lZCB1cCBpbiB0aGUgZnV0dXJlOyBpZGVhbGx5IFRjbC9UayB3aWxsIGJlIGJyb3VnaHQgaW50byBvdXIKLXBjYnVpbGQuc2xuIGFzIGN1c3RvbSAudmN4cHJvaiBmaWxlcywganVzdCBhcyB3ZSd2ZSByZWNlbnRseSBkb25lIHdpdGggdGhlCi1zcWxpdGUzLnZjeHByb2ogZmlsZSwgd2hpY2ggd2lsbCByZW1vdmUgdGhlIG5lZWQgZm9yIFRjbC9UayB0byBiZSBidWlsdAotc2VwYXJhdGVseSB2aWEgYSBiYXRjaCBmaWxlLgorVGhpcyB3aWxsIGJlIGNsZWFuZWQgdXAgaW4gdGhlIGZ1dHVyZTsgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1OTY4Cit0cmFja3MgYWRkaW5nIGEgbmV3IHRjbHRrLnZjeHByb2ogZmlsZSB0aGF0IHdpbGwgYnVpbGQgVGNsL1RrIGFuZCBUaXgKK3RoZSBzYW1lIHdheSB0aGUgb3RoZXIgZXh0ZXJuYWwgcHJvamVjdHMgbGlzdGVkIGFib3ZlIGFyZSBidWlsdC4KIAotWFhYIHRyZW50Lm5lbHNvbiAwMi1BcHItMDg6Ci0gICAgSGF2aW5nIHRoZSBleHRlcm5hbCBzdWJwcm9qZWN0cyBpbiAuLlwuLiByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSBpcyBhCi0gICAgYml0IG9mIGEgbnVpc2FuY2Ugd2hlbiB5b3UncmUgd29ya2luZyBvbiBweTNrIGFuZCB0cnVuayBpbiBwYXJhbGxlbCBhbmQKLSAgICB5b3VyIGRpcmVjdG9yeSBsYXlvdXQgbWltaWNzIHRoYXQgb2YgUHl0aG9uJ3Mgc3VidmVyc2lvbiBsYXlvdXQsIGUuZy46Ci0KLSAgICAgICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXHRydW5rCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblxicmFuY2hlc1xweTNrCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblxicmFuY2hlc1xyZWxlYXNlMjUtbWFpbnQKLQotICAgIEknZCBsaWtlIHRvIGNoYW5nZSB0aGluZ3Mgc28gdGhhdCBleHRlcm5hbCBzdWJwcm9qZWN0cyBhcmUgZmV0Y2hlZCBmcm9tCi0gICAgLi5cZXh0ZXJuYWwgaW5zdGVhZCBvZiAuLlwuLiwgdGhlbiBwcm92aWRlIHNvbWUgaGVscGVyIHNjcmlwdHMgb3IgYmF0Y2gKLSAgICBmaWxlcyB0aGF0IHdvdWxkIHNldCB1cCBhIG5ldyAuLlxleHRlcm5hbCBkaXJlY3Rvcnkgd2l0aCBzdm4gY2hlY2tvdXRzIG9mCi0gICAgdGhlIHJlbGV2YW50IGJyYW5jaGVzIGluIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC8sIG9yCi0gICAgYWx0ZXJuYXRpdmVseSwgdXNlIGp1bmN0aW9ucyB0byBsaW5rIC4uXGV4dGVybmFsIHdpdGggYSBwcmUtZXhpc3RpbmcKLSAgICBleHRlcm5hbHMgZGlyZWN0b3J5IGJlaW5nIHVzZWQgYnkgYW5vdGhlciBicmFuY2guICBpLmUuIGlmIEknbSB1c3VhbGx5Ci0gICAgd29ya2luZyBvbiB0cnVuayAoYW5kIGhhdmUgcHJldmlvdXNseSBjcmVhdGVkIHRydW5rXGV4dGVybmFsIHZpYSB0aGUKLSAgICBwcm92aWRlZCBiYXRjaCBmaWxlKSwgYW5kIHdhbnQgdG8gZG8gc29tZSB3b3JrIG9uIHB5M2ssIEknZCBzZXQgdXAgYQotICAgIGp1bmN0aW9uIGFzIGZvbGxvd3MgKHVzaW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFib3ZlIGFzIGFuIGV4YW1wbGUpOgotCi0gICAgICAgIEM6XC4uXHB5dGhvblx0cnVua1xleHRlcm5hbCA8LSBhbHJlYWR5IGV4aXN0cyBhbmQgaGFzIGJ1aWx0IHZlcnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZXh0ZXJuYWwgc3VicHJvamVjdHMKLQotICAgICAgICBDOlwuLlxweXRob25cYnJhbmNoZXNccHkzaz5saW5rZC5leGUgZXh0ZXJuYWwgLi5cLi5cdHJ1bmtcZXh0ZXJuYWwKLSAgICAgICAgTGluayBjcmVhdGVkIGF0OiBleHRlcm5hbAotCi0gICAgT25seSBhIHNsaWdodCB0d2VhayB3b3VsZCBiZSBuZWVkZWQgdG8gdGhlIGJ1aWxkYm90cyBzdWNoIHRoYXQgYm90cwotICAgIGJ1aWxkaW5nIHRydW5rIGFuZCBweTNrIGNvdWxkIG1ha2UgdXNlIG9mIHRoZSBzYW1lIGZhY2lsaXR5LiAgKDIuNS54Ci0gICAgYnVpbGRzIG5lZWQgdG8gYmUga2VwdCBzZXBhcmF0ZSBhcyB0aGV5J3JlIHVzaW5nIFZpc3VhbCBTdHVkaW8gNy4xLikKLS9YWFggdHJlbnQubmVsc29uIDAyLUFwci0wOAotCi1CdWlsZGluZyBmb3IgSXRhbml1bQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotT2ZmaWNpYWwgc3VwcG9ydCBmb3IgSXRhbml1bSBidWlsZHMgaGF2ZSBiZWVuIGRyb3BwZWQgZnJvbSB0aGUgYnVpbGQuIFBsZWFzZQotY29udGFjdCB1cyBhbmQgcHJvdmlkZSBwYXRjaGVzIGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBJdGFuaXVtIGJ1aWxkcy4KIAogQnVpbGRpbmcgZm9yIEFNRDY0CiAtLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIEFNRDY0IC8geDY0IGlzIHZlcnkgc2ltaWxhciB0byBzdGFuZGFyZCBidWlsZHMuIFlvdSBqdXN0Ci1oYXZlIHRvIHNldCB4NjQgYXMgcGxhdGZvcm0uIEluIGFkZGl0aW9uLCB0aGUgSE9TVF9QWVRIT04gZW52aXJvbm1lbnQgdmFyaWFibGUKLW11c3QgcG9pbnQgdG8gYSBQeXRob24gaW50ZXJwcmV0ZXIgKGF0IGxlYXN0IDIuNCksIHRvIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24uCitUaGUgYnVpbGQgcHJvY2VzcyBmb3IgQU1ENjQgLyB4NjQgaXMgdmVyeSBzaW1pbGFyIHRvIHN0YW5kYXJkIGJ1aWxkcywKK3lvdSBqdXN0IGhhdmUgdG8gc2V0IHg2NCBhcyBwbGF0Zm9ybS4gSW4gYWRkaXRpb24sIHRoZSBIT1NUX1BZVEhPTgorZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBwb2ludCB0byBhIFB5dGhvbiBpbnRlcnByZXRlciAoYXQgbGVhc3QgMi40KSwKK3RvIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24gZnJvbSBXaW4zMi4gIE5vdGUgdGhhdCBWaXN1YWwgU3R1ZGlvCityZXF1aXJlcyBQcm9mZXNzaW9uYWwgRWRpdGlvbiBvciBiZXR0ZXIgaW4gb3JkZXIgdG8gYnVpbGQgNjQtYml0CitiaW5hcmllcy4KIAotQnVpbGRpbmcgUHl0aG9uIFVzaW5nIHRoZSBmcmVlIE1TIFRvb2xraXQgQ29tcGlsZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1pY3Jvc29mdCBoYXMgd2l0aGRyYXduIHRoZSBmcmVlIE1TIFRvb2xraXQgQ29tcGlsZXIsIHNvIHRoaXMgY2FuIG5vIGxvbmdlcgotYmUgY29uc2lkZXJlZCBhIHN1cHBvcnRlZCBvcHRpb24uIEluc3RlYWQgeW91IGNhbiB1c2UgdGhlIGZyZWUgVlMgQysrIEV4cHJlc3MKLUVkaXRpb24uCiAKIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBzb2x1dGlvbiBoYXMgdHdvIGNvbmZpZ3VyYXRpb25zIGZvciBQR08uIFRoZSBQR0luc3RydW1lbnQKLWNvbmZpZ3VyYXRpb24gbXVzdCBiZSBidWlsZCBmaXJzdC4gVGhlIFBHSW5zdHJ1bWVudCBiaW5hcmllcyBhcmUKLWxpbmtlZCBhZ2FpbnN0IGEgcHJvZmlsaW5nIGxpYnJhcnkgYW5kIGNvbnRhaW4gZXh0cmEgZGVidWcKLWluZm9ybWF0aW9uLiBUaGUgUEdVcGRhdGUgY29uZmlndXJhdGlvbiB0YWtlcyB0aGUgcHJvZmlsaW5nIGRhdGEgYW5kCi1nZW5lcmF0ZXMgb3B0aW1pemVkIGJpbmFyaWVzLgorY29uZmlndXJhdGlvbiBtdXN0IGJlIGJ1aWx0IGZpcnN0LiBUaGUgUEdJbnN0cnVtZW50IGJpbmFyaWVzIGFyZSBsaW5rZWQKK2FnYWluc3QgYSBwcm9maWxpbmcgbGlicmFyeSBhbmQgY29udGFpbiBleHRyYSBkZWJ1ZyBpbmZvcm1hdGlvbi4gVGhlCitQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHRha2VzIHRoZSBwcm9maWxpbmcgZGF0YSBhbmQgZ2VuZXJhdGVzIG9wdGltaXplZAorYmluYXJpZXMuCiAKLVRoZSBidWlsZF9wZ28uYmF0IHNjcmlwdCBhdXRvbWF0ZXMgdGhlIGNyZWF0aW9uIG9mIG9wdGltaXplZCBiaW5hcmllcy4gSXQKLWNyZWF0ZXMgdGhlIFBHSSBmaWxlcywgcnVucyB0aGUgdW5pdCB0ZXN0IHN1aXRlIG9yIFB5QmVuY2ggd2l0aCB0aGUgUEdJCi1weXRob24gYW5kIGZpbmFsbHkgY3JlYXRlcyB0aGUgb3B0aW1pemVkIGZpbGVzLgorVGhlIGJ1aWxkX3Bnby5iYXQgc2NyaXB0IGF1dG9tYXRlcyB0aGUgY3JlYXRpb24gb2Ygb3B0aW1pemVkIGJpbmFyaWVzLgorSXQgY3JlYXRlcyB0aGUgUEdJIGZpbGVzLCBydW5zIHRoZSB1bml0IHRlc3Qgc3VpdGUgb3IgUHlCZW5jaCB3aXRoIHRoZQorUEdJIHB5dGhvbiwgYW5kIGZpbmFsbHkgY3JlYXRlcyB0aGUgb3B0aW1pemVkIGZpbGVzLgogCi1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZTdrMzJmNGsoVlMuMTAwKS5hc3B4CitTZWUKKyAgICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZTdrMzJmNGsoVlMuMTAwKS5hc3B4Citmb3IgbW9yZSBvbiB0aGlzIHRvcGljLgorCiAKIFN0YXRpYyBsaWJyYXJ5CiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgc29sdXRpb24gaGFzIG5vIGNvbmZpZ3VyYXRpb24gZm9yIHN0YXRpYyBsaWJyYXJpZXMuIEhvd2V2ZXIgaXQgaXMgZWFzeQotaXQgYnVpbGQgYSBzdGF0aWMgbGlicmFyeSBpbnN0ZWFkIG9mIGEgRExMLiBZb3Ugc2ltcGx5IGhhdmUgdG8gc2V0IHRoZQotIkNvbmZpZ3VyYXRpb24gVHlwZSIgdG8gIlN0YXRpYyBMaWJyYXJ5ICgubGliKSIgYW5kIGFsdGVyIHRoZSBwcmVwcm9jZXNzb3IKLW1hY3JvICJQeV9FTkFCTEVfU0hBUkVEIiB0byAiUHlfTk9fRU5BQkxFX1NIQVJFRCIuIFlvdSBtYXkgYWxzbyBoYXZlIHRvCi1jaGFuZ2UgdGhlICJSdW50aW1lIExpYnJhcnkiIGZyb20gIk11bHRpLXRocmVhZGVkIERMTCAoL01EKSIgdG8KLSJNdWx0aS10aHJlYWRlZCAoL01UKSIuCitUaGUgc29sdXRpb24gaGFzIG5vIGNvbmZpZ3VyYXRpb24gZm9yIHN0YXRpYyBsaWJyYXJpZXMuIEhvd2V2ZXIgaXQgaXMKK2Vhc3kgdG8gYnVpbGQgYSBzdGF0aWMgbGlicmFyeSBpbnN0ZWFkIG9mIGEgRExMLiBZb3Ugc2ltcGx5IGhhdmUgdG8gc2V0Cit0aGUgIkNvbmZpZ3VyYXRpb24gVHlwZSIgdG8gIlN0YXRpYyBMaWJyYXJ5ICgubGliKSIgYW5kIGFsdGVyIHRoZQorcHJlcHJvY2Vzc29yIG1hY3JvICJQeV9FTkFCTEVfU0hBUkVEIiB0byAiUHlfTk9fRU5BQkxFX1NIQVJFRCIuIFlvdSBtYXkKK2Fsc28gaGF2ZSB0byBjaGFuZ2UgdGhlICJSdW50aW1lIExpYnJhcnkiIGZyb20gIk11bHRpLXRocmVhZGVkIERMTAorKC9NRCkiIHRvICJNdWx0aS10aHJlYWRlZCAoL01UKSIuCisKIAogVmlzdWFsIFN0dWRpbyBwcm9wZXJ0aWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5Myw2ICszMjEsNyBAQAogKCoucHJvcHMpLiBUaGUgcHJvcGVydGllcyBjYW4gYmUgdmlld2VkIGFuZCBhbHRlcmVkIGluIHRoZSBQcm9wZXJ0eQogTWFuYWdlciAoVmlldyAtPiBPdGhlciBXaW5kb3dzIC0+IFByb3BlcnR5IE1hbmFnZXIpLgogCitUaGUgcHJvcGVydHkgZmlsZXMgdXNlZCBhcmUgKCstLSA9ICJhbHNvIGltcG9ydHMiKToKICAqIGRlYnVnIChkZWJ1ZyBtYWNybzogX0RFQlVHKQogICogcGdpbnN0cnVtZW50IChQR08pCiAgKiBwZ3VwZGF0ZSAoUEdPKQpAQCAtMzA1LDE1ICszMzQsMTggQEAKICAgICArLS0gcHlwcm9qZWN0CiAgKiBweXByb2plY3QgKGJhc2Ugc2V0dGluZ3MgZm9yIGFsbCBwcm9qZWN0cywgdXNlciBtYWNyb3MgbGlrZSBQeURsbE5hbWUpCiAgKiByZWxlYXNlIChyZWxlYXNlIG1hY3JvOiBOREVCVUcpCisgKiBzcWxpdGUzICh1c2VkIG9ubHkgYnkgc3FsaXRlMy52Y3hwcm9qKQogICogeDY0IChBTUQ2NCAvIHg2NCBwbGF0Zm9ybSBzcGVjaWZpYyBzZXR0aW5ncykKIAotVGhlIHB5cHJvamVjdCBwcm9wZXJ0eWZpbGUgZGVmaW5lcyBfV0lOMzIgYW5kIHg2NCBkZWZpbmVzIF9XSU42NCBhbmQgX01fWDY0Ci1hbHRob3VnaCB0aGUgbWFjcm9zIGFyZSBzZXQgYnkgdGhlIGNvbXBpbGVyLCB0b28uIFRoZSBHVUkgZG9lc24ndCBhbHdheXMga25vdwotYWJvdXQgdGhlIG1hY3JvcyBhbmQgY29uZnVzZSB0aGUgdXNlciB3aXRoIGZhbHNlIGluZm9ybWF0aW9uLgorVGhlIHB5cHJvamVjdCBwcm9wZXJ0eSBmaWxlIGRlZmluZXMgX1dJTjMyIGFuZCB4NjQgZGVmaW5lcyBfV0lONjQgYW5kCitfTV9YNjQgYWx0aG91Z2ggdGhlIG1hY3JvcyBhcmUgc2V0IGJ5IHRoZSBjb21waWxlciwgdG9vLiBUaGUgR1VJIGRvZXNuJ3QKK2Fsd2F5cyBrbm93IGFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZQoraW5mb3JtYXRpb24uCiAKLVlPVVIgT1dOIEVYVEVOU0lPTiBETExzCisKK1lvdXIgT3duIEV4dGVuc2lvbiBETExzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwsIHRoZXJlJ3MgYW4gZXhhbXBsZQotd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi4vUEMvZXhhbXBsZS87IHJlYWQgdGhlIGZpbGUKLXJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwgKC5weWQpLCB0aGVyZSdzIGFuCitleGFtcGxlIHdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uXFBDXGV4YW1wbGVcOyByZWFkIHRoZQorZmlsZSByZWFkbWUudHh0IHRoZXJlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvUENidWlsZC94eGxpbWl0ZWQudmN4cHJvaiBiL1BDYnVpbGQveHhsaW1pdGVkLnZjeHByb2oKaW5kZXggMjZiYzIwZC4uYWJmNDFmOSAxMDA2NDQKLS0tIGEvUENidWlsZC94eGxpbWl0ZWQudmN4cHJvagorKysgYi9QQ2J1aWxkL3h4bGltaXRlZC52Y3hwcm9qCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KICAgICA8Q2xDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRztfV0lOMzI7X1dJTkRMTDtQeV9MSU1JVEVEX0FQSTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO19XSU4zMjtfV0lORExMO1B5X0xJTUlURURfQVBJPTB4MDMwNDAwMDA8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3NvY2szMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KQEAgLTE0MCw3ICsxNDAsNyBAQAogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+CiAgICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5QeV9MSU1JVEVEX0FQSTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UHlfTElNSVRFRF9BUEk9MHgwMzA0MDAwMDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMTYxLDcgKzE2MSw3IEBACiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgogICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UHlfTElNSVRFRF9BUEk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlB5X0xJTUlURURfQVBJPTB4MDMwNDAwMDA7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3NvY2szMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KQEAgLTE4MywxMSArMTgzLDYgQEAKICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNceHhsaW1pdGVkLmMiIC8+CiAgIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+Ci0gICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+Ci0gIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgpkaWZmIC0tZ2l0IGEvUGFyc2VyL1B5dGhvbi5hc2RsIGIvUGFyc2VyL1B5dGhvbi5hc2RsCmluZGV4IGMyNGQ4NDAuLmRlYmQ4OWUgMTAwNjQ0Ci0tLSBhL1BhcnNlci9QeXRob24uYXNkbAorKysgYi9QYXJzZXIvUHl0aG9uLmFzZGwKQEAgLTEsNCArMSw0IEBACi0tLSBBU0RMJ3MgZml2ZSBidWlsdGluIHR5cGVzIGFyZSBpZGVudGlmaWVyLCBpbnQsIHN0cmluZywgYnl0ZXMsIG9iamVjdAorLS0gQVNETCdzIHNpeCBidWlsdGluIHR5cGVzIGFyZSBpZGVudGlmaWVyLCBpbnQsIHN0cmluZywgYnl0ZXMsIG9iamVjdCwgc2luZ2xldG9uCiAKIG1vZHVsZSBQeXRob24KIHsKQEAgLTY5LDggKzY5LDggQEAKICAgICAgICAgIHwgTnVtKG9iamVjdCBuKSAtLSBhIG51bWJlciBhcyBhIFB5T2JqZWN0LgogICAgICAgICAgfCBTdHIoc3RyaW5nIHMpIC0tIG5lZWQgdG8gc3BlY2lmeSByYXcsIHVuaWNvZGUsIGV0Yz8KICAgICAgICAgIHwgQnl0ZXMoYnl0ZXMgcykKKyAgICAgICAgIHwgTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSkKICAgICAgICAgIHwgRWxsaXBzaXMKLSAgICAgICAgIC0tIG90aGVyIGxpdGVyYWxzPyBib29scz8KIAogICAgICAgICAgLS0gdGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGNhbiBhcHBlYXIgaW4gYXNzaWdubWVudCBjb250ZXh0CiAgICAgICAgICB8IEF0dHJpYnV0ZShleHByIHZhbHVlLCBpZGVudGlmaWVyIGF0dHIsIGV4cHJfY29udGV4dCBjdHgpCkBAIC0xMDMsMTEgKzEwMywxMSBAQAogICAgIGV4Y2VwdGhhbmRsZXIgPSBFeGNlcHRIYW5kbGVyKGV4cHI/IHR5cGUsIGlkZW50aWZpZXI/IG5hbWUsIHN0bXQqIGJvZHkpCiAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCi0gICAgYXJndW1lbnRzID0gKGFyZyogYXJncywgaWRlbnRpZmllcj8gdmFyYXJnLCBleHByPyB2YXJhcmdhbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgYXJnKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyPyBrd2FyZywKLSAgICAgICAgICAgICAgICAgICAgIGV4cHI/IGt3YXJnYW5ub3RhdGlvbiwgZXhwciogZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAgICAgICBleHByKiBrd19kZWZhdWx0cykKKyAgICBhcmd1bWVudHMgPSAoYXJnKiBhcmdzLCBhcmc/IHZhcmFyZywgYXJnKiBrd29ubHlhcmdzLCBleHByKiBrd19kZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgYXJnPyBrd2FyZywgZXhwciogZGVmYXVsdHMpCisKICAgICBhcmcgPSAoaWRlbnRpZmllciBhcmcsIGV4cHI/IGFubm90YXRpb24pCisgICAgICAgICAgIGF0dHJpYnV0ZXMgKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCiAgICAgLS0ga2V5d29yZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gY2FsbAogICAgIGtleXdvcmQgPSAoaWRlbnRpZmllciBhcmcsIGV4cHIgdmFsdWUpCmRpZmYgLS1naXQgYS9QYXJzZXIvYXNkbC5weSBiL1BhcnNlci9hc2RsLnB5CmluZGV4IDA4YWEwNWIuLmZjMWIxNmMgMTAwNjQ0Ci0tLSBhL1BhcnNlci9hc2RsLnB5CisrKyBiL1BhcnNlci9hc2RsLnB5CkBAIC0xNiw4ICsxNiw5IEBACiAKIGltcG9ydCBzcGFyawogCi1kZWYgb3V0cHV0KHN0cmluZyk6Ci0gICAgc3lzLnN0ZG91dC53cml0ZShzdHJpbmcgKyAiXG4iKQorZGVmIG91dHB1dCgqc3RyaW5ncyk6CisgICAgZm9yIHMgaW4gc3RyaW5nczoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIocykgKyAiXG4iKQogCiAKIGNsYXNzIFRva2VuKG9iamVjdCk6CkBAIC0xNTgsMTEgKzE1OSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXhwZWN0ZWQgYXR0cmlidXRlcywgZm91bmQgJXMiICUgaWQpCiAgICAgICAgIHJldHVybiBTdW0oc3VtLCBhdHRyaWJ1dGVzKQogCi0gICAgZGVmIHBfcHJvZHVjdChzZWxmLCBpbmZvKToKKyAgICBkZWYgcF9wcm9kdWN0XzAoc2VsZiwgaW5mbyk6CiAgICAgICAgICIgcHJvZHVjdCA6Oj0gKCBmaWVsZHMgKSAiCiAgICAgICAgIF8wLCBmaWVsZHMsIF8xID0gaW5mbwogICAgICAgICByZXR1cm4gUHJvZHVjdChmaWVsZHMpCiAKKyAgICBkZWYgcF9wcm9kdWN0XzEoc2VsZiwgaW5mbyk6CisgICAgICAgICIgcHJvZHVjdCA6Oj0gKCBmaWVsZHMgKSBJZCAoIGZpZWxkcyApICIKKyAgICAgICAgXzAsIGZpZWxkcywgXzEsIGlkLCBfMiwgYXR0cmlidXRlcywgXzMgPSBpbmZvCisgICAgICAgIGlmIGlkLnZhbHVlICE9ICJhdHRyaWJ1dGVzIjoKKyAgICAgICAgICAgIHJhaXNlIEFTRExTeW50YXhFcnJvcihpZC5saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHBlY3RlZCBhdHRyaWJ1dGVzLCBmb3VuZCAlcyIgJSBpZCkKKyAgICAgICAgcmV0dXJuIFByb2R1Y3QoZmllbGRzLCBhdHRyaWJ1dGVzKQorCiAgICAgZGVmIHBfc3VtXzAoc2VsZiwgY29uc3RydWN0b3IpOgogICAgICAgICAiIHN1bSA6Oj0gY29uc3RydWN0b3IgIgogICAgICAgICByZXR1cm4gW2NvbnN0cnVjdG9yWzBdXQpAQCAtMjIyLDcgKzIzMSw3IEBACiAgICAgICAgICIgZmllbGQgOjo9IElkID8gIgogICAgICAgICByZXR1cm4gRmllbGQodHlwZVswXSwgb3B0PVRydWUpCiAKLWJ1aWx0aW5fdHlwZXMgPSAoImlkZW50aWZpZXIiLCAic3RyaW5nIiwgImJ5dGVzIiwgImludCIsICJvYmplY3QiKQorYnVpbHRpbl90eXBlcyA9ICgiaWRlbnRpZmllciIsICJzdHJpbmciLCAiYnl0ZXMiLCAiaW50IiwgIm9iamVjdCIsICJzaW5nbGV0b24iKQogCiAjIGJlbG93IGlzIGEgY29sbGVjdGlvbiBvZiBjbGFzc2VzIHRvIGNhcHR1cmUgdGhlIEFTVCBvZiBhbiBBU1QgOi0pCiAjIG5vdCBzdXJlIGlmIGFueSBvZiB0aGUgbWV0aG9kcyBhcmUgdXNlZnVsIHlldCwgYnV0IEknbSBhZGRpbmcgdGhlbQpAQCAtMjg5LDExICsyOTgsMTUgQEAKICAgICAgICAgICAgIHJldHVybiAiU3VtKCVzLCAlcykiICUgKHNlbGYudHlwZXMsIHNlbGYuYXR0cmlidXRlcykKIAogY2xhc3MgUHJvZHVjdChBU1QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWVsZHMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWVsZHMsIGF0dHJpYnV0ZXM9Tm9uZSk6CiAgICAgICAgIHNlbGYuZmllbGRzID0gZmllbGRzCisgICAgICAgIHNlbGYuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgb3IgW10KIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzKSIgJSBzZWxmLmZpZWxkcworICAgICAgICBpZiBzZWxmLmF0dHJpYnV0ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAiUHJvZHVjdCglcykiICUgc2VsZi5maWVsZHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiUHJvZHVjdCglcywgJXMpIiAlIChzZWxmLmZpZWxkcywgc2VsZi5hdHRyaWJ1dGVzKQogCiBjbGFzcyBWaXNpdG9yQmFzZShvYmplY3QpOgogCkBAIC0zODUsNyArMzk4LDExIEBACiAgICAgc2Nhbm5lciA9IEFTRExTY2FubmVyKCkKICAgICBwYXJzZXIgPSBBU0RMUGFyc2VyKCkKIAotICAgIGJ1ZiA9IG9wZW4oZmlsZSkucmVhZCgpCisgICAgZiA9IG9wZW4oZmlsZSkKKyAgICB0cnk6CisgICAgICAgIGJ1ZiA9IGYucmVhZCgpCisgICAgZmluYWxseToKKyAgICAgICAgZi5jbG9zZSgpCiAgICAgdG9rZW5zID0gc2Nhbm5lci50b2tlbml6ZShidWYpCiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKHRva2VucykKQEAgLTQxNiw0ICs0MzMsNCBAQAogICAgICAgICAgICAgb3V0cHV0KCJDaGVjayBmYWlsZWQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9yIGRmbiBpbiBtb2QuZGZuczoKLSAgICAgICAgICAgICAgICBvdXRwdXQoZGZuLnR5cGUpCisgICAgICAgICAgICAgICAgb3V0cHV0KGRmbi5uYW1lLCBkZm4udmFsdWUpCmRpZmYgLS1naXQgYS9QYXJzZXIvYXNkbF9jLnB5IGIvUGFyc2VyL2FzZGxfYy5weQppbmRleCA0Yjg0ZTBmLi5kNjA4NmU2IDEwMDc1NQotLS0gYS9QYXJzZXIvYXNkbF9jLnB5CisrKyBiL1BhcnNlci9hc2RsX2MucHkKQEAgLTIwOSw2ICsyMDksMTEgQEAKICAgICAgICAgc2VsZi5lbWl0KCJzdHJ1Y3QgXyUobmFtZSlzIHsiICUgbG9jYWxzKCksIGRlcHRoKQogICAgICAgICBmb3IgZiBpbiBwcm9kdWN0LmZpZWxkczoKICAgICAgICAgICAgIHNlbGYudmlzaXQoZiwgZGVwdGggKyAxKQorICAgICAgICBmb3IgZmllbGQgaW4gcHJvZHVjdC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgIyBydWRpbWVudGFyeSBhdHRyaWJ1dGUgaGFuZGxpbmcKKyAgICAgICAgICAgIHR5cGUgPSBzdHIoZmllbGQudHlwZSkKKyAgICAgICAgICAgIGFzc2VydCB0eXBlIGluIGFzZGwuYnVpbHRpbl90eXBlcywgdHlwZQorICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyAlczsiICUgKHR5cGUsIGZpZWxkLm5hbWUpLCBkZXB0aCArIDEpOwogICAgICAgICBzZWxmLmVtaXQoIn07IiwgZGVwdGgpCiAgICAgICAgIHNlbGYuZW1pdCgiIiwgZGVwdGgpCiAKQEAgLTQ5Myw3ICs0OTgsMTEgQEAKIAogICAgIGRlZiB2aXNpdEZpZWxkKHNlbGYsIGZpZWxkLCBuYW1lLCBzdW09Tm9uZSwgcHJvZD1Ob25lLCBkZXB0aD0wKToKICAgICAgICAgY3R5cGUgPSBnZXRfY190eXBlKGZpZWxkLnR5cGUpCi0gICAgICAgIHNlbGYuZW1pdCgiaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF8lcykpIHsiICUgZmllbGQubmFtZSwgZGVwdGgpCisgICAgICAgIGlmIGZpZWxkLm9wdDoKKyAgICAgICAgICAgIGNoZWNrID0gImV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkXyVzKSIgJSAoZmllbGQubmFtZSwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjaGVjayA9ICJfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfJXMpIiAlIChmaWVsZC5uYW1lLCkKKyAgICAgICAgc2VsZi5lbWl0KCJpZiAoJXMpIHsiICUgKGNoZWNrLCksIGRlcHRoLCByZWZsb3c9RmFsc2UpCiAgICAgICAgIHNlbGYuZW1pdCgiaW50IHJlczsiLCBkZXB0aCsxKQogICAgICAgICBpZiBmaWVsZC5zZXE6CiAgICAgICAgICAgICBzZWxmLmVtaXQoIlB5X3NzaXplX3QgbGVuOyIsIGRlcHRoKzEpCkBAIC01MTAsOSArNTE5LDkgQEAKICAgICAgICAgICAgIHNlbGYuZW1pdCgifSIsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOyIsIGRlcHRoKzEpCiAgICAgICAgICAgICBpZiBzZWxmLmlzU2ltcGxlVHlwZShmaWVsZCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IGFzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IF9QeV9hc2RsX2ludF9zZXFfbmV3KGxlbiwgYXJlbmEpOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQogICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoJXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeyIsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzIHZhbHVlOyIgJSBjdHlwZSwgZGVwdGgrMikKQEAgLTU1OCw2ICs1NjcsMTMgQEAKICAgICBkZWYgdmlzaXRQcm9kdWN0KHNlbGYsIHByb2QsIG5hbWUpOgogICAgICAgICBzZWxmLmVtaXQoInN0YXRpYyBQeVR5cGVPYmplY3QgKiVzX3R5cGU7IiAlIG5hbWUsIDApCiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIFB5T2JqZWN0KiBhc3Qyb2JqXyVzKHZvaWQqKTsiICUgbmFtZSwgMCkKKyAgICAgICAgaWYgcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdF9pZGVudGlmaWVyKGEubmFtZSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIGNoYXIgKiVzX2F0dHJpYnV0ZXNbXSA9IHsiICUgbmFtZSwgMCkKKyAgICAgICAgICAgIGZvciBhIGluIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJyIlcyIsJyAlIGEubmFtZSwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgifTsiLCAwKQogICAgICAgICBpZiBwcm9kLmZpZWxkczoKICAgICAgICAgICAgIGZvciBmIGluIHByb2QuZmllbGRzOgogICAgICAgICAgICAgICAgIHNlbGYuZW1pdF9pZGVudGlmaWVyKGYubmFtZSkKQEAgLTgxOSw2ICs4MzUsNyBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKW8pOwogICAgIHJldHVybiAoUHlPYmplY3QqKW87CiB9CisjZGVmaW5lIGFzdDJvYmpfc2luZ2xldG9uIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfaWRlbnRpZmllciBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX3N0cmluZyBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2J5dGVzIGFzdDJvYmpfb2JqZWN0CkBAIC04MzAsNiArODQ3LDE3IEBACiAKIC8qIENvbnZlcnNpb24gUHl0aG9uIC0+IEFTVCAqLwogCitzdGF0aWMgaW50IG9iajJhc3Rfc2luZ2xldG9uKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKK3sKKyAgICBpZiAob2JqICE9IFB5X05vbmUgJiYgb2JqICE9IFB5X1RydWUgJiYgb2JqICE9IFB5X0ZhbHNlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFTVCBzaW5nbGV0b24gbXVzdCBiZSBUcnVlLCBGYWxzZSwgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IG9iajsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvYmoyYXN0X29iamVjdChQeU9iamVjdCogb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCiB7CiAgICAgaWYgKG9iaiA9PSBQeV9Ob25lKQpAQCAtOTA0LDYgKzkzMiwxOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGV4aXN0c19ub3Rfbm9uZShQeU9iamVjdCAqb2JqLCBfUHlfSWRlbnRpZmllciAqaWQpCit7CisgICAgaW50IGlzbm9uZTsKKyAgICBQeU9iamVjdCAqYXR0ciA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCBpZCk7CisgICAgaWYgKCFhdHRyKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpc25vbmUgPSBhdHRyID09IFB5X05vbmU7CisgICAgUHlfREVDUkVGKGF0dHIpOworICAgIHJldHVybiAhaXNub25lOworfQorCiAiIiIsIDAsIHJlZmxvdz1GYWxzZSkKIAogICAgICAgICBzZWxmLmVtaXQoInN0YXRpYyBpbnQgaW5pdF90eXBlcyh2b2lkKSIsMCkKQEAgLTkyNSw2ICs5NjYsMTEgQEAKICAgICAgICAgc2VsZi5lbWl0KCclc190eXBlID0gbWFrZV90eXBlKCIlcyIsICZBU1RfdHlwZSwgJXMsICVkKTsnICUKICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBuYW1lLCBmaWVsZHMsIGxlbihwcm9kLmZpZWxkcykpLCAxKQogICAgICAgICBzZWxmLmVtaXQoImlmICghJXNfdHlwZSkgcmV0dXJuIDA7IiAlIG5hbWUsIDEpCisgICAgICAgIGlmIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFhZGRfYXR0cmlidXRlcyglc190eXBlLCAlc19hdHRyaWJ1dGVzLCAlZCkpIHJldHVybiAwOyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBuYW1lLCBsZW4ocHJvZC5hdHRyaWJ1dGVzKSksIDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmVtaXQoImlmICghYWRkX2F0dHJpYnV0ZXMoJXNfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOyIgJSBuYW1lLCAxKQogCiAgICAgZGVmIHZpc2l0U3VtKHNlbGYsIHN1bSwgbmFtZSk6CiAgICAgICAgIHNlbGYuZW1pdCgnJXNfdHlwZSA9IG1ha2VfdHlwZSgiJXMiLCAmQVNUX3R5cGUsIE5VTEwsIDApOycgJQpAQCAtOTY4LDcgKzEwMTQsNyBAQAogICAgICAgICBzZWxmLmVtaXQoImlmICghbSkgcmV0dXJuIE5VTEw7IiwgMSkKICAgICAgICAgc2VsZi5lbWl0KCJkID0gUHlNb2R1bGVfR2V0RGljdChtKTsiLCAxKQogICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQVNUIiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7JywgMSkKLSAgICAgICAgc2VsZi5lbWl0KCdpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5Q0ZfT05MWV9BU1QiLCBQeUNGX09OTFlfQVNUKSA8IDApJywgMSkKKyAgICAgICAgc2VsZi5lbWl0KCdpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlDRl9PTkxZX0FTVCkgPCAwKScsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgicmV0dXJuIE5VTEw7IiwgMikKICAgICAgICAgZm9yIGRmbiBpbiBtb2QuZGZuczoKICAgICAgICAgICAgIHNlbGYudmlzaXQoZGZuKQpAQCAtMTA4MCw2ICsxMTI2LDEyIEBACiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFyZXN1bHQpIHJldHVybiBOVUxMOyIsIDEpCiAgICAgICAgIGZvciBmaWVsZCBpbiBwcm9kLmZpZWxkczoKICAgICAgICAgICAgIHNlbGYudmlzaXRGaWVsZChmaWVsZCwgbmFtZSwgMSwgVHJ1ZSkKKyAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJ2YWx1ZSA9IGFzdDJvYmpfJXMoby0+JXMpOyIgJSAoYS50eXBlLCBhLm5hbWUpLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsiLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCdpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkXyVzLCB2YWx1ZSkgPCAwKScgJSBhLm5hbWUsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ2dvdG8gZmFpbGVkOycsIDIpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ1B5X0RFQ1JFRih2YWx1ZSk7JywgMSkKICAgICAgICAgc2VsZi5mdW5jX2VuZCgpCiAKICAgICBkZWYgdmlzaXRDb25zdHJ1Y3RvcihzZWxmLCBjb25zLCBlbnVtLCBuYW1lKToKQEAgLTExNDIsNyArMTE5NCw4IEBACiAgICAgQ09ERSA9ICIiIgogUHlPYmplY3QqIFB5QVNUX21vZDJvYmoobW9kX3R5IHQpCiB7Ci0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gYXN0Mm9ial9tb2QodCk7CiB9CiAKQEAgLTExNjAsNyArMTIxMyw4IEBACiAKICAgICBhc3NlcnQoMCA8PSBtb2RlICYmIG1vZGUgPD0gMik7CiAKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2UoYXN0LCByZXFfdHlwZVttb2RlXSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpCkBAIC0xMTc4LDcgKzEyMzIsOCBAQAogCiBpbnQgUHlBU1RfQ2hlY2soUHlPYmplY3QqIG9iaikKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopJkFTVF90eXBlKTsKIH0KICIiIgpkaWZmIC0tZ2l0IGEvUGFyc2VyL2dyYW1tYXIuYyBiL1BhcnNlci9ncmFtbWFyLmMKaW5kZXggZjJhMjVjYS4uYjU5ODI5NCAxMDA2NDQKLS0tIGEvUGFyc2VyL2dyYW1tYXIuYworKysgYi9QYXJzZXIvZ3JhbW1hci5jCkBAIC0yOSw3ICsyOSw3IEBACiB9CiAKIGRmYSAqCi1hZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNoYXIgKm5hbWUpCithZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgZGZhICpkOwogCkBAIC02Myw3ICs2Myw3IEBACiAgICAgcy0+c191cHBlciA9IDA7CiAgICAgcy0+c19hY2NlbCA9IE5VTEw7CiAgICAgcy0+c19hY2NlcHQgPSAwOwotICAgIHJldHVybiBzIC0gZC0+ZF9zdGF0ZTsKKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChzIC0gZC0+ZF9zdGF0ZSwgUHlfaW50cHRyX3QsIGludCk7CiB9CiAKIHZvaWQKQEAgLTg1LDcgKzg1LDcgQEAKIH0KIAogaW50Ci1hZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBpbnQgaTsKICAgICBsYWJlbCAqbGI7CkBAIC0xMDUsMTMgKzEwNSwxMyBAQAogICAgIGlmIChQeV9EZWJ1Z0ZsYWcpCiAgICAgICAgIHByaW50ZigiTGFiZWwgQCAlOHAsICVkOiAlc1xuIiwgbGwsIGxsLT5sbF9ubGFiZWxzLAogICAgICAgICAgICAgICAgUHlHcmFtbWFyX0xhYmVsUmVwcihsYikpOwotICAgIHJldHVybiBsYiAtIGxsLT5sbF9sYWJlbDsKKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChsYiAtIGxsLT5sbF9sYWJlbCwgUHlfaW50cHRyX3QsIGludCk7CiB9CiAKIC8qIFNhbWUsIGJ1dCByYXRoZXIgZGllcyB0aGFuIGFkZHMgKi8KIAogaW50Ci1maW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cikKK2ZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKQogewogICAgIGludCBpOwogCmRpZmYgLS1naXQgYS9QYXJzZXIvZ3JhbW1hcjEuYyBiL1BhcnNlci9ncmFtbWFyMS5jCmluZGV4IDQ0MGJhNDQuLjMwYTZmMDcgMTAwNjQ0Ci0tLSBhL1BhcnNlci9ncmFtbWFyMS5jCisrKyBiL1BhcnNlci9ncmFtbWFyMS5jCkBAIC05LDkgKzksOSBAQAogLyogUmV0dXJuIHRoZSBERkEgZm9yIHRoZSBnaXZlbiB0eXBlICovCiAKIGRmYSAqCi1QeUdyYW1tYXJfRmluZERGQShncmFtbWFyICpnLCByZWdpc3RlciBpbnQgdHlwZSkKK1B5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIGludCB0eXBlKQogewotICAgIHJlZ2lzdGVyIGRmYSAqZDsKKyAgICBkZmEgKmQ7CiAjaWYgMQogICAgIC8qIE1hc3NpdmUgc3BlZWQtdXAgKi8KICAgICBkID0gJmctPmdfZGZhW3R5cGUgLSBOVF9PRkZTRVRdOwpAQCAtMTksNyArMTksNyBAQAogICAgIHJldHVybiBkOwogI2Vsc2UKICAgICAvKiBPbGQsIHNsb3cgdmVyc2lvbiAqLwotICAgIHJlZ2lzdGVyIGludCBpOworICAgIGludCBpOwogCiAgICAgZm9yIChpID0gZy0+Z19uZGZhcywgZCA9IGctPmdfZGZhOyAtLWkgPj0gMDsgZCsrKSB7CiAgICAgICAgIGlmIChkLT5kX3R5cGUgPT0gdHlwZSkKQEAgLTMwLDcgKzMwLDcgQEAKICNlbmRpZgogfQogCi1jaGFyICoKK2NvbnN0IGNoYXIgKgogUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpCiB7CiAgICAgc3RhdGljIGNoYXIgYnVmWzEwMF07CmRpZmYgLS1naXQgYS9QYXJzZXIvbXlyZWFkbGluZS5jIGIvUGFyc2VyL215cmVhZGxpbmUuYwppbmRleCA5ZjFmYzFlLi4yOGM3YjZkIDEwMDY0NAotLS0gYS9QYXJzZXIvbXlyZWFkbGluZS5jCisrKyBiL1BhcnNlci9teXJlYWRsaW5lLmMKQEAgLTE1LDEwICsxNSw2IEBACiAjaW5jbHVkZSAid2luZG93cy5oIgogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAotI2lmZGVmIF9fVk1TCi1leHRlcm4gY2hhciogdm1zX19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KTsKLSNlbmRpZgotCiAKIFB5VGhyZWFkU3RhdGUqIF9QeU9TX1JlYWRsaW5lVFN0YXRlOwogCkBAIC02OCw3ICs2NCw3IEBACiAgICAgICAgICovCiAgICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKT09RVJST1JfT1BFUkFUSU9OX0FCT1JURUQpIHsKICAgICAgICAgICAgIGhJbnRlcnJ1cHRFdmVudCA9IF9QeU9TX1NpZ2ludEV2ZW50KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3QoaEludGVycnVwdEV2ZW50LCAxMCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdEV4KGhJbnRlcnJ1cHRFdmVudCwgMTAsIEZBTFNFKSkgewogICAgICAgICAgICAgY2FzZSBXQUlUX09CSkVDVF8wOgogICAgICAgICAgICAgICAgIFJlc2V0RXZlbnQoaEludGVycnVwdEV2ZW50KTsKICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogSW50ZXJydXB0ICovCkBAIC0xMDksMjIgKzEwNSwyNiBAQAogLyogUmVhZGxpbmUgaW1wbGVtZW50YXRpb24gdXNpbmcgZmdldHMoKSAqLwogCiBjaGFyICoKLVB5T1NfU3RkaW9SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfU3RkaW9SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKICAgICBzaXplX3QgbjsKICAgICBjaGFyICpwLCAqcHI7CisKICAgICBuID0gMTAwOwotICAgIGlmICgocCA9IChjaGFyICopUHlNZW1fTUFMTE9DKG4pKSA9PSBOVUxMKQorICAgIHAgPSAoY2hhciAqKVB5TWVtX1Jhd01hbGxvYyhuKTsKKyAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGZmbHVzaChzeXNfc3Rkb3V0KTsKICAgICBpZiAocHJvbXB0KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgcHJvbXB0KTsKICAgICBmZmx1c2goc3RkZXJyKTsKKwogICAgIHN3aXRjaCAobXlfZmdldHMocCwgKGludCluLCBzeXNfc3RkaW4pKSB7CiAgICAgY2FzZSAwOiAvKiBOb3JtYWwgY2FzZSAqLwogICAgICAgICBicmVhazsKICAgICBjYXNlIDE6IC8qIEludGVycnVwdCAqLwotICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICBQeU1lbV9SYXdGcmVlKHApOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBjYXNlIC0xOiAvKiBFT0YgKi8KICAgICBjYXNlIC0yOiAvKiBFcnJvciAqLwpAQCAtMTM2LDEzICsxMzYsMTMgQEAKICAgICB3aGlsZSAobiA+IDAgJiYgcFtuLTFdICE9ICdcbicpIHsKICAgICAgICAgc2l6ZV90IGluY3IgPSBuKzI7CiAgICAgICAgIGlmIChpbmNyID4gSU5UX01BWCkgewotICAgICAgICAgICAgUHlNZW1fRlJFRShwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgImlucHV0IGxpbmUgdG9vIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHByID0gKGNoYXIgKilQeU1lbV9SRUFMTE9DKHAsIG4gKyBpbmNyKTsKKyAgICAgICAgcHIgPSAoY2hhciAqKVB5TWVtX1Jhd1JlYWxsb2MocCwgbiArIGluY3IpOwogICAgICAgICBpZiAocHIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlNZW1fRlJFRShwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTE1MSw5ICsxNTEsOSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG4gKz0gc3RybGVuKHArbik7CiAgICAgfQotICAgIHByID0gKGNoYXIgKilQeU1lbV9SRUFMTE9DKHAsIG4rMSk7CisgICAgcHIgPSAoY2hhciAqKVB5TWVtX1Jhd1JlYWxsb2MocCwgbisxKTsKICAgICBpZiAocHIgPT0gTlVMTCkgewotICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICBQeU1lbV9SYXdGcmVlKHApOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNjYsMTUgKzE2NiwxNiBAQAogCiAgICBOb3RlOiBQeXRob24gZXhwZWN0cyBpbiByZXR1cm4gYSBidWZmZXIgYWxsb2NhdGVkIHdpdGggUHlNZW1fTWFsbG9jLiAqLwogCi1jaGFyICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworY2hhciAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKIAogCiAvKiBJbnRlcmZhY2UgdXNlZCBieSB0b2tlbml6ZXIuYyBhbmQgYmx0aW5tb2R1bGUuYyAqLwogCiBjaGFyICoKLVB5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpCitQeU9TX1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewotICAgIGNoYXIgKnJ2OworICAgIGNoYXIgKnJ2LCAqcmVzOworICAgIHNpemVfdCBsZW47CiAKICAgICBpZiAoX1B5T1NfUmVhZGxpbmVUU3RhdGUgPT0gUHlUaHJlYWRTdGF0ZV9HRVQoKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtMTg0LDExICsxODUsNyBAQAogCiAKICAgICBpZiAoUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9PSBOVUxMKSB7Ci0jaWZkZWYgX19WTVMKLSAgICAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IHZtc19fU3RkaW9SZWFkbGluZTsKLSNlbHNlCiAgICAgICAgIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgPSBQeU9TX1N0ZGlvUmVhZGxpbmU7Ci0jZW5kaWYKICAgICB9CiAKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMjIxLDUgKzIxOCwxNCBAQAogCiAgICAgX1B5T1NfUmVhZGxpbmVUU3RhdGUgPSBOVUxMOwogCi0gICAgcmV0dXJuIHJ2OworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGxlbiA9IHN0cmxlbihydikgKyAxOworICAgIHJlcyA9IFB5TWVtX01hbGxvYyhsZW4pOworICAgIGlmIChyZXMgIT0gTlVMTCkKKyAgICAgICAgbWVtY3B5KHJlcywgcnYsIGxlbik7CisgICAgUHlNZW1fUmF3RnJlZShydik7CisKKyAgICByZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvUGFyc2VyL25vZGUuYyBiL1BhcnNlci9ub2RlLmMKaW5kZXggMWU0ZjBkYS4uNTY0YmQ5MSAxMDA2NDQKLS0tIGEvUGFyc2VyL25vZGUuYworKysgYi9QYXJzZXIvbm9kZS5jCkBAIC03Niw3ICs3Niw3IEBACiAKIAogaW50Ci1QeU5vZGVfQWRkQ2hpbGQocmVnaXN0ZXIgbm9kZSAqbjEsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorUHlOb2RlX0FkZENoaWxkKG5vZGUgKm4xLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIHsKICAgICBjb25zdCBpbnQgbmNoID0gbjEtPm5fbmNoaWxkcmVuOwogICAgIGludCBjdXJyZW50X2NhcGFjaXR5OwpAQCAtOTEsNyArOTEsNyBAQAogICAgIGlmIChjdXJyZW50X2NhcGFjaXR5IDwgMCB8fCByZXF1aXJlZF9jYXBhY2l0eSA8IDApCiAgICAgICAgIHJldHVybiBFX09WRVJGTE9XOwogICAgIGlmIChjdXJyZW50X2NhcGFjaXR5IDwgcmVxdWlyZWRfY2FwYWNpdHkpIHsKLSAgICAgICAgaWYgKHJlcXVpcmVkX2NhcGFjaXR5ID4gUFlfU0laRV9NQVggLyBzaXplb2Yobm9kZSkpIHsKKyAgICAgICAgaWYgKChzaXplX3QpcmVxdWlyZWRfY2FwYWNpdHkgPiBQWV9TSVpFX01BWCAvIHNpemVvZihub2RlKSkgewogICAgICAgICAgICAgcmV0dXJuIEVfTk9NRU07CiAgICAgICAgIH0KICAgICAgICAgbiA9IG4xLT5uX2NoaWxkOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BhcnNlci5jIGIvUGFyc2VyL3BhcnNlci5jCmluZGV4IGI1MDVmZTAuLjU2ZWM1MTQgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wYXJzZXIuYworKysgYi9QYXJzZXIvcGFyc2VyLmMKQEAgLTM1LDkgKzM1LDkgQEAKICNkZWZpbmUgc19lbXB0eShzKSAoKHMpLT5zX3RvcCA9PSAmKHMpLT5zX2Jhc2VbTUFYU1RBQ0tdKQogCiBzdGF0aWMgaW50Ci1zX3B1c2gocmVnaXN0ZXIgc3RhY2sgKnMsIGRmYSAqZCwgbm9kZSAqcGFyZW50KQorc19wdXNoKHN0YWNrICpzLCBkZmEgKmQsIG5vZGUgKnBhcmVudCkKIHsKLSAgICByZWdpc3RlciBzdGFja2VudHJ5ICp0b3A7CisgICAgc3RhY2tlbnRyeSAqdG9wOwogICAgIGlmIChzLT5zX3RvcCA9PSBzLT5zX2Jhc2UpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzX3B1c2g6IHBhcnNlciBzdGFjayBvdmVyZmxvd1xuIik7CiAgICAgICAgIHJldHVybiBFX05PTUVNOwpAQCAtNTIsNyArNTIsNyBAQAogI2lmZGVmIFB5X0RFQlVHCiAKIHN0YXRpYyB2b2lkCi1zX3BvcChyZWdpc3RlciBzdGFjayAqcykKK3NfcG9wKHN0YWNrICpzKQogewogICAgIGlmIChzX2VtcHR5KHMpKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJzX3BvcDogcGFyc2VyIHN0YWNrIHVuZGVyZmxvdyAtLSBGQVRBTCIpOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAvKiBQQVJTRVIgU1RBQ0sgT1BFUkFUSU9OUyAqLwogCiBzdGF0aWMgaW50Ci1zaGlmdChyZWdpc3RlciBzdGFjayAqcywgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK3NoaWZ0KHN0YWNrICpzLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGludCBlcnI7CiAgICAgYXNzZXJ0KCFzX2VtcHR5KHMpKTsKQEAgLTExNywxMCArMTE3LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLXB1c2gocmVnaXN0ZXIgc3RhY2sgKnMsIGludCB0eXBlLCBkZmEgKmQsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitwdXNoKHN0YWNrICpzLCBpbnQgdHlwZSwgZGZhICpkLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGludCBlcnI7Ci0gICAgcmVnaXN0ZXIgbm9kZSAqbjsKKyAgICBub2RlICpuOwogICAgIG4gPSBzLT5zX3RvcC0+c19wYXJlbnQ7CiAgICAgYXNzZXJ0KCFzX2VtcHR5KHMpKTsKICAgICBlcnIgPSBQeU5vZGVfQWRkQ2hpbGQobiwgdHlwZSwgKGNoYXIgKilOVUxMLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwpAQCAtMTM0LDE1ICsxMzQsMTUgQEAKIC8qIFBBUlNFUiBQUk9QRVIgKi8KIAogc3RhdGljIGludAotY2xhc3NpZnkocGFyc2VyX3N0YXRlICpwcywgaW50IHR5cGUsIGNoYXIgKnN0cikKK2NsYXNzaWZ5KHBhcnNlcl9zdGF0ZSAqcHMsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgZ3JhbW1hciAqZyA9IHBzLT5wX2dyYW1tYXI7Ci0gICAgcmVnaXN0ZXIgaW50IG4gPSBnLT5nX2xsLmxsX25sYWJlbHM7CisgICAgaW50IG4gPSBnLT5nX2xsLmxsX25sYWJlbHM7CiAKICAgICBpZiAodHlwZSA9PSBOQU1FKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgKnMgPSBzdHI7Ci0gICAgICAgIHJlZ2lzdGVyIGxhYmVsICpsID0gZy0+Z19sbC5sbF9sYWJlbDsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgICAgIGNvbnN0IGNoYXIgKnMgPSBzdHI7CisgICAgICAgIGxhYmVsICpsID0gZy0+Z19sbC5sbF9sYWJlbDsKKyAgICAgICAgaW50IGk7CiAgICAgICAgIGZvciAoaSA9IG47IGkgPiAwOyBpLS0sIGwrKykgewogICAgICAgICAgICAgaWYgKGwtPmxiX3R5cGUgIT0gTkFNRSB8fCBsLT5sYl9zdHIgPT0gTlVMTCB8fAogICAgICAgICAgICAgICAgIGwtPmxiX3N0clswXSAhPSBzWzBdIHx8CkBAIC0xNjUsOCArMTY1LDggQEAKICAgICB9CiAKICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIGxhYmVsICpsID0gZy0+Z19sbC5sbF9sYWJlbDsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgICAgIGxhYmVsICpsID0gZy0+Z19sbC5sbF9sYWJlbDsKKyAgICAgICAgaW50IGk7CiAgICAgICAgIGZvciAoaSA9IG47IGkgPiAwOyBpLS0sIGwrKykgewogICAgICAgICAgICAgaWYgKGwtPmxiX3R5cGUgPT0gdHlwZSAmJiBsLT5sYl9zdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIEQocHJpbnRmKCJJdCdzIGEgdG9rZW4gd2Uga25vd1xuIikpOwpAQCAtMjI1LDEwICsyMjUsMTAgQEAKICNlbmRpZiAvKiBmdXR1cmUga2V5d29yZCAqLwogCiBpbnQKLVB5UGFyc2VyX0FkZFRva2VuKHJlZ2lzdGVyIHBhcnNlcl9zdGF0ZSAqcHMsIHJlZ2lzdGVyIGludCB0eXBlLCBjaGFyICpzdHIsCitQeVBhcnNlcl9BZGRUb2tlbihwYXJzZXJfc3RhdGUgKnBzLCBpbnQgdHlwZSwgY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIGludCAqZXhwZWN0ZWRfcmV0KQogewotICAgIHJlZ2lzdGVyIGludCBpbGFiZWw7CisgICAgaW50IGlsYWJlbDsKICAgICBpbnQgZXJyOwogCiAgICAgRChwcmludGYoIlRva2VuICVzLyclcycgLi4uICIsIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW3R5cGVdLCBzdHIpKTsKQEAgLTI0MSwxNSArMjQxLDE1IEBACiAgICAgLyogTG9vcCB1bnRpbCB0aGUgdG9rZW4gaXMgc2hpZnRlZCBvciBhbiBlcnJvciBvY2N1cnJlZCAqLwogICAgIGZvciAoOzspIHsKICAgICAgICAgLyogRmV0Y2ggdGhlIGN1cnJlbnQgZGZhIGFuZCBzdGF0ZSAqLwotICAgICAgICByZWdpc3RlciBkZmEgKmQgPSBwcy0+cF9zdGFjay5zX3RvcC0+c19kZmE7Ci0gICAgICAgIHJlZ2lzdGVyIHN0YXRlICpzID0gJmQtPmRfc3RhdGVbcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGVdOworICAgICAgICBkZmEgKmQgPSBwcy0+cF9zdGFjay5zX3RvcC0+c19kZmE7CisgICAgICAgIHN0YXRlICpzID0gJmQtPmRfc3RhdGVbcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGVdOwogCiAgICAgICAgIEQocHJpbnRmKCIgREZBICclcycsIHN0YXRlICVkOiIsCiAgICAgICAgICAgICBkLT5kX25hbWUsIHBzLT5wX3N0YWNrLnNfdG9wLT5zX3N0YXRlKSk7CiAKICAgICAgICAgLyogQ2hlY2sgYWNjZWxlcmF0b3IgKi8KICAgICAgICAgaWYgKHMtPnNfbG93ZXIgPD0gaWxhYmVsICYmIGlsYWJlbCA8IHMtPnNfdXBwZXIpIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGludCB4ID0gcy0+c19hY2NlbFtpbGFiZWwgLSBzLT5zX2xvd2VyXTsKKyAgICAgICAgICAgIGludCB4ID0gcy0+c19hY2NlbFtpbGFiZWwgLSBzLT5zX2xvd2VyXTsKICAgICAgICAgICAgIGlmICh4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgaWYgKHggJiAoMTw8NykpIHsKICAgICAgICAgICAgICAgICAgICAgLyogUHVzaCBub24tdGVybWluYWwgKi8KZGlmZiAtLWdpdCBhL1BhcnNlci9wYXJzZXRvay5jIGIvUGFyc2VyL3BhcnNldG9rLmMKaW5kZXggN2JlYjczNS4uNjI5ZGVlNSAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNldG9rLmMKKysrIGIvUGFyc2VyL3BhcnNldG9rLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogLyogRm9yd2FyZCAqLwogc3RhdGljIG5vZGUgKnBhcnNldG9rKHN0cnVjdCB0b2tfc3RhdGUgKiwgZ3JhbW1hciAqLCBpbnQsIHBlcnJkZXRhaWwgKiwgaW50ICopOwotc3RhdGljIGludCBpbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKK3N0YXRpYyBpbnQgaW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBQeU9iamVjdCAqIGZpbGVuYW1lKTsKIAogLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gYSBzdHJpbmcuICBSZXR1cm4gZXJyb3IgY29kZSwgcHJpbnQgc29tZSBlcnJvcnMuICovCiBub2RlICoKQEAgLTQxLDkgKzQxLDkgQEAKIH0KIAogbm9kZSAqCi1QeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQorUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqcywgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKIHsKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2s7CiAgICAgaW50IGV4ZWNfaW5wdXQgPSBzdGFydCA9PSBmaWxlX2lucHV0OwpAQCAtNjcsMTEgKzY3LDM1IEBACiAgICAgcmV0dXJuIHBhcnNldG9rKHRvaywgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKIH0KIAorbm9kZSAqCitQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK3sKKyAgICBub2RlICpuOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IE5VTEw7CisjaWZuZGVmIFBHRU4KKyAgICBpZiAoZmlsZW5hbWVfc3RyICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIG4gPSBQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChzLCBmaWxlbmFtZSwgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKKyNpZm5kZWYgUEdFTgorICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIG47Cit9CisKIC8qIFBhcnNlIGlucHV0IGNvbWluZyBmcm9tIGEgZmlsZS4gIFJldHVybiBlcnJvciBjb2RlLCBwcmludCBzb21lIGVycm9ycy4gKi8KIAogbm9kZSAqCiBQeVBhcnNlcl9QYXJzZUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgY2hhciAqcHMxLCBjaGFyICpwczIsIHBlcnJkZXRhaWwgKmVycl9yZXQpCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIsCisgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCkKIHsKICAgICByZXR1cm4gUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoZnAsIGZpbGVuYW1lLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLCBzdGFydCwgcHMxLCBwczIsIGVycl9yZXQsIDApOwpAQCAtODAsNyArMTA0LDggQEAKIG5vZGUgKgogUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICplbmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIsCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgZmxhZ3MpCiB7CiAgICAgaW50IGlmbGFncyA9IGZsYWdzOwogICAgIHJldHVybiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KGZwLCBmaWxlbmFtZSwgZW5jLCBnLCBzdGFydCwgcHMxLApAQCAtODgsMTYgKzExMywxNyBAQAogfQogCiBub2RlICoKLVB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmMsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMxLCBjaGFyICpwczIsIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCitQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoRklMRSAqZnAsIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmMsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvazsKIAogICAgIGlmIChpbml0ZXJyKGVycl9yZXQsIGZpbGVuYW1lKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCh0b2sgPSBQeVRva2VuaXplcl9Gcm9tRmlsZShmcCwgKGNoYXIgKillbmMsIHBzMSwgcHMyKSkgPT0gTlVMTCkgeworICAgIGlmICgodG9rID0gUHlUb2tlbml6ZXJfRnJvbUZpbGUoZnAsIGVuYywgcHMxLCBwczIpKSA9PSBOVUxMKSB7CiAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTA4LDYgKzEzNCwzMSBAQAogICAgIHJldHVybiBwYXJzZXRvayh0b2ssIGcsIHN0YXJ0LCBlcnJfcmV0LCBmbGFncyk7CiB9CiAKK25vZGUgKgorUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK3sKKyAgICBub2RlICpuOworICAgIFB5T2JqZWN0ICpmaWxlb2JqID0gTlVMTDsKKyNpZm5kZWYgUEdFTgorICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVvYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGZpbGVvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBuID0gUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KGZwLCBmaWxlb2JqLCBlbmMsIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgcHMxLCBwczIsIGVycl9yZXQsIGZsYWdzKTsKKyNpZm5kZWYgUEdFTgorICAgIFB5X1hERUNSRUYoZmlsZW9iaik7CisjZW5kaWYKKyAgICByZXR1cm4gbjsKK30KKwogI2lmZGVmIFBZX1BBUlNFUl9SRVFVSVJFU19GVVRVUkVfS0VZV09SRAogI2lmIDAKIHN0YXRpYyBjaGFyIHdpdGhfbXNnW10gPQpAQCAtMTM4LDcgKzE4OSw2IEBACiAgICAgaW50IHN0YXJ0ZWQgPSAwOwogCiAgICAgaWYgKChwcyA9IFB5UGFyc2VyX05ldyhnLCBzdGFydCkpID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJubyBtZW0gZm9yIG5ldyBwYXJzZXJcbiIpOwogICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfTk9NRU07CiAgICAgICAgIFB5VG9rZW5pemVyX0ZyZWUodG9rKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzgsNyArMjI4LDYgQEAKICAgICAgICAgbGVuID0gYiAtIGE7IC8qIFhYWCB0aGlzIG1heSBjb21wdXRlIE5VTEwgLSBOVUxMICovCiAgICAgICAgIHN0ciA9IChjaGFyICopIFB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIG1lbSBmb3IgbmV4dCB0b2tlblxuIik7CiAgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfTk9NRU07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjA1LDcgKzI1NCw4IEBACiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBpZiAoYSA+PSB0b2stPmxpbmVfc3RhcnQpCi0gICAgICAgICAgICBjb2xfb2Zmc2V0ID0gYSAtIHRvay0+bGluZV9zdGFydDsKKyAgICAgICAgICAgIGNvbF9vZmZzZXQgPSBQeV9TQUZFX0RPV05DQVNUKGEgLSB0b2stPmxpbmVfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9pbnRwdHJfdCwgaW50KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29sX29mZnNldCA9IC0xOwogCkBAIC0zMDgsNyArMzU4LDcgQEAKIH0KIAogc3RhdGljIGludAotaW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2luaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIGVycl9yZXQtPmVycm9yID0gRV9PSzsKICAgICBlcnJfcmV0LT5saW5lbm8gPSAwOwpAQCAtMzE3LDEzICszNjcsMTYgQEAKICAgICBlcnJfcmV0LT50b2tlbiA9IC0xOwogICAgIGVycl9yZXQtPmV4cGVjdGVkID0gLTE7CiAjaWZuZGVmIFBHRU4KLSAgICBpZiAoZmlsZW5hbWUpCi0gICAgICAgIGVycl9yZXQtPmZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7Ci0gICAgZWxzZQorICAgIGlmIChmaWxlbmFtZSkgeworICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOworICAgICAgICBlcnJfcmV0LT5maWxlbmFtZSA9IGZpbGVuYW1lOworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgZXJyX3JldC0+ZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHN0cmluZz4iKTsKLSAgICBpZiAoZXJyX3JldC0+ZmlsZW5hbWUgPT0gTlVMTCkgewotICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGVycl9yZXQtPmZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BnZW5tYWluLmMgYi9QYXJzZXIvcGdlbm1haW4uYwppbmRleCA1MmI4MzgwLi4wMTdhNGY5IDEwMDY0NAotLS0gYS9QYXJzZXIvcGdlbm1haW4uYworKysgYi9QYXJzZXIvcGdlbm1haW4uYwpAQCAtMTEzLDYgKzExMyw3IEBACiAgICAgICAgIFB5X0V4aXQoMSk7CiAgICAgfQogICAgIGcgPSBwZ2VuKG4pOworICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIGlmIChnID09IE5VTEwpIHsKICAgICAgICAgcHJpbnRmKCJCYWQgZ3JhbW1hci5cbiIpOwogICAgICAgICBQeV9FeGl0KDEpOwpAQCAtMTM3LDcgKzEzOCw3IEBACiAvKiBOby1ub25zZW5zZSBteV9yZWFkbGluZSgpIGZvciB0b2tlbml6ZXIuYyAqLwogCiBjaGFyICoKLVB5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpCitQeU9TX1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuID0gMTAwMDsKICAgICBjaGFyICpwID0gKGNoYXIgKilQeU1lbV9NQUxMT0Mobik7CmRpZmYgLS1naXQgYS9QYXJzZXIvdG9rZW5pemVyLmMgYi9QYXJzZXIvdG9rZW5pemVyLmMKaW5kZXggNjYwYzBmMC4uMjJhY2NkMSAxMDA2NDQKLS0tIGEvUGFyc2VyL3Rva2VuaXplci5jCisrKyBiL1BhcnNlci90b2tlbml6ZXIuYwpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICAgICAgICAgfHwgYyA9PSAnXydcCiAgICAgICAgICAgICAgICB8fCAoYyA+PSAxMjgpKQogCi1leHRlcm4gY2hhciAqUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK2V4dGVybiBjaGFyICpQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogLyogUmV0dXJuIG1hbGxvYydlZCBzdHJpbmcgaW5jbHVkaW5nIHRyYWlsaW5nIFxuOwogICAgZW1wdHkgbWFsbG9jJ2VkIHN0cmluZyBmb3IgRU9GOwogICAgTlVMTCBpZiBpbnRlcnJ1cHRlZCAqLwpAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBUb2tlbiBuYW1lcyAqLwogCi1jaGFyICpfUHlQYXJzZXJfVG9rZW5OYW1lc1tdID0geworY29uc3QgY2hhciAqX1B5UGFyc2VyX1Rva2VuTmFtZXNbXSA9IHsKICAgICAiRU5ETUFSS0VSIiwKICAgICAiTkFNRSIsCiAgICAgIk5VTUJFUiIsCkBAIC02OTEsNyArNjkxLDggQEAKIAogc3RhdGljIGNoYXIgKgogdHJhbnNsYXRlX25ld2xpbmVzKGNvbnN0IGNoYXIgKnMsIGludCBleGVjX2lucHV0LCBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spIHsKLSAgICBpbnQgc2tpcF9uZXh0X2xmID0gMCwgbmVlZGVkX2xlbmd0aCA9IHN0cmxlbihzKSArIDIsIGZpbmFsX2xlbmd0aDsKKyAgICBpbnQgc2tpcF9uZXh0X2xmID0gMDsKKyAgICBzaXplX3QgbmVlZGVkX2xlbmd0aCA9IHN0cmxlbihzKSArIDIsIGZpbmFsX2xlbmd0aDsKICAgICBjaGFyICpidWYsICpjdXJyZW50OwogICAgIGNoYXIgYyA9ICdcMCc7CiAgICAgYnVmID0gUHlNZW1fTUFMTE9DKG5lZWRlZF9sZW5ndGgpOwpAQCAtNzk5LDcgKzgwMCw3IEBACiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc3RyID0gKGNoYXIgKilkZWNvZGVfc3RyKHN0ciwgZXhlY19pbnB1dCwgdG9rKTsKKyAgICBzdHIgPSBkZWNvZGVfc3RyKHN0ciwgZXhlY19pbnB1dCwgdG9rKTsKICAgICBpZiAoc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTg0Miw3ICs4NDMsOCBAQAogLyogU2V0IHVwIHRva2VuaXplciBmb3IgZmlsZSAqLwogCiBzdHJ1Y3QgdG9rX3N0YXRlICoKLVB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKmZwLCBjaGFyKiBlbmMsIGNoYXIgKnBzMSwgY2hhciAqcHMyKQorUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIqIGVuYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvayA9IHRva19uZXcoKTsKICAgICBpZiAodG9rID09IE5VTEwpCkBAIC04OTMsNyArODk1LDcgQEAKIC8qIEdldCBuZXh0IGNoYXIsIHVwZGF0aW5nIHN0YXRlOyBlcnJvciBjb2RlIGdvZXMgaW50byB0b2stPmRvbmUgKi8KIAogc3RhdGljIGludAotdG9rX25leHRjKHJlZ2lzdGVyIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKK3Rva19uZXh0YyhzdHJ1Y3QgdG9rX3N0YXRlICp0b2spCiB7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAodG9rLT5jdXIgIT0gdG9rLT5pbnApIHsKQEAgLTEwOTAsNyArMTA5Miw3IEBACiAvKiBCYWNrLXVwIG9uZSBjaGFyYWN0ZXIgKi8KIAogc3RhdGljIHZvaWQKLXRva19iYWNrdXAocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rLCByZWdpc3RlciBpbnQgYykKK3Rva19iYWNrdXAoc3RydWN0IHRva19zdGF0ZSAqdG9rLCBpbnQgYykKIHsKICAgICBpZiAoYyAhPSBFT0YpIHsKICAgICAgICAgaWYgKC0tdG9rLT5jdXIgPCB0b2stPmJ1ZikKQEAgLTEzMjAsOSArMTMyMiw5IEBACiAvKiBHZXQgbmV4dCB0b2tlbiwgYWZ0ZXIgc3BhY2Ugc3RyaXBwaW5nIGV0Yy4gKi8KIAogc3RhdGljIGludAotdG9rX2dldChyZWdpc3RlciBzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIGNoYXIgKipwX3N0YXJ0LCBjaGFyICoqcF9lbmQpCit0b2tfZ2V0KHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgY2hhciAqKnBfc3RhcnQsIGNoYXIgKipwX2VuZCkKIHsKLSAgICByZWdpc3RlciBpbnQgYzsKKyAgICBpbnQgYzsKICAgICBpbnQgYmxhbmtsaW5lLCBub25hc2NpaTsKIAogICAgICpwX3N0YXJ0ID0gKnBfZW5kID0gTlVMTDsKQEAgLTEzMzIsOCArMTMzNCw4IEBACiAKICAgICAvKiBHZXQgaW5kZW50YXRpb24gbGV2ZWwgKi8KICAgICBpZiAodG9rLT5hdGJvbCkgewotICAgICAgICByZWdpc3RlciBpbnQgY29sID0gMDsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGFsdGNvbCA9IDA7CisgICAgICAgIGludCBjb2wgPSAwOworICAgICAgICBpbnQgYWx0Y29sID0gMDsKICAgICAgICAgdG9rLT5hdGJvbCA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIGMgPSB0b2tfbmV4dGModG9rKTsKQEAgLTE1OTUsMTUgKzE1OTcsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoaXNkaWdpdChjKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjID09ICdlJyB8fCBjID09ICdFJykgewotICAgICAgICBleHBvbmVudDoKKyAgICAgICAgICAgICAgICAgICAgaW50IGU7CisgICAgICAgICAgICAgICAgICBleHBvbmVudDoKKyAgICAgICAgICAgICAgICAgICAgZSA9IGM7CiAgICAgICAgICAgICAgICAgICAgIC8qIEV4cG9uZW50IHBhcnQgKi8KICAgICAgICAgICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKycgfHwgYyA9PSAnLScpCisgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICcrJyB8fCBjID09ICctJykgewogICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzZGlnaXQoYykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvay0+ZG9uZSA9IEVfVE9LRU47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzZGlnaXQoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2stPmRvbmUgPSBFX1RPS0VOOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva19iYWNrdXAodG9rLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0tFTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNkaWdpdChjKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdG9rX2JhY2t1cCh0b2ssIGMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LRU47CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tfYmFja3VwKHRvaywgZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqcF9zdGFydCA9IHRvay0+c3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAqcF9lbmQgPSB0b2stPmN1cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVU1CRVI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwpAQCAtMTc0OSwxMCArMTc2MCwxNSBAQAogICAgIEZJTEUgKmZwOwogICAgIGNoYXIgKnBfc3RhcnQgPU5VTEwgLCAqcF9lbmQgPU5VTEwgLCAqZW5jb2RpbmcgPSBOVUxMOwogCisjaWZuZGVmIFBHRU4KKyAgICBmZCA9IF9QeV9kdXAoZmQpOworI2Vsc2UKICAgICBmZCA9IGR1cChmZCk7CisjZW5kaWYKICAgICBpZiAoZmQgPCAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKwogICAgIGZwID0gZmRvcGVuKGZkLCAiciIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3Rva2VuaXplci5oIGIvUGFyc2VyL3Rva2VuaXplci5oCmluZGV4IGVkMWYzYWEuLjFjZTZlZWIgMTAwNjQ0Ci0tLSBhL1BhcnNlci90b2tlbml6ZXIuaAorKysgYi9QYXJzZXIvdG9rZW5pemVyLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBpbnQgaW5kc3RhY2tbTUFYSU5ERU5UXTsgICAgICAgICAgICAvKiBTdGFjayBvZiBpbmRlbnRzICovCiAgICAgaW50IGF0Ym9sOyAgICAgICAgICAvKiBOb256ZXJvIGlmIGF0IGJlZ2luIG9mIG5ldyBsaW5lICovCiAgICAgaW50IHBlbmRpbjsgICAgICAgICAvKiBQZW5kaW5nIGluZGVudHMgKGlmID4gMCkgb3IgZGVkZW50cyAoaWYgPCAwKSAqLwotICAgIGNoYXIgKnByb21wdCwgKm5leHRwcm9tcHQ7ICAgICAgICAgIC8qIEZvciBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwcm9tcHQsICpuZXh0cHJvbXB0OyAgICAgICAgICAvKiBGb3IgaW50ZXJhY3RpdmUgcHJvbXB0aW5nICovCiAgICAgaW50IGxpbmVubzsgICAgICAgICAvKiBDdXJyZW50IGxpbmUgbnVtYmVyICovCiAgICAgaW50IGxldmVsOyAgICAgICAgICAvKiAoKSBbXSB7fSBQYXJlbnRoZXNlcyBuZXN0aW5nIGxldmVsICovCiAgICAgICAgICAgICAvKiBVc2VkIHRvIGFsbG93IGZyZWUgY29udGludWF0aW9ucyBpbnNpZGUgdGhlbSAqLwpAQCAtNjksOCArNjksOCBAQAogCiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVVURjgoY29uc3QgY2hhciAqLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY2hhciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICopOworZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgUHlUb2tlbml6ZXJfRnJlZShzdHJ1Y3QgdG9rX3N0YXRlICopOwogZXh0ZXJuIGludCBQeVRva2VuaXplcl9HZXQoc3RydWN0IHRva19zdGF0ZSAqLCBjaGFyICoqLCBjaGFyICoqKTsKIGV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfUmVzdG9yZUVuY29kaW5nKHN0cnVjdCB0b2tfc3RhdGUqIHRvaywKZGlmZiAtLWdpdCBhL1B5dGhvbi9QeXRob24tYXN0LmMgYi9QeXRob24vUHl0aG9uLWFzdC5jCmluZGV4IDg1NDNiNjYuLjQ0ZmRhZmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9QeXRob24tYXN0LmMKKysrIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwpAQCAtMjcxLDYgKzI3MSwxMCBAQAogc3RhdGljIGNoYXIgKkJ5dGVzX2ZpZWxkc1tdPXsKICAgICAicyIsCiB9Oworc3RhdGljIFB5VHlwZU9iamVjdCAqTmFtZUNvbnN0YW50X3R5cGU7CitzdGF0aWMgY2hhciAqTmFtZUNvbnN0YW50X2ZpZWxkc1tdPXsKKyAgICAidmFsdWUiLAorfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKkVsbGlwc2lzX3R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpBdHRyaWJ1dGVfdHlwZTsKIF9QeV9JREVOVElGSUVSKGF0dHIpOwpAQCAtNDA4LDI0ICs0MTIsMjQgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgKmFyZ3VtZW50c190eXBlOwogc3RhdGljIFB5T2JqZWN0KiBhc3Qyb2JqX2FyZ3VtZW50cyh2b2lkKik7CiBfUHlfSURFTlRJRklFUih2YXJhcmcpOwotX1B5X0lERU5USUZJRVIodmFyYXJnYW5ub3RhdGlvbik7CiBfUHlfSURFTlRJRklFUihrd29ubHlhcmdzKTsKLV9QeV9JREVOVElGSUVSKGt3YXJnKTsKLV9QeV9JREVOVElGSUVSKGt3YXJnYW5ub3RhdGlvbik7Ci1fUHlfSURFTlRJRklFUihkZWZhdWx0cyk7CiBfUHlfSURFTlRJRklFUihrd19kZWZhdWx0cyk7CitfUHlfSURFTlRJRklFUihrd2FyZyk7CitfUHlfSURFTlRJRklFUihkZWZhdWx0cyk7CiBzdGF0aWMgY2hhciAqYXJndW1lbnRzX2ZpZWxkc1tdPXsKICAgICAiYXJncyIsCiAgICAgInZhcmFyZyIsCi0gICAgInZhcmFyZ2Fubm90YXRpb24iLAogICAgICJrd29ubHlhcmdzIiwKLSAgICAia3dhcmciLAotICAgICJrd2FyZ2Fubm90YXRpb24iLAotICAgICJkZWZhdWx0cyIsCiAgICAgImt3X2RlZmF1bHRzIiwKKyAgICAia3dhcmciLAorICAgICJkZWZhdWx0cyIsCiB9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqYXJnX3R5cGU7CiBzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfYXJnKHZvaWQqKTsKK3N0YXRpYyBjaGFyICphcmdfYXR0cmlidXRlc1tdID0geworICAgICJsaW5lbm8iLAorICAgICJjb2xfb2Zmc2V0IiwKK307CiBfUHlfSURFTlRJRklFUihhcmcpOwogX1B5X0lERU5USUZJRVIoYW5ub3RhdGlvbik7CiBzdGF0aWMgY2hhciAqYXJnX2ZpZWxkc1tdPXsKQEAgLTY3Myw2ICs2NzcsNyBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKW8pOwogICAgIHJldHVybiAoUHlPYmplY3QqKW87CiB9CisjZGVmaW5lIGFzdDJvYmpfc2luZ2xldG9uIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfaWRlbnRpZmllciBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX3N0cmluZyBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2J5dGVzIGFzdDJvYmpfb2JqZWN0CkBAIC02ODQsNiArNjg5LDE3IEBACiAKIC8qIENvbnZlcnNpb24gUHl0aG9uIC0+IEFTVCAqLwogCitzdGF0aWMgaW50IG9iajJhc3Rfc2luZ2xldG9uKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKK3sKKyAgICBpZiAob2JqICE9IFB5X05vbmUgJiYgb2JqICE9IFB5X1RydWUgJiYgb2JqICE9IFB5X0ZhbHNlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFTVCBzaW5nbGV0b24gbXVzdCBiZSBUcnVlLCBGYWxzZSwgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IG9iajsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvYmoyYXN0X29iamVjdChQeU9iamVjdCogb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCiB7CiAgICAgaWYgKG9iaiA9PSBQeV9Ob25lKQpAQCAtNzU4LDYgKzc3NCwxOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGV4aXN0c19ub3Rfbm9uZShQeU9iamVjdCAqb2JqLCBfUHlfSWRlbnRpZmllciAqaWQpCit7CisgICAgaW50IGlzbm9uZTsKKyAgICBQeU9iamVjdCAqYXR0ciA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCBpZCk7CisgICAgaWYgKCFhdHRyKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpc25vbmUgPSBhdHRyID09IFB5X05vbmU7CisgICAgUHlfREVDUkVGKGF0dHIpOworICAgIHJldHVybiAhaXNub25lOworfQorCiAKIHN0YXRpYyBpbnQgaW5pdF90eXBlcyh2b2lkKQogewpAQCAtODYyLDYgKzg5MSw5IEBACiAgICAgaWYgKCFTdHJfdHlwZSkgcmV0dXJuIDA7CiAgICAgQnl0ZXNfdHlwZSA9IG1ha2VfdHlwZSgiQnl0ZXMiLCBleHByX3R5cGUsIEJ5dGVzX2ZpZWxkcywgMSk7CiAgICAgaWYgKCFCeXRlc190eXBlKSByZXR1cm4gMDsKKyAgICBOYW1lQ29uc3RhbnRfdHlwZSA9IG1ha2VfdHlwZSgiTmFtZUNvbnN0YW50IiwgZXhwcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9maWVsZHMsIDEpOworICAgIGlmICghTmFtZUNvbnN0YW50X3R5cGUpIHJldHVybiAwOwogICAgIEVsbGlwc2lzX3R5cGUgPSBtYWtlX3R5cGUoIkVsbGlwc2lzIiwgZXhwcl90eXBlLCBOVUxMLCAwKTsKICAgICBpZiAoIUVsbGlwc2lzX3R5cGUpIHJldHVybiAwOwogICAgIEF0dHJpYnV0ZV90eXBlID0gbWFrZV90eXBlKCJBdHRyaWJ1dGUiLCBleHByX3R5cGUsIEF0dHJpYnV0ZV9maWVsZHMsIDMpOwpAQCAtMTAzOSw2ICsxMDcxLDcgQEAKICAgICBjb21wcmVoZW5zaW9uX3R5cGUgPSBtYWtlX3R5cGUoImNvbXByZWhlbnNpb24iLCAmQVNUX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fZmllbGRzLCAzKTsKICAgICBpZiAoIWNvbXByZWhlbnNpb25fdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhjb21wcmVoZW5zaW9uX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBleGNlcHRoYW5kbGVyX3R5cGUgPSBtYWtlX3R5cGUoImV4Y2VwdGhhbmRsZXIiLCAmQVNUX3R5cGUsIE5VTEwsIDApOwogICAgIGlmICghZXhjZXB0aGFuZGxlcl90eXBlKSByZXR1cm4gMDsKICAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGV4Y2VwdGhhbmRsZXJfdHlwZSwgZXhjZXB0aGFuZGxlcl9hdHRyaWJ1dGVzLCAyKSkKQEAgLTEwNDYsMTYgKzEwNzksMjEgQEAKICAgICBFeGNlcHRIYW5kbGVyX3R5cGUgPSBtYWtlX3R5cGUoIkV4Y2VwdEhhbmRsZXIiLCBleGNlcHRoYW5kbGVyX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdEhhbmRsZXJfZmllbGRzLCAzKTsKICAgICBpZiAoIUV4Y2VwdEhhbmRsZXJfdHlwZSkgcmV0dXJuIDA7Ci0gICAgYXJndW1lbnRzX3R5cGUgPSBtYWtlX3R5cGUoImFyZ3VtZW50cyIsICZBU1RfdHlwZSwgYXJndW1lbnRzX2ZpZWxkcywgOCk7CisgICAgYXJndW1lbnRzX3R5cGUgPSBtYWtlX3R5cGUoImFyZ3VtZW50cyIsICZBU1RfdHlwZSwgYXJndW1lbnRzX2ZpZWxkcywgNik7CiAgICAgaWYgKCFhcmd1bWVudHNfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhhcmd1bWVudHNfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGFyZ190eXBlID0gbWFrZV90eXBlKCJhcmciLCAmQVNUX3R5cGUsIGFyZ19maWVsZHMsIDIpOwogICAgIGlmICghYXJnX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoYXJnX3R5cGUsIGFyZ19hdHRyaWJ1dGVzLCAyKSkgcmV0dXJuIDA7CiAgICAga2V5d29yZF90eXBlID0gbWFrZV90eXBlKCJrZXl3b3JkIiwgJkFTVF90eXBlLCBrZXl3b3JkX2ZpZWxkcywgMik7CiAgICAgaWYgKCFrZXl3b3JkX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoa2V5d29yZF90eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgYWxpYXNfdHlwZSA9IG1ha2VfdHlwZSgiYWxpYXMiLCAmQVNUX3R5cGUsIGFsaWFzX2ZpZWxkcywgMik7CiAgICAgaWYgKCFhbGlhc190eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGFsaWFzX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICB3aXRoaXRlbV90eXBlID0gbWFrZV90eXBlKCJ3aXRoaXRlbSIsICZBU1RfdHlwZSwgd2l0aGl0ZW1fZmllbGRzLCAyKTsKICAgICBpZiAoIXdpdGhpdGVtX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMod2l0aGl0ZW1fdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGluaXRpYWxpemVkID0gMTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTE5MjMsNiArMTk2MSwyNSBAQAogfQogCiBleHByX3R5CitOYW1lQ29uc3RhbnQoc2luZ2xldG9uIHZhbHVlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgZXhwcl90eSBwOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIE5hbWVDb25zdGFudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcCA9IChleHByX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHAtPmtpbmQgPSBOYW1lQ29uc3RhbnRfa2luZDsKKyAgICBwLT52Lk5hbWVDb25zdGFudC52YWx1ZSA9IHZhbHVlOworICAgIHAtPmxpbmVubyA9IGxpbmVubzsKKyAgICBwLT5jb2xfb2Zmc2V0ID0gY29sX29mZnNldDsKKyAgICByZXR1cm4gcDsKK30KKworZXhwcl90eQogRWxsaXBzaXMoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGV4cHJfdHkgcDsKQEAgLTIxNzcsOSArMjIzNCw4IEBACiB9CiAKIGFyZ3VtZW50c190eQotYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgaWRlbnRpZmllciB2YXJhcmcsIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbiwKLSAgICAgICAgICBhc2RsX3NlcSAqIGt3b25seWFyZ3MsIGlkZW50aWZpZXIga3dhcmcsIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uLAotICAgICAgICAgIGFzZGxfc2VxICogZGVmYXVsdHMsIGFzZGxfc2VxICoga3dfZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKQorYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBhc2RsX3NlcSAqCisgICAgICAgICAga3dfZGVmYXVsdHMsIGFyZ190eSBrd2FyZywgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXJndW1lbnRzX3R5IHA7CiAgICAgcCA9IChhcmd1bWVudHNfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOwpAQCAtMjE4NywxMiArMjI0MywxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwLT5hcmdzID0gYXJnczsKICAgICBwLT52YXJhcmcgPSB2YXJhcmc7Ci0gICAgcC0+dmFyYXJnYW5ub3RhdGlvbiA9IHZhcmFyZ2Fubm90YXRpb247CiAgICAgcC0+a3dvbmx5YXJncyA9IGt3b25seWFyZ3M7Ci0gICAgcC0+a3dhcmcgPSBrd2FyZzsKLSAgICBwLT5rd2FyZ2Fubm90YXRpb24gPSBrd2FyZ2Fubm90YXRpb247Ci0gICAgcC0+ZGVmYXVsdHMgPSBkZWZhdWx0czsKICAgICBwLT5rd19kZWZhdWx0cyA9IGt3X2RlZmF1bHRzOworICAgIHAtPmt3YXJnID0ga3dhcmc7CisgICAgcC0+ZGVmYXVsdHMgPSBkZWZhdWx0czsKICAgICByZXR1cm4gcDsKIH0KIApAQCAtMjk0Myw2ICsyOTk3LDE1IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKKyAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoTmFtZUNvbnN0YW50X3R5cGUsIE5VTEwsIE5VTEwpOworICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CisgICAgICAgIHZhbHVlID0gYXN0Mm9ial9zaW5nbGV0b24oby0+di5OYW1lQ29uc3RhbnQudmFsdWUpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF92YWx1ZSwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoRWxsaXBzaXNfdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKQEAgLTMzNjEsMjkgKzM0MjQsMjQgQEAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2FyZ3MsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT52YXJhcmcpOworICAgIHZhbHVlID0gYXN0Mm9ial9hcmcoby0+dmFyYXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhcmFyZywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPnZhcmFyZ2Fubm90YXRpb24pOwotICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbiwgdmFsdWUpID09IC0xKQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3b25seWFyZ3MsIGFzdDJvYmpfYXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3b25seWFyZ3MsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT5rd2FyZyk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+a3dfZGVmYXVsdHMsIGFzdDJvYmpfZXhwcik7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZywgdmFsdWUpID09IC0xKQorICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT5rd2FyZ2Fubm90YXRpb24pOworICAgIHZhbHVlID0gYXN0Mm9ial9hcmcoby0+a3dhcmcpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dhcmdhbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmRlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwpAQCAtMzM5MSwxMSArMzQ0OSw2IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9kZWZhdWx0cywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3X2RlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwotICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogZmFpbGVkOgogICAgIFB5X1hERUNSRUYodmFsdWUpOwpAQCAtMzQyNSw2ICszNDc4LDE2IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9hbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2ludChvLT5saW5lbm8pOworICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfbGluZW5vLCB2YWx1ZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIHZhbHVlID0gYXN0Mm9ial9pbnQoby0+Y29sX29mZnNldCk7CisgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9jb2xfb2Zmc2V0LCB2YWx1ZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CkBAIC0zNTQ5LDcgKzM2MTIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNTg0LDcgKzM2NDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNjQxLDcgKzM3MDQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNzQ0LDcgKzM4MDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNzY4LDcgKzM4MzEsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JfbGlzdCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zNzgxLDcgKzM4NDQsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVjb3JhdG9yX2xpc3RcIiBtaXNzaW5nIGZyb20gRnVuY3Rpb25EZWYiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfcmV0dXJucykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3JldHVybnMpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3JldHVybnMpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM4MzEsNyArMzg5NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJhc2VzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYmFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJhc2VzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTM4NTUsNyArMzkxOCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXdvcmRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAga2V5d29yZF90eSB2YWx1ZTsKQEAgLTM4NjgsNyArMzkzMSw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDbGFzc0RlZiIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0YXJhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzg3OCw3ICszOTQxLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXJhcmdzID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2t3YXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zODk5LDcgKzM5NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zOTIzLDcgKzM5ODYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JfbGlzdCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zOTQ4LDcgKzQwMTEsNyBAQAogICAgIGlmIChpc2luc3RhbmNlKSB7CiAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YWx1ZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhbHVlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzk4MCw3ICs0MDQzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHRhcmdldHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNDAxNiw3ICs0MDc5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHRhcmdldHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNDEzMyw3ICs0MTk2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDE1Nyw3ICs0MjIwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDIwNSw3ICs0MjY4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDIyOSw3ICs0MjkyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDI3Nyw3ICs0MzQwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDMwMSw3ICs0MzY0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDMzNyw3ICs0NDAwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgaXRlbXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBpdGVtcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICB3aXRoaXRlbV90eSB2YWx1ZTsKQEAgLTQzNjEsNyArNDQyNCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQzODYsNyArNDQ0OSw3IEBACiAgICAgICAgIGV4cHJfdHkgZXhjOwogICAgICAgICBleHByX3R5IGNhdXNlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfZXhjKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfZXhjKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9leGMpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQzOTYsNyArNDQ1OSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGMgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfY2F1c2UpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9jYXVzZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfY2F1c2UpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ0MzEsNyArNDQ5NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ0NTUsNyArNDUxOCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGhhbmRsZXJzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgaGFuZGxlcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhjZXB0aGFuZGxlcl90eSB2YWx1ZTsKQEAgLTQ0NzksNyArNDU0Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ1MDMsNyArNDU2Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGZpbmFsYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGZpbmFsYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZmluYWxib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ1NDAsNyArNDYwMyw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJ0ZXN0XCIgbWlzc2luZyBmcm9tIEFzc2VydCIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9tc2cpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9tc2cpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX21zZyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDU3Miw3ICs0NjM1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBhbGlhc190eSB2YWx1ZTsKQEAgLTQ1OTgsNyArNDY2MSw3IEBACiAgICAgICAgIGFzZGxfc2VxKiBuYW1lczsKICAgICAgICAgaW50IGxldmVsOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbW9kdWxlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbW9kdWxlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9tb2R1bGUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ2MTksNyArNDY4Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgYWxpYXNfdHkgdmFsdWU7CkBAIC00NjMyLDcgKzQ2OTUsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwibmFtZXNcIiBtaXNzaW5nIGZyb20gSW1wb3J0RnJvbSIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9sZXZlbCkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2xldmVsKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9sZXZlbCk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDY2NCw3ICs0NzI3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIHZhbHVlOwpAQCAtNDY5OSw3ICs0NzYyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIHZhbHVlOwpAQCAtNDg0MCw3ICs0OTAzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTAzNiw3ICs1MDk5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGtleXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTA2MCw3ICs1MTIzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTA5NSw3ICs1MTU4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTE0Miw3ICs1MjA1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTE4OSw3ICs1MjUyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTI0OCw3ICs1MzExLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTI5NSw3ICs1MzU4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTMxOSw3ICs1MzgyLDcgQEAKICAgICBpZiAoaXNpbnN0YW5jZSkgewogICAgICAgICBleHByX3R5IHZhbHVlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF92YWx1ZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTUzODYsNyArNTQ0OSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9wcyA9IGFzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcHMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjbXBvcF90eSB2YWx1ZTsKQEAgLTU0MTAsNyArNTQ3Myw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGNvbXBhcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgY29tcGFyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU0NjAsNyArNTUyMyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU0ODQsNyArNTU0Nyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXdvcmRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAga2V5d29yZF90eSB2YWx1ZTsKQEAgLTU0OTcsNyArNTU2MCw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDYWxsIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01NTA3LDcgKzU1NzAsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhcmFyZ3MgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU1ODgsNiArNTY1MSwyOCBAQAogICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilOYW1lQ29uc3RhbnRfdHlwZSk7CisgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChpc2luc3RhbmNlKSB7CisgICAgICAgIHNpbmdsZXRvbiB2YWx1ZTsKKworICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgeworICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CisgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9zaW5nbGV0b24odG1wLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBQeV9DTEVBUih0bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidmFsdWVcIiBtaXNzaW5nIGZyb20gTmFtZUNvbnN0YW50Iik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAqb3V0ID0gTmFtZUNvbnN0YW50KHZhbHVlLCBsaW5lbm8sIGNvbF9vZmZzZXQsIGFyZW5hKTsKKyAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopRWxsaXBzaXNfdHlwZSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC01Nzc3LDcgKzU4NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01ODI0LDcgKzU5MDksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01OTM3LDcgKzYwMjIsNyBAQAogICAgICAgICBleHByX3R5IHVwcGVyOwogICAgICAgICBleHByX3R5IHN0ZXA7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9sb3dlcikpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2xvd2VyKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9sb3dlcik7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTk0Nyw3ICs2MDMyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxvd2VyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3VwcGVyKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdXBwZXIpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3VwcGVyKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01OTU3LDcgKzYwNDIsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdXBwZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfc3RlcCkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0ZXApKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0ZXApOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU5ODksNyArNjA3NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGRpbXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBkaW1zID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkaW1zID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc2xpY2VfdHkgdmFsdWU7CkBAIC02MzQwLDcgKzY0MjUsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGlmcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgaWZzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGlmcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNjQwNCw3ICs2NDg5LDcgQEAKICAgICAgICAgaWRlbnRpZmllciBuYW1lOwogICAgICAgICBhc2RsX3NlcSogYm9keTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3R5cGUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF90eXBlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF90eXBlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NDE0LDcgKzY0OTksNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdHlwZSA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9uYW1lKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbmFtZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbmFtZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjQzNSw3ICs2NTIwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNjQ2NCwxMyArNjU0OSwxMSBAQAogewogICAgIFB5T2JqZWN0KiB0bXAgPSBOVUxMOwogICAgIGFzZGxfc2VxKiBhcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxKiBrd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEqIGRlZmF1bHRzOwogICAgIGFzZGxfc2VxKiBrd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEqIGRlZmF1bHRzOwogCiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hcmdzKSkgewogICAgICAgICBpbnQgcmVzOwpAQCAtNjQ4Myw3ICs2NTY2LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBhcmdzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgYXJnX3R5IHZhbHVlOwpAQCAtNjQ5NiwyNiArNjU3OSwxNiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJhcmdzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YXJhcmcpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhcmFyZykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhcmFyZyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfaWRlbnRpZmllcih0bXAsICZ2YXJhcmcsIGFyZW5hKTsKKyAgICAgICAgcmVzID0gb2JqMmFzdF9hcmcodG1wLCAmdmFyYXJnLCBhcmVuYSk7CiAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0NMRUFSKHRtcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmFyYXJnID0gTlVMTDsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YXJhcmdhbm5vdGF0aW9uKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZ2YXJhcmdhbm5vdGF0aW9uLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiA9IE5VTEw7Ci0gICAgfQogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dvbmx5YXJncykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02NTI3LDcgKzY2MDAsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGt3b25seWFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGt3b25seWFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoa3dvbmx5YXJncyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBhcmdfdHkgdmFsdWU7CkBAIC02NTQwLDUwICs2NjEzLDYgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia3dvbmx5YXJnc1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmcpKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZyk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfaWRlbnRpZmllcih0bXAsICZrd2FyZywgYXJlbmEpOwotICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGt3YXJnID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZ2Fubm90YXRpb24pKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ2Fubm90YXRpb24pOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAma3dhcmdhbm5vdGF0aW9uLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga3dhcmdhbm5vdGF0aW9uID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cykpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgICAgIFB5X3NzaXplX3QgaTsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50cyBmaWVsZCBcImRlZmF1bHRzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgfQotICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgZGVmYXVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7Ci0gICAgICAgIGlmIChkZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBleHByX3R5IHZhbHVlOwotICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGksIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9CiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd19kZWZhdWx0cykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02NTk1LDcgKzY2MjQsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGt3X2RlZmF1bHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBrd19kZWZhdWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChrd19kZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNjYwOCw4ICs2NjM3LDQyIEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImt3X2RlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgKm91dCA9IGFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsIGt3YXJnLAotICAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uLCBkZWZhdWx0cywga3dfZGVmYXVsdHMsIGFyZW5hKTsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmcpKSB7CisgICAgICAgIGludCByZXM7CisgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZyk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJlcyA9IG9iajJhc3RfYXJnKHRtcCwgJmt3YXJnLCBhcmVuYSk7CisgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAga3dhcmcgPSBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKSkgeworICAgICAgICBpbnQgcmVzOworICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpOworICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnRzIGZpZWxkIFwiZGVmYXVsdHNcIiBtdXN0IGJlIGEgbGlzdCwgbm90IGEgJS4yMDBzIiwgdG1wLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICBkZWZhdWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGlmIChkZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBleHByX3R5IHZhbHVlOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGksIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0bXApOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IGFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3X2RlZmF1bHRzLCBrd2FyZywgZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICBhcmVuYSk7CiAgICAgcmV0dXJuIDA7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih0bXApOwpAQCAtNjYzNCw3ICs2Njk3LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiYXJnXCIgbWlzc2luZyBmcm9tIGFyZyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hbm5vdGF0aW9uKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9hbm5vdGF0aW9uKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYW5ub3RhdGlvbik7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzA1LDcgKzY3NjgsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJuYW1lXCIgbWlzc2luZyBmcm9tIGFsaWFzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2FzbmFtZSkpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfYXNuYW1lKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYXNuYW1lKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY3NDAsNyArNjgwMyw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImNvbnRleHRfZXhwclwiIG1pc3NpbmcgZnJvbSB3aXRoaXRlbSIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfb3B0aW9uYWxfdmFycyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzcwLDcgKzY4MzMsNyBAQAogICAgIGlmICghbSkgcmV0dXJuIE5VTEw7CiAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBU1QiLCAoUHlPYmplY3QqKSZBU1RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5Q0ZfT05MWV9BU1QiLCBQeUNGX09OTFlfQVNUKSA8IDApCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5Q0ZfT05MWV9BU1QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJtb2QiLCAoUHlPYmplY3QqKW1vZF90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTW9kdWxlIiwgKFB5T2JqZWN0KilNb2R1bGVfdHlwZSkgPCAwKSByZXR1cm4KQEAgLTY4NTAsNiArNjkxMyw4IEBACiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJTdHIiLCAoUHlPYmplY3QqKVN0cl90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQnl0ZXMiLCAoUHlPYmplY3QqKUJ5dGVzX3R5cGUpIDwgMCkgcmV0dXJuCiAgICAgICAgIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJOYW1lQ29uc3RhbnQiLCAoUHlPYmplY3QqKU5hbWVDb25zdGFudF90eXBlKSA8CisgICAgICAgIDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiRWxsaXBzaXMiLCAoUHlPYmplY3QqKUVsbGlwc2lzX3R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBdHRyaWJ1dGUiLCAoUHlPYmplY3QqKUF0dHJpYnV0ZV90eXBlKSA8IDApCkBAIC02OTQ5LDcgKzcwMTQsOCBAQAogCiBQeU9iamVjdCogUHlBU1RfbW9kMm9iaihtb2RfdHkgdCkKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBhc3Qyb2JqX21vZCh0KTsKIH0KIApAQCAtNjk2Nyw3ICs3MDMzLDggQEAKIAogICAgIGFzc2VydCgwIDw9IG1vZGUgJiYgbW9kZSA8PSAyKTsKIAotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShhc3QsIHJlcV90eXBlW21vZGVdKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkKQEAgLTY5ODUsNyArNzA1Miw4IEBACiAKIGludCBQeUFTVF9DaGVjayhQeU9iamVjdCogb2JqKQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9QeXRob24vX3dhcm5pbmdzLmMgYi9QeXRob24vX3dhcm5pbmdzLmMKaW5kZXggZjMzZTQ3Ny4uNjAxM2Q3ZCAxMDA2NDQKLS0tIGEvUHl0aG9uL193YXJuaW5ncy5jCisrKyBiL1B5dGhvbi9fd2FybmluZ3MuYwpAQCAtMTMsNiArMTMsOCBAQAogc3RhdGljIFB5T2JqZWN0ICpfb25jZV9yZWdpc3RyeTsgIC8qIERpY3QgKi8KIHN0YXRpYyBQeU9iamVjdCAqX2RlZmF1bHRfYWN0aW9uOyAvKiBTdHJpbmcgKi8KIAorX1B5X0lERU5USUZJRVIoYXJndik7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOwogCiBzdGF0aWMgaW50CiBjaGVja19tYXRjaGVkKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICphcmcpCkBAIC05OSw3ICsxMDEsNyBAQAogCiAKIC8qIFRoZSBpdGVtIGlzIGEgYm9ycm93ZWQgcmVmZXJlbmNlLiAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorc3RhdGljIFB5T2JqZWN0KgogZ2V0X2ZpbHRlcihQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICp0ZXh0LCBQeV9zc2l6ZV90IGxpbmVubywKICAgICAgICAgICAgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKippdGVtKQogewpAQCAtMTQ0LDIxICsxNDYsMjggQEAKICAgICAgICAgbG5fb2JqID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgNCk7CiAKICAgICAgICAgZ29vZF9tc2cgPSBjaGVja19tYXRjaGVkKG1zZywgdGV4dCk7CisgICAgICAgIGlmIChnb29kX21zZyA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIGdvb2RfbW9kID0gY2hlY2tfbWF0Y2hlZChtb2QsIG1vZHVsZSk7CisgICAgICAgIGlmIChnb29kX21vZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhjYXRlZ29yeSwgY2F0KTsKKyAgICAgICAgaWYgKGlzX3N1YmNsYXNzID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgbG4gPSBQeUxvbmdfQXNTc2l6ZV90KGxuX29iaik7Ci0gICAgICAgIGlmIChnb29kX21zZyA9PSAtMSB8fCBnb29kX21vZCA9PSAtMSB8fCBpc19zdWJjbGFzcyA9PSAtMSB8fAotICAgICAgICAgICAgKGxuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpKQorICAgICAgICBpZiAobG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIGlmIChnb29kX21zZyAmJiBpc19zdWJjbGFzcyAmJiBnb29kX21vZCAmJiAobG4gPT0gMCB8fCBsaW5lbm8gPT0gbG4pKQotICAgICAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNTdHJpbmcoYWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CiAgICAgfQogCiAgICAgYWN0aW9uID0gZ2V0X2RlZmF1bHRfYWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbiAhPSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBfUHlVbmljb2RlX0FzU3RyaW5nKGFjdGlvbik7Ci0gICAgfQorICAgIGlmIChhY3Rpb24gIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGFjdGlvbjsKIAogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICBNT0RVTEVfTkFNRSAiLmRlZmF1bHRhY3Rpb24gbm90IGZvdW5kIik7CkBAIC0xOTIsMjMgKzIwMSwyNiBAQAogbm9ybWFsaXplX21vZHVsZShQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBjb25zdCBjaGFyICptb2Rfc3RyOworICAgIGludCBraW5kOworICAgIHZvaWQgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgICBpbnQgcmMgPSBQeU9iamVjdF9Jc1RydWUoZmlsZW5hbWUpOwotICAgIGlmIChyYyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxzZSBpZiAocmMgPT0gMCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKLQotICAgIG1vZF9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGZpbGVuYW1lKTsKLSAgICBpZiAobW9kX3N0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBsZW4gPSBQeVVuaWNvZGVfR2V0TGVuZ3RoKGZpbGVuYW1lKTsKICAgICBpZiAobGVuIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobGVuID09IDApCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHVua25vd24+Iik7CisKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoZmlsZW5hbWUpOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShmaWxlbmFtZSk7CisKKyAgICAvKiBpZiBmaWxlbmFtZS5lbmRzd2l0aCgiLnB5Iik6ICovCiAgICAgaWYgKGxlbiA+PSAzICYmCi0gICAgICAgIHN0cm5jbXAobW9kX3N0ciArIChsZW4gLSAzKSwgIi5weSIsIDMpID09IDApIHsKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTMpID09ICcuJyAmJgorICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMikgPT0gJ3AnICYmCisgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0xKSA9PSAneScpCisgICAgewogICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKGZpbGVuYW1lLCAwLCBsZW4tMyk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjUzLDM5ICsyNjUsNjMgQEAKIAogICAgIG5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGNhdGVnb3J5LCAmUHlJZF9fX25hbWVfXyk7CiAgICAgaWYgKG5hbWUgPT0gTlVMTCkgIC8qIFhYWCBDYW4gYW4gb2JqZWN0IGxhY2sgYSAnX19uYW1lX18nIGF0dHJpYnV0ZT8gKi8KLSAgICAgICAgcmV0dXJuOworICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgZl9zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIGZfc3RkZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgaWYgKGZfc3RkZXJyID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb3N0IHN5cy5zdGRlcnJcbiIpOwotICAgICAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICAvKiBQcmludCAiZmlsZW5hbWU6bGluZW5vOiBjYXRlZ29yeTogdGV4dFxuIiAqLwotICAgIFB5RmlsZV9Xcml0ZU9iamVjdChmaWxlbmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKGxpbmVub19zdHIsIGZfc3RkZXJyKTsKLSAgICBQeUZpbGVfV3JpdGVPYmplY3QobmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGZfc3RkZXJyKTsKLSAgICBQeUZpbGVfV3JpdGVPYmplY3QodGV4dCwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKTsKLSAgICBQeV9YREVDUkVGKG5hbWUpOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QoZmlsZW5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKGxpbmVub19zdHIsIGZfc3RkZXJyKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmX3N0ZGVycikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QodGV4dCwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBQeV9DTEVBUihuYW1lKTsKIAogICAgIC8qIFByaW50ICIgIHNvdXJjZV9saW5lXG4iICovCiAgICAgaWYgKHNvdXJjZWxpbmUpIHsKLSAgICAgICAgY2hhciAqc291cmNlX2xpbmVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzb3VyY2VsaW5lKTsKLSAgICAgICAgaWYgKHNvdXJjZV9saW5lX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgd2hpbGUgKCpzb3VyY2VfbGluZV9zdHIgPT0gJyAnIHx8ICpzb3VyY2VfbGluZV9zdHIgPT0gJ1x0JyB8fAotICAgICAgICAgICAgICAgICpzb3VyY2VfbGluZV9zdHIgPT0gJ1wwMTQnKQotICAgICAgICAgICAgc291cmNlX2xpbmVfc3RyKys7CisgICAgICAgIGludCBraW5kOworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBQeV9zc2l6ZV90IGksIGxlbjsKKyAgICAgICAgUHlfVUNTNCBjaDsKKyAgICAgICAgUHlPYmplY3QgKnRydW5jYXRlZDsKIAotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoc291cmNlX2xpbmVfc3RyLCBmX3N0ZGVycik7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc291cmNlbGluZSkgPCAxKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc291cmNlbGluZSk7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzb3VyY2VsaW5lKTsKKyAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc291cmNlbGluZSk7CisgICAgICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisgICAgICAgICAgICBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICAgICAgaWYgKGNoICE9ICcgJyAmJiBjaCAhPSAnXHQnICYmIGNoICE9ICdcMDE0JykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHRydW5jYXRlZCA9IFB5VW5pY29kZV9TdWJzdHJpbmcoc291cmNlbGluZSwgaSwgbGVuKTsKKyAgICAgICAgaWYgKHRydW5jYXRlZCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3Qoc291cmNlbGluZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7CisgICAgICAgIFB5X0RFQ1JFRih0cnVuY2F0ZWQpOwogICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpOwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGlmIChfUHlfRGlzcGxheVNvdXJjZUxpbmUoZl9zdGRlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIDIpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgZWxzZSB7CisgICAgICAgIF9QeV9EaXNwbGF5U291cmNlTGluZShmX3N0ZGVyciwgZmlsZW5hbWUsIGxpbmVubywgMik7CisgICAgfQorCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKQEAgLTI5Niw5ICszMzIsMTYgQEAKIHsKICAgICBQeU9iamVjdCAqa2V5ID0gTlVMTCwgKnRleHQgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTCwgKmxpbmVub19vYmogPSBOVUxMOwogICAgIFB5T2JqZWN0ICppdGVtID0gUHlfTm9uZTsKLSAgICBjb25zdCBjaGFyICphY3Rpb247CisgICAgUHlPYmplY3QgKmFjdGlvbjsKICAgICBpbnQgcmM7CiAKKyAgICAvKiBtb2R1bGUgY2FuIGJlIE5vbmUgaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgbGF0ZSBkdXJpbmcgUHl0aG9uIHNodXRkb3duLgorICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIFB5dGhvbiB3YXJuaW5ncyBtb2R1bGUgd2FzIHByb2JhYmx5IHVubG9hZGVkLCBmaWx0ZXJzCisgICAgICAgYXJlIG5vIG1vcmUgYXZhaWxhYmxlIHRvIGNob29zZSBhcyBhY3Rpb24uIEl0IGlzIHNhZmVyIHRvIGlnbm9yZSB0aGUKKyAgICAgICB3YXJuaW5nIGFuZCBkbyBub3RoaW5nLiAqLworICAgIGlmIChtb2R1bGUgPT0gUHlfTm9uZSkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKICAgICBpZiAocmVnaXN0cnkgJiYgIVB5RGljdF9DaGVjayhyZWdpc3RyeSkgJiYgKHJlZ2lzdHJ5ICE9IFB5X05vbmUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICIncmVnaXN0cnknIG11c3QgYmUgYSBkaWN0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzU0LDcgKzM5Nyw3IEBACiAgICAgaWYgKGFjdGlvbiA9PSBOVUxMKQogICAgICAgICBnb3RvIGNsZWFudXA7CiAKLSAgICBpZiAoc3RyY21wKGFjdGlvbiwgImVycm9yIikgPT0gMCkgeworICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJlcnJvciIpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KGNhdGVnb3J5LCBtZXNzYWdlKTsKICAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KQEAgLTM2MiwxMyArNDA1LDEzIEBACiAgICAgLyogU3RvcmUgaW4gdGhlIHJlZ2lzdHJ5IHRoYXQgd2UndmUgYmVlbiBoZXJlLCAqZXhjZXB0KiB3aGVuIHRoZSBhY3Rpb24KICAgICAgICBpcyAiYWx3YXlzIi4gKi8KICAgICByYyA9IDA7Ci0gICAgaWYgKHN0cmNtcChhY3Rpb24sICJhbHdheXMiKSAhPSAwKSB7CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImFsd2F5cyIpICE9IDApIHsKICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSAmJgogICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHJlZ2lzdHJ5LCBrZXksIFB5X1RydWUpIDwgMCkKICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImlnbm9yZSIpID09IDApCisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImlnbm9yZSIpID09IDApCiAgICAgICAgICAgICBnb3RvIHJldHVybl9ub25lOwotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAib25jZSIpID09IDApIHsKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAib25jZSIpID09IDApIHsKICAgICAgICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMIHx8IHJlZ2lzdHJ5ID09IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICByZWdpc3RyeSA9IGdldF9vbmNlX3JlZ2lzdHJ5KCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwpCkBAIC0zNzcsMjQgKzQyMCwxNSBAQAogICAgICAgICAgICAgLyogX29uY2VfcmVnaXN0cnlbKHRleHQsIGNhdGVnb3J5KV0gPSAxICovCiAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJtb2R1bGUiKSA9PSAwKSB7CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgIm1vZHVsZSIpID09IDApIHsKICAgICAgICAgICAgIC8qIHJlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSwgMCldID0gMSAqLwogICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewotICAgICAgICAgICAgUHlPYmplY3QgKnRvX3N0ciA9IFB5T2JqZWN0X1N0cihpdGVtKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycl9zdHIgPSAiPz8/IjsKLQotICAgICAgICAgICAgaWYgKHRvX3N0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZXJyX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodG9fc3RyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgYWN0aW9uICglcykgaW4gd2FybmluZ3MuZmlsdGVyczpcbiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGVycl9zdHIpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih0b19zdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgIlVucmVjb2duaXplZCBhY3Rpb24gKCVSKSBpbiB3YXJuaW5ncy5maWx0ZXJzOlxuICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgaXRlbSk7CiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjgsMTMgKzU2MiwxMiBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBjb25zdCBjaGFyICptb2R1bGVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZygqbW9kdWxlKTsKICAgICAgICAgKmZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLSAgICAgICAgaWYgKHN0cmNtcChtb2R1bGVfc3RyLCAiX19tYWluX18iKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqYXJndiA9IFB5U3lzX0dldE9iamVjdCgiYXJndiIpOwotICAgICAgICAgICAgaWYgKGFyZ3YgIT0gTlVMTCAmJiBQeUxpc3RfU2l6ZShhcmd2KSA+IDApIHsKKyAgICAgICAgaWYgKCptb2R1bGUgIT0gUHlfTm9uZSAmJiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygqbW9kdWxlLCAiX19tYWluX18iKSA9PSAwKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYXJndiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9hcmd2KTsKKyAgICAgICAgICAgIC8qIFB5TGlzdF9DaGVjaygpIGlzIG5lZWRlZCBiZWNhdXNlIHN5cy5hcmd2IGlzIHNldCB0byBOb25lIGR1cmluZworICAgICAgICAgICAgICAgUHl0aG9uIGZpbmFsaXphdGlvbiAqLworICAgICAgICAgICAgaWYgKGFyZ3YgIT0gTlVMTCAmJiBQeUxpc3RfQ2hlY2soYXJndikgJiYgUHlMaXN0X1NpemUoYXJndikgPiAwKSB7CiAgICAgICAgICAgICAgICAgaW50IGlzX3RydWU7CiAgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlMaXN0X0dldEl0ZW0oYXJndiwgMCk7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CkBAIC01NTQsOCArNTg3LDggQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8qIGVtYmVkZGVkIGludGVycHJldGVycyBkb24ndCBoYXZlIHN5cy5hcmd2LCBzZWUgYnVnICM4MzkxNTEgKi8KICAgICAgICAgICAgICAgICAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiX19tYWluX18iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpIHsKQEAgLTY0OSw3ICs2ODIsNyBAQAogICAgIFB5T2JqZWN0ICpyZWdpc3RyeSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9nbG9iYWxzID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT09pfE9PTzp3YXJuX2V4cGxpY2l0IiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09VaXxPT086d2Fybl9leHBsaWNpdCIsCiAgICAgICAgICAgICAgICAga3dkX2xpc3QsICZtZXNzYWdlLCAmY2F0ZWdvcnksICZmaWxlbmFtZSwgJmxpbmVubywgJm1vZHVsZSwKICAgICAgICAgICAgICAgICAmcmVnaXN0cnksICZtb2R1bGVfZ2xvYmFscykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzA3LDE0ICs3NDAsMTQgQEAKIAogICAgICAgICAvKiBIYW5kbGUgdGhlIHdhcm5pbmcuICovCiAgICAgICAgIHJldHVybmVkID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBzb3VyY2VfbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgc291cmNlX2xpbmUpOwogICAgICAgICBQeV9ERUNSRUYoc291cmNlX2xpc3QpOwogICAgICAgICByZXR1cm4gcmV0dXJuZWQ7CiAgICAgfQogCiAgc3RhbmRhcmRfY2FsbDoKICAgICByZXR1cm4gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIE5VTEwpOwogfQogCiAKQEAgLTc4NiwxMSArODE5LDI2IEBACiAKIC8qIFdhcm5pbmcgd2l0aCBleHBsaWNpdCBvcmlnaW4gKi8KIGludAorUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlPYmplY3QgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKK3sKKyAgICBQeU9iamVjdCAqcmVzOworICAgIGlmIChjYXRlZ29yeSA9PSBOVUxMKQorICAgICAgICBjYXRlZ29yeSA9IFB5RXhjX1J1bnRpbWVXYXJuaW5nOworICAgIHJlcyA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIHJlZ2lzdHJ5LCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50CiBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICp0ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IGxpbmVubywKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptb2R1bGVfc3RyLCBQeU9iamVjdCAqcmVnaXN0cnkpCiB7Ci0gICAgUHlPYmplY3QgKnJlczsKICAgICBQeU9iamVjdCAqbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHRleHQpOwogICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKICAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKQEAgLTgwMCwxOCArODQ4LDEyIEBACiAgICAgICAgIGdvdG8gZXhpdDsKICAgICBpZiAobW9kdWxlX3N0ciAhPSBOVUxMKSB7CiAgICAgICAgIG1vZHVsZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG1vZHVsZV9zdHIpOwotICAgICAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAotICAgIGlmIChjYXRlZ29yeSA9PSBOVUxMKQotICAgICAgICBjYXRlZ29yeSA9IFB5RXhjX1J1bnRpbWVXYXJuaW5nOwotICAgIHJlcyA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwgcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICBQeV9ERUNSRUYocmVzKTsKLSAgICByZXQgPSAwOworICAgIHJldCA9IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSk7CiAKICBleGl0OgogICAgIFB5X1hERUNSRUYobWVzc2FnZSk7CkBAIC04MjAsNiArODYyLDQ5IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAoraW50CitQeUVycl9XYXJuRXhwbGljaXRGb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptb2R1bGVfc3RyLCBQeU9iamVjdCAqcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgUHlPYmplY3QgKm1lc3NhZ2U7CisgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGludCByZXQgPSAtMTsKKyAgICB2YV9saXN0IHZhcmdzOworCisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAobW9kdWxlX3N0ciAhPSBOVUxMKSB7CisgICAgICAgIG1vZHVsZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG1vZHVsZV9zdHIpOworICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisjaWZkZWYgSEFWRV9TVERBUkdfUFJPVE9UWVBFUworICAgIHZhX3N0YXJ0KHZhcmdzLCBmb3JtYXQpOworI2Vsc2UKKyAgICB2YV9zdGFydCh2YXJncyk7CisjZW5kaWYKKyAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOworICAgIGlmIChtZXNzYWdlICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgcmVzID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIHJlZ2lzdHJ5LCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKG1lc3NhZ2UpOworICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICB2YV9lbmQodmFyZ3MpOworZXhpdDoKKyAgICBQeV9YREVDUkVGKG1vZHVsZSk7CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIHJldDsKK30KKwogCiBQeURvY19TVFJWQVIod2Fybl9kb2MsCiAiSXNzdWUgYSB3YXJuaW5nLCBvciBtYXliZSBpZ25vcmUgaXQgb3IgcmFpc2UgYW4gZXhjZXB0aW9uLiIpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2FzZGwuYyBiL1B5dGhvbi9hc2RsLmMKaW5kZXggZTdlMzI4MC4uNzRmYTk0MSAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzZGwuYworKysgYi9QeXRob24vYXNkbC5jCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgImFzZGwuaCIKIAogYXNkbF9zZXEgKgotYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCitfUHlfYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXNkbF9zZXEgKnNlcSA9IE5VTEw7CiAgICAgc2l6ZV90IG4gPSAoc2l6ZSA/IChzaXplb2Yodm9pZCAqKSAqIChzaXplIC0gMSkpIDogMCk7CkBAIC0zMyw3ICszMyw3IEBACiB9CiAKIGFzZGxfaW50X3NlcSAqCi1hc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCitfUHlfYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFzZGxfaW50X3NlcSAqc2VxID0gTlVMTDsKICAgICBzaXplX3QgbiA9IChzaXplID8gKHNpemVvZih2b2lkICopICogKHNpemUgLSAxKSkgOiAwKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9hc3QuYyBiL1B5dGhvbi9hc3QuYwppbmRleCA5YTBiMDY0Li41NjY4NzU1IDEwMDY0NAotLS0gYS9QeXRob24vYXN0LmMKKysrIGIvUHl0aG9uL2FzdC5jCkBAIC0xMDksMjIgKzEwOSwxNCBAQAogewogICAgIGlmICghdmFsaWRhdGVfYXJncyhhcmdzLT5hcmdzKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24pIHsKLSAgICAgICAgaWYgKCFhcmdzLT52YXJhcmcpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidmFyYXJnYW5ub3RhdGlvbiBidXQgbm8gdmFyYXJnIG9uIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZV9leHByKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24sIExvYWQpKQorICAgIGlmIChhcmdzLT52YXJhcmcgJiYgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uCisgICAgICAgICYmICF2YWxpZGF0ZV9leHByKGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbiwgTG9hZCkpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRlX2FyZ3MoYXJncy0+a3dvbmx5YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhcmdzLT5rd2FyZ2Fubm90YXRpb24pIHsKLSAgICAgICAgaWYgKCFhcmdzLT5rd2FyZykgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJrd2FyZ2Fubm90YXRpb24gYnV0IG5vIGt3YXJnIG9uIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZV9leHByKGFyZ3MtPmt3YXJnYW5ub3RhdGlvbiwgTG9hZCkpCisgICAgaWYgKGFyZ3MtPmt3YXJnICYmIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uIAorICAgICAgICAmJiAhdmFsaWRhdGVfZXhwcihhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiwgTG9hZCkpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAoYXNkbF9zZXFfTEVOKGFyZ3MtPmRlZmF1bHRzKSA+IGFzZGxfc2VxX0xFTihhcmdzLT5hcmdzKSkgewpAQCAtMjgyLDYgKzI3NCw3IEBACiAgICAgICAgIHJldHVybiB2YWxpZGF0ZV9leHBycyhleHAtPnYuVHVwbGUuZWx0cywgY3R4LCAwKTsKICAgICAvKiBUaGVzZSBsYXN0IGNhc2VzIGRvbid0IGhhdmUgYW55IGNoZWNraW5nLiAqLwogICAgIGNhc2UgTmFtZV9raW5kOgorICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICByZXR1cm4gMTsKICAgICBkZWZhdWx0OgpAQCAtNDk4LDcgKzQ5MSw3IEBACiBzdHJ1Y3QgY29tcGlsaW5nIHsKICAgICBjaGFyICpjX2VuY29kaW5nOyAvKiBzb3VyY2UgZW5jb2RpbmcgKi8KICAgICBQeUFyZW5hICpjX2FyZW5hOyAvKiBhcmVuYSBmb3IgYWxsb2NhdGluZyBtZW1lb3J5ICovCi0gICAgY29uc3QgY2hhciAqY19maWxlbmFtZTsgLyogZmlsZW5hbWUgKi8KKyAgICBQeU9iamVjdCAqY19maWxlbmFtZTsgLyogZmlsZW5hbWUgKi8KICAgICBQeU9iamVjdCAqY19ub3JtYWxpemU7IC8qIE5vcm1hbGl6YXRpb24gZnVuY3Rpb24gZnJvbSB1bmljb2RlZGF0YS4gKi8KICAgICBQeU9iamVjdCAqY19ub3JtYWxpemVfYXJnczsgLyogTm9ybWFsaXphdGlvbiBhcmd1bWVudCB0dXBsZS4gKi8KIH07CkBAIC01NjcsNyArNTYwLDEwIEBACiAgICAgICAgIGlkID0gaWQyOwogICAgIH0KICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmaWQpOwotICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgaWQpOworICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIGlkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGlkKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBpZDsKIH0KIApAQCAtNTc3LDI0ICs1NzMsMTMgQEAKIGFzdF9lcnJvcihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBjb25zdCBjaGFyICplcnJtc2cpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlLCAqZXJyc3RyLCAqbG9jLCAqdG1wOwotICAgIFB5T2JqZWN0ICpmaWxlbmFtZV9vYmo7CiAKLSAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dChjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obikpOworICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KGMtPmNfZmlsZW5hbWUsIExJTkVOTyhuKSk7CiAgICAgaWYgKCFsb2MpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICBsb2MgPSBQeV9Ob25lOwogICAgIH0KLSAgICBpZiAoYy0+Y19maWxlbmFtZSkgewotICAgICAgICBmaWxlbmFtZV9vYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGMtPmNfZmlsZW5hbWUpOwotICAgICAgICBpZiAoIWZpbGVuYW1lX29iaikgewotICAgICAgICAgICAgUHlfREVDUkVGKGxvYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgZmlsZW5hbWVfb2JqID0gUHlfTm9uZTsKLSAgICB9Ci0gICAgdG1wID0gUHlfQnVpbGRWYWx1ZSgiKE5paU4pIiwgZmlsZW5hbWVfb2JqLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgbG9jKTsKKyAgICB0bXAgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTikiLCBjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgbG9jKTsKICAgICBpZiAoIXRtcCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZXJyc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZXJybXNnKTsKQEAgLTY3Nyw4ICs2NjIsOCBAQAogKi8KIAogbW9kX3R5Ci1QeUFTVF9Gcm9tTm9kZShjb25zdCBub2RlICpuLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQorUHlBU1RfRnJvbU5vZGVPYmplY3QoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgaW50IGksIGosIGssIG51bTsKICAgICBhc2RsX3NlcSAqc3RtdHMgPSBOVUxMOwpAQCAtNjg4LDYgKzY3Myw3IEBACiAgICAgbW9kX3R5IHJlcyA9IE5VTEw7CiAKICAgICBjLmNfYXJlbmEgPSBhcmVuYTsKKyAgICAvKiBib3Jyb3dlZCByZWZlcmVuY2UgKi8KICAgICBjLmNfZmlsZW5hbWUgPSBmaWxlbmFtZTsKICAgICBjLmNfbm9ybWFsaXplID0gYy5jX25vcm1hbGl6ZV9hcmdzID0gTlVMTDsKICAgICBpZiAoZmxhZ3MgJiYgZmxhZ3MtPmNmX2ZsYWdzICYgUHlDRl9TT1VSQ0VfSVNfVVRGOCkgewpAQCAtNzEwLDcgKzY5Niw3IEBACiAgICAgayA9IDA7CiAgICAgc3dpdGNoIChUWVBFKG4pKSB7CiAgICAgICAgIGNhc2UgZmlsZV9pbnB1dDoKLSAgICAgICAgICAgIHN0bXRzID0gYXNkbF9zZXFfbmV3KG51bV9zdG10cyhuKSwgYXJlbmEpOworICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KG51bV9zdG10cyhuKSwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobikgLSAxOyBpKyspIHsKQEAgLTc1MCw3ICs3MzYsNyBAQAogICAgICAgICB9CiAgICAgICAgIGNhc2Ugc2luZ2xlX2lucHV0OgogICAgICAgICAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IE5FV0xJTkUpIHsKLSAgICAgICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldygxLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGFyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0bXRzKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoc3RtdHMsIDAsIFBhc3Mobi0+bl9saW5lbm8sIG4tPm5fY29sX29mZnNldCwKQEAgLTc2Miw3ICs3NDgsNyBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIG51bSA9IG51bV9zdG10cyhuKTsKLSAgICAgICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldyhudW0sIGFyZW5hKTsKKyAgICAgICAgICAgICAgICBzdG10cyA9IF9QeV9hc2RsX3NlcV9uZXcobnVtLCBhcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICAgICAgaWYgKG51bSA9PSAxKSB7CkBAIC04MDEsNiArNzg3LDIxIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorbW9kX3R5CitQeUFTVF9Gcm9tTm9kZShjb25zdCBub2RlICpuLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsCisgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBtb2RfdHkgbW9kOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworCit9CisKIC8qIFJldHVybiB0aGUgQVNUIHJlcHIuIG9mIHRoZSBvcGVyYXRvciByZXByZXNlbnRlZCBhcyBzeW50YXggKHwsIF4sIGV0Yy4pCiAqLwogCkBAIC05MDMsNyArOTA0LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5hbWVfa2luZDoKICAgICAgICAgICAgIGlmIChjdHggPT0gU3RvcmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgZS0+di5OYW1lLmlkLCBuLCAxKSkKKyAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgZS0+di5OYW1lLmlkLCBuLCAwKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGZvcmJpZGRlbl9uYW1lKCkgY2FsbHMgYXN0X2Vycm9yKCkgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGUtPnYuTmFtZS5jdHggPSBjdHg7CkBAIC05NTUsNiArOTU2LDkgQEAKICAgICAgICAgY2FzZSBCeXRlc19raW5kOgogICAgICAgICAgICAgZXhwcl9uYW1lID0gImxpdGVyYWwiOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CisgICAgICAgICAgICBleHByX25hbWUgPSAia2V5d29yZCI7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICAgICAgZXhwcl9uYW1lID0gIkVsbGlwc2lzIjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA5NSw3ICsxMDk5LDcgQEAKICAgICBpbnQgaTsKICAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZXN0bGlzdCB8fCBUWVBFKG4pID09IHRlc3RsaXN0X3N0YXJfZXhwciB8fCBUWVBFKG4pID09IHRlc3RsaXN0X2NvbXApOwogCi0gICAgc2VxID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMTE5LDYgKzExMjMsNyBAQAogICAgIGlkZW50aWZpZXIgbmFtZTsKICAgICBleHByX3R5IGFubm90YXRpb24gPSBOVUxMOwogICAgIG5vZGUgKmNoOworICAgIGFyZ190eSB0bXA7CiAKICAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZnBkZWYgfHwgVFlQRShuKSA9PSB2ZnBkZWYpOwogICAgIGNoID0gQ0hJTEQobiwgMCk7CkBAIC0xMTM0LDcgKzExMzksMTMgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJldHVybiBhcmcobmFtZSwgYW5ub3RhdGlvbiwgYy0+Y19hcmVuYSk7CisgICAgdG1wID0gYXJnKG5hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOworICAgIGlmICghdG1wKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRtcC0+bGluZW5vID0gTElORU5PKG4pOworICAgIHRtcC0+Y29sX29mZnNldCA9IG4tPm5fY29sX29mZnNldDsKKyAgICByZXR1cm4gdG1wOwogfQogCiAvKiByZXR1cm5zIC0xIGlmIGZhaWxlZCB0byBoYW5kbGUga2V5d29yZCBvbmx5IGFyZ3VtZW50cwpAQCAtMTE5Miw2ICsxMjAzLDggQEAKICAgICAgICAgICAgICAgICBhcmcgPSBhcmcoYXJnbmFtZSwgYW5ub3RhdGlvbiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFhcmcpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgYXJnLT5saW5lbm8gPSBMSU5FTk8oY2gpOworICAgICAgICAgICAgICAgIGFyZy0+Y29sX29mZnNldCA9IGNoLT5uX2NvbF9vZmZzZXQ7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGt3b25seWFyZ3MsIGorKywgYXJnKTsKICAgICAgICAgICAgICAgICBpICs9IDI7IC8qIHRoZSBuYW1lIGFuZCB0aGUgY29tbWEgKi8KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMzAsMTUgKzEyNDMsMTMgQEAKICAgICBpbnQgaSwgaiwgaywgbnBvc2FyZ3MgPSAwLCBua3dvbmx5YXJncyA9IDA7CiAgICAgaW50IG5wb3NkZWZhdWx0cyA9IDAsIGZvdW5kX2RlZmF1bHQgPSAwOwogICAgIGFzZGxfc2VxICpwb3NhcmdzLCAqcG9zZGVmYXVsdHMsICprd29ubHlhcmdzLCAqa3dkZWZhdWx0czsKLSAgICBpZGVudGlmaWVyIHZhcmFyZyA9IE5VTEwsIGt3YXJnID0gTlVMTDsKKyAgICBhcmdfdHkgdmFyYXJnID0gTlVMTCwga3dhcmcgPSBOVUxMOwogICAgIGFyZ190eSBhcmc7Ci0gICAgZXhwcl90eSB2YXJhcmdhbm5vdGF0aW9uID0gTlVMTCwga3dhcmdhbm5vdGF0aW9uID0gTlVMTDsKICAgICBub2RlICpjaDsKIAogICAgIGlmIChUWVBFKG4pID09IHBhcmFtZXRlcnMpIHsKICAgICAgICAgaWYgKE5DSChuKSA9PSAyKSAvKiAoKSBhcyBhcmd1bWVudCBsaXN0ICovCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgbiA9IENISUxEKG4sIDEpOwogICAgIH0KICAgICBhc3NlcnQoVFlQRShuKSA9PSB0eXBlZGFyZ3NsaXN0IHx8IFRZUEUobikgPT0gdmFyYXJnc2xpc3QpOwpAQCAtMTI3MCwyMiArMTI4MSwyMiBAQAogICAgICAgICBpZiAoVFlQRShjaCkgPT0gRE9VQkxFU1RBUikgYnJlYWs7CiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSB0ZnBkZWYgfHwgVFlQRShjaCkgPT0gdmZwZGVmKSBua3dvbmx5YXJncysrOwogICAgIH0KLSAgICBwb3NhcmdzID0gKG5wb3NhcmdzID8gYXNkbF9zZXFfbmV3KG5wb3NhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgIHBvc2FyZ3MgPSAobnBvc2FyZ3MgPyBfUHlfYXNkbF9zZXFfbmV3KG5wb3NhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICghcG9zYXJncyAmJiBucG9zYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAga3dvbmx5YXJncyA9IChua3dvbmx5YXJncyA/Ci0gICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgICAgICAgICAgICAgICAgIF9QeV9hc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFrd29ubHlhcmdzICYmIG5rd29ubHlhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwb3NkZWZhdWx0cyA9IChucG9zZGVmYXVsdHMgPwotICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9uZXcobnBvc2RlZmF1bHRzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5wb3NkZWZhdWx0cywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIXBvc2RlZmF1bHRzICYmIG5wb3NkZWZhdWx0cykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogVGhlIGxlbmd0aCBvZiBrd29ubHlhcmdzIGFuZCBrd2RlZmF1bHRzIGFyZSBzYW1lCiAgICAgICAgc2luY2Ugd2Ugc2V0IE5VTEwgYXMgZGVmYXVsdCBmb3Iga2V5d29yZCBvbmx5IGFyZ3VtZW50IHcvbyBkZWZhdWx0CiAgICAgICAgLSB3ZSBoYXZlIHNlcXVlbmNlIGRhdGEgc3RydWN0dXJlLCBidXQgbm8gZGljdGlvbmFyeSAqLwogICAgIGt3ZGVmYXVsdHMgPSAobmt3b25seWFyZ3MgPwotICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICgha3dkZWZhdWx0cyAmJiBua3dvbmx5YXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTEzNDQsMTcgKzEzNTUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgaSA9IHJlczsgLyogcmVzIGhhcyBuZXcgcG9zaXRpb24gdG8gcHJvY2VzcyAqLwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyYXJnID0gTkVXX0lERU5USUZJRVIoQ0hJTEQoY2gsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyYXJnID0gYXN0X2Zvcl9hcmcoYywgY2gpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmFyZykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgdmFyYXJnLCBDSElMRChjaCwgMCksIDApKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBvbiB0aGUgdmFyYXJnICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJhcmdhbm5vdGF0aW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmFyZ2Fubm90YXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgTkNIKG4pICYmIChUWVBFKENISUxEKG4sIGkpKSA9PSB0ZnBkZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFRZUEUoQ0hJTEQobiwgaSkpID09IHZmcGRlZikpIHsKQEAgLTEzNjksMTcgKzEzNzMsOSBAQAogICAgICAgICAgICAgY2FzZSBET1VCTEVTVEFSOgogICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQobiwgaSsxKTsgIC8qIHRmcGRlZiAqLwogICAgICAgICAgICAgICAgIGFzc2VydChUWVBFKGNoKSA9PSB0ZnBkZWYgfHwgVFlQRShjaCkgPT0gdmZwZGVmKTsKLSAgICAgICAgICAgICAgICBrd2FyZyA9IE5FV19JREVOVElGSUVSKENISUxEKGNoLCAwKSk7CisgICAgICAgICAgICAgICAga3dhcmcgPSBhc3RfZm9yX2FyZyhjLCBjaCk7CiAgICAgICAgICAgICAgICAgaWYgKCFrd2FyZykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgaWYgKE5DSChjaCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFuIGFubm90YXRpb24gb24gdGhlIGt3YXJnICovCi0gICAgICAgICAgICAgICAgICAgIGt3YXJnYW5ub3RhdGlvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMikpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWt3YXJnYW5ub3RhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywga3dhcmcsIENISUxEKGNoLCAwKSwgMCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzg5LDggKzEzODUsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBhcmd1bWVudHMocG9zYXJncywgdmFyYXJnLCB2YXJhcmdhbm5vdGF0aW9uLCBrd29ubHlhcmdzLCBrd2FyZywKLSAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uLCBwb3NkZWZhdWx0cywga3dkZWZhdWx0cywgYy0+Y19hcmVuYSk7CisgICAgcmV0dXJuIGFyZ3VtZW50cyhwb3NhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGt3YXJnLCBwb3NkZWZhdWx0cywgYy0+Y19hcmVuYSk7CiB9CiAKIHN0YXRpYyBleHByX3R5CkBAIC0xNDY5LDcgKzE0NjQsNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIGRlY29yYXRvcnMpOwotICAgIGRlY29yYXRvcl9zZXEgPSBhc2RsX3NlcV9uZXcoTkNIKG4pLCBjLT5jX2FyZW5hKTsKKyAgICBkZWNvcmF0b3Jfc2VxID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobiksIGMtPmNfYXJlbmEpOwogICAgIGlmICghZGVjb3JhdG9yX3NlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE1NTUsOCArMTU1MCw3IEBACiAgICAgZXhwcl90eSBleHByZXNzaW9uOwogCiAgICAgaWYgKE5DSChuKSA9PSAzKSB7Ci0gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgYXJncyA9IGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMikpOwpAQCAtMTY2Niw3ICsxNjYwLDcgQEAKICAgICBpZiAobl9mb3JzID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGNvbXBzID0gYXNkbF9zZXFfbmV3KG5fZm9ycywgYy0+Y19hcmVuYSk7CisgICAgY29tcHMgPSBfUHlfYXNkbF9zZXFfbmV3KG5fZm9ycywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFjb21wcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE3MDcsNyArMTcwMSw3IEBACiAgICAgICAgICAgICBpZiAobl9pZnMgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGlmcyA9IGFzZGxfc2VxX25ldyhuX2lmcywgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZnMgPSBfUHlfYXNkbF9zZXFfbmV3KG5faWZzLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghaWZzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xODE5LDExICsxODEzLDIxIEBACiAKICAgICBzd2l0Y2ggKFRZUEUoY2gpKSB7CiAgICAgY2FzZSBOQU1FOiB7Ci0gICAgICAgIC8qIEFsbCBuYW1lcyBzdGFydCBpbiBMb2FkIGNvbnRleHQsIGJ1dCBtYXkgbGF0ZXIgYmUKLSAgICAgICAgICAgY2hhbmdlZC4gKi8KLSAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBORVdfSURFTlRJRklFUihjaCk7CisgICAgICAgIFB5T2JqZWN0ICpuYW1lOworICAgICAgICBjb25zdCBjaGFyICpzID0gU1RSKGNoKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzKTsKKyAgICAgICAgaWYgKGxlbiA+PSA0ICYmIGxlbiA8PSA1KSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCAiTm9uZSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYW1lQ29uc3RhbnQoUHlfTm9uZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFzdHJjbXAocywgIlRydWUiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X1RydWUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHMsICJGYWxzZSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYW1lQ29uc3RhbnQoUHlfRmFsc2UsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gbmV3X2lkZW50aWZpZXIocywgYyk7CiAgICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAvKiBBbGwgbmFtZXMgc3RhcnQgaW4gTG9hZCBjb250ZXh0LCBidXQgbWF5IGxhdGVyIGJlIGNoYW5nZWQuICovCiAgICAgICAgIHJldHVybiBOYW1lKG5hbWUsIExvYWQsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgY2FzZSBTVFJJTkc6IHsKQEAgLTE4NDgsMTIgKzE4NTIsMTUgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKGMsIG4sIGJ1Zik7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR5cGUpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0YmFjayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGlmIChieXRlc21vZGUpCiAgICAgICAgICAgICByZXR1cm4gQnl0ZXMoc3RyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGVsc2UKQEAgLTE4NjQsNyArMTg3MSwxMCBAQAogICAgICAgICBpZiAoIXB5bnVtKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBweW51bSk7CisgICAgICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHB5bnVtKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihweW51bSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gTnVtKHB5bnVtLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgRUxMSVBTSVM6IC8qIEVsbGlwc2lzICovCkBAIC0xOTEzLDcgKzE5MjMsNyBAQAogICAgICAgICAgICAgLyogaXQncyBhIHNpbXBsZSBzZXQgKi8KICAgICAgICAgICAgIGFzZGxfc2VxICplbHRzOwogICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyAyOyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWVsdHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKGNoKTsgaSArPSAyKSB7CkBAIC0xOTMyLDExICsxOTQyLDExIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBpdCdzIGEgZGljdCAqLwogICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyA0OyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgICAgICBrZXlzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAga2V5cyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWtleXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHZhbHVlcyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjA5MywxNSArMjEwMywyMiBAQAogICAgICAgICBpZiAoTkNIKG4pID09IDIpCiAgICAgICAgICAgICByZXR1cm4gQ2FsbChsZWZ0X2V4cHIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMSksIGxlZnRfZXhwcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXhwcl90eSB0bXAgPSBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMSksIGxlZnRfZXhwcik7CisgICAgICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgdG1wLT5saW5lbm8gPSBMSU5FTk8obik7CisgICAgICAgICAgICB0bXAtPmNvbF9vZmZzZXQgPSBuLT5uX2NvbF9vZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gdG1wOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IERPVCApIHsKICAgICAgICAgUHlPYmplY3QgKmF0dHJfaWQgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAxKSk7CiAgICAgICAgIGlmICghYXR0cl9pZCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXR1cm4gQXR0cmlidXRlKGxlZnRfZXhwciwgYXR0cl9pZCwgTG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKENISUxEKG4sIDEpKSwgQ0hJTEQobiwgMSktPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBSRVEoQ0hJTEQobiwgMCksIExTUUIpOwpAQCAtMjEyNCw3ICsyMTQxLDcgQEAKICAgICAgICAgICAgIGV4cHJfdHkgZTsKICAgICAgICAgICAgIGludCBzaW1wbGUgPSAxOwogICAgICAgICAgICAgYXNkbF9zZXEgKnNsaWNlcywgKmVsdHM7Ci0gICAgICAgICAgICBzbGljZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBzbGljZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzbGljZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTkNIKG4pOyBqICs9IDIpIHsKQEAgLTIxNDAsNyArMjE1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBleHRyYWN0IEluZGV4IHZhbHVlcyBhbmQgcHV0IHRoZW0gaW4gYSBUdXBsZSAqLwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhhc2RsX3NlcV9MRU4oc2xpY2VzKSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhhc2RsX3NlcV9MRU4oc2xpY2VzKSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWVsdHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXNkbF9zZXFfTEVOKHNsaWNlcyk7ICsraikgewpAQCAtMjIwMiw4ICsyMjE5LDYgQEAKICAgICAgICAgdG1wID0gYXN0X2Zvcl90cmFpbGVyKGMsIGNoLCBlKTsKICAgICAgICAgaWYgKCF0bXApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdG1wLT5saW5lbm8gPSBlLT5saW5lbm87Ci0gICAgICAgIHRtcC0+Y29sX29mZnNldCA9IGUtPmNvbF9vZmZzZXQ7CiAgICAgICAgIGUgPSB0bXA7CiAgICAgfQogICAgIGlmIChUWVBFKENISUxEKG4sIE5DSChuKSAtIDEpKSA9PSBmYWN0b3IpIHsKQEAgLTIyNzUsNyArMjI5MCw3IEBACiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIGdvdG8gbG9vcDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXNlcSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjMxMSwxMCArMjMyNiwxMCBAQAogICAgICAgICAgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICBhc2RsX2ludF9zZXEgKm9wczsKICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqY21wczsKLSAgICAgICAgICAgICAgICBvcHMgPSBhc2RsX2ludF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIG9wcyA9IF9QeV9hc2RsX2ludF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghb3BzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBjbXBzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIGNtcHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghY21wcykgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CkBAIC0yNDQwLDEwICsyNDU1LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobmFyZ3MgKyBuZ2VucywgYy0+Y19hcmVuYSk7CisgICAgYXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobmFyZ3MgKyBuZ2VucywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBrZXl3b3JkcyA9IGFzZGxfc2VxX25ldyhua2V5d29yZHMsIGMtPmNfYXJlbmEpOworICAgIGtleXdvcmRzID0gX1B5X2FzZGxfc2VxX25ldyhua2V5d29yZHMsIGMtPmNfYXJlbmEpOwogICAgIGlmICgha2V5d29yZHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5hcmdzID0gMDsKQEAgLTI2MjAsNyArMjYzNSw3IEBACiAKICAgICAgICAgLyogYSBub3JtYWwgYXNzaWdubWVudCAqLwogICAgICAgICBSRVEoQ0hJTEQobiwgMSksIEVRVUFMKTsKLSAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgdGFyZ2V0cyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghdGFyZ2V0cykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pIC0gMjsgaSArPSAyKSB7CkBAIC0yNjYxLDcgKzI2NzYsNyBAQAogCiAgICAgUkVRKG4sIGV4cHJsaXN0KTsKIAotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTI4NDYsMTMgKzI4NjEsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgc3RyID0gdW5pOwogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZzdHIpOwotICAgICAgICAgICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBhbGlhcyhzdHIsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU1RBUjoKICAgICAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCIqIik7Ci0gICAgICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFsaWFzKHN0ciwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC0yODg1LDcgKzI5MDYsNyBAQAogICAgIGlmIChUWVBFKG4pID09IGltcG9ydF9uYW1lKSB7CiAgICAgICAgIG4gPSBDSElMRChuLCAxKTsKICAgICAgICAgUkVRKG4sIGRvdHRlZF9hc19uYW1lcyk7Ci0gICAgICAgIGFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFsaWFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIWFsaWFzZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjk0Nyw3ICsyOTY4LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgYWxpYXNlcyA9IGFzZGxfc2VxX25ldygobl9jaGlsZHJlbiArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFsaWFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChuX2NoaWxkcmVuICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhbGlhc2VzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI5ODYsNyArMzAwNyw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgZ2xvYmFsX3N0bXQpOwotICAgIHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgcyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTMwMDcsNyArMzAyOCw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgbm9ubG9jYWxfc3RtdCk7Ci0gICAgcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDE7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMzA2MCw3ICszMDgxLDcgQEAKICAgICBSRVEobiwgc3VpdGUpOwogCiAgICAgdG90YWwgPSBudW1fc3RtdHMobik7Ci0gICAgc2VxID0gYXNkbF9zZXFfbmV3KHRvdGFsLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KHRvdGFsLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IHNpbXBsZV9zdG10KSB7CkBAIC0zMTc5LDcgKzMyMDAsNyBAQAogICAgICAgICBpZiAoaGFzX2Vsc2UpIHsKICAgICAgICAgICAgIGFzZGxfc2VxICpzdWl0ZV9zZXEyOwogCi0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFvcmVsc2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIE5DSChuKSAtIDYpKTsKQEAgLTMyMDMsNyArMzIyNCw3IEBACiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5fZWxpZjsgaSsrKSB7CiAgICAgICAgICAgICBpbnQgb2ZmID0gNSArIChuX2VsaWYgLSBpIC0gMSkgKiA0OwotICAgICAgICAgICAgYXNkbF9zZXEgKm5ld29iaiA9IGFzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGFzZGxfc2VxICpuZXdvYmogPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFuZXdvYmopCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIG9mZikpOwpAQCAtMzQxNSw3ICszNDM2LDcgQEAKICAgICBpZiAobl9leGNlcHQgPiAwKSB7CiAgICAgICAgIGludCBpOwogICAgICAgICAvKiBwcm9jZXNzIGV4Y2VwdCBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBhIHRyeSAuLi4gZXhjZXB0ICovCi0gICAgICAgIGhhbmRsZXJzID0gYXNkbF9zZXFfbmV3KG5fZXhjZXB0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgaGFuZGxlcnMgPSBfUHlfYXNkbF9zZXFfbmV3KG5fZXhjZXB0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzQ2Niw3ICszNDg3LDcgQEAKICAgICBSRVEobiwgd2l0aF9zdG10KTsKIAogICAgIG5faXRlbXMgPSAoTkNIKG4pIC0gMikgLyAyOwotICAgIGl0ZW1zID0gYXNkbF9zZXFfbmV3KG5faXRlbXMsIGMtPmNfYXJlbmEpOworICAgIGl0ZW1zID0gX1B5X2FzZGxfc2VxX25ldyhuX2l0ZW1zLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWl0ZW1zKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pIC0gMjsgaSArPSAyKSB7CkBAIC0zNjMyLDE4ICszNjUzLDE2IEBACiAgICAgZW5kID0gcyArIHN0cmxlbihzKSAtIDE7CiAgICAgaW1mbGFnID0gKmVuZCA9PSAnaicgfHwgKmVuZCA9PSAnSic7CiAgICAgaWYgKHNbMF0gPT0gJzAnKSB7Ci0gICAgICAgIHggPSAobG9uZykgUHlPU19zdHJ0b3VsKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIHggPSAobG9uZykgUHlPU19zdHJ0b3VsKHMsIChjaGFyICoqKSZlbmQsIDApOwogICAgICAgICBpZiAoeCA8IDAgJiYgZXJybm8gPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKHMsIChjaGFyICoqKTAsIDApOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgeCA9IFB5T1Nfc3RydG9sKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIHggPSBQeU9TX3N0cnRvbChzLCAoY2hhciAqKikmZW5kLCAwKTsKICAgICBpZiAoKmVuZCA9PSAnXDAnKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywgKGNoYXIgKiopMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcocywgKGNoYXIgKiopMCwgMCk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoeCk7CiAgICAgfQogICAgIC8qIFhYWCBIdWdlIGZsb2F0cyBtYXkgc2lsZW50bHkgZmFpbCAqLwpAQCAtMzY2Niw4ICszNjg1LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZWNvZGVfdXRmOChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBjaGFyICoqc1B0ciwgY29uc3QgY2hhciAqZW5kKQogewotICAgIGNoYXIgKnMsICp0OwotICAgIHQgPSBzID0gKGNoYXIgKikqc1B0cjsKKyAgICBjb25zdCBjaGFyICpzLCAqdDsKKyAgICB0ID0gcyA9ICpzUHRyOwogICAgIC8qIHdoaWxlIChzIDwgZW5kICYmICpzICE9ICdcXCcpIHMrKzsgKi8gLyogaW5lZmZpY2llbnQgZm9yIHUiLi4iICovCiAgICAgd2hpbGUgKHMgPCBlbmQgJiYgKCpzICYgMHg4MCkpIHMrKzsKICAgICAqc1B0ciA9IHM7CmRpZmYgLS1naXQgYS9QeXRob24vYmx0aW5tb2R1bGUuYyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCmluZGV4IGM5NGRhZWEuLmQ5MDViYTIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jCisrKyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCkBAIC0zMiw4ICszMiwxOSBAQAogaW50IFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAwOwogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKF9fYnVpbHRpbnNfXyk7CitfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CitfUHlfSURFTlRJRklFUihfX3ByZXBhcmVfXyk7CitfUHlfSURFTlRJRklFUihfX3JvdW5kX18pOworX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworX1B5X0lERU5USUZJRVIoZXJyb3JzKTsKIF9QeV9JREVOVElGSUVSKGZpbGVubyk7CiBfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihtZXRhY2xhc3MpOworX1B5X0lERU5USUZJRVIoc29ydCk7CitfUHlfSURFTlRJRklFUihzdGRpbik7CitfUHlfSURFTlRJRklFUihzdGRvdXQpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5fX19idWlsZF9jbGFzc19fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC00Miw3ICs1Myw2IEBACiAgICAgUHlPYmplY3QgKmNscyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBuYXJnczsKICAgICBpbnQgaXNjbGFzczsKLSAgICBfUHlfSURFTlRJRklFUihfX3ByZXBhcmVfXyk7CiAKICAgICBhc3NlcnQoYXJncyAhPSBOVUxMKTsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKQEAgLTU3LDYgKzY3LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBmdW5jID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKTsgLyogQmV0dGVyIGJlIGNhbGxhYmxlICovCisgICAgaWYgKCFQeUZ1bmN0aW9uX0NoZWNrKGZ1bmMpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9jbGFzc19fOiBmdW5jIG11c3QgYmUgYSBmdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMSk7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobmFtZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTc3LDEwICs5MiwxMCBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGJhc2VzKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIG1ldGEgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhta3csICJtZXRhY2xhc3MiKTsKKyAgICAgICAgbWV0YSA9IF9QeURpY3RfR2V0SXRlbUlkKG1rdywgJlB5SWRfbWV0YWNsYXNzKTsKICAgICAgICAgaWYgKG1ldGEgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlfSU5DUkVGKG1ldGEpOwotICAgICAgICAgICAgaWYgKFB5RGljdF9EZWxJdGVtU3RyaW5nKG1rdywgIm1ldGFjbGFzcyIpIDwgMCkgeworICAgICAgICAgICAgaWYgKF9QeURpY3RfRGVsSXRlbUlkKG1rdywgJlB5SWRfbWV0YWNsYXNzKSA8IDApIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobWV0YSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1rdyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGJhc2VzKTsKQEAgLTE1NSw3ICsxNzAsOSBAQAogICAgICAgICBQeV9ERUNSRUYoYmFzZXMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgY2VsbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZnVuYywgbnMsIE5VTEwpOworICAgIGNlbGwgPSBQeUV2YWxfRXZhbENvZGVFeChQeUZ1bmN0aW9uX0dFVF9DT0RFKGZ1bmMpLCBQeUZ1bmN0aW9uX0dFVF9HTE9CQUxTKGZ1bmMpLCBucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HRVRfQ0xPU1VSRShmdW5jKSk7CiAgICAgaWYgKGNlbGwgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqbWFyZ3M7CiAgICAgICAgIG1hcmdzID0gUHlUdXBsZV9QYWNrKDMsIG5hbWUsIGJhc2VzLCBucyk7CkBAIC0zMzMsNyArMzUwLDExIEBACiBQeURvY19TVFJWQVIoYmluX2RvYywKICJiaW4obnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKK1JldHVybiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCitcblwKKyAgID4+PiBiaW4oMjc5NjIwMilcblwKKyAgICcwYjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAnXG5cCisiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTcyLDggKzU5Myw3IEBACiBidWlsdGluX2NvbXBpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBjaGFyICpzdHI7Ci0gICAgUHlPYmplY3QgKmZpbGVuYW1lX29iajsKLSAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgY2hhciAqc3RhcnRzdHI7CiAgICAgaW50IG1vZGUgPSAtMTsKICAgICBpbnQgZG9udF9pbmhlcml0ID0gMDsKQEAgLTU4OSwxMiArNjA5LDExIEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mc3xpaWk6Y29tcGlsZSIsICBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZmaWxlbmFtZV9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHN0ciwgJnN1cHBsaWVkX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb250X2luaGVyaXQsICZvcHRpbWl6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZmlsZW5hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhmaWxlbmFtZV9vYmopOwogICAgIGNmLmNmX2ZsYWdzID0gc3VwcGxpZWRfZmxhZ3MgfCBQeUNGX1NPVVJDRV9JU19VVEY4OwogCiAgICAgaWYgKHN1cHBsaWVkX2ZsYWdzICYKQEAgLTY1MiwyNCArNjcxLDI0IEBACiAgICAgICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ID0gKFB5T2JqZWN0KilQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZiwgb3B0aW1pemUsIGFyZW5hKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IChQeU9iamVjdCopUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZiwgb3B0aW1pemUsIGFyZW5hKTsKICAgICAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIH0KICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIH0KIAotICAgIHN0ciA9IHNvdXJjZV9hc19zdHJpbmcoY21kLCAiY29tcGlsZSIsICJzdHJpbmcsIGJ5dGVzLCBBU1Qgb3IgY29kZSIsICZjZik7CisgICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhjbWQsICJjb21waWxlIiwgInN0cmluZywgYnl0ZXMgb3IgQVNUIiwgJmNmKTsKICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICByZXN1bHQgPSBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhzdHIsIGZpbGVuYW1lLCBzdGFydFttb2RlXSwgJmNmLCBvcHRpbWl6ZSk7CisgICAgcmVzdWx0ID0gUHlfQ29tcGlsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydFttb2RlXSwgJmNmLCBvcHRpbWl6ZSk7CiAgICAgZ290byBmaW5hbGx5OwogCiBlcnJvcjoKICAgICByZXN1bHQgPSBOVUxMOwogZmluYWxseToKLSAgICBQeV9ERUNSRUYoZmlsZW5hbWVfb2JqKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTc1MCw4ICs3NjksMTEgQEAKICAgICB9CiAgICAgaWYgKGdsb2JhbHMgPT0gUHlfTm9uZSkgewogICAgICAgICBnbG9iYWxzID0gUHlFdmFsX0dldEdsb2JhbHMoKTsKLSAgICAgICAgaWYgKGxvY2FscyA9PSBQeV9Ob25lKQorICAgICAgICBpZiAobG9jYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIGxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkKICAgICAgICAgbG9jYWxzID0gZ2xvYmFsczsKQEAgLTc2Myw5ICs3ODUsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIpID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCisgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXykgPT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTgxNSw2ICs4MzcsOCBAQAogICAgICAgICBnbG9iYWxzID0gUHlFdmFsX0dldEdsb2JhbHMoKTsKICAgICAgICAgaWYgKGxvY2FscyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFnbG9iYWxzIHx8ICFsb2NhbHMpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTgzNiw5ICs4NjAsOSBAQAogICAgICAgICAgICAgbG9jYWxzLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIikgPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKKyAgICBpZiAoX1B5RGljdF9HZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fKSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTI1Niw3ICsxMjgwLDExIEBACiBQeURvY19TVFJWQVIoaGV4X2RvYywKICJoZXgobnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworUmV0dXJuIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAorXG5cCisgICA+Pj4gaGV4KDM3MzU5Mjg1NTkpXG5cCisgICAnMHhkZWFkYmVlZidcblwKKyIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMjk3LDkgKzEzMjUsOSBAQAogfQogCiBQeURvY19TVFJWQVIobGVuX2RvYywKLSJsZW4ob2JqZWN0KSAtPiBpbnRlZ2VyXG5cCisibGVuKG9iamVjdClcblwKIFxuXAotUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgb2YgYSBzZXF1ZW5jZSBvciBtYXBwaW5nLiIpOworUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgb2YgYSBzZXF1ZW5jZSBvciBjb2xsZWN0aW9uLiIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMzIyLDI2ICsxMzUwLDM1IEBACiBtaW5fbWF4KFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcywgaW50IG9wKQogewogICAgIFB5T2JqZWN0ICp2LCAqaXQsICppdGVtLCAqdmFsLCAqbWF4aXRlbSwgKm1heHZhbCwgKmtleWZ1bmM9TlVMTDsKKyAgICBQeU9iamVjdCAqZW1wdHl0dXBsZSwgKmRlZmF1bHR2YWwgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2V5IiwgImRlZmF1bHQiLCBOVUxMfTsKICAgICBjb25zdCBjaGFyICpuYW1lID0gb3AgPT0gUHlfTFQgPyAibWluIiA6ICJtYXgiOworICAgIGNvbnN0IGludCBwb3NpdGlvbmFsID0gUHlUdXBsZV9TaXplKGFyZ3MpID4gMTsKKyAgICBpbnQgcmV0OwogCi0gICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA+IDEpCisgICAgaWYgKHBvc2l0aW9uYWwpCiAgICAgICAgIHYgPSBhcmdzOwotICAgIGVsc2UgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAoY2hhciAqKW5hbWUsIDEsIDEsICZ2KSkKKyAgICBlbHNlIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgbmFtZSwgMSwgMSwgJnYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChrd2RzICE9IE5VTEwgJiYgUHlEaWN0X0NoZWNrKGt3ZHMpICYmIFB5RGljdF9TaXplKGt3ZHMpKSB7Ci0gICAgICAgIGtleWZ1bmMgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhrd2RzLCAia2V5Iik7Ci0gICAgICAgIGlmIChQeURpY3RfU2l6ZShrd2RzKSE9MSAgfHwgIGtleWZ1bmMgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50IiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoa2V5ZnVuYyk7CisgICAgZW1wdHl0dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChlbXB0eXR1cGxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldCA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhlbXB0eXR1cGxlLCBrd2RzLCAifCRPTyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleWZ1bmMsICZkZWZhdWx0dmFsKTsKKyAgICBQeV9ERUNSRUYoZW1wdHl0dXBsZSk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHBvc2l0aW9uYWwgJiYgZGVmYXVsdHZhbCAhPSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgYSBkZWZhdWx0IGZvciAlcygpIHdpdGggbXVsdGlwbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uYWwgYXJndW1lbnRzIiwgbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKICAgICBpZiAoaXQgPT0gTlVMTCkgewotICAgICAgICBQeV9YREVDUkVGKGtleWZ1bmMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEzODUsMTQgKzE0MjIsMTggQEAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBGYWlsX2l0OwogICAgIGlmIChtYXh2YWwgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICIlcygpIGFyZyBpcyBhbiBlbXB0eSBzZXF1ZW5jZSIsIG5hbWUpOwogICAgICAgICBhc3NlcnQobWF4aXRlbSA9PSBOVUxMKTsKKyAgICAgICAgaWYgKGRlZmF1bHR2YWwgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHR2YWwpOworICAgICAgICAgICAgbWF4aXRlbSA9IGRlZmF1bHR2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoKSBhcmcgaXMgYW4gZW1wdHkgc2VxdWVuY2UiLCBuYW1lKTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgICAgIFB5X0RFQ1JFRihtYXh2YWwpOwogICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICByZXR1cm4gbWF4aXRlbTsKIAogRmFpbF9pdF9pdGVtX2FuZF92YWw6CkBAIC0xNDAzLDcgKzE0NDQsNiBAQAogICAgIFB5X1hERUNSRUYobWF4dmFsKTsKICAgICBQeV9YREVDUkVGKG1heGl0ZW0pOwogICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTQxNCwxMCArMTQ1NCwxMiBAQAogfQogCiBQeURvY19TVFJWQVIobWluX2RvYywKLSJtaW4oaXRlcmFibGVbLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCi1taW4oYSwgYiwgYywgLi4uWywga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAorIm1pbihpdGVyYWJsZSwgKlssIGRlZmF1bHQ9b2JqLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCittaW4oYXJnMSwgYXJnMiwgKmFyZ3MsICpbLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCiBcblwKLVdpdGggYSBzaW5nbGUgaXRlcmFibGUgYXJndW1lbnQsIHJldHVybiBpdHMgc21hbGxlc3QgaXRlbS5cblwKK1dpdGggYSBzaW5nbGUgaXRlcmFibGUgYXJndW1lbnQsIHJldHVybiBpdHMgc21hbGxlc3QgaXRlbS4gVGhlXG5cCitkZWZhdWx0IGtleXdvcmQtb25seSBhcmd1bWVudCBzcGVjaWZpZXMgYW4gb2JqZWN0IHRvIHJldHVybiBpZlxuXAordGhlIHByb3ZpZGVkIGl0ZXJhYmxlIGlzIGVtcHR5LlxuXAogV2l0aCB0d28gb3IgbW9yZSBhcmd1bWVudHMsIHJldHVybiB0aGUgc21hbGxlc3QgYXJndW1lbnQuIik7CiAKIApAQCAtMTQyOCwxMCArMTQ3MCwxMiBAQAogfQogCiBQeURvY19TVFJWQVIobWF4X2RvYywKLSJtYXgoaXRlcmFibGVbLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCi1tYXgoYSwgYiwgYywgLi4uWywga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAorIm1heChpdGVyYWJsZSwgKlssIGRlZmF1bHQ9b2JqLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCittYXgoYXJnMSwgYXJnMiwgKmFyZ3MsICpbLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCiBcblwKLVdpdGggYSBzaW5nbGUgaXRlcmFibGUgYXJndW1lbnQsIHJldHVybiBpdHMgbGFyZ2VzdCBpdGVtLlxuXAorV2l0aCBhIHNpbmdsZSBpdGVyYWJsZSBhcmd1bWVudCwgcmV0dXJuIGl0cyBiaWdnZXN0IGl0ZW0uIFRoZVxuXAorZGVmYXVsdCBrZXl3b3JkLW9ubHkgYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWZcblwKK3RoZSBwcm92aWRlZCBpdGVyYWJsZSBpcyBlbXB0eS5cblwKIFdpdGggdHdvIG9yIG1vcmUgYXJndW1lbnRzLCByZXR1cm4gdGhlIGxhcmdlc3QgYXJndW1lbnQuIik7CiAKIApAQCAtMTQ0NCw3ICsxNDg4LDExIEBACiBQeURvY19TVFJWQVIob2N0X2RvYywKICJvY3QobnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworUmV0dXJuIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAorXG5cCisgICA+Pj4gb2N0KDM0MjM5MSlcblwKKyAgICcwbzEyMzQ1NjcnXG5cCisiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTUzMCw3ICsxNTc4LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc2VwLCAmZW5kLCAmZmlsZSwgJmZsdXNoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGZpbGUgPT0gTlVMTCB8fCBmaWxlID09IFB5X05vbmUpIHsKLSAgICAgICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImxvc3Qgc3lzLnN0ZG91dCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKwogICAgICAgICAvKiBzeXMuc3Rkb3V0IG1heSBiZSBOb25lIHdoZW4gRklMRSogc3Rkb3V0IGlzbid0IGNvbm5lY3RlZCAqLwogICAgICAgICBpZiAoZmlsZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0xNTg0LDcgKzE2MzcsNyBAQAogICAgICAgICBpZiAoZG9fZmx1c2ggPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZWxzZSBpZiAoZG9fZmx1c2gpIHsKLSAgICAgICAgICAgIHRtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZmlsZSwgImZsdXNoIiwgIiIpOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmaWxlLCAmUHlJZF9mbHVzaCwgIiIpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZWxzZQpAQCAtMTYxMCw5ICsxNjYzLDkgQEAKIGJ1aWx0aW5faW5wdXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpwcm9tcHRhcmcgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmaW4gPSBQeVN5c19HZXRPYmplY3QoInN0ZGluIik7Ci0gICAgUHlPYmplY3QgKmZvdXQgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOwotICAgIFB5T2JqZWN0ICpmZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZmluID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGluKTsKKyAgICBQeU9iamVjdCAqZm91dCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOworICAgIFB5T2JqZWN0ICpmZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgUHlPYmplY3QgKnRtcDsKICAgICBsb25nIGZkOwogICAgIGludCB0dHk7CkBAIC0xNjgzLDggKzE3MzYsNiBAQAogICAgICAgICBjaGFyICpzdGRpbl9lbmNvZGluZ19zdHIsICpzdGRpbl9lcnJvcnNfc3RyOwogICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICBfUHlfSURFTlRJRklFUihlbmNvZGluZyk7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGVycm9ycyk7CiAKICAgICAgICAgc3RkaW5fZW5jb2RpbmcgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZpbiwgJlB5SWRfZW5jb2RpbmcpOwogICAgICAgICBzdGRpbl9lcnJvcnMgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZpbiwgJlB5SWRfZXJyb3JzKTsKQEAgLTE4MTAsMTAgKzE4NjEsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5fcm91bmQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnJvdW5kX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5kaWdpdHMgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibnVtYmVyIiwgIm5kaWdpdHMiLCAwfTsKLSAgICBQeU9iamVjdCAqbnVtYmVyLCAqcm91bmQ7CisgICAgUHlPYmplY3QgKm51bWJlciwgKnJvdW5kLCAqcmVzdWx0OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98Tzpyb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbnVtYmVyLCAmbmRpZ2l0cykpCkBAIC0xODI0LDI0ICsxODc0LDIxIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAocm91bmRfc3RyID09IE5VTEwpIHsKLSAgICAgICAgcm91bmRfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcm91bmRfXyIpOwotICAgICAgICBpZiAocm91bmRfc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByb3VuZCA9IF9QeVR5cGVfTG9va3VwKFB5X1RZUEUobnVtYmVyKSwgcm91bmRfc3RyKTsKKyAgICByb3VuZCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG51bWJlciwgJlB5SWRfX19yb3VuZF9fKTsKICAgICBpZiAocm91bmQgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fcm91bmRfXyBtZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShudW1iZXIpLT50cF9uYW1lKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19yb3VuZF9fIG1ldGhvZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShudW1iZXIpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKG5kaWdpdHMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyb3VuZCwgIk8iLCBudW1iZXIpOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHJvdW5kLCBOVUxMKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocm91bmQsICJPTyIsIG51bWJlciwgbmRpZ2l0cyk7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocm91bmQsIG5kaWdpdHMsIE5VTEwpOworICAgIFB5X0RFQ1JFRihyb3VuZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHlEb2NfU1RSVkFSKHJvdW5kX2RvYywKQEAgLTE4NTksNyArMTkwNiw2IEBACiAgICAgUHlPYmplY3QgKmNhbGxhYmxlOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaXRlcmFibGUiLCAia2V5IiwgInJldmVyc2UiLCAwfTsKICAgICBpbnQgcmV2ZXJzZTsKLSAgICBfUHlfSURFTlRJRklFUihzb3J0KTsKIAogICAgIC8qIGFyZ3MgMS0zIHNob3VsZCBtYXRjaCBsaXN0c29ydCBpbiBPYmplY3RzL2xpc3RvYmplY3QuYyAqLwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9pOnNvcnRlZCIsCkBAIC0xOTA3LDE2ICsxOTUzLDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgZCA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKLSAgICAgICAgaWYgKGQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhcnMoKTogbm8gbG9jYWxzIT8iKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeV9JTkNSRUYoZCk7CisgICAgICAgIGlmIChkID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlfSU5DUkVGKGQpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoX19kaWN0X18pOwogICAgICAgICBkID0gX1B5T2JqZWN0X0dldEF0dHJJZCh2LCAmUHlJZF9fX2RpY3RfXyk7CiAgICAgICAgIGlmIChkID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC0yNDEzLDYgKzI0NTQsMTIgQEAKIF9QeUJ1aWx0aW5fSW5pdCh2b2lkKQogewogICAgIFB5T2JqZWN0ICptb2QsICpkaWN0LCAqZGVidWc7CisKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUZpbHRlcl9UeXBlKSA8IDAgfHwKKyAgICAgICAgUHlUeXBlX1JlYWR5KCZQeU1hcF9UeXBlKSA8IDAgfHwKKyAgICAgICAgUHlUeXBlX1JlYWR5KCZQeVppcF9UeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgbW9kID0gUHlNb2R1bGVfQ3JlYXRlKCZidWlsdGluc21vZHVsZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL1B5dGhvbi9jZXZhbC5jIGIvUHl0aG9uL2NldmFsLmMKaW5kZXggMmIxNjE5MS4uYmFmYjg4YyAxMDA2NDQKLS0tIGEvUHl0aG9uL2NldmFsLmMKKysrIGIvUHl0aG9uL2NldmFsLmMKQEAgLTM3LDcgKzM3LDcgQEAKIHN0YXRpYyB2b2lkCiBwcGNfZ2V0Y291bnRlcih1aW50NjQgKnYpCiB7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0YnUsIHRiLCB0YnUyOworICAgIHVuc2lnbmVkIGxvbmcgdGJ1LCB0YiwgdGJ1MjsKIAogICBsb29wOgogICAgIGFzbSB2b2xhdGlsZSAoIm1mdGJ1ICUwIiA6ICI9ciIgKHRidSkgKTsKQEAgLTEyMywxMyArMTIzLDE2IEBACiBzdGF0aWMgaW50IGxsdHJhY2U7CiBzdGF0aWMgaW50IHBydHJhY2UoUHlPYmplY3QgKiwgY2hhciAqKTsKICNlbmRpZgotc3RhdGljIGludCBjYWxsX3RyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwgUHlGcmFtZU9iamVjdCAqLAorc3RhdGljIGludCBjYWxsX3RyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQsIFB5T2JqZWN0ICopOwogc3RhdGljIGludCBjYWxsX3RyYWNlX3Byb3RlY3RlZChQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnJhbWVPYmplY3QgKiwgaW50LCBQeU9iamVjdCAqKTsKLXN0YXRpYyB2b2lkIGNhbGxfZXhjX3RyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwgUHlGcmFtZU9iamVjdCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgUHlPYmplY3QgKik7CitzdGF0aWMgdm9pZCBjYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7CiBzdGF0aWMgaW50IG1heWJlX2NhbGxfbGluZV90cmFjZShQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZyYW1lT2JqZWN0ICosIGludCAqLCBpbnQgKiwgaW50ICopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICosIGludCAqLCBpbnQgKiwgaW50ICopOwogCiBzdGF0aWMgUHlPYmplY3QgKiBjbXBfb3V0Y29tZShpbnQsIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogc3RhdGljIFB5T2JqZWN0ICogaW1wb3J0X2Zyb20oUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CkBAIC0xNDIsOCArMTQ1LDYgQEAKIAogI2RlZmluZSBOQU1FX0VSUk9SX01TRyBcCiAgICAgIm5hbWUgJyUuMjAwcycgaXMgbm90IGRlZmluZWQiCi0jZGVmaW5lIEdMT0JBTF9OQU1FX0VSUk9SX01TRyBcCi0gICAgImdsb2JhbCBuYW1lICclLjIwMHMnIGlzIG5vdCBkZWZpbmVkIgogI2RlZmluZSBVTkJPVU5ETE9DQUxfRVJST1JfTVNHIFwKICAgICAibG9jYWwgdmFyaWFibGUgJyUuMjAwcycgcmVmZXJlbmNlZCBiZWZvcmUgYXNzaWdubWVudCIKICNkZWZpbmUgVU5CT1VOREZSRUVfRVJST1JfTVNHIFwKQEAgLTM2NCwyOSArMzY1LDI4IEBACiAgICAgZHJvcF9naWwodHN0YXRlKTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBQeU9TX0FmdGVyRm9yayB0byBlbnN1cmUgdGhhdCBuZXdseQotICAgY3JlYXRlZCBjaGlsZCBwcm9jZXNzZXMgZG9uJ3QgaG9sZCBsb2NrcyByZWZlcnJpbmcgdG8gdGhyZWFkcyB3aGljaAotICAgYXJlIG5vdCBydW5uaW5nIGluIHRoZSBjaGlsZCBwcm9jZXNzLiAgKFRoaXMgY291bGQgYWxzbyBiZSBkb25lIHVzaW5nCi0gICBwdGhyZWFkX2F0Zm9yayBtZWNoYW5pc20sIGF0IGxlYXN0IGZvciB0aGUgcHRocmVhZHMgaW1wbGVtZW50YXRpb24uKSAqLworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBQeU9TX0FmdGVyRm9yayB0byBkZXN0cm95IGFsbCB0aHJlYWRzIHdoaWNoIGFyZQorICogbm90IHJ1bm5pbmcgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIGFuZCBjbGVhciBpbnRlcm5hbCBsb2NrcyB3aGljaCBtaWdodCBiZQorICogaGVsZCBieSB0aG9zZSB0aHJlYWRzLiAoVGhpcyBjb3VsZCBhbHNvIGJlIGRvbmUgdXNpbmcgcHRocmVhZF9hdGZvcmsKKyAqIG1lY2hhbmlzbSwgYXQgbGVhc3QgZm9yIHRoZSBwdGhyZWFkcyBpbXBsZW1lbnRhdGlvbi4pICovCiAKIHZvaWQKIFB5RXZhbF9SZUluaXRUaHJlYWRzKHZvaWQpCiB7CiAgICAgX1B5X0lERU5USUZJRVIoX2FmdGVyX2ZvcmspOwogICAgIFB5T2JqZWN0ICp0aHJlYWRpbmcsICpyZXN1bHQ7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeVRocmVhZFN0YXRlICpjdXJyZW50X3RzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAKICAgICBpZiAoIWdpbF9jcmVhdGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICByZWNyZWF0ZV9naWwoKTsKICAgICBwZW5kaW5nX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7Ci0gICAgdGFrZV9naWwodHN0YXRlKTsKKyAgICB0YWtlX2dpbChjdXJyZW50X3RzdGF0ZSk7CiAgICAgbWFpbl90aHJlYWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CiAKICAgICAvKiBVcGRhdGUgdGhlIHRocmVhZGluZyBtb2R1bGUgd2l0aCB0aGUgbmV3IHN0YXRlLgogICAgICAqLwotICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7Ci0gICAgdGhyZWFkaW5nID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcodHN0YXRlLT5pbnRlcnAtPm1vZHVsZXMsCisgICAgdGhyZWFkaW5nID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoY3VycmVudF90c3RhdGUtPmludGVycC0+bW9kdWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyZWFkaW5nIik7CiAgICAgaWYgKHRocmVhZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIHRocmVhZGluZyBub3QgaW1wb3J0ZWQgKi8KQEAgLTM5OSw2ICszOTksOSBAQAogICAgIGVsc2UKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgUHlfREVDUkVGKHRocmVhZGluZyk7CisKKyAgICAvKiBEZXN0cm95IGFsbCB0aHJlYWRzIGV4Y2VwdCB0aGUgY3VycmVudCBvbmUgKi8KKyAgICBfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoY3VycmVudF90c3RhdGUpOwogfQogCiAjZWxzZQpAQCAtNzQyLDcgKzc0NSw2IEBACiBlbnVtIHdoeV9jb2RlIHsKICAgICAgICAgV0hZX05PVCA9ICAgICAgIDB4MDAwMSwgLyogTm8gZXJyb3IgKi8KICAgICAgICAgV0hZX0VYQ0VQVElPTiA9IDB4MDAwMiwgLyogRXhjZXB0aW9uIG9jY3VycmVkICovCi0gICAgICAgIFdIWV9SRVJBSVNFID0gICAweDAwMDQsIC8qIEV4Y2VwdGlvbiByZS1yYWlzZWQgYnkgJ2ZpbmFsbHknICovCiAgICAgICAgIFdIWV9SRVRVUk4gPSAgICAweDAwMDgsIC8qICdyZXR1cm4nIHN0YXRlbWVudCAqLwogICAgICAgICBXSFlfQlJFQUsgPSAgICAgMHgwMDEwLCAvKiAnYnJlYWsnIHN0YXRlbWVudCAqLwogICAgICAgICBXSFlfQ09OVElOVUUgPSAgMHgwMDIwLCAvKiAnY29udGludWUnIHN0YXRlbWVudCAqLwpAQCAtNzUzLDcgKzc1NSw3IEBACiBzdGF0aWMgdm9pZCBzYXZlX2V4Y19zdGF0ZShQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7CiBzdGF0aWMgdm9pZCBzd2FwX2V4Y19zdGF0ZShQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7CiBzdGF0aWMgdm9pZCByZXN0b3JlX2FuZF9jbGVhcl9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwotc3RhdGljIGVudW0gd2h5X2NvZGUgZG9fcmFpc2UoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitzdGF0aWMgaW50IGRvX3JhaXNlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogc3RhdGljIGludCB1bnBhY2tfaXRlcmFibGUoUHlPYmplY3QgKiwgaW50LCBpbnQsIFB5T2JqZWN0ICoqKTsKIAogLyogUmVjb3JkcyB3aGV0aGVyIHRyYWNpbmcgaXMgb24gZm9yIGFueSB0aHJlYWQuICBDb3VudHMgdGhlIG51bWJlciBvZgpAQCAtNzkzLDE4ICs3OTUsMTIgQEAKICNpZmRlZiBEWFBBSVJTCiAgICAgaW50IGxhc3RvcGNvZGUgPSAwOwogI2VuZGlmCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipzdGFja19wb2ludGVyOyAgLyogTmV4dCBmcmVlIHNsb3QgaW4gdmFsdWUgc3RhY2sgKi8KLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpuZXh0X2luc3RyOwotICAgIHJlZ2lzdGVyIGludCBvcGNvZGU7ICAgICAgICAvKiBDdXJyZW50IG9wY29kZSAqLwotICAgIHJlZ2lzdGVyIGludCBvcGFyZzsgICAgICAgICAvKiBDdXJyZW50IG9wY29kZSBhcmd1bWVudCwgaWYgYW55ICovCi0gICAgcmVnaXN0ZXIgZW51bSB3aHlfY29kZSB3aHk7IC8qIFJlYXNvbiBmb3IgYmxvY2sgc3RhY2sgdW53aW5kICovCi0gICAgcmVnaXN0ZXIgaW50IGVycjsgICAgICAgICAgIC8qIEVycm9yIHN0YXR1cyAtLSBub256ZXJvIGlmIGVycm9yICovCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKng7ICAgICAgIC8qIFJlc3VsdCBvYmplY3QgLS0gTlVMTCBpZiBlcnJvciAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OyAgICAgICAvKiBUZW1wb3Jhcnkgb2JqZWN0cyBwb3BwZWQgb2ZmIHN0YWNrICovCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnc7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnU7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnQ7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOworICAgIFB5T2JqZWN0ICoqc3RhY2tfcG9pbnRlcjsgIC8qIE5leHQgZnJlZSBzbG90IGluIHZhbHVlIHN0YWNrICovCisgICAgdW5zaWduZWQgY2hhciAqbmV4dF9pbnN0cjsKKyAgICBpbnQgb3Bjb2RlOyAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgKi8KKyAgICBpbnQgb3Bhcmc7ICAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgYXJndW1lbnQsIGlmIGFueSAqLworICAgIGVudW0gd2h5X2NvZGUgd2h5OyAvKiBSZWFzb24gZm9yIGJsb2NrIHN0YWNrIHVud2luZCAqLworICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsgICAgICAgICAgICAvKiBSZXR1cm4gdmFsdWUgKi8KICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIFB5Q29kZU9iamVjdCAqY287CkBAIC0xMTQzLDcgKzExMzksNyBAQAogICAgICAgICAgICAgICAgd2hlbmV2ZXIgYW4gZXhjZXB0aW9uIGlzIGRldGVjdGVkLiAqLwogICAgICAgICAgICAgaWYgKGNhbGxfdHJhY2VfcHJvdGVjdGVkKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkpIHsKICAgICAgICAgICAgICAgICAvKiBUcmFjZSBmdW5jdGlvbiByYWlzZWQgYW4gZXJyb3IgKi8KICAgICAgICAgICAgICAgICBnb3RvIGV4aXRfZXZhbF9mcmFtZTsKICAgICAgICAgICAgIH0KQEAgLTExNTMsNyArMTE0OSw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gaXRzZWxmIGFuZCBpc24ndCBjYWxsZWQgZm9yICJsaW5lIiBldmVudHMgKi8KICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiwgUHlUcmFjZV9DQUxMLCBQeV9Ob25lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZiwgUHlUcmFjZV9DQUxMLCBQeV9Ob25lKSkgewogICAgICAgICAgICAgICAgIC8qIFByb2ZpbGUgZnVuY3Rpb24gcmFpc2VkIGFuIGVycm9yICovCiAgICAgICAgICAgICAgICAgZ290byBleGl0X2V2YWxfZnJhbWU7CiAgICAgICAgICAgICB9CkBAIC0xMTg5LDYgKzExODUsNyBAQAogICAgIHN0YWNrX3BvaW50ZXIgPSBmLT5mX3N0YWNrdG9wOwogICAgIGFzc2VydChzdGFja19wb2ludGVyICE9IE5VTEwpOwogICAgIGYtPmZfc3RhY2t0b3AgPSBOVUxMOyAgICAgICAvKiByZW1haW5zIE5VTEwgdW5sZXNzIHlpZWxkIHN1c3BlbmRzIGZyYW1lICovCisgICAgZi0+Zl9leGVjdXRpbmcgPSAxOwogCiAgICAgaWYgKGNvLT5jb19mbGFncyAmIENPX0dFTkVSQVRPUiAmJiAhdGhyb3dmbGFnKSB7CiAgICAgICAgIGlmIChmLT5mX2V4Y190eXBlICE9IE5VTEwgJiYgZi0+Zl9leGNfdHlwZSAhPSBQeV9Ob25lKSB7CkBAIC0xMjA2LDE0ICsxMjAzLDE2IEBACiAjZW5kaWYKIAogICAgIHdoeSA9IFdIWV9OT1Q7Ci0gICAgZXJyID0gMDsKLSAgICB4ID0gUHlfTm9uZTsgICAgICAgIC8qIE5vdCBhIHJlZmVyZW5jZSwganVzdCBhbnl0aGluZyBub24tTlVMTCAqLwotICAgIHcgPSBOVUxMOwogCi0gICAgaWYgKHRocm93ZmxhZykgeyAvKiBzdXBwb3J0IGZvciBnZW5lcmF0b3IudGhyb3coKSAqLwotICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICBnb3RvIG9uX2Vycm9yOwotICAgIH0KKyAgICBpZiAodGhyb3dmbGFnKSAvKiBzdXBwb3J0IGZvciBnZW5lcmF0b3IudGhyb3coKSAqLworICAgICAgICBnb3RvIGVycm9yOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeUV2YWxfRXZhbEZyYW1lRXgoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgogCiAgICAgZm9yICg7OykgewogI2lmZGVmIFdJVEhfVFNDCkBAIC0xMjM1LDYgKzEyMzQsNyBAQAogI2VuZGlmCiAgICAgICAgIGFzc2VydChzdGFja19wb2ludGVyID49IGYtPmZfdmFsdWVzdGFjayk7IC8qIGVsc2UgdW5kZXJmbG93ICovCiAgICAgICAgIGFzc2VydChTVEFDS19MRVZFTCgpIDw9IGNvLT5jb19zdGFja3NpemUpOyAgLyogZWxzZSBvdmVyZmxvdyAqLworICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOwogCiAgICAgICAgIC8qIERvIHBlcmlvZGljIHRoaW5ncy4gIERvaW5nIHRoaXMgZXZlcnkgdGltZSB0aHJvdWdoCiAgICAgICAgICAgIHRoZSBsb29wIHdvdWxkIGFkZCB0b28gbXVjaCBvdmVyaGVhZCwgc28gd2UgZG8gaXQKQEAgLTEyNTAsMTUgKzEyNTAsMTIgQEAKICAgICAgICAgICAgICAgICAgICBhIHRyeTogZmluYWxseTogYmxvY2sgdW5pbnRlcnJ1cHRpYmxlLiAqLwogICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRzdGF0ZS0+dGlja19jb3VudGVyKys7CiAjaWZkZWYgV0lUSF9UU0MKICAgICAgICAgICAgIHRpY2tlZCA9IDE7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmcGVuZGluZ2NhbGxzX3RvX2RvKSkgewotICAgICAgICAgICAgICAgIGlmIChQeV9NYWtlUGVuZGluZ0NhbGxzKCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChQeV9NYWtlUGVuZGluZ0NhbGxzKCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgICAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9kcm9wX3JlcXVlc3QpKSB7CkBAIC0xMjcwLDE5ICsxMjY3LDI1IEBACiAgICAgICAgICAgICAgICAgLyogT3RoZXIgdGhyZWFkcyBtYXkgcnVuIG5vdyAqLwogCiAgICAgICAgICAgICAgICAgdGFrZV9naWwodHN0YXRlKTsKKworICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHdlIHNob3VsZCBtYWtlIGEgcXVpY2sgZXhpdC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoX1B5X0ZpbmFsaXppbmcgJiYgX1B5X0ZpbmFsaXppbmcgIT0gdHN0YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGRyb3BfZ2lsKHRzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkX2V4aXRfdGhyZWFkKCk7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgaWYgKFB5VGhyZWFkU3RhdGVfU3dhcCh0c3RhdGUpICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNldmFsOiBvcnBoYW4gdHN0YXRlIik7CiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAgIC8qIENoZWNrIGZvciBhc3luY2hyb25vdXMgZXhjZXB0aW9ucy4gKi8KICAgICAgICAgICAgIGlmICh0c3RhdGUtPmFzeW5jX2V4YyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHRzdGF0ZS0+YXN5bmNfZXhjOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSB0c3RhdGUtPmFzeW5jX2V4YzsKICAgICAgICAgICAgICAgICB0c3RhdGUtPmFzeW5jX2V4YyA9IE5VTEw7CiAgICAgICAgICAgICAgICAgVU5TSUdOQUxfQVNZTkNfRVhDKCk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZSh4KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOworICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoZXhjKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEyOTMsMjQgKzEyOTYsMjQgQEAKIAogICAgICAgICBpZiAoX1B5X1RyYWNpbmdQb3NzaWJsZSAmJgogICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMICYmICF0c3RhdGUtPnRyYWNpbmcpIHsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICAvKiBzZWUgbWF5YmVfY2FsbF9saW5lX3RyYWNlCiAgICAgICAgICAgICAgICBmb3IgZXhwb3NpdG9yeSBjb21tZW50cyAqLwogICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IHN0YWNrX3BvaW50ZXI7CiAKICAgICAgICAgICAgIGVyciA9IG1heWJlX2NhbGxfbGluZV90cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLCAmaW5zdHJfbGIsICZpbnN0cl91YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5zdHJfcHJldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnN0cl9sYiwgJmluc3RyX3ViLCAmaW5zdHJfcHJldik7CiAgICAgICAgICAgICAvKiBSZWxvYWQgcG9zc2libHkgY2hhbmdlZCBmcmFtZSBmaWVsZHMgKi8KICAgICAgICAgICAgIEpVTVBUTyhmLT5mX2xhc3RpKTsKICAgICAgICAgICAgIGlmIChmLT5mX3N0YWNrdG9wICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gZi0+Zl9zdGFja3RvcDsKICAgICAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGlmIChlcnIpCiAgICAgICAgICAgICAgICAgLyogdHJhY2UgZnVuY3Rpb24gcmFpc2VkIGFuIGV4Y2VwdGlvbiAqLwotICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIEV4dHJhY3Qgb3Bjb2RlIGFuZCBhcmd1bWVudCAqLwpAQCAtMTM1Nyw4NyArMTM2MCw5OSBAQAogICAgICAgICBUQVJHRVQoTk9QKQogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogCi0gICAgICAgIFRBUkdFVChMT0FEX0ZBU1QpCi0gICAgICAgICAgICB4ID0gR0VUTE9DQUwob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgVEFSR0VUKExPQURfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gR0VUTE9DQUwob3BhcmcpOworICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19VbmJvdW5kTG9jYWxFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTkJPVU5ETE9DQUxfRVJST1JfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbShjby0+Y29fdmFybmFtZXMsIG9wYXJnKSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX1VuYm91bmRMb2NhbEVycm9yLAotICAgICAgICAgICAgICAgIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0csCi0gICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtKGNvLT5jb192YXJuYW1lcywgb3BhcmcpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX0NPTlNUKQotICAgICAgICAgICAgeCA9IEdFVElURU0oY29uc3RzLCBvcGFyZyk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExPQURfQ09OU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IEdFVElURU0oY29uc3RzLCBvcGFyZyk7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoU1RPUkVfRkFTVCk7Ci0gICAgICAgIFRBUkdFVChTVE9SRV9GQVNUKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIHYpOworICAgICAgICBUQVJHRVQoU1RPUkVfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgdmFsdWUpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9UT1ApCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIFRBUkdFVChQT1BfVE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUk9UX1RXTykKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIFNFVF9UT1Aodyk7Ci0gICAgICAgICAgICBTRVRfU0VDT05EKHYpOworICAgICAgICBUQVJHRVQoUk9UX1RXTykgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgU0VUX1RPUChzZWNvbmQpOworICAgICAgICAgICAgU0VUX1NFQ09ORCh0b3ApOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFJPVF9USFJFRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIHggPSBUSElSRCgpOwotICAgICAgICAgICAgU0VUX1RPUCh3KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQoeCk7Ci0gICAgICAgICAgICBTRVRfVEhJUkQodik7CisgICAgICAgIFRBUkdFVChST1RfVEhSRUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0aGlyZCA9IFRISVJEKCk7CisgICAgICAgICAgICBTRVRfVE9QKHNlY29uZCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHRoaXJkKTsKKyAgICAgICAgICAgIFNFVF9USElSRCh0b3ApOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERVUF9UT1ApCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgICAgICBQVVNIKHYpOworICAgICAgICBUQVJHRVQoRFVQX1RPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHRvcCk7CisgICAgICAgICAgICBQVVNIKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRFVQX1RPUF9UV08pCi0gICAgICAgICAgICB4ID0gVE9QKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICB3ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodyk7CisgICAgICAgIFRBUkdFVChEVVBfVE9QX1RXTykgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHRvcCk7CisgICAgICAgICAgICBQeV9JTkNSRUYoc2Vjb25kKTsKICAgICAgICAgICAgIFNUQUNLQURKKDIpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQodyk7CisgICAgICAgICAgICBTRVRfVE9QKHRvcCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHNlY29uZCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfUE9TSVRJVkUpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUG9zaXRpdmUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfUE9TSVRJVkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1Bvc2l0aXZlKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfTkVHQVRJVkUpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTmVnYXRpdmUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfTkVHQVRJVkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX05lZ2F0aXZlKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfTk9UKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICBUQVJHRVQoVU5BUllfTk9UKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnIgPSBQeU9iamVjdF9Jc1RydWUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKICAgICAgICAgICAgICAgICBTRVRfVE9QKFB5X1RydWUpOwpAQCAtMTQ1MCw0MTYgKzE0NjUsNDY0IEBACiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9JTlZFUlQpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW52ZXJ0KHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKFVOQVJZX0lOVkVSVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW52ZXJ0KHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1BPV0VSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1Bvd2VyKHYsIHcsIFB5X05vbmUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9QT1dFUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4cCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Qb3dlcihiYXNlLCBleHAsIFB5X05vbmUpOworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgUHlfREVDUkVGKGV4cCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX01VTFRJUExZKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX011bHRpcGx5KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9NVUxUSVBMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX011bHRpcGx5KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1RSVUVfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1RydWVEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX1RSVUVfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9UcnVlRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9GTE9PUl9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfRmxvb3JEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX0ZMT09SX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfRmxvb3JEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX01PRFVMTykKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSkKLSAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX0Zvcm1hdCh2LCB3KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfUmVtYWluZGVyKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9NT0RVTE8pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeVVuaWNvZGVfQ2hlY2tFeGFjdChkaXZpZGVuZCkgPworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gb3JtYXQoZGl2aWRlbmQsIGRpdmlzb3IpIDoKKyAgICAgICAgICAgICAgICBQeU51bWJlcl9SZW1haW5kZXIoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh3KSkgewotICAgICAgICAgICAgICAgIHggPSB1bmljb2RlX2NvbmNhdGVuYXRlKHYsIHcsIGYsIG5leHRfaW5zdHIpOworICAgICAgICBUQVJHRVQoQklOQVJZX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnN1bTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChsZWZ0KSAmJgorICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc3VtID0gdW5pY29kZV9jb25jYXRlbmF0ZShsZWZ0LCByaWdodCwgZiwgbmV4dF9pbnN0cik7CiAgICAgICAgICAgICAgICAgLyogdW5pY29kZV9jb25jYXRlbmF0ZSBjb25zdW1lZCB0aGUgcmVmIHRvIHYgKi8KLSAgICAgICAgICAgICAgICBnb3RvIHNraXBfZGVjcmVmX3Z4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0FkZCh2LCB3KTsKKyAgICAgICAgICAgICAgICBzdW0gPSBQeU51bWJlcl9BZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHN1bSk7CisgICAgICAgICAgICBpZiAoc3VtID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlRSQUNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGlmZiA9IFB5TnVtYmVyX1N1YnRyYWN0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBTRVRfVE9QKGRpZmYpOworICAgICAgICAgICAgaWYgKGRpZmYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfU1VCU0NSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3ViID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfR2V0SXRlbShjb250YWluZXIsIHN1Yik7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9MU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Mc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfUlNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfUnNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX0FORCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0FuZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9YT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Yb3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9PcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExJU1RfQVBQRU5EKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QgPSBQRUVLKG9wYXJnKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgIHNraXBfZGVjcmVmX3Z4OgotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlRSQUNUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1N1YnRyYWN0KHYsIHcpOworICAgICAgICBUQVJHRVQoU0VUX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXQgPSBzdGFja19wb2ludGVyWy1vcGFyZ107CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHNldCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfU1VCU0NSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9QT1dFUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4cCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlUG93ZXIoYmFzZSwgZXhwLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihleHApOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9MU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTHNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTVVMVElQTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfUlNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1JzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1RSVUVfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfQU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0FuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0ZMT09SX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9YT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfWG9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTU9EVUxPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbW9kID0gUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChtb2QpOworICAgICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9PUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Pcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExJU1RfQVBQRU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFBFRUsob3BhcmcpOwotICAgICAgICAgICAgZXJyID0gUHlMaXN0X0FwcGVuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChTRVRfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsKLSAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1BPV0VSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VQb3dlcih2LCB3LCBQeV9Ob25lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfTVVMVElQTFkpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9UUlVFX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfRkxPT1JfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfTU9EVUxPKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0FERCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QodykpIHsKLSAgICAgICAgICAgICAgICB4ID0gdW5pY29kZV9jb25jYXRlbmF0ZSh2LCB3LCBmLCBuZXh0X2luc3RyKTsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc3VtOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGxlZnQpICYmIFB5VW5pY29kZV9DaGVja0V4YWN0KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHN1bSA9IHVuaWNvZGVfY29uY2F0ZW5hdGUobGVmdCwgcmlnaHQsIGYsIG5leHRfaW5zdHIpOwogICAgICAgICAgICAgICAgIC8qIHVuaWNvZGVfY29uY2F0ZW5hdGUgY29uc3VtZWQgdGhlIHJlZiB0byB2ICovCi0gICAgICAgICAgICAgICAgZ290byBza2lwX2RlY3JlZl92OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VBZGQodiwgdyk7CisgICAgICAgICAgICAgICAgc3VtID0gUHlOdW1iZXJfSW5QbGFjZUFkZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgIHNraXBfZGVjcmVmX3Y6Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc3VtKTsKKyAgICAgICAgICAgIGlmIChzdW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1NVQlRSQUNUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1NVQlRSQUNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGlmZiA9IFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChkaWZmKTsKKyAgICAgICAgICAgIGlmIChkaWZmID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9MU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUxzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0xTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VMc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1JTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlUnNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfUlNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZVJzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfQU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VBbmQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9BTkQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlQW5kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9YT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVhvcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1hPUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VYb3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX09SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VPcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX09SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZU9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfU1VCU0NSKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgdiA9IFNFQ09ORCgpOwotICAgICAgICAgICAgdSA9IFRISVJEKCk7CisgICAgICAgIFRBUkdFVChTVE9SRV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gVEhJUkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMyk7CiAgICAgICAgICAgICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbSh2LCB3LCB1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0oY29udGFpbmVyLCBzdWIsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICB2ID0gU0VDT05EKCk7CisgICAgICAgIFRBUkdFVChERUxFVEVfU1VCU0NSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3ViID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyID0gU0VDT05EKCk7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgU1RBQ0tBREooLTIpOwogICAgICAgICAgICAgLyogZGVsIHZbd10gKi8KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0oY29udGFpbmVyLCBzdWIpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbnRhaW5lcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQUklOVF9FWFBSKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdyA9IFB5U3lzX0dldE9iamVjdCgiZGlzcGxheWhvb2siKTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKKyAgICAgICAgVEFSR0VUKFBSSU5UX0VYUFIpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKGRpc3BsYXlob29rKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmhvb2sgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfZGlzcGxheWhvb2spOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgICAgIGlmIChob29rID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9zdCBzeXMuZGlzcGxheWhvb2siKTsKLSAgICAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlUdXBsZV9QYWNrKDEsIHYpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFB5RXZhbF9DYWxsT2JqZWN0KHcsIHgpOwotICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodyk7Ci0gICAgICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhvb2ssIHZhbHVlLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAjaWZkZWYgQ0FTRV9UT09fQklHCiAgICAgICAgIGRlZmF1bHQ6IHN3aXRjaCAob3Bjb2RlKSB7CiAjZW5kaWYKLSAgICAgICAgVEFSR0VUKFJBSVNFX1ZBUkFSR1MpCi0gICAgICAgICAgICB2ID0gdyA9IE5VTEw7CisgICAgICAgIFRBUkdFVChSQUlTRV9WQVJBUkdTKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2F1c2UgPSBOVUxMLCAqZXhjID0gTlVMTDsKICAgICAgICAgICAgIHN3aXRjaCAob3BhcmcpIHsKICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICB2ID0gUE9QKCk7IC8qIGNhdXNlICovCisgICAgICAgICAgICAgICAgY2F1c2UgPSBQT1AoKTsgLyogY2F1c2UgKi8KICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7IC8qIGV4YyAqLworICAgICAgICAgICAgICAgIGV4YyA9IFBPUCgpOyAvKiBleGMgKi8KICAgICAgICAgICAgIGNhc2UgMDogLyogRmFsbHRocm91Z2ggKi8KLSAgICAgICAgICAgICAgICB3aHkgPSBkb19yYWlzZSh3LCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoZG9fcmFpc2UoZXhjLCBjYXVzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgUkFJU0VfVkFSQVJHUyBvcGFyZyIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfTE9DQUxTKQotICAgICAgICAgICAgeCA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IGYtPmZfbG9jYWxzOwotICAgICAgICAgICAgUHlfWERFQ1JFRih2KTsKLSAgICAgICAgICAgIGYtPmZfbG9jYWxzID0geDsKLSAgICAgICAgICAgIERJU1BBVENIKCk7Ci0KLSAgICAgICAgVEFSR0VUKFJFVFVSTl9WQUxVRSkKKyAgICAgICAgVEFSR0VUKFJFVFVSTl9WQUxVRSkgewogICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CiAgICAgICAgICAgICB3aHkgPSBXSFlfUkVUVVJOOwogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChZSUVMRF9GUk9NKQotICAgICAgICAgICAgdSA9IFBPUCgpOwotICAgICAgICAgICAgeCA9IFRPUCgpOwotICAgICAgICAgICAgLyogc2VuZCB1IHRvIHggKi8KLSAgICAgICAgICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KHgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5R2VuX1NlbmQoKFB5R2VuT2JqZWN0ICopeCwgdSk7CisgICAgICAgIFRBUkdFVChZSUVMRF9GUk9NKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlY2lldmVyID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKFB5R2VuX0NoZWNrRXhhY3QocmVjaWV2ZXIpKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5R2VuX1NlbmQoKFB5R2VuT2JqZWN0ICopcmVjaWV2ZXIsIHYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihzZW5kKTsKLSAgICAgICAgICAgICAgICBpZiAodSA9PSBQeV9Ob25lKQotICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBQeV9UWVBFKHgpLT50cF9pdGVybmV4dCh4KTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBQeV9Ob25lKQorICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBQeV9UWVBFKHJlY2lldmVyKS0+dHBfaXRlcm5leHQocmVjaWV2ZXIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh4LCAmUHlJZF9zZW5kLCAiTyIsIHUpOworICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhyZWNpZXZlciwgJlB5SWRfc2VuZCwgdiwgTlVMTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbDsKLSAgICAgICAgICAgICAgICB4ID0gUE9QKCk7IC8qIFJlbW92ZSBpdGVyIGZyb20gc3RhY2sgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywgdHN0YXRlLT5jX3RyYWNlb2JqLCB0c3RhdGUsIGYpOwogICAgICAgICAgICAgICAgIGVyciA9IF9QeUdlbl9GZXRjaFN0b3BJdGVyYXRpb25WYWx1ZSgmdmFsKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHggPSB2YWw7Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVjaWV2ZXIpOworICAgICAgICAgICAgICAgIFNFVF9UT1AodmFsKTsKKyAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogeCByZW1haW5zIG9uIHN0YWNrLCByZXR2YWwgaXMgdmFsdWUgdG8gYmUgeWllbGRlZCAqLwogICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IHN0YWNrX3BvaW50ZXI7CkBAIC0xODY3LDM5ICsxOTMwLDM4IEBACiAgICAgICAgICAgICAvKiBhbmQgcmVwZWF0Li4uICovCiAgICAgICAgICAgICBmLT5mX2xhc3RpLS07CiAgICAgICAgICAgICBnb3RvIGZhc3RfeWllbGQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoWUlFTERfVkFMVUUpCisgICAgICAgIFRBUkdFVChZSUVMRF9WQUxVRSkgewogICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKICAgICAgICAgICAgIHdoeSA9IFdIWV9ZSUVMRDsKICAgICAgICAgICAgIGdvdG8gZmFzdF95aWVsZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQT1BfRVhDRVBUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOwotICAgICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgIT0gRVhDRVBUX0hBTkRMRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInBvcHBlZCBibG9jayBpcyBub3QgYW4gZXhjZXB0IGhhbmRsZXIiKTsKLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKKyAgICAgICAgVEFSR0VUKFBPUF9FWENFUFQpIHsKKyAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOworICAgICAgICAgICAgaWYgKGItPmJfdHlwZSAhPSBFWENFUFRfSEFORExFUikgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHBlZCBibG9jayBpcyBub3QgYW4gZXhjZXB0IGhhbmRsZXIiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgVU5XSU5EX0VYQ0VQVF9IQU5ETEVSKGIpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQT1BfQkxPQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7Ci0gICAgICAgICAgICAgICAgVU5XSU5EX0JMT0NLKGIpOwotICAgICAgICAgICAgfQorICAgICAgICBUQVJHRVQoUE9QX0JMT0NLKSB7CisgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKKyAgICAgICAgICAgIFVOV0lORF9CTE9DSyhiKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURUQoRU5EX0ZJTkFMTFkpOwotICAgICAgICBUQVJHRVQoRU5EX0ZJTkFMTFkpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgd2h5ID0gKGVudW0gd2h5X2NvZGUpIFB5TG9uZ19BU19MT05HKHYpOwotICAgICAgICAgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEKTsKKyAgICAgICAgVEFSR0VUKEVORF9GSU5BTExZKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhdHVzID0gUE9QKCk7CisgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICB3aHkgPSAoZW51bSB3aHlfY29kZSkgUHlMb25nX0FTX0xPTkcoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQod2h5ICE9IFdIWV9ZSUVMRCAmJiB3aHkgIT0gV0hZX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgaWYgKHdoeSA9PSBXSFlfUkVUVVJOIHx8CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9PSBXSFlfQ09OVElOVUUpCiAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IFBPUCgpOwpAQCAtMTkxMiwyNDggKzE5NzQsMjgwIEBACiAgICAgICAgICAgICAgICAgICAgIGFzc2VydChiLT5iX3R5cGUgPT0gRVhDRVBUX0hBTkRMRVIpOwogICAgICAgICAgICAgICAgICAgICBVTldJTkRfRVhDRVBUX0hBTkRMRVIoYik7CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9OT1Q7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICB1ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZSh2LCB3LCB1KTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfUkVSQUlTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGIgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlKHN0YXR1cywgZXhjLCB0Yik7CisgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodiAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgIidmaW5hbGx5JyBwb3BzIGJhZCBleGNlcHRpb24iKTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0JVSUxEX0NMQVNTKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChMT0FEX0JVSUxEX0NMQVNTKSB7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2J1aWxkX2NsYXNzX18pOwogCisgICAgICAgICAgICBQeU9iamVjdCAqYmM7CiAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9idWlsdGlucykpIHsKLSAgICAgICAgICAgICAgICB4ID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19idWlsZF9jbGFzc19fKTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYmMgPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2J1aWxkX2NsYXNzX18pOworICAgICAgICAgICAgICAgIGlmIChiYyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19OYW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9jbGFzc19fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihiYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYnVpbGRfY2xhc3Nfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19idWlsZF9jbGFzc19fKTsKICAgICAgICAgICAgICAgICBpZiAoYnVpbGRfY2xhc3Nfc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIGJ1aWxkX2NsYXNzX3N0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJjID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBidWlsZF9jbGFzc19zdHIpOworICAgICAgICAgICAgICAgIGlmIChiYyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19OYW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfY2xhc3NfXyBub3QgZm91bmQiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChiYyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX05BTUUpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKCh4ID0gZi0+Zl9sb2NhbHMpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoeCkpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHgsIHcsIHYpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbSh4LCB3LCB2KTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX05BTUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpucyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIHdoZW4gc3RvcmluZyAlUiIsIG5hbWUpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIHdoZW4gc3RvcmluZyAlUiIsIHcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobnMpKQorICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG5zLCBuYW1lLCB2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKG5zLCBuYW1lLCB2KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfTkFNRSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmICgoZXJyID0gUHlPYmplY3RfRGVsSXRlbSh4LCB3KSkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChERUxFVEVfTkFNRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqbnMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGRlbGV0aW5nICVSIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gZGVsZXRpbmcgJVIiLCB3KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbShucywgbmFtZSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoVU5QQUNLX1NFUVVFTkNFKTsKLSAgICAgICAgVEFSR0VUKFVOUEFDS19TRVFVRU5DRSkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHYpID09IG9wYXJnKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKippdGVtcyA9IFwKLSAgICAgICAgICAgICAgICAgICAgKChQeVR1cGxlT2JqZWN0ICopdiktPm9iX2l0ZW07CisgICAgICAgIFRBUkdFVChVTlBBQ0tfU0VRVUVOQ0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXEgPSBQT1AoKSwgKml0ZW0sICoqaXRlbXM7CisgICAgICAgICAgICBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KHNlcSkgJiYKKyAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHNlcSkgPT0gb3BhcmcpIHsKKyAgICAgICAgICAgICAgICBpdGVtcyA9ICgoUHlUdXBsZU9iamVjdCAqKXNlcSktPm9iX2l0ZW07CiAgICAgICAgICAgICAgICAgd2hpbGUgKG9wYXJnLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IGl0ZW1zW29wYXJnXTsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQVVNIKHcpOworICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbb3BhcmddOworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIFBVU0goaXRlbSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChQeUxpc3RfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUodikgPT0gb3BhcmcpIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqKml0ZW1zID0gXAotICAgICAgICAgICAgICAgICAgICAoKFB5TGlzdE9iamVjdCAqKXYpLT5vYl9pdGVtOworICAgICAgICAgICAgfSBlbHNlIGlmIChQeUxpc3RfQ2hlY2tFeGFjdChzZXEpICYmCisgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShzZXEpID09IG9wYXJnKSB7CisgICAgICAgICAgICAgICAgaXRlbXMgPSAoKFB5TGlzdE9iamVjdCAqKXNlcSktPm9iX2l0ZW07CiAgICAgICAgICAgICAgICAgd2hpbGUgKG9wYXJnLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IGl0ZW1zW29wYXJnXTsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQVVNIKHcpOworICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbb3BhcmddOworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIFBVU0goaXRlbSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh1bnBhY2tfaXRlcmFibGUodiwgb3BhcmcsIC0xLAorICAgICAgICAgICAgfSBlbHNlIGlmICh1bnBhY2tfaXRlcmFibGUoc2VxLCBvcGFyZywgLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICsgb3BhcmcpKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREoob3BhcmcpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiB1bnBhY2tfaXRlcmFibGUoKSByYWlzZWQgYW4gZXhjZXB0aW9uICovCi0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5QQUNLX0VYKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChVTlBBQ0tfRVgpIHsKICAgICAgICAgICAgIGludCB0b3RhbGFyZ3MgPSAxICsgKG9wYXJnICYgMHhGRikgKyAob3BhcmcgPj4gOCk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2VxID0gUE9QKCk7CiAKLSAgICAgICAgICAgIGlmICh1bnBhY2tfaXRlcmFibGUodiwgb3BhcmcgJiAweEZGLCBvcGFyZyA+PiA4LAorICAgICAgICAgICAgaWYgKHVucGFja19pdGVyYWJsZShzZXEsIG9wYXJnICYgMHhGRiwgb3BhcmcgPj4gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArIHRvdGFsYXJncykpIHsKICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICs9IHRvdGFsYXJnczsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB1ID0gU0VDT05EKCk7CisgICAgICAgIFRBUkdFVChTVE9SRV9BVFRSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvd25lciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKHYsIHcsIHUpOyAvKiB2LncgPSB1ICovCisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKG93bmVyLCBuYW1lLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKG93bmVyKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKHYsIHcsIChQeU9iamVjdCAqKU5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWwgdi53ICovCisgICAgICAgIFRBUkdFVChERUxFVEVfQVRUUikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3duZXIgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKG93bmVyLCBuYW1lLCAoUHlPYmplY3QgKilOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvd25lcik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoU1RPUkVfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShmLT5mX2dsb2JhbHMsIHcsIHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKERFTEVURV9HTE9CQUwpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgaWYgKChlcnIgPSBQeURpY3RfRGVsSXRlbShmLT5mX2dsb2JhbHMsIHcpKSAhPSAwKQorICAgICAgICBUQVJHRVQoREVMRVRFX0dMT0JBTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X0RlbEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgewogICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAotICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsIEdMT0JBTF9OQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTE9BRF9OQU1FKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIGlmICgodiA9IGYtPmZfbG9jYWxzKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gbG9hZGluZyAlUiIsIHcpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICAgICAgUHlfWElOQ1JFRih4KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTE9BRF9OQU1FKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsb2NhbHMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2OworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gbG9hZGluZyAlUiIsIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobG9jYWxzKSkgeworICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYodik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMICYmIF9QeUVycl9PQ0NVUlJFRCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX0tleUVycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCAmJiBfUHlFcnJfT0NDVVJSRUQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5RGljdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICAgICAgUHlfWElOQ1JFRih4KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5RGljdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHYpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgIFRBUkdFVChMT0FEX0dMT0JBTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2dsb2JhbHMpCiAgICAgICAgICAgICAgICAgJiYgUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9idWlsdGlucykpIHsKLSAgICAgICAgICAgICAgICB4ID0gX1B5RGljdF9Mb2FkR2xvYmFsKChQeURpY3RPYmplY3QgKilmLT5mX2dsb2JhbHMsCisgICAgICAgICAgICAgICAgdiA9IF9QeURpY3RfTG9hZEdsb2JhbCgoUHlEaWN0T2JqZWN0ICopZi0+Zl9nbG9iYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5RGljdE9iamVjdCAqKWYtPmZfYnVpbHRpbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghX1B5RXJyX09DQ1VSUkVEKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTE9CQUxfTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8qIFNsb3ctcGF0aCBpZiBnbG9iYWxzIG9yIGJ1aWx0aW5zIGlzIG5vdCBhIGRpY3QgKi8KLSAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgdyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xPQkFMX05BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUFVTSCh2KTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX0ZBU1QpCi0gICAgICAgICAgICB4ID0gR0VUTE9DQUwob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoREVMRVRFX0ZBU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gR0VUTE9DQUwob3BhcmcpOworICAgICAgICAgICAgaWYgKHYgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFNFVExPQ0FMKG9wYXJnLCBOVUxMKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQpAQCAtMjE2MiwyNTIgKzIyNTYsMzEyIEBACiAgICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKICAgICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0oY28tPmNvX3Zhcm5hbWVzLCBvcGFyZykKICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9ERVJFRikKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICBpZiAoUHlDZWxsX0dFVCh4KSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlDZWxsX1NldCh4LCBOVUxMKTsKKyAgICAgICAgVEFSR0VUKERFTEVURV9ERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBpZiAoUHlDZWxsX0dFVChjZWxsKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlDZWxsX1NldChjZWxsLCBOVUxMKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gLTE7CiAgICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0NMT1NVUkUpCi0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTE9BRF9ERVJFRikKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICB3ID0gUHlDZWxsX0dldCh4KTsKLSAgICAgICAgICAgIGlmICh3ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQVVNIKHcpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNUT1JFX0RFUkVGKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIFB5Q2VsbF9TZXQoeCwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgIFRBUkdFVChMT0FEX0NMT1NVUkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgUHlfSU5DUkVGKGNlbGwpOworICAgICAgICAgICAgUFVTSChjZWxsKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlVJTERfVFVQTEUpCi0gICAgICAgICAgICB4ID0gUHlUdXBsZV9OZXcob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh4LCBvcGFyZywgdyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgVEFSR0VUKExPQURfQ0xBU1NERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZSwgKmxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgUHlfc3NpemVfdCBpZHg7CisgICAgICAgICAgICBhc3NlcnQobG9jYWxzKTsKKyAgICAgICAgICAgIGFzc2VydChvcGFyZyA+PSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycykpOworICAgICAgICAgICAgaWR4ID0gb3BhcmcgLSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycyk7CisgICAgICAgICAgICBhc3NlcnQoaWR4ID49IDAgJiYgaWR4IDwgUHlUdXBsZV9HRVRfU0laRShjby0+Y29fZnJlZXZhcnMpKTsKKyAgICAgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGNvLT5jb19mcmVldmFycywgaWR4KTsKKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChsb2NhbHMpKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYodmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKEJVSUxEX0xJU1QpCi0gICAgICAgICAgICB4ID0gIFB5TGlzdF9OZXcob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHgsIG9wYXJnLCB3KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChCVUlMRF9TRVQpCi0gICAgICAgICAgICB4ID0gUHlTZXRfTmV3KE5VTEwpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHgsIHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeUNlbGxfR0VUKGNlbGwpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9NQVApCi0gICAgICAgICAgICB4ID0gX1B5RGljdF9OZXdQcmVzaXplZCgoUHlfc3NpemVfdClvcGFyZyk7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChTVE9SRV9NQVApCi0gICAgICAgICAgICB3ID0gVE9QKCk7ICAgICAvKiBrZXkgKi8KLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsgIC8qIHZhbHVlICovCi0gICAgICAgICAgICB2ID0gVEhJUkQoKTsgICAvKiBkaWN0ICovCi0gICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICBhc3NlcnQgKFB5RGljdF9DaGVja0V4YWN0KHYpKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHYsIHcsIHUpOyAgLyogdlt3XSA9IHUgKi8KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChNQVBfQUREKQotICAgICAgICAgICAgdyA9IFRPUCgpOyAgICAgLyoga2V5ICovCi0gICAgICAgICAgICB1ID0gU0VDT05EKCk7ICAvKiB2YWx1ZSAqLwotICAgICAgICAgICAgU1RBQ0tBREooLTIpOwotICAgICAgICAgICAgdiA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsgIC8qIGRpY3QgKi8KLSAgICAgICAgICAgIGFzc2VydCAoUHlEaWN0X0NoZWNrRXhhY3QodikpOwotICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0odiwgdywgdSk7ICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9ERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQeUNlbGxfR0VUKGNlbGwpOworICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0QXR0cih2LCB3KTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeUNlbGxfU2V0KGNlbGwsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ09NUEFSRV9PUCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBjbXBfb3V0Y29tZShvcGFyZywgdiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgYnJlYWs7CisgICAgICAgIFRBUkdFVChCVUlMRF9UVVBMRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnR1cCA9IFB5VHVwbGVfTmV3KG9wYXJnKTsKKyAgICAgICAgICAgIGlmICh0dXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKC0tb3BhcmcgPj0gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIG9wYXJnLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0godHVwKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfTElTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QgPSAgUHlMaXN0X05ldyhvcGFyZyk7CisgICAgICAgICAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoLS1vcGFyZyA+PSAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgb3BhcmcsIGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSChsaXN0KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfU0VUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc2V0ID0gUHlTZXRfTmV3KE5VTEwpOworICAgICAgICAgICAgaW50IGVyciA9IDA7CisgICAgICAgICAgICBpZiAoc2V0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgtLW9wYXJnID49IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFBPUCgpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHNldCwgaXRlbSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNldCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0goc2V0KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfTUFQKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbWFwID0gX1B5RGljdF9OZXdQcmVzaXplZCgoUHlfc3NpemVfdClvcGFyZyk7CisgICAgICAgICAgICBpZiAobWFwID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBVU0gobWFwKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoU1RPUkVfTUFQKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXAgPSBUSElSRCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChtYXApKTsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG1hcCwga2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTUFQX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbWFwOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKKyAgICAgICAgICAgIG1hcCA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsgIC8qIGRpY3QgKi8KKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChtYXApKTsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG1hcCwga2V5LCB2YWx1ZSk7ICAvKiB2W3ddID0gdSAqLworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMT0FEX0FUVFIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm93bmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfR2V0QXR0cihvd25lciwgbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3duZXIpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKENPTVBBUkVfT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBjbXBfb3V0Y29tZShvcGFyZywgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgUFJFRElDVChQT1BfSlVNUF9JRl9GQUxTRSk7CiAgICAgICAgICAgICBQUkVESUNUKFBPUF9KVU1QX0lGX1RSVUUpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKLQotICAgICAgICBUQVJHRVQoSU1QT1JUX05BTUUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9faW1wb3J0X18pOwotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHggPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2ltcG9ydF9fKTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2ltcG9ydF9fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19Bc0xvbmcodSkgIT0gLTEgfHwgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICB3ID0gUHlUdXBsZV9QYWNrKDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdyA9IFB5VHVwbGVfUGFjayg0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB1ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgdiA9IHg7Ci0gICAgICAgICAgICB4ID0gUHlFdmFsX0NhbGxPYmplY3Qodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElNUE9SVF9TVEFSKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoZik7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgPT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoSU1QT1JUX05BTUUpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9faW1wb3J0X18pOworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19faW1wb3J0X18pOworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20sICpsZXZlbCwgKmFyZ3MsICpyZXM7CisgICAgICAgICAgICBpZiAoZnVuYyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19pbXBvcnRfXyBub3QgZm91bmQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOworICAgICAgICAgICAgZnJvbSA9IFBPUCgpOworICAgICAgICAgICAgbGV2ZWwgPSBUT1AoKTsKKyAgICAgICAgICAgIGlmIChQeUxvbmdfQXNMb25nKGxldmVsKSAhPSAtMSB8fCBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfUGFjayg0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZXZlbCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJvbSk7CisgICAgICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOworICAgICAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgYXJncyk7CisgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoSU1QT1JUX1NUQVIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmcm9tID0gUE9QKCksICpsb2NhbHM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGYpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBsb2NhbHMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyBmb3VuZCBkdXJpbmcgJ2ltcG9ydCAqJyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICBlcnIgPSBpbXBvcnRfYWxsX2Zyb20oeCwgdik7CisgICAgICAgICAgICBlcnIgPSBpbXBvcnRfYWxsX2Zyb20obG9jYWxzLCBmcm9tKTsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKICAgICAgICAgICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0KGYsIDApOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJvbSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU1QT1JUX0ZST00pCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFRPUCgpOworICAgICAgICBUQVJHRVQoSU1QT1JUX0ZST00pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20gPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB4ID0gaW1wb3J0X2Zyb20odiwgdyk7CisgICAgICAgICAgICByZXMgPSBpbXBvcnRfZnJvbShmcm9tLCBuYW1lKTsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSlVNUF9GT1JXQVJEKQorICAgICAgICBUQVJHRVQoSlVNUF9GT1JXQVJEKSB7CiAgICAgICAgICAgICBKVU1QQlkob3BhcmcpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFBPUF9KVU1QX0lGX0ZBTFNFKTsKLSAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX0ZBTFNFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX0ZBTFNFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKQogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFBPUF9KVU1QX0lGX1RSVUUpOwotICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfVFJVRSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfVFJVRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwpAQCAtMjQxNSw1OCArMjU2OSw2MyBAQAogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCiAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEpVTVBfSUZfRkFMU0VfT1JfUE9QKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgeworICAgICAgICBUQVJHRVQoSlVNUF9JRl9GQUxTRV9PUl9QT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgewogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChKVU1QX0lGX1RSVUVfT1JfUE9QKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgVEFSR0VUKEpVTVBfSUZfVFJVRV9PUl9QT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgIFRBUkdFVChKVU1QX0FCU09MVVRFKQorICAgICAgICBUQVJHRVQoSlVNUF9BQlNPTFVURSkgewogICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICNpZiBGQVNUX0xPT1BTCiAgICAgICAgICAgICAvKiBFbmFibGluZyB0aGlzIHBhdGggc3BlZWRzLXVwIGFsbCB3aGlsZSBhbmQgZm9yLWxvb3BzIGJ5IGJ5cGFzc2luZwpAQCAtMjQ4MCw2MCArMjYzOSw2MiBAQAogI2Vsc2UKICAgICAgICAgICAgIERJU1BBVENIKCk7CiAjZW5kaWYKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChHRVRfSVRFUikKKyAgICAgICAgVEFSR0VUKEdFVF9JVEVSKSB7CiAgICAgICAgICAgICAvKiBiZWZvcmU6IFtvYmpdOyBhZnRlciBbZ2V0aXRlcihvYmopXSAqLwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZXIodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEZPUl9JVEVSKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlcmFibGUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcmFibGUpOworICAgICAgICAgICAgU0VUX1RPUChpdGVyKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoRk9SX0lURVIpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhGT1JfSVRFUik7Ci0gICAgICAgIFRBUkdFVChGT1JfSVRFUikKKyAgICAgICAgVEFSR0VUKEZPUl9JVEVSKSB7CiAgICAgICAgICAgICAvKiBiZWZvcmU6IFtpdGVyXTsgYWZ0ZXI6IFtpdGVyLCBpdGVyKCldICpvciogW10gKi8KLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSAoKnYtPm9iX3R5cGUtPnRwX2l0ZXJuZXh0KSh2KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuZXh0ID0gKCppdGVyLT5vYl90eXBlLT50cF9pdGVybmV4dCkoaXRlcik7CisgICAgICAgICAgICBpZiAobmV4dCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUFVTSChuZXh0KTsKICAgICAgICAgICAgICAgICBQUkVESUNUKFNUT1JFX0ZBU1QpOwogICAgICAgICAgICAgICAgIFBSRURJQ1QoVU5QQUNLX1NFUVVFTkNFKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1N0b3BJdGVyYXRpb24pKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosIHRzdGF0ZSwgZik7CiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIGl0ZXJhdG9yIGVuZGVkIG5vcm1hbGx5ICovCi0gICAgICAgICAgICB4ID0gdiA9IFBPUCgpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOwogICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlJFQUtfTE9PUCkKKyAgICAgICAgVEFSR0VUKEJSRUFLX0xPT1ApIHsKICAgICAgICAgICAgIHdoeSA9IFdIWV9CUkVBSzsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ09OVElOVUVfTE9PUCkKKyAgICAgICAgVEFSR0VUKENPTlRJTlVFX0xPT1ApIHsKICAgICAgICAgICAgIHJldHZhbCA9IFB5TG9uZ19Gcm9tTG9uZyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbCkgewotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB3aHkgPSBXSFlfQ09OVElOVUU7CiAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICB9CiAKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChTRVRVUF9MT09QLCBfc2V0dXBfZmluYWxseSkKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChTRVRVUF9FWENFUFQsIF9zZXR1cF9maW5hbGx5KQogICAgICAgICBUQVJHRVQoU0VUVVBfRklOQUxMWSkKLSAgICAgICAgX3NldHVwX2ZpbmFsbHk6CisgICAgICAgIF9zZXR1cF9maW5hbGx5OiB7CiAgICAgICAgICAgICAvKiBOT1RFOiBJZiB5b3UgYWRkIGFueSBuZXcgYmxvY2stc2V0dXAgb3Bjb2RlcyB0aGF0CiAgICAgICAgICAgICAgICBhcmUgbm90IHRyeS9leGNlcHQvZmluYWxseSBoYW5kbGVycywgeW91IG1heSBuZWVkCiAgICAgICAgICAgICAgICB0byB1cGRhdGUgdGhlIFB5R2VuX05lZWRzRmluYWxpemluZygpIGZ1bmN0aW9uLgpAQCAtMjU0MiwzNyArMjcwMywzNSBAQAogICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIG9wY29kZSwgSU5TVFJfT0ZGU0VUKCkgKyBvcGFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFDS19MRVZFTCgpKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU0VUVVBfV0lUSCkKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoU0VUVVBfV0lUSCkgewogICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19leGl0X18pOwogICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19lbnRlcl9fKTsKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBzcGVjaWFsX2xvb2t1cCh3LCAmUHlJZF9fX2V4aXRfXyk7Ci0gICAgICAgICAgICBpZiAoIXgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgdSA9IHNwZWNpYWxfbG9va3VwKHcsICZQeUlkX19fZW50ZXJfXyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoIXUpIHsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHUsIE5VTEwpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKCF4KQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlPYmplY3QgKm1nciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmV4aXQgPSBzcGVjaWFsX2xvb2t1cChtZ3IsICZQeUlkX19fZXhpdF9fKSwgKmVudGVyOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgICAgIGlmIChleGl0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFNFVF9UT1AoZXhpdCk7CisgICAgICAgICAgICBlbnRlciA9IHNwZWNpYWxfbG9va3VwKG1nciwgJlB5SWRfX19lbnRlcl9fKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtZ3IpOworICAgICAgICAgICAgaWYgKGVudGVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZW50ZXIsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKGVudGVyKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgLyogU2V0dXAgdGhlIGZpbmFsbHkgYmxvY2sgYmVmb3JlIHB1c2hpbmcgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgb2YgX19lbnRlcl9fIG9uIHRoZSBzdGFjay4gKi8KICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBTRVRVUF9GSU5BTExZLCBJTlNUUl9PRkZTRVQoKSArIG9wYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX0xFVkVMKCkpOwogCi0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUFVTSChyZXMpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChXSVRIX0NMRUFOVVApCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKFdJVEhfQ0xFQU5VUCkgewogICAgICAgICAgICAgLyogQXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgYXJlIDEtNiB2YWx1ZXMgaW5kaWNhdGluZwogICAgICAgICAgICAgICAgaG93L3doeSB3ZSBlbnRlcmVkIHRoZSBmaW5hbGx5IGNsYXVzZToKICAgICAgICAgICAgICAgIC0gVE9QID0gTm9uZQpAQCAtMjU5OSw0MiArMjc1OCw0MiBAQAogICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgUHlPYmplY3QgKmV4aXRfZnVuYzsKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmICh1ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBUT1AoKSwgKnZhbCA9IFB5X05vbmUsICp0YiA9IFB5X05vbmUsICpyZXM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGV4YyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgKHZvaWQpUE9QKCk7CiAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gVE9QKCk7Ci0gICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKLSAgICAgICAgICAgICAgICB2ID0gdyA9IFB5X05vbmU7CisgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHUpKSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpUE9QKCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKFB5TG9uZ19Bc0xvbmcodSkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhleGMpKSB7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoUHlMb25nX0FzTG9uZyhleGMpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBXSFlfUkVUVVJOOgogICAgICAgICAgICAgICAgIGNhc2UgV0hZX0NPTlRJTlVFOgogICAgICAgICAgICAgICAgICAgICAvKiBSZXR2YWwgaW4gVE9QLiAqLwogICAgICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBTRUNPTkQoKTsKICAgICAgICAgICAgICAgICAgICAgU0VUX1NFQ09ORChUT1AoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFNFVF9UT1AodSk7CisgICAgICAgICAgICAgICAgICAgIFNFVF9UT1AoZXhjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gVE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFNFVF9UT1AodSk7CisgICAgICAgICAgICAgICAgICAgIFNFVF9UT1AoZXhjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHUgPSB2ID0gdyA9IFB5X05vbmU7CisgICAgICAgICAgICAgICAgZXhjID0gUHlfTm9uZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0cCwgKmV4YywgKnRiOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0cDIsICpleGMyLCAqdGIyOwogICAgICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmJsb2NrOwotICAgICAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgICAgICB3ID0gVEhJUkQoKTsKLSAgICAgICAgICAgICAgICB0cCA9IEZPVVJUSCgpOwotICAgICAgICAgICAgICAgIGV4YyA9IFBFRUsoNSk7Ci0gICAgICAgICAgICAgICAgdGIgPSBQRUVLKDYpOworICAgICAgICAgICAgICAgIHZhbCA9IFNFQ09ORCgpOworICAgICAgICAgICAgICAgIHRiID0gVEhJUkQoKTsKKyAgICAgICAgICAgICAgICB0cDIgPSBGT1VSVEgoKTsKKyAgICAgICAgICAgICAgICBleGMyID0gUEVFSyg1KTsKKyAgICAgICAgICAgICAgICB0YjIgPSBQRUVLKDYpOwogICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFBFRUsoNyk7Ci0gICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDcsIHRiKTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNiwgZXhjKTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNSwgdHApOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg3LCB0YjIpOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg2LCBleGMyKTsKKyAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNSwgdHAyKTsKICAgICAgICAgICAgICAgICAvKiBVTldJTkRfRVhDRVBUX0hBTkRMRVIgd2lsbCBwb3AgdGhpcyBvZmYuICovCiAgICAgICAgICAgICAgICAgU0VUX0ZPVVJUSChOVUxMKTsKICAgICAgICAgICAgICAgICAvKiBXZSBqdXN0IHNoaWZ0ZWQgdGhlIHN0YWNrIGRvd24sIHNvIHdlIGhhdmUKQEAgLTI2NDUsNTYgKzI4MDQsNTMgQEAKICAgICAgICAgICAgICAgICBibG9jay0+Yl9sZXZlbC0tOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogWFhYIE5vdCB0aGUgZmFzdGVzdCB3YXkgdG8gY2FsbCBpdC4uLiAqLwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZXhpdF9mdW5jLCB1LCB2LCB3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGV4aXRfZnVuYywgZXhjLCB2YWwsIHRiLCBOVUxMKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihleGl0X2Z1bmMpOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsgLyogR28gdG8gZXJyb3IgZXhpdCAqLworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgICAgIGlmICh1ICE9IFB5X05vbmUpCi0gICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHgpOworICAgICAgICAgICAgaWYgKGV4YyAhPSBQeV9Ob25lKQorICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKIAogICAgICAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7IC8qIEdvIHRvIGVycm9yIGV4aXQgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICAgICAgLyogVGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiBhbmQgYSBUcnVlIHJldHVybiAqLwogICAgICAgICAgICAgICAgIFBVU0goUHlMb25nX0Zyb21Mb25nKChsb25nKSBXSFlfU0lMRU5DRUQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFBSRURJQ1QoRU5EX0ZJTkFMTFkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKENBTExfRlVOQ1RJT04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqc3A7CisgICAgICAgIFRBUkdFVChDQUxMX0ZVTkNUSU9OKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqKnNwLCAqcmVzOwogICAgICAgICAgICAgUENBTEwoUENBTExfQUxMKTsKICAgICAgICAgICAgIHNwID0gc3RhY2tfcG9pbnRlcjsKICNpZmRlZiBXSVRIX1RTQwotICAgICAgICAgICAgeCA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZywgJmludHIwLCAmaW50cjEpOworICAgICAgICAgICAgcmVzID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnLCAmaW50cjAsICZpbnRyMSk7CiAjZWxzZQotICAgICAgICAgICAgeCA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZyk7CisgICAgICAgICAgICByZXMgPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcpOwogI2VuZGlmCiAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gc3A7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKENBTExfRlVOQ1RJT05fVkFSLCBfY2FsbF9mdW5jdGlvbl92YXJfa3cpCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoQ0FMTF9GVU5DVElPTl9LVywgX2NhbGxfZnVuY3Rpb25fdmFyX2t3KQogICAgICAgICBUQVJHRVQoQ0FMTF9GVU5DVElPTl9WQVJfS1cpCi0gICAgICAgIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdzoKLSAgICAgICAgeworICAgICAgICBfY2FsbF9mdW5jdGlvbl92YXJfa3c6IHsKICAgICAgICAgICAgIGludCBuYSA9IG9wYXJnICYgMHhmZjsKICAgICAgICAgICAgIGludCBuayA9IChvcGFyZz4+OCkgJiAweGZmOwogICAgICAgICAgICAgaW50IGZsYWdzID0gKG9wY29kZSAtIENBTExfRlVOQ1RJT04pICYgMzsKICAgICAgICAgICAgIGludCBuID0gbmEgKyAyICogbms7Ci0gICAgICAgICAgICBQeU9iamVjdCAqKnBmdW5jLCAqZnVuYywgKipzcDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqcGZ1bmMsICpmdW5jLCAqKnNwLCAqcmVzOwogICAgICAgICAgICAgUENBTEwoUENBTExfQUxMKTsKICAgICAgICAgICAgIGlmIChmbGFncyAmIENBTExfRkxBR19WQVIpCiAgICAgICAgICAgICAgICAgbisrOwpAQCAtMjcxNywxMzcgKzI4NzMsMTU2IEBACiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOwogICAgICAgICAgICAgc3AgPSBzdGFja19wb2ludGVyOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgeCA9IGV4dF9kb19jYWxsKGZ1bmMsICZzcCwgZmxhZ3MsIG5hLCBuayk7CisgICAgICAgICAgICByZXMgPSBleHRfZG9fY2FsbChmdW5jLCAmc3AsIGZsYWdzLCBuYSwgbmspOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwogICAgICAgICAgICAgc3RhY2tfcG9pbnRlciA9IHNwOwogICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwogCiAgICAgICAgICAgICB3aGlsZSAoc3RhY2tfcG9pbnRlciA+IHBmdW5jKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbyA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoTUFLRV9DTE9TVVJFLCBfbWFrZV9mdW5jdGlvbikKICAgICAgICAgVEFSR0VUKE1BS0VfRlVOQ1RJT04pCi0gICAgICAgIF9tYWtlX2Z1bmN0aW9uOgotICAgICAgICB7CisgICAgICAgIF9tYWtlX2Z1bmN0aW9uOiB7CiAgICAgICAgICAgICBpbnQgcG9zZGVmYXVsdHMgPSBvcGFyZyAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQga3dkZWZhdWx0cyA9IChvcGFyZz4+OCkgJiAweGZmOwogICAgICAgICAgICAgaW50IG51bV9hbm5vdGF0aW9ucyA9IChvcGFyZyA+PiAxNikgJiAweDdmZmY7CiAKLSAgICAgICAgICAgIHcgPSBQT1AoKTsgLyogcXVhbG5hbWUgKi8KLSAgICAgICAgICAgIHYgPSBQT1AoKTsgLyogY29kZSBvYmplY3QgKi8KLSAgICAgICAgICAgIHggPSBQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZSh2LCBmLT5mX2dsb2JhbHMsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1YWxuYW1lID0gUE9QKCk7IC8qIHF1YWxuYW1lICovCisgICAgICAgICAgICBQeU9iamVjdCAqY29kZSA9IFBPUCgpOyAvKiBjb2RlIG9iamVjdCAqLworICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZShjb2RlLCBmLT5mX2dsb2JhbHMsIHF1YWxuYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihxdWFsbmFtZSk7CiAKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgb3Bjb2RlID09IE1BS0VfQ0xPU1VSRSkgewotICAgICAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRDbG9zdXJlKHgsIHYpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBNQUtFX0NMT1NVUkUpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xvc3VyZSA9IFBPUCgpOworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldENsb3N1cmUoZnVuYywgY2xvc3VyZSkgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzIGJ5dGVjb2RlIGlzIGNvcnJ1cHQuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNsb3N1cmUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNsb3N1cmUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIG51bV9hbm5vdGF0aW9ucyA+IDApIHsKKyAgICAgICAgICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPiAwKSB7CiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuYW1lX2l4OwotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsgLyogbmFtZXMgb2YgYXJncyB3aXRoIGFubm90YXRpb25zICovCi0gICAgICAgICAgICAgICAgdiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lcyA9IFBPUCgpOyAvKiBuYW1lcyBvZiBhcmdzIHdpdGggYW5ub3RhdGlvbnMgKi8KKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqYW5ucyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAoYW5ucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZV9peCA9IFB5VHVwbGVfU2l6ZSh1KTsKKyAgICAgICAgICAgICAgICBuYW1lX2l4ID0gUHlUdXBsZV9TaXplKG5hbWVzKTsKICAgICAgICAgICAgICAgICBhc3NlcnQobnVtX2Fubm90YXRpb25zID09IG5hbWVfaXgrMSk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVfaXggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICAgICAgICAgIC0tbmFtZV9peDsKLSAgICAgICAgICAgICAgICAgICAgdCA9IFB5VHVwbGVfR0VUX0lURU0odSwgbmFtZV9peCk7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogY2hlY2sgZm9yIGVycm9ycyAqLwotICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbSh2LCB0LCB3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgICAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShuYW1lcywgbmFtZV9peCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKGFubnMsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEFubm90YXRpb25zKGZ1bmMsIGFubnMpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcwogICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldEFubm90YXRpb25zIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZXMpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBYWFggTWF5YmUgdGhpcyBzaG91bGQgYmUgYSBzZXBhcmF0ZSBvcGNvZGU/ICovCi0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIHBvc2RlZmF1bHRzID4gMCkgewotICAgICAgICAgICAgICAgIHYgPSBQeVR1cGxlX05ldyhwb3NkZWZhdWx0cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2hpbGUgKC0tcG9zZGVmYXVsdHMgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odiwgcG9zZGVmYXVsdHMsIHcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXREZWZhdWx0cyh4LCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXREZWZhdWx0cyBjaGFuZ2VzLiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIGt3ZGVmYXVsdHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGt3ZGVmYXVsdHMgPiAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZnMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICAgICAgaWYgKGRlZnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHdoaWxlICgtLWt3ZGVmYXVsdHMgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7IC8qIGRlZmF1bHQgdmFsdWUgKi8KLSAgICAgICAgICAgICAgICAgICAgdSA9IFBPUCgpOyAvKiBrdyBvbmx5IGFyZyBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgIC8qIFhYWChubm9yd2l0eik6IGNoZWNrIGZvciBlcnJvcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0odiwgdSwgdyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOyAvKiBkZWZhdWx0IHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBQT1AoKTsgLyoga3cgb25seSBhcmcgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlEaWN0X1NldEl0ZW0oZGVmcywga2V5LCB2KTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEt3RGVmYXVsdHMoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEt3RGVmYXVsdHMoZnVuYywgZGVmcykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCiAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyBjaGFuZ2VzLiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChwb3NkZWZhdWx0cyA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmcyA9IFB5VHVwbGVfTmV3KHBvc2RlZmF1bHRzKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKC0tcG9zZGVmYXVsdHMgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShkZWZzLCBwb3NkZWZhdWx0cywgUE9QKCkpOworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldERlZmF1bHRzKGZ1bmMsIGRlZnMpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcworICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldERlZmF1bHRzIGNoYW5nZXMuICovCisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKGZ1bmMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9TTElDRSkKKyAgICAgICAgVEFSR0VUKEJVSUxEX1NMSUNFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnQsICpzdG9wLCAqc3RlcCwgKnNsaWNlOwogICAgICAgICAgICAgaWYgKG9wYXJnID09IDMpCi0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOworICAgICAgICAgICAgICAgIHN0ZXAgPSBQT1AoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3ID0gTlVMTDsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeVNsaWNlX05ldyh1LCB2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN0ZXAgPSBOVUxMOworICAgICAgICAgICAgc3RvcCA9IFBPUCgpOworICAgICAgICAgICAgc3RhcnQgPSBUT1AoKTsKKyAgICAgICAgICAgIHNsaWNlID0gUHlTbGljZV9OZXcoc3RhcnQsIHN0b3AsIHN0ZXApOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoc3RlcCk7CisgICAgICAgICAgICBTRVRfVE9QKHNsaWNlKTsKKyAgICAgICAgICAgIGlmIChzbGljZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEVYVEVOREVEX0FSRykKKyAgICAgICAgVEFSR0VUKEVYVEVOREVEX0FSRykgewogICAgICAgICAgICAgb3Bjb2RlID0gTkVYVE9QKCk7CiAgICAgICAgICAgICBvcGFyZyA9IG9wYXJnPDwxNiB8IE5FWFRBUkcoKTsKICAgICAgICAgICAgIGdvdG8gZGlzcGF0Y2hfb3Bjb2RlOworICAgICAgICB9CiAKICNpZiBVU0VfQ09NUFVURURfR09UT1MKICAgICAgICAgX3Vua25vd25fb3Bjb2RlOgpAQCAtMjg1OCw4ICszMDMzLDcgQEAKICAgICAgICAgICAgICAgICBQeUZyYW1lX0dldExpbmVOdW1iZXIoZiksCiAgICAgICAgICAgICAgICAgb3Bjb2RlKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgInVua25vd24gb3Bjb2RlIik7Ci0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogCiAjaWZkZWYgQ0FTRV9UT09fQklHCiAgICAgICAgIH0KQEAgLTI4NjcsNzEgKzMwNDEsMzYgQEAKIAogICAgICAgICB9IC8qIHN3aXRjaCAqLwogCi0gICAgICAgIG9uX2Vycm9yOgorICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkLiBFdmVyeSBvcGNvZGUgc2hvdWxkIGVuZCB3aXRoIERJU1BBVENIKCkKKyAgICAgICAgICAgb3IgZ290byBlcnJvci4gKi8KKyAgICAgICAgYXNzZXJ0KDApOwogCitlcnJvcjoKICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW5zdDEpOwogCi0gICAgICAgIC8qIFF1aWNrbHkgY29udGludWUgaWYgbm8gZXJyb3Igb2NjdXJyZWQgKi8KKyAgICAgICAgYXNzZXJ0KHdoeSA9PSBXSFlfTk9UKTsKKyAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKIAotICAgICAgICBpZiAod2h5ID09IFdIWV9OT1QpIHsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCAmJiB4ICE9IE5VTEwpIHsKLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgZXhwZW5zaXZlISAqLwotICAgICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJYWFggdW5kZXRlY3RlZCBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAobG9vcDEpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogTm9ybWFsLCBmYXN0IHBhdGggKi8KLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIHggPSBQeV9Ob25lOwotICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIERvdWJsZS1jaGVjayBleGNlcHRpb24gc3RhdHVzICovCi0KLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfRVhDRVBUSU9OIHx8IHdoeSA9PSBXSFlfUkVSQUlTRSkgewotICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcmV0dXJuIHdpdGhvdXQgZXhjZXB0aW9uIHNldCIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgZXhwZW5zaXZlISAqLwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlsxMjhdOwotICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiU3RhY2sgdW53aW5kIHdpdGggZXhjZXB0aW9uICIKLSAgICAgICAgICAgICAgICAgICAgInNldCBhbmQgd2h5PSVkIiwgd2h5KTsKLSAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKGJ1Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgLyogRG91YmxlLWNoZWNrIGV4Y2VwdGlvbiBzdGF0dXMuICovCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcmV0dXJuIHdpdGhvdXQgZXhjZXB0aW9uIHNldCIpOworI2Vsc2UKKyAgICAgICAgYXNzZXJ0KFB5RXJyX09jY3VycmVkKCkpOwogI2VuZGlmCiAKLSAgICAgICAgLyogTG9nIHRyYWNlYmFjayBpbmZvIGlmIHRoaXMgaXMgYSByZWFsIGV4Y2VwdGlvbiAqLworICAgICAgICAvKiBMb2cgdHJhY2ViYWNrIGluZm8uICovCisgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUoZik7CiAKLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfRVhDRVBUSU9OKSB7Ci0gICAgICAgICAgICBQeVRyYWNlQmFja19IZXJlKGYpOwotCi0gICAgICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLCBmKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEZvciB0aGUgcmVzdCwgdHJlYXQgV0hZX1JFUkFJU0UgYXMgV0hZX0VYQ0VQVElPTiAqLwotCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX1JFUkFJU0UpCi0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotCi0gICAgICAgIC8qIFVud2luZCBzdGFja3MgaWYgYSAocHNldWRvKSBleGNlcHRpb24gb2NjdXJyZWQgKi8KKyAgICAgICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkKKyAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZik7CiAKIGZhc3RfYmxvY2tfZW5kOgorICAgICAgICBhc3NlcnQod2h5ICE9IFdIWV9OT1QpOworCisgICAgICAgIC8qIFVud2luZCBzdGFja3MgaWYgYSAocHNldWRvKSBleGNlcHRpb24gb2NjdXJyZWQgKi8KICAgICAgICAgd2hpbGUgKHdoeSAhPSBXSFlfTk9UICYmIGYtPmZfaWJsb2NrID4gMCkgewogICAgICAgICAgICAgLyogUGVlayBhdCB0aGUgY3VycmVudCBibG9jay4gKi8KICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSAmZi0+Zl9ibG9ja3N0YWNrW2YtPmZfaWJsb2NrIC0gMV07CkBAIC0yOTc4LDcgKzMxMTcsMTAgQEAKICAgICAgICAgICAgICAgICAgICBQeXRob24gbWFpbiBsb29wLiAqLwogICAgICAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgJmV4YywgJnZhbCwgJnRiKTsKLSAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgICAgICAgICAgaWYgKHRiICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIHRiKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIFB5X05vbmUpOwogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihleGMpOwogICAgICAgICAgICAgICAgIHRzdGF0ZS0+ZXhjX3R5cGUgPSBleGM7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHZhbCk7CkBAIC0zMDEwLDE4ICszMTUyLDIzIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgUkVBRF9USU1FU1RBTVAobG9vcDEpOwogCisgICAgICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisKICAgICB9IC8qIG1haW4gbG9vcCAqLwogCiAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQpOwogICAgIC8qIFBvcCByZW1haW5pbmcgc3RhY2sgZW50cmllcy4gKi8KICAgICB3aGlsZSAoIUVNUFRZKCkpIHsKLSAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICBQeV9YREVDUkVGKHYpOworICAgICAgICBQeU9iamVjdCAqbyA9IFBPUCgpOworICAgICAgICBQeV9YREVDUkVGKG8pOwogICAgIH0KIAogICAgIGlmICh3aHkgIT0gV0hZX1JFVFVSTikKICAgICAgICAgcmV0dmFsID0gTlVMTDsKIAorICAgIGFzc2VydCgocmV0dmFsICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICB8fCAocmV0dmFsID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOworCiBmYXN0X3lpZWxkOgogICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IgJiYgKHdoeSA9PSBXSFlfWUlFTEQgfHwgd2h5ID09IFdIWV9SRVRVUk4pKSB7CiAgICAgICAgIC8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgYmxvY2sgaXMgdG8gcHV0IGFzaWRlIHRoZSBnZW5lcmF0b3IncyBleGNlcHRpb24KQEAgLTMwNDYsMjYgKzMxOTMsMjcgQEAKICAgICBpZiAodHN0YXRlLT51c2VfdHJhY2luZykgewogICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYykgewogICAgICAgICAgICAgaWYgKHdoeSA9PSBXSFlfUkVUVVJOIHx8IHdoeSA9PSBXSFlfWUlFTEQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbF90cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwgZiwKKyAgICAgICAgICAgICAgICBpZiAoY2FsbF90cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfUkVUVVJOLCByZXR2YWwpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAod2h5ID09IFdIWV9FWENFUFRJT04pIHsKLSAgICAgICAgICAgICAgICBjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfdHJhY2VmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwgZiwKKyAgICAgICAgICAgICAgICBjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfUkVUVVJOLCBOVUxMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAodHN0YXRlLT5jX3Byb2ZpbGVmdW5jKSB7CiAgICAgICAgICAgICBpZiAod2h5ID09IFdIWV9FWENFUFRJT04pCiAgICAgICAgICAgICAgICAgY2FsbF90cmFjZV9wcm90ZWN0ZWQodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLCBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRyYWNlX1JFVFVSTiwgTlVMTCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIGYsCisgICAgICAgICAgICBlbHNlIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywgdHN0YXRlLT5jX3Byb2ZpbGVvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9SRVRVUk4sIHJldHZhbCkpIHsKICAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOwogICAgICAgICAgICAgICAgIC8qIHdoeSA9IFdIWV9FWENFUFRJT047ICovCkBAIC0zMDc2LDYgKzMyMjQsNyBAQAogICAgIC8qIHBvcCBmcmFtZSAqLwogZXhpdF9ldmFsX2ZyYW1lOgogICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgIGYtPmZfZXhlY3V0aW5nID0gMDsKICAgICB0c3RhdGUtPmZyYW1lID0gZi0+Zl9iYWNrOwogCiAgICAgcmV0dXJuIHJldHZhbDsKQEAgLTMyNDEsOSArMzM5MCw5IEBACiAgICAgICAgICAgIFB5T2JqZWN0ICoqZGVmcywgaW50IGRlZmNvdW50LCBQeU9iamVjdCAqa3dkZWZzLCBQeU9iamVjdCAqY2xvc3VyZSkKIHsKICAgICBQeUNvZGVPYmplY3QqIGNvID0gKFB5Q29kZU9iamVjdCopX2NvOwotICAgIHJlZ2lzdGVyIFB5RnJhbWVPYmplY3QgKmY7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOworICAgIFB5RnJhbWVPYmplY3QgKmY7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7CisgICAgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAgICAgUHlPYmplY3QgKngsICp1OwogICAgIGludCB0b3RhbF9hcmdzID0gY28tPmNvX2FyZ2NvdW50ICsgY28tPmNvX2t3b25seWFyZ2NvdW50OwpAQCAtMzUxOSw3ICszNjY4LDcgQEAKIAogLyogTG9naWMgZm9yIHRoZSByYWlzZSBzdGF0ZW1lbnQgKHRvbyBjb21wbGljYXRlZCBmb3IgaW5saW5pbmcpLgogICAgVGhpcyAqY29uc3VtZXMqIGEgcmVmZXJlbmNlIGNvdW50IHRvIGVhY2ggb2YgaXRzIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyBlbnVtIHdoeV9jb2RlCitzdGF0aWMgaW50CiBkb19yYWlzZShQeU9iamVjdCAqZXhjLCBQeU9iamVjdCAqY2F1c2UpCiB7CiAgICAgUHlPYmplY3QgKnR5cGUgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOwpAQCAtMzUzNCwxMyArMzY4MywxMyBAQAogICAgICAgICBpZiAodHlwZSA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBhY3RpdmUgZXhjZXB0aW9uIHRvIHJlcmFpc2UiKTsKLSAgICAgICAgICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgUHlfWElOQ1JFRih0eXBlKTsKICAgICAgICAgUHlfWElOQ1JFRih2YWx1ZSk7CiAgICAgICAgIFB5X1hJTkNSRUYodGIpOwogICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0Yik7Ci0gICAgICAgIHJldHVybiBXSFlfUkVSQUlTRTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgLyogV2Ugc3VwcG9ydCB0aGUgZm9sbG93aW5nIGZvcm1zIG9mIHJhaXNlOgpAQCAtMzYwMywxMyArMzc1MiwxMyBAQAogICAgIC8qIFB5RXJyX1NldE9iamVjdCBpbmNyZWYncyBpdHMgYXJndW1lbnRzICovCiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgUHlfWERFQ1JFRih0eXBlKTsKLSAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKKyAgICByZXR1cm4gMDsKIAogcmFpc2VfZXJyb3I6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgUHlfWERFQ1JFRih0eXBlKTsKICAgICBQeV9YREVDUkVGKGNhdXNlKTsKLSAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKKyAgICByZXR1cm4gMDsKIH0KIAogLyogSXRlcmF0ZSB2IGFyZ2NudCB0aW1lcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgb24gdGhlIHN0YWNrICh2aWEgZGVjcmVhc2luZwpAQCAtMzcwNiw0MCArMzg1NSw0MyBAQAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkCi1jYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKnNlbGYsIFB5RnJhbWVPYmplY3QgKmYpCitjYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5RnJhbWVPYmplY3QgKmYpCiB7Ci0gICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjaywgKmFyZzsKKyAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrLCAqb3JpZ190cmFjZWJhY2ssICphcmc7CiAgICAgaW50IGVycjsKLSAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKKyAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmb3JpZ190cmFjZWJhY2spOwogICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICB9Ci0gICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOworICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmdHlwZSwgJnZhbHVlLCAmb3JpZ190cmFjZWJhY2spOworICAgIHRyYWNlYmFjayA9IChvcmlnX3RyYWNlYmFjayAhPSBOVUxMKSA/IG9yaWdfdHJhY2ViYWNrIDogUHlfTm9uZTsKICAgICBhcmcgPSBQeVR1cGxlX1BhY2soMywgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CiAgICAgaWYgKGFyZyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIG9yaWdfdHJhY2ViYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBlcnIgPSBjYWxsX3RyYWNlKGZ1bmMsIHNlbGYsIGYsIFB5VHJhY2VfRVhDRVBUSU9OLCBhcmcpOworICAgIGVyciA9IGNhbGxfdHJhY2UoZnVuYywgc2VsZiwgdHN0YXRlLCBmLCBQeVRyYWNlX0VYQ0VQVElPTiwgYXJnKTsKICAgICBQeV9ERUNSRUYoYXJnKTsKICAgICBpZiAoZXJyID09IDApCi0gICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIG9yaWdfdHJhY2ViYWNrKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfWERFQ1JFRih0eXBlKTsKICAgICAgICAgUHlfWERFQ1JFRih2YWx1ZSk7Ci0gICAgICAgIFB5X1hERUNSRUYodHJhY2ViYWNrKTsKKyAgICAgICAgUHlfWERFQ1JFRihvcmlnX3RyYWNlYmFjayk7CiAgICAgfQogfQogCiBzdGF0aWMgaW50Ci1jYWxsX3RyYWNlX3Byb3RlY3RlZChQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCitjYWxsX3RyYWNlX3Byb3RlY3RlZChQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrOwogICAgIGludCBlcnI7CiAgICAgUHlFcnJfRmV0Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7Ci0gICAgZXJyID0gY2FsbF90cmFjZShmdW5jLCBvYmosIGZyYW1lLCB3aGF0LCBhcmcpOworICAgIGVyciA9IGNhbGxfdHJhY2UoZnVuYywgb2JqLCB0c3RhdGUsIGZyYW1lLCB3aGF0LCBhcmcpOwogICAgIGlmIChlcnIgPT0gMCkKICAgICB7CiAgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CkBAIC0zNzU0LDEwICszOTA2LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWNhbGxfdHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmosIFB5RnJhbWVPYmplY3QgKmZyYW1lLAorY2FsbF90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKICAgICAgICAgICAgaW50IHdoYXQsIFB5T2JqZWN0ICphcmcpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gZnJhbWUtPmZfdHN0YXRlOwogICAgIGludCByZXN1bHQ7CiAgICAgaWYgKHRzdGF0ZS0+dHJhY2luZykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zNzczLDggKzM5MjUsNyBAQAogUHlPYmplY3QgKgogX1B5RXZhbF9DYWxsVHJhY2luZyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlGcmFtZU9iamVjdCAqZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBpbnQgc2F2ZV90cmFjaW5nID0gdHN0YXRlLT50cmFjaW5nOwogICAgIGludCBzYXZlX3VzZV90cmFjaW5nID0gdHN0YXRlLT51c2VfdHJhY2luZzsKICAgICBQeU9iamVjdCAqcmVzdWx0OwpAQCAtMzc5MSw4ICszOTQyLDggQEAKIC8qIFNlZSBPYmplY3RzL2xub3RhYl9ub3Rlcy50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgaG93IHRyYWNpbmcgd29ya3MuICovCiBzdGF0aWMgaW50CiBtYXliZV9jYWxsX2xpbmVfdHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUsIGludCAqaW5zdHJfbGIsIGludCAqaW5zdHJfdWIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICppbnN0cl9wcmV2KQorICAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICppbnN0cl9sYiwgaW50ICppbnN0cl91YiwgaW50ICppbnN0cl9wcmV2KQogewogICAgIGludCByZXN1bHQgPSAwOwogICAgIGludCBsaW5lID0gZnJhbWUtPmZfbGluZW5vOwpAQCAtMzgxMiw3ICszOTYzLDcgQEAKICAgICAgICBudW1iZXIgYW5kIGNhbGwgdGhlIHRyYWNlIGZ1bmN0aW9uLiAqLwogICAgIGlmIChmcmFtZS0+Zl9sYXN0aSA9PSAqaW5zdHJfbGIgfHwgZnJhbWUtPmZfbGFzdGkgPCAqaW5zdHJfcHJldikgewogICAgICAgICBmcmFtZS0+Zl9saW5lbm8gPSBsaW5lOwotICAgICAgICByZXN1bHQgPSBjYWxsX3RyYWNlKGZ1bmMsIG9iaiwgZnJhbWUsIFB5VHJhY2VfTElORSwgUHlfTm9uZSk7CisgICAgICAgIHJlc3VsdCA9IGNhbGxfdHJhY2UoZnVuYywgb2JqLCB0c3RhdGUsIGZyYW1lLCBQeVRyYWNlX0xJTkUsIFB5X05vbmUpOwogICAgIH0KICAgICAqaW5zdHJfcHJldiA9IGZyYW1lLT5mX2xhc3RpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zODY4LDkgKzQwMTksMTUgQEAKIFB5RXZhbF9HZXRMb2NhbHModm9pZCkKIHsKICAgICBQeUZyYW1lT2JqZWN0ICpjdXJyZW50X2ZyYW1lID0gUHlFdmFsX0dldEZyYW1lKCk7Ci0gICAgaWYgKGN1cnJlbnRfZnJhbWUgPT0gTlVMTCkKKyAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgImZyYW1lIGRvZXMgbm90IGV4aXN0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGN1cnJlbnRfZnJhbWUpOworICAgIH0KKworICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihjdXJyZW50X2ZyYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXNzZXJ0KGN1cnJlbnRfZnJhbWUtPmZfbG9jYWxzICE9IE5VTEwpOwogICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2xvY2FsczsKIH0KIApAQCAtMzg4MCw4ICs0MDM3LDkgQEAKICAgICBQeUZyYW1lT2JqZWN0ICpjdXJyZW50X2ZyYW1lID0gUHlFdmFsX0dldEZyYW1lKCk7CiAgICAgaWYgKGN1cnJlbnRfZnJhbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzOworCisgICAgYXNzZXJ0KGN1cnJlbnRfZnJhbWUtPmZfZ2xvYmFscyAhPSBOVUxMKTsKKyAgICByZXR1cm4gY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzOwogfQogCiBQeUZyYW1lT2JqZWN0ICoKQEAgLTM5MjMsNiArNDA4MSwxMyBAQAogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uCisgICAgICAgc2V0LCBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkKKyAgICAgICBhbmQgc28gdGhlIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIGlmIChhcmcgPT0gTlVMTCkgewogICAgICAgICBhcmcgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgaWYgKGFyZyA9PSBOVUxMKQpAQCAtMzk0NSw2ICs0MTEwLDkgQEAKIAogICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgYXJnLCBrdyk7CiAgICAgUHlfREVDUkVGKGFyZyk7CisKKyAgICBhc3NlcnQoKHJlc3VsdCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAocmVzdWx0ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTM5OTEsMTAgKzQxNTksOSBAQAogCiAjZGVmaW5lIENfVFJBQ0UoeCwgY2FsbCkgXAogaWYgKHRzdGF0ZS0+dXNlX3RyYWNpbmcgJiYgdHN0YXRlLT5jX3Byb2ZpbGVmdW5jKSB7IFwKLSAgICBpZiAoY2FsbF90cmFjZSh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsIFwKLSAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIFwKLSAgICAgICAgdHN0YXRlLT5mcmFtZSwgUHlUcmFjZV9DX0NBTEwsIFwKLSAgICAgICAgZnVuYykpIHsgXAorICAgIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIFwKKyAgICAgICAgdHN0YXRlLCB0c3RhdGUtPmZyYW1lLCBcCisgICAgICAgIFB5VHJhY2VfQ19DQUxMLCBmdW5jKSkgeyBcCiAgICAgICAgIHggPSBOVUxMOyBcCiAgICAgfSBcCiAgICAgZWxzZSB7IFwKQEAgLTQwMDMsMTQgKzQxNzAsMTQgQEAKICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsgXAogICAgICAgICAgICAgICAgIGNhbGxfdHJhY2VfcHJvdGVjdGVkKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywgXAogICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmNfcHJvZmlsZW9iaiwgXAotICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmZyYW1lLCBQeVRyYWNlX0NfRVhDRVBUSU9OLCBcCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMpOyBcCisgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgdHN0YXRlLT5mcmFtZSwgXAorICAgICAgICAgICAgICAgICAgICBQeVRyYWNlX0NfRVhDRVBUSU9OLCBmdW5jKTsgXAogICAgICAgICAgICAgICAgIC8qIFhYWCBzaG91bGQgcGFzcyAodHlwZSwgdmFsdWUsIHRiKSAqLyBcCiAgICAgICAgICAgICB9IGVsc2UgeyBcCiAgICAgICAgICAgICAgICAgaWYgKGNhbGxfdHJhY2UodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLCBcCiAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLCBcCi0gICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+ZnJhbWUsIFB5VHJhY2VfQ19SRVRVUk4sIFwKLSAgICAgICAgICAgICAgICAgICAgZnVuYykpIHsgXAorICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIHRzdGF0ZS0+ZnJhbWUsIFwKKyAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9DX1JFVFVSTiwgZnVuYykpIHsgXAogICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7IFwKICAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7IFwKICAgICAgICAgICAgICAgICB9IFwKQEAgLTQwNjIsMTAgKzQyMjksMTUgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqY2FsbGFyZ3M7CiAgICAgICAgICAgICBjYWxsYXJncyA9IGxvYWRfYXJncyhwcF9zdGFjaywgbmEpOwotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMCk7Ci0gICAgICAgICAgICBDX1RSQUNFKHgsIFB5Q0Z1bmN0aW9uX0NhbGwoZnVuYyxjYWxsYXJncyxOVUxMKSk7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIxKTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoY2FsbGFyZ3MpOworICAgICAgICAgICAgaWYgKGNhbGxhcmdzICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIwKTsKKyAgICAgICAgICAgICAgICBDX1RSQUNFKHgsIFB5Q0Z1bmN0aW9uX0NhbGwoZnVuYyxjYWxsYXJncyxOVUxMKSk7CisgICAgICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMSk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihjYWxsYXJncyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB4ID0gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChQeU1ldGhvZF9DaGVjayhmdW5jKSAmJiBQeU1ldGhvZF9HRVRfU0VMRihmdW5jKSAhPSBOVUxMKSB7CkBAIC00MDkwLDYgKzQyNjIsOCBAQAogICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIxKTsKICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwogICAgIH0KKyAgICBhc3NlcnQoKHggIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgfHwgKHggPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAKICAgICAvKiBDbGVhciB0aGUgc3RhY2sgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIEFsc28gcmVtb3ZlcwogICAgICAgIHRoZSBhcmd1bWVudHMgaW4gY2FzZSB0aGV5IHdlcmVuJ3QgY29uc3VtZWQgYWxyZWFkeQpAQCAtNDEwMCw2ICs0Mjc0LDkgQEAKICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICBQQ0FMTChQQ0FMTF9QT1ApOwogICAgIH0KKworICAgIGFzc2VydCgoeCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAoeCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKICAgICByZXR1cm4geDsKIH0KIApAQCAtNDM4Myw2ICs0NTYwLDggQEAKICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKICAgICBQeV9YREVDUkVGKGt3ZGljdCk7CiAgICAgUHlfWERFQ1JFRihzdGFyYXJnKTsKKyAgICBhc3NlcnQoKHJlc3VsdCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAocmVzdWx0ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ0MjEsNyArNDYwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc2VFeGNlcHRpb24gaXMgbm90IGFsbG93ZWQiCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jbXBfb3V0Y29tZShpbnQgb3AsIHJlZ2lzdGVyIFB5T2JqZWN0ICp2LCByZWdpc3RlciBQeU9iamVjdCAqdykKK2NtcF9vdXRjb21lKGludCBvcCwgUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQogewogICAgIGludCByZXMgPSAwOwogICAgIHN3aXRjaCAob3ApIHsKQEAgLTQ0NzksNyArNDY1OCw3IEBACiAKICAgICB4ID0gUHlPYmplY3RfR2V0QXR0cih2LCBuYW1lKTsKICAgICBpZiAoeCA9PSBOVUxMICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgImNhbm5vdCBpbXBvcnQgbmFtZSAlUyIsIG5hbWUpOworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJjYW5ub3QgaW1wb3J0IG5hbWUgJVIiLCBuYW1lKTsKICAgICB9CiAgICAgcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vY29kZWNzLmMgYi9QeXRob24vY29kZWNzLmMKaW5kZXggMGI3MzZjMS4uNmI4MDMzZSAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvZGVjcy5jCisrKyBiL1B5dGhvbi9jb2RlY3MuYwpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljCiBQeU9iamVjdCAqbm9ybWFsaXplc3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKKyAgICBzaXplX3QgaTsKICAgICBzaXplX3QgbGVuID0gc3RybGVuKHN0cmluZyk7CiAgICAgY2hhciAqcDsKICAgICBQeU9iamVjdCAqdjsKQEAgLTY1LDkgKzY1LDkgQEAKIAogICAgIHAgPSBQeU1lbV9NYWxsb2MobGVuICsgMSk7CiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICByZWdpc3RlciBjaGFyIGNoID0gc3RyaW5nW2ldOworICAgICAgICBjaGFyIGNoID0gc3RyaW5nW2ldOwogICAgICAgICBpZiAoY2ggPT0gJyAnKQogICAgICAgICAgICAgY2ggPSAnLSc7CiAgICAgICAgIGVsc2UKQEAgLTE4NSw2ICsxODUsMzIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAoraW50IF9QeUNvZGVjX0ZvcmdldChjb25zdCBjaGFyICplbmNvZGluZykKK3sKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycDsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBpbnQgcmVzdWx0OworCisgICAgaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIGlmIChpbnRlcnAtPmNvZGVjX3NlYXJjaF9wYXRoID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIENvbnZlcnQgdGhlIGVuY29kaW5nIHRvIGEgbm9ybWFsaXplZCBQeXRob24gc3RyaW5nOiBhbGwKKyAgICAgICBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZSwgc3BhY2VzIGFuZCBoeXBoZW5zIGFyZQorICAgICAgIHJlcGxhY2VkIHdpdGggdW5kZXJzY29yZXMuICovCisgICAgdiA9IG5vcm1hbGl6ZXN0cmluZyhlbmNvZGluZyk7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogRHJvcCB0aGUgbmFtZWQgY29kZWMgZnJvbSB0aGUgaW50ZXJuYWwgY2FjaGUgKi8KKyAgICByZXN1bHQgPSBQeURpY3RfRGVsSXRlbShpbnRlcnAtPmNvZGVjX3NlYXJjaF9jYWNoZSwgdik7CisgICAgUHlfREVDUkVGKHYpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLyogQ29kZWMgcmVnaXN0cnkgZW5jb2RpbmcgY2hlY2sgQVBJLiAqLwogCiBpbnQgUHlDb2RlY19Lbm93bkVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nKQpAQCAtMzYwLDYgKzM4NiwyMiBAQAogICAgIHJldHVybiBjb2RlY19nZXRzdHJlYW1jb2RlYyhlbmNvZGluZywgc3RyZWFtLCBlcnJvcnMsIDMpOwogfQogCisvKiBIZWxwZXIgdGhhdCB0cmllcyB0byBlbnN1cmUgdGhlIHJlcG9ydGVkIGV4Y2VwdGlvbiBjaGFpbiBpbmRpY2F0ZXMgdGhlCisgKiBjb2RlYyB0aGF0IHdhcyBpbnZva2VkIHRvIHRyaWdnZXIgdGhlIGZhaWx1cmUgd2l0aG91dCBjaGFuZ2luZyB0aGUgdHlwZQorICogb2YgdGhlIGV4Y2VwdGlvbiByYWlzZWQuCisgKi8KK3N0YXRpYyB2b2lkCit3cmFwX2NvZGVjX2Vycm9yKGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisgICAgLyogVHJ5U2V0RnJvbUNhdXNlIHdpbGwgcmVwbGFjZSB0aGUgYWN0aXZlIGV4Y2VwdGlvbiB3aXRoIGEgc3VpdGFibHkKKyAgICAgKiB1cGRhdGVkIGNsb25lIGlmIGl0IGNhbiwgb3RoZXJ3aXNlIGl0IHdpbGwgbGVhdmUgdGhlIG9yaWdpbmFsCisgICAgICogZXhjZXB0aW9uIGFsb25lLgorICAgICAqLworICAgIF9QeUVycl9UcnlTZXRGcm9tQ2F1c2UoIiVzIHdpdGggJyVzJyBjb2RlYyBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLCBlbmNvZGluZyk7Cit9CisKIC8qIEVuY29kZSBhbiBvYmplY3QgKGUuZy4gYW4gVW5pY29kZSBvYmplY3QpIHVzaW5nIHRoZSBnaXZlbiBlbmNvZGluZwogICAgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGVuY29kZWQgb2JqZWN0ICh1c3VhbGx5IGEgUHl0aG9uIHN0cmluZykuCiAKQEAgLTM3OSw4ICs0MjEsMTAgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogCiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoZW5jb2RlciwgYXJncyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICB3cmFwX2NvZGVjX2Vycm9yKCJlbmNvZGluZyIsIGVuY29kaW5nKTsKICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KIAogICAgIGlmICghUHlUdXBsZV9DaGVjayhyZXN1bHQpIHx8CiAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUocmVzdWx0KSAhPSAyKSB7CkBAIC00MjMsOCArNDY3LDEwIEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGRlY29kZXIsYXJncyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICB3cmFwX2NvZGVjX2Vycm9yKCJkZWNvZGluZyIsIGVuY29kaW5nKTsKICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KICAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVzdWx0KSB8fAogICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHJlc3VsdCkgIT0gMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtNTg5LDcgKzYzNSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopbmFtZSwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBlcnJvcik7CiB9CiAKIC8qIExvb2t1cCB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUKQEAgLTYwNSw3ICs2NTEsNyBAQAogCiAgICAgaWYgKG5hbWU9PU5VTEwpCiAgICAgICAgIG5hbWUgPSAic3RyaWN0IjsKLSAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgKGNoYXIgKiluYW1lKTsKKyAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgbmFtZSk7CiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTG9va3VwRXJyb3IsICJ1bmtub3duIGVycm9yIGhhbmRsZXIgbmFtZSAnJS40MDBzJyIsIG5hbWUpOwogICAgIGVsc2UKQEAgLTg4MSw2ICs5MjcsNjUgQEAKICAgICB9CiB9CiAKKyNkZWZpbmUgRU5DX1VURjggICAgICAgIDAKKyNkZWZpbmUgRU5DX1VURjE2QkUgICAgIDEKKyNkZWZpbmUgRU5DX1VURjE2TEUgICAgIDIKKyNkZWZpbmUgRU5DX1VURjMyQkUgICAgIDMKKyNkZWZpbmUgRU5DX1VURjMyTEUgICAgIDQKKworc3RhdGljIGludAorZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBpbnQgKmJ5dGVsZW5ndGgpCit7CisgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICd1JyAmJgorICAgICAgICBQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAndCcgJiYKKyAgICAgICAgUHlfVE9MT1dFUihlbmNvZGluZ1syXSkgPT0gJ2YnKSB7CisgICAgICAgIGVuY29kaW5nICs9IDM7CisgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJy0nIHx8ICplbmNvZGluZyA9PSAnXycgKQorICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgaWYgKGVuY29kaW5nWzBdID09ICcxJyAmJiBlbmNvZGluZ1sxXSA9PSAnNicpIHsKKyAgICAgICAgICAgIGVuY29kaW5nICs9IDI7CisgICAgICAgICAgICAqYnl0ZWxlbmd0aCA9IDI7CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICdcMCcpIHsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2QkU7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZMRTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnLScgfHwgKmVuY29kaW5nID09ICdfJyApCisgICAgICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAnZScgJiYgZW5jb2RpbmdbMl0gPT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnYicpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZCRTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ2wnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2TEU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZW5jb2RpbmdbMF0gPT0gJzMnICYmIGVuY29kaW5nWzFdID09ICcyJykgeworICAgICAgICAgICAgZW5jb2RpbmcgKz0gMjsKKyAgICAgICAgICAgICpieXRlbGVuZ3RoID0gNDsKKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJ1wwJykgeworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJCRTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkxFOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICctJyB8fCAqZW5jb2RpbmcgPT0gJ18nICkKKyAgICAgICAgICAgICAgICBlbmNvZGluZysrOworICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMV0pID09ICdlJyAmJiBlbmNvZGluZ1syXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdiJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkJFOworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnbCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJMRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiB1dGYtOCAqLworICAgICpieXRlbGVuZ3RoID0gMzsKKyAgICByZXR1cm4gRU5DX1VURjg7Cit9CisKIC8qIFRoaXMgaGFuZGxlciBpcyBkZWNsYXJlZCBzdGF0aWMgdW50aWwgc29tZW9uZSBkZW1vbnN0cmF0ZXMKICAgIGEgbmVlZCB0byBjYWxsIGl0IGRpcmVjdGx5LiAqLwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTg4OCwzNyArOTkzLDc3IEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3R1cGxlOwogICAgIFB5T2JqZWN0ICpvYmplY3Q7CisgICAgUHlPYmplY3QgKmVuY29kZTsKKyAgICBjaGFyICplbmNvZGluZzsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgYnl0ZWxlbmd0aDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBzdGFydDsKICAgICBQeV9zc2l6ZV90IGVuZDsKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewotICAgICAgICBjaGFyICpvdXRwOworICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwOwogICAgICAgICBpZiAoUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQoZXhjLCAmc3RhcnQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmIChQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoIShvYmplY3QgPSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QoZXhjKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAzKihlbmQtc3RhcnQpKTsKKyAgICAgICAgaWYgKCEoZW5jb2RlID0gUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcoZXhjKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoZW5jb2RpbmcgPSBQeVVuaWNvZGVfQXNVVEY4KGVuY29kZSkpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY29kZSA9IGdldF9zdGFuZGFyZF9lbmNvZGluZyhlbmNvZGluZywgJmJ5dGVsZW5ndGgpOworICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKworICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVsZW5ndGgqKGVuZC1zdGFydCkpOwogICAgICAgICBpZiAoIXJlcykgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBvdXRwID0gUHlCeXRlc19Bc1N0cmluZyhyZXMpOworICAgICAgICBvdXRwID0gKHVuc2lnbmVkIGNoYXIqKVB5Qnl0ZXNfQXNTdHJpbmcocmVzKTsKICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgICAgLyogb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgInJlYWR5IiAqLwogICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIob2JqZWN0LCBpKTsKLSAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCB8fCBjaCA+IDB4ZGZmZikgeworICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKICAgICAgICAgICAgICAgICAvKiBOb3QgYSBzdXJyb2dhdGUsIGZhaWwgd2l0aCBvcmlnaW5hbCBleGNlcHRpb24gKi8KICAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweGUwIHwgKGNoID4+IDEyKSk7Ci0gICAgICAgICAgICAqb3V0cCsrID0gKGNoYXIpKDB4ODAgfCAoKGNoID4+IDYpICYgMHgzZikpOwotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweDgwIHwgKGNoICYgMHgzZikpOworICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEY4OgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHhlMCB8IChjaCA+PiAxMikpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHg4MCB8ICgoY2ggPj4gNikgJiAweDNmKSk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSgweDgwIHwgKGNoICYgMHgzZikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZMRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpIGNoOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYxNkJFOgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyTEU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMTYpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMjQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJCRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDI0KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDE2KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVzdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCIoT24pIiwgcmVzLCBlbmQpOwogICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTkzMCwzNCArMTA3NSw2NCBAQAogICAgICAgICBQeV9VQ1M0IGNoID0gMDsKICAgICAgICAgaWYgKFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0KGV4YywgJnN0YXJ0KSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKCEob2JqZWN0ID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0KGV4YykpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICghKHAgPSAodW5zaWduZWQgY2hhciopUHlCeXRlc19Bc1N0cmluZyhvYmplY3QpKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGUgPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZyhleGMpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGluZyA9IFB5VW5pY29kZV9Bc1VURjgoZW5jb2RlKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjb2RlID0gZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGVuY29kaW5nLCAmYnl0ZWxlbmd0aCk7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworCiAgICAgICAgIC8qIFRyeSBkZWNvZGluZyBhIHNpbmdsZSBzdXJyb2dhdGUgY2hhcmFjdGVyLiBJZgogICAgICAgICAgICB0aGVyZSBhcmUgbW9yZSwgbGV0IHRoZSBjb2RlYyBjYWxsIHVzIGFnYWluLiAqLwogICAgICAgICBwICs9IHN0YXJ0OwotICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmplY3QpIC0gc3RhcnQgPj0gMyAmJgotICAgICAgICAgICAgKHBbMF0gJiAweGYwKSA9PSAweGUwICYmCi0gICAgICAgICAgICAocFsxXSAmIDB4YzApID09IDB4ODAgJiYKLSAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgewotICAgICAgICAgICAgLyogaXQncyBhIHRocmVlLWJ5dGUgY29kZSAqLwotICAgICAgICAgICAgY2ggPSAoKHBbMF0gJiAweDBmKSA8PCAxMikgKyAoKHBbMV0gJiAweDNmKSA8PCA2KSArIChwWzJdICYgMHgzZik7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDAgfHwgY2ggPiAweGRmZmYpCi0gICAgICAgICAgICAgICAgLyogaXQncyBub3QgYSBzdXJyb2dhdGUgLSBmYWlsICovCi0gICAgICAgICAgICAgICAgY2ggPSAwOworICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmplY3QpIC0gc3RhcnQgPj0gYnl0ZWxlbmd0aCkgeworICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEY4OgorICAgICAgICAgICAgICAgIGlmICgocFswXSAmIDB4ZjApID09IDB4ZTAgJiYKKyAgICAgICAgICAgICAgICAgICAgKHBbMV0gJiAweGMwKSA9PSAweDgwICYmCisgICAgICAgICAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgeworICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgdGhyZWUtYnl0ZSBjb2RlICovCisgICAgICAgICAgICAgICAgICAgIGNoID0gKChwWzBdICYgMHgwZikgPDwgMTIpICsgKChwWzFdICYgMHgzZikgPDwgNikgKyAocFsyXSAmIDB4M2YpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2TEU6CisgICAgICAgICAgICAgICAgY2ggPSBwWzFdIDw8IDggfCBwWzBdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZCRToKKyAgICAgICAgICAgICAgICBjaCA9IHBbMF0gPDwgOCB8IHBbMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYzMkxFOgorICAgICAgICAgICAgICAgIGNoID0gKHBbM10gPDwgMjQpIHwgKHBbMl0gPDwgMTYpIHwgKHBbMV0gPDwgOCkgfCBwWzBdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJCRToKKyAgICAgICAgICAgICAgICBjaCA9IChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgcFszXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwotICAgICAgICBpZiAoY2ggPT0gMCkgeworICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgLyogaXQncyBub3QgYSBzdXJyb2dhdGUgLSBmYWlsICovCiAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcmVzLCBzdGFydCszKTsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCByZXMsIHN0YXJ0ICsgYnl0ZWxlbmd0aCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB3cm9uZ19leGNlcHRpb25fdHlwZShleGMpOwpAQCAtMTE3NCw3ICsxMzQ5LDcgQEAKIAogICAgIGlmIChpbnRlcnAtPmNvZGVjX2Vycm9yX3JlZ2lzdHJ5KSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeV9BUlJBWV9MRU5HVEgobWV0aG9kcyk7ICsraSkgewotICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoJm1ldGhvZHNbaV0uZGVmLCBOVUxMKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoJm1ldGhvZHNbaV0uZGVmLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICBpZiAoIWZ1bmMpCiAgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgaW5pdGlhbGl6ZSBjb2RlYyBlcnJvciByZWdpc3RyeSIpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbXBpbGUuYyBiL1B5dGhvbi9jb21waWxlLmMKaW5kZXggNmQ2NjI1NS4uNjk0MTllYyAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbXBpbGUuYworKysgYi9QeXRob24vY29tcGlsZS5jCkBAIC05NCw2ICs5NCw3IEBACiAgICAgQ09NUElMRVJfU0NPUEVfTU9EVUxFLAogICAgIENPTVBJTEVSX1NDT1BFX0NMQVNTLAogICAgIENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OLAorICAgIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICBDT01QSUxFUl9TQ09QRV9DT01QUkVIRU5TSU9OLAogfTsKIApAQCAtMTE5LDggKzEyMCw4IEBACiAKICAgICBQeU9iamVjdCAqdV9wcml2YXRlOyAgICAgICAgLyogZm9yIHByaXZhdGUgbmFtZSBtYW5nbGluZyAqLwogCi0gICAgaW50IHVfYXJnY291bnQ7ICAgICAgICAvKiBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBibG9jayAqLwotICAgIGludCB1X2t3b25seWFyZ2NvdW50OyAvKiBudW1iZXIgb2Yga2V5d29yZCBvbmx5IGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KKyAgICBQeV9zc2l6ZV90IHVfYXJnY291bnQ7ICAgICAgICAvKiBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBibG9jayAqLworICAgIFB5X3NzaXplX3QgdV9rd29ubHlhcmdjb3VudDsgLyogbnVtYmVyIG9mIGtleXdvcmQgb25seSBhcmd1bWVudHMgZm9yIGJsb2NrICovCiAgICAgLyogUG9pbnRlciB0byB0aGUgbW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgYmxvY2suICBCeSBmb2xsb3dpbmcgYl9saXN0CiAgICAgICAgbWVtYmVycywgeW91IGNhbiByZWFjaCBhbGwgZWFybHkgYWxsb2NhdGVkIGJsb2Nrcy4gKi8KICAgICBiYXNpY2Jsb2NrICp1X2Jsb2NrczsKQEAgLTE0OSw4ICsxNTAsNyBAQAogKi8KIAogc3RydWN0IGNvbXBpbGVyIHsKLSAgICBjb25zdCBjaGFyICpjX2ZpbGVuYW1lOwotICAgIFB5T2JqZWN0ICpjX2ZpbGVuYW1lX29iajsKKyAgICBQeU9iamVjdCAqY19maWxlbmFtZTsKICAgICBzdHJ1Y3Qgc3ltdGFibGUgKmNfc3Q7CiAgICAgUHlGdXR1cmVGZWF0dXJlcyAqY19mdXR1cmU7IC8qIHBvaW50ZXIgdG8gbW9kdWxlJ3MgX19mdXR1cmVfXyAqLwogICAgIFB5Q29tcGlsZXJGbGFncyAqY19mbGFnczsKQEAgLTE3MCw3ICsxNzAsNyBAQAogc3RhdGljIGludCBjb21waWxlcl9uZXh0X2luc3RyKHN0cnVjdCBjb21waWxlciAqLCBiYXNpY2Jsb2NrICopOwogc3RhdGljIGludCBjb21waWxlcl9hZGRvcChzdHJ1Y3QgY29tcGlsZXIgKiwgaW50KTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfbyhzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKLXN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIFB5X3NzaXplX3QpOwogc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9qKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIGJhc2ljYmxvY2sgKiwgaW50KTsKIHN0YXRpYyBiYXNpY2Jsb2NrICpjb21waWxlcl91c2VfbmV3X2Jsb2NrKHN0cnVjdCBjb21waWxlciAqKTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfZXJyb3Ioc3RydWN0IGNvbXBpbGVyICosIGNvbnN0IGNoYXIgKik7CkBAIC0xOTUsMTIgKzE5NSwxMyBAQAogc3RhdGljIGludCBleHByX2NvbnN0YW50KHN0cnVjdCBjb21waWxlciAqLCBleHByX3R5KTsKIAogc3RhdGljIGludCBjb21waWxlcl93aXRoKHN0cnVjdCBjb21waWxlciAqLCBzdG10X3R5LCBpbnQpOwotc3RhdGljIGludCBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBuLAorc3RhdGljIGludCBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5X3NzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBzdGFyYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3MpOwogc3RhdGljIGludCBjb21waWxlcl90cnlfZXhjZXB0KHN0cnVjdCBjb21waWxlciAqLCBzdG10X3R5KTsKK3N0YXRpYyBpbnQgY29tcGlsZXJfc2V0X3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqKTsKIAogc3RhdGljIFB5Q29kZU9iamVjdCAqYXNzZW1ibGUoc3RydWN0IGNvbXBpbGVyICosIGludCBhZGROb25lKTsKIHN0YXRpYyBQeU9iamVjdCAqX19kb2NfXzsKQEAgLTI4OCw4ICsyODksOCBAQAogfQogCiBQeUNvZGVPYmplY3QgKgotUHlBU1RfQ29tcGlsZUV4KG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAotICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCitQeUFTVF9Db21waWxlT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW1pemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIHN0cnVjdCBjb21waWxlciBjOwogICAgIFB5Q29kZU9iamVjdCAqY28gPSBOVUxMOwpAQCAtMzA0LDEyICszMDUsMTAgQEAKIAogICAgIGlmICghY29tcGlsZXJfaW5pdCgmYykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CiAgICAgYy5jX2ZpbGVuYW1lID0gZmlsZW5hbWU7Ci0gICAgYy5jX2ZpbGVuYW1lX29iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwotICAgIGlmICghYy5jX2ZpbGVuYW1lX29iaikKLSAgICAgICAgZ290byBmaW5hbGx5OwogICAgIGMuY19hcmVuYSA9IGFyZW5hOwotICAgIGMuY19mdXR1cmUgPSBQeUZ1dHVyZV9Gcm9tQVNUKG1vZCwgZmlsZW5hbWUpOworICAgIGMuY19mdXR1cmUgPSBQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZCwgZmlsZW5hbWUpOwogICAgIGlmIChjLmNfZnV0dXJlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICBpZiAoIWZsYWdzKSB7CkBAIC0zMjMsNyArMzIyLDcgQEAKICAgICBjLmNfb3B0aW1pemUgPSAob3B0aW1pemUgPT0gLTEpID8gUHlfT3B0aW1pemVGbGFnIDogb3B0aW1pemU7CiAgICAgYy5jX25lc3RsZXZlbCA9IDA7CiAKLSAgICBjLmNfc3QgPSBQeVN5bXRhYmxlX0J1aWxkKG1vZCwgZmlsZW5hbWUsIGMuY19mdXR1cmUpOworICAgIGMuY19zdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgYy5jX2Z1dHVyZSk7CiAgICAgaWYgKGMuY19zdCA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgIm5vIHN5bXRhYmxlIik7CkBAIC0zMzksNiArMzM4LDIxIEBACiB9CiAKIFB5Q29kZU9iamVjdCAqCitQeUFTVF9Db21waWxlRXgobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIFB5Q29kZU9iamVjdCAqY287CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGNvID0gUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLCBmbGFncywgb3B0aW1pemUsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBjbzsKKworfQorCitQeUNvZGVPYmplY3QgKgogUHlOb2RlX0NvbXBpbGUoc3RydWN0IF9ub2RlICpuLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvID0gTlVMTDsKQEAgLTM2MCw4ICszNzQsNyBAQAogICAgICAgICBQeVN5bXRhYmxlX0ZyZWUoYy0+Y19zdCk7CiAgICAgaWYgKGMtPmNfZnV0dXJlKQogICAgICAgICBQeU9iamVjdF9GcmVlKGMtPmNfZnV0dXJlKTsKLSAgICBpZiAoYy0+Y19maWxlbmFtZV9vYmopCi0gICAgICAgIFB5X0RFQ1JFRihjLT5jX2ZpbGVuYW1lX29iaik7CisgICAgUHlfWERFQ1JFRihjLT5jX2ZpbGVuYW1lKTsKICAgICBQeV9ERUNSRUYoYy0+Y19zdGFjayk7CiB9CiAKQEAgLTM3NSw3ICszODgsNyBAQAogCiAgICAgbiA9IFB5TGlzdF9TaXplKGxpc3QpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZyhpKTsKKyAgICAgICAgdiA9IFB5TG9uZ19Gcm9tU3NpemVfdChpKTsKICAgICAgICAgaWYgKCF2KSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQwMyw3ICs0MTYsNyBAQAogKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RieXR5cGUoUHlPYmplY3QgKnNyYywgaW50IHNjb3BlX3R5cGUsIGludCBmbGFnLCBpbnQgb2Zmc2V0KQorZGljdGJ5dHlwZShQeU9iamVjdCAqc3JjLCBpbnQgc2NvcGVfdHlwZSwgaW50IGZsYWcsIFB5X3NzaXplX3Qgb2Zmc2V0KQogewogICAgIFB5X3NzaXplX3QgaSA9IG9mZnNldCwgc2NvcGUsIG51bV9rZXlzLCBrZXlfaTsKICAgICBQeU9iamVjdCAqaywgKnYsICpkZXN0ID0gUHlEaWN0X05ldygpOwpAQCAtNDM3LDcgKzQ1MCw3IEBACiAgICAgICAgIHNjb3BlID0gKHZpID4+IFNDT1BFX09GRlNFVCkgJiBTQ09QRV9NQVNLOwogCiAgICAgICAgIGlmIChzY29wZSA9PSBzY29wZV90eXBlIHx8IHZpICYgZmxhZykgewotICAgICAgICAgICAgUHlPYmplY3QgKnR1cGxlLCAqaXRlbSA9IFB5TG9uZ19Gcm9tTG9uZyhpKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSwgKml0ZW0gPSBQeUxvbmdfRnJvbVNzaXplX3QoaSk7CiAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNvcnRlZF9rZXlzKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVzdCk7CkBAIC01MzUsNiArNTQ4LDM3IEBACiAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICh1LT51X3N0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUpIHsKKyAgICAgICAgLyogQ29vayB1cCBhIGltcGxpY2l0IF9fY2xhc3NfXyBjZWxsLiAqLworICAgICAgICBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOworICAgICAgICBQeU9iamVjdCAqdHVwbGUsICpuYW1lLCAqemVybzsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgYXNzZXJ0KHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DTEFTUyk7CisgICAgICAgIGFzc2VydChQeURpY3RfU2l6ZSh1LT51X2NlbGx2YXJzKSA9PSAwKTsKKyAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fY2xhc3NfXyk7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdHVwbGUgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgUHlfVFlQRShuYW1lKSk7CisgICAgICAgIGlmICghdHVwbGUpIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgICAgIGlmICghemVybykgeworICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKHUtPnVfY2VsbHZhcnMsIHR1cGxlLCB6ZXJvKTsKKyAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgUHlfREVDUkVGKHplcm8pOworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB1LT51X2ZyZWV2YXJzID0gZGljdGJ5dHlwZSh1LT51X3N0ZS0+c3RlX3N5bWJvbHMsIEZSRUUsIERFRl9GUkVFX0NMQVNTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9TaXplKHUtPnVfY2VsbHZhcnMpKTsKQEAgLTU4MCwxMyArNjI0LDE4IEBACiAgICAgaWYgKGNvbXBpbGVyX3VzZV9uZXdfYmxvY2soYykgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAodS0+dV9zY29wZV90eXBlICE9IENPTVBJTEVSX1NDT1BFX01PRFVMRSkgeworICAgICAgICBpZiAoIWNvbXBpbGVyX3NldF9xdWFsbmFtZShjKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZAogY29tcGlsZXJfZXhpdF9zY29wZShzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7Ci0gICAgaW50IG47CisgICAgUHlfc3NpemVfdCBuOwogICAgIFB5T2JqZWN0ICpjYXBzdWxlOwogCiAgICAgYy0+Y19uZXN0bGV2ZWwtLTsKQEAgLTYwNyw1NyArNjU2LDc3IEBACiAKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqYykKK3N0YXRpYyBpbnQKK2NvbXBpbGVyX3NldF9xdWFsbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7Ci0gICAgUHlfc3NpemVfdCBzdGFja19zaXplLCBpOwogICAgIF9QeV9zdGF0aWNfc3RyaW5nKGRvdCwgIi4iKTsKLSAgICBfUHlfc3RhdGljX3N0cmluZyhsb2NhbHMsICI8bG9jYWxzPiIpOwotICAgIHN0cnVjdCBjb21waWxlcl91bml0ICp1OwotICAgIFB5T2JqZWN0ICpjYXBzdWxlLCAqbmFtZSwgKnNlcSwgKmRvdF9zdHIsICpsb2NhbHNfc3RyOworICAgIF9QeV9zdGF0aWNfc3RyaW5nKGRvdF9sb2NhbHMsICIuPGxvY2Fscz4iKTsKKyAgICBQeV9zc2l6ZV90IHN0YWNrX3NpemU7CisgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnUgPSBjLT51OworICAgIFB5T2JqZWN0ICpuYW1lLCAqYmFzZSwgKmRvdF9zdHIsICpkb3RfbG9jYWxzX3N0cjsKIAotICAgIHUgPSBjLT51OwotICAgIGlmICh1LT51X3F1YWxuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKHUtPnVfcXVhbG5hbWUpOwotICAgICAgICByZXR1cm4gdS0+dV9xdWFsbmFtZTsKLSAgICB9Ci0KLSAgICBzZXEgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChzZXEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KKyAgICBiYXNlID0gTlVMTDsKICAgICBzdGFja19zaXplID0gUHlMaXN0X0dFVF9TSVpFKGMtPmNfc3RhY2spOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdGFja19zaXplOyBpKyspIHsKLSAgICAgICAgY2Fwc3VsZSA9IFB5TGlzdF9HRVRfSVRFTShjLT5jX3N0YWNrLCBpKTsKLSAgICAgICAgdSA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUKTsKLSAgICAgICAgYXNzZXJ0KHUpOwotICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX01PRFVMRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIHUtPnVfbmFtZSkpCi0gICAgICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTikgewotICAgICAgICAgICAgbG9jYWxzX3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZsb2NhbHMpOwotICAgICAgICAgICAgaWYgKGxvY2Fsc19zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlcSwgbG9jYWxzX3N0cikpCi0gICAgICAgICAgICAgICAgZ290byBfZXJyb3I7CisgICAgYXNzZXJ0KHN0YWNrX3NpemUgPj0gMSk7CisgICAgaWYgKHN0YWNrX3NpemUgPiAxKSB7CisgICAgICAgIGludCBzY29wZSwgZm9yY2VfZ2xvYmFsID0gMDsKKyAgICAgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnBhcmVudDsKKyAgICAgICAgUHlPYmplY3QgKm1hbmdsZWQsICpjYXBzdWxlOworCisgICAgICAgIGNhcHN1bGUgPSBQeUxpc3RfR0VUX0lURU0oYy0+Y19zdGFjaywgc3RhY2tfc2l6ZSAtIDEpOworICAgICAgICBwYXJlbnQgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBDT01QSUxFUl9DQVBTVUxFX05BTUVfQ09NUElMRVJfVU5JVCk7CisgICAgICAgIGFzc2VydChwYXJlbnQpOworCisgICAgICAgIGlmICh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04gfHwgdS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0NMQVNTKSB7CisgICAgICAgICAgICBhc3NlcnQodS0+dV9uYW1lKTsKKyAgICAgICAgICAgIG1hbmdsZWQgPSBfUHlfTWFuZ2xlKHBhcmVudC0+dV9wcml2YXRlLCB1LT51X25hbWUpOworICAgICAgICAgICAgaWYgKCFtYW5nbGVkKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKHBhcmVudC0+dV9zdGUsIG1hbmdsZWQpOworICAgICAgICAgICAgUHlfREVDUkVGKG1hbmdsZWQpOworICAgICAgICAgICAgYXNzZXJ0KHNjb3BlICE9IEdMT0JBTF9JTVBMSUNJVCk7CisgICAgICAgICAgICBpZiAoc2NvcGUgPT0gR0xPQkFMX0VYUExJQ0lUKQorICAgICAgICAgICAgICAgIGZvcmNlX2dsb2JhbCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvcmNlX2dsb2JhbCkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OCisgICAgICAgICAgICAgICAgfHwgcGFyZW50LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfTEFNQkRBKSB7CisgICAgICAgICAgICAgICAgZG90X2xvY2Fsc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90X2xvY2Fscyk7CisgICAgICAgICAgICAgICAgaWYgKGRvdF9sb2NhbHNfc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGJhc2UgPSBQeVVuaWNvZGVfQ29uY2F0KHBhcmVudC0+dV9xdWFsbmFtZSwgZG90X2xvY2Fsc19zdHIpOworICAgICAgICAgICAgICAgIGlmIChiYXNlID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHBhcmVudC0+dV9xdWFsbmFtZSk7CisgICAgICAgICAgICAgICAgYmFzZSA9IHBhcmVudC0+dV9xdWFsbmFtZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICB1ID0gYy0+dTsKLSAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIHUtPnVfbmFtZSkpCi0gICAgICAgIGdvdG8gX2Vycm9yOwotICAgIGRvdF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90KTsKLSAgICBpZiAoZG90X3N0ciA9PSBOVUxMKQotICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICBuYW1lID0gUHlVbmljb2RlX0pvaW4oZG90X3N0ciwgc2VxKTsKLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICB1LT51X3F1YWxuYW1lID0gbmFtZTsKLSAgICBQeV9YSU5DUkVGKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwogCi1fZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihzZXEpOwotICAgIHJldHVybiBOVUxMOworICAgIGlmIChiYXNlICE9IE5VTEwpIHsKKyAgICAgICAgZG90X3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZkb3QpOworICAgICAgICBpZiAoZG90X3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gUHlVbmljb2RlX0NvbmNhdChiYXNlLCBkb3Rfc3RyKTsKKyAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFB5VW5pY29kZV9BcHBlbmQoJm5hbWUsIHUtPnVfbmFtZSk7CisgICAgICAgIGlmIChuYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRih1LT51X25hbWUpOworICAgICAgICBuYW1lID0gdS0+dV9uYW1lOworICAgIH0KKyAgICB1LT51X3F1YWxuYW1lID0gbmFtZTsKKworICAgIHJldHVybiAxOwogfQogCiAvKiBBbGxvY2F0ZSBhIG5ldyBibG9jayBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4KQEAgLTc4NCw4ICs4NTMsOCBAQAogICAgIGItPmJfaW5zdHJbb2ZmXS5pX2xpbmVubyA9IGMtPnUtPnVfbGluZW5vOwogfQogCi1zdGF0aWMgaW50Ci1vcGNvZGVfc3RhY2tfZWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZykKK2ludAorUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZykKIHsKICAgICBzd2l0Y2ggKG9wY29kZSkgewogICAgICAgICBjYXNlIFBPUF9UT1A6CkBAIC04NjIsOCArOTMxLDYgQEAKICAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKICAgICAgICAgICAgIHJldHVybiAtMTsgLyogWFhYIFNvbWV0aW1lcyBtb3JlICovCi0gICAgICAgIGNhc2UgU1RPUkVfTE9DQUxTOgotICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIFJFVFVSTl9WQUxVRToKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBJTVBPUlRfU1RBUjoKQEAgLTk3MCwxNyArMTAzNywxNiBAQAogICAgICAgICBjYXNlIExPQURfQ0xPU1VSRToKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIExPQURfREVSRUY6CisgICAgICAgIGNhc2UgTE9BRF9DTEFTU0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgU1RPUkVfREVSRUY6CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgREVMRVRFX0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wY29kZSA9ICVkXG4iLCBvcGNvZGUpOwotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigib3Bjb2RlX3N0YWNrX2VmZmVjdCgpIik7Ci0KKyAgICAgICAgICAgIHJldHVybiBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVDsKICAgICB9Ci0gICAgcmV0dXJuIDA7IC8qIG5vdCByZWFjaGFibGUgKi8KKyAgICByZXR1cm4gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1Q7IC8qIG5vdCByZWFjaGFibGUgKi8KIH0KIAogLyogQWRkIGFuIG9wY29kZSB3aXRoIG5vIGFyZ3VtZW50LgpAQCAtMTAwNiw3ICsxMDcyLDcgQEAKICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIFB5X3NzaXplX3QKIGNvbXBpbGVyX2FkZF9vKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICpvKQogewogICAgIFB5T2JqZWN0ICp0LCAqdjsKQEAgLTEwNjAsNyArMTEyNiw3IEBACiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBhcmcgPSBQeURpY3RfU2l6ZShkaWN0KTsKLSAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZyhhcmcpOworICAgICAgICB2ID0gUHlMb25nX0Zyb21Tc2l6ZV90KGFyZyk7CiAgICAgICAgIGlmICghdikgewogICAgICAgICAgICAgUHlfREVDUkVGKHQpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTA4Miw3ICsxMTQ4LDcgQEAKIGNvbXBpbGVyX2FkZG9wX28oc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBQeU9iamVjdCAqZGljdCwKICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvKQogewotICAgIGludCBhcmcgPSBjb21waWxlcl9hZGRfbyhjLCBkaWN0LCBvKTsKKyAgICBQeV9zc2l6ZV90IGFyZyA9IGNvbXBpbGVyX2FkZF9vKGMsIGRpY3QsIG8pOwogICAgIGlmIChhcmcgPCAwKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY29tcGlsZXJfYWRkb3BfaShjLCBvcGNvZGUsIGFyZyk7CkBAIC0xMDkyLDcgKzExNTgsNyBAQAogY29tcGlsZXJfYWRkb3BfbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpkaWN0LAogICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbykKIHsKLSAgICBpbnQgYXJnOworICAgIFB5X3NzaXplX3QgYXJnOwogICAgIFB5T2JqZWN0ICptYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIG8pOwogICAgIGlmICghbWFuZ2xlZCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTA4LDE2ICsxMTc0LDIyIEBACiAqLwogCiBzdGF0aWMgaW50Ci1jb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9wY29kZSwgaW50IG9wYXJnKQorY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5X3NzaXplX3Qgb3BhcmcpCiB7CiAgICAgc3RydWN0IGluc3RyICppOwogICAgIGludCBvZmY7CisKKyAgICAvKiBJbnRlZ2VyIGFyZ3VtZW50cyBhcmUgbGltaXQgdG8gMTYtYml0LiBUaGVyZSBpcyBhbiBleHRlbnNpb24gZm9yIDMyLWJpdAorICAgICAgIGludGVnZXIgYXJndW1lbnRzLiAqLworICAgIGFzc2VydCgoLTIxNDc0ODM2NDctMSkgPD0gb3BhcmcpOworICAgIGFzc2VydChvcGFyZyA8PSAyMTQ3NDgzNjQ3KTsKKwogICAgIG9mZiA9IGNvbXBpbGVyX25leHRfaW5zdHIoYywgYy0+dS0+dV9jdXJibG9jayk7CiAgICAgaWYgKG9mZiA8IDApCiAgICAgICAgIHJldHVybiAwOwogICAgIGkgPSAmYy0+dS0+dV9jdXJibG9jay0+Yl9pbnN0cltvZmZdOwogICAgIGktPmlfb3Bjb2RlID0gb3Bjb2RlOwotICAgIGktPmlfb3BhcmcgPSBvcGFyZzsKKyAgICBpLT5pX29wYXJnID0gUHlfU0FGRV9ET1dOQ0FTVChvcGFyZywgUHlfc3NpemVfdCwgaW50KTsKICAgICBpLT5pX2hhc2FyZyA9IDE7CiAgICAgY29tcGlsZXJfc2V0X2xpbmVubyhjLCBvZmYpOwogICAgIHJldHVybiAxOwpAQCAtMTMzMCwxNiArMTQwMiwxOSBAQAogc3RhdGljIGludAogZ2V0X3JlZl90eXBlKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgaW50IHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbmFtZSk7CisgICAgaW50IHNjb3BlOworICAgIGlmIChjLT51LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MgJiYKKyAgICAgICAgIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2NsYXNzX18iKSkKKyAgICAgICAgcmV0dXJuIENFTEw7CisgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKGMtPnUtPnVfc3RlLCBuYW1lKTsKICAgICBpZiAoc2NvcGUgPT0gMCkgewogICAgICAgICBjaGFyIGJ1ZlszNTBdOwogICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpIGluICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpXG4iCiAgICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHM6ICVzXG5sb2NhbHM6ICVzXG5nbG9iYWxzOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcobmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYy0+dS0+dV9uYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfc3RlLT5zdGVfaWQpLAotICAgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3N0ZS0+c3RlX3N5bWJvbHMpLAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV92YXJuYW1lcyksCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X25hbWVzKQpAQCAtMTM2NSw5ICsxNDQwLDkgQEAKIH0KIAogc3RhdGljIGludAotY29tcGlsZXJfbWFrZV9jbG9zdXJlKHN0cnVjdCBjb21waWxlciAqYywgUHlDb2RlT2JqZWN0ICpjbywgaW50IGFyZ3MsIFB5T2JqZWN0ICpxdWFsbmFtZSkKK2NvbXBpbGVyX21ha2VfY2xvc3VyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5Q29kZU9iamVjdCAqY28sIFB5X3NzaXplX3QgYXJncywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIGludCBpLCBmcmVlID0gUHlDb2RlX0dldE51bUZyZWUoY28pOworICAgIFB5X3NzaXplX3QgaSwgZnJlZSA9IFB5Q29kZV9HZXROdW1GcmVlKGNvKTsKICAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCkKICAgICAgICAgcXVhbG5hbWUgPSBjby0+Y29fbmFtZTsKIApAQCAtMTQ1Nyw5ICsxNTMyLDE2IEBACiAgICAgZXhwcl90eSBhbm5vdGF0aW9uLCBQeU9iamVjdCAqbmFtZXMpCiB7CiAgICAgaWYgKGFubm90YXRpb24pIHsKKyAgICAgICAgUHlPYmplY3QgKm1hbmdsZWQ7CiAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGFubm90YXRpb24pOwotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChuYW1lcywgaWQpKQorICAgICAgICBtYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIGlkKTsKKyAgICAgICAgaWYgKCFtYW5nbGVkKQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChuYW1lcywgbWFuZ2xlZCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobWFuZ2xlZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG1hbmdsZWQpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTE0OTQsMjIgKzE1NzYsMjIgQEAKICAgICAgICAqLwogICAgIHN0YXRpYyBpZGVudGlmaWVyIHJldHVybl9zdHI7CiAgICAgUHlPYmplY3QgKm5hbWVzOwotICAgIGludCBsZW47CisgICAgUHlfc3NpemVfdCBsZW47CiAgICAgbmFtZXMgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmICghbmFtZXMpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9ucyhjLCBhcmdzLT5hcmdzLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24gJiYKLSAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT52YXJhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+dmFyYXJnYW5ub3RhdGlvbiwgbmFtZXMpKQorICAgIGlmIChhcmdzLT52YXJhcmcgJiYgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uICYmCisgICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+dmFyYXJnLT5hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKGMsIGFyZ3MtPmt3b25seWFyZ3MsIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoYXJncy0+a3dhcmdhbm5vdGF0aW9uICYmCi0gICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+a3dhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dhcmdhbm5vdGF0aW9uLCBuYW1lcykpCisgICAgaWYgKGFyZ3MtPmt3YXJnICYmIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uICYmCisgICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+a3dhcmctPmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiwgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKCFyZXR1cm5fc3RyKSB7CkBAIC0xNTMxLDcgKzE2MTMsNyBAQAogICAgIGlmIChsZW4pIHsKICAgICAgICAgLyogY29udmVydCBuYW1lcyB0byBhIHR1cGxlIGFuZCBwbGFjZSBvbiBzdGFjayAqLwogICAgICAgICBQeU9iamVjdCAqZWx0OwotICAgICAgICBpbnQgaTsKKyAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBQeU9iamVjdCAqcyA9IFB5VHVwbGVfTmV3KGxlbik7CiAgICAgICAgIGlmICghcykKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xNTQ1LDcgKzE2MjcsOSBAQAogICAgICAgICBsZW4rKzsgLyogaW5jbHVkZSB0aGUganVzdC1wdXNoZWQgdHVwbGUgKi8KICAgICB9CiAgICAgUHlfREVDUkVGKG5hbWVzKTsKLSAgICByZXR1cm4gbGVuOworCisgICAgLyogV2UganVzdCBjaGVja2VkIHRoYXQgbGVuIDw9IDY1NTM1LCBzZWUgYWJvdmUgKi8KKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChsZW4sIFB5X3NzaXplX3QsIGludCk7CiAKIGVycm9yOgogICAgIFB5X0RFQ1JFRihuYW1lcyk7CkBAIC0xNTYxLDEzICsxNjQ1LDE2IEBACiAgICAgZXhwcl90eSByZXR1cm5zID0gcy0+di5GdW5jdGlvbkRlZi5yZXR1cm5zOwogICAgIGFzZGxfc2VxKiBkZWNvcyA9IHMtPnYuRnVuY3Rpb25EZWYuZGVjb3JhdG9yX2xpc3Q7CiAgICAgc3RtdF90eSBzdDsKLSAgICBpbnQgaSwgbiwgZG9jc3RyaW5nLCBrd19kZWZhdWx0X2NvdW50ID0gMCwgYXJnbGVuZ3RoOworICAgIFB5X3NzaXplX3QgaSwgbiwgYXJnbGVuZ3RoOworICAgIGludCBkb2NzdHJpbmcsIGt3X2RlZmF1bHRfY291bnQgPSAwOwogICAgIGludCBudW1fYW5ub3RhdGlvbnM7CiAKICAgICBhc3NlcnQocy0+a2luZCA9PSBGdW5jdGlvbkRlZl9raW5kKTsKIAogICAgIGlmICghY29tcGlsZXJfZGVjb3JhdG9ycyhjLCBkZWNvcykpCiAgICAgICAgIHJldHVybiAwOworICAgIGlmIChhcmdzLT5kZWZhdWx0cykKKyAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBpZiAoYXJncy0+a3dvbmx5YXJncykgewogICAgICAgICBpbnQgcmVzID0gY29tcGlsZXJfdmlzaXRfa3dvbmx5ZGVmYXVsdHMoYywgYXJncy0+a3dvbmx5YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3X2RlZmF1bHRzKTsKQEAgLTE1NzUsOCArMTY2Miw2IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlczsKICAgICB9Ci0gICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQotICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwogICAgIG51bV9hbm5vdGF0aW9ucyA9IGNvbXBpbGVyX3Zpc2l0X2Fubm90YXRpb25zKGMsIGFyZ3MsIHJldHVybnMpOwogICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPCAwKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE2MDUsOSArMTY5MCwxMCBAQAogICAgICAgICBWSVNJVF9JTl9TQ09QRShjLCBzdG10LCBzdCk7CiAgICAgfQogICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgcXVhbG5hbWUgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKKyAgICBxdWFsbmFtZSA9IGMtPnUtPnVfcXVhbG5hbWU7CisgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMIHx8IGNvID09IE5VTEwpIHsKKyAgICBpZiAoY28gPT0gTlVMTCkgewogICAgICAgICBQeV9YREVDUkVGKHF1YWxuYW1lKTsKICAgICAgICAgUHlfWERFQ1JFRihjbyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY2MSwxMiArMTc0Nyw2IEBACiAgICAgICAgIFB5X0lOQ1JFRihzLT52LkNsYXNzRGVmLm5hbWUpOwogICAgICAgICBQeV9YREVDUkVGKGMtPnUtPnVfcHJpdmF0ZSk7CiAgICAgICAgIGMtPnUtPnVfcHJpdmF0ZSA9IHMtPnYuQ2xhc3NEZWYubmFtZTsKLSAgICAgICAgLyogZm9yY2UgaXQgdG8gaGF2ZSBvbmUgbWFuZGF0b3J5IGFyZ3VtZW50ICovCi0gICAgICAgIGMtPnUtPnVfYXJnY291bnQgPSAxOwotICAgICAgICAvKiBsb2FkIHRoZSBmaXJzdCBhcmd1bWVudCAoX19sb2NhbHNfXykgLi4uICovCi0gICAgICAgIEFERE9QX0koYywgTE9BRF9GQVNULCAwKTsKLSAgICAgICAgLyogLi4uIGFuZCBzdG9yZSBpdCBpbnRvIGZfbG9jYWxzICovCi0gICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFNUT1JFX0xPQ0FMUyk7CiAgICAgICAgIC8qIGxvYWQgKGdsb2JhbCkgX19uYW1lX18gLi4uICovCiAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOwogICAgICAgICBpZiAoIXN0ciB8fCAhY29tcGlsZXJfbmFtZW9wKGMsIHN0ciwgTG9hZCkpIHsKQEAgLTE2ODMsMTQgKzE3NjMsOCBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgIC8qIHN0b3JlIHRoZSBfX3F1YWxuYW1lX18gKi8KLSAgICAgICAgc3RyID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7Ci0gICAgICAgIGlmICghc3RyKSB7Ci0gICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBzdHIsIGNvbnN0cyk7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICBhc3NlcnQoYy0+dS0+dV9xdWFsbmFtZSk7CisgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgYy0+dS0+dV9xdWFsbmFtZSwgY29uc3RzKTsKICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcXVhbG5hbWVfXyIpOwogICAgICAgICBpZiAoIXN0ciB8fCAhY29tcGlsZXJfbmFtZW9wKGMsIHN0ciwgU3RvcmUpKSB7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHN0cik7CkBAIC0xNzAzLDI0ICsxNzc3LDI4IEBACiAgICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgLyogcmV0dXJuIHRoZSAoZW1wdHkpIF9fY2xhc3NfXyBjZWxsICovCi0gICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NsYXNzX18iKTsKLSAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaSA9IGNvbXBpbGVyX2xvb2t1cF9hcmcoYy0+dS0+dV9jZWxsdmFycywgc3RyKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgIGlmIChpID09IC0xKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgd2hlbiBub2JvZHkgcmVmZXJlbmNlcyB0aGUgY2VsbCAqLwotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIC8qIFJldHVybiBOb25lICovCi0gICAgICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X05vbmUsIGNvbnN0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChjLT51LT51X3N0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUpIHsKKyAgICAgICAgICAgIC8qIHJldHVybiB0aGUgKGVtcHR5KSBfX2NsYXNzX18gY2VsbCAqLworICAgICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fY2xhc3NfXyIpOworICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBjb21waWxlcl9sb29rdXBfYXJnKGMtPnUtPnVfY2VsbHZhcnMsIHN0cik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQoaSA9PSAwKTsKICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgY2VsbCB3aGVyZSB0byBzdG9yZSBfX2NsYXNzX18gKi8KICAgICAgICAgICAgIEFERE9QX0koYywgTE9BRF9DTE9TVVJFLCBpKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfU2l6ZShjLT51LT51X2NlbGx2YXJzKSA9PSAwKTsKKyAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyB3aGVuIG5vYm9keSByZWZlcmVuY2VzIHRoZSBjZWxsLiBSZXR1cm4gTm9uZS4gKi8KKyAgICAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKKyAgICAgICAgfQogICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOwogICAgICAgICAvKiBjcmVhdGUgdGhlIGNvZGUgb2JqZWN0ICovCiAgICAgICAgIGNvID0gYXNzZW1ibGUoYywgMSk7CkBAIC0xNzg3LDcgKzE4NjUsOCBAQAogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlPYmplY3QgKnF1YWxuYW1lOwogICAgIHN0YXRpYyBpZGVudGlmaWVyIG5hbWU7Ci0gICAgaW50IGt3X2RlZmF1bHRfY291bnQgPSAwLCBhcmdsZW5ndGg7CisgICAgaW50IGt3X2RlZmF1bHRfY291bnQgPSAwOworICAgIFB5X3NzaXplX3QgYXJnbGVuZ3RoOwogICAgIGFyZ3VtZW50c190eSBhcmdzID0gZS0+di5MYW1iZGEuYXJnczsKICAgICBhc3NlcnQoZS0+a2luZCA9PSBMYW1iZGFfa2luZCk7CiAKQEAgLTE3OTcsMTUgKzE4NzYsMTUgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIGlmIChhcmdzLT5kZWZhdWx0cykKKyAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBpZiAoYXJncy0+a3dvbmx5YXJncykgewogICAgICAgICBpbnQgcmVzID0gY29tcGlsZXJfdmlzaXRfa3dvbmx5ZGVmYXVsdHMoYywgYXJncy0+a3dvbmx5YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3X2RlZmF1bHRzKTsKICAgICAgICAgaWYgKHJlcyA8IDApIHJldHVybiAwOwogICAgICAgICBrd19kZWZhdWx0X2NvdW50ID0gcmVzOwogICAgIH0KLSAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCi0gICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7Ci0gICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCBDT01QSUxFUl9TQ09QRV9GVU5DVElPTiwKKyAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIG5hbWUsIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZSwgZS0+bGluZW5vKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTE4MjQsOSArMTkwMywxMCBAQAogICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOwogICAgIH0KICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKQorICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGFyZ2xlbmd0aCA9IGFzZGxfc2VxX0xFTihhcmdzLT5kZWZhdWx0cyk7CkBAIC0yMDk3LDcgKzIxNzcsNyBAQAogY29tcGlsZXJfdHJ5X2V4Y2VwdChzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKICAgICBiYXNpY2Jsb2NrICpib2R5LCAqb3JlbHNlLCAqZXhjZXB0LCAqZW5kOwotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIGJvZHkgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgZXhjZXB0ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwpAQCAtMjI2Myw3ICsyMzQzLDcgQEAKICAgICAgICBtb2R1bGUgbmFtZXMuCiAgICAgICAgWFhYIFBlcmhhcHMgY2hhbmdlIHRoZSByZXByZXNlbnRhdGlvbiB0byBtYWtlIHRoaXMgY2FzZSBzaW1wbGVyPwogICAgICAqLwotICAgIGludCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0Lm5hbWVzKTsKKyAgICBQeV9zc2l6ZV90IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnQubmFtZXMpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICBhbGlhc190eSBhbGlhcyA9IChhbGlhc190eSlhc2RsX3NlcV9HRVQocy0+di5JbXBvcnQubmFtZXMsIGkpOwpAQCAtMjI4OCw4ICsyMzY4LDExIEBACiAgICAgICAgICAgICBpZGVudGlmaWVyIHRtcCA9IGFsaWFzLT5uYW1lOwogICAgICAgICAgICAgUHlfc3NpemVfdCBkb3QgPSBQeVVuaWNvZGVfRmluZENoYXIoCiAgICAgICAgICAgICAgICAgYWxpYXMtPm5hbWUsICcuJywgMCwgUHlVbmljb2RlX0dFVF9MRU5HVEgoYWxpYXMtPm5hbWUpLCAxKTsKLSAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpCisgICAgICAgICAgICBpZiAoZG90ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgdG1wID0gUHlVbmljb2RlX1N1YnN0cmluZyhhbGlhcy0+bmFtZSwgMCwgZG90KTsKKyAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgciA9IGNvbXBpbGVyX25hbWVvcChjLCB0bXAsIFN0b3JlKTsKICAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKQEAgLTIzMDQsNyArMjM4Nyw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9mcm9tX2ltcG9ydChzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKLSAgICBpbnQgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydEZyb20ubmFtZXMpOworICAgIFB5X3NzaXplX3QgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydEZyb20ubmFtZXMpOwogCiAgICAgUHlPYmplY3QgKm5hbWVzID0gUHlUdXBsZV9OZXcobik7CiAgICAgUHlPYmplY3QgKmxldmVsOwpAQCAtMjM4MCw2ICsyNDYzLDcgQEAKIHsKICAgICBzdGF0aWMgUHlPYmplY3QgKmFzc2VydGlvbl9lcnJvciA9IE5VTEw7CiAgICAgYmFzaWNibG9jayAqZW5kOworICAgIFB5T2JqZWN0KiBtc2c7CiAKICAgICBpZiAoYy0+Y19vcHRpbWl6ZSkKICAgICAgICAgcmV0dXJuIDE7CkBAIC0yMzkwLDExICsyNDc0LDE3IEBACiAgICAgfQogICAgIGlmIChzLT52LkFzc2VydC50ZXN0LT5raW5kID09IFR1cGxlX2tpbmQgJiYKICAgICAgICAgYXNkbF9zZXFfTEVOKHMtPnYuQXNzZXJ0LnRlc3QtPnYuVHVwbGUuZWx0cykgPiAwKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG1zZyA9Ci0gICAgICAgICAgICAiYXNzZXJ0aW9uIGlzIGFsd2F5cyB0cnVlLCBwZXJoYXBzIHJlbW92ZSBwYXJlbnRoZXNlcz8iOwotICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1zZywgYy0+Y19maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT51LT51X2xpbmVubywgTlVMTCwgTlVMTCkgPT0gLTEpCisgICAgICAgIG1zZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJhc3NlcnRpb24gaXMgYWx3YXlzIHRydWUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcmhhcHMgcmVtb3ZlIHBhcmVudGhlc2VzPyIpOworICAgICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCkgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtc2cpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG1zZyk7CiAgICAgfQogICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuQXNzZXJ0LnRlc3QpOwogICAgIGVuZCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKQEAgLTI0MTQsNyArMjUwNCw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl92aXNpdF9zdG10KHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQogewotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIC8qIEFsd2F5cyBhc3NpZ24gYSBsaW5lbm8gdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24gZm9yIGEgc3RtdC4gKi8KICAgICBjLT51LT51X2xpbmVubyA9IHMtPmxpbmVubzsKQEAgLTI0NjIsMTIgKzI1NTIsMTIgQEAKICAgICAgICAgaWYgKHMtPnYuUmFpc2UuZXhjKSB7CiAgICAgICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LlJhaXNlLmV4Yyk7CiAgICAgICAgICAgICBuKys7Ci0gICAgICAgIGlmIChzLT52LlJhaXNlLmNhdXNlKSB7Ci0gICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuUmFpc2UuY2F1c2UpOwotICAgICAgICBuKys7CisgICAgICAgICAgICBpZiAocy0+di5SYWlzZS5jYXVzZSkgeworICAgICAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuUmFpc2UuY2F1c2UpOworICAgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEFERE9QX0koYywgUkFJU0VfVkFSQVJHUywgbik7CisgICAgICAgIEFERE9QX0koYywgUkFJU0VfVkFSQVJHUywgKGludCluKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUcnlfa2luZDoKICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX3RyeShjLCBzKTsKQEAgLTI2MjcsNyArMjcxNyw4IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9uYW1lb3Aoc3RydWN0IGNvbXBpbGVyICpjLCBpZGVudGlmaWVyIG5hbWUsIGV4cHJfY29udGV4dF90eSBjdHgpCiB7Ci0gICAgaW50IG9wLCBzY29wZSwgYXJnOworICAgIGludCBvcCwgc2NvcGU7CisgICAgUHlfc3NpemVfdCBhcmc7CiAgICAgZW51bSB7IE9QX0ZBU1QsIE9QX0dMT0JBTCwgT1BfREVSRUYsIE9QX05BTUUgfSBvcHR5cGU7CiAKICAgICBQeU9iamVjdCAqZGljdCA9IGMtPnUtPnVfbmFtZXM7CkBAIC0yNjM4LDYgKzI3MjksMTAgQEAKICAgICBpZiAoIW1hbmdsZWQpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgYXNzZXJ0KFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJOb25lIikgJiYKKyAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIlRydWUiKSAmJgorICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiRmFsc2UiKSk7CisKICAgICBvcCA9IDA7CiAgICAgb3B0eXBlID0gT1BfTkFNRTsKICAgICBzY29wZSA9IFB5U1RfR2V0U2NvcGUoYy0+dS0+dV9zdGUsIG1hbmdsZWQpOwpAQCAtMjY3Myw3ICsyNzY4LDkgQEAKICAgICBzd2l0Y2ggKG9wdHlwZSkgewogICAgIGNhc2UgT1BfREVSRUY6CiAgICAgICAgIHN3aXRjaCAoY3R4KSB7Ci0gICAgICAgIGNhc2UgTG9hZDogb3AgPSBMT0FEX0RFUkVGOyBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgb3AgPSAoYy0+dS0+dV9zdGUtPnN0ZV90eXBlID09IENsYXNzQmxvY2spID8gTE9BRF9DTEFTU0RFUkVGIDogTE9BRF9ERVJFRjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlOiBvcCA9IFNUT1JFX0RFUkVGOyBicmVhazsKICAgICAgICAgY2FzZSBBdWdMb2FkOgogICAgICAgICBjYXNlIEF1Z1N0b3JlOgpAQCAtMjc0Nyw3ICsyODQ0LDggQEAKIGNvbXBpbGVyX2Jvb2xvcChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKICAgICBiYXNpY2Jsb2NrICplbmQ7Ci0gICAgaW50IGp1bXBpLCBpLCBuOworICAgIGludCBqdW1waTsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgYXNkbF9zZXEgKnM7CiAKICAgICBhc3NlcnQoZS0+a2luZCA9PSBCb29sT3Bfa2luZCk7CkBAIC0yNzczLDcgKzI4NzEsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfbGlzdChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgbiA9IGFzZGxfc2VxX0xFTihlLT52Lkxpc3QuZWx0cyk7CisgICAgUHlfc3NpemVfdCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuTGlzdC5lbHRzKTsKICAgICBpZiAoZS0+di5MaXN0LmN0eCA9PSBTdG9yZSkgewogICAgICAgICBpbnQgaSwgc2Vlbl9zdGFyID0gMDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMjgwNiw3ICsyOTA0LDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3R1cGxlKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuVHVwbGUuZWx0cyk7CisgICAgUHlfc3NpemVfdCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuVHVwbGUuZWx0cyk7CiAgICAgaWYgKGUtPnYuVHVwbGUuY3R4ID09IFN0b3JlKSB7CiAgICAgICAgIGludCBpLCBzZWVuX3N0YXIgPSAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0yODM5LDcgKzI5MzcsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfY29tcGFyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgYmFzaWNibG9jayAqY2xlYW51cCA9IE5VTEw7CiAKICAgICAvKiBYWFggdGhlIGxvZ2ljIGNhbiBiZSBjbGVhbmVkIHVwIGZvciAxIG9yIG11bHRpcGxlIGNvbXBhcmlzb25zICovCkBAIC0yODk1LDExICsyOTkzLDExIEBACiAvKiBzaGFyZWQgY29kZSBiZXR3ZWVuIGNvbXBpbGVyX2NhbGwgYW5kIGNvbXBpbGVyX2NsYXNzICovCiBzdGF0aWMgaW50CiBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbiwgLyogQXJncyBhbHJlYWR5IHB1c2hlZCAqLwotICAgICAgICAgICAgIGFzZGxfc2VxICphcmdzLAotICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKLSAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAotICAgICAgICAgICAgIGV4cHJfdHkga3dhcmdzKQorICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuLCAvKiBBcmdzIGFscmVhZHkgcHVzaGVkICovCisgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGt3YXJncykKIHsKICAgICBpbnQgY29kZSA9IDA7CiAKQEAgLTI5NjAsNyArMzA1OCw3IEBACiAKICAgICBjb21wcmVoZW5zaW9uX3R5IGdlbjsKICAgICBiYXNpY2Jsb2NrICpzdGFydCwgKmFuY2hvciwgKnNraXAsICppZl9jbGVhbnVwOwotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIHN0YXJ0ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIHNraXAgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CkBAIC0zMDg1LDkgKzMxODMsMTAgQEAKICAgICB9CiAKICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKQorICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKCFjb21waWxlcl9tYWtlX2Nsb3N1cmUoYywgY28sIDAsIHF1YWxuYW1lKSkKQEAgLTMxOTcsMTIgKzMyOTYsMTggQEAKICAgICBjYXNlIE5hbWVfa2luZDoKICAgICAgICAgLyogb3B0aW1pemUgYXdheSBuYW1lcyB0aGF0IGNhbid0IGJlIHJlYXNzaWduZWQgKi8KICAgICAgICAgaWQgPSBQeVVuaWNvZGVfQXNVVEY4KGUtPnYuTmFtZS5pZCk7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJUcnVlIikgPT0gMCkgcmV0dXJuIDE7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJGYWxzZSIpID09IDApIHJldHVybiAwOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiTm9uZSIpID09IDApIHJldHVybiAwOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiX19kZWJ1Z19fIikgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAhIGMtPmNfb3B0aW1pemU7Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICBpZiAoaWQgJiYgc3RyY21wKGlkLCAiX19kZWJ1Z19fIikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAhYy0+Y19vcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6IHsKKyAgICAgICAgUHlPYmplY3QgKm8gPSBlLT52Lk5hbWVDb25zdGFudC52YWx1ZTsKKyAgICAgICAgaWYgKG8gPT0gUHlfTm9uZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlIGlmIChvID09IFB5X1RydWUpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZWxzZSBpZiAobyA9PSBQeV9GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMzI5Miw3ICszMzk3LDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3Zpc2l0X2V4cHIoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgLyogSWYgZXhwciBlIGhhcyBhIGRpZmZlcmVudCBsaW5lIG51bWJlciB0aGFuIHRoZSBsYXN0IGV4cHIvc3RtdCwKICAgICAgICBzZXQgYSBuZXcgbGluZSBudW1iZXIgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uLgpAQCAtMzMyMSw2ICszNDI2LDggQEAKICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2lmZXhwKGMsIGUpOwogICAgIGNhc2UgRGljdF9raW5kOgogICAgICAgICBuID0gYXNkbF9zZXFfTEVOKGUtPnYuRGljdC52YWx1ZXMpOworICAgICAgICAvKiBCVUlMRF9NQVAgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCB0byBwcmVhbGxvY2F0ZSB0aGUgZGljdGlvbmFyeSwKKyAgICAgICAgICAgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGV4YWN0ICovCiAgICAgICAgIEFERE9QX0koYywgQlVJTERfTUFQLCAobj4weEZGRkYgPyAweEZGRkYgOiBuKSk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsCkBAIC0zMzc4LDYgKzM0ODUsOSBAQAogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9FbGxpcHNpcywgY29uc3RzKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKKyAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBlLT52Lk5hbWVDb25zdGFudC52YWx1ZSwgY29uc3RzKTsKKyAgICAgICAgYnJlYWs7CiAgICAgLyogVGhlIGZvbGxvd2luZyBleHBycyBjYW4gYmUgYXNzaWdubWVudCB0YXJnZXRzLiAqLwogICAgIGNhc2UgQXR0cmlidXRlX2tpbmQ6CiAgICAgICAgIGlmIChlLT52LkF0dHJpYnV0ZS5jdHggIT0gQXVnU3RvcmUpCkBAIC0zNTQ3LDEyICszNjU3LDEyIEBACiAgICAgUHlPYmplY3QgKmxvYzsKICAgICBQeU9iamVjdCAqdSA9IE5VTEwsICp2ID0gTlVMTDsKIAotICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0KGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vKTsKKyAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubyk7CiAgICAgaWYgKCFsb2MpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICBsb2MgPSBQeV9Ob25lOwogICAgIH0KLSAgICB1ID0gUHlfQnVpbGRWYWx1ZSgiKE9paU8pIiwgYy0+Y19maWxlbmFtZV9vYmosIGMtPnUtPnVfbGluZW5vLAorICAgIHUgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTykiLCBjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubywKICAgICAgICAgICAgICAgICAgICAgICBjLT51LT51X2NvbF9vZmZzZXQsIGxvYyk7CiAgICAgaWYgKCF1KQogICAgICAgICBnb3RvIGV4aXQ7CkBAIC0zNjY1LDcgKzM3NzUsNyBAQAogICAgIGNhc2UgRXh0U2xpY2Vfa2luZDoKICAgICAgICAga2luZG5hbWUgPSAiZXh0ZW5kZWQgc2xpY2UiOwogICAgICAgICBpZiAoY3R4ICE9IEF1Z1N0b3JlKSB7Ci0gICAgICAgICAgICBpbnQgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkV4dFNsaWNlLmRpbXMpOworICAgICAgICAgICAgUHlfc3NpemVfdCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuRXh0U2xpY2UuZGltcyk7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc2xpY2VfdHkgc3ViID0gKHNsaWNlX3R5KWFzZGxfc2VxX0dFVCgKICAgICAgICAgICAgICAgICAgICAgcy0+di5FeHRTbGljZS5kaW1zLCBpKTsKQEAgLTM3MjQsNyArMzgzNCw3IEBACiBzdGF0aWMgaW50CiBzdGFja2RlcHRoX3dhbGsoc3RydWN0IGNvbXBpbGVyICpjLCBiYXNpY2Jsb2NrICpiLCBpbnQgZGVwdGgsIGludCBtYXhkZXB0aCkKIHsKLSAgICBpbnQgaSwgdGFyZ2V0X2RlcHRoOworICAgIGludCBpLCB0YXJnZXRfZGVwdGgsIGVmZmVjdDsKICAgICBzdHJ1Y3QgaW5zdHIgKmluc3RyOwogICAgIGlmIChiLT5iX3NlZW4gfHwgYi0+Yl9zdGFydGRlcHRoID49IGRlcHRoKQogICAgICAgICByZXR1cm4gbWF4ZGVwdGg7CkBAIC0zNzMyLDcgKzM4NDIsMTMgQEAKICAgICBiLT5iX3N0YXJ0ZGVwdGggPSBkZXB0aDsKICAgICBmb3IgKGkgPSAwOyBpIDwgYi0+Yl9pdXNlZDsgaSsrKSB7CiAgICAgICAgIGluc3RyID0gJmItPmJfaW5zdHJbaV07Ci0gICAgICAgIGRlcHRoICs9IG9wY29kZV9zdGFja19lZmZlY3QoaW5zdHItPmlfb3Bjb2RlLCBpbnN0ci0+aV9vcGFyZyk7CisgICAgICAgIGVmZmVjdCA9IFB5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdChpbnN0ci0+aV9vcGNvZGUsIGluc3RyLT5pX29wYXJnKTsKKyAgICAgICAgaWYgKGVmZmVjdCA9PSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvcGNvZGUgPSAlZFxuIiwgaW5zdHItPmlfb3Bjb2RlKTsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdCgpIik7CisgICAgICAgIH0KKyAgICAgICAgZGVwdGggKz0gZWZmZWN0OworCiAgICAgICAgIGlmIChkZXB0aCA+IG1heGRlcHRoKQogICAgICAgICAgICAgbWF4ZGVwdGggPSBkZXB0aDsKICAgICAgICAgYXNzZXJ0KGRlcHRoID49IDApOyAvKiBpbnZhbGlkIGNvZGUgb3IgYnVnIGluIHN0YWNrZGVwdGgoKSAqLwpAQCAtMzc0MCwxMiArMzg1NiwxNiBAQAogICAgICAgICAgICAgdGFyZ2V0X2RlcHRoID0gZGVwdGg7CiAgICAgICAgICAgICBpZiAoaW5zdHItPmlfb3Bjb2RlID09IEZPUl9JVEVSKSB7CiAgICAgICAgICAgICAgICAgdGFyZ2V0X2RlcHRoID0gZGVwdGgtMjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zdHItPmlfb3Bjb2RlID09IFNFVFVQX0ZJTkFMTFkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgaW5zdHItPmlfb3Bjb2RlID09IFNFVFVQX0VYQ0VQVCkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHItPmlfb3Bjb2RlID09IFNFVFVQX0ZJTkFMTFkgfHwKKyAgICAgICAgICAgICAgICAgICAgIGluc3RyLT5pX29wY29kZSA9PSBTRVRVUF9FWENFUFQpIHsKICAgICAgICAgICAgICAgICB0YXJnZXRfZGVwdGggPSBkZXB0aCszOwogICAgICAgICAgICAgICAgIGlmICh0YXJnZXRfZGVwdGggPiBtYXhkZXB0aCkKICAgICAgICAgICAgICAgICAgICAgbWF4ZGVwdGggPSB0YXJnZXRfZGVwdGg7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gSlVNUF9JRl9UUlVFX09SX1BPUCB8fAorICAgICAgICAgICAgICAgICAgICAgaW5zdHItPmlfb3Bjb2RlID09IEpVTVBfSUZfRkFMU0VfT1JfUE9QKQorICAgICAgICAgICAgICAgIGRlcHRoID0gZGVwdGggLSAxOwogICAgICAgICAgICAgbWF4ZGVwdGggPSBzdGFja2RlcHRoX3dhbGsoYywgaW5zdHItPmlfdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2RlcHRoLCBtYXhkZXB0aCk7CiAgICAgICAgICAgICBpZiAoaW5zdHItPmlfb3Bjb2RlID09IEpVTVBfQUJTT0xVVEUgfHwKQEAgLTM3OTAsNyArMzkxMCw3IEBACiAgICAgYS0+YV9sbm90YWIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIERFRkFVTFRfTE5PVEFCX1NJWkUpOwogICAgIGlmICghYS0+YV9sbm90YWIpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChuYmxvY2tzID4gUFlfU0laRV9NQVggLyBzaXplb2YoYmFzaWNibG9jayAqKSkgeworICAgIGlmICgoc2l6ZV90KW5ibG9ja3MgPiBQWV9TSVpFX01BWCAvIHNpemVvZihiYXNpY2Jsb2NrICopKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTM4NDMsNyArMzk2Myw3IEBACiBhc3NlbWJsZV9sbm90YWIoc3RydWN0IGFzc2VtYmxlciAqYSwgc3RydWN0IGluc3RyICppKQogewogICAgIGludCBkX2J5dGVjb2RlLCBkX2xpbmVubzsKLSAgICBpbnQgbGVuOworICAgIFB5X3NzaXplX3QgbGVuOwogICAgIHVuc2lnbmVkIGNoYXIgKmxub3RhYjsKIAogICAgIGRfYnl0ZWNvZGUgPSBhLT5hX29mZnNldCAtIGEtPmFfbGluZW5vX29mZjsKQEAgLTQwMzQsNyArNDE1NCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2tleXNfaW5vcmRlcihQeU9iamVjdCAqZGljdCwgaW50IG9mZnNldCkKK2RpY3Rfa2V5c19pbm9yZGVyKFB5T2JqZWN0ICpkaWN0LCBQeV9zc2l6ZV90IG9mZnNldCkKIHsKICAgICBQeU9iamVjdCAqdHVwbGUsICprLCAqdjsKICAgICBQeV9zc2l6ZV90IGksIHBvcyA9IDAsIHNpemUgPSBQeURpY3RfU2l6ZShkaWN0KTsKQEAgLTQwNTksMTAgKzQxNzksMTAgQEAKIGNvbXB1dGVfY29kZV9mbGFncyhzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7CiAgICAgUHlTVEVudHJ5T2JqZWN0ICpzdGUgPSBjLT51LT51X3N0ZTsKLSAgICBpbnQgZmxhZ3MgPSAwLCBuOwotICAgIGlmIChzdGUtPnN0ZV90eXBlICE9IE1vZHVsZUJsb2NrKQotICAgICAgICBmbGFncyB8PSBDT19ORVdMT0NBTFM7CisgICAgaW50IGZsYWdzID0gMDsKKyAgICBQeV9zc2l6ZV90IG47CiAgICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jaykgeworICAgICAgICBmbGFncyB8PSBDT19ORVdMT0NBTFM7CiAgICAgICAgIGlmICghc3RlLT5zdGVfdW5vcHRpbWl6ZWQpCiAgICAgICAgICAgICBmbGFncyB8PSBDT19PUFRJTUlaRUQ7CiAgICAgICAgIGlmIChzdGUtPnN0ZV9uZXN0ZWQpCkBAIC00MDg0LDkgKzQyMDQsOSBAQAogICAgIGlmIChuID09IDApIHsKICAgICAgICAgbiA9IFB5RGljdF9TaXplKGMtPnUtPnVfY2VsbHZhcnMpOwogICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKG4gPT0gMCkgewotICAgICAgICBmbGFncyB8PSBDT19OT0ZSRUU7CisgICAgICAgICAgICBmbGFncyB8PSBDT19OT0ZSRUU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQxMDUsNyArNDIyNSwxMCBAQAogICAgIFB5T2JqZWN0ICpmcmVldmFycyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNlbGx2YXJzID0gTlVMTDsKICAgICBQeU9iamVjdCAqYnl0ZWNvZGUgPSBOVUxMOwotICAgIGludCBubG9jYWxzLCBmbGFnczsKKyAgICBQeV9zc2l6ZV90IG5sb2NhbHM7CisgICAgaW50IG5sb2NhbHNfaW50OworICAgIGludCBmbGFnczsKKyAgICBpbnQgYXJnY291bnQsIGt3b25seWFyZ2NvdW50OwogCiAgICAgdG1wID0gZGljdF9rZXlzX2lub3JkZXIoYy0+dS0+dV9jb25zdHMsIDApOwogICAgIGlmICghdG1wKQpAQCAtNDEyNCw3ICs0MjQ3LDExIEBACiAgICAgZnJlZXZhcnMgPSBkaWN0X2tleXNfaW5vcmRlcihjLT51LT51X2ZyZWV2YXJzLCBQeVR1cGxlX1NpemUoY2VsbHZhcnMpKTsKICAgICBpZiAoIWZyZWV2YXJzKQogICAgICAgICBnb3RvIGVycm9yOworCiAgICAgbmxvY2FscyA9IFB5RGljdF9TaXplKGMtPnUtPnVfdmFybmFtZXMpOworICAgIGFzc2VydChubG9jYWxzIDwgSU5UX01BWCk7CisgICAgbmxvY2Fsc19pbnQgPSBQeV9TQUZFX0RPV05DQVNUKG5sb2NhbHMsIFB5X3NzaXplX3QsIGludCk7CisKICAgICBmbGFncyA9IGNvbXB1dGVfY29kZV9mbGFncyhjKTsKICAgICBpZiAoZmxhZ3MgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtNDEzOSwxMSArNDI2NiwxMyBAQAogICAgIFB5X0RFQ1JFRihjb25zdHMpOwogICAgIGNvbnN0cyA9IHRtcDsKIAotICAgIGNvID0gUHlDb2RlX05ldyhjLT51LT51X2FyZ2NvdW50LCBjLT51LT51X2t3b25seWFyZ2NvdW50LAotICAgICAgICAgICAgICAgICAgICBubG9jYWxzLCBzdGFja2RlcHRoKGMpLCBmbGFncywKKyAgICBhcmdjb3VudCA9IFB5X1NBRkVfRE9XTkNBU1QoYy0+dS0+dV9hcmdjb3VudCwgUHlfc3NpemVfdCwgaW50KTsKKyAgICBrd29ubHlhcmdjb3VudCA9IFB5X1NBRkVfRE9XTkNBU1QoYy0+dS0+dV9rd29ubHlhcmdjb3VudCwgUHlfc3NpemVfdCwgaW50KTsKKyAgICBjbyA9IFB5Q29kZV9OZXcoYXJnY291bnQsIGt3b25seWFyZ2NvdW50LAorICAgICAgICAgICAgICAgICAgICBubG9jYWxzX2ludCwgc3RhY2tkZXB0aChjKSwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlLCBjb25zdHMsIG5hbWVzLCB2YXJuYW1lcywKICAgICAgICAgICAgICAgICAgICAgZnJlZXZhcnMsIGNlbGx2YXJzLAotICAgICAgICAgICAgICAgICAgICBjLT5jX2ZpbGVuYW1lX29iaiwgYy0+dS0+dV9uYW1lLAorICAgICAgICAgICAgICAgICAgICBjLT5jX2ZpbGVuYW1lLCBjLT51LT51X25hbWUsCiAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfZmlyc3RsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgIGEtPmFfbG5vdGFiKTsKICBlcnJvcjoKQEAgLTQyNTksNCArNDM4OCwzIEBACiAgICAgcmV0dXJuIFB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLCBmbGFncywgLTEsIGFyZW5hKTsKIH0KIAotCmRpZmYgLS1naXQgYS9QeXRob24vY29uZHZhci5oIGIvUHl0aG9uL2NvbmR2YXIuaAppbmRleCAxOTQ3NGVmLi5lZjgxOGM0IDEwMDY0NAotLS0gYS9QeXRob24vY29uZHZhci5oCisrKyBiL1B5dGhvbi9jb25kdmFyLmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogICAgICAqIGJ1dCB3ZSBhcmUgc2FmZSBiZWNhdXNlIHdlIGFyZSB1c2luZyBhIHNlbWFwaG9yZSB3aWNoIGhhcyBhbiBpbnRlcm5hbAogICAgICAqIGNvdW50LgogICAgICAqLwotICAgIHdhaXQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGN2LT5zZW0sIG1zKTsKKyAgICB3YWl0ID0gV2FpdEZvclNpbmdsZU9iamVjdEV4KGN2LT5zZW0sIG1zLCBGQUxTRSk7CiAgICAgUHlNVVRFWF9MT0NLKGNzKTsKICAgICBpZiAod2FpdCAhPSBXQUlUX09CSkVDVF8wKQogICAgICAgICAtLWN2LT53YWl0aW5nOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfYWl4LmMgYi9QeXRob24vZHlubG9hZF9haXguYwppbmRleCBmNDBhMGJlLi41YWMzMGVkIDEwMDY0NAotLS0gYS9QeXRob24vZHlubG9hZF9haXguYworKysgYi9QeXRob24vZHlubG9hZF9haXguYwpAQCAtMzAsMTEgKzMwLDExIEBACiBzdGF0aWMgaW50CiBhaXhfZ2V0b2xkbW9kdWxlcyh2b2lkICoqbW9kbGlzdHB0cikKIHsKLSAgICByZWdpc3RlciBNb2R1bGVQdHIgICAgICAgbW9kcHRyLCBwcmV2bW9kcHRyOwotICAgIHJlZ2lzdGVyIHN0cnVjdCBsZF9pbmZvICAqbGRpcHRyOwotICAgIHJlZ2lzdGVyIGNoYXIgICAgICAgICAgICAqbGRpYnVmOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgICBlcnJmbGFnLCBidWZzaXplID0gMTAyNDsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgICAgb2Zmc2V0OworICAgIE1vZHVsZVB0ciAgICAgICBtb2RwdHIsIHByZXZtb2RwdHI7CisgICAgc3RydWN0IGxkX2luZm8gICpsZGlwdHI7CisgICAgY2hhciAgICAgICAgICAgICpsZGlidWY7CisgICAgaW50ICAgICAgICAgICAgIGVycmZsYWcsIGJ1ZnNpemUgPSAxMDI0OworICAgIHVuc2lnbmVkIGludCAgICBvZmZzZXQ7CiAgICAgY2hhciAqcHJvZ25hbWUgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogCiAgICAgLyoKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgIGNoYXIgKm1lc3NhZ2VbMTAyNF0sIGVycmJ1ZlsxMDI0XTsKICAgICBQeU9iamVjdCAqcGF0aG5hbWVfb2IgPSBOVUxMOwogICAgIFB5T2JqZWN0ICplcnJidWZfb2IgPSBOVUxMOwotICAgIHJlZ2lzdGVyIGludCBpLGo7CisgICAgaW50IGksajsKIAogICAgIHN0cnVjdCBlcnJ0YWIgewogICAgICAgICBpbnQgZXJyTm87CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9vczIuYyBiL1B5dGhvbi9keW5sb2FkX29zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTFiOTA3Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi9keW5sb2FkX29zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotCi0vKiBTdXBwb3J0IGZvciBkeW5hbWljIGxvYWRpbmcgb2YgZXh0ZW5zaW9uIG1vZHVsZXMgKi8KLQotI2RlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSNkZWZpbmUgIElOQ0xfRE9TTU9EVUxFTUdSCi0jaW5jbHVkZSA8b3MyLmg+Ci0KLSNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJpbXBvcnRkbC5oIgotCi0KLWNvbnN0IGNoYXIgKl9QeUltcG9ydF9EeW5Mb2FkRmlsZXRhYltdID0geyIucHlkIiwgIi5kbGwiLCBOVUxMfTsKLQotZGxfZnVuY3B0ciBfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMoY29uc3QgY2hhciAqc2hvcnRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZwKQotewotICAgIGRsX2Z1bmNwdHIgcDsKLSAgICBBUElSRVQgIHJjOwotICAgIEhNT0RVTEUgaERMTDsKLSAgICBjaGFyIGZhaWxyZWFzb25bMjU2XTsKLSAgICBjaGFyIGZ1bmNuYW1lWzI1OF07Ci0KLSAgICByYyA9IERvc0xvYWRNb2R1bGUoZmFpbHJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGZhaWxyZWFzb24pLAotICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgJmhETEwpOwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGNoYXIgZXJyQnVmWzI1Nl07Ci0gICAgICAgIFB5T1Nfc25wcmludGYoZXJyQnVmLCBzaXplb2YoZXJyQnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAiRExMIGxvYWQgZmFpbGVkLCByYyA9ICVkOiAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgIHJjLCBmYWlscmVhc29uKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLCBlcnJCdWYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBQeU9TX3NucHJpbnRmKGZ1bmNuYW1lLCBzaXplb2YoZnVuY25hbWUpLCAiUHlJbml0XyUuMjAwcyIsIHNob3J0bmFtZSk7Ci0gICAgcmMgPSBEb3NRdWVyeVByb2NBZGRyKGhETEwsIDBMLCBmdW5jbmFtZSwgJnApOwotICAgIGlmIChyYyAhPSBOT19FUlJPUikKLSAgICAgICAgcCA9IE5VTEw7IC8qIFNpZ25pZnkgRmFpbHVyZSB0byBBY3F1aXJlIEVudHJ5cG9pbnQgKi8KLSAgICByZXR1cm4gcDsKLX0KZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX3NobGliLmMgYi9QeXRob24vZHlubG9hZF9zaGxpYi5jCmluZGV4IDc1NTQ0ZWQuLjVjZDFlZmQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX3NobGliLmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYwpAQCAtMTgsMTAgKzE4LDYgQEAKIAogI2lmZGVmIEhBVkVfRExGQ05fSAogI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSAiZGxmY24uaCIKLSNlbmRpZgogI2VuZGlmCiAKICNpZiAoZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSkgJiYgIWRlZmluZWQoX19FTEZfXykKQEAgLTQwLDMwICszNiwxNiBAQAogI2lmZGVmIF9fQ1lHV0lOX18KICAgICAiLmRsbCIsCiAjZWxzZSAgLyogIV9fQ1lHV0lOX18gKi8KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgICIucHlkIiwKLSAgICAiLmRsbCIsCi0jZWxzZSAgLyogIShkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSkgKi8KLSNpZmRlZiBfX1ZNUwotICAgICIuZXhlIiwKLSAgICAiLkVYRSIsCi0jZWxzZSAgLyogIV9fVk1TICovCiAgICAgIi4iIFNPQUJJICIuc28iLAogICAgICIuYWJpIiBQWVRIT05fQUJJX1NUUklORyAiLnNvIiwKICAgICAiLnNvIiwKLSNlbmRpZiAgLyogX19WTVMgKi8KLSNlbmRpZiAgLyogZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykgKi8KICNlbmRpZiAgLyogX19DWUdXSU5fXyAqLwogICAgIE5VTEwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKICAgICBkZXZfdCBkZXY7Ci0jaWZkZWYgX19WTVMKLSAgICBpbm9fdCBpbm9bM107Ci0jZWxzZQogICAgIGlub190IGlubzsKLSNlbmRpZgogICAgIHZvaWQgKmhhbmRsZTsKIH0gaGFuZGxlc1sxMjhdOwogc3RhdGljIGludCBuaGFuZGxlcyA9IDA7CkBAIC0xMDQsNDcgKzg2LDM5IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG5oYW5kbGVzIDwgMTI4KSB7CiAgICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5kZXYgPSBzdGF0Yi5zdF9kZXY7Ci0jaWZkZWYgX19WTVMKLSAgICAgICAgICAgIGhhbmRsZXNbbmhhbmRsZXNdLmlub1swXSA9IHN0YXRiLnN0X2lub1swXTsKLSAgICAgICAgICAgIGhhbmRsZXNbbmhhbmRsZXNdLmlub1sxXSA9IHN0YXRiLnN0X2lub1sxXTsKLSAgICAgICAgICAgIGhhbmRsZXNbbmhhbmRsZXNdLmlub1syXSA9IHN0YXRiLnN0X2lub1syXTsKLSNlbHNlCiAgICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5pbm8gPSBzdGF0Yi5zdF9pbm87Ci0jZW5kaWYKICAgICAgICAgfQogICAgIH0KIAotI2lmICEoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpCiAgICAgZGxvcGVuZmxhZ3MgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnAtPmRsb3BlbmZsYWdzOwotI2VuZGlmCi0KLSNpZmRlZiBfX1ZNUwotICAgIC8qIFZNUyBjdXJyZW50bHkgZG9uJ3QgYWxsb3cgYSBwYXRobmFtZSwgdXNlIGEgbG9naWNhbCBuYW1lIGluc3RlYWQgKi8KLSAgICAvKiBDb25jYXRlbmF0ZSAncHl0aG9uX21vZHVsZV8nIGFuZCBzaG9ydG5hbWUgKi8KLSAgICAvKiBzbyAiaW1wb3J0IHZtcy5iYXIiIHdpbGwgdXNlIHRoZSBsb2dpY2FsIHB5dGhvbl9tb2R1bGVfYmFyICovCi0gICAgLyogQXMgQyBtb2R1bGUgdXNlIG9ubHkgb25lIG5hbWUgc3BhY2UgdGhpcyBpcyBwcm9iYWJseSBub3QgYSAqLwotICAgIC8qIGltcG9ydGFudCBsaW1pdGF0aW9uICovCi0gICAgUHlPU19zbnByaW50ZihwYXRoYnVmLCBzaXplb2YocGF0aGJ1ZiksICJweXRob25fbW9kdWxlXyUtLjIwMHMiLAotICAgICAgICAgICAgICAgICAgc2hvcnRuYW1lKTsKLSAgICBwYXRobmFtZSA9IHBhdGhidWY7Ci0jZW5kaWYKIAogICAgIGhhbmRsZSA9IGRsb3BlbihwYXRobmFtZSwgZGxvcGVuZmxhZ3MpOwogCiAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICptb2RfbmFtZSA9IE5VTEw7Ci0gICAgICAgIFB5T2JqZWN0ICpwYXRoID0gTlVMTDsKLSAgICAgICAgUHlPYmplY3QgKmVycm9yX29iID0gTlVMTDsKKyAgICAgICAgUHlPYmplY3QgKm1vZF9uYW1lOworICAgICAgICBQeU9iamVjdCAqcGF0aDsKKyAgICAgICAgUHlPYmplY3QgKmVycm9yX29iOwogICAgICAgICBjb25zdCBjaGFyICplcnJvciA9IGRsZXJyb3IoKTsKICAgICAgICAgaWYgKGVycm9yID09IE5VTEwpCiAgICAgICAgICAgICBlcnJvciA9ICJ1bmtub3duIGRsb3BlbigpIGVycm9yIjsKICAgICAgICAgZXJyb3Jfb2IgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhlcnJvcik7Ci0gICAgICAgIHBhdGggPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhwYXRobmFtZSk7CisgICAgICAgIGlmIChlcnJvcl9vYiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIG1vZF9uYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoc2hvcnRuYW1lKTsKKyAgICAgICAgaWYgKG1vZF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlcnJvcl9vYik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwYXRoID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocGF0aG5hbWUpOworICAgICAgICBpZiAocGF0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXJyb3Jfb2IpOworICAgICAgICAgICAgUHlfREVDUkVGKG1vZF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5RXJyX1NldEltcG9ydEVycm9yKGVycm9yX29iLCBtb2RfbmFtZSwgcGF0aCk7Ci0gICAgICAgIFB5X1hERUNSRUYoZXJyb3Jfb2IpOwotICAgICAgICBQeV9YREVDUkVGKHBhdGgpOwotICAgICAgICBQeV9YREVDUkVGKG1vZF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKGVycm9yX29iKTsKKyAgICAgICAgUHlfREVDUkVGKG1vZF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHBhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGZwICE9IE5VTEwgJiYgbmhhbmRsZXMgPCAxMjgpCmRpZmYgLS1naXQgYS9QeXRob24vZXJyb3JzLmMgYi9QeXRob24vZXJyb3JzLmMKaW5kZXggNjI2YjE2ZS4uOTk2MjkyYSAxMDA2NDQKLS0tIGEvUHl0aG9uL2Vycm9ycy5jCisrKyBiL1B5dGhvbi9lcnJvcnMuYwpAQCAtMjAsNiArMjAsOSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKKwogCiB2b2lkCiBQeUVycl9SZXN0b3JlKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0cmFjZWJhY2spCkBAIC03MSw2ICs3NCwxMSBAQAogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCB8fCAhUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgICAgIC8qIFdlIG11c3Qgbm9ybWFsaXplIHRoZSB2YWx1ZSByaWdodCBub3cgKi8KICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCAqZml4ZWRfdmFsdWU7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgIC8qIGluIGRlYnVnIG1vZGUsIFB5RXZhbF9FdmFsRnJhbWVFeCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uCisgICAgICAgICAgICAgICBlcnJvciBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2sodmFsdWUpKSB7CkBAIC0xMTIsNiArMTIwLDIwIEBACiAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiB9CiAKKy8qIFNldCBhIGtleSBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQsIHdyYXBwaW5nIGl0IGluIGEKKyAqIHR1cGxlIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB0dXBsZSBrZXlzIGFyZSBub3QgdW5wYWNrZWQgYXMgdGhlCisgKiBleGNlcHRpb24gYXJndW1lbnRzLiAqLwordm9pZAorX1B5RXJyX1NldEtleUVycm9yKFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnR1cDsKKyAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKKyAgICBpZiAoIXR1cCkKKyAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLworICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKKyAgICBQeV9ERUNSRUYodHVwKTsKK30KKwogdm9pZAogUHlFcnJfU2V0Tm9uZShQeU9iamVjdCAqZXhjZXB0aW9uKQogewpAQCAtMjI3LDEyICsyNDksMjEgQEAKICAgICAgICB2YWx1ZSB3aWxsIGJlIGFuIGluc3RhbmNlLgogICAgICovCiAgICAgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodHlwZSkpIHsKKyAgICAgICAgaW50IGlzX3N1YmNsYXNzOworICAgICAgICBpZiAoaW5jbGFzcykgeworICAgICAgICAgICAgaXNfc3ViY2xhc3MgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGluY2xhc3MsIHR5cGUpOworICAgICAgICAgICAgaWYgKGlzX3N1YmNsYXNzIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNfc3ViY2xhc3MgPSAwOworCiAgICAgICAgIC8qIGlmIHRoZSB2YWx1ZSB3YXMgbm90IGFuIGluc3RhbmNlLCBvciBpcyBub3QgYW4gaW5zdGFuY2UKICAgICAgICAgICAgd2hvc2UgY2xhc3MgaXMgKG9yIGlzIGRlcml2ZWQgZnJvbSkgdHlwZSwgdGhlbiB1c2UgdGhlCiAgICAgICAgICAgIHZhbHVlIGFzIGFuIGFyZ3VtZW50IHRvIGluc3RhbnRpYXRpb24gb2YgdGhlIHR5cGUKICAgICAgICAgICAgY2xhc3MuCiAgICAgICAgICovCi0gICAgICAgIGlmICghaW5jbGFzcyB8fCAhUHlPYmplY3RfSXNTdWJjbGFzcyhpbmNsYXNzLCB0eXBlKSkgeworICAgICAgICBpZiAoIWluY2xhc3MgfHwgIWlzX3N1YmNsYXNzKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgKnJlczsKIAogICAgICAgICAgICAgaWYgKHZhbHVlID09IFB5X05vbmUpCkBAIC0zNjYsNiArMzk3LDEyIEBACiBQeU9iamVjdCAqCiBQeUVycl9Ob01lbW9yeSh2b2lkKQogeworICAgIGlmIChQeV9UWVBFKFB5RXhjX01lbW9yeUVycm9yKSA9PSBOVUxMKSB7CisgICAgICAgIC8qIFB5RXJyX05vTWVtb3J5KCkgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSBQeUV4Y19NZW1vcnlFcnJvciBoYXMgYmVlbgorICAgICAgICAgICBpbml0aWFsaXplZCBieSBfUHlFeGNfSW5pdCgpICovCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIk91dCBvZiBtZW1vcnkgYW5kIFB5RXhjX01lbW9yeUVycm9yIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemVkIHlldCIpOworICAgIH0KICAgICBQeUVycl9TZXROb25lKFB5RXhjX01lbW9yeUVycm9yKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTM3Myw2ICs0MTAsMTIgQEAKIFB5T2JqZWN0ICoKIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeU9iamVjdCAqZXhjLCBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QpCiB7CisgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoZXhjLCBmaWxlbmFtZU9iamVjdCwgTlVMTCk7Cit9CisKK1B5T2JqZWN0ICoKK1B5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoUHlPYmplY3QgKmV4YywgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0LCBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QyKQorewogICAgIFB5T2JqZWN0ICptZXNzYWdlOwogICAgIFB5T2JqZWN0ICp2LCAqYXJnczsKICAgICBpbnQgaSA9IGVycm5vOwpAQCAtNDQzLDEwICs0ODYsMTUgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGZpbGVuYW1lT2JqZWN0ICE9IE5VTEwpCi0gICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU9PKSIsIGksIG1lc3NhZ2UsIGZpbGVuYW1lT2JqZWN0KTsKLSAgICBlbHNlCisgICAgaWYgKGZpbGVuYW1lT2JqZWN0ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGZpbGVuYW1lT2JqZWN0MiAhPSBOVUxMKQorICAgICAgICAgICAgYXJncyA9IFB5X0J1aWxkVmFsdWUoIihpT09pTykiLCBpLCBtZXNzYWdlLCBmaWxlbmFtZU9iamVjdCwgMCwgZmlsZW5hbWVPYmplY3QyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJncyA9IFB5X0J1aWxkVmFsdWUoIihpT08pIiwgaSwgbWVzc2FnZSwgZmlsZW5hbWVPYmplY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydChmaWxlbmFtZU9iamVjdDIgPT0gTlVMTCk7CiAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU8pIiwgaSwgbWVzc2FnZSk7CisgICAgfQogICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKIAogICAgIGlmIChhcmdzICE9IE5VTEwpIHsKQEAgLTQ2MywxMiArNTExLDExIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLQogUHlPYmplY3QgKgogUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPyBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKSA6IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChleGMsIG5hbWUpOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKGV4YywgbmFtZSwgTlVMTCk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDgwLDcgKzUyNyw3IEBACiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/CiAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoZmlsZW5hbWUsIHdjc2xlbihmaWxlbmFtZSkpIDoKICAgICAgICAgICAgICBOVUxMOwotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoZXhjLCBuYW1lKTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsIG5hbWUsIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ4OSw3ICs1MzYsNyBAQAogUHlPYmplY3QgKgogUHlFcnJfU2V0RnJvbUVycm5vKFB5T2JqZWN0ICpleGMpCiB7Ci0gICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChleGMsIE5VTEwpOworICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKGV4YywgTlVMTCwgTlVMTCk7CiB9CiAKICNpZmRlZiBNU19XSU5ET1dTCkBAIC00OTksNiArNTQ2LDE2IEBACiAgICAgaW50IGllcnIsCiAgICAgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0KQogeworICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoZXhjLCBpZXJyLAorICAgICAgICBmaWxlbmFtZU9iamVjdCwgTlVMTCk7Cit9CisKK1B5T2JqZWN0ICpQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoCisgICAgUHlPYmplY3QgKmV4YywKKyAgICBpbnQgaWVyciwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0MikKK3sKICAgICBpbnQgbGVuOwogICAgIFdDSEFSICpzX2J1ZiA9IE5VTEw7IC8qIEZyZWUgdmlhIExvY2FsRnJlZSAqLwogICAgIFB5T2JqZWN0ICptZXNzYWdlOwpAQCAtNTM0LDExICs1OTEsMTUgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGZpbGVuYW1lT2JqZWN0ID09IE5VTEwpCi0gICAgICAgIGZpbGVuYW1lT2JqZWN0ID0gUHlfTm9uZTsKLSAgICAvKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgZm9yIHBhc3NpbmcgYSBXaW5kb3dzIGVycm9yIGNvZGUuCisgICAgaWYgKGZpbGVuYW1lT2JqZWN0ID09IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KGZpbGVuYW1lT2JqZWN0MiA9PSBOVUxMKTsKKyAgICAgICAgZmlsZW5hbWVPYmplY3QgPSBmaWxlbmFtZU9iamVjdDIgPSBQeV9Ob25lOworICAgIH0KKyAgICBlbHNlIGlmIChmaWxlbmFtZU9iamVjdDIgPT0gTlVMTCkKKyAgICAgICAgZmlsZW5hbWVPYmplY3QyID0gUHlfTm9uZTsKKyAgICAvKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgZm9yIE9TRXJyb3IuCiAgICAgICAgVGhlIFBPU0lYIHRyYW5zbGF0aW9uIHdpbGwgYmUgZmlndXJlZCBvdXQgYnkgdGhlIGNvbnN0cnVjdG9yLiAqLwotICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU9PaSkiLCAwLCBtZXNzYWdlLCBmaWxlbmFtZU9iamVjdCwgZXJyKTsKKyAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPT2lPKSIsIDAsIG1lc3NhZ2UsIGZpbGVuYW1lT2JqZWN0LCBlcnIsIGZpbGVuYW1lT2JqZWN0Mik7CiAgICAgUHlfREVDUkVGKG1lc3NhZ2UpOwogCiAgICAgaWYgKGFyZ3MgIT0gTlVMTCkgewpAQCAtNTU5LDkgKzYyMCwxMCBAQAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPyBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKSA6IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJldCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywKKyAgICBQeU9iamVjdCAqcmV0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKGV4YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTU3NCw5ICs2MzYsMTAgQEAKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8KICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZShmaWxlbmFtZSwgd2NzbGVuKGZpbGVuYW1lKSkgOgogICAgICAgICAgICAgIE5VTEw7Ci0gICAgUHlPYmplY3QgKnJldCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywKKyAgICBQeU9iamVjdCAqcmV0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKGV4YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTU4OCwxNyArNjUxLDE4IEBACiAKIFB5T2JqZWN0ICpQeUVycl9TZXRGcm9tV2luZG93c0VycihpbnQgaWVycikKIHsKLSAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlFeGNfV2luZG93c0Vycm9yLAorICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBOVUxMKTsKIH0KKwogUHlPYmplY3QgKlB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKAogICAgIGludCBpZXJyLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPyBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKSA6IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUpOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUsIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYxMCw5ICs2NzQsOSBAQAogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPwogICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKSA6CiAgICAgICAgICAgICAgTlVMTDsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSk7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSwgTlVMTCk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQ2LDggKzcxMCwxMSBAQAogCiAgICAgUHlfSU5DUkVGKG1zZyk7CiAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBtc2cpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgIm5hbWUiLCBuYW1lKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJwYXRoIiwgcGF0aCk7CisKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAibmFtZSIsIG5hbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgInBhdGgiLCBwYXRoKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsKFB5RXhjX0ltcG9ydEVycm9yLCBhcmdzLCBrd2FyZ3MpOwogICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CkBAIC02NzUsNiArNzQyLDcgQEAKIHZvaWQKIFB5RXJyX0JhZEludGVybmFsQ2FsbCh2b2lkKQogeworICAgIGFzc2VydCgwICYmICJiYWQgYXJndW1lbnQgdG8gaW50ZXJuYWwgZnVuY3Rpb24iKTsKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICJiYWQgYXJndW1lbnQgdG8gaW50ZXJuYWwgZnVuY3Rpb24iKTsKIH0KQEAgLTY5NCw2ICs3NjIsMTIgQEAKICAgICB2YV9zdGFydCh2YXJncyk7CiAjZW5kaWYKIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgorCiAgICAgc3RyaW5nID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOwogICAgIFB5RXJyX1NldE9iamVjdChleGNlcHRpb24sIHN0cmluZyk7CiAgICAgUHlfWERFQ1JFRihzdHJpbmcpOwpAQCAtNzk1LDYwICs4NjksODQgQEAKIHsKICAgICBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKICAgICBQeU9iamVjdCAqZiwgKnQsICp2LCAqdGI7Ci0gICAgUHlFcnJfRmV0Y2goJnQsICZ2LCAmdGIpOwotICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOwotICAgIGlmIChmICE9IE5VTEwgJiYgZiAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiRXhjZXB0aW9uICIsIGYpOwotICAgICAgICBpZiAodCkgewotICAgICAgICAgICAgUHlPYmplY3QqIG1vZHVsZU5hbWU7Ci0gICAgICAgICAgICBjaGFyKiBjbGFzc05hbWU7Ci0gICAgICAgICAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0KSk7Ci0gICAgICAgICAgICBjbGFzc05hbWUgPSBQeUV4Y2VwdGlvbkNsYXNzX05hbWUodCk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjaGFyICpkb3QgPSBzdHJyY2hyKGNsYXNzTmFtZSwgJy4nKTsKLSAgICAgICAgICAgICAgICBpZiAoZG90ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGRvdCsxOwotICAgICAgICAgICAgfQorICAgIFB5T2JqZWN0ICptb2R1bGVOYW1lID0gTlVMTDsKKyAgICBjaGFyKiBjbGFzc05hbWU7CiAKLSAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHQsICZQeUlkX19fbW9kdWxlX18pOwotICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2hhciogbW9kc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhtb2R1bGVOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAobW9kc3RyICYmCi0gICAgICAgICAgICAgICAgICAgIHN0cmNtcChtb2RzdHIsICJidWlsdGlucyIpICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcobW9kc3RyLCBmKTsKLSAgICAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKGNsYXNzTmFtZSwgZik7Ci0gICAgICAgICAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZik7Ci0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KHYsIGYsIDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfWERFQ1JFRihtb2R1bGVOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiBpbiAiLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApOwotICAgICAgICB9Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiIGlnbm9yZWRcbiIsIGYpOwotICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBKdXN0IGluIGNhc2UgKi8KKyAgICBQeUVycl9GZXRjaCgmdCwgJnYsICZ0Yik7CisKKyAgICBmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CisgICAgaWYgKGYgPT0gTlVMTCB8fCBmID09IFB5X05vbmUpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmIChvYmopIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiRXhjZXB0aW9uIGlnbm9yZWQgaW46ICIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQorCisgICAgaWYgKFB5VHJhY2VCYWNrX1ByaW50KHRiLCBmKSA8IDApCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmICghdCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodCkpOworICAgIGNsYXNzTmFtZSA9IFB5RXhjZXB0aW9uQ2xhc3NfTmFtZSh0KTsKKyAgICBpZiAoY2xhc3NOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgY2hhciAqZG90ID0gc3RycmNocihjbGFzc05hbWUsICcuJyk7CisgICAgICAgIGlmIChkb3QgIT0gTlVMTCkKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGRvdCsxOworICAgIH0KKworICAgIG1vZHVsZU5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHQsICZQeUlkX19fbW9kdWxlX18pOworICAgIGlmIChtb2R1bGVOYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2R1bGVOYW1lLCAmUHlJZF9idWlsdGlucykgIT0gMCkgeworICAgICAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChtb2R1bGVOYW1lLCBmLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY2xhc3NOYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZyhjbGFzc05hbWUsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QodiwgZiwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZikgPCAwKQorICAgICAgICBnb3RvIGRvbmU7CisKK2RvbmU6CisgICAgUHlfWERFQ1JFRihtb2R1bGVOYW1lKTsKICAgICBQeV9YREVDUkVGKHQpOwogICAgIFB5X1hERUNSRUYodik7CiAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgUHlFcnJfQ2xlYXIoKTsgLyogSnVzdCBpbiBjYXNlICovCiB9CiAKIGV4dGVybiBQeU9iamVjdCAqUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUodm9pZCk7CiAKIAogdm9pZAotUHlFcnJfU3ludGF4TG9jYXRpb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pIHsKK1B5RXJyX1N5bnRheExvY2F0aW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQorewogICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIGxpbmVubywgLTEpOwogfQogCkBAIC04NTgsNyArOTU2LDcgQEAKICAgIHRvIG1ha2UgcHJpbnRpbmcgb2YgZXhjZXB0aW9ucyBiZWxpZXZlIGl0IGlzIGEgc3ludGF4IGVycm9yLiAqLwogCiB2b2lkCi1QeUVycl9TeW50YXhMb2NhdGlvbkV4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK1B5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgUHlPYmplY3QgKmV4YywgKnYsICp0YiwgKnRtcDsKICAgICBfUHlfSURFTlRJRklFUihmaWxlbmFtZSk7CkBAIC04OTIsMTYgKzk5MCwxMCBAQAogICAgICAgICB9CiAgICAgfQogICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIHRtcCA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX2ZpbGVuYW1lLCBmaWxlbmFtZSkpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX2ZpbGVuYW1lLCB0bXApKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKLSAgICAgICAgfQogCi0gICAgICAgIHRtcCA9IFB5RXJyX1Byb2dyYW1UZXh0KGZpbGVuYW1lLCBsaW5lbm8pOworICAgICAgICB0bXAgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChmaWxlbmFtZSwgbGluZW5vKTsKICAgICAgICAgaWYgKHRtcCkgewogICAgICAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQodiwgJlB5SWRfdGV4dCwgdG1wKSkKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtOTMxLDIyICsxMDIzLDMzIEBACiAgICAgUHlFcnJfUmVzdG9yZShleGMsIHYsIHRiKTsKIH0KIAordm9pZAorUHlFcnJfU3ludGF4TG9jYXRpb25FeChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCit7CisgICAgUHlPYmplY3QgKmZpbGVvYmo7CisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBmaWxlb2JqID0gTlVMTDsKKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlb2JqLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgIFB5X1hERUNSRUYoZmlsZW9iaik7Cit9CisKIC8qIEF0dGVtcHQgdG8gbG9hZCB0aGUgbGluZSBvZiB0ZXh0IHRoYXQgdGhlIGV4Y2VwdGlvbiByZWZlcnMgdG8uICBJZiBpdAogICAgZmFpbHMsIGl0IHdpbGwgcmV0dXJuIE5VTEwgYnV0IHdpbGwgbm90IHNldCBhbiBleGNlcHRpb24uCiAKICAgIFhYWCBUaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHF1aXRlIHNpbWlsYXIgdG8gdGhlCiAgICBmdW5jdGlvbmFsaXR5IGluIHRiX2Rpc3BsYXlsaW5lKCkgaW4gdHJhY2ViYWNrLmMuICovCiAKLVB5T2JqZWN0ICoKLVB5RXJyX1Byb2dyYW1UZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQorc3RhdGljIFB5T2JqZWN0ICoKK2Vycl9wcm9ncmFtdGV4dChGSUxFICpmcCwgaW50IGxpbmVubykKIHsKLSAgICBGSUxFICpmcDsKICAgICBpbnQgaTsKICAgICBjaGFyIGxpbmVidWZbMTAwMF07CiAKLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCAqZmlsZW5hbWUgPT0gJ1wwJyB8fCBsaW5lbm8gPD0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOwogICAgIGlmIChmcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZW5vOyBpKyspIHsKQEAgLTk3Nyw2ICsxMDgwLDI2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK1B5T2JqZWN0ICoKK1B5RXJyX1Byb2dyYW1UZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQoreworICAgIEZJTEUgKmZwOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMIHx8ICpmaWxlbmFtZSA9PSAnXDAnIHx8IGxpbmVubyA8PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmcCA9IF9QeV9mb3BlbihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOworICAgIHJldHVybiBlcnJfcHJvZ3JhbXRleHQoZnAsIGxpbmVubyk7Cit9CisKK1B5T2JqZWN0ICoKK1B5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5lbm8gPD0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGZpbGVuYW1lLCAiciIgUFlfU1RESU9URVhUTU9ERSk7CisgICAgcmV0dXJuIGVycl9wcm9ncmFtdGV4dChmcCwgbGluZW5vKTsKK30KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi9maWxldXRpbHMuYyBiL1B5dGhvbi9maWxldXRpbHMuYwppbmRleCBkMjUxMTFmLi5mNTAwMGU1IDEwMDY0NAotLS0gYS9QeXRob24vZmlsZXV0aWxzLmMKKysrIGIvUHl0aG9uL2ZpbGV1dGlscy5jCkBAIC0xMCwyMCArMTAsMzkgQEAKICNpbmNsdWRlIDxsYW5naW5mby5oPgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogSEFWRV9GQ05UTF9IICovCisKICNpZmRlZiBfX0FQUExFX18KIGV4dGVybiB3Y2hhcl90KiBfUHlfRGVjb2RlVVRGOF9zdXJyb2dhdGVlc2NhcGUoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplKTsKICNlbmRpZgogCisjaWZkZWYgT19DTE9FWEVDCisvKiBEb2VzIG9wZW4oKSBzdXBwb3J0IHRoZSBPX0NMT0VYRUMgZmxhZz8gUG9zc2libGUgdmFsdWVzOgorCisgICAtMTogdW5rbm93bgorICAgIDA6IG9wZW4oKSBpZ25vcmVzIE9fQ0xPRVhFQyBmbGFnLCBleDogTGludXgga2VybmVsIG9sZGVyIHRoYW4gMi42LjIzCisgICAgMTogb3BlbigpIHN1cHBvcnRzIE9fQ0xPRVhFQyBmbGFnLCBjbG9zZS1vbi1leGVjIGlzIHNldAorCisgICBUaGUgZmxhZyBpcyB1c2VkIGJ5IF9QeV9vcGVuKCksIGlvLkZpbGVJTyBhbmQgb3Mub3BlbigpICovCitpbnQgX1B5X29wZW5fY2xvZXhlY193b3JrcyA9IC0xOworI2VuZGlmCisKIFB5T2JqZWN0ICoKIF9QeV9kZXZpY2VfZW5jb2RpbmcoaW50IGZkKQogewotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChNU19XSU42NCkKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgVUlOVCBjcDsKICNlbmRpZgogICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSB8fCAhaXNhdHR5KGZkKSkgewogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9Ci0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKE1TX1dJTjY0KQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICAgICBpZiAoZmQgPT0gMCkKICAgICAgICAgY3AgPSBHZXRDb25zb2xlQ1AoKTsKICAgICBlbHNlIGlmIChmZCA9PSAxIHx8IGZkID09IDIpCkBAIC02MSw3ICs4MCw3IEBACiAgICB3b3JrYXJvdW5kIGlzIGFsc28gZW5hYmxlZCBvbiBlcnJvciwgZm9yIGV4YW1wbGUgaWYgZ2V0dGluZyB0aGUgbG9jYWxlCiAgICBmYWlsZWQuCiAKLSAgIFZhbHVlcyBvZiBsb2NhbGVfaXNfYXNjaWk6CisgICBWYWx1ZXMgb2YgZm9yY2VfYXNjaWk6CiAKICAgICAgICAxOiB0aGUgd29ya2Fyb3VuZCBpcyB1c2VkOiBfUHlfd2NoYXIyY2hhcigpIHVzZXMKICAgICAgICAgICBlbmNvZGVfYXNjaWlfc3Vycm9nYXRlZXNjYXBlKCkgYW5kIF9QeV9jaGFyMndjaGFyKCkgdXNlcwpAQCAtMjAyLDcgKzIyMSw3IEBACiAgICAgdW5zaWduZWQgY2hhciAqaW47CiAgICAgd2NoYXJfdCAqb3V0OwogCi0gICAgcmVzID0gUHlNZW1fTWFsbG9jKChzdHJsZW4oYXJnKSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgIHJlcyA9IFB5TWVtX1Jhd01hbGxvYygoc3RybGVuKGFyZykrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoIXJlcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIzMCw3ICsyNDksNyBAQAogICAgVXNlIF9QeV93Y2hhcjJjaGFyKCkgdG8gZW5jb2RlIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIGJhY2sgdG8gYSBieXRlIHN0cmluZy4KIAogICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcgKHVzZQotICAgUHlNZW1fRnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSkgYW5kIHdyaXRlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiB3aWRlCisgICBQeU1lbV9SYXdGcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSBhbmQgd3JpdGUgdGhlIG51bWJlciBvZiB3cml0dGVuIHdpZGUKICAgIGNoYXJhY3RlcnMgZXhjbHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciBpbnRvICpzaXplIGlmIHNpemUgaXMgbm90IE5VTEwsIG9yCiAgICBOVUxMIG9uIGVycm9yIChkZWNvZGluZyBvciBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcikuIElmIHNpemUgaXMgbm90IE5VTEwsCiAgICAqc2l6ZSBpcyBzZXQgdG8gKHNpemVfdCktMSBvbiBtZW1vcnkgZXJyb3IgYW5kIChzaXplX3QpLTIgb24gZGVjb2RpbmcKQEAgLTI1NSw5ICsyNzQsOSBAQAogICAgIHdjaGFyX3QgKnJlczsKICAgICBzaXplX3QgYXJnc2l6ZTsKICAgICBzaXplX3QgY291bnQ7CisjaWZkZWYgSEFWRV9NQlJUT1dDCiAgICAgdW5zaWduZWQgY2hhciAqaW47CiAgICAgd2NoYXJfdCAqb3V0OwotI2lmZGVmIEhBVkVfTUJSVE9XQwogICAgIG1ic3RhdGVfdCBtYnM7CiAjZW5kaWYKIApAQCAtMjg0LDcgKzMwMyw3IEBACiAgICAgYXJnc2l6ZSA9IG1ic3Rvd2NzKE5VTEwsIGFyZywgMCk7CiAjZW5kaWYKICAgICBpZiAoYXJnc2l6ZSAhPSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgIHJlcyA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKChhcmdzaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHJlcyA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKChhcmdzaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghcmVzKQogICAgICAgICAgICAgZ290byBvb207CiAgICAgICAgIGNvdW50ID0gbWJzdG93Y3MocmVzLCBhcmcsIGFyZ3NpemUrMSk7CkBAIC0yOTMsNyArMzEyLDcgQEAKICAgICAgICAgICAgIC8qIE9ubHkgdXNlIHRoZSByZXN1bHQgaWYgaXQgY29udGFpbnMgbm8KICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzLiAqLwogICAgICAgICAgICAgZm9yICh0bXAgPSByZXM7ICp0bXAgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICgqdG1wIDwgMHhkODAwIHx8ICp0bXAgPiAweGRmZmYpOyB0bXArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAhUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoKnRtcCk7IHRtcCsrKQogICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIGlmICgqdG1wID09IDApIHsKICAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPSBOVUxMKQpAQCAtMzAxLDcgKzMyMCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBQeU1lbV9GcmVlKHJlcyk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocmVzKTsKICAgICB9CiAgICAgLyogQ29udmVyc2lvbiBmYWlsZWQuIEZhbGwgYmFjayB0byBlc2NhcGluZyB3aXRoIHN1cnJvZ2F0ZWVzY2FwZS4gKi8KICNpZmRlZiBIQVZFX01CUlRPV0MKQEAgLTMxMCw3ICszMjksNyBAQAogICAgIC8qIE92ZXJhbGxvY2F0ZTsgYXMgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFyZSBpbiB0aGUgYXJndW1lbnQsIHRoZQogICAgICAgIGFjdHVhbCBvdXRwdXQgY291bGQgdXNlIGxlc3MgbWVtb3J5LiAqLwogICAgIGFyZ3NpemUgPSBzdHJsZW4oYXJnKSArIDE7Ci0gICAgcmVzID0gKHdjaGFyX3QqKVB5TWVtX01hbGxvYyhhcmdzaXplKnNpemVvZih3Y2hhcl90KSk7CisgICAgcmVzID0gKHdjaGFyX3QqKVB5TWVtX1Jhd01hbGxvYyhhcmdzaXplKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFyZXMpCiAgICAgICAgIGdvdG8gb29tOwogICAgIGluID0gKHVuc2lnbmVkIGNoYXIqKWFyZzsKQEAgLTMyNiw3ICszNDUsNyBAQAogICAgICAgICAgICAgICAgc2luY2Ugd2UgcHJvdmlkZSBldmVyeXRoaW5nIHRoYXQgd2UgaGF2ZSAtCiAgICAgICAgICAgICAgICB1bmxlc3MgdGhlcmUgaXMgYSBidWcgaW4gdGhlIEMgbGlicmFyeSwgb3IgSQogICAgICAgICAgICAgICAgbWlzdW5kZXJzdG9vZCBob3cgbWJydG93YyB3b3Jrcy4gKi8KLSAgICAgICAgICAgIFB5TWVtX0ZyZWUocmVzKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocmVzKTsKICAgICAgICAgICAgIGlmIChzaXplICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgKnNpemUgPSAoc2l6ZV90KS0yOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMzksNyArMzU4LDcgQEAKICAgICAgICAgICAgIG1lbXNldCgmbWJzLCAwLCBzaXplb2YgbWJzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICgqb3V0ID49IDB4ZDgwMCAmJiAqb3V0IDw9IDB4ZGZmZikgeworICAgICAgICBpZiAoUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoKm91dCkpIHsKICAgICAgICAgICAgIC8qIFN1cnJvZ2F0ZSBjaGFyYWN0ZXIuICBFc2NhcGUgdGhlIG9yaWdpbmFsCiAgICAgICAgICAgICAgICBieXRlIHNlcXVlbmNlIHdpdGggc3Vycm9nYXRlZXNjYXBlLiAqLwogICAgICAgICAgICAgYXJnc2l6ZSAtPSBjb252ZXJ0ZWQ7CkBAIC01NDgsMTQgKzU2NywyMzUgQEAKIAogI2VuZGlmCiAKLS8qIE9wZW4gYSBmaWxlLiBVc2UgX3dmb3BlbigpIG9uIFdpbmRvd3MsIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlCi0gICBlbmNvZGluZyBhbmQgdXNlIGZvcGVuKCkgb3RoZXJ3aXNlLiAqLworc3RhdGljIGludAorZ2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IHJhaXNlKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOwogCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIUdldEhhbmRsZUluZm9ybWF0aW9uKGhhbmRsZSwgJmZsYWdzKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAoZmxhZ3MgJiBIQU5ETEVfRkxBR19JTkhFUklUKTsKKyNlbHNlCisgICAgaW50IGZsYWdzOworCisgICAgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCwgMCk7CisgICAgaWYgKGZsYWdzID09IC0xKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gIShmbGFncyAmIEZEX0NMT0VYRUMpOworI2VuZGlmCit9CisKKy8qIEdldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4KKyAgIFJldHVybiAxIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgY2FuIGJlIGluaGVyaXRlZCwgMCBpZiBpdCBjYW5ub3QsCisgICByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK2ludAorX1B5X2dldF9pbmhlcml0YWJsZShpbnQgZmQpCit7CisgICAgcmV0dXJuIGdldF9pbmhlcml0YWJsZShmZCwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwgaW50IHJhaXNlLCBpbnQgKmF0b21pY19mbGFnX3dvcmtzKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOworI2Vsc2UKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmIGRlZmluZWQoRklPQ0xFWCkgJiYgZGVmaW5lZChGSU9OQ0xFWCkKKyAgICBzdGF0aWMgaW50IGlvY3RsX3dvcmtzID0gLTE7CisgICAgaW50IHJlcXVlc3Q7CisgICAgaW50IGVycjsKKyNlbmRpZgorICAgIGludCBmbGFnczsKKyAgICBpbnQgcmVzOworI2VuZGlmCisKKyAgICAvKiBhdG9taWNfZmxhZ193b3JrcyBjYW4gb25seSBiZSB1c2VkIHRvIG1ha2UgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGFzc2VydCghKGF0b21pY19mbGFnX3dvcmtzICE9IE5VTEwgJiYgaW5oZXJpdGFibGUpKTsKKworICAgIGlmIChhdG9taWNfZmxhZ193b3JrcyAhPSBOVUxMICYmICFpbmhlcml0YWJsZSkgeworICAgICAgICBpZiAoKmF0b21pY19mbGFnX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICBpbnQgaW5oZXJpdGFibGUgPSBnZXRfaW5oZXJpdGFibGUoZmQsIHJhaXNlKTsKKyAgICAgICAgICAgIGlmIChpbmhlcml0YWJsZSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAqYXRvbWljX2ZsYWdfd29ya3MgPSAhaW5oZXJpdGFibGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKmF0b21pY19mbGFnX3dvcmtzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyA9IEhBTkRMRV9GTEFHX0lOSEVSSVQ7CisgICAgZWxzZQorICAgICAgICBmbGFncyA9IDA7CisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbihoYW5kbGUsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIGZsYWdzKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKKworI2Vsc2UKKworI2lmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIGlmIChpb2N0bF93b3JrcyAhPSAwKSB7CisgICAgICAgIC8qIGZhc3QtcGF0aDogaW9jdGwoKSBvbmx5IHJlcXVpcmVzIG9uZSBzeXNjYWxsICovCisgICAgICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgICAgIHJlcXVlc3QgPSBGSU9OQ0xFWDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVxdWVzdCA9IEZJT0NMRVg7CisgICAgICAgIGVyciA9IGlvY3RsKGZkLCByZXF1ZXN0LCBOVUxMKTsKKyAgICAgICAgaWYgKCFlcnIpIHsKKyAgICAgICAgICAgIGlvY3RsX3dvcmtzID0gMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm5vICE9IEVOT1RUWSkgeworICAgICAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIElzc3VlICMyMjI1ODogSGVyZSwgRU5PVFRZIG1lYW5zICJJbmFwcHJvcHJpYXRlIGlvY3RsIGZvcgorICAgICAgICAgICAgICAgZGV2aWNlIi4gVGhlIGlvY3RsIGlzIGRlY2xhcmVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICBSZW1lbWJlciB0aGF0IGlvY3RsKCkgZG9lc24ndCB3b3JrLiBJdCBpcyB0aGUgY2FzZSBvbgorICAgICAgICAgICAgICAgSWxsdW1vcy1iYXNlZCBPUyBmb3IgZXhhbXBsZS4gKi8KKyAgICAgICAgICAgIGlvY3RsX3dvcmtzID0gMDsKKyAgICAgICAgfQorICAgICAgICAvKiBmYWxsYmFjayB0byBmY250bCgpIGlmIGlvY3RsKCkgZG9lcyBub3Qgd29yayAqLworICAgIH0KKyNlbmRpZgorCisgICAgLyogc2xvdy1wYXRoOiBmY250bCgpIHJlcXVpcmVzIHR3byBzeXNjYWxscyAqLworICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworICAgIGlmIChmbGFncyA8IDApIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyAmPSB+RkRfQ0xPRVhFQzsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzIHw9IEZEX0NMT0VYRUM7CisgICAgcmVzID0gZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyogTWFrZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG5vbi1pbmhlcml0YWJsZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAorbWFrZV9ub25faW5oZXJpdGFibGUoaW50IGZkKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIE5VTEwpOworfQorCisvKiBTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisgICBPbiBzdWNjZXNzOiByZXR1cm4gMCwgb24gZXJyb3I6IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiByYWlzZSBpcyBub256ZXJvCisgICBhbmQgcmV0dXJuIC0xLgorCisgICBJZiBhdG9taWNfZmxhZ193b3JrcyBpcyBub3QgTlVMTDoKKworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0tMSwgY2hlY2sgaWYgdGhlIGluaGVyaXRhYmxlIGlzIHNldCBvbiB0aGUgZmlsZQorICAgICAgZGVzY3JpcHRvcjogaWYgeWVzLCBzZXQgKmF0b21pY19mbGFnX3dvcmtzIHRvIDEsIG90aGVyd2lzZSBzZXQgdG8gMCBhbmQKKyAgICAgIHNldCB0aGUgaW5oZXJpdGFibGUgZmxhZworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0xOiBkbyBub3RoaW5nCisgICAgKiBpZiAqYXRvbWljX2ZsYWdfd29ya3M9PTA6IHNldCBpbmhlcml0YWJsZSBmbGFnIHRvIEZhbHNlCisKKyAgIFNldCBhdG9taWNfZmxhZ193b3JrcyB0byBOVUxMIGlmIG5vIGF0b21pYyBmbGFnIHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvci4KKworICAgYXRvbWljX2ZsYWdfd29ya3MgY2FuIG9ubHkgYmUgdXNlZCB0byBtYWtlIGEgZmlsZSBkZXNjcmlwdG9yCisgICBub24taW5oZXJpdGFibGU6IGF0b21pY19mbGFnX3dvcmtzIG11c3QgYmUgTlVMTCBpZiBpbmhlcml0YWJsZT0xLiAqLworaW50CitfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLCBpbnQgKmF0b21pY19mbGFnX3dvcmtzKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCAxLCBhdG9taWNfZmxhZ193b3Jrcyk7Cit9CisKKy8qIE9wZW4gYSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyAod3JhcHBlciB0byBvcGVuKCkgZnVuY3Rpb24pLgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4gKi8KK2ludAorX1B5X29wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncykKK3sKKyAgICBpbnQgZmQ7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MgfCBPX05PSU5IRVJJVCk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZkOworI2Vsc2UKKworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3M7CisjaWZkZWYgT19DTE9FWEVDCisgICAgYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZWxzZQorICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiBmZDsKKworICAgIGlmIChzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmICAgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gZmQ7Cit9CisKKy8qIE9wZW4gYSBmaWxlLiBVc2UgX3dmb3BlbigpIG9uIFdpbmRvd3MsIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlCisgICBlbmNvZGluZyBhbmQgdXNlIGZvcGVuKCkgb3RoZXJ3aXNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQKKyAgIG5vbi1pbmhlcml0YWJsZS4gKi8KIEZJTEUgKgogX1B5X3dmb3Blbihjb25zdCB3Y2hhcl90ICpwYXRoLCBjb25zdCB3Y2hhcl90ICptb2RlKQogewotI2lmbmRlZiBNU19XSU5ET1dTCiAgICAgRklMRSAqZjsKKyNpZm5kZWYgTVNfV0lORE9XUwogICAgIGNoYXIgKmNwYXRoOwogICAgIGNoYXIgY21vZGVbMTBdOwogICAgIHNpemVfdCByOwpAQCAtNTY5LDIxICs4MDksNDIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZiA9IGZvcGVuKGNwYXRoLCBjbW9kZSk7CiAgICAgUHlNZW1fRnJlZShjcGF0aCk7Ci0gICAgcmV0dXJuIGY7CiAjZWxzZQotICAgIHJldHVybiBfd2ZvcGVuKHBhdGgsIG1vZGUpOworICAgIGYgPSBfd2ZvcGVuKHBhdGgsIG1vZGUpOwogI2VuZGlmCisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG1ha2Vfbm9uX2luaGVyaXRhYmxlKGZpbGVubyhmKSkgPCAwKSB7CisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmOwogfQogCi0vKiBDYWxsIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgYW5kCi0gICBjYWxsIGZvcGVuKCkgb3RoZXJ3aXNlLgorLyogV3JhcHBlciB0byBmb3BlbigpLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLiAqLworRklMRSoKK19QeV9mb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKyAgICBGSUxFICpmID0gZm9wZW4ocGF0aG5hbWUsIG1vZGUpOworICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZjsKK30KKworLyogT3BlbiBhIGZpbGUuIENhbGwgX3dmb3BlbigpIG9uIFdpbmRvd3MsIG9yIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgZmlsZXN5c3RlbQorICAgZW5jb2RpbmcgYW5kIGNhbGwgZm9wZW4oKSBvdGhlcndpc2UuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZAorICAgbm9uLWluaGVyaXRhYmxlLgogCiAgICBSZXR1cm4gdGhlIG5ldyBmaWxlIG9iamVjdCBvbiBzdWNjZXNzLCBvciBOVUxMIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuIG9yCi0gICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvciAqLwotCisgICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvci4gKi8KIEZJTEUqCi1fUHlfZm9wZW4oUHlPYmplY3QgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCitfUHlfZm9wZW5fb2JqKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogeworICAgIEZJTEUgKmY7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHdjaGFyX3QgKndwYXRoOwogICAgIHdjaGFyX3Qgd21vZGVbMTBdOwpAQCAtNjAzLDE2ICs4NjQsMjEgQEAKICAgICBpZiAodXNpemUgPT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gX3dmb3Blbih3cGF0aCwgd21vZGUpOworICAgIGYgPSBfd2ZvcGVuKHdwYXRoLCB3bW9kZSk7CiAjZWxzZQotICAgIEZJTEUgKmY7CiAgICAgUHlPYmplY3QgKmJ5dGVzOwogICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKHBhdGgsICZieXRlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGYgPSBmb3BlbihQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksIG1vZGUpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7Ci0gICAgcmV0dXJuIGY7CiAjZW5kaWYKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWFrZV9ub25faW5oZXJpdGFibGUoZmlsZW5vKGYpKSA8IDApIHsKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGY7CiB9CiAKICNpZmRlZiBIQVZFX1JFQURMSU5LCkBAIC02NDksMTIgKzkxNSwxMiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChidWZzaXogPD0gcjEpIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgd2NzbmNweShidWYsIHdidWYsIGJ1ZnNpeik7Ci0gICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIHJldHVybiAoaW50KXIxOwogfQogI2VuZGlmCkBAIC02OTAsMTIgKzk1NiwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKHJlc29sdmVkX3BhdGhfc2l6ZSA8PSByKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdyZXNvbHZlZF9wYXRoKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KHJlc29sdmVkX3BhdGgsIHdyZXNvbHZlZF9wYXRoLCByZXNvbHZlZF9wYXRoX3NpemUpOwotICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgIFB5TWVtX1Jhd0ZyZWUod3Jlc29sdmVkX3BhdGgpOwogICAgIHJldHVybiByZXNvbHZlZF9wYXRoOwogfQogI2VuZGlmCkBAIC03MDgsNyArOTc0LDggQEAKIF9QeV93Z2V0Y3dkKHdjaGFyX3QgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIHJldHVybiBfd2dldGN3ZChidWYsIHNpemUpOworICAgIGludCBpc2l6ZSA9IChpbnQpUHlfTUlOKHNpemUsIElOVF9NQVgpOworICAgIHJldHVybiBfd2dldGN3ZChidWYsIGlzaXplKTsKICNlbHNlCiAgICAgY2hhciBmbmFtZVtNQVhQQVRITEVOXTsKICAgICB3Y2hhcl90ICp3bmFtZTsKQEAgLTcyMCwxMiArOTg3LDgxIEBACiAgICAgaWYgKHduYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplIDw9IGxlbikgewotICAgICAgICBQeU1lbV9GcmVlKHduYW1lKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3bmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KGJ1Ziwgd25hbWUsIHNpemUpOwotICAgIFB5TWVtX0ZyZWUod25hbWUpOworICAgIFB5TWVtX1Jhd0ZyZWUod25hbWUpOwogICAgIHJldHVybiBidWY7CiAjZW5kaWYKIH0KIAorLyogRHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIGFzCisgICBub24taW5oZXJpdGFibGUuIFJldHVybiBhIG5ldyBmaWxlIGRlc2NyaXB0b3Igb24gc3VjY2VzcywgcmFpc2UgYW4gT1NFcnJvcgorICAgZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuCisKKyAgIFRoZSBHSUwgaXMgcmVsZWFzZWQgdG8gY2FsbCBkdXAoKS4gVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIEdJTC4gKi8KK2ludAorX1B5X2R1cChpbnQgZmQpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgZnR5cGU7CisjZW5kaWYKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGdldCB0aGUgZmlsZSB0eXBlLCBpZ25vcmUgdGhlIGVycm9yIGlmIGl0IGZhaWxlZCAqLworICAgIGZ0eXBlID0gR2V0RmlsZVR5cGUoaGFuZGxlKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmZCA9IGR1cChmZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIENoYXJhY3RlciBmaWxlcyBsaWtlIGNvbnNvbGUgY2Fubm90IGJlIG1ha2Ugbm9uLWluaGVyaXRhYmxlICovCisgICAgaWYgKGZ0eXBlICE9IEZJTEVfVFlQRV9DSEFSKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQRkRfQ0xPRVhFQykKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBmY250bChmZCwgRl9EVVBGRF9DTE9FWEVDLCAwKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjZWxzZQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmZCA9IGR1cChmZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGZkOworfQorCmRpZmYgLS1naXQgYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCmluZGV4IGE2NTE2ZGMuLmUzYTgxNDkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCisrKyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCkBAIC0xNTYsOCArMTU2LDkgQEAKIAogICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7CiAgICAgaW50IGFsaWduX3NwZWNpZmllZCA9IDA7CisgICAgaW50IGZpbGxfY2hhcl9zcGVjaWZpZWQgPSAwOwogCi0gICAgZm9ybWF0LT5maWxsX2NoYXIgPSAnXDAnOworICAgIGZvcm1hdC0+ZmlsbF9jaGFyID0gJyAnOwogICAgIGZvcm1hdC0+YWxpZ24gPSBkZWZhdWx0X2FsaWduOwogICAgIGZvcm1hdC0+YWx0ZXJuYXRlID0gMDsKICAgICBmb3JtYXQtPnNpZ24gPSAnXDAnOwpAQCAtMTcxLDYgKzE3Miw3IEBACiAgICAgaWYgKGVuZC1wb3MgPj0gMiAmJiBpc19hbGlnbm1lbnRfdG9rZW4oUkVBRF9zcGVjKHBvcysxKSkpIHsKICAgICAgICAgZm9ybWF0LT5hbGlnbiA9IFJFQURfc3BlYyhwb3MrMSk7CiAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyID0gUkVBRF9zcGVjKHBvcyk7CisgICAgICAgIGZpbGxfY2hhcl9zcGVjaWZpZWQgPSAxOwogICAgICAgICBhbGlnbl9zcGVjaWZpZWQgPSAxOwogICAgICAgICBwb3MgKz0gMjsKICAgICB9CkBAIC0xOTQsNyArMTk2LDcgQEAKICAgICB9CiAKICAgICAvKiBUaGUgc3BlY2lhbCBjYXNlIGZvciAwLXBhZGRpbmcgKGJhY2t3YXJkcyBjb21wYXQpICovCi0gICAgaWYgKGZvcm1hdC0+ZmlsbF9jaGFyID09ICdcMCcgJiYgZW5kLXBvcyA+PSAxICYmIFJFQURfc3BlYyhwb3MpID09ICcwJykgeworICAgIGlmICghZmlsbF9jaGFyX3NwZWNpZmllZCAmJiBlbmQtcG9zID49IDEgJiYgUkVBRF9zcGVjKHBvcykgPT0gJzAnKSB7CiAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyID0gJzAnOwogICAgICAgICBpZiAoIWFsaWduX3NwZWNpZmllZCkgewogICAgICAgICAgICAgZm9ybWF0LT5hbGlnbiA9ICc9JzsKQEAgLTMxNSw3ICszMTcsNyBAQAogCiAvKiBEbyB0aGUgcGFkZGluZywgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGNhbGxlci1zdXBwbGllZAogICAgY29udGVudCBnb2VzLiAqLwotc3RhdGljIFB5X3NzaXplX3QKK3N0YXRpYyBpbnQKIGZpbGxfcGFkZGluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgUHlfc3NpemVfdCBuY2hhcnMsCiAgICAgICAgICAgICAgUHlfVUNTNCBmaWxsX2NoYXIsIFB5X3NzaXplX3Qgbl9scGFkZGluZywKQEAgLTU1Niw3ICs1NTgsNyBAQAogewogICAgIC8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBkaWdpdHMsIGRlY2ltYWwsIGFuZCByZW1haW5kZXIuICovCiAgICAgUHlfc3NpemVfdCBkX3BvcyA9IGRfc3RhcnQ7Ci0gICAgY29uc3QgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kID0gd3JpdGVyLT5raW5kOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBraW5kID0gd3JpdGVyLT5raW5kOwogICAgIGNvbnN0IHZvaWQgKmRhdGEgPSB3cml0ZXItPmRhdGE7CiAgICAgUHlfc3NpemVfdCByOwogCkBAIC03NTcsNyArNzU5LDggQEAKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIAotICAgIGlmIChmb3JtYXQtPndpZHRoID09IC0xICYmIGZvcm1hdC0+cHJlY2lzaW9uID09IC0xKSB7CisgICAgaWYgKChmb3JtYXQtPndpZHRoID09IC0xIHx8IGZvcm1hdC0+d2lkdGggPD0gbGVuKQorICAgICAgICAmJiAoZm9ybWF0LT5wcmVjaXNpb24gPT0gLTEgfHwgZm9ybWF0LT5wcmVjaXNpb24gPj0gbGVuKSkgewogICAgICAgICAvKiBGYXN0IHBhdGggKi8KICAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCB2YWx1ZSk7CiAgICAgfQpAQCAtNzcwLDE4ICs3NzMsMjAgQEAKIAogICAgIGNhbGNfcGFkZGluZyhsZW4sIGZvcm1hdC0+d2lkdGgsIGZvcm1hdC0+YWxpZ24sICZscGFkLCAmcnBhZCwgJnRvdGFsKTsKIAotICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHZhbHVlLCAwLCBsZW4pOworICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CiAgICAgaWYgKGxwYWQgIT0gMCB8fCBycGFkICE9IDApCiAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgZm9ybWF0LT5maWxsX2NoYXIpOworICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodmFsdWUpID4gbWF4Y2hhcikgeworICAgICAgICBQeV9VQ1M0IHZhbG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHZhbHVlLCAwLCBsZW4pOworICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHZhbG1heGNoYXIpOworICAgIH0KIAogICAgIC8qIGFsbG9jYXRlIHRoZSByZXN1bHRpbmcgc3RyaW5nICovCiAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIHRvdGFsLCBtYXhjaGFyKSA9PSAtMSkKICAgICAgICAgZ290byBkb25lOwogCiAgICAgLyogV3JpdGUgaW50byB0aGF0IHNwYWNlLiBGaXJzdCB0aGUgcGFkZGluZy4gKi8KLSAgICByZXN1bHQgPSBmaWxsX3BhZGRpbmcod3JpdGVyLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyPT0nXDAnPycgJzpmb3JtYXQtPmZpbGxfY2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbHBhZCwgcnBhZCk7CisgICAgcmVzdWx0ID0gZmlsbF9wYWRkaW5nKHdyaXRlciwgbGVuLCBmb3JtYXQtPmZpbGxfY2hhciwgbHBhZCwgcnBhZCk7CiAgICAgaWYgKHJlc3VsdCA9PSAtMSkKICAgICAgICAgZ290byBkb25lOwogCkBAIC05NTEsOCArOTU2LDcgQEAKICAgICAvKiBQb3B1bGF0ZSB0aGUgbWVtb3J5LiAqLwogICAgIHJlc3VsdCA9IGZpbGxfbnVtYmVyKHdyaXRlciwgJnNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCBpbnVtZXJpY19jaGFycywgaW51bWVyaWNfY2hhcnMgKyBuX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIHByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciA9PSAnXDAnID8gJyAnIDogZm9ybWF0LT5maWxsX2NoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCBwcmVmaXgsIGZvcm1hdC0+ZmlsbF9jaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbGUsIGZvcm1hdC0+dHlwZSA9PSAnWCcpOwogCiBkb25lOgpAQCAtOTc3LDggKzk4MSw3IEBACiAgICAgUHlfc3NpemVfdCBuX3RvdGFsOwogICAgIGludCBoYXNfZGVjaW1hbDsKICAgICBkb3VibGUgdmFsOwotICAgIFB5X3NzaXplX3QgcHJlY2lzaW9uOwotICAgIFB5X3NzaXplX3QgZGVmYXVsdF9wcmVjaXNpb24gPSA2OworICAgIGludCBwcmVjaXNpb24sIGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKICAgICBQeV9VQ1M0IHR5cGUgPSBmb3JtYXQtPnR5cGU7CiAgICAgaW50IGFkZF9wY3QgPSAwOwogICAgIFB5X3NzaXplX3QgaW5kZXg7CkBAIC0xMDQ5LDI0ICsxMDUyLDI0IEBACiAgICAgICAgIG5fZGlnaXRzICs9IDE7CiAgICAgfQogCi0gICAgLyogU2luY2UgdGhlcmUgaXMgbm8gdW5pY29kZSB2ZXJzaW9uIG9mIFB5T1NfZG91YmxlX3RvX3N0cmluZywKLSAgICAgICBqdXN0IHVzZSB0aGUgOCBiaXQgdmVyc2lvbiBhbmQgdGhlbiBjb252ZXJ0IHRvIHVuaWNvZGUuICovCi0gICAgdW5pY29kZV90bXAgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShidWYsIG5fZGlnaXRzKTsKLSAgICBQeU1lbV9GcmVlKGJ1Zik7Ci0gICAgaWYgKHVuaWNvZGVfdG1wID09IE5VTEwpCi0gICAgICAgIGdvdG8gZG9uZTsKLQogICAgIGlmIChmb3JtYXQtPnNpZ24gIT0gJysnICYmIGZvcm1hdC0+c2lnbiAhPSAnICcKICAgICAgICAgJiYgZm9ybWF0LT53aWR0aCA9PSAtMQogICAgICAgICAmJiBmb3JtYXQtPnR5cGUgIT0gJ24nCiAgICAgICAgICYmICFmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzKQogICAgIHsKICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgIHJlc3VsdCA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCB1bmljb2RlX3RtcCk7Ci0gICAgICAgIFB5X0RFQ1JFRih1bmljb2RlX3RtcCk7CisgICAgICAgIHJlc3VsdCA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyh3cml0ZXIsIGJ1Ziwgbl9kaWdpdHMpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgLyogU2luY2UgdGhlcmUgaXMgbm8gdW5pY29kZSB2ZXJzaW9uIG9mIFB5T1NfZG91YmxlX3RvX3N0cmluZywKKyAgICAgICBqdXN0IHVzZSB0aGUgOCBiaXQgdmVyc2lvbiBhbmQgdGhlbiBjb252ZXJ0IHRvIHVuaWNvZGUuICovCisgICAgdW5pY29kZV90bXAgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShidWYsIG5fZGlnaXRzKTsKKyAgICBQeU1lbV9GcmVlKGJ1Zik7CisgICAgaWYgKHVuaWNvZGVfdG1wID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKwogICAgIC8qIElzIGEgc2lnbiBjaGFyYWN0ZXIgcHJlc2VudCBpbiB0aGUgb3V0cHV0PyAgSWYgc28sIHJlbWVtYmVyIGl0CiAgICAgICAgYW5kIHNraXAgaXQgKi8KICAgICBpbmRleCA9IDA7CkBAIC0xMTAwLDggKzExMDMsNyBAQAogICAgIC8qIFBvcHVsYXRlIHRoZSBtZW1vcnkuICovCiAgICAgcmVzdWx0ID0gZmlsbF9udW1iZXIod3JpdGVyLCAmc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlX3RtcCwgaW5kZXgsIGluZGV4ICsgbl9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciA9PSAnXDAnID8gJyAnIDogZm9ybWF0LT5maWxsX2NoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgZm9ybWF0LT5maWxsX2NoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsZSwgMCk7CiAKIGRvbmU6CkBAIC0xMTMzLDggKzExMzUsNyBAQAogICAgIFB5X3NzaXplX3Qgbl9pbV90b3RhbDsKICAgICBpbnQgcmVfaGFzX2RlY2ltYWw7CiAgICAgaW50IGltX2hhc19kZWNpbWFsOwotICAgIGludCBwcmVjaXNpb247Ci0gICAgUHlfc3NpemVfdCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CisgICAgaW50IHByZWNpc2lvbiwgZGVmYXVsdF9wcmVjaXNpb24gPSA2OwogICAgIFB5X1VDUzQgdHlwZSA9IGZvcm1hdC0+dHlwZTsKICAgICBQeV9zc2l6ZV90IGlfcmU7CiAgICAgUHlfc3NpemVfdCBpX2ltOwpAQCAtMTMwOCw4ICsxMzA5LDcgQEAKICAgICAvKiBQb3B1bGF0ZSB0aGUgbWVtb3J5LiBGaXJzdCwgdGhlIHBhZGRpbmcuICovCiAgICAgcmVzdWx0ID0gZmlsbF9wYWRkaW5nKHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9yZV90b3RhbCArIG5faW1fdG90YWwgKyAxICsgYWRkX3BhcmVucyAqIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyPT0nXDAnID8gJyAnIDogZm9ybWF0LT5maWxsX2NoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxwYWQsIHJwYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciwgbHBhZCwgcnBhZCk7CiAgICAgaWYgKHJlc3VsdCA9PSAtMSkKICAgICAgICAgZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9QeXRob24vZnJvemVuLmMgYi9QeXRob24vZnJvemVuLmMKaW5kZXggMjVmZGMxNy4uOWJjNjYyYiAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zyb3plbi5jCisrKyBiL1B5dGhvbi9mcm96ZW4uYwpAQCAtMjgsNyArMjgsNyBAQAogCiAjZGVmaW5lIFNJWkUgKGludClzaXplb2YoTV9fX2hlbGxvX18pCiAKLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CiAgICAgLyogaW1wb3J0bGliICovCiAgICAgeyJfZnJvemVuX2ltcG9ydGxpYiIsIF9QeV9NX19pbXBvcnRsaWIsIChpbnQpc2l6ZW9mKF9QeV9NX19pbXBvcnRsaWIpfSwKICAgICAvKiBUZXN0IG1vZHVsZSAqLwpAQCAtNDIsNCArNDIsNCBAQAogLyogRW1iZWRkaW5nIGFwcHMgbWF5IGNoYW5nZSB0aGlzIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlaXIgZmF2b3JpdGUKICAgIGNvbGxlY3Rpb24gb2YgZnJvemVuIG1vZHVsZXM6ICovCiAKLXN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzID0gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXM7Citjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlcyA9IF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zyb3plbm1haW4uYyBiL1B5dGhvbi9mcm96ZW5tYWluLmMKaW5kZXggOGIxZjJkNC4uNTVkMDVmYyAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zyb3plbm1haW4uYworKysgYi9QeXRob24vZnJvemVubWFpbi5jCkBAIC0xNiwxOSArMTYsMTkgQEAKIFB5X0Zyb3plbk1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICAgIGNoYXIgKnA7Ci0gICAgaW50IGksIG4sIHN0czsKKyAgICBpbnQgaSwgbiwgc3RzID0gMTsKICAgICBpbnQgaW5zcGVjdCA9IDA7CiAgICAgaW50IHVuYnVmZmVyZWQgPSAwOwotICAgIGNoYXIgKm9sZGxvYzsKLSAgICB3Y2hhcl90ICoqYXJndl9jb3B5OworICAgIGNoYXIgKm9sZGxvYyA9IE5VTEw7CisgICAgd2NoYXJfdCAqKmFyZ3ZfY29weSA9IE5VTEw7CiAgICAgLyogV2UgbmVlZCBhIHNlY29uZCBjb3BpZXMsIGFzIFB5dGhvbiBtaWdodCBtb2RpZnkgdGhlIGZpcnN0IG9uZS4gKi8KLSAgICB3Y2hhcl90ICoqYXJndl9jb3B5MjsKKyAgICB3Y2hhcl90ICoqYXJndl9jb3B5MiA9IE5VTEw7CiAKLSAgICBhcmd2X2NvcHkgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSphcmdjKTsKLSAgICBhcmd2X2NvcHkyID0gUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqYXJnYyk7CisgICAgYXJndl9jb3B5ID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiBhcmdjKTsKKyAgICBhcmd2X2NvcHkyID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiBhcmdjKTsKICAgICBpZiAoIWFyZ3ZfY29weSB8fCAhYXJndl9jb3B5MikgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICBQeV9Gcm96ZW5GbGFnID0gMTsgLyogU3VwcHJlc3MgZXJyb3JzIGZyb20gZ2V0cGF0aC5jICovCkBAIC00NCwzMiArNDQsMjYgQEAKICAgICAgICAgc2V0YnVmKHN0ZGVyciwgKGNoYXIgKilOVUxMKTsKICAgICB9CiAKLSAgICBvbGRsb2MgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKwogICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0jaWZkZWYgSEFWRV9CUk9LRU5fTUJTVE9XQ1MKLSAgICAgICAgc2l6ZV90IGFyZ3NpemUgPSBzdHJsZW4oYXJndltpXSk7Ci0jZWxzZQotICAgICAgICBzaXplX3QgYXJnc2l6ZSA9IG1ic3Rvd2NzKE5VTEwsIGFyZ3ZbaV0sIDApOwotI2VuZGlmCi0gICAgICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAgaWYgKGFyZ3NpemUgPT0gKHNpemVfdCktMSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAlZCB0byBzdHJpbmdcbiIsIGkpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgYXJndl9jb3B5W2ldID0gUHlNZW1fTWFsbG9jKChhcmdzaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGFyZ3ZfY29weVtpXSA9IF9QeV9jaGFyMndjaGFyKGFyZ3ZbaV0sIE5VTEwpOwogICAgICAgICBhcmd2X2NvcHkyW2ldID0gYXJndl9jb3B5W2ldOwogICAgICAgICBpZiAoIWFyZ3ZfY29weVtpXSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50ID0gbWJzdG93Y3MoYXJndl9jb3B5W2ldLCBhcmd2W2ldLCBhcmdzaXplKzEpOwotICAgICAgICBpZiAoY291bnQgPT0gKHNpemVfdCktMSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAlZCB0byBzdHJpbmdcbiIsIGkpOwotICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOworICAgICAgICAgICAgYXJnYyA9IGk7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgfQogICAgIHNldGxvY2FsZShMQ19BTEwsIG9sZGxvYyk7CisgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOworICAgIG9sZGxvYyA9IE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlJbml0RnJvemVuRXh0ZW5zaW9ucygpOwpAQCAtMTAzLDEwICs5NywxNCBAQAogICAgIFB5V2luRnJlZXplX0V4ZVRlcm0oKTsKICNlbmRpZgogICAgIFB5X0ZpbmFsaXplKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weTJbaV0pOworCitlcnJvcjoKKyAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weSk7CisgICAgaWYgKGFyZ3ZfY29weTIpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5MltpXSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgfQotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5KTsKLSAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weTIpOworICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICByZXR1cm4gc3RzOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Z1dHVyZS5jIGIvUHl0aG9uL2Z1dHVyZS5jCmluZGV4IGQyNGFlNDEuLjgxZWFiNTQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mdXR1cmUuYworKysgYi9QeXRob24vZnV0dXJlLmMKQEAgLTExLDcgKzExLDcgQEAKICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0cyBtdXN0IG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUiCiAKIHN0YXRpYyBpbnQKLWZ1dHVyZV9jaGVja19mZWF0dXJlcyhQeUZ1dHVyZUZlYXR1cmVzICpmZiwgc3RtdF90eSBzLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2Z1dHVyZV9jaGVja19mZWF0dXJlcyhQeUZ1dHVyZUZlYXR1cmVzICpmZiwgc3RtdF90eSBzLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgaW50IGk7CiAgICAgYXNkbF9zZXEgKm5hbWVzOwpAQCAtNDMsMTIgKzQzLDEyIEBACiAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGZlYXR1cmUsICJicmFjZXMiKSA9PSAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNoYW5jZSIpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVU5ERUZJTkVEX0ZVVFVSRV9GRUFUVVJFLCBmZWF0dXJlKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNTYsMTMgKzU2LDE3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWZ1dHVyZV9wYXJzZShQeUZ1dHVyZUZlYXR1cmVzICpmZiwgbW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCitmdXR1cmVfcGFyc2UoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKLSAgICBpbnQgaSwgZm91bmRfZG9jc3RyaW5nID0gMCwgZG9uZSA9IDAsIHByZXZfbGluZSA9IDA7CisgICAgaW50IGksIGRvbmUgPSAwLCBwcmV2X2xpbmUgPSAwOworICAgIHN0bXRfdHkgZmlyc3Q7CiAKICAgICBpZiAoIShtb2QtPmtpbmQgPT0gTW9kdWxlX2tpbmQgfHwgbW9kLT5raW5kID09IEludGVyYWN0aXZlX2tpbmQpKQogICAgICAgICByZXR1cm4gMTsKIAorICAgIGlmIChhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KSA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKwogICAgIC8qIEEgc3Vic2VxdWVudCBwYXNzIHdpbGwgZGV0ZWN0IGZ1dHVyZSBpbXBvcnRzIHRoYXQgZG9uJ3QKICAgICAgICBhcHBlYXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZXJlJ3Mgb25lIGNhc2UsCiAgICAgICAgaG93ZXZlciwgdGhhdCBpcyBlYXNpZXIgdG8gaGFuZGxlIGhlcmU6IEEgc2VyaWVzIG9mIGltcG9ydHMKQEAgLTcxLDggKzc1LDEzIEBACiAgICAgICAgYnV0IGlzIHByZWNlZGVkIGJ5IGEgcmVndWxhciBpbXBvcnQuCiAgICAgKi8KIAorICAgIGkgPSAwOworICAgIGZpcnN0ID0gKHN0bXRfdHkpYXNkbF9zZXFfR0VUKG1vZC0+di5Nb2R1bGUuYm9keSwgaSk7CisgICAgaWYgKGZpcnN0LT5raW5kID09IEV4cHJfa2luZCAmJiBmaXJzdC0+di5FeHByLnZhbHVlLT5raW5kID09IFN0cl9raW5kKQorICAgICAgICBpKys7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXNkbF9zZXFfTEVOKG1vZC0+di5Nb2R1bGUuYm9keSk7IGkrKykgeworCisgICAgZm9yICg7IGkgPCBhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KTsgaSsrKSB7CiAgICAgICAgIHN0bXRfdHkgcyA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChtb2QtPnYuTW9kdWxlLmJvZHksIGkpOwogCiAgICAgICAgIGlmIChkb25lICYmIHMtPmxpbmVubyA+IHByZXZfbGluZSkKQEAgLTkyLDMyICsxMDEsMjcgQEAKICAgICAgICAgICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfTEFURV9GVVRVUkUpOwotICAgICAgICAgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKGZmLCBzLCBmaWxlbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGZmLT5mZl9saW5lbm8gPSBzLT5saW5lbm87CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzLT5raW5kID09IEV4cHJfa2luZCAmJiAhZm91bmRfZG9jc3RyaW5nKSB7Ci0gICAgICAgICAgICBleHByX3R5IGUgPSBzLT52LkV4cHIudmFsdWU7Ci0gICAgICAgICAgICBpZiAoZS0+a2luZCAhPSBTdHJfa2luZCkKLSAgICAgICAgICAgICAgICBkb25lID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3VuZF9kb2NzdHJpbmcgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMTsKIH0KIAogCiBQeUZ1dHVyZUZlYXR1cmVzICoKLVB5RnV0dXJlX0Zyb21BU1QobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCitQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBQeUZ1dHVyZUZlYXR1cmVzICpmZjsKIApAQCAtMTM1LDMgKzEzOSwxOCBAQAogICAgIH0KICAgICByZXR1cm4gZmY7CiB9CisKKworUHlGdXR1cmVGZWF0dXJlcyAqCitQeUZ1dHVyZV9Gcm9tQVNUKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0cikKK3sKKyAgICBQeUZ1dHVyZUZlYXR1cmVzICpmZjsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZmYgPSBQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZCwgZmlsZW5hbWUpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGZmOworfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dldGFyZ3MuYyBiL1B5dGhvbi9nZXRhcmdzLmMKaW5kZXggYWU5MzFiOS4uOTQ2ZmFmMiAxMDA2NDQKLS0tIGEvUHl0aG9uL2dldGFyZ3MuYworKysgYi9QeXRob24vZ2V0YXJncy5jCkBAIC00NiwxNCArNDYsMTYgQEAKIH0gZnJlZWxpc3RlbnRyeV90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIGludCBmaXJzdF9hdmFpbGFibGU7CiAgIGZyZWVsaXN0ZW50cnlfdCAqZW50cmllczsKKyAgaW50IGZpcnN0X2F2YWlsYWJsZTsKKyAgaW50IGVudHJpZXNfbWFsbG9jZWQ7CiB9IGZyZWVsaXN0X3Q7CiAKKyNkZWZpbmUgU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMgOAogCiAvKiBGb3J3YXJkICovCiBzdGF0aWMgaW50IHZnZXRhcmdzMShQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QgKiwgaW50KTsKLXN0YXRpYyB2b2lkIHNldGVycm9yKGludCwgY29uc3QgY2hhciAqLCBpbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworc3RhdGljIHZvaWQgc2V0ZXJyb3IoUHlfc3NpemVfdCwgY29uc3QgY2hhciAqLCBpbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogc3RhdGljIGNoYXIgKmNvbnZlcnRpdGVtKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiosIHZhX2xpc3QgKiwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIHNpemVfdCwgZnJlZWxpc3RfdCAqKTsKIHN0YXRpYyBjaGFyICpjb252ZXJ0dHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKiwgdmFfbGlzdCAqLCBpbnQsCkBAIC0xODcsNyArMTg5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlbGlzdC0+ZW50cmllc1tpbmRleF0uaXRlbSk7CiAgICAgICB9CiAgICAgfQotICAgIFB5TWVtX0ZSRUUoZnJlZWxpc3QtPmVudHJpZXMpOworICAgIGlmIChmcmVlbGlzdC0+ZW50cmllc19tYWxsb2NlZCkKKyAgICAgICAgUHlNZW1fRlJFRShmcmVlbGlzdC0+ZW50cmllcyk7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjA2LDggKzIwOSwxMyBAQAogICAgIGNvbnN0IGNoYXIgKmZvcm1hdHNhdmUgPSBmb3JtYXQ7CiAgICAgUHlfc3NpemVfdCBpLCBsZW47CiAgICAgY2hhciAqbXNnOwotICAgIGZyZWVsaXN0X3QgZnJlZWxpc3QgPSB7MCwgTlVMTH07CiAgICAgaW50IGNvbXBhdCA9IGZsYWdzICYgRkxBR19DT01QQVQ7CisgICAgZnJlZWxpc3RlbnRyeV90IHN0YXRpY19lbnRyaWVzW1NUQVRJQ19GUkVFTElTVF9FTlRSSUVTXTsKKyAgICBmcmVlbGlzdF90IGZyZWVsaXN0OworCisgICAgZnJlZWxpc3QuZW50cmllcyA9IHN0YXRpY19lbnRyaWVzOworICAgIGZyZWVsaXN0LmZpcnN0X2F2YWlsYWJsZSA9IDA7CisgICAgZnJlZWxpc3QuZW50cmllc19tYWxsb2NlZCA9IDA7CiAKICAgICBhc3NlcnQoY29tcGF0IHx8IChhcmdzICE9IChQeU9iamVjdCopTlVMTCkpOwogICAgIGZsYWdzID0gZmxhZ3MgJiB+RkxBR19DT01QQVQ7CkBAIC0yNDAsMTUgKzI0OCwxNSBAQAogICAgICAgICAgICAgbWVzc2FnZSA9IGZvcm1hdDsKICAgICAgICAgICAgIGVuZGZtdCA9IDE7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnfCc6CisgICAgICAgICAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICAgICAgICAgICAgICBtaW4gPSBtYXg7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChsZXZlbCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ08nKQotICAgICAgICAgICAgICAgICAgICBtYXgrKzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChQeV9JU0FMUEhBKFB5X0NIQVJNQVNLKGMpKSkgeworICAgICAgICAgICAgICAgIGlmIChQeV9JU0FMUEhBKFB5X0NIQVJNQVNLKGMpKSkKICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gJ2UnKSAvKiBza2lwIGVuY29kZWQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIG1heCsrOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnfCcpCi0gICAgICAgICAgICAgICAgICAgIG1pbiA9IG1heDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNjIsMTAgKzI3MCwxMyBAQAogCiAgICAgZm9ybWF0ID0gZm9ybWF0c2F2ZTsKIAotICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBtYXgpOwotICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1heCA+IFNUQVRJQ19GUkVFTElTVF9FTlRSSUVTKSB7CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBtYXgpOworICAgICAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZnJlZWxpc3QuZW50cmllc19tYWxsb2NlZCA9IDE7CiAgICAgfQogCiAgICAgaWYgKGNvbXBhdCkgewpAQCAtMzUwLDcgKzM2MSw3IEBACiAKIAogc3RhdGljIHZvaWQKLXNldGVycm9yKGludCBpYXJnLCBjb25zdCBjaGFyICptc2csIGludCAqbGV2ZWxzLCBjb25zdCBjaGFyICpmbmFtZSwKK3NldGVycm9yKFB5X3NzaXplX3QgaWFyZywgY29uc3QgY2hhciAqbXNnLCBpbnQgKmxldmVscywgY29uc3QgY2hhciAqZm5hbWUsCiAgICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlKQogewogICAgIGNoYXIgYnVmWzUxMl07CkBAIC0zNjYsMTAgKzM3NywxMCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChpYXJnICE9IDApIHsKICAgICAgICAgICAgIFB5T1Nfc25wcmludGYocCwgc2l6ZW9mKGJ1ZikgLSAocCAtIGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAlZCIsIGlhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCIsIGlhcmcpOwogICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICBwICs9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIHdoaWxlIChsZXZlbHNbaV0gPiAwICYmIGkgPCAzMiAmJiAoaW50KShwLWJ1ZikgPCAyMjApIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgMzIgJiYgbGV2ZWxzW2ldID4gMCAmJiAoaW50KShwLWJ1ZikgPCAyMjApIHsKICAgICAgICAgICAgICAgICBQeU9TX3NucHJpbnRmKHAsIHNpemVvZihidWYpIC0gKHAgLSBidWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgaXRlbSAlZCIsIGxldmVsc1tpXS0xKTsKICAgICAgICAgICAgICAgICBwICs9IHN0cmxlbihwKTsKQEAgLTQxNCw2ICs0MjUsNyBAQAogICAgIGludCBuID0gMDsKICAgICBjb25zdCBjaGFyICpmb3JtYXQgPSAqcF9mb3JtYXQ7CiAgICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBsZW47CiAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGludCBjID0gKmZvcm1hdCsrOwpAQCAtNDQzLDEyICs0NTUsMjAgQEAKICAgICAgICAgcmV0dXJuIG1zZ2J1ZjsKICAgICB9CiAKLSAgICBpZiAoKGkgPSBQeVNlcXVlbmNlX1NpemUoYXJnKSkgIT0gbikgeworICAgIGxlbiA9IFB5U2VxdWVuY2VfU2l6ZShhcmcpOworICAgIGlmIChsZW4gIT0gbikgewogICAgICAgICBsZXZlbHNbMF0gPSAwOwotICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA/ICJleHBlY3RlZCAlZCBhcmd1bWVudHMsIG5vdCAlZCIgOgotICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc2VxdWVuY2Ugb2YgbGVuZ3RoICVkLCBub3QgJWQiLAotICAgICAgICAgICAgICAgICAgbiwgaSk7CisgICAgICAgIGlmICh0b3BsZXZlbCkgeworICAgICAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlZCBhcmd1bWVudHMsIG5vdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgbGVuKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzZXF1ZW5jZSBvZiBsZW5ndGggJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgbGVuKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbXNnYnVmOwogICAgIH0KIApAQCAtNTYzLDcgKzU4Myw3IEBACiAgICAgICAgICAgICAgICAgInNpemUgZG9lcyBub3QgZml0IGluIGFuIGludCIpOyBcCiAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOyBcCiAgICAgICAgIH0gXAotICAgICAgICAqcT1zOyBcCisgICAgICAgICpxID0gKGludClzOyBcCiAgICAgfQogI2RlZmluZSBCVUZGRVJfTEVOICAgICAgKChmbGFncyAmIEZMQUdfU0laRV9UKSA/ICpxMjoqcSkKICNkZWZpbmUgUkVUVVJOX0VSUl9PQ0NVUlJFRCByZXR1cm4gbXNnYnVmCkBAIC0xNDE5LDkgKzE0MzksMTUgQEAKICAgICBjb25zdCBjaGFyICpmbmFtZSwgKm1zZywgKmN1c3RvbV9tc2csICprZXl3b3JkOwogICAgIGludCBtaW4gPSBJTlRfTUFYOwogICAgIGludCBtYXggPSBJTlRfTUFYOwotICAgIGludCBpLCBsZW4sIG5hcmdzLCBua2V5d29yZHM7CisgICAgaW50IGksIGxlbjsKKyAgICBQeV9zc2l6ZV90IG5hcmdzLCBua2V5d29yZHM7CiAgICAgUHlPYmplY3QgKmN1cnJlbnRfYXJnOwotICAgIGZyZWVsaXN0X3QgZnJlZWxpc3QgPSB7MCwgTlVMTH07CisgICAgZnJlZWxpc3RlbnRyeV90IHN0YXRpY19lbnRyaWVzW1NUQVRJQ19GUkVFTElTVF9FTlRSSUVTXTsKKyAgICBmcmVlbGlzdF90IGZyZWVsaXN0OworCisgICAgZnJlZWxpc3QuZW50cmllcyA9IHN0YXRpY19lbnRyaWVzOworICAgIGZyZWVsaXN0LmZpcnN0X2F2YWlsYWJsZSA9IDA7CisgICAgZnJlZWxpc3QuZW50cmllc19tYWxsb2NlZCA9IDA7CiAKICAgICBhc3NlcnQoYXJncyAhPSBOVUxMICYmIFB5VHVwbGVfQ2hlY2soYXJncykpOwogICAgIGFzc2VydChrZXl3b3JkcyA9PSBOVUxMIHx8IFB5RGljdF9DaGVjayhrZXl3b3JkcykpOwpAQCAtMTQ0NSwxNyArMTQ3MSwyMCBAQAogICAgIGZvciAobGVuPTA7IGt3bGlzdFtsZW5dOyBsZW4rKykKICAgICAgICAgY29udGludWU7CiAKLSAgICBmcmVlbGlzdC5lbnRyaWVzID0gUHlNZW1fTkVXKGZyZWVsaXN0ZW50cnlfdCwgbGVuKTsKLSAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4gPiBTVEFUSUNfRlJFRUxJU1RfRU5UUklFUykgeworICAgICAgICBmcmVlbGlzdC5lbnRyaWVzID0gUHlNZW1fTkVXKGZyZWVsaXN0ZW50cnlfdCwgbGVuKTsKKyAgICAgICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXNfbWFsbG9jZWQgPSAxOwogICAgIH0KIAogICAgIG5hcmdzID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKICAgICBua2V5d29yZHMgPSAoa2V5d29yZHMgPT0gTlVMTCkgPyAwIDogUHlEaWN0X1NpemUoa2V5d29yZHMpOwogICAgIGlmIChuYXJncyArIG5rZXl3b3JkcyA+IGxlbikgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIiVzJXMgdGFrZXMgYXQgbW9zdCAlZCBhcmd1bWVudCVzICglZCBnaXZlbikiLAorICAgICAgICAgICAgICAgICAgICAgIiVzJXMgdGFrZXMgYXQgbW9zdCAlZCBhcmd1bWVudCVzICglemQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICAgICAgIChmbmFtZSA9PSBOVUxMKSA/ICJmdW5jdGlvbiIgOiBmbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIChmbmFtZSA9PSBOVUxMKSA/ICIiIDogIigpIiwKICAgICAgICAgICAgICAgICAgICAgIGxlbiwKQEAgLTE1NzQsMjAgKzE2MDMsMTUgQEAKICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSAwOwogICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQoa2V5d29yZHMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKICAgICAgICAgICAgIGludCBtYXRjaCA9IDA7Ci0gICAgICAgICAgICBjaGFyICprczsKICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGtleSkpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFucmV0dXJuKDAsICZmcmVlbGlzdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBjaGVjayB0aGF0IF9QeVVuaWNvZGVfQXNTdHJpbmcoKSByZXN1bHQgaXMgbm90IE5VTEwgKi8KLSAgICAgICAgICAgIGtzID0gX1B5VW5pY29kZV9Bc1N0cmluZyhrZXkpOwotICAgICAgICAgICAgaWYgKGtzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoa3MsIGt3bGlzdFtpXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwga3dsaXN0W2ldKSkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbWF0Y2gpIHsKQEAgLTE3ODksNyArMTgxMyw3IEBACiAKIC8qIEZvciB0eXBlIGNvbnN0cnVjdG9ycyB0aGF0IGRvbid0IHRha2Uga2V5d29yZCBhcmdzCiAgKgotICogU2V0cyBhIFR5cGVFcnJvciBhbmQgcmV0dXJucyAwIGlmIHRoZSBrd2RzIGRpY3QgaXMKKyAqIFNldHMgYSBUeXBlRXJyb3IgYW5kIHJldHVybnMgMCBpZiB0aGUgYXJncy9rd2FyZ3MgaXMKICAqIG5vdCBlbXB0eSwgcmV0dXJucyAxIG90aGVyd2lzZQogICovCiBpbnQKQEAgLTE4MDgsNiArMTgzMiwyNSBAQAogICAgICAgICAgICAgICAgICAgICBmdW5jbmFtZSk7CiAgICAgcmV0dXJuIDA7CiB9CisKKworaW50CitfUHlBcmdfTm9Qb3NpdGlvbmFsKGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpZiAoYXJncyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2tFeGFjdChhcmdzKSkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpID09IDApCisgICAgICAgIHJldHVybiAxOworCisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiVzIGRvZXMgbm90IHRha2UgcG9zaXRpb25hbCBhcmd1bWVudHMiLAorICAgICAgICAgICAgICAgICAgICBmdW5jbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dldGN3ZC5jIGIvUHl0aG9uL2dldGN3ZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmVkYmQxLi4wMDAwMDAwCi0tLSBhL1B5dGhvbi9nZXRjd2QuYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLQotLyogVHdvIFBEIGdldGN3ZCgpIGltcGxlbWVudGF0aW9ucy4KLSAgIEF1dGhvcjogR3VpZG8gdmFuIFJvc3N1bSwgQ1dJIEFtc3RlcmRhbSwgSmFuIDE5OTEsIDxndWlkb0Bjd2kubmw+LiAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWZkZWYgSEFWRV9HRVRXRAotCi0vKiBWZXJzaW9uIGZvciBCU0Qgc3lzdGVtcyAtLSB1c2UgZ2V0d2QoKSAqLwotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0KLSNpZm5kZWYgTUFYUEFUSExFTgotI2lmIGRlZmluZWQoUEFUSF9NQVgpICYmIFBBVEhfTUFYID4gMTAyNAotI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCi0jZWxzZQotI2RlZmluZSBNQVhQQVRITEVOIDEwMjQKLSNlbmRpZgotI2VuZGlmCi0KLWV4dGVybiBjaGFyICpnZXR3ZChjaGFyICopOwotCi1jaGFyICoKLWdldGN3ZChjaGFyICpidWYsIGludCBzaXplKQotewotICAgIGNoYXIgbG9jYWxidWZbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpyZXQ7Ci0KLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0ID0gZ2V0d2QobG9jYWxidWYpOwotICAgIGlmIChyZXQgIT0gTlVMTCAmJiBzdHJsZW4obG9jYWxidWYpID49IChzaXplX3Qpc2l6ZSkgewotICAgICAgICBlcnJubyA9IEVSQU5HRTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChyZXQgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVBQ0NFUzsgLyogTW9zdCBsaWtlbHkgZXJyb3IgKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHN0cm5jcHkoYnVmLCBsb2NhbGJ1Ziwgc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotI2Vsc2UgLyogIUhBVkVfR0VUV0QgKi8KLQotLyogVmVyc2lvbiBmb3IgcmVhbGx5IG9sZCBVTklYIHN5c3RlbXMgLS0gdXNlIHBpcGUgZnJvbSBwd2QgKi8KLQotI2lmbmRlZiBQV0RfQ01ECi0jZGVmaW5lIFBXRF9DTUQgIi9iaW4vcHdkIgotI2VuZGlmCi0KLWNoYXIgKgotZ2V0Y3dkKGNoYXIgKmJ1ZiwgaW50IHNpemUpCi17Ci0gICAgRklMRSAqZnA7Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgc3RzOwotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoKGZwID0gcG9wZW4oUFdEX0NNRCwgInIiKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGZnZXRzKGJ1Ziwgc2l6ZSwgZnApID09IE5VTEwgfHwgKHN0cyA9IHBjbG9zZShmcCkpICE9IDApIHsKLSAgICAgICAgZXJybm8gPSBFQUNDRVM7IC8qIE1vc3QgbGlrZWx5IGVycm9yICovCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBmb3IgKHAgPSBidWY7ICpwICE9ICdcbic7IHArKykgewotICAgICAgICBpZiAoKnAgPT0gJ1wwJykgewotICAgICAgICAgICAgZXJybm8gPSBFUkFOR0U7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICAqcCA9ICdcMCc7Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotI2VuZGlmIC8qICFIQVZFX0dFVFdEICovCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0LmMgYi9QeXRob24vaW1wb3J0LmMKaW5kZXggMjZmODJjZi4uN2VlN2VkOSAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydC5jCisrKyBiL1B5dGhvbi9pbXBvcnQuYwpAQCAtMTksMjIgKzE5LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWZkZWYgTVNfV0lORE9XUwotLyogZm9yIHN0YXQuc3RfbW9kZSAqLwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7Ci0vKiBmb3IgX21rZGlyICovCi0jaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0jZW5kaWYKLQotCiAjZGVmaW5lIENBQ0hFRElSICJfX3B5Y2FjaGVfXyIKIAogLyogU2VlIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpIGJlbG93ICovCiBzdGF0aWMgUHlPYmplY3QgKmV4dGVuc2lvbnMgPSBOVUxMOwogCi0vKiBGdW5jdGlvbiBmcm9tIFBhcnNlci90b2tlbml6ZXIuYyAqLwotZXh0ZXJuIGNoYXIgKiBQeVRva2VuaXplcl9GaW5kRW5jb2RpbmdGaWxlbmFtZShpbnQsIFB5T2JqZWN0ICopOwotCiAvKiBUaGlzIHRhYmxlIGlzIGRlZmluZWQgaW4gY29uZmlnLmM6ICovCiBleHRlcm4gc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW107CiAKQEAgLTQyLDE0ICszMSwzMSBAQAogCiBzdGF0aWMgUHlPYmplY3QgKmluaXRzdHIgPSBOVUxMOwogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgX2ltcAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OWMzMzI0NzVkODY4NjI4NF0qLworCisvKltweXRob24gaW5wdXRdCitjbGFzcyBmc191bmljb2RlX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgY29udmVydGVyID0gJ1B5VW5pY29kZV9GU0RlY29kZXInCisKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTlkNjc4NjIzMDE2NjAwNmVdKi8KKwogLyogSW5pdGlhbGl6ZSB0aGluZ3MgKi8KIAogdm9pZAogX1B5SW1wb3J0X0luaXQodm9pZCkKIHsKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IFB5VGhyZWFkU3RhdGVfR2V0KCktPmludGVycDsKICAgICBpbml0c3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9faW5pdF9fIik7CiAgICAgaWYgKGluaXRzdHIgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBpbXBvcnQgdmFyaWFibGVzIik7CisgICAgaW50ZXJwLT5idWlsdGluc19jb3B5ID0gUHlEaWN0X0NvcHkoaW50ZXJwLT5idWlsdGlucyk7CisgICAgaWYgKGludGVycC0+YnVpbHRpbnNfY29weSA9PSBOVUxMKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBiYWNrdXAgYnVpbHRpbnMgZGljdCIpOwogfQogCiB2b2lkCkBAIC05Myw4ICs5OSwxMCBAQAogICAgIGludCBlcnIgPSAwOwogCiAgICAgcGF0aF9ob29rcyA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9ob29rcyIpOwotICAgIGlmIChwYXRoX2hvb2tzID09IE5VTEwpCisgICAgaWYgKHBhdGhfaG9va3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMucGF0aF9ob29rcyIpOwogICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIGlmIChQeV9WZXJib3NlRmxhZykKICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgaW5zdGFsbGluZyB6aXBpbXBvcnQgaG9va1xuIik7CkBAIC0yMDQsOCArMjEyLDExIEBACiAgICAgaWYgKGltcG9ydF9sb2NrX2xldmVsID4gMSkgewogICAgICAgICAvKiBGb3JrZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBpbXBvcnQgKi8KICAgICAgICAgbG9uZyBtZSA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKLSAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGltcG9ydF9sb2NrLCAwKTsKLSAgICAgICAgLyogWFhYOiBjYW4gdGhlIHByZXZpb3VzIGxpbmUgZmFpbD8gKi8KKyAgICAgICAgLyogVGhlIGZvbGxvd2luZyBjb3VsZCBmYWlsIGlmIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZCwgYnV0IGZvcmtpbmcgYXMKKyAgICAgICAgICAgYSBzaWRlLWVmZmVjdCBvZiBhbiBpbXBvcnQgaXMgYSkgcmFyZSwgYikgbnV0cywgYW5kIGMpIGRpZmZpY3VsdCB0bworICAgICAgICAgICBkbyB0aGFua3MgdG8gdGhlIGxvY2sgb25seSBiZWluZyBoZWxkIHdoZW4gZG9pbmcgaW5kaXZpZHVhbCBtb2R1bGUKKyAgICAgICAgICAgbG9ja3MgcGVyIGltcG9ydC4gKi8KKyAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGltcG9ydF9sb2NrLCBOT1dBSVRfTE9DSyk7CiAgICAgICAgIGltcG9ydF9sb2NrX3RocmVhZCA9IG1lOwogICAgICAgICBpbXBvcnRfbG9ja19sZXZlbC0tOwogICAgIH0gZWxzZSB7CkBAIC0yMTYsOCArMjI3LDM3IEBACiAKICNlbmRpZgogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmxvY2tfaGVsZAorCitSZXR1cm4gVHJ1ZSBpZiB0aGUgaW1wb3J0IGxvY2sgaXMgY3VycmVudGx5IGhlbGQsIGVsc2UgRmFsc2UuCisKK09uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHJldHVybiBGYWxzZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfbG9ja19oZWxkX19kb2NfXywKKyJsb2NrX2hlbGQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBUcnVlIGlmIHRoZSBpbXBvcnQgbG9jayBpcyBjdXJyZW50bHkgaGVsZCwgZWxzZSBGYWxzZS5cbiIKKyJcbiIKKyJPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCByZXR1cm4gRmFsc2UuIik7CisKKyNkZWZpbmUgX0lNUF9MT0NLX0hFTERfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvY2tfaGVsZCIsIChQeUNGdW5jdGlvbilfaW1wX2xvY2tfaGVsZCwgTUVUSF9OT0FSR1MsIF9pbXBfbG9ja19oZWxkX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfbG9ja19oZWxkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorX2ltcF9sb2NrX2hlbGRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfbG9ja19oZWxkKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pbXBfbG9ja19oZWxkX2ltcGwobW9kdWxlKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfbG9ja19oZWxkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYWU2NTY3NDk2NmJhYTY1IGlucHV0PTliMDg4ZjliMjE3ZDliZGZdKi8KIHsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoaW1wb3J0X2xvY2tfdGhyZWFkICE9IC0xKTsKQEAgLTIyNiw4ICsyNjYsMzkgQEAKICNlbmRpZgogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmFjcXVpcmVfbG9jaworCitBY3F1aXJlcyB0aGUgaW50ZXJwcmV0ZXIncyBpbXBvcnQgbG9jayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLgorCitUaGlzIGxvY2sgc2hvdWxkIGJlIHVzZWQgYnkgaW1wb3J0IGhvb2tzIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5IHdoZW4gaW1wb3J0aW5nCittb2R1bGVzLiBPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfYWNxdWlyZV9sb2NrX19kb2NfXywKKyJhY3F1aXJlX2xvY2soJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkFjcXVpcmVzIHRoZSBpbnRlcnByZXRlclwncyBpbXBvcnQgbG9jayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLlxuIgorIlxuIgorIlRoaXMgbG9jayBzaG91bGQgYmUgdXNlZCBieSBpbXBvcnQgaG9va3MgdG8gZW5zdXJlIHRocmVhZC1zYWZldHkgd2hlbiBpbXBvcnRpbmdcbiIKKyJtb2R1bGVzLiBPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4iKTsKKworI2RlZmluZSBfSU1QX0FDUVVJUkVfTE9DS19NRVRIT0RERUYgICAgXAorICAgIHsiYWNxdWlyZV9sb2NrIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfYWNxdWlyZV9sb2NrLCBNRVRIX05PQVJHUywgX2ltcF9hY3F1aXJlX2xvY2tfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9hY3F1aXJlX2xvY2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfaW1wX2FjcXVpcmVfbG9ja19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9hY3F1aXJlX2xvY2soUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9hY3F1aXJlX2xvY2tfaW1wbChtb2R1bGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9hY3F1aXJlX2xvY2tfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQ3OGYxZmEwODlmZGI5YTQgaW5wdXQ9NGEyZDQzODE4NjZkNWZkY10qLwogewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgX1B5SW1wb3J0X0FjcXVpcmVMb2NrKCk7CkBAIC0yMzYsOCArMzA3LDM3IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAucmVsZWFzZV9sb2NrCisKK1JlbGVhc2UgdGhlIGludGVycHJldGVyJ3MgaW1wb3J0IGxvY2suCisKK09uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9yZWxlYXNlX2xvY2tfX2RvY19fLAorInJlbGVhc2VfbG9jaygkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXJcJ3MgaW1wb3J0IGxvY2suXG4iCisiXG4iCisiT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIik7CisKKyNkZWZpbmUgX0lNUF9SRUxFQVNFX0xPQ0tfTUVUSE9EREVGICAgIFwKKyAgICB7InJlbGVhc2VfbG9jayIsIChQeUNGdW5jdGlvbilfaW1wX3JlbGVhc2VfbG9jaywgTUVUSF9OT0FSR1MsIF9pbXBfcmVsZWFzZV9sb2NrX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfcmVsZWFzZV9sb2NrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorX2ltcF9yZWxlYXNlX2xvY2tfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfcmVsZWFzZV9sb2NrKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pbXBfcmVsZWFzZV9sb2NrX2ltcGwobW9kdWxlKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfcmVsZWFzZV9sb2NrX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zNmM3N2E2ODMyZmRhZmQ0IGlucHV0PTkzNGZiMTE1MTZkZDc3OGJdKi8KIHsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChfUHlJbXBvcnRfUmVsZWFzZUxvY2soKSA8IDApIHsKQEAgLTI3OSw2ICszNzksNyBAQAogICAgICJwYXRoIiwgImFyZ3YiLCAicHMxIiwgInBzMiIsCiAgICAgImxhc3RfdHlwZSIsICJsYXN0X3ZhbHVlIiwgImxhc3RfdHJhY2ViYWNrIiwKICAgICAicGF0aF9ob29rcyIsICJwYXRoX2ltcG9ydGVyX2NhY2hlIiwgIm1ldGFfcGF0aCIsCisgICAgIl9faW50ZXJhY3RpdmVob29rX18iLAogICAgIC8qIG1pc2Mgc3R1ZmYgKi8KICAgICAiZmxhZ3MiLCAiZmxvYXRfaW5mbyIsCiAgICAgTlVMTApAQCAtMjkxLDE2ICszOTIsMTcgQEAKICAgICBOVUxMCiB9OwogCi0KIC8qIFVuLWluaXRpYWxpemUgdGhpbmdzLCBhcyBnb29kIGFzIHdlIGNhbiAqLwogCiB2b2lkCiBQeUltcG9ydF9DbGVhbnVwKHZvaWQpCiB7Ci0gICAgUHlfc3NpemVfdCBwb3MsIG5kb25lOworICAgIFB5X3NzaXplX3QgcG9zOwogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZSwgKmRpY3Q7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBpbnRlcnAtPm1vZHVsZXM7CisgICAgUHlPYmplY3QgKndlYWtsaXN0ID0gTlVMTDsKKyAgICBjaGFyICoqcDsKIAogICAgIGlmIChtb2R1bGVzID09IE5VTEwpCiAgICAgICAgIHJldHVybjsgLyogQWxyZWFkeSBkb25lICovCkBAIC0zMTEsMTE0ICs0MTMsMTI5IEBACiAgICAgICAgZGVsZXRlZCAqbGFzdCogb2YgYWxsLCB0aGV5IHdvdWxkIGNvbWUgdG9vIGxhdGUgaW4gdGhlIG5vcm1hbAogICAgICAgIGRlc3RydWN0aW9uIG9yZGVyLiAgU2lnaC4gKi8KIAotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGRpY3QgPSBQeU1vZHVsZV9HZXREaWN0KHZhbHVlKTsKKyAgICAvKiBYWFggUGVyaGFwcyB0aGVzZSBwcmVjYXV0aW9ucyBhcmUgb2Jzb2xldGUuIFdobyBrbm93cz8gKi8KKworICAgIGlmIChQeV9WZXJib3NlRmxhZykKKyAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYXIgYnVpbHRpbnMuX1xuIik7CisgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoaW50ZXJwLT5idWlsdGlucywgIl8iLCBQeV9Ob25lKTsKKworICAgIGZvciAocCA9IHN5c19kZWxldGVzOyAqcCAhPSBOVUxMOyBwKyspIHsKICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYXIgYnVpbHRpbnMuX1xuIik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJfIiwgUHlfTm9uZSk7CisgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhciBzeXMuJXNcbiIsICpwKTsKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoaW50ZXJwLT5zeXNkaWN0LCAqcCwgUHlfTm9uZSk7CiAgICAgfQotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgInN5cyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBjaGFyICoqcDsKLSAgICAgICAgUHlPYmplY3QgKnY7Ci0gICAgICAgIGRpY3QgPSBQeU1vZHVsZV9HZXREaWN0KHZhbHVlKTsKLSAgICAgICAgZm9yIChwID0gc3lzX2RlbGV0ZXM7ICpwICE9IE5VTEw7IHArKykgewotICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFyIHN5cy4lc1xuIiwgKnApOwotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKnAsIFB5X05vbmUpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAocCA9IHN5c19maWxlczsgKnAgIT0gTlVMTDsgcCs9MikgewotICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIHJlc3RvcmUgc3lzLiVzXG4iLCAqcCk7Ci0gICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZGljdCwgKihwKzEpKTsKLSAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgdiA9IFB5X05vbmU7Ci0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAqcCwgdik7CisgICAgZm9yIChwID0gc3lzX2ZpbGVzOyAqcCAhPSBOVUxMOyBwKz0yKSB7CisgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKKyAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIHJlc3RvcmUgc3lzLiVzXG4iLCAqcCk7CisgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5zeXNkaWN0LCAqKHArMSkpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoaW50ZXJwLT5zeXNkaWN0LCAqcCwgdmFsdWUpOworICAgIH0KKworICAgIC8qIFdlIHByZXBhcmUgYSBsaXN0IHdoaWNoIHdpbGwgcmVjZWl2ZSAobmFtZSwgd2Vha3JlZikgdHVwbGVzIG9mCisgICAgICAgbW9kdWxlcyB3aGVuIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcy4gIFRoZSBuYW1lIGlzIHVzZWQKKyAgICAgICBmb3IgZGlhZ25vc2lzIG1lc3NhZ2VzIChpbiB2ZXJib3NlIG1vZGUpLCB3aGlsZSB0aGUgd2Vha3JlZiBoZWxwcworICAgICAgIGRldGVjdCB0aG9zZSBtb2R1bGVzIHdoaWNoIGhhdmUgYmVlbiBoZWxkIGFsaXZlLiAqLworICAgIHdlYWtsaXN0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAod2Vha2xpc3QgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKworI2RlZmluZSBTVE9SRV9NT0RVTEVfV0VBS1JFRihuYW1lLCBtb2QpIFwKKyAgICBpZiAod2Vha2xpc3QgIT0gTlVMTCkgeyBcCisgICAgICAgIFB5T2JqZWN0ICp3ciA9IFB5V2Vha3JlZl9OZXdSZWYobW9kLCBOVUxMKTsgXAorICAgICAgICBpZiAobmFtZSAmJiB3cikgeyBcCisgICAgICAgICAgICBQeU9iamVjdCAqdHVwID0gUHlUdXBsZV9QYWNrKDIsIG5hbWUsIHdyKTsgXAorICAgICAgICAgICAgUHlMaXN0X0FwcGVuZCh3ZWFrbGlzdCwgdHVwKTsgXAorICAgICAgICAgICAgUHlfWERFQ1JFRih0dXApOyBcCisgICAgICAgIH0gXAorICAgICAgICBQeV9YREVDUkVGKHdyKTsgXAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgXAorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsgXAorICAgIH0KKworICAgIC8qIFJlbW92ZSBhbGwgbW9kdWxlcyBmcm9tIHN5cy5tb2R1bGVzLCBob3BpbmcgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICBjYW4gcmVjbGFpbSBtb3N0IG9mIHRoZW0uICovCisgICAgcG9zID0gMDsKKyAgICB3aGlsZSAoUHlEaWN0X05leHQobW9kdWxlcywgJnBvcywgJmtleSwgJnZhbHVlKSkgeworICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgUHlVbmljb2RlX0NoZWNrKGtleSkpCisgICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbMl0gcmVtb3ZpbmcgJVVcbiIsIGtleSk7CisgICAgICAgICAgICBTVE9SRV9NT0RVTEVfV0VBS1JFRihrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKG1vZHVsZXMsIGtleSwgUHlfTm9uZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBGaXJzdCwgZGVsZXRlIF9fbWFpbl9fICovCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiX19tYWluX18iKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBfX21haW5fX1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJfX21haW5fXyIsIFB5X05vbmUpOwotICAgIH0KKyAgICAvKiBDbGVhciB0aGUgbW9kdWxlcyBkaWN0LiAqLworICAgIFB5RGljdF9DbGVhcihtb2R1bGVzKTsKKyAgICAvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBidWlsdGlucyBkaWN0LCB0byBlbnN1cmUgdGhhdCBhbnkKKyAgICAgICB1c2VyIGRhdGEgZ2V0cyBjbGVhcmVkLiAqLworICAgIGRpY3QgPSBQeURpY3RfQ29weShpbnRlcnAtPmJ1aWx0aW5zKTsKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIFB5RGljdF9DbGVhcihpbnRlcnAtPmJ1aWx0aW5zKTsKKyAgICBpZiAoUHlEaWN0X1VwZGF0ZShpbnRlcnAtPmJ1aWx0aW5zLCBpbnRlcnAtPmJ1aWx0aW5zX2NvcHkpKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIFB5X1hERUNSRUYoZGljdCk7CisgICAgLyogQ2xlYXIgbW9kdWxlIGRpY3QgY29waWVzIHN0b3JlZCBpbiB0aGUgaW50ZXJwcmV0ZXIgc3RhdGUgKi8KKyAgICBfUHlTdGF0ZV9DbGVhck1vZHVsZXMoKTsKKyAgICAvKiBDb2xsZWN0IHJlZmVyZW5jZXMgKi8KKyAgICBfUHlHQ19Db2xsZWN0Tm9GYWlsKCk7CisgICAgLyogRHVtcCBHQyBzdGF0cyBiZWZvcmUgaXQncyB0b28gbGF0ZSwgc2luY2UgaXQgdXNlcyB0aGUgd2FybmluZ3MKKyAgICAgICBtYWNoaW5lcnkuICovCisgICAgX1B5R0NfRHVtcFNodXRkb3duU3RhdHMoKTsKIAotICAgIC8qIFRoZSBzcGVjaWFsIHRyZWF0bWVudCBvZiAiYnVpbHRpbnMiIGhlcmUgaXMgYmVjYXVzZSBldmVuCisgICAgLyogTm93LCBpZiB0aGVyZSBhcmUgYW55IG1vZHVsZXMgbGVmdCBhbGl2ZSwgY2xlYXIgdGhlaXIgZ2xvYmFscyB0bworICAgICAgIG1pbmltaXplIHBvdGVudGlhbCBsZWFrcy4gIEFsbCBDIGV4dGVuc2lvbiBtb2R1bGVzIGFjdHVhbGx5IGVuZAorICAgICAgIHVwIGhlcmUsIHNpbmNlIHRoZXkgYXJlIGtlcHQgYWxpdmUgaW4gdGhlIGludGVycHJldGVyIHN0YXRlLgorCisgICAgICAgVGhlIHNwZWNpYWwgdHJlYXRtZW50IG9mICJidWlsdGlucyIgaGVyZSBpcyBiZWNhdXNlIGV2ZW4KICAgICAgICB3aGVuIGl0J3Mgbm90IHJlZmVyZW5jZWQgYXMgYSBtb2R1bGUsIGl0cyBkaWN0aW9uYXJ5IGlzCiAgICAgICAgcmVmZXJlbmNlZCBieSBhbG1vc3QgZXZlcnkgbW9kdWxlJ3MgX19idWlsdGluc19fLiAgU2luY2UKICAgICAgICBkZWxldGluZyBhIG1vZHVsZSBjbGVhcnMgaXRzIGRpY3Rpb25hcnkgKGV2ZW4gaWYgdGhlcmUgYXJlCiAgICAgICAgcmVmZXJlbmNlcyBsZWZ0IHRvIGl0KSwgd2UgbmVlZCB0byBkZWxldGUgdGhlICJidWlsdGlucyIKICAgICAgICBtb2R1bGUgbGFzdC4gIExpa2V3aXNlLCB3ZSBkb24ndCBkZWxldGUgc3lzIHVudGlsIHRoZSB2ZXJ5Ci0gICAgICAgZW5kIGJlY2F1c2UgaXQgaXMgaW1wbGljaXRseSByZWZlcmVuY2VkIChlLmcuIGJ5IHByaW50KS4KLQotICAgICAgIEFsc28gbm90ZSB0aGF0IHdlICdkZWxldGUnIG1vZHVsZXMgYnkgcmVwbGFjaW5nIHRoZWlyIGVudHJ5Ci0gICAgICAgaW4gdGhlIG1vZHVsZXMgZGljdCB3aXRoIE5vbmUsIHJhdGhlciB0aGFuIHJlYWxseSBkZWxldGluZwotICAgICAgIHRoZW07IHRoaXMgYXZvaWRzIGEgcmVoYXNoIG9mIHRoZSBtb2R1bGVzIGRpY3Rpb25hcnkgYW5kCi0gICAgICAgYWxzbyBtYXJrcyB0aGVtIGFzICJub24gZXhpc3RlbnQiIHNvIHRoZXkgd29uJ3QgYmUKLSAgICAgICByZS1pbXBvcnRlZC4gKi8KLQotICAgIC8qIE5leHQsIHJlcGVhdGVkbHkgZGVsZXRlIG1vZHVsZXMgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZgotICAgICAgIG9uZSAoc2tpcHBpbmcgYnVpbHRpbnMgYW5kIHN5cykgYW5kIGRlbGV0ZSB0aGVtICovCi0gICAgZG8gewotICAgICAgICBuZG9uZSA9IDA7Ci0gICAgICAgIHBvcyA9IDA7Ci0gICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChtb2R1bGVzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPm9iX3JlZmNudCAhPSAxKQorICAgICAgIGVuZCBiZWNhdXNlIGl0IGlzIGltcGxpY2l0bHkgcmVmZXJlbmNlZCAoZS5nLiBieSBwcmludCkuICovCisgICAgaWYgKHdlYWtsaXN0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpLCBuOworICAgICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHdlYWtsaXN0KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKnR1cCA9IFB5TGlzdF9HRVRfSVRFTSh3ZWFrbGlzdCwgaSk7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0odHVwLCAwKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptb2QgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChQeVR1cGxlX0dFVF9JVEVNKHR1cCwgMSkpOworICAgICAgICAgICAgaWYgKG1vZCA9PSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJidWlsdGlucyIpID09IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJzeXMiKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigKLSAgICAgICAgICAgICAgICAgICAgICAgICIjIGNsZWFudXBbMV0gJVVcbiIsIGtleSk7Ci0gICAgICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShtb2R1bGVzLCBrZXksIFB5X05vbmUpOwotICAgICAgICAgICAgICAgIG5kb25lKys7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQoUHlNb2R1bGVfQ2hlY2sobW9kKSk7CisgICAgICAgICAgICBkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtb2QpOworICAgICAgICAgICAgaWYgKGRpY3QgPT0gaW50ZXJwLT5idWlsdGlucyB8fCBkaWN0ID09IGludGVycC0+c3lzZGljdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2QpOworICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIFB5VW5pY29kZV9DaGVjayhuYW1lKSkKKyAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFszXSB3aXBpbmcgJVVcbiIsIG5hbWUpOworICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKG1vZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobW9kKTsKICAgICAgICAgfQotICAgIH0gd2hpbGUgKG5kb25lID4gMCk7Ci0KLSAgICAvKiBOZXh0LCBkZWxldGUgYWxsIG1vZHVsZXMgKHN0aWxsIHNraXBwaW5nIGJ1aWx0aW5zIGFuZCBzeXMpICovCi0gICAgcG9zID0gMDsKLSAgICB3aGlsZSAoUHlEaWN0X05leHQobW9kdWxlcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewotICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAiYnVpbHRpbnMiKSA9PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgInN5cyIpID09IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbMl0gJVVcbiIsIGtleSk7Ci0gICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0obW9kdWxlcywga2V5LCBQeV9Ob25lKTsKLSAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYod2Vha2xpc3QpOwogICAgIH0KIAogICAgIC8qIE5leHQsIGRlbGV0ZSBzeXMgYW5kIGJ1aWx0aW5zIChpbiB0aGF0IG9yZGVyKSAqLwotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgInN5cyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhbnVwIHN5c1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJzeXMiLCBQeV9Ob25lKTsKLSAgICB9Ci0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBidWlsdGluc1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIsIFB5X05vbmUpOwotICAgIH0KKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCisgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzNdIHdpcGluZyBzeXNcbiIpOworICAgIF9QeU1vZHVsZV9DbGVhckRpY3QoaW50ZXJwLT5zeXNkaWN0KTsKKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCisgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzNdIHdpcGluZyBidWlsdGluc1xuIik7CisgICAgX1B5TW9kdWxlX0NsZWFyRGljdChpbnRlcnAtPmJ1aWx0aW5zKTsKIAotICAgIC8qIEZpbmFsbHksIGNsZWFyIGFuZCBkZWxldGUgdGhlIG1vZHVsZXMgZGlyZWN0b3J5ICovCi0gICAgUHlEaWN0X0NsZWFyKG1vZHVsZXMpOworICAgIC8qIENsZWFyIGFuZCBkZWxldGUgdGhlIG1vZHVsZXMgZGlyZWN0b3J5LiAgQWN0dWFsIG1vZHVsZXMgd2lsbAorICAgICAgIHN0aWxsIGJlIHRoZXJlIG9ubHkgaWYgaW1wb3J0ZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2Ygc29tZQorICAgICAgIGRlc3RydWN0b3IuICovCiAgICAgaW50ZXJwLT5tb2R1bGVzID0gTlVMTDsKICAgICBQeV9ERUNSRUYobW9kdWxlcyk7CisKKyAgICAvKiBPbmNlIG1vcmUgKi8KKyAgICBfUHlHQ19Db2xsZWN0Tm9GYWlsKCk7CisKKyN1bmRlZiBTVE9SRV9NT0RVTEVfV0VBS1JFRgogfQogCiAKQEAgLTQ1MCwxMiArNTY3LDEyIEBACiAKIC8qIE1hZ2ljIGZvciBleHRlbnNpb24gbW9kdWxlcyAoYnVpbHQtaW4gYXMgd2VsbCBhcyBkeW5hbWljYWxseQogICAgbG9hZGVkKS4gIFRvIHByZXZlbnQgaW5pdGlhbGl6aW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgbW9yZSB0aGFuCi0gICBvbmNlLCB3ZSBrZWVwIGEgc3RhdGljIGRpY3Rpb25hcnkgJ2V4dGVuc2lvbnMnIGtleWVkIGJ5IG1vZHVsZSBuYW1lCi0gICAoZm9yIGJ1aWx0LWluIG1vZHVsZXMpIG9yIGJ5IGZpbGVuYW1lIChmb3IgZHluYW1pY2FsbHkgbG9hZGVkCi0gICBtb2R1bGVzKSwgY29udGFpbmluZyB0aGVzZSBtb2R1bGVzLiAgQSBjb3B5IG9mIHRoZSBtb2R1bGUncwotICAgZGljdGlvbmFyeSBpcyBzdG9yZWQgYnkgY2FsbGluZyBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoKQotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBzdWNjZWVkcy4gIEEKLSAgIGNvcHkgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZXJlIGJ5IGNhbGxpbmcKKyAgIG9uY2UsIHdlIGtlZXAgYSBzdGF0aWMgZGljdGlvbmFyeSAnZXh0ZW5zaW9ucycga2V5ZWQgYnkgdGhlIHR1cGxlCisgICAobW9kdWxlIG5hbWUsIG1vZHVsZSBuYW1lKSAgKGZvciBidWlsdC1pbiBtb2R1bGVzKSBvciBieQorICAgKGZpbGVuYW1lLCBtb2R1bGUgbmFtZSkgKGZvciBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyksIGNvbnRhaW5pbmcgdGhlc2UKKyAgIG1vZHVsZXMuICBBIGNvcHkgb2YgdGhlIG1vZHVsZSdzIGRpY3Rpb25hcnkgaXMgc3RvcmVkIGJ5IGNhbGxpbmcKKyAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAgIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgQSBjb3B5IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGVyZSBieSBjYWxsaW5nCiAgICBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdCgpLgogCiAgICBNb2R1bGVzIHdoaWNoIGRvIHN1cHBvcnQgbXVsdGlwbGUgaW5pdGlhbGl6YXRpb24gc2V0IHRoZWlyIG1fc2l6ZQpAQCAtNDY4LDggKzU4NSw5IEBACiBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKm1vZCwgUHlPYmplY3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2R1bGVzLCAqZGljdDsKKyAgICBQeU9iamVjdCAqbW9kdWxlcywgKmRpY3QsICprZXk7CiAgICAgc3RydWN0IFB5TW9kdWxlRGVmICpkZWY7CisgICAgaW50IHJlczsKICAgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKSB7CiAgICAgICAgIGV4dGVuc2lvbnMgPSBQeURpY3RfTmV3KCk7CiAgICAgICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpCkBAIC01MDUsMTIgKzYyMywxOCBAQAogICAgICAgICBpZiAoZGVmLT5tX2Jhc2UubV9jb3B5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFB5RGljdF9TZXRJdGVtKGV4dGVuc2lvbnMsIGZpbGVuYW1lLCAoUHlPYmplY3QqKWRlZik7CisgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIGZpbGVuYW1lLCBuYW1lKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXMgPSBQeURpY3RfU2V0SXRlbShleHRlbnNpb25zLCBrZXksIChQeU9iamVjdCAqKWRlZik7CisgICAgUHlfREVDUkVGKGtleSk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KIAogaW50Ci1fUHlJbXBvcnRfRml4dXBCdWlsdGluKFB5T2JqZWN0ICptb2QsIGNoYXIgKm5hbWUpCitfUHlJbXBvcnRfRml4dXBCdWlsdGluKFB5T2JqZWN0ICptb2QsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgaW50IHJlczsKICAgICBQeU9iamVjdCAqbmFtZW9iajsKQEAgLTUyNSwxMSArNjQ5LDE1IEBACiBQeU9iamVjdCAqCiBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2QsICptZGljdDsKKyAgICBQeU9iamVjdCAqbW9kLCAqbWRpY3QsICprZXk7CiAgICAgUHlNb2R1bGVEZWYqIGRlZjsKICAgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBkZWYgPSAoUHlNb2R1bGVEZWYqKVB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbnMsIGZpbGVuYW1lKTsKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgZmlsZW5hbWUsIG5hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVmID0gKFB5TW9kdWxlRGVmICopUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9ucywga2V5KTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKICAgICBpZiAoZGVmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChkZWYtPm1fc2l6ZSA9PSAtMSkgewpAQCAtNjQ1LDIyICs3NzMsMjMgQEAKICAqIGludGVyZmFjZS4gIFRoZSBvdGhlciB0d28gZXhpc3QgcHJpbWFyaWx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICovCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCiB7CiAgICAgcmV0dXJuIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKICAgICAgICAgbmFtZSwgY28sIChjaGFyICopTlVMTCwgKGNoYXIgKilOVUxMKTsKIH0KIAogUHlPYmplY3QgKgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQogewogICAgIHJldHVybiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCiAgICAgICAgIG5hbWUsIGNvLCBwYXRobmFtZSwgKGNoYXIgKilOVUxMKTsKIH0KIAogUHlPYmplY3QgKgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3BhdGhuYW1lKQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjcGF0aG5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm0gPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqcGF0aG9iaiA9IE5VTEwsICpjcGF0aG9iaiA9IE5VTEw7CkBAIC02OTEsNyArODIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGludGVycHJldGVyISIpOwogICAgICAgICB9CiAKLSAgICAgICAgcGF0aG9iaiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICBwYXRob2JqID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZ2V0X3NvdXJjZWZpbGUsIGNwYXRob2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgIGlmIChwYXRob2JqID09IE5VTEwpCkBAIC03MDgsMTIgKzgzNywxMCBAQAogICAgIHJldHVybiBtOwogfQogCi1QeU9iamVjdCoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqY28sIFB5T2JqZWN0ICpwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjcGF0aG5hbWUpCitzdGF0aWMgUHlPYmplY3QgKgorbW9kdWxlX2RpY3RfZm9yX2V4ZWMoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdjsKKyAgICBQeU9iamVjdCAqbSwgKmQgPSBOVUxMOwogCiAgICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZU9iamVjdChuYW1lKTsKICAgICBpZiAobSA9PSBOVUxMKQpAQCAtNzIzLDMxICs4NTAsMjYgQEAKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKICAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZCwgIl9fYnVpbHRpbnNfXyIpID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfX2J1aWx0aW5zX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApIHsKKyAgICAgICAgICAgIHJlbW92ZV9tb2R1bGUobmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAocGF0aG5hbWUgIT0gTlVMTCkgewotICAgICAgICB2ID0gcGF0aG5hbWU7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICB2ID0gKChQeUNvZGVPYmplY3QgKiljbyktPmNvX2ZpbGVuYW1lOwotICAgIH0KLSAgICBQeV9JTkNSRUYodik7Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfX2ZpbGVfXyIsIHYpICE9IDApCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIE5vdCBpbXBvcnRhbnQgZW5vdWdoIHRvIHJlcG9ydCAqLwotICAgIFB5X0RFQ1JFRih2KTsKIAotICAgIC8qIFJlbWVtYmVyIHRoZSBweWMgcGF0aCBuYW1lIGFzIHRoZSBfX2NhY2hlZF9fIGF0dHJpYnV0ZS4gKi8KLSAgICBpZiAoY3BhdGhuYW1lICE9IE5VTEwpCi0gICAgICAgIHYgPSBjcGF0aG5hbWU7Ci0gICAgZWxzZQotICAgICAgICB2ID0gUHlfTm9uZTsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fY2FjaGVkX18iLCB2KSAhPSAwKQotICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBOb3QgaW1wb3J0YW50IGVub3VnaCB0byByZXBvcnQgKi8KKyAgICByZXR1cm4gZDsgIC8qIFJldHVybiBhIGJvcnJvd2VkIHJlZmVyZW5jZS4gKi8KK30KIAotICAgIHYgPSBQeUV2YWxfRXZhbENvZGUoY28sIGQsIGQpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7CitzdGF0aWMgUHlPYmplY3QgKgorZXhlY19jb2RlX2luX21vZHVsZShQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKm1vZHVsZV9kaWN0LCBQeU9iamVjdCAqY29kZV9vYmplY3QpCit7CisgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7CisgICAgUHlPYmplY3QgKnYsICptOworCisgICAgdiA9IFB5RXZhbF9FdmFsQ29kZShjb2RlX29iamVjdCwgbW9kdWxlX2RpY3QsIG1vZHVsZV9kaWN0KTsKKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIHJlbW92ZV9tb2R1bGUobmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBQeV9ERUNSRUYodik7CiAKICAgICBpZiAoKG0gPSBQeURpY3RfR2V0SXRlbShtb2R1bGVzLCBuYW1lKSkgPT0gTlVMTCkgewpAQCAtNzYwLDEwICs4ODIsMzIgQEAKICAgICBQeV9JTkNSRUYobSk7CiAKICAgICByZXR1cm4gbTsKK30KIAotICBlcnJvcjoKLSAgICByZW1vdmVfbW9kdWxlKG5hbWUpOwotICAgIHJldHVybiBOVUxMOworUHlPYmplY3QqCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdChQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmNvLCBQeU9iamVjdCAqcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY3BhdGhuYW1lKQoreworICAgIFB5T2JqZWN0ICpkLCAqcmVzOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIF9QeV9JREVOVElGSUVSKF9maXhfdXBfbW9kdWxlKTsKKworICAgIGQgPSBtb2R1bGVfZGljdF9mb3JfZXhlYyhuYW1lKTsKKyAgICBpZiAoZCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChwYXRobmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHBhdGhuYW1lID0gKChQeUNvZGVPYmplY3QgKiljbyktPmNvX2ZpbGVuYW1lOworICAgIH0KKyAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZml4X3VwX21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLCBuYW1lLCBwYXRobmFtZSwgY3BhdGhuYW1lLCBOVUxMKTsKKyAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIHJlcyA9IGV4ZWNfY29kZV9pbl9tb2R1bGUobmFtZSwgZCwgY28pOworICAgIH0KKyAgICByZXR1cm4gcmVzOwogfQogCiAKQEAgLTgwNSwzNSArOTQ5LDY2IEBACiAgICAgUHlfREVDUkVGKG9sZG5hbWUpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLl9maXhfY29fZmlsZW5hbWUKKworICAgIGNvZGU6IG9iamVjdCh0eXBlPSJQeUNvZGVPYmplY3QgKiIsIHN1YmNsYXNzX29mPSImUHlDb2RlX1R5cGUiKQorICAgICAgICBDb2RlIG9iamVjdCB0byBjaGFuZ2UuCisKKyAgICBwYXRoOiB1bmljb2RlCisgICAgICAgIEZpbGUgcGF0aCB0byB1c2UuCisgICAgLworCitDaGFuZ2VzIGNvZGUuY29fZmlsZW5hbWUgdG8gc3BlY2lmeSB0aGUgcGFzc2VkLWluIGZpbGUgcGF0aC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfX2ZpeF9jb19maWxlbmFtZV9fZG9jX18sCisiX2ZpeF9jb19maWxlbmFtZSgkbW9kdWxlLCBjb2RlLCBwYXRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlcyBjb2RlLmNvX2ZpbGVuYW1lIHRvIHNwZWNpZnkgdGhlIHBhc3NlZC1pbiBmaWxlIHBhdGguXG4iCisiXG4iCisiICBjb2RlXG4iCisiICAgIENvZGUgb2JqZWN0IHRvIGNoYW5nZS5cbiIKKyIgIHBhdGhcbiIKKyIgICAgRmlsZSBwYXRoIHRvIHVzZS4iKTsKKworI2RlZmluZSBfSU1QX19GSVhfQ09fRklMRU5BTUVfTUVUSE9EREVGICAgIFwKKyAgICB7Il9maXhfY29fZmlsZW5hbWUiLCAoUHlDRnVuY3Rpb24pX2ltcF9fZml4X2NvX2ZpbGVuYW1lLCBNRVRIX1ZBUkFSR1MsIF9pbXBfX2ZpeF9jb19maWxlbmFtZV9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2ZpeF9jb19maWxlbmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX19maXhfY29fZmlsZW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeUNvZGVPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpwYXRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfX2ZpeF9jb19maWxlbmFtZShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqY287Ci0gICAgUHlPYmplY3QgKmZpbGVfcGF0aDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeUNvZGVPYmplY3QgKmNvZGU7CisgICAgUHlPYmplY3QgKnBhdGg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POl9maXhfY29fZmlsZW5hbWUiLCAmY28sICZmaWxlX3BhdGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8hVTpfZml4X2NvX2ZpbGVuYW1lIiwKKyAgICAgICAgJlB5Q29kZV9UeXBlLCAmY29kZSwgJnBhdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9fZml4X2NvX2ZpbGVuYW1lX2ltcGwobW9kdWxlLCBjb2RlLCBwYXRoKTsKIAotICAgIGlmICghUHlDb2RlX0NoZWNrKGNvKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb2RlIG9iamVjdCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CiAKLSAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhmaWxlX3BhdGgpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfX2ZpeF9jb19maWxlbmFtZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5Q29kZU9iamVjdCAqY29kZSwgUHlPYmplY3QgKnBhdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmI0YjFlZGViMGQ1NWM1ZCBpbnB1dD04OTViYTUwZTc4YjgyZjA1XSovCiAKLSAgICB1cGRhdGVfY29tcGlsZWRfbW9kdWxlKChQeUNvZGVPYmplY3QqKWNvLCBmaWxlX3BhdGgpOworeworICAgIHVwZGF0ZV9jb21waWxlZF9tb2R1bGUoY29kZSwgcGF0aCk7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCiAvKiBGb3J3YXJkICovCi1zdGF0aWMgc3RydWN0IF9mcm96ZW4gKiBmaW5kX2Zyb3plbihQeU9iamVjdCAqKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqIGZpbmRfZnJvemVuKFB5T2JqZWN0ICopOwogCiAKIC8qIEhlbHBlciB0byB0ZXN0IGZvciBidWlsdC1pbiBtb2R1bGUgKi8KQEAgLTkxNSwxMSArMTA5MCwxMSBAQAogUHlJbXBvcnRfR2V0SW1wb3J0ZXIoUHlPYmplY3QgKnBhdGgpIHsKICAgICBQeU9iamVjdCAqaW1wb3J0ZXI9TlVMTCwgKnBhdGhfaW1wb3J0ZXJfY2FjaGU9TlVMTCwgKnBhdGhfaG9va3M9TlVMTDsKIAotICAgIGlmICgocGF0aF9pbXBvcnRlcl9jYWNoZSA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9pbXBvcnRlcl9jYWNoZSIpKSkgewotICAgICAgICBpZiAoKHBhdGhfaG9va3MgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaG9va3MiKSkpIHsKLSAgICAgICAgICAgIGltcG9ydGVyID0gZ2V0X3BhdGhfaW1wb3J0ZXIocGF0aF9pbXBvcnRlcl9jYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9ob29rcywgcGF0aCk7Ci0gICAgICAgIH0KKyAgICBwYXRoX2ltcG9ydGVyX2NhY2hlID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2ltcG9ydGVyX2NhY2hlIik7CisgICAgcGF0aF9ob29rcyA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9ob29rcyIpOworICAgIGlmIChwYXRoX2ltcG9ydGVyX2NhY2hlICE9IE5VTEwgJiYgcGF0aF9ob29rcyAhPSBOVUxMKSB7CisgICAgICAgIGltcG9ydGVyID0gZ2V0X3BhdGhfaW1wb3J0ZXIocGF0aF9pbXBvcnRlcl9jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2hvb2tzLCBwYXRoKTsKICAgICB9CiAgICAgUHlfWElOQ1JFRihpbXBvcnRlcik7IC8qIGdldF9wYXRoX2ltcG9ydGVyIHJldHVybnMgYSBib3Jyb3dlZCByZWZlcmVuY2UgKi8KICAgICByZXR1cm4gaW1wb3J0ZXI7CkBAIC05MzYsOCArMTExMSwxMiBAQAogaW5pdF9idWlsdGluKFB5T2JqZWN0ICpuYW1lKQogewogICAgIHN0cnVjdCBfaW5pdHRhYiAqcDsKKyAgICBQeU9iamVjdCAqbW9kOwogCi0gICAgaWYgKF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KG5hbWUsIG5hbWUpICE9IE5VTEwpCisgICAgbW9kID0gX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QobmFtZSwgbmFtZSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobW9kICE9IE5VTEwpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgZm9yIChwID0gUHlJbXBvcnRfSW5pdHRhYjsgcC0+bmFtZSAhPSBOVUxMOyBwKyspIHsKQEAgLTk3MCwxMCArMTE0OSwxMCBAQAogCiAvKiBGcm96ZW4gbW9kdWxlcyAqLwogCi1zdGF0aWMgc3RydWN0IF9mcm96ZW4gKgorc3RhdGljIGNvbnN0IHN0cnVjdCBfZnJvemVuICoKIGZpbmRfZnJvemVuKFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOwogCiAgICAgaWYgKG5hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05OTAsNyArMTE2OSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2Zyb3plbl9vYmplY3QoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOwogICAgIGludCBzaXplOwogCiAgICAgaWYgKHAgPT0gTlVMTCkgewpAQCAtMTAwOCwxMyArMTE4NywxMyBAQAogICAgIHNpemUgPSBwLT5zaXplOwogICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgc2l6ZSA9IC1zaXplOwotICAgIHJldHVybiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNoYXIgKilwLT5jb2RlLCBzaXplKTsKKyAgICByZXR1cm4gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjb25zdCBjaGFyICopcC0+Y29kZSwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBpc19mcm96ZW5fcGFja2FnZShQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CiAgICAgaW50IHNpemU7CiAKICAgICBpZiAocCA9PSBOVUxMKSB7CkBAIC0xMDQxLDggKzEyMjAsOCBAQAogaW50CiBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGVPYmplY3QoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnA7Ci0gICAgUHlPYmplY3QgKmNvLCAqbSwgKnBhdGg7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnA7CisgICAgUHlPYmplY3QgKmNvLCAqbSwgKmQ7CiAgICAgaW50IGlzcGFja2FnZTsKICAgICBpbnQgc2l6ZTsKIApAQCAtMTA2MCw3ICsxMjM5LDcgQEAKICAgICBpc3BhY2thZ2UgPSAoc2l6ZSA8IDApOwogICAgIGlmIChpc3BhY2thZ2UpCiAgICAgICAgIHNpemUgPSAtc2l6ZTsKLSAgICBjbyA9IFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY2hhciAqKXAtPmNvZGUsIHNpemUpOworICAgIGNvID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjb25zdCBjaGFyICopcC0+Y29kZSwgc2l6ZSk7CiAgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoIVB5Q29kZV9DaGVjayhjbykpIHsKQEAgLTEwNzAsMjkgKzEyNDksMjcgQEAKICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNwYWNrYWdlKSB7Ci0gICAgICAgIC8qIFNldCBfX3BhdGhfXyB0byB0aGUgcGFja2FnZSBuYW1lICovCi0gICAgICAgIFB5T2JqZWN0ICpkLCAqbDsKKyAgICAgICAgLyogU2V0IF9fcGF0aF9fIHRvIHRoZSBlbXB0eSBsaXN0ICovCisgICAgICAgIFB5T2JqZWN0ICpsOwogICAgICAgICBpbnQgZXJyOwogICAgICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG5hbWUpOwogICAgICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICAgICAgbCA9IFB5TGlzdF9OZXcoMSk7CisgICAgICAgIGwgPSBQeUxpc3RfTmV3KDApOwogICAgICAgICBpZiAobCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKG5hbWUpOwotICAgICAgICBQeUxpc3RfU0VUX0lURU0obCwgMCwgbmFtZSk7CiAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfX3BhdGhfXyIsIGwpOwogICAgICAgICBQeV9ERUNSRUYobCk7CiAgICAgICAgIGlmIChlcnIgIT0gMCkKICAgICAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICB9Ci0gICAgcGF0aCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8ZnJvemVuPiIpOwotICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgZCA9IG1vZHVsZV9kaWN0X2Zvcl9leGVjKG5hbWUpOworICAgIGlmIChkID09IE5VTEwpIHsKICAgICAgICAgZ290byBlcnJfcmV0dXJuOwotICAgIG0gPSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdChuYW1lLCBjbywgcGF0aCwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKHBhdGgpOworICAgIH0KKyAgICBtID0gZXhlY19jb2RlX2luX21vZHVsZShuYW1lLCBkLCBjbyk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgIFB5X0RFQ1JFRihjbyk7CkBAIC0xMTA0LDcgKzEyODEsNyBAQAogfQogCiBpbnQKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZShjaGFyICpuYW1lKQorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWVvYmo7CiAgICAgaW50IHJldDsKQEAgLTEyMTgsNyArMTM5NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwpCiB7CiAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19pbml0aWFsaXppbmdfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19zcGVjX18pOworICAgIF9QeV9JREVOVElGSUVSKF9pbml0aWFsaXppbmcpOwogICAgIF9QeV9JREVOVElGSUVSKF9fcGFja2FnZV9fKTsKICAgICBfUHlfSURFTlRJRklFUihfX3BhdGhfXyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOwpAQCAtMTM1NCw3ICsxNTMyLDExIEBACiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIGJhc2UgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHBhY2thZ2UsIDAsIGxhc3RfZG90KTsKKyAgICAgICAgaWYgKGJhc2UgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID4gMCkgewogICAgICAgICAgICAgUHlPYmplY3QgKmJvcnJvd2VkX2RvdCwgKnNlcSA9IE5VTEw7CiAKQEAgLTE0MDgsMTYgKzE1OTAsMjEgQEAKICAgICAgICAgZ290byBlcnJvcl93aXRoX3VubG9jazsKICAgICB9CiAgICAgZWxzZSBpZiAobW9kICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKnZhbHVlOworICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOworICAgICAgICBQeU9iamVjdCAqc3BlYzsKICAgICAgICAgaW50IGluaXRpYWxpemluZyA9IDA7CiAKICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CiAgICAgICAgIC8qIE9wdGltaXphdGlvbjogb25seSBjYWxsIF9ib290c3RyYXAuX2xvY2tfdW5sb2NrX21vZHVsZSgpIGlmCi0gICAgICAgICAgIF9faW5pdGlhbGl6aW5nX18gaXMgdHJ1ZS4KLSAgICAgICAgICAgTk9URTogYmVjYXVzZSBvZiB0aGlzLCBfX2luaXRpYWxpemluZ19fIG11c3QgYmUgc2V0ICpiZWZvcmUqCisgICAgICAgICAgIF9fc3BlY19fLl9pbml0aWFsaXppbmcgaXMgdHJ1ZS4KKyAgICAgICAgICAgTk9URTogYmVjYXVzZSBvZiB0aGlzLCBpbml0aWFsaXppbmcgbXVzdCBiZSBzZXQgKmJlZm9yZSoKICAgICAgICAgICAgc3R1ZmZpbmcgdGhlIG5ldyBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuCiAgICAgICAgICAqLwotICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9HZXRBdHRySWQobW9kLCAmUHlJZF9fX2luaXRpYWxpemluZ19fKTsKKyAgICAgICAgc3BlYyA9IF9QeU9iamVjdF9HZXRBdHRySWQobW9kLCAmUHlJZF9fX3NwZWNfXyk7CisgICAgICAgIGlmIChzcGVjICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0dldEF0dHJJZChzcGVjLCAmUHlJZF9faW5pdGlhbGl6aW5nKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzcGVjKTsKKyAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTQyOCw3ICsxNjE1LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoaW5pdGlhbGl6aW5nID4gMCkgewogICAgICAgICAgICAgLyogX2Jvb3RzdHJhcC5fbG9ja191bmxvY2tfbW9kdWxlKCkgcmVsZWFzZXMgdGhlIGltcG9ydCBsb2NrICovCi0gICAgICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2xvY2tfdW5sb2NrX21vZHVsZSwgYWJzX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCkBAIC0xNDQ2LDcgKzE2MzMsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogX2Jvb3RzdHJhcC5fZmluZF9hbmRfbG9hZCgpIHJlbGVhc2VzIHRoZSBpbXBvcnQgbG9jayAqLwotICAgICAgICBtb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19maW5kX2FuZF9sb2FkLCBhYnNfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbnNfaW1wb3J0LCBOVUxMKTsKICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CkBAIC0xNTE1LDcgKzE3MDIsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBmaW5hbF9tb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgZmluYWxfbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19oYW5kbGVfZnJvbWxpc3QsIG1vZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3QsIGJ1aWx0aW5zX2ltcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CkBAIC0xNjY3LDggKzE4NTQsMzMgQEAKICAgICByZXR1cm4gcjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5leHRlbnNpb25fc3VmZml4ZXMKKworUmV0dXJucyB0aGUgbGlzdCBvZiBmaWxlIHN1ZmZpeGVzIHVzZWQgdG8gaWRlbnRpZnkgZXh0ZW5zaW9uIG1vZHVsZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19fZG9jX18sCisiZXh0ZW5zaW9uX3N1ZmZpeGVzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBsaXN0IG9mIGZpbGUgc3VmZml4ZXMgdXNlZCB0byBpZGVudGlmeSBleHRlbnNpb24gbW9kdWxlcy4iKTsKKworI2RlZmluZSBfSU1QX0VYVEVOU0lPTl9TVUZGSVhFU19NRVRIT0RERUYgICAgXAorICAgIHsiZXh0ZW5zaW9uX3N1ZmZpeGVzIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzLCBNRVRIX05PQVJHUywgX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9leHRlbnNpb25fc3VmZml4ZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9leHRlbnNpb25fc3VmZml4ZXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfaW1wbChtb2R1bGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJiMzBhMjQzODE2Nzc5OGMgaW5wdXQ9ZWNkZWVlY2ZjYjZmODM5ZV0qLwogewogICAgIFB5T2JqZWN0ICpsaXN0OwogICAgIGNvbnN0IGNoYXIgKnN1ZmZpeDsKQEAgLTE2OTYsMTQgKzE5MDgsNTAgQEAKICAgICByZXR1cm4gbGlzdDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5pbml0X2J1aWx0aW4KKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK0luaXRpYWxpemVzIGEgYnVpbHQtaW4gbW9kdWxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9pbml0X2J1aWx0aW5fX2RvY19fLAorImluaXRfYnVpbHRpbigkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSW5pdGlhbGl6ZXMgYSBidWlsdC1pbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9JTklUX0JVSUxUSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImluaXRfYnVpbHRpbiIsIChQeUNGdW5jdGlvbilfaW1wX2luaXRfYnVpbHRpbiwgTUVUSF9WQVJBUkdTLCBfaW1wX2luaXRfYnVpbHRpbl9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2luaXRfYnVpbHRpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2luaXRfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaW5pdF9idWlsdGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmluaXRfYnVpbHRpbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaW5pdF9idWlsdGluX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pbml0X2J1aWx0aW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hMDI0NDk0OGE0M2Y4ZTI2IGlucHV0PWY5MzRkMjIzMWVjNTJhMmVdKi8KK3sKICAgICBpbnQgcmV0OwogICAgIFB5T2JqZWN0ICptOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppbml0X2J1aWx0aW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0ID0gaW5pdF9idWlsdGluKG5hbWUpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3MTYsMTQgKzE5NjQsNTAgQEAKICAgICByZXR1cm4gbTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5pbml0X2Zyb3plbgorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworSW5pdGlhbGl6ZXMgYSBmcm96ZW4gbW9kdWxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9pbml0X2Zyb3plbl9fZG9jX18sCisiaW5pdF9mcm96ZW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkluaXRpYWxpemVzIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0lOSVRfRlJPWkVOX01FVEhPRERFRiAgICBcCisgICAgeyJpbml0X2Zyb3plbiIsIChQeUNGdW5jdGlvbilfaW1wX2luaXRfZnJvemVuLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaW5pdF9mcm96ZW5fX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9pbml0X2Zyb3plbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2luaXRfZnJvemVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pbml0X2Zyb3plbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppbml0X2Zyb3plbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaW5pdF9mcm96ZW5faW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2luaXRfZnJvemVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTRiYzJiZmYyOTZmOGYyMiBpbnB1dD0xMzAxOWFkZmMwNGYzZmIzXSovCit7CiAgICAgaW50IHJldDsKICAgICBQeU9iamVjdCAqbTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aW5pdF9mcm96ZW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0ID0gUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KG5hbWUpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3MzYsNjEgKzIwMjAsMjM5IEBACiAgICAgcmV0dXJuIG07CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuZ2V0X2Zyb3plbl9vYmplY3QKKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK0NyZWF0ZSBhIGNvZGUgb2JqZWN0IGZvciBhIGZyb3plbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2dldF9mcm96ZW5fb2JqZWN0X19kb2NfXywKKyJnZXRfZnJvemVuX29iamVjdCgkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgY29kZSBvYmplY3QgZm9yIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0dFVF9GUk9aRU5fT0JKRUNUX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRfZnJvemVuX29iamVjdCIsIChQeUNGdW5jdGlvbilfaW1wX2dldF9mcm96ZW5fb2JqZWN0LCBNRVRIX1ZBUkFSR1MsIF9pbXBfZ2V0X2Zyb3plbl9vYmplY3RfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9nZXRfZnJvemVuX29iamVjdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2dldF9mcm96ZW5fb2JqZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9nZXRfZnJvemVuX29iamVjdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpnZXRfZnJvemVuX29iamVjdCIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmdldF9mcm96ZW5fb2JqZWN0IiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9nZXRfZnJvemVuX29iamVjdF9pbXBsKG1vZHVsZSwgbmFtZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfZ2V0X2Zyb3plbl9vYmplY3RfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MDg5ZWM3MDJhOWQ3MGM1IGlucHV0PWVkNjg5YmMwNTM1OGZkYmRdKi8KK3sKICAgICByZXR1cm4gZ2V0X2Zyb3plbl9vYmplY3QobmFtZSk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuaXNfZnJvemVuX3BhY2thZ2UKKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK1JldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgaXMgb2YgYSBmcm96ZW4gcGFja2FnZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfaXNfZnJvemVuX3BhY2thZ2VfX2RvY19fLAorImlzX2Zyb3plbl9wYWNrYWdlKCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGlzIG9mIGEgZnJvemVuIHBhY2thZ2UuIik7CisKKyNkZWZpbmUgX0lNUF9JU19GUk9aRU5fUEFDS0FHRV9NRVRIT0RERUYgICAgXAorICAgIHsiaXNfZnJvemVuX3BhY2thZ2UiLCAoUHlDRnVuY3Rpb24pX2ltcF9pc19mcm96ZW5fcGFja2FnZSwgTUVUSF9WQVJBUkdTLCBfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfaXNfZnJvemVuX3BhY2thZ2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2ltcF9pc19mcm96ZW5fcGFja2FnZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuX3BhY2thZ2UoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWU7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aXNfZnJvemVuX3BhY2thZ2UiLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppc19mcm96ZW5fcGFja2FnZSIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaXNfZnJvemVuX3BhY2thZ2VfaW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODZhYWIxNGRjZDRiOTU5YiBpbnB1dD04MWI2Y2RlY2QwODBmYmI4XSovCit7CiAgICAgcmV0dXJuIGlzX2Zyb3plbl9wYWNrYWdlKG5hbWUpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmlzX2J1aWx0aW4KKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK1JldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgY29ycmVzcG9uZHMgdG8gYSBidWlsdC1pbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2lzX2J1aWx0aW5fX2RvY19fLAorImlzX2J1aWx0aW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgY29ycmVzcG9uZHMgdG8gYSBidWlsdC1pbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9JU19CVUlMVElOX01FVEhPRERFRiAgICBcCisgICAgeyJpc19idWlsdGluIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaXNfYnVpbHRpbiwgTUVUSF9WQVJBUkdTLCBfaW1wX2lzX2J1aWx0aW5fX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9pc19idWlsdGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfaXNfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfYnVpbHRpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aXNfYnVpbHRpbiIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhpc19idWlsdGluKG5hbWUpKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppc19idWlsdGluIiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pc19idWlsdGluX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2lzX2Zyb3plbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2lzX2J1aWx0aW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNTg0N2Y4Y2FjNTA5NDZlIGlucHV0PTg2YmVmZGFjMDIxZGQxYzddKi8KIHsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGlzX2J1aWx0aW4obmFtZSkpOworfQorCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmlzX2Zyb3plbgorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGZyb3plbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2lzX2Zyb3plbl9fZG9jX18sCisiaXNfZnJvemVuKCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGNvcnJlc3BvbmRzIHRvIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0lTX0ZST1pFTl9NRVRIT0RERUYgICAgXAorICAgIHsiaXNfZnJvemVuIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaXNfZnJvemVuLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaXNfZnJvemVuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOwotICAgIHN0cnVjdCBfZnJvemVuICpwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppc19mcm96ZW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmlzX2Zyb3plbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaXNfZnJvemVuX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pc19mcm96ZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NjkxYWY4ODRiYTQ5ODdkIGlucHV0PTczMDFkYmNhMTg5N2Q2NmJdKi8KK3sKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKKwogICAgIHAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKSAocCA9PSBOVUxMID8gMCA6IHAtPnNpemUpKTsKIH0KIAogI2lmZGVmIEhBVkVfRFlOQU1JQ19MT0FESU5HCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAubG9hZF9keW5hbWljCisKKyAgICBuYW1lOiB1bmljb2RlCisgICAgcGF0aDogZnNfdW5pY29kZQorICAgIGZpbGU6IG9iamVjdCA9IE5VTEwKKyAgICAvCisKK0xvYWRzIGFuIGV4dGVuc2lvbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2xvYWRfZHluYW1pY19fZG9jX18sCisibG9hZF9keW5hbWljKCRtb2R1bGUsIG5hbWUsIHBhdGgsIGZpbGU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkxvYWRzIGFuIGV4dGVuc2lvbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWRfZHluYW1pYyIsIChQeUNGdW5jdGlvbilfaW1wX2xvYWRfZHluYW1pYywgTUVUSF9WQVJBUkdTLCBfaW1wX2xvYWRfZHluYW1pY19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2xvYWRfZHluYW1pYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2xvYWRfZHluYW1pY19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqcGF0aCwgUHlPYmplY3QgKmZpbGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2FkX2R5bmFtaWMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm5hbWUsICpwYXRobmFtZSwgKmZvYiA9IE5VTEwsICptb2Q7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWU7CisgICAgUHlPYmplY3QgKnBhdGg7CisgICAgUHlPYmplY3QgKmZpbGUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVTyZ8Tzpsb2FkX2R5bmFtaWMiLAorICAgICAgICAmbmFtZSwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJnBhdGgsICZmaWxlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfbG9hZF9keW5hbWljX2ltcGwobW9kdWxlLCBuYW1lLCBwYXRoLCBmaWxlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2FkX2R5bmFtaWNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnBhdGgsIFB5T2JqZWN0ICpmaWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTgxZDExYTFmYmQxZWEwYTggaW5wdXQ9YWY2NGYwNmU0YmFkMzUyNl0qLworeworICAgIFB5T2JqZWN0ICptb2Q7CiAgICAgRklMRSAqZnA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVPJnxPOmxvYWRfZHluYW1pYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmcGF0aG5hbWUsICZmb2IpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZm9iICE9IE5VTEwpIHsKLSAgICAgICAgZnAgPSBfUHlfZm9wZW4ocGF0aG5hbWUsICJyIik7CisgICAgaWYgKGZpbGUgIT0gTlVMTCkgeworICAgICAgICBmcCA9IF9QeV9mb3Blbl9vYmoocGF0aCwgInIiKTsKICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihwYXRobmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzk4LDggKzIyNjAsOCBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIGZwID0gTlVMTDsKLSAgICBtb2QgPSBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUobmFtZSwgcGF0aG5hbWUsIGZwKTsKLSAgICBQeV9ERUNSRUYocGF0aG5hbWUpOworICAgIG1vZCA9IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZShuYW1lLCBwYXRoLCBmcCk7CisgICAgUHlfREVDUkVGKHBhdGgpOwogICAgIGlmIChmcCkKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICByZXR1cm4gbW9kOwpAQCAtMTgwNyw1MCArMjI2OSwzMyBAQAogCiAjZW5kaWYgLyogSEFWRV9EWU5BTUlDX0xPQURJTkcgKi8KIAorLypbY2xpbmljIGlucHV0XQorZHVtcCBidWZmZXIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotLyogRG9jIHN0cmluZ3MgKi8KKyNpZm5kZWYgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGCisgICAgI2RlZmluZSBfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDA3YzFkNGEzNDNhOTU3OSBpbnB1dD01MjRjZTJlMDIxZTRlYmE2XSovCisKIAogUHlEb2NfU1RSVkFSKGRvY19pbXAsCiAiKEV4dHJlbWVseSkgbG93LWxldmVsIGltcG9ydCBtYWNoaW5lcnkgYml0cyBhcyB1c2VkIGJ5IGltcG9ydGxpYiBhbmQgaW1wLiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2V4dGVuc2lvbl9zdWZmaXhlcywKLSJleHRlbnNpb25fc3VmZml4ZXMoKSAtPiBsaXN0IG9mIHN0cmluZ3NcblwKLVJldHVybnMgdGhlIGxpc3Qgb2YgZmlsZSBzdWZmaXhlcyB1c2VkIHRvIGlkZW50aWZ5IGV4dGVuc2lvbiBtb2R1bGVzLiIpOwotCi1QeURvY19TVFJWQVIoZG9jX2xvY2tfaGVsZCwKLSJsb2NrX2hlbGQoKSAtPiBib29sZWFuXG5cCi1SZXR1cm4gVHJ1ZSBpZiB0aGUgaW1wb3J0IGxvY2sgaXMgY3VycmVudGx5IGhlbGQsIGVsc2UgRmFsc2UuXG5cCi1PbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCByZXR1cm4gRmFsc2UuIik7Ci0KLVB5RG9jX1NUUlZBUihkb2NfYWNxdWlyZV9sb2NrLAotImFjcXVpcmVfbG9jaygpIC0+IE5vbmVcblwKLUFjcXVpcmVzIHRoZSBpbnRlcnByZXRlcidzIGltcG9ydCBsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQuXG5cCi1UaGlzIGxvY2sgc2hvdWxkIGJlIHVzZWQgYnkgaW1wb3J0IGhvb2tzIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5XG5cCi13aGVuIGltcG9ydGluZyBtb2R1bGVzLlxuXAotT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIik7Ci0KLVB5RG9jX1NUUlZBUihkb2NfcmVsZWFzZV9sb2NrLAotInJlbGVhc2VfbG9jaygpIC0+IE5vbmVcblwKLVJlbGVhc2UgdGhlIGludGVycHJldGVyJ3MgaW1wb3J0IGxvY2suXG5cCi1PbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4iKTsKLQogc3RhdGljIFB5TWV0aG9kRGVmIGltcF9tZXRob2RzW10gPSB7Ci0gICAgeyJleHRlbnNpb25fc3VmZml4ZXMiLCBpbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzLCBNRVRIX05PQVJHUywKLSAgICAgICAgZG9jX2V4dGVuc2lvbl9zdWZmaXhlc30sCi0gICAgeyJsb2NrX2hlbGQiLCAgICAgICAgaW1wX2xvY2tfaGVsZCwgICAgTUVUSF9OT0FSR1MsICBkb2NfbG9ja19oZWxkfSwKLSAgICB7ImFjcXVpcmVfbG9jayIsIGltcF9hY3F1aXJlX2xvY2ssIE1FVEhfTk9BUkdTLCAgZG9jX2FjcXVpcmVfbG9ja30sCi0gICAgeyJyZWxlYXNlX2xvY2siLCBpbXBfcmVsZWFzZV9sb2NrLCBNRVRIX05PQVJHUywgIGRvY19yZWxlYXNlX2xvY2t9LAotICAgIHsiZ2V0X2Zyb3plbl9vYmplY3QiLCAgICAgICBpbXBfZ2V0X2Zyb3plbl9vYmplY3QsICBNRVRIX1ZBUkFSR1N9LAotICAgIHsiaXNfZnJvemVuX3BhY2thZ2UiLCAgIGltcF9pc19mcm96ZW5fcGFja2FnZSwgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpbml0X2J1aWx0aW4iLCAgICAgICAgICAgIGltcF9pbml0X2J1aWx0aW4sICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpbml0X2Zyb3plbiIsICAgICAgICAgICAgIGltcF9pbml0X2Zyb3plbiwgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpc19idWlsdGluIiwgICAgICAgICAgICAgIGltcF9pc19idWlsdGluLCAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpc19mcm96ZW4iLCAgICAgICAgICAgICAgIGltcF9pc19mcm96ZW4sICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0jaWZkZWYgSEFWRV9EWU5BTUlDX0xPQURJTkcKLSAgICB7ImxvYWRfZHluYW1pYyIsICAgICAgICAgICAgaW1wX2xvYWRfZHluYW1pYywgICAgICAgTUVUSF9WQVJBUkdTfSwKLSNlbmRpZgotICAgIHsiX2ZpeF9jb19maWxlbmFtZSIsICAgICAgICBpbXBfZml4X2NvX2ZpbGVuYW1lLCAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KKyAgICBfSU1QX0VYVEVOU0lPTl9TVUZGSVhFU19NRVRIT0RERUYKKyAgICBfSU1QX0xPQ0tfSEVMRF9NRVRIT0RERUYKKyAgICBfSU1QX0FDUVVJUkVfTE9DS19NRVRIT0RERUYKKyAgICBfSU1QX1JFTEVBU0VfTE9DS19NRVRIT0RERUYKKyAgICBfSU1QX0dFVF9GUk9aRU5fT0JKRUNUX01FVEhPRERFRgorICAgIF9JTVBfSVNfRlJPWkVOX1BBQ0tBR0VfTUVUSE9EREVGCisgICAgX0lNUF9JTklUX0JVSUxUSU5fTUVUSE9EREVGCisgICAgX0lNUF9JTklUX0ZST1pFTl9NRVRIT0RERUYKKyAgICBfSU1QX0lTX0JVSUxUSU5fTUVUSE9EREVGCisgICAgX0lNUF9JU19GUk9aRU5fTUVUSE9EREVGCisgICAgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGCisgICAgX0lNUF9fRklYX0NPX0ZJTEVOQU1FX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMfSAgLyogc2VudGluZWwgKi8KIH07CiAKIApAQCAtMTk0MCwzICsyMzg1LDQgQEAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCisKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRkbC5jIGIvUHl0aG9uL2ltcG9ydGRsLmMKaW5kZXggMGVhOTU0Yy4uYjYwZjFjNyAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGRsLmMKKysrIGIvUHl0aG9uL2ltcG9ydGRsLmMKQEAgLTc3LDYgKzc3LDggQEAKICAgICAgICAgUHlPYmplY3QgKm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJkeW5hbWljIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXQgZnVuY3Rpb24gKFB5SW5pdF8lcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRuYW1lKTsKKyAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgUHlFcnJfU2V0SW1wb3J0RXJyb3IobXNnLCBuYW1lLCBwYXRoKTsKICAgICAgICAgUHlfREVDUkVGKG1zZyk7CiAgICAgICAgIGdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0ZGwuaCBiL1B5dGhvbi9pbXBvcnRkbC5oCmluZGV4IDZiOWNmNzUuLjZhNTFhOTEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRkbC5oCisrKyBiL1B5dGhvbi9pbXBvcnRkbC5oCkBAIC0xOCwxMyArMTgsOCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIHR5cGVkZWYgRkFSUFJPQyBkbF9mdW5jcHRyOwogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxvczJkZWYuaD4KLXR5cGVkZWYgaW50ICgqIEFQSUVOVFJZIGRsX2Z1bmNwdHIpKCk7Ci0jZWxzZQogdHlwZWRlZiB2b2lkICgqZGxfZnVuY3B0cikodm9pZCk7CiAjZW5kaWYKLSNlbmRpZgogCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGxpYi5oIGIvUHl0aG9uL2ltcG9ydGxpYi5oCmluZGV4IGNiNmFmYzUuLmVlMjMwYWYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRsaWIuaAorKysgYi9QeXRob24vaW1wb3J0bGliLmgKQEAgLTEsNTAwICsxLDQ3NiBAQAogLyogQXV0by1nZW5lcmF0ZWQgYnkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jICovCi11bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHsKLSAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwKLSAgICAwLDY0LDAsMCwwLDExNSwyMDYsMywwLDAsMTAwLDAsMCw5MCwwLDAsCi0gICAgMTAwLDEzMSwwLDkwLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKK2NvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0geworICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDIyOCw0LDAsMCwxMDAsMCwwLDkwLDAsMCwKKyAgICAxMDAsMTYzLDAsOTAsMSwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLAogICAgIDIsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCwzLDAsMTAwLDgsCiAgICAgMCwxMDAsOSwwLDEzMiwwLDAsOTAsNCwwLDEwMCwxMCwwLDEwMCwxMSwwLAogICAgIDEzMiwwLDAsOTAsNSwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsCiAgICAgNiwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxNiwKICAgICAwLDEwMCwxNywwLDEzMiwwLDAsOTAsOCwwLDEwMCwxOCwwLDEwMCwxOSwwLAotICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwyMCwwLDEwMCwyMSwwLDEwMCwyMiwwLDEzMiwKLSAgICAxLDAsOTAsMTAsMCwxMDAsMjMsMCwxMDAsMjQsMCwxMzIsMCwwLDkwLDExLAotICAgIDAsMTAxLDEyLDAsMTAxLDExLDAsMTA2LDEzLDAsMTMxLDEsMCw5MCwxNCwwLAotICAgIDEwMCwyNSwwLDEwMCwyNiwwLDEzMiwwLDAsOTAsMTUsMCwxMDUsMCwwLDkwLAotICAgIDE2LDAsMTA1LDAsMCw5MCwxNywwLDcxLDEwMCwyNywwLDEwMCwyOCwwLDEzMiwKLSAgICAwLDAsMTAwLDI4LDAsMTAxLDE4LDAsMTMxLDMsMCw5MCwxOSwwLDcxLDEwMCwKLSAgICAyOSwwLDEwMCwzMCwwLDEzMiwwLDAsMTAwLDMwLDAsMTMxLDIsMCw5MCwyMCwKLSAgICAwLDcxLDEwMCwzMSwwLDEwMCwzMiwwLDEzMiwwLDAsMTAwLDMyLDAsMTMxLDIsCi0gICAgMCw5MCwyMSwwLDEwMCwzMywwLDEwMCwzNCwwLDEzMiwwLDAsOTAsMjIsMCwKLSAgICAxMDAsMzUsMCwxMDAsMzYsMCwxMzIsMCwwLDkwLDIzLDAsMTAwLDM3LDAsMTAwLAotICAgIDM4LDAsMTMyLDAsMCw5MCwyNCwwLDEwMCwzOSwwLDEwMSwyNSwwLDEwMCw0MCwKLSAgICAwLDEzMSwxLDAsMTAwLDQxLDAsNjIsNjYsMTAxLDI1LDAsMTAwLDQyLDAsMTMxLAotICAgIDEsMCwxMDAsNDMsMCw2Miw2Niw5MCwyNiwwLDEwMSwyNywwLDEwMCw0NCwwLAotICAgIDEwMCw0NSwwLDEzMiwwLDAsMTAxLDI4LDAsMTAwLDQ2LDAsMTAwLDQ3LDAsMTAwLAotICAgIDQ4LDAsMTMxLDMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsOTAsMjksMCwxMDAsCi0gICAgNDksMCw5MCwzMCwwLDEwMCw1MCwwLDEwMywxLDAsOTAsMzEsMCwxMDAsNTEsCi0gICAgMCwxMDMsMSwwLDkwLDMyLDAsMTAwLDUyLDAsMTAzLDEsMCw5MCwzMywwLAotICAgIDEwMCwxMzAsMCwxMDAsNTMsMCwxMDAsNTQsMCwxMzIsMSwwLDkwLDM1LDAsMTAwLAotICAgIDU1LDAsMTAwLDU2LDAsMTMyLDAsMCw5MCwzNiwwLDEwMCw1NywwLDEwMCw1OCwKLSAgICAwLDEzMiwwLDAsOTAsMzcsMCwxMDAsNTksMCwxMDAsNjAsMCwxMDAsNjEsMCwKLSAgICAxMDAsNjIsMCwxMzIsMCwxLDkwLDM4LDAsMTAwLDYzLDAsMTAwLDY0LDAsMTMyLAotICAgIDAsMCw5MCwzOSwwLDEwMCw2NSwwLDEwMCw2NiwwLDEzMiwwLDAsOTAsNDAsCi0gICAgMCwxMDAsNjcsMCwxMDAsNjgsMCwxMzIsMCwwLDkwLDQxLDAsMTAwLDY5LDAsCi0gICAgMTAwLDcwLDAsMTMyLDAsMCw5MCw0MiwwLDEwMCw3MSwwLDEwMCw3MiwwLDEzMiwKLSAgICAwLDAsOTAsNDMsMCwxMDAsNzMsMCwxMDAsNzQsMCwxMzIsMCwwLDkwLDQ0LAotICAgIDAsMTAwLDc1LDAsMTAwLDc2LDAsMTMyLDAsMCw5MCw0NSwwLDcxLDEwMCw3NywKLSAgICAwLDEwMCw3OCwwLDEzMiwwLDAsMTAwLDc4LDAsMTMxLDIsMCw5MCw0NiwwLAotICAgIDcxLDEwMCw3OSwwLDEwMCw4MCwwLDEzMiwwLDAsMTAwLDgwLDAsMTMxLDIsMCwKLSAgICA5MCw0NywwLDcxLDEwMCw4MSwwLDEwMCw4MiwwLDEzMiwwLDAsMTAwLDgyLDAsCi0gICAgMTMxLDIsMCw5MCw0OCwwLDcxLDEwMCw4MywwLDEwMCw4NCwwLDEzMiwwLDAsCi0gICAgMTAwLDg0LDAsMTMxLDIsMCw5MCw0OSwwLDcxLDEwMCw4NSwwLDEwMCw4NiwwLAotICAgIDEzMiwwLDAsMTAwLDg2LDAsMTAxLDQ5LDAsMTMxLDMsMCw5MCw1MCwwLDcxLAotICAgIDEwMCw4NywwLDEwMCw4OCwwLDEzMiwwLDAsMTAwLDg4LDAsMTMxLDIsMCw5MCwKLSAgICA1MSwwLDcxLDEwMCw4OSwwLDEwMCw5MCwwLDEzMiwwLDAsMTAwLDkwLDAsMTAxLAotICAgIDUxLDAsMTAxLDUwLDAsMTMxLDQsMCw5MCw1MiwwLDcxLDEwMCw5MSwwLDEwMCwKLSAgICA5MiwwLDEzMiwwLDAsMTAwLDkyLDAsMTAxLDUxLDAsMTAxLDQ5LDAsMTMxLDQsCi0gICAgMCw5MCw1MywwLDEwMywwLDAsOTAsNTQsMCw3MSwxMDAsOTMsMCwxMDAsOTQsCi0gICAgMCwxMzIsMCwwLDEwMCw5NCwwLDEzMSwyLDAsOTAsNTUsMCw3MSwxMDAsOTUsCi0gICAgMCwxMDAsOTYsMCwxMzIsMCwwLDEwMCw5NiwwLDEzMSwyLDAsOTAsNTYsMCwKLSAgICA3MSwxMDAsOTcsMCwxMDAsOTgsMCwxMzIsMCwwLDEwMCw5OCwwLDEzMSwyLDAsCi0gICAgOTAsNTcsMCw3MSwxMDAsOTksMCwxMDAsMTAwLDAsMTMyLDAsMCwxMDAsMTAwLDAsCi0gICAgMTMxLDIsMCw5MCw1OCwwLDcxLDEwMCwxMDEsMCwxMDAsMTAyLDAsMTMyLDAsMCwKLSAgICAxMDAsMTAyLDAsMTMxLDIsMCw5MCw1OSwwLDcxLDEwMCwxMDMsMCwxMDAsMTA0LDAsCi0gICAgMTMyLDAsMCwxMDAsMTA0LDAsMTMxLDIsMCw5MCw2MCwwLDEwMCwxMDUsMCwxMDAsCi0gICAgMTA2LDAsMTMyLDAsMCw5MCw2MSwwLDEwMCwxMDcsMCwxMDAsMTA4LDAsMTMyLDAsCi0gICAgMCw5MCw2MiwwLDEwMCwxMDksMCwxMDAsMTEwLDAsMTMyLDAsMCw5MCw2MywwLAotICAgIDEwMCwxMTEsMCw5MCw2NCwwLDEwMCwxMTIsMCwxMDAsMTEzLDAsMTMyLDAsMCw5MCwKLSAgICA2NSwwLDEwMCwxMTQsMCwxMDAsMTE1LDAsMTMyLDAsMCw5MCw2NiwwLDEwMCwxMzAsCi0gICAgMCwxMDAsNDYsMCwxMDAsMTE2LDAsMTAwLDExNywwLDEzMiwyLDAsOTAsNjcsMCwKLSAgICAxMDAsMTE4LDAsMTAwLDExOSwwLDEzMiwwLDAsOTAsNjgsMCwxMDAsMTIwLDAsMTAwLAotICAgIDEyMSwwLDEzMiwwLDAsOTAsNjksMCwxMDAsMTIyLDAsMTAwLDEyMywwLDEzMiwwLAotICAgIDAsOTAsNzAsMCwxMDAsMTMwLDAsMTAwLDEzMCwwLDEwMiwwLDAsMTAwLDQ2LDAsCi0gICAgMTAwLDEyNCwwLDEwMCwxMjUsMCwxMzIsNCwwLDkwLDcxLDAsMTAwLDEyNiwwLDEwMCwKLSAgICAxMjcsMCwxMzIsMCwwLDkwLDcyLDAsMTAwLDEyOCwwLDEwMCwxMjksMCwxMzIsMCwKLSAgICAwLDkwLDczLDAsMTAwLDEzMCwwLDgzLDQwLDEzMiwwLDAsMCwxMTcsODMsMSwKLSAgICAwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsCi0gICAgMTAsMTAsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiw3OCw3OSw4NCwzMiwxMDksMTAxLDk3LDExMCwxMTYsMzIsMTE2LDExMSwzMiw5OCwxMDEsCi0gICAgMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsMzMsMzIsNzMsMTE2LDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsCi0gICAgMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTUsMTE3LDk5LDEwNCwxMCwxMTYsMTA0LAotICAgIDk3LDExNiwzMiwxMDUsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExMiwxMDEsMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiw4MCwKLSAgICAxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw0NiwzMiw2NSwxMTUsMTAsMTE1LDExNyw5OSwxMDQsMzIsMTA1LAotICAgIDExNiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwKLSAgICAxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSw5OSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwKLSAgICAzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTExLAotICAgIDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDEwLDExOSwxMTEsMTE0LDEwNyw0NiwzMiw3OSwxMTAsCi0gICAgMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTcsCi0gICAgOTgsMTA4LDEwNSw5OSw0NSwxMDIsOTcsOTksMTA1LDExMCwxMDMsMzIsMTE4LDEwMSwxMTQsMTE1LAotICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNyw2LDAsCi0gICAgMCwwLDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMTE3LDYsMCwwLDAsMTAwLDk3LDExNCwKLSAgICAxMTksMTA1LDExMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMTYsMywwLDEzMSwxLDAsMTE0LDMzLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMTAsMTIsMCwxMDAsMywKLSAgICAwLDEwMCwyLDAsMTMyLDAsMCwxMjUsMCwwLDEyNCwwLDAsODMsNDAsNCwKLSAgICAwLDAsMCw3OCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDgzLDAsMCwwLDExNSwxMywwLDAsMCwxMDAsMSwKLSAgICAwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDUzLDAsMCwwLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LAotICAgIDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsCi0gICAgMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsMTE1LDEyLDAsMCwwLDgwLAotICAgIDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LDc1LDQwLDIsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNywwLDAsMCwxMDEsMTEwLDExOCwKLSAgICAxMDUsMTE0LDExMSwxMTAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCi0gICAgOTUsOTksOTcsMTE1LDEwMSwzNCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsCi0gICAgMTE3LDM3LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCwKLSAgICA5NSw5OSw5NywxMTUsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSwKLSAgICA0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTMsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTksMTA0LDEwMSw5OSwKLSAgICAxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCw0MCwxLDAsMCwwLDExNyw1LDAsCi0gICAgMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMzgsMCwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwyLDQwLDQsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsCi0gICAgMTE3LDgsMCwwLDAsMTEyLDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDExNywxMCwwLAotICAgIDAsMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwxMTcsMjcsMCwwLAotICAgIDAsOTUsNjcsNjUsODMsNjksOTUsNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsCi0gICAgODYsNjksOTUsODAsNzYsNjUsODQsNzAsNzksODIsNzcsODMsNDAsMSwwLDAsCi0gICAgMCwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwKLSAgICAxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwKLSAgICAwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LAotICAgIDExNSwxMDEsMzIsMCwwLDAsMTE1LDgsMCwwLDAsMCwxLDE4LDEsMTUsCi0gICAgNCwxMiwzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLAotICAgIDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMDgsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDAsMCwxMDMsMCwKLSAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDEsMCwKLSAgICA2NCwxMzEsMSwwLDEsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDIsCi0gICAgMCw2MywxMDAsMSwwLDY0LDEzMSwxLDAsMSwxMjQsMSwwLDEwNiwxLDAsCi0gICAgMTI0LDAsMCwxMDAsMywwLDYzLDEwMCwxLDAsNjQsMTMxLDEsMCwxLDEyNCwKLSAgICAxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCw0LDAsNjMsMTAwLDEsMCw2NCwKLSAgICAxMzEsMSwwLDEsMTE2LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsNSwKLSAgICAwLDAsMCwxMTcsMTExLDAsMCwwLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLAotICAgIDk3LDMyLDUxLDUwLDQ1LDk4LDEwNSwxMTYsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LAotICAgIDMyLDExNiwxMTEsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LAotICAgIDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4OCw4OCw4OCwzMiw4NCwxMDEsMTA5LDExMiwKLSAgICAxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTE3LDExMCwxMTYsMTA1LDEwOCwzMiwxMDksOTcsMTE0LDExNSwKLSAgICAxMDQsOTcsMTA4LDM5LDExNSwzMiwxMDgsMTExLDExMCwxMDMsMzIsMTAyLDExNywxMTAsOTksMTE2LAotICAgIDEwNSwxMTEsMTEwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMjAsMTEyLDExMSwxMTUsMTAxLDEwMCwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMDUsMjU1LDAsMCwwLDEwNSw4LDAsMCwKLSAgICAwLDEwNSwxNiwwLDAsMCwxMDUsMjQsMCwwLDAsNDAsMywwLDAsMCwKLSAgICAxMTcsMywwLDAsMCwxMDUsMTEwLDExNiwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLAotICAgIDEwMSwxMTAsMTAwLDExNyw5LDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk3LDExNCwxMTQsOTcsCi0gICAgMTIxLDQwLDIsMCwwLDAsMTE3LDEsMCwwLDAsMTIwLDExNyw5LDAsMCwKLSAgICAwLDEwNSwxMTAsMTE2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsMCwwLDk1LDExOSw5NSwxMDgsMTExLAotICAgIDExMCwxMDMsNDUsMCwwLDAsMTE1LDE0LDAsMCwwLDAsNiwxMiwxLDYsCi0gICAgMSwxNywxLDIxLDEsMjEsMSwyMSwxLDExNyw3LDAsMCwwLDk1LDExOSwKLSAgICA5NSwxMDgsMTExLDExMCwxMDMsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNjgsMCwwLDAsMTI0LAotICAgIDAsMCwxMDAsMSwwLDI1LDEyNSwxLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwKLSAgICAyLDAsMjUsMTAwLDMsMCw2Miw3OSwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsCi0gICAgMCwxMDAsNCwwLDI1LDEwMCw1LDAsNjIsNzksMTI1LDEsMCwxMjQsMSwwLAotICAgIDEyNCwwLDAsMTAwLDYsMCwyNSwxMDAsNywwLDYyLDc5LDEyNSwxLDAsMTI0LAotICAgIDEsMCw4Myw0MCw4LDAsMCwwLDExNywxMTUsMCwwLDAsNjcsMTExLDExMCwKLSAgICAxMTgsMTAxLDExNCwxMTYsMzIsNTIsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsCi0gICAgMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LDExMCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNiwxMDEsMTAzLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsODgsODgsODgsMzIsODQsMTAxLDEwOSwxMTIsMTExLDExNCw5NywxMTQsMTIxLDMyLAotICAgIDExNywxMTAsMTE2LDEwNSwxMDgsMzIsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwzOSwxMTUsMzIsCi0gICAgMTA4LDExMSwxMTAsMTAzLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDEwMSwxMjAsMTEyLDExMSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAxMDUsMCwwLDAsMCwxMDUsMSwwLDAsMCwxMDUsOCwwLDAsMCwxMDUsCi0gICAgMiwwLDAsMCwxMDUsMTYsMCwwLDAsMTA1LDMsMCwwLDAsMTA1LDI0LAotICAgIDAsMCwwLDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsOSwwLAotICAgIDAsMCwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE3LDEsMCwwLDAsCi0gICAgMTIwLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDcsMCwKLSAgICAwLDAsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw2MSwwLDAsMCwxMTUsMTAsMCwKLSAgICAwLDAsMCw2LDEwLDEsMTgsMSwxOCwxLDE4LDEsMTE3LDcsMCwwLAotICAgIDAsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw5OSwwLDAsMCwwLDAsMCwwLAotICAgIDAsMywwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSwxMDMsMCwKLSAgICAwLDAsMTAzLDAsMCwxMjUsMSwwLDEyMCw3MSwwLDEyNCwwLDAsNjgsOTMsCi0gICAgNjMsMCwxMjUsMiwwLDEyNCwyLDAsMTE1LDMxLDAsMTEzLDEzLDAsMTEwLDAsCi0gICAgMCwxMjQsMSwwLDEwNiwwLDAsMTI0LDIsMCwxMzEsMSwwLDEsMTI0LDIsCi0gICAgMCwxMDAsNCwwLDI1LDExNiwxLDAsMTA3LDcsMCwxMTQsMTMsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTE2LDIsMCwxMzEsMSwwLDEsMTEzLDEzLDAsMTEzLDEzLAotICAgIDAsODcsMTAwLDIsMCwxMDYsMywwLDEyNCwxLDAsMTAwLDMsMCwxMDAsNSwKLSAgICAwLDEzMywyLDAsMjUsMTMxLDEsMCw4Myw0MCw2LDAsMCwwLDExNywzMSwKLSAgICAwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA2LDExMSwxMDUsMTEwLDQwLAotICAgIDQxLDQ2LDEwNSwxLDAsMCwwLDExNywwLDAsMCwwLDc4LDEwNSwyNTUsMjU1LAotICAgIDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LDI1NSw0MCw0LDAsMCwwLDExNyw2LDAsMCwKLSAgICAwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTE3LDE1LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDQsMCwwLDAsMTA2LDExMSwxMDUsCi0gICAgMTEwLDQwLDMsMCwwLDAsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LAotICAgIDExMiw5NywxMTQsMTE2LDExNSwxMTcsOSwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTIsOTcsCi0gICAgMTE0LDExNiwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNCwxMTYsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDc0LDAsMCwwLDExNSwxNiwwLDAsMCwKLSAgICAwLDIsNiwxLDEzLDEsNiwxLDYsMSwxMywxLDE2LDEsMjAsMSwKLSAgICAxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDg1LDAsMCwwLDEyMCw0OCwwLDExNiwwLDAsMTI0LAotICAgIDAsMCwxMzEsMSwwLDY4LDkzLDI4LDAsMTI1LDEsMCwxMjQsMSwwLDExNiwKLSAgICAxLDAsMTA3LDYsMCwxMTQsMTMsMCwxMjQsMSwwLDEyNSwyLDAsODAsMTEzLAotICAgIDEzLDAsMTEzLDEzLDAsODcsMTE2LDIsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LAotICAgIDMsMCwxMjQsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSwzLDAsMTI1LDQsCi0gICAgMCwxMjUsNSwwLDEyNCwzLDAsMTI0LDUsMCwxMDIsMiwwLDgzLDQwLDEsCi0gICAgMCwwLDAsMTE3LDMyLDAsMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwKLSAgICAxMTUsMTEyLDEwOCwxMDUsMTE2LDQwLDQxLDQ2LDQwLDQsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsMTE0LDEwMSwxMTgsMTAxLDExNCwxMTUsMTAxLDEwMCwxMTcsMTUsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwxMTcsMTAsMCwwLDAsCi0gICAgMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsNiwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMSwwLDAsMCwxMjAsMTE3LDMsCi0gICAgMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDUsMCwwLDAsMTAyLDExNCwxMTEsMTEwLDExNiwKLSAgICAxMTcsMSwwLDAsMCw5NSwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDg2LDAsMCwwLDExNSwKLSAgICAxNCwwLDAsMCwwLDIsMTksMSwxMiwxLDYsMSw4LDIsNiwxLAotICAgIDI0LDEsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LAotICAgIDEwNSwxMTYsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDYxLDAsMCwwLDEyMSwxOSwwLDExNiwKLSAgICAwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMTAsCi0gICAgMjIsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsMTAwLAotICAgIDIsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTA2LDQsMCwxMDAsMSwKLSAgICAwLDY0LDEyNCwxLDAsMTA3LDIsMCw4Myw0MCwzLDAsMCwwLDExNyw0OSwKLSAgICAwLDAsMCw4NCwxMDEsMTE1LDExNiwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwxMTQsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTYsCi0gICAgMTIxLDExMiwxMDEsNDYsMTA1LDAsMjQwLDAsMCw3MCw0MCw1LDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsCi0gICAgMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LDExNyw1LDAsMCwKLSAgICAwLDcwLDk3LDEwOCwxMTUsMTAxLDExNyw3LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExMSwKLSAgICAxMDAsMTAxLDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgMTE3LDQsMCwwLDAsMTA5LDExMSwxMDAsMTAxLDExNyw5LDAsMCwwLDExNSwxMTYsCi0gICAgOTcsMTE2LDk1LDEwNSwxMTAsMTAyLDExMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxOCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LAotICAgIDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsOTgsMCwwLDAsMTE1LDEwLAotICAgIDAsMCwwLDAsMiwzLDEsMTksMSwxMywxLDksMSwxMTcsMTgsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsCi0gICAgMTE2LDEyMSwxMTIsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAxMzIsMCwwLDkwLDksMCwxMDAsMjAsMCwxMDAsMjEsMCwxMzIsMCwwLDkwLAorICAgIDEwLDAsMTAwLDIyLDAsMTAwLDIzLDAsMTAwLDI0LDAsMTMyLDEsMCw5MCwxMSwKKyAgICAwLDEwMCwyNSwwLDEwMCwyNiwwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMjcsMCwKKyAgICAxMDAsMjgsMCwxMzIsMCwwLDkwLDEzLDAsMTAxLDE0LDAsMTAxLDEyLDAsMTA2LAorICAgIDE1LDAsMTMxLDEsMCw5MCwxNiwwLDcxLDEwMCwyOSwwLDEwMCwzMCwwLDEzMiwKKyAgICAwLDAsMTAwLDMwLDAsMTMxLDIsMCw5MCwxNywwLDEwNSwwLDAsOTAsMTgsCisgICAgMCwxMDUsMCwwLDkwLDE5LDAsNzEsMTAwLDMxLDAsMTAwLDMyLDAsMTMyLDAsCisgICAgMCwxMDAsMzIsMCwxMDEsMjAsMCwxMzEsMywwLDkwLDIxLDAsNzEsMTAwLDMzLAorICAgIDAsMTAwLDM0LDAsMTMyLDAsMCwxMDAsMzQsMCwxMzEsMiwwLDkwLDIyLDAsCisgICAgNzEsMTAwLDM1LDAsMTAwLDM2LDAsMTMyLDAsMCwxMDAsMzYsMCwxMzEsMiwwLAorICAgIDkwLDIzLDAsNzEsMTAwLDM3LDAsMTAwLDM4LDAsMTMyLDAsMCwxMDAsMzgsMCwKKyAgICAxMzEsMiwwLDkwLDI0LDAsMTAwLDM5LDAsMTAwLDQwLDAsMTMyLDAsMCw5MCwKKyAgICAyNSwwLDEwMCw0MSwwLDEwMCw0MiwwLDEzMiwwLDAsOTAsMjYsMCwxMDAsNDMsCisgICAgMCwxMDAsNDQsMCwxMzIsMCwwLDkwLDI3LDAsMTAwLDQ1LDAsMTA2LDI4LDAsCisgICAgMTAwLDQ2LDAsMTAwLDQ3LDAsMTMxLDIsMCwxMDAsNDgsMCwyMyw5MCwyOSwwLAorICAgIDEwMSwzMCwwLDEwNiwzMSwwLDEwMSwyOSwwLDEwMCw0NywwLDEzMSwyLDAsOTAsCisgICAgMzIsMCwxMDAsNDksMCw5MCwzMywwLDEwMCw1MCwwLDEwMywxLDAsOTAsMzQsCisgICAgMCwxMDAsNTEsMCwxMDMsMSwwLDkwLDM1LDAsMTAwLDUyLDAsMTAzLDEsMCwKKyAgICA5MCwzNiwwLDEwMCw1MywwLDEwMCw1NCwwLDEwMCw1NSwwLDEzMiwxLDAsOTAsCisgICAgMzcsMCwxMDAsNTYsMCwxMDAsNTcsMCwxMzIsMCwwLDkwLDM4LDAsMTAwLDU4LAorICAgIDAsMTAwLDU5LDAsMTMyLDAsMCw5MCwzOSwwLDEwMCw2MCwwLDEwMCw2MSwwLAorICAgIDEzMiwwLDAsOTAsNDAsMCwxMDAsNjIsMCwxMDAsNjMsMCwxMDAsNjQsMCwxMDAsCisgICAgNjUsMCwxMzIsMCwxLDkwLDQxLDAsMTAwLDY2LDAsMTAwLDY3LDAsMTMyLDAsCisgICAgMCw5MCw0MiwwLDEwMCw2OCwwLDEwMCw2OSwwLDEzMiwwLDAsOTAsNDMsMCwKKyAgICAxMDAsNzAsMCwxMDAsNzEsMCwxMzIsMCwwLDkwLDQ0LDAsMTAwLDcyLDAsMTAwLAorICAgIDczLDAsMTMyLDAsMCw5MCw0NSwwLDEwMCw3NCwwLDEwMCw3NSwwLDEzMiwwLAorICAgIDAsOTAsNDYsMCwxMDAsNTMsMCwxMDAsNTMsMCwxMDAsNTMsMCwxMDAsNzYsMCwKKyAgICAxMDAsNzcsMCwxMzIsMywwLDkwLDQ3LDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAwLAorICAgIDUzLDAsMTAwLDc4LDAsMTAwLDc5LDAsMTMyLDMsMCw5MCw0OCwwLDEwMCw4MCwKKyAgICAwLDEwMCw4MCwwLDEwMCw4MSwwLDEwMCw4MiwwLDEzMiwyLDAsOTAsNDksMCwKKyAgICAxMDAsODMsMCwxMDAsODQsMCwxMzIsMCwwLDkwLDUwLDAsMTAwLDg1LDAsMTAwLAorICAgIDg2LDAsMTMyLDAsMCw5MCw1MSwwLDcxLDEwMCw4NywwLDEwMCw4OCwwLDEzMiwKKyAgICAwLDAsMTAwLDg4LDAsMTMxLDIsMCw5MCw1MiwwLDcxLDEwMCw4OSwwLDEwMCwKKyAgICA5MCwwLDEzMiwwLDAsMTAwLDkwLDAsMTMxLDIsMCw5MCw1MywwLDEwMCw5MSwKKyAgICAwLDEwMCw1MywwLDEwMCw5MiwwLDEwMCw1MywwLDEwMCw5MywwLDEwMCw5NCwwLAorICAgIDEzMiwwLDIsOTAsNTQsMCwxMDEsNTUsMCwxMzEsMCwwLDkwLDU2LDAsMTAwLAorICAgIDUzLDAsMTAwLDk1LDAsMTAwLDUzLDAsMTAwLDk2LDAsMTAxLDU2LDAsMTAwLDk3LAorICAgIDAsMTAwLDk4LDAsMTMyLDEsMiw5MCw1NywwLDEwMCw1MywwLDEwMCw1MywwLAorICAgIDEwMCw5OSwwLDEwMCwxMDAsMCwxMzIsMiwwLDkwLDU4LDAsNzEsMTAwLDEwMSwwLAorICAgIDEwMCwxMDIsMCwxMzIsMCwwLDEwMCwxMDIsMCwxMzEsMiwwLDkwLDU5LDAsMTAwLAorICAgIDUzLDAsMTAwLDEwMywwLDEwMCwxMDQsMCwxMzIsMSwwLDkwLDYwLDAsNzEsMTAwLAorICAgIDEwNSwwLDEwMCwxMDYsMCwxMzIsMCwwLDEwMCwxMDYsMCwxMzEsMiwwLDkwLDYxLAorICAgIDAsNzEsMTAwLDEwNywwLDEwMCwxMDgsMCwxMzIsMCwwLDEwMCwxMDgsMCwxMzEsMiwKKyAgICAwLDkwLDYyLDAsNzEsMTAwLDEwOSwwLDEwMCwxMTAsMCwxMzIsMCwwLDEwMCwxMTAsCisgICAgMCwxMzEsMiwwLDkwLDYzLDAsNzEsMTAwLDExMSwwLDEwMCwxMTIsMCwxMzIsMCwKKyAgICAwLDEwMCwxMTIsMCwxMzEsMiwwLDkwLDY0LDAsNzEsMTAwLDExMywwLDEwMCwxMTQsCisgICAgMCwxMzIsMCwwLDEwMCwxMTQsMCwxMDEsNjQsMCwxMzEsMywwLDkwLDY1LDAsCisgICAgNzEsMTAwLDExNSwwLDEwMCwxMTYsMCwxMzIsMCwwLDEwMCwxMTYsMCwxMzEsMiwwLAorICAgIDkwLDY2LDAsNzEsMTAwLDExNywwLDEwMCwxMTgsMCwxMzIsMCwwLDEwMCwxMTgsMCwKKyAgICAxMDEsNjYsMCwxMDEsNjUsMCwxMzEsNCwwLDkwLDY3LDAsNzEsMTAwLDExOSwwLAorICAgIDEwMCwxMjAsMCwxMzIsMCwwLDEwMCwxMjAsMCwxMDEsNjYsMCwxMDEsNjQsMCwxMzEsCisgICAgNCwwLDkwLDY4LDAsMTAzLDAsMCw5MCw2OSwwLDcxLDEwMCwxMjEsMCwxMDAsCisgICAgMTIyLDAsMTMyLDAsMCwxMDAsMTIyLDAsMTMxLDIsMCw5MCw3MCwwLDcxLDEwMCwKKyAgICAxMjMsMCwxMDAsMTI0LDAsMTMyLDAsMCwxMDAsMTI0LDAsMTMxLDIsMCw5MCw3MSwKKyAgICAwLDcxLDEwMCwxMjUsMCwxMDAsMTI2LDAsMTMyLDAsMCwxMDAsMTI2LDAsMTMxLDIsCisgICAgMCw5MCw3MiwwLDcxLDEwMCwxMjcsMCwxMDAsMTI4LDAsMTMyLDAsMCwxMDAsMTI4LAorICAgIDAsMTMxLDIsMCw5MCw3MywwLDcxLDEwMCwxMjksMCwxMDAsMTMwLDAsMTMyLDAsCisgICAgMCwxMDAsMTMwLDAsMTMxLDIsMCw5MCw3NCwwLDcxLDEwMCwxMzEsMCwxMDAsMTMyLAorICAgIDAsMTMyLDAsMCwxMDAsMTMyLDAsMTMxLDIsMCw5MCw3NSwwLDEwMCwxMzMsMCwKKyAgICAxMDAsMTM0LDAsMTMyLDAsMCw5MCw3NiwwLDEwMCwxMzUsMCwxMDAsMTM2LDAsMTMyLAorICAgIDAsMCw5MCw3NywwLDEwMCw1MywwLDEwMCwxMzcsMCwxMDAsMTM4LDAsMTMyLDEsCisgICAgMCw5MCw3OCwwLDEwMCwxMzksMCwxMDAsMTQwLDAsMTMyLDAsMCw5MCw3OSwwLAorICAgIDEwMCwxNDEsMCw5MCw4MCwwLDEwMSw4MCwwLDEwMCwxNDIsMCwyMyw5MCw4MSwwLAorICAgIDEwMCwxNDMsMCwxMDAsMTQ0LDAsMTMyLDAsMCw5MCw4MiwwLDEwMCwxNDUsMCwxMDAsCisgICAgMTQ2LDAsMTMyLDAsMCw5MCw4MywwLDEwMCw1MywwLDEwMCw4MCwwLDEwMCwxNDcsCisgICAgMCwxMDAsMTQ4LDAsMTMyLDIsMCw5MCw4NCwwLDEwMCwxNDksMCwxMDAsMTUwLDAsCisgICAgMTMyLDAsMCw5MCw4NSwwLDEwMCwxNTEsMCwxMDAsMTUyLDAsMTMyLDAsMCw5MCwKKyAgICA4NiwwLDEwMCwxNTMsMCwxMDAsMTU0LDAsMTMyLDAsMCw5MCw4NywwLDEwMCw1MywKKyAgICAwLDEwMCw1MywwLDEwMiwwLDAsMTAwLDgwLDAsMTAwLDE1NSwwLDEwMCwxNTYsMCwKKyAgICAxMzIsNCwwLDkwLDg4LDAsMTAwLDE1NywwLDEwMCwxNTgsMCwxMzIsMCwwLDkwLAorICAgIDg5LDAsMTAwLDE1OSwwLDEwMCwxNjAsMCwxMzIsMCwwLDkwLDkwLDAsMTAwLDE2MSwKKyAgICAwLDEwMCwxNjIsMCwxMzIsMCwwLDkwLDkxLDAsMTAwLDUzLDAsODMsNDEsMTY0LAorICAgIDk3LDgzLDEsMCwwLDY3LDExMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAorICAgIDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDQ2LDEwLDEwLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDEwNSwxMTUsMzIsNzgsNzksODQsMzIsMTA5LDEwMSw5NywxMTAsMTE2LDMyLDExNiwxMTEsCisgICAgMzIsOTgsMTAxLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwxMDEsMTAwLDMzLDMyLDczLDExNiwzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwKKyAgICAxMDEsMTEwLDMyLDEwMCwxMDEsMTE1LDEwNSwxMDMsMTEwLDEwMSwxMDAsMzIsMTE1LDExNyw5OSwxMDQsCisgICAgMTAsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwzMiw5OSw5NywxMTAsMzIsOTgsMTAxLDMyLAorICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwxMTIsMTAxLDEwMCwzMiwxMDUsMTEwLDExNiwKKyAgICAxMTEsMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwKKyAgICAxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMzIsNjUsMTE1LDEwLDExNSwxMTcsOTksCisgICAgMTA0LDMyLDEwNSwxMTYsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDUsMTEwLDEwNiwxMDEsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLAorICAgIDk3LDExMCwxMDAsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMDUsCisgICAgMTEwLDMyLDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwxMCwxMTksMTExLDExNCwxMDcsNDYsCisgICAgMzIsNzksMTEwLDEwMSwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTcsMTE1LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsMTE3LDk4LDEwOCwxMDUsOTksNDUsMTAyLDk3LDk5LDEwNSwxMTAsMTAzLDMyLDExOCwKKyAgICAxMDEsMTE0LDExNSwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwyMTgsMywxMTksMTA1LDExMCwyMTgsNiw5OSwKKyAgICAxMjEsMTAzLDExOSwxMDUsMTEwLDIxOCw2LDEwMCw5NywxMTQsMTE5LDEwNSwxMTAsOTksMCwwLAorICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsCisgICAgMTE2LDMsMCwxMzEsMSwwLDExNCwzMywwLDEwMCwxLDAsMTAwLDIsMCwxMzIsCisgICAgMCwwLDEyNSwwLDAsMTEwLDEyLDAsMTAwLDMsMCwxMDAsMiwwLDEzMiwwLAorICAgIDAsMTI1LDAsMCwxMjQsMCwwLDgzLDQxLDQsNzgsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw4MywwLDAsMCwKKyAgICAxMTUsMTMsMCwwLDAsMTAwLDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDYsCisgICAgMCw4Myw0MSwyLDEyMiw1Myw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDEwMiwxMDUsCisgICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiwKKyAgICA5OSwxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LDk3LDExNSwxMDEsNDUsMTA1LDExMCwxMTUsCisgICAgMTAxLDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsMTIxLDQ2LDExNSwxMiwwLDAsMCwKKyAgICA4MCw4OSw4NCw3Miw3OSw3OCw2Nyw2NSw4Myw2OSw3OSw3NSw0MSwyLDIxOCwzLAorICAgIDk1LDExMSwxMTUsOTAsNywxMDEsMTEwLDExOCwxMDUsMTE0LDExMSwxMTAsMTY5LDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMjUwLDI5LDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCisgICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKKyAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDIxOCwxMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsCisgICAgOTksOTcsMTE1LDEwMSwzMCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLAorICAgIDM3LDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsCisgICAgMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsMTAxLDEwOCw5NywKKyAgICAxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSw0LDAsMCwwLAorICAgIDEwMCwxLDAsODMsNDEsMiwxMjIsNTMsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwKKyAgICAxMDEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwKKyAgICAxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNiwwLDAsMCwzNCwwLDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDIsNDEsNCwyMTgsMywxMTUsMTIxLDExNSwyMTgsOCwKKyAgICAxMTIsMTA4LDk3LDExNiwxMDIsMTExLDExNCwxMDksMjE4LDEwLDExNSwxMTYsOTcsMTE0LDExNiwxMTUsCisgICAgMTE5LDEwNSwxMTYsMTA0LDIxOCwyNyw5NSw2Nyw2NSw4Myw2OSw5NSw3Myw3OCw4Myw2OSwKKyAgICA3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSw4MCw3Niw2NSw4NCw3MCw3OSw4Miw3NywKKyAgICA4Myw0MSwxLDExNCw2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsCisgICAgMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwyOCwwLDAsMCwxMTUsOCwwLAorICAgIDAsMCwwLDEsMTgsMSwxNSw0LDEyLDMsMTE0LDExLDAsMCwwLDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsCisgICAgMSwwLDEwMCwxLDAsNjQsMTA2LDEsMCwxMDAsMiwwLDEwMCwzLDAsMTMxLAorICAgIDIsMCw4Myw0MSw0LDEyMiw0Miw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw5NywKKyAgICAzMiw1MSw1MCw0NSw5OCwxMDUsMTE2LDMyLDEwNSwxMTAsMTE2LDEwMSwxMDMsMTAxLDExNCwzMiwKKyAgICAxMTYsMTExLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywxMTAsCisgICAgNDYsMTA4LDMsMCwwLDAsMjU1LDEyNywyNTUsMTI3LDMsMCwyMzMsNCwwLDAsCisgICAgMCwyMTgsNiwxMDgsMTA1LDExNiwxMTYsMTA4LDEwMSw0MSwyLDIxOCwzLDEwNSwxMTAsMTE2LAorICAgIDIxOCw4LDExNiwxMTEsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDEsMjE4LDEsMTIwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw3LAorICAgIDk1LDExOSw5NSwxMDgsMTExLDExMCwxMDMsNDAsMCwwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwyLDExNCwxNywwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsCisgICAgMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsCisgICAgODMsNDEsMiwxMjIsNDcsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsMzIsNTIsMzIsOTgsCisgICAgMTIxLDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLAorICAgIDExMCwxMDAsMTA1LDk3LDExMCwzMiwxMTYsMTExLDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNiwxMDEsCisgICAgMTAzLDEwMSwxMTQsNDYsMTE0LDEzLDAsMCwwLDQxLDIsMTE0LDE0LDAsMCwwLAorICAgIDIxOCwxMCwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDEsOTAsOSwKKyAgICAxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDcsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLAorICAgIDEwMyw0NSwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE0LDE5LDAsMCwKKyAgICAwLDk5LDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwKKyAgICAwLDAsNzEsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLDAsMTA2LDEsCisgICAgMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCwxMjQsMCwwLDY4LDEzMSwxLAorICAgIDAsMTMxLDEsMCw4Myw0MSwzLDEyMiwzMSw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsCisgICAgMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsCisgICAgNDYsMTA2LDExMSwxMDUsMTEwLDQwLDQxLDQ2LDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDQsMCwwLDAsODMsMCwwLDAsMTE1LDM3LDAsCisgICAgMCwwLDEwMywwLDAsMTI0LDAsMCw5MywyNywwLDEyNSwxLDAsMTI0LDEsCisgICAgMCwxMTQsNiwwLDEyNCwxLDAsMTA2LDAsMCwxMTYsMSwwLDEzMSwxLDAsCisgICAgMTQ1LDIsMCwxMTMsNiwwLDgzLDExNCw0LDAsMCwwLDQxLDIsMjE4LDYsCisgICAgMTE0LDExNSwxMTYsMTE0LDEwNSwxMTIsMjE4LDE1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLAorICAgIDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsNDEsMiwyMTgsMiw0Niw0OCwyMTgsNCwxMTIsCisgICAgOTcsMTE0LDExNiwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyNTAsMTAsNjAsMTA4LDEwNSwxMTUsMTE2LDk5LDExMSwxMDksMTEyLDYyLDUyLDAsCisgICAgMCwwLDExNSwyLDAsMCwwLDksMSwxMjIsMzAsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA2LDExMSwxMDUsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwKKyAgICAxMDgsMTA1LDExNSwxMTYsOTksMTExLDEwOSwxMTIsNjIsNDEsMiwyMTgsOCwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMTUsMTAxLDExMiwyMTgsNCwxMDYsMTExLDEwNSwxMTAsNDEsMSwyMTgsMTAsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTEyLDk3LDExNCwxMTYsMTE1LDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDYsMTExLDEwNSwxMTAsNTAsMCwwLDAsMTE1LDQsMCwwLDAsMCwyLDE1LAorICAgIDEsMTE0LDI4LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LAorICAgIDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNCwwLDAsMCwKKyAgICAxMTYsMCwwLDExNiwxLDAsMTMxLDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LAorICAgIDUyLDAsMTI0LDAsMCwxMDYsMiwwLDExNiwzLDAsMTMxLDEsMCw5MiwzLAorICAgIDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDEsMCwxMjQsMywwLAorICAgIDEwMiwyLDAsODMsMTIwLDY5LDAsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsCisgICAgNjgsOTMsNTUsMCwxMjUsNCwwLDEyNCw0LDAsMTE2LDEsMCwxMDcsNiwwLAorICAgIDExNCw2NSwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsNCwwLDEwMCwyLDAsMTAwLAorICAgIDEsMCwxMzEsMSwxLDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LDEsCisgICAgMCwxMjQsMywwLDEwMiwyLDAsODMsMTEzLDY1LDAsODcsMTAwLDMsMCwxMjQsCisgICAgMCwwLDEwMiwyLDAsODMsNDEsNCwxMjIsMzIsODIsMTAxLDExMiwxMDgsOTcsOTksCisgICAgMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsCisgICAgMTA0LDQ2LDExNSwxMTIsMTA4LDEwNSwxMTYsNDAsNDEsNDYsMjMzLDEsMCwwLDAsOTAsCisgICAgOCwxMDksOTcsMTIwLDExNSwxMTIsMTA4LDEwNSwxMTYsMjE4LDAsNDEsNiwyMTgsMywxMDgsCisgICAgMTAxLDExMCwxMTQsMjEsMCwwLDAsMjE4LDEwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LAorICAgIDEwNSwxMTEsMTEwLDExNCwyNSwwLDAsMCwyMTgsOCwxMTQsMTAxLDExOCwxMDEsMTE0LDExNSwKKyAgICAxMDEsMTAwLDIxOCw2LDExNCwxMTUsMTEyLDEwOCwxMDUsMTE2LDQxLDUsMjE4LDQsMTEyLDk3LAorICAgIDExNiwxMDQsOTAsNSwxMDIsMTE0LDExMSwxMTAsMTE2LDIxOCwxLDk1LDIxOCw0LDExNiw5NywKKyAgICAxMDUsMTA4LDExNCwxNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwKKyAgICAxMDgsMTA1LDExNiw1NiwwLDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE4LDEsCisgICAgMjQsMSwxMCwxLDE5LDEsMTIsMSwyNywxLDE0LDEsMTE0LDM4LDAsMCwKKyAgICAwLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwwLDAsMTA2LDEsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsODMsNDEsMSwxMjIsMTI2LDgzLDExNiw5NywxMTYsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgNzcsOTcsMTAwLDEwMSwzMiw5NywzMiwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDEwMSwzMiwKKyAgICAxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMDksOTcsMTA3LDEwMSwKKyAgICAzMiwxMDUsMTE2LDMyLDEwMSw5NywxMTUsMTA1LDEwMSwxMTQsMzIsMTE2LDExMSwzMiwxMTEsMTE4LAorICAgIDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLDEwNSwxMTAsMzIsMTAxLDEyMCwxMTIsMTAxLDExNCwxMDUsCisgICAgMTA5LDEwMSwxMTAsMTE2LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLAorICAgIDk5LDk3LDk5LDEwNCwxMDEsMzIsMTE1LDExNiw5NywxMTYsMzIsMTE0LDEwMSwxMTUsMTE3LDEwOCwKKyAgICAxMTYsMTE1LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDQxLDIsMTE0LDMsMCwwLAorICAgIDAsOTAsNCwxMTUsMTE2LDk3LDExNiw0MSwxLDExNCwzNSwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsNjgsMCwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCw3LDExNCwzOSwwLDAsMCw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMywwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNTgsCisgICAgMCwwLDAsMTIxLDE2LDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LAorICAgIDIsMCw4NywxMTAsMjIsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDQwLDAsCisgICAgMSwxLDEsMTAwLDEsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTA2LAorICAgIDIsMCwxMDAsMiwwLDY0LDEyNCwxLDAsMTA3LDIsMCw4Myw0MSwzLDEyMiwKKyAgICA0OSw4NCwxMDEsMTE1LDExNiwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAorICAgIDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTYsMTIxLDExMiwKKyAgICAxMDEsNDYsNzAsMTA1LDAsMjQwLDAsMCw0MSwzLDExNCwzOSwwLDAsMCwyMTgsCisgICAgNyw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsMjE4LDcsMTE1LDExNiw5NSwxMDksMTExLDEwMCwKKyAgICAxMDEsNDEsMywxMTQsMzUsMCwwLDAsMjE4LDQsMTA5LDExMSwxMDAsMTAxLDkwLDksCisgICAgMTE1LDExNiw5NywxMTYsOTUsMTA1LDExMCwxMDIsMTExLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxOCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsNzgsMCwwLDAsCisgICAgMTE1LDEwLDAsMCwwLDAsMiwzLDEsMTYsMSwxMywxLDksMSwxMTQsCisgICAgNDMsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAogICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNywzMSwwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsNDYsMTA1LDAsMTI4LDAsMCw0MCwxLDAsMCwwLDExNywxOCwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSwKLSAgICA5NSwxMTYsMTIxLDExMiwxMDEsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMiwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwKLSAgICAxMDgsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywxMiwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwzNCwwLDAsMCwxMjQsMCwwLDExNSwyMSwwLDExNiwwLDAsMTA2LAotICAgIDEsMCwxMzEsMCwwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEyNCwwLAotICAgIDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQwLDIsMCwwLDAsMTE3LDMwLDAsCi0gICAgMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMCwxMDUsMTE0LDQ2LAotICAgIDEwNSwwLDY0LDAsMCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDk1LAotICAgIDExMSwxMTUsMTE3LDYsMCwwLDAsMTAzLDEwMSwxMTYsOTksMTE5LDEwMCwxMTcsMTgsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsCi0gICAgMTE2LDEyMSwxMTIsMTAxLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTQsMCwKLSAgICAwLDAsMTE1LDYsMCwwLDAsMCwyLDYsMSwxNSwxLDExNywxMSwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDEwNSwxODIsMSwKLSAgICAwLDAsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTcsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE5MiwwLDAsMCwxMDAsMSwwLDEwNiwKLSAgICAwLDAsMTI0LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwKLSAgICAwLDEyNSwzLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTE2LDIsMCwKLSAgICAxMDYsNCwwLDExNiwyLDAsMTA2LDUsMCw2NiwxMTYsMiwwLDEwNiw2LDAsCi0gICAgNjYsMTI0LDIsMCwxMDAsMiwwLDY0LDEzMSwzLDAsMTI1LDQsMCwxMjEsNjAsCi0gICAgMCwxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsMywwLDEzMSwyLDAsCi0gICAgMTQzLDIwLDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw5LDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEsODcsMTAwLDQsMCw4MSw4OCwxMTYsMiwwLDEwNiwxMCwwLDEyNCwKLSAgICAzLDAsMTI0LDAsMCwxMzEsMiwwLDEsODcsMTEwLDU5LDAsNCwxMTYsMTEsCi0gICAgMCwxMDcsMTAsMCwxMTQsMTg3LDAsMSwxLDEsMTIxLDE3LDAsMTE2LDIsMCwKLSAgICAxMDYsMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsMTgsMCw0LDExNiwKLSAgICAxMSwwLDEwNywxMCwwLDExNCwxNzksMCwxLDEsMSw4OSwxMTAsMSwwLDg4LAotICAgIDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLDQwLDUsMCwwLAotICAgIDAsMTE3LDE2MiwwLDAsMCw2NiwxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LAotICAgIDEwNSwxMTYsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiw5NywxMTYsMTExLDEwOSwxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsCi0gICAgMzIsMzIsMzIsNjYsMTAxLDMyLDExMiwxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsCi0gICAgMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksCi0gICAgMTIwLDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsCi0gICAgMTEwLDk5LDExNywxMTQsMTE0LDEwMSwxMTAsMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywKLSAgICAzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwKLSAgICAxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LAotICAgIDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCw0NiwxMTcsNSwwLDAsMCwxMjMsMTI1LDQ2LAotICAgIDEyMywxMjUsMTA1LDE4MiwxLDAsMCwxMTcsMiwwLDAsMCwxMTksOTgsNzgsNDAsCi0gICAgMTMsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsCi0gICAgMiwwLDAsMCwxMDUsMTAwLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsCi0gICAgMCwwLDAsMTExLDExMiwxMDEsMTEwLDExNyw2LDAsMCwwLDc5LDk1LDY5LDg4LAotICAgIDY3LDc2LDExNyw3LDAsMCwwLDc5LDk1LDY3LDgyLDY5LDY1LDg0LDExNyw4LAotICAgIDAsMCwwLDc5LDk1LDg3LDgyLDc5LDc4LDc2LDg5LDExNywzLDAsMCwwLAotICAgIDk1LDEwNSwxMTEsMTE3LDYsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzMsNzksMTE3LDUsCi0gICAgMCwwLDAsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTcsNywwLDAsMCwxMTQsMTAxLDExMiwKLSAgICAxMDgsOTcsOTksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsNiwwLDAsMCwxMTcsMTEwLDEwOCwxMDUsMTEwLDEwNyw0MCw2LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywKLSAgICAxMTYsOTcsMTE3LDQsMCwwLDAsMTA5LDExMSwxMDAsMTAxLDExNyw4LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNiwxMDksMTEyLDExNywyLDAsMCwwLDEwMiwxMDAsMTE3LAotICAgIDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDEzLDAsMCwwLDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsCi0gICAgOTcsMTE2LDExMSwxMDksMTA1LDk5LDEyMSwwLDAsMCwxMTUsMjYsMCwwLDAsMCwKLSAgICA1LDI0LDEsOSwxLDMzLDEsMywzLDIxLDEsMTksMSwyMCwxLDEzLAotICAgIDEsMywxLDE3LDEsMTMsMSw1LDEsMTE3LDEzLDAsMCwwLDk1LDExOSwKLSAgICAxMTQsMTA1LDExNiwxMDEsOTUsOTcsMTE2LDExMSwxMDksMTA1LDk5LDk5LDIsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDcsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDk1LDAsMCwwLDEyMCw2OSwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEwMCw0LDAsMTAzLDQsMCw2OCw5Myw0OSwwLDEyNSwyLDAsMTE2LDAsCi0gICAgMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsMTksMCwxMTYsMSwwLAotICAgIDEyNCwwLDAsMTI0LDIsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsCi0gICAgMiwwLDEzMSwzLDAsMSwxMTMsMTksMCwxMTMsMTksMCw4NywxMjQsMCwwLAotICAgIDEwNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwxLAotICAgIDEwMCw1LDAsODMsNDAsNiwwLDAsMCwxMTcsNDcsMCwwLDAsODMsMTA1LAotICAgIDEwOSwxMTIsMTA4LDEwMSwzMiwxMTUsMTE3LDk4LDExNSwxMTYsMTA1LDExNiwxMTcsMTE2LDEwMSwzMiwKLSAgICAxMDIsMTExLDExNCwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTExLDExMSwxMDgsMTE1LDQ2LDExNywxMTIsCi0gICAgMTAwLDk3LDExNiwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDYsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSwxMDAsMTExLDk5LDk1LDk1LDc4LDQwLDUsMCwwLDAsMTE3LDcsMCwwLAotICAgIDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsNywwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NywxMTYsMTE2LDExNCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwxMTcsNiwwLAotICAgIDAsMCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDQwLDMsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTEwLDEwMSwxMTksMTE3LDMsMCwwLDAsMTExLDEwOCwxMDAsMTE3LDcsMCwKLSAgICAwLDAsMTE0LDEwMSwxMTIsMTA4LDk3LDk5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDE0MywKLSAgICAwLDAsMCwxMTUsOCwwLDAsMCwwLDIsMjUsMSwxNSwxLDMyLDEsCi0gICAgMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsOTksMSwwLDAsMCwwLAotICAgIDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgMTYsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTI0LDAsMCwKLSAgICAxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDc1LDAsMCwwLDY3LDExNCwKLSAgICAxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTAxLDExMCwxMTYsMTAxLDExNCwxMDEsCi0gICAgMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTYsMTIxLDExMiwxMDEsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSw0MCwKLSAgICAxLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMCwxMDEsCi0gICAgMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE1NCwwLDAsMCwxMTUsMiwwLDAsCi0gICAgMCwwLDYsMTE3LDEwLDAsMCwwLDExMCwxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw4MywKLSAgICA0MCwyLDAsMCwwLDExNywxNCwwLDAsMCw5NSw2OCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw3OCw0MCwzLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsCi0gICAgOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLAotICAgIDk1LDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDE3MSwwLAotICAgIDAsMCwxMTUsMiwwLDAsMCwxNiwxLDExNywxNCwwLDAsMCw5NSw2OCwKLSAgICAxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwKLSAgICAwLDExNSw4NiwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLAorICAgIDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDEsMiwxMjIsMzEsODIsCisgICAgMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsCisgICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwNSwwLAorICAgIDEyOCwwLDAsNDEsMSwxMTQsNDMsMCwwLDAsNDEsMSwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDEyLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDg3LDAsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMTQsNDQsMCwwLDAsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMzQsMCwwLDAsMTI0LDAsMCwxMTUsMjEsMCwxMTYsMCwKKyAgICAwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMCwwLDExMCwwLDAsMTE2LDIsMCwKKyAgICAxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MSwyLDEyMiwzMCw4MiwxMDEsCisgICAgMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDAsMTA1LDExNCw0NiwxMDUsMCw2NCwwLAorICAgIDAsNDEsMywxMTQsMywwLDAsMCwyMTgsNiwxMDMsMTAxLDExNiw5OSwxMTksMTAwLAorICAgIDExNCw0MywwLDAsMCw0MSwxLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCw5MiwwLDAsMCwxMTUsNiwwLDAsCisgICAgMCwwLDIsNiwxLDE1LDEsMTE0LDQ2LDAsMCwwLDEwNSwxODIsMSwwLAorICAgIDAsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTcsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDE5MiwwLDAsMCwxMDAsMSwwLDEwNiwwLAorICAgIDAsMTI0LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwwLAorICAgIDEyNSwzLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTE2LDIsMCwxMDYsCisgICAgNCwwLDExNiwyLDAsMTA2LDUsMCw2NiwxMTYsMiwwLDEwNiw2LDAsNjYsCisgICAgMTI0LDIsMCwxMDAsMiwwLDY0LDEzMSwzLDAsMTI1LDQsMCwxMjEsNjAsMCwKKyAgICAxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsMywwLDEzMSwyLDAsMTQzLAorICAgIDIwLDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw5LDAsMTI0LDEsMCwxMzEsMSwKKyAgICAwLDEsODcsMTAwLDQsMCw4MSw4OCwxMTYsMiwwLDEwNiwxMCwwLDEyNCwzLAorICAgIDAsMTI0LDAsMCwxMzEsMiwwLDEsODcsMTEwLDU5LDAsNCwxMTYsMTEsMCwKKyAgICAxMDcsMTAsMCwxMTQsMTg3LDAsMSwxLDEsMTIxLDE3LDAsMTE2LDIsMCwxMDYsCisgICAgMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsMTgsMCw0LDExNiwxMSwKKyAgICAwLDEwNywxMCwwLDExNCwxNzksMCwxLDEsMSw4OSwxMTAsMSwwLDg4LDEzMCwKKyAgICAwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLDQxLDUsMTIyLDE2Miw2NiwKKyAgICAxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LDExNiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsCisgICAgMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LDEwNSwxMTYsMTAxLDMyLDEwMCw5NywxMTYsCisgICAgOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiw5NywxMTYsMTExLDEwOSwKKyAgICAxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsMzIsMzIsMzIsNjYsMTAxLDMyLDExMiwKKyAgICAxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwKKyAgICAxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksMTIwLDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsCisgICAgMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsMTEwLDk5LDExNywxMTQsMTE0LDEwMSwxMTAsCisgICAgMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLAorICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTAyLAorICAgIDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCwKKyAgICA0NiwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsMTA1LDE4MiwxLDAsMCw5MCwyLDExOSwKKyAgICA5OCw3OCw0MSwxMywyMTgsNiwxMDIsMTExLDExNCwxMDksOTcsMTE2LDIxOCwyLDEwNSwxMDAsCisgICAgMTE0LDMsMCwwLDAsOTAsNCwxMTEsMTEyLDEwMSwxMTAsOTAsNiw3OSw5NSw2OSwKKyAgICA4OCw2Nyw3Niw5MCw3LDc5LDk1LDY3LDgyLDY5LDY1LDg0LDkwLDgsNzksOTUsCisgICAgODcsODIsNzksNzgsNzYsODksMjE4LDMsOTUsMTA1LDExMSwyMTgsNiw3MCwxMDUsMTA4LAorICAgIDEwMSw3Myw3OSwyMTgsNSwxMTksMTE0LDEwNSwxMTYsMTAxLDIxOCw3LDExNCwxMDEsMTEyLDEwOCwKKyAgICA5Nyw5OSwxMDEsMTE0LDQwLDAsMCwwLDkwLDYsMTE3LDExMCwxMDgsMTA1LDExMCwxMDcsCisgICAgNDEsNiwxMTQsMzUsMCwwLDAsMjE4LDQsMTAwLDk3LDExNiw5NywxMTQsNDIsMCwKKyAgICAwLDAsOTAsOCwxMTIsOTcsMTE2LDEwNCw5NSwxMTYsMTA5LDExMiw5MCwyLDEwMiwxMDAsCisgICAgMjE4LDQsMTAyLDEwNSwxMDgsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCwxMyw5NSwxMTksMTE0LDEwNSwxMTYsMTAxLDk1LDk3LDExNiwKKyAgICAxMTEsMTA5LDEwNSw5OSw5OSwwLDAsMCwxMTUsMjYsMCwwLDAsMCw1LDI0LAorICAgIDEsOSwxLDMzLDEsMywzLDIxLDEsMTksMSwyMCwxLDEzLDEsMywKKyAgICAxLDE3LDEsMTMsMSw1LDEsMTE0LDU1LDAsMCwwLDk5LDIsMCwwLAorICAgIDAsMCwwLDAsMCwzLDAsMCwwLDcsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDk1LDAsMCwwLDEyMCw2OSwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsCisgICAgMywwLDEwMCw0LDAsMTAzLDQsMCw2OCw5Myw0OSwwLDEyNSwyLDAsMTE2LAorICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsMTksMCwxMTYsMSwKKyAgICAwLDEyNCwwLDAsMTI0LDIsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwKKyAgICAxMzEsMiwwLDEzMSwzLDAsMSwxMTMsMTksMCwxMTMsMTksMCw4NywxMjQsMCwKKyAgICAwLDEwNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwKKyAgICAxLDEwMCw1LDAsODMsNDEsNiwxMjIsNDcsODMsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiwKKyAgICAxMTUsMTE3LDk4LDExNSwxMTYsMTA1LDExNiwxMTcsMTE2LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMDIsCisgICAgMTE3LDExMCw5OSwxMTYsMTExLDExMSwxMDgsMTE1LDQ2LDExNywxMTIsMTAwLDk3LDExNiwxMDEsOTUsCisgICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDYsMjE4LDEwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk1LDk1LDIxOCw4LDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDIxOCwxMiwKKyAgICA5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwyMTgsNyw5NSw5NSwKKyAgICAxMDAsMTExLDk5LDk1LDk1LDc4LDQxLDUsMjE4LDcsMTA0LDk3LDExNSw5NywxMTYsMTE2LAorICAgIDExNCwyMTgsNywxMTUsMTAxLDExNiw5NywxMTYsMTE2LDExNCwyMTgsNywxMDMsMTAxLDExNiw5NywKKyAgICAxMTYsMTE2LDExNCwyMTgsOCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwyMTgsNiwxMTcsCisgICAgMTEyLDEwMCw5NywxMTYsMTAxLDQxLDMsOTAsMywxMTAsMTAxLDExOSw5MCwzLDExMSwxMDgsCisgICAgMTAwLDExNCw1MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsNSw5NSwxMTksMTE0LDk3LDExMiwxMjEsMCwwLDAsCisgICAgMTE1LDgsMCwwLDAsMCwyLDI1LDEsMTUsMSwzMiwxLDExNCw2NSwwLAorICAgIDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDExNiwKKyAgICAxLDAsMTMxLDEsMCwxMjQsMCwwLDEzMSwxLDAsODMsNDEsMSw3OCw0MSwKKyAgICAyLDIxOCw0LDExNiwxMjEsMTEyLDEwMSwxMTQsNywwLDAsMCw0MSwxLDIxOCw0LAorICAgIDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxMSw5NSwxMTAsMTAxLDExOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMjksMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNCw2OCwwLDAsMCwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSw1OCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwKICAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwKICAgICAzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAogICAgIDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwKLSAgICAxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLAotICAgIDExLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLDAsODMsNDAsMTMsMCwwLAotICAgIDAsMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LAotICAgIDEwNywxMTcsMTY5LDAsMCwwLDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwxMTUsMTA1LDExOCwKLSAgICAxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk3LAotICAgIDk4LDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDMyLDEwMCwxMDEsCi0gICAgOTcsMTAwLDEwOCwxMTEsOTksMTA3LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLAotICAgIDQ2LDMyLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMzIsNDksMzIsMTE2LDExNCwxMjEsMTA1LDExMCwKLSAgICAxMDMsMzIsMTE2LDExMSwzMiwxMTYsOTcsMTA3LDEwMSwzMiwxMDgsMTExLDk5LDEwNywxMTUsMzIsCi0gICAgNjUsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDY2LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwKLSAgICAxMTQsMTAxLDk3LDEwMCwzMiw1MCwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTExLAotICAgIDEwLDMyLDMyLDMyLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiwKLSAgICA2NiwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNjUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKLSAgICAwLDAsMTI0LDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLAotICAgIDAsMTI0LDAsMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDQsMCwKLSAgICAxMDAsMCwwLDEyNCwwLDAsOTUsNiwwLDEwMCwxLDAsMTI0LDAsMCw5NSwKLSAgICA3LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDgsMCwxMDAsMCwwLDgzLDQwLAotICAgIDIsMCwwLDAsNzgsMTA1LDAsMCwwLDAsNDAsOSwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNywxMywwLDAsMCwKLSAgICA5NywxMDgsMTA4LDExMSw5OSw5NywxMTYsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNyw0LDAsCi0gICAgMCwwLDEwOCwxMTEsOTksMTA3LDExNyw2LDAsMCwwLDExOSw5NywxMDcsMTAxLDExNywKLSAgICAxMTIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsNzgsCi0gICAgMTExLDExMCwxMDEsMTE3LDUsMCwwLDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsNSwwLAotICAgIDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsMTE3LDcsMCwwLDAsMTE5LDk3LDEwNSwxMTYsCi0gICAgMTAxLDExNCwxMTUsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsMTgxLDAsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwKLSAgICAxNSwxLDksMSw5LDEsOSwxLDExNywyMCwwLDAsMCw5NSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LAotICAgIDk1LDk5LDEsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDg3LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDEyNSwyLDAsCi0gICAgMTIwLDU5LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsCi0gICAgMywwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw1NSwwLDEwMCwxLAotICAgIDAsODMsMTI0LDMsMCwxMDYsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMjQsMSwKLSAgICAwLDEwNywyLDAsMTE0LDI0LDAsMTAwLDIsMCw4MywxMTMsMjQsMCwxMDAsMCwKLSAgICAwLDgzLDQwLDMsMCwwLDAsNzgsNzAsODQsNDAsOCwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNyw5LDAsMCwwLAotICAgIDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsMTAxLDExMCwxMTYsMTE3LDUsMCwwLDAsMTExLDExOSwKLSAgICAxMTAsMTAxLDExNCwxMTcsMTIsMCwwLDAsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwKLSAgICAxMDMsOTUsMTExLDExMCwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsCi0gICAgNCwwLDAsMCw4NCwxMTQsMTE3LDEwMSw0MCw0LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMiwwLDAsMCwxMDksMTAxLDExNywzLDAsCi0gICAgMCwwLDExNiwxMDUsMTAwLDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDEwNCwKLSAgICA5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMTg5LDAsMCwwLDExNSwKLSAgICAxOCwwLDAsMCwwLDIsMTIsMSw5LDEsMywxLDE1LDEsMTIsMSwKLSAgICA0LDEsOSwxLDEyLDEsMTE3LDI0LDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDE3LDAsMCwwLDY3LDAsMCwwLDExNSwyMTQsMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDExNiwyLDAsMTI0LAotICAgIDEsMCw2MCwxMjIsMTc3LDAsMTIwLDE3MCwwLDEyNCwwLDAsMTA2LDMsMCwxNDMsCi0gICAgMTMwLDAsMSwxMjQsMCwwLDEwNiw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNSwKLSAgICA2OCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMSwwLDEwNywyLDAsMTE0LDk2LAotICAgIDAsMTI0LDEsMCwxMjQsMCwwLDk1LDUsMCwxMjQsMCwwLDQsMTA2LDQsCi0gICAgMCwxMDAsMiwwLDU1LDIsOTUsNCwwLDEwMCw1LDAsODMsMTI0LDAsMCwKLSAgICAxMDYsNywwLDEzMSwwLDAsMTE0LDEyNywwLDExNiw4LDAsMTAwLDMsMCwxMjQsCi0gICAgMCwwLDIyLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LAotICAgIDksMCwxMDYsMTAsMCwxMDAsNiwwLDEzMSwxLDAsMTE0LDE2MywwLDEyNCwwLAotICAgIDAsNCwxMDYsMTIsMCwxMDAsMiwwLDU1LDIsOTUsMTIsMCwxMTAsMCwwLAotICAgIDg3LDEwMCw0LDAsODEsODgsMTI0LDAsMCwxMDYsOSwwLDEwNiwxMCwwLDEzMSwKLSAgICAwLDAsMSwxMjQsMCwwLDEwNiw5LDAsMTA2LDEzLDAsMTMxLDAsMCwxLAotICAgIDExMywyOCwwLDg3LDEwMCw0LDAsMTE2LDIsMCwxMjQsMSwwLDYxLDg4LDEwMCwKLSAgICA0LDAsODMsNDAsNywwLDAsMCwxMTcsMTg1LDAsMCwwLDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsNDYsMzIsMzIsCi0gICAgNzMsMTAyLDMyLDk3LDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsMTAwLAotICAgIDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNiwxMDEsOTksCi0gICAgMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMzIsOTUsCi0gICAgNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwKLSAgICAzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDc5LDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwxMTQsMTE3LDEwMSwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDAsMCwwLDAsMTA1LDEsMCwwLDAsCi0gICAgMTE3LDIzLDAsMCwwLDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDMyLDEwMCwxMDEsCi0gICAgMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMzcsMTE0LDc4LDg0LDcwLDQwLAotICAgIDE0LDAsMCwwLDExNyw3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsCi0gICAgMTE3LDksMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTA1LDEwMCwxMDEsMTEwLDExNiwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwxMTcsCi0gICAgNCwwLDAsMCwxMDgsMTExLDk5LDEwNywxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LAotICAgIDExMCwxMTYsMTE3LDUsMCwwLDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMTIsMCwwLDAsMTA0LDk3LDExNSw5NSwxMDAsMTAxLAotICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNywxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwKLSAgICAxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTE5LDk3LAotICAgIDEwNywxMDEsMTE3LDExMiwxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNyw3LDAsMCwwLDExOSwKLSAgICA5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywKLSAgICAxMTUsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDExNywzLDAsMCwwLDExNiwxMDUsMTAwLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwKLSAgICAyMDEsMCwwLDAsMTE1LDMyLDAsMCwwLDAsNiwxMiwxLDEwLDEsMywKLSAgICAxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LDEsNCwxLDEyLDEsMTksCi0gICAgMSwxOCwxLDI0LDIsMTMsMSwyMCwyLDExNywxOSwwLDAsMCw5NSw3NywKKyAgICAxMDAsOCwwLDgzLDQxLDksMjE4LDEzLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLAorICAgIDEwMSwxMDgsMTExLDk3LDEwMCwxMjIsNjMsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE1LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiw5OSwxMDgsMTAxLDk3LAorICAgIDExMCw0NSwxMTcsMTEyLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDQwLDQxLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLAorICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLAorICAgIDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDAsMCw4Myw0MSwxLDc4LAorICAgIDQxLDEsMjE4LDUsOTUsMTEwLDk3LDEwOSwxMDEsNDEsMiwyMTgsNCwxMTUsMTAxLDEwOCwKKyAgICAxMDIsMTE0LDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxNDEsCisgICAgMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMiw5NSw3Nyw5NywxMTAsCisgICAgOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMTYsMSwwLDEwNiwyLDAsMTA3LDYsMCwxMjQsMCwwLDk1LDMsCisgICAgMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNCwxMTQsNzAsMCwwLDAsMTE0LAorICAgIDcsMCwwLDAsMjE4LDcsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDIxOCwxMCw5NSwKKyAgICAxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsNDEsMSwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDksOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwxNDQsMCwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwxLDEyMiwyMyw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsCisgICAgMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMiwwLDAsMCw3MSwKKyAgICAwLDAsMCwxMTUsODAsMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEwMCwyLAorICAgIDAsMTMyLDAsMCwxMjQsMSwwLDY4LDEzMSwxLDAsMTMxLDEsMCwxMTQsNzYsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTIsMTE0LDc2LDAsMTIxLDE3LDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCw2MSw4NywxMTMsNzYsMCw0LAorICAgIDExNiw1LDAsMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsODksMTEzLDc2LDAsCisgICAgODgsMTEwLDAsMCwxMDAsMCwwLDgzLDQxLDMsNzgsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwxMTUsMCwwLDAsCisgICAgMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwxMjUsMSwwLDEyNCwxLAorICAgIDAsMTAwLDAsMCwxMDcsOSwwLDg2LDEsMTEzLDMsMCwxMDAsMCwwLDgzLAorICAgIDQxLDEsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsMjE4LAorICAgIDMsOTcsMTE0LDEwMywxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyNTAsOSw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTQ4LDAsCisgICAgMCwwLDExNSwyLDAsMCwwLDYsMCwxMjIsNDEsOTUsNzcsOTcsMTEwLDk3LAorICAgIDEwMywxMDEsODIsMTAxLDEwOCwxMTEsOTcsMTAwLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSwKKyAgICA5NSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLAorICAgIDEyMCwxMTIsMTE0LDYyLDQxLDYsMjE4LDMsOTcsMTEwLDEyMSwxMTQsNzQsMCwwLDAsCisgICAgMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw3MCwwLDAsMCwyMTgsCisgICAgOCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCw0MSwyLDExNCw3MSwwLDAsMCwKKyAgICAyMTgsNCw5NywxMTQsMTAzLDExNSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsOCw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsMTQ3LAorICAgIDAsMCwwLDExNSwxMCwwLDAsMCwwLDEsMzUsMSwzLDEsMTcsMSwKKyAgICAxMywxLDEyMiwyMiw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywKKyAgICAxMDAsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDcsMTE0LDU3LDAsCisgICAgMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwKKyAgICAwLDExNCw3MiwwLDAsMCwxMTQsNzUsMCwwLDAsMTE0LDgxLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw2OSwwLDAsMCwxMzcsMCwwLDAsMTE1LDgsMCwKKyAgICAwLDAsMTIsMiw2LDIsMTIsMywxMiwzLDExNCw2OSwwLDAsMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDY0LDAsMCwwLDExNSwxNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCisgICAgMCwwLDkwLDIsMCwxMDAsMSwwLDgzLDQxLDIsMjE4LDE0LDk1LDY4LDEwMSwKKyAgICA5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDc4LDQxLDMsMTE0LDU3LAorICAgIDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDgyLDAsMCwwLDE2MiwwLDAsMCwxMTUsMiwwLDAsMCwxMiwKKyAgICAxLDExNCw4MiwwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw4MiwwLDAsMCwKKyAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAorICAgIDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsCisgICAgMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwKKyAgICAxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCwKKyAgICA3LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLAorICAgIDAsODMsNDEsMTMsMjE4LDExLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LAorICAgIDEwNywxMjIsMTY5LDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwxMTUsMTA1LDExOCwxMDEsMzIsMTA4LAorICAgIDExMSw5OSwxMDcsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk3LDk4LDEwOCwxMDEsCisgICAgMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDMyLDEwMCwxMDEsOTcsMTAwLDEwOCwKKyAgICAxMTEsOTksMTA3LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExNiwKKyAgICAxMDQsMTE0LDEwMSw5NywxMDAsMzIsNDksMzIsMTE2LDExNCwxMjEsMTA1LDExMCwxMDMsMzIsMTE2LAorICAgIDExMSwzMiwxMTYsOTcsMTA3LDEwMSwzMiwxMDgsMTExLDk5LDEwNywxMTUsMzIsNjUsMzIsMTE2LAorICAgIDEwNCwxMDEsMTEwLDMyLDY2LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LAorICAgIDEwMCwzMiw1MCwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTExLDEwLDMyLDMyLAorICAgIDMyLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiw2NiwzMiwxMTYsCisgICAgMTA0LDEwMSwxMTAsMzIsNjUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsCisgICAgMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI0LAorICAgIDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI0LDAsCisgICAgMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDQsMCwxMDAsMCwwLAorICAgIDEyNCwwLDAsOTUsNSwwLDEwMCwxLDAsMTI0LDAsMCw5NSw2LDAsMTAwLAorICAgIDEsMCwxMjQsMCwwLDk1LDcsMCwxMDAsMCwwLDgzLDQxLDIsNzgsMjMzLAorICAgIDAsMCwwLDAsNDEsOCwyMTgsNyw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDkwLAorICAgIDEzLDk3LDEwOCwxMDgsMTExLDk5LDk3LDExNiwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMjE4LDQsCisgICAgMTA4LDExMSw5OSwxMDcsMjE4LDYsMTE5LDk3LDEwNywxMDEsMTE3LDExMiwxMTQsNjcsMCwwLAorICAgIDAsMjE4LDUsMTExLDExOSwxMTAsMTAxLDExNCwyMTgsNSw5OSwxMTEsMTE3LDExMCwxMTYsMjE4LAorICAgIDcsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LAorICAgIDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCw3MiwwLDAsMCwxNzIsMCwwLDAsMTE1LDEyLDAsMCwKKyAgICAwLDAsMSwxNSwxLDE1LDEsOSwxLDksMSw5LDEsMTIyLDIwLDk1LAorICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKKyAgICAxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTI1LAorICAgIDIsMCwxMjAsNTksMCwxMTYsMywwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwKKyAgICAwLDEyNSwzLDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDU1LDAsCisgICAgMTAwLDEsMCw4MywxMjQsMywwLDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLAorICAgIDEyNCwxLDAsMTA3LDIsMCwxMTQsMjQsMCwxMDAsMiwwLDgzLDExMywyNCwwLAorICAgIDEwMCwwLDAsODMsNDEsMyw3OCw3MCw4NCw0MSw1LDExNCw4NSwwLDAsMCwKKyAgICAyMTgsOSwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNCw4OCwwLDAsMCwKKyAgICAyMTgsMTIsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwyMTgsMywKKyAgICAxMDMsMTAxLDExNiw0MSw0LDExNCw3MSwwLDAsMCwyMTgsMiwxMDksMTAxLDIxOCwzLAorICAgIDExNiwxMDUsMTAwLDExNCw4NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMTIsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LAorICAgIDEwMCwxMDgsMTExLDk5LDEwNywxODAsMCwwLDAsMTE1LDE4LDAsMCwwLDAsMiwKKyAgICAxMiwxLDksMSwzLDEsMTUsMSwxMiwxLDQsMSw5LDEsMTIsMSwKKyAgICAxMjIsMjQsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDEwNCw5NywKKyAgICAxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsOTksMSwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsMTcsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDIxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwwLAorICAgIDEyNCwwLDAsMTE2LDIsMCwxMjQsMSwwLDYwLDEyMiwxNzcsMCwxMjAsMTcwLDAsCisgICAgMTI0LDAsMCwxMDYsMywwLDE0MywxMzAsMCwxLDEyNCwwLDAsMTA2LDQsMCwKKyAgICAxMDAsMSwwLDEwNywyLDAsMTE1LDY4LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwKKyAgICAxLDAsMTA3LDIsMCwxMTQsOTYsMCwxMjQsMSwwLDEyNCwwLDAsOTUsNSwKKyAgICAwLDEyNCwwLDAsNCwxMDYsNCwwLDEwMCwyLDAsNTUsMiw5NSw0LDAsCisgICAgMTAwLDMsMCw4MywxMjQsMCwwLDEwNiw2LDAsMTMxLDAsMCwxMTQsMTI3LDAsCisgICAgMTE2LDcsMCwxMDAsNCwwLDEyNCwwLDAsMjIsMTMxLDEsMCwxMzAsMSwwLAorICAgIDExMCwwLDAsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTAwLDUsMCwxMzEsCisgICAgMSwwLDExNCwxNjMsMCwxMjQsMCwwLDQsMTA2LDEwLDAsMTAwLDIsMCw1NSwKKyAgICAyLDk1LDEwLDAsMTEwLDAsMCw4NywxMDAsNiwwLDgxLDg4LDEyNCwwLDAsCisgICAgMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsMSwxMjQsMCwwLDEwNiw4LDAsCisgICAgMTA2LDExLDAsMTMxLDAsMCwxLDExMywyOCwwLDg3LDEwMCw2LDAsMTE2LDIsCisgICAgMCwxMjQsMSwwLDYxLDg4LDEwMCw2LDAsODMsNDEsNywxMjIsMTg1LDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsNDYsMzIsCisgICAgMzIsNzMsMTAyLDMyLDk3LDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsCisgICAgMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNiwxMDEsCisgICAgOTksMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMzIsCisgICAgOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LAorICAgIDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDc5LDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsCisgICAgOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwxMTQsMTE3LAorICAgIDEwMSwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLDExNCwyOSwwLDAsCisgICAgMCw4NCwxMjIsMjMsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTAwLDEwMSwxMTYsCisgICAgMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwzNywxMTQsNzAsNzgsNDEsMTIsMTE0LAorICAgIDg1LDAsMCwwLDExNCw5MSwwLDAsMCwxMTQsOTIsMCwwLDAsMTE0LDg2LAorICAgIDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsODgsMCwwLDAsMTE0LDk2LDAsCisgICAgMCwwLDExNCw4MiwwLDAsMCwxMTQsODcsMCwwLDAsMjE4LDcsOTcsOTksCisgICAgMTEzLDExNywxMDUsMTE0LDEwMSwxMTQsOTAsMCwwLDAsMjE4LDcsMTE0LDEwMSwxMDgsMTAxLAorICAgIDk3LDExNSwxMDEsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDk1LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5NywKKyAgICAwLDAsMCwxOTIsMCwwLDAsMTE1LDMyLDAsMCwwLDAsNiwxMiwxLAorICAgIDEwLDEsMywxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LDEsNCwxLAorICAgIDEyLDEsMTksMSwxOCwxLDI0LDIsMTMsMSwyMCwyLDEyMiwxOSw5NSw3NywKICAgICAxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLDExNywxMDUsMTE0LAogICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMCwwLAogICAgIDAsMCw2NywwLDAsMCwxMTUsMTY1LDAsMCwwLDExNiwwLDAsMTA2LDEsCkBAIC01MDQsODc4ICs0ODAsMTU4MCBAQAogICAgIDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDQsMCwxMTUsNzMsMCwxMTYsNiwKICAgICAwLDEzMCwxLDAsMTI0LDAsMCw0LDEwNiw1LDAsMTAwLDMsMCw1NiwyLAogICAgIDk1LDUsMCwxMjQsMCwwLDEwNiw1LDAsMTAwLDIsMCwxMDcsMiwwLDExNCwKLSAgICAxNTUsMCwxMDAsMCwwLDEyNCwwLDAsOTUsMywwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMTQsMTU1LDAsMTI0LDAsMCw0LDEwNiw4LDAsMTAwLDMsMCw1NiwyLAotICAgIDk1LDgsMCwxMjQsMCwwLDEwNiw5LDAsMTA2LDEwLDAsMTMxLDAsMCwxLAorICAgIDE1NSwwLDEwMCwwLDAsMTI0LDAsMCw5NSwzLDAsMTI0LDAsMCwxMDYsNywKKyAgICAwLDExNCwxNTUsMCwxMjQsMCwwLDQsMTA2LDcsMCwxMDAsMywwLDU2LDIsCisgICAgOTUsNywwLDEyNCwwLDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsMSwKICAgICAxMTMsMTU1LDAsMTEwLDAsMCw4NywxMDAsMCwwLDgxLDg4LDEwMCwwLDAsODMsCi0gICAgNDAsNCwwLDAsMCw3OCwxMTcsMzEsMCwwLDAsOTksOTcsMTEwLDExMCwxMTEsCi0gICAgMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNywxMTAsNDUsOTcsOTksMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSw5OSwxMDcsMTA1LDAsMCwwLDAsMTA1LAotICAgIDEsMCwwLDAsNDAsMTEsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE2LAotICAgIDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsOSwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLAotICAgIDEwMSwxMTAsMTE2LDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNyw1LDAsMCwKLSAgICAwLDExMSwxMTksMTEwLDEwMSwxMTQsMTE3LDEyLDAsMCwwLDgyLDExNywxMTAsMTE2LDEwNSwKLSAgICAxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwKLSAgICAxMTYsMTE3LDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsCi0gICAgMCwwLDExOSw5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDExNyw2LDAsMCwwLDExOSw5NywKLSAgICAxMDcsMTAxLDExNywxMTIsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsCi0gICAgNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDEwNSwxMDAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwyMjYsMCwKLSAgICAwLDAsMTE1LDIyLDAsMCwwLDAsMSwxMiwxLDEwLDEsMTUsMSwxNSwKLSAgICAxLDIxLDEsMTUsMSwxNSwxLDksMSw5LDEsMTUsMSwxMTcsMTksMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCi0gICAgMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLDEwMCwKLSAgICAxLDAsMTI0LDAsMCwxMDYsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMSwKLSAgICAwLDEwMiwyLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMjEsMCwwLAotICAgIDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDM3LDExNCw0MSwKLSAgICAzMiw5NywxMTYsMzIsMzcsMTAwLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE3LDIsMCwwLDAsMTA1LDEwMCw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICA5NSw5NSwyMzksMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMCwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQwLDksMCwwLDAsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsCi0gICAgMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwKLSAgICAxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwKLSAgICA5NSw5NSwxMTcsMTIsMCwwLDAsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsCi0gICAgMTExLDk5LDEwNywxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNywKLSAgICA3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDE3NSwwLDAsMCwxMTUsMTIsMCwwLAotICAgIDAsMTYsNCw2LDIsMTIsOCwxMiwxMiwxMiwyNSwxMiwxMywxMTcsMTEsMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwKLSAgICAwLDAsMTE1LDc0LDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLAotICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwKLSAgICAxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsCi0gICAgMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LAotICAgIDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLAotICAgIDgzLDQwLDExLDAsMCwwLDExNywxNiwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwKLSAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDExNyw4NiwwLDAsMCwKLSAgICA2NSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDc2LDExMSw5OSwxMDcsMzIsMTAxLDExMywxMTcsMTA1LDExOCw5NywxMDgsMTAxLDExMCwxMTYsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5OCwxMTcsMTA1LDEwOCwxMDAsCi0gICAgMTE1LDMyLDExOSwxMDUsMTE2LDEwNCwxMTEsMTE3LDExNiwxMCwzMiwzMiwzMiwzMiwxMDksMTE3LAotICAgIDEwOCwxMTYsMTA1LDQ1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE1LDExNywKLSAgICAxMTIsMTEyLDExMSwxMTQsMTE2LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLAotICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLAotICAgIDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDEsMCwxMjQsMCwwLDk1LAotICAgIDEsMCwxMDAsMCwwLDgzLDQwLDIsMCwwLDAsNzgsMTA1LDAsMCwwLAotICAgIDAsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsCi0gICAgNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMjQ3LDAsMCwwLDExNSw0LDAsCi0gICAgMCwwLDAsMSw5LDEsMTE3LDI1LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LAotICAgIDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwKLSAgICAxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLDEyNCwwLAotICAgIDAsNCwxMDYsMCwwLDEwMCwxLDAsNTUsMiw5NSwwLDAsMTAwLDIsMCwKLSAgICA4Myw0MCwzLDAsMCwwLDc4LDEwNSwxLDAsMCwwLDg0LDQwLDIsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsOTksMTExLDExNywxMTAsMTE2LDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwyNTEsMCwwLDAsMTE1LAotICAgIDQsMCwwLDAsMCwxLDE1LDEsMTE3LDI0LDAsMCwwLDk1LDY4LDExNywKKyAgICA0MSw0LDc4LDEyMiwzMSw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLAorICAgIDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwKKyAgICAxMDgsMTExLDk5LDEwNywxMTQsODQsMCwwLDAsMTE0LDI5LDAsMCwwLDQxLDEwLAorICAgIDExNCw4NSwwLDAsMCwxMTQsOTEsMCwwLDAsMTE0LDg2LDAsMCwwLDExNCwKKyAgICA4OCwwLDAsMCwyMTgsMTIsODIsMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksMTE0LDExNCwKKyAgICAxMTEsMTE0LDExNCw4OSwwLDAsMCwyMTgsMTQsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwxMDUsCisgICAgMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDkwLDAsMCwwLDExNCw4NywwLDAsCisgICAgMCwxMTQsOTgsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDk1LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw5OCwwLDAsMCwyMTcsMCwwLDAsMTE1LDIyLDAsMCwwLDAsCisgICAgMSwxMiwxLDEwLDEsMTUsMSwxNSwxLDIxLDEsMTUsMSwxNSwxLDksCisgICAgMSw5LDEsMTUsMSwxMjIsMTksOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCisgICAgOTksMTA3LDQ2LDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwxLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDI1LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsCisgICAgMTE2LDIsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsMCw4Myw0MSwyLDc4LAorICAgIDEyMiwyMyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsMTIzLDMzLAorICAgIDExNCwxMjUsNDEsMzIsOTcsMTE2LDMyLDEyMywxMjUsNDEsMywxMTQsNDcsMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDExNCw0OCwwLDAsMCw0MSwxLDExNCw3MSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsOCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsMjMwLDAsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMSwxMjIsMjAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCisgICAgOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSw5LDExNCw1NywKKyAgICAwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLAorICAgIDAsMCwxMTQsNzIsMCwwLDAsMTE0LDk2LDAsMCwwLDExNCw5NywwLDAsCisgICAgMCwxMTQsOTgsMCwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgODMsMCwwLDAsMTY2LDAsMCwwLDExNSwxMiwwLDAsMCwxMiw0LDYsCisgICAgMiwxMiw4LDEyLDEyLDEyLDI1LDEyLDEzLDExNCw4MywwLDAsMCw5OSwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LAorICAgIDAsMCwwLDExNSw3MCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwKKyAgICAwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsCisgICAgMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsCisgICAgNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOCwKKyAgICAwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsODMsNDEsMTEsCisgICAgMjE4LDE2LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKKyAgICA5OSwxMDcsMTIyLDg2LDY1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTAxLDMyLDk1LDc3LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywzMiwxMDEsMTEzLDExNywxMDUsMTE4LDk3LDEwOCwKKyAgICAxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk4LAorICAgIDExNywxMDUsMTA4LDEwMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDExMSwxMTcsMTE2LDEwLDMyLDMyLAorICAgIDMyLDMyLDEwOSwxMTcsMTA4LDExNiwxMDUsNDUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLAorICAgIDEwMywzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDYsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMjIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMSwwLAorICAgIDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDEsMiw3OCwxMTQsODQsMCwKKyAgICAwLDAsNDEsMiwxMTQsNjcsMCwwLDAsMTE0LDg5LDAsMCwwLDQxLDIsCisgICAgMTE0LDcxLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsMjM4LDAsCisgICAgMCwwLDExNSw0LDAsMCwwLDAsMSw5LDEsMTIyLDI1LDk1LDY4LDExNywKKyAgICAxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsCisgICAgMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLAorICAgIDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLAorICAgIDEyNCwwLDAsNCwxMDYsMCwwLDEwMCwxLDAsNTUsMiw5NSwwLDAsMTAwLAorICAgIDIsMCw4Myw0MSwzLDc4LDExNCwyOSwwLDAsMCw4NCw0MSwxLDExNCw4OSwKKyAgICAwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOTcsMCwwLDAsMjQyLDAsCisgICAgMCwwLDExNSw0LDAsMCwwLDAsMSwxNSwxLDEyMiwyNCw5NSw2OCwxMTcsCiAgICAgMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk3LDk5LAogICAgIDExMywxMTcsMTA1LDExNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKICAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLDAsMTI0LAogICAgIDAsMCwxMDYsMCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMzAsMCwxMTYsMSwKICAgICAwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwKICAgICA0LDEwNiwwLDAsMTAwLDMsMCw1NiwyLDk1LDAsMCwxMDAsMCwwLDgzLAotICAgIDQwLDQsMCwwLDAsNzgsMTA1LDAsMCwwLDAsMTE3LDMxLDAsMCwwLAotICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsCi0gICAgMTEwLDQ1LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDEwNSwKLSAgICAxLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDUsMCwwLDAsOTksMTExLAotICAgIDExNywxMTAsMTE2LDExNywxMiwwLDAsMCw4MiwxMTcsMTEwLDExNiwxMDUsMTA5LDEwMSw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywKLSAgICAwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwyNTUsMCwwLDAsMTE1LDYsCi0gICAgMCwwLDAsMCwxLDE1LDEsMTUsMSwxMTcsMjQsMCwwLDAsOTUsNjgsCi0gICAgMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsCi0gICAgMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwKLSAgICAxMDAsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLAotICAgIDEsMCwxMDIsMiwwLDIyLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDI2LDAsCi0gICAgMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKLSAgICA5OSwxMDcsNDAsMzcsMTE0LDQxLDMyLDk3LDExNiwzMiwzNywxMDAsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMiwwLDAsMCwxMDUsCi0gICAgMTAwLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQsMSwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwxLDExNywyNSwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSwKLSAgICA5NSw3OCw0MCw4LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDcsMCwKLSAgICAwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsNywwLDAsMCwxMTQsMTAxLAotICAgIDEwOCwxMDEsOTcsMTE1LDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMjQzLDAsMCwwLDExNSwxMCwwLDAsMCwKLSAgICAxNiwyLDYsMiwxMiw0LDEyLDQsMTIsNSwxMTcsMTYsMCwwLDAsOTUsCi0gICAgNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCwKLSAgICAzLDAsMCwwLDExNSwxNDIsMCwwLDAsMTAwLDMsMCwxMjUsMSwwLDEyMSwKLSAgICAxNywwLDExNiwxLDAsMTM2LDAsMCwyNSwxMzEsMCwwLDEyNSwxLDAsODcsCi0gICAgMTEwLDE4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLAotICAgIDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDEzOCwKLSAgICAwLDExNiwzLDAsMTAwLDMsMCwxMDcsOCwwLDExNCw4MywwLDExNiw0LDAsCi0gICAgMTM2LDAsMCwxMzEsMSwwLDEyNSwxLDAsMTEwLDEyLDAsMTE2LDUsMCwxMzYsCi0gICAgMCwwLDEzMSwxLDAsMTI1LDEsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDIsMCwxMTYsNiwwLDEwNiw3LDAsCi0gICAgMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE2LDEsMCwxMzYsMCwwLDYwLAotICAgIDExMCwwLDAsMTI0LDEsMCw4Myw0MCw0LDAsMCwwLDExNywxMDksMCwwLAotICAgIDAsNzEsMTAxLDExNiwzMiwxMTEsMTE0LDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsCisgICAgNDEsNCw3OCwxMTQsODQsMCwwLDAsMTIyLDMxLDk5LDk3LDExMCwxMTAsMTExLDExNiwKKyAgICAzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsMTEwLDQ1LDk3LDk5LDExMywxMTcsCisgICAgMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDExNCwyOSwwLDAsMCw0MSwyLAorICAgIDExNCw4OSwwLDAsMCwxMTQsOTksMCwwLDAsNDEsMSwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDk4LDAsMCwwLDI0NiwwLDAsMCwxMTUsNiwwLDAsMCwwLDEsCisgICAgMTUsMSwxNSwxLDEyMiwyNCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDI1LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwKKyAgICAwLDEwNiwxLDAsMTE2LDIsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsMCwKKyAgICA4Myw0MSwyLDc4LDEyMiwyOCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDEyMywzMywxMTQsMTI1LDQxLDMyLDk3LDExNiwzMiwKKyAgICAxMjMsMTI1LDQxLDMsMTE0LDQ3LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsNDgsCisgICAgMCwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsMCwyNTEsMCwKKyAgICAwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSw2OCwxMTcsMTA5LDEwOSwKKyAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsCisgICAgMTEyLDExNCw5NSw5NSw3OCw0MSw4LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLAorICAgIDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwwLDAsCisgICAgMTE0LDk3LDAsMCwwLDExNCw5OCwwLDAsMCwxMTQsMTAxLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwxMDIsMCwwLDAsMjM0LDAsMCwwLDExNSwxMCwwLDAsCisgICAgMCwxMiwyLDYsMiwxMiw0LDEyLDQsMTIsNSwxMTQsMTAyLDAsMCwwLAorICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDUyLDAsMCwwLDEwMSwwLDAsOTAsMSwwLAorICAgIDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDkwLAorICAgIDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCw5MCw0LDAsMTAwLDUsCisgICAgMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LDAsODMsNDEsOCwKKyAgICAyMTgsMTgsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDc3LDk3LDExMCwKKyAgICA5NywxMDMsMTAxLDExNCw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwKKyAgICAwLDEyNCwwLDAsOTUsMCwwLDEwMCwwLDAsMTI0LDAsMCw5NSwxLDAsCisgICAgMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDcwLDAsMCwwLDIxOCw1LAorICAgIDk1LDEwOCwxMTEsOTksMTA3LDQxLDIsMTE0LDcxLDAsMCwwLDExNCw2NywwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsNzIsMCwwLDAsMSwxLDAsMCwxMTUsNCwwLDAsMCwwLDEsCisgICAgOSwxLDEyMiwyNyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNzcsCisgICAgOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxMCwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsNTMsMCwwLDAsMTIyLDIyLDAsMTE2LDAsMCwxMjQsCisgICAgMCwwLDEwNiwxLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDIsMCw4NywxMDAsCisgICAgMCwwLDExNiwzLDAsMTA2LDQsMCwxMzEsMCwwLDEsODgsMTI0LDAsMCwKKyAgICAxMDYsMiwwLDEwNiw1LDAsMTMxLDAsMCwxLDEwMCwwLDAsODMsNDEsMSwKKyAgICA3OCw0MSw2LDIxOCwxNiw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA5NSwxMDgsMTExLDk5LDEwNywxMTQsNzAsMCwwLDAsMTE0LDEwNCwwLDAsMCwyMTgsCisgICAgNCw5NSwxMDUsMTA5LDExMiwyMTgsMTIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LAorICAgIDExMSw5OSwxMDcsMTE0LDk3LDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NSwKKyAgICAwLDAsMCw1LDEsMCwwLDExNSw4LDAsMCwwLDAsMSwzLDEsCisgICAgMjIsMiwxMSwxLDEyMiwyOCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwKKyAgICAxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsCisgICAgOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMSwKKyAgICAwLDAsMCw3OSwwLDAsMCwxMTUsMTcsMCwwLDAsMTI0LDAsMCwxMDYsCisgICAgMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDEwMCwwLDAsODMsNDEsMSw3OCwKKyAgICA0MSwyLDExNCwxMDQsMCwwLDAsMTE0LDk4LDAsMCwwLDQxLDMsMTE0LDcxLAorICAgIDAsMCwwLDExNCw4MCwwLDAsMCwyMTgsNiwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICA4MSwwLDAsMCwxMiwxLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLAorICAgIDI3LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3Nyw5NywxMTAsOTcsCisgICAgMTAzLDEwMSwxMTQsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDYsMTE0LAorICAgIDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDcyLAorICAgIDAsMCwwLDExNCw3NSwwLDAsMCwxMTQsODEsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDEwMywwLDAsMCwyNTUsMCwwLDAsMTE1LDYsMCwwLDAsMTIsCisgICAgMiwxMiw0LDEyLDcsMTE0LDEwMywwLDAsMCw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMywwLDAsMCwxMSwwLDAsMCwzLDAsMCwwLDExNSwKKyAgICAxNDIsMCwwLDAsMTAwLDEsMCwxMjUsMSwwLDEyMSwxNywwLDExNiwwLDAsCisgICAgMTM2LDAsMCwyNSwxMzEsMCwwLDEyNSwxLDAsODcsMTEwLDE4LDAsNCwxMTYsCisgICAgMSwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLDg5LDExMCwxLDAsODgsCisgICAgMTI0LDEsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDEzOCwwLDExNiwyLDAsMTAwLAorICAgIDEsMCwxMDcsOCwwLDExNCw4MywwLDExNiwzLDAsMTM2LDAsMCwxMzEsMSwKKyAgICAwLDEyNSwxLDAsMTEwLDEyLDAsMTE2LDQsMCwxMzYsMCwwLDEzMSwxLDAsCisgICAgMTI1LDEsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzNCwKKyAgICAwLDAsMTI1LDIsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDEsMCwxMjQsMiwKKyAgICAwLDEzMSwyLDAsMTE2LDAsMCwxMzYsMCwwLDYwLDExMCwwLDAsMTI0LDEsCisgICAgMCw4Myw0MSw0LDEyMiwxMDksNzEsMTAxLDExNiwzMiwxMTEsMTE0LDMyLDk5LDExNCwxMDEsCisgICAgOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsCisgICAgMTExLDk5LDEwNywzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLDk4LDEwMSwKKyAgICAzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiw5NywxMDcsCisgICAgMTAxLDExMCw0Niw3OCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCisgICAgMCwyLDAsMCwwLDE5LDAsMCwwLDExNSwxMSwwLDAsMCwxMTYsMCwKKyAgICAwLDEzNiwwLDAsNjEsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDEsMjE4LDEzLAorICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNSw0MSwxLDExNCwKKyAgICAzNiwwLDAsMCw0MSwxLDExNCw2NywwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMiw5OSw5OCwzMiwxLDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDEsMTIyLDI4LDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwKKyAgICA5OSw5OCw0MSw3LDExNCwxMDksMCwwLDAsMTE0LDc5LDAsMCwwLDExNCw4NSwKKyAgICAwLDAsMCwxMTQsMTAyLDAsMCwwLDExNCw4MywwLDAsMCwyMTgsOCw5NSwKKyAgICAxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5MCwzLDExNCwxMDEsMTAyLDQxLDMsMTE0LDY3LAorICAgIDAsMCwwLDExNCw4NiwwLDAsMCwxMTQsMTEwLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDQxLDEsMTE0LDY3LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMDUsCisgICAgMCwwLDAsMTgsMSwwLDAsMTE1LDI0LDAsMCwwLDAsNCw2LDEsCisgICAgMywxLDE3LDEsMTMsMSw1LDEsMTIsMSwxMiwxLDE1LDIsMTIsMSwKKyAgICAxOCwyLDI1LDEsMTE0LDEwNSwwLDAsMCw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNzEsCisgICAgMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTYsCisgICAgMSwwLDEwNiwyLDAsMTMxLDAsMCwxLDEyMSwxNCwwLDEyNCwxLDAsMTA2LAorICAgIDMsMCwxMzEsMCwwLDEsODcsMTEwLDE4LDAsNCwxMTYsNCwwLDEwNywxMCwKKyAgICAwLDExNCw1NiwwLDEsMSwxLDg5LDExMCwxMSwwLDg4LDEyNCwxLDAsMTA2LAorICAgIDUsMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MSwyLDk3LDIxLDEsMCwKKyAgICAwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsCisgICAgOTgsOTcsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ0LAorICAgIDMyLDk3LDExMCwxMDAsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LDEwNCwKKyAgICAxMDEsMTEwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLAorICAgIDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwKICAgICAxMTEsMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODMsMTA0LDExMSwKLSAgICAxMTcsMTA4LDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE2LDk3LDEwNywxMDEsMTEwLDQ2LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsMTksCi0gICAgMCwwLDAsMTE1LDExLDAsMCwwLDExNiwwLDAsMTM2LDAsMCw2MSwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMSwwLDAsMCwxMTcsMTMsCi0gICAgMCwwLDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE1LAotICAgIDQwLDEsMCwwLDAsMTE3LDEsMCwwLDAsOTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMiwwLDAsMCw5OSw5OCwyNCwxLDAsMCwxMTUsMiwwLDAsMCwKLSAgICAwLDEsMTE3LDI4LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKLSAgICA0Niw5OSw5OCw3OCw0MCw4LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwKLSAgICAxMTAsMTAxLDExNywxMywwLDAsMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsCi0gICAgMTExLDk5LDEwNywxMTUsMTE3LDgsMCwwLDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwKLSAgICAxMTQsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsMTYsMCwKLSAgICAwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAotICAgIDk5LDEwNywxMTcsMTEsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTksMTA3LDExNyw4LDAsMCwwLDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDExNywKLSAgICAzLDAsMCwwLDExNCwxMDEsMTAyLDQwLDMsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDIsCi0gICAgMCwwLDAsOTksOTgsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTAsCi0gICAgMSwwLDAsMTE1LDI0LDAsMCwwLDAsNCw2LDEsMywxLDE3LDEsCi0gICAgMTMsMSw1LDEsMTIsMSwxMiwxLDE1LDIsMTIsMSwxOCwyLDI1LDEsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDEwOCwxMTEsOTksMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSw3MSwwLDAsMCwxMTYsCi0gICAgMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsMSwwLDExNiwxLDAsMTA2LDIsCi0gICAgMCwxMzEsMCwwLDEsMTIxLDE0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwwLAotICAgIDAsMSw4NywxMTAsMTgsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDU2LDAsCi0gICAgMSwxLDEsODksMTEwLDExLDAsODgsMTI0LDEsMCwxMDYsNSwwLDEzMSwwLAotICAgIDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLDEsMCwwLAotICAgIDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsOTgsCi0gICAgOTcsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ0LDMyLAotICAgIDk3LDExMCwxMDAsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsCi0gICAgMTEwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLAotICAgIDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTEwLDExNSwxMTcsMTE0LAotICAgIDEwMSwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk5LDExMSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTE2LDEwMSwxMDgsMTIxLDMyLDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LAotICAgIDEwNSwxMjIsMTAxLDEwMCw0NCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwMSwxMTgsMTAxLDExMCwxMTYsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLDk4LDEwMSwxMDUsCi0gICAgMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5NywKLSAgICAxMTAsMTExLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLAotICAgIDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiwKLSAgICA5NywxMDcsMTAxLDExMCw0Niw3OCw0MCw2LDAsMCwwLDExNywxNiwwLDAsMCwKLSAgICA5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywKLSAgICAxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDcsMCwwLDAsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwKLSAgICAxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNyw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOSwwLDAsMCw5NSwxMDgsMTExLAotICAgIDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDI5LDEsMCwwLDExNSwxNCwwLDAsMCwwLDcsMTIsMSwxMCwxLDMsCi0gICAgMSwxNCwxLDEzLDMsNSwyLDExNywxOSwwLDAsMCw5NSwxMDgsMTExLDk5LAotICAgIDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCi0gICAgNzksMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsCi0gICAgMiwwLDE0MiwwLDAsODMsNDAsMSwwLDAsMCwxMTcsNDYsMSwwLDAsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsOTksMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk3LDEwOCwxMTksOTcsMTIxLDExNSwzMiwKLSAgICAxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMTE1LAotICAgIDEwLDMyLDMyLDMyLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCwzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwMSwxMTAsCi0gICAgMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiw5NywzMiw5OSw5NywxMDgsMTA4LDMyLDExNiwxMTEsCi0gICAgMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwNSwxMTYsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSwKLSAgICA5NywxMDAsMzIsMTExLDEwMiwzMiw5NywzMiwxMTAsMTExLDExNCwxMDksOTcsMTA4LDMyLDk5LAotICAgIDk3LDEwOCwxMDgsMzIsMTA1LDExMCwzMiwxMTIsMTA4LDk3LDk5LDEwMSwxMTUsMzIsMTE5LDEwNCwKLSAgICAxMDEsMTE0LDEwMSwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDExNiwxMTQsMTExLDEwMCwxMTcsOTksMTAxLAotICAgIDExNSwzMiwxMTcsMTEwLDExOSw5NywxMTAsMTE2LDEwMSwxMDAsMzIsMTEwLDExMSwxMDUsMTE1LDEwMSwKLSAgICAzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE2LDExNCw5Nyw5OSwxMDEsOTgsCi0gICAgOTcsOTksMTA3LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDEwMSwKLSAgICAxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMCwxMDMsMTAsMzIsMzIsMzIsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDEsMTAsMzIsMzIsMzIsMzIsNDAsMCwKLSAgICAwLDAsMCw0MCwzLDAsMCwwLDExNywxLDAsMCwwLDEwMiwxMTcsNCwKLSAgICAwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNCwwLDAsMCwxMDcsMTE5LDEwMCwxMTUsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjUsMCwwLAotICAgIDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksCi0gICAgMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsNDksMSwwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCw4LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LAotICAgIDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwKLSAgICAxMTgsMTAxLDEwMCwxMDUsMTU4LDEyLDAsMCwxMTcsMSwwLDAsMCwxMywxMDUsMTYsCi0gICAgMCwwLDAsMTE3LDEsMCwwLDAsMTAsMTA1LDI0LDAsMCwwLDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsOTksCi0gICAgMCwwLDAsMTE1LDI5LDAsMCwwLDEyNCwwLDAsOTMsMTksMCwxMjUsMSwKLSAgICAwLDExNiwwLDAsMTI0LDEsMCw2MywxMDAsMCwwLDY0LDg2LDEsMTEzLDMsCi0gICAgMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTA1LDI1NSwwLDAsMCw3OCwKLSAgICA0MCwxLDAsMCwwLDExNywxNywwLDAsMCw5NSw4Miw2NSw4Nyw5NSw3NywKLSAgICA2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4Miw0MCwyLDAsMCwwLAotICAgIDExNywyLDAsMCwwLDQ2LDQ4LDExNywxLDAsMCwwLDExMCw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywKLSAgICAxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxNTAsMSwwLDAsMTE1LDIsMCwwLDAsCi0gICAgNiwwLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwKLSAgICAxMDUsMCwwLDAsMCwxMDUsMjUsMCwwLDAsMTA1LDgsMCwwLDAsMTE3LAotICAgIDExLDAsMCwwLDk1LDk1LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5NSw5NSwxMTcsCi0gICAgMywwLDAsMCw0NiwxMTIsMTIxLDExNyw0LDAsMCwwLDQ2LDExMiwxMjEsOTksCi0gICAgMTE3LDQsMCwwLDAsNDYsMTEyLDEyMSwxMTEsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDExLDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsMTE1LDE4MCwKLSAgICAwLDAsMCwxMjQsMSwwLDEwMCw1LDAsMTA3LDgsMCwxMTQsMjUsMCwxMTYsCi0gICAgMSwwLDEwNiwyLDAsMTA2LDMsMCwxMiwxMTAsMywwLDEyNCwxLDAsMTI1LAotICAgIDIsMCwxMjQsMiwwLDExNCw0NiwwLDExNiw0LDAsMTI1LDMsMCwxMTAsNiwKLSAgICAwLDExNiw1LDAsMTI1LDMsMCwxMTYsNiwwLDEyNCwwLDAsMTMxLDEsMCwKLSAgICA5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEyNCw1LDAsMTA2LDcsMCwxMDAsCi0gICAgMSwwLDEzMSwxLDAsOTIsMywwLDEyNSw2LDAsMTI1LDcsMCwxMjUsOCwKLSAgICAwLDExNiwxLDAsMTA2LDgsMCwxMDYsOSwwLDEyNSw5LDAsMTI0LDksMCwKLSAgICAxMDAsNSwwLDEwNyw4LDAsMTE0LDEzMywwLDExNiwxMCwwLDEwMCwyLDAsMTMxLAotICAgIDEsMCwxMzAsMSwwLDExMCwwLDAsMTAwLDMsMCwxMDYsMTEsMCwxMjQsNiwKLSAgICAwLDEyNCw3LDAsMTI0LDksMCwxMjQsMywwLDEwMCw0LDAsMjUsMTAzLDQsCi0gICAgMCwxMzEsMSwwLDEyNSwxMCwwLDExNiwxMiwwLDEyNCw0LDAsMTE2LDEzLDAsCi0gICAgMTI0LDEwLDAsMTMxLDMsMCw4Myw0MCw2LDAsMCwwLDExNywyNDQsMSwwLAotICAgIDAsNzEsMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAotICAgIDExNiwxMTEsMzIsOTcsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTE0LAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LAotICAgIDExMSwzMiwxMDUsMTE2LDExNSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDQ2LAotICAgIDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTAsMTExLDExNiwKLSAgICAzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDU5LDMyLAotICAgIDExNiwxMDQsMTA1LDExNSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMTQsMTAxLDExNiwxMTcsCi0gICAgMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsCi0gICAgMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAotICAgIDEwMCwzMiw5NywxMTUsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMTksMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDEwLDMyLDMyLDMyLDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsNDYsCi0gICAgMTEyLDEyMSw5OSwzMiwxMTcsMTEwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMDIsCi0gICAgMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwzMiwxMDUsMTE1LAotICAgIDMyLDExMCwxMTEsMTEwLDQ1LDEyMiwxMDEsMTE0LDExMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsCi0gICAgMTA1LDExNiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDQ2LDExMiwxMjEsMTExLDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLAotICAgIDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDc4LAotICAgIDExMSwxMTAsMTAxLDQ0LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMDUsMTE2LDMyLDEwOSwxMTcsMTE1LAotICAgIDExNiwzMiw5OCwxMDEsMzIsOTcsMzIsOTgsMTExLDExMSwxMDgsMTAxLDk3LDExMCwzMiw5NywKLSAgICAxMTAsMTAwLDMyLDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMzIsMTExLDEwMiwzMiwxMTUsMTIxLDExNSw0NiwxMDIsCi0gICAgMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwKLSAgICAzMiw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDExNywxLDAsMCwwLDQ2LDExNywzNiwwLDAsMCwKKyAgICAxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsCisgICAgMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTEwLDExNSwxMTcsCisgICAgMTE0LDEwMSwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk5LAorICAgIDExMSwxMDksMTEyLDEwOCwxMDEsMTE2LDEwMSwxMDgsMTIxLDMyLDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsCisgICAgMTA4LDEwNSwxMjIsMTAxLDEwMCw0NCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLAorICAgIDMyLDMyLDEwMSwxMTgsMTAxLDExMCwxMTYsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLDk4LDEwMSwKKyAgICAxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwKKyAgICA5NywxMTAsMTExLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLAorICAgIDMyLDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLAorICAgIDExNiw5NywxMDcsMTAxLDExMCw0Niw3OCw0MSw2LDExNCwxMDUsMCwwLDAsMTE0LDEwNiwKKyAgICAwLDAsMCwxMTQsMTA3LDAsMCwwLDExNCw5NywwLDAsMCwxMTQsODIsMCwKKyAgICAwLDAsMTE0LDk4LDAsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLDExNCw4NiwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMTksOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywKKyAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzNywxLDAsMCwxMTUsMTQsMCwwLDAsCisgICAgMCw3LDEyLDEsMTAsMSwzLDEsMTQsMSwxMywzLDUsMiwxMTQsMTEyLAorICAgIDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDMsMCwwLDAsNzksMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwwLDAsCisgICAgMTI0LDEsMCwxMjQsMiwwLDE0MiwwLDAsODMsNDEsMSw5Nyw0NiwxLDAsCisgICAgMCwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAorICAgIDk4LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiw0Niw5OSwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTcsMTA4LDExOSw5NywxMjEsMTE1LAorICAgIDMyLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLDk5LDEwMSwKKyAgICAxMTUsMTAsMzIsMzIsMzIsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCisgICAgMTA1LDk4LDMyLDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTAxLAorICAgIDExMCwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsMzIsMTE2LAorICAgIDExMSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDg1LDExNSwxMDEsMzIsMTA1LDExNiwzMiwxMDUsMTEwLDExNSwxMTYsCisgICAgMTAxLDk3LDEwMCwzMiwxMTEsMTAyLDMyLDk3LDMyLDExMCwxMTEsMTE0LDEwOSw5NywxMDgsMzIsCisgICAgOTksOTcsMTA4LDEwOCwzMiwxMDUsMTEwLDMyLDExMiwxMDgsOTcsOTksMTAxLDExNSwzMiwxMTksCisgICAgMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTA1LDExMCwxMDMsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMTE2LDExNCwxMTEsMTAwLDExNyw5OSwKKyAgICAxMDEsMTE1LDMyLDExNywxMTAsMTE5LDk3LDExMCwxMTYsMTAxLDEwMCwzMiwxMTAsMTExLDEwNSwxMTUsCisgICAgMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTE0LDk3LDk5LDEwMSwKKyAgICA5OCw5Nyw5OSwxMDcsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwxMTksMTA0LDEwMSwxMTAsMzIsCisgICAgMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTEwLDEwMywxMCwzMiwzMiwzMiwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0MSwxMCwzMiwzMiwzMiwzMiwxMTQsCisgICAgNCwwLDAsMCw0MSwzLDIxOCwxLDEwMiwxMTQsODAsMCwwLDAsOTAsNCwKKyAgICAxMDcsMTE5LDEwMCwxMTUsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDI1LDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LAorICAgIDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDU3LDEsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsOCwxMTQsMTE0LDAsMCwwLDEwNSwyMzgsCisgICAgMTIsMCwwLDIzMywyLDAsMCwwLDExNCwxMywwLDAsMCwxMTUsMiwwLAorICAgIDAsMCwxMywxMCw5MCwxMSw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsCisgICAgOTUsMTIyLDMsNDYsMTEyLDEyMSwxMjIsNCw0NiwxMTIsMTIxLDk5LDEyMiw0LDQ2LDExMiwKKyAgICAxMjEsMTExLDc4LDk5LDIsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwKKyAgICA2LDAsMCwwLDY3LDAsMCwwLDExNSwxODAsMCwwLDAsMTI0LDEsMCwKKyAgICAxMDAsMSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwKKyAgICAyLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMTQsCisgICAgNDYsMCwxMTYsMywwLDEyNSwzLDAsMTEwLDYsMCwxMTYsNCwwLDEyNSwzLAorICAgIDAsMTE2LDUsMCwxMjQsMCwwLDEzMSwxLDAsOTIsMiwwLDEyNSw0LDAsCisgICAgMTI1LDUsMCwxMjQsNSwwLDEwNiw2LDAsMTAwLDIsMCwxMzEsMSwwLDkyLAorICAgIDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsMCwxMTYsMCwwLDEwNiw3LAorICAgIDAsMTA2LDgsMCwxMjUsOSwwLDEyNCw5LDAsMTAwLDEsMCwxMDcsOCwwLAorICAgIDExNCwxMzMsMCwxMTYsOSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwKKyAgICAwLDAsMTAwLDQsMCwxMDYsMTAsMCwxMjQsNiwwLDEyNCw3LDAsMTI0LDksCisgICAgMCwxMjQsMywwLDEwMCw1LDAsMjUsMTAzLDQsMCwxMzEsMSwwLDEyNSwxMCwKKyAgICAwLDExNiwxMSwwLDEyNCw0LDAsMTE2LDEyLDAsMTI0LDEwLDAsMTMxLDMsMCwKKyAgICA4Myw0MSw2LDk3LDI0NCwxLDAsMCw3MSwxMDUsMTE4LDEwMSwxMTAsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiw0NiwxMTIsMTIxLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSw0NCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwxMjEsCisgICAgOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAwLAorICAgIDExMSwxMDEsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLAorICAgIDEwMSwxMjAsMTA1LDExNSwxMTYsNTksMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LDExMiwKKyAgICAxMDgsMTIxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDQ2LAorICAgIDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LDk3LAorICAgIDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMDUsMTAyLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExOSwxMDEsMTE0LDEwMSwKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsCisgICAgMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMTAsMzIsMzIsMzIsMzIsMTE5LDEwNSwKKyAgICAxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDMyLDExNywxMTAsMTA4LDEwMSwxMTUsCisgICAgMTE1LDMyLDExNSwxMjEsMTE1LDQ2LDEwMiwxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwxMDUsCisgICAgMTA5LDEwNSwxMjIsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTAsNDUsMTIyLDEwMSwxMTQsMTExLAorICAgIDQ0LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwKKyAgICAxMDEsMzIsNDYsMTEyLDEyMSwxMTEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLAorICAgIDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLDEwNSwKKyAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsNzgsMTExLDExMCwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMTEwLAorICAgIDMyLDEwNSwxMTYsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5NywzMiw5OCwxMTEsCisgICAgMTExLDEwOCwxMDEsOTcsMTEwLDMyLDk3LDExMCwxMDAsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwKKyAgICAxMDAsMzIsMTA1LDExMCwxMCwzMiwzMiwzMiwzMiwxMTIsMTA4LDk3LDk5LDEwMSwzMiwxMTEsCisgICAgMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwMiwxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwxMDUsCisgICAgMTA5LDEwNSwxMjIsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTUsMTIxLAorICAgIDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsCisgICAgNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLAorICAgIDExMCwxMDEsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLAorICAgIDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCwKKyAgICA5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsMjE4LDEsNDYsCisgICAgMTIyLDM2LDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LAorICAgIDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LAorICAgIDExNSwzMiw3OCwxMTEsMTEwLDEwMSwxMTQsMzAsMCwwLDAsMTE0LDg0LDAsMCwwLAorICAgIDQxLDEzLDExNCw3LDAsMCwwLDIxOCw1LDEwMiwxMDgsOTcsMTAzLDExNSwyMTgsOCwKKyAgICAxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDIxOCwyMyw2OCw2OSw2Niw4NSw3MSw5NSwKKyAgICA2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSwKKyAgICA4MywyMTgsMjcsNzksODAsODQsNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsODksODQsCisgICAgNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE0LDM4LAorICAgIDAsMCwwLDIxOCw5LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMjE4LDE0LAorICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwyMTgsOSwKKyAgICA5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMjE4LDE5LDc4LDExMSwxMTYsNzMsMTA5LAorICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMjYsCisgICAgMCwwLDAsMTE0LDI4LDAsMCwwLDIxOCw4LDk1LDgwLDg5LDY3LDY1LDY3LAorICAgIDcyLDY5LDQxLDExLDExNCwzNSwwLDAsMCw5MCwxNCwxMDAsMTAxLDk4LDExNywxMDMsCisgICAgOTUsMTExLDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwyMTgsNSwxMDAsMTAxLDk4LDExNywxMDMsCisgICAgMjE4LDgsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwyMTgsNCwxMDQsMTAxLDk3LDEwMCwKKyAgICAxMTQsMzcsMCwwLDAsMjE4LDEzLDk4LDk3LDExNSwxMDEsOTUsMTAyLDEwNSwxMDgsMTAxLAorICAgIDExMCw5NywxMDksMTAxLDIxOCwzLDExNSwxMDEsMTEyLDExNCwzNiwwLDAsMCw5MCwzLAorICAgIDExNiw5NywxMDMsMjE4LDgsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDE4MSwKKyAgICAxLDAsMCwxMTUsMjIsMCwwLDAsMCwxMywzMSwxLDYsMSw5LDIsCisgICAgNiwxLDE4LDEsMjQsMSwxMiwxLDEyLDEsMTUsMSwzMSwxLDExNCwxMzIsCisgICAgMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCisgICAgNSwwLDAsMCw2NywwLDAsMCwxMTUsMTkzLDAsMCwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMDYsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzMsMCwxMTYsCisgICAgMywwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTE2LDQsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsOTIsMiwwLDEyNSwxLDAsMTI1LDIsMCwKKyAgICAxMTYsNCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDEsMCwxMjUsCisgICAgMywwLDEyNCwzLDAsMTE2LDUsMCwxMDcsMywwLDExNCwxMDgsMCwxMTYsNiwKKyAgICAwLDEwMCwzLDAsMTA2LDcsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDIsMCwKKyAgICAxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLDEwNiw4LDAsMTAwLAorICAgIDQsMCwxMzEsMSwwLDEwMCw1LDAsMTA3LDMsMCwxMTQsMTUzLDAsMTE2LDYsCisgICAgMCwxMDAsNiwwLDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLDEzMSwxLDAsCisgICAgMTMwLDEsMCwxMTAsMCwwLDEyNCwyLDAsMTA2LDksMCwxMDAsNCwwLDEzMSwKKyAgICAxLDAsMTAwLDcsMCwyNSwxMjUsNCwwLDExNiwxMCwwLDEyNCwxLDAsMTI0LAorICAgIDQsMCwxMTYsMTEsMCwxMDAsNywwLDI1LDIzLDEzMSwyLDAsODMsNDEsOCwKKyAgICA5NywxMjEsMSwwLDAsNzEsMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiwKKyAgICA5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsNDYsMTEyLDEyMSw5OSw0Niw0Nyw0NiwKKyAgICAxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwKKyAgICAzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA4NCwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTAsMTAxLDEwMSwxMDAsCisgICAgMzIsMTE2LDExMSwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDU5LDMyLDExNiwxMDQsMTA1LDExNSwzMiwKKyAgICAxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksCisgICAgMTE3LDEwOCw5NywxMTYsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwxMTUsCisgICAgMTEyLDExMSwxMTAsMTAwLDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSw5OSwKKyAgICA0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMzIsMzIsNzMsMTAyLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDEwMCwxMTEsMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTAsMTExLAorICAgIDExNiwzMiw5OSwxMTEsMTEwLDEwMiwxMTEsMTE0LDEwOSwzMiwxMTYsMTExLDMyLDgwLDY5LDgwLAorICAgIDMyLDUxLDQ5LDUyLDU1LDMyLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDQsMzIsODYsOTcsCisgICAgMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsCisgICAgMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwzMiw3MywxMDIsMTAsMzIsMzIsMzIsMzIsCiAgICAgMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKICAgICAxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywwLDAsMCwwLDEwNSwwLDAsMCwwLDc4LDQwLAotICAgIDE0LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsCi0gICAgMCwwLDExNSwxMjEsMTE1LDExNyw1LDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsCi0gICAgOCwwLDAsMCwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDExNywyMywwLDAsCi0gICAgMCw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSwKLSAgICA4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMjcsMCwwLDAsNzksODAsODQsCi0gICAgNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsCi0gICAgODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDExLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDksMCwwLDAsMTEyLDk3LDExNCwKLSAgICAxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTQsMCwwLDAsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDExNyw5LDAsMCwwLDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywKLSAgICA0LDAsMCwwLDEwNiwxMTEsMTA1LDExMCwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDExNyw4LDAsMCwwLDk1LDgwLDg5LDY3LAotICAgIDY1LDY3LDcyLDY5LDQwLDExLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxNCwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsCi0gICAgMTE0LDExNCwxMDUsMTAwLDEwMSwxMTcsNSwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsMTE3LAotICAgIDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsNCwwLDAsCi0gICAgMCwxMDQsMTAxLDk3LDEwMCwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCwxMTcsMTMsCi0gICAgMCwwLDAsOTgsOTcsMTE1LDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDEsMCwwLDAsOTUsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDk3LDEwMywxMTcsOCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxNTksMSwwLDAsMTE1LDIyLDAsMCwwLDAsMTMsCi0gICAgMzEsMSw2LDEsOSwyLDYsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLAotICAgIDE1LDEsMzEsMSwxMTcsMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwxLDAsMCwwLDAsCi0gICAgMCwwLDAsNSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICAxOTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTAwLDcsMCwKLSAgICAxMDcsOCwwLDExNCwzMywwLDExNiw0LDAsMTAwLDEsMCwxMzEsMSwwLDEzMCwKLSAgICAxLDAsMTEwLDAsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDEsMCw5MiwyLAotICAgIDAsMTI1LDEsMCwxMjUsMiwwLDExNiw1LDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LDMsMCwxMTYsNiwwLDEwNywKLSAgICAzLDAsMTE0LDEwOCwwLDExNiw3LDAsMTAwLDIsMCwxMDYsOCwwLDExNiw2LAotICAgIDAsMTI0LDAsMCwxMzEsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEyNCwyLDAsMTA2LDksMCwxMDAsMywwLDEzMSwxLDAsMTAwLDQsMCwxMDcsCi0gICAgMywwLDExNCwxNTMsMCwxMTYsNywwLDEwMCw1LDAsMTA2LDgsMCwxMjQsMiwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDIsMCwKLSAgICAxMDYsMTAsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDYsMCwyNSwxMjUsNCwwLAotICAgIDExNiwxMSwwLDEyNCwxLDAsMTI0LDQsMCwxMTYsMTIsMCwxMDAsNiwwLDI1LAotICAgIDIzLDEzMSwyLDAsODMsNDAsOCwwLDAsMCwxMTcsMTIxLDEsMCwwLDcxLAotICAgIDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDMyLDQ2LDExMiwxMjEsOTksNDYsNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiwKLSAgICA5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSwzMiwxMDIsCi0gICAgMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwxMTIsCi0gICAgMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwKLSAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwKLSAgICAxMDUsMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwKLSAgICAzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxMDAsCi0gICAgMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDQ2LDMyLDMyLDczLDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDAsCi0gICAgMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwxMTYsMzIsOTksMTExLDExMCwxMDIsCi0gICAgMTExLDExNCwxMDksMzIsMTE2LDExMSwzMiw4MCw2OSw4MCwzMiw1MSw0OSw1Miw1NSwzMiwKLSAgICAxMDIsMTExLDExNCwxMDksOTcsMTE2LDQ0LDMyLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsNDYsMzIsNzMsMTAyLDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwKLSAgICAxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLAotICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTcsMzYsMCwwLDAsMTE1LDEyMSwxMTUsCi0gICAgNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsCi0gICAgMTAxLDExNywzNywwLDAsMCwxMjMsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDk4LDExMSwxMTYsCi0gICAgMTE2LDExMSwxMDksNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LAotICAgIDExMSwxMTQsMTIxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE3LDEsMCwwLDAsCi0gICAgNDYsMTA1LDIsMCwwLDAsMTE3LDI4LDAsMCwwLDEwMSwxMjAsMTEyLDEwMSw5OSwKLSAgICAxMTYsMTAxLDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsNTAsMzIsMTAwLDExMSwxMTYsMTE1LDMyLAotICAgIDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTA1LDAsMCwwLDAsNzgsNDAsMTMsMCwKLSAgICAwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDE0LDAsMCwwLDEwNSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwxMTcsOSwwLAotICAgIDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMTE3LDQsMCwwLDAsCi0gICAgNzgsMTExLDExMCwxMDEsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsMCwwLAotICAgIDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsOCwwLDAsCi0gICAgMCw5NSw4MCw4OSw2Nyw2NSw2Nyw3Miw2OSwxMTcsMTAsMCwwLDAsODYsOTcsCi0gICAgMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LAotICAgIDEwOSw5NywxMTYsMTE3LDUsMCwwLDAsOTksMTExLDExNywxMTAsMTE2LDExNyw5LDAsCi0gICAgMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDEwLDAsMCwwLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsMTUsMCwwLDAsODMsCi0gICAgNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDAsNSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsCi0gICAgMCwxMDQsMTAxLDk3LDEwMCwxMTcsMTYsMCwwLDAsMTEyLDEyMSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsCi0gICAgMTIxLDk5LDk3LDk5LDEwNCwxMDEsMTE3LDEzLDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsCi0gICAgMTAyLDExNCwxMTEsMTA5LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTg2LDEsMCwwLDExNSwyNCwKLSAgICAwLDAsMCwwLDksMTgsMSwxNSwxLDE4LDEsMTgsMSwxMiwxLDksCi0gICAgMSwxOCwxLDIxLDEsOSwxLDE1LDEsMTksMSwxMTcsMTcsMCwwLDAsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwxMywwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTY0LDAsMCwwLDExNiwwLDAsMTI0LDAsCi0gICAgMCwxMzEsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjIsMCwxMDAsNiwwLAotICAgIDgzLDEyNCwwLDAsMTA2LDIsMCwxMDAsMiwwLDEzMSwxLDAsOTIsMywwLAotICAgIDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwxLDAsMTIsMTE1LDgxLDAsCi0gICAgMTI0LDMsMCwxMDYsMywwLDEzMSwwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMywKLSAgICAyLDAsMjUsMTAwLDUsMCwxMDcsMywwLDExNCw4NSwwLDEyNCwwLDAsODMsCi0gICAgMTIxLDE2LDAsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCw4NywKLSAgICAxMTAsNDAsMCw0LDExNiw1LDAsMTE2LDYsMCwxMDIsMiwwLDEwNywxMCwwLAotICAgIDExNCwxNDMsMCwxLDEsMSwxMjQsMCwwLDEwMCw2LDAsMTAwLDksMCwxMzMsCi0gICAgMiwwLDI1LDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMTYsNywwLDEyNCw0LAotICAgIDAsMTMxLDEsMCwxMTQsMTYwLDAsMTI0LDQsMCw4MywxMjQsMCwwLDgzLDQwLAotICAgIDEwLDAsMCwwLDExNywxODgsMCwwLDAsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsCi0gICAgMzIsOTcsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMDUsMTAyLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsCi0gICAgOTgsMTA4LDEwMSw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwKLSAgICAxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMTUsMzIsCi0gICAgMTEyLDExNywxMTQsMTAxLDEwOCwxMjEsMzIsMTAyLDExMSwxMTQsMzIsOTgsOTcsOTksMTA3LDExOSwKLSAgICA5NywxMTQsMTAwLDExNSw0NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsMTA1LDk4LDEwNSwxMDgsMTA1LAotICAgIDExNiwxMjEsMzIsMTAyLDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsODAsMTIxLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsOTUsNjksMTIwLDEwMSw5OSw2NywxMTEsMTAwLDEwMSw3NywxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDg3LDEwNSwxMTYsMTA0LDcwLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSw0MCwKLSAgICA0MSwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDY3LDMyLDY1LDgwLDczLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDEwNSwwLDAsMCwwLDExNywxLDAsMCwwLDQ2LAotICAgIDEwNSwzLDAsMCwwLDEwNSwxLDAsMCwwLDExNywyLDAsMCwwLDExMiwKLSAgICAxMjEsNzgsMTA1LDI1MywyNTUsMjU1LDI1NSwxMDUsMjU1LDI1NSwyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwKLSAgICAyNTUsNDAsOCwwLDAsMCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsCi0gICAgMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDUsMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCwKLSAgICAxMTcsMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksCi0gICAgOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMCwKLSAgICAwLDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDQwLDUsCi0gICAgMCwwLDAsMTE3LDEzLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDExNCwxMDEsMTE1LDExNiwxMTcsMSwKLSAgICAwLDAsMCw5NSwxMTcsOSwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCwxMTcsMTEsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwKLSAgICAwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwyMDksMSwwLDAsMTE1LDIwLDAsMCwwLDAsNywxOCwxLDQsCi0gICAgMSwyNCwxLDM1LDEsNCwxLDMsMSwxNiwxLDE5LDEsMjEsMSwxMTcsCi0gICAgMTUsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsMTE3LDksMCwwLDAsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDUsMTE2LAotICAgIDEyMSwxMDUsMSwwLDAsMCw5OSwxLDAsMCwwLDEsMCwwLDAsMywKLSAgICAwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSw4MSwwLDAsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEwNyw1LDAsMTE0LAotICAgIDc3LDAsMTI0LDAsMCwxMDYsMywwLDEwMCw2LDAsMTMxLDEsMCwxMTUsNDYsCi0gICAgMCwxMDAsMywwLDEyNCwwLDAsMjMsMTI1LDAsMCwxMTAsMCwwLDExNiw0LAotICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwyLDAsMTQwLDAsMCwxMDAsNCwwLAotICAgIDExNiwwLDAsMTA2LDYsMCwxMzEsMSwxLDEsMTEwLDAsMCwxMDAsNSwwLAotICAgIDgzLDQwLDcsMCwwLDAsMTE3LDYxLDAsMCwwLDgwLDExNCwxMDUsMTEwLDExNiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwzMiwxMTYsMTExLDMyLAotICAgIDExNSwxMTYsMTAwLDEwMSwxMTQsMTE0LDMyLDEwNSwxMDIsMzIsNDUsMTE4LDQ3LDgwLDg5LDg0LAotICAgIDcyLDc5LDc4LDg2LDY5LDgyLDY2LDc5LDgzLDY5LDMyLDEwNSwxMTUsMzIsMTE2LDExNywKLSAgICAxMTQsMTEwLDEwMSwxMDAsMzIsMTExLDExMCw0NiwxMTcsMSwwLDAsMCwzNSwxMTcsNywKLSAgICAwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMTcsMiwwLDAsMCwzNSwKLSAgICAzMiwxMTcsNCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsNzgsNDAsMiwwLDAsMCwKLSAgICAxMTcsMSwwLDAsMCwzNSwxMTcsNywwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiw0MCw3LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICA1LDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsNywwLDAsMCwxMTgsMTAxLAotICAgIDExNCw5OCwxMTEsMTE1LDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExNiw5NywxMTQsMTE2LDExNSwKLSAgICAxMTksMTA1LDExNiwxMDQsMTE3LDUsMCwwLDAsMTEyLDExNCwxMDUsMTEwLDExNiwxMTcsNiwKLSAgICAwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw2LDAsMCwwLDExNSwxMTYsCi0gICAgMTAwLDEwMSwxMTQsMTE0LDQwLDMsMCwwLDAsMTE3LDcsMCwwLDAsMTA5LDEwMSwKLSAgICAxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDksMCwwLDAsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwKLSAgICAxMDUsMTE2LDEyMSwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLAotICAgIDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwyMjgsMSwwLAotICAgIDAsMTE1LDgsMCwwLDAsMCwyLDE4LDEsMTUsMSwxMywxLDExNywxNiwKLSAgICAwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsCi0gICAgOTcsMTAzLDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICAzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsCi0gICAgMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwKLSAgICAwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDM5LDAsMCwwLDgzLDEwMSwxMTYsMzIsOTUsOTUsCi0gICAgMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA0Niw5OSwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw0LDAsCi0gICAgMCwwLDMxLDAsMCwwLDExNSwxMDEsMCwwLDAsMTM2LDAsMCwxMjQsMCwKLSAgICAwLDEyNCwxLDAsMTQyLDAsMCwxMjUsMiwwLDExNiwwLDAsMTI0LDIsMCwKLSAgICAxMDAsMSwwLDEwMCwwLDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LAotICAgIDk3LDAsMTI0LDIsMCwxMDYsMiwwLDEyNCwyLDAsOTUsMywwLDExNiw0LAotICAgIDAsMTI0LDIsMCwxMDAsMiwwLDEzMSwyLDAsMTE1LDk3LDAsMTI0LDIsMCwKLSAgICAxMDYsMywwLDEwNiw1LDAsMTAwLDMsMCwxMzEsMSwwLDEwMCw0LDAsMjUsCi0gICAgMTI0LDIsMCw5NSwzLDAsMTEzLDk3LDAsMTEwLDAsMCwxMjQsMiwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSw5NSwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCw0MCw2LAotICAgIDAsMCwwLDExNyw3LDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw4LDAsMCwwLDk1LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDk1LDk1LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LAotICAgIDk3LDEwMywxMDEsOTUsOTUsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsCi0gICAgNDAsMywwLDAsMCwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNiwKLSAgICAwLDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwKLSAgICAxMTAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE5LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwKLSAgICAyMzgsMSwwLDAsMTE1LDEyLDAsMCwwLDAsMSwxNSwxLDI0LDEsMTIsCi0gICAgMSwxNSwxLDMxLDEsMTE3LDQwLDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LAotICAgIDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwKLSAgICAxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMTksCi0gICAgMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMSwwLDAsMCwKLSAgICAxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDExNSwKLSAgICAxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwyMzYsMSwwLDAsMTE1LDYsCi0gICAgMCwwLDAsMCwyLDE4LDcsMTMsMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwKLSAgICAxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDEsMCwwLDAsMCwwLAorICAgIDc4LDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwzMiw3OCwxMTEsMTE2LDczLDEwOSwxMTIsCisgICAgMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwKKyAgICAzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDEyMiwKKyAgICAzNiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsCisgICAgMzIsNzgsMTExLDExMCwxMDEsMTIyLDM3LDEyMywxMjUsMzIsMTEwLDExMSwxMTYsMzIsOTgsMTExLAorICAgIDExNiwxMTYsMTExLDEwOSw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwKKyAgICAxMTYsMTExLDExNCwxMjEsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMTQsMTE2LDAsMCwKKyAgICAwLDExNCwxMTUsMCwwLDAsMTIyLDI4LDEwMSwxMjAsMTEyLDEwMSw5OSwxMTYsMTAxLDEwMCwKKyAgICAzMiwxMTEsMTEwLDEwOCwxMjEsMzIsNTAsMzIsMTAwLDExMSwxMTYsMTE1LDMyLDEwNSwxMTAsMzIsCisgICAgMTIzLDMzLDExNCwxMjUsMTE0LDg0LDAsMCwwLDQxLDEyLDExNCw3LDAsMCwwLAorICAgIDExNCwxMjIsMCwwLDAsMTE0LDEyMywwLDAsMCwxMTQsMTI0LDAsMCwwLDExNCwKKyAgICAzOCwwLDAsMCwxMTQsMTI1LDAsMCwwLDIxOCwxMCw4Niw5NywxMDgsMTE3LDEwMSwKKyAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDQ3LDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsCisgICAgMTIxLDAsMCwwLDExNCwyOCwwLDAsMCwyMTgsMTUsODMsNzksODUsODIsNjcsCisgICAgNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDEsNSwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDEyOCwwLDAsMCw5MCwxNiwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsCisgICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDkwLDcsMTEyLDEyMSw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDExNCwxMjksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDE3LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwKKyAgICAxMTEsMTA5LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjA4LDEsMCwwLDExNSwyNCwwLDAsCisgICAgMCwwLDksMTgsMSwxNSwxLDE4LDEsMTgsMSwxMiwxLDMsMSwyNCwKKyAgICAxLDIxLDEsMywxLDIxLDEsMTksMSwxMTQsMTM1LDAsMCwwLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDEzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwxNjQsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLAorICAgIDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyMiwwLDEwMCwyLDAsODMsMTI0LDAsCisgICAgMCwxMDYsMSwwLDEwMCwzLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDEsMCwKKyAgICAxMjUsMiwwLDEyNSwzLDAsMTI0LDEsMCwxMiwxMTUsODEsMCwxMjQsMywwLAorICAgIDEwNiwyLDAsMTMxLDAsMCwxMDAsNywwLDEwMCw4LDAsMTMzLDIsMCwyNSwKKyAgICAxMDAsNiwwLDEwNywzLDAsMTE0LDg1LDAsMTI0LDAsMCw4MywxMjEsMTYsMCwKKyAgICAxMTYsMywwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNCwwLDg3LDExMCw0MCwwLAorICAgIDQsMTE2LDQsMCwxMTYsNSwwLDEwMiwyLDAsMTA3LDEwLDAsMTE0LDE0MywwLAorICAgIDEsMSwxLDEyNCwwLDAsMTAwLDIsMCwxMDAsOSwwLDEzMywyLDAsMjUsCisgICAgMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDExNiw2LDAsMTI0LDQsMCwxMzEsMSwKKyAgICAwLDExNCwxNjAsMCwxMjQsNCwwLDgzLDEyNCwwLDAsODMsNDEsMTAsMTIyLDE4OCwKKyAgICA2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsCisgICAgMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwKKyAgICA5NywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDEwNSwKKyAgICAxMDIsMzIsMTEyLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLDQxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwKKyAgICAxMDEsMTIwLDEwNSwxMTUsMTE2LDExNSwzMiwxMTIsMTE3LDExNCwxMDEsMTA4LDEyMSwzMiwxMDIsMTExLAorICAgIDExNCwzMiw5OCw5Nyw5OSwxMDcsMTE5LDk3LDExNCwxMDAsMTE1LDQ1LDk5LDExMSwxMDksMTEyLAorICAgIDk3LDExNiwxMDUsOTgsMTA1LDEwOCwxMDUsMTE2LDEyMSwzMiwxMDIsMTExLDExNCwxMCwzMiwzMiwKKyAgICAzMiwzMiw4MCwxMjEsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw2OSwxMjAsMTAxLDk5LDY3LAorICAgIDExMSwxMDAsMTAxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODcsMTA1LDExNiwxMDQsNzAsMTA1LDEwOCwKKyAgICAxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDQwLDQxLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgNjcsMzIsNjUsODAsNzMsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwKKyAgICAwLDc4LDExNCwxMTYsMCwwLDAsMjMzLDMsMCwwLDAsMTE0LDI5LDAsMCwKKyAgICAwLDkwLDIsMTEyLDEyMSwyMzMsMjUzLDI1NSwyNTUsMjU1LDIzMywyNTUsMjU1LDI1NSwyNTUsMTE0LAorICAgIDEzOCwwLDAsMCw0MSw3LDExNCwzMSwwLDAsMCwxMTQsMzIsMCwwLDAsCisgICAgMjE4LDUsMTA4LDExMSwxMTksMTAxLDExNCwxMTQsMTM1LDAsMCwwLDExNCwxMjQsMCwwLAorICAgIDAsMTE0LDEzMywwLDAsMCwxMTQsNDQsMCwwLDAsNDEsNSwyMTgsMTMsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwxMDQsOTAsNCwxMTQsMTAxLAorICAgIDExNSwxMTYsMTE0LDM2LDAsMCwwLDkwLDksMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAorICAgIDExMSwxMTAsMjE4LDExLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE1LAorICAgIDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLDEwNSwxMDgsMTAxLDIzMSwKKyAgICAxLDAsMCwxMTUsMjAsMCwwLDAsMCw3LDE4LDEsNCwxLDI0LDEsCisgICAgMzUsMSw0LDEsMywxLDE2LDEsMTksMSwyMSwxLDExNCwxNDIsMCwwLAorICAgIDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDYwLDAsMCwwLDEyMSwxOSwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMzEsMSwwLDEwNiwxLDAsMTI1LDEsMCw4NywxMTAsMjQsCisgICAgMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQ1LDAsMSwxLDEsMTAwLDEsCisgICAgMCwxMjUsMSwwLDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMiwwLDc5LAorICAgIDEyNSwxLDAsMTI0LDEsMCw4Myw0MSwzLDEyMiw1MSw2Nyw5NywxMDgsOTksMTE3LAorICAgIDEwOCw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTIsMTAxLAorICAgIDExNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLAorICAgIDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMDUsMTgyLAorICAgIDEsMCwwLDIzMywxMjgsMCwwLDAsNDEsMywxMTQsMzksMCwwLDAsMTE0LAorICAgIDQxLDAsMCwwLDExNCw0MCwwLDAsMCw0MSwyLDExNCwzNSwwLDAsMCwKKyAgICAxMTQsNDIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDEwLDk1LDk5LDk3LDEwOCw5OSw5NSwxMDksMTExLDEwMCwxMDEsCisgICAgMjUwLDEsMCwwLDExNSwxMiwwLDAsMCwwLDIsMywxLDE5LDEsMTMsCisgICAgMSwxMSwzLDEwLDEsMTE0LDE0NCwwLDAsMCwyMTgsOSwxMTgsMTAxLDExNCw5OCwKKyAgICAxMTEsMTE1LDEwNSwxMTYsMTIxLDExNCwyOSwwLDAsMCw5OSwxLDAsMCwwLDEsCisgICAgMCwwLDAsMywwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSwKKyAgICA4MSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwwLAorICAgIDEwNyw1LDAsMTE0LDc3LDAsMTI0LDAsMCwxMDYsMywwLDEwMCw2LDAsMTMxLAorICAgIDEsMCwxMTUsNDYsMCwxMDAsMywwLDEyNCwwLDAsMjMsMTI1LDAsMCwxMTAsCisgICAgMCwwLDExNiw0LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwyLDAsMTQwLDAsCisgICAgMCwxMDAsNCwwLDExNiwwLDAsMTA2LDYsMCwxMzEsMSwxLDEsMTEwLDAsCisgICAgMCwxMDAsNSwwLDgzLDQxLDcsMTIyLDYxLDgwLDExNCwxMDUsMTEwLDExNiwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwzMiwxMTYsMTExLDMyLDExNSwxMTYsCisgICAgMTAwLDEwMSwxMTQsMTE0LDMyLDEwNSwxMDIsMzIsNDUsMTE4LDQ3LDgwLDg5LDg0LDcyLDc5LAorICAgIDc4LDg2LDY5LDgyLDY2LDc5LDgzLDY5LDMyLDEwNSwxMTUsMzIsMTE2LDExNywxMTQsMTEwLAorICAgIDEwMSwxMDAsMzIsMTExLDExMCw0NiwyNTAsMSwzNSwyNTAsNywxMDUsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwzMiwxMjIsMiwzNSwzMiwxMTQsNTQsMCwwLDAsNzgsNDEsMiwxMTQsMTQ2LAorICAgIDAsMCwwLDExNCwxNDcsMCwwLDAsNDEsNywxMTQsNywwLDAsMCwxMTQsCisgICAgMTE3LDAsMCwwLDIxOCw3LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDExNCw5LDAsCisgICAgMCwwLDIxOCw1LDExMiwxMTQsMTA1LDExMCwxMTYsMTE0LDQ3LDAsMCwwLDIxOCw2LAorICAgIDExNSwxMTYsMTAwLDEwMSwxMTQsMTE0LDQxLDMsMjE4LDcsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywKKyAgICAxMDEsMTE0LDE0NSwwLDAsMCwxMTQsODAsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDExOCwxMDEsMTE0LAorICAgIDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDYsMiwwLDAsCisgICAgMTE1LDgsMCwwLDAsMCwyLDE4LDEsMTUsMSwxMywxLDExNCwxNTIsMCwKKyAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwKKyAgICAwLDAsMCwzLDAsMCwwLDExNSwzOCwwLDAsMCwxMDAsMSwwLDEzNSwKKyAgICAwLDAsMTAyLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTM0LDEsMCwxMjUsMSwKKyAgICAwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwKKyAgICAwLDgzLDQxLDQsMTIyLDI1Miw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwKKyAgICAxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwKKyAgICAxMTQsMTAxLDExMywxMTcsMTAxLDExNSwxMTYsMTAxLDEwMCwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLAorICAgIDMyLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDMyLDEwNCw5NywxMTAsCisgICAgMTAwLDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDIsMTA1LAorICAgIDExNCwxMTUsMTE2LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiw0MCwxMTUsMTAxLAorICAgIDEwOCwxMDIsNDEsMzIsMTA5LDExNywxMTUsMTE2LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDMyLAorICAgIDk1LDExMCw5NywxMDksMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTUsMTAxLDk5LDExMSwxMTAsMTAwLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwKKyAgICAxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDEsMTAwLDMyLAorICAgIDk3LDEwMyw5NywxMDUsMTEwLDExNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDUsMTE1LDExMSwxMTAsMzIsMTAyLDk3LDEwNSwxMDgsMTE1LAorICAgIDMyLDExNiwxMDQsMTAxLDExMCwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLAorICAgIDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsNzgsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgNSwwLDAsMCwzMSwwLDAsMCwxMTUsODMsMCwwLDAsMTI0LDEsMCwKKyAgICAxMDAsMCwwLDEwNyw4LDAsMTE0LDI0LDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwKKyAgICAxLDAsMTEwLDQwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA3LDMsCisgICAgMCwxMTQsNjQsMCwxMTYsMSwwLDEwMCwxLDAsMTI0LDEsMCwyMiwxMDAsMiwKKyAgICAwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwKKyAgICAxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDE0MiwyLDAsODMsCisgICAgNDEsMyw3OCwxMjIsMjMsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSw5NywxMTAsMTEwLAorICAgIDExMSwxMTYsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwzNywxMTUsMTE0LDY3LDAsMCwKKyAgICAwLDQxLDIsMTE0LDY3LDAsMCwwLDIxOCwxMSw3MywxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDY5LDExNCwxMTQsMTExLDExNCw0MSw0LDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLAorICAgIDAsMTE0LDgwLDAsMCwwLDExNCwxMDgsMCwwLDAsNDEsMSwyMTgsNiwxMDksCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTksOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywKKyAgICAxMTIsMTEyLDEwMSwxMTQsMjIsMiwwLDAsMTE1LDEwLDAsMCwwLDAsMSwxMiwKKyAgICAxLDEyLDEsMTUsMSwyNSwxLDEyMiw0MCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwKKyAgICAxMTAsOTcsMTA5LDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsOTksCisgICAgMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwKKyAgICAxMTQsNDEsMSwxMTQsNjUsMCwwLDAsNDEsMiwxMTQsMTU0LDAsMCwwLDExNCwKKyAgICAxNTUsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTU0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCwxMSw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCisgICAgMTA5LDEwMSwxNCwyLDAsMCwxMTUsNiwwLDAsMCwwLDgsMjEsNiwxMywKKyAgICAxLDExNCwxNTYsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsCisgICAgMCwwLDAsMywwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwKKyAgICAxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LAorICAgIDEsMCwxMTYsMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LAorICAgIDEsMCw4Myw0MSwzLDEyMiw0OSw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwKKyAgICAzMiwxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMCwKKyAgICA5NywxMDksMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk4LAorICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDU4LDAsCisgICAgMCwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw3LDAsMTE0LDQ1LAorICAgIDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLAorICAgIDEwMCwyLDAsMTI0LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsCisgICAgMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDQxLDMsNzgsMTIyLAorICAgIDI5LDEyMywzMywxMTQsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsOTgsCisgICAgMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDY3LAorICAgIDAsMCwwLDQxLDQsMTE0LDcsMCwwLDAsMjE4LDIwLDk4LDExNywxMDUsMTA4LAorICAgIDExNiwxMDUsMTEwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExMCw5NywxMDksMTAxLDExNSwKKyAgICAxMTQsMTUzLDAsMCwwLDExNCw0NywwLDAsMCw0MSwyLDExNCw3MSwwLDAsCisgICAgMCwyMTgsOCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDEsMSwyMTgsMywxMDIsCisgICAgMTIwLDExMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjUsOTUsMTE0LAorICAgIDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwKKyAgICAxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwzNCwyLDAsMCwxMTUsOCwwLDAsMCwKKyAgICAwLDEsMTUsMSwxOCwxLDEyLDEsMTIyLDUyLDk1LDExNCwxMDEsMTEzLDExNywxMDUsCisgICAgMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNDYsNjAsMTA4LDExMSw5OSwKKyAgICA5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsCisgICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsMSwKKyAgICAxMTQsNjUsMCwwLDAsNDEsMiwxMTQsMTU5LDAsMCwwLDExNCwxNjAsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTU5LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxNyw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywKKyAgICAxMDUsMTA4LDExNiwxMDUsMTEwLDMyLDIsMCwwLDExNSw2LDAsMCwwLDAsMiwKKyAgICAxOCw1LDEzLDEsMTE0LDE2MSwwLDAsMCw5OSwxLDAsMCwwLDAsMCwKICAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LAogICAgIDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LAogICAgIDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLAotICAgIDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsMTE3LDM4LDAsMCwwLAotICAgIDgzLDEwMSwxMTYsMzIsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwzMiwxMTEsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDQsCi0gICAgMCwwLDAsNCwwLDAsMCwzMSwwLDAsMCwxMTUsNDksMCwwLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxNDIsMSwwLDEyNSwKLSAgICAzLDAsMTE2LDAsMCwxMjQsMywwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNDUsCi0gICAgMCwxMjQsMCwwLDEyNCwzLDAsOTUsMSwwLDExMCwwLDAsMTI0LDMsMCwKLSAgICA4Myw0MCwyLDAsMCwwLDc4LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDcsMCwwLDAsCi0gICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNiwwLAotICAgIDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMjUxLDEsCi0gICAgMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LDEsMTIsMSwxMTcsCi0gICAgMzgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0Niw2MCwKLSAgICAxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwxLDAsMCwwLDExNywKLSAgICA1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDMsCi0gICAgMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLAotICAgIDAsMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAyNDksMSwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwxMTcsCi0gICAgMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwKLSAgICAxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsCi0gICAgMTE3LDQyLDMsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwxMTUsMTAxLDEwOCwxMDEsOTksMTE2LDEwNSwKLSAgICAxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LAotICAgIDk3LDExNiwxMDEsMTAwLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDUsMTE1LAotICAgIDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LAotICAgIDEwMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDExMCw5NywxMDksMTAxLDQ2LDMyLDg0LDEwNCwxMDEsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwKLSAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwKLSAgICAxMTUsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNSwxMjEsCi0gICAgMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwxMTYsMzIsOTcsMTA4LDExNCwxMDEsOTcsMTAwLDEyMSwzMiwxMDEsMTIwLDEwNSwxMTUsCi0gICAgMTE2LDExNSwzMiwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMTksNDQsMzIsMTE2LDEwNCwxMDEsCi0gICAgMTEwLDMyLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDEwLDMyLDMyLDMyLDMyLDEwNSwKLSAgICAxMTUsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsMTE1LDExNiwzMiwKLSAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCw0NCwzMiw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDk1LDk1LDMyLDEwNSwxMTUsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDEwOCwKLSAgICAxMDIsNDQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTUsMTAxLDExNiwzMiw5Nyw5OSwKLSAgICA5OSwxMTEsMTE0LDEwMCwxMDUsMTEwLDEwMywxMDgsMTIxLDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDQxLDMyLAotICAgIDEwNSwxMTUsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDQxLDMyLDExOSwxMDUsMTA4LDEwOCwKLSAgICAzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwMiwxMTEsCi0gICAgMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTUsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwKLSAgICAxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywxMTYsMTAxLDEwMCwKLSAgICAzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDAsNDEsMzIsCi0gICAgMTAwLDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsMTE2LDMyLDExOSwxMTEsMTE0LAotICAgIDEwNywzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMzIsCi0gICAgMTEyLDExMSwxMTUsMTE2LDQ1LDEwOCwxMTEsOTcsMTAwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDczLDEwMiwzMiw5NywxMTAsMzIsMTAxLDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsOTksMTE0LDEwMSwKLSAgICA5NywxMTYsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKLSAgICAxMDUsMTE2LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMTE1LDExNyw5OCwxMTUsMTAxLDExMywKLSAgICAxMTcsMTAxLDExMCwxMTYsMTA4LDEyMSwzMiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMzIsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywKLSAgICAxMTYsMTExLDExNCwzMiw5NywxMTUsMTE1LDExNywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDEwMSwxMDAsMzIsMTAyLAotICAgIDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiw5NywxMDcsMTAxLDExNSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiw5NywxMTUsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5OSwxMTEsMTEwLDEwMCwzMiwKLSAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMjUsMCwwLDAsCi0gICAgMzEsMCwwLDAsMTE1LDI1NCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LAotICAgIDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwxMjQsNCwwLDEwMCwwLAotICAgIDAsMTA3LDksMCwxMjUsNSwwLDEyNCw1LDAsMTE1LDE2OCwwLDExNiw0LDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTAwLDMsMCwxMjQsNCwwLDk1LAotICAgIDYsMCwxMjQsNCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDYwLDEyNCwKLSAgICAwLDAsMTI0LDQsMCw5NSw3LDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsNiwwLDg3LDExMCwyNCwwLDQsMTE2LAotICAgIDksMCwxMTYsMTAsMCwxMDIsMiwwLDEwNywxMCwwLDExNCwxMjQsMCwxLDEsCi0gICAgMSw4OSwxMTMsMTc3LDAsODgsMTI0LDYsMCwxMTQsMTQzLDAsMTI0LDEsMCwxMjQsCi0gICAgNCwwLDk1LDExLDAsMTEzLDE3NywwLDEyNCwxLDAsMTA2LDEyLDAsMTAwLDEsCi0gICAgMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI0LDQsMCw5NSwxMSwwLDExMCw5LAotICAgIDAsMTAwLDMsMCwxMjQsNCwwLDk1LDYsMCwxMjIsNjAsMCwxMjEsMjMsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDQsMCwxMjQsMiwwLDEyNCwzLDAsMTQyLAotICAgIDIsMCw4Myw4NywxMTAsMzAsMCwxLDEsMSwxMjQsNSwwLDExNSwyMjgsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCw2MSwxMTAsMCwwLDEzMCwwLDAsCi0gICAgODksMTEwLDEsMCw4OCw4NywxMDAsMCwwLDEwMCw0LDAsMTI0LDQsMCw5NSwKLSAgICA2LDAsODgsMTAwLDAsMCw4Myw0MCw1LDAsMCwwLDc4LDExNywxLDAsCi0gICAgMCwwLDQ2LDEwNSwwLDAsMCwwLDg0LDcwLDQwLDE0LDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLDAsMCwKLSAgICA3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTA1LDExMCwxMDMsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywKLSAgICAxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsCi0gICAgMTQsMCwwLDAsNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDk1LDk1LDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLAotICAgIDExMCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSw0MCw3LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LAotICAgIDYsMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOSwwLDAsMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LAotICAgIDExMSw5NywxMDAsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsMTEyLDEwMSwxMTQsMjIsMiwwLDAsMTE1LDQ0LDAsMCwwLDAsMSwxOCwKLSAgICAxLDEyLDEsNiw0LDEyLDMsOSwxLDEzLDEsOSwxLDMsMSwxOSwKLSAgICAxLDE5LDEsNSwyLDYsMSwxMiwyLDI1LDIsOSwxLDYsMiwyMywKLSAgICAxLDMsMSw2LDEsMTMsMSwxMiwyLDExNyw1MiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwKLSAgICAxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjUsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwKLSAgICAwLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwKLSAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQsMiwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICAxOCwxOCwzMywxMywxLDExNywxNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwKLSAgICAxMTUsMzgsMCwwLDAsMTAwLDMsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzNCwxLDAsMTI1LDEsMCwxMTYsMSwwLDEyNCwxLDAsCi0gICAgMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCw0LDAsMCwwLAotICAgIDExNywyNTIsMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LAotICAgIDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTE0LAotICAgIDEwMSwxMTMsMTE3LDEwMSwxMTUsMTE2LDEwMSwxMDAsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDk3LDExMCwzMiwxMDQsOTcsMTEwLDEwMCwKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsCi0gICAgMTE1LDExNiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsNDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDQxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwzMiw5NSwKLSAgICAxMTAsOTcsMTA5LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAotICAgIDEwMSw5OSwxMTEsMTEwLDEwMCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LAotICAgIDExNSwxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTA5LDExMiw5NywxMTQsMTAxLDEwMCwzMiw5NywKLSAgICAxMDMsOTcsMTA1LDExMCwxMTUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICAxMTEsMTA5LDExMiw5NywxMTQsMTA1LDExNSwxMTEsMTEwLDMyLDEwMiw5NywxMDUsMTA4LDExNSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMTAsMzIsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDUsMCwKLSAgICAwLDAsMzEsMCwwLDAsMTE1LDgzLDAsMCwwLDEyNCwxLDAsMTAwLDAsCi0gICAgMCwxMDcsOCwwLDExNCwyNCwwLDEyNCwwLDAsMTA2LDEsMCwxMjUsMSwwLAotICAgIDExMCw0MCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNywzLDAsMTE0LAotICAgIDY0LDAsMTE2LDIsMCwxMDAsMSwwLDEyNCwxLDAsMjIsMTAwLDIsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsCi0gICAgMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxNDIsMiwwLDgzLDQwLDMsCi0gICAgMCwwLDAsNzgsMTE3LDIzLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMzcsMTE1LAotICAgIDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDMsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LAotICAgIDExNyw2LDAsMCwwLDEwNywxMTksOTcsMTE0LDEwMywxMTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsNiwwLDAsMCwxMDksMTAxLDExNiwxMDQsMTExLDEwMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTksMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNjcsMiwwLDAsMTE1LDEwLAotICAgIDAsMCwwLDAsMSwxMiwxLDEyLDEsMTUsMSwyNSwxLDExNyw0MCwwLAotICAgIDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSw0Niw2MCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNzgsNDAsMiwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCw5NSwxMTksCi0gICAgMTE0LDk3LDExMiw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwOSwxMDEsMTE2LAotICAgIDEwNCwxMTEsMTAwLDExNywxOSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLAotICAgIDQwLDEsMCwwLDAsMTE3LDYsMCwwLDAsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw1OSwyLDAsMCwxMTUsNiwwLDAsMCwwLDgsMjEsNiwxMywKLSAgICAxLDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsCi0gICAgMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsCi0gICAgMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsCi0gICAgMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsCi0gICAgMCwwLDAsMTE3LDQ5LDAsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsCi0gICAgOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsCisgICAgMCwxLDEyNCwxLDAsODMsNDEsMywxMjIsNDcsNjgsMTAxLDk5LDExMSwxMTQsOTcsCisgICAgMTE2LDExMSwxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LAorICAgIDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0Niw5OSwyLDAsMCwwLDAsMCwKICAgICAwLDAsMiwwLDAsMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwKLSAgICAwLDAsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNywwLDExNCwKKyAgICAwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNSwKICAgICA0NSwwLDExNiwyLDAsMTAwLDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsCiAgICAgMCwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MCwzLDAsCi0gICAgMCwwLDc4LDExNywyNywwLDAsMCwxMjMsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwKLSAgICAxMTYsMzIsOTcsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsNCwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsMjAsMCwwLDAsOTgsMTE3LAotICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE1LDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQwLDIsMCwKLSAgICAwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDEwMiwxMjAsMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNSwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwKLSAgICAxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDc5LDIsMCwwLDExNSw4LAotICAgIDAsMCwwLDAsMSwxNSwxLDE4LDEsMTIsMSwxMTcsNTIsMCwwLDAsCi0gICAgOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LAotICAgIDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LAotICAgIDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksMTE0LDk3LAotICAgIDExMiwxMTIsMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgMTE3LDI1LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwKLSAgICAwLDAsMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwKLSAgICA5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3NywyLDAsMCwxMTUsNiwwLDAsCi0gICAgMCwwLDIsMTgsNSwxMywxLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywKLSAgICAxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywwLAotICAgIDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsCi0gICAgMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwKLSAgICAwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsMywwLDAsMCwxMTcsCi0gICAgNDcsMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwKLSAgICAzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICA0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNSw0NSwwLDExNiwyLDAsMTAwLAotICAgIDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwxLAotICAgIDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwwLAotICAgIDEyNCwxLDAsMTMxLDIsMCw4Myw0MCwzLDAsMCwwLDc4LDExNywyNSwwLAotICAgIDAsMCwxMjMsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTcsOSwwLDAsMCwxMDUsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQwLDIsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLAotICAgIDEwMiwxMjAsMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNCwwLDAsMCw5NSwKLSAgICAxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LAotICAgIDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDkwLDIsMCwwLDExNSw4LDAsMCwwLAotICAgIDAsMSwxNSwxLDE4LDEsMTIsMSwxMTcsNTAsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0Niw2MCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwKLSAgICA5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwKLSAgICAxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI0LDAsMCwwLAorICAgIDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMyw3OCwKKyAgICAxMjIsMjcsMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwKKyAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNjcsMCwKKyAgICAwLDAsNDEsNCwxMTQsMTA2LDAsMCwwLDIxOCw5LDEwNSwxMTUsOTUsMTAyLDExNCwKKyAgICAxMTEsMTIyLDEwMSwxMTAsMTE0LDE1MywwLDAsMCwxMTQsNDcsMCwwLDAsNDEsMiwKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDE1OCwwLDAsMCw0MSwxLDExNCwxNTksMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI0LDk1LDExNCwxMDEsCisgICAgMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LDExNCwKKyAgICA5NywxMTIsMTEyLDEwMSwxMTQsNDUsMiwwLDAsMTE1LDgsMCwwLDAsMCwxLAorICAgIDE1LDEsMTgsMSwxMiwxLDEyMiw1MCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCisgICAgMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSwKKyAgICA2Miw0Niw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwKKyAgICAxMDEsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQxLDEsMTE0LDY1LDAsMCwKKyAgICAwLDQxLDIsMTE0LDE1OSwwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDQxLDEsMTE0LDE1OSwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsCiAgICAgOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICA5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDEsMCwKLSAgICAwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDg4LDIsMCwwLDExNSw2LDAsMCwwLDAsMiwxOCw1LDEzLDEsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwKLSAgICAwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDIsCi0gICAgMCwxMjUsMywwLDEyNCwyLDAsMTAwLDMsMCwxMDcsOCwwLDExNCw4MywwLAotICAgIDExNiwyLDAsMTI0LDMsMCwxMzEsMSwwLDExNCw4MywwLDEwMCwxLDAsMTI1LAotICAgIDQsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDQsMCwxMDYsNSwwLDEyNCwzLAotICAgIDAsMTAwLDIsMCwyNSwxMzEsMSwwLDExNiw2LDAsMTMxLDIsMCwxLDExMCwKLSAgICAwLDAsMTI0LDIsMCw4Myw0MCw0LDAsMCwwLDExNyw4NiwwLDAsMCwKLSAgICA4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsCi0gICAgOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMjEsCi0gICAgMzIsMTAwLDEwMSwxMDgsMTAxLDEwMyw5NywxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDExMSwxMCwzMiwKLSAgICAzMiwzMiwzMiwxMTUsMTAxLDEwOCwxMDIsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDAsNDEsNDYsMTE3LDQ0LDAsMCwwLDc4LDExMSwxMTYsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwxMDMsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsCi0gICAgMTE0LDEyMSwzMiwxMjMsMTI1LDU4LDMyLDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTA1LDAsMCwwLDAsNzgsNDAsNywwLAotICAgIDAsMCwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsCi0gICAgMTA4LDEwMSwxMTAsMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsCi0gICAgMTE1LDExNyw0LDAsMCwwLDExOSw5NywxMTQsMTEwLDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDEzLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgODcsOTcsMTE0LDExMCwxMDUsMTEwLDEwMyw0MCw1LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsOCwwLAotICAgIDAsMCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDExNywzLDAsMCwwLDEwOSwKLSAgICAxMTUsMTAzLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE3LAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMTUsMTA0LDEwNSwxMDksOTksMiwwLDAsMTE1LDEwLDAsMCwwLDAsNiwyMSwKLSAgICAxLDI0LDEsNiwxLDMyLDEsMTE3LDE3LDAsMCwwLDk1LDEwMiwxMDUsMTEwLAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsNiwwLDAsMCw2NiwwLAotICAgIDAsMCwxMTUsMTczLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLAotICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwKLSAgICAxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsCi0gICAgNCwwLDEwMCwxNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMSwwLDEzMSwxLAotICAgIDAsOTAsNywwLDEwMSw0LDAsMTAxLDgsMCwxMDEsOSwwLDEwMSwxMCwwLAotICAgIDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDEsNCwwLDEwMSwxMCwwLDEwMCw4LAotICAgIDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMiwwLAotICAgIDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsOTAsMTMsMCwxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMiwKLSAgICAwLDEwMCwxMywwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDE0LDAsCi0gICAgMTAwLDE0LDAsODMsNDAsMTUsMCwwLDAsMTE3LDE1LDAsMCwwLDY2LDExNywKLSAgICAxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTQ0LDAsCi0gICAgMCwwLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDQzLDIsMCwwLDExNSw2LDAsMCwwLDAsMiwxOCw1LDEzLDEsMTE0LAorICAgIDE2NCwwLDAsMCw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsCisgICAgMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMiwwLAorICAgIDEyNSwzLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LAorICAgIDEsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgzLDAsMTAwLDIsMCwxMjUsNCwKKyAgICAwLDExNiwyLDAsMTA2LDMsMCwxMjQsNCwwLDEwNiw0LDAsMTI0LDMsMCwKKyAgICAxMDAsMywwLDI1LDEzMSwxLDAsMTE2LDUsMCwxMzEsMiwwLDEsMTEwLDAsCisgICAgMCwxMjQsMiwwLDgzLDQxLDQsMTIyLDE1NSw4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsCisgICAgMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMjEsMzIsMTAwLDEwMSwxMDgsMTAxLDEwMyw5NywKKyAgICAxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDEwOCwxMDIsCisgICAgNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNDEsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCisgICAgMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDMyLDEwNSwKKyAgICAxMTAsMzIsMTAyLDk3LDExOCwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDc4LDEyMiw0NCw3OCwxMTEsMTE2LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDEwNSwxMTAsMTAzLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTIzLAorICAgIDEyNSw1OCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTA1LDExMCwxMDUsCisgICAgMTE2LDk1LDk1LDExNCw4NCwwLDAsMCw0MSw2LDIxOCwxMSwxMDIsMTA1LDExMCwxMDAsCisgICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMzEsMCwwLDAsMjE4LDksOTUsMTE5LAorICAgIDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDIxOCw0LDExOSw5NywxMTQsMTEwLDExNCw0NywwLAorICAgIDAsMCwyMTgsMTMsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywxMTQsMTEwLDEwNSwxMTAsCisgICAgMTAzLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMjE4LDYsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwyMTgsOCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDIxOCwKKyAgICAzLDEwOSwxMTUsMTAzLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDU0LDIsMCwwLDExNSwxMCwwLDAsMCwwLAorICAgIDEwLDIxLDEsMjQsMSw2LDEsMzIsMSwxMTQsMTcyLDAsMCwwLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDkzLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsMCwKKyAgICAwLDEzMSwyLDAsMTI1LDIsMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsMCwKKyAgICAxMjUsMywwLDEyNCwxLDAsMTE2LDIsMCwxMDYsMywwLDEwNyw2LDAsMTE0LAorICAgIDc5LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsMTI1LDQsMCwxMjQsCisgICAgMywwLDEwNiw0LDAsMTI0LDQsMCwxMzEsMSwwLDEsMTE2LDIsMCwxMDYsCisgICAgMywwLDEyNCwxLDAsMjUsODMsMTI0LDMsMCwxMDYsNSwwLDEzMSwwLDAsCisgICAgODMsMTAwLDEsMCw4Myw0MSwyLDEyMiwxMjgsNzYsMTExLDk3LDEwMCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMDUsCisgICAgMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LAorICAgIDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLAorICAgIDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAxLAorICAgIDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSwKKyAgICA5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsNDEsNiwyMTgsMTYsMTE1LDExMiwKKyAgICAxMDEsOTksOTUsMTAyLDExNCwxMTEsMTA5LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDEyLAorICAgIDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMTE0LDcsMCwwLAorICAgIDAsMTE0LDczLDAsMCwwLDIxOCw0LDEwMSwxMjAsMTAxLDk5LDIxOCw0LDEwOCwxMTEsCisgICAgOTcsMTAwLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMjE4LDQsCisgICAgMTE1LDExMiwxMDEsOTksMjE4LDcsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDIxOCw2LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxNyw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksNzEsMiwwLDAsMTE1LDE0LDAsMCwwLAorICAgIDAsNiwxNSwxLDEyLDEsMTUsMSwxMywxLDEzLDEsMTEsMiwxMTQsMTgwLAorICAgIDAsMCwwLDk5LDQsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwKKyAgICAxOSwwLDAsMCw2NywwLDAsMCwxMTUsMjQzLDEsMCwwLDEwNSwwLDAsCisgICAgMTI1LDQsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMzEsMCwxMjQsCisgICAgMiwwLDEyNCw0LDAsMTAwLDIsMCw2MCwxMTAsNiwwLDEwMCwzLDAsMTI1LAorICAgIDIsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsNjIsMCwxMjQsMywKKyAgICAwLDEyNCw0LDAsMTAwLDQsMCw2MCwxMTAsMCwwLDEyNCwwLDAsMTAwLDEsCisgICAgMCwxMDAsNSwwLDEzMywyLDAsMjUsMTI1LDUsMCwxMjQsMCwwLDEwMCw1LAorICAgIDAsMTAwLDYsMCwxMzMsMiwwLDI1LDEyNSw2LDAsMTI0LDAsMCwxMDAsNiwKKyAgICAwLDEwMCw3LDAsMTMzLDIsMCwyNSwxMjUsNywwLDEyNCw1LDAsMTE2LDAsCisgICAgMCwxMDcsMywwLDExNCwxNjgsMCwxMDAsOCwwLDEwNiwxLDAsMTI0LDIsMCwKKyAgICAxMjQsNSwwLDEzMSwyLDAsMTI1LDgsMCwxMTYsMiwwLDEyNCw4LDAsMTMxLAorICAgIDEsMCwxLDExNiwzLDAsMTI0LDgsMCwxMjQsNCwwLDE0MSwxLDAsMTMwLAorICAgIDEsMCwxMTAsMTE2LDAsMTE2LDQsMCwxMjQsNiwwLDEzMSwxLDAsMTAwLDUsCisgICAgMCwxMDcsMywwLDExNCwyMjYsMCwxMDAsOSwwLDEwNiwxLDAsMTI0LDIsMCwKKyAgICAxMzEsMSwwLDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLDEzMSwxLDAsMSwKKyAgICAxMTYsNSwwLDEyNCw4LDAsMTMxLDEsMCwxMzAsMSwwLDExMCw1OCwwLDExNiwKKyAgICA0LDAsMTI0LDcsMCwxMzEsMSwwLDEwMCw1LDAsMTA3LDMsMCwxMTQsMjgsCisgICAgMSwxMDAsMTAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsOCwwLAorICAgIDExNiwyLDAsMTI0LDgsMCwxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOCwwLAorICAgIDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDcsCisgICAgOSwwLDExNCwyMjksMSwxMjEsMjAsMCwxMTYsNiwwLDEyNCwxLDAsMTAwLDExLAorICAgIDAsMjUsMTMxLDEsMCwxMjUsOSwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwKKyAgICAxMDcsMTAsMCwxMTQsODAsMSwxLDEsMSw4OSwxMTAsNjIsMCw4OCwxMTYsOCwKKyAgICAwLDEyNCw2LDAsMTMxLDEsMCwxMjQsOSwwLDEwNywzLDAsMTE0LDE0MiwxLAorICAgIDEwMCwxMiwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LAorICAgIDIsMCwxMjQsOCwwLDEzMSwxLDAsMSwxMTYsMywwLDEyNCw4LDAsMTI0LAorICAgIDQsMCwxNDEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjEsMTgsMCwxMjQsMSwKKyAgICAwLDEwMCwxMywwLDI1LDEwMCwxNCwwLDY0LDEyNSwxMCwwLDg3LDExMCwxOCwwLAorICAgIDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTgwLDEsMSwxLDEsODksMTEzLDIyOSwKKyAgICAxLDg4LDExNiw4LDAsMTI0LDcsMCwxMzEsMSwwLDEyNCwxMCwwLDEwNywzLAorICAgIDAsMTE0LDIyOSwxLDExNiwzLDAsMTAwLDEyLDAsMTA2LDEsMCwxMjQsMiwwLAorICAgIDEzMSwxLDAsMTI0LDQsMCwxNDEsMSwwLDEzMCwxLDAsMTEzLDIyOSwxLDExMCwKKyAgICAwLDAsMTI0LDAsMCwxMDAsNywwLDEwMCwxLDAsMTMzLDIsMCwyNSw4MywKKyAgICA0MSwxNSw5NywxMjIsMSwwLDAsODYsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDQsMTAxLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMDIsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCw0NSwxMDUsMTEwLDMyLDk4LDEyMSwxMTYsMTAxLAorICAgIDk5LDExMSwxMDAsMTAxLDMyLDk3LDEwMyw5NywxMDUsMTEwLDExNSwxMTYsMzIsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsNDAsMTA1LDEwMiwxMCwzMiwzMiwKKyAgICAzMiwzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDQxLDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsOTgsMTIxLDExNiwxMDEsOTksCisgICAgMTExLDEwMCwxMDEsMzIsMTE2LDEwNCw5NywxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwzMiwKKyAgICA5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk5LDExMSwxMDksMTEyLAorICAgIDEwNSwxMDgsMTAxLDQwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsCisgICAgMTExLDExNiwxMDQsMTAxLDExNCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLAorICAgIDk3LDExNCwxMDEsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMDQsOTcsCisgICAgMTEwLDk5LDEwMSwzMiwxMDEsMTE0LDExNCwxMTEsMTE0LDMyLDExNCwxMDEsMTEyLDExMSwxMTQsMTE2LAorICAgIDEwNSwxMTAsMTAzLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwKKyAgICAxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLAorICAgIDExNywxMDksOTgsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTExLDExNCwxMTQsMTAxLAorICAgIDk5LDExNiwzMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKKyAgICAxMDAsMTAxLDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiwKKyAgICAxMTYsMTExLDMyLDk4LDEwMSwzMiwxMTUsMTE2LDk3LDEwOCwxMDEsNDYsMzIsNjksNzksNzAsCisgICAgNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwKKyAgICAxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDUsMTE1LAorICAgIDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsMTE2LDExMSwzMiw5OCwxMDEsMTAsMzIsMzIsMzIsCisgICAgMzIsMTE2LDExNCwxMTcsMTEwLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDc4LDExNCw2NywwLDAsMCwxMjIsMTAsNjAsOTgsMTIxLDExNiwxMDEsOTksMTExLAorICAgIDEwMCwxMDEsNjIsMTE0LDM1LDAsMCwwLDExNCwxMiwwLDAsMCwyMzMsOCwwLAorICAgIDAsMCwyMzMsMTIsMCwwLDAsMTIyLDMwLDk4LDk3LDEwMCwzMiwxMDksOTcsMTAzLAorICAgIDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwKKyAgICAxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsMTIyLDQzLDExNCwxMDEsOTcsOTksMTA0LDEwMSwxMDAsCisgICAgMzIsNjksNzksNzAsMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwzMiwxMTQsMTAxLDk3LDEwMCwxMDUsCisgICAgMTEwLDEwMywzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDEwNSwxMTAsMzIsCisgICAgMTIzLDMzLDExNCwxMjUsMTIyLDQ4LDExNCwxMDEsOTcsOTksMTA0LDEwMSwxMDAsMzIsNjksNzksCisgICAgNzAsMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwzMiwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwKKyAgICAxMTUsMTA1LDEyMiwxMDEsMzIsMTExLDEwMiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwNSwKKyAgICAxMTAsMzIsMTIzLDMzLDExNCwxMjUsMjE4LDUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMjIsMjYsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTUsMTE2LDk3LDEwOCwxMDEsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsMTIzLDMzLDExNCwxMjUsMjE4LDQsMTE1LDEwNSwxMjIsMTAxLDEwOCwKKyAgICAzLDAsMCwwLDI1NSwxMjcsMjU1LDEyNywzLDAsNDEsOSwyMTgsMTIsNzcsNjUsCisgICAgNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsMTE0LDQ3LDAsMCwwLDExNCwKKyAgICAxNTIsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsMzEsMCwwLDAsMjE4LDgsCisgICAgNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDExNCwxNCwwLDAsMCwxMTQsNzksMCwKKyAgICAwLDAsMTE0LDE5LDAsMCwwLDQxLDExLDExNCw1MywwLDAsMCwyMTgsMTIsCisgICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE0LDY3LDAsMCwKKyAgICAwLDExNCwzNSwwLDAsMCw5MCwxMSwxMDEsMTIwLDk5LDk1LDEwMCwxMDEsMTE2LDk3LAorICAgIDEwNSwxMDgsMTE1LDkwLDUsMTA5LDk3LDEwMywxMDUsOTksOTAsMTMsMTE0LDk3LDExOSw5NSwKKyAgICAxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDkwLDgsMTE0LDk3LDExOSw5NSwxMTUsCisgICAgMTA1LDEyMiwxMDEsMTE0LDE1MSwwLDAsMCwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICA5NSwxMDksMTE2LDEwNSwxMDksMTAxLDIxOCwxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwKKyAgICAxMDUsMTIyLDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMjUsOTUsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTgsMTIxLAorICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTA0LDEwMSw5NywxMDAsMTAxLDExNCw4NywyLDAsCisgICAgMCwxMTUsNzYsMCwwLDAsMCwxMSw2LDEsMTIsMSwxMywzLDYsMSwKKyAgICAxMiwxLDEzLDEsMTYsMSwxNiwxLDE2LDEsMTIsMSwxOCwxLDEwLDEsCisgICAgMTgsMSwxOCwxLDE1LDEsMTAsMSwxNSwxLDE4LDEsMTUsMSwxMCwxLAorICAgIDE1LDEsMTIsMSwzLDEsMjAsMSwxMywxLDUsMiwxOCwxLDE1LDEsCisgICAgMTAsMSwxOCwxLDMsMSwxOCwxLDEzLDEsNSwyLDE4LDEsMTUsMSwKKyAgICAxNSwxLDExNCwxOTAsMCwwLDAsOTksNCwwLDAsMCwwLDAsMCwwLAorICAgIDUsMCwwLDAsNiwwLDAsMCw2NywwLDAsMCwxMTUsMTE1LDAsMCwKKyAgICAwLDExNiwwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCwKKyAgICAxMTYsMiwwLDEyNCw0LDAsMTE2LDMsMCwxMzEsMiwwLDExNCw3OCwwLDExNiwKKyAgICA0LDAsMTAwLDEsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMjQsMywwLDEwMCwKKyAgICAyLDAsMTA3LDksMCwxMTQsNzQsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDQsCisgICAgMCwxMjQsMywwLDEzMSwyLDAsMSwxMTAsMCwwLDEyNCw0LDAsODMsMTE2LAorICAgIDcsMCwxMDAsMywwLDEwNiw4LDAsMTI0LDIsMCwxMzEsMSwwLDEwMCw0LAorICAgIDAsMTI0LDEsMCwxMDAsNSwwLDEyNCwyLDAsMTMxLDEsMiwxMzAsMSwwLAorICAgIDEwMCwyLDAsODMsNDEsNiwxMjIsNjAsNjcsMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMzIsCisgICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsOTcsMTE1LDMyLDExNCwxMDEsMTE2LDExNywKKyAgICAxMTQsMTEwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk1LDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCisgICAgMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDEwNCwxMDEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDAsNDEsNDYsMTIyLDIxLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LAorICAgIDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsNzgsMTIyLDIzLDc4LDExMSwKKyAgICAxMTAsNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsCisgICAgMzIsMTIzLDMzLDExNCwxMjUsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSwKKyAgICA5LDIxOCw3LDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsOTAsNSwxMDgsMTExLDk3LDEwMCwKKyAgICAxMTUsMjE4LDEwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMjE4LDEwLDk1LAorICAgIDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTQsMTUyLDAsMCwwLDExNCwxMDYsCisgICAgMCwwLDAsOTAsMTYsOTUsMTAyLDEwNSwxMjAsOTUsOTksMTExLDk1LDEwMiwxMDUsMTA4LAorICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsMTUzLDAsMCwwLDExNCw0NywwLDAsMCw0MSwKKyAgICA1LDExNCw1MywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE0MCwwLDAsMCwKKyAgICAxMTQsMTQxLDAsMCwwLDIxOCw0LDk5LDExMSwxMDAsMTAxLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5NSw5OSwxMTEsMTA5LAorICAgIDExMiwxMDUsMTA4LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxNDIsMiwwLAorICAgIDAsMTE1LDE2LDAsMCwwLDAsMiwxNSwxLDE1LDEsMTMsMSwxMiwxLAorICAgIDE5LDEsNCwyLDE4LDEsMTE0LDE5NSwwLDAsMCwxMTQsODQsMCwwLDAsCisgICAgOTksMywwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsNzYsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLAorICAgIDEzMSwxLDAsMTI1LDMsMCwxMjQsMywwLDEwNiwyLDAsMTE2LDMsMCwxMjQsCisgICAgMSwwLDEzMSwxLDAsMTMxLDEsMCwxLDEyNCwzLDAsMTA2LDIsMCwxMTYsCisgICAgMywwLDEyNCwyLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDMsMCwxMDYsCisgICAgMiwwLDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDEsCisgICAgMCwxLDEyNCwzLDAsODMsNDEsMSwxMjIsODAsNjcsMTExLDEwOSwxMTIsMTA1LDEwOCwKKyAgICAxMDEsMzIsOTcsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLAorICAgIDEwNSwxMTAsMTE2LDExMSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTExLAorICAgIDExNCwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDExNywxMTYsMzIsMTE2LDExMSwKKyAgICAzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw0NSw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsCisgICAgMTAsMzIsMzIsMzIsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDQxLDYsMjE4LDksOTgsMTIxLAorICAgIDExNiwxMDEsOTcsMTE0LDExNCw5NywxMjEsMTE0LDE4NSwwLDAsMCwyMTgsNiwxMDEsMTIwLAorICAgIDExNiwxMDEsMTEwLDEwMCwxMTQsMTcsMCwwLDAsMTE0LDE5MSwwLDAsMCw5MCw1LAorICAgIDEwMCwxMTcsMTA5LDExMiwxMTUsNDEsNCwxMTQsMTk0LDAsMCwwLDExNCwxODMsMCwwLAorICAgIDAsMTE0LDE4OSwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LDk5LDExMSwxMDAsCisgICAgMTAxLDk1LDExNiwxMTEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTU0LDIsMCwKKyAgICAwLDExNSwxMCwwLDAsMCwwLDMsMTIsMSwxOSwxLDE5LDEsMjIsMSwKKyAgICAxMTQsMTk4LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsCisgICAgMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDg5LDAsMCwwLDEwMCwKKyAgICAxLDAsMTAwLDIsMCwxMDgsMCwwLDEyNSwxLDAsMTE2LDEsMCwxMDYsMiwKKyAgICAwLDEyNCwwLDAsMTMxLDEsMCwxMDYsMywwLDEyNSwyLDAsMTI0LDEsMCwKKyAgICAxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDExNiwxLDAsMTA2LAorICAgIDUsMCwxMDAsMiwwLDEwMCwzLDAsMTMxLDIsMCwxMjUsNCwwLDEyNCw0LAorICAgIDAsMTA2LDYsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsMCwxMDAsMSwwLAorICAgIDI1LDEzMSwxLDAsMTMxLDEsMCw4Myw0MSw0LDEyMiwxMjEsNjgsMTAxLDk5LDExMSwKKyAgICAxMDAsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsCisgICAgMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsCisgICAgMTAxLDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODUsMTEwLAorICAgIDEwNSwxMTgsMTAxLDExNCwxMTUsOTcsMTA4LDMyLDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSwzMiwKKyAgICAxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsCisgICAgMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsNDYsCisgICAgMTAsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLDc4LDg0LDQxLDcsMjE4LDgsCisgICAgMTE2LDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTQsNDksMCwwLDAsOTAsNyw2NiwKKyAgICAxMjEsMTE2LDEwMSwxMTUsNzMsNzksOTAsOCwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsCisgICAgOTAsMTUsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiw5NSwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwKKyAgICAxMDMsOTAsMjUsNzMsMTEwLDk5LDExNCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDEwOCw3OCwxMDEsCisgICAgMTE5LDEwOCwxMDUsMTEwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDIxOCw2LDEwMCwxMDEsCisgICAgOTksMTExLDEwMCwxMDEsNDEsNSwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwKKyAgICAxMjEsMTE2LDEwMSwxMTUsMTE0LDE5OSwwLDAsMCw5MCwyMSwxMTUsMTExLDExNywxMTQsOTksCisgICAgMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsCisgICAgMjE4LDgsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDkwLDE1LDExMCwxMDEsMTE5LDEwOCwKKyAgICAxMDUsMTEwLDEwMSw5NSwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTMsMTAwLDEwMSw5OSwxMTEsCisgICAgMTAwLDEwMSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDE2NCwyLDAsMCwxMTUsMTAsMCwKKyAgICAwLDAsMCw1LDEyLDEsMTgsMSwxNSwxLDE4LDEsMTE0LDIwMywwLDAsCisgICAgMCw5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwzNSwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTUsMSwwLDAsMTE2LDAsMCwxMjQsMCwKKyAgICAwLDEwMCwxLDAsMTAwLDAsMCwxMzEsMywwLDEyNSwxLDAsMTE2LDEsMCwKKyAgICAxMjQsMSwwLDEwMCwyLDAsMTMxLDIsMCwxMTQsNzQsMCwxMjEsMTcsMCwxMjQsCisgICAgMSwwLDEwNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDgzLDg3LDExMyw3NCwwLAorICAgIDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNzAsMCwxLDEsMSw4OSwxMTMsNzQsCisgICAgMCw4OCwxMTAsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDQsMCwxMjUsMiwKKyAgICAwLDg3LDExMCwxOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTA3LDAsMSwKKyAgICAxLDEsODksMTEwLDI5LDAsODgsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsCisgICAgMTE0LDEzNiwwLDExNiw2LDAsMTI0LDIsMCwxMzEsMSwwLDEwNiwyLDAsMTMxLAorICAgIDAsMCw4MywxMjEsMTMsMCwxMjQsMCwwLDEwNiw3LDAsMTI1LDMsMCw4NywKKyAgICAxMTAsMjQsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE3NSwwLDEsMSwxLAorICAgIDEwMCwzLDAsMTI1LDMsMCw4OSwxMTAsMSwwLDg4LDEyMSwxMywwLDEyNCwwLAorICAgIDAsMTA2LDgsMCwxMjUsNCwwLDg3LDExMCw1OSwwLDQsMTE2LDUsMCwxMDcsCisgICAgMTAsMCwxMTQsMjUwLDAsMSwxLDEsMTI0LDEsMCwxMDAsMCwwLDEwNyw4LAorICAgIDAsMTE0LDIzMCwwLDEwMCw0LDAsMTA2LDksMCwxMjQsMywwLDEzMSwxLDAsCisgICAgODMsMTAwLDUsMCwxMDYsOSwwLDEyNCwzLDAsMTI0LDEsMCwxMzEsMiwwLAorICAgIDgzLDg5LDExMCwxNywwLDg4LDEwMCw2LDAsMTA2LDksMCwxMjQsMywwLDEyNCwKKyAgICA0LDAsMTMxLDIsMCw4MywxMDAsMCwwLDgzLDQxLDcsNzgsMjE4LDEwLDk1LAorICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMjE4LDExLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDk1LDExNCwxMDEsMTEyLDExNCwyNTAsMSw2MywxMjIsMTMsNjAsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNjIsMTIyLDIwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEyMywzMywxMTQsMTI1LDQxLDYyLDEyMiwyMywKKyAgICA2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMDIsMTE0LDExMSwKKyAgICAxMDksMzIsMTIzLDMzLDExNCwxMjUsNjIsNDEsMTAsMTE0LDYyLDAsMCwwLDExNCw2MCwKKyAgICAwLDAsMCwxMTQsMjA1LDAsMCwwLDIxOCw5LDY5LDEyMCw5OSwxMDEsMTEyLDExNiwKKyAgICAxMDUsMTExLDExMCwyMTgsOCw5NSw5NSwxMTUsMTEyLDEwMSw5OSw5NSw5NSwyMTgsMTQsNjUsCisgICAgMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMTc0LDAsCisgICAgMCwwLDExNCw1NywwLDAsMCwyMTgsOCw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsCisgICAgOTUsMTE0LDQ3LDAsMCwwLDQxLDUsMTE0LDE3OSwwLDAsMCwxMTQsMTY5LDAsCisgICAgMCwwLDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxMzEsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxNzgsMiwKKyAgICAwLDAsMTE1LDQ2LDAsMCwwLDAsMiwxOCwxLDE1LDQsMywxLDE3LAorICAgIDEsMTMsMSw4LDEsMywxLDEzLDEsMTMsMSw1LDIsMTIsMSwxNiwKKyAgICA0LDMsMSwxMywxLDEzLDEsMTEsMSwzLDEsMTMsMSwxMywxLDEyLAorICAgIDEsMTMsMiwyMSwyLDExNCwyMTEsMCwwLDAsOTksMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsCisgICAgNTIsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsCisgICAgMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMCwzLDAsMTAwLAorICAgIDQsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsCisgICAgMCw5MCw1LDAsMTAwLDcsMCw4Myw0MSw4LDIxOCwxNyw5NSwxMDUsMTEwLDExNSwKKyAgICAxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMjUsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwKKyAgICAxMjQsMSwwLDEwNiwxLDAsMTI0LDAsMCw5NSwyLDAsMTAwLDAsMCw4MywKKyAgICA0MSwxLDc4LDQxLDMsMjE4LDcsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDIwOCwKKyAgICAwLDAsMCwyMTgsNSw5NSwxMTUsMTEyLDEwMSw5OSw0MSwyLDExNCw3MSwwLDAsCisgICAgMCwxMTQsMTc5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw3MiwwLDAsMCwyMTYsMiwwLDAsMTE1LDQsCisgICAgMCwwLDAsMCwxLDksMSwxMjIsMjYsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwKKyAgICAxMDgsMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwNSwxMTAsMTA1LAorICAgIDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKKyAgICAzLDAsMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsMCwxMDAsMSwwLAorICAgIDEyNCwwLDAsMTA2LDAsMCw5NSwxLDAsMTI0LDAsMCwxMDYsMiwwLDExNiwKKyAgICAzLDAsMTA2LDQsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDUsMCw2MCwxMDAsCisgICAgMCwwLDgzLDQxLDIsNzgsODQsNDEsNiwxMTQsMjE0LDAsMCwwLDIxOCwxMywKKyAgICA5NSwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwNSwxMTAsMTAzLDExNCwyMTMsMCwKKyAgICAwLDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw2NywwLDAsCisgICAgMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNzUsMCwwLDAsMjIwLDIsMCwwLAorICAgIDExNSw0LDAsMCwwLDAsNCwxMiwxLDEyMiwyNyw5NSwxMDUsMTEwLDExNSwxMTYsCisgICAgOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsNDYsOTUsOTUsMTAxLAorICAgIDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCwxNywwLDAsMCw3MSwwLDAsMCwxMTUsMTIxLDAsMCwwLAorICAgIDEyMiwxMDEsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDIsMCwxMTYsMSwwLDEwMCwKKyAgICAxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwxLDAsNjgsMTMxLDEsMCwxMzEsCisgICAgMSwwLDExNCw3OCwwLDEyMSwxNywwLDExNiwyLDAsMTA2LDMsMCwxMjQsMiwKKyAgICAwLDEwNiw0LDAsNjEsODcsMTEzLDEwMCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwKKyAgICAxMTQsNzQsMCwxLDEsMSw4OSwxMTMsMTAwLDAsODgsMTEwLDIyLDAsMTE2LDYsCisgICAgMCwxMDAsMywwLDEyNCwyLDAsMTA2LDQsMCwxMjQsMiwwLDEwNiw3LDAsCisgICAgMTMxLDMsMCwxLDg3LDEwMCwwLDAsMTAwLDQsMCwxMjQsMCwwLDEwNiwwLAorICAgIDAsOTUsOCwwLDg4LDEwMCwwLDAsODMsNDEsNSw3OCw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwwLDAsCisgICAgMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LAorICAgIDEsMCwxMDAsMCwwLDEwNyw5LDAsODYsMSwxMTMsMywwLDEwMCwwLDAsCisgICAgODMsNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwKKyAgICAxMTQsNzYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDc3LDAsMCwwLDIzMCwyLDAsMCwxMTUsMiwwLAorICAgIDAsMCw2LDAsMTIyLDQ1LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDEwMSwxMDAsCisgICAgOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsCisgICAgNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsCisgICAgMTEyLDExNCw2MiwxMjIsMTgsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTIzLDMzLDExNCwxMjUsCisgICAgMzIsMzUsMzIsMTIzLDMzLDExNCwxMjUsNzAsNDEsOSwxMTQsMjE0LDAsMCwwLDExNCwKKyAgICA3OCwwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LDY3LAorICAgIDAsMCwwLDExNCw3OSwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCwxNjksMCwKKyAgICAwLDAsMTE0LDIxNSwwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsODAsCisgICAgMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsODEsMCwwLDAsMjI3LDIsMCwwLAorICAgIDExNSwxOCwwLDAsMCwwLDEsMywxLDksMSwyNSwxLDMsMSwxNywKKyAgICAxLDEzLDEsOCwyLDI2LDIsMTIyLDI2LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsCisgICAgMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLDEwNSwKKyAgICAxMTYsOTUsOTUsNzgsNDEsNiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLAorICAgIDExNCw1OCwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDc1LDAsMCwwLDExNCwKKyAgICA4MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjEyLDAsMCwwLDIxNCwyLDAsCisgICAgMCwxMTUsNiwwLDAsMCwxMiwyLDEyLDQsMTIsNywxMTQsMjEyLDAsMCwKKyAgICAwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgsMCwKKyAgICAwLDAsNjQsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMDEsMCwwLDkwLDEsCisgICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLAorICAgIDEwMCwzLDAsMTAwLDQsMCwxMDAsMywwLDEwMCw1LDAsMTAwLDMsMCwxMDAsCisgICAgNiwwLDEwMCw3LDAsMTMyLDAsMyw5MCw0LDAsMTAwLDgsMCwxMDAsOSwKKyAgICAwLDEzMiwwLDAsOTAsNSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsCisgICAgOTAsNiwwLDEwMSw3LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsCisgICAgMSwwLDkwLDgsMCwxMDEsOCwwLDEwNiw5LDAsMTAwLDE0LDAsMTAwLDEzLAorICAgIDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywwLDEwMCwxNSwwLAorICAgIDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLAorICAgIDE3LDAsMTAwLDE4LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAxLDExLAorICAgIDAsMTA2LDksMCwxMDAsMTksMCwxMDAsMTgsMCwxMzIsMCwwLDEzMSwxLDAsCisgICAgOTAsMTEsMCwxMDAsMywwLDgzLDQxLDIwLDIxOCwxMCw3NywxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDgzLDExMiwxMDEsOTksOTcsMjA4LDUsMCwwLDg0LDEwNCwxMDEsMzIsMTE1LDExMiwKKyAgICAxMDEsOTksMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTEsMTE0LDMyLAorICAgIDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDIsCisgICAgMTExLDExNCwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiw2NSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTE1LDExMiwxMDEsOTksCisgICAgMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwKKyAgICAxMTEsMTE0LDMyLDEwNSwxMTAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMDUsMTExLDExMCwzMiw5NywKKyAgICA5OCwxMTEsMTE3LDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwKKyAgICAzMiwzMiw3MCwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDEwMCw5NywxMTYsOTcsMzIsOTcsCisgICAgMTE1LDExNSwxMTEsOTksMTA1LDk3LDExNiwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsCisgICAgMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDQsMzIsMTE3LDExNSwxMDEsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzksMTE1LDEwLDMyLDMyLDMyLDMyLAorICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTEwLDk3LAorICAgIDEwOSwxMDEsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiw5Nyw5OCwxMTUsMTExLDEwOCwKKyAgICAxMTcsMTE2LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDMyLDMyLDk2LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDEwLAorICAgIDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLAorICAgIDEwOCwxMTEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQ2LDMyLDMyLDk2LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTYsMzIsMTA1LDExNSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLAorICAgIDEwLDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDEwNSwxMTAsNDYsMzIsMzIsCisgICAgODQsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwKKyAgICAxMTQsMTA1LDExOCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsCisgICAgOTcsMTA5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMDUsMTE1LDk1LDExMiw5NywKKyAgICA5OSwxMDcsOTcsMTAzLDEwMSw5NiwzMiwxMDAsMTAxLDExNiwxMDEsMTE0LDEwOSwxMDUsMTEwLDEwMSwKKyAgICAxMTUsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKKyAgICAxMDUsMTE1LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwxMDEsMTAwLDMyLDk3LDMyLAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDExMCwKKyAgICAxMTEsMTE2LDQ2LDMyLDMyLDc5LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDUsMTE1LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMDIsMTA4LDEwMSw5OSwxMTYsMTAxLAorICAgIDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsOTYsOTUsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsOTUsOTYsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDk2LDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDk2LDMyLDEwNSwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMzIsMTA4LDExMSw5OSwKKyAgICA5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTksMTA0LAorICAgIDEwNSw5OSwxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMDUsMTAyLDMyLDExNiwKKyAgICAxMDQsOTcsMTE2LDMyLDEwNSwxMTAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMDUsMTExLDExMCwzMiwKKyAgICAxMDUsMTE1LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwxMDEsNDYsMzIsMzIsODcsCisgICAgMTA0LDEwMSwxMTAsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDEwNSwxMTUsMTAsCisgICAgMzIsMzIsMzIsMzIsMTE1LDEwMSwxMTYsNDQsMzIsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsMzIsCisgICAgMTE5LDEwNSwxMDgsMTA4LDMyLDEwOSw5NywxMTYsOTksMTA0LDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDk2LDEwNCw5NywxMTUsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsOTYsMzIsCisgICAgMTA1LDExMCwxMDAsMTA1LDk5LDk3LDExNiwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLDk3LAorICAgIDMyLDExNSwxMTIsMTAxLDk5LDM5LDExNSwzMiwzNCwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzNCwKKyAgICAzMiwxMTQsMTAxLDEwMiwxMDgsMTAxLDk5LDExNiwxMTUsMzIsOTcsMzIsMTA4LDExMSw5OSw5NywKKyAgICAxMTYsMTA1LDExMSwxMTAsNDYsMTAsMzIsMzIsMzIsMzIsODcsMTA0LDEwMSwxMTAsMzIsMTE2LAorICAgIDEwNCwxMDUsMTE1LDMyLDEwNSwxMTUsMzIsODQsMTE0LDExNywxMDEsNDQsMzIsOTYsOTUsOTUsCisgICAgMTAyLDEwNSwxMDgsMTAxLDk1LDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LAorICAgIDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAorICAgIDEwNSwxMTUsMzIsMTE1LDEwMSwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsOTksOTcsCisgICAgOTksMTA0LDEwMSwxMDAsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk5LAorICAgIDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LAorICAgIDEwNCwxMDEsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LAorICAgIDEwMSw0NCwzMiwxMDUsMTAyLDMyLDk3LDExMCwxMjEsNDYsMzIsMzIsNzMsMTE2LDEwLDMyLAorICAgIDMyLDMyLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwxMTUsMTEyLDExMSwxMTAsMTAwLDExNSwzMiwxMTYsCisgICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDk2LDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LAorICAgIDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw5NiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsCisgICAgOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsOTYsMzIsCisgICAgMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMzIsCisgICAgMTExLDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTA1LDEwMSwxMTUsMzIsCisgICAgMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE5LDEwNCwKKyAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsOTgsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDMyLDMyLDczLDEwMiwzMiwxMTUsMTAxLDExNiwKKyAgICA0NCwzMiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTUsMTA0LDExMSwKKyAgICAxMTcsMTA4LDEwMCwzMiw5OCwxMDEsMTAsMzIsMzIsMzIsMzIsODQsMTE0LDExNywxMDEsNDUsCisgICAgNDUsOTcsMTEwLDEwMCwzMiw3MCw5NywxMDgsMTE1LDEwMSwzMiwxMTEsMTE2LDEwNCwxMDEsMTE0LAorICAgIDExOSwxMDUsMTE1LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MCw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsNDAsMTA5LDk3LDEyMSwKKyAgICA0MSwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDExNSw0NiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsMTE1LDExMiwxMDEsOTksMTAsMzIsMzIsCisgICAgMzIsMzIsMTA0LDk3LDExNSwzMiw5NywzMiwxMTAsMTExLDExMCw0NSw3OCwxMTEsMTEwLDEwMSwKKyAgICAzMiwxMTgsOTcsMTA4LDExNywxMDEsMzIsMTA1LDExMCwzMiw5NiwxMTUsMTE3LDk4LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LAorICAgIDExNiwxMDUsMTExLDExMCwxMTUsOTYsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMTAsMzIsMzIsMzIsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsMTE5LDEwNSwKKyAgICAxMDgsMTA4LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTUsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE1LDMyLDExMiw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzksMTEwLDEwOCwxMjEsMzIsCisgICAgMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDMyLDQwLDExNSwxMDEsMTAxLDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTcsOTgsOTksNDYsNzcsMTAxLDExNiw5Nyw4MCwKKyAgICA5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk3LDk4LDk5LDQ2LAorICAgIDgwLDk3LDExNiwxMDQsNjksMTEwLDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDEsCisgICAgMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMjEsMzIsNzcsCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDMyLDEwNSwxMTAsMTE1LDExNiw5NywxMTAsCisgICAgOTksMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwyMTgsNiwxMTEsMTE0LDEwNSwxMDMsCisgICAgMTA1LDExMCw3OCwyMTgsMTIsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTUsMTE2LDk3LDExNiwKKyAgICAxMDEsMjE4LDEwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDMsMCwKKyAgICAwLDAsMywwLDAsMCw2LDAsMCwwLDIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDc5LDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsCisgICAgMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMjQsMywwLDEyNCwwLDAsOTUsCisgICAgMiwwLDEyNCw0LDAsMTI0LDAsMCw5NSwzLDAsMTI0LDUsMCwxMTQsNDgsCisgICAgMCwxMDMsMCwwLDExMCwzLDAsMTAwLDAsMCwxMjQsMCwwLDk1LDQsMCwKKyAgICAxMDAsMSwwLDEyNCwwLDAsOTUsNSwwLDEwMCwwLDAsMTI0LDAsMCw5NSwKKyAgICA2LDAsMTAwLDAsMCw4Myw0MSwyLDc4LDcwLDQxLDcsMTE0LDY3LDAsMCwKKyAgICAwLDExNCwxNjksMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMjE4LDAsMCwwLAorICAgIDIxOCwyNiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LAorICAgIDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsMjE4LDEzLDk1LDExNSwKKyAgICAxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSw5NywxMTYsMTE2LDExNCwyMTgsNyw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDEwMCw0MSw2LDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLDAsCisgICAgMTE0LDE2OSwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMTgsMCwwLDAsMTE0LAorICAgIDIxOSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsNzIsMCwwLDAsMjIsMywwLDAsMTE1LDE0LDAsMCwKKyAgICAwLDAsMiw5LDEsOSwxLDksMSw5LDEsMjEsMyw5LDEsMTIyLAorICAgIDE5LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0Niw5NSw5NSwxMDUsMTEwLAorICAgIDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTUzLDAsMCwwLDEwMCwxLAorICAgIDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMDAsMiwwLAorICAgIDEwNiwwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwxLDAsMTAzLDIsMCwxMjUsCisgICAgMSwwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDc5LAorICAgIDAsMTI0LDEsMCwxMDYsNCwwLDEwMCwzLDAsMTA2LDAsMCwxMjQsMCwwLAorICAgIDEwNiwzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTEwLDAsMCwxMjQsMCwwLAorICAgIDEwNiw1LDAsMTAwLDAsMCwxMDcsOSwwLDExNCwxMjIsMCwxMjQsMSwwLDEwNiwKKyAgICA0LDAsMTAwLDQsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDUsMCwxMzEsMSwKKyAgICAwLDEzMSwxLDAsMSwxMTAsMCwwLDEwMCw1LDAsMTA2LDAsMCwxMjQsMCwKKyAgICAwLDEwNiw2LDAsMTA2LDcsMCwxMDAsNiwwLDEwNiw4LDAsMTI0LDEsMCwKKyAgICAxMzEsMSwwLDEzMSwyLDAsODMsNDEsNyw3OCwxMjIsOSwxMTAsOTcsMTA5LDEwMSwKKyAgICA2MSwxMjMsMzMsMTE0LDEyNSwxMjIsMTEsMTA4LDExMSw5NywxMDAsMTAxLDExNCw2MSwxMjMsMzMsCisgICAgMTE0LDEyNSwxMjIsMTEsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsNjEsMTIzLDMzLDExNCwxMjUsMTIyLAorICAgIDI5LDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksCisgICAgMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSw2MSwxMjMsMTI1LDEyMiw2LAorICAgIDEyMywxMjUsNDAsMTIzLDEyNSw0MSwxMjIsMiw0NCwzMiw0MSw5LDExNCw0NywwLDAsCisgICAgMCwxMTQsNjcsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMjE3LDAsMCwwLAorICAgIDIxOCw2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTE0LDIyMCwwLDAsMCwyMTgsOSw5NSwKKyAgICA5NSw5OSwxMDgsOTcsMTE1LDExNSw5NSw5NSwxMTQsNTcsMCwwLDAsMTE0LDI2LDAsCisgICAgMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCw4MCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTAxLDAsCisgICAgMCwwLDM0LDMsMCwwLDExNSwxNiwwLDAsMCwwLDEsMTUsMSwyMSwKKyAgICAxLDE1LDEsMjgsMSwxNSwxLDYsMSwyMiwxLDEyMiwxOSw3NywxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LAorICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEzLDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwxNDUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDEyNSwyLDAsMTIxLDEwNywwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNiwKKyAgICAxLDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwxLAorICAgIDAsMTA2LDIsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMCwwLDEwNiwzLDAsCisgICAgMTI0LDEsMCwxMDYsMywwLDEwNywyLDAsMTExLDExNCwwLDEyNCwyLDAsMTI0LAorICAgIDEsMCwxMDYsMCwwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LDQsCisgICAgMCwxMjQsMSwwLDEwNiw0LDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwKKyAgICAxMDYsNSwwLDEyNCwxLDAsMTA2LDUsMCwxMDcsMiwwLDgzLDg3LDExMCwyMiwKKyAgICAwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMTQwLDAsMSwxLDEsMTAwLDEsCisgICAgMCw4Myw4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsMiw3OCw3MCw0MSwKKyAgICA3LDExNCwyMjAsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxNjksMCwwLDAsCisgICAgMTE0LDIxNywwLDAsMCwyMTgsNiw5OSw5Nyw5OSwxMDQsMTAxLDEwMCwyMTgsMTIsMTA0LAorICAgIDk3LDExNSw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTQsMjA5LDAsMCwwLAorICAgIDQxLDMsMTE0LDcxLDAsMCwwLDIxOCw1LDExMSwxMTYsMTA0LDEwMSwxMTQsMjE4LDQsCisgICAgMTE1LDEwOSwxMTUsMTA4LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCw2LDk1LDk1LDEwMSwxMTMsOTUsOTUsNDQsMywwLDAsMTE1LAorICAgIDIwLDAsMCwwLDAsMSw5LDEsMywxLDE4LDEsMTgsMSwxOCwxLAorICAgIDE1LDEsMTgsMSwyMCwxLDEzLDEsMTIyLDE3LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgODMsMTEyLDEwMSw5OSw0Niw5NSw5NSwxMDEsMTEzLDk1LDk1LDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDEyLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxNTgsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwwLDAsMTA3LDgsCisgICAgMCwxMTQsMTUxLDAsMTI0LDAsMCwxMDYsMSwwLDEwMCwwLDAsMTA3LDksMCwKKyAgICAxMTQsMTUxLDAsMTI0LDAsMCwxMDYsMiwwLDExNCwxNTEsMCwxMjQsMCwwLDEwNiwKKyAgICAxLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMTYsNSwKKyAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMTQsMTEyLDAsMTIxLDE5LDAsMTE2LDYsMCwKKyAgICAxMjQsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwwLDAsODcsMTEzLDE0NSwwLAorICAgIDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTA4LDAsMSwxLDEsODksMTEzLDE0NSwKKyAgICAwLDg4LDExMywxNDgsMCwxMjQsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMTYsOCwKKyAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMTQsMTQ4LDAsMTI0LDEsMCwxMjQsMCwwLAorICAgIDk1LDAsMCwxMTMsMTQ4LDAsMTEzLDE1MSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCisgICAgMCwwLDgzLDQxLDEsNzgsNDEsOSwxMTQsMjIyLDAsMCwwLDExNCwyMTcsMCwKKyAgICAwLDAsMTE0LDIyMSwwLDAsMCwyMTgsOCwxMDEsMTEwLDEwMCwxMTUsMTE5LDEwNSwxMTYsCisgICAgMTA0LDIxOCw1LDExNiwxMTcsMTEyLDEwOCwxMDEsMTE0LDEzNCwwLDAsMCwxMTQsMTMyLDAsCisgICAgMCwwLDExNCwxMjQsMCwwLDAsMjE4LDE3LDY2LDg5LDg0LDY5LDY3LDc5LDY4LAorICAgIDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQxLDIsMTE0LDcxLDAsMCwKKyAgICAwLDExNCwxMzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDIyNSwwLDAsMCw1NiwzLDAsMCwxMTUsMjIsCisgICAgMCwwLDAsMCwyLDE1LDEsMjQsMSw5LDEsMjEsMSwzLDEsMTksCisgICAgMSwxMywxLDgsMSwyMSwxLDE4LDEsMTIyLDE3LDc3LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsODMsMTEyLDEwMSw5OSw0Niw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwxMywwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwKKyAgICAwLDAsODMsNDEsMSw3OCw0MSwxLDExNCwyMjIsMCwwLDAsNDEsMiwxMTQsCisgICAgNzEsMCwwLDAsMTE0LDIyNSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjI1LDAsMCwwLDcwLDMsMCwKKyAgICAwLDExNSwyLDAsMCwwLDAsMiw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw0NiwwLAorICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzNSwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCwKKyAgICAxMDAsMywwLDI1LDgzLDEyNCwwLDAsMTA2LDEsMCw4MywxMDAsMSwwLDgzLAorICAgIDQxLDQsMTIyLDMyLDg0LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLDk3LDExNCwKKyAgICAxMDEsMTEwLDExNiw0Niw3OCwxMTQsMTE2LDAsMCwwLDExNCw4NCwwLDAsMCw0MSwKKyAgICAzLDExNCwyMjAsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwzMiwwLDAsMCwKKyAgICA0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsNiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDc0LDMsCisgICAgMCwwLDExNSw2LDAsMCwwLDAsMywxNSwxLDIwLDIsMTIyLDE3LDc3LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDgzLDQxLDEsNzgsNDEsMSwxMTQsMjIxLDAsMCwwLDQxLDEsMTE0LDcxLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwyMjYsMCwwLDAsODIsMywwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICAyLDEyMiwyMyw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsMTA0LDk3LAorICAgIDExNSw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAxOSwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjQsMCwwLAorICAgIDk1LDEsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMiwyMTgsNCw5OCwxMTEsCisgICAgMTExLDEwOCwxMTQsMjIxLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDIxOCw1LAorICAgIDExOCw5NywxMDgsMTE3LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMjI2LDAsMCwwLDg2LDMsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsMiw0MSwxMiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLAorICAgIDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsMCwwLDExNCwKKyAgICAxMDEsMCwwLDAsMTE0LDIyOSwwLDAsMCwyMTgsOCwxMTIsMTE0LDExMSwxMTIsMTAxLAorICAgIDExNCwxMTYsMTIxLDExNCwyMjUsMCwwLDAsMjE4LDYsMTE1LDEwMSwxMTYsMTE2LDEwMSwxMTQsCisgICAgMTE0LDIzMywwLDAsMCwxMTQsMjI2LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMTYsCisgICAgMCwwLDAsMjQxLDIsMCwwLDExNSwyMCwwLDAsMCwxMiwzNSw2LDIsCisgICAgMTUsMSwxNSwxMSwxMiwxMCwxMiwxMiwxOCwxNCwyMSw0LDE4LDgsMTgsNCwKKyAgICAxMTQsMjE2LDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDIxOSwwLDAsMCw5OSwKKyAgICAyLDAsMCwwLDIsMCwwLDAsNSwwLDAsMCwxNSwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTkzLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMDAsCisgICAgMSwwLDEzMSwyLDAsMTE0LDgzLDAsMTI0LDMsMCwxMDAsMiwwLDEwNyw4LAorICAgIDAsMTE0LDQzLDAsMTE2LDEsMCwxMjQsMCwwLDEwMCwzLDAsMTI0LDEsMCwKKyAgICAxMzEsMSwxLDgzLDEyNCwzLDAsMTE0LDU1LDAsMTAzLDAsMCwxMTAsMywwLAorICAgIDEwMCwyLDAsMTI1LDQsMCwxMTYsMSwwLDEyNCwwLDAsMTAwLDMsMCwxMjQsCisgICAgMSwwLDEwMCw0LDAsMTI0LDQsMCwxMzEsMSwyLDgzLDEyNCwzLDAsMTAwLAorICAgIDIsMCwxMDcsOCwwLDExNCwxNjgsMCwxMTYsMCwwLDEyNCwxLDAsMTAwLDUsCisgICAgMCwxMzEsMiwwLDExNCwxNTksMCwxMjEsMTksMCwxMjQsMSwwLDEwNiwyLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDEyNSwzLDAsODcsMTEzLDE2NSwwLDQsMTE2LDMsCisgICAgMCwxMDcsMTAsMCwxMTQsMTU1LDAsMSwxLDEsMTAwLDIsMCwxMjUsMywwLAorICAgIDg5LDExMywxNjUsMCw4OCwxMTMsMTY4LDAsMTAwLDYsMCwxMjUsMywwLDExMCwwLAorICAgIDAsMTE2LDQsMCwxMjQsMCwwLDEyNCwxLDAsMTAwLDcsMCwxMjQsMiwwLAorICAgIDEwMCw1LDAsMTI0LDMsMCwxMzEsMiwyLDgzLDQxLDgsMTIyLDUzLDgyLDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE1LDExMiwKKyAgICAxMDEsOTksMzIsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTgsOTcsMTE0LDEwNSwKKyAgICAxMTEsMTE3LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCisgICAgMTAwLDExNSw0NiwyMTgsMTIsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksCisgICAgMTAxLDc4LDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMjE5LDAsMCwKKyAgICAwLDcwLDExNCwyMTcsMCwwLDAsNDEsNSwxMTQsNjAsMCwwLDAsMjE4LDIzLAorICAgIDExNSwxMTIsMTAxLDk5LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LAorICAgIDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LDIxOSwwLDAsMCwxMTQsMTUzLDAsMCwKKyAgICAwLDExNCwyMTYsMCwwLDAsNDEsNSwxMTQsNjcsMCwwLDAsMTE0LDE2OSwwLAorICAgIDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMTksMCwwLDAsOTAsNiwxMTUsMTAxLAorICAgIDk3LDExNCw5OSwxMDQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDE3MywwLDAsMCw5MSwzLDAsMCwxMTUsMjgsMCwwLAorICAgIDAsMCwyLDE1LDEsMTIsMSwxNiwxLDE4LDEsMTUsMSw3LDIsMTIsCisgICAgMSwxNSwxLDMsMSwxOSwxLDEzLDEsMTQsMyw5LDIsMTE0LDE3MywwLAorICAgIDAsMCwxMTQsMTY5LDAsMCwwLDExNCwyMjAsMCwwLDAsOTksMiwwLDAsCisgICAgMCwyLDAsMCwwLDksMCwwLDAsMTksMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDExMCwxLDAsMCwxMjQsMSwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsCisgICAgNzksMCwxMDAsMiwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMiwwLDEwMCwzLAorICAgIDAsMTMxLDIsMCwxMTQsNzksMCwxMjEsMTksMCwxMjQsMiwwLDEwNiwxLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDEyNSwxLDAsODcsMTEzLDc2LDAsNCwxMTYsMiwKKyAgICAwLDEwNywxMCwwLDExNCw3MiwwLDEsMSwxLDg5LDExMyw3NiwwLDg4LDExMywKKyAgICA3OSwwLDExMCwwLDAsMTE2LDMsMCwxMjQsMCwwLDEyNCwyLDAsMTAwLDQsCisgICAgMCwxMjQsMSwwLDEzMSwyLDEsMTI1LDQsMCwxMDAsNSwwLDEyNCw0LDAsCisgICAgOTUsNCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwyMDMsMCwxMjAsCisgICAgNzksMCwxMTYsNSwwLDEzMSwwLDAsNjgsOTMsNjEsMCw5MiwyLDAsMTI1LAorICAgIDUsMCwxMjUsNiwwLDEyNCwxLDAsMTA2LDYsMCwxMTYsNywwLDEyNCw2LAorICAgIDAsMTMxLDEsMCwxMzEsMSwwLDExNCwxMzEsMCwxMjQsNSwwLDEyNCwwLDAsCisgICAgMTI0LDEsMCwxMzEsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMjQsNCwwLDk1LAorICAgIDgsMCw4MCwxMTMsMTMxLDAsMTEzLDEzMSwwLDg3LDEwMCwxLDAsODMsMTEwLDAsCisgICAgMCwxMjQsMywwLDExNiw5LDAsMTA3LDgsMCwxMTQsMzgsMSwxMTYsMCwwLAorICAgIDEyNCwyLDAsMTAwLDYsMCwxMzEsMiwwLDExNCw0NywxLDEyMSwxOSwwLDEyNCwKKyAgICAyLDAsMTA2LDEwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw3LDAsODcsMTEwLAorICAgIDE4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCwxMywxLDEsMSwxLDg5LAorICAgIDExMywzNSwxLDg4LDEyNCw3LDAsMTE0LDM1LDEsMTAzLDAsMCwxMjQsNCwwLAorICAgIDk1LDExLDAsMTEzLDM1LDEsMTEzLDQ3LDEsMTEwLDksMCwxMjQsMywwLDEyNCwKKyAgICA0LDAsOTUsMTEsMCwxMjQsNCwwLDEwNiwxMSwwLDEwMywwLDAsMTA3LDIsCisgICAgMCwxMTQsMTA2LDEsMTI0LDEsMCwxMTQsMTA2LDEsMTE2LDEyLDAsMTI0LDEsMCwKKyAgICAxMzEsMSwwLDEwMCw3LDAsMjUsMTI1LDgsMCwxMjQsNCwwLDEwNiwxMSwwLAorICAgIDEwNiwxMywwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMDYsMSwxMTAsMCwwLAorICAgIDEyNCw0LDAsODMsNDEsOCw5Nyw2MSwxLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDMyLAorICAgIDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLAorICAgIDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LAorICAgIDExMSwzMiwxMDUsMTEwLDEwMCwxMDUsOTksOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NCwzMiwxMTUsMTAxLDExNiwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LAorICAgIDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE2LDExMSwzMiw5NywKKyAgICAzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTExLDEwMiwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKKyAgICAxMTQsMTIxLDMyLDExMiw5NywxMTYsMTA0LDExNSw0NiwzMiwzMiw2NSwxMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSwzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTA1LDExNSwzMiwKKyAgICAxMTUsMTE3LDEwMiwxMDIsMTA1LDk5LDEwNSwxMDEsMTEwLDExNiw0NCwzMiwxMTYsMTA0LDExMSwxMTcsCisgICAgMTAzLDEwNCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTEsMTE2LDEwNCwxMDEsMTE0LAorICAgIDExOSwxMDUsMTE1LDEwMSwzMiwxMTcsMTE1LDEwMSwxMDIsMTE3LDEwOCwzMiwxMTYsMTExLDMyLDExNiwKKyAgICAxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDExNSwxMjEsCisgICAgMTE1LDExNiwxMDEsMTA5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDksMTE3LDExNSwxMTYsMzIsMTE2LDk3LDEwNywxMDEsMzIsCisgICAgOTcsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE1LDMyLDEwNSwxMTYsMTE1LDMyLDExMSwxMTAsCisgICAgMTA4LDEyMSwzMiw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDAsNDEsMzIsOTcsMTE0LAorICAgIDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwxMjIsOSw2MCwxMTcsMTEwLDEwNywxMTAsCisgICAgMTExLDExOSwxMTAsNjIsMTE0LDIzOCwwLDAsMCwxMTQsMjE3LDAsMCwwLDg0LDExNCwKKyAgICAyMTksMCwwLDAsMTE0LDg0LDAsMCwwLDQxLDE0LDExNCw2MCwwLDAsMCwKKyAgICAxMTQsMjM4LDAsMCwwLDExNCwxNTMsMCwwLDAsMTE0LDIxNiwwLDAsMCwxMTQsCisgICAgMjIxLDAsMCwwLDIxOCwyNyw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLAorICAgIDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICAxMTUsMTE0LDIzMCwwLDAsMCwxMTQsMjMxLDAsMCwwLDExNCwxNjksMCwwLDAsCisgICAgMjE4LDksOTUsODAsNzksODAsODUsNzYsNjUsODQsNjksMTE0LDIxOSwwLDAsMCwKKyAgICAxMTQsMjIwLDAsMCwwLDExNCwzOCwwLDAsMCwxMTQsMjIzLDAsMCwwLDQxLAorICAgIDksMTE0LDY3LDAsMCwwLDIxOCw4LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMTc3LDAsMCwwLDIxOCwKKyAgICAxMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk5LDEwOCw5NywxMTUsMTE1LDExNCwxMjcsMCwKKyAgICAwLDAsMTE0LDIxOSwwLDAsMCw5MCw3LDEwMCwxMDUsMTE0LDExMCw5NywxMDksMTAxLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAyMzksMCwwLDAsMTE2LDMsMCwwLDExNSw2MCwwLDAsMCwwLDEyLDEyLAorICAgIDQsNiwxLDE1LDIsMywxLDE5LDEsMTMsMSwxMSw4LDIxLDEsOSwKKyAgICAzLDEyLDEsMjIsMSwyMSwxLDE1LDEsOSwxLDgsMiw3LDMsMTIsCisgICAgMiwxNSwxLDMsMSwxOSwxLDEzLDEsNSwyLDYsMSwxOCwyLDksCisgICAgMSwxNSwxLDYsMSwxNiwxLDIyLDIsMTE0LDIzOSwwLDAsMCw5OSwzLAorICAgIDAsMCwwLDAsMCwwLDAsOCwwLDAsMCw1MywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMTI0LDEsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMjUsMywwLDg3LDExMCwxOCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsCisgICAgMzMsMCwxLDEsMSw4OSwxMTAsMTcsMCw4OCwxMjQsMywwLDEwMCwwLDAsCisgICAgMTA3LDksMCwxMTQsNTAsMCwxMjQsMywwLDgzLDEyNCwwLDAsMTA2LDIsMCwKKyAgICAxMjUsNCwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwxMDgsMCwxMjEsCisgICAgMTMsMCwxMjQsMCwwLDEwNiwzLDAsMTI1LDEsMCw4NywxMTMsMTA4LDAsNCwKKyAgICAxMTYsMSwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTMsMTA4LDAsCisgICAgODgsMTEwLDAsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiw0LDAsMTI1LDUsMCwKKyAgICA4NywxMTAsMjQsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDE0NywwLDEsMSwKKyAgICAxLDEwMCwwLDAsMTI1LDUsMCw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTAwLAorICAgIDAsMCwxMDcsOCwwLDExNCwyMjQsMCwxMjQsNSwwLDEwMCwwLDAsMTA3LDgsCisgICAgMCwxMTQsMjE1LDAsMTIxLDEzLDAsMTI0LDEsMCwxMDYsNSwwLDEyNSwyLDAsCisgICAgODcsMTEzLDIyMSwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMjExLDAsMSwxLAorICAgIDEsMTAwLDAsMCwxMjUsMiwwLDg5LDExMywyMjEsMCw4OCwxMTMsMjI0LDAsMTI0LAorICAgIDUsMCwxMjUsMiwwLDExMCwwLDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsNiwKKyAgICAwLDEyNSw2LDAsODcsMTEwLDI0LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCwKKyAgICA3LDEsMSwxLDEsMTAwLDAsMCwxMjUsNiwwLDg5LDExMCwxLDAsODgsCisgICAgMTIxLDE5LDAsMTE2LDcsMCwxMjQsMCwwLDEwNiw4LDAsMTMxLDEsMCwxMjUsCisgICAgNywwLDg3LDExMCwyNCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNTMsMSwKKyAgICAxLDEsMSwxMDAsMCwwLDEyNSw3LDAsODksMTEwLDEsMCw4OCwxMTYsOSwKKyAgICAwLDEyNCw0LDAsMTI0LDEsMCwxMDAsMSwwLDEyNCwyLDAsMTMxLDIsMSwKKyAgICAxMjUsMywwLDEyNCw1LDAsMTAwLDAsMCwxMDcsOCwwLDExNCw5MywxLDEwMCwKKyAgICAyLDAsMTEwLDMsMCwxMDAsMywwLDEyNCwzLDAsOTUsMTAsMCwxMjQsNiwKKyAgICAwLDEyNCwzLDAsOTUsMTEsMCwxMjQsNywwLDEyNCwzLDAsOTUsMTIsMCwKKyAgICAxMjQsMywwLDgzLDQxLDQsNzgsMTE0LDIxNywwLDAsMCw3MCw4NCw0MSwxMywKKyAgICAxMTQsMjA4LDAsMCwwLDExNCwyMDksMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwKKyAgICAyMDQsMCwwLDAsMTE0LDIxMCwwLDAsMCw5MCw3LDk1LDc5LDgyLDczLDcxLAorICAgIDczLDc4LDIxOCwxMCw5NSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5NSw5NSwyMTgsNCwKKyAgICAxMDgsMTA1LDExNSwxMTYsMjE4LDgsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE0LDIxNiwKKyAgICAwLDAsMCwxMTQsMjIxLDAsMCwwLDExNCwyMjUsMCwwLDAsMTE0LDIyMCwwLAorICAgIDAsMCw0MSw4LDExNCwxNzksMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMjE3LAorICAgIDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyNDIsMCwKKyAgICAwLDAsMTE0LDIyNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5NSwxMTUsMTEyLAorICAgIDEwMSw5OSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTgwLDMsCisgICAgMCwwLDExNSw3MiwwLDAsMCwwLDIsMywxLDEzLDEsMTMsMSw1LAorICAgIDIsMTIsMSw0LDIsOSwxLDEyLDEsMywxLDEzLDEsMTMsMiw4LAorICAgIDEsMywxLDEzLDEsMTMsMSwxMSwxLDEyLDEsMTIsMSwzLDEsMTMsCisgICAgMSwxMywxLDE0LDIsOSwxLDMsMSwxMywxLDEzLDEsMTEsMSwzLAorICAgIDEsMTksMSwxMywxLDExLDIsMjEsMSwyNywxLDksMSw5LDEsMTE0LAorICAgIDI0NywwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCw2LDAsMCwwLDY0LDAsMCwwLDExNSwxNDIsMCwwLDAsMTAxLDAsCisgICAgMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsCisgICAgMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLAorICAgIDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTAwLDgsCisgICAgMCwxMDAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDIsOTAsNiwwLAorICAgIDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsNywwLDEwMCwxNCwwLDEwMCwKKyAgICAxNSwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxNiwwLDEwMCwxNywwLDEzMiwwLAorICAgIDAsOTAsOSwwLDEwMCwxOCwwLDEwMCwxOSwwLDEzMiwwLDAsOTAsMTAsMCwKKyAgICAxMDAsMjAsMCwxMDAsMjEsMCwxMzIsMCwwLDkwLDExLDAsMTAwLDIyLDAsMTAwLAorICAgIDIzLDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwyNCwwLDgzLDQxLDI1LDExNCwxNzQsCisgICAgMCwwLDAsMTIyLDc3LDY3LDExMSwxMTAsMTE4LDEwMSwxMTAsMTA1LDEwMSwxMTAsOTksMTAxLAorICAgIDMyLDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDMyLDk3LDExNCwxMTEsMTE3LDExMCwxMDAsMzIsCisgICAgMTE1LDExMiwxMDEsOTksMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSwzMiwxMTYsMTExLDMyLAorICAgIDExMiwxMTQsMTExLDExOCwxMDUsMTAwLDEwMSwzMiwxMTUsMTEyLDEwMSw5OSw0NSwxMTUsMTEyLDEwMSwKKyAgICA5OSwxMDUsMTAyLDEwNSw5OSwxMCwzMiwzMiwzMiwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAxMTUsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LDEsMCwxMjQsCisgICAgMCwwLDk1LDAsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMSwxMTQsMTc3LAorICAgIDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDcyLAorICAgIDAsMCwwLDIzMiwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIxLAorICAgIDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsOTUsMTA1LAorICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE1OCwwLDAsMCwxMjQsCisgICAgMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDEsCisgICAgMCwxMDcsOCwwLDExNCwzMCwwLDEwMCwyLDAsMTEwLDYsMCwxMjQsMSwwLAorICAgIDEwNiwxLDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDEsMCwxMDcsCisgICAgOCwwLDExNCwxMDQsMCwxMjQsMSwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsOCwKKyAgICAwLDExNCw4MiwwLDEwMCwzLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLDAsCisgICAgODMsMTAwLDQsMCwxMDYsNCwwLDEyNCwyLDAsMTI0LDEsMCwxMDYsMywwLAorICAgIDEzMSwyLDAsODMsMTEwLDUwLDAsMTI0LDEsMCwxMDYsNSwwLDExNCwxMzIsMCwKKyAgICAxMDAsNSwwLDEwNiw0LDAsMTI0LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTMxLAorICAgIDIsMCw4MywxMDAsNiwwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwKKyAgICAxLDAsMTA2LDIsMCwxMzEsMiwwLDgzLDEwMCwxLDAsODMsNDEsNywxMjIsCisgICAgMzgsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDExMiwxMTQsCisgICAgMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMTQsMjA2LDAsMCwwLDEyMiwxMyw2MCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMjAsNjAsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDMzLDExNCwxMjUsCisgICAgNDEsNjIsMTIyLDIzLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LAorICAgIDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMTgsNjAsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDEyNSw0MSw2Miw0MSwKKyAgICA2LDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyMTcsMCwwLDAsCisgICAgMTE0LDE2OSwwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDIyNiwwLDAsMCw0MSwKKyAgICAzLDExNCw3MSwwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMjA1LDAsMCwwLDIzNSwzLDAsMCwxMTUsMTgsMCwwLDAsMCwzLDksCisgICAgMSwzMCwxLDE1LDEsMTUsMSwxMywyLDIyLDIsOSwxLDE5LDIsMTIyLAorICAgIDI0LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDIxOCw5LDk1LDExMSwxMTgsMTAxLDExNCwKKyAgICAxMTQsMTA1LDEwMCwxMDEsNzAsMjE4LDExLDk1LDEwMiwxMTEsMTE0LDk5LDEwMSw5NSwxMTAsOTcsCisgICAgMTA5LDEwMSw4NCw5OSwyLDAsMCwwLDIsMCwwLDAsNiwwLDAsMCwKKyAgICA2NiwwLDAsMCw2NywwLDAsMCwxMTUsNzUsMiwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEyNSw0LDAsMTI0LDIsMCwxMTUsNDUsMCwxMjQsMywwLDExNSwKKyAgICA0NSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLDMsCisgICAgMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg1LDAsMTIxLDE2LDAsMTI0LDQsMCwKKyAgICAxMDYsMiwwLDEyNCwxLDAsOTUsMywwLDg3LDExMyw4NSwwLDQsMTE2LDQsCisgICAgMCwxMDcsMTAsMCwxMTQsODEsMCwxLDEsMSw4OSwxMTMsODUsMCw4OCwxMTAsCisgICAgMCwwLDEyNCwyLDAsMTE1LDExNSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsMywKKyAgICAwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDIyMSwwLAorICAgIDEyNCw0LDAsMTA2LDUsMCwxMjUsNSwwLDEyNCw1LDAsMTAwLDIsMCwxMDcsCisgICAgOCwwLDExNCwxODQsMCwxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsOSwKKyAgICAwLDExNCwxODQsMCwxMTYsNywwLDEwNiw4LDAsMTE2LDcsMCwxMzEsMSwwLAorICAgIDEyNSw1LDAsMTI0LDQsMCwxMDYsNiwwLDEyNCw1LDAsOTUsOSwwLDExMywKKyAgICAxODQsMCwxMTAsMCwwLDEyMSwxMywwLDEyNCw1LDAsMTI0LDEsMCw5NSwxMCwKKyAgICAwLDg3LDExMywyMjEsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIxNywwLDEsCisgICAgMSwxLDg5LDExMywyMjEsMCw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDI1MSwwLAorICAgIDExNiwxLDAsMTI0LDEsMCwxMDAsNCwwLDEwMCwyLDAsMTMxLDMsMCwxMDAsCisgICAgMiwwLDEwNyw4LDAsMTE0LDM1LDEsMTIxLDE2LDAsMTI0LDQsMCwxMDYsMTEsCisgICAgMCwxMjQsMSwwLDk1LDEyLDAsODcsMTEzLDM1LDEsNCwxMTYsNCwwLDEwNywKKyAgICAxMCwwLDExNCwzMSwxLDEsMSwxLDg5LDExMywzNSwxLDg4LDExMCwwLDAsCisgICAgMTIxLDEzLDAsMTI0LDQsMCwxMjQsMSwwLDk1LDEzLDAsODcsMTEwLDE4LDAsCisgICAgNCwxMTYsNCwwLDEwNywxMCwwLDExNCw2OCwxLDEsMSwxLDg5LDExMCwxLAorICAgIDAsODgsMTI0LDIsMCwxMTUsOTksMSwxMTYsMSwwLDEyNCwxLDAsMTAwLDUsCisgICAgMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNTcsMSwKKyAgICAxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsOSwwLDExNCwxNTcsMSwxMjEsCisgICAgMTYsMCwxMjQsNCwwLDEwNiw2LDAsMTI0LDEsMCw5NSwxNCwwLDg3LDExMywKKyAgICAxNTQsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDE1MCwxLDEsMSwxLDg5LAorICAgIDExMywxNTQsMSw4OCwxMTMsMTU3LDEsMTEwLDAsMCwxMjQsNCwwLDEwNiwxNSwwLAorICAgIDExNCw3MSwyLDEyNCwyLDAsMTE1LDE5NiwxLDExNiwxLDAsMTI0LDEsMCwxMDAsCisgICAgNiwwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDIzNiwKKyAgICAxLDEyMSwxNiwwLDEyNCw0LDAsMTA2LDE2LDAsMTI0LDEsMCw5NSwxNywwLAorICAgIDg3LDExMywyMzYsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIzMiwxLDEsMSwKKyAgICAxLDg5LDExMywyMzYsMSw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDEwLDIsMTE2LAorICAgIDEsMCwxMjQsMSwwLDEwMCw3LDAsMTAwLDIsMCwxMzEsMywwLDEwMCwyLAorICAgIDAsMTA3LDgsMCwxMTQsNzEsMiwxMjQsNCwwLDEwNiwxOCwwLDEwMCwyLDAsCisgICAgMTA3LDksMCwxMTQsNjgsMiwxMjEsMTYsMCwxMjQsNCwwLDEwNiwxOCwwLDEyNCwKKyAgICAxLDAsOTUsMTksMCw4NywxMTMsNjUsMiw0LDExNiw0LDAsMTA3LDEwLDAsCisgICAgMTE0LDYxLDIsMSwxLDEsODksMTEzLDY1LDIsODgsMTEzLDY4LDIsMTEzLDcxLAorICAgIDIsMTEwLDAsMCwxMDAsMiwwLDgzLDQxLDgsOTcsMjksMiwwLDAsODMsCisgICAgMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsCisgICAgOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NSwxMTQsMTAxLDEwOCw5NywxMTYsMTAxLDEwMCwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsCisgICAgMTE1LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsNDYsMzIsMzIsCisgICAgNzIsMTAxLDExNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwKKyAgICAxMDQsMTExLDExOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTYsMTE2LAorICAgIDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwOSw5NywxMTIsMzIsMTExLDExMCwxMTYsMTExLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDU4LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExMCw5NywxMDksMTAxLDMyLAorICAgIDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMCw5NywxMDksMTAxLAorICAgIDk1LDk1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LAorICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNDYsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLAorICAgIDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMiw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSw5NSw5NSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLAorICAgIDEwMSw5OSwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMTUsCisgICAgMTEyLDEwMSw5OSw5NSw5NSwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OSwKKyAgICAxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzMiw0NSw2MiwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsMzIsCisgICAgNDAsMTA1LDEwMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTUsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwKKyAgICAxMDEsOTcsMTE2LDExNiwxMTQsMzIsMTA1LDExNSwzMiwxMTYsMTE0LDExNywxMDEsNDEsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsOTksOTcsOTksMTA0LAorICAgIDEwMSwxMDAsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsOTksCisgICAgOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMzIsNDAsMTA1LDEwMiwzMiw5NSw5NSwxMDIsMTA1LAorICAgIDEwOCwxMDEsOTUsOTUsMzIsOTcsMTA4LDExNSwxMTEsMzIsMTE1LDEwMSwxMTYsNDEsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTE1LDExNyw5OCwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSwKKyAgICA5NywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQ2LDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwKKyAgICAxMTYsNDEsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDU3LDAsMCwKKyAgICAwLDc4LDExNCwyMDQsMCwwLDAsMjE4LDExLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSw5NSw5NSwxMTQsMjQ2LDAsMCwwLDExNCwyMTAsMCwwLDAsMTE0LDI0NCwKKyAgICAwLDAsMCw0MSwyMCwxMTQsMTc3LDAsMCwwLDExNCw2MiwwLDAsMCwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwyMDksMCwwLDAsMTE0LDE2OSwKKyAgICAwLDAsMCwxMTQsMjIwLDAsMCwwLDIxOCwxNiw5NSw3OCw5NywxMDksMTAxLDExNSwKKyAgICAxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwyMTgsNyw5NSw5NSwxMTAsMTAxLAorICAgIDExOSw5NSw5NSwyMTgsNSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMjA0LDAsMCwwLDExNCwKKyAgICAyMzMsMCwwLDAsMTE0LDI1MCwwLDAsMCwxMTQsMjA4LDAsMCwwLDExNCwyNDYsCisgICAgMCwwLDAsMTE0LDIyNiwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMTAsMCwKKyAgICAwLDAsMTE0LDIyNSwwLDAsMCwxMTQsMjQ0LDAsMCwwLDQxLDYsMTE0LDcxLAorICAgIDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDI0OCwwLDAsMCwxMTQsMjQ5LDAsCisgICAgMCwwLDExNCwxNzcsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsMTA1LDExMCwxMDUsCisgICAgMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSwyNTEsMywKKyAgICAwLDAsMTE1LDg4LDAsMCwwLDAsMTcsOSw2LDEyLDEsMjQsMSwzLAorICAgIDEsMTYsMSwxMywxLDgsMywzMCwxLDksMSwxMiwyLDE1LDEsMTUsCisgICAgMSwxOCwxLDMsMSwxMywxLDEzLDEsOCwzLDMwLDEsMywxLDE2LAorICAgIDEsMTMsMSw4LDMsMywxLDEzLDEsMTMsMSw1LDMsMzAsMSwxNSwKKyAgICAxLDMsMSwxNiwxLDEzLDEsMTEsMiw5LDIsMzAsMSwzLDEsMTYsCisgICAgMSwxMywxLDgsMywzMCwxLDE1LDEsMywxLDE2LDEsMTMsMSwxMjIsCisgICAgMzAsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDUsMTEwLAorICAgIDEwNSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTcsMTE2LDExNiwxMTQsMTE1LDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LAorICAgIDEsMCwxMTYsMSwwLDEyNCwxLDAsMTA2LDIsMCwxMDAsMSwwLDEzMSwyLAorICAgIDAsMTE0LDQ4LDAsMTI0LDEsMCwxMDYsMiwwLDEwNiwzLDAsMTI0LDEsMCwKKyAgICAxMzEsMSwwLDEyNSwyLDAsMTEwLDYsMCwxMDAsMiwwLDEyNSwyLDAsMTI0LAorICAgIDIsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg0LDAsMTE2LDQsMCwxMjQsMSwKKyAgICAwLDEwNiw1LDAsMTMxLDEsMCwxMjUsMiwwLDExMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsNiwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLDAsODMsNDEsMywKKyAgICAxMjIsMTUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ1LDExNCwxMDEsMTA4LDk3LDExNiwxMDEsMTAwLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwKKyAgICAxMTUsMzIsOTcsMTE0LDEwMSwzMiw5NywxMDgsMTE1LDExMSwzMiwxMTUsMTAxLDExNiwzMiwxMTksCisgICAgMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgOTcsMTEyLDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTE4LDk3LDEwOCwxMTcsCisgICAgMTAxLDExNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMjE4LDEzLDk5LDExNCwxMDEsCisgICAgOTcsMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MSw3LDExNCwxNzcsMCwKKyAgICAwLDAsMTE0LDYwLDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDI1NSwwLDAsCisgICAgMCwxMTQsNjgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyNTQsMCwwLDAsCisgICAgNDEsMywxMTQsNzEsMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsMTc5LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCw2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSw3NSw0LDAsMCwxMTUsMTYsMCwwLAorICAgIDAsMCw3LDksMiwxOCwzLDIxLDIsNiwxLDEyLDQsMTgsMSwxMywKKyAgICAxLDEyMiwxOSw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LAorICAgIDk5LDExNCwxMDEsOTcsMTE2LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwKKyAgICAxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxLDEwMCwxLDAsODMsNDEsMiwxMjIsMTg5LDY4LDExMSwzMiwxMDEsMTE4LAorICAgIDEwMSwxMTQsMTIxLDExNiwxMDQsMTA1LDExMCwxMDMsMzIsMTEwLDEwMSw5OSwxMDEsMTE1LDExNSw5NywKKyAgICAxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDEsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICAzMiwxMTEsMTAyLDMyLDk2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk2LDMyLDEwNSwxMTUsMzIsCisgICAgMTE3LDExNSwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsOTcsMTE0LDEwMywKKyAgICAxMDEsMTE2LDMyLDExMSwxMDIsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTExLDExMCw0NiwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLAorICAgIDExNiwxMDQsMTExLDEwMCwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCwzOSwxMTUsMzIsOTYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNDAsNDEsOTYsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMywxMTQsMTc3LDAsMCwwLAorICAgIDExNCwxNjksMCwwLDAsMjE4LDExLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDUsOTUsCisgICAgMTAxLDEyMCwxMDEsOTksOTgsNCwwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwKKyAgICAxOCw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDEwMSwKKyAgICAxMjAsMTAxLDk5LDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLAorICAgIDExLDAsMCwwLDY3LDAsMCwwLDExNSwxNywxLDAsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsMTA2LDEsMCwxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwxMzEsCisgICAgMCwwLDEsMTE2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTQzLDIyNiwwLDEsCisgICAgMTE2LDUsMCwxMDYsNiwwLDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwKKyAgICAxLDAsMTA3LDksMCwxMTQsOTUsMCwxMDAsMSwwLDEwNiw4LDAsMTI0LDIsCisgICAgMCwxMzEsMSwwLDEyNSwzLDAsMTE2LDksMCwxMjQsMywwLDEwMCwyLDAsCisgICAgMTI0LDIsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwKKyAgICAwLDAsMTA2LDEwLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxODEsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDExLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxNTgsMCwKKyAgICAxMTYsOSwwLDEwMCw0LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LAorICAgIDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwxMiwKKyAgICAwLDEyNCwxLDAsMTAwLDUsMCwxMDAsNiwwLDEzMSwxLDEsMSwxMjQsMSwKKyAgICAwLDgzLDEyNCwwLDAsMTA2LDEyLDAsMTI0LDEsMCwxMDAsNSwwLDEwMCw2LAorICAgIDAsMTMxLDEsMSwxLDExNiwxMywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMTAsCisgICAgMCwxMDAsNywwLDEzMSwyLDAsMTE1LDI0MywwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMDYsMTAsMCwxMDYsMTQsMCwxMjQsMiwwLDEzMSwxLDAsMSwxMTAsMTMsMCwKKyAgICAxMjQsMCwwLDEwNiwxNSwwLDEyNCwxLDAsMTMxLDEsMCwxLDg3LDEwMCwzLAorICAgIDAsODEsODgsMTE2LDUsMCwxMDYsNiwwLDEyNCwyLDAsMjUsODMsNDEsOCwKKyAgICAxMjIsNTEsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAorICAgIDEwMSw5OSwzMiwxMDUsMTEwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwxMTAsCisgICAgMTAzLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsCisgICAgMTEyLDk3LDk5LDEwMSw0NiwxMjIsMzAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLAorICAgIDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE0LDY3LDAsMCwwLDc4LDEyMiwxNCwxMDksMTA1LDExNSwKKyAgICAxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMjQ4LDAsMCwwLAorICAgIDg0LDExNCwxLDEsMCwwLDQxLDE2LDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsCisgICAgMCwwLDExNCwxMDYsMCwwLDAsMjE4LDEyLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCisgICAgOTUsMTA4LDExMSw5OSwxMDcsMTE0LDEwMywwLDAsMCwxMTQsNywwLDAsMCwxMTQsCisgICAgNzMsMCwwLDAsMTE0LDkzLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMTUzLAorICAgIDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMjU0LDAsCisgICAgMCwwLDExNCw2MCwwLDAsMCwyMTgsMTEsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMTE0LDIsMSwwLDAsNDEsNCwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDE3OSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE3MSwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTc1LAorICAgIDAsMCwwLDEwOCw0LDAsMCwxMTUsMzIsMCwwLDAsMCwyLDEyLDEsCisgICAgMTAsMSwxMywxLDI0LDEsMTUsMSwyMSwxLDE4LDEsMTgsMSwyNywyLAorICAgIDE5LDEsNCwxLDE5LDEsMjEsNCwyMiwyLDE5LDEsMTIyLDE3LDk1LDgzLAorICAgIDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTAxLDEyMCwxMDEsOTksOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMjcsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDI0LDEsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsCisgICAgMSwwLDEyNCwxLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTA2LDMsCisgICAgMCwxMzEsMSwwLDEsMTE2LDQsMCwxMDYsNSwwLDEyNCwxLDAsMTA2LDMsCisgICAgMCwyNSwxMjUsMiwwLDExNiw2LDAsMTI0LDIsMCwxMDAsMSwwLDEwMCwwLAorICAgIDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyMSwxNiwwLAorICAgIDEyNCwxLDAsMTA2LDEsMCwxMjQsMiwwLDk1LDcsMCw4NywxMTMsMTA4LDAsCisgICAgNCwxMTYsOCwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTMsMTA4LAorICAgIDAsODgsMTEwLDAsMCwxMTYsNiwwLDEyNCwyLDAsMTAwLDIsMCwxMDAsMCwKKyAgICAwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMTUsMCwxMjEsNTksMCwKKyAgICAxMjQsMiwwLDEwNiw5LDAsMTI0LDIsMCw5NSwxMCwwLDExNiwxMSwwLDEyNCwKKyAgICAyLDAsMTAwLDMsMCwxMzEsMiwwLDExNSwxOTAsMCwxMjQsMSwwLDEwNiwzLAorICAgIDAsMTA2LDEyLDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI0LDIsCisgICAgMCw5NSwxMCwwLDExMCwwLDAsODcsMTEzLDIxNSwwLDQsMTE2LDgsMCwxMDcsCisgICAgMTAsMCwxMTQsMjExLDAsMSwxLDEsODksMTEzLDIxNSwwLDg4LDExMCwwLDAsCisgICAgMTE2LDYsMCwxMjQsMiwwLDEwMCw2LDAsMTAwLDAsMCwxMzEsMywwLDEwMCwKKyAgICAwLDAsMTA3LDgsMCwxMTQsMjAsMSwxMjEsMTMsMCwxMjQsMSwwLDEyNCwyLAorICAgIDAsOTUsMTMsMCw4NywxMTMsMjAsMSw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LAorICAgIDE2LDEsMSwxLDEsODksMTEzLDIwLDEsODgsMTEwLDAsMCwxMjQsMiwwLAorICAgIDgzLDQxLDcsNzgsMTE0LDIwNCwwLDAsMCwxMTQsMjUwLDAsMCwwLDExNCwyNDYsCisgICAgMCwwLDAsMTE0LDExNiwwLDAsMCwxMTQsODQsMCwwLDAsMTE0LDIwOCwwLAorICAgIDAsMCw0MSwxNCwxMTQsMTc3LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDQsCisgICAgMSwwLDAsMTE0LDY3LDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywwLAorICAgIDAsMCwxMTQsNjIsMCwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsMjA5LDAsMCwKKyAgICAwLDExNCw1NywwLDAsMCwxMTQsMjUwLDAsMCwwLDExNCw2MCwwLDAsMCwKKyAgICAxMTQsMzIsMCwwLDAsMTE0LDIwOCwwLDAsMCw0MSwzLDExNCw3MSwwLDAsCisgICAgMCwxMTQsMTc3LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDEwOCwxMTEsOTcsCisgICAgMTAwLDk1LDk4LDk3LDk5LDEwNywxMTksOTcsMTE0LDEwMCw5NSw5OSwxMTEsMTA5LDExMiw5NywKKyAgICAxMTYsMTA1LDk4LDEwOCwxMDEsMTMyLDQsMCwwLDExNSw0MiwwLDAsMCwwLDQsCisgICAgOSwxLDE5LDIsMTYsMSwyNCwxLDMsMSwxNiwxLDEzLDEsOCwxLAorICAgIDI0LDEsMyw0LDEyLDEsMTUsMSwzMiwxLDEzLDEsOCwxLDI0LDEsCisgICAgMywxLDEzLDEsMTMsMSw4LDEsMTIyLDM4LDk1LDgzLDExMiwxMDEsOTksNzcsCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTA4LDExMSw5NywxMDAsOTUsOTgsOTcsOTksCisgICAgMTA3LDExOSw5NywxMTQsMTAwLDk1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsMTA4LDEwMSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMTc5LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMDYsMSwwLDEwMCwwLDAsMTA3LDksMCwxMTQsNTIsMCwxMTYsMiwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNTIsCisgICAgMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDAsMCw4MywxMTAsMCwwLDEyNCwwLAorICAgIDAsMTA2LDQsMCwxMzEsMCwwLDEyNSwxLDAsMTE2LDUsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMTQzLDg0LDAsMSwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwKKyAgICAxMDAsMCwwLDEwNyw4LDAsMTE0LDE0MywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsCisgICAgNiwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTU2LDAsMTE2LDcsMCwxMDAsMiwKKyAgICAwLDEwMCwzLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiw4LDAsMTMxLDEsMSwKKyAgICAxMzAsMSwwLDExMywxNTYsMCwxMTAsMTMsMCwxMjQsMCwwLDEwNiw5LDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEsODcsMTAwLDAsMCw4MSw4OCwxMTYsMTAsMCwxMDYsCisgICAgMTEsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDgsMCwyNSw4Myw0MSw0LDc4LAorICAgIDExNCwxLDEsMCwwLDEyMiwxNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTQsNjcsMCwwLDAsNDEsMTIsMTE0LDE3NywwLDAsCisgICAgMCwxMTQsMTY5LDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsNSwxLDAsMCwKKyAgICAxMTQsMCwxLDAsMCwxMTQsMjEyLDAsMCwwLDExNCwyMjAsMCwwLDAsMTE0LAorICAgIDE1MywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDIsMSwwLDAsMTE0LDcsCisgICAgMCwwLDAsMTE0LDczLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwKKyAgICAxNzksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDE0LDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSw5OSwKKyAgICAxMDcsMTAxLDEwMCwxNjIsNCwwLDAsMTE1LDIwLDAsMCwwLDAsMiwxOCwyLAorICAgIDIxLDEsMTMsMiwxMiwxLDEzLDEsMTgsMSwxOCwxLDMwLDMsMTksNSwKKyAgICAxMjIsMjcsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5NSwKKyAgICAxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsOCwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsCisgICAgMSwxMTYsMiwwLDEyNCwwLDAsMTA2LDMsMCwxMDYsNCwwLDEzMSwxLDAsCisgICAgMTQzLDE1LDAsMSwxMjQsMCwwLDEwNiw1LDAsMTMxLDAsMCw4Myw4NywxMDAsCisgICAgMSwwLDgxLDg4LDEwMCwxLDAsODMsNDEsMiwxMjIsMjA3LDgyLDEwMSwxMTYsMTE3LAorICAgIDExNCwxMTAsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCisgICAgMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ0LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsOTgsCisgICAgMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDM5LDExNSwzMiwxMDgsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwKKyAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwKKyAgICA5NywxMDAsMTAwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwzMiwxMTIsOTcsMTE0LAorICAgIDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwKKyAgICAzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDEwOCwxMTQsCisgICAgMTAxLDk3LDEwMCwxMjEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMDUsCisgICAgMTEwLDEwMywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDMsMTAxLDExNiwxMTUsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTA4LDExMSw5OCw5OCwxMDEsMTE0LDEwMSwxMDAsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsNiwxMTQsMTA2LAorICAgIDAsMCwwLDExNCwzLDEsMCwwLDExNCwxMDMsMCwwLDAsMTE0LDE3NywwLAorICAgIDAsMCwxMTQsNjcsMCwwLDAsMTE0LDYsMSwwLDAsNDEsMSwxMTQsNzEsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDE3NiwwLDAsMCwxODUsNCwwLDAsMTE1LDYsMCwwLDAsCisgICAgMCw5LDEwLDEsMTksMSwxMjIsMTcsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LAorICAgIDEwNCwxMTEsMTAwLDExNSw0NiwxMDgsMTExLDk3LDEwMCw3OCw0MSwxMywxMTQsNTcsMCwwLAorICAgIDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsCisgICAgMTE0LDcyLDAsMCwwLDExNCwyMDUsMCwwLDAsMTE0LDI1NCwwLDAsMCwxMTQsCisgICAgMCwxLDAsMCwxMTQsMiwxLDAsMCwxMTQsMTc1LDAsMCwwLDExNCw1LAorICAgIDEsMCwwLDExNCw2LDEsMCwwLDExNCwxNzYsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDE3NCwwLDAsMCwyMjUsMywwLDAsMTE1LDIwLDAsMCwwLDEyLAorICAgIDMsNiw0LDEyLDMsMTIsMTYsMjQsODAsMTIsMjMsMTIsMTAsMTIsMjQsMTIsCisgICAgMzAsMTIsMjMsMTE0LDE3NCwwLDAsMCw5OSw0LDAsMCwwLDAsMCwwLAorICAgIDAsNiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsMjAxLDAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLDAsMTI1LDQsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDIsMCwxMzEsMSwwLDEyNSw1LDAsCisgICAgMTI0LDQsMCwxMTUsMTAyLDAsMTI0LDUsMCwxMTQsNTQsMCwxMjQsNSwwLDEwNiwKKyAgICAxLDAsMTI1LDQsMCwxMTMsMTAyLDAsMTI0LDIsMCwxMjQsMywwLDEwNywyLAorICAgIDAsMTE0LDg0LDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwKKyAgICAxMjUsNCwwLDExMywxMDIsMCwxMTYsMywwLDEyNCwxLDAsMTI0LDIsMCwxMzEsCisgICAgMiwwLDEyNSw0LDAsMTEwLDAsMCwxMjQsNSwwLDExNSwxMzIsMCwxMTYsNCwKKyAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMDAsMywwLDEyNCw0LDAsMTMxLDIsMSwKKyAgICAxMjUsNSwwLDExMCwwLDAsMTIxLDQ0LDAsMTI0LDUsMCwxMjQsMCwwLDEwMCwKKyAgICAyLDAsNjAsMTI0LDQsMCwxMjQsMCwwLDEwMCwxLDAsNjAsMTI0LDIsMCwKKyAgICAxMjQsMCwwLDEwMCw0LDAsNjAsMTI0LDMsMCwxMjQsMCwwLDEwMCw1LDAsCisgICAgNjAsODcsMTEwLDE4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwxOTYsMCwxLAorICAgIDEsMSw4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsNiw3OCwxMTQsMjA0LAorICAgIDAsMCwwLDExNCwyMDgsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMjEwLDAsCisgICAgMCwwLDExNCwyNDQsMCwwLDAsNDEsNiwxMTQsOTMsMCwwLDAsMTE0LDE2OSwKKyAgICAwLDAsMCwyMTgsMjAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDE2LDgzLDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE0LDIzOSwwLDAsMCwKKyAgICAxMTQsMjA3LDAsMCwwLDQxLDYsOTAsMiwxMTAsMTE1LDExNCw2NywwLDAsMCwKKyAgICA5MCw4LDExMiw5NywxMTYsMTA0LDExMCw5NywxMDksMTAxLDkwLDksOTksMTEyLDk3LDExNiwKKyAgICAxMDQsMTEwLDk3LDEwOSwxMDEsMTE0LDE2OSwwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNCwKKyAgICA5NSwxMDIsMTA1LDEyMCw5NSwxMTcsMTEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5OSw0LAorICAgIDAsMCwxMTUsMzQsMCwwLDAsMCwyLDE1LDEsMTUsMSw2LDEsNiwKKyAgICAxLDEyLDEsMTIsMSwxOCwyLDE4LDEsNiwxLDI0LDEsMywxLDEwLAorICAgIDEsMTAsMSwxMCwxLDE0LDEsMTMsMiwxMTQsOSwxLDAsMCw5OSwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LAorICAgIDAsMCwwLDExNSwxODEsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsCisgICAgMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLAorICAgIDEwMCwzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNiwwLDEwMCwKKyAgICA0LDAsMTAwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDIsMCwxMzEsMSwKKyAgICAwLDkwLDcsMCwxMDEsNiwwLDEwMCw0LDAsMTAwLDcsMCwxMDAsOCwwLAorICAgIDEzMiwxLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDYsMCwxMDEsOSwwLDEwMCwKKyAgICA5LDAsMTAwLDEwLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTAsCisgICAgMCwxMDEsNiwwLDEwMSw5LDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDAsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDEsNiwwLDEwMSw5LDAsMTAwLAorICAgIDEzLDAsMTAwLDE0LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTIsCisgICAgMCwxMDEsNiwwLDEwMSw5LDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsOTAsMTMsMCwxMDAsNCwwLDgzLDQxLDE3LDIxOCwKKyAgICAxNSw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCisgICAgMTIyLDE0NCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwKICAgICAxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLAogICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2NSwxMDgsCiAgICAgMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMDUsCkBAIC0xMzg0LDI3OTkgKzIwNjIsMjE4MCBAQAogICAgIDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LAogICAgIDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDExNiwxMDUsOTcsMTE2LAogICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLAorICAgIDMyLDMyLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsCiAgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LAotICAgIDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MCwyLDAsMCwKLSAgICAwLDc4LDExNywyNCwwLDAsMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwzOSwKLSAgICAxMjMsMTI1LDM5LDMyLDQwLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQxLDYyLDQwLAotICAgIDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsCi0gICAgOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSw0MCwyLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDYsMCwwLDAsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDEyNSwyLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI3LDAsMCwwLAorICAgIDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDEyMiwxMTUsCisgICAgODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMzIsMTAyLDExMSwxMTQsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwKKyAgICAxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsCisgICAgODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksOTcsOTksMTA0LDEwNSwKKyAgICAxMTAsMTAxLDExNCwxMjEsMzIsMTAwLDExMSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNiwxMTEsCisgICAgOTgsMzIsMTA1LDExNiwxMTUsMTAxLDEwOCwxMDIsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMTIyLDI0LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsCisgICAgMTI1LDMyLDQwLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQxLDYyLDQxLDIsMTE0LAorICAgIDQ3LDAsMCwwLDExNCw1NywwLDAsMCw0MSwxLDExNCwxNzksMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDIwNSwwLDAsMCwyMzMsNCwwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwKKyAgICAyNyw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCisgICAgNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDc4LDk5LDQsMCwKKyAgICAwLDAsMCwwLDAsMCw0LDAsMCwwLDUsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDU4LDAsMCwwLDEyNCwyLDAsMTAwLDAsMCwxMDcsOSwwLAorICAgIDExNCwxNiwwLDEwMCwwLDAsODMsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCisgICAgMTMxLDEsMCwxMTQsNTAsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsCisgICAgMSwwLDEwMCwyLDAsMTMxLDIsMSw4MywxMDAsMCwwLDgzLDEwMCwwLDAsCisgICAgODMsNDEsMyw3OCwxMTQsMjE3LDAsMCwwLDEyMiw4LDk4LDExNywxMDUsMTA4LDExNiwKKyAgICA0NSwxMDUsMTEwLDQxLDMsMTE0LDEwNiwwLDAsMCw5MCwxMCwxMDUsMTE1LDk1LDk4LAorICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNCwxNzMsMCwwLDAsNDEsNCwyMTgsMyw5OSwKKyAgICAxMDgsMTE1LDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwwLDIxOCw2LDExNiw5NywKKyAgICAxMTQsMTAzLDEwMSwxMTYsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDksMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDI0Miw0LAorICAgIDAsMCwxMTUsMTAsMCwwLDAsMCwyLDEyLDEsNCwxLDE1LDEsMTksCisgICAgMiwxMjIsMjUsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwzLDAsMCwKKyAgICAwLDAsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw0MSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsCisgICAgMiwwLDEzMSwyLDAsMTI1LDMsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksCisgICAgMCwxMTQsMzcsMCwxMjQsMywwLDEwNiwxLDAsODMsMTAwLDEsMCw4Myw0MSwKKyAgICAyLDEyMiwxNzUsNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsOTgsMTE3LDEwNSwxMDgsCisgICAgMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLAorICAgIDEwNSwxMTUsMzIsMTAxLDExOCwxMDEsMTE0LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwKKyAgICAxMDAsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsOTcsMTE0LDk5LAorICAgIDEwNCwzMiwxMDUsMTE1LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwxMDEsMTAwLDMyLAorICAgIDk3LDMyLDEwMiw5NywxMDUsMTA4LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLAorICAgIDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiwKKyAgICA4NSwxMTUsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw0MCw0MSwzMiwKKyAgICAxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw3OCw0MSwyLDExNCwxMywxLDAsMCwxMTQsMTY5LDAsMCwwLDQxLAorICAgIDQsMTE0LDExLDEsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwwLAorICAgIDExNCwxNzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDExLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwyNTEsNCwwLDAsMTE1LDQsMCwwLDAsMCw5LDE4LDEsMTIyLDI3LAogICAgIDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsOTksMywwLDAsMCwKLSAgICAwLDAsMCwwLDMsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsMzksMCwwLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDE2LAotICAgIDAsMTAwLDEsMCw4MywxMTYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwKLSAgICAwLDExNCwzNSwwLDEyNCwwLDAsODMsMTAwLDEsMCw4Myw0MCwyLDAsMCwKLSAgICAwLDExNywxMTMsMCwwLDAsNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDM5LDExMiw5NywxMTYsCi0gICAgMTA0LDM5LDMyLDEwNSwxMTUsMzIsMTAxLDExOCwxMDEsMTE0LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwKLSAgICAxMDIsMTA1LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsCi0gICAgOTcsMTE0LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwKLSAgICAxMDEsMTAwLDMyLDk3LDMyLDEwMiw5NywxMDUsMTA4LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQwLDMsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LAotICAgIDEwLDAsMCwwLDEwNSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNDAsMywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTI5LDIsMCwKLSAgICAwLDExNSw2LDAsMCwwLDAsNywxMiwxLDQsMSwxMTcsMjcsMCwwLAotICAgIDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMywwLDAsMCw5LDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw4OCwwLDAsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsCi0gICAgNiwwLDEyNSwyLDAsMTIxLDIwLDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LAotICAgIDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDExMCw0NiwwLDEsMSwxLDEyNCwKLSAgICAyLDAsMTIsMTE0LDc2LDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LAotICAgIDYsMCwxMTQsNzYsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCw2MSwxMTAsCi0gICAgMCwwLDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsMSwwLDgzLDQwLDIsCi0gICAgMCwwLDAsMTE3LDIzLDAsMCwwLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsCi0gICAgNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDI1LDAsMCwwLDk1LDk5LAotICAgIDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLAotICAgIDExNywxMiwwLDAsMCwxMDUsMTEwLDEwNSwxMTYsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKLSAgICAxMTAsNDAsMywwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOSwwLDAsMCwKLSAgICAxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTQwLDIsMCwwLDExNSwxNCwwLDAsMCwwLDYsCi0gICAgMTUsMSwzLDEsMjAsMSwzLDEsMjIsMSwxMywxLDExNywyNywwLDAsCi0gICAgMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCi0gICAgNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDU3LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCi0gICAgOTcsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLAotICAgIDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTUsNDYsNzgsNDAsMSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTU0LAotICAgIDIsMCwwLDExNSwyLDAsMCwwLDAsNCwxMTcsMjQsMCwwLDAsNjYsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICAyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLAotICAgIDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw1NiwwLDAsMCw4MiwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLAotICAgIDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICA5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsCi0gICAgMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDE2MCwyLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDQsMTE3LDI2LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwKLSAgICAxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLAotICAgIDEsMCw4Myw0MCwyLDAsMCwwLDExNyw1MiwwLDAsMCw4MiwxMDEsMTE2LAotICAgIDExNywxMTQsMTEwLDMyLDcwLDk3LDEwOCwxMTUsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsMTA1LAotICAgIDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTE0LAotICAgIDEwMSwzMiwxMTAsMTAxLDExOCwxMDEsMTE0LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTUsCi0gICAgNDYsNzAsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LAotICAgIDEwMSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDE2NiwyLDAsMCwxMTUsMiwwLDAsMCwwLAotICAgIDQsMTE3LDI2LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsCisgICAgMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwzLDAsMCwwLDEwLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw1OSwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxNDMsMjMsCisgICAgMCwxLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDIsCisgICAgMCwxMjUsMiwwLDg3LDEwMCwxLDAsODEsODgsMTI0LDAsMCwxMjQsMiwwLAorICAgIDk1LDQsMCwxMDAsMiwwLDEyNCwyLDAsOTUsNSwwLDEyNCwyLDAsODMsCisgICAgNDEsMywxMjIsMjMsNzYsMTExLDk3LDEwMCwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsCisgICAgNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMTQsMzAsMCwwLAorICAgIDAsNDEsNiwxMTQsNjksMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTA2LDAsCisgICAgMCwwLDkwLDEyLDEwNSwxMTAsMTA1LDExNiw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwKKyAgICAxMTQsMjA0LDAsMCwwLDExNCwyNTAsMCwwLDAsNDEsMywxMTQsMTEsMSwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw0LDEsMCwwLDcsCisgICAgNSwwLDAsMTE1LDEwLDAsMCwwLDAsNiwxMywxLDI0LDEsOSwxLAorICAgIDksMSwxMjIsMjcsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LAorICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiwKKyAgICA1Nyw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwKKyAgICA5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsCisgICAgMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiw5OSwxMTEsMTAwLAorICAgIDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE1LDQ2LDc4LDExNCw0LDAsMCwwLAorICAgIDQxLDIsMTE0LDExLDEsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsMTAzLDEwMSwxMTYsCisgICAgOTUsOTksMTExLDEwMCwxMDEsMTksNSwwLDAsMTE1LDIsMCwwLDAsMCw0LAorICAgIDEyMiwyNCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKKyAgICAxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDU2LDgyLDEwMSwxMTYsMTE3LAorICAgIDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiwKKyAgICA0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsMTExLDMyLDExMCwKKyAgICAxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksCisgICAgMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMTEsMSwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMTAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSwyNSw1LDAsMCwxMTUsMiwwLDAsMCwwLDQsMTIyLDI2LDY2LDExNywKKyAgICAxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLAorICAgIDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwKKyAgICAwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw1Miw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDMyLDcwLDk3LDEwOCwxMTUsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsCisgICAgMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTAsCisgICAgMTAxLDExOCwxMDEsMTE0LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTUsNDYsNzAsMTE0LAorICAgIDQsMCwwLDAsNDEsMiwxMTQsMTEsMSwwLDAsMTE0LDE1OCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMjE5LDAsMCwwLDMxLDUsMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsCisgICAgMjYsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAorICAgIDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQxLDE0LDExNCw1NywwLAorICAgIDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsCisgICAgMCwyMTgsMTIsMTE1LDExNiw5NywxMTYsMTA1LDk5LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCwKKyAgICAyMDUsMCwwLDAsMjE4LDExLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsCisgICAgMTAwLDExNCwxMywxLDAsMCwxMTQsMTQsMSwwLDAsMTE0LDE2MSwwLDAsMCwKKyAgICAxMTQsNCwxLDAsMCwxMTQsMTUsMSwwLDAsMTE0LDE2LDEsMCwwLDExNCwKKyAgICAyMTksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwLDEsMCwwLDIyNCw0LDAsCisgICAgMCwxMTUsMjgsMCwwLDAsMTIsNyw2LDIsMTgsOSwzLDEsMjEsOCwKKyAgICAzLDEsMTgsMTEsMywxLDIxLDExLDMsMSwyMSw1LDMsMSwyMSw1LAorICAgIDMsMSwxMTQsMTAsMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsNSwwLDAsMCw2NCwwLDAsMCwxMTUsMTkzLDAsMCwKKyAgICAwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCisgICAgOTAsMywwLDEwMSw0LDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsMTMxLAorICAgIDEsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNCwwLDEwMCw0LDAsMTAwLDUsCisgICAgMCwxMDAsNiwwLDEzMiwyLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDYsMCwKKyAgICAxMDAsNCwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMSwwLDEzMSwxLDAsOTAsCisgICAgOCwwLDEwMSw0LDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDEzMSwxLAorICAgIDAsOTAsOSwwLDEwMSw2LDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDAsMCwKKyAgICAxMzEsMSwwLDkwLDEwLDAsMTAxLDYsMCwxMDEsMTEsMCwxMDAsMTMsMCwxMDAsCisgICAgMTQsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMSw2LAorICAgIDAsMTAxLDExLDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsMCwxMzEsMSwwLAorICAgIDEzMSwxLDAsOTAsMTMsMCwxMDEsNiwwLDEwMSwxMSwwLDEwMCwxNywwLDEwMCwKKyAgICAxOCwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDE0LDAsMTAwLDQsCisgICAgMCw4Myw0MSwxOSwyMTgsMTQsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwMSwxMTQsMTIyLDE0Miw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsCisgICAgMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA2NSwxMDgsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywxMTQsMTAxLDMyLAorICAgIDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMTQsMzIsCisgICAgMTE1LDExNiw5NywxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwxMTYsCisgICAgMTExLDMyLDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsCisgICAgMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDExNiwxMDUsCisgICAgOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCisgICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwKKyAgICAwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiwKKyAgICAxMjIsMTE1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE0LDEwMSwxMTIsMTE0LDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKKyAgICAxMDAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LAorICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA5LDk3LDk5LAorICAgIDEwNCwxMDUsMTEwLDEwMSwxMTQsMTIxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDYsMTExLDk4LDMyLDEwNSwxMTYsMTE1LDEwMSwxMDgsMTAyLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDEyMiwyMiw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsCisgICAgMzMsMTE0LDEyNSwzMiw0MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0MSw2Miw0MSwyLDExNCwKKyAgICA0NywwLDAsMCwxMTQsNTcsMCwwLDAsNDEsMSwyMTgsMSwxMDksMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIwNSwwLAorICAgIDAsMCw0Nyw1LDAsMCwxMTUsMiwwLDAsMCwwLDcsMTIyLDI2LDcwLAorICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw3OCw5OSw0LDAsMCwwLDAsCisgICAgMCwwLDAsNCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA0MiwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLAorICAgIDExNCwzNCwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwxLDAsMTAwLAorICAgIDIsMCwxMzEsMiwxLDgzLDEwMCwwLDAsODMsMTAwLDAsMCw4Myw0MSwzLAorICAgIDc4LDExNCwyMTcsMCwwLDAsOTAsNiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0MSwzLAorICAgIDExNCwxMDYsMCwwLDAsMTE0LDE2MiwwLDAsMCwxMTQsMTczLDAsMCwwLDQxLAorICAgIDQsMTE0LDExLDEsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwwLAorICAgIDExNCwxMiwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMTMsMSwwLDAsNTYsNSwwLDAsMTE1LDYsMCwKKyAgICAwLDAsMCwyLDE1LDEsMTksMiwxMjIsMjQsNzAsMTE0LDExMSwxMjIsMTAxLDExMCwKKyAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsCisgICAgMTAxLDk5LDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLDExNiwwLDAsMTA2LAorICAgIDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDE5LDAsMTI0LDAsMCw4MywxMDAsCisgICAgMSwwLDgzLDQxLDIsMTIyLDkzLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwMiwxMTQsCisgICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCisgICAgMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwKKyAgICAzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw0MCwKKyAgICA0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiw3OCw0MSwyLDExNCwxMDYsMCwwLDAsMTE0LDE2MiwwLDAsCisgICAgMCw0MSwzLDExNCwxMSwxLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwzNSwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMTQsMSwwLDAsNjMsNSwwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICA3LDEyMiwyNiw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAorICAgIDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDMsMCwwLDAsNCwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsOTUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsCisgICAgMTI1LDEsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDExNSwKKyAgICA1NywwLDExNiw0LDAsMTAwLDEsMCwxMDYsNSwwLDEyNCwxLDAsMTMxLDEsCisgICAgMCwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsCisgICAgMTE2LDYsMCwxMTYsMiwwLDEwNiw3LDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwKKyAgICAyLDAsMTE2LDgsMCwxMjQsMiwwLDEyNCwwLDAsMTA2LDksMCwxMzEsMiwKKyAgICAwLDEsMTAwLDAsMCw4Myw0MSwzLDc4LDEyMiwyNywxMjMsMzMsMTE0LDEyNSwzMiwKKyAgICAxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw2NywwLDAsMCw0MSwxMCwxMTQsMjA4LDAsCisgICAgMCwwLDExNCw2NywwLDAsMCwxMTQsMTA2LDAsMCwwLDExNCwxNjIsMCwwLAorICAgIDAsMTE0LDE1MywwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDExNCwwLDAsMCwKKyAgICAyMTgsMTcsMTAzLDEwMSwxMTYsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTExLDk4LDEwNiwKKyAgICAxMDEsOTksMTE2LDExNCwxNzUsMCwwLDAsMTE0LDYzLDAsMCwwLDQxLDMsMTE0LAorICAgIDE3OSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE5NCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMSwxLAorICAgIDAsMCw3Miw1LDAsMCwxMTUsMTIsMCwwLDAsMCwyLDEyLDEsMTUsCisgICAgMSwxOCwxLDEyLDEsMTgsMSwxMjIsMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMywwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwKKyAgICAxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MSwxLDEyMiw5NSw3NiwxMTEsCisgICAgOTcsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsCisgICAgMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LAorICAgIDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMSwxMjAsMTAxLAorICAgIDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsCisgICAgOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQxLDEsMTE0LAorICAgIDE4MCwwLDAsMCw0MSwyLDExNCwxMSwxLDAsMCwxMTQsMTU4LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICA0LDEsMCwwLDgxLDUsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsCisgICAgMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsCisgICAgMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsCisgICAgMCw4Myw0MSwxLDEyMiw0NSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTExLDExNCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw0Niw0MSwyLDExNCwxMDYsMCwwLDAsMTE0LDIxLDEsMCwwLDQxLAorICAgIDIsMTE0LDExLDEsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE1LDEsMCwwLDkwLAorICAgIDUsMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsMjMsNzAsMTE0LDExMSwxMjIsCisgICAgMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksCisgICAgMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLAorICAgIDgzLDQxLDIsMTIyLDU0LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsCisgICAgMzIsOTcsMTE1LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwKKyAgICAxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLAorICAgIDAsNDEsMiwxMTQsMTEsMSwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTYsMSwwLAorICAgIDAsOTYsNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNSw3MCwxMTQsCisgICAgMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiwKKyAgICA5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwKKyAgICAwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDEsMSwKKyAgICAxMjIsNDYsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LAorICAgIDQxLDIsMTE0LDEwNiwwLDAsMCw5MCwxNywxMDUsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwKKyAgICAxMDEsMTEwLDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MSwyLDExNCwxMSwxLDAsCisgICAgMCwxMTQsMTU4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwyMTksMCwwLDAsMTAyLDUsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsNCwxMjIsMjUsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLAogICAgIDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgNzgsNDAsMTUsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LAotICAgIDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNywKLSAgICAxMSwwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsCi0gICAgMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTcsMTEsMCwKLSAgICAwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwKLSAgICAwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDEwLDAsMCwwLDEwNSwxMTUsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LAotICAgIDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE2LDIsMCwwLAotICAgIDExNSwyOCwwLDAsMCwxNiw3LDYsMiwxOCw0LDMsMSwxOCwxMCwzLAotICAgIDEsMywxLDMsMSwyNywxMSwzLDEsMjEsNSwzLDEsMjEsNSwzLAotICAgIDEsMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAotICAgIDAsMCw2LDAsMCwwLDY2LDAsMCwwLDExNSwxNzMsMCwwLDAsMTI0LAotICAgIDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCi0gICAgMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwKLSAgICAwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDE0LDAsMTAwLDQsMCwKLSAgICAxMDAsNSwwLDEzMiwxLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDQsMCwxMDEsCi0gICAgOCwwLDEwMSw5LDAsMTAxLDEwLDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLAotICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMSwwLAotICAgIDEwMSw0LDAsMTAxLDEwLDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDEyLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTAsCi0gICAgMCwxMDAsMTEsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMywwLAotICAgIDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsOTAsMTQsMCwxMDAsMTQsMCw4Myw0MCwxNSwwLDAsCi0gICAgMCwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwMSwxMTQsMTE3LDE0MiwwLDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywKLSAgICAxMTQsMTAxLDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLAotICAgIDExMSwxMTQsMzIsMTE1LDExNiw5NywxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAotICAgIDExNSwzMiwxMTYsMTExLDMyLDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsCi0gICAgMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsCi0gICAgMTEwLDExNiwxMDUsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsCi0gICAgODMsNDAsMiwwLDAsMCw3OCwxMTcsMjIsMCwwLDAsNjAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMzksMTIzLDEyNSwzOSwzMiw0MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICA0MSw2Miw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSwKLSAgICA5NywxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsCi0gICAgMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNywxLDAsMCwKLSAgICAwLDEwOSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTgyLDIsCi0gICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjYsMCwwLDAsNzAsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LDMsMCwwLDAsMCwwLDAsCi0gICAgMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsCi0gICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDE5LAotICAgIDAsMTI0LDAsMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLAotICAgIDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LDQwLDMsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDksMCwwLDAsMTA1LDExNSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwzLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxODYsMiwwLAotICAgIDAsMTE1LDIsMCwwLDAsMCwzLDExNywyNiwwLDAsMCw3MCwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsOSwwLDAsMCw2NywwLDAsMCwxMTUsMTAwLDAsMCwKLSAgICAwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTI1LDIsMCwKLSAgICAxMjEsMzIsMCwxMTYsMiwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwKLSAgICAyLDAsMTI1LDMsMCwxMjQsMywwLDk2LDUsMCwxMjQsMywwLDgzLDg3LAotICAgIDExMCw0NiwwLDEsMSwxLDEyNCwyLDAsMTIsMTE0LDg4LDAsMTI0LDEsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTA3LDYsMCwxMTQsODgsMCwxMTYsMCwwLDEwNiwKLSAgICAxLDAsMTI0LDEsMCw2MSwxMTAsMCwwLDEzMCwwLDAsODksMTEwLDEsMCwKLSAgICA4OCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLDAsMCwwLDc2LAotICAgIDExMSw5NywxMDAsMzIsOTcsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNDYsNzgsNDAsNiwwLDAsMCwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDI1LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNyw0LDAsMCwKLSAgICAwLDk1LDEwNSwxMDksMTEyLDExNywxMSwwLDAsMCwxMDUsMTEwLDEwNSwxMTYsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDgsMCwwLDAsOTUsOTUsMTAyLDEwNSwxMDgsMTAxLAotICAgIDk1LDk1LDQwLDQsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLAotICAgIDAsMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDExNywxLDAsMCwwLDEwOSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTEsMiwwLDAsCi0gICAgMTE1LDE4LDAsMCwwLDAsNiwxNSwxLDMsMSwxOCwyLDYsMSw4LAotICAgIDEsMywxLDIyLDEsMTMsMSwxMTcsMjYsMCwwLDAsNzAsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MCwxLDAsCi0gICAgMCwwLDExNyw0NSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw0Niw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExNywxNywwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw5NSwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsNDAsMiwwLDAsMCwxMTcsMywwLAotICAgIDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDIwOCwyLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDQsMTE3LDIzLDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwKLSAgICAxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKLSAgICA0MCwyLDAsMCwwLDExNyw1NCwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsCi0gICAgOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LAotICAgIDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDIxNCwyLDAsMCwxMTUsMiwwLDAsMCwwLDQsMTE3LAotICAgIDI1LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLAotICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCi0gICAgMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDExNyw0NiwwLDAsMCw4MiwxMDEsCi0gICAgMTE2LDExNywxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LAotICAgIDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTcsMCwwLDAsMTA1LAotICAgIDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwyMjAsMiwwLDAsMTE1LDIsMCwwLDAsMCw0LAotICAgIDExNywyNSwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw3OCw0MCwKLSAgICAxNSwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSwKLSAgICA5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsCi0gICAgMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LAotICAgIDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDExLDAsCi0gICAgMCwwLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxMSwwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LAotICAgIDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxMSwwLDAsMCwxMDgsCi0gICAgMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDE3MywyLDAsMCwxMTUsMjgsMCwwLAotICAgIDAsMTYsNyw2LDIsMTgsNCwzLDEsMTgsNCwzLDEsMywxLDMsCi0gICAgMSwyNywxNCwzLDEsMjEsNSwzLDEsMjEsNSwzLDEsMTE3LDE0LDAsCi0gICAgMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLAotICAgIDAsNjYsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLAotICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLAotICAgIDEwMCwyLDAsOTAsNCwwLDEwMCwzLDAsOTAsNSwwLDEwMCwxMSwwLDkwLAotICAgIDcsMCwxMDEsOCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDEzMSwxLAotICAgIDAsOTAsOSwwLDEwMSw4LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsCi0gICAgMTMxLDEsMCw5MCwxMCwwLDEwMSw4LDAsMTAwLDEwLDAsMTAwLDgsMCwxMDAsCi0gICAgOSwwLDEzMiwxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMCwxMCwwLDgzLDQwLAotICAgIDEyLDAsMCwwLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwKLSAgICA4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNjcsCi0gICAgMCwwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsCi0gICAgMTAwLDEwMSw5OSwxMDgsOTcsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICA4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLAotICAgIDQ2LDEwLDMyLDMyLDMyLDMyLDExNyw1OSwwLDAsMCw4MywxMTEsMTAyLDExNiwxMTksCisgICAgNDEsMTUsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLAorICAgIDAsMTE0LDU5LDAsMCwwLDExNCwxNywxLDAsMCwxMTQsMjA1LDAsMCwwLAorICAgIDExNCwxOCwxLDAsMCwxMTQsMTMsMSwwLDAsMTE0LDE0LDEsMCwwLDExNCwKKyAgICAxLDEsMCwwLDExNCw0LDEsMCwwLDExNCwxNjQsMCwwLDAsMTE0LDE1LAorICAgIDEsMCwwLDExNCwxNiwxLDAsMCwxMTQsMjE5LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwxOSwxLDAsMCwzOCw1LDAsMCwxMTUsMjgsMCwwLDAsMTIsCisgICAgNyw2LDIsMTgsOSwzLDEsMjEsNiwzLDEsMTgsOCwxOCw5LDE4LAorICAgIDksMywxLDIxLDUsMywxLDIxLDUsMywxLDExNCwxOSwxLDAsMCwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwxMjEsMCwwLDAsMTAxLDAsMCw5MCwxLDAsCisgICAgMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCw5MCwKKyAgICA0LDAsMTAwLDMsMCw5MCw1LDAsMTAwLDQsMCw5MCw2LDAsMTAxLDcsCisgICAgMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwKKyAgICAxMDEsNywwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDEzMSwxLDAsOTAsCisgICAgOSwwLDEwMSw3LDAsMTAwLDksMCwxMDAsOSwwLDEwMCwxMCwwLDEwMCwxMSwKKyAgICAwLDEzMiwyLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLDksMCwKKyAgICAxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDAsCisgICAgOSwwLDgzLDQxLDE0LDIxOCwyMSw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsCisgICAgMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMjIsNjIsNzcsMTAxLAorICAgIDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsCisgICAgMTExLDExNCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDEwMSw5OSwxMDgsOTcsCisgICAgMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw4NywxMDUsMTEwLDEwMCwxMTEsCisgICAgMTE5LDExNSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDQ2LDEyMiw1OSw4MywxMTEsCisgICAgMTAyLDExNiwxMTksOTcsMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwKKyAgICAxMTYsMTA0LDExMSwxMTAsNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsCisgICAgMTE0LDExNSwxMDUsMTExLDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLAorICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMjUsMTIyLDY1LDgzLDExMSwxMDIsMTE2LDExOSwKICAgICA5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLAogICAgIDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwKICAgICAxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDEyNSwxMTcsNjUsMCwwLDAsODMsMTExLDEwMiwxMTYsMTE5LAotICAgIDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsCi0gICAgMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsMTE3LDEwOCwKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDkyLDY4LDEwMSw5OCwxMTcsMTAzLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw2NywwLDAsMCwxMjEsMjMsMCwxMTYsMCwwLDEwNiwxLDAsMTE2LAotICAgIDAsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsMzcsMCwKLSAgICA0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDYyLDAsMSwxLDEsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDExNiwwLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwyLDAsODMsCi0gICAgODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsCi0gICAgNSwwLDAsMCwxMTcsNywwLDAsMCw5NSwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywKLSAgICAxMTcsNywwLDAsMCw3OSwxMTIsMTAxLDExMCw3NSwxMDEsMTIxLDExNywxNywwLDAsCi0gICAgMCw3Miw3NSw2OSw4OSw5NSw2Nyw4NSw4Miw4Miw2OSw3OCw4NCw5NSw4NSw4MywKLSAgICA2OSw4MiwxMTcsMTIsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDExNywxOCwwLDAsMCw3Miw3NSw2OSw4OSw5NSw3Niw3OSw2NywKLSAgICA2NSw3Niw5NSw3Nyw2NSw2Nyw3Miw3Myw3OCw2OSw0MCwyLDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDMsMCwwLDAsMTA3LDEwMSwxMjEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTQsMCwwLDAsCi0gICAgOTUsMTExLDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMjQwLDIsCi0gICAgMCwwLDExNSw4LDAsMCwwLDAsMiwzLDEsMjMsMSwxMywxLDExNywKLSAgICAzNiwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsCi0gICAgMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsCi0gICAgMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5OSwyLDAsMCwwLDAsMCwwLAotICAgIDAsNiwwLDAsMCwxNiwwLDAsMCw2NywwLDAsMCwxMTUsMTQyLDAsCi0gICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMTQsMjEsMCwxMjQsMCwwLDEwNiwxLAotICAgIDAsMTI1LDIsMCwxMTAsOSwwLDEyNCwwLDAsMTA2LDIsMCwxMjUsMiwwLAotICAgIDEyNCwyLDAsMTA2LDMsMCwxMDAsMSwwLDEyNCwxLDAsMTAwLDIsMCwxMTYsCi0gICAgNCwwLDEwNiw1LDAsMTAwLDAsMCwxMDAsMywwLDEzMywyLDAsMjUsMTMxLAotICAgIDAsMiwxMjUsMywwLDEyMSw0NiwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywKLSAgICAwLDEzMSwxLDAsMTQzLDI1LDAsMTI1LDQsMCwxMTYsNywwLDEwNiw4LDAsCi0gICAgMTI0LDQsMCwxMDAsNCwwLDEzMSwyLDAsMTI1LDUsMCw4NywxMDAsMCwwLAotICAgIDgxLDg4LDg3LDExMCwyMiwwLDQsMTE2LDksMCwxMDcsMTAsMCwxMTQsMTM3LDAsCi0gICAgMSwxLDEsMTAwLDAsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCw1LDAsODMsCi0gICAgNDAsNSwwLDAsMCw3OCwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDExLDAsMCwwLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwKLSAgICAxMDUsMTExLDExMCwxMDUsMywwLDAsMCwxMTcsMCwwLDAsMCw0MCwxMSwwLAotICAgIDAsMCwxMTcsMTEsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsNjYsODUsNzMsCi0gICAgNzYsNjgsMTE3LDE4LDAsMCwwLDgyLDY5LDcxLDczLDgzLDg0LDgyLDg5LDk1LAotICAgIDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LDcxLDExNywxMiwwLDAsMCw4Miw2OSwKLSAgICA3MSw3Myw4Myw4NCw4Miw4OSw5NSw3NSw2OSw4OSwxMTcsNiwwLDAsMCwxMDIsCi0gICAgMTExLDExNCwxMDksOTcsMTE2LDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsCi0gICAgMCwwLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTcsMTQsMCwwLDAsOTUsMTExLAotICAgIDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LDcsMCwwLAotICAgIDAsOTUsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsMTE3LDEwLDAsMCwwLDgxLDExNywxMDEsCi0gICAgMTE0LDEyMSw4Niw5NywxMDgsMTE3LDEwMSwxMTcsMTIsMCwwLDAsODcsMTA1LDExMCwxMDAsCi0gICAgMTExLDExOSwxMTUsNjksMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsCi0gICAgMTAxLDQwLDYsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDEyLDAsMCwwLAotICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTUsMTA3LDEwMSwxMjEsMTE3LDMsMCwwLAotICAgIDAsMTA3LDEwMSwxMjEsMTE3LDQsMCwwLDAsMTA0LDEwNywxMDEsMTIxLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsMCw5NSwxMTUsMTAxLDk3LDExNCwKLSAgICA5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwyNDcsMiwwLDAsMTE1LAotICAgIDIyLDAsMCwwLDAsMiw5LDEsMTIsMiw5LDEsMTUsMSwyMiwxLAotICAgIDMsMSwxOCwxLDI4LDEsMTMsMSw5LDEsMTE3LDM4LDAsMCwwLDg3LAotICAgIDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywKLSAgICAxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsCi0gICAgMCwwLDEyLDAsMCwwLDY3LDAsMCwwLDExNSwxMzcsMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMywwLDEyNCwzLAotICAgIDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzMSwwLDEwMCwxLDAsODMsMTIxLDE3LAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTMxLDEsMCwxLDg3LDExMCwKLSAgICAyMiwwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsNzIsMCwxLDEsMSwxMDAsCi0gICAgMSwwLDgzLDg5LDExMCwxLDAsODgsMTIwLDU3LDAsMTE2LDUsMCwxMzEsMCwKLSAgICAwLDY4LDkzLDQ2LDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsMywKLSAgICAwLDEwNiw2LDAsMTE2LDcsMCwxMjQsNSwwLDEzMSwxLDAsMTMxLDEsMCwKLSAgICAxMTQsODMsMCwxMjQsNCwwLDEyNCwxLDAsMTI0LDMsMCwxMzEsMiwwLDgzLAotICAgIDExMyw4MywwLDg3LDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMzQsMCwKLSAgICAwLDAsNzAsMTA1LDExMCwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LAotICAgIDEwOSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwKLSAgICAxMTYsMTE0LDEyMSw0Niw3OCw0MCw4LDAsMCwwLDExNywxNiwwLDAsMCw5NSwKLSAgICAxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCw5NSwxMTEsMTE1LAotICAgIDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LDExNyw3LDAsMCwwLDc5LDgzLAotICAgIDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw4LDAsMCwwLDEwMSwxMTAsMTAwLDExNSwxMTksMTA1LAotICAgIDExNiwxMDQsMTE3LDUsMCwwLDAsMTE2LDExNywxMTIsMTA4LDEwMSw0MCw2LDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICA4LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw4LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwKLSAgICAxMDUsMTIwLDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDYsMywwLDAsMTE1LDIwLDAsMCwwLDAsMywxNSwxLDEyLDEsNCwKLSAgICAxLDMsMSwxNywxLDEzLDEsOSwxLDIyLDEsMjEsMSwxMTcsMzMsMCwKLSAgICAwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsCi0gICAgMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDc4LDcwLDQwLDEzLDAsMCwwLDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSwKLSAgICA5OSw5NSw5NSwxMTcsMTIsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsODksCi0gICAgOTUsNzUsNjksODksMTE3LDE4LDAsMCwwLDgyLDY5LDcxLDczLDgzLDg0LDgyLAotICAgIDg5LDk1LDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LDcxLDExNyw1LDAsMCwwLAotICAgIDcwLDk3LDEwOCwxMTUsMTAxLDExNywxMSwwLDAsMCw2OCw2OSw2Niw4NSw3MSw5NSwKLSAgICA2Niw4NSw3Myw3Niw2OCwxMTcsMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LAotICAgIDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDE0LDAsMCwwLDk1LDExMSwxMTIsMTAxLDExMCw5NSwKLSAgICAxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNywxNiwwLDAsMCw5NSwxMTUsMTAxLAotICAgIDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsCisgICAgMTA4LDExMCw5NywxMDksMTAxLDEyNSw5Miw2OCwxMDEsOTgsMTE3LDEwMyw3MCw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNjcsMCwwLDAsMTIxLDIzLDAsMTE2LDAsMCwxMDYsMSwwLAorICAgIDExNiwwLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwyLDAsODMsODcsMTEwLDM3LAorICAgIDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCw2MiwwLDEsMSwxLDExNiwwLAorICAgIDAsMTA2LDEsMCwxMTYsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsMiwwLAorICAgIDgzLDg5LDExMCwxLDAsODgsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDUsMjE4LAorICAgIDcsOTUsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTAsNyw3OSwxMTIsMTAxLDExMCw3NSwxMDEsCisgICAgMTIxLDkwLDE3LDcyLDc1LDY5LDg5LDk1LDY3LDg1LDgyLDgyLDY5LDc4LDg0LDk1LAorICAgIDg1LDgzLDY5LDgyLDExNCw0MCwwLDAsMCw5MCwxOCw3Miw3NSw2OSw4OSw5NSwKKyAgICA3Niw3OSw2Nyw2NSw3Niw5NSw3Nyw2NSw2Nyw3Miw3Myw3OCw2OSw0MSwyLDExNCwKKyAgICAxMSwxLDAsMCwyMTgsMywxMDcsMTAxLDEyMSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTQsOTUsMTExLDExMiwxMDEsMTEwLDk1LAorICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTIxLDUsMCwwLDExNSw4LDAsMCwKKyAgICAwLDAsMiwzLDEsMjMsMSwxMywxLDEyMiwzNiw4NywxMDUsMTEwLDEwMCwxMTEsCiAgICAgMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICAyMjcsMiwwLDAsMTE1LDE2LDAsMCwwLDE2LDMsNiwzLDYsMyw2LAotICAgIDIsNiwyLDE4LDcsMTgsMTUsMywxLDExNywyMSwwLDAsMCw4NywxMDUsCi0gICAgMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICA1LDAsMCwwLDY2LDAsMCwwLDExNSw3NCwwLDAsMCwxMjQsMCwwLAotICAgIDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCi0gICAgOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsCi0gICAgNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNiwKLSAgICAwLDEwMCwxMCwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwxLDEzMSwxLDAsCi0gICAgOTAsOCwwLDEwMCw5LDAsODMsNDAsMTEsMCwwLDAsMTE3LDEzLDAsMCwKLSAgICAwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwxMTcsODMsCi0gICAgMCwwLDAsNjYsOTcsMTE1LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTAyLAotICAgIDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsOTksMTExLDEwMCwxMDEsMzIsMTEwLDEwMSwxMDEsCi0gICAgMTAwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk4LDExMSwxMTYsMTA0LDMyLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsNSwKLSAgICAwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw4OCwwLDAsMCwKLSAgICAxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTMxLAotICAgIDEsMCwxMDAsMSwwLDI1LDEyNSwyLDAsMTI0LDIsMCwxMDYsMiwwLDEwMCwKLSAgICAyLDAsMTAwLDEsMCwxMzEsMiwwLDEwMCwzLDAsMjUsMTI1LDMsMCwxMjQsCi0gICAgMSwwLDEwNiwzLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCw0LDAsMjUsMTI1LAotICAgIDQsMCwxMjQsMywwLDEwMCw1LDAsMTA3LDIsMCwxMTEsODcsMCwxMjQsNCwKLSAgICAwLDEwMCw1LDAsMTA3LDMsMCw4Myw0MCw2LDAsMCwwLDExNywxNDEsMCwKLSAgICAwLDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwKLSAgICAxMTIsMTAxLDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsMzIsOTgsMTIxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwNSwxMTAsCi0gICAgMTAzLDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiw5OCwKLSAgICAxMjEsMzIsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDEwNCwKLSAgICA5NywxMTUsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsCi0gICAgMzIsMzksOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDExMiwxMjEsMzksNDYsMTA1LAotICAgIDEsMCwwLDAsMTE3LDEsMCwwLDAsNDYsMTA1LDAsMCwwLDAsMTA1LAotICAgIDIsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LAotICAgIDk1LDQwLDQsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMiwKLSAgICAxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsMCwxMTQsMTE1LDExMiwxMDgsCi0gICAgMTA1LDExNiwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwKLSAgICAxMTAsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsMTMsMCwwLDAsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDExMCw5NywxMDksMTAxLDk1LDk4LDk3LDExNSwxMDEsMTE3LDksMCwwLDAsCi0gICAgMTE2LDk3LDEwNSwxMDgsOTUsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsMjYsMywwLDAsMTE1LDgsMCwwLDAsMCwzLDI1LAotICAgIDEsMjIsMSwxOSwxLDExNywyNCwwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTksNSwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDIyLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMDgsMSwwLDAsMTI0LDIsMCwxMDAsCi0gICAgMSwwLDEwMCwyLDAsMTMzLDIsMCwyNSwxMjUsNSwwLDEyNCwyLDAsMTAwLAotICAgIDIsMCwxMDAsMywwLDEzMywyLDAsMjUsMTI1LDYsMCwxMjQsMiwwLDEwMCwKLSAgICAzLDAsMTAwLDQsMCwxMzMsMiwwLDI1LDEyNSw3LDAsMTI0LDUsMCwxMTYsCi0gICAgMCwwLDEwNywzLDAsMTE0LDExNSwwLDEwMCw1LDAsMTA2LDEsMCwxMjQsMSwKLSAgICAwLDEyNCw1LDAsMTMxLDIsMCwxMjUsOCwwLDExNiwyLDAsMTI0LDgsMCwKLSAgICAxMzEsMSwwLDEsMTE2LDMsMCwxMjQsOCwwLDEwMCw2LDAsMTI0LDEsMCwKLSAgICAxMDAsNywwLDEyNCwzLDAsMTMxLDEsMiwxMzAsMSwwLDExMCwxMTYsMCwxMTYsCi0gICAgNCwwLDEyNCw2LDAsMTMxLDEsMCwxMDAsMiwwLDEwNywzLDAsMTE0LDE3MywKLSAgICAwLDEwMCw4LDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDksMCwKLSAgICAxMTYsMiwwLDEyNCw5LDAsMTMxLDEsMCwxLDExNiw1LDAsMTI0LDksMCwKLSAgICAxMzEsMSwwLDEzMCwxLDAsMTEwLDU4LDAsMTE2LDQsMCwxMjQsNywwLDEzMSwKLSAgICAxLDAsMTAwLDIsMCwxMDcsMywwLDExNCwyMzEsMCwxMDAsOSwwLDEwNiwxLAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw5LDAsMTE2LDIsMCwxMjQsOSwwLAotICAgIDEzMSwxLDAsMSwxMTYsNSwwLDEyNCw5LDAsMTMxLDEsMCwxMzAsMSwwLAotICAgIDExMCwwLDAsMTI0LDQsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDE5NCwxLDEyMSwKLSAgICAyMCwwLDExNiw3LDAsMTI0LDQsMCwxMDAsMTAsMCwyNSwxMzEsMSwwLDEyNSwKLSAgICAxMCwwLDg3LDExMCwxOCwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMjcsMSwKLSAgICAxLDEsMSw4OSwxMTAsNzEsMCw4OCwxMTYsOSwwLDEyNCw2LDAsMTMxLDEsCi0gICAgMCwxMjQsMTAsMCwxMDcsMywwLDExNCw5OCwxLDEwMCwxMSwwLDEwNiwxLDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEyNSw5LDAsMTE2LDIsMCwxMjQsOSwwLDEzMSwKLSAgICAxLDAsMSwxMTYsMywwLDEyNCw5LDAsMTAwLDYsMCwxMjQsMSwwLDEwMCwKLSAgICA3LDAsMTI0LDMsMCwxMzEsMSwyLDEzMCwxLDAsMTEwLDAsMCwxMjEsMTgsCi0gICAgMCwxMjQsNCwwLDEwMCwxMiwwLDI1LDEwMCwxMywwLDY0LDEyNSwxMSwwLDg3LAotICAgIDExMCwxOCwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMTM2LDEsMSwxLDEsCi0gICAgODksMTEzLDE5NCwxLDg4LDExNiw5LDAsMTI0LDcsMCwxMzEsMSwwLDEyNCwxMSwKLSAgICAwLDEwNywzLDAsMTE0LDE5NCwxLDExNiwzLDAsMTAwLDExLDAsMTA2LDEsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDAsMTAwLDYsMCwxMjQsMSwwLDEwMCw3LDAsMTI0LAotICAgIDMsMCwxMzEsMSwyLDEzMCwxLDAsMTEzLDE5NCwxLDExMCwwLDAsMTI0LDIsCi0gICAgMCwxMDAsNCwwLDEwMCwxLDAsMTMzLDIsMCwyNSw4Myw0MCwxNCwwLDAsCi0gICAgMCwxMTcsMTkzLDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiw5OCwxMjEsMTE2LDEwMSwKLSAgICAxMTUsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ0LAotICAgIDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKLSAgICA5NywxMDMsMTA1LDk5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExMCwxMTcsMTA5LAotICAgIDk4LDEwMSwxMTQsNDQsMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwzMiw5NywKLSAgICAxMTAsMTAwLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTE1LDEwNSwxMjIsMTAxLDMyLDk3LAotICAgIDEwOCwxMTEsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMTksOTcsMTIxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDMyLDExNiwKLSAgICAxMDQsMTAxLDExMCwzMiwxMTUsMTA3LDEwNSwxMTIsMzIsMTE2LDEwNCwxMDEsMzIsMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNSwxMTYsOTcsMTA5LDExMiwzMiw5OSwxMDQsMTAxLDk5LDEwNyw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwxMDUsNCwwLDAsMCwxMDUsOCwwLAotICAgIDAsMCwxMDUsMTIsMCwwLDAsMTE3LDMwLDAsMCwwLDk4LDk3LDEwMCwzMiwKLSAgICAxMDksOTcsMTAzLDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTAsMzIsCi0gICAgMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsMTE3LDQsMCwwLDAsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE5LDAsMCwKLSAgICAwLDk4LDk3LDEwMCwzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDEwNSwKLSAgICAxMTAsMzIsMTIzLDEyNSwxMTcsMTQsMCwwLDAsOTgsOTcsMTAwLDMyLDExNSwxMDUsMTIyLAotICAgIDEwMSwzMiwxMDUsMTEwLDMyLDEyMywxMjUsMTE3LDUsMCwwLDAsMTA5LDExNiwxMDUsMTA5LAotICAgIDEwMSwxMTcsMjQsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LAotICAgIDExNSwzMiwxMTUsMTE2LDk3LDEwOCwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTIzLDEyNSwxMTcsNCwKLSAgICAwLDAsMCwxMTUsMTA1LDEyMiwxMDEsMTA4LDMsMCwwLDAsMjU1LDEyNywyNTUsMTI3LAotICAgIDMsMCw0MCwxMCwwLDAsMCwxMTcsMTIsMCwwLDAsOTUsNzcsNjUsNzEsCi0gICAgNzMsNjcsOTUsNjYsODksODQsNjksODMsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsCi0gICAgMTA5LDk3LDExNiwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsCi0gICAgOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLAotICAgIDExNyw4LDAsMCwwLDY5LDc5LDcwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCwxMDUsMTEwLDExNiwxMTcsOCwKLSAgICAwLDAsMCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsMCwKLSAgICA5NSwxMTQsOTUsMTA4LDExMSwxMTAsMTAzLDQwLDEyLDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5NywxMTcsMTMsMCwwLDAsCi0gICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLDAsCi0gICAgMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNyw1LAotICAgIDAsMCwwLDEwOSw5NywxMDMsMTA1LDk5LDExNywxMywwLDAsMCwxMTQsOTcsMTE5LAotICAgIDk1LDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMTE3LDgsMCwwLDAsMTE0LAotICAgIDk3LDExOSw5NSwxMTUsMTA1LDEyMiwxMDEsMTE3LDMsMCwwLDAsMTA5LDExNSwxMDMsMTE3LAotICAgIDcsMCwwLDAsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDEyLDAsMCwwLAotICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTEsMCwwLAotICAgIDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTA1LDEyMiwxMDEsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjAsMCwwLDAsOTUsOTgsMTIxLAotICAgIDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLAotICAgIDEwMSwzNCwzLDAsMCwxMTUsNjgsMCwwLDAsMCw3LDE2LDEsMTYsMSwKLSAgICAxNiwxLDEyLDEsMTgsMSwxMCwxLDI3LDEsMTgsMSwxNSwxLDEwLDEsCi0gICAgMTUsMSwxOCwxLDE1LDEsMTAsMSwxNSwxLDEyLDEsMywxLDIwLDEsCi0gICAgMTMsMSw1LDIsMTgsMSwxNSwxLDEwLDEsMTUsMSwxMiwxLDMsMSwKLSAgICAxOCwxLDEzLDEsNSwyLDE4LDEsMywxLDE1LDEsMjEsMywxMTcsMzQsCi0gICAgMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LAotICAgIDQ2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgMTA4LDEwMSwxMTUsMTE1LDk5LDIsMCwwLDAsMSwwLDAsMCw1LDAsMCwKLSAgICAwLDEyLDAsMCwwLDY3LDAsMCwwLDExNSwyMjcsMCwwLDAsMTI0LDEsCi0gICAgMCwxMDYsMCwwLDEyNSwzLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwzLDAsCi0gICAgMTMxLDEsMCwxMjUsNCwwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMywwLDEzMSwKLSAgICAxLDAsMTI0LDEsMCw5NSwzLDAsMTI0LDIsMCwxMTUsMTA2LDAsMTIxLDIyLAotICAgIDAsMTE2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwxMjQsMSwwLAotICAgIDk1LDUsMCw4NywxMTMsMTE4LDAsNCwxMTYsNiwwLDEwNywxMCwwLDExNCwxMDIsCi0gICAgMCwxLDEsMSwxMjQsMSwwLDEwNiwzLDAsMTI0LDEsMCw5NSw1LDAsCi0gICAgODksMTEzLDExOCwwLDg4LDExMCwxMiwwLDEyNCwxLDAsMTA2LDMsMCwxMjQsMSwKLSAgICAwLDk1LDUsMCwxMjQsMywwLDEyNCwxLDAsOTUsNywwLDEyNCwwLDAsCi0gICAgMTA2LDgsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDE3MCwwLDExNiw5LDAsMTI0LAotICAgIDEsMCwxMDYsMywwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMDMsMSwwLDEyNCwKLSAgICAxLDAsOTUsMTAsMCwxMTAsMjUsMCwxMjQsMSwwLDEwNiw3LDAsMTA2LDExLAotICAgIDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTI0LDEsMCw5NSw3LAotICAgIDAsMTI0LDAsMCwxMjQsMSwwLDk1LDEyLDAsMTE2LDEzLDAsMTE2LDE0LDAsCi0gICAgMTI0LDQsMCwxMjQsMSwwLDEwNiwxNSwwLDEzMSwzLDAsMSwxMjQsMSwwLAotICAgIDgzLDQwLDMsMCwwLDAsMTE3LDgyLDAsMCwwLDcyLDEwMSwxMDgsMTEyLDEwMSwKLSAgICAxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsOTcsOTgsMTA4LDEwMSwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsCi0gICAgMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTEsCi0gICAgMTE0LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDEwOCwxMTEsOTcsMTAwLDEwNSwxMTAsMTAzLDQ2LDEwNSwwLDAsCi0gICAgMCwwLDExNywxLDAsMCwwLDQ2LDQwLDE2LDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw4LDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLDAsOTUsOTUsMTAyLAotICAgIDEwNSwxMDgsMTAxLDk1LDk1LDExNywxNywwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5NSw5NSwxMTcsMTksMCwwLDAsNzgsCi0gICAgMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgOTUsOTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsCi0gICAgMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDExNywxMCwKLSAgICAwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTAsMCwKLSAgICAwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMTcsMjUsMCwwLAotICAgIDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksCi0gICAgMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMTE3LDQsMCwwLDAsMTAxLAotICAgIDEyMCwxMDEsOTksMTE3LDgsMCwwLDAsOTUsOTUsMTAwLDEwNSw5OSwxMTYsOTUsOTUsCi0gICAgNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDYsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNywxMSwwLDAsMCw5OSwxMTEsMTAwLDEwMSw5NSwxMTEsOTgsMTA2LDEwMSw5OSwKLSAgICAxMTYsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwKLSAgICAwLDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsODAsMywKLSAgICAwLDAsMTE1LDMyLDAsMCwwLDAsNCw5LDEsMTUsMSwxOCwxLDYsCi0gICAgMSwzLDEsMjIsMSwxMywxLDIwLDIsMTIsMSw5LDEsMTUsMSwyOCwKLSAgICAyLDI1LDEsOSwxLDE5LDEsMTE3LDI2LDAsMCwwLDk1LDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0Niw5NSwxMDgsMTExLDk3LDEwMCw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw3MCw0MCw5LDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsMTE3LDIwLDAsMCwwLDk1LDk4LDEyMSwxMTYsMTAxLDExNSwKLSAgICA5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDE3LAotICAgIDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDEyLAotICAgIDAsMCwwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLAotICAgIDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMywwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwKLSAgICAxMTUsMjEsMywwLDAsMTE1LDEwLDAsMCwwLDE2LDMsNiwyLDEyLDgsCi0gICAgMTIsNDYsNiwxLDExNywxMywwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNjYsOTcsMTE1LDEwNSw5OSwxMTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsCi0gICAgMCwwLDAsMiwwLDAsMCw2NiwwLDAsMCwxMTUsMTA0LDAsMCwwLAotICAgIDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsCi0gICAgMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMCwzLDAsMTAwLAotICAgIDQsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsCi0gICAgMCw5MCw1LDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDAsOTAsNiwwLAotICAgIDEwMCw5LDAsMTAwLDEwLDAsMTMyLDAsMCw5MCw3LDAsMTAwLDExLDAsMTAwLAotICAgIDEyLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDAsCi0gICAgMCw5MCw5LDAsMTAwLDE1LDAsODMsNDAsMTYsMCwwLDAsMTE3LDEyLDAsCi0gICAgMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMiwKKyAgICA0Niw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwxNiwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTQyLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMTQsCisgICAgMjEsMCwxMjQsMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTAsOSwwLDEyNCwwLAorICAgIDAsMTA2LDIsMCwxMjUsMiwwLDEyNCwyLDAsMTA2LDMsMCwxMDAsMSwwLAorICAgIDEyNCwxLDAsMTAwLDIsMCwxMTYsNCwwLDEwNiw1LDAsMTAwLDAsMCwxMDAsCisgICAgMywwLDEzMywyLDAsMjUsMTMxLDAsMiwxMjUsMywwLDEyMSw0NiwwLDEyNCwKKyAgICAwLDAsMTA2LDYsMCwxMjQsMywwLDEzMSwxLDAsMTQzLDI1LDAsMTI1LDQsCisgICAgMCwxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsNCwwLDEzMSwyLDAsCisgICAgMTI1LDUsMCw4NywxMDAsMCwwLDgxLDg4LDg3LDExMCwyMiwwLDQsMTE2LDksCisgICAgMCwxMDcsMTAsMCwxMTQsMTM3LDAsMSwxLDEsMTAwLDAsMCw4Myw4OSwxMTAsCisgICAgMSwwLDg4LDEyNCw1LDAsODMsNDEsNSw3OCwxMTQsMTU4LDAsMCwwLDkwLAorICAgIDExLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTQsMTM2LDAsMCwKKyAgICAwLDExNCwzMCwwLDAsMCw0MSwxMCwyMTgsMTEsNjgsNjksNjYsODUsNzEsOTUsCisgICAgNjYsODUsNzMsNzYsNjgsMjE4LDE4LDgyLDY5LDcxLDczLDgzLDg0LDgyLDg5LDk1LAorICAgIDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LDcxLDIxOCwxMiw4Miw2OSw3MSw3Myw4MywKKyAgICA4NCw4Miw4OSw5NSw3NSw2OSw4OSwxMTQsNDcsMCwwLDAsMTE0LDcsMCwwLAorICAgIDAsMjE4LDcsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNCwyNSwxLDAsMCwxMTQsCisgICAgMjMsMSwwLDAsOTAsMTAsODEsMTE3LDEwMSwxMTQsMTIxLDg2LDk3LDEwOCwxMTcsMTAxLAorICAgIDExNCw0MCwwLDAsMCw0MSw2LDExNCwxMSwxLDAsMCwxMTQsMTU4LDAsMCwKKyAgICAwLDkwLDEyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTUsMTA3LDEwMSwxMjEsMTE0LAorICAgIDI0LDEsMCwwLDkwLDQsMTA0LDEwNywxMDEsMTIxLDIxOCw4LDEwMiwxMDUsMTA4LDEwMSwKKyAgICAxMTIsOTcsMTE2LDEwNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTYsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLAorICAgIDEwNSwxMTUsMTE2LDExNCwxMjEsMTI4LDUsMCwwLDExNSwyMiwwLDAsMCwwLDIsCisgICAgOSwxLDEyLDIsOSwxLDE1LDEsMjIsMSwzLDEsMTgsMSwyOCwxLAorICAgIDEzLDEsOSwxLDEyMiwzOCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLAorICAgIDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTUsMTAxLDk3LAorICAgIDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3OCw5OSw0LDAsCisgICAgMCwwLDAsMCwwLDAsOCwwLDAsMCwxNCwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTU1LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMTI1LDQsMCwxMjQsNCwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsCisgICAgMzEsMCwxMDAsMCwwLDgzLDEyMSwxNCwwLDExNiwxLDAsMTI0LDQsMCwxMzEsCisgICAgMSwwLDEsODcsMTEwLDIyLDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw2OSwKKyAgICAwLDEsMSwxLDEwMCwwLDAsODMsODksMTEwLDEsMCw4OCwxMjAsNzgsMCwKKyAgICAxMTYsMywwLDEzMSwwLDAsNjgsOTMsNjcsMCw5MiwyLDAsMTI1LDUsMCwKKyAgICAxMjUsNiwwLDEyNCw0LDAsMTA2LDQsMCwxMTYsNSwwLDEyNCw2LDAsMTMxLAorICAgIDEsMCwxMzEsMSwwLDExNCw4MCwwLDExNiw2LDAsMTI0LDEsMCwxMjQsNSwKKyAgICAwLDEyNCwxLDAsMTI0LDQsMCwxMzEsMiwwLDEwMCwxLDAsMTI0LDQsMCwKKyAgICAxMzEsMiwxLDEyNSw3LDAsMTI0LDcsMCw4MywxMTMsODAsMCw4NywxMDAsMCwKKyAgICAwLDgzLDQxLDIsNzgsMTE0LDIxNywwLDAsMCw0MSw3LDExNCwzMSwxLDAsCisgICAgMCwxMTQsMzksMCwwLDAsMTE0LDQwLDAsMCwwLDExNCwyNDAsMCwwLDAsCisgICAgMTE0LDIzMCwwLDAsMCwxMTQsMjMxLDAsMCwwLDExNCwxNzMsMCwwLDAsNDEsCisgICAgOCwxMTQsMTEsMSwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsCisgICAgMTE0LDEyLDEsMCwwLDExNCwzMCwxLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwKKyAgICAxMjcsMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTMsMSwwLDAsMTQzLDUsMCwKKyAgICAwLDExNSwyNCwwLDAsMCwwLDIsMTUsMSwxMiwxLDQsMSwzLDEsCisgICAgMTQsMSwxMywxLDksMSwyMiwxLDIxLDEsMjEsMSw5LDEsMTIyLDMxLAorICAgIDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwKKyAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwKKyAgICAzLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw0NSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LAorICAgIDEsMCwxMjQsMiwwLDEzMSwyLDAsMTI1LDMsMCwxMjQsMywwLDEwMCwxLAorICAgIDAsMTA3LDksMCwxMTQsMzcsMCwxMjQsMywwLDEwNiwxLDAsODMsMTAwLDEsCisgICAgMCw4MywxMDAsMSwwLDgzLDQxLDIsMTIyLDEwOCw3MCwxMDUsMTEwLDEwMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCisgICAgMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwKKyAgICAzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLDIsMTE0LDEzLDEsMCwwLDExNCwxNjksCisgICAgMCwwLDAsNDEsNCwxMTQsMTEsMSwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsCisgICAgMzUsMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTQsMSwwLDAsMTU4LDUsMCwKKyAgICAwLDExNSw4LDAsMCwwLDAsNywxOCwxLDEyLDEsNywyLDEyMiwzMywKKyAgICA4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDEsMTIsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwKKyAgICAwLDAsMTE0LDU5LDAsMCwwLDExNCwyOCwxLDAsMCwxMTQsMjcsMSwwLAorICAgIDAsMTE0LDI2LDEsMCwwLDExNCwxOCwxLDAsMCwxMTQsMjUsMSwwLDAsCisgICAgMTE0LDMxLDEsMCwwLDExNCwxMywxLDAsMCwxMTQsMTQsMSwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDIyLDEsMCwwLDEwOSw1LDAsMCwxMTUsMjAsMCwwLAorICAgIDAsMTIsMiw2LDMsNiwzLDYsMiw2LDIsMTgsNywxOCwxNSwzLAorICAgIDEsMjEsMTQsMywxLDExNCwyMiwxLDAsMCw5OSwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSwKKyAgICA1MiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKKyAgICAxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCwKKyAgICA0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LAorICAgIDAsOTAsNywwLDEwMCw2LDAsODMsNDEsNywyMTgsMTMsOTUsNzYsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDEyMiw4Myw2Niw5NywxMTUsMTAxLDMyLAorICAgIDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMDIsMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiwKKyAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTgsCisgICAgMTExLDExNiwxMDQsMzIsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICAzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsCisgICAgMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDg4LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwKKyAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTI1LDIsCisgICAgMCwxMjQsMiwwLDEwNiwyLDAsMTAwLDIsMCwxMDAsMSwwLDEzMSwyLDAsCisgICAgMTAwLDMsMCwyNSwxMjUsMywwLDEyNCwxLDAsMTA2LDMsMCwxMDAsMiwwLAorICAgIDEzMSwxLDAsMTAwLDQsMCwyNSwxMjUsNCwwLDEyNCwzLDAsMTAwLDUsMCwKKyAgICAxMDcsMiwwLDExMSw4NywwLDEyNCw0LDAsMTAwLDUsMCwxMDcsMywwLDgzLAorICAgIDQxLDYsMTIyLDE0MSw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywKKyAgICAxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5OCwxMjEsMzIsOTksMTA0LDEwMSw5OSwxMDcsCisgICAgMTA1LDExMCwxMDMsMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLAorICAgIDMyLDk4LDEyMSwzMiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCisgICAgMzIsMTA0LDk3LDExNSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsCisgICAgMTExLDEwMiwzMiwzOSw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsMTEyLDEyMSwzOSwKKyAgICA0NiwxMTQsMjksMCwwLDAsMTE0LDExNiwwLDAsMCwxMTQsODQsMCwwLDAsCisgICAgMTE0LDExNSwwLDAsMCwxMTQsNzIsMCwwLDAsNDEsNCwxMTQsMzgsMCwwLAorICAgIDAsMTE0LDIzOCwwLDAsMCwxMTQsMzQsMCwwLDAsMTE0LDMyLDAsMCwwLAorICAgIDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDEzMSwwLDAsCisgICAgMCw5MCwxMywxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTUsOTgsOTcsMTE1LDEwMSwKKyAgICA5MCw5LDExNiw5NywxMDUsMTA4LDk1LDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMTksMCwwLDAsMTc3LAorICAgIDUsMCwwLDExNSw4LDAsMCwwLDAsMywyNSwxLDIyLDEsMTksMSwKKyAgICAxMjIsMjQsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LAorICAgIDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwKKyAgICAwLDAsMCwzLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDgwLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsCisgICAgMTMxLDEsMCwxMjUsMiwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwKKyAgICA1NywwLDExNiwyLDAsMTAwLDIsMCwxMDYsMywwLDEyNCwxLDAsMTA2LDEsCisgICAgMCwxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDExNiw0LDAsCisgICAgMTE2LDUsMCwxMjQsMiwwLDEyNCwxLDAsMTA2LDYsMCwxMzEsMywwLDEsCisgICAgMTAwLDEsMCw4Myw0MSwzLDEyMiwxOSw2OSwxMjAsMTAxLDk5LDExNywxMTYsMTAxLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LDEyMiw1Miw5OSw5NywKKyAgICAxMTAsMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTIzLDMzLDExNCwxMjUsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDEwMywxMDEsMTE2LDk1LDk5LAorICAgIDExMSwxMDAsMTAxLDQwLDQxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw3OCwxMTEsCisgICAgMTEwLDEwMSw0MSw3LDExNCwxNSwxLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDE1MywKKyAgICAwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTc1LDAsCisgICAgMCwwLDExNCw2MywwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsMTc5LAorICAgIDAsMCwwLDExNCwxOTQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDEsMSwwLDAsMTg1LDUsMCwwLAorICAgIDExNSwxMCwwLDAsMCwwLDIsMTgsMSwxMiwxLDMsMSwyNCwxLDEyMiwKKyAgICAyNSw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTAxLAorICAgIDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDEsOCwxMTQsNTcsMCwKKyAgICAwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLAorICAgIDAsMTE0LDIxOSwwLDAsMCwxMTQsMSwxLDAsMCwxMTQsMTgwLDAsMCwwLAorICAgIDExNCw0LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzMiwxLDAsMCwxNzIsNSwKKyAgICAwLDAsMTE1LDgsMCwwLDAsMTIsMyw2LDIsMTIsOCwxMiw4LDExNCwKKyAgICAzMiwxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCw0LDAsMCwwLDY0LDAsMCwwLDExNSwxMDYsMCwwLDAsMTAxLDAsCisgICAgMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwxMDAsMiwwLAorICAgIDEzMiwwLDAsOTAsMywwLDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLDkwLAorICAgIDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDcsCisgICAgMCwxMDAsOCwwLDEzMiwwLDAsOTAsNiwwLDEwMCw5LDAsMTAwLDEwLDAsCisgICAgMTMyLDAsMCw5MCw3LDAsMTAwLDExLDAsMTAwLDE4LDAsMTAwLDEzLDAsMTAwLAorICAgIDE0LDAsMTMyLDAsMSw5MCw4LDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsCisgICAgMCw5MCw5LDAsMTAwLDE3LDAsODMsNDEsMTksMjE4LDEyLDgzLDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMiwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsMTAsMCwKKyAgICAwLDAsMTE2LDAsMCwxMzAsMSwwLDEwMCwxLDAsODMsNDEsMiwxMjIsMTc4LAorICAgIDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLAorICAgIDExNiwxMDQsOTcsMTE2LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDEwNSwKKyAgICAxMDksMTAxLDMyLDQwLDk3LDExMCwzMiwxMDUsMTEwLDExNiw0MSwzMiwxMDIsMTExLDExNCwzMiwKKyAgICAxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSwKKyAgICAxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDExMiw5NywxMTYsMTA0LDQ0LDMyLDExOSwxMDQsMTAxLDExNCwKKyAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiw5NywzMiwxMTUsMTE2LDExNCw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4Miw5NywxMDUsMTE1LDEwMSwxMTUsCisgICAgMzIsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsOTgsMTAxLAorICAgIDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDc4LDQxLDEsMjE4LDcsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDQxLDIsCisgICAgMTE0LDcxLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxOTgsNSwwLDAsMTE1LDIsMCwwLDAsMCw2LAorICAgIDEyMiwyMyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExMiwKKyAgICA5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMjAsCisgICAgMCwwLDAsMTA1LDEsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEwMCwxLDAsNTQsODMsNDEsMiw5NywxNzAsMSwwLDAsNzksMTEyLAorICAgIDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE0LDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsOTcsMzIsMTA5LDEwMSwxMTYsOTcsMTAwLDk3LAorICAgIDExNiw5NywzMiwxMDAsMTA1LDk5LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDExMiw5NywxMTYsMTA0LDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDgwLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLDMyLDEwNywxMDEsCisgICAgMTIxLDExNSw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw0NSwzMiwzOSwxMDksCisgICAgMTE2LDEwNSwxMDksMTAxLDM5LDMyLDQwLDEwOSw5NywxMTAsMTAwLDk3LDExNiwxMTEsMTE0LDEyMSwKKyAgICA0MSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMCwxMTcsMTA5LDEwMSwxMTQsMTA1LDk5LAorICAgIDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTExLDEwMiwzMiwxMDgsOTcsCisgICAgMTE1LDExNiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDk5LDExMSwxMDAsMTAxLDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LDk5LAorICAgIDk3LDExNiwxMDUsMTExLDExMCw1OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw0NSwKKyAgICAzMiwzOSwxMTUsMTA1LDEyMiwxMDEsMzksMzIsNDAsMTExLDExMiwxMTYsMTA1LDExMSwxMTAsOTcsCisgICAgMTA4LDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwNSwxMjIsMTAxLDMyLDEwNSwKKyAgICAxMTAsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAorICAgIDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsCisgICAgMTAzLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiw5NywxMDgsCisgICAgMTA4LDExMSwxMTksMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCisgICAgMTE2LDExMSwzMiwxMTQsMTAxLDk3LDEwMCwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwKKyAgICAzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDgyLDk3LDEwNSwxMTUsMTAxLDExNSwzMiw3Myw3OSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTE5LAorICAgIDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDk5LDk3LDExMCwKKyAgICAxMTAsMTExLDExNiwzMiw5OCwxMDEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwxMDAsNDYsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDE4MywwLDAsMCw0MSwxLDExNCwKKyAgICAzNSwxLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMzUsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDEwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwyMDYsNSwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCwxMSwxMjIsMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksCisgICAgNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwKKyAgICAyLDAsMTI0LDMsMCwxMzEsMiwwLDgzLDQxLDEsMTIyLDIyOCw3OSwxMTIsMTE2LAorICAgIDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTksMTA0LDEwNSwKKyAgICA5OSwxMDQsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiw0MCwKKyAgICA5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsCisgICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsOTcsMzIsMTE1LDExNiwxMTQsNDEsNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLAorICAgIDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCisgICAgMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwKKyAgICAxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDEwNSwxMTAsCisgICAgMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDk5LDExMSwxMTQsMTE0LDEwMSw5OSwKKyAgICAxMTYsMTA4LDEyMSwzMiwxMTYsMTE0LDk3LDExMCwxMTUsMTAyLDEwMSwxMTQsMzIsMTEyLDEwMSwxMTQsCisgICAgMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw0MSwxLDIxOCw4LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDEsNCwxMTQsCisgICAgNzEsMCwwLDAsMTE0LDE0MSwwLDAsMCw5MCwxMCw5OSw5Nyw5OSwxMDQsMTAxLAorICAgIDk1LDExMiw5NywxMTYsMTA0LDExNCw1MywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTUsOTUsOTksOTcsOTksMTA0LAorICAgIDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwyMTksNSwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCw4LDEyMiwyOCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCisgICAgMTExLDEwMCwxMDEsOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCisgICAgMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLAorICAgIDgzLDQxLDIsMTIyLDE1MCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLAorICAgIDExNiwxMDQsMTExLDEwMCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwKKyAgICAxMTUsMzIsMTAwLDk3LDExNiw5NywzMiw0MCw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMzIsMTE2LAorICAgIDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsOTcsCisgICAgMzIsMTE1LDExNiwxMTQsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwKKyAgICAxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwKKyAgICAxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsCisgICAgMTExLDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsCisgICAgMTE1LDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDExNCw0LDAsMCwKKyAgICAwLDQxLDMsMTE0LDcxLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNTMsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDM3LDEsMCwwLDIyOSw1LDAsMCwxMTUsMCwwLDAsMCwxMjIsCisgICAgMjEsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLAorICAgIDExNiw5NSwxMDAsOTcsMTE2LDk3LDk5LDIsMCwwLDAsMCwwLDAsMCw1LAorICAgIDAsMCwwLDE2LDAsMCwwLDY3LDAsMCwwLDExNSwxMDUsMCwwLDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyMSwKKyAgICAxOSwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsCisgICAgMCw4NywxMTAsNTgsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDk0LDAsMSwKKyAgICAxMjUsNCwwLDEsMTIyLDI2LDAsMTE2LDMsMCwxMDAsMSwwLDEwMCwyLDAsCisgICAgMTI0LDEsMCwxMzEsMSwxLDEyNCw0LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMywKKyAgICAwLDEwMCwzLDAsMTI1LDQsMCwxMjYsNCwwLDg4LDExMCwxLDAsODgsMTE2LAorICAgIDQsMCwxMjQsMywwLDEzMSwxLDAsODMsNDEsNCwxMjIsNTIsNjcsMTExLDExMCwKKyAgICA5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsCisgICAgMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwxMTIsMTAxLDk5LDExNiw3NiwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICA0NiwxMjIsMzksMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTAsMTExLDExNiwzMiw5NywxMTgsCisgICAgOTcsMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLDMyLDExNiwxMDQsMTE0LDExMSwxMTcsMTAzLDEwNCwzMiwKKyAgICAxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQwLDQxLDExNCw2NywwLDAsMCw3OCwKKyAgICA0MSw1LDExNCwyMzgsMCwwLDAsMjE4LDgsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiwKKyAgICA5NywxMTQsNDAsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsMjAzLDAsMCwwLAorICAgIDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDExNCwyMDEsMCwwLDAsMjE4LDMsMTAxLDEyMCw5OSwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTYsMSwwLDAsMjM2LAorICAgIDUsMCwwLDExNSwxNCwwLDAsMCwwLDIsMTUsMSwzLDEsMTksMSwKKyAgICAxOCwxLDksMSwzMSwxLDEyMiwyMyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMjE4LAorICAgIDksOTUsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwxMTQsMjksMCwwLDAsOTksCisgICAgMywwLDAsMCwxLDAsMCwwLDQsMCwwLDAsOSwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMzEsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEyNCwKKyAgICAxLDAsMTI0LDIsMCwxMDAsMSwwLDEwMCwyLDAsMTAwLDMsMCwxMDAsNCwKKyAgICAwLDEyNCwzLDAsMTMxLDQsMiw4Myw0MSw1LDEyMiwxMzAsODIsMTAxLDExNiwxMTcsCisgICAgMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSwKKyAgICA5OSwxMTYsMzIsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwKKyAgICAzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTAwLDk3LDExNiw5NywzOSwzMiw5NywxMTQsMTAzLAorICAgIDExNywxMDksMTAxLDExMCwxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwzMiw5NywxMTAsMTIxLAorICAgIDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMTYsMTIxLDExMiwxMDEsMzIsMTE2LDEwNCw5NywKKyAgICAxMTYsMzIsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsNDAsNDEsMzIsMTE1LDExNywxMTIsMTEyLAorICAgIDExMSwxMTQsMTE2LDExNSw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMTc1LAorICAgIDAsMCwwLDIxOCwxMiwxMDAsMTExLDExMCwxMTYsOTUsMTA1LDExMCwxMDQsMTAxLDExNCwxMDUsCisgICAgMTE2LDg0LDExNCwxMTgsMCwwLDAsNDEsMiwxMTQsMTE0LDAsMCwwLDIxOCw3LAorICAgIDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDQxLDQsMTE0LDcxLDAsMCwwLDExNCw1MywKKyAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQxLDEsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNCwxMTUsMTExLAorICAgIDExNywxMTQsOTksMTAxLDk1LDExNiwxMTEsOTUsOTksMTExLDEwMCwxMDEsMjQ2LDUsMCwwLAorICAgIDExNSw0LDAsMCwwLDAsNSwxOCwxLDEyMiwyNyw4MywxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE2LAorICAgIDExMSw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMTAsCisgICAgMCwwLDAsNDUsMCwwLDAsNjcsMCwwLDAsMTE1LDE3NywxLDAsMCwKKyAgICAxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTAwLAorICAgIDEsMCwxMjUsMywwLDEyMSwxNiwwLDExNiwxLDAsMTI0LDIsMCwxMzEsMSwKKyAgICAwLDEyNSw0LDAsODcsMTEwLDI0LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCwKKyAgICA2MywwLDEsMSwxLDEwMCwxLDAsMTI1LDQsMCw4OSwxMTAsMjAyLDAsODgsCisgICAgMTIxLDE5LDAsMTI0LDAsMCwxMDYsMywwLDEyNCwyLDAsMTMxLDEsMCwxMjUsCisgICAgNSwwLDg3LDExMCwxOCwwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsMTAzLDAsCisgICAgMSwxLDEsODksMTEwLDE2MiwwLDg4LDExNiw1LDAsMTI0LDUsMCwxMDAsMiwKKyAgICAwLDI1LDEzMSwxLDAsMTI1LDMsMCwxMjEsMTksMCwxMjQsMCwwLDEwNiw2LAorICAgIDAsMTI0LDQsMCwxMzEsMSwwLDEyNSw2LDAsODcsMTEwLDE4LDAsNCwxMTYsCisgICAgNywwLDEwNywxMCwwLDExNCwxNTksMCwxLDEsMSw4OSwxMTAsMTA2LDAsODgsCisgICAgMTIxLDM0LDAsMTE2LDgsMCwxMjQsNiwwLDEwMCwzLDAsMTI0LDUsMCwxMDAsCisgICAgNCwwLDEyNCwxLDAsMTAwLDUsMCwxMjQsNCwwLDEzMSwxLDMsMTI1LDcsCisgICAgMCw4NywxMTAsMjQsMCw0LDExNiw5LDAsMTE2LDEwLDAsMTAyLDIsMCwxMDcsCisgICAgMTAsMCwxMTQsMjIwLDAsMSwxLDEsODksMTEwLDQ1LDAsODgsMTE2LDExLDAsCisgICAgMTAwLDYsMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDMsMCwxLDExNiwxMiwwLAorICAgIDEyNCw3LDAsMTAwLDQsMCwxMjQsMSwwLDEwMCw3LDAsMTI0LDQsMCwxMDAsCisgICAgOCwwLDEyNCwyLDAsMTMxLDEsMyw4MywxMjQsMCwwLDEwNiw2LDAsMTI0LAorICAgIDIsMCwxMzEsMSwwLDEyNSw4LDAsMTI0LDAsMCwxMDYsMTMsMCwxMjQsOCwKKyAgICAwLDEyNCwyLDAsMTMxLDIsMCwxMjUsOSwwLDExNiwxMSwwLDEwMCw5LDAsCisgICAgMTI0LDIsMCwxMzEsMiwwLDEsMTE2LDE0LDAsMTA2LDE1LDAsMTIsMTE0LDE3MywKKyAgICAxLDEyNCw0LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxNzMsMSwxMjQsMywwLAorICAgIDEwMCwxLDAsMTA3LDksMCwxMTQsMTczLDEsMTE2LDE2LDAsMTI0LDksMCwxMjQsCisgICAgMywwLDExNiwxNywwLDEyNCw4LDAsMTMxLDEsMCwxMzEsMywwLDEyNSw2LAorICAgIDAsMTIxLDM2LDAsMTI0LDAsMCwxMDYsMTgsMCwxMjQsMiwwLDEyNCw0LDAsCisgICAgMTI0LDYsMCwxMzEsMywwLDEsMTE2LDExLDAsMTAwLDEwLDAsMTI0LDQsMCwKKyAgICAxMzEsMiwwLDEsODcsMTEzLDE3MywxLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsCisgICAgMTY5LDEsMSwxLDEsODksMTEzLDE3MywxLDg4LDExMCwwLDAsMTI0LDksMCwKKyAgICA4Myw0MSwxMSwxMjIsMTkwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksCisgICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLAorICAgIDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsCisgICAgMTE2LDk1LDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDgyLDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LDEwMSwKKyAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwxMDUsCisgICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDMyLDg0LDExMSwzMiwxMTksCisgICAgMTE0LDEwNSwxMTYsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk4LDEyMSwxMTYsCisgICAgMTAxLDk5LDExMSwxMDAsMTAxLDQ0LDMyLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMzIsCisgICAgMTA5LDExNywxMTUsMTE2LDMyLDk3LDEwOCwxMTUsMTExLDMyLDk4LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDc4LDExNCwxODMsMCwwLDAsMTE0LDE4NywwLDAsMCwxMTQsNjcsCisgICAgMCwwLDAsMTE0LDM1LDAsMCwwLDEyMiwxMywxMjMsMTI1LDMyLDEwOSw5NywxMTYsCisgICAgOTksMTA0LDEwMSwxMTUsMzIsMTIzLDEyNSwxMTQsMTQwLDAsMCwwLDExNCwxNDEsMCwwLAorICAgIDAsMTIyLDE5LDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsCisgICAgMTE0LDExMSwxMDksMzIsMTIzLDEyNSwxMjIsMTAsMTE5LDExNCwxMTEsMTE2LDEwMSwzMiwxMjMsMzMsCisgICAgMTE0LDEyNSw0MSwxOSwxMTQsMjM4LDAsMCwwLDExNCwxMzIsMCwwLDAsMTE0LDEyNCwKKyAgICAwLDAsMCwxMTQsMzYsMSwwLDAsMTE0LDM0LDEsMCwwLDExNCwxNCwwLAorICAgIDAsMCwxMTQsMzksMSwwLDAsMTE0LDQwLDAsMCwwLDExNCwxOTAsMCwwLAorICAgIDAsMTE0LDE1MywwLDAsMCwxMTQsMTg2LDAsMCwwLDExNCwxNTIsMCwwLDAsCisgICAgMTE0LDE5NSwwLDAsMCwxMTQsNDQsMSwwLDAsMTE0LDcsMCwwLDAsMjE4LAorICAgIDE5LDEwMCwxMTEsMTEwLDExNiw5NSwxMTksMTE0LDEwNSwxMTYsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLAorICAgIDk5LDExMSwxMDAsMTAxLDExNCwxOTgsMCwwLDAsMTE0LDMxLDAsMCwwLDExNCwzOCwKKyAgICAxLDAsMCw0MSwxMCwxMTQsNzEsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsCisgICAgMTQxLDAsMCwwLDExNCwxODgsMCwwLDAsMTE0LDE0MCwwLDAsMCwyMTgsMiwKKyAgICAxMTUsMTE2LDExNCw1MywwLDAsMCwyMTgsMTAsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMCwKKyAgICA5NywxMTYsOTcsMTE0LDIwMSwwLDAsMCw5MCwxMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTEsCisgICAgOTgsMTA2LDEwMSw5OSwxMTYsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDE1LDEsMCwwLDI1NCw1LDAsMCwxMTUsNzgsMCwKKyAgICAwLDAsMCw3LDE1LDEsNiwxLDMsMSwxNiwxLDEzLDEsMTEsMiwKKyAgICAzLDEsMTksMSwxMywxLDUsMiwxNiwxLDMsMSwxOSwxLDEzLDEsCisgICAgNSwyLDMsMSw5LDEsMTIsMSwxMywxLDE5LDEsNSwyLDksMSwKKyAgICA3LDEsMTUsMSw2LDEsNywxLDE1LDEsMTgsMSwxMywxLDIyLDEsCisgICAgMTIsMSw5LDEsMTUsMSwzLDEsMTksMSwxNywxLDEzLDEsOCwxLAorICAgIDEyMiwyMSw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywKKyAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDc4LDExNCwxMzgsMCwwLDAsNDEsMTAsMTE0LAorICAgIDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDM1LAorICAgIDEsMCwwLDExNCwzNiwxLDAsMCwxMTQsMzgsMSwwLDAsMTE0LDM3LDEsCisgICAgMCwwLDExNCwxNiwxLDAsMCwxMTQsNDQsMSwwLDAsMTE0LDE1LDEsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwzMywxLDAsMCwxOTYsNSwwLDAsMTE1LDE0LAorICAgIDAsMCwwLDEyLDIsMTIsOCwxMiwxMywxMiwxMCwxMiw3LDEyLDEwLDE4LAorICAgIDgsMTE0LDMzLDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwxMTUsMTEyLDAsMCwwLAorICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsCisgICAgMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwKKyAgICAwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLAorICAgIDEzMiwwLDAsOTAsNiwwLDEwMSw3LDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwKKyAgICA4LDAsMTAwLDksMCwxMzQsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSw3LAorICAgIDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDksMCwKKyAgICAxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDkwLDEwLDAsMTM1LDAsMCw4MywKKyAgICA0MSwxNCwyMTgsMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEyMiwxMDMsCisgICAgNjYsOTcsMTE1LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICAzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTA1LDEwOSwxMTIsCisgICAgMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsMzIsMTEyLDExNCwxMTEsMTE2LDExMSw5OSwxMTEsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwKKyAgICAxMTEsMTAwLDExNSwzMiwxMTYsMTA0LDk3LDExNiwxMCwzMiwzMiwzMiwzMiwxMTQsMTAxLDExMywKKyAgICAxMTcsMTA1LDExNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LAorICAgIDMyLDExNywxMTUsOTcsMTAzLDEwMSw0Niw5OSwzLDAsMCwwLDAsMCwwLDAsCisgICAgMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsCisgICAgMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCwKKyAgICA5NSwxLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw3NSw2Nyw5Nyw5OSwxMDQsMTAxLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLAorICAgIDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiwKKyAgICA5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTAyLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsNzgsNDEsMiwxMTQsNjcsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LAorICAgIDM1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCw3MiwwLDAsMCw1NSw2LDAsMCwxMTUsNCwwLDAsCisgICAgMCwwLDMsOSwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDM0LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwwLDAsCisgICAgMTA3LDIsMCwxMTEsMzMsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMDYsCisgICAgMSwwLDEwNywyLDAsODMsNDEsMSw3OCw0MSwyLDExNCwyMjQsMCwwLDAsCisgICAgMTE0LDYzLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwyMjcsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDIyOSwwLDAsMCw2MSw2LDAsMCwxMTUsNCwwLDAsMCwwLDEsCisgICAgMTgsMSwxMjIsMTcsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LAorICAgIDk1LDEwMSwxMTMsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKKyAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LAorICAgIDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMTYsMCwwLDEyNCwwLAorICAgIDAsMTA2LDIsMCwxMzEsMSwwLDY1LDgzLDQxLDEsNzgsNDEsMywyMTgsNCwKKyAgICAxMDQsOTcsMTE1LDEwNCwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDQxLDEsCisgICAgMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCw4LDk1LDk1LDEwNCw5NywxMTUsMTA0LDk1LDk1LDY1LDYsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzYsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNCw5NywxMTUsMTA0LDk1LDk1LDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywKKyAgICAwLDAsMCwxMTUsMjIsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEyNCwwLAorICAgIDAsMTMxLDIsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MSwxLAorICAgIDEyMiwxMDAsNzYsMTExLDk3LDEwMCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKKyAgICAxMDIsMTE0LDExMSwxMDksMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCisgICAgMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwKKyAgICAzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDQxLDMsMjE4LDUsMTE1LDExNywxMTIsMTAxLDExNCwxMTQsCisgICAgNDgsMSwwLDAsMTE0LDQsMSwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDE1OCwwLDAsMCw0MSwxLDExNCwyMjQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDQsMSwwLDAsNjgsNiwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCwxMCwxMjIsMjIsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsCiAgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDEwLDAsMCwwLDExNiwwLDAsMTMwLDEsMCwxMDAsMSwKLSAgICAwLDgzLDQwLDIsMCwwLDAsMTE3LDEyMSwwLDAsMCw3OSwxMTIsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTYsMTA0LDk3LDExNiwKLSAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCi0gICAgMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMDUsMTA5LDEwMSwzMiw0MCwKLSAgICA5NywxMTAsMzIsMTA1LDExMCwxMTYsNDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLAotICAgIDEwMCwzMiwxMTIsOTcsMTE2LDEwNCw0NCwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNzgsNDAsMSwwLDAsMCwxMTcsMTksMCwwLDAsCi0gICAgNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMTA2LDMsMCwwLDExNSwyLDAsMCwwLDAsNCwKLSAgICAxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDIwLDAsMCwwLDEwNSwxLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMCwxMDAsMSwwLDU0LDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDExNCwxLDAsMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDUsMTEwLDEwMywzMiw5NywzMiwKLSAgICAxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMCwxMDUsOTksMTE2LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsCi0gICAgMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwKLSAgICA5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTE1LDExNiwxMTQsCi0gICAgNDEsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODAsMTExLDExNSwxMTUsMTA1LAotICAgIDk4LDEwOCwxMDEsMzIsMTA3LDEwMSwxMjEsMTE1LDU4LDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDQ1LDMyLDM5LDEwOSwxMTYsMTA1LDEwOSwxMDEsMzksMzIsNDAsMTA5LDk3LDExMCwKLSAgICAxMDAsOTcsMTE2LDExMSwxMTQsMTIxLDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAotICAgIDExNywxMDksMTAxLDExNCwxMDUsOTksMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwKLSAgICAzMiwxMTEsMTAyLDMyLDEwOCw5NywxMTUsMTE2LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTExLDEwMCwxMDEsMzIsMTA5LAotICAgIDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDU5LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDExNSwxMDUsMTIyLDEwMSwzOSwzMiw0MCwxMTEsCi0gICAgMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsNDEsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTA1LDEyMiwxMDEsMzIsMTA1LDExMCwzMiw5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTExLDEwMiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LAotICAgIDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDExNCwxMDEsOTcsMTAwLDMyLDk4LDEyMSwKLSAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTUsNDYsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMTE3LDUsMCwwLDAsMTA5LDExNiwxMDUsMTA5LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDksCi0gICAgMTE2LDEwNSwxMDksMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTIsMywwLDAsMTE1LDIsMCwwLDAsMCwKLSAgICAxMCwxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwwLAotICAgIDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwyLDAsCi0gICAgMTI0LDMsMCwxMzEsMiwwLDgzLDQwLDEsMCwwLDAsMTE3LDIyOCwwLDAsCi0gICAgMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LAotICAgIDExNiw5NywzMiw0MCw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMzIsMTE2LDExMSwzMiw5NywzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsOTcsMzIsMTE1LDExNiwxMTQsCi0gICAgNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwKLSAgICAxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsCi0gICAgMTAwLDMyLDEwNSwxMTAsMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDk5LDExMSwKLSAgICAxMTQsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMTYsMTE0LDk3LDExMCwxMTUsMTAyLDEwMSwxMTQsCi0gICAgMzIsMTEyLDEwMSwxMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw0MCwxLDAsMCwwLDExNyw4LDAsMCwwLDExNSwKLSAgICAxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDAsNCwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEwLDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5Nyw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwwLDAsMCw5NSw5OSwKLSAgICA5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDEyNCwzLDAsCi0gICAgMCwxMTUsMiwwLDAsMCwwLDgsMTE3LDI4LDAsMCwwLDgzLDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTksOTcsOTksMTA0LDEwMSwKLSAgICA5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5OSwzLDAsMCwwLDAsMCwKLSAgICAwLDAsMywwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwxMTYsMCwwLDEzMCwxLDAsMTAwLDEsMCw4Myw0MCwyLDAsCi0gICAgMCwwLDExNywxNTEsMCwwLDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LAotICAgIDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLAotICAgIDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAotICAgIDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LAotICAgIDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwKLSAgICAxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsCi0gICAgMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MCwKLSAgICAxLDAsMCwwLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsNDAsMywwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5Nyw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwMCw5NywxMTYsOTcsMTM0LDMsMCwwLDExNSwyLDAsMCwwLDAsNiwKLSAgICAxMTcsMjEsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDk5LDIsMCwwLDAsMCwKLSAgICAwLDAsMCw5LDAsMCwwLDQ0LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICA2MiwxLDAsMCwxMDAsMSwwLDEwMCwyLDAsMTA4LDAsMCwxMjUsMiwwLAotICAgIDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjEsCi0gICAgMTksMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDMsMCwxMzEsMSwwLDEyNSw0LAotICAgIDAsODcsMTEwLDU4LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCwxMDYsMCwxLAotICAgIDEyNSw1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCwzLDAsMTAwLDQsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LDEwMCwyLAotICAgIDAsMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCw4OCwxMTYsCi0gICAgNSwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEwNiw3LDAsMTI1LDYsCi0gICAgMCwxMjEsMTksMCwxMjQsMiwwLDEwNiw4LDAsMTI0LDYsMCwxMzEsMSwwLAotICAgIDEyNSw3LDAsODcsMTEwLDU4LDAsNCwxMTYsOSwwLDEwNywxMCwwLDExNCwyMDQsCi0gICAgMCwxLDEyNSw1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCw1LDAsMTAwLAotICAgIDQsMCwxMjQsMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LAotICAgIDEwMCwyLDAsMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCwKLSAgICA4OCwxMTYsNSwwLDEwNiwxMCwwLDEwMCwyLDAsMTAwLDcsMCwxMzEsMiwwLAotICAgIDEyNSw4LDAsMTIxLDMwLDAsMTI0LDgsMCwxMDYsMTMsMCwxMjQsNCwwLDEwNiwKLSAgICAxMywwLDEyNCw3LDAsMTAwLDEsMCwyNSwxMzEsMSwwLDEzMSwxLDAsODMsCi0gICAgODcsMTEwLDU4LDAsNCwxMTYsMTQsMCwxMDcsMTAsMCwxMTQsNTcsMSwxLDEyNSwKLSAgICA1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCw2LDAsMTAwLDQsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LDEwMCwyLDAsCi0gICAgMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCw4OCwxMDAsMiwKLSAgICAwLDgzLDQwLDgsMCwwLDAsMTE3LDUyLDAsMCwwLDY3LDExMSwxMTAsOTksCi0gICAgMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwKLSAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsCi0gICAgMTA1LDAsMCwwLDAsNzgsMTE3LDM5LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwzMiwKLSAgICAxMTYsMTA0LDExNCwxMTEsMTE3LDEwMywxMDQsMzIsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICA0MCw0MSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMjUsMCwwLDAsCi0gICAgNzAsOTcsMTA1LDEwOCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiwKLSAgICAzMiwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsMTE3LDI4LDAsMCwwLDcwLDk3LAotICAgIDEwNSwxMDgsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsODQsNDAsMTUsMCwwLDAsCi0gICAgMTE3LDgsMCwwLDAsMTE2LDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTcsMTIsMCwKLSAgICAwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LDcsMCwwLDAsCi0gICAgNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLDExNywKLSAgICA3LDAsMCwwLDY2LDEyMSwxMTYsMTAxLDExNSw3Myw3OSwxMTcsOCwwLDAsMCwKLSAgICAxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsMTE3LDE1LDAsMCwwLDEwMCwxMDEsMTE2LAotICAgIDEwMSw5OSwxMTYsOTUsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDExNywxMSwwLDAsCi0gICAgMCw4MywxMjEsMTEwLDExNiw5NywxMjAsNjksMTE0LDExNCwxMTEsMTE0LDExNywyNSwwLDAsCi0gICAgMCw3MywxMTAsOTksMTE0LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTA4LDc4LDEwMSwxMTksMTA4LAotICAgIDEwNSwxMTAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsCi0gICAgMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDYsMCwwLAotICAgIDAsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTgsMCwwLDAsODUsMTEwLDEwNSw5OSwKLSAgICAxMTEsMTAwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDQwLDksCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCwxMTYsMTExLAotICAgIDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICAxMiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSwKLSAgICAxMTcsMywwLDAsMCwxMDEsMTIwLDk5LDExNywxMCwwLDAsMCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsMCwwLDEwMSwxMTAsOTksMTExLAotICAgIDEwMCwxMDUsMTEwLDEwMywxMTcsMTUsMCwwLDAsMTEwLDEwMSwxMTksMTA4LDEwNSwxMTAsMTAxLAotICAgIDk1LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTQzLDMsMCwwLDExNSwzOCwwLDAsMCwwLDIsMTIsMSwKLSAgICAxNSwxLDMsMSwxOSwxLDE4LDEsOSwxLDMxLDEsMTgsMSwzLDEsCi0gICAgMTksMSwxOCwxLDksMSwzMSwxLDE4LDEsMywxLDMwLDEsMTgsMSwKLSAgICA5LDEsMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsNDUsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUyLDIsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwKLSAgICAwLDEzMSwxLDAsMTI1LDIsMCwxMDAsMTAsMCwxMjUsMywwLDEyMSwxNiwwLAotICAgIDExNiwyLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw0LDAsODcsMTEwLDI0LDAsCi0gICAgNCwxMTYsMywwLDEwNywxMCwwLDExNCw2MywwLDEsMSwxLDEwMCwxMCwwLAotICAgIDEyNSw0LDAsODksMTEwLDE0LDEsODgsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNCwKLSAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNSwwLDg3LDExMCwxOCwwLDQsMTE2LAotICAgIDMsMCwxMDcsMTAsMCwxMTQsMTAzLDAsMSwxLDEsODksMTEwLDIzMCwwLDg4LAotICAgIDExNiw1LDAsMTI0LDUsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMTI1LDMsMCwKLSAgICAxMjEsMTksMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSwKLSAgICA2LDAsODcsMTEwLDE4LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTksMCwKLSAgICAxLDEsMSw4OSwxMTAsMTc0LDAsODgsMTIxLDI4LDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDEyNCwxLDAsMTI0LDYsMCwxMjQsNCwwLDEyNCw1LDAsMTMxLDQsMCwKLSAgICAxMjUsNywwLDg3LDExMCwyNCwwLDQsMTE2LDksMCwxMTYsMTAsMCwxMDIsMiwKLSAgICAwLDEwNywxMCwwLDExNCwyMTQsMCwxLDEsMSw4OSwxMTAsMTE5LDAsODgsMTE2LAotICAgIDExLDAsMTAwLDIsMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDMsMCwxLDExNiwKLSAgICAxMiwwLDEwNiwxMywwLDEyNCw3LDAsMTMxLDEsMCwxMjUsOCwwLDExNiwxNCwKLSAgICAwLDEyNCw4LDAsMTE2LDE1LDAsMTMxLDIsMCwxMTQsMzgsMSwxMTYsMTYsMCwKLSAgICAxMDYsMTcsMCwxMjQsOCwwLDEyNCwyLDAsMTMxLDIsMCwxLDExNiwxMSwwLAotICAgIDEwMCwzLDAsMTI0LDQsMCwxMzEsMiwwLDEsMTI0LDgsMCw4MywxMDAsNCwKLSAgICAwLDEyNSw5LDAsMTE2LDksMCwxMjQsOSwwLDEwNiwxOCwwLDEyNCw0LDAsCi0gICAgMTMxLDEsMCwxMDAsNSwwLDEyNCwxLDAsMTAwLDYsMCwxMjQsNCwwLDEzMSwKLSAgICAxLDIsMTMwLDEsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDIsMCwxMzEsMSwKLSAgICAwLDEyNSwxMCwwLDExNiwxOSwwLDExNiwyMCwwLDEyNCwxMCwwLDEyNCwyLDAsCi0gICAgMTAwLDcsMCwxMDAsOCwwLDEwMCwxMSwwLDEzMSw0LDEsMTI1LDExLDAsMTE2LAotICAgIDExLDAsMTAwLDMsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMTYsMjIsMCwxMDYsCi0gICAgMjMsMCwxMiwxMTQsNDgsMiwxMjQsNCwwLDEwMCwxMCwwLDEwNyw5LDAsMTE0LAotICAgIDQ4LDIsMTI0LDMsMCwxMDAsMTAsMCwxMDcsOSwwLDExNCw0OCwyLDExNiwyNCwKLSAgICAwLDExNiwyNSwwLDEzMSwxLDAsMTI1LDYsMCwxMjQsNiwwLDEwNiwyNiwwLAotICAgIDExNiwyNywwLDEyNCwzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDYsMCwKLSAgICAxMDYsMjYsMCwxMTYsMjcsMCwxMTYsMjgsMCwxMjQsMTAsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxLDEyNCw2LDAsMTA2LDI2LDAsMTE2LDEyLDAsMTA2LAotICAgIDI5LDAsMTI0LDExLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTIxLDM2LDAsMTI0LAotICAgIDAsMCwxMDYsMzAsMCwxMjQsMiwwLDEyNCw0LDAsMTI0LDYsMCwxMzEsMywKLSAgICAwLDEsMTE2LDExLDAsMTAwLDksMCwxMjQsNCwwLDEzMSwyLDAsMSw4NywKLSAgICAxMTMsNDgsMiw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDQ0LDIsMSwxLDEsCi0gICAgODksMTEzLDQ4LDIsODgsMTEwLDAsMCwxMjQsMTEsMCw4Myw0MCwxMiwwLDAsCi0gICAgMCwxMTcsMTkwLDAsMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLAotICAgIDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDgyLDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwKLSAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDMyLDg0LDExMSwzMiwKLSAgICAxMTksMTE0LDEwNSwxMTYsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk4LDEyMSwKLSAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ0LDMyLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMzIsMTA5LDExNywxMTUsMTE2LDMyLDk3LDEwOCwxMTUsMTExLDMyLDk4LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDEzLAotICAgIDAsMCwwLDEyMywxMjUsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwxMjMsMTI1LAotICAgIDExNywxOSwwLDAsMCw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsCi0gICAgMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywxMjUsMTE3LDIxLDAsMCwwLDc4LDExMSwxMTAsCi0gICAgNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsCi0gICAgMTIzLDEyNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDEsMTIwLDEwMSw5OSwxMTcsMTIsMCwKLSAgICAwLDAsMTAwLDExMSwxMTAsMTE2LDk1LDEwNSwxMTAsMTA0LDEwMSwxMTQsMTA1LDExNiwxMTcsMTAsCi0gICAgMCwwLDAsMTE5LDExNCwxMTEsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw3OCw4NCw0MCwKLSAgICAzMSwwLDAsMCwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywKLSAgICAwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEwLDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsMywwLDAsMCwKLSAgICAxMDUsMTEwLDExNiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDExNyw3LDAsMCwwLDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjAsMCwwLAotICAgIDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDgsMCwwLDAsNjksNzksNzAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwKLSAgICAxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwKLSAgICAxMDQsOTcsMTA4LDExNyw1LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDExNSwxMTcsMTAsMCwKLSAgICAwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMTAsMCwwLAotICAgIDAsOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNyw0LDAsMCwwLAotICAgIDk1LDEwNSwxMDksMTEyLDExNywxNiwwLDAsMCw5NSwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwwLDEwMiwxMTEsCi0gICAgMTE0LDEwOSw5NywxMTYsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LAotICAgIDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwKLSAgICAxMDEsMTAwLDExNyw3LDAsMCwwLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDExNyw0LAotICAgIDAsMCwwLDg0LDExNCwxMTcsMTAxLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICAxOSwwLDAsMCwxMDAsMTExLDExMCwxMTYsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsOSwwLDAsMCw5OCwxMjEsMTE2LDEwMSwKLSAgICA5NywxMTQsMTE0LDk3LDEyMSwxMTcsMTIsMCwwLDAsOTUsNzcsNjUsNzEsNzMsNjcsCi0gICAgOTUsNjYsODksODQsNjksODMsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMDAsMTE3LDcsMCwwLDAsOTUsMTE5LDk1LDEwOCwxMTEsMTEwLDEwMywxMTcsMywwLAotICAgIDAsMCwxMDgsMTAxLDExMCwxMTcsNSwwLDAsMCwxMDAsMTE3LDEwOSwxMTIsMTE1LDExNywKLSAgICAxNSwwLDAsMCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LAotICAgIDExMSwxMDAsMTAxLDQwLDEyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDExLAotICAgIDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLAotICAgIDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsCi0gICAgMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDIsMCwwLDAsMTE1LDExNiwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LAotICAgIDk3LDExNywxMCwwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAwLDk3LDExNiw5NywKLSAgICAxMTcsNSwwLDAsMCwxMDIsMTExLDExNywxMTAsMTAwLDExNywzLDAsMCwwLDEwOSwKLSAgICAxMTUsMTAzLDExNywxMiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTcsMTEsMCwwLDAsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwKLSAgICAxMDEsOTksMTE2LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTY1LDMsMCwwLAotICAgIDExNSw5OCwwLDAsMCwwLDcsMTUsMSw2LDEsMywxLDE2LDEsMTMsCi0gICAgMSwxMSwyLDMsMSwxOSwxLDEzLDEsNSwyLDE2LDEsMywxLDE5LAotICAgIDEsMTMsMSw1LDIsMywxLDEyLDEsMywxLDEzLDEsMTksMSw1LAotICAgIDIsOSwxLDcsMSwxNSwxLDE1LDEsMTYsMSw2LDEsNywxLDQsCi0gICAgMiw2LDEsMTgsMSwxNSwxLDE1LDEsNiwxLDEyLDEsOSwxLDEzLAotICAgIDEsMjIsMSwxMiwxLDEyLDEsMTksMSwyNSwxLDIyLDEsMywxLDE5LAotICAgIDEsMTcsMSwxMywxLDgsMSwxMTcsMjEsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAotICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsMCwwLDEwNiwwLAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDAsMSwKLSAgICAwLDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgyLDEwMSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDExNSwzMiw2OSwxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMSwxMTAsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDgyLDEwMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTgsCi0gICAgMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDgsMTExLDk3LDEwMCwzMiwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDMyLDg1LDExNSwxMDEsMzIsMTExLAotICAgIDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDEwMCwxMDUsCi0gICAgOTksMTE2LDk3LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwKLSAgICAxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTAzLDEwMSwxMTYsOTUsOTksMTExLAotICAgIDEwMCwxMDEsMzIsMTE3LDExNSwxMDEsMTE1LDQ3LDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDk4LAotICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDQwLDEsMCwwLDAsMTE3LDEyLDAsMCwwLDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsCi0gICAgOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMjcsCi0gICAgMywwLDAsMTE1LDIsMCwwLDAsMCw4LDExNywyNCwwLDAsMCw4MywKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDEwLDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDEwLDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsMTUsMCwwLDAsOTUsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsOCwwLDAsCi0gICAgMCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDExNywxMCwwLDAsMCwxMDMsMTAxLAotICAgIDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LAotICAgIDk1LDk5LDExMSwxMDAsMTAxLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCwxMDQsMywwLDAsMTE1LDE0LDAsMCwwLDE2LAotICAgIDIsMTIsNiwxMiwxMiwxMiwxMCwxMiw5LDEyLDIyLDEyLDYyLDExNywxMiwwLAotICAgIDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLDAsMiwKLSAgICAwLDAsMCwxMTUsOTIsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLAotICAgIDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwKLSAgICAwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAxLDUsMCwxMzUsMCwwLAotICAgIDEwMiwxLDAsMTAwLDQsMCwxMDAsNSwwLDEzNCwwLDAsMTMxLDEsMCw5MCwKLSAgICA2LDAsMTAxLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwKLSAgICAwLDkwLDcsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw4LDAsCi0gICAgMTM1LDAsMCw4Myw0MCwxMCwwLDAsMCwxMTcsMTAsMCwwLDAsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMDMsMCwwLDAsNjYsOTcsMTE1LAotICAgIDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSwxMDgsCi0gICAgOTcsMTE1LDExNSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgMTEyLDExNCwxMTEsMTE2LDExMSw5OSwxMTEsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwKLSAgICAzMiwxMTYsMTA0LDk3LDExNiwxMCwzMiwzMiwzMiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDExNywxMTUsCi0gICAgOTcsMTAzLDEwMSw0Niw5OSwzLDAsMCwwLDAsMCwwLDAsMywwLDAsCi0gICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwKLSAgICAwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsCi0gICAgMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw3NSwwLDAsMCw2Nyw5NywKLSAgICA5OSwxMDQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCwKLSAgICA5NywxMDksMTAxLDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCi0gICAgMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAyLDExMSwxMTcsCi0gICAgMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsNzgsNDAsMiwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMjQzLDMsCi0gICAgMCwwLDExNSw0LDAsMCwwLDAsMyw5LDEsMTE3LDE5LDAsMCwwLAotICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLAotICAgIDExNiwxLDAsMTI0LDAsMCwxMzEsMiwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDI2LDAsMCwwLDc2LDExMSw5NywKLSAgICAxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDk3LDMyLDEwMiwxMDUsMTA4LDEwMSw0Niw0MCwzLDAsMCwwLDExNyw1LDAsMCwKLSAgICAwLDExNSwxMTcsMTEyLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDEsMCwwLDAsMTE3LDksMCwwLDAsOTUsOTUsOTksMTA4LDk3LDExNSwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOCwKLSAgICAxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDI0OSwzLDAsMCwxMTUsMiwKLSAgICAwLDAsMCwwLDUsMTE3LDIyLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwKLSAgICA4Myw0MCwxLDAsMCwwLDExNyw1OCwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTcsMTE1LAotICAgIDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwwLDQsMCwwLDExNSwKLSAgICAyLDAsMCwwLDAsMywxMTcsMjMsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw4LAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLDAsMCwxMTYsMCwwLDEwNiwKLSAgICAxLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTQzLDE3LDAsMTI1LDIsCi0gICAgMCwxMjQsMiwwLDEwNiwyLDAsMTMxLDAsMCw4Myw4NywxMDAsMiwwLDgxLAotICAgIDg4LDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMzksMCwwLDAsODIsCisgICAgMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDgzLDQxLAorICAgIDEsMTIyLDU4LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5NywxMTUsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiw5OCwKKyAgICAxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsNDEsMSwxMTQsCisgICAgMzUsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMjM4LDAsMCwwLDgwLDYsMCwwLDExNSwyLDAsMCwwLDAsMywxMjIsCisgICAgMjMsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LAorICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsMywwLDAsMCw4LDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLAorICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLAorICAgIDAsMTQzLDE3LDAsMTI1LDIsMCwxMjQsMiwwLDEwNiwyLDAsMTMxLDAsMCwKKyAgICA4Myw4NywxMDAsMiwwLDgxLDg4LDEwMCwyLDAsODMsNDEsMywxMjIsMzksODIsCiAgICAgMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsOTcsMTE2LDk3LDMyLDEwMiwKICAgICAxMTQsMTExLDEwOSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw5NywxMTUsMzIsMTE0LDk3LDExOSwzMiwKLSAgICA5OCwxMjEsMTE2LDEwMSwxMTUsNDYsMTE3LDEsMCwwLDAsMTE0LDc4LDQwLDMsMCwKLSAgICAwLDAsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSwxMTcsNiwwLDAsMCw3MCwKLSAgICAxMDUsMTA4LDEwMSw3Myw3OSwxMTcsNCwwLDAsMCwxMTQsMTAxLDk3LDEwMCw0MCwzLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsCi0gICAgMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDUsNCwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMCwyLDIxLDEsMTE3LDE5LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQwLDksMCwwLAotICAgIDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLAotICAgIDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywKLSAgICAwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSwKLSAgICA5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTAwLDk3LDExNiw5Nyw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwxLAotICAgIDAsMCwwLDExNyw5LDAsMCwwLDk1LDk1LDk5LDEwOCw5NywxMTUsMTE1LDk1LAotICAgIDk1LDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDIzOCwzLDAsMCwxMTUsMTAsMCwwLDAsMTYsMyw2LDIsMTIsCi0gICAgNiwyNCw3LDE4LDUsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCw0LDAsMCwwLDY2LDAsMCwwLDExNSw2OCwwLDAsMCwxMjQsMCwKLSAgICAwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLAotICAgIDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwKLSAgICAxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsCi0gICAgNywwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwxLDkwLDYsMCwxMDAsMTAsCi0gICAgMCw4Myw0MCwxMSwwLDAsMCwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsNjIsMCwwLAotICAgIDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSw0Niw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwzOSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LAotICAgIDEsMCwxMzEsMSwwLDEyNSwyLDAsMTA1LDIsMCwxMjQsMiwwLDEwNiwyLAotICAgIDAsMTAwLDEsMCw1NCwxMjQsMiwwLDEwNiwzLDAsMTAwLDIsMCw1NCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywzMywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsOTcsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDYsMTE3LDUsMCwwLDAsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTUsMTA1LDEyMiwxMDEsNDAsNCwKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw0LDAsMCwwLAotICAgIDExNSwxMTYsOTcsMTE2LDExNyw4LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExNiwxMDUsMTA5LAotICAgIDEwMSwxMTcsNywwLDAsMCwxMTUsMTE2LDk1LDExNSwxMDUsMTIyLDEwMSw0MCwzLDAsCi0gICAgMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsMiwwLDAsMCwxMTUsMTE2LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwxNSw0LDAsMCwxMTUsNCwwLDAsMCwwLAotICAgIDIsMTUsMSwxMTcsMjcsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LAotICAgIDk3LDExNiwxMTUsOTksNCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCi0gICAgMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDgxLDAsMCwwLDEyMSwyMiwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTA2LDIsMCwxMjUsCi0gICAgNCwwLDg3LDExMCwyNCwwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNDgsMCwKLSAgICAxLDEsMSwxMDAsMSwwLDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMjQsNCwKLSAgICAwLDEwMCwyLDAsNzksMTI1LDQsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDIsCi0gICAgMCwxMjQsMywwLDEwMCwzLDAsMTI0LDQsMCwxMzEsMiwxLDgzLDQwLDQsCi0gICAgMCwwLDAsNzgsMTA1LDE4MiwxLDAsMCwxMDUsMTI4LDAsMCwwLDExNyw1LAotICAgIDAsMCwwLDk1LDEwOSwxMTEsMTAwLDEwMSw0MCw1LDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDcsCi0gICAgMCwwLDAsMTE1LDExNiw5NSwxMDksMTExLDEwMCwxMDEsMTE3LDcsMCwwLDAsNzksCi0gICAgODMsNjksMTE0LDExNCwxMTEsMTE0LDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwMCwKLSAgICA5NywxMTYsOTcsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDEzLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsMTE3LDQsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMjAsNCwwLDAsMTE1LDEyLDAsMCwwLDAsMiwKLSAgICAzLDEsMjIsMSwxMywxLDExLDMsMTAsMSwxMTcsMzIsMCwwLDAsODMsCisgICAgOTgsMTIxLDExNiwxMDEsMTE1LDQ2LDIxOCwxLDExNCw3OCw0MSwzLDExNCw0OSwwLDAsCisgICAgMCwxMTQsNTAsMCwwLDAsOTAsNCwxMTQsMTAxLDk3LDEwMCw0MSwzLDExNCw3MSwKKyAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDU0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzOSwxLDAsCisgICAgMCw4NSw2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMjEsMSwxMjIsMTksCisgICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMCwKKyAgICA5NywxMTYsOTcsNDEsMTEsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsCisgICAgNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsMjI5LAorICAgIDAsMCwwLDExNCw1MCwxLDAsMCwxMTQsMTU2LDAsMCwwLDExNCw0LDEsCisgICAgMCwwLDExNCwyMzgsMCwwLDAsMTE0LDM5LDEsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDIyNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsNDgsMSwwLDAsNTAsNiwwLDAsMTE1LDE0LDAsMCwwLAorICAgIDEyLDMsNiwyLDEyLDYsMTIsNCwxMiwzLDI0LDEyLDE4LDUsMTE0LDQ4LAorICAgIDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDQsMCwwLDAsNjQsMCwwLDAsMTE1LDY0LDAsMCwwLDEwMSwwLDAsCisgICAgOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwKKyAgICAyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LAorICAgIDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEwMCw4LDAsCisgICAgMTAwLDksMCwxMzIsMCwxLDkwLDYsMCwxMDAsMTAsMCw4Myw0MSwxMSwxMTQsCisgICAgOCwxLDAsMCwxMjIsNjIsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LAorICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsCisgICAgMzIsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTcsMTE1LAorICAgIDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwKKyAgICAxMTYsMTAxLDEwOSw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzNiwwLDAsMCwxMTYsMCwKKyAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEwNSwyLDAsMTI0LDIsMCwKKyAgICAxMDYsMSwwLDEwMCwxLDAsNTQsMTI0LDIsMCwxMDYsMiwwLDEwMCwyLDAsCisgICAgNTQsODMsNDEsMywxMjIsMzMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDQ2LDExNCwxODMsMCwwLDAsMTE0LDE4NCwwLDAsCisgICAgMCw0MSwzLDExNCwzOSwwLDAsMCwyMTgsOCwxMTUsMTE2LDk1LDEwOSwxMTYsMTA1LAorICAgIDEwOSwxMDEsOTAsNywxMTUsMTE2LDk1LDExNSwxMDUsMTIyLDEwMSw0MSwzLDExNCw3MSwwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQ2LDEsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzNiwxLDAsMCwKKyAgICA5NSw2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTIsMSwxMjIsMjcsODMsCiAgICAgMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNywKLSAgICA1LDAsMCwwLDk1LDEwOSwxMTEsMTAwLDEwMSwxMDUsMTgyLDEsMCwwLDk5LDMsCi0gICAgMCwwLDAsMSwwLDAsMCw5LDAsMCwwLDE4LDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw1MywxLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEwMywwLDAsMTI1LDYsMCwKLSAgICAxMjAsNTQsMCwxMjQsNCwwLDExNCw4MCwwLDExNiwxLDAsMTI0LDQsMCwxMzEsCi0gICAgMSwwLDEyLDExNCw4MCwwLDExNiwwLDAsMTI0LDQsMCwxMzEsMSwwLDkyLAotICAgIDIsMCwxMjUsNCwwLDEyNSw3LDAsMTI0LDYsMCwxMDYsMiwwLDEyNCw3LAotICAgIDAsMTMxLDEsMCwxLDExMywyNywwLDg3LDEyMCwxMzIsMCwxMTYsMywwLDEyNCwKLSAgICA2LDAsMTMxLDEsMCw2OCw5MywxMTgsMCwxMjUsNywwLDExNiw0LDAsMTI0LAotICAgIDQsMCwxMjQsNywwLDEzMSwyLDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNSwKLSAgICAwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEsODcsMTEzLDk0LDAsNCwKLSAgICAxMTYsNywwLDEwNywxMCwwLDExNCwxNTUsMCwxLDEsMSwxMTksOTQsMCw4OSwKLSAgICAxMTMsOTQsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDIxMSwwLDEsMTI1LDgsCi0gICAgMCwxLDEyMiwyNSwwLDExNiw5LDAsMTAwLDEsMCwxMjQsNCwwLDEyNCw4LAotICAgIDAsMTMxLDMsMCwxLDEwMCwyLDAsODMsODcsODksMTAwLDIsMCwxMDAsMiwKLSAgICAwLDEyNSw4LDAsMTI2LDgsMCw4OCwxMTMsOTQsMCw4OCwxMTMsOTQsMCw4NywKLSAgICAxMjEsMzMsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsCi0gICAgMywwLDEsMTE2LDksMCwxMDAsMywwLDEyNCwxLDAsMTMxLDIsMCwxLAotICAgIDg3LDExMCw1MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsNDgsMSwxLDEyNSwKLSAgICA4LDAsMSwxMjIsMjEsMCwxMTYsOSwwLDEwMCwxLDAsMTI0LDEsMCwxMjQsCi0gICAgOCwwLDEzMSwzLDAsMSw4Nyw4OSwxMDAsMiwwLDEwMCwyLDAsMTI1LDgsCi0gICAgMCwxMjYsOCwwLDg4LDExMCwxLDAsODgsMTAwLDIsMCw4Myw0MCw0LDAsCi0gICAgMCwwLDExNywyNywwLDAsMCw4NywxMTQsMTA1LDExNiwxMDEsMzIsOTgsMTIxLDExNiwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwwLDAsMCwwLAorICAgIDAsMCwwLDUsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMzQsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwKKyAgICAxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMjQsMywwLDEwMCwxLDAsMTI0LAorICAgIDQsMCwxMzEsMiwxLDgzLDQxLDIsNzgsMjE4LDUsOTUsMTA5LDExMSwxMDAsMTAxLAorICAgIDQxLDIsMTE0LDE0NCwwLDAsMCwxMTQsMzcsMSwwLDAsNDEsNSwxMTQsNzEsCisgICAgMCwwLDAsMTE0LDE0MSwwLDAsMCwxMTQsMTQwLDAsMCwwLDExNCw1MywwLAorICAgIDAsMCwxMTQsNDIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDM4LDEsMCwwLDEwMCw2LDAsMCwxMTUsCisgICAgNCwwLDAsMCwwLDIsMTIsMSwxMjIsMzIsODMsMTExLDExNywxMTQsOTksMTAxLAorICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNCw1NCwxLDAsMCwxMDUsCisgICAgMTgyLDEsMCwwLDk5LDMsMCwwLDAsMSwwLDAsMCw5LDAsMCwKKyAgICAwLDE4LDAsMCwwLDY3LDAsMCwwLDExNSw1MywxLDAsMCwxMTYsMCwKKyAgICAwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLAorICAgIDEwMywwLDAsMTI1LDYsMCwxMjAsNTQsMCwxMjQsNCwwLDExNCw4MCwwLDExNiwKKyAgICAxLDAsMTI0LDQsMCwxMzEsMSwwLDEyLDExNCw4MCwwLDExNiwwLDAsMTI0LAorICAgIDQsMCwxMzEsMSwwLDkyLDIsMCwxMjUsNCwwLDEyNSw3LDAsMTI0LDYsCisgICAgMCwxMDYsMiwwLDEyNCw3LDAsMTMxLDEsMCwxLDExMywyNywwLDg3LDEyMCwKKyAgICAxMzIsMCwxMTYsMywwLDEyNCw2LDAsMTMxLDEsMCw2OCw5MywxMTgsMCwxMjUsCisgICAgNywwLDExNiw0LDAsMTI0LDQsMCwxMjQsNywwLDEzMSwyLDAsMTI1LDQsCisgICAgMCwxMjEsMTcsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLAorICAgIDEsODcsMTEzLDk0LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTUsMCwxLAorICAgIDEsMSwxMTksOTQsMCw4OSwxMTMsOTQsMCw0LDExNiw4LDAsMTA3LDEwLDAsCisgICAgMTE0LDIxMSwwLDEsMTI1LDgsMCwxLDEyMiwyNSwwLDExNiw5LDAsMTAwLDEsCisgICAgMCwxMjQsNCwwLDEyNCw4LDAsMTMxLDMsMCwxLDEwMCwyLDAsODMsODcsCisgICAgODksMTAwLDIsMCwxMDAsMiwwLDEyNSw4LDAsMTI2LDgsMCw4OCwxMTMsOTQsCisgICAgMCw4OCwxMTMsOTQsMCw4NywxMjEsMzMsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwKKyAgICAyLDAsMTI0LDMsMCwxMzEsMywwLDEsMTE2LDksMCwxMDAsMywwLDEyNCwKKyAgICAxLDAsMTMxLDIsMCwxLDg3LDExMCw1MywwLDQsMTE2LDgsMCwxMDcsMTAsCisgICAgMCwxMTQsNDgsMSwxLDEyNSw4LDAsMSwxMjIsMjEsMCwxMTYsOSwwLDEwMCwKKyAgICAxLDAsMTI0LDEsMCwxMjQsOCwwLDEzMSwzLDAsMSw4Nyw4OSwxMDAsMiwKKyAgICAwLDEwMCwyLDAsMTI1LDgsMCwxMjYsOCwwLDg4LDExMCwxLDAsODgsMTAwLAorICAgIDIsMCw4Myw0MSw0LDEyMiwyNyw4NywxMTQsMTA1LDExNiwxMDEsMzIsOTgsMTIxLDExNiwKICAgICAxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwKLSAgICAxMDEsNDYsMTE3LDI3LDAsMCwwLDk5LDExMSwxMTcsMTA4LDEwMCwzMiwxMTAsMTExLDExNiwKLSAgICAzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLAotICAgIDExNCwxMjUsNzgsMTE3LDEyLDAsMCwwLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwxMDAsMzIsCi0gICAgMTIzLDMzLDExNCwxMjUsNDAsMTEsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE3LDYsMCwwLDAsOTcsMTEyLAotICAgIDExMiwxMDEsMTEwLDEwMCwxMTcsOCwwLDAsMCwxMTQsMTAxLDExOCwxMDEsMTE0LDExNSwxMDEsCi0gICAgMTAwLDExNywxMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNSwwLDAsMCwxMDksMTA3LDEwMCwKLSAgICAxMDUsMTE0LDExNywxNSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsCi0gICAgMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LAotICAgIDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMywwLDAsMCw5NSwxMTksMTE0LDEwNSwKLSAgICAxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSw0MCw5LDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICAxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNyw1LDAsMCwwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsNiwwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTEyLDk3LDExNCwxMTYsMTE1LDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTQsMTE2LDExNywzLDAsMCwwLDEwMSwxMjAsOTksNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwKLSAgICAxMDAsOTcsMTE2LDk3LDMxLDQsMCwwLDExNSwzOCwwLDAsMCwwLDIsMTgsCi0gICAgMSw2LDIsMjIsMSwxOCwxLDE3LDIsMTksMSwxNSwxLDMsMSwxNywKLSAgICAxLDEzLDIsNywxLDE4LDMsMTYsMSwyNywxLDMsMSwxNiwxLDE3LAotICAgIDEsMTgsMiwxMTcsMjUsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LAotICAgIDk3LDc4LDQwLDcsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LAotICAgIDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LAotICAgIDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCi0gICAgMTExLDEwMCwxMDEsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICA0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LAotICAgIDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMSw0LDAsMCwxMTUsOCwwLDAsMCwxNiwyLAotICAgIDYsMiwxMiw1LDEyLDExLDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsCi0gICAgMTE1LDYyLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLAotICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAotICAgIDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLAotICAgIDgsMCw4Myw0MCw5LDAsMCwwLDExNywyMCwwLDAsMCw4MywxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsNDUsMCwwLDAsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExOSwxMDQsMTA1LAotICAgIDk5LDEwNCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDExNSwzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDEwOCwxMDEsMTE1LDExNSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTE1LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDAsMCwxMjQsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzEsMSwxLDgzLAotICAgIDQwLDMsMCwwLDAsNzgsMTE3LDEwLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMTA4LDEwMSwxMTUsMTE1LDg0LDQwLDIsMCwwLDAsMTE3LDEyLDAsMCwwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw2NCw0LDAsMCwKLSAgICAxMTUsMiwwLDAsMCwwLDEsMTE3LDMyLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCw2LDAsMCwwLDYsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDEzOCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSwyLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsCi0gICAgMCwxMjUsMywwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMSwwLDEyNCwzLDAsCi0gICAgMTI0LDIsMCwxMDAsMCwwLDEzMSw0LDAsMTI1LDQsMCwxMTYsNCwwLDEwNiwKLSAgICA1LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSw1LDAsMTE2LDYsMCwxMjQsNSwKLSAgICAwLDExNiw3LDAsMTMxLDIsMCwxMTQsMTAxLDAsMTE2LDgsMCwxMDAsMSwwLAotICAgIDEyNCwyLDAsMTMxLDIsMCwxLDEyNCw1LDAsODMsMTE2LDksMCwxMDAsMiwKLSAgICAwLDEwNiwxMCwwLDEyNCwyLDAsMTMxLDEsMCwxMDAsMywwLDEyNCwxLDAsCi0gICAgMTAwLDQsMCwxMjQsMiwwLDEzMSwxLDIsMTMwLDEsMCwxMDAsMCwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDIxLDAsMCwwLDk5LDExMSwxMDAsMTAxLDMyLAotICAgIDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsCi0gICAgMTE3LDIxLDAsMCwwLDc4LDExMSwxMTAsNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LAotICAgIDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsMTIzLDEyNSwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwxMSwwLDAsCi0gICAgMCwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LAotICAgIDIwLDAsMCwwLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCi0gICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwxMTcsNSwwLAotICAgIDAsMCwxMDgsMTExLDk3LDEwMCwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwKLSAgICAxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDEwLDAsMCwwLDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLAotICAgIDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDExLDAsMCwwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsNDAsNiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywKLSAgICAxMTYsOTcsMTE3LDEwLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LAotICAgIDk3LDExNyw1LDAsMCwwLDEwMiwxMTEsMTE3LDExMCwxMDAsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICA5OSwxMTEsMTAwLDEwMSw2Nyw0LDAsMCwxMTUsMTgsMCwwLDAsMCwxLDE1LAotICAgIDEsMTUsMSwyNCwxLDE1LDEsMTUsMSwxMywxLDQsMiwxOCwxLDExNywKLSAgICAyOSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAotICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDAsCi0gICAgMiwwLDAsMCwxMTcsMzksMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE1LAotICAgIDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwKLSAgICA3OCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLAotICAgIDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDc5LDQsMCwwLDExNSwyLDAsMCwwLDAsMiwKLSAgICAxMTcsMzEsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwKLSAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSw3OCw0MCw3LDAsMCwwLDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSwKLSAgICA5OSw5NSw5NSwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDIwLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDYwLDQsMCwwLDExNSw4LDAsMCwKLSAgICAwLDE2LDIsNiwyLDEyLDMsMTIsMTIsMTE3LDIwLDAsMCwwLDgzLDExMSwKKyAgICAxMDEsNDYsMTIyLDI3LDk5LDExMSwxMTcsMTA4LDEwMCwzMiwxMTAsMTExLDExNiwzMiw5OSwxMTQsCisgICAgMTAxLDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsNzgsCisgICAgMTIyLDEyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwxMDAsMzIsMTIzLDMzLDExNCwxMjUsNDEsMTEsCisgICAgMTE0LDM4LDAsMCwwLDExNCw0NiwwLDAsMCwxMTQsMjIzLDAsMCwwLDExNCwKKyAgICAzMywwLDAsMCwxMTQsMjgsMCwwLDAsMTE0LDMsMCwwLDAsOTAsNSwKKyAgICAxMDksMTA3LDEwMCwxMDUsMTE0LDIxOCwxNSw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsCisgICAgMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTQsNDAsMCwwLDAsMTE0LDE1MiwwLDAsMCwKKyAgICAxMTQsNTUsMCwwLDAsNDEsOSwxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDExNCw1MywwLDAsMCwxMTQsNTQsMSwwLDAsMTE0LDIzMywwLDAsMCwKKyAgICAxMTQsMTMxLDAsMCwwLDExNCwyNywwLDAsMCwxMTQsMjMsMCwwLDAsMTE0LAorICAgIDQwLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwzNywxLDAsMCwxMDUsNiwwLDAsMTE1LDM4LDAsMCwKKyAgICAwLDAsMiwxOCwxLDYsMiwyMiwxLDE4LDEsMTcsMiwxOSwxLDE1LAorICAgIDEsMywxLDE3LDEsMTMsMiw3LDEsMTgsMywxNiwxLDI3LDEsMywKKyAgICAxLDE2LDEsMTcsMSwxOCwyLDEyMiwyNSw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsCisgICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMDEsMTE2LDk1LDEwMCw5NywKKyAgICAxMTYsOTcsNzgsNDEsNywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCwKKyAgICA1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDM2LDEsMCwwLDExNCwzOCwKKyAgICAxLDAsMCwxMTQsMzcsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDgsMSwwLAorICAgIDAsOTEsNiwwLDAsMTE1LDgsMCwwLDAsMTIsMiw2LDIsMTIsNSwKKyAgICAxMiw1LDExNCw4LDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDQ2LDAsMCwKKyAgICAwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCisgICAgOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsCisgICAgNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCw4Myw0MSwKKyAgICA3LDExNCw3LDEsMCwwLDEyMiw0NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE5LAorICAgIDEwNCwxMDUsOTksMTA0LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTE1LDMyLDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwxMTUsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwKKyAgICAwLDAsNiwwLDAsMCw2NywwLDAsMCwxMTUsNzYsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwwLAorICAgIDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwxMTYsMiwwLAorICAgIDEyNCwzLDAsMTAwLDEsMCwxMjQsMSwwLDEwMCwyLDAsMTI0LDIsMCwxMzEsCisgICAgMSwyLDEyNSw0LDAsMTE2LDMsMCwxMjQsNCwwLDEwMCwxLDAsMTI0LDEsCisgICAgMCwxMDAsMywwLDEyNCwyLDAsMTMxLDEsMiw4Myw0MSw0LDc4LDExNCw2NywKKyAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDE0MCwwLDAsMCw0MSw0LDExNCwKKyAgICAyMzgsMCwwLDAsMTE0LDM5LDEsMCwwLDExNCwxOTAsMCwwLDAsMTE0LDE5NSwKKyAgICAwLDAsMCw0MSw1LDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LDQ3LDEsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNSwxLAorICAgIDAsMCwxMzgsNiwwLDAsMTE1LDgsMCwwLDAsMCwxLDE1LDEsMTUsCisgICAgMSwyNCwxLDEyMiwyOSw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLAorICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCisgICAgMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsCisgICAgNDEsMiwxMjIsMzksODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiwKKyAgICA5NywxMTUsMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMzIsMTE1LAorICAgIDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsCisgICAgMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNiwxLDAsCisgICAgMCwxNDQsNiwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwzMSw4MywxMTEsCiAgICAgMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw1LAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSwxMDQsMCwwLDAsMTI0LDAsMCw2OSwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAotICAgIDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAxLDUsCi0gICAgMCwxMDEsNiwwLDEwMSw3LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsOCwwLDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMzIsMCwwLDkwLDksMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsCi0gICAgMCw5MCwxMCwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsMTEsMCwKLSAgICAxMDAsMTIsMCw4Myw0MCwxMywwLDAsMCwxMTcsMTksMCwwLDAsNjksMTIwLAotICAgIDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsMTE3LDkzLDAsMCwwLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwKLSAgICAzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw5OSwxMTEsMTEwLAotICAgIDExNSwxMTYsMTE0LDExNyw5OSwxMTYsMTExLDExNCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwKLSAgICAxMDMsMTEwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMTksMTExLDExNCwxMDcsMzIsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDMyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTI0LDEsMCwKLSAgICAxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwyLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk2LDQsMCwwLDExNSw0LDAsCi0gICAgMCwwLDAsMSw5LDEsMTE3LDI4LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgNCwwLDAsMCwxMCwwLDAsMCw2NywwLDAsMCwxMTUsMTc1LDAsMCwKLSAgICAwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTI1LDIsMCwKLSAgICAxMjEsMTA3LDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMjQsCi0gICAgMCwwLDEwNiw1LDAsMTMxLDMsMCwxMjUsMywwLDExNiw2LDAsMTAwLDEsCi0gICAgMCwxMjQsMCwwLDEwNiw1LDAsMTMxLDIsMCwxLDEyNCwwLDAsMTA2LDcsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDExNywwLDExNiw4LDAsMTI0LDMsMCwKLSAgICAxMDAsMiwwLDEzMSwyLDAsMTIsMTE0LDExNywwLDExNiw5LDAsMTI0LDAsMCwKLSAgICAxMDYsNSwwLDEzMSwxLDAsMTAwLDMsMCwyNSwxMDMsMSwwLDEyNCwzLDAsCi0gICAgOTUsMTAsMCwxMTAsMCwwLDEyNCwzLDAsODMsODcsMTEwLDQ2LDAsMSwxLAotICAgIDEsMTI0LDIsMCwxMiwxMTQsMTYzLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTA3LDYsMCwxMTQsMTYzLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCi0gICAgNjEsMTEwLDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDQsMCw4MywKLSAgICA0MCw1LDAsMCwwLDExNywyNSwwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LAotICAgIDExMCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw0NiwxMTcsMzMsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwKLSAgICAxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsMTE3LDgsMCwwLDAsOTUsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsOTUsMTA1LDAsMCwwLDAsNzgsNDAsMTEsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LAotICAgIDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwKLSAgICAxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTAwLDEyMSwxMTAsOTcsMTA5LDEwNSw5OSwxMTcsNCwwLAotICAgIDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsCi0gICAgMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLAotICAgIDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw3LDAsMCwwLDEwNCwKLSAgICA5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsOTUsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LAotICAgIDAsMCwwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMDAsNCwwLDAsMTE1LDI0LDAsMCwwLDAsNSwxNSwxLAotICAgIDMsMSw5LDEsMTUsMSwxNiwxLDMxLDEsMjgsMSw4LDEsMywxLAotICAgIDIyLDEsMTMsMSwxMTcsMzEsMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDExNSw0OCwwLAotICAgIDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDEwMCwxLAotICAgIDAsMjUsMTM3LDAsMCwxMTYsMiwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwKLSAgICAwLDEwMCwzLDAsMTM0LDAsMCwxMTYsMywwLDY4LDEzMSwxLDAsMTMxLDEsCi0gICAgMCw4Myw0MCw0LDAsMCwwLDExNyw0OSwwLDAsMCw4MiwxMDEsMTE2LDExNywKLSAgICAxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTAxLAotICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTA1LDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsMTA1LDEsMCwKLSAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwKLSAgICAwLDAsMCw1MSwwLDAsMCwxMTUsMzEsMCwwLDAsMTI0LDAsMCw5MywKLSAgICAyMSwwLDEyNSwxLDAsMTM2LDAsMCwxMDAsMCwwLDEyNCwxLDAsMjMsMTA3LAotICAgIDIsMCw4NiwxLDExMywzLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw3OCw0MCwwLAotICAgIDAsMCwwLDQwLDIsMCwwLDAsMTE3LDIsMCwwLDAsNDYsNDgsMTE3LAotICAgIDYsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDAsMSwwLDAsMCwxMTcsCi0gICAgOSwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsCi0gICAgMTE0LDYyLDEyMSw0LDAsMCwxMTUsMiwwLDAsMCw2LDEsMTE3LDQ5LDAsCi0gICAgMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsNDAsNCwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMywwLDAsMCw5NywxMTAsMTIxLDExNywxOCwwLDAsMCw2OSw4OCwKLSAgICA4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICA0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwKLSAgICA0MCwxLDAsMCwwLDExNyw5LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDExOCw0LDAsMCwxMTUsNiwwLDAsMCwwLDIsMTksCi0gICAgMSwxOCwxLDExNywzMCwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKLSAgICAwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLAotICAgIDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNjMsMCwwLDAsODIsMTAxLAotICAgIDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTcsMTEwLDMyLAotICAgIDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsOTcsCi0gICAgMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ2LDc4LDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLAotICAgIDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgMTI0LDQsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjgsMCwwLDAsCisgICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc4LDQxLDYsCisgICAgMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LAorICAgIDU5LDAsMCwwLDExNCwxNSwxLDAsMCwxMTQsMTYsMSwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDcsMSwwLDAsMTM0LDYsMCwwLDExNSw2LDAsMCwwLAorICAgIDEyLDIsNiwyLDEyLDYsMTE0LDcsMSwwLDAsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw2NCwwLDAsMCwKKyAgICAxMTUsMTMwLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwKKyAgICAwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLAorICAgIDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLAorICAgIDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMSw3LDAsMTAwLDgsCisgICAgMCwxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsMTAwLDEwLDAsCisgICAgMTAwLDExLDAsMTMyLDAsMCw5MCw5LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLAorICAgIDAsMCw5MCwxMCwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTEsCisgICAgMCwxMDEsNywwLDEwMCwxNiwwLDEwMCwxNywwLDEzMiwwLDAsMTMxLDEsMCwKKyAgICA5MCwxMiwwLDEwMCwxOCwwLDgzLDQxLDE5LDIxOCwxOSw2OSwxMjAsMTE2LDEwMSwxMTAsCisgICAgMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsOTMsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsCisgICAgMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDk5LDExMSwxMTAsMTE1LDExNiwxMTQsMTE3LDk5LDExNiwKKyAgICAxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTYsCisgICAgMTExLDMyLDExOSwxMTEsMTE0LDEwNywzMiwxMTksMTA1LDExNiwxMDQsMzIsNzAsMTA1LDEwOCwxMDEsCisgICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwzLDAsCisgICAgMCwwLDAsMCwwLDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLAorICAgIDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LAorICAgIDQxLDIsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSwzLDExNCw3MSwKKyAgICAwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MiwwLDAsCisgICAgMCwxNjEsNiwwLDAsMTE1LDQsMCwwLDAsMCwxLDksMSwxMjIsMjgsCiAgICAgNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwKKyAgICAwLDAsMTA3LDIsMCwxMTEsMzMsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsCisgICAgMCwxMDYsMSwwLDEwNywyLDAsODMsNDEsMSw3OCw0MSwyLDExNCwyMjQsMCwKKyAgICAwLDAsMTE0LDYzLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwyMjcsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDIyOSwwLDAsMCwxNjUsNiwwLDAsMTE1LDQsMCwwLDAsCisgICAgMCwxLDE4LDEsMTIyLDI2LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsCisgICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMTMsOTUsOTUsCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLAorICAgIDEwNiwxLDAsMTMxLDEsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDIsMCwxMzEsCisgICAgMSwwLDY1LDgzLDQxLDEsNzgsNDEsMywxMTQsNDksMSwwLDAsMTE0LDY3LAorICAgIDAsMCwwLDExNCwzNSwwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNTAsCisgICAgMSwwLDAsMTY5LDYsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsCisgICAgNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsOTksMiwwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDE4MywwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxNDMsCisgICAgMjksMCwxLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTI0LAorICAgIDAsMCwxMDYsNCwwLDEzMSwzLDAsMTI1LDIsMCw4NywxMDAsMSwwLDgxLAorICAgIDg4LDExNiw1LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDIsMCwKKyAgICAxLDEyNCwwLDAsMTA2LDYsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwKKyAgICAxMjQsMywwLDExNCwxMjQsMCwxMTYsNywwLDEyNCwyLDAsMTAwLDMsMCwxMzEsCisgICAgMiwwLDEyLDExNCwxMjQsMCwxMTYsOCwwLDEyNCwwLDAsMTA2LDQsMCwxMzEsCisgICAgMSwwLDEwMCw0LDAsMjUsMTAzLDEsMCwxMjQsMiwwLDk1LDksMCwxMTAsCisgICAgMCwwLDEyNCwwLDAsMTI0LDIsMCw5NSwxMCwwLDEyNCwyLDAsMTA2LDExLAorICAgIDAsMTI0LDIsMCw5NSwxMiwwLDEyNCwzLDAsMTE1LDE3OSwwLDEyNCwyLDAsCisgICAgMTA2LDEyLDAsMTA2LDEzLDAsMTAwLDUsMCwxMzEsMSwwLDEwMCw0LDAsMjUsCisgICAgMTI0LDIsMCw5NSwxMiwwLDExMCwwLDAsMTI0LDIsMCw4Myw0MSw2LDEyMiwKKyAgICAyNSw3NiwxMTEsOTcsMTAwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMjIsMzMsMTAxLDEyMCwxMTYsCisgICAgMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsMTE0LDI0NiwKKyAgICAwLDAsMCwxMTQsODQsMCwwLDAsMTE0LDExNiwwLDAsMCw0MSwxNCwxMTQsCisgICAgNjksMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTA2LDAsMCwwLDkwLDEyLAorICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwMCwxMjEsMTEwLDk3LDEwOSwxMDUsOTksMTE0LDM1LDAsMCwKKyAgICAwLDExNCwxNTIsMCwwLDAsMTE0LDIxOSwwLDAsMCwxMTQsNjAsMCwwLDAsCisgICAgMTE0LDM4LDAsMCwwLDExNCwyNDYsMCwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsCisgICAgNTcsMCwwLDAsMTE0LDI1MCwwLDAsMCwxMTQsMzIsMCwwLDAsNDEsNCwKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwKKyAgICAyMTksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDQsMSwwLDAsMTcyLDYsMCwwLDExNSwyNCwwLDAsCisgICAgMCwwLDUsMTMsMSw5LDEsMjEsMSwxNiwxLDE1LDEsMjIsMSwyOCwKKyAgICAxLDksMSwxMiwxLDYsMSwyOCwxLDEyMiwzMSw2OSwxMjAsMTE2LDEwMSwxMTAsCisgICAgMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsCisgICAgMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsMTE1LAorICAgIDQ4LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsCisgICAgMTAwLDEsMCwyNSwxMzcsMCwwLDExNiwyLDAsMTM1LDAsMCwxMDIsMSwwLAorICAgIDEwMCwyLDAsMTAwLDMsMCwxMzQsMCwwLDExNiwzLDAsNjgsMTMxLDEsMCwKKyAgICAxMzEsMSwwLDgzLDQxLDQsMTIyLDQ5LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsODQsCisgICAgMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLAorICAgIDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LAorICAgIDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NiwxMTQsMjksMCwwLDAsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsMCw1MSwKKyAgICAwLDAsMCwxMTUsMzEsMCwwLDAsMTI0LDAsMCw5MywyMSwwLDEyNSwxLAorICAgIDAsMTM2LDAsMCwxMDAsMCwwLDEyNCwxLDAsMjMsMTA3LDIsMCw4NiwxLAorICAgIDExMywzLDAsMTAwLDEsMCw4Myw0MSwyLDExNCw3MiwwLDAsMCw3OCwxMTQsCisgICAgNCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwyMTgsNiwxMTUsMTE3LDEwMiwKKyAgICAxMDIsMTA1LDEyMCw0MSwxLDIxOCw5LDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzcsMCwwLDAsMTkzLAorICAgIDYsMCwwLDExNSwyLDAsMCwwLDYsMSwxMjIsNDksNjksMTIwLDExNiwxMDEsCisgICAgMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywKKyAgICAxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw0MSw0LDExNCwKKyAgICAzOCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDc4LDAsMCwwLDIxOCwxOCwKKyAgICA2OSw4OCw4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCwKKyAgICA2OSw4Myw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDQxLDEsMTE0LDU4LDEsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAyMTksMCwwLDAsMTkwLDYsMCwwLDExNSw2LDAsMCwwLDAsMiwxOSwKKyAgICAxLDE4LDEsMTIyLDMwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNywKKyAgICA5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCwKKyAgICA4Myw0MSwyLDEyMiw2Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLAorICAgIDMyLDk3LDExNSwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk5LAorICAgIDExNCwxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LAorICAgIDEwMSw5OSwxMTYsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMTUsMSwwLDAsMTk2LDYsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMiwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwKKyAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksCisgICAgMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLAorICAgIDgzLDQxLDIsMTIyLDUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsCisgICAgMzIsOTcsMTE1LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTAsMTExLDMyLDExNSwxMTEsCisgICAgMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsCisgICAgNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTYsMSwwLDAsCisgICAgMjAwLDYsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMzAsNjksMTIwLDExNiwKKyAgICAxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCw4Myw0MSwxLDEyMiw1OCwKKyAgICA4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAorICAgIDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LAorICAgIDEwOCwxMDEsMzIsOTcsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDQxLDEsMTE0LDM1LDAsMCwKKyAgICAwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIzOCwwLDAsCisgICAgMCwyMDQsNiwwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwzMiw2OSwxMjAsCisgICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNzgsNDEsCisgICAgMTMsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsCisgICAgMTE0LDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsMjI5LDAsMCwwLDExNCwKKyAgICA1MCwxLDAsMCwxMTQsMTU2LDAsMCwwLDExNCw0LDEsMCwwLDExNCwyMTksCisgICAgMCwwLDAsMTE0LDE1LDEsMCwwLDExNCwxNiwxLDAsMCwxMTQsMjM4LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCw1NiwxLDAsMCwxNTMsNiwwLDAsMTE1LAorICAgIDE4LDAsMCwwLDEyLDYsNiwyLDEyLDQsMTIsNCwxMiwzLDE4LDE4LAorICAgIDEyLDYsMTIsNCwxMiw0LDExNCw1NiwxLDAsMCw5OSwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLAorICAgIDExNSwxMzAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsCisgICAgOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsCisgICAgNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsMCwxMDAsOSwKKyAgICAwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsCisgICAgOTAsOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsOSwwLDEwMCwKKyAgICAxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTYsMCwxMDAsMTcsCisgICAgMCwxMzIsMCwwLDkwLDExLDAsMTAwLDE4LDAsMTAwLDE5LDAsMTMyLDAsMCwKKyAgICA5MCwxMiwwLDEwMCwyMCwwLDgzLDQxLDIxLDIxOCwxNCw5NSw3OCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsOTcsMzgsMSwwLDAsODIsMTAxLAorICAgIDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LAorICAgIDExMiw5Nyw5OSwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDM5LDExNSwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCw0NiwzMiwzMiw3MywxMTYsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwLDMyLDMyLAorICAgIDMyLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywKKyAgICAxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwKKyAgICAzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwOCwKKyAgICAxMTEsMTExLDEwNywxMTUsMzIsMTE3LDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwKKyAgICAxMTAsMTE2LDM5LDExNSwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICA5NSw0NiwzMiwzMiw4NywxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsOTksMTA0LAorICAgIDk3LDExMCwxMDMsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzOSwxMTUsMzIsMTExLDExOSwxMTAsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwKKyAgICAxMTQsMTAxLDk5LDExMSwxMDksMTEyLDExNywxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDMyLDMyLDcwLDExMSwxMTQsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLAorICAgIDEwOCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAorICAgIDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLAorICAgIDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsCisgICAgOTcsMTE2LDEwNCw0Niw5OSw0LDAsMCwwLDAsMCwwLDAsNCwwLDAsCisgICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw1MiwwLDAsMCwxMjQsMSwKKyAgICAwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsCisgICAgMTE2LDIsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNCwKKyAgICAwLDAsOTUsNCwwLDEyNCwzLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsCisgICAgMCw4Myw0MSwxLDc4LDQxLDYsMTE0LDcwLDAsMCwwLDExNCwyNTMsMCwwLAorICAgIDAsMTE0LDIzMSwwLDAsMCwyMTgsMTYsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwKKyAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwyMTgsMTcsOTUsMTA4LDk3LDExNSwxMTYsOTUsCisgICAgMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwyMTgsMTIsOTUsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDEsNCwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwyMTgsMTEsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDIxNyw2LDAsMCwxMTUsCisgICAgOCwwLDAsMCwwLDEsOSwxLDksMSwyMSwxLDEyMiwyMyw5NSw3OCwKKyAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA1LAorICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCw0LDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCw5MiwzLAorICAgIDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMiwwLAorICAgIDEwNywyLDAsMTE0LDQzLDAsMTAwLDYsMCw4MywxMjQsMSwwLDEwMCw1LDAsCisgICAgMTAyLDIsMCw4Myw0MSw3LDEyMiw2Miw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwKKyAgICA5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLDExMSwxMDIsMzIsNDAsMTEyLDk3LDExNCwxMDEsCisgICAgMTEwLDExNiw0NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NSwxMTAsOTcsMTA5LDEwMSw0NCwzMiwKKyAgICAxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDExMiw5NywxMTYsMTA0LDQ1LDk3LDExNiwxMTYsMTE0LAorICAgIDQ1LDExMCw5NywxMDksMTAxLDQxLDExNCwxMTYsMCwwLDAsMTE0LDMwLDAsMCwwLAorICAgIDExNCw3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMjQ2LDAsMCwwLDQxLAorICAgIDIsMTIyLDMsMTE1LDEyMSwxMTUsMTIyLDQsMTEyLDk3LDExNiwxMDQsNDEsMiwxMTQsNzAsCisgICAgMCwwLDAsMTE0LDMyLDAsMCwwLDQxLDQsMTE0LDcxLDAsMCwwLDExNCwKKyAgICAyMzMsMCwwLDAsMjE4LDMsMTAwLDExMSwxMTYsMTE0LDk0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyMyw5NSwKKyAgICAxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMjIzLDYsMCwwLDExNSw4LDAsMCwwLDAsCisgICAgMiwyNywxLDEyLDIsNCwzLDEyMiwzOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywKKyAgICAxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDM4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsCisgICAgMCwwLDkyLDIsMCwxMjUsMSwwLDEyNSwyLDAsMTE2LDEsMCwxMTYsMiwKKyAgICAwLDEwNiwzLDAsMTI0LDEsMCwyNSwxMjQsMiwwLDEzMSwyLDAsODMsNDEsCisgICAgMSw3OCw0MSw0LDExNCw2NiwxLDAsMCwxMTQsNjIsMCwwLDAsMTE0LDcsCisgICAgMCwwLDAsMTE0LDczLDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwwLDkwLAorICAgIDE4LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLAorICAgIDk3LDEwOSwxMDEsOTAsMTQsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwxMTQsOTUsMTEwLAorICAgIDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDYxLDEsMCwwLDIzMyw2LDAsMCwxMTUsNCwwLDAsMCwKKyAgICAwLDEsMTgsMSwxMjIsMzEsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsCisgICAgOTUsMTEyLDk3LDExNiwxMDQsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTI3LDAsMCwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCwxMjUsMSwKKyAgICAwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMiwwLDEwNywzLDAsMTE0LDEyMCwwLAorICAgIDEyNCwwLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsCisgICAgMiwwLDEyNSwyLDAsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDEwOCwKKyAgICAwLDEyNCwyLDAsMTA2LDUsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLAorICAgIDEyNCwyLDAsMTA2LDYsMCwxMTQsMTA4LDAsMTI0LDIsMCwxMDYsNiwwLDEyNCwKKyAgICAwLDAsOTUsNywwLDExMywxMDgsMCwxMTAsMCwwLDEyNCwxLDAsMTI0LDAsCisgICAgMCw5NSwyLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiw3LDAsODMsNDEsMSwKKyAgICA3OCw0MSw4LDExNCwyMzEsMCwwLDAsMTE0LDYxLDEsMCwwLDExNCw2MiwxLAorICAgIDAsMCwxMTQsNjMsMSwwLDAsMTE0LDcwLDAsMCwwLDExNCwxNjksMCwwLAorICAgIDAsMTE0LDIyMCwwLDAsMCwxMTQsMjUzLDAsMCwwLDQxLDMsMTE0LDcxLDAsCisgICAgMCwwLDkwLDExLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE0LAorICAgIDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTIsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsCisgICAgMTAxLDIzNyw2LDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE4LDEsMTUsMSwKKyAgICAyMSwzLDI3LDEsOSwxLDE4LDEsMTIsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LAorICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDExNCwxMDEsOTksOTcsCisgICAgMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsCisgICAgMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsCisgICAgODMsNDEsMSw3OCw0MSwyLDIxOCw0LDEwNSwxMTYsMTAxLDExNCwxMTQsNjcsMSwwLAorICAgIDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LAorICAgIDk1LDI1MCw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLDk1LDc4LAorICAgIDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsCisgICAgMTE2LDEwMSwxMTQsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKKyAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LAorICAgIDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQxLAorICAgIDEsNzgsNDEsMiwxMTQsMzEsMCwwLDAsMTE0LDY3LDEsMCwwLDQxLDEsCisgICAgMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCw3LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDI1Myw2LDAsCisgICAgMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIyLDk1LDc4LDk3LDEwOSwxMDEsMTE1LAorICAgIDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsCisgICAgMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMjAsOTUsCisgICAgNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQwLDEyMywzMywKKyAgICAxMTQsMTI1LDQxLDQxLDIsMTE0LDQ3LDAsMCwwLDExNCwyNTMsMCwwLDAsNDEsCisgICAgMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsMCwwLDcsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMSwxMjIsMjMsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAorICAgIDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwxNiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMzEsMCwwLDEwNyw2LDAsODMsNDEsMSw3OCw0MSwxLDExNCw2NywxLAorICAgIDAsMCw0MSwyLDExNCw3MSwwLDAsMCwyMTgsNCwxMDUsMTE2LDEwMSwxMDksMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEyLAorICAgIDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTE1LDk1LDk1LDMsNywwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LAorICAgIDExMCwxMTUsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEsMTAwLDAsCisgICAgMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDI1MywwLDAsMCwxMTQsMjIzLDAsMCwKKyAgICAwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCw3MSwxLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIzLDAsMCwKKyAgICAwLDYsNywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMSw5NSw3OCwKKyAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTcsMTEyLDExMiwKKyAgICAxMDEsMTEwLDEwMCw3OCw0MSwxMywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLAorICAgIDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsMCwwLDExNCwKKyAgICA2NiwxLDAsMCwxMTQsNjEsMSwwLDAsMTE0LDY3LDEsMCwwLDExNCw2OSwKKyAgICAxLDAsMCwxMTQsNzAsMSwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNzIsMSwKKyAgICAwLDAsMTE0LDIyMywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNjAsMSwwLDAsCisgICAgMjEwLDYsMCwwLDExNSwyMCwwLDAsMCwxMiw1LDYsMiwxMiw2LDEyLAorICAgIDEwLDEyLDQsMTIsMTMsMTIsMywxMiwzLDEyLDMsMTIsMywxMTQsNjAsMSwKKyAgICAwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLDAsOTAsCisgICAgMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwKKyAgICAwLDkwLDMsMCwxMDEsNCwwLDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLAorICAgIDEzMSwxLDAsOTAsNSwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLDkwLAorICAgIDYsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDksCisgICAgMCwxMDAsMTAsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTEsMCwxMDAsMTIsMCwKKyAgICAxMzIsMCwwLDkwLDksMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDkwLAorICAgIDEwLDAsMTAwLDE1LDAsODMsNDEsMTYsMTE0LDI1MSwwLDAsMCw5OSw0LDAsCisgICAgMCwwLDAsMCwwLDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwyNSwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwKKyAgICAxMjQsMywwLDEzMSwzLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4MywKKyAgICA0MSwxLDc4LDQxLDIsMTE0LDYwLDEsMCwwLDExNCwyNTMsMCwwLDAsNDEsCisgICAgNCwxMTQsNzEsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwKKyAgICAxMTQsNjQsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDcyLDAsMCwwLDEyLDcsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsMSwxMjIsMjUsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LAorICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsCisgICAgMSwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDEyMiwxMTUsODIsMTAxLDExNiwKKyAgICAxMTcsMTE0LDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsODQsMTA0LDEwMSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLAorICAgIDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksOTcsOTksMTA0LDEwNSwxMTAsMTAxLDExNCwKKyAgICAxMjEsMzIsMTAwLDExMSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNiwxMTEsOTgsMzIsMTA1LAorICAgIDExNiwxMTUsMTAxLDEwOCwxMDIsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMTIyLDI1LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLAorICAgIDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDQxLDYyLDQxLDIsMTE0LDQ3LDAsCisgICAgMCwwLDExNCw1NywwLDAsMCw0MSwyLDExNCwxMSwxLDAsMCwxMTQsMTc5LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwyMDUsMCwwLDAsMTUsNywwLDAsMTE1LDIsMCwwLDAsCisgICAgMCw3LDEyMiwyOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsCisgICAgOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsCisgICAgNzgsODQsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMjE5LDAsMCwwLDI0LDcsMCwwLDExNSwyLDAsMCwwLAorICAgIDAsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsNzgsCisgICAgMTE0LDMwLDAsMCwwLDExNCw0LDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwKKyAgICAwLDExNCwxNTgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDE2LDEsMCwwLDI3LDcsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2LAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLDEwMCwKKyAgICAxLDAsMTAwLDIsMCwxMDAsMywwLDEwMCw0LDAsMTAwLDUsMCwxMzEsMywKKyAgICAxLDgzLDQxLDYsNzgsMTE0LDMwLDAsMCwwLDEyMiw4LDYwLDExNSwxMTYsMTE0LAorICAgIDEwNSwxMTAsMTAzLDYyLDExNCwxNzUsMCwwLDAsMTE0LDQyLDEsMCwwLDg0LDQxLAorICAgIDEsMTE0LDQzLDEsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDE1LDEsMCwwLDMwLDcsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgMSwxMjIsMjUsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsCiAgICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsCiAgICAgMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDUzLDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCi0gICAgOTcsMTE1LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNSwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsNDAsMSwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMjgsNCwKLSAgICAwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywzMCwwLDAsMCw2OSwxMjAsCi0gICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc4LDQwLDEyLDAsCi0gICAgMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCwKLSAgICA5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwKLSAgICAxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTksMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsODgsNCwwLDAsMTE1LDE2LAotICAgIDAsMCwwLDE2LDYsNiwyLDEyLDQsMywxLDMsMSwyNCwxNiwxMiwKLSAgICA2LDEyLDQsMTE3LDE5LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsCi0gICAgMTE1LDEzNCwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwKLSAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKLSAgICA5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCwKLSAgICA4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsMTEsCi0gICAgMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLAotICAgIDkwLDksMCwxMDAsMTQsMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDEwLDAsMTAwLAotICAgIDE2LDAsMTAwLDE3LDAsMTMyLDAsMCw5MCwxMSwwLDEwMCwxOCwwLDEwMCwxOSwKLSAgICAwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMjAsMCw4Myw0MCwyMSwwLDAsMCwKLSAgICAxMTcsMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCwKLSAgICA5NywxMTYsMTA0LDExNywzOCwxLDAsMCw4MiwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsCi0gICAgMTE2LDExNSwzMiw5NywzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMzksMTE1LDMyLDExMiw5NywxMTYsMTA0LDQ2LDMyLDMyLAotICAgIDczLDExNiwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTYsMzIsMTA4LDExMSwxMTEsMTA3LDExNSwzMiwxMTcsCi0gICAgMTEyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzksMTE1LDEwLDMyLAotICAgIDMyLDMyLDMyLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQ2LDMyLDMyLDg3LDEwNCwKLSAgICAxMDEsMTEwLDMyLDExNiwxMDQsMTA1LDExNSwzMiw5OSwxMDQsOTcsMTEwLDEwMywxMDEsMTE1LDQ0LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTEsMTE5LAotICAgIDExMCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExNCwxMDEsOTksMTExLDEwOSwxMTIsCi0gICAgMTE3LDExNiwxMDEsMTAwLDQ0LDEwLDMyLDMyLDMyLDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMzIsMzIsNzAsMTExLAotICAgIDExNCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMDUsMTE1LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDk5LDQsCi0gICAgMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUyLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLAotICAgIDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMTYsMiwwLDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMzEsMCwwLDEzMSwxLDAsMTI0LDAsMCw5NSw0LDAsMTI0LAotICAgIDMsMCwxMjQsMCwwLDk1LDUsMCwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsNiwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNSwwLDAsMCwKLSAgICAxMTYsMTE3LDExMiwxMDgsMTAxLDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTIsCi0gICAgOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxNywwLDAsMCw5NSwKLSAgICAxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LAotICAgIDExNywxMiwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLAotICAgIDExNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwKLSAgICAxMTQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTQwLDQsMCwwLDExNSw4LAotICAgIDAsMCwwLDAsMSw5LDEsOSwxLDIxLDEsMTE3LDIzLDAsMCwwLAotICAgIDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNTMsMCwwLAotICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwwLAotICAgIDkyLDMsMCwxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMiwwLDEwMCwKLSAgICAyLDAsMTA3LDIsMCwxMTQsNDMsMCwxMDAsNiwwLDgzLDEyNCwxLDAsMTAwLAotICAgIDUsMCwxMDIsMiwwLDgzLDQwLDcsMCwwLDAsMTE3LDYyLDAsMCwwLAotICAgIDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsMzIsCi0gICAgMTExLDEwMiwzMiw0MCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQ1LDExMCw5NywxMDksMTAxLDQ0LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDUsMTEyLAotICAgIDk3LDExNiwxMDQsNDUsOTcsMTE2LDExNiwxMTQsNDUsMTEwLDk3LDEwOSwxMDEsNDEsMTE3LDEsCi0gICAgMCwwLDAsNDYsMTE3LDAsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwKLSAgICAxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsNDAsMiwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCwxMTUsMTIxLDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwyLDAsCi0gICAgMCwwLDExNyw1LDAsMCwwLDk1LDExMCw5NywxMDksMTAxLDExNywxMCwwLDAsCi0gICAgMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCw0MCw0LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwwLDAsMCwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDExNywzLDAsMCwwLDEwMCwxMTEsMTE2LDExNywyLDAsMCwKLSAgICAwLDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDE0Niw0LDAsMCwxMTUsCi0gICAgOCwwLDAsMCwwLDIsMjcsMSwxMiwyLDQsMywxMTcsMzgsMCwwLAotICAgIDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LAotICAgIDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSw5OSwxLDAsMCwwLDAsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsCi0gICAgMCwxMjQsMCwwLDEwNiwwLDAsMTMxLDAsMCw5MiwyLDAsMTI1LDEsMCwKLSAgICAxMjUsMiwwLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsNCwwLAotICAgIDAsMCwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsCi0gICAgMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNyw3LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywzLDAsMCwwLDExNSwKLSAgICAxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0MCwzLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMTgsMCwwLAotICAgIDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMTQsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwKLSAgICAxMTQsOTUsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsCi0gICAgMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxNTYsNCwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMCwxLDE4LDEsMTE3LDMxLDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LAotICAgIDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEwMywwLAotICAgIDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLAotICAgIDAsMTI1LDEsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMDcsMywwLAotICAgIDExNCw5NiwwLDEyNCwwLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LAotICAgIDEsMCwxMzEsMiwwLDkyLDIsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsCi0gICAgMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDg0LDAsMTI0LDMsMCwxMjQsMCwwLAotICAgIDk1LDYsMCwxMTAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwyLDAsMTEwLAotICAgIDAsMCwxMjQsMCwwLDEwNiw2LDAsODMsNDAsMSwwLDAsMCw3OCw0MCwKLSAgICA3LDAsMCwwLDExNyw1LDAsMCwwLDExNiwxMTcsMTEyLDEwOCwxMDEsMTE3LDE2LAotICAgIDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDE3LDAsMCwwLDk1LDEwOCw5NywxMTUsMTE2LDk1LDExMiw5NywKLSAgICAxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw1LDAsMCwwLDk1LAotICAgIDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw1LDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDQwLDQsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNywxMSwwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgMTE3LDgsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTEyLDk3LDExNiwxMDQsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsOTUsMTE0LAotICAgIDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDE2MCw0LDAsMCwxMTUsMTQsCi0gICAgMCwwLDAsMCwyLDE4LDEsMTUsMSwyNywzLDEyLDEsMTIsMSwxMiwKLSAgICAxLDExNywyNywwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDgwLDk3LDExNiwxMDQsNDYsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsMTI0LDAsCi0gICAgMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCw4Myw0MCwxLDAsMCwwLAotICAgIDc4LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTA1LDExNiwxMDEsMTE0LDExNywKLSAgICAxMiwwLDAsMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsCi0gICAgNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsMTcyLDQsMCwwLDExNSwyLDAsMCwwLAotICAgIDAsMSwxMTcsMjMsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAotICAgIDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwyLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywxMiwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsNDAsMSwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5NSw5NSwxMDgsMTAxLDExMCwKLSAgICA5NSw5NSwxNzUsNCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMiwwLAotICAgIDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCi0gICAgNDYsOTUsOTUsMTA4LDEwMSwxMTAsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwKLSAgICAwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwKLSAgICAwLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIwLDAsMCwwLDk1LDc4LDk3LAotICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0MCwxMjMsMzMsMTE0LDEyNSwKLSAgICA0MSw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywKLSAgICAxMTYsMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsMTc4LDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjMsMCwKLSAgICAwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LAotICAgIDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwwLDEwNywKLSAgICA2LDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywxMiwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwKLSAgICAwLDAsMTA1LDExNiwxMDEsMTA5LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsCi0gICAgMTE1LDk1LDk1LDE4MSw0LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDI3LAotICAgIDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LAotICAgIDEwNCw0Niw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSw5NSw5NSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwyMCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMSwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsMiwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDEwNSwKLSAgICAxMTYsMTAxLDEwOSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA2LDAsMCwwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTg0LDQsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsMSwxMTcsMjEsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsCi0gICAgMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNzgsCi0gICAgNDAsMTMsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsCi0gICAgOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMjMsMCwwLDAsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMDEsMTEwLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLAotICAgIDExNCw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LAotICAgIDExMCwxMTUsOTUsOTUsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywKLSAgICAxMTYsMTA0LDEzMyw0LDAsMCwxMTUsMjAsMCwwLDAsMTYsNSw2LDIsMTIsCi0gICAgNiwxMiwxMCwxMiw0LDEyLDEyLDEyLDMsMTIsMywxMiwzLDEyLDMsMTE3LAotICAgIDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsCi0gICAgMTE2LDEwNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSw2OCwwLDAsMCwxMjQsMCwwLDY5LAotICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLAotICAgIDIsMCwxMzIsMCwwLDkwLDMsMCwxMDEsNCwwLDEwMCwzLDAsMTAwLDQsCi0gICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw2LDAsMTAwLDUsMCwKLSAgICAxMDAsNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAwLDcsMCw4MywKLSAgICA0MCw4LDAsMCwwLDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSw0LDAsMCwwLDAsMCwKLSAgICAwLDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyNSwKLSAgICAwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwKLSAgICAzLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MCwxLDAsMCwKLSAgICAwLDc4LDQwLDIsMCwwLDAsMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwKLSAgICAxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwxMTcsNSwwLDAsMCw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTg5LDQsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjQsMCwwLDAsNzgsOTcsMTA5LAotICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LAotICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwKLSAgICAxLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDc4LDExNywyNSwwLDAsMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwzOSwxMjMsMTI1LDM5LDMyLDQwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksCi0gICAgMTAxLDQxLDYyLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsCi0gICAgMTA5LDk3LDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwKLSAgICA0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDYsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDE5Miw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LAotICAgIDI3LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwzMiwwLDAsMCwxMTYsMCwwLDEwMCwxLDAsMTI0LAotICAgIDAsMCwxMDYsMSwwLDEzMSwyLDAsMSwxMjQsMCwwLDEwNiwxLDAsMTI0LAotICAgIDEsMCw5NSwyLDAsMTI0LDEsMCw4Myw0MCwyLDAsMCwwLDExNywyNCwKLSAgICAwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDExNywzOCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiwxMjMsMzMsMTE0LDEyNSw0MCwzLDAsMCwwLDExNywxNiwwLDAsMCwKLSAgICA5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwKLSAgICAxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0MCwyLDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTYsNCwwLDAsCi0gICAgMTE1LDYsMCwwLDAsMCwzLDE2LDEsMTIsMSwxMTcsMjcsMCwwLDAsCisgICAgMCwxMTUsNCwwLDAsMCwxMDAsMCwwLDgzLDQxLDEsNzgsMTE0LDQsMCwKKyAgICAwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMSwxLAorICAgIDAsMCwzMyw3LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDI4LDk1LAogICAgIDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDgsMCwwLAotICAgIDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLAotICAgIDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxMSwwLDAsMCwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTE3LDE3LDAsMCwwLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksCi0gICAgOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LAotICAgIDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLAotICAgIDYyLDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxODgsNCwwLDAsMTE1LDYsMCwwLDAsMTYsMSwKLSAgICAxMiwzLDE4LDQsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5NywKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCwxLDAsMCwwLDQsMCwwLDAsNjYsMCwwLDAsMTE1LDExOSwwLAotICAgIDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsCi0gICAgMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDQsMCwxMDAsNCwwLAotICAgIDEwMCw1LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDYsMCwxMDEsNCwwLDEwMCwKLSAgICA2LDAsMTAwLDcsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNywwLDEwMSw0LAotICAgIDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsCi0gICAgMTAxLDQsMCwxMDAsMTIsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMSwwLDEzMSwKLSAgICAxLDAsOTAsMTAsMCwxMDAsMTIsMCw4Myw0MCwxMywwLDAsMCwxMTcsMTAsCi0gICAgMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw2MiwwLAotICAgIDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDMyLAotICAgIDk3LDExMCwxMDAsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDk1LDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDk1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsNDYsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsNTgsMCwwLDAsMTIwLDUxLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEwNiwyLDAsMTMxLDAsMCw2OCw5MywzNCwwLDEyNSwxLDAsCi0gICAgMTE2LDMsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMTYsMCwxMjQsCi0gICAgMSwwLDEwNiw0LDAsMTMxLDAsMCwxLDExMywxNiwwLDExMywxNiwwLDg3LAotICAgIDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMTI1LDAsMCwwLDY3LDk3LAotICAgIDEwOCwxMDgsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LAotICAgIDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw0MCw0MSwzMiwxMDksMTAxLDExNiwxMDQsMTExLAotICAgIDEwMCwzMiwxMTEsMTEwLDMyLDk3LDEwOCwxMDgsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwKLSAgICAxMTYsMTE0LDEyMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTUsMTAsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMTE1LDExNiwxMTEsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTUsMTIxLAotICAgIDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE1LDMyLDQwLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0MSw0NiwxMTcsMTcsMCwwLDAsCi0gICAgMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDExNSw3OCw0MCw1LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICAxOSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsCi0gICAgMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDYsMCwwLDAsMTE4LDk3LDEwOCwxMTcsCi0gICAgMTAxLDExNSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxNywKLSAgICAwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsMTE1LDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LAotICAgIDExNSwxMTcsNiwwLDAsMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCwKLSAgICA5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDIxMCw0LAotICAgIDAsMCwxMTUsNiwwLDAsMCwwLDQsMjIsMSwxNSwxLDExNywyOCwwLAotICAgIDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsCi0gICAgOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxMiwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsOTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwKLSAgICAwLDExNiwyLDAsMTA2LDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLDIsMCwKLSAgICAxLDExMCwwLDAsMTIwLDU5LDAsMTE2LDAsMCwxMDYsMSwwLDY4LDkzLDQ0LAotICAgIDAsMTI1LDIsMCwxMjEsMTQsMCwxMjQsMiwwLDEyNCwxLDAsMTMxLDEsMCwKLSAgICA4Myw4NywxMTMsMzgsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDgxLDAsMSwKLSAgICAxLDEsMTE5LDM4LDAsODksMTEzLDM4LDAsODgsMTEzLDM4LDAsODcsMTAwLDIsCi0gICAgMCw4MywxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDExMywwLDAsMCwKLSAgICA4MywxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMzIsCi0gICAgMTExLDEwMiwzMiwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDEwMiwKLSAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMDQsCi0gICAgMTExLDExMSwxMDcsMTE1LDM5LDMyLDEwNSwxMTUsMzIsMTAyLDk3LDEwOCwxMTUsMTAxLDMyLDExNiwKLSAgICAxMDQsMTAxLDExMCwzMiwxMTcsMTE1LDEwMSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDExNywyMywwLDAsMCwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCi0gICAgMTExLDExMSwxMDcsMTE1LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSw3OCw0MCw3LAotICAgIDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywxMCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDExNyw5LDAsMCwwLDk1LAotICAgIDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsNCwwLDAsMCwxMTksOTcsMTE0LAotICAgIDExMCwxMTcsMTMsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywxMTQsMTEwLAotICAgIDEwNSwxMTAsMTAzLDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwKLSAgICAxMTQsMTExLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwzLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsMTE3LDQsMCwwLDAsMTA0LDExMSwxMTEsMTA3LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMjE4LDQsMCwwLDExNSwxNiwwLDAsMCwKLSAgICAwLDcsOSwxLDE5LDEsMTYsMSwzLDEsMTQsMSwxMywxLDEyLDIsCi0gICAgMTE3LDIyLDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDk5LDIsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw5MSwwLDAsMCwxMjQsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjEsCi0gICAgMCwxMDAsMiwwLDEyNSwxLDAsMTEwLDAsMCwxMjEsMTcsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTI0LDEsMCwyNSwxMjUsMiwwLDg3LDExMCw0NiwwLDQsMTE2LAotICAgIDIsMCwxMDcsMTAsMCwxMTQsODYsMCwxLDEsMSwxMjQsMCwwLDEwNiwzLAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTI0LDEsMCw2MCw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsODMsCi0gICAgNDAsMywwLDAsMCwxMTcsMjEwLDAsMCwwLDcxLDEwMSwxMTYsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwxMDIsMTE0LDExMSwxMDksCi0gICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsCi0gICAgMTEwLDExNiwxMTQsMTIxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLDQ0LDMyLDEwMiwxMDUsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiw5NywxMTIsMTEyLDExNCwxMTEsMTEyLDExNCwxMDUsOTcsMTE2LDEwMSwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywxMTAsCi0gICAgMTAwLDMyLDk5LDk3LDk5LDEwNCwxMDEsMzIsMTA1LDExNiw0NiwzMiw3MywxMDIsMzIsMTEwLAotICAgIDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDExOCw5NywxMDUsCi0gICAgMTA4LDk3LDk4LDEwOCwxMDEsNDQsMzIsMTE1LDExNiwxMTEsMTE0LDEwMSwzMiw3OCwxMTEsMTEwLAotICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTcsMCwwLDAsCi0gICAgMCwxMTcsMSwwLDAsMCw0Niw0MCw0LDAsMCwwLDExNywzLDAsMCwKLSAgICAwLDExNSwxMjEsMTE1LDExNywxOSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDgsMCwwLAotICAgIDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsNDAsMywwLDAsMCwxMTcsMywKLSAgICAwLDAsMCw5OSwxMDgsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICA2LDAsMCwwLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwyMzUsCi0gICAgNCwwLDAsMTE1LDE2LDAsMCwwLDAsOCwxMiwxLDksMSwzLDEsCi0gICAgMTcsMSwxMywxLDE1LDEsMTgsMSwxMTcsMzEsMCwwLDAsODAsOTcsMTE2LAotICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw5OSwzLDAsMCwKLSAgICAwLDAsMCwwLDAsOCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwxODksMCwwLDAsMTAzLDAsMCwxMjUsMywwLDEyMCwxNzYsMCwxMjQsCi0gICAgMiwwLDY4LDkzLDE1OCwwLDEyNSw0LDAsMTE2LDAsMCwxMjQsNCwwLDExNiwKLSAgICAxLDAsMTE2LDIsMCwxMDIsMiwwLDEzMSwyLDAsMTE1LDQ2LDAsMTEzLDEzLAotICAgIDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDQsMCwxMzEsMSwwLAotICAgIDEyNSw1LDAsMTI0LDUsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDEzLDAsMTE2LAotICAgIDUsMCwxMjQsNSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMTEyLDAsMTI0LDUsCi0gICAgMCwxMDYsNiwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDYsMCwKLSAgICAxMjUsNywwLDExMCwyMSwwLDEyNCw1LDAsMTA2LDcsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDYsMCwxMDMsMCwwLDEyNSw3LDAsMTI0LDYsMCwxMDAsMiwKLSAgICAwLDEwNyw5LDAsMTE0LDE1NSwwLDEyNCw2LDAsMTI0LDMsMCwxMDIsMiwwLAotICAgIDgzLDEyNCwzLDAsMTA2LDgsMCwxMjQsNywwLDEzMSwxLDAsMSwxMTMsMTMsCi0gICAgMCwxMTMsMTMsMCw4NywxMDAsMiwwLDEyNCwzLDAsMTAyLDIsMCw4MywxMDAsCi0gICAgMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDYzLDAsMCwwLDcwLDEwNSwxMTAsCi0gICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTExLDExNCwzMiwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDcsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDExNywxMSwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw3OCw0MCw5LDAsCi0gICAgMCwwLDExNywxMCwwLDAsMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMTYsMTE0LDExNyw1LDAsMCwwLDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTcsMjAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw0LDAsMCwKLSAgICAwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwKLSAgICAxMTQsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsNDAsOCwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgMTQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsMTE3LDUsMCwwLDAsMTAxLDExMCwxMTYsMTE0LDEyMSwxMTcsNiwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNyw4LDAsMCwwLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwyNTIsNCwwLDAsMTE1LAotICAgIDI4LDAsMCwwLDAsNSw2LDEsMTMsMSwyMSwxLDYsMSwxNSwxLAotICAgIDEyLDEsMTUsMSwyNCwyLDE1LDEsNiwxLDEyLDIsMTAsNSwyMCwyLAotICAgIDExNywyMiwwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwzLDAsMCwwLAotICAgIDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw5NywwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsCi0gICAgMCwxMTYsMSwwLDEwNiwyLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCw5MiwyLDAsMTI1LAotICAgIDMsMCwxMjUsNCwwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLDExNCw2NCwKLSAgICAwLDEyNCwzLDAsODMsMTI0LDQsMCwxMTQsODksMCwxMTYsNCwwLDEyNCwxLAotICAgIDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDMsMCw4MywxMDAsMSwKLSAgICAwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsOTgsMCwwLDAsCi0gICAgNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LAotICAgIDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LAotICAgIDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsCi0gICAgMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw0Niw3OCw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxMSwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0MCw1LDAsMCwwLDExNywzLDAsMCwwLAotICAgIDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDE0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwyMyw1LDAsMCwxMTUsMTYsMCwwLDAsMCw0LDEyLDEsCi0gICAgMTIsMSwyNCwxLDEyLDEsNCwyLDYsMywxOSwyLDExNywyMiwwLDAsCi0gICAgMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDExLDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwKLSAgICAxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMTE3LDExLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMTE3LDIwLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsCi0gICAgMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSwKLSAgICA5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwKLSAgICAwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMjA2LDQsMCwKLSAgICAwLDExNSwxNCwwLDAsMCwxNiwyLDYsMiwxOCw4LDE4LDE3LDE4LDE3LAotICAgIDE4LDI3LDMsMSwxMTcsMTAsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDMsMCwwLDAsNjYsMCwwLDAsMTE1LDExMCwwLDAsMCwxMjQsMCwwLAotICAgIDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCi0gICAgOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsCi0gICAgNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAxLDYsMCw5MCw3LAotICAgIDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsOCwwLDEwMCw4LDAsCi0gICAgMTAwLDksMCwxMzIsMCwwLDkwLDksMCwxMDEsMTAsMCwxMDAsMTAsMCwxMDAsCi0gICAgMTEsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTEsMCwxMDAsMTIsMCwxMDAsMTMsCi0gICAgMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDE0LDAsODMsNDAsMTUsMCwwLDAsCi0gICAgMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDE3MiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMTAsMTE2LDEwMSwKLSAgICAxMTQsOTcsOTksMTE2LDEwNSwxMTEsMTEwLDExNSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDk3LDExNCwKLSAgICAxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTEyLDEwMSwxMTQsCi0gICAgMTAyLDExMSwxMTQsMTA5LDk3LDExMCw5OSwxMDEsNDQsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDEwLAotICAgIDMyLDMyLDMyLDMyLDExNCwxMDEsMTAyLDExNCwxMDEsMTE1LDEwNCwxMDEsMTAwLDMyLDExOSwxMDQsCi0gICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsMTA0LAotICAgIDk3LDExMCwxMDAsMTA4LDEwNSwxMTAsMTAzLDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsCi0gICAgMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwKLSAgICAwLDcsMCwwLDAsMTE1LDEyMiwwLDAsMCwxMDMsMCwwLDEyNSwzLDAsCi0gICAgMTIwLDUyLDAsMTI0LDIsMCw2OCw5Myw0NCwwLDkyLDIsMCwxMzcsMCwwLAotICAgIDEyNSw0LDAsMTI0LDMsMCwxMDYsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsCi0gICAgMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjQsNCwwLDY4LDEzMSwxLDAsMTMxLAotICAgIDEsMCwxLDExMywxMywwLDg3LDEyNCwzLDAsMTI0LDAsMCw5NSwxLDAsCi0gICAgMTI0LDEsMCwxMTIsNzksMCwxMDAsMywwLDEyNCwwLDAsOTUsMiwwLDEwMCwKLSAgICA2LDAsMTI0LDAsMCw5NSwzLDAsMTE2LDQsMCwxMzEsMCwwLDEyNCwwLAotICAgIDAsOTUsNSwwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwwLDk1LDYsMCwKLSAgICAxMDAsNSwwLDgzLDQwLDcsMCwwLDAsMTE3LDE1NCwwLDAsMCw3MywxMTAsCi0gICAgMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNSwxMDEsOTcsMTE0LDk5LDEwNCwKLSAgICAzMiwxMTEsMTEwLDMyLDk3LDExMCwxMDAsMzIsOTcsMzIsMTE4LDk3LDExNCwxMDUsOTcsOTgsCi0gICAgMTA4LDEwMSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDExMSwxMDIsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNTAsNDUsMTE2LDExNywxMTIsMTA4LDEwMSwxMTUsMzIsOTksMTExLAotICAgIDExMCwxMTYsOTcsMTA1LDExMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMTAxLDk5LAotICAgIDExMSwxMDMsMTEwLDEwNSwxMjIsMTAxLDExNSw0Niw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCwzLDAsMCwwLDUxLDAsMCwwLDExNSwyNywwLAotICAgIDAsMCwxMjQsMCwwLDkzLDE3LDAsMTI1LDEsMCwxMjQsMSwwLDEzNiwwLAotICAgIDAsMTAyLDIsMCw4NiwxLDExMywzLDAsMTAwLDAsMCw4Myw0MCwxLDAsCi0gICAgMCwwLDc4LDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsNiwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw0MCwKLSAgICAxLDAsMCwwLDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsMTAxLAotICAgIDEyMCwxMTIsMTE0LDYyLDU2LDUsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsCi0gICAgMzgsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAotICAgIDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMSwwLDAsMCw3OCwxMDUsMjU1LDI1NSwyNTUsMjU1LDQwLDcsMCwwLDAsCi0gICAgMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDgsMCwwLDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE5LDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE0LDAsMCwwLDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLAotICAgIDEwNSwxMjAsMTAxLDExNSw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsMTE3LDYsCi0gICAgMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDUwLDUsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwwLDQsNiwxLDE5LDEsMzYsMSw5LDIsMTUsMSw5LDEsMTIsCi0gICAgMSwxMTcsMTksMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsCi0gICAgMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsCi0gICAgMCwwLDAsMTAwLDMsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMiwwLDgzLAotICAgIDQwLDQsMCwwLDAsMTE3LDMxLDAsMCwwLDczLDExMCwxMTgsOTcsMTA4LDEwNSwKLSAgICAxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKLSAgICAxMTQsMTIxLDMyLDEwOSwxMTYsMTA1LDEwOSwxMDEsNDYsMTA1LDEsMCwwLDAsNzgsMTA1LAotICAgIDI1NSwyNTUsMjU1LDI1NSw0MCwxLDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAotICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNjQsNSwwLDAsMTE1LDIsMCwKLSAgICAwLDAsMCwyLDExNywyOCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksCi0gICAgOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsMCwwLDEyLDAsCi0gICAgMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwyMTYsMSwwLDAsMTAwLAotICAgIDgsMCwxMjUsMiwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLAotICAgIDAsMTAwLDIsMCwyNSwxMjUsMywwLDEyMSwyNSwwLDExNiwyLDAsMTA2LDMsCi0gICAgMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDEsMCwxMDYsNSwwLDEyNSw0LDAsCi0gICAgODcsMTEwLDI0LDAsNCwxMTYsNiwwLDEwNywxMCwwLDExNCw3NiwwLDEsMSwKLSAgICAxLDEwMCw5LDAsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDEyNCw0LDAsMTI0LAotICAgIDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDExNCwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMzEsMCwwLDEsMTI0LDQsMCwxMjQsMCwwLDk1LDcsMCwxMTAsMCwKLSAgICAwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTQ3LDAsMTI0LDAsMCwxMDYsMTAsMCwKLSAgICAxMjUsNSwwLDEyNCwzLDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNiwwLDExMCwKLSAgICAxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDUsMCwxMjQsMywwLDEyNSw2LAotICAgIDAsMTI0LDYsMCwxMjQsNSwwLDEwNyw2LDAsMTE0LDQ1LDEsMTE2LDEzLDAsCi0gICAgMTI0LDAsMCwxMDYsNCwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDExNiwKLSAgICAxNCwwLDEyNCw3LDAsMTMxLDEsMCwxMTQsNDUsMSwxMjAsOTEsMCwxMjQsMCwKLSAgICAwLDEwNiwxNSwwLDY4LDkzLDcxLDAsOTIsMiwwLDEyNSw4LDAsMTI1LDksCi0gICAgMCwxMDAsNCwwLDEyNCw4LDAsMjMsMTI1LDEwLDAsMTE2LDEzLDAsMTI0LDcsCi0gICAgMCwxMjQsMTAsMCwxMzEsMiwwLDEyNSwxMSwwLDExNiwxNiwwLDEyNCwxMSwwLAotICAgIDEzMSwxLDAsMTE0LDIxNCwwLDEyNCw5LDAsMTI0LDEsMCwxMjQsMTEsMCwxMzEsCi0gICAgMiwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDExMywyMTQsMCw4NywKLSAgICAxMDAsMTAsMCwxMjUsMiwwLDExMyw0NSwxLDExMCwwLDAsMTIwLDEyMCwwLDEyNCwKLSAgICAwLDAsMTA2LDE1LDAsNjgsOTMsMTA5LDAsOTIsMiwwLDEyNSw4LDAsMTI1LAotICAgIDksMCwxMTYsMTMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDMsMCwxMjQsOCwKLSAgICAwLDIzLDEzMSwyLDAsMTI1LDExLDAsMTE2LDE4LDAsMTAwLDUsMCwxMDYsMTksCi0gICAgMCwxMjQsMTEsMCwxMzEsMSwwLDEwMCw2LDAsMTAwLDIsMCwxMzEsMSwxLAotICAgIDEsMTI0LDYsMCwxMjQsOCwwLDIzLDEyNCw1LDAsMTA3LDYsMCwxMTQsNTUsCi0gICAgMSwxMTYsMTYsMCwxMjQsMTEsMCwxMzEsMSwwLDExNCwxNjQsMSwxMjQsOSwwLAotICAgIDEyNCwxLDAsMTI0LDExLDAsMTMxLDIsMCwxMDMsMCwwLDEwMiwyLDAsODMsCi0gICAgMTEzLDU1LDEsMTEzLDU1LDEsODcsMTI0LDIsMCwxMTQsMjA2LDEsMTE2LDE4LDAsCi0gICAgMTAwLDcsMCwxMDYsMTksMCwxMjQsNywwLDEzMSwxLDAsMTMxLDEsMCwxLAotICAgIDEwMCwxMSwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDEwMCwxMSwwLAotICAgIDEwMywwLDAsMTAyLDIsMCw4Myw0MCwxMiwwLDAsMCwxMTcsMTI1LDAsMCwKLSAgICAwLDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAotICAgIDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDMyLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwxMTcsMTE0LAotICAgIDExMCwxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDUsMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LDExNywxLAotICAgIDAsMCwwLDQ2LDEwNSwyLDAsMCwwLDEwNSwxLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsOSwwLDAsMCwKLSAgICAxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNyw5LDAsMCwwLDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTA1LDExNiwxMjEsMTE3LDI1LDAsMCwwLDExMiwxMTEsMTE1LDExNSwKLSAgICAxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMjMsMTI1LDcwLDEwNSwyNTUsMjU1LDI1NSwyNTUsODQsNzgsNDAsMjEsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywzLDAsMCwwLAotICAgIDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwKLSAgICAxMDksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNywxOSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsCi0gICAgMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsCi0gICAgOCwwLDAsMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMTIsMCwwLAotICAgIDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsMTE3LDQsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw2LDAsMCwwLAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMTIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTIsMCwwLDAsMTA1LAotICAgIDExNSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwxMTcsMTEsMCwwLDAsCi0gICAgMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDUsMCwwLDAsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsNSwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDExNywKLSAgICAxMiwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNyw5LDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsCi0gICAgMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTE3LDYsMCwwLDAsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOSwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNzAsNSwwLDAsMTE1LDY2LDAsMCwwLDAsMyw2LDEsMTksMSwzLAotICAgIDEsMjUsMSwxMywxLDExLDEsMTUsMSwxMCwxLDEyLDIsOSwxLDksCi0gICAgMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLDEyLDEsMjIsMSwxMCwKLSAgICAxLDE1LDEsMTIsMSwyNiw0LDEyLDIsMjIsMSwyMiwxLDI1LDEsMTYsCi0gICAgMSwxMiwxLDI2LDEsNiwxLDE5LDEsMTMsMSwxMTcsMjIsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsOSwKLSAgICAwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsOCwxLDAsMCwKLSAgICAxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsMTksMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLDAsNCwKLSAgICAxMTYsMywwLDExNiw0LDAsMTE2LDUsMCwxMDIsMywwLDEwNywxMCwwLDExNCwKLSAgICA2MywwLDEsMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LAotICAgIDExNiw2LDAsMTA2LDcsMCwxMDYsOCwwLDEwMCwxLDAsMTMxLDEsMCwxMTUsCi0gICAgMTAwLDAsMTE2LDksMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxMCwKLSAgICAwLDExMCwxMTEsMCwxMTYsOSwwLDEzMSwwLDAsMTI1LDMsMCwxMjAsOTAsMCwKLSAgICAxMjQsMiwwLDY4LDkzLDgyLDAsMTI1LDQsMCwxMjQsNCwwLDEwNiwxMSwwLAotICAgIDEwMCwyLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDUsMCwxMjUsNiwwLDEyNSwKLSAgICA3LDAsMTI0LDYsMCwxMTQsMTc5LDAsMTAwLDMsMCwxMDYsMTIsMCwxMjQsNSwKLSAgICAwLDEyNCw3LDAsMTA2LDEzLDAsMTMxLDAsMCwxMzEsMiwwLDEyNSw4LDAsCi0gICAgMTEwLDYsMCwxMjQsNSwwLDEyNSw4LDAsMTI0LDMsMCwxMDYsMTQsMCwxMjQsCi0gICAgOCwwLDEzMSwxLDAsMSwxMTMsMTE2LDAsODcsMTI0LDMsMCwxMjQsMCwwLAotICAgIDk1LDEwLDAsMTE2LDYsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDE1LDAsMTMxLAotICAgIDEsMCwxMTQsNCwxLDExNiw5LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAotICAgIDAsMTI0LDIsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxNiwKLSAgICAwLDExMCwwLDAsMTAwLDYsMCw4Myw0MCw3LDAsMCwwLDExNyw2OCwwLAotICAgIDAsMCw3MCwxMDUsMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDMyLDExMSwxMDIsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDAsMTA1LDExNCwxMDEsCi0gICAgOTksMTE2LDExMSwxMTQsMTIxLDQ2LDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNywxLAotICAgIDAsMCwwLDQ2LDExNyw1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDExNSwKLSAgICAwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEzMSwwLDAsODYsMSwxMTMsMywwLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsMiwwLDAsMCwxMDIsMTEwLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsCi0gICAgMTAxLDEyMCwxMTIsMTE0LDYyLDE0Myw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsCi0gICAgMTE3LDQxLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSwKLSAgICA5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw3OCw0MCwKLSAgICAxNywwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMywwLAotICAgIDAsMCw5NSwxMTEsMTE1LDExNyw3LDAsMCwwLDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LAotICAgIDExNCwxMTcsMTcsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzgsMTExLDExNiw3MCwxMTEsMTE3LAotICAgIDExMCwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxNSwwLDAsMCw4MCwxMDEsMTE0LDEwOSwKLSAgICAxMDUsMTE1LDExNSwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE4LDAsMCwwLAotICAgIDc4LDExMSwxMTYsNjUsNjgsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsOCwwLDAsMCwxMTIsCi0gICAgMTA4LDk3LDExNiwxMDIsMTExLDExNCwxMDksMTE3LDEwLDAsMCwwLDExNSwxMTYsOTcsMTE0LAotICAgIDExNiwxMTUsMTE5LDEwNSwxMTYsMTA0LDExNywzLDAsMCwwLDExNSwxMDEsMTE2LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw5LAotICAgIDAsMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDYsMCwwLAotICAgIDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNSwwLDAsMCwxMDgsMTExLDExOSwxMDEsCi0gICAgMTE0LDExNywzLDAsMCwwLDk3LDEwMCwxMDAsMTE3LDI3LDAsMCwwLDk1LDY3LAotICAgIDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LAotICAgIDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LDgzLDExNywxOSwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDQwLDksMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk5LDExMSwxMTAsCi0gICAgMTE2LDEwMSwxMTAsMTE2LDExNSwxMTcsMjEsMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCw5NSwKLSAgICAxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsMTE3LAotICAgIDQsMCwwLDAsMTA1LDExNiwxMDEsMTA5LDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNywzLDAsMCwwLDEwMCwxMTEsMTE2LDExNyw2LDAsMCwwLDExNSwxMTcsCi0gICAgMTAyLDEwMiwxMDUsMTIwLDExNyw4LDAsMCwwLDExMCwxMDEsMTE5LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNCw1LDAsCi0gICAgMCwxMTUsMzQsMCwwLDAsMCwyLDksMSwzLDEsMTksMSwyMiwzLAotICAgIDExLDMsMTgsMSwxOCw3LDksMSwxMywxLDI0LDEsNiwxLDI3LDIsCi0gICAgNiwxLDE3LDEsOSwxLDE4LDEsMTE3LDIyLDAsMCwwLDcwLDEwNSwxMDgsCi0gICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCi0gICAgMywwLDAsMCw3LDAsMCwwLDExNSwyNSwwLDAsMCwxMzUsMCwwLAotICAgIDEzNSwxLDAsMTAyLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsCi0gICAgMiwwLDEyNCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMjAsMSwwLDAsCi0gICAgNjUsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LAotICAgIDEwNCwxMDUsOTksMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiw5OSwKLSAgICAxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDExMSwxMTAsCi0gICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTA1LDEwOCwKLSAgICAxMDgsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMTEwLDMyLDEwNSwxMTAsMTE1LDExNiwKLSAgICA5NywxMTAsOTksMTAxLDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAotICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwKLSAgICAzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICA5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LAotICAgIDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDQsMzIsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDQ2LDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMzEsMSwwLDExNSwzMywwLDExNiwxLDAsMTAwLDEsMCwKLSAgICAxMDAsMiwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LAotICAgIDAsMCwxMjQsMCwwLDEzNiwxLDAsMTQwLDEsMCw4Myw0MCwzLDAsMCwKLSAgICAwLDExNyw0NSwwLDAsMCw4MCw5NywxMTYsMTA0LDMyLDEwNCwxMTEsMTExLDEwNywzMiwKLSAgICAxMDIsMTExLDExNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDEwOSw5NywKLSAgICA5OSwxMDQsMTA1LDExMCwxMDEsMTE0LDEyMSw0Niw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDQ2LDExNywzMCwwLDAsMCwxMTEsMTEwLDEwOCwxMjEsMzIsMTAwLDEwNSwxMTQsCi0gICAgMTAxLDk5LDExNiwxMTEsMTE0LDEwNSwxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE1LDExNywxMTIsCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsCi0gICAgMiwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LAotICAgIDExNSwxMDAsMTA1LDExNCwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LAotICAgIDE0LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LAotICAgIDEwOCwxMTUsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSwKLSAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDE1NSw1LDAsMCwxMTUsNiwwLDAsMCwwLAotICAgIDIsMTIsMSwyMSwxLDExNyw1NCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw0Niw2MCwKLSAgICAxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsCi0gICAgMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNDAsMCwwLDAsMCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDk5LAotICAgIDEwOCwxMTUsMTE3LDE0LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwKLSAgICAxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDI0LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwKLSAgICAxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCw5OSwxMDgsMTE1LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LAotICAgIDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTQ1LDUsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMTAsMjEsNiwxMTcsMjAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTQsMCwwLDAsMTAwLDEsMCwxMjQsMCwwLDEwNiwwLDAsCi0gICAgMTAyLDEsMCwyMiw4Myw0MCwyLDAsMCwwLDc4LDExNywxNCwwLDAsMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDM3LDExNCw0MSw0MCwxLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDEsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsCi0gICAgMTE0LDk1LDk1LDE2Myw1LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDE5LAotICAgIDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQwLDEzLDAsMCwwLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLAotICAgIDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsCi0gICAgMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsCi0gICAgOTUsOTUsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwKLSAgICAxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMTE3LDE3LDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxMSwKLSAgICAwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsOSwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCw3MCwxMDUsCi0gICAgMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQxLDUsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwxNiw3LDYsMiwxMiwxNCwxMiw0LDYsMiwxMiw0NCwxMiwzMSwxOCwKLSAgICAxOCwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwKLSAgICAwLDY2LDAsMCwwLDExNSw1MCwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLAorICAgIDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDI5LDAsMCwwLDExNiwwLDAsMTAwLDEsMCwxMjQsMCwwLDEwNiwxLAorICAgIDAsMTMxLDIsMCwxLDExNiwyLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLAorICAgIDAsODMsNDEsMiwxMjIsOTgsNzYsMTExLDk3LDEwMCwzMiw5NywzMiwxMTAsOTcsMTA5LAorICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwKKyAgICAxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwKKyAgICAxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMjIsMzgsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKKyAgICA5Nyw5OSwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLAorICAgIDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTIzLDMzLDExNCwxMjUsCisgICAgNDEsMywxMTQsMTUyLDAsMCwwLDExNCwyNTMsMCwwLDAsMTE0LDE4MCwwLDAsCisgICAgMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw0LDEsMCwKKyAgICAwLDM2LDcsMCwwLDExNSw0LDAsMCwwLDAsNywxNiwxLDEyMiwyOCwKKyAgICA5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MSwxMSwxMTQsCisgICAgNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNzIsCisgICAgMCwwLDAsMTE0LDE4LDEsMCwwLDExNCwyMDUsMCwwLDAsMTE0LDIxOSwwLAorICAgIDAsMCwxMTQsMTYsMSwwLDAsMTE0LDE1LDEsMCwwLDExNCwxLDEsMCwKKyAgICAwLDExNCw0LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNTEsMCwwLDAsMTEsCisgICAgNywwLDAsMTE1LDE0LDAsMCwwLDEyLDEsMTIsMywxOCw5LDEyLDMsCisgICAgMTIsMywxMiwzLDEyLDMsMTE0LDI1MSwwLDAsMCw5OSwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LDAsMCwwLAorICAgIDExNSwxNjAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLDAsCisgICAgMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCw0LDAsMTAwLAorICAgIDUsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNiwwLDEwMSw0LDAsMTAwLDYsCisgICAgMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDQsMCwKKyAgICAxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsCisgICAgNCwwLDEwMCwxMCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwxLDAsMTMxLDEsCisgICAgMCw5MCw5LDAsMTAxLDQsMCwxMDAsMTAsMCwxMDAsMTAsMCwxMDAsMTMsMCwKKyAgICAxMDAsMTQsMCwxMzIsMiwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNCwwLDEwMCwKKyAgICAxMCwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwxLDAsMTMxLDEsMCw5MCwxMSwKKyAgICAwLDEwMCwxMCwwLDgzLDQxLDE3LDIxOCwxMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsCisgICAgMTAwLDEwMSwxMTQsMTIyLDYyLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LAorICAgIDExNiwxMDQsMzIsOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsOTUsCisgICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsCisgICAgMTAxLDExNSw0Niw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICA0LDAsMCwwLDY3LDAsMCwwLDExNSw1OCwwLDAsMCwxMjAsNTEsMCwKKyAgICAxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDY4LDkzLDM0LDAsCisgICAgMTI1LDEsMCwxMTYsMywwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDExNCwKKyAgICAxNiwwLDEyNCwxLDAsMTA2LDQsMCwxMzEsMCwwLDEsMTEzLDE2LDAsMTEzLAorICAgIDE2LDAsODcsMTAwLDIsMCw4Myw0MSwzLDEyMiwxMjUsNjcsOTcsMTA4LDEwOCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LAorICAgIDk3LDk5LDEwNCwxMDEsMTE1LDQwLDQxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExMSwKKyAgICAxMTAsMzIsOTcsMTA4LDEwOCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLAorICAgIDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDExMiwKKyAgICA5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksCisgICAgMTA0LDEwMSwxMTUsMzIsNDAsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLAorICAgIDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQxLDQ2LDIxOCwxNywxMDUsMTEwLDExOCw5NywxMDgsMTA1LAorICAgIDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDc4LDQxLDUsMTE0LDcsCisgICAgMCwwLDAsMjE4LDE5LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwyMTgsNiwxMTgsOTcsMTA4LDExNywxMDEsMTE1LAorICAgIDExNCw2MCwwLDAsMCwxMTQsNzQsMSwwLDAsNDEsMiwxMTQsMTEsMSwwLAorICAgIDAsMjE4LDYsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc0LDEsMCwwLDUzLDcsMCwKKyAgICAwLDExNSw2LDAsMCwwLDAsNCwyMiwxLDE1LDEsMTIyLDI4LDgwLDk3LAorICAgIDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCwKKyAgICA5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDk5LDIsMCwwLDAsMCwKKyAgICAwLDAsMCwzLDAsMCwwLDEyLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA5NCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTE1LDI4LDAsMTE2LDIsMCwKKyAgICAxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsMiwwLDEsMTEwLDAsMCwKKyAgICAxMjAsNTksMCwxMTYsMCwwLDEwNiwxLDAsNjgsOTMsNDQsMCwxMjUsMiwwLAorICAgIDEyMSwxNCwwLDEyNCwyLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDg3LDExMywzOCwKKyAgICAwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsODEsMCwxLDEsMSwxMTksMzgsCisgICAgMCw4OSwxMTMsMzgsMCw4OCwxMTMsMzgsMCw4NywxMDAsMiwwLDgzLDEwMCwyLAorICAgIDAsODMsNDEsMywxMjIsMTEzLDgzLDEwMSw5NywxMTQsOTksMTA0LDMyLDExNSwxMDEsMTEzLAorICAgIDExNywxMDEsMTEwLDk5LDEwMSwzMiwxMTEsMTAyLDMyLDEwNCwxMTEsMTExLDEwNywxMTUsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsOTcsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsCisgICAgMzksMTEyLDk3LDExNiwxMDQsMzksNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNzMsMTAyLDMyLDM5LDEwNCwxMTEsMTExLDEwNywxMTUsMzksMzIsMTA1LDExNSwzMiwxMDIsCisgICAgOTcsMTA4LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDExNywxMTUsMTAxLDMyLDExNSwxMjEsCisgICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTIyLDIzLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsMTA1LDExNSwzMiwxMDEsMTA5LDExMiwxMTYsMTIxLAorICAgIDc4LDQxLDYsMTE0LDcsMCwwLDAsMjE4LDEwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwKKyAgICAxMTEsMTExLDEwNywxMTUsMTE0LDE2NiwwLDAsMCwxMTQsMTY3LDAsMCwwLDExNCwxNjgsCisgICAgMCwwLDAsMTE0LDE1MywwLDAsMCw0MSwzLDExNCwxMSwxLDAsMCwxMTQsCisgICAgMzUsMCwwLDAsOTAsNCwxMDQsMTExLDExMSwxMDcsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LAorICAgIDk1LDEwNCwxMTEsMTExLDEwNywxMTUsNjEsNywwLDAsMTE1LDE2LDAsMCwwLDAsCisgICAgNyw5LDEsMTksMSwxNiwxLDMsMSwxNCwxLDEzLDEsMTIsMiwxMjIsCisgICAgMjIsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDMsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDk3LDAsMCwKKyAgICAwLDEyNCwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyNywwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMzEsMCwwLDEyNSwxLDAsMTEwLDAsMCwxMjEsMTcsMCwxMTYsCisgICAgMiwwLDEwNiwzLDAsMTI0LDEsMCwyNSwxMjUsMiwwLDg3LDExMCw0NiwwLAorICAgIDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsOTIsMCwxLDEsMSwxMjQsMCwwLAorICAgIDEwNiw1LDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMTYsCisgICAgMiwwLDEwNiwzLDAsMTI0LDEsMCw2MCw4OSwxMTAsMSwwLDg4LDEyNCwyLAorICAgIDAsODMsNDEsMiwxMjIsMjEwLDcxLDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwKKyAgICAxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE1LDEyMSwxMTUsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLAorICAgIDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLAorICAgIDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDQ0LDMyLDEwMiwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5NywKKyAgICAxMTIsMTEyLDExNCwxMTEsMTEyLDExNCwxMDUsOTcsMTE2LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLAorICAgIDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywxMTAsMTAwLDMyLDk5LDk3LAorICAgIDk5LDEwNCwxMDEsMzIsMTA1LDExNiw0NiwzMiw3MywxMDIsMzIsMTEwLDExMSwzMiwxMDIsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwKKyAgICAxMDEsNDQsMzIsMTE1LDExNiwxMTEsMTE0LDEwMSwzMiw3OCwxMTEsMTEwLDEwMSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMzAsMCwwLDAsNDEsNiwxMTQsCisgICAgMywwLDAsMCwxMTQsNDUsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDc1LAorICAgIDEsMCwwLDExNCw3OSwwLDAsMCwxMTQsNzksMSwwLDAsNDEsMywxMTQsCisgICAgMTEsMSwwLDAsMTE0LDM1LDAsMCwwLDExNCw3NywxLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjAsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDc4LDcsMCwwLDExNSwxNiwwLDAsMCwwLDgsMTIsMSwKKyAgICAxNSwxLDMsMSwxNywxLDEzLDEsMTUsMSwxOCwxLDEyMiwzMSw4MCw5NywKKyAgICAxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk5LDMsMCwKKyAgICAwLDAsMCwwLDAsMCw2LDAsMCwwLDMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDExMywwLDAsMCwxMTYsMCwwLDEyNCwyLDAsMTAwLDEsMCwKKyAgICAxMzEsMiwwLDExNCwzOSwwLDEyNCwyLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsOTIsMiwwLDEyNSwzLDAsMTI1LDQsMCwxMTAsMjEsMCwxMjQsMiwKKyAgICAwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTAzLDAsMCwKKyAgICAxMjUsNCwwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOSwwLDExNCw4NSwwLDExNiwKKyAgICAzLDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsMTE2LDQsMCwxMjQsCisgICAgMSwwLDEwMCwwLDAsMTMxLDIsMCwxMjUsNSwwLDEyNCw0LDAsMTI0LDUsCisgICAgMCw5NSw1LDAsMTI0LDUsMCw4Myw0MSwyLDc4LDExNCwxNjUsMCwwLDAsCisgICAgNDEsNiwxMTQsNjAsMCwwLDAsMTE0LDE2NSwwLDAsMCwxMTQsMTQsMSwwLAorICAgIDAsMTE0LDE3MywwLDAsMCwxMTQsMjE2LDAsMCwwLDExNCwyMjAsMCwwLDAsCisgICAgNDEsNiwxMTQsMTEsMSwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNzcsMSwwLAorICAgIDAsMTE0LDE2OSwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwxNzcsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDE2LDk1LDEwOCwxMDEsMTAzLDk3LDk5LDEyMSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSwKKyAgICA5OSw5NSw3LDAsMCwxMTUsMTgsMCwwLDAsMCw0LDE1LDEsMjQsMiwKKyAgICAxNSwxLDYsMSwxMiwxLDEzLDEsMTUsMSw5LDEsMTIyLDI3LDgwLDk3LAorICAgIDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDgsMTAxLDEwMyw5Nyw5OSwxMjEsCisgICAgOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksNzgsOTksNCwwLDAsMCwwLAorICAgIDAsMCwwLDksMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMjUyLDAsMCwwLDEwMywwLDAsMTI1LDQsMCwxMjAsMjM5LDAsMTI0LDIsMCwKKyAgICA2OCw5MywyMDMsMCwxMjUsNSwwLDExNiwwLDAsMTI0LDUsMCwxMTYsMSwwLAorICAgIDExNiwyLDAsMTAyLDIsMCwxMzEsMiwwLDExNSw0NiwwLDExMywxMywwLDExMCwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMywwLDEyNCw1LDAsMTMxLDEsMCwxMjUsNiwKKyAgICAwLDEyNCw2LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxMywwLDExNiw0LDAsCisgICAgMTI0LDYsMCwxMDAsMiwwLDEzMSwyLDAsMTE0LDEwOSwwLDEyNCw2LDAsMTA2LAorICAgIDUsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDExMCwxOCwKKyAgICAwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMSwwLDEyNCw2LDAsMTMxLDIsMCwKKyAgICAxMjUsNywwLDEyNCw3LDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxNDUsMCwxMTMsCisgICAgMTMsMCwxMTAsMCwwLDEyNCw3LDAsMTA2LDcsMCwxMDAsMSwwLDEwNyw5LAorICAgIDAsMTE0LDE2NCwwLDEyNCw3LDAsODMsMTI0LDcsMCwxMDYsOCwwLDEyNSw4LAorICAgIDAsMTI0LDgsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDIwMCwwLDExNiw5LDAsCisgICAgMTAwLDMsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsNCwwLDEwNiwKKyAgICAxMCwwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMywwLDExMywxMywwLDg3LAorICAgIDExNiwxMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDEyNSw3LDAsMTI0LAorICAgIDQsMCwxMjQsNywwLDk1LDgsMCwxMjQsNywwLDgzLDEwMCwxLDAsODMsCisgICAgNDEsNCwxMjIsNjMsNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCwzMiwxMTEsMTE0LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAorICAgIDk1LDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NywxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTEwLDk3LAorICAgIDEwOSwxMDEsNDYsNzgsMTE0LDEzLDEsMCwwLDEyMiwxOSwxMTUsMTEyLDEwMSw5OSwzMiwKKyAgICAxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0MSwxMiwKKyAgICAxMTQsMTkyLDAsMCwwLDIxOCwzLDExNSwxMTYsMTE0LDIxOCw1LDk4LDEyMSwxMTYsMTAxLAorICAgIDExNSwxMTQsODAsMSwwLDAsMTE0LDYwLDAsMCwwLDExNCwxMywxLDAsMCwKKyAgICAxMTQsODEsMSwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCwKKyAgICAxNTMsMCwwLDAsMTE0LDE5NywwLDAsMCwxMTQsMjE2LDAsMCwwLDQxLDksCisgICAgMTE0LDExLDEsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICAxMiwxLDAsMCwyMTgsMTQsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTAsNSwxMDEsMTEwLDExNiwxMTQsMTIxLDExNCw3NywxLDAsMCwKKyAgICAxMTQsMTc3LDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDksOTUsMTAzLDEwMSwxMTYsOTUsCisgICAgMTE1LDExMiwxMDEsOTksMTEwLDcsMCwwLDExNSw0MCwwLDAsMCwwLDUsNiwKKyAgICAxLDEzLDEsMjEsMSw2LDEsMTUsMSwxMiwxLDE1LDEsMjEsMiwxOCwKKyAgICAxLDEyLDEsNiwxLDE1LDEsNCwxLDksMSwxMiwxLDE1LDUsMjAsCisgICAgMiwxNSwxLDksMSwxMjIsMjAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDk5LDQsMCwwLDAsCisgICAgMCwwLDAsMCw2LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE0MywwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsCisgICAgMCwxMTYsMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDIsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMywwLDEyNSwKKyAgICA0LDAsMTI0LDQsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDYxLDAsMTAwLDEsCisgICAgMCw4MywxMjQsNCwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMzUsCisgICAgMCwxMjQsNCwwLDEwNiw0LDAsMTI1LDUsMCwxMjQsNSwwLDExNCwxMjgsMCwKKyAgICAxMDAsMiwwLDEyNCw0LDAsOTUsNSwwLDExNiw2LDAsMTI0LDEsMCwxMjQsCisgICAgNSwwLDEyNCwwLDAsMTA2LDIsMCwxMzEsMywwLDEyNCw0LDAsOTUsNCwKKyAgICAwLDEyNCw0LDAsODMsMTAwLDEsMCw4MywxMTAsNCwwLDEyNCw0LDAsODMsCisgICAgMTAwLDEsMCw4Myw0MSwzLDEyMiw5OCwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LAorICAgIDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0Niw3OCw5MCw5LDExMCw5NywxMDksCisgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDQxLDcsMTE0LDcsMCwwLDAsMTE0LDM1LDAsCisgICAgMCwwLDExNCw4NSwxLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwyMjAsMCwwLAorICAgIDAsMTE0LDIxNywwLDAsMCwxMTQsNjAsMSwwLDAsNDEsNiwxMTQsMTEsMSwKKyAgICAwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDEyLDEsMCwKKyAgICAwLDExNCwxNzcsMCwwLDAsMTE0LDg0LDEsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMywxLDAsMCwxNDIsCisgICAgNywwLDAsMTE1LDI2LDAsMCwwLDAsNCwxMiwxLDEyLDEsMjEsMSwKKyAgICAxMiwxLDQsMSwxNSwxLDksMSw2LDMsOSwxLDI0LDEsNCwyLAorICAgIDcsMiwxMjIsMjAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwKKyAgICAxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwzLDAsMCwwLDAsMCwwLAorICAgIDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLAorICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLAorICAgIDAsMTI1LDMsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzQsMCwKKyAgICAxMDAsMSwwLDgzLDEyNCwzLDAsMTA2LDEsMCw4Myw0MSwyLDEyMiwxNzAsMTAyLAorICAgIDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMSwKKyAgICAxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwzOSwxMTIsCisgICAgOTcsMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNSwxMjEsCisgICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsMTEwLDEwMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCisgICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LAorICAgIDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LDExNSwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDk1LAorICAgIDExNSwxMTIsMTAxLDk5LDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLDIsMTE0LDEzLDEsMCwKKyAgICAwLDExNCwxNjksMCwwLDAsNDEsNCwxMTQsMTEsMSwwLDAsMTE0LDE1OCwwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTQsMSwwLDAsCisgICAgMTY0LDcsMCwwLDExNSw4LDAsMCwwLDAsOCwxOCwxLDEyLDEsNCwKKyAgICAxLDEyMiwyMiw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQxLDEyLDExNCw1NywwLDAsMCwKKyAgICAxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsCisgICAgMTgsMSwwLDAsMTE0LDc0LDEsMCwwLDExNCw3OSwxLDAsMCwxMTQsODAsCisgICAgMSwwLDAsMTE0LDgxLDEsMCwwLDExNCw4NSwxLDAsMCwxMTQsMTMsMSwKKyAgICAwLDAsMTE0LDE0LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MywxLDAsMCwKKyAgICA0OSw3LDAsMCwxMTUsMjIsMCwwLDAsMTIsMiw2LDIsMTgsOCwxOCwKKyAgICAxNywxOCwxNywxOCwxNSwzLDEsMTgsMzEsMywxLDIxLDIxLDMsMSwxMTQsCisgICAgNzMsMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMywwLDAsMCw2NCwwLDAsMCwxMTUsMTMzLDAsMCwwLDEwMSwwLAogICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLAogICAgIDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCwKLSAgICA1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCw4Myw0MCw3LDAsMCwKLSAgICAwLDExNywxOCwwLDAsMCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwKLSAgICAxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTE3LDM2LDAsMCwwLDY3LDExMSwxMTAsCi0gICAgMTE2LDEwMSwxMjAsMTE2LDMyLDEwOSw5NywxMTAsOTcsMTAzLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsCi0gICAgNDYsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMSwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDI0LAotICAgIDAsMCwwLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLDAsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwxMDgsMTExLDk5LDEwNyw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwKLSAgICAxMTQsOTUsOTUsMTczLDUsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjgsCi0gICAgMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwKLSAgICAxMTAsMTE2LDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsOTksCi0gICAgNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMSwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKLSAgICAwLDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDYwLDAsMCwKLSAgICAwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE0LDEwMSwxMDMsOTcsMTE0LDEwMCwxMDgsCi0gICAgMTAxLDExNSwxMTUsMzIsMTExLDEwMiwzMiw5NywxMTAsMTIxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsMzIsMTAxLDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwxMTUsNDYsNzgsNDAsMiwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLAotICAgIDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDAsNCwwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsCi0gICAgMTAxLDEyMCw5OSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDksMCwwLDAsMTAxLDEyMCw5OSwKLSAgICA5NSwxMTgsOTcsMTA4LDExNywxMDEsMTE3LDEzLDAsMCwwLDEwMSwxMjAsOTksOTUsMTE2LAotICAgIDExNCw5Nyw5OSwxMDEsOTgsOTcsOTksMTA3LDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LAotICAgIDk1LDE3Nyw1LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwKLSAgICAxMDEsMTIwLDExNiw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNzgsNDAsNiwwLAotICAgIDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLAotICAgIDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICA3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDksMCwwLDAsCi0gICAgOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwKLSAgICAxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwxNjksNSwwLAotICAgIDAsMTE1LDYsMCwwLDAsMTYsMiw2LDIsMTIsNCwxMTcsMTgsMCwwLAotICAgIDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LAotICAgIDEwMSwxMjAsMTE2LDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAorICAgIDUsMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLDkwLDcsMCwxMDAsNiwKKyAgICAwLDEwMCw3LDAsMTMyLDAsMCw5MCw4LDAsMTAwLDgsMCwxMDAsOSwwLAorICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwKKyAgICAxLDAsOTAsMTAsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDkwLDExLAorICAgIDAsMTAxLDEyLDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsMCwxMzEsMSwwLAorICAgIDkwLDEzLDAsMTAwLDE3LDAsMTAwLDE4LDAsMTMyLDAsMCw5MCwxNCwwLDEwMCwKKyAgICAxMCwwLDgzLDQxLDE5LDIxOCwxMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDEyMiwxNzIsNzAsMTA1LDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsMTE0LAorICAgIDk3LDk5LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsMTAxLAorICAgIDMyLDk5LDk3LDk5LDEwNCwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LDEwMiwKKyAgICAxMTEsMTE0LDEwOSw5NywxMTAsOTksMTAxLDQ0LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwzMiwKKyAgICAzMiwzMiwzMiwxMTQsMTAxLDEwMiwxMTQsMTAxLDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwKKyAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCw5NywKKyAgICAxMTAsMTAwLDEwOCwxMDUsMTEwLDEwMywzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLDMyLAorICAgIDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsMCwKKyAgICA3LDAsMCwwLDExNSwxMjIsMCwwLDAsMTAzLDAsMCwxMjUsMywwLDEyMCwKKyAgICA1MiwwLDEyNCwyLDAsNjgsOTMsNDQsMCw5MiwyLDAsMTM3LDAsMCwxMjUsCisgICAgNCwwLDEyNCwzLDAsMTA2LDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEzNCwwLDAsMTI0LDQsMCw2OCwxMzEsMSwwLDEzMSwxLAorICAgIDAsMSwxMTMsMTMsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMSwwLDEyNCwKKyAgICAxLDAsMTEyLDc5LDAsMTAwLDMsMCwxMjQsMCwwLDk1LDIsMCwxMDAsNiwKKyAgICAwLDEyNCwwLDAsOTUsMywwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwwLAorICAgIDk1LDUsMCwxMTYsNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSw2LDAsMTAwLAorICAgIDUsMCw4Myw0MSw3LDEyMiwxNTQsNzMsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLAorICAgIDEwMSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsCisgICAgMTE2LDExMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTExLDExMCwzMiw5NywxMTAsMTAwLAorICAgIDMyLDk3LDMyLDExOCw5NywxMTQsMTA1LDk3LDk4LDEwOCwxMDEsMzIsMTEwLDExNywxMDksOTgsCisgICAgMTAxLDExNCwzMiwxMTEsMTAyLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDUwLDQ1LAorICAgIDExNiwxMTcsMTEyLDEwOCwxMDEsMTE1LDMyLDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTA1LDExMCwKKyAgICAxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwKKyAgICAxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDEwMSw5OSwxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsCisgICAgNDYsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLAorICAgIDAsMCw1MSwwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywKKyAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMzYsMCwwLDEwMiwyLDAsODYsMSwxMTMsCisgICAgMywwLDEwMCwwLDAsODMsNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLAorICAgIDExNCwyMiwwLDAsMCwxMTQsNTcsMSwwLDAsNDEsMSwxMTQsMTY5LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NywwLDAsMCwKKyAgICAxOTMsNywwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiwzOCw3MCwxMDUsMTA4LAorICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwKKyAgICA0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwKKyAgICAxMTIsMTE0LDYyLDExNCwxMTYsMCwwLDAsMTE0LDI5LDAsMCwwLDc4LDExNCwxMzgsCisgICAgMCwwLDAsNDEsNywxMTQsMTk3LDAsMCwwLDIxOCw4LDk1LDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsMTE1LDExNCwzNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwyMTgsMywxMTUsMTAxLDExNiwyMTgsMTEsOTUsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwyMTgsMTksOTUsMTE0LDEwMSwxMDgsOTcsMTIwLAorICAgIDEwMSwxMDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSw0MSw1LDExNCwKKyAgICA3MSwwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDE0LDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsOTAsNywxMDgsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDExNSwxMTQsMTI3LDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDE2OSwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsMTg3LDcsMCwKKyAgICAwLDExNSwxNiwwLDAsMCwwLDQsNiwxLDE5LDEsMzYsMSw5LDIsCisgICAgMTUsMSw5LDEsMTIsMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCisgICAgMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTMsMCwwLDAsMTAwLDMsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMiwKKyAgICAwLDgzLDQxLDQsMTIyLDMxLDczLDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDEwOSwKKyAgICAxMTYsMTA1LDEwOSwxMDEsNDYsMTE0LDI5LDAsMCwwLDc4LDExNCwxMzgsMCwwLDAsCisgICAgNDEsMSwxMTQsODgsMSwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc0LDEsCisgICAgMCwwLDIwMSw3LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDI4LDcwLAorICAgIDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwKKyAgICAxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw1OSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwKKyAgICAwLDEyNSwyLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDM3LDAsCisgICAgMTAwLDEsMCwxMDMsMCwwLDEwMiwyLDAsODMsMTI0LDIsMCwxMDYsMSwwLAorICAgIDEyNCwyLDAsMTA2LDIsMCwxMTIsNTUsMCwxMDMsMCwwLDEwMiwyLDAsODMsCisgICAgNDEsMiwxMjIsMTk3LDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsCisgICAgOTcsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQ0LDMyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKKyAgICA5Nyw5OSwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNywKKyAgICA5NywxMDMsMTAxLDMyLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLAorICAgIDExNiwxMTcsMTE0LDExMCwxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsCisgICAgMTA1LDExNSwxMTYsNDUsMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAorICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSwKKyAgICA5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCw5NSwKKyAgICAxMTUsMTEyLDEwMSw5OSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwzLDExNCwxMywxLDAsCisgICAgMCwxMTQsMTY5LDAsMCwwLDExNCwyMjAsMCwwLDAsNDEsMywxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNjUsMCwwLDAsCisgICAgMjA3LDcsMCwwLDExNSw4LDAsMCwwLDAsNywxNSwxLDEyLDEsMTAsCisgICAgMSwxMjIsMjIsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LAorICAgIDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSw2LDAsMCwwLDAsMCwKKyAgICAwLDAsNywwLDAsMCw3LDAsMCwwLDY3LDAsMCwwLDExNSw0MCwKKyAgICAwLDAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSwKKyAgICA2LDAsMTE2LDAsMCwxMjQsMiwwLDEyNCwzLDAsMTAwLDEsMCwxMjQsNiwKKyAgICAwLDEwMCwyLDAsMTI0LDQsMCwxMzEsMiwyLDgzLDQxLDMsNzgsMTE0LDE2OSwKKyAgICAwLDAsMCwxMTQsMjIwLDAsMCwwLDQxLDEsMTE0LDIzOSwwLDAsMCw0MSwKKyAgICA3LDExNCw3MSwwLDAsMCwxMTQsMjQzLDAsMCwwLDExNCwxNTgsMCwwLDAsCisgICAgMTE0LDM1LDAsMCwwLDExNCwyMjgsMCwwLDAsMTE0LDEyLDEsMCwwLDExNCwKKyAgICAxNjksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDg1LDEsMCwwLDIxOSw3LDAsMCwxMTUsNiwwLDAsCisgICAgMCwwLDEsMTUsMSwxOCwxLDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDc4LDk5LDMsCisgICAgMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwxNSwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMjQwLDEsMCwwLDEwMCwxLDAsMTI1LDMsMCwxMjQsMSwKKyAgICAwLDEwNiwwLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwzLDAsMjUsMTI1LDQsCisgICAgMCwxMjEsMzQsMCwxMTYsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMTIsNDksMCwKKyAgICAxMTYsMywwLDEwNiw0LDAsMTMxLDAsMCwxMzEsMSwwLDEwNiw1LDAsMTI1LAorICAgIDUsMCw4NywxMTAsMjQsMCw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDg1LDAsCisgICAgMSwxLDEsMTAwLDEwLDAsMTI1LDUsMCw4OSwxMTAsMSwwLDg4LDEyNCw1LAorICAgIDAsMTI0LDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDEyMywwLDEyNCwwLDAsCisgICAgMTA2LDgsMCwxMzEsMCwwLDEsMTI0LDUsMCwxMjQsMCwwLDk1LDcsMCwKKyAgICAxMTAsMCwwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTU2LDAsMTI0LDAsMCwxMDYsCisgICAgMTAsMCwxMjUsNiwwLDEyNCw0LDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNywKKyAgICAwLDExMCwxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDYsMCwxMjQsNCwwLAorICAgIDEyNSw3LDAsMTI0LDcsMCwxMjQsNiwwLDEwNyw2LDAsMTE0LDUxLDEsMTE2LAorICAgIDEzLDAsMTI0LDAsMCwxMDYsMiwwLDEyNCw0LDAsMTMxLDIsMCwxMjUsOCwKKyAgICAwLDEyMCwxMDMsMCwxMjQsMCwwLDEwNiwxNCwwLDY4LDkzLDc3LDAsOTIsMiwKKyAgICAwLDEyNSw5LDAsMTI1LDEwLDAsMTAwLDUsMCwxMjQsOSwwLDIzLDEyNSwxMSwKKyAgICAwLDExNiwxMywwLDEyNCw4LDAsMTI0LDExLDAsMTMxLDIsMCwxMjUsMTIsMCwKKyAgICAxMTYsMTUsMCwxMjQsMTIsMCwxMzEsMSwwLDExNCwyMTEsMCwxMjQsMCwwLDEwNiwKKyAgICAxNiwwLDEyNCwxMCwwLDEyNCwxLDAsMTI0LDEyLDAsMTI0LDgsMCwxMDMsMSwKKyAgICAwLDEyNCwyLDAsMTMxLDUsMCw4MywxMTMsMjExLDAsODcsMTE2LDE3LDAsMTI0LAorICAgIDgsMCwxMzEsMSwwLDEyNSwzLDAsMTEwLDAsMCwxMjAsMTI2LDAsMTI0LDAsCisgICAgMCwxMDYsMTQsMCw2OCw5MywxMTUsMCw5MiwyLDAsMTI1LDksMCwxMjUsMTAsCisgICAgMCwxMTYsMTMsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDQsMCwxMjQsOSwwLAorICAgIDIzLDEzMSwyLDAsMTI1LDEyLDAsMTE2LDE4LDAsMTAwLDYsMCwxMDYsMTksMCwKKyAgICAxMjQsMTIsMCwxMzEsMSwwLDEwMCw3LDAsMTAwLDMsMCwxMzEsMSwxLDEsCisgICAgMTI0LDcsMCwxMjQsOSwwLDIzLDEyNCw2LDAsMTA3LDYsMCwxMTQsNjEsMSwKKyAgICAxMTYsMTUsMCwxMjQsMTIsMCwxMzEsMSwwLDExNCwxNzYsMSwxMjQsMCwwLDEwNiwKKyAgICAxNiwwLDEyNCwxMCwwLDEyNCwxLDAsMTI0LDEyLDAsMTAwLDgsMCwxMjQsMiwKKyAgICAwLDEzMSw1LDAsODMsMTEzLDYxLDEsMTEzLDYxLDEsODcsMTI0LDMsMCwxMTQsCisgICAgMjM2LDEsMTE2LDE4LDAsMTAwLDksMCwxMDYsMTksMCwxMjQsOCwwLDEzMSwxLAorICAgIDAsMTMxLDEsMCwxLDExNiwyMCwwLDEyNCwxLDAsMTAwLDgsMCwxMzEsMiwKKyAgICAwLDEyNSwxMywwLDEyNCw4LDAsMTAzLDEsMCwxMjQsMTMsMCw5NSwyMSwwLAorICAgIDEyNCwxMywwLDgzLDEwMCw4LDAsODMsNDEsMTEsMTIyLDEyNSw4NCwxMTQsMTIxLDMyLAorICAgIDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsCisgICAgMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTEsMTE0LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTIsMTExLDExNCwxMTYsCisgICAgMTA1LDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDQwLDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LDQ1LDExMSwxMDIsNDUsMTEyLAorICAgIDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0Niw3MCwxMTQsMTE2LDAsMCwwLDExNCwKKyAgICAxMTUsMCwwLDAsMTE0LDI5LDAsMCwwLDExNCw3MiwwLDAsMCwxMjIsOSwKKyAgICAxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNCwxNDUsMCwwLDAsNzgsMTIyLAorICAgIDI1LDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLAorICAgIDk3LDk5LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDExNCwxMzgsMCwwLDAsNDEsCisgICAgMjIsMTE0LDMyLDAsMCwwLDExNCwzOSwwLDAsMCwxMTQsMzUsMCwwLDAsCisgICAgMTE0LDMsMCwwLDAsMTE0LDQ1LDAsMCwwLDExNCw1MywxLDAsMCwxMTQsCisgICAgNDAsMCwwLDAsMTE0LDg4LDEsMCwwLDIxOCwxMSw5NSwxMDIsMTA1LDEwOCwxMDgsCisgICAgOTUsOTksOTcsOTksMTA0LDEwMSwxMTQsNiwwLDAsMCwxMTQsOTEsMSwwLDAsCisgICAgMTE0LDEzOSwwLDAsMCwxMTQsOTAsMSwwLDAsMTE0LDI4LDAsMCwwLDExNCwKKyAgICA4NywxLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDg1LDEsMCwwLDExNCw0NiwKKyAgICAwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMjE2LDAsCisgICAgMCwwLDExNCwyMjAsMCwwLDAsNDEsMTQsMTE0LDcxLDAsMCwwLDExNCwxNTgsCisgICAgMCwwLDAsMTE0LDEyLDEsMCwwLDkwLDEyLDEwNSwxMTUsOTUsMTEwLDk3LDEwOSwKKyAgICAxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTAsMTEsMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE0LDE4MywwLDAsMCw5MCw1LDk5LDk3LDk5LDEwNCwxMDEsOTAsCisgICAgMTIsOTksOTcsOTksMTA0LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCw5LDk4LAorICAgIDk3LDExNSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDU3LDEsMCwwLDExNCwyNDMsMCwKKyAgICAwLDAsOTAsMTMsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LAorICAgIDEwMSw5MCw5LDEwMiwxMTcsMTA4LDEwOCw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTc3LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwxMywxLDAsMCwyMjQsNywwLDAsMTE1LDY4LDAsMCwwLDAsMywKKyAgICA2LDEsMTksMSwzLDEsMzQsMSwxMywxLDExLDEsMTUsMSwxMCwxLAorICAgIDEyLDIsOSwxLDksMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLAorICAgIDIyLDEsMTAsMSwxNSwxLDEyLDEsMzIsNCwxNSwyLDIyLDEsMjIsMSwKKyAgICAyNSwxLDE2LDEsMTIsMSwzMiwxLDYsMSwxOSwxLDE1LDEsMTIsMSwKKyAgICA0LDEsMTIyLDIwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLAorICAgIDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCw5LDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwxNCwxLAorICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsMzEsMCwxMTYsMSwKKyAgICAwLDEwNiwyLDAsMTI0LDEsMCwxMTIsMzMsMCwxMTYsMSwwLDEwNiwzLDAsCisgICAgMTMxLDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLDAsNCwxMTYsNCwKKyAgICAwLDExNiw1LDAsMTE2LDYsMCwxMDIsMywwLDEwNywxMCwwLDExNCw3NSwwLAorICAgIDEsMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LDExNiw3LAorICAgIDAsMTA2LDgsMCwxMDYsOSwwLDEwMCwxLDAsMTMxLDEsMCwxMTUsMTEyLDAsCisgICAgMTE2LDEwLDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMTEsMCwxMTAsCisgICAgMTExLDAsMTE2LDEwLDAsMTMxLDAsMCwxMjUsMywwLDEyMCw5MCwwLDEyNCwyLAorICAgIDAsNjgsOTMsODIsMCwxMjUsNCwwLDEyNCw0LDAsMTA2LDEyLDAsMTAwLDIsCisgICAgMCwxMzEsMSwwLDkyLDMsMCwxMjUsNSwwLDEyNSw2LDAsMTI1LDcsMCwKKyAgICAxMjQsNiwwLDExNCwxOTEsMCwxMDAsMywwLDEwNiwxMywwLDEyNCw1LDAsMTI0LAorICAgIDcsMCwxMDYsMTQsMCwxMzEsMCwwLDEzMSwyLDAsMTI1LDgsMCwxMTAsNiwKKyAgICAwLDEyNCw1LDAsMTI1LDgsMCwxMjQsMywwLDEwNiwxNSwwLDEyNCw4LDAsCisgICAgMTMxLDEsMCwxLDExMywxMjgsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMTEsCisgICAgMCwxMTYsNywwLDEwNiw4LDAsMTA2LDksMCwxMTYsMTYsMCwxMzEsMSwwLAorICAgIDExNCwxMCwxLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDEyNCwyLDAsNjgsCisgICAgMTMxLDEsMCwxMjQsMCwwLDk1LDE3LDAsMTEwLDAsMCwxMDAsNiwwLDgzLAorICAgIDQxLDcsMTIyLDY4LDcwLDEwNSwxMDgsMTA4LDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LAorICAgIDEwNCwxMDEsMzIsMTExLDEwMiwzMiwxMTIsMTExLDExNiwxMDEsMTEwLDExNiwxMDUsOTcsMTA4LDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMCwxMDUsCisgICAgMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDYsMTE0LDAsMCwwLDAsMTE0LDExNiwwLAorICAgIDAsMCwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMywwLDAsMCw4MywwLDAsMCwxMTUsMjgsCisgICAgMCwwLDAsMTA0LDAsMCwxMjQsMCwwLDkzLDE4LDAsMTI1LDEsMCwxMjQsCisgICAgMSwwLDEwNiwwLDAsMTMxLDAsMCwxNDYsMiwwLDExMyw2LDAsODMsMTE0LAorICAgIDQsMCwwLDAsNDEsMSwxMTQsMTM5LDAsMCwwLDQxLDIsMTE0LDIyLDAsCisgICAgMCwwLDkwLDIsMTAyLDExMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyNTAsOSw2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2MiwKKyAgICA0Miw4LDAsMCwxMTUsMiwwLDAsMCw5LDAsMTIyLDQxLDcwLDEwNSwxMDgsCisgICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LAorICAgIDk5LDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDExNSwxMDEsCisgICAgMTE2LDk5LDExMSwxMDksMTEyLDYyLDc4LDQxLDE4LDExNCwzNSwwLDAsMCwxMTQsMywKKyAgICAwLDAsMCw5MCw3LDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LDExNCwxMTQsNDUsMCwwLAorICAgIDAsMjE4LDE3LDcwLDEwNSwxMDgsMTAxLDc4LDExMSwxMTYsNzAsMTExLDExNywxMTAsMTAwLDY5LAorICAgIDExNCwxMTQsMTExLDExNCwyMTgsMTUsODAsMTAxLDExNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsCisgICAgNjksMTE0LDExNCwxMTEsMTE0LDIxOCwxOCw3OCwxMTEsMTE2LDY1LDY4LDEwNSwxMTQsMTAxLDk5LAorICAgIDExNiwxMTEsMTE0LDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDcsMCwwLDAsMTE0LDgsCisgICAgMCwwLDAsMTE0LDksMCwwLDAsMTE0LDg5LDEsMCwwLDExNCw5MCwxLAorICAgIDAsMCwxMTQsMTIxLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMTM5LDAsMCwKKyAgICAwLDIxOCwzLDk3LDEwMCwxMDAsMTE0LDEwLDAsMCwwLDExNCw5MSwxLDAsMCwKKyAgICA0MSw5LDExNCw3MSwwLDAsMCwxMTQsMzUsMCwwLDAsOTAsOCw5OSwxMTEsCisgICAgMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsOTAsMjEsMTA4LDExMSwxMTksMTAxLDExNCw5NSwxMTUsMTE3LAorICAgIDEwMiwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsMTE0LDcxLDEsCisgICAgMCwwLDExNCw2NywwLDAsMCwxMTQsNjUsMSwwLDAsMTE0LDU3LDEsMCwKKyAgICAwLDkwLDgsMTEwLDEwMSwxMTksOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDkzLDEsMCwwLDEzLAorICAgIDgsMCwwLDExNSwzNCwwLDAsMCwwLDIsOSwxLDMsMSwzMSwxLAorICAgIDIyLDMsMTEsMywxOCwxLDE4LDcsOSwxLDEzLDEsMjQsMSw2LDEsCisgICAgMjcsMiw2LDEsMTcsMSw5LDEsMTgsMSwxMjIsMjIsNzAsMTA1LDEwOCwxMDEsCisgICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksCisgICAgMTA0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLAorICAgIDAsMCwwLDcsMCwwLDAsMTE1LDI1LDAsMCwwLDEzNSwwLDAsMTM1LAorICAgIDEsMCwxMDIsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwyLAorICAgIDAsMTI0LDIsMCw4Myw0MSwzLDk3LDIwLDEsMCwwLDY1LDMyLDk5LDEwOCwKKyAgICA5NywxMTUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwKKyAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsOTksMTA4LDExMSwxMTUsMTE3LAorICAgIDExNCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LAorICAgIDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDExNCwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwKKyAgICAzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwKKyAgICAxMDIsMTA1LDEwMSwxMDAsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMzIsOTcsMTEwLDEwMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICA5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsCisgICAgMTA4LDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDExMSwxMTUsCisgICAgMTE3LDExNCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDAsMTA1LDExNCwKKyAgICAxMDEsOTksMTE2LDExMSwxMTQsMTIxLDQ0LDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LAorICAgIDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LAorICAgIDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwKKyAgICAwLDE5LDAsMCwwLDExNSw0NiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsCisgICAgMTMxLDEsMCwxMTUsMzMsMCwxMTYsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMjQsCisgICAgMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsCisgICAgMCwxMzYsMSwwLDE0MCwxLDAsODMsNDEsMywxMjIsNDUsODAsOTcsMTE2LDEwNCwKKyAgICAzMiwxMDQsMTExLDExMSwxMDcsMzIsMTAyLDExMSwxMTQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTA4LDEwNSw5OCw0NiwxMDksOTcsOTksMTA0LDEwNSwxMTAsMTAxLDExNCwxMjEsNDYsNzAsMTA1LAorICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMjIsMzAsMTExLDExMCwxMDgsMTIxLDMyLAorICAgIDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMDUsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLAorICAgIDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDExNCwzNSwwLDAsMCw0MSwyLAorICAgIDExNCw0NiwwLDAsMCwxMTQsMTUzLDAsMCwwLDQxLDEsMTE0LDM1LDAsMCwKKyAgICAwLDQxLDIsMTE0LDExLDEsMCwwLDExNCw5MiwxLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMjQsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwKKyAgICAxMTEsMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsNTQsOCwwLDAsMTE1LDYsMCwwLDAsMCwyLDEyLDEsMjEsMSwKKyAgICAxMjIsNTQsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMDQsMTExLDExMSwxMDcsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsCisgICAgMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDQxLDMsMTE0LAorICAgIDExLDEsMCwwLDExNCw5MiwxLDAsMCwxMTQsOTksMSwwLDAsMTE0LDQsCisgICAgMCwwLDAsNDEsMiwxMTQsMTEsMSwwLDAsMTE0LDkyLDEsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCw5LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw0NCwKKyAgICA4LDAsMCwxMTUsNCwwLDAsMCwwLDEwLDIxLDYsMTIyLDIwLDcwLDEwNSwKKyAgICAxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwKKyAgICAxMTEsMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LAorICAgIDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwKKyAgICAxNiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDEyMywzMywxMTQsMTI1LAorICAgIDQxLDQxLDIsMTE0LDQ3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSwxLDExNCwKKyAgICA3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMTAxLDAsMCwwLDYyLDgsMCwwLDExNSwyLDAsMCwKKyAgICAwLDAsMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwKKyAgICA5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsNDEsMTUsMTE0LDU3LDAsMCwwLDExNCwKKyAgICA1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3MiwKKyAgICAwLDAsMCwxMTQsNzQsMSwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsMTQsMSwKKyAgICAwLDAsMTE0LDE2NSwwLDAsMCwxMTQsODUsMSwwLDAsMTE0LDEzLDEsMCwKKyAgICAwLDExNCw5MywxLDAsMCwxMTQsMTgsMSwwLDAsMTE0LDEwMCwxLDAsMCwKKyAgICAxMTQsMTAxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw4NiwxLDAsMCwxNzgsNywKKyAgICAwLDAsMTE1LDIwLDAsMCwwLDEyLDcsNiwyLDEyLDE0LDEyLDQsNiwKKyAgICAyLDEyLDEyLDEyLDUsMTUsNDUsMTIsMzEsMTgsMTgsMTE0LDg2LDEsMCwwLAorICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDQ2LDAsMCwwLDEwMSwwLDAsOTAsMSwwLAorICAgIDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLAorICAgIDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsCisgICAgMCw5MCw1LDAsMTAwLDYsMCw4Myw0MSw3LDIxOCwxOCw5NSw3MywxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTIyLDM2LAorICAgIDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDMyLDEwOSw5NywxMTAsOTcsMTAzLDEwMSwxMTQsMzIsCisgICAgMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LAorICAgIDExMSw5OSwxMDcsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAorICAgIDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsCisgICAgMCwxMDYsMSwwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLDQxLDIsMTIyLDI0LAorICAgIDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDEsMiwxMTQsMTA2LDAsMCwwLAorICAgIDExNCwzLDEsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NSwwLDAsMCwKKyAgICA3Miw4LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDI4LDk1LDczLDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiw0NiwKKyAgICA5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDk5LDQsMCwwLDAsMCwwLAorICAgIDAsMCw0LDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDE0LAorICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEsMTAwLDEsMCwKKyAgICA4Myw0MSwyLDEyMiw2MCw4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNCwxMDEsMTAzLAorICAgIDk3LDExNCwxMDAsMTA4LDEwMSwxMTUsMTE1LDMyLDExMSwxMDIsMzIsOTcsMTEwLDEyMSwzMiwxMTQsCisgICAgOTcsMTA1LDExNSwxMDEsMTAwLDMyLDEwMSwxMjAsOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsMTE1LAorICAgIDQ2LDc4LDQxLDIsMTE0LDEwNiwwLDAsMCwxMTQsMTA3LDAsMCwwLDQxLDQsCisgICAgMTE0LDcxLDAsMCwwLDkwLDgsMTAxLDEyMCw5OSw5NSwxMTYsMTIxLDExMiwxMDEsOTAsCisgICAgOSwxMDEsMTIwLDk5LDk1LDExOCw5NywxMDgsMTE3LDEwMSw5MCwxMywxMDEsMTIwLDk5LDk1LAorICAgIDExNiwxMTQsOTcsOTksMTAxLDk4LDk3LDk5LDEwNywxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsODEsMCwwLDAsNzYsOCwwLAorICAgIDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyNyw5NSw3MywxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLAorICAgIDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDYsMTE0LDU3LDAsMCwwLDExNCw1NiwwLAorICAgIDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3NSwwLDAsCisgICAgMCwxMTQsODEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwxLDAsMCw2OCwKKyAgICA4LDAsMCwxMTUsNiwwLDAsMCwxMiwyLDYsMiwxMiw0LDExNCwxMDEsCisgICAgMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCiAgICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsOTEsMCwwLDAsMTI0LDEsMCwKICAgICAxMDYsMCwwLDEwMCwxLDAsMTI0LDIsMCwxMDAsMiwwLDI0LDEzMSwyLDAsCiAgICAgMTI1LDMsMCwxMTYsMSwwLDEyNCwzLDAsMTMxLDEsMCwxMjQsMiwwLDEwNywKICAgICAwLDAsMTE0LDU1LDAsMTE2LDIsMCwxMDAsMywwLDEzMSwxLDAsMTMwLDEsCiAgICAgMCwxMTAsMCwwLDEyNCwzLDAsMTAwLDQsMCwyNSwxMjUsNCwwLDEyNCwwLAogICAgIDAsMTE0LDg3LDAsMTAwLDUsMCwxMDYsMywwLDEyNCw0LDAsMTI0LDAsMCwKLSAgICAxMzEsMiwwLDgzLDEyNCw0LDAsODMsNDAsNiwwLDAsMCwxMTcsNTAsMCwKLSAgICAwLDAsODIsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsMzIsOTcsMzIsMTE0LDEwMSwxMDgsOTcsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLAotICAgIDMyLDExNiwxMTEsMzIsOTcsMTEwLDMyLDk3LDk4LDExNSwxMTEsMTA4LDExNywxMTYsMTAxLDMyLAotICAgIDExMSwxMTAsMTAxLDQ2LDExNywxLDAsMCwwLDQ2LDEwNSwxLDAsMCwwLDExNywKLSAgICA1MCwwLDAsMCw5NywxMTYsMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsMTAwLDMyLDExNCwxMDEsCi0gICAgMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5OCwxMDEsCi0gICAgMTIxLDExMSwxMTAsMTAwLDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDEwNSwwLDAsMCwwLDExNyw1LDAsMCwwLAotICAgIDEyMywxMjUsNDYsMTIzLDEyNSw0MCw0LDAsMCwwLDExNyw2LDAsMCwwLDExNCwKLSAgICAxMTUsMTEyLDEwOCwxMDUsMTE2LDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywxMCwwLAotICAgIDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLAotICAgIDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0MCw1LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwxMTcsNSwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNyw0LDAsMCwwLAotICAgIDk4LDEwNSwxMTYsMTE1LDExNyw0LDAsMCwwLDk4LDk3LDExNSwxMDEsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTMsMCwwLDAsOTUsMTE0LAotICAgIDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCw5NywxMDksMTAxLDE4Miw1LDAsMCwxMTUsCi0gICAgMTAsMCwwLDAsMCwyLDIyLDEsMTgsMSwxNSwxLDEwLDEsMTE3LDEzLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwxMSwwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsMTM4LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwKLSAgICAxMTUsMjgsMCwxMTYsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwKLSAgICAyLDAsMSwxMTAsMCwwLDEyMCwxMDMsMCwxMTYsMCwwLDEwNiwxLDAsNjgsCi0gICAgOTMsODgsMCwxMjUsMiwwLDExNiw1LDAsMTMxLDAsMCwxNDMsMjMsMCwxLAotICAgIDEyNCwyLDAsMTA2LDYsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwxMjUsCi0gICAgMywwLDg3LDEwMCwyLDAsODEsODgsMTI0LDMsMCwxMDAsMiwwLDEwNyw5LAotICAgIDAsMTE0LDM4LDAsMTI0LDAsMCwxMTYsMCwwLDEwNiw4LDAsMTA3LDcsMCwKLSAgICAxMTQsMTA5LDAsMTI0LDMsMCw4MywxMTYsMCwwLDEwNiw4LDAsMTI0LDAsMCwKLSAgICAyNSwxMDYsOSwwLDgzLDExMywzOCwwLDExMywzOCwwLDg3LDEwMCwyLDAsODMsCi0gICAgMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywyMywwLDAsMCw3MCwxMDUsCi0gICAgMTEwLDEwMCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0NiwxMTcsMjIsMCwwLDAsMTE1LDEyMSwxMTUsNDYsMTA5LDEwMSwKLSAgICAxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMDEsMTA5LDExMiwxMTYsMTIxLAotICAgIDc4LDQwLDEwLDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw5LAotICAgIDAsMCwwLDEwOSwxMDEsMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDExNyw5LDAsMCwKLSAgICAwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsNCwwLDAsMCwxMTksCi0gICAgOTcsMTE0LDExMCwxMTcsMTMsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywKLSAgICAxMTQsMTEwLDEwNSwxMTAsMTAzLDExNywxOCwwLDAsMCw5NSw3MywxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTE3LDExLDAsMCwKLSAgICAwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDIsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDEwMiwKLSAgICAxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTEsNSwwLDAsMTE1LDIwLAotICAgIDAsMCwwLDAsMiw5LDEsMTksMSwxNiwxLDEwLDEsMjQsMSwxMiwKLSAgICAyLDE1LDEsNCwyLDIxLDIsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsMTEwLAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwzLDAsMCwwLDAsMCwwLAotICAgIDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwxOTQsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDExNiwxLDAsMTMxLDIsMCwxMTUsNDUsCi0gICAgMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMTYsNCwwLDEyNCwwLDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwKLSAgICAyLDAsMTAwLDIsMCwxMDcsMCwwLDExNCw3MiwwLDExNiw1LDAsMTAwLDMsCi0gICAgMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMSwwLDExNCwxNTYsMCwKLSAgICAxMTYsMCwwLDEyNCwxLDAsMTE2LDEsMCwxMzEsMiwwLDExNSwxMDgsMCwxMTYsCi0gICAgMiwwLDEwMCw0LDAsMTMxLDEsMCwxMzAsMSwwLDExMywxNTYsMCwxMjQsMSwKLSAgICAwLDExNiw2LDAsMTA2LDcsMCwxMDcsNywwLDExNCwxNTYsMCwxMDAsNSwwLAotICAgIDEyNSwzLDAsMTE2LDgsMCwxMjQsMywwLDEwNiwzLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTEwLDAsMCwxMjQsMCwKLSAgICAwLDEyLDExNCwxOTAsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsMTkwLAotICAgIDAsMTE2LDUsMCwxMDAsNiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEwMCw3LDAsODMsNDAsOCwwLDAsMCwxMTcsMjgsMCwwLDAsODYsMTAxLAotICAgIDExNCwxMDUsMTAyLDEyMSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LAotICAgIDExNCwxMDEsMzIsMzQsMTE1LDk3LDExMCwxMDEsMzQsNDYsMTE3LDMxLDAsMCwwLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwKLSAgICA5OCwxMDEsMzIsMTE1LDExNiwxMTQsNDQsMzIsMTEwLDExMSwxMTYsMzIsMTIzLDEyNSwxMDUsMCwKLSAgICAwLDAsMCwxMTcsMTgsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTE3LAotICAgIDExNSwxMTYsMzIsOTgsMTAxLDMyLDYyLDYxLDMyLDQ4LDExNywzMSwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTEwLDExMSwxMTYsMzIsMTE1LAotICAgIDEwMSwxMTYsMzIsMTE2LDExMSwzMiw5NywzMiwxMTUsMTE2LDExNCwxMDUsMTEwLDEwMywxMTcsNjEsCi0gICAgMCwwLDAsODAsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDEzMSwyLDAsODMsMTI0LDQsMCw4Myw0MSw2LDEyMiw1MCw4MiwxMDEsMTE1LDExMSwKKyAgICAxMDgsMTE4LDEwMSwzMiw5NywzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTE2LDExMSwzMiw5NywxMTAsCisgICAgMzIsOTcsOTgsMTE1LDExMSwxMDgsMTE3LDExNiwxMDEsMzIsMTExLDExMCwxMDEsNDYsMTE0LDExNiwKKyAgICAwLDAsMCwxMTQsMjksMCwwLDAsMTIyLDUwLDk3LDExNiwxMTYsMTAxLDEwOSwxMTIsCisgICAgMTE2LDEwMSwxMDAsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDMyLDk4LDEwMSwxMjEsMTExLDExMCwxMDAsMzIsMTE2LDExMSwxMTIsNDUsMTA4LAorICAgIDEwMSwxMTgsMTAxLDEwOCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE0LDg0LDAsMCwKKyAgICAwLDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSw0MSw0LDExNCwzNCwwLDAsMCwxMTQsCisgICAgMzEsMCwwLDAsMTE0LDEzMywwLDAsMCwxMTQsNDcsMCwwLDAsNDEsNSwKKyAgICAxMTQsNjcsMCwwLDAsMjE4LDcsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDIxOCw1LAorICAgIDEwOCwxMDEsMTE4LDEwMSwxMDgsOTAsNCw5OCwxMDUsMTE2LDExNSw5MCw0LDk4LDk3LDExNSwKKyAgICAxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDEzLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSw4MSwKKyAgICA4LDAsMCwxMTUsMTAsMCwwLDAsMCwyLDIyLDEsMTgsMSwxNSwxLAorICAgIDEwLDEsMTE0LDEwNCwxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsCisgICAgNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0NywwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsCisgICAgMTI1LDMsMCwxMjQsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMzQsMCwxMDAsCisgICAgMCwwLDgzLDExNiwxLDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsCisgICAgNDEsMSw3OCw0MSwyLDExNCwxNCwxLDAsMCwxMTQsMTczLDAsMCwwLDQxLAorICAgIDQsMTE0LDc3LDEsMCwwLDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsCisgICAgMTE0LDE2OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsMTcsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LAorICAgIDk1LDEwOCwxMDEsMTAzLDk3LDk5LDEyMSw5MCw4LDAsMCwxMTUsOCwwLDAsMCwKKyAgICAwLDMsMTgsMSwxMiwxLDQsMSwxMTQsMTA1LDEsMCwwLDk5LDMsMCwKKyAgICAwLDAsMCwwLDAsMCw5LDAsMCwwLDI3LDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwzNCwxLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTE1LDI4LDAsCisgICAgMTE2LDIsMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsMiwwLDEsCisgICAgMTEwLDAsMCwxMjQsMCwwLDExNiwwLDAsMTA2LDUsMCwxMDcsNiwwLDEyNSwKKyAgICAzLDAsMTIwLDI0MCwwLDExNiwwLDAsMTA2LDEsMCw2OCw5MywyMjUsMCwxMjUsCisgICAgNCwwLDExNiw2LDAsMTMxLDAsMCwxNDMsOTMsMCwxLDEyMSwxMywwLDEyNCwKKyAgICA0LDAsMTA2LDcsMCwxMjUsNSwwLDg3LDExMCw1NCwwLDQsMTE2LDgsMCwKKyAgICAxMDcsMTAsMCwxMTQsMTM4LDAsMSwxLDEsMTE2LDksMCwxMjQsNCwwLDEyNCwKKyAgICAwLDAsMTI0LDEsMCwxMzEsMywwLDEyNSw2LDAsMTI0LDYsMCwxMDAsMiwKKyAgICAwLDEwNyw4LDAsMTE0LDEzNCwwLDExOSw1MywwLDExMCwwLDAsODksMTEwLDE5LAorICAgIDAsODgsMTI0LDUsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMywKKyAgICAwLDEyNSw2LDAsODcsMTAwLDIsMCw4MSw4OCwxMjQsNiwwLDEwMCwyLDAsCisgICAgMTA3LDksMCwxMTQsNTMsMCwxMjQsMywwLDEyLDExNCwxNSwxLDEyNCwwLDAsCisgICAgMTE2LDAsMCwxMDYsNSwwLDEwNyw2LDAsMTE0LDE1LDEsMTE2LDAsMCwxMDYsCisgICAgNSwwLDEyNCwwLDAsMjUsMTI1LDcsMCwxMjEsMTMsMCwxMjQsNywwLDEwNiwKKyAgICAxMCwwLDEyNSw4LDAsODcsMTEwLDIyLDAsNCwxMTYsOCwwLDEwNywxMCwwLAorICAgIDExNCwyNDcsMCwxLDEsMSwxMjQsNiwwLDgzLDg5LDExMywxOSwxLDg4LDEyNCwKKyAgICA4LDAsMTAwLDIsMCwxMDcsOCwwLDExNCw4LDEsMTI0LDYsMCw4MywxMjQsCisgICAgOCwwLDgzLDExMywyMiwxLDEyNCw2LDAsODMsMTEzLDUzLDAsMTEzLDUzLDAsCisgICAgODcsMTAwLDIsMCw4MywxMDAsMiwwLDgzLDQxLDMsMTIyLDIzLDcwLDEwNSwxMTAsCisgICAgMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMDgsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDEyMiwyMiwxMTUsMTIxLDExNSw0NiwxMDksMTAxLDExNiw5Nyw5NSwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsNDEsMTEsMTE0LAorICAgIDcsMCwwLDAsMjE4LDksMTA5LDEwMSwxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE0LAorICAgIDE2NiwwLDAsMCwxMTQsMTY3LDAsMCwwLDExNCwxNjgsMCwwLDAsMTE0LDczLAorICAgIDAsMCwwLDExNCwxMDEsMSwwLDAsMTE0LDEzLDEsMCwwLDExNCwyMDksMCwKKyAgICAwLDAsMTE0LDEwNSwxLDAsMCwxMTQsMjA4LDAsMCwwLDQxLDksMTE0LDY3LAorICAgIDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTIsMSwwLDAsOTAsOSwxMDUsCisgICAgMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE0LDc3LDEsMCwwLDExNCwxMywxLAorICAgIDAsMCwxMTQsMTc3LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDIwOCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDgsMCwwLAorICAgIDExNSw0OCwwLDAsMCwwLDIsOSwxLDE5LDQsMTUsMSwxNiwxLDEwLAorICAgIDEsMywxLDEzLDEsMTMsMSwxOCwxLDEyLDEsMTEsMiwyNCwxLDEyLAorICAgIDIsMjIsMSwxMywxLDMsMSwxMywxLDEzLDQsOSwyLDEyLDEsNCwKKyAgICAyLDcsMiwxMSwyLDExNCwxMDcsMSwwLDAsOTksMywwLDAsMCwwLAorICAgIDAsMCwwLDQsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTk0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEzMSwyLDAsCisgICAgMTE1LDQ1LDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMjQsCisgICAgMCwwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsCisgICAgMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDAsMCwxMTQsNzIsMCwxMTYsNSwwLAorICAgIDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDEsMCwxMTQsCisgICAgMTU2LDAsMTE2LDAsMCwxMjQsMSwwLDExNiwxLDAsMTMxLDIsMCwxMTUsMTA4LAorICAgIDAsMTE2LDIsMCwxMDAsNCwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsCisgICAgMTI0LDEsMCwxMTYsNiwwLDEwNiw3LDAsMTA3LDcsMCwxMTQsMTU2LDAsMTAwLAorICAgIDUsMCwxMjUsMywwLDExNiw4LDAsMTI0LDMsMCwxMDYsMywwLDEyNCwxLAorICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEzLDE1NiwwLDExMCwwLDAsCisgICAgMTI0LDAsMCwxMiwxMTQsMTkwLDAsMTI0LDIsMCwxMDAsMiwwLDEwNywyLDAsCisgICAgMTE0LDE5MCwwLDExNiw1LDAsMTAwLDYsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLAorICAgIDAsMCwxMDAsNywwLDgzLDQxLDgsMTIyLDI4LDg2LDEwMSwxMTQsMTA1LDEwMiwxMjEsCisgICAgMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDM0LAorICAgIDExNSw5NywxMTAsMTAxLDM0LDQ2LDEyMiwzMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsCisgICAgOTcsMTA5LDEwMSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDExNSwxMTYsMTE0LDQ0LAorICAgIDMyLDExMCwxMTEsMTE2LDMyLDEyMywxMjUsMTE0LDg0LDAsMCwwLDEyMiwxOCwxMDgsMTAxLAorICAgIDExOCwxMDEsMTA4LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsMzIsNDgsCisgICAgMTIyLDMxLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTAsMTExLAorICAgIDExNiwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsCisgICAgMTAzLDEyMiw2MSw4MCw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCiAgICAgMzIsMTIzLDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwKICAgICA0NCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LAogICAgIDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMTcsMTcsMCwwLDAsNjksMTA5LDExMiwxMTYsMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDc4LDQwLDksMCwwLDAsMTE3LDEwLDAsMCwKLSAgICAwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDMsMCwwLDAsCi0gICAgMTE1LDExNiwxMTQsMTE3LDksMCwwLDAsODQsMTIxLDExMiwxMDEsNjksMTE0LDExNCwxMTEsCi0gICAgMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDQsMCwwLAotICAgIDAsMTE2LDEyMSwxMTIsMTAxLDExNywxMCwwLDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywxMSwwLDAsMCw4MywxMjEsMTE1LAotICAgIDExNiwxMDEsMTA5LDY5LDExNCwxMTQsMTExLDExNCw0MCw0LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSwxMTcsNSwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNywzLDAsMCwKLSAgICAwLDEwOSwxMTUsMTAzLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsOTksMTA0LDEwMSwKLSAgICA5OSwxMDcsMjA4LDUsMCwwLDExNSwyNCwwLDAsMCwwLDIsMTUsMSwzMCwKLSAgICAxLDEyLDEsMTUsMSw2LDEsMTUsMSwxNSwxLDE1LDEsNiwyLDI3LAotICAgIDEsMTksMSwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSwKLSAgICA5OSwxMDQsMTAxLDk5LDEwNywxMTcsMjAsMCwwLDAsNzgsMTExLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMjMsMzMsMTE0LDEyNSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwyNywwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMTIsMiwwLDAsMTAwLDAsMCwxMjUsMiwwLDEyNCwwLAotICAgIDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjUsMywKLSAgICAwLDEyNCwzLDAsMTE0LDE3OCwwLDEyNCwzLDAsMTE2LDIsMCwxMDYsMywwLAotICAgIDEwNyw3LDAsMTE0LDYyLDAsMTE2LDQsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLAotICAgIDIsMCwxLDExMCwwLDAsMTI0LDAsMCwxMTYsMiwwLDEwNiwzLDAsMTA3LAotICAgIDYsMCwxMTQsODgsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDAsMCwyNSw4MywKLSAgICAxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwyNSwxMjUsNCwwLDEyMSwxMywwLAotICAgIDEyNCw0LDAsMTA2LDUsMCwxMjUsMiwwLDg3LDExMywxNzgsMCw0LDExNiw2LAotICAgIDAsMTA3LDEwLDAsMTE0LDE3NCwwLDEsMSwxLDExNiw3LDAsMTAwLDMsMCwKLSAgICAyMywxMDYsOCwwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw1LDAsCi0gICAgMTE2LDksMCwxMjQsNSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwKLSAgICAxLDAsODksMTEzLDE3OCwwLDg4LDExMCwwLDAsMTE2LDEwLDAsMTI0LDAsMCwKLSAgICAxMjQsMiwwLDEzMSwyLDAsMTI1LDYsMCwxMjQsNiwwLDEwMCwwLDAsMTA3LAotICAgIDgsMCwxMTQsMjUwLDAsMTE2LDksMCwxMTYsNywwLDEwNiw4LDAsMTI0LDAsCi0gICAgMCwxMzEsMSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsMSwxLDEyNSw3LDAsCi0gICAgMTAwLDEwLDAsMTI0LDcsMCw5NSwxMiwwLDEyNCw3LDAsMTMwLDEsMCwxMTAsCi0gICAgNDcsMCwxMjQsMCwwLDExNiwyLDAsMTA2LDMsMCwxMDcsNywwLDExNCw0MSwKLSAgICAxLDEyNCw2LDAsMTA2LDEzLDAsMTI0LDAsMCwxMzEsMSwwLDEsMTE2LDE0LAotICAgIDAsMTAwLDUsMCwxMjQsMCwwLDEyNCw2LDAsMTMxLDMsMCwxLDExMCwwLAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEyNCwwLDAsMjUsMTI1LDgsMCwxMjQsMywKLSAgICAwLDExNCwxMDUsMSwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwyNSwxMjUsNCwKLSAgICAwLDExNiwxNSwwLDEyNCw0LDAsMTI0LDAsMCwxMDYsMSwwLDEwMCwxLDAsCi0gICAgMTMxLDEsMCwxMDAsNiwwLDI1LDEyNCw4LDAsMTMxLDMsMCwxLDExMCwwLAotICAgIDAsMTE2LDE2LDAsMTI0LDgsMCwxMDAsNywwLDEwMCwwLDAsMTMxLDMsMCwKLSAgICAxMDAsMCwwLDEwNyw4LDAsMTE0LDIxMiwxLDEyMSw1OSwwLDEyNCw4LDAsMTA2LAotICAgIDE3LDAsMTI0LDgsMCw5NSwxOCwwLDExNiwxOSwwLDEyNCw4LDAsMTAwLDgsCi0gICAgMCwxMzEsMiwwLDExNSwxODcsMSwxMjQsOCwwLDEwNiwxOCwwLDEwNiwxLDAsCi0gICAgMTAwLDEsMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI0LDgsMCw5NSwxOCwwLAotICAgIDExMCwwLDAsODcsMTEzLDIxMiwxLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMjA4LAotICAgIDEsMSwxLDEsODksMTEzLDIxMiwxLDg4LDExMCwwLDAsMTE2LDE5LDAsMTI0LAotICAgIDgsMCwxMDAsOSwwLDEzMSwyLDAsMTE1LDgsMiwxMjEsMTMsMCwxMjQsNiwKLSAgICAwLDEyNCw4LDAsOTUsMjAsMCw4NywxMTMsOCwyLDQsMTE2LDYsMCwxMDcsCi0gICAgMTAsMCwxMTQsNCwyLDEsMSwxLDg5LDExMyw4LDIsODgsMTEwLDAsMCwKLSAgICAxMjQsOCwwLDgzLDQwLDExLDAsMCwwLDc4LDExNywxLDAsMCwwLDQ2LAotICAgIDEwNSwwLDAsMCwwLDExNywyMSwwLDAsMCw1OSwzMiwxMjMsMTI1LDMyLDEwNSwKLSAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywxOCwwLDAsMCwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwzMiwxMjMsMzMsMTE0LDEyNSwzMiwzNSwzMiwxMjMsMzMsMTE0LDEyNSwxMDUsCi0gICAgMiwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LAotICAgIDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAotICAgIDg0LDQwLDIxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywKLSAgICAxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMywKLSAgICAwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDExNywxNCwwLAotICAgIDAsMCw2NSwxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNyw4LDAsMCwwLDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLDExNyw2LDAsCi0gICAgMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMiwwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LAotICAgIDExNywxMDEsMTE3LDEwLDAsMCwwLDk1LDExMCwxMTEsMTE2LDk1LDEwMiwxMTEsMTE3LDExMCwKLSAgICAxMDAsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksCi0gICAgMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMTUsMTAxLDExNiw5NywxMTYsCi0gICAgMTE2LDExNCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNyw3LDAsMCwwLAotICAgIDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTUsOTUsNDAsOSwwLDAsMCwxMTcsNCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDExNywxMywwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywzLDAsMCwwLDEwOSwxMTUsMTAzLDExNyw2LAotICAgIDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDMsMCwwLDAsMTAxLDEyMCwKLSAgICA5OSwxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMywwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsCi0gICAgOTksMTA3LDEwMSwxMDAsMjI3LDUsMCwwLDExNSw3NiwwLDAsMCwwLDEsNiwKLSAgICAxLDE5LDEsNiwxLDE1LDEsMTYsMiwxNSwxLDExLDIsMTMsMSwzLAotICAgIDEsMTMsMSwxMywxLDIyLDEsMjYsMSwxNSwxLDEyLDEsMjcsMyw5LAotICAgIDEsOSwxLDE1LDIsMTMsMSwxOSwyLDEzLDEsNiwyLDEzLDEsMzIsCi0gICAgMiwyNCwxLDMsMSwxMiwxLDE1LDEsMzIsMSwxMywxLDgsMiwxNSwKLSAgICAxLDMsMSwxMywxLDEzLDEsOCwxLDExNywyMywwLDAsMCw5NSwxMDIsCi0gICAgMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwKLSAgICAxMTEsOTksMTA3LDEwMSwxMDAsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwKLSAgICAwLDAsMTgsMCwwLDAsNjcsMCwwLDAsMTE1LDc1LDAsMCwwLDEyMiwKLSAgICAxNiwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTAwLAotICAgIDEsMCwxMTYsMSwwLDEwNiwyLDAsMTMxLDAsMCwxLDg4LDEyNCwyLDAsCi0gICAgMTA2LDMsMCwxMzEsMCwwLDEsMTIyLDE3LDAsMTE2LDQsMCwxMjQsMCwwLAotICAgIDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMDAsMSwwLDEyNCwyLDAsMTA2LDUsCi0gICAgMCwxMzEsMCwwLDEsODgsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1NCwwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiw5NywxMTAsMTAwLDMyLDEwOCwxMTEsOTcsCi0gICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LDExMCwKLSAgICAxMDAsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDAsNiwwLDAsMCwKLSAgICAxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTA4LDExMSw5OSwxMDcsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLAotICAgIDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNywKLSAgICA3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LDIzLDAsMCwwLAotICAgIDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywKLSAgICAxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsCi0gICAgOTcsMTE1LDEwMSw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDExNyw0LDAsCi0gICAgMCwwLDEwOCwxMTEsOTksMTA3LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE0LDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDIxLDYsMCwwLDExNSwxNCwwLDAsMCwwLDIsCi0gICAgMywxLDE2LDIsMTEsMSwxMCwxLDMsMSwxNywyLDExNywxNCwwLDAsCi0gICAgMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5OSwKLSAgICAzLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwxNzIsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwKLSAgICAxLDAsMTI0LDIsMCwxMzEsMywwLDEsMTI0LDIsMCwxMDAsMSwwLDEwNywKLSAgICA0LDAsMTE0LDQ5LDAsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsCi0gICAgMCwxMzEsMywwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEwNiwzLDAsCi0gICAgMTMxLDAsMCwxLDEyNCwwLDAsMTE2LDQsMCwxMDYsNSwwLDEwNyw3LDAsCi0gICAgMTE0LDg3LDAsMTE2LDYsMCwxMjQsMCwwLDExNiw3LDAsMTMxLDIsMCw4MywKLSAgICAxMTYsNCwwLDEwNiw1LDAsMTI0LDAsMCwyNSwxMjUsMywwLDEyNCwzLDAsCi0gICAgMTAwLDQsMCwxMDcsOCwwLDExNCwxNTgsMCwxMTYsMiwwLDEwNiw5LDAsMTMxLAotICAgIDAsMCwxLDEwMCwyLDAsMTA2LDEwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwKLSAgICA0LDAsMTE2LDExLDAsMTI0LDQsMCwxMDAsMywwLDEyNCwwLDAsMTMxLDEsCi0gICAgMSwxMzAsMSwwLDExMCwwLDAsMTE2LDEyLDAsMTI0LDAsMCwxMzEsMSwwLAotICAgIDEsMTI0LDMsMCw4Myw0MCw1LDAsMCwwLDExNyw1MCwxLDAsMCw3MywKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsOTcsMTE1LDEwMSwKLSAgICAxMDAsMzIsMTExLDExMCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksCi0gICAgOTcsMTA4LDEwOCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywKLSAgICAzMiwxMDksOTcsMTAwLDEwMSwzMiwxMDIsMTE0LDExMSwxMDksNDQsMzIsOTcsMTEwLDEwMCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDk3LDEwMCwxMDYsMTE3LDExNSwxMTYsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAotICAgIDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsCi0gICAgMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDExNCwxMDEsOTcsMTE2LDEwMSwxMTUsMTE2LAotICAgIDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsMTAwLDEwMSwxMTAsMTExLDEwOSwxMDUsMTEwLDk3LAotICAgIDExNiwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDk3LAotICAgIDEwOCwxMDUsMTE2LDEyMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTE2LDExOSwxMDEsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywKLSAgICAxMTAsMTAwLDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDQ2LDMyLDg0LAotICAgIDEwNCwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTAxLDExNSwzMiwxMTUsMTAxLDExNiwKLSAgICAxMTYsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LAotICAgIDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwzMiwxMDAsMTA1LDEwMCwzMiwxMTAsMTExLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDUsMCwwLDAsMCwxMTcsNDAsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMzIsMTExLDEwMiwzMiwxMjMsMTI1LDMyLDEwNCw5NywxMDgsMTE2LDEwMSwxMDAsNTksMzIsCi0gICAgNzgsMTExLDExMCwxMDEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNzgsNDAsMTMsMCwKLSAgICAwLDAsMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsOTksCi0gICAgMTA0LDEwMSw5OSwxMDcsMTE3LDEzLDAsMCwwLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LAotICAgIDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTIsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwxMDgsMTExLDk5LDEwNywKLSAgICAxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTUsMTE3LDE0LDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywKLSAgICAxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLAotICAgIDExNywxMiwwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LAotICAgIDEwNywxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywxMSwwLDAsCi0gICAgMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTksMCwwLAotICAgIDAsOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywKLSAgICAxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsNSwKLSAgICAwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw3LDAsMCwwLDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwMyw5OSwxMDAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzQsNiwwLDAsMTE1LAotICAgIDI4LDAsMCwwLDAsOSwxNiwxLDEyLDEsMjEsMSwxMCwxLDE1LDEsCi0gICAgMTMsMSwxMywxLDEyLDEsMTAsMSw2LDEsOSwxLDIxLDEsMTAsMSwKLSAgICAxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwxNywwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsMjU0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwKLSAgICAxMDAsMSwwLDEzMSwyLDAsMTE0LDI1MCwwLDEwMCwyLDAsMTI0LDEsMCwxMDcsCi0gICAgNiwwLDExNCw4OSwwLDExNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCwxLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDAsMywwLDEzMSwyLDAsMTE0LDg5LDAsMTI0LDEsMCwKLSAgICAxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwwLDEsMTEzLDg5LDAsCi0gICAgMTEwLDAsMCwxMjAsMTU4LDAsMTI0LDEsMCw2OCw5MywxNDcsMCwxMjUsMywwLAotICAgIDExNiwwLDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTE1LDk2LDAsMTAwLAotICAgIDQsMCwxMDYsNSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywwLDEzMSwyLAotICAgIDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNywwLDEyNCwyLDAsMTI0LDQsMCwKLSAgICAxMzEsMiwwLDEsODcsMTEzLDI0MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsCi0gICAgMjM5LDAsMSwxMjUsNSwwLDEsMTIyLDUwLDAsMTE2LDksMCwxMjQsNSwwLAotICAgIDEwMCw1LDAsMTAwLDcsMCwxMzEsMywwLDExNCwyMTgsMCwxMjQsNSwwLDEwNiwKLSAgICAxMSwwLDEyNCw0LDAsMTA3LDIsMCwxMTQsMjE4LDAsMTE5LDk2LDAsMTEzLDIxOCwKLSAgICAwLDExMCwwLDAsMTMwLDAsMCw4Nyw4OSwxMDAsNiwwLDEwMCw2LDAsMTI1LAotICAgIDUsMCwxMjYsNSwwLDg4LDExMywyNDMsMCw4OCwxMTMsOTYsMCwxMTMsOTYsMCwKLSAgICA4NywxMTAsMCwwLDEyNCwwLDAsODMsNDAsOCwwLDAsMCwxMTcsMjM4LDAsCi0gICAgMCwwLDcwLDEwNSwxMDMsMTE3LDExNCwxMDEsMzIsMTExLDExNywxMTYsMzIsMTE5LDEwNCw5NywKLSAgICAxMTYsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMzIsMTE1LDEwNCwxMTEsCi0gICAgMTE3LDEwOCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwzMiwxMTIsOTcsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE2LDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywzMiw5OSw5NywxMDgsMTA4LAotICAgIDk3LDk4LDEwOCwxMDEsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiw5NywxMDcsMTAxLDExNSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsMzIsNzMsMTE2LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDExNywxMTIsMTA4LDEwMSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDk3LDExNSwxMTUsMTE3LDEwOSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDM5LDExNSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwKLSAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTA1LAotICAgIDExNSwzMiwxMDAsMTAxLDExNSwxMDUsMTE0LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDEsMCwKLSAgICAwLDAsNDIsMTE3LDcsMCwwLDAsOTUsOTUsOTcsMTA4LDEwOCw5NSw5NSwxMTcsCi0gICAgNSwwLDAsMCwxMjMsMTI1LDQ2LDEyMywxMjUsMTE3LDEwLDAsMCwwLDk1LDExMCwKLSAgICAxMTEsMTE2LDk1LDEwMiwxMTEsMTE3LDExMCwxMDAsNzgsNzAsNDAsMTIsMCwwLDAsMTE3LAotICAgIDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsNCwwLDAsMCwKLSAgICAxMDgsMTA1LDExNSwxMTYsMTE3LDYsMCwwLDAsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTE3LAotICAgIDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsOTcsMTA4LDEwOCw5NSw5NSwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsCi0gICAgMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywyNSwKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsMTEsMCwwLAotICAgIDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLAotICAgIDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LAotICAgIDExNSwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsNiwwLDAsMCwKLSAgICAxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDk1LDExNywxLDAsMCwwLDEyMCwxMTcsOSwwLDAsMCwxMDIsCi0gICAgMTE0LDExMSwxMDksOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDMsMCwwLDAsMTAxLDEyMCw5OSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsCi0gICAgMCw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwKLSAgICAxMTYsNTgsNiwwLDAsMTE1LDM0LDAsMCwwLDAsMTAsMTUsMSwxMiwxLAotICAgIDEyLDEsMTMsMSwxNSwxLDIyLDEsMTMsMSwxNSwxLDIxLDEsMywxLAotICAgIDE3LDEsMTgsNiwxOCwxLDE1LDEsOSwxLDMyLDEsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw3OCwwLDAsMCwxMjQsMCwwLDEwNiwwLAotICAgIDAsMTAwLDEsMCwxMzEsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDAsNiwwLAotICAgIDEwNyw4LDAsMTE0LDc0LDAsMTI0LDAsMCwxMDAsMiwwLDI1LDEyNSwxLDAsCi0gICAgMTAwLDMsMCwxMjQsMCwwLDEwNyw3LDAsMTE0LDc0LDAsMTI0LDEsMCwxMDYsCi0gICAgMiwwLDEwMCw0LDAsMTMxLDEsMCwxMDAsNSwwLDI1LDEyNSwxLDAsMTEzLAotICAgIDc0LDAsMTEwLDAsMCwxMjQsMSwwLDgzLDQwLDcsMCwwLDAsMTE3LDE2NywKLSAgICAwLDAsMCw2Nyw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDMyLDExOSwxMDQsOTcsCi0gICAgMTE2LDMyLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTUsMTA0LAotICAgIDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTUsOTUsCi0gICAgMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsMTAzLDExNyw5NywxMTQsOTcsMTEwLDExNiwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDk4LAotICAgIDEwMSwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsMzIsMTExLDExNCwzMiw5OSwxMTEsMTE3LAotICAgIDEwOCwxMDAsMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMTEsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsCi0gICAgMTEwLDExNiwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTE2LDExNSwzMiwxMTIsMTE0LDExMSwxMTIsCi0gICAgMTAxLDExNCwzMiwxMTgsOTcsMTA4LDExNywxMDEsMzIsMTA1LDExNSwzMiwxMTcsMTEwLDEwNywxMTAsCi0gICAgMTExLDExOSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE3LDExLDAsMCwwLDk1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSw5NSwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCw3OCwKLSAgICA0MCwzLDAsMCwwLDExNywzLDAsMCwwLDEwMywxMDEsMTE2LDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsCi0gICAgMTA1LDExNiwxMDUsMTExLDExMCw0MCwyLDAsMCwwLDExNyw3LDAsMCwwLDEwMywKLSAgICAxMDgsMTExLDk4LDk3LDEwOCwxMTUsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE3LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTUsOTUsOTIsNiwwLDAsMTE1LDEyLDAsMCwwLDAsNywxNSwKLSAgICAxLDEyLDEsMTAsMSwxMiwxLDI1LDEsMTE3LDE3LDAsMCwwLDk1LDk5LAotICAgIDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsOTksCi0gICAgMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsNTUsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTMxLDAsMCwxMDIsMiwwLDEyNSwwLDAsMTE2LDMsMCwxMTYsNCwKLSAgICAwLDEwMiwyLDAsMTI1LDEsMCwxMTYsNSwwLDExNiw2LDAsMTAyLDIsMCwKLSAgICAxMjUsMiwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEwMywzLDAsODMsCi0gICAgNDAsMSwwLDAsMCwxMTcsOTUsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAxMTUsMzIsOTcsMzIsMTA4LDEwNSwxMTUsMTE2LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDQ1LDk4LDk3LDExNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY5LDk3LDk5LDEwNCwKLSAgICAzMiwxMDUsMTE2LDEwMSwxMDksMzIsMTA1LDExNSwzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLAotICAgIDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsCi0gICAgMTAxLDExNSw0MSw0NiwxMCwzMiwzMiwzMiwzMiw0MCw3LDAsMCwwLDExNywxOSwKLSAgICAwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywKLSAgICAxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTUsMCwwLDAsCi0gICAgODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LAotICAgIDIwLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNywwLDAsMCw2Niw4OSw4NCwKLSAgICA2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MCwzLAotICAgIDAsMCwwLDExNywxMCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCwxMTUsMTE3LDYsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLAotICAgIDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwKLSAgICAxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTA3LDYsMCwwLDExNSw4LDAsMCwwLDAsCi0gICAgNSwxOCwxLDEyLDEsMTIsMSwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDk5LDUsMCwwLDAsMCwwLDAsMCwKLSAgICA5LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDIyNywwLDAsCi0gICAgMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjcsMCwxMTYsMCwwLAotICAgIDEyNCwwLDAsMTMxLDEsMCwxMjUsNSwwLDExMCw1NCwwLDEyNCwxLDAsMTAwLAotICAgIDMsMCwxMDcsOSwwLDExNCw0NSwwLDEyNCwxLDAsMTEwLDMsMCwxMDUsMCwKLSAgICAwLDEyNSw2LDAsMTE2LDIsMCwxMjQsNiwwLDEzMSwxLDAsMTI1LDcsMCwKLSAgICAxMTYsMCwwLDEyNCwwLDAsMTI0LDcsMCwxMjQsNCwwLDEzMSwzLDAsMTI1LAotICAgIDUsMCwxMjQsMywwLDExNSwyMDcsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDIsCi0gICAgMCwxMTQsMTIyLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDIsMCwKLSAgICAxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLDEsMCw4MywxMjQsMCwwLDExNSwxMzIsCi0gICAgMCwxMjQsNSwwLDgzLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLDExNiw0LAotICAgIDAsMTI0LDAsMCwxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsMSwwLAotICAgIDI1LDEzMSwxLDAsMjQsMTI1LDgsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDUsCi0gICAgMCwxMDYsNywwLDEwMCwzLDAsMTE2LDQsMCwxMjQsNSwwLDEwNiw3LDAsCi0gICAgMTMxLDEsMCwxMjQsOCwwLDI0LDEzMywyLDAsMjUsMjUsODMsMTEwLDE2LDAsCi0gICAgMTE2LDgsMCwxMjQsNSwwLDEyNCwzLDAsMTE2LDAsMCwxMzEsMywwLDgzLAotICAgIDEwMCwzLDAsODMsNDAsNCwwLDAsMCwxMTcsMjE0LDEsMCwwLDczLDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LAotICAgIDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDExNywxMTUsCi0gICAgMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTAsMTAyLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDEsMTE0LAotICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLAotICAgIDExMSw5OSw5OSwxMTcsMTE0LDEwNSwxMTAsMTAzLDMyLDEwMiwxMTQsMTExLDEwOSwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMTE0LDEwMSwxMDgsOTcsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNSw0NiwzMiw4NCwxMDQsCi0gICAgMTAxLDMyLDM5LDEwOCwxMTEsOTksOTcsMTA4LDExNSwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksCi0gICAgMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMDUsMTAzLDExMCwxMTEsMTE0LDEwMSwxMDAsNDYsMzIsCi0gICAgODQsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzOSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSwxMDEsMTE1LDMyLDExOSwxMDQsOTcsMTE2LDMyLDExNSwxMDQsMTExLDExNywxMDgsCi0gICAgMTAwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMzIsOTcsMTE1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSwKLSAgICA5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwKLSAgICAxMTQsMTExLDEwOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiw2MCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDYyLDk2LDk2LDQxLDQ2LAotICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwxMCwzMiwzMiwKLSAgICAzMiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwKLSAgICAxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMDUsMTEwLDMyLDk3LDMyLDExNCwKLSAgICAxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICA0Niw0NiwxMTIsMTA3LDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksMTExLDEwMCwKLSAgICA5Niw5NiwzMiwxMTksMTExLDExNywxMDgsMTAwLDMyLDEwNCw5NywxMTgsMTAxLDMyLDk3LDMyLAotICAgIDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMzIsMTExLDEwMiwzMiw1MCw0MSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMTcsMSwwLDAsMCw0Niw3OCwKLSAgICA0MCw5LDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDExNyw5LDAsMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LAotICAgIDExMSwxMTAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxNiwwLDAsMCwKLSAgICA5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDAsOSwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywKLSAgICAwLDAsMCwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDExNyw2LDAsMCwwLDEwOCwKLSAgICAxMTEsOTksOTcsMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwKLSAgICAxMTUsMTE2LDExNyw1LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDYsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwOCwxMTEsOTgsCi0gICAgOTcsMTA4LDExNSw5NSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgMTE3LDcsMCwwLDAsOTksMTE3LDExNiw5NSwxMTEsMTAyLDEwMiw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCw5NSw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwxMTgsNiwwLDAsMTE1LDI2LDAsMCwwLAotICAgIDAsMTEsMTIsMSwxNSwyLDI0LDEsMTIsMSwxOCwxLDYsMywxMiwxLAotICAgIDIzLDEsNiwxLDQsNCwzNSwzLDQwLDIsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwxNiwwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMjQsCi0gICAgMywwLDAsMTI0LDEsMCw5NywwLDAsMTI0LDAsMCw5NywxLDAsMTE2LAotICAgIDEsMCwxMDYsMiwwLDEwNiwzLDAsMTE0LDMzLDAsMTE2LDQsMCw5Nyw1LAotICAgIDAsMTEwLDYsMCwxMTYsNiwwLDk3LDUsMCwxMTYsNywwLDExNiwxLDAsCi0gICAgMTMxLDEsMCwxMjUsMiwwLDEyMCwxMTksMCwxMTYsMSwwLDEwNiw4LDAsMTA2LAotICAgIDksMCwxMzEsMCwwLDY4LDkzLDEwMiwwLDkyLDIsMCwxMjUsMywwLDEyNSwKLSAgICA0LDAsMTE2LDEwLDAsMTI0LDQsMCwxMjQsMiwwLDEzMSwyLDAsMTE0LDY3LAotICAgIDAsMTE2LDExLDAsMTI0LDQsMCwxMDAsMSwwLDEzMSwyLDAsMTE1LDE2OSwwLAotICAgIDEyNCwzLDAsMTE2LDEsMCwxMDYsMTIsMCwxMDcsNiwwLDExNCwxMzYsMCwxMTYsCi0gICAgMTMsMCwxMjQsNCwwLDk1LDE0LDAsMTEzLDE2NiwwLDExNiwwLDAsMTA2LDE1LAotICAgIDAsMTI0LDMsMCwxMzEsMSwwLDExNCwxNjYsMCwxMTYsMTYsMCwxMjQsNCwwLAotICAgIDk1LDE0LDAsMTEzLDE2NiwwLDExMywxNjksMCwxMTMsNjcsMCwxMTMsNjcsMCw4NywKLSAgICAxMTYsMSwwLDEwNiw4LDAsMTE2LDE3LDAsMjUsMTI1LDUsMCwxMjAsNzYsMCwKLSAgICAxMDAsMjgsMCw2OCw5Myw2OCwwLDEyNSw2LDAsMTI0LDYsMCwxMTYsMSwwLAotICAgIDEwNiw4LDAsMTA3LDcsMCwxMTQsMjMyLDAsMTE2LDEzLDAsMTA2LDE4LDAsMTI0LAotICAgIDYsMCwxMzEsMSwwLDEyNSw3LDAsMTEwLDEzLDAsMTE2LDEsMCwxMDYsOCwKLSAgICAwLDEyNCw2LDAsMjUsMTI1LDcsMCwxMTYsMTksMCwxMjQsNSwwLDEyNCw2LAotICAgIDAsMTI0LDcsMCwxMzEsMywwLDEsMTEzLDE5MywwLDg3LDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMDMsMSwwLDEwMiwyLDAsMTAwLDgsMCwxMDAsOSwwLDEwMCw3LAotICAgIDAsMTAzLDIsMCwxMDIsMiwwLDEwMCwxMCwwLDEwMCw5LDAsMTAwLDcsMCwKLSAgICAxMDMsMiwwLDEwMiwyLDAsMTAyLDMsMCwxMjUsOCwwLDEyMCwxODksMCwxMjQsCi0gICAgOCwwLDY4LDkzLDE2OSwwLDkyLDIsMCwxMjUsOSwwLDEyNSwxMCwwLDExNiwKLSAgICAyMCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTI0LDEwLDAsNjgsMTMxLAotICAgIDEsMCwxMzEsMSwwLDExNSwxMDcsMSwxMTYsMjEsMCwxMzAsMSwwLDEyNCwxMCwKLSAgICAwLDEwMCwxMywwLDI1LDEyNSwxMSwwLDEyNCw5LDAsMTE2LDEsMCwxMDYsOCwKLSAgICAwLDEwNyw2LDAsMTE0LDE0OSwxLDExNiwxLDAsMTA2LDgsMCwxMjQsOSwwLAotICAgIDI1LDEyNSwxMiwwLDgwLDExMyw2NCwxLDEyMSw2MCwwLDExNiwxMywwLDEwNiwxOCwKLSAgICAwLDEyNCw5LDAsMTMxLDEsMCwxMjUsMTIsMCwxMjQsOSwwLDEwMCwxMCwwLAotICAgIDEwNywyLDAsMTE0LDIwNywxLDEwMCwxNCwwLDExNiwxLDAsMTA2LDIyLDAsMTA3LAotICAgIDYsMCwxMTQsMjA3LDEsMTI0LDEwLDAsMTAwLDE1LDAsMjUsMTI1LDExLDAsMTEwLAotICAgIDAsMCw4MCw4NywxMTMsNjQsMSw0LDExNiwyMywwLDEwNywxMCwwLDExNCwyMzIsCi0gICAgMSwxLDEsMSwxMTksNjQsMSw4OSwxMTMsNjQsMSw4OCwxMTMsNjQsMSw4NywKLSAgICAxMTYsMjMsMCwxMDAsMTYsMCwxMzEsMSwwLDEzMCwxLDAsMTIxLDE5LDAsMTE2LAotICAgIDEzLDAsMTA2LDE4LDAsMTAwLDE3LDAsMTMxLDEsMCwxMjUsMTMsMCw4NywxMTAsCi0gICAgMjQsMCw0LDExNiwyMywwLDEwNywxMCwwLDExNCwzOCwyLDEsMSwxLDEwMCwKLSAgICAyNywwLDEyNSwxMywwLDg5LDExMCwxLDAsODgsMTE2LDEzLDAsMTA2LDE4LDAsCi0gICAgMTAwLDE4LDAsMTMxLDEsMCwxMjUsMTQsMCwxMjQsOSwwLDEwMCw4LDAsMTA3LAotICAgIDIsMCwxMTQsMTAwLDIsMTE2LDEzLDAsMTA2LDE4LDAsMTAwLDE5LDAsMTMxLDEsCi0gICAgMCwxMjUsMTUsMCwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMCwwLDEyNCwxNSwwLAotICAgIDEzMSwzLDAsMSwxMTAsMCwwLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIxLDAsCi0gICAgMTI0LDEyLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDE3LDAsCi0gICAgMTI0LDEzLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDE4LDAsCi0gICAgMTI0LDE0LDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIyLDAsCi0gICAgMTI0LDExLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIzLDAsCi0gICAgMTE2LDI1LDAsMTI0LDEwLDAsMTMxLDEsMCwxMzEsMywwLDEsMTE2LDE5LDAsCi0gICAgMTI0LDUsMCwxMDAsMjQsMCwxMTYsMjYsMCwxMzEsMCwwLDEzMSwzLDAsMSwKLSAgICAxMTYsMjcsMCwxMDYsMjgsMCwxMTYsMCwwLDEwNiwyOSwwLDEzMSwwLDAsMTMxLAotICAgIDEsMCwxLDEyNCw5LDAsMTAwLDgsMCwxMDcsMiwwLDExNCwyMCwzLDExNiwKLSAgICAzMCwwLDEwNiwzMSwwLDEwMCwyNSwwLDEzMSwxLDAsMSwxMDAsMjYsMCwxMTYsCi0gICAgMjcsMCwxMDcsNiwwLDExNCwyMCwzLDEwMCwyOSwwLDExNiwzMywwLDk1LDM0LAotICAgIDAsMTEzLDIwLDMsMTEwLDAsMCwxMDAsMjcsMCw4Myw0MCwzMCwwLDAsMCwKLSAgICAxMTcsMjUwLDAsMCwwLDgzLDEwMSwxMTYsMTE3LDExMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAorICAgIDEyMiwxNyw2OSwxMDksMTEyLDExNiwxMjEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLAorICAgIDk3LDEwOSwxMDEsNzgsNDEsOSwxMTQsMTkyLDAsMCwwLDExNCw4MiwxLDAsMCwKKyAgICAyMTgsOSw4NCwxMjEsMTEyLDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDQ3LDAsMCwwLAorICAgIDExNCw2NiwwLDAsMCwxMTQsMTMzLDAsMCwwLDExNCw3LDAsMCwwLDExNCwKKyAgICA3MywwLDAsMCwyMTgsMTEsODMsMTIxLDExNSwxMTYsMTAxLDEwOSw2OSwxMTQsMTE0LDExMSwKKyAgICAxMTQsNDEsNCwxMTQsNjcsMCwwLDAsMTE0LDEwMiwxLDAsMCwxMTQsMTAzLDEsCisgICAgMCwwLDExNCwxNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDEzLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsCisgICAgOTksMTA0LDEwMSw5OSwxMDcsMTM5LDgsMCwwLDExNSwyNCwwLDAsMCwwLDIsCisgICAgMTUsMSwzMCwxLDEyLDEsMTUsMSw2LDEsMTUsMSwxNSwxLDE1LDEsCisgICAgNiwyLDI3LDEsMTksMSwxMTQsMTEwLDEsMCwwLDEyMiwxNiw3OCwxMTEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEyMiw0LDEyMywKKyAgICAzMywxMTQsMTI1LDk5LDIsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLAorICAgIDEyLDAsMCwwLDY3LDAsMCwwLDExNSw1MiwxLDAsMCwxMDAsMCwwLAorICAgIDEyNSwyLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMDAsCisgICAgMiwwLDI1LDEyNSwzLDAsMTI0LDMsMCwxMTQsMTc4LDAsMTI0LDMsMCwxMTYsCisgICAgMSwwLDEwNiwyLDAsMTA3LDcsMCwxMTQsNjIsMCwxMTYsMywwLDEyNCwxLAorICAgIDAsMTI0LDMsMCwxMzEsMiwwLDEsMTEwLDAsMCwxMjQsMCwwLDExNiwxLAorICAgIDAsMTA2LDIsMCwxMDcsNiwwLDExNCw4OCwwLDExNiwxLDAsMTA2LDIsMCwKKyAgICAxMjQsMCwwLDI1LDgzLDExNiwxLDAsMTA2LDIsMCwxMjQsMywwLDI1LDEyNSwKKyAgICA0LDAsMTIxLDEzLDAsMTI0LDQsMCwxMDYsNCwwLDEyNSwyLDAsODcsMTEzLAorICAgIDE3OCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTc0LDAsMSwxLDEsMTE2LAorICAgIDYsMCwxMDAsMywwLDIzLDEwNiw3LDAsMTI0LDAsMCwxMjQsMywwLDEzMSwKKyAgICAyLDAsMTI1LDUsMCwxMTYsOCwwLDEyNCw1LDAsMTAwLDQsMCwxMjQsMCwKKyAgICAwLDEzMSwxLDEsMTMwLDEsMCw4OSwxMTMsMTc4LDAsODgsMTEwLDAsMCwxMTYsCisgICAgOSwwLDEyNCwwLDAsMTI0LDIsMCwxMzEsMiwwLDEyNSw2LDAsMTI0LDYsCisgICAgMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDIzNSwwLDExNiw4LDAsMTE2LDYsMCwKKyAgICAxMDYsNywwLDEyNCwwLDAsMTMxLDEsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLAorICAgIDEsMSwxMzAsMSwwLDExMCwxOCwwLDExNiwxMCwwLDEyNCw2LDAsMTMxLDEsCisgICAgMCwxMDYsMTEsMCwxMzEsMCwwLDEyNSw3LDAsMTI0LDMsMCwxMTQsNDgsMSwKKyAgICAxMTYsMSwwLDEwNiwyLDAsMTI0LDMsMCwyNSwxMjUsNCwwLDExNiwxMiwwLAorICAgIDEyNCw0LDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMDAsCisgICAgNSwwLDI1LDEyNCw3LDAsMTMxLDMsMCwxLDExMCwwLDAsMTI0LDcsMCwKKyAgICA4Myw0MSw2LDc4LDExNCwxMTYsMCwwLDAsMTE0LDg0LDAsMCwwLDEyMiwyMywKKyAgICA1OSwzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTQsNjcsMCwwLDAsMTE0LDExNSwwLDAsCisgICAgMCw0MSwxMywxMTQsMzIsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsCisgICAgMCwwLDExNCwxMTQsMCwwLDAsMTE0LDI0NiwwLDAsMCwxMTQsMjA5LDAsMCwKKyAgICAwLDIxOCw4LDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLDExNCw0NywwLDAsMCwKKyAgICAxMTQsMTUzLDAsMCwwLDExNCwxMDcsMSwwLDAsMTE0LDE3NCwwLDAsMCwxMTQsCisgICAgNiwxLDAsMCwxMTQsNjEsMCwwLDAsNDEsOCwxMTQsNjcsMCwwLDAsCisgICAgMjE4LDcsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTE0LDM1LDAsMCwwLDExNCwyMzMsCisgICAgMCwwLDAsOTAsMTMsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTQsMTcxLDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDE3OSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMjMsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsCisgICAgOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDE1OSw4LDAsMCwxMTUsNDIsMCwKKyAgICAwLDAsMCwxLDYsMSwxOSwxLDYsMSwxNSwxLDE2LDIsMTUsMSwKKyAgICAxMSwxLDEzLDEsMywxLDEzLDEsMTMsMSwyMiwxLDI2LDEsMTUsMSwKKyAgICAxMiwxLDMwLDIsMTgsMSw2LDIsMTMsMSwzMiwxLDExNCwxMTMsMSwwLAorICAgIDAsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTAsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDM2LDAsMCwwLDExNiwwLDAsMTI0LDAsCisgICAgMCwxMzEsMSwwLDE0MywxOCwwLDEsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLAorICAgIDAsMTMxLDIsMCw4Myw4NywxMDAsMSwwLDgxLDg4LDEwMCwxLDAsODMsNDEsCisgICAgMiwxMjIsNTQsNzAsMTA1LDExMCwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsMTAwLAorICAgIDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQxLDIsMTE0LDEwMywwLDAsCisgICAgMCwxMTQsMTEzLDEsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLDExNCwxMTIsMSwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDE0LDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsCisgICAgMTAwLDE4Niw4LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTMsMSwxMTQsMTE0LAorICAgIDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAorICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMTYsMCwwLAorICAgIDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMjQsMiwwLAorICAgIDEwMCwxLDAsMTA3LDQsMCwxMTQsNDksMCwxMTYsMSwwLDEyNCwwLDAsMTI0LAorICAgIDEsMCwxMjQsMiwwLDEzMSwzLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLAorICAgIDAsMTA2LDMsMCwxMzEsMCwwLDEsMTI0LDAsMCwxMTYsNCwwLDEwNiw1LAorICAgIDAsMTA3LDcsMCwxMTQsODcsMCwxMTYsNiwwLDEyNCwwLDAsMTE2LDcsMCwKKyAgICAxMzEsMiwwLDgzLDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDI1LDEyNSwzLAorICAgIDAsMTI0LDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDE1OCwwLDExNiwyLDAsCisgICAgMTA2LDgsMCwxMzEsMCwwLDEsMTAwLDMsMCwxMDYsOSwwLDEyNCwwLDAsCisgICAgMTMxLDEsMCwxMjUsNCwwLDExNiwxMCwwLDEyNCw0LDAsMTAwLDQsMCwxMjQsCisgICAgMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDExNiwxMSwwLDEyNCwwLAorICAgIDAsMTMxLDEsMCwxLDEyNCwzLDAsODMsNDEsNSw5Nyw1MCwxLDAsMCwKKyAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsOTcsMTE1LAorICAgIDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsOTcsMTA5LDEwMSw0NCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgOTksOTcsMTA4LDEwOCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsMTEwLAorICAgIDEwMywzMiwxMDksOTcsMTAwLDEwMSwzMiwxMDIsMTE0LDExMSwxMDksNDQsMzIsOTcsMTEwLDEwMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDk3LDEwMCwxMDYsMTE3LDExNSwKKyAgICAxMTYsMTA5LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LAorICAgIDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwKKyAgICAxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDExNCwxMDEsOTcsMTE2LDEwMSwxMTUsCisgICAgMTE2LDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsMTAwLDEwMSwxMTAsMTExLDEwOSwxMDUsMTEwLAorICAgIDk3LDExNiwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLAorICAgIDk3LDEwOCwxMDUsMTE2LDEyMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTE2LDExOSwxMDEsMTAxLAorICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKKyAgICA5NywxMTAsMTAwLDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDQ2LDMyLAorICAgIDg0LDEwNCwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTAxLDExNSwzMiwxMTUsMTAxLAorICAgIDExNiwxMTYsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LAorICAgIDk1LDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCwzMiwxMDAsMTA1LDEwMCwzMiwxMTAsMTExLDExNiw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwxMTQsODQsMCwwLDAsNzgsMTIyLDQwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDMyLDExMSwxMDIsMzIsMTIzLDEyNSwzMiwxMDQsOTcsMTA4LDExNiwxMDEsMTAwLDU5LDMyLDc4LAorICAgIDExMSwxMTAsMTAxLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMTE1LDExNCw2NywwLDAsMCw0MSwxMiwxMTQsMTEwLDEsMCwwLDExNCwxMDQsCisgICAgMSwwLDAsMTE0LDEwNiwwLDAsMCwxMTQsMywxLDAsMCwxMTQsNywwLAorICAgIDAsMCwxMTQsNzMsMCwwLDAsMTE0LDExNCwxLDAsMCwyMTgsMTEsOTUsMTAzLAorICAgIDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTQsMTA3LDAsMCwwLDExNCw0NywKKyAgICAwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwxMTIsMCwwLDAsNDEsNSwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDEwMiwxLDAsMCwxMTQsMTAzLDEsMCwwLDExNCwxNzksCisgICAgMCwwLDAsMTE0LDE1MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMTE1LDEsMCwwLDE5Miw4LDAsMCwKKyAgICAxMTUsMjYsMCwwLDAsMCw5LDE2LDEsMTIsMSwyMSwxLDEwLDEsMTUsCisgICAgMSwxMywxLDEzLDEsMTIsMSwxMCwyLDE1LDEsMjEsMSwxMCwxLDExNCwKKyAgICAxMTUsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLAorICAgIDAsMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDEsMSwwLDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMjUzLDAsMTAwLDIsMCwKKyAgICAxMjQsMSwwLDEwNyw2LDAsMTE0LDg5LDAsMTE2LDEsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwKKyAgICAwLDEsMTE2LDAsMCwxMjQsMCwwLDEwMCwzLDAsMTMxLDIsMCwxMTQsODksCisgICAgMCwxMjQsMSwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsCisgICAgMSwxMTMsODksMCwxMTAsMCwwLDEyMCwxNjEsMCwxMjQsMSwwLDY4LDkzLDE1MCwKKyAgICAwLDEyNSwzLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwKKyAgICAxMTUsOTYsMCwxMDAsNCwwLDEwNiw1LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwKKyAgICAzLDAsMTMxLDIsMCwxMjUsNCwwLDEyMSwxNywwLDExNiw3LDAsMTI0LDIsCisgICAgMCwxMjQsNCwwLDEzMSwyLDAsMSw4NywxMTMsMjQ2LDAsNCwxMTYsOCwwLAorICAgIDEwNywxMCwwLDExNCwyNDIsMCwxLDEyNSw1LDAsMSwxMjIsNTMsMCwxMTYsOSwKKyAgICAwLDEyNCw1LDAsMTMxLDEsMCwxMDYsMTAsMCwxMTYsMTEsMCwxMzEsMSwwLAorICAgIDExNCwyMjEsMCwxMjQsNSwwLDEwNiwxMiwwLDEyNCw0LDAsMTA3LDIsMCwxMTQsCisgICAgMjIxLDAsMTE5LDk2LDAsMTEzLDIyMSwwLDExMCwwLDAsMTMwLDAsMCw4Nyw4OSwKKyAgICAxMDAsNSwwLDEwMCw1LDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMywyNDYsMCwKKyAgICA4OCwxMTMsOTYsMCwxMTMsOTYsMCw4NywxMTAsMCwwLDEyNCwwLDAsODMsNDEsCisgICAgNiwxMjIsMjM4LDcwLDEwNSwxMDMsMTE3LDExNCwxMDEsMzIsMTExLDExNywxMTYsMzIsMTE5LDEwNCwKKyAgICA5NywxMTYsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMzIsMTE1LDEwNCwKKyAgICAxMTEsMTE3LDEwOCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwzMiwxMTIsOTcsCisgICAgMTE0LDk3LDEwOSwxMDEsMTE2LDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywzMiw5OSw5NywxMDgsCisgICAgMTA4LDk3LDk4LDEwOCwxMDEsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiw5NywxMDcsMTAxLAorICAgIDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsNDYsMzIsNzMsMTE2LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDExNywxMTIsMTA4LDEwMSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDExNCwxMTEsMTA5LAorICAgIDMyLDk3LDExNSwxMTUsMTE3LDEwOSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDgsMTA1LDk4LDM5LDExNSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsCisgICAgMTA1LDExNSwzMiwxMDAsMTAxLDExNSwxMDUsMTE0LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMTE0LDI0NiwwLDAsMCwyNTAsMSw0MiwyMTgsNyw5NSw5NSw5NywxMDgsMTA4LAorICAgIDk1LDk1LDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSw3OCw0MSwxMywxMTQsNjAsMCwwLAorICAgIDAsMTE0LDI0NSwwLDAsMCwyMTgsNiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMTQsMTk3LAorICAgIDAsMCwwLDExNCwxMTcsMSwwLDAsMTE0LDQ3LDAsMCwwLDExNCw1NywwLAorICAgIDAsMCwxMTQsMTE0LDAsMCwwLDExNCwxNTMsMCwwLDAsMTE0LDgyLDEsMCwKKyAgICAwLDExNCw5LDAsMCwwLDIxOCwxNSw5NSw2OSw4Miw4Miw5NSw3Nyw4Myw3MSwKKyAgICA5NSw4MCw4Miw2OSw3MCw3Myw4OCwxMTQsNjcsMCwwLDAsNDEsNiwxMTQsMTc5LAorICAgIDAsMCwwLDIxOCw4LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE0LDExMiwxLAorICAgIDAsMCwxMTQsMTYsMCwwLDAsOTAsOSwxMDIsMTE0LDExMSwxMDksOTUsMTEwLDk3LAorICAgIDEwOSwxMDEsMTE0LDQwLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LAorICAgIDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMjE2LDgsMCwwLDExNSwzNCwwLDAsCisgICAgMCwwLDEwLDE1LDEsMTIsMSwxMiwxLDEzLDEsMTUsMSwyMiwxLDEzLAorICAgIDEsMTUsMSwyMSwxLDMsMSwxNywxLDE4LDQsMjEsMSwxNSwxLDksCisgICAgMSwzMiwxLDExNCwxMjEsMSwwLDAsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsNzgsMCwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMjUsMSwKKyAgICAwLDEyNCwxLDAsMTAwLDIsMCwxMDcsOCwwLDExNCw3NCwwLDEyNCwwLDAsCisgICAgMTAwLDMsMCwyNSwxMjUsMSwwLDEwMCw0LDAsMTI0LDAsMCwxMDcsNywwLAorICAgIDExNCw3NCwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsNSwwLDEzMSwxLDAsMTAwLAorICAgIDYsMCwyNSwxMjUsMSwwLDExMyw3NCwwLDExMCwwLDAsMTI0LDEsMCw4MywKKyAgICA0MSw3LDEyMiwxNjcsNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwzMiwxMTksMTA0LAorICAgIDk3LDExNiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTE1LAorICAgIDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk1LAorICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsCisgICAgMTE2LDMyLDEwMywxMTcsOTcsMTE0LDk3LDExMCwxMTYsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwKKyAgICA5OCwxMDEsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDMyLDExMSwxMTQsMzIsOTksMTExLAorICAgIDExNywxMDgsMTAwLDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDc4LDExMSwKKyAgICAxMTAsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsCisgICAgMTAxLDExMCwxMTYsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDExNCwxMTEsCisgICAgMTEyLDEwMSwxMTQsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE3LDExMCwxMDcsCisgICAgMTEwLDExMSwxMTksMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCwyNTAsMCwwLDAsCisgICAgNzgsMTE0LDU3LDAsMCwwLDExNCwyNDYsMCwwLDAsMTE0LDExNiwwLDAsMCwKKyAgICAxMTQsODQsMCwwLDAsNDEsMiwxMTQsOTMsMCwwLDAsMTE0LDMyLDAsMCwKKyAgICAwLDQxLDIsMjE4LDcsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTQsMTAyLDEsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxNyw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDk1LDk1LDI0OCw4LDAsMCwxMTUsMTIsMCwwLDAsMCw3LDE1LDEsCisgICAgMTIsMSwxMCwxLDEyLDEsMjUsMSwxMTQsMTIzLDEsMCwwLDk5LDAsMCwKKyAgICAwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDU1LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMDYsMiwwLAorICAgIDEzMSwwLDAsMTAyLDIsMCwxMjUsMCwwLDExNiwzLDAsMTE2LDQsMCwxMDIsCisgICAgMiwwLDEyNSwxLDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsMTI1LDIsCisgICAgMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMDMsMywwLDgzLDQxLDEsCisgICAgMTIyLDk1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDEwOCwxMDUsMTE1LDExNiwKKyAgICAzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw2OSw5Nyw5OSwxMDQsMzIsMTA1LDExNiwxMDEsMTA5LDMyLDEwNSwxMTUsCisgICAgMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ0LDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsNDEsNDYsMTAsMzIsMzIsMzIsCisgICAgMzIsNDEsNywxMTQsNTYsMSwwLDAsMTE0LDEwNiwwLDAsMCwyMTgsMTgsMTAxLAorICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLAorICAgIDExNSwxMTQsOCwxLDAsMCwxMTQsMTM0LDAsMCwwLDExNCw3LDEsMCwwLAorICAgIDExNCwyMzIsMCwwLDAsNDEsMyw5MCwxMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCwxMTUsOTAsNiwxMTUsMTExLDExNywxMTQsOTksMTAxLDkwLDgsOTgsMTIxLDExNiwKKyAgICAxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDI0MCwwLDAsMCw3LDksMCwwLDExNSw4LDAsCisgICAgMCwwLDAsNSwxOCwxLDEyLDEsMTIsMSwxMTQsMjQwLDAsMCwwLDk5LAorICAgIDUsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDUsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDIyNywwLDAsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LAorICAgIDIsMCwxMTQsMjcsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNSwKKyAgICAwLDExMCw1NCwwLDEyNCwxLDAsMTAwLDIsMCwxMDcsOSwwLDExNCw0NSwwLAorICAgIDEyNCwxLDAsMTEwLDMsMCwxMDUsMCwwLDEyNSw2LDAsMTE2LDEsMCwxMjQsCisgICAgNiwwLDEzMSwxLDAsMTI1LDcsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LDcsCisgICAgMCwxMjQsNCwwLDEzMSwzLDAsMTI1LDUsMCwxMjQsMywwLDExNSwyMDcsMCwKKyAgICAxMjQsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMTIyLDAsMTE2LDAsMCwxMjQsCisgICAgMCwwLDEwNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLAorICAgIDEsMCw4MywxMjQsMCwwLDExNSwxMzIsMCwxMjQsNSwwLDgzLDExNiwzLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDExNiwzLDAsMTI0LDAsMCwxMDYsMiwwLDEwMCwKKyAgICAzLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMjQsMTI1LDgsMCwKKyAgICAxMTYsNCwwLDEwNiw1LDAsMTI0LDUsMCwxMDYsNiwwLDEwMCwyLDAsMTE2LAorICAgIDMsMCwxMjQsNSwwLDEwNiw2LDAsMTMxLDEsMCwxMjQsOCwwLDI0LDEzMywKKyAgICAyLDAsMjUsMjUsODMsMTEwLDE2LDAsMTE2LDcsMCwxMjQsNSwwLDEyNCwzLAorICAgIDAsMTE2LDAsMCwxMzEsMywwLDgzLDEwMCwyLDAsODMsNDEsNCw5NywyMTQsCisgICAgMSwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwMywxMDgsCisgICAgMTExLDk4LDk3LDEwOCwxMTUsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLAorICAgIDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA1LDExMCwxMDIsMTAxLDExNCwKKyAgICAzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDMyLDEwNSwxMTUsMzIsMTExLDk5LDk5LDExNywxMTQsMTA1LDExMCwxMDMsMzIsMTAyLDExNCwKKyAgICAxMTEsMTA5LDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwKKyAgICAzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTE1LDQ2LDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LDExMSw5OSw5NywxMDgsMTE1LDM5LDMyLAorICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDEwNSwxMDMsMTEwLDExMSwKKyAgICAxMTQsMTAxLDEwMCw0NiwzMiw4NCwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDM5LDEwMiwxMTQsCisgICAgMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LAorICAgIDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMTUsMzIsMTE5LDEwNCw5NywxMTYsMzIsCisgICAgMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwzMiw5NywxMTUsMzIsCisgICAgOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsCisgICAgMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDQwLDEwMSw0NiwxMDMsCisgICAgNDYsMzIsOTYsOTYsMTAyLDExNCwxMTEsMTA5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDYwLDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsCisgICAgNjIsOTYsOTYsNDEsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDgsMTAxLDExOCwxMDEsCisgICAgMTA4LDM5LDEwLDMyLDMyLDMyLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwKKyAgICAxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLAorICAgIDExNiwxMTEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEwNSwKKyAgICAxMTAsMzIsOTcsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDEwLDMyLDMyLDMyLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsCisgICAgMTAyLDExNCwxMTEsMTA5LDMyLDQ2LDQ2LDExMiwxMDcsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDMyLDEwOSwxMTEsMTAwLDk2LDk2LDMyLDExOSwxMTEsMTE3LDEwOCwxMDAsMzIsMTA0LDk3LAorICAgIDExOCwxMDEsMzIsOTcsMzIsMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwzMiwxMTEsMTAyLDMyLAorICAgIDUwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCw4NCwwLDAsMCw3OCwxMTQsCisgICAgMTE2LDAsMCwwLDQxLDgsMTE0LDExNSwxLDAsMCwxMTQsMTIzLDEsMCwwLAorICAgIDExNCwxMjEsMCwwLDAsMTE0LDMxLDAsMCwwLDExNCw3LDAsMCwwLDExNCwKKyAgICA3MywwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDEyMSwxLDAsMCw0MSw5LAorICAgIDExNCw2NywwLDAsMCwxMTQsMTIyLDEsMCwwLDIxOCw2LDEwOCwxMTEsOTksOTcsCisgICAgMTA4LDExNSwxMTQsMTIwLDEsMCwwLDExNCwxMDMsMSwwLDAsMTE0LDE3OSwwLDAsCisgICAgMCw5MCw4LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsOTUsMTE0LDEwMiwxLDAsMCwKKyAgICA5MCw3LDk5LDExNywxMTYsOTUsMTExLDEwMiwxMDIsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LDk1LDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDk1LDk1LDE4LDksMCwwLDExNSwyNiwwLDAsMCwwLDExLDEyLAorICAgIDEsMTUsMiwyNCwxLDEyLDEsMTgsMSw2LDMsMTIsMSwyMywxLDYsCisgICAgMSw0LDQsMzUsMyw0MCwyLDExNCwxMjYsMSwwLDAsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNjgsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCwxMjUsMSwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw0NiwKKyAgICAwLDExNiwyLDAsMTAwLDEsMCwxMjQsMCwwLDIzLDEzMSwxLDAsMTMwLDEsCisgICAgMCwxMTAsMCwwLDExNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsCisgICAgMTI0LDIsMCwxMDYsNCwwLDEzMSwwLDAsODMsNDEsMiw3OCwxMjIsMjUsMTEwLAorICAgIDExMSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsNDEsNSwxMTQsMTAsMSwwLDAsMTE0LAorICAgIDEzLDEsMCwwLDExNCwxNTMsMCwwLDAsMTE0LDE3NCwwLDAsMCwxMTQsNiwKKyAgICAxLDAsMCw0MSwzLDExNCw2NywwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCwKKyAgICAxNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDE4LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDEwMiwxMTQsCisgICAgMTExLDEwOSw5NSwxMTAsOTcsMTA5LDEwMSw1Myw5LDAsMCwxMTUsMTAsMCwwLDAsCisgICAgMCwxLDE1LDEsMTIsMSwxOSwxLDEyLDEsMTE0LDEyNywxLDAsMCw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMTksMCwwLDAsMTIsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDIzMiwyLDAsMCwxMjQsMSwwLDk3LDAsMCwxMjQsCisgICAgMCwwLDk3LDEsMCwxMTYsMSwwLDEwNiwyLDAsMTA2LDMsMCwxMTQsMzMsCisgICAgMCwxMTYsNCwwLDk3LDUsMCwxMTAsNiwwLDExNiw2LDAsOTcsNSwwLAorICAgIDExNiw3LDAsMTE2LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTIwLDEzOCwwLDExNiwKKyAgICAxLDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsNjgsOTMsMTIxLDAsOTIsCisgICAgMiwwLDEyNSwzLDAsMTI1LDQsMCwxMTYsMTAsMCwxMjQsNCwwLDEyNCwyLAorICAgIDAsMTMxLDIsMCwxMTQsNjcsMCwxMjQsMywwLDExNiwxLDAsMTA2LDExLDAsCisgICAgMTA3LDYsMCwxMTQsMTE4LDAsMTE2LDEyLDAsMTI1LDUsMCwxMTAsMjcsMCwxMTYsCisgICAgMCwwLDEwNiwxMywwLDEyNCwzLDAsMTMxLDEsMCwxMTQsNjcsMCwxMTYsMTQsCisgICAgMCwxMjUsNSwwLDExMCwzLDAsMTEzLDY3LDAsMTE2LDE1LDAsMTI0LDQsMCwKKyAgICAxMjQsNSwwLDEzMSwyLDAsMTI1LDYsMCwxMTYsMTYsMCwxMjQsNiwwLDEzMSwKKyAgICAxLDAsMTI1LDcsMCwxMjQsNywwLDEwNiwxNywwLDEyNCw0LDAsMTMxLDEsCisgICAgMCwxLDExMyw2NywwLDExMyw2NywwLDg3LDExNiwxLDAsMTA2LDgsMCwxMTYsCisgICAgMTgsMCwyNSwxMjUsOCwwLDEyMCw3MywwLDEwMCwyNiwwLDY4LDkzLDY1LDAsCisgICAgMTI1LDksMCwxMjQsOSwwLDExNiwxLDAsMTA2LDgsMCwxMDcsNywwLDExNCwKKyAgICAyNDgsMCwxMTYsMTksMCwxMjQsOSwwLDEzMSwxLDAsMTI1LDEwLDAsMTEwLDEzLAorICAgIDAsMTE2LDEsMCwxMDYsOCwwLDEyNCw5LDAsMjUsMTI1LDEwLDAsMTE2LDIwLAorICAgIDAsMTI0LDgsMCwxMjQsOSwwLDEyNCwxMCwwLDEzMSwzLDAsMSwxMTMsMjEyLAorICAgIDAsODcsMTAwLDUsMCwxMDAsNiwwLDEwMywxLDAsMTAyLDIsMCwxMDAsNywKKyAgICAwLDEwMCw4LDAsMTAwLDYsMCwxMDMsMiwwLDEwMiwyLDAsMTAyLDIsMCwKKyAgICAxMjUsMTEsMCwxMjAsMTQ2LDAsMTI0LDExLDAsNjgsOTMsMTI2LDAsOTIsMiwwLAorICAgIDEyNSwxMiwwLDEyNSwxMywwLDExNiwyMSwwLDEwMCw5LDAsMTAwLDEwLDAsMTMyLAorICAgIDAsMCwxMjQsMTMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTE1LDEwOCwxLDExNiwKKyAgICAyMiwwLDEzMCwxLDAsMTI0LDEzLDAsMTAwLDExLDAsMjUsMTI1LDE0LDAsMTI0LAorICAgIDEyLDAsMTE2LDEsMCwxMDYsOCwwLDEwNyw2LDAsMTE0LDE1MCwxLDExNiwxLAorICAgIDAsMTA2LDgsMCwxMjQsMTIsMCwyNSwxMjUsMTUsMCw4MCwxMTMsNjUsMSwxMjEsCisgICAgMTcsMCwxMTYsMTksMCwxMjQsMTIsMCwxMzEsMSwwLDEyNSwxNSwwLDgwLDg3LAorICAgIDExMyw2NSwxLDQsMTE2LDIzLDAsMTA3LDEwLDAsMTE0LDE5MCwxLDEsMSwxLAorICAgIDExOSw2NSwxLDg5LDExMyw2NSwxLDg4LDExMyw2NSwxLDg3LDExNiwyMywwLDEwMCwKKyAgICAxMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxMywKKyAgICAwLDEyNCwxNSwwLDEzMSwzLDAsMSwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxNCwKKyAgICAwLDEyNCwxNCwwLDEzMSwzLDAsMSwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxNSwKKyAgICAwLDEwMCwxNiwwLDEwNiwyNCwwLDEyNCwxMywwLDEzMSwxLDAsMTMxLDMsMCwKKyAgICAxLDEyMSwxNiwwLDExNiwxOSwwLDEwMCwxNywwLDEzMSwxLDAsMTI1LDE2LDAsCisgICAgODcsMTEwLDI0LDAsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsNTAsMiwxLDEsCisgICAgMSwxMDAsMTgsMCwxMjUsMTYsMCw4OSwxMTAsMSwwLDg4LDExNiwyMCwwLDEyNCwKKyAgICA4LDAsMTAwLDE3LDAsMTI0LDE2LDAsMTMxLDMsMCwxLDExNiwxOSwwLDEwMCwKKyAgICAxOSwwLDEzMSwxLDAsMTI1LDE3LDAsMTE2LDIwLDAsMTI0LDgsMCwxMDAsMTksCisgICAgMCwxMjQsMTcsMCwxMzEsMywwLDEsMTI0LDEyLDAsMTAwLDcsMCwxMDcsMiwKKyAgICAwLDExNCwxMzgsMiwxMTYsMTksMCwxMDAsMjAsMCwxMzEsMSwwLDEyNSwxOCwwLAorICAgIDExNiwyMCwwLDEyNCw4LDAsMTAwLDIxLDAsMTI0LDE4LDAsMTMxLDMsMCwxLAorICAgIDExMCwwLDAsMTE2LDIwLDAsMTI0LDgsMCwxMDAsMjIsMCwxMTYsMjUsMCwxMzEsCisgICAgMCwwLDEzMSwzLDAsMSwxMTYsMjYsMCwxMDYsMjcsMCwxMTYsMCwwLDEwNiwKKyAgICAyOCwwLDEzMSwwLDAsMTMxLDEsMCwxLDEyNCwxMiwwLDEwMCw3LDAsMTA3LAorICAgIDIsMCwxMTQsMjI4LDIsMTE2LDI5LDAsMTA2LDMwLDAsMTAwLDIzLDAsMTMxLDEsCisgICAgMCwxLDEwMCwyNCwwLDExNiwyNiwwLDEwNyw2LDAsMTE0LDIyOCwyLDEwMCwyNSwKKyAgICAwLDExNiwzMSwwLDk1LDMyLDAsMTEzLDIyOCwyLDExMCwwLDAsMTAwLDE4LDAsCisgICAgODMsNDEsMjcsMTIyLDI1MCw4MywxMDEsMTE2LDExNywxMTIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKICAgICAxMTYsMTA4LDEwNSw5OCwzMiw5OCwxMjEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwKICAgICAxMDMsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKICAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTA1LDExMCwKQEAgLTQxOTEsMTAzICs0MjUwLDYwIEBACiAgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTExLDExNSwxMDEsMzIsCiAgICAgMTE2LDExOSwxMTEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwKICAgICAzMiw5OCwxMDEsMzIsMTAxLDEyMCwxMTIsMTA4LDEwNSw5OSwxMDUsMTE2LDEwOCwxMjEsMzIsMTEyLAotICAgIDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywzLAotICAgIDAsMCwwLDk1LDEwNSwxMTEsMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE1LDExNyw4LDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAotICAgIDExNSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDExMiwxMTEsMTE1LDEwNSwxMjAsMTE3LDEsMCwwLDAsNDcsMTE3LDIsMCwKLSAgICAwLDAsMTEwLDExNiwxMTcsMSwwLDAsMCw5MiwxMTcsMywwLDAsMCwxMTEsCi0gICAgMTE1LDUwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDAsMCwwLDExNSwzMywwLDAsMCwxMjQsMCwwLDkzLAotICAgIDIzLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMCwKLSAgICAwLDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDAsMiwwLAotICAgIDAsMCwxMDUsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDEwOCwxMDEsMTEwLDQwLDIsMCwwLDAsMTE3LDIsMCwwLDAsNDYsCi0gICAgNDgsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsMTkxLDYsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsMjUsCi0gICAgMCwwLDAsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDEwNSwwLDAsMCwKLSAgICAwLDExNyw3LDAsMCwwLDY5LDc3LDg4LDMyLDcxLDY3LDY3LDEwNSwxLDAsCi0gICAgMCwwLDExNywzMCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwKLSAgICAxMTEsMTE0LDMyLDExMCwxMTYsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTcsOCwwLDAsMCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiwxMTcsNiwKLSAgICAwLDAsMCwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw4LDAsCi0gICAgMCwwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNywxNSwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNCwKLSAgICAwLDAsMCw0NiwxMTIsMTIxLDExOSwxMTcsNiwwLDAsMCw5NSwxMDAsNDYsMTEyLAotICAgIDEyMSwxMDAsNzgsNDAsNCwwLDAsMCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLAotICAgIDExNyw5LDAsMCwwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsOCwKLSAgICAwLDAsMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCw4NCw0MCwzNSwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNSwKLSAgICAwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LDgsMCwwLDAsMTExLDExMiwxMTYsCi0gICAgMTA1LDEwOSwxMDUsMTIyLDEwMSwxMTcsMjcsMCwwLDAsNzksODAsODQsNzMsNzcsNzMsCi0gICAgOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsCi0gICAgNzAsNzMsODgsNjksODMsMTE3LDE3LDAsMCwwLDY2LDg5LDg0LDY5LDY3LDc5LAotICAgIDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywyMywwLDAsMCwKLSAgICA2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4MywKLSAgICA4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNCwwLDAsMCwxMTYsMTIxLDExMiwxMDEsCi0gICAgMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw1LDAsMCwKLSAgICAwLDEwNSwxMTYsMTAxLDEwOSwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwxMTUsCi0gICAgMTE2LDk3LDExMCw5OSwxMDEsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwxMTcsMjAsMCwwLDAsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNSwwLDAsMCw2NiwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw3LDAsMCwwLAotICAgIDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywzLDAsMCwwLDk3LDEwOCwxMDgsMTE3LAotICAgIDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNyw3LDAsMCwwLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTcsMTEsCi0gICAgMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LAotICAgIDE2LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSwKLSAgICA5OSw5NywxMTUsMTAxLDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4Myw3MywKLSAgICA3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNiwwLDAsMCwKLSAgICAxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTUsMCwKLSAgICAwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksCi0gICAgODMsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwKLSAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg1LDczLDc2LDY4LDQwLAotICAgIDE2LDAsMCwwLDExNywxMCwwLDAsMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNiwKLSAgICAxMjEsMTEyLDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMiwwLDAsMCw5OCwxMTcsMTA1LDEwOCwKLSAgICAxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTQsMCwwLDAsOTgsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDExMSwxMTUsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDEwLDAsMCwwLDk4LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExMSwxMTUsMTE3LDE1LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDksMCwwLDAsMTExLAotICAgIDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsMTE2LDEwNCwxMTQsCi0gICAgMTAxLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTQsMCwwLDAsMTE5LAotICAgIDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEzLDAsCi0gICAgMCwwLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDYsMCwwLDAsCi0gICAgOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxNTQsNiwwLDAsMTE1LDEwNiwwLDAsMCwwLAotICAgIDksNiwxLDYsMiwxMiwxLDksMiw2LDIsMTIsMSwyOCwxLDE1LAotICAgIDEsMTUsMSwxNSwxLDEyLDEsMTUsMSwyMiwyLDEzLDEsMTMsMSwxNSwKLSAgICAxLDE4LDIsMTMsMSwyMCwyLDQ4LDEsMTksMiwzMSwxLDEwLDEsMTUsCi0gICAgMSwxMywxLDQsMiwzLDEsMTUsMiwyNywxLDEzLDEsNSwxLDEzLAotICAgIDEsMTIsMiwxMiwyLDMsMSwxOSwxLDEzLDIsMTEsMSwxNSwyLDEyLAotICAgIDEsMTUsMSwxOSwyLDE2LDEsMTYsMSwxNiwxLDE2LDEsMjIsMiwxOSwKLSAgICAxLDE5LDEsMTIsMSwxMywxLDEyLDEsMTE3LDYsMCwwLDAsOTUsMTE1LAotICAgIDEwMSwxMTYsMTE3LDExMiw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsCisgICAgOTcsMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LAorICAgIDQ5LDAsMCwwLDExNCwxNjYsMCwwLDAsMjE4LDgsOTgsMTE3LDEwNSwxMDgsMTE2LAorICAgIDEwNSwxMTAsMTE1LDExNCwxOTEsMCwwLDAsOTAsNSwxMTIsMTExLDExNSwxMDUsMTIwLDI1MCwKKyAgICAxLDQ3LDIxOCwyLDExMCwxMTYsMjUwLDEsOTIsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMywwLDAsMCwxMTUsMCwwLDAsMTE1LDMzLAorICAgIDAsMCwwLDEyNCwwLDAsOTMsMjMsMCwxMjUsMSwwLDExNiwwLDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEwMCwwLDAsMTA3LDIsMCw4NiwxLDExMywzLDAsCisgICAgMTAwLDEsMCw4Myw0MSwyLDExNCwyOSwwLDAsMCw3OCw0MSwxLDExNCwzMSwKKyAgICAwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwxMTQsMTMwLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NywKKyAgICAwLDAsMCwxMDUsOSwwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiwyNSwKKyAgICA5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwKKyAgICA2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE0LDg0LDAsMCwwLDEyMiwzMCwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAorICAgIDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwxMTEsMTE0LDMyLDExMCwxMTYsMTE0LDMsCisgICAgMCwwLDAsMTE0LDI1LDAsMCwwLDExNCwyMSwwLDAsMCwxMTQsMzAsMCwKKyAgICAwLDAsMTE0LDg1LDAsMCwwLDc4LDExNCwxMTEsMCwwLDAsOTAsNiwxMTksCisgICAgMTA1LDExMCwxMTQsMTAxLDEwMywxMTQsMjMsMSwwLDAsMTE0LDYsMCwwLDAsMTIyLAorICAgIDQsNDYsMTEyLDEyMSwxMTksMTIyLDYsOTUsMTAwLDQ2LDExMiwxMjEsMTAwLDg0LDQxLDQsCisgICAgMTIyLDMsOTUsMTA1LDExMSwxMjIsOSw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsCisgICAgMTIyLDgsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE1LDEyMiw3LDEwOSw5NywxMTQsMTE1LAorICAgIDEwNCw5NywxMDgsNDEsMzMsMTE0LDEwNiwwLDAsMCwxMTQsNywwLDAsMCwxMTQsCisgICAgMTE3LDAsMCwwLDExNCwxMTgsMCwwLDAsMTE0LDEyMCwwLDAsMCwxMTQsMjMyLAorICAgIDAsMCwwLDExNCwxMTksMCwwLDAsMTE0LDY2LDAsMCwwLDExNCw3MywwLAorICAgIDAsMCwyMTgsNSwxMDUsMTE2LDEwMSwxMDksMTE1LDExNCwxOTIsMCwwLDAsMTE0LDE1NywKKyAgICAwLDAsMCwxMTQsMTAsMSwwLDAsMTE0LDE2MiwwLDAsMCwxMTQsMTksMSwKKyAgICAwLDAsMTE0LDI0NywwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCwyNTQsMCwwLAorICAgIDAsMTE0LDU3LDAsMCwwLDExNCwxMjcsMSwwLDAsMTE0LDYxLDAsMCwwLAorICAgIDIxOCwzLDk3LDEwOCwxMDgsMTE0LDEwMCwwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwKKyAgICAyNiwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDU5LDEsMCwwLDExNCwxOTcsCisgICAgMCwwLDAsMTE0LDEyNCwxLDAsMCwxMTQsMTM0LDAsMCwwLDExNCwyMjMsMCwKKyAgICAwLDAsMTE0LDIyLDEsMCwwLDExNCwyNiwxLDAsMCw0MSwxOSwyMTgsMTAsCisgICAgMTE1LDEyMSwxMTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjE4LDExLDk1LDEwNSwxMDksMTEyLAorICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDExLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAorICAgIDExNiwxMjEsMTEyLDEwMSwxMTQsNjcsMCwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsMTY5LAorICAgIDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDE3OCwwLDAsMCw5MCwxMSwxMTUsCisgICAgMTAxLDEwOCwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTIsOTgsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsOTUsMTEwLDk3LDEwOSwxMDEsOTAsMTQsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKKyAgICAxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTAsMTExLDExNSw5NSwxMDAsMTAxLDExNiwKKyAgICA5NywxMDUsMTA4LDExNSw5MCwxMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTEsMTE1LAorICAgIDExNCwyMSwwLDAsMCwxMTQsMjUsMCwwLDAsOTAsOSwxMTEsMTE1LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDkwLDEzLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTAsMTQsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDYsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw2MSw5LDAsMCwxMTUsMTA4LAorICAgIDAsMCwwLDAsOSw2LDEsNiwyLDEyLDEsOSwyLDYsMywxMiwKKyAgICAxLDI4LDEsMTUsMSwxNSwxLDksMSwxNSwxLDksMiwzLDEsMTUsCisgICAgMSwxMiwxLDIwLDMsMTMsMSwxMywxLDE1LDEsMTUsMiwxMywxLDIwLAorICAgIDMsMzMsMSwxOSwyLDMxLDEsMTAsMSwxNSwxLDEzLDEsNCwyLDMsCisgICAgMSwxMiwxLDUsMSwxMywxLDEyLDIsMTIsMSwxNiwxLDE2LDEsMjUsCisgICAgMywzLDEsMTYsMSwxMywyLDExLDEsMTYsMywxMiwxLDE2LDMsMTIsCisgICAgMSwxMiwxLDE5LDMsMTksMSwxOSwxLDEyLDEsMTMsMSwxMiwxLDExNCwKKyAgICAxMzYsMSwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLAogICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTM2LDAsMCwwLDExNiwwLAogICAgIDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMSwxMTYsMSwwLDEzMSwwLAogICAgIDAsMTI1LDIsMCwxMTYsMiwwLDEwNiwzLDAsMTA2LDQsMCwxMTYsNSwwLApAQCAtNDI5NywxMzQgKzQzMTMsNjMgQEAKICAgICAxMTYsMTEsMCwxMDYsMTIsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDExNiwwLDExNiwKICAgICAyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxMywwLDEzMSwxLDAsMSwxMTAsCiAgICAgMCwwLDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxNCwwLDEzMSwxLAotICAgIDAsMSwxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDUwLDAsMCwwLAotICAgIDczLDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAotICAgIDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsMTE3LDIsMCwwLDAsMTEwLDExNiw3OCw0MCwxNSwwLDAsMCwxMTcsCi0gICAgNiwwLDAsMCw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDExNywyNywwLDAsMCw5NSwKLSAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LAotICAgIDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywKLSAgICAxMTUsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDEwLDAsMCwKLSAgICAwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDksMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNyw5LDAsMCwwLDEwOSwxMDEsCi0gICAgMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDk3LDExMiwxMTIsMTAxLAotICAgIDExMCwxMDAsMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDMsMCwwLDAsOTUsMTExLAotICAgIDExNSwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMjEsCi0gICAgMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwKLSAgICAxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDgwLDk3LDExNiwKLSAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwzLDAsMCwwLDExNywxMCwwLDAsCi0gICAgMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDE3LDAsMCwwLAotICAgIDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgMTE1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwKLSAgICAwLDAsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMjMzLDYsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwwLDIsMTMsMSw5LDEsMjgsMSwxNiwxLDE2LDEsMTUsCi0gICAgMSwxOSwxLDExNyw4LDAsMCwwLDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LAotICAgIDc4LDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsMTE5LDEwNSwxMTAsMTE3LDYsCi0gICAgMCwwLDAsOTksMTIxLDEwMywxMTksMTA1LDExMCwxMTcsNiwwLDAsMCwxMDAsOTcsCi0gICAgMTE0LDExOSwxMDUsMTEwLDQwLDc0LDAsMCwwLDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDI3LDAsMCwwLDk1LDY3LDY1LDgzLDY5LDk1LAotICAgIDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LDgwLDc2LDY1LDg0LAotICAgIDcwLDc5LDgyLDc3LDgzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNywwLDAsMCw5NSwKLSAgICAxMTksOTUsMTA4LDExMSwxMTAsMTAzLDExNyw3LDAsMCwwLDk1LDExNCw5NSwxMDgsMTExLAotICAgIDExMCwxMDMsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LAotICAgIDExMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LAotICAgIDExNiwxMTcsMTgsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksCi0gICAgMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxMiwwLDAsMCw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsMTMsMCwwLDAsOTUsMTE5LAotICAgIDExNCwxMDUsMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksMTE3LDUsMCwwLDAsCi0gICAgOTUsMTE5LDExNCw5NywxMTIsMTE3LDQsMCwwLDAsMTE2LDEyMSwxMTIsMTAxLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDk5LDExMSwxMDAsMTAxLDk1LDk1LDExNywxMCwwLDAsMCwKLSAgICA5NSw5OSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDEwLDAsMCwwLDExMCwKLSAgICAxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMywwLDAsMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTUsMTE3LDEyLDAsMCwwLAotICAgIDk1LDk4LDEwOCwxMTEsOTksMTA3LDEwNSwxMTAsMTAzLDk1LDExMSwxMTAsMTE3LDEyLDAsMCwKLSAgICAwLDgyLDExNywxMTAsMTE2LDEwNSwxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTQsMCwKLSAgICAwLDAsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywKLSAgICAxMTcsMTYsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNzYsMTExLDk5LDEwNywxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDE5LDAsMCwwLDk1LAotICAgIDEwOCwxMTEsOTksMTA3LDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAotICAgIDExNywzLDAsMCwwLDExMSwxMTQsMTAwLDExNywxNywwLDAsMCw5NSw4Miw2NSwKLSAgICA4Nyw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwxMTcsNSwKLSAgICAwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsMTE3LDUsMCwwLDAsMTE0LDk3LDExMCwKLSAgICAxMDMsMTAxLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw2Niw4OSwKLSAgICA4NCw2OSw4MywxMTcsOCwwLDAsMCw5NSw4MCw4OSw2Nyw2NSw2Nyw3Miw2OSwKLSAgICAxMTcsMTUsMCwwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsCi0gICAgNzMsODgsNjksODMsMTE3LDIzLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LAotICAgIDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAotICAgIDExNywyNywwLDAsMCw3OSw4MCw4NCw3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2NiwKLSAgICA4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICAxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTcsMCwwLDAsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsCi0gICAgMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTcsMTUsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsMTA1LDEwOCwxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwKLSAgICAxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMSwKLSAgICAwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNywxNiwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxNywKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE1LDEwNCwxMDUsMTA5LDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwKLSAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywyMSwwLDAsMCwKLSAgICA4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDExNywxMiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LAotICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDIwLDAsMCwKLSAgICAwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4MywKLSAgICA3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMTksMCwwLAotICAgIDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwKLSAgICAxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLAotICAgIDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTgsMCwwLDAsOTUsNzMsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LAotICAgIDExNywxMywwLDAsMCw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSwKLSAgICA5OSwxMDQsMTAxLDk5LDEwNywxMTcsOCwwLDAsMCw5NSw2OSw4Miw4Miw5NSw3NywKLSAgICA4Myw3MSwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDExNywxNCwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMTcsMTYsMCwwLDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LAotICAgIDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNywxNywwLDAsMCw5NSw5OSw5NywxMDgsOTksCi0gICAgOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNywyNywwLDAsCi0gICAgMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDEwLDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDExNyw2LDAsMCwwLAotICAgIDk1LDExNSwxMDEsMTE2LDExNywxMTIsMTE3LDgsMCwwLDAsOTUsMTA1LDExMCwxMTUsMTE2LAotICAgIDk3LDEwOCwxMDgsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDYyLDgsMCwwLDAsMTE1LDEzMiwwLDAsMCw2LDIxLDYsMywxMiwxMywKLSAgICAxMiwxNiwxMiwxMywxMiwxMiwxMiwxMiwxMiwxMCwxMiw2LDEyLDcsMTUsMjIsCi0gICAgMTIsOCwxNSwzLDEyLDEyLDYsMiw2LDMsMjIsNCwxOSw2OCwxOSwyMywKLSAgICAxMiwxOSwxMiwyMCwxMiwxMDAsMzQsMSwzNywyLDYsMiw5LDIsOSwxLAotICAgIDksMiwxNSwyNywxMiwyMywxMiwxOSwxOCw4LDEyLDEzLDEyLDExLDEyLDU1LAotICAgIDEyLDE4LDEyLDExLDEyLDExLDEyLDE3LDE5LDU3LDE5LDU0LDE5LDUwLDE5LDgzLAotICAgIDIyLDEzNCwxOSwyOSwyNSw0OSwyNSwyNSw2LDMsMTksNDUsMTksNTUsMTksMTgsCi0gICAgMTksOTEsMTksMTI4LDE5LDEzLDEyLDksMTIsMTcsMTIsMTcsNiwyLDEyLDUwLAotICAgIDEyLDEzLDE4LDI0LDEyLDM0LDEyLDE1LDEyLDExLDI0LDM2LDEyLDc5LAorICAgIDAsMSwxMDAsMiwwLDgzLDQxLDMsMTIyLDUwLDczLDExMCwxMTUsMTE2LDk3LDEwOCwKKyAgICAxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5NywxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsCisgICAgMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMTE0LDEzMCwxLDAsCisgICAgMCw3OCw0MSwxNSwxMTQsMTM2LDEsMCwwLDExNCwyNDAsMCwwLDAsMTE0LDcsCisgICAgMCwwLDAsMTE0LDc4LDEsMCwwLDExNCwxOTcsMCwwLDAsMTE0LDg2LDEsCisgICAgMCwwLDExNCwxMDAsMSwwLDAsMTE0LDEwNiwxLDAsMCwxMTQsMjIzLDAsMCwKKyAgICAwLDExNCwxMCwxLDAsMCwxMTQsMTksMSwwLDAsMTE0LDMsMCwwLDAsCisgICAgMTE0LDU3LDAsMCwwLDExNCwyMiwxLDAsMCwxMTQsNzMsMSwwLDAsNDEsCisgICAgMywxMTQsMTM0LDEsMCwwLDExNCwxMzUsMSwwLDAsOTAsMTcsMTE1LDExNywxMTIsCisgICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsCisgICAgMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTQ4LDksMCwwLDExNSwxNiwwLDAsMCwKKyAgICAwLDIsMTMsMSw5LDEsMjgsMSwxNiwxLDE2LDEsMTUsMSwxOSwxLAorICAgIDExNCwxMzcsMSwwLDAsNDEsMywxMjIsMywxMTksMTA1LDExMCwxMTQsMSwwLDAsCisgICAgMCwxMTQsMiwwLDAsMCw0MSw5MiwxMTQsNTksMCwwLDAsMTE0LDEwLDAsCisgICAgMCwwLDExNCwxMSwwLDAsMCwxMTQsMTcsMCwwLDAsMTE0LDE5LDAsMCwKKyAgICAwLDExNCwyOCwwLDAsMCwxMTQsMzgsMCwwLDAsMTE0LDM5LDAsMCwwLAorICAgIDExNCw0MywwLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDQ2LDAsMCwwLDExNCwKKyAgICA1NSwwLDAsMCwxMTQsNjUsMCwwLDAsMTE0LDY4LDAsMCwwLDExNCw2NiwKKyAgICAwLDAsMCwyMTgsOCw5NSw5NSw5OSwxMTEsMTAwLDEwMSw5NSw5NSwxMTQsMTkzLDAsCisgICAgMCwwLDExNCw2OSwwLDAsMCwxMTQsMTA5LDAsMCwwLDExNCw5MiwwLDAsCisgICAgMCwxMTQsOTksMCwwLDAsMTE0LDgyLDAsMCwwLDExNCw4MywwLDAsMCwKKyAgICAxMTQsMTAyLDAsMCwwLDExNCwxMDMsMCwwLDAsMTE0LDEwNSwwLDAsMCwxMTQsCisgICAgMTEyLDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDE1LDAsMCwwLDExNCwxODUsCisgICAgMCwwLDAsMTE0LDE0LDAsMCwwLDExNCwxOCwwLDAsMCw5MCwxNyw5NSwKKyAgICA4Miw2NSw4Nyw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwKKyAgICAxMTQsMTI1LDAsMCwwLDExNCwxMzQsMCwwLDAsMTE0LDExOSwwLDAsMCwxMTQsCisgICAgMTIwLDAsMCwwLDExNCwxMzIsMCwwLDAsMTE0LDEzNSwwLDAsMCwxMTQsMTQyLAorICAgIDAsMCwwLDExNCwxNDQsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMTU2LDAsCisgICAgMCwwLDExNCwxNjEsMCwwLDAsMTE0LDE2NCwwLDAsMCwxMTQsMTcyLDAsMCwKKyAgICAwLDExNCwxODAsMCwwLDAsMTE0LDE5MCwwLDAsMCwxMTQsMTk1LDAsMCwwLAorICAgIDExNCwxOTgsMCwwLDAsMTE0LDIwMywwLDAsMCwxMTQsMjExLDAsMCwwLDExNCwKKyAgICAyMTIsMCwwLDAsMTE0LDIxNiwwLDAsMCwxMTQsMTczLDAsMCwwLDIxOCw2LAorICAgIDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTQsMjQxLDAsMCwwLDExNCwyMzksMCwwLDAsCisgICAgMTE0LDI0NywwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCw5LDEsMCwwLDExNCwKKyAgICAxMCwxLDAsMCwxMTQsMTksMSwwLDAsMTE0LDIyLDEsMCwwLDExNCwzMiwKKyAgICAxLDAsMCwxMTQsMzMsMSwwLDAsMTE0LDQ4LDEsMCwwLDExNCw4LDEsCisgICAgMCwwLDExNCw3LDEsMCwwLDExNCw1OSwxLDAsMCwxMTQsNTYsMSwwLAorICAgIDAsMTE0LDYwLDEsMCwwLDExNCwyNTEsMCwwLDAsMTE0LDczLDEsMCwwLAorICAgIDExNCw4NiwxLDAsMCwxMTQsMTAxLDEsMCwwLDExNCwxMDQsMSwwLDAsMTE0LAorICAgIDEwNSwxLDAsMCwxMTQsMTA3LDEsMCwwLDExNCwxMTAsMSwwLDAsMTE0LDExOSwKKyAgICAxLDAsMCwxMTQsMTExLDEsMCwwLDExNCwxMTMsMSwwLDAsMTE0LDExNCwxLAorICAgIDAsMCwxMTQsMTE1LDEsMCwwLDExNCwxMjEsMSwwLDAsMTE0LDEyMywxLDAsCisgICAgMCwxMTQsMjQwLDAsMCwwLDExNCwxMjYsMSwwLDAsMTE0LDEyNywxLDAsMCwKKyAgICAxMTQsMTM2LDEsMCwwLDExNCwxMzcsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsCisgICAgNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNjIsOCwwLDAsMCwxMTUsMTcwLDAsMCwKKyAgICAwLDYsMTcsNiwzLDEyLDEyLDEyLDUsMTIsNSwxMiw2LDEyLDEyLDEyLAorICAgIDEwLDEyLDksMTIsNSwxMiw3LDE1LDIyLDEyLDgsMTIsNCwxNSw0LDE5LAorICAgIDIwLDYsMiw2LDMsMjIsNCwxOSw2OCwxOSwyMSwxOSwxOSwxMiwxOSwxMiwKKyAgICAyMCwxMiwxMTQsMjIsMSwxOCwyLDYsMiw5LDIsOSwxLDksMiwxNSwKKyAgICAyNywxMiwyMywxMiwxOSwxMiwxMiwxOCw4LDEyLDE4LDEyLDExLDEyLDExLDEyLAorICAgIDE3LDEyLDE2LDIxLDU1LDIxLDEyLDE4LDEwLDEyLDE0LDEyLDM2LDE5LDI3LDE5LAorICAgIDEwNiwyNCwyMiw5LDMsMTIsMSwxNSw2MywxOCw0NSwxOSwyMzAsMTUsMjUsMTksCisgICAgNzAsMTksNzEsMTksNjMsMTksMjQsMjIsMTEwLDE5LDQxLDI1LDQzLDI1LDE2LDYsCisgICAgMywxOSw1NywxOSw1NywxOSwzOCwxOSwxMjksMTksMTQ2LDE5LDEzLDEyLDksMTIsCisgICAgOSwxNSw0MCwxMiwxNyw2LDEsMTAsMiwxMiwyNywxMiw2LDE4LDI0LDEyLAorICAgIDMyLDEyLDE1LDEyLDExLDI0LDM1LDEyLDgsMTIsODcsCiB9OwpkaWZmIC0tZ2l0IGEvUHl0aG9uL21hcnNoYWwuYyBiL1B5dGhvbi9tYXJzaGFsLmMKaW5kZXggY2MxNzMyOS4uZGM1NDExYyAxMDA2NDQKLS0tIGEvUHl0aG9uL21hcnNoYWwuYworKysgYi9QeXRob24vbWFyc2hhbC5jCkBAIC0xLDggKzEsMTAgQEAKIAogLyogV3JpdGUgUHl0aG9uIG9iamVjdHMgdG8gZmlsZXMgYW5kIHJlYWQgdGhlbSBiYWNrLgotICAgVGhpcyBpcyBpbnRlbmRlZCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBjb21waWxlZCBQeXRob24gY29kZSBvbmx5OwotICAgYSB0cnVlIHBlcnNpc3RlbnQgc3RvcmFnZSBmYWNpbGl0eSB3b3VsZCBiZSBtdWNoIGhhcmRlciwgc2luY2UKLSAgIGl0IHdvdWxkIGhhdmUgdG8gdGFrZSBjaXJjdWxhciBsaW5rcyBhbmQgc2hhcmluZyBpbnRvIGFjY291bnQuICovCisgICBUaGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBjb21waWxlZCBQeXRob24gY29kZSwKKyAgIGV2ZW4gdGhvdWdoIGRpY3RzLCBsaXN0cywgc2V0cyBhbmQgZnJvemVuc2V0cywgbm90IGNvbW1vbmx5IHNlZW4gaW4KKyAgIGNvZGUgb2JqZWN0cywgYXJlIHN1cHBvcnRlZC4KKyAgIFZlcnNpb24gMyBvZiB0aGlzIHByb3RvY29sIHByb3Blcmx5IHN1cHBvcnRzIGNpcmN1bGFyIGxpbmtzCisgICBhbmQgc2hhcmluZy4gKi8KIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAKQEAgLTMxLDE2ICszMywxNCBAQAogI2RlZmluZSBUWVBFX1NUT1BJVEVSICAgICAgICAgICAnUycKICNkZWZpbmUgVFlQRV9FTExJUFNJUyAgICAgICAgICAgJy4nCiAjZGVmaW5lIFRZUEVfSU5UICAgICAgICAgICAgICAgICdpJwotLyogVFlQRV9JTlQ2NCBpcyBkZXByZWNhdGVkLiBJdCBpcyBub3QKLSAgIGdlbmVyYXRlZCBhbnltb3JlLCBhbmQgc3VwcG9ydCBmb3IgcmVhZGluZyBpdAotICAgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQuICovCi0jZGVmaW5lIFRZUEVfSU5UNjQgICAgICAgICAgICAgICdJJwogI2RlZmluZSBUWVBFX0ZMT0FUICAgICAgICAgICAgICAnZicKICNkZWZpbmUgVFlQRV9CSU5BUllfRkxPQVQgICAgICAgJ2cnCiAjZGVmaW5lIFRZUEVfQ09NUExFWCAgICAgICAgICAgICd4JwogI2RlZmluZSBUWVBFX0JJTkFSWV9DT01QTEVYICAgICAneScKICNkZWZpbmUgVFlQRV9MT05HICAgICAgICAgICAgICAgJ2wnCiAjZGVmaW5lIFRZUEVfU1RSSU5HICAgICAgICAgICAgICdzJworI2RlZmluZSBUWVBFX0lOVEVSTkVEICAgICAgICAgICAndCcKKyNkZWZpbmUgVFlQRV9SRUYgICAgICAgICAgICAgICAgJ3InCiAjZGVmaW5lIFRZUEVfVFVQTEUgICAgICAgICAgICAgICcoJwogI2RlZmluZSBUWVBFX0xJU1QgICAgICAgICAgICAgICAnWycKICNkZWZpbmUgVFlQRV9ESUNUICAgICAgICAgICAgICAgJ3snCkBAIC00OSw2ICs0OSwxMyBAQAogI2RlZmluZSBUWVBFX1VOS05PV04gICAgICAgICAgICAnPycKICNkZWZpbmUgVFlQRV9TRVQgICAgICAgICAgICAgICAgJzwnCiAjZGVmaW5lIFRZUEVfRlJPWkVOU0VUICAgICAgICAgICc+JworI2RlZmluZSBGTEFHX1JFRiAgICAgICAgICAgICAgICAnXHg4MCcgLyogd2l0aCBhIHR5cGUsIGFkZCBvYmogdG8gaW5kZXggKi8KKworI2RlZmluZSBUWVBFX0FTQ0lJICAgICAgICAgICAgICAnYScKKyNkZWZpbmUgVFlQRV9BU0NJSV9JTlRFUk5FRCAgICAgJ0EnCisjZGVmaW5lIFRZUEVfU01BTExfVFVQTEUgICAgICAgICcpJworI2RlZmluZSBUWVBFX1NIT1JUX0FTQ0lJICAgICAgICAneicKKyNkZWZpbmUgVFlQRV9TSE9SVF9BU0NJSV9JTlRFUk5FRCAnWicKIAogI2RlZmluZSBXRkVSUl9PSyAwCiAjZGVmaW5lIFdGRVJSX1VOTUFSU0hBTExBQkxFIDEKQEAgLTY1LDE1ICs3MiwxOCBAQAogICAgIFB5T2JqZWN0ICpjdXJyZW50X2ZpbGVuYW1lOwogICAgIGNoYXIgKnB0cjsKICAgICBjaGFyICplbmQ7CisgICAgY2hhciAqYnVmOworICAgIFB5X3NzaXplX3QgYnVmX3NpemU7CisgICAgUHlPYmplY3QgKnJlZnM7IC8qIGRpY3Qgb24gbWFyc2hhbCwgbGlzdCBvbiB1bm1hcnNoYWwgKi8KICAgICBpbnQgdmVyc2lvbjsKIH0gV0ZJTEU7CiAKICNkZWZpbmUgd19ieXRlKGMsIHApIGlmICgoKHApLT5mcCkpIHB1dGMoKGMpLCAocCktPmZwKTsgXAogICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwKS0+cHRyICE9IChwKS0+ZW5kKSAqKHApLT5wdHIrKyA9IChjKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB3X21vcmUoYywgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd19tb3JlKChjKSwgcCkKIAogc3RhdGljIHZvaWQKLXdfbW9yZShpbnQgYywgV0ZJTEUgKnApCit3X21vcmUoY2hhciBjLCBXRklMRSAqcCkKIHsKICAgICBQeV9zc2l6ZV90IHNpemUsIG5ld3NpemU7CiAgICAgaWYgKHAtPnN0ciA9PSBOVUxMKQpAQCAtOTAsNyArMTAwLDcgQEAKICAgICAgICAgcC0+cHRyID0gUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKilwLT5zdHIpICsgc2l6ZTsKICAgICAgICAgcC0+ZW5kID0KICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopcC0+c3RyKSArIG5ld3NpemU7Ci0gICAgICAgICpwLT5wdHIrKyA9IFB5X1NBRkVfRE9XTkNBU1QoYywgaW50LCBjaGFyKTsKKyAgICAgICAgKnAtPnB0cisrID0gYzsKICAgICB9CiB9CiAKQEAgLTE0Niw2ICsxNTYsMTMgQEAKICAgICAgICAgd19zdHJpbmcocywgbiwgcCk7CiB9CiAKK3N0YXRpYyB2b2lkCit3X3Nob3J0X3BzdHJpbmcoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBuLCBXRklMRSAqcCkKK3sKKyAgICB3X2J5dGUoUHlfU0FGRV9ET1dOQ0FTVChuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBjaGFyKSwgcCk7CisgICAgd19zdHJpbmcocywgbiwgcCk7Cit9CisKIC8qIFdlIGFzc3VtZSB0aGF0IFB5dGhvbiBpbnRzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBpbiBiYXNlIHNvbWUgcG93ZXIgb2YKICAgIDIqKjE1OyBmb3IgdGhlIHNha2Ugb2YgcG9ydGFiaWxpdHkgd2UnbGwgYWx3YXlzIHJlYWQgYW5kIHdyaXRlIHRoZW0gaW4gYmFzZQogICAgZXhhY3RseSAyKioxNS4gKi8KQEAgLTE1OCwxMyArMTc1LDE3IEBACiAjZW5kaWYKICNkZWZpbmUgUHlMb25nX01BUlNIQUxfUkFUSU8gKFB5TG9uZ19TSElGVCAvIFB5TG9uZ19NQVJTSEFMX1NISUZUKQogCisjZGVmaW5lIFdfVFlQRSh0LCBwKSBkbyB7IFwKKyAgICB3X2J5dGUoKHQpIHwgZmxhZywgKHApKTsgXAorfSB3aGlsZSgwKQorCiBzdGF0aWMgdm9pZAotd19QeUxvbmcoY29uc3QgUHlMb25nT2JqZWN0ICpvYiwgV0ZJTEUgKnApCit3X1B5TG9uZyhjb25zdCBQeUxvbmdPYmplY3QgKm9iLCBjaGFyIGZsYWcsIFdGSUxFICpwKQogewogICAgIFB5X3NzaXplX3QgaSwgaiwgbiwgbDsKICAgICBkaWdpdCBkOwogCi0gICAgd19ieXRlKFRZUEVfTE9ORywgcCk7CisgICAgV19UWVBFKFRZUEVfTE9ORywgcCk7CiAgICAgaWYgKFB5X1NJWkUob2IpID09IDApIHsKICAgICAgICAgd19sb25nKChsb25nKTAsIHApOwogICAgICAgICByZXR1cm47CkBAIC0yMDEsMTAgKzIyMiw2NCBAQAogICAgIH0gd2hpbGUgKGQgIT0gMCk7CiB9CiAKK3N0YXRpYyBpbnQKK3dfcmVmKFB5T2JqZWN0ICp2LCBjaGFyICpmbGFnLCBXRklMRSAqcCkKK3sKKyAgICBQeU9iamVjdCAqaWQ7CisgICAgUHlPYmplY3QgKmlkeDsKKworICAgIGlmIChwLT52ZXJzaW9uIDwgMyB8fCBwLT5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOyAvKiBub3Qgd3JpdGluZyBvYmplY3QgcmVmZXJlbmNlcyAqLworCisgICAgLyogaWYgaXQgaGFzIG9ubHkgb25lIHJlZmVyZW5jZSwgaXQgZGVmaW5pdGVseSBpc24ndCBzaGFyZWQgKi8KKyAgICBpZiAoUHlfUkVGQ05UKHYpID09IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWQgPSBQeUxvbmdfRnJvbVZvaWRQdHIoKHZvaWQqKXYpOworICAgIGlmIChpZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycjsKKyAgICBpZHggPSBQeURpY3RfR2V0SXRlbShwLT5yZWZzLCBpZCk7CisgICAgaWYgKGlkeCAhPSBOVUxMKSB7CisgICAgICAgIC8qIHdyaXRlIHRoZSByZWZlcmVuY2UgaW5kZXggdG8gdGhlIHN0cmVhbSAqLworICAgICAgICBsb25nIHcgPSBQeUxvbmdfQXNMb25nKGlkeCk7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIGlmICh3ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgICAgIC8qIHdlIGRvbid0IHN0b3JlICJsb25nIiBpbmRpY2VzIGluIHRoZSBkaWN0ICovCisgICAgICAgIGFzc2VydCgwIDw9IHcgJiYgdyA8PSAweDdmZmZmZmZmKTsKKyAgICAgICAgd19ieXRlKFRZUEVfUkVGLCBwKTsKKyAgICAgICAgd19sb25nKHcsIHApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgb2s7CisgICAgICAgIFB5X3NzaXplX3QgcyA9IFB5RGljdF9TaXplKHAtPnJlZnMpOworICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IGxvbmcgaW5kaWNlcyAqLworICAgICAgICBpZiAocyA+PSAweDdmZmZmZmZmKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInRvbyBtYW55IG9iamVjdHMiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgICAgIGlkeCA9IFB5TG9uZ19Gcm9tU3NpemVfdChzKTsKKyAgICAgICAgb2sgPSBpZHggJiYgUHlEaWN0X1NldEl0ZW0ocC0+cmVmcywgaWQsIGlkeCkgPT0gMDsKKyAgICAgICAgUHlfREVDUkVGKGlkKTsKKyAgICAgICAgUHlfWERFQ1JFRihpZHgpOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICpmbGFnIHw9IEZMQUdfUkVGOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CitlcnI6CisgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3dfY29tcGxleF9vYmplY3QoUHlPYmplY3QgKnYsIGNoYXIgZmxhZywgV0ZJTEUgKnApOworCiBzdGF0aWMgdm9pZAogd19vYmplY3QoUHlPYmplY3QgKnYsIFdGSUxFICpwKQogewotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBjaGFyIGZsYWcgPSAnXDAnOwogCiAgICAgcC0+ZGVwdGgrKzsKIApAQCAtMjI5LDI0ICszMDQsMzUgQEAKICAgICBlbHNlIGlmICh2ID09IFB5X1RydWUpIHsKICAgICAgICAgd19ieXRlKFRZUEVfVFJVRSwgcCk7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpKSB7CisgICAgZWxzZSBpZiAoIXdfcmVmKHYsICZmbGFnLCBwKSkKKyAgICAgICAgd19jb21wbGV4X29iamVjdCh2LCBmbGFnLCBwKTsKKworICAgIHAtPmRlcHRoLS07Cit9CisKK3N0YXRpYyB2b2lkCit3X2NvbXBsZXhfb2JqZWN0KFB5T2JqZWN0ICp2LCBjaGFyIGZsYWcsIFdGSUxFICpwKQoreworICAgIFB5X3NzaXplX3QgaSwgbjsKKworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkgewogICAgICAgICBsb25nIHggPSBQeUxvbmdfQXNMb25nKHYpOwogICAgICAgICBpZiAoKHggPT0gLTEpICAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeUxvbmdPYmplY3QgKm9iID0gKFB5TG9uZ09iamVjdCAqKXY7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgd19QeUxvbmcob2IsIHApOworICAgICAgICAgICAgd19QeUxvbmcob2IsIGZsYWcsIHApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogI2lmIFNJWkVPRl9MT05HID4gNAogICAgICAgICAgICAgbG9uZyB5ID0gUHlfQVJJVEhNRVRJQ19SSUdIVF9TSElGVChsb25nLCB4LCAzMSk7CiAgICAgICAgICAgICBpZiAoeSAmJiB5ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgLyogVG9vIGxhcmdlIGZvciBUWVBFX0lOVCAqLwotICAgICAgICAgICAgICAgIHdfUHlMb25nKChQeUxvbmdPYmplY3QqKXYsIHApOworICAgICAgICAgICAgICAgIHdfUHlMb25nKChQeUxvbmdPYmplY3QqKXYsIGZsYWcsIHApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd19ieXRlKFRZUEVfSU5ULCBwKTsKKyAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9JTlQsIHApOwogICAgICAgICAgICAgICAgIHdfbG9uZyh4LCBwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjU5LDcgKzM0NSw3IEBACiAgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9CSU5BUllfRkxPQVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQklOQVJZX0ZMT0FULCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKChjaGFyKilidWYsIDgsIHApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtMjcwLDcgKzM1Niw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbiA9IHN0cmxlbihidWYpOwotICAgICAgICAgICAgd19ieXRlKFRZUEVfRkxPQVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfRkxPQVQsIHApOwogICAgICAgICAgICAgd19ieXRlKChpbnQpbiwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZyhidWYsIG4sIHApOwogICAgICAgICAgICAgUHlNZW1fRnJlZShidWYpOwpAQCAtMjg0LDcgKzM3MCw3IEBACiAgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9CSU5BUllfQ09NUExFWCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9CSU5BUllfQ09NUExFWCwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZygoY2hhciopYnVmLCA4LCBwKTsKICAgICAgICAgICAgIGlmIChfUHlGbG9hdF9QYWNrOChQeUNvbXBsZXhfSW1hZ0FzRG91YmxlKHYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgMSkgPCAwKSB7CkBAIC0yOTUsNyArMzgxLDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0NPTVBMRVgsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQ09NUExFWCwgcCk7CiAgICAgICAgICAgICBidWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoUHlDb21wbGV4X1JlYWxBc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZycsIDE3LCAwLCBOVUxMKTsKICAgICAgICAgICAgIGlmICghYnVmKSB7CkBAIC0zMTksMzEgKzQwNSw2MSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICB3X2J5dGUoVFlQRV9TVFJJTkcsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9TVFJJTkcsIHApOwogICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodiksIFB5Qnl0ZXNfR0VUX1NJWkUodiksIHApOwogICAgIH0KICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICBQeU9iamVjdCAqdXRmODsKLSAgICAgICAgdXRmOCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodiwgInV0ZjgiLCAic3Vycm9nYXRlcGFzcyIpOwotICAgICAgICBpZiAodXRmOCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwLT5kZXB0aC0tOwotICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHAtPnZlcnNpb24gPj0gNCAmJiBQeVVuaWNvZGVfSVNfQVNDSUkodikpIHsKKyAgICAgICAgICAgIGludCBpc19zaG9ydCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpIDwgMjU2OworICAgICAgICAgICAgaWYgKGlzX3Nob3J0KSB7CisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfU0hPUlRfQVNDSUlfSU5URVJORUQsIHApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfU0hPUlRfQVNDSUksIHApOworICAgICAgICAgICAgICAgIHdfc2hvcnRfcHN0cmluZygoY2hhciAqKSBQeVVuaWNvZGVfMUJZVEVfREFUQSh2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodiksIHApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfQVNDSUlfSU5URVJORUQsIHApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfQVNDSUksIHApOworICAgICAgICAgICAgICAgIHdfcHN0cmluZygoY2hhciAqKSBQeVVuaWNvZGVfMUJZVEVfREFUQSh2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodiksIHApOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHdfYnl0ZShUWVBFX1VOSUNPREUsIHApOwotICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodXRmOCksIFB5Qnl0ZXNfR0VUX1NJWkUodXRmOCksIHApOwotICAgICAgICBQeV9ERUNSRUYodXRmOCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKnV0Zjg7CisgICAgICAgICAgICB1dGY4ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh2LCAidXRmOCIsICJzdXJyb2dhdGVwYXNzIik7CisgICAgICAgICAgICBpZiAodXRmOCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcC0+ZGVwdGgtLTsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDMgJiYgIFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9JTlRFUk5FRCwgcCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfVU5JQ09ERSwgcCk7CisgICAgICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodXRmOCksIFB5Qnl0ZXNfR0VUX1NJWkUodXRmOCksIHApOworICAgICAgICAgICAgUHlfREVDUkVGKHV0ZjgpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICB3X2J5dGUoVFlQRV9UVVBMRSwgcCk7CiAgICAgICAgIG4gPSBQeVR1cGxlX1NpemUodik7Ci0gICAgICAgIFdfU0laRShuLCBwKTsKKyAgICAgICAgaWYgKHAtPnZlcnNpb24gPj0gNCAmJiBuIDwgMjU2KSB7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9TTUFMTF9UVVBMRSwgcCk7CisgICAgICAgICAgICB3X2J5dGUoKHVuc2lnbmVkIGNoYXIpbiwgcCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9UVVBMRSwgcCk7CisgICAgICAgICAgICBXX1NJWkUobiwgcCk7CisgICAgICAgIH0KICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgd19vYmplY3QoUHlUdXBsZV9HRVRfSVRFTSh2LCBpKSwgcCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoUHlMaXN0X0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfTElTVCwgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX0xJU1QsIHApOwogICAgICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHYpOwogICAgICAgICBXX1NJWkUobiwgcCk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTM1Myw3ICs0NjksNyBAQAogICAgIGVsc2UgaWYgKFB5RGljdF9DaGVja0V4YWN0KHYpKSB7CiAgICAgICAgIFB5X3NzaXplX3QgcG9zOwogICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0RJQ1QsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9ESUNULCBwKTsKICAgICAgICAgLyogVGhpcyBvbmUgaXMgTlVMTCBvYmplY3QgdGVybWluYXRlZCEgKi8KICAgICAgICAgcG9zID0gMDsKICAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KHYsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKQEAgLTM2Niw5ICs0ODIsOSBAQAogICAgICAgICBQeU9iamVjdCAqdmFsdWUsICppdDsKIAogICAgICAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeVNldF9UeXBlKSkKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX1NFVCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9TRVQsIHApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB3X2J5dGUoVFlQRV9GUk9aRU5TRVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfRlJPWkVOU0VULCBwKTsKICAgICAgICAgbiA9IFB5T2JqZWN0X1NpemUodik7CiAgICAgICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgICAgICBwLT5kZXB0aC0tOwpAQCAtMzk1LDcgKzUxMSw3IEBACiAgICAgfQogICAgIGVsc2UgaWYgKFB5Q29kZV9DaGVjayh2KSkgewogICAgICAgICBQeUNvZGVPYmplY3QgKmNvID0gKFB5Q29kZU9iamVjdCAqKXY7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0NPREUsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9DT0RFLCBwKTsKICAgICAgICAgd19sb25nKGNvLT5jb19hcmdjb3VudCwgcCk7CiAgICAgICAgIHdfbG9uZyhjby0+Y29fa3dvbmx5YXJnY291bnQsIHApOwogICAgICAgICB3X2xvbmcoY28tPmNvX25sb2NhbHMsIHApOwpAQCAtNDIxLDE1ICs1MzcsMTQgQEAKICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgd19ieXRlKFRZUEVfU1RSSU5HLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfU1RSSU5HLCBwKTsKICAgICAgICAgd19wc3RyaW5nKHZpZXcuYnVmLCB2aWV3LmxlbiwgcCk7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgd19ieXRlKFRZUEVfVU5LTk9XTiwgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX1VOS05PV04sIHApOwogICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgIH0KLSAgICBwLT5kZXB0aC0tOwogfQogCiAvKiB2ZXJzaW9uIGN1cnJlbnRseSBoYXMgbm8gZWZmZWN0IGZvciB3cml0aW5nIGludHMuICovCkBAIC00NDAsNiArNTU1LDcgQEAKICAgICB3Zi5mcCA9IGZwOwogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOworICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHdfbG9uZyh4LCAmd2YpOwogfQpAQCAtNDUxLDgxICs1NjcsMTA3IEBACiAgICAgd2YuZnAgPSBmcDsKICAgICB3Zi5lcnJvciA9IFdGRVJSX09LOwogICAgIHdmLmRlcHRoID0gMDsKKyAgICBpZiAodmVyc2lvbiA+PSAzKSB7CisgICAgICAgIGlmICgod2YucmVmcyA9IFB5RGljdF9OZXcoKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybjsgLyogY2FsbGVyIG11c2ggY2hlY2sgUHlFcnJfT2NjdXJyZWQoKSAqLworICAgIH0gZWxzZQorICAgICAgICB3Zi5yZWZzID0gTlVMTDsKICAgICB3Zi52ZXJzaW9uID0gdmVyc2lvbjsKICAgICB3X29iamVjdCh4LCAmd2YpOworICAgIFB5X1hERUNSRUYod2YucmVmcyk7CiB9CiAKIHR5cGVkZWYgV0ZJTEUgUkZJTEU7IC8qIFNhbWUgc3RydWN0IHdpdGggZGlmZmVyZW50IGludmFyaWFudHMgKi8KIAotI2RlZmluZSByc19ieXRlKHApICgoKHApLT5wdHIgPCAocCktPmVuZCkgPyAodW5zaWduZWQgY2hhcikqKHApLT5wdHIrKyA6IEVPRikKLQotc3RhdGljIFB5X3NzaXplX3QKLXJfc3RyaW5nKGNoYXIgKnMsIFB5X3NzaXplX3QgbiwgUkZJTEUgKnApCitzdGF0aWMgY2hhciAqCityX3N0cmluZyhQeV9zc2l6ZV90IG4sIFJGSUxFICpwKQogewotICAgIGNoYXIgKnB0cjsKLSAgICBQeV9zc2l6ZV90IHJlYWQsIGxlZnQ7CisgICAgUHlfc3NpemVfdCByZWFkID0gLTE7CisKKyAgICBpZiAocC0+cHRyICE9IE5VTEwpIHsKKyAgICAgICAgLyogRmFzdCBwYXRoIGZvciBsb2FkcygpICovCisgICAgICAgIGNoYXIgKnJlcyA9IHAtPnB0cjsKKyAgICAgICAgUHlfc3NpemVfdCBsZWZ0ID0gcC0+ZW5kIC0gcC0+cHRyOworICAgICAgICBpZiAobGVmdCA8IG4pIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFyc2hhbCBkYXRhIHRvbyBzaG9ydCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcC0+cHRyICs9IG47CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGlmIChwLT5idWYgPT0gTlVMTCkgeworICAgICAgICBwLT5idWYgPSBQeU1lbV9NQUxMT0Mobik7CisgICAgICAgIGlmIChwLT5idWYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHAtPmJ1Zl9zaXplID0gbjsKKyAgICB9CisgICAgZWxzZSBpZiAocC0+YnVmX3NpemUgPCBuKSB7CisgICAgICAgIHAtPmJ1ZiA9IFB5TWVtX1JFQUxMT0MocC0+YnVmLCBuKTsKKyAgICAgICAgaWYgKHAtPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcC0+YnVmX3NpemUgPSBuOworICAgIH0KIAogICAgIGlmICghcC0+cmVhZGFibGUpIHsKLSAgICAgICAgaWYgKHAtPmZwICE9IE5VTEwpCi0gICAgICAgICAgICAvKiBUaGUgcmVzdWx0IGZpdHMgaW50byBpbnQgYmVjYXVzZSBpdCBtdXN0IGJlIDw9bi4gKi8KLSAgICAgICAgICAgIHJlYWQgPSBmcmVhZChzLCAxLCBuLCBwLT5mcCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbGVmdCA9IHAtPmVuZCAtIHAtPnB0cjsKLSAgICAgICAgICAgIHJlYWQgPSAobGVmdCA8IG4pID8gbGVmdCA6IG47Ci0gICAgICAgICAgICBtZW1jcHkocywgcC0+cHRyLCByZWFkKTsKLSAgICAgICAgICAgIHAtPnB0ciArPSByZWFkOwotICAgICAgICB9CisgICAgICAgIGFzc2VydChwLT5mcCAhPSBOVUxMKTsKKyAgICAgICAgcmVhZCA9IGZyZWFkKHAtPmJ1ZiwgMSwgbiwgcC0+ZnApOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CisgICAgICAgIF9QeV9JREVOVElGSUVSKHJlYWRpbnRvKTsKKyAgICAgICAgUHlPYmplY3QgKnJlcywgKm12aWV3OworICAgICAgICBQeV9idWZmZXIgYnVmOwogCi0gICAgICAgIFB5T2JqZWN0ICpkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChwLT5yZWFkYWJsZSwgJlB5SWRfcmVhZCwgIm4iLCBuKTsKLSAgICAgICAgcmVhZCA9IDA7Ci0gICAgICAgIGlmIChkYXRhICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmLnJlYWQoKSByZXR1cm5lZCBub3QgYnl0ZXMgYnV0ICUuMTAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9iX3R5cGUtPnRwX25hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVhZCA9IFB5Qnl0ZXNfR0VUX1NJWkUoZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkID4gbikgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIHJldHVybmVkIHRvbyBtdWNoIGRhdGE6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlemQgYnl0ZXMgcmVxdWVzdGVkLCAlemQgcmV0dXJuZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgcmVhZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFkID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSBQeUJ5dGVzX0FTX1NUUklORyhkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShzLCBwdHIsIHJlYWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICBpZiAoUHlCdWZmZXJfRmlsbEluZm8oJmJ1ZiwgTlVMTCwgcC0+YnVmLCBuLCAwLCBQeUJVRl9DT05USUcpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG12aWV3ID0gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJmJ1Zik7CisgICAgICAgIGlmIChtdmlldyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChwLT5yZWFkYWJsZSwgJlB5SWRfcmVhZGludG8sICJOIiwgbXZpZXcpOworICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHJlYWQgPSBQeU51bWJlcl9Bc1NzaXplX3QocmVzLCBQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSAmJiAocmVhZCA8IG4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkVPRiByZWFkIHdoZXJlIG5vdCBleHBlY3RlZCIpOworICAgIGlmIChyZWFkICE9IG4pIHsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBpZiAocmVhZCA+IG4pCisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgcmV0dXJuZWQgdG9vIG11Y2ggZGF0YTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXpkIGJ5dGVzIHJlcXVlc3RlZCwgJXpkIHJldHVybmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgcmVhZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgbm90IGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiByZWFkOworICAgIHJldHVybiBwLT5idWY7CiB9CiAKLQogc3RhdGljIGludAogcl9ieXRlKFJGSUxFICpwKQogewogICAgIGludCBjID0gRU9GOwotICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0gICAgUHlfc3NpemVfdCBuOwogCi0gICAgaWYgKCFwLT5yZWFkYWJsZSkKLSAgICAgICAgYyA9IHAtPmZwID8gZ2V0YyhwLT5mcCkgOiByc19ieXRlKHApOworICAgIGlmIChwLT5wdHIgIT0gTlVMTCkgeworICAgICAgICBpZiAocC0+cHRyIDwgcC0+ZW5kKQorICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcC0+cHRyKys7CisgICAgICAgIHJldHVybiBjOworICAgIH0KKyAgICBpZiAoIXAtPnJlYWRhYmxlKSB7CisgICAgICAgIGFzc2VydChwLT5mcCk7CisgICAgICAgIGMgPSBnZXRjKHAtPmZwKTsKKyAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIG4gPSByX3N0cmluZygoY2hhciAqKSAmY2gsIDEsIHApOwotICAgICAgICBpZiAobiA+IDApCi0gICAgICAgICAgICBjID0gY2g7CisgICAgICAgIGNoYXIgKnB0ciA9IHJfc3RyaW5nKDEsIHApOworICAgICAgICBpZiAocHRyICE9IE5VTEwpCisgICAgICAgICAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHB0cjsKICAgICB9CiAgICAgcmV0dXJuIGM7CiB9CkBAIC01MzMsNjkgKzY3NSwzNyBAQAogc3RhdGljIGludAogcl9zaG9ydChSRklMRSAqcCkKIHsKLSAgICByZWdpc3RlciBzaG9ydCB4OwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOworICAgIHNob3J0IHggPSAtMTsKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAKLSAgICByX3N0cmluZygoY2hhciAqKSBidWZmZXIsIDIsIHApOwotICAgIHggPSBidWZmZXJbMF07Ci0gICAgeCB8PSBidWZmZXJbMV0gPDwgODsKLSAgICAvKiBTaWduLWV4dGVuc2lvbiwgaW4gY2FzZSBzaG9ydCBncmVhdGVyIHRoYW4gMTYgYml0cyAqLwotICAgIHggfD0gLSh4ICYgMHg4MDAwKTsKKyAgICBidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZygyLCBwKTsKKyAgICBpZiAoYnVmZmVyICE9IE5VTEwpIHsKKyAgICAgICAgeCA9IGJ1ZmZlclswXTsKKyAgICAgICAgeCB8PSBidWZmZXJbMV0gPDwgODsKKyAgICAgICAgLyogU2lnbi1leHRlbnNpb24sIGluIGNhc2Ugc2hvcnQgZ3JlYXRlciB0aGFuIDE2IGJpdHMgKi8KKyAgICAgICAgeCB8PSAtKHggJiAweDgwMDApOworICAgIH0KICAgICByZXR1cm4geDsKIH0KIAogc3RhdGljIGxvbmcKIHJfbG9uZyhSRklMRSAqcCkKIHsKLSAgICByZWdpc3RlciBsb25nIHg7Ci0gICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF07CisgICAgbG9uZyB4ID0gLTE7CisgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCi0gICAgcl9zdHJpbmcoKGNoYXIgKikgYnVmZmVyLCA0LCBwKTsKLSAgICB4ID0gYnVmZmVyWzBdOwotICAgIHggfD0gKGxvbmcpYnVmZmVyWzFdIDw8IDg7Ci0gICAgeCB8PSAobG9uZylidWZmZXJbMl0gPDwgMTY7Ci0gICAgeCB8PSAobG9uZylidWZmZXJbM10gPDwgMjQ7CisgICAgYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgcl9zdHJpbmcoNCwgcCk7CisgICAgaWYgKGJ1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgIHggPSBidWZmZXJbMF07CisgICAgICAgIHggfD0gKGxvbmcpYnVmZmVyWzFdIDw8IDg7CisgICAgICAgIHggfD0gKGxvbmcpYnVmZmVyWzJdIDw8IDE2OworICAgICAgICB4IHw9IChsb25nKWJ1ZmZlclszXSA8PCAyNDsKICNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAvKiBTaWduIGV4dGVuc2lvbiBmb3IgNjQtYml0IG1hY2hpbmVzICovCi0gICAgeCB8PSAtKHggJiAweDgwMDAwMDAwTCk7Ci0jZW5kaWYKLSAgICByZXR1cm4geDsKLX0KLQotLyogcl9sb25nNjQgZGVhbHMgd2l0aCB0aGUgVFlQRV9JTlQ2NCBjb2RlLiAgT24gYSBtYWNoaW5lIHdpdGgKLSAgIHNpemVvZihsb25nKSA+IDQsIGl0IHJldHVybnMgYSBQeXRob24gaW50IG9iamVjdCwgZWxzZSBhIFB5dGhvbiBsb25nCi0gICBvYmplY3QuICBOb3RlIHRoYXQgd19sb25nNjQgd3JpdGVzIG91dCBUWVBFX0lOVCBpZiAzMiBiaXRzIGlzIGVub3VnaCwKLSAgIHNvIHRoZXJlJ3Mgbm8gaW5lZmZpY2llbmN5IGhlcmUgaW4gcmV0dXJuaW5nIGEgUHlMb25nIG9uIDMyLWJpdCBib3hlcwotICAgZm9yIGV2ZXJ5dGhpbmcgd3JpdHRlbiB2aWEgVFlQRV9JTlQ2NCAoaS5lLiwgaWYgYW4gaW50IGlzIHdyaXR0ZW4gdmlhCi0gICBUWVBFX0lOVDY0LCBpdCAqbmVlZHMqIG1vcmUgdGhhbiAzMiBiaXRzKS4KLSovCi1zdGF0aWMgUHlPYmplY3QgKgotcl9sb25nNjQoUkZJTEUgKnApCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgbG9uZyBsbzQgPSByX2xvbmcocCk7Ci0gICAgbG9uZyBoaTQgPSByX2xvbmcocCk7Ci0KLSAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgbG9uZyB4ID0gKGhpNCA8PCAzMikgfCAobG80ICYgMHhGRkZGRkZGRkwpOwotICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcoeCk7Ci0jZWxzZQotICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKLSAgICAgICAgaW50IG9uZSA9IDE7Ci0gICAgICAgIGludCBpc19saXR0bGVfZW5kaWFuID0gKGludCkqKGNoYXIqKSZvbmU7Ci0gICAgICAgIGlmIChpc19saXR0bGVfZW5kaWFuKSB7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCAmbG80LCA0KTsKLSAgICAgICAgICAgIG1lbWNweShidWYrNCwgJmhpNCwgNCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCAmaGk0LCA0KTsKLSAgICAgICAgICAgIG1lbWNweShidWYrNCwgJmxvNCwgNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ1ZiwgOCwgaXNfbGl0dGxlX2VuZGlhbiwgMSk7CisgICAgICAgIC8qIFNpZ24gZXh0ZW5zaW9uIGZvciA2NC1iaXQgbWFjaGluZXMgKi8KKyAgICAgICAgeCB8PSAtKHggJiAweDgwMDAwMDAwTCk7CiAjZW5kaWYKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4geDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTYyMiwyNSArNzMyLDMxIEBACiAgICAgb2IgPSBfUHlMb25nX05ldyhzaXplKTsKICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9TSVpFKG9iKSA9IG4gPiAwID8gc2l6ZSA6IC1zaXplOwogCiAgICAgZm9yIChpID0gMDsgaSA8IHNpemUtMTsgaSsrKSB7CiAgICAgICAgIGQgPSAwOwogICAgICAgICBmb3IgKGo9MDsgaiA8IFB5TG9uZ19NQVJTSEFMX1JBVElPOyBqKyspIHsKICAgICAgICAgICAgIG1kID0gcl9zaG9ydChwKTsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2IpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1kIDwgMCB8fCBtZCA+IFB5TG9uZ19NQVJTSEFMX0JBU0UpCiAgICAgICAgICAgICAgICAgZ290byBiYWRfZGlnaXQ7CiAgICAgICAgICAgICBkICs9IChkaWdpdCltZCA8PCBqKlB5TG9uZ19NQVJTSEFMX1NISUZUOwogICAgICAgICB9CiAgICAgICAgIG9iLT5vYl9kaWdpdFtpXSA9IGQ7CiAgICAgfQorCiAgICAgZCA9IDA7CiAgICAgZm9yIChqPTA7IGogPCBzaG9ydHNfaW5fdG9wX2RpZ2l0OyBqKyspIHsKICAgICAgICAgbWQgPSByX3Nob3J0KHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGlmIChtZCA8IDAgfHwgbWQgPiBQeUxvbmdfTUFSU0hBTF9CQVNFKQogICAgICAgICAgICAgZ290byBiYWRfZGlnaXQ7CiAgICAgICAgIC8qIHRvcG1vc3QgbWFyc2hhbCBkaWdpdCBzaG91bGQgYmUgbm9uemVybyAqLwpAQCAtNjY3LDYgKzc4Myw1OSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKiBhbGxvY2F0ZSB0aGUgcmVmbGlzdCBpbmRleCBmb3IgYSBuZXcgb2JqZWN0LiBSZXR1cm4gLTEgb24gZmFpbHVyZSAqLworc3RhdGljIFB5X3NzaXplX3QKK3JfcmVmX3Jlc2VydmUoaW50IGZsYWcsIFJGSUxFICpwKQoreworICAgIGlmIChmbGFnKSB7IC8qIGN1cnJlbnRseSBvbmx5IEZMQUdfUkVGIGlzIGRlZmluZWQgKi8KKyAgICAgICAgUHlfc3NpemVfdCBpZHggPSBQeUxpc3RfR0VUX1NJWkUocC0+cmVmcyk7CisgICAgICAgIGlmIChpZHggPj0gMHg3ZmZmZmZmZSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChpbmRleCBsaXN0IHRvbyBsYXJnZSkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChwLT5yZWZzLCBQeV9Ob25lKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBpZHg7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCisvKiBpbnNlcnQgdGhlIG5ldyBvYmplY3QgJ28nIHRvIHRoZSByZWZsaXN0IGF0IHByZXZpb3VzbHkKKyAqIGFsbG9jYXRlZCBpbmRleCAnaWR4Jy4KKyAqICdvJyBjYW4gYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBub3RoaW5nIGlzIGRvbmUuCisgKiBpZiAnbycgd2FzIG5vbi1OVUxMLCBhbmQgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCAnbycgaXMgcmV0dXJuZWQuCisgKiBpZiAnbycgd2FzIG5vbi1OVUxMLCBhbmQgdGhlIGZ1bmN0aW9uIGZhaWxzLCAnbycgaXMgcmVsZWFzZWQgYW5kCisgKiBOVUxMIHJldHVybmVkLiBUaGlzIHNpbXBsaWZpZXMgZXJyb3IgY2hlY2tpbmcgYXQgdGhlIGNhbGwgc2l0ZSBzaW5jZQorICogYSBzaW5nbGUgdGVzdCBmb3IgTlVMTCBmb3IgdGhlIGZ1bmN0aW9uIHJlc3VsdCBpcyBlbm91Z2guCisgKi8KK3N0YXRpYyBQeU9iamVjdCAqCityX3JlZl9pbnNlcnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaWR4LCBpbnQgZmxhZywgUkZJTEUgKnApCit7CisgICAgaWYgKG8gIT0gTlVMTCAmJiBmbGFnKSB7IC8qIGN1cnJlbnRseSBvbmx5IEZMQUdfUkVGIGlzIGRlZmluZWQgKi8KKyAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5TGlzdF9HRVRfSVRFTShwLT5yZWZzLCBpZHgpOworICAgICAgICBQeV9JTkNSRUYobyk7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShwLT5yZWZzLCBpZHgsIG8pOworICAgICAgICBQeV9ERUNSRUYodG1wKTsKKyAgICB9CisgICAgcmV0dXJuIG87Cit9CisKKy8qIGNvbWJpbmF0aW9uIG9mIGJvdGggYWJvdmUsIHVzZWQgd2hlbiBhbiBvYmplY3QgY2FuIGJlCisgKiBjcmVhdGVkIHdoZW5ldmVyIGl0IGlzIHNlZW4gaW4gdGhlIGZpbGUsIGFzIG9wcG9zZWQgdG8KKyAqIGFmdGVyIGhhdmluZyBsb2FkZWQgaXRzIHN1Yi1vYmplY3RzLgorICovCitzdGF0aWMgUHlPYmplY3QgKgorcl9yZWYoUHlPYmplY3QgKm8sIGludCBmbGFnLCBSRklMRSAqcCkKK3sKKyAgICBhc3NlcnQoZmxhZyAmIEZMQUdfUkVGKTsKKyAgICBpZiAobyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChwLT5yZWZzLCBvKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOyAvKiByZWxlYXNlIHRoZSBuZXcgb2JqZWN0ICovCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIHJfb2JqZWN0KFJGSUxFICpwKQpAQCAtNjc0LDkgKzg0MywxNyBAQAogICAgIC8qIE5VTEwgaXMgYSB2YWxpZCByZXR1cm4gdmFsdWUsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW5zIHRoYXQKICAgICAgICBhbiBleGNlcHRpb24gaXMgc2V0LiAqLwogICAgIFB5T2JqZWN0ICp2LCAqdjI7CisgICAgUHlfc3NpemVfdCBpZHggPSAwOwogICAgIGxvbmcgaSwgbjsKLSAgICBpbnQgdHlwZSA9IHJfYnl0ZShwKTsKLSAgICBQeU9iamVjdCAqcmV0dmFsOworICAgIGludCB0eXBlLCBjb2RlID0gcl9ieXRlKHApOworICAgIGludCBmbGFnLCBpc19pbnRlcm5lZCA9IDA7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7CisKKyAgICBpZiAoY29kZSA9PSBFT0YpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBwLT5kZXB0aCsrOwogCkBAIC02ODYsMTYgKzg2MywxNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBmbGFnID0gY29kZSAmIEZMQUdfUkVGOworICAgIHR5cGUgPSBjb2RlICYgfkZMQUdfUkVGOworCisjZGVmaW5lIFJfUkVGKE8pIGRve1wKKyAgICBpZiAoZmxhZykgXAorICAgICAgICBPID0gcl9yZWYoTywgZmxhZywgcCk7XAorfSB3aGlsZSAoMCkKKwogICAgIHN3aXRjaCAodHlwZSkgewogCi0gICAgY2FzZSBFT0Y6Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIFRZUEVfTlVMTDoKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFRZUEVfTk9ORToKQEAgLTcyNiw2NyArOTA0LDY2IEBACiAgICAgY2FzZSBUWVBFX0lOVDoKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKICAgICAgICAgcmV0dmFsID0gUHlFcnJfT2NjdXJyZWQoKSA/IE5VTEwgOiBQeUxvbmdfRnJvbUxvbmcobik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUWVBFX0lOVDY0OgotICAgICAgICByZXR2YWwgPSByX2xvbmc2NChwKTsKKyAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFRZUEVfTE9ORzoKICAgICAgICAgcmV0dmFsID0gcl9QeUxvbmcocCk7CisgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBUWVBFX0ZMT0FUOgogICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdOworICAgICAgICAgICAgY2hhciBidWZbMjU2XSwgKnB0cjsKICAgICAgICAgICAgIGRvdWJsZSBkeDsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBuID0gcl9ieXRlKHApOwogICAgICAgICAgICAgaWYgKG4gPT0gRU9GKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAogICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoYnVmLCBuLCBwKSAhPSBuKQorICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBwdHIsIG4pOwogICAgICAgICAgICAgYnVmW25dID0gJ1wwJzsKICAgICAgICAgICAgIGR4ID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKGJ1ZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoZHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dmFsID0gUHlGbG9hdF9Gcm9tRG91YmxlKGR4KTsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgY2FzZSBUWVBFX0JJTkFSWV9GTE9BVDoKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbOF07CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWY7CiAgICAgICAgICAgICBkb3VibGUgeDsKLSAgICAgICAgICAgIGlmIChyX3N0cmluZygoY2hhciopYnVmLCA4LCBwKSAhPSA4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHJfc3RyaW5nKDgsIHApOworICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgeCA9IF9QeUZsb2F0X1VucGFjazgoYnVmLCAxKTsKLSAgICAgICAgICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR2YWwgPSBQeUZsb2F0X0Zyb21Eb3VibGUoeCk7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgIGNhc2UgVFlQRV9DT01QTEVYOgogICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdOworICAgICAgICAgICAgY2hhciBidWZbMjU2XSwgKnB0cjsKICAgICAgICAgICAgIFB5X2NvbXBsZXggYzsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBuID0gcl9ieXRlKHApOwogICAgICAgICAgICAgaWYgKG4gPT0gRU9GKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAogICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoYnVmLCBuLCBwKSAhPSBuKQorICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBwdHIsIG4pOwogICAgICAgICAgICAgYnVmW25dID0gJ1wwJzsKICAgICAgICAgICAgIGMucmVhbCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShidWYsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGMucmVhbCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCkBAIC03OTcsMTEyICs5NzQsMTUxIEBACiAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyX3N0cmluZyhidWYsIG4sIHApICE9IG4pCisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHB0ciwgbik7CiAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwogICAgICAgICAgICAgYy5pbWFnID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKGJ1ZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoYy5pbWFnID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHZhbCA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoYyk7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgIGNhc2UgVFlQRV9CSU5BUllfQ09NUExFWDoKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbOF07CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWY7CiAgICAgICAgICAgICBQeV9jb21wbGV4IGM7Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCkgIT0gOCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBidWYgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZyg4LCBwKTsKKyAgICAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGMucmVhbCA9IF9QeUZsb2F0X1VucGFjazgoYnVmLCAxKTsKLSAgICAgICAgICAgIGlmIChjLnJlYWwgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChjLnJlYWwgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKChjaGFyKilidWYsIDgsIHApICE9IDgpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcl9zdHJpbmcoOCwgcCk7CisgICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjLmltYWcgPSBfUHlGbG9hdF9VbnBhY2s4KGJ1ZiwgMSk7Ci0gICAgICAgICAgICBpZiAoYy5pbWFnID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBpZiAoYy5pbWFnID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHZhbCA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoYyk7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgIGNhc2UgVFlQRV9TVFJJTkc6Ci0gICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICB7CisgICAgICAgICAgICBjaGFyICpwdHI7CisgICAgICAgICAgICBuID0gcl9sb25nKHApOworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHN0cmluZyBzaXplIG91dCBvZiByYW5nZSkiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgbik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkoUHlCeXRlc19BU19TVFJJTkcodiksIHB0ciwgbik7CisgICAgICAgICAgICByZXR2YWwgPSB2OworICAgICAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChzdHJpbmcgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBuKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyX3N0cmluZyhQeUJ5dGVzX0FTX1NUUklORyh2KSwgbiwgcCkgIT0gbikgewotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHY7Ci0gICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBUWVBFX0FTQ0lJX0lOVEVSTkVEOgorICAgICAgICBpc19pbnRlcm5lZCA9IDE7CisgICAgY2FzZSBUWVBFX0FTQ0lJOgorICAgICAgICBuID0gcl9sb25nKHApOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAodW5pY29kZSBzaXplIG91dCBvZiByYW5nZSkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGdvdG8gX3JlYWRfYXNjaWk7CisKKyAgICBjYXNlIFRZUEVfU0hPUlRfQVNDSUlfSU5URVJORUQ6CisgICAgICAgIGlzX2ludGVybmVkID0gMTsKKyAgICBjYXNlIFRZUEVfU0hPUlRfQVNDSUk6CisgICAgICAgIG4gPSByX2J5dGUocCk7CisgICAgICAgIGlmIChuID09IEVPRikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAorICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgX3JlYWRfYXNjaWk6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKnB0cjsKKyAgICAgICAgICAgIHB0ciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tS2luZEFuZERhdGEoUHlVbmljb2RlXzFCWVRFX0tJTkQsIHB0ciwgbik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGlzX2ludGVybmVkKQorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZ2KTsKKyAgICAgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgVFlQRV9JTlRFUk5FRDoKKyAgICAgICAgaXNfaW50ZXJuZWQgPSAxOwogICAgIGNhc2UgVFlQRV9VTklDT0RFOgogICAgICAgICB7CiAgICAgICAgIGNoYXIgKmJ1ZmZlcjsKIAogICAgICAgICBuID0gcl9sb25nKHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAodW5pY29kZSBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBidWZmZXIgPSBQeU1lbV9ORVcoY2hhciwgbik7Ci0gICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobiAhPSAwKSB7CisgICAgICAgICAgICBidWZmZXIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChidWZmZXIsIG4sICJzdXJyb2dhdGVwYXNzIik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJfc3RyaW5nKGJ1ZmZlciwgbiwgcCkgIT0gbikgewotICAgICAgICAgICAgUHlNZW1fREVMKGJ1ZmZlcik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9OZXcoMCwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgdiA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGJ1ZmZlciwgbiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgUHlNZW1fREVMKGJ1ZmZlcik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGlzX2ludGVybmVkKQorICAgICAgICAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnYpOwogICAgICAgICByZXR2YWwgPSB2OworICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgY2FzZSBUWVBFX1NNQUxMX1RVUExFOgorICAgICAgICBuID0gKHVuc2lnbmVkIGNoYXIpIHJfYnl0ZShwKTsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZ290byBfcmVhZF90dXBsZTsKICAgICBjYXNlIFRZUEVfVFVQTEU6CiAgICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh0dXBsZSBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgIF9yZWFkX3R1cGxlOgogICAgICAgICB2ID0gUHlUdXBsZV9OZXcobik7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIFJfUkVGKHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICB2MiA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewpAQCAtOTIwLDIwICsxMTM2LDE2IEBACiAKICAgICBjYXNlIFRZUEVfTElTVDoKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKGxpc3Qgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgdiA9IFB5TGlzdF9OZXcobik7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIFJfUkVGKHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgdjIgPSByX29iamVjdChwKTsKICAgICAgICAgICAgIGlmICggdjIgPT0gTlVMTCApIHsKQEAgLTk1MSwyMCArMTE2MywyNiBAQAogCiAgICAgY2FzZSBUWVBFX0RJQ1Q6CiAgICAgICAgIHYgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIFJfUkVGKHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgUHlPYmplY3QgKmtleSwgKnZhbDsKICAgICAgICAgICAgIGtleSA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgdmFsID0gcl9vYmplY3QocCk7Ci0gICAgICAgICAgICBpZiAodmFsICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0odiwga2V5LCB2YWwpOworICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0odiwga2V5LCB2YWwpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHZhbCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsKTsKICAgICAgICAgfQogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtOTc2LDIwICsxMTk0LDI2IEBACiAgICAgY2FzZSBUWVBFX1NFVDoKICAgICBjYXNlIFRZUEVfRlJPWkVOU0VUOgogICAgICAgICBuID0gcl9sb25nKHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoc2V0IHNpemUgb3V0IG9mIHJhbmdlKSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHYgPSAodHlwZSA9PSBUWVBFX1NFVCkgPyBQeVNldF9OZXcoTlVMTCkgOiBQeUZyb3plblNldF9OZXcoTlVMTCk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9TRVQpIHsKKyAgICAgICAgICAgIFJfUkVGKHYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogbXVzdCB1c2UgZGVsYXllZCByZWdpc3RyYXRpb24gb2YgZnJvemVuc2V0cyBiZWNhdXNlIHRoZXkgbXVzdAorICAgICAgICAgICAgICogYmUgaW5pdCB3aXRoIGEgcmVmY291bnQgb2YgMQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZHggPSByX3JlZl9yZXNlcnZlKGZsYWcsIHApOworICAgICAgICAgICAgaWYgKGlkeCA8IDApCisgICAgICAgICAgICAgICAgUHlfQ0xFQVIodik7IC8qIHNpZ25hbCBlcnJvciAqLwogICAgICAgICB9CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICB2MiA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewpAQCAtMTAwOCw2ICsxMjMyLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRih2Mik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gVFlQRV9TRVQpCisgICAgICAgICAgICB2ID0gcl9yZWZfaW5zZXJ0KHYsIGlkeCwgZmxhZywgcCk7CiAgICAgICAgIHJldHZhbCA9IHY7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMDI5LDYgKzEyNTUsMTAgQEAKICAgICAgICAgICAgIGludCBmaXJzdGxpbmVubzsKICAgICAgICAgICAgIFB5T2JqZWN0ICpsbm90YWIgPSBOVUxMOwogCisgICAgICAgICAgICBpZHggPSByX3JlZl9yZXNlcnZlKGZsYWcsIHApOworICAgICAgICAgICAgaWYgKGlkeCA8IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIHYgPSBOVUxMOwogCiAgICAgICAgICAgICAvKiBYWFggaWdub3JlIGxvbmctPmludCBvdmVyZmxvd3MgZm9yIG5vdyAqLwpAQCAtMTA4NCw2ICsxMzE0LDggQEAKICAgICAgICAgICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBjb2RlX2Vycm9yOwogICAgICAgICAgICAgZmlyc3RsaW5lbm8gPSAoaW50KXJfbG9uZyhwKTsKKyAgICAgICAgICAgIGlmIChmaXJzdGxpbmVubyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbG5vdGFiID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAobG5vdGFiID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBjb2RlX2Vycm9yOwpAQCAtMTA5NCw2ICsxMzI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLCBjb25zdHMsIG5hbWVzLCB2YXJuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVldmFycywgY2VsbHZhcnMsIGZpbGVuYW1lLCBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0bGluZW5vLCBsbm90YWIpOworICAgICAgICAgICAgdiA9IHJfcmVmX2luc2VydCh2LCBpZHgsIGZsYWcsIHApOwogCiAgICAgICAgICAgY29kZV9lcnJvcjoKICAgICAgICAgICAgIFB5X1hERUNSRUYoY29kZSk7CkBAIC0xMTA5LDExICsxMzQyLDI3IEBACiAgICAgICAgIHJldHZhbCA9IHY7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBUWVBFX1JFRjoKKyAgICAgICAgbiA9IHJfbG9uZyhwKTsKKyAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gUHlMaXN0X0dFVF9TSVpFKHAtPnJlZnMpKSB7CisgICAgICAgICAgICBpZiAobiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChpbnZhbGlkIHJlZmVyZW5jZSkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHYgPSBQeUxpc3RfR0VUX0lURU0ocC0+cmVmcywgbik7CisgICAgICAgIGlmICh2ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoaW52YWxpZCByZWZlcmVuY2UpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYodik7CisgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgLyogQm9ndXMgZGF0YSBnb3Qgd3JpdHRlbiwgd2hpY2ggaXNuJ3QgaWRlYWwuCiAgICAgICAgICAgIFRoaXMgd2lsbCBsZXQgeW91IGtlZXAgd29ya2luZyBhbmQgcmVjb3Zlci4gKi8KICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmtub3duIHR5cGUgY29kZSkiKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgYnJlYWs7CiAKICAgICB9CkBAIC0xMTM5LDIzICsxMzg4LDMzIEBACiBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoRklMRSAqZnApCiB7CiAgICAgUkZJTEUgcmY7CisgICAgaW50IHJlczsKICAgICBhc3NlcnQoZnApOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5mcCA9IGZwOwogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwogICAgIHJmLmVuZCA9IHJmLnB0ciA9IE5VTEw7Ci0gICAgcmV0dXJuIHJfc2hvcnQoJnJmKTsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJlcyA9IHJfc2hvcnQoJnJmKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBsb25nCiBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShGSUxFICpmcCkKIHsKICAgICBSRklMRSByZjsKKyAgICBsb25nIHJlczsKICAgICByZi5mcCA9IGZwOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKICAgICByZi5wdHIgPSByZi5lbmQgPSBOVUxMOwotICAgIHJldHVybiByX2xvbmcoJnJmKTsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJlcyA9IHJfbG9uZygmcmYpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOworICAgIHJldHVybiByZXM7CiB9CiAKICNpZmRlZiBIQVZFX0ZTVEFUCkBAIC0xMjE0LDIyICsxNDczLDM2IEBACiAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7CiAgICAgcmYuZGVwdGggPSAwOwogICAgIHJmLnB0ciA9IHJmLmVuZCA9IE5VTEw7CisgICAgcmYuYnVmID0gTlVMTDsKKyAgICByZi5yZWZzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmYucmVmcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByX29iamVjdCgmcmYpOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeU9iamVjdCAqCi1QeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY2hhciAqc3RyLCBQeV9zc2l6ZV90IGxlbikKK1B5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIsIFB5X3NzaXplX3QgbGVuKQogewogICAgIFJGSUxFIHJmOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgcmYuZnAgPSBOVUxMOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKLSAgICByZi5wdHIgPSBzdHI7Ci0gICAgcmYuZW5kID0gc3RyICsgbGVuOworICAgIHJmLnB0ciA9IChjaGFyICopc3RyOworICAgIHJmLmVuZCA9IChjaGFyICopc3RyICsgbGVuOworICAgIHJmLmJ1ZiA9IE5VTEw7CiAgICAgcmYuZGVwdGggPSAwOworICAgIHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZi5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IHJfb2JqZWN0KCZyZik7CisgICAgUHlfREVDUkVGKHJmLnJlZnMpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyNDgsNyArMTUyMSwxMyBAQAogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOworICAgIGlmICh2ZXJzaW9uID49IDMpIHsKKyAgICAgICAgaWYgKCh3Zi5yZWZzID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlCisgICAgICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdfb2JqZWN0KHgsICZ3Zik7CisgICAgUHlfWERFQ1JFRih3Zi5yZWZzKTsKICAgICBpZiAod2Yuc3RyICE9IE5VTEwpIHsKICAgICAgICAgY2hhciAqYmFzZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopd2Yuc3RyKTsKICAgICAgICAgaWYgKHdmLnB0ciAtIGJhc2UgPiBQWV9TU0laRV9UX01BWCkgewpAQCAtMTMyMCw2ICsxNTk5LDggQEAKICAgICAgKiBNYWtlIGEgY2FsbCB0byB0aGUgcmVhZCBtZXRob2QsIGJ1dCByZWFkIHplcm8gYnl0ZXMuCiAgICAgICogVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IHBhc3NlZCBpbiBhdCBsZWFzdAogICAgICAqIGhhcyBhIHJlYWQgbWV0aG9kIHdoaWNoIHJldHVybnMgYnl0ZXMuCisgICAgICogVGhpcyBjYW4gYmUgcmVtb3ZlZCBpZiB3ZSBndWFyYW50ZWUgZ29vZCBlcnJvciBoYW5kbGluZworICAgICAqIGZvciByX3N0cmluZygpCiAgICAgICovCiAgICAgZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfcmVhZCwgImkiLCAwKTsKICAgICBpZiAoZGF0YSA9PSBOVUxMKQpAQCAtMTMzNSw3ICsxNjE2LDE1IEBACiAgICAgICAgIHJmLmZwID0gTlVMTDsKICAgICAgICAgcmYucmVhZGFibGUgPSBmOwogICAgICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKKyAgICAgICAgcmYucHRyID0gcmYuZW5kID0gTlVMTDsKKyAgICAgICAgcmYuYnVmID0gTlVMTDsKKyAgICAgICAgaWYgKChyZi5yZWZzID0gUHlMaXN0X05ldygwKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICAgICAgICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKICAgICB9CiAgICAgUHlfREVDUkVGKGRhdGEpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzkyLDggKzE2ODEsMTEgQEAKICAgICByZi5wdHIgPSBzOwogICAgIHJmLmVuZCA9IHMgKyBuOwogICAgIHJmLmRlcHRoID0gMDsKKyAgICBpZiAoKHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByZWFkX29iamVjdCgmcmYpOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnApOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNDMzLDYgKzE3MjUsNyBAQAogdmVyc2lvbiAtLSBpbmRpY2F0ZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2R1bGUgdXNlcy4gVmVyc2lvbiAwIGlzIHRoZVxuXAogICAgIGhpc3RvcmljYWwgZm9ybWF0LCB2ZXJzaW9uIDEgc2hhcmVzIGludGVybmVkIHN0cmluZ3MgYW5kIHZlcnNpb24gMlxuXAogICAgIHVzZXMgYSBiaW5hcnkgZm9ybWF0IGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuXAorICAgIFZlcnNpb24gMyBzaGFyZXMgY29tbW9uIG9iamVjdCByZWZlcmVuY2VzIChOZXcgaW4gdmVyc2lvbiAzLjQpLlxuXAogXG5cCiBGdW5jdGlvbnM6XG5cCiBcblwKZGlmZiAtLWdpdCBhL1B5dGhvbi9tb2RzdXBwb3J0LmMgYi9QeXRob24vbW9kc3VwcG9ydC5jCmluZGV4IDQyODkxNGYuLjZjOTM4ZGQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9tb2RzdXBwb3J0LmMKKysrIGIvUHl0aG9uL21vZHN1cHBvcnQuYwpAQCAtMTYxLDcgKzE2MSwxNyBAQAogICAgIC8qIE5vdGUgdGhhdCB3ZSBjYW4ndCBiYWlsIGltbWVkaWF0ZWx5IG9uIGVycm9yIGFzIHRoaXMgd2lsbCBsZWFrCiAgICAgICAgcmVmY291bnRzIG9uIGFueSAnTicgYXJndW1lbnRzLiAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKncgPSBkb19ta3ZhbHVlKHBfZm9ybWF0LCBwX3ZhLCBmbGFncyk7CisgICAgICAgIFB5T2JqZWN0ICp3OworCisgICAgICAgIGlmIChpdGVtZmFpbGVkKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdmFsdWUsICp0YjsKKyAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2YWx1ZSwgJnRiKTsKKyAgICAgICAgICAgIHcgPSBkb19ta3ZhbHVlKHBfZm9ybWF0LCBwX3ZhLCBmbGFncyk7CisgICAgICAgICAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHcgPSBkb19ta3ZhbHVlKHBfZm9ybWF0LCBwX3ZhLCBmbGFncyk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewogICAgICAgICAgICAgaXRlbWZhaWxlZCA9IDE7CiAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CmRpZmYgLS1naXQgYS9QeXRob24vbXlzdHJ0b3VsLmMgYi9QeXRob24vbXlzdHJ0b3VsLmMKaW5kZXggOGE1NGNiZi4uOTg0MjlkNCAxMDA2NDQKLS0tIGEvUHl0aG9uL215c3RydG91bC5jCisrKyBiL1B5dGhvbi9teXN0cnRvdWwuYwpAQCAtOTIsMTEgKzkyLDExIEBACiAqKiAgICAgICAgICAgICAgZXhjZXB0aW9ucyAtIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtLgogKi8KIHVuc2lnbmVkIGxvbmcKLVB5T1Nfc3RydG91bChyZWdpc3RlciBjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQorUHlPU19zdHJ0b3VsKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCiB7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOyAvKiByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uICovCi0gICAgcmVnaXN0ZXIgaW50IGM7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCi0gICAgcmVnaXN0ZXIgaW50IG92bGltaXQ7ICAgICAgIC8qIHJlcXVpcmVkIGRpZ2l0cyB0byBvdmVyZmxvdyAqLworICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsgLyogcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiAqLworICAgIGludCBjOyAgICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLworICAgIGludCBvdmxpbWl0OyAgICAgICAvKiByZXF1aXJlZCBkaWdpdHMgdG8gb3ZlcmZsb3cgKi8KIAogICAgIC8qIHNraXAgbGVhZGluZyB3aGl0ZSBzcGFjZSAqLwogICAgIHdoaWxlICgqc3RyICYmIFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKnN0cikpKQpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMHggKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwbyAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gOCkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMGIgKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICAgICAgICAgIHdoaWxlIChQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpzdHIpKSkKICAgICAgICAgICAgICAgICAgICAgKytzdHI7CiAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAweCAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBvICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSA4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwYiAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgLyogY2F0Y2ggc2lsbHkgYmFzZXMgKi8KICAgICBpZiAoYmFzZSA8IDIgfHwgYmFzZSA+IDM2KSB7CiAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgICAgICBpZiAob3ZsaW1pdCA+IDApIC8qIG5vIG92ZXJmbG93IGNoZWNrIHJlcXVpcmVkICovCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgYzsKICAgICAgICAgZWxzZSB7IC8qIHJlcXVpcmVzIG92ZXJmbG93IGNoZWNrICovCi0gICAgICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHRlbXBfcmVzdWx0OworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wX3Jlc3VsdDsKIAogICAgICAgICAgICAgaWYgKG92bGltaXQgPCAwKSAvKiBndWFyYW50ZWVkIG92ZXJmbG93ICovCiAgICAgICAgICAgICAgICAgZ290byBvdmVyZmxvd2VkOwpAQCAtMjM5LDcgKzIzOSw3IEBACiAKICAgICAvKiBzZXQgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgc2Nhbm5lZCAqLwogICAgIGlmIChwdHIpCi0gICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKIAogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAvKiBzcG9vbCB0aHJvdWdoIHJlbWFpbmluZyBkaWdpdCBjaGFyYWN0ZXJzICovCiAgICAgICAgIHdoaWxlIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soKnN0cildIDwgYmFzZSkKICAgICAgICAgICAgICsrc3RyOwotICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgfQogICAgIGVycm5vID0gRVJBTkdFOwogICAgIHJldHVybiAodW5zaWduZWQgbG9uZyktMTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogI2RlZmluZSBQWV9BQlNfTE9OR19NSU4gICAgICAgICAoMC0odW5zaWduZWQgbG9uZylMT05HX01JTikKIAogbG9uZwotUHlPU19zdHJ0b2woY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKK1B5T1Nfc3RydG9sKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCiB7CiAgICAgbG9uZyByZXN1bHQ7CiAgICAgdW5zaWduZWQgbG9uZyB1cmVzdWx0OwpkaWZmIC0tZ2l0IGEvUHl0aG9uL29wY29kZV90YXJnZXRzLmggYi9QeXRob24vb3Bjb2RlX3RhcmdldHMuaAppbmRleCAyZDZiY2RhLi5mOTBhMTdhIDEwMDY0NAotLS0gYS9QeXRob24vb3Bjb2RlX3RhcmdldHMuaAorKysgYi9QeXRob24vb3Bjb2RlX3RhcmdldHMuaApAQCAtNjgsNyArNjgsNyBAQAogICAgICYmVEFSR0VUX0JJTkFSWV9PUiwKICAgICAmJlRBUkdFVF9JTlBMQUNFX1BPV0VSLAogICAgICYmVEFSR0VUX0dFVF9JVEVSLAotICAgICYmVEFSR0VUX1NUT1JFX0xPQ0FMUywKKyAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJlRBUkdFVF9QUklOVF9FWFBSLAogICAgICYmVEFSR0VUX0xPQURfQlVJTERfQ0xBU1MsCiAgICAgJiZUQVJHRVRfWUlFTERfRlJPTSwKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICYmVEFSR0VUX0xJU1RfQVBQRU5ELAogICAgICYmVEFSR0VUX1NFVF9BREQsCiAgICAgJiZUQVJHRVRfTUFQX0FERCwKLSAgICAmJl91bmtub3duX29wY29kZSwKKyAgICAmJlRBUkdFVF9MT0FEX0NMQVNTREVSRUYsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCmRpZmYgLS1naXQgYS9QeXRob24vcGVlcGhvbGUuYyBiL1B5dGhvbi9wZWVwaG9sZS5jCmluZGV4IDVkNTM2NzcuLjQxODU0NjIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9wZWVwaG9sZS5jCisrKyBiL1B5dGhvbi9wZWVwaG9sZS5jCkBAIC0yNzUsNiArMjc1LDcgQEAKICAgICBsZW5fY29uc3RzID0gUHlMaXN0X0dFVF9TSVpFKGNvbnN0cyk7CiAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY29uc3RzLCBuZXdjb25zdCkpIHsKICAgICAgICAgUHlfREVDUkVGKG5ld2NvbnN0KTsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFB5X0RFQ1JFRihuZXdjb25zdCk7CkBAIC0zMjcsMzcgKzMyOCw2IEBACiAgICAgcmV0dXJuIGJsb2NrczsKIH0KIAotLyogSGVscGVyIHRvIHJlcGxhY2UgTE9BRF9OQU1FIE5vbmUvVHJ1ZS9GYWxzZSB3aXRoIExPQURfQ09OU1QKLSAgIFJldHVybnM6IDAgaWYgbm8gY2hhbmdlLCAxIGlmIGNoYW5nZSwgLTEgaWYgZXJyb3IgKi8KLXN0YXRpYyBpbnQKLWxvYWRfZ2xvYmFsKHVuc2lnbmVkIGNoYXIgKmNvZGVzdHIsIFB5X3NzaXplX3QgaSwgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvbnN0cykKLXsKLSAgICBQeV9zc2l6ZV90IGo7Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBpZiAobmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoc3RyY21wKG5hbWUsICJOb25lIikgPT0gMCkKLSAgICAgICAgb2JqID0gUHlfTm9uZTsKLSAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgIlRydWUiKSA9PSAwKQotICAgICAgICBvYmogPSBQeV9UcnVlOwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiRmFsc2UiKSA9PSAwKQotICAgICAgICBvYmogPSBQeV9GYWxzZTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotICAgIGZvciAoaiA9IDA7IGogPCBQeUxpc3RfR0VUX1NJWkUoY29uc3RzKTsgaisrKSB7Ci0gICAgICAgIGlmIChQeUxpc3RfR0VUX0lURU0oY29uc3RzLCBqKSA9PSBvYmopCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGogPT0gUHlMaXN0X0dFVF9TSVpFKGNvbnN0cykpIHsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY29uc3RzLCBvYmopIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgYXNzZXJ0KFB5TGlzdF9HRVRfSVRFTShjb25zdHMsIGopID09IG9iaik7Ci0gICAgY29kZXN0cltpXSA9IExPQURfQ09OU1Q7Ci0gICAgU0VUQVJHKGNvZGVzdHIsIGksIGopOwotICAgIHJldHVybiAxOwotfQotCiAvKiBQZXJmb3JtIGJhc2ljIHBlZXBob2xlIG9wdGltaXphdGlvbnMgdG8gY29tcG9uZW50cyBvZiBhIGNvZGUgb2JqZWN0LgogICAgVGhlIGNvbnN0cyBvYmplY3Qgc2hvdWxkIHN0aWxsIGJlIGluIGxpc3QgZm9ybSB0byBhbGxvdyBuZXcgY29uc3RhbnRzCiAgICB0byBiZSBhcHBlbmRlZC4KQEAgLTM5Miw3ICszNjIsNiBAQAogICAgIFB5X3NzaXplX3QgY29uc3Rfc3RhY2tfc2l6ZSA9IDA7CiAgICAgaW50IGluX2NvbnN0cyA9IDA7ICAvKiB3aGV0aGVyIHdlIGFyZSBpbiBhIExPQURfQ09OU1Qgc2VxdWVuY2UgKi8KICAgICB1bnNpZ25lZCBpbnQgKmJsb2NrcyA9IE5VTEw7Ci0gICAgY2hhciAqbmFtZTsKIAogICAgIC8qIEJhaWwgb3V0IGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgKi8KICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTQxMyw4ICszODIsMTAgQEAKIAogICAgIC8qIE1ha2UgYSBtb2RpZmlhYmxlIGNvcHkgb2YgdGhlIGNvZGUgc3RyaW5nICovCiAgICAgY29kZXN0ciA9ICh1bnNpZ25lZCBjaGFyICopUHlNZW1fTWFsbG9jKGNvZGVsZW4pOwotICAgIGlmIChjb2Rlc3RyID09IE5VTEwpCisgICAgaWYgKGNvZGVzdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGV4aXRFcnJvcjsKKyAgICB9CiAgICAgY29kZXN0ciA9ICh1bnNpZ25lZCBjaGFyICopbWVtY3B5KGNvZGVzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGNvZGUpLCBjb2RlbGVuKTsKIApAQCAtNDI4LDggKzM5OSwxMCBAQAogCiAgICAgLyogTWFwcGluZyB0byBuZXcganVtcCB0YXJnZXRzIGFmdGVyIE5PUHMgYXJlIHJlbW92ZWQgKi8KICAgICBhZGRybWFwID0gKGludCAqKVB5TWVtX01hbGxvYyhjb2RlbGVuICogc2l6ZW9mKGludCkpOwotICAgIGlmIChhZGRybWFwID09IE5VTEwpCisgICAgaWYgKGFkZHJtYXAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGV4aXRFcnJvcjsKKyAgICB9CiAKICAgICBibG9ja3MgPSBtYXJrYmxvY2tzKGNvZGVzdHIsIGNvZGVsZW4pOwogICAgIGlmIChibG9ja3MgPT0gTlVMTCkKQEAgLTQ3NSwyMCArNDQ4LDYgQEAKICAgICAgICAgICAgICAgICBjb2Rlc3RyW2krM10gPSBOT1A7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAvKiBSZXBsYWNlIExPQURfR0xPQkFML0xPQURfTkFNRSBOb25lL1RydWUvRmFsc2UKLSAgICAgICAgICAgICAgICAgICB3aXRoIExPQURfQ09OU1QgTm9uZS9UcnVlL0ZhbHNlICovCi0gICAgICAgICAgICBjYXNlIExPQURfTkFNRToKLSAgICAgICAgICAgIGNhc2UgTE9BRF9HTE9CQUw6Ci0gICAgICAgICAgICAgICAgaiA9IEdFVEFSRyhjb2Rlc3RyLCBpKTsKLSAgICAgICAgICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhQeVR1cGxlX0dFVF9JVEVNKG5hbWVzLCBqKSk7Ci0gICAgICAgICAgICAgICAgaCA9IGxvYWRfZ2xvYmFsKGNvZGVzdHIsIGksIG5hbWUsIGNvbnN0cyk7Ci0gICAgICAgICAgICAgICAgaWYgKGggPCAwKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXRFcnJvcjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChoID09IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIENPTlNUX1NUQUNLX1BVU0hfT1AoaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgTE9BRF9DT05TVCB0cnVlY29uc3QKICAgICAgICAgICAgICAgICAgICBQT1BfSlVNUF9JRl9GQUxTRSB4eC4gVGhpcyBpbXByb3ZlcwogICAgICAgICAgICAgICAgICAgICJ3aGlsZSAxIiBwZXJmb3JtYW5jZS4gKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi9weWFyZW5hLmMgYi9QeXRob24vcHlhcmVuYS5jCmluZGV4IDAyYTMxZDguLjEwMzYwM2YgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weWFyZW5hLmMKKysrIGIvUHl0aG9uL3B5YXJlbmEuYwpAQCAtNzcsNyArNzcsNyBAQAogewogICAgIC8qIEFsbG9jYXRlIGhlYWRlciBhbmQgYmxvY2sgYXMgb25lIHVuaXQuCiAgICAgICAgYWJfbWVtIHBvaW50cyBqdXN0IHBhc3QgaGVhZGVyLiAqLwotICAgIGJsb2NrICpiID0gKGJsb2NrICopbWFsbG9jKHNpemVvZihibG9jaykgKyBzaXplKTsKKyAgICBibG9jayAqYiA9IChibG9jayAqKVB5TWVtX01hbGxvYyhzaXplb2YoYmxvY2spICsgc2l6ZSk7CiAgICAgaWYgKCFiKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBiLT5hYl9zaXplID0gc2l6ZTsKQEAgLTkyLDcgKzkyLDcgQEAKIGJsb2NrX2ZyZWUoYmxvY2sgKmIpIHsKICAgICB3aGlsZSAoYikgewogICAgICAgICBibG9jayAqbmV4dCA9IGItPmFiX25leHQ7Ci0gICAgICAgIGZyZWUoYik7CisgICAgICAgIFB5TWVtX0ZyZWUoYik7CiAgICAgICAgIGIgPSBuZXh0OwogICAgIH0KIH0KQEAgLTEyNywyMCArMTI3LDIwIEBACiBQeUFyZW5hICoKIFB5QXJlbmFfTmV3KCkKIHsKLSAgICBQeUFyZW5hKiBhcmVuYSA9IChQeUFyZW5hICopbWFsbG9jKHNpemVvZihQeUFyZW5hKSk7CisgICAgUHlBcmVuYSogYXJlbmEgPSAoUHlBcmVuYSAqKVB5TWVtX01hbGxvYyhzaXplb2YoUHlBcmVuYSkpOwogICAgIGlmICghYXJlbmEpCiAgICAgICAgIHJldHVybiAoUHlBcmVuYSopUHlFcnJfTm9NZW1vcnkoKTsKIAogICAgIGFyZW5hLT5hX2hlYWQgPSBibG9ja19uZXcoREVGQVVMVF9CTE9DS19TSVpFKTsKICAgICBhcmVuYS0+YV9jdXIgPSBhcmVuYS0+YV9oZWFkOwogICAgIGlmICghYXJlbmEtPmFfaGVhZCkgewotICAgICAgICBmcmVlKCh2b2lkICopYXJlbmEpOworICAgICAgICBQeU1lbV9GcmVlKCh2b2lkICopYXJlbmEpOwogICAgICAgICByZXR1cm4gKFB5QXJlbmEqKVB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogICAgIGFyZW5hLT5hX29iamVjdHMgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmICghYXJlbmEtPmFfb2JqZWN0cykgewogICAgICAgICBibG9ja19mcmVlKGFyZW5hLT5hX2hlYWQpOwotICAgICAgICBmcmVlKCh2b2lkICopYXJlbmEpOworICAgICAgICBQeU1lbV9GcmVlKCh2b2lkICopYXJlbmEpOwogICAgICAgICByZXR1cm4gKFB5QXJlbmEqKVB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogI2lmIGRlZmluZWQoUHlfREVCVUcpCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAqLwogCiAgICAgUHlfREVDUkVGKGFyZW5hLT5hX29iamVjdHMpOwotICAgIGZyZWUoYXJlbmEpOworICAgIFB5TWVtX0ZyZWUoYXJlbmEpOwogfQogCiB2b2lkICoKZGlmZiAtLWdpdCBhL1B5dGhvbi9weWhhc2guYyBiL1B5dGhvbi9weWhhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2NiNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uL3B5aGFzaC5jCkBAIC0wLDAgKzEsNDI3IEBACisvKiBTZXQgb2YgaGFzaCB1dGlsaXR5IGZ1bmN0aW9ucyB0byBoZWxwIG1haW50YWluaW5nIHRoZSBpbnZhcmlhbnQgdGhhdAorICAgIGlmIGE9PWIgdGhlbiBoYXNoKGEpPT1oYXNoKGIpCisKKyAgIEFsbCB0aGUgdXRpbGl0eSBmdW5jdGlvbnMgKF9QeV9IYXNoKigpKSByZXR1cm4gIi0xIiB0byBzaWduaWZ5IGFuIGVycm9yLgorKi8KKyNpbmNsdWRlICJQeXRob24uaCIKKworI2lmZGVmIF9fQVBQTEVfXworIyAgaW5jbHVkZSA8bGlia2Vybi9PU0J5dGVPcmRlci5oPgorI2VsaWYgZGVmaW5lZChIQVZFX0xFNjRUT0gpICYmIGRlZmluZWQoSEFWRV9FTkRJQU5fSCkKKyMgIGluY2x1ZGUgPGVuZGlhbi5oPgorI2VsaWYgZGVmaW5lZChIQVZFX0xFNjRUT0gpICYmIGRlZmluZWQoSEFWRV9TWVNfRU5ESUFOX0gpCisjICBpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfUHlfSGFzaFNlY3JldF90IF9QeV9IYXNoU2VjcmV0OworCisjaWYgUHlfSEFTSF9BTEdPUklUSE0gPT0gUHlfSEFTSF9FWFRFUk5BTAorZXh0ZXJuIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jOworI2Vsc2UKK3N0YXRpYyBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYzsKKyNlbmRpZgorCisvKiBDb3VudCBfUHlfSGFzaEJ5dGVzKCkgY2FsbHMgKi8KKyNpZmRlZiBQeV9IQVNIX1NUQVRTCisjZGVmaW5lIFB5X0hBU0hfU1RBVFNfTUFYIDMyCitzdGF0aWMgUHlfc3NpemVfdCBoYXNoc3RhdHNbUHlfSEFTSF9TVEFUU19NQVggKyAxXSA9IHswfTsKKyNlbmRpZgorCisvKiBGb3IgbnVtZXJpYyB0eXBlcywgdGhlIGhhc2ggb2YgYSBudW1iZXIgeCBpcyBiYXNlZCBvbiB0aGUgcmVkdWN0aW9uCisgICBvZiB4IG1vZHVsbyB0aGUgcHJpbWUgUCA9IDIqKl9QeUhBU0hfQklUUyAtIDEuICBJdCdzIGRlc2lnbmVkIHNvIHRoYXQKKyAgIGhhc2goeCkgPT0gaGFzaCh5KSB3aGVuZXZlciB4IGFuZCB5IGFyZSBudW1lcmljYWxseSBlcXVhbCwgZXZlbiBpZgorICAgeCBhbmQgeSBoYXZlIGRpZmZlcmVudCB0eXBlcy4KKworICAgQSBxdWljayBzdW1tYXJ5IG9mIHRoZSBoYXNoaW5nIHN0cmF0ZWd5OgorCisgICAoMSkgRmlyc3QgZGVmaW5lIHRoZSAncmVkdWN0aW9uIG9mIHggbW9kdWxvIFAnIGZvciBhbnkgcmF0aW9uYWwKKyAgIG51bWJlciB4OyB0aGlzIGlzIGEgc3RhbmRhcmQgZXh0ZW5zaW9uIG9mIHRoZSB1c3VhbCBub3Rpb24gb2YKKyAgIHJlZHVjdGlvbiBtb2R1bG8gUCBmb3IgaW50ZWdlcnMuICBJZiB4ID09IHAvcSAod3JpdHRlbiBpbiBsb3dlc3QKKyAgIHRlcm1zKSwgdGhlIHJlZHVjdGlvbiBpcyBpbnRlcnByZXRlZCBhcyB0aGUgcmVkdWN0aW9uIG9mIHAgdGltZXMKKyAgIHRoZSBpbnZlcnNlIG9mIHRoZSByZWR1Y3Rpb24gb2YgcSwgYWxsIG1vZHVsbyBQOyBpZiBxIGlzIGV4YWN0bHkKKyAgIGRpdmlzaWJsZSBieSBQIHRoZW4gZGVmaW5lIHRoZSByZWR1Y3Rpb24gdG8gYmUgaW5maW5pdHkuICBTbyB3ZSd2ZQorICAgZ290IGEgd2VsbC1kZWZpbmVkIG1hcAorCisgICAgICByZWR1Y2UgOiB7IHJhdGlvbmFsIG51bWJlcnMgfSAtPiB7IDAsIDEsIDIsIC4uLiwgUC0xLCBpbmZpbml0eSB9LgorCisgICAoMikgTm93IGZvciBhIHJhdGlvbmFsIG51bWJlciB4LCBkZWZpbmUgaGFzaCh4KSBieToKKworICAgICAgcmVkdWNlKHgpICAgaWYgeCA+PSAwCisgICAgICAtcmVkdWNlKC14KSBpZiB4IDwgMAorCisgICBJZiB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24gaXMgaW5maW5pdHkgKHRoaXMgaXMgaW1wb3NzaWJsZSBmb3IKKyAgIGludGVnZXJzLCBmbG9hdHMgYW5kIERlY2ltYWxzKSB0aGVuIHVzZSB0aGUgcHJlZGVmaW5lZCBoYXNoIHZhbHVlCisgICBfUHlIQVNIX0lORiBmb3IgeCA+PSAwLCBvciAtX1B5SEFTSF9JTkYgZm9yIHggPCAwLCBpbnN0ZWFkLgorICAgX1B5SEFTSF9JTkYsIC1fUHlIQVNIX0lORiBhbmQgX1B5SEFTSF9OQU4gYXJlIGFsc28gdXNlZCBmb3IgdGhlCisgICBoYXNoZXMgb2YgZmxvYXQgYW5kIERlY2ltYWwgaW5maW5pdGllcyBhbmQgbmFucy4KKworICAgQSBzZWxsaW5nIHBvaW50IGZvciB0aGUgYWJvdmUgc3RyYXRlZ3kgaXMgdGhhdCBpdCBtYWtlcyBpdCBwb3NzaWJsZQorICAgdG8gY29tcHV0ZSBoYXNoZXMgb2YgZGVjaW1hbCBhbmQgYmluYXJ5IGZsb2F0aW5nLXBvaW50IG51bWJlcnMKKyAgIGVmZmljaWVudGx5LCBldmVuIGlmIHRoZSBleHBvbmVudCBvZiB0aGUgYmluYXJ5IG9yIGRlY2ltYWwgbnVtYmVyCisgICBpcyBsYXJnZS4gIFRoZSBrZXkgcG9pbnQgaXMgdGhhdAorCisgICAgICByZWR1Y2UoeCAqIHkpID09IHJlZHVjZSh4KSAqIHJlZHVjZSh5KSAobW9kdWxvIF9QeUhBU0hfTU9EVUxVUykKKworICAgcHJvdmlkZWQgdGhhdCB7cmVkdWNlKHgpLCByZWR1Y2UoeSl9ICE9IHswLCBpbmZpbml0eX0uICBUaGUgcmVkdWN0aW9uIG9mIGEKKyAgIGJpbmFyeSBvciBkZWNpbWFsIGZsb2F0IGlzIG5ldmVyIGluZmluaXR5LCBzaW5jZSB0aGUgZGVub21pbmF0b3IgaXMgYSBwb3dlcgorICAgb2YgMiAoZm9yIGJpbmFyeSkgb3IgYSBkaXZpc29yIG9mIGEgcG93ZXIgb2YgMTAgKGZvciBkZWNpbWFsKS4gIFNvIHdlIGhhdmUsCisgICBmb3Igbm9ubmVnYXRpdmUgeCwKKworICAgICAgcmVkdWNlKHggKiAyKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMioqZSkgJSBfUHlIQVNIX01PRFVMVVMKKworICAgICAgcmVkdWNlKHggKiAxMCoqZSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKDEwKiplKSAlIF9QeUhBU0hfTU9EVUxVUworCisgICBhbmQgcmVkdWNlKDEwKiplKSBjYW4gYmUgY29tcHV0ZWQgZWZmaWNpZW50bHkgYnkgdGhlIHVzdWFsIG1vZHVsYXIKKyAgIGV4cG9uZW50aWF0aW9uIGFsZ29yaXRobS4gIEZvciByZWR1Y2UoMioqZSkgaXQncyBldmVuIGJldHRlcjogc2luY2UKKyAgIFAgaXMgb2YgdGhlIGZvcm0gMioqbi0xLCByZWR1Y2UoMioqZSkgaXMgMioqKGUgbW9kIG4pLCBhbmQgbXVsdGlwbGljYXRpb24KKyAgIGJ5IDIqKihlIG1vZCBuKSBtb2R1bG8gMioqbi0xIGp1c3QgYW1vdW50cyB0byBhIHJvdGF0aW9uIG9mIGJpdHMuCisKKyAgICovCisKK1B5X2hhc2hfdAorX1B5X0hhc2hEb3VibGUoZG91YmxlIHYpCit7CisgICAgaW50IGUsIHNpZ247CisgICAgZG91YmxlIG07CisgICAgUHlfdWhhc2hfdCB4LCB5OworCisgICAgaWYgKCFQeV9JU19GSU5JVEUodikpIHsKKyAgICAgICAgaWYgKFB5X0lTX0lORklOSVRZKHYpKQorICAgICAgICAgICAgcmV0dXJuIHYgPiAwID8gX1B5SEFTSF9JTkYgOiAtX1B5SEFTSF9JTkY7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBfUHlIQVNIX05BTjsKKyAgICB9CisKKyAgICBtID0gZnJleHAodiwgJmUpOworCisgICAgc2lnbiA9IDE7CisgICAgaWYgKG0gPCAwKSB7CisgICAgICAgIHNpZ24gPSAtMTsKKyAgICAgICAgbSA9IC1tOworICAgIH0KKworICAgIC8qIHByb2Nlc3MgMjggYml0cyBhdCBhIHRpbWU7ICB0aGlzIHNob3VsZCB3b3JrIHdlbGwgYm90aCBmb3IgYmluYXJ5CisgICAgICAgYW5kIGhleGFkZWNpbWFsIGZsb2F0aW5nIHBvaW50LiAqLworICAgIHggPSAwOworICAgIHdoaWxlIChtKSB7CisgICAgICAgIHggPSAoKHggPDwgMjgpICYgX1B5SEFTSF9NT0RVTFVTKSB8IHggPj4gKF9QeUhBU0hfQklUUyAtIDI4KTsKKyAgICAgICAgbSAqPSAyNjg0MzU0NTYuMDsgIC8qIDIqKjI4ICovCisgICAgICAgIGUgLT0gMjg7CisgICAgICAgIHkgPSAoUHlfdWhhc2hfdCltOyAgLyogcHVsbCBvdXQgaW50ZWdlciBwYXJ0ICovCisgICAgICAgIG0gLT0geTsKKyAgICAgICAgeCArPSB5OworICAgICAgICBpZiAoeCA+PSBfUHlIQVNIX01PRFVMVVMpCisgICAgICAgICAgICB4IC09IF9QeUhBU0hfTU9EVUxVUzsKKyAgICB9CisKKyAgICAvKiBhZGp1c3QgZm9yIHRoZSBleHBvbmVudDsgIGZpcnN0IHJlZHVjZSBpdCBtb2R1bG8gX1B5SEFTSF9CSVRTICovCisgICAgZSA9IGUgPj0gMCA/IGUgJSBfUHlIQVNIX0JJVFMgOiBfUHlIQVNIX0JJVFMtMS0oKC0xLWUpICUgX1B5SEFTSF9CSVRTKTsKKyAgICB4ID0gKCh4IDw8IGUpICYgX1B5SEFTSF9NT0RVTFVTKSB8IHggPj4gKF9QeUhBU0hfQklUUyAtIGUpOworCisgICAgeCA9IHggKiBzaWduOworICAgIGlmICh4ID09IChQeV91aGFzaF90KS0xKQorICAgICAgICB4ID0gKFB5X3VoYXNoX3QpLTI7CisgICAgcmV0dXJuIChQeV9oYXNoX3QpeDsKK30KKworUHlfaGFzaF90CitfUHlfSGFzaFBvaW50ZXIodm9pZCAqcCkKK3sKKyAgICBQeV9oYXNoX3QgeDsKKyAgICBzaXplX3QgeSA9IChzaXplX3QpcDsKKyAgICAvKiBib3R0b20gMyBvciA0IGJpdHMgYXJlIGxpa2VseSB0byBiZSAwOyByb3RhdGUgeSBieSA0IHRvIGF2b2lkCisgICAgICAgZXhjZXNzaXZlIGhhc2ggY29sbGlzaW9ucyBmb3IgZGljdHMgYW5kIHNldHMgKi8KKyAgICB5ID0gKHkgPj4gNCkgfCAoeSA8PCAoOCAqIFNJWkVPRl9WT0lEX1AgLSA0KSk7CisgICAgeCA9IChQeV9oYXNoX3QpeTsKKyAgICBpZiAoeCA9PSAtMSkKKyAgICAgICAgeCA9IC0yOworICAgIHJldHVybiB4OworfQorCitQeV9oYXNoX3QKK19QeV9IYXNoQnl0ZXMoY29uc3Qgdm9pZCAqc3JjLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBQeV9oYXNoX3QgeDsKKyAgICAvKgorICAgICAgV2UgbWFrZSB0aGUgaGFzaCBvZiB0aGUgZW1wdHkgc3RyaW5nIGJlIDAsIHJhdGhlciB0aGFuIHVzaW5nCisgICAgICAocHJlZml4IF4gc3VmZml4KSwgc2luY2UgdGhpcyBzbGlnaHRseSBvYmZ1c2NhdGVzIHRoZSBoYXNoIHNlY3JldAorICAgICovCisgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworI2lmZGVmIFB5X0hBU0hfU1RBVFMKKyAgICBoYXNoc3RhdHNbKGxlbiA8PSBQeV9IQVNIX1NUQVRTX01BWCkgPyBsZW4gOiAwXSsrOworI2VuZGlmCisKKyNpZiBQeV9IQVNIX0NVVE9GRiA+IDAKKyAgICBpZiAobGVuIDwgUHlfSEFTSF9DVVRPRkYpIHsKKyAgICAgICAgLyogT3B0aW1pemUgaGFzaGluZyBvZiB2ZXJ5IHNtYWxsIHN0cmluZ3Mgd2l0aCBpbmxpbmUgREpCWDMzQS4gKi8KKyAgICAgICAgUHlfdWhhc2hfdCBoYXNoOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gc3JjOworICAgICAgICBoYXNoID0gNTM4MTsgLyogREpCWDMzQSBzdGFydHMgd2l0aCA1MzgxICovCisKKyAgICAgICAgc3dpdGNoKGxlbikgeworICAgICAgICAgICAgLyogKChoYXNoIDw8IDUpICsgaGFzaCkgKyAqcCA9PSBoYXNoICogMzMgKyAqcCAqLworICAgICAgICAgICAgY2FzZSA3OiBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyAqcCsrOyAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSA2OiBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyAqcCsrOyAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSA1OiBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyAqcCsrOyAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSA0OiBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyAqcCsrOyAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSAzOiBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyAqcCsrOyAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSAyOiBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyAqcCsrOyAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSAxOiBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyAqcCsrOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGhhc2ggXj0gbGVuOworICAgICAgICBoYXNoIF49IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5kamJ4MzNhLnN1ZmZpeDsKKyAgICAgICAgeCA9IChQeV9oYXNoX3QpaGFzaDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIFB5X0hBU0hfQ1VUT0ZGICovCisgICAgICAgIHggPSBQeUhhc2hfRnVuYy5oYXNoKHNyYywgbGVuKTsKKworICAgIGlmICh4ID09IC0xKQorICAgICAgICByZXR1cm4gLTI7CisgICAgcmV0dXJuIHg7Cit9CisKK3ZvaWQKK19QeUhhc2hfRmluaSh2b2lkKQoreworI2lmZGVmIFB5X0hBU0hfU1RBVFMKKyAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IHRvdGFsID0gMDsKKyAgICBjaGFyICpmbXQgPSAiJTJpICU4IiBQWV9GT1JNQVRfU0laRV9UICJkICU4IiBQWV9GT1JNQVRfU0laRV9UICJkXG4iOworCisgICAgZnByaW50ZihzdGRlcnIsICJsZW4gICBjYWxscyAgICB0b3RhbFxuIik7CisgICAgZm9yIChpID0gMTsgaSA8PSBQeV9IQVNIX1NUQVRTX01BWDsgaSsrKSB7CisgICAgICAgIHRvdGFsICs9IGhhc2hzdGF0c1tpXTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIGZtdCwgaSwgaGFzaHN0YXRzW2ldLCB0b3RhbCk7CisgICAgfQorICAgIHRvdGFsICs9IGhhc2hzdGF0c1swXTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIj4gICU4IiBQWV9GT1JNQVRfU0laRV9UICJkICU4IiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAorICAgICAgICAgICAgaGFzaHN0YXRzWzBdLCB0b3RhbCk7CisjZW5kaWYKK30KKworUHlIYXNoX0Z1bmNEZWYgKgorUHlIYXNoX0dldEZ1bmNEZWYodm9pZCkKK3sKKyAgICByZXR1cm4gJlB5SGFzaF9GdW5jOworfQorCisvKiBPcHRpbWl6ZWQgbWVtY3B5KCkgZm9yIFdpbmRvd3MgKi8KKyNpZmRlZiBfTVNDX1ZFUgorIyAgaWYgU0laRU9GX1BZX1VIQVNIX1QgPT0gNAorIyAgICBkZWZpbmUgUFlfVUhBU0hfQ1BZKGRzdCwgc3JjKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGRzdFswXSA9IHNyY1swXTsgZHN0WzFdID0gc3JjWzFdOyBkc3RbMl0gPSBzcmNbMl07IGRzdFszXSA9IHNyY1szXTsgXAorICAgICAgIH0gd2hpbGUoMCkKKyMgIGVsaWYgU0laRU9GX1BZX1VIQVNIX1QgPT0gOAorIyAgICBkZWZpbmUgUFlfVUhBU0hfQ1BZKGRzdCwgc3JjKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGRzdFswXSA9IHNyY1swXTsgZHN0WzFdID0gc3JjWzFdOyBkc3RbMl0gPSBzcmNbMl07IGRzdFszXSA9IHNyY1szXTsgXAorICAgICAgIGRzdFs0XSA9IHNyY1s0XTsgZHN0WzVdID0gc3JjWzVdOyBkc3RbNl0gPSBzcmNbNl07IGRzdFs3XSA9IHNyY1s3XTsgXAorICAgICAgIH0gd2hpbGUoMCkKKyMgIGVsc2UKKyMgICAgZXJyb3IgU0laRU9GX1BZX1VIQVNIX1QgbXVzdCBiZSA0IG9yIDgKKyMgIGVuZGlmIC8qIFNJWkVPRl9QWV9VSEFTSF9UICovCisjZWxzZSAvKiBub3QgV2luZG93cyAqLworIyAgZGVmaW5lIFBZX1VIQVNIX0NQWShkc3QsIHNyYykgbWVtY3B5KGRzdCwgc3JjLCBTSVpFT0ZfUFlfVUhBU0hfVCkKKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworCisKKyNpZiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX0ZOVgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZGlmaWVkIEZvd2xlci1Ob2xsLVZvIChGTlYpIGhhc2ggZnVuY3Rpb24KKyAqLworc3RhdGljIFB5X2hhc2hfdAorZm52KGNvbnN0IHZvaWQgKnNyYywgUHlfc3NpemVfdCBsZW4pCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHNyYzsKKyAgICBQeV91aGFzaF90IHg7CisgICAgUHlfc3NpemVfdCByZW1haW5kZXIsIGJsb2NrczsKKyAgICB1bmlvbiB7CisgICAgICAgIFB5X3VoYXNoX3QgdmFsdWU7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbU0laRU9GX1BZX1VIQVNIX1RdOworICAgIH0gYmxvY2s7CisKKyNpZmRlZiBQeV9ERUJVRworICAgIGFzc2VydChfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZCk7CisjZW5kaWYKKyAgICByZW1haW5kZXIgPSBsZW4gJSBTSVpFT0ZfUFlfVUhBU0hfVDsKKyAgICBpZiAocmVtYWluZGVyID09IDApIHsKKyAgICAgICAgLyogUHJvY2VzcyBhdCBsZWFzdCBvbmUgYmxvY2sgYnl0ZSBieSBieXRlIHRvIHJlZHVjZSBoYXNoIGNvbGxpc2lvbnMKKyAgICAgICAgICogZm9yIHN0cmluZ3Mgd2l0aCBjb21tb24gcHJlZml4ZXMuICovCisgICAgICAgIHJlbWFpbmRlciA9IFNJWkVPRl9QWV9VSEFTSF9UOworICAgIH0KKyAgICBibG9ja3MgPSAobGVuIC0gcmVtYWluZGVyKSAvIFNJWkVPRl9QWV9VSEFTSF9UOworCisgICAgeCA9IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5mbnYucHJlZml4OworICAgIHggXj0gKFB5X3VoYXNoX3QpICpwIDw8IDc7CisgICAgd2hpbGUgKGJsb2Nrcy0tKSB7CisgICAgICAgIFBZX1VIQVNIX0NQWShibG9jay5ieXRlcywgcCk7CisgICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiBibG9jay52YWx1ZTsKKyAgICAgICAgcCArPSBTSVpFT0ZfUFlfVUhBU0hfVDsKKyAgICB9CisgICAgLyogYWRkIHJlbWFpbmRlciAqLworICAgIGZvciAoOyByZW1haW5kZXIgPiAwOyByZW1haW5kZXItLSkKKyAgICAgICAgeCA9IChfUHlIQVNIX01VTFRJUExJRVIgKiB4KSBeIChQeV91aGFzaF90KSAqcCsrOworICAgIHggXj0gKFB5X3VoYXNoX3QpIGxlbjsKKyAgICB4IF49IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5mbnYuc3VmZml4OworICAgIGlmICh4ID09IC0xKSB7CisgICAgICAgIHggPSAtMjsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHtmbnYsICJmbnYiLCA4ICogU0laRU9GX1BZX0hBU0hfVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAqIFNJWkVPRl9QWV9IQVNIX1R9OworCisjZW5kaWYgLyogUHlfSEFTSF9BTEdPUklUSE0gPT0gUHlfSEFTSF9GTlYgKi8KKworCisjaWYgUHlfSEFTSF9BTEdPUklUSE0gPT0gUHlfSEFTSF9TSVBIQVNIMjQKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgPE1JVCBMaWNlbnNlPgorIENvcHlyaWdodCAoYykgMjAxMyAgTWFyZWsgTWFqa293c2tpIDxtYXJla0Bwb3Bjb3VudC5vcmc+CisKKyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cisgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgVEhFIFNPRlRXQVJFLgorIDwvTUlUIExpY2Vuc2U+CisKKyBPcmlnaW5hbCBsb2NhdGlvbjoKKyAgICBodHRwczovL2dpdGh1Yi5jb20vbWFqZWsvY3NpcGhhc2gvCisKKyBTb2x1dGlvbiBpbnNwaXJlZCBieSBjb2RlIGZyb206CisgICAgU2FtdWVsIE5ldmVzIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlKQorICAgIGRqYiAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZTIpCisgICAgSmVhbi1QaGlsaXBwZSBBdW1hc3NvbiAoaHR0cHM6Ly8xMzEwMDIubmV0L3NpcGhhc2gvc2lwaGFzaDI0LmMpCisKKyBNb2RpZmllZCBmb3IgUHl0aG9uIGJ5IENocmlzdGlhbiBIZWltZXM6CisgICAgLSBDODkgLyBNU1ZDIGNvbXBhdGliaWxpdHkKKyAgICAtIFBZX1VJTlQ2NF9ULCBQWV9VSU5UMzJfVCBhbmQgUFlfVUlOVDhfVAorICAgIC0gX3JvdGw2NCgpIG9uIFdpbmRvd3MKKyAgICAtIGxldG9oNjQoKSBmYWxsYmFjaworKi8KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFBZX1VJTlQ4X1Q7CisKKy8qIGJ5dGUgc3dhcCBsaXR0bGUgZW5kaWFuIHRvIGhvc3QgZW5kaWFuCisgKiBFbmRpYW4gY29udmVyc2lvbiBub3Qgb25seSBlbnN1cmVzIHRoYXQgdGhlIGhhc2ggZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZQorICogdmFsdWUgb24gYWxsIHBsYXRmb3Jtcy4gSXQgaXMgYWxzbyByZXF1aXJlZCB0byBmb3IgYSBnb29kIGRpc3BlcnNpb24gb2YKKyAqIHRoZSBoYXNoIHZhbHVlcycgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4KKyAqLworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyMgIGRlZmluZSBfbGU2NHRvaCh4KSAoKFBZX1VJTlQ2NF9UKSh4KSkKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorIyAgZGVmaW5lIF9sZTY0dG9oKHgpIE9TU3dhcExpdHRsZVRvSG9zdEludDY0KHgpCisjZWxpZiBkZWZpbmVkKEhBVkVfTEVUT0g2NCkKKyMgIGRlZmluZSBfbGU2NHRvaCh4KSBsZTY0dG9oKHgpCisjZWxzZQorIyAgZGVmaW5lIF9sZTY0dG9oKHgpICgoKFBZX1VJTlQ2NF9UKSh4KSA8PCA1NikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpIDw8IDQwKSAmIDB4ZmYwMDAwMDAwMDAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA8PCAyNCkgJiAweGZmMDAwMDAwMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpIDw8IDgpICAmIDB4ZmYwMDAwMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpID4+IDgpICAmIDB4ZmYwMDAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA+PiAyNCkgJiAweGZmMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpID4+IDQwKSAmIDB4ZmYwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKChQWV9VSU5UNjRfVCkoeCkgID4+IDU2KSkKKyNlbmRpZgorCisKKyNpZmRlZiBfTVNDX1ZFUgorIyAgZGVmaW5lIFJPVEFURSh4LCBiKSAgX3JvdGw2NCh4LCBiKQorI2Vsc2UKKyMgIGRlZmluZSBST1RBVEUoeCwgYikgKFBZX1VJTlQ2NF9UKSggKCh4KSA8PCAoYikpIHwgKCAoeCkgPj4gKDY0IC0gKGIpKSkgKQorI2VuZGlmCisKKyNkZWZpbmUgSEFMRl9ST1VORChhLGIsYyxkLHMsdCkgICAgICAgICBcCisgICAgYSArPSBiOyBjICs9IGQ7ICAgICAgICAgICAgIFwKKyAgICBiID0gUk9UQVRFKGIsIHMpIF4gYTsgICAgICAgICAgIFwKKyAgICBkID0gUk9UQVRFKGQsIHQpIF4gYzsgICAgICAgICAgIFwKKyAgICBhID0gUk9UQVRFKGEsIDMyKTsKKworI2RlZmluZSBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpICAgICAgIFwKKyAgICBIQUxGX1JPVU5EKHYwLHYxLHYyLHYzLDEzLDE2KTsgICAgICBcCisgICAgSEFMRl9ST1VORCh2Mix2MSx2MCx2MywxNywyMSk7ICAgICAgXAorICAgIEhBTEZfUk9VTkQodjAsdjEsdjIsdjMsMTMsMTYpOyAgICAgIFwKKyAgICBIQUxGX1JPVU5EKHYyLHYxLHYwLHYzLDE3LDIxKTsKKworCitzdGF0aWMgUHlfaGFzaF90CitzaXBoYXNoMjQoY29uc3Qgdm9pZCAqc3JjLCBQeV9zc2l6ZV90IHNyY19zeikgeworICAgIFBZX1VJTlQ2NF9UIGswID0gX2xlNjR0b2goX1B5X0hhc2hTZWNyZXQuc2lwaGFzaC5rMCk7CisgICAgUFlfVUlOVDY0X1QgazEgPSBfbGU2NHRvaChfUHlfSGFzaFNlY3JldC5zaXBoYXNoLmsxKTsKKyAgICBQWV9VSU5UNjRfVCBiID0gKFBZX1VJTlQ2NF9UKXNyY19zeiA8PCA1NjsKKyAgICBjb25zdCBQWV9VSU5UNjRfVCAqaW4gPSAoUFlfVUlOVDY0X1QqKXNyYzsKKworICAgIFBZX1VJTlQ2NF9UIHYwID0gazAgXiAweDczNmY2ZDY1NzA3MzY1NzVVTEw7CisgICAgUFlfVUlOVDY0X1QgdjEgPSBrMSBeIDB4NjQ2ZjcyNjE2ZTY0NmY2ZFVMTDsKKyAgICBQWV9VSU5UNjRfVCB2MiA9IGswIF4gMHg2Yzc5Njc2NTZlNjU3MjYxVUxMOworICAgIFBZX1VJTlQ2NF9UIHYzID0gazEgXiAweDc0NjU2NDYyNzk3NDY1NzNVTEw7CisKKyAgICBQWV9VSU5UNjRfVCB0OworICAgIFBZX1VJTlQ4X1QgKnB0OworICAgIFBZX1VJTlQ4X1QgKm07CisKKyAgICB3aGlsZSAoc3JjX3N6ID49IDgpIHsKKyAgICAgICAgUFlfVUlOVDY0X1QgbWkgPSBfbGU2NHRvaCgqaW4pOworICAgICAgICBpbiArPSAxOworICAgICAgICBzcmNfc3ogLT0gODsKKyAgICAgICAgdjMgXj0gbWk7CisgICAgICAgIERPVUJMRV9ST1VORCh2MCx2MSx2Mix2Myk7CisgICAgICAgIHYwIF49IG1pOworICAgIH0KKworICAgIHQgPSAwOworICAgIHB0ID0gKFBZX1VJTlQ4X1QgKikmdDsKKyAgICBtID0gKFBZX1VJTlQ4X1QgKilpbjsKKyAgICBzd2l0Y2ggKHNyY19zeikgeworICAgICAgICBjYXNlIDc6IHB0WzZdID0gbVs2XTsKKyAgICAgICAgY2FzZSA2OiBwdFs1XSA9IG1bNV07CisgICAgICAgIGNhc2UgNTogcHRbNF0gPSBtWzRdOworICAgICAgICBjYXNlIDQ6IFB5X01FTUNQWShwdCwgbSwgc2l6ZW9mKFBZX1VJTlQzMl9UKSk7IGJyZWFrOworICAgICAgICBjYXNlIDM6IHB0WzJdID0gbVsyXTsKKyAgICAgICAgY2FzZSAyOiBwdFsxXSA9IG1bMV07CisgICAgICAgIGNhc2UgMTogcHRbMF0gPSBtWzBdOworICAgIH0KKyAgICBiIHw9IF9sZTY0dG9oKHQpOworCisgICAgdjMgXj0gYjsKKyAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworICAgIHYwIF49IGI7CisgICAgdjIgXj0gMHhmZjsKKyAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworICAgIERPVUJMRV9ST1VORCh2MCx2MSx2Mix2Myk7CisKKyAgICAvKiBtb2RpZmllZCAqLworICAgIHQgPSAodjAgXiB2MSkgXiAodjIgXiB2Myk7CisgICAgcmV0dXJuIChQeV9oYXNoX3QpdDsKK30KKworc3RhdGljIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jID0ge3NpcGhhc2gyNCwgInNpcGhhc2gyNCIsIDY0LCAxMjh9OworCisjZW5kaWYgLyogUHlfSEFTSF9BTEdPUklUSE0gPT0gUHlfSEFTSF9TSVBIQVNIMjQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0YXRlLmMgYi9QeXRob24vcHlzdGF0ZS5jCmluZGV4IDc3MmFhNTMuLjJhYzJmZDUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXN0YXRlLmMKKysrIGIvUHl0aG9uL3B5c3RhdGUuYwpAQCAtNiwxMSArNiwxMSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENBVVRJT04KIAotQWx3YXlzIHVzZSBtYWxsb2MoKSBhbmQgZnJlZSgpIGRpcmVjdGx5IGluIHRoaXMgZmlsZS4gIEEgbnVtYmVyIG9mIHRoZXNlCi1mdW5jdGlvbnMgYXJlIGFkdmVydGlzZWQgYXMgc2FmZSB0byBjYWxsIHdoZW4gdGhlIEdJTCBpc24ndCBoZWxkLCBhbmQgaW4KLWEgZGVidWcgYnVpbGQgUHl0aG9uIHJlZGlyZWN0cyAoZS5nLikgUHlNZW1fTkVXIChldGMpIHRvIFB5dGhvbidzIGRlYnVnZ2luZwotb2JtYWxsb2MgZnVuY3Rpb25zLiAgVGhvc2UgYXJlbid0IHRocmVhZC1zYWZlICh0aGV5IHJlbHkgb24gdGhlIEdJTCB0byBhdm9pZAotdGhlIGV4cGVuc2Ugb2YgZG9pbmcgdGhlaXIgb3duIGxvY2tpbmcpLgorQWx3YXlzIHVzZSBQeU1lbV9SYXdNYWxsb2MoKSBhbmQgUHlNZW1fUmF3RnJlZSgpIGRpcmVjdGx5IGluIHRoaXMgZmlsZS4gIEEKK251bWJlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFkdmVydGlzZWQgYXMgc2FmZSB0byBjYWxsIHdoZW4gdGhlIEdJTCBpc24ndAoraGVsZCwgYW5kIGluIGEgZGVidWcgYnVpbGQgUHl0aG9uIHJlZGlyZWN0cyAoZS5nLikgUHlNZW1fTkVXIChldGMpIHRvIFB5dGhvbidzCitkZWJ1Z2dpbmcgb2JtYWxsb2MgZnVuY3Rpb25zLiAgVGhvc2UgYXJlbid0IHRocmVhZC1zYWZlICh0aGV5IHJlbHkgb24gdGhlIEdJTAordG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgZG9pbmcgdGhlaXIgb3duIGxvY2tpbmcpLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2lmZGVmIEhBVkVfRExPUEVOCkBAIC02MCw3ICs2MCw3IEBACiBQeUludGVycHJldGVyU3RhdGVfTmV3KHZvaWQpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSAoUHlJbnRlcnByZXRlclN0YXRlICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFB5SW50ZXJwcmV0ZXJTdGF0ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1fUmF3TWFsbG9jKHNpemVvZihQeUludGVycHJldGVyU3RhdGUpKTsKIAogICAgIGlmIChpbnRlcnAgIT0gTlVMTCkgewogICAgICAgICBIRUFEX0lOSVQoKTsKQEAgLTcyLDYgKzcyLDcgQEAKICAgICAgICAgaW50ZXJwLT5tb2R1bGVzX2J5X2luZGV4ID0gTlVMTDsKICAgICAgICAgaW50ZXJwLT5zeXNkaWN0ID0gTlVMTDsKICAgICAgICAgaW50ZXJwLT5idWlsdGlucyA9IE5VTEw7CisgICAgICAgIGludGVycC0+YnVpbHRpbnNfY29weSA9IE5VTEw7CiAgICAgICAgIGludGVycC0+dHN0YXRlX2hlYWQgPSBOVUxMOwogICAgICAgICBpbnRlcnAtPmNvZGVjX3NlYXJjaF9wYXRoID0gTlVMTDsKICAgICAgICAgaW50ZXJwLT5jb2RlY19zZWFyY2hfY2FjaGUgPSBOVUxMOwpAQCAtMTE1LDYgKzExNiw3IEBACiAgICAgUHlfQ0xFQVIoaW50ZXJwLT5tb2R1bGVzX2J5X2luZGV4KTsKICAgICBQeV9DTEVBUihpbnRlcnAtPnN5c2RpY3QpOwogICAgIFB5X0NMRUFSKGludGVycC0+YnVpbHRpbnMpOworICAgIFB5X0NMRUFSKGludGVycC0+YnVpbHRpbnNfY29weSk7CiAgICAgUHlfQ0xFQVIoaW50ZXJwLT5pbXBvcnRsaWIpOwogfQogCkBAIC0xNDgsNyArMTUwLDcgQEAKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZTogcmVtYWluaW5nIHRocmVhZHMiKTsKICAgICAqcCA9IGludGVycC0+bmV4dDsKICAgICBIRUFEX1VOTE9DSygpOwotICAgIGZyZWUoaW50ZXJwKTsKKyAgICBQeU1lbV9SYXdGcmVlKGludGVycCk7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoaW50ZXJwX2hlYWQgPT0gTlVMTCAmJiBoZWFkX211dGV4ICE9IE5VTEwpIHsKICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKGhlYWRfbXV0ZXgpOwpAQCAtMTY4LDcgKzE3MCw3IEBACiBzdGF0aWMgUHlUaHJlYWRTdGF0ZSAqCiBuZXdfdGhyZWFkc3RhdGUoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAsIGludCBpbml0KQogewotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlICopbWFsbG9jKHNpemVvZihQeVRocmVhZFN0YXRlKSk7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKFB5VGhyZWFkU3RhdGUpKTsKIAogICAgIGlmIChfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSA9PSBOVUxMKQogICAgICAgICBfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSA9IHRocmVhZHN0YXRlX2dldGZyYW1lOwpAQCAtMTgyLDcgKzE4NCw2IEBACiAgICAgICAgIHRzdGF0ZS0+cmVjdXJzaW9uX2NyaXRpY2FsID0gMDsKICAgICAgICAgdHN0YXRlLT50cmFjaW5nID0gMDsKICAgICAgICAgdHN0YXRlLT51c2VfdHJhY2luZyA9IDA7Ci0gICAgICAgIHRzdGF0ZS0+dGlja19jb3VudGVyID0gMDsKICAgICAgICAgdHN0YXRlLT5naWxzdGF0ZV9jb3VudGVyID0gMDsKICAgICAgICAgdHN0YXRlLT5hc3luY19leGMgPSBOVUxMOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yMDgsMTIgKzIwOSwxNyBAQAogCiAgICAgICAgIHRzdGF0ZS0+dHJhc2hfZGVsZXRlX25lc3RpbmcgPSAwOwogICAgICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlciA9IE5VTEw7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9IE5VTEw7CiAKICAgICAgICAgaWYgKGluaXQpCiAgICAgICAgICAgICBfUHlUaHJlYWRTdGF0ZV9Jbml0KHRzdGF0ZSk7CiAKICAgICAgICAgSEVBRF9MT0NLKCk7CisgICAgICAgIHRzdGF0ZS0+cHJldiA9IE5VTEw7CiAgICAgICAgIHRzdGF0ZS0+bmV4dCA9IGludGVycC0+dHN0YXRlX2hlYWQ7CisgICAgICAgIGlmICh0c3RhdGUtPm5leHQpCisgICAgICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGU7CiAgICAgICAgIGludGVycC0+dHN0YXRlX2hlYWQgPSB0c3RhdGU7CiAgICAgICAgIEhFQURfVU5MT0NLKCk7CiAgICAgfQpAQCAtMzE3LDYgKzMyMywzMSBAQAogICAgIHJldHVybiBQeUxpc3RfU2V0SXRlbShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCwgaW5kZXgsIFB5X05vbmUpOwogfQogCisvKiB1c2VkIGJ5IGltcG9ydC5jOlB5SW1wb3J0X0NsZWFudXAgKi8KK3ZvaWQKK19QeVN0YXRlX0NsZWFyTW9kdWxlcyh2b2lkKQoreworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqc3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CisgICAgaWYgKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KSB7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9HRVRfU0laRShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCk7IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKm0gPSBQeUxpc3RfR0VUX0lURU0oc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgsIGkpOworICAgICAgICAgICAgaWYgKFB5TW9kdWxlX0NoZWNrKG0pKSB7CisgICAgICAgICAgICAgICAgLyogY2xlYW51cCB0aGUgc2F2ZWQgY29weSBvZiBtb2R1bGUgZGljdHMgKi8KKyAgICAgICAgICAgICAgICBQeU1vZHVsZURlZiAqbWQgPSBQeU1vZHVsZV9HZXREZWYobSk7CisgICAgICAgICAgICAgICAgaWYgKG1kKQorICAgICAgICAgICAgICAgICAgICBQeV9DTEVBUihtZC0+bV9iYXNlLm1fY29weSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogU2V0dGluZyBtb2R1bGVzX2J5X2luZGV4IHRvIE5VTEwgY291bGQgYmUgZGFuZ2Vyb3VzLCBzbyB3ZQorICAgICAgICAgICBjbGVhciB0aGUgbGlzdCBpbnN0ZWFkLiAqLworICAgICAgICBpZiAoUHlMaXN0X1NldFNsaWNlKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFB5TGlzdF9HRVRfU0laRShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpOworICAgIH0KK30KKwogdm9pZAogUHlUaHJlYWRTdGF0ZV9DbGVhcihQeVRocmVhZFN0YXRlICp0c3RhdGUpCiB7CkBAIC0zNDksMzcgKzM4MCwyMyBAQAogdHN0YXRlX2RlbGV0ZV9jb21tb24oUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwotICAgIFB5VGhyZWFkU3RhdGUgKipwOwotICAgIFB5VGhyZWFkU3RhdGUgKnByZXZfcCA9IE5VTEw7CiAgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeVRocmVhZFN0YXRlX0RlbGV0ZTogTlVMTCB0c3RhdGUiKTsKICAgICBpbnRlcnAgPSB0c3RhdGUtPmludGVycDsKICAgICBpZiAoaW50ZXJwID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBOVUxMIGludGVycCIpOwogICAgIEhFQURfTE9DSygpOwotICAgIGZvciAocCA9ICZpbnRlcnAtPnRzdGF0ZV9oZWFkOyA7IHAgPSAmKCpwKS0+bmV4dCkgewotICAgICAgICBpZiAoKnAgPT0gTlVMTCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBpbnZhbGlkIHRzdGF0ZSIpOwotICAgICAgICBpZiAoKnAgPT0gdHN0YXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8qIFNhbml0eSBjaGVjay4gIFRoZXNlIHN0YXRlcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGJ1dCBpZgotICAgICAgICAgKiB0aGV5IGRvIHdlIG11c3QgYWJvcnQuICBPdGhlcndpc2Ugd2UnbGwgZW5kIHVwIHNwaW5uaW5nIGluCi0gICAgICAgICAqIGluIGEgdGlnaHQgbG9vcCB3aXRoIHRoZSBsb2NrIGhlbGQuICBBIHNpbWlsYXIgY2hlY2sgaXMgZG9uZQotICAgICAgICAgKiBpbiB0aHJlYWQuYyBmaW5kX2tleSgpLiAgKi8KLSAgICAgICAgaWYgKCpwID09IHByZXZfcCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBzbWFsbCBjaXJjdWxhciBsaXN0KCEpIgotICAgICAgICAgICAgICAgICIgYW5kIHRzdGF0ZSBub3QgZm91bmQuIik7Ci0gICAgICAgIHByZXZfcCA9ICpwOwotICAgICAgICBpZiAoKCpwKS0+bmV4dCA9PSBpbnRlcnAtPnRzdGF0ZV9oZWFkKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IGNpcmN1bGFyIGxpc3QoISkgYW5kIgotICAgICAgICAgICAgICAgICIgdHN0YXRlIG5vdCBmb3VuZC4iKTsKLSAgICB9Ci0gICAgKnAgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+cHJldikKKyAgICAgICAgdHN0YXRlLT5wcmV2LT5uZXh0ID0gdHN0YXRlLT5uZXh0OworICAgIGVsc2UKKyAgICAgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5uZXh0KQorICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGUtPnByZXY7CiAgICAgSEVBRF9VTkxPQ0soKTsKLSAgICBmcmVlKHRzdGF0ZSk7CisgICAgaWYgKHRzdGF0ZS0+b25fZGVsZXRlICE9IE5VTEwpIHsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUodHN0YXRlLT5vbl9kZWxldGVfZGF0YSk7CisgICAgfQorICAgIFB5TWVtX1Jhd0ZyZWUodHN0YXRlKTsKIH0KIAogCkBAIC00MTQsNiArNDMxLDQzIEBACiAjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KIAogCisvKgorICogRGVsZXRlIGFsbCB0aHJlYWQgc3RhdGVzIGV4Y2VwdCB0aGUgb25lIHBhc3NlZCBhcyBhcmd1bWVudC4KKyAqIE5vdGUgdGhhdCwgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRocmVhZCBzdGF0ZSwgaXQgKm11c3QqIGJlIHRoZSBvbmUKKyAqIHBhc3NlZCBhcyBhcmd1bWVudC4gIEFsc28sIHRoaXMgd29uJ3QgdG91Y2ggYW55IG90aGVyIGludGVycHJldGVycworICogdGhhbiB0aGUgY3VycmVudCBvbmUsIHNpbmNlIHdlIGRvbid0IGtub3cgd2hpY2ggdGhyZWFkIHN0YXRlIHNob3VsZAorICogYmUga2VwdCBpbiB0aG9zZSBvdGhlciBpbnRlcnByZXRlcmVzLgorICovCit2b2lkCitfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQoreworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CisgICAgUHlUaHJlYWRTdGF0ZSAqcCwgKm5leHQsICpnYXJiYWdlOworICAgIEhFQURfTE9DSygpOworICAgIC8qIFJlbW92ZSBhbGwgdGhyZWFkIHN0YXRlcywgZXhjZXB0IHRzdGF0ZSwgZnJvbSB0aGUgbGlua2VkIGxpc3Qgb2YKKyAgICAgICB0aHJlYWQgc3RhdGVzLiAgVGhpcyB3aWxsIGFsbG93IGNhbGxpbmcgUHlUaHJlYWRTdGF0ZV9DbGVhcigpCisgICAgICAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiAqLworICAgIGdhcmJhZ2UgPSBpbnRlcnAtPnRzdGF0ZV9oZWFkOworICAgIGlmIChnYXJiYWdlID09IHRzdGF0ZSkKKyAgICAgICAgZ2FyYmFnZSA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5wcmV2KQorICAgICAgICB0c3RhdGUtPnByZXYtPm5leHQgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+bmV4dCkKKyAgICAgICAgdHN0YXRlLT5uZXh0LT5wcmV2ID0gdHN0YXRlLT5wcmV2OworICAgIHRzdGF0ZS0+cHJldiA9IHRzdGF0ZS0+bmV4dCA9IE5VTEw7CisgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZTsKKyAgICBIRUFEX1VOTE9DSygpOworICAgIC8qIENsZWFyIGFuZCBkZWFsbG9jYXRlIGFsbCBzdGFsZSB0aHJlYWQgc3RhdGVzLiAgRXZlbiBpZiB0aGlzCisgICAgICAgZXhlY3V0ZXMgUHl0aG9uIGNvZGUsIHdlIHNob3VsZCBiZSBzYWZlIHNpbmNlIGl0IGV4ZWN1dGVzCisgICAgICAgaW4gdGhlIGN1cnJlbnQgdGhyZWFkLCBub3Qgb25lIG9mIHRoZSBzdGFsZSB0aHJlYWRzLiAqLworICAgIGZvciAocCA9IGdhcmJhZ2U7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBwLT5uZXh0OworICAgICAgICBQeVRocmVhZFN0YXRlX0NsZWFyKHApOworICAgICAgICBQeU1lbV9SYXdGcmVlKHApOworICAgIH0KK30KKworCiBQeVRocmVhZFN0YXRlICoKIFB5VGhyZWFkU3RhdGVfR2V0KHZvaWQpCiB7CkBAIC02NzEsMTggKzcyNSwxOCBAQAogCiAgICAgICAgVGhlIG9ubHkgc2l0dWF0aW9uIHdoZXJlIHlvdSBjYW4gbGVnaXRpbWF0ZWx5IGhhdmUgbW9yZSB0aGFuIG9uZQogICAgICAgIHRocmVhZCBzdGF0ZSBmb3IgYW4gT1MgbGV2ZWwgdGhyZWFkIGlzIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlCi0gICAgICAgaW50ZXJwcmV0ZXJzLCB3aGVuOgorICAgICAgIGludGVycHJldGVycy4KIAotICAgICAgICAgICBhKSBZb3Ugc2hvdWxkbid0IHJlYWxseSBiZSB1c2luZyB0aGUgUHlHSUxTdGF0ZV8gQVBJcyBhbnl3YXksCi0gICAgICAgICAgYW5kOgorICAgICAgIFlvdSBzaG91bGRuJ3QgcmVhbGx5IGJlIHVzaW5nIHRoZSBQeUdJTFN0YXRlXyBBUElzIGFueXdheSAoc2VlIGlzc3VlcworICAgICAgICMxMDkxNSBhbmQgIzE1NzUxKS4KIAotICAgICAgICAgICBiKSBUaGUgc2xpZ2h0bHkgb2RkIHdheSBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlIHdvcmtzIChzZWUKLSAgICAgICAgICBjb21tZW50cyBieSBpdHMgaW1wbGVtZW50YXRpb24pIG1lYW5zIHRoYXQgdGhlIGZpcnN0IHRocmVhZAotICAgICAgICAgIHN0YXRlIGNyZWF0ZWQgZm9yIHRoYXQgZ2l2ZW4gT1MgbGV2ZWwgdGhyZWFkIHdpbGwgIndpbiIsCi0gICAgICAgICAgd2hpY2ggc2VlbXMgcmVhc29uYWJsZSBiZWhhdmlvdXIuCisgICAgICAgVGhlIGZpcnN0IHRocmVhZCBzdGF0ZSBjcmVhdGVkIGZvciB0aGF0IGdpdmVuIE9TIGxldmVsIHRocmVhZCB3aWxsCisgICAgICAgIndpbiIsIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUgYmVoYXZpb3VyLgogICAgICovCi0gICAgaWYgKFB5VGhyZWFkX3NldF9rZXlfdmFsdWUoYXV0b1RMU2tleSwgKHZvaWQgKil0c3RhdGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ291bGRuJ3QgY3JlYXRlIGF1dG9UTFNrZXkgbWFwcGluZyIpOworICAgIGlmIChQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5VGhyZWFkX3NldF9rZXlfdmFsdWUoYXV0b1RMU2tleSwgKHZvaWQgKil0c3RhdGUpIDwgMCkKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNvdWxkbid0IGNyZWF0ZSBhdXRvVExTa2V5IG1hcHBpbmciKTsKKyAgICB9CiAKICAgICAvKiBQeUdJTFN0YXRlX1JlbGVhc2UgbXVzdCBub3QgdHJ5IHRvIGRlbGV0ZSB0aGlzIHRocmVhZCBzdGF0ZS4gKi8KICAgICB0c3RhdGUtPmdpbHN0YXRlX2NvdW50ZXIgPSAxOwpAQCAtNjk3LDYgKzc1MSwxNSBAQAogICAgIHJldHVybiAoUHlUaHJlYWRTdGF0ZSAqKVB5VGhyZWFkX2dldF9rZXlfdmFsdWUoYXV0b1RMU2tleSk7CiB9CiAKK2ludAorUHlHSUxTdGF0ZV9DaGVjayh2b2lkKQoreworICAgIC8qIGNhbid0IHVzZSBQeVRocmVhZFN0YXRlX0dldCgpIHNpbmNlIGl0IHdpbGwgYXNzZXJ0IHRoYXQgaXQgaGFzIHRoZSBHSUwgKi8KKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSopX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoCisgICAgICAgICZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKKyAgICByZXR1cm4gdHN0YXRlICYmICh0c3RhdGUgPT0gUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKSk7Cit9CisKIFB5R0lMU3RhdGVfU1RBVEUKIFB5R0lMU3RhdGVfRW5zdXJlKHZvaWQpCiB7CkBAIC03MTAsNiArNzczLDExIEBACiAgICAgYXNzZXJ0KGF1dG9JbnRlcnByZXRlclN0YXRlKTsgLyogUHlfSW5pdGlhbGl6ZSgpIGhhc24ndCBiZWVuIGNhbGxlZCEgKi8KICAgICB0Y3VyID0gKFB5VGhyZWFkU3RhdGUgKilQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpOwogICAgIGlmICh0Y3VyID09IE5VTEwpIHsKKyAgICAgICAgLyogQXQgc3RhcnR1cCwgUHl0aG9uIGhhcyBubyBjb25jcmV0ZSBHSUwuIElmIFB5R0lMU3RhdGVfRW5zdXJlKCkgaXMKKyAgICAgICAgICAgY2FsbGVkIGZyb20gYSBuZXcgdGhyZWFkIGZvciB0aGUgZmlyc3QgdGltZSwgd2UgbmVlZCB0aGUgY3JlYXRlIHRoZQorICAgICAgICAgICBHSUwuICovCisgICAgICAgIFB5RXZhbF9Jbml0VGhyZWFkcygpOworCiAgICAgICAgIC8qIENyZWF0ZSBhIG5ldyB0aHJlYWQgc3RhdGUgZm9yIHRoaXMgdGhyZWFkICovCiAgICAgICAgIHRjdXIgPSBQeVRocmVhZFN0YXRlX05ldyhhdXRvSW50ZXJwcmV0ZXJTdGF0ZSk7CiAgICAgICAgIGlmICh0Y3VyID09IE5VTEwpCmRpZmYgLS1naXQgYS9QeXRob24vcHlzdHJ0b2QuYyBiL1B5dGhvbi9weXN0cnRvZC5jCmluZGV4IDRhYjhmMDguLmI4ZGQ5MTkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXN0cnRvZC5jCisrKyBiL1B5dGhvbi9weXN0cnRvZC5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIF9QeU9TX2FzY2lpX3N0cnRvZChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyKQogewogICAgIGNoYXIgKmZhaWxfcG9zOwotICAgIGRvdWJsZSB2YWwgPSAtMS4wOworICAgIGRvdWJsZSB2YWw7CiAgICAgc3RydWN0IGxjb252ICpsb2NhbGVfZGF0YTsKICAgICBjb25zdCBjaGFyICpkZWNpbWFsX3BvaW50OwogICAgIHNpemVfdCBkZWNpbWFsX3BvaW50X2xlbjsKQEAgLTkyMyw3ICs5MjMsNyBAQAogCiBzdGF0aWMgY2hhciAqCiBmb3JtYXRfZmxvYXRfc2hvcnQoZG91YmxlIGQsIGNoYXIgZm9ybWF0X2NvZGUsCi0gICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIFB5X3NzaXplX3QgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBpbnQgcHJlY2lzaW9uLAogICAgICAgICAgICAgICAgICAgIGludCBhbHdheXNfYWRkX3NpZ24sIGludCBhZGRfZG90XzBfaWZfaW50ZWdlciwKICAgICAgICAgICAgICAgICAgICBpbnQgdXNlX2FsdF9mb3JtYXR0aW5nLCBjaGFyICoqZmxvYXRfc3RyaW5ncywgaW50ICp0eXBlKQogewpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKICAgICAvKiBpZiB1c2luZyBhbiBleHBvbmVudCwgcmVzZXQgZGVjaW1hbCBwb2ludCBwb3NpdGlvbiB0byAxIGFuZCBhZGp1c3QKICAgICAgICBleHBvbmVudCBhY2NvcmRpbmdseS4qLwogICAgIGlmICh1c2VfZXhwKSB7Ci0gICAgICAgIGV4cCA9IGRlY3B0IC0gMTsKKyAgICAgICAgZXhwID0gKGludClkZWNwdCAtIDE7CiAgICAgICAgIGRlY3B0ID0gMTsKICAgICB9CiAgICAgLyogZW5zdXJlIHZkaWdpdHNfc3RhcnQgPCBkZWNwdCA8PSB2ZGlnaXRzX2VuZCwgb3IgdmRpZ2l0c19zdGFydCA8CmRpZmYgLS1naXQgYS9QeXRob24vcHl0aG9ucnVuLmMgYi9QeXRob24vcHl0aG9ucnVuLmMKaW5kZXggOTFkNTZiNy4uMDMyNzgzMCAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5dGhvbnJ1bi5jCisrKyBiL1B5dGhvbi9weXRob25ydW4uYwpAQCAtMzUsMTIgKzM1LDQ2IEBACiAjZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KICNlbmRpZgogCisjaWZkZWYgX19nbnVfaHVyZF9fCisjZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKyNlbmRpZgorCitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CitfUHlfSURFTlRJRklFUihleGNlcHRob29rKTsKK19QeV9JREVOVElGSUVSKGZsdXNoKTsKK19QeV9JREVOVElGSUVSKGxhc3RfdHJhY2ViYWNrKTsKK19QeV9JREVOVElGSUVSKGxhc3RfdHlwZSk7CitfUHlfSURFTlRJRklFUihsYXN0X3ZhbHVlKTsKK19QeV9JREVOVElGSUVSKG5hbWUpOworX1B5X0lERU5USUZJRVIocHMxKTsKK19QeV9JREVOVElGSUVSKHBzMik7CitfUHlfSURFTlRJRklFUihzdGRpbik7CitfUHlfSURFTlRJRklFUihzdGRvdXQpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKK19QeV9zdGF0aWNfc3RyaW5nKFB5SWRfc3RyaW5nLCAiPHN0cmluZz4iKTsKKworI2lmZGVmIFB5X1JFRl9ERUJVRworc3RhdGljCit2b2lkIF9wcmludF90b3RhbF9yZWZzKHZvaWQpIHsKKyAgICBQeU9iamVjdCAqeG9wdGlvbnMsICp2YWx1ZTsKKyAgICBfUHlfSURFTlRJRklFUihzaG93cmVmY291bnQpOworCisgICAgeG9wdGlvbnMgPSBQeVN5c19HZXRYT3B0aW9ucygpOworICAgIGlmICh4b3B0aW9ucyA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgdmFsdWUgPSBfUHlEaWN0X0dldEl0ZW1JZCh4b3B0aW9ucywgJlB5SWRfc2hvd3JlZmNvdW50KTsKKyAgICBpZiAodmFsdWUgPT0gUHlfVHJ1ZSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIlslIiBQWV9GT1JNQVRfU0laRV9UICJkIHJlZnMsICIKKyAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBibG9ja3NdXG4iLAorICAgICAgICAgICAgICAgIF9QeV9HZXRSZWZUb3RhbCgpLCBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKCkpOworfQorI2VuZGlmCisKICNpZm5kZWYgUHlfUkVGX0RFQlVHCiAjZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKQogI2Vsc2UgLyogUHlfUkVGX0RFQlVHICovCi0jZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKSBmcHJpbnRmKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIlslIiBQWV9GT1JNQVRfU0laRV9UICJkIHJlZnNdXG4iLCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgX1B5X0dldFJlZlRvdGFsKCkpCisjZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKSBfcHJpbnRfdG90YWxfcmVmcygpCiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC01Nyw3ICs5MSw3IEBACiBzdGF0aWMgdm9pZCBpbml0c2l0ZSh2b2lkKTsKIHN0YXRpYyBpbnQgaW5pdHN0ZGlvKHZvaWQpOwogc3RhdGljIHZvaWQgZmx1c2hfaW8odm9pZCk7Ci1zdGF0aWMgUHlPYmplY3QgKnJ1bl9tb2QobW9kX3R5LCBjb25zdCBjaGFyICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCitzdGF0aWMgUHlPYmplY3QgKnJ1bl9tb2QobW9kX3R5LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKiwgUHlBcmVuYSAqKTsKIHN0YXRpYyBQeU9iamVjdCAqcnVuX3B5Y19maWxlKEZJTEUgKiwgY29uc3QgY2hhciAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICopOwpAQCAtNjgsMTEgKzEwMiwxNSBAQAogc3RhdGljIHZvaWQgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKHZvaWQpOwogc3RhdGljIHZvaWQgY2FsbF9sbF9leGl0ZnVuY3Modm9pZCk7CiBleHRlcm4gaW50IF9QeVVuaWNvZGVfSW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX1B5U3RydWN0U2VxdWVuY2VfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9QeVVuaWNvZGVfRmluaSh2b2lkKTsKIGV4dGVybiBpbnQgX1B5TG9uZ19Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHlMb25nX0Zpbmkodm9pZCk7CiBleHRlcm4gaW50IF9QeUZhdWx0aGFuZGxlcl9Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX1B5RmF1bHRoYW5kbGVyX0Zpbmkodm9pZCk7CitleHRlcm4gdm9pZCBfUHlIYXNoX0Zpbmkodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0luaXQodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0Zpbmkodm9pZCk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogZXh0ZXJuIHZvaWQgX1B5R0lMU3RhdGVfSW5pdChQeUludGVycHJldGVyU3RhdGUgKiwgUHlUaHJlYWRTdGF0ZSAqKTsKQEAgLTkzLDYgKzEzMSw3IEBACiBpbnQgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSA9IDA7IC8qIGZvciAtcyBhbmQgc2l0ZS5weSAqLwogaW50IFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWcgPSAwOyAvKiBVbmJ1ZmZlcmVkIGJpbmFyeSBzdGR7aW4sb3V0LGVycn0gKi8KIGludCBQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcgPSAwOyAvKiBmb3IgLVIgYW5kIFBZVEhPTkhBU0hTRUVEICovCitpbnQgUHlfSXNvbGF0ZWRGbGFnID0gMDsgLyogZm9yIC1JLCBpc29sYXRlIGZyb20gdXNlcidzIGVudiAqLwogCiBQeVRocmVhZFN0YXRlICpfUHlfRmluYWxpemluZyA9IE5VTEw7CiAKQEAgLTExOCw2ICsxNTcsNDUgQEAKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7CiB9CiAKKy8qIEhlbHBlciB0byBhbGxvdyBhbiBlbWJlZGRpbmcgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlIG5vcm1hbAorICogbWVjaGFuaXNtIHRoYXQgYXR0ZW1wdHMgdG8gZmlndXJlIG91dCBhbiBhcHByb3ByaWF0ZSBJTyBlbmNvZGluZworICovCisKK3N0YXRpYyBjaGFyICpfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzID0gTlVMTDsKKworaW50CitQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgaWYgKFB5X0lzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICAvKiBUaGlzIGlzIHRvbyBsYXRlIHRvIGhhdmUgYW55IGVmZmVjdCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIENhbid0IGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBlcnJvcnMsIGFzIFB5dGhvbiBoYXNuJ3QgYmVlbgorICAgICAqIGluaXRpYWxpc2VkIHlldC4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIsIHRoZSByYXcgbWVtb3J5IGFsbG9jYXRvcnMgYXJlIGluaXRpYWxpc2VkIGFwcHJvcHJpYXRlbHkKKyAgICAgKiBhcyBDIHN0YXRpYyB2YXJpYWJsZXMsIHNvIF9QeU1lbV9SYXdTdHJkdXAgaXMgT0sgZXZlbiB0aG91Z2gKKyAgICAgKiBQeV9Jbml0aWFsaXplIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuCisgICAgICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gX1B5TWVtX1Jhd1N0cmR1cChlbmNvZGluZyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IF9QeU1lbV9SYXdTdHJkdXAoZXJyb3JzKTsKKyAgICAgICAgaWYgKCFfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZykgeworICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiAvKiBHbG9iYWwgaW5pdGlhbGl6YXRpb25zLiAgQ2FuIGJlIHVuZG9uZSBieSBQeV9GaW5hbGl6ZSgpLiAgRG9uJ3QKICAgIGNhbGwgdGhpcyB0d2ljZSB3aXRob3V0IGFuIGludGVydmVuaW5nIFB5X0ZpbmFsaXplKCkgY2FsbC4gIFdoZW4KICAgIGluaXRpYWxpemF0aW9ucyBmYWlsLCBhIGZhdGFsIGVycm9yIGlzIGlzc3VlZCBhbmQgdGhlIGZ1bmN0aW9uIGRvZXMKQEAgLTE0Niw3ICsyMjQsNiBAQAogewogICAgIGNoYXIgKm5hbWVfdXRmOCwgKm5hbWVfc3RyOwogICAgIFB5T2JqZWN0ICpjb2RlYywgKm5hbWUgPSBOVUxMOwotICAgIF9QeV9JREVOVElGSUVSKG5hbWUpOwogCiAgICAgY29kZWMgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOwogICAgIGlmICghY29kZWMpCkBAIC0xNjAsNyArMjM3LDcgQEAKICAgICBuYW1lX3V0ZjggPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpOwogICAgIGlmIChuYW1lX3V0ZjggPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBuYW1lX3N0ciA9IHN0cmR1cChuYW1lX3V0ZjgpOworICAgIG5hbWVfc3RyID0gX1B5TWVtX1Jhd1N0cmR1cChuYW1lX3V0ZjgpOwogICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICBpZiAobmFtZV9zdHIgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMzEzLDcgKzM5MCw4IEBACiAgICAgaWYgKCFQeUJ5dGVBcnJheV9Jbml0KCkpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgYnl0ZWFycmF5Iik7CiAKLSAgICBfUHlGbG9hdF9Jbml0KCk7CisgICAgaWYgKCFfUHlGbG9hdF9Jbml0KCkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgZmxvYXQiKTsKIAogICAgIGludGVycC0+bW9kdWxlcyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoaW50ZXJwLT5tb2R1bGVzID09IE5VTEwpCkBAIC0zMjIsNiArNDAwLDggQEAKICAgICAvKiBJbml0IFVuaWNvZGUgaW1wbGVtZW50YXRpb247IHJlbGllcyBvbiB0aGUgY29kZWMgcmVnaXN0cnkgKi8KICAgICBpZiAoX1B5VW5pY29kZV9Jbml0KCkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHVuaWNvZGUiKTsKKyAgICBpZiAoX1B5U3RydWN0U2VxdWVuY2VfSW5pdCgpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzdHJ1Y3RzZXEiKTsKIAogICAgIGJpbW9kID0gX1B5QnVpbHRpbl9Jbml0KCk7CiAgICAgaWYgKGJpbW9kID09IE5VTEwpCkBAIC0zNTIsNyArNDMyLDcgQEAKICAgICBwc3RkZXJyID0gUHlGaWxlX05ld1N0ZFByaW50ZXIoZmlsZW5vKHN0ZGVycikpOwogICAgIGlmIChwc3RkZXJyID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZGVyciIsIHBzdGRlcnIpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHBzdGRlcnIpOwogICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwogICAgIFB5X0RFQ1JFRihwc3RkZXJyKTsKIApAQCAtMzgwLDYgKzQ2MCw5IEBACiAgICAgaWYgKGluc3RhbGxfc2lncykKICAgICAgICAgaW5pdHNpZ3MoKTsgLyogU2lnbmFsIGhhbmRsaW5nIHN0dWZmLCBpbmNsdWRpbmcgaW5pdGludHIoKSAqLwogCisgICAgaWYgKF9QeVRyYWNlTWFsbG9jX0luaXQoKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgdHJhY2VtYWxsb2MiKTsKKwogICAgIGluaXRtYWluKGludGVycCk7IC8qIE1vZHVsZSBfX21haW5fXyAqLwogICAgIGlmIChpbml0c3RkaW8oKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCkBAIC00MzcsMTAgKzUyMCw5IEBACiBzdGF0aWMgdm9pZAogZmx1c2hfc3RkX2ZpbGVzKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKmZvdXQgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOwotICAgIFB5T2JqZWN0ICpmZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZm91dCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOworICAgIFB5T2JqZWN0ICpmZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgUHlPYmplY3QgKnRtcDsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAKICAgICBpZiAoZm91dCAhPSBOVUxMICYmIGZvdXQgIT0gUHlfTm9uZSAmJiAhZmlsZV9pc19jbG9zZWQoZm91dCkpIHsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmb3V0LCAmUHlJZF9mbHVzaCwgIiIpOwpAQCAtNTMwLDEwICs2MTIsNiBAQAogICAgIHdoaWxlIChQeUdDX0NvbGxlY3QoKSA+IDApCiAgICAgICAgIC8qIG5vdGhpbmcgKi87CiAjZW5kaWYKLSAgICAvKiBXZSBydW4gdGhpcyB3aGlsZSBtb3N0IGludGVycHJldGVyIHN0YXRlIGlzIHN0aWxsIGFsaXZlLCBzbyB0aGF0Ci0gICAgICAgZGVidWcgaW5mb3JtYXRpb24gY2FuIGJlIHByaW50ZWQgb3V0ICovCi0gICAgX1B5R0NfRmluaSgpOwotCiAgICAgLyogRGVzdHJveSBhbGwgbW9kdWxlcyAqLwogICAgIFB5SW1wb3J0X0NsZWFudXAoKTsKIApAQCAtNTU5LDYgKzYzNywxMCBAQAogICAgIFB5R0NfQ29sbGVjdCgpOwogI2VuZGlmCiAKKyAgICAvKiBEaXNhYmxlIHRyYWNlbWFsbG9jIGFmdGVyIGFsbCBQeXRob24gb2JqZWN0cyBoYXZlIGJlZW4gZGVzdHJveWVkLAorICAgICAgIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0cmFjZW1hbGxvYyBpbiBvYmplY3RzIGRlc3RydWN0b3IuICovCisgICAgX1B5VHJhY2VNYWxsb2NfRmluaSgpOworCiAgICAgLyogRGVzdHJveSB0aGUgZGF0YWJhc2UgdXNlZCBieSBfUHlJbXBvcnRfe0ZpeHVwLEZpbmR9RXh0ZW5zaW9uICovCiAgICAgX1B5SW1wb3J0X0ZpbmkoKTsKIApAQCAtNTcyLDYgKzY1NCw4IEBACiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgZHVtcF9jb3VudHMoc3Rkb3V0KTsKICNlbmRpZgorICAgIC8qIGR1bXAgaGFzaCBzdGF0cyAqLworICAgIF9QeUhhc2hfRmluaSgpOwogCiAgICAgUFJJTlRfVE9UQUxfUkVGUygpOwogCkBAIC01OTYsMTEgKzY4MCw2IEBACiAKICAgICBfUHlFeGNfRmluaSgpOwogCi0gICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLwotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgX1B5R0lMU3RhdGVfRmluaSgpOwotI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCi0KICAgICAvKiBTdW5kcnkgZmluYWxpemVycyAqLwogICAgIFB5TWV0aG9kX0ZpbmkoKTsKICAgICBQeUZyYW1lX0ZpbmkoKTsKQEAgLTYxNCwxNyArNjkzLDE1IEBACiAgICAgUHlGbG9hdF9GaW5pKCk7CiAgICAgUHlEaWN0X0ZpbmkoKTsKICAgICBQeVNsaWNlX0ZpbmkoKTsKKyAgICBfUHlHQ19GaW5pKCk7CisgICAgX1B5UmFuZG9tX0ZpbmkoKTsKIAogICAgIC8qIENsZWFudXAgVW5pY29kZSBpbXBsZW1lbnRhdGlvbiAqLwogICAgIF9QeVVuaWNvZGVfRmluaSgpOwogCi0gICAgLyogRGVsZXRlIGN1cnJlbnQgdGhyZWFkLiBBZnRlciB0aGlzLCBtYW55IEMgQVBJIGNhbGxzIGJlY29tZSBjcmFzaHkuICovCi0gICAgUHlUaHJlYWRTdGF0ZV9Td2FwKE5VTEwpOwotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUoaW50ZXJwKTsKLQogICAgIC8qIHJlc2V0IGZpbGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcgKi8KICAgICBpZiAoIVB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgJiYgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZykgewotICAgICAgICBmcmVlKChjaGFyKilQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSgoY2hhciopUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyk7CiAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBOVUxMOwogICAgIH0KIApAQCAtNjM2LDYgKzcxMywxNSBAQAogCiAgICAgUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycygmX1B5UGFyc2VyX0dyYW1tYXIpOwogCisgICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgX1B5R0lMU3RhdGVfRmluaSgpOworI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCisKKyAgICAvKiBEZWxldGUgY3VycmVudCB0aHJlYWQuIEFmdGVyIHRoaXMsIG1hbnkgQyBBUEkgY2FsbHMgYmVjb21lIGNyYXNoeS4gKi8KKyAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7CisgICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOworCiAjaWZkZWYgUHlfVFJBQ0VfUkVGUwogICAgIC8qIERpc3BsYXkgYWRkcmVzc2VzICgmIHJlZmNudHMpIG9mIGFsbCBvYmplY3RzIHN0aWxsIGFsaXZlLgogICAgICAqIEFuIGFkZHJlc3MgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgcmVwciBvZiB0aGUgb2JqZWN0LCBwcmludGVkCkBAIC03MTgsNyArODA0LDcgQEAKICAgICAgICAgcHN0ZGVyciA9IFB5RmlsZV9OZXdTdGRQcmludGVyKGZpbGVubyhzdGRlcnIpKTsKICAgICAgICAgaWYgKHBzdGRlcnIgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBwc3RkZXJyKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZGVyciwgcHN0ZGVycik7CiAgICAgICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwogICAgICAgICBQeV9ERUNSRUYocHN0ZGVycik7CiAKQEAgLTc3Myw2ICs4NTksOSBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogdGhyZWFkIGlzIG5vdCBjdXJyZW50Iik7CiAgICAgaWYgKHRzdGF0ZS0+ZnJhbWUgIT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IHRocmVhZCBzdGlsbCBoYXMgYSBmcmFtZSIpOworCisgICAgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKCk7CisKICAgICBpZiAodHN0YXRlICE9IGludGVycC0+dHN0YXRlX2hlYWQgfHwgdHN0YXRlLT5uZXh0ICE9IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiBub3QgdGhlIGxhc3QgdGhyZWFkIik7CiAKQEAgLTgwMiw3ICs4OTEsNyBAQAogfQogCiBzdGF0aWMgd2NoYXJfdCAqZGVmYXVsdF9ob21lID0gTlVMTDsKLXN0YXRpYyB3Y2hhcl90IGVudl9ob21lW1BBVEhfTUFYKzFdOworc3RhdGljIHdjaGFyX3QgZW52X2hvbWVbTUFYUEFUSExFTisxXTsKIAogdm9pZAogUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtODMyLDcgKzkyMSw3IEBACiBzdGF0aWMgdm9pZAogaW5pdG1haW4oUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptLCAqZCwgKmxvYWRlcjsKICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGNyZWF0ZSBfX21haW5fXyBtb2R1bGUiKTsKQEAgLTg1Myw3ICs5NDIsOCBAQAogICAgICAqIGJlIHNldCBpZiBfX21haW5fXyBnZXRzIGZ1cnRoZXIgaW5pdGlhbGl6ZWQgbGF0ZXIgaW4gdGhlIHN0YXJ0dXAKICAgICAgKiBwcm9jZXNzLgogICAgICAqLwotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpID09IE5VTEwpIHsKKyAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpOworICAgIGlmIChsb2FkZXIgPT0gTlVMTCB8fCBsb2FkZXIgPT0gUHlfTm9uZSkgewogICAgICAgICBQeU9iamVjdCAqbG9hZGVyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1aWx0aW5JbXBvcnRlciIpOwogICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKQEAgLTkwMyw2ICs5OTMsNyBAQAogICAgIFB5T2JqZWN0ICptOwogICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInNpdGUiKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGltcG9ydCB0aGUgc2l0ZSBtb2R1bGVcbiIpOwogICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9GaW5hbGl6ZSgpOwogICAgICAgICBleGl0KDEpOwpAQCAtOTI1LDcgKzEwMTYsNiBAQAogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwogICAgIF9QeV9JREVOVElGSUVSKGlzYXR0eSk7CiAgICAgX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7Ci0gICAgX1B5X0lERU5USUZJRVIobmFtZSk7CiAgICAgX1B5X0lERU5USUZJRVIobW9kZSk7CiAKICAgICAvKiBzdGRpbiBpcyBhbHdheXMgb3BlbmVkIGluIGJ1ZmZlcmVkIG1vZGUsIGZpcnN0IGJlY2F1c2UgaXQgc2hvdWxkbid0CkBAIC0xMDM1LDcgKzExMjUsNyBAQAogICAgIFB5T2JqZWN0ICpzdGQgPSBOVUxMOwogICAgIGludCBzdGF0dXMgPSAwLCBmZDsKICAgICBQeU9iamVjdCAqIGVuY29kaW5nX2F0dHI7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMLCAqZXJyb3JzOworICAgIGNoYXIgKnB5dGhvbmlvZW5jb2RpbmcgPSBOVUxMLCAqZW5jb2RpbmcsICplcnJvcnM7CiAKICAgICAvKiBIYWNrIHRvIGF2b2lkIGEgbmFzdHkgcmVjdXJzaW9uIGlzc3VlIHdoZW4gUHl0aG9uIGlzIGludm9rZWQKICAgICAgICBpbiB2ZXJib3NlIG1vZGU6IHByZS1pbXBvcnQgdGhlIExhdGluLTEgYW5kIFVURi04IGNvZGVjcyAqLwpAQCAtMTA2NywxNCArMTE1NywyOCBAQAogICAgIH0KICAgICBQeV9ERUNSRUYod3JhcHBlcik7CiAKLSAgICBlbmNvZGluZyA9IFB5X0dFVEVOVigiUFlUSE9OSU9FTkNPRElORyIpOwotICAgIGVycm9ycyA9IE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nKSB7Ci0gICAgICAgIGVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKLSAgICAgICAgZXJyb3JzID0gc3RyY2hyKGVuY29kaW5nLCAnOicpOwotICAgICAgICBpZiAoZXJyb3JzKSB7Ci0gICAgICAgICAgICAqZXJyb3JzID0gJ1wwJzsKLSAgICAgICAgICAgIGVycm9ycysrOworICAgIGVuY29kaW5nID0gX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2Rpbmc7CisgICAgZXJyb3JzID0gX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzOworICAgIGlmICghZW5jb2RpbmcgfHwgIWVycm9ycykgeworICAgICAgICBweXRob25pb2VuY29kaW5nID0gUHlfR0VURU5WKCJQWVRIT05JT0VOQ09ESU5HIik7CisgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nKSB7CisgICAgICAgICAgICBjaGFyICplcnI7CisgICAgICAgICAgICBweXRob25pb2VuY29kaW5nID0gX1B5TWVtX1N0cmR1cChweXRob25pb2VuY29kaW5nKTsKKyAgICAgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBzdHJjaHIocHl0aG9uaW9lbmNvZGluZywgJzonKTsKKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICAqZXJyID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBlcnIrKzsKKyAgICAgICAgICAgICAgICBpZiAoKmVyciAmJiAhZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnB5dGhvbmlvZW5jb2RpbmcgJiYgIWVuY29kaW5nKSB7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBweXRob25pb2VuY29kaW5nOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDk0LDcgKzExOTgsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IC8qIGlmIChmZCA8IDApICovCiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGluX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkaW4iLCBzdGQpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRpbiwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogICAgIC8qIFNldCBzeXMuc3Rkb3V0ICovCkBAIC0xMTA5LDcgKzEyMTMsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IC8qIGlmIChmZCA8IDApICovCiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZG91dF9fIiwgc3RkKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZG91dCIsIHN0ZCk7CisgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZG91dCwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogI2lmIDEgLyogRGlzYWJsZSB0aGlzIGlmIHlvdSBoYXZlIHRyb3VibGUgZGVidWdnaW5nIGJvb3RzdHJhcCBzdHVmZiAqLwpAQCAtMTEyOSwxOCArMTIzMywyNCBAQAogICAgICAgIHdoZW4gaW1wb3J0LmMgdHJpZXMgdG8gd3JpdGUgdG8gc3RkZXJyIGluIHZlcmJvc2UgbW9kZS4gKi8KICAgICBlbmNvZGluZ19hdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzdGQsICJlbmNvZGluZyIpOwogICAgIGlmIChlbmNvZGluZ19hdHRyICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hhciAqIGVuY29kaW5nOwotICAgICAgICBlbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7Ci0gICAgICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgICAgIGNvbnN0IGNoYXIgKiBzdGRfZW5jb2Rpbmc7CisgICAgICAgIHN0ZF9lbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7CisgICAgICAgIGlmIChzdGRfZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjX2luZm8gPSBfUHlDb2RlY19Mb29rdXAoc3RkX2VuY29kaW5nKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYoY29kZWNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nX2F0dHIpOwogICAgIH0KICAgICBQeUVycl9DbGVhcigpOyAgLyogTm90IGEgZmF0YWwgZXJyb3IgaWYgY29kZWMgaXNuJ3QgYXZhaWxhYmxlICovCiAKLSAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkZXJyIiwgc3RkKTsKKyAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGVycl9fIiwgc3RkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHN0ZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBzdGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc3RkKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgUHlfREVDUkVGKHN0ZCk7CiAjZW5kaWYKIApAQCAtMTE0OSw4ICsxMjU5LDE2IEBACiAgICAgICAgIHN0YXR1cyA9IC0xOwogICAgIH0KIAotICAgIGlmIChlbmNvZGluZykKLSAgICAgICAgZnJlZShlbmNvZGluZyk7CisgICAgLyogV2Ugd29uJ3QgbmVlZCB0aGVtIGFueW1vcmUuICovCisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CisgICAgfQorICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB5dGhvbmlvZW5jb2RpbmcpOwogICAgIFB5X1hERUNSRUYoYmltb2QpOwogICAgIFB5X1hERUNSRUYoaW9tb2QpOwogICAgIHJldHVybiBzdGF0dXM7CkBAIC0xMTc1LDM2ICsxMjkzLDQ3IEBACiB9CiAKIGludAotUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBpbnQgcmV0OworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKnY7CisgICAgaW50IHJldCwgZXJyOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbF9mbGFnczsKIAorICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBmbGFncyA9ICZsb2NhbF9mbGFnczsKICAgICAgICAgbG9jYWxfZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczEiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMSk7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMSIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPj4+ICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMSwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI+Pj4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczIiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMik7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMiIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLi4uICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIuLi4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KKyAgICBlcnIgPSAtMTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoZnAsIGZpbGVuYW1lLCBmbGFncyk7CisgICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KGZwLCBmaWxlbmFtZSwgZmxhZ3MpOwogICAgICAgICBQUklOVF9UT1RBTF9SRUZTKCk7Ci0gICAgICAgIGlmIChyZXQgPT0gRV9FT0YpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHJldCA9PSBFX0VPRikgeworICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIC8qCiAgICAgICAgIGlmIChyZXQgPT0gRV9OT01FTSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAqLwogICAgIH0KKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBlcnI7CiB9CiAKIC8qIGNvbXB1dGUgcGFyc2VyIGZsYWdzIGJhc2VkIG9uIGNvbXBpbGVyIGZsYWdzICovCkBAIC0xMjMyLDE4ICsxMzYxLDI1IEBACiAjZW5kaWYKIAogaW50Ci1QeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKK1B5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKncsICpvZW5jID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqdywgKm9lbmMgPSBOVUxMLCAqbW9kX25hbWU7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUFyZW5hICphcmVuYTsKICAgICBjaGFyICpwczEgPSAiIiwgKnBzMiA9ICIiLCAqZW5jID0gTlVMTDsKICAgICBpbnQgZXJyY29kZSA9IDA7CiAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworICAgIF9QeV9JREVOVElGSUVSKF9fbWFpbl9fKTsKKworICAgIG1vZF9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAoZnAgPT0gc3RkaW4pIHsKICAgICAgICAgLyogRmV0Y2ggZW5jb2RpbmcgZnJvbSBzeXMuc3RkaW4gaWYgcG9zc2libGUuICovCi0gICAgICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGluIik7CisgICAgICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4pOwogICAgICAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgIG9lbmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKHYsICZQeUlkX2VuY29kaW5nKTsKICAgICAgICAgICAgIGlmIChvZW5jKQpAQCAtMTI1Miw3ICsxMzg4LDcgQEAKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMSIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMxKTsKICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgIHYgPSBQeU9iamVjdF9TdHIodik7CiAgICAgICAgIGlmICh2ID09IE5VTEwpCkBAIC0xMjY1LDcgKzE0MDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHcgPSBQeVN5c19HZXRPYmplY3QoInBzMiIpOworICAgIHcgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMyKTsKICAgICBpZiAodyAhPSBOVUxMKSB7CiAgICAgICAgIHcgPSBQeU9iamVjdF9TdHIodyk7CiAgICAgICAgIGlmICh3ID09IE5VTEwpCkBAIC0xMjg1LDkgKzE0MjEsOSBAQAogICAgICAgICBQeV9YREVDUkVGKG9lbmMpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlKGZwLCBmaWxlbmFtZSwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NpbmdsZV9pbnB1dCwgcHMxLCBwczIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsICZlcnJjb2RlLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc2luZ2xlX2lucHV0LCBwczEsIHBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmVycmNvZGUsIGFyZW5hKTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIFB5X1hERUNSRUYodyk7CiAgICAgUHlfWERFQ1JFRihvZW5jKTsKQEAgLTEzMDAsNyArMTQzNiw3IEBACiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKKyAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG1vZF9uYW1lKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEzMDgsMTUgKzE0NDQsMzMgQEAKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKICAgICB2ID0gcnVuX21vZChtb2QsIGZpbGVuYW1lLCBkLCBkLCBmbGFncywgYXJlbmEpOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7Ci0gICAgZmx1c2hfaW8oKTsKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIGZsdXNoX2lvKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgUHlfREVDUkVGKHYpOworICAgIGZsdXNoX2lvKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludAorUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBpbnQgcmVzOworCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXMgPSBQeVJ1bl9JbnRlcmFjdGl2ZU9uZU9iamVjdChmcCwgZmlsZW5hbWUsIGZsYWdzKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiByZXM7Cit9CisKKwogLyogQ2hlY2sgd2hldGhlciBhIGZpbGUgbWF5YmUgYSBweWMgZmlsZTogTG9vayBhdCB0aGUgZXh0ZW5zaW9uLAogICAgdGhlIGZpbGUgdHlwZSwgYW5kLCBpZiB3ZSBtYXkgY2xvc2UgaXQsIGF0IHRoZSBmaXJzdCBmZXcgYnl0ZXMuICovCiAKQEAgLTEzNTcsOCArMTUxMSw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLWludAotc3RhdGljIHNldF9tYWluX2xvYWRlcihQeU9iamVjdCAqZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmxvYWRlcl9uYW1lKQorc3RhdGljIGludAorc2V0X21haW5fbG9hZGVyKFB5T2JqZWN0ICpkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbG9hZGVyX25hbWUpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOwpAQCAtMTQyNSw3ICsxNTc5LDcgQEAKICAgICAgICAgLyogVHJ5IHRvIHJ1biBhIHB5YyBmaWxlLiBGaXJzdCwgcmUtb3BlbiBpbiBiaW5hcnkgKi8KICAgICAgICAgaWYgKGNsb3NlaXQpCiAgICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICBpZiAoKHB5Y19mcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKSkgPT0gTlVMTCkgeworICAgICAgICBpZiAoKHB5Y19mcCA9IF9QeV9mb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicHl0aG9uOiBDYW4ndCByZW9wZW4gLnB5YyBmaWxlXG4iKTsKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQpAQCAtMTQ4NCw4ICsxNjM4LDggQEAKIH0KIAogc3RhdGljIGludAotcGFyc2Vfc3ludGF4X2Vycm9yKFB5T2JqZWN0ICplcnIsIFB5T2JqZWN0ICoqbWVzc2FnZSwgY29uc3QgY2hhciAqKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgIGludCAqbGluZW5vLCBpbnQgKm9mZnNldCwgY29uc3QgY2hhciAqKnRleHQpCitwYXJzZV9zeW50YXhfZXJyb3IoUHlPYmplY3QgKmVyciwgUHlPYmplY3QgKiptZXNzYWdlLCBQeU9iamVjdCAqKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgIGludCAqbGluZW5vLCBpbnQgKm9mZnNldCwgUHlPYmplY3QgKip0ZXh0KQogewogICAgIGxvbmcgaG9sZDsKICAgICBQeU9iamVjdCAqdjsKQEAgLTE0OTYsNiArMTY1MCw3IEBACiAgICAgX1B5X0lERU5USUZJRVIodGV4dCk7CiAKICAgICAqbWVzc2FnZSA9IE5VTEw7CisgICAgKmZpbGVuYW1lID0gTlVMTDsKIAogICAgIC8qIG5ldyBzdHlsZSBlcnJvcnMuICBgZXJyJyBpcyBhbiBpbnN0YW5jZSAqLwogICAgICptZXNzYWdlID0gX1B5T2JqZWN0X0dldEF0dHJJZChlcnIsICZQeUlkX21zZyk7CkBAIC0xNTA3LDEzICsxNjYyLDEzIEBACiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICBpZiAodiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgKmZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgKmZpbGVuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfc3RyaW5nKTsKKyAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgICpmaWxlbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgaWYgKCEqZmlsZW5hbWUpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgICpmaWxlbmFtZSA9IHY7CiAgICAgfQogCiAgICAgdiA9IF9QeU9iamVjdF9HZXRBdHRySWQoZXJyLCAmUHlJZF9saW5lbm8pOwpAQCAtMTU0NywxNSArMTcwMiwxMyBAQAogICAgICAgICAqdGV4dCA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAqdGV4dCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgaWYgKCEqdGV4dCkKLSAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgKnRleHQgPSB2OwogICAgIH0KICAgICByZXR1cm4gMTsKIAogZmluYWxseToKICAgICBQeV9YREVDUkVGKCptZXNzYWdlKTsKKyAgICBQeV9YREVDUkVGKCpmaWxlbmFtZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE1NjYsOSArMTcxOSwxNSBAQAogfQogCiBzdGF0aWMgdm9pZAotcHJpbnRfZXJyb3JfdGV4dChQeU9iamVjdCAqZiwgaW50IG9mZnNldCwgY29uc3QgY2hhciAqdGV4dCkKK3ByaW50X2Vycm9yX3RleHQoUHlPYmplY3QgKmYsIGludCBvZmZzZXQsIFB5T2JqZWN0ICp0ZXh0X29iaikKIHsKKyAgICBjaGFyICp0ZXh0OwogICAgIGNoYXIgKm5sOworCisgICAgdGV4dCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodGV4dF9vYmopOworICAgIGlmICh0ZXh0ID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChvZmZzZXQgPj0gMCkgewogICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPT0gc3RybGVuKHRleHQpICYmIHRleHRbb2Zmc2V0IC0gMV0gPT0gJ1xuJykKICAgICAgICAgICAgIG9mZnNldC0tOwpAQCAtMTYyNyw3ICsxNzg2LDEyIEBACiAgICAgaWYgKFB5TG9uZ19DaGVjayh2YWx1ZSkpCiAgICAgICAgIGV4aXRjb2RlID0gKGludClQeUxvbmdfQXNMb25nKHZhbHVlKTsKICAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKnN5c19zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICBQeU9iamVjdCAqc3lzX3N0ZGVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOworICAgICAgICAvKiBXZSBjbGVhciB0aGUgZXhjZXB0aW9uIGhlcmUgdG8gYXZvaWQgdHJpZ2dlcmluZyB0aGUgYXNzZXJ0aW9uCisgICAgICAgICAqIGluIFB5T2JqZWN0X1N0ciB0aGF0IGVuc3VyZXMgaXQgd29uJ3Qgc2lsZW50bHkgbG9zZSBleGNlcHRpb24KKyAgICAgICAgICogZGV0YWlscy4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGlmIChzeXNfc3RkZXJyICE9IE5VTEwgJiYgc3lzX3N0ZGVyciAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QodmFsdWUsIHN5c19zdGRlcnIsIFB5X1BSSU5UX1JBVyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNjcwLDExICsxODM0LDExIEBACiAgICAgICAgIHJldHVybjsKICAgICAvKiBOb3cgd2Uga25vdyB2ICE9IE5VTEwgdG9vICovCiAgICAgaWYgKHNldF9zeXNfbGFzdF92YXJzKSB7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF90eXBlIiwgZXhjZXB0aW9uKTsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJsYXN0X3ZhbHVlIiwgdik7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF90cmFjZWJhY2siLCB0Yik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3R5cGUsIGV4Y2VwdGlvbik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3ZhbHVlLCB2KTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX2xhc3RfdHJhY2ViYWNrLCB0Yik7CiAgICAgfQotICAgIGhvb2sgPSBQeVN5c19HZXRPYmplY3QoImV4Y2VwdGhvb2siKTsKKyAgICBob29rID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX2V4Y2VwdGhvb2spOwogICAgIGlmIChob29rKSB7CiAgICAgICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9QYWNrKDMsIGV4Y2VwdGlvbiwgdiwgdGIpOwogICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoaG9vaywgYXJncyk7CkBAIC0xNzI0LDkgKzE4ODgsMTEgQEAKICAgICBfUHlfSURFTlRJRklFUihwcmludF9maWxlX2FuZF9saW5lKTsKIAogICAgIGlmICghUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJUeXBlRXJyb3I6IHByaW50X2V4Y2VwdGlvbigpOiBFeGNlcHRpb24gZXhwZWN0ZWQgZm9yIHZhbHVlLCAiLCBmKTsKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKFB5X1RZUEUodmFsdWUpLT50cF9uYW1lLCBmKTsKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgZm91bmRcbiIsIGYpOworICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVTdHJpbmcoIlR5cGVFcnJvcjogcHJpbnRfZXhjZXB0aW9uKCk6IEV4Y2VwdGlvbiBleHBlY3RlZCBmb3IgdmFsdWUsICIsIGYpOworICAgICAgICBlcnIgKz0gUHlGaWxlX1dyaXRlU3RyaW5nKFB5X1RZUEUodmFsdWUpLT50cF9uYW1lLCBmKTsKKyAgICAgICAgZXJyICs9IFB5RmlsZV9Xcml0ZVN0cmluZygiIGZvdW5kXG4iLCBmKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3MzksMjcgKzE5MDUsMzAgQEAKICAgICBpZiAoZXJyID09IDAgJiYKICAgICAgICAgX1B5T2JqZWN0X0hhc0F0dHJJZCh2YWx1ZSwgJlB5SWRfcHJpbnRfZmlsZV9hbmRfbGluZSkpCiAgICAgewotICAgICAgICBQeU9iamVjdCAqbWVzc2FnZTsKLSAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICp0ZXh0OworICAgICAgICBQeU9iamVjdCAqbWVzc2FnZSwgKmZpbGVuYW1lLCAqdGV4dDsKICAgICAgICAgaW50IGxpbmVubywgb2Zmc2V0OwogICAgICAgICBpZiAoIXBhcnNlX3N5bnRheF9lcnJvcih2YWx1ZSwgJm1lc3NhZ2UsICZmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmVubywgJm9mZnNldCwgJnRleHQpKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsxMF07Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiAgRmlsZSBcIiIsIGYpOwotICAgICAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI8c3RyaW5nPiIsIGYpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhmaWxlbmFtZSwgZik7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlwiLCBsaW5lICIsIGYpOwotICAgICAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBsaW5lbm8pOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKGJ1ZiwgZik7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZik7Ci0gICAgICAgICAgICBpZiAodGV4dCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHByaW50X2Vycm9yX3RleHQoZiwgb2Zmc2V0LCB0ZXh0KTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsaW5lOworCiAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgdmFsdWUgPSBtZXNzYWdlOworCisgICAgICAgICAgICBsaW5lID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiAgRmlsZSBcIiVVXCIsIGxpbmUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgICAgICAgICBpZiAobGluZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KGxpbmUsIGYsIFB5X1BSSU5UX1JBVyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpbmUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3JfdGV4dChmLCBvZmZzZXQsIHRleHQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZXh0KTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLyogQ2FuJ3QgYmUgYm90aGVyZWQgdG8gY2hlY2sgYWxsIHRob3NlCiAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoKSBjYWxscyAqLwogICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC0xNzg4LDEwICsxOTU3LDkgQEAKICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyKiBtb2RzdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG1vZHVsZU5hbWUpOwotICAgICAgICAgICAgaWYgKG1vZHN0ciAmJiBzdHJjbXAobW9kc3RyLCAiYnVpbHRpbnMiKSkKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobW9kdWxlTmFtZSwgJlB5SWRfYnVpbHRpbnMpICE9IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlU3RyaW5nKG1vZHN0ciwgZik7CisgICAgICAgICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlT2JqZWN0KG1vZHVsZU5hbWUsIGYsIFB5X1BSSU5UX1JBVyk7CiAgICAgICAgICAgICAgICAgZXJyICs9IFB5RmlsZV9Xcml0ZVN0cmluZygiLiIsIGYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKG1vZHVsZU5hbWUpOwpAQCAtMTg4NCw3ICsyMDUyLDcgQEAKIFB5RXJyX0Rpc3BsYXkoUHlPYmplY3QgKmV4Y2VwdGlvbiwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdGIpCiB7CiAgICAgUHlPYmplY3QgKnNlZW47Ci0gICAgUHlPYmplY3QgKmYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIFB5T2JqZWN0ICpmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgaWYgKFB5RXhjZXB0aW9uSW5zdGFuY2VfQ2hlY2sodmFsdWUpCiAgICAgICAgICYmIHRiICE9IE5VTEwgJiYgUHlUcmFjZUJhY2tfQ2hlY2sodGIpKSB7CiAgICAgICAgIC8qIFB1dCB0aGUgdHJhY2ViYWNrIG9uIHRoZSBleGNlcHRpb24sIG90aGVyd2lzZSBpdCB3b24ndCBnZXQKQEAgLTE5MjAsMzcgKzIwODgsNTQgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKICAgICBtb2RfdHkgbW9kOwotICAgIFB5QXJlbmEgKmFyZW5hID0gUHlBcmVuYV9OZXcoKTsKKyAgICBQeUFyZW5hICphcmVuYTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisKKyAgICBmaWxlbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX3N0cmluZyk7IC8qIGJvcnJvd2VkICovCisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOwogICAgIGlmIChhcmVuYSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmcoc3RyLCAiPHN0cmluZz4iLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOwogICAgIGlmIChtb2QgIT0gTlVMTCkKLSAgICAgICAgcmV0ID0gcnVuX21vZChtb2QsICI8c3RyaW5nPiIsIGdsb2JhbHMsIGxvY2FscywgZmxhZ3MsIGFyZW5hKTsKKyAgICAgICAgcmV0ID0gcnVuX21vZChtb2QsIGZpbGVuYW1lLCBnbG9iYWxzLCBsb2NhbHMsIGZsYWdzLCBhcmVuYSk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gcmV0OwogfQogCiBQeU9iamVjdCAqCi1QeVJ1bl9GaWxlRXhGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlPYmplY3QgKmdsb2JhbHMsCitQeVJ1bl9GaWxlRXhGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQsIFB5T2JqZWN0ICpnbG9iYWxzLAogICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxvY2FscywgaW50IGNsb3NlaXQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnJldDsKKyAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKICAgICBtb2RfdHkgbW9kOwotICAgIFB5QXJlbmEgKmFyZW5hID0gUHlBcmVuYV9OZXcoKTsKLSAgICBpZiAoYXJlbmEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlBcmVuYSAqYXJlbmEgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKIAotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlKGZwLCBmaWxlbmFtZSwgTlVMTCwgc3RhcnQsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIE5VTEwsIGFyZW5hKTsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworCisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIGlmIChhcmVuYSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIE5VTEwsIHN0YXJ0LCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBOVUxMLCBhcmVuYSk7CiAgICAgaWYgKGNsb3NlaXQpCiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIHJldCA9IHJ1bl9tb2QobW9kLCBmaWxlbmFtZSwgZ2xvYmFscywgbG9jYWxzLCBmbGFncywgYXJlbmEpOwotICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CisKK2V4aXQ6CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisgICAgaWYgKGFyZW5hICE9IE5VTEwpCisgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTk1OSwxMiArMjE0NCwxMSBAQAogewogICAgIFB5T2JqZWN0ICpmLCAqcjsKICAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrOwotICAgIF9QeV9JREVOVElGSUVSKGZsdXNoKTsKIAogICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uICovCiAgICAgUHlFcnJfRmV0Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CiAKLSAgICBmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgaWYgKGYgIT0gTlVMTCkgewogICAgICAgICByID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmLCAmUHlJZF9mbHVzaCwgIiIpOwogICAgICAgICBpZiAocikKQEAgLTE5NzIsNyArMjE1Niw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQotICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOworICAgIGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKICAgICBpZiAoZiAhPSBOVUxMKSB7CiAgICAgICAgIHIgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGYsICZQeUlkX2ZsdXNoLCAiIik7CiAgICAgICAgIGlmIChyKQpAQCAtMTk4NSwxMiArMjE2OSwxMiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotcnVuX21vZChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsCi0gICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKK3J1bl9tb2QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywKKyAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgY28gPSBQeUFTVF9Db21waWxlKG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBhcmVuYSk7CisgICAgY28gPSBQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCAtMSwgYXJlbmEpOwogICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB2ID0gUHlFdmFsX0V2YWxDb2RlKChQeU9iamVjdCopY28sIGdsb2JhbHMsIGxvY2Fscyk7CkBAIC0yMDMyLDggKzIyMTYsOCBAQAogfQogCiBQeU9iamVjdCAqCi1QeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCitQeV9Db21waWxlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnN0ciwgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIG1vZF90eSBtb2Q7CkBAIC0yMDQxLDcgKzIyMjUsNyBAQAogICAgIGlmIChhcmVuYSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKICAgICBpZiAobW9kID09IE5VTEwpIHsKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMDUxLDExICsyMjM1LDI0IEBACiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGNvID0gUHlBU1RfQ29tcGlsZUV4KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBvcHRpbWl6ZSwgYXJlbmEpOworICAgIGNvID0gUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLCBmbGFncywgb3B0aW1pemUsIGFyZW5hKTsKICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiAoUHlPYmplY3QgKiljbzsKIH0KIAorUHlPYmplY3QgKgorUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsICpjbzsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgY28gPSBQeV9Db21waWxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgb3B0aW1pemUpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGNvOworfQorCiAvKiBGb3IgdXNlIGluIFB5X0xJTUlURURfQVBJICovCiAjdW5kZWYgUHlfQ29tcGlsZVN0cmluZwogUHlPYmplY3QgKgpAQCAtMjA2NSw0NiArMjI2Miw2MiBAQAogfQogCiBzdHJ1Y3Qgc3ltdGFibGUgKgotUHlfU3ltdGFibGVTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0KQorUHlfU3ltdGFibGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCkKIHsKICAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0OwogICAgIG1vZF90eSBtb2Q7CiAgICAgUHlDb21waWxlckZsYWdzIGZsYWdzOwotICAgIFB5QXJlbmEgKmFyZW5hID0gUHlBcmVuYV9OZXcoKTsKKyAgICBQeUFyZW5hICphcmVuYTsKKworICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKICAgICBpZiAoYXJlbmEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmbGFncy5jZl9mbGFncyA9IDA7Ci0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZyhzdHIsIGZpbGVuYW1lLCBzdGFydCwgJmZsYWdzLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgJmZsYWdzLCBhcmVuYSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdCA9IFB5U3ltdGFibGVfQnVpbGQobW9kLCBmaWxlbmFtZSwgMCk7CisgICAgc3QgPSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZCwgZmlsZW5hbWUsIDApOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIHN0OwogfQogCitzdHJ1Y3Qgc3ltdGFibGUgKgorUHlfU3ltdGFibGVTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgc3RydWN0IHN5bXRhYmxlICpzdDsKKworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdCA9IFB5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0KTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBzdDsKK30KKwogLyogUHJlZmVycmVkIGFjY2VzcyB0byBwYXJzZXIgaXMgdGhyb3VnaCBBU1QuICovCiBtb2RfdHkKLVB5UGFyc2VyX0FTVEZyb21TdHJpbmcoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCitQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnMsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbGZsYWdzOwogICAgIHBlcnJkZXRhaWwgZXJyOwogICAgIGludCBpZmxhZ3MgPSBQQVJTRVJfRkxBR1MoZmxhZ3MpOwogCi0gICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KHMsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLCBzdGFydCwgJmVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZmxhZ3MpOworICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChzLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLCBzdGFydCwgJmVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlmbGFncyk7CiAgICAgaWYgKGZsYWdzID09IE5VTEwpIHsKICAgICAgICAgbG9jYWxmbGFncy5jZl9mbGFncyA9IDA7CiAgICAgICAgIGZsYWdzID0gJmxvY2FsZmxhZ3M7CiAgICAgfQogICAgIGlmIChuKSB7CiAgICAgICAgIGZsYWdzLT5jZl9mbGFncyB8PSBpZmxhZ3MgJiBQeUNGX01BU0s7Ci0gICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlKG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKICAgICAgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjExNiwyNiArMjMyOSw0MCBAQAogfQogCiBtb2RfdHkKLVB5UGFyc2VyX0FTVEZyb21GaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciogZW5jLAotICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBjaGFyICpwczEsCi0gICAgICAgICAgICAgICAgICAgICBjaGFyICpwczIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCAqZXJyY29kZSwKLSAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQorUHlQYXJzZXJfQVNURnJvbVN0cmluZyhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIG1vZF90eSBtb2Q7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3QocywgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIG1vZDsKK30KKworbW9kX3R5CitQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChGSUxFICpmcCwgUHlPYmplY3QgKmZpbGVuYW1lLCBjb25zdCBjaGFyKiBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGNoYXIgKnBzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMiwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50ICplcnJjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUNvbXBpbGVyRmxhZ3MgbG9jYWxmbGFnczsKICAgICBwZXJyZGV0YWlsIGVycjsKICAgICBpbnQgaWZsYWdzID0gUEFSU0VSX0ZMQUdTKGZsYWdzKTsKIAotICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KGZwLCBmaWxlbmFtZSwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHBzMSwgcHMyLCAmZXJyLCAmaWZsYWdzKTsKKyAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KGZwLCBmaWxlbmFtZSwgZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHBzMSwgcHMyLCAmZXJyLCAmaWZsYWdzKTsKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBsb2NhbGZsYWdzLmNmX2ZsYWdzID0gMDsKICAgICAgICAgZmxhZ3MgPSAmbG9jYWxmbGFnczsKICAgICB9CiAgICAgaWYgKG4pIHsKICAgICAgICAgZmxhZ3MtPmNmX2ZsYWdzIHw9IGlmbGFncyAmIFB5Q0ZfTUFTSzsKLSAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGUobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOwogICAgICAgICBQeU5vZGVfRnJlZShuKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yMTQ4LDYgKzIzNzUsMjMgQEAKICAgICByZXR1cm4gbW9kOwogfQogCittb2RfdHkKK1B5UGFyc2VyX0FTVEZyb21GaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGNvbnN0IGNoYXIqIGVuYywKKyAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgY2hhciAqcHMxLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgKmVycmNvZGUsCisgICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBtb2RfdHkgbW9kOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsIHN0YXJ0LCBwczEsIHBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZXJyY29kZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIG1vZDsKK30KKwogLyogU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gcGFyc2VmaWxlIC0tIHJldHVybiBub2RlIG9yIHNldCBleGNlcHRpb24gKi8KIAogbm9kZSAqCkBAIC0yNDg0LDYgKzI3MjgsOSBAQAogICAgIFB5T1Nfc2V0c2lnKFNJR1hGU1osIFNJR19JR04pOwogI2VuZGlmCiAgICAgUHlPU19Jbml0SW50ZXJydXB0cygpOyAvKiBNYXkgaW1wbHkgaW5pdHNpZ25hbCgpICovCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW1wb3J0IHNpZ25hbCIpOworICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9QeXRob24vcHl0aW1lLmMgYi9QeXRob24vcHl0aW1lLmMKaW5kZXggYmVlYWI4Ny4uZGU2YTQxZiAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5dGltZS5jCisrKyBiL1B5dGhvbi9weXRpbWUuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAKIHN0YXRpYyBpbnQKIF9QeVRpbWVfT2JqZWN0VG9EZW5vbWluYXRvcihQeU9iamVjdCAqb2JqLCB0aW1lX3QgKnNlYywgbG9uZyAqbnVtZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZW5vbWluYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGVub21pbmF0b3IsIF9QeVRpbWVfcm91bmRfdCByb3VuZCkKIHsKICAgICBhc3NlcnQoZGVub21pbmF0b3IgPD0gTE9OR19NQVgpOwogICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKQEAgLTE2Nyw2ICsxNjcsMjAgQEAKICAgICAgICAgICAgIGludHBhcnQgLT0gMS4wOwogICAgICAgICB9CiAKKyAgICAgICAgZmxvYXRwYXJ0ICo9IGRlbm9taW5hdG9yOworICAgICAgICBpZiAocm91bmQgPT0gX1B5VGltZV9ST1VORF9VUCkgeworICAgICAgICAgICAgaWYgKGludHBhcnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGZsb2F0cGFydCA9IGNlaWwoZmxvYXRwYXJ0KTsKKyAgICAgICAgICAgICAgICBpZiAoZmxvYXRwYXJ0ID49IGRlbm9taW5hdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0cGFydCA9IDAuMDsKKyAgICAgICAgICAgICAgICAgICAgaW50cGFydCArPSAxLjA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZmxvYXRwYXJ0ID0gZmxvb3IoZmxvYXRwYXJ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgICpzZWMgPSAodGltZV90KWludHBhcnQ7CiAgICAgICAgIGVyciA9IGludHBhcnQgLSAoZG91YmxlKSpzZWM7CiAgICAgICAgIGlmIChlcnIgPD0gLTEuMCB8fCBlcnIgPj0gMS4wKSB7CkBAIC0xNzQsNyArMTg4LDYgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogCi0gICAgICAgIGZsb2F0cGFydCAqPSBkZW5vbWluYXRvcjsKICAgICAgICAgKm51bWVyYXRvciA9IChsb25nKWZsb2F0cGFydDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTg4LDEyICsyMDEsMTggQEAKIH0KIAogaW50Ci1fUHlUaW1lX09iamVjdFRvVGltZV90KFB5T2JqZWN0ICpvYmosIHRpbWVfdCAqc2VjKQorX1B5VGltZV9PYmplY3RUb1RpbWVfdChQeU9iamVjdCAqb2JqLCB0aW1lX3QgKnNlYywgX1B5VGltZV9yb3VuZF90IHJvdW5kKQogewogICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKICAgICAgICAgZG91YmxlIGQsIGludHBhcnQsIGVycjsKIAogICAgICAgICBkID0gUHlGbG9hdF9Bc0RvdWJsZShvYmopOworICAgICAgICBpZiAocm91bmQgPT0gX1B5VGltZV9ST1VORF9VUCkgeworICAgICAgICAgICAgaWYgKGQgPj0gMCkKKyAgICAgICAgICAgICAgICBkID0gY2VpbChkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkID0gZmxvb3IoZCk7CisgICAgICAgIH0KICAgICAgICAgKHZvaWQpbW9kZihkLCAmaW50cGFydCk7CiAKICAgICAgICAgKnNlYyA9ICh0aW1lX3QpaW50cGFydDsKQEAgLTIxMywxNSArMjMyLDE3IEBACiB9CiAKIGludAotX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKFB5T2JqZWN0ICpvYmosIHRpbWVfdCAqc2VjLCBsb25nICpuc2VjKQorX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKFB5T2JqZWN0ICpvYmosIHRpbWVfdCAqc2VjLCBsb25nICpuc2VjLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfcm91bmRfdCByb3VuZCkKIHsKLSAgICByZXR1cm4gX1B5VGltZV9PYmplY3RUb0Rlbm9taW5hdG9yKG9iaiwgc2VjLCBuc2VjLCAxZTkpOworICAgIHJldHVybiBfUHlUaW1lX09iamVjdFRvRGVub21pbmF0b3Iob2JqLCBzZWMsIG5zZWMsIDFlOSwgcm91bmQpOwogfQogCiBpbnQKLV9QeVRpbWVfT2JqZWN0VG9UaW1ldmFsKFB5T2JqZWN0ICpvYmosIHRpbWVfdCAqc2VjLCBsb25nICp1c2VjKQorX1B5VGltZV9PYmplY3RUb1RpbWV2YWwoUHlPYmplY3QgKm9iaiwgdGltZV90ICpzZWMsIGxvbmcgKnVzZWMsCisgICAgICAgICAgICAgICAgICAgICAgICBfUHlUaW1lX3JvdW5kX3Qgcm91bmQpCiB7Ci0gICAgcmV0dXJuIF9QeVRpbWVfT2JqZWN0VG9EZW5vbWluYXRvcihvYmosIHNlYywgdXNlYywgMWU2KTsKKyAgICByZXR1cm4gX1B5VGltZV9PYmplY3RUb0Rlbm9taW5hdG9yKG9iaiwgc2VjLCB1c2VjLCAxZTYsIHJvdW5kKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvUHl0aG9uL3JhbmRvbS5jIGIvUHl0aG9uL3JhbmRvbS5jCmluZGV4IDMzN2JlODYuLjI5NDFiYTEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9yYW5kb20uYworKysgYi9QeXRob24vcmFuZG9tLmMKQEAgLTMsNiArMyw5IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2Vsc2UKICNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgUHlfREVCVUcKQEAgLTEyLDEzICsxNSw2IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVEFDUVVJUkVDT05URVhUQSkoSENSWVBUUFJPViAqcGhQcm92LFwKLSAgICAgICAgICAgICAgTFBDU1RSIHBzekNvbnRhaW5lciwgTFBDU1RSIHBzelByb3ZpZGVyLCBEV09SRCBkd1Byb3ZUeXBlLFwKLSAgICAgICAgICAgICAgRFdPUkQgZHdGbGFncyApOwotdHlwZWRlZiBCT09MIChXSU5BUEkgKkNSWVBUR0VOUkFORE9NKShIQ1JZUFRQUk9WIGhQcm92LCBEV09SRCBkd0xlbixcCi0gICAgICAgICAgICAgIEJZVEUgKnBiQnVmZmVyICk7Ci0KLXN0YXRpYyBDUllQVEdFTlJBTkRPTSBwQ3J5cHRHZW5SYW5kb20gPSBOVUxMOwogLyogVGhpcyBoYW5kbGUgaXMgbmV2ZXIgZXhwbGljaXRseSByZWxlYXNlZC4gSW5zdGVhZCwgdGhlIG9wZXJhdGluZwogICAgc3lzdGVtIHdpbGwgcmVsZWFzZSBpdCB3aGVuIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuICovCiBzdGF0aWMgSENSWVBUUFJPViBoQ3J5cHRQcm92ID0gMDsKQEAgLTI2LDI5ICsyMiw5IEBACiBzdGF0aWMgaW50CiB3aW4zMl91cmFuZG9tX2luaXQoaW50IHJhaXNlKQogewotICAgIEhJTlNUQU5DRSBoQWR2QVBJMzIgPSBOVUxMOwotICAgIENSWVBUQUNRVUlSRUNPTlRFWFRBIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gTlVMTDsKLQotICAgIC8qIE9idGFpbiBoYW5kbGUgdG8gdGhlIERMTCBjb250YWluaW5nIENyeXB0b0FQSS4gVGhpcyBzaG91bGQgbm90IGZhaWwuICovCi0gICAgaEFkdkFQSTMyID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMi5kbGwiKTsKLSAgICBpZihoQWR2QVBJMzIgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgIC8qIE9idGFpbiBwb2ludGVycyB0byB0aGUgQ3J5cHRvQVBJIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGZhaWwgb24gc29tZSBlYXJseQotICAgICAgIHZlcnNpb25zIG9mIFdpbjk1LiAqLwotICAgIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gKENSWVBUQUNRVUlSRUNPTlRFWFRBKUdldFByb2NBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhBZHZBUEkzMiwgIkNyeXB0QWNxdWlyZUNvbnRleHRBIik7Ci0gICAgaWYgKHBDcnlwdEFjcXVpcmVDb250ZXh0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBwQ3J5cHRHZW5SYW5kb20gPSAoQ1JZUFRHRU5SQU5ET00pR2V0UHJvY0FkZHJlc3MoaEFkdkFQSTMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3J5cHRHZW5SYW5kb20iKTsKLSAgICBpZiAocENyeXB0R2VuUmFuZG9tID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAvKiBBY3F1aXJlIGNvbnRleHQgKi8KLSAgICBpZiAoISBwQ3J5cHRBY3F1aXJlQ29udGV4dCgmaENyeXB0UHJvdiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkKKyAgICBpZiAoIUNyeXB0QWNxdWlyZUNvbnRleHQoJmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1ZfUlNBX0ZVTEwsIENSWVBUX1ZFUklGWUNPTlRFWFQpKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgcmV0dXJuIDA7CkBAIC03Nyw3ICs1Myw3IEBACiAgICAgd2hpbGUgKHNpemUgPiAwKQogICAgIHsKICAgICAgICAgY2h1bmsgPSBzaXplID4gSU5UX01BWCA/IElOVF9NQVggOiBzaXplOwotICAgICAgICBpZiAoIXBDcnlwdEdlblJhbmRvbShoQ3J5cHRQcm92LCBjaHVuaywgYnVmZmVyKSkKKyAgICAgICAgaWYgKCFDcnlwdEdlblJhbmRvbShoQ3J5cHRQcm92LCAoRFdPUkQpY2h1bmssIGJ1ZmZlcikpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIENyeXB0R2VuUmFuZG9tKCkgZmFpbGVkICovCiAgICAgICAgICAgICBpZiAocmFpc2UpCkBAIC05NSw0MCArNzEsMjQgQEAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIAotI2lmZGVmIF9fVk1TCi0vKiBVc2Ugb3BlbnNzbCByYW5kb20gcm91dGluZSAqLwotI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotc3RhdGljIGludAotdm1zX3VyYW5kb20odW5zaWduZWQgY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUsIGludCByYWlzZSkKLXsKLSAgICBpZiAoUkFORF9wc2V1ZG9fYnl0ZXMoYnVmZmVyLCBzaXplKSA8IDApIHsKLSAgICAgICAgaWYgKHJhaXNlKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiUkFORF9wc2V1ZG9fYnl0ZXMiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByYW5kb21pemVkIGhhc2ggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAic2VjcmV0IHVzaW5nIFJBTkRfcHNldWRvX2J5dGVzIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBfX1ZNUyAqLwotCi0KLSNpZiAhZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChfX1ZNUykKKyNpZm5kZWYgTVNfV0lORE9XUworc3RhdGljIHN0cnVjdCB7CisgICAgaW50IGZkOworICAgIGRldl90IHN0X2RldjsKKyAgICBpbm9fdCBzdF9pbm87Cit9IHVyYW5kb21fY2FjaGUgPSB7IC0xIH07CiAKIC8qIFJlYWQgc2l6ZSBieXRlcyBmcm9tIC9kZXYvdXJhbmRvbSBpbnRvIGJ1ZmZlci4KICAgIENhbGwgUHlfRmF0YWxFcnJvcigpIG9uIGVycm9yLiAqLwogc3RhdGljIHZvaWQKLWRldl91cmFuZG9tX25vcmFpc2UoY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUpCitkZXZfdXJhbmRvbV9ub3JhaXNlKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplKQogewogICAgIGludCBmZDsKICAgICBQeV9zc2l6ZV90IG47CiAKICAgICBhc3NlcnQgKDAgPCBzaXplKTsKIAotICAgIGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJGYWlsZWQgdG8gb3BlbiAvZGV2L3VyYW5kb20iKTsKIApAQCAtMTU2LDIyICsxMTYsNTYgQEAKIHsKICAgICBpbnQgZmQ7CiAgICAgUHlfc3NpemVfdCBuOworICAgIHN0cnVjdCBzdGF0IHN0OwogCiAgICAgaWYgKHNpemUgPD0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoZmQgPCAwKQotICAgIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTlhJTyB8fAotICAgICAgICAgICAgZXJybm8gPT0gRU5PREVWIHx8IGVycm5vID09IEVBQ0NFUykKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAodXJhbmRvbV9jYWNoZS5mZCA+PSAwKSB7CisgICAgICAgIC8qIERvZXMgdGhlIGZkIHBvaW50IHRvIHRoZSBzYW1lIHRoaW5nIGFzIGJlZm9yZT8gKGlzc3VlICMyMTIwNykgKi8KKyAgICAgICAgaWYgKGZzdGF0KHVyYW5kb21fY2FjaGUuZmQsICZzdCkKKyAgICAgICAgICAgIHx8IHN0LnN0X2RldiAhPSB1cmFuZG9tX2NhY2hlLnN0X2RldgorICAgICAgICAgICAgfHwgc3Quc3RfaW5vICE9IHVyYW5kb21fY2FjaGUuc3RfaW5vKSB7CisgICAgICAgICAgICAvKiBTb21ldGhpbmcgY2hhbmdlZDogZm9yZ2V0IHRoZSBjYWNoZWQgZmQgKGJ1dCBkb24ndCBjbG9zZSBpdCwKKyAgICAgICAgICAgICAgIHNpbmNlIGl0IHByb2JhYmx5IHBvaW50cyB0byBzb21ldGhpbmcgaW1wb3J0YW50IGZvciBzb21lCisgICAgICAgICAgICAgICB0aGlyZC1wYXJ0eSBjb2RlKS4gKi8KKyAgICAgICAgICAgIHVyYW5kb21fY2FjaGUuZmQgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodXJhbmRvbV9jYWNoZS5mZCA+PSAwKQorICAgICAgICBmZCA9IHVyYW5kb21fY2FjaGUuZmQ7CisgICAgZWxzZSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZmQgPSBfUHlfb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOWElPIHx8CisgICAgICAgICAgICAgICAgZXJybm8gPT0gRU5PREVWIHx8IGVycm5vID09IEVBQ0NFUykKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvdXJhbmRvbSAob3IgZXF1aXZhbGVudCkgbm90IGZvdW5kIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICh1cmFuZG9tX2NhY2hlLmZkID49IDApIHsKKyAgICAgICAgICAgIC8qIHVyYW5kb21fZmQgd2FzIGluaXRpYWxpemVkIGJ5IGFub3RoZXIgdGhyZWFkIHdoaWxlIHdlIHdlcmUKKyAgICAgICAgICAgICAgIG5vdCBob2xkaW5nIHRoZSBHSUwsIGtlZXAgaXQuICovCisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICBmZCA9IHVyYW5kb21fY2FjaGUuZmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZnN0YXQoZmQsICZzdCkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVyYW5kb21fY2FjaGUuZmQgPSBmZDsKKyAgICAgICAgICAgICAgICB1cmFuZG9tX2NhY2hlLnN0X2RldiA9IHN0LnN0X2RldjsKKyAgICAgICAgICAgICAgICB1cmFuZG9tX2NhY2hlLnN0X2lubyA9IHN0LnN0X2lubzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTE5NSwxMyArMTg5LDIxIEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCAlemkgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOwotICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgY2xvc2UoZmQpOwogICAgIHJldHVybiAwOwogfQotI2VuZGlmIC8qICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKSAqLworCitzdGF0aWMgdm9pZAorZGV2X3VyYW5kb21fY2xvc2Uodm9pZCkKK3sKKyAgICBpZiAodXJhbmRvbV9jYWNoZS5mZCA+PSAwKSB7CisgICAgICAgIGNsb3NlKHVyYW5kb21fY2FjaGUuZmQpOworICAgICAgICB1cmFuZG9tX2NhY2hlLmZkID0gLTE7CisgICAgfQorfQorCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAvKiBGaWxsIGJ1ZmZlciB3aXRoIHBzZXVkby1yYW5kb20gYnl0ZXMgZ2VuZXJhdGVkIGJ5IGEgbGluZWFyIGNvbmdydWVudAogICAgZ2VuZXJhdG9yIChMQ0cpOgpAQCAtMjQzLDExICsyNDUsNyBAQAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICByZXR1cm4gd2luMzJfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgMSk7CiAjZWxzZQotIyBpZmRlZiBfX1ZNUwotICAgIHJldHVybiB2bXNfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgMSk7Ci0jIGVsc2UKICAgICByZXR1cm4gZGV2X3VyYW5kb21fcHl0aG9uKChjaGFyKilidWZmZXIsIHNpemUpOwotIyBlbmRpZgogI2VuZGlmCiB9CiAKQEAgLTI1NSw4ICsyNTMsOSBAQAogX1B5UmFuZG9tX0luaXQodm9pZCkKIHsKICAgICBjaGFyICplbnY7Ci0gICAgdm9pZCAqc2VjcmV0ID0gJl9QeV9IYXNoU2VjcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnNlY3JldCA9ICh1bnNpZ25lZCBjaGFyICopJl9QeV9IYXNoU2VjcmV0LnVjOwogICAgIFB5X3NzaXplX3Qgc2VjcmV0X3NpemUgPSBzaXplb2YoX1B5X0hhc2hTZWNyZXRfdCk7CisgICAgYXNzZXJ0KHNlY3JldF9zaXplID09IHNpemVvZihfUHlfSGFzaFNlY3JldC51YykpOwogCiAgICAgaWYgKF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKQogICAgICAgICByZXR1cm47CkBAIC0yODQsMTggKzI4MywyMiBAQAogICAgICAgICAgICAgbWVtc2V0KHNlY3JldCwgMCwgc2VjcmV0X3NpemUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbGNnX3VyYW5kb20oc2VlZCwgKHVuc2lnbmVkIGNoYXIqKXNlY3JldCwgc2VjcmV0X3NpemUpOworICAgICAgICAgICAgbGNnX3VyYW5kb20oc2VlZCwgc2VjcmV0LCBzZWNyZXRfc2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAodm9pZCl3aW4zMl91cmFuZG9tKCh1bnNpZ25lZCBjaGFyICopc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMCk7Ci0jZWxzZSAvKiAjaWZkZWYgTVNfV0lORE9XUyAqLwotIyBpZmRlZiBfX1ZNUwotICAgICAgICB2bXNfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKXNlY3JldCwgc2VjcmV0X3NpemUsIDApOwotIyBlbHNlCi0gICAgICAgIGRldl91cmFuZG9tX25vcmFpc2UoKGNoYXIqKXNlY3JldCwgc2VjcmV0X3NpemUpOwotIyBlbmRpZgorICAgICAgICAodm9pZCl3aW4zMl91cmFuZG9tKHNlY3JldCwgc2VjcmV0X3NpemUsIDApOworI2Vsc2UKKyAgICAgICAgZGV2X3VyYW5kb21fbm9yYWlzZShzZWNyZXQsIHNlY3JldF9zaXplKTsKICNlbmRpZgogICAgIH0KIH0KKwordm9pZAorX1B5UmFuZG9tX0Zpbmkodm9pZCkKK3sKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIGRldl91cmFuZG9tX2Nsb3NlKCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1B5dGhvbi9zdHJkdXAuYyBiL1B5dGhvbi9zdHJkdXAuYwppbmRleCAyMDE4N2UwLi43NjlkM2RiIDEwMDY0NAotLS0gYS9QeXRob24vc3RyZHVwLmMKKysrIGIvUHl0aG9uL3N0cmR1cC5jCkBAIC02LDcgKzYsNyBAQAogc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpZiAoc3RyICE9IE5VTEwpIHsKLQkJcmVnaXN0ZXIgY2hhciAqY29weSA9IG1hbGxvYyhzdHJsZW4oc3RyKSArIDEpOworCQljaGFyICpjb3B5ID0gbWFsbG9jKHN0cmxlbihzdHIpICsgMSk7CiAJCWlmIChjb3B5ICE9IE5VTEwpCiAJCQlyZXR1cm4gc3RyY3B5KGNvcHksIHN0cik7CiAJfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5bXRhYmxlLmMgYi9QeXRob24vc3ltdGFibGUuYwppbmRleCAxZTEzYjc5MC4uZGExNjRhYSAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5bXRhYmxlLmMKKysrIGIvUHl0aG9uL3N5bXRhYmxlLmMKQEAgLTM3LDI0ICszNywxNCBAQAogICAgIHN0ZS0+c3RlX3RhYmxlID0gc3Q7CiAgICAgc3RlLT5zdGVfaWQgPSBrOyAvKiBzdGUgb3ducyByZWZlcmVuY2UgdG8gayAqLwogCi0gICAgc3RlLT5zdGVfbmFtZSA9IG5hbWU7CiAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgIHN0ZS0+c3RlX25hbWUgPSBuYW1lOwogCiAgICAgc3RlLT5zdGVfc3ltYm9scyA9IE5VTEw7CiAgICAgc3RlLT5zdGVfdmFybmFtZXMgPSBOVUxMOwogICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gTlVMTDsKIAotICAgIHN0ZS0+c3RlX3N5bWJvbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKHN0ZS0+c3RlX3N5bWJvbHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgc3RlLT5zdGVfdmFybmFtZXMgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChzdGUtPnN0ZV92YXJuYW1lcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBzdGUtPnN0ZV9jaGlsZHJlbiA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHN0ZS0+c3RlX2NoaWxkcmVuID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKKyAgICBzdGUtPnN0ZV9kaXJlY3RpdmVzID0gTlVMTDsKIAogICAgIHN0ZS0+c3RlX3R5cGUgPSBibG9jazsKICAgICBzdGUtPnN0ZV91bm9wdGltaXplZCA9IDA7CkBAIC03NSw2ICs2NSwxNSBAQAogICAgIHN0ZS0+c3RlX2NoaWxkX2ZyZWUgPSAwOwogICAgIHN0ZS0+c3RlX2dlbmVyYXRvciA9IDA7CiAgICAgc3RlLT5zdGVfcmV0dXJuc192YWx1ZSA9IDA7CisgICAgc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA9IDA7CisKKyAgICBzdGUtPnN0ZV9zeW1ib2xzID0gUHlEaWN0X05ldygpOworICAgIHN0ZS0+c3RlX3Zhcm5hbWVzID0gUHlMaXN0X05ldygwKTsKKyAgICBzdGUtPnN0ZV9jaGlsZHJlbiA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHN0ZS0+c3RlX3N5bWJvbHMgPT0gTlVMTAorICAgICAgICB8fCBzdGUtPnN0ZV92YXJuYW1lcyA9PSBOVUxMCisgICAgICAgIHx8IHN0ZS0+c3RlX2NoaWxkcmVuID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIGlmIChQeURpY3RfU2V0SXRlbShzdC0+c3RfYmxvY2tzLCBzdGUtPnN0ZV9pZCwgKFB5T2JqZWN0ICopc3RlKSA8IDApCiAgICAgICAgIGdvdG8gZmFpbDsKQEAgLTEwMiw2ICsxMDEsNyBAQAogICAgIFB5X1hERUNSRUYoc3RlLT5zdGVfc3ltYm9scyk7CiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV92YXJuYW1lcyk7CiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9jaGlsZHJlbik7CisgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9kaXJlY3RpdmVzKTsKICAgICBQeU9iamVjdF9EZWwoc3RlKTsKIH0KIApAQCAtMTg4LDcgKzE4OCw3IEBACiAKIHN0YXRpYyBpZGVudGlmaWVyIHRvcCA9IE5VTEwsIGxhbWJkYSA9IE5VTEwsIGdlbmV4cHIgPSBOVUxMLAogICAgIGxpc3Rjb21wID0gTlVMTCwgc2V0Y29tcCA9IE5VTEwsIGRpY3Rjb21wID0gTlVMTCwKLSAgICBfX2NsYXNzX18gPSBOVUxMLCBfX2xvY2Fsc19fID0gTlVMTDsKKyAgICBfX2NsYXNzX18gPSBOVUxMOwogCiAjZGVmaW5lIEdFVF9JREVOVElGSUVSKFZBUikgXAogICAgICgoVkFSKSA/IChWQVIpIDogKChWQVIpID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIyBWQVIpKSkKQEAgLTIzMyw3ICsyMzMsNyBAQAogI2RlZmluZSBDT01QSUxFUl9TVEFDS19GUkFNRV9TQ0FMRSAzCiAKIHN0cnVjdCBzeW10YWJsZSAqCi1QeVN5bXRhYmxlX0J1aWxkKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpCitQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKQogewogICAgIHN0cnVjdCBzeW10YWJsZSAqc3QgPSBzeW10YWJsZV9uZXcoKTsKICAgICBhc2RsX3NlcSAqc2VxOwpAQCAtMjQyLDcgKzI0MiwxMiBAQAogICAgIGludCByZWN1cnNpb25fbGltaXQgPSBQeV9HZXRSZWN1cnNpb25MaW1pdCgpOwogCiAgICAgaWYgKHN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBzdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlTeW10YWJsZV9GcmVlKHN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CiAgICAgc3QtPnN0X2ZpbGVuYW1lID0gZmlsZW5hbWU7CiAgICAgc3QtPnN0X2Z1dHVyZSA9IGZ1dHVyZTsKIApAQCAtMzA2LDkgKzMxMSwyMyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdHJ1Y3Qgc3ltdGFibGUgKgorUHlTeW10YWJsZV9CdWlsZChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgc3RydWN0IHN5bXRhYmxlICpzdDsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZ1dHVyZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gc3Q7Cit9CisKIHZvaWQKIFB5U3ltdGFibGVfRnJlZShzdHJ1Y3Qgc3ltdGFibGUgKnN0KQogeworICAgIFB5X1hERUNSRUYoc3QtPnN0X2ZpbGVuYW1lKTsKICAgICBQeV9YREVDUkVGKHN0LT5zdF9ibG9ja3MpOwogICAgIFB5X1hERUNSRUYoc3QtPnN0X3N0YWNrKTsKICAgICBQeU1lbV9GcmVlKCh2b2lkICopc3QpOwpAQCAtMzQ2LDYgKzM2NSwyNCBAQAogICAgIHJldHVybiAoUHlMb25nX0FTX0xPTkcodikgPj4gU0NPUEVfT0ZGU0VUKSAmIFNDT1BFX01BU0s7CiB9CiAKK3N0YXRpYyBpbnQKK2Vycm9yX2F0X2RpcmVjdGl2ZShQeVNURW50cnlPYmplY3QgKnN0ZSwgUHlPYmplY3QgKm5hbWUpCit7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGFzc2VydChzdGUtPnN0ZV9kaXJlY3RpdmVzKTsKKyAgICBmb3IgKGkgPSAwOyA7IGkrKykgeworICAgICAgICBkYXRhID0gUHlMaXN0X0dFVF9JVEVNKHN0ZS0+c3RlX2RpcmVjdGl2ZXMsIGkpOworICAgICAgICBhc3NlcnQoUHlUdXBsZV9DaGVja0V4YWN0KGRhdGEpKTsKKyAgICAgICAgaWYgKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMCkgPT0gbmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZyhQeVR1cGxlX0dFVF9JVEVNKGRhdGEsIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMikpKTsKKyAgICByZXR1cm4gMDsKK30KKwogCiAvKiBBbmFseXplIHJhdyBzeW1ib2wgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHNjb3BlIG9mIGVhY2ggbmFtZS4KIApAQCAtNDIwLDE2ICs0NTcsMTMgQEAKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lICclVScgaXMgcGFyYW1ldGVyIGFuZCBnbG9iYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfbGluZW5vLCBzdGUtPnN0ZV9jb2xfb2Zmc2V0KTsKLQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZsYWdzICYgREVGX05PTkxPQ0FMKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBub25sb2NhbCBhbmQgZ2xvYmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIFNFVF9TQ09QRShzY29wZXMsIG5hbWUsIEdMT0JBTF9FWFBMSUNJVCk7CiAgICAgICAgIGlmIChQeVNldF9BZGQoZ2xvYmFsLCBuYW1lKSA8IDApCkBAIC00NDMsMTkgKzQ3NywxOSBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lICclVScgaXMgcGFyYW1ldGVyIGFuZCBub25sb2NhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWJvdW5kKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbmxvY2FsIGRlY2xhcmF0aW9uIG5vdCBhbGxvd2VkIGF0IG1vZHVsZSBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFQeVNldF9Db250YWlucyhib3VuZCwgbmFtZSkpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gYmluZGluZyBmb3Igbm9ubG9jYWwgJyVVJyBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIFNFVF9TQ09QRShzY29wZXMsIG5hbWUsIEZSRUUpOwogICAgICAgICBzdGUtPnN0ZV9mcmVlID0gMTsKQEAgLTUwMCwxMyArNTM0LDEwIEBACiAKICAgIE5vdGUgdGhhdCB0aGUgY3VycmVudCBibG9jaydzIGZyZWUgdmFyaWFibGVzIGFyZSBpbmNsdWRlZCBpbiBmcmVlLgogICAgVGhhdCdzIHNhZmUgYmVjYXVzZSBubyBuYW1lIGNhbiBiZSBmcmVlIGFuZCBsb2NhbCBpbiB0aGUgc2FtZSBzY29wZS4KLQotICAgVGhlICdyZXN0cmljdGVkJyBhcmd1bWVudCBtYXkgYmUgc2V0IHRvIGEgc3RyaW5nIHRvIHJlc3RyaWN0IHRoZSBhbmFseXNpcwotICAgdG8gdGhlIG9uZSB2YXJpYWJsZSB3aG9zZSBuYW1lIGVxdWFscyB0aGF0IHN0cmluZyAoZS5nLiAiX19jbGFzc19fIikuCiAqLwogCiBzdGF0aWMgaW50Ci1hbmFseXplX2NlbGxzKFB5T2JqZWN0ICpzY29wZXMsIFB5T2JqZWN0ICpmcmVlLCBjb25zdCBjaGFyICpyZXN0cmljdGVkKQorYW5hbHl6ZV9jZWxscyhQeU9iamVjdCAqc2NvcGVzLCBQeU9iamVjdCAqZnJlZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZSwgKnYsICp2X2NlbGw7CiAgICAgaW50IHN1Y2Nlc3MgPSAwOwpAQCAtNTIzLDkgKzU1NCw2IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFQeVNldF9Db250YWlucyhmcmVlLCBuYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocmVzdHJpY3RlZCAhPSBOVUxMICYmCi0gICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCByZXN0cmljdGVkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvKiBSZXBsYWNlIExPQ0FMIHdpdGggQ0VMTCBmb3IgdGhpcyBuYW1lLCBhbmQgcmVtb3ZlCiAgICAgICAgICAgIGZyb20gZnJlZS4gSXQgaXMgc2FmZSB0byByZXBsYWNlIHRoZSB2YWx1ZSBvZiBuYW1lCiAgICAgICAgICAgIGluIHRoZSBkaWN0LCBiZWNhdXNlIGl0IHdpbGwgbm90IGNhdXNlIGEgcmVzaXplLgpAQCAtNTQxLDYgKzU2OSwyMCBAQAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCitzdGF0aWMgaW50Citkcm9wX2NsYXNzX2ZyZWUoUHlTVEVudHJ5T2JqZWN0ICpzdGUsIFB5T2JqZWN0ICpmcmVlKQoreworICAgIGludCByZXM7CisgICAgaWYgKCFHRVRfSURFTlRJRklFUihfX2NsYXNzX18pKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXMgPSBQeVNldF9EaXNjYXJkKGZyZWUsIF9fY2xhc3NfXyk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChyZXMpCisgICAgICAgIHN0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUgPSAxOworICAgIHJldHVybiAxOworfQorCiAvKiBDaGVjayBmb3IgaWxsZWdhbCBzdGF0ZW1lbnRzIGluIHVub3B0aW1pemVkIG5hbWVzcGFjZXMgKi8KIHN0YXRpYyBpbnQKIGNoZWNrX3Vub3B0aW1pemVkKGNvbnN0IFB5U1RFbnRyeU9iamVjdCogc3RlKSB7CkBAIC01NjQsOCArNjA2LDkgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsIHN0ZS0+c3RlX29wdF9saW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9vcHRfY29sX29mZnNldCk7CisgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX29wdF9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfb3B0X2NvbF9vZmZzZXQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC03NzEsNyArODE0LDYgQEAKICAgICAgICAgLyogU3BlY2lhbC1jYXNlIF9fY2xhc3NfXyAqLwogICAgICAgICBpZiAoIUdFVF9JREVOVElGSUVSKF9fY2xhc3NfXykpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBhc3NlcnQoUHlTZXRfQ29udGFpbnMobG9jYWwsIF9fY2xhc3NfXykgPT0gMSk7CiAgICAgICAgIGlmIChQeVNldF9BZGQobmV3Ym91bmQsIF9fY2xhc3NfXykgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CkBAIC04MDQsMTEgKzg0Niw5IEBACiAgICAgUHlfREVDUkVGKHRlbXApOwogCiAgICAgLyogQ2hlY2sgaWYgYW55IGxvY2FsIHZhcmlhYmxlcyBtdXN0IGJlIGNvbnZlcnRlZCB0byBjZWxsIHZhcmlhYmxlcyAqLwotICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2sgJiYgIWFuYWx5emVfY2VsbHMoc2NvcGVzLCBuZXdmcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisgICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIGVsc2UgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18iKSkKKyAgICBlbHNlIGlmIChzdGUtPnN0ZV90eXBlID09IENsYXNzQmxvY2sgJiYgIWRyb3BfY2xhc3NfZnJlZShzdGUsIG5ld2ZyZWUpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIC8qIFJlY29yZHMgdGhlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzIGluIHRoZSBzeW1ib2wgdGFibGUgZW50cnkgKi8KICAgICBpZiAoIXVwZGF0ZV9zeW1ib2xzKHN0ZS0+c3RlX3N5bWJvbHMsIHNjb3BlcywgYm91bmQsIG5ld2ZyZWUsCkBAIC04OTksMTUgKzkzOSwyMCBAQAogc3RhdGljIGludAogc3ltdGFibGVfd2FybihzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBjaGFyICptc2csIGludCBsaW5lbm8pCiB7Ci0gICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csIHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgTlVMTCwgTlVMTCkgPCAwKSAgICAgeworICAgIFB5T2JqZWN0ICptZXNzYWdlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobXNnKTsKKyAgICBpZiAobWVzc2FnZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1lc3NhZ2UsIHN0LT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgTlVMTCwgTlVMTCkgPCAwKSAgICAgeworICAgICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N5bnRheFdhcm5pbmcpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIG1zZyk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0LT5zdF9maWxlbmFtZSwgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTk5MCw5ICsxMDM1LDkgQEAKICAgICAgICAgaWYgKChmbGFnICYgREVGX1BBUkFNKSAmJiAodmFsICYgREVGX1BBUkFNKSkgewogICAgICAgICAgICAgLyogSXMgaXQgYmV0dGVyIHRvIHVzZSAnbWFuZ2xlZCcgb3IgJ25hbWUnIGhlcmU/ICovCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsIERVUExJQ0FURV9BUkdVTUVOVCwgbmFtZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgdmFsIHw9IGZsYWc7CkBAIC0xMTAyLDYgKzExNDcsMjUgQEAKIAogCiBzdGF0aWMgaW50CitzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0cnVjdCBzeW10YWJsZSAqc3QsIGlkZW50aWZpZXIgbmFtZSwgc3RtdF90eSBzKQoreworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGludCByZXM7CisgICAgaWYgKCFzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcykgeworICAgICAgICBzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmICghc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZGF0YSA9IFB5X0J1aWxkVmFsdWUoIihPaWkpIiwgbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJlcyA9IFB5TGlzdF9BcHBlbmQoc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMsIGRhdGEpOworICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICByZXR1cm4gcmVzID09IDA7Cit9CisKKworc3RhdGljIGludAogc3ltdGFibGVfdmlzaXRfc3RtdChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBzdG10X3R5IHMpCiB7CiAgICAgaWYgKCsrc3QtPnJlY3Vyc2lvbl9kZXB0aCA+IHN0LT5yZWN1cnNpb25fbGltaXQpIHsKQEAgLTExNDYsMTMgKzEyMTAsNiBAQAogICAgICAgICBpZiAoIXN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0LCBzLT52LkNsYXNzRGVmLm5hbWUsIENsYXNzQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilzLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpKQogICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7Ci0gICAgICAgIGlmICghR0VUX0lERU5USUZJRVIoX19jbGFzc19fKSB8fAotICAgICAgICAgICAgIXN5bXRhYmxlX2FkZF9kZWYoc3QsIF9fY2xhc3NfXywgREVGX0xPQ0FMKSB8fAotICAgICAgICAgICAgIUdFVF9JREVOVElGSUVSKF9fbG9jYWxzX18pIHx8Ci0gICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgX19sb2NhbHNfXywgREVGX1BBUkFNKSkgewotICAgICAgICAgICAgc3ltdGFibGVfZXhpdF9ibG9jayhzdCwgcyk7Ci0gICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKLSAgICAgICAgfQogICAgICAgICB0bXAgPSBzdC0+c3RfcHJpdmF0ZTsKICAgICAgICAgc3QtPnN0X3ByaXZhdGUgPSBzLT52LkNsYXNzRGVmLm5hbWU7CiAgICAgICAgIFZJU0lUX1NFUShzdCwgc3RtdCwgcy0+di5DbGFzc0RlZi5ib2R5KTsKQEAgLTEyNDAsMTQgKzEyOTcsNyBAQAogICAgICAgICBhc2RsX3NlcSAqc2VxID0gcy0+di5HbG9iYWwubmFtZXM7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4oc2VxKTsgaSsrKSB7CiAgICAgICAgICAgICBpZGVudGlmaWVyIG5hbWUgPSAoaWRlbnRpZmllcilhc2RsX3NlcV9HRVQoc2VxLCBpKTsKLSAgICAgICAgICAgIGxvbmcgY3VyOwotICAgICAgICAgICAgaWYgKHN0LT5zdF9jdXItPnN0ZV90eXBlID09IENsYXNzQmxvY2sgJiYKLSAgICAgICAgICAgICAgICAhUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIl9fY2xhc3NfXyIpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCAiY2Fubm90IG1ha2UgX19jbGFzc19fIGdsb2JhbCIpOwotICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyID0gc3ltdGFibGVfbG9va3VwKHN0LCBuYW1lKTsKKyAgICAgICAgICAgIGxvbmcgY3VyID0gc3ltdGFibGVfbG9va3VwKHN0LCBuYW1lKTsKICAgICAgICAgICAgIGlmIChjdXIgPCAwKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOwogICAgICAgICAgICAgaWYgKGN1ciAmIChERUZfTE9DQUwgfCBVU0UpKSB7CkBAIC0xMjY4LDYgKzEzMTgsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBuYW1lLCBERUZfR0xPQkFMKSkKICAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgICAgIGlmICghc3ltdGFibGVfcmVjb3JkX2RpcmVjdGl2ZShzdCwgbmFtZSwgcykpCisgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5Nyw2ICsxMzQ5LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgbmFtZSwgREVGX05PTkxPQ0FMKSkKICAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgICAgIGlmICghc3ltdGFibGVfcmVjb3JkX2RpcmVjdGl2ZShzdCwgbmFtZSwgcykpCisgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQwNyw2ICsxNDYxLDcgQEAKICAgICBjYXNlIFN0cl9raW5kOgogICAgIGNhc2UgQnl0ZXNfa2luZDoKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKICAgICAgICAgLyogTm90aGluZyB0byBkbyBoZXJlLiAqLwogICAgICAgICBicmVhazsKICAgICAvKiBUaGUgZm9sbG93aW5nIGV4cHJzIGNhbiBiZSBhc3NpZ25tZW50IHRhcmdldHMuICovCkBAIC0xNDk5LDEwICsxNTU0LDEwIEBACiAKICAgICBpZiAoYS0+YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfYXJnYW5ub3RhdGlvbnMoc3QsIGEtPmFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYS0+dmFyYXJnYW5ub3RhdGlvbikKLSAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPnZhcmFyZ2Fubm90YXRpb24pOwotICAgIGlmIChhLT5rd2FyZ2Fubm90YXRpb24pCi0gICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZ2Fubm90YXRpb24pOworICAgIGlmIChhLT52YXJhcmcgJiYgYS0+dmFyYXJnLT5hbm5vdGF0aW9uKQorICAgICAgICBWSVNJVChzdCwgZXhwciwgYS0+dmFyYXJnLT5hbm5vdGF0aW9uKTsKKyAgICBpZiAoYS0+a3dhcmcgJiYgYS0+a3dhcmctPmFubm90YXRpb24pCisgICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZy0+YW5ub3RhdGlvbik7CiAgICAgaWYgKGEtPmt3b25seWFyZ3MgJiYgIXN5bXRhYmxlX3Zpc2l0X2FyZ2Fubm90YXRpb25zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHMtPnYuRnVuY3Rpb25EZWYucmV0dXJucykKQEAgLTE1MjEsMTIgKzE1NzYsMTIgQEAKICAgICBpZiAoYS0+a3dvbmx5YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfcGFyYW1zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGEtPnZhcmFyZykgewotICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPnZhcmFyZywgREVGX1BBUkFNKSkKKyAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBhLT52YXJhcmctPmFyZywgREVGX1BBUkFNKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdC0+c3RfY3VyLT5zdGVfdmFyYXJncyA9IDE7CiAgICAgfQogICAgIGlmIChhLT5rd2FyZykgewotICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPmt3YXJnLCBERUZfUEFSQU0pKQorICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPmt3YXJnLT5hcmcsIERFRl9QQVJBTSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX3ZhcmtleXdvcmRzID0gMTsKICAgICB9CkBAIC0xNTg3LDcgKzE2NDIsNyBAQAogICAgICAgICAgICAgaW50IGxpbmVubyA9IHN0LT5zdF9jdXItPnN0ZV9saW5lbm87CiAgICAgICAgICAgICBpbnQgY29sX29mZnNldCA9IHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0OwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCBJTVBPUlRfU1RBUl9XQVJOSU5HKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0b3JlX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9zeXNtb2R1bGUuYyBiL1B5dGhvbi9zeXNtb2R1bGUuYwppbmRleCAyZjcwMGU2Li4zOWZlNTNmIDEwMDY0NAotLS0gYS9QeXRob24vc3lzbW9kdWxlLmMKKysrIGIvUHl0aG9uL3N5c21vZHVsZS5jCkBAIC0zMiwxNSArMzIsMzEgQEAKIGV4dGVybiBjb25zdCBjaGFyICpQeVdpbl9ETExWZXJzaW9uU3RyaW5nOwogI2VuZGlmCiAKLSNpZmRlZiBfX1ZNUwotI2luY2x1ZGUgPHVuaXhsaWIuaD4KLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9MQU5HSU5GT19ICiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCitfUHlfSURFTlRJRklFUihfKTsKK19QeV9JREVOVElGSUVSKF9fc2l6ZW9mX18pOworX1B5X0lERU5USUZJRVIoYnVmZmVyKTsKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKK19QeV9JREVOVElGSUVSKHBhdGgpOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CitfUHlfSURFTlRJRklFUih3cml0ZSk7CisKK1B5T2JqZWN0ICoKK19QeVN5c19HZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5KQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgUHlPYmplY3QgKnNkID0gdHN0YXRlLT5pbnRlcnAtPnN5c2RpY3Q7CisgICAgaWYgKHNkID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlEaWN0X0dldEl0ZW1JZChzZCwga2V5KTsKK30KKwogUHlPYmplY3QgKgogUHlTeXNfR2V0T2JqZWN0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC01Miw2ICs2OCwyMSBAQAogfQogCiBpbnQKK19QeVN5c19TZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5LCBQeU9iamVjdCAqdikKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5T2JqZWN0ICpzZCA9IHRzdGF0ZS0+aW50ZXJwLT5zeXNkaWN0OworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKHNkLCBrZXkpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9QeURpY3RfRGVsSXRlbUlkKHNkLCBrZXkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBfUHlEaWN0X1NldEl0ZW1JZChzZCwga2V5LCB2KTsKK30KKworaW50CiBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnYpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKQEAgLTc5LDggKzExMCw2IEBACiAgICAgUHlPYmplY3QgKmVuY29kZWQsICplc2NhcGVkX3N0ciwgKnJlcHJfc3RyLCAqYnVmZmVyLCAqcmVzdWx0OwogICAgIGNoYXIgKnN0ZG91dF9lbmNvZGluZ19zdHI7CiAgICAgaW50IHJldDsKLSAgICBfUHlfSURFTlRJRklFUihlbmNvZGluZyk7Ci0gICAgX1B5X0lERU5USUZJRVIoYnVmZmVyKTsKIAogICAgIHN0ZG91dF9lbmNvZGluZyA9IF9QeU9iamVjdF9HZXRBdHRySWQob3V0ZiwgJlB5SWRfZW5jb2RpbmcpOwogICAgIGlmIChzdGRvdXRfZW5jb2RpbmcgPT0gTlVMTCkKQEAgLTEwMSw3ICsxMzAsNiBAQAogCiAgICAgYnVmZmVyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvdXRmLCAmUHlJZF9idWZmZXIpOwogICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGJ1ZmZlciwgJlB5SWRfd3JpdGUsICIoTykiLCBlbmNvZGVkKTsKICAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7CiAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKQEAgLTEzNywxMCArMTY1LDExIEBACiAgICAgUHlPYmplY3QgKm91dGY7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBpbnRlcnAtPm1vZHVsZXM7Ci0gICAgUHlPYmplY3QgKmJ1aWx0aW5zID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIHN0YXRpYyBQeU9iamVjdCAqbmV3bGluZSA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUihfKTsKIAorICAgIGJ1aWx0aW5zID0gX1B5RGljdF9HZXRJdGVtSWQobW9kdWxlcywgJlB5SWRfYnVpbHRpbnMpOwogICAgIGlmIChidWlsdGlucyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IGJ1aWx0aW5zIG1vZHVsZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1NSw3ICsxODQsNyBAQAogICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChidWlsdGlucywgJlB5SWRfXywgUHlfTm9uZSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgb3V0ZiA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgb3V0ZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOwogICAgIGlmIChvdXRmID09IE5VTEwgfHwgb3V0ZiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IHN5cy5zdGRvdXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzMsNyArMjAyLDEyIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIG91dGYpICE9IDApCisgICAgaWYgKG5ld2xpbmUgPT0gTlVMTCkgeworICAgICAgICBuZXdsaW5lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIlxuIik7CisgICAgICAgIGlmIChuZXdsaW5lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChuZXdsaW5lLCBvdXRmLCBQeV9QUklOVF9SQVcpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGJ1aWx0aW5zLCAmUHlJZF9fLCBvKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMyOSwxNSArMzYzLDE5IEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLWNhbGxfdHJhbXBvbGluZShQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0KiBjYWxsYmFjaywKK2NhbGxfdHJhbXBvbGluZShQeU9iamVjdCogY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUsIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9OZXcoMyk7CisgICAgUHlPYmplY3QgKmFyZ3M7CiAgICAgUHlPYmplY3QgKndoYXRzdHI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorICAgIGFyZ3MgPSBQeVR1cGxlX05ldygzKTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9JTkNSRUYoZnJhbWUpOwogICAgIHdoYXRzdHIgPSB3aGF0c3RyaW5nc1t3aGF0XTsKICAgICBQeV9JTkNSRUYod2hhdHN0cik7CkBAIC0zNDksNyArMzg3LDYgQEAKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDIsIGFyZyk7CiAKICAgICAvKiBjYWxsIHRoZSBQeXRob24tbGV2ZWwgZnVuY3Rpb24gKi8KLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmcmFtZSk7CiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoY2FsbGJhY2ssIGFyZ3MpOwogICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0KGZyYW1lLCAxKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCkBAIC0zNjQsMTIgKzQwMSwxMSBAQAogcHJvZmlsZV90cmFtcG9saW5lKFB5T2JqZWN0ICpzZWxmLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKICAgICAgICAgICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgIGlmIChhcmcgPT0gTlVMTCkKICAgICAgICAgYXJnID0gUHlfTm9uZTsKLSAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUodHN0YXRlLCBzZWxmLCBmcmFtZSwgd2hhdCwgYXJnKTsKKyAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUoc2VsZiwgZnJhbWUsIHdoYXQsIGFyZyk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXZhbF9TZXRQcm9maWxlKE5VTEwsIE5VTEwpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0zODIsNyArNDE4LDYgQEAKIHRyYWNlX3RyYW1wb2xpbmUoUHlPYmplY3QgKnNlbGYsIFB5RnJhbWVPYmplY3QgKmZyYW1lLAogICAgICAgICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgUHlPYmplY3QgKmNhbGxiYWNrOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKQEAgLTM5Miw3ICs0MjcsNyBAQAogICAgICAgICBjYWxsYmFjayA9IGZyYW1lLT5mX3RyYWNlOwogICAgIGlmIChjYWxsYmFjayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUodHN0YXRlLCBjYWxsYmFjaywgZnJhbWUsIHdoYXQsIGFyZyk7CisgICAgcmVzdWx0ID0gY2FsbF90cmFtcG9saW5lKGNhbGxiYWNrLCBmcmFtZSwgd2hhdCwgYXJnKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgUHlFdmFsX1NldFRyYWNlKE5VTEwsIE5VTEwpOwogICAgICAgICBQeV9DTEVBUihmcmFtZS0+Zl90cmFjZSk7CkBAIC02MTYsNyArNjUxLDcgQEAKICJoYXNoX2luZm9cblwKIFxuXAogQSBzdHJ1Y3Qgc2VxdWVuY2UgcHJvdmlkaW5nIHBhcmFtZXRlcnMgdXNlZCBmb3IgY29tcHV0aW5nXG5cCi1udW1lcmljIGhhc2hlcy4gIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CitoYXNoZXMuIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIGhhc2hfaW5mb19maWVsZHNbXSA9IHsKICAgICB7IndpZHRoIiwgIndpZHRoIG9mIHRoZSB0eXBlIHVzZWQgZm9yIGhhc2hpbmcsIGluIGJpdHMifSwKQEAgLTYyNSw2ICs2NjAsMTEgQEAKICAgICB7ImluZiIsICJ2YWx1ZSB0byBiZSB1c2VkIGZvciBoYXNoIG9mIGEgcG9zaXRpdmUgaW5maW5pdHkifSwKICAgICB7Im5hbiIsICJ2YWx1ZSB0byBiZSB1c2VkIGZvciBoYXNoIG9mIGEgbmFuIn0sCiAgICAgeyJpbWFnIiwgIm11bHRpcGxpZXIgdXNlZCBmb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIifSwKKyAgICB7ImFsZ29yaXRobSIsICJuYW1lIG9mIHRoZSBhbGdvcml0aG0gZm9yIGhhc2hpbmcgb2Ygc3RyLCBieXRlcyBhbmQgIgorICAgICAgICAgICAgICAgICAgIm1lbW9yeXZpZXdzIn0sCisgICAgeyJoYXNoX2JpdHMiLCAiaW50ZXJuYWwgb3V0cHV0IHNpemUgb2YgaGFzaCBhbGdvcml0aG0ifSwKKyAgICB7InNlZWRfYml0cyIsICJzZWVkIHNpemUgb2YgaGFzaCBhbGdvcml0aG0ifSwKKyAgICB7ImN1dG9mZiIsICJzbWFsbCBzdHJpbmcgb3B0aW1pemF0aW9uIGN1dG9mZiJ9LAogICAgIHtOVUxMLCBOVUxMfQogfTsKIApAQCAtNjMyLDcgKzY3Miw3IEBACiAgICAgInN5cy5oYXNoX2luZm8iLAogICAgIGhhc2hfaW5mb19kb2MsCiAgICAgaGFzaF9pbmZvX2ZpZWxkcywKLSAgICA1LAorICAgIDksCiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjQwLDkgKzY4MCwxMSBAQAogewogICAgIFB5T2JqZWN0ICpoYXNoX2luZm87CiAgICAgaW50IGZpZWxkID0gMDsKKyAgICBQeUhhc2hfRnVuY0RlZiAqaGFzaGZ1bmM7CiAgICAgaGFzaF9pbmZvID0gUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoJkhhc2hfSW5mb1R5cGUpOwogICAgIGlmIChoYXNoX2luZm8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGFzaGZ1bmMgPSBQeUhhc2hfR2V0RnVuY0RlZigpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKDgqc2l6ZW9mKFB5X2hhc2hfdCkpKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKQEAgLTY1Myw2ICs2OTUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhfUHlIQVNIX05BTikpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKF9QeUhBU0hfSU1BRykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoaGFzaGZ1bmMtPm5hbWUpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhoYXNoZnVuYy0+aGFzaF9iaXRzKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoaGFzaGZ1bmMtPnNlZWRfYml0cykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKFB5X0hBU0hfQ1VUT0ZGKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfQ0xFQVIoaGFzaF9pbmZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03NzcsNyArODI3LDcgQEAKIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlXG5cCiBhIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhc1xuXAogc3lzLnNldGRsb3BlbmZsYWdzKDApLiAgVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXNcblwKLXN5cy5zZXRkbG9wZW5mbGFncyhjdHlwZXMuUlRMRF9HTE9CQUwpLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXNcblwKK3N5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTCkuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgbW9kdWxlc1xuXAogY2FuIGJlIGZvdW5kIGluIHRoZSBvcyBtb2R1bGUgKFJUTERfeHh4IGNvbnN0YW50cywgZS5nLiBvcy5SVExEX0xBWlkpLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzkzLDcgKzg0Myw3IEBACiAiZ2V0ZGxvcGVuZmxhZ3MoKSAtPiBpbnRcblwKIFxuXAogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciBkbG9wZW4gY2FsbHMuXG5cCi1UaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIGN0eXBlcyBhbmQgRExGQ04gbW9kdWxlcy4iKTsKK1RoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgb3MgbW9kdWxlLiIpOwogCiAjZW5kaWYgIC8qIEhBVkVfRExPUEVOICovCiAKQEAgLTgxMywzMCArODYzLDE2IEBACiB9CiAjZW5kaWYgLyogVVNFX01BTExPUFQgKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLXN5c19nZXRzaXplb2YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3NpemVfdAorX1B5U3lzX0dldFNpemVPZihQeU9iamVjdCAqbykKIHsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKmdjX2hlYWRfc2l6ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmplY3QiLCAiZGVmYXVsdCIsIDB9OwotICAgIFB5T2JqZWN0ICpvLCAqZGZsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1ldGhvZDsKLSAgICBfUHlfSURFTlRJRklFUihfX3NpemVvZl9fKTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86Z2V0c2l6ZW9mIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZvLCAmZGZsdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogSW5pdGlhbGl6ZSBzdGF0aWMgdmFyaWFibGUgZm9yIEdDIGhlYWQgc2l6ZSAqLwotICAgIGlmIChnY19oZWFkX3NpemUgPT0gTlVMTCkgewotICAgICAgICBnY19oZWFkX3NpemUgPSBQeUxvbmdfRnJvbVNzaXplX3Qoc2l6ZW9mKFB5R0NfSGVhZCkpOwotICAgICAgICBpZiAoZ2NfaGVhZF9zaXplID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgc2l6ZV90IHNpemU7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhlIHR5cGUgaXMgaW5pdGlhbGl6ZWQuIGZsb2F0IGdldHMgaW5pdGlhbGl6ZWQgbGF0ZSAqLwogICAgIGlmIChQeVR5cGVfUmVhZHkoUHlfVFlQRShvKSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIChzaXplX3QpLTE7CiAKICAgICBtZXRob2QgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvLCAmUHlJZF9fX3NpemVvZl9fKTsKICAgICBpZiAobWV0aG9kID09IE5VTEwpIHsKQEAgLTg1MCwyNCArODg2LDQ1IEBACiAgICAgICAgIFB5X0RFQ1JFRihtZXRob2QpOwogICAgIH0KIAotICAgIC8qIEhhcyBhIGRlZmF1bHQgdmFsdWUgYmVlbiBnaXZlbiAqLwotICAgIGlmICgocmVzID09IE5VTEwpICYmIChkZmx0ICE9IE5VTEwpICYmCi0gICAgICAgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIFB5X0lOQ1JFRihkZmx0KTsKLSAgICAgICAgcmV0dXJuIGRmbHQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcmVzOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIChzaXplX3QpLTE7CisKKyAgICBzaXplID0gUHlMb25nX0FzU2l6ZV90KHJlcyk7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKHNpemUgPT0gKHNpemVfdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gKHNpemVfdCktMTsKIAogICAgIC8qIGFkZCBnY19oZWFkIHNpemUgKi8KLSAgICBpZiAoUHlPYmplY3RfSVNfR0MobykpIHsKLSAgICAgICAgUHlPYmplY3QgKnRtcCA9IHJlczsKLSAgICAgICAgcmVzID0gUHlOdW1iZXJfQWRkKHRtcCwgZ2NfaGVhZF9zaXplKTsKLSAgICAgICAgUHlfREVDUkVGKHRtcCk7CisgICAgaWYgKFB5T2JqZWN0X0lTX0dDKG8pKQorICAgICAgICBzaXplICs9IHNpemVvZihQeUdDX0hlYWQpOworICAgIHJldHVybiBzaXplOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc3lzX2dldHNpemVvZihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqZWN0IiwgImRlZmF1bHQiLCAwfTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeU9iamVjdCAqbywgKmRmbHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpnZXRzaXplb2YiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm8sICZkZmx0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzaXplID0gX1B5U3lzX0dldFNpemVPZihvKTsKKworICAgIGlmIChzaXplID09IChzaXplX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAvKiBIYXMgYSBkZWZhdWx0IHZhbHVlIGJlZW4gZ2l2ZW4gKi8KKyAgICAgICAgaWYgKGRmbHQgIT0gTlVMTCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGZsdCk7CisgICAgICAgICAgICByZXR1cm4gZGZsdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIHJlczsKKworICAgIHJldHVybiBQeUxvbmdfRnJvbVNpemVfdChzaXplKTsKIH0KIAogUHlEb2NfU1RSVkFSKGdldHNpemVvZl9kb2MsCkBAIC04OTcsNiArOTU0LDE5IEBACiByZWZlcmVuY2UgYXMgYW4gYXJndW1lbnQgdG8gZ2V0cmVmY291bnQoKS4iCiApOwogCitzdGF0aWMgUHlPYmplY3QgKgorc3lzX2dldGFsbG9jYXRlZGJsb2NrcyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KF9QeV9HZXRBbGxvY2F0ZWRCbG9ja3MoKSk7Cit9CisKK1B5RG9jX1NUUlZBUihnZXRhbGxvY2F0ZWRibG9ja3NfZG9jLAorImdldGFsbG9jYXRlZGJsb2NrcygpIC0+IGludGVnZXJcblwKK1xuXAorUmV0dXJuIHRoZSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjdXJyZW50bHkgYWxsb2NhdGVkLCByZWdhcmRsZXNzIG9mIHRoZWlyXG5cCitzaXplLiIKKyk7CisKICNpZmRlZiBDT1VOVF9BTExPQ1MKIHN0YXRpYyBQeU9iamVjdCAqCiBzeXNfZ2V0Y291bnRzKFB5T2JqZWN0ICpzZWxmKQpAQCAtMTA2NSw2ICsxMTM1LDggQEAKICAgICB7ImdldGRsb3BlbmZsYWdzIiwgKFB5Q0Z1bmN0aW9uKXN5c19nZXRkbG9wZW5mbGFncywgTUVUSF9OT0FSR1MsCiAgICAgIGdldGRsb3BlbmZsYWdzX2RvY30sCiAjZW5kaWYKKyAgICB7ImdldGFsbG9jYXRlZGJsb2NrcyIsIChQeUNGdW5jdGlvbilzeXNfZ2V0YWxsb2NhdGVkYmxvY2tzLCBNRVRIX05PQVJHUywKKyAgICAgIGdldGFsbG9jYXRlZGJsb2Nrc19kb2N9LAogI2lmZGVmIENPVU5UX0FMTE9DUwogICAgIHsiZ2V0Y291bnRzIiwgICAgICAgKFB5Q0Z1bmN0aW9uKXN5c19nZXRjb3VudHMsIE1FVEhfTk9BUkdTfSwKICNlbmRpZgpAQCAtMTExNyw3ICsxMTg5LDcgQEAKICAgICB7InNldHRyYWNlIiwgICAgICAgIHN5c19zZXR0cmFjZSwgTUVUSF9PLCBzZXR0cmFjZV9kb2N9LAogICAgIHsiZ2V0dHJhY2UiLCAgICAgICAgc3lzX2dldHRyYWNlLCBNRVRIX05PQVJHUywgZ2V0dHJhY2VfZG9jfSwKICAgICB7ImNhbGxfdHJhY2luZyIsIHN5c19jYWxsX3RyYWNpbmcsIE1FVEhfVkFSQVJHUywgY2FsbF90cmFjaW5nX2RvY30sCi0gICAgeyJfZGVidWdtYWxsb2NzdGF0cyIsIHN5c19kZWJ1Z21hbGxvY3N0YXRzLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJfZGVidWdtYWxsb2NzdGF0cyIsIHN5c19kZWJ1Z21hbGxvY3N0YXRzLCBNRVRIX05PQVJHUywKICAgICAgZGVidWdtYWxsb2NzdGF0c19kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwpAQCAtMTI4Niw2ICsxMzU4LDcgQEAKIGV4ZWN1dGFibGUgLS0gYWJzb2x1dGUgcGF0aCBvZiB0aGUgZXhlY3V0YWJsZSBiaW5hcnkgb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlclxuXAogZmxvYXRfaW5mbyAtLSBhIHN0cnVjdCBzZXF1ZW5jZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmbG9hdCBpbXBsZW1lbnRhdGlvbi5cblwKIGZsb2F0X3JlcHJfc3R5bGUgLS0gc3RyaW5nIGluZGljYXRpbmcgdGhlIHN0eWxlIG9mIHJlcHIoKSBvdXRwdXQgZm9yIGZsb2F0c1xuXAoraGFzaF9pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhc2ggYWxnb3JpdGhtLlxuXAogaGV4dmVyc2lvbiAtLSB2ZXJzaW9uIGluZm9ybWF0aW9uIGVuY29kZWQgYXMgYSBzaW5nbGUgaW50ZWdlclxuXAogaW1wbGVtZW50YXRpb24gLS0gUHl0aG9uIGltcGxlbWVudGF0aW9uIGluZm9ybWF0aW9uLlxuXAogaW50X2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50IGltcGxlbWVudGF0aW9uLlxuXApAQCAtMTM1MiwxNCArMTQyNSwxMiBAQAogICAgIHsibm9fc2l0ZSIsICAgICAgICAgICAgICAgICAiLVMifSwKICAgICB7Imlnbm9yZV9lbnZpcm9ubWVudCIsICAgICAgIi1FIn0sCiAgICAgeyJ2ZXJib3NlIiwgICAgICAgICAgICAgICAgICItdiJ9LAotI2lmZGVmIFJJU0NPUwotICAgIHsicmlzY29zX3dpbXAiLCAgICAgICAgICAgICAiPz8/In0sCi0jZW5kaWYKICAgICAvKiB7InVuYnVmZmVyZWQiLCAgICAgICAgICAgICAgICAgICAiLXUifSwgKi8KICAgICAvKiB7InNraXBfZmlyc3QiLCAgICAgICAgICAgICAgICAgICAiLXgifSwgKi8KICAgICB7ImJ5dGVzX3dhcm5pbmciLCAgICAgICAgICAgIi1iIn0sCiAgICAgeyJxdWlldCIsICAgICAgICAgICAgICAgICAgICItcSJ9LAogICAgIHsiaGFzaF9yYW5kb21pemF0aW9uIiwgICAgICAiLVIifSwKKyAgICB7Imlzb2xhdGVkIiwgICAgICAgICAgICAgICAgIi1JIn0sCiAgICAgezB9CiB9OwogCkBAIC0xMzY3LDExICsxNDM4LDcgQEAKICAgICAic3lzLmZsYWdzIiwgICAgICAgIC8qIG5hbWUgKi8KICAgICBmbGFnc19fZG9jX18sICAgICAgIC8qIGRvYyAqLwogICAgIGZsYWdzX2ZpZWxkcywgICAgICAgLyogZmllbGRzICovCi0jaWZkZWYgUklTQ09TCiAgICAgMTMKLSNlbHNlCi0gICAgMTIKLSNlbmRpZgogfTsKIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMTM5NiwxNCArMTQ2MywxMiBAQAogICAgIFNldEZsYWcoUHlfTm9TaXRlRmxhZyk7CiAgICAgU2V0RmxhZyhQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWcpOwogICAgIFNldEZsYWcoUHlfVmVyYm9zZUZsYWcpOwotI2lmZGVmIFJJU0NPUwotICAgIFNldEZsYWcoUHlfUklTQ09TV2ltcEZsYWcpOwotI2VuZGlmCiAgICAgLyogU2V0RmxhZyhzYXdfdW5idWZmZXJlZF9mbGFnKTsgKi8KICAgICAvKiBTZXRGbGFnKHNraXBmaXJzdGxpbmUpOyAqLwogICAgIFNldEZsYWcoUHlfQnl0ZXNXYXJuaW5nRmxhZyk7CiAgICAgU2V0RmxhZyhQeV9RdWlldEZsYWcpOwogICAgIFNldEZsYWcoUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnKTsKKyAgICBTZXRGbGFnKFB5X0lzb2xhdGVkRmxhZyk7CiAjdW5kZWYgU2V0RmxhZwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKQEAgLTE0ODksNyArMTU1NCw3IEBACiAjZGVmaW5lIFNUUklGWShuYW1lKSBRVU9URShuYW1lKQogI2RlZmluZSBNQUpPUiBTVFJJRlkoUFlfTUFKT1JfVkVSU0lPTikKICNkZWZpbmUgTUlOT1IgU1RSSUZZKFBZX01JTk9SX1ZFUlNJT04pCi0jZGVmaW5lIFRBRyBOQU1FICItIiBNQUpPUiBNSU5PUjsKKyNkZWZpbmUgVEFHIE5BTUUgIi0iIE1BSk9SIE1JTk9SCiBjb25zdCBjaGFyICpfUHlTeXNfSW1wbENhY2hlVGFnID0gVEFHOwogI3VuZGVmIE5BTUUKICN1bmRlZiBRVU9URQpAQCAtMTU2NCwxOCArMTYyOSwzNCBAQAogUHlPYmplY3QgKgogX1B5U3lzX0luaXQodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKnYsICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOwotICAgIGNoYXIgKnM7CisgICAgUHlPYmplY3QgKm0sICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOworICAgIGludCByZXM7CiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzeXNtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN5c2RpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HKGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICBcCi0gICAgdiA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAodiAhPSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCBrZXksIHYpOyAgICAgICAgICBcCi0gICAgUHlfWERFQ1JFRih2KQorI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVyhrZXksIHZhbHVlKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKnYgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgXAorICAgICAgICBpZiAocmVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFNFVF9TWVNfRlJPTV9TVFJJTkcoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqdiA9ICh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICh2ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCBrZXksIHYpOyAgICAgICBcCisgICAgICAgIFB5X0RFQ1JFRih2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHJlcyA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAgICAgLyogQ2hlY2sgdGhhdCBzdGRpbiBpcyBub3QgYSBkaXJlY3RvcnkKICAgICBVc2luZyBzaGVsbCByZWRpcmVjdGlvbiwgeW91IGNhbiByZWRpcmVjdCBzdGRpbiB0byBhIGRpcmVjdG9yeSwKQEAgLTE1OTcsMTAgKzE2NzgsMTAgQEAKIAogICAgIC8qIHN0ZGluL3N0ZG91dC9zdGRlcnIgYXJlIG5vdyBzZXQgYnkgcHl0aG9ucnVuLmMgKi8KIAotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfX2Rpc3BsYXlob29rX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJkaXNwbGF5aG9vayIpKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiX19leGNlcHRob29rX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJleGNlcHRob29rIikpOworICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJfX2Rpc3BsYXlob29rX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJkaXNwbGF5aG9vayIpKTsKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygiX19leGNlcHRob29rX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJleGNlcHRob29rIikpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInZlcnNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldFZlcnNpb24oKSkpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImhleHZlcnNpb24iLApAQCAtMTYzNCwyOCArMTcxNSwyNCBAQAogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImludF9pbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19HZXRJbmZvKCkpOwogICAgIC8qIGluaXRpYWxpemUgaGFzaF9pbmZvICovCi0gICAgaWYgKEhhc2hfSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZIYXNoX0luZm9UeXBlLCAmaGFzaF9pbmZvX2Rlc2MpOworICAgIGlmIChIYXNoX0luZm9UeXBlLnRwX25hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJkhhc2hfSW5mb1R5cGUsICZoYXNoX2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImhhc2hfaW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfaGFzaF9pbmZvKCkpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoIm1heHVuaWNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKDB4MTBGRkZGKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnVpbHRpbl9tb2R1bGVfbmFtZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9idWlsdGluX21vZHVsZV9uYW1lcygpKTsKLSAgICB7Ci0gICAgICAgIC8qIEFzc3VtZXMgdGhhdCBsb25ncyBhcmUgYXQgbGVhc3QgMiBieXRlcyBsb25nLgotICAgICAgICAgICBTaG91bGQgYmUgc2FmZSEgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyBudW1iZXIgPSAxOwotICAgICAgICBjaGFyICp2YWx1ZTsKKyNpZiBQWV9CSUdfRU5ESUFOCisgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnl0ZW9yZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJiaWciKSk7CisjZWxzZQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ5dGVvcmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZygibGl0dGxlIikpOworI2VuZGlmCiAKLSAgICAgICAgcyA9IChjaGFyICopICZudW1iZXI7Ci0gICAgICAgIGlmIChzWzBdID09IDApCi0gICAgICAgICAgICB2YWx1ZSA9ICJiaWciOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9ICJsaXR0bGUiOwotICAgICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJieXRlb3JkZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHZhbHVlKSk7Ci0gICAgfQogI2lmZGVmIE1TX0NPUkVETEwKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJkbGxoYW5kbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Wb2lkUHRyKFB5V2luX0RMTGhNb2R1bGUpKTsKQEAgLTE2NjgsNDcgKzE3NDUsNTkgQEAKICNlbmRpZgogICAgIGlmICh3YXJub3B0aW9ucyA9PSBOVUxMKSB7CiAgICAgICAgIHdhcm5vcHRpb25zID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgaWYgKHdhcm5vcHRpb25zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X0lOQ1JFRih3YXJub3B0aW9ucyk7CiAgICAgfQotICAgIGlmICh3YXJub3B0aW9ucyAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJ3YXJub3B0aW9ucyIsIHdhcm5vcHRpb25zKTsKLSAgICB9CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIndhcm5vcHRpb25zIiwgd2Fybm9wdGlvbnMpOwogCi0gICAgdiA9IGdldF94b3B0aW9ucygpOwotICAgIGlmICh2ICE9IE5VTEwpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIl94b3B0aW9ucyIsIHYpOwotICAgIH0KKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygiX3hvcHRpb25zIiwgZ2V0X3hvcHRpb25zKCkpOwogCiAgICAgLyogdmVyc2lvbl9pbmZvICovCi0gICAgaWYgKFZlcnNpb25JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlZlcnNpb25JbmZvVHlwZSwgJnZlcnNpb25faW5mb19kZXNjKTsKKyAgICBpZiAoVmVyc2lvbkluZm9UeXBlLnRwX25hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlZlcnNpb25JbmZvVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJzaW9uX2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHZlcnNpb25faW5mbyA9IG1ha2VfdmVyc2lvbl9pbmZvKCk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygidmVyc2lvbl9pbmZvIiwgdmVyc2lvbl9pbmZvKTsKICAgICAvKiBwcmV2ZW50IHVzZXIgZnJvbSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzICovCiAgICAgVmVyc2lvbkluZm9UeXBlLnRwX2luaXQgPSBOVUxMOwogICAgIFZlcnNpb25JbmZvVHlwZS50cF9uZXcgPSBOVUxMOworICAgIHJlcyA9IFB5RGljdF9EZWxJdGVtU3RyaW5nKFZlcnNpb25JbmZvVHlwZS50cF9kaWN0LCAiX19uZXdfXyIpOworICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICBQeUVycl9DbGVhcigpOwogCiAgICAgLyogaW1wbGVtZW50YXRpb24gKi8KICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJpbXBsZW1lbnRhdGlvbiIsIG1ha2VfaW1wbF9pbmZvKHZlcnNpb25faW5mbykpOwogCiAgICAgLyogZmxhZ3MgKi8KLSAgICBpZiAoRmxhZ3NUeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmRmxhZ3NUeXBlLCAmZmxhZ3NfZGVzYyk7CisgICAgaWYgKEZsYWdzVHlwZS50cF9uYW1lID09IDApIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZGbGFnc1R5cGUsICZmbGFnc19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZmxhZ3MiLCBtYWtlX2ZsYWdzKCkpOwogICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KICAgICBGbGFnc1R5cGUudHBfaW5pdCA9IE5VTEw7CiAgICAgRmxhZ3NUeXBlLnRwX25ldyA9IE5VTEw7Ci0KKyAgICByZXMgPSBQeURpY3RfRGVsSXRlbVN0cmluZyhGbGFnc1R5cGUudHBfZGljdCwgIl9fbmV3X18iKTsKKyAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKIAogI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICAgICAvKiBnZXR3aW5kb3dzdmVyc2lvbiAqLwogICAgIGlmIChXaW5kb3dzVmVyc2lvblR5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZXaW5kb3dzVmVyc2lvblR5cGUsICZ3aW5kb3dzX3ZlcnNpb25fZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmV2luZG93c1ZlcnNpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd3NfdmVyc2lvbl9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBwcmV2ZW50IHVzZXIgZnJvbSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzICovCiAgICAgV2luZG93c1ZlcnNpb25UeXBlLnRwX2luaXQgPSBOVUxMOwogICAgIFdpbmRvd3NWZXJzaW9uVHlwZS50cF9uZXcgPSBOVUxMOworICAgIHJlcyA9IFB5RGljdF9EZWxJdGVtU3RyaW5nKFdpbmRvd3NWZXJzaW9uVHlwZS50cF9kaWN0LCAiX19uZXdfXyIpOworICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICBQeUVycl9DbGVhcigpOwogI2VuZGlmCiAKICAgICAvKiBmbG9hdCByZXByIHN0eWxlOiAwLjAzIChzaG9ydCkgdnMgMC4wMjk5OTk5OTk5OTk5OTk5OTkgKGxlZ2FjeSkgKi8KQEAgLTE3MjUsNiArMTgxNCw3IEBACiAjZW5kaWYKIAogI3VuZGVmIFNFVF9TWVNfRlJPTV9TVFJJTkcKKyN1bmRlZiBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gbTsKQEAgLTE3NjksNyArMTg1OSw3IEBACiAgICAgUHlPYmplY3QgKnY7CiAgICAgaWYgKCh2ID0gbWFrZXBhdGhvYmplY3QocGF0aCwgREVMSU0pKSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBjcmVhdGUgc3lzLnBhdGgiKTsKLSAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJwYXRoIiwgdikgIT0gMCkKKyAgICBpZiAoX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BhdGgsIHYpICE9IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGFzc2lnbiBzeXMucGF0aCIpOwogICAgIFB5X0RFQ1JFRih2KTsKIH0KQEAgLTE3ODgsMjIgKzE4NzgsNyBAQAogICAgIGlmIChhdiAhPSBOVUxMKSB7CiAgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0jaWZkZWYgX19WTVMKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2OwotCi0gICAgICAgICAgICAvKiBhcmd2WzBdIGlzIHRoZSBzY3JpcHQgcGF0aG5hbWUgaWYga25vd24gKi8KLSAgICAgICAgICAgIGlmIChpID09IDApIHsKLSAgICAgICAgICAgICAgICBjaGFyKiBmbiA9IGRlY2MkdHJhbnNsYXRlX3Ztcyhhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBpZiAoKGZuID09IChjaGFyICopMCkgfHwgZm4gPT0gKGNoYXIgKiktMSkKLSAgICAgICAgICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgZGVjYyR0cmFuc2xhdGVfdm1zKGFyZ3ZbMF0pKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhhcmd2W2ldKTsKLSNlbHNlCiAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoYXJndltpXSwgLTEpOwotI2VuZGlmCiAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGF2KTsKICAgICAgICAgICAgICAgICBhdiA9IE5VTEw7CkBAIC0xODM4LDcgKzE5MTMsNyBAQAogICAgIHdjaGFyX3QgZnVsbHBhdGhbTUFYX1BBVEhdOwogI2VuZGlmCiAKLSAgICBwYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7CisgICAgcGF0aCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wYXRoKTsKICAgICBpZiAocGF0aCA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5MzcsNyArMjAxMiw3IEBACiB2b2lkCiBQeVN5c19TZXRBcmd2KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKIHsKLSAgICBQeVN5c19TZXRBcmd2RXgoYXJnYywgYXJndiwgMSk7CisgICAgUHlTeXNfU2V0QXJndkV4KGFyZ2MsIGFyZ3YsIFB5X0lzb2xhdGVkRmxhZyA9PSAwKTsKIH0KIAogLyogUmVpbXBsZW1lbnRhdGlvbiBvZiBQeUZpbGVfV3JpdGVTdHJpbmcoKSBubyBjYWxsaW5nIGluZGlyZWN0bHkKQEAgLTE5NDgsNyArMjAyMyw2IEBACiB7CiAgICAgUHlPYmplY3QgKndyaXRlciA9IE5VTEwsICphcmdzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUih3cml0ZSk7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0yMDI1LDcgKzIwOTksNyBAQAogICovCiAKIHN0YXRpYyB2b2lkCi1zeXNfd3JpdGUoY2hhciAqbmFtZSwgRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKK3N5c193cml0ZShfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CkBAIC0yMDMzLDcgKzIxMDcsNyBAQAogICAgIGludCB3cml0dGVuOwogCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0gICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdChuYW1lKTsKKyAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKGtleSk7CiAgICAgd3JpdHRlbiA9IFB5T1NfdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZvcm1hdCwgdmEpOwogICAgIGlmIChzeXNfcHlmaWxlX3dyaXRlKGJ1ZmZlciwgZmlsZSkgIT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMjA1Myw3ICsyMTI3LDcgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgc3lzX3dyaXRlKCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c193cml0ZSgmUHlJZF9zdGRvdXQsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KIApAQCAtMjA2MywxOSArMjEzNywxOSBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfd3JpdGUoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX3dyaXRlKCZQeUlkX3N0ZGVyciwgc3RkZXJyLCBmb3JtYXQsIHZhKTsKICAgICB2YV9lbmQodmEpOwogfQogCiBzdGF0aWMgdm9pZAotc3lzX2Zvcm1hdChjaGFyICpuYW1lLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQorc3lzX2Zvcm1hdChfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlLCAqbWVzc2FnZTsKICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIGNoYXIgKnV0Zjg7CiAKICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKLSAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KG5hbWUpOworICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoa2V5KTsKICAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmEpOwogICAgIGlmIChtZXNzYWdlICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHN5c19weWZpbGVfd3JpdGVfdW5pY29kZShtZXNzYWdlLCBmaWxlKSAhPSAwKSB7CkBAIC0yMDk1LDcgKzIxNjksNyBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfZm9ybWF0KCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c19mb3JtYXQoJlB5SWRfc3Rkb3V0LCBzdGRvdXQsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CiAKQEAgLTIxMDUsNiArMjE3OSw2IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIHN5c19mb3JtYXQoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX2Zvcm1hdCgmUHlJZF9zdGRlcnIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWQuYyBiL1B5dGhvbi90aHJlYWQuYwppbmRleCBlNTVkMzQyLi5kMWNiMGU2IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkLmMKKysrIGIvUHl0aG9uL3RocmVhZC5jCkBAIC05MSwxMCArOTEsNiBAQAogI2luY2x1ZGUgInRocmVhZF9udC5oIgogI2VuZGlmCiAKLSNpZmRlZiBPUzJfVEhSRUFEUwotI2RlZmluZSBQWVRIUkVBRF9OQU1FICJvczIiCi0jaW5jbHVkZSAidGhyZWFkX29zMi5oIgotI2VuZGlmCiAKIC8qCiAjaWZkZWYgRk9PQkFSX1RIUkVBRFMKQEAgLTIwOSw3ICsyMDUsNyBAQAogICogc2VnZmF1bHRzLiAgTm93IHdlIGxvY2sgdGhlIHdob2xlIHJvdXRpbmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga2V5ICoKLWZpbmRfa2V5KGludCBrZXksIHZvaWQgKnZhbHVlKQorZmluZF9rZXkoaW50IHNldF92YWx1ZSwgaW50IGtleSwgdm9pZCAqdmFsdWUpCiB7CiAgICAgc3RydWN0IGtleSAqcCwgKnByZXZfcDsKICAgICBsb25nIGlkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwpAQCAtMjE5LDggKzIxNSwxMSBAQAogICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhrZXltdXRleCwgMSk7CiAgICAgcHJldl9wID0gTlVMTDsKICAgICBmb3IgKHAgPSBrZXloZWFkOyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwLT5pZCA9PSBpZCAmJiBwLT5rZXkgPT0ga2V5KQorICAgICAgICBpZiAocC0+aWQgPT0gaWQgJiYgcC0+a2V5ID09IGtleSkgeworICAgICAgICAgICAgaWYgKHNldF92YWx1ZSkKKyAgICAgICAgICAgICAgICBwLT52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICB9CiAgICAgICAgIC8qIFNhbml0eSBjaGVjay4gIFRoZXNlIHN0YXRlcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGJ1dCBpZgogICAgICAgICAgKiB0aGV5IGRvIHdlIG11c3QgYWJvcnQuICBPdGhlcndpc2Ugd2UnbGwgZW5kIHVwIHNwaW5uaW5nIGluCiAgICAgICAgICAqIGluIGEgdGlnaHQgbG9vcCB3aXRoIHRoZSBsb2NrIGhlbGQuICBBIHNpbWlsYXIgY2hlY2sgaXMgZG9uZQpAQCAtMjMxLDExICsyMzAsMTEgQEAKICAgICAgICAgaWYgKHAtPm5leHQgPT0ga2V5aGVhZCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInRscyBmaW5kX2tleTogY2lyY3VsYXIgbGlzdCghKSIpOwogICAgIH0KLSAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgIGlmICghc2V0X3ZhbHVlICYmIHZhbHVlID09IE5VTEwpIHsKICAgICAgICAgYXNzZXJ0KHAgPT0gTlVMTCk7CiAgICAgICAgIGdvdG8gRG9uZTsKICAgICB9Ci0gICAgcCA9IChzdHJ1Y3Qga2V5ICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5KSk7CisgICAgcCA9IChzdHJ1Y3Qga2V5ICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5KSk7CiAgICAgaWYgKHAgIT0gTlVMTCkgewogICAgICAgICBwLT5pZCA9IGlkOwogICAgICAgICBwLT5rZXkgPSBrZXk7CkBAIC0yNzQsNyArMjczLDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+a2V5ID09IGtleSkgewogICAgICAgICAgICAgKnEgPSBwLT5uZXh0OwotICAgICAgICAgICAgZnJlZSgodm9pZCAqKXApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXApOwogICAgICAgICAgICAgLyogTkIgVGhpcyBkb2VzICpub3QqIGZyZWUgcC0+dmFsdWUhICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMjgzLDE5ICsyODIsMTIgQEAKICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soa2V5bXV0ZXgpOwogfQogCi0vKiBDb25mdXNpbmc6ICBJZiB0aGUgY3VycmVudCB0aHJlYWQgaGFzIGFuIGFzc29jaWF0aW9uIGZvciBrZXksCi0gKiB2YWx1ZSBpcyBpZ25vcmVkLCBhbmQgMCBpcyByZXR1cm5lZC4gIEVsc2UgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGNyZWF0ZQotICogYW4gYXNzb2NpYXRpb24gb2Yga2V5IHRvIHZhbHVlIGZvciB0aGUgY3VycmVudCB0aHJlYWQuICAwIGlzIHJldHVybmVkCi0gKiBpZiB0aGF0IHN1Y2NlZWRzLCBidXQgLTEgaXMgcmV0dXJuZWQgaWYgdGhlcmUncyBub3QgZW5vdWdoIG1lbW9yeQotICogdG8gY3JlYXRlIHRoZSBhc3NvY2lhdGlvbi4gIHZhbHVlIG11c3Qgbm90IGJlIE5VTEwuCi0gKi8KIGludAogUHlUaHJlYWRfc2V0X2tleV92YWx1ZShpbnQga2V5LCB2b2lkICp2YWx1ZSkKIHsKICAgICBzdHJ1Y3Qga2V5ICpwOwogCi0gICAgYXNzZXJ0KHZhbHVlICE9IE5VTEwpOwotICAgIHAgPSBmaW5kX2tleShrZXksIHZhbHVlKTsKKyAgICBwID0gZmluZF9rZXkoMSwga2V5LCB2YWx1ZSk7CiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGVsc2UKQEAgLTMwOCw3ICszMDAsNyBAQAogdm9pZCAqCiBQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGludCBrZXkpCiB7Ci0gICAgc3RydWN0IGtleSAqcCA9IGZpbmRfa2V5KGtleSwgTlVMTCk7CisgICAgc3RydWN0IGtleSAqcCA9IGZpbmRfa2V5KDAsIGtleSwgTlVMTCk7CiAKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMyOCw3ICszMjAsNyBAQAogICAgIHdoaWxlICgocCA9ICpxKSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChwLT5rZXkgPT0ga2V5ICYmIHAtPmlkID09IGlkKSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNjEsNyArMzUzLDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+aWQgIT0gaWQpIHsKICAgICAgICAgICAgICpxID0gcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilwKTsKICAgICAgICAgICAgIC8qIE5CIFRoaXMgZG9lcyAqbm90KiBmcmVlIHAtPnZhbHVlISAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTQwMyw4ICszOTUsMTAgQEAKICAgICBpbnQgbGVuOwogI2VuZGlmCiAKLSAgICBpZiAoVGhyZWFkSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZUaHJlYWRJbmZvVHlwZSwgJnRocmVhZGluZm9fZGVzYyk7CisgICAgaWYgKFRocmVhZEluZm9UeXBlLnRwX25hbWUgPT0gMCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRocmVhZEluZm9UeXBlLCAmdGhyZWFkaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICB0aHJlYWRpbmZvID0gUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoJlRocmVhZEluZm9UeXBlKTsKICAgICBpZiAodGhyZWFkaW5mbyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9udC5oIGIvUHl0aG9uL3RocmVhZF9udC5oCmluZGV4IGIxNTdmYzUuLjg0NDUyY2QgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfbnQuaAorKysgYi9QeXRob24vdGhyZWFkX250LmgKQEAgLTM0LDcgKzM0LDcgQEAKIFBOUk1VVEVYCiBBbGxvY05vblJlY3Vyc2l2ZU11dGV4KCkKIHsKLSAgICBQTlJNVVRFWCBtID0gKFBOUk1VVEVYKW1hbGxvYyhzaXplb2YoTlJNVVRFWCkpOworICAgIFBOUk1VVEVYIG0gPSAoUE5STVVURVgpUHlNZW1fUmF3TWFsbG9jKHNpemVvZihOUk1VVEVYKSk7CiAgICAgaWYgKCFtKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlDT05EX0lOSVQoJm0tPmN2KSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBtLT5sb2NrZWQgPSAwOwogICAgIHJldHVybiBtOwogZmFpbDoKLSAgICBmcmVlKG0pOworICAgIFB5TWVtX1Jhd0ZyZWUobSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBpZiAobXV0ZXgpIHsKICAgICAgICAgUHlDT05EX0ZJTkkoJm11dGV4LT5jdik7CiAgICAgICAgIFB5TVVURVhfRklOSSgmbXV0ZXgtPmNzKTsKLSAgICAgICAgZnJlZShtdXRleCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobXV0ZXgpOwogICAgIH0KIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgcmVzdWx0ID0gUHlDT05EX1NJR05BTCgmbXV0ZXgtPmN2KTsKICAgICByZXN1bHQgJj0gUHlNVVRFWF9VTkxPQ0soJm11dGV4LT5jcyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKLX0gICAgCit9CiAKICNlbHNlIC8qIGlmICEgX1BZX1VTRV9DVl9MT0NLUyAqLwogCkBAIC0xMzAsNyArMTMwLDcgQEAKIERXT1JECiBFbnRlck5vblJlY3Vyc2l2ZU11dGV4KFBOUk1VVEVYIG11dGV4LCBEV09SRCBtaWxsaXNlY29uZHMpCiB7Ci0gICAgcmV0dXJuIFdhaXRGb3JTaW5nbGVPYmplY3QobXV0ZXgsIG1pbGxpc2Vjb25kcyk7CisgICAgcmV0dXJuIFdhaXRGb3JTaW5nbGVPYmplY3RFeChtdXRleCwgbWlsbGlzZWNvbmRzLCBGQUxTRSk7CiB9CiAKIEJPT0wKQEAgLTM4OSwyMCArMzg5LDExIEBACiAgICAgVGxzRnJlZShrZXkpOwogfQogCi0vKiBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gZW11bGF0ZSB0aGUgc3RyYW5nZSBzZW1hbnRpY3MgaW1wbGVtZW50ZWQgaW4gdGhyZWFkLmMsCi0gKiB3aGVyZSB0aGUgdmFsdWUgaXMgb25seSBzZXQgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGJlZm9yZS4KLSAqLwogaW50CiBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGludCBrZXksIHZvaWQgKnZhbHVlKQogewogICAgIEJPT0wgb2s7Ci0gICAgdm9pZCAqb2xkdmFsdWU7CiAKLSAgICBhc3NlcnQodmFsdWUgIT0gTlVMTCk7Ci0gICAgb2xkdmFsdWUgPSBUbHNHZXRWYWx1ZShrZXkpOwotICAgIGlmIChvbGR2YWx1ZSAhPSBOVUxMKQotICAgICAgICAvKiBpZ25vcmUgdmFsdWUgaWYgYWxyZWFkeSBzZXQgKi8KLSAgICAgICAgcmV0dXJuIDA7CiAgICAgb2sgPSBUbHNTZXRWYWx1ZShrZXksIHZhbHVlKTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX29zMi5oIGIvUHl0aG9uL3RocmVhZF9vczIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyNjRiNS4uMDAwMDAwMAotLS0gYS9QeXRob24vdGhyZWFkX29zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qIFRoaXMgY29kZSBpbXBsZW1lbnRlZCBieSBjdmFsZUBuZXRjb20uY29tICovCi0KLSNkZWZpbmUgSU5DTF9ET1NQUk9DRVNTCi0jZGVmaW5lIElOQ0xfRE9TU0VNQVBIT1JFUwotI2luY2x1ZGUgIm9zMi5oIgotI2luY2x1ZGUgImxpbWl0cy5oIgotCi0jaW5jbHVkZSAicHJvY2Vzcy5oIgotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvYnVpbHRpbi5oPgotI2luY2x1ZGUgPHN5cy9mbXV0ZXguaD4KLSNlbHNlCi1sb25nIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCk7Ci0jZW5kaWYKLQotLyogZGVmYXVsdCB0aHJlYWQgc3RhY2sgc2l6ZSBvZiA2NGtCICovCi0jaWYgIWRlZmluZWQoVEhSRUFEX1NUQUNLX1NJWkUpCi0jZGVmaW5lIFRIUkVBRF9TVEFDS19TSVpFICAgICAgIDB4MTAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIE9TMl9TVEFDS1NJWkUoeCkgICAgICAgICh4ID8geCA6IFRIUkVBRF9TVEFDS19TSVpFKQotCi0vKgotICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIEMgcGFja2FnZSwgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1QeVRocmVhZF9faW5pdF90aHJlYWQodm9pZCkKLXsKLX0KLQotLyoKLSAqIFRocmVhZCBzdXBwb3J0LgotICovCi1sb25nCi1QeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0gICAgaW50IHRocmVhZF9pZDsKLQotICAgIHRocmVhZF9pZCA9IF9iZWdpbnRocmVhZChmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT1MyX1NUQUNLU0laRShfcHl0aHJlYWRfc3RhY2tzaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcpOwotCi0gICAgaWYgKHRocmVhZF9pZCA9PSAtMSkgewotICAgICAgICBkcHJpbnRmKCgiX2JlZ2ludGhyZWFkIGZhaWxlZC4gcmV0dXJuICVsZFxuIiwgZXJybm8pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhyZWFkX2lkOwotfQotCi1sb25nCi1QeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgUFBJQiBwaWI7Ci0gICAgUFRJQiB0aWI7Ci0jZW5kaWYKLQotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHJldHVybiBfZ2V0dGlkKCk7Ci0jZWxzZQotICAgIERvc0dldEluZm9CbG9ja3MoJnRpYiwgJnBpYik7Ci0gICAgcmV0dXJuIHRpYi0+dGliX3B0aWIyLT50aWIyX3VsdGlkOwotI2VuZGlmCi19Ci0KLXZvaWQKLVB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGV4aXQoMCk7Ci0gICAgX2VuZHRocmVhZCgpOwotfQotCi0vKgotICogTG9jayBzdXBwb3J0LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB3aXRoIGFuIGV2ZW50IHNlbWFwaG9yZSBhbmQgY3JpdGljYWwKLSAqIHNlY3Rpb25zIHRvIG1ha2UgaXQgYmVoYXZlIG1vcmUgbGlrZSBhIHBvc2l4IG11dGV4IHRoYW4gaXRzIE9TLzIKLSAqIGNvdW50ZXJwYXJ0cy4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBvczJfbG9ja190IHsKLSAgICBpbnQgaXNfc2V0OwotICAgIEhFViBjaGFuZ2VkOwotfSAqdHlwZV9vczJfbG9jazsKLQotUHlUaHJlYWRfdHlwZV9sb2NrCi1QeVRocmVhZF9hbGxvY2F0ZV9sb2NrKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBfZm11dGV4ICpzZW0gPSBtYWxsb2Moc2l6ZW9mKF9mbXV0ZXgpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlbHhcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIChsb25nKXNlbSkpOwotICAgIGlmIChfZm11dGV4X2NyZWF0ZShzZW0sIDApKSB7Ci0gICAgICAgIGZyZWUoc2VtKTsKLSAgICAgICAgc2VtID0gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIChQeVRocmVhZF90eXBlX2xvY2spc2VtOwotI2Vsc2UKLSAgICBBUElSRVQgcmM7Ci0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3MyX2xvY2tfdCkpOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotICAgIGxvY2stPmlzX3NldCA9IDA7Ci0KLSAgICBEb3NDcmVhdGVFdmVudFNlbShOVUxMLCAmbG9jay0+Y2hhbmdlZCwgMCwgMCk7Ci0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgLT4gJXBcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIGxvY2stPmNoYW5nZWQpKTsKLQotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKWxvY2s7Ci0jZW5kaWYKLX0KLQotdm9pZAotUHlUaHJlYWRfZnJlZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBhTG9jaykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jaylhTG9jazsKLSNlbmRpZgotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLGFMb2NrKSk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChhTG9jaykgewotICAgICAgICBfZm11dGV4X2Nsb3NlKChfZm11dGV4ICopYUxvY2spOwotICAgICAgICBmcmVlKChfZm11dGV4ICopYUxvY2spOwotICAgIH0KLSNlbHNlCi0gICAgRG9zQ2xvc2VFdmVudFNlbShsb2NrLT5jaGFuZ2VkKTsKLSAgICBmcmVlKGFMb2NrKTsKLSNlbmRpZgotfQotCi0vKgotICogUmV0dXJuIDEgb24gc3VjY2VzcyBpZiB0aGUgbG9jayB3YXMgYWNxdWlyZWQKLSAqCi0gKiBhbmQgMCBpZiB0aGUgbG9jayB3YXMgbm90IGFjcXVpcmVkLgotICovCi1pbnQKLVB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2ssIGludCB3YWl0ZmxhZykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBpbnQgICBkb25lID0gMDsKLSAgICBVTE9ORyBjb3VudDsKLSAgICBQSUQgICBwaWQgPSAwOwotICAgIFRJRCAgIHRpZCA9IDA7Ci0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgYUxvY2ssCi0gICAgICAgICAgICAgd2FpdGZsYWcpKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgLyogYWx3YXlzIHN1Y2Nlc3NmdWwgaWYgdGhlIGxvY2sgZG9lc24ndCBleGlzdCAqLwotICAgIGlmIChhTG9jayAmJgotICAgICAgICBfZm11dGV4X3JlcXVlc3QoKF9mbXV0ZXggKilhTG9jaywgd2FpdGZsYWcgPyAwIDogX0ZNUl9OT1dBSVQpKQotICAgICAgICByZXR1cm4gMDsKLSNlbHNlCi0gICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgIC8qIGlmIHRoZSBsb2NrIGlzIGN1cnJlbnRseSBzZXQsIHdlIGhhdmUgdG8gd2FpdCBmb3IKLSAgICAgICAgICogdGhlIHN0YXRlIHRvIGNoYW5nZQotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGxvY2stPmlzX3NldCkgewotICAgICAgICAgICAgaWYgKCF3YWl0ZmxhZykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIERvc1dhaXRFdmVudFNlbShsb2NrLT5jaGFuZ2VkLCBTRU1fSU5ERUZJTklURV9XQUlUKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGVudGVyIGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgdHJ5IHRvIGdldCB0aGUgc2VtYXBob3JlLiAgSWYKLSAgICAgICAgICogaXQgaXMgc3RpbGwgbG9ja2VkLCB3ZSB3aWxsIHRyeSBhZ2Fpbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChEb3NFbnRlckNyaXRTZWMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmICghbG9jay0+aXNfc2V0KSB7Ci0gICAgICAgICAgICBsb2NrLT5pc19zZXQgPSAxOwotICAgICAgICAgICAgRG9zUmVzZXRFdmVudFNlbShsb2NrLT5jaGFuZ2VkLCAmY291bnQpOwotICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBEb3NFeGl0Q3JpdFNlYygpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX3JlbGVhc2VfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2spCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICBhTG9jaykpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoYUxvY2spCi0gICAgICAgIF9mbXV0ZXhfcmVsZWFzZSgoX2ZtdXRleCAqKWFMb2NrKTsKLSNlbHNlCi0gICAgaWYgKCFsb2NrLT5pc19zZXQpIHsKLSAgICAgICAgZHByaW50ZigoIiVsZDogQ291bGQgbm90IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgZXJyb3I6ICVsXG4iLAotICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgICAgIGFMb2NrLAotICAgICAgICAgICAgICAgICBHZXRMYXN0RXJyb3IoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKERvc0VudGVyQ3JpdFNlYygpKSB7Ci0gICAgICAgIGRwcmludGYoKCIlbGQ6IENvdWxkIG5vdCBQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGVycm9yOiAlbFxuIiwKLSAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgICAgICBhTG9jaywKLSAgICAgICAgICAgICAgICAgR2V0TGFzdEVycm9yKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvY2stPmlzX3NldCA9IDA7Ci0gICAgRG9zUG9zdEV2ZW50U2VtKGxvY2stPmNoYW5nZWQpOwotCi0gICAgRG9zRXhpdENyaXRTZWMoKTsKLSNlbmRpZgotfQotCi0vKiBtaW5pbXVtL21heGltdW0gdGhyZWFkIHN0YWNrIHNpemVzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBUSFJFQURfTUlOX1NUQUNLU0laRSAgICAweDgwMDAgICAgICAgICAgLyogMzJrQiAqLwotI2RlZmluZSBUSFJFQURfTUFYX1NUQUNLU0laRSAgICAweDIwMDAwMDAgICAgICAgLyogMzJNQiAqLwotCi0vKiBzZXQgdGhlIHRocmVhZCBzdGFjayBzaXplLgotICogUmV0dXJuIDAgaWYgc2l6ZSBpcyB2YWxpZCwgLTEgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50Ci1fcHl0aHJlYWRfb3MyX3NldF9zdGFja3NpemUoc2l6ZV90IHNpemUpCi17Ci0gICAgLyogc2V0IHRvIGRlZmF1bHQgKi8KLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIF9weXRocmVhZF9zdGFja3NpemUgPSAwOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiB2YWxpZCByYW5nZT8gKi8KLSAgICBpZiAoc2l6ZSA+PSBUSFJFQURfTUlOX1NUQUNLU0laRSAmJiBzaXplIDwgVEhSRUFEX01BWF9TVEFDS1NJWkUpIHsKLSAgICAgICAgX3B5dGhyZWFkX3N0YWNrc2l6ZSA9IHNpemU7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotI2RlZmluZSBUSFJFQURfU0VUX1NUQUNLU0laRSh4KSBfcHl0aHJlYWRfb3MyX3NldF9zdGFja3NpemUoeCkKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfcHRoLmggYi9QeXRob24vdGhyZWFkX3B0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzA0MjY2Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi90aHJlYWRfcHRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotCi0vKiBHTlUgcHRoIHRocmVhZHMgaW50ZXJmYWNlCi0gICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcHRoCi0gICAyMDAwLTA1LTAzIEFuZHkgRHVzdG1hbiA8YW5keUBkdXN0bWFuLm5ldD4KLQotICAgQWRhcHRlZCBmcm9tIFBvc2l4IHRocmVhZHMgaW50ZXJmYWNlCi0gICAxMiBNYXkgMTk5NyAtLSBkYXZpZCBhcm5vbGQgPGRhdmlkYUBwb2JveC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHB0aC5oPgotCi0vKiBBIHB0aCBtdXRleCBpc24ndCBzdWZmaWNpZW50IHRvIG1vZGVsIHRoZSBQeXRob24gbG9jayB0eXBlCi0gKiBiZWNhdXNlIHB0aCBtdXRleGVzIGNhbiBiZSBhY3F1aXJlZCBtdWx0aXBsZSB0aW1lcyBieSB0aGUKLSAqIHNhbWUgdGhyZWFkLgotICoKLSAqIFRoZSBwdGhfbG9jayBzdHJ1Y3QgaW1wbGVtZW50cyBhIFB5dGhvbiBsb2NrIGFzIGEgImxvY2tlZD8iIGJpdAotICogYW5kIGEgPGNvbmRpdGlvbiwgbXV0ZXg+IHBhaXIuICBJbiBnZW5lcmFsLCBpZiB0aGUgYml0IGNhbiBiZSBhY3F1aXJlZAotICogaW5zdGFudGx5LCBpdCBpcywgZWxzZSB0aGUgcGFpciBpcyB1c2VkIHRvIGJsb2NrIHRoZSB0aHJlYWQgdW50aWwgdGhlCi0gKiBiaXQgaXMgY2xlYXJlZC4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAgICAgICAgICAgICBsb2NrZWQ7IC8qIDA9dW5sb2NrZWQsIDE9bG9ja2VkICovCi0gICAgLyogYSA8Y29uZCwgbXV0ZXg+IHBhaXIgdG8gaGFuZGxlIGFuIGFjcXVpcmUgb2YgYSBsb2NrZWQgbG9jayAqLwotICAgIHB0aF9jb25kX3QgICBsb2NrX3JlbGVhc2VkOwotICAgIHB0aF9tdXRleF90ICBtdXQ7Ci19IHB0aF9sb2NrOwotCi0jZGVmaW5lIENIRUNLX1NUQVRVUyhuYW1lKSAgaWYgKHN0YXR1cyA9PSAtMSkgeyBwcmludGYoIiVkICIsIHN0YXR1cyk7IHBlcnJvcihuYW1lKTsgZXJyb3IgPSAxOyB9Ci0KLXB0aF9hdHRyX3QgUHlUaHJlYWRfYXR0cjsKLQotLyoKLSAqIEluaXRpYWxpemF0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIFB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQotewotICAgIHB0aF9pbml0KCk7Ci0gICAgUHlUaHJlYWRfYXR0ciA9IHB0aF9hdHRyX25ldygpOwotICAgIHB0aF9hdHRyX3NldChQeVRocmVhZF9hdHRyLCBQVEhfQVRUUl9TVEFDS19TSVpFLCAxPDwxOCk7Ci0gICAgcHRoX2F0dHJfc2V0KFB5VGhyZWFkX2F0dHIsIFBUSF9BVFRSX0pPSU5BQkxFLCBGQUxTRSk7Ci19Ci0KLS8qCi0gKiBUaHJlYWQgc3VwcG9ydC4KLSAqLwotCi0KLWxvbmcgUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQotewotICAgIHB0aF90IHRoOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICB0aCA9IHB0aF9zcGF3bihQeVRocmVhZF9hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCogKCopKHZvaWQgKikpZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIHJldHVybiB0aDsKLX0KLQotbG9uZyBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpCi17Ci0gICAgdm9sYXRpbGUgcHRoX3QgdGhyZWFkaWQ7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLSAgICB0aHJlYWRpZCA9IHB0aF9zZWxmKCk7Ci0gICAgcmV0dXJuIChsb25nKSB0aHJlYWRpZDsKLX0KLQotdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgfQotfQotCi0vKgotICogTG9jayBzdXBwb3J0LgotICovCi1QeVRocmVhZF90eXBlX2xvY2sgUHlUaHJlYWRfYWxsb2NhdGVfbG9jayh2b2lkKQotewotICAgIHB0aF9sb2NrICpsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICBsb2NrID0gKHB0aF9sb2NrICopIG1hbGxvYyhzaXplb2YocHRoX2xvY2spKTsKLSAgICBtZW1zZXQoKHZvaWQgKilsb2NrLCAnXDAnLCBzaXplb2YocHRoX2xvY2spKTsKLSAgICBpZiAobG9jaykgewotICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfaW5pdCgmbG9jay0+bXV0KTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfaW5pdCIpOwotICAgICAgICBzdGF0dXMgPSBwdGhfY29uZF9pbml0KCZsb2NrLT5sb2NrX3JlbGVhc2VkKTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfY29uZF9pbml0Iik7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZnJlZSgodm9pZCAqKWxvY2spOwotICAgICAgICAgICAgbG9jayA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlcFxuIiwgbG9jaykpOwotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKSBsb2NrOwotfQotCi12b2lkIFB5VGhyZWFkX2ZyZWVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaykKLXsKLSAgICBwdGhfbG9jayAqdGhlbG9jayA9IChwdGhfbG9jayAqKWxvY2s7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBjYWxsZWRcbiIsIGxvY2spKTsKLQotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKLX0KLQotaW50IFB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaywgaW50IHdhaXRmbGFnKQotewotICAgIGludCBzdWNjZXNzOwotICAgIHB0aF9sb2NrICp0aGVsb2NrID0gKHB0aF9sb2NrICopbG9jazsKLSAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLCBsb2NrLCB3YWl0ZmxhZykpOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoJnRoZWxvY2stPm11dCwgIXdhaXRmbGFnLCBOVUxMKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzFdIik7Ci0gICAgc3VjY2VzcyA9IHRoZWxvY2stPmxvY2tlZCA9PSAwOwotICAgIGlmIChzdWNjZXNzKSB0aGVsb2NrLT5sb2NrZWQgPSAxOwotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9yZWxlYXNlKCAmdGhlbG9jay0+bXV0ICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfcmVsZWFzZVsxXSIpOwotCi0gICAgaWYgKCAhc3VjY2VzcyAmJiB3YWl0ZmxhZyApIHsKLSAgICAgICAgLyogY29udGludWUgdHJ5aW5nIHVudGlsIHdlIGdldCB0aGUgbG9jayAqLwotCi0gICAgICAgIC8qIG11dCBtdXN0IGJlIGxvY2tlZCBieSBtZSAtLSBwYXJ0IG9mIHRoZSBjb25kaXRpb24KLSAgICAgICAgICogcHJvdG9jb2wgKi8KLSAgICAgICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoICZ0aGVsb2NrLT5tdXQsICF3YWl0ZmxhZywgTlVMTCApOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzJdIik7Ci0gICAgICAgIHdoaWxlICggdGhlbG9jay0+bG9ja2VkICkgewotICAgICAgICAgICAgc3RhdHVzID0gcHRoX2NvbmRfYXdhaXQoJnRoZWxvY2stPmxvY2tfcmVsZWFzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhlbG9jay0+bXV0LCBOVUxMKTsKLSAgICAgICAgICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfYXdhaXQiKTsKLSAgICAgICAgfQotICAgICAgICB0aGVsb2NrLT5sb2NrZWQgPSAxOwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfcmVsZWFzZSggJnRoZWxvY2stPm11dCApOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzJdIik7Ci0gICAgICAgIHN1Y2Nlc3MgPSAxOwotICAgIH0KLSAgICBpZiAoZXJyb3IpIHN1Y2Nlc3MgPSAwOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSAtPiAlZFxuIiwgbG9jaywgd2FpdGZsYWcsIHN1Y2Nlc3MpKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotdm9pZCBQeVRocmVhZF9yZWxlYXNlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2spCi17Ci0gICAgcHRoX2xvY2sgKnRoZWxvY2sgPSAocHRoX2xvY2sgKilsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGNhbGxlZFxuIiwgbG9jaykpOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoICZ0aGVsb2NrLT5tdXQsIDAsIE5VTEwgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzNdIik7Ci0KLSAgICB0aGVsb2NrLT5sb2NrZWQgPSAwOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X3JlbGVhc2UoICZ0aGVsb2NrLT5tdXQgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzNdIik7Ci0KLSAgICAvKiB3YWtlIHVwIHNvbWVvbmUgKGFueW9uZSwgaWYgYW55KSB3YWl0aW5nIG9uIHRoZSBsb2NrICovCi0gICAgc3RhdHVzID0gcHRoX2NvbmRfbm90aWZ5KCAmdGhlbG9jay0+bG9ja19yZWxlYXNlZCwgMCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfbm90aWZ5Iik7Ci19CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaCBiL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCmluZGV4IGU5MGFlN2UuLmQ5ZjdjNzYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCisrKyBiL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCkBAIC0yODIsMTQgKzI4MiwxNCBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiAKLSAgICBsb2NrID0gKHNlbV90ICopbWFsbG9jKHNpemVvZihzZW1fdCkpOworICAgIGxvY2sgPSAoc2VtX3QgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHNlbV90KSk7CiAKICAgICBpZiAobG9jaykgewogICAgICAgICBzdGF0dXMgPSBzZW1faW5pdChsb2NrLDAsMSk7CiAgICAgICAgIENIRUNLX1NUQVRVUygic2VtX2luaXQiKTsKIAogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilsb2NrKTsKICAgICAgICAgICAgIGxvY2sgPSBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgc3RhdHVzID0gc2VtX2Rlc3Ryb3kodGhlbG9jayk7CiAgICAgQ0hFQ0tfU1RBVFVTKCJzZW1fZGVzdHJveSIpOwogCi0gICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOworICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKil0aGVsb2NrKTsKIH0KIAogLyoKQEAgLTQxMCw3ICs0MTAsNyBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiAKLSAgICBsb2NrID0gKHB0aHJlYWRfbG9jayAqKSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfbG9jaykpOworICAgIGxvY2sgPSAocHRocmVhZF9sb2NrICopIFB5TWVtX1Jhd01hbGxvYyhzaXplb2YocHRocmVhZF9sb2NrKSk7CiAgICAgaWYgKGxvY2spIHsKICAgICAgICAgbWVtc2V0KCh2b2lkICopbG9jaywgJ1wwJywgc2l6ZW9mKHB0aHJlYWRfbG9jaykpOwogICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOwpAQCAtNDMwLDcgKzQzMCw3IEBACiAgICAgICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9jb25kX2luaXQiKTsKIAogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilsb2NrKTsKICAgICAgICAgICAgIGxvY2sgPSAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRleF9kZXN0cm95KCAmdGhlbG9jay0+bXV0ICk7CiAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhyZWFkX211dGV4X2Rlc3Ryb3kiKTsKIAotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKKyAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopdGhlbG9jayk7CiB9CiAKIFB5TG9ja1N0YXR1cwpAQCAtNjI3LDkgKzYyNyw2IEBACiBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGludCBrZXksIHZvaWQgKnZhbHVlKQogewogICAgIGludCBmYWlsOwotICAgIHZvaWQgKm9sZFZhbHVlID0gcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpOwotICAgIGlmIChvbGRWYWx1ZSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKICAgICBmYWlsID0gcHRocmVhZF9zZXRzcGVjaWZpYyhrZXksIHZhbHVlKTsKICAgICByZXR1cm4gZmFpbCA/IC0xIDogMDsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi90cmFjZWJhY2suYyBiL1B5dGhvbi90cmFjZWJhY2suYwppbmRleCA3NDA3NWM5Li4yZWNlMTkyIDEwMDY0NAotLS0gYS9QeXRob24vdHJhY2ViYWNrLmMKKysrIGIvUHl0aG9uL3RyYWNlYmFjay5jCkBAIC0xMyw3ICsxMyw3IEBACiAKICNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKFB5VHJhY2ViYWNrT2JqZWN0LCB4KQogCi0jZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpCisjZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgKGludClzdHJsZW4oc3RyKSkKICNkZWZpbmUgTUFYX1NUUklOR19MRU5HVEggNTAwCiAjZGVmaW5lIE1BWF9GUkFNRV9ERVBUSCAxMDAKICNkZWZpbmUgTUFYX05USFJFQURTIDEwMApAQCAtMjEsNiArMjEsMTEgQEAKIC8qIEZ1bmN0aW9uIGZyb20gUGFyc2VyL3Rva2VuaXplci5jICovCiBleHRlcm4gY2hhciAqIFB5VG9rZW5pemVyX0ZpbmRFbmNvZGluZ0ZpbGVuYW1lKGludCwgUHlPYmplY3QgKik7CiAKK19QeV9JREVOVElGSUVSKFRleHRJT1dyYXBwZXIpOworX1B5X0lERU5USUZJRVIoY2xvc2UpOworX1B5X0lERU5USUZJRVIob3Blbik7CitfUHlfSURFTlRJRklFUihwYXRoKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIHRiX2RpcihQeVRyYWNlYmFja09iamVjdCAqc2VsZikKIHsKQEAgLTE1Miw3ICsxNTcsNiBAQAogICAgIGNvbnN0IGNoYXIqIGZpbGVwYXRoOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0KiByZXN1bHQ7Ci0gICAgX1B5X0lERU5USUZJRVIob3Blbik7CiAKICAgICBmaWxlYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKICAgICBpZiAoZmlsZWJ5dGVzID09IE5VTEwpIHsKQEAgLTE2OSw3ICsxNzMsNyBAQAogICAgICAgICB0YWlsKys7CiAgICAgdGFpbGxlbiA9IHN0cmxlbih0YWlsKTsKIAotICAgIHN5c3BhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKKyAgICBzeXNwYXRoID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BhdGgpOwogICAgIGlmIChzeXNwYXRoID09IE5VTEwgfHwgIVB5TGlzdF9DaGVjayhzeXNwYXRoKSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBucGF0aCA9IFB5TGlzdF9TaXplKHN5c3BhdGgpOwpAQCAtMjMyLDkgKzIzNiw2IEBACiAgICAgY2hhciBidWZbTUFYUEFUSExFTisxXTsKICAgICBpbnQga2luZDsKICAgICB2b2lkICpkYXRhOwotICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKLSAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKLSAgICBfUHlfSURFTlRJRklFUihUZXh0SU9XcmFwcGVyKTsKIAogICAgIC8qIG9wZW4gdGhlIGZpbGUgKi8KICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKQEAgLTI0NiwxMCArMjQ3LDEyIEBACiAgICAgYmluYXJ5ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChpbywgJlB5SWRfb3BlbiwgIk9zIiwgZmlsZW5hbWUsICJyYiIpOwogCiAgICAgaWYgKGJpbmFyeSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKICAgICAgICAgYmluYXJ5ID0gX1B5X0ZpbmRTb3VyY2VGaWxlKGZpbGVuYW1lLCBidWYsIHNpemVvZihidWYpLCBpbyk7CiAgICAgICAgIGlmIChiaW5hcnkgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGlvKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjEsNiArMjY0LDggQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGZvdW5kX2VuY29kaW5nID0gUHlUb2tlbml6ZXJfRmluZEVuY29kaW5nRmlsZW5hbWUoZmQsIGZpbGVuYW1lKTsKKyAgICBpZiAoZm91bmRfZW5jb2RpbmcgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICBlbmNvZGluZyA9IChmb3VuZF9lbmNvZGluZyAhPSBOVUxMKSA/IGZvdW5kX2VuY29kaW5nIDogInV0Zi04IjsKICAgICAvKiBSZXNldCBwb3NpdGlvbiAqLwogICAgIGlmIChsc2VlayhmZCwgMCwgU0VFS19TRVQpID09IChvZmZfdCktMSkgewpAQCAtNDY5LDEzICs0NzQsMTMgQEAKICAgICB3cml0ZShmZCwgYnVmZmVyLCBsZW4pOwogfQogCi0vKiBGb3JtYXQgYW4gaW50ZWdlciBpbiByYW5nZSBbMDsgMHhmZmZmZmZmZl0gdG8gaGV4ZGVjaW1hbCBvZiAnd2lkdGgnIGRpZ2l0cywKKy8qIEZvcm1hdCBhbiBpbnRlZ2VyIGluIHJhbmdlIFswOyAweGZmZmZmZmZmXSB0byBoZXhhZGVjaW1hbCBvZiAnd2lkdGgnIGRpZ2l0cywKICAgIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBmaWxlIGZkLgogCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHNpZ25hbCBzYWZlLiAqLwogCiBzdGF0aWMgdm9pZAotZHVtcF9oZXhhZGVjaW1hbChpbnQgd2lkdGgsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBmZCkKK2R1bXBfaGV4YWRlY2ltYWwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgd2lkdGgpCiB7CiAgICAgaW50IGxlbjsKICAgICBjaGFyIGJ1ZmZlcltzaXplb2YodW5zaWduZWQgbG9uZykgKiAyICsgMV07CkBAIC01NDIsMTUgKzU0NywxNSBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhmZikgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxceCIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCgyLCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhmZmZmKSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFx1Iik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDQsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgNCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFxVIik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDgsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgOCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHRydW5jYXRlZCkKQEAgLTYwMSw3ICs2MDYsNyBAQAogICAgIHVuc2lnbmVkIGludCBkZXB0aDsKIAogICAgIGlmICh3cml0ZV9oZWFkZXIpCi0gICAgICAgIFBVVFMoZmQsICJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CisgICAgICAgIFBVVFMoZmQsICJTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6XG4iKTsKIAogICAgIGZyYW1lID0gX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUodHN0YXRlKTsKICAgICBpZiAoZnJhbWUgPT0gTlVMTCkKQEAgLTYzOSw4ICs2NDQsOCBAQAogICAgICAgICBQVVRTKGZkLCAiQ3VycmVudCB0aHJlYWQgMHgiKTsKICAgICBlbHNlCiAgICAgICAgIFBVVFMoZmQsICJUaHJlYWQgMHgiKTsKLSAgICBkdW1wX2hleGFkZWNpbWFsKHNpemVvZihsb25nKSoyLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgZmQpOwotICAgIFBVVFMoZmQsICI6XG4iKTsKKyAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgc2l6ZW9mKGxvbmcpKjIpOworICAgIFBVVFMoZmQsICIgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CiB9CiAKIGNvbnN0IGNoYXIqCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggMzg3YmU5OC4uZjM5ODY2YyAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw0ICsxLDQgQEAKLVRoaXMgaXMgUHl0aG9uIHZlcnNpb24gMy4zLjUKK1RoaXMgaXMgUHl0aG9uIHZlcnNpb24gMy40LjEKID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLApAQCAtNTIsOSArNTIsOSBAQAogLS0tLS0tLS0tLQogCiBXZSB0cnkgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGNoYW5nZXMgaW4gdGhlICJXaGF0J3MgTmV3IGluCi1QeXRob24gMy4zIiBkb2N1bWVudCwgZm91bmQgYXQKK1B5dGhvbiAzLjQiIGRvY3VtZW50LCBmb3VuZCBhdAogCi0gICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvd2hhdHNuZXcvMy4zLmh0bWwKKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC93aGF0c25ldy8zLjQuaHRtbAogCiBGb3IgYSBtb3JlIGRldGFpbGVkIGNoYW5nZSBsb2csIHJlYWQgTWlzYy9ORVdTICh0aG91Z2ggdGhpcyBmaWxlLCB0b28sIGlzCiBpbmNvbXBsZXRlLCBhbmQgYWxzbyBkb2Vzbid0IGxpc3QgYW55dGhpbmcgbWVyZ2VkIGluIGZyb20gdGhlIDIuNyByZWxlYXNlIHVuZGVyCkBAIC02Nyw5ICs2Nyw5IEBACiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKLURvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAzLjMgaXMgb25saW5lLCB1cGRhdGVkIGRhaWx5OgorRG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDMuNCBpcyBvbmxpbmUsIHVwZGF0ZWQgZGFpbHk6CiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy8KKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC8KIAogSXQgY2FuIGFsc28gYmUgZG93bmxvYWRlZCBpbiBtYW55IGZvcm1hdHMgZm9yIGZhc3RlciBhY2Nlc3MuICBUaGUgZG9jdW1lbnRhdGlvbgogaXMgZG93bmxvYWRhYmxlIGluIEhUTUwsIFBERiwgYW5kIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0czsgdGhlIGxhdHRlciB2ZXJzaW9uCkBAIC05NCw3ICs5NCw3IEBACiBBIHNvdXJjZS10by1zb3VyY2UgdHJhbnNsYXRpb24gdG9vbCwgIjJ0bzMiLCBjYW4gdGFrZSBjYXJlIG9mIHRoZSBtdW5kYW5lIHRhc2sKIG9mIGNvbnZlcnRpbmcgbGFyZ2UgYW1vdW50cyBvZiBzb3VyY2UgY29kZS4gIEl0IGlzIG5vdCBhIGNvbXBsZXRlIHNvbHV0aW9uIGJ1dAogaXMgY29tcGxlbWVudGVkIGJ5IHRoZSBkZXByZWNhdGlvbiB3YXJuaW5ncyBpbiAyLjYuICBTZWUKLWh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zL2xpYnJhcnkvMnRvMy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgoraHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvbGlicmFyeS8ydG8zLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAogVGVzdGluZwpAQCAtMTMyLDcgKzEzMiw3IEBACiBJbnN0YWxsIHRoYXQgdmVyc2lvbiB1c2luZyAibWFrZSBpbnN0YWxsIi4gIEluc3RhbGwgYWxsIG90aGVyIHZlcnNpb25zIHVzaW5nCiAibWFrZSBhbHRpbnN0YWxsIi4KIAotRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgUHl0aG9uIDIuNiwgMi43IGFuZCAzLjMgd2l0aCAyLjcgYmVpbmcgdGhlCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi42LCAyLjcgYW5kIDMuNCB3aXRoIDIuNyBiZWluZyB0aGUKIHByaW1hcnkgdmVyc2lvbiwgeW91IHdvdWxkIGV4ZWN1dGUgIm1ha2UgaW5zdGFsbCIgaW4geW91ciAyLjcgYnVpbGQgZGlyZWN0b3J5CiBhbmQgIm1ha2UgYWx0aW5zdGFsbCIgaW4gdGhlIG90aGVycy4KIApAQCAtMTY4LDcgKzE2OCw3IEBACiBSZWxlYXNlIFNjaGVkdWxlCiAtLS0tLS0tLS0tLS0tLS0tCiAKLVNlZSBQRVAgMzk4IGZvciByZWxlYXNlIGRldGFpbHM6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDM5OC8KK1NlZSBQRVAgNDI5IGZvciByZWxlYXNlIGRldGFpbHM6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDQyOS8KIAogCiBDb3B5cmlnaHQgYW5kIExpY2Vuc2UgSW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdCBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdAppbmRleCBkMmZmMjU1Li5hY2Q0NTRlIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CkBAIC00LDE4ICs0LDI1IEBACiBjYWxsICJUb29sc1xidWlsZGJvdFxleHRlcm5hbC1jb21tb24uYmF0IgogY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4ODZfYW1kNjQKIAotaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRjbDg1Zy5kbGwgKAotICAgIGNkIHRjbC04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgaW5zdGFsbAoraWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRjbDg2dGcuZGxsICgKKyAgICBjZCB0Y2wtOC42LjEuMFx3aW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPXN5bWJvbHMgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gY29yZSBzaGVsbCBkbGxzCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1zeW1ib2xzIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGluc3RhbGwtYmluYXJpZXMgaW5zdGFsbC1saWJyYXJpZXMKICAgICBjZCAuLlwuLgogKQogCi1pZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGs4NWcuZGxsICgKLSAgICBjZCB0ay04LjUuMTEuMFx3aW4gICAgCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBjbGVhbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBpbnN0YWxsCitpZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGs4NnRnLmRsbCAoCisgICAgY2QgdGstOC42LjEuMFx3aW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPXN5bWJvbHMgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGNsZWFuCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1zeW1ib2xzIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBhbGwKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPXN5bWJvbHMgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGluc3RhbGwtYmluYXJpZXMgaW5zdGFsbC1saWJyYXJpZXMKICAgICBjZCAuLlwuLgogKQogCitpZiBub3QgZXhpc3QgdGNsdGs2NFxsaWJcdGl4OC40LjNcdGl4ODRnLmRsbCAoCisgICAgY2QgdGl4LTguNC4zLjRcd2luCisgICAgbm1ha2UgLWYgcHl0aG9uLm1hayBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgVENMX0RJUj0uLlwuLlx0Y2wtOC42LjEuMCBUS19ESVI9Li5cLi5cdGstOC42LjEuMCBJTlNUQUxMX0RJUj0uLlwuLlx0Y2x0azY0IGNsZWFuCisgICAgbm1ha2UgLWYgcHl0aG9uLm1hayBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgVENMX0RJUj0uLlwuLlx0Y2wtOC42LjEuMCBUS19ESVI9Li5cLi5cdGstOC42LjEuMCBJTlNUQUxMX0RJUj0uLlwuLlx0Y2x0azY0IGFsbAorICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgREVCVUc9MSBNQUNISU5FPUFNRDY0IFRDTF9ESVI9Li5cLi5cdGNsLTguNi4xLjAgVEtfRElSPS4uXC4uXHRrLTguNi4xLjAgSU5TVEFMTF9ESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCisgICAgY2QgLi5cLi4KKykKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CmluZGV4IGM2Mjc4YjIuLmM5ZGI1NDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdApAQCAtNywxNSArNywxMiBAQAogQHJlbSBpZiBleGlzdCBiemlwMi0xLjAuNiByZCAvcy9xIGJ6aXAyLTEuMC42CiBAcmVtIGlmIGV4aXN0IHRjbHRrIHJkIC9zL3EgdGNsdGsKIEByZW0gaWYgZXhpc3QgdGNsdGs2NCByZCAvcy9xIHRjbHRrNjQKLUByZW0gaWYgZXhpc3QgdGNsOC40LjEyIHJkIC9zL3EgdGNsOC40LjEyCi1AcmVtIGlmIGV4aXN0IHRjbDguNC4xNiByZCAvcy9xIHRjbDguNC4xNgotQHJlbSBpZiBleGlzdCB0Y2wtOC40LjE4LjEgcmQgL3MvcSB0Y2wtOC40LjE4LjEKLUByZW0gaWYgZXhpc3QgdGs4LjQuMTIgcmQgL3MvcSB0azguNC4xMgotQHJlbSBpZiBleGlzdCB0azguNC4xNiByZCAvcy9xIHRrOC40LjE2Ci1AcmVtIGlmIGV4aXN0IHRrLTguNC4xOC4xIHJkIC9zL3EgdGstOC40LjE4LjEKK0ByZW0gaWYgZXhpc3QgdGNsLTguNi4xLjAgcmQgL3MvcSB0Y2wtOC42LjEuMAorQHJlbSBpZiBleGlzdCB0ay04LjYuMS4wIHJkIC9zL3EgdGstOC42LjEuMAorQHJlbSBpZiBleGlzdCB0aXgtOC40LjMuNCByZCAvcy9xIHRpeC04LjQuMy40CiBAcmVtIGlmIGV4aXN0IGRiLTQuNC4yMCByZCAvcy9xIGRiLTQuNC4yMAotQHJlbSBpZiBleGlzdCBvcGVuc3NsLTEuMC4xZSByZCAvcy9xIG9wZW5zc2wtMS4wLjFlCi1AcmVtIGlmIGV4aXN0IHNxbGl0ZS0zLjcuMTIgcmQgL3MvcSBzcWxpdGUtMy43LjEyICAgIAorQHJlbSBpZiBleGlzdCBvcGVuc3NsLTEuMC4xaSByZCAvcy9xIG9wZW5zc2wtMS4wLjFpCitAcmVtIGlmIGV4aXN0IHNxbGl0ZS0zLjcuMTIgcmQgL3MvcSBzcWxpdGUtMy43LjEyCiAKIEByZW0gYnppcAogaWYgbm90IGV4aXN0IGJ6aXAyLTEuMC42ICgKQEAgLTI0LDI1ICsyMSwyNyBAQAogKQogCiBAcmVtIE9wZW5TU0wKLWlmIG5vdCBleGlzdCBvcGVuc3NsLTEuMC4xZSAoCi0gICAgcmQgL3MvcSBvcGVuc3NsLTEuMC4xZAotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL29wZW5zc2wtMS4wLjFlCitpZiBub3QgZXhpc3Qgb3BlbnNzbC0xLjAuMWkgKAorICAgIHJkIC9zL3Egb3BlbnNzbC0xLjAuMWgKKyAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9vcGVuc3NsLTEuMC4xaQogKQogCiBAcmVtIHRjbC90awotaWYgbm90IGV4aXN0IHRjbC04LjUuMTEuMCAoCi0gICByZCAvcy9xIHRjbHRrIHRjbHRrNjQKLSAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbC04LjUuMTEuMAoraWYgbm90IGV4aXN0IHRjbC04LjYuMS4wICgKKyAgIHJkIC9zL3EgdGNsdGsgdGNsdGs2NCB0Y2wtOC41LjExLjAgdGstOC41LjExLjAKKyAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbC04LjYuMS4wCiApCi1pZiBub3QgZXhpc3QgdGstOC41LjExLjAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGstOC41LjExLjAKK2lmIG5vdCBleGlzdCB0ay04LjYuMS4wIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RrLTguNi4xLjAKK2lmIG5vdCBleGlzdCB0aXgtOC40LjMuNCBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90aXgtOC40LjMuNAogCiBAcmVtIHNxbGl0ZTMKLWlmIG5vdCBleGlzdCBzcWxpdGUtMy43LjEyICgKLSAgcmQgL3MvcSBzcWxpdGUtc291cmNlLTMuNy40Ci0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS0zLjcuMTIKK2lmIG5vdCBleGlzdCBzcWxpdGUtMy44LjMuMSAoCisgIHJkIC9zL3Egc3FsaXRlLXNvdXJjZS0zLjguMQorICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtMy44LjMuMQogKQogCiBAcmVtIGx6bWEKLWlmIG5vdCBleGlzdCB4ei01LjAuMyAoCi0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3h6LTUuMC4zCitpZiBub3QgZXhpc3QgeHotNS4wLjUgKAorICByZCAvcy9xIHh6LTUuMC4zCisgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3h6LTUuMC41CiApCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKaW5kZXggZWQ1YzEwZS4uMzg3N2Q4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdApAQCAtNCwxOCArNCwyNiBAQAogY2FsbCAiVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwtY29tbW9uLmJhdCIKIGNhbGwgIiVWUzEwMENPTU5UT09MUyVcdnN2YXJzMzIuYmF0IgogCi1pZiBub3QgZXhpc3QgdGNsdGtcYmluXHRjbDg1Zy5kbGwgKAoraWYgbm90IGV4aXN0IHRjbHRrXGJpblx0Y2w4NnRnLmRsbCAoCiAgICAgQHJlbSBhbGwgYW5kIGluc3RhbGwgbmVlZCB0byBiZSBzZXBhcmF0ZSBpbnZvY2F0aW9ucywgb3RoZXJ3aXNlIG5tYWtlaGxwIGlzIG5vdCBmb3VuZCBvbiBpbnN0YWxsCi0gICAgY2QgdGNsLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBjbGVhbiBhbGwgCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKKyAgICBjZCB0Y2wtOC42LjEuMFx3aW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPXN5bWJvbHMgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBjbGVhbiBjb3JlIHNoZWxsIGRsbHMKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPXN5bWJvbHMgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsLWJpbmFyaWVzIGluc3RhbGwtbGlicmFyaWVzCiAgICAgY2QgLi5cLi4KICkKIAotaWYgbm90IGV4aXN0IHRjbHRrXGJpblx0azg1Zy5kbGwgKAotICAgIGNkIHRrLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBjbGVhbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBhbGwKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgaW5zdGFsbAoraWYgbm90IGV4aXN0IHRjbHRrXGJpblx0azg2dGcuZGxsICgKKyAgICBjZCB0ay04LjYuMS4wXHdpbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9c3ltYm9scyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBjbGVhbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9c3ltYm9scyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBhbGwKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPXN5bWJvbHMgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNi4xLjAgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcworICAgIGNkIC4uXC4uCispCisKK2lmIG5vdCBleGlzdCB0Y2x0a1xsaWJcdGl4OC40LjNcdGl4ODRnLmRsbCAoCisgICAgY2QgdGl4LTguNC4zLjRcd2luCisgICAgbm1ha2UgLWYgcHl0aG9uLm1hayBERUJVRz0xIE1BQ0hJTkU9SVg4NiBUQ0xfRElSPS4uXC4uXHRjbC04LjYuMS4wIFRLX0RJUj0uLlwuLlx0ay04LjYuMS4wIElOU1RBTExfRElSPS4uXC4uXHRjbHRrIGNsZWFuCisgICAgbm1ha2UgLWYgcHl0aG9uLm1hayBERUJVRz0xIE1BQ0hJTkU9SVg4NiBUQ0xfRElSPS4uXC4uXHRjbC04LjYuMS4wIFRLX0RJUj0uLlwuLlx0ay04LjYuMS4wIElOU1RBTExfRElSPS4uXC4uXHRjbHRrIGFsbAorICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgREVCVUc9MSBNQUNISU5FPUlYODYgVENMX0RJUj0uLlwuLlx0Y2wtOC42LjEuMCBUS19ESVI9Li5cLi5cdGstOC42LjEuMCBJTlNUQUxMX0RJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L3Rlc3QtYW1kNjQuYmF0IGIvVG9vbHMvYnVpbGRib3QvdGVzdC1hbWQ2NC5iYXQKaW5kZXggMWJmMTI0Yy4uZGU2NGYyNSAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvdGVzdC1hbWQ2NC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvdGVzdC1hbWQ2NC5iYXQKQEAgLTEsMyArMSwzIEBACiBAcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJ0ZXN0IiBzdGVwLgogY2QgUENidWlsZAotY2FsbCBydC5iYXQgLWQgLXEgLXg2NCAtdWFsbCAtcndXIC1uICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5CitjYWxsIHJ0LmJhdCAtZCAtcSAteDY0IC11YWxsIC1yd1cgLW4gLS10aW1lb3V0PTM2MDAgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L3Rlc3QuYmF0IGIvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQKaW5kZXggNGY0YzZhYS4uNGU0ZGIxMCAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQKQEAgLTEsMyArMSwzIEBACiBAcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJ0ZXN0IiBzdGVwLgogY2QgUENidWlsZAotY2FsbCBydC5iYXQgLWQgLXEgLXVhbGwgLXJ3VyAtbiAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQorY2FsbCBydC5iYXQgLWQgLXEgLXVhbGwgLXJ3VyAtbiAtLXRpbWVvdXQ9MzYwMCAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQpkaWZmIC0tZ2l0IGEvVG9vbHMvY2xpbmljL2NsaW5pYy5weSBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTNlOGY1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKQEAgLTAsMCArMSw0MTk3IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIEFyZ3VtZW50IENsaW5pYworIyBDb3B5cmlnaHQgMjAxMi0yMDEzIGJ5IExhcnJ5IEhhc3RpbmdzLgorIyBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgorIworCitpbXBvcnQgYWJjCitpbXBvcnQgYXN0CitpbXBvcnQgYXRleGl0CitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgY29weQoraW1wb3J0IGNwcAoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBvcworaW1wb3J0IHBwcmludAoraW1wb3J0IHJlCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdXVpZAorCisjIFRPRE86CisjCisjIHNvb246CisjCisjICogYWxsb3cgbWl4aW5nIGFueSB0d28gb2Yge3Bvc2l0aW9uYWwtb25seSwgcG9zaXRpb25hbC1vci1rZXl3b3JkLAorIyAgIGtleXdvcmQtb25seX0KKyMgICAgICAgKiBkaWN0IGNvbnN0cnVjdG9yIHVzZXMgcG9zaXRpb25hbC1vbmx5IGFuZCBrZXl3b3JkLW9ubHkKKyMgICAgICAgKiBtYXggYW5kIG1pbiB1c2UgcG9zaXRpb25hbCBvbmx5IHdpdGggYW4gb3B0aW9uYWwgZ3JvdXAKKyMgICAgICAgICBhbmQga2V5d29yZC1vbmx5CisjCisKK3ZlcnNpb24gPSAnMScKKworX2VtcHR5ID0gaW5zcGVjdC5fZW1wdHkKK192b2lkID0gaW5zcGVjdC5fdm9pZAorCitOb25lVHlwZSA9IHR5cGUoTm9uZSkKKworY2xhc3MgVW5zcGVjaWZpZWQ6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxVbnNwZWNpZmllZD4nCisKK3Vuc3BlY2lmaWVkID0gVW5zcGVjaWZpZWQoKQorCisKK2NsYXNzIE51bGw6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxOdWxsPicKKworTlVMTCA9IE51bGwoKQorCisKK2NsYXNzIFVua25vd246CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxVbmtub3duPicKKwordW5rbm93biA9IFVua25vd24oKQorCisKK2RlZiBfdGV4dF9hY2N1bXVsYXRvcigpOgorICAgIHRleHQgPSBbXQorICAgIGRlZiBvdXRwdXQoKToKKyAgICAgICAgcyA9ICcnLmpvaW4odGV4dCkKKyAgICAgICAgdGV4dC5jbGVhcigpCisgICAgICAgIHJldHVybiBzCisgICAgcmV0dXJuIHRleHQsIHRleHQuYXBwZW5kLCBvdXRwdXQKKworCitkZWYgdGV4dF9hY2N1bXVsYXRvcigpOgorICAgICIiIgorICAgIENyZWF0ZXMgYSBzaW1wbGUgdGV4dCBhY2N1bXVsYXRvciAvIGpvaW5lci4KKworICAgIFJldHVybnMgYSBwYWlyIG9mIGNhbGxhYmxlczoKKyAgICAgICAgYXBwZW5kLCBvdXRwdXQKKyAgICAiYXBwZW5kIiBhcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBhY2N1bXVsYXRvci4KKyAgICAib3V0cHV0IiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgYWNjdW11bGF0b3IKKyAgICAgICBqb2luZWQgdG9nZXRoZXIgKCcnLmpvaW4oYWNjdW11bGF0b3IpKSBhbmQKKyAgICAgICBlbXB0aWVzIHRoZSBhY2N1bXVsYXRvci4KKyAgICAiIiIKKyAgICB0ZXh0LCBhcHBlbmQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICByZXR1cm4gYXBwZW5kLCBvdXRwdXQKKworCitkZWYgd2Fybl9vcl9mYWlsKGZhaWw9RmFsc2UsICphcmdzLCBmaWxlbmFtZT1Ob25lLCBsaW5lX251bWJlcj1Ob25lKToKKyAgICBqb2luZWQgPSAiICIuam9pbihbc3RyKGEpIGZvciBhIGluIGFyZ3NdKQorICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgaWYgZmFpbDoKKyAgICAgICAgYWRkKCJFcnJvciIpCisgICAgZWxzZToKKyAgICAgICAgYWRkKCJXYXJuaW5nIikKKyAgICBpZiBjbGluaWM6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGNsaW5pYy5maWxlbmFtZQorICAgICAgICBpZiBnZXRhdHRyKGNsaW5pYywgJ2Jsb2NrX3BhcnNlcicsIE5vbmUpIGFuZCAobGluZV9udW1iZXIgaXMgTm9uZSk6CisgICAgICAgICAgICBsaW5lX251bWJlciA9IGNsaW5pYy5ibG9ja19wYXJzZXIubGluZV9udW1iZXIKKyAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgYWRkKCcgaW4gZmlsZSAiJyArIGZpbGVuYW1lICsgJyInKQorICAgIGlmIGxpbmVfbnVtYmVyIGlzIG5vdCBOb25lOgorICAgICAgICBhZGQoIiBvbiBsaW5lICIgKyBzdHIobGluZV9udW1iZXIpKQorICAgIGFkZCgnOlxuJykKKyAgICBhZGQoam9pbmVkKQorICAgIHByaW50KG91dHB1dCgpKQorICAgIGlmIGZhaWw6CisgICAgICAgIHN5cy5leGl0KC0xKQorCisKK2RlZiB3YXJuKCphcmdzLCBmaWxlbmFtZT1Ob25lLCBsaW5lX251bWJlcj1Ob25lKToKKyAgICByZXR1cm4gd2Fybl9vcl9mYWlsKEZhbHNlLCAqYXJncywgZmlsZW5hbWU9ZmlsZW5hbWUsIGxpbmVfbnVtYmVyPWxpbmVfbnVtYmVyKQorCitkZWYgZmFpbCgqYXJncywgZmlsZW5hbWU9Tm9uZSwgbGluZV9udW1iZXI9Tm9uZSk6CisgICAgcmV0dXJuIHdhcm5fb3JfZmFpbChUcnVlLCAqYXJncywgZmlsZW5hbWU9ZmlsZW5hbWUsIGxpbmVfbnVtYmVyPWxpbmVfbnVtYmVyKQorCisKK2RlZiBxdW90ZWRfZm9yX2Nfc3RyaW5nKHMpOgorICAgIGZvciBvbGQsIG5ldyBpbiAoCisgICAgICAgICgnXFwnLCAnXFxcXCcpLCAjIG11c3QgYmUgZmlyc3QhCisgICAgICAgICgnIicsICdcXCInKSwKKyAgICAgICAgKCInIiwgIlxcJyIpLAorICAgICAgICApOgorICAgICAgICBzID0gcy5yZXBsYWNlKG9sZCwgbmV3KQorICAgIHJldHVybiBzCisKK2RlZiBjX3JlcHIocyk6CisgICAgcmV0dXJuICciJyArIHMgKyAnIicKKworCitpc19sZWdhbF9jX2lkZW50aWZpZXIgPSByZS5jb21waWxlKCdeW0EtWmEtel9dW0EtWmEtejAtOV9dKiQnKS5tYXRjaAorCitkZWYgaXNfbGVnYWxfcHlfaWRlbnRpZmllcihzKToKKyAgICByZXR1cm4gYWxsKGlzX2xlZ2FsX2NfaWRlbnRpZmllcihmaWVsZCkgZm9yIGZpZWxkIGluIHMuc3BsaXQoJy4nKSkKKworIyBpZGVudGlmaWVycyB0aGF0IGFyZSBva2F5IGluIFB5dGhvbiBidXQgYXJlbid0IGEgZ29vZCBpZGVhIGluIEMuCisjIHNvIGlmIHRoZXkncmUgdXNlZCBBcmd1bWVudCBDbGluaWMgd2lsbCBhZGQgIl92YWx1ZSIgdG8gdGhlIGVuZAorIyBvZiB0aGUgbmFtZSBpbiBDLgorY19rZXl3b3JkcyA9IHNldCgiIiIKK2FzbSBhdXRvIGJyZWFrIGNhc2UgY2hhciBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRvIGRvdWJsZQorZWxzZSBlbnVtIGV4dGVybiBmbG9hdCBmb3IgZ290byBpZiBpbmxpbmUgaW50IGxvbmcKK3JlZ2lzdGVyIHJldHVybiBzaG9ydCBzaWduZWQgc2l6ZW9mIHN0YXRpYyBzdHJ1Y3Qgc3dpdGNoCit0eXBlZGVmIHR5cGVvZiB1bmlvbiB1bnNpZ25lZCB2b2lkIHZvbGF0aWxlIHdoaWxlCisiIiIuc3RyaXAoKS5zcGxpdCgpKQorCitkZWYgZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzKToKKyAgICAjIGZvciBub3csIGp1c3QgY29tcGxhaW4gaWYgd2hhdCB3ZSdyZSBnaXZlbiBpc24ndCBsZWdhbAorICAgIGlmIG5vdCBpc19sZWdhbF9jX2lkZW50aWZpZXIocyk6CisgICAgICAgIGZhaWwoIklsbGVnYWwgQyBpZGVudGlmaWVyOiB7fSIuZm9ybWF0KHMpKQorICAgICMgYnV0IGlmIHdlIHBpY2tlZCBhIEMga2V5d29yZCwgcGljayBzb21ldGhpbmcgZWxzZQorICAgIGlmIHMgaW4gY19rZXl3b3JkczoKKyAgICAgICAgcmV0dXJuIHMgKyAiX3ZhbHVlIgorICAgIHJldHVybiBzCisKK2RlZiByc3RyaXBfbGluZXMocyk6CisgICAgdGV4dCwgYWRkLCBvdXRwdXQgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisgICAgZm9yIGxpbmUgaW4gcy5zcGxpdCgnXG4nKToKKyAgICAgICAgYWRkKGxpbmUucnN0cmlwKCkpCisgICAgICAgIGFkZCgnXG4nKQorICAgIHRleHQucG9wKCkKKyAgICByZXR1cm4gb3V0cHV0KCkKKworZGVmIGxpbmVhcl9mb3JtYXQocywgKiprd2FyZ3MpOgorICAgICIiIgorICAgIFBlcmZvcm0gc3RyLmZvcm1hdC1saWtlIHN1YnN0aXR1dGlvbiwgZXhjZXB0OgorICAgICAgKiBUaGUgc3RyaW5ncyBzdWJzdGl0dXRlZCBtdXN0IGJlIG9uIGxpbmVzIGJ5CisgICAgICAgIHRoZW1zZWx2ZXMuICAoVGhpcyBsaW5lIGlzIHRoZSAic291cmNlIGxpbmUiLikKKyAgICAgICogSWYgdGhlIHN1YnN0aXR1dGlvbiB0ZXh0IGlzIGVtcHR5LCB0aGUgc291cmNlIGxpbmUKKyAgICAgICAgaXMgcmVtb3ZlZCBpbiB0aGUgb3V0cHV0LgorICAgICAgKiBJZiB0aGUgZmllbGQgaXMgbm90IHJlY29nbml6ZWQsIHRoZSBvcmlnaW5hbCBsaW5lCisgICAgICAgIGlzIHBhc3NlZCB1bm1vZGlmaWVkIHRocm91Z2ggdG8gdGhlIG91dHB1dC4KKyAgICAgICogSWYgdGhlIHN1YnN0aXR1dGlvbiB0ZXh0IGlzIG5vdCBlbXB0eToKKyAgICAgICAgICAqIEVhY2ggbGluZSBvZiB0aGUgc3Vic3RpdHV0ZWQgdGV4dCBpcyBpbmRlbnRlZAorICAgICAgICAgICAgYnkgdGhlIGluZGVudCBvZiB0aGUgc291cmNlIGxpbmUuCisgICAgICAgICAgKiBBIG5ld2xpbmUgd2lsbCBiZSBhZGRlZCB0byB0aGUgZW5kLgorICAgICIiIgorCisgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICBmb3IgbGluZSBpbiBzLnNwbGl0KCdcbicpOgorICAgICAgICBpbmRlbnQsIGN1cmx5LCB0cmFpbGluZyA9IGxpbmUucGFydGl0aW9uKCd7JykKKyAgICAgICAgaWYgbm90IGN1cmx5OgorICAgICAgICAgICAgYWRkKGxpbmUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbmFtZSwgY3VybCwgdHJhaWxpbmcgPSB0cmFpbGluZy5wYXJ0aXRpb24oJ30nKQorICAgICAgICBpZiBub3QgY3VybHkgb3IgbmFtZSBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgYWRkKGxpbmUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgdHJhaWxpbmc6CisgICAgICAgICAgICBmYWlsKCJUZXh0IGZvdW5kIGFmdGVyIHsiICsgbmFtZSArICJ9IGJsb2NrIG1hcmtlciEgIEl0IG11c3QgYmUgb24gYSBsaW5lIGJ5IGl0c2VsZi4iKQorICAgICAgICBpZiBpbmRlbnQuc3RyaXAoKToKKyAgICAgICAgICAgIGZhaWwoIk5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgZm91bmQgYmVmb3JlIHsiICsgbmFtZSArICJ9IGJsb2NrIG1hcmtlciEgIEl0IG11c3QgYmUgb24gYSBsaW5lIGJ5IGl0c2VsZi4iKQorCisgICAgICAgIHZhbHVlID0ga3dhcmdzW25hbWVdCisgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdmFsdWUgPSB0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHZhbHVlKSwgaW5kZW50KQorICAgICAgICBhZGQodmFsdWUpCisgICAgICAgIGFkZCgnXG4nKQorCisgICAgcmV0dXJuIG91dHB1dCgpWzotMV0KKworZGVmIGluZGVudF9hbGxfbGluZXMocywgcHJlZml4KToKKyAgICAiIiIKKyAgICBSZXR1cm5zICdzJywgd2l0aCAncHJlZml4JyBwcmVwZW5kZWQgdG8gYWxsIGxpbmVzLgorCisgICAgSWYgdGhlIGxhc3QgbGluZSBpcyBlbXB0eSwgcHJlZml4IGlzIG5vdCBwcmVwZW5kZWQKKyAgICB0byBpdC4gIChJZiBzIGlzIGJsYW5rLCByZXR1cm5zIHMgdW5jaGFuZ2VkLikKKworICAgICh0ZXh0d3JhcC5pbmRlbnQgb25seSBhZGRzIHRvIG5vbi1ibGFuayBsaW5lcy4pCisgICAgIiIiCisgICAgc3BsaXQgPSBzLnNwbGl0KCdcbicpCisgICAgbGFzdCA9IHNwbGl0LnBvcCgpCisgICAgZmluYWwgPSBbXQorICAgIGZvciBsaW5lIGluIHNwbGl0OgorICAgICAgICBmaW5hbC5hcHBlbmQocHJlZml4KQorICAgICAgICBmaW5hbC5hcHBlbmQobGluZSkKKyAgICAgICAgZmluYWwuYXBwZW5kKCdcbicpCisgICAgaWYgbGFzdDoKKyAgICAgICAgZmluYWwuYXBwZW5kKHByZWZpeCkKKyAgICAgICAgZmluYWwuYXBwZW5kKGxhc3QpCisgICAgcmV0dXJuICcnLmpvaW4oZmluYWwpCisKK2RlZiBzdWZmaXhfYWxsX2xpbmVzKHMsIHN1ZmZpeCk6CisgICAgIiIiCisgICAgUmV0dXJucyAncycsIHdpdGggJ3N1ZmZpeCcgYXBwZW5kZWQgdG8gYWxsIGxpbmVzLgorCisgICAgSWYgdGhlIGxhc3QgbGluZSBpcyBlbXB0eSwgc3VmZml4IGlzIG5vdCBhcHBlbmRlZAorICAgIHRvIGl0LiAgKElmIHMgaXMgYmxhbmssIHJldHVybnMgcyB1bmNoYW5nZWQuKQorICAgICIiIgorICAgIHNwbGl0ID0gcy5zcGxpdCgnXG4nKQorICAgIGxhc3QgPSBzcGxpdC5wb3AoKQorICAgIGZpbmFsID0gW10KKyAgICBmb3IgbGluZSBpbiBzcGxpdDoKKyAgICAgICAgZmluYWwuYXBwZW5kKGxpbmUpCisgICAgICAgIGZpbmFsLmFwcGVuZChzdWZmaXgpCisgICAgICAgIGZpbmFsLmFwcGVuZCgnXG4nKQorICAgIGlmIGxhc3Q6CisgICAgICAgIGZpbmFsLmFwcGVuZChsYXN0KQorICAgICAgICBmaW5hbC5hcHBlbmQoc3VmZml4KQorICAgIHJldHVybiAnJy5qb2luKGZpbmFsKQorCisKK2RlZiB2ZXJzaW9uX3NwbGl0dGVyKHMpOgorICAgICIiIlNwbGl0cyBhIHZlcnNpb24gc3RyaW5nIGludG8gYSB0dXBsZSBvZiBpbnRlZ2Vycy4KKworICAgIFRoZSBmb2xsb3dpbmcgQVNDSUkgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCwgYW5kIGVtcGxveQorICAgIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnM6CisgICAgICAgIGEgLT4gLTMKKyAgICAgICAgYiAtPiAtMgorICAgICAgICBjIC0+IC0xCisgICAgKFRoaXMgcGVybWl0cyBQeXRob24tc3R5bGUgdmVyc2lvbiBzdHJpbmdzIHN1Y2ggYXMgIjEuNGIzIi4pCisgICAgIiIiCisgICAgdmVyc2lvbiA9IFtdCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGRlZiBmbHVzaCgpOgorICAgICAgICBpZiBub3QgYWNjdW11bGF0b3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uIHN0cmluZzogJyArIHJlcHIocykpCisgICAgICAgIHZlcnNpb24uYXBwZW5kKGludCgnJy5qb2luKGFjY3VtdWxhdG9yKSkpCisgICAgICAgIGFjY3VtdWxhdG9yLmNsZWFyKCkKKworICAgIGZvciBjIGluIHM6CisgICAgICAgIGlmIGMuaXNkaWdpdCgpOgorICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kKGMpCisgICAgICAgIGVsaWYgYyA9PSAnLic6CisgICAgICAgICAgICBmbHVzaCgpCisgICAgICAgIGVsaWYgYyBpbiAnYWJjJzoKKyAgICAgICAgICAgIGZsdXNoKCkKKyAgICAgICAgICAgIHZlcnNpb24uYXBwZW5kKCdhYmMnLmluZGV4KGMpIC0gMykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lsbGVnYWwgY2hhcmFjdGVyICcgKyByZXByKGMpICsgJyBpbiB2ZXJzaW9uIHN0cmluZyAnICsgcmVwcihzKSkKKyAgICBmbHVzaCgpCisgICAgcmV0dXJuIHR1cGxlKHZlcnNpb24pCisKK2RlZiB2ZXJzaW9uX2NvbXBhcml0b3IodmVyc2lvbjEsIHZlcnNpb24yKToKKyAgICBpdGVyYXRvciA9IGl0ZXJ0b29scy56aXBfbG9uZ2VzdCh2ZXJzaW9uX3NwbGl0dGVyKHZlcnNpb24xKSwgdmVyc2lvbl9zcGxpdHRlcih2ZXJzaW9uMiksIGZpbGx2YWx1ZT0wKQorICAgIGZvciBpLCAoYSwgYikgaW4gZW51bWVyYXRlKGl0ZXJhdG9yKToKKyAgICAgICAgaWYgYSA8IGI6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgaWYgYSA+IGI6CisgICAgICAgICAgICByZXR1cm4gMQorICAgIHJldHVybiAwCisKKworY2xhc3MgQ1JlbmRlckRhdGE6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyB0byBkZWNsYXJlIHZhcmlhYmxlcy4KKyAgICAgICAgIyBTaG91bGQgYmUgZnVsbCBsaW5lcyB3aXRoIFxuIGVvbCBjaGFyYWN0ZXJzLgorICAgICAgICBzZWxmLmRlY2xhcmF0aW9ucyA9IFtdCisKKyAgICAgICAgIyBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIGluaXRpYWxpemUgdGhlIHZhcmlhYmxlcyBiZWZvcmUgdGhlIHBhcnNlIGNhbGwuCisgICAgICAgICMgU2hvdWxkIGJlIGZ1bGwgbGluZXMgd2l0aCBcbiBlb2wgY2hhcmFjdGVycy4KKyAgICAgICAgc2VsZi5pbml0aWFsaXplcnMgPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyBuZWVkZWQgdG8gZHluYW1pY2FsbHkgbW9kaWZ5IHRoZSB2YWx1ZXMKKyAgICAgICAgIyBwYXJzZWQgYnkgdGhlIHBhcnNlIGNhbGwsIGJlZm9yZSBjYWxsaW5nIHRoZSBpbXBsLgorICAgICAgICBzZWxmLm1vZGlmaWNhdGlvbnMgPSBbXQorCisgICAgICAgICMgVGhlIGVudHJpZXMgZm9yIHRoZSAia2V5d29yZHMiIGFycmF5IGZvciBQeUFyZ19QYXJzZVR1cGxlLgorICAgICAgICAjIFNob3VsZCBiZSBpbmRpdmlkdWFsIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBuYW1lcy4KKyAgICAgICAgc2VsZi5rZXl3b3JkcyA9IFtdCisKKyAgICAgICAgIyBUaGUgImZvcm1hdCB1bml0cyIgZm9yIFB5QXJnX1BhcnNlVHVwbGUuCisgICAgICAgICMgU2hvdWxkIGJlIGluZGl2aWR1YWwgc3RyaW5ncyB0aGF0IHdpbGwgZ2V0CisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXRzID0gW10KKworICAgICAgICAjIFRoZSB2YXJhcmdzIGFyZ3VtZW50cyBmb3IgUHlBcmdfUGFyc2VUdXBsZS4KKyAgICAgICAgc2VsZi5wYXJzZV9hcmd1bWVudHMgPSBbXQorCisgICAgICAgICMgVGhlIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgZm9yIHRoZSBpbXBsIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmltcGxfcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAgIyBUaGUgYXJndW1lbnRzIHRvIHRoZSBpbXBsIGZ1bmN0aW9uIGF0IHRoZSB0aW1lIGl0J3MgY2FsbGVkLgorICAgICAgICBzZWxmLmltcGxfYXJndW1lbnRzID0gW10KKworICAgICAgICAjIEZvciByZXR1cm4gY29udmVydGVyczogdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRoYXQKKyAgICAgICAgIyBzaG91bGQgcmVjZWl2ZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGltcGwuCisgICAgICAgIHNlbGYucmV0dXJuX3ZhbHVlID0gInJldHVybl92YWx1ZSIKKworICAgICAgICAjIEZvciByZXR1cm4gY29udmVydGVyczogdGhlIGNvZGUgdG8gY29udmVydCB0aGUgcmV0dXJuCisgICAgICAgICMgdmFsdWUgZnJvbSB0aGUgcGFyc2UgZnVuY3Rpb24uICBUaGlzIGlzIGFsc28gd2hlcmUKKyAgICAgICAgIyB5b3Ugc2hvdWxkIGNoZWNrIHRoZSBfcmV0dXJuX3ZhbHVlIGZvciBlcnJvcnMsIGFuZAorICAgICAgICAjICJnb3RvIGV4aXQiIGlmIHRoZXJlIGFyZSBhbnkuCisgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnNpb24gPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBjbGVhbiB1cCBhZnRlciB0aGUgaW1wbCBjYWxsLgorICAgICAgICBzZWxmLmNsZWFudXAgPSBbXQorCisKK2NsYXNzIEZvcm1hdENvdW50ZXJGb3JtYXR0ZXIoc3RyaW5nLkZvcm1hdHRlcik6CisgICAgIiIiCisgICAgVGhpcyBjb3VudHMgaG93IG1hbnkgaW5zdGFuY2VzIG9mIGVhY2ggZm9ybWF0dGVyCisgICAgInJlcGxhY2VtZW50IHN0cmluZyIgYXBwZWFyIGluIHRoZSBmb3JtYXQgc3RyaW5nLgorCisgICAgZS5nLiBhZnRlciBldmFsdWF0aW5nICJzdHJpbmcge2F9LCB7Yn0sIHtjfSwge2F9IgorICAgICAgICAgdGhlIGNvdW50cyBkaWN0IHdvdWxkIG5vdyBsb29rIGxpa2UKKyAgICAgICAgIHsnYSc6IDIsICdiJzogMSwgJ2MnOiAxfQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jb3VudHMgPSBjb2xsZWN0aW9ucy5Db3VudGVyKCkKKworICAgIGRlZiBnZXRfdmFsdWUoc2VsZiwga2V5LCBhcmdzLCBrd2FyZ3MpOgorICAgICAgICBzZWxmLmNvdW50c1trZXldICs9IDEKKyAgICAgICAgcmV0dXJuICcnCisKK2NsYXNzIExhbmd1YWdlKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisKKyAgICBzdGFydF9saW5lID0gIiIKKyAgICBib2R5X3ByZWZpeCA9ICIiCisgICAgc3RvcF9saW5lID0gIiIKKyAgICBjaGVja3N1bV9saW5lID0gIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHBhc3MKKworICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGNsaW5pYywgc2lnbmF0dXJlcyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgIGRlZiBhc3NlcnRfb25seV9vbmUoYXR0ciwgKmFkZGl0aW9uYWxfZmllbGRzKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgRW5zdXJlcyB0aGF0IHRoZSBzdHJpbmcgZm91bmQgYXQgZ2V0YXR0cihzZWxmLCBhdHRyKQorICAgICAgICAgICAgY29udGFpbnMgZXhhY3RseSBvbmUgZm9ybWF0dGVyIHJlcGxhY2VtZW50IHN0cmluZyBmb3IKKyAgICAgICAgICAgIGVhY2ggdmFsaWQgZmllbGQuICBUaGUgbGlzdCBvZiB2YWxpZCBmaWVsZHMgaXMKKyAgICAgICAgICAgIFsnZHNsX25hbWUnXSBleHRlbmRlZCBieSBhZGRpdGlvbmFsX2ZpZWxkcy4KKworICAgICAgICAgICAgZS5nLgorICAgICAgICAgICAgICAgIHNlbGYuZm10ID0gIntkc2xfbmFtZX0ge2F9IHtifSIKKworICAgICAgICAgICAgICAgICMgdGhpcyBwYXNzZXMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9vbmx5X29uZSgnZm10JywgJ2EnLCAnYicpCisKKyAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMsIHRoZSBmb3JtYXQgc3RyaW5nIGhhcyBhIHtifSBpbiBpdAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X29ubHlfb25lKCdmbXQnLCAnYScpCisKKyAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMsIHRoZSBmb3JtYXQgc3RyaW5nIGRvZXNuJ3QgaGF2ZSBhIHtjfSBpbiBpdAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X29ubHlfb25lKCdmbXQnLCAnYScsICdiJywgJ2MnKQorCisgICAgICAgICAgICAgICAgIyB0aGlzIGZhaWxzLCB0aGUgZm9ybWF0IHN0cmluZyBoYXMgdHdvIHthfXMgaW4gaXQsCisgICAgICAgICAgICAgICAgIyBpdCBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUKKyAgICAgICAgICAgICAgICBzZWxmLmZtdDIgPSAne2RzbF9uYW1lfSB7YX0ge2F9JworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X29ubHlfb25lKCdmbXQyJywgJ2EnKQorCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGZpZWxkcyA9IFsnZHNsX25hbWUnXQorICAgICAgICAgICAgZmllbGRzLmV4dGVuZChhZGRpdGlvbmFsX2ZpZWxkcykKKyAgICAgICAgICAgIGxpbmUgPSBnZXRhdHRyKHNlbGYsIGF0dHIpCisgICAgICAgICAgICBmY2YgPSBGb3JtYXRDb3VudGVyRm9ybWF0dGVyKCkKKyAgICAgICAgICAgIGZjZi5mb3JtYXQobGluZSkKKyAgICAgICAgICAgIGRlZiBsb2NhbF9mYWlsKHNob3VsZF9iZV90aGVyZV9idXRfaXNudCk6CisgICAgICAgICAgICAgICAgaWYgc2hvdWxkX2JlX3RoZXJlX2J1dF9pc250OgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJ7fSB7fSBtdXN0IGNvbnRhaW4ge3t7fX19IGV4YWN0bHkgb25jZSEiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBhdHRyLCBuYW1lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJ7fSB7fSBtdXN0IG5vdCBjb250YWluIHt7e319fSEiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBhdHRyLCBuYW1lKSkKKworICAgICAgICAgICAgZm9yIG5hbWUsIGNvdW50IGluIGZjZi5jb3VudHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICAgICAgaWYgY291bnQgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfZmFpbChUcnVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsX2ZhaWwoRmFsc2UpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgaWYgZmNmLmNvdW50cy5nZXQobmFtZSkgIT0gMToKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxfZmFpbChUcnVlKQorCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnc3RhcnRfbGluZScpCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnc3RvcF9saW5lJykKKworICAgICAgICBmaWVsZCA9ICJhcmd1bWVudHMiIGlmICJ7YXJndW1lbnRzfSIgaW4gc2VsZi5jaGVja3N1bV9saW5lIGVsc2UgImNoZWNrc3VtIgorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ2NoZWNrc3VtX2xpbmUnLCBmaWVsZCkKKworCisKK2NsYXNzIFB5dGhvbkxhbmd1YWdlKExhbmd1YWdlKToKKworICAgIGxhbmd1YWdlICAgICAgPSAnUHl0aG9uJworICAgIHN0YXJ0X2xpbmUgICAgPSAiIy8qW3tkc2xfbmFtZX0gaW5wdXRdIgorICAgIGJvZHlfcHJlZml4ICAgPSAiIyIKKyAgICBzdG9wX2xpbmUgICAgID0gIiNbe2RzbF9uYW1lfSBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLyIKKyAgICBjaGVja3N1bV9saW5lID0gIiMvKlt7ZHNsX25hbWV9IGVuZCBnZW5lcmF0ZWQgY29kZToge2FyZ3VtZW50c31dKi8iCisKKworZGVmIHBlcm11dGVfbGVmdF9vcHRpb25fZ3JvdXBzKGwpOgorICAgICIiIgorICAgIEdpdmVuIFsxLCAyLCAzXSwgc2hvdWxkIHlpZWxkOgorICAgICAgICgpCisgICAgICAgKDMsKQorICAgICAgICgyLCAzKQorICAgICAgICgxLCAyLCAzKQorICAgICIiIgorICAgIHlpZWxkIHR1cGxlKCkKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgZm9yIGdyb3VwIGluIHJldmVyc2VkKGwpOgorICAgICAgICBhY2N1bXVsYXRvciA9IGxpc3QoZ3JvdXApICsgYWNjdW11bGF0b3IKKyAgICAgICAgeWllbGQgdHVwbGUoYWNjdW11bGF0b3IpCisKKworZGVmIHBlcm11dGVfcmlnaHRfb3B0aW9uX2dyb3VwcyhsKToKKyAgICAiIiIKKyAgICBHaXZlbiBbMSwgMiwgM10sIHNob3VsZCB5aWVsZDoKKyAgICAgICgpCisgICAgICAoMSwpCisgICAgICAoMSwgMikKKyAgICAgICgxLCAyLCAzKQorICAgICIiIgorICAgIHlpZWxkIHR1cGxlKCkKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgZm9yIGdyb3VwIGluIGw6CisgICAgICAgIGFjY3VtdWxhdG9yLmV4dGVuZChncm91cCkKKyAgICAgICAgeWllbGQgdHVwbGUoYWNjdW11bGF0b3IpCisKKworZGVmIHBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKGxlZnQsIHJlcXVpcmVkLCByaWdodCk6CisgICAgIiIiCisgICAgR2VuZXJhdG9yIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIHNldCBvZiBhY2NlcHRhYmxlCisgICAgYXJndW1lbnQgbGlzdHMgZm9yIHRoZSBwcm92aWRlZCBpdGVyYWJsZXMgb2YKKyAgICBhcmd1bWVudCBncm91cHMuICAoQWN0dWFsbHkgaXQgZ2VuZXJhdGVzIGEgdHVwbGUgb2YgdHVwbGVzLikKKworICAgIEFsZ29yaXRobTogcHJlZmVyIGxlZnQgb3B0aW9ucyBvdmVyIHJpZ2h0IG9wdGlvbnMuCisKKyAgICBJZiByZXF1aXJlZCBpcyBlbXB0eSwgbGVmdCBtdXN0IGFsc28gYmUgZW1wdHkuCisgICAgIiIiCisgICAgcmVxdWlyZWQgPSB0dXBsZShyZXF1aXJlZCkKKyAgICByZXN1bHQgPSBbXQorCisgICAgaWYgbm90IHJlcXVpcmVkOgorICAgICAgICBhc3NlcnQgbm90IGxlZnQKKworICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBjb3VudHMgPSBzZXQoKQorICAgIGZvciByIGluIHBlcm11dGVfcmlnaHRfb3B0aW9uX2dyb3VwcyhyaWdodCk6CisgICAgICAgIGZvciBsIGluIHBlcm11dGVfbGVmdF9vcHRpb25fZ3JvdXBzKGxlZnQpOgorICAgICAgICAgICAgdCA9IGwgKyByZXF1aXJlZCArIHIKKyAgICAgICAgICAgIGlmIGxlbih0KSBpbiBjb3VudHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvdW50cy5hZGQobGVuKHQpKQorICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kKHQpCisKKyAgICBhY2N1bXVsYXRvci5zb3J0KGtleT1sZW4pCisgICAgcmV0dXJuIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2RlZiBzdHJpcF9sZWFkaW5nX2FuZF90cmFpbGluZ19ibGFua19saW5lcyhzKToKKyAgICBsaW5lcyA9IHMucnN0cmlwKCkuc3BsaXQoJ1xuJykKKyAgICB3aGlsZSBsaW5lczoKKyAgICAgICAgbGluZSA9IGxpbmVzWzBdCisgICAgICAgIGlmIGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGRlbCBsaW5lc1swXQorICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKK0BmdW5jdG9vbHMubHJ1X2NhY2hlKCkKK2RlZiBub3JtYWxpemVfc25pcHBldChzLCAqLCBpbmRlbnQ9MCk6CisgICAgIiIiCisgICAgUmVmb3JtYXRzIHM6CisgICAgICAgICogcmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyBibGFuayBsaW5lcworICAgICAgICAqIGVuc3VyZXMgdGhhdCBpdCBkb2VzIG5vdCBlbmQgd2l0aCBhIG5ld2xpbmUKKyAgICAgICAgKiBkZWRlbnRzIHNvIHRoZSBmaXJzdCBub253aGl0ZSBjaGFyYWN0ZXIgb24gYW55IGxpbmUgaXMgYXQgY29sdW1uICJpbmRlbnQiCisgICAgIiIiCisgICAgcyA9IHN0cmlwX2xlYWRpbmdfYW5kX3RyYWlsaW5nX2JsYW5rX2xpbmVzKHMpCisgICAgcyA9IHRleHR3cmFwLmRlZGVudChzKQorICAgIGlmIGluZGVudDoKKyAgICAgICAgcyA9IHRleHR3cmFwLmluZGVudChzLCAnICcgKiBpbmRlbnQpCisgICAgcmV0dXJuIHMKKworCitjbGFzcyBDTGFuZ3VhZ2UoTGFuZ3VhZ2UpOgorCisgICAgYm9keV9wcmVmaXggICA9ICIjIgorICAgIGxhbmd1YWdlICAgICAgPSAnQycKKyAgICBzdGFydF9saW5lICAgID0gIi8qW3tkc2xfbmFtZX0gaW5wdXRdIgorICAgIGJvZHlfcHJlZml4ICAgPSAiIgorICAgIHN0b3BfbGluZSAgICAgPSAiW3tkc2xfbmFtZX0gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8iCisgICAgY2hlY2tzdW1fbGluZSA9ICIvKlt7ZHNsX25hbWV9IGVuZCBnZW5lcmF0ZWQgY29kZToge2FyZ3VtZW50c31dKi8iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmNwcCA9IGNwcC5Nb25pdG9yKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmNwcC5mYWlsID0gZmFpbAorCisgICAgZGVmIHBhcnNlX2xpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYuY3BwLndyaXRlbGluZShsaW5lKQorCisgICAgZGVmIHJlbmRlcihzZWxmLCBjbGluaWMsIHNpZ25hdHVyZXMpOgorICAgICAgICBmdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgZm9yIG8gaW4gc2lnbmF0dXJlczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobywgRnVuY3Rpb24pOgorICAgICAgICAgICAgICAgIGlmIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJZb3UgbWF5IHNwZWNpZnkgYXQgbW9zdCBvbmUgZnVuY3Rpb24gcGVyIGJsb2NrLlxuRm91bmQgYSBibG9jayBjb250YWluaW5nIGF0IGxlYXN0IHR3bzpcblx0IiArIHJlcHIoZnVuY3Rpb24pICsgIiBhbmQgIiArIHJlcHIobykpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBvCisgICAgICAgIHJldHVybiBzZWxmLnJlbmRlcl9mdW5jdGlvbihjbGluaWMsIGZ1bmN0aW9uKQorCisgICAgZGVmIGRvY3N0cmluZ19mb3JfY19zdHJpbmcoc2VsZiwgZik6CisgICAgICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgICAgICAjIHR1cm4gZG9jc3RyaW5nIGludG8gYSBwcm9wZXJseSBxdW90ZWQgQyBzdHJpbmcKKyAgICAgICAgZm9yIGxpbmUgaW4gZi5kb2NzdHJpbmcuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBhZGQoJyInKQorICAgICAgICAgICAgYWRkKHF1b3RlZF9mb3JfY19zdHJpbmcobGluZSkpCisgICAgICAgICAgICBhZGQoJ1xcbiJcbicpCisKKyAgICAgICAgdGV4dC5wb3AoKQorICAgICAgICBhZGQoJyInKQorICAgICAgICByZXR1cm4gJycuam9pbih0ZXh0KQorCisgICAgZGVmIG91dHB1dF90ZW1wbGF0ZXMoc2VsZiwgZik6CisgICAgICAgIHBhcmFtZXRlcnMgPSBsaXN0KGYucGFyYW1ldGVycy52YWx1ZXMoKSkKKyAgICAgICAgYXNzZXJ0IHBhcmFtZXRlcnMKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGFyYW1ldGVyc1swXS5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKQorICAgICAgICBkZWwgcGFyYW1ldGVyc1swXQorICAgICAgICBjb252ZXJ0ZXJzID0gW3AuY29udmVydGVyIGZvciBwIGluIHBhcmFtZXRlcnNdCisKKyAgICAgICAgaGFzX29wdGlvbl9ncm91cHMgPSBwYXJhbWV0ZXJzIGFuZCAocGFyYW1ldGVyc1swXS5ncm91cCBvciBwYXJhbWV0ZXJzWy0xXS5ncm91cCkKKyAgICAgICAgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyID0gKG5vdCBmLnJldHVybl9jb252ZXJ0ZXIgb3IKKyAgICAgICAgICAgIGYucmV0dXJuX2NvbnZlcnRlci50eXBlID09ICdQeU9iamVjdCAqJykKKworICAgICAgICBwb3NpdGlvbmFsID0gcGFyYW1ldGVycyBhbmQgKHBhcmFtZXRlcnNbLTFdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICBhbGxfYm9yaW5nX29iamVjdHMgPSBGYWxzZSAjIHllcywgdGhpcyB3aWxsIGJlIGZhbHNlIGlmIHRoZXJlIGFyZSAwIHBhcmFtZXRlcnMsIGl0J3MgZmluZQorICAgICAgICBmaXJzdF9vcHRpb25hbCA9IGxlbihwYXJhbWV0ZXJzKQorICAgICAgICBmb3IgaSwgcCBpbiBlbnVtZXJhdGUocGFyYW1ldGVycyk6CisgICAgICAgICAgICBjID0gcC5jb252ZXJ0ZXIKKyAgICAgICAgICAgIGlmIHR5cGUoYykgIT0gb2JqZWN0X2NvbnZlcnRlcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgYy5mb3JtYXRfdW5pdCAhPSAnTyc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHAuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgZmlyc3Rfb3B0aW9uYWwgPSBtaW4oZmlyc3Rfb3B0aW9uYWwsIGkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhbGxfYm9yaW5nX29iamVjdHMgPSBUcnVlCisKKyAgICAgICAgbmV3X29yX2luaXQgPSBmLmtpbmQgaW4gKE1FVEhPRF9ORVcsIE1FVEhPRF9JTklUKQorCisgICAgICAgIG1ldGhfbyA9IChsZW4ocGFyYW1ldGVycykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgcGFyYW1ldGVyc1swXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSBhbmQKKyAgICAgICAgICAgICAgbm90IGNvbnZlcnRlcnNbMF0uaXNfb3B0aW9uYWwoKSBhbmQKKyAgICAgICAgICAgICAgaXNpbnN0YW5jZShjb252ZXJ0ZXJzWzBdLCBvYmplY3RfY29udmVydGVyKSBhbmQKKyAgICAgICAgICAgICAgY29udmVydGVyc1swXS5mb3JtYXRfdW5pdCA9PSAnTycgYW5kCisgICAgICAgICAgICAgIG5vdCBuZXdfb3JfaW5pdCkKKworICAgICAgICAjIHdlIGhhdmUgdG8gc2V0IHRoZXNlIHRoaW5ncyBiZWZvcmUgd2UncmUgZG9uZToKKyAgICAgICAgIworICAgICAgICAjIGRvY3N0cmluZ19wcm90b3R5cGUKKyAgICAgICAgIyBkb2NzdHJpbmdfZGVmaW5pdGlvbgorICAgICAgICAjIGltcGxfcHJvdG90eXBlCisgICAgICAgICMgbWV0aG9kZGVmX2RlZmluZQorICAgICAgICAjIHBhcnNlcl9wcm90b3R5cGUKKyAgICAgICAgIyBwYXJzZXJfZGVmaW5pdGlvbgorICAgICAgICAjIGltcGxfZGVmaW5pdGlvbgorICAgICAgICAjIGNwcF9pZgorICAgICAgICAjIGNwcF9lbmRpZgorICAgICAgICAjIG1ldGhvZGRlZl9pZm5kZWYKKworICAgICAgICByZXR1cm5fdmFsdWVfZGVjbGFyYXRpb24gPSAiUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7IgorCisgICAgICAgIG1ldGhvZGRlZl9kZWZpbmUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICNkZWZpbmUge21ldGhvZGRlZl9uYW1lfSAgICBcXAorICAgICAgICAgICAgICAgIHt7IntuYW1lfSIsIChQeUNGdW5jdGlvbil7Y19iYXNlbmFtZX0sIHttZXRob2RkZWZfZmxhZ3N9LCB7Y19iYXNlbmFtZX1fX2RvY19ffX0sCisgICAgICAgICAgICAiIiIpCisgICAgICAgIGlmIG5ld19vcl9pbml0IGFuZCBub3QgZi5kb2NzdHJpbmc6CisgICAgICAgICAgICBkb2NzdHJpbmdfcHJvdG90eXBlID0gZG9jc3RyaW5nX2RlZmluaXRpb24gPSAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZG9jc3RyaW5nX3Byb3RvdHlwZSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIFB5RG9jX1ZBUih7Y19iYXNlbmFtZX1fX2RvY19fKTsKKyAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBkb2NzdHJpbmdfZGVmaW5pdGlvbiA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIFB5RG9jX1NUUlZBUih7Y19iYXNlbmFtZX1fX2RvY19fLAorICAgICAgICAgICAgICAgIHtkb2NzdHJpbmd9KTsKKyAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgIGltcGxfZGVmaW5pdGlvbiA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQorICAgICAgICAgICAge2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfcGFyYW1ldGVyc30pCisgICAgICAgICAgICAiIiIpCisgICAgICAgIGltcGxfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9kZWZpbml0aW9uID0gTm9uZQorCisgICAgICAgIHBhcnNlcl9wcm90b3R5cGVfa2V5d29yZCA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKKyAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKKyAgICAgICAgICAgICIiIikKKworICAgICAgICBwYXJzZXJfcHJvdG90eXBlX3ZhcmFyZ3MgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgIyBwYXJzZXJfYm9keV9maWVsZHMgcmVtZW1iZXJzIHRoZSBmaWVsZHMgcGFzc2VkIGluIHRvIHRoZQorICAgICAgICAjIHByZXZpb3VzIGNhbGwgdG8gcGFyc2VyX2JvZHkuIHRoaXMgaXMgdXNlZCBmb3IgYW4gYXdmdWwgaGFjay4KKyAgICAgICAgcGFyc2VyX2JvZHlfZmllbGRzID0gKCkKKyAgICAgICAgZGVmIHBhcnNlcl9ib2R5KHByb3RvdHlwZSwgKmZpZWxkcyk6CisgICAgICAgICAgICBub25sb2NhbCBwYXJzZXJfYm9keV9maWVsZHMKKyAgICAgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgICAgICBhZGQocHJvdG90eXBlKQorICAgICAgICAgICAgcGFyc2VyX2JvZHlfZmllbGRzID0gZmllbGRzCisKKyAgICAgICAgICAgIGZpZWxkcyA9IGxpc3QoZmllbGRzKQorICAgICAgICAgICAgZmllbGRzLmluc2VydCgwLCBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICB7eworICAgICAgICAgICAgICAgICAgICB7cmV0dXJuX3ZhbHVlX2RlY2xhcmF0aW9ufQorICAgICAgICAgICAgICAgICAgICB7ZGVjbGFyYXRpb25zfQorICAgICAgICAgICAgICAgICAgICB7aW5pdGlhbGl6ZXJzfQorICAgICAgICAgICAgICAgICIiIikgKyAiXG4iKQorICAgICAgICAgICAgIyBqdXN0IGltYWdpbmUtLXlvdXIgY29kZSBpcyBoZXJlIGluIHRoZSBtaWRkbGUKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQobm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgICAgIHttb2RpZmljYXRpb25zfQorICAgICAgICAgICAgICAgICAgICB7cmV0dXJuX3ZhbHVlfSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgICAgICAgICAgICAgICAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKKyAgICAgICAgICAgICAgICB7ZXhpdF9sYWJlbH0KKyAgICAgICAgICAgICAgICAgICAge2NsZWFudXB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5fdmFsdWU7CisgICAgICAgICAgICAgICAgfX0KKyAgICAgICAgICAgICAgICAiIiIpKQorICAgICAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgICAgICBhZGQoZmllbGQpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0KCkKKworICAgICAgICBkZWYgaW5zZXJ0X2tleXdvcmRzKHMpOgorICAgICAgICAgICAgcmV0dXJuIGxpbmVhcl9mb3JtYXQocywgZGVjbGFyYXRpb25zPSJzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7e3trZXl3b3Jkc30sIE5VTEx9fTtcbntkZWNsYXJhdGlvbnN9IikKKworICAgICAgICBpZiBub3QgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICMgbm8gcGFyYW1ldGVycywgTUVUSF9OT0FSR1MKKworICAgICAgICAgICAgZmxhZ3MgPSAiTUVUSF9OT0FSR1MiCisKKyAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQorICAgICAgICAgICAgICAgICIiIikKKyAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX3Byb3RvdHlwZQorCisgICAgICAgICAgICBpZiBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfcHJvdG90eXBlICsgJ1xuJyArIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICB7eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgICAgICAgICAgICAgICAgICB9fQorICAgICAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSkKKworICAgICAgICBlbGlmIG1ldGhfbzoKKyAgICAgICAgICAgIGZsYWdzID0gIk1FVEhfTyIKKworICAgICAgICAgICAgbWV0aF9vX3Byb3RvdHlwZSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgICAgICAgICAge2NfYmFzZW5hbWV9KHtpbXBsX3BhcmFtZXRlcnN9KQorICAgICAgICAgICAgICAgICIiIikKKworICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgICMgbWFwcyBwZXJmZWN0bHkgdG8gTUVUSF9PLCBkb2Vzbid0IG5lZWQgYSByZXR1cm4gY29udmVydGVyLgorICAgICAgICAgICAgICAgICMgc28gd2Ugc2tpcCBtYWtpbmcgYSBwYXJzZSBmdW5jdGlvbgorICAgICAgICAgICAgICAgICMgYW5kIGNhbGwgZGlyZWN0bHkgaW50byB0aGUgaW1wbCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBpbXBsX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfZGVmaW5pdGlvbiA9ICcnCisgICAgICAgICAgICAgICAgaW1wbF9kZWZpbml0aW9uID0gbWV0aF9vX3Byb3RvdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFNMSUdIVCBIQUNLCisgICAgICAgICAgICAgICAgIyB1c2UgaW1wbF9wYXJhbWV0ZXJzIGZvciB0aGUgcGFyc2VyIGhlcmUhCisgICAgICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IG1ldGhfb19wcm90b3R5cGUKKyAgICAgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUpCisKKyAgICAgICAgZWxpZiBoYXNfb3B0aW9uX2dyb3VwczoKKyAgICAgICAgICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdpdGggb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyAod2UgaGF2ZSB0byBnZW5lcmF0ZSBsb3RzIG9mIFB5QXJnX1BhcnNlVHVwbGUgY2FsbHMKKyAgICAgICAgICAgICMgIGluIGEgYmlnIHN3aXRjaCBzdGF0ZW1lbnQpCisKKyAgICAgICAgICAgIGZsYWdzID0gIk1FVEhfVkFSQVJHUyIKKyAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlX3ZhcmFyZ3MKKworICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlLCAnICAgIHtvcHRpb25fZ3JvdXBfcGFyc2luZ30nKQorCisgICAgICAgIGVsaWYgcG9zaXRpb25hbCBhbmQgYWxsX2JvcmluZ19vYmplY3RzOgorICAgICAgICAgICAgIyBwb3NpdGlvbmFsLW9ubHksIGJ1dCBubyBvcHRpb24gZ3JvdXBzLAorICAgICAgICAgICAgIyBhbmQgbm90aGluZyBidXQgbm9ybWFsIG9iamVjdHM6CisgICAgICAgICAgICAjIFB5QXJnX1VucGFja1R1cGxlIQorCisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX1ZBUkFSR1MiCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZV92YXJhcmdzCisKKyAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAie25hbWV9IiwKKyAgICAgICAgICAgICAgICAgICAge3VucGFja19taW59LCB7dW5wYWNrX21heH0sCisgICAgICAgICAgICAgICAgICAgIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQorCisgICAgICAgIGVsaWYgcG9zaXRpb25hbDoKKyAgICAgICAgICAgICMgcG9zaXRpb25hbC1vbmx5LCBidXQgbm8gb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyB3ZSBvbmx5IG5lZWQgb25lIGNhbGwgdG8gUHlBcmdfUGFyc2VUdXBsZQorCisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX1ZBUkFSR1MiCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZV92YXJhcmdzCisKKyAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLAorICAgICAgICAgICAgICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAiIiIsIGluZGVudD00KSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBwb3NpdGlvbmFsLW9yLWtleXdvcmQgYXJndW1lbnRzCisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUyIKKworICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGVfa2V5d29yZAorCisgICAgICAgICAgICBib2R5ID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwgX2tleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICIiIiwgaW5kZW50PTQpCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgICAgICAgICAgICAgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIF9rZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgIiIiLCBpbmRlbnQ9NCkpCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IGluc2VydF9rZXl3b3JkcyhwYXJzZXJfZGVmaW5pdGlvbikKKworCisgICAgICAgIGlmIG5ld19vcl9pbml0OgorICAgICAgICAgICAgbWV0aG9kZGVmX2RlZmluZSA9ICcnCisKKyAgICAgICAgICAgIGlmIGYua2luZCA9PSBNRVRIT0RfTkVXOgorICAgICAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlX2tleXdvcmQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlX2RlY2xhcmF0aW9uID0gImludCByZXR1cm5fdmFsdWUgPSAtMTsiCisgICAgICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgaW50CisgICAgICAgICAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisgICAgICAgICAgICBmaWVsZHMgPSBsaXN0KHBhcnNlcl9ib2R5X2ZpZWxkcykKKyAgICAgICAgICAgIHBhcnNlc19wb3NpdGlvbmFsID0gJ01FVEhfTk9BUkdTJyBub3QgaW4gZmxhZ3MKKyAgICAgICAgICAgIHBhcnNlc19rZXl3b3JkcyA9ICdNRVRIX0tFWVdPUkRTJyBpbiBmbGFncworICAgICAgICAgICAgaWYgcGFyc2VzX2tleXdvcmRzOgorICAgICAgICAgICAgICAgIGFzc2VydCBwYXJzZXNfcG9zaXRpb25hbAorCisgICAgICAgICAgICBpZiBub3QgcGFyc2VzX2tleXdvcmRzOgorICAgICAgICAgICAgICAgIGZpZWxkcy5pbnNlcnQoMCwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgICAgIGlmICh7c2VsZl90eXBlX2NoZWNrfSFfUHlBcmdfTm9LZXl3b3Jkcygie25hbWV9Iiwga3dhcmdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgIiIiLCBpbmRlbnQ9NCkpCisgICAgICAgICAgICAgICAgaWYgbm90IHBhcnNlc19wb3NpdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBmaWVsZHMuaW5zZXJ0KDAsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHtzZWxmX3R5cGVfY2hlY2t9IV9QeUFyZ19Ob1Bvc2l0aW9uYWwoIntuYW1lfSIsIGFyZ3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQorCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsICpmaWVsZHMpCisgICAgICAgICAgICBpZiBwYXJzZXNfa2V5d29yZHM6CisgICAgICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBpbnNlcnRfa2V5d29yZHMocGFyc2VyX2RlZmluaXRpb24pCisKKworICAgICAgICBpZiBmLm1ldGhvZGRlZl9mbGFnczoKKyAgICAgICAgICAgIGZsYWdzICs9ICd8JyArIGYubWV0aG9kZGVmX2ZsYWdzCisKKyAgICAgICAgbWV0aG9kZGVmX2RlZmluZSA9IG1ldGhvZGRlZl9kZWZpbmUucmVwbGFjZSgne21ldGhvZGRlZl9mbGFnc30nLCBmbGFncykKKworICAgICAgICBtZXRob2RkZWZfaWZuZGVmID0gJycKKyAgICAgICAgY29uZGl0aW9uYWwgPSBzZWxmLmNwcC5jb25kaXRpb24oKQorICAgICAgICBpZiBub3QgY29uZGl0aW9uYWw6CisgICAgICAgICAgICBjcHBfaWYgPSBjcHBfZW5kaWYgPSAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3BwX2lmID0gIiNpZiAiICsgY29uZGl0aW9uYWwKKyAgICAgICAgICAgIGNwcF9lbmRpZiA9ICIjZW5kaWYgLyogIiArIGNvbmRpdGlvbmFsICsgIiAqLyIKKworICAgICAgICAgICAgaWYgbWV0aG9kZGVmX2RlZmluZToKKyAgICAgICAgICAgICAgICBtZXRob2RkZWZfaWZuZGVmID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgICAgICNpZm5kZWYge21ldGhvZGRlZl9uYW1lfQorICAgICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSB7bWV0aG9kZGVmX25hbWV9CisgICAgICAgICAgICAgICAgICAgICNlbmRpZiAvKiAhZGVmaW5lZCh7bWV0aG9kZGVmX25hbWV9KSAqLworICAgICAgICAgICAgICAgICAgICAiIiIpCisKKworICAgICAgICAjIGFkZCAnOycgdG8gdGhlIGVuZCBvZiBwYXJzZXJfcHJvdG90eXBlIGFuZCBpbXBsX3Byb3RvdHlwZQorICAgICAgICAjICh0aGV5IG11c3RuJ3QgYmUgTm9uZSwgYnV0IHRoZXkgY291bGQgYmUgYW4gZW1wdHkgc3RyaW5nLikKKyAgICAgICAgYXNzZXJ0IHBhcnNlcl9wcm90b3R5cGUgaXMgbm90IE5vbmUKKyAgICAgICAgaWYgcGFyc2VyX3Byb3RvdHlwZToKKyAgICAgICAgICAgIGFzc2VydCBub3QgcGFyc2VyX3Byb3RvdHlwZS5lbmRzd2l0aCgnOycpCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlICs9ICc7JworCisgICAgICAgIGlmIGltcGxfcHJvdG90eXBlIGlzIE5vbmU6CisgICAgICAgICAgICBpbXBsX3Byb3RvdHlwZSA9IGltcGxfZGVmaW5pdGlvbgorICAgICAgICBpZiBpbXBsX3Byb3RvdHlwZToKKyAgICAgICAgICAgIGltcGxfcHJvdG90eXBlICs9ICI7IgorCisgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2RlZmluaXRpb24ucmVwbGFjZSgie3JldHVybl92YWx1ZV9kZWNsYXJhdGlvbn0iLCByZXR1cm5fdmFsdWVfZGVjbGFyYXRpb24pCisKKyAgICAgICAgZCA9IHsKKyAgICAgICAgICAgICJkb2NzdHJpbmdfcHJvdG90eXBlIiA6IGRvY3N0cmluZ19wcm90b3R5cGUsCisgICAgICAgICAgICAiZG9jc3RyaW5nX2RlZmluaXRpb24iIDogZG9jc3RyaW5nX2RlZmluaXRpb24sCisgICAgICAgICAgICAiaW1wbF9wcm90b3R5cGUiIDogaW1wbF9wcm90b3R5cGUsCisgICAgICAgICAgICAibWV0aG9kZGVmX2RlZmluZSIgOiBtZXRob2RkZWZfZGVmaW5lLAorICAgICAgICAgICAgInBhcnNlcl9wcm90b3R5cGUiIDogcGFyc2VyX3Byb3RvdHlwZSwKKyAgICAgICAgICAgICJwYXJzZXJfZGVmaW5pdGlvbiIgOiBwYXJzZXJfZGVmaW5pdGlvbiwKKyAgICAgICAgICAgICJpbXBsX2RlZmluaXRpb24iIDogaW1wbF9kZWZpbml0aW9uLAorICAgICAgICAgICAgImNwcF9pZiIgOiBjcHBfaWYsCisgICAgICAgICAgICAiY3BwX2VuZGlmIiA6IGNwcF9lbmRpZiwKKyAgICAgICAgICAgICJtZXRob2RkZWZfaWZuZGVmIiA6IG1ldGhvZGRlZl9pZm5kZWYsCisgICAgICAgIH0KKworICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgZm9yZ2V0IHRvIGFzc2lnbiBzb21ldGhpbmcsCisgICAgICAgICMgYW5kIHdyYXAgZWFjaCBub24tZW1wdHkgdmFsdWUgaW4gXG4ncworICAgICAgICBkMiA9IHt9CisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBhc3NlcnQgdmFsdWUgaXMgbm90IE5vbmUsICJnb3QgYSBOb25lIHZhbHVlIGZvciB0ZW1wbGF0ZSAiICsgcmVwcihuYW1lKQorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAnXG4nICsgdmFsdWUgKyAnXG4nCisgICAgICAgICAgICBkMltuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiBkMgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBncm91cF90b192YXJpYWJsZV9uYW1lKGdyb3VwKToKKyAgICAgICAgYWRqZWN0aXZlID0gImxlZnRfIiBpZiBncm91cCA8IDAgZWxzZSAicmlnaHRfIgorICAgICAgICByZXR1cm4gImdyb3VwXyIgKyBhZGplY3RpdmUgKyBzdHIoYWJzKGdyb3VwKSkKKworICAgIGRlZiByZW5kZXJfb3B0aW9uX2dyb3VwX3BhcnNpbmcoc2VsZiwgZiwgdGVtcGxhdGVfZGljdCk6CisgICAgICAgICMgcG9zaXRpb25hbCBvbmx5LCBncm91cGVkLCBvcHRpb25hbCBhcmd1bWVudHMhCisgICAgICAgICMgY2FuIGJlIG9wdGlvbmFsIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LgorICAgICAgICAjIGhlcmUncyBhbiBleGFtcGxlOgorICAgICAgICAjCisgICAgICAgICMgWyBbIFsgQTEgQTIgXSBCMSBCMiBCMyBdIEMxIEMyIF0gRDEgRDIgRDMgWyBFMSBFMiBFMyBbIEYxIEYyIEYzIF0gXQorICAgICAgICAjCisgICAgICAgICMgSGVyZSBncm91cCBEIGFyZSByZXF1aXJlZCwgYW5kIGFsbCBvdGhlciBncm91cHMgYXJlIG9wdGlvbmFsLgorICAgICAgICAjIChHcm91cCBEJ3MgImdyb3VwIiBpcyBhY3R1YWxseSBOb25lLikKKyAgICAgICAgIyBXZSBjYW4gZmlndXJlIG91dCB3aGljaCBzZXRzIG9mIGFyZ3VtZW50cyB3ZSBoYXZlIGJhc2VkIG9uCisgICAgICAgICMgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBpbiB0aGUgdHVwbGUuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gY291bnQgdXAgb24gYm90aCBzaWRlcy4gIEZvciBleGFtcGxlLAorICAgICAgICAjIHlvdSBjb3VsZCBoYXZlIGdyb3VwcyBDK0QsIG9yIEMrRCtFLCBvciBDK0QrRStGLgorICAgICAgICAjCisgICAgICAgICMgV2hhdCBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWFkcyB1cyB0byBhbiBhbWJpZ3VvdXMgcmVzdWx0PworICAgICAgICAjIENsaW5pYyBwcmVmZXJzIGdyb3VwcyBvbiB0aGUgbGVmdC4gIFNvIGluIHRoZSBhYm92ZSBleGFtcGxlLAorICAgICAgICAjIGZpdmUgYXJndW1lbnRzIHdvdWxkIG1hcCB0byBCK0MsIG5vdCBDK0QuCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcnNbMF0uY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcik6CisgICAgICAgICAgICBkZWwgcGFyYW1ldGVyc1swXQorCisgICAgICAgIGdyb3VwcyA9IFtdCisgICAgICAgIGdyb3VwID0gTm9uZQorICAgICAgICBsZWZ0ID0gW10KKyAgICAgICAgcmlnaHQgPSBbXQorICAgICAgICByZXF1aXJlZCA9IFtdCisgICAgICAgIGxhc3QgPSB1bnNwZWNpZmllZAorCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBncm91cF9pZCA9IHAuZ3JvdXAKKyAgICAgICAgICAgIGlmIGdyb3VwX2lkICE9IGxhc3Q6CisgICAgICAgICAgICAgICAgbGFzdCA9IGdyb3VwX2lkCisgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXQorICAgICAgICAgICAgICAgIGlmIGdyb3VwX2lkIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgbGVmdC5hcHBlbmQoZ3JvdXApCisgICAgICAgICAgICAgICAgZWxpZiBncm91cF9pZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBncm91cCA9IHJlcXVpcmVkCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQuYXBwZW5kKGdyb3VwKQorICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHApCisKKyAgICAgICAgY291bnRfbWluID0gc3lzLm1heHNpemUKKyAgICAgICAgY291bnRfbWF4ID0gLTEKKworICAgICAgICBhZGQoInN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSkge3tcbiIpCisgICAgICAgIGZvciBzdWJzZXQgaW4gcGVybXV0ZV9vcHRpb25hbF9ncm91cHMobGVmdCwgcmVxdWlyZWQsIHJpZ2h0KToKKyAgICAgICAgICAgIGNvdW50ID0gbGVuKHN1YnNldCkKKyAgICAgICAgICAgIGNvdW50X21pbiA9IG1pbihjb3VudF9taW4sIGNvdW50KQorICAgICAgICAgICAgY291bnRfbWF4ID0gbWF4KGNvdW50X21heCwgY291bnQpCisKKyAgICAgICAgICAgIGlmIGNvdW50ID09IDA6CisgICAgICAgICAgICAgICAgYWRkKCIiIiAgICBjYXNlIDA6CisgICAgICAgIGJyZWFrOworIiIiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGdyb3VwX2lkcyA9IHtwLmdyb3VwIGZvciBwIGluIHN1YnNldH0gICMgZWxpbWluYXRlIGR1cGxpY2F0ZXMKKyAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgZFsnY291bnQnXSA9IGNvdW50CisgICAgICAgICAgICBkWyduYW1lJ10gPSBmLm5hbWUKKyAgICAgICAgICAgIGRbJ2dyb3VwcyddID0gc29ydGVkKGdyb3VwX2lkcykKKyAgICAgICAgICAgIGRbJ2Zvcm1hdF91bml0cyddID0gIiIuam9pbihwLmNvbnZlcnRlci5mb3JtYXRfdW5pdCBmb3IgcCBpbiBzdWJzZXQpCisKKyAgICAgICAgICAgIHBhcnNlX2FyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBzdWJzZXQ6CisgICAgICAgICAgICAgICAgcC5jb252ZXJ0ZXIucGFyc2VfYXJndW1lbnQocGFyc2VfYXJndW1lbnRzKQorICAgICAgICAgICAgZFsncGFyc2VfYXJndW1lbnRzJ10gPSAiLCAiLmpvaW4ocGFyc2VfYXJndW1lbnRzKQorCisgICAgICAgICAgICBncm91cF9pZHMuZGlzY2FyZCgwKQorICAgICAgICAgICAgbGluZXMgPSBbc2VsZi5ncm91cF90b192YXJpYWJsZV9uYW1lKGcpICsgIiA9IDE7IiBmb3IgZyBpbiBncm91cF9pZHNdCisgICAgICAgICAgICBsaW5lcyA9ICJcbiIuam9pbihsaW5lcykKKworICAgICAgICAgICAgcyA9ICIiIgorICAgIGNhc2Uge2NvdW50fToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIHtncm91cF9ib29sZWFuc30KKyAgICAgICAgYnJlYWs7CisiIiJbMTpdCisgICAgICAgICAgICBzID0gbGluZWFyX2Zvcm1hdChzLCBncm91cF9ib29sZWFucz1saW5lcykKKyAgICAgICAgICAgIHMgPSBzLmZvcm1hdF9tYXAoZCkKKyAgICAgICAgICAgIGFkZChzKQorCisgICAgICAgIGFkZCgiICAgIGRlZmF1bHQ6XG4iKQorICAgICAgICBzID0gJyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInt9IHJlcXVpcmVzIHt9IHRvIHt9IGFyZ3VtZW50cyIpO1xuJworICAgICAgICBhZGQocy5mb3JtYXQoZi5mdWxsX25hbWUsIGNvdW50X21pbiwgY291bnRfbWF4KSkKKyAgICAgICAgYWRkKCcgICAgICAgIGdvdG8gZXhpdDtcbicpCisgICAgICAgIGFkZCgifX0iKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydvcHRpb25fZ3JvdXBfcGFyc2luZyddID0gb3V0cHV0KCkKKworICAgIGRlZiByZW5kZXJfZnVuY3Rpb24oc2VsZiwgY2xpbmljLCBmKToKKyAgICAgICAgaWYgbm90IGY6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBkYXRhID0gQ1JlbmRlckRhdGEoKQorCisgICAgICAgIGFzc2VydCBmLnBhcmFtZXRlcnMsICJXZSBzaG91bGQgYWx3YXlzIGhhdmUgYSAnc2VsZicgYXQgdGhpcyBwb2ludCEiCisgICAgICAgIHBhcmFtZXRlcnMgPSBmLnJlbmRlcl9wYXJhbWV0ZXJzCisgICAgICAgIGNvbnZlcnRlcnMgPSBbcC5jb252ZXJ0ZXIgZm9yIHAgaW4gcGFyYW1ldGVyc10KKworICAgICAgICB0ZW1wbGF0ZXMgPSBzZWxmLm91dHB1dF90ZW1wbGF0ZXMoZikKKworICAgICAgICBmX3NlbGYgPSBwYXJhbWV0ZXJzWzBdCisgICAgICAgIHNlbGZsZXNzID0gcGFyYW1ldGVyc1sxOl0KKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZl9zZWxmLmNvbnZlcnRlciwgc2VsZl9jb252ZXJ0ZXIpLCAiTm8gc2VsZiBwYXJhbWV0ZXIgaW4gIiArIHJlcHIoZi5mdWxsX25hbWUpICsgIiEiCisKKyAgICAgICAgbGFzdF9ncm91cCA9IDAKKyAgICAgICAgZmlyc3Rfb3B0aW9uYWwgPSBsZW4oc2VsZmxlc3MpCisgICAgICAgIHBvc2l0aW9uYWwgPSBzZWxmbGVzcyBhbmQgc2VsZmxlc3NbLTFdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgICAgIG5ld19vcl9pbml0ID0gZi5raW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkKKyAgICAgICAgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyID0gKG5vdCBmLnJldHVybl9jb252ZXJ0ZXIgb3IKKyAgICAgICAgICAgIGYucmV0dXJuX2NvbnZlcnRlci50eXBlID09ICdQeU9iamVjdCAqJykKKyAgICAgICAgaGFzX29wdGlvbl9ncm91cHMgPSBGYWxzZQorCisgICAgICAgICMgb2Zmc2V0IGkgYnkgLTEgYmVjYXVzZSBmaXJzdF9vcHRpb25hbCBuZWVkcyB0byBpZ25vcmUgc2VsZgorICAgICAgICBmb3IgaSwgcCBpbiBlbnVtZXJhdGUocGFyYW1ldGVycywgLTEpOgorICAgICAgICAgICAgYyA9IHAuY29udmVydGVyCisKKyAgICAgICAgICAgIGlmIChpICE9IC0xKSBhbmQgKHAuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQpOgorICAgICAgICAgICAgICAgIGZpcnN0X29wdGlvbmFsID0gbWluKGZpcnN0X29wdGlvbmFsLCBpKQorCisgICAgICAgICAgICAjIGluc2VydCBncm91cCB2YXJpYWJsZQorICAgICAgICAgICAgZ3JvdXAgPSBwLmdyb3VwCisgICAgICAgICAgICBpZiBsYXN0X2dyb3VwICE9IGdyb3VwOgorICAgICAgICAgICAgICAgIGxhc3RfZ3JvdXAgPSBncm91cAorICAgICAgICAgICAgICAgIGlmIGdyb3VwOgorICAgICAgICAgICAgICAgICAgICBncm91cF9uYW1lID0gc2VsZi5ncm91cF90b192YXJpYWJsZV9uYW1lKGdyb3VwKQorICAgICAgICAgICAgICAgICAgICBkYXRhLmltcGxfYXJndW1lbnRzLmFwcGVuZChncm91cF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoImludCAiICsgZ3JvdXBfbmFtZSArICIgPSAwOyIpCisgICAgICAgICAgICAgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZCgiaW50ICIgKyBncm91cF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBoYXNfb3B0aW9uX2dyb3VwcyA9IFRydWUKKworICAgICAgICAgICAgYy5yZW5kZXIocCwgZGF0YSkKKworICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwcyBhbmQgKG5vdCBwb3NpdGlvbmFsKToKKyAgICAgICAgICAgIGZhaWwoIllvdSBjYW5ub3QgdXNlIG9wdGlvbmFsIGdyb3VwcyAoJ1snIGFuZCAnXScpXG51bmxlc3MgYWxsIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWwtb25seSAoJy8nKS4iKQorCisgICAgICAgICMgSEFDSworICAgICAgICAjIHdoZW4gd2UncmUgTUVUSF9PLCBidXQgaGF2ZSBhIGN1c3RvbSByZXR1cm4gY29udmVydGVyLAorICAgICAgICAjIHdlIHVzZSAiaW1wbF9wYXJhbWV0ZXJzIiBmb3IgdGhlIHBhcnNpbmcgZnVuY3Rpb24KKyAgICAgICAgIyBiZWNhdXNlIHRoYXQgd29ya3MgYmV0dGVyLiAgYnV0IHRoYXQgbWVhbnMgd2UgbXVzdAorICAgICAgICAjIHN1cHJlc3MgYWN0dWFsbHkgZGVjbGFyaW5nIHRoZSBpbXBsJ3MgcGFyYW1ldGVycworICAgICAgICAjIGFzIHZhcmlhYmxlcyBpbiB0aGUgcGFyc2luZyBmdW5jdGlvbi4gIGJ1dCBzaW5jZSBpdCdzCisgICAgICAgICMgTUVUSF9PLCB3ZSBoYXZlIGV4YWN0bHkgb25lIGFueXdheSwgc28gd2Uga25vdyBleGFjdGx5CisgICAgICAgICMgd2hlcmUgaXQgaXMuCisgICAgICAgIGlmICgiTUVUSF9PIiBpbiB0ZW1wbGF0ZXNbJ21ldGhvZGRlZl9kZWZpbmUnXSBhbmQKKyAgICAgICAgICAgIG5vdCBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIpOgorICAgICAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMucG9wKDApCisKKyAgICAgICAgdGVtcGxhdGVfZGljdCA9IHt9CisKKyAgICAgICAgZnVsbF9uYW1lID0gZi5mdWxsX25hbWUKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZnVsbF9uYW1lJ10gPSBmdWxsX25hbWUKKworICAgICAgICBpZiBuZXdfb3JfaW5pdDoKKyAgICAgICAgICAgIG5hbWUgPSBmLmNscy5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gZi5uYW1lCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnbmFtZSddID0gbmFtZQorCisgICAgICAgIGlmIGYuY19iYXNlbmFtZToKKyAgICAgICAgICAgIGNfYmFzZW5hbWUgPSBmLmNfYmFzZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcyA9IGZ1bGxfbmFtZS5zcGxpdCgiLiIpCisgICAgICAgICAgICBpZiBmaWVsZHNbLTFdID09ICdfX25ld19fJzoKKyAgICAgICAgICAgICAgICBmaWVsZHMucG9wKCkKKyAgICAgICAgICAgIGNfYmFzZW5hbWUgPSAiXyIuam9pbihmaWVsZHMpCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnY19iYXNlbmFtZSddID0gY19iYXNlbmFtZQorCisgICAgICAgIG1ldGhvZGRlZl9uYW1lID0gInt9X01FVEhPRERFRiIuZm9ybWF0KGNfYmFzZW5hbWUudXBwZXIoKSkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnbWV0aG9kZGVmX25hbWUnXSA9IG1ldGhvZGRlZl9uYW1lCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZG9jc3RyaW5nJ10gPSBzZWxmLmRvY3N0cmluZ19mb3JfY19zdHJpbmcoZikKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WydzZWxmX25hbWUnXSA9IHRlbXBsYXRlX2RpY3RbJ3NlbGZfdHlwZSddID0gdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlX2NoZWNrJ10gPSAnJworICAgICAgICBmX3NlbGYuY29udmVydGVyLnNldF90ZW1wbGF0ZV9kaWN0KHRlbXBsYXRlX2RpY3QpCisKKyAgICAgICAgZi5yZXR1cm5fY29udmVydGVyLnJlbmRlcihmLCBkYXRhKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX3JldHVybl90eXBlJ10gPSBmLnJldHVybl9jb252ZXJ0ZXIudHlwZQorCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2RlY2xhcmF0aW9ucyddID0gIlxuIi5qb2luKGRhdGEuZGVjbGFyYXRpb25zKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydpbml0aWFsaXplcnMnXSA9ICJcblxuIi5qb2luKGRhdGEuaW5pdGlhbGl6ZXJzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydtb2RpZmljYXRpb25zJ10gPSAnXG5cbicuam9pbihkYXRhLm1vZGlmaWNhdGlvbnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2tleXdvcmRzJ10gPSAnIicgKyAnIiwgIicuam9pbihkYXRhLmtleXdvcmRzKSArICciJworICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydmb3JtYXRfdW5pdHMnXSA9ICcnLmpvaW4oZGF0YS5mb3JtYXRfdW5pdHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3BhcnNlX2FyZ3VtZW50cyddID0gJywgJy5qb2luKGRhdGEucGFyc2VfYXJndW1lbnRzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX3BhcmFtZXRlcnMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfcGFyYW1ldGVycykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9hcmd1bWVudHMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfYXJndW1lbnRzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddID0gIiIuam9pbihkYXRhLnJldHVybl9jb252ZXJzaW9uKS5yc3RyaXAoKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydjbGVhbnVwJ10gPSAiIi5qb2luKGRhdGEuY2xlYW51cCkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncmV0dXJuX3ZhbHVlJ10gPSBkYXRhLnJldHVybl92YWx1ZQorCisgICAgICAgICMgdXNlZCBieSB1bnBhY2sgdHVwbGUgY29kZSBnZW5lcmF0b3IKKyAgICAgICAgaWdub3JlX3NlbGYgPSAtMSBpZiBpc2luc3RhbmNlKGNvbnZlcnRlcnNbMF0sIHNlbGZfY29udmVydGVyKSBlbHNlIDAKKyAgICAgICAgdW5wYWNrX21pbiA9IGZpcnN0X29wdGlvbmFsCisgICAgICAgIHVucGFja19tYXggPSBsZW4oc2VsZmxlc3MpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3VucGFja19taW4nXSA9IHN0cih1bnBhY2tfbWluKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0Wyd1bnBhY2tfbWF4J10gPSBzdHIodW5wYWNrX21heCkKKworICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwczoKKyAgICAgICAgICAgIHNlbGYucmVuZGVyX29wdGlvbl9ncm91cF9wYXJzaW5nKGYsIHRlbXBsYXRlX2RpY3QpCisKKyAgICAgICAgZm9yIG5hbWUsIGRlc3RpbmF0aW9uIGluIGNsaW5pYy5maWVsZF9kZXN0aW5hdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVzW25hbWVdCisgICAgICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwczoKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fZ3JvdXBfcGFyc2luZz10ZW1wbGF0ZV9kaWN0WydvcHRpb25fZ3JvdXBfcGFyc2luZyddKQorICAgICAgICAgICAgdGVtcGxhdGUgPSBsaW5lYXJfZm9ybWF0KHRlbXBsYXRlLAorICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucz10ZW1wbGF0ZV9kaWN0WydkZWNsYXJhdGlvbnMnXSwKKyAgICAgICAgICAgICAgICByZXR1cm5fY29udmVyc2lvbj10ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddLAorICAgICAgICAgICAgICAgIGluaXRpYWxpemVycz10ZW1wbGF0ZV9kaWN0Wydpbml0aWFsaXplcnMnXSwKKyAgICAgICAgICAgICAgICBtb2RpZmljYXRpb25zPXRlbXBsYXRlX2RpY3RbJ21vZGlmaWNhdGlvbnMnXSwKKyAgICAgICAgICAgICAgICBjbGVhbnVwPXRlbXBsYXRlX2RpY3RbJ2NsZWFudXAnXSwKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgT25seSBnZW5lcmF0ZSB0aGUgImV4aXQ6IiBsYWJlbAorICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIGFueSBnb3RvcworICAgICAgICAgICAgbmVlZF9leGl0X2xhYmVsID0gImdvdG8gZXhpdDsiIGluIHRlbXBsYXRlCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICAgICAgZXhpdF9sYWJlbD0iZXhpdDoiIGlmIG5lZWRfZXhpdF9sYWJlbCBlbHNlICcnCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICBzID0gdGVtcGxhdGUuZm9ybWF0X21hcCh0ZW1wbGF0ZV9kaWN0KQorCisgICAgICAgICAgICBpZiBjbGluaWMubGluZV9wcmVmaXg6CisgICAgICAgICAgICAgICAgcyA9IGluZGVudF9hbGxfbGluZXMocywgY2xpbmljLmxpbmVfcHJlZml4KQorICAgICAgICAgICAgaWYgY2xpbmljLmxpbmVfc3VmZml4OgorICAgICAgICAgICAgICAgIHMgPSBzdWZmaXhfYWxsX2xpbmVzKHMsIGNsaW5pYy5saW5lX3N1ZmZpeCkKKworICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKHMpCisKKyAgICAgICAgcmV0dXJuIGNsaW5pYy5nZXRfZGVzdGluYXRpb24oJ2Jsb2NrJykuZHVtcCgpCisKKworCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgT3ZlcnJpZGVTdGRpb1dpdGgoc3Rkb3V0KToKKyAgICBzYXZlZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAorICAgIHRyeToKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICBhc3NlcnQgc3lzLnN0ZG91dCBpcyBzdGRvdXQKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVkX3N0ZG91dAorCisKK2RlZiBjcmVhdGVfcmVnZXgoYmVmb3JlLCBhZnRlciwgd29yZD1UcnVlLCB3aG9sZV9saW5lPVRydWUpOgorICAgICIiIkNyZWF0ZSBhbiByZSBvYmplY3QgZm9yIG1hdGNoaW5nIG1hcmtlciBsaW5lcy4iIiIKKyAgICBncm91cF9yZSA9ICJcdysiIGlmIHdvcmQgZWxzZSAiLisiCisgICAgcGF0dGVybiA9IHIne30oe30pe30nCisgICAgaWYgd2hvbGVfbGluZToKKyAgICAgICAgcGF0dGVybiA9ICdeJyArIHBhdHRlcm4gKyAnJCcKKyAgICBwYXR0ZXJuID0gcGF0dGVybi5mb3JtYXQocmUuZXNjYXBlKGJlZm9yZSksIGdyb3VwX3JlLCByZS5lc2NhcGUoYWZ0ZXIpKQorICAgIHJldHVybiByZS5jb21waWxlKHBhdHRlcm4pCisKKworY2xhc3MgQmxvY2s6CisgICAgciIiIgorICAgIFJlcHJlc2VudHMgYSBzaW5nbGUgYmxvY2sgb2YgdGV4dCBlbWJlZGRlZCBpbgorICAgIGFub3RoZXIgZmlsZS4gIElmIGRzbF9uYW1lIGlzIE5vbmUsIHRoZSBibG9jayByZXByZXNlbnRzCisgICAgdmVyYmF0aW0gdGV4dCwgcmF3IG9yaWdpbmFsIHRleHQgZnJvbSB0aGUgZmlsZSwgaW4KKyAgICB3aGljaCBjYXNlICJpbnB1dCIgd2lsbCBiZSB0aGUgb25seSBub24tZmFsc2UgbWVtYmVyLgorICAgIElmIGRzbF9uYW1lIGlzIG5vdCBOb25lLCB0aGUgYmxvY2sgcmVwcmVzZW50cyBhIENsaW5pYworICAgIGJsb2NrLgorCisgICAgaW5wdXQgaXMgYWx3YXlzIHN0ciwgd2l0aCBlbWJlZGRlZCBcbiBjaGFyYWN0ZXJzLgorICAgIGlucHV0IHJlcHJlc2VudHMgdGhlIG9yaWdpbmFsIHRleHQgZnJvbSB0aGUgZmlsZTsKKyAgICBpZiBpdCdzIGEgQ2xpbmljIGJsb2NrLCBpdCBpcyB0aGUgb3JpZ2luYWwgdGV4dCB3aXRoCisgICAgdGhlIGJvZHlfcHJlZml4IGFuZCByZWR1bmRhbnQgbGVhZGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQuCisKKyAgICBkc2xfbmFtZSBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJZiBzdHIsIGl0J3MgdGhlIHRleHQKKyAgICBmb3VuZCBvbiB0aGUgc3RhcnQgbGluZSBvZiB0aGUgYmxvY2sgYmV0d2VlbiB0aGUgc3F1YXJlCisgICAgYnJhY2tldHMuCisKKyAgICBzaWduYXR1cmVzIGlzIGVpdGhlciBsaXN0IG9yIE5vbmUuICBJZiBpdCdzIGEgbGlzdCwKKyAgICBpdCBtYXkgb25seSBjb250YWluIGNsaW5pYy5Nb2R1bGUsIGNsaW5pYy5DbGFzcywgYW5kCisgICAgY2xpbmljLkZ1bmN0aW9uIG9iamVjdHMuICBBdCB0aGUgbW9tZW50IGl0IHNob3VsZAorICAgIGNvbnRhaW4gYXQgbW9zdCBvbmUgb2YgZWFjaC4KKworICAgIG91dHB1dCBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJZiBzdHIsIGl0J3MgdGhlIG91dHB1dAorICAgIGZyb20gdGhpcyBibG9jaywgd2l0aCBlbWJlZGRlZCAnXG4nIGNoYXJhY3RlcnMuCisKKyAgICBpbmRlbnQgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSXQncyB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlCisgICAgdGhhdCB3YXMgZm91bmQgb24gZXZlcnkgbGluZSBvZiBpbnB1dC4gIChJZiBib2R5X3ByZWZpeCBpcworICAgIG5vdCBlbXB0eSwgdGhpcyBpcyB0aGUgaW5kZW50ICphZnRlciogcmVtb3ZpbmcgdGhlCisgICAgYm9keV9wcmVmaXguKQorCisgICAgcHJlaW5kZW50IGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIEl0J3MgdGhlIHdoaXRlc3BhY2UgdGhhdAorICAgIHdhcyBmb3VuZCBpbiBmcm9udCBvZiBldmVyeSBsaW5lIG9mIGlucHV0ICpiZWZvcmUqIHRoZQorICAgICJib2R5X3ByZWZpeCIgKHNlZSB0aGUgTGFuZ3VhZ2Ugb2JqZWN0KS4gIElmIGJvZHlfcHJlZml4CisgICAgaXMgZW1wdHksIHByZWluZGVudCBtdXN0IGFsd2F5cyBiZSBlbXB0eSB0b28uCisKKyAgICBUbyBpbGx1c3RyYXRlIGluZGVudCBhbmQgcHJlaW5kZW50OiBBc3N1bWUgdGhhdCAnXycKKyAgICByZXByZXNlbnRzIHdoaXRlc3BhY2UuICBJZiB0aGUgYmxvY2sgcHJvY2Vzc2VkIHdhcyBpbiBhCisgICAgUHl0aG9uIGZpbGUsIGFuZCBsb29rZWQgbGlrZSB0aGlzOgorICAgICAgX19fXyMvKltweXRob25dCisgICAgICBfX19fI19fZm9yIGEgaW4gcmFuZ2UoMjApOgorICAgICAgX19fXyNfX19fcHJpbnQoYSkKKyAgICAgIF9fX18jW3B5dGhvbl0qLworICAgICJwcmVpbmRlbnQiIHdvdWxkIGJlICJfX19fIiBhbmQgImluZGVudCIgd291bGQgYmUgIl9fIi4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dCwgZHNsX25hbWU9Tm9uZSwgc2lnbmF0dXJlcz1Ob25lLCBvdXRwdXQ9Tm9uZSwgaW5kZW50PScnLCBwcmVpbmRlbnQ9JycpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpbnB1dCwgc3RyKQorICAgICAgICBzZWxmLmlucHV0ID0gaW5wdXQKKyAgICAgICAgc2VsZi5kc2xfbmFtZSA9IGRzbF9uYW1lCisgICAgICAgIHNlbGYuc2lnbmF0dXJlcyA9IHNpZ25hdHVyZXMgb3IgW10KKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKKyAgICAgICAgc2VsZi5wcmVpbmRlbnQgPSBwcmVpbmRlbnQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgZHNsX25hbWUgPSBzZWxmLmRzbF9uYW1lIG9yICJ0ZXh0IgorICAgICAgICBkZWYgc3VtbWFyaXplKHMpOgorICAgICAgICAgICAgcyA9IHJlcHIocykKKyAgICAgICAgICAgIGlmIGxlbihzKSA+IDMwOgorICAgICAgICAgICAgICAgIHJldHVybiBzWzoyNl0gKyAiLi4uIiArIHNbMF0KKyAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgIHJldHVybiAiIi5qb2luKCgKKyAgICAgICAgICAgICI8QmxvY2sgIiwgZHNsX25hbWUsICIgaW5wdXQ9Iiwgc3VtbWFyaXplKHNlbGYuaW5wdXQpLCAiIG91dHB1dD0iLCBzdW1tYXJpemUoc2VsZi5vdXRwdXQpLCAiPiIpKQorCisKK2NsYXNzIEJsb2NrUGFyc2VyOgorICAgICIiIgorICAgIEJsb2NrLW9yaWVudGVkIHBhcnNlciBmb3IgQXJndW1lbnQgQ2xpbmljLgorICAgIEl0ZXJhdG9yLCB5aWVsZHMgQmxvY2sgb2JqZWN0cy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dCwgbGFuZ3VhZ2UsICosIHZlcmlmeT1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgICJpbnB1dCIgc2hvdWxkIGJlIGEgc3RyIG9iamVjdAorICAgICAgICB3aXRoIGVtYmVkZGVkIFxuIGNoYXJhY3RlcnMuCisKKyAgICAgICAgImxhbmd1YWdlIiBzaG91bGQgYmUgYSBMYW5ndWFnZSBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBsYW5ndWFnZS52YWxpZGF0ZSgpCisKKyAgICAgICAgc2VsZi5pbnB1dCA9IGNvbGxlY3Rpb25zLmRlcXVlKHJldmVyc2VkKGlucHV0LnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpKQorICAgICAgICBzZWxmLmJsb2NrX3N0YXJ0X2xpbmVfbnVtYmVyID0gc2VsZi5saW5lX251bWJlciA9IDAKKworICAgICAgICBzZWxmLmxhbmd1YWdlID0gbGFuZ3VhZ2UKKyAgICAgICAgYmVmb3JlLCBfLCBhZnRlciA9IGxhbmd1YWdlLnN0YXJ0X2xpbmUucGFydGl0aW9uKCd7ZHNsX25hbWV9JykKKyAgICAgICAgYXNzZXJ0IF8gPT0gJ3tkc2xfbmFtZX0nCisgICAgICAgIHNlbGYuZmluZF9zdGFydF9yZSA9IGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyLCB3aG9sZV9saW5lPUZhbHNlKQorICAgICAgICBzZWxmLnN0YXJ0X3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIpCisgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CisgICAgICAgIHNlbGYubGFzdF9jaGVja3N1bV9yZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X2RzbF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLmRzbF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLmZpcnN0X2Jsb2NrID0gVHJ1ZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5wdXQ6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgICAgICAgICBpZiBzZWxmLmRzbF9uYW1lOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYucGFyc2VfY2xpbmljX2Jsb2NrKHNlbGYuZHNsX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5kc2xfbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmZpcnN0X2Jsb2NrID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCisgICAgICAgICAgICBibG9jayA9IHNlbGYucGFyc2VfdmVyYmF0aW1fYmxvY2soKQorICAgICAgICAgICAgaWYgc2VsZi5maXJzdF9ibG9jayBhbmQgbm90IGJsb2NrLmlucHV0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmZpcnN0X2Jsb2NrID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBibG9jaworCisKKyAgICBkZWYgaXNfc3RhcnRfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLnN0YXJ0X3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCisgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKworICAgIGRlZiBfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5saW5lX251bWJlciArPSAxCisgICAgICAgIGxpbmUgPSBzZWxmLmlucHV0LnBvcCgpCisgICAgICAgIHNlbGYubGFuZ3VhZ2UucGFyc2VfbGluZShsaW5lKQorICAgICAgICByZXR1cm4gbGluZQorCisgICAgZGVmIHBhcnNlX3ZlcmJhdGltX2Jsb2NrKHNlbGYpOgorICAgICAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBzZWxmLmJsb2NrX3N0YXJ0X2xpbmVfbnVtYmVyID0gc2VsZi5saW5lX251bWJlcgorCisgICAgICAgIHdoaWxlIHNlbGYuaW5wdXQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fbGluZSgpCisgICAgICAgICAgICBkc2xfbmFtZSA9IHNlbGYuaXNfc3RhcnRfbGluZShsaW5lKQorICAgICAgICAgICAgaWYgZHNsX25hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5kc2xfbmFtZSA9IGRzbF9uYW1lCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGFkZChsaW5lKQorCisgICAgICAgIHJldHVybiBCbG9jayhvdXRwdXQoKSkKKworICAgIGRlZiBwYXJzZV9jbGluaWNfYmxvY2soc2VsZiwgZHNsX25hbWUpOgorICAgICAgICBpbnB1dF9hZGQsIGlucHV0X291dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBzZWxmLmJsb2NrX3N0YXJ0X2xpbmVfbnVtYmVyID0gc2VsZi5saW5lX251bWJlciArIDEKKyAgICAgICAgc3RvcF9saW5lID0gc2VsZi5sYW5ndWFnZS5zdG9wX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorICAgICAgICBib2R5X3ByZWZpeCA9IHNlbGYubGFuZ3VhZ2UuYm9keV9wcmVmaXguZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorCisgICAgICAgIGRlZiBpc19zdG9wX2xpbmUobGluZSk6CisgICAgICAgICAgICAjIG1ha2Ugc3VyZSB0byByZWNvZ25pemUgc3RvcCBsaW5lIGV2ZW4gaWYgaXQKKyAgICAgICAgICAgICMgZG9lc24ndCBlbmQgd2l0aCBFT0wgKGl0IGNvdWxkIGJlIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoc3RvcF9saW5lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJlbWFpbmRlciA9IGxpbmVbbGVuKHN0b3BfbGluZSk6XQorICAgICAgICAgICAgcmV0dXJuIChub3QgcmVtYWluZGVyKSBvciByZW1haW5kZXIuaXNzcGFjZSgpCisKKyAgICAgICAgIyBjb25zdW1lIGJvZHkgb2YgcHJvZ3JhbQorICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgaWYgaXNfc3RvcF9saW5lKGxpbmUpIG9yIHNlbGYuaXNfc3RhcnRfbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgYm9keV9wcmVmaXg6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGluZS5zdGFydHN3aXRoKGJvZHlfcHJlZml4KQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW2xlbihib2R5X3ByZWZpeCk6XQorICAgICAgICAgICAgaW5wdXRfYWRkKGxpbmUpCisKKyAgICAgICAgIyBjb25zdW1lIG91dHB1dCBhbmQgY2hlY2tzdW0gbGluZSwgaWYgcHJlc2VudC4KKyAgICAgICAgaWYgc2VsZi5sYXN0X2RzbF9uYW1lID09IGRzbF9uYW1lOgorICAgICAgICAgICAgY2hlY2tzdW1fcmUgPSBzZWxmLmxhc3RfY2hlY2tzdW1fcmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJlZm9yZSwgXywgYWZ0ZXIgPSBzZWxmLmxhbmd1YWdlLmNoZWNrc3VtX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lLCBhcmd1bWVudHM9J3thcmd1bWVudHN9JykucGFydGl0aW9uKCd7YXJndW1lbnRzfScpCisgICAgICAgICAgICBhc3NlcnQgXyA9PSAne2FyZ3VtZW50c30nCisgICAgICAgICAgICBjaGVja3N1bV9yZSA9IGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyLCB3b3JkPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5sYXN0X2RzbF9uYW1lID0gZHNsX25hbWUKKyAgICAgICAgICAgIHNlbGYubGFzdF9jaGVja3N1bV9yZSA9IGNoZWNrc3VtX3JlCisKKyAgICAgICAgIyBzY2FuIGZvcndhcmQgZm9yIGNoZWNrc3VtIGxpbmUKKyAgICAgICAgb3V0cHV0X2FkZCwgb3V0cHV0X291dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBhcmd1bWVudHMgPSBOb25lCisgICAgICAgIHdoaWxlIHNlbGYuaW5wdXQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fbGluZSgpCisgICAgICAgICAgICBtYXRjaCA9IGNoZWNrc3VtX3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCisgICAgICAgICAgICBhcmd1bWVudHMgPSBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKyAgICAgICAgICAgIGlmIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgb3V0cHV0X2FkZChsaW5lKQorICAgICAgICAgICAgaWYgc2VsZi5pc19zdGFydF9saW5lKGxpbmUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgb3V0cHV0ID0gb3V0cHV0X291dHB1dCgpCisgICAgICAgIGlmIGFyZ3VtZW50czoKKyAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgZm9yIGZpZWxkIGluIHNobGV4LnNwbGl0KGFyZ3VtZW50cyk6CisgICAgICAgICAgICAgICAgbmFtZSwgZXF1YWxzLCB2YWx1ZSA9IGZpZWxkLnBhcnRpdGlvbignPScpCisgICAgICAgICAgICAgICAgaWYgbm90IGVxdWFsczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiTWFuZ2xlZCBBcmd1bWVudCBDbGluaWMgbWFya2VyIGxpbmU6IHshcn0iLmZvcm1hdChsaW5lKSkKKyAgICAgICAgICAgICAgICBkW25hbWUuc3RyaXAoKV0gPSB2YWx1ZS5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIHNlbGYudmVyaWZ5OgorICAgICAgICAgICAgICAgIGlmICdpbnB1dCcgaW4gZDoKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBkWydvdXRwdXQnXQorICAgICAgICAgICAgICAgICAgICBpbnB1dF9jaGVja3N1bSA9IGRbJ2lucHV0J10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGRbJ2NoZWNrc3VtJ10KKyAgICAgICAgICAgICAgICAgICAgaW5wdXRfY2hlY2tzdW0gPSBOb25lCisKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IGNvbXB1dGVfY2hlY2tzdW0ob3V0cHV0LCBsZW4oY2hlY2tzdW0pKQorICAgICAgICAgICAgICAgIGlmIGNoZWNrc3VtICE9IGNvbXB1dGVkOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJDaGVja3N1bSBtaXNtYXRjaCFcbkV4cGVjdGVkOiB7fVxuQ29tcHV0ZWQ6IHt9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIlN1Z2dlc3RlZCBmaXg6IHJlbW92ZSBhbGwgZ2VuZXJhdGVkIGNvZGUgaW5jbHVkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGVuZCBtYXJrZXIsXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIHVzZSB0aGUgJy1mJyBvcHRpb24uIgorICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChjaGVja3N1bSwgY29tcHV0ZWQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBwdXQgYmFjayBvdXRwdXQKKyAgICAgICAgICAgIG91dHB1dF9saW5lcyA9IG91dHB1dC5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCisgICAgICAgICAgICBzZWxmLmxpbmVfbnVtYmVyIC09IGxlbihvdXRwdXRfbGluZXMpCisgICAgICAgICAgICBzZWxmLmlucHV0LmV4dGVuZChyZXZlcnNlZChvdXRwdXRfbGluZXMpKQorICAgICAgICAgICAgb3V0cHV0ID0gTm9uZQorCisgICAgICAgIHJldHVybiBCbG9jayhpbnB1dF9vdXRwdXQoKSwgZHNsX25hbWUsIG91dHB1dD1vdXRwdXQpCisKKworY2xhc3MgQmxvY2tQcmludGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhbmd1YWdlLCBmPU5vbmUpOgorICAgICAgICBzZWxmLmxhbmd1YWdlID0gbGFuZ3VhZ2UKKyAgICAgICAgc2VsZi5mID0gZiBvciBpby5TdHJpbmdJTygpCisKKyAgICBkZWYgcHJpbnRfYmxvY2soc2VsZiwgYmxvY2spOgorICAgICAgICBpbnB1dCA9IGJsb2NrLmlucHV0CisgICAgICAgIG91dHB1dCA9IGJsb2NrLm91dHB1dAorICAgICAgICBkc2xfbmFtZSA9IGJsb2NrLmRzbF9uYW1lCisgICAgICAgIHdyaXRlID0gc2VsZi5mLndyaXRlCisKKyAgICAgICAgYXNzZXJ0IG5vdCAoKGRzbF9uYW1lID09IE5vbmUpIF4gKG91dHB1dCA9PSBOb25lKSksICJ5b3UgbXVzdCBzcGVjaWZ5IGRzbF9uYW1lIGFuZCBvdXRwdXQgdG9nZXRoZXIsIGRzbF9uYW1lICIgKyByZXByKGRzbF9uYW1lKQorCisgICAgICAgIGlmIG5vdCBkc2xfbmFtZToKKyAgICAgICAgICAgIHdyaXRlKGlucHV0KQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoc2VsZi5sYW5ndWFnZS5zdGFydF9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSkpCisgICAgICAgIHdyaXRlKCJcbiIpCisKKyAgICAgICAgYm9keV9wcmVmaXggPSBzZWxmLmxhbmd1YWdlLmJvZHlfcHJlZml4LmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSkKKyAgICAgICAgaWYgbm90IGJvZHlfcHJlZml4OgorICAgICAgICAgICAgd3JpdGUoaW5wdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBpbnB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICB3cml0ZShib2R5X3ByZWZpeCkKKyAgICAgICAgICAgICAgICB3cml0ZShsaW5lKQorICAgICAgICAgICAgICAgIHdyaXRlKCJcbiIpCisKKyAgICAgICAgd3JpdGUoc2VsZi5sYW5ndWFnZS5zdG9wX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKSkKKyAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICBpbnB1dCA9ICcnLmpvaW4oYmxvY2suaW5wdXQpCisgICAgICAgIG91dHB1dCA9ICcnLmpvaW4oYmxvY2sub3V0cHV0KQorICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICBpZiBub3Qgb3V0cHV0LmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXG4nCisgICAgICAgICAgICB3cml0ZShvdXRwdXQpCisKKyAgICAgICAgYXJndW1lbnRzPSJvdXRwdXQ9e30gaW5wdXQ9e30iLmZvcm1hdChjb21wdXRlX2NoZWNrc3VtKG91dHB1dCwgMTYpLCBjb21wdXRlX2NoZWNrc3VtKGlucHV0LCAxNikpCisgICAgICAgIHdyaXRlKHNlbGYubGFuZ3VhZ2UuY2hlY2tzdW1fbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUsIGFyZ3VtZW50cz1hcmd1bWVudHMpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLmYud3JpdGUodGV4dCkKKworCitjbGFzcyBEZXN0aW5hdGlvbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdHlwZSwgY2xpbmljLCAqYXJncyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBzZWxmLmNsaW5pYyA9IGNsaW5pYworICAgICAgICB2YWxpZF90eXBlcyA9ICgnYnVmZmVyJywgJ2ZpbGUnLCAnc3VwcHJlc3MnLCAndHdvLXBhc3MnKQorICAgICAgICBpZiB0eXBlIG5vdCBpbiB2YWxpZF90eXBlczoKKyAgICAgICAgICAgIGZhaWwoIkludmFsaWQgZGVzdGluYXRpb24gdHlwZSAiICsgcmVwcih0eXBlKSArICIgZm9yICIgKyBuYW1lICsgIiAsIG11c3QgYmUgIiArICcsICcuam9pbih2YWxpZF90eXBlcykpCisgICAgICAgIGV4dHJhX2FyZ3VtZW50cyA9IDEgaWYgdHlwZSA9PSAiZmlsZSIgZWxzZSAwCisgICAgICAgIGlmIGxlbihhcmdzKSA8IGV4dHJhX2FyZ3VtZW50czoKKyAgICAgICAgICAgIGZhaWwoIk5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBkZXN0aW5hdGlvbiAiICsgbmFtZSArICIgbmV3ICIgKyB0eXBlKQorICAgICAgICBpZiBsZW4oYXJncykgPiBleHRyYV9hcmd1bWVudHM6CisgICAgICAgICAgICBmYWlsKCJUb28gbWFueSBhcmd1bWVudHMgZm9yIGRlc3RpbmF0aW9uICIgKyBuYW1lICsgIiBuZXcgIiArIHR5cGUpCisgICAgICAgIGlmIHR5cGUgPT0nZmlsZSc6CisgICAgICAgICAgICBkID0ge30KKyAgICAgICAgICAgIGZpbGVuYW1lID0gY2xpbmljLmZpbGVuYW1lCisgICAgICAgICAgICBkWydwYXRoJ10gPSBmaWxlbmFtZQorICAgICAgICAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgbm90IGRpcm5hbWU6CisgICAgICAgICAgICAgICAgZGlybmFtZSA9ICcuJworICAgICAgICAgICAgZFsnZGlybmFtZSddID0gZGlybmFtZQorICAgICAgICAgICAgZFsnYmFzZW5hbWUnXSA9IGJhc2VuYW1lCisgICAgICAgICAgICBkWydiYXNlbmFtZV9yb290J10sIGRbJ2Jhc2VuYW1lX2V4dGVuc2lvbiddID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBhcmdzWzBdLmZvcm1hdF9tYXAoZCkKKyAgICAgICAgaWYgdHlwZSA9PSAndHdvLXBhc3MnOgorICAgICAgICAgICAgc2VsZi5pZCA9IE5vbmUKKworICAgICAgICBzZWxmLnRleHQsIHNlbGYuYXBwZW5kLCBzZWxmLl9kdW1wID0gX3RleHRfYWNjdW11bGF0b3IoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgZmlsZV9yZXByID0gIiAiICsgcmVwcihzZWxmLmZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZV9yZXByID0gJycKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oKCI8RGVzdGluYXRpb24gIiwgc2VsZi5uYW1lLCAiICIsIHNlbGYudHlwZSwgZmlsZV9yZXByLCAiPiIpKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnR5cGUgIT0gJ2J1ZmZlcic6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBjbGVhciBkZXN0aW5hdGlvbiIgKyBzZWxmLm5hbWUgKyAiICwgaXQncyBub3Qgb2YgdHlwZSBidWZmZXIiKQorICAgICAgICBzZWxmLnRleHQuY2xlYXIoKQorCisgICAgZGVmIGR1bXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZSA9PSAndHdvLXBhc3MnOgorICAgICAgICAgICAgaWYgc2VsZi5pZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuaWQgPSBzdHIodXVpZC51dWlkNCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmlkCisgICAgICAgICAgICBmYWlsKCJZb3UgY2FuIG9ubHkgZHVtcCBhIHR3by1wYXNzIGJ1ZmZlciBleGFjdGx5IG9uY2UhIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2R1bXAoKQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIExhbmd1YWdlIG9iamVjdHMuCisjICJsYW5ndWFnZXMiIG1hcHMgdGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlICgiQyIsICJQeXRob24iKS4KKyMgImV4dGVuc2lvbnMiIG1hcHMgdGhlIGZpbGUgZXh0ZW5zaW9uICgiYyIsICJweSIpLgorbGFuZ3VhZ2VzID0geyAnQyc6IENMYW5ndWFnZSwgJ1B5dGhvbic6IFB5dGhvbkxhbmd1YWdlIH0KK2V4dGVuc2lvbnMgPSB7IG5hbWU6IENMYW5ndWFnZSBmb3IgbmFtZSBpbiAiYyBjYyBjcHAgY3h4IGggaGggaHBwIGh4eCIuc3BsaXQoKSB9CitleHRlbnNpb25zWydweSddID0gUHl0aG9uTGFuZ3VhZ2UKKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorIyAgIGRlZiBmb28obmFtZSwgZGVmYXVsdCwgKiwgLi4uKQorIyBUaGUgY2FsbGFibGUgbWF5IGhhdmUgYW55IG51bWJlciBvZiBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyMgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGEgQ0NvbnZlcnRlciBvYmplY3QuCisjIFRoZSBjYWxsYWJsZSBzaG91bGQgbm90IGNhbGwgYnVpbHRpbnMucHJpbnQuCitjb252ZXJ0ZXJzID0ge30KKworIyBtYXBzIHN0cmluZ3MgdG8gY2FsbGFibGVzLgorIyB0aGVzZSBjYWxsYWJsZXMgZm9sbG93IHRoZSBzYW1lIHJ1bGVzIGFzIHRob3NlIGZvciAiY29udmVydGVycyIgYWJvdmUuCisjIG5vdGUgaG93ZXZlciB0aGF0IHRoZXkgd2lsbCBuZXZlciBiZSBjYWxsZWQgd2l0aCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KK2xlZ2FjeV9jb252ZXJ0ZXJzID0ge30KKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorIyAgIGRlZiBmb28oKiwgLi4uKQorIyBUaGUgY2FsbGFibGUgbWF5IGhhdmUgYW55IG51bWJlciBvZiBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyMgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGEgQ0NvbnZlcnRlciBvYmplY3QuCisjIFRoZSBjYWxsYWJsZSBzaG91bGQgbm90IGNhbGwgYnVpbHRpbnMucHJpbnQuCityZXR1cm5fY29udmVydGVycyA9IHt9CisKK2NsaW5pYyA9IE5vbmUKK2NsYXNzIENsaW5pYzoKKworICAgIHByZXNldHNfdGV4dCA9ICIiIgorcHJlc2V0IGJsb2NrCitldmVyeXRoaW5nIGJsb2NrCitkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCitwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCitjcHBfaWYgc3VwcHJlc3MKK2NwcF9lbmRpZiBzdXBwcmVzcworbWV0aG9kZGVmX2lmbmRlZiBidWZmZXIKKworcHJlc2V0IG9yaWdpbmFsCitldmVyeXRoaW5nIGJsb2NrCitkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCitwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCitjcHBfaWYgc3VwcHJlc3MKK2NwcF9lbmRpZiBzdXBwcmVzcworbWV0aG9kZGVmX2lmbmRlZiBidWZmZXIKKworcHJlc2V0IGZpbGUKK2V2ZXJ5dGhpbmcgZmlsZQorZG9jc3RyaW5nX3Byb3RvdHlwZSBzdXBwcmVzcworcGFyc2VyX3Byb3RvdHlwZSBzdXBwcmVzcworaW1wbF9kZWZpbml0aW9uIGJsb2NrCisKK3ByZXNldCBidWZmZXIKK2V2ZXJ5dGhpbmcgYnVmZmVyCitkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCitpbXBsX3Byb3RvdHlwZSBzdXBwcmVzcworcGFyc2VyX3Byb3RvdHlwZSBzdXBwcmVzcworaW1wbF9kZWZpbml0aW9uIGJsb2NrCisKK3ByZXNldCBwYXJ0aWFsLWJ1ZmZlcgorZXZlcnl0aGluZyBidWZmZXIKK2RvY3N0cmluZ19wcm90b3R5cGUgYmxvY2sKK2ltcGxfcHJvdG90eXBlIHN1cHByZXNzCittZXRob2RkZWZfZGVmaW5lIGJsb2NrCitwYXJzZXJfcHJvdG90eXBlIGJsb2NrCitpbXBsX2RlZmluaXRpb24gYmxvY2sKKworcHJlc2V0IHR3by1wYXNzCitldmVyeXRoaW5nIGJ1ZmZlcgorZG9jc3RyaW5nX3Byb3RvdHlwZSB0d28tcGFzcworaW1wbF9wcm90b3R5cGUgc3VwcHJlc3MKK21ldGhvZGRlZl9kZWZpbmUgdHdvLXBhc3MKK3BhcnNlcl9wcm90b3R5cGUgdHdvLXBhc3MKK2ltcGxfZGVmaW5pdGlvbiBibG9jaworCisiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYW5ndWFnZSwgcHJpbnRlcj1Ob25lLCAqLCBmb3JjZT1GYWxzZSwgdmVyaWZ5PVRydWUsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICAjIG1hcHMgc3RyaW5ncyB0byBQYXJzZXIgb2JqZWN0cy4KKyAgICAgICAgIyAoaW5zdGFudGlhdGVkIGZyb20gdGhlICJwYXJzZXJzIiBnbG9iYWwuKQorICAgICAgICBzZWxmLnBhcnNlcnMgPSB7fQorICAgICAgICBzZWxmLmxhbmd1YWdlID0gbGFuZ3VhZ2UKKyAgICAgICAgaWYgcHJpbnRlcjoKKyAgICAgICAgICAgIGZhaWwoIkN1c3RvbSBwcmludGVycyBhcmUgYnJva2VuIHJpZ2h0IG5vdyIpCisgICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIgb3IgQmxvY2tQcmludGVyKGxhbmd1YWdlKQorICAgICAgICBzZWxmLnZlcmlmeSA9IHZlcmlmeQorICAgICAgICBzZWxmLmZvcmNlID0gZm9yY2UKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IFtdCisKKyAgICAgICAgc2VsZi5saW5lX3ByZWZpeCA9IHNlbGYubGluZV9zdWZmaXggPSAnJworCisgICAgICAgIHNlbGYuZGVzdGluYXRpb25zID0ge30KKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oImJsb2NrIiwgImJ1ZmZlciIpCisgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJzdXBwcmVzcyIsICJzdXBwcmVzcyIpCisgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJidWZmZXIiLCAiYnVmZmVyIikKKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oInR3by1wYXNzIiwgInR3by1wYXNzIikKKyAgICAgICAgaWYgZmlsZW5hbWU6CisgICAgICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigiZmlsZSIsICJmaWxlIiwgIntkaXJuYW1lfS9jbGluaWMve2Jhc2VuYW1lfS5oIikKKworICAgICAgICBkID0gc2VsZi5kZXN0aW5hdGlvbnMuZ2V0CisgICAgICAgIHNlbGYuZmllbGRfZGVzdGluYXRpb25zID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgKCdjcHBfaWYnLCBkKCdzdXBwcmVzcycpKSwKKyAgICAgICAgICAgICgnZG9jc3RyaW5nX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdkb2NzdHJpbmdfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdtZXRob2RkZWZfZGVmaW5lJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ2ltcGxfcHJvdG90eXBlJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ3BhcnNlcl9wcm90b3R5cGUnLCBkKCdzdXBwcmVzcycpKSwKKyAgICAgICAgICAgICgncGFyc2VyX2RlZmluaXRpb24nLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgnY3BwX2VuZGlmJywgZCgnc3VwcHJlc3MnKSksCisgICAgICAgICAgICAoJ21ldGhvZGRlZl9pZm5kZWYnLCBkKCdidWZmZXInKSksCisgICAgICAgICAgICAoJ2ltcGxfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICApKQorCisgICAgICAgIHNlbGYuZmllbGRfZGVzdGluYXRpb25zX3N0YWNrID0gW10KKworICAgICAgICBzZWxmLnByZXNldHMgPSB7fQorICAgICAgICBwcmVzZXQgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYucHJlc2V0c190ZXh0LnN0cmlwKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ3ByZXNldCc6CisgICAgICAgICAgICAgICAgc2VsZi5wcmVzZXRzW3ZhbHVlXSA9IHByZXNldCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNlbGYuZ2V0X2Rlc3RpbmF0aW9uKHZhbHVlKQorCisgICAgICAgICAgICBpZiBuYW1lID09ICdldmVyeXRoaW5nJzoKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmZpZWxkX2Rlc3RpbmF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgcHJlc2V0W25hbWVdID0gZGVzdGluYXRpb24KKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBhc3NlcnQgbmFtZSBpbiBzZWxmLmZpZWxkX2Rlc3RpbmF0aW9ucworICAgICAgICAgICAgcHJlc2V0W25hbWVdID0gZGVzdGluYXRpb24KKworICAgICAgICBnbG9iYWwgY2xpbmljCisgICAgICAgIGNsaW5pYyA9IHNlbGYKKworICAgIGRlZiBnZXRfZGVzdGluYXRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdD11bnNwZWNpZmllZCk6CisgICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQobmFtZSkKKyAgICAgICAgaWYgbm90IGQ6CisgICAgICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICAgICAgZmFpbCgiRGVzdGluYXRpb24gZG9lcyBub3QgZXhpc3Q6ICIgKyByZXByKG5hbWUpKQorICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIGFkZF9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCB0eXBlLCAqYXJncyk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5kZXN0aW5hdGlvbnM6CisgICAgICAgICAgICBmYWlsKCJEZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0czogIiArIHJlcHIobmFtZSkpCisgICAgICAgIHNlbGYuZGVzdGluYXRpb25zW25hbWVdID0gRGVzdGluYXRpb24obmFtZSwgdHlwZSwgc2VsZiwgKmFyZ3MpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgaW5wdXQpOgorICAgICAgICBwcmludGVyID0gc2VsZi5wcmludGVyCisgICAgICAgIHNlbGYuYmxvY2tfcGFyc2VyID0gQmxvY2tQYXJzZXIoaW5wdXQsIHNlbGYubGFuZ3VhZ2UsIHZlcmlmeT1zZWxmLnZlcmlmeSkKKyAgICAgICAgZm9yIGJsb2NrIGluIHNlbGYuYmxvY2tfcGFyc2VyOgorICAgICAgICAgICAgZHNsX25hbWUgPSBibG9jay5kc2xfbmFtZQorICAgICAgICAgICAgaWYgZHNsX25hbWU6CisgICAgICAgICAgICAgICAgaWYgZHNsX25hbWUgbm90IGluIHNlbGYucGFyc2VyczoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGRzbF9uYW1lIGluIHBhcnNlcnMsICJObyBwYXJzZXIgdG8gaGFuZGxlIHshcn0gYmxvY2suIi5mb3JtYXQoZHNsX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2Vyc1tkc2xfbmFtZV0gPSBwYXJzZXJzW2RzbF9uYW1lXShzZWxmKQorICAgICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYucGFyc2Vyc1tkc2xfbmFtZV0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCdFeGNlcHRpb24gcmFpc2VkIGR1cmluZyBwYXJzaW5nOlxuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGMoKS5yc3RyaXAoKSkKKyAgICAgICAgICAgIHByaW50ZXIucHJpbnRfYmxvY2soYmxvY2spCisKKyAgICAgICAgc2Vjb25kX3Bhc3NfcmVwbGFjZW1lbnRzID0ge30KKworICAgICAgICBmb3IgbmFtZSwgZGVzdGluYXRpb24gaW4gc2VsZi5kZXN0aW5hdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ3N1cHByZXNzJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgb3V0cHV0ID0gZGVzdGluYXRpb24uX2R1bXAoKQorCisgICAgICAgICAgICBpZiBkZXN0aW5hdGlvbi50eXBlID09ICd0d28tcGFzcyc6CisgICAgICAgICAgICAgICAgaWYgZGVzdGluYXRpb24uaWQ6CisgICAgICAgICAgICAgICAgICAgIHNlY29uZF9wYXNzX3JlcGxhY2VtZW50c1tkZXN0aW5hdGlvbi5pZF0gPSBvdXRwdXQKKyAgICAgICAgICAgICAgICBlbGlmIG91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiVHdvLXBhc3MgYnVmZmVyICIgKyByZXByKG5hbWUpICsgIiBub3QgZW1wdHkgYXQgZW5kIG9mIGZpbGUhIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBvdXRwdXQ6CisKKyAgICAgICAgICAgICAgICBibG9jayA9IEJsb2NrKCIiLCBkc2xfbmFtZT0iY2xpbmljIiwgb3V0cHV0PW91dHB1dCkKKworICAgICAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ2J1ZmZlcic6CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmlucHV0ID0gImR1bXAgIiArIG5hbWUgKyAiXG4iCisgICAgICAgICAgICAgICAgICAgIHdhcm4oIkRlc3RpbmF0aW9uIGJ1ZmZlciAiICsgcmVwcihuYW1lKSArICIgbm90IGVtcHR5IGF0IGVuZCBvZiBmaWxlLCBlbXB0eWluZy4iKQorICAgICAgICAgICAgICAgICAgICBwcmludGVyLndyaXRlKCJcbiIpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBkZXN0aW5hdGlvbi50eXBlID09ICdmaWxlJzoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShkZXN0aW5hdGlvbi5maWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkaXJuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiQ2FuJ3Qgd3JpdGUgdG8gZGVzdGluYXRpb24ge30sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgbWFrZSBkaXJlY3Rvcnkge30hIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZmlsZW5hbWUsIGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJpZnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGRlc3RpbmF0aW9uLmZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfMiA9IEJsb2NrUGFyc2VyKGYucmVhZCgpLCBsYW5ndWFnZT1zZWxmLmxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MgPSBsaXN0KHBhcnNlcl8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKGJsb2NrcykgIT0gMSkgb3IgKGJsb2Nrc1swXS5pbnB1dCAhPSAncHJlc2VydmVcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiTW9kaWZpZWQgZGVzdGluYXRpb24gZmlsZSAiICsgcmVwcihkZXN0aW5hdGlvbi5maWxlbmFtZSkgKyAiLCBub3Qgb3ZlcndyaXRpbmchIikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmlucHV0ID0gJ3ByZXNlcnZlXG4nCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXJfMiA9IEJsb2NrUHJpbnRlcihzZWxmLmxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICBwcmludGVyXzIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihkZXN0aW5hdGlvbi5maWxlbmFtZSwgInd0IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUocHJpbnRlcl8yLmYuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdGV4dCA9IHByaW50ZXIuZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgaWYgc2Vjb25kX3Bhc3NfcmVwbGFjZW1lbnRzOgorICAgICAgICAgICAgcHJpbnRlcl8yID0gQmxvY2tQcmludGVyKHNlbGYubGFuZ3VhZ2UpCisgICAgICAgICAgICBwYXJzZXJfMiA9IEJsb2NrUGFyc2VyKHRleHQsIHNlbGYubGFuZ3VhZ2UpCisgICAgICAgICAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBibG9jayBpbiBwYXJzZXJfMjoKKyAgICAgICAgICAgICAgICBpZiBibG9jay5kc2xfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGlkLCByZXBsYWNlbWVudCBpbiBzZWNvbmRfcGFzc19yZXBsYWNlbWVudHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlkIGluIGJsb2NrLm91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLm91dHB1dCA9IGJsb2NrLm91dHB1dC5yZXBsYWNlKGlkLCByZXBsYWNlbWVudCkKKyAgICAgICAgICAgICAgICBwcmludGVyXzIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgICAgIHRleHQgPSBwcmludGVyXzIuZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgcmV0dXJuIHRleHQKKworCisgICAgZGVmIF9tb2R1bGVfYW5kX2NsYXNzKHNlbGYsIGZpZWxkcyk6CisgICAgICAgICIiIgorICAgICAgICBmaWVsZHMgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIGZpZWxkIG5hbWVzLgorICAgICAgICByZXR1cm5zIGEgdHVwbGUgb2YgKG1vZHVsZSwgY2xhc3MpLgorICAgICAgICB0aGUgbW9kdWxlIG9iamVjdCBjb3VsZCBhY3R1YWxseSBiZSBzZWxmIChhIGNsaW5pYyBvYmplY3QpLgorICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciB1c2VkIHRvIGZpbmQgdGhlIHBhcmVudCBvZiB3aGVyZQorICAgICAgICBhIG5ldyBjbGFzcy9tb2R1bGUgc2hvdWxkIGdvLgorICAgICAgICAiIiIKKyAgICAgICAgaW5fY2xhc3NlcyA9IEZhbHNlCisgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IHNlbGYKKyAgICAgICAgY2xzID0gTm9uZQorICAgICAgICBzb19mYXIgPSBbXQorCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzb19mYXIuYXBwZW5kKGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGluX2NsYXNzZXM6CisgICAgICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQubW9kdWxlcy5nZXQoZmllbGQpCisgICAgICAgICAgICAgICAgaWYgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IGNoaWxkCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaW5fY2xhc3NlcyA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHBhcmVudCwgJ2NsYXNzZXMnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLCBjbHMKKyAgICAgICAgICAgIGNoaWxkID0gcGFyZW50LmNsYXNzZXMuZ2V0KGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGNoaWxkOgorICAgICAgICAgICAgICAgIGZhaWwoJ1BhcmVudCBjbGFzcyBvciBtb2R1bGUgJyArICcuJy5qb2luKHNvX2ZhcikgKyAiIGRvZXMgbm90IGV4aXN0LiIpCisgICAgICAgICAgICBjbHMgPSBwYXJlbnQgPSBjaGlsZAorCisgICAgICAgIHJldHVybiBtb2R1bGUsIGNscworCisKK2RlZiBwYXJzZV9maWxlKGZpbGVuYW1lLCAqLCBmb3JjZT1GYWxzZSwgdmVyaWZ5PVRydWUsIG91dHB1dD1Ob25lLCBlbmNvZGluZz0ndXRmLTgnKToKKyAgICBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXVsxOl0KKyAgICBpZiBub3QgZXh0ZW5zaW9uOgorICAgICAgICBmYWlsKCJDYW4ndCBleHRyYWN0IGZpbGUgdHlwZSBmb3IgZmlsZSAiICsgcmVwcihmaWxlbmFtZSkpCisKKyAgICB0cnk6CisgICAgICAgIGxhbmd1YWdlID0gZXh0ZW5zaW9uc1tleHRlbnNpb25dKGZpbGVuYW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZmFpbCgiQ2FuJ3QgaWRlbnRpZnkgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgcmF3ID0gZi5yZWFkKCkKKworICAgICMgZXhpdCBxdWlja2x5IGlmIHRoZXJlIGFyZSBubyBjbGluaWMgbWFya2VycyBpbiB0aGUgZmlsZQorICAgIGZpbmRfc3RhcnRfcmUgPSBCbG9ja1BhcnNlcigiIiwgbGFuZ3VhZ2UpLmZpbmRfc3RhcnRfcmUKKyAgICBpZiBub3QgZmluZF9zdGFydF9yZS5zZWFyY2gocmF3KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBjbGluaWMgPSBDbGluaWMobGFuZ3VhZ2UsIGZvcmNlPWZvcmNlLCB2ZXJpZnk9dmVyaWZ5LCBmaWxlbmFtZT1maWxlbmFtZSkKKyAgICBjb29rZWQgPSBjbGluaWMucGFyc2UocmF3KQorICAgIGlmIChjb29rZWQgPT0gcmF3KSBhbmQgbm90IGZvcmNlOgorICAgICAgICByZXR1cm4KKworICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkgb3IgJy4nCisKKyAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShwcmVmaXg9ImNsaW5pYyIsIGRpcj1kaXJlY3RvcnkpIGFzIHRtcGRpcjoKKyAgICAgICAgYnl0ZXMgPSBjb29rZWQuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICB0bXBmaWxlbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsIG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKQorICAgICAgICB3aXRoIG9wZW4odG1wZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGJ5dGVzKQorICAgICAgICBvcy5yZXBsYWNlKHRtcGZpbGVuYW1lLCBvdXRwdXQgb3IgZmlsZW5hbWUpCisKKworZGVmIGNvbXB1dGVfY2hlY2tzdW0oaW5wdXQsIGxlbmd0aD1Ob25lKToKKyAgICBpbnB1dCA9IGlucHV0IG9yICcnCisgICAgcyA9IGhhc2hsaWIuc2hhMShpbnB1dC5lbmNvZGUoJ3V0Zi04JykpLmhleGRpZ2VzdCgpCisgICAgaWYgbGVuZ3RoOgorICAgICAgICBzID0gc1s6bGVuZ3RoXQorICAgIHJldHVybiBzCisKKworCisKK2NsYXNzIFB5dGhvblBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCBPdmVycmlkZVN0ZGlvV2l0aChzKToKKyAgICAgICAgICAgIGV4ZWMoYmxvY2suaW5wdXQpCisgICAgICAgIGJsb2NrLm91dHB1dCA9IHMuZ2V0dmFsdWUoKQorCisKK2NsYXNzIE1vZHVsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbW9kdWxlPU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gc2VsZi5wYXJlbnQgPSBtb2R1bGUKKworICAgICAgICBzZWxmLm1vZHVsZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5mdW5jdGlvbnMgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxjbGluaWMuTW9kdWxlICIgKyByZXByKHNlbGYubmFtZSkgKyAiIGF0ICIgKyBzdHIoaWQoc2VsZikpICsgIj4iCisKK2NsYXNzIENsYXNzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBtb2R1bGU9Tm9uZSwgY2xzPU5vbmUsIHR5cGVkZWY9Tm9uZSwgdHlwZV9vYmplY3Q9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5jbHMgPSBjbHMKKyAgICAgICAgc2VsZi50eXBlZGVmID0gdHlwZWRlZgorICAgICAgICBzZWxmLnR5cGVfb2JqZWN0ID0gdHlwZV9vYmplY3QKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBjbHMgb3IgbW9kdWxlCisKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IFtdCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPGNsaW5pYy5DbGFzcyAiICsgcmVwcihzZWxmLm5hbWUpICsgIiBhdCAiICsgc3RyKGlkKHNlbGYpKSArICI+IgorCit1bnN1cHBvcnRlZF9zcGVjaWFsX21ldGhvZHMgPSBzZXQoIiIiCisKK19fYWJzX18KK19fYWRkX18KK19fYW5kX18KK19fYnl0ZXNfXworX19jYWxsX18KK19fY29tcGxleF9fCitfX2RlbGl0ZW1fXworX19kaXZtb2RfXworX19lcV9fCitfX2Zsb2F0X18KK19fZmxvb3JkaXZfXworX19nZV9fCitfX2dldGF0dHJfXworX19nZXRhdHRyaWJ1dGVfXworX19nZXRpdGVtX18KK19fZ3RfXworX19oYXNoX18KK19faWFkZF9fCitfX2lhbmRfXworX19pZGl2bW9kX18KK19faWZsb29yZGl2X18KK19faWxzaGlmdF9fCitfX2ltb2RfXworX19pbXVsX18KK19faW5kZXhfXworX19pbnRfXworX19pbnZlcnRfXworX19pb3JfXworX19pcG93X18KK19faXJzaGlmdF9fCitfX2lzdWJfXworX19pdGVyX18KK19faXRydWVkaXZfXworX19peG9yX18KK19fbGVfXworX19sZW5fXworX19sc2hpZnRfXworX19sdF9fCitfX21vZF9fCitfX211bF9fCitfX25lZ19fCitfX25ld19fCitfX25leHRfXworX19vcl9fCitfX3Bvc19fCitfX3Bvd19fCitfX3JhZGRfXworX19yYW5kX18KK19fcmRpdm1vZF9fCitfX3JlcHJfXworX19yZmxvb3JkaXZfXworX19ybHNoaWZ0X18KK19fcm1vZF9fCitfX3JtdWxfXworX19yb3JfXworX19yb3VuZF9fCitfX3Jwb3dfXworX19ycnNoaWZ0X18KK19fcnNoaWZ0X18KK19fcnN1Yl9fCitfX3J0cnVlZGl2X18KK19fcnhvcl9fCitfX3NldGF0dHJfXworX19zZXRpdGVtX18KK19fc3RyX18KK19fc3ViX18KK19fdHJ1ZWRpdl9fCitfX3hvcl9fCisKKyIiIi5zdHJpcCgpLnNwbGl0KCkpCisKKworSU5WQUxJRCwgQ0FMTEFCTEUsIFNUQVRJQ19NRVRIT0QsIENMQVNTX01FVEhPRCwgTUVUSE9EX0lOSVQsIE1FVEhPRF9ORVcgPSAiIiIKK0lOVkFMSUQsIENBTExBQkxFLCBTVEFUSUNfTUVUSE9ELCBDTEFTU19NRVRIT0QsIE1FVEhPRF9JTklULCBNRVRIT0RfTkVXCisiIiIucmVwbGFjZSgiLCIsICIiKS5zdHJpcCgpLnNwbGl0KCkKKworY2xhc3MgRnVuY3Rpb246CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgZm9yIGluc3BlY3QuRnVuY3Rpb24uCisKKyAgICBkb2NzdHJpbmcgLSBhIHN0ciBjb250YWluaW5nCisgICAgICAgICogZW1iZWRkZWQgbGluZSBicmVha3MKKyAgICAgICAgKiB0ZXh0IG91dGRlbnRlZCB0byB0aGUgbGVmdCBtYXJnaW4KKyAgICAgICAgKiBubyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBJdCB3aWxsIGFsd2F5cyBiZSB0cnVlIHRoYXQKKyAgICAgICAgICAgIChub3QgZG9jc3RyaW5nKSBvciAoKG5vdCBkb2NzdHJpbmdbMF0uaXNzcGFjZSgpKSBhbmQgKGRvY3N0cmluZy5yc3RyaXAoKSA9PSBkb2NzdHJpbmcpKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtZXRlcnM9Tm9uZSwgKiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHM9Tm9uZSwgY19iYXNlbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBmdWxsX25hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciwgcmV0dXJuX2Fubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwga2luZD1DQUxMQUJMRSwgY29leGlzdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgZG9jc3RyaW5nX29ubHk9RmFsc2UpOgorICAgICAgICBzZWxmLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIG9yIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5yZXR1cm5fYW5ub3RhdGlvbiA9IHJldHVybl9hbm5vdGF0aW9uCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5mdWxsX25hbWUgPSBmdWxsX25hbWUKKyAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5jbHMgPSBjbHMKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBjbHMgb3IgbW9kdWxlCisgICAgICAgIHNlbGYuY19iYXNlbmFtZSA9IGNfYmFzZW5hbWUKKyAgICAgICAgc2VsZi5yZXR1cm5fY29udmVydGVyID0gcmV0dXJuX2NvbnZlcnRlcgorICAgICAgICBzZWxmLmRvY3N0cmluZyA9IGRvY3N0cmluZyBvciAnJworICAgICAgICBzZWxmLmtpbmQgPSBraW5kCisgICAgICAgIHNlbGYuY29leGlzdCA9IGNvZXhpc3QKKyAgICAgICAgc2VsZi5zZWxmX2NvbnZlcnRlciA9IE5vbmUKKyAgICAgICAgIyBkb2NzdHJpbmdfb25seSBtZWFucyAiZG9uJ3QgZ2VuZXJhdGUgYSBtYWNoaW5lLXJlYWRhYmxlCisgICAgICAgICMgc2lnbmF0dXJlLCBqdXN0IGEgbm9ybWFsIGRvY3N0cmluZyIuICBpdCdzIFRydWUgZm9yCisgICAgICAgICMgZnVuY3Rpb25zIHdpdGggb3B0aW9uYWwgZ3JvdXBzIGJlY2F1c2Ugd2UgY2FuJ3QgcmVwcmVzZW50CisgICAgICAgICMgdGhvc2UgYWNjdXJhdGVseSB3aXRoIGluc3BlY3QuU2lnbmF0dXJlIGluIDMuNC4KKyAgICAgICAgc2VsZi5kb2NzdHJpbmdfb25seSA9IGRvY3N0cmluZ19vbmx5CisKKyAgICAgICAgc2VsZi5yZW5kZXJlZF9wYXJhbWV0ZXJzID0gTm9uZQorCisgICAgX19yZW5kZXJfcGFyYW1ldGVyc19fID0gTm9uZQorICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZW5kZXJfcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX19yZW5kZXJfcGFyYW1ldGVyc19fOgorICAgICAgICAgICAgc2VsZi5fX3JlbmRlcl9wYXJhbWV0ZXJzX18gPSBsID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYucGFyYW1ldGVycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBwID0gcC5jb3B5KCkKKyAgICAgICAgICAgICAgICBwLmNvbnZlcnRlci5wcmVfcmVuZGVyKCkKKyAgICAgICAgICAgICAgICBsLmFwcGVuZChwKQorICAgICAgICByZXR1cm4gc2VsZi5fX3JlbmRlcl9wYXJhbWV0ZXJzX18KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtZXRob2RkZWZfZmxhZ3Moc2VsZik6CisgICAgICAgIGlmIHNlbGYua2luZCBpbiAoTUVUSE9EX0lOSVQsIE1FVEhPRF9ORVcpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZmxhZ3MgPSBbXQorICAgICAgICBpZiBzZWxmLmtpbmQgPT0gQ0xBU1NfTUVUSE9EOgorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdNRVRIX0NMQVNTJykKKyAgICAgICAgZWxpZiBzZWxmLmtpbmQgPT0gU1RBVElDX01FVEhPRDoKKyAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgnTUVUSF9TVEFUSUMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYua2luZCA9PSBDQUxMQUJMRSwgInVua25vd24ga2luZDogIiArIHJlcHIoc2VsZi5raW5kKQorICAgICAgICBpZiBzZWxmLmNvZXhpc3Q6CisgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ01FVEhfQ09FWElTVCcpCisgICAgICAgIHJldHVybiAnfCcuam9pbihmbGFncykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8Y2xpbmljLkZ1bmN0aW9uICcgKyBzZWxmLm5hbWUgKyAnPicKKworICAgIGRlZiBjb3B5KHNlbGYsICoqb3ZlcnJpZGVzKToKKyAgICAgICAga3dhcmdzID0geworICAgICAgICAgICAgJ25hbWUnOiBzZWxmLm5hbWUsICdtb2R1bGUnOiBzZWxmLm1vZHVsZSwgJ3BhcmFtZXRlcnMnOiBzZWxmLnBhcmFtZXRlcnMsCisgICAgICAgICAgICAnY2xzJzogc2VsZi5jbHMsICdjX2Jhc2VuYW1lJzogc2VsZi5jX2Jhc2VuYW1lLAorICAgICAgICAgICAgJ2Z1bGxfbmFtZSc6IHNlbGYuZnVsbF9uYW1lLAorICAgICAgICAgICAgJ3JldHVybl9jb252ZXJ0ZXInOiBzZWxmLnJldHVybl9jb252ZXJ0ZXIsICdyZXR1cm5fYW5ub3RhdGlvbic6IHNlbGYucmV0dXJuX2Fubm90YXRpb24sCisgICAgICAgICAgICAnZG9jc3RyaW5nJzogc2VsZi5kb2NzdHJpbmcsICdraW5kJzogc2VsZi5raW5kLCAnY29leGlzdCc6IHNlbGYuY29leGlzdCwKKyAgICAgICAgICAgICdkb2NzdHJpbmdfb25seSc6IHNlbGYuZG9jc3RyaW5nX29ubHksCisgICAgICAgICAgICB9CisgICAgICAgIGt3YXJncy51cGRhdGUob3ZlcnJpZGVzKQorICAgICAgICBmID0gRnVuY3Rpb24oKiprd2FyZ3MpCisKKyAgICAgICAgcGFyYW1ldGVycyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGYucGFyYW1ldGVycy5pdGVtcygpOgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jb3B5KGZ1bmN0aW9uPWYpCisgICAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gdmFsdWUKKyAgICAgICAgZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycworICAgICAgICByZXR1cm4gZgorCisKK2NsYXNzIFBhcmFtZXRlcjoKKyAgICAiIiIKKyAgICBNdXRhYmxlIGR1Y2sgdHlwZSBvZiBpbnNwZWN0LlBhcmFtZXRlci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBraW5kLCAqLCBkZWZhdWx0PV9lbXB0eSwKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIGNvbnZlcnRlciwgYW5ub3RhdGlvbj1fZW1wdHksCisgICAgICAgICAgICAgICAgIGRvY3N0cmluZz1Ob25lLCBncm91cD0wKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmtpbmQgPSBraW5kCisgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNlbGYuY29udmVydGVyID0gY29udmVydGVyCisgICAgICAgIHNlbGYuYW5ub3RhdGlvbiA9IGFubm90YXRpb24KKyAgICAgICAgc2VsZi5kb2NzdHJpbmcgPSBkb2NzdHJpbmcgb3IgJycKKyAgICAgICAgc2VsZi5ncm91cCA9IGdyb3VwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPGNsaW5pYy5QYXJhbWV0ZXIgJyArIHNlbGYubmFtZSArICc+JworCisgICAgZGVmIGlzX2tleXdvcmRfb25seShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkKKworICAgIGRlZiBpc19wb3NpdGlvbmFsX29ubHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisKKyAgICBkZWYgY29weShzZWxmLCAqKm92ZXJyaWRlcyk6CisgICAgICAgIGt3YXJncyA9IHsKKyAgICAgICAgICAgICduYW1lJzogc2VsZi5uYW1lLCAna2luZCc6IHNlbGYua2luZCwgJ2RlZmF1bHQnOnNlbGYuZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgJ2Z1bmN0aW9uJzogc2VsZi5mdW5jdGlvbiwgJ2NvbnZlcnRlcic6IHNlbGYuY29udmVydGVyLCAnYW5ub3RhdGlvbic6IHNlbGYuYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgJ2RvY3N0cmluZyc6IHNlbGYuZG9jc3RyaW5nLCAnZ3JvdXAnOiBzZWxmLmdyb3VwLAorICAgICAgICAgICAgfQorICAgICAgICBrd2FyZ3MudXBkYXRlKG92ZXJyaWRlcykKKyAgICAgICAgaWYgJ2NvbnZlcnRlcicgbm90IGluIG92ZXJyaWRlczoKKyAgICAgICAgICAgIGNvbnZlcnRlciA9IGNvcHkuY29weShzZWxmLmNvbnZlcnRlcikKKyAgICAgICAgICAgIGNvbnZlcnRlci5mdW5jdGlvbiA9IGt3YXJnc1snZnVuY3Rpb24nXQorICAgICAgICAgICAga3dhcmdzWydjb252ZXJ0ZXInXSA9IGNvbnZlcnRlcgorICAgICAgICByZXR1cm4gUGFyYW1ldGVyKCoqa3dhcmdzKQorCisKKworY2xhc3MgTGFuZE1pbmU6CisgICAgIyB0cnkgdG8gYWNjZXNzIGFueQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5fX21lc3NhZ2VfXyA9IG1lc3NhZ2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8TGFuZE1pbmUgJyArIHJlcHIoc2VsZi5fX21lc3NhZ2VfXykgKyAiPiIKKworICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluICgnX19yZXByX18nLCAnX19tZXNzYWdlX18nKToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cmlidXRlX18obmFtZSkKKyAgICAgICAgIyByYWlzZSBSdW50aW1lRXJyb3IocmVwcihuYW1lKSkKKyAgICAgICAgZmFpbCgiU3RlcHBlZCBvbiBhIGxhbmQgbWluZSwgdHJ5aW5nIHRvIGFjY2VzcyBhdHRyaWJ1dGUgIiArIHJlcHIobmFtZSkgKyAiOlxuIiArIHNlbGYuX19tZXNzYWdlX18pCisKKworZGVmIGFkZF9jX2NvbnZlcnRlcihmLCBuYW1lPU5vbmUpOgorICAgIGlmIG5vdCBuYW1lOgorICAgICAgICBuYW1lID0gZi5fX25hbWVfXworICAgICAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgnX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19jb252ZXJ0ZXInKV0KKyAgICBjb252ZXJ0ZXJzW25hbWVdID0gZgorICAgIHJldHVybiBmCisKK2RlZiBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIoY2xzKToKKyAgICAjIGF1dG9tYXRpY2FsbHkgYWRkIGNvbnZlcnRlciBmb3IgZGVmYXVsdCBmb3JtYXQgdW5pdAorICAgICMgKGJ1dCB3aXRob3V0IHN0b21waW5nIG9uIHRoZSBleGlzdGluZyBvbmUgaWYgaXQncyBhbHJlYWR5CisgICAgIyBzZXQsIGluIGNhc2UgeW91IHN1YmNsYXNzKQorICAgIGlmICgoY2xzLmZvcm1hdF91bml0IG5vdCBpbiAoJ08mJywgJycpKSBhbmQKKyAgICAgICAgKGNscy5mb3JtYXRfdW5pdCBub3QgaW4gbGVnYWN5X2NvbnZlcnRlcnMpKToKKyAgICAgICAgbGVnYWN5X2NvbnZlcnRlcnNbY2xzLmZvcm1hdF91bml0XSA9IGNscworICAgIHJldHVybiBjbHMKKworZGVmIGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoZm9ybWF0X3VuaXQsICoqa3dhcmdzKToKKyAgICAiIiIKKyAgICBBZGRzIGEgbGVnYWN5IGNvbnZlcnRlci4KKyAgICAiIiIKKyAgICBkZWYgY2xvc3VyZShmKToKKyAgICAgICAgaWYgbm90IGt3YXJnczoKKyAgICAgICAgICAgIGFkZGVkX2YgPSBmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhZGRlZF9mID0gZnVuY3Rvb2xzLnBhcnRpYWwoZiwgKiprd2FyZ3MpCisgICAgICAgIGlmIGZvcm1hdF91bml0OgorICAgICAgICAgICAgbGVnYWN5X2NvbnZlcnRlcnNbZm9ybWF0X3VuaXRdID0gYWRkZWRfZgorICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBjbG9zdXJlCisKK2NsYXNzIENDb252ZXJ0ZXJBdXRvUmVnaXN0ZXIodHlwZSk6CisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgIGFkZF9jX2NvbnZlcnRlcihjbHMpCisgICAgICAgIGFkZF9kZWZhdWx0X2xlZ2FjeV9jX2NvbnZlcnRlcihjbHMpCisKK2NsYXNzIENDb252ZXJ0ZXIobWV0YWNsYXNzPUNDb252ZXJ0ZXJBdXRvUmVnaXN0ZXIpOgorICAgICIiIgorICAgIEZvciB0aGUgaW5pdCBmdW5jdGlvbiwgc2VsZiwgbmFtZSwgZnVuY3Rpb24sIGFuZCBkZWZhdWx0CisgICAgbXVzdCBiZSBrZXl3b3JkLW9yLXBvc2l0aW9uYWwgcGFyYW1ldGVycy4gIEFsbCBvdGhlcgorICAgIHBhcmFtZXRlcnMgbXVzdCBiZSBrZXl3b3JkLW9ubHkuCisgICAgIiIiCisKKyAgICAjIFRoZSBDIG5hbWUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgIG5hbWUgPSBOb25lCisKKyAgICAjIFRoZSBQeXRob24gbmFtZSB0byB1c2UgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgcHlfbmFtZSA9IE5vbmUKKworICAgICMgVGhlIEMgdHlwZSB0byB1c2UgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgIyAndHlwZScgc2hvdWxkIGJlIGEgUHl0aG9uIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSB0eXBlLCBlLmcuICJpbnQiLgorICAgICMgSWYgdGhpcyBpcyBhIHBvaW50ZXIgdHlwZSwgdGhlIHR5cGUgc3RyaW5nIHNob3VsZCBlbmQgd2l0aCAnIConLgorICAgIHR5cGUgPSBOb25lCisKKyAgICAjIFRoZSBQeXRob24gZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIsIGFzIGEgUHl0aG9uIHZhbHVlLgorICAgICMgT3IgdGhlIG1hZ2ljIHZhbHVlICJ1bnNwZWNpZmllZCIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICAjIE9yIHRoZSBtYWdpYyB2YWx1ZSAidW5rbm93biIgaWYgdGhpcyB2YWx1ZSBpcyBhIGNhbm5vdCBiZSBldmFsdWF0ZWQKKyAgICAjIGF0IEFyZ3VtZW50LUNsaW5pYy1wcmVwcm9jZXNzaW5nIHRpbWUgKGJ1dCBpcyBwcmVzdW1lZCB0byBiZSB2YWxpZAorICAgICMgYXQgcnVudGltZSkuCisgICAgZGVmYXVsdCA9IHVuc3BlY2lmaWVkCisKKyAgICAjIElmIG5vdCBOb25lLCBkZWZhdWx0IG11c3QgYmUgaXNpbnN0YW5jZSgpIG9mIHRoaXMgdHlwZS4KKyAgICAjIChZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHR1cGxlIG9mIHR5cGVzLikKKyAgICBkZWZhdWx0X3R5cGUgPSBOb25lCisKKyAgICAjICJkZWZhdWx0IiBjb252ZXJ0ZWQgaW50byBhIEMgdmFsdWUsIGFzIGEgc3RyaW5nLgorICAgICMgT3IgTm9uZSBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorICAgIGNfZGVmYXVsdCA9IE5vbmUKKworICAgICMgImRlZmF1bHQiIGNvbnZlcnRlZCBpbnRvIGEgUHl0aG9uIHZhbHVlLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBweV9kZWZhdWx0ID0gTm9uZQorCisgICAgIyBUaGUgZGVmYXVsdCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIEMgdmFyaWFibGUgd2hlbgorICAgICMgdGhlcmUgaXMgbm8gZGVmYXVsdCwgYnV0IG5vdCBzcGVjaWZ5aW5nIGEgZGVmYXVsdCBtYXkKKyAgICAjIHJlc3VsdCBpbiBhbiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSIgd2FybmluZy4gIFRoaXMgY2FuCisgICAgIyBlYXNpbHkgaGFwcGVuIHdoZW4gdXNpbmcgb3B0aW9uIGdyb3Vwcy0tYWx0aG91Z2gKKyAgICAjIHByb3Blcmx5LXdyaXR0ZW4gY29kZSB3b24ndCBhY3R1YWxseSB1c2UgdGhlIHZhcmlhYmxlLAorICAgICMgdGhlIHZhcmlhYmxlIGRvZXMgZ2V0IHBhc3NlZCBpbiB0byB0aGUgX2ltcGwuICAoQWgsIGlmCisgICAgIyBvbmx5IGRhdGFmbG93IGFuYWx5c2lzIGNvdWxkIGlubGluZSB0aGUgc3RhdGljIGZ1bmN0aW9uISkKKyAgICAjCisgICAgIyBUaGlzIHZhbHVlIGlzIHNwZWNpZmllZCBhcyBhIHN0cmluZy4KKyAgICAjIEV2ZXJ5IG5vbi1hYnN0cmFjdCBzdWJjbGFzcyBzaG91bGQgc3VwcGx5IGEgdmFsaWQgdmFsdWUuCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAnTlVMTCcKKworICAgICMgVGhlIEMgY29udmVydGVyICpmdW5jdGlvbiogdG8gYmUgdXNlZCwgaWYgYW55LgorICAgICMgKElmIHRoaXMgaXMgbm90IE5vbmUsIGZvcm1hdF91bml0IG11c3QgYmUgJ08mJy4pCisgICAgY29udmVydGVyID0gTm9uZQorCisgICAgIyBTaG91bGQgQXJndW1lbnQgQ2xpbmljIGFkZCBhICcmJyBiZWZvcmUgdGhlIG5hbWUgb2YKKyAgICAjIHRoZSB2YXJpYWJsZSB3aGVuIHBhc3NpbmcgaXQgaW50byB0aGUgX2ltcGwgZnVuY3Rpb24/CisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBGYWxzZQorCisgICAgIyBTaG91bGQgQXJndW1lbnQgQ2xpbmljIGFkZCBhICcmJyBiZWZvcmUgdGhlIG5hbWUgb2YKKyAgICAjIHRoZSB2YXJpYWJsZSB3aGVuIHBhc3NpbmcgaXQgaW50byBQeUFyZ19QYXJzZVR1cGxlIChBbmRLZXl3b3Jkcyk/CisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyBZb3Ugc2hvdWxkbid0IG5lZWQgdG8gcmVhZCBhbnl0aGluZyBiZWxvdyB0aGlzIHBvaW50IHRvICMjCisgICAgIyMgd3JpdGUgeW91ciBvd24gY29udmVydGVyIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAjIworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIFRoZSAiZm9ybWF0IHVuaXQiIHRvIHNwZWNpZnkgZm9yIHRoaXMgdmFyaWFibGUgd2hlbgorICAgICMgcGFyc2luZyBhcmd1bWVudHMgdXNpbmcgUHlBcmdfUGFyc2VUdXBsZSAoQW5kS2V5d29yZHMpLgorICAgICMgQ3VzdG9tIGNvbnZlcnRlcnMgc2hvdWxkIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgJ08mJy4KKyAgICBmb3JtYXRfdW5pdCA9ICdPJicKKworICAgICMgV2hhdCBlbmNvZGluZyBkbyB3ZSB3YW50IGZvciB0aGlzIHZhcmlhYmxlPyAgT25seSB1c2VkCisgICAgIyBieSBmb3JtYXQgdW5pdHMgc3RhcnRpbmcgd2l0aCAnZScuCisgICAgZW5jb2RpbmcgPSBOb25lCisKKyAgICAjIFNob3VsZCB0aGlzIG9iamVjdCBiZSByZXF1aXJlZCB0byBiZSBhIHN1YmNsYXNzIG9mIGEgc3BlY2lmaWMgdHlwZT8KKyAgICAjIElmIG5vdCBOb25lLCBzaG91bGQgYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgcG9pbnRlciB0byBhCisgICAgIyBQeVR5cGVPYmplY3QgKGUuZy4gIiZQeVVuaWNvZGVfVHlwZSIpLgorICAgICMgT25seSB1c2VkIGJ5IHRoZSAnTyEnIGZvcm1hdCB1bml0IChhbmQgdGhlICJvYmplY3QiIGNvbnZlcnRlcikuCisgICAgc3ViY2xhc3Nfb2YgPSBOb25lCisKKyAgICAjIERvIHdlIHdhbnQgYW4gYWRqYWNlbnQgJ19sZW5ndGgnIHZhcmlhYmxlIGZvciB0aGlzIHZhcmlhYmxlPworICAgICMgT25seSB1c2VkIGJ5IGZvcm1hdCB1bml0cyBlbmRpbmcgd2l0aCAnIycuCisgICAgbGVuZ3RoID0gRmFsc2UKKworICAgICMgU2hvdWxkIHdlIHNob3cgdGhpcyBwYXJhbWV0ZXIgaW4gdGhlIGdlbmVyYXRlZAorICAgICMgX190ZXh0X3NpZ25hdHVyZV9fPyBUaGlzIGlzICphbG1vc3QqIGFsd2F5cyBUcnVlLgorICAgICMgKEl0J3Mgb25seSBGYWxzZSBmb3IgX19uZXdfXywgX19pbml0X18sIGFuZCBNRVRIX1NUQVRJQyBmdW5jdGlvbnMuKQorICAgIHNob3dfaW5fc2lnbmF0dXJlID0gVHJ1ZQorCisgICAgIyBPdmVycmlkZXMgdGhlIG5hbWUgdXNlZCBpbiBhIHRleHQgc2lnbmF0dXJlLgorICAgICMgVGhlIG5hbWUgdXNlZCBmb3IgYSAic2VsZiIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mCisgICAgIyBzZWxmLCB0eXBlLCBvciBtb2R1bGU7IGhvd2V2ZXIgdXNlcnMgY2FuIHNldCB0aGVpciBvd24uCisgICAgIyBUaGlzIGxldHMgdGhlIHNlbGZfY29udmVydGVyIG92ZXJydWxlIHRoZSB1c2VyLXNldHRhYmxlCisgICAgIyBuYW1lLCAqanVzdCogZm9yIHRoZSB0ZXh0IHNpZ25hdHVyZS4KKyAgICAjIE9ubHkgc2V0IGJ5IHNlbGZfY29udmVydGVyLgorICAgIHNpZ25hdHVyZV9uYW1lID0gTm9uZQorCisgICAgIyBrZWVwIGluIHN5bmMgd2l0aCBzZWxmX2NvbnZlcnRlci5fX2luaXRfXyEKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcHlfbmFtZSwgZnVuY3Rpb24sIGRlZmF1bHQ9dW5zcGVjaWZpZWQsICosIGNfZGVmYXVsdD1Ob25lLCBweV9kZWZhdWx0PU5vbmUsIGFubm90YXRpb249dW5zcGVjaWZpZWQsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnB5X25hbWUgPSBweV9uYW1lCisKKyAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBpZiBzZWxmLmRlZmF1bHRfdHlwZSBhbmQgbm90IGlzaW5zdGFuY2UoZGVmYXVsdCwgKHNlbGYuZGVmYXVsdF90eXBlLCBVbmtub3duKSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmRlZmF1bHRfdHlwZSwgdHlwZSk6CisgICAgICAgICAgICAgICAgICAgIHR5cGVzX3N0ciA9IHNlbGYuZGVmYXVsdF90eXBlLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHlwZXNfc3RyID0gJywgJy5qb2luKChjbHMuX19uYW1lX18gZm9yIGNscyBpbiBzZWxmLmRlZmF1bHRfdHlwZSkpCisgICAgICAgICAgICAgICAgZmFpbCgie306IGRlZmF1bHQgdmFsdWUgeyFyfSBmb3IgZmllbGQge30gaXMgbm90IG9mIHR5cGUge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGRlZmF1bHQsIG5hbWUsIHR5cGVzX3N0cikpCisgICAgICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisKKyAgICAgICAgaWYgY19kZWZhdWx0OgorICAgICAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBjX2RlZmF1bHQKKyAgICAgICAgaWYgcHlfZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYucHlfZGVmYXVsdCA9IHB5X2RlZmF1bHQKKworICAgICAgICBpZiBhbm5vdGF0aW9uICE9IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgZmFpbCgiVGhlICdhbm5vdGF0aW9uJyBwYXJhbWV0ZXIgaXMgbm90IGN1cnJlbnRseSBwZXJtaXR0ZWQuIikKKworICAgICAgICAjIHRoaXMgaXMgZGVsaWJlcmF0ZSwgdG8gcHJldmVudCB5b3UgZnJvbSBjYWNoaW5nIGluZm9ybWF0aW9uCisgICAgICAgICMgYWJvdXQgdGhlIGZ1bmN0aW9uIGluIHRoZSBpbml0LgorICAgICAgICAjICh0aGF0IGJyZWFrcyBpZiB3ZSBnZXQgY2xvbmVkLikKKyAgICAgICAgIyBzbyBhZnRlciB0aGlzIGNoYW5nZSB3ZSB3aWxsIG5vaXNpbHkgZmFpbC4KKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IExhbmRNaW5lKCJEb24ndCBhY2Nlc3MgbWVtYmVycyBvZiBzZWxmLmZ1bmN0aW9uIGluc2lkZSBjb252ZXJ0ZXJfaW5pdCEiKQorICAgICAgICBzZWxmLmNvbnZlcnRlcl9pbml0KCoqa3dhcmdzKQorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGlzX29wdGlvbmFsKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQpCisKKyAgICBkZWYgX3JlbmRlcl9zZWxmKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVyID0gcGFyYW1ldGVyCisgICAgICAgIG9yaWdpbmFsX25hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgbmFtZSA9IGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIob3JpZ2luYWxfbmFtZSkKKworICAgICAgICAjIGltcGxfYXJndW1lbnRzCisgICAgICAgIHMgPSAoIiYiIGlmIHNlbGYuaW1wbF9ieV9yZWZlcmVuY2UgZWxzZSAiIikgKyBuYW1lCisgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuYXBwZW5kKHMpCisgICAgICAgIGlmIHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5hcHBlbmQoc2VsZi5sZW5ndGhfbmFtZSgpKQorCisgICAgICAgICMgaW1wbF9wYXJhbWV0ZXJzCisgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZChzZWxmLnNpbXBsZV9kZWNsYXJhdGlvbihieV9yZWZlcmVuY2U9c2VsZi5pbXBsX2J5X3JlZmVyZW5jZSkpCisgICAgICAgIGlmIHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgZGF0YS5pbXBsX3BhcmFtZXRlcnMuYXBwZW5kKCJQeV9zc2l6ZV9jbGVhbl90ICIgKyBzZWxmLmxlbmd0aF9uYW1lKCkpCisKKyAgICBkZWYgX3JlbmRlcl9ub25fc2VsZihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICBzZWxmLnBhcmFtZXRlciA9IHBhcmFtZXRlcgorICAgICAgICBvcmlnaW5hbF9uYW1lID0gc2VsZi5uYW1lCisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKG9yaWdpbmFsX25hbWUpCisKKyAgICAgICAgIyBkZWNsYXJhdGlvbnMKKyAgICAgICAgZCA9IHNlbGYuZGVjbGFyYXRpb24oKQorICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoZCkKKworICAgICAgICAjIGluaXRpYWxpemVycworICAgICAgICBpbml0aWFsaXplcnMgPSBzZWxmLmluaXRpYWxpemUoKQorICAgICAgICBpZiBpbml0aWFsaXplcnM6CisgICAgICAgICAgICBkYXRhLmluaXRpYWxpemVycy5hcHBlbmQoJy8qIGluaXRpYWxpemVycyBmb3IgJyArIG5hbWUgKyAnICovXG4nICsgaW5pdGlhbGl6ZXJzLnJzdHJpcCgpKQorCisgICAgICAgICMgbW9kaWZpY2F0aW9ucworICAgICAgICBtb2RpZmljYXRpb25zID0gc2VsZi5tb2RpZnkoKQorICAgICAgICBpZiBtb2RpZmljYXRpb25zOgorICAgICAgICAgICAgZGF0YS5tb2RpZmljYXRpb25zLmFwcGVuZCgnLyogbW9kaWZpY2F0aW9ucyBmb3IgJyArIG5hbWUgKyAnICovXG4nICsgbW9kaWZpY2F0aW9ucy5yc3RyaXAoKSkKKworICAgICAgICAjIGtleXdvcmRzCisgICAgICAgIGRhdGEua2V5d29yZHMuYXBwZW5kKHBhcmFtZXRlci5uYW1lKQorCisgICAgICAgICMgZm9ybWF0X3VuaXRzCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW9uYWwoKSBhbmQgJ3wnIG5vdCBpbiBkYXRhLmZvcm1hdF91bml0czoKKyAgICAgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZCgnfCcpCisgICAgICAgIGlmIHBhcmFtZXRlci5pc19rZXl3b3JkX29ubHkoKSBhbmQgJyQnIG5vdCBpbiBkYXRhLmZvcm1hdF91bml0czoKKyAgICAgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZCgnJCcpCisgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZChzZWxmLmZvcm1hdF91bml0KQorCisgICAgICAgICMgcGFyc2VfYXJndW1lbnRzCisgICAgICAgIHNlbGYucGFyc2VfYXJndW1lbnQoZGF0YS5wYXJzZV9hcmd1bWVudHMpCisKKyAgICAgICAgIyBjbGVhbnVwCisgICAgICAgIGNsZWFudXAgPSBzZWxmLmNsZWFudXAoKQorICAgICAgICBpZiBjbGVhbnVwOgorICAgICAgICAgICAgZGF0YS5jbGVhbnVwLmFwcGVuZCgnLyogQ2xlYW51cCBmb3IgJyArIG5hbWUgKyAnICovXG4nICsgY2xlYW51cC5yc3RyaXAoKSArICJcbiIpCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJhbWV0ZXIgaXMgYSBjbGluaWMuUGFyYW1ldGVyIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9yZW5kZXJfc2VsZihwYXJhbWV0ZXIsIGRhdGEpCisgICAgICAgIHNlbGYuX3JlbmRlcl9ub25fc2VsZihwYXJhbWV0ZXIsIGRhdGEpCisKKyAgICBkZWYgbGVuZ3RoX25hbWUoc2VsZik6CisgICAgICAgICIiIkNvbXB1dGVzIHRoZSBuYW1lIG9mIHRoZSBhc3NvY2lhdGVkICJsZW5ndGgiIHZhcmlhYmxlLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpICsgIl9sZW5ndGgiCisKKyAgICAjIFdoeSBpcyB0aGlzIG9uZSBicm9rZW4gb3V0IHNlcGFyYXRlbHk/CisgICAgIyBGb3IgInBvc2l0aW9uYWwtb25seSIgZnVuY3Rpb24gcGFyc2luZywKKyAgICAjIHdoaWNoIGdlbmVyYXRlcyBhIGJ1bmNoIG9mIFB5QXJnX1BhcnNlVHVwbGUgY2FsbHMuCisgICAgZGVmIHBhcnNlX2FyZ3VtZW50KHNlbGYsIGxpc3QpOgorICAgICAgICBhc3NlcnQgbm90IChzZWxmLmNvbnZlcnRlciBhbmQgc2VsZi5lbmNvZGluZykKKyAgICAgICAgaWYgc2VsZi5mb3JtYXRfdW5pdCA9PSAnTyYnOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuY29udmVydGVyCisgICAgICAgICAgICBsaXN0LmFwcGVuZChzZWxmLmNvbnZlcnRlcikKKworICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoY19yZXByKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICBlbGlmIHNlbGYuc3ViY2xhc3Nfb2Y6CisgICAgICAgICAgICBsaXN0LmFwcGVuZChzZWxmLnN1YmNsYXNzX29mKQorCisgICAgICAgIGxlZ2FsX25hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgcyA9ICgiJiIgaWYgc2VsZi5wYXJzZV9ieV9yZWZlcmVuY2UgZWxzZSAiIikgKyBsZWdhbF9uYW1lCisgICAgICAgIGxpc3QuYXBwZW5kKHMpCisKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBsaXN0LmFwcGVuZCgiJiIgKyBzZWxmLmxlbmd0aF9uYW1lKCkpCisKKyAgICAjCisgICAgIyBBbGwgdGhlIGZ1bmN0aW9ucyBhZnRlciBoZXJlIGFyZSBpbnRlbmRlZCBhcyBleHRlbnNpb24gcG9pbnRzLgorICAgICMKKworICAgIGRlZiBzaW1wbGVfZGVjbGFyYXRpb24oc2VsZiwgYnlfcmVmZXJlbmNlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGVzIHRoZSBiYXNpYyBkZWNsYXJhdGlvbiBvZiB0aGUgdmFyaWFibGUuCisgICAgICAgIFVzZWQgaW4gY29tcHV0aW5nIHRoZSBwcm90b3R5cGUgZGVjbGFyYXRpb24gYW5kIHRoZQorICAgICAgICB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHByb3RvdHlwZSA9IFtzZWxmLnR5cGVdCisgICAgICAgIGlmIGJ5X3JlZmVyZW5jZSBvciBub3Qgc2VsZi50eXBlLmVuZHN3aXRoKCcqJyk6CisgICAgICAgICAgICBwcm90b3R5cGUuYXBwZW5kKCIgIikKKyAgICAgICAgaWYgYnlfcmVmZXJlbmNlOgorICAgICAgICAgICAgcHJvdG90eXBlLmFwcGVuZCgnKicpCisgICAgICAgIHByb3RvdHlwZS5hcHBlbmQoZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpKQorICAgICAgICByZXR1cm4gIiIuam9pbihwcm90b3R5cGUpCisKKyAgICBkZWYgZGVjbGFyYXRpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnQgdG8gZGVjbGFyZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgZGVjbGFyYXRpb24gPSBbc2VsZi5zaW1wbGVfZGVjbGFyYXRpb24oKV0KKyAgICAgICAgZGVmYXVsdCA9IHNlbGYuY19kZWZhdWx0CisgICAgICAgIGlmIG5vdCBkZWZhdWx0IGFuZCBzZWxmLnBhcmFtZXRlci5ncm91cDoKKyAgICAgICAgICAgIGRlZmF1bHQgPSBzZWxmLmNfaWdub3JlZF9kZWZhdWx0CisgICAgICAgIGlmIGRlZmF1bHQ6CisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoIiA9ICIpCisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoZGVmYXVsdCkKKyAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCI7IikKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoJ1xuUHlfc3NpemVfY2xlYW5fdCAnKQorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKHNlbGYubGVuZ3RoX25hbWUoKSkKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgnOycpCisgICAgICAgIHMgPSAiIi5qb2luKGRlY2xhcmF0aW9uKQorICAgICAgICAjIGRvdWJsZSB1cCBjdXJseS1icmFjZXMsIHRoaXMgc3RyaW5nIHdpbGwgYmUgdXNlZAorICAgICAgICAjIGFzIHBhcnQgb2YgYSBmb3JtYXRfbWFwKCkgdGVtcGxhdGUgbGF0ZXIKKyAgICAgICAgcyA9IHMucmVwbGFjZSgieyIsICJ7eyIpCisgICAgICAgIHMgPSBzLnJlcGxhY2UoIn0iLCAifX0iKQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGluaXRpYWxpemUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGlzIHZhcmlhYmxlIGJlZm9yZSBwYXJzaW5nLgorICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhpcyBjb2RlIGluZGVudGVkIGF0IGNvbHVtbiAwLgorICAgICAgICBJZiBubyBpbml0aWFsaXphdGlvbiBpcyBuZWNlc3NhcnksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgbW9kaWZ5KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBtb2RpZnkgdGhpcyB2YXJpYWJsZSBhZnRlciBwYXJzaW5nLgorICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhpcyBjb2RlIGluZGVudGVkIGF0IGNvbHVtbiAwLgorICAgICAgICBJZiBubyBpbml0aWFsaXphdGlvbiBpcyBuZWNlc3NhcnksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gY2xlYW51cCBpcyBuZWNlc3NhcnksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgcHJlX3JlbmRlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgc2Vjb25kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBsaWtlIGNvbnZlcnRlcl9pbml0LAorICAgICAgICBjYWxsZWQganVzdCBiZWZvcmUgcmVuZGVyaW5nLgorICAgICAgICBZb3UgYXJlIHBlcm1pdHRlZCB0byBleGFtaW5lIHNlbGYuZnVuY3Rpb24gaGVyZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworCitjbGFzcyBib29sX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBkZWZhdWx0X3R5cGUgPSBib29sCisgICAgZm9ybWF0X3VuaXQgPSAncCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICcwJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgc2VsZi5kZWZhdWx0ID0gYm9vbChzZWxmLmRlZmF1bHQpCisgICAgICAgICAgICBzZWxmLmNfZGVmYXVsdCA9IHN0cihpbnQoc2VsZi5kZWZhdWx0KSkKKworY2xhc3MgY2hhcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdjaGFyJworICAgIGRlZmF1bHRfdHlwZSA9IHN0cgorICAgIGZvcm1hdF91bml0ID0gJ2MnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiJ1wwJyIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmRlZmF1bHQsIHN0cikgYW5kIChsZW4oc2VsZi5kZWZhdWx0KSAhPSAxKToKKyAgICAgICAgICAgIGZhaWwoImNoYXJfY29udmVydGVyOiBpbGxlZ2FsIGRlZmF1bHQgdmFsdWUgIiArIHJlcHIoc2VsZi5kZWZhdWx0KSkKKworCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignQicsIGJpdHdpc2U9VHJ1ZSkKK2NsYXNzIHVuc2lnbmVkX2NoYXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgY2hhcicKKyAgICBkZWZhdWx0X3R5cGUgPSBpbnQKKyAgICBmb3JtYXRfdW5pdCA9ICdiJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIidcMCciCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYml0d2lzZT1GYWxzZSk6CisgICAgICAgIGlmIGJpdHdpc2U6CisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ0InCisKK2NsYXNzIGJ5dGVfY29udmVydGVyKHVuc2lnbmVkX2NoYXJfY29udmVydGVyKTogcGFzcworCitjbGFzcyBzaG9ydF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdzaG9ydCcKKyAgICBkZWZhdWx0X3R5cGUgPSBpbnQKKyAgICBmb3JtYXRfdW5pdCA9ICdoJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKK2NsYXNzIHVuc2lnbmVkX3Nob3J0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIHNob3J0JworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ0gnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBzaG9ydHMgbXVzdCBiZSBiaXR3aXNlIChmb3Igbm93KS4iKQorCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignQycsIHR5cGVzPSdzdHInKQorY2xhc3MgaW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBkZWZhdWx0X3R5cGUgPSBpbnQKKyAgICBmb3JtYXRfdW5pdCA9ICdpJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZXM9J2ludCcpOgorICAgICAgICBpZiB0eXBlcyA9PSAnc3RyJzoKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAnQycKKyAgICAgICAgZWxpZiB0eXBlcyAhPSAnaW50JzoKKyAgICAgICAgICAgIGZhaWwoImludF9jb252ZXJ0ZXI6IGlsbGVnYWwgJ3R5cGVzJyBhcmd1bWVudCIpCisKK2NsYXNzIHVuc2lnbmVkX2ludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnSScKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgYml0d2lzZToKKyAgICAgICAgICAgIGZhaWwoIlVuc2lnbmVkIGludHMgbXVzdCBiZSBiaXR3aXNlIChmb3Igbm93KS4iKQorCitjbGFzcyBsb25nX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2xvbmcnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnbCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9sb25nX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGxvbmcnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnaycKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgYml0d2lzZToKKyAgICAgICAgICAgIGZhaWwoIlVuc2lnbmVkIGxvbmdzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgUFlfTE9OR19MT05HX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1BZX0xPTkdfTE9ORycKKyAgICBkZWZhdWx0X3R5cGUgPSBpbnQKKyAgICBmb3JtYXRfdW5pdCA9ICdMJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKK2NsYXNzIHVuc2lnbmVkX1BZX0xPTkdfTE9OR19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBQWV9MT05HX0xPTkcnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnSycKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgYml0d2lzZToKKyAgICAgICAgICAgIGZhaWwoIlVuc2lnbmVkIFBZX0xPTkdfTE9OR3MgbXVzdCBiZSBiaXR3aXNlIChmb3Igbm93KS4iKQorCitjbGFzcyBQeV9zc2l6ZV90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X3NzaXplX3QnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnbicKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisKK2NsYXNzIGZsb2F0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2Zsb2F0JworICAgIGRlZmF1bHRfdHlwZSA9IGZsb2F0CisgICAgZm9ybWF0X3VuaXQgPSAnZicKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwLjAiCisKK2NsYXNzIGRvdWJsZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdkb3VibGUnCisgICAgZGVmYXVsdF90eXBlID0gZmxvYXQKKyAgICBmb3JtYXRfdW5pdCA9ICdkJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAuMCIKKworCitjbGFzcyBQeV9jb21wbGV4X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2NvbXBsZXgnCisgICAgZGVmYXVsdF90eXBlID0gY29tcGxleAorICAgIGZvcm1hdF91bml0ID0gJ0QnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiezAuMCwgMC4wfSIKKworCitjbGFzcyBvYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlPYmplY3QgKicKKyAgICBmb3JtYXRfdW5pdCA9ICdPJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGNvbnZlcnRlcj1Ob25lLCB0eXBlPU5vbmUsIHN1YmNsYXNzX29mPU5vbmUpOgorICAgICAgICBpZiBjb252ZXJ0ZXI6CisgICAgICAgICAgICBpZiBzdWJjbGFzc19vZjoKKyAgICAgICAgICAgICAgICBmYWlsKCJvYmplY3Q6IENhbm5vdCBwYXNzIGluIGJvdGggJ2NvbnZlcnRlcicgYW5kICdzdWJjbGFzc19vZiciKQorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdPJicKKyAgICAgICAgICAgIHNlbGYuY29udmVydGVyID0gY29udmVydGVyCisgICAgICAgIGVsaWYgc3ViY2xhc3Nfb2Y6CisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ08hJworICAgICAgICAgICAgc2VsZi5zdWJjbGFzc19vZiA9IHN1YmNsYXNzX29mCisKKyAgICAgICAgaWYgdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudHlwZSA9IHR5cGUKKworCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigncyMnLCBsZW5ndGg9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd5JywgdHlwZXM9ImJ5dGVzIikKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd5IycsIHR5cGVzPSJieXRlcyIsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3onLCBudWxsYWJsZT1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3ojJywgbnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpCitjbGFzcyBzdHJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY29uc3QgY2hhciAqJworICAgIGRlZmF1bHRfdHlwZSA9IChzdHIsIE51bGwsIE5vbmVUeXBlKQorICAgIGZvcm1hdF91bml0ID0gJ3MnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgZW5jb2Rpbmc9Tm9uZSwgdHlwZXM9InN0ciIsCisgICAgICAgIGxlbmd0aD1GYWxzZSwgbnVsbGFibGU9RmFsc2UsIHplcm9lcz1GYWxzZSk6CisKKyAgICAgICAgdHlwZXMgPSBzZXQodHlwZXMuc3RyaXAoKS5zcGxpdCgpKQorICAgICAgICBieXRlc190eXBlID0gc2V0KCgiYnl0ZXMiLCkpCisgICAgICAgIHN0cl90eXBlID0gc2V0KCgic3RyIiwpKQorICAgICAgICBhbGxfM190eXBlID0gc2V0KCgiYnl0ZWFycmF5IiwpKSB8IGJ5dGVzX3R5cGUgfCBzdHJfdHlwZQorICAgICAgICBpc19ieXRlcyA9IHR5cGVzID09IGJ5dGVzX3R5cGUKKyAgICAgICAgaXNfc3RyID0gdHlwZXMgPT0gc3RyX3R5cGUKKyAgICAgICAgaXNfYWxsXzMgPSB0eXBlcyA9PSBhbGxfM190eXBlCisKKyAgICAgICAgc2VsZi5sZW5ndGggPSBib29sKGxlbmd0aCkKKyAgICAgICAgZm9ybWF0X3VuaXQgPSBOb25lCisKKyAgICAgICAgaWYgZW5jb2Rpbmc6CisgICAgICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKKworICAgICAgICAgICAgaWYgaXNfc3RyIGFuZCBub3QgKGxlbmd0aCBvciB6ZXJvZXMgb3IgbnVsbGFibGUpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2VzJworICAgICAgICAgICAgZWxpZiBpc19hbGxfMyBhbmQgbm90IChsZW5ndGggb3IgemVyb2VzIG9yIG51bGxhYmxlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdldCcKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBsZW5ndGggYW5kIHplcm9lcyBhbmQgbm90IG51bGxhYmxlOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2VzIycKKyAgICAgICAgICAgIGVsaWYgaXNfYWxsXzMgYW5kIGxlbmd0aCBhbmQgbm90IChudWxsYWJsZSBvciB6ZXJvZXMpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2V0IycKKworICAgICAgICAgICAgaWYgZm9ybWF0X3VuaXQuZW5kc3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICBmYWlsKCJTb3JyeTogY29kZSB1c2luZyBmb3JtYXQgdW5pdCAiLCByZXByKGZvcm1hdF91bml0KSwgInByb2JhYmx5IGRvZXNuJ3Qgd29yayBwcm9wZXJseSB5ZXQuXG5HaXZlIExhcnJ5IHlvdXIgdGVzdCBjYXNlIGFuZCBoZSdsbCBpdC4iKQorICAgICAgICAgICAgICAgICMgVE9ETyBzZXQgcG9pbnRlciB0byBOVUxMCisgICAgICAgICAgICAgICAgIyBUT0RPIGFkZCBjbGVhbnVwIGZvciBidWZmZXIKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHplcm9lczoKKyAgICAgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyAoemVyb2VzIGlzIG9ubHkgbGVnYWwgd2l0aCBhbiBlbmNvZGluZykiKQorCisgICAgICAgICAgICBpZiBpc19ieXRlcyBhbmQgbm90IChudWxsYWJsZSBvciBsZW5ndGgpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3knCisgICAgICAgICAgICBlbGlmIGlzX2J5dGVzIGFuZCBsZW5ndGggYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5IycKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBub3QgKG51bGxhYmxlIG9yIGxlbmd0aCk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncycKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBsZW5ndGggYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdzIycKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBudWxsYWJsZSAgYW5kIG5vdCBsZW5ndGg6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneicKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBudWxsYWJsZSBhbmQgbGVuZ3RoOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3ojJworCisgICAgICAgIGlmIG5vdCBmb3JtYXRfdW5pdDoKKyAgICAgICAgICAgIGZhaWwoInN0cl9jb252ZXJ0ZXI6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIikKKyAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9IGZvcm1hdF91bml0CisKKworY2xhc3MgUHlCeXRlc09iamVjdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeUJ5dGVzT2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnUycKKworY2xhc3MgUHlCeXRlQXJyYXlPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlCeXRlQXJyYXlPYmplY3QgKicKKyAgICBmb3JtYXRfdW5pdCA9ICdZJworCitjbGFzcyB1bmljb2RlX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgZGVmYXVsdF90eXBlID0gKHN0ciwgTnVsbCwgTm9uZVR5cGUpCisgICAgZm9ybWF0X3VuaXQgPSAnVScKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3UjJywgbGVuZ3RoPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignWicsIG51bGxhYmxlPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignWiMnLCBudWxsYWJsZT1UcnVlLCBsZW5ndGg9VHJ1ZSkKK2NsYXNzIFB5X1VOSUNPREVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfVU5JQ09ERSAqJworICAgIGRlZmF1bHRfdHlwZSA9IChzdHIsIE51bGwsIE5vbmVUeXBlKQorICAgIGZvcm1hdF91bml0ID0gJ3UnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgbnVsbGFibGU9RmFsc2UsIGxlbmd0aD1GYWxzZSk6CisgICAgICAgIGZvcm1hdF91bml0ID0gJ1onIGlmIG51bGxhYmxlIGVsc2UgJ3UnCisgICAgICAgIGlmIGxlbmd0aDoKKyAgICAgICAgICAgIGZvcm1hdF91bml0ICs9ICcjJworICAgICAgICAgICAgc2VsZi5sZW5ndGggPSBUcnVlCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisjCisjIFdlIGRlZmluZSB0aHJlZSBzdHJpbmcgY29udmVudGlvbnMgZm9yIGJ1ZmZlciB0eXBlcyBpbiB0aGUgJ3R5cGVzJyBhcmd1bWVudDoKKyMgICdidWZmZXInIDogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlCisjICAncndidWZmZXInOiBhbnkgb2JqZWN0IHN1cHBvcnRpbmcgdGhlIGJ1ZmZlciBpbnRlcmZhY2UsIGJ1dCBtdXN0IGJlIHdyaXRlYWJsZQorIyAgJ3JvYnVmZmVyJzogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBub3QgYmUgd3JpdGVhYmxlCisjCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigncyonLCB0eXBlcz0nc3RyIGJ5dGVzIGJ5dGVhcnJheSBidWZmZXInKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3oqJywgdHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd3KicsIHR5cGVzPSdieXRlYXJyYXkgcndidWZmZXInKQorY2xhc3MgUHlfYnVmZmVyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2J1ZmZlcicKKyAgICBmb3JtYXRfdW5pdCA9ICd5KicKKyAgICBpbXBsX2J5X3JlZmVyZW5jZSA9IFRydWUKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICJ7TlVMTCwgTlVMTH0iCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZXM9J2J5dGVzIGJ5dGVhcnJheSBidWZmZXInLCBudWxsYWJsZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuZGVmYXVsdCBub3QgaW4gKHVuc3BlY2lmaWVkLCBOb25lKToKKyAgICAgICAgICAgIGZhaWwoIlRoZSBvbmx5IGxlZ2FsIGRlZmF1bHQgdmFsdWUgZm9yIFB5X2J1ZmZlciBpcyBOb25lLiIpCisgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gc2VsZi5jX2lnbm9yZWRfZGVmYXVsdAorICAgICAgICB0eXBlcyA9IHNldCh0eXBlcy5zdHJpcCgpLnNwbGl0KCkpCisgICAgICAgIGJ5dGVzX3R5cGUgPSBzZXQoKCdieXRlcycsKSkKKyAgICAgICAgYnl0ZWFycmF5X3R5cGUgPSBzZXQoKCdieXRlYXJyYXknLCkpCisgICAgICAgIGJ1ZmZlcl90eXBlID0gc2V0KCgnYnVmZmVyJywpKQorICAgICAgICByd2J1ZmZlcl90eXBlID0gc2V0KCgncndidWZmZXInLCkpCisgICAgICAgIHJvYnVmZmVyX3R5cGUgPSBzZXQoKCdyb2J1ZmZlcicsKSkKKyAgICAgICAgc3RyX3R5cGUgPSBzZXQoKCdzdHInLCkpCisgICAgICAgIGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSA9IGJ5dGVzX3R5cGUgfCBieXRlYXJyYXlfdHlwZSB8IGJ1ZmZlcl90eXBlCisKKyAgICAgICAgZm9ybWF0X3VuaXQgPSBOb25lCisgICAgICAgIGlmIHR5cGVzID09IChzdHJfdHlwZSB8IGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSk6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdzKicgaWYgbm90IG51bGxhYmxlIGVsc2UgJ3oqJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZmFpbCgnUHlfYnVmZmVyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKG51bGxhYmxlPVRydWUpJykKKyAgICAgICAgICAgIGVsaWYgdHlwZXMgPT0gKGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgICAgICAgICBlbGlmIHR5cGVzID09IChieXRlYXJyYXlfdHlwZSB8IHJ3YnVmZmVyX3R5cGUpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3cqJworICAgICAgICBpZiBub3QgZm9ybWF0X3VuaXQ6CisgICAgICAgICAgICBmYWlsKCJQeV9idWZmZXJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyIpCisKKyAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9IGZvcm1hdF91bml0CisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgbmFtZSA9IGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKQorICAgICAgICByZXR1cm4gIiIuam9pbihbImlmICgiLCBuYW1lLCAiLm9iailcbiAgIFB5QnVmZmVyX1JlbGVhc2UoJiIsIG5hbWUsICIpO1xuIl0pCisKKworZGVmIGNvcnJlY3RfbmFtZV9mb3Jfc2VsZihmKToKKyAgICBpZiBmLmtpbmQgaW4gKENBTExBQkxFLCBNRVRIT0RfSU5JVCk6CisgICAgICAgIGlmIGYuY2xzOgorICAgICAgICAgICAgcmV0dXJuICJQeU9iamVjdCAqIiwgInNlbGYiCisgICAgICAgIHJldHVybiAiUHlNb2R1bGVEZWYgKiIsICJtb2R1bGUiCisgICAgaWYgZi5raW5kID09IFNUQVRJQ19NRVRIT0Q6CisgICAgICAgIHJldHVybiAidm9pZCAqIiwgIm51bGwiCisgICAgaWYgZi5raW5kIGluIChDTEFTU19NRVRIT0QsIE1FVEhPRF9ORVcpOgorICAgICAgICByZXR1cm4gIlB5VHlwZU9iamVjdCAqIiwgInR5cGUiCisgICAgcmFpc2UgUnVudGltZUVycm9yKCJVbmhhbmRsZWQgdHlwZSBvZiBmdW5jdGlvbiBmOiAiICsgcmVwcihmLmtpbmQpKQorCitkZWYgcmVxdWlyZWRfdHlwZV9mb3Jfc2VsZl9mb3JfcGFyc2VyKGYpOgorICAgIHR5cGUsIF8gPSBjb3JyZWN0X25hbWVfZm9yX3NlbGYoZikKKyAgICBpZiBmLmtpbmQgaW4gKE1FVEhPRF9JTklULCBNRVRIT0RfTkVXLCBTVEFUSUNfTUVUSE9ELCBDTEFTU19NRVRIT0QpOgorICAgICAgICByZXR1cm4gdHlwZQorICAgIHJldHVybiBOb25lCisKKworY2xhc3Mgc2VsZl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgIiIiCisgICAgQSBzcGVjaWFsLWNhc2UgY29udmVydGVyOgorICAgIHRoaXMgaXMgdGhlIGRlZmF1bHQgY29udmVydGVyIHVzZWQgZm9yICJzZWxmIi4KKyAgICAiIiIKKyAgICB0eXBlID0gTm9uZQorICAgIGZvcm1hdF91bml0ID0gJycKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCB0eXBlPU5vbmUpOgorICAgICAgICBzZWxmLnNwZWNpZmllZF90eXBlID0gdHlwZQorCisgICAgZGVmIHByZV9yZW5kZXIoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZ1bmN0aW9uCisgICAgICAgIGRlZmF1bHRfdHlwZSwgZGVmYXVsdF9uYW1lID0gY29ycmVjdF9uYW1lX2Zvcl9zZWxmKGYpCisgICAgICAgIHNlbGYuc2lnbmF0dXJlX25hbWUgPSBkZWZhdWx0X25hbWUKKyAgICAgICAgc2VsZi50eXBlID0gc2VsZi5zcGVjaWZpZWRfdHlwZSBvciBzZWxmLnR5cGUgb3IgZGVmYXVsdF90eXBlCisKKyAgICAgICAga2luZCA9IHNlbGYuZnVuY3Rpb24ua2luZAorICAgICAgICBuZXdfb3JfaW5pdCA9IGtpbmQgaW4gKE1FVEhPRF9ORVcsIE1FVEhPRF9JTklUKQorCisgICAgICAgIGlmIChraW5kID09IFNUQVRJQ19NRVRIT0QpIG9yIG5ld19vcl9pbml0OgorICAgICAgICAgICAgc2VsZi5zaG93X2luX3NpZ25hdHVyZSA9IEZhbHNlCisKKyAgICAjIHRwX25ldyAoTUVUSE9EX05FVykgZnVuY3Rpb25zIGFyZSBvZiB0eXBlIG5ld2Z1bmM6CisgICAgIyAgICAgdHlwZWRlZiBQeU9iamVjdCAqKCpuZXdmdW5jKShzdHJ1Y3QgX3R5cGVvYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgIyBQeVR5cGVPYmplY3QgaXMgYSB0eXBlZGVmIGZvciBzdHJ1Y3QgX3R5cGVvYmplY3QuCisgICAgIworICAgICMgdHBfaW5pdCAoTUVUSE9EX0lOSVQpIGZ1bmN0aW9ucyBhcmUgb2YgdHlwZSBpbml0cHJvYzoKKyAgICAjICAgICB0eXBlZGVmIGludCAoKmluaXRwcm9jKShQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKKyAgICAjCisgICAgIyBBbGwgb3RoZXIgZnVuY3Rpb25zIGdlbmVyYXRlZCBieSBBcmd1bWVudCBDbGluaWMgYXJlIHN0b3JlZCBpbgorICAgICMgUHlNZXRob2REZWYgc3RydWN0dXJlcywgaW4gdGhlIG1sX21ldGggc2xvdCwgd2hpY2ggaXMgb2YgdHlwZSBQeUNGdW5jdGlvbjoKKyAgICAjICAgICB0eXBlZGVmIFB5T2JqZWN0ICooKlB5Q0Z1bmN0aW9uKShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKKyAgICAjIEhvd2V2ZXIhICBXZSBoYWJpdHVhbGx5IGNhc3QgdGhlc2UgZnVuY3Rpb25zIHRvIFB5Q0Z1bmN0aW9uLAorICAgICMgc2luY2UgZnVuY3Rpb25zIHRoYXQgYWNjZXB0IGtleXdvcmQgYXJndW1lbnRzIGRvbid0IGZpdCB0aGlzIHNpZ25hdHVyZQorICAgICMgYnV0IGFyZSBzdG9yZWQgdGhlcmUgYW55d2F5LiAgU28gc3RyaWN0IHR5cGUgZXF1YWxpdHkgaXNuJ3QgaW1wb3J0YW50CisgICAgIyBmb3IgdGhlc2UgZnVuY3Rpb25zLgorICAgICMKKyAgICAjIFNvOgorICAgICMKKyAgICAjICogVGhlIG5hbWUgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGUgaW1wbCBhbmQgdGhlIHBhcnNpbmcgZnVuY3Rpb24gd2lsbCBhbHdheXMKKyAgICAjICAgYmUgc2VsZi5uYW1lLgorICAgICMKKyAgICAjICogVGhlIHR5cGUgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGUgaW1wbCB3aWxsIGFsd2F5cyBiZSBvZiBzZWxmLnR5cGUuCisgICAgIworICAgICMgKiBJZiB0aGUgZnVuY3Rpb24gaXMgbmVpdGhlciB0cF9uZXcgKE1FVEhPRF9ORVcpIG5vciB0cF9pbml0IChNRVRIT0RfSU5JVCk6CisgICAgIyAgICogVGhlIHR5cGUgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGUgcGFyc2luZyBmdW5jdGlvbiBpcyBhbHNvIHNlbGYudHlwZS4KKyAgICAjICAgICBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHN0ZXAgaW50byB0aGUgcGFyc2luZyBmdW5jdGlvbiwgeW91ciAic2VsZiIgcGFyYW1ldGVyCisgICAgIyAgICAgaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSwgd2hpY2ggbWF5IG1ha2UgZGVidWdnaW5nIG1vcmUgcGxlYXNhbnQuCisgICAgIworICAgICMgKiBFbHNlIGlmIHRoZSBmdW5jdGlvbiBpcyB0cF9uZXcgKE1FVEhPRF9ORVcpOgorICAgICMgICAqIFRoZSB0eXBlIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIHBhcnNpbmcgZnVuY3Rpb24gaXMgIlB5VHlwZU9iamVjdCAqIiwKKyAgICAjICAgICBzbyB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgYW4gZXhhY3QgbWF0Y2guCisgICAgIyAgICogSWYgc2VsZi50eXBlICE9ICJQeVR5cGVPYmplY3QgKiIsIHdlIGNhc3QgdGhlIGZpcnN0IHBhcmFtZXRlciB0byBzZWxmLnR5cGUKKyAgICAjICAgICBpbiB0aGUgaW1wbCBjYWxsLgorICAgICMKKyAgICAjICogRWxzZSBpZiB0aGUgZnVuY3Rpb24gaXMgdHBfaW5pdCAoTUVUSE9EX0lOSVQpOgorICAgICMgICAqIFRoZSB0eXBlIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIHBhcnNpbmcgZnVuY3Rpb24gaXMgIlB5T2JqZWN0ICoiLAorICAgICMgICAgIHNvIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBpcyBhbiBleGFjdCBtYXRjaC4KKyAgICAjICAgKiBJZiBzZWxmLnR5cGUgIT0gIlB5T2JqZWN0ICoiLCB3ZSBjYXN0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gc2VsZi50eXBlCisgICAgIyAgICAgaW4gdGhlIGltcGwgY2FsbC4KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJzZXJfdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVkX3R5cGVfZm9yX3NlbGZfZm9yX3BhcnNlcihzZWxmLmZ1bmN0aW9uKSBvciBzZWxmLnR5cGUKKworICAgIGRlZiByZW5kZXIoc2VsZiwgcGFyYW1ldGVyLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIHBhcmFtZXRlciBpcyBhIGNsaW5pYy5QYXJhbWV0ZXIgaW5zdGFuY2UuCisgICAgICAgIGRhdGEgaXMgYSBDUmVuZGVyRGF0YSBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZnVuY3Rpb24ua2luZCA9PSBTVEFUSUNfTUVUSE9EOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fcmVuZGVyX3NlbGYocGFyYW1ldGVyLCBkYXRhKQorCisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBzZWxmLnBhcnNlcl90eXBlOgorICAgICAgICAgICAgIyBpbnNlcnQgY2FzdCB0byBpbXBsX2FyZ3VtZW50WzBdLCBha2Egc2VsZi4KKyAgICAgICAgICAgICMgd2Uga25vdyB3ZSdyZSBpbiB0aGUgZmlyc3Qgc2xvdCBpbiBhbGwgdGhlIENSZW5kZXJEYXRhIGxpc3RzLAorICAgICAgICAgICAgIyBiZWNhdXNlIHdlIHJlbmRlciBwYXJhbWV0ZXJzIGluIG9yZGVyLCBhbmQgc2VsZiBpcyBhbHdheXMgZmlyc3QuCisgICAgICAgICAgICBhc3NlcnQgbGVuKGRhdGEuaW1wbF9hcmd1bWVudHMpID09IDEKKyAgICAgICAgICAgIGFzc2VydCBkYXRhLmltcGxfYXJndW1lbnRzWzBdID09IHNlbGYubmFtZQorICAgICAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50c1swXSA9ICcoJyArIHNlbGYudHlwZSArICIpIiArIGRhdGEuaW1wbF9hcmd1bWVudHNbMF0KKworICAgIGRlZiBzZXRfdGVtcGxhdGVfZGljdChzZWxmLCB0ZW1wbGF0ZV9kaWN0KToKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl9uYW1lJ10gPSBzZWxmLm5hbWUKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlJ10gPSBzZWxmLnBhcnNlcl90eXBlCisgICAgICAgIGtpbmQgPSBzZWxmLmZ1bmN0aW9uLmtpbmQKKyAgICAgICAgY2xzID0gc2VsZi5mdW5jdGlvbi5jbHMKKworICAgICAgICBpZiAoKGtpbmQgaW4gKE1FVEhPRF9ORVcsIE1FVEhPRF9JTklUKSkgYW5kIGNscyBhbmQgY2xzLnR5cGVkZWYpOgorICAgICAgICAgICAgaWYga2luZCA9PSBNRVRIT0RfTkVXOgorICAgICAgICAgICAgICAgIHBhc3NlZF9pbl90eXBlID0gc2VsZi5uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3NlZF9pbl90eXBlID0gJ1B5X1RZUEUoe30pJy5mb3JtYXQoc2VsZi5uYW1lKQorCisgICAgICAgICAgICBsaW5lID0gJyh7cGFzc2VkX2luX3R5cGV9ID09IHt0eXBlX29iamVjdH0pICYmXG4gICAgICAgICcKKyAgICAgICAgICAgIGQgPSB7CisgICAgICAgICAgICAgICAgJ3R5cGVfb2JqZWN0Jzogc2VsZi5mdW5jdGlvbi5jbHMudHlwZV9vYmplY3QsCisgICAgICAgICAgICAgICAgJ3Bhc3NlZF9pbl90eXBlJzogcGFzc2VkX2luX3R5cGUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZW1wbGF0ZV9kaWN0WydzZWxmX3R5cGVfY2hlY2snXSA9IGxpbmUuZm9ybWF0X21hcChkKQorCisKKworZGVmIGFkZF9jX3JldHVybl9jb252ZXJ0ZXIoZiwgbmFtZT1Ob25lKToKKyAgICBpZiBub3QgbmFtZToKKyAgICAgICAgbmFtZSA9IGYuX19uYW1lX18KKyAgICAgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoJ19yZXR1cm5fY29udmVydGVyJyk6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBuYW1lID0gbmFtZVs6LWxlbignX3JldHVybl9jb252ZXJ0ZXInKV0KKyAgICByZXR1cm5fY29udmVydGVyc1tuYW1lXSA9IGYKKyAgICByZXR1cm4gZgorCisKK2NsYXNzIENSZXR1cm5Db252ZXJ0ZXJBdXRvUmVnaXN0ZXIodHlwZSk6CisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgIGFkZF9jX3JldHVybl9jb252ZXJ0ZXIoY2xzKQorCitjbGFzcyBDUmV0dXJuQ29udmVydGVyKG1ldGFjbGFzcz1DUmV0dXJuQ29udmVydGVyQXV0b1JlZ2lzdGVyKToKKworICAgICMgVGhlIEMgdHlwZSB0byB1c2UgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgIyAndHlwZScgc2hvdWxkIGJlIGEgUHl0aG9uIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSB0eXBlLCBlLmcuICJpbnQiLgorICAgICMgSWYgdGhpcyBpcyBhIHBvaW50ZXIgdHlwZSwgdGhlIHR5cGUgc3RyaW5nIHNob3VsZCBlbmQgd2l0aCAnIConLgorICAgIHR5cGUgPSAnUHlPYmplY3QgKicKKworICAgICMgVGhlIFB5dGhvbiBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciwgYXMgYSBQeXRob24gdmFsdWUuCisgICAgIyBPciB0aGUgbWFnaWMgdmFsdWUgInVuc3BlY2lmaWVkIiBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorICAgIGRlZmF1bHQgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgcHlfZGVmYXVsdD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucHlfZGVmYXVsdCA9IHB5X2RlZmF1bHQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXR1cm5fY29udmVydGVyX2luaXQoKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHMgPSAnLCAnLmpvaW4obmFtZSArICc9JyArIHJlcHIodmFsdWUpIGZvciBuYW1lLCB2YWx1ZSBpbiBrd2FyZ3MuaXRlbXMoKSkKKyAgICAgICAgICAgIHN5cy5leGl0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgJygnICsgcyArICcpXG4nICsgc3RyKGUpKQorCisgICAgZGVmIHJldHVybl9jb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRlY2xhcmUoc2VsZiwgZGF0YSwgbmFtZT0iX3JldHVybl92YWx1ZSIpOgorICAgICAgICBsaW5lID0gW10KKyAgICAgICAgYWRkID0gbGluZS5hcHBlbmQKKyAgICAgICAgYWRkKHNlbGYudHlwZSkKKyAgICAgICAgaWYgbm90IHNlbGYudHlwZS5lbmRzd2l0aCgnKicpOgorICAgICAgICAgICAgYWRkKCcgJykKKyAgICAgICAgYWRkKG5hbWUgKyAnOycpCisgICAgICAgIGRhdGEuZGVjbGFyYXRpb25zLmFwcGVuZCgnJy5qb2luKGxpbmUpKQorICAgICAgICBkYXRhLnJldHVybl92YWx1ZSA9IG5hbWUKKworICAgIGRlZiBlcnJfb2NjdXJyZWRfaWYoc2VsZiwgZXhwciwgZGF0YSk6CisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCdpZiAoKHt9KSAmJiBQeUVycl9PY2N1cnJlZCgpKVxuICAgIGdvdG8gZXhpdDtcbicuZm9ybWF0KGV4cHIpKQorCisgICAgZGVmIGVycl9vY2N1cnJlZF9pZl9udWxsX3BvaW50ZXIoc2VsZiwgdmFyaWFibGUsIGRhdGEpOgorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgnaWYgKHt9ID09IE5VTEwpXG4gICAgZ290byBleGl0O1xuJy5mb3JtYXQodmFyaWFibGUpKQorCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBmdW5jdGlvbiBpcyBhIGNsaW5pYy5GdW5jdGlvbiBpbnN0YW5jZS4KKyAgICAgICAgZGF0YSBpcyBhIENSZW5kZXJEYXRhIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCithZGRfY19yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIsICdvYmplY3QnKQorCitjbGFzcyBOb25lVHlwZV9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoJycnCitpZiAoX3JldHVybl92YWx1ZSAhPSBQeV9Ob25lKQorICAgIGdvdG8gZXhpdDsKK3JldHVybl92YWx1ZSA9IFB5X05vbmU7CitQeV9JTkNSRUYoUHlfTm9uZSk7CisnJycuc3RyaXAoKSkKKworY2xhc3MgYm9vbF9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnaW50JworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCdyZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7XG4nKQorCitjbGFzcyBsb25nX3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsb25nJworICAgIGNvbnZlcnNpb25fZm4gPSAnUHlMb25nX0Zyb21Mb25nJworICAgIGNhc3QgPSAnJworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJycuam9pbigoJ3JldHVybl92YWx1ZSA9ICcsIHNlbGYuY29udmVyc2lvbl9mbiwgJygnLCBzZWxmLmNhc3QsICdfcmV0dXJuX3ZhbHVlKTtcbicpKSkKKworY2xhc3MgaW50X3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBjYXN0ID0gJyhsb25nKScKKworY2xhc3MgaW5pdF9yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgIiIiCisgICAgU3BlY2lhbCByZXR1cm4gY29udmVydGVyIGZvciBfX2luaXRfXyBmdW5jdGlvbnMuCisgICAgIiIiCisgICAgdHlwZSA9ICdpbnQnCisgICAgY2FzdCA9ICcobG9uZyknCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgcGFzcworCitjbGFzcyB1bnNpZ25lZF9sb25nX3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGxvbmcnCisgICAgY29udmVyc2lvbl9mbiA9ICdQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZycKKworY2xhc3MgdW5zaWduZWRfaW50X3JldHVybl9jb252ZXJ0ZXIodW5zaWduZWRfbG9uZ19yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKKyAgICBjYXN0ID0gJyh1bnNpZ25lZCBsb25nKScKKworY2xhc3MgUHlfc3NpemVfdF9yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGNvbnZlcnNpb25fZm4gPSAnUHlMb25nX0Zyb21Tc2l6ZV90JworCitjbGFzcyBzaXplX3RfcmV0dXJuX2NvbnZlcnRlcihsb25nX3JldHVybl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnc2l6ZV90JworICAgIGNvbnZlcnNpb25fZm4gPSAnUHlMb25nX0Zyb21TaXplX3QnCisKKworY2xhc3MgZG91YmxlX3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdkb3VibGUnCisgICAgY2FzdCA9ICcnCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmKCJfcmV0dXJuX3ZhbHVlID09IC0xLjAiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICdyZXR1cm5fdmFsdWUgPSBQeUZsb2F0X0Zyb21Eb3VibGUoJyArIHNlbGYuY2FzdCArICdfcmV0dXJuX3ZhbHVlKTtcbicpCisKK2NsYXNzIGZsb2F0X3JldHVybl9jb252ZXJ0ZXIoZG91YmxlX3JldHVybl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZmxvYXQnCisgICAgY2FzdCA9ICcoZG91YmxlKScKKworCitjbGFzcyBEZWNvZGVGU0RlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2NoYXIgKicKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWZfbnVsbF9wb2ludGVyKCJfcmV0dXJuX3ZhbHVlIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChfcmV0dXJuX3ZhbHVlKTtcbicpCisKKworY2xhc3MgSW5kZW50U3RhY2s6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmluZGVudHMgPSBbXQorICAgICAgICBzZWxmLm1hcmdpbiA9IE5vbmUKKworICAgIGRlZiBfZW5zdXJlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgZmFpbCgnSW5kZW50U3RhY2sgZXhwZWN0ZWQgaW5kZW50cywgYnV0IG5vbmUgYXJlIGRlZmluZWQuJykKKworICAgIGRlZiBtZWFzdXJlKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBsaW5lJ3MgbWFyZ2luLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAgICAgICAgICAgZmFpbCgnVGFiIGNoYXJhY3RlcnMgYXJlIGlsbGVnYWwgaW4gdGhlIEFyZ3VtZW50IENsaW5pYyBEU0wuJykKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLmxzdHJpcCgpCisgICAgICAgIGlmIG5vdCBsZW4oc3RyaXBwZWQpOgorICAgICAgICAgICAgIyB3ZSBjYW4ndCB0ZWxsIGFueXRoaW5nIGZyb20gYW4gZW1wdHkgbGluZQorICAgICAgICAgICAgIyBzbyBqdXN0IHByZXRlbmQgaXQncyBpbmRlbnRlZCBsaWtlIG91ciBjdXJyZW50IGluZGVudAorICAgICAgICAgICAgc2VsZi5fZW5zdXJlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGVudHNbLTFdCisgICAgICAgIHJldHVybiBsZW4obGluZSkgLSBsZW4oc3RyaXBwZWQpCisKKyAgICBkZWYgaW5mZXIoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBJbmZlciB3aGF0IGlzIG5vdyB0aGUgY3VycmVudCBtYXJnaW4gYmFzZWQgb24gdGhpcyBsaW5lLgorICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgMSBpZiB3ZSBoYXZlIGluZGVudGVkIChvciB0aGlzIGlzIHRoZSBmaXJzdCBtYXJnaW4pCisgICAgICAgICAgICAwIGlmIHRoZSBtYXJnaW4gaGFzIG5vdCBjaGFuZ2VkCisgICAgICAgICAgIC1OIGlmIHdlIGhhdmUgZGVkZW50ZWQgTiB0aW1lcworICAgICAgICAiIiIKKyAgICAgICAgaW5kZW50ID0gc2VsZi5tZWFzdXJlKGxpbmUpCisgICAgICAgIG1hcmdpbiA9ICcgJyAqIGluZGVudAorICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLmFwcGVuZChpbmRlbnQpCisgICAgICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgY3VycmVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgaWYgaW5kZW50ID09IGN1cnJlbnQ6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBpbmRlbnQgPiBjdXJyZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLmFwcGVuZChpbmRlbnQpCisgICAgICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgIyBpbmRlbnQgPCBjdXJyZW50CisgICAgICAgIGlmIGluZGVudCBub3QgaW4gc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgZmFpbCgiSWxsZWdhbCBvdXRkZW50LiIpCisgICAgICAgIG91dGRlbnRfY291bnQgPSAwCisgICAgICAgIHdoaWxlIGluZGVudCAhPSBjdXJyZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLnBvcCgpCisgICAgICAgICAgICBjdXJyZW50ID0gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICAgICAgb3V0ZGVudF9jb3VudCAtPSAxCisgICAgICAgIHNlbGYubWFyZ2luID0gbWFyZ2luCisgICAgICAgIHJldHVybiBvdXRkZW50X2NvdW50CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVwdGgoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGhvdyBtYW55IG1hcmdpbnMgYXJlIGN1cnJlbnRseSBkZWZpbmVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmluZGVudHMpCisKKyAgICBkZWYgaW5kZW50KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5kZW50cyBhIGxpbmUgYnkgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcmdpbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLm1hcmdpbiArIGxpbmUKKworICAgIGRlZiBkZWRlbnQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBEZWRlbnRzIGEgbGluZSBieSB0aGUgY3VycmVudGx5IGRlZmluZWQgbWFyZ2luLgorICAgICAgICAoVGhlIGludmVyc2Ugb2YgJ2luZGVudCcuKQorICAgICAgICAiIiIKKyAgICAgICAgbWFyZ2luID0gc2VsZi5tYXJnaW4KKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKG1hcmdpbik6CisgICAgICAgICAgICBmYWlsKCdDYW5ub3QgZGVkZW50LCBsaW5lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZXZpb3VzIG1hcmdpbjonKQorICAgICAgICByZXR1cm4gbGluZVtpbmRlbnQ6XQorCisKK2NsYXNzIERTTFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgc2VsZi5jbGluaWMgPSBjbGluaWMKKworICAgICAgICBzZWxmLmRpcmVjdGl2ZXMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoc2VsZik6CisgICAgICAgICAgICAjIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggZGlyZWN0aXZlXyBhcmUgYWRkZWQgdG8gZGlyZWN0aXZlcworICAgICAgICAgICAgXywgcywga2V5ID0gbmFtZS5wYXJ0aXRpb24oImRpcmVjdGl2ZV8iKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGl2ZXNba2V5XSA9IGdldGF0dHIoc2VsZiwgbmFtZSkKKworICAgICAgICAgICAgIyBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGF0XyBhcmUgdG9vLCB3aXRoIGFuIEAgaW4gZnJvbnQKKyAgICAgICAgICAgIF8sIHMsIGtleSA9IG5hbWUucGFydGl0aW9uKCJhdF8iKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGl2ZXNbJ0AnICsga2V5XSA9IGdldGF0dHIoc2VsZiwgbmFtZSkKKworICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVfZHNsX3N0YXJ0CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2luZGVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXl3b3JkX29ubHkgPSBGYWxzZQorICAgICAgICBzZWxmLmdyb3VwID0gMAorICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfc3RhcnQKKyAgICAgICAgc2VsZi5zZWVuX3Bvc2l0aW9uYWxfd2l0aF9kZWZhdWx0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBJbmRlbnRTdGFjaygpCisgICAgICAgIHNlbGYua2luZCA9IENBTExBQkxFCisgICAgICAgIHNlbGYuY29leGlzdCA9IEZhbHNlCisgICAgICAgIHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiA9ICcnCisgICAgICAgIHNlbGYucHJlc2VydmVfb3V0cHV0ID0gRmFsc2UKKworICAgIGRlZiBkaXJlY3RpdmVfdmVyc2lvbihzZWxmLCByZXF1aXJlZCk6CisgICAgICAgIGdsb2JhbCB2ZXJzaW9uCisgICAgICAgIGlmIHZlcnNpb25fY29tcGFyaXRvcih2ZXJzaW9uLCByZXF1aXJlZCkgPCAwOgorICAgICAgICAgICAgZmFpbCgiSW5zdWZmaWNpZW50IENsaW5pYyB2ZXJzaW9uIVxuICBWZXJzaW9uOiAiICsgdmVyc2lvbiArICJcbiAgUmVxdWlyZWQ6ICIgKyByZXF1aXJlZCkKKworICAgIGRlZiBkaXJlY3RpdmVfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICBmaWVsZHMgPSBuYW1lLnNwbGl0KCcuJykKKyAgICAgICAgbmV3ID0gZmllbGRzLnBvcCgpCisgICAgICAgIG1vZHVsZSwgY2xzID0gc2VsZi5jbGluaWMuX21vZHVsZV9hbmRfY2xhc3MoZmllbGRzKQorICAgICAgICBpZiBjbHM6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBuZXN0IGEgbW9kdWxlIGluc2lkZSBhIGNsYXNzISIpCisKKyAgICAgICAgaWYgbmFtZSBpbiBtb2R1bGUuY2xhc3NlczoKKyAgICAgICAgICAgIGZhaWwoIkFscmVhZHkgZGVmaW5lZCBtb2R1bGUgIiArIHJlcHIobmFtZSkgKyAiISIpCisKKyAgICAgICAgbSA9IE1vZHVsZShuYW1lLCBtb2R1bGUpCisgICAgICAgIG1vZHVsZS5tb2R1bGVzW25hbWVdID0gbQorICAgICAgICBzZWxmLmJsb2NrLnNpZ25hdHVyZXMuYXBwZW5kKG0pCisKKyAgICBkZWYgZGlyZWN0aXZlX2NsYXNzKHNlbGYsIG5hbWUsIHR5cGVkZWYsIHR5cGVfb2JqZWN0KToKKyAgICAgICAgZmllbGRzID0gbmFtZS5zcGxpdCgnLicpCisgICAgICAgIGluX2NsYXNzZXMgPSBGYWxzZQorICAgICAgICBwYXJlbnQgPSBzZWxmCisgICAgICAgIG5hbWUgPSBmaWVsZHMucG9wKCkKKyAgICAgICAgc29fZmFyID0gW10KKyAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisKKyAgICAgICAgcGFyZW50ID0gY2xzIG9yIG1vZHVsZQorICAgICAgICBpZiBuYW1lIGluIHBhcmVudC5jbGFzc2VzOgorICAgICAgICAgICAgZmFpbCgiQWxyZWFkeSBkZWZpbmVkIGNsYXNzICIgKyByZXByKG5hbWUpICsgIiEiKQorCisgICAgICAgIGMgPSBDbGFzcyhuYW1lLCBtb2R1bGUsIGNscywgdHlwZWRlZiwgdHlwZV9vYmplY3QpCisgICAgICAgIHBhcmVudC5jbGFzc2VzW25hbWVdID0gYworICAgICAgICBzZWxmLmJsb2NrLnNpZ25hdHVyZXMuYXBwZW5kKGMpCisKKyAgICBkZWYgZGlyZWN0aXZlX3NldChzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIGlmIG5hbWUgbm90IGluICgibGluZV9wcmVmaXgiLCAibGluZV9zdWZmaXgiKToKKyAgICAgICAgICAgIGZhaWwoInVua25vd24gdmFyaWFibGUiLCByZXByKG5hbWUpKQorCisgICAgICAgIHZhbHVlID0gdmFsdWUuZm9ybWF0X21hcCh7CisgICAgICAgICAgICAnYmxvY2sgY29tbWVudCBzdGFydCc6ICcvKicsCisgICAgICAgICAgICAnYmxvY2sgY29tbWVudCBlbmQnOiAnKi8nLAorICAgICAgICAgICAgfSkKKworICAgICAgICBzZWxmLmNsaW5pYy5fX2RpY3RfX1tuYW1lXSA9IHZhbHVlCisKKyAgICBkZWYgZGlyZWN0aXZlX2Rlc3RpbmF0aW9uKHNlbGYsIG5hbWUsIGNvbW1hbmQsICphcmdzKToKKyAgICAgICAgaWYgY29tbWFuZCA9PSAnbmV3JzoKKyAgICAgICAgICAgIHNlbGYuY2xpbmljLmFkZF9kZXN0aW5hdGlvbihuYW1lLCAqYXJncykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGNvbW1hbmQgPT0gJ2NsZWFyJzoKKyAgICAgICAgICAgIHNlbGYuY2xpbmljLmdldF9kZXN0aW5hdGlvbihuYW1lKS5jbGVhcigpCisgICAgICAgIGZhaWwoInVua25vd24gZGVzdGluYXRpb24gY29tbWFuZCIsIHJlcHIoY29tbWFuZCkpCisKKworICAgIGRlZiBkaXJlY3RpdmVfb3V0cHV0KHNlbGYsIGZpZWxkLCBkZXN0aW5hdGlvbj0nJyk6CisgICAgICAgIGZkID0gc2VsZi5jbGluaWMuZmllbGRfZGVzdGluYXRpb25zCisKKyAgICAgICAgaWYgZmllbGQgPT0gInByZXNldCI6CisgICAgICAgICAgICBwcmVzZXQgPSBzZWxmLmNsaW5pYy5wcmVzZXRzLmdldChkZXN0aW5hdGlvbikKKyAgICAgICAgICAgIGlmIG5vdCBwcmVzZXQ6CisgICAgICAgICAgICAgICAgZmFpbCgiVW5rbm93biBwcmVzZXQgIiArIHJlcHIoZGVzdGluYXRpb24pICsgIiEiKQorICAgICAgICAgICAgZmQudXBkYXRlKHByZXNldCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZpZWxkID09ICJwdXNoIjoKKyAgICAgICAgICAgIHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9uc19zdGFjay5hcHBlbmQoZmQuY29weSgpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgZmllbGQgPT0gInBvcCI6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jbGluaWMuZmllbGRfZGVzdGluYXRpb25zX3N0YWNrOgorICAgICAgICAgICAgICAgIGZhaWwoIkNhbid0ICdvdXRwdXQgcG9wJywgc3RhY2sgaXMgZW1wdHkhIikKKyAgICAgICAgICAgIHByZXZpb3VzX2ZkID0gc2VsZi5jbGluaWMuZmllbGRfZGVzdGluYXRpb25zX3N0YWNrLnBvcCgpCisgICAgICAgICAgICBmZC51cGRhdGUocHJldmlvdXNfZmQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHNlY3JldCBjb21tYW5kIGZvciBkZWJ1Z2dpbmchCisgICAgICAgIGlmIGZpZWxkID09ICJwcmludCI6CisgICAgICAgICAgICBzZWxmLmJsb2NrLm91dHB1dC5hcHBlbmQocHByaW50LnBmb3JtYXQoZmQpKQorICAgICAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKCdcbicpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkID0gc2VsZi5jbGluaWMuZ2V0X2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorCisgICAgICAgIGlmIGZpZWxkID09ICJldmVyeXRoaW5nIjoKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGxpc3QoZmQpOgorICAgICAgICAgICAgICAgIGZkW25hbWVdID0gZAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgZmllbGQgbm90IGluIGZkOgorICAgICAgICAgICAgZmFpbCgiSW52YWxpZCBmaWVsZCAiICsgcmVwcihmaWVsZCkgKyAiLCBtdXN0IGJlIG9uZSBvZjpcbiAgcHJlc2V0IHB1c2ggcG9wIHByaW50IGV2ZXJ5dGhpbmcgIiArICIgIi5qb2luKGZkKSkKKyAgICAgICAgZmRbZmllbGRdID0gZAorCisgICAgZGVmIGRpcmVjdGl2ZV9kdW1wKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLmJsb2NrLm91dHB1dC5hcHBlbmQoc2VsZi5jbGluaWMuZ2V0X2Rlc3RpbmF0aW9uKG5hbWUpLmR1bXAoKSkKKworICAgIGRlZiBkaXJlY3RpdmVfcHJpbnQoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmJsb2NrLm91dHB1dC5hcHBlbmQoJyAnLmpvaW4oYXJncykpCisgICAgICAgIHNlbGYuYmxvY2sub3V0cHV0LmFwcGVuZCgnXG4nKQorCisgICAgZGVmIGRpcmVjdGl2ZV9wcmVzZXJ2ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZV9vdXRwdXQ6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBoYXZlIHByZXNlcnZlIHR3aWNlIGluIG9uZSBibG9jayEiKQorICAgICAgICBzZWxmLnByZXNlcnZlX291dHB1dCA9IFRydWUKKworICAgIGRlZiBhdF9jbGFzc21ldGhvZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5raW5kIGlzIG5vdCBDQUxMQUJMRToKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IHNldCBAY2xhc3NtZXRob2QsIGZ1bmN0aW9uIGlzIG5vdCBhIG5vcm1hbCBjYWxsYWJsZSIpCisgICAgICAgIHNlbGYua2luZCA9IENMQVNTX01FVEhPRAorCisgICAgZGVmIGF0X3N0YXRpY21ldGhvZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5raW5kIGlzIG5vdCBDQUxMQUJMRToKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IHNldCBAc3RhdGljbWV0aG9kLCBmdW5jdGlvbiBpcyBub3QgYSBub3JtYWwgY2FsbGFibGUiKQorICAgICAgICBzZWxmLmtpbmQgPSBTVEFUSUNfTUVUSE9ECisKKyAgICBkZWYgYXRfY29leGlzdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb2V4aXN0OgorICAgICAgICAgICAgZmFpbCgiQ2FsbGVkIEBjb2V4aXN0IHR3aWNlISIpCisgICAgICAgIHNlbGYuY29leGlzdCA9IFRydWUKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBzZWxmLmJsb2NrID0gYmxvY2sKKyAgICAgICAgc2VsZi5zYXZlZF9vdXRwdXQgPSBzZWxmLmJsb2NrLm91dHB1dAorICAgICAgICBibG9jay5vdXRwdXQgPSBbXQorICAgICAgICBibG9ja19zdGFydCA9IHNlbGYuY2xpbmljLmJsb2NrX3BhcnNlci5saW5lX251bWJlcgorICAgICAgICBsaW5lcyA9IGJsb2NrLmlucHV0LnNwbGl0KCdcbicpCisgICAgICAgIGZvciBsaW5lX251bWJlciwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMsIHNlbGYuY2xpbmljLmJsb2NrX3BhcnNlci5ibG9ja19zdGFydF9saW5lX251bWJlcik6CisgICAgICAgICAgICBpZiAnXHQnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgZmFpbCgnVGFiIGNoYXJhY3RlcnMgYXJlIGlsbGVnYWwgaW4gdGhlIENsaW5pYyBEU0wuXG5cdCcgKyByZXByKGxpbmUpLCBsaW5lX251bWJlcj1ibG9ja19zdGFydCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGUobGluZSkKKworICAgICAgICBzZWxmLm5leHQoc2VsZi5zdGF0ZV90ZXJtaW5hbCkKKyAgICAgICAgc2VsZi5zdGF0ZShOb25lKQorCisgICAgICAgIGJsb2NrLm91dHB1dC5leHRlbmQoc2VsZi5jbGluaWMubGFuZ3VhZ2UucmVuZGVyKGNsaW5pYywgYmxvY2suc2lnbmF0dXJlcykpCisKKyAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZV9vdXRwdXQ6CisgICAgICAgICAgICBpZiBibG9jay5vdXRwdXQ6CisgICAgICAgICAgICAgICAgZmFpbCgiJ3ByZXNlcnZlJyBvbmx5IHdvcmtzIGZvciBibG9ja3MgdGhhdCBkb24ndCBwcm9kdWNlIGFueSBvdXRwdXQhIikKKyAgICAgICAgICAgIGJsb2NrLm91dHB1dCA9IHNlbGYuc2F2ZWRfb3V0cHV0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAjIGlnbm9yZSBjb21tZW50LW9ubHkgbGluZXMKKyAgICAgICAgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgSWdub3JlIGVtcHR5IGxpbmVzIHRvbworICAgICAgICAjIChidXQgbm90IGluIGRvY3N0cmluZyBzZWN0aW9ucyEpCisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYWxjdWxhdGVfaW5kZW50KGxpbmUpOgorICAgICAgICByZXR1cm4gbGVuKGxpbmUpIC0gbGVuKGxpbmUuc3RyaXAoKSkKKworICAgIGRlZiBuZXh0KHNlbGYsIHN0YXRlLCBsaW5lPU5vbmUpOgorICAgICAgICAjIHJlYWxfcHJpbnQoc2VsZi5zdGF0ZS5fX25hbWVfXywgIi0+Iiwgc3RhdGUuX19uYW1lX18sICIsIGxpbmU9IiwgbGluZSkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlCisgICAgICAgIGlmIGxpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0YXRlKGxpbmUpCisKKyAgICBkZWYgc3RhdGVfZHNsX3N0YXJ0KHNlbGYsIGxpbmUpOgorICAgICAgICAjIHNlbGYuYmxvY2sgPSBzZWxmLkNsaW5pY091dHB1dEJsb2NrKHNlbGYpCisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGlzIGl0IGEgZGlyZWN0aXZlPworICAgICAgICBmaWVsZHMgPSBzaGxleC5zcGxpdChsaW5lKQorICAgICAgICBkaXJlY3RpdmVfbmFtZSA9IGZpZWxkc1swXQorICAgICAgICBkaXJlY3RpdmUgPSBzZWxmLmRpcmVjdGl2ZXMuZ2V0KGRpcmVjdGl2ZV9uYW1lLCBOb25lKQorICAgICAgICBpZiBkaXJlY3RpdmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlKCpmaWVsZHNbMTpdKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGZhaWwoc3RyKGUpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfbW9kdWxlbmFtZV9uYW1lLCBsaW5lKQorCisgICAgZGVmIHN0YXRlX21vZHVsZW5hbWVfbmFtZShzZWxmLCBsaW5lKToKKyAgICAgICAgIyBsb29raW5nIGZvciBkZWNsYXJhdGlvbiwgd2hpY2ggZXN0YWJsaXNoZXMgdGhlIGxlZnRtb3N0IGNvbHVtbgorICAgICAgICAjIGxpbmUgc2hvdWxkIGJlCisgICAgICAgICMgICAgIG1vZHVsZW5hbWUuZm5uYW1lIFthcyBjX2Jhc2VuYW1lXSBbLT4gcmV0dXJuIGFubm90YXRpb25dCisgICAgICAgICMgc3F1YXJlIGJyYWNrZXRzIGRlbm90ZSBvcHRpb25hbCBzeW50YXguCisgICAgICAgICMKKyAgICAgICAgIyBhbHRlcm5hdGl2ZWx5OgorICAgICAgICAjICAgICBtb2R1bGVuYW1lLmZubmFtZSBbYXMgY19iYXNlbmFtZV0gPSBtb2R1bGVuYW1lLmV4aXN0aW5nX2ZuX25hbWUKKyAgICAgICAgIyBjbG9uZXMgdGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybiBjb252ZXJ0ZXIgZnJvbSB0aGF0CisgICAgICAgICMgZnVuY3Rpb24uICB5b3UgY2FuJ3QgbW9kaWZ5IHRoZW0uICB5b3UgbXVzdCBlbnRlciBhCisgICAgICAgICMgbmV3IGRvY3N0cmluZy4KKyAgICAgICAgIworICAgICAgICAjIChidXQgd2UgbWlnaHQgZmluZCBhIGRpcmVjdGl2ZSBmaXJzdCEpCisgICAgICAgICMKKyAgICAgICAgIyB0aGlzIGxpbmUgaXMgcGVybWl0dGVkIHRvIHN0YXJ0IHdpdGggd2hpdGVzcGFjZS4KKyAgICAgICAgIyB3ZSdsbCBjYWxsIHRoaXMgbnVtYmVyIG9mIHNwYWNlcyBGIChmb3IgImZ1bmN0aW9uIikuCisKKyAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuaW5kZW50LmluZmVyKGxpbmUpCisKKyAgICAgICAgIyBhcmUgd2UgY2xvbmluZz8KKyAgICAgICAgYmVmb3JlLCBlcXVhbHMsIGV4aXN0aW5nID0gbGluZS5ycGFydGl0aW9uKCc9JykKKyAgICAgICAgaWYgZXF1YWxzOgorICAgICAgICAgICAgZnVsbF9uYW1lLCBfLCBjX2Jhc2VuYW1lID0gYmVmb3JlLnBhcnRpdGlvbignIGFzICcpCisgICAgICAgICAgICBmdWxsX25hbWUgPSBmdWxsX25hbWUuc3RyaXAoKQorICAgICAgICAgICAgY19iYXNlbmFtZSA9IGNfYmFzZW5hbWUuc3RyaXAoKQorICAgICAgICAgICAgZXhpc3RpbmcgPSBleGlzdGluZy5zdHJpcCgpCisgICAgICAgICAgICBpZiAoaXNfbGVnYWxfcHlfaWRlbnRpZmllcihmdWxsX25hbWUpIGFuZAorICAgICAgICAgICAgICAgIChub3QgY19iYXNlbmFtZSBvciBpc19sZWdhbF9jX2lkZW50aWZpZXIoY19iYXNlbmFtZSkpIGFuZAorICAgICAgICAgICAgICAgIGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIoZXhpc3RpbmcpKToKKyAgICAgICAgICAgICAgICAjIHdlJ3JlIGNsb25pbmchCisgICAgICAgICAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBleGlzdGluZy5zcGxpdCgnLicpXQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uX25hbWUgPSBmaWVsZHMucG9wKCkKKyAgICAgICAgICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICAgICAgICAgIGZvciBleGlzdGluZ19mdW5jdGlvbiBpbiAoY2xzIG9yIG1vZHVsZSkuZnVuY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBpZiBleGlzdGluZ19mdW5jdGlvbi5uYW1lID09IGZ1bmN0aW9uX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nX2Z1bmN0aW9uID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIG5vdCBleGlzdGluZ19mdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImNsYXNzIiwgY2xzLCAibW9kdWxlIiwgbW9kdWxlLCAiZXhpc3RpbmciLCBleGlzdGluZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImNscy4gZnVuY3Rpb25zIiwgY2xzLmZ1bmN0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiQ291bGRuJ3QgZmluZCBleGlzdGluZyBmdW5jdGlvbiAiICsgcmVwcihleGlzdGluZykgKyAiISIpCisKKyAgICAgICAgICAgICAgICBmaWVsZHMgPSBbeC5zdHJpcCgpIGZvciB4IGluIGZ1bGxfbmFtZS5zcGxpdCgnLicpXQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uX25hbWUgPSBmaWVsZHMucG9wKCkKKyAgICAgICAgICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICAgICAgICAgIGlmIG5vdCAoZXhpc3RpbmdfZnVuY3Rpb24ua2luZCA9PSBzZWxmLmtpbmQgYW5kIGV4aXN0aW5nX2Z1bmN0aW9uLmNvZXhpc3QgPT0gc2VsZi5jb2V4aXN0KToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiJ2tpbmQnIG9mIGZ1bmN0aW9uIGFuZCBjbG9uZWQgZnVuY3Rpb24gZG9uJ3QgbWF0Y2ghICAoQGNsYXNzbWV0aG9kL0BzdGF0aWNtZXRob2QvQGNvZXhpc3QpIikKKyAgICAgICAgICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZXhpc3RpbmdfZnVuY3Rpb24uY29weShuYW1lPWZ1bmN0aW9uX25hbWUsIGZ1bGxfbmFtZT1mdWxsX25hbWUsIG1vZHVsZT1tb2R1bGUsIGNscz1jbHMsIGNfYmFzZW5hbWU9Y19iYXNlbmFtZSwgZG9jc3RyaW5nPScnKQorCisgICAgICAgICAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIChjbHMgb3IgbW9kdWxlKS5mdW5jdGlvbnMuYXBwZW5kKHNlbGYuZnVuY3Rpb24pCisgICAgICAgICAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxpbmUsIF8sIHJldHVybnMgPSBsaW5lLnBhcnRpdGlvbignLT4nKQorCisgICAgICAgIGZ1bGxfbmFtZSwgXywgY19iYXNlbmFtZSA9IGxpbmUucGFydGl0aW9uKCcgYXMgJykKKyAgICAgICAgZnVsbF9uYW1lID0gZnVsbF9uYW1lLnN0cmlwKCkKKyAgICAgICAgY19iYXNlbmFtZSA9IGNfYmFzZW5hbWUuc3RyaXAoKSBvciBOb25lCisKKyAgICAgICAgaWYgbm90IGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIoZnVsbF9uYW1lKToKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgZnVuY3Rpb24gbmFtZToge30iLmZvcm1hdChmdWxsX25hbWUpKQorICAgICAgICBpZiBjX2Jhc2VuYW1lIGFuZCBub3QgaXNfbGVnYWxfY19pZGVudGlmaWVyKGNfYmFzZW5hbWUpOgorICAgICAgICAgICAgZmFpbCgiSWxsZWdhbCBDIGJhc2VuYW1lOiB7fSIuZm9ybWF0KGNfYmFzZW5hbWUpKQorCisgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSBOb25lCisgICAgICAgIGlmIHJldHVybnM6CisgICAgICAgICAgICBhc3RfaW5wdXQgPSAiZGVmIHgoKSAtPiB7fTogcGFzcyIuZm9ybWF0KHJldHVybnMpCisgICAgICAgICAgICBtb2R1bGUgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gYXN0LnBhcnNlKGFzdF9pbnB1dCkKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgICAgIGZhaWwoIkJhZGx5LWZvcm1lZCBhbm5vdGF0aW9uIGZvciAiICsgZnVsbF9uYW1lICsgIjogIiArIHJldHVybnMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSwgbGVnYWN5LCBrd2FyZ3MgPSBzZWxmLnBhcnNlX2NvbnZlcnRlcihtb2R1bGUuYm9keVswXS5yZXR1cm5zKQorICAgICAgICAgICAgICAgIGlmIGxlZ2FjeToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiTGVnYWN5IGNvbnZlcnRlciB7IXJ9IG5vdCBhbGxvd2VkIGFzIGEgcmV0dXJuIGNvbnZlcnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHJldHVybl9jb252ZXJ0ZXJzOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJObyBhdmFpbGFibGUgcmV0dXJuIGNvbnZlcnRlciBjYWxsZWQgIiArIHJlcHIobmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciA9IHJldHVybl9jb252ZXJ0ZXJzW25hbWVdKCoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgZmFpbCgiQmFkbHktZm9ybWVkIGFubm90YXRpb24gZm9yICIgKyBmdWxsX25hbWUgKyAiOiAiICsgcmV0dXJucykKKworICAgICAgICBmaWVsZHMgPSBbeC5zdHJpcCgpIGZvciB4IGluIGZ1bGxfbmFtZS5zcGxpdCgnLicpXQorICAgICAgICBmdW5jdGlvbl9uYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgIG1vZHVsZSwgY2xzID0gc2VsZi5jbGluaWMuX21vZHVsZV9hbmRfY2xhc3MoZmllbGRzKQorCisgICAgICAgIGZpZWxkcyA9IGZ1bGxfbmFtZS5zcGxpdCgnLicpCisgICAgICAgIGlmIGZpZWxkc1stMV0gPT0gJ19fbmV3X18nOgorICAgICAgICAgICAgaWYgKHNlbGYua2luZCAhPSBDTEFTU19NRVRIT0QpIG9yIChub3QgY2xzKToKKyAgICAgICAgICAgICAgICBmYWlsKCJfX25ld19fIG11c3QgYmUgYSBjbGFzcyBtZXRob2QhIikKKyAgICAgICAgICAgIHNlbGYua2luZCA9IE1FVEhPRF9ORVcKKyAgICAgICAgZWxpZiBmaWVsZHNbLTFdID09ICdfX2luaXRfXyc6CisgICAgICAgICAgICBpZiAoc2VsZi5raW5kICE9IENBTExBQkxFKSBvciAobm90IGNscyk6CisgICAgICAgICAgICAgICAgZmFpbCgiX19pbml0X18gbXVzdCBiZSBhIG5vcm1hbCBtZXRob2QsIG5vdCBhIGNsYXNzIG9yIHN0YXRpYyBtZXRob2QhIikKKyAgICAgICAgICAgIHNlbGYua2luZCA9IE1FVEhPRF9JTklUCisgICAgICAgICAgICBpZiBub3QgcmV0dXJuX2NvbnZlcnRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm5fY29udmVydGVyID0gaW5pdF9yZXR1cm5fY29udmVydGVyKCkKKyAgICAgICAgZWxpZiBmaWVsZHNbLTFdIGluIHVuc3VwcG9ydGVkX3NwZWNpYWxfbWV0aG9kczoKKyAgICAgICAgICAgIGZhaWwoZmllbGRzWy0xXSArICIgaXMgYSBzcGVjaWFsIG1ldGhvZCBhbmQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBBcmd1bWVudCBDbGluaWMhICAoWWV0LikiKQorCisgICAgICAgIGlmIG5vdCByZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciA9IENSZXR1cm5Db252ZXJ0ZXIoKQorCisgICAgICAgIGlmIG5vdCBtb2R1bGU6CisgICAgICAgICAgICBmYWlsKCJVbmRlZmluZWQgbW9kdWxlIHVzZWQgaW4gZGVjbGFyYXRpb24gb2YgIiArIHJlcHIoZnVsbF9uYW1lLnN0cmlwKCkpICsgIi4iKQorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gRnVuY3Rpb24obmFtZT1mdW5jdGlvbl9uYW1lLCBmdWxsX25hbWU9ZnVsbF9uYW1lLCBtb2R1bGU9bW9kdWxlLCBjbHM9Y2xzLCBjX2Jhc2VuYW1lPWNfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fY29udmVydGVyPXJldHVybl9jb252ZXJ0ZXIsIGtpbmQ9c2VsZi5raW5kLCBjb2V4aXN0PXNlbGYuY29leGlzdCkKKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorCisgICAgICAgICMgaW5zZXJ0IGEgc2VsZiBjb252ZXJ0ZXIgYXV0b21hdGljYWxseQorICAgICAgICB0eXBlLCBuYW1lID0gY29ycmVjdF9uYW1lX2Zvcl9zZWxmKHNlbGYuZnVuY3Rpb24pCisgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgIGlmIGNscyBhbmQgdHlwZSA9PSAiUHlPYmplY3QgKiI6CisgICAgICAgICAgICBrd2FyZ3NbJ3R5cGUnXSA9IGNscy50eXBlZGVmCisgICAgICAgIHNjID0gc2VsZi5mdW5jdGlvbi5zZWxmX2NvbnZlcnRlciA9IHNlbGZfY29udmVydGVyKG5hbWUsIG5hbWUsIHNlbGYuZnVuY3Rpb24sICoqa3dhcmdzKQorICAgICAgICBwX3NlbGYgPSBQYXJhbWV0ZXIoc2MubmFtZSwgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZLCBmdW5jdGlvbj1zZWxmLmZ1bmN0aW9uLCBjb252ZXJ0ZXI9c2MpCisgICAgICAgIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVyc1tzYy5uYW1lXSA9IHBfc2VsZgorCisgICAgICAgIChjbHMgb3IgbW9kdWxlKS5mdW5jdGlvbnMuYXBwZW5kKHNlbGYuZnVuY3Rpb24pCisgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlcnNfc3RhcnQpCisKKyAgICAjIE5vdyBlbnRlcmluZyB0aGUgcGFyYW1ldGVycyBzZWN0aW9uLiAgVGhlIHJ1bGVzLCBmb3JtYWxseSBzdGF0ZWQ6CisgICAgIworICAgICMgICAqIEFsbCBsaW5lcyBtdXN0IGJlIGluZGVudGVkIHdpdGggc3BhY2VzIG9ubHkuCisgICAgIyAgICogVGhlIGZpcnN0IGxpbmUgbXVzdCBiZSBhIHBhcmFtZXRlciBkZWNsYXJhdGlvbi4KKyAgICAjICAgKiBUaGUgZmlyc3QgbGluZSBtdXN0IGJlIGluZGVudGVkLgorICAgICMgICAgICAgKiBUaGlzIGZpcnN0IGxpbmUgZXN0YWJsaXNoZXMgdGhlIGluZGVudCBmb3IgcGFyYW1ldGVycy4KKyAgICAjICAgICAgICogV2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgUCAoZm9yICJwYXJhbWV0ZXIiKS4KKyAgICAjICAgKiBUaGVuY2Vmb3J0aDoKKyAgICAjICAgICAgICogTGluZXMgaW5kZW50ZWQgd2l0aCBQIHNwYWNlcyBzcGVjaWZ5IGEgcGFyYW1ldGVyLgorICAgICMgICAgICAgKiBMaW5lcyBpbmRlbnRlZCB3aXRoID4gUCBzcGFjZXMgYXJlIGRvY3N0cmluZ3MgZm9yIHRoZSBwcmV2aW91cworICAgICMgICAgICAgICBwYXJhbWV0ZXIuCisgICAgIyAgICAgICAgICAgKiBXZSdsbCBjYWxsIHRoaXMgbnVtYmVyIG9mIHNwYWNlcyBEIChmb3IgImRvY3N0cmluZyIpLgorICAgICMgICAgICAgICAgICogQWxsIHN1YnNlcXVlbnQgbGluZXMgaW5kZW50ZWQgd2l0aCA+PSBEIHNwYWNlcyBhcmUgc3RvcmVkIGFzCisgICAgIyAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBwZXItcGFyYW1ldGVyIGRvY3N0cmluZy4KKyAgICAjICAgICAgICAgICAqIEFsbCBsaW5lcyB3aWxsIGhhdmUgdGhlIGZpcnN0IEQgc3BhY2VzIG9mIHRoZSBpbmRlbnQgc3RyaXBwZWQKKyAgICAjICAgICAgICAgICAgIGJlZm9yZSB0aGV5IGFyZSBzdG9yZWQuCisgICAgIyAgICAgICAgICAgKiBJdCdzIGlsbGVnYWwgdG8gaGF2ZSBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhIG51bWJlciBvZiBzcGFjZXMgWAorICAgICMgICAgICAgICAgICAgc3VjaCB0aGF0IFAgPCBYIDwgRC4KKyAgICAjICAgICAgICogQSBsaW5lIHdpdGggPCBQIHNwYWNlcyBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZnVuY3Rpb24KKyAgICAjICAgICAgICAgZG9jc3RyaW5nLCB3aGljaCBlbmRzIHByb2Nlc3NpbmcgZm9yIHBhcmFtZXRlcnMgYW5kIHBlci1wYXJhbWV0ZXIKKyAgICAjICAgICAgICAgZG9jc3RyaW5ncy4KKyAgICAjICAgICAgICAgICAqIFRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmdW5jdGlvbiBkb2NzdHJpbmcgbXVzdCBiZSBhdCB0aGUgc2FtZQorICAgICMgICAgICAgICAgICAgaW5kZW50IGFzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAjICAgICAgICogSXQncyBpbGxlZ2FsIHRvIGhhdmUgYW55IGxpbmUgaW4gdGhlIHBhcmFtZXRlcnMgc2VjdGlvbiBzdGFydGluZworICAgICMgICAgICAgICB3aXRoIFggc3BhY2VzIHN1Y2ggdGhhdCBGIDwgWCA8IFAuICAoQXMgYmVmb3JlLCBGIGlzIHRoZSBpbmRlbnQKKyAgICAjICAgICAgICAgb2YgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLikKKyAgICAjCisgICAgIyBBbHNvLCBjdXJyZW50bHkgQXJndW1lbnQgQ2xpbmljIHBsYWNlcyB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBvbiBncm91cHM6CisgICAgIyAgICogRWFjaCBncm91cCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4KKyAgICAjICAgKiBFYWNoIGdyb3VwIG1heSBjb250YWluIGF0IG1vc3Qgb25lIGdyb3VwLCB3aGljaCBtdXN0IGJlIHRoZSBmdXJ0aGVzdAorICAgICMgICAgIHRoaW5nIGluIHRoZSBncm91cCBmcm9tIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLiAgKFRoZSBuZXN0ZWQgZ3JvdXAKKyAgICAjICAgICBtdXN0IGJlIHRoZSBmaXJzdCBpbiB0aGUgZ3JvdXAgd2hlbiBpdCdzIGJlZm9yZSB0aGUgcmVxdWlyZWQKKyAgICAjICAgICBwYXJhbWV0ZXJzLCBhbmQgdGhlIGxhc3QgdGhpbmcgaW4gdGhlIGdyb3VwIHdoZW4gYWZ0ZXIgdGhlIHJlcXVpcmVkCisgICAgIyAgICAgcGFyYW1ldGVycy4pCisgICAgIyAgICogVGhlcmUgbWF5IGJlIGF0IG1vc3Qgb25lICh0b3AtbGV2ZWwpIGdyb3VwIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IG9mCisgICAgIyAgICAgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyAgICogWW91IG11c3Qgc3BlY2lmeSBhIHNsYXNoLCBhbmQgaXQgbXVzdCBiZSBhZnRlciBhbGwgcGFyYW1ldGVycy4KKyAgICAjICAgICAoSW4gb3RoZXIgd29yZHM6IGVpdGhlciBhbGwgcGFyYW1ldGVycyBhcmUgcG9zaXRpb25hbC1vbmx5LAorICAgICMgICAgICBvciBub25lIGFyZS4pCisgICAgIworICAgICMgIFNhaWQgYW5vdGhlciB3YXk6CisgICAgIyAgICogRWFjaCBncm91cCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4KKyAgICAjICAgKiBBbGwgbGVmdCBzcXVhcmUgYnJhY2tldHMgYmVmb3JlIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIG11c3QgYmUKKyAgICAjICAgICBjb25zZWN1dGl2ZS4gIChZb3UgY2FuJ3QgaGF2ZSBhIGxlZnQgc3F1YXJlIGJyYWNrZXQgZm9sbG93ZWQKKyAgICAjICAgICBieSBhIHBhcmFtZXRlciwgdGhlbiBhbm90aGVyIGxlZnQgc3F1YXJlIGJyYWNrZXQuICBZb3UgY2FuJ3QKKyAgICAjICAgICBoYXZlIGEgbGVmdCBzcXVhcmUgYnJhY2tldCwgYSBwYXJhbWV0ZXIsIGEgcmlnaHQgc3F1YXJlIGJyYWNrZXQsCisgICAgIyAgICAgYW5kIHRoZW4gYSBsZWZ0IHNxdWFyZSBicmFja2V0LikKKyAgICAjICAgKiBBbGwgcmlnaHQgc3F1YXJlIGJyYWNrZXRzIGFmdGVyIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIG11c3QgYmUKKyAgICAjICAgICBjb25zZWN1dGl2ZS4KKyAgICAjCisgICAgIyBUaGVzZSBydWxlcyBhcmUgZW5mb3JjZWQgd2l0aCBhIHNpbmdsZSBzdGF0ZSB2YXJpYWJsZToKKyAgICAjICJwYXJhbWV0ZXJfc3RhdGUiLiAgKFByZXZpb3VzbHkgdGhlIGNvZGUgd2FzIGEgbWlhc21hIG9mIGlmcyBhbmQKKyAgICAjIHNlcGFyYXRlIGJvb2xlYW4gc3RhdGUgdmFyaWFibGVzLikgIFRoZSBzdGF0ZXMgYXJlOgorICAgICMKKyAgICAjICBbIFsgYSwgYiwgXSBjLCBdIGQsIGUsIGY9MywgWyBnLCBoLCBbIGkgXSBdIC8gICA8LSBsaW5lCisgICAgIyAwMSAgIDIgICAgICAgICAgMyAgICAgICA0ICAgIDUgICAgICAgICAgIDYgICA3ICAgPC0gc3RhdGUgdHJhbnNpdGlvbnMKKyAgICAjCisgICAgIyAwOiBwc19zdGFydC4gIGJlZm9yZSB3ZSd2ZSBzZWVuIGFueXRoaW5nLiAgbGVnYWwgdHJhbnNpdGlvbnMgYXJlIHRvIDEgb3IgMy4KKyAgICAjIDE6IHBzX2xlZnRfc3F1YXJlX2JlZm9yZS4gIGxlZnQgc3F1YXJlIGJyYWNrZXRzIGJlZm9yZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgMjogcHNfZ3JvdXBfYmVmb3JlLiAgaW4gYSBncm91cCwgYmVmb3JlIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyAzOiBwc19yZXF1aXJlZC4gIHJlcXVpcmVkIHBhcmFtZXRlcnMsIHBvc2l0aW9uYWwtb3Ita2V5d29yZCBvciBwb3NpdGlvbmFsLW9ubHkKKyAgICAjICAgICAod2UgZG9uJ3Qga25vdyB5ZXQpLiAgKHJlbnVtYmVyIGxlZnQgZ3JvdXBzISkKKyAgICAjIDQ6IHBzX29wdGlvbmFsLiAgcG9zaXRpb25hbC1vci1rZXl3b3JkIG9yIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzIHRoYXQKKyAgICAjICAgIG5vdyBtdXN0IGhhdmUgZGVmYXVsdCB2YWx1ZXMuCisgICAgIyA1OiBwc19ncm91cF9hZnRlci4gIGluIGEgZ3JvdXAsIGFmdGVyIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyA2OiBwc19yaWdodF9zcXVhcmVfYWZ0ZXIuICByaWdodCBzcXVhcmUgYnJhY2tldHMgYWZ0ZXIgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDc6IHBzX3NlZW5fc2xhc2guICBzZWVuIHNsYXNoLgorICAgIHBzX3N0YXJ0LCBwc19sZWZ0X3NxdWFyZV9iZWZvcmUsIHBzX2dyb3VwX2JlZm9yZSwgcHNfcmVxdWlyZWQsIFwKKyAgICBwc19vcHRpb25hbCwgcHNfZ3JvdXBfYWZ0ZXIsIHBzX3JpZ2h0X3NxdWFyZV9hZnRlciwgcHNfc2Vlbl9zbGFzaCA9IHJhbmdlKDgpCisKKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyc19zdGFydChzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgaWYgdGhpcyBsaW5lIGlzIG5vdCBpbmRlbnRlZCwgd2UgaGF2ZSBubyBwYXJhbWV0ZXJzCisgICAgICAgIGlmIG5vdCBzZWxmLmluZGVudC5pbmZlcihsaW5lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9mdW5jdGlvbl9kb2NzdHJpbmcsIGxpbmUpCisKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfY29udGludWF0aW9uID0gJycKKyAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlciwgbGluZSkKKworCisgICAgZGVmIHRvX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJhbnNpdGlvbiB0byB0aGUgInJlcXVpcmVkIiBwYXJhbWV0ZXIgc3RhdGUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSAhPSBzZWxmLnBzX3JlcXVpcmVkOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3JlcXVpcmVkCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcC5ncm91cCA9IC1wLmdyb3VwCisKKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyKHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9jb250aW51YXRpb246CisgICAgICAgICAgICBsaW5lID0gc2VsZi5wYXJhbWV0ZXJfY29udGludWF0aW9uICsgJyAnICsgbGluZS5sc3RyaXAoKQorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfY29udGludWF0aW9uID0gJycKKworICAgICAgICBpZiBzZWxmLmlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuaW5kZW50LmRlcHRoID09IDIKKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKyAgICAgICAgaWYgaW5kZW50ID09IC0xOgorICAgICAgICAgICAgIyB3ZSBvdXRkZW50ZWQsIG11c3QgYmUgdG8gZGVmaW5pdGlvbiBjb2x1bW4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9mdW5jdGlvbl9kb2NzdHJpbmcsIGxpbmUpCisKKyAgICAgICAgaWYgaW5kZW50ID09IDE6CisgICAgICAgICAgICAjIHdlIGluZGVudGVkLCBtdXN0IGJlIHRvIG5ldyBwYXJhbWV0ZXIgZG9jc3RyaW5nIGNvbHVtbgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmdfc3RhcnQsIGxpbmUpCisKKyAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgaWYgbGluZS5lbmRzd2l0aCgnXFwnKToKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiA9IGxpbmVbOi0xXQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKKworICAgICAgICBpZiBsaW5lIGluICgnKicsICcvJywgJ1snLCAnXScpOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9zcGVjaWFsX3N5bWJvbChsaW5lKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfc3RhcnQsIHNlbGYucHNfcmVxdWlyZWQpOgorICAgICAgICAgICAgc2VsZi50b19yZXF1aXJlZCgpCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19sZWZ0X3NxdWFyZV9iZWZvcmU6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYmVmb3JlCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19ncm91cF9iZWZvcmU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ncm91cDoKKyAgICAgICAgICAgICAgICBzZWxmLnRvX3JlcXVpcmVkKCkKKyAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19ncm91cF9hZnRlciwgc2VsZi5wc19vcHRpb25hbCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgIiArIHN0cihzZWxmLnBhcmFtZXRlcl9zdGF0ZSkgKyAiLmEpIikKKworICAgICAgICAjIGhhbmRsZSAiYXMiIGZvciAgcGFyYW1ldGVycyB0b28KKyAgICAgICAgY19uYW1lID0gTm9uZQorICAgICAgICBuYW1lLCBoYXZlX2FzX3Rva2VuLCB0cmFpbGluZyA9IGxpbmUucGFydGl0aW9uKCcgYXMgJykKKyAgICAgICAgaWYgaGF2ZV9hc190b2tlbjoKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmICcgJyBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICBmaWVsZHMgPSB0cmFpbGluZy5zdHJpcCgpLnNwbGl0KCcgJykKKyAgICAgICAgICAgICAgICBpZiBub3QgZmllbGRzOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJJbnZhbGlkICdhcycgY2xhdXNlISIpCisgICAgICAgICAgICAgICAgY19uYW1lID0gZmllbGRzWzBdCisgICAgICAgICAgICAgICAgaWYgY19uYW1lLmVuZHN3aXRoKCc6Jyk6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gJzonCisgICAgICAgICAgICAgICAgICAgIGNfbmFtZSA9IGNfbmFtZVs6LTFdCisgICAgICAgICAgICAgICAgZmllbGRzWzBdID0gbmFtZQorICAgICAgICAgICAgICAgIGxpbmUgPSAnICcuam9pbihmaWVsZHMpCisKKyAgICAgICAgYmFzZSwgZXF1YWxzLCBkZWZhdWx0ID0gbGluZS5ycGFydGl0aW9uKCc9JykKKyAgICAgICAgaWYgbm90IGVxdWFsczoKKyAgICAgICAgICAgIGJhc2UgPSBkZWZhdWx0CisgICAgICAgICAgICBkZWZhdWx0ID0gTm9uZQorCisgICAgICAgIG1vZHVsZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN0X2lucHV0ID0gImRlZiB4KHt9KTogcGFzcyIuZm9ybWF0KGJhc2UpCisgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UoYXN0X2lucHV0KQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyB0aGUgbGFzdCA9IHdhcyBwcm9iYWJseSBpbnNpZGUgYSBmdW5jdGlvbiBjYWxsLCBsaWtlCisgICAgICAgICAgICAgICAgIyAgIGk6IGludChudWxsYWJsZT1UcnVlKQorICAgICAgICAgICAgICAgICMgc28gYXNzdW1lIHRoZXJlIHdhcyBubyBhY3R1YWwgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgICAgICAgICBkZWZhdWx0ID0gTm9uZQorICAgICAgICAgICAgICAgIGFzdF9pbnB1dCA9ICJkZWYgeCh7fSk6IHBhc3MiLmZvcm1hdChsaW5lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIGludmFsaWQgcGFyYW1ldGVyIGRlY2xhcmF0aW9uOlxuXHQiICsgbGluZSkKKworICAgICAgICBmdW5jdGlvbl9hcmdzID0gbW9kdWxlLmJvZHlbMF0uYXJncworICAgICAgICBwYXJhbWV0ZXIgPSBmdW5jdGlvbl9hcmdzLmFyZ3NbMF0KKworICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5hcmcKKyAgICAgICAgbmFtZSwgbGVnYWN5LCBrd2FyZ3MgPSBzZWxmLnBhcnNlX2NvbnZlcnRlcihwYXJhbWV0ZXIuYW5ub3RhdGlvbikKKworICAgICAgICBpZiBub3QgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgaGF2ZSBhIHBhcmFtZXRlciB3aXRob3V0IGEgZGVmYXVsdCAoIiArIHJlcHIocGFyYW1ldGVyX25hbWUpICsgIilcbmFmdGVyIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0ISIpCisgICAgICAgICAgICB2YWx1ZSA9IHVuc3BlY2lmaWVkCisgICAgICAgICAgICBpZiAncHlfZGVmYXVsdCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgIGZhaWwoIllvdSBjYW4ndCBzcGVjaWZ5IHB5X2RlZmF1bHQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgZGVmYXVsdCB2YWx1ZSEiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19yZXF1aXJlZDoKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfb3B0aW9uYWwKKyAgICAgICAgICAgIGRlZmF1bHQgPSBkZWZhdWx0LnN0cmlwKCkKKyAgICAgICAgICAgIGJhZCA9IEZhbHNlCisgICAgICAgICAgICBhc3RfaW5wdXQgPSAieCA9IHt9Ii5mb3JtYXQoZGVmYXVsdCkKKyAgICAgICAgICAgIGJhZCA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gYXN0LnBhcnNlKGFzdF9pbnB1dCkKKworICAgICAgICAgICAgICAgIGlmICdjX2RlZmF1bHQnIG5vdCBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgICAgICMgd2UgY2FuIG9ubHkgcmVwcmVzZW50IHZlcnkgc2ltcGxlIGRhdGEgdmFsdWVzIGluIEMuCisgICAgICAgICAgICAgICAgICAgICMgZGV0ZWN0IHdoZXRoZXIgZGVmYXVsdCBpcyBva2F5LCB2aWEgYSBibGFja2xpc3QKKyAgICAgICAgICAgICAgICAgICAgIyBvZiBkaXNhbGxvd2VkIGFzdCBub2Rlcy4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgRGV0ZWN0QmFkTm9kZXMoYXN0Lk5vZGVWaXNpdG9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgYmFkX25vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYWQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW5saW5lIGZ1bmN0aW9uIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0X0NhbGwgPSBiYWRfbm9kZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmxpbmUgaWYgc3RhdGVtZW50ICgieCA9IDMgaWYgeSBlbHNlIHoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfSWZFeHAgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0X0xpc3RDb21wID0gdmlzaXRfU2V0Q29tcCA9IGJhZF9ub2RlCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9EaWN0Q29tcCA9IHZpc2l0X0dlbmVyYXRvckV4cCA9IGJhZF9ub2RlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbGl0ZXJhbHMgZm9yIGFkdmFuY2VkIHR5cGVzCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9EaWN0ID0gdmlzaXRfU2V0ID0gYmFkX25vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0X0xpc3QgPSB2aXNpdF9UdXBsZSA9IGJhZF9ub2RlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgInN0YXJyZWQiOiAiYSA9IFsxLCAyLCAzXTsgKmEiCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9TdGFycmVkID0gYmFkX25vZGUKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGxvdyBlbGxpcHNpcywgZm9yIG5vdworICAgICAgICAgICAgICAgICAgICAgICAgIyB2aXNpdF9FbGxpcHNpcyA9IGJhZF9ub2RlCisKKyAgICAgICAgICAgICAgICAgICAgYmxhY2tsaXN0ID0gRGV0ZWN0QmFkTm9kZXMoKQorICAgICAgICAgICAgICAgICAgICBibGFja2xpc3QudmlzaXQobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBiYWQgPSBibGFja2xpc3QuYmFkCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGV5IHNwZWNpZnkgYSBjX2RlZmF1bHQsIHdlIGNhbiBiZSBtb3JlIGxlbmllbnQgYWJvdXQgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICMgYnV0IGF0IGxlYXN0IG1ha2UgYW4gYXR0ZW1wdCBhdCBlbnN1cmluZyBpdCdzIGEgdmFsaWQgZXhwcmVzc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldmFsKGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSA9PSB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCIndW5zcGVjaWZpZWQnIGlzIG5vdCBhIGxlZ2FsIGRlZmF1bHQgdmFsdWUhIikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MgIyBwcm9iYWJseSBhIG5hbWVkIGNvbnN0YW50CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIk1hbGZvcm1lZCBleHByZXNzaW9uIGdpdmVuIGFzIGRlZmF1bHQgdmFsdWVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInshcn0gY2F1c2VkIHshcn0iLmZvcm1hdChkZWZhdWx0LCBlKSkKKyAgICAgICAgICAgICAgICBpZiBiYWQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIlVuc3VwcG9ydGVkIGV4cHJlc3Npb24gYXMgZGVmYXVsdCB2YWx1ZTogIiArIHJlcHIoZGVmYXVsdCkpCisKKyAgICAgICAgICAgICAgICBleHByID0gbW9kdWxlLmJvZHlbMF0udmFsdWUKKyAgICAgICAgICAgICAgICAjIG1pbGQgaGFjazogZXhwbGljaXRseSBzdXBwb3J0IE5VTEwgYXMgYSBkZWZhdWx0IHZhbHVlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHByLCBhc3QuTmFtZSkgYW5kIGV4cHIuaWQgPT0gJ05VTEwnOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgcHlfZGVmYXVsdCA9ICdOb25lJworICAgICAgICAgICAgICAgICAgICBjX2RlZmF1bHQgPSAiTlVMTCIKKyAgICAgICAgICAgICAgICBlbGlmIChpc2luc3RhbmNlKGV4cHIsIGFzdC5CaW5PcCkgb3IKKyAgICAgICAgICAgICAgICAgICAgKGlzaW5zdGFuY2UoZXhwciwgYXN0LlVuYXJ5T3ApIGFuZCBub3QgaXNpbnN0YW5jZShleHByLm9wZXJhbmQsIGFzdC5OdW0pKSk6CisgICAgICAgICAgICAgICAgICAgIGNfZGVmYXVsdCA9IGt3YXJncy5nZXQoImNfZGVmYXVsdCIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShjX2RlZmF1bHQsIHN0cikgYW5kIGNfZGVmYXVsdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCJXaGVuIHlvdSBzcGVjaWZ5IGFuIGV4cHJlc3Npb24gKCIgKyByZXByKGRlZmF1bHQpICsgIikgYXMgeW91ciBkZWZhdWx0IHZhbHVlLFxueW91IE1VU1Qgc3BlY2lmeSBhIHZhbGlkIGNfZGVmYXVsdC4iKQorICAgICAgICAgICAgICAgICAgICBweV9kZWZhdWx0ID0gZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVua25vd24KKyAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXhwciwgYXN0LkF0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgICAgIGEgPSBbXQorICAgICAgICAgICAgICAgICAgICBuID0gZXhwcgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBpc2luc3RhbmNlKG4sIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYS5hcHBlbmQobi5hdHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4udmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobiwgYXN0Lk5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiVW5zdXBwb3J0ZWQgZGVmYXVsdCB2YWx1ZSAiICsgcmVwcihkZWZhdWx0KSArICIgKGxvb2tlZCBsaWtlIGEgUHl0aG9uIGNvbnN0YW50KSIpCisgICAgICAgICAgICAgICAgICAgIGEuYXBwZW5kKG4uaWQpCisgICAgICAgICAgICAgICAgICAgIHB5X2RlZmF1bHQgPSAiLiIuam9pbihyZXZlcnNlZChhKSkKKworICAgICAgICAgICAgICAgICAgICBjX2RlZmF1bHQgPSBrd2FyZ3MuZ2V0KCJjX2RlZmF1bHQiKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2UoY19kZWZhdWx0LCBzdHIpIGFuZCBjX2RlZmF1bHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiV2hlbiB5b3Ugc3BlY2lmeSBhIG5hbWVkIGNvbnN0YW50ICgiICsgcmVwcihweV9kZWZhdWx0KSArICIpIGFzIHlvdXIgZGVmYXVsdCB2YWx1ZSxcbnlvdSBNVVNUIHNwZWNpZnkgYSB2YWxpZCBjX2RlZmF1bHQuIikKKworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2YWwocHlfZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5rbm93bgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN0LmxpdGVyYWxfZXZhbChleHByKQorICAgICAgICAgICAgICAgICAgICBweV9kZWZhdWx0ID0gcmVwcih2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGJvb2wsIE5vbmUuX19jbGFzc19fKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjX2RlZmF1bHQgPSAiUHlfIiArIHB5X2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0gY19yZXByKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0gcHlfZGVmYXVsdAorCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmYWlsKCJTeW50YXggZXJyb3I6ICIgKyByZXByKGUudGV4dCkpCisgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHVua25vd24KKyAgICAgICAgICAgICAgICBjX2RlZmF1bHQgPSBrd2FyZ3MuZ2V0KCJjX2RlZmF1bHQiKQorICAgICAgICAgICAgICAgIHB5X2RlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKGNfZGVmYXVsdCwgc3RyKSBhbmQgY19kZWZhdWx0KToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiV2hlbiB5b3Ugc3BlY2lmeSBhIG5hbWVkIGNvbnN0YW50ICgiICsgcmVwcihweV9kZWZhdWx0KSArICIpIGFzIHlvdXIgZGVmYXVsdCB2YWx1ZSxcbnlvdSBNVVNUIHNwZWNpZnkgYSB2YWxpZCBjX2RlZmF1bHQuIikKKworICAgICAgICAgICAga3dhcmdzLnNldGRlZmF1bHQoJ2NfZGVmYXVsdCcsIGNfZGVmYXVsdCkKKyAgICAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdweV9kZWZhdWx0JywgcHlfZGVmYXVsdCkKKworICAgICAgICBkaWN0ID0gbGVnYWN5X2NvbnZlcnRlcnMgaWYgbGVnYWN5IGVsc2UgY29udmVydGVycworICAgICAgICBsZWdhY3lfc3RyID0gImxlZ2FjeSAiIGlmIGxlZ2FjeSBlbHNlICIiCisgICAgICAgIGlmIG5hbWUgbm90IGluIGRpY3Q6CisgICAgICAgICAgICBmYWlsKCd7fSBpcyBub3QgYSB2YWxpZCB7fWNvbnZlcnRlcicuZm9ybWF0KG5hbWUsIGxlZ2FjeV9zdHIpKQorICAgICAgICAjIGlmIHlvdSB1c2UgYSBjX25hbWUgZm9yIHRoZSBwYXJhbWV0ZXIsIHdlIGp1c3QgZ2l2ZSB0aGF0IG5hbWUgdG8gdGhlIGNvbnZlcnRlcgorICAgICAgICAjIGJ1dCB0aGUgcGFyYW1ldGVyIG9iamVjdCBnZXRzIHRoZSBweXRob24gbmFtZQorICAgICAgICBjb252ZXJ0ZXIgPSBkaWN0W25hbWVdKGNfbmFtZSBvciBwYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyX25hbWUsIHNlbGYuZnVuY3Rpb24sIHZhbHVlLCAqKmt3YXJncykKKworICAgICAgICBraW5kID0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZIGlmIHNlbGYua2V5d29yZF9vbmx5IGVsc2UgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JECisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKToKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMpID09IDE6CisgICAgICAgICAgICAgICAgaWYgKHNlbGYucGFyYW1ldGVyX3N0YXRlICE9IHNlbGYucHNfcmVxdWlyZWQpOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJBICdzZWxmJyBwYXJhbWV0ZXIgY2Fubm90IGJlIG1hcmtlZCBvcHRpb25hbC4iKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiQSAnc2VsZicgcGFyYW1ldGVyIGNhbm5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZS4iKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkEgJ3NlbGYnIHBhcmFtZXRlciBjYW5ub3QgYmUgaW4gYW4gb3B0aW9uYWwgZ3JvdXAuIikKKyAgICAgICAgICAgICAgICBraW5kID0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3N0YXJ0CisgICAgICAgICAgICAgICAgc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLmNsZWFyKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiQSAnc2VsZicgcGFyYW1ldGVyLCBpZiBzcGVjaWZpZWQsIG11c3QgYmUgdGhlIHZlcnkgZmlyc3QgdGhpbmcgaW4gdGhlIHBhcmFtZXRlciBibG9jay4iKQorCisgICAgICAgIHAgPSBQYXJhbWV0ZXIocGFyYW1ldGVyX25hbWUsIGtpbmQsIGZ1bmN0aW9uPXNlbGYuZnVuY3Rpb24sIGNvbnZlcnRlcj1jb252ZXJ0ZXIsIGRlZmF1bHQ9dmFsdWUsIGdyb3VwPXNlbGYuZ3JvdXApCisKKyAgICAgICAgaWYgcGFyYW1ldGVyX25hbWUgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzOgorICAgICAgICAgICAgZmFpbCgiWW91IGNhbid0IGhhdmUgdHdvIHBhcmFtZXRlcnMgbmFtZWQgIiArIHJlcHIocGFyYW1ldGVyX25hbWUpICsgIiEiKQorICAgICAgICBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnNbcGFyYW1ldGVyX25hbWVdID0gcAorCisgICAgZGVmIHBhcnNlX2NvbnZlcnRlcihzZWxmLCBhbm5vdGF0aW9uKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhbm5vdGF0aW9uLCBhc3QuU3RyKToKKyAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLnMsIFRydWUsIHt9CisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhbm5vdGF0aW9uLCBhc3QuTmFtZSk6CisgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbi5pZCwgRmFsc2UsIHt9CisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0LkNhbGwpOgorICAgICAgICAgICAgZmFpbCgiQW5ub3RhdGlvbnMgbXVzdCBiZSBlaXRoZXIgYSBuYW1lLCBhIGZ1bmN0aW9uIGNhbGwsIG9yIGEgc3RyaW5nLiIpCisKKyAgICAgICAgbmFtZSA9IGFubm90YXRpb24uZnVuYy5pZAorICAgICAgICBrd2FyZ3MgPSB7bm9kZS5hcmc6IGFzdC5saXRlcmFsX2V2YWwobm9kZS52YWx1ZSkgZm9yIG5vZGUgaW4gYW5ub3RhdGlvbi5rZXl3b3Jkc30KKyAgICAgICAgcmV0dXJuIG5hbWUsIEZhbHNlLCBrd2FyZ3MKKworICAgIGRlZiBwYXJzZV9zcGVjaWFsX3N5bWJvbChzZWxmLCBzeW1ib2wpOgorICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9PSBzZWxmLnBzX3NlZW5fc2xhc2g6CisgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBzcGVjaWZpZXMgIiArIHN5bWJvbCArICIgYWZ0ZXIgLywgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIikKKworICAgICAgICBpZiBzeW1ib2wgPT0gJyonOgorICAgICAgICAgICAgaWYgc2VsZi5rZXl3b3JkX29ubHk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgdXNlcyAnKicgbW9yZSB0aGFuIG9uY2UuIikKKyAgICAgICAgICAgIHNlbGYua2V5d29yZF9vbmx5ID0gVHJ1ZQorICAgICAgICBlbGlmIHN5bWJvbCA9PSAnWyc6CisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19zdGFydCwgc2VsZi5wc19sZWZ0X3NxdWFyZV9iZWZvcmUpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19sZWZ0X3NxdWFyZV9iZWZvcmUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfcmVxdWlyZWQsIHNlbGYucHNfZ3JvdXBfYWZ0ZXIpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19ncm91cF9hZnRlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgIiArIHN0cihzZWxmLnBhcmFtZXRlcl9zdGF0ZSkgKyAiLmIpIikKKyAgICAgICAgICAgIHNlbGYuZ3JvdXAgKz0gMQorICAgICAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmdfb25seSA9IFRydWUKKyAgICAgICAgZWxpZiBzeW1ib2wgPT0gJ10nOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGEgXSB3aXRob3V0IGEgbWF0Y2hpbmcgWy4iKQorICAgICAgICAgICAgaWYgbm90IGFueShwLmdyb3VwID09IHNlbGYuZ3JvdXAgZm9yIHAgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpKToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gZW1wdHkgZ3JvdXAuXG5BbGwgZ3JvdXBzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyLiIpCisgICAgICAgICAgICBzZWxmLmdyb3VwIC09IDEKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX2xlZnRfc3F1YXJlX2JlZm9yZSwgc2VsZi5wc19ncm91cF9iZWZvcmUpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19ncm91cF9iZWZvcmUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfZ3JvdXBfYWZ0ZXIsIHNlbGYucHNfcmlnaHRfc3F1YXJlX2FmdGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfcmlnaHRfc3F1YXJlX2FmdGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIuYykiKQorICAgICAgICBlbGlmIHN5bWJvbCA9PSAnLyc6CisgICAgICAgICAgICAjIHBzX3JlcXVpcmVkIGFuZCBwc19vcHRpb25hbCBhcmUgYWxsb3dlZCBoZXJlLCB0aGF0IGFsbG93cyBwb3NpdGlvbmFsLW9ubHkgd2l0aG91dCBvcHRpb24gZ3JvdXBzCisgICAgICAgICAgICAjIHRvIHdvcmsgKGFuZCBoYXZlIGRlZmF1bHQgdmFsdWVzISkKKyAgICAgICAgICAgIGlmIChzZWxmLnBhcmFtZXRlcl9zdGF0ZSBub3QgaW4gKHNlbGYucHNfcmVxdWlyZWQsIHNlbGYucHNfb3B0aW9uYWwsIHNlbGYucHNfcmlnaHRfc3F1YXJlX2FmdGVyLCBzZWxmLnBzX2dyb3VwX2JlZm9yZSkpIG9yIHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIi5kKSIpCisgICAgICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBtaXhlcyBrZXl3b3JkLW9ubHkgYW5kIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3NlZW5fc2xhc2gKKyAgICAgICAgICAgICMgZml4dXAgcHJlY2VlZGluZyBwYXJhbWV0ZXJzCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgKHAua2luZCAhPSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQgYW5kIG5vdCBpc2luc3RhbmNlKHAuY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikpOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBtaXhlcyBrZXl3b3JkLW9ubHkgYW5kIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorICAgICAgICAgICAgICAgIHAua2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmdfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2RvY3N0cmluZ19pbmRlbnQgPSBsZW4oc2VsZi5pbmRlbnQubWFyZ2luKQorICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPT0gMworICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZywgbGluZSkKKworICAgICMgZXZlcnkgbGluZSBvZiB0aGUgZG9jc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhdCBsZWFzdCBGIHNwYWNlcywKKyAgICAjIHdoZXJlIEYgPiBQLgorICAgICMgdGhlc2UgRiBzcGFjZXMgd2lsbCBiZSBzdHJpcHBlZC4KKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQubWVhc3VyZShsaW5lKQorICAgICAgICBpZiBpbmRlbnQgPCBzZWxmLnBhcmFtZXRlcl9kb2NzdHJpbmdfaW5kZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA8IDMKKyAgICAgICAgICAgIGlmIHNlbGYuaW5kZW50LmRlcHRoID09IDI6CisgICAgICAgICAgICAgICAgIyBiYWNrIHRvIGEgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlciwgbGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGFzc2VydCBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMKKyAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3Qoc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpKSkpCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZworCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICdcbicKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9IHNlbGYuaW5kZW50LmRlZGVudChsaW5lKQorCisgICAgICAgIGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZyA9IG5ld19kb2NzdHJpbmcKKworICAgICMgdGhlIGZpbmFsIHN0YW56YSBvZiB0aGUgRFNMIGlzIHRoZSBkb2NzdHJpbmcuCisgICAgZGVmIHN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5ncm91cDoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKworICAgICAgICBzdHJpcHBlZCA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzdHJpcHBlZC5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBuZXdfZG9jc3RyaW5nID0gc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcKKyAgICAgICAgaWYgbmV3X2RvY3N0cmluZzoKKyAgICAgICAgICAgIG5ld19kb2NzdHJpbmcgKz0gIlxuIgorICAgICAgICBpZiBzdHJpcHBlZDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmluZGVudC5kZWRlbnQobGluZSkucnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgPSAnJworICAgICAgICBuZXdfZG9jc3RyaW5nICs9IGxpbmUKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBuZXdfZG9jc3RyaW5nCisKKyAgICBkZWYgZm9ybWF0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZnVuY3Rpb24KKworICAgICAgICBuZXdfb3JfaW5pdCA9IGYua2luZCBpbiAoTUVUSE9EX05FVywgTUVUSE9EX0lOSVQpCisgICAgICAgIGlmIG5ld19vcl9pbml0IGFuZCBub3QgZi5kb2NzdHJpbmc6CisgICAgICAgICAgICAjIGRvbid0IHJlbmRlciBhIGRvY3N0cmluZyBhdCBhbGwsIG5vIHNpZ25hdHVyZSwgbm90aGluZy4KKyAgICAgICAgICAgIHJldHVybiBmLmRvY3N0cmluZworCisgICAgICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBwYXJhbWV0ZXJzID0gZi5yZW5kZXJfcGFyYW1ldGVycworCisgICAgICAgICMjCisgICAgICAgICMjIGRvY3N0cmluZyBmaXJzdCBsaW5lCisgICAgICAgICMjCisKKyAgICAgICAgaWYgbmV3X29yX2luaXQ6CisgICAgICAgICAgICAjIGNsYXNzZXMgZ2V0ICpqdXN0KiB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKKyAgICAgICAgICAgICMgbm90IF9fbmV3X18sIG5vdCBfX2luaXRfXywgYW5kIG5vdCBtb2R1bGUuY2xhc3NuYW1lCisgICAgICAgICAgICBhc3NlcnQgZi5jbHMKKyAgICAgICAgICAgIGFkZChmLmNscy5uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkKGYubmFtZSkKKyAgICAgICAgYWRkKCcoJykKKworICAgICAgICAjIHBvcHVsYXRlICJyaWdodF9icmFja2V0X2NvdW50IiBmaWVsZCBmb3IgZXZlcnkgcGFyYW1ldGVyCisgICAgICAgIGFzc2VydCBwYXJhbWV0ZXJzLCAiV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgc2VsZiBwYXJhbWV0ZXIuICIgKyByZXByKGYpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcmFtZXRlcnNbMF0uY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikKKyAgICAgICAgcGFyYW1ldGVyc1swXS5yaWdodF9icmFja2V0X2NvdW50ID0gMAorICAgICAgICBwYXJhbWV0ZXJzX2FmdGVyX3NlbGYgPSBwYXJhbWV0ZXJzWzE6XQorICAgICAgICBpZiBwYXJhbWV0ZXJzX2FmdGVyX3NlbGY6CisgICAgICAgICAgICAjIGZvciBub3csIHRoZSBvbmx5IHdheSBDbGluaWMgc3VwcG9ydHMgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMKKyAgICAgICAgICAgICMgaXMgaWYgYWxsIG9mIHRoZW0gYXJlIHBvc2l0aW9uYWwtb25seS4uLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyAuLi4gZXhjZXB0IGZvciBzZWxmISAgc2VsZiBpcyBhbHdheXMgcG9zaXRpb25hbC1vbmx5LgorCisgICAgICAgICAgICBwb3NpdGlvbmFsX29ubHlfcGFyYW1ldGVycyA9IFtwLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZIGZvciBwIGluIHBhcmFtZXRlcnNfYWZ0ZXJfc2VsZl0KKyAgICAgICAgICAgIGlmIHBhcmFtZXRlcnNfYWZ0ZXJfc2VsZlswXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWToKKyAgICAgICAgICAgICAgICBhc3NlcnQgYWxsKHBvc2l0aW9uYWxfb25seV9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgIHAucmlnaHRfYnJhY2tldF9jb3VudCA9IGFicyhwLmdyb3VwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGRvbid0IHB1dCBhbnkgcmlnaHQgYnJhY2tldHMgYXJvdW5kIG5vbi1wb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgZXZlci4KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzX2FmdGVyX3NlbGY6CisgICAgICAgICAgICAgICAgICAgIHAucmlnaHRfYnJhY2tldF9jb3VudCA9IDAKKworICAgICAgICByaWdodF9icmFja2V0X2NvdW50ID0gMAorCisgICAgICAgIGRlZiBmaXhfcmlnaHRfYnJhY2tldF9jb3VudChkZXNpcmVkKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHJpZ2h0X2JyYWNrZXRfY291bnQKKyAgICAgICAgICAgIHMgPSAnJworICAgICAgICAgICAgd2hpbGUgcmlnaHRfYnJhY2tldF9jb3VudCA8IGRlc2lyZWQ6CisgICAgICAgICAgICAgICAgcyArPSAnWycKKyAgICAgICAgICAgICAgICByaWdodF9icmFja2V0X2NvdW50ICs9IDEKKyAgICAgICAgICAgIHdoaWxlIHJpZ2h0X2JyYWNrZXRfY291bnQgPiBkZXNpcmVkOgorICAgICAgICAgICAgICAgIHMgKz0gJ10nCisgICAgICAgICAgICAgICAgcmlnaHRfYnJhY2tldF9jb3VudCAtPSAxCisgICAgICAgICAgICByZXR1cm4gcworCisgICAgICAgIG5lZWRfc2xhc2ggPSBGYWxzZQorICAgICAgICBhZGRlZF9zbGFzaCA9IEZhbHNlCisgICAgICAgIG5lZWRfYV90cmFpbGluZ19zbGFzaCA9IEZhbHNlCisKKyAgICAgICAgIyB3ZSBvbmx5IG5lZWQgYSB0cmFpbGluZyBzbGFzaDoKKyAgICAgICAgIyAgICogaWYgdGhpcyBpcyBub3QgYSAiZG9jc3RyaW5nX29ubHkiIHNpZ25hdHVyZQorICAgICAgICAjICAgKiBhbmQgaWYgdGhlIGxhc3QgKnNob3duKiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgIyAgICAgcG9zaXRpb25hbCBvbmx5CisgICAgICAgIGlmIG5vdCBmLmRvY3N0cmluZ19vbmx5OgorICAgICAgICAgICAgZm9yIHAgaW4gcmV2ZXJzZWQocGFyYW1ldGVycyk6CisgICAgICAgICAgICAgICAgaWYgbm90IHAuY29udmVydGVyLnNob3dfaW5fc2lnbmF0dXJlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHAuaXNfcG9zaXRpb25hbF9vbmx5KCk6CisgICAgICAgICAgICAgICAgICAgIG5lZWRfYV90cmFpbGluZ19zbGFzaCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisKKyAgICAgICAgYWRkZWRfc3RhciA9IEZhbHNlCisKKyAgICAgICAgZmlyc3RfcGFyYW1ldGVyID0gVHJ1ZQorICAgICAgICBsYXN0X3AgPSBwYXJhbWV0ZXJzWy0xXQorICAgICAgICBsaW5lX2xlbmd0aCA9IGxlbignJy5qb2luKHRleHQpKQorICAgICAgICBpbmRlbnQgPSAiICIgKiBsaW5lX2xlbmd0aAorICAgICAgICBkZWYgYWRkX3BhcmFtZXRlcih0ZXh0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGxpbmVfbGVuZ3RoCisgICAgICAgICAgICBub25sb2NhbCBmaXJzdF9wYXJhbWV0ZXIKKyAgICAgICAgICAgIGlmIGZpcnN0X3BhcmFtZXRlcjoKKyAgICAgICAgICAgICAgICBzID0gdGV4dAorICAgICAgICAgICAgICAgIGZpcnN0X3BhcmFtZXRlciA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHMgPSAnICcgKyB0ZXh0CisgICAgICAgICAgICAgICAgaWYgbGluZV9sZW5ndGggKyBsZW4ocykgPj0gNzI6CisgICAgICAgICAgICAgICAgICAgIGFkZCgnXG4nKQorICAgICAgICAgICAgICAgICAgICBhZGQoaW5kZW50KQorICAgICAgICAgICAgICAgICAgICBsaW5lX2xlbmd0aCA9IGxlbihpbmRlbnQpCisgICAgICAgICAgICAgICAgICAgIHMgPSB0ZXh0CisgICAgICAgICAgICBsaW5lX2xlbmd0aCArPSBsZW4ocykKKyAgICAgICAgICAgIGFkZChzKQorCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBpZiBub3QgcC5jb252ZXJ0ZXIuc2hvd19pbl9zaWduYXR1cmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFzc2VydCBwLm5hbWUKKworICAgICAgICAgICAgaXNfc2VsZiA9IGlzaW5zdGFuY2UocC5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKQorICAgICAgICAgICAgaWYgaXNfc2VsZiBhbmQgZi5kb2NzdHJpbmdfb25seToKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXNuJ3QgYSByZWFsIG1hY2hpbmUtcGFyc2FibGUgc2lnbmF0dXJlLAorICAgICAgICAgICAgICAgICMgc28gbGV0J3Mgbm90IHByaW50IHRoZSAic2VsZiIgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgcC5pc19wb3NpdGlvbmFsX29ubHkoKToKKyAgICAgICAgICAgICAgICBuZWVkX3NsYXNoID0gbm90IGYuZG9jc3RyaW5nX29ubHkKKyAgICAgICAgICAgIGVsaWYgbmVlZF9zbGFzaCBhbmQgbm90IChhZGRlZF9zbGFzaCBvciBwLmlzX3Bvc2l0aW9uYWxfb25seSgpKToKKyAgICAgICAgICAgICAgICBhZGRlZF9zbGFzaCA9IFRydWUKKyAgICAgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKCcvLCcpCisKKyAgICAgICAgICAgIGlmIHAuaXNfa2V5d29yZF9vbmx5KCkgYW5kIG5vdCBhZGRlZF9zdGFyOgorICAgICAgICAgICAgICAgIGFkZGVkX3N0YXIgPSBUcnVlCisgICAgICAgICAgICAgICAgYWRkX3BhcmFtZXRlcignKiwnKQorCisgICAgICAgICAgICBwX2FkZCwgcF9vdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgICAgIHBfYWRkKGZpeF9yaWdodF9icmFja2V0X2NvdW50KHAucmlnaHRfYnJhY2tldF9jb3VudCkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocC5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKToKKyAgICAgICAgICAgICAgICAjIGFubm90YXRlIGZpcnN0IHBhcmFtZXRlciBhcyBiZWluZyBhICJzZWxmIi4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBpZiBpbnNwZWN0LlNpZ25hdHVyZSBnZXRzIHRoaXMgZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgIyBhbmQgaXQncyBhbHJlYWR5IGJvdW5kLCB0aGUgc2VsZiBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICAjIHdpbGwgYmUgc3RyaXBwZWQgb2ZmLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIGlmIGl0J3Mgbm90IGJvdW5kLCBpdCBzaG91bGQgYmUgbWFya2VkCisgICAgICAgICAgICAgICAgIyBhcyBwb3NpdGlvbmFsLW9ubHkuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgbm90ZTogd2UgZG9uJ3QgcHJpbnQgInNlbGYiIGZvciBfX2luaXRfXywKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2UgdGhpcyBpc24ndCBhY3R1YWxseSB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAgICAgIyBmb3IgX19pbml0X18uICAoaXQgY2FuJ3QgYmUsIF9faW5pdF9fIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAjIGhhdmUgYSBkb2NzdHJpbmcuKSAgaWYgdGhpcyBpcyBhbiBfX2luaXRfXworICAgICAgICAgICAgICAgICMgKG9yIF9fbmV3X18pLCB0aGVuIHRoaXMgc2lnbmF0dXJlIGlzIGZvcgorICAgICAgICAgICAgICAgICMgY2FsbGluZyB0aGUgY2xhc3MgdG8gY29udHJ1Y3QgYSBuZXcgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgcF9hZGQoJyQnKQorCisgICAgICAgICAgICBuYW1lID0gcC5jb252ZXJ0ZXIuc2lnbmF0dXJlX25hbWUgb3IgcC5uYW1lCisgICAgICAgICAgICBwX2FkZChuYW1lKQorCisgICAgICAgICAgICBpZiBwLmNvbnZlcnRlci5pc19vcHRpb25hbCgpOgorICAgICAgICAgICAgICAgIHBfYWRkKCc9JykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHAuY29udmVydGVyLnB5X2RlZmF1bHQKKyAgICAgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVwcihwLmNvbnZlcnRlci5kZWZhdWx0KQorICAgICAgICAgICAgICAgIHBfYWRkKHZhbHVlKQorCisgICAgICAgICAgICBpZiAocCAhPSBsYXN0X3ApIG9yIG5lZWRfYV90cmFpbGluZ19zbGFzaDoKKyAgICAgICAgICAgICAgICBwX2FkZCgnLCcpCisKKyAgICAgICAgICAgIGFkZF9wYXJhbWV0ZXIocF9vdXRwdXQoKSkKKworICAgICAgICBhZGQoZml4X3JpZ2h0X2JyYWNrZXRfY291bnQoMCkpCisgICAgICAgIGlmIG5lZWRfYV90cmFpbGluZ19zbGFzaDoKKyAgICAgICAgICAgIGFkZF9wYXJhbWV0ZXIoJy8nKQorICAgICAgICBhZGQoJyknKQorCisgICAgICAgICMgUEVQIDggc2F5czoKKyAgICAgICAgIworICAgICAgICAjICAgICBUaGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgd2lsbCBub3QgdXNlIGZ1bmN0aW9uIGFubm90YXRpb25zCisgICAgICAgICMgICAgIGFzIHRoYXQgd291bGQgcmVzdWx0IGluIGEgcHJlbWF0dXJlIGNvbW1pdG1lbnQgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgICMgICAgIGFubm90YXRpb24gc3R5bGUuIEluc3RlYWQsIHRoZSBhbm5vdGF0aW9ucyBhcmUgbGVmdCBmb3IgdXNlcnMKKyAgICAgICAgIyAgICAgdG8gZGlzY292ZXIgYW5kIGV4cGVyaW1lbnQgd2l0aCB1c2VmdWwgYW5ub3RhdGlvbiBzdHlsZXMuCisgICAgICAgICMKKyAgICAgICAgIyB0aGVyZWZvcmUgdGhpcyBpcyBjb21tZW50ZWQgb3V0OgorICAgICAgICAjCisgICAgICAgICMgaWYgZi5yZXR1cm5fY29udmVydGVyLnB5X2RlZmF1bHQ6CisgICAgICAgICMgICAgIGFkZCgnIC0+ICcpCisgICAgICAgICMgICAgIGFkZChmLnJldHVybl9jb252ZXJ0ZXIucHlfZGVmYXVsdCkKKworICAgICAgICBpZiBub3QgZi5kb2NzdHJpbmdfb25seToKKyAgICAgICAgICAgIGFkZCgiXG4tLVxuIikKKworICAgICAgICBkb2NzdHJpbmdfZmlyc3RfbGluZSA9IG91dHB1dCgpCisKKyAgICAgICAgIyBub3cgZml4IHVwIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGJyYWNrZXRzIGxvb2sgd3JvbmcKKyAgICAgICAgZG9jc3RyaW5nX2ZpcnN0X2xpbmUgPSBkb2NzdHJpbmdfZmlyc3RfbGluZS5yZXBsYWNlKCcsIF0nLCAnLF0gJykKKworICAgICAgICAjIG9rYXkuICBub3cgd2UncmUgb2ZmaWNpYWxseSBidWlsZGluZyB0aGUgInBhcmFtZXRlcnMiIHNlY3Rpb24uCisgICAgICAgICMgY3JlYXRlIHN1YnN0aXR1dGlvbiB0ZXh0IGZvciB7cGFyYW1ldGVyc30KKyAgICAgICAgc3BhY2VyX2xpbmUgPSBGYWxzZQorICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgaWYgbm90IHAuZG9jc3RyaW5nLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNwYWNlcl9saW5lOgorICAgICAgICAgICAgICAgIGFkZCgnXG4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGFjZXJfbGluZSA9IFRydWUKKyAgICAgICAgICAgIGFkZCgiICAiKQorICAgICAgICAgICAgYWRkKHAubmFtZSkKKyAgICAgICAgICAgIGFkZCgnXG4nKQorICAgICAgICAgICAgYWRkKHRleHR3cmFwLmluZGVudChyc3RyaXBfbGluZXMocC5kb2NzdHJpbmcucnN0cmlwKCkpLCAiICAgICIpKQorICAgICAgICBwYXJhbWV0ZXJzID0gb3V0cHV0KCkKKyAgICAgICAgaWYgcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcnMgKz0gJ1xuJworCisgICAgICAgICMjCisgICAgICAgICMjIGRvY3N0cmluZyBib2R5CisgICAgICAgICMjCisKKyAgICAgICAgZG9jc3RyaW5nID0gZi5kb2NzdHJpbmcucnN0cmlwKCkKKyAgICAgICAgbGluZXMgPSBbbGluZS5yc3RyaXAoKSBmb3IgbGluZSBpbiBkb2NzdHJpbmcuc3BsaXQoJ1xuJyldCisKKyAgICAgICAgIyBFbmZvcmNlIHRoZSBzdW1tYXJ5IGxpbmUhCisgICAgICAgICMgVGhlIGZpcnN0IGxpbmUgb2YgYSBkb2NzdHJpbmcgc2hvdWxkIGJlIGEgc3VtbWFyeSBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICMgSXQgc2hvdWxkIGZpdCBvbiBvbmUgbGluZSAoODAgY29sdW1ucz8gNzkgbWF5YmU/KSBhbmQgYmUgYSBwYXJhZ3JhcGgKKyAgICAgICAgIyBieSBpdHNlbGYuCisgICAgICAgICMKKyAgICAgICAgIyBBcmd1bWVudCBDbGluaWMgZW5mb3JjZXMgdGhlIGZvbGxvd2luZyBydWxlOgorICAgICAgICAjICAqIGVpdGhlciB0aGUgZG9jc3RyaW5nIGlzIGVtcHR5LAorICAgICAgICAjICAqIG9yIGl0IG11c3QgaGF2ZSBhIHN1bW1hcnkgbGluZS4KKyAgICAgICAgIworICAgICAgICAjIEd1aWRvIHNhaWQgQ2xpbmljIHNob3VsZCBlbmZvcmNlIHRoaXM6CisgICAgICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDEzLUp1bmUvMTI3MTEwLmh0bWwKKworICAgICAgICBpZiBsZW4obGluZXMpID49IDI6CisgICAgICAgICAgICBpZiBsaW5lc1sxXToKKyAgICAgICAgICAgICAgICBmYWlsKCJEb2NzdHJpbmcgZm9yICIgKyBmLmZ1bGxfbmFtZSArICIgZG9lcyBub3QgaGF2ZSBhIHN1bW1hcnkgbGluZSFcbiIgKworICAgICAgICAgICAgICAgICAgICAiRXZlcnkgbm9uLWJsYW5rIGZ1bmN0aW9uIGRvY3N0cmluZyBtdXN0IHN0YXJ0IHdpdGhcbiIgKworICAgICAgICAgICAgICAgICAgICAiYSBzaW5nbGUgbGluZSBzdW1tYXJ5IGZvbGxvd2VkIGJ5IGFuIGVtcHR5IGxpbmUuIikKKyAgICAgICAgZWxpZiBsZW4obGluZXMpID09IDE6CisgICAgICAgICAgICAjIHRoZSBkb2NzdHJpbmcgaXMgb25seSBvbmUgbGluZSByaWdodCBub3ctLXRoZSBzdW1tYXJ5IGxpbmUuCisgICAgICAgICAgICAjIGFkZCBhbiBlbXB0eSBsaW5lIGFmdGVyIHRoZSBzdW1tYXJ5IGxpbmUgc28gd2UgaGF2ZSBzcGFjZQorICAgICAgICAgICAgIyBiZXR3ZWVuIGl0IGFuZCB0aGUge3BhcmFtZXRlcnN9IHdlJ3JlIGFib3V0IHRvIGFkZC4KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICBwYXJhbWV0ZXJzX21hcmtlcl9jb3VudCA9IGxlbihkb2NzdHJpbmcuc3BsaXQoJ3twYXJhbWV0ZXJzfScpKSAtIDEKKyAgICAgICAgaWYgcGFyYW1ldGVyc19tYXJrZXJfY291bnQgPiAxOgorICAgICAgICAgICAgZmFpbCgnWW91IG1heSBub3Qgc3BlY2lmeSB7cGFyYW1ldGVyc30gbW9yZSB0aGFuIG9uY2UgaW4gYSBkb2NzdHJpbmchJykKKworICAgICAgICBpZiBub3QgcGFyYW1ldGVyc19tYXJrZXJfY291bnQ6CisgICAgICAgICAgICAjIGluc2VydCBhZnRlciBzdW1tYXJ5IGxpbmUKKyAgICAgICAgICAgIGxpbmVzLmluc2VydCgyLCAne3BhcmFtZXRlcnN9JykKKworICAgICAgICAjIGluc2VydCBhdCBmcm9udCBvZiBkb2NzdHJpbmcKKyAgICAgICAgbGluZXMuaW5zZXJ0KDAsIGRvY3N0cmluZ19maXJzdF9saW5lKQorCisgICAgICAgIGRvY3N0cmluZyA9ICJcbiIuam9pbihsaW5lcykKKworICAgICAgICBhZGQoZG9jc3RyaW5nKQorICAgICAgICBkb2NzdHJpbmcgPSBvdXRwdXQoKQorCisgICAgICAgIGRvY3N0cmluZyA9IGxpbmVhcl9mb3JtYXQoZG9jc3RyaW5nLCBwYXJhbWV0ZXJzPXBhcmFtZXRlcnMpCisgICAgICAgIGRvY3N0cmluZyA9IGRvY3N0cmluZy5yc3RyaXAoKQorCisgICAgICAgIHJldHVybiBkb2NzdHJpbmcKKworICAgIGRlZiBzdGF0ZV90ZXJtaW5hbChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB3aGVuIHByb2Nlc3NpbmcgdGhlIGJsb2NrIGlzIGRvbmUuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgbm90IGxpbmUKKworICAgICAgICBpZiBub3Qgc2VsZi5mdW5jdGlvbjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgdmFsdWVzID0gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpCisgICAgICAgICAgICBpZiBub3QgdmFsdWVzOgorICAgICAgICAgICAgICAgIG5vX3BhcmFtZXRlcl9hZnRlcl9zdGFyID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsYXN0X3BhcmFtZXRlciA9IG5leHQocmV2ZXJzZWQobGlzdCh2YWx1ZXMpKSkKKyAgICAgICAgICAgICAgICBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhciA9IGxhc3RfcGFyYW1ldGVyLmtpbmQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZCisgICAgICAgICAgICBpZiBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhcjoKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBzcGVjaWZpZXMgJyonIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMgYWZ0ZXJ3YXJkcy4iKQorCisgICAgICAgICMgcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBhbGwgcGFyYW1ldGVyIGRvY3N0cmluZ3MKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB2YWx1ZS5kb2NzdHJpbmcgPSB2YWx1ZS5kb2NzdHJpbmcucnN0cmlwKCkKKworICAgICAgICBzZWxmLmZ1bmN0aW9uLmRvY3N0cmluZyA9IHNlbGYuZm9ybWF0X2RvY3N0cmluZygpCisKKworCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlIGNhbGxhYmxlIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0CisjIHRoYXQgaW1wbGVtZW50cyB0aGUgY2xpbmljIHBhcnNlcgorIyBpbnRlcmZhY2UgKF9faW5pdF9fIGFuZCBwYXJzZSkuCisjCisjIGV4YW1wbGUgcGFyc2VyczoKKyMgICAiY2xpbmljIiwgaGFuZGxlcyB0aGUgQ2xpbmljIERTTAorIyAgICJweXRob24iLCBoYW5kbGVzIHJ1bm5pbmcgUHl0aG9uIGNvZGUKKyMKK3BhcnNlcnMgPSB7J2NsaW5pYycgOiBEU0xQYXJzZXIsICdweXRob24nOiBQeXRob25QYXJzZXJ9CisKKworY2xpbmljID0gTm9uZQorCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIGltcG9ydCBzeXMKKworICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPCAzIG9yIHN5cy52ZXJzaW9uX2luZm8ubWlub3IgPCAzOgorICAgICAgICBzeXMuZXhpdCgiRXJyb3I6IGNsaW5pYy5weSByZXF1aXJlcyBQeXRob24gMy4zIG9yIGdyZWF0ZXIuIikKKworICAgIGltcG9ydCBhcmdwYXJzZQorICAgIGNtZGxpbmUgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgY21kbGluZS5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItbyIsICItLW91dHB1dCIsIHR5cGU9c3RyKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItLWNvbnZlcnRlcnMiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItLW1ha2UiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCJmaWxlbmFtZSIsIHR5cGU9c3RyLCBuYXJncz0iKiIpCisgICAgbnMgPSBjbWRsaW5lLnBhcnNlX2FyZ3MoYXJndikKKworICAgIGlmIG5zLmNvbnZlcnRlcnM6CisgICAgICAgIGlmIG5zLmZpbGVuYW1lOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlIGVycm9yOiBjYW4ndCBzcGVjaWZ5IC0tY29udmVydGVycyBhbmQgYSBmaWxlbmFtZSBhdCB0aGUgc2FtZSB0aW1lLiIpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KC0xKQorICAgICAgICBjb252ZXJ0ZXJzID0gW10KKyAgICAgICAgcmV0dXJuX2NvbnZlcnRlcnMgPSBbXQorICAgICAgICBpZ25vcmVkID0gc2V0KCIiIgorICAgICAgICAgICAgYWRkX2NfY29udmVydGVyCisgICAgICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyCisgICAgICAgICAgICBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgIGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgICIiIi5zdHJpcCgpLnNwbGl0KCkpCisgICAgICAgIG1vZHVsZSA9IGdsb2JhbHMoKQorICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGU6CisgICAgICAgICAgICBmb3Igc3VmZml4LCBpZHMgaW4gKAorICAgICAgICAgICAgICAgICgiX3JldHVybl9jb252ZXJ0ZXIiLCByZXR1cm5fY29udmVydGVycyksCisgICAgICAgICAgICAgICAgKCJfY29udmVydGVyIiwgY29udmVydGVycyksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gaWdub3JlZDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAgIGlkcy5hcHBlbmQoKG5hbWUsIG5hbWVbOi1sZW4oc3VmZml4KV0pKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBwcmludCgpCisKKyAgICAgICAgcHJpbnQoIkxlZ2FjeSBjb252ZXJ0ZXJzOiIpCisgICAgICAgIGxlZ2FjeSA9IHNvcnRlZChsZWdhY3lfY29udmVydGVycykKKyAgICAgICAgcHJpbnQoJyAgICAnICsgJyAnLmpvaW4oYyBmb3IgYyBpbiBsZWdhY3kgaWYgY1swXS5pc3VwcGVyKCkpKQorICAgICAgICBwcmludCgnICAgICcgKyAnICcuam9pbihjIGZvciBjIGluIGxlZ2FjeSBpZiBjWzBdLmlzbG93ZXIoKSkpCisgICAgICAgIHByaW50KCkKKworICAgICAgICBmb3IgdGl0bGUsIGF0dHJpYnV0ZSwgaWRzIGluICgKKyAgICAgICAgICAgICgiQ29udmVydGVycyIsICdjb252ZXJ0ZXJfaW5pdCcsIGNvbnZlcnRlcnMpLAorICAgICAgICAgICAgKCJSZXR1cm4gY29udmVydGVycyIsICdyZXR1cm5fY29udmVydGVyX2luaXQnLCByZXR1cm5fY29udmVydGVycyksCisgICAgICAgICk6CisgICAgICAgICAgICBwcmludCh0aXRsZSArICI6IikKKyAgICAgICAgICAgIGxvbmdlc3QgPSAtMQorICAgICAgICAgICAgZm9yIG5hbWUsIHNob3J0X25hbWUgaW4gaWRzOgorICAgICAgICAgICAgICAgIGxvbmdlc3QgPSBtYXgobG9uZ2VzdCwgbGVuKHNob3J0X25hbWUpKQorICAgICAgICAgICAgZm9yIG5hbWUsIHNob3J0X25hbWUgaW4gc29ydGVkKGlkcywga2V5PWxhbWJkYSB4OiB4WzFdLmxvd2VyKCkpOgorICAgICAgICAgICAgICAgIGNscyA9IG1vZHVsZVtuYW1lXQorICAgICAgICAgICAgICAgIGNhbGxhYmxlID0gZ2V0YXR0cihjbHMsIGF0dHJpYnV0ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgY2FsbGFibGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUoY2FsbGFibGUpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIgaW4gc2lnbmF0dXJlLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmRlZmF1bHQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9ICd7fT17IXJ9Jy5mb3JtYXQocGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgcHJpbnQoJyAgICB7fSh7fSknLmZvcm1hdChzaG9ydF9uYW1lLCAnLCAnLmpvaW4ocGFyYW1ldGVycykpKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICBwcmludCgiQWxsIGNvbnZlcnRlcnMgYWxzbyBhY2NlcHQgKGNfZGVmYXVsdD1Ob25lLCBweV9kZWZhdWx0PU5vbmUsIGFubm90YXRpb249Tm9uZSkuIikKKyAgICAgICAgcHJpbnQoIkFsbCByZXR1cm4gY29udmVydGVycyBhbHNvIGFjY2VwdCAocHlfZGVmYXVsdD1Ob25lKS4iKQorICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgaWYgbnMubWFrZToKKyAgICAgICAgaWYgbnMub3V0cHV0IG9yIG5zLmZpbGVuYW1lOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlIGVycm9yOiBjYW4ndCB1c2UgLW8gb3IgZmlsZW5hbWVzIHdpdGggLS1tYWtlLiIpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KC0xKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsaygnLicpOgorICAgICAgICAgICAgZm9yIHJjc19kaXIgaW4gKCcuc3ZuJywgJy5naXQnLCAnLmhnJywgJ2J1aWxkJyk6CisgICAgICAgICAgICAgICAgaWYgcmNzX2RpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZShyY3NfZGlyKQorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIG5vdCAoZmlsZW5hbWUuZW5kc3dpdGgoJy5jJykgb3IgZmlsZW5hbWUuZW5kc3dpdGgoJy5oJykpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgbnMudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocGF0aCkKKyAgICAgICAgICAgICAgICBwYXJzZV9maWxlKHBhdGgsIGZvcmNlPW5zLmZvcmNlLCB2ZXJpZnk9bm90IG5zLmZvcmNlKQorICAgICAgICByZXR1cm4KKworICAgIGlmIG5vdCBucy5maWxlbmFtZToKKyAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgIHN5cy5leGl0KC0xKQorCisgICAgaWYgbnMub3V0cHV0IGFuZCBsZW4obnMuZmlsZW5hbWUpID4gMToKKyAgICAgICAgcHJpbnQoIlVzYWdlIGVycm9yOiBjYW4ndCB1c2UgLW8gd2l0aCBtdWx0aXBsZSBmaWxlbmFtZXMuIikKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICBmb3IgZmlsZW5hbWUgaW4gbnMuZmlsZW5hbWU6CisgICAgICAgIGlmIG5zLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludChmaWxlbmFtZSkKKyAgICAgICAgcGFyc2VfZmlsZShmaWxlbmFtZSwgb3V0cHV0PW5zLm91dHB1dCwgZm9yY2U9bnMuZm9yY2UsIHZlcmlmeT1ub3QgbnMuZm9yY2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9Ub29scy9jbGluaWMvY2xpbmljX3Rlc3QucHkgYi9Ub29scy9jbGluaWMvY2xpbmljX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyMTAwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weQpAQCAtMCwwICsxLDgwMSBAQAorIyBBcmd1bWVudCBDbGluaWMKKyMgQ29weXJpZ2h0IDIwMTItMjAxMyBieSBMYXJyeSBIYXN0aW5ncy4KKyMgTGljZW5zZWQgdG8gdGhlIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KKyMKKworaW1wb3J0IGJ1aWx0aW5zCitpbXBvcnQgY2xpbmljCitmcm9tIGNsaW5pYyBpbXBvcnQgRFNMUGFyc2VyCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpbnNwZWN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKKworCitjbGFzcyBGYWtlQ29udmVydGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisKKworY2xhc3MgRmFrZUNvbnZlcnRlckZhY3Rvcnk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgbmFtZSwgZGVmYXVsdCwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gRmFrZUNvbnZlcnRlcihzZWxmLm5hbWUsIGt3YXJncykKKworCitjbGFzcyBGYWtlQ29udmVydGVyc0RpY3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnVzZWRfY29udmVydGVycyA9IHt9CisKKyAgICBkZWYgZ2V0KHNlbGYsIG5hbWUsIGRlZmF1bHQpOgorICAgICAgICByZXR1cm4gc2VsZi51c2VkX2NvbnZlcnRlcnMuc2V0ZGVmYXVsdChuYW1lLCBGYWtlQ29udmVydGVyRmFjdG9yeShuYW1lKSkKKworY2xpbmljLkNsaW5pYy5wcmVzZXRzX3RleHQgPSAnJworYyA9IGNsaW5pYy5DbGluaWMobGFuZ3VhZ2U9J0MnKQorCitjbGFzcyBGYWtlQ2xpbmljOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jb252ZXJ0ZXJzID0gRmFrZUNvbnZlcnRlcnNEaWN0KCkKKyAgICAgICAgc2VsZi5sZWdhY3lfY29udmVydGVycyA9IEZha2VDb252ZXJ0ZXJzRGljdCgpCisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBjbGluaWMuQ0xhbmd1YWdlKE5vbmUpCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuYmxvY2tfcGFyc2VyID0gY2xpbmljLkJsb2NrUGFyc2VyKCcnLCBzZWxmLmxhbmd1YWdlKQorICAgICAgICBzZWxmLm1vZHVsZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgY2xpbmljLmNsaW5pYyA9IHNlbGYKKyAgICAgICAgc2VsZi5uYW1lID0gIkZha2VDbGluaWMiCisgICAgICAgIHNlbGYubGluZV9wcmVmaXggPSBzZWxmLmxpbmVfc3VmZml4ID0gJycKKyAgICAgICAgc2VsZi5kZXN0aW5hdGlvbnMgPSB7fQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigiYmxvY2siLCAiYnVmZmVyIikKKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oImZpbGUiLCAiYnVmZmVyIikKKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oInN1cHByZXNzIiwgInN1cHByZXNzIikKKyAgICAgICAgZCA9IHNlbGYuZGVzdGluYXRpb25zLmdldAorICAgICAgICBzZWxmLmZpZWxkX2Rlc3RpbmF0aW9ucyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCgKKyAgICAgICAgICAgICgnZG9jc3RyaW5nX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdkb2NzdHJpbmdfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdtZXRob2RkZWZfZGVmaW5lJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ2ltcGxfcHJvdG90eXBlJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ3BhcnNlcl9wcm90b3R5cGUnLCBkKCdzdXBwcmVzcycpKSwKKyAgICAgICAgICAgICgncGFyc2VyX2RlZmluaXRpb24nLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgnaW1wbF9kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCisgICAgICAgICkpCisKKyAgICBkZWYgZ2V0X2Rlc3RpbmF0aW9uKHNlbGYsIG5hbWUpOgorICAgICAgICBkID0gc2VsZi5kZXN0aW5hdGlvbnMuZ2V0KG5hbWUpCisgICAgICAgIGlmIG5vdCBkOgorICAgICAgICAgICAgc3lzLmV4aXQoIkRlc3RpbmF0aW9uIGRvZXMgbm90IGV4aXN0OiAiICsgcmVwcihuYW1lKSkKKyAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBhZGRfZGVzdGluYXRpb24oc2VsZiwgbmFtZSwgdHlwZSwgKmFyZ3MpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuZGVzdGluYXRpb25zOgorICAgICAgICAgICAgc3lzLmV4aXQoIkRlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzOiAiICsgcmVwcihuYW1lKSkKKyAgICAgICAgc2VsZi5kZXN0aW5hdGlvbnNbbmFtZV0gPSBjbGluaWMuRGVzdGluYXRpb24obmFtZSwgdHlwZSwgc2VsZiwgKmFyZ3MpCisKKyAgICBkZWYgaXNfZGlyZWN0aXZlKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gbmFtZSA9PSAibW9kdWxlIgorCisgICAgZGVmIGRpcmVjdGl2ZShzZWxmLCBuYW1lLCBhcmdzKToKKyAgICAgICAgc2VsZi5jYWxsZWRfZGlyZWN0aXZlc1tuYW1lXSA9IGFyZ3MKKworICAgIF9tb2R1bGVfYW5kX2NsYXNzID0gY2xpbmljLkNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcworCitjbGFzcyBDbGluaWNXaG9sZUZpbGVUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9lb2woc2VsZik6CisgICAgICAgICMgcmVncmVzc2lvbiB0ZXN0OgorICAgICAgICAjIGNsaW5pYydzIGJsb2NrIHBhcnNlciBkaWRuJ3QgcmVjb2duaXplCisgICAgICAgICMgdGhlICJlbmQgbGluZSIgZm9yIHRoZSBibG9jayBpZiBpdAorICAgICAgICAjIGRpZG4ndCBlbmQgaW4gIlxuIiAoYXMgaW4sIHRoZSBsYXN0KQorICAgICAgICAjIGJ5dGUgb2YgdGhlIGZpbGUgd2FzICcvJy4KKyAgICAgICAgIyBzbyBpdCB3b3VkbCBzcGl0IG91dCBhbiBlbmQgbGluZSBmb3IgeW91LgorICAgICAgICAjIGFuZCBzaW5jZSB5b3UgcmVhbGx5IGFscmVhZHkgaGFkIG9uZSwKKyAgICAgICAgIyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBibG9jayBnb3QgY29ycnVwdGVkLgorICAgICAgICBjID0gY2xpbmljLkNsaW5pYyhjbGluaWMuQ0xhbmd1YWdlKE5vbmUpKQorICAgICAgICByYXcgPSAiLypbY2xpbmljXVxuZm9vXG5bY2xpbmljXSovIgorICAgICAgICBjb29rZWQgPSBjLnBhcnNlKHJhdykuc3BsaXRsaW5lcygpCisgICAgICAgIGVuZF9saW5lID0gY29va2VkWzJdLnJzdHJpcCgpCisgICAgICAgICMgdGhpcyB0ZXN0IGlzIHJlZHVuZGFudCwgaXQncyBqdXN0IGhlcmUgZXhwbGljaXRseSB0byBjYXRjaAorICAgICAgICAjIHRoZSByZWdyZXNzaW9uIHRlc3Qgc28gd2UgZG9uJ3QgZm9yZ2V0IHdoYXQgaXQgbG9va2VkIGxpa2UKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlbmRfbGluZSwgIltjbGluaWNdKi9bY2xpbmljXSovIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmRfbGluZSwgIltjbGluaWNdKi8iKQorCisKKworY2xhc3MgQ2xpbmljR3JvdXBQZXJtdXRlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCBsLCBtLCByLCBvdXRwdXQpOgorICAgICAgICBjb21wdXRlZCA9IGNsaW5pYy5wZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhsLCBtLCByKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgY29tcHV0ZWQpCisKKyAgICBkZWYgdGVzdF9yYW5nZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbWydzdGFydCddXSwgWydzdG9wJ10sIFtbJ3N0ZXAnXV0sCisgICAgICAgICAgKAorICAgICAgICAgICAgKCdzdG9wJywpLAorICAgICAgICAgICAgKCdzdGFydCcsICdzdG9wJywpLAorICAgICAgICAgICAgKCdzdGFydCcsICdzdG9wJywgJ3N0ZXAnLCksCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X2FkZF93aW5kb3coc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW1sneCcsICd5J11dLCBbJ2NoJ10sIFtbJ2F0dHInXV0sCisgICAgICAgICAgKAorICAgICAgICAgICAgKCdjaCcsKSwKKyAgICAgICAgICAgICgnY2gnLCAnYXR0cicpLAorICAgICAgICAgICAgKCd4JywgJ3knLCAnY2gnLCksCisgICAgICAgICAgICAoJ3gnLCAneScsICdjaCcsICdhdHRyJyksCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X2x1ZGljcm91cyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbWydhMScsICdhMicsICdhMyddLCBbJ2IxJywgJ2IyJ11dLCBbJ2MxJ10sIFtbJ2QxJywgJ2QyJ10sIFsnZTEnLCAnZTInLCAnZTMnXV0sCisgICAgICAgICAgKAorICAgICAgICAgICgnYzEnLCksCisgICAgICAgICAgKCdiMScsICdiMicsICdjMScpLAorICAgICAgICAgICgnYjEnLCAnYjInLCAnYzEnLCAnZDEnLCAnZDInKSwKKyAgICAgICAgICAoJ2ExJywgJ2EyJywgJ2EzJywgJ2IxJywgJ2IyJywgJ2MxJyksCisgICAgICAgICAgKCdhMScsICdhMicsICdhMycsICdiMScsICdiMicsICdjMScsICdkMScsICdkMicpLAorICAgICAgICAgICgnYTEnLCAnYTInLCAnYTMnLCAnYjEnLCAnYjInLCAnYzEnLCAnZDEnLCAnZDInLCAnZTEnLCAnZTInLCAnZTMnKSwKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfcmlnaHRfb25seShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbXSwgW10sIFtbJ2EnXSxbJ2InXSxbJ2MnXV0sCisgICAgICAgICAgKAorICAgICAgICAgICgpLAorICAgICAgICAgICgnYScsKSwKKyAgICAgICAgICAoJ2EnLCAnYicpLAorICAgICAgICAgICgnYScsICdiJywgJ2MnKQorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9oYXZlX2xlZnRfb3B0aW9uc19idXRfcmVxdWlyZWRfaXNfZW1wdHkoc2VsZik6CisgICAgICAgIGRlZiBmbigpOgorICAgICAgICAgICAgY2xpbmljLnBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKFsnYSddLCBbXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBmbikKKworCitjbGFzcyBDbGluaWNMaW5lYXJGb3JtYXRUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgaW5wdXQsIG91dHB1dCwgKiprd2FyZ3MpOgorICAgICAgICBjb21wdXRlZCA9IGNsaW5pYy5saW5lYXJfZm9ybWF0KGlucHV0LCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgnJywgJycpCisKKyAgICBkZWYgdGVzdF9zb2xvX25ld2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoJ1xuJywgJ1xuJykKKworICAgIGRlZiB0ZXN0X25vX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICB7bmFtZX0KKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgbmFtZT0nJykKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9saW5lX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICB7bmFtZX0KKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIEdBUkdMRQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgbmFtZT0nR0FSR0xFJykKKworICAgIGRlZiB0ZXN0X211bHRpbGluZV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAge25hbWV9CisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICBiaW5nbGUKKyAgICAgICAgICBidW5nbGUKKworICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgbmFtZT0nYmluZ2xlXG5idW5nbGVcbicpCisKK2NsYXNzIEluZXJ0UGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGluaWMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBwYXNzCisKK2NsYXNzIENvcHlQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIGJsb2NrLm91dHB1dCA9IGJsb2NrLmlucHV0CisKKworY2xhc3MgQ2xpbmljQmxvY2tQYXJzZXJUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgaW5wdXQsIG91dHB1dCk6CisgICAgICAgIGxhbmd1YWdlID0gY2xpbmljLkNMYW5ndWFnZShOb25lKQorCisgICAgICAgIGJsb2NrcyA9IGxpc3QoY2xpbmljLkJsb2NrUGFyc2VyKGlucHV0LCBsYW5ndWFnZSkpCisgICAgICAgIHdyaXRlciA9IGNsaW5pYy5CbG9ja1ByaW50ZXIobGFuZ3VhZ2UpCisgICAgICAgIGZvciBibG9jayBpbiBibG9ja3M6CisgICAgICAgICAgICB3cml0ZXIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgIG91dHB1dCA9IHdyaXRlci5mLmdldHZhbHVlKCkKKyAgICAgICAgYXNzZXJ0IG91dHB1dCA9PSBpbnB1dCwgIm91dHB1dCAhPSBpbnB1dCFcblxub3V0cHV0ICIgKyByZXByKG91dHB1dCkgKyAiXG5cbiBpbnB1dCAiICsgcmVwcihpbnB1dCkKKworICAgIGRlZiByb3VuZF90cmlwKHNlbGYsIGlucHV0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3QoaW5wdXQsIGlucHV0KQorCisgICAgZGVmIHRlc3Rfcm91bmRfdHJpcF8xKHNlbGYpOgorICAgICAgICBzZWxmLnJvdW5kX3RyaXAoIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKyIiIikKKyAgICBkZWYgdGVzdF9yb3VuZF90cmlwXzIoc2VsZik6CisgICAgICAgIHNlbGYucm91bmRfdHJpcCgiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorLypbaW5lcnRdCithYmMKK1tpbmVydF0qLworZGVmCisvKltpbmVydCBjaGVja3N1bTogN2IxOGQwMTdmODlmNjFjZjE3ZDQ3ZjkyNzQ5ZWE2OTMwYTNmMWRlYl0qLworeHl6CisiIiIpCisKKyAgICBkZWYgX3Rlc3RfY2xpbmljKHNlbGYsIGlucHV0LCBvdXRwdXQpOgorICAgICAgICBsYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoTm9uZSkKKyAgICAgICAgYyA9IGNsaW5pYy5DbGluaWMobGFuZ3VhZ2UpCisgICAgICAgIGMucGFyc2Vyc1snaW5lcnQnXSA9IEluZXJ0UGFyc2VyKGMpCisgICAgICAgIGMucGFyc2Vyc1snY29weSddID0gQ29weVBhcnNlcihjKQorICAgICAgICBjb21wdXRlZCA9IGMucGFyc2UoaW5wdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBjb21wdXRlZCkKKworICAgIGRlZiB0ZXN0X2NsaW5pY18xKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2NsaW5pYygiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorLypbY29weSBpbnB1dF0KK2RlZgorW2NvcHkgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KK2FiYworLypbY29weSBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wM2NmZDc0MzY2MWYwNzk3IGlucHV0PTdiMThkMDE3Zjg5ZjYxY2ZdKi8KK3h5egorIiIiLCAiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorLypbY29weSBpbnB1dF0KK2RlZgorW2NvcHkgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KK2RlZgorLypbY29weSBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03YjE4ZDAxN2Y4OWY2MWNmIGlucHV0PTdiMThkMDE3Zjg5ZjYxY2ZdKi8KK3h5egorIiIiKQorCisKK2NsYXNzIENsaW5pY1BhcnNlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RyaXZpYWwoc2VsZik6CisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihGYWtlQ2xpbmljKCkpCisgICAgICAgIGJsb2NrID0gY2xpbmljLkJsb2NrKCJtb2R1bGUgb3Ncbm9zLmFjY2VzcyIpCisgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgbW9kdWxlLCBmdW5jdGlvbiA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWNjZXNzIiwgZnVuY3Rpb24ubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3MiLCBtb2R1bGUubmFtZSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9saW5lKHNlbGYpOgorICAgICAgICBibG9jayA9IHNlbGYucGFyc2UoIiNcbm1vZHVsZSBvc1xub3MuYWNjZXNzIikKKyAgICAgICAgbW9kdWxlLCBmdW5jdGlvbiA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWNjZXNzIiwgZnVuY3Rpb24ubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3MiLCBtb2R1bGUubmFtZSkKKworICAgIGRlZiB0ZXN0X3BhcmFtKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICBwYXRoOiBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdwYXRoJywgcC5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocC5jb252ZXJ0ZXIsIGNsaW5pYy5pbnRfY29udmVydGVyKQorCisgICAgZGVmIHRlc3RfcGFyYW1fZGVmYXVsdChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBwLmRlZmF1bHQpCisKKyAgICBkZWYgdGVzdF9wYXJhbV93aXRoX2NvbnRpbnVhdGlvbnMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBmb2xsb3dfc3ltbGlua3M6IFxcXG4gICBib29sIFxcXG4gICA9XFxcbiAgICBUcnVlIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcC5kZWZhdWx0KQorCisgICAgZGVmIHRlc3RfcGFyYW1fZGVmYXVsdF9leHByZXNzaW9uKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgZm9sbG93X3N5bWxpbmtzOiBpbnQoY19kZWZhdWx0PSdNQVhTSVpFJykgPSBzeXMubWF4c2l6ZSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5tYXhzaXplLCBwLmRlZmF1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIk1BWFNJWkUiLCBwLmNvbnZlcnRlci5jX2RlZmF1bHQpCisKKyAgICAgICAgcyA9IHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgZm9sbG93X3N5bWxpbmtzOiBpbnQgPSBzeXMubWF4c2l6ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkVycm9yIG9uIGxpbmUgMDpcbldoZW4geW91IHNwZWNpZnkgYSBuYW1lZCBjb25zdGFudCAoJ3N5cy5tYXhzaXplJykgYXMgeW91ciBkZWZhdWx0IHZhbHVlLFxueW91IE1VU1Qgc3BlY2lmeSBhIHZhbGlkIGNfZGVmYXVsdC5cbiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9ub19kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3MuYWNjZXNzCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgIHNvbWV0aGluZ19lbHNlOiBzdHIgPSAnJyIiIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnVuY3Rpb24ucGFyYW1ldGVyc1snc29tZXRoaW5nX2Vsc2UnXS5jb252ZXJ0ZXIsIGNsaW5pYy5zdHJfY29udmVydGVyKQorCisgICAgZGVmIHRlc3RfcGFyYW1fZGVmYXVsdF9wYXJhbWV0ZXJzX291dF9vZl9vcmRlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgb3MKK29zLmFjY2VzcworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICBzb21ldGhpbmdfZWxzZTogc3RyIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICIiIkVycm9yIG9uIGxpbmUgMDoKK0Nhbid0IGhhdmUgYSBwYXJhbWV0ZXIgd2l0aG91dCBhIGRlZmF1bHQgKCdzb21ldGhpbmdfZWxzZScpCithZnRlciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCEKKyIiIikKKworICAgIGRlZiBkaXNhYmxlZF90ZXN0X2NvbnZlcnRlcl9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9MSkiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcC5jb252ZXJ0ZXIuYXJnc1snYWxsb3dfZmQnXSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0IGFzIG9zX3N0YXRfZm4KKworICAgcGF0aDogc3RyCisgICAgICAgUGF0aCB0byBiZSBleGFtaW5lZAorCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIiCitzdGF0KCRtb2R1bGUsIC8sIHBhdGgpCistLQorCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KKworICBwYXRoCisgICAgUGF0aCB0byBiZSBleGFtaW5lZAorIiIiLnN0cmlwKCksIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X3BhcmFtZXRlcnNfaW5fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgIHg6IGludAorICAgICBEb2N1bWVudGF0aW9uIGZvciB4LgorICB5OiBpbnQKKworVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZm9vLgorCitPa2F5LCB3ZSdyZSBkb25lIGhlcmUuCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIiCitiYXIoJG1vZHVsZSwgLywgeCwgeSkKKy0tCisKK1RoaXMgaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIGZvby4KKworICB4CisgICAgRG9jdW1lbnRhdGlvbiBmb3IgeC4KKworT2theSwgd2UncmUgZG9uZSBoZXJlLgorIiIiLnN0cmlwKCksIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9yZWdyZXNzaW9uX3NwZWNpYWxfY2hhcmFjdGVyX2luX3BhcmFtZXRlcl9jb2x1bW5fb2ZfZG9jc3RyaW5nX2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdAorICAgIHBhdGg6IHN0cgorVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgic3RhdCgkbW9kdWxlLCAvLCBwYXRoKVxuLS1cblxuVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEiLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9jX25hbWUoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5zdGF0IGFzIG9zX3N0YXRfZm4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvc19zdGF0X2ZuIiwgZnVuY3Rpb24uY19iYXNlbmFtZSkKKworICAgIGRlZiB0ZXN0X3JldHVybl9jb252ZXJ0ZXIoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5zdGF0IC0+IGludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmdW5jdGlvbi5yZXR1cm5fY29udmVydGVyLCBjbGluaWMuaW50X3JldHVybl9jb252ZXJ0ZXIpCisKKyAgICBkZWYgdGVzdF9zdGFyKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgKlxuICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFksIHAua2luZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwLmdyb3VwKQorCisgICAgZGVmIHRlc3RfZ3JvdXAoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIHdpbmRvd1xud2luZG93LmJvcmRlclxuIFtcbiBscyA6IGludFxuIF1cbiAvXG4iKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snbHMnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHAuZ3JvdXApCisKKyAgICBkZWYgdGVzdF9sZWZ0X2dyb3VwKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgY3Vyc2VzCitjdXJzZXMuYWRkY2gKKyAgIFsKKyAgIHk6IGludAorICAgICBZLWNvb3JkaW5hdGUuCisgICB4OiBpbnQKKyAgICAgWC1jb29yZGluYXRlLgorICAgXQorICAgY2g6IGNoYXIKKyAgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgIFsKKyAgIGF0dHI6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIF0KKyAgIC8KKyIiIikKKyAgICAgICAgZm9yIG5hbWUsIGdyb3VwIGluICgKKyAgICAgICAgICAgICgneScsIC0xKSwgKCd4JywgLTEpLAorICAgICAgICAgICAgKCdjaCcsIDApLAorICAgICAgICAgICAgKCdhdHRyJywgMSksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ncm91cCwgZ3JvdXApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2luZCwgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9uLmRvY3N0cmluZy5zdHJpcCgpLCAiIiIKK2FkZGNoKFt5LCB4LF0gY2gsIFthdHRyXSkKKworCisgIHkKKyAgICBZLWNvb3JkaW5hdGUuCisgIHgKKyAgICBYLWNvb3JkaW5hdGUuCisgIGNoCisgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgYXR0cgorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAiIiIuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9ncm91cHMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBjdXJzZXMKK2N1cnNlcy5pbWFnaW5hcnkKKyAgIFsKKyAgIFsKKyAgIHkxOiBpbnQKKyAgICAgWS1jb29yZGluYXRlLgorICAgeTI6IGludAorICAgICBZLWNvb3JkaW5hdGUuCisgICBdCisgICB4MTogaW50CisgICAgIFgtY29vcmRpbmF0ZS4KKyAgIHgyOiBpbnQKKyAgICAgWC1jb29yZGluYXRlLgorICAgXQorICAgY2g6IGNoYXIKKyAgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgIFsKKyAgIGF0dHIxOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyMjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjM6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIFsKKyAgIGF0dHI0OiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyNTogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjY6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIF0KKyAgIF0KKyAgIC8KKyIiIikKKyAgICAgICAgZm9yIG5hbWUsIGdyb3VwIGluICgKKyAgICAgICAgICAgICgneTEnLCAtMiksICgneTInLCAtMiksCisgICAgICAgICAgICAoJ3gxJywgLTEpLCAoJ3gyJywgLTEpLAorICAgICAgICAgICAgKCdjaCcsIDApLAorICAgICAgICAgICAgKCdhdHRyMScsIDEpLCAoJ2F0dHIyJywgMSksICgnYXR0cjMnLCAxKSwKKyAgICAgICAgICAgICgnYXR0cjQnLCAyKSwgKCdhdHRyNScsIDIpLCAoJ2F0dHI2JywgMiksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ncm91cCwgZ3JvdXApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2luZCwgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb24uZG9jc3RyaW5nLnN0cmlwKCksICIiIgoraW1hZ2luYXJ5KFtbeTEsIHkyLF0geDEsIHgyLF0gY2gsIFthdHRyMSwgYXR0cjIsIGF0dHIzLCBbYXR0cjQsIGF0dHI1LAorICAgICAgICAgIGF0dHI2XV0pCisKKworICB5MQorICAgIFktY29vcmRpbmF0ZS4KKyAgeTIKKyAgICBZLWNvb3JkaW5hdGUuCisgIHgxCisgICAgWC1jb29yZGluYXRlLgorICB4MgorICAgIFgtY29vcmRpbmF0ZS4KKyAgY2gKKyAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICBhdHRyMQorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHIyCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjMKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyNAorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHI1CisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjYKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICIiIi5zdHJpcCgpKQorCisgICAgZGVmIHBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKHNlbGYsIHMpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uKHMpCisgICAgICAgIHJldHVybiBzdGRvdXQuZ2V0dmFsdWUoKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fdHdvX3RvcF9ncm91cHNfb25fbGVmdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28udHdvX3RvcF9ncm91cHNfb25fbGVmdAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICBwYXJhbTogaW50CisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywKKyAgICAgICAgICAgICgnRXJyb3Igb24gbGluZSAwOlxuJworICAgICAgICAgICAgJ0Z1bmN0aW9uIHR3b190b3BfZ3JvdXBzX29uX2xlZnQgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlIDIuYilcbicpKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fdHdvX3RvcF9ncm91cHNfb25fcmlnaHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28udHdvX3RvcF9ncm91cHNfb25fcmlnaHQKKyAgICBwYXJhbTogaW50CisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBbCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fcGFyYW1ldGVyX2FmdGVyX2dyb3VwX29uX3JpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLnBhcmFtZXRlcl9hZnRlcl9ncm91cF9vbl9yaWdodAorICAgIHBhcmFtOiBpbnQKKyAgICBbCisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19ncm91cF9hZnRlcl9wYXJhbWV0ZXJfb25fbGVmdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5ncm91cF9hZnRlcl9wYXJhbWV0ZXJfb25fbGVmdAorICAgIFsKKyAgICBncm91cDIgOiBpbnQKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIF0KKyAgICBwYXJhbTogaW50CisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19lbXB0eV9ncm91cF9vbl9sZWZ0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmVtcHR5X2dyb3VwCisgICAgWworICAgIFsKKyAgICBdCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgIHBhcmFtOiBpbnQKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX2VtcHR5X2dyb3VwX29uX3JpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmVtcHR5X2dyb3VwCisgICAgcGFyYW06IGludAorICAgIFsKKyAgICBbCisgICAgXQorICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X25vX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKworRG9jc3RyaW5nCisKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYmFyKCRtb2R1bGUsIC8pXG4tLVxuXG5Eb2NzdHJpbmciLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKSAjIHNlbGYhCisKKyAgICBkZWYgdGVzdF9pbml0X3dpdGhfbm9fcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGZvbworY2xhc3MgZm9vLkJhciAidW51c2VkIiAibm90bmVlZGVkIgorZm9vLkJhci5fX2luaXRfXworCitEb2NzdHJpbmcKKworIiIiLCBzaWduYXR1cmVzX2luX2Jsb2NrPTMsIGZ1bmN0aW9uX2luZGV4PTIpCisgICAgICAgICMgc2VsZiBpcyBub3QgaW4gdGhlIHNpZ25hdHVyZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJCYXIoKVxuLS1cblxuRG9jc3RyaW5nIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorICAgICAgICAjIGJ1dCBpdCAqaXMqIGEgcGFyYW1ldGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9tb2R1bGVfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIgPT4gaW50CisgICAgLworIiIiKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9jX2Jhc2VuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhciBhcyA5MzUKKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc3RhcihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCisgICAgKgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhvdXRfaW5pdGlhbF9wYXJhbWV0ZXJzX29yX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aG91dF9pbml0aWFsX3BhcmFtZXRlcnNfd2l0aF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgKgorRG9jc3RyaW5nIGhlcmUuCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aF9pbml0aWFsX3BhcmFtZXRlcnNfd2l0aG91dF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgdGhpczogaW50CisgICAgKgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhfaW5pdGlhbF9wYXJhbWV0ZXJzX2FuZF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgdGhpczogaW50CisgICAgKgorRG9jc3RyaW5nLgorIiIiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3NsYXNoKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIC8KKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9taXhfc3Rhcl9hbmRfc2xhc2goc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICB4OiBpbnQKKyAgIHk6IGludAorICAgKgorICAgejogaW50CisgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX25vdF9wZXJtaXR0ZWRfYWZ0ZXJfc2xhc2hfZm9yX25vdyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAvCisgICAgeDogaW50CisiIiIpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9ub3RfYXRfY29sdW1uXzAoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKKyAgbW9kdWxlIGZvbworICBmb28uYmFyCisgICAgeDogaW50CisgICAgICBOZXN0ZWQgZG9jc3RyaW5nIGhlcmUsIGdvZXRoLgorICAgICoKKyAgICB5OiBzdHIKKyAgTm90IGF0IGNvbHVtbiAwIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorYmFyKCRtb2R1bGUsIC8sIHgsICosIHkpCistLQorCitOb3QgYXQgY29sdW1uIDAhCisKKyAgeAorICAgIE5lc3RlZCBkb2NzdHJpbmcgaGVyZSwgZ29ldGguCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX3JlZ3Jlc3Npb25fc3BlY2lhbF9jaGFyYWN0ZXJfaW5fcGFyYW1ldGVyX2NvbHVtbl9vZl9kb2NzdHJpbmdfZmlyc3RfbGluZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0CisgICAgcGF0aDogc3RyCitUaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJzdGF0KCRtb2R1bGUsIC8sIHBhdGgpXG4tLVxuXG5UaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljISIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X2RpcmVjdGl2ZShzZWxmKToKKyAgICAgICAgYyA9IEZha2VDbGluaWMoKQorICAgICAgICBwYXJzZXIgPSBEU0xQYXJzZXIoYykKKyAgICAgICAgcGFyc2VyLmZsYWcgPSBGYWxzZQorICAgICAgICBwYXJzZXIuZGlyZWN0aXZlc1snc2V0ZmxhZyddID0gbGFtYmRhIDogc2V0YXR0cihwYXJzZXIsICdmbGFnJywgVHJ1ZSkKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2soInNldGZsYWciKQorICAgICAgICBwYXJzZXIucGFyc2UoYmxvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJzZXIuZmxhZykKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9jb252ZXJ0ZXJzKHNlbGYpOgorICAgICAgICBibG9jayA9IHNlbGYucGFyc2UoJ21vZHVsZSBvc1xub3MuYWNjZXNzXG4gICBwYXRoOiAicyInKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoKGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXSkuY29udmVydGVyLCBjbGluaWMuc3RyX2NvbnZlcnRlcikKKworICAgIGRlZiBwYXJzZShzZWxmLCB0ZXh0KToKKyAgICAgICAgYyA9IEZha2VDbGluaWMoKQorICAgICAgICBwYXJzZXIgPSBEU0xQYXJzZXIoYykKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2sodGV4dCkKKyAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICByZXR1cm4gYmxvY2sKKworICAgIGRlZiBwYXJzZV9mdW5jdGlvbihzZWxmLCB0ZXh0LCBzaWduYXR1cmVzX2luX2Jsb2NrPTIsIGZ1bmN0aW9uX2luZGV4PTEpOgorICAgICAgICBibG9jayA9IHNlbGYucGFyc2UodGV4dCkKKyAgICAgICAgcyA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpZ25hdHVyZXNfaW5fYmxvY2spCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNbMF0sIGNsaW5pYy5Nb2R1bGUpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNbZnVuY3Rpb25faW5kZXhdLCBjbGluaWMuRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBzW2Z1bmN0aW9uX2luZGV4XQorCisgICAgZGVmIHRlc3Rfc2NhZmZvbGRpbmcoc2VsZik6CisgICAgICAgICMgdGVzdCByZXByIG9uIHNwZWNpYWwgdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjbGluaWMudW5zcGVjaWZpZWQpLCAnPFVuc3BlY2lmaWVkPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjbGluaWMuTlVMTCksICc8TnVsbD4nKQorCisgICAgICAgICMgdGVzdCB0aGF0IGZhaWwgZmFpbHMKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgY2xpbmljLmZhaWwoJ1RoZSBpZ2xvb3MgYXJlIG1lbHRpbmchJywgZmlsZW5hbWU9J2Nsb3duLnR4dCcsIGxpbmVfbnVtYmVyPTY5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnRXJyb3IgaW4gZmlsZSAiY2xvd24udHh0IiBvbiBsaW5lIDY5OlxuVGhlIGlnbG9vcyBhcmUgbWVsdGluZyFcbicpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL2NsaW5pYy9jcHAucHkgYi9Ub29scy9jbGluaWMvY3BwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTk1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jbGluaWMvY3BwLnB5CkBAIC0wLDAgKzEsMTkxIEBACitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKKworZGVmIG5lZ2F0ZShjb25kaXRpb24pOgorICAgICIiIgorICAgIFJldHVybnMgYSBDUFAgY29uZGl0aW9uYWwgdGhhdCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIGNvbmRpdGlvbmFsIHBhc3NlZCBpbi4KKyAgICAiIiIKKyAgICBpZiBjb25kaXRpb24uc3RhcnRzd2l0aCgnIScpOgorICAgICAgICByZXR1cm4gY29uZGl0aW9uWzE6XQorICAgIHJldHVybiAiISIgKyBjb25kaXRpb24KKworY2xhc3MgTW9uaXRvcjoKKyAgICAiIiIKKyAgICBBIHNpbXBsZSBDIHByZXByb2Nlc3NvciB0aGF0IHNjYW5zIEMgc291cmNlIGFuZCBjb21wdXRlcywgbGluZSBieSBsaW5lLAorICAgIHdoYXQgdGhlIGN1cnJlbnQgQyBwcmVwcm9jZXNzb3IgI2lmIHN0YXRlIGlzLgorCisgICAgRG9lc24ndCBoYW5kbGUgZXZlcnl0aGluZy0tZm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIC8qIGluc2lkZSBhIEMgc3RyaW5nLAorICAgIHdpdGhvdXQgYSBtYXRjaGluZyAqLyAoYWxzbyBpbnNpZGUgYSBDIHN0cmluZyksIG9yIHdpdGggYSAqLyBpbnNpZGUgYSBDCisgICAgc3RyaW5nIGJ1dCBvbiBhbm90aGVyIGxpbmUgYW5kIHdpdGggcHJlcHJvY2Vzc29yIG1hY3JvcyBpbiBiZXR3ZWVuLi4uCisgICAgdGhlIHBhcnNlciB3aWxsIGdldCBsb3N0LgorCisgICAgQW55d2F5IHRoaXMgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gd29yayB3ZWxsIGVub3VnaCBmb3IgdGhlIENQeXRob24gc291cmNlcy4KKyAgICAiIiIKKworICAgIGlzX2Ffc2ltcGxlX2RlZmluZWQgPSByZS5jb21waWxlKHInXmRlZmluZWRccypcKFxzKltBLVphLXowLTlfXStccypcKSQnKS5tYXRjaAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUsICosIHZlcmJvc2U9RmFsc2UpOgorICAgICAgICBzZWxmLnN0YWNrID0gW10KKyAgICAgICAgc2VsZi5pbl9jb21tZW50ID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb250aW51YXRpb24gPSBOb25lCisgICAgICAgIHNlbGYubGluZV9udW1iZXIgPSAwCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnJy5qb2luKCgKKyAgICAgICAgICAgICc8TW9uaXRvciAnLAorICAgICAgICAgICAgc3RyKGlkKHNlbGYpKSwKKyAgICAgICAgICAgICIgbGluZT0iLCBzdHIoc2VsZi5saW5lX251bWJlciksCisgICAgICAgICAgICAiIGNvbmRpdGlvbj0iLCByZXByKHNlbGYuY29uZGl0aW9uKCkpLAorICAgICAgICAgICAgIj4iKSkKKworICAgIGRlZiBzdGF0dXMoc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZi5saW5lX251bWJlcikucmp1c3QoNCkgKyAiOiAiICsgc2VsZi5jb25kaXRpb24oKQorCisgICAgZGVmIGNvbmRpdGlvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgcHJlcHJvY2Vzc29yIHN0YXRlLCBhcyBhIHNpbmdsZSAjaWYgY29uZGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIgJiYgIi5qb2luKGNvbmRpdGlvbiBmb3IgdG9rZW4sIGNvbmRpdGlvbiBpbiBzZWxmLnN0YWNrKQorCisgICAgZGVmIGZhaWwoc2VsZiwgKmEpOgorICAgICAgICBpZiBzZWxmLmZpbGVuYW1lOgorICAgICAgICAgICAgZmlsZW5hbWUgPSAiICIgKyBzZWxmLmZpbGVuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlbmFtZSA9ICcnCisgICAgICAgIHByaW50KCJFcnJvciBhdCIgKyBmaWxlbmFtZSwgImxpbmUiLCBzZWxmLmxpbmVfbnVtYmVyLCAiOiIpCisgICAgICAgIHByaW50KCIgICAiLCAnICcuam9pbihzdHIoeCkgZm9yIHggaW4gYSkpCisgICAgICAgIHN5cy5leGl0KC0xKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0YWNrOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFbmRlZCBmaWxlIHdoaWxlIHN0aWxsIGluIGEgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsIGJsb2NrISIpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgcyk6CisgICAgICAgIGZvciBsaW5lIGluIHMuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBzZWxmLndyaXRlbGluZShsaW5lKQorCisgICAgZGVmIHdyaXRlbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgc2VsZi5saW5lX251bWJlciArPSAxCisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKworICAgICAgICBkZWYgcG9wX3N0YWNrKCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zdGFjazoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiMiICsgdG9rZW4gKyAiIHdpdGhvdXQgbWF0Y2hpbmcgI2lmIC8gI2lmZGVmIC8gI2lmbmRlZiEiKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RhY2sucG9wKCkKKworICAgICAgICBpZiBzZWxmLmNvbnRpbnVhdGlvbjoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmNvbnRpbnVhdGlvbiArIGxpbmUKKyAgICAgICAgICAgIHNlbGYuY29udGludWF0aW9uID0gTm9uZQorCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbGluZS5lbmRzd2l0aCgnXFwnKToKKyAgICAgICAgICAgIHNlbGYuY29udGludWF0aW9uID0gbGluZVs6LTFdLnJzdHJpcCgpICsgIiAiCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHdlIGhhdmUgdG8gaWdub3JlIHByZXByb2Nlc3NvciBjb21tYW5kcyBpbnNpZGUgY29tbWVudHMKKyAgICAgICAgIworICAgICAgICAjIHdlIGFsc28gaGF2ZSB0byBoYW5kbGUgdGhpczoKKyAgICAgICAgIyAgICAgLyogc3RhcnQKKyAgICAgICAgIyAgICAgLi4uCisgICAgICAgICMgICAgICovICAgLyogICAgPC0tIHRyaWNreSEKKyAgICAgICAgIyAgICAgLi4uCisgICAgICAgICMgICAgICovCisgICAgICAgICMgYW5kIHRoaXM6CisgICAgICAgICMgICAgIC8qIHN0YXJ0CisgICAgICAgICMgICAgIC4uLgorICAgICAgICAjICAgICAqLyAgIC8qIGFsc28gdHJpY2t5ISAqLworICAgICAgICBpZiBzZWxmLmluX2NvbW1lbnQ6CisgICAgICAgICAgICBpZiAnKi8nIGluIGxpbmU6CisgICAgICAgICAgICAgICAgIyBzbmlwIG91dCB0aGUgY29tbWVudCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBHQ0MgYWxsb3dzCisgICAgICAgICAgICAgICAgIyAgICAvKiBjb21tZW50CisgICAgICAgICAgICAgICAgIyAgICAqLyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAgICAgICAgICAgICAjIG1heWJlIG90aGVyIGNvbXBpbGVycyB0b28/CisgICAgICAgICAgICAgICAgXywgXywgbGluZSA9IGxpbmUucGFydGl0aW9uKCcqLycpCisgICAgICAgICAgICAgICAgc2VsZi5pbl9jb21tZW50ID0gRmFsc2UKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgJy8qJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuaW5fY29tbWVudDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJOZXN0ZWQgYmxvY2sgY29tbWVudCEiKQorCisgICAgICAgICAgICAgICAgYmVmb3JlLCBfLCByZW1haW5kZXIgPSBsaW5lLnBhcnRpdGlvbignLyonKQorICAgICAgICAgICAgICAgIGNvbW1lbnQsIGNvbW1lbnRfZW5kcywgYWZ0ZXIgPSByZW1haW5kZXIucGFydGl0aW9uKCcqLycpCisgICAgICAgICAgICAgICAgaWYgY29tbWVudF9lbmRzOgorICAgICAgICAgICAgICAgICAgICAjIHNuaXAgb3V0IHRoZSBjb21tZW50CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBiZWZvcmUucnN0cmlwKCkgKyAnICcgKyBhZnRlci5sc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgY29tbWVudCBjb250aW51ZXMgdG8gZW9sCisgICAgICAgICAgICAgICAgc2VsZi5pbl9jb21tZW50ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxpbmUgPSBiZWZvcmUucnN0cmlwKCkKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgLy8gY29tbWVudHMKKyAgICAgICAgIyAoYnV0IGJsb2NrIGNvbW1lbnRzIHRha2UgcHJlY2VkZW5jZSkKKyAgICAgICAgYmVmb3JlLCBsaW5lX2NvbW1lbnQsIGNvbW1lbnQgPSBsaW5lLnBhcnRpdGlvbignLy8nKQorICAgICAgICBpZiBsaW5lX2NvbW1lbnQ6CisgICAgICAgICAgICBsaW5lID0gYmVmb3JlLnJzdHJpcCgpCisKKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbGluZSA9IGxpbmVbMTpdLmxzdHJpcCgpCisgICAgICAgIGFzc2VydCBsaW5lCisKKyAgICAgICAgZmllbGRzID0gbGluZS5zcGxpdCgpCisgICAgICAgIHRva2VuID0gZmllbGRzWzBdLmxvd2VyKCkKKyAgICAgICAgY29uZGl0aW9uID0gJyAnLmpvaW4oZmllbGRzWzE6XSkuc3RyaXAoKQorCisgICAgICAgIGlmX3Rva2VucyA9IHsnaWYnLCAnaWZkZWYnLCAnaWZuZGVmJ30KKyAgICAgICAgYWxsX3Rva2VucyA9IGlmX3Rva2VucyB8IHsnZWxpZicsICdlbHNlJywgJ2VuZGlmJ30KKworICAgICAgICBpZiB0b2tlbiBub3QgaW4gYWxsX3Rva2VuczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgY2hlYXQgYSBsaXR0bGUgaGVyZSwgdG8gcmV1c2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGlmCisgICAgICAgIGlmIHRva2VuID09ICdlbGlmJzoKKyAgICAgICAgICAgIHBvcF9zdGFjaygpCisgICAgICAgICAgICB0b2tlbiA9ICdpZicKKworICAgICAgICBpZiB0b2tlbiBpbiBpZl90b2tlbnM6CisgICAgICAgICAgICBpZiBub3QgY29uZGl0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiSW52YWxpZCBmb3JtYXQgZm9yICMiICsgdG9rZW4gKyAiIGxpbmU6IG5vIGFyZ3VtZW50ISIpCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAnaWYnOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2Ffc2ltcGxlX2RlZmluZWQoY29uZGl0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gIigiICsgY29uZGl0aW9uICsgIikiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpZWxkcyA9IGNvbmRpdGlvbi5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKGZpZWxkcykgIT0gMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnZhbGlkIGZvcm1hdCBmb3IgIyIgKyB0b2tlbiArICIgbGluZTogc2hvdWxkIGJlIGV4YWN0bHkgb25lIGFyZ3VtZW50ISIpCisgICAgICAgICAgICAgICAgc3ltYm9sID0gZmllbGRzWzBdCisgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gJ2RlZmluZWQoJyArIHN5bWJvbCArICcpJworICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICdpZm5kZWYnOgorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSAnIScgKyBjb25kaXRpb24KKworICAgICAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoKCJpZiIsIGNvbmRpdGlvbikpCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5zdGF0dXMoKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHByZXZpb3VzX3Rva2VuLCBwcmV2aW91c19jb25kaXRpb24gPSBwb3Bfc3RhY2soKQorCisgICAgICAgIGlmIHRva2VuID09ICdlbHNlJzoKKyAgICAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKCgnZWxzZScsIG5lZ2F0ZShwcmV2aW91c19jb25kaXRpb24pKSkKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAnZW5kaWYnOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludChzZWxmLnN0YXR1cygpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZvciBmaWxlbmFtZSBpbiBzeXMuYXJndlsxOl06CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJ0IikgYXMgZjoKKyAgICAgICAgICAgIGNwcCA9IE1vbml0b3IoZmlsZW5hbWUsIHZlcmJvc2U9VHJ1ZSkKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KGZpbGVuYW1lKQorICAgICAgICAgICAgZm9yIGxpbmVfbnVtYmVyLCBsaW5lIGluIGVudW1lcmF0ZShmLnJlYWQoKS5zcGxpdCgnXG4nKSwgMSk6CisgICAgICAgICAgICAgICAgY3BwLndyaXRlbGluZShsaW5lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2JrZmlsZS5weSBiL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKaW5kZXggMGU4OTVmMi4uNTgyNDZmYSAxMDA2NDQKLS0tIGEvVG9vbHMvZnJlZXplL2JrZmlsZS5weQorKysgYi9Ub29scy9mcmVlemUvYmtmaWxlLnB5CkBAIC03LDExICs3LDExIEBACiAgICAgICAgIHNlbGYuX19iYWNrdXAgPSBmaWxlICsgJ34nCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9fYmFja3VwKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsZSwgc2VsZi5fX2JhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuX19iYWNrdXAgPSBOb25lCiAgICAgICAgIHNlbGYuX19maWxlID0gX29yaWdfb3BlbihmaWxlLCBtb2RlLCBidWZzaXplKQogICAgICAgICBzZWxmLmNsb3NlZCA9IHNlbGYuX19maWxlLmNsb3NlZApkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weSBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKaW5kZXggYTQxMjY3YS4uZTBjNmMyYyAxMDA3NTUKLS0tIGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQorKysgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAjIGRlZmF1bHQgdGhlIGV4Y2x1ZGUgbGlzdCBmb3IgZWFjaCBwbGF0Zm9ybQogICAgIGlmIHdpbjogZXhjbHVkZSA9IGV4Y2x1ZGUgKyBbCiAgICAgICAgICdkb3MnLCAnZG9zcGF0aCcsICdtYWMnLCAnbWFjcGF0aCcsICdtYWNmcycsICdNQUNGUycsICdwb3NpeCcsCi0gICAgICAgICdvczInLCAnY2UnLAorICAgICAgICAnY2UnLAogICAgICAgICBdCiAKICAgICBmYWlsX2ltcG9ydCA9IGV4Y2x1ZGVbOl0KQEAgLTIxOSw2ICsyMTksNyBAQAogCiAgICAgIyBsb2NhdGlvbnMgZGVyaXZlZCBmcm9tIG9wdGlvbnMKICAgICB2ZXJzaW9uID0gc3lzLnZlcnNpb25bOjNdCisgICAgZmxhZ2dlZF92ZXJzaW9uID0gdmVyc2lvbiArIHN5cy5hYmlmbGFncwogICAgIGlmIHdpbjoKICAgICAgICAgZXh0ZW5zaW9uc19jID0gJ2Zyb3plbl9leHRlbnNpb25zLmMnCiAgICAgaWYgaXNob21lOgpAQCAtMjMzLDEwICsyMzQsMTEgQEAKICAgICAgICAgICAgIGZyb3plbmRsbG1haW5fYyA9IG9zLnBhdGguam9pbihleGVjX3ByZWZpeCwgJ1BjXFxmcm96ZW5fZGxsbWFpbi5jJykKICAgICBlbHNlOgogICAgICAgICBiaW5saWIgPSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliJywgJ3B5dGhvbiVzJyAlIHZlcnNpb24sICdjb25maWcnKQotICAgICAgICBpbmNsZGlyID0gb3MucGF0aC5qb2luKHByZWZpeCwgJ2luY2x1ZGUnLCAncHl0aG9uJXMnICUgdmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWInLCAncHl0aG9uJXMnICUgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWctJXMnICUgZmxhZ2dlZF92ZXJzaW9uKQorICAgICAgICBpbmNsZGlyID0gb3MucGF0aC5qb2luKHByZWZpeCwgJ2luY2x1ZGUnLCAncHl0aG9uJXMnICUgZmxhZ2dlZF92ZXJzaW9uKQogICAgICAgICBjb25maWdfaF9kaXIgPSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsICdpbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24lcycgJSB2ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbiVzJyAlIGZsYWdnZWRfdmVyc2lvbikKICAgICAgICAgY29uZmlnX2NfaW4gPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnY29uZmlnLmMuaW4nKQogICAgICAgICBmcm96ZW5tYWluX2MgPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnZnJvemVubWFpbi5jJykKICAgICAgICAgbWFrZWZpbGVfaW4gPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnTWFrZWZpbGUnKQpAQCAtMzExLDcgKzMxMyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKG9kaXIpCiAgICAgICAgICAgICBwcmludCgiQ3JlYXRlZCBvdXRwdXQgZGlyZWN0b3J5Iiwgb2RpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgdXNhZ2UoJyVzOiBta2RpciBmYWlsZWQgKCVzKScgJSAob2Rpciwgc3RyKG1zZykpKQogICAgIGJhc2UgPSAnJwogICAgIGlmIG9kaXI6CkBAIC0zNjMsNiArMzY1LDEwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtZi5sb2FkX2ZpbGUobW9kKQogCisgICAgIyBBbGlhcyAiaW1wb3J0bGliLl9ib290c3RyYXAiIHRvICJfZnJvemVuX2ltcG9ydGxpYiIgc28gdGhhdCB0aGUKKyAgICAjIGltcG9ydCBtYWNoaW5lcnkgY2FuIGJvb3RzdHJhcC4KKyAgICBtZi5tb2R1bGVzWyJfZnJvemVuX2ltcG9ydGxpYiJdID0gbWYubW9kdWxlc1siaW1wb3J0bGliLl9ib290c3RyYXAiXQorCiAgICAgIyBBZGQgdGhlIG1haW4gc2NyaXB0IGFzIGVpdGhlciBfX21haW5fXywgb3IgdGhlIGFjdHVhbCBtb2R1bGUgbmFtZS4KICAgICBpZiBweXRob25fZW50cnlfaXNfbWFpbjoKICAgICAgICAgbWYucnVuX3NjcmlwdChzY3JpcHRmaWxlKQpAQCAtNDU1LDcgKzQ2MSw3IEBACiAKICAgICBjZmxhZ3MgPSBbJyQoT1BUKSddCiAgICAgY3BwZmxhZ3MgPSBkZWZpbmVzICsgaW5jbHVkZXMKLSAgICBsaWJzID0gW29zLnBhdGguam9pbihiaW5saWIsICdsaWJweXRob24kKFZFUlNJT04pLmEnKV0KKyAgICBsaWJzID0gW29zLnBhdGguam9pbihiaW5saWIsICckKExETElCUkFSWSknKV0KIAogICAgIHNvbWV2YXJzID0ge30KICAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYWtlZmlsZV9pbik6CmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CmluZGV4IDAxODk5MmMuLmZhYmFhY2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CkBAIC0zLDcgKzMsNyBAQAogCiAjIFdyaXRlIHRoZSBjb25maWcuYyBmaWxlCiAKLW5ldmVyID0gWydtYXJzaGFsJywgJ2ltcCcsICdfYXN0JywgJ19fbWFpbl9fJywgJ2J1aWx0aW5zJywKK25ldmVyID0gWydtYXJzaGFsJywgJ19pbXAnLCAnX2FzdCcsICdfX21haW5fXycsICdidWlsdGlucycsCiAgICAgICAgICAnc3lzJywgJ2djJywgJ193YXJuaW5ncyddCiAKIGRlZiBtYWtlY29uZmlnKGluZnAsIG91dGZwLCBtb2R1bGVzLCB3aXRoX2lmZGVmPTApOgpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL3Rlc3QvTWFrZWZpbGUgYi9Ub29scy9mcmVlemUvdGVzdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc5ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZnJlZXplL3Rlc3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIyBNYWtlZmlsZSB0byB0ZXN0IGZyZWV6ZQorIyBzZXQgUFlUSE9OIHRvIHBhdGggb2YgUHl0aG9uIGludGVycHJldGVyIHRvIHRlc3QKK1BZVEhPTj1weXRob24KKyMgc2V0IE9VVERJUiB0byB0aGUgdGVtcCBkaXJlY3RvcnkgZm9yIGZyZWV6ZQorT1VURElSPW91dGRpcgorCit0ZXN0OgorCSQoUFlUSE9OKSAuLi9mcmVlemUucHkgLW8gJChPVVRESVIpIG9rLnB5CisJbWFrZSAtQyAkKE9VVERJUikKKwkkKE9VVERJUikvb2sKKwkKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS90ZXN0L29rLnB5IGIvVG9vbHMvZnJlZXplL3Rlc3Qvb2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1ZTBiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2ZyZWV6ZS90ZXN0L29rLnB5CkBAIC0wLDAgKzEsMiBAQAoraW1wb3J0IHN5cworc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkgYi9Ub29scy9nZGIvbGlicHl0aG9uLnB5CmluZGV4IDFjMmMzY2IuLjJhZDIyZTIgMTAwNzU1Ci0tLSBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkKKysrIGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQpAQCAtOTM5LDIxICs5MzksMjYgQEAKIGNsYXNzIFB5U2V0T2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKICAgICBfdHlwZW5hbWUgPSAnUHlTZXRPYmplY3QnCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2R1bW15X2tleShzZWxmKToKKyAgICAgICAgcmV0dXJuIGdkYi5sb29rdXBfZ2xvYmFsX3N5bWJvbCgnX1B5U2V0X0R1bW15JykudmFsdWUoKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBkdW1teV9wdHIgPSBzZWxmLl9kdW1teV9rZXkoKQorICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykgKyAxKToKKyAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KKyAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQorICAgICAgICAgICAgaWYga2V5ICE9IDAgYW5kIGtleSAhPSBkdW1teV9wdHI6CisgICAgICAgICAgICAgICAgeWllbGQgUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KQorCiAgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgogICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CiAgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgnJXMoLi4uKScgJSBzZWxmLnNhZmVfdHBfbmFtZSgpKQogICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKIAotICAgICAgICBtZW1iZXJzID0gW10KLSAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCi0gICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpKzEpOgotICAgICAgICAgICAgc2V0ZW50cnkgPSB0YWJsZVtpXQotICAgICAgICAgICAga2V5ID0gc2V0ZW50cnlbJ2tleSddCi0gICAgICAgICAgICBpZiBrZXkgIT0gMDoKLSAgICAgICAgICAgICAgICBrZXlfcHJveHkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpLnByb3h5dmFsKHZpc2l0ZWQpCi0gICAgICAgICAgICAgICAgaWYga2V5X3Byb3h5ICE9ICc8ZHVtbXkga2V5Pic6Ci0gICAgICAgICAgICAgICAgICAgIG1lbWJlcnMuYXBwZW5kKGtleV9wcm94eSkKKyAgICAgICAgbWVtYmVycyA9IChrZXkucHJveHl2YWwodmlzaXRlZCkgZm9yIGtleSBpbiBzZWxmKQogICAgICAgICBpZiBzZWxmLnNhZmVfdHBfbmFtZSgpID09ICdmcm96ZW5zZXQnOgogICAgICAgICAgICAgcmV0dXJuIGZyb3plbnNldChtZW1iZXJzKQogICAgICAgICBlbHNlOgpAQCAtOTgyLDE4ICs5ODcsMTEgQEAKIAogICAgICAgICBvdXQud3JpdGUoJ3snKQogICAgICAgICBmaXJzdCA9IFRydWUKLSAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCi0gICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpKzEpOgotICAgICAgICAgICAgc2V0ZW50cnkgPSB0YWJsZVtpXQotICAgICAgICAgICAga2V5ID0gc2V0ZW50cnlbJ2tleSddCi0gICAgICAgICAgICBpZiBrZXkgIT0gMDoKLSAgICAgICAgICAgICAgICBweW9wX2tleSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkKLSAgICAgICAgICAgICAgICBrZXlfcHJveHkgPSBweW9wX2tleS5wcm94eXZhbCh2aXNpdGVkKSAjIEZJWE1FIQotICAgICAgICAgICAgICAgIGlmIGtleV9wcm94eSAhPSAnPGR1bW15IGtleT4nOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBweW9wX2tleS53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAga2V5LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQogICAgICAgICBvdXQud3JpdGUoJ30nKQogCiAgICAgICAgIGlmIHRwX25hbWUgIT0gJ3NldCc6CkBAIC0xMTc3LDcgKzExNzUsOSBAQAogICAgICAgICAjIENvbnZlcnQgdGhlIGludCBjb2RlIHBvaW50cyB0byB1bmljb2RlIGNoYXJhY3RlcnMsIGFuZCBnZW5lcmF0ZSBhCiAgICAgICAgICMgbG9jYWwgdW5pY29kZSBpbnN0YW5jZS4KICAgICAgICAgIyBUaGlzIHNwbGl0cyBzdXJyb2dhdGUgcGFpcnMgaWYgc2l6ZW9mKFB5X1VOSUNPREUpIGlzIDIgaGVyZSAoaW4gZ2RiKS4KLSAgICAgICAgcmVzdWx0ID0gdScnLmpvaW4oW191bmljaHIodWNzKSBmb3IgdWNzIGluIFB5X1VOSUNPREVzXSkKKyAgICAgICAgcmVzdWx0ID0gdScnLmpvaW4oWworICAgICAgICAgICAgKF91bmljaHIodWNzKSBpZiB1Y3MgPD0gMHgxMGZmZmYgZWxzZSAnXHVmZmZkJykKKyAgICAgICAgICAgIGZvciB1Y3MgaW4gUHlfVU5JQ09ERXNdKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkgYi9Ub29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weQppbmRleCA4YjkyYWUxLi4xMDg4N2NlIDEwMDc1NQotLS0gYS9Ub29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weQorKysgYi9Ub29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weQpAQCAtNyw2ICs3LDcgQEAKIAogIiIiCiBpbXBvcnQgbG9jYWxlCitpbXBvcnQgc3lzCiAKICMgTG9jYXRpb24gb2YgdGhlIGFsaWFzIGZpbGUKIExPQ0FMRV9BTElBUyA9ICcvdXNyL3NoYXJlL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzJwpAQCAtNjUsOSArNjYsMzUgQEAKICAgICAgICAgICAgICAgICAgIChrLCBvbGRkYXRhW2tdLCBkYXRhW2tdKSkKICAgICAgICAgIyBBZGRpdGlvbnMgYXJlIG5vdCBtZW50aW9uZWQKIAorZGVmIG9wdGltaXplKGRhdGEpOgorICAgIGxvY2FsZV9hbGlhcyA9IGxvY2FsZS5sb2NhbGVfYWxpYXMKKyAgICBsb2NhbGUubG9jYWxlX2FsaWFzID0gZGF0YS5jb3B5KCkKKyAgICBmb3IgaywgdiBpbiBkYXRhLml0ZW1zKCk6CisgICAgICAgIGRlbCBsb2NhbGUubG9jYWxlX2FsaWFzW2tdCisgICAgICAgIGlmIGxvY2FsZS5ub3JtYWxpemUoaykgIT0gdjoKKyAgICAgICAgICAgIGxvY2FsZS5sb2NhbGVfYWxpYXNba10gPSB2CisgICAgbmV3ZGF0YSA9IGxvY2FsZS5sb2NhbGVfYWxpYXMKKyAgICBlcnJvcnMgPSBjaGVjayhkYXRhKQorICAgIGxvY2FsZS5sb2NhbGVfYWxpYXMgPSBsb2NhbGVfYWxpYXMKKyAgICBpZiBlcnJvcnM6CisgICAgICAgIHN5cy5leGl0KDEpCisgICAgcmV0dXJuIG5ld2RhdGEKKworZGVmIGNoZWNrKGRhdGEpOgorICAgICMgQ2hlY2sgdGhhdCBhbGwgYWxpYXMgZGVmaW5pdGlvbnMgZnJvbSB0aGUgWDExIGZpbGUKKyAgICAjIGFyZSBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGNvcnJlY3QgYWxpYXMgbG9jYWxlcy4KKyAgICBlcnJvcnMgPSAwCisgICAgZm9yIGssIHYgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICBpZiBsb2NhbGUubm9ybWFsaXplKGspICE9IHY6CisgICAgICAgICAgICBwcmludCgnRVJST1I6ICVhIC0+ICVhICE9ICVhJyAlIChrLCBsb2NhbGUubm9ybWFsaXplKGspLCB2KSwKKyAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIGVycm9ycyArPSAxCisgICAgcmV0dXJuIGVycm9ycworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGRhdGEgPSBsb2NhbGUubG9jYWxlX2FsaWFzLmNvcHkoKQogICAgIGRhdGEudXBkYXRlKHBhcnNlKExPQ0FMRV9BTElBUykpCisgICAgZGF0YSA9IG9wdGltaXplKGRhdGEpCiAgICAgcHJpbnRfZGlmZmVyZW5jZXMoZGF0YSwgbG9jYWxlLmxvY2FsZV9hbGlhcykKICAgICBwcmludCgpCiAgICAgcHJpbnQoJ2xvY2FsZV9hbGlhcyA9IHsnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvaTE4bi9tc2dmbXQucHkgYi9Ub29scy9pMThuL21zZ2ZtdC5weQppbmRleCBjZDkwNjkxLi5iMDc1MWExIDEwMDc1NQotLS0gYS9Ub29scy9pMThuL21zZ2ZtdC5weQorKysgYi9Ub29scy9pMThuL21zZ2ZtdC5weQpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAgIGlmIG9wdCBpbiAoJy1oJywgJy0taGVscCcpOgogICAgICAgICAgICAgdXNhZ2UoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctVicsICctLXZlcnNpb24nKToKLSAgICAgICAgICAgIHByaW50KCJtc2dmbXQucHkiLCBfX3ZlcnNpb25fXywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgcHJpbnQoIm1zZ2ZtdC5weSIsIF9fdmVyc2lvbl9fKQogICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctbycsICctLW91dHB1dC1maWxlJyk6CiAgICAgICAgICAgICBvdXRmaWxlID0gYXJnCmRpZmYgLS1naXQgYS9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weSBiL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CmluZGV4IDcxNGMwZTQuLjYzNWRkNTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CisrKyBiL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CkBAIC00Niw4ICs0Niw3IEBACiAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gJycKICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKQogCiAKIGRlZiBidWlsdGluX21vZChzZWNvbmRzLCByZXBlYXQpOgpAQCAtNTYsOSArNTUsOCBAQAogICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQogICAgICMgUmVseWluZyBvbiBidWlsdC1pbiBpbXBvcnRlciBiZWluZyBpbXBsaWNpdC4KLSAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgeWllbGQgcmVzdWx0CisgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKIAogCiBkZWYgc291cmNlX3dvX2J5dGVjb2RlKHNlY29uZHMsIHJlcGVhdCk6CkBAIC03Myw5ICs3MSw4IEBACiAgICAgICAgICAgICBsb2FkZXIgPSAoaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTLCBUcnVlKQogICAgICAgICAgICAgc3lzLnBhdGhfaG9va3MuYXBwZW5kKGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2sobG9hZGVyKSkKLSAgICAgICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAgICAgZmluYWxseToKICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQogCkBAIC04OSw5ICs4Niw4IEBACiAgICAgICAgICAgICBvcy51bmxpbmsoYnl0ZWNvZGVfcGF0aCkKICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCiAKQEAgLTEyNyw4ICsxMjMsNyBAQAogICAgICAgICBkZWYgY2xlYW51cCgpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXMucG9wKG5hbWUpCiAgICAgICAgICAgICBvcy51bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1vZHVsZS5fX2ZpbGVfXykpCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgY2xlYW51cCwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGNsZWFudXAsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcykKIAogICAgIHdyaXRpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18gPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18uZm9ybWF0KG5hbWUpKQpAQCAtMTQ4LDkgKzE0Myw4IEBACiAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKGxvYWRlcikpCiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nW25hbWVdKQogICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKIAogZGVmIF91c2luZ19ieXRlY29kZShtb2R1bGUpOgpAQCAtMTU4LDkgKzE1Miw4IEBACiAgICAgZGVmIHVzaW5nX2J5dGVjb2RlX2JlbmNobWFyayhzZWNvbmRzLCByZXBlYXQpOgogICAgICAgICAiIiJTb3VyY2Ugdy8gYnl0ZWNvZGU6IHt9IiIiCiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtb2R1bGUuX19maWxlX18pCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKIAogICAgIHVzaW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXy5mb3JtYXQobmFtZSkpCmRpZmYgLS1naXQgYS9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkgYi9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKaW5kZXggNTMwYmM3OS4uNzEyZTU4NCAxMDA2NDQKLS0tIGEvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5CisrKyBiL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQpAQCAtMjQsNiArMjQsOCBAQAogICAgIHRyeToKICAgICAgICAgcmV0dXJuIG9wZW4oZm4sIG1vZGUsIGVuY29kaW5nPWVuY29kaW5nIG9yIFRFWFRfRU5DT0RJTkcpCiAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgaWYgJ3InIGluIG1vZGU6CisgICAgICAgICAgICBtb2RlICs9ICdVJyAjICdVJyBtb2RlIGlzIG5lZWRlZCBvbmx5IGluIFB5dGhvbiAyLngKICAgICAgICAgcmV0dXJuIG9wZW4oZm4sIG1vZGUpCiAKIGRlZiBnZXRfZmlsZV9zaXplcygpOgpAQCAtMzgwLDcgKzM4Miw3IEBACiAgICAgICAgICAgICBmLndyaXRlKG9zLnVyYW5kb20oc2l6ZSkpCiAgICAgIyBUZXh0IGZpbGVzCiAgICAgY2h1bmsgPSBbXQotICAgIHdpdGggdGV4dF9vcGVuKF9fZmlsZV9fLCAiclUiLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgd2l0aCB0ZXh0X29wZW4oX19maWxlX18sICJyIiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIDxpb2JlbmNoIHRleHQgY2h1bmsgbWFya2VyPiIpOgogICAgICAgICAgICAgICAgIGJyZWFrCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpLnB5IGIvVG9vbHMvbXNpL21zaS5weQppbmRleCA1ZWQwMjVkLi42MGU3ZDFkIDEwMDY0NAotLS0gYS9Ub29scy9tc2kvbXNpLnB5CisrKyBiL1Rvb2xzL21zaS9tc2kucHkKQEAgLTk5LDcgKzk5LDkgQEAKICAgICAnX211bHRpcHJvY2Vzc2luZy5weWQnLAogICAgICdfbHptYS5weWQnLAogICAgICdfZGVjaW1hbC5weWQnLAotICAgICdfdGVzdGJ1ZmZlci5weWQnCisgICAgJ190ZXN0YnVmZmVyLnB5ZCcsCisgICAgJ190ZXN0aW1wb3J0bXVsdGlwbGUucHlkJywKKyAgICAnX292ZXJsYXBwZWQucHlkJywKIF0KIAogIyBXZWxsLWtub3duIGNvbXBvbmVudCBVVUlEcwpAQCAtMTE5LDYgKzEyMSw3IEBACiAgICAgIjMxIjoiezRhZmNiYTBiLTEzZTQtNDdjMy1iZWJlLTQ3NzQyOGI0NjkxM30iLAogICAgICIzMiI6InszZmY5NTMxNS0xMDk2LTRkMzEtYmQ4Ni02MDFkNTQzOGFkNWV9IiwKICAgICAiMzMiOiJ7Zjc1ODFjYTQtZDM2OC00ZWVhLThmODItZDQ4YzY0YzRmMDQ3fSIsCisgICAgIjM0IjoiezdBMEM1ODEyLTI1ODMtNDBEOS1CQ0JCLUNENzQ4NUYxMTM3N30iLAogICAgIH0gW21ham9yK21pbm9yXQogCiAjIENvbXB1dGUgdGhlIG5hbWUgdGhhdCBTcGhpbnggZ2l2ZXMgdG8gdGhlIGRvY2ZpbGUKQEAgLTQxNyw2ICs0MjAsOCBAQAogCiAgICAgY29tcGlsZWFyZ3MgPSByJy1XaSAiW1RBUkdFVERJUl1MaWJcY29tcGlsZWFsbC5weSIgLWYgLXggImJhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8cHkyX3xsaWIydG8zXFx0ZXN0c3x2ZW52XFxzY3JpcHRzIiAiW1RBUkdFVERJUl1MaWIiJwogICAgIGxpYjJ0bzNhcmdzID0gcictYyAiaW1wb3J0IGxpYjJ0bzMucHlncmFtLCBsaWIydG8zLnBhdGNvbXA7bGliMnRvMy5wYXRjb21wLlBhdHRlcm5Db21waWxlcigpIicKKyAgICB1cGRhdGVwaXBhcmdzID0gcictbSBlbnN1cmVwaXAgLVUgLS1kZWZhdWx0LXBpcCcKKyAgICByZW1vdmVwaXBhcmdzID0gcictQiAtbSBlbnN1cmVwaXAuX3VuaW5zdGFsbCcKICAgICAjIFNlZSAiQ3VzdG9tQWN0aW9uIFRhYmxlIgogICAgIGFkZF9kYXRhKGRiLCAiQ3VzdG9tQWN0aW9uIiwgWwogICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZUZpcnN0U2VxdWVuY2UgKyBtc2lkYkN1c3RvbUFjdGlvblR5cGVUZXh0RGF0YSArIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZVByb3BlcnR5CkBAIC00MzAsOSArNDM1LDEzIEBACiAgICAgICAgICgiU2V0TGF1bmNoZXJEaXJUb1dpbmRvd3MiLCAzMDcsICJMQVVOQ0hFUkRJUiIsICJbV2luZG93c0ZvbGRlcl0iKSwKICAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVFeGUgKyBtc2lkYkN1c3RvbUFjdGlvblR5cGVTb3VyY2VGaWxlCiAgICAgICAgICMgU2VlICJDdXN0b20gQWN0aW9uIFR5cGUgMTgiCi0gICAgICAgICgiQ29tcGlsZVB5YyIsIDE4LCAicHl0aG9uLmV4ZSIsIGNvbXBpbGVhcmdzKSwKLSAgICAgICAgKCJDb21waWxlUHlvIiwgMTgsICJweXRob24uZXhlIiwgIi1PICIrY29tcGlsZWFyZ3MpLAotICAgICAgICAoIkNvbXBpbGVHcmFtbWFyIiwgMTgsICJweXRob24uZXhlIiwgbGliMnRvM2FyZ3MpLAorICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZUluU2NyaXB0ICgxMDI0KTsgcnVuIGR1cmluZyBhY3R1YWwgaW5zdGFsbGF0aW9uCisgICAgICAgICMgbXNpZGJDdXN0b21BY3Rpb25UeXBlTm9JbXBlcnNvbmF0ZSAoMjA0OCk7IHJ1biBhY3Rpb24gaW4gc3lzdGVtIGFjY291bnQsIG5vdCB1c2VyIGFjY291bnQKKyAgICAgICAgKCJDb21waWxlUHljIiwgMTgrMTAyNCsyMDQ4LCAicHl0aG9uLmV4ZSIsIGNvbXBpbGVhcmdzKSwKKyAgICAgICAgKCJDb21waWxlUHlvIiwgMTgrMTAyNCsyMDQ4LCAicHl0aG9uLmV4ZSIsICItTyAiK2NvbXBpbGVhcmdzKSwKKyAgICAgICAgKCJDb21waWxlR3JhbW1hciIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCBsaWIydG8zYXJncyksCisgICAgICAgICgiVXBkYXRlUGlwIiwgMTgrMTAyNCsyMDQ4LCAicHl0aG9uLmV4ZSIsIHVwZGF0ZXBpcGFyZ3MpLAorICAgICAgICAoIlJlbW92ZVBpcCIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCByZW1vdmVwaXBhcmdzKSwKICAgICAgICAgXSkKIAogICAgICMgVUkgU2VxdWVuY2VzLCBzZWUgIkluc3RhbGxVSVNlcXVlbmNlIFRhYmxlIiwgIlVzaW5nIGEgU2VxdWVuY2UgVGFibGUiCkBAIC00NTksNyArNDY4LDcgQEAKIAogICAgICMgUHJlcGVuZCBUQVJHRVRESVIgdG8gdGhlIHN5c3RlbSBwYXRoLCBhbmQgcmVtb3ZlIGl0IG9uIHVuaW5zdGFsbC4KICAgICBhZGRfZGF0YShkYiwgIkVudmlyb25tZW50IiwKLSAgICAgICAgICAgICBbKCJQYXRoQWRkaXRpb24iLCAiPS0qUGF0aCIsICJbVEFSR0VURElSXTtbfl0iLCAiUkVHSVNUUlkucGF0aCIpXSkKKyAgICAgICAgICAgICBbKCJQYXRoQWRkaXRpb24iLCAiPS0qUGF0aCIsICJbVEFSR0VURElSXTtbVEFSR0VURElSXVNjcmlwdHM7W35dIiwgIlJFR0lTVFJZLnBhdGgiKV0pCiAKICAgICAjIEV4ZWN1dGUgU2VxdWVuY2VzCiAgICAgYWRkX2RhdGEoZGIsICJJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlIiwKQEAgLTQ2OSwxNyArNDc4LDIwIEBACiAgICAgICAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvV2luZG93cyIsICdMQVVOQ0hFUkRJUj0iIiBhbmQgJyArIHN5czMyY29uZCwgNzUzKSwKICAgICAgICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9UYXJnZXQiLCAnTEFVTkNIRVJESVI9IiIgYW5kIG5vdCAnICsgc3lzMzJjb25kLCA3NTQpLAogICAgICAgICAgICAgICgiVXBkYXRlRWRpdElETEUiLCBOb25lLCAxMDUwKSwKLSAgICAgICAgICAgICAoIkNvbXBpbGVQeWMiLCAiQ09NUElMRUFMTCIsIDY4MDApLAotICAgICAgICAgICAgICgiQ29tcGlsZVB5byIsICJDT01QSUxFQUxMIiwgNjgwMSksCi0gICAgICAgICAgICAgKCJDb21waWxlR3JhbW1hciIsICJDT01QSUxFQUxMIiwgNjgwMiksCisgICAgICAgICAgICAgIyBydW4gY29tbWFuZCBpZiBpbnN0YWxsIHN0YXRlIG9mIHBpcCBjaGFuZ2VzIHRvIElOU1RBTExTVEFURV9MT0NBTAorICAgICAgICAgICAgICMgcnVuIGFmdGVyIEluc3RhbGxGaWxlcworICAgICAgICAgICAgICgiVXBkYXRlUGlwIiwgIiZwaXBfZmVhdHVyZT0zIiwgNDAwMSksCisgICAgICAgICAgICAgIyByZW1vdmUgcGlwIHdoZW4gc3RhdGUgY2hhbmdlcyB0byBJTlNUQUxMU1RBVEVfQUJTRU5UCisgICAgICAgICAgICAgIyBydW4gYmVmb3JlIFJlbW92ZUZpbGVzCisgICAgICAgICAgICAgKCJSZW1vdmVQaXAiLCAiJnBpcF9mZWF0dXJlPTIiLCAzNDk5KSwKKyAgICAgICAgICAgICAoIkNvbXBpbGVQeWMiLCAiQ09NUElMRUFMTCIsIDQwMDIpLAorICAgICAgICAgICAgICgiQ29tcGlsZVB5byIsICJDT01QSUxFQUxMIiwgNDAwMyksCisgICAgICAgICAgICAgKCJDb21waWxlR3JhbW1hciIsICJDT01QSUxFQUxMIiwgNDAwNCksCiAgICAgICAgICAgICBdKQogICAgIGFkZF9kYXRhKGRiLCAiQWRtaW5FeGVjdXRlU2VxdWVuY2UiLAogICAgICAgICAgICAgWygiSW5pdGlhbFRhcmdldERpciIsICdUQVJHRVRESVI9IiInLCA3NTApLAogICAgICAgICAgICAgICgiU2V0RExMRGlyVG9UYXJnZXQiLCAnRExMRElSPSIiJywgNzUxKSwKICAgICAgICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9UYXJnZXQiLCAnTEFVTkNIRVJESVI9IiInLCA3NTIpLAotICAgICAgICAgICAgICgiQ29tcGlsZVB5YyIsICJDT01QSUxFQUxMIiwgNjgwMCksCi0gICAgICAgICAgICAgKCJDb21waWxlUHlvIiwgIkNPTVBJTEVBTEwiLCA2ODAxKSwKLSAgICAgICAgICAgICAoIkNvbXBpbGVHcmFtbWFyIiwgIkNPTVBJTEVBTEwiLCA2ODAyKSwKICAgICAgICAgICAgIF0pCiAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTc0OCw3ICs3NjAsOCBAQAogICAgIGFkdmFuY2VkID0gUHlEaWFsb2coZGIsICJBZHZhbmNlZERsZyIsIHgsIHksIHcsIGgsIG1vZGFsLCB0aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21waWxlUHljIiwgIk9rIiwgIk9rIikKICAgICBhZHZhbmNlZC50aXRsZSgiQWR2YW5jZWQgT3B0aW9ucyBmb3IgW1Byb2R1Y3ROYW1lXSIpCi0gICAgIyBBIHJhZGlvIGdyb3VwIHdpdGggdHdvIG9wdGlvbnM6IGFsbHVzZXJzLCBqdXN0bWUKKworICAgICMgQSBjaGVja2JveCB3aGV0aGVyIHRvIGJ1aWxkIHB5YyBmaWxlcwogICAgIGFkdmFuY2VkLmNoZWNrYm94KCJDb21waWxlUHljIiwgMTM1LCA2MCwgMjMwLCA1MCwgMywKICAgICAgICAgICAgICAgICAgICAgICAiQ09NUElMRUFMTCIsICJDb21waWxlIC5weSBmaWxlcyB0byBieXRlIGNvZGUgYWZ0ZXIgaW5zdGFsbGF0aW9uIiwgIk9rIikKIApAQCAtODQ1LDcgKzg1OCw4IEBACiAgICAgIyAoaS5lLiBhZGRpdGlvbmFsIFB5dGhvbiBsaWJyYXJpZXMpIG5lZWQgdG8gZm9sbG93IHRoZSBwYXJlbnQgZmVhdHVyZS4KICAgICAjIEZlYXR1cmVzIHRoYXQgaGF2ZSBubyBhZHZlcnRpc2VtZW50IHRyaWdnZXIgKGUuZy4gdGhlIHRlc3Qgc3VpdGUpCiAgICAgIyBtdXN0IG5vdCBzdXBwb3J0IGFkdmVydGlzZW1lbnQKLSAgICBnbG9iYWwgZGVmYXVsdF9mZWF0dXJlLCB0Y2x0aywgaHRtbGZpbGVzLCB0b29scywgdGVzdHN1aXRlLCBleHRfZmVhdHVyZSwgcHJpdmF0ZV9jcnQsIHByZXBlbmRfcGF0aAorICAgIGdsb2JhbCBkZWZhdWx0X2ZlYXR1cmUsIHRjbHRrLCBodG1sZmlsZXMsIHRvb2xzLCB0ZXN0c3VpdGUKKyAgICBnbG9iYWwgZXh0X2ZlYXR1cmUsIHByaXZhdGVfY3J0LCBwcmVwZW5kX3BhdGgsIHBpcF9mZWF0dXJlCiAgICAgZGVmYXVsdF9mZWF0dXJlID0gRmVhdHVyZShkYiwgIkRlZmF1bHRGZWF0dXJlIiwgIlB5dGhvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIEludGVycHJldGVyIGFuZCBMaWJyYXJpZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgZGlyZWN0b3J5ID0gIlRBUkdFVERJUiIpCkBAIC04NjcsOCArODgxLDE0IEBACiAgICAgdG9vbHMgPSBGZWF0dXJlKGRiLCAiVG9vbHMiLCAiVXRpbGl0eSBTY3JpcHRzIiwKICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykiLCA5LAogICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9MikKKyAgICAjIHBpcCBpbnN0YWxsYXRpb24gaXNuJ3QgZW5hYmxlZCBieSBkZWZhdWx0IHVudGlsIGEgY2xlYW4gdW5pbnN0YWxsIHByb2NlZHVyZQorICAgICMgYmVjb21lcyBwb3NzaWJsZQorICAgIHBpcF9mZWF0dXJlID0gRmVhdHVyZShkYiwgInBpcF9mZWF0dXJlIiwgInBpcCIsCisgICAgICAgICAgICAgICAgICAgICJJbnN0YWxsIChvciB1cGdyYWRlIGZyb20gYW4gZWFybGllciB2ZXJzaW9uKSBwaXAsICIKKyAgICAgICAgICAgICAgICAgICAgImEgdG9vbCBmb3IgaW5zdGFsbGluZyBhbmQgbWFuYWdpbmcgUHl0aG9uIHBhY2thZ2VzLiIsIDExLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9Mnw4KQogICAgIHRlc3RzdWl0ZSA9IEZlYXR1cmUoZGIsICJUZXN0c3VpdGUiLCAiVGVzdCBzdWl0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykiLCAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKSIsIDEzLAogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTJ8OCkKICAgICAjIHByZXBlbmRfcGF0aCBpcyBhbiBhZGRpdGlvbmFsIGZlYXR1cmUgd2hpY2ggaXMgdG8gYmUgb2ZmIGJ5IGRlZmF1bHQuCiAgICAgIyBTaW5jZSB0aGUgZGVmYXVsdCBsZXZlbCBmb3IgdGhlIGFib3ZlIGZlYXR1cmVzIGlzIDEsIHRoaXMgbmVlZHMgdG8gYmUKQEAgLTg3Niw3ICs4OTYsNyBAQAogICAgIHByZXBlbmRfcGF0aCA9IEZlYXR1cmUoZGIsICJQcmVwZW5kUGF0aCIsICJBZGQgcHl0aG9uLmV4ZSB0byBQYXRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJQcmVwZW5kIFtUQVJHRVRESVJdIHRvIHRoZSBzeXN0ZW0gUGF0aCB2YXJpYWJsZS4gIgogICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgYWxsb3dzIHlvdSB0byB0eXBlICdweXRob24nIGludG8gYSBjb21tYW5kICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwcm9tcHQgd2l0aG91dCBuZWVkaW5nIHRoZSBmdWxsIHBhdGguIiwgMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAicHJvbXB0IHdpdGhvdXQgbmVlZGluZyB0aGUgZnVsbCBwYXRoLiIsIDE1LAogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTJ8OCwKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAKQEAgLTk1NCw4ICs5NzQsNiBAQAogICAgICMgQWRkIGFsbCBleGVjdXRhYmxlcywgaWNvbnMsIHRleHQgZmlsZXMgaW50byB0aGUgVEFSR0VURElSIGNvbXBvbmVudAogICAgIHJvb3QgPSBQeURpcmVjdG9yeShkYiwgY2FiLCBOb25lLCBzcmNkaXIsICJUQVJHRVRESVIiLCAiU291cmNlRGlyIikKICAgICBkZWZhdWx0X2ZlYXR1cmUuc2V0X2N1cnJlbnQoKQotICAgIGlmIG5vdCBtc2lsaWIuV2luNjQ6Ci0gICAgICAgIHJvb3QuYWRkX2ZpbGUoIiVzL3c5eHBvcGVuLmV4ZSIgJSBQQ0JVSUxEKQogICAgIHJvb3QuYWRkX2ZpbGUoIlJFQURNRS50eHQiLCBzcmM9IlJFQURNRSIpCiAgICAgcm9vdC5hZGRfZmlsZSgiTkVXUy50eHQiLCBzcmM9Ik1pc2MvTkVXUyIpCiAgICAgZ2VuZXJhdGVfbGljZW5zZSgpCkBAIC0xMTg1LDYgKzEyMDMsOCBAQAogICAgICAgICAgICAgICAgIkRvY3VtZW50YXRpb24iKSwKICAgICAgICAgICAgICAgKCJSRUdJU1RSWS5wYXRoIiwgbXNpbGliLmdlbl91dWlkKCksICJUQVJHRVRESVIiLCByZWdpc3RyeV9jb21wb25lbnQsIE5vbmUsCiAgICAgICAgICAgICAgIE5vbmUpLAorICAgICAgICAgICAgICAoIlJFR0lTVFJZLmVuc3VyZXBpcCIsIG1zaWxpYi5nZW5fdXVpZCgpLCAiVEFSR0VURElSIiwgcmVnaXN0cnlfY29tcG9uZW50LCAiRW5zdXJlUGlwUnVuIiwKKyAgICAgICAgICAgICAgTm9uZSksCiAgICAgICAgICAgICAgICgiUkVHSVNUUlkuZGVmIiwgbXNpbGliLmdlbl91dWlkKCksICJUQVJHRVRESVIiLCByZWdpc3RyeV9jb21wb25lbnQsCiAgICAgICAgICAgICAgICBOb25lLCBOb25lKV0gKyB0Y2xkYXRhKQogICAgICMgU2VlICJGZWF0dXJlQ29tcG9uZW50cyBUYWJsZSIuCkBAIC0xMjAyLDYgKzEyMjIsNyBAQAogICAgICAgICAgICAgIFsoZGVmYXVsdF9mZWF0dXJlLmlkLCAiUkVHSVNUUlkiKSwKICAgICAgICAgICAgICAgKGh0bWxmaWxlcy5pZCwgIlJFR0lTVFJZLmRvYyIpLAogICAgICAgICAgICAgICAocHJlcGVuZF9wYXRoLmlkLCAiUkVHSVNUUlkucGF0aCIpLAorICAgICAgICAgICAgICAocGlwX2ZlYXR1cmUuaWQsICJSRUdJU1RSWS5lbnN1cmVwaXAiKSwKICAgICAgICAgICAgICAgKGV4dF9mZWF0dXJlLmlkLCAiUkVHSVNUUlkuZGVmIildICsKICAgICAgICAgICAgICAgdGNsZGF0YQogICAgICAgICAgICAgICApCkBAIC0xMjY5LDYgKzEyOTAsMTAgQEAKICAgICAgICAgICAgICAgIns2MDI1NENBNS05NTNCLTExQ0YtOEM5Ni0wMEFBMDBCODcwOEN9IiwgIlJFR0lTVFJZLmRlZiIpLAogICAgICAgICAgICAgXSkKIAorICAgICMgUEFUSEVYVAorICAgIGFkZF9kYXRhKGRiLCAiRW52aXJvbm1lbnQiLAorICAgICAgICAgICAgIFsoIlBhdGhFeHRBZGRpdGlvbiIsICI9LSpQYXRoRXh0IiwgIlt+XTsuUFkiLCAiUkVHSVNUUlkuZGVmIildKQorCiAgICAgIyBSZWdpc3RyeSBrZXlzCiAgICAgcHJlZml4ID0gciJTb2Z0d2FyZVwlc1B5dGhvblxQeXRob25Db3JlXCVzIiAlICh0ZXN0cHJlZml4LCBzaG9ydF92ZXJzaW9uKQogICAgIGFkZF9kYXRhKGRiLCAiUmVnaXN0cnkiLApAQCAtMTI4NCw3ICsxMzA5LDkgQEAKICAgICAgICAgICAgICAgICIiLCByIltUQVJHRVRESVJdUHl0aG9uLmV4ZSIsICJSRUdJU1RSWS5kZWYiKSwKICAgICAgICAgICAgICAgKCJEaXNwbGF5SWNvbiIsIC0xLAogICAgICAgICAgICAgICAgciJTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJXMiICUgcHJvZHVjdF9jb2RlLAotICAgICAgICAgICAgICAgIkRpc3BsYXlJY29uIiwgIltUQVJHRVRESVJdcHl0aG9uLmV4ZSIsICJSRUdJU1RSWSIpCisgICAgICAgICAgICAgICAiRGlzcGxheUljb24iLCAiW1RBUkdFVERJUl1weXRob24uZXhlIiwgIlJFR0lTVFJZIiksCisgICAgICAgICAgICAgICMgRmFrZSByZWdpc3RyeSBlbnRyeSB0byBhbGxvdyBpbnN0YWxsZXIgdG8gdHJhY2sgd2hldGhlciBlbnN1cmVwaXAgaGFzIGJlZW4gcnVuCisgICAgICAgICAgICAgICgiRW5zdXJlUGlwUnVuIiwgLTEsIHByZWZpeCtyIlxFbnN1cmVQaXBSdW4iLCAiIiwgIiMxIiwgIlJFR0lTVFJZLmVuc3VyZXBpcCIpLAogICAgICAgICAgICAgICBdKQogICAgICMgU2hvcnRjdXRzLCBzZWUgIlNob3J0Y3V0IFRhYmxlIgogICAgIGFkZF9kYXRhKGRiLCAiRGlyZWN0b3J5IiwKQEAgLTEyOTMsMjcgKzEzMjAsMzggQEAKICAgICBhZGRfZGF0YShkYiwgIlJlbW92ZUZpbGUiLAogICAgICAgICAgICAgIFsoIk1lbnVEaXIiLCAiVEFSR0VURElSIiwgTm9uZSwgIk1lbnVEaXIiLCAyKV0pCiAgICAgdGNsdGtzaG9ydGN1dHMgPSBbXQorICAgIGlmIG1zaWxpYi5XaW42NDoKKyAgICAgICAgYml0dGVkID0gIjY0IGJpdCIKKyAgICBlbHNlOgorICAgICAgICBiaXR0ZWQgPSAiMzIgYml0IgogICAgIGlmIGhhdmVfdGNsOgogICAgICAgICB0Y2x0a3Nob3J0Y3V0cyA9IFsKLSAgICAgICAgICAgICAgKCJJRExFIiwgIk1lbnVEaXIiLCAiSURMRXxJRExFIChQeXRob24gR1VJKSIsICJweXRob253LmV4ZSIsCi0gICAgICAgICAgICAgICB0Y2x0ay5pZCwgciciW1RBUkdFVERJUl1MaWJcaWRsZWxpYlxpZGxlLnB5dyInLCBOb25lLCBOb25lLCAicHl0aG9uX2ljb24uZXhlIiwgMCwgTm9uZSwgIlRBUkdFVERJUiIpLAotICAgICAgICAgICAgICAoIlB5RG9jIiwgIk1lbnVEaXIiLCAiTU9ERE9DU3xNb2R1bGUgRG9jcyIsICJweXRob253LmV4ZSIsCi0gICAgICAgICAgICAgICB0Y2x0ay5pZCwgciciW1RBUkdFVERJUl1Ub29sc1xzY3JpcHRzXHB5ZG9jZ3VpLnB5dyInLCBOb25lLCBOb25lLCAicHl0aG9uX2ljb24uZXhlIiwgMCwgTm9uZSwgIlRBUkdFVERJUiIpLAorICAgICAgICAgICAgICAoIklETEUiLCAiTWVudURpciIsCisgICAgICAgICAgICAgICAiSURMRXxJRExFIChQeXRob24gIitzaG9ydF92ZXJzaW9uKyIgR1VJIC0gIitiaXR0ZWQrIikiLAorICAgICAgICAgICAgICAgInB5dGhvbncuZXhlIiwgdGNsdGsuaWQsIHInIltUQVJHRVRESVJdTGliXGlkbGVsaWJcaWRsZS5weXciJywKKyAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAwLCBOb25lLCAiVEFSR0VURElSIiksCiAgICAgICAgICAgICAgIF0KICAgICBhZGRfZGF0YShkYiwgIlNob3J0Y3V0IiwKICAgICAgICAgICAgICB0Y2x0a3Nob3J0Y3V0cyArCiAgICAgICAgICAgICAgWyMgQWR2ZXJ0aXNlZCBzaG9ydGN1dHM6IHRhcmdldHMgYXJlIGZlYXR1cmVzLCBub3QgZmlsZXMKLSAgICAgICAgICAgICAgKCJQeXRob24iLCAiTWVudURpciIsICJQWVRIT058UHl0aG9uIChjb21tYW5kIGxpbmUpIiwgInB5dGhvbi5leGUiLAotICAgICAgICAgICAgICAgZGVmYXVsdF9mZWF0dXJlLmlkLCBOb25lLCBOb25lLCBOb25lLCAicHl0aG9uX2ljb24uZXhlIiwgMiwgTm9uZSwgIlRBUkdFVERJUiIpLAorICAgICAgICAgICAgICAoIlB5dGhvbiIsICJNZW51RGlyIiwKKyAgICAgICAgICAgICAgICJQWVRIT058UHl0aG9uICIrc2hvcnRfdmVyc2lvbisiIChjb21tYW5kIGxpbmUgLSAiK2JpdHRlZCsiKSIsCisgICAgICAgICAgICAgICAicHl0aG9uLmV4ZSIsIGRlZmF1bHRfZmVhdHVyZS5pZCwgTm9uZSwgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICJweXRob25faWNvbi5leGUiLCAyLCBOb25lLCAiVEFSR0VURElSIiksCiAgICAgICAgICAgICAgICMgQWR2ZXJ0aXNpbmcgdGhlIE1hbnVhbCBicmVha3Mgb24gKHNvbWU/KSBXaW45OCwgYW5kIHRoZSBzaG9ydGN1dCBsYWNrcyBhbgogICAgICAgICAgICAgICAjIGljb24gZmlyc3QuCiAgICAgICAgICAgICAgICMoIk1hbnVhbCIsICJNZW51RGlyIiwgIk1BTlVBTHxQeXRob24gTWFudWFscyIsICJkb2N1bWVudGF0aW9uIiwKICAgICAgICAgICAgICAgIyBodG1sZmlsZXMuaWQsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAogICAgICAgICAgICAgICAjIyBOb24tYWR2ZXJ0aXNlZCBzaG9ydGN1dHM6IG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgcmVnaXN0cnkgY29tcG9uZW50Ci0gICAgICAgICAgICAgICgiTWFudWFsIiwgIk1lbnVEaXIiLCAiTUFOVUFMfFB5dGhvbiBNYW51YWxzIiwgIlJFR0lTVFJZLmRvYyIsCi0gICAgICAgICAgICAgICAiWyMlc10iICUgZG9jZmlsZSwgTm9uZSwKLSAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotICAgICAgICAgICAgICAoIlVuaW5zdGFsbCIsICJNZW51RGlyIiwgIlVOSU5TVHxVbmluc3RhbGwgUHl0aG9uIiwgIlJFR0lTVFJZIiwKKyAgICAgICAgICAgICAgKCJNYW51YWwiLCAiTWVudURpciIsICJNQU5VQUx8UHl0aG9uICIrc2hvcnRfdmVyc2lvbisiIE1hbnVhbHMiLAorICAgICAgICAgICAgICAgIlJFR0lTVFJZLmRvYyIsICJbIyVzXSIgJSBkb2NmaWxlLAorICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAgICgiUHlEb2MiLCAiTWVudURpciIsCisgICAgICAgICAgICAgICAiTU9ERE9DU3xQeXRob24gIitzaG9ydF92ZXJzaW9uKyIgRG9jcyBTZXJ2ZXIgKHB5ZG9jIC0gIisKKyAgICAgICAgICAgICAgIGJpdHRlZCsiKSIsICJweXRob24uZXhlIiwgZGVmYXVsdF9mZWF0dXJlLmlkLCByJy1tIHB5ZG9jIC1iJywKKyAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAwLCBOb25lLCAiVEFSR0VURElSIiksCisgICAgICAgICAgICAgICgiVW5pbnN0YWxsIiwgIk1lbnVEaXIiLCAiVU5JTlNUfFVuaW5zdGFsbCBQeXRob24gIisKKyAgICAgICAgICAgICAgIHNob3J0X3ZlcnNpb24rIiAoIitiaXR0ZWQrIikiLCAiUkVHSVNUUlkiLAogICAgICAgICAgICAgICAgU3lzdGVtRm9sZGVyTmFtZSsibXNpZXhlYyIsICAiL3glcyIgJSBwcm9kdWN0X2NvZGUsCiAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKICAgICAgICAgICAgICAgXSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5IGIvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKaW5kZXggYjU1ZTJjNi4uODM3Y2Q4MSAxMDA2NDQKLS0tIGEvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKKysrIGIvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKQEAgLTMwNyw2ICszMDcsOSBAQAogICAgIGRlZiBfTmFtZShzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0LmlkKQogCisgICAgZGVmIF9OYW1lQ29uc3RhbnQoc2VsZiwgdCk6CisgICAgICAgIHNlbGYud3JpdGUocmVwcih0LnZhbHVlKSkKKwogICAgIGRlZiBfTnVtKHNlbGYsIHQpOgogICAgICAgICAjIFN1YnN0aXR1dGUgb3ZlcmZsb3dpbmcgZGVjaW1hbCBsaXRlcmFsIGZvciBBU1QgaW5maW5pdGllcy4KICAgICAgICAgc2VsZi53cml0ZShyZXByKHQubikucmVwbGFjZSgiaW5mIiwgSU5GU1RSKSkKQEAgLTUxNSwxMCArNTE4LDEwIEBACiAgICAgICAgICAgICBlbHNlOiBzZWxmLndyaXRlKCIsICIpCiAgICAgICAgICAgICBzZWxmLndyaXRlKCIqIikKICAgICAgICAgICAgIGlmIHQudmFyYXJnOgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUodC52YXJhcmcpCi0gICAgICAgICAgICAgICAgaWYgdC52YXJhcmdhbm5vdGF0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUodC52YXJhcmcuYXJnKQorICAgICAgICAgICAgICAgIGlmIHQudmFyYXJnLmFubm90YXRpb246CiAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIjogIikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhcmFyZ2Fubm90YXRpb24pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC52YXJhcmcuYW5ub3RhdGlvbikKIAogICAgICAgICAjIGtleXdvcmQtb25seSBhcmd1bWVudHMKICAgICAgICAgaWYgdC5rd29ubHlhcmdzOgpAQCAtNTM0LDEwICs1MzcsMTAgQEAKICAgICAgICAgaWYgdC5rd2FyZzoKICAgICAgICAgICAgIGlmIGZpcnN0OmZpcnN0ID0gRmFsc2UKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIioqIit0Lmt3YXJnKQotICAgICAgICAgICAgaWYgdC5rd2FyZ2Fubm90YXRpb246CisgICAgICAgICAgICBzZWxmLndyaXRlKCIqKiIrdC5rd2FyZy5hcmcpCisgICAgICAgICAgICBpZiB0Lmt3YXJnLmFubm90YXRpb246CiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQotICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5rd2FyZ2Fubm90YXRpb24pCisgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lmt3YXJnLmFubm90YXRpb24pCiAKICAgICBkZWYgX2tleXdvcmQoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUodC5hcmcpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL1JFQURNRSBiL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCmluZGV4IGQ2NWQxZmQuLmM2YjIyODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCisrKyBiL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCkBAIC0yLDY0ICsyLDY4IEBACiB1c2VmdWwgd2hpbGUgYnVpbGRpbmcsIGV4dGVuZGluZyBvciBtYW5hZ2luZyBQeXRob24uICBTb21lIChlLmcuLCBkdXRyZWUgb3IgbGxsKQogYXJlIGFsc28gZ2VuZXJhbGx5IHVzZWZ1bCBVTklYIHRvb2xzLgogCi0ydG8zICAgICAgICAgICAgICAgICAgICBNYWluIHNjcmlwdCBmb3IgcnVubmluZyB0aGUgMnRvMyBjb252ZXJzaW9uIHRvb2wKLWFuYWx5emVfZHhwLnB5ICAgICAgICAgIEFuYWx5emVzIHRoZSByZXN1bHQgb2Ygc3lzLmdldGR4cCgpCi1ieWV4dC5weSAgICAgICAgICAgICAgICBQcmludCBsaW5lcy93b3Jkcy9jaGFycyBzdGF0cyBvZiBmaWxlcyBieSBleHRlbnNpb24KLWJ5dGV5ZWFycy5weSAgICAgICAgICAgIFByaW50IHByb2R1Y3Qgb2YgYSBmaWxlJ3Mgc2l6ZSBhbmQgYWdlCi1jaGVja3B5Yy5weSAgICAgICAgICAgICBDaGVjayBwcmVzZW5jZSBhbmQgdmFsaWRpdHkgb2YgIi5weWMiIGZpbGVzCi1jbGVhbmZ1dHVyZS5weSAgICAgICAgICBGaXggcmVkdW5kYW50IFB5dGhvbiBfX2Z1dHVyZV9fIHN0YXRlbWVudHMKLWNvbWJpbmVyZWZzLnB5ICAgICAgICAgIEEgaGVscGVyIGZvciBhbmFseXppbmcgUFlUSE9ORFVNUFJFRlMgb3V0cHV0Ci1jb3B5dGltZS5weSAgICAgICAgICAgICBDb3B5IG9uZSBmaWxlJ3MgYXRpbWUgYW5kIG10aW1lIHRvIGFub3RoZXIKLWNybGYucHkgICAgICAgICAgICAgICAgIENoYW5nZSBDUkxGIGxpbmUgZW5kaW5ncyB0byBMRiAoV2luZG93cyB0byBVbml4KQotZGIycGlja2xlLnB5ICAgICAgICAgICAgRHVtcCBhIGRhdGFiYXNlIGZpbGUgdG8gYSBwaWNrbGUKLWRpZmYucHkgICAgICAgICAgICAgICAgIFByaW50IGZpbGUgZGlmZnMgaW4gY29udGV4dCwgdW5pZmllZCwgb3IgbmRpZmYgZm9ybWF0cwotZHV0cmVlLnB5ICAgICAgICAgICAgICAgRm9ybWF0IGR1KDEpIG91dHB1dCBhcyBhIHRyZWUgc29ydGVkIGJ5IHNpemUKLWVwdGFncy5weSAgICAgICAgICAgICAgIENyZWF0ZSBFbWFjcyBUQUdTIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCi1maW5kX3JlY3Vyc2lvbmxpbWl0LnB5ICBGaW5kIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBsaW1pdCBvbiB0aGlzIG1hY2hpbmUKLWZpbmRkaXYucHkgICAgICAgICAgICAgIEEgZ3JlcC1saWtlIHRvb2wgdGhhdCBsb29rcyBmb3IgZGl2aXNpb24gb3BlcmF0b3JzCi1maW5kbGlua3N0by5weSAgICAgICAgICBSZWN1cnNpdmVseSBmaW5kIHN5bWJvbGljIGxpbmtzIHRvIGEgZ2l2ZW4gcGF0aCBwcmVmaXgKLWZpbmRub2NvZGluZy5weSAgICAgICAgIEZpbmQgc291cmNlIGZpbGVzIHdoaWNoIG5lZWQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24KLWZpeGNpZC5weSAgICAgICAgICAgICAgIE1hc3NpdmUgaWRlbnRpZmllciBzdWJzdGl0dXRpb24gb24gQyBzb3VyY2UgZmlsZXMKLWZpeGRpdi5weSAgICAgICAgICAgICAgIFRvb2wgdG8gZml4IGRpdmlzaW9uIG9wZXJhdG9ycy4KLWZpeGhlYWRlci5weSAgICAgICAgICAgIEFkZCBzb21lIGNwcCBtYWdpYyB0byBhIEMgaW5jbHVkZSBmaWxlCi1maXhub3RpY2UucHkgICAgICAgICAgICBGaXggdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gc291cmNlIGZpbGVzCi1maXhwcy5weSAgICAgICAgICAgICAgICBGaXggUHl0aG9uIHNjcmlwdHMnIGZpcnN0IGxpbmUgKGlmICMhKQotZnRwbWlycm9yLnB5ICAgICAgICAgICAgRlRQIG1pcnJvciBzY3JpcHQKLWdvb2dsZS5weSAgICAgICAgICAgICAgIE9wZW4gYSB3ZWJicm93c2VyIHdpdGggR29vZ2xlCi1ncHJvZjJodG1sLnB5ICAgICAgICAgICBUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwKLWgycHkucHkgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSAjZGVmaW5lJ3MgaW50byBQeXRob24gYXNzaWdubWVudHMKLWhpZ2hsaWdodC5weSAgICAgICAgICAgIFB5dGhvbiBzeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggSFRNTCBvdXRwdXQKLWlkbGUzICAgICAgICAgICAgICAgICAgIE1haW4gcHJvZ3JhbSB0byBzdGFydCBJRExFCi1pZmRlZi5weSAgICAgICAgICAgICAgICBSZW1vdmUgI2lmKG4pZGVmIGdyb3VwcyBmcm9tIEMgc291cmNlcwotbGZjci5weSAgICAgICAgICAgICAgICAgQ2hhbmdlIExGIGxpbmUgZW5kaW5ncyB0byBDUkxGIChVbml4IHRvIFdpbmRvd3MpCi1saW5rdHJlZS5weSAgICAgICAgICAgICBNYWtlIGEgY29weSBvZiBhIHRyZWUgd2l0aCBsaW5rcyB0byBvcmlnaW5hbCBmaWxlcwotbGxsLnB5ICAgICAgICAgICAgICAgICAgRmluZCBhbmQgbGlzdCBzeW1ib2xpYyBsaW5rcyBpbiBjdXJyZW50IGRpcmVjdG9yeQotbWFpbGVyZGFlbW9uLnB5ICAgICAgICAgUGFyc2UgZXJyb3IgbWVzc2FnZXMgZnJvbSBtYWlsZXIgZGFlbW9ucyAoU2pvZXJkJkphY2spCi1tYWtlX2N0eXBlLnB5ICAgICAgICAgICBHZW5lcmF0ZSBjdHlwZS5oIHJlcGxhY2VtZW50IGluIHN0cmluZ29iamVjdC5jCi1tZDVzdW0ucHkgICAgICAgICAgICAgICBQcmludCBNRDUgY2hlY2tzdW1zIG9mIGFyZ3VtZW50IGZpbGVzCi1ta3JlYWwucHkgICAgICAgICAgICAgICBUdXJuIGEgc3ltYm9saWMgbGluayBpbnRvIGEgcmVhbCBmaWxlIG9yIGRpcmVjdG9yeQotbmRpZmYucHkgICAgICAgICAgICAgICAgSW50ZWxsaWdlbnQgZGlmZiBiZXR3ZWVuIHRleHQgZmlsZXMgKFRpbSBQZXRlcnMpCi1ubTJkZWYucHkgICAgICAgICAgICAgICBDcmVhdGUgYSB0ZW1wbGF0ZSBmb3IgUEMvcHl0aG9uX250LmRlZiAoTWFyYyBMZW1idXJnKQotb2JqZ3JhcGgucHkgICAgICAgICAgICAgUHJpbnQgb2JqZWN0IGdyYXBoIGZyb20gbm0gb3V0cHV0IG9uIGEgbGlicmFyeQotcGFyc2VlbnRpdGllcy5weSAgICAgICAgVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MIGVudGl0eSBkZWZpbml0aW9ucwotcGF0Y2hjaGVjay5weSAgICAgICAgICAgUGVyZm9ybSBjb21tb24gY2hlY2tzIGFuZCBjbGVhbnVwIGJlZm9yZSBjb21taXR0aW5nCi1wYXRoZml4LnB5ICAgICAgICAgICAgICBDaGFuZ2UgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24gaW50byBzb21ldGhpbmcgZWxzZQotcGRlcHMucHkgICAgICAgICAgICAgICAgUHJpbnQgZGVwZW5kZW5jaWVzIGJldHdlZW4gUHl0aG9uIG1vZHVsZXMKLXBpY2tsZTJkYi5weSAgICAgICAgICAgIExvYWQgYSBwaWNrbGUgZ2VuZXJhdGVkIGJ5IGRiMnBpY2tsZS5weSB0byBhIGRhdGFiYXNlCi1waW5kZW50LnB5ICAgICAgICAgICAgICBJbmRlbnQgUHl0aG9uIGNvZGUsIGdpdmluZyBibG9jay1jbG9zaW5nIGNvbW1lbnRzCi1wdGFncy5weSAgICAgICAgICAgICAgICBDcmVhdGUgdmkgdGFncyBmaWxlIGZvciBQeXRob24gbW9kdWxlcwotcHlkb2MzICAgICAgICAgICAgICAgICAgUHl0aG9uIGRvY3VtZW50YXRpb24gYnJvd3NlcgotcHlzb3VyY2UucHkgICAgICAgICAgICAgRmluZCBQeXRob24gc291cmNlIGZpbGVzCi1yZWRlbW8ucHkgICAgICAgICAgICAgICBCYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZGVtb25zdHJhdGlvbiBmYWNpbGl0eQotcmVpbmRlbnQucHkgICAgICAgICAgICAgQ2hhbmdlIC5weSBmaWxlcyB0byB1c2UgNC1zcGFjZSBpbmRlbnRzCi1yZWluZGVudC1yc3QucHkgICAgICAgICBGaXgtdXAgcmVTdHJ1Y3R1cmVkVGV4dCBmaWxlIHdoaXRlc3BhY2UKLXJncmVwLnB5ICAgICAgICAgICAgICAgIFJldmVyc2UgZ3JlcCB0aHJvdWdoIGEgZmlsZSAodXNlZnVsIGZvciBiaWcgbG9nZmlsZXMpCi1ydW5fdGVzdHMucHkgICAgICAgICAgICBSdW4gdGhlIHRlc3Qgc3VpdGUgd2l0aCBtb3JlIHNlbnNpYmxlIGRlZmF1bHQgb3B0aW9ucwotc2VydmUucHkgICAgICAgICAgICAgICAgU21hbGwgd3NnaXJlZi1iYXNlZCB3ZWIgc2VydmVyLCB1c2VkIGluIG1ha2Ugc2VydmUgaW4gRG9jCi1zdWZmLnB5ICAgICAgICAgICAgICAgICBTb3J0IGEgbGlzdCBvZiBmaWxlcyBieSBzdWZmaXgKLXN2bmVvbC5weSAgICAgICAgICAgICAgIFNldCBzdm46ZW9sLXN0eWxlIG9uIGFsbCBmaWxlcyBpbiBkaXJlY3RvcnkKLXRleGkyaHRtbC5weSAgICAgICAgICAgIENvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MCi10cmVlc3luYy5weSAgICAgICAgICAgICBTeW5jaHJvbml6ZSBzb3VyY2UgdHJlZXMgKHZlcnkgaWRpb3N5bmNyYXRpYykKLXVudGFiaWZ5LnB5ICAgICAgICAgICAgIFJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcyBpbiBhcmd1bWVudCBmaWxlcwotd2luX2FkZDJwYXRoLnB5ICAgICAgICAgQWRkIFB5dGhvbiB0byB0aGUgc2VhcmNoIHBhdGggb24gV2luZG93cwotd2hpY2gucHkgICAgICAgICAgICAgICAgRmluZCBhIHByb2dyYW0gaW4gJFBBVEgKKzJ0bzMgICAgICAgICAgICAgICAgICAgICAgTWFpbiBzY3JpcHQgZm9yIHJ1bm5pbmcgdGhlIDJ0bzMgY29udmVyc2lvbiB0b29sCithYml0eXBlLnB5ICAgICAgICAgICAgICAgIENvbnZlcnRzIGEgQyBmaWxlIHRvIHVzZSB0aGUgUEVQIDM4NCB0eXBlIGRlZmluaXRpb24gQVBJCithbmFseXplX2R4cC5weSAgICAgICAgICAgIEFuYWx5emVzIHRoZSByZXN1bHQgb2Ygc3lzLmdldGR4cCgpCitieWV4dC5weSAgICAgICAgICAgICAgICAgIFByaW50IGxpbmVzL3dvcmRzL2NoYXJzIHN0YXRzIG9mIGZpbGVzIGJ5IGV4dGVuc2lvbgorYnl0ZXllYXJzLnB5ICAgICAgICAgICAgICBQcmludCBwcm9kdWN0IG9mIGEgZmlsZSdzIHNpemUgYW5kIGFnZQorY2hlY2tweWMucHkgICAgICAgICAgICAgICBDaGVjayBwcmVzZW5jZSBhbmQgdmFsaWRpdHkgb2YgIi5weWMiIGZpbGVzCitjbGVhbmZ1dHVyZS5weSAgICAgICAgICAgIEZpeCByZWR1bmRhbnQgUHl0aG9uIF9fZnV0dXJlX18gc3RhdGVtZW50cworY29tYmluZXJlZnMucHkgICAgICAgICAgICBBIGhlbHBlciBmb3IgYW5hbHl6aW5nIFBZVEhPTkRVTVBSRUZTIG91dHB1dAorY29weXRpbWUucHkgICAgICAgICAgICAgICBDb3B5IG9uZSBmaWxlJ3MgYXRpbWUgYW5kIG10aW1lIHRvIGFub3RoZXIKK2NybGYucHkgICAgICAgICAgICAgICAgICAgQ2hhbmdlIENSTEYgbGluZSBlbmRpbmdzIHRvIExGIChXaW5kb3dzIHRvIFVuaXgpCitkYjJwaWNrbGUucHkgICAgICAgICAgICAgIER1bXAgYSBkYXRhYmFzZSBmaWxlIHRvIGEgcGlja2xlCitkaWZmLnB5ICAgICAgICAgICAgICAgICAgIFByaW50IGZpbGUgZGlmZnMgaW4gY29udGV4dCwgdW5pZmllZCwgb3IgbmRpZmYgZm9ybWF0cworZHV0cmVlLnB5ICAgICAgICAgICAgICAgICBGb3JtYXQgZHUoMSkgb3V0cHV0IGFzIGEgdHJlZSBzb3J0ZWQgYnkgc2l6ZQorZXB0YWdzLnB5ICAgICAgICAgICAgICAgICBDcmVhdGUgRW1hY3MgVEFHUyBmaWxlIGZvciBQeXRob24gbW9kdWxlcworZmluZGRpdi5weSAgICAgICAgICAgICAgICBBIGdyZXAtbGlrZSB0b29sIHRoYXQgbG9va3MgZm9yIGRpdmlzaW9uIG9wZXJhdG9ycworZmluZGxpbmtzdG8ucHkgICAgICAgICAgICBSZWN1cnNpdmVseSBmaW5kIHN5bWJvbGljIGxpbmtzIHRvIGEgZ2l2ZW4gcGF0aCBwcmVmaXgKK2ZpbmRub2NvZGluZy5weSAgICAgICAgICAgRmluZCBzb3VyY2UgZmlsZXMgd2hpY2ggbmVlZCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbgorZmluZF9yZWN1cnNpb25saW1pdC5weSAgICBGaW5kIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBsaW1pdCBvbiB0aGlzIG1hY2hpbmUKK2ZpbmQtdW5hbWUucHkgICAgICAgICAgICAgTG9vayBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyBpbiB0aGUgc2V0cyBvZiBhbGwgVW5pY29kZSBuYW1lcworZml4Y2lkLnB5ICAgICAgICAgICAgICAgICBNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCitmaXhkaXYucHkgICAgICAgICAgICAgICAgIFRvb2wgdG8gZml4IGRpdmlzaW9uIG9wZXJhdG9ycy4KK2ZpeGhlYWRlci5weSAgICAgICAgICAgICAgQWRkIHNvbWUgY3BwIG1hZ2ljIHRvIGEgQyBpbmNsdWRlIGZpbGUKK2ZpeG5vdGljZS5weSAgICAgICAgICAgICAgRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHNvdXJjZSBmaWxlcworZml4cHMucHkgICAgICAgICAgICAgICAgICBGaXggUHl0aG9uIHNjcmlwdHMnIGZpcnN0IGxpbmUgKGlmICMhKQorZnRwbWlycm9yLnB5ICAgICAgICAgICAgICBGVFAgbWlycm9yIHNjcmlwdAorZ2V0LXJlbW90ZS1jZXJ0aWZpY2F0ZS5weSBGZXRjaCB0aGUgY2VydGlmaWNhdGUgdGhhdCB0aGUgc2VydmVyKHMpIGFyZSBwcm92aWRpbmcgaW4gUEVNIGZvcm0KK2dvb2dsZS5weSAgICAgICAgICAgICAgICAgT3BlbiBhIHdlYmJyb3dzZXIgd2l0aCBHb29nbGUKK2dwcm9mMmh0bWwucHkgICAgICAgICAgICAgVHJhbnNmb3JtIGdwcm9mKDEpIG91dHB1dCBpbnRvIHVzZWZ1bCBIVE1MCitoMnB5LnB5ICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSAjZGVmaW5lJ3MgaW50byBQeXRob24gYXNzaWdubWVudHMKK2hpZ2hsaWdodC5weSAgICAgICAgICAgICAgUHl0aG9uIHN5bnRheCBoaWdobGlnaHRpbmcgd2l0aCBIVE1MIG91dHB1dAoraWRsZTMgICAgICAgICAgICAgICAgICAgICBNYWluIHByb2dyYW0gdG8gc3RhcnQgSURMRQoraWZkZWYucHkgICAgICAgICAgICAgICAgICBSZW1vdmUgI2lmKG4pZGVmIGdyb3VwcyBmcm9tIEMgc291cmNlcworaW1wb3J0X2RpYWdub3N0aWNzLnB5ICAgICBNaXNjZWxsYW5lb3VzIGRpYWdub3N0aWNzIGZvciB0aGUgaW1wb3J0IHN5c3RlbQorbGZjci5weSAgICAgICAgICAgICAgICAgICBDaGFuZ2UgTEYgbGluZSBlbmRpbmdzIHRvIENSTEYgKFVuaXggdG8gV2luZG93cykKK2xpbmt0cmVlLnB5ICAgICAgICAgICAgICAgTWFrZSBhIGNvcHkgb2YgYSB0cmVlIHdpdGggbGlua3MgdG8gb3JpZ2luYWwgZmlsZXMKK2xsbC5weSAgICAgICAgICAgICAgICAgICAgRmluZCBhbmQgbGlzdCBzeW1ib2xpYyBsaW5rcyBpbiBjdXJyZW50IGRpcmVjdG9yeQorbWFpbGVyZGFlbW9uLnB5ICAgICAgICAgICBQYXJzZSBlcnJvciBtZXNzYWdlcyBmcm9tIG1haWxlciBkYWVtb25zIChTam9lcmQmSmFjaykKK21ha2VfY3R5cGUucHkgICAgICAgICAgICAgR2VuZXJhdGUgY3R5cGUuaCByZXBsYWNlbWVudCBpbiBzdHJpbmdvYmplY3QuYworbWQ1c3VtLnB5ICAgICAgICAgICAgICAgICBQcmludCBNRDUgY2hlY2tzdW1zIG9mIGFyZ3VtZW50IGZpbGVzCitta3JlYWwucHkgICAgICAgICAgICAgICAgIFR1cm4gYSBzeW1ib2xpYyBsaW5rIGludG8gYSByZWFsIGZpbGUgb3IgZGlyZWN0b3J5CituZGlmZi5weSAgICAgICAgICAgICAgICAgIEludGVsbGlnZW50IGRpZmYgYmV0d2VlbiB0ZXh0IGZpbGVzIChUaW0gUGV0ZXJzKQorbm0yZGVmLnB5ICAgICAgICAgICAgICAgICBDcmVhdGUgYSB0ZW1wbGF0ZSBmb3IgUEMvcHl0aG9uX250LmRlZiAoTWFyYyBMZW1idXJnKQorb2JqZ3JhcGgucHkgICAgICAgICAgICAgICBQcmludCBvYmplY3QgZ3JhcGggZnJvbSBubSBvdXRwdXQgb24gYSBsaWJyYXJ5CitwYXJzZWVudGl0aWVzLnB5ICAgICAgICAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTCBlbnRpdHkgZGVmaW5pdGlvbnMKK3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5ICAgVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MNSBlbnRpdHkgZGVmaW5pdGlvbnMKK3BhdGNoY2hlY2sucHkgICAgICAgICAgICAgUGVyZm9ybSBjb21tb24gY2hlY2tzIGFuZCBjbGVhbnVwIGJlZm9yZSBjb21taXR0aW5nCitwYXRoZml4LnB5ICAgICAgICAgICAgICAgIENoYW5nZSAjIS91c3IvbG9jYWwvYmluL3B5dGhvbiBpbnRvIHNvbWV0aGluZyBlbHNlCitwZGVwcy5weSAgICAgICAgICAgICAgICAgIFByaW50IGRlcGVuZGVuY2llcyBiZXR3ZWVuIFB5dGhvbiBtb2R1bGVzCitwaWNrbGUyZGIucHkgICAgICAgICAgICAgIExvYWQgYSBwaWNrbGUgZ2VuZXJhdGVkIGJ5IGRiMnBpY2tsZS5weSB0byBhIGRhdGFiYXNlCitwaW5kZW50LnB5ICAgICAgICAgICAgICAgIEluZGVudCBQeXRob24gY29kZSwgZ2l2aW5nIGJsb2NrLWNsb3NpbmcgY29tbWVudHMKK3B0YWdzLnB5ICAgICAgICAgICAgICAgICAgQ3JlYXRlIHZpIHRhZ3MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKK3B5ZG9jMyAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGRvY3VtZW50YXRpb24gYnJvd3NlcgorcHlzb3VyY2UucHkgICAgICAgICAgICAgICBGaW5kIFB5dGhvbiBzb3VyY2UgZmlsZXMKK3JlaW5kZW50LnB5ICAgICAgICAgICAgICAgQ2hhbmdlIC5weSBmaWxlcyB0byB1c2UgNC1zcGFjZSBpbmRlbnRzCityZWluZGVudC1yc3QucHkgICAgICAgICAgIEZpeC11cCByZVN0cnVjdHVyZWRUZXh0IGZpbGUgd2hpdGVzcGFjZQorcmdyZXAucHkgICAgICAgICAgICAgICAgICBSZXZlcnNlIGdyZXAgdGhyb3VnaCBhIGZpbGUgKHVzZWZ1bCBmb3IgYmlnIGxvZ2ZpbGVzKQorcnVuX3Rlc3RzLnB5ICAgICAgICAgICAgICBSdW4gdGhlIHRlc3Qgc3VpdGUgd2l0aCBtb3JlIHNlbnNpYmxlIGRlZmF1bHQgb3B0aW9ucworc2VydmUucHkgICAgICAgICAgICAgICAgICBTbWFsbCB3c2dpcmVmLWJhc2VkIHdlYiBzZXJ2ZXIsIHVzZWQgaW4gbWFrZSBzZXJ2ZSBpbiBEb2MKK3N1ZmYucHkgICAgICAgICAgICAgICAgICAgU29ydCBhIGxpc3Qgb2YgZmlsZXMgYnkgc3VmZml4Citzdm5lb2wucHkgICAgICAgICAgICAgICAgIFNldCBzdm46ZW9sLXN0eWxlIG9uIGFsbCBmaWxlcyBpbiBkaXJlY3RvcnkKK3RleGkyaHRtbC5weSAgICAgICAgICAgICAgQ29udmVydCBHTlUgdGV4aW5mbyBmaWxlcyBpbnRvIEhUTUwKK3RyZWVzeW5jLnB5ICAgICAgICAgICAgICAgU3luY2hyb25pemUgc291cmNlIHRyZWVzICh2ZXJ5IGlkaW9zeW5jcmF0aWMpCit1bnRhYmlmeS5weSAgICAgICAgICAgICAgIFJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcyBpbiBhcmd1bWVudCBmaWxlcword2hpY2gucHkgICAgICAgICAgICAgICAgICBGaW5kIGEgcHJvZ3JhbSBpbiAkUEFUSAord2luX2FkZDJwYXRoLnB5ICAgICAgICAgICBBZGQgUHl0aG9uIHRvIHRoZSBzZWFyY2ggcGF0aCBvbiBXaW5kb3dzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5IGIvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQppbmRleCBiNzlmZjM3Li43MzZhNDQxIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgc2VsZi5hZGRzdGF0cygiPGRpcj4iLCAiZGlycyIsIDEpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGxpc3QgJXM6ICVzXG4iICUgKGRpciwgZXJyKSkKICAgICAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgInVubGlzdGFibGUiLCAxKQogICAgICAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weSBiL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CmluZGV4IDQ5MGIzN2YuLmY1OGMzNDYgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CkBAIC00Myw3ICs0Myw3IEBACiAgICAgZm9yIGZpbGVuYW1lIGluIHN5cy5hcmd2WzE6XToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3QgPSBzdGF0ZnVuYyhmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiY2FuJ3Qgc3RhdCAlcjogJXJcbiIgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgICAgICBzdGF0dXMgPSAxCiAgICAgICAgICAgICBzdCA9ICgpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NoZWNrcGlwLnB5IGIvVG9vbHMvc2NyaXB0cy9jaGVja3BpcC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YTY0ZWRhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc2NyaXB0cy9jaGVja3BpcC5weQpAQCAtMCwwICsxLDMyIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisiIiIKK0NoZWNrcyB0aGF0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0cyBidW5kbGVkIGluIGVuc3VyZXBpcCBhcmUgdGhlIGxhdGVzdAordmVyc2lvbnMgYXZhaWxhYmxlLgorIiIiCitpbXBvcnQgZW5zdXJlcGlwCitpbXBvcnQganNvbgoraW1wb3J0IHVybGxpYi5yZXF1ZXN0CitpbXBvcnQgc3lzCisKKworZGVmIG1haW4oKToKKyAgICBvdXRvZmRhdGUgPSBGYWxzZQorCisgICAgZm9yIHByb2plY3QsIHZlcnNpb24gaW4gZW5zdXJlcGlwLl9QUk9KRUNUUzoKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHModXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3t9L2pzb24iLmZvcm1hdChwcm9qZWN0KSwKKyAgICAgICAgICAgIGNhZGVmYXVsdD1UcnVlLAorICAgICAgICApLnJlYWQoKS5kZWNvZGUoInV0ZjgiKSkKKyAgICAgICAgdXBzdHJlYW1fdmVyc2lvbiA9IGRhdGFbImluZm8iXVsidmVyc2lvbiJdCisKKyAgICAgICAgaWYgdmVyc2lvbiAhPSB1cHN0cmVhbV92ZXJzaW9uOgorICAgICAgICAgICAgb3V0b2ZkYXRlID0gVHJ1ZQorICAgICAgICAgICAgcHJpbnQoIlRoZSBsYXRlc3QgdmVyc2lvbiBvZiB7fSBvbiBQeVBJIGlzIHt9LCBidXQgZW5zdXJlcGlwICIKKyAgICAgICAgICAgICAgICAgICJoYXMge30iLmZvcm1hdChwcm9qZWN0LCB1cHN0cmVhbV92ZXJzaW9uLCB2ZXJzaW9uKSkKKworICAgIGlmIG91dG9mZGF0ZToKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weSBiL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKaW5kZXggZDRmZGNlMi4uYmJhYTNkMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQorKysgYi9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CkBAIC01LDExICs1LDExIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGZyb20gc3RhdCBpbXBvcnQgU1RfTVRJTUUKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogCiAjIFBFUCAzMTQ3IGNvbXBhdGliaWxpdHkgKFBZQyBSZXBvc2l0b3J5IERpcmVjdG9yaWVzKQotY2FjaGVfZnJvbV9zb3VyY2UgPSAoaW1wLmNhY2hlX2Zyb21fc291cmNlIGlmIGhhc2F0dHIoaW1wLCAnZ2V0X3RhZycpIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBwYXRoOiBwYXRoICsgJ2MnKQorY2FjaGVfZnJvbV9zb3VyY2UgPSAoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UgaWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZworICAgICAgICAgICAgICAgICAgICAgZWxzZSBsYW1iZGEgcGF0aDogcGF0aCArICdjJykKIAogCiBkZWYgbWFpbigpOgpAQCAtMTgsMTMgKzE4LDEzIEBACiAgICAgICAgIHNpbGVudCA9IChzeXMuYXJndlsxXSA9PSAnLXMnKQogICAgIGVsc2U6CiAgICAgICAgIHZlcmJvc2UgPSBzaWxlbnQgPSBGYWxzZQotICAgIE1BR0lDID0gaW1wLmdldF9tYWdpYygpCisgICAgTUFHSUMgPSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIKICAgICBpZiBub3Qgc2lsZW50OgogICAgICAgICBwcmludCgnVXNpbmcgTUFHSUMgd29yZCcsIHJlcHIoTUFHSUMpKQogICAgIGZvciBkaXJuYW1lIGluIHN5cy5wYXRoOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCdDYW5ub3QgbGlzdCBkaXJlY3RvcnknLCByZXByKGRpcm5hbWUpKQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbm90IHNpbGVudDoKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIG5hbWUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzdCA9IG9zLnN0YXQobmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCdDYW5ub3Qgc3RhdCcsIHJlcHIobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkgYi9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CmluZGV4IGUwMjIwYjUuLjcxNTY4M2YgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQpAQCAtMTMsMTIgKzEzLDEyIEBACiAgICAgZmlsZTEsIGZpbGUyID0gc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdCiAgICAgdHJ5OgogICAgICAgICBzdGF0MSA9IG9zLnN0YXQoZmlsZTEpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGZpbGUxICsgJzogY2Fubm90IHN0YXRcbicpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgdHJ5OgogICAgICAgICBvcy51dGltZShmaWxlMiwgKHN0YXQxW1NUX0FUSU1FXSwgc3RhdDFbU1RfTVRJTUVdKSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZmlsZTIgKyAnOiBjYW5ub3QgY2hhbmdlIHRpbWVcbicpCiAgICAgICAgIHN5cy5leGl0KDIpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZGlmZi5weSBiL1Rvb2xzL3NjcmlwdHMvZGlmZi5weQppbmRleCBmOWIxNGJmLi44YmU1MjdmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2RpZmYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9kaWZmLnB5CkBAIC0zOCw5ICszOCw5IEBACiAKICAgICBmcm9tZGF0ZSA9IGZpbGVfbXRpbWUoZnJvbWZpbGUpCiAgICAgdG9kYXRlID0gZmlsZV9tdGltZSh0b2ZpbGUpCi0gICAgd2l0aCBvcGVuKGZyb21maWxlLCAnVScpIGFzIGZmOgorICAgIHdpdGggb3Blbihmcm9tZmlsZSkgYXMgZmY6CiAgICAgICAgIGZyb21saW5lcyA9IGZmLnJlYWRsaW5lcygpCi0gICAgd2l0aCBvcGVuKHRvZmlsZSwgJ1UnKSBhcyB0ZjoKKyAgICB3aXRoIG9wZW4odG9maWxlKSBhcyB0ZjoKICAgICAgICAgdG9saW5lcyA9IHRmLnJlYWRsaW5lcygpCiAKICAgICBpZiBvcHRpb25zLnU6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKaW5kZXggZjI0YTcwMi4uYTcwNWY1NiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQpAQCAtNzAsNyArNzAsNyBAQAogZGVmIHByb2Nlc3NkaXIoZGlyLCBsaXN0bmFtZXMpOgogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3QgbGlzdCBkaXJlY3Rvcnk6ICVzXG4iICUgZGlyKQogICAgICAgICByZXR1cm4gMQogICAgIGZpbGVzID0gW10KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CmluZGV4IGI0YzA5ZWYuLmI5MjRmMjcgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgbGlua3RvID0gb3MucmVhZGxpbmsobmFtZSkKICAgICAgICAgICAgIGlmIHByb2cuc2VhcmNoKGxpbmt0bykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcHJpbnQobmFtZSwgJy0+JywgbGlua3RvKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkgYi9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQppbmRleCA4N2UyYTA5Li4xZTRjNDI4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQpAQCAtOTcsNyArOTcsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZGlybmFtZSArICc6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJyArIHN0cihtc2cpICsgJ1xuJykKICAgICAgICAgcmV0dXJuIDEKICAgICBuYW1lcy5zb3J0KCkKQEAgLTE3NSwxNyArMTc1LDE3IEBACiAgICAgdHJ5OgogICAgICAgICBzdGF0YnVmID0gb3Muc3RhdChmaWxlbmFtZSkKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwbzc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycih0ZW1wbmFtZSArICc6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgIyBUaGVuIG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUgYXMgZmlsZW5hbWV+CiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJ34nKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZmlsZW5hbWUgKyAnOiB3YXJuaW5nOiBiYWNrdXAgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihmaWxlbmFtZSArICc6IHJlbmFtZSBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZnRwbWlycm9yLnB5IGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKaW5kZXggOWU4YmUxZC4uYTFiNjgzYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgnQ3JlYXRpbmcgbG9jYWwgZGlyZWN0b3J5JywgcmVwcihsb2NhbGRpcikpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VkaXIobG9jYWxkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgdG8gZXN0YWJsaXNoIGxvY2FsIGRpcmVjdG9yeSIsIHJlcHIobG9jYWxkaXIpKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgaW5mb2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGxvY2FsZGlyLCAnLm1pcnJvcmluZm8nKQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBtb2RlWzBdID09ICdsJzoKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CkBAIC0yMTgsMTEgKzIxOCwxMSBAQAogICAgICAgICAgICAgICAgIGZwMS5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAjIElnbm9yZSB0aGUgZXJyb3IKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbmFtZSAlciB0byAlcjogJXMiICUgKHRlbXBuYW1lLCBmdWxsbmFtZSwgbXNnKSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGluZm9bZmlsZW5hbWVdID0gaW5mb3N0dWZmCkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlmIG5vdCBsb2NhbGRpcjogbmFtZXMgPSBvcy5saXN0ZGlyKG9zLmN1cmRpcikKICAgICAgICAgZWxzZTogbmFtZXMgPSBvcy5saXN0ZGlyKGxvY2FsZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgbmFtZXMgPSBbXQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBpZiBuYW1lWzBdID09ICcuJyBvciBuYW1lIGluIGluZm8gb3IgbmFtZSBpbiBzdWJkaXJzOgpAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhmdWxsbmFtZSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG5hbWVzID0gW10KICAgICAgICAgb2sgPSAxCiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpAQCAtMzIyLDEzICszMjIsMTMgQEAKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJtZGlyKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3QgcmVtb3ZlIGxvY2FsIGRpcmVjdG9yeSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICBlbHNlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgbG9jYWwgZmlsZSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICByZXR1cm4gMQpAQCAtMzg2LDcgKzM4Niw3IEBACiAgICAgYmFja3VwID0gb3MucGF0aC5qb2luKGRpciwgZm5hbWUgKyAnficpCiAgICAgdHJ5OgogICAgICAgICBvcy51bmxpbmsoYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIGZwID0gb3Blbih0ZW1wbmFtZSwgJ3cnKQogICAgIGZwLndyaXRlKCd7XG4nKQpAQCAtMzk2LDcgKzM5Niw3IEBACiAgICAgZnAuY2xvc2UoKQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weSBiL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKaW5kZXggOTgyZjQ4MC4uZTgzZjE5OCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CkBAIC0zMiwxMyArMzIsMTMgQEAKICAgICAgICAgcmV0dXJuIDEKICAgICB0cnk6CiAgICAgICAgIG9zLm1rZGlyKG5ld3RyZWUsIDBvNzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludChuZXd0cmVlICsgJzogY2Fubm90IG1rZGlyOicsIG1zZykKICAgICAgICAgcmV0dXJuIDEKICAgICBsaW5rbmFtZSA9IG9zLnBhdGguam9pbihuZXd0cmVlLCBsaW5rKQogICAgIHRyeToKICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4ob3MucGFyZGlyLCBvbGR0cmVlKSwgbGlua25hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBsaW5rX21heV9mYWlsOgogICAgICAgICAgICAgcHJpbnQobGlua25hbWUgKyAnOiBjYW5ub3Qgc3ltbGluazonLCBtc2cpCiAgICAgICAgICAgICByZXR1cm4gMQpAQCAtNTEsNyArNTEsNyBAQAogICAgIGlmIGRlYnVnOiBwcmludCgnbGlua25hbWVzJywgKG9sZCwgbmV3LCBsaW5rKSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihvbGQpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50KG9sZCArICc6IHdhcm5pbmc6IGNhbm5vdCBsaXN0ZGlyOicsIG1zZykKICAgICAgICAgcmV0dXJuCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL21kNXN1bS5weSBiL1Rvb2xzL3NjcmlwdHMvbWQ1c3VtLnB5CmluZGV4IDUyMTk2MGMuLjljZjRiZGMgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvbWQ1c3VtLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbWQ1c3VtLnB5CkBAIC05LDcgKzksNyBAQAogcm1vZGUgPSAncmInCiAKIHVzYWdlID0gIiIiCi11c2FnZTogc3VtNSBbLWJdIFstdF0gWy1sXSBbLXMgYnVmc2l6ZV0gW2ZpbGUgLi4uXQordXNhZ2U6IG1kNXN1bS5weSBbLWJdIFstdF0gWy1sXSBbLXMgYnVmc2l6ZV0gW2ZpbGUgLi4uXQogLWIgICAgICAgIDogcmVhZCBmaWxlcyBpbiBiaW5hcnkgbW9kZSAoZGVmYXVsdCkKIC10ICAgICAgICA6IHJlYWQgZmlsZXMgaW4gdGV4dCBtb2RlICh5b3UgYWxtb3N0IGNlcnRhaW5seSBkb24ndCB3YW50IHRoaXMhKQogLWwgICAgICAgIDogcHJpbnQgbGFzdCBwYXRobmFtZSBjb21wb25lbnQgb25seQpAQCAtMTcsNiArMTcsNyBAQAogZmlsZSAuLi4gIDogZmlsZXMgdG8gc3VtOyAnLScgb3Igbm8gZmlsZXMgbWVhbnMgc3RkaW4KICIiIiAlIGJ1ZnNpemUKIAoraW1wb3J0IGlvCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBnZXRvcHQKQEAgLTI0LDcgKzI1LDcgQEAKIAogZGVmIHN1bSgqZmlsZXMpOgogICAgIHN0cyA9IDAKLSAgICBpZiBmaWxlcyBhbmQgaXNpbnN0YW5jZShmaWxlc1stMV0sIGZpbGUpOgorICAgIGlmIGZpbGVzIGFuZCBpc2luc3RhbmNlKGZpbGVzWy0xXSwgaW8uSU9CYXNlKToKICAgICAgICAgb3V0LCBmaWxlcyA9IGZpbGVzWy0xXSwgZmlsZXNbOi0xXQogICAgIGVsc2U6CiAgICAgICAgIG91dCA9IHN5cy5zdGRvdXQKQEAgLTUzLDEyICs1NCwxNCBAQAogICAgIHJldHVybiBzdHMKIAogZGVmIHByaW50c3VtZnAoZnAsIGZpbGVuYW1lLCBvdXQ9c3lzLnN0ZG91dCk6Ci0gICAgbSA9IG1kNS5uZXcoKQorICAgIG0gPSBtZDUoKQogICAgIHRyeToKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKGJ1ZnNpemUpCiAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBzdHIpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZShmcC5lbmNvZGluZykKICAgICAgICAgICAgIG0udXBkYXRlKGRhdGEpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCclczogSS9PIGVycm9yOiAlc1xuJyAlIChmaWxlbmFtZSwgbXNnKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkgYi9Ub29scy9zY3JpcHRzL25kaWZmLnB5CmluZGV4IDI0MjIwOTEuLmM2ZDA5YjggMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQpAQCAtNjAsNyArNjAsNyBAQAogIyBjb3VsZG4ndCBiZSBvcGVuZWQKIGRlZiBmb3BlbihmbmFtZSk6CiAgICAgdHJ5OgotICAgICAgICByZXR1cm4gb3BlbihmbmFtZSwgJ1UnKQorICAgICAgICByZXR1cm4gb3BlbihmbmFtZSkKICAgICBleGNlcHQgSU9FcnJvciBhcyBkZXRhaWw6CiAgICAgICAgIHJldHVybiBmYWlsKCJjb3VsZG4ndCBvcGVuICIgKyBmbmFtZSArICI6ICIgKyBzdHIoZGV0YWlsKSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9wYXJzZV9odG1sNV9lbnRpdGllcy5weSBiL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzAxMTMyOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkKQEAgLTAsMCArMSwxMDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyIiIgorVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MNSBlbnRpdHkgZGVmaW5pdGlvbnMgYXZhaWxhYmxlIGZyb206CisKKyAgICBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL2VudGl0aWVzLmpzb24KKworV3JpdHRlbiBieSBFemlvIE1lbG90dGkgYW5kIEl1bGlpYSBQcm9za3VybmlhLgorCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQganNvbgorZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgorZnJvbSBodG1sLmVudGl0aWVzIGltcG9ydCBodG1sNQorCitlbnRpdGllc191cmwgPSAnaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9lbnRpdGllcy5qc29uJworCitkZWYgZ2V0X2pzb24odXJsKToKKyAgICAiIiJEb3dubG9hZCB0aGUganNvbiBmaWxlIGZyb20gdGhlIHVybCBhbmQgcmV0dXJucyBhIGRlY29kZWQgb2JqZWN0LiIiIgorICAgIHdpdGggdXJsb3Blbih1cmwpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICByZXR1cm4ganNvbi5sb2FkcyhkYXRhKQorCitkZWYgY3JlYXRlX2RpY3QoZW50aXRpZXMpOgorICAgICIiIkNyZWF0ZSB0aGUgaHRtbDUgZGljdCBmcm9tIHRoZSBkZWNvZGVkIGpzb24gb2JqZWN0LiIiIgorICAgIG5ld19odG1sNSA9IHt9CisgICAgZm9yIG5hbWUsIHZhbHVlIGluIGVudGl0aWVzLml0ZW1zKCk6CisgICAgICAgIG5ld19odG1sNVtuYW1lLmxzdHJpcCgnJicpXSA9IHZhbHVlWydjaGFyYWN0ZXJzJ10KKyAgICByZXR1cm4gbmV3X2h0bWw1CisKK2RlZiBjb21wYXJlX2RpY3RzKG9sZCwgbmV3KToKKyAgICAiIiJDb21wYXJlIHRoZSBvbGQgYW5kIG5ldyBkaWN0cyBhbmQgcHJpbnQgdGhlIGRpZmZlcmVuY2VzLiIiIgorICAgIGFkZGVkID0gbmV3LmtleXMoKSAtIG9sZC5rZXlzKCkKKyAgICBpZiBhZGRlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIGFkZGVkOicuZm9ybWF0KGxlbihhZGRlZCkpKQorICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoYWRkZWQpOgorICAgICAgICAgICAgcHJpbnQoJyAgeyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG5ld1tuYW1lXSkpCisgICAgcmVtb3ZlZCA9IG9sZC5rZXlzKCkgLSBuZXcua2V5cygpCisgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIHJlbW92ZWQ6Jy5mb3JtYXQobGVuKHJlbW92ZWQpKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHJlbW92ZWQpOgorICAgICAgICAgICAgcHJpbnQoJyAgeyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG9sZFtuYW1lXSkpCisgICAgY2hhbmdlZCA9IHNldCgpCisgICAgZm9yIG5hbWUgaW4gKG9sZC5rZXlzKCkgJiBuZXcua2V5cygpKToKKyAgICAgICAgaWYgb2xkW25hbWVdICE9IG5ld1tuYW1lXToKKyAgICAgICAgICAgIGNoYW5nZWQuYWRkKChuYW1lLCBvbGRbbmFtZV0sIG5ld1tuYW1lXSkpCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIG1vZGlmaWVkOicuZm9ybWF0KGxlbihjaGFuZ2VkKSkpCisgICAgICAgIGZvciBpdGVtIGluIHNvcnRlZChjaGFuZ2VkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0gLT4geyFyfScuZm9ybWF0KCppdGVtKSkKKworZGVmIHdyaXRlX2l0ZW1zKGVudGl0aWVzLCBmaWxlPXN5cy5zdGRvdXQpOgorICAgICIiIldyaXRlIHRoZSBpdGVtcyBvZiB0aGUgZGljdGlvbmFyeSBpbiB0aGUgc3BlY2lmaWVkIGZpbGUuIiIiCisgICAgIyBUaGUga2V5cyBpbiB0aGUgZ2VuZXJhdGVkIGRpY3Rpb25hcnkgc2hvdWxkIGJlIHNvcnRlZAorICAgICMgaW4gYSBjYXNlLWluc2Vuc2l0aXZlIHdheSwgaG93ZXZlciwgd2hlbiB0d28ga2V5cyBhcmUgZXF1YWwsCisgICAgIyB0aGUgdXBwZXJjYXNlIHZlcnNpb24gc2hvdWxkIGNvbWUgZmlyc3Qgc28gdGhhdCB0aGUgcmVzdWx0CisgICAgIyBsb29rcyBsaWtlOiBbJ0FhY3V0ZScsICdhYWN1dGUnLCAnQWFjdXRlOycsICdhYWN1dGU7JywgLi4uXQorICAgICMgVG8gZG8gdGhpcyB3ZSBmaXJzdCBzb3J0IGluIGEgY2FzZS1zZW5zaXRpdmUgd2F5IChzbyBhbGwgdGhlCisgICAgIyB1cHBlcmNhc2UgY2hhcnMgY29tZSBmaXJzdCkgYW5kIHRoZW4gc29ydCB3aXRoIGtleT1zdHIubG93ZXIuCisgICAgIyBTaW5jZSB0aGUgc29ydGluZyBpcyBzdGFibGUgdGhlIHVwcGVyY2FzZSBrZXlzIHdpbGwgZXZlbnR1YWxseQorICAgICMgYmUgYmVmb3JlIHRoZWlyIGVxdWl2YWxlbnQgbG93ZXJjYXNlIHZlcnNpb24uCisgICAga2V5cyA9IHNvcnRlZChlbnRpdGllcy5rZXlzKCkpCisgICAga2V5cyA9IHNvcnRlZChrZXlzLCBrZXk9c3RyLmxvd2VyKQorICAgIHByaW50KCdodG1sNSA9IHsnLCBmaWxlPWZpbGUpCisgICAgZm9yIG5hbWUgaW4ga2V5czoKKyAgICAgICAgcHJpbnQoJyAgICB7IXJ9OiB7IWF9LCcuZm9ybWF0KG5hbWUsIGVudGl0aWVzW25hbWVdKSwgZmlsZT1maWxlKQorICAgIHByaW50KCd9JywgZmlsZT1maWxlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgIyB3aXRob3V0IGFyZ3MgcHJpbnQgYSBkaWZmIGJldHdlZW4gaHRtbC5lbnRpdGllcy5odG1sNSBhbmQgbmV3X2h0bWw1CisgICAgIyB3aXRoIC0tY3JlYXRlIHByaW50IHRoZSBuZXcgaHRtbDUgZGljdAorICAgICMgd2l0aCAtLXBhdGNoIHBhdGNoIHRoZSBMaWIvaHRtbC9lbnRpdGllcy5weSBmaWxlCisgICAgbmV3X2h0bWw1ID0gY3JlYXRlX2RpY3QoZ2V0X2pzb24oZW50aXRpZXNfdXJsKSkKKyAgICBpZiAnLS1jcmVhdGUnIGluIHN5cy5hcmd2OgorICAgICAgICBwcmludCgnIyBtYXAgdGhlIEhUTUw1IG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIHRvIHRoZSAnCisgICAgICAgICAgICAgICdlcXVpdmFsZW50IFVuaWNvZGUgY2hhcmFjdGVyKHMpJykKKyAgICAgICAgcHJpbnQoJyMgR2VuZXJhdGVkIGJ5IHt9LiAgRG8gbm90IGVkaXQgbWFudWFsbHkuJy5mb3JtYXQoX19maWxlX18pKQorICAgICAgICB3cml0ZV9pdGVtcyhuZXdfaHRtbDUpCisgICAgZWxpZiAnLS1wYXRjaCcgaW4gc3lzLmFyZ3Y6CisgICAgICAgIGZuYW1lID0gJ0xpYi9odG1sL2VudGl0aWVzLnB5JworICAgICAgICB0ZW1wX2ZuYW1lID0gZm5hbWUgKyAnLnRlbXAnCisgICAgICAgIHdpdGggb3BlbihmbmFtZSkgYXMgZjEsIG9wZW4odGVtcF9mbmFtZSwgJ3cnKSBhcyBmMjoKKyAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjE6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdodG1sNSA9IHsnKToKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVfaXRlbXMobmV3X2h0bWw1LCBmaWxlPWYyKQorICAgICAgICAgICAgICAgICAgICBza2lwID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNraXA6CisgICAgICAgICAgICAgICAgICAgICMgc2tpcCB0aGUgb2xkIGl0ZW1zIHVudGlsIHRoZSB9CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnfScpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZjIud3JpdGUobGluZSkKKyAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQorICAgICAgICBvcy5yZW5hbWUodGVtcF9mbmFtZSwgZm5hbWUpCisgICAgZWxzZToKKyAgICAgICAgaWYgaHRtbDUgPT0gbmV3X2h0bWw1OgorICAgICAgICAgICAgcHJpbnQoJ1RoZSBjdXJyZW50IGRpY3Rpb25hcnkgaXMgdXBkYXRlZC4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tcGFyZV9kaWN0cyhodG1sNSwgbmV3X2h0bWw1KQorICAgICAgICAgICAgcHJpbnQoJ1J1biAiLi9weXRob24gezB9IC0tcGF0Y2giIHRvIHVwZGF0ZSBMaWIvaHRtbC9lbnRpdGllcy5odG1sICcKKyAgICAgICAgICAgICAgICAgICdvciAiLi9weXRob24gezB9IC0tY3JlYXRlIiB0byBzZWUgdGhlIGdlbmVyYXRlZCAnICdkaWN0aW9uYXJ5LicuZm9ybWF0KF9fZmlsZV9fKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weSBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQppbmRleCAxM2NhODY2Li4yMjQzMmQxIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CkBAIC03Myw3ICs3Myw3IEBACiAgICAgYmFkID0gMAogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJXJcbicgJSAoZGlybmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBuYW1lcy5zb3J0KCkKQEAgLTEzMSwyNCArMTMxLDI0IEBACiAgICAgICAgIG10aW1lID0gc3RhdGJ1Zi5zdF9tdGltZQogICAgICAgICBhdGltZSA9IHN0YXRidWYuc3RfYXRpbWUKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwbzc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJXIpXG4nICUgKHRlbXBuYW1lLCBtc2cpKQogICAgICMgVGhlbiBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGFzIGZpbGVuYW1lfgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBmaWxlbmFtZSArICd+JykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICMgTm93IG1vdmUgdGhlIHRlbXAgZmlsZSB0byB0aGUgb3JpZ2luYWwgZmlsZQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogcmVuYW1lIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICByZXR1cm4gMQogICAgIGlmIHByZXNlcnZlX3RpbWVzdGFtcHM6CiAgICAgICAgIGlmIGF0aW1lIGFuZCBtdGltZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgKGF0aW1lLCBtdGltZSkpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGVycignJXM6IHJlc2V0IG9mIHRpbWVzdGFtcCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weSBiL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQppbmRleCAyODcyZGMwLi4zMzMzNDIwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CkBAIC0zNzYsMTMgKzM3NiwxMyBAQAogICAgIGlmIG9zLnBhdGgubGV4aXN0cyhiYWNrdXApOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW1vdmUoYmFja3VwKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbW92ZSBiYWNrdXAgJXIiICUgKGJhY2t1cCwpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICMgZW5kIHRyeQogICAgICMgZW5kIGlmCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHByaW50KCJDYW4ndCByZW5hbWUgJXIgdG8gJXIiICUgKGZpbGVuYW1lLCBiYWNrdXApLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgIyBlbmQgdHJ5CiAjIGVuZCBkZWYgbWFrZV9iYWNrdXAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3IGIvVG9vbHMvc2NyaXB0cy9weWRvY2d1aS5weXcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOWEzZDYuLjAwMDAwMDAKLS0tIGEvVG9vbHMvc2NyaXB0cy9weWRvY2d1aS5weXcKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMgTm90ZTogIHRoaXMgZmlsZSBtdXN0IG5vdCBiZSBuYW1lZCBweWRvYy5weXcsIGxlc3QgaXQganVzdCBlbmQgdXAKLSMgaW1wb3J0aW5nIGl0c2VsZiAoUHl0aG9uIGJlZ2FuIGFsbG93aW5nIGltcG9ydCBvZiAucHl3IGZpbGVzCi0jIGJldHdlZW4gMi4yYTEgYW5kIDIuMmEyKS4KLWltcG9ydCBweWRvYwotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgcHlkb2MuZ3VpKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkgYi9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CmluZGV4IDRhOTE2ZWEuLjE4NDI0ZGUgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQpAQCAtNTIsOCArNTIsOCBAQAogcmVjdXJzZSA9IEZhbHNlCiBkcnlydW4gPSBGYWxzZQogbWFrZWJhY2t1cCA9IFRydWUKKyMgQSBzcGVjaWZpZWQgbmV3bGluZSB0byBiZSB1c2VkIGluIHRoZSBvdXRwdXQgKHNldCBieSAtLW5ld2xpbmUgb3B0aW9uKQogc3BlY19uZXdsaW5lID0gTm9uZQotIiIiQSBzcGVjaWZpZWQgbmV3bGluZSB0byBiZSB1c2VkIGluIHRoZSBvdXRwdXQgKHNldCBieSAtLW5ld2xpbmUgb3B0aW9uKSIiIgogCiAKIGRlZiB1c2FnZShtc2c9Tm9uZSk6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5IGIvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQppbmRleCBiMjY0OWM0Li42NTJkMzk0IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgcHJpbnQoImNyZWF0aW5nIHNsYXZlIGRpcmVjdG9yeSIsIHNsYXZlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2RpcihzbGF2ZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoImNhbid0IG1ha2Ugc2xhdmUgZGlyZWN0b3J5Iiwgc2xhdmUsICI6IiwgbXNnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5IGIvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQppbmRleCA0YjY3YzE1Li44NjFjODNjIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKQEAgLTM5LDExICszOSwxMSBAQAogICAgIGJhY2t1cCA9IGZpbGVuYW1lICsgIn4iCiAgICAgdHJ5OgogICAgICAgICBvcy51bmxpbmsoYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgogICAgICAgICBmLndyaXRlKG5ld3RleHQpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3doaWNoLnB5IGIvVG9vbHMvc2NyaXB0cy93aGljaC5weQppbmRleCA0ZmMzN2EwLi5kZjU0Y2UwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3doaWNoLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpciwgcHJvZykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZW5hbWUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgbm90IFNfSVNSRUcoc3RbU1RfTU9ERV0pOgogICAgICAgICAgICAgICAgIG1zZyhmaWxlbmFtZSArICc6IG5vdCBhIGRpc2sgZmlsZScpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weSBiL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5CmluZGV4IDkyNTliNDQuLmM4NWJlYTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5CkBAIC0zMCw3ICszMCw3IEBACiAgICAgd2l0aCB3aW5yZWcuQ3JlYXRlS2V5KEhLQ1UsIEVOVikgYXMga2V5OgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbnZwYXRoID0gd2lucmVnLlF1ZXJ5VmFsdWVFeChrZXksIFBBVEgpWzBdCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgZW52cGF0aCA9IERFRkFVTFQKIAogICAgICAgICBwYXRocyA9IFtlbnZwYXRoXQpkaWZmIC0tZ2l0IGEvVG9vbHMvc3NsL3Rlc3RfbXVsdGlwbGVfdmVyc2lvbnMucHkgYi9Ub29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDU3ZGNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc3NsL3Rlc3RfbXVsdGlwbGVfdmVyc2lvbnMucHkKQEAgLTAsMCArMSwyNDEgQEAKKyMuL3B5dGhvbgorIiIiUnVuIFB5dGhvbiB0ZXN0cyB3aXRoIG11bHRpcGxlIGluc3RhbGxhdGlvbnMgb2YgT3BlblNTTAorCitUaGUgc2NyaXB0CisKKyAgKDEpIGRvd25sb2FkcyBPcGVuU1NMIHRhciBidW5kbGUKKyAgKDIpIGV4dHJhY3RzIGl0IHRvIC4uL29wZW5zc2wvc3JjL29wZW5zc2wtVkVSU0lPTi8KKyAgKDMpIGNvbXBpbGVzIE9wZW5TU0wKKyAgKDQpIGluc3RhbGxzIE9wZW5TU0wgaW50byAuLi9vcGVuc3NsL1ZFUlNJT04vCisgICg1KSBmb3JjZXMgYSByZWNvbXBpbGF0aW9uIG9mIFB5dGhvbiBtb2R1bGVzIHVzaW5nIHRoZQorICAgICAgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGZyb20gLi4vb3BlbnNzbC9WRVJTSU9OLworICAoNikgcnVucyBQeXRob24ncyB0ZXN0IHN1aXRlCisKK1RoZSBzY3JpcHQgbXVzdCBiZSBydW4gd2l0aCBQeXRob24ncyBidWlsZCBkaXJlY3RvcnkgYXMgY3VycmVudCB3b3JraW5nCitkaXJlY3Rvcnk6CisKKyAgICAuL3B5dGhvbiBUb29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weQorCitUaGUgc2NyaXB0IHVzZXMgTERfUlVOX1BBVEgsIExEX0xJQlJBUllfUEFUSCwgQ1BQRkxBR1MgYW5kIExERkxBR1MgdG8gYmVuZAorc2VhcmNoIHBhdGhzIGZvciBoZWFkZXIgZmlsZXMgYW5kIHNoYXJlZCBsaWJyYXJpZXMuIEl0J3Mga25vd24gdG8gd29yayBvbgorTGludXggd2l0aCBHQ0MgNC54LgorCisoYykgMjAxMyBDaHJpc3RpYW4gSGVpbWVzIDxjaHJpc3RpYW5AcHl0aG9uLm9yZz4KKyIiIgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRhcmZpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJtdWx0aXNzbCIpCisKK09QRU5TU0xfVkVSU0lPTlMgPSBbCisgICAgIjAuOS43bSIsICIwLjkuOGkiLCAiMC45LjhsIiwgIjAuOS44bSIsICIwLjkuOHkiLCAiMS4wLjBrIiwgIjEuMC4xZSIKK10KK0ZVTExfVEVTVFMgPSBbCisgICAgInRlc3RfYXN5bmNpbyIsICJ0ZXN0X2Z0cGxpYiIsICJ0ZXN0X2hhc2hsaWIiLCAidGVzdF9odHRwbGliIiwKKyAgICAidGVzdF9pbWFwbGliIiwgInRlc3Rfbm50cGxpYiIsICJ0ZXN0X3BvcGxpYiIsICJ0ZXN0X3NtdHBsaWIiLAorICAgICJ0ZXN0X3NtdHBuZXQiLCAidGVzdF91cmxsaWIyX2xvY2FsbmV0IiwgInRlc3RfdmVudiIKK10KK01JTklNQUxfVEVTVFMgPSBbInRlc3Rfc3NsIiwgInRlc3RfaGFzaGxpYiJdCitDQURFRkFVTFQgPSBUcnVlCitIRVJFID0gb3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgpKQorREVTVF9ESVIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKEhFUkUsIG9zLnBhcmRpciwgIm9wZW5zc2wiKSkKKworCitjbGFzcyBCdWlsZFNTTDoKKyAgICB1cmxfdGVtcGxhdGUgPSAiaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL29wZW5zc2wte30udGFyLmd6IgorCisgICAgbW9kdWxlX2ZpbGVzID0gWyJNb2R1bGVzL19zc2wuYyIsCisgICAgICAgICAgICAgICAgICAgICJNb2R1bGVzL3NvY2tldG1vZHVsZS5jIiwKKyAgICAgICAgICAgICAgICAgICAgIk1vZHVsZXMvX2hhc2hvcGVuc3NsLmMiXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24sIG9wZW5zc2xfY29tcGlsZV9hcmdzPSgpLCBkZXN0ZGlyPURFU1RfRElSKToKKyAgICAgICAgc2VsZi5fY2hlY2tfcHl0aG9uX2J1aWxkZGlyKCkKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gdmVyc2lvbgorICAgICAgICBzZWxmLm9wZW5zc2xfY29tcGlsZV9hcmdzID0gb3BlbnNzbF9jb21waWxlX2FyZ3MKKyAgICAgICAgIyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CisgICAgICAgIHNlbGYuaW5zdGFsbF9kaXIgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgdmVyc2lvbikKKyAgICAgICAgIyBzb3VyY2UgZmlsZQorICAgICAgICBzZWxmLnNyY19maWxlID0gb3MucGF0aC5qb2luKGRlc3RkaXIsICJzcmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuc3NsLXt9LnRhci5neiIuZm9ybWF0KHZlcnNpb24pKQorICAgICAgICAjIGJ1aWxkIGRpcmVjdG9yeSAocmVtb3ZlZCBhZnRlciBpbnN0YWxsKQorICAgICAgICBzZWxmLmJ1aWxkX2RpciA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCAic3JjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZW5zc2wte30iLmZvcm1hdCh2ZXJzaW9uKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvcGVuc3NsX2NsaShzZWxmKToKKyAgICAgICAgIiIib3BlbnNzbCBDTEkgYmluYXJ5IiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5pbnN0YWxsX2RpciwgImJpbiIsICJvcGVuc3NsIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvcGVuc3NsX3ZlcnNpb24oc2VsZik6CisgICAgICAgICIiIm91dHB1dCBvZiAnYmluL29wZW5zc2wgdmVyc2lvbiciIiIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJMRF9MSUJSQVJZX1BBVEgiXSA9IHNlbGYubGliX2RpcgorICAgICAgICBjbWQgPSBbc2VsZi5vcGVuc3NsX2NsaSwgInZlcnNpb24iXQorICAgICAgICByZXR1cm4gc2VsZi5fc3VicHJvY2Vzc19vdXRwdXQoY21kLCBlbnY9ZW52KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHB5c3NsX3ZlcnNpb24oc2VsZik6CisgICAgICAgICIiIlZhbHVlIG9mIHNzbC5PUEVOU1NMX1ZFUlNJT04iIiIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJMRF9MSUJSQVJZX1BBVEgiXSA9IHNlbGYubGliX2RpcgorICAgICAgICBjbWQgPSBbIi4vcHl0aG9uIiwgIi1jIiwgImltcG9ydCBzc2w7IHByaW50KHNzbC5PUEVOU1NMX1ZFUlNJT04pIl0KKyAgICAgICAgcmV0dXJuIHNlbGYuX3N1YnByb2Nlc3Nfb3V0cHV0KGNtZCwgZW52PWVudikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbmNsdWRlX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyLCAiaW5jbHVkZSIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGliX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyLCAibGliIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfb3BlbnNzbChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNmaWxlKHNlbGYub3BlbnNzbF9jbGkpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGFzX3NyYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNmaWxlKHNlbGYuc3JjX2ZpbGUpCisKKyAgICBkZWYgX3N1YnByb2Nlc3NfY2FsbChzZWxmLCBjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIGVudj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgbG9nLmRlYnVnKCJDYWxsICd7fSciLmZvcm1hdCgiICIuam9pbihjbWQpKSkKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHN0ZG91dD1zdGRvdXQsIGVudj1lbnYsICoqa3dhcmdzKQorCisgICAgZGVmIF9zdWJwcm9jZXNzX291dHB1dChzZWxmLCBjbWQsIGVudj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGxvZy5kZWJ1ZygiQ2FsbCAne30nIi5mb3JtYXQoIiAiLmpvaW4oY21kKSkpCisgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgZW52PWVudikKKyAgICAgICAgcmV0dXJuIG91dC5zdHJpcCgpLmRlY29kZSgidXRmLTgiKQorCisgICAgZGVmIF9jaGVja19weXRob25fYnVpbGRkaXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgicHl0aG9uIikgb3Igbm90IG9zLnBhdGguaXNmaWxlKCJzZXR1cC5weSIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU2NyaXB0IG11c3QgYmUgcnVuIGluIFB5dGhvbiBidWlsZCBkaXJlY3RvcnkiKQorCisgICAgZGVmIF9kb3dubG9hZF9vcGVuc3NsKHNlbGYpOgorICAgICAgICAiIiJEb3dubG9hZCBPcGVuU1NMIHNvdXJjZSBkaXN0IiIiCisgICAgICAgIHNyY19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5zcmNfZmlsZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3JjX2Rpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzcmNfZGlyKQorICAgICAgICB1cmwgPSBzZWxmLnVybF90ZW1wbGF0ZS5mb3JtYXQoc2VsZi52ZXJzaW9uKQorICAgICAgICBsb2cuaW5mbygiRG93bmxvYWRpbmcgT3BlblNTTCBmcm9tIHt9Ii5mb3JtYXQodXJsKSkKKyAgICAgICAgcmVxID0gdXJsb3Blbih1cmwsIGNhZGVmYXVsdD1DQURFRkFVTFQpCisgICAgICAgICMgS0lTUywgcmVhZCBhbGwsIHdyaXRlIGFsbAorICAgICAgICBkYXRhID0gcmVxLnJlYWQoKQorICAgICAgICBsb2cuaW5mbygiU3RvcmluZyB7fSIuZm9ybWF0KHNlbGYuc3JjX2ZpbGUpKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zcmNfZmlsZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKworICAgIGRlZiBfdW5wYWNrX29wZW5zc2woc2VsZik6CisgICAgICAgICIiIlVucGFjayB0YXIuZ3ogYnVuZGxlIiIiCisgICAgICAgICMgY2xlYW51cAorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYuYnVpbGRfZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5idWlsZF9kaXIpCisgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuYnVpbGRfZGlyKQorCisgICAgICAgIHRmID0gdGFyZmlsZS5vcGVuKHNlbGYuc3JjX2ZpbGUpCisgICAgICAgIGJhc2UgPSAib3BlbnNzbC17fS8iLmZvcm1hdChzZWxmLnZlcnNpb24pCisgICAgICAgICMgZm9yY2UgZXh0cmFjdGlvbiBpbnRvIGJ1aWxkIGRpcgorICAgICAgICBtZW1iZXJzID0gdGYuZ2V0bWVtYmVycygpCisgICAgICAgIGZvciBtZW1iZXIgaW4gbWVtYmVyczoKKyAgICAgICAgICAgIGlmIG5vdCBtZW1iZXIubmFtZS5zdGFydHN3aXRoKGJhc2UpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobWVtYmVyLm5hbWUpCisgICAgICAgICAgICBtZW1iZXIubmFtZSA9IG1lbWJlci5uYW1lW2xlbihiYXNlKTpdCisgICAgICAgIGxvZy5pbmZvKCJVbnBhY2tpbmcgZmlsZXMgdG8ge30iLmZvcm1hdChzZWxmLmJ1aWxkX2RpcikpCisgICAgICAgIHRmLmV4dHJhY3RhbGwoc2VsZi5idWlsZF9kaXIsIG1lbWJlcnMpCisKKyAgICBkZWYgX2J1aWxkX29wZW5zc2woc2VsZik6CisgICAgICAgICIiIk5vdyBidWlsZCBvcGVuc3NsIiIiCisgICAgICAgIGxvZy5pbmZvKCJSdW5uaW5nIGJ1aWxkIGluIHt9Ii5mb3JtYXQoc2VsZi5pbnN0YWxsX2RpcikpCisgICAgICAgIGN3ZCA9IHNlbGYuYnVpbGRfZGlyCisgICAgICAgIGNtZCA9IFsiLi9jb25maWciLCAic2hhcmVkIiwgIi0tcHJlZml4PXt9Ii5mb3JtYXQoc2VsZi5pbnN0YWxsX2RpcildCisgICAgICAgIGNtZC5leHRlbmQoc2VsZi5vcGVuc3NsX2NvbXBpbGVfYXJncykKKyAgICAgICAgc2VsZi5fc3VicHJvY2Vzc19jYWxsKGNtZCwgY3dkPWN3ZCkKKyAgICAgICAgc2VsZi5fc3VicHJvY2Vzc19jYWxsKFsibWFrZSJdLCBjd2Q9Y3dkKQorCisgICAgZGVmIF9pbnN0YWxsX29wZW5zc2woc2VsZiwgcmVtb3ZlPVRydWUpOgorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX2NhbGwoWyJtYWtlIiwgImluc3RhbGwiXSwgY3dkPXNlbGYuYnVpbGRfZGlyKQorICAgICAgICBpZiByZW1vdmU6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuYnVpbGRfZGlyKQorCisgICAgZGVmIGluc3RhbGxfb3BlbnNzbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX29wZW5zc2w6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5oYXNfc3JjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Rvd25sb2FkX29wZW5zc2woKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkFscmVhZHkgaGFzIHNyYyB7fSIuZm9ybWF0KHNlbGYuc3JjX2ZpbGUpKQorICAgICAgICAgICAgc2VsZi5fdW5wYWNrX29wZW5zc2woKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRfb3BlbnNzbCgpCisgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX29wZW5zc2woKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmluZm8oIkFscmVhZHkgaGFzIGluc3RhbGxhdGlvbiB7fSIuZm9ybWF0KHNlbGYuaW5zdGFsbF9kaXIpKQorICAgICAgICAjIHZhbGlkYXRlIGluc3RhbGxhdGlvbgorICAgICAgICB2ZXJzaW9uID0gc2VsZi5vcGVuc3NsX3ZlcnNpb24KKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uIG5vdCBpbiB2ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih2ZXJzaW9uKQorCisgICAgZGVmIHRvdWNoX3B5bW9kcyhzZWxmKToKKyAgICAgICAgIyBmb3JjZSBhIHJlYnVpbGQgb2YgYWxsIG1vZHVsZXMgdGhhdCB1c2UgT3BlblNTTCBBUElzCisgICAgICAgIGZvciBmbmFtZSBpbiBzZWxmLm1vZHVsZV9maWxlczoKKyAgICAgICAgICAgIG9zLnV0aW1lKGZuYW1lKQorCisgICAgZGVmIHJlY29tcGlsZV9weW1vZHMoc2VsZik6CisgICAgICAgIGxvZy5pbmZvKCJVc2luZyBPcGVuU1NMIGJ1aWxkIGZyb20ge30iLmZvcm1hdChzZWxmLmJ1aWxkX2RpcikpCisgICAgICAgICMgb3ZlcndyaXRlIGhlYWRlciBhbmQgbGlicmFyeSBzZWFyY2ggcGF0aHMKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJDUFBGTEFHUyJdID0gIi1Je30iLmZvcm1hdChzZWxmLmluY2x1ZGVfZGlyKQorICAgICAgICBlbnZbIkxERkxBR1MiXSA9ICItTHt9Ii5mb3JtYXQoc2VsZi5saWJfZGlyKQorICAgICAgICAjIHNldCBycGF0aAorICAgICAgICBlbnZbIkxEX1JVTl9QQVRIIl0gPSBzZWxmLmxpYl9kaXIKKworICAgICAgICBsb2cuaW5mbygiUmVidWlsZGluZyBQeXRob24gbW9kdWxlcyIpCisgICAgICAgIHNlbGYudG91Y2hfcHltb2RzKCkKKyAgICAgICAgY21kID0gWyIuL3B5dGhvbiIsICJzZXR1cC5weSIsICJidWlsZCJdCisgICAgICAgIHNlbGYuX3N1YnByb2Nlc3NfY2FsbChjbWQsIGVudj1lbnYpCisKKyAgICBkZWYgY2hlY2tfcHlzc2woc2VsZik6CisgICAgICAgIHZlcnNpb24gPSBzZWxmLnB5c3NsX3ZlcnNpb24KKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uIG5vdCBpbiB2ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih2ZXJzaW9uKQorCisgICAgZGVmIHJ1bl9weXRlc3RzKHNlbGYsICphcmdzKToKKyAgICAgICAgY21kID0gWyIuL3B5dGhvbiIsICItbSIsICJ0ZXN0Il0KKyAgICAgICAgY21kLmV4dGVuZChhcmdzKQorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX2NhbGwoY21kLCBzdGRvdXQ9Tm9uZSkKKworICAgIGRlZiBydW5fcHl0aG9uX3Rlc3RzKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWNvbXBpbGVfcHltb2RzKCkKKyAgICAgICAgc2VsZi5jaGVja19weXNzbCgpCisgICAgICAgIHNlbGYucnVuX3B5dGVzdHMoKmFyZ3MpCisKKworZGVmIG1haW4oKmFyZ3MpOgorICAgIGJ1aWxkZXJzID0gW10KKyAgICBmb3IgdmVyc2lvbiBpbiBPUEVOU1NMX1ZFUlNJT05TOgorICAgICAgICBpZiB2ZXJzaW9uIGluICgiMC45LjhpIiwgIjAuOS44bCIpOgorICAgICAgICAgICAgb3BlbnNzbF9jb21waWxlX2FyZ3MgPSAoIm5vLWFzbSIsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3BlbnNzbF9jb21waWxlX2FyZ3MgPSAoKQorICAgICAgICBidWlsZGVyID0gQnVpbGRTU0wodmVyc2lvbiwgb3BlbnNzbF9jb21waWxlX2FyZ3MpCisgICAgICAgIGJ1aWxkZXIuaW5zdGFsbF9vcGVuc3NsKCkKKyAgICAgICAgYnVpbGRlcnMuYXBwZW5kKGJ1aWxkZXIpCisKKyAgICBmb3IgYnVpbGRlciBpbiBidWlsZGVyczoKKyAgICAgICAgYnVpbGRlci5ydW5fcHl0aG9uX3Rlc3RzKCphcmdzKQorICAgICMgZmluYWwgdG91Y2gKKyAgICBidWlsZGVyLnRvdWNoX3B5bW9kcygpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iKioqICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMiKQorICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgYXJncyA9IFsiLXVuZXR3b3JrIiwgIi12Il0KKyAgICAgICAgYXJncy5leHRlbmQoRlVMTF9URVNUUykKKyAgICBtYWluKCphcmdzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkgYi9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQppbmRleCAxNDJiM2NhLi41YWJjMjVhIDEwMDY0NAotLS0gYS9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQorKysgYi9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQpAQCAtODA4LDcgKzgwOCw3IEBACiBwcm9ncmFtbWVycyByZXBvcnQgc3Vic3RhbnRpYWwgcHJvZHVjdGl2aXR5IGdhaW5zIGFuZCBmZWVsIHRoZSBsYW5ndWFnZQogZW5jb3VyYWdlcyB0aGUgZGV2ZWxvcG1lbnQgb2YgaGlnaGVyIHF1YWxpdHksIG1vcmUgbWFpbnRhaW5hYmxlIGNvZGUuCiAKLVB5dGhvbiBydW5zIG9uIFdpbmRvd3MsIExpbnV4L1VuaXgsIE1hYyBPUyBYLCBPUy8yLCBBbWlnYSwgUGFsbQorUHl0aG9uIHJ1bnMgb24gV2luZG93cywgTGludXgvVW5peCwgTWFjIE9TIFgsIEFtaWdhLCBQYWxtCiBIYW5kaGVsZHMsIGFuZCBOb2tpYSBtb2JpbGUgcGhvbmVzLiBQeXRob24gaGFzIGFsc28gYmVlbiBwb3J0ZWQgdG8gdGhlCiBKYXZhIGFuZCAuTkVUIHZpcnR1YWwgbWFjaGluZXMuCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkgYi9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CmluZGV4IGY1YTFhZjMuLmY0YzdjMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKKysrIGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQpAQCAtMjkwLDI3ICsyOTAsMjcgQEAKIAogY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKIAotICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ18lcykKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LCBlcnJvcnMsIGVuY29kaW5nXyVzKQogCi0gICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6Ci0gICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nXyVzKQorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIGVycm9ycywgZGVjb2RpbmdfJXMpCiAnJycgJSAoZW5jb2RpbmduYW1lLCBuYW1lLCBzdWZmaXgsIHN1ZmZpeCldCiAgICAgbC5hcHBlbmQoJycnXAogY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgogICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ18lcylbMF0KKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCwgc2VsZi5lcnJvcnMsIGVuY29kaW5nXyVzKVswXQogCiBjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CiAgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nXyVzKVswXScnJyAlCisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIHNlbGYuZXJyb3JzLCBkZWNvZGluZ18lcylbMF0nJycgJQogICAgICAgICAoc3VmZml4LCBzdWZmaXgpKQogCiAgICAgbC5hcHBlbmQoJycnCi1jbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgogICAgIHBhc3MKIAotY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtUmVhZGVyKToKICAgICBwYXNzCiAKICMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQpAQCAtMzQzLDcgKzM0Myw3IEBACiAgICAgaWYgZGVjb2RpbmdfdGFibGVfY29kZToKICAgICAgICAgbC5hcHBlbmQoJycnCiAjIyMgRW5jb2RpbmcgdGFibGUKLWVuY29kaW5nX3RhYmxlPWNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQorZW5jb2RpbmdfdGFibGUgPSBjb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKICcnJykKICAgICBlbHNlOgogICAgICAgICBsLmFwcGVuZCgnJycKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5IGIvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKaW5kZXggYmMzZDBjYi4uMDk0MjUwOCAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKKysrIGIvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKQEAgLTM3LDcgKzM3LDcgQEAKIFZFUlNJT04gPSAiMy4yIgogCiAjIFRoZSBVbmljb2RlIERhdGFiYXNlCi1VTklEQVRBX1ZFUlNJT04gPSAiNi4xLjAiCitVTklEQVRBX1ZFUlNJT04gPSAiNi4zLjAiCiBVTklDT0RFX0RBVEEgPSAiVW5pY29kZURhdGElcy50eHQiCiBDT01QT1NJVElPTl9FWENMVVNJT05TID0gIkNvbXBvc2l0aW9uRXhjbHVzaW9ucyVzLnR4dCIKIEVBU1RBU0lBTl9XSURUSCA9ICJFYXN0QXNpYW5XaWR0aCVzLnR4dCIKQEAgLTY4LDcgKzY4LDcgQEAKIAogQklESVJFQ1RJT05BTF9OQU1FUyA9IFsgIiIsICJMIiwgIkxSRSIsICJMUk8iLCAiUiIsICJBTCIsICJSTEUiLCAiUkxPIiwKICAgICAiUERGIiwgIkVOIiwgIkVTIiwgIkVUIiwgIkFOIiwgIkNTIiwgIk5TTSIsICJCTiIsICJCIiwgIlMiLCAiV1MiLAotICAgICJPTiIgXQorICAgICJPTiIsICJMUkkiLCAiUkxJIiwgIkZTSSIsICJQREkiIF0KIAogRUFTVEFTSUFOV0lEVEhfTkFNRVMgPSBbICJGIiwgIkgiLCAiVyIsICJOYSIsICJBIiwgIk4iIF0KIApAQCAtNTUyLDcgKzU1Miw3IEBACiAgICAgcHJpbnQoIi8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgYmlkaXJlY3Rpb25hbCIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuIiwgZmlsZT1mcCkKICAgICBwcmludCgiICovIiwgZmlsZT1mcCkKLSAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKKyAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKICAgICBwcmludCgneycsIGZpbGU9ZnApCiAgICAgcHJpbnQoJyAgICBzd2l0Y2ggKGNoKSB7JywgZmlsZT1mcCkKIApAQCAtNTcwLDcgKzU3MCw3IEBACiAgICAgcHJpbnQoIiAqIHByb3BlcnR5ICdCSycsICdDUicsICdMRicgb3IgJ05MJyBvciBoYXZpbmcgYmlkaXJlY3Rpb25hbCIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqIHR5cGUgJ0InLCAwIG90aGVyd2lzZS4iLCBmaWxlPWZwKQogICAgIHByaW50KCIgKi8iLCBmaWxlPWZwKQotICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKICAgICBwcmludCgneycsIGZpbGU9ZnApCiAgICAgcHJpbnQoJyAgICBzd2l0Y2ggKGNoKSB7JywgZmlsZT1mcCkKICAgICBmb3IgY29kZXBvaW50IGluIHNvcnRlZChsaW5lYnJlYWtzKToKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvcHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVCBiL1Rvb2xzL3VuaWNvZGUvcHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmI1ZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvdW5pY29kZS9weXRob24tbWFwcGluZ3MvQ1AyNzMuVFhUCkBAIC0wLDAgKzEsMjU4IEBACisweDAwCTB4MDAwMAkjTlVMTCAoTlVMKQorMHgwMQkweDAwMDEJI1NUQVJUIE9GIEhFQURJTkcgKFNPSCkKKzB4MDIJMHgwMDAyCSNTVEFSVCBPRiBURVhUIChTVFgpCisweDAzCTB4MDAwMwkjRU5EIE9GIFRFWFQgKEVUWCkKKzB4MDQJMHgwMDlDCSNTVFJJTkcgVEVSTUlOQVRPUiAoU1QpCisweDA1CTB4MDAwOQkjQ0hBUkFDVEVSIFRBQlVMQVRJT04gKEhUKQorMHgwNgkweDAwODYJI1NUQVJUIE9GIFNFTEVDVEVEIEFSRUEgKFNTQSkKKzB4MDcJMHgwMDdGCSNERUxFVEUgKERFTCkKKzB4MDgJMHgwMDk3CSNFTkQgT0YgR1VBUkRFRCBBUkVBIChFUEEpCisweDA5CTB4MDA4RAkjUkVWRVJTRSBMSU5FIEZFRUQgKFJJKQorMHgwQQkweDAwOEUJI1NJTkdMRS1TSElGVCBUV08gKFNTMikKKzB4MEIJMHgwMDBCCSNMSU5FIFRBQlVMQVRJT04gKFZUKQorMHgwQwkweDAwMEMJI0ZPUk0gRkVFRCAoRkYpCisweDBECTB4MDAwRAkjQ0FSUklBR0UgUkVUVVJOIChDUikKKzB4MEUJMHgwMDBFCSNTSElGVCBPVVQgKFNPKQorMHgwRgkweDAwMEYJI1NISUZUIElOIChTSSkKKzB4MTAJMHgwMDEwCSNEQVRBTElOSyBFU0NBUEUgKERMRSkKKzB4MTEJMHgwMDExCSNERVZJQ0UgQ09OVFJPTCBPTkUgKERDMSkKKzB4MTIJMHgwMDEyCSNERVZJQ0UgQ09OVFJPTCBUV08gKERDMikKKzB4MTMJMHgwMDEzCSNERVZJQ0UgQ09OVFJPTCBUSFJFRSAoREMzKQorMHgxNAkweDAwOUQJI09QRVJBVElORyBTWVNURU0gQ09NTUFORCAoT1NDKQorMHgxNQkweDAwODUJI05FWFQgTElORSAoTkVMKQorMHgxNgkweDAwMDgJI0JBQ0tTUEFDRSAoQlMpCisweDE3CTB4MDA4NwkjRU5EIE9GIFNFTEVDVEVEIEFSRUEgKEVTQSkKKzB4MTgJMHgwMDE4CSNDQU5DRUwgKENBTikKKzB4MTkJMHgwMDE5CSNFTkQgT0YgTUVESVVNIChFTSkKKzB4MUEJMHgwMDkyCSNQUklWQVRFIFVTRSBUV08gKFBVMikKKzB4MUIJMHgwMDhGCSNTSU5HTEUtU0hJRlQgVEhSRUUgKFNTMykKKzB4MUMJMHgwMDFDCSNGSUxFIFNFUEFSQVRPUiAoSVM0KQorMHgxRAkweDAwMUQJI0dST1VQIFNFUEFSQVRPUiAoSVMzKQorMHgxRQkweDAwMUUJI1JFQ09SRCBTRVBBUkFUT1IgKElTMikKKzB4MUYJMHgwMDFGCSNVTklUIFNFUEFSQVRPUiAoSVMxKQorMHgyMAkweDAwODAJI1BBRERJTkcgQ0hBUkFDVEVSIChQQUQpCisweDIxCTB4MDA4MQkjSElHSCBPQ1RFVCBQUkVTRVQgKEhPUCkKKzB4MjIJMHgwMDgyCSNCUkVBSyBQRVJNSVRURUQgSEVSRSAoQlBIKQorMHgyMwkweDAwODMJI05PIEJSRUFLIEhFUkUgKE5CSCkKKzB4MjQJMHgwMDg0CSNJTkRFWCAoSU5EKQorMHgyNQkweDAwMEEJI0xJTkUgRkVFRCAoTEYpCisweDI2CTB4MDAxNwkjRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSyAoRVRCKQorMHgyNwkweDAwMUIJI0VTQ0FQRSAoRVNDKQorMHgyOAkweDAwODgJI0NIQVJBQ1RFUiBUQUJVTEFUSU9OIFNFVCAoSFRTKQorMHgyOQkweDAwODkJI0NIQVJBQ1RFUiBUQUJVTEFUSU9OIFdJVEggSlVTVElGSUNBVElPTiAoSFRKKQorMHgyQQkweDAwOEEJI0xJTkUgVEFCVUxBVElPTiBTRVQgKFZUUykKKzB4MkIJMHgwMDhCCSNQQVJUSUFMIExJTkUgRk9SV0FSRCAoUExEKQorMHgyQwkweDAwOEMJI1BBUlRJQUwgTElORSBCQUNLV0FSRCAoUExVKQorMHgyRAkweDAwMDUJI0VOUVVJUlkgKEVOUSkKKzB4MkUJMHgwMDA2CSNBQ0tOT1dMRURHRSAoQUNLKQorMHgyRgkweDAwMDcJI0JFTEwgKEJFTCkKKzB4MzAJMHgwMDkwCSNERVZJQ0UgQ09OVFJPTCBTVFJJTkcgKERDUykKKzB4MzEJMHgwMDkxCSNQUklWQVRFIFVTRSBPTkUgKFBVMSkKKzB4MzIJMHgwMDE2CSNTWU5DSFJPTk9VUyBJRExFIChTWU4pCisweDMzCTB4MDA5MwkjU0VUIFRSQU5TTUlUIFNUQVRFIChTVFMpCisweDM0CTB4MDA5NAkjQ0FOQ0VMIENIQVJBQ1RFUiAoQ0NIKQorMHgzNQkweDAwOTUJI01FU1NBR0UgV0FJVElORyAoTVcpCisweDM2CTB4MDA5NgkjU1RBUlQgT0YgR1VBUkRFRCBBUkVBIChTUEEpCisweDM3CTB4MDAwNAkjRU5EIE9GIFRSQU5TTUlTU0lPTiAoRU9UKQorMHgzOAkweDAwOTgJI1NUQVJUIE9GIFNUUklORyAoU09TKQorMHgzOQkweDAwOTkJI1NJTkdMRSBHUkFQSElDIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTR0NJKQorMHgzQQkweDAwOUEJI1NJTkdMRSBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0NJKQorMHgzQgkweDAwOUIJI0NPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUiAoQ1NJKQorMHgzQwkweDAwMTQJI0RFVklDRSBDT05UUk9MIEZPVVIgKERDNCkKKzB4M0QJMHgwMDE1CSNORUdBVElWRSBBQ0tOT1dMRURHRSAoTkFLKQorMHgzRQkweDAwOUUJI1BSSVZBQ1kgTUVTU0FHRSAoUE0pCisweDNGCTB4MDAxQQkjU1VCU1RJVFVURSAoU1VCKQorMHg0MAkweDAwMjAJI1NQQUNFCisweDQxCTB4MDBBMAkjTk8tQlJFQUsgU1BBQ0UKKzB4NDIJMHgwMEUyCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKzB4NDMJMHgwMDdCCSNMRUZUIENVUkxZIEJSQUNLRVQKKzB4NDQJMHgwMEUwCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisweDQ1CTB4MDBFMQkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURQorMHg0NgkweDAwRTMJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKKzB4NDcJMHgwMEU1CSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKzB4NDgJMHgwMEU3CSNMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKzB4NDkJMHgwMEYxCSNMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFCisweDRBCTB4MDBDNAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworMHg0QgkweDAwMkUJI0ZVTEwgU1RPUAorMHg0QwkweDAwM0MJI0xFU1MtVEhBTiBTSUdOCisweDRECTB4MDAyOAkjTEVGVCBQQVJFTlRIRVNJUworMHg0RQkweDAwMkIJI1BMVVMgU0lHTgorMHg0RgkweDAwMjEJI0VYQ0xBTUFUSU9OIE1BUksKKzB4NTAJMHgwMDI2CSNBTVBFUlNBTkQKKzB4NTEJMHgwMEU5CSNMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFCisweDUyCTB4MDBFQQkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisweDUzCTB4MDBFQgkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKzB4NTQJMHgwMEU4CSNMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCisweDU1CTB4MDBFRAkjTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURQorMHg1NgkweDAwRUUJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorMHg1NwkweDAwRUYJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisweDU4CTB4MDBFQwkjTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorMHg1OQkweDAwN0UJI1RJTERFCisweDVBCTB4MDBEQwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworMHg1QgkweDAwMjQJI0RPTExBUiBTSUdOCisweDVDCTB4MDAyQQkjQVNURVJJU0sKKzB4NUQJMHgwMDI5CSNSSUdIVCBQQVJFTlRIRVNJUworMHg1RQkweDAwM0IJI1NFTUlDT0xPTgorMHg1RgkweDAwNUUJI0NJUkNVTUZMRVggQUNDRU5UCisweDYwCTB4MDAyRAkjSFlQSEVOLU1JTlVTCisweDYxCTB4MDAyRgkjU09MSURVUworMHg2MgkweDAwQzIJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisweDYzCTB4MDA1QgkjTEVGVCBTUVVBUkUgQlJBQ0tFVAorMHg2NAkweDAwQzAJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRQorMHg2NQkweDAwQzEJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorMHg2NgkweDAwQzMJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorMHg2NwkweDAwQzUJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisweDY4CTB4MDBDNwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKzB4NjkJMHgwMEQxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUKKzB4NkEJMHgwMEY2CSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworMHg2QgkweDAwMkMJI0NPTU1BCisweDZDCTB4MDAyNQkjUEVSQ0VOVCBTSUdOCisweDZECTB4MDA1RgkjTE9XIExJTkUKKzB4NkUJMHgwMDNFCSNHUkVBVEVSLVRIQU4gU0lHTgorMHg2RgkweDAwM0YJI1FVRVNUSU9OIE1BUksKKzB4NzAJMHgwMEY4CSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorMHg3MQkweDAwQzkJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorMHg3MgkweDAwQ0EJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisweDczCTB4MDBDQgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworMHg3NAkweDAwQzgJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRQorMHg3NQkweDAwQ0QJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURQorMHg3NgkweDAwQ0UJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisweDc3CTB4MDBDRgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworMHg3OAkweDAwQ0MJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRQorMHg3OQkweDAwNjAJI0dSQVZFIEFDQ0VOVAorMHg3QQkweDAwM0EJI0NPTE9OCisweDdCCTB4MDAyMwkjTlVNQkVSIFNJR04KKzB4N0MJMHgwMEE3CSNTRUNUSU9OIFNJR04KKzB4N0QJMHgwMDI3CSNBUE9TVFJPUEhFCisweDdFCTB4MDAzRAkjRVFVQUxTIFNJR04KKzB4N0YJMHgwMDIyCSNRVU9UQVRJT04gTUFSSworMHg4MAkweDAwRDgJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKzB4ODEJMHgwMDYxCSNMQVRJTiBTTUFMTCBMRVRURVIgQQorMHg4MgkweDAwNjIJI0xBVElOIFNNQUxMIExFVFRFUiBCCisweDgzCTB4MDA2MwkjTEFUSU4gU01BTEwgTEVUVEVSIEMKKzB4ODQJMHgwMDY0CSNMQVRJTiBTTUFMTCBMRVRURVIgRAorMHg4NQkweDAwNjUJI0xBVElOIFNNQUxMIExFVFRFUiBFCisweDg2CTB4MDA2NgkjTEFUSU4gU01BTEwgTEVUVEVSIEYKKzB4ODcJMHgwMDY3CSNMQVRJTiBTTUFMTCBMRVRURVIgRworMHg4OAkweDAwNjgJI0xBVElOIFNNQUxMIExFVFRFUiBICisweDg5CTB4MDA2OQkjTEFUSU4gU01BTEwgTEVUVEVSIEkKKzB4OEEJMHgwMEFCCSNMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworMHg4QgkweDAwQkIJI1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworMHg4QwkweDAwRjAJI0xBVElOIFNNQUxMIExFVFRFUiBFVEggKEljZWxhbmRpYykKKzB4OEQJMHgwMEZECSNMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCisweDhFCTB4MDBGRQkjTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCisweDhGCTB4MDBCMQkjUExVUy1NSU5VUyBTSUdOCisweDkwCTB4MDBCMAkjREVHUkVFIFNJR04KKzB4OTEJMHgwMDZBCSNMQVRJTiBTTUFMTCBMRVRURVIgSgorMHg5MgkweDAwNkIJI0xBVElOIFNNQUxMIExFVFRFUiBLCisweDkzCTB4MDA2QwkjTEFUSU4gU01BTEwgTEVUVEVSIEwKKzB4OTQJMHgwMDZECSNMQVRJTiBTTUFMTCBMRVRURVIgTQorMHg5NQkweDAwNkUJI0xBVElOIFNNQUxMIExFVFRFUiBOCisweDk2CTB4MDA2RgkjTEFUSU4gU01BTEwgTEVUVEVSIE8KKzB4OTcJMHgwMDcwCSNMQVRJTiBTTUFMTCBMRVRURVIgUAorMHg5OAkweDAwNzEJI0xBVElOIFNNQUxMIExFVFRFUiBRCisweDk5CTB4MDA3MgkjTEFUSU4gU01BTEwgTEVUVEVSIFIKKzB4OUEJMHgwMEFBCSNGRU1JTklORSBPUkRJTkFMIElORElDQVRPUgorMHg5QgkweDAwQkEJI01BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgorMHg5QwkweDAwRTYJI0xBVElOIFNNQUxMIExFVFRFUiBBRQorMHg5RAkweDAwQjgJI0NFRElMTEEKKzB4OUUJMHgwMEM2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBRQorMHg5RgkweDAwQTQJI0NVUlJFTkNZIFNJR04KKzB4QTAJMHgwMEI1CSNNSUNSTyBTSUdOCisweEExCTB4MDBERgkjTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFMgKEdlcm1hbikKKzB4QTIJMHgwMDczCSNMQVRJTiBTTUFMTCBMRVRURVIgUworMHhBMwkweDAwNzQJI0xBVElOIFNNQUxMIExFVFRFUiBUCisweEE0CTB4MDA3NQkjTEFUSU4gU01BTEwgTEVUVEVSIFUKKzB4QTUJMHgwMDc2CSNMQVRJTiBTTUFMTCBMRVRURVIgVgorMHhBNgkweDAwNzcJI0xBVElOIFNNQUxMIExFVFRFUiBXCisweEE3CTB4MDA3OAkjTEFUSU4gU01BTEwgTEVUVEVSIFgKKzB4QTgJMHgwMDc5CSNMQVRJTiBTTUFMTCBMRVRURVIgWQorMHhBOQkweDAwN0EJI0xBVElOIFNNQUxMIExFVFRFUiBaCisweEFBCTB4MDBBMQkjSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworMHhBQgkweDAwQkYJI0lOVkVSVEVEIFFVRVNUSU9OIE1BUksKKzB4QUMJMHgwMEQwCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEggKEljZWxhbmRpYykKKzB4QUQJMHgwMERECSNMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEUKKzB4QUUJMHgwMERFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorMHhBRgkweDAwQUUJI1JFR0lTVEVSRUQgU0lHTgorMHhCMAkweDAwQTIJI0NFTlQgU0lHTgorMHhCMQkweDAwQTMJI1BPVU5EIFNJR04KKzB4QjIJMHgwMEE1CSNZRU4gU0lHTgorMHhCMwkweDAwQjcJI01JRERMRSBET1QKKzB4QjQJMHgwMEE5CSNDT1BZUklHSFQgU0lHTgorMHhCNQkweDAwNDAJI0NPTU1FUkNJQUwgQVQKKzB4QjYJMHgwMEI2CSNQSUxDUk9XIFNJR04KKzB4QjcJMHgwMEJDCSNWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKKzB4QjgJMHgwMEJECSNWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYKKzB4QjkJMHgwMEJFCSNWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKzB4QkEJMHgwMEFDCSNOT1QgU0lHTgorMHhCQgkweDAwN0MJI1ZFUlRJQ0FMIExJTkUKKzB4QkMJMHgyMDNFCSNPVkVSTElORQorMHhCRAkweDAwQTgJI0RJQUVSRVNJUworMHhCRQkweDAwQjQJI0FDVVRFIEFDQ0VOVAorMHhCRgkweDAwRDcJI01VTFRJUExJQ0FUSU9OIFNJR04KKzB4QzAJMHgwMEU0CSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworMHhDMQkweDAwNDEJI0xBVElOIENBUElUQUwgTEVUVEVSIEEKKzB4QzIJMHgwMDQyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisweEMzCTB4MDA0MwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworMHhDNAkweDAwNDQJI0xBVElOIENBUElUQUwgTEVUVEVSIEQKKzB4QzUJMHgwMDQ1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisweEM2CTB4MDA0NgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorMHhDNwkweDAwNDcJI0xBVElOIENBUElUQUwgTEVUVEVSIEcKKzB4QzgJMHgwMDQ4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBICisweEM5CTB4MDA0OQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorMHhDQQkweDAwQUQJI1NPRlQgSFlQSEVOCisweENCCTB4MDBGNAkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisweENDCTB4MDBBNgkjQlJPS0VOIEJBUgorMHhDRAkweDAwRjIJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKKzB4Q0UJMHgwMEYzCSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFCisweENGCTB4MDBGNQkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERQorMHhEMAkweDAwRkMJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisweEQxCTB4MDA0QQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorMHhEMgkweDAwNEIJI0xBVElOIENBUElUQUwgTEVUVEVSIEsKKzB4RDMJMHgwMDRDCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisweEQ0CTB4MDA0RAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorMHhENQkweDAwNEUJI0xBVElOIENBUElUQUwgTEVUVEVSIE4KKzB4RDYJMHgwMDRGCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisweEQ3CTB4MDA1MAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorMHhEOAkweDAwNTEJI0xBVElOIENBUElUQUwgTEVUVEVSIFEKKzB4RDkJMHgwMDUyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisweERBCTB4MDBCOQkjU1VQRVJTQ1JJUFQgT05FCisweERCCTB4MDBGQgkjTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisweERDCTB4MDA3RAkjUklHSFQgQ1VSTFkgQlJBQ0tFVAorMHhERAkweDAwRjkJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKzB4REUJMHgwMEZBCSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisweERGCTB4MDBGRgkjTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKzB4RTAJMHgwMEQ2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisweEUxCTB4MDBGNwkjRElWSVNJT04gU0lHTgorMHhFMgkweDAwNTMJI0xBVElOIENBUElUQUwgTEVUVEVSIFMKKzB4RTMJMHgwMDU0CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisweEU0CTB4MDA1NQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorMHhFNQkweDAwNTYJI0xBVElOIENBUElUQUwgTEVUVEVSIFYKKzB4RTYJMHgwMDU3CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisweEU3CTB4MDA1OAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorMHhFOAkweDAwNTkJI0xBVElOIENBUElUQUwgTEVUVEVSIFkKKzB4RTkJMHgwMDVBCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisweEVBCTB4MDBCMgkjU1VQRVJTQ1JJUFQgVFdPCisweEVCCTB4MDBENAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKzB4RUMJMHgwMDVDCSNSRVZFUlNFIFNPTElEVVMKKzB4RUQJMHgwMEQyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUKKzB4RUUJMHgwMEQzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEUKKzB4RUYJMHgwMEQ1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKKzB4RjAJMHgwMDMwCSNESUdJVCBaRVJPCisweEYxCTB4MDAzMQkjRElHSVQgT05FCisweEYyCTB4MDAzMgkjRElHSVQgVFdPCisweEYzCTB4MDAzMwkjRElHSVQgVEhSRUUKKzB4RjQJMHgwMDM0CSNESUdJVCBGT1VSCisweEY1CTB4MDAzNQkjRElHSVQgRklWRQorMHhGNgkweDAwMzYJI0RJR0lUIFNJWAorMHhGNwkweDAwMzcJI0RJR0lUIFNFVkVOCisweEY4CTB4MDAzOAkjRElHSVQgRUlHSFQKKzB4RjkJMHgwMDM5CSNESUdJVCBOSU5FCisweEZBCTB4MDBCMwkjU1VQRVJTQ1JJUFQgVEhSRUUKKzB4RkIJMHgwMERCCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorMHhGQwkweDAwNUQJI1JJR0hUIFNRVUFSRSBCUkFDS0VUCisweEZECTB4MDBEOQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCisweEZFCTB4MDBEQQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCisweEZGCTB4MDA5RgkjQVBQTElDQVRJT04gUFJPR1JBTSBDT01NQU5EIChBUEMpCisKKyAJICAJIApkaWZmIC0tZ2l0IGEvY29uZmlnLmd1ZXNzIGIvY29uZmlnLmd1ZXNzCmluZGV4IGI3OTI1MmQuLjFmNWM1MGMgMTAwNzU1Ci0tLSBhL2NvbmZpZy5ndWVzcworKysgYi9jb25maWcuZ3Vlc3MKQEAgLTEsOCArMSw4IEBACiAjISAvYmluL3NoCiAjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTMtMDYtMTAnCit0aW1lc3RhbXA9JzIwMTQtMDMtMjMnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTUwLDcgKzUwLDcgQEAKIEdOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCiAKIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KLUNvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJTElCQz1nbnUKIAkjZW5kaWYKIAlFT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQycgfCBzZWQgJ3MsICwsZydgCiAJOzsKIGVzYWMKIApAQCAtODI2LDcgKzgyNiw3IEBACiAgICAgKjpNSU5HVyo6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgogCWV4aXQgOzsKLSAgICBpKjpNU1lTKjoqKQorICAgICo6TVNZUyo6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXN5cwogCWV4aXQgOzsKICAgICBpKjp3aW5kb3dzMzIqOiopCkBAIC05NjksMTAgKzk2OSwxMCBAQAogCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKIAl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KIAk7OwotICAgIG9yMWs6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAgICBvcGVucmlzYyo6TGludXg6KjoqKQorCWVjaG8gb3Ixay11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7Ci0gICAgb3IzMjpMaW51eDoqOiopCisgICAgb3IzMjpMaW51eDoqOiogfCBvcjFrKjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBwYWRyZTpMaW51eDoqOiopCkBAIC0xMjYwLDE2ICsxMjYwLDI2IEBACiAJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgogCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYwogCWZpCi0JaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCi0JICAgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAotCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAotCSAgICB0aGVuCi0JCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgotCQkgICAgaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OwotCQkgICAgcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OwotCQllc2FjCisJaWYgdGVzdCBgZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuLiovLydgIC1sZSAxMCA7IHRoZW4KKwkgICAgaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCWlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgIGNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCQkJaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OworCQkJcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OworCQkgICAgZXNhYworCQlmaQogCSAgICBmaQorCWVsaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBpMzg2IDsgdGhlbgorCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBvbiBPUyBYIDEwLjksIGFzIGl0IHNoaXBzIHdpdGggYSBzdHViCisJICAgICMgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0IHByb21wdGluZyB0byBpbnN0YWxsCisJICAgICMgZGV2ZWxvcGVyIHRvb2xzLiAgQW55IHN5c3RlbSBydW5uaW5nIE1hYyBPUyBYIDEwLjcgb3IKKwkgICAgIyBsYXRlciAoRGFyd2luIDExIGFuZCBsYXRlcikgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIDY0LWJpdAorCSAgICAjIHByb2Nlc3Nvci4gVGhpcyBpcyBub3QgdHJ1ZSBvZiB0aGUgQVJNIHZlcnNpb24gb2YgRGFyd2luCisJICAgICMgdGhhdCBBcHBsZSB1c2VzIGluIHBvcnRhYmxlIGRldmljZXMuCisJICAgIFVOQU1FX1BST0NFU1NPUj14ODZfNjQKIAlmaQogCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CkBAIC0xMzYxLDE1NCArMTM3MSw2IEBACiAJZXhpdCA7OwogZXNhYwogCi1ldmFsICRzZXRfY2NfZm9yX2J1aWxkCi1jYXQgPiRkdW1teS5jIDw8RU9GCi0jaWZkZWYgX1NFUVVFTlRfCi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmCi1tYWluICgpCi17Ci0jaWYgZGVmaW5lZCAoc29ueSkKLSNpZiBkZWZpbmVkIChNSVBTRUIpCi0gIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCi0gICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCi0gIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0gIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKLSNpZmRlZiBORVdTT1M0Ci0JIjQiCi0jZWxzZQotCSIiCi0jZW5kaWYKLQkpOyBleGl0ICgwKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfX2FybSkgJiYgZGVmaW5lZCAoX19hY29ybikgJiYgZGVmaW5lZCAoX191bml4KQotICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4XG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgKGhwMzAwKSAmJiAhZGVmaW5lZCAoaHB1eCkKLSAgcHJpbnRmICgibTY4ay1ocC1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoTmVYVCkKLSNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKLSNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKLSNlbmRpZgotICBpbnQgdmVyc2lvbjsKLSAgdmVyc2lvbj1gKGhvc3RpbmZvIHwgc2VkIC1uICdzLy4qTmVYVCBNYWNoIFwoWzAtOV0qXCkuKi9cMS9wJykgMj4vZGV2L251bGxgOwotICBpZiAodmVyc2lvbiA8IDQpCi0gICAgcHJpbnRmICgiJXMtbmV4dC1uZXh0c3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKLSAgZWxzZQotICAgIHByaW50ZiAoIiVzLW5leHQtb3BlbnN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7Ci0gIGV4aXQgKDApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChNVUxUSU1BWCkgfHwgZGVmaW5lZCAobjE2KQotI2lmIGRlZmluZWQgKFVNQVhWKQotICBwcmludGYgKCJuczMyay1lbmNvcmUtc3lzdlxuIik7IGV4aXQgKDApOwotI2Vsc2UKLSNpZiBkZWZpbmVkIChDTVUpCi0gIHByaW50ZiAoIm5zMzJrLWVuY29yZS1tYWNoXG4iKTsgZXhpdCAoMCk7Ci0jZWxzZQotICBwcmludGYgKCJuczMyay1lbmNvcmUtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfXzM4NkJTRF9fKQotICBwcmludGYgKCJpMzg2LXBjLWJzZFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChzZXF1ZW50KQotI2lmIGRlZmluZWQgKGkzODYpCi0gIHByaW50ZiAoImkzODYtc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0jaWYgZGVmaW5lZCAobnMzMjAwMCkKLSAgcHJpbnRmICgibnMzMmstc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9TRVFVRU5UXykKLSAgICBzdHJ1Y3QgdXRzbmFtZSB1bjsKLQotICAgIHVuYW1lKCZ1bik7Ci0KLSAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7Ci0JcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDJcbiIpOyBleGl0ICgwKTsKLSAgICB9Ci0gICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYxIiwgMikgPT0gMCkgeyAvKiBYWFggaXMgVjEgY29ycmVjdD8gKi8KLQlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MVxuIik7IGV4aXQgKDApOwotICAgIH0KLSAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7Ci0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAodmF4KQotIyBpZiAhZGVmaW5lZCAodWx0cml4KQotIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jICBpZiBkZWZpbmVkIChCU0QpCi0jICAgaWYgQlNEID09IDQzCi0gICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM1xuIik7IGV4aXQgKDApOwotIyAgIGVsc2UKLSMgICAgaWYgQlNEID09IDE5OTAwNgotICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7Ci0jICAgIGVsc2UKLSAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jICAgIGVuZGlmCi0jICAgZW5kaWYKLSMgIGVsc2UKLSAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOwotIyAgZW5kaWYKLSMgZWxzZQotICAgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCi0gIHByaW50ZiAoImk4NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotCi0gIGV4aXQgKDEpOwotfQotRU9GCi0KLSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCi0JeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9Ci0KLSMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KLQotdGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0OyB9Ci0KLSMgQ29udmV4IHZlcnNpb25zIHRoYXQgcHJlZGF0ZSB1bmFtZSBjYW4gdXNlIGdldHN5c2luZm8oMSkKLQotaWYgWyAteCAvdXNyL2NvbnZleC9nZXRzeXNpbmZvIF0KLXRoZW4KLSAgICBjYXNlIGBnZXRzeXNpbmZvIC1mIGNwdV90eXBlYCBpbgotICAgIGMxKikKLQllY2hvIGMxLWNvbnZleC1ic2QKLQlleGl0IDs7Ci0gICAgYzIqKQotCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYwotCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAotCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCi0JZmkKLQlleGl0IDs7Ci0gICAgYzM0KikKLQllY2hvIGMzNC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIGMzOCopCi0JZWNobyBjMzgtY29udmV4LWJzZAotCWV4aXQgOzsKLSAgICBjNCopCi0JZWNobyBjNC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIGVzYWMKLWZpCi0KIGNhdCA+JjIgPDxFT0YKICQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKIApkaWZmIC0tZ2l0IGEvY29uZmlnLnN1YiBiL2NvbmZpZy5zdWIKaW5kZXggOTYzM2RiNy4uZDY1NGQwMyAxMDA3NTUKLS0tIGEvY29uZmlnLnN1YgorKysgYi9jb25maWcuc3ViCkBAIC0xLDggKzEsOCBAQAogIyEgL2Jpbi9zaAogIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTMtMDgtMTAnCit0aW1lc3RhbXA9JzIwMTQtMDUtMDEnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTY4LDcgKzY4LDcgQEAKIHZlcnNpb249IlwKIEdOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQogCi1Db3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IDE5OTItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTI2NSw2ICsyNjUsNyBAQAogCXwgaGV4YWdvbiBcCiAJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKIAl8IGlwMmsgfCBpcTIwMDAgXAorCXwgazFvbSBcCiAJfCBsZTMyIHwgbGU2NCBcCiAJfCBsbTMyIFwKIAl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXApAQCAtMjgyLDggKzI4MywxMCBAQAogCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAogCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAogCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKKwl8IG1pcHNpc2EzMnI2IHwgbWlwc2lzYTMycjZlbCBcCiAJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCiAJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsIFwKIAl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKIAl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCiAJfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCkBAIC0yOTUsOCArMjk4LDcgQEAKIAl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAogCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5pb3MyZWwgXAogCXwgbnMxNmsgfCBuczMyayBcCi0JfCBvcGVuOCBcCi0JfCBvcjFrIHwgb3IzMiBcCisJfCBvcGVuOCB8IG9yMWsgfCBvcjFrbmQgfCBvcjMyIFwKIAl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCiAJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAogCXwgcHlyYW1pZCBcCkBAIC0zMjQsNyArMzI2LDcgQEAKIAljNngpCiAJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgogCQk7OwotCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IHBpY29jaGlwKQorCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IG52cHR4IHwgcGljb2NoaXApCiAJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgogCQlvcz0tbm9uZQogCQk7OwpAQCAtMzgxLDYgKzM4Myw3IEBACiAJfCBoZXhhZ29uLSogXAogCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKIAl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGsxb20tKiBcCiAJfCBsZTMyLSogfCBsZTY0LSogXAogCXwgbG0zMi0qIFwKIAl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKQEAgLTQwMCw4ICs0MDMsMTAgQEAKIAl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCiAJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAogCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhMzJyNi0qIHwgbWlwc2lzYTMycjZlbC0qIFwKIAl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCiAJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHI2LSogfCBtaXBzaXNhNjRyNmVsLSogXAogCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKIAl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAogCXwgbWlwc3I1OTAwLSogfCBtaXBzcjU5MDBlbC0qIFwKQEAgLTQxMyw2ICs0MTgsNyBAQAogCXwgbmlvcy0qIHwgbmlvczItKiB8IG5pb3MyZWItKiB8IG5pb3MyZWwtKiBcCiAJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKIAl8IG9wZW44LSogXAorCXwgb3IxayotKiBcCiAJfCBvcmlvbi0qIFwKIAl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAogCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXApAQCAtMTM3NCw3ICsxMzgwLDcgQEAKIAkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCiAJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCiAJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKLQkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyopCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqIHwgLXRpcnRvcyopCiAJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgogCQk7OwogCS1xbngqKQpAQCAtMTU5Miw5ICsxNTk4LDYgQEAKIAltaXBzKi0qKQogCQlvcz0tZWxmCiAJCTs7Ci0Jb3Ixay0qKQotCQlvcz0tZWxmCi0JCTs7CiAJb3IzMi0qKQogCQlvcz0tY29mZgogCQk7OwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGMyNzhjOGUuLjEzOWQzOTEgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsNiArMSw2IEBACiAjISAvYmluL3NoCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcHl0aG9uIDMuMy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBweXRob24gMy40LgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy8+LgogIwpAQCAtNTgwLDggKzU4MCw4IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0ncHl0aG9uJwogUEFDS0FHRV9UQVJOQU1FPSdweXRob24nCi1QQUNLQUdFX1ZFUlNJT049JzMuMycKLVBBQ0tBR0VfU1RSSU5HPSdweXRob24gMy4zJworUEFDS0FHRV9WRVJTSU9OPSczLjQnCitQQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuNCcKIFBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVncy5weXRob24ub3JnLycKIFBBQ0tBR0VfVVJMPScnCiAKQEAgLTYyMyw4ICs2MjMsMTEgQEAKICNlbmRpZiIKIAogYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpTCitFTlNVUkVQSVAKIFNSQ0RJUlMKIFRIUkVBREhFQURFUlMKK0xJQlBMCitQWV9FTkFCTEVfU0hBUkVECiBFWFRfU1VGRklYCiBTT0FCSQogTElCQwpAQCAtNjU5LDYgKzY2Miw3IEBACiBMSUJUT09MX0NSVUZUCiBPVEhFUl9MSUJUT09MX09QVAogVU5JVkVSU0FMX0FSQ0hfRkxBR1MKK0NGTEFHU19OT0RJU1QKIEJBU0VDRkxBR1MKIE9QVAogQUJJRkxBR1MKQEAgLTcxMCw2ICs3MTQsNyBAQAogTUFDSERFUAogRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVgKIEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWAorRlJBTUVXT1JLUFlUSE9OVwogRlJBTUVXT1JLQUxUSU5TVEFMTExBU1QKIEZSQU1FV09SS0FMVElOU1RBTExGSVJTVAogRlJBTUVXT1JLSU5TVEFMTExBU1QKQEAgLTc5MCw2ICs3OTUsNyBAQAogZW5hYmxlX3NoYXJlZAogZW5hYmxlX3Byb2ZpbGluZwogd2l0aF9weWRlYnVnCit3aXRoX2hhc2hfYWxnb3JpdGhtCiB3aXRoX2xpYnMKIHdpdGhfc3lzdGVtX2V4cGF0CiB3aXRoX3N5c3RlbV9mZmkKQEAgLTgxMSw2ICs4MTcsNyBAQAogd2l0aF9saWJjCiBlbmFibGVfYmlnX2RpZ2l0cwogd2l0aF9jb21wdXRlZF9nb3Rvcword2l0aF9lbnN1cmVwaXAKICcKICAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCiBob3N0X2FsaWFzCkBAIC0xMzYyLDcgKzEzNjksNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAzLjMgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuNCB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xNDI3LDcgKzE0MzQsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjM6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMy40OiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTE0NTMsNyArMTQ2MCw3IEBACiAgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKICAgLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNICiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIsICJpbnRlbC0zMiIsIG9yICJhbGwiKQogICAtLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIG5hbWUgb2YgdGhlIGZyYW1ld29yayBidWlsdAogICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIC0tZW5hYmxlLWZyYW1ld29yawpAQCAtMTQ2Myw2ICsxNDcwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIKICAgLS13aXRoLXN1ZmZpeD0uZXhlICAgICAgc2V0IGV4ZWN1dGFibGUgc3VmZml4CiAgIC0td2l0aC1weWRlYnVnICAgICAgICAgIGJ1aWxkIHdpdGggUHlfREVCVUcgZGVmaW5lZAorICAtLXdpdGgtaGFzaC1hbGdvcml0aG09W2ZudnxzaXBoYXNoMjRdCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBoYXNoIGFsZ29yaXRobQogICAtLXdpdGgtbGlicz0nbGliMSAuLi4nICBsaW5rIGFnYWluc3QgYWRkaXRpb25hbCBsaWJzCiAgIC0td2l0aC1zeXN0ZW0tZXhwYXQgICAgIGJ1aWxkIHB5ZXhwYXQgbW9kdWxlIHVzaW5nIGFuIGluc3RhbGxlZCBleHBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5CkBAIC0xNDkyLDYgKzE1MDEsOCBAQAogICAtLXdpdGgob3V0KS1jb21wdXRlZC1nb3RvcwogICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgY29tcHV0ZWQgZ290b3MgaW4gZXZhbHVhdGlvbiBsb29wIChlbmFibGVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgb24gc3VwcG9ydGVkIGNvbXBpbGVycykKKyAgLS13aXRoKG91dCktZW5zdXJlcGlwPVs9dXBncmFkZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcAogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgTUFDSERFUCAgICAgbmFtZSBmb3IgbWFjaGluZS1kZXBlbmRlbnQgbGlicmFyeSBmaWxlcwpAQCAtMTU3MCw3ICsxNTgxLDcgQEAKIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1weXRob24gY29uZmlndXJlIDMuMworcHl0aG9uIGNvbmZpZ3VyZSAzLjQKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQogCiBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC0yNDA5LDcgKzI0MjAsNyBAQAogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy4zLCB3aGljaCB3YXMKK0l0IHdhcyBjcmVhdGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKQEAgLTI5MzksNiArMjk1MCw5IEBACiAKIAogCisjIHB5YnVpbGRkaXIudHh0IHdpbGwgYmUgY3JlYXRlZCBieSAtLWdlbmVyYXRlLXBvc2l4LXZhcnMgaW4gdGhlIE1ha2VmaWxlCitybSAtZiBweWJ1aWxkZGlyLnR4dAorCiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB5dGhvbiBpbnRlcnByZXRlciBmb3IgY3Jvc3MgYnVpbGQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB5dGhvbiBpbnRlcnByZXRlciBmb3IgY3Jvc3MgYnVpbGQuLi4gIiA+JjY7IH0KQEAgLTI5NzksNyArMjk5Myw3IEBACiBtdiBjb25mZGVmcy5oLm5ldyBjb25mZGVmcy5oCiAKIAotVkVSU0lPTj0zLjMKK1ZFUlNJT049My40CiAKICMgVmVyc2lvbiBudW1iZXIgb2YgUHl0aG9uJ3Mgb3duIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCiAKQEAgLTMwMzUsNyArMzA0OSw3IEBACiAJCSMgTG9jYXRlIHRoZSBiZXN0IHVzYWJsZSBTREssIHNlZSBNYWMvUkVBRE1FLnR4dCBmb3IgbW9yZQogCQkjIGluZm9ybWF0aW9uCiAJCWVuYWJsZXZhbD0iYC91c3IvYmluL3hjb2RlYnVpbGQgLXZlcnNpb24gLXNkayBtYWNvc3ggUGF0aCAyPi9kZXYvbnVsbGAiCi0JCWlmIHRlc3QgLXogIiR7ZW5hYmxldmFsfSIKKwkJaWYgISAoIGVjaG8gJGVuYWJsZXZhbCB8IGdyZXAgLUUgJ1wuc2RrJyAxPi9kZXYvbnVsbCApCiAJCXRoZW4KIAkJCWVuYWJsZXZhbD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrCiAJCQlpZiB0ZXN0ICEgLWQgIiR7ZW5hYmxldmFsfSIKQEAgLTMwNzgsNiArMzA5Miw3IEBACiAKIAogCitBUkNIX1JVTl8zMkJJVD0iIgogCiAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2UgcHJlZmVyIHRvIHNlbGVjdCAnMzItYml0JyBpZiBhdmFpbGFibGUsCiAjIG90aGVyd2lzZSB1c2UgJ2ludGVsJwpAQCAtMzA4Niw3ICszMTAxLDcgQEAKIHRoZW4KIAlpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCiAJdGhlbgotCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKKwkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgLUwgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCiAJCXRoZW4KIAkJCVVOSVZFUlNBTF9BUkNIUz0iaW50ZWwiCiAJCWZpCkBAIC0zMTAwLDE5ICszMTE1LDE4IEBACiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLXVuaXZlcnNhbC1hcmNocyB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke3dpdGhfdW5pdmVyc2FsX2FyY2hzK3NldH0iID0gc2V0OyB0aGVuIDoKICAgd2l0aHZhbD0kd2l0aF91bml2ZXJzYWxfYXJjaHM7Ci0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRodmFsIiA+JjUKLSRhc19lY2hvICIkd2l0aHZhbCIgPiY2OyB9CiAJVU5JVkVSU0FMX0FSQ0hTPSIkd2l0aHZhbCIKIAotZWxzZQotCi0gCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke1VOSVZFUlNBTF9BUkNIU30iID4mNQotJGFzX2VjaG8gIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY2OyB9Ci0KIGZpCiAKLQotCitpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY1CiskYXNfZWNobyAiJHtVTklWRVJTQUxfQVJDSFN9IiA+JjY7IH0KK2Vsc2UKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCiAKIAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC1mcmFtZXdvcmstbmFtZSB3YXMgZ2l2ZW4uCkBAIC0zMTQ3LDYgKzMxNjEsNyBAQAogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0KKwkJRlJBTUVXT1JLUFlUSE9OVz0KIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiOyB0aGVuCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgogCQllbHNlCkBAIC0zMTYxLDYgKzMxNzYsNyBAQAogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktQWVRIT05XPSJmcmFtZXdvcmtweXRob253IgogCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCkBAIC0zMjI4LDYgKzMyNDQsNyBAQAogCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0KKwlGUkFNRVdPUktQWVRIT05XPQogCWlmIHRlc3QgIngke3ByZWZpeH0iID0gInhOT05FIiA7IHRoZW4KIAkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKIAllbHNlCkBAIC0zMjUwLDYgKzMyNjcsNyBAQAogCiAKIAorCiAjI0FDX0FSR19XSVRIKGR5bGQsCiAjIyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZHlsZF0sCiAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcl0pKQpAQCAtMzQzMSw2ICszNDQ5LDIxIEBACiAKIGZpCiAKKyMgT24gSFAtVVggbWJzdGF0ZV90IHJlcXVpcmVzIF9JTkNMVURFX19TVERDX0ExX1NPVVJDRQorY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorICBocCp8SFAqKQorICAgIGRlZmluZV9zdGRjX2ExPXllczs7CisgICopCisgICAgZGVmaW5lX3N0ZGNfYTE9bm87OworZXNhYworCitpZiB0ZXN0ICRkZWZpbmVfc3RkY19hMSA9IHllcwordGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBfSU5DTFVERV9fU1REQ19BMV9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKICMKICMgU0dJIGNvbXBpbGVycyBhbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgYm90aCB0aGUgQUJJIGFuZCB0aGUKICMgSVNBIG9uIHRoZSBjb21tYW5kIGxpbmUuICBEZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGVzZSBzd2l0Y2hlcywKQEAgLTQ4MDEsMTYgKzQ4MzQsMTYgQEAKIGZpCiBpZiB0ZXN0ICIkcHJlc2V0X2N4eCIgIT0gIiRDWFgiCiB0aGVuCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzoKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OgogCiAgIEJ5IGRlZmF1bHQsIGRpc3R1dGlscyB3aWxsIGJ1aWxkIEMrKyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIFwiJENYWFwiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgogICAiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzoKKyRhc19lY2hvICIkYXNfbWU6CiAKICAgQnkgZGVmYXVsdCwgZGlzdHV0aWxzIHdpbGwgYnVpbGQgQysrIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggXCIkQ1hYXCIuCiAgIElmIHRoaXMgaXMgbm90IGludGVuZGVkLCB0aGVuIHNldCBDWFggb24gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCi0gICIgPiYyO30KKyAgIiA+JjY7fQogZmkKIAogCkBAIC01NTg0LDYgKzU2MTcsNyBAQAogCiAjIE90aGVyIHBsYXRmb3JtcyBmb2xsb3cKIGlmIHRlc3QgJGVuYWJsZV9zaGFyZWQgPSAieWVzIjsgdGhlbgorICBQWV9FTkFCTEVfU0hBUkVEPTEKIAogJGFzX2VjaG8gIiNkZWZpbmUgUHlfRU5BQkxFX1NIQVJFRCAxIiA+PmNvbmZkZWZzLmgKIApAQCAtNTYzMiw3ICs1NjY2LDcgQEAKICAgICBEYXJ3aW4qKQogICAgIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5keWxpYicKIAlCTERMSUJSQVJZPSctTC4gLWxweXRob24kKExEVkVSU0lPTiknCi0JUlVOU0hBUkVEPSdEWUxEX0xJQlJBUllfUEFUSD1gcHdkYCR7RFlMRF9MSUJSQVJZX1BBVEg6Kzoke0RZTERfTElCUkFSWV9QQVRIfX0nCisJUlVOU0hBUkVEPURZTERfTElCUkFSWV9QQVRIPWBwd2RgJHtEWUxEX0xJQlJBUllfUEFUSDorOiR7RFlMRF9MSUJSQVJZX1BBVEh9fQogCTs7CiAgICAgQUlYKikKIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKQEAgLTU2NDEsNiArNTY3NSw3IEBACiAKICAgZXNhYwogZWxzZSAjIHNoYXJlZCBpcyBkaXNhYmxlZAorICBQWV9FTkFCTEVfU0hBUkVEPTAKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCiAgICAgICAgICAgQkxETElCUkFSWT0nJChMSUJSQVJZKScKQEAgLTYyNjEsNiArNjI5Niw3IEBACiAKIAogCisKICMgVGhlIC1hcmNoIGZsYWdzIGZvciB1bml2ZXJzYWwgYnVpbGRzIG9uIE9TWAogVU5JVkVSU0FMX0FSQ0hfRkxBR1M9CiAKQEAgLTYzODEsNiArNjQxNyw0OSBAQAogICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVduby11bnVzZWQtcmVzdWx0IgogICAgIGZpCiAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQuLi4gIiA+JjY7IH0KKyAgICAgYWNfc2F2ZV9jYz0iJENDIgorICAgICBDQz0iJENDIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgaWYgJHthY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz15ZXMKKworZWxzZQorCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgIENDPSIkYWNfc2F2ZV9jYyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmciID4mNjsgfQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcgPSB5ZXMKKyAgICB0aGVuCisgICAgICBDRkxBR1NfTk9ESVNUPSIkQ0ZMQUdTX05PRElTVCAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICBmaQorCiAgICAgIyBpZiB1c2luZyBnY2Mgb24gYWxwaGEsIHVzZSAtbWllZWUgdG8gZ2V0IChuZWFyKSBmdWxsIElFRUUgNzU0CiAgICAgIyBzdXBwb3J0LiAgV2l0aG91dCB0aGlzLCB0cmVhdG1lbnQgb2Ygc3Vibm9ybWFscyBkb2Vzbid0IGZvbGxvdwogICAgICMgdGhlIHN0YW5kYXJkLgpAQCAtNjM5NCwxMTMgKzY0NzMsMTMwIEBACiAJU0NPX1NWKikKIAkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLW00ODYgLURTQ081IgogCSAgICA7OwotCSMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KLQlEYXJ3aW4qKQotCSAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAotCSAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KLSAgICAgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYwotCSAgICB0aGVuCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQiID4mNQorCisgICAgIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPworICAgIERhcndpbiopCisgICAgICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCisgICAgICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgorICAgICAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZC4uLiAiID4mNjsgfQotCQljYXNlICIke1VOSVZFUlNBTFNES30iIGluCi0JCSovTWFjT1NYMTAuNHUuc2RrKQotCQkJIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlCi0JCQkjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKLQkJCSMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKLQkJCUNDPWdjYy00LjAKLQkJCUNQUD1jcHAtNC4wCi0JCQk7OwotCQllc2FjCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorICAgICAgICAgICAgY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgorICAgICAgICAgICAgKi9NYWNPU1gxMC40dS5zZGspCisgICAgICAgICAgICAgICAgIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5CisgICAgICAgICAgICAgICAgIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgorICAgICAgICAgICAgICAgIENDPWdjYy00LjAKKyAgICAgICAgICAgICAgICBDUFA9Y3BwLTQuMAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKICRhc19lY2hvICIkQ0MiID4mNjsgfQotCSAgICBmaQorICAgICAgICBmaQogCisgICAgICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAzMi1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDY0LWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBhbGwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbC0zMikKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAzLXdheSkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAicHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheSIgIiRMSU5FTk8iIDUKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCiAKLQkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKLQkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9IiIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgIENGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCisgICAgICAgICAgICBMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCisgICAgICAgICAgICBpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIENQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAjIENhbGN1bGF0ZSBhbiBhcHByb3ByaWF0ZSBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZDoKKyAgICAgICAgIyBUaGUgZGVwbG95bWVudCB0YXJnZXQgdmFsdWUgaXMgdXNlZCBleHBsaWNpdGx5IHRvIGVuYWJsZSBjZXJ0YWluCisgICAgICAgICMgZmVhdHVyZXMgYXJlIGVuYWJsZWQgKHN1Y2ggYXMgYnVpbHRpbiBsaWJlZGl0IHN1cHBvcnQgZm9yIHJlYWRsaW5lKQorICAgICAgICAjIHRocm91Z2ggdGhlIHVzZSBvZiBBcHBsZSdzIEF2YWlsYWJpbGl5IE1hY3JvcyBhbmQgaXMgdXNlZCBhcyBhCisgICAgICAgICMgY29tcG9uZW50IG9mIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgZGlzdHV0aWxzLmdldF9wbGF0Zm9ybSgpLgorICAgICAgICAjCisgICAgICAgICMgVXNlIHRoZSB2YWx1ZSBmcm9tOgorICAgICAgICAjIDEuIHRoZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc3BlY2lmaWVkCisgICAgICAgICMgMi4gdGhlIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbiBvZiB0aGUgYnVpbGQgbWFjaGluZSBpZiA+PSAxMC42CisgICAgICAgICMgMy4gSWYgcnVubmluZyBvbiBPUyBYIDEwLjMgdGhyb3VnaCAxMC41LCB1c2UgdGhlIGxlZ2FjeSB0ZXN0cworICAgICAgICAjICAgICAgIGJlbG93IHRvIHBpY2sgZWl0aGVyIDEwLjMsIDEwLjQsIG9yIDEwLjUgYXMgdGhlIHRhcmdldC4KKyAgICAgICAgIyA0LiBJZiB3ZSBhcmUgcnVubmluZyBvbiBPUyBYIDEwLjIgb3IgZWFybGllciwgZ29vZCBsdWNrIQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlLi4uICIgPiY2OyB9CisgICAgICAgIGN1cl90YXJnZXRfbWFqb3I9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgIHNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpLiovXDEvJ2AKKyAgICAgICAgY3VyX3RhcmdldF9taW5vcj1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBcCisgICAgICAgICAgICAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXCkuKi9cMi8nYAorICAgICAgICBjdXJfdGFyZ2V0PSIke2N1cl90YXJnZXRfbWFqb3J9LiR7Y3VyX3RhcmdldF9taW5vcn0iCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0X21ham9yfSAtZXEgMTAgJiYgXAorICAgICAgICAgICB0ZXN0ICR7Y3VyX3RhcmdldF9taW5vcn0gLWdlIDMgJiYgXAorICAgICAgICAgICB0ZXN0ICR7Y3VyX3RhcmdldF9taW5vcn0gLWxlIDUKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBPUyBYIDEwLjMgdGhyb3VnaCAxMC41CisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgc2V0IGluIHRoZQorICAgICAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCisgICAgICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgorICAgICAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCisgICAgICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCisgICAgICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKKyAgICAgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIgPiY1CiskYXNfZWNobyAiJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIgPiY2OyB9CiAKLQkJIGVsc2UKLQkgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5IiAiJExJTkVOTyIgNQotCi0JCSBmaQotCi0KLQkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKLQkJdGhlbgotCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgotCQlmaQotCSAgICBmaQotCi0JICAgICMgQ2FsY3VsYXRlIHRoZSByaWdodCBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZC4KLQkgICAgIwotCSAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bMC05XSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhCi0JCQkJICAgICMgNC13YXkgdW5pdmVyc2FsIGJ1aWxkIGlzIE9TWCAxMC41LAotCQkJCSAgICAjIHRoYXQncyB0aGUgZmlyc3QgT1MgcmVsZWFzZSB3aGVyZQotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0KLQkgICAgIyBNYWtlIHN1cmUgdGhhdCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgc2V0IGluIHRoZQotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtNjUyNyw0NCArNjYyMyw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZ2NjIHN1cHBvcnRzIFBhcnNlVHVwbGUgX19mb3JtYXRfXy4uLiAiID4mNjsgfQotICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XZm9ybWF0IgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgICB2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTsKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFIDEiID4+Y29uZmRlZnMuaAotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotZWxzZQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSRzYXZlX0NGTEFHUwotZmkKLQogIyBPbiBzb21lIGNvbXBpbGVycywgcHRocmVhZHMgYXJlIGF2YWlsYWJsZSB3aXRob3V0IGZ1cnRoZXIgb3B0aW9ucwogIyAoZS5nLiBNYWNPUyBYKS4gT24gc29tZSBvZiB0aGVzZSBzeXN0ZW1zLCB0aGUgY29tcGlsZXIgd2lsbCBub3QKICMgY29tcGxhaW4gaWYgdW5hY2NlcHRlZCBvcHRpb25zIGFyZSBwYXNzZWQgKGUuZy4gZ2NjIG9uIE1hYyBPUyBYKS4KQEAgLTY5MjIsMTEgKzY5ODAsOSBAQAogCiBmaQogCi1hY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCi1DUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgotZm9yIGFjX2hlYWRlciBpbiBhc20vdHlwZXMuaCBjb25pby5oIGN1cnNlcy5oIGRpcmVjdC5oIGRsZmNuLmggZXJybm8uaCBcCitmb3IgYWNfaGVhZGVyIGluIGFzbS90eXBlcy5oIGNvbmlvLmggZGlyZWN0LmggZGxmY24uaCBlcnJuby5oIFwKIGZjbnRsLmggZ3JwLmggXAotaWVlZWZwLmggaW8uaCBsYW5naW5mby5oIGxpYmludGwuaCBuY3Vyc2VzLmggcHJvY2Vzcy5oIHB0aHJlYWQuaCBcCitpZWVlZnAuaCBpby5oIGxhbmdpbmZvLmggbGliaW50bC5oIHByb2Nlc3MuaCBwdGhyZWFkLmggXAogc2NoZWQuaCBzaGFkb3cuaCBzaWduYWwuaCBzdGRpbnQuaCBzdHJvcHRzLmggdGVybWlvcy5oIFwKIHVuaXN0ZC5oIHV0aW1lLmggXAogcG9sbC5oIHN5cy9kZXZwb2xsLmggc3lzL2Vwb2xsLmggc3lzL3BvbGwuaCBcCkBAIC02OTM2LDcgKzY5OTIsOCBAQAogc3lzL3N0YXQuaCBzeXMvc3lzY2FsbC5oIHN5cy9zeXNfZG9tYWluLmggc3lzL3Rlcm1pby5oIHN5cy90aW1lLmggXAogc3lzL3RpbWVzLmggc3lzL3R5cGVzLmggc3lzL3Vpby5oIHN5cy91bi5oIHN5cy91dHNuYW1lLmggc3lzL3dhaXQuaCBwdHkuaCBcCiBsaWJ1dGlsLmggc3lzL3Jlc291cmNlLmggbmV0cGFja2V0L3BhY2tldC5oIHN5c2V4aXRzLmggYmx1ZXRvb3RoLmggXAotYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCBhbGxvY2EuaAorYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCBhbGxvY2EuaCBlbmRpYW4uaCBcCitzeXMvZW5kaWFuLmgKIGRvIDoKICAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCkBAIC02OTQ5LDcgKzcwMDYsNiBAQAogCiBkb25lCiAKLUNQUEZMQUdTPSRhY19zYXZlX2NwcGZsYWdzCiBhY19oZWFkZXJfZGlyZW50PW5vCiBmb3IgYWNfaGRyIGluIGRpcmVudC5oIHN5cy9uZGlyLmggc3lzL2Rpci5oIG5kaXIuaDsgZG8KICAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyX2RpcmVudF8kYWNfaGRyIiB8ICRhc190cl9zaGAKQEAgLTcxODYsMjYgKzcyNDIsNiBAQAogZG9uZQogCiAKLQotIyBPbiBTb2xhcmlzLCB0ZXJtLmggcmVxdWlyZXMgY3Vyc2VzLmgKLWZvciBhY19oZWFkZXIgaW4gdGVybS5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJ0ZXJtLmgiICJhY19jdl9oZWFkZXJfdGVybV9oIiAiCi0jaWZkZWYgSEFWRV9DVVJTRVNfSAotI2luY2x1ZGUgPGN1cnNlcy5oPgotI2VuZGlmCi0KLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3Rlcm1faCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1RFUk1fSCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KICMgT24gTGludXgsIG5ldGxpbmsuaCByZXF1aXJlcyBhc20vdHlwZXMuaAogZm9yIGFjX2hlYWRlciBpbiBsaW51eC9uZXRsaW5rLmgKIGRvIDoKQEAgLTcyMjksNyArNzI2NSw3IEBACiAKIAogIyBPbiBMaW51eCwgY2FuLmggYW5kIGNhbi9yYXcuaCByZXF1aXJlIHN5cy9zb2NrZXQuaAotZm9yIGFjX2hlYWRlciBpbiBsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmgKK2ZvciBhY19oZWFkZXIgaW4gbGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oIGxpbnV4L2Nhbi9iY20uaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKQEAgLTczMTAsNiArNzM0Niw0MyBAQAogCiBmaQogCisjIGJ5dGUgc3dhcHBpbmcKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxlNjR0b2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxlNjR0b2guLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmZGVmIEhBVkVfRU5ESUFOX0gKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRU5ESUFOX0gpCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisgICBsZTY0dG9oKDEpCisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXNfbGU2NHRvaD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGFzX2xlNjR0b2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXNfbGU2NHRvaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhc19sZTY0dG9oIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl9oYXNfbGU2NHRvaCIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0hUT0xFNjQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKICMgRW5hYmxpbmcgTEZTIG9uIFNvbGFyaXMgKDIuNiB0byA5KSB3aXRoIGdjYyAyLjk1IHRyaWdnZXJzIGEgYnVnIGluCiAjIHRoZSBzeXN0ZW0gaGVhZGVyczogSWYgX1hPUEVOX1NPVVJDRSBhbmQgX0xBUkdFRklMRV9TT1VSQ0UgYXJlCiAjIGRlZmluZWQsIGJ1dCB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSwKQEAgLTgyNzYsNyArODM0OSw2IEBACiBlc2FjCiAKIAotQVJDSF9SVU5fMzJCSVQ9IiIKIAogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KICAgRGFyd2luL1swMTU2N11cLi4qKQpAQCAtODM0OCwxNCArODQyMCwxMiBAQAogICAgIAkJOzsKICAgICAJZXNhYwogCi0JI0FSQ0hfUlVOXzMyQklUPSJ0cnVlIgogICAgIGZpCiAKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUIiAtbFN5c3RlbSAtbFN5c3RlbVN0dWJzIC1hcmNoX29ubHkgJHtNQUNPU1hfREVGQVVMVF9BUkNIfSIKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtaW5zdGFsbF9uYW1lICQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkKFZFUlNJT04pIC1jdXJyZW50X3ZlcnNpb24gJChWRVJTSU9OKSc7OwogZXNhYwotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLWVuYWJsZS1mcmFtZXdvcmsiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWZyYW1ld29yay4uLiAiID4mNjsgfQogaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCkBAIC04NDgxLDE1ICs4NTUxLDE0IEBACiAJCSMgVXNlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAgd2hlbmV2ZXIgcG9zc2libGUgKDEwLjMgYW5kIGxhdGVyKS4KIAkJIyBUaGlzIGFsbG93cyBhbiBleHRlbnNpb24gdG8gYmUgdXNlZCBpbiBhbnkgUHl0aG9uCiAKLQkJaWYgdGVzdCAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gJz4nIDEwLjIKKwkJZGVwX3RhcmdldF9tYWpvcj1gZWNobyAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gfCBcCisJCQkJc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXCkuKi9cMS8nYAorCQlkZXBfdGFyZ2V0X21pbm9yPWBlY2hvICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSB8IFwKKwkJCQlzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKS4qL1wyLydgCisJCWlmIHRlc3QgJHtkZXBfdGFyZ2V0X21ham9yfSAtZXEgMTAgJiYgXAorCQkgICB0ZXN0ICR7ZGVwX3RhcmdldF9taW5vcn0gLWxlIDIKIAkJdGhlbgotCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlmaQotCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKLQkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwotCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCi0JCWVsc2UKKwkJCSMgYnVpbGRpbmcgZm9yIE9TIFggMTAuMCB0aHJvdWdoIDEwLjIKIAkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJwogCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiIDsgdGhlbgpAQCAtODUwMyw2ICs4NTcyLDExIEBACiAJCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJCWZpCisJCWVsc2UKKwkJCSMgYnVpbGRpbmcgZm9yIE9TIFggMTAuMyBhbmQgbGF0ZXIKKwkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgogCQlmaQogCQk7OwogCUxpbnV4KnxHTlUqfFFOWCopCkBAIC04NjEzLDYgKzg2ODcsMTIgQEAKIAkjIC11IGxpYnN5c19zIHB1bGxzIGluIGFsbCBzeW1ib2xzIGluIGxpYnN5cwogCURhcndpbi8qKQogCQlMSU5LRk9SU0hBUkVEPSIkZXh0cmFfdW5kZWZzIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCisKKwkJIyBJc3N1ZSAjMTgwNzU6IHRoZSBkZWZhdWx0IG1heGltdW0gc3RhY2sgc2l6ZSAoOE1CeXRlcykgaXMgdG9vCisJCSMgc21hbGwgZm9yIHRoZSBkZWZhdWx0IHJlY3Vyc2lvbiBsaW1pdC4gSW5jcmVhc2UgdGhlIHN0YWNrIHNpemUKKwkJIyB0byBlbnN1cmUgdGhhdCB0ZXN0cyBkb24ndCBjcmFzaAorCQlMSU5LRk9SU0hBUkVEPSItV2wsLXN0YWNrX3NpemUsMTAwMDAwMCAkTElOS0ZPUlNIQVJFRCIKKwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKIAkJdGhlbgogCQkJTElOS0ZPUlNIQVJFRD0iJExJTktGT1JTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCkBAIC04OTY3LDYgKzkwNDcsNzkgQEAKIAkqKSA7OwogZXNhYwogCisjIGNoZWNrIGZvciBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhbGlnbmVkX3JlcXVpcmVkPXllcworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluKCkKK3sKKyAgICBjaGFyIHNbMTZdOworICAgIGludCBpLCAqcDEsICpwMjsKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisgICAgICAgIHNbaV0gPSBpOworICAgIHAxID0gKGludCopKHMrMSk7CisgICAgcDIgPSAoaW50KikocysyKTsKKyAgICBpZiAoKnAxID09ICpwMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFsaWduZWRfcmVxdWlyZWQ9bm8KK2Vsc2UKKyAgYWxpZ25lZF9yZXF1aXJlZD15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2lmIHRlc3QgIiRhbGlnbmVkX3JlcXVpcmVkIiA9IHllcyA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTElHTkVEX1JFUVVJUkVEIDEiID4+Y29uZmRlZnMuaAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbGlnbmVkX3JlcXVpcmVkIiA+JjUKKyRhc19lY2hvICIkYWxpZ25lZF9yZXF1aXJlZCIgPiY2OyB9CisKKworIyBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3IGhhc2ggYWxnb3JpdGhtCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtaGFzaC1hbGdvcml0aG0uLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1oYXNoX2FsZ29yaXRobSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaGFzaF9hbGdvcml0aG0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2hhc2hfYWxnb3JpdGhtOworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICIkd2l0aHZhbCIgPiY2OyB9CitjYXNlICIkd2l0aHZhbCIgaW4KKyAgICBzaXBoYXNoMjQpCisgICAgICAgICRhc19lY2hvICIjZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDs7CisgICAgZm52KQorICAgICAgICAkYXNfZWNobyAiI2RlZmluZSBQeV9IQVNIX0FMR09SSVRITSAyIiA+PmNvbmZkZWZzLmgKKworICAgICAgICA7OworICAgICopCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bmtub3duIGhhc2ggYWxnb3JpdGhtICckd2l0aHZhbCciICIkTElORU5PIiA1CisgICAgICAgIDs7Citlc2FjCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gImRlZmF1bHQiID4mNjsgfQorZmkKKworCiAjIE1vc3QgU1ZSNCBwbGF0Zm9ybXMgKGUuZy4gU29sYXJpcykgbmVlZCAtbHNvY2tldCBhbmQgLWxuc2wuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0X29wZW4gaW4gLWxuc2wiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRfb3BlbiBpbiAtbG5zbC4uLiAiID4mNjsgfQpAQCAtMTAzMDgsNyArMTA0NjEsNyBAQAogCiAjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKIGZvciBhY19mdW5jIGluIGFsYXJtIGFjY2VwdDQgc2V0aXRpbWVyIGdldGl0aW1lciBiaW5kX3RleHRkb21haW5fY29kZXNldCBjaG93biBcCi0gY2xvY2sgY29uZnN0ciBjdGVybWlkIGV4ZWN2IGZhY2Nlc3NhdCBmY2htb2QgZmNobW9kYXQgZmNob3duIGZjaG93bmF0IFwKKyBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZHVwMyBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCiAgZmV4ZWN2ZSBmZG9wZW5kaXIgZm9yayBmcGF0aGNvbmYgZnN0YXRhdCBmdGltZSBmdHJ1bmNhdGUgZnV0aW1lc2F0IFwKICBmdXRpbWVucyBmdXRpbWVzIGdhaV9zdHJlcnJvciBcCiAgZ2V0Z3JvdXBsaXN0IGdldGdyb3VwcyBnZXRsb2dpbiBnZXRsb2FkYXZnIGdldHBlZXJuYW1lIGdldHBnaWQgZ2V0cGlkIFwKQEAgLTEwMzI4LDcgKzEwNDgxLDcgQEAKICBzaWd0aW1lZHdhaXQgc2lnd2FpdCBzaWd3YWl0aW5mbyBzbnByaW50ZiBzdHJmdGltZSBzdHJsY3B5IHN5bWxpbmthdCBzeW5jIFwKICBzeXNjb25mIHRjZ2V0cGdycCB0Y3NldHBncnAgdGVtcG5hbSB0aW1lZ20gdGltZXMgdG1wZmlsZSB0bXBuYW0gdG1wbmFtX3IgXAogIHRydW5jYXRlIHVuYW1lIHVubGlua2F0IHVuc2V0ZW52IHV0aW1lbnNhdCB1dGltZXMgd2FpdGlkIHdhaXRwaWQgd2FpdDMgd2FpdDQgXAotIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3cml0ZXYgX2dldHB0eQorIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3bWVtY21wIHdyaXRldiBfZ2V0cHR5CiBkbyA6CiAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgpAQCAtMTA1ODEsNiArMTA3MzQsMzUgQEAKIAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHJsaW1pdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHJsaW1pdC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKworaW50CittYWluICgpCit7Cit2b2lkICp4PXBybGltaXQKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BSTElNSVQgMSIgPj5jb25mZGVmcy5oCisKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKICMgT24gc29tZSBzeXN0ZW1zIChlZy4gRnJlZUJTRCA1KSwgd2Ugd291bGQgZmluZCBhIGRlZmluaXRpb24gb2YgdGhlCiAjIGZ1bmN0aW9ucyBjdGVybWlkX3IsIHNldGdyb3VwcyBpbiB0aGUgbGlicmFyeSwgYnV0IG5vIHByb3RvdHlwZQogIyAoZS5nLiBiZWNhdXNlIHdlIHVzZSBfWE9QRU5fU09VUkNFKS4gU2VlIHdoZXRoZXIgd2UgY2FuIHRha2UgdGhlaXIKQEAgLTExNDEyLDE5ICsxMTU5NCw2IEBACiAKIGZpCiAKLWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGN3ZCIgImFjX2N2X2Z1bmNfZ2V0Y3dkIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGN3ZCIgPSB4eWVzOyB0aGVuIDoKLSAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRDV0QgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgZ2V0Y3dkLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBnZXRjd2QuJGFjX29iamV4dCIKLSA7OwotZXNhYwotCi1maQotCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJkdXAiICJhY19jdl9mdW5jX3N0cmR1cCIKIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJkdXAiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSRFVQIDEiID4+Y29uZmRlZnMuaApAQCAtMTM3NzgsNiArMTM5NDcsMTAgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTERWRVJTSU9OIiA+JjUKICRhc19lY2hvICIkTERWRVJTSU9OIiA+JjY7IH0KIAorCitMSUJQTD0iJHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCisKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJpZ2h0IHNoaWZ0IGV4dGVuZHMgdGhlIHNpZ24gYml0IiA+JjUKQEAgLTE0NDk5LDggKzE0NjcyLDQzIEBACiAKIGZpCiAKKyMgZmlyc3QgY3Vyc2VzIGhlYWRlciBjaGVjawogYWNfc2F2ZV9jcHBmbGFncz0iJENQUEZMQUdTIgogQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKworZm9yIGFjX2hlYWRlciBpbiBjdXJzZXMuaCBuY3Vyc2VzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIE9uIFNvbGFyaXMsIHRlcm0uaCByZXF1aXJlcyBjdXJzZXMuaAorZm9yIGFjX2hlYWRlciBpbiB0ZXJtLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInRlcm0uaCIgImFjX2N2X2hlYWRlcl90ZXJtX2giICIKKyNpZmRlZiBIQVZFX0NVUlNFU19ICisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGVybV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVEVSTV9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKwogIyBPbiBIUC9VWCAxMS4wLCBtdndkZWxjaCBpcyBhIGJsb2NrIHdpdGggYSByZXR1cm4gc3RhdGVtZW50CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbXZ3ZGVsY2ggaXMgYW4gZXhwcmVzc2lvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG12d2RlbGNoIGlzIGFuIGV4cHJlc3Npb24uLi4gIiA+JjY7IH0KQEAgLTE1MTg1LDggKzE1MzkzLDMzIEBACiAgICAgZXNhYwogZmkKIAorIyBlbnN1cmVwaXAgb3B0aW9uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlbnN1cmVwaXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVuc3VyZXBpcC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVuc3VyZXBpcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW5zdXJlcGlwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbnN1cmVwaXA7CitlbHNlCisgIHdpdGhfZW5zdXJlcGlwPXVwZ3JhZGUKK2ZpCisKK2Nhc2UgJHdpdGhfZW5zdXJlcGlwIGluICMoCisgIHllc3x1cGdyYWRlKSA6CisgICAgRU5TVVJFUElQPXVwZ3JhZGUgOzsgIygKKyAgaW5zdGFsbCkgOgorICAgIEVOU1VSRVBJUD1pbnN0YWxsIDs7ICMoCisgIG5vKSA6CisgICAgRU5TVVJFUElQPW5vIDs7ICMoCisgICopIDoKKyAgICBhc19mbl9lcnJvciAkPyAiLS13aXRoLWVuc3VyZXBpcD11cGdyYWRlfGluc3RhbGx8bm8iICIkTElORU5PIiA1IDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVOU1VSRVBJUCIgPiY1CiskYXNfZWNobyAiJEVOU1VSRVBJUCIgPiY2OyB9CisKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLWFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCIKIAogYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1vZHVsZXMvbGRfc29fYWl4IgogCkBAIC0xNTY5Nyw3ICsxNTkzMCw3IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuMywgd2hpY2ggd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTE1NzU5LDcgKzE1OTkyLDcgQEAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1weXRob24gY29uZmlnLnN0YXR1cyAzLjMKK3B5dGhvbiBjb25maWcuc3RhdHVzIDMuNAogY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAogICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIApAQCAtMTU4OTAsNiArMTYxMjMsNyBAQAogICAgICJNYWtlZmlsZS5wcmUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUucHJlIiA7OwogICAgICJNb2R1bGVzL1NldHVwLmNvbmZpZyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL1NldHVwLmNvbmZpZyIgOzsKICAgICAiTWlzYy9weXRob24ucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWlzYy9weXRob24ucGMiIDs7CisgICAgIk1pc2MvcHl0aG9uLWNvbmZpZy5zaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNaXNjL3B5dGhvbi1jb25maWcuc2giIDs7CiAgICAgIk1vZHVsZXMvbGRfc29fYWl4IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1vZHVsZXMvbGRfc29fYWl4IiA7OwogCiAgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDBlNjdmMDMuLjk2OThlYTAgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTMsNyArMyw3IEBACiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogIyBTZXQgVkVSU0lPTiBzbyB3ZSBvbmx5IG5lZWQgdG8gZWRpdCBpbiBvbmUgcGxhY2UgKGkuZS4sIGhlcmUpCi1tNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuMykKK200X2RlZmluZShQWVRIT05fVkVSU0lPTiwgMy40KQogCiBBQ19QUkVSRVEoMi42NSkKIApAQCAtNTMsNiArNTMsOSBAQAogQUNfU1VCU1QoYnVpbGQpCiBBQ19TVUJTVChob3N0KQogCisjIHB5YnVpbGRkaXIudHh0IHdpbGwgYmUgY3JlYXRlZCBieSAtLWdlbmVyYXRlLXBvc2l4LXZhcnMgaW4gdGhlIE1ha2VmaWxlCitybSAtZiBweWJ1aWxkZGlyLnR4dAorCiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB5dGhvbiBpbnRlcnByZXRlciBmb3IgY3Jvc3MgYnVpbGRdKQogICAgIGlmIHRlc3QgLXogIiRQWVRIT05fRk9SX0JVSUxEIjsgdGhlbgpAQCAtMTUyLDcgKzE1NSw3IEBACiAJCSMgTG9jYXRlIHRoZSBiZXN0IHVzYWJsZSBTREssIHNlZSBNYWMvUkVBRE1FLnR4dCBmb3IgbW9yZQogCQkjIGluZm9ybWF0aW9uCiAJCWVuYWJsZXZhbD0iYC91c3IvYmluL3hjb2RlYnVpbGQgLXZlcnNpb24gLXNkayBtYWNvc3ggUGF0aCAyPi9kZXYvbnVsbGAiCi0JCWlmIHRlc3QgLXogIiR7ZW5hYmxldmFsfSIKKwkJaWYgISAoIGVjaG8gJGVuYWJsZXZhbCB8IGdyZXAgLUUgJ1wuc2RrJyAxPi9kZXYvbnVsbCApCiAJCXRoZW4KIAkJCWVuYWJsZXZhbD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrCiAJCQlpZiB0ZXN0ICEgLWQgIiR7ZW5hYmxldmFsfSIKQEAgLTE4OSw2ICsxOTIsNyBAQAogQUNfU1VCU1QoVU5JVkVSU0FMU0RLKQogCiBBQ19TVUJTVChBUkNIX1JVTl8zMkJJVCkKK0FSQ0hfUlVOXzMyQklUPSIiCiAKICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3ZSBwcmVmZXIgdG8gc2VsZWN0ICczMi1iaXQnIGlmIGF2YWlsYWJsZSwKICMgb3RoZXJ3aXNlIHVzZSAnaW50ZWwnCkBAIC0xOTcsNyArMjAxLDcgQEAKIHRoZW4KIAlpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCiAJdGhlbgotCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKKwkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgLUwgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCiAJCXRoZW4KIAkJCVVOSVZFUlNBTF9BUkNIUz0iaW50ZWwiCiAJCWZpCkBAIC0yMDcsMTYgKzIxMSwxNyBAQAogQUNfU1VCU1QoTElQT18zMkJJVF9GTEFHUykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXVuaXZlcnNhbC1hcmNocykKIEFDX0FSR19XSVRIKHVuaXZlcnNhbC1hcmNocywKLSAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIildKSwKKyAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiwgImludGVsLTMyIiwgb3IgImFsbCIpXSksCiBbCi0JQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKIAlVTklWRVJTQUxfQVJDSFM9IiR3aXRodmFsIgogXSwKLVsKLSAJQUNfTVNHX1JFU1VMVCgke1VOSVZFUlNBTF9BUkNIU30pCi1dKQotCi0KK1tdKQoraWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgordGhlbgorCUFDX01TR19SRVNVTFQoJHtVTklWRVJTQUxfQVJDSFN9KQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQogCiBBQ19BUkdfV0lUSChmcmFtZXdvcmstbmFtZSwKICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUktdLApAQCAtMjQ4LDYgKzI1Myw3IEBACiAJCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCQlGUkFNRVdPUktQWVRIT05XPQogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSI7IHRoZW4KIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJCWVsc2UKQEAgLTI2Miw2ICsyNjgsNyBAQAogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktQWVRIT05XPSJmcmFtZXdvcmtweXRob253IgogCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCkBAIC0zMjMsNiArMzMwLDcgQEAKIAlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJRlJBTUVXT1JLUFlUSE9OVz0KIAlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJZWxzZQpAQCAtMzQwLDYgKzM0OCw3IEBACiBBQ19TVUJTVChGUkFNRVdPUktJTlNUQUxMTEFTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExGSVJTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExMQVNUKQorQUNfU1VCU1QoRlJBTUVXT1JLUFlUSE9OVykKIEFDX1NVQlNUKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkKIEFDX1NVQlNUKEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYKQogCkBAIC01MTYsNiArNTI1LDE5IEBACiAgIEFDX0RFRklORShfUE9TSVhfQ19TT1VSQ0UsIDIwMDgwOUwsIERlZmluZSB0byBhY3RpdmF0ZSBmZWF0dXJlcyBmcm9tIElFRUUgU3RkcyAxMDAzLjEtMjAwOCkKIGZpCiAKKyMgT24gSFAtVVggbWJzdGF0ZV90IHJlcXVpcmVzIF9JTkNMVURFX19TVERDX0ExX1NPVVJDRQorY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorICBocCp8SFAqKQorICAgIGRlZmluZV9zdGRjX2ExPXllczs7CisgICopCisgICAgZGVmaW5lX3N0ZGNfYTE9bm87OworZXNhYworCitpZiB0ZXN0ICRkZWZpbmVfc3RkY19hMSA9IHllcwordGhlbgorICBBQ19ERUZJTkUoX0lOQ0xVREVfX1NURENfQTFfU09VUkNFLCAxLCBEZWZpbmUgdG8gaW5jbHVkZSBtYnN0YXRlX3QgZm9yIG1icnRvd2MpCitmaQorCiAjCiAjIFNHSSBjb21waWxlcnMgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGJvdGggdGhlIEFCSSBhbmQgdGhlCiAjIElTQSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugc3dpdGNoZXMsCkBAIC02OTEsNyArNzEzLDcgQEAKIGZpCiBpZiB0ZXN0ICIkcHJlc2V0X2N4eCIgIT0gIiRDWFgiCiB0aGVuCi0gICAgICAgIEFDX01TR19XQVJOKFsKKyAgICAgICAgQUNfTVNHX05PVElDRShbCiAKICAgQnkgZGVmYXVsdCwgZGlzdHV0aWxzIHdpbGwgYnVpbGQgQysrIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggIiRDWFgiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgpAQCAtOTE3LDYgKzkzOSw3IEBACiAKICMgT3RoZXIgcGxhdGZvcm1zIGZvbGxvdwogaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiOyB0aGVuCisgIFBZX0VOQUJMRV9TSEFSRUQ9MQogICBBQ19ERUZJTkUoUHlfRU5BQkxFX1NIQVJFRCwgMSwgW0RlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuXSkKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCkBAIC05NjMsNyArOTg2LDcgQEAKICAgICBEYXJ3aW4qKQogICAgIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5keWxpYicKIAlCTERMSUJSQVJZPSctTC4gLWxweXRob24kKExEVkVSU0lPTiknCi0JUlVOU0hBUkVEPSdEWUxEX0xJQlJBUllfUEFUSD1gcHdkYCR7RFlMRF9MSUJSQVJZX1BBVEg6Kzoke0RZTERfTElCUkFSWV9QQVRIfX0nCisJUlVOU0hBUkVEPURZTERfTElCUkFSWV9QQVRIPWBwd2RgJHtEWUxEX0xJQlJBUllfUEFUSDorOiR7RFlMRF9MSUJSQVJZX1BBVEh9fQogCTs7CiAgICAgQUlYKikKIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKQEAgLTk3Miw2ICs5OTUsNyBAQAogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKKyAgUFlfRU5BQkxFX1NIQVJFRD0wCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCkBAIC0xMTE3LDYgKzExNDEsNyBAQAogZmkKIAogQUNfU1VCU1QoQkFTRUNGTEFHUykKK0FDX1NVQlNUKENGTEFHU19OT0RJU1QpCiAKICMgVGhlIC1hcmNoIGZsYWdzIGZvciB1bml2ZXJzYWwgYnVpbGRzIG9uIE9TWAogVU5JVkVSU0FMX0FSQ0hfRkxBR1M9CkBAIC0xMTgyLDYgKzEyMDcsMjggQEAKICAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1Xbm8tdW51c2VkLXJlc3VsdCIKICAgICBmaQogCisgICAgQUNfTVNHX0NIRUNLSU5HKGZvciAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCkKKyAgICAgYWNfc2F2ZV9jYz0iJENDIgorICAgICBDQz0iJENDIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nLAorICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgWworCSAgIEFDX0xBTkdfUFJPR1JBTShbW11dLCBbW11dKQorCSBdLFsKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9eWVzCisJIF0sWworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz1ubworCSBdKSkKKyAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgIENDPSIkYWNfc2F2ZV9jYyIKKyAgICBBQ19NU0dfUkVTVUxUKCRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZykKKworICAgIGlmIHRlc3QgJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nID0geWVzCisgICAgdGhlbgorICAgICAgQ0ZMQUdTX05PRElTVD0iJENGTEFHU19OT0RJU1QgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgZmkKKwogICAgICMgaWYgdXNpbmcgZ2NjIG9uIGFscGhhLCB1c2UgLW1pZWVlIHRvIGdldCAobmVhcikgZnVsbCBJRUVFIDc1NAogICAgICMgc3VwcG9ydC4gIFdpdGhvdXQgdGhpcywgdHJlYXRtZW50IG9mIHN1Ym5vcm1hbHMgZG9lc24ndCBmb2xsb3cKICAgICAjIHRoZSBzdGFuZGFyZC4KQEAgLTExOTUsMTExICsxMjQyLDEyNiBAQAogCVNDT19TViopCiAJICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1tNDg2IC1EU0NPNSIKIAkgICAgOzsKLQkjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/Ci0JRGFyd2luKikKLQkgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKLQkgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCi0gICAgICAgICAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKLQkgICAgdGhlbgotCQlBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQpCi0JCWNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KLQkJKi9NYWNPU1gxMC40dS5zZGspCi0JCQkjIEJ1aWxkIHVzaW5nIDEwLjQgU0RLLCBmb3JjZSB1c2FnZSBvZiBnY2Mgd2hlbiB0aGUgCi0JCQkjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKLQkJCSMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKLQkJCUNDPWdjYy00LjAKLQkJCUNQUD1jcHAtNC4wCi0JCQk7OwotCQllc2FjCi0JCUFDX01TR19SRVNVTFQoJENDKQotCSAgICBmaQogCisgICAgIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPworICAgIERhcndpbiopCisgICAgICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCisgICAgICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgorICAgICAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkKQorICAgICAgICAgICAgY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgorICAgICAgICAgICAgKi9NYWNPU1gxMC40dS5zZGspCisgICAgICAgICAgICAgICAgIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5CisgICAgICAgICAgICAgICAgIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgorICAgICAgICAgICAgICAgIENDPWdjYy00LjAKKyAgICAgICAgICAgICAgICBDUFA9Y3BwLTQuMAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCRDQykKKyAgICAgICAgZmkKIAotCSAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQlVTklWRVJTQUxfQVJDSF9GTEFHUz0iIgotCSAgICAgICAgaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMzItYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iIgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICI2NC1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjYXNlICIkVU5JVkVSU0FMX0FSQ0hTIiBpbgorICAgICAgICAgICAgMzItYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICA2NC1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgYWxsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgaW50ZWwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgaW50ZWwtMzIpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgMy13YXkpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5XSkKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgIENGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCisgICAgICAgICAgICBMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCisgICAgICAgICAgICBpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIENQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICAjIENhbGN1bGF0ZSBhbiBhcHByb3ByaWF0ZSBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZDoKKyAgICAgICAgIyBUaGUgZGVwbG95bWVudCB0YXJnZXQgdmFsdWUgaXMgdXNlZCBleHBsaWNpdGx5IHRvIGVuYWJsZSBjZXJ0YWluCisgICAgICAgICMgZmVhdHVyZXMgYXJlIGVuYWJsZWQgKHN1Y2ggYXMgYnVpbHRpbiBsaWJlZGl0IHN1cHBvcnQgZm9yIHJlYWRsaW5lKQorICAgICAgICAjIHRocm91Z2ggdGhlIHVzZSBvZiBBcHBsZSdzIEF2YWlsYWJpbGl5IE1hY3JvcyBhbmQgaXMgdXNlZCBhcyBhCisgICAgICAgICMgY29tcG9uZW50IG9mIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgZGlzdHV0aWxzLmdldF9wbGF0Zm9ybSgpLgorICAgICAgICAjCisgICAgICAgICMgVXNlIHRoZSB2YWx1ZSBmcm9tOgorICAgICAgICAjIDEuIHRoZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc3BlY2lmaWVkCisgICAgICAgICMgMi4gdGhlIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbiBvZiB0aGUgYnVpbGQgbWFjaGluZSBpZiA+PSAxMC42CisgICAgICAgICMgMy4gSWYgcnVubmluZyBvbiBPUyBYIDEwLjMgdGhyb3VnaCAxMC41LCB1c2UgdGhlIGxlZ2FjeSB0ZXN0cworICAgICAgICAjICAgICAgIGJlbG93IHRvIHBpY2sgZWl0aGVyIDEwLjMsIDEwLjQsIG9yIDEwLjUgYXMgdGhlIHRhcmdldC4KKyAgICAgICAgIyA0LiBJZiB3ZSBhcmUgcnVubmluZyBvbiBPUyBYIDEwLjIgb3IgZWFybGllciwgZ29vZCBsdWNrIQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKHdoaWNoIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCB0byB1c2UpCisgICAgICAgIGN1cl90YXJnZXRfbWFqb3I9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCisgICAgICAgIGN1cl90YXJnZXRfbWlub3I9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCisgICAgICAgIGN1cl90YXJnZXQ9IiR7Y3VyX3RhcmdldF9tYWpvcn0uJHtjdXJfdGFyZ2V0X21pbm9yfSIKKyAgICAgICAgaWYgdGVzdCAke2N1cl90YXJnZXRfbWFqb3J9IC1lcSAxMCAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0X21pbm9yfSAtZ2UgMyAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0X21pbm9yfSAtbGUgNQorICAgICAgICB0aGVuCisgICAgICAgICAgICAjIE9TIFggMTAuMyB0aHJvdWdoIDEwLjUKKyAgICAgICAgICAgIGN1cl90YXJnZXQ9MTAuMworICAgICAgICAgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9CisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgICAgICBhbGx8My13YXl8aW50ZWx8NjQtYml0KQorICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHdlcmUgZmlyc3Qgc3VwcG9ydGVkIGluIDEwLjUKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0nMTAuNScKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiIKKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICMgMTAuNCB3YXMgdGhlIGZpcnN0IHJlbGVhc2UgdG8gc3VwcG9ydCBJbnRlbCBhcmNocworICAgICAgICAgICAgICAgICAgICBjdXJfdGFyZ2V0PSIxMC40IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19CiAKLQkJIGVsc2UKLQkgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGlzIHNldCBpbiB0aGUKKyAgICAgICAgIyBlbnZpcm9ubWVudCB3aXRoIGEgdmFsdWUgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IHdlJ2xsIHVzZQorICAgICAgICAjIGluIHRoZSBNYWtlZmlsZSB0byBlbnN1cmUgdGhhdCB3ZSdsbCBnZXQgdGhlIHNhbWUgY29tcGlsZXIKKyAgICAgICAgIyBlbnZpcm9ubWVudCBkdXJpbmcgY29uZmlndXJlIGFuZCBidWlsZCB0aW1lLgorICAgICAgICBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9IiRDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIgorICAgICAgICBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCisgICAgICAgIEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JycKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUKQogCi0JCSBmaQotCi0KLQkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKLQkJdGhlbgotCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgotCQlmaQotCSAgICBmaQotCi0JICAgICMgQ2FsY3VsYXRlIHRoZSByaWdodCBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZC4KLQkgICAgIwotCSAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bWzAtOV1dKlwpLiovXDEvJ2AKLQkgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKLQkgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42Ci0JICAgIHRoZW4KLQkJICAgIGN1cl90YXJnZXQ9MTAuMwotCQkgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9OyB0aGVuCi0JCQkgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxfQVJDSFN9IiA9ICJhbGwiOyB0aGVuCi0JCQkJICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcGxhdGZvcm0gZm9yIGEgCi0JCQkJICAgICMgNC13YXkgdW5pdmVyc2FsIGJ1aWxkIGlzIE9TWCAxMC41LCAKLQkJCQkgICAgIyB0aGF0J3MgdGhlIGZpcnN0IE9TIHJlbGVhc2Ugd2hlcmUgCi0JCQkJICAgICMgNC13YXkgYnVpbGRzIG1ha2Ugc2Vuc2UuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiMy13YXkiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiaW50ZWwiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiNjQtYml0IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCQkJICAgIGZpCi0JCSAgICBlbHNlCi0JCQkgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiI7IHRoZW4KLQkJCQkgICAgIyBPbiBJbnRlbCBtYWNzIGRlZmF1bHQgdG8gYSBkZXBsb3ltZW50Ci0JCQkJICAgICMgdGFyZ2V0IG9mIDEwLjQsIHRoYXQncyB0aGUgZmlyc3QgT1NYCi0JCQkJICAgICMgcmVsZWFzZSB3aXRoIEludGVsIHN1cHBvcnQuCi0JCQkJICAgIGN1cl90YXJnZXQ9IjEwLjQiCi0JCQkgICAgZmkKLQkJICAgIGZpCi0JICAgIGZpCi0JICAgIENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtJHtjdXJfdGFyZ2V0fX0KLQkgICAgCi0JICAgICMgTWFrZSBzdXJlIHRoYXQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGlzIHNldCBpbiB0aGUgCi0JICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKLQkgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCi0JICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KLQkgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKLQkgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotCSAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCi0KLQkgICAgOzsKKyAgICAgICAgIyBlbmQgb2YgRGFyd2luKiB0ZXN0cworICAgICAgICA7OwogICAgIGVzYWMKICAgICA7OwogCkBAIC0xMzI2LDI0ICsxMzg4LDYgQEAKIAlCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAkYWNfYXJjaF9mbGFncyIKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciBHQ0Mgc3VwcG9ydHMgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLXRoZW4KLSAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgZ2NjIHN1cHBvcnRzIFBhcnNlVHVwbGUgX19mb3JtYXRfXykKLSAgc2F2ZV9DRkxBR1M9JENGTEFHUwotICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV2Zvcm1hdCIKLSAgQUNfQ09NUElMRV9JRkVMU0UoWwotICAgIEFDX0xBTkdfUFJPR1JBTShbW3ZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpO11dLCBbW11dKQotICBdLFsKLSAgICBBQ19ERUZJTkUoSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUsIDEsCi0gICAgICBbRGVmaW5lIGlmIEdDQyBzdXBwb3J0cyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMiwgMykpKV0pCi0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gIF0sWwotICAgIEFDX01TR19SRVNVTFQobm8pCi0gIF0pCi0gIENGTEFHUz0kc2F2ZV9DRkxBR1MKLWZpCi0KICMgT24gc29tZSBjb21waWxlcnMsIHB0aHJlYWRzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBmdXJ0aGVyIG9wdGlvbnMKICMgKGUuZy4gTWFjT1MgWCkuIE9uIHNvbWUgb2YgdGhlc2Ugc3lzdGVtcywgdGhlIGNvbXBpbGVyIHdpbGwgbm90CiAjIGNvbXBsYWluIGlmIHVuYWNjZXB0ZWQgb3B0aW9ucyBhcmUgcGFzc2VkIChlLmcuIGdjYyBvbiBNYWMgT1MgWCkuCkBAIC0xNTEyLDExICsxNTU2LDkgQEAKIAogIyBjaGVja3MgZm9yIGhlYWRlciBmaWxlcwogQUNfSEVBREVSX1NUREMKLWFjX3NhdmVfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKLUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3ciCi1BQ19DSEVDS19IRUFERVJTKGFzbS90eXBlcy5oIGNvbmlvLmggY3Vyc2VzLmggZGlyZWN0LmggZGxmY24uaCBlcnJuby5oIFwKK0FDX0NIRUNLX0hFQURFUlMoYXNtL3R5cGVzLmggY29uaW8uaCBkaXJlY3QuaCBkbGZjbi5oIGVycm5vLmggXAogZmNudGwuaCBncnAuaCBcCi1pZWVlZnAuaCBpby5oIGxhbmdpbmZvLmggbGliaW50bC5oIG5jdXJzZXMuaCBwcm9jZXNzLmggcHRocmVhZC5oIFwKK2llZWVmcC5oIGlvLmggbGFuZ2luZm8uaCBsaWJpbnRsLmggcHJvY2Vzcy5oIHB0aHJlYWQuaCBcCiBzY2hlZC5oIHNoYWRvdy5oIHNpZ25hbC5oIHN0ZGludC5oIHN0cm9wdHMuaCB0ZXJtaW9zLmggXAogdW5pc3RkLmggdXRpbWUuaCBcCiBwb2xsLmggc3lzL2RldnBvbGwuaCBzeXMvZXBvbGwuaCBzeXMvcG9sbC5oIFwKQEAgLTE1MjYsOCArMTU2OCw4IEBACiBzeXMvc3RhdC5oIHN5cy9zeXNjYWxsLmggc3lzL3N5c19kb21haW4uaCBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdWlvLmggc3lzL3VuLmggc3lzL3V0c25hbWUuaCBzeXMvd2FpdC5oIHB0eS5oIFwKIGxpYnV0aWwuaCBzeXMvcmVzb3VyY2UuaCBuZXRwYWNrZXQvcGFja2V0Lmggc3lzZXhpdHMuaCBibHVldG9vdGguaCBcCi1ibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oKQotQ1BQRkxBR1M9JGFjX3NhdmVfY3BwZmxhZ3MKK2JsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmggZW5kaWFuLmggXAorc3lzL2VuZGlhbi5oKQogQUNfSEVBREVSX0RJUkVOVAogQUNfSEVBREVSX01BSk9SCiAKQEAgLTE1NDcsMTQgKzE1ODksNiBAQAogI2VuZGlmCiBdKQogCi0KLSMgT24gU29sYXJpcywgdGVybS5oIHJlcXVpcmVzIGN1cnNlcy5oCi1BQ19DSEVDS19IRUFERVJTKHRlcm0uaCwsLFsKLSNpZmRlZiBIQVZFX0NVUlNFU19ICi0jaW5jbHVkZSA8Y3Vyc2VzLmg+Ci0jZW5kaWYKLV0pCi0KICMgT24gTGludXgsIG5ldGxpbmsuaCByZXF1aXJlcyBhc20vdHlwZXMuaAogQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC9uZXRsaW5rLmgsLCxbCiAjaWZkZWYgSEFWRV9BU01fVFlQRVNfSApAQCAtMTU2Niw3ICsxNjAwLDcgQEAKIF0pCiAKICMgT24gTGludXgsIGNhbi5oIGFuZCBjYW4vcmF3LmggcmVxdWlyZSBzeXMvc29ja2V0LmgKLUFDX0NIRUNLX0hFQURFUlMobGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oLCwsWworQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmggbGludXgvY2FuL2JjbS5oLCwsWwogI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC0xNTk3LDYgKzE2MzEsMjIgQEAKICAgICBBQ19ERUZJTkUoSEFWRV9NQUtFREVWLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIG1ha2VkZXYgbWFjcm8uXSkKIGZpCiAKKyMgYnl0ZSBzd2FwcGluZworQUNfTVNHX0NIRUNLSU5HKGZvciBsZTY0dG9oKQorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfRU5ESUFOX0gKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRU5ESUFOX0gpCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCitdXSwgW1sKKyAgIGxlNjR0b2goMSkgXV0pCitdLFthY19jdl9oYXNfbGU2NHRvaD15ZXNdLFthY19jdl9oYXNfbGU2NHRvaD1ub10pCitBQ19NU0dfUkVTVUxUKCRhY19jdl9oYXNfbGU2NHRvaCkKK2lmIHRlc3QgIiRhY19jdl9oYXNfbGU2NHRvaCIgPSAieWVzIjsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0hUT0xFNjQsIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBsZTY0dG9oKCldKQorZmkKKwogIyBFbmFibGluZyBMRlMgb24gU29sYXJpcyAoMi42IHRvIDkpIHdpdGggZ2NjIDIuOTUgdHJpZ2dlcnMgYSBidWcgaW4KICMgdGhlIHN5c3RlbSBoZWFkZXJzOiBJZiBfWE9QRU5fU09VUkNFIGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBhcmUKICMgZGVmaW5lZCwgYnV0IHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHByYWdtYSByZWRlZmluZV9leHRuYW1lLApAQCAtMTc5OCw3ICsxODQ4LDYgQEAKIGVzYWMKIAogCi1BUkNIX1JVTl8zMkJJVD0iIgogQUNfU1VCU1QoTElCVE9PTF9DUlVGVCkKIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiAgIERhcndpbi9APDpAMDE1NjdAOj5AXC4uKikgCkBAIC0xODU1LDE0ICsxOTA0LDEyIEBACiAgICAgCQk7OwogICAgIAllc2FjCiAKLQkjQVJDSF9SVU5fMzJCSVQ9InRydWUiCiAgICAgZmkKIAogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQiIC1sU3lzdGVtIC1sU3lzdGVtU3R1YnMgLWFyY2hfb25seSAke01BQ09TWF9ERUZBVUxUX0FSQ0h9IgogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQnIC1pbnN0YWxsX25hbWUgJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICQoVkVSU0lPTikgLWN1cnJlbnRfdmVyc2lvbiAkKFZFUlNJT04pJzs7CiBlc2FjCi0KIEFDX01TR19DSEVDS0lORyhmb3IgLS1lbmFibGUtZnJhbWV3b3JrKQogaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiB0aGVuCkBAIC0xOTgwLDE1ICsyMDI3LDE0IEBACiAJCSMgVXNlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAgd2hlbmV2ZXIgcG9zc2libGUgKDEwLjMgYW5kIGxhdGVyKS4KIAkJIyBUaGlzIGFsbG93cyBhbiBleHRlbnNpb24gdG8gYmUgdXNlZCBpbiBhbnkgUHl0aG9uCiAKLQkJaWYgdGVzdCAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gJz4nIDEwLjIKKwkJZGVwX3RhcmdldF9tYWpvcj1gZWNobyAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gfCBcCisJCQkJc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDEvJ2AKKwkJZGVwX3RhcmdldF9taW5vcj1gZWNobyAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gfCBcCisJCQkJc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKwkJaWYgdGVzdCAke2RlcF90YXJnZXRfbWFqb3J9IC1lcSAxMCAmJiBcCisJCSAgIHRlc3QgJHtkZXBfdGFyZ2V0X21pbm9yfSAtbGUgMgogCQl0aGVuCi0JCQlpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQkJCUxERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCWZpCi0JCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwotCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCi0JCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCIKLQkJZWxzZQorCQkJIyBidWlsZGluZyBmb3IgT1MgWCAxMC4wIHRocm91Z2ggMTAuMgogCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUnCiAJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIgOyB0aGVuCkBAIC0yMDAyLDYgKzIwNDgsMTEgQEAKIAkJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSknCiAJCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQkJZmkKKwkJZWxzZQorCQkJIyBidWlsZGluZyBmb3IgT1MgWCAxMC4zIGFuZCBsYXRlcgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJworCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCiAJCWZpCiAJCTs7CiAJTGludXgqfEdOVSp8UU5YKikKQEAgLTIxMDgsNiArMjE1OSwxMiBAQAogCSMgLXUgbGlic3lzX3MgcHVsbHMgaW4gYWxsIHN5bWJvbHMgaW4gbGlic3lzCiAJRGFyd2luLyopIAogCQlMSU5LRk9SU0hBUkVEPSIkZXh0cmFfdW5kZWZzIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCisKKwkJIyBJc3N1ZSAjMTgwNzU6IHRoZSBkZWZhdWx0IG1heGltdW0gc3RhY2sgc2l6ZSAoOE1CeXRlcykgaXMgdG9vCisJCSMgc21hbGwgZm9yIHRoZSBkZWZhdWx0IHJlY3Vyc2lvbiBsaW1pdC4gSW5jcmVhc2UgdGhlIHN0YWNrIHNpemUKKwkJIyB0byBlbnN1cmUgdGhhdCB0ZXN0cyBkb24ndCBjcmFzaAorCQlMSU5LRk9SU0hBUkVEPSItV2wsLXN0YWNrX3NpemUsMTAwMDAwMCAkTElOS0ZPUlNIQVJFRCIKKwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKIAkJdGhlbgogCQkJTElOS0ZPUlNIQVJFRD0iJExJTktGT1JTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCkBAIC0yMjEyLDYgKzIyNjksNTkgQEAKIAkqKSA7OwogZXNhYwogCisjIGNoZWNrIGZvciBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKK0FDX01TR19DSEVDS0lORyhhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQpCitBQ19UUllfUlVOKFsKK2ludCBtYWluKCkKK3sKKyAgICBjaGFyIHNbMTZdOworICAgIGludCBpLCAqcDEsICpwMjsKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisgICAgICAgIHNbaV0gPSBpOworICAgIHAxID0gKGludCopKHMrMSk7CisgICAgcDIgPSAoaW50KikocysyKTsKKyAgICBpZiAoKnAxID09ICpwMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisgICAgICAgICAgICAgIF0sCisgICAgIFthbGlnbmVkX3JlcXVpcmVkPW5vXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSkKKworaWYgdGVzdCAiJGFsaWduZWRfcmVxdWlyZWQiID0geWVzIDsgdGhlbgorICBBQ19ERUZJTkUoW0hBVkVfQUxJR05FRF9SRVFVSVJFRF0sIFsxXSwKKyAgICBbRGVmaW5lIGlmIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZF0pCitmaQorQUNfTVNHX1JFU1VMVCgkYWxpZ25lZF9yZXF1aXJlZCkKKworCisjIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcgaGFzaCBhbGdvcml0aG0KK0FIX1RFTVBMQVRFKFB5X0hBU0hfQUxHT1JJVEhNLAorICBbRGVmaW5lIGhhc2ggYWxnb3JpdGhtIGZvciBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3LgorICAgU2lwSGFzaDI0OiAxLCBGTlY6IDIsIGV4dGVybmFsbHkgZGVmaW5lZDogMF0pCisKK0FDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtKQorZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKK0FDX0FSR19XSVRIKGhhc2hfYWxnb3JpdGhtLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1oYXNoLWFsZ29yaXRobT1APDpAZm52fHNpcGhhc2gyNEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdCBoYXNoIGFsZ29yaXRobV0pLAorWworQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKK2Nhc2UgIiR3aXRodmFsIiBpbgorICAgIHNpcGhhc2gyNCkKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAxKQorICAgICAgICA7OworICAgIGZudikKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAyKQorICAgICAgICA7OworICAgICopCisgICAgICAgIEFDX01TR19FUlJPUihbdW5rbm93biBoYXNoIGFsZ29yaXRobSAnJHdpdGh2YWwnXSkKKyAgICAgICAgOzsKK2VzYWMKK10sCitbQUNfTVNHX1JFU1VMVChkZWZhdWx0KV0pCisKICMgTW9zdCBTVlI0IHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBuZWVkIC1sc29ja2V0IGFuZCAtbG5zbC4KIEFDX0NIRUNLX0xJQihuc2wsIHRfb3BlbiwgW0xJQlM9Ii1sbnNsICRMSUJTIl0pICMgU1ZSNAogQUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0LCBbTElCUz0iLWxzb2NrZXQgJExJQlMiXSwgW10sICRMSUJTKSAjIFNWUjQgc29ja2V0cwpAQCAtMjgyMyw3ICsyOTMzLDcgQEAKIAogIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBBQ19DSEVDS19GVU5DUyhhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAotIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCisgY2xvY2sgY29uZnN0ciBjdGVybWlkIGR1cDMgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAogIGZleGVjdmUgZmRvcGVuZGlyIGZvcmsgZnBhdGhjb25mIGZzdGF0YXQgZnRpbWUgZnRydW5jYXRlIGZ1dGltZXNhdCBcCiAgZnV0aW1lbnMgZnV0aW1lcyBnYWlfc3RyZXJyb3IgXAogIGdldGdyb3VwbGlzdCBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCkBAIC0yODQzLDcgKzI5NTMsNyBAQAogIHNpZ3RpbWVkd2FpdCBzaWd3YWl0IHNpZ3dhaXRpbmZvIHNucHJpbnRmIHN0cmZ0aW1lIHN0cmxjcHkgc3ltbGlua2F0IHN5bmMgXAogIHN5c2NvbmYgdGNnZXRwZ3JwIHRjc2V0cGdycCB0ZW1wbmFtIHRpbWVnbSB0aW1lcyB0bXBmaWxlIHRtcG5hbSB0bXBuYW1fciBcCiAgdHJ1bmNhdGUgdW5hbWUgdW5saW5rYXQgdW5zZXRlbnYgdXRpbWVuc2F0IHV0aW1lcyB3YWl0aWQgd2FpdHBpZCB3YWl0MyB3YWl0NCBcCi0gd2NzY29sbCB3Y3NmdGltZSB3Y3N4ZnJtIHdyaXRldiBfZ2V0cHR5KQorIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3bWVtY21wIHdyaXRldiBfZ2V0cHR5KQogCiBBQ19DSEVDS19ERUNMKGRpcmZkLAogICAgIEFDX0RFRklORShIQVZFX0RJUkZELCAxLApAQCAtMjkxMCw2ICszMDIwLDE2IEBACiAgICBBQ19NU0dfUkVTVUxUKHllcyldLAogICBbQUNfTVNHX1JFU1VMVChubykKIF0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHBybGltaXQpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyAgICBdXSwgW1t2b2lkICp4PXBybGltaXRdXSldLAorICBbQUNfREVGSU5FKEhBVkVfUFJMSU1JVCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVuY3Rpb25zLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKKwogIyBPbiBzb21lIHN5c3RlbXMgKGVnLiBGcmVlQlNEIDUpLCB3ZSB3b3VsZCBmaW5kIGEgZGVmaW5pdGlvbiBvZiB0aGUKICMgZnVuY3Rpb25zIGN0ZXJtaWRfciwgc2V0Z3JvdXBzIGluIHRoZSBsaWJyYXJ5LCBidXQgbm8gcHJvdG90eXBlCiAjIChlLmcuIGJlY2F1c2Ugd2UgdXNlIF9YT1BFTl9TT1VSQ0UpLiBTZWUgd2hldGhlciB3ZSBjYW4gdGFrZSB0aGVpcgpAQCAtMzExMCw3ICszMjMwLDcgQEAKICMgY2hlY2sgZm9yIGxvbmcgZmlsZSBzdXBwb3J0IGZ1bmN0aW9ucwogQUNfQ0hFQ0tfRlVOQ1MoZnNlZWs2NCBmc2Vla28gZnN0YXR2ZnMgZnRlbGw2NCBmdGVsbG8gc3RhdHZmcykKIAotQUNfUkVQTEFDRV9GVU5DUyhkdXAyIGdldGN3ZCBzdHJkdXApCitBQ19SRVBMQUNFX0ZVTkNTKGR1cDIgc3RyZHVwKQogQUNfQ0hFQ0tfRlVOQ1MoZ2V0cGdycCwgCiAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbZ2V0cGdycCgwKTtdXSldLAogICAgIFtBQ19ERUZJTkUoR0VUUEdSUF9IQVZFX0FSRywgMSwgW0RlZmluZSBpZiBnZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgZ2V0cGdycCgwKS5dKV0sCkBAIC0zOTgzLDYgKzQxMDMsMTEgQEAKIExEVkVSU0lPTj0nJChWRVJTSU9OKSQoQUJJRkxBR1MpJwogQUNfTVNHX1JFU1VMVCgkTERWRVJTSU9OKQogCitkbmwgZGVmaW5lIExJQlBMIGFmdGVyIEFCSUZMQUdTIGFuZCBMRFZFUlNJT04gaXMgZGVmaW5lZC4KK0FDX1NVQlNUKFBZX0VOQUJMRV9TSEFSRUQpCitMSUJQTD0iJHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCitBQ19TVUJTVChMSUJQTCkKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcmlnaHQgc2hpZnQgZXh0ZW5kcyB0aGUgc2lnbiBiaXQpCkBAIC00MjcyLDggKzQzOTcsMTkgQEAKICAgW0RlZmluZSBpZiB5b3UgaGF2ZSBzdHJ1Y3Qgc3RhdC5zdF9tdGltZW5zZWNdKQogZmkKIAorIyBmaXJzdCBjdXJzZXMgaGVhZGVyIGNoZWNrCiBhY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCiBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgorCitBQ19DSEVDS19IRUFERVJTKGN1cnNlcy5oIG5jdXJzZXMuaCkKKworIyBPbiBTb2xhcmlzLCB0ZXJtLmggcmVxdWlyZXMgY3Vyc2VzLmgKK0FDX0NIRUNLX0hFQURFUlModGVybS5oLCwsWworI2lmZGVmIEhBVkVfQ1VSU0VTX0gKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKyNlbmRpZgorXSkKKwogIyBPbiBIUC9VWCAxMS4wLCBtdndkZWxjaCBpcyBhIGJsb2NrIHdpdGggYSByZXR1cm4gc3RhdGVtZW50CiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBtdndkZWxjaCBpcyBhbiBleHByZXNzaW9uKQogQUNfQ0FDSEVfVkFMKGFjX2N2X212d2RlbGNoX2lzX2V4cHJlc3Npb24sCkBAIC00NjYxLDggKzQ3OTcsMjMgQEAKICAgICBlc2FjCiBmaQogCisjIGVuc3VyZXBpcCBvcHRpb24KK0FDX01TR19DSEVDS0lORyhmb3IgZW5zdXJlcGlwKQorQUNfQVJHX1dJVEgoZW5zdXJlcGlwLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktZW5zdXJlcGlwPUA8OkA9dXBncmFkZUA6PkBdLAorICAgICAgICBbImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcF0pXSwKKyAgICBbXSwKKyAgICBbd2l0aF9lbnN1cmVwaXA9dXBncmFkZV0pCitBU19DQVNFKCR3aXRoX2Vuc3VyZXBpcCwKKyAgICBbeWVzfHVwZ3JhZGVdLFtFTlNVUkVQSVA9dXBncmFkZV0sCisgICAgW2luc3RhbGxdLFtFTlNVUkVQSVA9aW5zdGFsbF0sCisgICAgW25vXSxbRU5TVVJFUElQPW5vXSwKKyAgICBbQUNfTVNHX0VSUk9SKFstLXdpdGgtZW5zdXJlcGlwPXVwZ3JhZGV8aW5zdGFsbHxub10pXSkKK0FDX01TR19SRVNVTFQoJEVOU1VSRVBJUCkKK0FDX1NVQlNUKEVOU1VSRVBJUCkKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLUFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMpCitBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCkKIEFDX0NPTkZJR19GSUxFUyhbTW9kdWxlcy9sZF9zb19haXhdLCBbY2htb2QgK3ggTW9kdWxlcy9sZF9zb19haXhdKQogQUNfT1VUUFVUCiAKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IDAwMjAzMDAuLjM1NzRmNjcgMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtNDksNiArNDksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BTEFSTQogCisvKiBEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkICovCisjdW5kZWYgSEFWRV9BTElHTkVEX1JFUVVJUkVECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfQUxMT0NBX0gKIApAQCAtNjQsOSArNjcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BVEFOSAogCi0vKiBEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpICovCi0jdW5kZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiaW5kX3RleHRkb21haW5fY29kZXNldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVAogCkBAIC0xOTYsOSArMTk2LDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDInIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRFVQMgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRFVQMworCiAvKiBEZWZpbmVkIHdoZW4gYW55IGR5bmFtaWMgbW9kdWxlIGxvYWRpbmcgaXMgZW5hYmxlZC4gKi8KICN1bmRlZiBIQVZFX0RZTkFNSUNfTE9BRElORwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VORElBTl9ICisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Vwb2xsJyBmdW5jdGlvbnMuICovCiAjdW5kZWYgSEFWRV9FUE9MTAogCkBAIC0zMjAsOSArMzI2LDYgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRBRERSSU5GTwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGN3ZCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9HRVRDV0QKLQogLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgZmxvY2tmaWxlKCksIGdldGNfdW5sb2NrZWQoKSwgYW5kIGZ1bmxvY2tmaWxlKCkgKi8KICN1bmRlZiBIQVZFX0dFVENfVU5MT0NLRUQKIApAQCAtNDExLDYgKzQxNCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdoc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSFNUUkVSUk9SCiAKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxlNjR0b2goKSAqLworI3VuZGVmIEhBVkVfSFRPTEU2NAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0hZUE9UCiAKQEAgLTUwNCw2ICs1MTAsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaW5rYXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTElOS0FUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL2JjbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX0NBTl9ICiAKQEAgLTYyNyw2ICs2MzYsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QUkVBRAogCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuICovCisjdW5kZWYgSEFWRV9QUkxJTUlUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BST0NFU1NfSAogCkBAIC05MjQsNiArOTM2LDkgQEAKICAgICovCiAjdW5kZWYgSEFWRV9TWVNfRElSX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZW5kaWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0VORElBTl9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2Vwb2xsLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX0VQT0xMX0gKIApAQCAtMTEyMSw2ICsxMTM2LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NzeGZybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9XQ1NYRlJNCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd21lbWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XTUVNQ01QCisKIC8qIERlZmluZSBpZiB0enNldCgpIGFjdHVhbGx5IHN3aXRjaGVzIHRoZSBsb2NhbCB0aW1lem9uZSBpbiBhIG1lYW5pbmdmdWwgd2F5LgogICAgKi8KICN1bmRlZiBIQVZFX1dPUktJTkdfVFpTRVQKQEAgLTExODcsNiArMTIwNSwxMCBAQAogLyogRGVmaW5lZCBpZiBQeXRob24gaXMgYnVpbHQgYXMgYSBzaGFyZWQgbGlicmFyeS4gKi8KICN1bmRlZiBQeV9FTkFCTEVfU0hBUkVECiAKKy8qIERlZmluZSBoYXNoIGFsZ29yaXRobSBmb3Igc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldy4gU2lwSGFzaDI0OiAxLCBGTlY6IDIsCisgICBleHRlcm5hbGx5IGRlZmluZWQ6IDAgKi8KKyN1bmRlZiBQeV9IQVNIX0FMR09SSVRITQorCiAvKiBhc3N1bWUgQzg5IHNlbWFudGljcyB0aGF0IFJFVFNJR1RZUEUgaXMgYWx3YXlzIHZvaWQgKi8KICN1bmRlZiBSRVRTSUdUWVBFCiAKQEAgLTEzNjAsNiArMTM4Miw5IEBACiAvKiBEZWZpbmUgb24gTGludXggdG8gYWN0aXZhdGUgYWxsIGxpYnJhcnkgZmVhdHVyZXMgKi8KICN1bmRlZiBfR05VX1NPVVJDRQogCisvKiBEZWZpbmUgdG8gaW5jbHVkZSBtYnN0YXRlX3QgZm9yIG1icnRvd2MgKi8KKyN1bmRlZiBfSU5DTFVERV9fU1REQ19BMV9TT1VSQ0UKKwogLyogVGhpcyBtdXN0IGJlIGRlZmluZWQgb24gc29tZSBzeXN0ZW1zIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQuICovCiAjdW5kZWYgX0xBUkdFRklMRV9TT1VSQ0UKIApkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQppbmRleCBkNTk0ZTAyLi41ZDRmNDQ0IDEwMDY0NAotLS0gYS9zZXR1cC5weQorKysgYi9zZXR1cC5weQpAQCAtMSw4ICsxLDEwIEBACiAjIEF1dG9kZXRlY3Rpbmcgc2V0dXAucHkgc2NyaXB0IGZvciBidWlsZGluZyB0aGUgUHl0aG9uIGV4dGVuc2lvbnMKICMKIAotaW1wb3J0IHN5cywgb3MsIGltcCwgcmUsIG9wdHBhcnNlCitpbXBvcnQgc3lzLCBvcywgaW1wb3J0bGliLm1hY2hpbmVyeSwgcmUsIG9wdHBhcnNlCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKK2ltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzY29uZmlnCiAKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKQEAgLTE3LDYgKzE5LDEyIEBACiAKIGNyb3NzX2NvbXBpbGluZyA9ICJfUFlUSE9OX0hPU1RfUExBVEZPUk0iIGluIG9zLmVudmlyb24KIAorIyBBZGQgc3BlY2lhbCBDRkxBR1MgcmVzZXJ2ZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbnRlcnByZXRlciBhbmQgdGhlIHN0ZGxpYgorIyBtb2R1bGVzIChJc3N1ZSAjMjExMjEpLgorY2ZsYWdzID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKQorcHlfY2ZsYWdzX25vZGlzdCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlfQ0ZMQUdTX05PRElTVCcpCitzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gY2ZsYWdzICsgJyAnICsgcHlfY2ZsYWdzX25vZGlzdAorCiBkZWYgZ2V0X3BsYXRmb3JtKCk6CiAgICAgIyBjcm9zcyBidWlsZAogICAgIGlmICJfUFlUSE9OX0hPU1RfUExBVEZPUk0iIGluIG9zLmVudmlyb246CkBAIC0yNTksOCArMjY3LDkgQEAKIAogICAgICAgICBpZiBtaXNzaW5nOgogICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgcHJpbnQoIlB5dGhvbiBidWlsZCBmaW5pc2hlZCwgYnV0IHRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCAiCi0gICAgICAgICAgICAgICAgICAgInRoZXNlIG1vZHVsZXMgd2VyZSBub3QgZm91bmQ6IikKKyAgICAgICAgICAgIHByaW50KCJQeXRob24gYnVpbGQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5ISIpCisgICAgICAgICAgICBwcmludCgiVGhlIG5lY2Vzc2FyeSBiaXRzIHRvIGJ1aWxkIHRoZXNlIG9wdGlvbmFsIG1vZHVsZXMgd2VyZSBub3QgIgorICAgICAgICAgICAgICAgICAgImZvdW5kOiIpCiAgICAgICAgICAgICBwcmludF90aHJlZV9jb2x1bW4obWlzc2luZykKICAgICAgICAgICAgIHByaW50KCJUbyBmaW5kIHRoZSBuZWNlc3NhcnkgYml0cywgbG9vayBpbiBzZXR1cC5weSBpbiIKICAgICAgICAgICAgICAgICAgICIgZGV0ZWN0X21vZHVsZXMoKSBmb3IgdGhlIG1vZHVsZSdzIG5hbWUuIikKQEAgLTMyNSw4ICszMzQsMTEgQEAKICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dC5uYW1lLCBleHRfZmlsZW5hbWUpCisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihleHQubmFtZSwgZXh0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYyhleHQubmFtZSwgZXh0X2ZpbGVuYW1lKQorICAgICAgICAgICAgaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmxvYWQoKQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgc2VsZi5mYWlsZWQuYXBwZW5kKGV4dC5uYW1lKQogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnKioqIFdBUk5JTkc6IHJlbmFtaW5nICIlcyIgc2luY2UgaW1wb3J0aW5nIGl0JwpAQCAtNTg4LDEwICs2MDAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsndGVzdGNhcGlfbG9uZy5oJ10pICkKICAgICAgICAgIyBQeXRob24gUEVQLTMxMTggKGJ1ZmZlciBwcm90b2NvbCkgdGVzdCBtb2R1bGUKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3Rlc3RidWZmZXInLCBbJ190ZXN0YnVmZmVyLmMnXSkgKQorICAgICAgICAjIFRlc3QgbG9hZGluZyBtdWx0aXBsZSBtb2R1bGVzIGZyb20gb25lIGNvbXBpbGVkIGZpbGUgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNjQyMSkKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3Rlc3RpbXBvcnRtdWx0aXBsZScsIFsnX3Rlc3RpbXBvcnRtdWx0aXBsZS5jJ10pICkKICAgICAgICAgIyBwcm9maWxlciAoX2xzcHJvZiBpcyBmb3IgY1Byb2ZpbGUucHkpCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19sc3Byb2YnLCBbJ19sc3Byb2YuYycsICdyb3RhdGluZ3RyZWUuYyddKSApCiAgICAgICAgICMgc3RhdGljIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3VuaWNvZGVkYXRhJywgWyd1bmljb2RlZGF0YS5jJ10pICkKKyAgICAgICAgIyBfb3Bjb2RlIG1vZHVsZQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfb3Bjb2RlJywgWydfb3Bjb2RlLmMnXSkgKQogCiAgICAgICAgICMgTW9kdWxlcyB3aXRoIHNvbWUgVU5JWCBkZXBlbmRlbmNpZXMgLS0gb24gYnkgZGVmYXVsdDoKICAgICAgICAgIyAoSWYgeW91IGhhdmUgYSByZWFsbHkgYmFja3dhcmQgVU5JWCwgc2VsZWN0IGFuZCBzb2NrZXQgbWF5IG5vdCBiZQpAQCAtNjg3LDcgKzcwMyw5IEBACiAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICBvc19yZWxlYXNlID0gaW50KG9zLnVuYW1lKClbMl0uc3BsaXQoJy4nKVswXSkKICAgICAgICAgICAgIGRlcF90YXJnZXQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCi0gICAgICAgICAgICBpZiBkZXBfdGFyZ2V0IGFuZCBkZXBfdGFyZ2V0LnNwbGl0KCcuJykgPCBbJzEwJywgJzUnXToKKyAgICAgICAgICAgIGlmIChkZXBfdGFyZ2V0IGFuZAorICAgICAgICAgICAgICAgICAgICAodHVwbGUoaW50KG4pIGZvciBuIGluIGRlcF90YXJnZXQuc3BsaXQoJy4nKVswOjJdKQorICAgICAgICAgICAgICAgICAgICAgICAgPCAoMTAsIDUpICkgKToKICAgICAgICAgICAgICAgICBvc19yZWxlYXNlID0gOAogICAgICAgICAgICAgaWYgb3NfcmVsZWFzZSA8IDk6CiAgICAgICAgICAgICAgICAgIyBNYWNPU1ggMTAuNCBoYXMgYSBicm9rZW4gcmVhZGxpbmUuIERvbid0IHRyeSB0byBidWlsZApAQCAtNzg0LDEwICs4MDIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5jZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBvcGVuc3NsX3Zlcl9yZS5tYXRjaChsaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuc3NsX3ZlciA9IGV2YWwobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuc3NsX3ZlciA9IGludChtLmdyb3VwKDEpLCAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHByaW50KCJJT0Vycm9yIHdoaWxlIHJlYWRpbmcgb3BlbnNzaHYuaDoiLCBtc2cpCi0gICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICNwcmludCgnb3BlbnNzbF92ZXIgPSAweCUwOHgnICUgb3BlbnNzbF92ZXIpCiAgICAgICAgIG1pbl9vcGVuc3NsX3ZlciA9IDB4MDA5MDcwMDAKQEAgLTEwMTIsOCArMTAzMCwxNiBAQAogICAgICAgICAgICAgaWYgZGJfc2V0dXBfZGVidWc6CiAgICAgICAgICAgICAgICAgcHJpbnQoImJzZGRiIHVzaW5nIEJlcmtlbGV5REIgbGliOiIsIGRiX3ZlciwgZGJsaWIpCiAgICAgICAgICAgICAgICAgcHJpbnQoImJzZGRiIGxpYiBkaXI6IiwgZGJsaWJfZGlyLCAiIGluYyBkaXI6IiwgZGJfaW5jZGlyKQotICAgICAgICAgICAgZGJfaW5jcyA9IFtkYl9pbmNkaXJdCiAgICAgICAgICAgICBkYmxpYnMgPSBbZGJsaWJdCisgICAgICAgICAgICAjIE9ubHkgYWRkIHRoZSBmb3VuZCBsaWJyYXJ5IGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGlmIHRoZXkgYXJlbid0CisgICAgICAgICAgICAjIGFscmVhZHkgYmVpbmcgc2VhcmNoZWQuIFRoaXMgYXZvaWRzIGFuIGV4cGxpY2l0IHJ1bnRpbWUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmN5LgorICAgICAgICAgICAgaWYgZGJfaW5jZGlyIGluIGluY19kaXJzOgorICAgICAgICAgICAgICAgIGRiX2luY3MgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRiX2luY3MgPSBbZGJfaW5jZGlyXQorICAgICAgICAgICAgaWYgZGJsaWJfZGlyWzBdIGluIGxpYl9kaXJzOgorICAgICAgICAgICAgICAgIGRibGliX2RpciA9IE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGRiX3NldHVwX2RlYnVnOiBwcmludCgiZGI6IG5vIGFwcHJvcHJpYXRlIGxpYnJhcnkgZm91bmQiKQogICAgICAgICAgICAgZGJfaW5jcyA9IE5vbmUKQEAgLTExMjQsNiArMTE1MCw5IEBACiAgICAgICAgICAgICAjIGNhbiBlbmQgdXAgd2l0aCBhIGJhZCBzZWFyY2ggcGF0aCBvcmRlci4KICAgICAgICAgICAgIGlmIHNxbGl0ZV9pbmNkaXIgbm90IGluIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzOgogICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoc3FsaXRlX2luY2RpcikKKyAgICAgICAgICAgICMgYXZvaWQgYSBydW50aW1lIGxpYnJhcnkgcGF0aCBmb3IgYSBzeXN0ZW0gbGlicmFyeSBkaXIKKyAgICAgICAgICAgIGlmIHNxbGl0ZV9saWJkaXIgYW5kIHNxbGl0ZV9saWJkaXJbMF0gaW4gbGliX2RpcnM6CisgICAgICAgICAgICAgICAgc3FsaXRlX2xpYmRpciA9IE5vbmUKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKEV4dGVuc2lvbignX3NxbGl0ZTMnLCBzcWxpdGVfc3JjcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPXNxbGl0ZV9kZWZpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1pbmNsdWRlX2RpcnMsCkBAIC0xMTkyLDcgKzEyMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBnZGJtX2xpYnMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBlbGlmIGNhbmQgPT0gImJkYiI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGRiX2luY3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGRibGliczoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRibV9zZXR1cF9kZWJ1ZzogcHJpbnQoImJ1aWxkaW5nIGRibSB1c2luZyBiZGIiKQogICAgICAgICAgICAgICAgICAgICAgICAgZGJtZXh0ID0gRXh0ZW5zaW9uKCdfZGJtJywgWydfZGJtbW9kdWxlLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLApAQCAtMTUwOCwxMCArMTUzNyw2IEBACiAKICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19nZXN0YWx0JywgWydfZ2VzdGFsdC5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bJy1mcmFtZXdvcmsnLCAnQ2FyYm9uJ10pCi0gICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19zY3Byb3h5JywgWydfc2Nwcm94eS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZyYW1ld29yaycsICdTeXN0ZW1Db25maWd1cmF0aW9uJywKQEAgLTE1MzIsNyArMTU1Nyw3IEBACiAKICAgICAgICAgaWYgJ2QnIG5vdCBpbiBzeXMuYWJpZmxhZ3M6CiAgICAgICAgICAgICBleHQgPSBFeHRlbnNpb24oJ3h4bGltaXRlZCcsIFsneHhsaW1pdGVkLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsoJ1B5X0xJTUlURURfQVBJJywgMSldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnUHlfTElNSVRFRF9BUEknLCAnMHgwMzA0MDAwMCcpXSkKICAgICAgICAgICAgIHNlbGYuZXh0ZW5zaW9ucy5hcHBlbmQoZXh0KQogCiAgICAgICAgIHJldHVybiBtaXNzaW5nCkBAIC0yMTU1LDcgKzIxODAsNyBAQAogcHJvZ3JhbW1hYmxlIGludGVyZmFjZS4KIAogVGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBpcyBwb3J0YWJsZTogaXQgcnVucyBvbiBtYW55IGJyYW5kcyBvZiBVTklYLAotb24gV2luZG93cywgRE9TLCBPUy8yLCBNYWMsIEFtaWdhLi4uIElmIHlvdXIgZmF2b3JpdGUgc3lzdGVtIGlzbid0CitvbiBXaW5kb3dzLCBET1MsIE1hYywgQW1pZ2EuLi4gSWYgeW91ciBmYXZvcml0ZSBzeXN0ZW0gaXNuJ3QKIGxpc3RlZCBoZXJlLCBpdCBtYXkgc3RpbGwgYmUgc3VwcG9ydGVkLCBpZiB0aGVyZSdzIGEgQyBjb21waWxlciBmb3IKIGl0LiBBc2sgYXJvdW5kIG9uIGNvbXAubGFuZy5weXRob24gLS0gb3IganVzdCB0cnkgY29tcGlsaW5nIFB5dGhvbgogeW91cnNlbGYuCg==